diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000..50f94ec070 Binary files /dev/null and b/.DS_Store differ diff --git a/.circleci/config.yml b/.circleci/config.yml index c459d04c0a..2d10a3e348 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 -orbs: - codecov: codecov/codecov@1.0.2 +#orbs: +# codecov: codecov/codecov@1.0.2 params: sector_builder_tests_param: §or_builder_tests_param @@ -29,7 +29,7 @@ jobs: build_macos: macos: xcode: "10.0.0" - working_directory: ~/go/src/github.com/filecoin-project/go-filecoin + working_directory: ~/go/src/github.com/filecoin-project/venus resource_class: large steps: - run: @@ -40,26 +40,26 @@ jobs: echo 'source $BASH_ENV' >> $HOME/.bashrc - add_ssh_keys: fingerprints: - - "1e:73:c5:15:75:e0:e4:98:54:3c:2b:9e:e8:94:14:2e" + - "1e:73:c5:15:75:e0:e4:98:54:3c:2b:9e:e8:94:14:2e" - checkout - update_submodules - generate_rust_submodules_checksums - restore_cache: - key: v9-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/go-filecoin/build/main.go" }}-{{ checksum "~/go/src/github.com/filecoin-project/go-filecoin/go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} + key: v9-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/venus/build/main.go" }}-{{ checksum "~/go/src/github.com/filecoin-project/venus/go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} # The second checkout ensures we have the most recent code since the - # restore_cache step above can override the go-filecoin code with cached code + # restore_cache step above can override the venus code with cached code - git_fetch_all_tags - checkout - - restore_cache: - key: v26.0-proof-params-{{ arch }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - run: name: Install go command: | - curl -O https://dl.google.com/go/go1.13.4.darwin-amd64.pkg && \ - sudo installer -pkg go1.13.4.darwin-amd64.pkg -target / + curl -O https://dl.google.com/go/go1.16.4.darwin-amd64.pkg && \ + sudo installer -pkg go1.16.4.darwin-amd64.pkg -target / - run: name: Install pkg-config - command: HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config + command: | + HOMEBREW_NO_AUTO_UPDATE=1 brew install pkg-config + HOMEBREW_NO_AUTO_UPDATE=1 brew install hwloc - run: go version - run: name: Install Rust @@ -80,11 +80,7 @@ jobs: # groth parameters are generated by the paramcache binary, run as part # of both deps and smartdeps commands - save_cache: - key: v26.0-proof-params-{{ arch }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - paths: - - "~/filecoin-proof-parameters/" - - save_cache: - key: v9-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/go-filecoin/build/main.go" }}-{{ checksum "~/go/src/github.com/filecoin-project/go-filecoin/go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} + key: v9-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/venus/build/main.go" }}-{{ checksum "~/go/src/github.com/filecoin-project/venus/go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} paths: - "~/go/pkg" - "~/go/src/gx" @@ -108,7 +104,7 @@ jobs: name: Create macos bundle command: ./scripts/build-bundle.sh - store_artifacts: - path: "~/go/src/github.com/filecoin-project/go-filecoin/bundle/" + path: "~/go/src/github.com/filecoin-project/venus/bundle/" destination: bundle - store_test_results: path: test-results @@ -119,8 +115,10 @@ jobs: deps_linux: docker: - - image: circleci/golang:1.13.1-stretch - working_directory: /go/src/github.com/filecoin-project/go-filecoin + - image: circleci/golang:1.16.4 + environment: + GOPROXY: "https://goproxy.cn,direct" + working_directory: /go/src/github.com/filecoin-project/venus resource_class: xlarge steps: - linux_configure @@ -140,11 +138,9 @@ jobs: - v9-go-deps-{{ .Branch }}-{{ arch }}-{{ checksum "build/main.go" }}-{{ checksum "go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - v9-go-deps-{{ arch }}-{{ checksum "build/main.go" }}-{{ checksum "go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} # The second checkout ensures we have the most recent code since the - # restore_cache step above can override the go-filecoin code with cached code + # restore_cache step above can override the venus code with cached code - git_fetch_all_tags - checkout - - restore_cache: - key: v26.0-proof-params-{{ arch }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - run: name: Install Rust toolchain (for rust-fil-proofs) command: | @@ -154,10 +150,6 @@ jobs: no_output_timeout: "60m" # groth parameters are generated by the paramcache binary, run as part # of both deps and smartdeps commands - - save_cache: - key: v26.0-proof-params-{{ arch }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - paths: - - "/home/circleci/filecoin-proof-parameters/" - save_cache: key: v9-go-deps-{{ arch }}-{{ checksum "build/main.go" }}-{{ checksum "go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} paths: @@ -179,8 +171,10 @@ jobs: build_linux: docker: - - image: circleci/golang:1.13.1-stretch - working_directory: /go/src/github.com/filecoin-project/go-filecoin + - image: circleci/golang:1.16.2-stretch + environment: + GOPROXY: "https://goproxy.cn,direct" + working_directory: /go/src/github.com/filecoin-project/venus resource_class: xlarge parameters: <<: *nightly_param @@ -190,6 +184,7 @@ jobs: fingerprints: - "1e:73:c5:15:75:e0:e4:98:54:3c:2b:9e:e8:94:14:2e" - checkout + - clone_lotus - update_submodules # Save the Git SHA of the rust-fil-proofs submodule so that we can use it when creating a cache key - generate_rust_submodules_checksums @@ -198,15 +193,16 @@ jobs: - v9-go-deps-{{ .Branch }}-{{ arch }}-{{ checksum "build/main.go" }}-{{ checksum "go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - v9-go-deps-{{ arch }}-{{ checksum "build/main.go" }}-{{ checksum "go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} # The second checkout ensures we have the most recent code since the - # restore_cache step above can override the go-filecoin code with cached code + # restore_cache step above can override the venus code with cached code - git_fetch_all_tags - checkout - - restore_cache: - key: v26.0-proof-params-{{ arch }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - go_build: cmd: "lint" - go_build: cmd: "build" + #- go_build: + # cmd: "gen-api" + #- check_file_change # place the filecoin binary in PATH for IPTB - go_build: cmd: "install" @@ -218,7 +214,7 @@ jobs: name: Create linux bundle command: ./scripts/build-bundle.sh - store_artifacts: - path: "/go/src/github.com/filecoin-project/go-filecoin/bundle/" + path: "/go/src/github.com/filecoin-project/venus/bundle/" destination: bundle - when: condition: << parameters.nightly >> @@ -230,14 +226,16 @@ jobs: - "bundle/" - "tools/gengen/gengen" - "fixtures" - - "go-filecoin" + - "venus" - "tools" unit_test_linux: docker: - - image: circleci/golang:1.13.1-stretch + - image: circleci/golang:1.16.2-stretch + environment: + GOPROXY: "https://goproxy.cn,direct" parallelism: 2 # Check .codecov.yml "after_n_builds" if changing this - working_directory: /go/src/github.com/filecoin-project/go-filecoin + working_directory: /go/src/github.com/filecoin-project/venus resource_class: xlarge steps: - linux_configure @@ -253,11 +251,11 @@ jobs: - v9-go-deps-{{ .Branch }}-{{ arch }}-{{ checksum "build/main.go" }}-{{ checksum "go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - v9-go-deps-{{ arch }}-{{ checksum "build/main.go" }}-{{ checksum "go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} # The second checkout ensures we have the most recent code since the - # restore_cache step above can override the go-filecoin code with cached code + # restore_cache step above can override the venus code with cached code - git_fetch_all_tags - checkout - - restore_cache: - key: v26.0-proof-params-{{ arch }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} + - go_build: + cmd: "build" - mkdir_test_results - go_test: functional: false @@ -267,9 +265,11 @@ jobs: integration_test_linux: docker: - - image: circleci/golang:1.13.1-stretch + - image: circleci/golang:1.16.2-stretch + environment: + GOPROXY: "https://goproxy.cn,direct" parallelism: 2 # Check .codecov.yml "after_n_builds" if changing this - working_directory: /go/src/github.com/filecoin-project/go-filecoin + working_directory: /go/src/github.com/filecoin-project/venus resource_class: xlarge steps: - linux_configure @@ -285,11 +285,11 @@ jobs: - v9-go-deps-{{ .Branch }}-{{ arch }}-{{ checksum "build/main.go" }}-{{ checksum "go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - v9-go-deps-{{ arch }}-{{ checksum "build/main.go" }}-{{ checksum "go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} # The second checkout ensures we have the most recent code since the - # restore_cache step above can override the go-filecoin code with cached code + # restore_cache step above can override the venus code with cached code - git_fetch_all_tags - checkout - - restore_cache: - key: v26.0-proof-params-{{ arch }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} + - go_build: + cmd: "build" - attach_workspace: at: "." - mkdir_test_results @@ -301,9 +301,11 @@ jobs: functional_test_linux: docker: - - image: circleci/golang:1.13.1-stretch + - image: circleci/golang:1.16.2-stretch + environment: + GOPROXY: "https://goproxy.cn,direct" parallelism: 2 - working_directory: /go/src/github.com/filecoin-project/go-filecoin + working_directory: /go/src/github.com/filecoin-project/venus resource_class: xlarge parameters: <<: *sector_builder_tests_param @@ -321,11 +323,11 @@ jobs: - v9-go-deps-{{ .Branch }}-{{ arch }}-{{ checksum "build/main.go" }}-{{ checksum "go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - v9-go-deps-{{ arch }}-{{ checksum "build/main.go" }}-{{ checksum "go.mod" }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} # The second checkout ensures we have the most recent code since the - # restore_cache step above can override the go-filecoin code with cached code + # restore_cache step above can override the venus code with cached code - git_fetch_all_tags - checkout - - restore_cache: - key: v26.0-proof-params-{{ arch }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} + - go_build: + cmd: "build" - attach_workspace: at: "." - mkdir_test_results @@ -339,7 +341,9 @@ jobs: publish_release: docker: - - image: circleci/golang:1.13.1-stretch + - image: circleci/golang:1.16.2-stretch + environment: + GOPROXY: "https://goproxy.cn,direct" resource_class: small parameters: <<: *nightly_param @@ -365,7 +369,9 @@ jobs: build_docker_img: docker: - - image: circleci/golang:1.13.1-stretch + - image: circleci/golang:1.16.2-stretch + environment: + GOPROXY: "https://goproxy.cn,direct" resource_class: xlarge parameters: <<: *nightly_param @@ -395,8 +401,6 @@ jobs: - generate_rust_submodules_checksums - attach_workspace: at: "." - - restore_cache: - key: v26.0-proof-params-{{ arch }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - run: name: build a base image command: | @@ -438,8 +442,6 @@ jobs: docker tag 657871693752.dkr.ecr.us-east-1.amazonaws.com/filecoin-faucet:$SHORT_GIT_SHA 657871693752.dkr.ecr.us-east-1.amazonaws.com/filecoin-faucet:${FILECOIN_BINARY_VERSION} docker push 657871693752.dkr.ecr.us-east-1.amazonaws.com/filecoin-faucet:${FILECOIN_BINARY_VERSION} fi - - restore_cache: - key: v26.0-proof-params-large-{{ arch }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - run: name: build & push image - filecoin command: | @@ -456,14 +458,12 @@ jobs: docker tag 657871693752.dkr.ecr.us-east-1.amazonaws.com/filecoin:$SHORT_GIT_SHA 657871693752.dkr.ecr.us-east-1.amazonaws.com/filecoin:${FILECOIN_BINARY_VERSION} docker push 657871693752.dkr.ecr.us-east-1.amazonaws.com/filecoin:${FILECOIN_BINARY_VERSION} fi - - save_cache: - key: v26.0-proof-params-large-{{ arch }}-{{ checksum "/tmp/filecoin-ffi-checksum.txt" }} - paths: - - "./filecoin-proof-parameters/" trigger_nightly_devnet_deploy: docker: - - image: circleci/golang:1.13.1-stretch + - image: circleci/golang:1.16.2-stretch + environment: + GOPROXY: "https://goproxy.cn,direct" resource_class: small steps: - setup_remote_docker @@ -477,10 +477,10 @@ jobs: - run: name: create & push git tag command: | - git config user.email dev-helper@filecoin.io + git config user.email dev-helper@filecoin.cn git config user.name filecoin-helper git tag -f -a ${FILECOIN_BINARY_VERSION} -m "$(date -u '+%Y-%m-%dT%H:%M:%S%z')" - git push -f https://${GITHUB_TOKEN}@github.com/filecoin-project/go-filecoin.git ${FILECOIN_BINARY_VERSION} + git push -f https://${GITHUB_TOKEN}@github.com/filecoin-project/venus.git ${FILECOIN_BINARY_VERSION} - trigger_infra_build: job: deploy_nightly_devnet branch: filecoin-nightly @@ -499,7 +499,9 @@ jobs: <<: *user_devnet_param <<: *staging_devnet_param docker: - - image: circleci/golang:1.13.1-stretch + - image: circleci/golang:1.16.2-stretch + environment: + GOPROXY: "https://goproxy.cn,direct" resource_class: small steps: - checkout @@ -550,7 +552,7 @@ workflows: - deps_linux - unit_test_linux: requires: - - deps_linux + - build_linux - integration_test_linux: requires: - build_linux @@ -751,6 +753,21 @@ commands: name: fetch all tags command: | git fetch --all + clone_lotus: + steps: + - run: + name: Clone lotus + command: | + mkdir -p ${GOPATH}/pkg/mod/github.com/filecoin-project + cd ${GOPATH}/pkg/mod/github.com/filecoin-project + git clone -b v1.12.0 https://github.com/filecoin-project/lotus.git + check_file_change: + steps: + - run: + name: Check api file change + command: | + cd /go/src/github.com/filecoin-project/venus + bash ./scripts/check_api_file_change.sh go_build: parameters: cmd: @@ -775,25 +792,38 @@ commands: type: boolean default: false steps: + - run: + name: install params file + command: | + ./venus fetch --size 0 + - run: + name: install statediff globally + command: | + ## statediff is optional; we succeed even if compilation fails. + mkdir -p /tmp/statediff + git clone https://github.com/filecoin-project/statediff.git /tmp/statediff + cd /tmp/statediff + go install ./cmd/statediff || exit 0 - run: name: Test no_output_timeout: 30m command: | trap "go run github.com/jstemmer/go-junit-report < test-results/go-test-suite/go-test.out > test-results/go-test-suite/go-test-report.xml" EXIT export TEST_PACKAGES="$(go list ./... | circleci tests split)" + # Parallelism and timeout set to support medium-class containers, for builds on forked repos. - go run ./build test -cover -coverprofile coverage.out -covermode=atomic -timeout=30m -parallel=4 -functional=<< parameters.functional >> -integration=<< parameters.integration >> -sectorbuilder=<< parameters.sector_builder_tests >> -unit=<< parameters.unit >> -v 2>&1 | tee test-results/go-test-suite/go-test.out + go run ./build test -cover -coverprofile coverage.out -covermode=atomic -timeout=30m -parallel=4 -functional=<< parameters.functional >> -integration=<< parameters.integration >> -unit=<< parameters.unit >> -v 2>&1 | tee test-results/go-test-suite/go-test.out mkdir -p /tmp/artifacts mv coverage.out /tmp/artifacts/coverage.out - - codecov/upload: - file: /tmp/artifacts/coverage.out +# - codecov/upload: +# file: /tmp/artifacts/coverage.out linux_configure: steps: - run: name: Install OpenCL, a build-time requirement of libfilecoin command: | sudo apt-get update - sudo apt-get install ocl-icd-opencl-dev + sudo apt-get install ocl-icd-opencl-dev libhwloc-dev - run: name: Configure environment variables command: | @@ -808,7 +838,7 @@ commands: steps: - run: name: generate filecoin-ffi checksum (used as key for Groth parameters) - command: git rev-parse @:./vendors/filecoin-ffi > /tmp/filecoin-ffi-checksum.txt + command: git rev-parse @:./extern/filecoin-ffi > /tmp/filecoin-ffi-checksum.txt trigger_infra_build: parameters: branch: @@ -817,11 +847,11 @@ commands: type: string steps: - run: - name: Trigger a build in go-filecoin-infra + name: Trigger a build in venus-infra command: | sudo apt-get install -y curl # FILECOIN_BINARY_VERSION must be set in BASH_ENV of job calling this command - curl -d build_parameters[FILECOIN_BINARY_VERSION]=${FILECOIN_BINARY_VERSION} -d build_parameters[CIRCLE_JOB]=<< parameters.job >> https://circleci.com/api/v1.1/project/github/filecoin-project/go-filecoin-infra/tree/<< parameters.branch >>?circle-token=$CIRCLE_API_TOKEN + curl -d build_parameters[FILECOIN_BINARY_VERSION]=${FILECOIN_BINARY_VERSION} -d build_parameters[CIRCLE_JOB]=<< parameters.job >> https://circleci.com/api/v1.1/project/github/filecoin-project/venus-infra/tree/<< parameters.branch >>?circle-token=$CIRCLE_API_TOKEN update_badge: parameters: filename: @@ -842,3 +872,4 @@ commands: - run: name: Update submodules command: git submodule update --init --recursive + diff --git a/.docker/Dockerfile b/.docker/Dockerfile index 90547b73ef..3a7e4dc8a4 100644 --- a/.docker/Dockerfile +++ b/.docker/Dockerfile @@ -8,8 +8,9 @@ RUN curl -sSf https://sh.rustup.rs | sh -s -- -y # https://github.com/ipfs/go-ipfs/blob/master/Dockerfile # Thanks Lars :) -ENV SRC_DIR /go/src/github.com/filecoin-project/go-filecoin +ENV SRC_DIR /go/src/github.com/filecoin-project/venus ENV GO111MODULE on +ENV HTTPS_PROXY https://goproxy.io ARG FIL_PROOFS_PARAMETER_CACHE="./tmp/filecoin-proof-parameters" ARG FILECOIN_USE_PRECOMPILED_RUST_PROOFS=yes ARG FILECOIN_USE_PRECOMPILED_BLS_SIGNATURES=yes @@ -43,9 +44,9 @@ FROM busybox:1.30.1-glibc AS filecoin MAINTAINER Filecoin Dev Team # Get the filecoin binary, entrypoint script, and TLS CAs from the build container. -ENV SRC_DIR /go/src/github.com/filecoin-project/go-filecoin +ENV SRC_DIR /go/src/github.com/filecoin-project/venus COPY --from=builder $SRC_DIR/tmp/filecoin-proof-parameters/* /tmp/filecoin-proof-parameters/ -COPY --from=builder $SRC_DIR/go-filecoin /usr/local/bin/go-filecoin +COPY --from=builder $SRC_DIR/venus /usr/local/bin/venus COPY --from=builder $SRC_DIR/bin/container_daemon /usr/local/bin/start_filecoin COPY --from=builder $SRC_DIR/bin/devnet_start /usr/local/bin/devnet_start COPY --from=builder $SRC_DIR/bin/node_restart /usr/local/bin/node_restart diff --git a/.docker/Dockerfile.ci.filecoin b/.docker/Dockerfile.ci.filecoin index 195c84fe93..1a23f047c2 100644 --- a/.docker/Dockerfile.ci.filecoin +++ b/.docker/Dockerfile.ci.filecoin @@ -2,9 +2,9 @@ FROM busybox:1.30.1-glibc AS filecoin MAINTAINER Filecoin Dev Team # Get the filecoin binary, entrypoint script, and TLS CAs from the build container. -ENV SRC_DIR /go/src/github.com/filecoin-project/go-filecoin +ENV SRC_DIR /go/src/github.com/filecoin-project/venus COPY filecoin-proof-parameters /var/tmp/filecoin-proof-parameters -COPY filecoin/go-filecoin /usr/local/bin/go-filecoin +COPY filecoin/venus /usr/local/bin/venus COPY bin/container_daemon /usr/local/bin/start_filecoin COPY bin/devnet_start /usr/local/bin/devnet_start COPY bin/node_restart /usr/local/bin/node_restart diff --git a/.docker/Dockerfile.faucet b/.docker/Dockerfile.faucet index 82254b6e8f..ab3bbaa994 100644 --- a/.docker/Dockerfile.faucet +++ b/.docker/Dockerfile.faucet @@ -8,8 +8,9 @@ RUN curl -sSf https://sh.rustup.rs | sh -s -- -y # https://github.com/ipfs/go-ipfs/blob/master/.docker/Dockerfile # Thanks Lars :) -ENV SRC_DIR /go/src/github.com/filecoin-project/go-filecoin +ENV SRC_DIR /go/src/github.com/filecoin-project/venus ENV GO111MODULE on +ENV HTTPS_PROXY https://goproxy.io ENV FILECOIN_USE_PRECOMPILED_RUST_PROOFS true ENV FILECOIN_USE_PRECOMPILED_BLS_SIGNATURES true @@ -43,7 +44,7 @@ FROM busybox:1.30.1-glibc MAINTAINER Filecoin Dev Team # Get the binary, entrypoint script, and TLS CAs from the build container. -ENV SRC_DIR /go/src/github.com/filecoin-project/go-filecoin +ENV SRC_DIR /go/src/github.com/filecoin-project/venus COPY --from=0 $SRC_DIR/faucet /usr/local/bin/faucet COPY --from=0 /tmp/su-exec/su-exec /sbin/su-exec COPY --from=0 /tmp/tini /sbin/tini diff --git a/.docker/Dockerfile.genesis b/.docker/Dockerfile.genesis index 072dd96cbb..c79a684f88 100644 --- a/.docker/Dockerfile.genesis +++ b/.docker/Dockerfile.genesis @@ -8,8 +8,9 @@ RUN curl -sSf https://sh.rustup.rs | sh -s -- -y # https://github.com/ipfs/go-ipfs/blob/master/.docker/Dockerfile # Thanks Lars :) -ENV SRC_DIR /go/src/github.com/filecoin-project/go-filecoin +ENV SRC_DIR /go/src/github.com/filecoin-project/venus ENV GO111MODULE on +ENV HTTPS_PROXY https://goproxy.io COPY . $SRC_DIR @@ -40,7 +41,7 @@ FROM busybox:1.30.1-glibc MAINTAINER Filecoin Dev Team # Get the binary, entrypoint script, and TLS CAs from the build container. -ENV SRC_DIR /go/src/github.com/filecoin-project/go-filecoin +ENV SRC_DIR /go/src/github.com/filecoin-project/venus COPY --from=0 $SRC_DIR/genesis-file-server /usr/local/bin/genesis-file-server COPY --from=0 /tmp/su-exec/su-exec /sbin/su-exec COPY --from=0 /tmp/tini /sbin/tini diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 5d55ce3b40..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -labels: C-bug, candidate -assignees: '' - ---- - - -**Describe the bug**: - -**Expected behavior**: - -**Diagnostic information:** - - -- Filecoin Version: -- Filecoin Inspect Output: -- Initialization Command: diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000000..3a7803fe2f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,102 @@ +name: "Bug Report" +description: "File a bug report to help us improve" +labels: [need/triage, kind/bug] +body: +- type: checkboxes + attributes: + label: Checklist + description: Please check off the following boxes before continuing to file a bug report! + options: + - label: This is **not** a security-related bug/issue. If it is, please follow please follow the [security policy](https://github.com/filecoin-project/venus/security/policy). + required: true + - label: This is **not** a question or a support request. If you have any lotus related questions, please ask in the [venus forum](https://github.com/filecoin-project/venus/discussions). + required: true + - label: This is **not** a new feature request. If it is, please file a [feature request](https://github.com/filecoin-project/venus/issues/new?assignees=&labels=need%2Ftriage%2Ckind%2Ffeature&template=feature_request.yml) instead. + required: true + - label: This is **not** an enhancement request. If it is, please file a [improvement suggestion](https://github.com/filecoin-project/venus/issues/new?assignees=&labels=need%2Ftriage%2Ckind%2Fenhancement&template=enhancement.yml) instead. + required: true + - label: I **have** searched on the [issue tracker](https://github.com/filecoin-project/venus/issues) and the [venus forum](https://github.com/filecoin-project/venus/discussions), and there is no existing related issue or discussion. + required: true + - label: I am running the [`latest release`](https://github.com/filecoin-project/venus/releases), or the most recent RC(release canadiate) for the upcoming release or the dev branch(master), or have an issue updating to any of these. + required: true + - label: I did not make any code changes to venus. + required: false +- type: checkboxes + attributes: + label: Venus component + description: Please select the venus component you are filing a bug for + options: + - label: venus daemon - chain sync + required: false + - label: venus auth - authentication + required: false + - label: venus gateway - chain service gateway + required: false + - label: venus miner - mining and block production + required: false + - label: venus sealer/worker - sealing + required: false + - label: venus sealer - proving(WindowPoSt) + required: false + - label: venus market - storage deal + required: false + - label: venus market - retrieval deal + required: false + - label: venus market - data transfer + required: false + - label: venus light-weight client + required: false + - label: venus JSON-RPC API + required: false + - label: venus messager - message management (mpool) + required: false + - label: Other + required: false +- type: textarea + id: version + attributes: + label: Venus Version + render: text + description: Enter the output of `./venus version` and `./venus-sealer -v` if applicable. + placeholder: | + e.g. + Daemon: "Commit": "v1.0.4 c816de06debd1874bc0b2c9cad10a80e8f388681" + Local: venus-sealer version 1.2.6+git.eb586f1.dirty + validations: + required: true +- type: textarea + id: Description + attributes: + label: Describe the Bug + description: | + This is where you get to tell us what went wrong, when doing so, please try to provide a clear and concise description of the bug with all related information: + * What you were doing when you experienced the bug? + * Any *error* messages you saw, *where* you saw them, and what you believe may have caused them (if you have any ideas). + * What is the expected behaviour? + * For sealing issues, include the output of `./venus-sealer sectors status --log ` for the failed sector(s). + * For proving issues, include the output of `./venus-sealer proving` info. + * For deal making issues, include the output of `./market-client list-deals -v` and/or `./venus-market storage-deals|retrieval-deals|data-transfers list [-v]` commands for the deal(s) in question. + validations: + required: true +- type: textarea + id: extraInfo + attributes: + label: Logging Information + render: text + description: | + Please provide debug logs of the problem, remember you can get set log level. + If you don't provide detailed logs when you raise the issue it will almost certainly be the first request I make before furthur diagnosing the problem. + validations: + required: true +- type: textarea + id: RepoSteps + attributes: + label: Repo Steps + description: "Steps to reproduce the behavior" + value: | + 1. Run '...' + 2. Do '...' + 3. See error '...' + ... + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/enhancement.yml b/.github/ISSUE_TEMPLATE/enhancement.yml new file mode 100644 index 0000000000..73c3430d7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/enhancement.yml @@ -0,0 +1,56 @@ +name: Enhancement +description: Suggest an improvement to an existing venus feature. +labels: [need/triage, kind/enhancement] +body: +- type: checkboxes + attributes: + label: Checklist + description: Please check off the following boxes before continuing to create an improvement suggestion! + options: + - label: This is **not** a new feature or an enhancement to the Filecoin protocol. If it is, please open an [FIP issue](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0001.md). + required: true + - label: This is **not** a new feature request. If it is, please file a [feature request](https://github.com/filecoin-project/venus/issues/new?assignees=&labels=need%2Ftriage%2Ckind%2Ffeature&template=feature_request.yml) instead. + required: true + - label: This is **not** brainstorming ideas. If you have an idea you'd like to discuss, please open a new discussion on [the venus forum](https://github.com/filecoin-project/venus/discussions/categories/ideas) and select the category as `Ideas`. + required: true + - label: I **have** a specific, actionable, and well motivated improvement to propose. + required: true +- type: checkboxes + attributes: + label: Venus component + description: Please select the venus component you are filing an improvement request for + options: + - label: venus daemon - [chain service] chain sync + required: false + - label: venus auth - [chain service] authentication + required: false + - label: venus messager - [chain service] message management (mpool) + required: false + - label: venus gateway - [chain service] gateway + required: false + - label: venus miner - [chain service] mining and block production + required: false + - label: venus sealer/worker - sealing + required: false + - label: venus sealer - proving (WindowPoSt) + required: false + - label: venus market - storage deal + required: false + - label: venus market - retrieval deal + required: false + - label: venus market - data transfer + required: false + - label: venus light-weight client + required: false + - label: venus JSON-RPC API + required: false + - label: Other + required: false +- type: textarea + id: request + attributes: + label: Improvement Suggestion + description: A clear and concise description of what the motivation or the current problem is and what is the suggested improvement? + placeholder: Ex. Currently venus... However, as a storage provider, I'd like... + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000000..d1932a9d2a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,75 @@ +name: Feature request +description: Suggest an idea for venus +labels: [need/triage, kind/feature] +body: +- type: checkboxes + attributes: + label: Checklist + description: Please check off the following boxes before continuing to create a new feature request! + options: + - label: This is **not** a new feature or an enhancement to the Filecoin protocol. If it is, please open an [FIP issue](https://github.com/filecoin-project/FIPs/blob/master/FIPS/fip-0001.md). + required: true + - label: This is **not** brainstorming ideas. If you have an idea you'd like to discuss, please open a new discussion on [the venus forum](https://github.com/filecoin-project/venus/discussions/categories/ideas) and select the category as `Ideas`. + required: true + - label: I **have** a specific, actionable, and well motivated feature request to propose. + required: true +- type: checkboxes + attributes: + label: Venus component + description: Please select the venus component you are filing a new feature request for + options: + - label: venus daemon - [chain service] chain sync + required: false + - label: venus auth - [chain service] authentication + required: false + - label: venus messager - [chain service] message management (mpool) + required: false + - label: venus gateway - [chain service] gateway + required: false + - label: venus miner - [chain service] mining and block production + required: false + - label: venus sealer/worker - sealing + required: false + - label: venus sealer - proving (WindowPoSt) + required: false + - label: venus market - storage deal + required: false + - label: venus market - retrieval deal + required: false + - label: venus market - data transfer + required: false + - label: venus light-weight client + required: false + - label: venus JSON-RPC API + required: false + - label: Other + required: false +- type: textarea + id: request + attributes: + label: What is the motivation behind this feature request? Is your feature request related to a problem? Please describe. + description: A clear and concise description of what the motivation or the problem is. + placeholder: Ex. I'm always frustrated when [...] + validations: + required: true +- type: textarea + id: solution + attributes: + label: Describe the solution you'd like + description: A clear and concise description of what you want to happen. + validations: + required: true +- type: textarea + id: alternates + attributes: + label: Describe alternatives you've considered + description: A clear and concise description of any alternative solutions or features you've considered. + validations: + required: false +- type: textarea + id: extra + attributes: + label: Additional context + description: Add any other context, design docs or screenshots about the feature request here. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/new_story.md b/.github/ISSUE_TEMPLATE/new_story.md deleted file mode 100644 index 974e9d305c..0000000000 --- a/.github/ISSUE_TEMPLATE/new_story.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: New story -about: Create a new story. Typically created after design intent is written down and - subjected to constructive feedback (see CONTRIBUTING.md). -title: '' -labels: candidate -assignees: '' - ---- -### Description -Please first see README for how to get help before filing a new issue. - -### Acceptance criteria - -### Risks + pitfalls - -### Where to begin diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 6e5819703f..d6d4087aac 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,9 +1,21 @@ -### Motivation +## Related Issues + +## Proposed Changes + -### Proposed changes -Closes # +## Additional Info + - +## Checklist +Before you mark the PR ready for review, please make sure that: +- [ ] All commits have a clear commit message. +- [ ] The PR title is in the form of of `: <#issue number> : ` + - example: ` fix: #1234 mempool: Introduce a cache for valid signatures` + - `PR type`: _fix_, _feat_, _INTERFACE BREAKING CHANGE_, _CONSENSUS BREAKING_, _build_, _chore_, _ci_, _docs_, _misc_, _perf_, _refactor_, _revert_, _style_, _test_ + - `area`: _venus_, _venus-messager_, _venus-miner_, _venus-gateway_, _venus-auth_, _venus-market_, _venus-sealer_, _venus-wallet_, _venus-cluster_, _api_, _chain_, _state_, _vm_, _data transfer_, _mempool_, _message_, _block production_, _multisig_, _networking_, _paychan_, _proving_, _sealing_, _wallet_ +- [ ] This PR has tests for new functionality or change in behaviour +- [ ] If new user-facing features are introduced, clear usage guidelines and / or documentation updates should be included in [venus docs](https://venus.filecoin.io) or [Discussion Tutorials.](https://github.com/filecoin-project/venus/discussions/categories/tutorials) +- [ ] CI is green \ No newline at end of file diff --git a/.github/workflows/tag-workflow.yml b/.github/workflows/tag-workflow.yml new file mode 100644 index 0000000000..4f221355e2 --- /dev/null +++ b/.github/workflows/tag-workflow.yml @@ -0,0 +1,182 @@ +name: build for test/release + +on: + create: + tags: + - '**' + pull_request: + branches: + - master + push: + branches: + - master + - test* + workflow_dispatch: +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + submodules: 'true' + fetch-depth: '0' + + - name: vars + id: vars + run: | + export commit=$(git rev-parse HEAD) + export short=$(git rev-parse --short HEAD) + export github_tag=${GITHUB_REF##*/} + export git_message=$(git rev-list --format=%s --max-count=1 HEAD | tail +2) + export repo_name=${GITHUB_REPOSITORY##*/} + export branch=$(git symbolic-ref --short -q HEAD) + export tag=$(git describe --tags $(git rev-list --tags --max-count=1)) + export artifact_name=${repo_name}_$(git rev-parse --short HEAD).tar.gz + export pub_method=pushTest + export job_url=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID + export oss_exists=0 + export ftp_exists=0 + if [[ "${{github.event_name}}" == "create" ]] && ([[ "$github_tag" =~ "v1." ]] || [[ "$github_tag" =~ "v2." ]]); then + export pub_method=pushRelease + fi + if [[ "$branch" == "" ]]; then + export branch=$github_tag + fi + if [[ "$tag" == "" ]]; then + export tag=$github_tag + fi + if [[ "${{secrets.OSS_KEY_ID}}" != "" && \ + "${{secrets.OSS_KEY_SECRET}}" != "" && \ + "${{secrets.OSS_ENDPOINT}}" != "" && \ + "${{secrets.OSS_BUCKET}}" != "" ]]; then + export oss_exists=1 + fi + if [[ "${{secrets.FTP_HOST}}" != "" ]]; then + export ftp_exists=1 + fi + echo "::set-output name=commit::$commit" + echo "::set-output name=short::$short" + echo "::set-output name=github_tag::$github_tag" + echo "::set-output name=git_message::$git_message" + echo "::set-output name=repo_name::$repo_name" + echo "::set-output name=branch::$branch" + echo "::set-output name=tag::$tag" + echo "::set-output name=artifact_name::$artifact_name" + echo "::set-output name=job_url::$job_url" + echo "::set-output name=pub_method::$pub_method" + echo "::set-output name=oss_exists::$oss_exists" + echo "::set-output name=ftp_exists::$ftp_exists" + + - name: show environment + run: | + echo event = ${{github.event_name}} + echo github_repository: $GITHUB_REPOSITORY + echo vars.commit = ${{steps.vars.outputs.commit}} + echo vars.short_commit = ${{steps.vars.outputs.short}} + echo vars.github_tag = ${{steps.vars.outputs.github_tag}} + echo vars.git_message = "${{steps.vars.outputs.git_message}}" + echo vars.repo_name = ${{steps.vars.outputs.repo_name}} + echo vars.branch = ${{steps.vars.outputs.branch}} + echo vars.tag = ${{steps.vars.outputs.tag}} + echo vars.artifact_name = ${{steps.vars.outputs.artifact_name}} + echo vars.pub_method = ${{steps.vars.outputs.pub_method}} + echo secrets.godeye_url = ${{ secrets.GODEYE_URL }} + echo vars.oss_exists = ${{steps.vars.outputs.oss_exists}} + echo vars.ftp_exists = ${{steps.vars.outputs.ftp_exists}} + echo github.ref = ${{github.ref}} + echo github.ref_name = ${{github.ref_name}} + echo vars.job_url = ${{steps.vars.outputs.job_url}} + echo ftp_url = ftp://${{secrets.FTP_HOST}}/${{steps.vars.outputs.repo_name}}/${{steps.vars.outputs.artifact_name}} + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.17 + - name: Install GCC + uses: egor-tensin/setup-gcc@v1 + with: + version: latest + platform: x64 + - name: Setup Rust + run: (sudo apt-get update && sudo apt-get install -y clang libssl-dev && which cargo && which rustc) || (curl https://sh.rustup.rs -sSf | sh -s -- -y) + - name: install deps + run: sudo apt-get install make ncftp mesa-opencl-icd ocl-icd-opencl-dev gcc git bzr jq pkg-config curl clang build-essential hwloc libhwloc-dev wget -y && sudo apt upgrade -y + - name: Build + run: | + sudo make deps + sudo make + mkdir ./release && mv ./venus ./release + + - name: Zip Release + uses: TheDoctor0/zip-release@0.6.0 + with: + filename: ${{steps.vars.outputs.artifact_name}} + path: ./release + type: tar + + - name: release + id: release + uses: ncipollo/release-action@v1 + if: ${{ steps.vars.outputs.pub_method=='pushRelease' }} + with: + artifacts: ${{steps.vars.outputs.artifact_name}} + tag: ${{ steps.vars.outputs.github_tag }} + commit: ${{ steps.vars.outputs.commit }} + token: ${{ secrets.GITHUB_TOKEN }} + + - name: upload ftp + id: uploadftp + if: ${{ steps.vars.outputs.ftp_exists == '1' }} + continue-on-error: true + run: | + ncftpput -m -R -v -u ${{secrets.FTP_USER}} -p ${{secrets.FTP_PWD}} ${{secrets.FTP_HOST}} ./${{steps.vars.outputs.repo_name}} ./${{steps.vars.outputs.artifact_name}} + echo "upload file: ${{steps.vars.outputs.artifact_name}} successfully!" + + - name: setup oss + id: setuposs + if: ${{ steps.vars.outputs.oss_exists == '1' && steps.uploadftp.outcome != 'success' && steps.vars.outputs.pub_method == 'pushTest' }} + continue-on-error: true + uses: manyuanrong/setup-ossutil@master + with: + endpoint: ${{secrets.OSS_ENDPOINT}} + access-key-id: ${{ secrets.OSS_KEY_ID }} + access-key-secret: ${{ secrets.OSS_KEY_SECRET }} + + - name: cp files to aliyun + id: cposs + if: ${{ steps.setuposs.outcome == 'success' }} + continue-on-error: true + run: | + ossutil cp ./${{steps.vars.outputs.artifact_name}} ${{secrets.OSS_BUCKET}} + export signed_url=`ossutil sign ${{secrets.OSS_BUCKET}}/${{steps.vars.outputs.artifact_name}} --timeout 31104000 | sed -n 1p` + echo '::set-output name=oss_signed_url::$(signed_url)' + + - name: upload artifacts + if: ${{ steps.vars.outputs.pub_method == 'pushTest' && steps.uploadftp.outcome != 'success' && steps.cposs.outcome != 'success' }} + continue-on-error: true + uses: actions/upload-artifact@v2 + with: + name: ${{steps.vars.outputs.artifact_name}} + path: ./${{steps.vars.outputs.artifact_name}} + if-no-files-found: error + + - name: push god-eye + run: | + export link=${{steps.vars.outputs.job_url}} + if [[ "${{ steps.release.outcome }}" == "success" ]]; then + export link=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/download/${{steps.vars.outputs.github_tag}}/${{steps.vars.outputs.artifact_name}} + elif [[ "${{ steps.uploadftp.outcome }}" == "success" ]]; then + export link=ftp://${{secrets.FTP_HOST}}/${{steps.vars.outputs.repo_name}}/${{steps.vars.outputs.artifact_name}} + elif [[ "${{ steps.cposs.outcome }}" == "success" ]]; then + export link=${{steps.cposs.outputs.oss_signed_url}} + fi + echo download target file : $link + set +e + curl --max-time 20 -X PUT ${{secrets.GODEYE_URL}}/${{steps.vars.outputs.pub_method}} \ + --data-urlencode "type=1" \ + --data-urlencode "commitId=${{steps.vars.outputs.commit}}" \ + --data-urlencode "branch=${{steps.vars.outputs.branch}}" \ + --data-urlencode "programName=${{steps.vars.outputs.repo_name}}" \ + --data-urlencode "link=$link" \ + --data-urlencode "description=message:${{steps.vars.outputs.git_message}}, branch:${{steps.vars.outputs.branch}}, commit:${{steps.vars.outputs.short}}, tag:${{steps.vars.outputs.github_tag}}" \ + --data-urlencode "version=${{steps.vars.outputs.short}}" + set -e \ No newline at end of file diff --git a/.gitignore b/.gitignore index 6a8a5e2215..ad74358989 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,14 @@ go-filecoin -!cmd/go-filecoin -!internal/app/go-filecoin - +venus +!cmd/venus +!app/venus +devgen.car +localnet.json +*.log .task .idea *.coverprofile +coverprofile.html *.out *.so @@ -13,20 +17,24 @@ fixtures/test fixtures/live !fixtures/live/.gitkeep -// Tools +// Tools tools/gengen/gengen tools/gengen/gensetup tools/fast/bin/localnet tools/faucet/faucet tools/aggregator/aggregator tools/genesis-file-server/genesis-file-server -tools/migration/go-filecoin-migrate tools/prerelease-tool/prerelease-tool tools/chain-util/chain-util **/paramcache **/*.h **/*.a **/*.pc +.DS_Store +**/.DS_Store + +// venus-dev-tool +venus-dev-tool // IDE (vscode) .vscode @@ -34,3 +42,5 @@ debug.test // HomeBrew Brewfile.lock.json + +receipt.json diff --git a/.gitmodules b/.gitmodules index 2f7faf0cf4..d4c59e5d37 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ -[submodule "vendors/filecoin-ffi"] - path = vendors/filecoin-ffi +[submodule "extern/filecoin-ffi"] + path = extern/filecoin-ffi url = https://github.com/filecoin-project/filecoin-ffi.git +[submodule "extern/test-vectors"] + path = extern/test-vectors + url = https://github.com/filecoin-project/test-vectors.git diff --git a/.golangci.yml b/.golangci.yml index d40bbb3a1f..17050a2082 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,8 +1,8 @@ linters: disable-all: true enable: - - vet - gofmt + - govet - misspell - goconst - golint @@ -12,10 +12,40 @@ linters: - varcheck - structcheck - deadcode + - unused + - stylecheck + - gosimple issues: + exclude: + - "func name will be used as test\\.Test.* by other packages, and that stutters; consider calling this" + - "Potential file inclusion via variable" + - "should have( a package)? comment" + - "Error return value of `logging.SetLogLevel` is not checked" + - "(func|method) \\w+ should be \\w+" + - "(type|var|struct field|(method|func) parameter) `\\w+` should be `\\w+`" + - "(G306|G301|G307|G108|G302|G204|G104)" + - "don't use ALL_CAPS in Go names" + - "string .* has .* occurrences, make it a constant" + - "a blank import should be only in a main or test package, or have a comment justifying it" + - "package comment should be of the form" + - "should be of the form" + + exclude-rules: + - path: pkg/constants + linters: + - errcheck + - path: pkg/specactors + linters: + - errcheck exclude-use-default: false linters-settings: goconst: min-occurrences: 6 + +run: +skip-dirs-use-default: false +skip-dirs: + - pkg/constants$ + - pkg/util/test$ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 524723eaff..090a4a0b73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,750 +1 @@ -# go-filecoin changelog - -## go-filecoin 0.5.6 - -We're happy to announce go-filecoin 0.5.6. Highlights include an updated Proof-of-Spacetime implementation and an upgrade-capable network. - -### Features - -#### ๐ŸŒณ Network upgrade capability - -Two changes have been made to enable software releases without restarting the network. First, a network name is now embedded in the genesis state, permitting multiple networks to follow different upgrade schedules. In addition, the Git SHA compatibility check has been removed from the Hello protocol, enabling nodes with different, but compatible, code to interoperate. Going forward, the user devnet will no longer be restarted with every software release; it will still be restarted as-needed. - -#### ๐Ÿš€ Updated Proof-of-Spacetime (PoSt) - -A new proof construction, [Rational PoSt](https://github.com/filecoin-project/specs/blob/master/proof-of-spacetime.md), has been [implemented](https://github.com/filecoin-project/rust-fil-proofs/pull/763) and [integrated](https://github.com/filecoin-project/go-filecoin/pull/3318). This construction is the same shape as our candidate for testnet and resolves outstanding limitations on proving over many sectors. - -#### ๐ŸŽŸ๏ธ Block and consensus changes - -Block headers are now signed by miners, and election tickets form an array in each header. The election process is now split into two phases, ticket generation / validation and election winner generation / validation. Election tickets form an array in each header and mining a null block appends a ticket to this array. Block headers are now signed by miners. - -#### ๐Ÿ”— Chain status command - -`go-filecoin chain status` is a new command that provides insight into chain sync progress. - -### Performance and Reliability - -#### โšก Chain syncing performance - -Previously in go-filecoin 0.4, we aimed to speed up chain syncing by focusing on the first phase: chain fetching. We have identified the worst of the fetching contention issues that caused forking and unreliable message processing in 0.4. Some of those fixes are now complete, while others such as [#3460](https://github.com/filecoin-project/go-filecoin/pull/3460) are in progress. There may still be some issues that could cause forking that we will continue to work on and update the coming weeks. Please let us know your feedback. - -go-filecoin 0.5 also continues with improvements to the second phase: chain validation. By switching from HAMT bitwidth 8 to HAMT bitwidth 5, we see a general average improvement in benchmarks of about 4-to-1, across memory usage, speed of operations, and bytes written to disk. Users are encouraged to measure and share their own benchmarks. In addition, optimizations to encoding and decoding of HAMT data structures may result in additional performance improvements. - -### Looking Ahead - -#### โœ๏ธ New API design (WIP) - -Developers are invited to read and comment on the new [HTTP API design](https://github.com/filecoin-project/filecoin-http-api) (work in progress). This design will be implemented initially in go-filecoin and serve as a standard for interacting with Filecoin nodes across implementations. It will support most of operations offered by the current API and provide a framework for future API growth. - -### User Notes - -- The proving period is now configured to 300 rounds (2.5 hrs), down from 1000 rounds (10 hours). Weโ€™ve made this temporary change for more frequent node interaction and faster experimentation, and we expect to increase the proving period again in the future. -- Groth parameters are no longer fetched from the network, but instead locally generated when needed. This can take many minutes (but is more reliable than network). -- [Block header structure](https://github.com/filecoin-project/go-filecoin/blob/release-0.5.0/types/block.go) has changed, so tools which parse chain data will need updating. -- The default storage miner waits 15 rounds _after the start of the proving window_ before beginning a PoSt computation, but is not robust to a re-org of _more than 15 blocks_ that changes its challenge seed. -- If you are seeing panics or write failures during sealing, it may be related to disk space requirements. Currently the sector builder uses ~11GiB of free disk space, and assumes it is available on the `/tmp` partition. An proposal to make that directory configurable is in [#3497](https://github.com/filecoin-project/go-filecoin/issues/3497) - -### CLI diff - -| go-filecoin command | change | -| ------------------- | ------ | -| chain status | added | -| mining add-piece | added | -| mining seal-now | behavior changed[1] | - -[1] `mining seal-now` no longer stages a piece into a sector. It now has the same behavior as `--auto-seal-interval-seconds`. - -### Changelog - -A full list of all [67 PRs](https://github.com/filecoin-project/go-filecoin/pulls?utf8=โœ“&q=is%3Apr+is%3Amerged+merged%3A2019-09-03..2019-09-23+) in this release, including many bugfixes not listed here, can be found on Github. - -### Contributors - -โค๏ธ Huge thank you to everyone that made this release possible! - -### ๐Ÿ™Œ๐Ÿฝ Want to contribute? - -Would you like to contribute to the Filecoin project and donโ€™t know how? Here are a few places you can get started: - -- Check out the [Contributing Guidelines](https://github.com/filecoin-project/go-filecoin/blob/master/CONTRIBUTING.md) -- Look for issues with the `good-first-issue` label in [go-filecoin](https://docs.google.com/document/d/1dfTVASs9cQMo4NPqJmXjEEX-Ju_M9Vw-4AelN1aHOV8/edit#) and [rust-fil-proofs](https://github.com/filecoin-project/rust-fil-proofs/issues?q=is%3Aissue+is%3Aopen+label%3A"good+first+issue") -- Join the [community chat on Matrix/Slack](https://github.com/filecoin-project/community#chat), introduce yourself in #_fil-lobby, and let us know where you would like to contribute -- Join the [user devnet](https://github.com/filecoin-project/go-filecoin/wiki/Getting-Started) - -### โ‰๏ธ Do you have questions? - -The best place to ask your questions about go-filecoin, how it works, and what you can do with it is at [discuss.filecoin.io](https://discuss.filecoin.io). We are also available at the [community chat on Matrix/Slack](https://github.com/filecoin-project/community#chat). - ---- - -## go-filecoin 0.4.6 - -This release includes the first steps towards increasing the performance for new nodes joining the network through the graphsync protocol. -It also includes the new command `mining status` which allows users to understand the current state of their miner by providing the current proving period, as well as the current proving sector set. -We've also shipped piece inclusion proofs which allow for storage clients to verify the inclusion of their data in the sealed sector reported back by the storage miner. - -### Features - -#### Chain sync - -Chain downloads have switched to [go-graphsync](https://github.com/ipfs/go-graphsync) for more efficient downloads, and weโ€™ve also reduced block header size by moving messages and receipts out of the header. -Weโ€™re expecting this to significantly reduce the memory requirements for running a node, and to greatly speed up the chain downloading & setup time. - -#### Piece inclusion proofs - -[Piece inclusion proofs](https://github.com/filecoin-project/specs/blob/840aa9a9777d955fdcd61017444741aabc96dbea/proofs.md#piece-inclusion-proof) are now calculated during deal proposal. -We expect small increases in (1) time to create a deal and (2) CPU consumption during sealing, but both should be minor. - -#### Miners validate piece commitments - -Miners now validate that a client has supplied the correct piece commitment (commP). -This is a computationally expensive operation that will be apparent for high-throughput miner operators. - -#### Slashing - -Storage slashing is now implemented as outlined in [Mining Spec](https://github.com/filecoin-project/specs/blob/master/mining.md#on-being-slashed-wip-needs-discussion) and [Storage Market Spec](https://github.com/filecoin-project/specs/blob/master/storage-market.md) on the actors. -Miners automatically monitor for storage faults by other miners and include `SlashStorageFault` messages in their own blocks (these messages will later carry a rewards). - -#### Free deals - -Previously when accepting storage deals with zero costs a payment channel would be created regardless. -This added additional costs to the deal that were not needed. -Miners now accept deals with zero price and will not require a payment channel to exist before accepting the deal. -This can simplify operations for miners automating deals among their own nodes. - -#### Sealing sectors without a deal - -Previously the only way to stage pieces into sectors was through the Storage Market. -This process required interacting with an additional node on the network and added unnecessary overhead for miners to gain power on the network. -Miners now can use the `mining seal-now` command to seal "empty" sectors directly to increase their power on the network for block mining. - -### CLI diff - -| go-filecoin command | change | -| --------------------------- | ------------ | -| mining status | added | -| mining seal-now | added | -| miner proving-period | added | -| show header | added | -| show messages | added | -| show receipts | added | -| client verify-deal-proposal | added | - - -### Important changes - -- The mining start command will fail if Groth parameters for the sector size which the miner is configured do not yet exists in the parameter cache. - Previously Groth parameters would be generated on demand if they were missing. -- The Groth parameters cache location has changed from `/tmp/filecoin-proof-parameters` to `/var/tmp/filecoin-proof-parameters`. -- Parameters are no longer downloaded by default. Nodes intending to mine must fetch parameters explicitly. See the [wiki](https://github.com/filecoin-project/go-filecoin/wiki/Mining-Filecoin#start-mining) for more information. -- The paramfetch binary now uses ipget to download Groth parameters and keys instead of hitting the IPFS (HTTP) Gateway. - This will make paramfetch slow, but more reliable. -- Proof logs will no longer be displayed in log output by default and must be enabled by setting `RUST_LOG=info` before starting the daemon. -- When building go-filecoin, `git submodules init --recursive` is required to be ran before `go run ./build deps`. -- Sector size for PoSt construction has been increased from 2 to 4. This has resulted in a slight increase of memory usage, but supports proof calculation over more storage within a single proving period. - ---- - -## go-filecoin 0.3.2 - -We're happy to announce go-filecoin 0.3.2. This release is a big step towards completing the filecoin storage protocol. It includes many changes to the miner actor builtin smart contract that will allow the network to securely account for verifiable storage power once fault handling is in place. Many less visible but high impact code and testing improvements ship with this release. 0.3.2 also includes a big UX improvement with the new and improved `go-filecoin deals` command for user friendly management of storage deals. Getting paid as a storage miner is now as simple as a single CLI call. - -### Features - -#### ๐Ÿ‡ Storage protocol nearing completeness - -Our number one goal is a network securely powered by verifiable storage. In order for this to work we need to penalize cheating miners who do not prove their storage on time. This release includes most of the groundwork needed, including fundamental data structures and encoding work for tracking sets of sectors, improved power tracking in the miner actor built-in smart contract, and charging fees for late storage proof (PoSt) submissions. Expect these changes to blossom into the [complete fault reporting mechanism](https://github.com/filecoin-project/specs/blob/master/faults.md#market-faults) in the next release. - -#### ๐Ÿ‘ช Multiple sector sizes - -In order for the network to scale gracefully, different miners may choose from a variety of different sector sizes to put data in and prove over: smaller sectors for faster and more nimble storage; larger sectors for slower but efficient storage. This release includes all of the software updates we need to support multiple sector sizes in a single network; however, we plan to properly vet network conditions with much bigger sectors before enabling multiple sectors sizes in the user devnet. Expect 1 GiB sectors on the user devnet in the next release. - -#### ๐Ÿค Deal management and payments - -Both clients and miners can now easily inspect the fine details of all storage deals they have entered into using `go-filecoin deals list` and `go-filecoin deals show`. Miners can get paid for honoring a deal by running `go-filecoin deals redeem`. Additionally this release ships some improvements in payment channel safety for correct arbitration of deal disputes we want down the road. - -### Performance and Reliability - -#### ๐ŸŒณ Upgrade in place - -This release drives home previous work on repo migrations. The `go-filecoin-migrate` tool (included in the go-filecoin source repo) is now complete. This release includes a proof of concept migration: upgrading on-disk chain metadata from JSON to the more compact CBOR. Landing this means we are confident that this major technical challenge is behind us, putting us one step closer to a reliable, persistent testnet. - -### Refactors and Endeavors - -#### ๐Ÿ“ˆMajor testing improvements - -Testing is the silent champion of reliability and development speed. This release includes [tons of ](https://github.com/filecoin-project/go-filecoin/pull/2972)[behind](https://github.com/filecoin-project/go-filecoin/pull/2700) [the scenes](https://github.com/filecoin-project/go-filecoin/pull/2990) [work](https://github.com/filecoin-project/go-filecoin/pull/2919) improving the quality of existing unit and integration tests as well as adding new tests to existing code. Continued improvements to the [FAST](https://github.com/filecoin-project/go-filecoin/tree/master/tools/fast) framework promise to further accelerate integration testing and devnet deployments. - -#### ๐Ÿ’ณ Tech debt paydown - -This release is not playing around when it comes to paying off technical debt. Fundamental chain refactors include an [improved immutable tipset type](https://github.com/filecoin-project/go-filecoin/pull/2837) and tipset cache sharing are at the top of the list. A major refactor of the [message](https://github.com/filecoin-project/go-filecoin/pull/2798) [handling](https://github.com/filecoin-project/go-filecoin/pull/2796) [system](https://github.com/filecoin-project/go-filecoin/pull/2795) into inbox and outbox queues is also a notable improvement. Donโ€™t forget about a consistent internal attoFIL token type, a sleek new miner deal acceptance codepath, sector builder reliability fixes... the list goes on. We are excited to be shipping higher quality software with each release so that we can move faster towards a robust mainnet. - -### Changelog - -A full list of [all 207 PRs in this release](https://github.com/search?p=2&q=is%3Apr+merged%3A2019-05-09..2019-07-05+repo%3Afilecoin-project%2Fgo-filecoin+repo%3Afilecoin-project%2Frust-fil-proofs+repo%3Afilecoin-project%2Fspecs&type=Issues), including many bugfixes not listed here, can be found on Github. - -### CLI diff - -| go-filecoin command | change | -| ------------------- | ------------ | -| deals list | added | -| deals redeem | added | -| deals show | added | -| miner pledge | removed | -| mining status | added | -| show block | args changed | - -### Contributors - -โค๏ธ Huge thank you to everyone that made this release possible! By alphabetical order, here are all the humans who contributed to this release: - -* [@a8159236](https://github.com/a8159236) (3 issues, 2 comments) -* [@Aboatlai](https://github.com/Aboatlai) (1 issue) -* [@acruikshank](https://github.com/acruikshank) (6 commits, 8 PRs, 21 issues, 23 comments) -* [@AkshitV](https://github.com/AkshitV) (1 issue, 2 comments) -* [@alanshaw](https://github.com/alanshaw) (1 comment) -* [@AndyChen1984](https://github.com/AndyChen1984) (1 issue, 5 comments) -* [@anorth](https://github.com/anorth) (22 commits, 24 PRs, 40 issues, 163 comments) -* [@arielgabizon](https://github.com/arielgabizon) (1 issue, 2 comments) -* [@benrogmans](https://github.com/benrogmans) (1 issue) -* [@bvohaska](https://github.com/bvohaska) (1 PR, 1 comment) -* [@callmez](https://github.com/callmez) (1 comment) -* [@carsonfly](https://github.com/carsonfly) (2 issues, 7 comments) -* [@chengzhigen](https://github.com/chengzhigen) (2 issues, 2 comments) -* [@chenhonghe](https://github.com/chenhonghe) (1 issue, 5 comments) -* [@chenxiaolin0105](https://github.com/chenxiaolin0105) (1 issue) -* [@chenzhi201901](https://github.com/chenzhi201901) (2 issues, 1 comment) -* [@codecov-io](https://github.com/codecov-io) (57 comments) -* [@Cryptovideos](https://github.com/Cryptovideos) (1 issue) -* [@dannyhchan](https://github.com/dannyhchan) (4 comments) -* [@dayu26](https://github.com/dayu26) (1 issue) -* [@decentralion](https://github.com/decentralion) (3 commits, 1 PR, 6 comments) -* [@deltazxm](https://github.com/deltazxm) (2 comments) -* [@dignifiedquire](https://github.com/dignifiedquire) (76 commits, 25 PRs, 14 issues, 139 comments) -* [@DrPeterVanNostrand](https://github.com/DrPeterVanNostrand) (1 commit, 1 PR, 2 comments) -* [@eshon](https://github.com/eshon) (1 issue, 8 comments) -* [@frrist](https://github.com/frrist) (14 commits, 18 PRs, 10 issues, 46 comments) -* [@gnunicorn](https://github.com/gnunicorn) (23 commits, 3 PRs, 1 issue, 17 comments) -* [@grandhelmsman](https://github.com/grandhelmsman) (3 issues, 2 comments) -* [@idotial](https://github.com/idotial) (1 issue) -* [@imrehg](https://github.com/imrehg) (1 PR, 1 comment) -* [@ingar](https://github.com/ingar) (5 commits, 6 PRs, 7 comments) -* [@ipfsmainofficial](https://github.com/ipfsmainofficial) (1 issue) -* [@jscode017](https://github.com/jscode017) (1 comment) -* [@Kentix](https://github.com/Kentix) (1 issue, 2 comments) -* [@kishansagathiya](https://github.com/kishansagathiya) (1 PR, 2 comments) -* [@Kubuxu](https://github.com/Kubuxu) (1 commit, 1 PR, 1 comment) -* [@laser](https://github.com/laser) (45 commits, 41 PRs, 24 issues, 97 comments) -* [@maybeuright](https://github.com/maybeuright) (1 comment) -* [@meiqimichelle](https://github.com/meiqimichelle) (1 comment) -* [@merced](https://github.com/merced) (1 issue, 3 comments) -* [@michellebrous](https://github.com/michellebrous) (1 comment) -* [@mishmosh](https://github.com/mishmosh) (3 commits, 2 PRs, 2 issues, 20 comments) -* [@mslipper](https://github.com/mslipper) (5 commits, 1 PR, 8 comments) -* [@nicola](https://github.com/nicola) (2 commits, 1 PR, 4 issues, 11 comments) -* [@nijynot](https://github.com/nijynot) (1 commit, 1 comment) -* [@no1lcy](https://github.com/no1lcy) (1 issue, 1 comment) -* [@ognots](https://github.com/ognots) (6 commits, 5 PRs, 1 issue, 11 comments) -* [@Peachooo](https://github.com/Peachooo) (2 issues, 1 comment) -* [@pooja](https://github.com/pooja) (12 commits, 5 PRs, 9 issues, 45 comments) -* [@porcuquine](https://github.com/porcuquine) (8 commits, 4 PRs, 7 issues, 42 comments) -* [@R-Niagra](https://github.com/R-Niagra) (1 issue, 1 comment) -* [@ridewindx](https://github.com/ridewindx) (1 commit, 1 PR) -* [@RobQuistNL](https://github.com/RobQuistNL) (2 comments) -* [@rogerlzp](https://github.com/rogerlzp) (1 comment) -* [@rosalinekarr](https://github.com/rosalinekarr) (15 commits, 15 PRs, 3 issues, 36 comments) -* [@schomatis](https://github.com/schomatis) (22 commits, 11 PRs, 3 issues, 28 comments) -* [@shannonwells](https://github.com/shannonwells) (8 commits, 8 PRs, 5 issues, 11 comments) -* [@sidke](https://github.com/sidke) (13 commits, 1 comment) -* [@Stebalien](https://github.com/Stebalien) (1 commit, 1 PR, 1 comment) -* [@sternhenri](https://github.com/sternhenri) (4 PRs, 1 issue, 24 comments) -* [@steven004](https://github.com/steven004) (1 commit, 1 PR, 3 issues, 7 comments) -* [@taoshengshi](https://github.com/taoshengshi) (2 issues, 6 comments) -* [@taylorshuang](https://github.com/taylorshuang) (2 issues, 6 comments) -* [@titilami](https://github.com/titilami) (3 issues, 2 comments) -* [@travisperson](https://github.com/travisperson) (3 commits, 3 PRs, 6 issues, 25 comments) -* [@urugang](https://github.com/urugang) (1 issue) -* [@vhosakot](https://github.com/vhosakot) (1 comment) -* [@vmx](https://github.com/vmx) (3 commits, 4 PRs, 14 comments) -* [@vyzo](https://github.com/vyzo) (1 comment) -* [@warpfork](https://github.com/warpfork) (3 comments) -* [@waynewyang](https://github.com/waynewyang) (3 commits, 4 PRs, 1 issue, 3 comments) -* [@whyrusleeping](https://github.com/whyrusleeping) (72 commits, 15 PRs, 11 issues, 73 comments) -* [@windemut](https://github.com/windemut) (1 issue, 5 comments) -* [@yangjian102621](https://github.com/yangjian102621) (2 issues, 5 comments) -* [@yaohcn](https://github.com/yaohcn) (1 commit, 1 PR, 1 comment) -* [@yusefnapora](https://github.com/yusefnapora) (1 comment) -* [@ZenGround0](https://github.com/ZenGround0) (9 commits, 9 PRs, 23 issues, 37 comments) -* [@zhengboowen](https://github.com/zhengboowen) (3 issues) -* [@zixuanzh](https://github.com/zixuanzh) (1 PR) - -### ๐Ÿ™Œ๐Ÿฝ Want to contribute? - -Would you like to contribute to the Filecoin project and donโ€™t know how? Here are a few places you can get started: - -- Check out the [Contributing Guidelines](https://github.com/filecoin-project/go-filecoin/blob/master/CONTRIBUTING.md) - -- Look for issues with the `good-first-issue` label in [go-filecoin](https://docs.google.com/document/d/1dfTVASs9cQMo4NPqJmXjEEX-Ju_M9Vw-4AelN1aHOV8/edit#) and [rust-fil-proofs](https://github.com/filecoin-project/rust-fil-proofs/issues?q=is%3Aissue+is%3Aopen+label%3A"good+first+issue") - -- Join the [community chat on Matrix/Slack](https://github.com/filecoin-project/community#chat), introduce yourself in #_fil-lobby, and let us know where you would like to contribute - -- Join the [user devnet](https://github.com/filecoin-project/go-filecoin/wiki/Getting-Started) - -### โ‰๏ธ Do you have questions? - -The best place to ask your questions about go-filecoin, how it works, and what you can do with it is at [discuss.filecoin.io](https://discuss.filecoin.io). We are also available at the [community chat on Matrix/Slack](https://github.com/filecoin-project/community#chat). - ---- - -## go-filecoin 0.2.4 - -We're happy to announce go-filecoin 0.2.4. This is a patch release with block validation improvements. As a placeholder before full implementation of block validation, block time was hardcoded to 30 seconds. It was also possible to manually configure a shorter block time via the CLI โ€” miners who did this gained an unfair block mining advantage. Over the past few weeks, a handful of enterprising devnet participantsยน ๐Ÿ˜‰ increasingly used this undocumented option to the point of severely degrading the devnet for everyone else. To get the devnet running smoothly again, we are releasing partial [block validation](https://github.com/filecoin-project/specs/pull/289). - -#### ๐ŸŒณ Features - -- Timestamp block | [go-filecoin #2897](https://github.com/filecoin-project/go-filecoin/pull/2897) -- Partial Block validation | [go-filecoin #2899](https://github.com/filecoin-project/go-filecoin/pull/2899), [go-filecoin #2882](https://github.com/filecoin-project/go-filecoin/pull/2882), [go-filecoin #2914](https://github.com/filecoin-project/go-filecoin/pull/2914) - -#### โ˜๐Ÿฝ Upgrade notice - -As a reminder, only the latest version of go-filecoin will connect to the user devnet until protocol upgrade work is complete. Users will need to upgrade to 0.2.4 to connect to the user devnet. - -[1] If that was you, weโ€™d love to collaborate to see if you can find other ways to break our implementation! Please email us at [mining@filecoin.io](mailto:mining@filecoin.io). - ---- - -## go-filecoin 0.2.2 - -We're happy to announce go-filecoin 0.2.2. This is a maintenance release with bug fixes and debugging improvements. After the 0.2.1 release, we found a bug in the dht ([#2753](https://github.com/filecoin-project/go-filecoin/issues/2753)) that caused some nodes to panic. This was fixed in [#2754](https://github.com/filecoin-project/go-filecoin/pull/2754) by bumping the [go-libp2p-kad-dht](https://github.com/libp2p/go-libp2p-kad-dht) version from 0.0.4 to 0.0.8. - -#### ๐Ÿž Bug fixes - -- Update to go-libp2p-kad-dht@v0.0.8 | [go-filecoin #2754](https://github.com/filecoin-project/go-filecoin/pull/2754) -- Fix output for set price | [go-filecoin #2727](https://github.com/filecoin-project/go-filecoin/pull/2727) - -#### ๐ŸŒณ Features - -- Add an approval step to user devnet deploy | [go-filecoin #2765](https://github.com/filecoin-project/go-filecoin/pull/2765) -- Log messages proper printing | [go-filecoin #2728](https://github.com/filecoin-project/go-filecoin/pull/2728) -- Add filecoin version command to inspect output | [go-filecoin #2725](https://github.com/filecoin-project/go-filecoin/pull/2725) - -#### โ˜๐Ÿฝ Upgrade notice - -As a reminder, only the latest version of go-filecoin will connect to the user devnet until model for change work is complete. Users will need to upgrade to 0.2.2 to connect to the user devnet. - ---- - -## go-filecoin 0.2.1 - -We're happy to announce go-filecoin 0.2.1. This release is heavy on behind-the-scenes upgrades, including support for filesystem repo migrations and storage disputes, a better message pool, proofs improvements, and a bump to libp2p version for more reliable relays. User-facing improvements such as new commands and options, better status messages, and lots of bugfixes are also included. Get pumped! ๐ŸŽ - -### Install and Setup - -#### โŒ› Chain syncing status - -When a filecoin node is first created, it must download and verify the chain. We call this โ€œchain syncingโ€. While initial commands (such as tapping the faucet or dashboard streaming) can be run immediately, any other commands (such as mining commands) will return errors until chain syncing is complete. Currently, this can take several hours. - -To clarify, weโ€™ve added [wiki updates](https://github.com/filecoin-project/go-filecoin/wiki/Getting-Started#wait-for-chain-sync), better status messages, and cleaner console output for chain syncing. In future releases, weโ€™ll also address the underlying problem of slow chain syncing. - -#### ๐Ÿ’  Sector storage configuration - -Where would you like the filecoin node to store client data? You can now choose! There are two ways to specify the location of the sector storage directory: the `sectorbase.rootdir` config entry, or the `--sectordir` option to `go-filecoin init`. - -If you donโ€™t specify a location, data is stored in `$HOME/.filecoin_sectors` by default. - -### Features - -#### ๐Ÿ„ Upgradeable repo - -In addition to sealed client data, Filecoin nodes also store other data on-disk such as configuration data, blockchain blocks, deal state, and encryption keys. As development progresses, we need a way to safely change the type and schema of this data. In this release, we include an accepted [design](https://docs.google.com/document/d/1THzh1mrNCKYbdk1zP72xV8pfr1yQBe2n3ptrSAYyVI8/) for filesystem repo migrations, and an initial layout for the migration tool. This paves the way for filecoin nodes to seamlessly update when running in production. - -For more information, check out the help text: - -``` -tools/migration/go-filecoin-migrate --help -``` - -#### ๐Ÿ’Ž Storage payments - -This release includes work towards storage protocol dispute resolution. Payment channels can now contain conditions that will query another actor before a voucher is redeemed. Payment channels can also be canceled by the payer. This will trigger an early close if the target of the channel does not redeem a payment. These features can be used together with piece inclusion proofs (coming soon) to enforce proof of storage when storage clients pay storage miners. - -#### ๐Ÿ› New debugging commands - -Three new commands (`inspect`, `protocol`, and `bitswap`) are now available for your debugging and exploring adventures: - -\* `go-filecoin inspect all` prints all the necessary information for opening a bug report on GitHub. This includes operating system details, your current go-filecoin config, and a few other commonly needed stats. - -\* `go-filecoin protocol` prints details regarding parameters for a nodeโ€™s protocol, such as autoseal interval and sector size. These are helpful for debugging some of the internals of Filecoinโ€™s proofs and protocol systems. - -\* `go-filecoin bitswap` prints details about a nodeโ€™s libp2p bitswap system, such as blocks, data, and messages received and sent. These are commonly used in network debugging. - -For more details, run any command followed by the `--help` flag. - -### Performance and Reliability - -#### ๐Ÿ™Œ Upgrade libp2p to 0.0.16 - -libp2p recently landed a bunch of improvements to relay functionality, addressing heavy resource usage in some production relay nodes. Weโ€™ve upgraded to [go-libp2p](http://github.com/libp2p/go-libp2p) 0.0.16 to enjoy the same fixes in filecoin. - -#### ๐Ÿ“ฌ Better message validation - -Weโ€™ve taken several steps to harden the message pool. The pool now rejects messages that will obviously fail processing due to problems like invalid signature, insufficient funds, no gas, or non-existent actor. It also tracks nonces to ensure that messages are correctly sequenced, and that no account has too many messages in the pool. Finally, the pool now limits the total messages it will accept. - -#### ๐Ÿ”— Proofs integration - -Behind the scenes, much groundwork has been laid for more flexible and powerful storage proofs. This release includes more efficient memory utilization when writing large pieces to a sector. It also includes initial support for piece inclusion proofs, [multiple sector sizes](https://github.com/filecoin-project/go-filecoin/issues/2530), and [variable proof lengths](https://github.com/filecoin-project/go-filecoin/pull/2607). - -#### ๐Ÿ”ฎ Proofs performance - -Over in `rust-fil-proofs`, progress is accelerating on more complete and efficient implementations. This includes switching to [mmap for more efficient merkle trees](https://github.com/filecoin-project/rust-fil-proofs/pull/529), [abstractions over the hasher](https://github.com/filecoin-project/rust-fil-proofs/pull/543), [limiting parallelism when generating groth proofs](https://github.com/filecoin-project/rust-fil-proofs/pull/582), and [calculating](https://github.com/filecoin-project/rust-fil-proofs/pull/621) and [aggregating](https://github.com/filecoin-project/rust-fil-proofs/pull/605) challenges across partitions. - -### Refactors and Endeavors - -#### ๐Ÿ FAST (Filecoin Automation & System Toolkit) - -We have significantly improved the FAST testing system for Filecoin since the last release. FAST now automatically includes relevant log data and messages from testing nodes in the event of a test failure. FAST also has an all-new localnet tool to quickly and easily set up local Filecoin node clusters for testing and experimentation. See [the localnet readme](https://github.com/filecoin-project/go-filecoin/blob/master/tools/fast/bin/localnet/README.md) for details. - -#### ๐Ÿ‘พ Go modules - -With Go 1.11โ€™s preliminary support for versioned modules, we have switched to [Go modules](https://github.com/golang/go/wiki/Modules) for dependency management. This allows for easier dependency management and faster updates when dealing with updates from upstream dependencies. - -#### ๐Ÿ˜ Design documents - -We regularly write [design docs](https://github.com/filecoin-project/designdocs/blob/master/designdocs.md) before coding begins on important features or components. These short documents are useful in capturing knowledge, formalizing our thinking, and sharing design intent. Going forward, you can find new design docs in the [designdocs](https://github.com/filecoin-project/designdocs/) repo. - -### Changelog - -A full list of [all 177 PRs in this release](https://github.com/search?q=is%3Apr+merged%3A2019-03-26..2019-05-10+repo%3Afilecoin-project%2Fgo-filecoin+repo%3Afilecoin-project%2Frust-fil-proofs+repo%3Afilecoin-project%2Fspecs&type=Issues), including many bugfixes not listed here, can be found on Github. - -### Contributors - -โค๏ธ Huge thank you to everyone that made this release possible! By alphabetical order, here are all the humans who contributed to this release via the `go-filecoin`, `rust-fil-proofs`, and `specs` repos: - -* [@814556001](https://github.com/814556001) (1 comment) -* [@a8159236](https://github.com/a8159236) (3 issues, 9 comments) -* [@aaronhenshaw](https://github.com/aaronhenshaw) (1 issue, 1 comment) -* [@AbelLaker](https://github.com/AbelLaker) (2 issues, 2 comments) -* [@acruikshank](https://github.com/acruikshank) (47 commits, 24 PRs, 42 issues, 81 comments) -* [@aioloszcy](https://github.com/aioloszcy) (2 issues) -* [@alanshaw](https://github.com/alanshaw) (1 commit, 1 PR, 4 comments) -* [@anacrolix](https://github.com/anacrolix) (2 commits, 2 PRs, 17 comments) -* [@andrewxhill](https://github.com/andrewxhill) (1 issue) -* [@AndyChen1984](https://github.com/AndyChen1984) (5 issues, 9 comments) -* [@anorth](https://github.com/anorth) (61 commits, 65 PRs, 46 issues, 340 comments) -* [@arcalinea](https://github.com/arcalinea) (1 issue, 4 comments) -* [@arielgabizon](https://github.com/arielgabizon) (1 issue) -* [@arsstone](https://github.com/arsstone) (1 PR, 1 issue, 6 comments) -* [@aschmahmann](https://github.com/aschmahmann) (4 comments) -* [@bigs](https://github.com/bigs) (1 comment) -* [@block2020](https://github.com/block2020) (5 issues, 1 comment) -* [@btcioner](https://github.com/btcioner) (2 comments) -* [@bvohaska](https://github.com/bvohaska) (1 commit, 1 PR, 6 issues, 26 comments) -* [@Byte-Doctor](https://github.com/Byte-Doctor) (1 issue) -* [@cgwyx](https://github.com/cgwyx) (2 comments) -* [@chenminjian](https://github.com/chenminjian) (1 issue, 3 comments) -* [@comradekingu](https://github.com/comradekingu) (1 commit, 1 PR) -* [@contrun](https://github.com/contrun) (4 commits, 5 PRs, 1 issue, 7 comments) -* [@craigbranscom](https://github.com/craigbranscom) (1 issue) -* [@creationix](https://github.com/creationix) (1 comment) -* [@Cyanglacier](https://github.com/Cyanglacier) (1 issue) -* [@Daniel-Wang](https://github.com/Daniel-Wang) (1 commit, 1 PR, 1 comment) -* [@danigrant](https://github.com/danigrant) (2 commits, 2 PRs) -* [@dayou5168](https://github.com/dayou5168) (6 issues, 17 comments) -* [@dayu26](https://github.com/dayu26) (1 comment) -* [@deaswang](https://github.com/deaswang) (1 comment) -* [@decentralion](https://github.com/decentralion) (1 issue, 12 comments) -* [@deltazxm](https://github.com/deltazxm) (1 issue, 5 comments) -* [@dignifiedquire](https://github.com/dignifiedquire) (49 commits, 32 PRs, 16 issues, 151 comments) -* [@diwufeiwen](https://github.com/diwufeiwen) (3 issues, 3 comments) -* [@djdv](https://github.com/djdv) (2 comments) -* [@DonaldTsang](https://github.com/DonaldTsang) (1 issue) -* [@EbonyBelle](https://github.com/EbonyBelle) (1 comment) -* [@ebuchman](https://github.com/ebuchman) (1 issue) -* [@eefahy](https://github.com/eefahy) (1 comment) -* [@ElecRoastChicken](https://github.com/ElecRoastChicken) (2 comments) -* [@evildido](https://github.com/evildido) (1 issue, 3 comments) -* [@fengchenggang1](https://github.com/fengchenggang1) (1 issue) -* [@firmianavan](https://github.com/firmianavan) (1 commit, 2 PRs, 3 comments) -* [@fjl](https://github.com/fjl) (4 comments) -* [@frrist](https://github.com/frrist) (100 commits, 51 PRs, 44 issues, 111 comments) -* [@gfc-test](https://github.com/gfc-test) (1 PR) -* [@gmas](https://github.com/gmas) (12 commits) -* [@gmasgras](https://github.com/gmasgras) (22 commits, 19 PRs, 14 issues, 35 comments) -* [@gnunicorn](https://github.com/gnunicorn) (1 comment) -* [@haadcode](https://github.com/haadcode) (1 issue) -* [@hango-hango](https://github.com/hango-hango) (1 comment) -* [@haoglehaogle](https://github.com/haoglehaogle) (1 issue) -* [@hsanjuan](https://github.com/hsanjuan) (3 commits, 2 PRs, 7 comments) -* [@ianjdarrow](https://github.com/ianjdarrow) (5 comments) -* [@imrehg](https://github.com/imrehg) (7 issues, 4 comments) -* [@ipfsmainofficial](https://github.com/ipfsmainofficial) (1 issue, 1 comment) -* [@irocnX](https://github.com/irocnX) (1 issue, 1 comment) -* [@jamiew](https://github.com/jamiew) (1 comment) -* [@jaybutera](https://github.com/jaybutera) (1 issue) -* [@jbenet](https://github.com/jbenet) (1 commit, 4 issues, 8 comments) -* [@jcchua](https://github.com/jcchua) (1 issue, 1 comment) -* [@jesseclay](https://github.com/jesseclay) (1 issue, 1 comment) -* [@jhiesey](https://github.com/jhiesey) (1 issue) -* [@jimpick](https://github.com/jimpick) (1 issue, 3 comments) -* [@joshgarde](https://github.com/joshgarde) (4 comments) -* [@jscode017](https://github.com/jscode017) (2 commits, 2 PRs, 4 issues, 17 comments) -* [@karalabe](https://github.com/karalabe) (1 issue, 4 comments) -* [@kishansagathiya](https://github.com/kishansagathiya) (1 issue, 4 comments) -* [@Kostadin](https://github.com/Kostadin) (1 commit, 1 PR) -* [@Kubuxu](https://github.com/Kubuxu) (13 commits, 9 PRs, 8 comments) -* [@lanzafame](https://github.com/lanzafame) (2 commits, 1 PR, 1 issue, 4 comments) -* [@laser](https://github.com/laser) (73 commits, 64 PRs, 77 issues, 178 comments) -* [@leinue](https://github.com/leinue) (1 issue, 1 comment) -* [@lidel](https://github.com/lidel) (3 comments) -* [@life-i](https://github.com/life-i) (1 issue, 3 comments) -* [@lin6461](https://github.com/lin6461) (2 issues, 5 comments) -* [@linsheng9731](https://github.com/linsheng9731) (1 issue) -* [@loulancn](https://github.com/loulancn) (1 issue, 1 comment) -* [@Luca8991](https://github.com/Luca8991) (1 issue) -* [@madper](https://github.com/madper) (1 commit, 1 PR) -* [@magik6k](https://github.com/magik6k) (4 commits, 4 PRs, 9 comments) -* [@MariusVanDerWijden](https://github.com/MariusVanDerWijden) (2 comments) -* [@markwylde](https://github.com/markwylde) (2 issues, 5 comments) -* [@mburns](https://github.com/mburns) (1 PR) -* [@mgoelzer](https://github.com/mgoelzer) (2 issues, 7 comments) -* [@mhammersley](https://github.com/mhammersley) (3 issues, 15 comments) -* [@mikeal](https://github.com/mikeal) (1 PR, 1 issue, 2 comments) -* [@mishmosh](https://github.com/mishmosh) (21 commits, 8 PRs, 35 issues, 159 comments) -* [@mkky-lisheng](https://github.com/mkky-lisheng) (1 issue, 1 comment) -* [@moyid](https://github.com/moyid) (4 comments) -* [@mslipper](https://github.com/mslipper) (9 commits, 11 PRs, 7 issues, 51 comments) -* [@muronglaowang](https://github.com/muronglaowang) (8 issues, 7 comments) -* [@Nanofortress](https://github.com/Nanofortress) (1 issue, 4 comments) -* [@NatoBoram](https://github.com/NatoBoram) (3 issues, 9 comments) -* [@nicola](https://github.com/nicola) (17 commits, 5 PRs, 7 issues, 25 comments) -* [@nijynot](https://github.com/nijynot) (1 PR) -* [@ognots](https://github.com/ognots) (56 commits, 37 PRs, 19 issues, 86 comments) -* [@olizilla](https://github.com/olizilla) (1 commit, 1 PR) -* [@Pacius](https://github.com/Pacius) (1 issue) -* [@ParadiseTaboo](https://github.com/ParadiseTaboo) (1 comment) -* [@pengxiankaikai](https://github.com/pengxiankaikai) (7 issues, 15 comments) -* [@phritz](https://github.com/phritz) (13 commits, 11 PRs, 50 issues, 366 comments) -* [@pkrasam](https://github.com/pkrasam) (1 issue, 1 comment) -* [@pooja](https://github.com/pooja) (5 commits, 1 PR, 11 issues, 95 comments) -* [@porcuquine](https://github.com/porcuquine) (62 commits, 25 PRs, 31 issues, 246 comments) -* [@protocolin](https://github.com/protocolin) (1 issue) -* [@pxrxingrui520](https://github.com/pxrxingrui520) (1 issue) -* [@rafael81](https://github.com/rafael81) (2 commits, 2 PRs, 1 issue, 3 comments) -* [@raulk](https://github.com/raulk) (4 commits, 5 PRs, 22 comments) -* [@redransil](https://github.com/redransil) (1 issue) -* [@RichardLitt](https://github.com/RichardLitt) (1 commit, 1 PR) -* [@ridewindx](https://github.com/ridewindx) (2 commits, 2 PRs) -* [@rjan90](https://github.com/rjan90) (1 comment) -* [@rkowalick](https://github.com/rkowalick) (52 commits, 46 PRs, 17 issues, 106 comments) -* [@RobQuistNL](https://github.com/RobQuistNL) (1 issue, 7 comments) -* [@rosalinekarr](https://github.com/rosalinekarr) (38 commits, 39 PRs, 48 issues, 157 comments) -* [@sanchopansa](https://github.com/sanchopansa) (2 comments) -* [@sandjj](https://github.com/sandjj) (5 issues, 8 comments) -* [@SaveTheAles](https://github.com/SaveTheAles) (1 issue, 3 comments) -* [@schomatis](https://github.com/schomatis) (47 commits, 22 PRs, 12 issues, 173 comments) -* [@scout](https://github.com/scout) (3 comments) -* [@SCUTVincent](https://github.com/SCUTVincent) (1 issue, 2 comments) -* [@shannonwells](https://github.com/shannonwells) (23 commits, 24 PRs, 43 issues, 68 comments) -* [@sidke](https://github.com/sidke) (79 commits, 22 PRs, 18 issues, 12 comments) -* [@SmartMeshFoundation](https://github.com/SmartMeshFoundation) (1 issue) -* [@songjiayang](https://github.com/songjiayang) (1 comment) -* [@Stebalien](https://github.com/Stebalien) (4 commits, 6 PRs, 18 comments) -* [@sternhenri](https://github.com/sternhenri) (38 commits, 10 PRs, 5 issues, 50 comments) -* [@steven004](https://github.com/steven004) (3 commits, 7 PRs, 4 issues, 11 comments) -* [@sywyn219](https://github.com/sywyn219) (3 issues, 13 comments) -* [@Tbaut](https://github.com/Tbaut) (1 issue) -* [@terichadbourne](https://github.com/terichadbourne) (1 issue, 12 comments) -* [@thomas92911](https://github.com/thomas92911) (1 issue, 1 comment) -* [@travisperson](https://github.com/travisperson) (98 commits, 53 PRs, 40 issues, 190 comments) -* [@tycholiu](https://github.com/tycholiu) (1 comment) -* [@urugang](https://github.com/urugang) (1 PR, 1 issue, 1 comment) -* [@vmx](https://github.com/vmx) (8 commits, 5 PRs, 2 issues, 19 comments) -* [@vyzo](https://github.com/vyzo) (8 comments) -* [@warpfork](https://github.com/warpfork) (6 comments) -* [@waynewyang](https://github.com/waynewyang) (3 commits, 5 PRs, 2 issues, 8 comments) -* [@whyrusleeping](https://github.com/whyrusleeping) (157 commits, 42 PRs, 55 issues, 296 comments) -* [@windstore](https://github.com/windstore) (1 issue, 2 comments) -* [@woshihanhaoniao](https://github.com/woshihanhaoniao) (5 issues, 6 comments) -* [@wyblyf](https://github.com/wyblyf) (1 issue, 6 comments) -* [@xcshuan](https://github.com/xcshuan) (1 issue, 1 comment) -* [@yangjian102621](https://github.com/yangjian102621) (1 PR, 4 issues, 16 comments) -* [@yaohcn](https://github.com/yaohcn) (1 PR, 1 issue, 3 comments) -* [@yph152](https://github.com/yph152) (1 issue) -* [@ytQiao](https://github.com/ytQiao) (1 issue, 2 comments) -* [@yusefnapora](https://github.com/yusefnapora) (1 comment) -* [@yyh1102](https://github.com/yyh1102) (2 comments) -* [@zebul](https://github.com/zebul) (1 issue) -* [@ZenGround0](https://github.com/ZenGround0) (35 commits, 29 PRs, 85 issues, 128 comments) -* [@zhangkuicheng](https://github.com/zhangkuicheng) (2 issues, 4 comments) -* [@zixuanzh](https://github.com/zixuanzh) (4 comments) -* [@zjoooooo](https://github.com/zjoooooo) (1 issue, 1 comment) - -### ๐Ÿ™Œ๐Ÿฝ Want to contribute? - -Would you like to contribute to the Filecoin project and donโ€™t know how? Here are a few places you can get started: - -- Check out the [Contributing Guidelines](https://github.com/filecoin-project/go-filecoin/blob/master/CONTRIBUTING.md) -- Look for issues with the `good-first-issue` label in [go-filecoin](https://github.com/filecoin-project/go-filecoin/issues?q=is%3Aissue+is%3Aopen+label%3A"good+first+issue") and [rust-fil-proofs](https://github.com/filecoin-project/rust-fil-proofs/issues?q=is%3Aissue+is%3Aopen+label%3A"good+first+issue") -- Join the [community chat on Matrix/Slack](https://github.com/filecoin-project/community#chat), introduce yourself in #_fil-lobby, and let us know where you would like to contribute - -### โ‰๏ธ Do you have questions? - -The best place to ask your questions about go-filecoin, how it works, and what you can do with it is at [discuss.filecoin.io](https://discuss.filecoin.io). We are also available at the [community chat on Matrix/Slack](https://github.com/filecoin-project/community#chat). - ---- - -## go-filecoin 0.1.4 - -We're happy to announce go-filecoin 0.1.4. This release contains a better install experience, initial Proof-of-Spacetime integration, more reliable message sending and networking, and many other improvements. Get pumped! ๐ŸŽ - -### Install and Setup - -#### ๐Ÿ’ Binary releases - -Linux and MacOS binaries for go-filecoin are now available! See [Installing from binary](https://github.com/filecoin-project/go-filecoin/wiki/Getting-Started#installing-from-binary) for instructions. - -#### ๐Ÿฑ Precompiled proofs parameters - -Running secure proofs requires parameter files that are several GB in size. Previously, these files were generated at install, an extremely memory-intensive process causing slow or impossible builds for many users. Now, you can download pre-generated files during install by running `paramfetch`. This step is now included in the [Installing from binary](https://github.com/filecoin-project/go-filecoin/wiki/Getting-Started#installing-from-binary) instructions. - -#### ๐Ÿฆ– Version checking - -go-filecoin now checks that it is running the same version (at the same commit) while connecting to a devnet. This is a temporary fix until a model for change is implemented, allowing different versions to interoperate. - -### Features - -#### ๐Ÿ’Ž Proof-of-Spacetime Integration - -Miners now call `rust-fil-proofs` to periodically generate proofs of continued storage. With this major integration in place, you can expect some follow-up (for example, storage mining faults do not yet appear on-chain) and continued optimizations to the underlying Proof-of-Spacetime construction and implementation. - -### Performance and Reliability - -#### ๐Ÿค Networking - -Weโ€™ve upgraded to [go-libp2p](http://github.com/libp2p/go-libp2p) 6.0.35 which has fixed autorelay reliability issues. Weโ€™ve also added a `go-filecoin dht` command for interacting with and debugging our dht. - -#### ๐ŸŽˆ Better message sending - -In the past, if messages failed, they failed silently. go-filecoin would continue to select nonces higher than the sent message, effectively deadlocking message sending. We have now implemented several improvements to message sending: incoming and outgoing queues, better nonce selection logic, and a message timeout after a certain number of blocks. See [message status](https://github.com/filecoin-project/go-filecoin/blob/6a34245644cd62436239b885cd7ba1f0f29d0ca5/commands/message.go) and mpool ls/show/rm commands for more. - -#### ๐Ÿ”— Chain syncing is faster - -Chain is now faster due to use of bitswap sessions. Woohoo! - -#### โŒ› Context deadline errors fixed - -In the past, the context deadline was set artificially low for file transfer. This caused some large file transfers to time out, preventing storage deals from being completed. Thank you to @markwylde, @muronglaowang, @pengxiankaikai, @sandjj, and others for bug reports. - -### Refactors and Endeavors - -#### ๐ŸฆŠ FAST (Filecoin Automation & System Toolkit) - -FAST is a common library of go-filecoin code that can be used in daemon testing, devnet initialization, and other applications like network randomization that involve managing nodes, running commands against them, and observing their state. - -Using FAST, weโ€™ve developed [localnet](https://github.com/filecoin-project/go-filecoin/tree/master/tools/fast/bin/localnet), a new tool to quickly and easily set up a local network for testing, debugging, development, and more. Want to give it a whirl? Check out the [localnet README](https://github.com/filecoin-project/go-filecoin/tree/master/tools/fast/bin/localnet). - -#### ๐Ÿ‘พ Porcelain/Plumbing refactor for node object - -Previously, the node object contained both interfaces and internals for much of the core protocol. It was difficult to unit test due to many dependencies and complicated setup. Following the [porcelain and plumbing pattern from Git](https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain), we have now decoupled the node object from many of its dependencies. We have also created a separate API for block, storage, and retrieval mining. - -### Changelog - -A full list of [all 200 PRs in this release](https://github.com/filecoin-project/go-filecoin/pulls?utf8=%E2%9C%93&q=is%3Apr+merged%3A2019-02-14..2019-03-26) can be found on Github. - -### Contributors - -โค๏ธ Huge thank you to everyone that made this release possible! By alphabetical order, here are all the humans who contributed issues and commits in `go-filecoin` and `rust-fil-proofs` to date: - -- [@aaronhenshaw](http://github.com/aaronhenshaw) -- [@aboodman](http://github.com/aboodman) -- [@AbelLaker](http://github.com/AbelLaker) -- [@alanshaw](http://github.com/alanshaw) -- [@acruikshank](http://github.com/acruikshank) -- [@anacrolix](http://github.com/anacrolix) -- [@andychen1984](http://github.com/andychen1984) -- [@anorth](http://github.com/anorth) -- [@Byte-Doctor](http://github.com/Byte-Doctor) -- [@chenminjuan](http://github.com/chenminjuan) -- [@coderlane](http://github.com/coderlane) -- [@comeradekingu](http://github.com/comeradekingu) -- [@danigrant](http://github.com/danigrant) -- [@dayou5168](http://github.com/dayou5168) -- [@dignifiedquire](http://github.com/dignifiedquire) -- [@diwufeiwen](http://github.com/diwufeiwen) -- [@ebuchman](http://github.com/ebuchman) -- [@eefahy](http://github.com/eefahy) -- [@firmianavan](http://github.com/firmianavan) -- [@frrist](http://github.com/frrist) -- [@gmasgras](http://github.com/gmasgras) -- [@haoglehaogle](http://github.com/haoglehaogle) -- [@hsanjuan](http://github.com/hsanjuan) -- [@imrehg](http://github.com/imrehg) -- [@jaybutera](http://github.com/jaybutera) -- [@jbenet](http://github.com/jbenet) -- [@jimpick](http://github.com/jimpick) -- [@karalabe](http://github.com/karalabe) -- [@kubuxu](http://github.com/kubuxu) -- [@lanzafame](http://github.com/lanzafame) -- [@laser](http://github.com/laser) -- [@leinue](http://github.com/leinue) -- [@life-i](http://github.com/life-i) -- [@luca8991](http://github.com/luca8991) -- [@madper](http://github.com/madper) -- [@magik6k](http://github.com/magik6k) -- [@markwylde](http://github.com/markwylde) -- [@mburns](http://github.com/mburns) -- [@michellebrous](http://github.com/michellebrous) -- [@mikael](http://github.com/mikael) -- [@mishmosh](http://github.com/mishmosh) -- [@mslipper](http://github.com/mslipper) -- [@muronglaowang](http://github.com/muronglaowang) -- [@nanofortress](http://github.com/nanofortress) -- [@natoboram](http://github.com/natoboram) -- [@nicola](http://github.com/nicola) -- [@ognots](http://github.com/ognots) -- [@olizilla](http://github.com/olizilla) -- [@pacius](http://github.com/pacius) -- [@pengxiankaikai](http://github.com/pengxiankaikai) -- [@pooja](http://github.com/pooja) -- [@porcuquine](http://github.com/porcuquine) -- [@phritz](http://github.com/phritz) -- [@pkrasam](http://github.com/pkrasam) -- [@pxrxingrui520](http://github.com/pxrxingrui520) -- [@raulk](http://github.com/raulk) -- [@rafael81](http://github.com/rafael81) -- [@richardlitt](http://github.com/richardlitt) -- [@rkowalick](http://github.com/rkowalick) -- [@rosalinekarr](http://github.com/rosalinekarr) -- [@sandjj](http://github.com/sandjj) -- [@schomatis](http://github.com/schomatis) -- [@shannonwells](http://github.com/shannonwells) -- [@sidka](http://github.com/sidka) -- [@stebalien](http://github.com/stebalien) -- [@steven004](http://github.com/steven004) -- [@sywyn219](http://github.com/sywyn219) -- [@tbaut](http://github.com/tbaut) -- [@thomas92911](http://github.com/thomas92911) -- [@travisperson](http://github.com/travisperson) -- [@vmx](http://github.com/vmx) -- [@waynewyang](http://github.com/waynewyang) -- [@whyrusleeping](http://github.com/whyrusleeping) -- [@windstore](http://github.com/windstore) -- [@woshihanhaoniao](http://github.com/woshihanhaoniao) -- [@xcshuan](http://github.com/xcshuan) -- [@yangjian102621](http://github.com/yangjian102621) -- [@yph152](http://github.com/yph152) -- [@zenground0](http://github.com/zenground0) -- [@zhangkuicheng](http://github.com/zhangkuicheng) -- [@zjoooooo](http://github.com/zjoooooo) - -### ๐Ÿ™Œ๐Ÿฝ Want to contribute? - -Would you like to contribute to the Filecoin project and donโ€™t know how? Here are a few places you can get started: - -- Check out the [Contributing Guidelines](https://github.com/filecoin-project/go-filecoin/blob/master/CONTRIBUTING.md) -- Look for issues with the `good-first-issue` label in [go-filecoin](https://github.com/filecoin-project/go-filecoin/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3A%22e-good-first-issue%22+) and [rust-fil-proofs](https://github.com/filecoin-project/rust-fil-proofs/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) -- Join the [community chat on Matrix/Slack](https://github.com/filecoin-project/community#chat), introduce yourself in #_fil-lobby, and let us know where you would like to contribute - -### โ‰๏ธ Do you have questions? - -The best place to ask your questions about go-filecoin, how it works, and what you can do with it is at [discuss.filecoin.io](https://discuss.filecoin.io). We are also available at the [community chat on Matrix/Slack](https://github.com/filecoin-project/community#chat). +# venus changelog diff --git a/CODEWALK.md b/CODEWALK.md index 44808ba930..9ebc6ce6f8 100644 --- a/CODEWALK.md +++ b/CODEWALK.md @@ -2,11 +2,11 @@ This document is formatted one-sentence-per-line, breaking very long sentences at phrase boundaries. This format makes diffs clean and review comments easy to target. --> -# Go-filecoin code overview +# Venus code overview -This document provides a high level tour of the go-filecoin implementation of the Filecoin protocols in Go. +This document provides a high level tour of the venus implementation of the Venus protocols in Go. -This document assumes a reasonable level of knowledge about the Filecoin system and protocols, which are not re-explained here. +This document assumes a reasonable level of knowledge about the Venus system and protocols, which are not re-explained here. It is complemented by specs (link forthcoming) that describe the key concepts implemented here. **Table of contents** @@ -25,18 +25,12 @@ It is complemented by specs (link forthcoming) that describe the key concepts im - [A tour of the code](#a-tour-of-the-code) - [Historyโ€“the Node object](#historythe-node-object) - [Core services](#core-services) - - [Plumbing & porcelain](#plumbing--porcelain) - [Commands](#commands) - - [Protocols](#protocols) - - [Protocol Mining APIs](#protocol-mining-apis) - [Actors](#actors) - [The state tree](#the-state-tree) - [Messages and state transitions](#messages-and-state-transitions) - [Consensus](#consensus) - - [Storage protocol](#storage-protocol) - - [Retrieval](#retrieval) - [Entry point](#entry-point) -- [Sector builder & proofs](#sector-builder--proofs) - [Building and distribution.](#building-and-distribution) - [Groth parameters](#groth-parameters) - [Proof mode configuration](#proof-mode-configuration) @@ -50,11 +44,8 @@ It is complemented by specs (link forthcoming) that describe the key concepts im - [Unit Tests (`-unit`)](#unit-tests--unit) - [Integration Tests (`-integration`)](#integration-tests--integration) - [Functional Tests (`-functional`)](#functional-tests--functional) - - [Sector Builder Tests (`-sectorbuilder`)](#sector-builder-tests--sectorbuilder) - [Dependencies](#dependencies) - [Patterns](#patterns) - - [Plumbing and porcelain](#plumbing-and-porcelain) - - [Consumer-defined interfaces](#consumer-defined-interfaces) - [Observability](#observability) - [Metrics](#metrics) - [Tracing](#tracing) @@ -63,25 +54,24 @@ It is complemented by specs (link forthcoming) that describe the key concepts im ## Background -The go-filecoin implementations is the result of combined research and development effort. +The venus implementations is the result of combined research and development effort. The protocol spec and architecture evolved from a prototype, and is the result of iterating towards our goals. -Go-filecoin is a work in progress. We are still working on clarifying the architecture and propagating good patterns throughout the code. Please bear with us, and weโ€™d love your help. -Filecoin borrows a lot from the [IPFS](https://ipfs.io/) project, including some patterns, tooling, and packages. +Venus borrows a lot from the [IPFS](https://ipfs.io/) project, including some patterns, tooling, and packages. Some benefits of this include: - the projects encode data in the same way ([IPLD](https://ipld.io/), [CIDs](https://github.com/multiformats/cid)), easing interoperability; -- the go-filecoin project can build on solid libraries like the IPFS commands. +- the venus project can build on solid libraries like the IPFS commands. Other patterns, we've evolving for our needs: - go-ipfs relies heavily on shell-based integration testing; we aim to rely heavily on unit testing and Go-based integration tests. - The go-ipfs package structure involves a deep hierarchy of dependent implementations; we're moving towards a more Go-idiomatic approach with narrow interfaces defined in consuming packages (see [Patterns](#patterns). -- The term "block" is heavily overloaded: a blockchain block ([`types/block.go`](https://github.com/filecoin-project/go-filecoin/tree/master/types/block.go)), +- The term "block" is heavily overloaded: a blockchain block ([`types/block.go`](https://github.com/filecoin-project/venus/tree/master/pkg/types/block.go)), but also content-id-addressed blocks in the block service. Blockchain blocks are stored in block service blocks, but are not the same thing. @@ -100,7 +90,7 @@ Blockchain blocks are stored in block service blocks, but are not the same thing โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ - โ–ผ โ–ผ โ–ผ โ–ผ โ”‚ + โ–ผ โ–ผ โ–ผ โ–ผ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚ Storage API โ”‚ Retrieval API โ”‚ Block API โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ @@ -112,10 +102,10 @@ Internal โ”‚ โ”‚ Protocol โ”‚ Protocol โ”‚ Protocol โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ–ผ โ–ผ โ–ผ โ”‚ โ–ผ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” - โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ - โ”‚ โ”‚ Core API โ”‚ โ”‚ โ”‚ Porcelain โ”‚ Plumbing โ”‚ - โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚ โ”‚ โ””โ”€โ–ถโ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ - โ”‚ โ”‚ โ”‚ โ”‚ + โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ + โ”‚ โ”‚ Core API โ”‚ โ”‚ โ”‚ Client API + โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถโ”‚ โ”‚ โ””โ”€โ–ถ + โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ” @@ -132,23 +122,13 @@ Internal โ”‚ โ”‚ Protocol โ”‚ Protocol โ”‚ Protocol โ”‚ ### Historyโ€“the Node object -The `Node` ([`node/`](https://github.com/filecoin-project/go-filecoin/tree/master/node)) object is the "server". +The `Node` ([`node/`](https://github.com/filecoin-project/venus/tree/master/app/node)) object is the "server". It contains much of the core protocol implementation and plumbing. -As an accident of history it has become something of a god-object, which we are working to resolve. -The `Node` object is difficult to unit test due to its many dependencies and complicated set-up. -We are [moving away from this pattern](https://github.com/filecoin-project/go-filecoin/issues/1469#issuecomment-451619821), -and expect the Node object to be reduced to a glorified constructor over time. -The [`api`](https://github.com/filecoin-project/go-filecoin/tree/master/api) package contains the API of all the +The [`api`](https://github.com/filecoin-project/venus/tree/master/app/client) package contains the API of all the core building blocks upon which the protocols are implemented. The implementation of this API is the `Node`. -We are migrating away from this `api` package to the plumbing package, see below. -The [`protocol`](https://github.com/filecoin-project/go-filecoin/tree/master/protocol) package contains much of the application-level protocol code. -The protocols are implemented in terms of the plumbing & porcelain APIs (see below). -Currently the hello, retrieval and storage protocols are implemented here. -Block mining should move here (from the [`mining`](https://github.com/filecoin-project/go-filecoin/tree/master/mining) top-level package and `Node` internals). -Chain syncing may move here too. ### Core services @@ -170,32 +150,16 @@ Services include (not exhaustive): - Block service: content-addressed key value store that stores IPLD data, including blockchain blocks as well as the state tree (itโ€™s poorly named). - Wallet: manages keys. -### Plumbing & porcelain - -The [`plumbing`](https://github.com/filecoin-project/go-filecoin/tree/master/plumbing) & -[`porcelain`](https://github.com/filecoin-project/go-filecoin/tree/master/porcelain) packages are -the API for most non-protocol commands. - -__Plumbing__ is the set of public apis required to implement all user-, tool-, and some protocol-level features. -Plumbing implementations depend on the core services they need, but not on the `Node`. -Plumbing is intended to be fairly thin, routing requests and data between core components. -Plumbing implementations are often tested with real implementations of the core services they use, but can also be tested with fakes and mocks. - -__Porcelain__ implementations are convenience compositions of plumbing. -They depend only on the plumbing API, and can coordinate a sequence of actions. -Porcelain is ephemeral; the lifecycle is the duration of a single porcelain call: something calls into it, it does its thing, and then returns. -Porcelain implementations are ideally tested with fakes of the plumbing they use, but can also use full implementations. - ### Commands -The `go-filecoin` binary can run in two different modes, either as a long-running daemon exposing a JSON/HTTP RPC API, +The `venus` binary can run in two different modes, either as a long-running daemon exposing a JSON/HTTP RPC API, or as a command-line interface which interprets and routes requests as RPCs to a daemon. -In typical usage, you start the daemon with `go-filecoin daemon` then use the same binary to issue commands like `go-filecoin wallet addrs`, +In typical usage, you start the daemon with `venus daemon` then use the same binary to issue commands like `venus wallet ls`, which are transmitted to the daemon over the HTTP API. The commands package uses the [go-ipfs command library](https://github.com/ipfs/go-ipfs-cmds) and defines commands as both CLI and JSON entry points. -[Commands](https://github.com/filecoin-project/go-filecoin/tree/master/commands) implement user- and tool-facing functionality. +[Commands](https://github.com/filecoin-project/venus/tree/master/cmd) implement user- and tool-facing functionality. Command implementations should be very, very small. With no logic of their own, they should call just into a single plumbing or porcelain method (never into core APIs directly). The go-ipfs command library introduces some boilerplate which we can reduce with some effort in the future. @@ -204,34 +168,6 @@ Right now, some of the command implementations call into the node; this should c Tests for commands are generally end-to-end "daemon tests" that exercise CLI. They start some nodes and interact with them through shell commands. -### Protocols - -[Protocols](https://github.com/filecoin-project/go-filecoin/tree/master/protocol) embody -"application-level" functionality. They are persistent; they keep running without active user/tool activity. -Protocols interact with the network. -Protocols depend on `plumbing` and `porcelain` for their implementation, as well some "private" core APIs (at present, many still depend on the `Node` object). - -Protocols drive changes in, but do not own, core state. -For example, the chain sync protocol drives updates to the chain store (a core service), but the sync protocol does not own the chain data. -However, protocols may maintain their own non-core, protocol-specific datastores (e.g. unconfirmed deals). - -Application-level protocol implementations include: - -- Storage protocol: the mechanism by which clients make deals with miners, transfer data for storage, and then miners prove storage. -- Block mining protocol: the protocol for block mining and consensus. -Miners who are storing data participate in creating new blocks. -Miners win elections in proportion to storage committed. -This block mining is spread through a few places in the code. -Much in mining package, but also a bunch in the node implementation. -- Chain protocol: protocol for exchange of mined blocks - -##### Protocol Mining APIs -The [`storage`](https://github.com/filecoin-project/go-filecoin/tree/master/protocol/storage/), -[`retrieval`](https://github.com/filecoin-project/go-filecoin/tree/master/protocol/retrieval/) -and [`block`](https://github.com/filecoin-project/go-filecoin/tree/master/protocol/mining/) packages now house their own APIs. These are the new interfaces for all mining commands, but not miner creation. These Protocol APIs provide a the new interface for the Network layer of go-filecoin. Protocol APIs also consume Plumbing and Porcelain APIs. They are ephemeral, like the Porcelain API. Note also that the MiningOnce command uses `BlockMiningAPI` to create its own block mining worker, which lasts only for the time it takes to mine and post a new block. - - - More detail on the individual protocols is coming soon. ### Actors @@ -242,7 +178,7 @@ It is expected that other implementations will match the behaviour of the Go act An ABI describes how inputs and outputs to the VM are encoded. Future work will replace this implementation with a "real" VM. -The [Actor](https://github.com/filecoin-project/go-filecoin/blob/master/actor/actor.go) struct is the base implementation of actors, with fields common to all of them. +The [Actor](https://github.com/filecoin-project/venus/blob/master/pkg/types/actor.go) struct is the base implementation of actors, with fields common to all of them. - `Code` is a CID identifying the actor code, but since these actors are implemented in Go, is actually some fixed bytes acting as an identifier. This identifier selects the kind of actor implementation when a message is sent to its address. @@ -256,38 +192,24 @@ A storage miner actor exists for each miner in the Filesystem network. Their structs share the same code CID so they have the same behavior, but have distinct head state CIDs and balance. Each actor instance exists at an address in the state tree. An address is the hash of the actorโ€™s public key. -The [account](https://github.com/filecoin-project/go-filecoin/blob/master/actor/builtin/account) actor doesnโ€™t have any special behavior or state other than a balance. -Everyone who wants to send messages (transactions) has an account actor, and it is from this actorโ€™s address that they send messages. - -Every storage miner has an instance of a [miner](https://github.com/filecoin-project/go-filecoin/blob/master/actor/builtin/miner) actor. -The miner actor plays a role in the storage protocol, for example it pledges space and collateral for storage, posts proofs of storage, etc. -A miner actorโ€™s state is located in the state tree at its address; the value found there is an Actor structure. -The head CID in the actor structure points to that minerโ€™s state instance (encoded). - -Other built-in actors include the [payment broker](https://github.com/filecoin-project/go-filecoin/blob/master/actor/builtin/paymentbroken), -which provides a mechanism for off-chain payments via payment channels, -and the [storage market](https://github.com/filecoin-project/go-filecoin/blob/master/actor/storagemarket), -which starts miners and tracks total storage (aka "power"). -These are both singletons. - Actors declare a list of exported methods with ABI types. Method implementations typically load the state tree, perform some query or mutation, then return a value or an error. ### The state tree -Blockchain state is represented in the [state tree](https://github.com/filecoin-project/go-filecoin/blob/master/state/tree.go), +Blockchain state is represented in the [state tree](https://github.com/filecoin-project/venus/blob/master/pkg/state/tree/state.go), which contains the state of all actors. The state tree is a map of address to (encoded) actor structs. The state tree interface exposes getting and setting actors at addresses, and iterating actors. The underlying data structure is a [Hash array-mapped trie](https://en.wikipedia.org/wiki/Hash_array_mapped_trie). A HAMT is also often used to store actor state, eg when the actor wants to store a large map. -The canonical binary encoding used by Filecoin is [CBOR](http://cbor.io/). In Go, structs are CBOR-encoded by reflection. +The canonical binary encoding used by Venus is [CBOR](http://cbor.io/). In Go, structs are CBOR-encoded by reflection. The ABI uses a separate inner encoding, which is manual. ### Messages and state transitions -Filecoin state transitions are driven by messages sent to actors; these are our "transactions". +Venus state transitions are driven by messages sent to actors; these are our "transactions". A message is a method invocation on an actor. A message has sender and recipient addresses, and optional parameters such as an amount of filecoin to transfer, a method name, and parameters. @@ -300,7 +222,7 @@ One invokes a method on an actor by sending it a message. To send a message the message is created, signed, added to your local nodeโ€™s message pool broadcast on the network to other nodes, which will add it to their message pool too. Some node will then mine a block and possibly include your message. -In Filecoin, it is essential to remember that sending the message does not mean it has gone on chain or that its outcome has been reflected in the state tree. +In Venus, it is essential to remember that sending the message does not mean it has gone on chain or that its outcome has been reflected in the state tree. Sending means the message is available to be mined into a block. You must wait for the message to be included in a block to see its effect. @@ -309,19 +231,19 @@ These messages are executed locally against a read only version of the state tre They never leave the node, they are not broadcast. The plumbing API exposes `MessageSend` and `MessageQuery` for these two cases. -The [processor](https://github.com/filecoin-project/go-filecoin/blob/master/consensus/processor.go) is the +The [processor](https://github.com/filecoin-project/venus/blob/master/pkg/consensus/processor.go) is the entry point for making and validating state transitions represented by the messages. It is modelled Ethereumโ€™s message processing system. The processor manages the application of messages to the state tree from the prior block/s. It loads the actor from which a message came, check signatures, then loads the actor and state to which a message is addressed and passes the message to the VM for execution. -The [vm](https://github.com/filecoin-project/go-filecoin/blob/master/vm) package has the low level detail of calling actor methods. -A [VM context](https://github.com/filecoin-project/go-filecoin/blob/master/vm/context.go) defines the world visible from an actor implementation while executing, +The [vm](https://github.com/filecoin-project/venus/blob/master/pkg/vm) package has the low level detail of calling actor methods. +A [VM context](https://github.com/filecoin-project/venus/blob/master/pkg/vm/context.go) defines the world visible from an actor implementation while executing. ### Consensus -Filecoin uses a consensus algorithm called [expected consensus](https://github.com/filecoin-project/go-filecoin/blob/master/consensus/expected.go). +Venus uses a consensus algorithm called [expected consensus](https://github.com/filecoin-project/venus/blob/master/pkg/consensus/expected.go). Unlike proof-of-work schemes, expected-consensus is a proof-of-stake model, where probability of mining a block in each round (30 seconds) is proportional to amount of storage a miner has committed to the network. Each round, miners are elected through a probabilistic but private mechanism akin to rolling independent, private, but verifiable dice. @@ -330,59 +252,13 @@ If a miner is elected, they have the right to mine a block in that round. Given the probabilistic nature of mining new blocks, more than one block may be mined in any given round. Hence, a new block might have more than one parent block. -The parents form a set, which we call a [tipset](https://github.com/filecoin-project/go-filecoin/blob/master/consensus/tipset.go). +The parents form a set, which we call a [tipset](https://github.com/filecoin-project/venus/blob/master/pkg/types/tipset.go). All the blocks in a tipset are at the same height and share the same parents. Tipsets contain one or more blocks. A null block count indicates the absence of any blocks mined in a previous round. Subsequent blocks are built upon *all* of the tipset; there is a canonical ordering of the messages in a tipset defining a new consensus state, not directly referenced from any of the tipsetโ€™s blocks. -### Storage protocol -The storage protocol is mechanism by which clients make deals directly with storage miners to store their data, implemented in [`protocol/storage`](https://github.com/filecoin-project/go-filecoin/blob/master/protocol/storage). - -A storage miner ([protocol/storage/miner.go](https://github.com/filecoin-project/go-filecoin/blob/master/protocol/storage/miner.go)) advertises storage with an on-chain ask, -which specifies an asking price and storage capacity at that price. -Clients discover asks by iterating miner actorsโ€™ on-chain state. -A client wishing to take an ask creates a deal proposal. -A proposal references a specific unit of data, termed a piece, which has a CID (hash of the bytes). -A piece must fit inside a single sector (see below) as defined by network parameters. - -A storage client ([protocol/storage/client.go](https://github.com/filecoin-project/go-filecoin/blob/master/protocol/storage/client.go)) connects directly to a miner to propose a deal, -using a libp2p peer id embedded in the on-chain storage miner actor data. -An off-chain lookup service maps peer ids to concrete addresses, in the form of multiaddr, using a [libp2p distributed hash table](https://github.com/filecoin-project/go-filecoin/blob/master/networking.md) (DHT). -A client also creates a payment channel so the miner can be paid over time for storing the piece. -The miner responds with acceptance or otherwise. - -When proposing a deal, a client loads the piece data into its [IPFS block service](https://github.com/ipfs/go-blockservice). -This advertises the availability of the data to the network, making it available to miners. -A miner accepting a deal pulls the data from the client (or any other host) using the IPFS block service [bitswap protocol](https://github.com/ipfs/specs/tree/master/bitswap). - -A miner packs pieces from many clients into a sector, which is then sealed with a proof of replication (aka commitment). -Sealing is a computationally intensive process that can take tens of minutes. -A client polls the miner directly for deal status to monitor the piece being received, staged in a sector, the sector sealed, and the proof posted to the blockchain. -Once the sector commitment is on chain, the client can observe it directly. -A miner periodically computes proofs for all sealed sectors and posts on chain. -There is no on-chain mapping of pieces to sectors; a client must keep track of its own pieces. - -Note that the mechanisms for communication of deals and state are not specified in the protocol, except the format of messages and the eventual on-chain commitment. -Other mechanisms may be used. - -The storage [client commands](https://github.com/filecoin-project/go-filecoin/blob/master/commands/client.go) interface to a `go-filecoin` daemon in the same way as other node [commands](#commands). -Right now, a client must be running a full node, but thatโ€™s not in-principle necessary. -Future reorganisation will allow the extraction of a thin client binary. - -Data preparation is entirely the responsibility of the client, including breaking it up into appropriate chunks (<= sector size), compressing, -encrypting, adding error-correcting codes, and replicating widely enough to achieve redundancy goals. -In the future, we will build a client library which handles many of these tasks for a user. -We also plan support for "repair miners", to whom responsibility can be delegated for monitoring and repairing faults. - -### Retrieval -Retrieval mining is not necessarily linked to storage mining, although in practise we expect all storage miners to also run retrieval miners. -Retrieval miners serve requests to fetch content, and are not much more than a big cache and some logic to find missing pieces. - -The retrieval protocol and implementation are not yet fully developed. -At present (early 2019), retrieval is not charged for, and always causes unsealing of a sector. - ### Entry point Thereโ€™s no centrally dispatched event loop. @@ -391,50 +267,11 @@ Protocols (goroutines) communicate through custom channels. This architecture needs more thought, but we are considering moving more inter-module communication to use iterators (c.f. those in Java). An event bus might also be a good pattern for some cases, though. -## Sector builder & proofs -A storage mining node commits to storage by cryptographically proving that it has stored a sector, a process known as sealing. -Proof of replication, or PoRep, is an operation which generates a unique copy (sealed sector) of a sector's original data, a SNARK proof, -and a set of commitments identifying the sealed sector and linking it to the corresponding unsealed sector. -The commitSector message, posted to the blockchain, includes these commitments (CommR, CommRStar, CommD) and the SNARK proof. - -A storage miner continually computes proofs over their sealed sectors and periodically posts a summary of their proofs on chain. -When a miner commits their first sector to the network (with `commitSector` message included in some block), a "proving period" begins. -A proving period is a window of time (a fixed number of blocks) in which the miner must generate a "proof of space-time", or PoSt, -in order to demonstrate to the network that they have not lost the sector which they have committed. -If the miner does not get a `submitPoSt` message included in a block during a proving period, it may be penalised ("slashed"). - -Storage and proofs are administered by the [sector builder](https://github.com/filecoin-project/go-filecoin/tree/master/proofs/sectorbuilder). -Most of the sector builder is implemented in Rust and invoked via a [FFI](https://github.com/filecoin-project/go-filecoin/blob/master/proofs/interface.go). -This code includes functionality to: -- write (and "preprocess") user piece-bytes to disk, -- schedule seal (proof-of-replication) jobs, -- schedule proof-of-spacetime generation jobs, -- schedule unseal (retrieval) jobs, -- verify proof-of-spacetime and proof-of-replication-verification, -- map between replica commitment and sealed sector-bytes, -- map between piece key (CID of user piece) and sealed sector-bytes. - -The Go `SectorBuilder` interface corresponds closely to the rust `SectorBuilder` struct. -Rust code is invoked directly (in-process) via Cgo. The sector builderโ€™s lifecycle (in Rust) is controlled by go-filecoin. -Cgo functions like `C.CBytes` are used to move bytes across Cgo from Go to Rust; -Go allocates in the Rust heap through Cgo and then provides Rust with pointers from which it can reconstitute arrays, structs, and so forth. - -Sectors and sealed sectors (aka replicas) are just flat files on disk. -Sealing a sector is a destructive operation on the sector. -The process of sealing yields metadata such as the proof/commitment, which is stored is a separate metadata store, not within the replica file. - -We intend the sector builder interface to represent a service, abstracting away both policy (e.g. sector packing, scheduling of PoSt calculation) and implementation details. -In the future, we would like to able to interface to it via IPC/RPC as well as FFI. - -The sector builder and proofs code is written in Rust partly to ease use of the [Bellman zk-SNARK library](https://github.com/zkcrypto/bellman). -The PoRep and PoSt code is under active development. -PoRep is integrated with go-filecoin, while the PoST implementation and integration is still in progress (March 2019). - ### Building and distribution. The Rust code responsible for sectors and proofs is in the [rust-fil-proofs](https://github.com/filecoin-project/rust-fil-proofs) repo. -This repo is included in go-filecoin as a Git submodule. +This repo is included in venus as a Git submodule. The submodule refers to a specific repository SHA hash. -The `install-rust-proofs.sh` script, invoked by the `deps` build step of go-filecoin, builds the Rust proofs code and copies binary assets to locations hardcoded in Go interface code. +The `install-rust-proofs.sh` script, invoked by the `deps` build step of venus, builds the Rust proofs code and copies binary assets to locations hardcoded in Go interface code. As an alternative to compiling Rust code locally, the continuous integration server publishes an archive of precompiled binary objects with every successful build of the `rust-fil-proofs/master` branch. These releases are identified by the Git submodule SHA. This archive is pushed to the GitHub releases service. @@ -451,7 +288,7 @@ The build or tarball contains: ### Groth parameters The proving algorithms rely on a large binary parameter file known as the Groth parameters. -This file is stored in a cache directory, typically `/tmp/filecoin-proof-parameters`. +This file is stored in a cache directory, typically `/var/tmp/filecoin-proof-parameters`. When proofs code changes, the params may need to change. The `paramcache` program populates the Groth parameter directory by generating the parameters, a slow process (10s of minutes). @@ -461,28 +298,28 @@ The CIDs of the parameter files thus published must be pinned (made continuously The `paramfetch` program fetches params to local cache directory from IPFS gateway. The `install-rust-proofs.sh` script fetches or generates these Groth parameters as necessary when building `deps`. -Groth parameters in `/tmp/filecoin-proof-parameters` are accessed at go-filecoin runtime. +Groth parameters in `/var/tmp/filecoin-proof-parameters` are accessed at venus runtime. The parameters are identified by the `parameters.json` file from fil-rust-proofs, which includes a checksum. ### Proof mode configuration -For ease of development, go-filecoin can be configured to use a test proofs mode, which will cause storage miners to use sectors into which only 1016 bytes of user data can be written. +For ease of development, venus can be configured to use a test proofs mode, which will cause storage miners to use sectors into which only 1016 bytes of user data can be written. This lowers the computational burden of sealing and generating PoSts. The `genesis.car` in `fixtures/test/` is configured to use test proofs mode. ## Networking -Filecoin relies on [libp2p](https://libp2p.io/) for its networking needs. +Venus relies on [libp2p](https://libp2p.io/) for its networking needs. libp2p is a modular networking stack for the peer-to-peer era. It offers building blocks to tackle requirements such as -peer discovery, transport switching, multiplexing, content routing, NAT traversal, pubsub, circuit relay, etc., most of which Filecoin uses. +peer discovery, transport switching, multiplexing, content routing, NAT traversal, pubsub, circuit relay, etc., most of which Venus uses. Developers can compose these blocks easily to build the networking layer behind their P2P system. -A detailed overview of how Filecoin uses libp2p can be found in the [Networking doc](networking.md). +A detailed overview of how Venus uses libp2p can be found in the [Networking doc](networking.md). ## Filesystem storage -The *repo*, aka `fsrepo`, is a directory stored on disk containing all necessary information to run a `go-filecoin daemon`, typically at `$HOME/.filecoin`. +The *repo*, aka `fsrepo`, is a directory stored on disk containing all necessary information to run a `venus daemon`, typically at `$HOME/.venus`. The repo does not include client data stored by storage miners, which is held instead in the sector base. The repo does include a JSON config file with preferences on how the daemon should operate, several key value datastores holding data important to the internal services, @@ -490,75 +327,58 @@ and the keystore which holds private key data for encryption. ### JSON Config -The JSON config file is stored at `$HOME/.filecoin/config.json`, and can be easily edited using the `go-filecoin config` command. +The JSON config file is stored at `$HOME/.venus/config.json`, and can be easily edited using the `venus config` command. Users can also edit the file directly at their own peril. ### Datastores -The key-value datastores in the repo include persisted data from a variety of systems within Filecoin. +The key-value datastores in the repo include persisted data from a variety of systems within venus. Most of them hold CBOR encoded data keyed on CID, however this varies. -The key value stores include the badger, chain, deals, and wallet directories under `$HOME/.filecoin`. +The key value stores include the badger, chain, deals, and wallet directories under `$HOME/.venus`. The purpose of these directories is: - _Badger_ is a general purpose datastore currently only holding the genesis key, but in the future, almost all our datastores should be merged into this one. - _Chain_ is where the local copy of the blockchain is stored. -- _Deals_ is where the miner and client store persisted information on open deals for data storage, -essentially who is storing what data, for what fee and which sectors have been sealed. -- _Wallet_ is where the userโ€™s Filecoin wallet information is stored. +- _Wallet_ is where the userโ€™s Venus wallet information is stored. ### Keystore The keystore contains the binary encoded peer key for interacting securely over the network. -This data lives in a file at `$HOME/.filecoin/keystore/self`. +This data lives in a file at `$HOME/.venus/keystore/self`. ## Testing -The `go-filecoin` codebase has a few different testing mechanisms: +The `venus` codebase has a few different testing mechanisms: unit tests, in-process integration tests, "daemon" integration tests, and a couple of high level functional tests. Many parts of code have good unit tests. Weโ€™d like all parts to have unit tests, but in some places it hasnโ€™t been possible where prototype code omitted testability features. -Functionality on the `Node` object is a prime example, which we are [moving away from](#plumbing-and-porcelain). Historically there has been a prevalence of integration-type testing. Relying only on integration tests can make it hard to verify small changes to internals. Weโ€™re driving towards both wide unit test coverage, with integration tests to verifying end-to-end behaviour. -There are two patterns for unit tests. -In plumbing and low level components, many tests use real dependencies (or at least in-memory versions of them). -For higher level components like porcelain or protocols, where dependencies are more complex to set up, -we often use fake implementations of just those parts of the plumbing that are required. -It is a goal to have both unit tests (with fakes or real deps), as well as higher level integration-style tests. - Code generally uses simple manual dependency injection. A component that takes a large number of deps at construction can have them factored into a struct. -A module should often (re-)declare a narrow subset of the interfaces it depends on (see [Consumer-defined interfaces](#consumer-defined-interfaces))), in canonical Go style. -Some [node integration tests](https://github.com/filecoin-project/go-filecoin/blob/master/node/node_test.go) start one or more full nodes in-process. +Some [node integration tests](https://github.com/filecoin-project/venus/blob/master/app/node/test/node.go) start one or more full nodes in-process. This is useful for fine-grained control over the node being tested. Setup for these tests is a bit difficult and we aim to make it much easier to instantiate and test full nodes in-process. -Daemon tests are end-to-end integration tests that exercise the command interface of the `go-filecoin` binary. -These execute separate `go-filecoin` processes and drive them via the command line. -These tests are mostly under the [`commands`](https://github.com/filecoin-project/go-filecoin/blob/master/commands) package, -and use [TestDaemon](https://github.com/filecoin-project/go-filecoin/blob/master/testhelpers/commands.go). -Because the test and the daemon being tested are in separate processes, getting access to the daemon processโ€™s output streams or attaching a debugger is tricky; -see comments in [createNewProcess][(https://github.com/filecoin-project/go-filecoin/blob/726e6705860ddfc8ca4e55bc3610ad2230a95c0c/testhelpers/commands.go#L849) - -In daemon tests it is important to remember that messages do not have any effect on chain state until they are mined into a block. -Preparing an actor in order to receive messages and mutate state requires some delicate network set-up, mining messages into a block to create the actor before it can receive messages. -See `MineOnce` in [`mining/scheduler`](https://github.com/filecoin-project/go-filecoin/blob/master/mining/scheduler.go) which synchronously performs a round of block mining and then stops, pushing the test state forward. +Daemon tests are end-to-end integration tests that exercise the command interface of the `venus` binary. +These execute separate `venus` processes and drive them via the command line. +These tests are mostly under the [`commands`](https://github.com/filecoin-project/venus/blob/master/cmd) package, The `functional-tests` directory contains some Go and Bash scripts which perform complicated multi-node tests on our continuous build. These are not daemon tests, but run separately. Some packages have a `testing.go` file with helpers for setting up tests involving that packageโ€™s types. -The [`types/testing.go`](https://github.com/filecoin-project/go-filecoin/blob/master/types/testing.go) file has some more generally useful constructors. -There is also a top-level [`testhelpers`](https://github.com/filecoin-project/go-filecoin/blob/master/testhelpers) package with higher level helpers, often used by daemon tests. +The [`types/testing.go`](https://github.com/filecoin-project/venus/blob/master/pkg/types/testing.go) file has some more generally useful constructors. +There is also a top-level [`testhelpers`](https://github.com/filecoin-project/venus/blob/master/pkg/testhelpers) package with higher level helpers, often used by daemon tests. -Weโ€™re in process of creating the Filecoin Automation and Systems Toolkit (FAST) [library](https://github.com/filecoin-project/go-filecoin/tree/master/tools/fast). -The goal of this is to unify duplicated code paths which bootstrap and drive `go-filecoin` daemons for daemon tests, functional tests, +Weโ€™re in process of creating the venus Automation and Systems Toolkit (FAST) [library](https://github.com/filecoin-project/venus/tree/master/tools/fast). +The goal of this is to unify duplicated code paths which bootstrap and drive `venus` daemons for daemon tests, functional tests, and network deployment verification, providing a common library for filecoin automation in Go. Tests are typically run with `go run ./build/*.go test`. @@ -584,76 +404,29 @@ By default functional tests are disabled when issuing the `go test` command. To enable pass `-functional`. A functional test is an extensive multi-node orchestration or resource-intensive test that may take minutes to run. -##### Sector Builder Tests (`-sectorbuilder`) -By default sectorbuilder tests are disabled when issuing the `go test` command. -To enable pass `-sectorbuilder`. -A sectorbuilder test is a resource-intensive test that may take minutes to run. - ## Dependencies -Dependencies in go-filecoin are managed as go modules, go's new dependency system. +Dependencies in venus are managed as go modules, go's new dependency system. -If you've cloned go-filecoin into your GOPATH, you may need to set the `GO111MODULES` environment variable to `on`. The build system automatically sets this but your favorite editor or IDE may not work without it. +If you've cloned venus into your GOPATH, you may need to set the `GO111MODULES` environment variable to `on`. The build system automatically sets this but your favorite editor or IDE may not work without it. ## Patterns The project makes heavy use of or is moving towards a few key design patterns, explained here. -### Plumbing and porcelain - -The _plumbing and porcelain_ pattern is [borrowed from Git](https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain). -Plumbing and porcelain form the API to the internal [core services](#core-services), and will replace the `api` package. - -*Plumbing* is the small set of public building blocks of queries and operations that protocols, clients and humans want to use with a Filecoin node. -These are things like `MessageSend`, `GetHead`, `GetBlockTime`, etc. -By fundamental, we mean that it doesn't make sense to expose anything lower level. -The bar for adding new plumbing is high. -It is very important, for testing and sanity, that plumbing methods be implemented in terms of their narrowest actual dependencies on core services, -and that they not depend on Node or another god object. - -The plumbing API is defined by its implementation in [plumbing/api.go](https://github.com/filecoin-project/go-filecoin/blob/master/plumbing/api.go). -Consumers of plumbing (re-)define the subset of plumbing on which they depend, which is an idiomatic Go pattern (see below). -Implementations of plumbing live in their own concisely named packages under [plumbing](https://github.com/filecoin-project/go-filecoin/tree/master/plumbing). - -*Porcelain* are calls on top of the plumbing API. -A porcelain call is a useful composition of plumbing calls and is implemented in terms of calls to plumbing. -An example of a porcelain call is `CreateMiner == MessageSend + MessageWait + ConfigUpdate`. -The bar is low for creation of porcelain calls. -Porcelain calls should define the subset of the plumbing interface on which they depend for ease of testing. - -Porcelain lives in a single [porcelain](https://github.com/filecoin-project/go-filecoin/blob/master/porcelain/) package. -Porcelain calls are free functions that take the plumbing interface as an argument. -The call defines the subset of the plumbing interface that it needs, which can be easily faked in testing. - -We are in the [process of refactoring](https://github.com/filecoin-project/go-filecoin/issues/1469) all protocols to depend only on porcelain, -plumbing and other core APIs, instead of on the Node. - -### Consumer-defined interfaces - -Go interfaces generally belong in the package that *uses* values of the interface type, not the package that implements those values. -This embraces [Postel's law](https://en.wikipedia.org/wiki/Robustness_principle), -reducing direct dependencies between packages and making them easier to test. -It isolates small changes to small parts of the code. - -Note that this is quite different to the more common pattern in object-oriented languages, where interfaces are defined near their implementations. -Our implementation of [plumbing and porcelain](#plumbing-and-porcelain) embraces this pattern, and we are adopting it more broadly. - -This idiom is unfortunately hidden away in a [wiki page about code review](https://github.com/golang/go/wiki/CodeReviewComments#interfaces). -See also Dave Cheney on [SOLID Go Design](https://dave.cheney.net/2016/08/20/solid-go-design). - ### Observability -go-filecoin uses [Opencensus-go](https://github.com/census-instrumentation/opencensus-go) for stats collection and distributed tracing instrumentation. -Stats are exported for consumption via [Prometheus](https://prometheus.io/) and traces are exported for consumption via [Jaeger](https://www.jaegertracing.io/docs/1.11/). +venus uses [Opencensus-go](https://github.com/census-instrumentation/opencensus-go) for stats collection and distributed tracing instrumentation. +Stats are exported for consumption via [Prometheus](https://prometheus.io/). #### Metrics -go-filecoin can be configured to collect and export metrics to Prometheus via the `MetricsConfig`. -The details of this can be found inside the [`config/`](https://godoc.org/github.com/filecoin-project/go-filecoin/internal/pkg/config#ObservabilityConfig) package. +venus can be configured to collect and export metrics to Prometheus via the `MetricsConfig`. +The details of this can be found inside the [`config/`](https://pkg.go.dev/github.com/filecoin-project/venus/pkg/config#ObservabilityConfig) package. To view metrics from your filecoin node using the default configuration options set the `prometheusEnabled` value to `true`, start the filecoin daemon, then visit `localhost:9400/metrics` in your web-browser. #### Tracing -go-filecoin can be configured to collect and export traces to Jaeger via the `TraceConfig`. -The details of this can be found inside the [`config/`](https://godoc.org/github.com/filecoin-project/go-filecoin/internal/pkg/config#ObservabilityConfig) package. -To collect traces from your filecoin node using the default configuration options set the `jaegerTracingEnabled` value to `true`, start the filecoin daemon, then follow the [Jaeger Getting](https://www.jaegertracing.io/docs/1.11/getting-started/#all-in-one) started guide. +venus can be configured to collect and export traces to Jaeger via the `TraceConfig`. +The details of this can be found inside the [`config/`](https://pkg.go.dev/github.com/filecoin-project/venus/pkg/config#ObservabilityConfig) package. +To collect traces from your venus node using the default configuration options set the `jaegerTracingEnabled` value to `true`, start the venus daemon, then follow the [Jaeger Getting](https://www.jaegertracing.io/docs/1.11/getting-started/#all-in-one) started guide. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4a09642216..eccca44ca8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,7 @@ The following is a set of guidelines for contributing to the Filecoin Project. Feel free to propose changes, as this is a living document. -Filecoin, including go-filecoin and all related modules, follows the +Filecoin, including venus and all related modules, follows the [Filecoin Code of Conduct](CODE_OF_CONDUCT.md). **Table Of Contents** @@ -48,9 +48,9 @@ Filecoin, including go-filecoin and all related modules, follows the ## How can I contribute? -Here at `go-filecoin`, thereโ€™s always a lot of work to do. There are many ways you can support the project, from progamming, writing, organizing, and more. Consider these as starting points: +Here at `venus`, thereโ€™s always a lot of work to do. There are many ways you can support the project, from progamming, writing, organizing, and more. Consider these as starting points: -- **Submit bugs**: Perform a cursory [search](https://github.com/filecoin-project/go-filecoin/issues) to see if the problem has already been reported. If it does exist, add a ๐Ÿ‘ to the issue to indicate this is also an issue for you, and add a comment if there is extra information you can contribute. If it does not exist, [create a new issue](https://github.com/filecoin-project/go-filecoin/issues/new/choose) (using the Bug report template). +- **Submit bugs**: Perform a cursory [search](https://github.com/filecoin-project/venus/issues) to see if the problem has already been reported. If it does exist, add a ๐Ÿ‘ to the issue to indicate this is also an issue for you, and add a comment if there is extra information you can contribute. If it does not exist, [create a new issue](https://github.com/filecoin-project/venus/issues/new/choose) (using the Bug report template). - **Write code:** Once you've read this contributing guide, check out [Good First Issues](#good-first-issues) for well-prepared starter issues. @@ -62,7 +62,7 @@ Here at `go-filecoin`, thereโ€™s always a lot of work to do. There are many ways ## What should I know before getting started? -Check out the [Go-Filecoin code overview](CODEWALK.md) for a brief tour of the code. +Check out the [venus code overview](CODEWALK.md) for a brief tour of the code. ### Design Before Code - Write down design intent before writing code, and subject it to constructive feedback. @@ -126,7 +126,7 @@ ZenHub adds some useful project management overlay data to GitHub issues. ### Good First Issues -Ready to begin? Here are well-prepared starter issues ([E-good-first-issue](https://github.com/filecoin-project/go-filecoin/issues?q=is%3Aopen+is%3Aissue+label%3AE-good-first-issue)) for your coding pleasure. They have clear problem statements, pointers to the right areas of the code base, and clear acceptance criteria. +Ready to begin? Here are well-prepared starter issues ([E-good-first-issue](https://github.com/filecoin-project/venus/issues?q=is%3Aopen+is%3Aissue+label%3AE-good-first-issue)) for your coding pleasure. They have clear problem statements, pointers to the right areas of the code base, and clear acceptance criteria. To pick up an issue: @@ -135,7 +135,7 @@ To pick up an issue: 3. For issues labeled `PROTOCOL BREAKING` see [the spec section](#the-spec) for additional instructions. 4. **Create a PR** with your changes, following the [Pull Request and Code Review guidelines](). -For continued adventures, search for issues with the label [E-help-wanted](https://github.com/filecoin-project/go-filecoin/issues?q=is%3Aopen+is%3Aissue+label%3AE-help-wanted). These are slightly thornier problems that are also reasonably well-prepared. +For continued adventures, search for issues with the label [E-help-wanted](https://github.com/filecoin-project/venus/issues?q=is%3Aopen+is%3Aissue+label%3AE-help-wanted). These are slightly thornier problems that are also reasonably well-prepared. ### Pipelines (ZenHub) We use ZenHub pipelines to track the flow of work on open issues. @@ -161,7 +161,7 @@ Labels are used inclusively, to aid discovery. An issue may have multiple labels; not all issues are expected to have labels. A label is never expected to be "done" (stable state of no open issues). -Labels mark [dimensions including](https://github.com/filecoin-project/go-filecoin/issues/labels): +Labels mark [dimensions including](https://github.com/filecoin-project/venus/issues/labels): - *Area* (name prefixed with `A-`): an area of code functionality - *Category* (name prefixed with `C-`): type of issue, e.g. bug, tech debt, ux - *Engagement* (name prefixed with `E-`): issues suitable for broader community involvement @@ -176,7 +176,7 @@ Epics support focus and forecasting through exclusion or inclusion of (ir-)relev We will typically scope an epic to a deliverable targeting a particular release, so most epics should live less than six weeks. ### Releases (ZenHub) -Release tags identify issues targeted to or blocking a particular go-filecoin software release. +Release tags identify issues targeted to or blocking a particular venus software release. Release tags are forward-looking and support forecasting and focus though inclusion or exclusion of issues. At present (April 2019) we aim for a time-based release roughly every six weeks. ZenHub release tags can span multiple repositories. @@ -188,7 +188,7 @@ Milestones support short time-based cycles such as sprints. Milestones are repo- ## Roles -There are four main roles for people participating in `go-filecoin`. Each has a specific set of abilities and responsibilities: Contributors, Collaborators, Committers, and Maintainers. +There are four main roles for people participating in `venus`. Each has a specific set of abilities and responsibilities: Contributors, Collaborators, Committers, and Maintainers. ### Contributors @@ -253,7 +253,7 @@ Abilities: * Manage issues * Merge PRs -**Becoming a committer or maintainer:** Anyone can nominate someone for committership or maintainership by filing an [issue](https://github.com/filecoin-project/go-filecoin/issues) pointing to evidence that the candidate (1) meets the definition and (2) is already performing the responsibilities described in Roles. Existing maintainers must unanimously approve the new candidate. Removing a committer or maintainer requires either self-nomination, or confirmation by at least 66% of existing maintainers. +**Becoming a committer or maintainer:** Anyone can nominate someone for committership or maintainership by filing an [issue](https://github.com/filecoin-project/venus/issues) pointing to evidence that the candidate (1) meets the definition and (2) is already performing the responsibilities described in Roles. Existing maintainers must unanimously approve the new candidate. Removing a committer or maintainer requires either self-nomination, or confirmation by at least 66% of existing maintainers. ## Additional Developer Notes @@ -292,7 +292,7 @@ import ( [external packages] - [go-filecoin packages] + [venus packages] ) ``` @@ -310,8 +310,8 @@ import ( ipld "github.com/ipfs/go-ipld-format" "github.com/stretchr/testify/assert" - "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" + "github.com/filecoin-project/venus/internal/pkg/testhelpers" + "github.com/filecoin-project/venus/internal/pkg/types" ) ``` diff --git a/LICENSE-MIT b/LICENSE-MIT index b2616875ef..eeeac64472 100644 --- a/LICENSE-MIT +++ b/LICENSE-MIT @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2018 Filecoin Project +Copyright (c) 2021 Filecoin Project Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Makefile b/Makefile index 382443f9ca..fe8e0ec1f5 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,91 @@ +export CGO_CFLAGS_ALLOW=-D__BLST_PORTABLE__ +export CGO_CFLAGS=-D__BLST_PORTABLE__ + all: go run ./build/*.go build deps: + git submodule update --init go run ./build/*.go smartdeps +lint: + go run ./build/*.go lint + +test: + go run ./build/*.go test -timeout=30m + # WARNING THIS BUILDS A GO PLUGIN AND PLUGINS *DO NOT* WORK ON WINDOWS SYSTEMS iptb: make -C tools/iptb-plugins all + +clean: + rm ./venus + + rm -rf ./extern/filecoin-ffi + rm -rf ./extern/test-vectors + +gen-api: + go run ./tools/gen/api/proxygen.go + gofmt -s -l -w ./app/client/full.go + gofmt -s -l -w ./app/client/v0api/full.go + +v2-gen-api: + cd ./venus-devtool/ && go run ./api-gen/ + gofmt -s -l -w ./venus-shared/api/chain/v0/proxy_gen.go; + gofmt -s -l -w ./venus-shared/api/chain/v1/proxy_gen.go + +docfile = ./venus-shared/api/api-document.md +api-docs: + cd ./venus-devtool/ && \ + go run ./api-docs-gen/cmd \ + ../venus-shared/api/chain/v1/fullnode.go \ + FullNode v1 \ + ../venus-shared/api/chain/v1 > \ + .$(docfile) + echo json-rpc-doc-file : $(docfile) + +compare-api: + go run ./tools/gen/api/proxygen.go compare + +gen-asset: + go-bindata -pkg=asset -o ./fixtures/asset/asset.go ./fixtures/_assets/car/ ./fixtures/_assets/proof-params/ ./fixtures/_assets/arch-diagram.monopic + + +### shared module ### +cborgen: + cd venus-devtool && go run ./cborgen/*.go + +gogen: + cd venus-shared && go generate ./... + +inline-gen: + cd venus-devtool && go run ./inline-gen/main.go ../ ./inline-gen/inlinegen-data.json + +test-venus-shared: + cd venus-shared && go test -covermode=set ./... + +test: gogen test-venus-shared + +compatible-all: compatible-api compatible-actor + +compatible-api: api-checksum api-diff + +api-checksum: + cd venus-devtool && go run ./compatible/apis/*.go checksum > ../venus-shared/compatible-checks/api-checksum.txt + +api-diff: + cd venus-devtool && go run ./compatible/apis/*.go diff > ../venus-shared/compatible-checks/api-diff.txt + +compatible-actor: actor-templates actor-sources actor-render + +actor-templates: + cd venus-devtool && go run ./compatible/actors/*.go templates --dst ../venus-shared/actors/ > ../venus-shared/compatible-checks/actor-templates.txt + +actor-sources: + cd venus-devtool && go run ./compatible/actors/*.go sources > ../venus-shared/compatible-checks/actor-sources.txt + +actor-render: + cd venus-devtool && go run ./compatible/actors/*.go render ../venus-shared/actors/ + +actor-replica: + cd venus-devtool && go run ./compatible/actors/*.go replica --dst ../venus-shared/actors/ diff --git a/README.md b/README.md index 4cd1a66c70..27e4b5e2be 100644 --- a/README.md +++ b/README.md @@ -1,213 +1,54 @@ -# Filecoin (go-filecoin) +

+ + Project Venus Logo + +

-[![CircleCI](https://circleci.com/gh/filecoin-project/go-filecoin.svg?style=svg)](https://circleci.com/gh/filecoin-project/go-filecoin) -[![User Devnet Release](https://img.shields.io/endpoint.svg?color=brightgreen&style=flat&logo=GitHub&url=https://raw.githubusercontent.com/filecoin-project/go-filecoin-badges/master/user-devnet.json)](https://github.com/filecoin-project/go-filecoin/releases/latest) -[![Nightly Devnet Release](https://img.shields.io/endpoint.svg?color=blue&style=flat&logo=GitHub&url=https://raw.githubusercontent.com/filecoin-project/go-filecoin-badges/master/nightly-devnet.json)](https://github.com/filecoin-project/go-filecoin/releases) -[![Staging Devnet Release](https://img.shields.io/endpoint.svg?color=brightgreen&style=flat&logo=GitHub&url=https://raw.githubusercontent.com/filecoin-project/go-filecoin-badges/master/staging-devnet.json)](https://github.com/filecoin-project/go-filecoin/releases) -Go-filecoin is an implementation of the Filecoin Distributed Storage Network. For more details about Filecoin, checkout the [Filecoin Spec](https://spec.filecoin.io). -Go-filecoin was the first Filecoin implementation originially initiated and developed by Protocol Labs, and now is maintained by the Filecoin community. See [maintenance](#maintenance) for more information. +

Project Venus - ๅฏๆ˜Žๆ˜Ÿ

-__Questions or problems with go-filecoin? [Ask the community first](#community)__. Your problem may already be solved. +

+ + + + +
+

-## Table of Contents - - - +Venus is an implementation of the Filecoin Distributed Storage Network. For more details about Filecoin, check out the [Filecoin Spec](https://spec.filecoin.io). +## Building & Documentation -- [What is Filecoin?](#what-is-filecoin) -- [Install](#install) - - [System Requirements](#system-requirements) - - [Install from Source](#install-from-source) - - [Install Go](#install-go) - - [Install Dependencies](#install-dependencies) - - [Build and run tests](#build-and-run-tests) -- [Usage](#usage) - - [Advanced usage](#advanced-usage) - - [Setting up a localnet](#setting-up-a-localnet) -- [Contributing](#contributing) -- [Community](#community) -- [License](#license) +For instructions on how to build, install and join a venus storage pool, please visit [here](https://venus.filecoin.io/guide/Using-venus-Shared-Modules.html). - +## Venus architecture -## What is Filecoin? -Filecoin is a decentralized storage network that turns the worldโ€™s unused storage into an algorithmic market, creating a permanent, decentralized future for the web. -**Miners** earn the native protocol token (also called โ€œFilecoinโ€) by providing data storage and/or retrieval. -**Clients** pay miners to store or distribute data and to retrieve it. -Check out the [Filecoin website](https://filecoin.io/) and [Filecoin Documentation](https://docs.filecoin.io/) for more. +With key features like security, ease of use and distributed storage pool, the deployment of a node using Venus is quite different from the one using [Lotus](https://github.com/filecoin-project/lotus). Details of mining architecture can be found [here](https://venus.filecoin.io/guide/#how-venus-works). -## Install +## Related modules -๐Ÿ‘‹ Welcome to Go-Filecoin! +Venus loosely describes a collection of modules that work together to realize a fully featured Filecoin implementation. List of stand-alone venus modules repos can ben found [here](https://venus.filecoin.io/guide/Using-venus-Shared-Modules.html#introducing-venus-modules), each assuming different roles in the functioning of Filecoin. -This README outlines the basics for building and running Go-filecoin. -**For more background, configuration, and troubleshooting information check out the [Go-filecoin Docs](https://go.filecoin.io/)**. +## Contribute -### System Requirements +Venus is a universally open project and welcomes contributions of all kinds: code, docs, and more. However, before making a contribution, we ask you to heed these recommendations: -Go-filecoin can build and run on most Linux and MacOS systems. -Windows is not yet supported. +1. If the proposal entails a protocol change, please first submit a [Filecoin Improvement Proposal](https://github.com/filecoin-project/FIPs). +2. If the change is complex and requires prior discussion, [open an issue](https://github.com/filecoin-project/venus/issues) or a [discussion](https://github.com/filecoin-project/venus/discussions) to request feedback before you start working on a pull request. This is to avoid disappointment and sunk costs, in case the change is not actually needed or accepted. +3. Please refrain from submitting PRs to adapt existing code to subjective preferences. The changeset should contain functional or technical improvements/enhancements, bug fixes, new features, or some other clear material contribution. Simple stylistic changes are likely to be rejected in order to reduce code churn. -A validating node can run on most systems with at least 8GB of RAM. -A mining node requires significant RAM and GPU resources, depending on the sector configuration to be used. +When implementing a change: -### Install from Source on MacOS -```sh -curl -fsSL https://raw.githubusercontent.com/filecoin-project/go-filecoin/master/scripts/build/mac-build.sh | bash -``` -Note: macOS users may need to update their git config with `git config --global core.autocrlf input` - -### Install from Source - -Clone this git repository to your machine: - -```sh -mkdir -p /path/to/filecoin-project -git clone https://github.com/filecoin-project/go-filecoin.git /path/to/filecoin-project/go-filecoin -``` - -#### Install Go - -The build process for go-filecoin requires [Go](https://golang.org/doc/install) >= v1.13 - -> Installing Go for the first time? We recommend [this tutorial](https://www.ardanlabs.com/blog/2016/05/installing-go-and-your-workspace.html) which includes environment setup. - -Due to our use of `cgo`, you'll need a C compiler to build go-filecoin whether you're using a prebuilt library or building it yourself from source. -If you want to use `gcc` (e.g. `export CC=gcc`) when building go-filecoin, you will need to use v7.4.0 or higher. - -The build process will download a static library containing the [Filecoin proofs implementation](https://github.com/filecoin-project/rust-fil-proofs) (which is written in Rust). - -> If instead you wish to build proofs from source, you'll need (1) Rust development environment and (2) to set the environment variable `FFI_BUILD_FROM_SOURCE=1`. -More info at [filecoin-ffi](https://github.com/filecoin-project/filecoin-ffi). - -#### Install Dependencies - -First, load all the Git submodules. - -```sh -git submodule update --init --recursive -``` - -Initialize build dependencies. - -```sh -make deps -``` - -Note: The first time you run `deps` can be **slow** as very large parameter files are either downloaded or generated locally in `/var/tmp/filecoin-proof-parameters`. -Have patience; future runs will be faster. - -#### Build and run tests - -```sh -# First, build the binary -make - -# Then, run the unit tests. -go run ./build test - -# Build and test can be combined! -go run ./build best -``` - -Other handy build commands include: - -```sh -# Check the code for style and correctness issues -go run ./build lint - -# Run different categories of tests by toggling their flags -go run ./build test -unit=false -integration=true -functional=true - -# Test with a coverage report -go run ./build test -cover - -# Test with Go's race-condition instrumentation and warnings (see https://blog.golang.org/race-detector) -go run ./build test -race - -# Deps, Lint, Build, Test (any args will be passed to `test`) -go run ./build all -``` - -Note: Any flag passed to `go run ./build test` (e.g. `-cover`) will be passed on to `go test`. - -If you have **problems with the build**, please consult the [Troubleshooting](https://go.filecoin.io/go-filecoin-tutorial/Troubleshooting-&-FAQ.html) section of the [Go-filecoin Documentation](https://go.filecoin.io/). - -## Usage - -For a complete step-by-step tutorial, see [Getting Started](https://go.filecoin.io/go-filecoin-tutorial/Getting-Started.html). - -#### Quick start: - -```sh -# Remove any existing symlink to a repo directory -rm ~/.filecoin - -# Initialize a new repository, downloading a genesis file and setting network parameters (in this case, for the Testnet network) -./go-filecoin init --genesisfile=https://ipfs.io/ipfs/QmXZQeezX1x8uRQX9EUaYxnyivUpTfJqQTvszk3c8SnFPN/testnet.car --network=testnet - -# Start the daemon. It will block until it connects to at least one bootstrap peer. -./go-filecoin daemon -``` - -Your node should now be connected to some peers, and begin downloading and validating the blockchain. - -Open a new terminal to interact with your node: - -```sh -# Print the node's connection information -./go-filecoin id - -# Show chain sync status -./go-filecoin chain status -``` - -To see a full list of commands, run `./go-filecoin --help`. - -### Advanced usage - -#### Setting up a localnet - -The localnet FAST binary tool allows users to quickly and easily setup a local network on the users computer. -Please refer to the [localnet README](https://github.com/filecoin-project/go-filecoin/tree/master/tools/fast/bin/localnet#localnet) for more information. -The localnet tool is only compatible when built from the same git ref as the targeted `go-filecoin` binary. - -## Contributing - -We โค๏ธ all our contributors; this project wouldnโ€™t be what it is without you! If you want to help out, please see [CONTRIBUTING.md](CONTRIBUTING.md). - -Check out the [Go-Filecoin code overview](CODEWALK.md) for a brief tour of the code. - -## Community - -Here are a few places to get help and connect with the Filecoin community: -- [Go-filecoin Documentation](http://go.filecoin.io/) โ€” for tutorials, troubleshooting, and FAQs -- The `#fil-go-filecoin` channel on [Filecoin Project Slack](https://filecoinproject.slack.com/messages/CEHHJNJS3/) or [Matrix/Riot](https://riot.im/app/#/room/#fil-dev:matrix.org) - for live help and some dev discussions -- [Filecoin Community Forum](https://discuss.filecoin.io) - for talking about design decisions, use cases, implementation advice, and longer-running conversations -- [GitHub issues](https://github.com/filecoin-project/go-filecoin/issues) - to report bugs, and view or contribute to ongoing development. -- [Filecoin Specification](https://github.com/filecoin-project/specs) - how Filecoin is supposed to work - -Looking for even more? See the full rundown at [filecoin-project/community](https://github.com/filecoin-project/community). - -## Maintenance - -Venus (previously called `go-filecoin`) is now maintained by [IPFS-Force Community](https://github.com/ipfs-force-community) - -Maintainers: @steven004, @diwufeiwen, @hunjixin, @felix00000 - -This repo is open for anyone to submit issues and PRs. +1. Adhere to the standard Go formatting guidelines, e.g. [Effective Go](https://golang.org/doc/effective_go.html). Run `go fmt`. +2. Stick to the idioms and patterns used in the codebase. Familiar-looking code has a higher chance of being accepted than eerie code. Pay attention to commonly used variable and parameter names, avoidance of naked returns, error handling patterns, etc. +3. Comments: follow the advice on the [Commentary](https://golang.org/doc/effective_go.html#commentary) section of Effective Go. +4. Minimize code churn. Modify only what is strictly necessary. Well-encapsulated changesets will get a quicker response from maintainers. +5. Lint your code with [`golangci-lint`](https://golangci-lint.run) (CI will reject your PR if unlinted). +6. Add tests. +7. Title the PR in a meaningful way and describe the rationale and the thought process in the PR description. +8. Write clean, thoughtful, and detailed [commit messages](https://chris.beams.io/posts/git-commit/). This is even more important than the PR description, because commit messages are stored _inside_ the Git history. One good rule is: if you are happy posting the commit message as the PR description, then it's a good commit message. ## License -The Filecoin Project is dual-licensed under Apache 2.0 and MIT terms: - -- Apache License, Version 2.0, ([LICENSE-APACHE](https://github.com/filecoin-project/go-filecoin/blob/master/LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) -- MIT license ([LICENSE-MIT](https://github.com/filecoin-project/go-filecoin/blob/master/LICENSE-MIT) or http://opensource.org/licenses/MIT) +This project is dual-licensed under [Apache 2.0](https://github.com/filecoin-project/venus/blob/master/LICENSE-APACHE) and [MIT](https://github.com/filecoin-project/venus/blob/master/LICENSE-MIT). diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..f288f71d37 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,25 @@ +# Security Policy + +forked from lotus + +## Reporting a Vulnerability + +For reporting security vulnerabilities/bugs, please consult our Security Policy and Responsible Disclosure Program information at https://github.com/filecoin-project/community/blob/master/SECURITY.md. Security vulnerabilities should be reported via our [Vulnerability Reporting channels](https://github.com/filecoin-project/community/blob/master/SECURITY.md#vulnerability-reporting) and will be eligible for a [Bug Bounty](https://security.filecoin.io/bug-bounty/). + +Please try to provide a clear description of any bugs reported, along with how to reproduce the bug if possible. More detailed bug reports (especially those with a PoC included) will help us move forward much faster. Additionally, please avoid reporting bugs that already have open issues. Take a moment to search the issue list of the related GitHub repositories before writing up a new report. + +Here are some examples of bugs we would consider to be security vulnerabilities: + +* If you can spend from a `multisig` wallet you do not control the keys for. +* If you can cause a miner to be slashed without them actually misbehaving. +* If you can maintain power without submitting windowed posts regularly. +* If you can craft a message that causes lotus nodes to panic. +* If you can cause your miner to win significantly more blocks than it should. +* If you can craft a message that causes a persistent fork in the network. +* If you can cause the total amount of Filecoin in the network to no longer be 2 billion. + +This is not an exhaustive list, but should provide some idea of what we consider as a security vulnerability, . + +## Reporting a non security bug + +For non-security bugs, please simply file a GitHub [issue](https://github.com/filecoin-project/venus/issues/new?template=bug_report.md). diff --git a/app/client/apiface/blockservice.go b/app/client/apiface/blockservice.go new file mode 100644 index 0000000000..63f25ffcd3 --- /dev/null +++ b/app/client/apiface/blockservice.go @@ -0,0 +1,20 @@ +package apiface + +import ( + "context" + "io" + + "github.com/ipfs/go-cid" + ipld "github.com/ipfs/go-ipld-format" +) + +type IDagService interface { + // Rule[perm:read] + DAGGetNode(ctx context.Context, ref string) (interface{}, error) + // Rule[perm:read] + DAGGetFileSize(ctx context.Context, c cid.Cid) (uint64, error) + // Rule[perm:read] + DAGCat(ctx context.Context, c cid.Cid) (io.Reader, error) + // Rule[perm:write] + DAGImportData(ctx context.Context, data io.Reader) (ipld.Node, error) +} diff --git a/app/client/apiface/blockstore.go b/app/client/apiface/blockstore.go new file mode 100644 index 0000000000..13a44327b3 --- /dev/null +++ b/app/client/apiface/blockstore.go @@ -0,0 +1,20 @@ +package apiface + +import ( + "context" + + "github.com/ipfs/go-cid" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" +) + +type IBlockStore interface { + // Rule[perm:read] + ChainReadObj(ctx context.Context, ocid cid.Cid) ([]byte, error) + // Rule[perm:admin] + ChainDeleteObj(ctx context.Context, obj cid.Cid) error + // Rule[perm:read] + ChainHasObj(ctx context.Context, obj cid.Cid) (bool, error) + // Rule[perm:read] + ChainStatObj(ctx context.Context, obj cid.Cid, base cid.Cid) (apitypes.ObjStat, error) +} diff --git a/app/client/apiface/chain.go b/app/client/apiface/chain.go new file mode 100644 index 0000000000..7494f2e0a3 --- /dev/null +++ b/app/client/apiface/chain.go @@ -0,0 +1,214 @@ +package apiface + +import ( + "context" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-state-types/big" + acrypto "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/network" + "github.com/ipfs/go-cid" +) + +type IChain interface { + IAccount + IActor + IBeacon + IMinerState + IChainInfo +} + +type IAccount interface { + // Rule[perm:read] + StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) +} + +type IActor interface { + // Rule[perm:read] + StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) + // Rule[perm:read] + ListActor(ctx context.Context) (map[address.Address]*types.Actor, error) +} + +type IBeacon interface { + // Rule[perm:read] + BeaconGetEntry(ctx context.Context, epoch abi.ChainEpoch) (*types.BeaconEntry, error) +} + +type IChainInfo interface { + // Rule[perm:read] + BlockTime(ctx context.Context) time.Duration + // Rule[perm:read] + ChainList(ctx context.Context, tsKey types.TipSetKey, count int) ([]types.TipSetKey, error) + // Rule[perm:read] + ChainHead(ctx context.Context) (*types.TipSet, error) + // Rule[perm:admin] + ChainSetHead(ctx context.Context, key types.TipSetKey) error + // Rule[perm:read] + ChainGetTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) + // Rule[perm:read] + ChainGetTipSetByHeight(ctx context.Context, height abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) + // Rule[perm:read] + ChainGetTipSetAfterHeight(ctx context.Context, height abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) + // Rule[perm:read] + ChainGetRandomnessFromBeacon(ctx context.Context, key types.TipSetKey, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) + // Rule[perm:read] + ChainGetRandomnessFromTickets(ctx context.Context, tsk types.TipSetKey, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) + // Rule[perm:read] + StateGetRandomnessFromTickets(ctx context.Context, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) + // Rule[perm:read] + StateGetRandomnessFromBeacon(ctx context.Context, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) + // Rule[perm:read] + ChainGetBlock(ctx context.Context, id cid.Cid) (*types.BlockHeader, error) + // Rule[perm:read] + ChainGetMessage(ctx context.Context, msgID cid.Cid) (*types.Message, error) + // Rule[perm:read] + ChainGetBlockMessages(ctx context.Context, bid cid.Cid) (*apitypes.BlockMessages, error) + // Rule[perm:read] + ChainGetMessagesInTipset(ctx context.Context, key types.TipSetKey) ([]apitypes.Message, error) + // Rule[perm:read] + ChainGetReceipts(ctx context.Context, id cid.Cid) ([]types.MessageReceipt, error) + // Rule[perm:read] + ChainGetParentMessages(ctx context.Context, bcid cid.Cid) ([]apitypes.Message, error) + // Rule[perm:read] + ChainGetParentReceipts(ctx context.Context, bcid cid.Cid) ([]*types.MessageReceipt, error) + // Rule[perm:read] + StateVerifiedRegistryRootKey(ctx context.Context, tsk types.TipSetKey) (address.Address, error) + // Rule[perm:read] + StateVerifierStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) + // Rule[perm:read] + ChainNotify(ctx context.Context) <-chan []*apitypes.HeadChange + // Rule[perm:read] + GetFullBlock(ctx context.Context, id cid.Cid) (*types.FullBlock, error) + // Rule[perm:read] + GetActor(ctx context.Context, addr address.Address) (*types.Actor, error) + // Rule[perm:read] + GetParentStateRootActor(ctx context.Context, ts *types.TipSet, addr address.Address) (*types.Actor, error) + // Rule[perm:read] + GetEntry(ctx context.Context, height abi.ChainEpoch, round uint64) (*types.BeaconEntry, error) + // Rule[perm:read] + MessageWait(ctx context.Context, msgCid cid.Cid, confidence, lookback abi.ChainEpoch) (*apitypes.ChainMessage, error) + // Rule[perm:read] + ProtocolParameters(ctx context.Context) (*apitypes.ProtocolParams, error) + // Rule[perm:read] + ResolveToKeyAddr(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) + // Rule[perm:read] + StateNetworkName(ctx context.Context) (apitypes.NetworkName, error) + // StateSearchMsg looks back up to limit epochs in the chain for a message, and returns its receipt and the tipset where it was executed + // + // NOTE: If a replacing message is found on chain, this method will return + // a MsgLookup for the replacing message - the MsgLookup.Message will be a different + // CID than the one provided in the 'cid' param, MsgLookup.Receipt will contain the + // result of the execution of the replacing message. + // + // If the caller wants to ensure that exactly the requested message was executed, + // they must check that MsgLookup.Message is equal to the provided 'cid', or set the + // `allowReplaced` parameter to false. Without this check, and with `allowReplaced` + // set to true, both the requested and original message may appear as + // successfully executed on-chain, which may look like a double-spend. + // + // A replacing message is a message with a different CID, any of Gas values, and + // different signature, but with all other parameters matching (source/destination, + // nonce, params, etc.) + // Rule[perm:read] + StateSearchMsg(ctx context.Context, from types.TipSetKey, msg cid.Cid, limit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) + // StateWaitMsg looks back up to limit epochs in the chain for a message. + // If not found, it blocks until the message arrives on chain, and gets to the + // indicated confidence depth. + // + // NOTE: If a replacing message is found on chain, this method will return + // a MsgLookup for the replacing message - the MsgLookup.Message will be a different + // CID than the one provided in the 'cid' param, MsgLookup.Receipt will contain the + // result of the execution of the replacing message. + // + // If the caller wants to ensure that exactly the requested message was executed, + // they must check that MsgLookup.Message is equal to the provided 'cid', or set the + // `allowReplaced` parameter to false. Without this check, and with `allowReplaced` + // set to true, both the requested and original message may appear as + // successfully executed on-chain, which may look like a double-spend. + // + // A replacing message is a message with a different CID, any of Gas values, and + // different signature, but with all other parameters matching (source/destination, + // nonce, params, etc.) + // Rule[perm:read] + StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64, limit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) + // Rule[perm:read] + StateNetworkVersion(ctx context.Context, tsk types.TipSetKey) (network.Version, error) + // Rule[perm:read] + VerifyEntry(parent, child *types.BeaconEntry, height abi.ChainEpoch) bool + // Rule[perm:read] + ChainExport(context.Context, abi.ChainEpoch, bool, types.TipSetKey) (<-chan []byte, error) + // Rule[perm:read] + ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*apitypes.HeadChange, error) +} + +type IMinerState interface { + // Rule[perm:read] + StateMinerSectorAllocated(ctx context.Context, maddr address.Address, s abi.SectorNumber, tsk types.TipSetKey) (bool, error) + // Rule[perm:read] + StateSectorPreCommitInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) + // Rule[perm:read] + StateSectorGetInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorOnChainInfo, error) + // Rule[perm:read] + StateSectorPartition(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorLocation, error) + // Rule[perm:read] + StateMinerSectorSize(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (abi.SectorSize, error) + // Rule[perm:read] + StateMinerInfo(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (miner.MinerInfo, error) + // Rule[perm:read] + StateMinerWorkerAddress(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (address.Address, error) + // Rule[perm:read] + StateMinerRecoveries(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (bitfield.BitField, error) + // Rule[perm:read] + StateMinerFaults(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (bitfield.BitField, error) + // Rule[perm:read] + StateMinerProvingDeadline(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (*dline.Info, error) + // Rule[perm:read] + StateMinerPartitions(ctx context.Context, maddr address.Address, dlIdx uint64, tsk types.TipSetKey) ([]apitypes.Partition, error) + // Rule[perm:read] + StateMinerDeadlines(ctx context.Context, maddr address.Address, tsk types.TipSetKey) ([]apitypes.Deadline, error) + // Rule[perm:read] + StateMinerSectors(ctx context.Context, maddr address.Address, sectorNos *bitfield.BitField, tsk types.TipSetKey) ([]*miner.SectorOnChainInfo, error) + // Rule[perm:read] + StateMarketStorageDeal(ctx context.Context, dealID abi.DealID, tsk types.TipSetKey) (*apitypes.MarketDeal, error) + // Rule[perm:read] + StateMinerPreCommitDepositForPower(ctx context.Context, maddr address.Address, pci miner.SectorPreCommitInfo, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:read] + StateMinerInitialPledgeCollateral(ctx context.Context, maddr address.Address, pci miner.SectorPreCommitInfo, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:read] + StateVMCirculatingSupplyInternal(ctx context.Context, tsk types.TipSetKey) (types.CirculatingSupply, error) + // Rule[perm:read] + StateCirculatingSupply(ctx context.Context, tsk types.TipSetKey) (abi.TokenAmount, error) + // Rule[perm:read] + StateMarketDeals(ctx context.Context, tsk types.TipSetKey) (map[string]apitypes.MarketDeal, error) + // Rule[perm:read] + StateMinerActiveSectors(ctx context.Context, maddr address.Address, tsk types.TipSetKey) ([]*miner.SectorOnChainInfo, error) + // Rule[perm:read] + StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) + // Rule[perm:read] + StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) + // Rule[perm:read] + StateListActors(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) + // Rule[perm:read] + StateMinerPower(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*apitypes.MinerPower, error) + // Rule[perm:read] + StateMinerAvailableBalance(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:read] + StateSectorExpiration(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorExpiration, error) + // Rule[perm:read] + StateMinerSectorCount(ctx context.Context, addr address.Address, tsk types.TipSetKey) (apitypes.MinerSectors, error) + // Rule[perm:read] + StateMarketBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (apitypes.MarketBalance, error) + // Rule[perm:read] + StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk types.TipSetKey) (apitypes.DealCollateralBounds, error) + // Rule[perm:read] + StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) +} diff --git a/app/client/apiface/config.go b/app/client/apiface/config.go new file mode 100644 index 0000000000..ccf748d36d --- /dev/null +++ b/app/client/apiface/config.go @@ -0,0 +1,10 @@ +package apiface + +import "context" + +type IConfig interface { + // Rule[perm:admin] + ConfigSet(ctx context.Context, dottedPath string, paramJSON string) error + // Rule[perm:read] + ConfigGet(ctx context.Context, dottedPath string) (interface{}, error) +} diff --git a/app/client/apiface/discovery.go b/app/client/apiface/discovery.go new file mode 100644 index 0000000000..8a22c380e2 --- /dev/null +++ b/app/client/apiface/discovery.go @@ -0,0 +1,4 @@ +package apiface + +type IDiscovery interface { +} diff --git a/app/client/apiface/fullnode.go b/app/client/apiface/fullnode.go new file mode 100644 index 0000000000..7e1e1c1f99 --- /dev/null +++ b/app/client/apiface/fullnode.go @@ -0,0 +1,31 @@ +/* +in api interface, you can add comment tags to the function +Note: +Rule[perm:admin,ignore:true] +perm: read,write,sign,admin +jwt token permission check +ignore: bool +the func in the api whether needs to be added to the client for external exposure + +TODO: +1. Support global FUNC injection + +*/ +package apiface + +type FullNode interface { + IDagService + IBlockStore + IChain + IConfig + IDiscovery + IMarket + IMining + IMessagePool + IMultiSig + INetwork + IPaychan + ISyncer + IWallet + IJwtAuthAPI +} diff --git a/app/client/apiface/jwtauth.go b/app/client/apiface/jwtauth.go new file mode 100644 index 0000000000..fc5210c943 --- /dev/null +++ b/app/client/apiface/jwtauth.go @@ -0,0 +1,14 @@ +package apiface + +import ( + "context" + + "github.com/filecoin-project/go-jsonrpc/auth" +) + +type IJwtAuthAPI interface { + // Rule[perm:read] + Verify(ctx context.Context, host, token string) ([]auth.Permission, error) + // Rule[perm:admin] + AuthNew(ctx context.Context, perms []auth.Permission) ([]byte, error) +} diff --git a/app/client/apiface/market.go b/app/client/apiface/market.go new file mode 100644 index 0000000000..6adaa7494d --- /dev/null +++ b/app/client/apiface/market.go @@ -0,0 +1,13 @@ +package apiface + +import ( + "context" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IMarket interface { + // Rule[perm:read] + StateMarketParticipants(ctx context.Context, tsk types.TipSetKey) (map[string]apitypes.MarketBalance, error) //perm:admin +} diff --git a/app/client/apiface/mining.go b/app/client/apiface/mining.go new file mode 100644 index 0000000000..ee26fcf892 --- /dev/null +++ b/app/client/apiface/mining.go @@ -0,0 +1,17 @@ +package apiface + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IMining interface { + // Rule[perm:read] + MinerGetBaseInfo(ctx context.Context, maddr address.Address, round abi.ChainEpoch, tsk types.TipSetKey) (*apitypes.MiningBaseInfo, error) + // Rule[perm:write] + MinerCreateBlock(ctx context.Context, bt *apitypes.BlockTemplate) (*types.BlockMsg, error) +} diff --git a/app/client/apiface/mpool.go b/app/client/apiface/mpool.go new file mode 100644 index 0000000000..ccc573b6ed --- /dev/null +++ b/app/client/apiface/mpool.go @@ -0,0 +1,68 @@ +package apiface + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/messagepool" + "github.com/ipfs/go-cid" +) + +type IMessagePool interface { + // Rule[perm:admin] + MpoolDeleteByAdress(ctx context.Context, addr address.Address) error + // Rule[perm:write] + MpoolPublishByAddr(context.Context, address.Address) error + // Rule[perm:write] + MpoolPublishMessage(ctx context.Context, smsg *types.SignedMessage) error + // Rule[perm:write] + MpoolPush(ctx context.Context, smsg *types.SignedMessage) (cid.Cid, error) + // Rule[perm:read] + MpoolGetConfig(context.Context) (*messagepool.MpoolConfig, error) + // Rule[perm:admin] + MpoolSetConfig(ctx context.Context, cfg *messagepool.MpoolConfig) error + // Rule[perm:read] + MpoolSelect(context.Context, types.TipSetKey, float64) ([]*types.SignedMessage, error) + // Rule[perm:read] + MpoolSelects(context.Context, types.TipSetKey, []float64) ([][]*types.SignedMessage, error) + // Rule[perm:read] + MpoolPending(ctx context.Context, tsk types.TipSetKey) ([]*types.SignedMessage, error) + // Rule[perm:write] + MpoolClear(ctx context.Context, local bool) error + // Rule[perm:write] + MpoolPushUntrusted(ctx context.Context, smsg *types.SignedMessage) (cid.Cid, error) + // Rule[perm:sign] + MpoolPushMessage(ctx context.Context, msg *types.Message, spec *apitypes.MessageSendSpec) (*types.SignedMessage, error) + // Rule[perm:write] + MpoolBatchPush(ctx context.Context, smsgs []*types.SignedMessage) ([]cid.Cid, error) + // Rule[perm:write] + MpoolBatchPushUntrusted(ctx context.Context, smsgs []*types.SignedMessage) ([]cid.Cid, error) + // Rule[perm:sign] + MpoolBatchPushMessage(ctx context.Context, msgs []*types.Message, spec *apitypes.MessageSendSpec) ([]*types.SignedMessage, error) + // Rule[perm:read] + MpoolGetNonce(ctx context.Context, addr address.Address) (uint64, error) + // Rule[perm:read] + MpoolSub(ctx context.Context) (<-chan messagepool.MpoolUpdate, error) + // Rule[perm:read] + GasEstimateMessageGas(ctx context.Context, msg *types.Message, spec *apitypes.MessageSendSpec, tsk types.TipSetKey) (*types.Message, error) + // Rule[perm:read] + GasBatchEstimateMessageGas(ctx context.Context, estimateMessages []*apitypes.EstimateMessage, fromNonce uint64, tsk types.TipSetKey) ([]*apitypes.EstimateResult, error) + // Rule[perm:read] + GasEstimateFeeCap(ctx context.Context, msg *types.Message, maxqueueblks int64, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:read] + GasEstimateGasPremium(ctx context.Context, nblocksincl uint64, sender address.Address, gaslimit int64, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:read] + GasEstimateGasLimit(ctx context.Context, msgIn *types.Message, tsk types.TipSetKey) (int64, error) + // MpoolCheckMessages performs logical checks on a batch of messages + // Rule[perm:read] + MpoolCheckMessages(ctx context.Context, protos []*messagepool.MessagePrototype) ([][]messagepool.MessageCheckStatus, error) + // MpoolCheckPendingMessages performs logical checks for all pending messages from a given address + // Rule[perm:read] + MpoolCheckPendingMessages(ctx context.Context, addr address.Address) ([][]messagepool.MessageCheckStatus, error) + // MpoolCheckReplaceMessages performs logical checks on pending messages with replacement + // Rule[perm:read] + MpoolCheckReplaceMessages(ctx context.Context, msg []*types.Message) ([][]messagepool.MessageCheckStatus, error) +} diff --git a/app/client/apiface/multisig.go b/app/client/apiface/multisig.go new file mode 100644 index 0000000000..62dc207d14 --- /dev/null +++ b/app/client/apiface/multisig.go @@ -0,0 +1,39 @@ +package apiface + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/messagepool" +) + +type IMultiSig interface { + // Rule[perm:sign] + MsigCreate(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val types.BigInt, src address.Address, gp types.BigInt) (*messagepool.MessagePrototype, error) + // Rule[perm:sign] + MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*messagepool.MessagePrototype, error) + // Rule[perm:sign] + MsigAddPropose(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (*messagepool.MessagePrototype, error) + // Rule[perm:sign] + MsigAddApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (*messagepool.MessagePrototype, error) + // Rule[perm:sign] + MsigAddCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (*messagepool.MessagePrototype, error) + // Rule[perm:sign] + MsigSwapPropose(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (*messagepool.MessagePrototype, error) + // Rule[perm:sign] + MsigSwapApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (*messagepool.MessagePrototype, error) + // Rule[perm:sign] + MsigSwapCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (*messagepool.MessagePrototype, error) + // Rule[perm:sign] + MsigApprove(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*messagepool.MessagePrototype, error) + // Rule[perm:sign] + MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*messagepool.MessagePrototype, error) + // Rule[perm:sign] + MsigCancel(ctx context.Context, msig address.Address, txID uint64, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*messagepool.MessagePrototype, error) + // Rule[perm:sign] + MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (*messagepool.MessagePrototype, error) + // Rule[perm:read] + MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) +} diff --git a/app/client/apiface/network.go b/app/client/apiface/network.go new file mode 100644 index 0000000000..d2251597dd --- /dev/null +++ b/app/client/apiface/network.go @@ -0,0 +1,36 @@ +package apiface + +import ( + "context" + + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p/net" +) + +type INetwork interface { + // Rule[perm:admin] + NetworkGetBandwidthStats(ctx context.Context) metrics.Stats + // Rule[perm:admin] + NetworkGetPeerAddresses(ctx context.Context) []ma.Multiaddr + // Rule[perm:admin] + NetworkGetPeerID(ctx context.Context) peer.ID + // Rule[perm:read] + NetworkFindProvidersAsync(ctx context.Context, key cid.Cid, count int) <-chan peer.AddrInfo + // Rule[perm:read] + NetworkGetClosestPeers(ctx context.Context, key string) ([]peer.ID, error) + // Rule[perm:read] + NetworkFindPeer(ctx context.Context, peerID peer.ID) (peer.AddrInfo, error) + // Rule[perm:read] + NetworkConnect(ctx context.Context, addrs []string) (<-chan net.ConnectionResult, error) + // Rule[perm:read] + NetworkPeers(ctx context.Context, verbose, latency, streams bool) (*net.SwarmConnInfos, error) + // Rule[perm:read] + Version(context.Context) (apitypes.Version, error) + // Rule[perm:read] + NetAddrsListen(context.Context) (peer.AddrInfo, error) +} diff --git a/app/client/apiface/paych.go b/app/client/apiface/paych.go new file mode 100644 index 0000000000..b886670033 --- /dev/null +++ b/app/client/apiface/paych.go @@ -0,0 +1,100 @@ +package apiface + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/specs-actors/actors/builtin/paych" + "github.com/ipfs/go-cid" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + paychtypes "github.com/filecoin-project/venus/venus-shared/paych" +) + +type IPaychan interface { + // PaychGet creates a payment channel to a provider with a amount of FIL + // @from: the payment channel sender + // @to: the payment channel recipient + // @amt: the deposits funds in the payment channel + // Rule[perm:sign] + PaychGet(ctx context.Context, from, to address.Address, amt big.Int) (*paychtypes.ChannelInfo, error) + // PaychAvailableFunds get the status of an outbound payment channel + // @pch: payment channel address + // Rule[perm:sign] + PaychAvailableFunds(ctx context.Context, ch address.Address) (*apitypes.ChannelAvailableFunds, error) + // PaychAvailableFundsByFromTo get the status of an outbound payment channel + // @from: the payment channel sender + // @to: he payment channel recipient + // Rule[perm:sign] + PaychAvailableFundsByFromTo(ctx context.Context, from, to address.Address) (*apitypes.ChannelAvailableFunds, error) + // PaychGetWaitReady waits until the create channel / add funds message with the sentinel + // @sentinel: given message CID arrives. + // @ch: the returned channel address can safely be used against the Manager methods. + // Rule[perm:sign] + PaychGetWaitReady(ctx context.Context, sentinel cid.Cid) (address.Address, error) + // PaychAllocateLane Allocate late creates a lane within a payment channel so that calls to + // CreatePaymentVoucher will automatically make vouchers only for the difference in total + // Rule[perm:sign] + PaychAllocateLane(ctx context.Context, ch address.Address) (uint64, error) + // PaychNewPayment aggregate vouchers into a new lane + // @from: the payment channel sender + // @to: the payment channel recipient + // @vouchers: the outstanding (non-redeemed) vouchers + // Rule[perm:sign] + PaychNewPayment(ctx context.Context, from, to address.Address, vouchers []paychtypes.VoucherSpec) (*paychtypes.PaymentInfo, error) + // PaychList list the addresses of all channels that have been created + // Rule[perm:read] + PaychList(ctx context.Context) ([]address.Address, error) + // PaychStatus get the payment channel status + // @pch: payment channel address + // Rule[perm:read] + PaychStatus(ctx context.Context, pch address.Address) (*paychtypes.Status, error) + // PaychSettle update payment channel status to settle + // After a settlement period (currently 12 hours) either party to the payment channel can call collect on chain + // @pch: payment channel address + // Rule[perm:sign] + PaychSettle(ctx context.Context, addr address.Address) (cid.Cid, error) + // PaychCollect update payment channel status to collect + // Collect sends the value of submitted vouchers to the channel recipient (the provider), + // and refunds the remaining channel balance to the channel creator (the client). + // @pch: payment channel address + // Rule[perm:sign] + PaychCollect(ctx context.Context, addr address.Address) (cid.Cid, error) + + // PaychVoucherCheckValid checks if the given voucher is valid (is or could become spendable at some point). + // If the channel is not in the store, fetches the channel from state (and checks that + // the channel To address is owned by the wallet). + // @pch: payment channel address + // @sv: voucher + // Rule[perm:read] + PaychVoucherCheckValid(ctx context.Context, ch address.Address, sv *paych.SignedVoucher) error + // PaychVoucherCheckSpendable checks if the given voucher is currently spendable + // @pch: payment channel address + // @sv: voucher + // Rule[perm:read] + PaychVoucherCheckSpendable(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (bool, error) + // PaychVoucherAdd adds a voucher for an inbound channel. + // If the channel is not in the store, fetches the channel from state (and checks that + // the channel To address is owned by the wallet). + // Rule[perm:write] + PaychVoucherAdd(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, proof []byte, minDelta big.Int) (big.Int, error) + // PaychVoucherCreate creates a new signed voucher on the given payment channel + // with the given lane and amount. The value passed in is exactly the value + // that will be used to create the voucher, so if previous vouchers exist, the + // actual additional value of this voucher will only be the difference between + // the two. + // If there are insufficient funds in the channel to create the voucher, + // returns a nil voucher and the shortfall. + // Rule[perm:sign] + PaychVoucherCreate(ctx context.Context, pch address.Address, amt big.Int, lane uint64) (*paychtypes.VoucherCreateResult, error) + // PaychVoucherList list vouchers in payment channel + // @pch: payment channel address + // Rule[perm:write] + PaychVoucherList(ctx context.Context, pch address.Address) ([]*paych.SignedVoucher, error) + // PaychVoucherSubmit Submit voucher to chain to update payment channel state + // @pch: payment channel address + // @sv: voucher in payment channel + // Rule[perm:sign] + PaychVoucherSubmit(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (cid.Cid, error) +} diff --git a/app/client/apiface/syncer.go b/app/client/apiface/syncer.go new file mode 100644 index 0000000000..0bc6539845 --- /dev/null +++ b/app/client/apiface/syncer.go @@ -0,0 +1,29 @@ +package apiface + +import ( + "context" + + "github.com/filecoin-project/go-state-types/big" + syncTypes "github.com/filecoin-project/venus/pkg/chainsync/types" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type ISyncer interface { + // Rule[perm:write] + ChainSyncHandleNewTipSet(ctx context.Context, ci *types.ChainInfo) error + // Rule[perm:admin] + SetConcurrent(ctx context.Context, concurrent int64) error + // Rule[perm:read] + SyncerTracker(ctx context.Context) *syncTypes.TargetTracker + // Rule[perm:read] + Concurrent(ctx context.Context) int64 + // Rule[perm:read] + ChainTipSetWeight(ctx context.Context, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:write] + SyncSubmitBlock(ctx context.Context, blk *types.BlockMsg) error + // Rule[perm:read] + StateCall(ctx context.Context, msg *types.Message, tsk types.TipSetKey) (*apitypes.InvocResult, error) + // Rule[perm:read] + SyncState(ctx context.Context) (*apitypes.SyncState, error) +} diff --git a/app/client/apiface/v0api/blockservice.go b/app/client/apiface/v0api/blockservice.go new file mode 100644 index 0000000000..4e00b3db93 --- /dev/null +++ b/app/client/apiface/v0api/blockservice.go @@ -0,0 +1,20 @@ +package v0api + +import ( + "context" + "io" + + "github.com/ipfs/go-cid" + ipld "github.com/ipfs/go-ipld-format" +) + +type IDagService interface { + // Rule[perm:read] + DAGGetNode(ctx context.Context, ref string) (interface{}, error) + // Rule[perm:read] + DAGGetFileSize(ctx context.Context, c cid.Cid) (uint64, error) + // Rule[perm:read] + DAGCat(ctx context.Context, c cid.Cid) (io.Reader, error) + // Rule[perm:write] + DAGImportData(ctx context.Context, data io.Reader) (ipld.Node, error) +} diff --git a/app/client/apiface/v0api/blockstore.go b/app/client/apiface/v0api/blockstore.go new file mode 100644 index 0000000000..fb70a90ac9 --- /dev/null +++ b/app/client/apiface/v0api/blockstore.go @@ -0,0 +1,20 @@ +package v0api + +import ( + "context" + + "github.com/ipfs/go-cid" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" +) + +type IBlockStore interface { + // Rule[perm:read] + ChainReadObj(ctx context.Context, ocid cid.Cid) ([]byte, error) + // Rule[perm:admin] + ChainDeleteObj(ctx context.Context, obj cid.Cid) error + // Rule[perm:read] + ChainHasObj(ctx context.Context, obj cid.Cid) (bool, error) + // Rule[perm:read] + ChainStatObj(ctx context.Context, obj cid.Cid, base cid.Cid) (apitypes.ObjStat, error) +} diff --git a/app/client/apiface/v0api/chain.go b/app/client/apiface/v0api/chain.go new file mode 100644 index 0000000000..762112c77d --- /dev/null +++ b/app/client/apiface/v0api/chain.go @@ -0,0 +1,180 @@ +package v0api + +import ( + "context" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + acrypto "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/dline" + "github.com/filecoin-project/go-state-types/network" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IChain interface { + IAccount + IActor + IBeacon + IMinerState + IChainInfo +} + +type IAccount interface { + // Rule[perm:read] + StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) +} + +type IActor interface { + // Rule[perm:read] + StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) + // Rule[perm:read] + ListActor(ctx context.Context) (map[address.Address]*types.Actor, error) +} + +type IBeacon interface { + // Rule[perm:read] + BeaconGetEntry(ctx context.Context, epoch abi.ChainEpoch) (*types.BeaconEntry, error) +} + +type IChainInfo interface { + // Rule[perm:read] + BlockTime(ctx context.Context) time.Duration + // Rule[perm:read] + ChainList(ctx context.Context, tsKey types.TipSetKey, count int) ([]types.TipSetKey, error) + // Rule[perm:read] + ChainHead(ctx context.Context) (*types.TipSet, error) + // Rule[perm:admin] + ChainSetHead(ctx context.Context, key types.TipSetKey) error + // Rule[perm:read] + ChainGetTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) + // Rule[perm:read] + ChainGetTipSetByHeight(ctx context.Context, height abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) + // Rule[perm:read] + ChainGetRandomnessFromBeacon(ctx context.Context, key types.TipSetKey, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) + // Rule[perm:read] + ChainGetRandomnessFromTickets(ctx context.Context, tsk types.TipSetKey, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) + // Rule[perm:read] + ChainGetBlock(ctx context.Context, id cid.Cid) (*types.BlockHeader, error) + // Rule[perm:read] + ChainGetMessage(ctx context.Context, msgID cid.Cid) (*types.Message, error) + // Rule[perm:read] + ChainGetBlockMessages(ctx context.Context, bid cid.Cid) (*apitypes.BlockMessages, error) + // Rule[perm:read] + ChainGetMessagesInTipset(ctx context.Context, key types.TipSetKey) ([]apitypes.Message, error) + // Rule[perm:read] + ChainGetReceipts(ctx context.Context, id cid.Cid) ([]types.MessageReceipt, error) + // Rule[perm:read] + ChainGetParentMessages(ctx context.Context, bcid cid.Cid) ([]apitypes.Message, error) + // Rule[perm:read] + ChainGetParentReceipts(ctx context.Context, bcid cid.Cid) ([]*types.MessageReceipt, error) + //Rule[perm:read] + StateVerifiedRegistryRootKey(ctx context.Context, tsk types.TipSetKey) (address.Address, error) + // Rule[perm:read] + StateVerifierStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) + // Rule[perm:read] + ChainNotify(ctx context.Context) <-chan []*apitypes.HeadChange + // Rule[perm:read] + GetFullBlock(ctx context.Context, id cid.Cid) (*types.FullBlock, error) + // Rule[perm:read] + GetActor(ctx context.Context, addr address.Address) (*types.Actor, error) + // Rule[perm:read] + GetParentStateRootActor(ctx context.Context, ts *types.TipSet, addr address.Address) (*types.Actor, error) + // Rule[perm:read] + GetEntry(ctx context.Context, height abi.ChainEpoch, round uint64) (*types.BeaconEntry, error) + // Rule[perm:read] + MessageWait(ctx context.Context, msgCid cid.Cid, confidence, lookback abi.ChainEpoch) (*apitypes.ChainMessage, error) + // Rule[perm:read] + ProtocolParameters(ctx context.Context) (*apitypes.ProtocolParams, error) + // Rule[perm:read] + ResolveToKeyAddr(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) + // Rule[perm:read] + StateNetworkName(ctx context.Context) (apitypes.NetworkName, error) + // Rule[perm:read] + StateGetReceipt(ctx context.Context, msg cid.Cid, from types.TipSetKey) (*types.MessageReceipt, error) + // Rule[perm:read] + StateSearchMsg(ctx context.Context, msg cid.Cid) (*apitypes.MsgLookup, error) + // Rule[perm:read] + StateSearchMsgLimited(ctx context.Context, cid cid.Cid, limit abi.ChainEpoch) (*apitypes.MsgLookup, error) + // Rule[perm:read] + StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64) (*apitypes.MsgLookup, error) + // Rule[perm:read] + StateWaitMsgLimited(ctx context.Context, cid cid.Cid, confidence uint64, limit abi.ChainEpoch) (*apitypes.MsgLookup, error) + // Rule[perm:read] + StateNetworkVersion(ctx context.Context, tsk types.TipSetKey) (network.Version, error) + // Rule[perm:read] + VerifyEntry(parent, child *types.BeaconEntry, height abi.ChainEpoch) bool + // Rule[perm:read] + ChainExport(context.Context, abi.ChainEpoch, bool, types.TipSetKey) (<-chan []byte, error) + // Rule[perm:read] + ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*apitypes.HeadChange, error) +} + +type IMinerState interface { + // Rule[perm:read] + StateMinerSectorAllocated(ctx context.Context, maddr address.Address, s abi.SectorNumber, tsk types.TipSetKey) (bool, error) + // Rule[perm:read] + StateSectorPreCommitInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) + // Rule[perm:read] + StateSectorGetInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorOnChainInfo, error) + // Rule[perm:read] + StateSectorPartition(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorLocation, error) + // Rule[perm:read] + StateMinerSectorSize(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (abi.SectorSize, error) + // Rule[perm:read] + StateMinerInfo(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (miner.MinerInfo, error) + // Rule[perm:read] + StateMinerWorkerAddress(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (address.Address, error) + // Rule[perm:read] + StateMinerRecoveries(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (bitfield.BitField, error) + // Rule[perm:read] + StateMinerFaults(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (bitfield.BitField, error) + // Rule[perm:read] + StateMinerProvingDeadline(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (*dline.Info, error) + // Rule[perm:read] + StateMinerPartitions(ctx context.Context, maddr address.Address, dlIdx uint64, tsk types.TipSetKey) ([]apitypes.Partition, error) + // Rule[perm:read] + StateMinerDeadlines(ctx context.Context, maddr address.Address, tsk types.TipSetKey) ([]apitypes.Deadline, error) + // Rule[perm:read] + StateMinerSectors(ctx context.Context, maddr address.Address, sectorNos *bitfield.BitField, tsk types.TipSetKey) ([]*miner.SectorOnChainInfo, error) + // Rule[perm:read] + StateMarketStorageDeal(ctx context.Context, dealID abi.DealID, tsk types.TipSetKey) (*apitypes.MarketDeal, error) + // Rule[perm:read] + StateMinerPreCommitDepositForPower(ctx context.Context, maddr address.Address, pci miner.SectorPreCommitInfo, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:read] + StateMinerInitialPledgeCollateral(ctx context.Context, maddr address.Address, pci miner.SectorPreCommitInfo, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:read] + StateVMCirculatingSupplyInternal(ctx context.Context, tsk types.TipSetKey) (types.CirculatingSupply, error) + // Rule[perm:read] + StateCirculatingSupply(ctx context.Context, tsk types.TipSetKey) (abi.TokenAmount, error) + // Rule[perm:read] + StateMarketDeals(ctx context.Context, tsk types.TipSetKey) (map[string]apitypes.MarketDeal, error) + // Rule[perm:read] + StateMinerActiveSectors(ctx context.Context, maddr address.Address, tsk types.TipSetKey) ([]*miner.SectorOnChainInfo, error) + // Rule[perm:read] + StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) + // Rule[perm:read] + StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) + // Rule[perm:read] + StateListActors(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) + // Rule[perm:read] + StateMinerPower(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*apitypes.MinerPower, error) + // Rule[perm:read] + StateMinerAvailableBalance(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:read] + StateSectorExpiration(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorExpiration, error) + // Rule[perm:read] + StateMinerSectorCount(ctx context.Context, addr address.Address, tsk types.TipSetKey) (apitypes.MinerSectors, error) + // Rule[perm:read] + StateMarketBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (apitypes.MarketBalance, error) + // Rule[perm:read] + StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk types.TipSetKey) (apitypes.DealCollateralBounds, error) + // Rule[perm:read] + StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) +} diff --git a/app/client/apiface/v0api/config.go b/app/client/apiface/v0api/config.go new file mode 100644 index 0000000000..576b3cc7cf --- /dev/null +++ b/app/client/apiface/v0api/config.go @@ -0,0 +1,10 @@ +package v0api + +import "context" + +type IConfig interface { + // Rule[perm:admin] + ConfigSet(ctx context.Context, dottedPath string, paramJSON string) error + // Rule[perm:read] + ConfigGet(ctx context.Context, dottedPath string) (interface{}, error) +} diff --git a/app/client/apiface/v0api/discovery.go b/app/client/apiface/v0api/discovery.go new file mode 100644 index 0000000000..2e92f5579e --- /dev/null +++ b/app/client/apiface/v0api/discovery.go @@ -0,0 +1,4 @@ +package v0api + +type IDiscovery interface { +} diff --git a/app/client/apiface/v0api/fullnode.go b/app/client/apiface/v0api/fullnode.go new file mode 100644 index 0000000000..3395b64e41 --- /dev/null +++ b/app/client/apiface/v0api/fullnode.go @@ -0,0 +1,31 @@ +/* +in api interface, you can add comment tags to the function +Note: +Rule[perm:admin,ignore:true] +perm: read,write,sign,admin +jwt token permission check +ignore: bool +the func in the api whether needs to be added to the client for external exposure + +TODO: +1. Support global FUNC injection + +*/ +package v0api + +type FullNode interface { + IDagService + IBlockStore + IChain + IConfig + IDiscovery + IMarket + IMining + IMessagePool + IMultiSig + INetwork + IPaychan + ISyncer + IWallet + IJwtAuthAPI +} diff --git a/app/client/apiface/v0api/jwtauth.go b/app/client/apiface/v0api/jwtauth.go new file mode 100644 index 0000000000..6c52109f92 --- /dev/null +++ b/app/client/apiface/v0api/jwtauth.go @@ -0,0 +1,14 @@ +package v0api + +import ( + "context" + + "github.com/filecoin-project/go-jsonrpc/auth" +) + +type IJwtAuthAPI interface { + // Rule[perm:read] + Verify(ctx context.Context, host, token string) ([]auth.Permission, error) + // Rule[perm:admin] + AuthNew(ctx context.Context, perms []auth.Permission) ([]byte, error) +} diff --git a/app/client/apiface/v0api/market.go b/app/client/apiface/v0api/market.go new file mode 100644 index 0000000000..8eff369c15 --- /dev/null +++ b/app/client/apiface/v0api/market.go @@ -0,0 +1,13 @@ +package v0api + +import ( + "context" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IMarket interface { + // Rule[perm:read] + StateMarketParticipants(ctx context.Context, tsk types.TipSetKey) (map[string]apitypes.MarketBalance, error) //perm:admin +} diff --git a/app/client/apiface/v0api/mining.go b/app/client/apiface/v0api/mining.go new file mode 100644 index 0000000000..6f3fc2bcfe --- /dev/null +++ b/app/client/apiface/v0api/mining.go @@ -0,0 +1,17 @@ +package v0api + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IMining interface { + // Rule[perm:read] + MinerGetBaseInfo(ctx context.Context, maddr address.Address, round abi.ChainEpoch, tsk types.TipSetKey) (*apitypes.MiningBaseInfo, error) + // Rule[perm:write] + MinerCreateBlock(ctx context.Context, bt *apitypes.BlockTemplate) (*types.BlockMsg, error) +} diff --git a/app/client/apiface/v0api/mpool.go b/app/client/apiface/v0api/mpool.go new file mode 100644 index 0000000000..9db7446fec --- /dev/null +++ b/app/client/apiface/v0api/mpool.go @@ -0,0 +1,59 @@ +package v0api + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/messagepool" + "github.com/ipfs/go-cid" +) + +type IMessagePool interface { + // Rule[perm:admin] + MpoolDeleteByAdress(ctx context.Context, addr address.Address) error + // Rule[perm:write] + MpoolPublishByAddr(context.Context, address.Address) error + // Rule[perm:write] + MpoolPublishMessage(ctx context.Context, smsg *types.SignedMessage) error + // Rule[perm:write] + MpoolPush(ctx context.Context, smsg *types.SignedMessage) (cid.Cid, error) + // Rule[perm:read] + MpoolGetConfig(context.Context) (*messagepool.MpoolConfig, error) + // Rule[perm:admin] + MpoolSetConfig(ctx context.Context, cfg *messagepool.MpoolConfig) error + // Rule[perm:read] + MpoolSelect(context.Context, types.TipSetKey, float64) ([]*types.SignedMessage, error) + // Rule[perm:read] + MpoolSelects(context.Context, types.TipSetKey, []float64) ([][]*types.SignedMessage, error) + // Rule[perm:read] + MpoolPending(ctx context.Context, tsk types.TipSetKey) ([]*types.SignedMessage, error) + // Rule[perm:write] + MpoolClear(ctx context.Context, local bool) error + // Rule[perm:write] + MpoolPushUntrusted(ctx context.Context, smsg *types.SignedMessage) (cid.Cid, error) + // Rule[perm:sign] + MpoolPushMessage(ctx context.Context, msg *types.Message, spec *apitypes.MessageSendSpec) (*types.SignedMessage, error) + // Rule[perm:write] + MpoolBatchPush(ctx context.Context, smsgs []*types.SignedMessage) ([]cid.Cid, error) + // Rule[perm:write] + MpoolBatchPushUntrusted(ctx context.Context, smsgs []*types.SignedMessage) ([]cid.Cid, error) + // Rule[perm:sign] + MpoolBatchPushMessage(ctx context.Context, msgs []*types.Message, spec *apitypes.MessageSendSpec) ([]*types.SignedMessage, error) + // Rule[perm:read] + MpoolGetNonce(ctx context.Context, addr address.Address) (uint64, error) + // Rule[perm:read] + MpoolSub(ctx context.Context) (<-chan messagepool.MpoolUpdate, error) + // Rule[perm:read] + GasEstimateMessageGas(ctx context.Context, msg *types.Message, spec *apitypes.MessageSendSpec, tsk types.TipSetKey) (*types.Message, error) + // Rule[perm:read] + GasBatchEstimateMessageGas(ctx context.Context, estimateMessages []*apitypes.EstimateMessage, fromNonce uint64, tsk types.TipSetKey) ([]*apitypes.EstimateResult, error) + // Rule[perm:read] + GasEstimateFeeCap(ctx context.Context, msg *types.Message, maxqueueblks int64, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:read] + GasEstimateGasPremium(ctx context.Context, nblocksincl uint64, sender address.Address, gaslimit int64, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:read] + GasEstimateGasLimit(ctx context.Context, msgIn *types.Message, tsk types.TipSetKey) (int64, error) +} diff --git a/app/client/apiface/v0api/multisig.go b/app/client/apiface/v0api/multisig.go new file mode 100644 index 0000000000..db3731c032 --- /dev/null +++ b/app/client/apiface/v0api/multisig.go @@ -0,0 +1,43 @@ +package v0api + +import ( + "context" + + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IMultiSig interface { + // MsigCreate creates a multisig wallet + // It takes the following params: , , + //, , + // Rule[perm:sign] + MsigCreate(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (cid.Cid, error) + // Rule[perm:sign] + MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) + // Rule[perm:sign] + MsigAddPropose(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (cid.Cid, error) + // Rule[perm:sign] + MsigAddApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (cid.Cid, error) + // Rule[perm:sign] + MsigAddCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (cid.Cid, error) + // Rule[perm:sign] + MsigSwapPropose(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) + // Rule[perm:sign] + MsigSwapApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) + // Rule[perm:sign] + MsigSwapCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) + // Rule[perm:sign] + MsigApprove(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) + // Rule[perm:sign] + MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) + // Rule[perm:sign] + MsigCancel(ctx context.Context, msig address.Address, txID uint64, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) + // Rule[perm:sign] + MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (cid.Cid, error) + // Rule[perm:read] + MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) +} diff --git a/app/client/apiface/v0api/network.go b/app/client/apiface/v0api/network.go new file mode 100644 index 0000000000..b909ee2240 --- /dev/null +++ b/app/client/apiface/v0api/network.go @@ -0,0 +1,35 @@ +package v0api + +import ( + "context" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p/net" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" +) + +type INetwork interface { + // Rule[perm:admin] + NetworkGetBandwidthStats(ctx context.Context) metrics.Stats + // Rule[perm:admin] + NetworkGetPeerAddresses(ctx context.Context) []ma.Multiaddr + // Rule[perm:admin] + NetworkGetPeerID(ctx context.Context) peer.ID + // Rule[perm:read] + NetworkFindProvidersAsync(ctx context.Context, key cid.Cid, count int) <-chan peer.AddrInfo + // Rule[perm:admin] + NetworkGetClosestPeers(ctx context.Context, key string) ([]peer.ID, error) + // Rule[perm:read] + NetworkFindPeer(ctx context.Context, peerID peer.ID) (peer.AddrInfo, error) + // Rule[perm:read] + NetworkConnect(ctx context.Context, addrs []string) (<-chan net.ConnectionResult, error) + // Rule[perm:read] + NetworkPeers(ctx context.Context, verbose, latency, streams bool) (*net.SwarmConnInfos, error) + // Rule[perm:read] + Version(context.Context) (apitypes.Version, error) + // Rule[perm:read] + NetAddrsListen(context.Context) (peer.AddrInfo, error) +} diff --git a/app/client/apiface/v0api/paych.go b/app/client/apiface/v0api/paych.go new file mode 100644 index 0000000000..30ec19f238 --- /dev/null +++ b/app/client/apiface/v0api/paych.go @@ -0,0 +1,100 @@ +package v0api + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/specs-actors/actors/builtin/paych" + "github.com/ipfs/go-cid" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + paychtypes "github.com/filecoin-project/venus/venus-shared/paych" +) + +type IPaychan interface { + // PaychGet creates a payment channel to a provider with a amount of FIL + // @from: the payment channel sender + // @to: the payment channel recipient + // @amt: the deposits funds in the payment channel + // Rule[perm:sign] + PaychGet(ctx context.Context, from, to address.Address, amt big.Int) (*paychtypes.ChannelInfo, error) + // PaychAvailableFunds get the status of an outbound payment channel + // @pch: payment channel address + // Rule[perm:sign] + PaychAvailableFunds(ctx context.Context, ch address.Address) (*apitypes.ChannelAvailableFunds, error) + // PaychAvailableFundsByFromTo get the status of an outbound payment channel + // @from: the payment channel sender + // @to: he payment channel recipient + // Rule[perm:sign] + PaychAvailableFundsByFromTo(ctx context.Context, from, to address.Address) (*apitypes.ChannelAvailableFunds, error) + // PaychGetWaitReady waits until the create channel / add funds message with the sentinel + // @sentinel: given message CID arrives. + // @ch: the returned channel address can safely be used against the Manager methods. + // Rule[perm:sign] + PaychGetWaitReady(ctx context.Context, sentinel cid.Cid) (address.Address, error) + // PaychAllocateLane Allocate late creates a lane within a payment channel so that calls to + // CreatePaymentVoucher will automatically make vouchers only for the difference in total + // Rule[perm:sign] + PaychAllocateLane(ctx context.Context, ch address.Address) (uint64, error) + // PaychNewPayment aggregate vouchers into a new lane + // @from: the payment channel sender + // @to: the payment channel recipient + // @vouchers: the outstanding (non-redeemed) vouchers + // Rule[perm:sign] + PaychNewPayment(ctx context.Context, from, to address.Address, vouchers []paychtypes.VoucherSpec) (*paychtypes.PaymentInfo, error) + // PaychList list the addresses of all channels that have been created + // Rule[perm:read] + PaychList(ctx context.Context) ([]address.Address, error) + // PaychStatus get the payment channel status + // @pch: payment channel address + // Rule[perm:read] + PaychStatus(ctx context.Context, pch address.Address) (*paychtypes.Status, error) + // PaychSettle update payment channel status to settle + // After a settlement period (currently 12 hours) either party to the payment channel can call collect on chain + // @pch: payment channel address + // Rule[perm:sign] + PaychSettle(ctx context.Context, addr address.Address) (cid.Cid, error) + // PaychCollect update payment channel status to collect + // Collect sends the value of submitted vouchers to the channel recipient (the provider), + // and refunds the remaining channel balance to the channel creator (the client). + // @pch: payment channel address + // Rule[perm:sign] + PaychCollect(ctx context.Context, addr address.Address) (cid.Cid, error) + + // PaychVoucherCheckValid checks if the given voucher is valid (is or could become spendable at some point). + // If the channel is not in the store, fetches the channel from state (and checks that + // the channel To address is owned by the wallet). + // @pch: payment channel address + // @sv: voucher + // Rule[perm:read] + PaychVoucherCheckValid(ctx context.Context, ch address.Address, sv *paych.SignedVoucher) error + // PaychVoucherCheckSpendable checks if the given voucher is currently spendable + // @pch: payment channel address + // @sv: voucher + // Rule[perm:read] + PaychVoucherCheckSpendable(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (bool, error) + // PaychVoucherAdd adds a voucher for an inbound channel. + // If the channel is not in the store, fetches the channel from state (and checks that + // the channel To address is owned by the wallet). + // Rule[perm:write] + PaychVoucherAdd(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, proof []byte, minDelta big.Int) (big.Int, error) + // PaychVoucherCreate creates a new signed voucher on the given payment channel + // with the given lane and amount. The value passed in is exactly the value + // that will be used to create the voucher, so if previous vouchers exist, the + // actual additional value of this voucher will only be the difference between + // the two. + // If there are insufficient funds in the channel to create the voucher, + // returns a nil voucher and the shortfall. + // Rule[perm:sign] + PaychVoucherCreate(ctx context.Context, pch address.Address, amt big.Int, lane uint64) (*paychtypes.VoucherCreateResult, error) + // PaychVoucherList list vouchers in payment channel + // @pch: payment channel address + // Rule[perm:write] + PaychVoucherList(ctx context.Context, pch address.Address) ([]*paych.SignedVoucher, error) + // PaychVoucherSubmit Submit voucher to chain to update payment channel state + // @pch: payment channel address + // @sv: voucher in payment channel + // Rule[perm:sign] + PaychVoucherSubmit(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (cid.Cid, error) +} diff --git a/app/client/apiface/v0api/syncer.go b/app/client/apiface/v0api/syncer.go new file mode 100644 index 0000000000..3967e8a59d --- /dev/null +++ b/app/client/apiface/v0api/syncer.go @@ -0,0 +1,29 @@ +package v0api + +import ( + "context" + + "github.com/filecoin-project/go-state-types/big" + syncTypes "github.com/filecoin-project/venus/pkg/chainsync/types" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type ISyncer interface { + // Rule[perm:write] + ChainSyncHandleNewTipSet(ctx context.Context, ci *types.ChainInfo) error + // Rule[perm:admin] + SetConcurrent(ctx context.Context, concurrent int64) error + // Rule[perm:read] + SyncerTracker(ctx context.Context) *syncTypes.TargetTracker + // Rule[perm:read] + Concurrent(ctx context.Context) int64 + // Rule[perm:read] + ChainTipSetWeight(ctx context.Context, tsk types.TipSetKey) (big.Int, error) + // Rule[perm:write] + SyncSubmitBlock(ctx context.Context, blk *types.BlockMsg) error + // Rule[perm:read] + StateCall(ctx context.Context, msg *types.Message, tsk types.TipSetKey) (*apitypes.InvocResult, error) + // Rule[perm:read] + SyncState(ctx context.Context) (*apitypes.SyncState, error) +} diff --git a/app/client/apiface/v0api/wallet.go b/app/client/apiface/v0api/wallet.go new file mode 100644 index 0000000000..ea20b74f12 --- /dev/null +++ b/app/client/apiface/v0api/wallet.go @@ -0,0 +1,44 @@ +package v0api + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/crypto" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/wallet" +) + +type IWallet interface { + // Rule[perm:sign] + WalletSign(ctx context.Context, k address.Address, msg []byte, meta wallet.MsgMeta) (*crypto.Signature, error) + // Rule[perm:admin] + WalletExport(addr address.Address, password string) (*crypto.KeyInfo, error) + // Rule[perm:admin] + WalletImport(key *crypto.KeyInfo) (address.Address, error) + // Rule[perm:write] + WalletHas(ctx context.Context, addr address.Address) (bool, error) + // Rule[perm:write] + WalletNewAddress(protocol address.Protocol) (address.Address, error) + // Rule[perm:read] + WalletBalance(ctx context.Context, addr address.Address) (abi.TokenAmount, error) //not exists in remote + // Rule[perm:write] + WalletDefaultAddress(ctx context.Context) (address.Address, error) //not exists in remote + // Rule[perm:admin] + WalletAddresses(ctx context.Context) []address.Address + // Rule[perm:write] + WalletSetDefault(ctx context.Context, addr address.Address) error //not exists in remote + // Rule[perm:sign] + WalletSignMessage(ctx context.Context, k address.Address, msg *types.Message) (*types.SignedMessage, error) + // Rule[perm:admin] + LockWallet(ctx context.Context) error + // Rule[perm:admin] + UnLockWallet(ctx context.Context, password []byte) error + // Rule[perm:admin] + SetPassword(Context context.Context, password []byte) error + // Rule[perm:admin] + HasPassword(Context context.Context) bool + // Rule[perm:admin] + WalletState(Context context.Context) int +} diff --git a/app/client/apiface/wallet.go b/app/client/apiface/wallet.go new file mode 100644 index 0000000000..74b6217f50 --- /dev/null +++ b/app/client/apiface/wallet.go @@ -0,0 +1,45 @@ +package apiface + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/venus/pkg/crypto" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/wallet" +) + +type IWallet interface { + // Rule[perm:sign] + WalletSign(ctx context.Context, k address.Address, msg []byte, meta wallet.MsgMeta) (*crypto.Signature, error) + // Rule[perm:admin] + WalletExport(addr address.Address, password string) (*crypto.KeyInfo, error) + // Rule[perm:admin] + WalletImport(key *crypto.KeyInfo) (address.Address, error) + // Rule[perm:write] + WalletHas(ctx context.Context, addr address.Address) (bool, error) + // Rule[perm:write] + WalletNewAddress(protocol address.Protocol) (address.Address, error) + // Rule[perm:read] + WalletBalance(ctx context.Context, addr address.Address) (abi.TokenAmount, error) //not exists in remote + // Rule[perm:write] + WalletDefaultAddress(ctx context.Context) (address.Address, error) //not exists in remote + // Rule[perm:admin] + WalletAddresses(ctx context.Context) []address.Address + // Rule[perm:write] + WalletSetDefault(ctx context.Context, addr address.Address) error //not exists in remote + // Rule[perm:sign] + WalletSignMessage(ctx context.Context, k address.Address, msg *types.Message) (*types.SignedMessage, error) + // Rule[perm:admin] + LockWallet(ctx context.Context) error + // Rule[perm:admin] + UnLockWallet(ctx context.Context, password []byte) error + // Rule[perm:admin] + SetPassword(Context context.Context, password []byte) error + // Rule[perm:admin] + HasPassword(Context context.Context) bool + // Rule[perm:admin] + WalletState(Context context.Context) int +} diff --git a/app/client/client_test.go b/app/client/client_test.go new file mode 100644 index 0000000000..92f85dbe02 --- /dev/null +++ b/app/client/client_test.go @@ -0,0 +1,119 @@ +package client + +import ( + "context" + "contrib.go.opencensus.io/exporter/jaeger" + "fmt" + "github.com/filecoin-project/go-jsonrpc" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/metrics" + "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/ipfs/go-cid" + "go.opencensus.io/trace" + "net/http" + "os" + "testing" + "time" +) + +func TestMain(m *testing.M) { + if err := setup(); err != nil { + fmt.Printf("setup failed:%s\n", err.Error()) + return + } + + code := m.Run() + + shutdown() + + os.Exit(code) +} + +var clt *FullNodeStruct +var closer jsonrpc.ClientCloser + +var endpoint = "http://localhost:3453/rpc/v0" +var token = "" +var jaegerProxyEndpoint = "192.168.1.125:6831" +var jaegerExporter *jaeger.Exporter + +func setup() error { + var err error + + if err = initClient(); err != nil { + return err + } + + if jaegerExporter, err = metrics.RegisterJaeger("", &config.TraceConfig{ + JaegerTracingEnabled: true, + ProbabilitySampler: 1.0, + JaegerEndpoint: jaegerProxyEndpoint, + ServerName: "venus-client", + }); err != nil { + fmt.Printf("failed registerjaeger(%s), message:%s\n", + jaegerProxyEndpoint, err.Error()) + return err + } + return nil +} + +func TestAPIs(t *testing.T) { + testflags.UnitTest(t) + t.Skip("local test") + cid, _ := cid.Decode("bafy2bzacedylucvhzggupihcqjfvv7s4mthgetphb2zzlp7kpjpykmiklfzt4") + + ctx, span := trace.StartSpan(context.TODO(), "test_api") + defer span.End() + + sctx := span.SpanContext() + span.AddAttributes(trace.StringAttribute("user", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBbGxvdyI6WyJhZG1pbiJdfQ.8KBg6HE9KZFxaPogQhYCAN2HNcK5lSR37NMRrem5aVY")) + + fmt.Printf("tracid:%s, spanid:%s\n", sctx.TraceID, sctx.SpanID) + + if _, err := clt.ChainGetBlock(ctx, cid); err != nil { + fmt.Printf("call chainhead failed:%s\n", err.Error()) + } +} + +func TestRatelimit(t *testing.T) { + testflags.UnitTest(t) + t.Skip("local test") + ctx := context.TODO() + + for j := 0; j < 5; j++ { + for i := 0; i < 10; i++ { + if _, err := clt.ChainHead(ctx); err != nil { + fmt.Printf("call chainhead failed:%s\n", err.Error()) + } else { + fmt.Printf("index:%d, call chainhead success\n", i) + } + } + fmt.Printf("\n") + time.Sleep(time.Second * 10) + } +} + +func initClient() error { + node := FullNodeStruct{} + headers := http.Header{} + + if len(token) != 0 { + headers.Add("Authorization", "Bearer "+token) + } + + var err error + if closer, err = jsonrpc.NewClient(context.TODO(), endpoint, "Filecoin", &node, headers); err == nil { + clt = &node + } + return err +} + +func shutdown() { + if jaegerExporter != nil { + jaegerExporter.Flush() + } + + if closer != nil { + closer() + } +} diff --git a/app/client/full.go b/app/client/full.go new file mode 100644 index 0000000000..cf00e83dfd --- /dev/null +++ b/app/client/full.go @@ -0,0 +1,1000 @@ +// Code generated by github.com/filecoin-project/tools/gen/api. DO NOT EDIT. + +package client + +import ( + "context" + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-jsonrpc/auth" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + acrypto "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/dline" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/specs-actors/actors/builtin/paych" + syncTypes "github.com/filecoin-project/venus/pkg/chainsync/types" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p/net" + "github.com/filecoin-project/venus/venus-shared/messagepool" + paychtypes "github.com/filecoin-project/venus/venus-shared/paych" + "github.com/filecoin-project/venus/venus-shared/wallet" + "github.com/ipfs/go-cid" + ipld "github.com/ipfs/go-ipld-format" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" + "io" + "time" +) + +type FullNodeStruct struct { + IDagServiceStruct + IBlockStoreStruct + IChainStruct + IConfigStruct + IDiscoveryStruct + IMarketStruct + IMiningStruct + IMessagePoolStruct + IMultiSigStruct + INetworkStruct + IPaychanStruct + ISyncerStruct + IWalletStruct + IJwtAuthAPIStruct +} + +type IAccountStruct struct { + Internal struct { + StateAccountKey func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"` + } +} + +func (s *IAccountStruct) StateAccountKey(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) { + return s.Internal.StateAccountKey(p0, p1, p2) +} + +type IActorStruct struct { + Internal struct { + ListActor func(p0 context.Context) (map[address.Address]*types.Actor, error) `perm:"read"` + StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"` + } +} + +func (s *IActorStruct) ListActor(p0 context.Context) (map[address.Address]*types.Actor, error) { + return s.Internal.ListActor(p0) +} + +func (s *IActorStruct) StateGetActor(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) { + return s.Internal.StateGetActor(p0, p1, p2) +} + +type IBeaconStruct struct { + Internal struct { + BeaconGetEntry func(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) `perm:"read"` + } +} + +func (s *IBeaconStruct) BeaconGetEntry(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) { + return s.Internal.BeaconGetEntry(p0, p1) +} + +type IBlockStoreStruct struct { + Internal struct { + ChainDeleteObj func(p0 context.Context, p1 cid.Cid) error `perm:"admin"` + ChainHasObj func(p0 context.Context, p1 cid.Cid) (bool, error) `perm:"read"` + ChainReadObj func(p0 context.Context, p1 cid.Cid) ([]byte, error) `perm:"read"` + ChainStatObj func(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (apitypes.ObjStat, error) `perm:"read"` + } +} + +func (s *IBlockStoreStruct) ChainDeleteObj(p0 context.Context, p1 cid.Cid) error { + return s.Internal.ChainDeleteObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainHasObj(p0 context.Context, p1 cid.Cid) (bool, error) { + return s.Internal.ChainHasObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainReadObj(p0 context.Context, p1 cid.Cid) ([]byte, error) { + return s.Internal.ChainReadObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainStatObj(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (apitypes.ObjStat, error) { + return s.Internal.ChainStatObj(p0, p1, p2) +} + +type IChainStruct struct { + IAccountStruct + IActorStruct + IBeaconStruct + IMinerStateStruct + IChainInfoStruct +} + +type IChainInfoStruct struct { + Internal struct { + BlockTime func(p0 context.Context) time.Duration `perm:"read"` + ChainExport func(p0 context.Context, p1 abi.ChainEpoch, p2 bool, p3 types.TipSetKey) (<-chan []byte, error) `perm:"read"` + ChainGetBlock func(p0 context.Context, p1 cid.Cid) (*types.BlockHeader, error) `perm:"read"` + ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*apitypes.BlockMessages, error) `perm:"read"` + ChainGetMessage func(p0 context.Context, p1 cid.Cid) (*types.Message, error) `perm:"read"` + ChainGetMessagesInTipset func(p0 context.Context, p1 types.TipSetKey) ([]apitypes.Message, error) `perm:"read"` + ChainGetParentMessages func(p0 context.Context, p1 cid.Cid) ([]apitypes.Message, error) `perm:"read"` + ChainGetParentReceipts func(p0 context.Context, p1 cid.Cid) ([]*types.MessageReceipt, error) `perm:"read"` + ChainGetPath func(p0 context.Context, p1 types.TipSetKey, p2 types.TipSetKey) ([]*apitypes.HeadChange, error) `perm:"read"` + ChainGetRandomnessFromBeacon func(p0 context.Context, p1 types.TipSetKey, p2 acrypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"` + ChainGetRandomnessFromTickets func(p0 context.Context, p1 types.TipSetKey, p2 acrypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"` + ChainGetReceipts func(p0 context.Context, p1 cid.Cid) ([]types.MessageReceipt, error) `perm:"read"` + ChainGetTipSet func(p0 context.Context, p1 types.TipSetKey) (*types.TipSet, error) `perm:"read"` + ChainGetTipSetAfterHeight func(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) (*types.TipSet, error) `perm:"read"` + ChainGetTipSetByHeight func(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) (*types.TipSet, error) `perm:"read"` + ChainHead func(p0 context.Context) (*types.TipSet, error) `perm:"read"` + ChainList func(p0 context.Context, p1 types.TipSetKey, p2 int) ([]types.TipSetKey, error) `perm:"read"` + ChainNotify func(p0 context.Context) <-chan []*apitypes.HeadChange `perm:"read"` + ChainSetHead func(p0 context.Context, p1 types.TipSetKey) error `perm:"admin"` + GetActor func(p0 context.Context, p1 address.Address) (*types.Actor, error) `perm:"read"` + GetEntry func(p0 context.Context, p1 abi.ChainEpoch, p2 uint64) (*types.BeaconEntry, error) `perm:"read"` + GetFullBlock func(p0 context.Context, p1 cid.Cid) (*types.FullBlock, error) `perm:"read"` + GetParentStateRootActor func(p0 context.Context, p1 *types.TipSet, p2 address.Address) (*types.Actor, error) `perm:"read"` + MessageWait func(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch, p3 abi.ChainEpoch) (*apitypes.ChainMessage, error) `perm:"read"` + ProtocolParameters func(p0 context.Context) (*apitypes.ProtocolParams, error) `perm:"read"` + ResolveToKeyAddr func(p0 context.Context, p1 address.Address, p2 *types.TipSet) (address.Address, error) `perm:"read"` + StateGetRandomnessFromBeacon func(p0 context.Context, p1 acrypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"` + StateGetRandomnessFromTickets func(p0 context.Context, p1 acrypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) `perm:"read"` + StateNetworkName func(p0 context.Context) (apitypes.NetworkName, error) `perm:"read"` + StateNetworkVersion func(p0 context.Context, p1 types.TipSetKey) (network.Version, error) `perm:"read"` + StateSearchMsg func(p0 context.Context, p1 types.TipSetKey, p2 cid.Cid, p3 abi.ChainEpoch, p4 bool) (*apitypes.MsgLookup, error) `perm:"read"` + StateVerifiedRegistryRootKey func(p0 context.Context, p1 types.TipSetKey) (address.Address, error) `perm:"read"` + StateVerifierStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) `perm:"read"` + StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch, p4 bool) (*apitypes.MsgLookup, error) `perm:"read"` + VerifyEntry func(p0 *types.BeaconEntry, p1 *types.BeaconEntry, p2 abi.ChainEpoch) bool `perm:"read"` + } +} + +func (s *IChainInfoStruct) BlockTime(p0 context.Context) time.Duration { + return s.Internal.BlockTime(p0) +} + +func (s *IChainInfoStruct) ChainExport(p0 context.Context, p1 abi.ChainEpoch, p2 bool, p3 types.TipSetKey) (<-chan []byte, error) { + return s.Internal.ChainExport(p0, p1, p2, p3) +} + +func (s *IChainInfoStruct) ChainGetBlock(p0 context.Context, p1 cid.Cid) (*types.BlockHeader, error) { + return s.Internal.ChainGetBlock(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetBlockMessages(p0 context.Context, p1 cid.Cid) (*apitypes.BlockMessages, error) { + return s.Internal.ChainGetBlockMessages(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetMessage(p0 context.Context, p1 cid.Cid) (*types.Message, error) { + return s.Internal.ChainGetMessage(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetMessagesInTipset(p0 context.Context, p1 types.TipSetKey) ([]apitypes.Message, error) { + return s.Internal.ChainGetMessagesInTipset(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetParentMessages(p0 context.Context, p1 cid.Cid) ([]apitypes.Message, error) { + return s.Internal.ChainGetParentMessages(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetParentReceipts(p0 context.Context, p1 cid.Cid) ([]*types.MessageReceipt, error) { + return s.Internal.ChainGetParentReceipts(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetPath(p0 context.Context, p1 types.TipSetKey, p2 types.TipSetKey) ([]*apitypes.HeadChange, error) { + return s.Internal.ChainGetPath(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainGetRandomnessFromBeacon(p0 context.Context, p1 types.TipSetKey, p2 acrypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) { + return s.Internal.ChainGetRandomnessFromBeacon(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) ChainGetRandomnessFromTickets(p0 context.Context, p1 types.TipSetKey, p2 acrypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) { + return s.Internal.ChainGetRandomnessFromTickets(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) ChainGetReceipts(p0 context.Context, p1 cid.Cid) ([]types.MessageReceipt, error) { + return s.Internal.ChainGetReceipts(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetTipSet(p0 context.Context, p1 types.TipSetKey) (*types.TipSet, error) { + return s.Internal.ChainGetTipSet(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetTipSetAfterHeight(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) (*types.TipSet, error) { + return s.Internal.ChainGetTipSetAfterHeight(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainGetTipSetByHeight(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) (*types.TipSet, error) { + return s.Internal.ChainGetTipSetByHeight(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainHead(p0 context.Context) (*types.TipSet, error) { + return s.Internal.ChainHead(p0) +} + +func (s *IChainInfoStruct) ChainList(p0 context.Context, p1 types.TipSetKey, p2 int) ([]types.TipSetKey, error) { + return s.Internal.ChainList(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainNotify(p0 context.Context) <-chan []*apitypes.HeadChange { + return s.Internal.ChainNotify(p0) +} + +func (s *IChainInfoStruct) ChainSetHead(p0 context.Context, p1 types.TipSetKey) error { + return s.Internal.ChainSetHead(p0, p1) +} + +func (s *IChainInfoStruct) GetActor(p0 context.Context, p1 address.Address) (*types.Actor, error) { + return s.Internal.GetActor(p0, p1) +} + +func (s *IChainInfoStruct) GetEntry(p0 context.Context, p1 abi.ChainEpoch, p2 uint64) (*types.BeaconEntry, error) { + return s.Internal.GetEntry(p0, p1, p2) +} + +func (s *IChainInfoStruct) GetFullBlock(p0 context.Context, p1 cid.Cid) (*types.FullBlock, error) { + return s.Internal.GetFullBlock(p0, p1) +} + +func (s *IChainInfoStruct) GetParentStateRootActor(p0 context.Context, p1 *types.TipSet, p2 address.Address) (*types.Actor, error) { + return s.Internal.GetParentStateRootActor(p0, p1, p2) +} + +func (s *IChainInfoStruct) MessageWait(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch, p3 abi.ChainEpoch) (*apitypes.ChainMessage, error) { + return s.Internal.MessageWait(p0, p1, p2, p3) +} + +func (s *IChainInfoStruct) ProtocolParameters(p0 context.Context) (*apitypes.ProtocolParams, error) { + return s.Internal.ProtocolParameters(p0) +} + +func (s *IChainInfoStruct) ResolveToKeyAddr(p0 context.Context, p1 address.Address, p2 *types.TipSet) (address.Address, error) { + return s.Internal.ResolveToKeyAddr(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateGetRandomnessFromBeacon(p0 context.Context, p1 acrypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) { + return s.Internal.StateGetRandomnessFromBeacon(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) StateGetRandomnessFromTickets(p0 context.Context, p1 acrypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 types.TipSetKey) (abi.Randomness, error) { + return s.Internal.StateGetRandomnessFromTickets(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) StateNetworkName(p0 context.Context) (apitypes.NetworkName, error) { + return s.Internal.StateNetworkName(p0) +} + +func (s *IChainInfoStruct) StateNetworkVersion(p0 context.Context, p1 types.TipSetKey) (network.Version, error) { + return s.Internal.StateNetworkVersion(p0, p1) +} + +func (s *IChainInfoStruct) StateSearchMsg(p0 context.Context, p1 types.TipSetKey, p2 cid.Cid, p3 abi.ChainEpoch, p4 bool) (*apitypes.MsgLookup, error) { + return s.Internal.StateSearchMsg(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) StateVerifiedRegistryRootKey(p0 context.Context, p1 types.TipSetKey) (address.Address, error) { + return s.Internal.StateVerifiedRegistryRootKey(p0, p1) +} + +func (s *IChainInfoStruct) StateVerifierStatus(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) { + return s.Internal.StateVerifierStatus(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateWaitMsg(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch, p4 bool) (*apitypes.MsgLookup, error) { + return s.Internal.StateWaitMsg(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) VerifyEntry(p0 *types.BeaconEntry, p1 *types.BeaconEntry, p2 abi.ChainEpoch) bool { + return s.Internal.VerifyEntry(p0, p1, p2) +} + +type IConfigStruct struct { + Internal struct { + ConfigGet func(p0 context.Context, p1 string) (interface{}, error) `perm:"read"` + ConfigSet func(p0 context.Context, p1 string, p2 string) error `perm:"admin"` + } +} + +func (s *IConfigStruct) ConfigGet(p0 context.Context, p1 string) (interface{}, error) { + return s.Internal.ConfigGet(p0, p1) +} + +func (s *IConfigStruct) ConfigSet(p0 context.Context, p1 string, p2 string) error { + return s.Internal.ConfigSet(p0, p1, p2) +} + +type IDagServiceStruct struct { + Internal struct { + DAGCat func(p0 context.Context, p1 cid.Cid) (io.Reader, error) `perm:"read"` + DAGGetFileSize func(p0 context.Context, p1 cid.Cid) (uint64, error) `perm:"read"` + DAGGetNode func(p0 context.Context, p1 string) (interface{}, error) `perm:"read"` + DAGImportData func(p0 context.Context, p1 io.Reader) (ipld.Node, error) `perm:"write"` + } +} + +func (s *IDagServiceStruct) DAGCat(p0 context.Context, p1 cid.Cid) (io.Reader, error) { + return s.Internal.DAGCat(p0, p1) +} + +func (s *IDagServiceStruct) DAGGetFileSize(p0 context.Context, p1 cid.Cid) (uint64, error) { + return s.Internal.DAGGetFileSize(p0, p1) +} + +func (s *IDagServiceStruct) DAGGetNode(p0 context.Context, p1 string) (interface{}, error) { + return s.Internal.DAGGetNode(p0, p1) +} + +func (s *IDagServiceStruct) DAGImportData(p0 context.Context, p1 io.Reader) (ipld.Node, error) { + return s.Internal.DAGImportData(p0, p1) +} + +type IDiscoveryStruct struct { +} + +type IJwtAuthAPIStruct struct { + Internal struct { + AuthNew func(p0 context.Context, p1 []auth.Permission) ([]byte, error) `perm:"admin"` + Verify func(p0 context.Context, p1 string, p2 string) ([]auth.Permission, error) `perm:"read"` + } +} + +func (s *IJwtAuthAPIStruct) AuthNew(p0 context.Context, p1 []auth.Permission) ([]byte, error) { + return s.Internal.AuthNew(p0, p1) +} + +func (s *IJwtAuthAPIStruct) Verify(p0 context.Context, p1 string, p2 string) ([]auth.Permission, error) { + return s.Internal.Verify(p0, p1, p2) +} + +type IMarketStruct struct { + Internal struct { + StateMarketParticipants func(p0 context.Context, p1 types.TipSetKey) (map[string]apitypes.MarketBalance, error) `perm:"read"` + } +} + +func (s *IMarketStruct) StateMarketParticipants(p0 context.Context, p1 types.TipSetKey) (map[string]apitypes.MarketBalance, error) { + return s.Internal.StateMarketParticipants(p0, p1) +} + +type IMessagePoolStruct struct { + Internal struct { + GasBatchEstimateMessageGas func(p0 context.Context, p1 []*apitypes.EstimateMessage, p2 uint64, p3 types.TipSetKey) ([]*apitypes.EstimateResult, error) `perm:"read"` + GasEstimateFeeCap func(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (big.Int, error) `perm:"read"` + GasEstimateGasLimit func(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (int64, error) `perm:"read"` + GasEstimateGasPremium func(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 types.TipSetKey) (big.Int, error) `perm:"read"` + GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *apitypes.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) `perm:"read"` + MpoolBatchPush func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"` + MpoolBatchPushMessage func(p0 context.Context, p1 []*types.Message, p2 *apitypes.MessageSendSpec) ([]*types.SignedMessage, error) `perm:"sign"` + MpoolBatchPushUntrusted func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"` + MpoolCheckMessages func(p0 context.Context, p1 []*messagepool.MessagePrototype) ([][]messagepool.MessageCheckStatus, error) `perm:"read"` + MpoolCheckPendingMessages func(p0 context.Context, p1 address.Address) ([][]messagepool.MessageCheckStatus, error) `perm:"read"` + MpoolCheckReplaceMessages func(p0 context.Context, p1 []*types.Message) ([][]messagepool.MessageCheckStatus, error) `perm:"read"` + MpoolClear func(p0 context.Context, p1 bool) error `perm:"write"` + MpoolDeleteByAdress func(p0 context.Context, p1 address.Address) error `perm:"admin"` + MpoolGetConfig func(p0 context.Context) (*messagepool.MpoolConfig, error) `perm:"read"` + MpoolGetNonce func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"read"` + MpoolPending func(p0 context.Context, p1 types.TipSetKey) ([]*types.SignedMessage, error) `perm:"read"` + MpoolPublishByAddr func(p0 context.Context, p1 address.Address) error `perm:"write"` + MpoolPublishMessage func(p0 context.Context, p1 *types.SignedMessage) error `perm:"write"` + MpoolPush func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) `perm:"write"` + MpoolPushMessage func(p0 context.Context, p1 *types.Message, p2 *apitypes.MessageSendSpec) (*types.SignedMessage, error) `perm:"sign"` + MpoolPushUntrusted func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) `perm:"write"` + MpoolSelect func(p0 context.Context, p1 types.TipSetKey, p2 float64) ([]*types.SignedMessage, error) `perm:"read"` + MpoolSelects func(p0 context.Context, p1 types.TipSetKey, p2 []float64) ([][]*types.SignedMessage, error) `perm:"read"` + MpoolSetConfig func(p0 context.Context, p1 *messagepool.MpoolConfig) error `perm:"admin"` + MpoolSub func(p0 context.Context) (<-chan messagepool.MpoolUpdate, error) `perm:"read"` + } +} + +func (s *IMessagePoolStruct) GasBatchEstimateMessageGas(p0 context.Context, p1 []*apitypes.EstimateMessage, p2 uint64, p3 types.TipSetKey) ([]*apitypes.EstimateResult, error) { + return s.Internal.GasBatchEstimateMessageGas(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) GasEstimateFeeCap(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (big.Int, error) { + return s.Internal.GasEstimateFeeCap(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) GasEstimateGasLimit(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (int64, error) { + return s.Internal.GasEstimateGasLimit(p0, p1, p2) +} + +func (s *IMessagePoolStruct) GasEstimateGasPremium(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 types.TipSetKey) (big.Int, error) { + return s.Internal.GasEstimateGasPremium(p0, p1, p2, p3, p4) +} + +func (s *IMessagePoolStruct) GasEstimateMessageGas(p0 context.Context, p1 *types.Message, p2 *apitypes.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) { + return s.Internal.GasEstimateMessageGas(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) MpoolBatchPush(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) { + return s.Internal.MpoolBatchPush(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolBatchPushMessage(p0 context.Context, p1 []*types.Message, p2 *apitypes.MessageSendSpec) ([]*types.SignedMessage, error) { + return s.Internal.MpoolBatchPushMessage(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolBatchPushUntrusted(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) { + return s.Internal.MpoolBatchPushUntrusted(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolCheckMessages(p0 context.Context, p1 []*messagepool.MessagePrototype) ([][]messagepool.MessageCheckStatus, error) { + return s.Internal.MpoolCheckMessages(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolCheckPendingMessages(p0 context.Context, p1 address.Address) ([][]messagepool.MessageCheckStatus, error) { + return s.Internal.MpoolCheckPendingMessages(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolCheckReplaceMessages(p0 context.Context, p1 []*types.Message) ([][]messagepool.MessageCheckStatus, error) { + return s.Internal.MpoolCheckReplaceMessages(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolClear(p0 context.Context, p1 bool) error { + return s.Internal.MpoolClear(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolDeleteByAdress(p0 context.Context, p1 address.Address) error { + return s.Internal.MpoolDeleteByAdress(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolGetConfig(p0 context.Context) (*messagepool.MpoolConfig, error) { + return s.Internal.MpoolGetConfig(p0) +} + +func (s *IMessagePoolStruct) MpoolGetNonce(p0 context.Context, p1 address.Address) (uint64, error) { + return s.Internal.MpoolGetNonce(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPending(p0 context.Context, p1 types.TipSetKey) ([]*types.SignedMessage, error) { + return s.Internal.MpoolPending(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPublishByAddr(p0 context.Context, p1 address.Address) error { + return s.Internal.MpoolPublishByAddr(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPublishMessage(p0 context.Context, p1 *types.SignedMessage) error { + return s.Internal.MpoolPublishMessage(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPush(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) { + return s.Internal.MpoolPush(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPushMessage(p0 context.Context, p1 *types.Message, p2 *apitypes.MessageSendSpec) (*types.SignedMessage, error) { + return s.Internal.MpoolPushMessage(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolPushUntrusted(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) { + return s.Internal.MpoolPushUntrusted(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolSelect(p0 context.Context, p1 types.TipSetKey, p2 float64) ([]*types.SignedMessage, error) { + return s.Internal.MpoolSelect(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolSelects(p0 context.Context, p1 types.TipSetKey, p2 []float64) ([][]*types.SignedMessage, error) { + return s.Internal.MpoolSelects(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolSetConfig(p0 context.Context, p1 *messagepool.MpoolConfig) error { + return s.Internal.MpoolSetConfig(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolSub(p0 context.Context) (<-chan messagepool.MpoolUpdate, error) { + return s.Internal.MpoolSub(p0) +} + +type IMinerStateStruct struct { + Internal struct { + StateCirculatingSupply func(p0 context.Context, p1 types.TipSetKey) (abi.TokenAmount, error) `perm:"read"` + StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (apitypes.DealCollateralBounds, error) `perm:"read"` + StateListActors func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) `perm:"read"` + StateListMiners func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) `perm:"read"` + StateLookupID func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"` + StateMarketBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (apitypes.MarketBalance, error) `perm:"read"` + StateMarketDeals func(p0 context.Context, p1 types.TipSetKey) (map[string]apitypes.MarketDeal, error) `perm:"read"` + StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*apitypes.MarketDeal, error) `perm:"read"` + StateMinerActiveSectors func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"` + StateMinerAvailableBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (big.Int, error) `perm:"read"` + StateMinerDeadlines func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]apitypes.Deadline, error) `perm:"read"` + StateMinerFaults func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) `perm:"read"` + StateMinerInfo func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (miner.MinerInfo, error) `perm:"read"` + StateMinerInitialPledgeCollateral func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (big.Int, error) `perm:"read"` + StateMinerPartitions func(p0 context.Context, p1 address.Address, p2 uint64, p3 types.TipSetKey) ([]apitypes.Partition, error) `perm:"read"` + StateMinerPower func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*apitypes.MinerPower, error) `perm:"read"` + StateMinerPreCommitDepositForPower func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (big.Int, error) `perm:"read"` + StateMinerProvingDeadline func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*dline.Info, error) `perm:"read"` + StateMinerRecoveries func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) `perm:"read"` + StateMinerSectorAllocated func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (bool, error) `perm:"read"` + StateMinerSectorCount func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (apitypes.MinerSectors, error) `perm:"read"` + StateMinerSectorSize func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (abi.SectorSize, error) `perm:"read"` + StateMinerSectors func(p0 context.Context, p1 address.Address, p2 *bitfield.BitField, p3 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"` + StateMinerWorkerAddress func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"` + StateSectorExpiration func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorExpiration, error) `perm:"read"` + StateSectorGetInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorOnChainInfo, error) `perm:"read"` + StateSectorPartition func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorLocation, error) `perm:"read"` + StateSectorPreCommitInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) `perm:"read"` + StateVMCirculatingSupplyInternal func(p0 context.Context, p1 types.TipSetKey) (types.CirculatingSupply, error) `perm:"read"` + StateVerifiedClientStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) `perm:"read"` + } +} + +func (s *IMinerStateStruct) StateCirculatingSupply(p0 context.Context, p1 types.TipSetKey) (abi.TokenAmount, error) { + return s.Internal.StateCirculatingSupply(p0, p1) +} + +func (s *IMinerStateStruct) StateDealProviderCollateralBounds(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (apitypes.DealCollateralBounds, error) { + return s.Internal.StateDealProviderCollateralBounds(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateListActors(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) { + return s.Internal.StateListActors(p0, p1) +} + +func (s *IMinerStateStruct) StateListMiners(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) { + return s.Internal.StateListMiners(p0, p1) +} + +func (s *IMinerStateStruct) StateLookupID(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) { + return s.Internal.StateLookupID(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMarketBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (apitypes.MarketBalance, error) { + return s.Internal.StateMarketBalance(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMarketDeals(p0 context.Context, p1 types.TipSetKey) (map[string]apitypes.MarketDeal, error) { + return s.Internal.StateMarketDeals(p0, p1) +} + +func (s *IMinerStateStruct) StateMarketStorageDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*apitypes.MarketDeal, error) { + return s.Internal.StateMarketStorageDeal(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerActiveSectors(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) { + return s.Internal.StateMinerActiveSectors(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerAvailableBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerAvailableBalance(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerDeadlines(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]apitypes.Deadline, error) { + return s.Internal.StateMinerDeadlines(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerFaults(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) { + return s.Internal.StateMinerFaults(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerInfo(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (miner.MinerInfo, error) { + return s.Internal.StateMinerInfo(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerInitialPledgeCollateral(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerInitialPledgeCollateral(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerPartitions(p0 context.Context, p1 address.Address, p2 uint64, p3 types.TipSetKey) ([]apitypes.Partition, error) { + return s.Internal.StateMinerPartitions(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerPower(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*apitypes.MinerPower, error) { + return s.Internal.StateMinerPower(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerPreCommitDepositForPower(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerPreCommitDepositForPower(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerProvingDeadline(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*dline.Info, error) { + return s.Internal.StateMinerProvingDeadline(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerRecoveries(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) { + return s.Internal.StateMinerRecoveries(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectorAllocated(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (bool, error) { + return s.Internal.StateMinerSectorAllocated(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerSectorCount(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (apitypes.MinerSectors, error) { + return s.Internal.StateMinerSectorCount(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectorSize(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (abi.SectorSize, error) { + return s.Internal.StateMinerSectorSize(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectors(p0 context.Context, p1 address.Address, p2 *bitfield.BitField, p3 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) { + return s.Internal.StateMinerSectors(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerWorkerAddress(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) { + return s.Internal.StateMinerWorkerAddress(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateSectorExpiration(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorExpiration, error) { + return s.Internal.StateSectorExpiration(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorGetInfo(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorOnChainInfo, error) { + return s.Internal.StateSectorGetInfo(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorPartition(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorLocation, error) { + return s.Internal.StateSectorPartition(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorPreCommitInfo(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) { + return s.Internal.StateSectorPreCommitInfo(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateVMCirculatingSupplyInternal(p0 context.Context, p1 types.TipSetKey) (types.CirculatingSupply, error) { + return s.Internal.StateVMCirculatingSupplyInternal(p0, p1) +} + +func (s *IMinerStateStruct) StateVerifiedClientStatus(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) { + return s.Internal.StateVerifiedClientStatus(p0, p1, p2) +} + +type IMiningStruct struct { + Internal struct { + MinerCreateBlock func(p0 context.Context, p1 *apitypes.BlockTemplate) (*types.BlockMsg, error) `perm:"write"` + MinerGetBaseInfo func(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*apitypes.MiningBaseInfo, error) `perm:"read"` + } +} + +func (s *IMiningStruct) MinerCreateBlock(p0 context.Context, p1 *apitypes.BlockTemplate) (*types.BlockMsg, error) { + return s.Internal.MinerCreateBlock(p0, p1) +} + +func (s *IMiningStruct) MinerGetBaseInfo(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*apitypes.MiningBaseInfo, error) { + return s.Internal.MinerGetBaseInfo(p0, p1, p2, p3) +} + +type IMultiSigStruct struct { + Internal struct { + MsigAddApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (*messagepool.MessagePrototype, error) `perm:"sign"` + MsigAddCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (*messagepool.MessagePrototype, error) `perm:"sign"` + MsigAddPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (*messagepool.MessagePrototype, error) `perm:"sign"` + MsigApprove func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (*messagepool.MessagePrototype, error) `perm:"sign"` + MsigApproveTxnHash func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 types.BigInt, p6 address.Address, p7 uint64, p8 []byte) (*messagepool.MessagePrototype, error) `perm:"sign"` + MsigCancel func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 types.BigInt, p5 address.Address, p6 uint64, p7 []byte) (*messagepool.MessagePrototype, error) `perm:"sign"` + MsigCreate func(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 types.BigInt, p5 address.Address, p6 types.BigInt) (*messagepool.MessagePrototype, error) `perm:"sign"` + MsigGetVested func(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"` + MsigPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt, p4 address.Address, p5 uint64, p6 []byte) (*messagepool.MessagePrototype, error) `perm:"sign"` + MsigRemoveSigner func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (*messagepool.MessagePrototype, error) `perm:"sign"` + MsigSwapApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (*messagepool.MessagePrototype, error) `perm:"sign"` + MsigSwapCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (*messagepool.MessagePrototype, error) `perm:"sign"` + MsigSwapPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (*messagepool.MessagePrototype, error) `perm:"sign"` + } +} + +func (s *IMultiSigStruct) MsigAddApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigAddApprove(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigAddCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigAddCancel(p0, p1, p2, p3, p4, p5) +} + +func (s *IMultiSigStruct) MsigAddPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigAddPropose(p0, p1, p2, p3, p4) +} + +func (s *IMultiSigStruct) MsigApprove(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigApprove(p0, p1, p2, p3) +} + +func (s *IMultiSigStruct) MsigApproveTxnHash(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 types.BigInt, p6 address.Address, p7 uint64, p8 []byte) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigApproveTxnHash(p0, p1, p2, p3, p4, p5, p6, p7, p8) +} + +func (s *IMultiSigStruct) MsigCancel(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 types.BigInt, p5 address.Address, p6 uint64, p7 []byte) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigCancel(p0, p1, p2, p3, p4, p5, p6, p7) +} + +func (s *IMultiSigStruct) MsigCreate(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 types.BigInt, p5 address.Address, p6 types.BigInt) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigCreate(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigGetVested(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) { + return s.Internal.MsigGetVested(p0, p1, p2, p3) +} + +func (s *IMultiSigStruct) MsigPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt, p4 address.Address, p5 uint64, p6 []byte) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigPropose(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigRemoveSigner(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigRemoveSigner(p0, p1, p2, p3, p4) +} + +func (s *IMultiSigStruct) MsigSwapApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigSwapApprove(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigSwapCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigSwapCancel(p0, p1, p2, p3, p4, p5) +} + +func (s *IMultiSigStruct) MsigSwapPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigSwapPropose(p0, p1, p2, p3, p4) +} + +type INetworkStruct struct { + Internal struct { + NetAddrsListen func(p0 context.Context) (peer.AddrInfo, error) `perm:"read"` + NetworkConnect func(p0 context.Context, p1 []string) (<-chan net.ConnectionResult, error) `perm:"read"` + NetworkFindPeer func(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) `perm:"read"` + NetworkFindProvidersAsync func(p0 context.Context, p1 cid.Cid, p2 int) <-chan peer.AddrInfo `perm:"read"` + NetworkGetBandwidthStats func(p0 context.Context) metrics.Stats `perm:"admin"` + NetworkGetClosestPeers func(p0 context.Context, p1 string) (<-chan peer.ID, error) `perm:"read"` + NetworkGetPeerAddresses func(p0 context.Context) []ma.Multiaddr `perm:"admin"` + NetworkGetPeerID func(p0 context.Context) peer.ID `perm:"admin"` + NetworkPeers func(p0 context.Context, p1 bool, p2 bool, p3 bool) (*net.SwarmConnInfos, error) `perm:"read"` + Version func(p0 context.Context) (apitypes.Version, error) `perm:"read"` + } +} + +func (s *INetworkStruct) NetAddrsListen(p0 context.Context) (peer.AddrInfo, error) { + return s.Internal.NetAddrsListen(p0) +} + +func (s *INetworkStruct) NetworkConnect(p0 context.Context, p1 []string) (<-chan net.ConnectionResult, error) { + return s.Internal.NetworkConnect(p0, p1) +} + +func (s *INetworkStruct) NetworkFindPeer(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) { + return s.Internal.NetworkFindPeer(p0, p1) +} + +func (s *INetworkStruct) NetworkFindProvidersAsync(p0 context.Context, p1 cid.Cid, p2 int) <-chan peer.AddrInfo { + return s.Internal.NetworkFindProvidersAsync(p0, p1, p2) +} + +func (s *INetworkStruct) NetworkGetBandwidthStats(p0 context.Context) metrics.Stats { + return s.Internal.NetworkGetBandwidthStats(p0) +} + +func (s *INetworkStruct) NetworkGetClosestPeers(p0 context.Context, p1 string) (<-chan peer.ID, error) { + return s.Internal.NetworkGetClosestPeers(p0, p1) +} + +func (s *INetworkStruct) NetworkGetPeerAddresses(p0 context.Context) []ma.Multiaddr { + return s.Internal.NetworkGetPeerAddresses(p0) +} + +func (s *INetworkStruct) NetworkGetPeerID(p0 context.Context) peer.ID { + return s.Internal.NetworkGetPeerID(p0) +} + +func (s *INetworkStruct) NetworkPeers(p0 context.Context, p1 bool, p2 bool, p3 bool) (*net.SwarmConnInfos, error) { + return s.Internal.NetworkPeers(p0, p1, p2, p3) +} + +func (s *INetworkStruct) Version(p0 context.Context) (apitypes.Version, error) { + return s.Internal.Version(p0) +} + +type IPaychanStruct struct { + Internal struct { + PaychAllocateLane func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"sign"` + PaychAvailableFunds func(p0 context.Context, p1 address.Address) (*apitypes.ChannelAvailableFunds, error) `perm:"sign"` + PaychAvailableFundsByFromTo func(p0 context.Context, p1 address.Address, p2 address.Address) (*apitypes.ChannelAvailableFunds, error) `perm:"sign"` + PaychCollect func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"` + PaychGet func(p0 context.Context, p1 address.Address, p2 address.Address, p3 big.Int) (*paychtypes.ChannelInfo, error) `perm:"sign"` + PaychGetWaitReady func(p0 context.Context, p1 cid.Cid) (address.Address, error) `perm:"sign"` + PaychList func(p0 context.Context) ([]address.Address, error) `perm:"read"` + PaychNewPayment func(p0 context.Context, p1 address.Address, p2 address.Address, p3 []paychtypes.VoucherSpec) (*paychtypes.PaymentInfo, error) `perm:"sign"` + PaychSettle func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"` + PaychStatus func(p0 context.Context, p1 address.Address) (*paychtypes.Status, error) `perm:"read"` + PaychVoucherAdd func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 big.Int) (big.Int, error) `perm:"write"` + PaychVoucherCheckSpendable func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (bool, error) `perm:"read"` + PaychVoucherCheckValid func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher) error `perm:"read"` + PaychVoucherCreate func(p0 context.Context, p1 address.Address, p2 big.Int, p3 uint64) (*paychtypes.VoucherCreateResult, error) `perm:"sign"` + PaychVoucherList func(p0 context.Context, p1 address.Address) ([]*paych.SignedVoucher, error) `perm:"write"` + PaychVoucherSubmit func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) `perm:"sign"` + } +} + +func (s *IPaychanStruct) PaychAllocateLane(p0 context.Context, p1 address.Address) (uint64, error) { + return s.Internal.PaychAllocateLane(p0, p1) +} + +func (s *IPaychanStruct) PaychAvailableFunds(p0 context.Context, p1 address.Address) (*apitypes.ChannelAvailableFunds, error) { + return s.Internal.PaychAvailableFunds(p0, p1) +} + +func (s *IPaychanStruct) PaychAvailableFundsByFromTo(p0 context.Context, p1 address.Address, p2 address.Address) (*apitypes.ChannelAvailableFunds, error) { + return s.Internal.PaychAvailableFundsByFromTo(p0, p1, p2) +} + +func (s *IPaychanStruct) PaychCollect(p0 context.Context, p1 address.Address) (cid.Cid, error) { + return s.Internal.PaychCollect(p0, p1) +} + +func (s *IPaychanStruct) PaychGet(p0 context.Context, p1 address.Address, p2 address.Address, p3 big.Int) (*paychtypes.ChannelInfo, error) { + return s.Internal.PaychGet(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychGetWaitReady(p0 context.Context, p1 cid.Cid) (address.Address, error) { + return s.Internal.PaychGetWaitReady(p0, p1) +} + +func (s *IPaychanStruct) PaychList(p0 context.Context) ([]address.Address, error) { + return s.Internal.PaychList(p0) +} + +func (s *IPaychanStruct) PaychNewPayment(p0 context.Context, p1 address.Address, p2 address.Address, p3 []paychtypes.VoucherSpec) (*paychtypes.PaymentInfo, error) { + return s.Internal.PaychNewPayment(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychSettle(p0 context.Context, p1 address.Address) (cid.Cid, error) { + return s.Internal.PaychSettle(p0, p1) +} + +func (s *IPaychanStruct) PaychStatus(p0 context.Context, p1 address.Address) (*paychtypes.Status, error) { + return s.Internal.PaychStatus(p0, p1) +} + +func (s *IPaychanStruct) PaychVoucherAdd(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 big.Int) (big.Int, error) { + return s.Internal.PaychVoucherAdd(p0, p1, p2, p3, p4) +} + +func (s *IPaychanStruct) PaychVoucherCheckSpendable(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (bool, error) { + return s.Internal.PaychVoucherCheckSpendable(p0, p1, p2, p3, p4) +} + +func (s *IPaychanStruct) PaychVoucherCheckValid(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher) error { + return s.Internal.PaychVoucherCheckValid(p0, p1, p2) +} + +func (s *IPaychanStruct) PaychVoucherCreate(p0 context.Context, p1 address.Address, p2 big.Int, p3 uint64) (*paychtypes.VoucherCreateResult, error) { + return s.Internal.PaychVoucherCreate(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychVoucherList(p0 context.Context, p1 address.Address) ([]*paych.SignedVoucher, error) { + return s.Internal.PaychVoucherList(p0, p1) +} + +func (s *IPaychanStruct) PaychVoucherSubmit(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) { + return s.Internal.PaychVoucherSubmit(p0, p1, p2, p3, p4) +} + +type ISyncerStruct struct { + Internal struct { + ChainSyncHandleNewTipSet func(p0 context.Context, p1 *types.ChainInfo) error `perm:"write"` + ChainTipSetWeight func(p0 context.Context, p1 types.TipSetKey) (big.Int, error) `perm:"read"` + Concurrent func(p0 context.Context) int64 `perm:"read"` + SetConcurrent func(p0 context.Context, p1 int64) error `perm:"admin"` + StateCall func(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*apitypes.InvocResult, error) `perm:"read"` + SyncState func(p0 context.Context) (*apitypes.SyncState, error) `perm:"read"` + SyncSubmitBlock func(p0 context.Context, p1 *types.BlockMsg) error `perm:"write"` + SyncerTracker func(p0 context.Context) *syncTypes.TargetTracker `perm:"read"` + } +} + +func (s *ISyncerStruct) ChainSyncHandleNewTipSet(p0 context.Context, p1 *types.ChainInfo) error { + return s.Internal.ChainSyncHandleNewTipSet(p0, p1) +} + +func (s *ISyncerStruct) ChainTipSetWeight(p0 context.Context, p1 types.TipSetKey) (big.Int, error) { + return s.Internal.ChainTipSetWeight(p0, p1) +} + +func (s *ISyncerStruct) Concurrent(p0 context.Context) int64 { + return s.Internal.Concurrent(p0) +} + +func (s *ISyncerStruct) SetConcurrent(p0 context.Context, p1 int64) error { + return s.Internal.SetConcurrent(p0, p1) +} + +func (s *ISyncerStruct) StateCall(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*apitypes.InvocResult, error) { + return s.Internal.StateCall(p0, p1, p2) +} + +func (s *ISyncerStruct) SyncState(p0 context.Context) (*apitypes.SyncState, error) { + return s.Internal.SyncState(p0) +} + +func (s *ISyncerStruct) SyncSubmitBlock(p0 context.Context, p1 *types.BlockMsg) error { + return s.Internal.SyncSubmitBlock(p0, p1) +} + +func (s *ISyncerStruct) SyncerTracker(p0 context.Context) *syncTypes.TargetTracker { + return s.Internal.SyncerTracker(p0) +} + +type IWalletStruct struct { + Internal struct { + HasPassword func(p0 context.Context) bool `perm:"admin"` + LockWallet func(p0 context.Context) error `perm:"admin"` + SetPassword func(p0 context.Context, p1 []byte) error `perm:"admin"` + UnLockWallet func(p0 context.Context, p1 []byte) error `perm:"admin"` + WalletAddresses func(p0 context.Context) []address.Address `perm:"admin"` + WalletBalance func(p0 context.Context, p1 address.Address) (abi.TokenAmount, error) `perm:"read"` + WalletDefaultAddress func(p0 context.Context) (address.Address, error) `perm:"write"` + WalletExport func(p0 address.Address, p1 string) (*crypto.KeyInfo, error) `perm:"admin"` + WalletHas func(p0 context.Context, p1 address.Address) (bool, error) `perm:"write"` + WalletImport func(p0 *crypto.KeyInfo) (address.Address, error) `perm:"admin"` + WalletNewAddress func(p0 address.Protocol) (address.Address, error) `perm:"write"` + WalletSetDefault func(p0 context.Context, p1 address.Address) error `perm:"write"` + WalletSign func(p0 context.Context, p1 address.Address, p2 []byte, p3 wallet.MsgMeta) (*crypto.Signature, error) `perm:"sign"` + WalletSignMessage func(p0 context.Context, p1 address.Address, p2 *types.Message) (*types.SignedMessage, error) `perm:"sign"` + WalletState func(p0 context.Context) int `perm:"admin"` + } +} + +func (s *IWalletStruct) HasPassword(p0 context.Context) bool { + return s.Internal.HasPassword(p0) +} + +func (s *IWalletStruct) LockWallet(p0 context.Context) error { + return s.Internal.LockWallet(p0) +} + +func (s *IWalletStruct) SetPassword(p0 context.Context, p1 []byte) error { + return s.Internal.SetPassword(p0, p1) +} + +func (s *IWalletStruct) UnLockWallet(p0 context.Context, p1 []byte) error { + return s.Internal.UnLockWallet(p0, p1) +} + +func (s *IWalletStruct) WalletAddresses(p0 context.Context) []address.Address { + return s.Internal.WalletAddresses(p0) +} + +func (s *IWalletStruct) WalletBalance(p0 context.Context, p1 address.Address) (abi.TokenAmount, error) { + return s.Internal.WalletBalance(p0, p1) +} + +func (s *IWalletStruct) WalletDefaultAddress(p0 context.Context) (address.Address, error) { + return s.Internal.WalletDefaultAddress(p0) +} + +func (s *IWalletStruct) WalletExport(p0 address.Address, p1 string) (*crypto.KeyInfo, error) { + return s.Internal.WalletExport(p0, p1) +} + +func (s *IWalletStruct) WalletHas(p0 context.Context, p1 address.Address) (bool, error) { + return s.Internal.WalletHas(p0, p1) +} + +func (s *IWalletStruct) WalletImport(p0 *crypto.KeyInfo) (address.Address, error) { + return s.Internal.WalletImport(p0) +} + +func (s *IWalletStruct) WalletNewAddress(p0 address.Protocol) (address.Address, error) { + return s.Internal.WalletNewAddress(p0) +} + +func (s *IWalletStruct) WalletSetDefault(p0 context.Context, p1 address.Address) error { + return s.Internal.WalletSetDefault(p0, p1) +} + +func (s *IWalletStruct) WalletSign(p0 context.Context, p1 address.Address, p2 []byte, p3 wallet.MsgMeta) (*crypto.Signature, error) { + return s.Internal.WalletSign(p0, p1, p2, p3) +} + +func (s *IWalletStruct) WalletSignMessage(p0 context.Context, p1 address.Address, p2 *types.Message) (*types.SignedMessage, error) { + return s.Internal.WalletSignMessage(p0, p1, p2) +} + +func (s *IWalletStruct) WalletState(p0 context.Context) int { + return s.Internal.WalletState(p0) +} diff --git a/app/client/funcrule/permissioned.go b/app/client/funcrule/permissioned.go new file mode 100644 index 0000000000..96e700b3b4 --- /dev/null +++ b/app/client/funcrule/permissioned.go @@ -0,0 +1,78 @@ +package funcrule + +import ( + "context" + "reflect" + + "github.com/filecoin-project/venus/pkg/util/proxy" + + "github.com/filecoin-project/go-jsonrpc/auth" + "golang.org/x/xerrors" +) + +type MethodName = string + +// Rule [perm:admin,ignore:true] +// Used by Client to generate rule comments +type Rule struct { + Perm auth.Permission + Ignore bool +} + +var AllPermissions = []auth.Permission{"read", "write", "sign", "admin"} +var defaultPerms = []auth.Permission{"read"} + +func defaultRule() *Rule { + return &Rule{ + Perm: "read", + } +} + +// permissionVerify the scheduler between API and internal business +func PermissionProxy(in interface{}, out interface{}) { + ra := reflect.ValueOf(in) + outs := proxy.GetInternalStructs(out) + for _, out := range outs { + rint := reflect.ValueOf(out).Elem() + for i := 0; i < ra.NumMethod(); i++ { + methodName := ra.Type().Method(i).Name + field, exists := rint.Type().FieldByName(methodName) + if !exists { + // log.Printf("exclude method %s from fullNode", methodName) + continue + } + + requiredPerm := field.Tag.Get("perm") + if requiredPerm == "" { + panic("missing 'perm' tag on " + field.Name) // ok + } + curule := defaultRule() + curule.Perm = requiredPerm + + fn := ra.Method(i) + rint.FieldByName(methodName).Set(reflect.MakeFunc(field.Type, func(args []reflect.Value) (results []reflect.Value) { + ctx := args[0].Interface().(context.Context) + errNum := 0 + if !auth.HasPerm(ctx, defaultPerms, curule.Perm) { + errNum++ + goto ABORT + } + return fn.Call(args) + ABORT: + err := xerrors.Errorf("missing permission to invoke '%s'", methodName) + if errNum&1 == 1 { + err = xerrors.Errorf("%s (need '%s')", err, curule.Perm) + } + rerr := reflect.ValueOf(&err).Elem() + if fn.Type().NumOut() == 2 { + return []reflect.Value{ + reflect.Zero(fn.Type().Out(0)), + rerr, + } + } + return []reflect.Value{rerr} + })) + } + } + +} diff --git a/app/client/node.go b/app/client/node.go new file mode 100644 index 0000000000..94169428ff --- /dev/null +++ b/app/client/node.go @@ -0,0 +1,56 @@ +package client + +import ( + "context" + "github.com/ipfs-force-community/venus-common-utils/apiinfo" + "io/ioutil" + "net/http" + "path" + + "github.com/filecoin-project/go-jsonrpc" + "github.com/filecoin-project/venus/app/paths" +) + +func getVenusClientInfo(version string) (string, http.Header, error) { + repoPath, err := paths.GetRepoPath("") + if err != nil { + return "", nil, err + } + + tokePath := path.Join(repoPath, "token") + rpcPath := path.Join(repoPath, "api") + + tokenBytes, err := ioutil.ReadFile(tokePath) + if err != nil { + return "", nil, err + } + rpcBytes, err := ioutil.ReadFile(rpcPath) + if err != nil { + return "", nil, err + } + + apiInfo := apiinfo.NewAPIInfo(string(rpcBytes), string(tokenBytes)) + addr, err := apiInfo.DialArgs("v0") + if err != nil { + return "", nil, err + } + return addr, apiInfo.AuthHeader(), nil +} + +//NewFullNode It is used to construct a full node access client. +//The API can be obtained from ~ /. Venus / API file, read from ~ /. Venus / token in local JWT mode, +//and obtained from Venus auth service in central authorization mode. +func GetFullNodeAPI(ctx context.Context, version string) (FullNodeStruct, jsonrpc.ClientCloser, error) { + addr, headers, err := getVenusClientInfo(version) + if err != nil { + return FullNodeStruct{}, nil, err + } + + node := FullNodeStruct{} + closer, err := jsonrpc.NewClient(ctx, addr, "Filecoin", &node, headers) + if err != nil { + return FullNodeStruct{}, nil, err + } + + return node, closer, nil +} diff --git a/app/client/v0api/full.go b/app/client/v0api/full.go new file mode 100644 index 0000000000..a879cf51aa --- /dev/null +++ b/app/client/v0api/full.go @@ -0,0 +1,985 @@ +// Code generated by github.com/filecoin-project/tools/gen/api. DO NOT EDIT. + +package v0api + +import ( + "context" + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-jsonrpc/auth" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + acrypto "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/dline" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/specs-actors/actors/builtin/paych" + syncTypes "github.com/filecoin-project/venus/pkg/chainsync/types" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p/net" + "github.com/filecoin-project/venus/venus-shared/messagepool" + paychtypes "github.com/filecoin-project/venus/venus-shared/paych" + "github.com/filecoin-project/venus/venus-shared/wallet" + "github.com/ipfs/go-cid" + ipld "github.com/ipfs/go-ipld-format" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" + "io" + "time" +) + +type FullNodeStruct struct { + IDagServiceStruct + IBlockStoreStruct + IChainStruct + IConfigStruct + IDiscoveryStruct + IMarketStruct + IMiningStruct + IMessagePoolStruct + IMultiSigStruct + INetworkStruct + IPaychanStruct + ISyncerStruct + IWalletStruct + IJwtAuthAPIStruct +} + +type IAccountStruct struct { + Internal struct { + StateAccountKey func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"` + } +} + +func (s *IAccountStruct) StateAccountKey(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) { + return s.Internal.StateAccountKey(p0, p1, p2) +} + +type IActorStruct struct { + Internal struct { + ListActor func(p0 context.Context) (map[address.Address]*types.Actor, error) `perm:"read"` + StateGetActor func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) `perm:"read"` + } +} + +func (s *IActorStruct) ListActor(p0 context.Context) (map[address.Address]*types.Actor, error) { + return s.Internal.ListActor(p0) +} + +func (s *IActorStruct) StateGetActor(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*types.Actor, error) { + return s.Internal.StateGetActor(p0, p1, p2) +} + +type IBeaconStruct struct { + Internal struct { + BeaconGetEntry func(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) `perm:"read"` + } +} + +func (s *IBeaconStruct) BeaconGetEntry(p0 context.Context, p1 abi.ChainEpoch) (*types.BeaconEntry, error) { + return s.Internal.BeaconGetEntry(p0, p1) +} + +type IBlockStoreStruct struct { + Internal struct { + ChainDeleteObj func(p0 context.Context, p1 cid.Cid) error `perm:"admin"` + ChainHasObj func(p0 context.Context, p1 cid.Cid) (bool, error) `perm:"read"` + ChainReadObj func(p0 context.Context, p1 cid.Cid) ([]byte, error) `perm:"read"` + ChainStatObj func(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (apitypes.ObjStat, error) `perm:"read"` + } +} + +func (s *IBlockStoreStruct) ChainDeleteObj(p0 context.Context, p1 cid.Cid) error { + return s.Internal.ChainDeleteObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainHasObj(p0 context.Context, p1 cid.Cid) (bool, error) { + return s.Internal.ChainHasObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainReadObj(p0 context.Context, p1 cid.Cid) ([]byte, error) { + return s.Internal.ChainReadObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainStatObj(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (apitypes.ObjStat, error) { + return s.Internal.ChainStatObj(p0, p1, p2) +} + +type IChainStruct struct { + IAccountStruct + IActorStruct + IBeaconStruct + IMinerStateStruct + IChainInfoStruct +} + +type IChainInfoStruct struct { + Internal struct { + BlockTime func(p0 context.Context) time.Duration `perm:"read"` + ChainExport func(p0 context.Context, p1 abi.ChainEpoch, p2 bool, p3 types.TipSetKey) (<-chan []byte, error) `perm:"read"` + ChainGetBlock func(p0 context.Context, p1 cid.Cid) (*types.BlockHeader, error) `perm:"read"` + ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*apitypes.BlockMessages, error) `perm:"read"` + ChainGetMessage func(p0 context.Context, p1 cid.Cid) (*types.Message, error) `perm:"read"` + ChainGetMessagesInTipset func(p0 context.Context, p1 types.TipSetKey) ([]apitypes.Message, error) `perm:"read"` + ChainGetParentMessages func(p0 context.Context, p1 cid.Cid) ([]apitypes.Message, error) `perm:"read"` + ChainGetParentReceipts func(p0 context.Context, p1 cid.Cid) ([]*types.MessageReceipt, error) `perm:"read"` + ChainGetPath func(p0 context.Context, p1 types.TipSetKey, p2 types.TipSetKey) ([]*apitypes.HeadChange, error) `perm:"read"` + ChainGetRandomnessFromBeacon func(p0 context.Context, p1 types.TipSetKey, p2 acrypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"` + ChainGetRandomnessFromTickets func(p0 context.Context, p1 types.TipSetKey, p2 acrypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"` + ChainGetReceipts func(p0 context.Context, p1 cid.Cid) ([]types.MessageReceipt, error) `perm:"read"` + ChainGetTipSet func(p0 context.Context, p1 types.TipSetKey) (*types.TipSet, error) `perm:"read"` + ChainGetTipSetByHeight func(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) (*types.TipSet, error) `perm:"read"` + ChainHead func(p0 context.Context) (*types.TipSet, error) `perm:"read"` + ChainList func(p0 context.Context, p1 types.TipSetKey, p2 int) ([]types.TipSetKey, error) `perm:"read"` + ChainNotify func(p0 context.Context) <-chan []*apitypes.HeadChange `perm:"read"` + ChainSetHead func(p0 context.Context, p1 types.TipSetKey) error `perm:"admin"` + GetActor func(p0 context.Context, p1 address.Address) (*types.Actor, error) `perm:"read"` + GetEntry func(p0 context.Context, p1 abi.ChainEpoch, p2 uint64) (*types.BeaconEntry, error) `perm:"read"` + GetFullBlock func(p0 context.Context, p1 cid.Cid) (*types.FullBlock, error) `perm:"read"` + GetParentStateRootActor func(p0 context.Context, p1 *types.TipSet, p2 address.Address) (*types.Actor, error) `perm:"read"` + MessageWait func(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch, p3 abi.ChainEpoch) (*apitypes.ChainMessage, error) `perm:"read"` + ProtocolParameters func(p0 context.Context) (*apitypes.ProtocolParams, error) `perm:"read"` + ResolveToKeyAddr func(p0 context.Context, p1 address.Address, p2 *types.TipSet) (address.Address, error) `perm:"read"` + StateGetReceipt func(p0 context.Context, p1 cid.Cid, p2 types.TipSetKey) (*types.MessageReceipt, error) `perm:"read"` + StateNetworkName func(p0 context.Context) (apitypes.NetworkName, error) `perm:"read"` + StateNetworkVersion func(p0 context.Context, p1 types.TipSetKey) (network.Version, error) `perm:"read"` + StateSearchMsg func(p0 context.Context, p1 cid.Cid) (*apitypes.MsgLookup, error) `perm:"read"` + StateSearchMsgLimited func(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch) (*apitypes.MsgLookup, error) `perm:"read"` + StateVerifiedRegistryRootKey func(p0 context.Context, p1 types.TipSetKey) (address.Address, error) `perm:"read"` + StateVerifierStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) `perm:"read"` + StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64) (*apitypes.MsgLookup, error) `perm:"read"` + StateWaitMsgLimited func(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch) (*apitypes.MsgLookup, error) `perm:"read"` + VerifyEntry func(p0 *types.BeaconEntry, p1 *types.BeaconEntry, p2 abi.ChainEpoch) bool `perm:"read"` + } +} + +func (s *IChainInfoStruct) BlockTime(p0 context.Context) time.Duration { + return s.Internal.BlockTime(p0) +} + +func (s *IChainInfoStruct) ChainExport(p0 context.Context, p1 abi.ChainEpoch, p2 bool, p3 types.TipSetKey) (<-chan []byte, error) { + return s.Internal.ChainExport(p0, p1, p2, p3) +} + +func (s *IChainInfoStruct) ChainGetBlock(p0 context.Context, p1 cid.Cid) (*types.BlockHeader, error) { + return s.Internal.ChainGetBlock(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetBlockMessages(p0 context.Context, p1 cid.Cid) (*apitypes.BlockMessages, error) { + return s.Internal.ChainGetBlockMessages(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetMessage(p0 context.Context, p1 cid.Cid) (*types.Message, error) { + return s.Internal.ChainGetMessage(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetMessagesInTipset(p0 context.Context, p1 types.TipSetKey) ([]apitypes.Message, error) { + return s.Internal.ChainGetMessagesInTipset(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetParentMessages(p0 context.Context, p1 cid.Cid) ([]apitypes.Message, error) { + return s.Internal.ChainGetParentMessages(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetParentReceipts(p0 context.Context, p1 cid.Cid) ([]*types.MessageReceipt, error) { + return s.Internal.ChainGetParentReceipts(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetPath(p0 context.Context, p1 types.TipSetKey, p2 types.TipSetKey) ([]*apitypes.HeadChange, error) { + return s.Internal.ChainGetPath(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainGetRandomnessFromBeacon(p0 context.Context, p1 types.TipSetKey, p2 acrypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) { + return s.Internal.ChainGetRandomnessFromBeacon(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) ChainGetRandomnessFromTickets(p0 context.Context, p1 types.TipSetKey, p2 acrypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) { + return s.Internal.ChainGetRandomnessFromTickets(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) ChainGetReceipts(p0 context.Context, p1 cid.Cid) ([]types.MessageReceipt, error) { + return s.Internal.ChainGetReceipts(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetTipSet(p0 context.Context, p1 types.TipSetKey) (*types.TipSet, error) { + return s.Internal.ChainGetTipSet(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetTipSetByHeight(p0 context.Context, p1 abi.ChainEpoch, p2 types.TipSetKey) (*types.TipSet, error) { + return s.Internal.ChainGetTipSetByHeight(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainHead(p0 context.Context) (*types.TipSet, error) { + return s.Internal.ChainHead(p0) +} + +func (s *IChainInfoStruct) ChainList(p0 context.Context, p1 types.TipSetKey, p2 int) ([]types.TipSetKey, error) { + return s.Internal.ChainList(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainNotify(p0 context.Context) <-chan []*apitypes.HeadChange { + return s.Internal.ChainNotify(p0) +} + +func (s *IChainInfoStruct) ChainSetHead(p0 context.Context, p1 types.TipSetKey) error { + return s.Internal.ChainSetHead(p0, p1) +} + +func (s *IChainInfoStruct) GetActor(p0 context.Context, p1 address.Address) (*types.Actor, error) { + return s.Internal.GetActor(p0, p1) +} + +func (s *IChainInfoStruct) GetEntry(p0 context.Context, p1 abi.ChainEpoch, p2 uint64) (*types.BeaconEntry, error) { + return s.Internal.GetEntry(p0, p1, p2) +} + +func (s *IChainInfoStruct) GetFullBlock(p0 context.Context, p1 cid.Cid) (*types.FullBlock, error) { + return s.Internal.GetFullBlock(p0, p1) +} + +func (s *IChainInfoStruct) GetParentStateRootActor(p0 context.Context, p1 *types.TipSet, p2 address.Address) (*types.Actor, error) { + return s.Internal.GetParentStateRootActor(p0, p1, p2) +} + +func (s *IChainInfoStruct) MessageWait(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch, p3 abi.ChainEpoch) (*apitypes.ChainMessage, error) { + return s.Internal.MessageWait(p0, p1, p2, p3) +} + +func (s *IChainInfoStruct) ProtocolParameters(p0 context.Context) (*apitypes.ProtocolParams, error) { + return s.Internal.ProtocolParameters(p0) +} + +func (s *IChainInfoStruct) ResolveToKeyAddr(p0 context.Context, p1 address.Address, p2 *types.TipSet) (address.Address, error) { + return s.Internal.ResolveToKeyAddr(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateGetReceipt(p0 context.Context, p1 cid.Cid, p2 types.TipSetKey) (*types.MessageReceipt, error) { + return s.Internal.StateGetReceipt(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateNetworkName(p0 context.Context) (apitypes.NetworkName, error) { + return s.Internal.StateNetworkName(p0) +} + +func (s *IChainInfoStruct) StateNetworkVersion(p0 context.Context, p1 types.TipSetKey) (network.Version, error) { + return s.Internal.StateNetworkVersion(p0, p1) +} + +func (s *IChainInfoStruct) StateSearchMsg(p0 context.Context, p1 cid.Cid) (*apitypes.MsgLookup, error) { + return s.Internal.StateSearchMsg(p0, p1) +} + +func (s *IChainInfoStruct) StateSearchMsgLimited(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch) (*apitypes.MsgLookup, error) { + return s.Internal.StateSearchMsgLimited(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateVerifiedRegistryRootKey(p0 context.Context, p1 types.TipSetKey) (address.Address, error) { + return s.Internal.StateVerifiedRegistryRootKey(p0, p1) +} + +func (s *IChainInfoStruct) StateVerifierStatus(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) { + return s.Internal.StateVerifierStatus(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateWaitMsg(p0 context.Context, p1 cid.Cid, p2 uint64) (*apitypes.MsgLookup, error) { + return s.Internal.StateWaitMsg(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateWaitMsgLimited(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch) (*apitypes.MsgLookup, error) { + return s.Internal.StateWaitMsgLimited(p0, p1, p2, p3) +} + +func (s *IChainInfoStruct) VerifyEntry(p0 *types.BeaconEntry, p1 *types.BeaconEntry, p2 abi.ChainEpoch) bool { + return s.Internal.VerifyEntry(p0, p1, p2) +} + +type IConfigStruct struct { + Internal struct { + ConfigGet func(p0 context.Context, p1 string) (interface{}, error) `perm:"read"` + ConfigSet func(p0 context.Context, p1 string, p2 string) error `perm:"admin"` + } +} + +func (s *IConfigStruct) ConfigGet(p0 context.Context, p1 string) (interface{}, error) { + return s.Internal.ConfigGet(p0, p1) +} + +func (s *IConfigStruct) ConfigSet(p0 context.Context, p1 string, p2 string) error { + return s.Internal.ConfigSet(p0, p1, p2) +} + +type IDagServiceStruct struct { + Internal struct { + DAGCat func(p0 context.Context, p1 cid.Cid) (io.Reader, error) `perm:"read"` + DAGGetFileSize func(p0 context.Context, p1 cid.Cid) (uint64, error) `perm:"read"` + DAGGetNode func(p0 context.Context, p1 string) (interface{}, error) `perm:"read"` + DAGImportData func(p0 context.Context, p1 io.Reader) (ipld.Node, error) `perm:"write"` + } +} + +func (s *IDagServiceStruct) DAGCat(p0 context.Context, p1 cid.Cid) (io.Reader, error) { + return s.Internal.DAGCat(p0, p1) +} + +func (s *IDagServiceStruct) DAGGetFileSize(p0 context.Context, p1 cid.Cid) (uint64, error) { + return s.Internal.DAGGetFileSize(p0, p1) +} + +func (s *IDagServiceStruct) DAGGetNode(p0 context.Context, p1 string) (interface{}, error) { + return s.Internal.DAGGetNode(p0, p1) +} + +func (s *IDagServiceStruct) DAGImportData(p0 context.Context, p1 io.Reader) (ipld.Node, error) { + return s.Internal.DAGImportData(p0, p1) +} + +type IDiscoveryStruct struct { +} + +type IJwtAuthAPIStruct struct { + Internal struct { + AuthNew func(p0 context.Context, p1 []auth.Permission) ([]byte, error) `perm:"admin"` + Verify func(p0 context.Context, p1 string, p2 string) ([]auth.Permission, error) `perm:"read"` + } +} + +func (s *IJwtAuthAPIStruct) AuthNew(p0 context.Context, p1 []auth.Permission) ([]byte, error) { + return s.Internal.AuthNew(p0, p1) +} + +func (s *IJwtAuthAPIStruct) Verify(p0 context.Context, p1 string, p2 string) ([]auth.Permission, error) { + return s.Internal.Verify(p0, p1, p2) +} + +type IMarketStruct struct { + Internal struct { + StateMarketParticipants func(p0 context.Context, p1 types.TipSetKey) (map[string]apitypes.MarketBalance, error) `perm:"read"` + } +} + +func (s *IMarketStruct) StateMarketParticipants(p0 context.Context, p1 types.TipSetKey) (map[string]apitypes.MarketBalance, error) { + return s.Internal.StateMarketParticipants(p0, p1) +} + +type IMessagePoolStruct struct { + Internal struct { + GasBatchEstimateMessageGas func(p0 context.Context, p1 []*apitypes.EstimateMessage, p2 uint64, p3 types.TipSetKey) ([]*apitypes.EstimateResult, error) `perm:"read"` + GasEstimateFeeCap func(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (big.Int, error) `perm:"read"` + GasEstimateGasLimit func(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (int64, error) `perm:"read"` + GasEstimateGasPremium func(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 types.TipSetKey) (big.Int, error) `perm:"read"` + GasEstimateMessageGas func(p0 context.Context, p1 *types.Message, p2 *apitypes.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) `perm:"read"` + MpoolBatchPush func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"` + MpoolBatchPushMessage func(p0 context.Context, p1 []*types.Message, p2 *apitypes.MessageSendSpec) ([]*types.SignedMessage, error) `perm:"sign"` + MpoolBatchPushUntrusted func(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) `perm:"write"` + MpoolClear func(p0 context.Context, p1 bool) error `perm:"write"` + MpoolDeleteByAdress func(p0 context.Context, p1 address.Address) error `perm:"admin"` + MpoolGetConfig func(p0 context.Context) (*messagepool.MpoolConfig, error) `perm:"read"` + MpoolGetNonce func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"read"` + MpoolPending func(p0 context.Context, p1 types.TipSetKey) ([]*types.SignedMessage, error) `perm:"read"` + MpoolPublishByAddr func(p0 context.Context, p1 address.Address) error `perm:"write"` + MpoolPublishMessage func(p0 context.Context, p1 *types.SignedMessage) error `perm:"write"` + MpoolPush func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) `perm:"write"` + MpoolPushMessage func(p0 context.Context, p1 *types.Message, p2 *apitypes.MessageSendSpec) (*types.SignedMessage, error) `perm:"sign"` + MpoolPushUntrusted func(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) `perm:"write"` + MpoolSelect func(p0 context.Context, p1 types.TipSetKey, p2 float64) ([]*types.SignedMessage, error) `perm:"read"` + MpoolSelects func(p0 context.Context, p1 types.TipSetKey, p2 []float64) ([][]*types.SignedMessage, error) `perm:"read"` + MpoolSetConfig func(p0 context.Context, p1 *messagepool.MpoolConfig) error `perm:"admin"` + MpoolSub func(p0 context.Context) (<-chan messagepool.MpoolUpdate, error) `perm:"read"` + } +} + +func (s *IMessagePoolStruct) GasBatchEstimateMessageGas(p0 context.Context, p1 []*apitypes.EstimateMessage, p2 uint64, p3 types.TipSetKey) ([]*apitypes.EstimateResult, error) { + return s.Internal.GasBatchEstimateMessageGas(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) GasEstimateFeeCap(p0 context.Context, p1 *types.Message, p2 int64, p3 types.TipSetKey) (big.Int, error) { + return s.Internal.GasEstimateFeeCap(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) GasEstimateGasLimit(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (int64, error) { + return s.Internal.GasEstimateGasLimit(p0, p1, p2) +} + +func (s *IMessagePoolStruct) GasEstimateGasPremium(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 types.TipSetKey) (big.Int, error) { + return s.Internal.GasEstimateGasPremium(p0, p1, p2, p3, p4) +} + +func (s *IMessagePoolStruct) GasEstimateMessageGas(p0 context.Context, p1 *types.Message, p2 *apitypes.MessageSendSpec, p3 types.TipSetKey) (*types.Message, error) { + return s.Internal.GasEstimateMessageGas(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) MpoolBatchPush(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) { + return s.Internal.MpoolBatchPush(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolBatchPushMessage(p0 context.Context, p1 []*types.Message, p2 *apitypes.MessageSendSpec) ([]*types.SignedMessage, error) { + return s.Internal.MpoolBatchPushMessage(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolBatchPushUntrusted(p0 context.Context, p1 []*types.SignedMessage) ([]cid.Cid, error) { + return s.Internal.MpoolBatchPushUntrusted(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolClear(p0 context.Context, p1 bool) error { + return s.Internal.MpoolClear(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolDeleteByAdress(p0 context.Context, p1 address.Address) error { + return s.Internal.MpoolDeleteByAdress(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolGetConfig(p0 context.Context) (*messagepool.MpoolConfig, error) { + return s.Internal.MpoolGetConfig(p0) +} + +func (s *IMessagePoolStruct) MpoolGetNonce(p0 context.Context, p1 address.Address) (uint64, error) { + return s.Internal.MpoolGetNonce(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPending(p0 context.Context, p1 types.TipSetKey) ([]*types.SignedMessage, error) { + return s.Internal.MpoolPending(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPublishByAddr(p0 context.Context, p1 address.Address) error { + return s.Internal.MpoolPublishByAddr(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPublishMessage(p0 context.Context, p1 *types.SignedMessage) error { + return s.Internal.MpoolPublishMessage(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPush(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) { + return s.Internal.MpoolPush(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPushMessage(p0 context.Context, p1 *types.Message, p2 *apitypes.MessageSendSpec) (*types.SignedMessage, error) { + return s.Internal.MpoolPushMessage(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolPushUntrusted(p0 context.Context, p1 *types.SignedMessage) (cid.Cid, error) { + return s.Internal.MpoolPushUntrusted(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolSelect(p0 context.Context, p1 types.TipSetKey, p2 float64) ([]*types.SignedMessage, error) { + return s.Internal.MpoolSelect(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolSelects(p0 context.Context, p1 types.TipSetKey, p2 []float64) ([][]*types.SignedMessage, error) { + return s.Internal.MpoolSelects(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolSetConfig(p0 context.Context, p1 *messagepool.MpoolConfig) error { + return s.Internal.MpoolSetConfig(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolSub(p0 context.Context) (<-chan messagepool.MpoolUpdate, error) { + return s.Internal.MpoolSub(p0) +} + +type IMinerStateStruct struct { + Internal struct { + StateCirculatingSupply func(p0 context.Context, p1 types.TipSetKey) (abi.TokenAmount, error) `perm:"read"` + StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (apitypes.DealCollateralBounds, error) `perm:"read"` + StateListActors func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) `perm:"read"` + StateListMiners func(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) `perm:"read"` + StateLookupID func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"` + StateMarketBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (apitypes.MarketBalance, error) `perm:"read"` + StateMarketDeals func(p0 context.Context, p1 types.TipSetKey) (map[string]apitypes.MarketDeal, error) `perm:"read"` + StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*apitypes.MarketDeal, error) `perm:"read"` + StateMinerActiveSectors func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"` + StateMinerAvailableBalance func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (big.Int, error) `perm:"read"` + StateMinerDeadlines func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]apitypes.Deadline, error) `perm:"read"` + StateMinerFaults func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) `perm:"read"` + StateMinerInfo func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (miner.MinerInfo, error) `perm:"read"` + StateMinerInitialPledgeCollateral func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (big.Int, error) `perm:"read"` + StateMinerPartitions func(p0 context.Context, p1 address.Address, p2 uint64, p3 types.TipSetKey) ([]apitypes.Partition, error) `perm:"read"` + StateMinerPower func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*apitypes.MinerPower, error) `perm:"read"` + StateMinerPreCommitDepositForPower func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (big.Int, error) `perm:"read"` + StateMinerProvingDeadline func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*dline.Info, error) `perm:"read"` + StateMinerRecoveries func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) `perm:"read"` + StateMinerSectorAllocated func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (bool, error) `perm:"read"` + StateMinerSectorCount func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (apitypes.MinerSectors, error) `perm:"read"` + StateMinerSectorSize func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (abi.SectorSize, error) `perm:"read"` + StateMinerSectors func(p0 context.Context, p1 address.Address, p2 *bitfield.BitField, p3 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"` + StateMinerWorkerAddress func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) `perm:"read"` + StateSectorExpiration func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorExpiration, error) `perm:"read"` + StateSectorGetInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorOnChainInfo, error) `perm:"read"` + StateSectorPartition func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorLocation, error) `perm:"read"` + StateSectorPreCommitInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) `perm:"read"` + StateVMCirculatingSupplyInternal func(p0 context.Context, p1 types.TipSetKey) (types.CirculatingSupply, error) `perm:"read"` + StateVerifiedClientStatus func(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) `perm:"read"` + } +} + +func (s *IMinerStateStruct) StateCirculatingSupply(p0 context.Context, p1 types.TipSetKey) (abi.TokenAmount, error) { + return s.Internal.StateCirculatingSupply(p0, p1) +} + +func (s *IMinerStateStruct) StateDealProviderCollateralBounds(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 types.TipSetKey) (apitypes.DealCollateralBounds, error) { + return s.Internal.StateDealProviderCollateralBounds(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateListActors(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) { + return s.Internal.StateListActors(p0, p1) +} + +func (s *IMinerStateStruct) StateListMiners(p0 context.Context, p1 types.TipSetKey) ([]address.Address, error) { + return s.Internal.StateListMiners(p0, p1) +} + +func (s *IMinerStateStruct) StateLookupID(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) { + return s.Internal.StateLookupID(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMarketBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (apitypes.MarketBalance, error) { + return s.Internal.StateMarketBalance(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMarketDeals(p0 context.Context, p1 types.TipSetKey) (map[string]apitypes.MarketDeal, error) { + return s.Internal.StateMarketDeals(p0, p1) +} + +func (s *IMinerStateStruct) StateMarketStorageDeal(p0 context.Context, p1 abi.DealID, p2 types.TipSetKey) (*apitypes.MarketDeal, error) { + return s.Internal.StateMarketStorageDeal(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerActiveSectors(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) { + return s.Internal.StateMinerActiveSectors(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerAvailableBalance(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerAvailableBalance(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerDeadlines(p0 context.Context, p1 address.Address, p2 types.TipSetKey) ([]apitypes.Deadline, error) { + return s.Internal.StateMinerDeadlines(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerFaults(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) { + return s.Internal.StateMinerFaults(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerInfo(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (miner.MinerInfo, error) { + return s.Internal.StateMinerInfo(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerInitialPledgeCollateral(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerInitialPledgeCollateral(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerPartitions(p0 context.Context, p1 address.Address, p2 uint64, p3 types.TipSetKey) ([]apitypes.Partition, error) { + return s.Internal.StateMinerPartitions(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerPower(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*apitypes.MinerPower, error) { + return s.Internal.StateMinerPower(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerPreCommitDepositForPower(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 types.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerPreCommitDepositForPower(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerProvingDeadline(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*dline.Info, error) { + return s.Internal.StateMinerProvingDeadline(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerRecoveries(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (bitfield.BitField, error) { + return s.Internal.StateMinerRecoveries(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectorAllocated(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (bool, error) { + return s.Internal.StateMinerSectorAllocated(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerSectorCount(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (apitypes.MinerSectors, error) { + return s.Internal.StateMinerSectorCount(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectorSize(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (abi.SectorSize, error) { + return s.Internal.StateMinerSectorSize(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectors(p0 context.Context, p1 address.Address, p2 *bitfield.BitField, p3 types.TipSetKey) ([]*miner.SectorOnChainInfo, error) { + return s.Internal.StateMinerSectors(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerWorkerAddress(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (address.Address, error) { + return s.Internal.StateMinerWorkerAddress(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateSectorExpiration(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorExpiration, error) { + return s.Internal.StateSectorExpiration(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorGetInfo(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorOnChainInfo, error) { + return s.Internal.StateSectorGetInfo(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorPartition(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (*miner.SectorLocation, error) { + return s.Internal.StateSectorPartition(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorPreCommitInfo(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) { + return s.Internal.StateSectorPreCommitInfo(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateVMCirculatingSupplyInternal(p0 context.Context, p1 types.TipSetKey) (types.CirculatingSupply, error) { + return s.Internal.StateVMCirculatingSupplyInternal(p0, p1) +} + +func (s *IMinerStateStruct) StateVerifiedClientStatus(p0 context.Context, p1 address.Address, p2 types.TipSetKey) (*abi.StoragePower, error) { + return s.Internal.StateVerifiedClientStatus(p0, p1, p2) +} + +type IMiningStruct struct { + Internal struct { + MinerCreateBlock func(p0 context.Context, p1 *apitypes.BlockTemplate) (*types.BlockMsg, error) `perm:"write"` + MinerGetBaseInfo func(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*apitypes.MiningBaseInfo, error) `perm:"read"` + } +} + +func (s *IMiningStruct) MinerCreateBlock(p0 context.Context, p1 *apitypes.BlockTemplate) (*types.BlockMsg, error) { + return s.Internal.MinerCreateBlock(p0, p1) +} + +func (s *IMiningStruct) MinerGetBaseInfo(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 types.TipSetKey) (*apitypes.MiningBaseInfo, error) { + return s.Internal.MinerGetBaseInfo(p0, p1, p2, p3) +} + +type IMultiSigStruct struct { + Internal struct { + MsigAddApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (cid.Cid, error) `perm:"sign"` + MsigAddCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (cid.Cid, error) `perm:"sign"` + MsigAddPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) `perm:"sign"` + MsigApprove func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (cid.Cid, error) `perm:"sign"` + MsigApproveTxnHash func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 types.BigInt, p6 address.Address, p7 uint64, p8 []byte) (cid.Cid, error) `perm:"sign"` + MsigCancel func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 types.BigInt, p5 address.Address, p6 uint64, p7 []byte) (cid.Cid, error) `perm:"sign"` + MsigCreate func(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 types.BigInt, p5 address.Address, p6 types.BigInt) (cid.Cid, error) `perm:"sign"` + MsigGetVested func(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) `perm:"read"` + MsigPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt, p4 address.Address, p5 uint64, p6 []byte) (cid.Cid, error) `perm:"sign"` + MsigRemoveSigner func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) `perm:"sign"` + MsigSwapApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (cid.Cid, error) `perm:"sign"` + MsigSwapCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (cid.Cid, error) `perm:"sign"` + MsigSwapPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (cid.Cid, error) `perm:"sign"` + } +} + +func (s *IMultiSigStruct) MsigAddApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (cid.Cid, error) { + return s.Internal.MsigAddApprove(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigAddCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (cid.Cid, error) { + return s.Internal.MsigAddCancel(p0, p1, p2, p3, p4, p5) +} + +func (s *IMultiSigStruct) MsigAddPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) { + return s.Internal.MsigAddPropose(p0, p1, p2, p3, p4) +} + +func (s *IMultiSigStruct) MsigApprove(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (cid.Cid, error) { + return s.Internal.MsigApprove(p0, p1, p2, p3) +} + +func (s *IMultiSigStruct) MsigApproveTxnHash(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 types.BigInt, p6 address.Address, p7 uint64, p8 []byte) (cid.Cid, error) { + return s.Internal.MsigApproveTxnHash(p0, p1, p2, p3, p4, p5, p6, p7, p8) +} + +func (s *IMultiSigStruct) MsigCancel(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 types.BigInt, p5 address.Address, p6 uint64, p7 []byte) (cid.Cid, error) { + return s.Internal.MsigCancel(p0, p1, p2, p3, p4, p5, p6, p7) +} + +func (s *IMultiSigStruct) MsigCreate(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 types.BigInt, p5 address.Address, p6 types.BigInt) (cid.Cid, error) { + return s.Internal.MsigCreate(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigGetVested(p0 context.Context, p1 address.Address, p2 types.TipSetKey, p3 types.TipSetKey) (types.BigInt, error) { + return s.Internal.MsigGetVested(p0, p1, p2, p3) +} + +func (s *IMultiSigStruct) MsigPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 types.BigInt, p4 address.Address, p5 uint64, p6 []byte) (cid.Cid, error) { + return s.Internal.MsigPropose(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigRemoveSigner(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) { + return s.Internal.MsigRemoveSigner(p0, p1, p2, p3, p4) +} + +func (s *IMultiSigStruct) MsigSwapApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (cid.Cid, error) { + return s.Internal.MsigSwapApprove(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigSwapCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (cid.Cid, error) { + return s.Internal.MsigSwapCancel(p0, p1, p2, p3, p4, p5) +} + +func (s *IMultiSigStruct) MsigSwapPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (cid.Cid, error) { + return s.Internal.MsigSwapPropose(p0, p1, p2, p3, p4) +} + +type INetworkStruct struct { + Internal struct { + NetAddrsListen func(p0 context.Context) (peer.AddrInfo, error) `perm:"read"` + NetworkConnect func(p0 context.Context, p1 []string) (<-chan net.ConnectionResult, error) `perm:"read"` + NetworkFindPeer func(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) `perm:"read"` + NetworkFindProvidersAsync func(p0 context.Context, p1 cid.Cid, p2 int) <-chan peer.AddrInfo `perm:"read"` + NetworkGetBandwidthStats func(p0 context.Context) metrics.Stats `perm:"admin"` + NetworkGetClosestPeers func(p0 context.Context, p1 string) ([]peer.ID, error) `perm:"admin"` + NetworkGetPeerAddresses func(p0 context.Context) []ma.Multiaddr `perm:"admin"` + NetworkGetPeerID func(p0 context.Context) peer.ID `perm:"admin"` + NetworkPeers func(p0 context.Context, p1 bool, p2 bool, p3 bool) (*net.SwarmConnInfos, error) `perm:"read"` + Version func(p0 context.Context) (apitypes.Version, error) `perm:"read"` + } +} + +func (s *INetworkStruct) NetAddrsListen(p0 context.Context) (peer.AddrInfo, error) { + return s.Internal.NetAddrsListen(p0) +} + +func (s *INetworkStruct) NetworkConnect(p0 context.Context, p1 []string) (<-chan net.ConnectionResult, error) { + return s.Internal.NetworkConnect(p0, p1) +} + +func (s *INetworkStruct) NetworkFindPeer(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) { + return s.Internal.NetworkFindPeer(p0, p1) +} + +func (s *INetworkStruct) NetworkFindProvidersAsync(p0 context.Context, p1 cid.Cid, p2 int) <-chan peer.AddrInfo { + return s.Internal.NetworkFindProvidersAsync(p0, p1, p2) +} + +func (s *INetworkStruct) NetworkGetBandwidthStats(p0 context.Context) metrics.Stats { + return s.Internal.NetworkGetBandwidthStats(p0) +} + +func (s *INetworkStruct) NetworkGetClosestPeers(p0 context.Context, p1 string) ([]peer.ID, error) { + return s.Internal.NetworkGetClosestPeers(p0, p1) +} + +func (s *INetworkStruct) NetworkGetPeerAddresses(p0 context.Context) []ma.Multiaddr { + return s.Internal.NetworkGetPeerAddresses(p0) +} + +func (s *INetworkStruct) NetworkGetPeerID(p0 context.Context) peer.ID { + return s.Internal.NetworkGetPeerID(p0) +} + +func (s *INetworkStruct) NetworkPeers(p0 context.Context, p1 bool, p2 bool, p3 bool) (*net.SwarmConnInfos, error) { + return s.Internal.NetworkPeers(p0, p1, p2, p3) +} + +func (s *INetworkStruct) Version(p0 context.Context) (apitypes.Version, error) { + return s.Internal.Version(p0) +} + +type IPaychanStruct struct { + Internal struct { + PaychAllocateLane func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"sign"` + PaychAvailableFunds func(p0 context.Context, p1 address.Address) (*apitypes.ChannelAvailableFunds, error) `perm:"sign"` + PaychAvailableFundsByFromTo func(p0 context.Context, p1 address.Address, p2 address.Address) (*apitypes.ChannelAvailableFunds, error) `perm:"sign"` + PaychCollect func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"` + PaychGet func(p0 context.Context, p1 address.Address, p2 address.Address, p3 big.Int) (*paychtypes.ChannelInfo, error) `perm:"sign"` + PaychGetWaitReady func(p0 context.Context, p1 cid.Cid) (address.Address, error) `perm:"sign"` + PaychList func(p0 context.Context) ([]address.Address, error) `perm:"read"` + PaychNewPayment func(p0 context.Context, p1 address.Address, p2 address.Address, p3 []paychtypes.VoucherSpec) (*paychtypes.PaymentInfo, error) `perm:"sign"` + PaychSettle func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"` + PaychStatus func(p0 context.Context, p1 address.Address) (*paychtypes.Status, error) `perm:"read"` + PaychVoucherAdd func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 big.Int) (big.Int, error) `perm:"write"` + PaychVoucherCheckSpendable func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (bool, error) `perm:"read"` + PaychVoucherCheckValid func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher) error `perm:"read"` + PaychVoucherCreate func(p0 context.Context, p1 address.Address, p2 big.Int, p3 uint64) (*paychtypes.VoucherCreateResult, error) `perm:"sign"` + PaychVoucherList func(p0 context.Context, p1 address.Address) ([]*paych.SignedVoucher, error) `perm:"write"` + PaychVoucherSubmit func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) `perm:"sign"` + } +} + +func (s *IPaychanStruct) PaychAllocateLane(p0 context.Context, p1 address.Address) (uint64, error) { + return s.Internal.PaychAllocateLane(p0, p1) +} + +func (s *IPaychanStruct) PaychAvailableFunds(p0 context.Context, p1 address.Address) (*apitypes.ChannelAvailableFunds, error) { + return s.Internal.PaychAvailableFunds(p0, p1) +} + +func (s *IPaychanStruct) PaychAvailableFundsByFromTo(p0 context.Context, p1 address.Address, p2 address.Address) (*apitypes.ChannelAvailableFunds, error) { + return s.Internal.PaychAvailableFundsByFromTo(p0, p1, p2) +} + +func (s *IPaychanStruct) PaychCollect(p0 context.Context, p1 address.Address) (cid.Cid, error) { + return s.Internal.PaychCollect(p0, p1) +} + +func (s *IPaychanStruct) PaychGet(p0 context.Context, p1 address.Address, p2 address.Address, p3 big.Int) (*paychtypes.ChannelInfo, error) { + return s.Internal.PaychGet(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychGetWaitReady(p0 context.Context, p1 cid.Cid) (address.Address, error) { + return s.Internal.PaychGetWaitReady(p0, p1) +} + +func (s *IPaychanStruct) PaychList(p0 context.Context) ([]address.Address, error) { + return s.Internal.PaychList(p0) +} + +func (s *IPaychanStruct) PaychNewPayment(p0 context.Context, p1 address.Address, p2 address.Address, p3 []paychtypes.VoucherSpec) (*paychtypes.PaymentInfo, error) { + return s.Internal.PaychNewPayment(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychSettle(p0 context.Context, p1 address.Address) (cid.Cid, error) { + return s.Internal.PaychSettle(p0, p1) +} + +func (s *IPaychanStruct) PaychStatus(p0 context.Context, p1 address.Address) (*paychtypes.Status, error) { + return s.Internal.PaychStatus(p0, p1) +} + +func (s *IPaychanStruct) PaychVoucherAdd(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 big.Int) (big.Int, error) { + return s.Internal.PaychVoucherAdd(p0, p1, p2, p3, p4) +} + +func (s *IPaychanStruct) PaychVoucherCheckSpendable(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (bool, error) { + return s.Internal.PaychVoucherCheckSpendable(p0, p1, p2, p3, p4) +} + +func (s *IPaychanStruct) PaychVoucherCheckValid(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher) error { + return s.Internal.PaychVoucherCheckValid(p0, p1, p2) +} + +func (s *IPaychanStruct) PaychVoucherCreate(p0 context.Context, p1 address.Address, p2 big.Int, p3 uint64) (*paychtypes.VoucherCreateResult, error) { + return s.Internal.PaychVoucherCreate(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychVoucherList(p0 context.Context, p1 address.Address) ([]*paych.SignedVoucher, error) { + return s.Internal.PaychVoucherList(p0, p1) +} + +func (s *IPaychanStruct) PaychVoucherSubmit(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) { + return s.Internal.PaychVoucherSubmit(p0, p1, p2, p3, p4) +} + +type ISyncerStruct struct { + Internal struct { + ChainSyncHandleNewTipSet func(p0 context.Context, p1 *types.ChainInfo) error `perm:"write"` + ChainTipSetWeight func(p0 context.Context, p1 types.TipSetKey) (big.Int, error) `perm:"read"` + Concurrent func(p0 context.Context) int64 `perm:"read"` + SetConcurrent func(p0 context.Context, p1 int64) error `perm:"admin"` + StateCall func(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*apitypes.InvocResult, error) `perm:"read"` + SyncState func(p0 context.Context) (*apitypes.SyncState, error) `perm:"read"` + SyncSubmitBlock func(p0 context.Context, p1 *types.BlockMsg) error `perm:"write"` + SyncerTracker func(p0 context.Context) *syncTypes.TargetTracker `perm:"read"` + } +} + +func (s *ISyncerStruct) ChainSyncHandleNewTipSet(p0 context.Context, p1 *types.ChainInfo) error { + return s.Internal.ChainSyncHandleNewTipSet(p0, p1) +} + +func (s *ISyncerStruct) ChainTipSetWeight(p0 context.Context, p1 types.TipSetKey) (big.Int, error) { + return s.Internal.ChainTipSetWeight(p0, p1) +} + +func (s *ISyncerStruct) Concurrent(p0 context.Context) int64 { + return s.Internal.Concurrent(p0) +} + +func (s *ISyncerStruct) SetConcurrent(p0 context.Context, p1 int64) error { + return s.Internal.SetConcurrent(p0, p1) +} + +func (s *ISyncerStruct) StateCall(p0 context.Context, p1 *types.Message, p2 types.TipSetKey) (*apitypes.InvocResult, error) { + return s.Internal.StateCall(p0, p1, p2) +} + +func (s *ISyncerStruct) SyncState(p0 context.Context) (*apitypes.SyncState, error) { + return s.Internal.SyncState(p0) +} + +func (s *ISyncerStruct) SyncSubmitBlock(p0 context.Context, p1 *types.BlockMsg) error { + return s.Internal.SyncSubmitBlock(p0, p1) +} + +func (s *ISyncerStruct) SyncerTracker(p0 context.Context) *syncTypes.TargetTracker { + return s.Internal.SyncerTracker(p0) +} + +type IWalletStruct struct { + Internal struct { + HasPassword func(p0 context.Context) bool `perm:"admin"` + LockWallet func(p0 context.Context) error `perm:"admin"` + SetPassword func(p0 context.Context, p1 []byte) error `perm:"admin"` + UnLockWallet func(p0 context.Context, p1 []byte) error `perm:"admin"` + WalletAddresses func(p0 context.Context) []address.Address `perm:"admin"` + WalletBalance func(p0 context.Context, p1 address.Address) (abi.TokenAmount, error) `perm:"read"` + WalletDefaultAddress func(p0 context.Context) (address.Address, error) `perm:"write"` + WalletExport func(p0 address.Address, p1 string) (*crypto.KeyInfo, error) `perm:"admin"` + WalletHas func(p0 context.Context, p1 address.Address) (bool, error) `perm:"write"` + WalletImport func(p0 *crypto.KeyInfo) (address.Address, error) `perm:"admin"` + WalletNewAddress func(p0 address.Protocol) (address.Address, error) `perm:"write"` + WalletSetDefault func(p0 context.Context, p1 address.Address) error `perm:"write"` + WalletSign func(p0 context.Context, p1 address.Address, p2 []byte, p3 wallet.MsgMeta) (*crypto.Signature, error) `perm:"sign"` + WalletSignMessage func(p0 context.Context, p1 address.Address, p2 *types.Message) (*types.SignedMessage, error) `perm:"sign"` + WalletState func(p0 context.Context) int `perm:"admin"` + } +} + +func (s *IWalletStruct) HasPassword(p0 context.Context) bool { + return s.Internal.HasPassword(p0) +} + +func (s *IWalletStruct) LockWallet(p0 context.Context) error { + return s.Internal.LockWallet(p0) +} + +func (s *IWalletStruct) SetPassword(p0 context.Context, p1 []byte) error { + return s.Internal.SetPassword(p0, p1) +} + +func (s *IWalletStruct) UnLockWallet(p0 context.Context, p1 []byte) error { + return s.Internal.UnLockWallet(p0, p1) +} + +func (s *IWalletStruct) WalletAddresses(p0 context.Context) []address.Address { + return s.Internal.WalletAddresses(p0) +} + +func (s *IWalletStruct) WalletBalance(p0 context.Context, p1 address.Address) (abi.TokenAmount, error) { + return s.Internal.WalletBalance(p0, p1) +} + +func (s *IWalletStruct) WalletDefaultAddress(p0 context.Context) (address.Address, error) { + return s.Internal.WalletDefaultAddress(p0) +} + +func (s *IWalletStruct) WalletExport(p0 address.Address, p1 string) (*crypto.KeyInfo, error) { + return s.Internal.WalletExport(p0, p1) +} + +func (s *IWalletStruct) WalletHas(p0 context.Context, p1 address.Address) (bool, error) { + return s.Internal.WalletHas(p0, p1) +} + +func (s *IWalletStruct) WalletImport(p0 *crypto.KeyInfo) (address.Address, error) { + return s.Internal.WalletImport(p0) +} + +func (s *IWalletStruct) WalletNewAddress(p0 address.Protocol) (address.Address, error) { + return s.Internal.WalletNewAddress(p0) +} + +func (s *IWalletStruct) WalletSetDefault(p0 context.Context, p1 address.Address) error { + return s.Internal.WalletSetDefault(p0, p1) +} + +func (s *IWalletStruct) WalletSign(p0 context.Context, p1 address.Address, p2 []byte, p3 wallet.MsgMeta) (*crypto.Signature, error) { + return s.Internal.WalletSign(p0, p1, p2, p3) +} + +func (s *IWalletStruct) WalletSignMessage(p0 context.Context, p1 address.Address, p2 *types.Message) (*types.SignedMessage, error) { + return s.Internal.WalletSignMessage(p0, p1, p2) +} + +func (s *IWalletStruct) WalletState(p0 context.Context) int { + return s.Internal.WalletState(p0) +} diff --git a/app/node/builder.go b/app/node/builder.go new file mode 100644 index 0000000000..0183ffb7aa --- /dev/null +++ b/app/node/builder.go @@ -0,0 +1,209 @@ +package node + +import ( + "context" + "time" + + logging "github.com/ipfs/go-log" + "github.com/libp2p/go-libp2p" + "github.com/pkg/errors" + "golang.org/x/xerrors" + + "github.com/ipfs-force-community/metrics/ratelimit" + + "github.com/filecoin-project/venus/app/submodule/blockstore" + "github.com/filecoin-project/venus/app/submodule/chain" + config2 "github.com/filecoin-project/venus/app/submodule/config" + "github.com/filecoin-project/venus/app/submodule/dagservice" + "github.com/filecoin-project/venus/app/submodule/discovery" + "github.com/filecoin-project/venus/app/submodule/market" + "github.com/filecoin-project/venus/app/submodule/mining" + "github.com/filecoin-project/venus/app/submodule/mpool" + "github.com/filecoin-project/venus/app/submodule/multisig" + "github.com/filecoin-project/venus/app/submodule/network" + "github.com/filecoin-project/venus/app/submodule/paych" + "github.com/filecoin-project/venus/app/submodule/storagenetworking" + "github.com/filecoin-project/venus/app/submodule/syncer" + "github.com/filecoin-project/venus/app/submodule/wallet" + chain2 "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/clock" + "github.com/filecoin-project/venus/pkg/journal" + "github.com/filecoin-project/venus/pkg/jwtauth" + "github.com/filecoin-project/venus/pkg/paychmgr" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper/impl" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// Builder is a helper to aid in the construction of a filecoin node. +type Builder struct { + blockTime time.Duration + libp2pOpts []libp2p.Option + offlineMode bool + verifier ffiwrapper.Verifier + propDelay time.Duration + repo repo.Repo + journal journal.Journal + isRelay bool + chainClock clock.ChainEpochClock + genBlk types.BlockHeader + walletPassword []byte + authURL string +} + +// New creates a new node. +func New(ctx context.Context, opts ...BuilderOpt) (*Node, error) { + // initialize builder and set base values + n := &Builder{ + offlineMode: false, + blockTime: clock.DefaultEpochDuration, + verifier: impl.ProofVerifier, + } + // apply builder options + for _, o := range opts { + if err := o(n); err != nil { + return nil, err + } + } + + // build the node + return n.build(ctx) +} + +func (b *Builder) build(ctx context.Context) (*Node, error) { + // + // Set default values on un-initialized fields + // + if b.repo == nil { + b.repo = repo.NewInMemoryRepo() + } + + var err error + if b.journal == nil { + b.journal = journal.NewNoopJournal() + } + + // fetch genesis block id + b.genBlk, err = readGenesisCid(ctx, b.repo.ChainDatastore(), b.repo.Datastore()) + if err != nil { + return nil, err + } + + if b.chainClock == nil { + // get the genesis block time from the chainsubmodule + b.chainClock = clock.NewChainClock(b.genBlk.Timestamp, b.blockTime) + } + + // create the node + nd := &Node{ + offlineMode: b.offlineMode, + repo: b.repo, + chainClock: b.chainClock, + } + + //modules + nd.circulatiingSupplyCalculator = chain2.NewCirculatingSupplyCalculator(b.repo.Datastore(), b.genBlk.ParentStateRoot, b.repo.Config().NetworkParams.ForkUpgradeParam) + + //services + nd.configModule = config2.NewConfigModule(b.repo) + + nd.blockstore, err = blockstore.NewBlockstoreSubmodule(ctx, (*builder)(b)) + if err != nil { + return nil, errors.Wrap(err, "failed to build node.blockstore") + } + + nd.network, err = network.NewNetworkSubmodule(ctx, (*builder)(b)) + if err != nil { + return nil, errors.Wrap(err, "failed to build node.Network") + } + + nd.blockservice, err = dagservice.NewDagserviceSubmodule(ctx, (*builder)(b), nd.network) + if err != nil { + return nil, errors.Wrap(err, "failed to build node.dagservice") + } + + nd.chain, err = chain.NewChainSubmodule(ctx, (*builder)(b), nd.circulatiingSupplyCalculator) + if err != nil { + return nil, errors.Wrap(err, "failed to build node.Chain") + } + + // todo change builder interface to read config + nd.discovery, err = discovery.NewDiscoverySubmodule(ctx, (*builder)(b), nd.network, nd.chain.ChainReader, nd.chain.MessageStore) + if err != nil { + return nil, errors.Wrap(err, "failed to build node.discovery") + } + + nd.syncer, err = syncer.NewSyncerSubmodule(ctx, (*builder)(b), nd.blockstore, nd.network, nd.discovery, nd.chain, nd.circulatiingSupplyCalculator) + if err != nil { + return nil, errors.Wrap(err, "failed to build node.Syncer") + } + + nd.wallet, err = wallet.NewWalletSubmodule(ctx, b.repo, nd.configModule, nd.chain, b.walletPassword) + if err != nil { + return nil, errors.Wrap(err, "failed to build node.wallet") + } + + nd.mpool, err = mpool.NewMpoolSubmodule(ctx, (*builder)(b), nd.network, nd.chain, nd.wallet) + if err != nil { + return nil, errors.Wrap(err, "failed to build node.mpool") + } + + nd.storageNetworking, err = storagenetworking.NewStorgeNetworkingSubmodule(ctx, nd.network) + if err != nil { + return nil, errors.Wrap(err, "failed to build node.storageNetworking") + } + nd.mining = mining.NewMiningModule(nd.syncer.Stmgr, (*builder)(b), nd.chain, nd.blockstore, nd.network, nd.syncer, *nd.wallet) + + nd.multiSig = multisig.NewMultiSigSubmodule(nd.chain.API(), nd.mpool.API(), nd.chain.ChainReader) + + mgrps := &paychmgr.ManagerParams{ + MPoolAPI: nd.mpool.API(), + ChainInfoAPI: nd.chain.API(), + SM: nd.syncer.Stmgr, + WalletAPI: nd.wallet.API(), + } + if nd.paychan, err = paych.NewPaychSubmodule(ctx, b.repo.PaychDatastore(), mgrps); err != nil { + return nil, err + } + nd.market = market.NewMarketModule(nd.chain.API(), nd.syncer.Stmgr) + + apiBuilder := NewBuilder() + apiBuilder.NameSpace("Filecoin") + + err = apiBuilder.AddServices(nd.configModule, + nd.blockstore, + nd.network, + nd.blockservice, + nd.discovery, + nd.chain, + nd.syncer, + nd.wallet, + nd.storageNetworking, + nd.mining, + nd.mpool, + nd.paychan, + nd.market) + + if err != nil { + return nil, errors.Wrap(err, "add service failed ") + } + + cfg := nd.repo.Config() + if len(cfg.API.VenusAuthURL) > 0 { + nd.remoteAuth = jwtauth.NewRemoteAuth(cfg.API.VenusAuthURL) + } + + var ratelimiter *ratelimit.RateLimiter + if nd.remoteAuth != nil && cfg.RateLimitCfg.Enable { + if ratelimiter, err = ratelimit.NewRateLimitHandler(cfg.RateLimitCfg.Endpoint, + nil, &jwtauth.ValueFromCtx{}, nd.remoteAuth, logging.Logger("rate-limit")); err != nil { + return nil, xerrors.Errorf("request rate-limit is enabled, but create rate-limit handler failed:%w", err) + } + _ = logging.SetLogLevel("rate-limit", "warn") + } + + nd.jsonRPCServiceV1 = apiBuilder.Build("v1", ratelimiter) + nd.jsonRPCService = apiBuilder.Build("v0", ratelimiter) + return nd, nil +} diff --git a/app/node/builder_getter.go b/app/node/builder_getter.go new file mode 100644 index 0000000000..4109c35014 --- /dev/null +++ b/app/node/builder_getter.go @@ -0,0 +1,71 @@ +package node + +import ( + "github.com/filecoin-project/venus/pkg/clock" + "github.com/filecoin-project/venus/pkg/journal" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p" + "time" +) + +// Builder private method accessors for impl's + +type builder Builder + +// repo returns the repo. +func (b Builder) Repo() repo.Repo { + return b.repo +} + +// GenesisCid read genesis block cid +func (b builder) GenesisCid() cid.Cid { + return b.genBlk.Cid() +} + +// GenesisRoot read genesis block root +func (b builder) GenesisRoot() cid.Cid { + return b.genBlk.ParentStateRoot +} + +//todo remove block time +// BlockTime get chain block time +func (b builder) BlockTime() time.Duration { + return b.blockTime +} + +// Repo get home data repo +func (b builder) Repo() repo.Repo { + return b.repo +} + +// IsRelay get whether the p2p network support replay +func (b builder) IsRelay() bool { + return b.isRelay +} + +// ChainClock get chain clock +func (b builder) ChainClock() clock.ChainEpochClock { + return b.chainClock +} + +// Journal get journal to record event +func (b builder) Journal() journal.Journal { + return b.journal +} + +// Libp2pOpts get libp2p option +func (b builder) Libp2pOpts() []libp2p.Option { + return b.libp2pOpts +} + +// OfflineMode get the p2p network mode +func (b builder) OfflineMode() bool { + return b.offlineMode +} + +// Verify export ffi verify +func (b builder) Verifier() ffiwrapper.Verifier { + return b.verifier +} diff --git a/app/node/builder_opts.go b/app/node/builder_opts.go new file mode 100644 index 0000000000..0ffaf0b8d5 --- /dev/null +++ b/app/node/builder_opts.go @@ -0,0 +1,145 @@ +package node + +import ( + "time" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/pkg/clock" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/journal" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" + "github.com/filecoin-project/venus/venus-shared/actors/policy" + "github.com/libp2p/go-libp2p" +) + +// BuilderOpt is an option for building a filecoin node. +type BuilderOpt func(*Builder) error + +// offlineMode enables or disables offline mode. +func OfflineMode(offlineMode bool) BuilderOpt { + return func(c *Builder) error { + c.offlineMode = offlineMode + return nil + } +} + +// IsRelay configures node to act as a libp2p relay. +func IsRelay() BuilderOpt { + return func(c *Builder) error { + c.isRelay = true + return nil + } +} + +// BlockTime sets the blockTime. +func BlockTime(blockTime time.Duration) BuilderOpt { + return func(c *Builder) error { + c.blockTime = blockTime + return nil + } +} + +// PropagationDelay sets the time the node needs to wait for blocks to arrive before mining. +func PropagationDelay(propDelay time.Duration) BuilderOpt { + return func(c *Builder) error { + c.propDelay = propDelay + return nil + } +} + +// SetWalletPassword set wallet password +func SetWalletPassword(password []byte) BuilderOpt { + return func(c *Builder) error { + c.walletPassword = password + return nil + } +} + +// SetAuthURL set venus auth service URL +func SetAuthURL(url string) BuilderOpt { + return func(c *Builder) error { + c.authURL = url + return nil + } +} + +// Libp2pOptions returns a builder option that sets up the libp2p node +func Libp2pOptions(opts ...libp2p.Option) BuilderOpt { + return func(b *Builder) error { + // Quietly having your options overridden leads to hair loss + if len(b.libp2pOpts) > 0 { + panic("Libp2pOptions can only be called once") + } + b.libp2pOpts = opts + return nil + } +} + +// VerifierConfigOption returns a function that sets the verifier to use in the node consensus +func VerifierConfigOption(verifier ffiwrapper.Verifier) BuilderOpt { + return func(c *Builder) error { + c.verifier = verifier + return nil + } +} + +// ChainClockConfigOption returns a function that sets the chainClock to use in the node. +func ChainClockConfigOption(clk clock.ChainEpochClock) BuilderOpt { + return func(c *Builder) error { + c.chainClock = clk + return nil + } +} + +// JournalConfigOption returns a function that sets the journal to use in the node. +func JournalConfigOption(jrl journal.Journal) BuilderOpt { + return func(c *Builder) error { + c.journal = jrl + return nil + } +} + +// MonkeyPatchNetworkParamsOption returns a function that sets global vars in the +// binary's specs actor dependency to change network parameters that live there +func MonkeyPatchNetworkParamsOption(params *config.NetworkParamsConfig) BuilderOpt { + return func(c *Builder) error { + SetNetParams(params) + return nil + } +} + +func SetNetParams(params *config.NetworkParamsConfig) { + if params.ConsensusMinerMinPower > 0 { + policy.SetConsensusMinerMinPower(big.NewIntUnsigned(params.ConsensusMinerMinPower)) + } + if len(params.ReplaceProofTypes) > 0 { + newSupportedTypes := make([]abi.RegisteredSealProof, len(params.ReplaceProofTypes)) + for idx, proofType := range params.ReplaceProofTypes { + newSupportedTypes[idx] = proofType + } + // Switch reference rather than mutate in place to avoid concurrent map mutation (in tests). + policy.SetSupportedProofTypes(newSupportedTypes...) + } + + if params.MinVerifiedDealSize > 0 { + policy.SetMinVerifiedDealSize(abi.NewStoragePower(params.MinVerifiedDealSize)) + } + + if params.PreCommitChallengeDelay > 0 { + policy.SetPreCommitChallengeDelay(params.PreCommitChallengeDelay) + } + + constants.SetAddressNetwork(params.AddressNetwork) +} + +// MonkeyPatchSetProofTypeOption returns a function that sets package variable +// SuppurtedProofTypes to be only the given registered proof type +func MonkeyPatchSetProofTypeOption(proofType abi.RegisteredSealProof) BuilderOpt { + return func(c *Builder) error { + // Switch reference rather than mutate in place to avoid concurrent map mutation (in tests). + policy.SetSupportedProofTypes(proofType) + return nil + } +} diff --git a/app/node/config.go b/app/node/config.go new file mode 100644 index 0000000000..da93a37c98 --- /dev/null +++ b/app/node/config.go @@ -0,0 +1,46 @@ +package node + +import ( + libp2p "github.com/libp2p/go-libp2p" + ci "github.com/libp2p/go-libp2p-core/crypto" + errors "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/repo" +) + +// OptionsFromRepo takes a repo and returns options that configure a node +// to use the given repo. +func OptionsFromRepo(r repo.Repo) ([]BuilderOpt, error) { + sk, err := privKeyFromKeystore(r) + if err != nil { + return nil, err + } + + cfg := r.Config() + cfgopts := []BuilderOpt{ + // Libp2pOptions can only be called once, so add all options here. + Libp2pOptions( + libp2p.ListenAddrStrings(cfg.Swarm.Address), + libp2p.Identity(sk), + ), + } + + dsopt := func(c *Builder) error { + c.repo = r + return nil + } + + return append(cfgopts, dsopt), nil +} + +func privKeyFromKeystore(r repo.Repo) (ci.PrivKey, error) { + data, err := r.Keystore().Get("self") + if err != nil { + return nil, errors.Wrap(err, "failed to get key from keystore") + } + sk, err := ci.UnmarshalPrivateKey(data) + if err != nil { + return nil, errors.Wrap(err, "unmarshal private key failed") + } + return sk, nil +} diff --git a/app/node/env.go b/app/node/env.go new file mode 100644 index 0000000000..6c71ad919d --- /dev/null +++ b/app/node/env.go @@ -0,0 +1,42 @@ +package node + +import ( + "context" + + cmds "github.com/ipfs/go-ipfs-cmds" + + "github.com/filecoin-project/venus/app/submodule/storagenetworking" + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" +) + +// Env is the environment for command API handlers. +type Env struct { + ctx context.Context + InspectorAPI IInspector + BlockStoreAPI v1api.IBlockStore + ChainAPI v1api.IChain + NetworkAPI v1api.INetwork + StorageNetworkingAPI storagenetworking.IStorageNetworking + SyncerAPI v1api.ISyncer + WalletAPI v1api.IWallet + MingingAPI v1api.IMining + MessagePoolAPI v1api.IMessagePool + + MultiSigAPI v0api.IMultiSig + MarketAPI v1api.IMarket + PaychAPI v1api.IPaychan +} + +var _ cmds.Environment = (*Env)(nil) + +// NewClientEnv returns a new environment for command API clients. +// This environment lacks direct access to any internal APIs. +func NewClientEnv(ctx context.Context) *Env { + return &Env{ctx: ctx} +} + +// Context returns the context of the environment. +func (ce *Env) Context() context.Context { + return ce.ctx +} diff --git a/app/node/helpers.go b/app/node/helpers.go new file mode 100644 index 0000000000..9f8e49f8fc --- /dev/null +++ b/app/node/helpers.go @@ -0,0 +1,42 @@ +package node + +import ( + "bytes" + "context" + "encoding/json" + + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// readGenesisCid is a helper function that queries the provided datastore for +// an entry with the genesisKey cid, returning if found. +func readGenesisCid(ctx context.Context, chainDs datastore.Datastore, bs blockstoreutil.Blockstore) (types.BlockHeader, error) { + bb, err := chainDs.Get(ctx, chain.GenesisKey) + if err != nil { + return types.BlockHeader{}, errors.Wrap(err, "failed to read genesisKey") + } + + var c cid.Cid + err = json.Unmarshal(bb, &c) + if err != nil { + return types.BlockHeader{}, errors.Wrap(err, "failed to cast genesisCid") + } + + blkRawData, err := bs.Get(ctx, c) + if err != nil { + return types.BlockHeader{}, errors.Wrap(err, "failed to read genesis block") + } + + var blk types.BlockHeader + err = blk.UnmarshalCBOR(bytes.NewReader(blkRawData.RawData())) + if err != nil { + return types.BlockHeader{}, errors.Wrap(err, "failed to unmarshal genesis block") + } + return blk, nil +} diff --git a/app/node/init.go b/app/node/init.go new file mode 100644 index 0000000000..e3b40d970a --- /dev/null +++ b/app/node/init.go @@ -0,0 +1,98 @@ +package node + +import ( + "context" + + "github.com/filecoin-project/venus/pkg/repo/fskeystore" + + cbor "github.com/ipfs/go-ipld-cbor" + acrypto "github.com/libp2p/go-libp2p-core/crypto" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/genesis" + "github.com/filecoin-project/venus/pkg/repo" +) + +const defaultPeerKeyBits = 2048 + +// initCfg contains configuration for initializing a node's repo. +type initCfg struct { + peerKey acrypto.PrivKey + defaultKey *crypto.KeyInfo + initImports []*crypto.KeyInfo +} + +// InitOpt is an option for initialization of a node's repo. +type InitOpt func(*initCfg) + +// PeerKeyOpt sets the private key for a node's 'self' libp2p identity. +// If unspecified, initialization will create a new one. +func PeerKeyOpt(k acrypto.PrivKey) InitOpt { + return func(opts *initCfg) { + opts.peerKey = k + } +} + +// DefaultKeyOpt sets the private key for the wallet's default account. +// If unspecified, initialization will create a new one. +func DefaultKeyOpt(ki *crypto.KeyInfo) InitOpt { + return func(opts *initCfg) { + opts.defaultKey = ki + } +} + +// ImportKeyOpt imports the provided key during initialization. +func ImportKeyOpt(ki *crypto.KeyInfo) InitOpt { + return func(opts *initCfg) { + opts.initImports = append(opts.initImports, ki) + } +} + +// Init initializes a Filecoin repo with genesis state and keys. +// This will always set the configuration for wallet default address (to the specified default +// key or a newly generated one), but otherwise leave the repo's config object intact. +// Make further configuration changes after initialization. +func Init(ctx context.Context, r repo.Repo, gen genesis.InitFunc, opts ...InitOpt) error { + cfg := new(initCfg) + for _, o := range opts { + o(cfg) + } + + bs := r.Datastore() + cst := cbor.NewCborStore(bs) + _, err := genesis.Init(ctx, r, bs, cst, gen) + if err != nil { + return errors.Wrap(err, "Could not Init Node") + } + + if err := initPeerKey(r.Keystore(), cfg.peerKey); err != nil { + return err + } + + if err = r.ReplaceConfig(r.Config()); err != nil { + return errors.Wrap(err, "failed to write config") + } + + return nil +} + +func initPeerKey(store fskeystore.Keystore, pk acrypto.PrivKey) error { + var err error + if pk == nil { + pk, _, err = acrypto.GenerateKeyPair(acrypto.RSA, defaultPeerKeyBits) + if err != nil { + return errors.Wrap(err, "failed to create peer key") + } + } + + kbytes, err := acrypto.MarshalPrivateKey(pk) + if err != nil { + return err + } + + if err := store.Put("self", kbytes); err != nil { + return errors.Wrap(err, "failed to store private key") + } + return nil +} diff --git a/app/node/inspector_api.go b/app/node/inspector_api.go new file mode 100644 index 0000000000..6a3a36e25a --- /dev/null +++ b/app/node/inspector_api.go @@ -0,0 +1,150 @@ +package node + +import ( + "fmt" + "github.com/filecoin-project/venus/build/flags" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/repo" + sysi "github.com/whyrusleeping/go-sysinfo" + "os" + "runtime" +) + +type IInspector interface { + Runtime() *RuntimeInfo + Memory() (*MemoryInfo, error) + Config() *config.Config + Disk() (*DiskInfo, error) + FilecoinVersion() string + Environment() *EnvironmentInfo +} + +var _ IInspector = &inspector{} + +// NewInspectorAPI returns a `Inspector` used to inspect the venus node. +func NewInspectorAPI(r repo.Repo) IInspector { + return &inspector{ + repo: r, + } +} + +// Inspector contains information used to inspect the venus node. +type inspector struct { + repo repo.Repo +} + +// AllInspectorInfo contains all information the inspector can gather. +type AllInspectorInfo struct { + Config *config.Config + Runtime *RuntimeInfo + Environment *EnvironmentInfo + Disk *DiskInfo + Memory *MemoryInfo + FilecoinVersion string +} + +// RuntimeInfo contains information about the golang runtime. +type RuntimeInfo struct { + OS string + Arch string + Version string + Compiler string + NumProc int + GoMaxProcs int + NumGoRoutines int + NumCGoCalls int64 +} + +// EnvironmentInfo contains information about the environment filecoin is running in. +type EnvironmentInfo struct { + VENUSAPI string `json:"VENUS_API"` + VENUSPath string `json:"VENUS_PATH"` + GoPath string `json:"GOPATH"` +} + +// DiskInfo contains information about disk usage and type. +type DiskInfo struct { + Free uint64 + Total uint64 + FSType string +} + +// MemoryInfo contains information about memory usage. +type MemoryInfo struct { + Swap uint64 + Virtual uint64 +} + +// Runtime returns infrormation about the golang runtime. +func (g *inspector) Runtime() *RuntimeInfo { + return &RuntimeInfo{ + OS: runtime.GOOS, + Arch: runtime.GOARCH, + Version: runtime.Version(), + Compiler: runtime.Compiler, + NumProc: runtime.NumCPU(), + GoMaxProcs: runtime.GOMAXPROCS(0), + NumGoRoutines: runtime.NumGoroutine(), + NumCGoCalls: runtime.NumCgoCall(), + } +} + +// Environment returns information about the environment filecoin is running in. +func (g *inspector) Environment() *EnvironmentInfo { + return &EnvironmentInfo{ + VENUSAPI: os.Getenv("VENUS_API"), + VENUSPath: os.Getenv("VENUS_PATH"), + GoPath: os.Getenv("GOPATH"), + } +} + +// Disk return information about filesystem the filecoin nodes repo is on. +func (g *inspector) Disk() (*DiskInfo, error) { + fsr, ok := g.repo.(*repo.FSRepo) + if !ok { + // we are using a in memory repo + return &DiskInfo{ + Free: 0, + Total: 0, + FSType: "0", + }, nil + } + + p, err := fsr.Path() + if err != nil { + return nil, err + } + + dinfo, err := sysi.DiskUsage(p) + if err != nil { + return nil, err + } + + return &DiskInfo{ + Free: dinfo.Free, + Total: dinfo.Total, + FSType: dinfo.FsType, + }, nil +} + +// Memory return information about system meory usage. +func (g *inspector) Memory() (*MemoryInfo, error) { + meminfo, err := sysi.MemoryInfo() + if err != nil { + return nil, err + } + return &MemoryInfo{ + Swap: meminfo.Swap, + Virtual: meminfo.Used, + }, nil +} + +// configModule return the current config values of the filecoin node. +func (g *inspector) Config() *config.Config { + return g.repo.Config() +} + +// FilecoinVersion returns the version of venus. +func (g *inspector) FilecoinVersion() string { + return fmt.Sprintf("%s %s", flags.GitTag, flags.GitCommit) +} diff --git a/app/node/inspector_api_test.go b/app/node/inspector_api_test.go new file mode 100644 index 0000000000..3712a8cea2 --- /dev/null +++ b/app/node/inspector_api_test.go @@ -0,0 +1,65 @@ +package node_test + +import ( + "runtime" + "testing" + + "github.com/filecoin-project/venus/app/node" + + "github.com/stretchr/testify/assert" + + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/repo" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestRuntime(t *testing.T) { + tf.UnitTest(t) + + mr := repo.NewInMemoryRepo() + g := node.NewInspectorAPI(mr) + rt := g.Runtime() + + assert.Equal(t, runtime.GOOS, rt.OS) + assert.Equal(t, runtime.GOARCH, rt.Arch) + assert.Equal(t, runtime.Version(), rt.Version) + assert.Equal(t, runtime.Compiler, rt.Compiler) + assert.Equal(t, runtime.NumCPU(), rt.NumProc) + assert.Equal(t, runtime.GOMAXPROCS(0), rt.GoMaxProcs) + assert.Equal(t, runtime.NumCgoCall(), rt.NumCGoCalls) +} + +func TestDisk(t *testing.T) { + tf.UnitTest(t) + + mr := repo.NewInMemoryRepo() + g := node.NewInspectorAPI(mr) + d, err := g.Disk() + + assert.NoError(t, err) + assert.Equal(t, uint64(0), d.Free) + assert.Equal(t, uint64(0), d.Total) + assert.Equal(t, "0", d.FSType) +} + +func TestMemory(t *testing.T) { + tf.UnitTest(t) + + mr := repo.NewInMemoryRepo() + g := node.NewInspectorAPI(mr) + + _, err := g.Memory() + assert.NoError(t, err) +} + +func TestConfig(t *testing.T) { + tf.UnitTest(t) + + mr := repo.NewInMemoryRepo() + g := node.NewInspectorAPI(mr) + c := g.Config() + + defCfg := config.NewDefaultConfig() + defCfg.Wallet.PassphraseConfig = config.TestPassphraseConfig() + assert.Equal(t, defCfg, c) +} diff --git a/app/node/node.go b/app/node/node.go new file mode 100644 index 0000000000..97a8dc7153 --- /dev/null +++ b/app/node/node.go @@ -0,0 +1,368 @@ +package node + +import ( + "context" + "fmt" + "net" + "net/http" + "os" + "syscall" + + "contrib.go.opencensus.io/exporter/jaeger" + "github.com/awnumar/memguard" + "github.com/filecoin-project/go-jsonrpc" + "github.com/filecoin-project/venus-auth/cmd/jwtclient" + "github.com/filecoin-project/venus/app/submodule/blockstore" + chain2 "github.com/filecoin-project/venus/app/submodule/chain" + configModule "github.com/filecoin-project/venus/app/submodule/config" + "github.com/filecoin-project/venus/app/submodule/dagservice" + "github.com/filecoin-project/venus/app/submodule/discovery" + "github.com/filecoin-project/venus/app/submodule/market" + "github.com/filecoin-project/venus/app/submodule/mining" + "github.com/filecoin-project/venus/app/submodule/mpool" + "github.com/filecoin-project/venus/app/submodule/multisig" + apiwrapper "github.com/filecoin-project/venus/app/submodule/multisig/v0api" + network2 "github.com/filecoin-project/venus/app/submodule/network" + "github.com/filecoin-project/venus/app/submodule/paych" + "github.com/filecoin-project/venus/app/submodule/storagenetworking" + syncer2 "github.com/filecoin-project/venus/app/submodule/syncer" + "github.com/filecoin-project/venus/app/submodule/wallet" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/clock" + "github.com/filecoin-project/venus/pkg/config" + _ "github.com/filecoin-project/venus/pkg/crypto/bls" // enable bls signatures + _ "github.com/filecoin-project/venus/pkg/crypto/secp" // enable secp signatures + "github.com/filecoin-project/venus/pkg/jwtauth" + "github.com/filecoin-project/venus/pkg/metrics" + "github.com/filecoin-project/venus/pkg/repo" + cmds "github.com/ipfs/go-ipfs-cmds" + cmdhttp "github.com/ipfs/go-ipfs-cmds/http" + logging "github.com/ipfs/go-log/v2" + ma "github.com/multiformats/go-multiaddr" + manet "github.com/multiformats/go-multiaddr/net" + "github.com/pkg/errors" + "go.opencensus.io/tag" +) + +var log = logging.Logger("node") // nolint: deadcode + +// ConfigOpt mutates a node config post initialization +type ConfigOpt func(*config.Config) + +// APIPrefix is the prefix for the http version of the api. +const APIPrefix = "/api" + +// Node represents a full Filecoin node. +type Node struct { + + // offlineMode, when true, disables libp2p. + offlineMode bool + + // chainClock is a chainClock used by the node for chain epoch. + chainClock clock.ChainEpochClock + + // repo is the repo this node was created with. + // + // It contains all persistent artifacts of the filecoin node. + repo repo.Repo + + //moduls + circulatiingSupplyCalculator chain.ICirculatingSupplyCalcualtor + // + // Core services + // + configModule *configModule.ConfigModule + blockstore *blockstore.BlockstoreSubmodule + blockservice *dagservice.DagServiceSubmodule + network *network2.NetworkSubmodule + discovery *discovery.DiscoverySubmodule + + // + // Subsystems + // + chain *chain2.ChainSubmodule + syncer *syncer2.SyncerSubmodule + mining *mining.MiningModule + + // + // Supporting services + // + wallet *wallet.WalletSubmodule + multiSig *multisig.MultiSigSubmodule + mpool *mpool.MessagePoolSubmodule + storageNetworking *storagenetworking.StorageNetworkingSubmodule + + // paychannel and market + market *market.MarketSubmodule + paychan *paych.PaychSubmodule + + // + // Jsonrpc + // + jsonRPCService, jsonRPCServiceV1 *jsonrpc.RPCServer + + jaegerExporter *jaeger.Exporter + remoteAuth *jwtauth.RemoteAuth +} + +func (node *Node) Chain() *chain2.ChainSubmodule { + return node.chain +} + +func (node *Node) StorageNetworking() *storagenetworking.StorageNetworkingSubmodule { + return node.storageNetworking +} + +func (node *Node) Mpool() *mpool.MessagePoolSubmodule { + return node.mpool +} + +func (node *Node) Wallet() *wallet.WalletSubmodule { + return node.wallet +} + +func (node *Node) MultiSig() *multisig.MultiSigSubmodule { + return node.multiSig +} + +func (node *Node) Discovery() *discovery.DiscoverySubmodule { + return node.discovery +} + +func (node *Node) Network() *network2.NetworkSubmodule { + return node.network +} + +func (node *Node) Blockservice() *dagservice.DagServiceSubmodule { + return node.blockservice +} + +func (node *Node) Blockstore() *blockstore.BlockstoreSubmodule { + return node.blockstore +} + +func (node *Node) ConfigModule() *configModule.ConfigModule { + return node.configModule +} + +func (node *Node) Repo() repo.Repo { + return node.repo +} + +func (node *Node) ChainClock() clock.ChainEpochClock { + return node.chainClock +} + +func (node *Node) OfflineMode() bool { + return node.offlineMode +} + +// Start boots up the node. +func (node *Node) Start(ctx context.Context) error { + var err error + if err = metrics.RegisterPrometheusEndpoint(node.repo.Config().Observability.Metrics); err != nil { + return errors.Wrap(err, "failed to setup metrics") + } + + if node.jaegerExporter, err = metrics.RegisterJaeger(node.network.Host.ID().Pretty(), + node.repo.Config().Observability.Tracing); err != nil { + return errors.Wrap(err, "failed to setup tracing") + } + + var syncCtx context.Context + syncCtx, node.syncer.CancelChainSync = context.WithCancel(context.Background()) + + // Start node discovery + if err = node.discovery.Start(node.offlineMode); err != nil { + return err + } + + // start syncer module to receive new blocks and start sync to latest height + err = node.syncer.Start(syncCtx) + if err != nil { + return err + } + + // Start mpool module to receive new message + err = node.mpool.Start(syncCtx) + if err != nil { + return err + } + + err = node.paychan.Start(ctx) + if err != nil { + return err + } + + return nil +} + +// Stop initiates the shutdown of the node. +func (node *Node) Stop(ctx context.Context) { + // stop mpool submodule + log.Infof("shutting down mpool...") + node.mpool.Stop(ctx) + + // stop syncer submodule + log.Infof("shutting down chain syncer...") + node.syncer.Stop(ctx) + + // Stop discovery submodule + log.Infof("shutting down discovery...") + node.discovery.Stop() + + // Stop network submodule + log.Infof("shutting down network...") + node.network.Stop(ctx) + + // Stop chain submodule + log.Infof("shutting down chain...") + node.chain.Stop(ctx) + + // Stop paychannel submodule + log.Infof("shutting down pay channel...") + node.paychan.Stop() + + // Stop market submodule + // node.market.Stop() + + log.Infof("closing repository...") + if err := node.repo.Close(); err != nil { + fmt.Printf("error closing repo: %s\n", err) + } + + log.Infof("flushing system logs...") + sysNames := logging.GetSubsystems() + for _, name := range sysNames { + _ = logging.Logger(name).Sync() + } + + if node.jaegerExporter != nil { + node.jaegerExporter.Flush() + } +} + +// RunRPCAndWait start rpc server and listen to signal to exit +func (node *Node) RunRPCAndWait(ctx context.Context, rootCmdDaemon *cmds.Command, ready chan interface{}) error { + // Signal that the sever has started and then wait for a signal to stop. + cfg := node.repo.Config() + mAddr, err := ma.NewMultiaddr(cfg.API.APIAddress) + if err != nil { + return err + } + + // Listen on the configured address in order to bind the port number in case it has + // been configured as zero (i.e. OS-provided) + apiListener, err := manet.Listen(mAddr) // nolint + if err != nil { + return err + } + + netListener := manet.NetListener(apiListener) // nolint + mux := http.NewServeMux() + err = node.runRestfulAPI(ctx, mux, rootCmdDaemon) // nolint + if err != nil { + return err + } + + err = node.runJsonrpcAPI(ctx, mux) + if err != nil { + return err + } + + localVerifer, err := jwtauth.NewJwtAuth(node.repo) + if err != nil { + return err + } + + authMux := jwtclient.NewAuthMux(localVerifer, + node.remoteAuth, mux, logging.Logger("venus-auth")) + authMux.TrustHandle("/debug/pprof/", http.DefaultServeMux) + + // todo: + apikey, _ := tag.NewKey("api") + + apiserv := &http.Server{ + Handler: authMux, + BaseContext: func(listener net.Listener) context.Context { + ctx, _ := tag.New(context.Background(), + tag.Upsert(apikey, "venus")) + return ctx + }, + } + + go func() { + err := apiserv.Serve(netListener) // nolint + if err != nil && err != http.ErrServerClosed { + return + } + }() + + // Write the resolved API address to the repo + cfg.API.APIAddress = apiListener.Multiaddr().String() + if err := node.repo.SetAPIAddr(cfg.API.APIAddress); err != nil { + log.Error("Could not save API address to repo") + return err + } + + terminate := make(chan error, 1) + + // todo: design an genterfull + memguard.CatchSignal(func(signal os.Signal) { + log.Infof("received signal(%s), venus will shutdown...", signal.String()) + node.Stop(ctx) + log.Infof("venus shutdown gracefully ...") + _ = log.Sync() + memguard.Purge() + terminate <- nil + }, syscall.SIGTERM, os.Interrupt) + + close(ready) + return <-terminate +} + +// RunAPIAndWait starts an API server and waits for it to finish. +// The `ready` channel is closed when the server is running and its API address has been +// saved to the node's repo. +// A message sent to or closure of the `terminate` channel signals the server to stop. +func (node *Node) runRestfulAPI(ctx context.Context, handler *http.ServeMux, rootCmdDaemon *cmds.Command) error { + servenv := node.createServerEnv(ctx) + + apiConfig := node.repo.Config().API + cfg := cmdhttp.NewServerConfig() + cfg.APIPath = APIPrefix + cfg.SetAllowedOrigins(apiConfig.AccessControlAllowOrigin...) + cfg.SetAllowedMethods(apiConfig.AccessControlAllowMethods...) + cfg.SetAllowCredentials(apiConfig.AccessControlAllowCredentials) + cfg.AppendAllowHeaders("Authorization") + + handler.Handle(APIPrefix+"/", cmdhttp.NewHandler(servenv, rootCmdDaemon, cfg)) + return nil +} + +func (node *Node) runJsonrpcAPI(ctx context.Context, handler *http.ServeMux) error { // nolint + handler.Handle("/rpc/v0", node.jsonRPCService) + handler.Handle("/rpc/v1", node.jsonRPCServiceV1) + return nil +} + +// createServerEnv create server for cmd server env +func (node *Node) createServerEnv(ctx context.Context) *Env { + env := Env{ + ctx: ctx, + InspectorAPI: NewInspectorAPI(node.repo), + BlockStoreAPI: node.blockstore.API(), + ChainAPI: node.chain.API(), + NetworkAPI: node.network.API(), + StorageNetworkingAPI: node.storageNetworking.API(), + SyncerAPI: node.syncer.API(), + WalletAPI: node.wallet.API(), + MingingAPI: node.mining.API(), + MessagePoolAPI: node.mpool.API(), + PaychAPI: node.paychan.API(), + MarketAPI: node.market.API(), + MultiSigAPI: &apiwrapper.WrapperV1IMultiSig{IMultiSig: node.multiSig.API(), IMessagePool: node.mpool.API()}, + } + + return &env +} diff --git a/app/node/rpc.go b/app/node/rpc.go new file mode 100644 index 0000000000..b4af905ba5 --- /dev/null +++ b/app/node/rpc.go @@ -0,0 +1,135 @@ +package node + +import ( + "reflect" + + "github.com/filecoin-project/go-jsonrpc" + "github.com/filecoin-project/venus/app/client" + "github.com/filecoin-project/venus/app/client/funcrule" + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + "github.com/ipfs-force-community/metrics/ratelimit" + "golang.org/x/xerrors" +) + +type RPCService interface { +} + +type RPCBuilder struct { + namespace []string + v0APIStruct []interface{} + v1APIStruct []interface{} +} + +func NewBuilder() *RPCBuilder { + return &RPCBuilder{} +} + +func (builder *RPCBuilder) NameSpace(nameSpaece string) *RPCBuilder { + builder.namespace = append(builder.namespace, nameSpaece) + return builder +} +func (builder *RPCBuilder) AddServices(services ...RPCService) error { + for _, service := range services { + err := builder.AddService(service) + if err != nil { + return err + } + } + return nil +} +func (builder *RPCBuilder) AddService(service RPCService) error { + methodName := "V0API" + + serviceV := reflect.ValueOf(service) + apiMethod := serviceV.MethodByName(methodName) + if !apiMethod.IsValid() { + return xerrors.New("expect API function") + } + + apiImpls := apiMethod.Call([]reflect.Value{}) + + for _, apiImpl := range apiImpls { + rt := reflect.TypeOf(apiImpl) + rv := reflect.ValueOf(apiImpl) + if rt.Kind() == reflect.Array { + apiLen := rv.Len() + for i := 0; i < apiLen; i++ { + ele := rv.Index(i) + if ele.IsValid() { + builder.v0APIStruct = append(builder.v0APIStruct, apiImpl.Interface()) + } + } + } else { + builder.v0APIStruct = append(builder.v0APIStruct, apiImpl.Interface()) + } + } + + methodName = "API" + serviceV = reflect.ValueOf(service) + apiMethod = serviceV.MethodByName(methodName) + if !apiMethod.IsValid() { + return xerrors.New("expect API function") + } + + apiImpls = apiMethod.Call([]reflect.Value{}) + + for _, apiImpl := range apiImpls { + rt := reflect.TypeOf(apiImpl) + rv := reflect.ValueOf(apiImpl) + if rt.Kind() == reflect.Array { + apiLen := rv.Len() + for i := 0; i < apiLen; i++ { + ele := rv.Index(i) + if ele.IsValid() { + builder.v1APIStruct = append(builder.v1APIStruct, apiImpl.Interface()) + } + } + } else { + builder.v1APIStruct = append(builder.v1APIStruct, apiImpl.Interface()) + } + } + return nil +} + +func (builder *RPCBuilder) Build(version string, limiter *ratelimit.RateLimiter) *jsonrpc.RPCServer { + serverOptions := make([]jsonrpc.ServerOption, 0) + serverOptions = append(serverOptions, jsonrpc.WithProxyBind(jsonrpc.PBMethod)) + + server := jsonrpc.NewServer(serverOptions...) + switch version { + case "v0": + var fullNodeV0 v0api.FullNodeStruct + for _, apiStruct := range builder.v0APIStruct { + funcrule.PermissionProxy(apiStruct, &fullNodeV0) + } + + if limiter != nil { + var rateLimitAPI v0api.FullNodeStruct + limiter.WraperLimiter(fullNodeV0, &rateLimitAPI) + fullNodeV0 = rateLimitAPI + } + + for _, nameSpace := range builder.namespace { + server.Register(nameSpace, &fullNodeV0) + } + case "v1": + var fullNode client.FullNodeStruct + for _, apiStruct := range builder.v1APIStruct { + funcrule.PermissionProxy(apiStruct, &fullNode) + } + + if limiter != nil { + var rateLimitAPI client.FullNodeStruct + limiter.WraperLimiter(fullNode, &rateLimitAPI) + fullNode = rateLimitAPI + } + + for _, nameSpace := range builder.namespace { + server.Register(nameSpace, &fullNode) + } + default: + panic("invalid version: " + version) + } + + return server +} diff --git a/app/node/rpc_test.go b/app/node/rpc_test.go new file mode 100644 index 0000000000..f6a8fdd7c6 --- /dev/null +++ b/app/node/rpc_test.go @@ -0,0 +1,173 @@ +package node + +import ( + "bytes" + "context" + "encoding/json" + "github.com/filecoin-project/venus/app/client/funcrule" + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" + + "github.com/filecoin-project/go-jsonrpc" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/stretchr/testify/require" + "gotest.tools/assert" +) + +func TestWsBuilder(t *testing.T) { + tf.UnitTest(t) + + nameSpace := "Test" + builder := NewBuilder().NameSpace(nameSpace) + err := builder.AddServices(&tmodule1{}, &tmodule2{}) + require.NoError(t, err) + + server := mockBuild(builder) + testServ := httptest.NewServer(server) + defer testServ.Close() + var client FullAdapter + closer, err := jsonrpc.NewClient( + context.Background(), + "ws://"+testServ.Listener.Addr().String(), + nameSpace, + &client, + nil) + require.NoError(t, err) + defer closer() + + result, err := client.Test1(context.Background()) + require.NoError(t, err) + assert.Equal(t, result, "test") +} + +func TestJsonrpc(t *testing.T) { + tf.UnitTest(t) + + nameSpace := "Test" + builder := NewBuilder().NameSpace(nameSpace) + err := builder.AddService(&tmodule1{}) + require.NoError(t, err) + + server := mockBuild(builder) + testServ := httptest.NewServer(server) + defer testServ.Close() + + http.Handle("/rpc/v1", server) + + req := struct { + Jsonrpc string `json:"jsonrpc"` + ID int64 `json:"id,omitempty"` + Method string `json:"method"` + Meta map[string]string `json:"meta,omitempty"` + }{ + Jsonrpc: "2.0", + ID: 1, + Method: "Test.Test1", + } + reqBytes, err := json.Marshal(req) + require.NoError(t, err) + httpRes, err := http.Post("http://"+testServ.Listener.Addr().String()+"/rpc/v1", "", bytes.NewReader(reqBytes)) + require.NoError(t, err) + assert.Equal(t, httpRes.Status, "200 OK") + result, err := ioutil.ReadAll(httpRes.Body) + require.NoError(t, err) + res := struct { + Result string `json:"result"` + }{} + err = json.Unmarshal(result, &res) + require.NoError(t, err) + assert.Equal(t, res.Result, "test") +} + +type tmodule1 struct { +} + +func (m *tmodule1) V0API() MockAPI1 { //nolint + return &mockAPI1{} +} + +func (m *tmodule1) API() MockAPI1 { //nolint + return &mockAPI1{} +} + +type tmodule2 struct { +} + +func (m *tmodule2) V0API() MockAPI2 { //nolint + return &mockAPI2{} +} + +func (m *tmodule2) API() MockAPI2 { //nolint + return &mockAPI2{} +} + +var _ MockAPI1 = &mockAPI1{} + +type MockAPI1 interface { + Test1(ctx context.Context) (string, error) +} + +type MockAPI2 interface { + Test2(ctx context.Context) error +} +type mockAPI1 struct { +} + +func (m *mockAPI1) Test1(ctx context.Context) (string, error) { + return "test", nil +} + +var _ MockAPI2 = &mockAPI2{} + +type mockAPI2 struct { +} + +func (m *mockAPI2) Test2(ctx context.Context) error { + return nil +} + +type FullAdapter struct { + CommonAdapter + Adapter2 +} + +func (f *FullAdapter) Test1(ctx context.Context) (string, error) { + return f.CommonAdapter.Internal.Test1(ctx) +} + +type CommonAdapter struct { + Adapter1 +} +type Adapter1 struct { + Internal struct { + Test1 func(ctx context.Context) (string, error) `perm:"read"` + } +} + +func (adp *Adapter1) Test1(ctx context.Context) (string, error) { + return adp.Internal.Test1(ctx) +} + +type Adapter2 struct { + Internal struct { + Test2 func(ctx context.Context) (string, error) `perm:"read"` + } +} + +func (adp *Adapter2) Test2(ctx context.Context) (string, error) { + return adp.Internal.Test2(ctx) +} + +func mockBuild(builder *RPCBuilder) *jsonrpc.RPCServer { + server := jsonrpc.NewServer(jsonrpc.WithProxyBind(jsonrpc.PBField)) + var fullNode FullAdapter + for _, apiStruct := range builder.v1APIStruct { + funcrule.PermissionProxy(apiStruct, &fullNode) + } + for _, nameSpace := range builder.namespace { + server.Register(nameSpace, &fullNode) + } + return server +} diff --git a/app/node/test/api.go b/app/node/test/api.go new file mode 100644 index 0000000000..0eb2d0c7b7 --- /dev/null +++ b/app/node/test/api.go @@ -0,0 +1,154 @@ +package test + +import ( + "context" + "encoding/json" + "fmt" + "github.com/filecoin-project/venus/cmd" + "os" + "strings" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/app/node" + th "github.com/filecoin-project/venus/pkg/testhelpers" +) + +// NodeAPI wraps an in-process Node to provide a command API server and client for testing. +type NodeAPI struct { + node *node.Node + tb testing.TB +} + +// NewNodeAPI creates a wrangler for a node. +func NewNodeAPI(node *node.Node, tb testing.TB) *NodeAPI { + return &NodeAPI{node, tb} +} + +// RunNodeAPI creates a new API server and `Run()`s it. +func RunNodeAPI(ctx context.Context, node *node.Node, tb testing.TB) (client *Client, stop func()) { + api := NewNodeAPI(node, tb) + return api.Run(ctx) +} + +// Node returns the node backing the API. +func (a *NodeAPI) Node() *node.Node { + return a.node +} + +// Run start s a command API server for the node. +// Returns a client proxy and a function to terminate the NodeAPI server. +func (a *NodeAPI) Run(ctx context.Context) (client *Client, stop func()) { + ready := make(chan interface{}) + ctx, cancel := context.WithCancel(ctx) + go func() { + err := a.node.RunRPCAndWait(ctx, cmd.RootCmdDaemon, ready) + require.NoError(a.tb, err) + }() + <-ready + + addr, err := a.node.Repo().APIAddr() + require.NoError(a.tb, err) + require.NotEmpty(a.tb, addr, "empty API address") + + token, err := a.node.Repo().APIToken() + require.NoError(a.tb, err) + return &Client{addr, token, a.tb}, func() { + cancel() + } +} + +// Client is an in-process client to a command API. +type Client struct { + address string + token string + tb testing.TB +} + +// Address returns the address string to which the client sends command RPCs. +func (c *Client) Address() string { + return c.address +} + +func (c *Client) run(ctx context.Context, command ...string) (*th.CmdOutput, int, error) { + c.tb.Helper() + args := []string{ + "venus", // A dummy first arg is required, simulating shell invocation. + fmt.Sprintf("--cmdapiaddr=%s", c.address), + fmt.Sprintf("--token=%s", c.token), + } + args = append(args, command...) + + // Create pipes for the client to write stdout and stderr. + readStdOut, writeStdOut, err := os.Pipe() + require.NoError(c.tb, err) + readStdErr, writeStdErr, err := os.Pipe() + require.NoError(c.tb, err) + var readStdin *os.File // no stdin needed + + exitCode, err := cmd.Run(ctx, args, readStdin, writeStdOut, writeStdErr) + // Close the output side of the pipes so that ReadAll() on the read ends can complete. + require.NoError(c.tb, writeStdOut.Close()) + require.NoError(c.tb, writeStdErr.Close()) + + out := th.ReadOutput(c.tb, command, readStdOut, readStdErr) + + return out, exitCode, err +} + +// Run runs a CLI command and returns its output. +func (c *Client) Run(ctx context.Context, command ...string) *th.CmdOutput { + out, exitCode, err := c.run(ctx, command...) + if err != nil { + out.SetInvocationError(err) + } else { + out.SetStatus(exitCode) + } + require.NoError(c.tb, err, "client execution error") + + return out +} + +// RunSuccess runs a command and asserts that it succeeds (status of zero and logs no errors). +func (c *Client) RunSuccess(ctx context.Context, command ...string) *th.CmdOutput { + output := c.Run(ctx, command...) + output.AssertSuccess() + return output +} + +// RunFail runs a command and asserts that it fails with a specified message on stderr. +func (c *Client) RunFail(ctx context.Context, err string, command ...string) *th.CmdOutput { + output, exitCode, _ := c.run(ctx, command...) + output.SetStatus(exitCode) + output.AssertFail(err) + return output +} + +// RunJSON runs a command, asserts success, and parses the response as JSON. +func (c *Client) RunJSON(ctx context.Context, command ...string) map[string]interface{} { + out := c.RunSuccess(ctx, command...) + var parsed map[string]interface{} + require.NoError(c.tb, json.Unmarshal([]byte(out.ReadStdout()), &parsed)) + return parsed +} + +// RunMarshaledJSON runs a command, asserts success, and marshals the JSON response. +func (c *Client) RunMarshaledJSON(ctx context.Context, result interface{}, command ...string) { + out := c.RunSuccess(ctx, command...) + require.NoError(c.tb, json.Unmarshal([]byte(out.ReadStdout()), &result)) +} + +// RunSuccessFirstLine executes the given command, asserts success and returns +// the first line of stdout. +func (c *Client) RunSuccessFirstLine(ctx context.Context, args ...string) string { + return c.RunSuccessLines(ctx, args...)[0] +} + +// RunSuccessLines executes the given command, asserts success and returns +// an array of lines of the stdout. +func (c *Client) RunSuccessLines(ctx context.Context, args ...string) []string { + output := c.RunSuccess(ctx, args...) + result := output.ReadStdoutTrimNewlines() + return strings.Split(result, "\n") +} diff --git a/app/node/test/builder.go b/app/node/test/builder.go new file mode 100644 index 0000000000..24e8febdaa --- /dev/null +++ b/app/node/test/builder.go @@ -0,0 +1,141 @@ +package test + +import ( + "context" + "github.com/filecoin-project/venus/pkg/jwtauth" + "testing" + + "github.com/filecoin-project/venus/pkg/wallet" + + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/genesis" + "github.com/filecoin-project/venus/pkg/repo" + gengen "github.com/filecoin-project/venus/tools/gengen/util" +) + +// NodeBuilder creates and configures Filecoin nodes for in-process testing. +// This is intended to replace use of GenNode and the various other node construction entry points +// that end up there. +// Note that (August 2019) there are two things called "config": the configuration read in from +// file to the config.configModule structure, and node.configModule which is really just some dependency +// injection. This builder avoids exposing the latter directly. +type NodeBuilder struct { + // Initialisation function for the genesis block and state. + gif genesis.InitFunc + // Options to the repo initialisation. + initOpts []node.InitOpt + // Mutations to be applied to node config after initialisation. + configMutations []node.ConfigOpt + // Mutations to be applied to the node builder config before building. + builderOpts []node.BuilderOpt + + tb testing.TB +} + +// NewNodeBuilder creates a new node builder. +func NewNodeBuilder(tb testing.TB) *NodeBuilder { + return &NodeBuilder{ + gif: gengen.MakeGenesisFunc(gengen.NetworkName("gfctest")), + initOpts: []node.InitOpt{}, + configMutations: []node.ConfigOpt{ + // Default configurations that make sense for integration tests. + // The can be overridden by subsequent `withConfigChanges`. + node.ConfigOpt(func(c *config.Config) { + // Bind only locally, defer port selection until binding. + c.API.APIAddress = "/ip4/127.0.0.1/tcp/0" + c.Swarm.Address = "/ip4/0.0.0.0/tcp/0" + }), + node.ConfigOpt(func(c *config.Config) { + c.Bootstrap.MinPeerThreshold = 0 + }), + }, + builderOpts: []node.BuilderOpt{ + node.SetWalletPassword(wallet.TestPassword), + }, + tb: tb, + } +} + +// WithGenesisInit sets the built nodes' genesis function. +func (b *NodeBuilder) WithGenesisInit(gif genesis.InitFunc) *NodeBuilder { + b.gif = gif + return b +} + +// WithInitOpt adds one or more options to repo initialisation. +func (b *NodeBuilder) WithInitOpt(opts ...node.InitOpt) *NodeBuilder { + b.initOpts = append(b.initOpts, opts...) + return b +} + +// WithBuilderOpt adds one or more node building options to node creation. +func (b *NodeBuilder) WithBuilderOpt(opts ...node.BuilderOpt) *NodeBuilder { + b.builderOpts = append(b.builderOpts, opts...) + return b +} + +// WithConfig adds a configuration mutation function to be invoked after repo initialisation. +func (b *NodeBuilder) WithConfig(cm node.ConfigOpt) *NodeBuilder { + b.configMutations = append(b.configMutations, cm) + return b +} + +// Build creates a node as specified by this builder. +// This many be invoked multiple times to create many nodes. +func (b *NodeBuilder) Build(ctx context.Context) *node.Node { + // Initialise repo. + repo := repo.NewInMemoryRepo() + + for _, opt := range b.configMutations { + opt(repo.Config()) + } + b.requireNoError(node.Init(ctx, repo, b.gif, b.initOpts...)) + + // Initialize the node. + repoConfigOpts, err := node.OptionsFromRepo(repo) + b.requireNoError(err) + _, err = jwtauth.NewJwtAuth(repo) + b.requireNoError(err) + nd, err := node.New(ctx, append(repoConfigOpts, b.builderOpts...)...) + b.requireNoError(err) + return nd +} + +// BuildAndStart build a node and starts it. +func (b *NodeBuilder) BuildAndStart(ctx context.Context) *node.Node { + n := b.Build(ctx) + err := n.Start(ctx) + b.requireNoError(err) + return n +} + +// BuildAndStartAPI is a convenience function composing BuildAndStart with +// RunNodeAPI +func (b *NodeBuilder) BuildAndStartAPI(ctx context.Context) (*node.Node, *Client, func()) { + n := b.BuildAndStart(ctx) + c, apiDone := RunNodeAPI(ctx, n, b.tb) + done := func() { + apiDone() + n.Stop(ctx) + } + return n, c, done +} + +func (b *NodeBuilder) requireNoError(err error) { + b.tb.Helper() + require.NoError(b.tb, err) +} + +// BuildMany builds numNodes nodes with the builder's configuration. +func (b *NodeBuilder) BuildMany(ctx context.Context, numNodes int) []*node.Node { + var out []*node.Node + for i := 0; i < numNodes; i++ { + nd := b.Build(ctx) + out = append(out, nd) + } + + return out +} diff --git a/app/node/test/node.go b/app/node/test/node.go new file mode 100644 index 0000000000..1ecd417cc0 --- /dev/null +++ b/app/node/test/node.go @@ -0,0 +1,226 @@ +package test + +import ( + "context" + "math/rand" + "testing" + + ds "github.com/ipfs/go-datastore" + blockstore "github.com/ipfs/go-ipfs-blockstore" + cbor "github.com/ipfs/go-ipld-cbor" + "github.com/libp2p/go-libp2p-core/crypto" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/fixtures/fortest" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper/impl" + "github.com/filecoin-project/venus/pkg/wallet" + gengen "github.com/filecoin-project/venus/tools/gengen/util" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// ChainSeed is a generalized struct for configuring node +type ChainSeed struct { + info *gengen.RenderedGenInfo + bstore blockstore.Blockstore +} + +// MakeChainSeed creates a chain seed struct (see above) from a given +// genesis config +func MakeChainSeed(t *testing.T, cfg *gengen.GenesisCfg) *ChainSeed { + t.Helper() + + mds := ds.NewMapDatastore() + bstore := blockstore.NewBlockstore(mds) + info, err := gengen.GenGen(context.TODO(), cfg, bstore) + require.NoError(t, err) + return &ChainSeed{ + info: info, + bstore: bstore, + } +} + +// GenesisInitFunc is a th.GenesisInitFunc using the chain seed +func (cs *ChainSeed) GenesisInitFunc(cst cbor.IpldStore, bs blockstore.Blockstore) (*types.BlockHeader, error) { + err := blockstoreutil.CopyBlockstore(context.TODO(), cs.bstore, bs) + if err != nil { + return nil, err + } + + var blk types.BlockHeader + if err := cst.Get(context.TODO(), cs.info.GenesisCid, &blk); err != nil { + return nil, err + } + + return &blk, nil +} + +// GiveKey gives the given key to the given node +func (cs *ChainSeed) GiveKey(ctx context.Context, t *testing.T, nd *node.Node, key int) address.Address { + t.Helper() + bcks := nd.Wallet().Wallet.Backends(wallet.DSBackendType) + require.Len(t, bcks, 1, "expected to get exactly one datastore backend") + + dsb := bcks[0].(*wallet.DSBackend) + _ = dsb.SetPassword(ctx, wallet.TestPassword) + kinfo := cs.info.Keys[key] + require.NoError(t, dsb.ImportKey(ctx, kinfo)) + + addr, err := kinfo.Address() + require.NoError(t, err) + + return addr +} + +// GiveMiner gives the specified miner to the node. Returns the address and the owner addresss +func (cs *ChainSeed) GiveMiner(t *testing.T, nd *node.Node, which int) (address.Address, address.Address) { + t.Helper() + cfg := nd.Repo().Config() + m := cs.info.Miners[which] + + require.NoError(t, nd.Repo().ReplaceConfig(cfg)) + + ownerAddr, err := cs.info.Keys[m.Owner].Address() + require.NoError(t, err) + + return m.Address, ownerAddr +} + +// Addr returns the address for the given key +func (cs *ChainSeed) Addr(t *testing.T, key int) address.Address { + t.Helper() + k := cs.info.Keys[key] + + a, err := k.Address() + if err != nil { + t.Fatal(err) + } + + return a +} + +// MinerInitOpt is a node init option that imports the key for the miner's owner +func (cs *ChainSeed) MinerInitOpt(which int) node.InitOpt { + kwhich := cs.info.Miners[which].Owner + kinfo := cs.info.Keys[kwhich] + return node.ImportKeyOpt(kinfo) +} + +// KeyInitOpt is a node init option that imports one of the chain seed's +// keys to a node's wallet +func (cs *ChainSeed) KeyInitOpt(which int) node.InitOpt { + kinfo := cs.info.Keys[which] + return node.ImportKeyOpt(kinfo) +} + +// FixtureChainSeed returns the genesis function that +func FixtureChainSeed(t *testing.T) *ChainSeed { + return MakeChainSeed(t, &fortest.TestGenGenConfig) +} + +// DefaultAddressConfigOpt is a node config option setting the default address +func DefaultAddressConfigOpt(addr address.Address) node.ConfigOpt { + return func(cfg *config.Config) { + cfg.Wallet.DefaultAddress = addr + } +} + +// ConnectNodes connects two nodes together +func ConnectNodes(t *testing.T, a, b *node.Node) { + t.Helper() + pi := peer.AddrInfo{ + ID: b.Network().Host.ID(), + Addrs: b.Network().Host.Addrs(), + } + + err := a.Network().Host.Connect(context.TODO(), pi) + if err != nil { + t.Fatal(err) + } +} + +// FakeProofVerifierBuilderOpts returns default configuration for testing +func FakeProofVerifierBuilderOpts() []node.BuilderOpt { + return []node.BuilderOpt{ + node.VerifierConfigOption(&impl.FakeVerifier{}), + } +} + +// StartNodes starts some nodes, failing on any error. +func StartNodes(t *testing.T, nds []*node.Node) { + t.Helper() + for _, nd := range nds { + if err := nd.Start(context.Background()); err != nil { + t.Fatal(err) + } + } +} + +// StopNodes initiates shutdown of some nodes. +func StopNodes(nds []*node.Node) { + for _, nd := range nds { + nd.Stop(context.Background()) + } +} + +// MustCreateStorageMinerResult contains the result of a CreateStorageMiner command +type MustCreateStorageMinerResult struct { + MinerAddress *address.Address + Err error +} + +// PeerKeys are a list of keys for peers that can be used in testing. +var PeerKeys = []crypto.PrivKey{ + mustGenKey(101), + mustGenKey(102), +} + +// MakeTestGenCfg returns a genesis configuration used for tests. +// This config has one miner with numSectors sectors and two accounts, +// the first is the miner's owner/worker and the accounts both have 10000 FIL +func MakeTestGenCfg(t *testing.T, numSectors int) *gengen.GenesisCfg { + commCfgs, err := gengen.MakeCommitCfgs(numSectors) + require.NoError(t, err) + return &gengen.GenesisCfg{ + KeysToGen: 2, + Miners: []*gengen.CreateStorageMinerConfig{ + { + Owner: 0, + PeerID: mustPeerID(PeerKeys[0]).Pretty(), + CommittedSectors: commCfgs, + SealProofType: constants.DevSealProofType, + MarketBalance: abi.NewTokenAmount(0), + }, + }, + Network: "gfctest", + PreallocatedFunds: []string{ + "10000", + "10000", + }, + } +} + +func mustGenKey(seed int64) crypto.PrivKey { + r := rand.New(rand.NewSource(seed)) + priv, _, err := crypto.GenerateEd25519Key(r) + if err != nil { + panic(err) + } + + return priv +} + +func mustPeerID(k crypto.PrivKey) peer.ID { + pid, err := peer.IDFromPrivateKey(k) + if err != nil { + panic(err) + } + return pid +} diff --git a/app/node/test/setup.go b/app/node/test/setup.go new file mode 100644 index 0000000000..ccd4fe791b --- /dev/null +++ b/app/node/test/setup.go @@ -0,0 +1,81 @@ +package test + +import ( + "context" + "encoding/json" + "os" + "testing" + "time" + + "github.com/filecoin-project/go-address" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/build/project" + "github.com/filecoin-project/venus/pkg/clock" + "github.com/filecoin-project/venus/pkg/constants" + gengen "github.com/filecoin-project/venus/tools/gengen/util" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" +) + +const blockTime = builtin.EpochDurationSeconds * time.Second + +func CreateBootstrapSetup(t *testing.T) (*ChainSeed, *gengen.GenesisCfg, clock.ChainEpochClock) { + // set up paths and fake clock. + genTime := int64(1000000000) + fakeClock := clock.NewFake(time.Unix(genTime, 0)) + + // Load genesis config fixture. + genCfgPath := project.Root("fixtures/setup.json") + genCfg := loadGenesisConfig(t, genCfgPath) + genCfg.Miners = append(genCfg.Miners, &gengen.CreateStorageMinerConfig{ + Owner: 5, + SealProofType: constants.DevSealProofType, + }) + seed := MakeChainSeed(t, genCfg) + chainClock := clock.NewChainClockFromClock(uint64(genTime), blockTime, fakeClock) + + return seed, genCfg, chainClock +} + +func CreateBootstrapMiner(ctx context.Context, t *testing.T, seed *ChainSeed, chainClock clock.ChainEpochClock, genCfg *gengen.GenesisCfg) *node.Node { + // create bootstrap miner + bootstrapMiner := NewNodeBuilder(t). + WithGenesisInit(seed.GenesisInitFunc). + WithBuilderOpt(FakeProofVerifierBuilderOpts()...). + WithBuilderOpt(node.ChainClockConfigOption(chainClock)). + WithBuilderOpt(node.MonkeyPatchSetProofTypeOption(constants.DevRegisteredSealProof)). + Build(ctx) + + addr := seed.GiveKey(ctx, t, bootstrapMiner, 0) + err := bootstrapMiner.ConfigModule().API().ConfigSet(ctx, "walletModule.defaultAddress", addr.String()) + require.NoError(t, err) + + _, _, err = initNodeGenesisMiner(ctx, t, bootstrapMiner, seed, genCfg.Miners[0].Owner) + require.NoError(t, err) + err = bootstrapMiner.Start(ctx) + require.NoError(t, err) + + return bootstrapMiner +} + +func initNodeGenesisMiner(ctx context.Context, t *testing.T, nd *node.Node, seed *ChainSeed, minerIdx int) (address.Address, address.Address, error) { + seed.GiveKey(ctx, t, nd, minerIdx) + miner, owner := seed.GiveMiner(t, nd, 0) + + return miner, owner, nil +} + +func loadGenesisConfig(t *testing.T, path string) *gengen.GenesisCfg { + configFile, err := os.Open(path) + if err != nil { + t.Errorf("failed to open config file %s: %s", path, err) + } + defer func() { _ = configFile.Close() }() + + var cfg gengen.GenesisCfg + if err := json.NewDecoder(configFile).Decode(&cfg); err != nil { + t.Errorf("failed to parse config: %s", err) + } + return &cfg +} diff --git a/app/paths/paths.go b/app/paths/paths.go new file mode 100644 index 0000000000..f0ed01f94d --- /dev/null +++ b/app/paths/paths.go @@ -0,0 +1,26 @@ +package paths + +import ( + "github.com/mitchellh/go-homedir" + "os" +) + +// node repo path defaults +const filPathVar = "VENUS_PATH" +const defaultRepoDir = "~/.venus" + +// GetRepoPath returns the path of the venus repo from a potential override +// string, the VENUS_PATH environment variable and a default of ~/.venus/repo. +func GetRepoPath(override string) (string, error) { + // override is first precedence + if override != "" { + return homedir.Expand(override) + } + // Environment variable is second precedence + envRepoDir := os.Getenv(filPathVar) + if envRepoDir != "" { + return homedir.Expand(envRepoDir) + } + // Default is third precedence + return homedir.Expand(defaultRepoDir) +} diff --git a/app/paths/paths_test.go b/app/paths/paths_test.go new file mode 100644 index 0000000000..67f0561ba2 --- /dev/null +++ b/app/paths/paths_test.go @@ -0,0 +1,18 @@ +package paths + +import ( + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/stretchr/testify/require" +) + +func TestRepoPathGet(t *testing.T) { + tf.UnitTest(t) + + t.Run("get default repo path", func(t *testing.T) { + _, err := GetRepoPath("") + + require.NoError(t, err) + }) +} diff --git a/app/submodule/apitypes/blockstore.go b/app/submodule/apitypes/blockstore.go new file mode 100644 index 0000000000..96bb394be7 --- /dev/null +++ b/app/submodule/apitypes/blockstore.go @@ -0,0 +1,6 @@ +package apitypes + +type ObjStat struct { + Size uint64 + Links uint64 +} diff --git a/app/submodule/apitypes/chain.go b/app/submodule/apitypes/chain.go new file mode 100644 index 0000000000..5a7b7205e4 --- /dev/null +++ b/app/submodule/apitypes/chain.go @@ -0,0 +1,90 @@ +package apitypes + +import ( + "time" + + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type Partition struct { + AllSectors bitfield.BitField + FaultySectors bitfield.BitField + RecoveringSectors bitfield.BitField + LiveSectors bitfield.BitField + ActiveSectors bitfield.BitField +} + +// SectorInfo provides information about a sector construction +type SectorInfo struct { + Size abi.SectorSize + MaxPieceSize abi.UnpaddedPieceSize +} + +// ProtocolParams contains parameters that modify the filecoin nodes protocol +type ProtocolParams struct { + Network string + BlockTime time.Duration + SupportedSectors []SectorInfo +} + +type Deadline struct { + PostSubmissions bitfield.BitField + DisputableProofCount uint64 +} + +// BlsMessages[x].cid = Cids[x] +// SecpkMessages[y].cid = Cids[BlsMessages.length + y] +type BlockMessages struct { + BlsMessages []*types.Message + SecpkMessages []*types.SignedMessage + Cids []cid.Cid +} + +type MarketDeal struct { + Proposal market.DealProposal + State market.DealState +} + +type NetworkName string + +type MinerSectors struct { + // Live sectors that should be proven. + Live uint64 + // Sectors actively contributing to power. + Active uint64 + // Sectors with failed proofs. + Faulty uint64 +} + +type MarketBalance struct { + Escrow big.Int + Locked big.Int +} + +var MarketBalanceNil = MarketBalance{} + +type Message struct { + Cid cid.Cid + Message *types.Message +} + +type MinerPower struct { + MinerPower power.Claim + TotalPower power.Claim + HasMinPower bool +} + +type DealCollateralBounds struct { + Min abi.TokenAmount + Max abi.TokenAmount +} + +type MsgLookup = chain.MsgLookup diff --git a/app/submodule/apitypes/checkstatuscode_string.go b/app/submodule/apitypes/checkstatuscode_string.go new file mode 100644 index 0000000000..afd2cf5734 --- /dev/null +++ b/app/submodule/apitypes/checkstatuscode_string.go @@ -0,0 +1,35 @@ +// Code generated by "stringer -type=CheckStatusCode -trimprefix=CheckStatus"; DO NOT EDIT. + +package apitypes + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[CheckStatusMessageSerialize-1] + _ = x[CheckStatusMessageSize-2] + _ = x[CheckStatusMessageValidity-3] + _ = x[CheckStatusMessageMinGas-4] + _ = x[CheckStatusMessageMinBaseFee-5] + _ = x[CheckStatusMessageBaseFee-6] + _ = x[CheckStatusMessageBaseFeeLowerBound-7] + _ = x[CheckStatusMessageBaseFeeUpperBound-8] + _ = x[CheckStatusMessageGetStateNonce-9] + _ = x[CheckStatusMessageNonce-10] + _ = x[CheckStatusMessageGetStateBalance-11] + _ = x[CheckStatusMessageBalance-12] +} + +const _CheckStatusCode_name = "MessageSerializeMessageSizeMessageValidityMessageMinGasMessageMinBaseFeeMessageBaseFeeMessageBaseFeeLowerBoundMessageBaseFeeUpperBoundMessageGetStateNonceMessageNonceMessageGetStateBalanceMessageBalance" + +var _CheckStatusCode_index = [...]uint8{0, 16, 27, 42, 55, 72, 86, 110, 134, 154, 166, 188, 202} + +func (i CheckStatusCode) String() string { + i -= 1 + if i < 0 || i >= CheckStatusCode(len(_CheckStatusCode_index)-1) { + return "CheckStatusCode(" + strconv.FormatInt(int64(i+1), 10) + ")" + } + return _CheckStatusCode_name[_CheckStatusCode_index[i]:_CheckStatusCode_index[i+1]] +} diff --git a/app/submodule/apitypes/mining.go b/app/submodule/apitypes/mining.go new file mode 100644 index 0000000000..aa8db82f9c --- /dev/null +++ b/app/submodule/apitypes/mining.go @@ -0,0 +1,32 @@ +package apitypes + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + proof2 "github.com/filecoin-project/specs-actors/v2/actors/runtime/proof" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type MiningBaseInfo struct { //nolint + MinerPower abi.StoragePower + NetworkPower abi.StoragePower + Sectors []builtin.SectorInfo + WorkerKey address.Address + SectorSize abi.SectorSize + PrevBeaconEntry types.BeaconEntry + BeaconEntries []types.BeaconEntry + EligibleForMining bool +} + +type BlockTemplate struct { + Miner address.Address + Parents types.TipSetKey + Ticket types.Ticket + Eproof *types.ElectionProof + BeaconValues []*types.BeaconEntry + Messages []*types.SignedMessage + Epoch abi.ChainEpoch + Timestamp uint64 + WinningPoStProof []proof2.PoStProof +} diff --git a/app/submodule/apitypes/mpool.go b/app/submodule/apitypes/mpool.go new file mode 100644 index 0000000000..a44bf2a665 --- /dev/null +++ b/app/submodule/apitypes/mpool.go @@ -0,0 +1,43 @@ +package apitypes + +import ( + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" +) + +type CheckStatusCode int + +//go:generate go run golang.org/x/tools/cmd/stringer -type=CheckStatusCode -trimprefix=CheckStatus +const ( + _ CheckStatusCode = iota + // Message Checks + CheckStatusMessageSerialize + CheckStatusMessageSize + CheckStatusMessageValidity + CheckStatusMessageMinGas + CheckStatusMessageMinBaseFee + CheckStatusMessageBaseFee + CheckStatusMessageBaseFeeLowerBound + CheckStatusMessageBaseFeeUpperBound + CheckStatusMessageGetStateNonce + CheckStatusMessageNonce + CheckStatusMessageGetStateBalance + CheckStatusMessageBalance +) + +type CheckStatus struct { + Code CheckStatusCode + OK bool + Err string + Hint map[string]interface{} +} + +type MessageCheckStatus struct { + Cid cid.Cid + CheckStatus +} + +type MessagePrototype struct { + Message types.Message + ValidNonce bool +} diff --git a/app/submodule/apitypes/network.go b/app/submodule/apitypes/network.go new file mode 100644 index 0000000000..30dd7ee616 --- /dev/null +++ b/app/submodule/apitypes/network.go @@ -0,0 +1,14 @@ +package apitypes + +import "github.com/filecoin-project/venus/pkg/constants" + +// Version provides various build-time information +type Version struct { + Version string + + // APIVersion is a binary encoded semver version of the remote implementing + // this api + // + // See APIVersion in build/version.go + APIVersion constants.Version +} diff --git a/app/submodule/apitypes/paych.go b/app/submodule/apitypes/paych.go new file mode 100644 index 0000000000..bc0dc3a2d4 --- /dev/null +++ b/app/submodule/apitypes/paych.go @@ -0,0 +1,29 @@ +package apitypes + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/specs-actors/actors/builtin/paych" + "github.com/ipfs/go-cid" +) + +type ChannelInfo struct { + Channel address.Address + WaitSentinel cid.Cid +} + +type PaymentInfo struct { + Channel address.Address + WaitSentinel cid.Cid + Vouchers []*paych.SignedVoucher +} + +type VoucherSpec struct { + Amount big.Int + TimeLockMin abi.ChainEpoch + TimeLockMax abi.ChainEpoch + MinSettle abi.ChainEpoch + + Extra *paych.ModVerifyParams +} diff --git a/app/submodule/apitypes/syncer.go b/app/submodule/apitypes/syncer.go new file mode 100644 index 0000000000..49452eb58b --- /dev/null +++ b/app/submodule/apitypes/syncer.go @@ -0,0 +1,67 @@ +package apitypes + +import ( + "fmt" + "time" + + "github.com/filecoin-project/go-state-types/abi" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" +) + +type ComputeStateOutput struct { + Root cid.Cid + Trace []*apitypes.InvocResult +} + +type SyncState struct { + ActiveSyncs []ActiveSync + + VMApplied uint64 +} + +//just compatible code lotus +type SyncStateStage int + +const ( + StageIdle = SyncStateStage(iota) + StageHeaders + StagePersistHeaders + StageMessages + StageSyncComplete + StageSyncErrored + StageFetchingMessages +) + +func (v SyncStateStage) String() string { + switch v { + case StageHeaders: + return "header sync" + case StagePersistHeaders: + return "persisting headers" + case StageMessages: + return "message sync" + case StageSyncComplete: + return "complete" + case StageSyncErrored: + return "error" + case StageFetchingMessages: + return "fetching messages" + default: + return fmt.Sprintf("", v) + } +} + +type ActiveSync struct { + WorkerID uint64 + Base *types.TipSet + Target *types.TipSet + + Stage SyncStateStage + Height abi.ChainEpoch + + Start time.Time + End time.Time + Message string +} diff --git a/app/submodule/blockstore/blockstore_api.go b/app/submodule/blockstore/blockstore_api.go new file mode 100644 index 0000000000..1ed8e86d67 --- /dev/null +++ b/app/submodule/blockstore/blockstore_api.go @@ -0,0 +1,87 @@ +package blockstore + +import ( + "context" + "sync" + + "github.com/ipfs/go-blockservice" + "github.com/ipfs/go-cid" + offline "github.com/ipfs/go-ipfs-exchange-offline" + ipld "github.com/ipfs/go-ipld-format" + "github.com/ipfs/go-merkledag" + "golang.org/x/xerrors" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" +) + +var _ v1api.IBlockStore = &blockstoreAPI{} + +type blockstoreAPI struct { //nolint + blockstore *BlockstoreSubmodule +} + +func (blockstoreAPI *blockstoreAPI) ChainReadObj(ctx context.Context, ocid cid.Cid) ([]byte, error) { + blk, err := blockstoreAPI.blockstore.Blockstore.Get(ctx, ocid) + if err != nil { + return nil, xerrors.Errorf("blockstore get: %w", err) + } + + return blk.RawData(), nil +} + +func (blockstoreAPI *blockstoreAPI) ChainDeleteObj(ctx context.Context, obj cid.Cid) error { + return blockstoreAPI.blockstore.Blockstore.DeleteBlock(ctx, obj) +} + +func (blockstoreAPI *blockstoreAPI) ChainHasObj(ctx context.Context, obj cid.Cid) (bool, error) { + return blockstoreAPI.blockstore.Blockstore.Has(ctx, obj) +} + +func (blockstoreAPI *blockstoreAPI) ChainStatObj(ctx context.Context, obj cid.Cid, base cid.Cid) (apitypes.ObjStat, error) { + bs := blockstoreAPI.blockstore.Blockstore + bsvc := blockservice.New(bs, offline.Exchange(bs)) + + dag := merkledag.NewDAGService(bsvc) + + seen := cid.NewSet() + + var statslk sync.Mutex + var stats apitypes.ObjStat + var collect = true + + walker := func(ctx context.Context, c cid.Cid) ([]*ipld.Link, error) { + if c.Prefix().Codec == cid.FilCommitmentSealed || c.Prefix().Codec == cid.FilCommitmentUnsealed { + return []*ipld.Link{}, nil + } + + nd, err := dag.Get(ctx, c) + if err != nil { + return nil, err + } + + if collect { + s := uint64(len(nd.RawData())) + statslk.Lock() + stats.Size = stats.Size + s + stats.Links = stats.Links + 1 + statslk.Unlock() + } + + return nd.Links(), nil + } + + if base != cid.Undef { + collect = false + if err := merkledag.Walk(ctx, walker, base, seen.Visit, merkledag.Concurrent()); err != nil { + return apitypes.ObjStat{}, err + } + collect = true + } + + if err := merkledag.Walk(ctx, walker, obj, seen.Visit, merkledag.Concurrent()); err != nil { + return apitypes.ObjStat{}, err + } + + return stats, nil +} diff --git a/app/submodule/blockstore/blockstore_submodule.go b/app/submodule/blockstore/blockstore_submodule.go new file mode 100644 index 0000000000..ee41c73f50 --- /dev/null +++ b/app/submodule/blockstore/blockstore_submodule.go @@ -0,0 +1,39 @@ +package blockstore + +import ( + "context" + + "github.com/filecoin-project/venus/pkg/repo" + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + bstore "github.com/ipfs/go-ipfs-blockstore" +) + +// BlockstoreSubmodule enhances the `Node` with local key/value storing capabilities. +// Note: at present: +// - `blockstore` is shared by chain/graphsync and piece/bitswap data +// - `cborStore` is used for chain state and shared with piece data exchange for deals at the moment. +type BlockstoreSubmodule struct { //nolint + // blockstore is the un-networked blocks interface + Blockstore bstore.Blockstore +} + +type blockstoreRepo interface { + Repo() repo.Repo +} + +// NewBlockstoreSubmodule creates a new block store submodule. +func NewBlockstoreSubmodule(ctx context.Context, repo blockstoreRepo) (*BlockstoreSubmodule, error) { + // set up block store + bs := repo.Repo().Datastore() + return &BlockstoreSubmodule{ + Blockstore: bs, + }, nil +} + +func (bsm *BlockstoreSubmodule) API() v0api.IBlockStore { + return &blockstoreAPI{blockstore: bsm} +} + +func (bsm *BlockstoreSubmodule) V0API() v0api.IBlockStore { + return &blockstoreAPI{blockstore: bsm} +} diff --git a/app/submodule/chain/account_api.go b/app/submodule/chain/account_api.go new file mode 100644 index 0000000000..a68cab971b --- /dev/null +++ b/app/submodule/chain/account_api.go @@ -0,0 +1,31 @@ +package chain + +import ( + "context" + + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-address" + "golang.org/x/xerrors" +) + +var _ v1api.IAccount = &accountAPI{} + +type accountAPI struct { + chain *ChainSubmodule +} + +//NewAccountAPI create a new account api +func NewAccountAPI(chain *ChainSubmodule) v1api.IAccount { + return &accountAPI{chain: chain} +} + +// StateAccountKey returns the public key address of the given ID address +func (accountAPI *accountAPI) StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) { + ts, err := accountAPI.chain.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return address.Undef, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + return accountAPI.chain.Stmgr.ResolveToKeyAddress(ctx, addr, ts) +} diff --git a/app/submodule/chain/actor_api.go b/app/submodule/chain/actor_api.go new file mode 100644 index 0000000000..b779685cb3 --- /dev/null +++ b/app/submodule/chain/actor_api.go @@ -0,0 +1,30 @@ +package chain + +import ( + "context" + + "github.com/filecoin-project/go-address" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var _ v1api.IActor = &actorAPI{} + +type actorAPI struct { + chain *ChainSubmodule +} + +//NewActorAPI new actor api +func NewActorAPI(chain *ChainSubmodule) v1api.IActor { + return &actorAPI{chain: chain} +} + +// StateGetActor returns the indicated actor's nonce and balance. +func (actorAPI *actorAPI) StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) { + return actorAPI.chain.Stmgr.GetActorAtTsk(ctx, actor, tsk) +} + +// ActorLs returns a channel with actors from the latest state on the chain +func (actorAPI *actorAPI) ListActor(ctx context.Context) (map[address.Address]*types.Actor, error) { + return actorAPI.chain.ChainReader.LsActors(ctx) +} diff --git a/app/submodule/chain/apibstore.go b/app/submodule/chain/apibstore.go new file mode 100644 index 0000000000..ce418c6387 --- /dev/null +++ b/app/submodule/chain/apibstore.go @@ -0,0 +1,74 @@ +package chain + +import ( + "context" + + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + blockstore "github.com/ipfs/go-ipfs-blockstore" + "golang.org/x/xerrors" +) + +type ChainIO interface { //nolint + ChainReadObj(context.Context, cid.Cid) ([]byte, error) + ChainHasObj(context.Context, cid.Cid) (bool, error) +} + +type apiBStore struct { + api ChainIO +} + +// NewAPIBlockstore create new blockstore api +func NewAPIBlockstore(cio ChainIO) blockstore.Blockstore { + return &apiBStore{ + api: cio, + } +} + +// DeleteBlock implements Blockstore.DeleteBlock. +func (a *apiBStore) DeleteBlock(context.Context, cid.Cid) error { + return xerrors.New("not supported") +} + +// Has implements Blockstore.Has. +func (a *apiBStore) Has(ctx context.Context, c cid.Cid) (bool, error) { + return a.api.ChainHasObj(ctx, c) +} + +// Get implements Blockstore.Get. +func (a *apiBStore) Get(ctx context.Context, c cid.Cid) (blocks.Block, error) { + bb, err := a.api.ChainReadObj(ctx, c) + if err != nil { + return nil, err + } + return blocks.NewBlockWithCid(bb, c) +} + +// GetSize implements Blockstore.GetSize. +func (a *apiBStore) GetSize(ctx context.Context, c cid.Cid) (int, error) { + bb, err := a.api.ChainReadObj(ctx, c) + if err != nil { + return 0, err + } + return len(bb), nil +} + +// Put implements Blockstore.Put. +func (a *apiBStore) Put(context.Context, blocks.Block) error { + return xerrors.New("not supported") +} + +// PutMany implements Blockstore.PutMany. +func (a *apiBStore) PutMany(context.Context, []blocks.Block) error { + return xerrors.New("not supported") +} + +// AllKeysChan implements Blockstore.AllKeysChan. +func (a *apiBStore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) { + return nil, xerrors.New("not supported") +} + +// HashOnRead implements Blockstore.HashOnRead. +func (a *apiBStore) HashOnRead(enabled bool) {} + +var _ blockstore.Blockstore = &apiBStore{} diff --git a/app/submodule/chain/beacon_api.go b/app/submodule/chain/beacon_api.go new file mode 100644 index 0000000000..a99b5b7850 --- /dev/null +++ b/app/submodule/chain/beacon_api.go @@ -0,0 +1,63 @@ +package chain + +import ( + "context" + "fmt" + + "github.com/filecoin-project/go-state-types/abi" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + xerrors "github.com/pkg/errors" +) + +var _ v1api.IBeacon = &beaconAPI{} + +type beaconAPI struct { + chain *ChainSubmodule +} + +//NewBeaconAPI create new beacon api +func NewBeaconAPI(chain *ChainSubmodule) v1api.IBeacon { + return &beaconAPI{chain: chain} +} + +// BeaconGetEntry returns the beacon entry for the given filecoin epoch. If +// the entry has not yet been produced, the call will block until the entry +// becomes available +func (beaconAPI *beaconAPI) BeaconGetEntry(ctx context.Context, epoch abi.ChainEpoch) (*types.BeaconEntry, error) { + b := beaconAPI.chain.Drand.BeaconForEpoch(epoch) + rr := b.MaxBeaconRoundForEpoch(epoch) + e := b.Entry(ctx, rr) + + select { + case be, ok := <-e: + if !ok { + return nil, fmt.Errorf("beacon get returned no value") + } + if be.Err != nil { + return nil, be.Err + } + return &be.Entry, nil + case <-ctx.Done(): + return nil, ctx.Err() + } +} + +// GetEntry retrieves an entry from the drand server +func (beaconAPI *beaconAPI) GetEntry(ctx context.Context, height abi.ChainEpoch, round uint64) (*types.BeaconEntry, error) { + rch := beaconAPI.chain.Drand.BeaconForEpoch(height).Entry(ctx, round) + select { + case resp := <-rch: + if resp.Err != nil { + return nil, xerrors.Errorf("beacon entry request returned error: %s", resp.Err) + } + return &resp.Entry, nil + case <-ctx.Done(): + return nil, xerrors.Errorf("context timed out waiting on beacon entry to come back for round %d: %s", round, ctx.Err()) + } +} + +// VerifyEntry verifies that child is a valid entry if its parent is. +func (beaconAPI *beaconAPI) VerifyEntry(parent, child *types.BeaconEntry, height abi.ChainEpoch) bool { + return beaconAPI.chain.Drand.BeaconForEpoch(height).VerifyEntry(*parent, *child) != nil +} diff --git a/app/submodule/chain/chain_api.go b/app/submodule/chain/chain_api.go new file mode 100644 index 0000000000..d822962d27 --- /dev/null +++ b/app/submodule/chain/chain_api.go @@ -0,0 +1,15 @@ +package chain + +import ( + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" +) + +type chainAPI struct { // nolint: golint + v1api.IAccount + v1api.IActor + v1api.IBeacon + v1api.IMinerState + v1api.IChainInfo +} + +var _ v1api.IChain = &chainAPI{} diff --git a/app/submodule/chain/chain_submodule.go b/app/submodule/chain/chain_submodule.go new file mode 100644 index 0000000000..fbd03e376b --- /dev/null +++ b/app/submodule/chain/chain_submodule.go @@ -0,0 +1,122 @@ +package chain + +import ( + "context" + "time" + + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + + apiwrapper "github.com/filecoin-project/venus/app/submodule/chain/v0api" + "github.com/filecoin-project/venus/pkg/beacon" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/consensus" + "github.com/filecoin-project/venus/pkg/consensusfault" + "github.com/filecoin-project/venus/pkg/fork" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/statemanger" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/pkg/vmsupport" + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// ChainSubmodule enhances the `Node` with chain capabilities. +type ChainSubmodule struct { //nolint + ChainReader *chain.Store + MessageStore *chain.MessageStore + Processor *consensus.DefaultProcessor + Fork fork.IFork + SystemCall vm.SyscallsImpl + + CheckPoint types.TipSetKey + Drand beacon.Schedule + + config chainConfig + + Stmgr *statemanger.Stmgr + // Wait for confirm message + Waiter *chain.Waiter +} + +type chainConfig interface { + GenesisCid() cid.Cid + BlockTime() time.Duration + Repo() repo.Repo + Verifier() ffiwrapper.Verifier +} + +// NewChainSubmodule creates a new chain submodule. +func NewChainSubmodule(ctx context.Context, + config chainConfig, + circulatiingSupplyCalculator chain.ICirculatingSupplyCalcualtor, +) (*ChainSubmodule, error) { + repo := config.Repo() + // initialize chain store + chainStore := chain.NewStore(repo.ChainDatastore(), repo.Datastore(), config.GenesisCid(), circulatiingSupplyCalculator) + //drand + genBlk, err := chainStore.GetGenesisBlock(context.TODO()) + if err != nil { + return nil, err + } + + drand, err := beacon.DrandConfigSchedule(genBlk.Timestamp, repo.Config().NetworkParams.BlockDelay, repo.Config().NetworkParams.DrandSchedule) + if err != nil { + return nil, err + } + + messageStore := chain.NewMessageStore(config.Repo().Datastore(), repo.Config().NetworkParams.ForkUpgradeParam) + fork, err := fork.NewChainFork(ctx, chainStore, cbor.NewCborStore(config.Repo().Datastore()), config.Repo().Datastore(), repo.Config().NetworkParams) + if err != nil { + return nil, err + } + faultChecker := consensusfault.NewFaultChecker(chainStore, fork) + syscalls := vmsupport.NewSyscalls(faultChecker, config.Verifier()) + processor := consensus.NewDefaultProcessor(syscalls) + + waiter := chain.NewWaiter(chainStore, messageStore, config.Repo().Datastore(), cbor.NewCborStore(config.Repo().Datastore())) + + store := &ChainSubmodule{ + ChainReader: chainStore, + MessageStore: messageStore, + Processor: processor, + SystemCall: syscalls, + Fork: fork, + Drand: drand, + config: config, + Waiter: waiter, + CheckPoint: chainStore.GetCheckPoint(), + } + err = store.ChainReader.Load(context.TODO()) + if err != nil { + return nil, err + } + return store, nil +} + +// Start loads the chain from disk. +func (chain *ChainSubmodule) Start(ctx context.Context) error { + return chain.Fork.Start(ctx) +} + +//Stop stop the chain head event +func (chain *ChainSubmodule) Stop(ctx context.Context) { + chain.ChainReader.Stop() +} + +//API chain module api implement +func (chain *ChainSubmodule) API() v1api.IChain { + return &chainAPI{ + IAccount: NewAccountAPI(chain), + IActor: NewActorAPI(chain), + IBeacon: NewBeaconAPI(chain), + IChainInfo: NewChainInfoAPI(chain), + IMinerState: NewMinerStateAPI(chain), + } +} + +func (chain *ChainSubmodule) V0API() v0api.IChain { + return &apiwrapper.WrapperV1IChain{IChain: chain.API()} +} diff --git a/app/submodule/chain/chaininfo_api.go b/app/submodule/chain/chaininfo_api.go new file mode 100644 index 0000000000..9f100b6444 --- /dev/null +++ b/app/submodule/chain/chaininfo_api.go @@ -0,0 +1,609 @@ +package chain + +import ( + "bufio" + "context" + "io" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + acrypto "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/network" + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + "github.com/ipfs/go-cid" + logging "github.com/ipfs/go-log/v2" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/chain" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var _ v1api.IChainInfo = &chainInfoAPI{} + +type chainInfoAPI struct { //nolint + chain *ChainSubmodule +} + +var log = logging.Logger("chain") + +//NewChainInfoAPI new chain info api +func NewChainInfoAPI(chain *ChainSubmodule) v1api.IChainInfo { + return &chainInfoAPI{chain: chain} +} + +//todo think which module should this api belong +// BlockTime returns the block time used by the consensus protocol. +// BlockTime returns the block time +func (cia *chainInfoAPI) BlockTime(ctx context.Context) time.Duration { + return cia.chain.config.BlockTime() +} + +// ChainLs returns an iterator of tipsets from specified head by tsKey to genesis +func (cia *chainInfoAPI) ChainList(ctx context.Context, tsKey types.TipSetKey, count int) ([]types.TipSetKey, error) { + fromTS, err := cia.chain.ChainReader.GetTipSet(ctx, tsKey) + if err != nil { + return nil, xerrors.Errorf("could not retrieve network name %w", err) + } + tipset, err := cia.chain.ChainReader.Ls(ctx, fromTS, count) + if err != nil { + return nil, err + } + tipsetKey := make([]types.TipSetKey, len(tipset)) + for i, ts := range tipset { + tipsetKey[i] = ts.Key() + } + return tipsetKey, nil +} + +// ProtocolParameters return chain parameters +func (cia *chainInfoAPI) ProtocolParameters(ctx context.Context) (*apitypes.ProtocolParams, error) { + networkName, err := cia.getNetworkName(ctx) + if err != nil { + return nil, xerrors.Errorf("could not retrieve network name %w", err) + } + + var supportedSectors []apitypes.SectorInfo + for proof := range miner0.SupportedProofTypes { + size, err := proof.SectorSize() + if err != nil { + return nil, xerrors.Errorf("could not retrieve network name %w", err) + } + maxUserBytes := abi.PaddedPieceSize(size).Unpadded() + supportedSectors = append(supportedSectors, apitypes.SectorInfo{Size: size, MaxPieceSize: maxUserBytes}) + } + + return &apitypes.ProtocolParams{ + Network: networkName, + BlockTime: cia.chain.config.BlockTime(), + SupportedSectors: supportedSectors, + }, nil +} + +func (cia *chainInfoAPI) ChainHead(ctx context.Context) (*types.TipSet, error) { + return cia.chain.ChainReader.GetHead(), nil +} + +// ChainSetHead sets `key` as the new head of this chain iff it exists in the nodes chain store. +func (cia *chainInfoAPI) ChainSetHead(ctx context.Context, key types.TipSetKey) error { + ts, err := cia.chain.ChainReader.GetTipSet(ctx, key) + if err != nil { + return err + } + return cia.chain.ChainReader.SetHead(ctx, ts) +} + +// ChainTipSet returns the tipset at the given key +func (cia *chainInfoAPI) ChainGetTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) { + return cia.chain.ChainReader.GetTipSet(ctx, key) +} + +// ChainGetTipSetByHeight looks back for a tipset at the specified epoch. +// If there are no blocks at the specified epoch, a tipset at an earlier epoch +// will be returned. +func (cia *chainInfoAPI) ChainGetTipSetByHeight(ctx context.Context, height abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) { + ts, err := cia.chain.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("fail to load tipset %v", err) + } + return cia.chain.ChainReader.GetTipSetByHeight(ctx, ts, height, true) +} + +// ChainGetTipSetAfterHeight looks back for a tipset at the specified epoch. +// If there are no blocks at the specified epoch, the first non-nil tipset at a later epoch +// will be returned. +func (cia *chainInfoAPI) ChainGetTipSetAfterHeight(ctx context.Context, h abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) { + ts, err := cia.chain.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + return cia.chain.ChainReader.GetTipSetByHeight(ctx, ts, h, false) +} + +// GetParentStateRootActor get the ts ParentStateRoot actor +func (cia *chainInfoAPI) GetActor(ctx context.Context, addr address.Address) (*types.Actor, error) { + return cia.chain.Stmgr.GetActorAtTsk(ctx, addr, types.EmptyTSK) +} + +// GetParentStateRootActor get the ts ParentStateRoot actor +func (cia *chainInfoAPI) GetParentStateRootActor(ctx context.Context, ts *types.TipSet, addr address.Address) (*types.Actor, error) { + _, v, err := cia.chain.Stmgr.ParentStateView(ctx, ts) + if err != nil { + return nil, err + } + act, err := v.LoadActor(ctx, addr) + if err != nil { + return nil, err + } + return act, nil +} + +// ChainGetBlock gets a block by CID +func (cia *chainInfoAPI) ChainGetBlock(ctx context.Context, id cid.Cid) (*types.BlockHeader, error) { + return cia.chain.ChainReader.GetBlock(ctx, id) +} + +// ChainGetMessage reads a message referenced by the specified CID from the +// chain blockstore. +func (cia *chainInfoAPI) ChainGetMessage(ctx context.Context, msgID cid.Cid) (*types.Message, error) { + msg, err := cia.chain.MessageStore.LoadMessage(ctx, msgID) + if err != nil { + return nil, err + } + return msg.VMMessage(), nil +} + +// ChainGetMessages gets a message collection by CID +func (cia *chainInfoAPI) ChainGetBlockMessages(ctx context.Context, bid cid.Cid) (*apitypes.BlockMessages, error) { + b, err := cia.chain.ChainReader.GetBlock(ctx, bid) + if err != nil { + return nil, err + } + + smsgs, bmsgs, err := cia.chain.MessageStore.LoadMetaMessages(ctx, b.Messages) + if err != nil { + return nil, err + } + + cids := make([]cid.Cid, len(bmsgs)+len(smsgs)) + + for i, m := range bmsgs { + cids[i] = m.Cid() + } + + for i, m := range smsgs { + cids[i+len(bmsgs)] = m.Cid() + } + + return &apitypes.BlockMessages{ + BlsMessages: bmsgs, + SecpkMessages: smsgs, + Cids: cids, + }, nil +} + +// ChainGetReceipts gets a receipt collection by CID +func (cia *chainInfoAPI) ChainGetReceipts(ctx context.Context, id cid.Cid) ([]types.MessageReceipt, error) { + return cia.chain.MessageStore.LoadReceipts(ctx, id) +} + +// ChainGetFullBlock gets full block(include message) by cid +func (cia *chainInfoAPI) GetFullBlock(ctx context.Context, id cid.Cid) (*types.FullBlock, error) { + var out types.FullBlock + var err error + + out.Header, err = cia.chain.ChainReader.GetBlock(ctx, id) + if err != nil { + return nil, err + } + out.SECPMessages, out.BLSMessages, err = cia.chain.MessageStore.LoadMetaMessages(ctx, out.Header.Messages) + if err != nil { + return nil, err + } + + return &out, nil +} + +// ChainGetMessagesInTipset returns message stores in current tipset +func (cia *chainInfoAPI) ChainGetMessagesInTipset(ctx context.Context, key types.TipSetKey) ([]apitypes.Message, error) { + ts, err := cia.chain.ChainReader.GetTipSet(ctx, key) + if err != nil { + return nil, err + } + if ts.Height() == 0 { + return nil, nil + } + + cm, err := cia.chain.MessageStore.MessagesForTipset(ts) + if err != nil { + return nil, err + } + + var out []apitypes.Message + for _, m := range cm { + out = append(out, apitypes.Message{ + Cid: m.Cid(), + Message: m.VMMessage(), + }) + } + + return out, nil +} + +// ChainGetParentMessages returns messages stored in parent tipset of the +// specified block. +func (cia *chainInfoAPI) ChainGetParentMessages(ctx context.Context, bcid cid.Cid) ([]apitypes.Message, error) { + b, err := cia.ChainGetBlock(ctx, bcid) + if err != nil { + return nil, err + } + + // genesis block has no parent messages... + if b.Height == 0 { + return nil, nil + } + + // TODO: need to get the number of messages better than this + pts, err := cia.chain.ChainReader.GetTipSet(ctx, types.NewTipSetKey(b.Parents...)) + if err != nil { + return nil, err + } + + cm, err := cia.chain.MessageStore.MessagesForTipset(pts) + if err != nil { + return nil, err + } + + var out []apitypes.Message + for _, m := range cm { + out = append(out, apitypes.Message{ + Cid: m.Cid(), + Message: m.VMMessage(), + }) + } + + return out, nil +} + +// ChainGetParentReceipts returns receipts for messages in parent tipset of +// the specified block. +func (cia *chainInfoAPI) ChainGetParentReceipts(ctx context.Context, bcid cid.Cid) ([]*types.MessageReceipt, error) { + b, err := cia.ChainGetBlock(ctx, bcid) + if err != nil { + return nil, err + } + + if b.Height == 0 { + return nil, nil + } + + // TODO: need to get the number of messages better than this + pts, err := cia.chain.ChainReader.GetTipSet(ctx, types.NewTipSetKey(b.Parents...)) + if err != nil { + return nil, err + } + + cm, err := cia.chain.MessageStore.MessagesForTipset(pts) + if err != nil { + return nil, err + } + + var out []*types.MessageReceipt + for i := 0; i < len(cm); i++ { + r, err := cia.chain.ChainReader.GetParentReceipt(b, i) + if err != nil { + return nil, err + } + + out = append(out, r) + } + + return out, nil +} + +// ResolveToKeyAddr resolve user address to t0 address +func (cia *chainInfoAPI) ResolveToKeyAddr(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) { + if ts == nil { + ts = cia.chain.ChainReader.GetHead() + } + return cia.chain.Stmgr.ResolveToKeyAddress(ctx, addr, ts) +} + +//************Drand****************// +// ChainNotify subscribe to chain head change event +func (cia *chainInfoAPI) ChainNotify(ctx context.Context) (<-chan []*apitypes.HeadChange, error) { + return cia.chain.ChainReader.SubHeadChanges(ctx), nil +} + +//************Drand****************// + +// GetEntry retrieves an entry from the drand server +func (cia *chainInfoAPI) GetEntry(ctx context.Context, height abi.ChainEpoch, round uint64) (*types.BeaconEntry, error) { + rch := cia.chain.Drand.BeaconForEpoch(height).Entry(ctx, round) + select { + case resp := <-rch: + if resp.Err != nil { + return nil, xerrors.Errorf("beacon entry request returned error: %s", resp.Err) + } + return &resp.Entry, nil + case <-ctx.Done(): + return nil, xerrors.Errorf("context timed out waiting on beacon entry to come back for round %d: %s", round, ctx.Err()) + } + +} + +// VerifyEntry verifies that child is a valid entry if its parent is. +func (cia *chainInfoAPI) VerifyEntry(parent, child *types.BeaconEntry, height abi.ChainEpoch) bool { + return cia.chain.Drand.BeaconForEpoch(height).VerifyEntry(*parent, *child) != nil +} + +// StateNetworkName returns the name of the network the node is synced to +func (cia *chainInfoAPI) StateNetworkName(ctx context.Context) (apitypes.NetworkName, error) { + networkName, err := cia.getNetworkName(ctx) + + return apitypes.NetworkName(networkName), err +} + +func (cia *chainInfoAPI) getNetworkName(ctx context.Context) (string, error) { + _, view, err := cia.chain.Stmgr.ParentStateView(ctx, cia.chain.ChainReader.GetHead()) + if err != nil { + return "", err + } + + return view.InitNetworkName(ctx) +} + +// ChainGetRandomnessFromBeacon is used to sample the beacon for randomness. +func (cia *chainInfoAPI) ChainGetRandomnessFromBeacon(ctx context.Context, key types.TipSetKey, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + return cia.StateGetRandomnessFromBeacon(ctx, personalization, randEpoch, entropy, key) +} + +// ChainGetRandomnessFromTickets is used to sample the chain for randomness. +func (cia *chainInfoAPI) ChainGetRandomnessFromTickets(ctx context.Context, tsk types.TipSetKey, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + return cia.StateGetRandomnessFromTickets(ctx, personalization, randEpoch, entropy, tsk) +} + +// StateGetRandomnessFromTickets is used to sample the chain for randomness. +func (cia *chainInfoAPI) StateGetRandomnessFromTickets(ctx context.Context, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) { + ts, err := cia.ChainGetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + + r := chain.NewChainRandomnessSource(cia.chain.ChainReader, ts.Key(), cia.chain.Drand) + rnv := cia.chain.Fork.GetNtwkVersion(ctx, randEpoch) + + if rnv >= network.Version13 { + return r.GetChainRandomnessV2(ctx, personalization, randEpoch, entropy) + } + + return r.GetChainRandomnessV1(ctx, personalization, randEpoch, entropy) +} + +// StateGetRandomnessFromBeacon is used to sample the beacon for randomness. +func (cia *chainInfoAPI) StateGetRandomnessFromBeacon(ctx context.Context, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) { + ts, err := cia.ChainGetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + r := chain.NewChainRandomnessSource(cia.chain.ChainReader, ts.Key(), cia.chain.Drand) + rnv := cia.chain.Fork.GetNtwkVersion(ctx, randEpoch) + + if rnv >= network.Version14 { + return r.GetBeaconRandomnessV3(ctx, personalization, randEpoch, entropy) + } else if rnv == network.Version13 { + return r.GetBeaconRandomnessV2(ctx, personalization, randEpoch, entropy) + } + + return r.GetBeaconRandomnessV1(ctx, personalization, randEpoch, entropy) +} + +// StateNetworkVersion returns the network version at the given tipset +func (cia *chainInfoAPI) StateNetworkVersion(ctx context.Context, tsk types.TipSetKey) (network.Version, error) { + ts, err := cia.chain.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return network.VersionMax, xerrors.Errorf("loading tipset %s: %v", tsk, err) + } + return cia.chain.Fork.GetNtwkVersion(ctx, ts.Height()), nil +} + +func (cia *chainInfoAPI) StateVerifiedRegistryRootKey(ctx context.Context, tsk types.TipSetKey) (address.Address, error) { + ts, err := cia.chain.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return address.Undef, xerrors.Errorf("loading tipset %s: %v", tsk, err) + } + _, view, err := cia.chain.Stmgr.ParentStateView(ctx, ts) + if err != nil { + return address.Undef, xerrors.Errorf("filed to load parent state view:%v", err) + } + + vrs, err := view.LoadVerifregActor(ctx) + if err != nil { + return address.Undef, xerrors.Errorf("failed to load verified registry state: %w", err) + } + + return vrs.RootKey() +} + +func (cia *chainInfoAPI) StateVerifierStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) { + ts, err := cia.chain.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %v", tsk, err) + } + _, view, err := cia.chain.Stmgr.ParentStateView(ctx, ts) + if err != nil { + return nil, err + } + + aid, err := view.LookupID(ctx, addr) + if err != nil { + log.Warnf("lookup failure %v", err) + return nil, err + } + + vrs, err := view.LoadVerifregActor(ctx) + if err != nil { + return nil, xerrors.Errorf("failed to load verified registry state: %w", err) + } + + verified, dcap, err := vrs.VerifierDataCap(aid) + if err != nil { + return nil, xerrors.Errorf("looking up verifier: %w", err) + } + if !verified { + return nil, nil + } + + return &dcap, nil +} + +// MessageWait invokes the callback when a message with the given cid appears on chain. +// It will find the message in both the case that it is already on chain and +// the case that it appears in a newly mined block. An error is returned if one is +// encountered or if the context is canceled. Otherwise, it waits forever for the message +// to appear on chain. +func (cia *chainInfoAPI) MessageWait(ctx context.Context, msgCid cid.Cid, confidence, lookback abi.ChainEpoch) (*apitypes.ChainMessage, error) { + chainMsg, err := cia.chain.MessageStore.LoadMessage(ctx, msgCid) + if err != nil { + return nil, err + } + return cia.chain.Waiter.Wait(ctx, chainMsg, uint64(confidence), lookback, true) +} + +// StateSearchMsg searches for a message in the chain, and returns its receipt and the tipset where it was executed +func (cia *chainInfoAPI) StateSearchMsg(ctx context.Context, from types.TipSetKey, mCid cid.Cid, lookbackLimit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) { + chainMsg, err := cia.chain.MessageStore.LoadMessage(ctx, mCid) + if err != nil { + return nil, err + } + //todo add a api for head tipset directly + head, err := cia.chain.ChainReader.GetTipSet(ctx, from) + if err != nil { + return nil, err + } + msgResult, found, err := cia.chain.Waiter.Find(ctx, chainMsg, lookbackLimit, head, allowReplaced) + if err != nil { + return nil, err + } + + if found { + return &apitypes.MsgLookup{ + Message: mCid, + Receipt: *msgResult.Receipt, + TipSet: msgResult.TS.Key(), + Height: msgResult.TS.Height(), + }, nil + } + return nil, nil +} + +// StateWaitMsg looks back in the chain for a message. If not found, it blocks until the +// message arrives on chain, and gets to the indicated confidence depth. +func (cia *chainInfoAPI) StateWaitMsg(ctx context.Context, mCid cid.Cid, confidence uint64, lookbackLimit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) { + chainMsg, err := cia.chain.MessageStore.LoadMessage(ctx, mCid) + if err != nil { + return nil, err + } + msgResult, err := cia.chain.Waiter.Wait(ctx, chainMsg, confidence, lookbackLimit, allowReplaced) + if err != nil { + return nil, err + } + if msgResult != nil { + return &apitypes.MsgLookup{ + Message: mCid, + Receipt: *msgResult.Receipt, + TipSet: msgResult.TS.Key(), + Height: msgResult.TS.Height(), + }, nil + } + return nil, nil +} + +func (cia *chainInfoAPI) ChainExport(ctx context.Context, nroots abi.ChainEpoch, skipoldmsgs bool, tsk types.TipSetKey) (<-chan []byte, error) { + ts, err := cia.chain.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %v", tsk, err) + } + r, w := io.Pipe() + out := make(chan []byte) + go func() { + bw := bufio.NewWriterSize(w, 1<<20) + + err := cia.chain.ChainReader.Export(ctx, ts, nroots, skipoldmsgs, bw) + bw.Flush() //nolint:errcheck // it is a write to a pipe + w.CloseWithError(err) //nolint:errcheck // it is a pipe + }() + + go func() { + defer close(out) + for { + buf := make([]byte, 1<<20) + n, err := r.Read(buf) + if err != nil && err != io.EOF { + log.Errorf("chain export pipe read failed: %s", err) + return + } + if n > 0 { + select { + case out <- buf[:n]: + case <-ctx.Done(): + log.Warnf("export writer failed: %s", ctx.Err()) + return + } + } + if err == io.EOF { + // send empty slice to indicate correct eof + select { + case out <- []byte{}: + case <-ctx.Done(): + log.Warnf("export writer failed: %s", ctx.Err()) + return + } + + return + } + } + }() + + return out, nil +} + +// ChainGetPath returns a set of revert/apply operations needed to get from +// one tipset to another, for example: +//``` +// to +// ^ +// from tAA +// ^ ^ +// tBA tAB +// ^---*--^ +// ^ +// tRR +//``` +// Would return `[revert(tBA), apply(tAB), apply(tAA)]` +func (cia *chainInfoAPI) ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*apitypes.HeadChange, error) { + fts, err := cia.chain.ChainReader.GetTipSet(ctx, from) + if err != nil { + return nil, xerrors.Errorf("loading from tipset %s: %w", from, err) + } + tts, err := cia.chain.ChainReader.GetTipSet(ctx, to) + if err != nil { + return nil, xerrors.Errorf("loading to tipset %s: %w", to, err) + } + + revert, apply, err := chain.ReorgOps(cia.chain.ChainReader.GetTipSet, fts, tts) + if err != nil { + return nil, xerrors.Errorf("error getting tipset branches: %w", err) + } + + path := make([]*apitypes.HeadChange, len(revert)+len(apply)) + for i, r := range revert { + path[i] = &apitypes.HeadChange{Type: chain.HCRevert, Val: r} + } + for j, i := 0, len(apply)-1; i >= 0; j, i = j+1, i-1 { + path[j+len(revert)] = &apitypes.HeadChange{Type: chain.HCApply, Val: apply[i]} + } + return path, nil +} diff --git a/app/submodule/chain/miner_api.go b/app/submodule/chain/miner_api.go new file mode 100644 index 0000000000..f7bf7db661 --- /dev/null +++ b/app/submodule/chain/miner_api.go @@ -0,0 +1,767 @@ +package chain + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/dline" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/reward" + "github.com/filecoin-project/venus/venus-shared/actors/policy" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var _ v1api.IMinerState = &minerStateAPI{} + +type minerStateAPI struct { + *ChainSubmodule +} + +// NewMinerStateAPI create miner state api +func NewMinerStateAPI(chain *ChainSubmodule) v1api.IMinerState { + return &minerStateAPI{ChainSubmodule: chain} +} + +// StateMinerSectorAllocated checks if a sector is allocated +func (msa *minerStateAPI) StateMinerSectorAllocated(ctx context.Context, maddr address.Address, s abi.SectorNumber, tsk types.TipSetKey) (bool, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return false, xerrors.Errorf("load Stmgr.ParentStateViewTsk(%s): %v", tsk, err) + } + mas, err := view.LoadMinerState(ctx, maddr) + if err != nil { + return false, xerrors.Errorf("failed to load miner actor state: %v", err) + } + return mas.IsAllocated(s) +} + +// StateSectorPreCommitInfo returns the PreCommit info for the specified miner's sector +func (msa *minerStateAPI) StateSectorPreCommitInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return miner.SectorPreCommitOnChainInfo{}, xerrors.Errorf("loading tipset:%s parent state view: %v", tsk, err) + } + + pci, err := view.SectorPreCommitInfo(ctx, maddr, n) + if err != nil { + return miner.SectorPreCommitOnChainInfo{}, err + } else if pci == nil { + return miner.SectorPreCommitOnChainInfo{}, xerrors.Errorf("precommit info is not exists") + } + return *pci, nil +} + +// StateSectorGetInfo returns the on-chain info for the specified miner's sector. Returns null in case the sector info isn't found +// NOTE: returned info.Expiration may not be accurate in some cases, use StateSectorExpiration to get accurate +// expiration epoch +func (msa *minerStateAPI) StateSectorGetInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorOnChainInfo, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %v", tsk, err) + } + + return view.MinerSectorInfo(ctx, maddr, n) +} + +// StateSectorPartition finds deadline/partition with the specified sector +func (msa *minerStateAPI) StateSectorPartition(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorLocation, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loadParentStateViewTsk(%s) failed:%v", tsk.String(), err) + } + + return view.StateSectorPartition(ctx, maddr, sectorNumber) +} + +// StateMinerSectorSize get miner sector size +func (msa *minerStateAPI) StateMinerSectorSize(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (abi.SectorSize, error) { + // TODO: update storage-fsm to just StateMinerSectorAllocated + mi, err := msa.StateMinerInfo(ctx, maddr, tsk) + if err != nil { + return 0, err + } + return mi.SectorSize, nil +} + +// StateMinerInfo returns info about the indicated miner +func (msa *minerStateAPI) StateMinerInfo(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (miner.MinerInfo, error) { + ts, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return miner.MinerInfo{}, xerrors.Errorf("loading view %s: %v", tsk, err) + } + + nv := msa.Fork.GetNtwkVersion(ctx, ts.Height()) + minfo, err := view.MinerInfo(ctx, maddr, nv) + if err != nil { + return miner.MinerInfo{}, err + } + return *minfo, nil +} + +// StateMinerWorkerAddress get miner worker address +func (msa *minerStateAPI) StateMinerWorkerAddress(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (address.Address, error) { + // TODO: update storage-fsm to just StateMinerInfo + mi, err := msa.StateMinerInfo(ctx, maddr, tsk) + if err != nil { + return address.Undef, err + } + return mi.Worker, nil +} + +// StateMinerRecoveries returns a bitfield indicating the recovering sectors of the given miner +func (msa *minerStateAPI) StateMinerRecoveries(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (bitfield.BitField, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return bitfield.BitField{}, xerrors.Errorf("loading view %s: %v", tsk, err) + } + + mas, err := view.LoadMinerState(ctx, maddr) + if err != nil { + return bitfield.BitField{}, xerrors.Errorf("failed to load miner actor state: %v", err) + } + + return miner.AllPartSectors(mas, miner.Partition.RecoveringSectors) +} + +// StateMinerFaults returns a bitfield indicating the faulty sectors of the given miner +func (msa *minerStateAPI) StateMinerFaults(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (bitfield.BitField, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return bitfield.BitField{}, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + + mas, err := view.LoadMinerState(ctx, maddr) + if err != nil { + return bitfield.BitField{}, xerrors.Errorf("failed to load miner actor state: %v", err) + } + + return miner.AllPartSectors(mas, miner.Partition.FaultySectors) +} + +// StateMinerProvingDeadline calculates the deadline at some epoch for a proving period +// and returns the deadline-related calculations. +func (msa *minerStateAPI) StateMinerProvingDeadline(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (*dline.Info, error) { + ts, err := msa.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("GetTipset failed:%v", err) + } + + _, view, err := msa.Stmgr.ParentStateView(ctx, ts) + if err != nil { + return nil, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + mas, err := view.LoadMinerState(ctx, maddr) + if err != nil { + return nil, xerrors.Errorf("failed to load miner actor state: %v", err) + } + + di, err := mas.DeadlineInfo(ts.Height()) + if err != nil { + return nil, xerrors.Errorf("failed to get deadline info: %v", err) + } + + return di.NextNotElapsed(), nil +} + +// StateMinerPartitions returns all partitions in the specified deadline +func (msa *minerStateAPI) StateMinerPartitions(ctx context.Context, maddr address.Address, dlIdx uint64, tsk types.TipSetKey) ([]apitypes.Partition, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + + mas, err := view.LoadMinerState(ctx, maddr) + if err != nil { + return nil, xerrors.Errorf("failed to load miner actor state: %v", err) + } + + dl, err := mas.LoadDeadline(dlIdx) + if err != nil { + return nil, xerrors.Errorf("failed to load the deadline: %v", err) + } + + var out []apitypes.Partition + err = dl.ForEachPartition(func(_ uint64, part miner.Partition) error { + allSectors, err := part.AllSectors() + if err != nil { + return xerrors.Errorf("getting AllSectors: %v", err) + } + + faultySectors, err := part.FaultySectors() + if err != nil { + return xerrors.Errorf("getting FaultySectors: %v", err) + } + + recoveringSectors, err := part.RecoveringSectors() + if err != nil { + return xerrors.Errorf("getting RecoveringSectors: %v", err) + } + + liveSectors, err := part.LiveSectors() + if err != nil { + return xerrors.Errorf("getting LiveSectors: %v", err) + } + + activeSectors, err := part.ActiveSectors() + if err != nil { + return xerrors.Errorf("getting ActiveSectors: %v", err) + } + + out = append(out, apitypes.Partition{ + AllSectors: allSectors, + FaultySectors: faultySectors, + RecoveringSectors: recoveringSectors, + LiveSectors: liveSectors, + ActiveSectors: activeSectors, + }) + return nil + }) + + return out, err +} + +// StateMinerDeadlines returns all the proving deadlines for the given miner +func (msa *minerStateAPI) StateMinerDeadlines(ctx context.Context, maddr address.Address, tsk types.TipSetKey) ([]apitypes.Deadline, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + + mas, err := view.LoadMinerState(ctx, maddr) + if err != nil { + return nil, xerrors.Errorf("failed to load miner actor state: %v", err) + } + + deadlines, err := mas.NumDeadlines() + if err != nil { + return nil, xerrors.Errorf("getting deadline count: %v", err) + } + + out := make([]apitypes.Deadline, deadlines) + if err := mas.ForEachDeadline(func(i uint64, dl miner.Deadline) error { + ps, err := dl.PartitionsPoSted() + if err != nil { + return err + } + + l, err := dl.DisputableProofCount() + if err != nil { + return err + } + + out[i] = apitypes.Deadline{ + PostSubmissions: ps, + DisputableProofCount: l, + } + return nil + }); err != nil { + return nil, err + } + return out, nil +} + +// StateMinerSectors returns info about the given miner's sectors. If the filter bitfield is nil, all sectors are included. +func (msa *minerStateAPI) StateMinerSectors(ctx context.Context, maddr address.Address, sectorNos *bitfield.BitField, tsk types.TipSetKey) ([]*miner.SectorOnChainInfo, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + + mas, err := view.LoadMinerState(ctx, maddr) + if err != nil { + return nil, xerrors.Errorf("failed to load miner actor state: %v", err) + } + + return mas.LoadSectors(sectorNos) +} + +// StateMarketStorageDeal returns information about the indicated deal +func (msa *minerStateAPI) StateMarketStorageDeal(ctx context.Context, dealID abi.DealID, tsk types.TipSetKey) (*apitypes.MarketDeal, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + + mas, err := view.LoadMarketState(ctx) + if err != nil { + return nil, xerrors.Errorf("failed to load miner actor state: %v", err) + } + + proposals, err := mas.Proposals() + if err != nil { + return nil, err + } + + proposal, found, err := proposals.Get(dealID) + + if err != nil { + return nil, err + } else if !found { + return nil, xerrors.Errorf("deal %d not found", dealID) + } + + states, err := mas.States() + if err != nil { + return nil, err + } + + st, found, err := states.Get(dealID) + if err != nil { + return nil, err + } + + if !found { + st = market.EmptyDealState() + } + + return &apitypes.MarketDeal{ + Proposal: *proposal, + State: *st, + }, nil +} + +var initialPledgeNum = big.NewInt(110) +var initialPledgeDen = big.NewInt(100) + +// StateMinerInitialPledgeCollateral returns the precommit deposit for the specified miner's sector +func (msa *minerStateAPI) StateMinerPreCommitDepositForPower(ctx context.Context, maddr address.Address, pci miner.SectorPreCommitInfo, tsk types.TipSetKey) (big.Int, error) { + ts, err := msa.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return big.Int{}, err + } + + var sTree *tree.State + ts, sTree, err = msa.Stmgr.ParentState(ctx, ts) + if err != nil { + return big.Int{}, xerrors.Errorf("ParentState failed:%v", err) + } + + ssize, err := pci.SealProof.SectorSize() + if err != nil { + return big.Int{}, xerrors.Errorf("failed to get resolve size: %v", err) + } + + store := msa.ChainReader.Store(ctx) + var sectorWeight abi.StoragePower + if act, found, err := sTree.GetActor(ctx, market.Address); err != nil || !found { + return big.Int{}, xerrors.Errorf("loading market actor %s: %v", maddr, err) + } else if s, err := market.Load(store, act); err != nil { + return big.Int{}, xerrors.Errorf("loading market actor state %s: %v", maddr, err) + } else if w, vw, err := s.VerifyDealsForActivation(maddr, pci.DealIDs, ts.Height(), pci.Expiration); err != nil { + return big.Int{}, xerrors.Errorf("verifying deals for activation: %v", err) + } else { + // NB: not exactly accurate, but should always lead us to *over* estimate, not under + duration := pci.Expiration - ts.Height() + sectorWeight = builtin.QAPowerForWeight(ssize, duration, w, vw) + } + + var powerSmoothed builtin.FilterEstimate + if act, found, err := sTree.GetActor(ctx, power.Address); err != nil || !found { + return big.Int{}, xerrors.Errorf("loading power actor: %v", err) + } else if s, err := power.Load(store, act); err != nil { + return big.Int{}, xerrors.Errorf("loading power actor state: %v", err) + } else if p, err := s.TotalPowerSmoothed(); err != nil { + return big.Int{}, xerrors.Errorf("failed to determine total power: %v", err) + } else { + powerSmoothed = p + } + + rewardActor, found, err := sTree.GetActor(ctx, reward.Address) + if err != nil || !found { + return big.Int{}, xerrors.Errorf("loading miner actor: %v", err) + } + + rewardState, err := reward.Load(store, rewardActor) + if err != nil { + return big.Int{}, xerrors.Errorf("loading reward actor state: %v", err) + } + + deposit, err := rewardState.PreCommitDepositForPower(powerSmoothed, sectorWeight) + if err != nil { + return big.Zero(), xerrors.Errorf("calculating precommit deposit: %v", err) + } + + return big.Div(big.Mul(deposit, initialPledgeNum), initialPledgeDen), nil +} + +// StateMinerInitialPledgeCollateral returns the initial pledge collateral for the specified miner's sector +func (msa *minerStateAPI) StateMinerInitialPledgeCollateral(ctx context.Context, maddr address.Address, pci miner.SectorPreCommitInfo, tsk types.TipSetKey) (big.Int, error) { + ts, err := msa.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return big.Int{}, xerrors.Errorf("loading tipset %s: %v", tsk, err) + } + + _, state, err := msa.Stmgr.ParentState(ctx, ts) + if err != nil { + return big.Int{}, xerrors.Errorf("loading tipset(%s) parent state failed: %v", tsk, err) + } + + ssize, err := pci.SealProof.SectorSize() + if err != nil { + return big.Int{}, xerrors.Errorf("failed to get resolve size: %v", err) + } + + store := msa.ChainReader.Store(ctx) + var sectorWeight abi.StoragePower + if act, found, err := state.GetActor(ctx, market.Address); err != nil || !found { + return big.Int{}, xerrors.Errorf("loading miner actor %s: %v", maddr, err) + } else if s, err := market.Load(store, act); err != nil { + return big.Int{}, xerrors.Errorf("loading market actor state %s: %v", maddr, err) + } else if w, vw, err := s.VerifyDealsForActivation(maddr, pci.DealIDs, ts.Height(), pci.Expiration); err != nil { + return big.Int{}, xerrors.Errorf("verifying deals for activation: %v", err) + } else { + // NB: not exactly accurate, but should always lead us to *over* estimate, not under + duration := pci.Expiration - ts.Height() + sectorWeight = builtin.QAPowerForWeight(ssize, duration, w, vw) + } + + var ( + powerSmoothed builtin.FilterEstimate + pledgeCollateral abi.TokenAmount + ) + if act, found, err := state.GetActor(ctx, power.Address); err != nil || !found { + return big.Int{}, xerrors.Errorf("loading miner actor: %v", err) + } else if s, err := power.Load(store, act); err != nil { + return big.Int{}, xerrors.Errorf("loading power actor state: %v", err) + } else if p, err := s.TotalPowerSmoothed(); err != nil { + return big.Int{}, xerrors.Errorf("failed to determine total power: %v", err) + } else if c, err := s.TotalLocked(); err != nil { + return big.Int{}, xerrors.Errorf("failed to determine pledge collateral: %v", err) + } else { + powerSmoothed = p + pledgeCollateral = c + } + + rewardActor, found, err := state.GetActor(ctx, reward.Address) + if err != nil || !found { + return big.Int{}, xerrors.Errorf("loading miner actor: %v", err) + } + + rewardState, err := reward.Load(store, rewardActor) + if err != nil { + return big.Int{}, xerrors.Errorf("loading reward actor state: %v", err) + } + + circSupply, err := msa.StateVMCirculatingSupplyInternal(ctx, ts.Key()) + if err != nil { + return big.Zero(), xerrors.Errorf("getting circulating supply: %v", err) + } + + initialPledge, err := rewardState.InitialPledgeForPower( + sectorWeight, + pledgeCollateral, + &powerSmoothed, + circSupply.FilCirculating, + ) + if err != nil { + return big.Zero(), xerrors.Errorf("calculating initial pledge: %v", err) + } + + return big.Div(big.Mul(initialPledge, initialPledgeNum), initialPledgeDen), nil +} + +// StateVMCirculatingSupplyInternal returns an approximation of the circulating supply of Filecoin at the given tipset. +// This is the value reported by the runtime interface to actors code. +func (msa *minerStateAPI) StateVMCirculatingSupplyInternal(ctx context.Context, tsk types.TipSetKey) (types.CirculatingSupply, error) { + ts, err := msa.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return types.CirculatingSupply{}, err + } + + _, sTree, err := msa.Stmgr.ParentState(ctx, ts) + if err != nil { + return types.CirculatingSupply{}, err + } + + return msa.ChainReader.GetCirculatingSupplyDetailed(ctx, ts.Height(), sTree) +} + +// StateCirculatingSupply returns the exact circulating supply of Filecoin at the given tipset. +// This is not used anywhere in the protocol itself, and is only for external consumption. +func (msa *minerStateAPI) StateCirculatingSupply(ctx context.Context, tsk types.TipSetKey) (abi.TokenAmount, error) { + // stmgr.ParentStateTsk make sure the parent state specified by 'tsk' exists + parent, _, err := msa.Stmgr.ParentStateTsk(ctx, tsk) + if err != nil { + return abi.TokenAmount{}, xerrors.Errorf("tipset(%s) parent state failed:%v", + tsk.String(), err) + } + + return msa.ChainReader.StateCirculatingSupply(ctx, parent.Key()) +} + +// StateMarketDeals returns information about every deal in the Storage Market +func (msa *minerStateAPI) StateMarketDeals(ctx context.Context, tsk types.TipSetKey) (map[string]apitypes.MarketDeal, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%w", err) + } + return view.StateMarketDeals(ctx, tsk) +} + +// StateMinerActiveSectors returns info about sectors that a given miner is actively proving. +func (msa *minerStateAPI) StateMinerActiveSectors(ctx context.Context, maddr address.Address, tsk types.TipSetKey) ([]*miner.SectorOnChainInfo, error) { // TODO: only used in cli + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + return view.StateMinerActiveSectors(ctx, maddr, tsk) +} + +// StateLookupID retrieves the ID address of the given address +func (msa *minerStateAPI) StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) { + _, state, err := msa.Stmgr.ParentStateTsk(ctx, tsk) + if err != nil { + return address.Undef, xerrors.Errorf("load state failed: %v", err) + } + + return state.LookupID(addr) +} + +// StateListMiners returns the addresses of every miner that has claimed power in the Power Actor +func (msa *minerStateAPI) StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + + return view.StateListMiners(ctx, tsk) +} + +// StateListActors returns the addresses of every actor in the state +func (msa *minerStateAPI) StateListActors(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) { + _, stat, err := msa.Stmgr.TipsetStateTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("load tipset state from key:%s failed:%v", + tsk.String(), err) + } + var out []address.Address + err = stat.ForEach(func(addr tree.ActorKey, act *types.Actor) error { + out = append(out, addr) + return nil + }) + if err != nil { + return nil, err + } + + return out, nil +} + +// StateMinerPower returns the power of the indicated miner +func (msa *minerStateAPI) StateMinerPower(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*apitypes.MinerPower, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + mp, net, hmp, err := view.StateMinerPower(ctx, addr, tsk) + if err != nil { + return nil, err + } + + return &apitypes.MinerPower{ + MinerPower: mp, + TotalPower: net, + HasMinPower: hmp, + }, nil +} + +// StateMinerAvailableBalance returns the portion of a miner's balance that can be withdrawn or spent +func (msa *minerStateAPI) StateMinerAvailableBalance(ctx context.Context, maddr address.Address, tsk types.TipSetKey) (big.Int, error) { + ts, err := msa.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return big.Int{}, xerrors.Errorf("failed to get tipset for %s, %v", tsk.String(), err) + } + _, view, err := msa.Stmgr.ParentStateView(ctx, ts) + if err != nil { + return big.Int{}, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + + return view.StateMinerAvailableBalance(ctx, maddr, ts) +} + +// StateSectorExpiration returns epoch at which given sector will expire +func (msa *minerStateAPI) StateSectorExpiration(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk types.TipSetKey) (*miner.SectorExpiration, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + + return view.StateSectorExpiration(ctx, maddr, sectorNumber, tsk) +} + +// StateMinerSectorCount returns the number of sectors in a miner's sector set and proving set +func (msa *minerStateAPI) StateMinerSectorCount(ctx context.Context, addr address.Address, tsk types.TipSetKey) (apitypes.MinerSectors, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return apitypes.MinerSectors{}, xerrors.Errorf("Stmgr.ParentStateViewTsk failed:%v", err) + } + + mas, err := view.LoadMinerState(ctx, addr) + if err != nil { + return apitypes.MinerSectors{}, err + } + + var activeCount, liveCount, faultyCount uint64 + if err := mas.ForEachDeadline(func(_ uint64, dl miner.Deadline) error { + return dl.ForEachPartition(func(_ uint64, part miner.Partition) error { + if active, err := part.ActiveSectors(); err != nil { + return err + } else if count, err := active.Count(); err != nil { + return err + } else { + activeCount += count + } + if live, err := part.LiveSectors(); err != nil { + return err + } else if count, err := live.Count(); err != nil { + return err + } else { + liveCount += count + } + if faulty, err := part.FaultySectors(); err != nil { + return err + } else if count, err := faulty.Count(); err != nil { + return err + } else { + faultyCount += count + } + return nil + }) + }); err != nil { + return apitypes.MinerSectors{}, err + } + return apitypes.MinerSectors{Live: liveCount, Active: activeCount, Faulty: faultyCount}, nil +} + +// StateMarketBalance looks up the Escrow and Locked balances of the given address in the Storage Market +func (msa *minerStateAPI) StateMarketBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (apitypes.MarketBalance, error) { + _, view, err := msa.Stmgr.ParentStateViewTsk(ctx, tsk) + if err != nil { + return apitypes.MarketBalanceNil, xerrors.Errorf("loading view %s: %v", tsk, err) + } + + mstate, err := view.LoadMarketState(ctx) + if err != nil { + return apitypes.MarketBalanceNil, err + } + + addr, err = view.LookupID(ctx, addr) + if err != nil { + return apitypes.MarketBalanceNil, err + } + + var out apitypes.MarketBalance + + et, err := mstate.EscrowTable() + if err != nil { + return apitypes.MarketBalanceNil, err + } + out.Escrow, err = et.Get(addr) + if err != nil { + return apitypes.MarketBalanceNil, xerrors.Errorf("getting escrow balance: %v", err) + } + + lt, err := mstate.LockedTable() + if err != nil { + return apitypes.MarketBalanceNil, err + } + out.Locked, err = lt.Get(addr) + if err != nil { + return apitypes.MarketBalanceNil, xerrors.Errorf("getting locked balance: %v", err) + } + + return out, nil + +} + +var dealProviderCollateralNum = types.NewInt(110) +var dealProviderCollateralDen = types.NewInt(100) + +// StateDealProviderCollateralBounds returns the min and max collateral a storage provider +// can issue. It takes the deal size and verified status as parameters. +func (msa *minerStateAPI) StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk types.TipSetKey) (apitypes.DealCollateralBounds, error) { + ts, _, view, err := msa.Stmgr.StateViewTsk(ctx, tsk) + if err != nil { + return apitypes.DealCollateralBounds{}, xerrors.Errorf("loading state view %s: %v", tsk, err) + } + + pst, err := view.LoadPowerState(ctx) + if err != nil { + return apitypes.DealCollateralBounds{}, xerrors.Errorf("failed to load power actor state: %v", err) + } + + rst, err := view.LoadRewardState(ctx) + if err != nil { + return apitypes.DealCollateralBounds{}, xerrors.Errorf("failed to load reward actor state: %v", err) + } + + circ, err := msa.StateVMCirculatingSupplyInternal(ctx, ts.Key()) + if err != nil { + return apitypes.DealCollateralBounds{}, xerrors.Errorf("getting total circulating supply: %v", err) + } + + powClaim, err := pst.TotalPower() + if err != nil { + return apitypes.DealCollateralBounds{}, xerrors.Errorf("getting total power: %v", err) + } + + rewPow, err := rst.ThisEpochBaselinePower() + if err != nil { + return apitypes.DealCollateralBounds{}, xerrors.Errorf("getting reward baseline power: %v", err) + } + + min, max, err := policy.DealProviderCollateralBounds(size, + verified, + powClaim.RawBytePower, + powClaim.QualityAdjPower, + rewPow, + circ.FilCirculating, + msa.Fork.GetNtwkVersion(ctx, ts.Height())) + if err != nil { + return apitypes.DealCollateralBounds{}, xerrors.Errorf("getting deal provider coll bounds: %v", err) + } + return apitypes.DealCollateralBounds{ + Min: types.BigDiv(types.BigMul(min, dealProviderCollateralNum), dealProviderCollateralDen), + Max: max, + }, nil +} + +// StateVerifiedClientStatus returns the data cap for the given address. +// Returns zero if there is no entry in the data cap table for the +// address. +func (msa *minerStateAPI) StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) { + _, _, view, err := msa.Stmgr.StateViewTsk(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading state view %s: %v", tsk, err) + } + + vrs, err := view.LoadVerifregActor(ctx) + if err != nil { + return nil, xerrors.Errorf("failed to load verified registry state: %v", err) + } + + aid, err := view.LookupID(ctx, addr) + if err != nil { + return nil, xerrors.Errorf("loook up id of %s : %v", addr, err) + } + + verified, dcap, err := vrs.VerifiedClientDataCap(aid) + if err != nil { + return nil, xerrors.Errorf("looking up verified client: %v", err) + } + if !verified { + return nil, nil + } + + return &dcap, nil +} diff --git a/app/submodule/chain/v0api/chaininfo_v0api.go b/app/submodule/chain/v0api/chaininfo_v0api.go new file mode 100644 index 0000000000..db14183ced --- /dev/null +++ b/app/submodule/chain/v0api/chaininfo_v0api.go @@ -0,0 +1,50 @@ +package v0api + +import ( + "context" + + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/constants" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var _ v0api.IChain = &WrapperV1IChain{} + +type WrapperV1IChain struct { //nolint + v1api.IChain +} + +func (a *WrapperV1IChain) StateSearchMsg(ctx context.Context, msg cid.Cid) (*apitypes.MsgLookup, error) { + return a.IChain.StateSearchMsg(ctx, types.EmptyTSK, msg, constants.LookbackNoLimit, true) +} + +func (a *WrapperV1IChain) StateSearchMsgLimited(ctx context.Context, msg cid.Cid, limit abi.ChainEpoch) (*apitypes.MsgLookup, error) { + return a.IChain.StateSearchMsg(ctx, types.EmptyTSK, msg, limit, true) +} + +func (a *WrapperV1IChain) StateWaitMsg(ctx context.Context, msg cid.Cid, confidence uint64) (*apitypes.MsgLookup, error) { + return a.IChain.StateWaitMsg(ctx, msg, confidence, constants.LookbackNoLimit, true) +} + +func (a *WrapperV1IChain) StateWaitMsgLimited(ctx context.Context, msg cid.Cid, confidence uint64, limit abi.ChainEpoch) (*apitypes.MsgLookup, error) { + return a.IChain.StateWaitMsg(ctx, msg, confidence, limit, true) +} + +func (a *WrapperV1IChain) StateGetReceipt(ctx context.Context, msg cid.Cid, from types.TipSetKey) (*types.MessageReceipt, error) { + ml, err := a.IChain.StateSearchMsg(ctx, from, msg, constants.LookbackNoLimit, true) + if err != nil { + return nil, err + } + + if ml == nil { + return nil, nil + } + + return &ml.Receipt, nil +} diff --git a/app/submodule/config/config.go b/app/submodule/config/config.go new file mode 100644 index 0000000000..d789ff9be3 --- /dev/null +++ b/app/submodule/config/config.go @@ -0,0 +1,51 @@ +package config + +import ( + "context" + "sync" + + repo2 "github.com/filecoin-project/venus/pkg/repo" +) + +type IConfig interface { + ConfigSet(ctx context.Context, dottedPath string, paramJSON string) error + ConfigGet(ctx context.Context, dottedPath string) (interface{}, error) +} + +// configModule is plumbing implementation for setting and retrieving values from local config. +type ConfigModule struct { //nolint + repo repo2.Repo + lock sync.Mutex +} + +// NewConfig returns a new configModule. +func NewConfigModule(repo repo2.Repo) *ConfigModule { + return &ConfigModule{repo: repo} +} + +// Set sets a value in config +func (s *ConfigModule) Set(dottedKey string, jsonString string) error { + s.lock.Lock() + defer s.lock.Unlock() + + cfg := s.repo.Config() + if err := cfg.Set(dottedKey, jsonString); err != nil { + return err + } + + return s.repo.ReplaceConfig(cfg) +} + +// Get gets a value from config +func (s *ConfigModule) Get(dottedKey string) (interface{}, error) { + return s.repo.Config().Get(dottedKey) +} + +//API create a new config api implement +func (s *ConfigModule) API() IConfig { + return &configAPI{config: s} +} + +func (s *ConfigModule) V0API() IConfig { + return &configAPI{config: s} +} diff --git a/app/submodule/config/config_api.go b/app/submodule/config/config_api.go new file mode 100644 index 0000000000..969de8b2df --- /dev/null +++ b/app/submodule/config/config_api.go @@ -0,0 +1,27 @@ +package config + +import ( + "context" +) + +var _ IConfig = &configAPI{} + +type configAPI struct { //nolint + config *ConfigModule +} + +// ConfigSet sets the given parameters at the given path in the local config. +// The given path may be either a single field name, or a dotted path to a field. +// The JSON value may be either a single value or a whole data structure to be replace. +// For example: +// ConfigSet("datastore.path", "dev/null") and ConfigSet("datastore", "{\"path\":\"dev/null\"}") +// are the same operation. +func (ca *configAPI) ConfigSet(ctx context.Context, dottedPath string, paramJSON string) error { + return ca.config.Set(dottedPath, paramJSON) +} + +// ConfigGet gets config parameters from the given path. +// The path may be either a single field name, or a dotted path to a field. +func (ca *configAPI) ConfigGet(ctx context.Context, dottedPath string) (interface{}, error) { + return ca.config.Get(dottedPath) +} diff --git a/app/submodule/config/config_test.go b/app/submodule/config/config_test.go new file mode 100644 index 0000000000..ad8a1c16ea --- /dev/null +++ b/app/submodule/config/config_test.go @@ -0,0 +1,118 @@ +package config + +import ( + "testing" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + "github.com/filecoin-project/go-address" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/config" + repo2 "github.com/filecoin-project/venus/pkg/repo" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestConfigGet(t *testing.T) { + tf.UnitTest(t) + + t.Run("emits the referenced config value", func(t *testing.T) { + repo := repo2.NewInMemoryRepo() + cfgAPI := NewConfigModule(repo) + + out, err := cfgAPI.Get("bootstrap") + + require.NoError(t, err) + expected := config.NewDefaultConfig().Bootstrap + assert.Equal(t, expected, out) + }) + + t.Run("failure cases fail", func(t *testing.T) { + repo := repo2.NewInMemoryRepo() + cfgAPI := NewConfigModule(repo) + + _, err := cfgAPI.Get("nonexistantkey") + assert.EqualError(t, err, "key: nonexistantkey invalid for config") + + _, err = cfgAPI.Get("bootstrap.nope") + assert.EqualError(t, err, "key: bootstrap.nope invalid for config") + + _, err = cfgAPI.Get(".inval.id-key") + assert.EqualError(t, err, "key: .inval.id-key invalid for config") + }) +} + +func TestConfigSet(t *testing.T) { + tf.UnitTest(t) + + t.Run("sets the config value", func(t *testing.T) { + defaultCfg := config.NewDefaultConfig() + + repo := repo2.NewInMemoryRepo() + cfgAPI := NewConfigModule(repo) + + jsonBlob := `{"addresses": ["bootup1", "bootup2"]}` + + err := cfgAPI.Set("bootstrap", jsonBlob) + require.NoError(t, err) + out, err := cfgAPI.Get("bootstrap") + require.NoError(t, err) + + // validate output + expected := config.NewDefaultConfig().Bootstrap + expected.Addresses = []string{"bootup1", "bootup2"} + assert.Equal(t, expected, out) + + // validate config write + cfg := repo.Config() + assert.Equal(t, expected, cfg.Bootstrap) + assert.Equal(t, defaultCfg.Datastore, cfg.Datastore) + + err = cfgAPI.Set("api.apiAddress", ":1234") + require.NoError(t, err) + assert.Equal(t, ":1234", cfg.API.APIAddress) + + testAddr := testhelpers.RequireIDAddress(t, 100).String() + err = cfgAPI.Set("walletModule.defaultAddress", testAddr) + require.NoError(t, err) + assert.Equal(t, testAddr, cfg.Wallet.DefaultAddress.String()) + + testSwarmAddr := "/ip4/0.0.0.0/tcp/0" + err = cfgAPI.Set("swarm.address", testSwarmAddr) + require.NoError(t, err) + assert.Equal(t, testSwarmAddr, cfg.Swarm.Address) + + err = cfgAPI.Set("datastore.path", "/dev/null") + require.NoError(t, err) + assert.Equal(t, "/dev/null", cfg.Datastore.Path) + }) + + t.Run("failure cases fail", func(t *testing.T) { + repo := repo2.NewInMemoryRepo() + cfgAPI := NewConfigModule(repo) + + // bad key + jsonBlob := `{"addresses": ["bootup1", "bootup2"]}` + + err := cfgAPI.Set("botstrap", jsonBlob) + assert.EqualError(t, err, "json: unknown field \"botstrap\"") + + // bad value type (bootstrap is a struct not a list) + jsonBlobBadType := `["bootup1", "bootup2"]` + err = cfgAPI.Set("bootstrap", jsonBlobBadType) + assert.Error(t, err) + + // bad JSON + jsonBlobInvalid := `{"addresses": [bootup1, "bootup2"]}` + + err = cfgAPI.Set("bootstrap", jsonBlobInvalid) + assert.EqualError(t, err, "json: cannot unmarshal string into Go struct field Config.bootstrap of type config.BootstrapConfig") + + // bad address + jsonBlobBadAddr := "f4cqnyc0muxjajygqavu645m8ja04vckk2kcorrupt" + err = cfgAPI.Set("walletModule.defaultAddress", jsonBlobBadAddr) + assert.EqualError(t, err, address.ErrUnknownProtocol.Error()) + }) + +} diff --git a/app/submodule/dagservice/blockservice_api.go b/app/submodule/dagservice/blockservice_api.go new file mode 100644 index 0000000000..46813707ef --- /dev/null +++ b/app/submodule/dagservice/blockservice_api.go @@ -0,0 +1,38 @@ +package dagservice + +import ( + "context" + "io" + + "github.com/ipfs/go-cid" + ipld "github.com/ipfs/go-ipld-format" +) + +var _ IDagService = &dagServiceAPI{} + +type dagServiceAPI struct { //nolint + dagService *DagServiceSubmodule +} + +// DAGGetNode returns the associated DAG node for the passed in CID. +func (dagServiceAPI *dagServiceAPI) DAGGetNode(ctx context.Context, ref string) (interface{}, error) { + return dagServiceAPI.dagService.Dag.GetNode(ctx, ref) +} + +// DAGGetFileSize returns the file size for a given Cid +func (dagServiceAPI *dagServiceAPI) DAGGetFileSize(ctx context.Context, c cid.Cid) (uint64, error) { + return dagServiceAPI.dagService.Dag.GetFileSize(ctx, c) +} + +// DAGCat returns an iostream with a piece of data stored on the merkeldag with +// the given cid. +func (dagServiceAPI *dagServiceAPI) DAGCat(ctx context.Context, c cid.Cid) (io.Reader, error) { + return dagServiceAPI.dagService.Dag.Cat(ctx, c) +} + +// DAGImportData adds data from an io reader to the merkledag and returns the +// Cid of the given data. Once the data is in the DAG, it can fetched from the +// node via Bitswap and a copy will be kept in the blockstore. +func (dagServiceAPI *dagServiceAPI) DAGImportData(ctx context.Context, data io.Reader) (ipld.Node, error) { + return dagServiceAPI.dagService.Dag.ImportData(ctx, data) +} diff --git a/app/submodule/dagservice/blockservice_submoodule.go b/app/submodule/dagservice/blockservice_submoodule.go new file mode 100644 index 0000000000..41454a0a3d --- /dev/null +++ b/app/submodule/dagservice/blockservice_submoodule.go @@ -0,0 +1,53 @@ +package dagservice + +import ( + "context" + "io" + + "github.com/filecoin-project/venus/app/submodule/network" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/util/dag" + "github.com/ipfs/go-cid" + ipld "github.com/ipfs/go-ipld-format" + "github.com/ipfs/go-merkledag" + + bserv "github.com/ipfs/go-blockservice" +) + +type IDagService interface { + DAGGetNode(ctx context.Context, ref string) (interface{}, error) + DAGGetFileSize(ctx context.Context, c cid.Cid) (uint64, error) + DAGCat(ctx context.Context, c cid.Cid) (io.Reader, error) + DAGImportData(ctx context.Context, data io.Reader) (ipld.Node, error) +} + +// DagServiceSubmodule enhances the `Node` with networked key/value fetching capabilities. +// - `BlockService` is shared by chain/graphsync and piece/bitswap data +type DagServiceSubmodule struct { //nolint + // dagservice is a higher level interface for fetching data + Blockservice bserv.BlockService + + Dag *dag.DAG +} + +type dagConfig interface { + Repo() repo.Repo +} + +// NewDagserviceSubmodule creates a new block service submodule. +func NewDagserviceSubmodule(ctx context.Context, dagCfg dagConfig, network *network.NetworkSubmodule) (*DagServiceSubmodule, error) { + bservice := bserv.New(dagCfg.Repo().Datastore(), network.Bitswap) + dag := dag.NewDAG(merkledag.NewDAGService(bservice)) + return &DagServiceSubmodule{ + Blockservice: bservice, + Dag: dag, + }, nil +} + +func (blockService *DagServiceSubmodule) API() IDagService { + return &dagServiceAPI{dagService: blockService} +} + +func (blockService *DagServiceSubmodule) V0API() IDagService { + return &dagServiceAPI{dagService: blockService} +} diff --git a/app/submodule/discovery/discovery_api.go b/app/submodule/discovery/discovery_api.go new file mode 100644 index 0000000000..8288215621 --- /dev/null +++ b/app/submodule/discovery/discovery_api.go @@ -0,0 +1,9 @@ +package discovery + +type IDiscovery interface{} + +var _ IDiscovery = &discoveryAPI{} + +type discoveryAPI struct { //nolint + discovery *DiscoverySubmodule +} diff --git a/app/submodule/discovery/discovery_submodule.go b/app/submodule/discovery/discovery_submodule.go new file mode 100644 index 0000000000..d7408c201a --- /dev/null +++ b/app/submodule/discovery/discovery_submodule.go @@ -0,0 +1,137 @@ +package discovery + +import ( + "context" + "time" + + "github.com/filecoin-project/venus/app/submodule/network" + "github.com/filecoin-project/venus/pkg/repo" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/libp2p/go-libp2p-core/host" + + "github.com/ipfs/go-cid" + logging "github.com/ipfs/go-log/v2" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/chainsync/exchange" + "github.com/filecoin-project/venus/pkg/discovery" + "github.com/filecoin-project/venus/pkg/net" + "github.com/filecoin-project/venus/pkg/util/moresync" +) + +var log = logging.Logger("discover_module") // nolint + +// DiscoverySubmodule enhances the `Node` with peer discovery capabilities. +type DiscoverySubmodule struct { //nolint + Bootstrapper *discovery.Bootstrapper + BootstrapReady *moresync.Latch + + // PeerTracker maintains a list of peers. + PeerTracker *discovery.PeerTracker + + // HelloHandler handle peer connections for the "hello" protocol. + HelloHandler *discovery.HelloProtocolHandler + // HelloHandler handle peer connections for the "hello" protocol. + ExchangeHandler exchange.Server + ExchangeClient exchange.Client + host host.Host + PeerDiscoveryCallbacks []discovery.PeerDiscoveredCallback + TipSetLoader discovery.GetTipSetFunc +} + +type discoveryConfig interface { + GenesisCid() cid.Cid + Repo() repo.Repo +} + +// NewDiscoverySubmodule creates a new discovery submodule. +func NewDiscoverySubmodule(ctx context.Context, + discoverCfg discoveryConfig, + network *network.NetworkSubmodule, + chainStore *chain.Store, + messageStore *chain.MessageStore, +) (*DiscoverySubmodule, error) { + periodStr := discoverCfg.Repo().Config().Bootstrap.Period + period, err := time.ParseDuration(periodStr) + if err != nil { + return nil, errors.Wrapf(err, "couldn't parse bootstrap period %s", periodStr) + } + + // bootstrapper maintains connections to some subset of addresses + ba := discoverCfg.Repo().Config().Bootstrap.Addresses + bpi, err := net.PeerAddrsToAddrInfo(ba) + if err != nil { + return nil, errors.Wrapf(err, "couldn't parse bootstrap addresses [%s]", ba) + } + + minPeerThreshold := discoverCfg.Repo().Config().Bootstrap.MinPeerThreshold + + exchangeClient := exchange.NewClient(network.Host, network.PeerMgr) + // create a bootstrapper + bootstrapper := discovery.NewBootstrapper(bpi, network.Host, network.Host.Network(), network.Router, minPeerThreshold, period) + + // set up peer tracking + peerTracker := discovery.NewPeerTracker(network.Host.ID()) + + bootStrapReady := moresync.NewLatch(uint(minPeerThreshold)) + + return &DiscoverySubmodule{ + host: network.Host, + Bootstrapper: bootstrapper, + BootstrapReady: bootStrapReady, + PeerTracker: peerTracker, + ExchangeClient: exchangeClient, + HelloHandler: discovery.NewHelloProtocolHandler(network.Host, network.PeerMgr, exchangeClient, chainStore, messageStore, discoverCfg.GenesisCid(), time.Duration(discoverCfg.Repo().Config().NetworkParams.BlockDelay)*time.Second), + ExchangeHandler: exchange.NewServer(chainStore, messageStore, network.Host), + PeerDiscoveryCallbacks: []discovery.PeerDiscoveredCallback{func(msg *types.ChainInfo) { + bootStrapReady.Done() + }}, + TipSetLoader: func() (*types.TipSet, error) { + return chainStore.GetHead(), nil + }, + }, nil +} + +// Start starts the discovery submodule for a node. It blocks until bootstrap +// satisfies the configured security conditions. +func (discovery *DiscoverySubmodule) Start(offline bool) error { + // Register peer tracker disconnect function with network. + discovery.PeerTracker.RegisterDisconnect(discovery.host.Network()) + + // Start up 'hello' handshake service,recv HelloMessage ??? + peerDiscoveredCallback := func(ci *types.ChainInfo) { + for _, fn := range discovery.PeerDiscoveryCallbacks { + fn(ci) + } + } + + // Register the "hello" protocol with the network + discovery.HelloHandler.Register(peerDiscoveredCallback, discovery.TipSetLoader) + + //registre exchange protocol + discovery.ExchangeHandler.Register() + + // Start bootstrapper. + if !offline { + discovery.Bootstrapper.Start(context.Background()) + // Wait for bootstrap to be sufficient connected + discovery.BootstrapReady.Wait() + } + + return nil +} + +// Stop stops the discovery submodule. +func (discovery *DiscoverySubmodule) Stop() { + discovery.Bootstrapper.Stop() +} + +//API create a discovery api implement +func (discovery *DiscoverySubmodule) API() IDiscovery { + return &discoveryAPI{discovery: discovery} +} + +func (discovery *DiscoverySubmodule) V0API() IDiscovery { + return &discoveryAPI{discovery: discovery} +} diff --git a/app/submodule/market/market_api.go b/app/submodule/market/market_api.go new file mode 100644 index 0000000000..870bb11033 --- /dev/null +++ b/app/submodule/market/market_api.go @@ -0,0 +1,62 @@ +package market + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/statemanger" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + "golang.org/x/xerrors" +) + +type marketAPI struct { + chain v1api.IChain + stmgr statemanger.IStateManager +} + +func newMarketAPI(c v1api.IChain, stmgr statemanger.IStateManager) v1api.IMarket { + return &marketAPI{c, stmgr} +} + +// StateMarketParticipants returns the Escrow and Locked balances of every participant in the Storage Market +func (m *marketAPI) StateMarketParticipants(ctx context.Context, tsk types.TipSetKey) (map[string]apitypes.MarketBalance, error) { + out := map[string]apitypes.MarketBalance{} + ts, err := m.chain.ChainGetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + + state, err := m.stmgr.GetMarketState(ctx, ts) + if err != nil { + return nil, err + } + escrow, err := state.EscrowTable() + if err != nil { + return nil, err + } + locked, err := state.LockedTable() + if err != nil { + return nil, err + } + + err = escrow.ForEach(func(a address.Address, es abi.TokenAmount) error { + + lk, err := locked.Get(a) + if err != nil { + return err + } + + out[a.String()] = apitypes.MarketBalance{ + Escrow: es, + Locked: lk, + } + return nil + }) + if err != nil { + return nil, err + } + return out, nil +} diff --git a/app/submodule/market/market_submodule.go b/app/submodule/market/market_submodule.go new file mode 100644 index 0000000000..4f9751b20a --- /dev/null +++ b/app/submodule/market/market_submodule.go @@ -0,0 +1,26 @@ +package market + +import ( + "github.com/filecoin-project/venus/pkg/statemanger" + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" +) + +// MarketSubmodule enhances the `Node` with market capabilities. +type MarketSubmodule struct { //nolint + c v1api.IChain + sm statemanger.IStateManager +} + +// NewMarketModule create new market module +func NewMarketModule(c v1api.IChain, sm statemanger.IStateManager) *MarketSubmodule { //nolint + return &MarketSubmodule{c, sm} +} + +func (ms *MarketSubmodule) API() v1api.IMarket { + return newMarketAPI(ms.c, ms.sm) +} + +func (ms *MarketSubmodule) V0API() v0api.IMarket { + return newMarketAPI(ms.c, ms.sm) +} diff --git a/app/submodule/mining/mining_api.go b/app/submodule/mining/mining_api.go new file mode 100644 index 0000000000..ad073205f7 --- /dev/null +++ b/app/submodule/mining/mining_api.go @@ -0,0 +1,316 @@ +package mining + +import ( + "bytes" + "context" + "os" + + cbor "github.com/ipfs/go-ipld-cbor" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + acrypto "github.com/filecoin-project/go-state-types/crypto" + + "github.com/ipfs/go-cid" + xerrors "github.com/pkg/errors" + + ffi "github.com/filecoin-project/filecoin-ffi" + + "github.com/filecoin-project/venus/pkg/beacon" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + wtypes "github.com/filecoin-project/venus/venus-shared/wallet" +) + +var _ v1api.IMining = &MiningAPI{} + +type MiningAPI struct { //nolint + Ming *MiningModule +} + +//MinerGetBaseInfo get current miner information +func (miningAPI *MiningAPI) MinerGetBaseInfo(ctx context.Context, maddr address.Address, round abi.ChainEpoch, tsk types.TipSetKey) (*apitypes.MiningBaseInfo, error) { + chainStore := miningAPI.Ming.ChainModule.ChainReader + ts, err := chainStore.GetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("failed to load tipset for mining base: %v", err) + } + pt, _, err := miningAPI.Ming.Stmgr.RunStateTransition(ctx, ts) + if err != nil { + return nil, xerrors.Errorf("failed to get tipset root for mining base: %v", err) + } + prev, err := chainStore.GetLatestBeaconEntry(ctx, ts) + if err != nil { + if os.Getenv("VENUS_IGNORE_DRAND") != "_yes_" { + return nil, xerrors.Errorf("failed to get latest beacon entry: %v", err) + } + + prev = &types.BeaconEntry{} + } + + entries, err := beacon.BeaconEntriesForBlock(ctx, miningAPI.Ming.ChainModule.Drand, round, ts.Height(), *prev) + if err != nil { + return nil, err + } + + rbase := *prev + if len(entries) > 0 { + rbase = entries[len(entries)-1] + } + version := miningAPI.Ming.ChainModule.Fork.GetNtwkVersion(ctx, round) + lbts, lbst, err := miningAPI.Ming.ChainModule.ChainReader.GetLookbackTipSetForRound(ctx, ts, round, version) + if err != nil { + return nil, xerrors.Errorf("getting lookback miner actor state: %v", err) + } + + view := state.NewView(chainStore.Store(ctx), lbst) + act, err := view.LoadActor(ctx, maddr) + if xerrors.Is(err, types.ErrActorNotFound) { + //todo why + view = state.NewView(chainStore.Store(ctx), ts.At(0).ParentStateRoot) + _, err := view.LoadActor(ctx, maddr) + if err != nil { + return nil, xerrors.Errorf("loading miner in current state: %v", err) + } + + return nil, nil + } + if err != nil { + return nil, xerrors.Errorf("failed to load miner actor: %v", err) + } + mas, err := miner.Load(chainStore.Store(ctx), act) + if err != nil { + return nil, xerrors.Errorf("failed to load miner actor state: %v", err) + } + + buf := new(bytes.Buffer) + if err := maddr.MarshalCBOR(buf); err != nil { + return nil, xerrors.Errorf("failed to marshal miner address: %v", err) + } + + prand, err := chain.DrawRandomness(rbase.Data, acrypto.DomainSeparationTag_WinningPoStChallengeSeed, round, buf.Bytes()) + if err != nil { + return nil, xerrors.Errorf("failed to get randomness for winning post: %v", err) + } + + nv := miningAPI.Ming.ChainModule.Fork.GetNtwkVersion(ctx, ts.Height()) + + pv := miningAPI.Ming.proofVerifier + sectors, err := view.GetSectorsForWinningPoSt(ctx, nv, pv, maddr, prand) + if err != nil { + return nil, xerrors.Errorf("getting winning post proving set: %v", err) + } + + if len(sectors) == 0 { + return nil, nil + } + + mpow, tpow, _, err := view.StateMinerPower(ctx, maddr, ts.Key()) + if err != nil { + return nil, xerrors.Errorf("failed to get power: %v", err) + } + + info, err := mas.Info() + if err != nil { + return nil, err + } + + st, err := miningAPI.Ming.ChainModule.ChainReader.StateView(ctx, ts) + if err != nil { + return nil, xerrors.Errorf("failed to load latest state: %v", err) + } + worker, err := st.ResolveToKeyAddr(ctx, info.Worker) + if err != nil { + return nil, xerrors.Errorf("resolving worker address: %v", err) + } + + // TODO: Not ideal performance...This method reloads miner and power state (already looked up here and in GetPowerRaw) + eligible, err := miningAPI.Ming.SyncModule.BlockValidator.MinerEligibleToMine(ctx, maddr, pt, ts.Height(), lbts) + if err != nil { + return nil, xerrors.Errorf("determining miner eligibility: %v", err) + } + + return &apitypes.MiningBaseInfo{ + MinerPower: mpow.QualityAdjPower, + NetworkPower: tpow.QualityAdjPower, + Sectors: sectors, + WorkerKey: worker, + SectorSize: info.SectorSize, + PrevBeaconEntry: *prev, + BeaconEntries: entries, + EligibleForMining: eligible, + }, nil +} + +//MinerCreateBlock create block base on template +func (miningAPI *MiningAPI) MinerCreateBlock(ctx context.Context, bt *apitypes.BlockTemplate) (*types.BlockMsg, error) { + fblk, err := miningAPI.minerCreateBlock(ctx, bt) + if err != nil { + return nil, err + } + + var out types.BlockMsg + out.Header = fblk.Header + for _, msg := range fblk.BLSMessages { + out.BlsMessages = append(out.BlsMessages, msg.Cid()) + } + for _, msg := range fblk.SECPMessages { + out.SecpkMessages = append(out.SecpkMessages, msg.Cid()) + } + + return &out, nil +} + +func (miningAPI *MiningAPI) minerCreateBlock(ctx context.Context, bt *apitypes.BlockTemplate) (*types.FullBlock, error) { + chainStore := miningAPI.Ming.ChainModule.ChainReader + messageStore := miningAPI.Ming.ChainModule.MessageStore + cfg := miningAPI.Ming.Config.Repo().Config() + pts, err := chainStore.GetTipSet(ctx, bt.Parents) + if err != nil { + return nil, xerrors.Errorf("failed to load parent tipset: %v", err) + } + + st, receiptCid, err := miningAPI.Ming.Stmgr.RunStateTransition(ctx, pts) + if err != nil { + return nil, xerrors.Errorf("failed to load tipset state: %v", err) + } + + version := miningAPI.Ming.ChainModule.Fork.GetNtwkVersion(ctx, bt.Epoch) + _, lbst, err := miningAPI.Ming.ChainModule.ChainReader.GetLookbackTipSetForRound(ctx, pts, bt.Epoch, version) + if err != nil { + return nil, xerrors.Errorf("getting lookback miner actor state: %v", err) + } + + viewer := state.NewView(cbor.NewCborStore(miningAPI.Ming.BlockStore.Blockstore), lbst) + worker, err := viewer.GetMinerWorkerRaw(ctx, bt.Miner) + if err != nil { + return nil, xerrors.Errorf("failed to get miner worker: %v", err) + } + + next := &types.BlockHeader{ + Miner: bt.Miner, + Parents: bt.Parents.Cids(), + Ticket: bt.Ticket, + ElectionProof: bt.Eproof, + + BeaconEntries: bt.BeaconValues, + Height: bt.Epoch, + Timestamp: bt.Timestamp, + WinPoStProof: bt.WinningPoStProof, + ParentStateRoot: st, + ParentMessageReceipts: receiptCid, + } + + var blsMessages []*types.Message + var secpkMessages []*types.SignedMessage + + var blsMsgCids, secpkMsgCids []cid.Cid + var blsSigs []crypto.Signature + for _, msg := range bt.Messages { + if msg.Signature.Type == crypto.SigTypeBLS { + blsSigs = append(blsSigs, msg.Signature) + blsMessages = append(blsMessages, &msg.Message) + c, err := messageStore.StoreMessage(&msg.Message) + if err != nil { + return nil, err + } + + blsMsgCids = append(blsMsgCids, c) + } else { + c, err := messageStore.StoreMessage(msg) + if err != nil { + return nil, err + } + + secpkMsgCids = append(secpkMsgCids, c) + secpkMessages = append(secpkMessages, msg) + + } + } + store := miningAPI.Ming.BlockStore.Blockstore + + mmcid, err := chain.ComputeMsgMeta(store, blsMsgCids, secpkMsgCids) + if err != nil { + return nil, err + } + next.Messages = mmcid + + aggSig, err := aggregateSignatures(blsSigs) + if err != nil { + return nil, err + } + + next.BLSAggregate = aggSig + + pweight, err := miningAPI.Ming.SyncModule.ChainSelector.Weight(ctx, pts) + if err != nil { + return nil, err + } + next.ParentWeight = pweight + + baseFee, err := messageStore.ComputeBaseFee(ctx, pts, cfg.NetworkParams.ForkUpgradeParam) + if err != nil { + return nil, xerrors.Errorf("computing base fee: %v", err) + } + next.ParentBaseFee = baseFee + + bHas, err := miningAPI.Ming.Wallet.API().WalletHas(ctx, worker) + if err != nil { + return nil, xerrors.Errorf("find wallet: %v", err) + } + + if bHas { + nosigbytes, err := next.SignatureData() + if err != nil { + return nil, err + } + sig, err := miningAPI.Ming.Wallet.API().WalletSign(ctx, worker, nosigbytes, wtypes.MsgMeta{ + Type: wtypes.MTBlock, + }) + if err != nil { + return nil, xerrors.Errorf("failed to sign new block: %v", err) + } + + next.BlockSig = sig + } + + fullBlock := &types.FullBlock{ + Header: next, + BLSMessages: blsMessages, + SECPMessages: secpkMessages, + } + + return fullBlock, nil +} + +func aggregateSignatures(sigs []crypto.Signature) (*crypto.Signature, error) { + sigsS := make([]ffi.Signature, len(sigs)) + for i := 0; i < len(sigs); i++ { + copy(sigsS[i][:], sigs[i].Data[:ffi.SignatureBytes]) + } + + aggSig := ffi.Aggregate(sigsS) + if aggSig == nil { + if len(sigs) > 0 { + return nil, xerrors.Errorf("bls.Aggregate returned nil with %d signatures", len(sigs)) + } + + zeroSig := ffi.CreateZeroSignature() + + // Note: for blst this condition should not happen - nil should not + // be returned + return &crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: zeroSig[:], + }, nil + } + return &crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: aggSig[:], + }, nil +} diff --git a/app/submodule/mining/mining_submodule.go b/app/submodule/mining/mining_submodule.go new file mode 100644 index 0000000000..5a9901a45e --- /dev/null +++ b/app/submodule/mining/mining_submodule.go @@ -0,0 +1,62 @@ +package mining + +import ( + "github.com/filecoin-project/venus/app/submodule/blockstore" + chain2 "github.com/filecoin-project/venus/app/submodule/chain" + "github.com/filecoin-project/venus/app/submodule/network" + "github.com/filecoin-project/venus/app/submodule/syncer" + "github.com/filecoin-project/venus/app/submodule/wallet" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/statemanger" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" +) + +type miningConfig interface { + Repo() repo.Repo + Verifier() ffiwrapper.Verifier +} + +// MiningModule enhances the `Node` with miner capabilities. +type MiningModule struct { //nolint + Config miningConfig + ChainModule *chain2.ChainSubmodule + BlockStore *blockstore.BlockstoreSubmodule + NetworkModule *network.NetworkSubmodule + SyncModule *syncer.SyncerSubmodule + Wallet wallet.WalletSubmodule + proofVerifier ffiwrapper.Verifier + Stmgr *statemanger.Stmgr +} + +//API create new miningAPi implement +func (miningModule *MiningModule) API() v1api.IMining { + return &MiningAPI{Ming: miningModule} +} + +func (miningModule *MiningModule) V0API() v0api.IMining { + return &MiningAPI{Ming: miningModule} +} + +//NewMiningModule create new mining module +func NewMiningModule( + stmgr *statemanger.Stmgr, + conf miningConfig, + chainModule *chain2.ChainSubmodule, + blockStore *blockstore.BlockstoreSubmodule, + networkModule *network.NetworkSubmodule, + syncModule *syncer.SyncerSubmodule, + wallet wallet.WalletSubmodule, +) *MiningModule { + return &MiningModule{ + Stmgr: stmgr, + Config: conf, + ChainModule: chainModule, + BlockStore: blockStore, + NetworkModule: networkModule, + SyncModule: syncModule, + Wallet: wallet, + proofVerifier: conf.Verifier(), + } +} diff --git a/app/submodule/mpool/mpool_api.go b/app/submodule/mpool/mpool_api.go new file mode 100644 index 0000000000..3a9857dc09 --- /dev/null +++ b/app/submodule/mpool/mpool_api.go @@ -0,0 +1,352 @@ +package mpool + +import ( + "context" + "encoding/json" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/pkg/messagepool" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + mptypes "github.com/filecoin-project/venus/venus-shared/messagepool" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" +) + +var _ v1api.IMessagePool = &MessagePoolAPI{} + +//MessagePoolAPI messsage pool api implement +type MessagePoolAPI struct { + pushLocks *messagepool.MpoolLocker + + mp *MessagePoolSubmodule +} + +//MpoolDeleteByAdress delete msg in mpool of addr +func (a *MessagePoolAPI) MpoolDeleteByAdress(ctx context.Context, addr address.Address) error { + return a.mp.MPool.DeleteByAdress(addr) +} + +//MpoolPublish publish message of address +func (a *MessagePoolAPI) MpoolPublishByAddr(ctx context.Context, addr address.Address) error { + return a.mp.MPool.PublishMsgForWallet(ctx, addr) +} + +func (a *MessagePoolAPI) MpoolPublishMessage(ctx context.Context, smsg *types.SignedMessage) error { + return a.mp.MPool.PublishMsg(ctx, smsg) +} + +// MpoolPush pushes a signed message to mempool. +func (a *MessagePoolAPI) MpoolPush(ctx context.Context, smsg *types.SignedMessage) (cid.Cid, error) { + return a.mp.MPool.Push(ctx, smsg) +} + +// MpoolGetConfig returns (a copy of) the current mpool config +func (a *MessagePoolAPI) MpoolGetConfig(context.Context) (*mptypes.MpoolConfig, error) { + cfg := a.mp.MPool.GetConfig() + return &mptypes.MpoolConfig{ + PriorityAddrs: cfg.PriorityAddrs, + SizeLimitHigh: cfg.SizeLimitHigh, + SizeLimitLow: cfg.SizeLimitLow, + ReplaceByFeeRatio: cfg.ReplaceByFeeRatio, + PruneCooldown: cfg.PruneCooldown, + GasLimitOverestimation: cfg.GasLimitOverestimation, + }, nil +} + +// MpoolSetConfig sets the mpool config to (a copy of) the supplied config +func (a *MessagePoolAPI) MpoolSetConfig(ctx context.Context, cfg *mptypes.MpoolConfig) error { + return a.mp.MPool.SetConfig(ctx, &messagepool.MpoolConfig{ + PriorityAddrs: cfg.PriorityAddrs, + SizeLimitHigh: cfg.SizeLimitHigh, + SizeLimitLow: cfg.SizeLimitLow, + ReplaceByFeeRatio: cfg.ReplaceByFeeRatio, + PruneCooldown: cfg.PruneCooldown, + GasLimitOverestimation: cfg.GasLimitOverestimation, + }) +} + +// MpoolSelect returns a list of pending messages for inclusion in the next block +func (a *MessagePoolAPI) MpoolSelect(ctx context.Context, tsk types.TipSetKey, ticketQuality float64) ([]*types.SignedMessage, error) { + ts, err := a.mp.chain.API().ChainGetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + + return a.mp.MPool.SelectMessages(ctx, ts, ticketQuality) +} + +//MpoolSelects The batch selection message is used when multiple blocks need to select messages at the same time +func (a *MessagePoolAPI) MpoolSelects(ctx context.Context, tsk types.TipSetKey, ticketQualitys []float64) ([][]*types.SignedMessage, error) { + ts, err := a.mp.chain.API().ChainGetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + + return a.mp.MPool.MultipleSelectMessages(ctx, ts, ticketQualitys) +} + +// MpoolPending returns pending mempool messages. +func (a *MessagePoolAPI) MpoolPending(ctx context.Context, tsk types.TipSetKey) ([]*types.SignedMessage, error) { + var ts *types.TipSet + var err error + if tsk.IsEmpty() { + ts, err = a.mp.chain.API().ChainHead(ctx) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + } else { + ts, err = a.mp.chain.API().ChainGetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + } + + pending, mpts := a.mp.MPool.Pending(ctx) + + haveCids := map[cid.Cid]struct{}{} + for _, m := range pending { + haveCids[m.Cid()] = struct{}{} + } + + mptsH := mpts.Height() + tsH := ts.Height() + if ts == nil || mptsH > tsH { + return pending, nil + } + + for { + mptsH = mpts.Height() + tsH = ts.Height() + if mptsH == tsH { + if mpts.Equals(ts) { + return pending, nil + } + // different blocks in tipsets + + have, err := a.mp.MPool.MessagesForBlocks(ctx, ts.Blocks()) + if err != nil { + return nil, xerrors.Errorf("getting messages for base ts: %w", err) + } + + for _, m := range have { + haveCids[m.Cid()] = struct{}{} + } + } + + msgs, err := a.mp.MPool.MessagesForBlocks(ctx, ts.Blocks()) + if err != nil { + return nil, xerrors.Errorf(": %w", err) + } + + for _, m := range msgs { + mc := m.Cid() + if _, ok := haveCids[mc]; ok { + continue + } + + haveCids[mc] = struct{}{} + pending = append(pending, m) + } + + mptsH = mpts.Height() + tsH = ts.Height() + if mptsH >= tsH { + return pending, nil + } + + ts, err = a.mp.chain.API().ChainGetTipSet(ctx, ts.Parents()) + if err != nil { + return nil, xerrors.Errorf("loading parent tipset: %w", err) + } + } +} + +// MpoolClear clears pending messages from the mpool +func (a *MessagePoolAPI) MpoolClear(ctx context.Context, local bool) error { + a.mp.MPool.Clear(ctx, local) + return nil +} + +// MpoolPushUntrusted pushes a signed message to mempool from untrusted sources. +func (a *MessagePoolAPI) MpoolPushUntrusted(ctx context.Context, smsg *types.SignedMessage) (cid.Cid, error) { + return a.mp.MPool.PushUntrusted(ctx, smsg) +} + +// MpoolPushMessage atomically assigns a nonce, signs, and pushes a message +// to mempool. +// maxFee is only used when GasFeeCap/GasPremium fields aren't specified +// +// When maxFee is set to 0, MpoolPushMessage will guess appropriate fee +// based on current chain conditions +func (a *MessagePoolAPI) MpoolPushMessage(ctx context.Context, msg *types.Message, spec *apitypes.MessageSendSpec) (*types.SignedMessage, error) { + cp := *msg + msg = &cp + inMsg := *msg + fromA, err := a.mp.chain.API().StateAccountKey(ctx, msg.From, types.EmptyTSK) + if err != nil { + return nil, xerrors.Errorf("getting key address: %w", err) + } + { + done, err := a.pushLocks.TakeLock(ctx, fromA) + if err != nil { + return nil, xerrors.Errorf("taking lock: %w", err) + } + defer done() + } + + if msg.Nonce != 0 { + return nil, xerrors.Errorf("MpoolPushMessage expects message nonce to be 0, was %d", msg.Nonce) + } + + msg, err = a.GasEstimateMessageGas(ctx, msg, spec, types.TipSetKey{}) + if err != nil { + return nil, xerrors.Errorf("GasEstimateMessageGas error: %w", err) + } + + if msg.GasPremium.GreaterThan(msg.GasFeeCap) { + inJSON, err := json.Marshal(inMsg) + if err != nil { + return nil, err + } + outJSON, err := json.Marshal(msg) + if err != nil { + return nil, err + } + return nil, xerrors.Errorf("After estimation, GasPremium is greater than GasFeeCap, inmsg: %s, outmsg: %s", + inJSON, outJSON) + } + + if msg.From.Protocol() == address.ID { + log.Warnf("Push from ID address (%s), adjusting to %s", msg.From, fromA) + msg.From = fromA + } + + b, err := a.mp.walletAPI.WalletBalance(ctx, msg.From) + if err != nil { + return nil, xerrors.Errorf("mpool push: getting origin balance: %w", err) + } + + if b.LessThan(msg.Value) { + return nil, xerrors.Errorf("mpool push: not enough funds: %s < %s", b, msg.Value) + } + + // Sign and push the message + return a.mp.msgSigner.SignMessage(ctx, msg, func(smsg *types.SignedMessage) error { + if _, err := a.MpoolPush(ctx, smsg); err != nil { + return xerrors.Errorf("mpool push: failed to push message: %w", err) + } + return nil + }) +} + +// MpoolBatchPush batch pushes a unsigned message to mempool. +func (a *MessagePoolAPI) MpoolBatchPush(ctx context.Context, smsgs []*types.SignedMessage) ([]cid.Cid, error) { + var messageCids []cid.Cid + for _, smsg := range smsgs { + smsgCid, err := a.mp.MPool.Push(ctx, smsg) + if err != nil { + return messageCids, err + } + messageCids = append(messageCids, smsgCid) + } + return messageCids, nil +} + +// MpoolBatchPushUntrusted batch pushes a signed message to mempool from untrusted sources. +func (a *MessagePoolAPI) MpoolBatchPushUntrusted(ctx context.Context, smsgs []*types.SignedMessage) ([]cid.Cid, error) { + var messageCids []cid.Cid + for _, smsg := range smsgs { + smsgCid, err := a.mp.MPool.PushUntrusted(ctx, smsg) + if err != nil { + return messageCids, err + } + messageCids = append(messageCids, smsgCid) + } + return messageCids, nil +} + +// MpoolBatchPushMessage batch pushes a unsigned message to mempool. +func (a *MessagePoolAPI) MpoolBatchPushMessage(ctx context.Context, msgs []*types.Message, spec *apitypes.MessageSendSpec) ([]*types.SignedMessage, error) { + var smsgs []*types.SignedMessage + for _, msg := range msgs { + smsg, err := a.MpoolPushMessage(ctx, msg, spec) + if err != nil { + return smsgs, err + } + smsgs = append(smsgs, smsg) + } + return smsgs, nil +} + +// MpoolGetNonce gets next nonce for the specified sender. +// Note that this method may not be atomic. Use MpoolPushMessage instead. +func (a *MessagePoolAPI) MpoolGetNonce(ctx context.Context, addr address.Address) (uint64, error) { + return a.mp.MPool.GetNonce(ctx, addr, types.EmptyTSK) +} + +func (a *MessagePoolAPI) MpoolSub(ctx context.Context) (<-chan mptypes.MpoolUpdate, error) { + return a.mp.MPool.Updates(ctx) +} + +// GasEstimateMessageGas estimates gas values for unset message gas fields +func (a *MessagePoolAPI) GasEstimateMessageGas(ctx context.Context, msg *types.Message, spec *apitypes.MessageSendSpec, tsk types.TipSetKey) (*types.Message, error) { + return a.mp.MPool.GasEstimateMessageGas(ctx, &apitypes.EstimateMessage{Msg: msg, Spec: spec}, tsk) +} + +func (a *MessagePoolAPI) GasBatchEstimateMessageGas(ctx context.Context, estimateMessages []*apitypes.EstimateMessage, fromNonce uint64, tsk types.TipSetKey) ([]*apitypes.EstimateResult, error) { + return a.mp.MPool.GasBatchEstimateMessageGas(ctx, estimateMessages, fromNonce, tsk) +} + +// GasEstimateFeeCap estimates gas fee cap +func (a *MessagePoolAPI) GasEstimateFeeCap(ctx context.Context, msg *types.Message, maxqueueblks int64, tsk types.TipSetKey) (big.Int, error) { + return a.mp.MPool.GasEstimateFeeCap(ctx, msg, maxqueueblks, tsk) +} + +func (a *MessagePoolAPI) GasEstimateGasLimit(ctx context.Context, msgIn *types.Message, tsk types.TipSetKey) (int64, error) { + return a.mp.MPool.GasEstimateGasLimit(ctx, msgIn, tsk) +} + +// GasEstimateGasPremium estimates what gas price should be used for a +// message to have high likelihood of inclusion in `nblocksincl` epochs. +func (a *MessagePoolAPI) GasEstimateGasPremium(ctx context.Context, nblocksincl uint64, sender address.Address, gaslimit int64, tsk types.TipSetKey) (big.Int, error) { + return a.mp.MPool.GasEstimateGasPremium(ctx, nblocksincl, sender, gaslimit, tsk, a.mp.MPool.PriceCache) +} + +func (a *MessagePoolAPI) MpoolCheckMessages(ctx context.Context, protos []*mptypes.MessagePrototype) ([][]mptypes.MessageCheckStatus, error) { + return a.mp.MPool.CheckMessages(ctx, protos) +} + +func (a *MessagePoolAPI) MpoolCheckPendingMessages(ctx context.Context, addr address.Address) ([][]mptypes.MessageCheckStatus, error) { + return a.mp.MPool.CheckPendingMessages(ctx, addr) +} + +func (a *MessagePoolAPI) MpoolCheckReplaceMessages(ctx context.Context, msg []*types.Message) ([][]mptypes.MessageCheckStatus, error) { + return a.mp.MPool.CheckReplaceMessages(ctx, msg) +} + +/*// WalletSign signs the given bytes using the given address. +func (a *MessagePoolAPI) WalletSign(ctx context.Context, k address.Address, msg []byte) (*crypto.Signature, error) { + head := a.mp.chain.ChainReader.GetHead() + view, err := a.mp.chain.ChainReader.StateView(head) + if err != nil { + return nil, err + } + + keyAddr, err := view.ResolveToKeyAddr(ctx, k) + if err != nil { + return nil, xerrors.Errorf("failed to resolve ID address: %v", keyAddr) + } + //var meta wallet.MsgMeta + //if len(metas) > 0 { + // meta = metas[0] + //} else { + meta := wallet.MsgMeta{ + Type: wallet.MTUnknown, + } + //} + return a.mp.walletAPI.WalletSign(ctx, keyAddr, msg, meta) +} +*/ diff --git a/app/submodule/mpool/mpool_submodule.go b/app/submodule/mpool/mpool_submodule.go new file mode 100644 index 0000000000..32125fe19f --- /dev/null +++ b/app/submodule/mpool/mpool_submodule.go @@ -0,0 +1,258 @@ +package mpool + +import ( + "bytes" + "context" + "os" + "strconv" + "time" + + "github.com/libp2p/go-libp2p-core/peer" + pubsub "github.com/libp2p/go-libp2p-pubsub" + + "github.com/filecoin-project/go-address" + logging "github.com/ipfs/go-log" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/app/submodule/chain" + "github.com/filecoin-project/venus/app/submodule/network" + "github.com/filecoin-project/venus/app/submodule/wallet" + chainpkg "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/messagepool" + "github.com/filecoin-project/venus/pkg/messagepool/journal" + "github.com/filecoin-project/venus/pkg/net/msgsub" + "github.com/filecoin-project/venus/pkg/repo" + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var pubsubMsgsSyncEpochs = 10 + +func init() { + if s := os.Getenv("VENUS_MSGS_SYNC_EPOCHS"); s != "" { + val, err := strconv.Atoi(s) + if err != nil { + log.Errorf("failed to parse LOTUS_MSGS_SYNC_EPOCHS: %s", err) + return + } + pubsubMsgsSyncEpochs = val + } +} + +var log = logging.Logger("mpool") + +type messagepoolConfig interface { + Repo() repo.Repo +} + +// MessagingSubmodule enhances the `Node` with internal message capabilities. +type MessagePoolSubmodule struct { //nolint + // Network Fields + MessageTopic *pubsub.Topic + MessageSub *pubsub.Subscription + + MPool *messagepool.MessagePool + msgSigner *messagepool.MessageSigner + chain *chain.ChainSubmodule + network *network.NetworkSubmodule + walletAPI v1api.IWallet + networkCfg *config.NetworkParamsConfig +} + +func OpenFilesystemJournal(lr repo.Repo) (journal.Journal, error) { + jrnl, err := journal.OpenFSJournal(lr, journal.EnvDisabledEvents()) + if err != nil { + return nil, err + } + + return jrnl, err +} + +func NewMpoolSubmodule(ctx context.Context, cfg messagepoolConfig, + network *network.NetworkSubmodule, + chain *chain.ChainSubmodule, + wallet *wallet.WalletSubmodule, +) (*MessagePoolSubmodule, error) { + mpp := messagepool.NewProvider(chain.Stmgr, chain.ChainReader, chain.MessageStore, cfg.Repo().Config().NetworkParams, network.Pubsub) + + j, err := OpenFilesystemJournal(cfg.Repo()) + if err != nil { + return nil, err + } + mp, err := messagepool.New(ctx, mpp, chain.Stmgr, cfg.Repo().MetaDatastore(), + cfg.Repo().Config().NetworkParams.ForkUpgradeParam, cfg.Repo().Config().Mpool, + network.NetworkName, j) + if err != nil { + return nil, xerrors.Errorf("constructing mpool: %s", err) + } + + return &MessagePoolSubmodule{ + MPool: mp, + chain: chain, + walletAPI: wallet.API(), + network: network, + networkCfg: cfg.Repo().Config().NetworkParams, + msgSigner: messagepool.NewMessageSigner(wallet.WalletIntersection(), mp, cfg.Repo().MetaDatastore()), + }, nil +} + +func (mp *MessagePoolSubmodule) handleIncomingMessage(ctx context.Context) { + for { + _, err := mp.MessageSub.Next(ctx) + if err != nil { + log.Warn("error from message subscription: ", err) + if ctx.Err() != nil { + log.Warn("quitting HandleIncomingMessages loop") + return + } + continue + } + } +} + +func (mp *MessagePoolSubmodule) Validate(ctx context.Context, pid peer.ID, msg *pubsub.Message) pubsub.ValidationResult { + if pid == mp.network.Host.ID() { + return mp.validateLocalMessage(ctx, msg) + } + + m := &types.SignedMessage{} + if err := m.UnmarshalCBOR(bytes.NewReader(msg.GetData())); err != nil { + log.Warnf("failed to decode incoming message: %s", err) + return pubsub.ValidationReject + } + + log.Debugf("validate incoming msg:%s", m.Cid().String()) + + if err := mp.MPool.Add(ctx, m); err != nil { + log.Debugf("failed to add message from network to message pool (From: %s, To: %s, Nonce: %d, Value: %s): %s", m.Message.From, m.Message.To, m.Message.Nonce, types.FIL(m.Message.Value), err) + switch { + case xerrors.Is(err, messagepool.ErrSoftValidationFailure): + fallthrough + case xerrors.Is(err, messagepool.ErrRBFTooLowPremium): + fallthrough + case xerrors.Is(err, messagepool.ErrTooManyPendingMessages): + fallthrough + case xerrors.Is(err, messagepool.ErrNonceGap): + fallthrough + case xerrors.Is(err, messagepool.ErrNonceTooLow): + return pubsub.ValidationIgnore + default: + return pubsub.ValidationReject + } + } + return pubsub.ValidationAccept +} + +func (mp *MessagePoolSubmodule) validateLocalMessage(ctx context.Context, msg *pubsub.Message) pubsub.ValidationResult { + m := &types.SignedMessage{} + if err := m.UnmarshalCBOR(bytes.NewReader(msg.GetData())); err != nil { + return pubsub.ValidationIgnore + } + + if m.ChainLength() > messagepool.MaxMessageSize { + log.Warnf("local message is too large! (%dB)", m.ChainLength()) + return pubsub.ValidationIgnore + } + + if m.Message.To == address.Undef { + log.Warn("local message has invalid destination address") + return pubsub.ValidationIgnore + } + + if !m.Message.Value.LessThan(types.TotalFilecoinInt) { + log.Warnf("local messages has too high value: %s", m.Message.Value) + return pubsub.ValidationIgnore + } + + if err := mp.MPool.VerifyMsgSig(m); err != nil { + log.Warnf("signature verification failed for local message: %s", err) + return pubsub.ValidationIgnore + } + + return pubsub.ValidationAccept +} + +// Start to the message pubsub topic to learn about messages to mine into blocks. +func (mp *MessagePoolSubmodule) Start(ctx context.Context) error { + topicName := msgsub.Topic(mp.network.NetworkName) + var err error + if err = mp.network.Pubsub.RegisterTopicValidator(topicName, mp.Validate); err != nil { + return err + } + + subscribe := func() { + var err error + if mp.MessageTopic, err = mp.network.Pubsub.Join(topicName); err != nil { + panic(err) + } + if mp.MessageSub, err = mp.MessageTopic.Subscribe(); err != nil { + panic(err) + } + go mp.handleIncomingMessage(ctx) + } + + // wait until we are synced within 10 epochs + go mp.waitForSync(pubsubMsgsSyncEpochs, subscribe) + + return nil +} + +func (mp *MessagePoolSubmodule) waitForSync(epochs int, subscribe func()) { + nearsync := time.Duration(epochs*int(mp.networkCfg.BlockDelay)) * time.Second + + // early check, are we synced at start up? + ts := mp.chain.ChainReader.GetHead() + timestamp := ts.MinTimestamp() + timestampTime := time.Unix(int64(timestamp), 0) + if constants.Clock.Since(timestampTime) < nearsync { + subscribe() + return + } + + // we are not synced, subscribe to head changes and wait for sync + mp.chain.ChainReader.SubscribeHeadChanges(func(rev, app []*types.TipSet) error { + if len(app) == 0 { + return nil + } + + latest := app[0].MinTimestamp() + for _, ts := range app[1:] { + timestamp := ts.MinTimestamp() + if timestamp > latest { + latest = timestamp + } + } + + latestTime := time.Unix(int64(latest), 0) + if constants.Clock.Since(latestTime) < nearsync { + subscribe() + return chainpkg.ErrNotifeeDone + } + + return nil + }) +} + +func (mp *MessagePoolSubmodule) Stop(ctx context.Context) { + err := mp.MPool.Close() + if err != nil { + log.Errorf("failed to close mpool: %s", err) + } + if mp.MessageSub != nil { + mp.MessageSub.Cancel() + } +} + +//API create a new mpool api implement +func (mp *MessagePoolSubmodule) API() v1api.IMessagePool { + pushLocks := messagepool.NewMpoolLocker() + return &MessagePoolAPI{mp: mp, pushLocks: pushLocks} +} + +func (mp *MessagePoolSubmodule) V0API() v0api.IMessagePool { + pushLocks := messagepool.NewMpoolLocker() + return &MessagePoolAPI{mp: mp, pushLocks: pushLocks} +} diff --git a/app/submodule/multisig/multisig_api.go b/app/submodule/multisig/multisig_api.go new file mode 100644 index 0000000000..39a566426c --- /dev/null +++ b/app/submodule/multisig/multisig_api.go @@ -0,0 +1,346 @@ +package multisig + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + multisig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/multisig" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/messagepool" +) + +var _ v1api.IMultiSig = &multiSig{} + +type multiSig struct { + *MultiSigSubmodule +} + +type MsigProposeResponse int + +const ( + MsigApprove MsigProposeResponse = iota + MsigCancel +) + +func newMultiSig(m *MultiSigSubmodule) v1api.IMultiSig { + return &multiSig{ + MultiSigSubmodule: m, + } +} + +func (a *multiSig) messageBuilder(ctx context.Context, from address.Address) (multisig.MessageBuilder, error) { + nver, err := a.state.StateNetworkVersion(ctx, types.EmptyTSK) + if err != nil { + return nil, err + } + aver, err := actors.VersionForNetwork(nver) + if err != nil { + return nil, err + } + return multisig.Message(aver, from), nil +} + +// MsigCreate creates a multisig wallet +// It takes the following params: , , +//, , +func (a *multiSig) MsigCreate(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val types.BigInt, src address.Address, gp types.BigInt) (*messagepool.MessagePrototype, error) { + + mb, err := a.messageBuilder(ctx, src) + if err != nil { + return nil, err + } + + msg, err := mb.Create(addrs, req, 0, duration, val) + if err != nil { + return nil, err + } + + return &messagepool.MessagePrototype{ + Message: *msg, + ValidNonce: false, + }, nil +} + +func (a *multiSig) MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*messagepool.MessagePrototype, error) { + + mb, err := a.messageBuilder(ctx, src) + if err != nil { + return nil, err + } + + msg, err := mb.Propose(msig, to, amt, abi.MethodNum(method), params) + if err != nil { + return nil, xerrors.Errorf("failed to create proposal: %w", err) + } + + return &messagepool.MessagePrototype{ + Message: *msg, + ValidNonce: false, + }, nil +} + +func (a *multiSig) MsigAddPropose(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (*messagepool.MessagePrototype, error) { + enc, actErr := serializeAddParams(newAdd, inc) + if actErr != nil { + return nil, actErr + } + + return a.MsigPropose(ctx, msig, msig, big.Zero(), src, uint64(multisig.Methods.AddSigner), enc) +} + +func (a *multiSig) MsigAddApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (*messagepool.MessagePrototype, error) { + enc, actErr := serializeAddParams(newAdd, inc) + if actErr != nil { + return nil, actErr + } + + return a.MsigApproveTxnHash(ctx, msig, txID, proposer, msig, big.Zero(), src, uint64(multisig.Methods.AddSigner), enc) +} + +// MsigAddApprove approves a previously proposed AddSigner message +// It takes the following params: , , , +// , , +func (a *multiSig) MsigAddCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (*messagepool.MessagePrototype, error) { + enc, actErr := serializeAddParams(newAdd, inc) + if actErr != nil { + return nil, actErr + } + + return a.MsigCancel(ctx, msig, txID, msig, big.Zero(), src, uint64(multisig.Methods.AddSigner), enc) +} + +// MsigSwapPropose proposes swapping 2 signers in the multisig +// It takes the following params: , , +// , +func (a *multiSig) MsigSwapPropose(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (*messagepool.MessagePrototype, error) { + enc, actErr := serializeSwapParams(oldAdd, newAdd) + if actErr != nil { + return nil, actErr + } + + return a.MsigPropose(ctx, msig, msig, big.Zero(), src, uint64(multisig.Methods.SwapSigner), enc) +} + +// MsigSwapApprove approves a previously proposed SwapSigner +// It takes the following params: , , , +// , , +func (a *multiSig) MsigSwapApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (*messagepool.MessagePrototype, error) { + enc, actErr := serializeSwapParams(oldAdd, newAdd) + if actErr != nil { + return nil, actErr + } + + return a.MsigApproveTxnHash(ctx, msig, txID, proposer, msig, big.Zero(), src, uint64(multisig.Methods.SwapSigner), enc) +} + +func (a *multiSig) MsigSwapCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (*messagepool.MessagePrototype, error) { + enc, actErr := serializeSwapParams(oldAdd, newAdd) + if actErr != nil { + return nil, actErr + } + + return a.MsigCancel(ctx, msig, txID, msig, big.Zero(), src, uint64(multisig.Methods.SwapSigner), enc) +} + +// MsigSwapCancel cancels a previously proposed SwapSigner message +// It takes the following params: , , , +// , +func (a *multiSig) MsigApprove(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*messagepool.MessagePrototype, error) { + return a.msigApproveOrCancelSimple(ctx, MsigApprove, msig, txID, src) +} + +// MsigApproveTxnHash approves a previously-proposed multisig message, specified +// using both transaction ID and a hash of the parameters used in the +// proposal. This method of approval can be used to ensure you only approve +// exactly the transaction you think you are. +// It takes the following params: , , , , , +// , , +func (a *multiSig) MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*messagepool.MessagePrototype, error) { + return a.msigApproveOrCancelTxnHash(ctx, MsigApprove, msig, txID, proposer, to, amt, src, method, params) +} + +// MsigCancel cancels a previously-proposed multisig message +// It takes the following params: , , , , +// , , +func (a *multiSig) MsigCancel(ctx context.Context, msig address.Address, txID uint64, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*messagepool.MessagePrototype, error) { + return a.msigApproveOrCancelTxnHash(ctx, MsigCancel, msig, txID, src, to, amt, src, method, params) +} + +// MsigRemoveSigner proposes the removal of a signer from the multisig. +// It accepts the multisig to make the change on, the proposer address to +// send the message from, the address to be removed, and a boolean +// indicating whether or not the signing threshold should be lowered by one +// along with the address removal. +func (a *multiSig) MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (*messagepool.MessagePrototype, error) { + enc, actErr := serializeRemoveParams(toRemove, decrease) + if actErr != nil { + return nil, actErr + } + + return a.MsigPropose(ctx, msig, msig, types.NewInt(0), proposer, uint64(multisig.Methods.RemoveSigner), enc) +} + +// MsigGetVested returns the amount of FIL that vested in a multisig in a certain period. +// It takes the following params: , , +func (a *multiSig) MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) { + startTS, err := a.state.ChainGetTipSet(ctx, start) + if err != nil { + return types.EmptyInt, xerrors.Errorf("loading start tipset %s: %w", start, err) + } + + endTS, err := a.state.ChainGetTipSet(ctx, end) + if err != nil { + return types.EmptyInt, xerrors.Errorf("loading end tipset %s: %w", end, err) + } + + if startTS.Height() > endTS.Height() { + return types.EmptyInt, xerrors.Errorf("start tipset %d is after end tipset %d", startTS.Height(), endTS.Height()) + } else if startTS.Height() == endTS.Height() { + return big.Zero(), nil + } + + //LoadActor(ctx, addr, endTs) + act, err := a.state.GetParentStateRootActor(ctx, endTS, addr) + if err != nil { + return types.EmptyInt, xerrors.Errorf("failed to load multisig actor at end epoch: %w", err) + } + + msas, err := multisig.Load(a.store.Store(ctx), act) + if err != nil { + return types.EmptyInt, xerrors.Errorf("failed to load multisig actor state: %w", err) + } + + startLk, err := msas.LockedBalance(startTS.Height()) + if err != nil { + return types.EmptyInt, xerrors.Errorf("failed to compute locked balance at start height: %w", err) + } + + endLk, err := msas.LockedBalance(endTS.Height()) + if err != nil { + return types.EmptyInt, xerrors.Errorf("failed to compute locked balance at end height: %w", err) + } + + return types.BigSub(startLk, endLk), nil +} + +func (a *multiSig) msigApproveOrCancelSimple(ctx context.Context, operation MsigProposeResponse, msig address.Address, txID uint64, src address.Address) (*messagepool.MessagePrototype, error) { + if msig == address.Undef { + return nil, xerrors.Errorf("must provide multisig address") + } + + if src == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + mb, err := a.messageBuilder(ctx, src) + if err != nil { + return nil, err + } + + var msg *types.Message + switch operation { + case MsigApprove: + msg, err = mb.Approve(msig, txID, nil) + case MsigCancel: + msg, err = mb.Cancel(msig, txID, nil) + default: + return nil, xerrors.Errorf("Invalid operation for msigApproveOrCancel") + } + if err != nil { + return nil, err + } + + return &messagepool.MessagePrototype{Message: *msg, ValidNonce: false}, nil +} + +func (a *multiSig) msigApproveOrCancelTxnHash(ctx context.Context, operation MsigProposeResponse, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (*messagepool.MessagePrototype, error) { + if msig == address.Undef { + return nil, xerrors.Errorf("must provide multisig address") + } + + if src == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + if proposer.Protocol() != address.ID { + proposerID, err := a.state.StateLookupID(ctx, proposer, types.EmptyTSK) + if err != nil { + return nil, err + } + proposer = proposerID + } + + p := multisig.ProposalHashData{ + Requester: proposer, + To: to, + Value: amt, + Method: abi.MethodNum(method), + Params: params, + } + + mb, err := a.messageBuilder(ctx, src) + if err != nil { + return nil, err + } + + var msg *types.Message + switch operation { + case MsigApprove: + msg, err = mb.Approve(msig, txID, &p) + case MsigCancel: + msg, err = mb.Cancel(msig, txID, &p) + default: + return nil, xerrors.Errorf("Invalid operation for msigApproveOrCancel") + } + if err != nil { + return nil, err + } + + return &messagepool.MessagePrototype{ + Message: *msg, + ValidNonce: false, + }, nil +} + +func serializeAddParams(new address.Address, inc bool) ([]byte, error) { + enc, actErr := actors.SerializeParams(&multisig2.AddSignerParams{ + Signer: new, + Increase: inc, + }) + if actErr != nil { + return nil, actErr + } + + return enc, nil +} + +func serializeSwapParams(old address.Address, new address.Address) ([]byte, error) { + enc, actErr := actors.SerializeParams(&multisig2.SwapSignerParams{ + From: old, + To: new, + }) + if actErr != nil { + return nil, actErr + } + + return enc, nil +} + +func serializeRemoveParams(rem address.Address, dec bool) ([]byte, error) { + enc, actErr := actors.SerializeParams(&multisig2.RemoveSignerParams{ + Signer: rem, + Decrease: dec, + }) + if actErr != nil { + return nil, actErr + } + + return enc, nil +} diff --git a/app/submodule/multisig/multisig_submodule.go b/app/submodule/multisig/multisig_submodule.go new file mode 100644 index 0000000000..3487a0b982 --- /dev/null +++ b/app/submodule/multisig/multisig_submodule.go @@ -0,0 +1,31 @@ +package multisig + +import ( + apiwrapper "github.com/filecoin-project/venus/app/submodule/multisig/v0api" + chain2 "github.com/filecoin-project/venus/pkg/chain" + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" +) + +type MultiSigSubmodule struct { //nolint + state v1api.IChain + mpool v1api.IMessagePool + store *chain2.Store +} + +// MessagingSubmodule enhances the `Node` with multisig capabilities. +func NewMultiSigSubmodule(chainState v1api.IChain, msgPool v1api.IMessagePool, store *chain2.Store) *MultiSigSubmodule { + return &MultiSigSubmodule{state: chainState, mpool: msgPool, store: store} +} + +//API create a new multisig implement +func (sb *MultiSigSubmodule) API() v1api.IMultiSig { + return newMultiSig(sb) +} + +func (sb *MultiSigSubmodule) V0API() v0api.IMultiSig { + return &apiwrapper.WrapperV1IMultiSig{ + IMultiSig: newMultiSig(sb), + IMessagePool: sb.mpool, + } +} diff --git a/app/submodule/multisig/v0api/multisig_v0api.go b/app/submodule/multisig/v0api/multisig_v0api.go new file mode 100644 index 0000000000..ba44f01507 --- /dev/null +++ b/app/submodule/multisig/v0api/multisig_v0api.go @@ -0,0 +1,147 @@ +package v0api + +import ( + "context" + + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/venus-shared/messagepool" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" +) + +type WrapperV1IMultiSig struct { + v1api.IMultiSig + v1api.IMessagePool +} + +var _ v0api.IMultiSig = (*WrapperV1IMultiSig)(nil) + +func (a *WrapperV1IMultiSig) executePrototype(ctx context.Context, p *messagepool.MessagePrototype) (cid.Cid, error) { + sm, err := a.IMessagePool.MpoolPushMessage(ctx, &p.Message, nil) + if err != nil { + return cid.Undef, xerrors.Errorf("pushing message: %w", err) + } + + return sm.Cid(), nil +} +func (a *WrapperV1IMultiSig) MsigCreate(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val types.BigInt, src address.Address, gp types.BigInt) (cid.Cid, error) { + + p, err := a.IMultiSig.MsigCreate(ctx, req, addrs, duration, val, src, gp) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} + +func (a *WrapperV1IMultiSig) MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) { + + p, err := a.IMultiSig.MsigPropose(ctx, msig, to, amt, src, method, params) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} +func (a *WrapperV1IMultiSig) MsigApprove(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) { + + p, err := a.IMultiSig.MsigApprove(ctx, msig, txID, src) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} + +func (a *WrapperV1IMultiSig) MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) { + p, err := a.IMultiSig.MsigApproveTxnHash(ctx, msig, txID, proposer, to, amt, src, method, params) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} + +func (a *WrapperV1IMultiSig) MsigCancel(ctx context.Context, msig address.Address, txID uint64, to address.Address, amt types.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) { + p, err := a.IMultiSig.MsigCancel(ctx, msig, txID, to, amt, src, method, params) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} + +func (a *WrapperV1IMultiSig) MsigAddPropose(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (cid.Cid, error) { + + p, err := a.IMultiSig.MsigAddPropose(ctx, msig, src, newAdd, inc) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} + +func (a *WrapperV1IMultiSig) MsigAddApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (cid.Cid, error) { + + p, err := a.IMultiSig.MsigAddApprove(ctx, msig, src, txID, proposer, newAdd, inc) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} + +func (a *WrapperV1IMultiSig) MsigAddCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (cid.Cid, error) { + + p, err := a.IMultiSig.MsigAddCancel(ctx, msig, src, txID, newAdd, inc) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} + +func (a *WrapperV1IMultiSig) MsigSwapPropose(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) { + + p, err := a.IMultiSig.MsigSwapPropose(ctx, msig, src, oldAdd, newAdd) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} + +func (a *WrapperV1IMultiSig) MsigSwapApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) { + + p, err := a.IMultiSig.MsigSwapApprove(ctx, msig, src, txID, proposer, oldAdd, newAdd) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} + +func (a *WrapperV1IMultiSig) MsigSwapCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) { + + p, err := a.IMultiSig.MsigSwapCancel(ctx, msig, src, txID, oldAdd, newAdd) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} + +func (a *WrapperV1IMultiSig) MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (cid.Cid, error) { + + p, err := a.IMultiSig.MsigRemoveSigner(ctx, msig, proposer, toRemove, decrease) + if err != nil { + return cid.Undef, xerrors.Errorf("creating prototype: %w", err) + } + + return a.executePrototype(ctx, p) +} diff --git a/internal/app/go-filecoin/internal/submodule/libp2p.go b/app/submodule/network/libp2p.go similarity index 80% rename from internal/app/go-filecoin/internal/submodule/libp2p.go rename to app/submodule/network/libp2p.go index f83bf7cb37..9f5d77aff2 100644 --- a/internal/app/go-filecoin/internal/submodule/libp2p.go +++ b/app/submodule/network/libp2p.go @@ -1,27 +1,38 @@ -package submodule +package network import ( "context" + "crypto/rand" + "github.com/go-errors/errors" "github.com/jbenet/goprocess" + "github.com/libp2p/go-eventbus" "github.com/libp2p/go-libp2p-core/connmgr" + "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/event" net "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" "github.com/libp2p/go-libp2p-core/peerstore" "github.com/libp2p/go-libp2p-core/protocol" - pstoremem "github.com/libp2p/go-libp2p-peerstore/pstoremem" - multiaddr "github.com/multiformats/go-multiaddr" - errors "github.com/pkg/errors" + "github.com/libp2p/go-libp2p-peerstore/pstoremem" + "github.com/multiformats/go-multiaddr" ) -type noopLibP2PHost struct{} +type noopLibP2PHost struct { + peerId peer.ID //nolint +} -func (noopLibP2PHost) ID() peer.ID { - return "" +//nolint +func NewNoopLibP2PHost() noopLibP2PHost { + pk, _, _ := crypto.GenerateEd25519Key(rand.Reader) //nolint + pid, _ := peer.IDFromPrivateKey(pk) + return noopLibP2PHost{pid} +} +func (h noopLibP2PHost) ID() peer.ID { + return h.peerId } -func (noopLibP2PHost) Peerstore() peerstore.Peerstore { +func (noopLibP2PHost) Peerstore() (peerstore.Peerstore, error) { return pstoremem.NewPeerstore() } @@ -30,7 +41,7 @@ func (noopLibP2PHost) Addrs() []multiaddr.Multiaddr { } func (noopLibP2PHost) EventBus() event.Bus { - panic("NYI") + return eventbus.NewBus() } func (noopLibP2PHost) Network() net.Network { @@ -119,10 +130,6 @@ func (noopLibP2PNetwork) SetStreamHandler(net.StreamHandler) { panic("implement me") } -func (noopLibP2PNetwork) SetConnHandler(net.ConnHandler) { - panic("implement me") -} - func (noopLibP2PNetwork) NewStream(context.Context, peer.ID) (net.Stream, error) { panic("implement me") } @@ -142,3 +149,7 @@ func (noopLibP2PNetwork) InterfaceListenAddresses() ([]multiaddr.Multiaddr, erro func (noopLibP2PNetwork) Process() goprocess.Process { panic("implement me") } + +func (noopLibP2PNetwork) API() interface{} { + return nil +} diff --git a/app/submodule/network/network_api.go b/app/submodule/network/network_api.go new file mode 100644 index 0000000000..212626b8f3 --- /dev/null +++ b/app/submodule/network/network_api.go @@ -0,0 +1,77 @@ +package network + +import ( + "context" + + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/venus-shared/api" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + "github.com/filecoin-project/venus/venus-shared/libp2p/net" +) + +var _ v1api.INetwork = &networkAPI{} + +type networkAPI struct { //nolint + network *NetworkSubmodule +} + +// NetworkGetBandwidthStats gets stats on the current bandwidth usage of the network +func (na *networkAPI) NetworkGetBandwidthStats(ctx context.Context) metrics.Stats { + return na.network.Network.GetBandwidthStats() +} + +// NetworkGetPeerAddresses gets the current addresses of the node +func (na *networkAPI) NetworkGetPeerAddresses(ctx context.Context) []ma.Multiaddr { + return na.network.Network.GetPeerAddresses() +} + +// NetworkGetPeerID gets the current peer id of the node +func (na *networkAPI) NetworkGetPeerID(ctx context.Context) peer.ID { + return na.network.Network.GetPeerID() +} + +// NetworkFindProvidersAsync issues a findProviders query to the filecoin network content router. +func (na *networkAPI) NetworkFindProvidersAsync(ctx context.Context, key cid.Cid, count int) <-chan peer.AddrInfo { + return na.network.Network.Router.FindProvidersAsync(ctx, key, count) +} + +// NetworkGetClosestPeers issues a getClosestPeers query to the filecoin network. +func (na *networkAPI) NetworkGetClosestPeers(ctx context.Context, key string) ([]peer.ID, error) { + return na.network.Network.GetClosestPeers(ctx, key) +} + +// NetworkFindPeer searches the libp2p router for a given peer id +func (na *networkAPI) NetworkFindPeer(ctx context.Context, peerID peer.ID) (peer.AddrInfo, error) { + return na.network.Network.FindPeer(ctx, peerID) +} + +// NetworkConnect connects to peers at the given addresses +func (na *networkAPI) NetworkConnect(ctx context.Context, addrs []string) (<-chan net.ConnectionResult, error) { + return na.network.Network.Connect(ctx, addrs) +} + +// NetworkPeers lists peers currently available on the network +func (na *networkAPI) NetworkPeers(ctx context.Context, verbose, latency, streams bool) (*net.SwarmConnInfos, error) { + return na.network.Network.Peers(ctx, verbose, latency, streams) +} + +func (na *networkAPI) Version(context.Context) (apitypes.Version, error) { + return apitypes.Version{ + Version: constants.UserVersion(), + APIVersion: api.Version(constants.FullAPIVersion1), + }, nil +} + +//NetAddrsListen return local p2p address info +func (na *networkAPI) NetAddrsListen(context.Context) (peer.AddrInfo, error) { + return peer.AddrInfo{ + ID: na.network.Host.ID(), + Addrs: na.network.Host.Addrs(), + }, nil +} diff --git a/app/submodule/network/network_submodule.go b/app/submodule/network/network_submodule.go new file mode 100644 index 0000000000..0a1eb056a0 --- /dev/null +++ b/app/submodule/network/network_submodule.go @@ -0,0 +1,420 @@ +package network + +import ( + "bytes" + "context" + "fmt" + "os" + "path/filepath" + "runtime" + "time" + + "github.com/ipfs/go-bitswap" + bsnet "github.com/ipfs/go-bitswap/network" + blocks "github.com/ipfs/go-block-format" + bserv "github.com/ipfs/go-blockservice" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + "github.com/ipfs/go-datastore/namespace" + "github.com/ipfs/go-graphsync" + graphsyncimpl "github.com/ipfs/go-graphsync/impl" + gsnet "github.com/ipfs/go-graphsync/network" + "github.com/ipfs/go-graphsync/storeutil" + exchange "github.com/ipfs/go-ipfs-exchange-interface" + cbor "github.com/ipfs/go-ipld-cbor" + logging "github.com/ipfs/go-log" + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p-core/host" + p2pmetrics "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/routing" + dht "github.com/libp2p/go-libp2p-kad-dht" + libp2pps "github.com/libp2p/go-libp2p-pubsub" + yamux "github.com/libp2p/go-libp2p-yamux" + ma "github.com/multiformats/go-multiaddr" + "github.com/pkg/errors" + + datatransfer "github.com/filecoin-project/go-data-transfer" + dtimpl "github.com/filecoin-project/go-data-transfer/impl" + dtnet "github.com/filecoin-project/go-data-transfer/network" + dtgstransport "github.com/filecoin-project/go-data-transfer/transport/graphsync" + + apiwrapper "github.com/filecoin-project/venus/app/submodule/network/v0api" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/discovery" + "github.com/filecoin-project/venus/pkg/net" + "github.com/filecoin-project/venus/pkg/repo" + appstate "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" + + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" +) + +var networkLogger = logging.Logger("network_module") + +// NetworkSubmodule enhances the `Node` with networking capabilities. +type NetworkSubmodule struct { //nolint + NetworkName string + + Host host.Host + + // Router is a router from IPFS + Router routing.Routing + + Pubsub *libp2pps.PubSub + + // TODO: split chain bitswap from storage bitswap (issue: ???) + Bitswap exchange.Interface + + Network *net.Network + + GraphExchange graphsync.GraphExchange + + Blockstore blockstoreutil.Blockstore + PeerMgr net.IPeerMgr + //data transfer + DataTransfer datatransfer.Manager + DataTransferHost dtnet.DataTransferNetwork + + // to fix datastore close before flush + cancel context.CancelFunc +} + +//API create a new network implement +func (networkSubmodule *NetworkSubmodule) API() v1api.INetwork { + return &networkAPI{network: networkSubmodule} +} + +func (networkSubmodule *NetworkSubmodule) V0API() v0api.INetwork { + return &apiwrapper.WrapperV1INetwork{INetwork: &networkAPI{network: networkSubmodule}} +} + +func (networkSubmodule *NetworkSubmodule) Stop(ctx context.Context) { + networkLogger.Infof("closing bitswap") + if err := networkSubmodule.Bitswap.Close(); err != nil { + networkLogger.Errorf("error closing bitswap: %s", err.Error()) + } + networkLogger.Infof("closing host") + if err := networkSubmodule.Host.Close(); err != nil { + networkLogger.Errorf("error closing host: %s", err.Error()) + } + if err := networkSubmodule.Router.(*dht.IpfsDHT).Close(); err != nil { + networkLogger.Errorf("error closing dht: %s", err.Error()) + } + //networkSubmodule.cancel() +} + +type networkConfig interface { + GenesisCid() cid.Cid + OfflineMode() bool + IsRelay() bool + Libp2pOpts() []libp2p.Option + Repo() repo.Repo +} + +// NewNetworkSubmodule creates a new network submodule. +func NewNetworkSubmodule(ctx context.Context, config networkConfig) (*NetworkSubmodule, error) { + bandwidthTracker := p2pmetrics.NewBandwidthCounter() + libP2pOpts := append(config.Libp2pOpts(), libp2p.BandwidthReporter(bandwidthTracker), makeSmuxTransportOption()) + + var networkName string + var err error + if !config.Repo().Config().NetworkParams.DevNet { + networkName = "testnetnet" + } else { + config.Repo().ChainDatastore() + networkName, err = retrieveNetworkName(ctx, config.GenesisCid(), cbor.NewCborStore(config.Repo().Datastore())) + if err != nil { + return nil, err + } + } + + // peer manager + bootNodes, err := net.ParseAddresses(ctx, config.Repo().Config().Bootstrap.Addresses) + if err != nil { + return nil, err + } + + // set up host + var peerHost host.Host + var router routing.Routing + var pubsubMessageSigning bool + var peerMgr net.IPeerMgr + networkSubmodule := &NetworkSubmodule{} + ctx, networkSubmodule.cancel = context.WithCancel(ctx) + makeDHT := func(h host.Host) (routing.Routing, error) { + mode := dht.ModeAuto + opts := []dht.Option{dht.Mode(mode), + dht.Datastore(config.Repo().ChainDatastore()), + dht.ProtocolPrefix(net.FilecoinDHT(networkName)), + dht.QueryFilter(dht.PublicQueryFilter), + dht.RoutingTableFilter(dht.PublicRoutingTableFilter), + dht.DisableProviders(), + dht.BootstrapPeers(bootNodes...), + dht.DisableValues()} + r, err := dht.New( + ctx, h, opts..., + ) + + if err != nil { + return nil, errors.Wrap(err, "failed to setup routing") + } + router = r + return r, err + } + + peerHost, err = buildHost(ctx, config, libP2pOpts, config.Repo().Config(), makeDHT) + if err != nil { + return nil, err + } + // require message signing in online mode when we have priv key + pubsubMessageSigning = true + + period, err := time.ParseDuration(config.Repo().Config().Bootstrap.Period) + if err != nil { + return nil, err + } + + peerMgr, err = net.NewPeerMgr(peerHost, router.(*dht.IpfsDHT), period, bootNodes) + if err != nil { + return nil, err + } + + // do NOT start `peerMgr` in `offline` mode + if !config.OfflineMode() { + go peerMgr.Run(ctx) + } + + // Set up libp2p network + // The gossipsub heartbeat timeout needs to be set sufficiently low + // to enable publishing on first connection. The default of one + // second is not acceptable for tests. + libp2pps.GossipSubHeartbeatInterval = 100 * time.Millisecond + options := []libp2pps.Option{ + // Gossipsubv1.1 configuration + libp2pps.WithFloodPublish(true), + + // buffer, 32 -> 10K + libp2pps.WithValidateQueueSize(10 << 10), + // worker, 1x cpu -> 2x cpu + libp2pps.WithValidateWorkers(runtime.NumCPU() * 2), + // goroutine, 8K -> 16K + libp2pps.WithValidateThrottle(16 << 10), + + libp2pps.WithMessageSigning(pubsubMessageSigning), + libp2pps.WithDiscovery(&discovery.NoopDiscovery{}), + } + gsub, err := libp2pps.NewGossipSub(ctx, peerHost, options...) + if err != nil { + return nil, errors.Wrap(err, "failed to set up network") + } + + // set up bitswap + nwork := bsnet.NewFromIpfsHost(peerHost, router, bsnet.Prefix("/chain")) + bitswapOptions := []bitswap.Option{bitswap.ProvideEnabled(false)} + bswap := bitswap.New(ctx, nwork, config.Repo().Datastore(), bitswapOptions...) + + // set up graphsync + graphsyncNetwork := gsnet.NewFromLibp2pHost(peerHost) + lsys := storeutil.LinkSystemForBlockstore(config.Repo().Datastore()) + gsync := graphsyncimpl.New(ctx, graphsyncNetwork, lsys, graphsyncimpl.RejectAllRequestsByDefault()) + + //dataTransger + //sc := storedcounter.New(repo.ChainDatastore(), datastore.NewKey("/datatransfer/api/counter")) + // go-data-transfer protocol retries: + // 1s, 5s, 25s, 2m5s, 5m x 11 ~= 1 hour + dtRetryParams := dtnet.RetryParameters(time.Second, 5*time.Minute, 15, 5) + dtn := dtnet.NewFromLibp2pHost(peerHost, dtRetryParams) + + dtNet := dtnet.NewFromLibp2pHost(peerHost) + dtDs := namespace.Wrap(config.Repo().ChainDatastore(), datastore.NewKey("/datatransfer/api/transfers")) + transport := dtgstransport.NewTransport(peerHost.ID(), gsync, dtn) + + repoPath, err := config.Repo().Path() + if err != nil { + return nil, err + } + + dirPath := filepath.Join(repoPath, "data-transfer") + _ = os.MkdirAll(dirPath, 0777) //todo fix for test + dt, err := dtimpl.NewDataTransfer(dtDs, dirPath, dtNet, transport) + if err != nil { + return nil, err + } + // build network + network := net.New(peerHost, net.NewRouter(router), bandwidthTracker) + + // build the network submdule + return &NetworkSubmodule{ + NetworkName: networkName, + Host: peerHost, + Router: router, + Pubsub: gsub, + Bitswap: bswap, + GraphExchange: gsync, + Network: network, + DataTransfer: dt, + DataTransferHost: dtNet, + PeerMgr: peerMgr, + Blockstore: config.Repo().Datastore(), + cancel: networkSubmodule.cancel, + }, nil +} + +func (networkSubmodule *NetworkSubmodule) FetchMessagesByCids( + ctx context.Context, + service bserv.BlockService, + cids []cid.Cid, +) ([]*types.Message, error) { + out := make([]*types.Message, len(cids)) + err := networkSubmodule.fetchCids(ctx, service, cids, func(idx int, blk blocks.Block) error { + var msg types.Message + if err := msg.UnmarshalCBOR(bytes.NewReader(blk.RawData())); err != nil { + return err + } + out[idx] = &msg + return nil + }) + return out, err +} + +func (networkSubmodule *NetworkSubmodule) FetchSignedMessagesByCids( + ctx context.Context, + service bserv.BlockService, + cids []cid.Cid, +) ([]*types.SignedMessage, error) { + out := make([]*types.SignedMessage, len(cids)) + err := networkSubmodule.fetchCids(ctx, service, cids, func(idx int, blk blocks.Block) error { + var msg types.SignedMessage + if err := msg.UnmarshalCBOR(bytes.NewReader(blk.RawData())); err != nil { + return err + } + out[idx] = &msg + return nil + }) + return out, err +} + +func (networkSubmodule *NetworkSubmodule) fetchCids( + ctx context.Context, + srv bserv.BlockService, + cids []cid.Cid, + onfetchOneBlock func(int, blocks.Block) error) error { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + cidIndex := make(map[cid.Cid]int) + for i, c := range cids { + cidIndex[c] = i + } + + if len(cids) != len(cidIndex) { + return fmt.Errorf("duplicate CIDs in fetchCids input") + } + + msgBlocks := make([]blocks.Block, len(cids)) + for block := range srv.GetBlocks(ctx, cids) { + ix, ok := cidIndex[block.Cid()] + if !ok { + // Ignore duplicate/unexpected blocks. This shouldn't + // happen, but we can be safe. + networkLogger.Errorw("received duplicate/unexpected block when syncing", "cid", block.Cid()) + continue + } + + // Record that we've received the block. + delete(cidIndex, block.Cid()) + msgBlocks[ix] = block + if onfetchOneBlock != nil { + if err := onfetchOneBlock(ix, block); err != nil { + return err + } + } + } + + // 'cidIndex' should be 0 here, that means we had fetched all blocks in 'cids'. + if len(cidIndex) > 0 { + err := ctx.Err() + if err == nil { + err = fmt.Errorf("failed to fetch %d messages for unknown reasons", len(cidIndex)) + } + return err + } + + return nil +} + +func retrieveNetworkName(ctx context.Context, genCid cid.Cid, cborStore cbor.IpldStore) (string, error) { + var genesis types.BlockHeader + err := cborStore.Get(ctx, genCid, &genesis) + if err != nil { + return "", errors.Wrapf(err, "failed to get block %s", genCid.String()) + } + + return appstate.NewView(cborStore, genesis.ParentStateRoot).InitNetworkName(ctx) +} + +// address determines if we are publically dialable. If so use public +// address, if not configure node to announce relay address. +func buildHost(ctx context.Context, config networkConfig, libP2pOpts []libp2p.Option, cfg *config.Config, makeDHT func(host host.Host) (routing.Routing, error)) (host.Host, error) { + // Node must build a host acting as a libp2p relay. Additionally it + // runs the autoNAT service which allows other nodes to check for their + // own dialability by having this node attempt to dial them. + makeDHTRightType := func(h host.Host) (routing.PeerRouting, error) { + return makeDHT(h) + } + + if config.IsRelay() { + publicAddr, err := ma.NewMultiaddr(cfg.Swarm.PublicRelayAddress) + if err != nil { + return nil, err + } + publicAddrFactory := func(lc *libp2p.Config) error { + lc.AddrsFactory = func(addrs []ma.Multiaddr) []ma.Multiaddr { + if cfg.Swarm.PublicRelayAddress == "" { + return addrs + } + return append(addrs, publicAddr) + } + return nil + } + + relayHost, err := libp2p.New( + libp2p.EnableRelay(), // TODO ? + libp2p.EnableAutoRelay(), + libp2p.Routing(makeDHTRightType), + publicAddrFactory, + libp2p.ChainOptions(libP2pOpts...), + libp2p.Ping(true), + libp2p.EnableNATService(), + ) + if err != nil { + return nil, err + } + return relayHost, nil + } + + opts := []libp2p.Option{ + libp2p.UserAgent("venus"), + libp2p.Routing(makeDHTRightType), + libp2p.ChainOptions(libP2pOpts...), + libp2p.Ping(true), + libp2p.DisableRelay(), + } + + return libp2p.New(opts...) +} + +func makeSmuxTransportOption() libp2p.Option { + const yamuxID = "/yamux/1.0.0" + + ymxtpt := *yamux.DefaultTransport + ymxtpt.AcceptBacklog = 512 + + if os.Getenv("YAMUX_DEBUG") != "" { + ymxtpt.LogOutput = os.Stderr + } + + return libp2p.Muxer(yamuxID, &ymxtpt) +} diff --git a/app/submodule/network/v0api/v1_wrapper.go b/app/submodule/network/v0api/v1_wrapper.go new file mode 100644 index 0000000000..9eae5d9ff2 --- /dev/null +++ b/app/submodule/network/v0api/v1_wrapper.go @@ -0,0 +1,27 @@ +package v0api + +import ( + "context" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/venus-shared/api" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" +) + +type WrapperV1INetwork struct { + v1api.INetwork +} + +func (w *WrapperV1INetwork) Version(ctx context.Context) (apitypes.Version, error) { + ver, err := w.INetwork.Version(ctx) + if err != nil { + return apitypes.Version{}, err + } + + ver.APIVersion = api.Version(constants.FullAPIVersion0) + + return ver, nil +} + +var _ v1api.INetwork = &WrapperV1INetwork{} diff --git a/app/submodule/paych/paych_api.go b/app/submodule/paych/paych_api.go new file mode 100644 index 0000000000..3135d61ab3 --- /dev/null +++ b/app/submodule/paych/paych_api.go @@ -0,0 +1,160 @@ +package paych + +import ( + "context" + + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/specs-actors/actors/builtin/paych" + + "github.com/filecoin-project/venus/pkg/paychmgr" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + paychtypes "github.com/filecoin-project/venus/venus-shared/paych" +) + +type PaychAPI struct { + paychMgr *paychmgr.Manager +} + +func NewPaychAPI(p *paychmgr.Manager) *PaychAPI { + return &PaychAPI{p} +} + +func (a *PaychAPI) PaychGet(ctx context.Context, from, to address.Address, amt big.Int) (*paychtypes.ChannelInfo, error) { + ch, mcid, err := a.paychMgr.GetPaych(ctx, from, to, amt) + if err != nil { + return nil, err + } + + return &paychtypes.ChannelInfo{ + Channel: ch, + WaitSentinel: mcid, + }, nil +} + +func (a *PaychAPI) PaychAvailableFunds(ctx context.Context, ch address.Address) (*apitypes.ChannelAvailableFunds, error) { + return a.paychMgr.AvailableFunds(ctx, ch) +} + +func (a *PaychAPI) PaychAvailableFundsByFromTo(ctx context.Context, from, to address.Address) (*apitypes.ChannelAvailableFunds, error) { + return a.paychMgr.AvailableFundsByFromTo(ctx, from, to) +} + +func (a *PaychAPI) PaychGetWaitReady(ctx context.Context, sentinel cid.Cid) (address.Address, error) { + return a.paychMgr.GetPaychWaitReady(ctx, sentinel) +} + +func (a *PaychAPI) PaychAllocateLane(ctx context.Context, ch address.Address) (uint64, error) { + return a.paychMgr.AllocateLane(ctx, ch) +} + +func (a *PaychAPI) PaychNewPayment(ctx context.Context, from, to address.Address, vouchers []paychtypes.VoucherSpec) (*paychtypes.PaymentInfo, error) { + amount := vouchers[len(vouchers)-1].Amount + + // TODO: Fix free fund tracking in PaychGet + // TODO: validate voucher spec before locking funds + ch, err := a.PaychGet(ctx, from, to, amount) + if err != nil { + return nil, err + } + + lane, err := a.paychMgr.AllocateLane(ctx, ch.Channel) + if err != nil { + return nil, err + } + + svs := make([]*paych.SignedVoucher, len(vouchers)) + + for i, v := range vouchers { + sv, err := a.paychMgr.CreateVoucher(ctx, ch.Channel, paych.SignedVoucher{ + Amount: v.Amount, + Lane: lane, + + Extra: v.Extra, + TimeLockMin: v.TimeLockMin, + TimeLockMax: v.TimeLockMax, + MinSettleHeight: v.MinSettle, + }) + if err != nil { + return nil, err + } + if sv.Voucher == nil { + return nil, xerrors.Errorf("Could not create voucher - shortfall of %d", sv.Shortfall) + } + + svs[i] = sv.Voucher + } + + return &paychtypes.PaymentInfo{ + Channel: ch.Channel, + WaitSentinel: ch.WaitSentinel, + Vouchers: svs, + }, nil +} + +func (a *PaychAPI) PaychList(ctx context.Context) ([]address.Address, error) { + return a.paychMgr.ListChannels(ctx) +} + +func (a *PaychAPI) PaychStatus(ctx context.Context, pch address.Address) (*paychtypes.Status, error) { + ci, err := a.paychMgr.GetChannelInfo(ctx, pch) + if err != nil { + return nil, err + } + return &paychtypes.Status{ + ControlAddr: ci.Control, + Direction: paychtypes.PCHDir(ci.Direction), + }, nil +} + +func (a *PaychAPI) PaychSettle(ctx context.Context, addr address.Address) (cid.Cid, error) { + return a.paychMgr.Settle(ctx, addr) +} + +func (a *PaychAPI) PaychCollect(ctx context.Context, addr address.Address) (cid.Cid, error) { + return a.paychMgr.Collect(ctx, addr) +} + +func (a *PaychAPI) PaychVoucherCheckValid(ctx context.Context, ch address.Address, sv *paych.SignedVoucher) error { + return a.paychMgr.CheckVoucherValid(ctx, ch, sv) +} + +func (a *PaychAPI) PaychVoucherCheckSpendable(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (bool, error) { + return a.paychMgr.CheckVoucherSpendable(ctx, ch, sv, secret, proof) +} + +func (a *PaychAPI) PaychVoucherAdd(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, proof []byte, minDelta big.Int) (big.Int, error) { + return a.paychMgr.AddVoucherInbound(ctx, ch, sv, proof, minDelta) +} + +// PaychVoucherCreate creates a new signed voucher on the given payment channel +// with the given lane and amount. The value passed in is exactly the value +// that will be used to create the voucher, so if previous vouchers exist, the +// actual additional value of this voucher will only be the difference between +// the two. +// If there are insufficient funds in the channel to create the voucher, +// returns a nil voucher and the shortfall. +func (a *PaychAPI) PaychVoucherCreate(ctx context.Context, pch address.Address, amt big.Int, lane uint64) (*paychtypes.VoucherCreateResult, error) { + return a.paychMgr.CreateVoucher(ctx, pch, paych.SignedVoucher{Amount: amt, Lane: lane}) +} + +func (a *PaychAPI) PaychVoucherList(ctx context.Context, pch address.Address) ([]*paych.SignedVoucher, error) { + vi, err := a.paychMgr.ListVouchers(ctx, pch) + if err != nil { + return nil, err + } + + out := make([]*paych.SignedVoucher, len(vi)) + for k, v := range vi { + out[k] = v.Voucher + } + + return out, nil +} + +func (a *PaychAPI) PaychVoucherSubmit(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (cid.Cid, error) { + return a.paychMgr.SubmitVoucher(ctx, ch, sv, secret, proof) +} diff --git a/app/submodule/paych/paych_submodule.go b/app/submodule/paych/paych_submodule.go new file mode 100644 index 0000000000..5e923b09f9 --- /dev/null +++ b/app/submodule/paych/paych_submodule.go @@ -0,0 +1,39 @@ +package paych + +import ( + "context" + + "github.com/ipfs/go-datastore" + + "github.com/filecoin-project/venus/pkg/paychmgr" + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" +) + +//PaychSubmodule support paych related functions, including paych construction, extraction, query and other functions +type PaychSubmodule struct { //nolint + pmgr *paychmgr.Manager +} + +// PaychSubmodule enhances the `Node` with paych capabilities. +func NewPaychSubmodule(ctx context.Context, ds datastore.Batching, params *paychmgr.ManagerParams) (*PaychSubmodule, error) { + mgr, err := paychmgr.NewManager(ctx, ds, params) + return &PaychSubmodule{mgr}, err +} + +func (ps *PaychSubmodule) Start(ctx context.Context) error { + return ps.pmgr.Start(ctx) +} + +func (ps *PaychSubmodule) Stop() { + ps.pmgr.Stop() +} + +//API create a new paych implement +func (ps *PaychSubmodule) API() v1api.IPaychan { + return NewPaychAPI(ps.pmgr) +} + +func (ps *PaychSubmodule) V0API() v0api.IPaychan { + return NewPaychAPI(ps.pmgr) +} diff --git a/app/submodule/storagenetworking/storage_networking_api.go b/app/submodule/storagenetworking/storage_networking_api.go new file mode 100644 index 0000000000..a3dbb57496 --- /dev/null +++ b/app/submodule/storagenetworking/storage_networking_api.go @@ -0,0 +1,10 @@ +package storagenetworking + +type IStorageNetworking interface { +} + +var _ IStorageNetworking = &storageNetworkingAPI{} + +type storageNetworkingAPI struct { //nolint + storageNetworking *StorageNetworkingSubmodule +} diff --git a/app/submodule/storagenetworking/storage_networking_submodule.go b/app/submodule/storagenetworking/storage_networking_submodule.go new file mode 100644 index 0000000000..4e32d6e426 --- /dev/null +++ b/app/submodule/storagenetworking/storage_networking_submodule.go @@ -0,0 +1,30 @@ +package storagenetworking + +import ( + "context" + "github.com/filecoin-project/venus/app/submodule/network" + + exchange "github.com/ipfs/go-ipfs-exchange-interface" +) + +// StorageNetworkingSubmodule enhances the `Node` with data transfer capabilities. +type StorageNetworkingSubmodule struct { //nolint + // Exchange is the interface for fetching data from other nodes. + Exchange exchange.Interface +} + +// NewStorgeNetworkingSubmodule creates a new storage networking submodule. +func NewStorgeNetworkingSubmodule(ctx context.Context, network *network.NetworkSubmodule) (*StorageNetworkingSubmodule, error) { + return &StorageNetworkingSubmodule{ + Exchange: network.Bitswap, + }, nil +} + +//API create a new storage implement +func (storageNetworking *StorageNetworkingSubmodule) API() IStorageNetworking { + return &storageNetworkingAPI{storageNetworking: storageNetworking} +} + +func (storageNetworking *StorageNetworkingSubmodule) V0API() IStorageNetworking { + return &storageNetworkingAPI{storageNetworking: storageNetworking} +} diff --git a/app/submodule/syncer/chain_sync.go b/app/submodule/syncer/chain_sync.go new file mode 100644 index 0000000000..6d540f67f1 --- /dev/null +++ b/app/submodule/syncer/chain_sync.go @@ -0,0 +1,35 @@ +package syncer + +import ( + "time" + + "github.com/filecoin-project/venus/pkg/chainsync" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type chainSync interface { + BlockProposer() chainsync.BlockProposer +} + +// ChainSyncProvider provides access to chain sync operations and their status. +type ChainSyncProvider struct { + sync chainSync +} + +// NewChainSyncProvider returns a new ChainSyncProvider. +func NewChainSyncProvider(chainSyncer chainSync) *ChainSyncProvider { + return &ChainSyncProvider{ + sync: chainSyncer, + } +} + +// HandleNewTipSet extends the Syncer's chain store with the given tipset if they +// represent a valid extension. It limits the length of new chains it will +// attempt to validate and caches invalid blocks it has encountered to +// help prevent DOS. +func (chs *ChainSyncProvider) HandleNewTipSet(ci *types.ChainInfo) error { + return chs.sync.BlockProposer().SendOwnBlock(ci) +} + +const incomeBlockLargeDelayDuration = time.Second * 5 +const slowFetchMessageDuration = time.Second * 3 diff --git a/app/submodule/syncer/syncer_api.go b/app/submodule/syncer/syncer_api.go new file mode 100644 index 0000000000..d21be52400 --- /dev/null +++ b/app/submodule/syncer/syncer_api.go @@ -0,0 +1,237 @@ +package syncer + +import ( + "context" + "time" + + syncTypes "github.com/filecoin-project/venus/pkg/chainsync/types" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + stmgrtypes "github.com/filecoin-project/venus/venus-shared/stmgr" + + "github.com/filecoin-project/go-state-types/big" + logging "github.com/ipfs/go-log/v2" + xerrors "github.com/pkg/errors" +) + +var syncAPILog = logging.Logger("syncAPI") + +var _ v1api.ISyncer = &syncerAPI{} + +type syncerAPI struct { //nolint + syncer *SyncerSubmodule +} + +// SyncerStatus returns the current status of the active or last active chain sync operation. +func (sa *syncerAPI) SyncerTracker(ctx context.Context) *apitypes.TargetTracker { + tracker := sa.syncer.ChainSyncManager.BlockProposer().SyncTracker() + tt := &apitypes.TargetTracker{ + History: make([]*apitypes.Target, 0), + Buckets: make([]*apitypes.Target, 0), + } + convertTarget := func(src *syncTypes.Target) *apitypes.Target { + return &apitypes.Target{ + State: convertSyncStateStage(src.State), + Base: src.Base, + Current: src.Current, + Start: src.Start, + End: src.End, + Err: src.Err, + ChainInfo: src.ChainInfo, + } + } + for _, target := range tracker.History() { + tt.History = append(tt.History, convertTarget(target)) + } + for _, target := range tracker.Buckets() { + tt.Buckets = append(tt.Buckets, convertTarget(target)) + } + + return tt +} + +func convertSyncStateStage(srtState syncTypes.SyncStateStage) apitypes.SyncStateStage { + var state apitypes.SyncStateStage + switch srtState { + case syncTypes.StageIdle: + state = apitypes.StageIdle + case syncTypes.StageSyncErrored: + state = apitypes.StageSyncErrored + case syncTypes.StageSyncComplete: + state = apitypes.StageSyncComplete + case syncTypes.StateInSyncing: + state = apitypes.StageMessages + } + + return state +} + +// SyncerStatus returns the current status of the active or last active chain sync operation. +func (sa *syncerAPI) SetConcurrent(ctx context.Context, concurrent int64) error { + sa.syncer.ChainSyncManager.BlockProposer().SetConcurrent(concurrent) + return nil +} + +// SyncerStatus returns the current status of the active or last active chain sync operation. +func (sa *syncerAPI) Concurrent(ctx context.Context) int64 { + return sa.syncer.ChainSyncManager.BlockProposer().Concurrent() +} + +// ChainTipSetWeight computes weight for the specified tipset. +func (sa *syncerAPI) ChainTipSetWeight(ctx context.Context, tsk types.TipSetKey) (big.Int, error) { + ts, err := sa.syncer.ChainModule.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return big.Int{}, err + } + return sa.syncer.ChainSelector.Weight(ctx, ts) +} + +// ChainSyncHandleNewTipSet submits a chain head to the syncer for processing. +func (sa *syncerAPI) ChainSyncHandleNewTipSet(ctx context.Context, ci *types.ChainInfo) error { + return sa.syncer.SyncProvider.HandleNewTipSet(ci) +} + +// SyncSubmitBlock can be used to submit a newly created block to the. +// network through this node +func (sa *syncerAPI) SyncSubmitBlock(ctx context.Context, blk *types.BlockMsg) error { + //todo many dot. how to get directly + chainModule := sa.syncer.ChainModule + parent, err := chainModule.ChainReader.GetBlock(ctx, blk.Header.Parents[0]) + if err != nil { + return xerrors.Errorf("loading parent block: %v", err) + } + + if err := sa.syncer.SlashFilter.MinedBlock(ctx, blk.Header, parent.Height); err != nil { + log.Errorf(" SLASH FILTER ERROR: %s", err) + return xerrors.Errorf(" SLASH FILTER ERROR: %v", err) + } + + // TODO: should we have some sort of fast path to adding a local block? + bmsgs, err := chainModule.MessageStore.LoadUnsignedMessagesFromCids(ctx, blk.BlsMessages) + if err != nil { + return xerrors.Errorf("failed to load bls messages: %v", err) + } + smsgs, err := chainModule.MessageStore.LoadSignedMessagesFromCids(ctx, blk.SecpkMessages) + if err != nil { + return xerrors.Errorf("failed to load secpk message: %v", err) + } + + fb := &types.FullBlock{ + Header: blk.Header, + BLSMessages: bmsgs, + SECPMessages: smsgs, + } + + if err := sa.syncer.BlockValidator.ValidateMsgMeta(ctx, fb); err != nil { + return xerrors.Errorf("provided messages did not match block: %v", err) + } + + ts, err := types.NewTipSet([]*types.BlockHeader{blk.Header}) + if err != nil { + return xerrors.Errorf("somehow failed to make a tipset out of a single block: %v", err) + } + + if _, err := chainModule.ChainReader.PutObject(ctx, blk.Header); err != nil { + return err + } + localPeer := sa.syncer.NetworkModule.Network.GetPeerID() + ci := types.NewChainInfo(localPeer, localPeer, ts) + if err := sa.syncer.SyncProvider.HandleNewTipSet(ci); err != nil { + return xerrors.Errorf("sync to submitted block failed: %v", err) + } + + b, err := blk.Serialize() + if err != nil { + return xerrors.Errorf("serializing block for pubsub publishing failed: %v", err) + } + go func() { + err = sa.syncer.BlockTopic.Publish(ctx, b) //nolint:staticcheck + if err != nil { + syncAPILog.Warnf("publish failed: %s, %v", blk.Cid(), err) + } + }() + return nil +} + +// MethodGroup: State +// The State methods are used to query, inspect, and interact with chain state. +// Most methods take a TipSetKey as a parameter. The state looked up is the parent state of the tipset. +// A nil TipSetKey can be provided as a param, this will cause the heaviest tipset in the chain to be used. + +// StateCall runs the given message and returns its result without any persisted changes. +// +// StateCall applies the message to the tipset's parent state. The +// message is not applied on-top-of the messages in the passed-in +// tipset. +func (sa *syncerAPI) StateCall(ctx context.Context, msg *types.Message, tsk types.TipSetKey) (*apitypes.InvocResult, error) { + start := time.Now() + ts, err := sa.syncer.ChainModule.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("loading tipset %s: %v", tsk, err) + } + ret, err := sa.syncer.Stmgr.Call(ctx, msg, ts) + if err != nil { + return nil, err + } + duration := time.Since(start) + + mcid := msg.Cid() + return &apitypes.InvocResult{ + MsgCid: mcid, + Msg: msg, + MsgRct: &ret.Receipt, + ExecutionTrace: stmgrtypes.ExecutionTrace{}, + Duration: duration, + }, nil +} + +//SyncState just compatible code lotus +func (sa *syncerAPI) SyncState(ctx context.Context) (*apitypes.SyncState, error) { + tracker := sa.syncer.ChainSyncManager.BlockProposer().SyncTracker() + tracker.History() + + syncState := &apitypes.SyncState{ + VMApplied: 0, + } + + count := 0 + toActiveSync := func(t *syncTypes.Target) apitypes.ActiveSync { + currentHeight := t.Base.Height() + if t.Current != nil { + currentHeight = t.Current.Height() + } + + msg := "" + if t.Err != nil { + msg = t.Err.Error() + } + count++ + + activeSync := apitypes.ActiveSync{ + WorkerID: uint64(count), + Base: t.Base, + Target: t.Head, + Stage: convertSyncStateStage(t.State), + Height: currentHeight, + Start: t.Start, + End: t.End, + Message: msg, + } + return activeSync + } + //current + for _, t := range tracker.Buckets() { + if t.State != syncTypes.StageSyncErrored { + syncState.ActiveSyncs = append(syncState.ActiveSyncs, toActiveSync(t)) + } + } + //history + for _, t := range tracker.History() { + if t.State != syncTypes.StageSyncErrored { + syncState.ActiveSyncs = append(syncState.ActiveSyncs, toActiveSync(t)) + } + } + + return syncState, nil +} diff --git a/app/submodule/syncer/syncer_submodule.go b/app/submodule/syncer/syncer_submodule.go new file mode 100644 index 0000000000..fd7070ccb9 --- /dev/null +++ b/app/submodule/syncer/syncer_submodule.go @@ -0,0 +1,332 @@ +package syncer + +import ( + "bytes" + "context" + "reflect" + "runtime" + "time" + + chain2 "github.com/filecoin-project/venus/app/submodule/chain" + "github.com/filecoin-project/venus/pkg/clock" + "github.com/filecoin-project/venus/pkg/statemanger" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + cbor "github.com/ipfs/go-ipld-cbor" + + fbig "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + logging "github.com/ipfs/go-log/v2" + "github.com/pkg/errors" + "go.opencensus.io/trace" + + "github.com/filecoin-project/venus/app/submodule/blockstore" + "github.com/filecoin-project/venus/app/submodule/discovery" + "github.com/filecoin-project/venus/app/submodule/network" + "github.com/filecoin-project/venus/pkg/beacon" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/chainsync" + "github.com/filecoin-project/venus/pkg/chainsync/slashfilter" + "github.com/filecoin-project/venus/pkg/consensus" + "github.com/filecoin-project/venus/pkg/net/blocksub" + "github.com/filecoin-project/venus/pkg/net/pubsub" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/vm/gas" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-blockservice" +) + +var log = logging.Logger("sync.module") // nolint: deadcode + +// SyncerSubmodule enhances the node with chain syncing capabilities +type SyncerSubmodule struct { //nolint + BlockstoreModule *blockstore.BlockstoreSubmodule + ChainModule *chain2.ChainSubmodule + NetworkModule *network.NetworkSubmodule + DiscoverySubmodule *discovery.DiscoverySubmodule + + // todo: use the 'Topic' and 'Subscription' defined in + // "github.com/libp2p/go-libp2p-pubsub" replace which defined in + // 'venus/pkg/net/pubsub/topic.go' + BlockTopic *pubsub.Topic + BlockSub pubsub.Subscription + ChainSelector nodeChainSelector + Stmgr *statemanger.Stmgr + ChainSyncManager *chainsync.Manager + Drand beacon.Schedule + SyncProvider ChainSyncProvider + SlashFilter slashfilter.ISlashFilter + BlockValidator *consensus.BlockValidator + + // cancelChainSync cancels the context for chain sync subscriptions and handlers. + CancelChainSync context.CancelFunc +} + +type syncerConfig interface { + GenesisCid() cid.Cid + BlockTime() time.Duration + ChainClock() clock.ChainEpochClock + Repo() repo.Repo + Verifier() ffiwrapper.Verifier +} + +type nodeChainSelector interface { + Weight(context.Context, *types.TipSet) (fbig.Int, error) + IsHeavier(ctx context.Context, a, b *types.TipSet) (bool, error) +} + +// NewSyncerSubmodule creates a new chain submodule. +func NewSyncerSubmodule(ctx context.Context, + config syncerConfig, + blockstore *blockstore.BlockstoreSubmodule, + network *network.NetworkSubmodule, + discovery *discovery.DiscoverySubmodule, + chn *chain2.ChainSubmodule, + circulatingSupplyCalculator chain.ICirculatingSupplyCalcualtor, +) (*SyncerSubmodule, error) { + // setup validation + gasPriceSchedule := gas.NewPricesSchedule(config.Repo().Config().NetworkParams.ForkUpgradeParam) + + tickets := consensus.NewTicketMachine(chn.ChainReader) + cborStore := cbor.NewCborStore(config.Repo().Datastore()) + stateViewer := consensus.AsDefaultStateViewer(state.NewViewer(cborStore)) + nodeChainSelector := consensus.NewChainSelector(cborStore, &stateViewer) + + blkValid := consensus.NewBlockValidator(tickets, + blockstore.Blockstore, + chn.MessageStore, + chn.Drand, + cborStore, + config.Verifier(), + &stateViewer, + chn.ChainReader, + nodeChainSelector, + chn.Fork, + config.Repo().Config().NetworkParams, + gasPriceSchedule) + + // register block validation on pubsub + btv := blocksub.NewBlockTopicValidator(blkValid) + if err := network.Pubsub.RegisterTopicValidator(btv.Topic(network.NetworkName), btv.Validator(), btv.Opts()...); err != nil { + return nil, errors.Wrap(err, "failed to register block validator") + } + + rnd := chn.API() + nodeConsensus := consensus.NewExpected(cborStore, + blockstore.Blockstore, + config.BlockTime(), + chn.ChainReader, + rnd, + chn.MessageStore, + chn.Fork, + config.Repo().Config().NetworkParams, + gasPriceSchedule, + blkValid, + chn.SystemCall, + circulatingSupplyCalculator, + ) + + stmgr := statemanger.NewStateManger(chn.ChainReader, nodeConsensus, rnd, + chn.Fork, gasPriceSchedule, chn.SystemCall) + + blkValid.Stmgr = stmgr + chn.Stmgr = stmgr + chn.Waiter.Stmgr = stmgr + + chainSyncManager, err := chainsync.NewManager(stmgr, blkValid, chn, nodeChainSelector, + blockstore.Blockstore, discovery.ExchangeClient, config.ChainClock(), chn.Fork) + if err != nil { + return nil, err + } + + discovery.PeerDiscoveryCallbacks = append(discovery.PeerDiscoveryCallbacks, func(ci *types.ChainInfo) { + err := chainSyncManager.BlockProposer().SendHello(ci) + if err != nil { + log.Errorf("error receiving chain info from hello %s: %s", ci, err) + return + } + }) + + var ( + slashFilter slashfilter.ISlashFilter + ) + if config.Repo().Config().SlashFilterDs.Type == "local" { + slashFilter = slashfilter.NewLocalSlashFilter(config.Repo().ChainDatastore()) + } else { + slashFilter, err = slashfilter.NewMysqlSlashFilter(config.Repo().Config().SlashFilterDs.MySQL) + if err != nil { + return nil, err + } + } + + return &SyncerSubmodule{ + Stmgr: stmgr, + BlockstoreModule: blockstore, + ChainModule: chn, + NetworkModule: network, + DiscoverySubmodule: discovery, + SlashFilter: slashFilter, + ChainSelector: nodeChainSelector, + ChainSyncManager: &chainSyncManager, + Drand: chn.Drand, + SyncProvider: *NewChainSyncProvider(&chainSyncManager), + BlockValidator: blkValid, + }, nil +} + +func (syncer *SyncerSubmodule) handleIncomingBlocks(ctx context.Context, msg pubsub.Message) error { + sender := msg.GetSender() + source := msg.GetSource() + // ignore messages from self + if sender == syncer.NetworkModule.Host.ID() || source == syncer.NetworkModule.Host.ID() { + return nil + } + + ctx, span := trace.StartSpan(ctx, "Node.handleIncomingBlocks") + + var bm types.BlockMsg + err := bm.UnmarshalCBOR(bytes.NewReader(msg.GetData())) + if err != nil { + return errors.Wrapf(err, "failed to decode blocksub payload from source: %s, sender: %s", source, sender) + } + + header := bm.Header + span.AddAttributes(trace.StringAttribute("block", header.Cid().String())) + + log.Infof("Received new block %s height %d from peer %s", header.Cid(), header.Height, sender) + + _, err = syncer.ChainModule.ChainReader.PutObject(ctx, bm.Header) + if err != nil { + log.Errorf("failed to save block %s", err) + } + go func() { + start := time.Now() + + defer func() { + if cost := time.Since(start); cost > slowFetchMessageDuration { + log.Warnf("incoming new block(%d, %s), slow fetch messages, cost time = %.4f(seconds)", + bm.Header.Height, bm.Header.Cid().String(), cost.Seconds()) + } + log.Infof("incoming new block(%d, %s), cost time = %.4f(seconds)", + bm.Header.Height, bm.Header.Cid().String(), time.Since(start).Seconds()) + }() + + if delay := time.Since(time.Unix(int64(bm.Header.Timestamp), 0)); delay > incomeBlockLargeDelayDuration { + log.Warnf("received block(%d, %s) with large delay : %s", + bm.Header.Height, bm.Header.Cid(), delay.String()) + } + + blkSvc := blockservice.New(syncer.NetworkModule.Blockstore, syncer.NetworkModule.Bitswap) + + if _, err := syncer.NetworkModule.FetchMessagesByCids(ctx, blkSvc, bm.BlsMessages); err != nil { + log.Errorf("fetch block bls messages failed:%s", err.Error()) + return + } + if _, err := syncer.NetworkModule.FetchSignedMessagesByCids(ctx, blkSvc, bm.SecpkMessages); err != nil { + log.Errorf("fetch block signed messages failed:%s", err.Error()) + return + } + + syncer.NetworkModule.Host.ConnManager().TagPeer(sender, "new-block", 20) + log.Infof("fetch message success at %s", bm.Header.Cid()) + + ts, _ := types.NewTipSet([]*types.BlockHeader{header}) + chainInfo := types.NewChainInfo(source, sender, ts) + + if err = syncer.ChainSyncManager.BlockProposer().SendGossipBlock(chainInfo); err != nil { + log.Errorf("failed to notify syncer of new block, block: %s", err) + } + + }() + return nil +} + +// nolint +func (syncer *SyncerSubmodule) loadLocalFullTipset(ctx context.Context, tsk types.TipSetKey) (*types.FullTipSet, error) { + ts, err := syncer.ChainModule.ChainReader.GetTipSet(ctx, tsk) + if err != nil { + return nil, err + } + + fts := &types.FullTipSet{} + for _, b := range ts.Blocks() { + smsgs, bmsgs, err := syncer.ChainModule.MessageStore.LoadMetaMessages(ctx, b.Messages) + if err != nil { + return nil, err + } + + fb := &types.FullBlock{ + Header: b, + BLSMessages: bmsgs, + SECPMessages: smsgs, + } + fts.Blocks = append(fts.Blocks, fb) + } + + return fts, nil +} + +// Start starts the syncer submodule for a node. +func (syncer *SyncerSubmodule) Start(ctx context.Context) error { + // setup topic + topic, err := syncer.NetworkModule.Pubsub.Join(blocksub.Topic(syncer.NetworkModule.NetworkName)) + if err != nil { + return err + } + syncer.BlockTopic = pubsub.NewTopic(topic) + + syncer.BlockSub, err = syncer.BlockTopic.Subscribe() + if err != nil { + return errors.Wrapf(err, "failed to subscribe block topic") + } + + //process incoming blocks + go func() { + for { + received, err := syncer.BlockSub.Next(ctx) + if err != nil { + if ctx.Err() != context.Canceled { + log.Errorf("error reading message from topic %s: %s", syncer.BlockSub.Topic(), err) + } + return + } + + if err := syncer.handleIncomingBlocks(ctx, received); err != nil { + handlerName := runtime.FuncForPC(reflect.ValueOf(syncer.handleIncomingBlocks).Pointer()).Name() + if err != context.Canceled { + log.Debugf("error in handler %s for topic %s: %s", handlerName, syncer.BlockSub.Topic(), err) + } + } + } + }() + + err = syncer.ChainModule.Start(ctx) + if err != nil { + return err + } + + return syncer.ChainSyncManager.Start(ctx) +} + +func (syncer *SyncerSubmodule) Stop(ctx context.Context) { + if syncer.CancelChainSync != nil { + syncer.CancelChainSync() + } + if syncer.BlockSub != nil { + syncer.BlockSub.Cancel() + } + if syncer.Stmgr != nil { + syncer.Stmgr.Close(ctx) + } +} + +//API create a new sync api implement +func (syncer *SyncerSubmodule) API() v1api.ISyncer { + return &syncerAPI{syncer: syncer} +} + +func (syncer *SyncerSubmodule) V0API() v0api.ISyncer { + return &syncerAPI{syncer: syncer} +} diff --git a/app/submodule/wallet/remotewallet/api.go b/app/submodule/wallet/remotewallet/api.go new file mode 100644 index 0000000000..88fc65a8aa --- /dev/null +++ b/app/submodule/wallet/remotewallet/api.go @@ -0,0 +1,81 @@ +// Code from github.com/filecoin-project/venus-wallet/storage/wallet/wallet.go & api/api_wallet.go & api/remotecli/cli.go . DO NOT EDIT. + +package remotewallet + +import ( + "context" + "net/http" + + "github.com/filecoin-project/go-jsonrpc" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/pkg/wallet" + types "github.com/filecoin-project/venus/venus-shared/wallet" +) + +type IWallet interface { + WalletNew(context.Context, types.KeyType) (address.Address, error) + WalletHas(ctx context.Context, address address.Address) (bool, error) + WalletList(ctx context.Context) ([]address.Address, error) + WalletSign(ctx context.Context, signer address.Address, toSign []byte, meta types.MsgMeta) (*wallet.Signature, error) + WalletExport(ctx context.Context, addr address.Address) (*types.KeyInfo, error) + WalletImport(context.Context, *types.KeyInfo) (address.Address, error) + WalletDelete(context.Context, address.Address) error +} + +var _ IWallet = &WalletAPIAdapter{} + +// wallet API permissions constraints +type WalletAPIAdapter struct { + Internal struct { + WalletNew func(ctx context.Context, kt types.KeyType) (address.Address, error) `perm:"admin"` + WalletHas func(ctx context.Context, address address.Address) (bool, error) `perm:"write"` + WalletList func(ctx context.Context) ([]address.Address, error) `perm:"write"` + WalletSign func(ctx context.Context, signer address.Address, toSign []byte, meta types.MsgMeta) (*wallet.Signature, error) `perm:"sign"` + WalletExport func(ctx context.Context, addr address.Address) (*types.KeyInfo, error) `perm:"admin"` + WalletImport func(ctx context.Context, ki *types.KeyInfo) (address.Address, error) `perm:"admin"` + WalletDelete func(ctx context.Context, addr address.Address) error `perm:"admin"` + } +} + +func (c *WalletAPIAdapter) WalletNew(ctx context.Context, keyType types.KeyType) (address.Address, error) { + return c.Internal.WalletNew(ctx, keyType) +} + +func (c *WalletAPIAdapter) WalletHas(ctx context.Context, addr address.Address) (bool, error) { + return c.Internal.WalletHas(ctx, addr) +} + +func (c *WalletAPIAdapter) WalletList(ctx context.Context) ([]address.Address, error) { + return c.Internal.WalletList(ctx) +} + +func (c *WalletAPIAdapter) WalletSign(ctx context.Context, signer address.Address, toSign []byte, meta types.MsgMeta) (*wallet.Signature, error) { + return c.Internal.WalletSign(ctx, signer, toSign, meta) +} + +func (c *WalletAPIAdapter) WalletExport(ctx context.Context, a address.Address) (*types.KeyInfo, error) { + return c.Internal.WalletExport(ctx, a) +} + +func (c *WalletAPIAdapter) WalletImport(ctx context.Context, ki *types.KeyInfo) (address.Address, error) { + return c.Internal.WalletImport(ctx, ki) +} + +func (c *WalletAPIAdapter) WalletDelete(ctx context.Context, addr address.Address) error { + return c.Internal.WalletDelete(ctx, addr) +} + +// NewWalletRPC RPCClient returns an RPC client connected to a node +// @addr reference ./httpparse/ParseApiInfo() +// @requestHeader reference ./httpparse/ParseApiInfo() +func NewWalletRPC(ctx context.Context, addr string, requestHeader http.Header) (IWallet, jsonrpc.ClientCloser, error) { + var res WalletAPIAdapter + closer, err := jsonrpc.NewMergeClient(ctx, addr, "Filecoin", + []interface{}{ + &res.Internal, + }, + requestHeader, + ) + return &res, closer, err +} diff --git a/app/submodule/wallet/remotewallet/keymap.go b/app/submodule/wallet/remotewallet/keymap.go new file mode 100644 index 0000000000..2d0fd6e521 --- /dev/null +++ b/app/submodule/wallet/remotewallet/keymap.go @@ -0,0 +1,36 @@ +package remotewallet + +import ( + "github.com/filecoin-project/go-address" + + "github.com/filecoin-project/venus/pkg/crypto" + types "github.com/filecoin-project/venus/venus-shared/wallet" +) + +var keyMapper = map[address.Protocol]types.KeyType{ + address.SECP256K1: types.KTSecp256k1, + address.BLS: types.KTBLS, +} + +func GetKeyType(p address.Protocol) types.KeyType { + k, ok := keyMapper[p] + if ok { + return k + } + return types.KTUnknown +} + +func ConvertRemoteKeyInfo(key *crypto.KeyInfo) *types.KeyInfo { + return &types.KeyInfo{ + PrivateKey: key.Key(), + Type: types.SignType2Key(key.SigType), + } +} +func ConvertLocalKeyInfo(key *types.KeyInfo) *crypto.KeyInfo { + ki := &crypto.KeyInfo{ + SigType: types.KeyType2Sign(key.Type), + } + ki.SetPrivateKey(key.PrivateKey) + + return ki +} diff --git a/app/submodule/wallet/remotewallet/parse.go b/app/submodule/wallet/remotewallet/parse.go new file mode 100644 index 0000000000..b7729f45f2 --- /dev/null +++ b/app/submodule/wallet/remotewallet/parse.go @@ -0,0 +1,50 @@ +package remotewallet + +import ( + "github.com/ipfs-force-community/venus-common-utils/apiinfo" + "net/http" + "regexp" +) + +var ( + regJWTToken = regexp.MustCompile("[a-zA-Z0-9\\-_]{5,}\\.[a-zA-Z0-9\\-_]{5,}\\.[a-zA-Z0-9\\-_]{5,}") //nolint + regUUID = regexp.MustCompile("[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}") //nolint + regIPv4 = regexp.MustCompile("/ip4/(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/tcp/[0-9]{4,5}/http") //nolint +) + +const ( + ServiceToken = "Authorization" + WalletStrategyToken = "StrategyToken" +) + +// APIInfo parse URL string to +type APIInfo struct { + Addr string + Token []byte + StrategyToken []byte +} + +func ParseAPIInfo(s string) (*APIInfo, error) { + token := []byte(regJWTToken.FindString(s)) + strategyToken := []byte(regUUID.FindString(s)) + addr := regIPv4.FindString(s) + return &APIInfo{ + Addr: addr, + Token: token, + StrategyToken: strategyToken, + }, nil +} + +func (a APIInfo) DialArgs() (string, error) { + return apiinfo.DialArgs(a.Addr, "v0") +} + +func (a APIInfo) AuthHeader() http.Header { + if len(a.Token) != 0 { + headers := http.Header{} + headers.Add(ServiceToken, "Bearer "+string(a.Token)) + headers.Add(WalletStrategyToken, string(a.StrategyToken)) + return headers + } + return nil +} diff --git a/app/submodule/wallet/remotewallet/remote.go b/app/submodule/wallet/remotewallet/remote.go new file mode 100644 index 0000000000..5f7a1bac32 --- /dev/null +++ b/app/submodule/wallet/remotewallet/remote.go @@ -0,0 +1,78 @@ +package remotewallet + +import ( + "context" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/wallet" + types "github.com/filecoin-project/venus/venus-shared/wallet" +) + +var _ wallet.WalletIntersection = &remoteWallet{} + +type remoteWallet struct { + IWallet + Cancel func() +} + +func (w *remoteWallet) Addresses(ctx context.Context) []address.Address { + wallets, err := w.IWallet.WalletList(context.Background()) + if err != nil { + return make([]address.Address, 0) + } + return wallets +} + +func (w *remoteWallet) HasPassword(ctx context.Context) bool { + return true +} + +func SetupRemoteWallet(info string) (wallet.WalletIntersection, error) { + ai, err := ParseAPIInfo(info) + if err != nil { + return nil, err + } + url, err := ai.DialArgs() + if err != nil { + return nil, err + } + wapi, closer, err := NewWalletRPC(context.Background(), url, ai.AuthHeader()) + if err != nil { + return nil, xerrors.Errorf("creating jsonrpc client: %w", err) + } + return &remoteWallet{ + IWallet: wapi, + Cancel: closer, + }, nil +} + +func (w *remoteWallet) HasAddress(ctx context.Context, addr address.Address) bool { + exist, err := w.IWallet.WalletHas(context.Background(), addr) + if err != nil { + return false + } + return exist +} +func (w *remoteWallet) NewAddress(ctx context.Context, protocol address.Protocol) (address.Address, error) { + return w.IWallet.WalletNew(context.Background(), GetKeyType(protocol)) +} + +func (w *remoteWallet) Import(ctx context.Context, key *crypto.KeyInfo) (address.Address, error) { + return w.IWallet.WalletImport(context.Background(), ConvertRemoteKeyInfo(key)) +} + +func (w *remoteWallet) Export(ctx context.Context, addr address.Address, password string) (*crypto.KeyInfo, error) { + key, err := w.IWallet.WalletExport(context.Background(), addr) + if err != nil { + return nil, err + } + return ConvertLocalKeyInfo(key), nil +} + +func (w *remoteWallet) WalletSign(ctx context.Context, keyAddr address.Address, msg []byte, meta types.MsgMeta) (*crypto.Signature, error) { + return w.IWallet.WalletSign(context.Background(), keyAddr, msg, meta) +} diff --git a/app/submodule/wallet/wallet_api.go b/app/submodule/wallet/wallet_api.go new file mode 100644 index 0000000000..781fc0f230 --- /dev/null +++ b/app/submodule/wallet/wallet_api.go @@ -0,0 +1,161 @@ +package wallet + +import ( + "context" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/app/submodule/wallet/remotewallet" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/wallet" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + wtypes "github.com/filecoin-project/venus/venus-shared/wallet" +) + +var _ v1api.IWallet = &WalletAPI{} + +var ErrNoDefaultFromAddress = errors.New("unable to determine a default walletModule address") + +type WalletAPI struct { // nolint + walletModule *WalletSubmodule + adapter wallet.WalletIntersection +} + +// WalletBalance returns the current balance of the given wallet address. +func (walletAPI *WalletAPI) WalletBalance(ctx context.Context, addr address.Address) (abi.TokenAmount, error) { + actor, err := walletAPI.walletModule.Chain.Stmgr.GetActorAtTsk(ctx, addr, types.EmptyTSK) + if err != nil { + if xerrors.Is(err, types.ErrActorNotFound) { + return abi.NewTokenAmount(0), nil + } + return abi.NewTokenAmount(0), err + } + + return actor.Balance, nil +} + +// WalletHas indicates whether the given address is in the wallet. +func (walletAPI *WalletAPI) WalletHas(ctx context.Context, addr address.Address) (bool, error) { + return walletAPI.adapter.HasAddress(ctx, addr), nil +} + +// SetWalletDefaultAddress set the specified address as the default in the config. +func (walletAPI *WalletAPI) WalletDefaultAddress(ctx context.Context) (address.Address, error) { + ret, err := walletAPI.walletModule.Config.Get("walletModule.defaultAddress") + addr := ret.(address.Address) + if err != nil || !addr.Empty() { + return addr, err + } + + // No default is set; pick the 0th and make it the default. + if len(walletAPI.WalletAddresses(ctx)) > 0 { + addr := walletAPI.WalletAddresses(ctx)[0] + err := walletAPI.walletModule.Config.Set("walletModule.defaultAddress", addr.String()) + if err != nil { + return address.Undef, err + } + + return addr, nil + } + + return address.Undef, nil +} + +// WalletAddresses gets addresses from the walletModule +func (walletAPI *WalletAPI) WalletAddresses(ctx context.Context) []address.Address { + return walletAPI.adapter.Addresses(ctx) +} + +// SetWalletDefaultAddress set the specified address as the default in the config. +func (walletAPI *WalletAPI) WalletSetDefault(ctx context.Context, addr address.Address) error { + localAddrs := walletAPI.WalletAddresses(ctx) + for _, localAddr := range localAddrs { + if localAddr == addr { + err := walletAPI.walletModule.Config.Set("walletModule.defaultAddress", addr.String()) + if err != nil { + return err + } + return nil + } + } + return errors.New("addr not in the walletModule list") +} + +// WalletNewAddress generates a new walletModule address +func (walletAPI *WalletAPI) WalletNewAddress(ctx context.Context, protocol address.Protocol) (address.Address, error) { + return walletAPI.adapter.NewAddress(ctx, protocol) +} + +// WalletImport adds a given set of KeyInfos to the walletModule +func (walletAPI *WalletAPI) WalletImport(ctx context.Context, key *wtypes.KeyInfo) (address.Address, error) { + addr, err := walletAPI.adapter.Import(ctx, remotewallet.ConvertLocalKeyInfo(key)) + if err != nil { + return address.Undef, err + } + return addr, nil +} + +// WalletExport returns the KeyInfos for the given walletModule addresses +func (walletAPI *WalletAPI) WalletExport(ctx context.Context, addr address.Address, password string) (*wtypes.KeyInfo, error) { + ki, err := walletAPI.adapter.Export(ctx, addr, password) + if err != nil { + return nil, err + } + return remotewallet.ConvertRemoteKeyInfo(ki), nil +} + +// WalletSign signs the given bytes using the given address. +func (walletAPI *WalletAPI) WalletSign(ctx context.Context, k address.Address, msg []byte, meta wtypes.MsgMeta) (*crypto.Signature, error) { + keyAddr, err := walletAPI.walletModule.Chain.Stmgr.ResolveToKeyAddress(ctx, k, nil) + if err != nil { + return nil, xerrors.Errorf("ResolveTokeyAddress failed:%v", err) + } + return walletAPI.adapter.WalletSign(ctx, keyAddr, msg, meta) +} + +// WalletSignMessage signs the given message using the given address. +func (walletAPI *WalletAPI) WalletSignMessage(ctx context.Context, k address.Address, msg *types.Message) (*types.SignedMessage, error) { + mb, err := msg.ToStorageBlock() + if err != nil { + return nil, xerrors.Errorf("serializing message: %w", err) + } + + sign, err := walletAPI.WalletSign(ctx, k, mb.Cid().Bytes(), wtypes.MsgMeta{Type: wtypes.MTChainMsg}) + if err != nil { + return nil, xerrors.Errorf("failed to sign message: %w", err) + } + + return &types.SignedMessage{ + Message: *msg, + Signature: *sign, + }, nil +} + +// LockWallet lock wallet +func (walletAPI *WalletAPI) LockWallet(ctx context.Context) error { + return walletAPI.walletModule.Wallet.LockWallet(ctx) +} + +// UnLockWallet unlock wallet +func (walletAPI *WalletAPI) UnLockWallet(ctx context.Context, password []byte) error { + return walletAPI.walletModule.Wallet.UnLockWallet(ctx, password) +} + +// SetPassword set wallet password +func (walletAPI *WalletAPI) SetPassword(ctx context.Context, password []byte) error { + return walletAPI.walletModule.Wallet.SetPassword(ctx, password) +} + +// HasPassword return whether the wallet has password +func (walletAPI *WalletAPI) HasPassword(ctx context.Context) bool { + return walletAPI.adapter.HasPassword(ctx) +} + +// WalletState return wallet state +func (walletAPI *WalletAPI) WalletState(ctx context.Context) int { + return walletAPI.walletModule.Wallet.WalletState(ctx) +} diff --git a/app/submodule/wallet/wallet_submodule.go b/app/submodule/wallet/wallet_submodule.go new file mode 100644 index 0000000000..376547d204 --- /dev/null +++ b/app/submodule/wallet/wallet_submodule.go @@ -0,0 +1,101 @@ +package wallet + +import ( + "context" + + v0api "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + + logging "github.com/ipfs/go-log" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/app/submodule/chain" + "github.com/filecoin-project/venus/app/submodule/config" + "github.com/filecoin-project/venus/app/submodule/wallet/remotewallet" + pconfig "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/wallet" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var log = logging.Logger("wallet") + +// WalletSubmodule enhances the `Node` with a "wallet" and FIL transfer capabilities. +type WalletSubmodule struct { // nolint + Chain *chain.ChainSubmodule + Wallet *wallet.Wallet + adapter wallet.WalletIntersection + Signer types.Signer + Config *config.ConfigModule +} + +type walletRepo interface { + Config() *pconfig.Config + WalletDatastore() repo.Datastore +} + +// NewWalletSubmodule creates a new storage protocol submodule. +func NewWalletSubmodule(ctx context.Context, + repo walletRepo, + cfgModule *config.ConfigModule, + chain *chain.ChainSubmodule, + password []byte) (*WalletSubmodule, error) { + passphraseCfg, err := getPassphraseConfig(repo.Config()) + if err != nil { + return nil, errors.Wrap(err, "failed to get passphrase config") + } + backend, err := wallet.NewDSBackend(ctx, repo.WalletDatastore(), passphraseCfg, password) + if err != nil { + return nil, errors.Wrap(err, "failed to set up walletModule backend") + } + fcWallet := wallet.New(backend) + headSigner := state.NewHeadSignView(chain.ChainReader) + + var adapter wallet.WalletIntersection + if repo.Config().Wallet.RemoteEnable { + if repo.Config().Wallet.RemoteBackend == wallet.StringEmpty { + return nil, errors.New("remote backend is empty") + } + adapter, err = remotewallet.SetupRemoteWallet(repo.Config().Wallet.RemoteBackend) + if err != nil { + return nil, errors.Wrap(err, "failed to set up remote wallet") + } + log.Info("remote wallet set up") + } else { + adapter = fcWallet + } + return &WalletSubmodule{ + Config: cfgModule, + Chain: chain, + Wallet: fcWallet, + adapter: adapter, + Signer: state.NewSigner(headSigner, fcWallet), + }, nil +} + +//API create a new wallet api implement +func (wallet *WalletSubmodule) API() v1api.IWallet { + return &WalletAPI{ + walletModule: wallet, + adapter: wallet.adapter, + } +} + +func (wallet *WalletSubmodule) V0API() v0api.IWallet { + return &WalletAPI{ + walletModule: wallet, + adapter: wallet.adapter, + } +} + +func (wallet *WalletSubmodule) WalletIntersection() wallet.WalletIntersection { + return wallet.adapter +} + +func getPassphraseConfig(cfg *pconfig.Config) (pconfig.PassphraseConfig, error) { + return pconfig.PassphraseConfig{ + ScryptN: cfg.Wallet.PassphraseConfig.ScryptN, + ScryptP: cfg.Wallet.PassphraseConfig.ScryptP, + }, nil +} diff --git a/appveyor.yml b/appveyor.yml index 8047992a75..273ec58ae7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,7 +2,7 @@ version: "{build}" # Source Config -clone_folder: c:\gopath\src\github.com\filecoin-project\go-filecoin +clone_folder: c:\gopath\src\github.com\filecoin-project\venus # Build host diff --git a/bin/container_daemon b/bin/container_daemon index 5de44443c0..063a7365f7 100755 --- a/bin/container_daemon +++ b/bin/container_daemon @@ -14,7 +14,7 @@ fi if [ -e "$repo/config.json" ]; then echo "Found Filecoin fs-repo at $repo" else - go-filecoin init + venus daemon # TODO configure custom API and address here fi @@ -25,4 +25,4 @@ else echo "ERROR: arguments have been set but the first argument isn't 'daemon'" >&2 fi -exec go-filecoin daemon "$@" +exec venus daemon "$@" diff --git a/bin/node_restart b/bin/node_restart index 9b828bb5f0..d8ea4aa80b 100755 --- a/bin/node_restart +++ b/bin/node_restart @@ -1,7 +1,7 @@ #!/bin/sh set -e filecoin_repo="/var/local/filecoin/repo" -filecoin_exec="go-filecoin --repodir=${filecoin_repo}" +filecoin_exec="venus --repodir=${filecoin_repo}" # Number of time to check before giving up limit=3600 diff --git a/build/flags/flags.go b/build/flags/flags.go index 7a037ffb34..3a42973a38 100644 --- a/build/flags/flags.go +++ b/build/flags/flags.go @@ -5,3 +5,6 @@ var GitCommit string // GitRoot is the git root, this is injected through ldflags. var GitRoot string + +// GitTag is the current git tag, this is injected through ldflags +var GitTag string diff --git a/build/internal/helpers/gitcmds.go b/build/internal/helpers/gitcmds.go new file mode 100644 index 0000000000..b871244a8f --- /dev/null +++ b/build/internal/helpers/gitcmds.go @@ -0,0 +1,33 @@ +package helpers + +import ( + "log" + "os/exec" + "strings" +) + +var lineBreak = "\n" + +// GetCommitSha get commit hash +func GetCommitSha() string { + return runCapture("git log -n 1 --format=%H") +} + +// GetLastTag get last tag +func GetLastTag() string { + lastTag := runCapture("git rev-list --tags --max-count=1") + return runCapture("git describe --tags " + lastTag) +} + +func runCapture(name string) string { + args := strings.Split(name, " ") + cmd := exec.Command(args[0], args[1:]...) // #nosec + log.Println(name) + + output, err := cmd.CombinedOutput() + if err != nil { + log.Fatalf("Command '%s' failed: %s\n", name, err) + } + + return strings.Trim(string(output), lineBreak) +} diff --git a/build/internal/version/version_test.go b/build/internal/version/version_test.go index a3221b0343..d4fe5cfd75 100644 --- a/build/internal/version/version_test.go +++ b/build/internal/version/version_test.go @@ -3,17 +3,19 @@ package version_test import ( - "github.com/filecoin-project/go-filecoin/build/internal/version" "testing" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/build/internal/version" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" "github.com/stretchr/testify/assert" ) func TestCheck(t *testing.T) { tf.UnitTest(t) - // Filecoin currently requires go >= 1.13.1 + // Filecoin currently requires go >= 1.14 + assert.True(t, version.Check("go1.14")) + assert.True(t, version.Check("go1.13.1")) assert.True(t, version.Check("go1.13.2")) diff --git a/build/main.go b/build/main.go index 18196f9d56..2f62d010ae 100644 --- a/build/main.go +++ b/build/main.go @@ -13,20 +13,12 @@ import ( "sync" "time" - pf "github.com/filecoin-project/go-paramfetch" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/build/internal/helpers" - "github.com/filecoin-project/go-filecoin/build/internal/version" + "github.com/filecoin-project/venus/build/internal/helpers" + "github.com/filecoin-project/venus/build/internal/version" ) -var lineBreak = "\n" - func init() { log.SetFlags(0) - if runtime.GOOS == "windows" { - lineBreak = "\r\n" - } // We build with go modules. if err := os.Setenv("GO111MODULE", "on"); err != nil { fmt.Println("Failed to set GO111MODULE env") @@ -99,19 +91,6 @@ func runCmd(c command) { } } -func runCapture(name string) string { - args := strings.Split(name, " ") - cmd := exec.Command(args[0], args[1:]...) // #nosec - log.Println(name) - - output, err := cmd.CombinedOutput() - if err != nil { - log.Fatalf("Command '%s' failed: %s\n", name, err) - } - - return strings.Trim(string(output), lineBreak) -} - // deps installs all dependencies func deps() { runCmd(cmd("pkg-config --version")) @@ -120,17 +99,6 @@ func deps() { runCmd(cmd("go mod download")) - dat, err := ioutil.ReadFile("./parameters.json") - if err != nil { - panic(errors.Wrap(err, "failed to read contents of ./parameters.json")) - } - - log.Println("Getting parameters...") - err = pf.GetParams(dat, 2048) - if err != nil { - panic(errors.Wrap(err, "failed to acquire Groth parameters for development sectors")) - } - runCmd(cmd("./scripts/install-filecoin-ffi.sh")) } @@ -142,36 +110,30 @@ func lint(packages ...string) { log.Printf("Linting %s ...\n", strings.Join(packages, " ")) - runCmd(cmd("go", "run", "github.com/golangci/golangci-lint/cmd/golangci-lint", - "--exclude", "(comment on exported (method|function|type|const|var)|should have( a package)? comment|comment should be of the form)", - "run")) + runCmd(cmd("go", "run", "github.com/golangci/golangci-lint/cmd/golangci-lint", "run", "--timeout", "5m")) } func build() { buildFilecoin() buildGengen() - buildFaucet() buildGenesisFileServer() generateGenesis() - buildMigrations() buildPrereleaseTool() } func forcebuild() { forceBuildFC() buildGengen() - buildFaucet() buildGenesisFileServer() generateGenesis() - buildMigrations() buildPrereleaseTool() } func forceBuildFC() { - log.Println("Force building go-filecoin...") + log.Println("Force building venus...") runCmd(cmd([]string{ - "bash", "-c", fmt.Sprintf("go build %s -a -v -o go-filecoin .", flags()), + "bash", "-c", fmt.Sprintf("go build %s -a -v -o venus .", flags()), }...)) } @@ -181,7 +143,7 @@ func forceBuildFC() { // exist in side of it. We use this pattern in a few places, so the need to keep the dot files around is impotant. func cleanDirectory(dir string, ignoredots bool) error { if abs := filepath.IsAbs(dir); !abs { - return fmt.Errorf("Directory %s is not an absolute path, could not clean directory", dir) + return fmt.Errorf("directory %s is not an absolute path, could not clean directory", dir) } files, err := ioutil.ReadDir(dir) @@ -245,17 +207,18 @@ func generateGenesis() { } func flags() string { - return fmt.Sprintf("-ldflags=github.com/filecoin-project/go-filecoin=\"%s\"", strings.Join([]string{ - fmt.Sprintf("-X github.com/filecoin-project/go-filecoin/build/flags.GitRoot=%s", helpers.GetGitRoot()), - fmt.Sprintf("-X github.com/filecoin-project/go-filecoin/build/flags.GitCommit=%s", getCommitSha()), + return fmt.Sprintf("-ldflags=github.com/filecoin-project/venus=\"%s\"", strings.Join([]string{ + fmt.Sprintf("-X github.com/filecoin-project/venus/build/flags.GitRoot=%s", helpers.GetGitRoot()), + fmt.Sprintf("-X github.com/filecoin-project/venus/build/flags.GitCommit=%s", helpers.GetCommitSha()), + fmt.Sprintf("-X github.com/filecoin-project/venus/build/flags.GitTag=%s", helpers.GetLastTag()), }, " ")) } func buildFilecoin() { - log.Println("Building go-filecoin...") + log.Println("Building venus...") runCmd(cmd([]string{ - "bash", "-c", fmt.Sprintf("go build %s -v -o go-filecoin .", flags()), + "bash", "-c", fmt.Sprintf("go build %s -v -o venus .", flags()), }...)) } @@ -265,24 +228,12 @@ func buildGengen() { runCmd(cmd([]string{"go", "build", "-o", "./tools/gengen/gengen", "./tools/gengen"}...)) } -func buildFaucet() { - log.Println("Building faucet...") - - runCmd(cmd([]string{"go", "build", "-o", "./tools/faucet/faucet", "./tools/faucet/"}...)) -} - func buildGenesisFileServer() { log.Println("Building genesis file server...") runCmd(cmd([]string{"go", "build", "-o", "./tools/genesis-file-server/genesis-file-server", "./tools/genesis-file-server/"}...)) } -func buildMigrations() { - log.Println("Building migrations...") - runCmd(cmd([]string{ - "go", "build", "-o", "./tools/migration/go-filecoin-migrate", "./tools/migration/main.go"}...)) -} - func buildPrereleaseTool() { log.Println("Building prerelease-tool...") @@ -316,6 +267,14 @@ func test(userArgs ...string) { log.Printf("Tests finished in %.1f seconds\n", end.Sub(begin).Seconds()) } +func genAPI() { + log.Println("generate api...") + + runCmd(cmd("go run ./tools/gen/api/proxygen.go")) + runCmd(cmd("gofmt -s -l -w ./app/client/v0api/full.go")) + runCmd(cmd("gofmt -s -l -w ./app/client/full.go")) +} + func main() { args := os.Args[1:] @@ -340,8 +299,6 @@ func main() { buildGengen() case "generate-genesis": generateGenesis() - case "build-migrations": - buildMigrations() case "build": build() case "fbuild": @@ -353,6 +310,8 @@ func main() { case "best": build() test(args[1:]...) + case "gen-api": + genAPI() case "all": deps() lint() @@ -362,7 +321,3 @@ func main() { log.Fatalf("Unknown command: %s\n", cmd) } } - -func getCommitSha() string { - return runCapture("git log -n 1 --format=%H") -} diff --git a/build/project/project.go b/build/project/project.go index 17667a24af..7bb14d3be8 100644 --- a/build/project/project.go +++ b/build/project/project.go @@ -3,8 +3,8 @@ package project import ( "path/filepath" - "github.com/filecoin-project/go-filecoin/build/flags" - "github.com/filecoin-project/go-filecoin/build/internal/helpers" + "github.com/filecoin-project/venus/build/flags" + "github.com/filecoin-project/venus/build/internal/helpers" ) // Root return the project root joined with any path fragments diff --git a/cmd/address.go b/cmd/address.go new file mode 100644 index 0000000000..ce33c2ea2a --- /dev/null +++ b/cmd/address.go @@ -0,0 +1,403 @@ +package cmd + +import ( + "bytes" + "context" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "os" + "strings" + + "github.com/filecoin-project/go-address" + "github.com/howeyc/gopass" + cmds "github.com/ipfs/go-ipfs-cmds" + files "github.com/ipfs/go-ipfs-files" + + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/cmd/tablewriter" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/wallet" + types "github.com/filecoin-project/venus/venus-shared/chain" + wtypes "github.com/filecoin-project/venus/venus-shared/wallet" +) + +var errMissPassword = errors.New("the wallet is missing password, please use command `venus wallet set-password` to set password") +var errWalletLocked = errors.New("the wallet is locked, please use command `venus wallet unlock` to unlock") + +var walletCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Manage your filecoin wallets", + }, + Subcommands: map[string]*cmds.Command{ + "balance": balanceCmd, + "import": walletImportCmd, + "export": walletExportCmd, + "ls": addrsLsCmd, + "new": addrsNewCmd, + "default": defaultAddressCmd, + "set-default": setDefaultAddressCmd, + "lock": lockedCmd, + "unlock": unlockedCmd, + "set-password": setWalletPassword, + }, +} + +type AddressResult struct { + Address address.Address +} + +// AddressLsResult is the result of running the address list command. +type AddressLsResult struct { + Addresses []address.Address +} + +var addrsNewCmd = &cmds.Command{ + Options: []cmds.Option{ + cmds.StringOption("type", "The type of address to create: bls (default) or secp256k1").WithDefault("bls"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + protocolName := req.Options["type"].(string) + var protocol address.Protocol + switch protocolName { + case "secp256k1": + protocol = address.SECP256K1 + case "bls": + protocol = address.BLS + default: + return fmt.Errorf("unrecognized address protocol %s", protocolName) + } + + if !env.(*node.Env).WalletAPI.HasPassword(req.Context) { + return errMissPassword + } + if env.(*node.Env).WalletAPI.WalletState(req.Context) == wallet.Lock { + return errWalletLocked + } + + addr, err := env.(*node.Env).WalletAPI.WalletNewAddress(req.Context, protocol) + if err != nil { + return err + } + + return printOneString(re, addr.String()) + }, +} + +var addrsLsCmd = &cmds.Command{ + Options: []cmds.Option{ + cmds.BoolOption("addr-only", "Only print addresses"), + cmds.BoolOption("id", "Output ID addresses"), + cmds.BoolOption("market", "Output market balances"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + api := env.(*node.Env) + ctx := req.Context + + addrs := api.WalletAPI.WalletAddresses(req.Context) + + // Assume an error means no default key is set + def, _ := api.WalletAPI.WalletDefaultAddress(req.Context) + + buf := new(bytes.Buffer) + tw := tablewriter.New( + tablewriter.Col("Address"), + tablewriter.Col("ID"), + tablewriter.Col("Balance"), + tablewriter.Col("Market(Avail)"), + tablewriter.Col("Market(Locked)"), + tablewriter.Col("Nonce"), + tablewriter.Col("Default"), + tablewriter.NewLineCol("Error")) + + addrOnly := false + if _, ok := req.Options["addr-only"]; ok { + addrOnly = true + } + for _, addr := range addrs { + if addrOnly { + writer := NewSilentWriter(buf) + writer.WriteStringln(addr.String()) + } else { + a, err := api.ChainAPI.StateGetActor(ctx, addr, types.EmptyTSK) + if err != nil { + if !strings.Contains(err.Error(), "actor not found") { + tw.Write(map[string]interface{}{ + "Address": addr, + "Error": err, + }) + continue + } + + a = &types.Actor{ + Balance: big.Zero(), + } + } + + row := map[string]interface{}{ + "Address": addr, + "Balance": types.FIL(a.Balance), + "Nonce": a.Nonce, + } + if addr == def { + row["Default"] = "X" + } + + if _, ok := req.Options["id"]; ok { + id, err := api.ChainAPI.StateLookupID(ctx, addr, types.EmptyTSK) + if err != nil { + row["ID"] = "n/a" + } else { + row["ID"] = id + } + } + + if _, ok := req.Options["market"]; ok { + mbal, err := api.ChainAPI.StateMarketBalance(ctx, addr, types.EmptyTSK) + if err == nil { + row["Market(Avail)"] = types.FIL(types.BigSub(mbal.Escrow, mbal.Locked)) + row["Market(Locked)"] = types.FIL(mbal.Locked) + } + } + + tw.Write(row) + } + } + + if !addrOnly { + _ = tw.Flush(buf) + } + + return re.Emit(buf) + }, +} + +var defaultAddressCmd = &cmds.Command{ + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + addr, err := env.(*node.Env).WalletAPI.WalletDefaultAddress(req.Context) + if err != nil { + return err + } + + return printOneString(re, addr.String()) + }, +} + +var setDefaultAddressCmd = &cmds.Command{ + Extra: AdminExtra, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "address to set default for"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if env.(*node.Env).WalletAPI.WalletState(req.Context) == wallet.Lock { + return errWalletLocked + } + addr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + err = env.(*node.Env).WalletAPI.WalletSetDefault(context.TODO(), addr) + if err != nil { + return err + } + + return printOneString(re, addr.String()) + }, +} + +var balanceCmd = &cmds.Command{ + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "APIAddress to get balance for"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + addr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + balance, err := env.(*node.Env).WalletAPI.WalletBalance(req.Context, addr) + if err != nil { + return err + } + + return printOneString(re, (types.FIL)(balance).String()) + }, +} + +// WalletSerializeResult is the type wallet export and import return and expect. +type WalletSerializeResult struct { + KeyInfo []*crypto.KeyInfo +} + +var walletImportCmd = &cmds.Command{ + Extra: AdminExtra, + Arguments: []cmds.Argument{ + cmds.FileArg("walletFile", true, false, "File containing wallet data to import").EnableStdin(), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if !env.(*node.Env).WalletAPI.HasPassword(req.Context) { + return errMissPassword + } + if env.(*node.Env).WalletAPI.WalletState(req.Context) == wallet.Lock { + return errWalletLocked + } + iter := req.Files.Entries() + if !iter.Next() { + return fmt.Errorf("no file given: %s", iter.Err()) + } + + fi, ok := iter.Node().(files.File) + if !ok { + return fmt.Errorf("given file was not a files.File") + } + + var key wtypes.KeyInfo + err := json.NewDecoder(hex.NewDecoder(fi)).Decode(&key) + if err != nil { + return err + } + + addr, err := env.(*node.Env).WalletAPI.WalletImport(req.Context, &key) + if err != nil { + return err + } + + return printOneString(re, addr.String()) + }, +} + +var ( + walletExportCmd = &cmds.Command{ + Extra: AdminExtra, + Arguments: []cmds.Argument{ + cmds.StringArg("addr", true, true, "address of key to export"), + cmds.StringArg("password", false, false, "Password to be locked"), + }, + PreRun: func(req *cmds.Request, env cmds.Environment) error { + // for testing, skip manual password entry + if len(req.Arguments) == 2 && len(req.Arguments[1]) != 0 { + return nil + } + pw, err := gopass.GetPasswdPrompt("Password:", true, os.Stdin, os.Stdout) + if err != nil { + return err + } + fmt.Println(req.Arguments) + req.Arguments = []string{req.Arguments[0], string(pw)} + + return nil + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if env.(*node.Env).WalletAPI.WalletState(req.Context) == wallet.Lock { + return errWalletLocked + } + if len(req.Arguments) != 2 { + return re.Emit("Two parameter is required.") + } + addr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + pw := req.Arguments[1] + ki, err := env.(*node.Env).WalletAPI.WalletExport(req.Context, addr, pw) + if err != nil { + return err + } + + kiBytes, err := json.Marshal(ki) + if err != nil { + return err + } + + return printOneString(re, hex.EncodeToString(kiBytes)) + }, + } +) + +var setWalletPassword = &cmds.Command{ + Arguments: []cmds.Argument{ + cmds.StringArg("password", false, false, "Password to be locked"), + }, + PreRun: func(req *cmds.Request, env cmds.Environment) error { + pw, err := gopass.GetPasswdPrompt("Password:", true, os.Stdin, os.Stdout) + if err != nil { + return err + } + pw2, err := gopass.GetPasswdPrompt("Enter Password again:", true, os.Stdin, os.Stdout) + if err != nil { + return err + } + if !bytes.Equal(pw, pw2) { + return errors.New("the input passwords are inconsistent") + } + + req.Arguments = []string{string(pw)} + + return nil + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 1 { + return re.Emit("A parameter is required.") + } + + pw := req.Arguments[0] + if len(pw) == 0 { + return re.Emit("Do not enter an empty string") + } + + err := env.(*node.Env).WalletAPI.SetPassword(req.Context, []byte(pw)) + if err != nil { + return err + } + + return printOneString(re, "Password set successfully \n"+ + "You must REMEMBER your password! Without the password, it's impossible to decrypt the key!") + }, +} + +var lockedCmd = &cmds.Command{ + Arguments: []cmds.Argument{ + cmds.StringArg("password", false, false, "Password to be locked"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + err := env.(*node.Env).WalletAPI.LockWallet(req.Context) + if err != nil { + return err + } + + return re.Emit("locked success") + }, +} + +var unlockedCmd = &cmds.Command{ + Arguments: []cmds.Argument{ + cmds.StringArg("password", false, false, "Password to be locked"), + }, + PreRun: func(req *cmds.Request, env cmds.Environment) error { + pw, err := gopass.GetPasswdPrompt("Password:", true, os.Stdin, os.Stdout) + if err != nil { + return err + } + req.Arguments = []string{string(pw)} + + return nil + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 1 { + return re.Emit("A parameter is required.") + } + + pw := req.Arguments[0] + + err := env.(*node.Env).WalletAPI.UnLockWallet(req.Context, []byte(pw)) + if err != nil { + return err + } + + return re.Emit("unlocked success") + }, +} diff --git a/cmd/address_integration_test.go b/cmd/address_integration_test.go new file mode 100644 index 0000000000..0e90883006 --- /dev/null +++ b/cmd/address_integration_test.go @@ -0,0 +1,143 @@ +package cmd_test + +import ( + "context" + "encoding/hex" + "encoding/json" + "os" + "strings" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/specs-actors/v2/actors/builtin" + "github.com/filecoin-project/venus/app/node/test" + "github.com/filecoin-project/venus/cmd" + "github.com/filecoin-project/venus/fixtures/fortest" + "github.com/filecoin-project/venus/pkg/crypto" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/wallet" +) + +func TestAddressNewAndList(t *testing.T) { + tf.IntegrationTest(t) + + ctx := context.Background() + builder := test.NewNodeBuilder(t) + + n, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + addrs := make([]address.Address, 10) + var err error + for i := 0; i < 10; i++ { + addrs[i], err = n.Wallet().API().WalletNewAddress(ctx, address.SECP256K1) + require.NoError(t, err) + } + + list := cmdClient.RunSuccess(ctx, "wallet", "ls").ReadStdout() + for _, addr := range addrs { + assert.Contains(t, list, addr.String()) + } +} + +func TestWalletBalance(t *testing.T) { + tf.IntegrationTest(t) + ctx := context.Background() + + builder := test.NewNodeBuilder(t) + cs := test.FixtureChainSeed(t) + builder.WithGenesisInit(cs.GenesisInitFunc) + + n, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + addr, err := n.Wallet().API().WalletNewAddress(ctx, address.SECP256K1) + require.NoError(t, err) + + t.Log("[success] not found, zero") + balance := cmdClient.RunSuccess(ctx, "wallet", "balance", addr.String()).ReadStdout() + assert.Equal(t, "0 FIL\n", balance) + + t.Log("[success] balance 1394000000000000000000000000") + balance = cmdClient.RunSuccess(ctx, "wallet", "balance", builtin.RewardActorAddr.String()).ReadStdout() + assert.Equal(t, "1394000000 FIL\n", balance) + + t.Log("[success] newly generated one") + var addrNew cmd.AddressResult + cmdClient.RunSuccessFirstLine(ctx, "wallet", "new") + balance = cmdClient.RunSuccess(ctx, "wallet", "balance", addrNew.Address.String()).ReadStdout() + assert.Equal(t, "0 FIL\n", balance) +} + +func TestWalletLoadFromFile(t *testing.T) { + tf.IntegrationTest(t) + ctx := context.Background() + + builder := test.NewNodeBuilder(t) + cs := test.FixtureChainSeed(t) + builder.WithGenesisInit(cs.GenesisInitFunc) + + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + for _, p := range fortest.KeyFilePaths() { + cmdClient.RunSuccess(ctx, "wallet", "import", p) + } + + list := cmdClient.RunSuccess(ctx, "wallet", "ls").ReadStdout() + for _, addr := range fortest.TestAddresses { + // assert we loaded the test address from the file + assert.Contains(t, list, addr.String()) + } + + // assert default amount of funds were allocated to address during genesis + balance := cmdClient.RunSuccess(ctx, "wallet", "balance", fortest.TestAddresses[0].String()).ReadStdout() + assert.Equal(t, "1000000 FIL\n", balance) +} + +func TestWalletExportImportRoundTrip(t *testing.T) { + tf.IntegrationTest(t) + + ctx := context.Background() + builder := test.NewNodeBuilder(t) + + n, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + addr, err := n.Wallet().API().WalletNewAddress(ctx, address.SECP256K1) + require.NoError(t, err) + + // ./venus wallet ls + // eg: + // Address Balance Nonce Default + // t3wzm53n4ui4zdgwenf7jflrtsejgpsus7rswlkvbffxhdpkixpzfzidbvinrpnjx7dgvs72ilsnpiu7yjhela 0 FIL 0 X + result := cmdClient.RunSuccessLines(ctx, "wallet", "ls") + require.Len(t, result, 2) // include the header `Address Balance Nonce Default` + resultAddr := strings.Split(result[1], " ")[0] + require.Equal(t, addr.String(), resultAddr) + + exportJSON := cmdClient.RunSuccess(ctx, "wallet", "export", resultAddr, string(wallet.TestPassword)).ReadStdoutTrimNewlines() + data, err := hex.DecodeString(exportJSON) + require.NoError(t, err) + var exportResult crypto.KeyInfo + err = json.Unmarshal(data, &exportResult) + require.NoError(t, err) + + wf, err := os.Create("walletFileTest") + require.NoError(t, err) + defer func() { + require.NoError(t, os.Remove("walletFileTest")) + }() + + keyInfoByte, err := json.Marshal(exportResult) + require.NoError(t, err) + _, err = wf.WriteString(hex.EncodeToString(keyInfoByte)) + require.NoError(t, err) + require.NoError(t, wf.Close()) + + importResult := cmdClient.RunSuccessFirstLine(ctx, "wallet", "import", wf.Name()) + assert.Equal(t, resultAddr, importResult) +} diff --git a/cmd/chain.go b/cmd/chain.go new file mode 100644 index 0000000000..436d80f31a --- /dev/null +++ b/cmd/chain.go @@ -0,0 +1,444 @@ +// Package commands implements the command to print the blockchain. +package cmd + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "os" + "strings" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + cmds "github.com/ipfs/go-ipfs-cmds" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/pkg/constants" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var chainCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Inspect the filecoin blockchain", + }, + Subcommands: map[string]*cmds.Command{ + "head": chainHeadCmd, + "ls": chainLsCmd, + "set-head": chainSetHeadCmd, + "getblock": chainGetBlockCmd, + "get-message": chainGetMessageCmd, + "get-messages": chainGetMessagesCmd, + "get-receipts": chainGetReceiptsCmd, + "disputer": chainDisputeSetCmd, + "export": chainExportCmd, + }, +} + +type ChainHeadResult struct { + Height abi.ChainEpoch + ParentWeight big.Int + Cids []cid.Cid + Timestamp string +} + +var chainHeadCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Get heaviest tipset info", + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + head, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + h := head.Height() + pw := head.ParentWeight() + + strTt := time.Unix(int64(head.MinTimestamp()), 0).Format("2006-01-02 15:04:05") + + return re.Emit(&ChainHeadResult{Height: h, ParentWeight: pw, Cids: head.Key().Cids(), Timestamp: strTt}) + }, + Type: &ChainHeadResult{}, +} + +type BlockResult struct { + Cid cid.Cid + Miner address.Address +} + +type ChainLsResult struct { + Height abi.ChainEpoch + Timestamp string + Blocks []BlockResult +} + +var chainLsCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "List blocks in the blockchain", + ShortDescription: `Provides a list of blocks in order from head to genesis. By default, only CIDs are returned for each block.`, + }, + Options: []cmds.Option{ + cmds.Int64Option("height", "Start height of the query").WithDefault(int64(-1)), + cmds.UintOption("count", "Number of queries").WithDefault(uint(10)), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + count, _ := req.Options["count"].(uint) + if count < 1 { + return nil + } + + var err error + + startTS, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + height, _ := req.Options["height"].(int64) + if height >= 0 && abi.ChainEpoch(height) < startTS.Height() { + startTS, err = env.(*node.Env).ChainAPI.ChainGetTipSetByHeight(req.Context, abi.ChainEpoch(height), startTS.Key()) + if err != nil { + return err + } + } + + if abi.ChainEpoch(count) > startTS.Height()+1 { + count = uint(startTS.Height() + 1) + } + tipSetKeys, err := env.(*node.Env).ChainAPI.ChainList(req.Context, startTS.Key(), int(count)) + if err != nil { + return err + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + tpInfoStr := "" + for _, key := range tipSetKeys { + tp, err := env.(*node.Env).ChainAPI.ChainGetTipSet(req.Context, key) + if err != nil { + return err + } + + strTt := time.Unix(int64(tp.MinTimestamp()), 0).Format("2006-01-02 15:04:05") + + oneTpInfoStr := fmt.Sprintf("%v: (%s) [ ", tp.Height(), strTt) + for _, blk := range tp.Blocks() { + oneTpInfoStr += fmt.Sprintf("%s: %s,", blk.Cid().String(), blk.Miner) + } + oneTpInfoStr += " ]" + + tpInfoStr += oneTpInfoStr + "\n" + } + + writer.WriteString(tpInfoStr) + + return re.Emit(buf) + }, +} + +var chainSetHeadCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Set the chain head to a specific tipset key.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("cids", true, true, "CID's of the blocks of the tipset to set the chain head to."), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + headCids, err := cidsFromSlice(req.Arguments) + if err != nil { + return err + } + maybeNewHead := types.NewTipSetKey(headCids...) + return env.(*node.Env).ChainAPI.ChainSetHead(req.Context, maybeNewHead) + }, +} + +var chainGetBlockCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Get a block and print its details.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("cid", true, true, "CID of the block to show."), + }, + Options: []cmds.Option{ + cmds.BoolOption("raw", "print just the raw block header"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + bcid, err := cid.Decode(req.Arguments[0]) + if err != nil { + return err + } + + ctx := req.Context + blk, err := env.(*node.Env).ChainAPI.ChainGetBlock(ctx, bcid) + if err != nil { + return xerrors.Errorf("get block failed: %w", err) + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + + if _, ok := req.Options["raw"].(bool); ok { + out, err := json.MarshalIndent(blk, "", " ") + if err != nil { + return err + } + + _ = writer.Write(out) + + return re.Emit(buf) + } + + msgs, err := env.(*node.Env).ChainAPI.ChainGetBlockMessages(ctx, bcid) + if err != nil { + return xerrors.Errorf("failed to get messages: %v", err) + } + + pmsgs, err := env.(*node.Env).ChainAPI.ChainGetParentMessages(ctx, bcid) + if err != nil { + return xerrors.Errorf("failed to get parent messages: %v", err) + } + + recpts, err := env.(*node.Env).ChainAPI.ChainGetParentReceipts(ctx, bcid) + if err != nil { + log.Warn(err) + } + + cblock := struct { + types.BlockHeader + BlsMessages []*types.Message + SecpkMessages []*types.SignedMessage + ParentReceipts []*types.MessageReceipt + ParentMessages []cid.Cid + }{} + + cblock.BlockHeader = *blk + cblock.BlsMessages = msgs.BlsMessages + cblock.SecpkMessages = msgs.SecpkMessages + cblock.ParentReceipts = recpts + cblock.ParentMessages = apiMsgCids(pmsgs) + + out, err := json.MarshalIndent(cblock, "", " ") + if err != nil { + return err + } + + _ = writer.Write(out) + + return re.Emit(buf) + }, +} + +var chainGetMessageCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show a filecoin message by its CID", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("cid", true, false, "CID of message to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + cid, err := cid.Decode(req.Arguments[0]) + if err != nil { + return err + } + + msg, err := env.(*node.Env).ChainAPI.ChainGetMessage(req.Context, cid) + if err != nil { + return err + } + + return re.Emit(msg) + }, + Type: types.Message{}, +} + +var chainGetMessagesCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show a filecoin message collection by block CID", + ShortDescription: "Prints info for all messages in a collection, at the given block CID.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("cid", true, false, "CID of block to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + cid, err := cid.Decode(req.Arguments[0]) + if err != nil { + return err + } + + bmsg, err := env.(*node.Env).ChainAPI.ChainGetBlockMessages(req.Context, cid) + if err != nil { + return err + } + + return re.Emit(bmsg) + }, + Type: &apitypes.BlockMessages{}, +} + +var chainGetReceiptsCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show a filecoin receipt collection by its CID", + ShortDescription: `Prints info for all receipts in a collection, +at the given CID. MessageReceipt collection CIDs are found in the "ParentMessageReceipts" +field of the filecoin block header.`, + }, + Arguments: []cmds.Argument{ + cmds.StringArg("cid", true, false, "CID of receipt collection to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + cid, err := cid.Decode(req.Arguments[0]) + if err != nil { + return err + } + + receipts, err := env.(*node.Env).ChainAPI.ChainGetReceipts(req.Context, cid) + if err != nil { + return err + } + + return re.Emit(receipts) + }, + Type: []types.MessageReceipt{}, +} + +func apiMsgCids(in []apitypes.Message) []cid.Cid { + out := make([]cid.Cid, len(in)) + for k, v := range in { + out[k] = v.Cid + } + return out +} + +var chainExportCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "export chain to a car file", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("outputPath", true, false, ""), + }, + Options: []cmds.Option{ + cmds.StringOption("tipset").WithDefault(""), + cmds.Int64Option("recent-stateroots", "specify the number of recent state roots to include in the export").WithDefault(int64(0)), + cmds.BoolOption("skip-old-msgs").WithDefault(false), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 1 { + return xerrors.New("must specify filename to export chain to") + } + + rsrs := abi.ChainEpoch(req.Options["recent-stateroots"].(int64)) + if rsrs > 0 && rsrs < constants.Finality { + return fmt.Errorf("\"recent-stateroots\" has to be greater than %d", constants.Finality) + } + + fi, err := os.Create(req.Arguments[0]) + if err != nil { + return err + } + defer func() { + err := fi.Close() + if err != nil { + fmt.Printf("error closing output file: %+v", err) + } + }() + + ts, err := LoadTipSet(req.Context, req, env.(*node.Env).ChainAPI) + if err != nil { + return err + } + + skipold := req.Options["skip-old-msgs"].(bool) + + if rsrs == 0 && skipold { + return fmt.Errorf("must pass recent stateroots along with skip-old-msgs") + } + + stream, err := env.(*node.Env).ChainAPI.ChainExport(req.Context, rsrs, skipold, ts.Key()) + if err != nil { + return err + } + + var last bool + for b := range stream { + last = len(b) == 0 + + _, err := fi.Write(b) + if err != nil { + return err + } + } + + if !last { + return xerrors.Errorf("incomplete export (remote connection lost?)") + } + + return nil + }, +} + +// LoadTipSet gets the tipset from the context, or the head from the API. +// +// It always gets the head from the API so commands use a consistent tipset even if time pases. +func LoadTipSet(ctx context.Context, req *cmds.Request, chainAPI v1api.IChain) (*types.TipSet, error) { + tss := req.Options["tipset"].(string) + if tss == "" { + return chainAPI.ChainHead(ctx) + } + + return ParseTipSetRef(ctx, chainAPI, tss) +} + +func ParseTipSetRef(ctx context.Context, chainAPI v1api.IChain, tss string) (*types.TipSet, error) { + if tss[0] == '@' { + if tss == "@head" { + return chainAPI.ChainHead(ctx) + } + + var h uint64 + if _, err := fmt.Sscanf(tss, "@%d", &h); err != nil { + return nil, xerrors.Errorf("parsing height tipset ref: %w", err) + } + + return chainAPI.ChainGetTipSetByHeight(ctx, abi.ChainEpoch(h), types.EmptyTSK) + } + + cids, err := ParseTipSetString(tss) + if err != nil { + return nil, err + } + + if len(cids) == 0 { + return nil, nil + } + + k := types.NewTipSetKey(cids...) + ts, err := chainAPI.ChainGetTipSet(ctx, k) + if err != nil { + return nil, err + } + + return ts, nil +} + +func ParseTipSetString(ts string) ([]cid.Cid, error) { + strs := strings.Split(ts, ",") + + var cids []cid.Cid + for _, s := range strs { + c, err := cid.Parse(strings.TrimSpace(s)) + if err != nil { + return nil, err + } + cids = append(cids, c) + } + + return cids, nil +} diff --git a/cmd/chain_integration_test.go b/cmd/chain_integration_test.go new file mode 100644 index 0000000000..2e2276e2e3 --- /dev/null +++ b/cmd/chain_integration_test.go @@ -0,0 +1,47 @@ +package cmd_test + +import ( + "context" + "encoding/json" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/app/node/test" + "github.com/filecoin-project/venus/cmd" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestChainHead(t *testing.T) { + tf.IntegrationTest(t) + + ctx := context.Background() + builder := test.NewNodeBuilder(t) + + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + jsonResult := cmdClient.RunSuccess(ctx, "chain", "head", "--enc", "json").ReadStdoutTrimNewlines() + var cidsFromJSON cmd.ChainHeadResult + err := json.Unmarshal([]byte(jsonResult), &cidsFromJSON) + assert.NoError(t, err) +} + +func TestChainLs(t *testing.T) { + tf.IntegrationTest(t) + ctx := context.Background() + + t.Run("chain ls returns the specified number of tipsets modified by the count", func(t *testing.T) { + seed, cfg, chainClk := test.CreateBootstrapSetup(t) + n := test.CreateBootstrapMiner(ctx, t, seed, chainClk, cfg) + + cmdClient, apiDone := test.RunNodeAPI(ctx, n, t) + defer apiDone() + + result := cmdClient.RunSuccess(ctx, "chain", "ls", "--count", "2").ReadStdoutTrimNewlines() + rows := strings.Count(result, "\n") + require.Equal(t, rows, 0) + }) +} diff --git a/cmd/commands_test.go b/cmd/commands_test.go new file mode 100644 index 0000000000..d6f7a54963 --- /dev/null +++ b/cmd/commands_test.go @@ -0,0 +1,30 @@ +package cmd_test + +import ( + "testing" + + "github.com/filecoin-project/venus/app/node/test" + "github.com/filecoin-project/venus/fixtures/fortest" + th "github.com/filecoin-project/venus/pkg/testhelpers" +) + +// create a basic new TestDaemon, with a miner and the KeyInfo it needs to sign +// tickets and blocks. This does not set a DefaultAddress in the Wallet; in this +// case, Init generates a new address in the wallet and sets it to +// the default address. +//nolint +func makeTestDaemonWithMinerAndStart(t *testing.T) *th.TestDaemon { + daemon := th.NewDaemon( + t, + th.KeyFile(fortest.KeyFilePaths()[0]), + ).Start() + return daemon +} + +func buildWithMiner(t *testing.T, builder *test.NodeBuilder) { + // bundle together common init options for node test state + cs := test.FixtureChainSeed(t) + builder.WithGenesisInit(cs.GenesisInitFunc) + //builder.WithConfig(cs.MinerConfigOpt(0)) + builder.WithInitOpt(cs.MinerInitOpt(0)) +} diff --git a/cmd/daemon.go b/cmd/daemon.go new file mode 100644 index 0000000000..6f2de707b2 --- /dev/null +++ b/cmd/daemon.go @@ -0,0 +1,465 @@ +package cmd + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "net/http" + "net/url" + "os" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/util/ulimit" + types "github.com/filecoin-project/venus/venus-shared/chain" + + paramfetch "github.com/filecoin-project/go-paramfetch" + "github.com/filecoin-project/venus/fixtures/asset" + + "golang.org/x/xerrors" + + _ "net/http/pprof" // nolint: golint + + blockstore "github.com/ipfs/go-ipfs-blockstore" + cmds "github.com/ipfs/go-ipfs-cmds" + cbor "github.com/ipfs/go-ipld-cbor" + logging "github.com/ipfs/go-log/v2" + "github.com/ipld/go-car" + "github.com/libp2p/go-libp2p-core/crypto" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/app/paths" + "github.com/filecoin-project/venus/fixtures/networks" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/genesis" + "github.com/filecoin-project/venus/pkg/journal" + "github.com/filecoin-project/venus/pkg/migration" + "github.com/filecoin-project/venus/pkg/repo" + gengen "github.com/filecoin-project/venus/tools/gengen/util" +) + +var log = logging.Logger("daemon") + +const ( + makeGenFlag = "make-genesis" + preTemplateFlag = "genesis-template" +) + +var daemonCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Initialize a venus repo, Start a long-running daemon process", + }, + Options: []cmds.Option{ + cmds.StringOption(makeGenFlag, "make genesis"), + cmds.StringOption(preTemplateFlag, "template for make genesis"), + cmds.StringOption(SwarmAddress, "multiaddress to listen on for filecoin network connections"), + cmds.StringOption(SwarmPublicRelayAddress, "public multiaddress for routing circuit relay traffic. Necessary for relay nodes to provide this if they are not publically dialable"), + cmds.BoolOption(OfflineMode, "start the node without networking"), + cmds.BoolOption(ELStdout), + cmds.BoolOption(ULimit, "manage open file limit").WithDefault(true), + cmds.StringOption(AuthServiceURL, "venus auth service URL"), + cmds.BoolOption(IsRelay, "advertise and allow venus network traffic to be relayed through this node"), + cmds.StringOption(ImportSnapshot, "import chain state from a given chain export file or url"), + cmds.StringOption(GenesisFile, "path of file or HTTP(S) URL containing archive of genesis block DAG data"), + cmds.StringOption(PeerKeyFile, "path of file containing key to use for new node's libp2p identity"), + cmds.StringOption(WalletKeyFile, "path of file containing keys to import into the wallet on initialization"), + cmds.StringOption(Network, "when set, populates config with network specific parameters, eg. 2k,cali,interop,mainnet").WithDefault("mainnet"), + cmds.StringOption(Password, "set wallet password"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if limit, _ := req.Options[ULimit].(bool); limit { + if _, _, err := ulimit.ManageFdLimit(); err != nil { + log.Errorf("setting file descriptor limit: %s", err) + } + } + + repoDir, _ := req.Options[OptionRepoDir].(string) + repoDir, err := paths.GetRepoPath(repoDir) + if err != nil { + return err + } + ps, err := asset.Asset("fixtures/_assets/proof-params/parameters.json") + if err != nil { + return err + } + srs, err := asset.Asset("fixtures/_assets/proof-params/srs-inner-product.json") + if err != nil { + return err + } + if err := paramfetch.GetParams(req.Context, ps, srs, 0); err != nil { + return xerrors.Errorf("fetching proof parameters: %w", err) + } + + exist, err := repo.Exists(repoDir) + if err != nil { + return err + } + if !exist { + defer func() { + if err != nil { + log.Infof("Failed to initialize venus, cleaning up %s after attempt...", repoDir) + if err := os.RemoveAll(repoDir); err != nil { + log.Errorf("Failed to clean up failed repo: %s", err) + } + } + }() + log.Infof("Initializing repo at '%s'", repoDir) + + if err := re.Emit(repoDir); err != nil { + return err + } + if err := repo.InitFSRepo(repoDir, repo.LatestVersion, config.NewDefaultConfig()); err != nil { + return err + } + + if err = initRun(req); err != nil { + return err + } + } + + network, _ := req.Options[Network].(string) + switch network { + case "2k": + constants.InsecurePoStValidation = true + default: + + } + + return daemonRun(req, re) + }, +} + +func initRun(req *cmds.Request) error { + rep, err := getRepo(req) + if err != nil { + return err + } + // The only error Close can return is that the repo has already been closed. + defer func() { + _ = rep.Close() + }() + var genesisFunc genesis.InitFunc + cfg := rep.Config() + network, _ := req.Options[Network].(string) + if err := setConfigFromOptions(cfg, network); err != nil { + log.Errorf("Error setting config %s", err) + return err + } + // genesis node + if mkGen, ok := req.Options[makeGenFlag].(string); ok { + preTp := req.Options[preTemplateFlag] + if preTp == nil { + return xerrors.Errorf("must also pass file with genesis template to `--%s`", preTemplateFlag) + } + + node.SetNetParams(cfg.NetworkParams) + genesisFunc = genesis.MakeGenesis(req.Context, rep, mkGen, preTp.(string), cfg.NetworkParams.ForkUpgradeParam) + } else { + genesisFileSource, _ := req.Options[GenesisFile].(string) + genesisFunc, err = loadGenesis(req.Context, rep, genesisFileSource, network) + if err != nil { + return err + } + } + if authServiceURL, ok := req.Options[AuthServiceURL].(string); ok && len(authServiceURL) > 0 { + cfg.API.VenusAuthURL = authServiceURL + } + + peerKeyFile, _ := req.Options[PeerKeyFile].(string) + walletKeyFile, _ := req.Options[WalletKeyFile].(string) + + initOpts, err := getNodeInitOpts(peerKeyFile, walletKeyFile) + if err != nil { + return err + } + + if err := rep.ReplaceConfig(cfg); err != nil { + log.Errorf("Error replacing config %s", err) + return err + } + + if err := node.Init(req.Context, rep, genesisFunc, initOpts...); err != nil { + log.Errorf("Error initializing node %s", err) + return err + } + + return nil +} + +func daemonRun(req *cmds.Request, re cmds.ResponseEmitter) error { + // third precedence is config file. + rep, err := getRepo(req) + if err != nil { + return err + } + + config := rep.Config() + + // second highest precedence is env vars. + if envAPI := os.Getenv("VENUS_API"); envAPI != "" { + config.API.APIAddress = envAPI + } + + // highest precedence is cmd line flag. + if flagAPI, ok := req.Options[OptionAPI].(string); ok && flagAPI != "" { + config.API.APIAddress = flagAPI + } + + if swarmAddress, ok := req.Options[SwarmAddress].(string); ok && swarmAddress != "" { + config.Swarm.Address = swarmAddress + } + + if publicRelayAddress, ok := req.Options[SwarmPublicRelayAddress].(string); ok && publicRelayAddress != "" { + config.Swarm.PublicRelayAddress = publicRelayAddress + } + + if authURL, ok := req.Options[AuthServiceURL].(string); ok && len(authURL) > 0 { + config.API.VenusAuthURL = authURL + } + + opts, err := node.OptionsFromRepo(rep) + if err != nil { + return err + } + + if offlineMode, ok := req.Options[OfflineMode].(bool); ok { // nolint + opts = append(opts, node.OfflineMode(offlineMode)) + } + + if isRelay, ok := req.Options[IsRelay].(bool); ok && isRelay { + opts = append(opts, node.IsRelay()) + } + importPath, _ := req.Options[ImportSnapshot].(string) + if len(importPath) != 0 { + err := Import(req.Context, rep, importPath) + if err != nil { + log.Errorf("failed to import snapshot, import path: %s, error: %s", importPath, err.Error()) + return err + } + } + + if password, _ := req.Options[Password].(string); len(password) > 0 { + opts = append(opts, node.SetWalletPassword([]byte(password))) + } + + journal, err := journal.NewZapJournal(rep.JournalPath()) // nolint + if err != nil { + return err + } + opts = append(opts, node.JournalConfigOption(journal)) + + // Monkey-patch network parameters option will set package variables during node build + opts = append(opts, node.MonkeyPatchNetworkParamsOption(config.NetworkParams)) + + // Instantiate the node. + fcn, err := node.New(req.Context, opts...) + if err != nil { + return err + } + + if fcn.OfflineMode() { + _ = re.Emit("Filecoin node running in offline mode (libp2p is disabled)\n") + } else { + _ = re.Emit(fmt.Sprintf("My peer ID is %s\n", fcn.Network().Host.ID().Pretty())) + for _, a := range fcn.Network().Host.Addrs() { + _ = re.Emit(fmt.Sprintf("Swarm listening on: %s\n", a)) + } + } + + if _, ok := req.Options[ELStdout].(bool); ok { + _ = re.Emit("--" + ELStdout + " option is deprecated\n") + } + + // Start the node. + if err := fcn.Start(req.Context); err != nil { + return err + } + + // Run API server around the node. + ready := make(chan interface{}, 1) + go func() { + <-ready + lines := []string{ + fmt.Sprintf("API server listening on %s\n", config.API.APIAddress), + } + _ = re.Emit(lines) + }() + + // The request is expected to remain open so the daemon uses the request context. + // Pass a new context here if the flow changes such that the command should exit while leaving + // a forked deamon running. + return fcn.RunRPCAndWait(req.Context, RootCmdDaemon, ready) +} + +func getRepo(req *cmds.Request) (repo.Repo, error) { + repoDir, _ := req.Options[OptionRepoDir].(string) + repoDir, err := paths.GetRepoPath(repoDir) + if err != nil { + return nil, err + } + if err = migration.TryToMigrate(repoDir); err != nil { + return nil, err + } + return repo.OpenFSRepo(repoDir, repo.LatestVersion) +} + +func setConfigFromOptions(cfg *config.Config, network string) error { + // Setup specific config options. + var netcfg *networks.NetworkConf + switch network { + case "mainnet": + netcfg = networks.Mainnet() + case "force": + netcfg = networks.ForceNet() + case "integrationnet": + netcfg = networks.IntegrationNet() + case "2k": + netcfg = networks.Net2k() + case "cali": + netcfg = networks.Calibration() + case "interop": + netcfg = networks.InteropNet() + default: + return fmt.Errorf("unknown network name %s", network) + } + + if netcfg != nil { + cfg.Bootstrap = &netcfg.Bootstrap + cfg.NetworkParams = &netcfg.Network + } + + return nil +} + +func loadGenesis(ctx context.Context, rep repo.Repo, sourceName string, network string) (genesis.InitFunc, error) { + var ( + source io.ReadCloser + err error + ) + + if sourceName == "" { + var bs []byte + var err error + switch network { + case "nerpa": + bs, err = asset.Asset("fixtures/_assets/car/nerpanet.car") + case "cali": + bs, err = asset.Asset("fixtures/_assets/car/calibnet.car") + case "interop": + bs, err = asset.Asset("fixtures/_assets/car/interopnet.car") + case "force": + bs, err = asset.Asset("fixtures/_assets/car/forcenet.car") + default: + bs, err = asset.Asset("fixtures/_assets/car/devnet.car") + } + if err != nil { + return gengen.MakeGenesisFunc(), nil + } + source = ioutil.NopCloser(bytes.NewReader(bs)) + // return gengen.MakeGenesisFunc(), nil + } else { + source, err = openGenesisSource(sourceName) + if err != nil { + return nil, err + } + } + + defer func() { _ = source.Close() }() + + genesisBlk, err := extractGenesisBlock(ctx, source, rep) + if err != nil { + return nil, err + } + + gif := func(cst cbor.IpldStore, bs blockstore.Blockstore) (*types.BlockHeader, error) { + return genesisBlk, err + } + + return gif, nil + +} + +func getNodeInitOpts(peerKeyFile string, walletKeyFile string) ([]node.InitOpt, error) { + var initOpts []node.InitOpt + if peerKeyFile != "" { + data, err := ioutil.ReadFile(peerKeyFile) + if err != nil { + return nil, err + } + peerKey, err := crypto.UnmarshalPrivateKey(data) + if err != nil { + return nil, err + } + initOpts = append(initOpts, node.PeerKeyOpt(peerKey)) + } + + if walletKeyFile != "" { + f, err := os.Open(walletKeyFile) + if err != nil { + return nil, err + } + + var wir *WalletSerializeResult + if err := json.NewDecoder(f).Decode(&wir); err != nil { + return nil, err + } + + if len(wir.KeyInfo) > 0 { + initOpts = append(initOpts, node.DefaultKeyOpt(wir.KeyInfo[0])) + } + + for _, k := range wir.KeyInfo[1:] { + initOpts = append(initOpts, node.ImportKeyOpt(k)) + } + } + + return initOpts, nil +} + +func openGenesisSource(sourceName string) (io.ReadCloser, error) { + sourceURL, err := url.Parse(sourceName) + if err != nil { + return nil, fmt.Errorf("invalid filepath or URL for genesis file: %s", sourceURL) + } + var source io.ReadCloser + if sourceURL.Scheme == "http" || sourceURL.Scheme == "https" { + // NOTE: This code is temporary. It allows downloading a genesis block via HTTP(S) to be able to join a + // recently deployed staging devnet. + response, err := http.Get(sourceName) + if err != nil { + return nil, err + } + source = response.Body + } else if sourceURL.Scheme != "" { + return nil, fmt.Errorf("unsupported protocol for genesis file: %s", sourceURL.Scheme) + } else { + file, err := os.Open(sourceName) + if err != nil { + return nil, err + } + source = file + } + return source, nil +} + +func extractGenesisBlock(ctx context.Context, source io.ReadCloser, rep repo.Repo) (*types.BlockHeader, error) { + bs := rep.Datastore() + ch, err := car.LoadCar(ctx, bs, source) + if err != nil { + return nil, err + } + + // need to check if we are being handed a car file with a single genesis block or an entire chain. + bsBlk, err := bs.Get(ctx, ch.Roots[0]) + if err != nil { + return nil, err + } + cur, err := types.DecodeBlock(bsBlk.RawData()) + if err != nil { + return nil, err + } + + return cur, nil +} diff --git a/cmd/daemon_daemon_test.go b/cmd/daemon_daemon_test.go new file mode 100644 index 0000000000..6e7eb03591 --- /dev/null +++ b/cmd/daemon_daemon_test.go @@ -0,0 +1,167 @@ +package cmd_test + +import ( + "context" + "fmt" + "net/http" + "os" + "os/exec" + "path/filepath" + "strconv" + "testing" + + manet "github.com/multiformats/go-multiaddr/net" + + "github.com/filecoin-project/venus/build/project" + th "github.com/filecoin-project/venus/pkg/testhelpers" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestDownloadGenesis(t *testing.T) { + tf.IntegrationTest(t) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + port, err := th.GetFreePort() + require.NoError(t, err) + + err = exec.CommandContext( + ctx, + project.Root("tools/genesis-file-server/genesis-file-server"), + "--genesis-file-path", + project.Root("fixtures/test/genesis.car"), + "--port", + strconv.Itoa(port), + ).Start() + require.NoError(t, err) + td := th.NewDaemon(t, th.GenesisFile(fmt.Sprintf("http://127.0.0.1:%d/genesis.car", port))).Start() + + td.ShutdownSuccess() +} + +func TestDaemonStartupMessage(t *testing.T) { + tf.IntegrationTest(t) + + daemon := th.NewDaemon(t).Start() + daemon.ShutdownSuccess() + + out := daemon.ReadStdout() + assert.Regexp(t, "\"My peer ID is [a-zA-Z0-9]*", out) + assert.Regexp(t, "\\n\"Swarm listening on.*", out) +} + +func TestDaemonApiFile(t *testing.T) { + tf.IntegrationTest(t) + + daemon := th.NewDaemon(t).Start() + + apiPath := filepath.Join(daemon.RepoDir(), "api") + assert.FileExists(t, apiPath) + + daemon.ShutdownEasy() + + _, err := os.Lstat(apiPath) + assert.Error(t, err, "Expect api file to be deleted on shutdown") + assert.True(t, os.IsNotExist(err)) +} + +func TestDaemonCORS(t *testing.T) { + tf.IntegrationTest(t) + + t.Run("default allowed origins work", func(t *testing.T) { + td := th.NewDaemon(t).Start() + defer td.ShutdownSuccess() + + maddr, err := td.CmdAddr() + assert.NoError(t, err) + + _, host, err := manet.DialArgs(maddr) //nolint + assert.NoError(t, err) + + url := fmt.Sprintf("http://%s/api/swarm/id", host) + + token, err := td.CmdToken() + assert.NoError(t, err) + + req, err := http.NewRequest("POST", url, nil) + assert.NoError(t, err) + req.Header.Set("Authorization", "Bearer "+token) + req.Header.Add("Origin", "http://localhost:8080") + res, err := http.DefaultClient.Do(req) + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) + + req, err = http.NewRequest("POST", url, nil) + assert.NoError(t, err) + req.Header.Set("Authorization", "Bearer "+token) + req.Header.Add("Origin", "https://localhost:8080") + res, err = http.DefaultClient.Do(req) + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) + + req, err = http.NewRequest("POST", url, nil) + assert.NoError(t, err) + req.Header.Set("Authorization", "Bearer "+token) + req.Header.Add("Origin", "http://127.0.0.1:8080") + res, err = http.DefaultClient.Do(req) + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) + + req, err = http.NewRequest("POST", url, nil) + assert.NoError(t, err) + req.Header.Set("Authorization", "Bearer "+token) + req.Header.Add("Origin", "https://127.0.0.1:8080") + res, err = http.DefaultClient.Do(req) + assert.NoError(t, err) + assert.Equal(t, http.StatusOK, res.StatusCode) + }) + + t.Run("non-configured origin fails", func(t *testing.T) { + td := th.NewDaemon(t).Start() + defer td.ShutdownSuccess() + + maddr, err := td.CmdAddr() + assert.NoError(t, err) + + _, host, err := manet.DialArgs(maddr) //nolint + assert.NoError(t, err) + token, err := td.CmdToken() + assert.NoError(t, err) + + url := fmt.Sprintf("http://%s/api/swarm/id", host) + req, err := http.NewRequest("POST", url, nil) + assert.NoError(t, err) + req.Header.Set("Authorization", "Bearer "+token) + req.Header.Add("Origin", "http://disallowed.origin") + res, err := http.DefaultClient.Do(req) + assert.NoError(t, err) + assert.Equal(t, http.StatusForbidden, res.StatusCode) + }) +} + +func TestDaemonOverHttp(t *testing.T) { + tf.IntegrationTest(t) + + td := th.NewDaemon(t).Start() + defer td.ShutdownSuccess() + + maddr, err := td.CmdAddr() + require.NoError(t, err) + + _, host, err := manet.DialArgs(maddr) //nolint + require.NoError(t, err) + token, err := td.CmdToken() + assert.NoError(t, err) + + url := fmt.Sprintf("http://%s/api/daemon", host) + req, err := http.NewRequest("POST", url, nil) + require.NoError(t, err) + req.Header.Set("Authorization", "Bearer "+token) + res, err := http.DefaultClient.Do(req) + require.NoError(t, err) + require.Equal(t, http.StatusNotFound, res.StatusCode) +} diff --git a/cmd/dispute.go b/cmd/dispute.go new file mode 100644 index 0000000000..e5df4f273f --- /dev/null +++ b/cmd/dispute.go @@ -0,0 +1,432 @@ +package cmd + +import ( + "bytes" + "context" + "fmt" + "strconv" + "time" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + cmds "github.com/ipfs/go-ipfs-cmds" + "golang.org/x/xerrors" + + logging "github.com/ipfs/go-log/v2" + + "github.com/filecoin-project/venus/app/node" + chainpkg "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/venus-shared/actors" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var disputeLog = logging.Logger("disputer") + +const Confidence = 10 + +type minerDeadline struct { + miner address.Address + index uint64 +} + +var chainDisputeSetCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "interact with the window post disputer", + ShortDescription: `interact with the window post disputer`, + }, + Options: []cmds.Option{ + cmds.StringOption("max-fee", "Spend up to X FIL per DisputeWindowedPoSt message"), + cmds.StringOption("from", "optionally specify the account to send messages from"), + }, + Subcommands: map[string]*cmds.Command{ + "start": disputerStartCmd, + "dispute": disputerMsgCmd, + }, +} + +var disputerMsgCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Send a specific DisputeWindowedPoSt message", + ShortDescription: `[minerAddress index postIndex]`, + }, + Arguments: []cmds.Argument{ + cmds.StringArg("minerAddress", true, false, "address for miner"), + cmds.StringArg("index", true, false, ""), + cmds.StringArg("postIndex", true, false, ""), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 3 { + return xerrors.New("Usage: dispute [minerAddress index postIndex]") + } + + toa, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return fmt.Errorf("given 'miner' address %q was invalid: %w", req.Arguments[0], err) + } + + deadline, err := strconv.ParseUint(req.Arguments[1], 10, 64) + if err != nil { + return err + } + + postIndex, err := strconv.ParseUint(req.Arguments[2], 10, 64) + if err != nil { + return err + } + + fromStr := req.Options["from"].(string) + fromAddr, err := getSender(req.Context, env.(*node.Env).WalletAPI, fromStr) + if err != nil { + return err + } + + dpp, aerr := actors.SerializeParams(&miner3.DisputeWindowedPoStParams{ + Deadline: deadline, + PoStIndex: postIndex, + }) + + if aerr != nil { + return xerrors.Errorf("failed to serailize params: %w", aerr) + } + + dmsg := &types.Message{ + To: toa, + From: fromAddr, + Value: big.Zero(), + Method: builtin3.MethodsMiner.DisputeWindowedPoSt, + Params: dpp, + } + + rslt, err := env.(*node.Env).SyncerAPI.StateCall(req.Context, dmsg, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("failed to simulate dispute: %w", err) + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + if rslt.MsgRct.ExitCode == 0 { + mss, err := getMaxFee(req.Options["max-fee"].(string)) + if err != nil { + return err + } + + sm, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(req.Context, dmsg, mss) + if err != nil { + return err + } + + _ = writer.WriteString(fmt.Sprintf("dispute message %v", sm.Cid())) + + } else { + _ = writer.WriteString("dispute is unsuccessful") + } + + return re.Emit(buf) + }, +} + +var disputerStartCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Start the window post disputer", + ShortDescription: `[minerAddress]`, + }, + Arguments: []cmds.Argument{ + cmds.StringArg("minerAddress", true, false, "address for miner"), + }, + Options: []cmds.Option{ + cmds.Uint64Option("start-epoch", "only start disputing PoSts after this epoch").WithDefault(uint64(0)), + cmds.Uint64Option("height", ""), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + ctx := req.Context + + fromStr := req.Options["from"].(string) + fromAddr, err := getSender(ctx, env.(*node.Env).WalletAPI, fromStr) + if err != nil { + return err + } + + mss, err := getMaxFee(req.Options["max-fee"].(string)) + if err != nil { + return err + } + + startEpoch := abi.ChainEpoch(0) + height := req.Options["height"].(uint64) + if height > 0 { + startEpoch = abi.ChainEpoch(height) + } + + disputeLog.Info("setting up window post disputer") + + // subscribe to head changes and validate the current value + + headChanges, err := env.(*node.Env).ChainAPI.ChainNotify(ctx) + if err != nil { + return err + } + head, ok := <-headChanges + if !ok { + return xerrors.Errorf("Notify stream was invalid") + } + + if len(head) != 1 { + return xerrors.Errorf("Notify first entry should have been one item") + } + + if head[0].Type != chainpkg.HCCurrent { + return xerrors.Errorf("expected current head on Notify stream (got %s)", head[0].Type) + } + + lastEpoch := head[0].Val.Height() + lastStatusCheckEpoch := lastEpoch + + // build initial deadlineMap + + minerList, err := env.(*node.Env).ChainAPI.StateListMiners(ctx, types.EmptyTSK) + if err != nil { + return err + } + + knownMiners := make(map[address.Address]struct{}) + deadlineMap := make(map[abi.ChainEpoch][]minerDeadline) + for _, miner := range minerList { + dClose, dl, err := makeMinerDeadline(ctx, env.(*node.Env).ChainAPI, miner) + if err != nil { + return xerrors.Errorf("making deadline: %w", err) + } + + deadlineMap[dClose+Confidence] = append(deadlineMap[dClose+Confidence], *dl) + + knownMiners[miner] = struct{}{} + } + + // when this fires, check for newly created miners, and purge any "missed" epochs from deadlineMap + statusCheckTicker := time.NewTicker(time.Hour) + defer statusCheckTicker.Stop() + + disputeLog.Info("starting up window post disputer") + + applyTsk := func(tsk types.TipSetKey) error { + disputeLog.Infow("last checked epoch", "epoch", lastEpoch) + dls, ok := deadlineMap[lastEpoch] + delete(deadlineMap, lastEpoch) + if !ok || startEpoch >= lastEpoch { + // no deadlines closed at this epoch - Confidence, or we haven't reached the start cutoff yet + return nil + } + + dpmsgs := make([]*types.Message, 0) + + startTime := time.Now() + proofsChecked := uint64(0) + + // TODO: Parallelizeable + for _, dl := range dls { + fullDeadlines, err := env.(*node.Env).ChainAPI.StateMinerDeadlines(ctx, dl.miner, tsk) + if err != nil { + return xerrors.Errorf("failed to load deadlines: %w", err) + } + + if int(dl.index) >= len(fullDeadlines) { + return xerrors.Errorf("deadline index %d not found in deadlines", dl.index) + } + + disputableProofs := fullDeadlines[dl.index].DisputableProofCount + proofsChecked += disputableProofs + + ms, err := makeDisputeWindowedPosts(ctx, env.(*node.Env).SyncerAPI, dl, disputableProofs, fromAddr) + if err != nil { + return xerrors.Errorf("failed to check for disputes: %w", err) + } + + dpmsgs = append(dpmsgs, ms...) + + dClose, dl, err := makeMinerDeadline(ctx, env.(*node.Env).ChainAPI, dl.miner) + if err != nil { + return xerrors.Errorf("making deadline: %w", err) + } + + deadlineMap[dClose+Confidence] = append(deadlineMap[dClose+Confidence], *dl) + } + + disputeLog.Infow("checked proofs", "count", proofsChecked, "duration", time.Since(startTime)) + + // TODO: Parallelizeable / can be integrated into the previous deadline-iterating for loop + for _, dpmsg := range dpmsgs { + disputeLog.Infow("disputing a PoSt", "miner", dpmsg.To) + m, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, dpmsg, mss) + if err != nil { + disputeLog.Errorw("failed to dispute post message", "err", err.Error(), "miner", dpmsg.To) + } else { + disputeLog.Infow("submited dispute", "mcid", m.Cid(), "miner", dpmsg.To) + } + } + + return nil + } + + disputeLoop := func() error { + select { + case notif, ok := <-headChanges: + if !ok { + return xerrors.Errorf("head change channel errored") + } + + for _, val := range notif { + switch val.Type { + case chainpkg.HCApply: + for ; lastEpoch <= val.Val.Height(); lastEpoch++ { + err := applyTsk(val.Val.Key()) + if err != nil { + return err + } + } + case chainpkg.HCRevert: + // do nothing + default: + return xerrors.Errorf("unexpected head change type %s", val.Type) + } + } + case <-statusCheckTicker.C: + disputeLog.Infof("running status check") + + minerList, err = env.(*node.Env).ChainAPI.StateListMiners(ctx, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("getting miner list: %w", err) + } + + for _, m := range minerList { + _, ok := knownMiners[m] + if !ok { + dClose, dl, err := makeMinerDeadline(ctx, env.(*node.Env).ChainAPI, m) + if err != nil { + return xerrors.Errorf("making deadline: %w", err) + } + + deadlineMap[dClose+Confidence] = append(deadlineMap[dClose+Confidence], *dl) + + knownMiners[m] = struct{}{} + } + } + + for ; lastStatusCheckEpoch < lastEpoch; lastStatusCheckEpoch++ { + // if an epoch got "skipped" from the deadlineMap somehow, just fry it now instead of letting it sit around forever + _, ok := deadlineMap[lastStatusCheckEpoch] + if ok { + disputeLog.Infow("epoch skipped during execution, deleting it from deadlineMap", "epoch", lastStatusCheckEpoch) + delete(deadlineMap, lastStatusCheckEpoch) + } + } + + log.Infof("status check complete") + case <-ctx.Done(): + return ctx.Err() + } + + return nil + } + + for { + err := disputeLoop() + if err == context.Canceled { + disputeLog.Info("disputer shutting down") + break + } + if err != nil { + disputeLog.Errorw("disputer shutting down", "err", err) + return err + } + } + + return nil + }, +} + +// for a given miner, index, and maxPostIndex, tries to dispute posts from 0...postsSnapshotted-1 +// returns a list of DisputeWindowedPoSt msgs that are expected to succeed if sent +func makeDisputeWindowedPosts(ctx context.Context, api v1api.ISyncer, dl minerDeadline, postsSnapshotted uint64, sender address.Address) ([]*types.Message, error) { + disputes := make([]*types.Message, 0) + + for i := uint64(0); i < postsSnapshotted; i++ { + + dpp, aerr := actors.SerializeParams(&miner3.DisputeWindowedPoStParams{ + Deadline: dl.index, + PoStIndex: i, + }) + + if aerr != nil { + return nil, xerrors.Errorf("failed to serailize params: %w", aerr) + } + + dispute := &types.Message{ + To: dl.miner, + From: sender, + Value: big.Zero(), + Method: builtin3.MethodsMiner.DisputeWindowedPoSt, + Params: dpp, + } + + rslt, err := api.StateCall(ctx, dispute, types.EmptyTSK) + if err == nil && rslt.MsgRct.ExitCode == 0 { + disputes = append(disputes, dispute) + } + + } + + return disputes, nil +} + +func makeMinerDeadline(ctx context.Context, api v1api.IChain, mAddr address.Address) (abi.ChainEpoch, *minerDeadline, error) { + dl, err := api.StateMinerProvingDeadline(ctx, mAddr, types.EmptyTSK) + if err != nil { + return -1, nil, xerrors.Errorf("getting proving index list: %w", err) + } + + return dl.Close, &minerDeadline{ + miner: mAddr, + index: dl.Index, + }, nil +} + +func getSender(ctx context.Context, api v1api.IWallet, fromStr string) (address.Address, error) { + if fromStr == "" { + return api.WalletDefaultAddress(ctx) + } + + addr, err := address.NewFromString(fromStr) + if err != nil { + return address.Undef, err + } + + has, err := api.WalletHas(ctx, addr) + if err != nil { + return address.Undef, err + } + + if !has { + return address.Undef, xerrors.Errorf("wallet doesn't contain: %s ", addr) + } + + return addr, nil +} + +func getMaxFee(maxStr string) (*apitypes.MessageSendSpec, error) { + if maxStr != "" { + maxFee, err := types.ParseFIL(maxStr) + if err != nil { + return nil, xerrors.Errorf("parsing max-fee: %w", err) + } + return &apitypes.MessageSendSpec{ + MaxFee: types.BigInt(maxFee), + }, nil + } + + return nil, nil +} diff --git a/cmd/drand.go b/cmd/drand.go new file mode 100644 index 0000000000..70d0cb1fee --- /dev/null +++ b/cmd/drand.go @@ -0,0 +1,38 @@ +package cmd + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/app/node" + cmds "github.com/ipfs/go-ipfs-cmds" +) + +var drandCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Explore access and configure drand.", + ShortDescription: ``, + }, + + Subcommands: map[string]*cmds.Command{ + "random": drandRandom, + }, +} + +var drandRandom = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Retrieve randomness round from drand group", + }, + Options: []cmds.Option{ + cmds.Uint64Option("round", "retrieve randomness at given round (default 0)"), + cmds.Uint64Option("round", "retrieve randomness at height round (default 0)"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + round, _ := req.Options["round"].(uint64) + height, _ := req.Options["height"].(uint64) + + entry, err := env.(*node.Env).ChainAPI.GetEntry(req.Context, abi.ChainEpoch(height), round) + if err != nil { + return err + } + return re.Emit(entry) + }, +} diff --git a/cmd/go-filecoin/errors.go b/cmd/errors.go similarity index 98% rename from cmd/go-filecoin/errors.go rename to cmd/errors.go index c93c697666..ca3c1e6427 100644 --- a/cmd/go-filecoin/errors.go +++ b/cmd/errors.go @@ -1,4 +1,4 @@ -package commands +package cmd import ( "fmt" diff --git a/cmd/fetch.go b/cmd/fetch.go new file mode 100644 index 0000000000..499ecd1241 --- /dev/null +++ b/cmd/fetch.go @@ -0,0 +1,39 @@ +package cmd + +import ( + cmds "github.com/ipfs/go-ipfs-cmds" + "github.com/pkg/errors" + + paramfetch "github.com/filecoin-project/go-paramfetch" + + "github.com/filecoin-project/venus/fixtures/asset" +) + +var fetchCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "fetch paramsters", + }, + Options: []cmds.Option{ + cmds.Uint64Option(Size, "size to fetch"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + // highest precedence is cmd line flag. + if size, ok := req.Options[Size].(uint64); ok { + ps, err := asset.Asset("fixtures/_assets/proof-params/parameters.json") + if err != nil { + return err + } + + srs, err := asset.Asset("fixtures/_assets/proof-params/srs-inner-product.json") + if err != nil { + return err + } + + if err := paramfetch.GetParams(req.Context, ps, srs, size); err != nil { + return errors.Wrapf(err, "fetching proof parameters: %v", err) + } + return nil + } + return errors.New("uncorrect parameters") + }, +} diff --git a/cmd/go-filecoin/actor.go b/cmd/go-filecoin/actor.go deleted file mode 100644 index b7c6a4ff7d..0000000000 --- a/cmd/go-filecoin/actor.go +++ /dev/null @@ -1,78 +0,0 @@ -package commands - -import ( - "encoding/json" - "io" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-cid" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" -) - -// ActorView represents a generic way to represent details about any actor to the user. -type ActorView struct { - Address string `json:"address"` - Code cid.Cid `json:"code,omitempty"` - Nonce uint64 `json:"nonce"` - Balance types.AttoFIL `json:"balance"` - Head cid.Cid `json:"head,omitempty"` -} - -var actorCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Interact with actors. Actors are built-in smart contracts.", - }, - Subcommands: map[string]*cmds.Command{ - "ls": actorLsCmd, - }, -} - -var actorLsCmd = &cmds.Command{ - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - results, err := GetPorcelainAPI(env).ActorLs(req.Context) - if err != nil { - return err - } - - for result := range results { - if result.Error != nil { - return result.Error - } - - output := makeActorView(result.Actor, result.Key) - if err := re.Emit(output); err != nil { - return err - } - } - return nil - }, - Type: &ActorView{}, - Encoders: cmds.EncoderMap{ - cmds.JSON: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, a *ActorView) error { - marshaled, err := json.Marshal(a) - if err != nil { - return err - } - _, err = w.Write(marshaled) - if err != nil { - return err - } - _, err = w.Write([]byte("\n")) - return err - }), - }, -} - -func makeActorView(act *actor.Actor, addr address.Address) *ActorView { - return &ActorView{ - Address: addr.String(), - Code: act.Code.Cid, - Nonce: act.CallSeqNum, - Balance: act.Balance, - Head: act.Head.Cid, - } -} diff --git a/cmd/go-filecoin/actor_integration_test.go b/cmd/go-filecoin/actor_integration_test.go deleted file mode 100644 index 8b807ff97b..0000000000 --- a/cmd/go-filecoin/actor_integration_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package commands_test - -import ( - "bytes" - "context" - "encoding/json" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestActorDaemon(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - t.Run("actor ls --enc json returns NDJSON containing all actors in the state tree", func(t *testing.T) { - builder := test.NewNodeBuilder(t) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - op1 := cmdClient.RunSuccess(ctx, "actor", "ls", "--enc", "json") - result1 := op1.ReadStdoutTrimNewlines() - - var avs []commands.ActorView - for _, line := range bytes.Split([]byte(result1), []byte{'\n'}) { - // unmarshall JSON to actor view an add to slice - var av commands.ActorView - err := json.Unmarshal(line, &av) - require.NoError(t, err) - avs = append(avs, av) - } - - assert.NotZero(t, len(avs)) - }) -} diff --git a/cmd/go-filecoin/address.go b/cmd/go-filecoin/address.go deleted file mode 100644 index b0534a7841..0000000000 --- a/cmd/go-filecoin/address.go +++ /dev/null @@ -1,186 +0,0 @@ -package commands - -import ( - "encoding/json" - "fmt" - - "github.com/filecoin-project/go-address" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - files "github.com/ipfs/go-ipfs-files" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -var walletCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Manage your filecoin wallets", - }, - Subcommands: map[string]*cmds.Command{ - "balance": balanceCmd, - "import": walletImportCmd, - "export": walletExportCmd, - }, -} - -var addrsCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Interact with addresses", - }, - Subcommands: map[string]*cmds.Command{ - "ls": addrsLsCmd, - "new": addrsNewCmd, - "default": defaultAddressCmd, - }, -} - -type AddressResult struct { - Address address.Address -} - -// AddressLsResult is the result of running the address list command. -type AddressLsResult struct { - Addresses []address.Address -} - -var addrsNewCmd = &cmds.Command{ - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - protocolName := req.Options["type"].(string) - var protocol address.Protocol - switch protocolName { - case "secp256k1": - protocol = address.SECP256K1 - case "bls": - protocol = address.BLS - default: - return fmt.Errorf("unrecognized address protocol %s", protocolName) - } - addr, err := GetPorcelainAPI(env).WalletNewAddress(protocol) - if err != nil { - return err - } - return re.Emit(&AddressResult{addr}) - }, - Options: []cmdkit.Option{ - cmdkit.StringOption("type", "The type of address to create: bls or secp256k1 (default)").WithDefault("secp256k1"), - }, - Type: &AddressResult{}, -} - -var addrsLsCmd = &cmds.Command{ - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - addrs := GetPorcelainAPI(env).WalletAddresses() - - var alr AddressLsResult - for _, addr := range addrs { - alr.Addresses = append(alr.Addresses, addr) - } - - return re.Emit(&alr) - }, - Type: &AddressLsResult{}, -} - -var defaultAddressCmd = &cmds.Command{ - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - addr, err := GetPorcelainAPI(env).WalletDefaultAddress() - if err != nil { - return err - } - - return re.Emit(&AddressResult{addr}) - }, - Type: &AddressResult{}, -} - -var balanceCmd = &cmds.Command{ - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("address", true, false, "Address to get balance for"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - addr, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - balance, err := GetPorcelainAPI(env).WalletBalance(req.Context, addr) - if err != nil { - return err - } - return re.Emit(balance) - }, - Type: &types.AttoFIL{}, -} - -// WalletSerializeResult is the type wallet export and import return and expect. -type WalletSerializeResult struct { - KeyInfo []*crypto.KeyInfo -} - -var walletImportCmd = &cmds.Command{ - Arguments: []cmdkit.Argument{ - cmdkit.FileArg("walletFile", true, false, "File containing wallet data to import").EnableStdin(), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - iter := req.Files.Entries() - if !iter.Next() { - return fmt.Errorf("no file given: %s", iter.Err()) - } - - fi, ok := iter.Node().(files.File) - if !ok { - return fmt.Errorf("given file was not a files.File") - } - - var wir *WalletSerializeResult - if err := json.NewDecoder(fi).Decode(&wir); err != nil { - return err - } - keyInfos := wir.KeyInfo - - if len(keyInfos) == 0 { - return fmt.Errorf("no keys in wallet file") - } - - addrs, err := GetPorcelainAPI(env).WalletImport(keyInfos...) - if err != nil { - return err - } - - var alr AddressLsResult - for _, addr := range addrs { - alr.Addresses = append(alr.Addresses, addr) - } - - return re.Emit(&alr) - }, - Type: &AddressLsResult{}, -} - -var walletExportCmd = &cmds.Command{ - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("addresses", true, true, "Addresses of keys to export").EnableStdin(), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - addrs := make([]address.Address, len(req.Arguments)) - for i, arg := range req.Arguments { - addr, err := address.NewFromString(arg) - if err != nil { - return err - } - addrs[i] = addr - } - - kis, err := GetPorcelainAPI(env).WalletExport(addrs) - if err != nil { - return err - } - - var klr WalletSerializeResult - klr.KeyInfo = append(klr.KeyInfo, kis...) - - return re.Emit(klr) - }, - Type: &WalletSerializeResult{}, -} diff --git a/cmd/go-filecoin/address_integration_test.go b/cmd/go-filecoin/address_integration_test.go deleted file mode 100644 index 88702f4461..0000000000 --- a/cmd/go-filecoin/address_integration_test.go +++ /dev/null @@ -1,134 +0,0 @@ -package commands_test - -import ( - "context" - "encoding/json" - "os" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/fixtures/fortest" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestAddressNewAndList(t *testing.T) { - tf.IntegrationTest(t) - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - addrs := make([]address.Address, 10) - var err error - for i := 0; i < 10; i++ { - addrs[i], err = n.PorcelainAPI.WalletNewAddress(address.SECP256K1) - require.NoError(t, err) - } - - list := cmdClient.RunSuccess(ctx, "address", "ls").ReadStdout() - for _, addr := range addrs { - assert.Contains(t, list, addr.String()) - } -} - -func TestWalletBalance(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - - builder := test.NewNodeBuilder(t) - cs := node.FixtureChainSeed(t) - builder.WithGenesisInit(cs.GenesisInitFunc) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - addr, err := n.PorcelainAPI.WalletNewAddress(address.SECP256K1) - require.NoError(t, err) - - t.Log("[success] not found, zero") - var balance abi.TokenAmount - cmdClient.RunMarshaledJSON(ctx, &balance, "wallet", "balance", addr.String()) - assert.Equal(t, "0", balance.String()) - - t.Log("[success] balance 1394000000000000000000000000") - cmdClient.RunMarshaledJSON(ctx, &balance, "wallet", "balance", builtin.RewardActorAddr.String()) - assert.Equal(t, "1394000000000000000000000000", balance.String()) - - t.Log("[success] newly generated one") - var addrNew commands.AddressResult - cmdClient.RunMarshaledJSON(ctx, &addrNew, "address", "new") - cmdClient.RunMarshaledJSON(ctx, &balance, "wallet", "balance", addrNew.Address.String()) - assert.Equal(t, "0", balance.String()) -} - -func TestWalletLoadFromFile(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - - builder := test.NewNodeBuilder(t) - cs := node.FixtureChainSeed(t) - builder.WithGenesisInit(cs.GenesisInitFunc) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - for _, p := range fortest.KeyFilePaths() { - cmdClient.RunSuccess(ctx, "wallet", "import", p) - } - - var addrs commands.AddressLsResult - cmdClient.RunMarshaledJSON(ctx, &addrs, "address", "ls") - - for _, addr := range fortest.TestAddresses { - // assert we loaded the test address from the file - assert.Contains(t, addrs.Addresses, addr) - } - - // assert default amount of funds were allocated to address during genesis - var balance abi.TokenAmount - cmdClient.RunMarshaledJSON(ctx, &balance, "wallet", "balance", fortest.TestAddresses[0].String()) - assert.Equal(t, "1000000000000000000000000", balance.String()) -} - -func TestWalletExportImportRoundTrip(t *testing.T) { - tf.IntegrationTest(t) - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - var lsResult commands.AddressLsResult - cmdClient.RunMarshaledJSON(ctx, &lsResult, "address", "ls") - require.Len(t, lsResult.Addresses, 1) - - exportJSON := cmdClient.RunSuccess(ctx, "wallet", "export", lsResult.Addresses[0].String()).ReadStdout() - var exportResult commands.WalletSerializeResult - err := json.Unmarshal([]byte(exportJSON), &exportResult) - require.NoError(t, err) - - wf, err := os.Create("walletFileTest") - require.NoError(t, err) - defer func() { - require.NoError(t, os.Remove("walletFileTest")) - }() - - _, err = wf.WriteString(exportJSON) - require.NoError(t, err) - require.NoError(t, wf.Close()) - - var importResult commands.AddressLsResult - cmdClient.RunMarshaledJSON(ctx, &importResult, "wallet", "import", wf.Name()) - assert.Len(t, importResult.Addresses, 1) - assert.Equal(t, lsResult.Addresses[0], importResult.Addresses[0]) -} diff --git a/cmd/go-filecoin/bootstrap.go b/cmd/go-filecoin/bootstrap.go deleted file mode 100644 index 5f0b60bc94..0000000000 --- a/cmd/go-filecoin/bootstrap.go +++ /dev/null @@ -1,32 +0,0 @@ -package commands - -import ( - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" -) - -// BootstrapLsResult is the result of the bootstrap listing command. -type BootstrapLsResult struct { - Peers []string -} - -var bootstrapCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Interact with bootstrap addresses", - }, - Subcommands: map[string]*cmds.Command{ - "ls": bootstrapLsCmd, - }, -} - -var bootstrapLsCmd = &cmds.Command{ - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - peers, err := GetPorcelainAPI(env).ConfigGet("bootstrap.addresses") - if err != nil { - return err - } - - return re.Emit(&BootstrapLsResult{peers.([]string)}) - }, - Type: &BootstrapLsResult{}, -} diff --git a/cmd/go-filecoin/bootstrap_integration_test.go b/cmd/go-filecoin/bootstrap_integration_test.go deleted file mode 100644 index 20259e099a..0000000000 --- a/cmd/go-filecoin/bootstrap_integration_test.go +++ /dev/null @@ -1,24 +0,0 @@ -package commands_test - -import ( - "context" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestBootstrapList(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - builder := test.NewNodeBuilder(t) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - bs := cmdClient.RunSuccess(ctx, "bootstrap", "ls") - - assert.Equal(t, "{\n\t\"Peers\": []\n}\n", bs.ReadStdout()) -} diff --git a/cmd/go-filecoin/chain.go b/cmd/go-filecoin/chain.go deleted file mode 100644 index 9abcc643b8..0000000000 --- a/cmd/go-filecoin/chain.go +++ /dev/null @@ -1,187 +0,0 @@ -// Package commands implements the command to print the blockchain. -package commands - -import ( - "fmt" - "os" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/ipfs/go-cid" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - files "github.com/ipfs/go-ipfs-files" - "github.com/libp2p/go-libp2p-core/peer" -) - -var chainCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Inspect the filecoin blockchain", - }, - Subcommands: map[string]*cmds.Command{ - "export": storeExportCmd, - "head": storeHeadCmd, - "import": storeImportCmd, - "ls": storeLsCmd, - "status": storeStatusCmd, - "set-head": storeSetHeadCmd, - "sync": storeSyncCmd, - }, -} - -var storeHeadCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Get heaviest tipset CIDs", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - head, err := GetPorcelainAPI(env).ChainHead() - if err != nil { - return err - } - return re.Emit(head.Key()) - }, - Type: []cid.Cid{}, -} - -var storeLsCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "List blocks in the blockchain", - ShortDescription: `Provides a list of blocks in order from head to genesis. By default, only CIDs are returned for each block.`, - }, - Options: []cmdkit.Option{ - cmdkit.BoolOption("long", "l", "List blocks in long format, including CID, Miner, StateRoot, block height and message count respectively"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - iter, err := GetPorcelainAPI(env).ChainLs(req.Context) - if err != nil { - return err - } - for ; !iter.Complete(); err = iter.Next() { - if err != nil { - return err - } - if !iter.Value().Defined() { - panic("tipsets from this iterator should have at least one member") - } - if err := re.Emit(iter.Value().ToSlice()); err != nil { - return err - } - } - return nil - }, - Type: []block.Block{}, -} - -var storeStatusCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show status of chain sync operation.", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - syncStatus := GetPorcelainAPI(env).SyncerStatus() - if err := re.Emit(syncStatus); err != nil { - return err - } - return nil - }, -} - -var storeSetHeadCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Set the chain head to a specific tipset key.", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("cids", true, true, "CID's of the blocks of the tipset to set the chain head to."), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - headCids, err := cidsFromSlice(req.Arguments) - if err != nil { - return err - } - maybeNewHead := block.NewTipSetKey(headCids...) - return GetPorcelainAPI(env).ChainSetHead(req.Context, maybeNewHead) - }, -} - -var storeSyncCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Instruct the chain syncer to sync a specific chain head, going to network if required.", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("peerid", true, false, "Base58-encoded libp2p peer ID to sync from"), - cmdkit.StringArg("cids", true, true, "CID's of the blocks of the tipset to sync."), - }, - Options: []cmdkit.Option{}, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - syncPid, err := peer.Decode(req.Arguments[0]) - if err != nil { - return err - } - - syncCids, err := cidsFromSlice(req.Arguments[1:]) - if err != nil { - return err - } - - syncKey := block.NewTipSetKey(syncCids...) - ci := &block.ChainInfo{ - Source: syncPid, - Sender: syncPid, - Height: 0, // only checked when trusted is false. - Head: syncKey, - } - return GetPorcelainAPI(env).ChainSyncHandleNewTipSet(ci) - }, -} - -var storeExportCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Export the chain store to a car file.", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("file", true, false, "File to export chain data to."), - cmdkit.StringArg("cids", true, true, "CID's of the blocks of the tipset to export from."), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - f, err := os.Create(req.Arguments[0]) - if err != nil { - return err - } - defer func() { _ = f.Close() }() - - expCids, err := cidsFromSlice(req.Arguments[1:]) - if err != nil { - return err - } - expKey := block.NewTipSetKey(expCids...) - - if err := GetPorcelainAPI(env).ChainExport(req.Context, expKey, f); err != nil { - return err - } - return nil - }, -} - -var storeImportCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Import the chain from a car file.", - }, - Arguments: []cmdkit.Argument{ - cmdkit.FileArg("file", true, false, "File to import chain data from.").EnableStdin(), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - iter := req.Files.Entries() - if !iter.Next() { - return fmt.Errorf("no file given: %s", iter.Err()) - } - - fi, ok := iter.Node().(files.File) - if !ok { - return fmt.Errorf("given file was not a files.File") - } - defer func() { _ = fi.Close() }() - headKey, err := GetPorcelainAPI(env).ChainImport(req.Context, fi) - if err != nil { - return err - } - return re.Emit(headKey) - }, -} diff --git a/cmd/go-filecoin/chain_integration_test.go b/cmd/go-filecoin/chain_integration_test.go deleted file mode 100644 index 2701d411c9..0000000000 --- a/cmd/go-filecoin/chain_integration_test.go +++ /dev/null @@ -1,109 +0,0 @@ -package commands_test - -import ( - "bytes" - "context" - "encoding/json" - "testing" - - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/fixtures/fortest" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestChainHead(t *testing.T) { - tf.IntegrationTest(t) - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - jsonResult := cmdClient.RunSuccess(ctx, "chain", "head", "--enc", "json").ReadStdoutTrimNewlines() - var cidsFromJSON []cid.Cid - err := json.Unmarshal([]byte(jsonResult), &cidsFromJSON) - assert.NoError(t, err) -} - -func TestChainLs(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - - t.Run("chain ls with json encoding returns the whole chain as json", func(t *testing.T) { - seed, cfg, fakeClk, chainClk := test.CreateBootstrapSetup(t) - n := test.CreateBootstrapMiner(ctx, t, seed, chainClk, cfg) - - cmdClient, apiDone := test.RunNodeAPI(ctx, n, t) - defer apiDone() - - blk := test.RequireMineOnce(ctx, t, fakeClk, n) - c := blk.Cid() - - result2 := cmdClient.RunSuccess(ctx, "chain", "ls", "--enc", "json").ReadStdoutTrimNewlines() - var bs [][]block.Block - for _, line := range bytes.Split([]byte(result2), []byte{'\n'}) { - var b []block.Block - err := json.Unmarshal(line, &b) - require.NoError(t, err) - bs = append(bs, b) - require.Equal(t, 1, len(b)) - } - - assert.Equal(t, 2, len(bs)) - assert.True(t, bs[1][0].Parents.Empty()) - assert.True(t, c.Equals(bs[0][0].Cid())) - }) - - t.Run("chain ls with chain of size 1 returns genesis block", func(t *testing.T) { - builder := test.NewNodeBuilder(t) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - op := cmdClient.RunSuccess(ctx, "chain", "ls", "--enc", "json") - result := op.ReadStdoutTrimNewlines() - - var b []block.Block - err := json.Unmarshal([]byte(result), &b) - require.NoError(t, err) - - assert.True(t, b[0].Parents.Empty()) - }) - - t.Run("chain ls --long returns CIDs, Miner, block height and message count", func(t *testing.T) { - seed, cfg, fakeClk, chainClk := test.CreateBootstrapSetup(t) - n := test.CreateBootstrapMiner(ctx, t, seed, chainClk, cfg) - - cmdClient, apiDone := test.RunNodeAPI(ctx, n, t) - defer apiDone() - - test.RequireMineOnce(ctx, t, fakeClk, n) - - chainLsResult := cmdClient.RunSuccess(ctx, "chain", "ls", "--long").ReadStdoutTrimNewlines() - - assert.Contains(t, chainLsResult, fortest.TestMiners[0].String()) - assert.Contains(t, chainLsResult, "1") - assert.Contains(t, chainLsResult, "0") - }) - - t.Run("chain ls --long with JSON encoding returns integer string block height", func(t *testing.T) { - seed, cfg, fakeClk, chainClk := test.CreateBootstrapSetup(t) - n := test.CreateBootstrapMiner(ctx, t, seed, chainClk, cfg) - - cmdClient, apiDone := test.RunNodeAPI(ctx, n, t) - defer apiDone() - - test.RequireMineOnce(ctx, t, fakeClk, n) - - chainLsResult := cmdClient.RunSuccess(ctx, "chain", "ls", "--long", "--enc", "json").ReadStdoutTrimNewlines() - assert.Contains(t, chainLsResult, `"height":0`) - assert.Contains(t, chainLsResult, `"height":1`) - }) -} diff --git a/cmd/go-filecoin/client.go b/cmd/go-filecoin/client.go deleted file mode 100644 index 70f898e12a..0000000000 --- a/cmd/go-filecoin/client.go +++ /dev/null @@ -1,287 +0,0 @@ -package commands - -import ( - "fmt" - "strconv" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/pkg/errors" - - "github.com/ipfs/go-cid" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - files "github.com/ipfs/go-ipfs-files" - p2pcore "github.com/libp2p/go-libp2p-core/peer" -) - -var clientCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Make deals, store data, retrieve data", - }, - Subcommands: map[string]*cmds.Command{ - "cat": clientCatCmd, - "import": clientImportDataCmd, - "propose-storage-deal": ClientProposeStorageDealCmd, - "query-storage-deal": ClientQueryStorageDealCmd, - "verify-storage-deal": clientVerifyStorageDealCmd, - "list-asks": clientListAsksCmd, - }, -} - -var clientCatCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Read out data stored on the network", - ShortDescription: ` -Prints data from the storage market specified with a given CID to stdout. The -only argument should be the CID to return. The data will be returned in whatever -format was provided with the data initially. -`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("cid", true, false, "CID of data to read"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - c, err := cid.Decode(req.Arguments[0]) - if err != nil { - return err - } - - dr, err := GetPorcelainAPI(env).DAGCat(req.Context, c) - if err != nil { - return err - } - - return re.Emit(dr) - }, -} - -var clientImportDataCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Import data into the local node", - ShortDescription: ` -Imports data previously exported with the client cat command into the storage -market. This command takes only one argument, the path of the file to import. -See the go-filecoin client cat command for more details. -`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.FileArg("file", true, false, "Path to file to import").EnableStdin(), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - iter := req.Files.Entries() - if !iter.Next() { - return fmt.Errorf("no file given: %s", iter.Err()) - } - - fi, ok := iter.Node().(files.File) - if !ok { - return fmt.Errorf("given file was not a files.File") - } - - out, err := GetPorcelainAPI(env).DAGImportData(req.Context, fi) - if err != nil { - return err - } - - return re.Emit(out.Cid()) - }, - Type: cid.Cid{}, -} - -var ClientProposeStorageDealCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Propose a storage deal with a storage miner", - ShortDescription: `Sends a storage deal proposal to a miner`, - LongDescription: ` -Send a storage deal proposal to a miner. - -Start and end should be specified with the number of blocks for which to store the -data. New blocks are generated about every 30 seconds, so the time given should -be represented as a count of 30 second intervals. For example, 1 minute would -be 2, 1 hour would be 120, and 1 day would be 2880. -`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("miner", true, false, "Address of miner to send storage proposal"), - cmdkit.StringArg("data", true, false, "CID of the data to be stored"), - cmdkit.StringArg("start", true, false, "Chain epoch at which deal should start"), - cmdkit.StringArg("end", true, false, "Chain epoch at which deal should end"), - cmdkit.StringArg("price", true, false, "Storage price per epoch of all data in FIL (e.g. 0.01)"), - cmdkit.StringArg("collateral", true, false, "Collateral of deal in FIL (e.g. 0.01)"), - }, - Options: []cmdkit.Option{ - cmdkit.StringOption("peerid", "Override miner's peer id stored on chain"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - addr, err := GetPorcelainAPI(env).WalletDefaultAddress() - if err != nil { - return err - } - - maddr, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - chainHead := GetPorcelainAPI(env).ChainHeadKey() - - dataCID, err := cid.Decode(req.Arguments[1]) - if err != nil { - return errors.Wrap(err, "could not decode data cid") - } - - data := &storagemarket.DataRef{ - TransferType: "graphsync", - Root: dataCID, - } - - status, err := GetPorcelainAPI(env).MinerGetStatus(req.Context, maddr, chainHead) - if err != nil { - return err - } - - peerID := status.PeerID - peerIDStr, _ := req.Options["peerid"].(string) - if peerIDStr != "" { - peerID, err = p2pcore.Decode(peerIDStr) - if err != nil { - return err - } - } - - providerInfo := &storagemarket.StorageProviderInfo{ - Address: maddr, - Owner: status.OwnerAddress, - Worker: status.WorkerAddress, - SectorSize: uint64(status.SectorSize), - PeerID: peerID, - } - - start, err := strconv.ParseUint(req.Arguments[2], 10, 64) - if err != nil { - return errors.Wrap(err, "could not parse deal start") - } - - end, err := strconv.ParseUint(req.Arguments[3], 10, 64) - if err != nil { - return errors.Wrap(err, "could not parse deal end") - } - - price, valid := types.NewAttoFILFromFILString(req.Arguments[4]) - if !valid { - return errors.Errorf("could not parse price %s", req.Arguments[5]) - } - - collateral, valid := types.NewAttoFILFromFILString(req.Arguments[5]) - if !valid { - return errors.Errorf("could not parse collateral %s", req.Arguments[6]) - } - - resp, err := GetStorageAPI(env).ProposeStorageDeal( - req.Context, - addr, - providerInfo, - data, - abi.ChainEpoch(start), - abi.ChainEpoch(end), - price, - collateral, - status.SealProofType, - ) - if err != nil { - return err - } - - return re.Emit(resp) - }, - Type: storagemarket.ProposeStorageDealResult{}, -} - -var ClientQueryStorageDealCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Query a storage deal's status", - ShortDescription: ` -Checks the status of the storage deal proposal specified by the id. The deal -status and deal message will be returned as a formatted string unless another -format is specified with the --enc flag. -`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("id", true, false, "CID of deal to query"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - dealCID, err := cid.Decode(req.Arguments[0]) - if err != nil { - return errors.Wrap(err, "could not decode deal cid") - } - - deal, err := GetStorageAPI(env).GetStorageDeal(req.Context, dealCID) - if err != nil { - return err - } - - return re.Emit(deal) - }, - Type: storagemarket.ClientDeal{}, -} - -// VerifyStorageDealResult wraps the success in an interface type -type VerifyStorageDealResult struct { -} - -var clientVerifyStorageDealCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Verify a storage deal", - ShortDescription: ` -Returns an error if the deal is not in the Complete state. Returns nil otherwise. -`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("id", true, false, "CID of deal to query"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - dealCID, err := cid.Decode(req.Arguments[0]) - if err != nil { - return errors.Wrap(err, "could not decode deal cid") - } - - deal, err := GetStorageAPI(env).GetStorageDeal(req.Context, dealCID) - if err != nil { - return err - } - - if deal.State != storagemarket.StorageDealActive { - return errors.New("storage deal not in Active state") - } - - // TODO: Check for slashes - return re.Emit(&VerifyStorageDealResult{}) - }, - Type: &VerifyStorageDealResult{}, -} - -var clientListAsksCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "List all asks in the storage market", - ShortDescription: ` -Lists all asks in the storage market. This command takes no arguments. -`, - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - minerAddr, err := GetBlockAPI(env).MinerAddress() - if err != nil { - return err - } - - asks, err := GetStorageAPI(env).ListAsks(minerAddr) - if err != nil { - return err - } - - return re.Emit(asks) - }, - Type: []*storagemarket.SignedStorageAsk{}, -} diff --git a/cmd/go-filecoin/client_daemon_test.go b/cmd/go-filecoin/client_daemon_test.go deleted file mode 100644 index 6c9b87b311..0000000000 --- a/cmd/go-filecoin/client_daemon_test.go +++ /dev/null @@ -1,41 +0,0 @@ -package commands_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/filecoin-project/go-filecoin/fixtures/fortest" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/stretchr/testify/assert" -) - -func TestListAsks(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.TODO() - - seed, cfg, fakeClk, chainClk := test.CreateBootstrapSetup(t) - n := test.CreateBootstrapMiner(ctx, t, seed, chainClk, cfg) - - minerDaemon, apiDone := test.RunNodeAPI(ctx, n, t) - defer apiDone() - - minerDaemon.RunSuccess(ctx, "miner", "set-price", "20", "10") - - test.RequireMineOnce(ctx, t, fakeClk, n) - - var asks []*storagemarket.SignedStorageAsk - minerDaemon.RunMarshaledJSON(ctx, &asks, "client", "list-asks") - assert.Len(t, asks, 1) - ask := asks[0].Ask - assert.Equal(t, fortest.TestMiners[0], ask.Miner) - assert.Equal(t, uint64(1), ask.SeqNo) - assert.Equal(t, types.NewAttoFILFromFIL(20), ask.Price) - assert.Equal(t, abi.ChainEpoch(10), ask.Expiry) -} diff --git a/cmd/go-filecoin/client_integration_test.go b/cmd/go-filecoin/client_integration_test.go deleted file mode 100644 index a5d43b8765..0000000000 --- a/cmd/go-filecoin/client_integration_test.go +++ /dev/null @@ -1,78 +0,0 @@ -package commands_test - -import ( - "bytes" - "context" - "testing" - "time" - - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestProposeDeal(t *testing.T) { - tf.IntegrationTest(t) - - ctx := context.Background() - nodes, cancel := test.MustCreateNodesWithBootstrap(ctx, t, 1) - defer cancel() - - miner := nodes[0] - - maddr, err := miner.BlockMining.BlockMiningAPI.MinerAddress() - require.NoError(t, err) - - client := nodes[1] - clientAPI, clientStop := test.RunNodeAPI(ctx, client, t) - defer clientStop() - - clientAddr, err := client.PorcelainAPI.WalletDefaultAddress() - require.NoError(t, err) - - // Add enough funds (1 FIL) for client and miner to to cover deal - provider, err := miner.StorageProtocol.Provider() - require.NoError(t, err) - - err = provider.AddStorageCollateral(ctx, types.NewAttoFILFromFIL(1)) - require.NoError(t, err) - err = client.StorageProtocol.Client().AddPaymentEscrow(ctx, clientAddr, types.NewAttoFILFromFIL(1)) - require.NoError(t, err) - - // import empty 1K of bytes to create piece - input := bytes.NewBuffer(make([]byte, 1024)) - node, err := client.PorcelainAPI.DAGImportData(ctx, input) - require.NoError(t, err) - - // propose deal - var result storagemarket.ProposeStorageDealResult - clientAPI.RunMarshaledJSON(ctx, &result, "client", "propose-storage-deal", - "--peerid", miner.Host().ID().String(), - maddr.String(), - node.Cid().String(), - "1000", - "2000", - ".0000000000001", - "1", - ) - - // wait for deal to process - var dealStatus storagemarket.ClientDeal - for i := 0; i < 30; i++ { - clientAPI.RunMarshaledJSON(ctx, &dealStatus, "client", "query-storage-deal", result.ProposalCid.String()) - switch dealStatus.State { - case storagemarket.StorageDealProposalAccepted, - storagemarket.StorageDealStaged, - storagemarket.StorageDealSealing, - storagemarket.StorageDealActive: - // Deal accepted. Test passed. - return - default: - time.Sleep(1 * time.Second) // in progress, wait and continue - } - } - t.Error("timeout waiting for deal status update") -} diff --git a/cmd/go-filecoin/commands_test.go b/cmd/go-filecoin/commands_test.go deleted file mode 100644 index a162d1d598..0000000000 --- a/cmd/go-filecoin/commands_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package commands_test - -import ( - "testing" - - "github.com/filecoin-project/go-filecoin/fixtures/fortest" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" -) - -// create a basic new TestDaemon, with a miner and the KeyInfo it needs to sign -// tickets and blocks. This does not set a DefaultAddress in the Wallet; in this -// case, node/init.go Init generates a new address in the wallet and sets it to -// the default address. -func makeTestDaemonWithMinerAndStart(t *testing.T) *th.TestDaemon { - daemon := th.NewDaemon( - t, - th.WithMiner(fortest.TestMiners[0]), - th.KeyFile(fortest.KeyFilePaths()[0]), - ).Start() - return daemon -} - -func buildWithMiner(t *testing.T, builder *test.NodeBuilder) { - // bundle together common init options for node test state - cs := node.FixtureChainSeed(t) - builder.WithGenesisInit(cs.GenesisInitFunc) - builder.WithConfig(cs.MinerConfigOpt(0)) - builder.WithInitOpt(cs.MinerInitOpt(0)) -} diff --git a/cmd/go-filecoin/config.go b/cmd/go-filecoin/config.go deleted file mode 100644 index ba463b77e6..0000000000 --- a/cmd/go-filecoin/config.go +++ /dev/null @@ -1,102 +0,0 @@ -package commands - -import ( - "strings" - - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" -) - -var configCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Get and set filecoin config values", - ShortDescription: ` -go-filecoin config controls configuration variables. These variables are stored -in a config file inside your filecoin repo. When getting values, a key should be -provided, like so: - -go-filecoin config KEY - -When setting values, the key should be given first followed by the value and -separated by a space, like so: - -go-filecoin config KEY VALUE - -The key should be specified as a period separated string of keys. The value may -be either a bare string or any valid json compatible with the given key.`, - LongDescription: ` -go-filecoin config controls configuration variables. The configuration values -are stored as a JSON config file in your filecoin repo. When using go-filecoin -config, a key and value may be provided to set variables, or just a key may be -provided to fetch it's associated value without modifying it. - -Keys should be listed with a dot separation for each layer of nesting within The -JSON config. For example, the "addresses" key resides within an object under the -"bootstrap" key, therefore it should be addressed with the string -"bootstrap.addresses" like so: - -$ go-filecoin config bootstrap.addresses -[ - "newaddr" -] - -Values may be either bare strings (be sure to quote said string if they contain -spaces to avoid arguments being separated by your shell) or as encoded JSON -compatible with the associated keys. For example, "bootstrap.addresses" expects -an array of strings, so it should be set with something like so: - -$ go-filecoin config bootstrap.addresses '["newaddr"]' - -When setting keys with subkeys, such as the "bootstrap" key which has 3 keys -underneath it, period, minPeerThreshold, and addresses, the given JSON value -will be merged with existing values to avoid unintentionally resetting other -configuration variables under "bootstrap". For example, setting period then -setting addresses, like so, will not change the value of "period": - -$ go-filecoin config bootstrap -{ - "addresses": [], - "minPeerThreshold": 0, - "period": "1m" -} -$ go-filecoin config bootstrap '{"period": "5m"}' -$ go-filecoin config bootstrap '{"addresses": ["newaddr"]}' -$ go-filecoin config bootstrap -{ - "addresses": ["newaddr"], - "minPeerThreshold": 0, - "period": "5m" -} -`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("key", true, false, "The key of the config entry (e.g. \"api.address\")"), - cmdkit.StringArg("value", false, false, "Optionally, a value with which to set the config entry"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - api := GetPorcelainAPI(env) - key := req.Arguments[0] - var value string - - if len(req.Arguments) == 2 { - value = req.Arguments[1] - } else if strings.Contains(key, "=") { - args := strings.Split(key, "=") - key = args[0] - value = args[1] - } - - if value != "" { - err := api.ConfigSet(key, value) - if err != nil { - return err - } - } - res, err := api.ConfigGet(key) - if err != nil { - return err - } - - return re.Emit(res) - }, -} diff --git a/cmd/go-filecoin/config_integration_test.go b/cmd/go-filecoin/config_integration_test.go deleted file mode 100644 index 23a55bbda6..0000000000 --- a/cmd/go-filecoin/config_integration_test.go +++ /dev/null @@ -1,83 +0,0 @@ -package commands_test - -import ( - "context" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestConfigDaemon(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - - t.Run("config prints config value", func(t *testing.T) { - builder := test.NewNodeBuilder(t) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - wrapped1 := config.NewDefaultConfig().Datastore - - var decodedOutput1 config.DatastoreConfig - cmdClient.RunMarshaledJSON(ctx, &decodedOutput1, "config", "datastore") - assert.Equal(t, wrapped1, &decodedOutput1) - - var path string - cmdClient.RunMarshaledJSON(ctx, &path, "config", "datastore.path") - assert.Equal(t, config.NewDefaultConfig().Datastore.Path, path) - }) - - t.Run("config simple_value updates config", func(t *testing.T) { - builder := test.NewNodeBuilder(t) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - period := "1m" - // check writing default does not error - cmdClient.RunSuccess(ctx, "config", "bootstrap.period", period) - - // validate output - var retrievedPeriod string - cmdClient.RunMarshaledJSON(ctx, &retrievedPeriod, "config", "bootstrap.period") - assert.Equal(t, period, retrievedPeriod) - - // validate config write - nbci, err := n.PorcelainAPI.ConfigGet("bootstrap.period") - require.NoError(t, err) - nbc, ok := nbci.(string) - require.True(t, ok) - assert.Equal(t, nbc, period) - }) - - t.Run("config updates config", func(t *testing.T) { - builder := test.NewNodeBuilder(t) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - cmdClient.RunSuccess(ctx, "config", "bootstrap", `{"addresses": ["fake1", "fake2"], "period": "1m", "minPeerThreshold": 0}`) - - var bootstrapConfig config.BootstrapConfig - cmdClient.RunMarshaledJSON(ctx, &bootstrapConfig, "config", "bootstrap") - - // validate output - require.Len(t, bootstrapConfig.Addresses, 2) - assert.Equal(t, "fake1", bootstrapConfig.Addresses[0]) - assert.Equal(t, "fake2", bootstrapConfig.Addresses[1]) - - // validate config write - nbci, err := n.PorcelainAPI.ConfigGet("bootstrap") - require.NoError(t, err) - nbc, ok := nbci.(*config.BootstrapConfig) - require.True(t, ok) - - assert.Equal(t, nbc, &bootstrapConfig) - }) -} diff --git a/cmd/go-filecoin/daemon.go b/cmd/go-filecoin/daemon.go deleted file mode 100644 index 02a8f14c70..0000000000 --- a/cmd/go-filecoin/daemon.go +++ /dev/null @@ -1,239 +0,0 @@ -package commands - -import ( - "context" - "fmt" - "net/http" - _ "net/http/pprof" // nolint: golint - "os" - "os/signal" - "syscall" - "time" - - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - cmdhttp "github.com/ipfs/go-ipfs-cmds/http" - ma "github.com/multiformats/go-multiaddr" - manet "github.com/multiformats/go-multiaddr-net" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paths" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/journal" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" -) - -var daemonCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Start a long-running daemon process", - }, - Options: []cmdkit.Option{ - cmdkit.StringOption(SwarmAddress, "multiaddress to listen on for filecoin network connections"), - cmdkit.StringOption(SwarmPublicRelayAddress, "public multiaddress for routing circuit relay traffic. Necessary for relay nodes to provide this if they are not publically dialable"), - cmdkit.BoolOption(OfflineMode, "start the node without networking"), - cmdkit.BoolOption(ELStdout), - cmdkit.BoolOption(IsRelay, "advertise and allow filecoin network traffic to be relayed through this node"), - cmdkit.StringOption(BlockTime, "period a node waits between mining successive blocks").WithDefault(clock.DefaultEpochDuration.String()), - cmdkit.StringOption(PropagationDelay, "time a node waits after the start of an epoch for blocks to arrive").WithDefault(clock.DefaultPropagationDelay.String()), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - return daemonRun(req, re) - }, -} - -func daemonRun(req *cmds.Request, re cmds.ResponseEmitter) error { - // third precedence is config file. - rep, err := getRepo(req) - if err != nil { - return err - } - config := rep.Config() - - // second highest precedence is env vars. - if envAPI := os.Getenv("FIL_API"); envAPI != "" { - config.API.Address = envAPI - } - - // highest precedence is cmd line flag. - if flagAPI, ok := req.Options[OptionAPI].(string); ok && flagAPI != "" { - config.API.Address = flagAPI - } - - if swarmAddress, ok := req.Options[SwarmAddress].(string); ok && swarmAddress != "" { - config.Swarm.Address = swarmAddress - } - - if publicRelayAddress, ok := req.Options[SwarmPublicRelayAddress].(string); ok && publicRelayAddress != "" { - config.Swarm.PublicRelayAddress = publicRelayAddress - } - - opts, err := node.OptionsFromRepo(rep) - if err != nil { - return err - } - - if offlineMode, ok := req.Options[OfflineMode].(bool); ok { - opts = append(opts, node.OfflineMode(offlineMode)) - } - - if isRelay, ok := req.Options[IsRelay].(bool); ok && isRelay { - opts = append(opts, node.IsRelay()) - } - - durStr, ok := req.Options[BlockTime].(string) - if !ok { - return fmt.Errorf("invalid %s: %v", BlockTime, req.Options[BlockTime]) - } - blockTime, err := time.ParseDuration(durStr) - if err != nil { - return fmt.Errorf("invalid %s: %s", BlockTime, durStr) - } - opts = append(opts, node.BlockTime(blockTime)) - - delayStr, ok := req.Options[PropagationDelay].(string) - if !ok { - return fmt.Errorf("invalid %s: %v", PropagationDelay, req.Options[PropagationDelay]) - } - propDelay, err := time.ParseDuration(delayStr) - if err != nil { - return fmt.Errorf("invalid %s: %s", PropagationDelay, delayStr) - } - opts = append(opts, node.PropagationDelay(propDelay)) - - journal, err := journal.NewZapJournal(rep.JournalPath()) - if err != nil { - return err - } - opts = append(opts, node.JournalConfigOption(journal)) - - // Monkey-patch network parameters option will set package variables during node build - opts = append(opts, node.MonkeyPatchNetworkParamsOption(config.NetworkParams)) - - // Instantiate the node. - fcn, err := node.New(req.Context, opts...) - if err != nil { - return err - } - - if fcn.OfflineMode { - _ = re.Emit("Filecoin node running in offline mode (libp2p is disabled)\n") - } else { - _ = re.Emit(fmt.Sprintf("My peer ID is %s\n", fcn.Host().ID().Pretty())) - for _, a := range fcn.Host().Addrs() { - _ = re.Emit(fmt.Sprintf("Swarm listening on: %s\n", a)) - } - } - - if _, ok := req.Options[ELStdout].(bool); ok { - _ = re.Emit("--" + ELStdout + " option is deprecated\n") - } - - // Start the node. - if err := fcn.Start(req.Context); err != nil { - return err - } - defer fcn.Stop(req.Context) - - // Run API server around the node. - ready := make(chan interface{}, 1) - go func() { - <-ready - _ = re.Emit(fmt.Sprintf("API server listening on %s\n", config.API.Address)) - }() - - var terminate = make(chan os.Signal, 1) - signal.Notify(terminate, os.Interrupt, syscall.SIGTERM) - defer signal.Stop(terminate) - - // The request is expected to remain open so the daemon uses the request context. - // Pass a new context here if the flow changes such that the command should exit while leaving - // a forked deamon running. - return RunAPIAndWait(req.Context, fcn, config.API, ready, terminate) -} - -func getRepo(req *cmds.Request) (repo.Repo, error) { - repoDir, _ := req.Options[OptionRepoDir].(string) - repoDir, err := paths.GetRepoPath(repoDir) - if err != nil { - return nil, err - } - return repo.OpenFSRepo(repoDir, repo.Version) -} - -// RunAPIAndWait starts an API server and waits for it to finish. -// The `ready` channel is closed when the server is running and its API address has been -// saved to the node's repo. -// A message sent to or closure of the `terminate` channel signals the server to stop. -func RunAPIAndWait(ctx context.Context, nd *node.Node, config *config.APIConfig, ready chan interface{}, terminate chan os.Signal) error { - servenv := CreateServerEnv(ctx, nd) - - cfg := cmdhttp.NewServerConfig() - cfg.APIPath = APIPrefix - cfg.SetAllowedOrigins(config.AccessControlAllowOrigin...) - cfg.SetAllowedMethods(config.AccessControlAllowMethods...) - cfg.SetAllowCredentials(config.AccessControlAllowCredentials) - - maddr, err := ma.NewMultiaddr(config.Address) - if err != nil { - return err - } - - // Listen on the configured address in order to bind the port number in case it has - // been configured as zero (i.e. OS-provided) - apiListener, err := manet.Listen(maddr) - if err != nil { - return err - } - - handler := http.NewServeMux() - handler.Handle("/debug/pprof/", http.DefaultServeMux) - handler.Handle(APIPrefix+"/", cmdhttp.NewHandler(servenv, rootCmdDaemon, cfg)) - - apiserv := http.Server{ - Handler: handler, - } - - go func() { - err := apiserv.Serve(manet.NetListener(apiListener)) - if err != nil && err != http.ErrServerClosed { - panic(err) - } - }() - - // Write the resolved API address to the repo - config.Address = apiListener.Multiaddr().String() - if err := nd.Repo.SetAPIAddr(config.Address); err != nil { - return errors.Wrap(err, "Could not save API address to repo") - } - // Signal that the sever has started and then wait for a signal to stop. - close(ready) - received := <-terminate - if received != nil { - fmt.Println("Received signal", received) - } - fmt.Println("Shutting down...") - - // Allow a grace period for clean shutdown. - ctx, cancel := context.WithTimeout(ctx, time.Second*5) - defer cancel() - - if err := apiserv.Shutdown(ctx); err != nil { - fmt.Println("Error shutting down API server:", err) - } - - return nil -} - -func CreateServerEnv(ctx context.Context, nd *node.Node) *Env { - return &Env{ - blockMiningAPI: nd.BlockMining.BlockMiningAPI, - drandAPI: nd.DrandAPI, - ctx: ctx, - inspectorAPI: NewInspectorAPI(nd.Repo), - porcelainAPI: nd.PorcelainAPI, - retrievalAPI: nd.RetrievalProtocol, - storageAPI: nd.StorageAPI, - } -} diff --git a/cmd/go-filecoin/daemon_daemon_test.go b/cmd/go-filecoin/daemon_daemon_test.go deleted file mode 100644 index f9168bed2b..0000000000 --- a/cmd/go-filecoin/daemon_daemon_test.go +++ /dev/null @@ -1,126 +0,0 @@ -package commands_test - -import ( - "fmt" - "net/http" - "os" - "path/filepath" - "testing" - - manet "github.com/multiformats/go-multiaddr-net" - - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestDaemonStartupMessage(t *testing.T) { - tf.IntegrationTest(t) - - daemon := th.NewDaemon(t).Start() - daemon.ShutdownSuccess() - - out := daemon.ReadStdout() - assert.Regexp(t, "^\"My peer ID is [a-zA-Z0-9]*", out) - assert.Regexp(t, "\\n\"Swarm listening on.*", out) -} - -func TestDaemonApiFile(t *testing.T) { - tf.IntegrationTest(t) - - daemon := th.NewDaemon(t).Start() - - apiPath := filepath.Join(daemon.RepoDir(), "api") - assert.FileExists(t, apiPath) - - daemon.ShutdownEasy() - - _, err := os.Lstat(apiPath) - assert.Error(t, err, "Expect api file to be deleted on shutdown") - assert.True(t, os.IsNotExist(err)) -} - -func TestDaemonCORS(t *testing.T) { - tf.IntegrationTest(t) - - t.Run("default allowed origins work", func(t *testing.T) { - td := th.NewDaemon(t).Start() - defer td.ShutdownSuccess() - - maddr, err := td.CmdAddr() - assert.NoError(t, err) - - _, host, err := manet.DialArgs(maddr) - assert.NoError(t, err) - - url := fmt.Sprintf("http://%s/api/id", host) - req, err := http.NewRequest("GET", url, nil) - assert.NoError(t, err) - req.Header.Add("Origin", "http://localhost:8080") - res, err := http.DefaultClient.Do(req) - assert.NoError(t, err) - assert.Equal(t, http.StatusOK, res.StatusCode) - - req, err = http.NewRequest("GET", url, nil) - assert.NoError(t, err) - req.Header.Add("Origin", "https://localhost:8080") - res, err = http.DefaultClient.Do(req) - assert.NoError(t, err) - assert.Equal(t, http.StatusOK, res.StatusCode) - - req, err = http.NewRequest("GET", url, nil) - assert.NoError(t, err) - req.Header.Add("Origin", "http://127.0.0.1:8080") - res, err = http.DefaultClient.Do(req) - assert.NoError(t, err) - assert.Equal(t, http.StatusOK, res.StatusCode) - - req, err = http.NewRequest("GET", url, nil) - assert.NoError(t, err) - req.Header.Add("Origin", "https://127.0.0.1:8080") - res, err = http.DefaultClient.Do(req) - assert.NoError(t, err) - assert.Equal(t, http.StatusOK, res.StatusCode) - }) - - t.Run("non-configured origin fails", func(t *testing.T) { - td := th.NewDaemon(t).Start() - defer td.ShutdownSuccess() - - maddr, err := td.CmdAddr() - assert.NoError(t, err) - - _, host, err := manet.DialArgs(maddr) - assert.NoError(t, err) - - url := fmt.Sprintf("http://%s/api/id", host) - req, err := http.NewRequest("GET", url, nil) - assert.NoError(t, err) - req.Header.Add("Origin", "http://disallowed.origin") - res, err := http.DefaultClient.Do(req) - assert.NoError(t, err) - assert.Equal(t, http.StatusForbidden, res.StatusCode) - }) -} - -func TestDaemonOverHttp(t *testing.T) { - tf.IntegrationTest(t) - - td := th.NewDaemon(t).Start() - defer td.ShutdownSuccess() - - maddr, err := td.CmdAddr() - require.NoError(t, err) - - _, host, err := manet.DialArgs(maddr) - require.NoError(t, err) - - url := fmt.Sprintf("http://%s/api/daemon", host) - req, err := http.NewRequest("POST", url, nil) - require.NoError(t, err) - res, err := http.DefaultClient.Do(req) - require.NoError(t, err) - require.Equal(t, http.StatusNotFound, res.StatusCode) -} diff --git a/cmd/go-filecoin/dag.go b/cmd/go-filecoin/dag.go deleted file mode 100644 index b93324f54b..0000000000 --- a/cmd/go-filecoin/dag.go +++ /dev/null @@ -1,33 +0,0 @@ -// Package commands implements the command to print the blockchain. -package commands - -import ( - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" -) - -var dagCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Interact with IPLD DAG objects.", - }, - Subcommands: map[string]*cmds.Command{ - "get": dagGetCmd, - }, -} - -var dagGetCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Get a DAG node by its CID", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("ref", true, false, "CID of object to get"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - out, err := GetPorcelainAPI(env).DAGGetNode(req.Context, req.Arguments[0]) - if err != nil { - return err - } - - return re.Emit(out) - }, -} diff --git a/cmd/go-filecoin/dag_integration_test.go b/cmd/go-filecoin/dag_integration_test.go deleted file mode 100644 index 24139f2a9f..0000000000 --- a/cmd/go-filecoin/dag_integration_test.go +++ /dev/null @@ -1,49 +0,0 @@ -package commands_test - -import ( - "bytes" - "context" - "testing" - - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestDagDaemon(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - - t.Run("dag get returning the genesis block", func(t *testing.T) { - builder := test.NewNodeBuilder(t) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - c := n.PorcelainAPI.ChainHeadKey().Iter().Value() - - // get an IPLD node from the DAG by its CID - op := cmdClient.RunSuccess(ctx, "dag", "get", c.String(), "--enc", "json") - result2 := op.ReadStdoutTrimNewlines() - - ipldnode, err := cbor.FromJSON(bytes.NewReader([]byte(result2)), constants.DefaultHashFunction, -1) - require.NoError(t, err) - - // CBOR decode the IPLD node's raw data into a Filecoin block - - var actual block.Block - encoding.Decode(ipldnode.RawData(), &actual) // nolint: errcheck - // assert.NoError(err) - // TODO Enable ^^ and debug why Block.Miner isn't being de/encoded properly. - - // CIDs should be equal - - // TODO: reenable once cbor versions are matching! - // types.AssertHaveSameCid(assert, &expected, &actual) - }) -} diff --git a/cmd/go-filecoin/deals.go b/cmd/go-filecoin/deals.go deleted file mode 100644 index 672e968dd5..0000000000 --- a/cmd/go-filecoin/deals.go +++ /dev/null @@ -1,116 +0,0 @@ -package commands - -import ( - "fmt" - - "github.com/pkg/errors" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/ipfs/go-cid" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" -) - -const ( - clientOnly = "client" - minerOnly = "miner" -) - -var dealsCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Manage and inspect deals made by or with this node", - }, - Subcommands: map[string]*cmds.Command{ - "list": dealsListCmd, - "show": dealsShowCmd, - }, -} - -// DealsListResult represents the subset of deal data returned by deals list -type DealsListResult struct { - Miner address.Address `json:"minerAddress"` - PieceCid cid.Cid `json:"pieceCid"` - ProposalCid cid.Cid `json:"proposalCid"` - IsMiner bool `json:"isMiner"` - State string `json:"state"` - Message string `json:"message"` -} - -var dealsListCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "List all deals", - ShortDescription: ` -Lists all recorded deals made by or with this node. This may include pending -deals, active deals, finished deals and cancelled deals. -`, - }, - Options: []cmdkit.Option{ - cmdkit.BoolOption(clientOnly, "c", "only return deals made as a client"), - cmdkit.BoolOption(minerOnly, "m", "only return deals made as a miner"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - isClientOnly, _ := req.Options[clientOnly].(bool) - isMinerOnly, _ := req.Options[minerOnly].(bool) - var clientDeals []storagemarket.ClientDeal - var minerDeals []storagemarket.MinerDeal - var err error - if !isMinerOnly { - clientDeals, err = GetStorageAPI(env).GetClientDeals(req.Context) - if err != nil { - return fmt.Errorf("error reading client deals: %w", err) - } - } - if !isClientOnly { - minerDeals, err = GetStorageAPI(env).GetProviderDeals(req.Context) - if err != nil { - return fmt.Errorf("error reading miner deals: %w", err) - } - } - formattedDeals := []DealsListResult{} - for _, deal := range clientDeals { - formattedDeals = append(formattedDeals, DealsListResult{ - Miner: deal.Proposal.Provider, - PieceCid: deal.Proposal.PieceCID, - ProposalCid: deal.ProposalCid, - IsMiner: false, - State: storagemarket.DealStates[deal.State], - Message: deal.Message, - }) - } - for _, deal := range minerDeals { - formattedDeals = append(formattedDeals, DealsListResult{ - Miner: deal.Proposal.Provider, - PieceCid: deal.Proposal.PieceCID, - ProposalCid: deal.ProposalCid, - IsMiner: true, - State: storagemarket.DealStates[deal.State], - Message: deal.Message, - }) - } - return re.Emit(formattedDeals) - }, - Type: []DealsListResult{}, -} - -var dealsShowCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show deal details for CID ", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("cid", true, false, "CID of deal to query"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - dealCid, err := cid.Parse(req.Arguments[0]) - if err != nil { - return errors.Wrap(err, "invalid cid "+req.Arguments[0]) - } - - deal, err := GetStorageAPI(env).GetStorageDeal(req.Context, dealCid) - if err != nil { - return err - } - return re.Emit(deal) - }, - Type: storagemarket.ClientDeal{}, -} diff --git a/cmd/go-filecoin/deals_integration_test.go b/cmd/go-filecoin/deals_integration_test.go deleted file mode 100644 index d212443335..0000000000 --- a/cmd/go-filecoin/deals_integration_test.go +++ /dev/null @@ -1,177 +0,0 @@ -package commands_test - -import ( - "bytes" - "context" - "fmt" - "testing" - - "github.com/multiformats/go-multihash" - - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/require" - - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestDealsList(t *testing.T) { - tf.IntegrationTest(t) - - ctx := context.Background() - minerAPI, clientAPI, done, deal1Cid, deal2Cid := createDeal(ctx, t) - defer done() - - var dealResults []commands.DealsListResult - var cidsInList [2]cid.Cid - t.Run("with no filters", func(t *testing.T) { - // Client fails cause no miner is started for the client - clientAPI.RunFail(ctx, "Error: error reading miner deals: Mining has not been started so storage provider is not available", "deals", "list") - - // Miner sees the deal - minerAPI.RunMarshaledJSON(ctx, &dealResults, "deals", "list") - require.Len(t, dealResults, 2) - cidsInList[0] = dealResults[0].ProposalCid - cidsInList[1] = dealResults[1].ProposalCid - require.Contains(t, cidsInList, deal1Cid) - require.Contains(t, cidsInList, deal2Cid) - }) - - t.Run("with --miner", func(t *testing.T) { - // Client fails cause no miner is started for the client - clientAPI.RunFail(ctx, "Error: error reading miner deals: Mining has not been started so storage provider is not available", "deals", "list") - - // Miner sees the deal - minerAPI.RunMarshaledJSON(ctx, &dealResults, "deals", "list", "--miner") - require.Len(t, dealResults, 2) - cidsInList[0] = dealResults[0].ProposalCid - cidsInList[1] = dealResults[1].ProposalCid - require.Contains(t, cidsInList, deal1Cid) - require.Contains(t, cidsInList, deal2Cid) - }) - - t.Run("with --client", func(t *testing.T) { - // Client sees both deals - clientAPI.RunMarshaledJSON(ctx, &dealResults, "deals", "list", "--client") - require.Len(t, dealResults, 2) - cidsInList[0] = dealResults[0].ProposalCid - cidsInList[1] = dealResults[1].ProposalCid - require.Contains(t, cidsInList, deal1Cid) - require.Contains(t, cidsInList, deal2Cid) - - // Miner sees no client deals, but does not error - minerOutput := minerAPI.RunSuccessFirstLine(ctx, "deals", "list", "--client") - require.Equal(t, "[]", minerOutput) - }) - - t.Run("with --help", func(t *testing.T) { - clientOutput := clientAPI.RunSuccess(ctx, "deals", "list", "--help").ReadStdoutTrimNewlines() - require.Contains(t, clientOutput, "only return deals made as a client") - require.Contains(t, clientOutput, "only return deals made as a miner") - }) -} - -func TestDealShow(t *testing.T) { - tf.IntegrationTest(t) - - ctx := context.Background() - _, clientAPI, done, deal1Cid, _ := createDeal(ctx, t) - defer done() - - var res storagemarket.ClientDeal - t.Run("showDeal outputs correct information", func(t *testing.T) { - clientAPI.RunMarshaledJSON(ctx, &res, "deals", "show", deal1Cid.String()) - - assert.Equal(t, abi.ChainEpoch(2000), res.ClientDealProposal.Proposal.EndEpoch) - assert.Equal(t, "t0106", res.ClientDealProposal.Proposal.Provider.String()) - assert.LessOrEqual(t, storagemarket.StorageDealProposalAccepted, res.State) - - assert.Equal(t, abi.NewTokenAmount(100000), res.ClientDealProposal.Proposal.StoragePricePerEpoch) - }) - - t.Run("When deal does not exist errors with useful message", func(t *testing.T) { - nonDealCid := requireTestCID(t, []byte("anything")) - expectedErr := fmt.Sprintf("No state for /%s", nonDealCid.String()) - clientAPI.RunFail(ctx, expectedErr, "deals", "show", nonDealCid.String()) - }) -} - -func createDeal(ctx context.Context, t *testing.T) (*test.Client, *test.Client, func(), cid.Cid, cid.Cid) { - nodes, cancel := test.MustCreateNodesWithBootstrap(ctx, t, 1) - - miner := nodes[0] - minerAPI, minerStop := test.RunNodeAPI(ctx, miner, t) - - maddr, err := miner.BlockMining.BlockMiningAPI.MinerAddress() - require.NoError(t, err) - - client := nodes[1] - clientAPI, clientStop := test.RunNodeAPI(ctx, client, t) - done := func() { - cancel() - minerStop() - clientStop() - } - - clientAddr, err := client.PorcelainAPI.WalletDefaultAddress() - require.NoError(t, err) - - // Add enough funds (1 FIL) for client and miner to to cover deal - provider, err := miner.StorageProtocol.Provider() - require.NoError(t, err) - - err = provider.AddStorageCollateral(ctx, types.NewAttoFILFromFIL(1)) - require.NoError(t, err) - err = client.StorageProtocol.Client().AddPaymentEscrow(ctx, clientAddr, types.NewAttoFILFromFIL(1)) - require.NoError(t, err) - - // import some data to create first piece - input1 := bytes.NewBuffer([]byte("HODLHODLHODL")) - node1, err := client.PorcelainAPI.DAGImportData(ctx, input1) - require.NoError(t, err) - - // import some data to create second piece - input2 := bytes.NewBuffer([]byte("FREEASINBEER")) - node2, err := client.PorcelainAPI.DAGImportData(ctx, input2) - require.NoError(t, err) - - // propose 2 deals - var result storagemarket.ProposeStorageDealResult - clientAPI.RunMarshaledJSON(ctx, &result, "client", "propose-storage-deal", - "--peerid", miner.Host().ID().String(), - maddr.String(), - node1.Cid().String(), - "1000", - "2000", - ".0000000000001", - "1", - ) - require.NotEqual(t, cid.Undef, result.ProposalCid) - deal1Cid := result.ProposalCid - - clientAPI.RunMarshaledJSON(ctx, &result, "client", "propose-storage-deal", - "--peerid", miner.Host().ID().String(), - maddr.String(), - node2.Cid().String(), - "1000", - "2000", - ".0000000000001", - "1", - ) - require.NotEqual(t, cid.Undef, result.ProposalCid) - deal2Cid := result.ProposalCid - return minerAPI, clientAPI, done, deal1Cid, deal2Cid -} - -func requireTestCID(t *testing.T, data []byte) cid.Cid { - hash, err := multihash.Sum(data, multihash.SHA2_256, -1) - require.NoError(t, err) - return cid.NewCidV1(cid.DagCBOR, hash) -} diff --git a/cmd/go-filecoin/dht.go b/cmd/go-filecoin/dht.go deleted file mode 100644 index f3a0d5619f..0000000000 --- a/cmd/go-filecoin/dht.go +++ /dev/null @@ -1,165 +0,0 @@ -package commands - -import ( - "context" - "fmt" - "time" - - "github.com/ipfs/go-cid" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/routing" -) - -const ( - dhtVerboseOptionName = "verbose" - numProvidersOptionName = "num-providers" -) - -// Note, most of this is copied directly from go-ipfs (https://github.com/ipfs/go-ipfs/blob/master/core/commands/dht.go). -// A few simple modifications have been adapted for filecoin. -var dhtCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Explore and manipulate the libp2p DHT.", - ShortDescription: ``, - }, - - Subcommands: map[string]*cmds.Command{ - "findprovs": findProvidersDhtCmd, - "findpeer": findPeerDhtCmd, - "query": queryDhtCmd, - }, -} - -var queryDhtCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Find the closest Peer IDs to a given Peer ID by querying the DHT.", - ShortDescription: "Outputs a list of newline-delimited Peer IDs.", - }, - - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("peerID", true, false, "The peerID to run the query against."), - }, - Options: []cmdkit.Option{ - cmdkit.BoolOption(dhtVerboseOptionName, "v", "Print extra information."), - }, - Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - - id, err := peer.Decode(req.Arguments[0]) - if err != nil { - return cmds.ClientError("invalid peer ID") - } - - ctx, cancel := context.WithCancel(req.Context) - ctx, events := routing.RegisterForQueryEvents(ctx) - - closestPeers, err := GetPorcelainAPI(env).NetworkGetClosestPeers(ctx, string(id)) - if err != nil { - cancel() - return err - } - - go func() { - defer cancel() - for p := range closestPeers { - routing.PublishQueryEvent(ctx, &routing.QueryEvent{ - ID: p, - Type: routing.FinalPeer, - }) - } - }() - - for e := range events { - if err := res.Emit(e); err != nil { - return err - } - } - - return nil - }, - Type: routing.QueryEvent{}, -} - -var findProvidersDhtCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Find peers that can provide a given key's value.", - ShortDescription: "Outputs a list of newline-delimited provider Peer IDs for a given key.", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("key", true, false, "The key whose provider Peer IDs are output.").EnableStdin(), - }, - Options: []cmdkit.Option{ - cmdkit.BoolOption(dhtVerboseOptionName, "v", "Print extra information."), - cmdkit.IntOption(numProvidersOptionName, "n", "The max number of providers to find.").WithDefault(20), - }, - Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - numProviders, _ := req.Options[numProvidersOptionName].(int) - if numProviders < 1 { - return fmt.Errorf("number of providers must be greater than 0") - } - - c, err := cid.Parse(req.Arguments[0]) - if err != nil { - return err - } - - ctx, cancel := context.WithTimeout(req.Context, time.Minute) - ctx, events := routing.RegisterForQueryEvents(ctx) - - pchan := GetPorcelainAPI(env).NetworkFindProvidersAsync(ctx, c, numProviders) - - go func() { - defer cancel() - for p := range pchan { - np := p - // Note that the peer IDs in these Provider - // events are the main output of this command. - // These results are piped back into the event - // system so that they can be read alongside - // other routing events which are output in - // verbose mode but otherwise filtered. - routing.PublishQueryEvent(ctx, &routing.QueryEvent{ - Type: routing.Provider, - Responses: []*peer.AddrInfo{&np}, - }) - } - }() - for e := range events { - if err := res.Emit(e); err != nil { - return err - } - } - - return nil - }, - Type: routing.QueryEvent{}, -} - -var findPeerDhtCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Find the multiaddresses associated with a Peer ID.", - ShortDescription: "Outputs a list of newline-delimited multiaddresses.", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("peerID", true, false, "The ID of the peer to search for."), - }, - Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - peerID, err := peer.Decode(req.Arguments[0]) - if err != nil { - return err - } - - out, err := GetPorcelainAPI(env).NetworkFindPeer(req.Context, peerID) - if err != nil { - return err - } - - for _, addr := range out.Addrs { - if err := res.Emit(addr.String()); err != nil { - return err - } - } - return nil - }, -} diff --git a/cmd/go-filecoin/dht_integration_test.go b/cmd/go-filecoin/dht_integration_test.go deleted file mode 100644 index 90a9a3fa15..0000000000 --- a/cmd/go-filecoin/dht_integration_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package commands_test - -import ( - "context" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestDhtFindPeer(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - - builder1 := test.NewNodeBuilder(t) - n1 := builder1.BuildAndStart(ctx) - defer n1.Stop(ctx) - cmdClient, done := test.RunNodeAPI(ctx, n1, t) - defer done() - - builder2 := test.NewNodeBuilder(t) - n2 := builder2.BuildAndStart(ctx) - defer n2.Stop(ctx) - - node.ConnectNodes(t, n1, n2) - - n2Id := n2.PorcelainAPI.NetworkGetPeerID() - findpeerOutput := cmdClient.RunSuccess(ctx, "dht", "findpeer", n2Id.String()).ReadStdoutTrimNewlines() - n2Addr := n2.PorcelainAPI.NetworkGetPeerAddresses()[0] - - assert.Contains(t, findpeerOutput, n2Addr.String()) -} - -// TODO: findprovs will have to be untested until -// https://github.com/filecoin-project/go-filecoin/issues/2357 -// original tests were flaky; testing may need to be omitted entirely -// unless it can consistently pass. diff --git a/cmd/go-filecoin/drand.go b/cmd/go-filecoin/drand.go deleted file mode 100644 index 4f659943f5..0000000000 --- a/cmd/go-filecoin/drand.go +++ /dev/null @@ -1,62 +0,0 @@ -package commands - -import ( - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" -) - -var drandCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Explore access and configure drand.", - ShortDescription: ``, - }, - - Subcommands: map[string]*cmds.Command{ - "configure": drandConfigure, - "random": drandRandom, - }, -} - -var drandConfigure = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Configure drand client", - ShortDescription: `Fetches drand group configuration from one or more server. When found, it updates - drand client to use configuration and persists configuration in node config`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("addresses", true, true, "Addresses used to contact drand group for configuration."), - }, - Options: []cmdkit.Option{ - cmdkit.BoolOption("override-addrs", "use the provided addresses rather than the retrieved config to contact drand"), - cmdkit.BoolOption("insecure", "use insecure protocol to contact drand"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - insecure, _ := req.Options["insecure"].(bool) - override, _ := req.Options["override-addrs"].(bool) - - err := GetDrandAPI(env).Configure(req.Arguments, !insecure, override) - if err != nil { - return err - } - return re.Emit("drand group key configured") - }, -} - -var drandRandom = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Retrieve randomness round from drand group", - }, - Options: []cmdkit.Option{ - cmdkit.Uint64Option("round", "retrieve randomness at given round (default 0)"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - round, _ := req.Options["round"].(uint64) - - entry, err := GetDrandAPI(env).GetEntry(req.Context, drand.Round(round)) - if err != nil { - return err - } - return re.Emit(entry) - }, -} diff --git a/cmd/go-filecoin/env.go b/cmd/go-filecoin/env.go deleted file mode 100644 index 5ac0a8203a..0000000000 --- a/cmd/go-filecoin/env.go +++ /dev/null @@ -1,73 +0,0 @@ -package commands - -import ( - "context" - - cmds "github.com/ipfs/go-ipfs-cmds" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/mining" - "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/retrieval" - "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/storage" -) - -// Env is the environment for command API handlers. -type Env struct { - blockMiningAPI *mining.API - ctx context.Context - drandAPI *drand.API - porcelainAPI *porcelain.API - retrievalAPI retrieval.API - storageAPI *storage.API - inspectorAPI *Inspector -} - -var _ cmds.Environment = (*Env)(nil) - -// NewClientEnv returns a new environment for command API clients. -// This environment lacks direct access to any internal APIs. -func NewClientEnv(ctx context.Context) *Env { - return &Env{ctx: ctx} -} - -// Context returns the context of the environment. -func (ce *Env) Context() context.Context { - return ce.ctx -} - -// GetPorcelainAPI returns the porcelain.API interface from the environment. -func GetPorcelainAPI(env cmds.Environment) *porcelain.API { - ce := env.(*Env) - return ce.porcelainAPI -} - -// GetBlockAPI returns the block protocol api from the given environment. -func GetBlockAPI(env cmds.Environment) *mining.API { - ce := env.(*Env) - return ce.blockMiningAPI -} - -// GetRetrievalAPI returns the retrieval protocol api from the given environment. -func GetRetrievalAPI(env cmds.Environment) retrieval.API { - ce := env.(*Env) - return ce.retrievalAPI -} - -// GetStorageAPI returns the storage protocol api from the given environment. -func GetStorageAPI(env cmds.Environment) *storage.API { - ce := env.(*Env) - return ce.storageAPI -} - -// GetInspectorAPI returns the inspector api from the given environment. -func GetInspectorAPI(env cmds.Environment) *Inspector { - ce := env.(*Env) - return ce.inspectorAPI -} - -// GetDrandAPI returns the drand api from the given environment. -func GetDrandAPI(env cmds.Environment) *drand.API { - ce := env.(*Env) - return ce.drandAPI -} diff --git a/cmd/go-filecoin/id.go b/cmd/go-filecoin/id.go deleted file mode 100644 index 2bb967417a..0000000000 --- a/cmd/go-filecoin/id.go +++ /dev/null @@ -1,129 +0,0 @@ -package commands - -import ( - "encoding/base64" - "encoding/json" - "fmt" - - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - "github.com/libp2p/go-libp2p-core/peer" - ma "github.com/multiformats/go-multiaddr" -) - -// IDDetails is a collection of information about a node. -type IDDetails struct { - Addresses []ma.Multiaddr - ID peer.ID - AgentVersion string - ProtocolVersion string - PublicKey []byte // raw bytes -} - -var idCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show info about the network peers", - }, - Options: []cmdkit.Option{ - // TODO: ideally copy this from the `ipfs id` command - cmdkit.StringOption("format", "f", "Specify an output format"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - addrs := GetPorcelainAPI(env).NetworkGetPeerAddresses() - hostID := GetPorcelainAPI(env).NetworkGetPeerID() - - details := IDDetails{ - Addresses: make([]ma.Multiaddr, len(addrs)), - ID: hostID, - } - - for i, addr := range addrs { - subaddr, err := ma.NewMultiaddr(fmt.Sprintf("/ipfs/%s", hostID.Pretty())) - if err != nil { - return err - } - details.Addresses[i] = addr.Encapsulate(subaddr) - } - - return re.Emit(&details) - }, - Type: IDDetails{}, -} - -// MarshalJSON implements json.Marshaler -func (idd IDDetails) MarshalJSON() ([]byte, error) { - addressStrings := make([]string, len(idd.Addresses)) - for i, addr := range idd.Addresses { - addressStrings[i] = addr.String() - } - - v := map[string]interface{}{ - "Addresses": addressStrings, - } - - if idd.ID != "" { - v["ID"] = idd.ID.Pretty() - } - if idd.AgentVersion != "" { - v["AgentVersion"] = idd.AgentVersion - } - if idd.ProtocolVersion != "" { - v["ProtocolVersion"] = idd.ProtocolVersion - } - if idd.PublicKey != nil { - // Base64-encode the public key explicitly. - // This is what the built-in JSON encoder does to []byte too. - v["PublicKey"] = base64.StdEncoding.EncodeToString(idd.PublicKey) - } - return json.Marshal(v) -} - -// UnmarshalJSON implements Unmarshaler -func (idd *IDDetails) UnmarshalJSON(data []byte) error { - var v map[string]*json.RawMessage - var err error - if err = json.Unmarshal(data, &v); err != nil { - return err - } - - var addresses []string - if err := decode(v, "Addresses", &addresses); err != nil { - return err - } - idd.Addresses = make([]ma.Multiaddr, len(addresses)) - for i, addr := range addresses { - a, err := ma.NewMultiaddr(addr) - if err != nil { - return err - } - idd.Addresses[i] = a - } - - var id string - if err := decode(v, "ID", &id); err != nil { - return err - } - if idd.ID, err = peer.Decode(id); err != nil { - return err - } - - if err := decode(v, "AgentVersion", &idd.AgentVersion); err != nil { - return err - } - if err := decode(v, "ProtocolVersion", &idd.ProtocolVersion); err != nil { - return err - } - if err := decode(v, "PublicKey", &idd.PublicKey); err != nil { - return err - } - return nil -} - -func decode(idd map[string]*json.RawMessage, key string, dest interface{}) error { - if raw := idd[key]; raw != nil { - if err := json.Unmarshal(*raw, &dest); err != nil { - return err - } - } - return nil -} diff --git a/cmd/go-filecoin/id_daemon_test.go b/cmd/go-filecoin/id_daemon_test.go deleted file mode 100644 index 8a39df3686..0000000000 --- a/cmd/go-filecoin/id_daemon_test.go +++ /dev/null @@ -1,55 +0,0 @@ -package commands_test - -import ( - "context" - "io/ioutil" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestId(t *testing.T) { - tf.IntegrationTest(t) - - ctx := context.Background() - - builder := test.NewNodeBuilder(t) - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - id := cmdClient.RunSuccess(ctx, "id") - - idContent := id.ReadStdout() - assert.Containsf(t, idContent, "/ip4/127.0.0.1/tcp/", "default addr") - assert.Contains(t, idContent, "ID") -} - -func TestPersistId(t *testing.T) { - tf.IntegrationTest(t) - - // we need to control this - dir, err := ioutil.TempDir("", "go-fil-test") - require.NoError(t, err) - - // Start a demon in dir - d1 := th.NewDaemon(t, th.ContainerDir(dir)).Start() - - // get the id and kill it - id1 := d1.GetID() - d1.Stop() - - // restart the daemon - d2 := th.NewDaemon(t, th.ShouldInit(false), th.ContainerDir(dir)).Start() - - // get the id and compare to previous - id2 := d2.GetID() - d2.ShutdownSuccess() - t.Logf("d1: %s", d1.ReadStdout()) - t.Logf("d2: %s", d2.ReadStdout()) - assert.Equal(t, id1, id2) -} diff --git a/cmd/go-filecoin/init.go b/cmd/go-filecoin/init.go deleted file mode 100644 index dc54e8fa73..0000000000 --- a/cmd/go-filecoin/init.go +++ /dev/null @@ -1,303 +0,0 @@ -package commands - -import ( - "context" - "encoding/json" - "fmt" - "io" - "io/ioutil" - "net/http" - "net/url" - "os" - - "github.com/filecoin-project/go-address" - blockstore "github.com/ipfs/go-ipfs-blockstore" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - cbor "github.com/ipfs/go-ipld-cbor" - logging "github.com/ipfs/go-log/v2" - "github.com/ipld/go-car" - "github.com/libp2p/go-libp2p-core/crypto" - - "github.com/filecoin-project/go-filecoin/fixtures/networks" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paths" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/genesis" - drandapi "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" -) - -var logInit = logging.Logger("commands/init") - -var initCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Initialize a filecoin repo", - }, - Options: []cmdkit.Option{ - cmdkit.StringOption(GenesisFile, "path of file or HTTP(S) URL containing archive of genesis block DAG data"), - cmdkit.StringOption(PeerKeyFile, "path of file containing key to use for new node's libp2p identity"), - cmdkit.StringOption(WalletKeyFile, "path of file containing keys to import into the wallet on initialization"), - cmdkit.StringOption(OptionSectorDir, "path of directory into which staged and sealed sectors will be written"), - cmdkit.StringOption(MinerActorAddress, "when set, sets the daemons's miner actor address to the provided address"), - cmdkit.UintOption(AutoSealIntervalSeconds, "when set to a number > 0, configures the daemon to check for and seal any staged sectors on an interval.").WithDefault(uint(120)), - cmdkit.StringOption(Network, "when set, populates config with network specific parameters"), - cmdkit.StringOption(OptionPresealedSectorDir, "when set to the path of a directory, imports pre-sealed sector data from that directory"), - cmdkit.StringOption(OptionDrandConfigAddr, "configure drand with given address, uses secure contact protocol and no override. If you need different settings use daemon drand command"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - repoDir, _ := req.Options[OptionRepoDir].(string) - repoDir, err := paths.GetRepoPath(repoDir) - if err != nil { - return err - } - - if err := re.Emit(repoDir); err != nil { - return err - } - if err := repo.InitFSRepo(repoDir, repo.Version, config.NewDefaultConfig()); err != nil { - return err - } - rep, err := repo.OpenFSRepo(repoDir, repo.Version) - if err != nil { - return err - } - // The only error Close can return is that the repo has already been closed. - defer func() { _ = rep.Close() }() - - genesisFileSource, _ := req.Options[GenesisFile].(string) - gif, err := loadGenesis(req.Context, rep, genesisFileSource) - if err != nil { - return err - } - - peerKeyFile, _ := req.Options[PeerKeyFile].(string) - walletKeyFile, _ := req.Options[WalletKeyFile].(string) - initopts, err := getNodeInitOpts(peerKeyFile, walletKeyFile) - if err != nil { - return err - } - - cfg := rep.Config() - if err := setConfigFromOptions(cfg, req.Options); err != nil { - logInit.Errorf("Error setting config %s", err) - return err - } - - if err := setDrandConfig(rep, req.Options); err != nil { - logInit.Error("Error configuring drand config %s", err) - return err - } - if err := rep.ReplaceConfig(cfg); err != nil { - logInit.Errorf("Error replacing config %s", err) - return err - } - - logInit.Info("Initializing node") - if err := node.Init(req.Context, rep, gif, initopts...); err != nil { - logInit.Errorf("Error initializing node %s", err) - return err - } - - return nil - }, -} - -func setConfigFromOptions(cfg *config.Config, options cmdkit.OptMap) error { - var err error - if dir, ok := options[OptionSectorDir].(string); ok { - cfg.SectorBase.RootDirPath = dir - } - - if autoSealIntervalSeconds, ok := options[AutoSealIntervalSeconds]; ok { - cfg.Mining.AutoSealIntervalSeconds = autoSealIntervalSeconds.(uint) - } - - if ma, ok := options[MinerActorAddress].(string); ok { - if cfg.Mining.MinerAddress, err = address.NewFromString(ma); err != nil { - return err - } - } - - if dir, ok := options[OptionPresealedSectorDir].(string); ok { - if cfg.Mining.MinerAddress == address.Undef { - return fmt.Errorf("if --%s is provided, --%s must also be provided", OptionPresealedSectorDir, MinerActorAddress) - } - - cfg.SectorBase.PreSealedSectorsDirPath = dir - } - - // Setup devnet specific config options. - netName, _ := options[Network].(string) - var netcfg *networks.NetworkConf - if netName == "interop" { - netcfg = networks.Interop() - } else if netName == "testnet" { - netcfg = networks.Testnet() - } else if netName != "" { - return fmt.Errorf("unknown network name %s", netName) - } - if netcfg != nil { - cfg.Bootstrap = &netcfg.Bootstrap - cfg.Drand = &netcfg.Drand - cfg.NetworkParams = &netcfg.Network - } - - return nil -} - -// helper type to implement plumbing subset -type setWrapper struct { - cfg *config.Config -} - -func (w *setWrapper) ConfigSet(dottedKey string, jsonString string) error { - return w.cfg.Set(dottedKey, jsonString) -} - -func setDrandConfig(repo repo.Repo, options cmdkit.OptMap) error { - drandAddrStr, ok := options[OptionDrandConfigAddr].(string) - if !ok { - // skip configuring drand during init - return nil - } - - // Arbitrary filecoin genesis time, it will be set correctly when daemon runs - // It is not needed to set config properly - dGRPC, err := node.DefaultDrandIfaceFromConfig(repo.Config(), 0) - if err != nil { - return err - } - d := drandapi.New(dGRPC, &setWrapper{repo.Config()}) - return d.Configure([]string{drandAddrStr}, true, false) -} - -func loadGenesis(ctx context.Context, rep repo.Repo, sourceName string) (genesis.InitFunc, error) { - if sourceName == "" { - return gengen.MakeGenesisFunc(), nil - } - - source, err := openGenesisSource(sourceName) - if err != nil { - return nil, err - } - defer func() { _ = source.Close() }() - - genesisBlk, err := extractGenesisBlock(source, rep) - if err != nil { - return nil, err - } - - gif := func(cst cbor.IpldStore, bs blockstore.Blockstore) (*block.Block, error) { - return genesisBlk, err - } - - return gif, nil - -} - -func getNodeInitOpts(peerKeyFile string, walletKeyFile string) ([]node.InitOpt, error) { - var initOpts []node.InitOpt - if peerKeyFile != "" { - data, err := ioutil.ReadFile(peerKeyFile) - if err != nil { - return nil, err - } - peerKey, err := crypto.UnmarshalPrivateKey(data) - if err != nil { - return nil, err - } - initOpts = append(initOpts, node.PeerKeyOpt(peerKey)) - } - - if walletKeyFile != "" { - f, err := os.Open(walletKeyFile) - if err != nil { - return nil, err - } - - var wir *WalletSerializeResult - if err := json.NewDecoder(f).Decode(&wir); err != nil { - return nil, err - } - - if len(wir.KeyInfo) > 0 { - initOpts = append(initOpts, node.DefaultKeyOpt(wir.KeyInfo[0])) - } - - for _, k := range wir.KeyInfo[1:] { - initOpts = append(initOpts, node.ImportKeyOpt(k)) - } - } - - return initOpts, nil -} - -func openGenesisSource(sourceName string) (io.ReadCloser, error) { - sourceURL, err := url.Parse(sourceName) - if err != nil { - return nil, fmt.Errorf("invalid filepath or URL for genesis file: %s", sourceURL) - } - var source io.ReadCloser - if sourceURL.Scheme == "http" || sourceURL.Scheme == "https" { - // NOTE: This code is temporary. It allows downloading a genesis block via HTTP(S) to be able to join a - // recently deployed staging devnet. - response, err := http.Get(sourceName) - if err != nil { - return nil, err - } - source = response.Body - } else if sourceURL.Scheme != "" { - return nil, fmt.Errorf("unsupported protocol for genesis file: %s", sourceURL.Scheme) - } else { - file, err := os.Open(sourceName) - if err != nil { - return nil, err - } - source = file - } - return source, nil -} - -func extractGenesisBlock(source io.ReadCloser, rep repo.Repo) (*block.Block, error) { - bs := blockstore.NewBlockstore(rep.Datastore()) - ch, err := car.LoadCar(bs, source) - if err != nil { - return nil, err - } - - // need to check if we are being handed a car file with a single genesis block or an entire chain. - bsBlk, err := bs.Get(ch.Roots[0]) - if err != nil { - return nil, err - } - cur, err := block.DecodeBlock(bsBlk.RawData()) - if err != nil { - return nil, err - } - - // the root block of the car file has parents, this file must contain a chain. - var gensisBlk *block.Block - if !cur.Parents.Equals(block.UndefTipSet.Key()) { - // walk back up the chain until we hit a block with no parents, the genesis block. - for !cur.Parents.Equals(block.UndefTipSet.Key()) { - bsBlk, err := bs.Get(cur.Parents.ToSlice()[0]) - if err != nil { - return nil, err - } - cur, err = block.DecodeBlock(bsBlk.RawData()) - if err != nil { - return nil, err - } - } - - gensisBlk = cur - - logInit.Infow("initialized go-filecoin with genesis file containing partial chain", "genesisCID", gensisBlk.Cid().String(), "headCIDs", ch.Roots) - } else { - gensisBlk = cur - } - return gensisBlk, nil -} diff --git a/cmd/go-filecoin/init_daemon_test.go b/cmd/go-filecoin/init_daemon_test.go deleted file mode 100644 index 6b7f82b4c5..0000000000 --- a/cmd/go-filecoin/init_daemon_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package commands_test - -import ( - "context" - "fmt" - "net/http" - "os/exec" - "strconv" - "testing" - - manet "github.com/multiformats/go-multiaddr-net" - - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/build/project" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestInitOverHttp(t *testing.T) { - tf.IntegrationTest(t) - - td := th.NewDaemon(t).Start() - defer td.ShutdownSuccess() - - maddr, err := td.CmdAddr() - require.NoError(t, err) - - _, host, err := manet.DialArgs(maddr) - require.NoError(t, err) - - url := fmt.Sprintf("http://%s/api/init", host) - req, err := http.NewRequest("POST", url, nil) - require.NoError(t, err) - res, err := http.DefaultClient.Do(req) - require.NoError(t, err) - require.Equal(t, http.StatusNotFound, res.StatusCode) -} - -func TestDownloadGenesis(t *testing.T) { - tf.IntegrationTest(t) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - port, err := th.GetFreePort() - require.NoError(t, err) - - err = exec.CommandContext( - ctx, - project.Root("tools/genesis-file-server/genesis-file-server"), - "--genesis-file-path", - project.Root("fixtures/test/genesis.car"), - "--port", - strconv.Itoa(port), - ).Start() - require.NoError(t, err) - - td := th.NewDaemon(t, th.GenesisFile(fmt.Sprintf("http://127.0.0.1:%d/genesis.car", port))).Start() - - td.ShutdownSuccess() -} diff --git a/cmd/go-filecoin/inspector.go b/cmd/go-filecoin/inspector.go deleted file mode 100644 index ec882f2bf1..0000000000 --- a/cmd/go-filecoin/inspector.go +++ /dev/null @@ -1,261 +0,0 @@ -package commands - -import ( - "os" - "runtime" - - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - sysi "github.com/whyrusleeping/go-sysinfo" - - "github.com/filecoin-project/go-filecoin/build/flags" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" -) - -var inspectCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show info about the filecoin node", - }, - Subcommands: map[string]*cmds.Command{ - "all": allInspectCmd, - "runtime": runtimeInspectCmd, - "disk": diskInspectCmd, - "memory": memoryInspectCmd, - "config": configInspectCmd, - "environment": envInspectCmd, - }, -} -var allInspectCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Print all diagnostic information.", - ShortDescription: ` -Prints out information about filecoin process and its environment. -`, - }, - Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - var allInfo AllInspectorInfo - allInfo.Runtime = GetInspectorAPI(env).Runtime() - - dsk, err := GetInspectorAPI(env).Disk() - if err != nil { - return err - } - allInfo.Disk = dsk - - mem, err := GetInspectorAPI(env).Memory() - if err != nil { - return err - } - allInfo.Memory = mem - allInfo.Config = GetInspectorAPI(env).Config() - allInfo.Environment = GetInspectorAPI(env).Environment() - allInfo.FilecoinVersion = GetInspectorAPI(env).FilecoinVersion() - return cmds.EmitOnce(res, allInfo) - }, - Type: AllInspectorInfo{}, -} - -var runtimeInspectCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Print runtime diagnostic information.", - ShortDescription: ` -Prints out information about the golang runtime. -`, - }, - Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - out := GetInspectorAPI(env).Runtime() - return cmds.EmitOnce(res, out) - }, - Type: RuntimeInfo{}, -} - -var diskInspectCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Print filesystem usage information.", - ShortDescription: ` -Prints out information about the filesystem. -`, - }, - Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - out, err := GetInspectorAPI(env).Disk() - if err != nil { - return err - } - return cmds.EmitOnce(res, out) - }, - Type: DiskInfo{}, -} - -var memoryInspectCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Print memory usage information.", - ShortDescription: ` -Prints out information about memory usage. -`, - }, - Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - out, err := GetInspectorAPI(env).Memory() - if err != nil { - return err - } - return cmds.EmitOnce(res, out) - }, - Type: MemoryInfo{}, -} - -var configInspectCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Print in-memory config information.", - ShortDescription: ` -Prints out information about your filecoin nodes config. -`, - }, - Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - out := GetInspectorAPI(env).Config() - return cmds.EmitOnce(res, out) - }, - Type: config.Config{}, -} - -var envInspectCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Print filecoin environment information.", - ShortDescription: ` -Prints out information about your filecoin nodes environment. -`, - }, - Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - out := GetInspectorAPI(env).Environment() - return cmds.EmitOnce(res, out) - }, - Type: EnvironmentInfo{}, -} - -// NewInspectorAPI returns a `Inspector` used to inspect the go-filecoin node. -func NewInspectorAPI(r repo.Repo) *Inspector { - return &Inspector{ - repo: r, - } -} - -// Inspector contains information used to inspect the go-filecoin node. -type Inspector struct { - repo repo.Repo -} - -// AllInspectorInfo contains all information the inspector can gather. -type AllInspectorInfo struct { - Config *config.Config - Runtime *RuntimeInfo - Environment *EnvironmentInfo - Disk *DiskInfo - Memory *MemoryInfo - FilecoinVersion string -} - -// RuntimeInfo contains information about the golang runtime. -type RuntimeInfo struct { - OS string - Arch string - Version string - Compiler string - NumProc int - GoMaxProcs int - NumGoRoutines int - NumCGoCalls int64 -} - -// EnvironmentInfo contains information about the environment filecoin is running in. -type EnvironmentInfo struct { - FilAPI string `json:"FIL_API"` - FilPath string `json:"FIL_PATH"` - GoPath string `json:"GOPATH"` -} - -// DiskInfo contains information about disk usage and type. -type DiskInfo struct { - Free uint64 - Total uint64 - FSType string -} - -// MemoryInfo contains information about memory usage. -type MemoryInfo struct { - Swap uint64 - Virtual uint64 -} - -// Runtime returns infrormation about the golang runtime. -func (g *Inspector) Runtime() *RuntimeInfo { - return &RuntimeInfo{ - OS: runtime.GOOS, - Arch: runtime.GOARCH, - Version: runtime.Version(), - Compiler: runtime.Compiler, - NumProc: runtime.NumCPU(), - GoMaxProcs: runtime.GOMAXPROCS(0), - NumGoRoutines: runtime.NumGoroutine(), - NumCGoCalls: runtime.NumCgoCall(), - } -} - -// Environment returns information about the environment filecoin is running in. -func (g *Inspector) Environment() *EnvironmentInfo { - return &EnvironmentInfo{ - FilAPI: os.Getenv("FIL_API"), - FilPath: os.Getenv("FIL_PATH"), - GoPath: os.Getenv("GOPATH"), - } -} - -// Disk return information about filesystem the filecoin nodes repo is on. -func (g *Inspector) Disk() (*DiskInfo, error) { - fsr, ok := g.repo.(*repo.FSRepo) - if !ok { - // we are using a in memory repo - return &DiskInfo{ - Free: 0, - Total: 0, - FSType: "0", - }, nil - } - - p, err := fsr.Path() - if err != nil { - return nil, err - } - - dinfo, err := sysi.DiskUsage(p) - if err != nil { - return nil, err - } - - return &DiskInfo{ - Free: dinfo.Free, - Total: dinfo.Total, - FSType: dinfo.FsType, - }, nil -} - -// Memory return information about system meory usage. -func (g *Inspector) Memory() (*MemoryInfo, error) { - meminfo, err := sysi.MemoryInfo() - if err != nil { - return nil, err - } - return &MemoryInfo{ - Swap: meminfo.Swap, - Virtual: meminfo.Used, - }, nil -} - -// Config return the current config values of the filecoin node. -func (g *Inspector) Config() *config.Config { - return g.repo.Config() -} - -// FilecoinVersion returns the version of go-filecoin. -func (g *Inspector) FilecoinVersion() string { - return flags.GitCommit -} diff --git a/cmd/go-filecoin/inspector_test.go b/cmd/go-filecoin/inspector_test.go deleted file mode 100644 index 2a3b893f44..0000000000 --- a/cmd/go-filecoin/inspector_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package commands_test - -import ( - "runtime" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestRuntime(t *testing.T) { - tf.UnitTest(t) - - mr := repo.NewInMemoryRepo() - g := commands.NewInspectorAPI(mr) - rt := g.Runtime() - - assert.Equal(t, runtime.GOOS, rt.OS) - assert.Equal(t, runtime.GOARCH, rt.Arch) - assert.Equal(t, runtime.Version(), rt.Version) - assert.Equal(t, runtime.Compiler, rt.Compiler) - assert.Equal(t, runtime.NumCPU(), rt.NumProc) - assert.Equal(t, runtime.GOMAXPROCS(0), rt.GoMaxProcs) - assert.Equal(t, runtime.NumCgoCall(), rt.NumCGoCalls) -} - -func TestDisk(t *testing.T) { - tf.UnitTest(t) - - mr := repo.NewInMemoryRepo() - g := commands.NewInspectorAPI(mr) - d, err := g.Disk() - - assert.NoError(t, err) - assert.Equal(t, uint64(0), d.Free) - assert.Equal(t, uint64(0), d.Total) - assert.Equal(t, "0", d.FSType) -} - -func TestMemory(t *testing.T) { - tf.UnitTest(t) - - mr := repo.NewInMemoryRepo() - g := commands.NewInspectorAPI(mr) - - _, err := g.Memory() - assert.NoError(t, err) -} - -func TestConfig(t *testing.T) { - tf.UnitTest(t) - - mr := repo.NewInMemoryRepo() - g := commands.NewInspectorAPI(mr) - c := g.Config() - assert.Equal(t, config.NewDefaultConfig(), c) -} diff --git a/cmd/go-filecoin/log.go b/cmd/go-filecoin/log.go deleted file mode 100644 index 04ae89e513..0000000000 --- a/cmd/go-filecoin/log.go +++ /dev/null @@ -1,112 +0,0 @@ -package commands - -import ( - "fmt" - "strings" - - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - logging "github.com/ipfs/go-log/v2" -) - -var loglogger = logging.Logger("commands/log") - -var logCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Interact with the daemon subsystems log output.", - ShortDescription: ` -'go-filecoin log' contains utility commands to affect the subsystems logging -output of a running daemon. -`, - }, - - Subcommands: map[string]*cmds.Command{ - "level": logLevelCmd, - "ls": logLsCmd, - "tail": logTailCmd, - }, -} - -var logTailCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Read subsystems log output.", - ShortDescription: ` -Outputs subsystems log output as it is generated. -`, - }, - - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - r := logging.NewPipeReader() - go func() { - defer r.Close() // nolint: errcheck - <-req.Context.Done() - }() - - return re.Emit(r) - }, -} - -var logLevelCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Change the logging level.", - ShortDescription: ` -Change the verbosity of one or all subsystems log output. This does not affect -the event log. -`, - }, - - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("level", true, false, `The log level, with 'debug' the most verbose and 'panic' the least verbose. - One of: debug, info, warning, error, fatal, panic. - `), - }, - - Options: []cmdkit.Option{ - cmdkit.StringOption("subsystem", "The subsystem logging identifier"), - cmdkit.StringOption("expression", "Subsystem identifier by regular expression"), - }, - - Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - level := strings.ToLower(req.Arguments[0]) - - var s string - if subsystem, ok := req.Options["subsystem"].(string); ok { - if err := logging.SetLogLevel(subsystem, level); err != nil { - return err - } - s = fmt.Sprintf("Changed log level of '%s' to '%s'", subsystem, level) - loglogger.Info(s) - } else if expression, ok := req.Options["expression"].(string); ok { - if err := logging.SetLogLevelRegex(expression, level); err != nil { - return err - } - s = fmt.Sprintf("Changed log level matching expression '%s' to '%s'", subsystem, level) - loglogger.Info(s) - } else { - lvl, err := logging.LevelFromString(level) - if err != nil { - return err - } - logging.SetAllLoggers(lvl) - s = fmt.Sprintf("Changed log level of all subsystems to: %s", level) - loglogger.Info(s) - } - - return cmds.EmitOnce(res, s) - }, - Type: string(""), -} - -var logLsCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "List the logging subsystems.", - ShortDescription: ` -'go-filecoin log ls' is a utility command used to list the logging -subsystems of a running daemon. -`, - }, - Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { - return cmds.EmitOnce(res, logging.GetSubsystems()) - }, - Type: []string{}, -} diff --git a/cmd/go-filecoin/main.go b/cmd/go-filecoin/main.go deleted file mode 100644 index eec25272ba..0000000000 --- a/cmd/go-filecoin/main.go +++ /dev/null @@ -1,387 +0,0 @@ -package commands - -import ( - "context" - "encoding/json" - "fmt" - "io" - "net" - "net/url" - "os" - "syscall" - - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - "github.com/ipfs/go-ipfs-cmds/cli" - cmdhttp "github.com/ipfs/go-ipfs-cmds/http" - ma "github.com/multiformats/go-multiaddr" - manet "github.com/multiformats/go-multiaddr-net" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paths" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -const ( - // OptionAPI is the name of the option for specifying the api port. - OptionAPI = "cmdapiaddr" - - // OptionRepoDir is the name of the option for specifying the directory of the repo. - OptionRepoDir = "repodir" - - // OptionSectorDir is the name of the option for specifying the directory into which staged and sealed sectors will be written. - OptionSectorDir = "sectordir" - - // OptionPresealedSectorDir is the name of the option for specifying the directory from which presealed sectors should be pulled when initializing. - OptionPresealedSectorDir = "presealed-sectordir" - - // OptionDrandConfigAddr is the init option for configuring drand to a given network address at init time - OptionDrandConfigAddr = "drand-config-addr" - - // APIPrefix is the prefix for the http version of the api. - APIPrefix = "/api" - - // OfflineMode tells us if we should try to connect this Filecoin node to the network - OfflineMode = "offline" - - // ELStdout tells the daemon to write event logs to stdout. - ELStdout = "elstdout" - - // AutoSealIntervalSeconds configures the daemon to check for and seal any staged sectors on an interval. - AutoSealIntervalSeconds = "auto-seal-interval-seconds" - - // SwarmAddress is the multiaddr for this Filecoin node - SwarmAddress = "swarmlisten" - - // SwarmPublicRelayAddress is a public address that the filecoin node - // will listen on if it is operating as a relay. We use this to specify - // the public ip:port of a relay node that is sitting behind a static - // NAT mapping. - SwarmPublicRelayAddress = "swarmrelaypublic" - - // BlockTime is the duration string of the block time the daemon will - // run with. TODO: this should eventually be more explicitly grouped - // with testing as we won't be able to set blocktime in production. - BlockTime = "block-time" - - // PropagationDelay is the duration the miner will wait for blocks to arrive before attempting to mine a new one - PropagationDelay = "prop-delay" - - // PeerKeyFile is the path of file containing key to use for new nodes libp2p identity - PeerKeyFile = "peerkeyfile" - - // WalletKeyFile is the path of file containing wallet keys that may be imported on initialization - WalletKeyFile = "wallet-keyfile" - - // MinerActorAddress when set, sets the daemons's miner address to the provided address - MinerActorAddress = "miner-actor-address" - - // GenesisFile is the path of file containing archive of genesis block DAG data - GenesisFile = "genesisfile" - - // Network populates config with network-specific parameters for a known network (e.g. testnet2) - Network = "network" - - // IsRelay when set causes the the daemon to provide libp2p relay - // services allowing other filecoin nodes behind NATs to talk directly. - IsRelay = "is-relay" -) - -func init() { - // add pretty json as an encoding type - cmds.Encoders["pretty-json"] = func(req *cmds.Request) func(io.Writer) cmds.Encoder { - return func(w io.Writer) cmds.Encoder { - enc := json.NewEncoder(w) - enc.SetIndent("", "\t") - return enc - } - } -} - -// command object for the local cli -var RootCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "A decentralized storage network", - Subcommands: ` -START RUNNING FILECOIN - go-filecoin init - Initialize a filecoin repo - go-filecoin config [] - Get and set filecoin config values - go-filecoin daemon - Start a long-running daemon process - go-filecoin wallet - Manage your filecoin wallets - go-filecoin address - Interact with addresses - -STORE AND RETRIEVE DATA - go-filecoin client - Make deals, store data, retrieve data - go-filecoin retrieval-client - Manage retrieval client operations - -MINE - go-filecoin miner - Manage a single miner actor - go-filecoin mining - Manage all mining operations for a node - -VIEW DATA STRUCTURES - go-filecoin chain - Inspect the filecoin blockchain - go-filecoin dag - Interact with IPLD DAG objects - go-filecoin deals - Manage deals made by or with this node - go-filecoin show - Get human-readable representations of filecoin objects - -NETWORK COMMANDS - go-filecoin bootstrap - Interact with bootstrap addresses - go-filecoin dht - Interact with the dht - go-filecoin id - Show info about the network peers - go-filecoin ping ... - Send echo request packets to p2p network members - go-filecoin swarm - Interact with the swarm - go-filecoin stats - Monitor statistics on your network usage - go-filecion drand configure - Configure drand server connection - go-filecoin drand random - retrieve drand randomness - -ACTOR COMMANDS - go-filecoin actor - Interact with actors. Actors are built-in smart contracts - go-filecoin paych - Payment channel operations - -MESSAGE COMMANDS - go-filecoin message - Manage messages - go-filecoin mpool - Manage the message pool - go-filecoin outbox - Manage the outbound message queue - -TOOL COMMANDS - go-filecoin inspect - Show info about the go-filecoin node - go-filecoin leb128 - Leb128 cli encode/decode - go-filecoin log - Interact with the daemon event log output - go-filecoin protocol - Show protocol parameter details - go-filecoin version - Show go-filecoin version information -`, - }, - Options: []cmdkit.Option{ - cmdkit.StringOption(OptionAPI, "set the api port to use"), - cmdkit.StringOption(OptionRepoDir, "set the repo directory, defaults to ~/.filecoin/repo"), - cmdkit.StringOption(cmds.EncLong, cmds.EncShort, "The encoding type the output should be encoded with (pretty-json or json)").WithDefault("pretty-json"), - cmdkit.BoolOption("help", "Show the full command help text."), - cmdkit.BoolOption("h", "Show a short version of the command help text."), - }, - Subcommands: make(map[string]*cmds.Command), -} - -// command object for the daemon -var rootCmdDaemon = &cmds.Command{ - Subcommands: make(map[string]*cmds.Command), -} - -// all top level commands, not available to daemon -var rootSubcmdsLocal = map[string]*cmds.Command{ - "daemon": daemonCmd, - "init": initCmd, - "version": versionCmd, - "leb128": leb128Cmd, -} - -// all top level commands, available on daemon. set during init() to avoid configuration loops. -var rootSubcmdsDaemon = map[string]*cmds.Command{ - "actor": actorCmd, - "address": addrsCmd, - "bootstrap": bootstrapCmd, - "chain": chainCmd, - "config": configCmd, - "client": clientCmd, - "drand": drandCmd, - "dag": dagCmd, - "deals": dealsCmd, - "dht": dhtCmd, - "id": idCmd, - "inspect": inspectCmd, - "leb128": leb128Cmd, - "log": logCmd, - "message": msgCmd, - "miner": minerCmd, - "mining": miningCmd, - "mpool": mpoolCmd, - "outbox": outboxCmd, - "ping": pingCmd, - "protocol": protocolCmd, - "retrieval-client": retrievalClientCmd, - "show": showCmd, - "stats": statsCmd, - "swarm": swarmCmd, - "wallet": walletCmd, - "version": versionCmd, -} - -func init() { - for k, v := range rootSubcmdsLocal { - RootCmd.Subcommands[k] = v - } - - for k, v := range rootSubcmdsDaemon { - RootCmd.Subcommands[k] = v - rootCmdDaemon.Subcommands[k] = v - } -} - -// Run processes the arguments and stdin -func Run(ctx context.Context, args []string, stdin, stdout, stderr *os.File) (int, error) { - err := cli.Run(ctx, RootCmd, args, stdin, stdout, stderr, buildEnv, makeExecutor) - if err == nil { - return 0, nil - } - if exerr, ok := err.(cli.ExitError); ok { - return int(exerr), nil - } - return 1, err -} - -func buildEnv(ctx context.Context, _ *cmds.Request) (cmds.Environment, error) { - return NewClientEnv(ctx), nil -} - -type executor struct { - api string - exec cmds.Executor -} - -func (e *executor) Execute(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if e.api == "" { - return e.exec.Execute(req, re, env) - } - - client := cmdhttp.NewClient(e.api, cmdhttp.ClientWithAPIPrefix(APIPrefix)) - - res, err := client.Send(req) - if err != nil { - if isConnectionRefused(err) { - return cmdkit.Errorf(cmdkit.ErrFatal, "Connection Refused. Is the daemon running?") - } - if cmdKitErr, ok := err.(*cmdkit.Error); ok && cmdKitErr.Code == cmdkit.ErrNormal { - return re.CloseWithError(err) - } - if urlErr, ok := err.(*url.Error); ok && urlErr.Timeout() { - return re.CloseWithError(err) - } - return cmdkit.Errorf(cmdkit.ErrFatal, err.Error()) - } - - // copy received result into cli emitter - err = cmds.Copy(re, res) - if err != nil { - return cmdkit.Errorf(cmdkit.ErrFatal|cmdkit.ErrNormal, err.Error()) - } - return nil -} - -func makeExecutor(req *cmds.Request, env interface{}) (cmds.Executor, error) { - isDaemonRequired := requiresDaemon(req) - var api string - if isDaemonRequired { - var err error - api, err = getAPIAddress(req) - if err != nil { - return nil, err - } - } - - if api == "" && isDaemonRequired { - return nil, ErrMissingDaemon - } - - return &executor{ - api: api, - exec: cmds.NewExecutor(RootCmd), - }, nil -} - -func getAPIAddress(req *cmds.Request) (string, error) { - var rawAddr string - var err error - // second highest precedence is env vars. - if envapi := os.Getenv("FIL_API"); envapi != "" { - rawAddr = envapi - } - - // first highest precedence is cmd flag. - if apiAddress, ok := req.Options[OptionAPI].(string); ok && apiAddress != "" { - rawAddr = apiAddress - } - - // we will read the api file if no other option is given. - if len(rawAddr) == 0 { - repoDir, _ := req.Options[OptionRepoDir].(string) - repoDir, err = paths.GetRepoPath(repoDir) - if err != nil { - return "", err - } - rawAddr, err = repo.APIAddrFromRepoPath(repoDir) - if err != nil { - return "", errors.Wrap(err, "can't find API endpoint address in environment, command-line, or local repo (is the daemon running?)") - } - } - - maddr, err := ma.NewMultiaddr(rawAddr) - if err != nil { - return "", errors.Wrap(err, fmt.Sprintf("unable to convert API endpoint address %s to a multiaddr", rawAddr)) - } - - _, host, err := manet.DialArgs(maddr) - if err != nil { - return "", errors.Wrap(err, fmt.Sprintf("unable to dial API endpoint address %s", maddr)) - } - - return host, nil -} - -func requiresDaemon(req *cmds.Request) bool { - for cmd := range rootSubcmdsLocal { - if len(req.Path) > 0 && req.Path[0] == cmd { - return false - } - } - return true -} - -func isConnectionRefused(err error) bool { - urlErr, ok := err.(*url.Error) - if !ok { - return false - } - - opErr, ok := urlErr.Err.(*net.OpError) - if !ok { - return false - } - - syscallErr, ok := opErr.Err.(*os.SyscallError) - if !ok { - return false - } - return syscallErr.Err == syscall.ECONNREFUSED -} - -var priceOption = cmdkit.StringOption("gas-price", "Price (FIL e.g. 0.00013) to pay for each GasUnit consumed mining this message") -var limitOption = cmdkit.Int64Option("gas-limit", "Maximum GasUnits this message is allowed to consume") -var previewOption = cmdkit.BoolOption("preview", "Preview the Gas cost of this command without actually executing it") - -func parseGasOptions(req *cmds.Request) (types.AttoFIL, gas.Unit, bool, error) { - priceOption := req.Options["gas-price"] - if priceOption == nil { - return types.ZeroAttoFIL, gas.Zero, false, errors.New("gas-price option is required") - } - - price, ok := types.NewAttoFILFromFILString(priceOption.(string)) - if !ok { - return types.ZeroAttoFIL, gas.NewGas(0), false, errors.New("invalid gas price (specify FIL as a decimal number)") - } - - limitOption := req.Options["gas-limit"] - if limitOption == nil { - return types.ZeroAttoFIL, gas.NewGas(0), false, errors.New("gas-limit option is required") - } - - gasLimitInt, ok := limitOption.(int64) - if !ok { - msg := fmt.Sprintf("invalid gas limit: %s", limitOption) - return types.ZeroAttoFIL, gas.NewGas(0), false, errors.New(msg) - } - - preview, _ := req.Options["preview"].(bool) - - return price, gas.NewGas(gasLimitInt), preview, nil -} diff --git a/cmd/go-filecoin/main_test.go b/cmd/go-filecoin/main_test.go deleted file mode 100644 index 80ee9cd829..0000000000 --- a/cmd/go-filecoin/main_test.go +++ /dev/null @@ -1,26 +0,0 @@ -package commands - -import ( - "context" - "testing" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - cmds "github.com/ipfs/go-ipfs-cmds" - "github.com/stretchr/testify/assert" -) - -func TestRequiresDaemon(t *testing.T) { - tf.UnitTest(t) - - reqWithDaemon, err := cmds.NewRequest(context.Background(), []string{"chain", "head"}, nil, []string{}, nil, rootCmdDaemon) - assert.NoError(t, err) - assert.True(t, requiresDaemon(reqWithDaemon)) - - reqWithoutDaemon, err := cmds.NewRequest(context.Background(), []string{"daemon"}, nil, []string{}, nil, RootCmd) - assert.NoError(t, err) - assert.False(t, requiresDaemon(reqWithoutDaemon)) - - reqSubcmdDaemon, err := cmds.NewRequest(context.Background(), []string{"leb128", "decode"}, nil, []string{"A=="}, nil, RootCmd) - assert.NoError(t, err) - assert.False(t, requiresDaemon(reqSubcmdDaemon)) -} diff --git a/cmd/go-filecoin/message.go b/cmd/go-filecoin/message.go deleted file mode 100644 index 49ec3d06fd..0000000000 --- a/cmd/go-filecoin/message.go +++ /dev/null @@ -1,285 +0,0 @@ -package commands - -import ( - "context" - "encoding/json" - "fmt" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/util/adt" - "github.com/ipfs/go-cid" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cst" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -var msgCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Send and monitor messages", - }, - Subcommands: map[string]*cmds.Command{ - "send": msgSendCmd, - "sendsigned": signedMsgSendCmd, - "status": msgStatusCmd, - "wait": msgWaitCmd, - }, -} - -// MessageSendResult is the return type for message send command -type MessageSendResult struct { - Cid cid.Cid - GasUsed gas.Unit - Preview bool -} - -var msgSendCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Send a message", // This feels too generic... - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("target", true, false, "Address of the actor to send the message to"), - cmdkit.StringArg("method", false, false, "The method to invoke on the target actor"), - }, - Options: []cmdkit.Option{ - cmdkit.StringOption("value", "Value to send with message in FIL"), - cmdkit.StringOption("from", "Address to send message from"), - priceOption, - limitOption, - previewOption, - // TODO: (per dignifiedquire) add an option to set the nonce and method explicitly - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - target, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - rawVal := req.Options["value"] - if rawVal == nil { - rawVal = "0" - } - val, ok := types.NewAttoFILFromFILString(rawVal.(string)) - if !ok { - return errors.New("mal-formed value") - } - - fromAddr, err := fromAddrOrDefault(req, env) - if err != nil { - return err - } - - gasPrice, gasLimit, preview, err := parseGasOptions(req) - if err != nil { - return err - } - - methodID := builtin.MethodSend - methodInput, ok := req.Options["method"].(uint64) - if ok { - methodID = abi.MethodNum(methodInput) - } - - if preview { - usedGas, err := GetPorcelainAPI(env).MessagePreview( - req.Context, - fromAddr, - target, - methodID, - ) - if err != nil { - return err - } - return re.Emit(&MessageSendResult{ - Cid: cid.Cid{}, - GasUsed: usedGas, - Preview: true, - }) - } - - c, _, err := GetPorcelainAPI(env).MessageSend( - req.Context, - fromAddr, - target, - val, - gasPrice, - gasLimit, - methodID, - adt.Empty, - ) - if err != nil { - return err - } - - return re.Emit(&MessageSendResult{ - Cid: c, - GasUsed: gas.NewGas(0), - Preview: false, - }) - }, - Type: &MessageSendResult{}, -} - -var signedMsgSendCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Send a signed message", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("message", true, false, "Signed Json message"), - }, - Options: []cmdkit.Option{}, - - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - msg := req.Arguments[0] - - m := types.SignedMessage{} - - bmsg := []byte(msg) - err := json.Unmarshal(bmsg, &m) - if err != nil { - return err - } - signed := &m - - c, _, err := GetPorcelainAPI(env).SignedMessageSend( - req.Context, - signed, - ) - if err != nil { - return err - } - - return re.Emit(&MessageSendResult{ - Cid: c, - GasUsed: gas.NewGas(0), - Preview: false, - }) - }, - Type: &MessageSendResult{}, -} - -// WaitResult is the result of a message wait call. -type WaitResult struct { - Message *types.SignedMessage - Receipt *vm.MessageReceipt - Signature vm.ActorMethodSignature -} - -var msgWaitCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Wait for a message to appear in a mined block", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("cid", true, false, "CID of the message to wait for"), - }, - Options: []cmdkit.Option{ - cmdkit.BoolOption("message", "Print the whole message").WithDefault(true), - cmdkit.BoolOption("receipt", "Print the whole message receipt").WithDefault(true), - cmdkit.BoolOption("return", "Print the return value from the receipt").WithDefault(false), - cmdkit.Uint64Option("lookback", "Number of previous tipsets to be checked before waiting").WithDefault(msg.DefaultMessageWaitLookback), - cmdkit.StringOption("timeout", "Maximum time to wait for message. e.g., 300ms, 1.5h, 2h45m.").WithDefault("10m"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - msgCid, err := cid.Parse(req.Arguments[0]) - if err != nil { - return errors.Wrap(err, "invalid cid "+req.Arguments[0]) - } - - fmt.Printf("waiting for: %s\n", req.Arguments[0]) - - found := false - - timeoutDuration, err := time.ParseDuration(req.Options["timeout"].(string)) - if err != nil { - return errors.Wrap(err, "Invalid timeout string") - } - - lookback, _ := req.Options["lookback"].(uint64) - - ctx, cancel := context.WithTimeout(req.Context, timeoutDuration) - defer cancel() - - err = GetPorcelainAPI(env).MessageWait(ctx, msgCid, lookback, func(blk *block.Block, msg *types.SignedMessage, receipt *vm.MessageReceipt) error { - found = true - sig, err := GetPorcelainAPI(env).ActorGetSignature(req.Context, msg.Message.To, msg.Message.Method) - if err != nil && err != cst.ErrNoMethod && err != cst.ErrNoActorImpl { - return errors.Wrap(err, "Couldn't get signature for message") - } - - res := WaitResult{ - Message: msg, - Receipt: receipt, - // Signature is required to decode the output. - Signature: sig, - } - re.Emit(&res) // nolint: errcheck - - return nil - }) - - if err != nil && !found { - return err - } - return nil - }, - Type: WaitResult{}, -} - -// MessageStatusResult is the status of a message on chain or in the message queue/pool -type MessageStatusResult struct { - InPool bool // Whether the message is found in the mpool - PoolMsg *types.SignedMessage - InOutbox bool // Whether the message is found in the outbox - OutboxMsg *message.Queued - ChainMsg *msg.ChainMessage -} - -var msgStatusCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show status of a message", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("cid", true, false, "CID of the message to inspect"), - }, - Options: []cmdkit.Option{}, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - msgCid, err := cid.Parse(req.Arguments[0]) - if err != nil { - return errors.Wrap(err, "invalid cid "+req.Arguments[0]) - } - - api := GetPorcelainAPI(env) - result := MessageStatusResult{} - - // Look in message pool - result.PoolMsg, result.InPool = api.MessagePoolGet(msgCid) - - // Look in outbox - for _, addr := range api.OutboxQueues() { - for _, qm := range api.OutboxQueueLs(addr) { - cid, err := qm.Msg.Cid() - if err != nil { - return err - } - if cid.Equals(msgCid) { - result.InOutbox = true - result.OutboxMsg = qm - } - } - } - - return re.Emit(&result) - }, - Type: &MessageStatusResult{}, -} diff --git a/cmd/go-filecoin/message_integration_test.go b/cmd/go-filecoin/message_integration_test.go deleted file mode 100644 index fabc546de8..0000000000 --- a/cmd/go-filecoin/message_integration_test.go +++ /dev/null @@ -1,265 +0,0 @@ -package commands_test - -import ( - "context" - "encoding/json" - "strconv" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/fixtures/fortest" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestMessageSend(t *testing.T) { - t.Skip("This can be unskipped with fake proofs") - tf.IntegrationTest(t) - ctx := context.Background() - builder := test.NewNodeBuilder(t) - defaultAddr := fortest.TestAddresses[0] - - cs := node.FixtureChainSeed(t) - builder.WithGenesisInit(cs.GenesisInitFunc) - builder.WithConfig(cs.MinerConfigOpt(0)) - builder.WithConfig(node.DefaultAddressConfigOpt(defaultAddr)) - builder.WithInitOpt(cs.KeyInitOpt(1)) - builder.WithInitOpt(cs.KeyInitOpt(0)) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - _, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - - from, err := n.PorcelainAPI.WalletDefaultAddress() // this should = fixtures.TestAddresses[0] - require.NoError(t, err) - - t.Log("[failure] invalid target") - cmdClient.RunFail( - ctx, - address.ErrUnknownNetwork.Error(), - "message", "send", - "--from", from.String(), - "--gas-price", "0", "--gas-limit", "300", - "--value=10", "xyz", - ) - - t.Log("[success] with from") - cmdClient.RunSuccess( - ctx, - "message", "send", - "--from", from.String(), - "--gas-price", "1", - "--gas-limit", "300", - fortest.TestAddresses[3].String(), - ) - - t.Log("[success] with from and int value") - cmdClient.RunSuccess( - ctx, - "message", "send", - "--from", from.String(), - "--gas-price", "1", - "--gas-limit", "300", - "--value", "10", - fortest.TestAddresses[3].String(), - ) - - t.Log("[success] with from and decimal value") - cmdClient.RunSuccess( - ctx, - "message", "send", - "--from", from.String(), - "--gas-price", "1", - "--gas-limit", "300", - "--value", "5.5", - fortest.TestAddresses[3].String(), - ) -} - -func TestMessageWait(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - - seed, genCfg, fakeClock, chainClock := test.CreateBootstrapSetup(t) - node := test.CreateBootstrapMiner(ctx, t, seed, chainClock, genCfg) - - cmdClient, clientStop := test.RunNodeAPI(ctx, node, t) - defer clientStop() - - t.Run("[success] transfer only", func(t *testing.T) { - var sendResult commands.MessageSendResult - cmdClient.RunMarshaledJSON(ctx, &sendResult, "message", "send", - "--gas-price", "1", - "--gas-limit", "300", - fortest.TestAddresses[1].String(), - ) - - // Fail with timeout before the message has been mined - cmdClient.RunFail( - ctx, - "deadline exceeded", - "message", "wait", - "--message=false", - "--receipt=false", - "--timeout=100ms", - "--return", - sendResult.Cid.String(), - ) - - test.RequireMineOnce(ctx, t, fakeClock, node) - - var waitResult commands.WaitResult - cmdClient.RunMarshaledJSON( - ctx, - &waitResult, - "message", "wait", - "--message=false", - "--receipt=false", - "--timeout=1m", - "--return", - sendResult.Cid.String(), - ) - assert.Equal(t, fortest.TestAddresses[1], waitResult.Message.Message.To) - }) - - t.Run("[success] lookback", func(t *testing.T) { - var sendResult commands.MessageSendResult - cmdClient.RunMarshaledJSON(ctx, &sendResult, "message", "send", - "--from", fortest.TestAddresses[0].String(), - "--gas-price", "1", - "--gas-limit", "300", - fortest.TestAddresses[1].String(), - ) - - // mine 4 times so message is on the chain a few tipsets back - for i := 0; i < 4; i++ { - test.RequireMineOnce(ctx, t, fakeClock, node) - } - - // Fail with timeout because the message is too early for the default lookback (2) - cmdClient.RunFail( - ctx, - "deadline exceeded", - "message", "wait", - "--message=false", - "--receipt=false", - "--timeout=1s", - "--return", - sendResult.Cid.String(), - ) - - // succeed by specifying a higher lookback - var waitResult commands.WaitResult - cmdClient.RunMarshaledJSON( - ctx, - &waitResult, - "message", "wait", - "--message=false", - "--receipt=false", - "--lookback=10", - "--timeout=1m", - "--return", - sendResult.Cid.String(), - ) - }) -} - -func TestMessageSendBlockGasLimit(t *testing.T) { - tf.IntegrationTest(t) - t.Skip("Unskip using fake proofs") - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - defaultAddr := fortest.TestAddresses[0] - - buildWithMiner(t, builder) - builder.WithConfig(node.DefaultAddressConfigOpt(defaultAddr)) - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - doubleTheBlockGasLimit := strconv.Itoa(int(types.BlockGasLimit) * 2) - halfTheBlockGasLimit := strconv.Itoa(int(types.BlockGasLimit) / 2) - result := struct{ Messages types.TxMeta }{} - - t.Run("when the gas limit is above the block limit, the message fails", func(t *testing.T) { - cmdClient.RunFail( - ctx, - "block gas limit", - "message", "send", - "--gas-price", "1", "--gas-limit", doubleTheBlockGasLimit, - "--value=10", fortest.TestAddresses[1].String(), - ) - }) - - t.Run("when the gas limit is below the block limit, the message succeeds", func(t *testing.T) { - cmdClient.RunSuccess( - ctx, - "message", "send", - "--gas-price", "1", "--gas-limit", halfTheBlockGasLimit, - "--value=10", fortest.TestAddresses[1].String(), - ) - - blk, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - blkCid := blk.Cid().String() - - blockInfo := cmdClient.RunSuccess(ctx, "show", "header", blkCid, "--enc", "json").ReadStdoutTrimNewlines() - - require.NoError(t, json.Unmarshal([]byte(blockInfo), &result)) - assert.NotEmpty(t, result.Messages.SecpRoot, "msg under the block gas limit passes validation and is run in the block") - }) -} - -func TestMessageStatus(t *testing.T) { - tf.IntegrationTest(t) - t.Skip("Unskip with fake proofs") - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - - buildWithMiner(t, builder) - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - t.Run("queue then on chain", func(t *testing.T) { - msg := cmdClient.RunSuccess( - ctx, - "message", "send", - "--from", fortest.TestAddresses[0].String(), - "--gas-price", "1", "--gas-limit", "300", - "--value=1234", - fortest.TestAddresses[1].String(), - ) - - msgcid := msg.ReadStdoutTrimNewlines() - status := cmdClient.RunSuccess(ctx, "message", "status", msgcid).ReadStdout() - - assert.Contains(t, status, "In outbox") - assert.Contains(t, status, "In mpool") - assert.NotContains(t, status, "On chain") // not found on chain (yet) - assert.Contains(t, status, "1234") // the "value" - - _, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - - status = cmdClient.RunSuccess(ctx, "message", "status", msgcid).ReadStdout() - - assert.NotContains(t, status, "In outbox") - assert.NotContains(t, status, "In mpool") - assert.Contains(t, status, "On chain") - assert.Contains(t, status, "1234") // the "value" - - status = cmdClient.RunSuccess(ctx, "message", "status", "QmPVkJMTeRC6iBByPWdrRkD3BE5UXsj5HPzb4kPqL186mS").ReadStdout() - assert.NotContains(t, status, "In outbox") - assert.NotContains(t, status, "In mpool") - assert.NotContains(t, status, "On chain") - }) -} diff --git a/cmd/go-filecoin/miner.go b/cmd/go-filecoin/miner.go deleted file mode 100644 index 4e25fb4081..0000000000 --- a/cmd/go-filecoin/miner.go +++ /dev/null @@ -1,326 +0,0 @@ -package commands - -import ( - "fmt" - "math/big" - - address "github.com/filecoin-project/go-address" - "github.com/filecoin-project/sector-storage/ffiwrapper" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - cid "github.com/ipfs/go-cid" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -var minerCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Manage a single miner actor", - }, - Subcommands: map[string]*cmds.Command{ - "create": minerCreateCmd, - "status": minerStatusCommand, - "set-price": minerSetPriceCmd, - "update-peerid": minerUpdatePeerIDCmd, - "set-worker": minerSetWorkerAddressCmd, - }, -} - -// MinerCreateResult is the type returned when creating a miner. -type MinerCreateResult struct { - Address address.Address - GasUsed gas.Unit - Preview bool -} - -var minerCreateCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Create a new file miner with FIL", - ShortDescription: `Issues a new message to the network to create the miner, then waits for the -message to be mined as this is required to return the address of the new miner. -Collateral will be committed at the rate of 0.001FIL per sector. When the -miner's collateral drops below 0.001FIL, the miner will not be able to commit -additional sectors.`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("collateral", true, false, "The amount of collateral, in FIL."), - }, - Options: []cmdkit.Option{ - cmdkit.StringOption("sectorsize", "size of the sectors which this miner will commit, in bytes"), - cmdkit.StringOption("from", "address to send from"), - cmdkit.StringOption("peerid", "Base58-encoded libp2p peer ID that the miner will operate"), - priceOption, - limitOption, - previewOption, - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - var err error - - sectorSize, err := optionalSectorSizeWithDefault(req.Options["sectorsize"], constants.DevSectorSize) - if err != nil { - return err - } - - sealProofType, err := ffiwrapper.SealProofTypeFromSectorSize(sectorSize) - if err != nil { - return err - } - - fromAddr, err := fromAddrOrDefault(req, env) - if err != nil { - return err - } - - var pid peer.ID - peerid := req.Options["peerid"] - if peerid != nil { - pid, err = peer.Decode(peerid.(string)) - if err != nil { - return errors.Wrap(err, "invalid peer id") - } - } - if pid == "" { - pid = GetPorcelainAPI(env).NetworkGetPeerID() - } - - collateral, ok := types.NewAttoFILFromFILString(req.Arguments[0]) - if !ok { - return ErrInvalidCollateral - } - - gasPrice, gasLimit, preview, err := parseGasOptions(req) - if err != nil { - return err - } - - if preview { - usedGas, err := GetPorcelainAPI(env).MinerPreviewCreate( - req.Context, - fromAddr, - sectorSize, - pid, - ) - if err != nil { - return err - } - return re.Emit(&MinerCreateResult{ - Address: address.Undef, - GasUsed: usedGas, - Preview: true, - }) - } - - addr, err := GetPorcelainAPI(env).MinerCreate( - req.Context, - fromAddr, - gasPrice, - gasLimit, - sealProofType, - pid, - collateral, - ) - if err != nil { - return errors.Wrap(err, "Could not create miner. Please consult the documentation to setup your wallet and genesis block correctly") - } - - return re.Emit(&MinerCreateResult{ - Address: addr, - GasUsed: gas.NewGas(0), - Preview: false, - }) - }, - Type: &MinerCreateResult{}, -} - -// MinerSetPriceResult is the return type for miner set-price command -type MinerSetPriceResult struct { - MinerAddress address.Address - Price types.AttoFIL -} - -var minerSetPriceCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Set the minimum price for storage", - ShortDescription: `Sets the mining.minimumPrice in config and creates a new ask for the given price. -This command waits for the ask to be mined.`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("storageprice", true, false, "The new price of storage in FIL per byte per block"), - cmdkit.StringArg("duration", true, false, "How long this ask is valid for in epochs"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - price, ok := types.NewAttoFILFromFILString(req.Arguments[0]) - if !ok { - return ErrInvalidPrice - } - - expiry, ok := big.NewInt(0).SetString(req.Arguments[1], 10) - if !ok { - return fmt.Errorf("expiry must be a valid integer") - } - - err := GetStorageAPI(env).AddAsk(price, abi.ChainEpoch(expiry.Uint64())) - if err != nil { - return err - } - - minerAddr, err := GetBlockAPI(env).MinerAddress() - if err != nil { - return err - } - - return re.Emit(&MinerSetPriceResult{minerAddr, price}) - }, - Type: &MinerSetPriceResult{}, -} - -// MinerUpdatePeerIDResult is the return type for miner update-peerid command -type MinerUpdatePeerIDResult struct { - Cid cid.Cid - GasUsed gas.Unit - Preview bool -} - -var minerUpdatePeerIDCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Change the libp2p identity that a miner is operating", - ShortDescription: `Issues a new message to the network to update the miner's libp2p identity.`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("address", true, false, "Miner address to update peer ID for"), - cmdkit.StringArg("peerid", true, false, "Base58-encoded libp2p peer ID that the miner will operate"), - }, - Options: []cmdkit.Option{ - cmdkit.StringOption("from", "Address to send from"), - priceOption, - limitOption, - previewOption, - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - minerAddr, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - fromAddr, err := fromAddrOrDefault(req, env) - if err != nil { - return err - } - - newPid, err := peer.Decode(req.Arguments[1]) - if err != nil { - return err - } - - gasPrice, gasLimit, preview, err := parseGasOptions(req) - if err != nil { - return err - } - - if preview { - usedGas, err := GetPorcelainAPI(env).MessagePreview( - req.Context, - fromAddr, - minerAddr, - builtin.MethodsMiner.ChangePeerID, - newPid, - ) - if err != nil { - return err - } - - return re.Emit(&MinerUpdatePeerIDResult{ - Cid: cid.Cid{}, - GasUsed: usedGas, - Preview: true, - }) - } - - params := miner.ChangePeerIDParams{NewID: newPid} - - c, _, err := GetPorcelainAPI(env).MessageSend( - req.Context, - fromAddr, - minerAddr, - types.ZeroAttoFIL, - gasPrice, - gasLimit, - builtin.MethodsMiner.ChangePeerID, - ¶ms, - ) - if err != nil { - return err - } - - return re.Emit(&MinerUpdatePeerIDResult{ - Cid: c, - GasUsed: gas.NewGas(0), - Preview: false, - }) - }, - Type: &MinerUpdatePeerIDResult{}, -} - -var minerStatusCommand = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Get the status of a miner", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - minerAddr, err := optionalAddr(req.Arguments[0]) - if err != nil { - return err - } - - porcelainAPI := GetPorcelainAPI(env) - status, err := porcelainAPI.MinerGetStatus(req.Context, minerAddr, porcelainAPI.ChainHeadKey()) - if err != nil { - return err - } - return re.Emit(status) - }, - Type: porcelain.MinerStatus{}, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("miner", true, false, "A miner actor address"), - }, -} - -var minerSetWorkerAddressCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Set the address of the miner worker. Returns a message CID", - ShortDescription: "Set the address of the miner worker to the provided address. When a miner is created, this address defaults to the miner owner. Use this command to change the default. Returns a message CID to wait for the message to appear on chain.", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("new-address", true, false, "The address of the new miner worker."), - }, - Options: []cmdkit.Option{ - priceOption, - limitOption, - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - newWorker, err := address.NewFromString(req.Arguments[0]) - if err != nil { - return err - } - - gasPrice, gasLimit, _, err := parseGasOptions(req) - if err != nil { - return err - } - - msgCid, err := GetPorcelainAPI(env).MinerSetWorkerAddress(req.Context, newWorker, gasPrice, gasLimit) - if err != nil { - return err - } - - return re.Emit(msgCid) - }, - Type: cid.Cid{}, -} diff --git a/cmd/go-filecoin/miner_daemon_test.go b/cmd/go-filecoin/miner_daemon_test.go deleted file mode 100644 index 55dcb159bf..0000000000 --- a/cmd/go-filecoin/miner_daemon_test.go +++ /dev/null @@ -1,423 +0,0 @@ -package commands_test - -import ( - "bufio" - "context" - "encoding/json" - "fmt" - "io/ioutil" - "math/big" - "strings" - "sync" - "testing" - "time" - - address "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - specsbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/fixtures/fortest" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/fastesting" - "github.com/filecoin-project/go-filecoin/tools/fast/series" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" -) - -func TestMinerHelp(t *testing.T) { - t.Skip("Long term solution: #3642") - tf.IntegrationTest(t) - - t.Run("--help shows general miner help", func(t *testing.T) { - - expected := []string{ - "miner create - Create a new file miner with FIL", - "miner owner - Show the actor address of ", - "miner power - Get the power of a miner versus the total storage market power", - "miner set-price - Set the minimum price for storage", - "miner update-peerid
- Change the libp2p identity that a miner is operating", - } - - result := runHelpSuccess(t, "miner", "--help") - for _, elem := range expected { - assert.Contains(t, result, elem) - } - }) - - t.Run("update-peerid --help shows update-peerid help", func(t *testing.T) { - - result := runHelpSuccess(t, "miner", "update-peerid", "--help") - assert.Contains(t, result, "Issues a new message to the network to update the miner's libp2p identity.") - }) - - t.Run("owner --help shows owner help", func(t *testing.T) { - - result := runHelpSuccess(t, "miner", "owner", "--help") - assert.Contains(t, result, "Given miner address, output the address of the actor that owns the miner.") - }) - - t.Run("create --help shows create help", func(t *testing.T) { - - expected := []string{ - "Issues a new message to the network to create the miner, then waits for the", - "message to be mined as this is required to return the address of the new miner.", - "Collateral will be committed at the rate of 0.001FIL per sector. When the", - "miner's collateral drops below 0.001FIL, the miner will not be able to commit", - "additional sectors.", - } - - result := runHelpSuccess(t, "miner", "create", "--help") - for _, elem := range expected { - assert.Contains(t, result, elem) - } - }) - t.Run("set-worker --help shows set-worker help", func(t *testing.T) { - expected := []string{ - "go-filecoin miner set-worker - Set the address of the miner worker", - "go-filecoin miner set-worker [--gas-price=] [--gas-limit=] [--] ", - " - The address of the new miner worker.", - "--gas-price string - Price (FIL e.g. 0.00013) to pay for each GasUnit consumed mining this message.", - "--gas-limit uint64 - Maximum GasUnits this message is allowed to consume.", - "Set the address of the miner worker to the provided address. When a miner is created, this address defaults to the miner owner. Use this command to change the default.", - } - result := runHelpSuccess(t, "miner", "set-worker", "--help") - for _, elem := range expected { - assert.Contains(t, result, elem) - } - }) - t.Run("worker --help shows worker help", func(t *testing.T) { - result := runHelpSuccess(t, "miner", "worker", "--help") - assert.Contains(t, result, "go-filecoin miner worker - Show the address of the miner worker") - }) -} - -func runHelpSuccess(t *testing.T, args ...string) string { - fi, err := ioutil.TempFile("", "gengentest") - if err != nil { - t.Fatal(err) - } - - if _, err = gengen.GenGenesisCar(minerDaemonTestConfig(t), fi); err != nil { - t.Fatal(err) - } - - _ = fi.Close() - d := th.NewDaemon(t, th.GenesisFile(fi.Name())).Start() - defer d.ShutdownSuccess() - - op := d.RunSuccess(args...) - return op.ReadStdoutTrimNewlines() -} - -func TestMinerCreate(t *testing.T) { - t.Skip("Long term solution: #3642") - tf.IntegrationTest(t) - - testAddr := fortest.TestAddresses[2] - t.Run("success", func(t *testing.T) { - - var err error - var addr address.Address - - tf := func(fromAddress address.Address, pid peer.ID) { - d1 := makeTestDaemonWithMinerAndStart(t) - defer d1.ShutdownSuccess() - - d := th.NewDaemon(t, th.KeyFile(fortest.KeyFilePaths()[2])).Start() - defer d.ShutdownSuccess() - - d1.ConnectSuccess(d) - - args := []string{"miner", "create", "--from", fromAddress.String(), "--gas-price", "1", "--gas-limit", "300"} - - if pid.Pretty() != peer.ID("").Pretty() { - args = append(args, "--peerid", pid.Pretty()) - } - - collateral := specsbig.Mul(specsbig.NewInt(int64(1000000*constants.DevSectorSize)), abi.NewTokenAmount(10)) - args = append(args, collateral.String()) - - var wg sync.WaitGroup - - wg.Add(1) - go func() { - miner := d.RunSuccess(args...) - addr, err = address.NewFromString(strings.Trim(miner.ReadStdout(), "\n")) - assert.NoError(t, err) - assert.NotEqual(t, addr, address.Undef) - wg.Done() - }() - - // ensure mining runs after the command in our goroutine - d1.MineAndPropagate(time.Second, d) - wg.Wait() - - // expect address to have been written in config - config := d.RunSuccess("config mining.minerAddress") - assert.Contains(t, config.ReadStdout(), addr.String()) - } - - tf(testAddr, peer.ID("")) - - // Will accept a peer ID if one is provided - tf(testAddr, th.RequireRandomPeerID(t)) - }) - - t.Run("unsupported sector size", func(t *testing.T) { - d := th.NewDaemon(t).Start() - defer d.ShutdownSuccess() - - d.CreateAddress() - - d.RunFail("unsupported sector size", - "miner", "create", "20", - "--sectorsize", "42", - ) - }) - - t.Run("validation failure", func(t *testing.T) { - - d := th.NewDaemon(t).Start() - defer d.ShutdownSuccess() - - d.CreateAddress() - - d.RunFail("invalid sector size", - "miner", "create", "20", - "--sectorsize", "ninetybillion", - ) - d.RunFail("invalid peer id", - "miner", "create", - "--from", testAddr.String(), "--gas-price", "1", "--gas-limit", "300", "--peerid", "flarp", "20", - ) - d.RunFail("invalid from address", - "miner", "create", - "--from", "hello", "--gas-price", "1", "--gas-limit", "1000000", "20", - ) - d.RunFail("invalid collateral", - "miner", "create", - "--from", testAddr.String(), "--gas-price", "1", "--gas-limit", "100", "2f", - ) - }) -} - -func TestMinerSetPrice(t *testing.T) { - t.Skip("Long term solution: #3642") - tf.IntegrationTest(t) - - d1 := th.NewDaemon(t, - th.WithMiner(fortest.TestMiners[0]), - th.KeyFile(fortest.KeyFilePaths()[0]), - th.DefaultAddress(fortest.TestAddresses[0])).Start() - defer d1.ShutdownSuccess() - - d1.RunSuccess("mining", "start") - - setPrice := d1.RunSuccess("miner", "set-price", "62", "6", "--gas-price", "1", "--gas-limit", "300") - assert.Contains(t, setPrice.ReadStdoutTrimNewlines(), fmt.Sprintf("Set price for miner %s to 62.", fortest.TestMiners[0])) - - configuredPrice := d1.RunSuccess("config", "mining.storagePrice") - - assert.Equal(t, `"62"`, configuredPrice.ReadStdoutTrimNewlines()) -} - -func TestMinerCreateSuccess(t *testing.T) { - t.Skip("Long term solution: #3642") - tf.IntegrationTest(t) - - ctx, env := fastesting.NewTestEnvironment(context.Background(), t, fast.FilecoinOpts{}) - defer func() { - require.NoError(t, env.Teardown(ctx)) - }() - - minerNode := env.RequireNewNodeWithFunds(1000) - - series.CtxMiningNext(ctx, 1) - minerAddress := requireMinerCreate(ctx, t, env, minerNode) - - assert.NotEqual(t, address.Undef, minerAddress) -} - -func requireMinerCreate(ctx context.Context, t *testing.T, env *fastesting.TestEnvironment, minerNode *fast.Filecoin) address.Address { - - pparams, err := minerNode.Protocol(ctx) - require.NoError(t, err) - - sinfo := pparams.SupportedSectors[0] - - minerAddress, err := minerNode.MinerCreate(ctx, big.NewInt(1), fast.AOSectorSize(sinfo.Size), fast.AOPrice(big.NewFloat(1.0)), fast.AOLimit(300)) - require.NoError(t, err) - - return minerAddress -} - -func TestMinerCreateChargesGas(t *testing.T) { - t.Skip("Long term solution: #3642") - tf.IntegrationTest(t) - t.Skip("new runtime") - - // miningMinerOwnerAddr := fixtures.TestAddresses[0] - - // d1 := makeTestDaemonWithMinerAndStart(t) - // defer d1.ShutdownSuccess() - // d := th.NewDaemon(t, th.KeyFile(fixtures.KeyFilePaths()[2])).Start() - // defer d.ShutdownSuccess() - // d1.ConnectSuccess(d) - // var wg sync.WaitGroup - - // // make sure the FIL shows up in the MinerOwnerAccount - // startingBalance := queryBalance(t, d, miningMinerOwnerAddr) - - // wg.Add(1) - // go func() { - // testMiner := d.RunSuccess("miner", "create", "--from", fixtures.TestAddresses[2], "--gas-price", "333", "--gas-limit", "100", "200") - // addr, err := address.NewFromString(strings.Trim(testMiner.ReadStdout(), "\n")) - // assert.NoError(t, err) - // assert.NotEqual(t, addr, address.Undef) - // wg.Done() - // }() - // // ensure mining runs after the command in our goroutine - // d1.MineAndPropagate(time.Second, d) - // wg.Wait() - - // expectedBlockReward := consensus.NewDefaultBlockRewarder().BlockRewardAmount() - // expectedPrice := types.NewAttoFILFromFIL(333) - // expectedGasCost := big.NewInt(100) - // expectedBalance := expectedBlockReward.Add(expectedPrice.MulBigInt(expectedGasCost)) - // newBalance := queryBalance(t, d, miningMinerOwnerAddr) - // assert.Equal(t, expectedBalance.String(), newBalance.Sub(startingBalance).String()) -} - -// func queryBalance(t *testing.T, d *th.TestDaemon, actorAddr address.Address) types.AttoFIL { -// output := d.RunSuccess("actor", "ls", "--enc", "json") -// result := output.ReadStdoutTrimNewlines() -// for _, line := range bytes.Split([]byte(result), []byte{'\n'}) { -// var a commands.ActorView -// err := json.Unmarshal(line, &a) -// require.NoError(t, err) -// if a.Address == actorAddr.String() { -// return a.Balance -// } -// } -// t.Fail() -// return types.ZeroAttoFIL -// } - -func TestMinerStatus(t *testing.T) { - t.Skip("Long term solution: #3642") - tf.IntegrationTest(t) - - fi, err := ioutil.TempFile("", "gengentest") - if err != nil { - t.Fatal(err) - } - - if _, err = gengen.GenGenesisCar(minerDaemonTestConfig(t), fi); err != nil { - t.Fatal(err) - } - - _ = fi.Close() - - d := th.NewDaemon(t, th.GenesisFile(fi.Name())).Start() - defer d.ShutdownSuccess() - - actorLsOutput := d.RunSuccess("actor", "ls") - - scanner := bufio.NewScanner(strings.NewReader(actorLsOutput.ReadStdout())) - var addressStruct struct{ Address string } - - for scanner.Scan() { - line := scanner.Text() - if strings.Contains(line, "MinerActor") { - err = json.Unmarshal([]byte(line), &addressStruct) - assert.NoError(t, err) - break - } - } - - powerOutput := d.RunSuccess("miner", "status", addressStruct.Address) - - power := powerOutput.ReadStdoutTrimNewlines() - - assert.NoError(t, err) - assert.Equal(t, "3072 / 6144", power) -} - -func minerDaemonTestConfig(t *testing.T) *gengen.GenesisCfg { - - commCfgs, err := gengen.MakeCommitCfgs(3) - require.NoError(t, err) - return &gengen.GenesisCfg{ - Seed: 0, - KeysToGen: 4, - PreallocatedFunds: []string{ - "0", - "0", - "10", - "50", - }, - Miners: []*gengen.CreateStorageMinerConfig{ - { - Owner: 0, - CommittedSectors: commCfgs, - SealProofType: constants.DevSealProofType, - }, - { - Owner: 1, - CommittedSectors: commCfgs, - SealProofType: constants.DevSealProofType, - }, - }, - Network: "gfctest", - Time: 123456789, - } -} - -func TestMinerSetWorker(t *testing.T) { - t.Skip("Long term solution: #3642") - - tf.IntegrationTest(t) - ctx, env := fastesting.NewTestEnvironment(context.Background(), t, fast.FilecoinOpts{}) - defer func() { - require.NoError(t, env.Teardown(ctx)) - }() - - minerNode := env.RequireNewNodeWithFunds(1000) - newAddr := vmaddr.NewForTestGetter()() - - t.Run("fails if there is no miner worker", func(t *testing.T) { - _, err := minerNode.MinerSetWorker(ctx, newAddr, fast.AOPrice(big.NewFloat(1.0)), fast.AOLimit(300)) - require.NotNil(t, err) - - series.CtxMiningOnce(ctx) - - lastErr, err := minerNode.LastCmdStdErrStr() - require.NoError(t, err) - assert.Contains(t, lastErr, "actor not found") - }) - - t.Run("succceeds if there is a miner", func(t *testing.T) { - series.CtxMiningNext(ctx, 1) - minerAddr := requireMinerCreate(ctx, t, env, minerNode) - - msgCid, err := minerNode.MinerSetWorker(ctx, newAddr, fast.AOPrice(big.NewFloat(1.0)), fast.AOLimit(300)) - require.NoError(t, err) - - series.CtxMiningOnce(ctx) - - resp, err := minerNode.MessageWait(ctx, msgCid) - require.NoError(t, err) - require.Equal(t, 0, int(resp.Receipt.ExitCode)) - - res2, err := minerNode.MinerStatus(ctx, minerAddr) - require.NoError(t, err) - - assert.Equal(t, newAddr, res2.WorkerAddress) - }) -} diff --git a/cmd/go-filecoin/miner_integration_test.go b/cmd/go-filecoin/miner_integration_test.go deleted file mode 100644 index 61c64e93c5..0000000000 --- a/cmd/go-filecoin/miner_integration_test.go +++ /dev/null @@ -1,73 +0,0 @@ -package commands_test - -import ( - "context" - "testing" - "time" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestMinerCreateIntegration(t *testing.T) { - tf.IntegrationTest(t) - - ctx, cancel1 := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel1() - - nodes, cancel2 := test.MustCreateNodesWithBootstrap(ctx, t, 1) - defer cancel2() - - newMiner := nodes[1] - - env := commands.CreateServerEnv(ctx, newMiner) - porcelainAPI := commands.GetPorcelainAPI(env) - - defaultAddr := newMiner.Repo.Config().Wallet.DefaultAddress - peer := newMiner.Network().Network.GetPeerID() - - minerAddr, err := porcelainAPI.MinerCreate(ctx, defaultAddr, types.NewAttoFILFromFIL(1), 10000, abi.RegisteredProof_StackedDRG2KiBSeal, peer, types.NewAttoFILFromFIL(1)) - require.NoError(t, err) - - // inspect results on chain - tsk := newMiner.Chain().ChainReader.GetHead() - view, err := newMiner.Chain().ActorState.StateView(tsk) - require.NoError(t, err) - owner, _, err := view.MinerControlAddresses(ctx, minerAddr) - require.NoError(t, err) - - resolvedDefaultAddress, err := view.InitResolveAddress(ctx, defaultAddr) - require.NoError(t, err) - - assert.Equal(t, resolvedDefaultAddress, owner) -} - -func TestSetPrice(t *testing.T) { - tf.IntegrationTest(t) - - ctx, cancel1 := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel1() - - nodes, cancel2 := test.MustCreateNodesWithBootstrap(ctx, t, 0) - defer cancel2() - - env := commands.CreateServerEnv(ctx, nodes[0]) - - err := commands.GetStorageAPI(env).AddAsk(abi.NewTokenAmount(1000), abi.ChainEpoch(400)) - require.NoError(t, err) - - minerAddr, err := commands.GetBlockAPI(env).MinerAddress() - require.NoError(t, err) - - asks, err := commands.GetStorageAPI(env).ListAsks(minerAddr) - require.NoError(t, err) - require.Len(t, asks, 1) - assert.Equal(t, abi.NewTokenAmount(1000), asks[0].Ask.Price) - assert.Equal(t, abi.ChainEpoch(400), asks[0].Ask.Expiry) -} diff --git a/cmd/go-filecoin/mining.go b/cmd/go-filecoin/mining.go deleted file mode 100644 index 07889549fd..0000000000 --- a/cmd/go-filecoin/mining.go +++ /dev/null @@ -1,128 +0,0 @@ -package commands - -import ( - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-cid" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" -) - -var miningCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Manage all mining operations for a node", - }, - Subcommands: map[string]*cmds.Command{ - "address": miningAddrCmd, - "once": miningOnceCmd, - "start": miningStartCmd, - "status": miningStatusCmd, - "stop": miningStopCmd, - "setup": miningSetupCmd, - "pledge-sector": miningPledgeSectorCmd, - }, -} - -var miningAddrCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Retrieve address of miner actor associated with this node", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - minerAddress, err := GetBlockAPI(env).MinerAddress() - if err != nil { - return err - } - return re.Emit(minerAddress.String()) - }, - Type: address.Address{}, -} - -var miningOnceCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Mine a single block", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - blk, err := GetBlockAPI(env).MiningOnce(req.Context) - if err != nil { - return err - } - return re.Emit(blk.Cid()) - }, - Type: cid.Cid{}, -} - -var miningSetupCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Prepare node to receive storage deals without starting the mining scheduler", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if err := GetBlockAPI(env).MiningSetup(req.Context); err != nil { - return err - } - return re.Emit("mining ready") - }, - Type: "", -} - -var miningStartCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Start mining blocks and other mining related operations", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - if err := GetBlockAPI(env).MiningStart(req.Context); err != nil { - return err - } - return re.Emit("Started mining") - }, - Type: "", -} - -// MiningStatusResult is the type returned when get mining status. -type MiningStatusResult struct { - Miner address.Address `json:"minerAddress"` - Active bool `json:"active"` -} - -var miningStatusCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Report on mining status", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - isMining := GetBlockAPI(env).MiningIsActive() - - // Get the Miner Address - minerAddress, err := GetBlockAPI(env).MinerAddress() - if err != nil { - return err - } - - return re.Emit(&MiningStatusResult{ - Miner: minerAddress, - Active: isMining, - }) - }, - Type: &MiningStatusResult{}, -} - -var miningStopCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Stop block mining", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - GetBlockAPI(env).MiningStop(req.Context) - return re.Emit("Stopped mining") - }, -} - -var miningPledgeSectorCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Pledge an empty sector immediately", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - err := GetStorageAPI(env).PledgeSector(req.Context) - if err != nil { - return err - } - return re.Emit("Sector pledged") - }, - Type: "", -} diff --git a/cmd/go-filecoin/mining_integration_test.go b/cmd/go-filecoin/mining_integration_test.go deleted file mode 100644 index 491b47b6ac..0000000000 --- a/cmd/go-filecoin/mining_integration_test.go +++ /dev/null @@ -1,111 +0,0 @@ -package commands_test - -import ( - "context" - "math/big" - "testing" - "time" - - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - specsbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/fixtures/fortest" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/fastesting" - "github.com/filecoin-project/go-filecoin/tools/fast/series" -) - -func TestMiningGenBlock(t *testing.T) { - tf.IntegrationTest(t) - t.Skip("Unskip with fake proofs") - ctx := context.Background() - builder := test.NewNodeBuilder(t) - buildWithMiner(t, builder) - - n := builder.BuildAndStart(ctx) - defer n.Stop(ctx) - - addr := fortest.TestAddresses[0] - - attoFILBefore, err := n.PorcelainAPI.WalletBalance(ctx, addr) - require.NoError(t, err) - - _, err = n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - - attoFILAfter, err := n.PorcelainAPI.WalletBalance(ctx, addr) - require.NoError(t, err) - - assert.Equal(t, specsbig.Add(attoFILBefore, types.NewAttoTokenFromToken(1000)), attoFILAfter) -} - -func TestMiningAddPieceAndSealNow(t *testing.T) { - t.Skip("Long term solution: #3642") - tf.FunctionalTest(t) - - ctx, env := fastesting.NewTestEnvironment(context.Background(), t, fast.FilecoinOpts{ - InitOpts: []fast.ProcessInitOption{fast.POAutoSealIntervalSeconds(1)}, - DaemonOpts: []fast.ProcessDaemonOption{fast.POBlockTime(50 * time.Millisecond)}, - }) - defer func() { - require.NoError(t, env.Teardown(ctx)) - }() - - genesisNode := env.GenesisMiner - - minerNode := env.RequireNewNodeWithFunds(1000) - - // Connect the clientNode and the minerNode - require.NoError(t, series.Connect(ctx, genesisNode, minerNode)) - - pparams, err := minerNode.Protocol(ctx) - require.NoError(t, err) - - sinfo := pparams.SupportedSectors[0] - - // start mining so we get to a block height that - require.NoError(t, genesisNode.MiningStart(ctx)) - defer func() { - require.NoError(t, genesisNode.MiningStop(ctx)) - }() - - _, err = series.CreateStorageMinerWithAsk(ctx, minerNode, big.NewInt(500), big.NewFloat(0.0001), big.NewInt(3000), sinfo.Size) - require.NoError(t, err) - - // get address of miner so we can check power - miningAddress, err := minerNode.MiningAddress(ctx) - require.NoError(t, err) - - // start mining for miner node to seal and schedule PoSting - require.NoError(t, minerNode.MiningStart(ctx)) - defer func() { - require.NoError(t, minerNode.MiningStop(ctx)) - }() - - // add a piece - //_, err = minerNode.AddPiece(ctx, files.NewBytesFile([]byte("HODL"))) - //require.NoError(t, err) - - // start sealing - err = minerNode.SealNow(ctx) - require.NoError(t, err) - - // We know the miner has sealed and committed a sector if their power increases on chain. - // Wait up to 300 seconds for that to happen. - for i := 0; i < 300; i++ { - power, err := minerNode.MinerStatus(ctx, miningAddress) - require.NoError(t, err) - - if power.QualityAdjustedPower.GreaterThan(fbig.Zero()) { - // miner has gained power, so seal was successful - return - } - time.Sleep(time.Second) - } - assert.Fail(t, "timed out waiting for miner to gain power from sealing") -} diff --git a/cmd/go-filecoin/mpool.go b/cmd/go-filecoin/mpool.go deleted file mode 100644 index 4d539b77dc..0000000000 --- a/cmd/go-filecoin/mpool.go +++ /dev/null @@ -1,84 +0,0 @@ -package commands - -import ( - "fmt" - - "github.com/ipfs/go-cid" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -var mpoolCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Manage the message pool", - }, - Subcommands: map[string]*cmds.Command{ - "ls": mpoolLsCmd, - "show": mpoolShowCmd, - "rm": mpoolRemoveCmd, - }, -} - -var mpoolLsCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "View the pool of outstanding messages", - }, - Options: []cmdkit.Option{ - cmdkit.UintOption("wait-for-count", "Block until this number of messages are in the pool").WithDefault(0), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - messageCount, _ := req.Options["wait-for-count"].(uint) - - pending, err := GetPorcelainAPI(env).MessagePoolWait(req.Context, messageCount) - if err != nil { - return err - } - - return re.Emit(pending) - }, - Type: []*types.SignedMessage{}, -} - -var mpoolShowCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show content of an outstanding message", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("cid", true, false, "The CID of the message to show"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - msgCid, err := cid.Parse(req.Arguments[0]) - if err != nil { - return errors.Wrap(err, "invalid message cid") - } - - msg, ok := GetPorcelainAPI(env).MessagePoolGet(msgCid) - if !ok { - return fmt.Errorf("message %s not found in pool (already mined?)", msgCid) - } - return re.Emit(msg) - }, - Type: &types.SignedMessage{}, -} - -var mpoolRemoveCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Delete a message from the message pool", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("cid", true, false, "The CID of the message to delete"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - msgCid, err := cid.Parse(req.Arguments[0]) - if err != nil { - return errors.Wrap(err, "invalid message cid") - } - - GetPorcelainAPI(env).MessagePoolRemove(msgCid) - - return nil - }, -} diff --git a/cmd/go-filecoin/mpool_integration_test.go b/cmd/go-filecoin/mpool_integration_test.go deleted file mode 100644 index 0f6e3befb1..0000000000 --- a/cmd/go-filecoin/mpool_integration_test.go +++ /dev/null @@ -1,171 +0,0 @@ -package commands_test - -import ( - "context" - "sync" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/fixtures/fortest" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestMpoolLs(t *testing.T) { - tf.IntegrationTest(t) - t.Skip("hangs") - - sendMessage := func(ctx context.Context, cmdClient *test.Client, from address.Address, to address.Address) *th.CmdOutput { - return cmdClient.RunSuccess(ctx, "message", "send", - "--from", from.String(), - "--gas-price", "1", "--gas-limit", "300", - "--value=10", to.String(), - ) - } - cs := node.FixtureChainSeed(t) - - t.Run("return all messages", func(t *testing.T) { - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithInitOpt(cs.KeyInitOpt(0)) - builder.WithGenesisInit(cs.GenesisInitFunc) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - sendMessage(ctx, cmdClient, fortest.TestAddresses[0], fortest.TestAddresses[2]) - sendMessage(ctx, cmdClient, fortest.TestAddresses[0], fortest.TestAddresses[2]) - - cids := cmdClient.RunSuccessLines(ctx, "mpool", "ls") - - assert.Equal(t, 2, len(cids)) - - for _, c := range cids { - ci, err := cid.Decode(c) - assert.NoError(t, err) - assert.True(t, ci.Defined()) - } - - // Should return immediately with --wait-for-count equal to message count - cids = cmdClient.RunSuccessLines(ctx, "mpool", "ls", "--wait-for-count=2") - assert.Equal(t, 2, len(cids)) - }) - - t.Run("wait for enough messages", func(t *testing.T) { - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithInitOpt(cs.KeyInitOpt(0)) - builder.WithGenesisInit(cs.GenesisInitFunc) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - wg := sync.WaitGroup{} - wg.Add(1) - - complete := false - go func() { - c := cmdClient.RunSuccessLines(ctx, "mpool", "ls", "--wait-for-count=3") - complete = true - assert.Equal(t, 3, len(c)) - wg.Done() - }() - - sendMessage(ctx, cmdClient, fortest.TestAddresses[0], fortest.TestAddresses[1]) - assert.False(t, complete) - sendMessage(ctx, cmdClient, fortest.TestAddresses[0], fortest.TestAddresses[1]) - assert.False(t, complete) - sendMessage(ctx, cmdClient, fortest.TestAddresses[0], fortest.TestAddresses[1]) - - wg.Wait() - - assert.True(t, complete) - }) -} - -func TestMpoolShow(t *testing.T) { - tf.IntegrationTest(t) - t.Skip("hangs") - cs := node.FixtureChainSeed(t) - - t.Run("shows message", func(t *testing.T) { - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithInitOpt(cs.KeyInitOpt(0)) - builder.WithGenesisInit(cs.GenesisInitFunc) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - msgCid := cmdClient.RunSuccess(ctx, "message", "send", - "--from", fortest.TestAddresses[0].String(), - "--gas-price", "1", "--gas-limit", "300", - "--value=10", fortest.TestAddresses[2].String(), - ).ReadStdoutTrimNewlines() - - out := cmdClient.RunSuccess(ctx, "mpool", "show", msgCid).ReadStdoutTrimNewlines() - - assert.Contains(t, out, "From: "+fortest.TestAddresses[0].String()) - assert.Contains(t, out, "To: "+fortest.TestAddresses[2].String()) - assert.Contains(t, out, "Value: 10") - }) - - t.Run("fails missing message", func(t *testing.T) { - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithInitOpt(cs.KeyInitOpt(0)) - builder.WithGenesisInit(cs.GenesisInitFunc) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - const c = "QmR8BauakNcBa3RbE4nbQu76PDiJgoQgz8AJdhJuiU4TAw" - - out := cmdClient.RunFail(ctx, "not found", "mpool", "show", c).ReadStderr() - assert.Contains(t, out, c) - }) -} - -func TestMpoolRm(t *testing.T) { - tf.IntegrationTest(t) - t.Skip("hangs") - - t.Run("remove a message", func(t *testing.T) { - cs := node.FixtureChainSeed(t) - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithInitOpt(cs.KeyInitOpt(0)) - builder.WithGenesisInit(cs.GenesisInitFunc) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - msgCid := cmdClient.RunSuccess(ctx, "message", "send", - "--from", fortest.TestAddresses[0].String(), - "--gas-price", "1", "--gas-limit", "300", - "--value=10", fortest.TestAddresses[2].String(), - ).ReadStdoutTrimNewlines() - - // wait for the pool to have the message - _, err := n.PorcelainAPI.MessagePoolWait(ctx, 1) - require.NoError(t, err) - - // remove message in process so the following ls cannot race on lock - // acquire - c, err := cid.Parse(msgCid) - require.NoError(t, err) - n.PorcelainAPI.MessagePoolRemove(c) - - out := cmdClient.RunSuccess(ctx, "mpool", "ls").ReadStdoutTrimNewlines() - - assert.Equal(t, "", out) - }) -} diff --git a/cmd/go-filecoin/outbox.go b/cmd/go-filecoin/outbox.go deleted file mode 100644 index 16aa88c224..0000000000 --- a/cmd/go-filecoin/outbox.go +++ /dev/null @@ -1,85 +0,0 @@ -package commands - -import ( - "github.com/filecoin-project/go-address" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - - "github.com/filecoin-project/go-filecoin/internal/pkg/message" -) - -var outboxCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "View and manipulate the outbound message queue", - }, - Subcommands: map[string]*cmds.Command{ - "clear": outboxClearCmd, - "ls": outboxLsCmd, - }, -} - -// OutboxLsResult is a listing of the outbox for a single address. -type OutboxLsResult struct { - Address address.Address - Messages []*message.Queued -} - -var outboxLsCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "List the queue(s) of sent but un-mined messages", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("address", false, false, "Address of the queue to list (otherwise lists all)"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - addresses, err := queueAddressesFromArg(req, env, 0) - if err != nil { - return err - } - - for _, addr := range addresses { - msgs := GetPorcelainAPI(env).OutboxQueueLs(addr) - err := re.Emit(OutboxLsResult{addr, msgs}) - if err != nil { - return err - } - } - return nil - }, - Type: OutboxLsResult{}, -} - -var outboxClearCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Clear the queue(s) of sent messages", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("address", false, false, "Address of the queue to clear (otherwise clears all)"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - addresses, err := queueAddressesFromArg(req, env, 0) - if err != nil { - return err - } - - for _, addr := range addresses { - GetPorcelainAPI(env).OutboxQueueClear(req.Context, addr) - } - return nil - }, -} - -// Reads an address from an argument, or lists addresses of all outbox queues if no arg is given. -func queueAddressesFromArg(req *cmds.Request, env cmds.Environment, argIndex int) ([]address.Address, error) { - var addresses []address.Address - if len(req.Arguments) > argIndex { - addr, e := address.NewFromString(req.Arguments[argIndex]) - if e != nil { - return nil, e - } - addresses = []address.Address{addr} - } else { - addresses = GetPorcelainAPI(env).OutboxQueues() - } - return addresses, nil -} diff --git a/cmd/go-filecoin/outbox_integration_test.go b/cmd/go-filecoin/outbox_integration_test.go deleted file mode 100644 index 6066079f36..0000000000 --- a/cmd/go-filecoin/outbox_integration_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package commands_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/fixtures/fortest" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestOutbox(t *testing.T) { - tf.IntegrationTest(t) - t.Skip("not working") - - sendMessage := func(ctx context.Context, cmdClient *test.Client, from address.Address, to address.Address) *th.CmdOutput { - return cmdClient.RunSuccess(ctx, "message", "send", - "--from", from.String(), - "--gas-price", "1", "--gas-limit", "300", - "--value=10", to.String(), - ) - } - cs := node.FixtureChainSeed(t) - - t.Run("list queued messages", func(t *testing.T) { - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithInitOpt(cs.KeyInitOpt(0)) - builder.WithInitOpt(cs.KeyInitOpt(1)) - builder.WithGenesisInit(cs.GenesisInitFunc) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - c1 := sendMessage(ctx, cmdClient, fortest.TestAddresses[0], fortest.TestAddresses[2]).ReadStdoutTrimNewlines() - c2 := sendMessage(ctx, cmdClient, fortest.TestAddresses[0], fortest.TestAddresses[2]).ReadStdoutTrimNewlines() - c3 := sendMessage(ctx, cmdClient, fortest.TestAddresses[1], fortest.TestAddresses[2]).ReadStdoutTrimNewlines() - - out := cmdClient.RunSuccess(ctx, "outbox", "ls").ReadStdout() - assert.Contains(t, out, fortest.TestAddresses[0]) - assert.Contains(t, out, fortest.TestAddresses[1]) - assert.Contains(t, out, c1) - assert.Contains(t, out, c2) - assert.Contains(t, out, c3) - - // With address filter - out = cmdClient.RunSuccess(ctx, "outbox", "ls", fortest.TestAddresses[1].String()).ReadStdout() - assert.NotContains(t, out, fortest.TestAddresses[0]) - assert.Contains(t, out, fortest.TestAddresses[1]) - assert.NotContains(t, out, c1) - assert.NotContains(t, out, c2) - assert.Contains(t, out, c3) - }) - - t.Run("clear queue", func(t *testing.T) { - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithInitOpt(cs.KeyInitOpt(0)) - builder.WithInitOpt(cs.KeyInitOpt(1)) - builder.WithGenesisInit(cs.GenesisInitFunc) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - c1 := sendMessage(ctx, cmdClient, fortest.TestAddresses[0], fortest.TestAddresses[2]).ReadStdoutTrimNewlines() - c2 := sendMessage(ctx, cmdClient, fortest.TestAddresses[0], fortest.TestAddresses[2]).ReadStdoutTrimNewlines() - c3 := sendMessage(ctx, cmdClient, fortest.TestAddresses[1], fortest.TestAddresses[2]).ReadStdoutTrimNewlines() - - // With address filter - cmdClient.RunSuccess(ctx, "outbox", "clear", fortest.TestAddresses[1].String()) - out := cmdClient.RunSuccess(ctx, "outbox", "ls").ReadStdout() - assert.Contains(t, out, fortest.TestAddresses[0]) - assert.NotContains(t, out, fortest.TestAddresses[1]) // Cleared - assert.Contains(t, out, c1) - assert.Contains(t, out, c2) - assert.NotContains(t, out, c3) // cleared - - // Repopulate - sendMessage(ctx, cmdClient, fortest.TestAddresses[1], fortest.TestAddresses[2]).ReadStdoutTrimNewlines() - - // #nofilter - cmdClient.RunSuccess(ctx, "outbox", "clear") - out = cmdClient.RunSuccess(ctx, "outbox", "ls").ReadStdoutTrimNewlines() - assert.Empty(t, out) - - // Clearing empty queue - cmdClient.RunSuccess(ctx, "outbox", "clear") - out = cmdClient.RunSuccess(ctx, "outbox", "ls").ReadStdoutTrimNewlines() - assert.Empty(t, out) - }) -} diff --git a/cmd/go-filecoin/ping.go b/cmd/go-filecoin/ping.go deleted file mode 100644 index 82bb5a2ac1..0000000000 --- a/cmd/go-filecoin/ping.go +++ /dev/null @@ -1,74 +0,0 @@ -package commands - -import ( - "fmt" - "time" - - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - peer "github.com/libp2p/go-libp2p-core/peer" - - //"github.com/libp2p/go-libp2p/p2p/protocol/ping" - "github.com/pkg/errors" -) - -// PingResult is a wrapper for the pongs returned from the ping channel. It -// contains 2 fields: Count and Time. -// -// * Count is a uint representing the index of pongs returned so far. -// * Time is the amount of time elapsed from ping to pong in seconds. -// -type PingResult struct { - Count uint - RTT time.Duration -} - -var pingCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Send echo request packets to p2p network members", - ShortDescription: ` -'ping' is a tool to test sending data to other nodes. It finds nodes -via the routing system, sends pings, waits for pongs, and prints out round- -trip latency information. - `, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("peer ID", true, false, "ID of peer to be pinged").EnableStdin(), - }, - Options: []cmdkit.Option{ - cmdkit.UintOption("count", "c", "Number of ping messages to send").WithDefault(0), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - peerID, err := peer.Decode(req.Arguments[0]) - if err != nil { - return fmt.Errorf("failed to parse peer address '%s': %s", req.Arguments[0], err) - } - - numPings, _ := req.Options["count"].(uint) - - pingCh, err := GetPorcelainAPI(env).NetworkPing(req.Context, peerID) - if err != nil { - return err - } - - for i := uint(0); numPings == 0 || i < numPings; i++ { - pong, pingChOpen := <-pingCh - if pong.Error != nil { - return pong.Error - } - result := &PingResult{ - Count: i, - RTT: pong.RTT, - } - if err := re.Emit(result); err != nil { - return err - } - if !pingChOpen { - return errors.New("Ping channel closed by sender") - } - } - - return nil - }, - Type: PingResult{}, -} diff --git a/cmd/go-filecoin/ping_integration_test.go b/cmd/go-filecoin/ping_integration_test.go deleted file mode 100644 index 2410efedc4..0000000000 --- a/cmd/go-filecoin/ping_integration_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package commands_test - -import ( - "context" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestPing2Nodes(t *testing.T) { - tf.IntegrationTest(t) - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - - n1 := builder.BuildAndStart(ctx) - n2 := builder.BuildAndStart(ctx) - defer n1.Stop(ctx) - defer n2.Stop(ctx) - - // The node are not initially connected, so ping should fail. - res0, err := n1.PorcelainAPI.NetworkPing(ctx, n2.Network().Host.ID()) - assert.NoError(t, err) - assert.Error(t, (<-res0).Error) // No peers in table - - // Connect nodes and check each can ping the other. - node.ConnectNodes(t, n1, n2) - - res1, err := n1.PorcelainAPI.NetworkPing(ctx, n2.Network().Host.ID()) - assert.NoError(t, err) - assert.NoError(t, (<-res1).Error) - - res2, err := n2.PorcelainAPI.NetworkPing(ctx, n1.Network().Host.ID()) - assert.NoError(t, err) - assert.NoError(t, (<-res2).Error) -} diff --git a/cmd/go-filecoin/protocol.go b/cmd/go-filecoin/protocol.go deleted file mode 100644 index 6f95f8759c..0000000000 --- a/cmd/go-filecoin/protocol.go +++ /dev/null @@ -1,22 +0,0 @@ -package commands - -import ( - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" -) - -var protocolCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show protocol parameter details", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - params, err := GetPorcelainAPI(env).ProtocolParameters(env.Context()) - if err != nil { - return err - } - return re.Emit(params) - }, - Type: porcelain.ProtocolParams{}, -} diff --git a/cmd/go-filecoin/protocol_cmd_test.go b/cmd/go-filecoin/protocol_cmd_test.go deleted file mode 100644 index cf66bd7bf3..0000000000 --- a/cmd/go-filecoin/protocol_cmd_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package commands_test - -import ( - "context" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestProtocol(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - - // Create node (it's not necessary to start it). - b := test.NewNodeBuilder(t) - node := b. - WithConfig(func(c *config.Config) { - c.Mining.AutoSealIntervalSeconds = 120 - }). - Build(ctx) - require.NoError(t, node.Chain().ChainReader.Load(ctx)) - - // Run the command API. - cmd, stop := test.RunNodeAPI(ctx, node, t) - defer stop() - - out := cmd.RunSuccess(ctx, "protocol").ReadStdout() - assert.Contains(t, out, "\"Network\": \"gfctest\"") - assert.Contains(t, out, "\"AutoSealInterval\": 120") -} diff --git a/cmd/go-filecoin/retrieval_client.go b/cmd/go-filecoin/retrieval_client.go deleted file mode 100644 index 5790919fb4..0000000000 --- a/cmd/go-filecoin/retrieval_client.go +++ /dev/null @@ -1,50 +0,0 @@ -package commands - -import ( - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" -) - -var retrievalClientCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Manage retrieval client operations", - }, - Subcommands: map[string]*cmds.Command{ - "retrieve-piece": clientRetrievePieceCmd, - }, -} - -var clientRetrievePieceCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Read out piece data stored by a miner on the network", - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("miner", true, false, "Retrieval miner actor address"), - cmdkit.StringArg("cid", true, false, "Content identifier of piece to read"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - panic("TODO: go-fil-markets integration") - - //minerAddr, err := address.NewFromString(req.Arguments[0]) - //if err != nil { - // return err - //} - // - //pieceCID, err := cid.Decode(req.Arguments[1]) - //if err != nil { - // return err - //} - // - //mpid, err := GetPorcelainAPI(env).MinerGetPeerID(req.Context, minerAddr) - //if err != nil { - // return err - //} - // - //readCloser, err := GetRetrievalAPI(env).RetrievePiece(req.Context, pieceCID, mpid, minerAddr) - //if err != nil { - // return err - //} - // - //return re.Emit(readCloser) - }, -} diff --git a/cmd/go-filecoin/retrieval_client_daemon_test.go b/cmd/go-filecoin/retrieval_client_daemon_test.go deleted file mode 100644 index 7158410c9e..0000000000 --- a/cmd/go-filecoin/retrieval_client_daemon_test.go +++ /dev/null @@ -1,52 +0,0 @@ -package commands_test - -import ( - "context" - "math/big" - "testing" - - "github.com/filecoin-project/go-address" - files "github.com/ipfs/go-ipfs-files" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/fastesting" - "github.com/filecoin-project/go-filecoin/tools/fast/series" -) - -func TestSelfDialRetrievalGoodError(t *testing.T) { - t.Skip("Long term solution: #3642") - tf.IntegrationTest(t) - - ctx, env := fastesting.NewTestEnvironment(context.Background(), t, fast.FilecoinOpts{}) - // Teardown after test ends. - defer func() { - err := env.Teardown(ctx) - require.NoError(t, err) - }() - - // Update genesis miner's peerid - var minerAddr address.Address - err := env.GenesisMiner.ConfigGet(ctx, "mining.minerAddress", &minerAddr) - require.NoError(t, err) - details, err := env.GenesisMiner.ID(ctx) - require.NoError(t, err) - msgCid, err := env.GenesisMiner.MinerUpdatePeerid(ctx, minerAddr, details.ID, fast.AOPrice(big.NewFloat(1.0)), fast.AOLimit(300)) - require.NoError(t, err) - - series.CtxMiningOnce(ctx) - _, err = env.GenesisMiner.MessageWait(ctx, msgCid) - require.NoError(t, err) - - // Add data to Genesis Miner. - f := files.NewBytesFile([]byte("satyamevajayate")) - cid, err := env.GenesisMiner.ClientImport(ctx, f) - require.NoError(t, err) - - // Genesis Miner fails on self dial when retrieving from itself. - _, err = env.GenesisMiner.RetrievalClientRetrievePiece(ctx, cid, minerAddr) - assert.Error(t, err) - fastesting.AssertStdErrContains(t, env.GenesisMiner, "attempting to retrieve piece from self") -} diff --git a/cmd/go-filecoin/show.go b/cmd/go-filecoin/show.go deleted file mode 100644 index ede00177a0..0000000000 --- a/cmd/go-filecoin/show.go +++ /dev/null @@ -1,135 +0,0 @@ -package commands - -import ( - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - - "github.com/ipfs/go-cid" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" -) - -var showCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Get human-readable representations of filecoin objects", - }, - Subcommands: map[string]*cmds.Command{ - "block": showBlockCmd, - "header": showHeaderCmd, - "messages": showMessagesCmd, - "receipts": showReceiptsCmd, - }, -} - -var showBlockCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show a full filecoin block by its header CID", - ShortDescription: `Prints the miner, parent weight, height, -and nonce of a given block. If JSON encoding is specified with the --enc flag, -all other block properties will be included as well.`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("cid", true, false, "CID of block to show"), - }, - Options: []cmdkit.Option{ - cmdkit.BoolOption("messages", "m", "show messages in block"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - cid, err := cid.Decode(req.Arguments[0]) - if err != nil { - return err - } - - block, err := GetPorcelainAPI(env).ChainGetFullBlock(req.Context, cid) - if err != nil { - return err - } - - return re.Emit(block) - }, - Type: block.FullBlock{}, -} - -var showHeaderCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show a filecoin block header by its CID", - ShortDescription: `Prints the miner, parent weight, height, -and nonce of a given block. If JSON encoding is specified with the --enc flag, -all other block properties will be included as well.`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("cid", true, false, "CID of block to show"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - cid, err := cid.Decode(req.Arguments[0]) - if err != nil { - return err - } - - block, err := GetPorcelainAPI(env).ChainGetBlock(req.Context, cid) - if err != nil { - return err - } - - return re.Emit(block) - }, - Type: block.Block{}, -} - -type allMessages struct { - BLS []*types.UnsignedMessage - SECP []*types.SignedMessage -} - -var showMessagesCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show a filecoin message collection by txmeta CID", - ShortDescription: `Prints info for all messages in a collection, -at the given CID. This CID is found in the "Messages" field of -the filecoin block header.`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("cid", true, false, "CID of message collection to show"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - cid, err := cid.Decode(req.Arguments[0]) - if err != nil { - return err - } - - bls, secp, err := GetPorcelainAPI(env).ChainGetMessages(req.Context, cid) - if err != nil { - return err - } - - return re.Emit(&allMessages{BLS: bls, SECP: secp}) - }, - Type: &allMessages{}, -} - -var showReceiptsCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show a filecoin receipt collection by its CID", - ShortDescription: `Prints info for all receipts in a collection, -at the given CID. Receipt collection CIDs are found in the "MessageReceipts" -field of the filecoin block header.`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("cid", true, false, "CID of receipt collection to show"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - cid, err := cid.Decode(req.Arguments[0]) - if err != nil { - return err - } - - receipts, err := GetPorcelainAPI(env).ChainGetReceipts(req.Context, cid) - if err != nil { - return err - } - - return re.Emit(receipts) - }, - Type: []vm.MessageReceipt{}, -} diff --git a/cmd/go-filecoin/show_test.go b/cmd/go-filecoin/show_test.go deleted file mode 100644 index 06bcfd7db2..0000000000 --- a/cmd/go-filecoin/show_test.go +++ /dev/null @@ -1,212 +0,0 @@ -package commands_test - -import ( - "context" - "encoding/json" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - - "github.com/filecoin-project/go-filecoin/fixtures/fortest" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestBlockDaemon(t *testing.T) { - tf.IntegrationTest(t) - t.Skip("Unskip with fake proofs") - - t.Run("show block returns human readable output for the filecoin block", func(t *testing.T) { - ctx := context.Background() - builder := test.NewNodeBuilder(t) - buildWithMiner(t, builder) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - // mine a block and get its CID - minedBlock, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - minedBlockCid := minedBlock.Cid() - - // get the mined block by its CID - output := cmdClient.RunSuccess(ctx, "show", "block", minedBlockCid.String()).ReadStdoutTrimNewlines() - - assert.Contains(t, output, "Block Details") - assert.Contains(t, output, "Weight: 0") - assert.Contains(t, output, "Height: 1") - assert.Contains(t, output, "Timestamp: ") - }) - - t.Run("show block --messages returns human readable output for the filecoin block including messages", func(t *testing.T) { - ctx := context.Background() - builder := test.NewNodeBuilder(t) - buildWithMiner(t, builder) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - // mine a block and get its CID - minedBlock, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - - // get the mined block by its CID - output := cmdClient.RunSuccess(ctx, "show", "block", "--messages", minedBlock.Cid().String()).ReadStdoutTrimNewlines() - - assert.Contains(t, output, "Block Details") - assert.Contains(t, output, "Weight: 0") - assert.Contains(t, output, "Height: 1") - assert.Contains(t, output, "Timestamp: ") - assert.Contains(t, output, "Messages: ") - }) - - t.Run("show block --enc json returns JSON for a filecoin block", func(t *testing.T) { - ctx := context.Background() - builder := test.NewNodeBuilder(t) - buildWithMiner(t, builder) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - // mine a block and get its CID - minedBlock, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - - // get the mined block by its CID - blockGetLine := cmdClient.RunSuccessFirstLine(ctx, "show", "block", minedBlock.Cid().String(), "--enc", "json") - var blockGetBlock block.FullBlock - require.NoError(t, json.Unmarshal([]byte(blockGetLine), &blockGetBlock)) - - // ensure that we were returned the correct block - - require.Equal(t, minedBlock.Cid().String(), blockGetBlock.Header.Cid().String()) - }) - - t.Run("show header --enc json returns JSON for a filecoin block header", func(t *testing.T) { - ctx := context.Background() - builder := test.NewNodeBuilder(t) - buildWithMiner(t, builder) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - // mine a block and get its CID - minedBlock, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - - // get the mined block by its CID - headerGetLine := cmdClient.RunSuccessFirstLine(ctx, "show", "header", minedBlock.Cid().String(), "--enc", "json") - - var headerGetBlock block.Block - require.NoError(t, json.Unmarshal([]byte(headerGetLine), &headerGetBlock)) - - // ensure that we were returned the correct block - - require.Equal(t, minedBlock.Cid().String(), headerGetBlock.Cid().String()) - }) - - t.Run("show messages returns empty message collection", func(t *testing.T) { - ctx := context.Background() - builder := test.NewNodeBuilder(t) - buildWithMiner(t, builder) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - _, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - - emptyMessagesLine := cmdClient.RunSuccessFirstLine(ctx, "show", "messages", types.EmptyMessagesCID.String(), "--enc", "json") - - var messageCollection []*types.SignedMessage - require.NoError(t, json.Unmarshal([]byte(emptyMessagesLine), &messageCollection)) - - assert.Equal(t, 0, len(messageCollection)) - }) - - t.Run("show receipts returns empty receipt collection", func(t *testing.T) { - ctx := context.Background() - builder := test.NewNodeBuilder(t) - buildWithMiner(t, builder) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - _, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - - emptyReceiptsLine := cmdClient.RunSuccessFirstLine(ctx, "show", "receipts", types.EmptyReceiptsCID.String(), "--enc", "json") - - var receipts []vm.MessageReceipt - require.NoError(t, json.Unmarshal([]byte(emptyReceiptsLine), &receipts)) - - assert.Equal(t, 0, len(receipts)) - }) - - t.Run("show messages", func(t *testing.T) { - cs := node.FixtureChainSeed(t) - defaultAddr := fortest.TestAddresses[0] - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithGenesisInit(cs.GenesisInitFunc) - builder.WithConfig(cs.MinerConfigOpt(0)) - builder.WithConfig(node.DefaultAddressConfigOpt(defaultAddr)) - builder.WithInitOpt(cs.KeyInitOpt(1)) - builder.WithInitOpt(cs.KeyInitOpt(0)) - - n, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - _, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - - from, err := n.PorcelainAPI.WalletDefaultAddress() // this should = fixtures.TestAddresses[0] - require.NoError(t, err) - cmdClient.RunSuccess(ctx, "message", "send", - "--from", from.String(), - "--gas-price", "1", - "--gas-limit", "300", - fortest.TestAddresses[3].String(), - ) - - cmdClient.RunSuccess(ctx, "message", "send", - "--from", from.String(), - "--gas-price", "1", - "--gas-limit", "300", - "--value", "10", - fortest.TestAddresses[3].String(), - ) - - cmdClient.RunSuccess(ctx, "message", "send", - "--from", from.String(), - "--gas-price", "1", - "--gas-limit", "300", - "--value", "5.5", - fortest.TestAddresses[3].String(), - ) - - blk, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - - // Full block checks out - blockGetLine := cmdClient.RunSuccessFirstLine(ctx, "show", "block", blk.Cid().String(), "--enc", "json") - var blockGetBlock block.FullBlock - require.NoError(t, json.Unmarshal([]byte(blockGetLine), &blockGetBlock)) - - assert.Equal(t, 3, len(blockGetBlock.SECPMessages)) - - assert.Equal(t, from, blockGetBlock.SECPMessages[0].Message.From) - - // Full block matches show messages - messagesGetLine := cmdClient.RunSuccessFirstLine(ctx, "show", "messages", blockGetBlock.Header.Messages.String(), "--enc", "json") - var messages []*types.SignedMessage - require.NoError(t, json.Unmarshal([]byte(messagesGetLine), &messages)) - assert.Equal(t, blockGetBlock.SECPMessages, messages) - }) -} diff --git a/cmd/go-filecoin/stats.go b/cmd/go-filecoin/stats.go deleted file mode 100644 index 99dd71b8a2..0000000000 --- a/cmd/go-filecoin/stats.go +++ /dev/null @@ -1,28 +0,0 @@ -package commands - -import ( - "github.com/ipfs/go-ipfs-cmdkit" - "github.com/ipfs/go-ipfs-cmds" - "github.com/libp2p/go-libp2p-core/metrics" -) - -var statsCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "View various filecoin node statistics", - }, - Subcommands: map[string]*cmds.Command{ - "bandwidth": statsBandwidthCmd, - }, -} - -var statsBandwidthCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "View bandwidth usage metrics", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - bandwidthStats := GetPorcelainAPI(env).NetworkGetBandwidthStats() - - return re.Emit(bandwidthStats) - }, - Type: metrics.Stats{}, -} diff --git a/cmd/go-filecoin/stats_integration_test.go b/cmd/go-filecoin/stats_integration_test.go deleted file mode 100644 index 66e43b89e1..0000000000 --- a/cmd/go-filecoin/stats_integration_test.go +++ /dev/null @@ -1,24 +0,0 @@ -package commands_test - -import ( - "context" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestStatsBandwidth(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - builder := test.NewNodeBuilder(t) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - stats := cmdClient.RunSuccess(ctx, "stats", "bandwidth").ReadStdoutTrimNewlines() - - assert.Equal(t, "{\n\t\"TotalIn\": 0,\n\t\"TotalOut\": 0,\n\t\"RateIn\": 0,\n\t\"RateOut\": 0\n}", stats) -} diff --git a/cmd/go-filecoin/swarm.go b/cmd/go-filecoin/swarm.go deleted file mode 100644 index 7ad3ffef88..0000000000 --- a/cmd/go-filecoin/swarm.go +++ /dev/null @@ -1,86 +0,0 @@ -package commands - -import ( - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - "github.com/libp2p/go-libp2p-core/peer" - - "github.com/filecoin-project/go-filecoin/internal/pkg/net" -) - -// swarmCmd contains swarm commands. -var swarmCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Interact with the swarm", - ShortDescription: ` -'go-filecoin swarm' is a tool to manipulate the libp2p swarm. The swarm is the -component that opens, listens for, and maintains connections to other -libp2p peers on the internet. -`, - }, - Subcommands: map[string]*cmds.Command{ - "connect": swarmConnectCmd, - "peers": swarmPeersCmd, - }, -} - -var swarmPeersCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "List peers with open connections.", - ShortDescription: ` -'go-filecoin swarm peers' lists the set of peers this node is connected to. -`, - }, - Options: []cmdkit.Option{ - cmdkit.BoolOption("verbose", "v", "Display all extra information"), - cmdkit.BoolOption("streams", "Also list information about open streams for each peer"), - cmdkit.BoolOption("latency", "Also list information about latency to each peer"), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - verbose, _ := req.Options["verbose"].(bool) - latency, _ := req.Options["latency"].(bool) - streams, _ := req.Options["streams"].(bool) - - out, err := GetPorcelainAPI(env).NetworkPeers(req.Context, verbose, latency, streams) - if err != nil { - return err - } - - return re.Emit(&out) - }, - Type: net.SwarmConnInfos{}, -} - -var swarmConnectCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Open connection to a given address.", - ShortDescription: ` -'go-filecoin swarm connect' opens a new direct connection to a peer address. - -The address format is a multiaddr: - -go-filecoin swarm connect /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ -`, - }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("address", true, true, "Address of peer to connect to.").EnableStdin(), - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - results, err := GetPorcelainAPI(env).NetworkConnect(req.Context, req.Arguments) - if err != nil { - return err - } - - for result := range results { - if result.Err != nil { - return result.Err - } - if err := re.Emit(result.PeerID); err != nil { - return err - } - } - - return nil - }, - Type: peer.ID(""), -} diff --git a/cmd/go-filecoin/swarm_integration_test.go b/cmd/go-filecoin/swarm_integration_test.go deleted file mode 100644 index 3c6a43da38..0000000000 --- a/cmd/go-filecoin/swarm_integration_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package commands_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestSwarmConnectPeersValid(t *testing.T) { - tf.IntegrationTest(t) - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - - n1 := builder.BuildAndStart(ctx) - defer n1.Stop(ctx) - n2 := builder.BuildAndStart(ctx) - defer n2.Stop(ctx) - - node.ConnectNodes(t, n1, n2) -} - -func TestSwarmConnectPeersInvalid(t *testing.T) { - tf.IntegrationTest(t) - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - - _, cmdClient, done := builder.BuildAndStartAPI(ctx) - defer done() - - cmdClient.RunFail(ctx, "failed to parse ip4 addr", - "swarm", "connect", "/ip4/hello", - ) -} diff --git a/cmd/go-filecoin/utils.go b/cmd/go-filecoin/utils.go deleted file mode 100644 index 08d327549c..0000000000 --- a/cmd/go-filecoin/utils.go +++ /dev/null @@ -1,137 +0,0 @@ -package commands - -import ( - "fmt" - "io" - "strconv" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - cmds "github.com/ipfs/go-ipfs-cmds" - "github.com/pkg/errors" -) - -// SilentWriter writes to a stream, stopping after the first error and discarding output until -// the error is cleared. -// No printing methods return an error (to avoid warnings about ignoring it), but they do return -// a boolean indicating whether an error is waiting to be cleared. -// Example usage: -// sw := NewSilentWriter(w) -// sw.Println("A line") -// sw.Println("Another line") -// return sw.Error() -type SilentWriter struct { - w io.Writer - err error -} - -// NewSilentWriter returns a new writer backed by `w`. -func NewSilentWriter(w io.Writer) *SilentWriter { - return &SilentWriter{w: w} -} - -// Error returns any error encountered while writing. -func (sw *SilentWriter) Error() error { - return sw.err -} - -// ClearError clears and returns any error encountered while writing. -// Subsequent writes will attempt to write to the underlying writer again. -func (sw *SilentWriter) ClearError() error { - err := sw.err - sw.err = nil - return err -} - -// Write writes with io.Writer.Write and returns true if there was no error. -func (sw *SilentWriter) Write(p []byte) bool { - if sw.err == nil { - _, sw.err = sw.w.Write(p) - } - return sw.err == nil -} - -// WriteString writes with io.WriteString and returns true if there was no error. -func (sw *SilentWriter) WriteString(str string) bool { - if sw.err == nil { - _, sw.err = io.WriteString(sw.w, str) - } - return sw.err == nil -} - -// Print writes with fmt.Fprint and returns true if there was no error. -func (sw *SilentWriter) Print(a ...interface{}) bool { - if sw.err == nil { - _, sw.err = fmt.Fprint(sw.w, a...) - } - return sw.err == nil -} - -// Println writes with fmt.Fprintln and returns true if there was no error. -func (sw *SilentWriter) Println(a ...interface{}) bool { - if sw.err == nil { - _, sw.err = fmt.Fprintln(sw.w, a...) - } - return sw.err == nil -} - -// Printf writes with fmt.Fprintf and returns true if there was no error. -func (sw *SilentWriter) Printf(format string, a ...interface{}) bool { - if sw.err == nil { - _, sw.err = fmt.Fprintf(sw.w, format, a...) - } - return sw.err == nil -} - -// PrintString prints a given Stringer to the writer. -func PrintString(w io.Writer, s fmt.Stringer) error { - _, err := fmt.Fprintln(w, s.String()) - return err -} - -func optionalAddr(o interface{}) (ret address.Address, err error) { - if o != nil { - ret, err = address.NewFromString(o.(string)) - if err != nil { - err = errors.Wrap(err, "invalid from address") - } - } - return -} - -func optionalSectorSizeWithDefault(o interface{}, def abi.SectorSize) (abi.SectorSize, error) { - if o != nil { - n, err := strconv.ParseUint(o.(string), 10, 64) - if err != nil || n == 0 { - return abi.SectorSize(0), fmt.Errorf("invalid sector size: %s", o.(string)) - } - - return abi.SectorSize(n), nil - } - - return def, nil -} - -func fromAddrOrDefault(req *cmds.Request, env cmds.Environment) (address.Address, error) { - addr, err := optionalAddr(req.Options["from"]) - if err != nil { - return address.Undef, err - } - if addr.Empty() { - return GetPorcelainAPI(env).WalletDefaultAddress() - } - return addr, nil -} - -func cidsFromSlice(args []string) ([]cid.Cid, error) { - out := make([]cid.Cid, len(args)) - for i, arg := range args { - c, err := cid.Decode(arg) - if err != nil { - return nil, err - } - out[i] = c - } - return out, nil -} diff --git a/cmd/go-filecoin/version.go b/cmd/go-filecoin/version.go deleted file mode 100644 index 981cbdf298..0000000000 --- a/cmd/go-filecoin/version.go +++ /dev/null @@ -1,25 +0,0 @@ -package commands - -import ( - cmdkit "github.com/ipfs/go-ipfs-cmdkit" - cmds "github.com/ipfs/go-ipfs-cmds" - - "github.com/filecoin-project/go-filecoin/build/flags" -) - -type versionInfo struct { - // Commit, is the git sha that was used to build this version of go-filecoin. - Commit string -} - -var versionCmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ - Tagline: "Show go-filecoin version information", - }, - Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { - return re.Emit(&versionInfo{ - Commit: flags.GitCommit, - }) - }, - Type: versionInfo{}, -} diff --git a/cmd/go-filecoin/version_daemon_test.go b/cmd/go-filecoin/version_daemon_test.go deleted file mode 100644 index e686d56e02..0000000000 --- a/cmd/go-filecoin/version_daemon_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package commands_test - -import ( - "fmt" - "io/ioutil" - "net/http" - "os/exec" - "strings" - "testing" - - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - manet "github.com/multiformats/go-multiaddr-net" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestVersion(t *testing.T) { - tf.IntegrationTest(t) - - commit := getCodeCommit(t) - - verOut, err := exec.Command(th.MustGetFilecoinBinary(), "version").Output() - require.NoError(t, err) - - version := string(verOut) - assert.Exactly(t, fmt.Sprintf("{\n\t\"Commit\": \"%s\"\n}\n", commit), version) -} - -func TestVersionOverHttp(t *testing.T) { - tf.IntegrationTest(t) - - td := th.NewDaemon(t).Start() - defer td.ShutdownSuccess() - - maddr, err := td.CmdAddr() - require.NoError(t, err) - - _, host, err := manet.DialArgs(maddr) - require.NoError(t, err) - - url := fmt.Sprintf("http://%s/api/version", host) - req, err := http.NewRequest("POST", url, nil) - require.NoError(t, err) - res, err := http.DefaultClient.Do(req) - require.NoError(t, err) - require.Equal(t, http.StatusOK, res.StatusCode) - - commit := strings.Trim(getCodeCommit(t), "\n ") - expected := fmt.Sprintf("{\"Commit\":\"%s\"}\n", commit) - - defer res.Body.Close() // nolint: errcheck - body, err := ioutil.ReadAll(res.Body) - require.NoError(t, err) - require.Equal(t, expected, string(body)) -} - -func getCodeCommit(t *testing.T) string { - var gitOut []byte - var err error - gitArgs := []string{"rev-parse", "--verify", "HEAD"} - if gitOut, err = exec.Command("git", gitArgs...).Output(); err != nil { - assert.NoError(t, err) - } - return strings.TrimSpace(string(gitOut)) -} diff --git a/cmd/import.go b/cmd/import.go new file mode 100644 index 0000000000..078e79f9ed --- /dev/null +++ b/cmd/import.go @@ -0,0 +1,97 @@ +package cmd + +import ( + "bufio" + "context" + "io" + "net/http" + "os" + "strings" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/ipfs/go-cid" + logging "github.com/ipfs/go-log/v2" + "github.com/mitchellh/go-homedir" + xerrors "github.com/pkg/errors" + "gopkg.in/cheggaaa/pb.v1" +) + +var logImport = logging.Logger("commands/import") + +// Import cache tipset cids to store. +// The value of the cached tipset CIDS is used as the check-point when running `venus daemon` +func Import(ctx context.Context, r repo.Repo, fileName string) error { + return importChain(ctx, r, fileName) +} + +func importChain(ctx context.Context, r repo.Repo, fname string) error { + var rd io.Reader + var l int64 + if strings.HasPrefix(fname, "http://") || strings.HasPrefix(fname, "https://") { + resp, err := http.Get(fname) //nolint:gosec + if err != nil { + return err + } + defer resp.Body.Close() //nolint:errcheck + + if resp.StatusCode != http.StatusOK { + return xerrors.Errorf("non-200 response: %d", resp.StatusCode) + } + + rd = resp.Body + l = resp.ContentLength + } else { + fname, err := homedir.Expand(fname) + if err != nil { + return err + } + + fi, err := os.Open(fname) + if err != nil { + return err + } + defer fi.Close() //nolint:errcheck + + st, err := os.Stat(fname) + if err != nil { + return err + } + + rd = fi + l = st.Size() + } + + bs := r.Datastore() + // setup a ipldCbor on top of the local store + chainStore := chain.NewStore(r.ChainDatastore(), bs, cid.Undef, chain.NewMockCirculatingSupplyCalculator()) + + bufr := bufio.NewReaderSize(rd, 1<<20) + + bar := pb.New64(l) + br := bar.NewProxyReader(bufr) + bar.ShowTimeLeft = true + bar.ShowPercent = true + bar.ShowSpeed = true + bar.Units = pb.U_BYTES + + bar.Start() + tip, err := chainStore.Import(ctx, br) + if err != nil { + return xerrors.Errorf("importing chain failed: %s", err) + } + bar.Finish() + + err = chainStore.SetHead(context.TODO(), tip) + if err != nil { + return xerrors.Errorf("importing chain failed: %s", err) + } + logImport.Infof("accepting %s as new head", tip.Key().String()) + + err = chainStore.WriteCheckPoint(context.TODO(), tip.Key()) + if err != nil { + logImport.Errorf("set check point error: %s", err.Error()) + } + + return err +} diff --git a/cmd/inspector.go b/cmd/inspector.go new file mode 100644 index 0000000000..d96f4b740a --- /dev/null +++ b/cmd/inspector.go @@ -0,0 +1,126 @@ +package cmd + +import ( + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/pkg/config" + cmds "github.com/ipfs/go-ipfs-cmds" +) + +var inspectCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show info about the filecoin node", + }, + Subcommands: map[string]*cmds.Command{ + "all": allInspectCmd, + "runtime": runtimeInspectCmd, + "disk": diskInspectCmd, + "memory": memoryInspectCmd, + "config": configInspectCmd, + "environment": envInspectCmd, + }, +} +var allInspectCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Print all diagnostic information.", + ShortDescription: ` +Prints out information about filecoin process and its environment. +`, + }, + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + var allInfo node.AllInspectorInfo + allInfo.Runtime = env.(*node.Env).InspectorAPI.Runtime() + + dsk, err := env.(*node.Env).InspectorAPI.Disk() + if err != nil { + return err + } + allInfo.Disk = dsk + + mem, err := env.(*node.Env).InspectorAPI.Memory() + if err != nil { + return err + } + allInfo.Memory = mem + allInfo.Config = env.(*node.Env).InspectorAPI.Config() + allInfo.Environment = env.(*node.Env).InspectorAPI.Environment() + allInfo.FilecoinVersion = env.(*node.Env).InspectorAPI.FilecoinVersion() + return cmds.EmitOnce(res, allInfo) + }, + Type: node.AllInspectorInfo{}, +} + +var runtimeInspectCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Print runtime diagnostic information.", + ShortDescription: ` +Prints out information about the golang runtime. +`, + }, + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + out := env.(*node.Env).InspectorAPI.Runtime() + return cmds.EmitOnce(res, out) + }, + Type: node.RuntimeInfo{}, +} + +var diskInspectCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Print filesystem usage information.", + ShortDescription: ` +Prints out information about the filesystem. +`, + }, + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + out, err := env.(*node.Env).InspectorAPI.Disk() + if err != nil { + return err + } + return cmds.EmitOnce(res, out) + }, + Type: node.DiskInfo{}, +} + +var memoryInspectCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Print memory usage information.", + ShortDescription: ` +Prints out information about memory usage. +`, + }, + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + out, err := env.(*node.Env).InspectorAPI.Memory() + if err != nil { + return err + } + return cmds.EmitOnce(res, out) + }, + Type: node.MemoryInfo{}, +} + +var configInspectCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Print in-memory config information.", + ShortDescription: ` +Prints out information about your filecoin nodes config. +`, + }, + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + out := env.(*node.Env).InspectorAPI.Config() + return cmds.EmitOnce(res, out) + }, + Type: config.Config{}, +} + +var envInspectCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Print filecoin environment information.", + ShortDescription: ` +Prints out information about your filecoin nodes environment. +`, + }, + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + out := env.(*node.Env).InspectorAPI.Environment() + return cmds.EmitOnce(res, out) + }, + Type: node.EnvironmentInfo{}, +} diff --git a/cmd/go-filecoin/leb128.go b/cmd/leb128.go similarity index 76% rename from cmd/go-filecoin/leb128.go rename to cmd/leb128.go index 2de50c0b52..1fe43faffa 100644 --- a/cmd/go-filecoin/leb128.go +++ b/cmd/leb128.go @@ -1,15 +1,14 @@ -package commands +package cmd import ( "strconv" "github.com/filecoin-project/go-leb128" - cmdkit "github.com/ipfs/go-ipfs-cmdkit" cmds "github.com/ipfs/go-ipfs-cmds" ) var leb128Cmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ + Helptext: cmds.HelpText{ Tagline: "Leb128 cli encode/decode", ShortDescription: `Decode and encode leb128 text/uint64.`, }, @@ -20,12 +19,12 @@ var leb128Cmd = &cmds.Command{ } var decodeLeb128Cmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ + Helptext: cmds.HelpText{ Tagline: "decode leb128", ShortDescription: `Decode leb128 text`, }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("text", true, false, `The leb128 encoded text`), + Arguments: []cmds.Argument{ + cmds.StringArg("text", true, false, `The leb128 encoded text`), }, Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { text := req.Arguments[0] @@ -36,12 +35,12 @@ var decodeLeb128Cmd = &cmds.Command{ } var encodeLeb128Cmd = &cmds.Command{ - Helptext: cmdkit.HelpText{ + Helptext: cmds.HelpText{ Tagline: "encode leb128", ShortDescription: `Encode leb128 uint64`, }, - Arguments: []cmdkit.Argument{ - cmdkit.StringArg("number", true, false, `The number to encode`), + Arguments: []cmds.Argument{ + cmds.StringArg("number", true, false, `The number to encode`), }, Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { num, err := strconv.ParseUint(req.Arguments[0], 10, 64) diff --git a/cmd/go-filecoin/leb128_test.go b/cmd/leb128_test.go similarity index 84% rename from cmd/go-filecoin/leb128_test.go rename to cmd/leb128_test.go index ebaa119cd3..d63fc270d0 100644 --- a/cmd/go-filecoin/leb128_test.go +++ b/cmd/leb128_test.go @@ -1,4 +1,4 @@ -package commands_test +package cmd_test import ( "context" @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/require" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/app/node/test" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" ) func TestLeb128Decode(t *testing.T) { diff --git a/cmd/log.go b/cmd/log.go new file mode 100644 index 0000000000..4f4e50269c --- /dev/null +++ b/cmd/log.go @@ -0,0 +1,112 @@ +package cmd + +import ( + "fmt" + "strings" + + cmds "github.com/ipfs/go-ipfs-cmds" + logging "github.com/ipfs/go-log/v2" +) + +var logCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Interact with the daemon subsystems log output.", + ShortDescription: ` +'venus log' contains utility commands to affect the subsystems logging +output of a running daemon. +`, + }, + + Subcommands: map[string]*cmds.Command{ + "set-level": logLevelCmd, + "list": logLsCmd, + "tail": logTailCmd, + }, +} + +var logTailCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Read subsystems log output.", + ShortDescription: ` +Outputs subsystems log output as it is generated. +`, + }, + + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + r := logging.NewPipeReader() + go func() { + defer r.Close() // nolint: errcheck + <-req.Context.Done() + }() + + return re.Emit(r) + }, +} + +var logLevelCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Set the logging level.", + ShortDescription: `Set the log level for logging systems: + + The system flag can be specified multiple times. + + eg) log set-level --system chain --system pubsub debug + + Available Levels: + debug + info + warn + error + fatal + panic +`, + }, + + Arguments: []cmds.Argument{ + cmds.StringArg("set-level", true, false, `The log level, with 'debug' the most verbose and 'panic' the least verbose. + One of: debug, info, warning, error, fatal, panic. + `), + }, + + Options: []cmds.Option{ + cmds.StringsOption("system", "The system logging identifier"), + }, + + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + level := strings.ToLower(req.Arguments[0]) + + var s string + if system, ok := req.Options["system"].([]string); ok { + for _, v := range system { + if err := logging.SetLogLevel(v, level); err != nil { + return err + } + } + s = fmt.Sprintf("Set log level of '%s' to '%s'", strings.Join(system, ","), level) + } else { + lvl, err := logging.LevelFromString(level) + if err != nil { + return err + } + logging.SetAllLoggers(lvl) + s = fmt.Sprintf("Set log level of all subsystems to: %s", level) + } + + return cmds.EmitOnce(res, s) + }, + Type: string(""), +} + +var logLsCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "List the logging subsystems.", + ShortDescription: ` +'venus log list' is a utility command used to list the logging +subsystems of a running daemon. +`, + }, + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + return cmds.EmitOnce(res, logging.GetSubsystems()) + }, + Type: []string{}, +} diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000000..f654c3ca6a --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,426 @@ +package cmd + +import ( + "context" + "encoding/json" + "fmt" + "io" + "os" + + fbig "github.com/filecoin-project/go-state-types/big" + + cmds "github.com/ipfs/go-ipfs-cmds" + "github.com/ipfs/go-ipfs-cmds/cli" + cmdhttp "github.com/ipfs/go-ipfs-cmds/http" + ma "github.com/multiformats/go-multiaddr" + manet "github.com/multiformats/go-multiaddr/net" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/app/paths" + "github.com/filecoin-project/venus/pkg/repo" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +const ( + // OptionAPI is the name of the option for specifying the api port. + OptionAPI = "cmdapiaddr" + + OptionToken = "token" + // OptionRepoDir is the name of the option for specifying the directory of the repo. + OptionRepoDir = "repodir" + + // OptionSectorDir is the name of the option for specifying the directory into which staged and sealed sectors will be written. + //OptionSectorDir = "sectordir" + + // OptionPresealedSectorDir is the name of the option for specifying the directory from which presealed sectors should be pulled when initializing. + //OptionPresealedSectorDir = "presealed-sectordir" + + // OptionDrandConfigAddr is the init option for configuring drand to a given network address at init time + OptionDrandConfigAddr = "drand-config-addr" + + // offlineMode tells us if we should try to connect this Filecoin node to the network + OfflineMode = "offline" + + // ELStdout tells the daemon to write event logs to stdout. + ELStdout = "elstdout" + + ULimit = "manage-fdlimit" + + // AutoSealIntervalSeconds configures the daemon to check for and seal any staged sectors on an interval. + //AutoSealIntervalSeconds = "auto-seal-interval-seconds" + + // SwarmAddress is the multiaddr for this Filecoin node + SwarmAddress = "swarmlisten" + + // SwarmPublicRelayAddress is a public address that the venus node + // will listen on if it is operating as a relay. We use this to specify + // the public ip:port of a relay node that is sitting behind a static + // NAT mapping. + SwarmPublicRelayAddress = "swarmrelaypublic" + + // PropagationDelay is the duration the miner will wait for blocks to arrive before attempting to mine a new one + //PropagationDelay = "prop-delay" + + // PeerKeyFile is the path of file containing key to use for new nodes libp2p identity + PeerKeyFile = "peerkeyfile" + + // WalletKeyFile is the path of file containing wallet keys that may be imported on initialization + WalletKeyFile = "wallet-keyfile" + + // MinerActorAddress when set, sets the daemons's miner address to the provided address + //MinerActorAddress = "miner-actor-address" + + // GenesisFile is the path of file containing archive of genesis block DAG data + GenesisFile = "genesisfile" + + // Network populates config with network-specific parameters for a known network (e.g. testnet2) + Network = "network" + + // IsRelay when set causes the the daemon to provide libp2p relay + // services allowing other filecoin nodes behind NATs to talk directly. + IsRelay = "is-relay" + + Size = "size" + + ImportSnapshot = "import-snapshot" + + // wallet password + Password = "password" + + AuthServiceURL = "auth-url" +) + +func init() { + // add pretty json as an encoding type + cmds.Encoders["pretty-json"] = func(req *cmds.Request) func(io.Writer) cmds.Encoder { + return func(w io.Writer) cmds.Encoder { + enc := json.NewEncoder(w) + enc.SetIndent("", "\t") + return enc + } + } +} + +// command object for the local cli +var RootCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "A decentralized storage network", + Subcommands: ` +START RUNNING FILECOIN + config [] - Get and set filecoin config values + daemon - Start a long-running daemon process + wallet - Manage your filecoin wallets + msig - Interact with a multisig wallet + +VIEW DATA STRUCTURES + chain - Inspect the filecoin blockchain + sync - Inspect the filecoin Sync + dag - Interact with IPLD DAG objects + show - Get human-readable representations of filecoin objects + +NETWORK COMMANDS + swarm - Interact with the swarm + drand - retrieve drand randomness + +MESSAGE COMMANDS + send - Send message + mpool - Manage the message pool + +State COMMANDS + wait-msg - Wait for a message to appear on chain + search-msg - Search to see whether a message has appeared on chain + power - Query network or miner power + sectors - Query the sector set of a miner + active-sectors - Query the active sector set of a miner + sector - Get miner sector info + get-actor - Print actor information + lookup - Find corresponding ID address + sector-size - Look up miners sector size + get-deal - View on-chain deal info + miner-info - Retrieve miner information + network-version - MReturns the network version + list-actor - list all actors + +Paych COMMANDS + paych - Manage payment channels + +TOOL COMMANDS + inspect - Show info about the venus node + leb128 - Leb128 cli encode/decode + log - Interact with the daemon event log output + protocol - Show protocol parameter details + version - Show venus version information + seed - Seal sectors for genesis miner + fetch - Fetch proving parameters +`, + }, + Options: []cmds.Option{ + cmds.StringsOption(OptionToken, "set the auth token to use"), + cmds.StringOption(OptionAPI, "set the api port to use"), + cmds.StringOption(OptionRepoDir, "set the repo directory, defaults to ~/.venus").WithDefault("~/.venus"), + cmds.StringOption(cmds.EncLong, cmds.EncShort, "The encoding type the output should be encoded with (pretty-json or json)").WithDefault("pretty-json"), + cmds.BoolOption("help", "Show the full command help text."), + cmds.BoolOption("h", "Show a short version of the command help text."), + }, + Subcommands: make(map[string]*cmds.Command), +} + +// command object for the daemon +var RootCmdDaemon = &cmds.Command{ + Subcommands: make(map[string]*cmds.Command), +} + +// all top level commands, not available to daemon +var rootSubcmdsLocal = map[string]*cmds.Command{ + "daemon": daemonCmd, + "fetch": fetchCmd, + "version": versionCmd, + "leb128": leb128Cmd, + "seed": seedCmd, +} + +// all top level commands, available on daemon. set during init() to avoid configuration loops. +var rootSubcmdsDaemon = map[string]*cmds.Command{ + "chain": chainCmd, + "sync": syncCmd, + "drand": drandCmd, + "inspect": inspectCmd, + "leb128": leb128Cmd, + "log": logCmd, + "send": msgSendCmd, + "mpool": mpoolCmd, + "protocol": protocolCmd, + "show": showCmd, + "swarm": swarmCmd, + "wallet": walletCmd, + "version": versionCmd, + "state": stateCmd, + "miner": minerCmd, + "paych": paychCmd, + "msig": multisigCmd, +} + +func init() { + for k, v := range rootSubcmdsLocal { + RootCmd.Subcommands[k] = v + } + + for k, v := range rootSubcmdsDaemon { + RootCmd.Subcommands[k] = v + RootCmdDaemon.Subcommands[k] = v + } +} + +// Run processes the arguments and stdin +func Run(ctx context.Context, args []string, stdin, stdout, stderr *os.File) (int, error) { + + err := cli.Run(ctx, RootCmd, args, stdin, stdout, stderr, buildEnv, makeExecutor) + if err == nil { + return 0, nil + } + if exerr, ok := err.(cli.ExitError); ok { + return int(exerr), nil + } + return 1, err +} + +func buildEnv(ctx context.Context, _ *cmds.Request) (cmds.Environment, error) { + return node.NewClientEnv(ctx), nil +} + +type executor struct { + api string + token string + exec cmds.Executor +} + +func (e *executor) Execute(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if e.api == "" { + return e.exec.Execute(req, re, env) + } + + client := cmdhttp.NewClient(e.api, e.token, cmdhttp.ClientWithAPIPrefix(node.APIPrefix)) + + return client.Execute(req, re, env) +} + +func makeExecutor(req *cmds.Request, env interface{}) (cmds.Executor, error) { + isDaemonRequired := requiresDaemon(req) + var ( + apiInfo *APIInfo + err error + ) + + if isDaemonRequired { + apiInfo, err = getAPIInfo(req) + if err != nil { + return nil, err + } + } + if apiInfo == nil && isDaemonRequired { + return nil, ErrMissingDaemon + } + if apiInfo == nil { + apiInfo = &APIInfo{} + } + + return &executor{ + api: apiInfo.Addr, + token: apiInfo.Token, + exec: cmds.NewExecutor(RootCmd), + }, nil +} + +type APIInfo struct { + Addr string + Token string +} + +func getAPIInfo(req *cmds.Request) (*APIInfo, error) { + repoDir, _ := req.Options[OptionRepoDir].(string) + repoDir, err := paths.GetRepoPath(repoDir) + if err != nil { + return nil, err + } + var rawAddr string + // second highest precedence is env vars. + if envapi := os.Getenv("FIL_API"); envapi != "" { + rawAddr = envapi + } + + // first highest precedence is cmd flag. + if apiAddress, ok := req.Options[OptionAPI].(string); ok && apiAddress != "" { + rawAddr = apiAddress + } + + // we will read the api file if no other option is given. + if len(rawAddr) == 0 { + rpcAPI, err := repo.APIAddrFromRepoPath(repoDir) + if err != nil { + return nil, errors.Wrap(err, "can't find API endpoint address in environment, command-line, or local repo (is the daemon running?)") + } + rawAddr = rpcAPI //NOTICE command only use api + } + + maddr, err := ma.NewMultiaddr(rawAddr) + if err != nil { + return nil, errors.Wrap(err, fmt.Sprintf("unable to convert API endpoint address %s to a multiaddr", rawAddr)) + } + + _, host, err := manet.DialArgs(maddr) + if err != nil { + return nil, errors.Wrap(err, fmt.Sprintf("unable to dial API endpoint address %s", maddr)) + } + + token := "" + if tk, ok := req.Options[OptionToken]; ok { + tkArr := tk.([]string) + if len(tkArr) > 0 { + token = tkArr[0] + } + } + if len(token) == 0 { + tk, err := repo.APITokenFromRepoPath(repoDir) + if err != nil { + return nil, errors.Wrap(err, "can't find token in environment") + } + token = tk + } + + return &APIInfo{ + Addr: host, + Token: token, + }, nil +} + +// nolint +func getAPIAddress(req *cmds.Request) (string, error) { + var rawAddr string + var err error + // second highest precedence is env vars. + if envapi := os.Getenv("VENUS_API"); envapi != "" { + rawAddr = envapi + } + + // first highest precedence is cmd flag. + if apiAddress, ok := req.Options[OptionAPI].(string); ok && apiAddress != "" { + rawAddr = apiAddress + } + + // we will read the api file if no other option is given. + if len(rawAddr) == 0 { + repoDir, _ := req.Options[OptionRepoDir].(string) + repoDir, err = paths.GetRepoPath(repoDir) + if err != nil { + return "", err + } + rpcAPI, err := repo.APIAddrFromRepoPath(repoDir) + if err != nil { + return "", errors.Wrap(err, "can't find API endpoint address in environment, command-line, or local repo (is the daemon running?)") + } + rawAddr = rpcAPI //NOTICE command only use api + } + + maddr, err := ma.NewMultiaddr(rawAddr) + if err != nil { + return "", errors.Wrap(err, fmt.Sprintf("unable to convert API endpoint address %s to a multiaddr", rawAddr)) + } + + _, host, err := manet.DialArgs(maddr) + if err != nil { + return "", errors.Wrap(err, fmt.Sprintf("unable to dial API endpoint address %s", maddr)) + } + + return host, nil +} + +func requiresDaemon(req *cmds.Request) bool { + for cmd := range rootSubcmdsLocal { + if len(req.Path) > 0 && req.Path[0] == cmd { + return false + } + } + return true +} + +var feecapOption = cmds.StringOption("gas-feecap", "Price (FIL e.g. 0.00013) to pay for each GasUnit consumed mining this message") +var premiumOption = cmds.StringOption("gas-premium", "Price (FIL e.g. 0.00013) to pay for each GasUnit consumed mining this message") +var limitOption = cmds.Int64Option("gas-limit", "Maximum GasUnits this message is allowed to consume") + +func parseGasOptions(req *cmds.Request) (fbig.Int, fbig.Int, int64, error) { + var ( + feecap = types.FIL{Int: types.NewInt(0).Int} + premium = types.FIL{Int: types.NewInt(0).Int} + ok = false + gasLimitInt = int64(0) + ) + + var err error + feecapOption := req.Options["gas-feecap"] + if feecapOption != nil { + feecap, err = types.ParseFIL(feecapOption.(string)) + if err != nil { + return types.ZeroFIL, types.ZeroFIL, 0, errors.New("invalid gas price (specify FIL as a decimal number)") + } + } + + premiumOption := req.Options["gas-premium"] + if premiumOption != nil { + premium, err = types.ParseFIL(premiumOption.(string)) + if err != nil { + return types.ZeroFIL, types.ZeroFIL, 0, errors.New("invalid gas price (specify FIL as a decimal number)") + } + } + + limitOption := req.Options["gas-limit"] + if limitOption != nil { + gasLimitInt, ok = limitOption.(int64) + if !ok { + msg := fmt.Sprintf("invalid gas limit: %s", limitOption) + return types.ZeroFIL, types.ZeroFIL, 0, errors.New(msg) + } + } + + return fbig.Int{Int: feecap.Int}, fbig.Int{Int: premium.Int}, gasLimitInt, nil +} diff --git a/cmd/go-filecoin/main_daemon_test.go b/cmd/main_daemon_test.go similarity index 77% rename from cmd/go-filecoin/main_daemon_test.go rename to cmd/main_daemon_test.go index 0c02deb0ea..f45c31683b 100644 --- a/cmd/go-filecoin/main_daemon_test.go +++ b/cmd/main_daemon_test.go @@ -1,24 +1,24 @@ -package commands_test +package cmd_test import ( + "github.com/filecoin-project/venus/pkg/testhelpers" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "os" "os/exec" "path" "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + "time" ) func TestNoDaemonNoHang(t *testing.T) { tf.IntegrationTest(t) - // Start the daemon to initialize a new repo d := testhelpers.NewDaemon(t).Start() + //todo should readline for stdout for confirming rpc status + time.Sleep(time.Second * 5) // rename the lock files to a safe place repoDir := d.RepoDir() require.NoError(t, os.Rename(path.Join(repoDir, "api"), path.Join(repoDir, "api.backup"))) @@ -32,7 +32,7 @@ func TestNoDaemonNoHang(t *testing.T) { require.NoError(t, os.Rename(path.Join(repoDir, "repo.lock.backup"), path.Join(repoDir, "repo.lock"))) // run actor ls with the old repo that still has the lock file, but no running daemon - out, _ := exec.Command(testhelpers.MustGetFilecoinBinary(), "--repodir", d.RepoDir(), "actor", "ls").CombinedOutput() + out, _ := exec.Command(testhelpers.MustGetFilecoinBinary(), "--repodir", d.RepoDir(), "state", "list-actor").CombinedOutput() assert.Contains(t, string(out), "Is the daemon running?") } diff --git a/cmd/main_test.go b/cmd/main_test.go new file mode 100644 index 0000000000..baca2c9605 --- /dev/null +++ b/cmd/main_test.go @@ -0,0 +1,26 @@ +package cmd + +import ( + "context" + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + cmds "github.com/ipfs/go-ipfs-cmds" + "github.com/stretchr/testify/assert" +) + +func TestRequiresDaemon(t *testing.T) { + tf.UnitTest(t) + + reqWithDaemon, err := cmds.NewRequest(context.Background(), []string{"chain", "head"}, nil, []string{}, nil, RootCmdDaemon) + assert.NoError(t, err) + assert.True(t, requiresDaemon(reqWithDaemon)) + + reqWithoutDaemon, err := cmds.NewRequest(context.Background(), []string{"daemon"}, nil, []string{}, nil, RootCmd) + assert.NoError(t, err) + assert.False(t, requiresDaemon(reqWithoutDaemon)) + + reqSubcmdDaemon, err := cmds.NewRequest(context.Background(), []string{"leb128", "decode"}, nil, []string{"A=="}, nil, RootCmd) + assert.NoError(t, err) + assert.False(t, requiresDaemon(reqSubcmdDaemon)) +} diff --git a/cmd/message.go b/cmd/message.go new file mode 100644 index 0000000000..fa3b4b8db4 --- /dev/null +++ b/cmd/message.go @@ -0,0 +1,177 @@ +package cmd + +import ( + "bytes" + "context" + "encoding/hex" + "encoding/json" + "fmt" + "reflect" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cmds "github.com/ipfs/go-ipfs-cmds" + "github.com/pkg/errors" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// MessageSendResult is the return type for message send command +type MessageSendResult struct { + Cid cid.Cid + GasUsed int64 + Preview bool +} + +var msgSendCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Send a message", // This feels too generic... + }, + Arguments: []cmds.Argument{ + cmds.StringArg("target", true, false, "address of the actor to send the message to"), + cmds.StringArg("value", true, false, "amount of FIL"), + }, + Options: []cmds.Option{ + cmds.StringOption("value", "Value to send with message in FIL"), + cmds.StringOption("from", "address to send message from"), + feecapOption, + premiumOption, + limitOption, + cmds.Uint64Option("nonce", "specify the nonce to use"), + cmds.StringOption("params-json", "specify invocation parameters in json"), + cmds.StringOption("params-hex", "specify invocation parameters in hex"), + cmds.Uint64Option("method", "The method to invoke on the target actor"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + toAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + v := req.Arguments[1] + val, err := types.ParseFIL(v) + if err != nil { + return xerrors.Errorf("mal-formed value: %v", err) + } + + methodID := builtin.MethodSend + method, ok := req.Options["method"] + if ok { + methodID = abi.MethodNum(method.(uint64)) + } + + fromAddr, err := fromAddrOrDefault(req, env) + if err != nil { + return err + } + + if methodID == builtin.MethodSend && fromAddr.String() == toAddr.String() { + return errors.New("self-transfer is not allowed") + } + + feecap, premium, gasLimit, err := parseGasOptions(req) + if err != nil { + return err + } + + var params []byte + rawPJ := req.Options["params-json"] + if rawPJ != nil { + decparams, err := decodeTypedParams(req.Context, env.(*node.Env), toAddr, methodID, rawPJ.(string)) + if err != nil { + return fmt.Errorf("failed to decode json params: %s", err) + } + params = decparams + } + + rawPH := req.Options["params-hex"] + if rawPH != nil { + if params != nil { + return fmt.Errorf("can only specify one of 'params-json' and 'params-hex'") + } + decparams, err := hex.DecodeString(rawPH.(string)) + if err != nil { + return fmt.Errorf("failed to decode hex params: %s", err) + } + params = decparams + } + + msg := &types.Message{ + From: fromAddr, + To: toAddr, + Value: abi.TokenAmount{Int: val.Int}, + GasPremium: premium, + GasFeeCap: feecap, + GasLimit: gasLimit, + Method: methodID, + Params: params, + } + + nonceOption := req.Options["nonce"] + c := cid.Undef + if nonceOption != nil { + nonce, ok := nonceOption.(uint64) + if !ok { + return xerrors.Errorf("invalid nonce option: %v", nonceOption) + } + msg.Nonce = nonce + + sm, err := env.(*node.Env).WalletAPI.WalletSignMessage(req.Context, msg.From, msg) + if err != nil { + return err + } + + _, err = env.(*node.Env).MessagePoolAPI.MpoolPush(req.Context, sm) + if err != nil { + return err + } + c = sm.Cid() + } else { + sm, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(req.Context, msg, nil) + if err != nil { + return err + } + c = sm.Cid() + } + + return re.Emit(c.String()) + }, +} + +func decodeTypedParams(ctx context.Context, fapi *node.Env, to address.Address, method abi.MethodNum, paramstr string) ([]byte, error) { + act, err := fapi.ChainAPI.StateGetActor(ctx, to, types.EmptyTSK) + if err != nil { + return nil, err + } + + methodMeta, found := chain.MethodsMap[act.Code][method] + if !found { + return nil, fmt.Errorf("method %d not found on actor %s", method, act.Code) + } + + p := reflect.New(methodMeta.Params.Elem()).Interface().(cbg.CBORMarshaler) + + if err := json.Unmarshal([]byte(paramstr), p); err != nil { + return nil, fmt.Errorf("unmarshaling input into params type: %s", err) + } + + buf := new(bytes.Buffer) + if err := p.MarshalCBOR(buf); err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +// WaitResult is the result of a message wait call. +type WaitResult struct { + Message *types.Message + Receipt *types.MessageReceipt + Signature vm.ActorMethodSignature +} diff --git a/cmd/message_integration_test.go b/cmd/message_integration_test.go new file mode 100644 index 0000000000..74f352c7e8 --- /dev/null +++ b/cmd/message_integration_test.go @@ -0,0 +1,103 @@ +package cmd_test + +import ( + "context" + "github.com/filecoin-project/venus/pkg/constants" + "strconv" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/app/node/test" + "github.com/filecoin-project/venus/fixtures/fortest" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestMessageSend(t *testing.T) { + t.Skip("This can be unskipped with fake proofs") + tf.IntegrationTest(t) + ctx := context.Background() + builder := test.NewNodeBuilder(t) + defaultAddr := fortest.TestAddresses[0] + + cs := test.FixtureChainSeed(t) + builder.WithGenesisInit(cs.GenesisInitFunc) + builder.WithConfig(test.DefaultAddressConfigOpt(defaultAddr)) + builder.WithInitOpt(cs.KeyInitOpt(1)) + builder.WithInitOpt(cs.KeyInitOpt(0)) + + n, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + from, err := n.Wallet().API().WalletDefaultAddress(ctx) // this should = fixtures.TestAddresses[0] + require.NoError(t, err) + + t.Log("[failure] invalid target") + cmdClient.RunFail( + ctx, + address.ErrUnknownNetwork.Error(), + "send", + "--from", from.String(), + "--gas-price", "0", "--gas-limit", "300", + "--value=10", "xyz", + ) + + t.Log("[success] with from") + cmdClient.RunSuccess( + ctx, + "send", + "--from", from.String(), + "--gas-price", "1", + "--gas-limit", "300", + fortest.TestAddresses[3].String(), + ) + + t.Log("[success] with from and int value") + cmdClient.RunSuccess( + ctx, + "send", + "--from", from.String(), + "--gas-price", "1", + "--gas-limit", "300", + "--value", "10", + fortest.TestAddresses[3].String(), + ) + + t.Log("[success] with from and decimal value") + cmdClient.RunSuccess( + ctx, + "send", + "--from", from.String(), + "--gas-price", "1", + "--gas-limit", "300", + "--value", "5.5", + fortest.TestAddresses[3].String(), + ) +} + +func TestMessageSendBlockGasLimit(t *testing.T) { + tf.IntegrationTest(t) + t.Skip("Unskip using fake proofs") + + ctx := context.Background() + builder := test.NewNodeBuilder(t) + defaultAddr := fortest.TestAddresses[0] + + buildWithMiner(t, builder) + builder.WithConfig(test.DefaultAddressConfigOpt(defaultAddr)) + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + doubleTheBlockGasLimit := strconv.Itoa(int(constants.BlockGasLimit) * 2) + + t.Run("when the gas limit is above the block limit, the message fails", func(t *testing.T) { + cmdClient.RunFail( + ctx, + "block gas limit", + "send", + "--gas-price", "1", "--gas-limit", doubleTheBlockGasLimit, + "--value=10", fortest.TestAddresses[1].String(), + ) + }) +} diff --git a/cmd/miner.go b/cmd/miner.go new file mode 100644 index 0000000000..721a876ae9 --- /dev/null +++ b/cmd/miner.go @@ -0,0 +1,381 @@ +package cmd + +import ( + "bytes" + "fmt" + "time" + + "github.com/docker/go-units" + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + power2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/power" + cmds "github.com/ipfs/go-ipfs-cmds" + cbor "github.com/ipfs/go-ipld-cbor" + logging "github.com/ipfs/go-log/v2" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/app/submodule/chain" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/pkg/wallet" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + "github.com/filecoin-project/venus/venus-shared/actors/policy" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/chain/params" +) + +var minerCmdLog = logging.Logger("miner.cmd") + +var minerCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Interact with actors. Actors are built-in smart contracts.", + }, + Subcommands: map[string]*cmds.Command{ + "new": newMinerCmd, + "info": minerInfoCmd, + "actor": minerActorCmd, + "proving": minerProvingCmd, + }, +} + +var newMinerCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Create a new miner.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("owner", true, false, "owner key to use"), + }, + Options: []cmds.Option{ + cmds.StringOption("worker", "worker key to use (overrides --create-worker-key)"), + cmds.BoolOption("create-worker-key", "Create separate worker key"), + cmds.StringOption("from", "Select which address to send actor creation message from"), + cmds.StringOption("gas-premium", "Set gas premium for initialization messages in AttoFIL").WithDefault("0"), + cmds.StringOption("sector-size", "specify sector size to use").WithDefault(units.BytesSize(float64(policy.GetDefaultSectorSize()))), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + ctx := req.Context + + owner, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + sectorSize, _ := req.Options["sector-size"].(string) + ssize, err := units.RAMInBytes(sectorSize) + if err != nil { + return fmt.Errorf("failed to parse sector size: %v", err) + } + + gp, _ := req.Options["gas-premium"].(string) + gasPrice, err := types.ParseFIL(gp) + if err != nil { + return xerrors.Errorf("failed to parse gas-price flag: %s", err) + } + + worker := owner + workerAddr, _ := req.Options["worker-address"].(string) + createWorkerKey, _ := req.Options["create-worker-key"].(bool) + if workerAddr != "" { + worker, err = address.NewFromString(workerAddr) + } else if createWorkerKey { // TODO: Do we need to force this if owner is Secpk? + if !env.(*node.Env).WalletAPI.HasPassword(ctx) { + return errMissPassword + } + if env.(*node.Env).WalletAPI.WalletState(req.Context) == wallet.Lock { + return errWalletLocked + } + if worker, err = env.(*node.Env).WalletAPI.WalletNewAddress(req.Context, address.BLS); err != nil { + return err + } + } + if err != nil { + return err + } + + // make sure the worker account exists on chain + _, err = env.(*node.Env).ChainAPI.StateLookupID(ctx, worker, types.EmptyTSK) + if err != nil { + signed, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, &types.Message{ + From: owner, + To: worker, + Value: big.NewInt(0), + }, nil) + if err != nil { + return xerrors.Errorf("push worker init: %v", err) + } + + cid := signed.Cid() + + minerCmdLog.Infof("Initializing worker account %s, message: %s", worker, cid) + minerCmdLog.Infof("Waiting for confirmation") + _ = re.Emit("Initializing worker account " + worker.String() + ", message: " + cid.String()) + + mw, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, cid, constants.MessageConfidence, constants.LookbackNoLimit, true) + if err != nil { + return xerrors.Errorf("waiting for worker init: %v", err) + } + if mw.Receipt.ExitCode != 0 { + return xerrors.Errorf("initializing worker account failed: exit code %d", mw.Receipt.ExitCode) + } + } + + nv, err := env.(*node.Env).ChainAPI.StateNetworkVersion(ctx, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("getting network version: %v", err) + } + + spt, err := miner.SealProofTypeFromSectorSize(abi.SectorSize(ssize), nv) + if err != nil { + return xerrors.Errorf("getting seal proof type: %v", err) + } + + params, err := actors.SerializeParams(&power2.CreateMinerParams{ + Owner: owner, + Worker: worker, + SealProofType: spt, + Peer: abi.PeerID(env.(*node.Env).NetworkAPI.NetworkGetPeerID(ctx)), + }) + if err != nil { + return err + } + + minerCmdLog.Info("peer id: ", env.(*node.Env).NetworkAPI.NetworkGetPeerID(ctx)) + + sender := owner + fromstr, _ := req.Options["from"].(string) + if len(fromstr) != 0 { + faddr, err := address.NewFromString(fromstr) + if err != nil { + return fmt.Errorf("could not parse from address: %v", err) + } + sender = faddr + } + + createStorageMinerMsg := &types.Message{ + To: power.Address, + From: sender, + Value: big.Zero(), + + Method: power.Methods.CreateMiner, + Params: params, + + GasLimit: 0, + GasPremium: abi.TokenAmount{Int: gasPrice.Int}, + } + + signed, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, createStorageMinerMsg, nil) + if err != nil { + return xerrors.Errorf("pushing createMiner message: %w", err) + } + + cid := signed.Cid() + minerCmdLog.Infof("Pushed CreateMiner message: %s", cid) + minerCmdLog.Infof("Waiting for confirmation") + _ = re.Emit("Pushed CreateMiner message: " + cid.String()) + + mw, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, cid, constants.MessageConfidence, constants.LookbackNoLimit, true) + if err != nil { + return xerrors.Errorf("waiting for createMiner message: %v", err) + } + + if mw.Receipt.ExitCode != 0 { + return xerrors.Errorf("create miner failed: exit code %d", mw.Receipt.ExitCode) + } + + var retval power2.CreateMinerReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(mw.Receipt.Return)); err != nil { + return err + } + + s := fmt.Sprintf("New miners address is: %s (%s)", retval.IDAddress, retval.RobustAddress) + minerCmdLog.Info(s) + + return re.Emit(s) + }, + Type: "", +} + +var minerInfoCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Print miner info.", + }, + Options: []cmds.Option{ + cmds.BoolOption("hide-sectors-info", "hide-sectors-info"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + ctx := req.Context + blockstoreAPI := env.(*node.Env).BlockStoreAPI + api := env.(*node.Env).ChainAPI + + blockDelay, err := blockDelay(req) + if err != nil { + return err + } + + head, err := api.ChainHead(ctx) + if err != nil { + return err + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + var chainSyncStr string + switch { + case time.Now().Unix()-int64(head.MinTimestamp()) < int64(blockDelay*3/2): // within 1.5 epochs + chainSyncStr = "[Chain: sync ok]" + case time.Now().Unix()-int64(head.MinTimestamp()) < int64(blockDelay*5): // within 5 epochs + chainSyncStr = fmt.Sprintf("[Chain: sync slow (%s behind)]", time.Since(time.Unix(int64(head.MinTimestamp()), 0)).Truncate(time.Second)) + default: + chainSyncStr = fmt.Sprintf("[Chain: sync behind! (%s behind)]", time.Since(time.Unix(int64(head.MinTimestamp()), 0)).Truncate(time.Second)) + } + + basefee := head.MinTicketBlock().ParentBaseFee + writer.Printf("%s [basefee %s]\n", chainSyncStr, types.FIL(basefee).Short()) + + mact, err := api.StateGetActor(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + tbs := blockstoreutil.NewTieredBstore(chain.NewAPIBlockstore(blockstoreAPI), blockstoreutil.NewTemporary()) + mas, err := miner.Load(adt.WrapStore(ctx, cbor.NewCborStore(tbs)), mact) + if err != nil { + return err + } + + // Sector size + mi, err := api.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + ssize := types.SizeStr(big.NewInt(int64(mi.SectorSize))) + writer.Printf("Miner: %s (%s sectors)\n", maddr, ssize) + + pow, err := api.StateMinerPower(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + rpercI := big.Div(big.Mul(pow.MinerPower.RawBytePower, big.NewInt(1000000)), pow.TotalPower.RawBytePower) + qpercI := big.Div(big.Mul(pow.MinerPower.QualityAdjPower, big.NewInt(1000000)), pow.TotalPower.QualityAdjPower) + + writer.Printf("Power: %s / %s (%0.4f%%)\n", + types.DeciStr(pow.MinerPower.QualityAdjPower), + types.DeciStr(pow.TotalPower.QualityAdjPower), + float64(qpercI.Int64())/10000) + + writer.Printf("Raw: %s / %s (%0.4f%%)\n", + types.SizeStr(pow.MinerPower.RawBytePower), + types.SizeStr(pow.TotalPower.RawBytePower), + float64(rpercI.Int64())/10000) + + secCounts, err := api.StateMinerSectorCount(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + proving := secCounts.Active + secCounts.Faulty + nfaults := secCounts.Faulty + writer.Printf("\tCommitted: %s\n", types.SizeStr(big.Mul(big.NewInt(int64(secCounts.Live)), big.NewInt(int64(mi.SectorSize))))) + if nfaults == 0 { + writer.Printf("\tProving: %s\n", types.SizeStr(big.Mul(big.NewInt(int64(proving)), big.NewInt(int64(mi.SectorSize))))) + } else { + var faultyPercentage float64 + if secCounts.Live != 0 { + faultyPercentage = float64(10000*nfaults/secCounts.Live) / 100. + } + writer.Printf("Proving: %s (%s Faulty, %.2f%%)\n", + types.SizeStr(big.Mul(big.NewInt(int64(proving)), big.NewInt(int64(mi.SectorSize)))), + types.SizeStr(big.Mul(big.NewInt(int64(nfaults)), big.NewInt(int64(mi.SectorSize)))), + faultyPercentage) + } + + if !pow.HasMinPower { + writer.Println("Below minimum power threshold, no blocks will be won") + } else { + expWinChance := float64(big.Mul(qpercI, big.NewInt(int64(params.BlocksPerEpoch))).Int64()) / 1000000 + if expWinChance > 0 { + if expWinChance > 1 { + expWinChance = 1 + } + winRate := time.Duration(float64(time.Second*time.Duration(blockDelay)) / expWinChance) + winPerDay := float64(time.Hour*24) / float64(winRate) + + writer.Printf("Expected block win rate: %.4f/day (every %s)\n", winPerDay, winRate.Truncate(time.Second)) + } + } + + writer.Println() + + spendable := big.Zero() + + // NOTE: there's no need to unlock anything here. Funds only + // vest on deadline boundaries, and they're unlocked by cron. + lockedFunds, err := mas.LockedFunds() + if err != nil { + return xerrors.Errorf("getting locked funds: %w", err) + } + availBalance, err := mas.AvailableBalance(mact.Balance) + if err != nil { + return xerrors.Errorf("getting available balance: %w", err) + } + spendable = big.Add(spendable, availBalance) + + writer.Printf("Miner Balance: %s\n", types.FIL(mact.Balance).Short()) + writer.Printf(" PreCommit: %s\n", types.FIL(lockedFunds.PreCommitDeposits).Short()) + writer.Printf(" Pledge: %s\n", types.FIL(lockedFunds.InitialPledgeRequirement).Short()) + writer.Printf(" Vesting: %s\n", types.FIL(lockedFunds.VestingFunds).Short()) + writer.Printf(" Available: %s\n", types.FIL(availBalance).Short()) + + mb, err := api.StateMarketBalance(ctx, maddr, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("getting market balance: %w", err) + } + spendable = big.Add(spendable, big.Sub(mb.Escrow, mb.Locked)) + + writer.Printf("Market Balance: %s\n", types.FIL(mb.Escrow).Short()) + writer.Printf(" Locked: %s\n", types.FIL(mb.Locked).Short()) + writer.Printf(" Available: %s\n", types.FIL(big.Sub(mb.Escrow, mb.Locked)).Short()) + + wb, err := env.(*node.Env).WalletAPI.WalletBalance(ctx, mi.Worker) + if err != nil { + return xerrors.Errorf("getting worker balance: %w", err) + } + spendable = big.Add(spendable, wb) + writer.Printf("Worker Balance: %s\n", types.FIL(wb).Short()) + if len(mi.ControlAddresses) > 0 { + cbsum := big.Zero() + for _, ca := range mi.ControlAddresses { + b, err := env.(*node.Env).WalletAPI.WalletBalance(ctx, ca) + if err != nil { + return xerrors.Errorf("getting control address balance: %w", err) + } + cbsum = big.Add(cbsum, b) + } + spendable = big.Add(spendable, cbsum) + + writer.Printf(" Control: %s\n", types.FIL(cbsum).Short()) + } + writer.Printf("Total Spendable: %s\n", types.FIL(spendable).Short()) + + // TODO: grab actr state / info + // * Sealed sectors (count / bytes) + // * Power + + return re.Emit(buf) + }, +} diff --git a/cmd/miner_actor.go b/cmd/miner_actor.go new file mode 100644 index 0000000000..3a5331433a --- /dev/null +++ b/cmd/miner_actor.go @@ -0,0 +1,848 @@ +package cmd + +import ( + "bytes" + "fmt" + "strings" + + "github.com/filecoin-project/go-state-types/network" + + "github.com/filecoin-project/venus/pkg/constants" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + cmds "github.com/ipfs/go-ipfs-cmds" + cbor "github.com/ipfs/go-ipld-cbor" + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/app/submodule/chain" + "github.com/filecoin-project/venus/cmd/tablewriter" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var minerActorCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "manipulate the miner actor.", + }, + Subcommands: map[string]*cmds.Command{ + "set-addrs": actorSetAddrsCmd, + "set-peer-id": actorSetPeeridCmd, + "withdraw": actorWithdrawCmd, + "repay-debt": actorRepayDebtCmd, + "set-owner": actorSetOwnerCmd, + "control": actorControl, + "propose-change-worker": actorProposeChangeWorker, + "confirm-change-worker": actorConfirmChangeWorker, + }, +} + +var actorSetAddrsCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "set addresses that your miner can be publicly dialed on.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + }, + Options: []cmds.Option{ + cmds.Int64Option("gas-limit", "set gas limit").WithDefault(int64(0)), + cmds.StringsOption("addrs", "set addresses"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + ctx := req.Context + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + var addrs []abi.Multiaddrs + addresses, _ := req.Options["addrs"].([]string) + for _, addr := range addresses { + maddr, err := ma.NewMultiaddr(addr) + if err != nil { + return fmt.Errorf("failed to parse %q as a multiaddr: %v", addr, err) + } + + maddrNop2p, strip := ma.SplitFunc(maddr, func(c ma.Component) bool { + return c.Protocol().Code == ma.P_P2P + }) + + if strip != nil { + _ = re.Emit(fmt.Sprint("Stripping peerid ", strip, " from ", maddr)) + } + addrs = append(addrs, maddrNop2p.Bytes()) + } + + mi, err := env.(*node.Env).ChainAPI.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + params, err := actors.SerializeParams(&miner2.ChangeMultiaddrsParams{NewMultiaddrs: addrs}) + if err != nil { + return err + } + + gasLimit, _ := req.Options["gas-limit"].(int64) + + smsg, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, &types.Message{ + To: maddr, + From: mi.Worker, + Value: big.NewInt(0), + GasLimit: gasLimit, + Method: miner.Methods.ChangeMultiaddrs, + Params: params, + }, nil) + if err != nil { + return err + } + + return re.Emit(fmt.Sprintf("Requested multiaddrs change in message %s", smsg.Cid())) + }, + Type: "", +} + +var actorSetPeeridCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "set the peer id of your miner.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + cmds.StringArg("peer-id", true, false, "set peer id"), + }, + Options: []cmds.Option{ + cmds.Int64Option("gas-limit", "set gas limit"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + ctx := req.Context + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + pid, err := peer.Decode(req.Arguments[1]) + if err != nil { + return fmt.Errorf("failed to parse input as a peerId: %w", err) + } + + mi, err := env.(*node.Env).ChainAPI.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + params, err := actors.SerializeParams(&miner2.ChangePeerIDParams{NewID: abi.PeerID(pid)}) + if err != nil { + return err + } + + gasLimit, _ := req.Options["gas-limit"].(int64) + + smsg, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, &types.Message{ + To: maddr, + From: mi.Worker, + Value: big.NewInt(0), + GasLimit: gasLimit, + Method: miner.Methods.ChangePeerID, + Params: params, + }, nil) + if err != nil { + return err + } + return re.Emit(fmt.Sprintf("Requested peerid change in message %s", smsg.Cid())) + }, + Type: "", +} + +var actorWithdrawCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "withdraw available balance.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + cmds.StringArg("amount", true, false, "[amount (FIL)]"), + }, + Options: []cmds.Option{ + cmds.Uint64Option("confidence", "number of block confirmations to wait for").WithDefault(constants.MessageConfidence), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + ctx := req.Context + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + mi, err := env.(*node.Env).ChainAPI.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + available, err := env.(*node.Env).ChainAPI.StateMinerAvailableBalance(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + amount := available + f, err := types.ParseFIL(req.Arguments[1]) + if err != nil { + return xerrors.Errorf("parsing 'amount' argument: %v", err) + } + + amount = abi.TokenAmount(f) + + if amount.GreaterThan(available) { + return xerrors.Errorf("can't withdraw more funds than available; requested: %s; available: %s", amount, available) + } + + params, err := actors.SerializeParams(&miner2.WithdrawBalanceParams{ + AmountRequested: amount, // Default to attempting to withdraw all the extra funds in the miner actor + }) + if err != nil { + return err + } + + smsg, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, &types.Message{ + To: maddr, + From: mi.Owner, + Value: big.NewInt(0), + Method: miner.Methods.WithdrawBalance, + Params: params, + }, nil) + if err != nil { + return err + } + _ = re.Emit(fmt.Sprintf("Requested rewards withdrawal in message %s", smsg.Cid())) + + confidence, _ := req.Options["confidence"].(uint64) + // wait for it to get mined into a block + _ = re.Emit(fmt.Sprintf("waiting for %d epochs for confirmation..", confidence)) + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, smsg.Cid(), confidence, -1, true) + if err != nil { + return err + } + + // check it executed successfully + if wait.Receipt.ExitCode != 0 { + return err + } + + nv, err := env.(*node.Env).ChainAPI.StateNetworkVersion(ctx, wait.TipSet) + if err != nil { + return err + } + + if nv >= network.Version14 { + var withdrawn abi.TokenAmount + if err := withdrawn.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)); err != nil { + return err + } + + _ = re.Emit(fmt.Sprintf("Successfully withdrew %s", types.MustParseFIL(withdrawn.String()+"attofil"))) + if withdrawn.LessThan(amount) { + _ = re.Emit(fmt.Sprintf("Note that this is less than the requested amount of %s\n", amount.String()+"attofil")) + } + } + + return nil + }, + Type: "", +} + +var actorRepayDebtCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "pay down a miner's debt.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + }, + Options: []cmds.Option{ + cmds.StringsOption("amount", "[amount (FIL)]"), + cmds.StringsOption("from", "optionally specify the account to send funds from"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + ctx := req.Context + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + mi, err := env.(*node.Env).ChainAPI.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + var amount abi.TokenAmount + fil, _ := req.Options["amount"].(string) + if len(fil) != 0 { + f, err := types.ParseFIL(fil) + if err != nil { + return xerrors.Errorf("parsing 'amount' argument: %w", err) + } + + amount = abi.TokenAmount(f) + } else { + mact, err := env.(*node.Env).ChainAPI.StateGetActor(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + store := adt.WrapStore(ctx, cbor.NewCborStore(chain.NewAPIBlockstore(env.(*node.Env).BlockStoreAPI))) + + mst, err := miner.Load(store, mact) + if err != nil { + return err + } + + amount, err = mst.FeeDebt() + if err != nil { + return err + } + + } + + fromAddr := mi.Worker + from, _ := req.Options["from"].(string) + if from != "" { + addr, err := address.NewFromString(from) + if err != nil { + return err + } + + fromAddr = addr + } + + fromID, err := env.(*node.Env).ChainAPI.StateLookupID(ctx, fromAddr, types.EmptyTSK) + if err != nil { + return err + } + + if !mi.IsController(fromID) { + return xerrors.Errorf("sender isn't a controller of miner: %s", fromID) + } + + smsg, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, &types.Message{ + To: maddr, + From: fromID, + Value: amount, + Method: miner.Methods.RepayDebt, + Params: nil, + }, nil) + if err != nil { + return err + } + + return re.Emit(fmt.Sprintf("Sent repay debt message %s", smsg.Cid())) + }, + Type: "", +} + +var actorSetOwnerCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "set-owner.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("miner-address", true, false, "Current miner address"), + cmds.StringArg("owner-address", true, false, "Owner address"), + }, + Options: []cmds.Option{ + cmds.BoolOption("really-do-it", "Actually send transaction performing the action").WithDefault(false), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if !req.Options["really-do-it"].(bool) { + return re.Emit("Pass --really-do-it to actually execute this action") + } + + ctx := req.Context + api := env.(*node.Env).ChainAPI + + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + na, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + + newAddr, err := api.StateLookupID(ctx, na, types.EmptyTSK) + if err != nil { + return err + } + + mi, err := api.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + sp, err := actors.SerializeParams(&newAddr) + if err != nil { + return xerrors.Errorf("serializing params: %w", err) + } + + smsg, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, &types.Message{ + From: mi.Owner, + To: maddr, + Method: miner.Methods.ChangeOwnerAddress, + Value: big.Zero(), + Params: sp, + }, nil) + if err != nil { + return xerrors.Errorf("mpool push: %w", err) + } + + cid := smsg.Cid() + _ = re.Emit("Propose Message CID: " + cid.String()) + + // wait for it to get mined into a block + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, cid, constants.MessageConfidence, constants.LookbackNoLimit, true) + if err != nil { + return err + } + + // check it executed successfully + if wait.Receipt.ExitCode != 0 { + _ = re.Emit(fmt.Sprintf("Propose owner change failed, exitcode: %d", wait.Receipt.ExitCode)) + return err + } + + smsg, err = env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, &types.Message{ + From: newAddr, + To: maddr, + Method: miner.Methods.ChangeOwnerAddress, + Value: big.Zero(), + Params: sp, + }, nil) + if err != nil { + return xerrors.Errorf("mpool push: %w", err) + } + + cid = smsg.Cid() + _ = re.Emit("Approve Message CID: " + cid.String()) + + // wait for it to get mined into a block + wait, err = env.(*node.Env).ChainAPI.StateWaitMsg(ctx, cid, constants.MessageConfidence, constants.LookbackNoLimit, true) + if err != nil { + return err + } + + // check it executed successfully + if wait.Receipt.ExitCode != 0 { + _ = re.Emit(fmt.Sprintf("Approve owner change failed, exitcode: %d", wait.Receipt.ExitCode)) + return err + } + return re.Emit(fmt.Sprintf("Requested rewards withdrawal in message %s", smsg.Cid())) + }, + Type: "", +} + +var actorControl = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Manage control addresses.", + }, + Subcommands: map[string]*cmds.Command{ + "list": actorControlList, + "set": actorControlSet, + }, +} + +var actorControlList = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Get currently set control addresses.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + }, + Options: []cmds.Option{ + cmds.BoolOption("verbose", "verbose").WithDefault(false), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + ctx := req.Context + api := env.(*node.Env).ChainAPI + + mi, err := api.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + tw := tablewriter.New( + tablewriter.Col("name"), + tablewriter.Col("ID"), + tablewriter.Col("key"), + tablewriter.Col("use"), + tablewriter.Col("balance"), + ) + + commit := map[address.Address]struct{}{} + precommit := map[address.Address]struct{}{} + post := map[address.Address]struct{}{} + + for _, ca := range mi.ControlAddresses { + post[ca] = struct{}{} + } + + printKey := func(name string, a address.Address) { + b, err := env.(*node.Env).WalletAPI.WalletBalance(ctx, a) + if err != nil { + _ = re.Emit(fmt.Sprintf("%s %s: error getting balance: %s", name, a, err)) + return + } + + k, err := env.(*node.Env).ChainAPI.StateAccountKey(ctx, a, types.EmptyTSK) + if err != nil { + _ = re.Emit(fmt.Sprintf("%s %s: error getting account key: %s", name, a, err)) + return + } + + kstr := k.String() + if !req.Options["verbose"].(bool) { + kstr = kstr[:9] + "..." + } + + var uses []string + if a == mi.Worker { + uses = append(uses, "other") + } + if _, ok := post[a]; ok { + uses = append(uses, "post") + } + if _, ok := precommit[a]; ok { + uses = append(uses, "precommit") + } + if _, ok := commit[a]; ok { + uses = append(uses, "commit") + } + + tw.Write(map[string]interface{}{ + "name": name, + "ID": a, + "key": kstr, + "use": strings.Join(uses, " "), + "balance": types.FIL(b).String(), + }) + } + + printKey("owner", mi.Owner) + printKey("worker", mi.Worker) + for i, ca := range mi.ControlAddresses { + printKey(fmt.Sprintf("control-%d", i), ca) + } + + buf := new(bytes.Buffer) + if err := tw.Flush(buf); err != nil { + return err + } + + return re.Emit(buf) + }, +} + +var actorControlSet = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Set control address(-es).", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("miner-address", true, false, "Address of miner to show"), + }, + Options: []cmds.Option{ + cmds.BoolOption("really-do-it", "Actually send transaction performing the action").WithDefault(false), + cmds.StringsOption("addrs", "Control addresses"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + ctx := req.Context + api := env.(*node.Env).ChainAPI + + mi, err := env.(*node.Env).ChainAPI.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + del := map[address.Address]struct{}{} + existing := map[address.Address]struct{}{} + for _, controlAddress := range mi.ControlAddresses { + ka, err := api.StateAccountKey(ctx, controlAddress, types.EmptyTSK) + if err != nil { + return err + } + + del[ka] = struct{}{} + existing[ka] = struct{}{} + } + + var toSet []address.Address + addrs, _ := req.Options["addrs"].([]string) + + for i, as := range addrs { + a, err := address.NewFromString(as) + if err != nil { + return xerrors.Errorf("parsing address %d: %w", i, err) + } + + ka, err := api.StateAccountKey(ctx, a, types.EmptyTSK) + if err != nil { + return err + } + + // make sure the address exists on chain + _, err = api.StateLookupID(ctx, ka, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("looking up %s: %w", ka, err) + } + + delete(del, ka) + toSet = append(toSet, ka) + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + for a := range del { + writer.Println("Remove " + a.String()) + } + for _, a := range toSet { + if _, exists := existing[a]; !exists { + writer.Println("Add " + a.String()) + } + } + + if !req.Options["really-do-it"].(bool) { + return re.Emit("Pass --really-do-it to actually execute this action") + } + + cwp := &miner2.ChangeWorkerAddressParams{ + NewWorker: mi.Worker, + NewControlAddrs: toSet, + } + + sp, err := actors.SerializeParams(cwp) + if err != nil { + return xerrors.Errorf("serializing params: %w", err) + } + + smsg, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, &types.Message{ + From: mi.Owner, + To: maddr, + Method: miner.Methods.ChangeWorkerAddress, + + Value: big.Zero(), + Params: sp, + }, nil) + if err != nil { + return xerrors.Errorf("mpool push: %w", err) + } + + writer.Println("Message CID: " + smsg.Cid().String()) + + return re.Emit(buf) + }, +} + +var actorProposeChangeWorker = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Propose a worker address change.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("miner-address", true, false, "Address of miner to show"), + cmds.StringArg("work-address", true, false, "Propose a worker address change"), + }, + Options: []cmds.Option{ + cmds.BoolOption("really-do-it", "Actually send transaction performing the action").WithDefault(false), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + na, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + + ctx := req.Context + api := env.(*node.Env).ChainAPI + + mi, err := api.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + newAddr, err := api.StateLookupID(ctx, na, types.EmptyTSK) + if err != nil { + return err + } + + if mi.NewWorker.Empty() { + if mi.Worker == newAddr { + return fmt.Errorf("worker address already set to %s", na) + } + } else { + if mi.NewWorker == newAddr { + return fmt.Errorf("change to worker address %s already pending", na) + } + } + + if !req.Options["really-do-it"].(bool) { + return re.Emit("Pass --really-do-it to actually execute this action") + } + + cwp := &miner2.ChangeWorkerAddressParams{ + NewWorker: newAddr, + NewControlAddrs: mi.ControlAddresses, + } + + sp, err := actors.SerializeParams(cwp) + if err != nil { + return xerrors.Errorf("serializing params: %w", err) + } + + smsg, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, &types.Message{ + From: mi.Owner, + To: maddr, + Method: miner.Methods.ChangeWorkerAddress, + Value: big.Zero(), + Params: sp, + }, nil) + if err != nil { + return xerrors.Errorf("mpool push: %w", err) + } + + cid := smsg.Cid() + _ = re.Emit("Propose Message CID: " + cid.String()) + + // wait for it to get mined into a block + wait, err := api.StateWaitMsg(ctx, cid, constants.MessageConfidence, constants.LookbackNoLimit, true) + if err != nil { + return err + } + + // check it executed successfully + if wait.Receipt.ExitCode != 0 { + _ = re.Emit("Propose worker change failed!") + return err + } + + mi, err = api.StateMinerInfo(ctx, maddr, wait.TipSet) + if err != nil { + return err + } + if mi.NewWorker != newAddr { + return fmt.Errorf("proposed worker address change not reflected on chain: expected '%s', found '%s'", na, mi.NewWorker) + } + + _ = re.Emit(fmt.Sprintf("Worker key change to %s successfully proposed.", na)) + return re.Emit(fmt.Sprintf("Call 'confirm-change-worker' at or after height %d to complete.", mi.WorkerChangeEpoch)) + }, + Type: "", +} + +var actorConfirmChangeWorker = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Confirm a worker address change.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("miner-address", true, false, "Address of miner to show"), + cmds.StringArg("work-address", true, false, "Address of worker to show"), + }, + Options: []cmds.Option{ + cmds.BoolOption("really-do-it", "Actually send transaction performing the action").WithDefault(false), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + na, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + + ctx := req.Context + api := env.(*node.Env).ChainAPI + + mi, err := api.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + newAddr, err := api.StateLookupID(ctx, na, types.EmptyTSK) + if err != nil { + return err + } + + if mi.NewWorker.Empty() { + if mi.Worker == newAddr { + return fmt.Errorf("worker address already set to %s", na) + } + } else { + if mi.NewWorker == newAddr { + return fmt.Errorf("change to worker address %s already pending", na) + } + } + + head, err := api.ChainHead(ctx) + if err != nil { + return xerrors.Errorf("failed to get the chain head: %w", err) + } + + height := head.Height() + if height < mi.WorkerChangeEpoch { + return xerrors.Errorf("worker key change cannot be confirmed until %d, current height is %d", mi.WorkerChangeEpoch, height) + } + + if !req.Options["really-do-it"].(bool) { + return re.Emit("Pass --really-do-it to actually execute this action") + } + + smsg, err := env.(*node.Env).MessagePoolAPI.MpoolPushMessage(ctx, &types.Message{ + From: mi.Owner, + To: maddr, + Method: miner.Methods.ConfirmUpdateWorkerKey, + Value: big.Zero(), + }, nil) + if err != nil { + return xerrors.Errorf("mpool push: %w", err) + } + + cid := smsg.Cid() + _ = re.Emit("Confirm Message CID: " + cid.String()) + + // wait for it to get mined into a block + wait, err := api.StateWaitMsg(ctx, cid, constants.MessageConfidence, constants.LookbackNoLimit, true) + if err != nil { + return err + } + + // check it executed successfully + if wait.Receipt.ExitCode != 0 { + _ = re.Emit("Worker change failed!") + return err + } + + mi, err = api.StateMinerInfo(ctx, maddr, wait.TipSet) + if err != nil { + return err + } + if mi.Worker != newAddr { + return fmt.Errorf("confirmed worker address change not reflected on chain: expected '%s', found '%s'", newAddr, mi.Worker) + } + + return re.Emit(fmt.Sprintf("Requested peerid change in message %s", smsg.Cid())) + }, + Type: "", +} diff --git a/cmd/miner_proving.go b/cmd/miner_proving.go new file mode 100644 index 0000000000..1eec0af374 --- /dev/null +++ b/cmd/miner_proving.go @@ -0,0 +1,358 @@ +package cmd + +import ( + "bytes" + "fmt" + "strconv" + "text/tabwriter" + + "github.com/filecoin-project/go-address" + cmds "github.com/ipfs/go-ipfs-cmds" + cbor "github.com/ipfs/go-ipld-cbor" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/app/submodule/chain" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var minerProvingCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "View proving information.", + }, + Subcommands: map[string]*cmds.Command{ + "info": provingInfoCmd, + "deadlines": provingDeadlinesCmd, + "deadline": provingDeadlineInfoCmd, + "faults": provingFaultsCmd, + }, +} + +var provingInfoCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "View current state information.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + ctx := req.Context + + blockDelay, err := blockDelay(req) + if err != nil { + return err + } + + chainAPI := env.(*node.Env).ChainAPI + head, err := chainAPI.ChainHead(ctx) + if err != nil { + return xerrors.Errorf("getting chain head: %v", err) + } + + mact, err := chainAPI.StateGetActor(ctx, maddr, head.Key()) + if err != nil { + return err + } + + stor := adt.WrapStore(ctx, cbor.NewCborStore(chain.NewAPIBlockstore(env.(*node.Env).BlockStoreAPI))) + + mas, err := miner.Load(stor, mact) + if err != nil { + return err + } + + cd, err := chainAPI.StateMinerProvingDeadline(ctx, maddr, head.Key()) + if err != nil { + return xerrors.Errorf("getting miner info: %v", err) + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + writer.Printf("Miner: %s\n", maddr) + + proving := uint64(0) + faults := uint64(0) + recovering := uint64(0) + curDeadlineSectors := uint64(0) + + if err := mas.ForEachDeadline(func(dlIdx uint64, dl miner.Deadline) error { + return dl.ForEachPartition(func(partIdx uint64, part miner.Partition) error { + if bf, err := part.LiveSectors(); err != nil { + return err + } else if count, err := bf.Count(); err != nil { + return err + } else { + proving += count + if dlIdx == cd.Index { + curDeadlineSectors += count + } + } + + if bf, err := part.FaultySectors(); err != nil { + return err + } else if count, err := bf.Count(); err != nil { + return err + } else { + faults += count + } + + if bf, err := part.RecoveringSectors(); err != nil { + return err + } else if count, err := bf.Count(); err != nil { + return err + } else { + recovering += count + } + + return nil + }) + }); err != nil { + return xerrors.Errorf("walking miner deadlines and partitions: %v", err) + } + + var faultPerc float64 + if proving > 0 { + faultPerc = float64(faults*10000/proving) / 100 + } + + writer.Printf("Current Epoch: %d\n", cd.CurrentEpoch) + + writer.Printf("Proving Period Boundary: %d\n", cd.PeriodStart%cd.WPoStProvingPeriod) + writer.Printf("Proving Period Start: %s\n", EpochTime(cd.CurrentEpoch, cd.PeriodStart, blockDelay)) + writer.Printf("Next Period Start: %s\n", EpochTime(cd.CurrentEpoch, cd.PeriodStart+cd.WPoStProvingPeriod, blockDelay)) + + writer.Println() + writer.Printf("Faults: %d (%.2f%%)\n", faults, faultPerc) + writer.Printf("Recovering: %d\n", recovering) + + writer.Printf("Deadline Index: %d\n", cd.Index) + writer.Printf("Deadline Sectors: %d\n", curDeadlineSectors) + writer.Printf("Deadline Open: %s\n", EpochTime(cd.CurrentEpoch, cd.Open, blockDelay)) + writer.Printf("Deadline Close: %s\n", EpochTime(cd.CurrentEpoch, cd.Close, blockDelay)) + writer.Printf("Deadline Challenge: %s\n", EpochTime(cd.CurrentEpoch, cd.Challenge, blockDelay)) + writer.Printf("Deadline FaultCutoff: %s\n", EpochTime(cd.CurrentEpoch, cd.FaultCutoff, blockDelay)) + + return re.Emit(buf) + }, +} + +var provingDeadlinesCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "View the current proving period deadlines information.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + ctx := req.Context + api := env.(*node.Env).ChainAPI + + deadlines, err := api.StateMinerDeadlines(ctx, maddr, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("getting deadlines: %w", err) + } + + di, err := api.StateMinerProvingDeadline(ctx, maddr, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("getting deadlines: %w", err) + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + writer.Printf("Miner: %s\n", maddr) + tw := tabwriter.NewWriter(buf, 2, 4, 2, ' ', 0) + _, _ = fmt.Fprintln(tw, "deadline\tpartitions\tsectors (faults)\tproven partitions") + + for dlIdx, deadline := range deadlines { + partitions, err := api.StateMinerPartitions(ctx, maddr, uint64(dlIdx), types.EmptyTSK) + if err != nil { + return xerrors.Errorf("getting partitions for deadline %d: %w", dlIdx, err) + } + + provenPartitions, err := deadline.PostSubmissions.Count() + if err != nil { + return err + } + + sectors := uint64(0) + faults := uint64(0) + + for _, partition := range partitions { + sc, err := partition.AllSectors.Count() + if err != nil { + return err + } + + sectors += sc + + fc, err := partition.FaultySectors.Count() + if err != nil { + return err + } + + faults += fc + } + + var cur string + if di.Index == uint64(dlIdx) { + cur += "\t(current)" + } + _, _ = fmt.Fprintf(tw, "%d\t%d\t%d (%d)\t%d%s\n", dlIdx, len(partitions), sectors, faults, provenPartitions, cur) + } + if err := tw.Flush(); err != nil { + return err + } + + return re.Emit(buf) + }, +} + +var provingDeadlineInfoCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "View the current proving period deadlines information.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + cmds.StringArg("index", true, false, "Index of deadline to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 2 { + return xerrors.Errorf("must pass two parameters") + } + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + ctx := req.Context + api := env.(*node.Env).ChainAPI + + dlIdx, err := strconv.ParseUint(req.Arguments[1], 10, 64) + if err != nil { + return xerrors.Errorf("could not parse deadline index: %w", err) + } + + deadlines, err := api.StateMinerDeadlines(ctx, maddr, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("getting deadlines: %w", err) + } + + di, err := api.StateMinerProvingDeadline(ctx, maddr, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("getting deadlines: %w", err) + } + + partitions, err := api.StateMinerPartitions(ctx, maddr, dlIdx, types.EmptyTSK) + if err != nil { + return xerrors.Errorf("getting partitions for deadline %d: %w", dlIdx, err) + } + + provenPartitions, err := deadlines[dlIdx].PostSubmissions.Count() + if err != nil { + return err + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + + writer.Printf("Deadline Index: %d\n", dlIdx) + writer.Printf("Partitions: %d\n", len(partitions)) + writer.Printf("Proven Partitions: %d\n", provenPartitions) + writer.Printf("Current: %t\n\n", di.Index == dlIdx) + + for pIdx, partition := range partitions { + sectorCount, err := partition.AllSectors.Count() + if err != nil { + return err + } + + sectorNumbers, err := partition.AllSectors.All(sectorCount) + if err != nil { + return err + } + + faultsCount, err := partition.FaultySectors.Count() + if err != nil { + return err + } + + fn, err := partition.FaultySectors.All(faultsCount) + if err != nil { + return err + } + + writer.Printf("Partition Index: %d\n", pIdx) + writer.Printf("Sectors: %d\n", sectorCount) + writer.Printf("Sector Numbers: %v\n", sectorNumbers) + writer.Printf("Faults: %d\n", faultsCount) + writer.Printf("Faulty Sectors: %d\n", fn) + } + return re.Emit(buf) + }, +} + +var provingFaultsCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "View the currently known proving faulty sectors information.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + ctx := req.Context + api := env.(*node.Env).ChainAPI + bstoreAPI := env.(*node.Env).BlockStoreAPI + stor := adt.WrapStore(ctx, cbor.NewCborStore(chain.NewAPIBlockstore(bstoreAPI))) + + mact, err := api.StateGetActor(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + mas, err := miner.Load(stor, mact) + if err != nil { + return err + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + writer.Printf("Miner: %s\n", maddr) + + tw := tabwriter.NewWriter(buf, 2, 4, 2, ' ', 0) + _, _ = fmt.Fprintln(tw, "deadline\tpartition\tsectors") + err = mas.ForEachDeadline(func(dlIdx uint64, dl miner.Deadline) error { + return dl.ForEachPartition(func(partIdx uint64, part miner.Partition) error { + faults, err := part.FaultySectors() + if err != nil { + return err + } + return faults.ForEach(func(num uint64) error { + _, _ = fmt.Fprintf(tw, "%d\t%d\t%d\n", dlIdx, partIdx, num) + return nil + }) + }) + }) + if err != nil { + return err + } + if err := tw.Flush(); err != nil { + return err + } + + return re.Emit(buf) + }, +} diff --git a/cmd/mpool.go b/cmd/mpool.go new file mode 100644 index 0000000000..ac6c00c58d --- /dev/null +++ b/cmd/mpool.go @@ -0,0 +1,747 @@ +package cmd + +import ( + "context" + "encoding/json" + "fmt" + "sort" + "strconv" + + stdbig "math/big" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + cmds "github.com/ipfs/go-ipfs-cmds" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/messagepool" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + mptypes "github.com/filecoin-project/venus/venus-shared/messagepool" +) + +var mpoolCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Manage message pool", + }, + Subcommands: map[string]*cmds.Command{ + "pending": mpoolPending, + "clear": mpoolClear, + "sub": mpoolSub, + "stat": mpoolStat, + "replace": mpoolReplaceCmd, + "find": mpoolFindCmd, + "config": mpoolConfig, + "gas-perf": mpoolGasPerfCmd, + "publish": mpoolPublish, + "delete": mpoolDeleteAddress, + "select": mpoolSelect, + }, +} + +var mpoolDeleteAddress = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "delete", + ShortDescription: "delete message by address", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "optionally specify the wallet for publish message"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + ctx := context.TODO() + + from, _ := req.Options["from"].(string) + if from == "" { + return xerrors.Errorf("address can`t be null") + } + + addr, err := address.NewFromString(from) + if err != nil { + return err + } + + err = env.(*node.Env).MessagePoolAPI.MpoolDeleteByAdress(ctx, addr) + if err != nil { + return err + } + + return nil + }, +} + +var mpoolSelect = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "select", + ShortDescription: "select message from mpool", + }, + Options: []cmds.Option{ + cmds.FloatOption("quality", "optionally specify the wallet for publish message").WithDefault(float64(0.5)), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + ctx := context.TODO() + + quality, _ := req.Options["quality"].(float64) + head, err := env.(*node.Env).ChainAPI.ChainHead(ctx) + if err != nil { + return err + } + msgs, err := env.(*node.Env).MessagePoolAPI.MpoolSelect(ctx, head.Key(), quality) + if err != nil { + return err + } + selectMsg, err := json.MarshalIndent(msgs, " ", "\t") + if err != nil { + return err + } + + return printOneString(re, string(selectMsg)) + }, +} + +var mpoolPublish = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "publish", + ShortDescription: "publish pending messages", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "optionally specify the wallet for publish message"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + from, _ := req.Options["from"].(string) + + ctx := context.TODO() + + var fromAddr address.Address + if from == "" { + defaddr, err := env.(*node.Env).WalletAPI.WalletDefaultAddress(req.Context) + if err != nil { + return err + } + + fromAddr = defaddr + } else { + addr, err := address.NewFromString(from) + if err != nil { + return err + } + + fromAddr = addr + } + + err := env.(*node.Env).MessagePoolAPI.MpoolPublishByAddr(ctx, fromAddr) + if err != nil { + return err + } + + return nil + }, +} + +var mpoolFindCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "find", + ShortDescription: "find a message in the mempool", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "search for messages with given 'from' address"), + cmds.StringOption("to", "search for messages with given 'to' address"), + cmds.Int64Option("method", "search for messages with given method"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + from, _ := req.Options["from"].(string) + to, _ := req.Options["to"].(string) + method, _ := req.Options["method"].(int64) + + ctx := context.TODO() + pending, err := env.(*node.Env).MessagePoolAPI.MpoolPending(ctx, types.TipSetKey{}) + if err != nil { + return err + } + + var toFilter, fromFilter address.Address + if len(to) > 0 { + a, err := address.NewFromString(to) + if err != nil { + return fmt.Errorf("'to' address was invalid: %w", err) + } + + toFilter = a + } + + if len(from) > 0 { + a, err := address.NewFromString(from) + if err != nil { + return fmt.Errorf("'from' address was invalid: %w", err) + } + + fromFilter = a + } + + var methodFilter *abi.MethodNum + if method > 0 { + m := abi.MethodNum(method) + methodFilter = &m + } + + var out []*types.SignedMessage + for _, m := range pending { + if toFilter != address.Undef && m.Message.To != toFilter { + continue + } + + if fromFilter != address.Undef && m.Message.From != fromFilter { + continue + } + + if methodFilter != nil && *methodFilter != m.Message.Method { + continue + } + + out = append(out, m) + } + + _ = re.Emit(out) + return nil + }, +} + +var mpoolReplaceCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "replace", + ShortDescription: "replace a message in the mempool", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("from", false, true, "from"), + cmds.StringArg("nonce", false, true, "nonce"), + cmds.StringArg("message-cid", false, true, "message-cid"), + }, + Options: []cmds.Option{ + feecapOption, + premiumOption, + limitOption, + cmds.BoolOption("auto", "automatically reprice the specified message"), + cmds.StringOption("max-fee", "Spend up to X FIL for this message (applicable for auto mode)"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + feecap, premium, gasLimit, err := parseGasOptions(req) + if err != nil { + return err + } + + auto, _ := req.Options["auto"].(bool) + maxFee, _ := req.Options["max-fee"].(string) + + var from address.Address + var nonce uint64 + switch len(req.Arguments) { + case 1: + mcid, err := cid.Decode(req.Arguments[0]) + if err != nil { + return err + } + + msg, err := env.(*node.Env).ChainAPI.ChainGetMessage(req.Context, mcid) + if err != nil { + return fmt.Errorf("could not find referenced message: %w", err) + } + + from = msg.From + nonce = msg.Nonce + case 2: + f, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + n, err := strconv.ParseUint(req.Arguments[1], 10, 64) + if err != nil { + return err + } + + from = f + nonce = n + default: + return xerrors.New("command syntax error") + } + + ts, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return xerrors.Errorf("getting chain head: %w", err) + } + + pending, err := env.(*node.Env).MessagePoolAPI.MpoolPending(req.Context, ts.Key()) + if err != nil { + return err + } + + var found *types.SignedMessage + for _, p := range pending { + if p.Message.From == from && p.Message.Nonce == nonce { + found = p + break + } + } + + if found == nil { + return fmt.Errorf("no pending message found from %s with nonce %d", from, nonce) + } + + msg := found.Message + + if auto { + minRBF := messagepool.ComputeMinRBF(msg.GasPremium) + + var mss *apitypes.MessageSendSpec + if len(maxFee) > 0 { + maxFee, err := big.FromString(maxFee) + if err != nil { + return fmt.Errorf("parsing max-spend: %w", err) + } + mss = &apitypes.MessageSendSpec{ + MaxFee: maxFee, + } + } + + // msg.GasLimit = 0 // TODO: need to fix the way we estimate gas limits to account for the messages already being in the mempool + msg.GasFeeCap = abi.NewTokenAmount(0) + msg.GasPremium = abi.NewTokenAmount(0) + retm, err := env.(*node.Env).MessagePoolAPI.GasEstimateMessageGas(req.Context, &msg, mss, types.TipSetKey{}) + if err != nil { + return fmt.Errorf("failed to estimate gas values: %w", err) + } + + msg.GasPremium = big.Max(retm.GasPremium, minRBF) + msg.GasFeeCap = big.Max(retm.GasFeeCap, msg.GasPremium) + + mff := func() (abi.TokenAmount, error) { + return abi.TokenAmount{Int: config.DefaultDefaultMaxFee.Int}, nil + } + + messagepool.CapGasFee(mff, &msg, mss) + } else { + msg.GasFeeCap = abi.NewTokenAmount(0) + msg.GasPremium = abi.NewTokenAmount(0) + newMsg, err := env.(*node.Env).MessagePoolAPI.GasEstimateMessageGas(req.Context, &msg, nil, types.TipSetKey{}) + if err != nil { + return fmt.Errorf("failed to estimate gas values: %w", err) + } + + msg = *newMsg + if gasLimit > 0 { + msg.GasLimit = gasLimit + } + + if err == nil && premium.Int64() != 0 { + msg.GasPremium = premium + } + + // TODO: estimate fee cap here + msg.GasFeeCap = feecap + } + + smsg, err := env.(*node.Env).WalletAPI.WalletSignMessage(req.Context, msg.From, &msg) + if err != nil { + return fmt.Errorf("failed to sign message: %w", err) + } + + cid, err := env.(*node.Env).MessagePoolAPI.MpoolPush(req.Context, smsg) + if err != nil { + return fmt.Errorf("failed to push new message to mempool: %w", err) + } + + _ = re.Emit(fmt.Sprintf("new message cid: %s", cid)) + return nil + }, +} + +var mpoolStat = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "print mpool state messages", + ShortDescription: ` +Get pending messages. +`, + }, + Options: []cmds.Option{ + cmds.BoolOption("local", "print stats for addresses in local wallet only"), + cmds.Int64Option("basefee-lookback", "number of blocks to look back for minimum basefee"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + local, _ := req.Options["local"].(bool) + basefee, _ := req.Options["basefee-lookback"].(int) + + ctx := context.TODO() + ts, err := env.(*node.Env).ChainAPI.ChainHead(ctx) + if err != nil { + return xerrors.Errorf("getting chain head: %w", err) + } + currBF := ts.Blocks()[0].ParentBaseFee + minBF := currBF + { + currTS := ts + for i := 0; i < basefee; i++ { + key := currTS.Parents() + currTS, err = env.(*node.Env).ChainAPI.ChainGetTipSet(req.Context, key) + if err != nil { + return xerrors.Errorf("walking chain: %w", err) + } + if newBF := currTS.Blocks()[0].ParentBaseFee; newBF.LessThan(minBF) { + minBF = newBF + } + } + } + + var filter map[address.Address]struct{} + if local { + filter = map[address.Address]struct{}{} + + addrss := env.(*node.Env).WalletAPI.WalletAddresses(req.Context) + + for _, a := range addrss { + filter[a] = struct{}{} + } + } + + msgs, err := env.(*node.Env).MessagePoolAPI.MpoolPending(ctx, types.TipSetKey{}) + if err != nil { + return err + } + + type statBucket struct { + msgs map[uint64]*types.SignedMessage + } + type mpStat struct { + addr string + past, cur, future uint64 + belowCurr, belowPast uint64 + gasLimit big.Int + } + + buckets := map[address.Address]*statBucket{} + for _, v := range msgs { + if filter != nil { + if _, has := filter[v.Message.From]; !has { + continue + } + } + + bkt, ok := buckets[v.Message.From] + if !ok { + bkt = &statBucket{ + msgs: map[uint64]*types.SignedMessage{}, + } + buckets[v.Message.From] = bkt + } + + bkt.msgs[v.Message.Nonce] = v + } + + var out []mpStat + + for a, bkt := range buckets { + act, err := env.(*node.Env).ChainAPI.StateGetActor(ctx, a, ts.Key()) + if err != nil { + fmt.Printf("%s, err: %s\n", a, err) + continue + } + + cur := act.Nonce + for { + _, ok := bkt.msgs[cur] + if !ok { + break + } + cur++ + } + + var s mpStat + s.addr = a.String() + s.gasLimit = big.Zero() + + for _, m := range bkt.msgs { + if m.Message.Nonce < act.Nonce { + s.past++ + } else if m.Message.Nonce > cur { + s.future++ + } else { + s.cur++ + } + + if m.Message.GasFeeCap.LessThan(currBF) { + s.belowCurr++ + } + if m.Message.GasFeeCap.LessThan(minBF) { + s.belowPast++ + } + + s.gasLimit = big.Add(s.gasLimit, big.NewInt(m.Message.GasLimit)) + } + + out = append(out, s) + } + + sort.Slice(out, func(i, j int) bool { + return out[i].addr < out[j].addr + }) + + var total mpStat + total.gasLimit = big.Zero() + + for _, stat := range out { + total.past += stat.past + total.cur += stat.cur + total.future += stat.future + total.belowCurr += stat.belowCurr + total.belowPast += stat.belowPast + total.gasLimit = big.Add(total.gasLimit, stat.gasLimit) + + _ = re.Emit(fmt.Sprintf("%s: Nonce past: %d, cur: %d, future: %d; FeeCap cur: %d, min-%d: %d, gasLimit: %s", stat.addr, stat.past, stat.cur, stat.future, stat.belowCurr, basefee, stat.belowPast, stat.gasLimit)) + } + + _ = re.Emit("-----") + _ = re.Emit(fmt.Sprintf("total: Nonce past: %d, cur: %d, future: %d; FeeCap cur: %d, min-%d: %d, gasLimit: %s", total.past, total.cur, total.future, total.belowCurr, basefee, total.belowPast, total.gasLimit)) + + return nil + }, +} + +var mpoolPending = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Get pending messages", + ShortDescription: ` +Get pending messages. +`, + }, + Options: []cmds.Option{ + cmds.BoolOption("local", "print pending messages for addresses in local wallet only"), + cmds.BoolOption("cids", "only print cids of messages in output"), + cmds.StringOption("to", "return messages to a given address"), + cmds.StringOption("from", "return messages from a given address"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + local, _ := req.Options["local"].(bool) + cids, _ := req.Options["cids"].(bool) + to, _ := req.Options["to"].(string) + from, _ := req.Options["from"].(string) + + var toa, froma address.Address + if to != "" { + a, err := address.NewFromString(to) + if err != nil { + return fmt.Errorf("given 'to' address %q was invalid: %w", to, err) + } + toa = a + } + + if from != "" { + a, err := address.NewFromString(from) + if err != nil { + return fmt.Errorf("given 'to' address %q was invalid: %w", from, err) + } + froma = a + } + + var filter map[address.Address]struct{} + if local { + filter = map[address.Address]struct{}{} + + addrss := env.(*node.Env).WalletAPI.WalletAddresses(req.Context) + for _, a := range addrss { + filter[a] = struct{}{} + } + } + + msgs, err := env.(*node.Env).MessagePoolAPI.MpoolPending(req.Context, types.TipSetKey{}) + + if err != nil { + return err + } + for _, msg := range msgs { + if filter != nil { + if _, has := filter[msg.Message.From]; !has { + continue + } + } + + if toa != address.Undef && msg.Message.To != toa { + continue + } + if froma != address.Undef && msg.Message.From != froma { + continue + } + + if cids { + _ = re.Emit(msg.Cid()) + _ = re.Emit(err) + } else { + _ = re.Emit(msg) + } + } + + return nil + }, +} + +var mpoolClear = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "clear", + ShortDescription: ` +Clear all pending messages from the mpool (USE WITH CARE) +`, + }, + Options: []cmds.Option{ + cmds.BoolOption("local", "also clear local messages"), + cmds.BoolOption("really-do-it", "must be specified for the action to take effect"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + local, _ := req.Options["local"].(bool) + really, _ := req.Options["really-do-it"].(bool) + + if !really { + //nolint:golint + return fmt.Errorf("--really-do-it must be specified for this action to have an effect; you have been warned") + } + + return env.(*node.Env).MessagePoolAPI.MpoolClear(context.TODO(), local) + }, +} + +var mpoolSub = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "sub", + ShortDescription: ` +Subscribe to mpool changes +`, + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + ctx := context.TODO() + sub, err := env.(*node.Env).MessagePoolAPI.MpoolSub(ctx) + if err != nil { + return err + } + + for { + select { + case update := <-sub: + _ = re.Emit(update) + case <-ctx.Done(): + return nil + } + } + }, +} + +var mpoolConfig = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "config", + ShortDescription: "get or set current mpool configuration", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("cfg", false, false, "config"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + ctx := context.TODO() + + if len(req.Arguments) > 0 { + cfg := new(mptypes.MpoolConfig) + + paras := req.Arguments[0] + err := json.Unmarshal([]byte(paras), cfg) + if err != nil { + return err + } + + return env.(*node.Env).MessagePoolAPI.MpoolSetConfig(ctx, cfg) + } + + cfg, err := env.(*node.Env).MessagePoolAPI.MpoolGetConfig(ctx) + if err != nil { + return err + } + _ = re.Emit(cfg) + + return nil + }, +} + +var mpoolGasPerfCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "gas-perf", + ShortDescription: ` +Check gas performance of messages in mempool +`, + }, + Options: []cmds.Option{ + cmds.BoolOption("all", "print gas performance for all mempool messages (default only prints for local)"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + all, _ := req.Options["all"].(bool) + + ctx := context.TODO() + + msgs, err := env.(*node.Env).MessagePoolAPI.MpoolPending(ctx, types.TipSetKey{}) + if err != nil { + return err + } + + var filter map[address.Address]struct{} + if !all { + filter = map[address.Address]struct{}{} + + addrss := env.(*node.Env).WalletAPI.WalletAddresses(req.Context) + + for _, a := range addrss { + filter[a] = struct{}{} + } + + var filtered []*types.SignedMessage + for _, msg := range msgs { + if _, has := filter[msg.Message.From]; !has { + continue + } + filtered = append(filtered, msg) + } + msgs = filtered + } + + ts, err := env.(*node.Env).ChainAPI.ChainHead(ctx) + + if err != nil { + return xerrors.Errorf("failed to get chain head: %w", err) + } + + baseFee := ts.Blocks()[0].ParentBaseFee + + bigBlockGasLimit := big.NewInt(constants.BlockGasLimit) + + getGasReward := func(msg *types.SignedMessage) big.Int { + maxPremium := big.Sub(msg.Message.GasFeeCap, baseFee) + if big.Cmp(maxPremium, msg.Message.GasPremium) < 0 { + maxPremium = msg.Message.GasPremium + } + return big.Mul(maxPremium, big.NewInt(msg.Message.GasLimit)) + } + + getGasPerf := func(gasReward big.Int, gasLimit int64) float64 { + // gasPerf = gasReward * constants.BlockGasLimit / gasLimit + a := new(stdbig.Rat).SetInt(new(stdbig.Int).Mul(gasReward.Int, bigBlockGasLimit.Int)) + b := stdbig.NewRat(1, gasLimit) + c := new(stdbig.Rat).Mul(a, b) + r, _ := c.Float64() + return r + } + + for _, m := range msgs { + gasReward := getGasReward(m) + gasPerf := getGasPerf(gasReward, m.Message.GasLimit) + + _ = re.Emit(fmt.Sprintf("%s %d %s %f", m.Message.From, m.Message.Nonce, gasReward, gasPerf)) + } + + return nil + }, +} diff --git a/cmd/multisig.go b/cmd/multisig.go new file mode 100644 index 0000000000..31575ff8c6 --- /dev/null +++ b/cmd/multisig.go @@ -0,0 +1,1300 @@ +package cmd + +import ( + "bytes" + "encoding/hex" + "encoding/json" + "fmt" + "reflect" + "sort" + "strconv" + "strings" + "text/tabwriter" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" + msig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" + "github.com/filecoin-project/venus/app/node" + sbchain "github.com/filecoin-project/venus/app/submodule/chain" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/multisig" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + cmds "github.com/ipfs/go-ipfs-cmds" + cbor "github.com/ipfs/go-ipld-cbor" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" +) + +var multisigCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Interact with a multisig wallet", + }, + Options: []cmds.Option{ + cmds.Uint64Option("number of block confirmations to wait for").WithDefault(constants.MessageConfidence), + }, + Subcommands: map[string]*cmds.Command{ + "create": msigCreateCmd, + "inspect": msigInspectCmd, + "propose": msigProposeCmd, + "propose-remove": msigRemoveProposeCmd, + "approve": msigApproveCmd, + "add-propose": msigAddProposeCmd, + "add-approve": msigAddApproveCmd, + "add-cancel": msigAddCancelCmd, + "swap-propose": msigSwapProposeCmd, + "swap-approve": msigSwapApproveCmd, + "swap-cancel": msigSwapCancelCmd, + "lock-propose": msigLockProposeCmd, + "lock-approve": msigLockApproveCmd, + "lock-cancel": msigLockCancelCmd, + "vested": msigVestedCmd, + "propose-threshold": msigProposeThresholdCmd, + }, +} + +var msigCreateCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Create a new multisig wallet", + Usage: "[address1 address2 ...]", + }, + Options: []cmds.Option{ + cmds.Uint64Option("required", "number of required approvals (uses number of signers provided if omitted)").WithDefault(uint64(0)), + cmds.StringOption("value", "initial funds to give to multisig").WithDefault("0"), + cmds.Uint64Option("duration", "length of the period over which funds unlock").WithDefault(uint64(0)), + cmds.StringOption("from", "account to send the create message from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("addresses", true, false, "approving addresses,Ps:'addr1 addr2 ...'"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) < 1 { + return fmt.Errorf("multisigs must have at least one signer") + } + addrStr := req.Arguments[0] + addrArr := strings.Split(addrStr, ",") + var addrs []address.Address + for _, a := range addrArr { + addr, err := address.NewFromString(a) + if err != nil { + return err + } + addrs = append(addrs, addr) + } + + // get the address we're going to use to create the multisig (can be one of the above, as long as they have funds) + var sendAddr address.Address + send := reqStringOption(req, "from") + if send == "" { + defaddr, err := env.(*node.Env).WalletAPI.WalletDefaultAddress(req.Context) + if err != nil { + return err + } + sendAddr = defaddr + } else { + addr, err := address.NewFromString(send) + if err != nil { + return err + } + sendAddr = addr + } + val := reqStringOption(req, "value") + filval, err := types.ParseFIL(val) + if err != nil { + return err + } + intVal := types.BigInt(filval) + + required := reqUint64Option(req, "required") + + duration := reqUint64Option(req, "duration") + d := abi.ChainEpoch(duration) + gp := types.NewInt(1) + + msgCid, err := env.(*node.Env).MultiSigAPI.MsigCreate(req.Context, required, addrs, d, intVal, sendAddr, gp) + if err != nil { + return err + } + // wait for it to get mined into a block + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(req.Context, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) + if err != nil { + return err + } + // check it executed successfully + if wait.Receipt.ExitCode != 0 { + return err + } + // get address of newly created miner + var execreturn init2.ExecReturn + if err := execreturn.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)); err != nil { + return err + } + // TODO: maybe register this somewhere + return re.Emit(fmt.Sprintf("Created new multisig: %s %s", execreturn.IDAddress, execreturn.RobustAddress)) + }, +} + +var msigInspectCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Inspect a multisig wallet", + Usage: "[address]", + }, + Options: []cmds.Option{ + cmds.BoolOption("vesting", "Include vesting details)"), + cmds.BoolOption("decode-params", "Decode parameters of transaction proposals"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "a multiSig wallet address"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) == 0 { + return fmt.Errorf("must specify address of multisig to inspect") + } + ctx := req.Context + store := adt.WrapStore(ctx, cbor.NewCborStore(sbchain.NewAPIBlockstore(env.(*node.Env).BlockStoreAPI))) + //store := env.(*node.Env).ChainAPI.ChainReader.Store(req.Context) + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + head, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + act, err := env.(*node.Env).ChainAPI.StateGetActor(req.Context, maddr, head.Key()) + if err != nil { + return err + } + + ownId, err := env.(*node.Env).ChainAPI.StateLookupID(req.Context, maddr, types.EmptyTSK) //nolint + if err != nil { + return err + } + mstate, err := multisig.Load(store, act) + if err != nil { + return err + } + locked, err := mstate.LockedBalance(head.Height()) + if err != nil { + return err + } + cliw := new(bytes.Buffer) + fmt.Fprintf(cliw, "Balance: %s\n", types.FIL(act.Balance)) + fmt.Fprintf(cliw, "Spendable: %s\n", types.FIL(types.BigSub(act.Balance, locked))) + + vesting := reqBoolOption(req, "vesting") + if vesting { + ib, err := mstate.InitialBalance() + if err != nil { + return err + } + fmt.Fprintf(cliw, "InitialBalance: %s\n", types.FIL(ib)) + se, err := mstate.StartEpoch() + if err != nil { + return err + } + fmt.Fprintf(cliw, "StartEpoch: %d\n", se) + ud, err := mstate.UnlockDuration() + if err != nil { + return err + } + fmt.Fprintf(cliw, "UnlockDuration: %d\n", ud) + } + + signers, err := mstate.Signers() + if err != nil { + return err + } + threshold, err := mstate.Threshold() + if err != nil { + return err + } + fmt.Fprintf(cliw, "Threshold: %d / %d\n", threshold, len(signers)) + fmt.Fprintln(cliw, "Signers:") + + signerTable := tabwriter.NewWriter(cliw, 8, 4, 2, ' ', 0) + fmt.Fprintf(signerTable, "ID\tAddress\n") + for _, s := range signers { + signerActor, err := env.(*node.Env).ChainAPI.StateAccountKey(req.Context, s, types.EmptyTSK) + if err != nil { + fmt.Fprintf(signerTable, "%s\t%s\n", s, "N/A") + } else { + fmt.Fprintf(signerTable, "%s\t%s\n", s, signerActor) + } + } + if err := signerTable.Flush(); err != nil { + return xerrors.Errorf("flushing output: %+v", err) + } + + pending := make(map[int64]multisig.Transaction) + if err := mstate.ForEachPendingTxn(func(id int64, txn multisig.Transaction) error { + pending[id] = txn + return nil + }); err != nil { + return xerrors.Errorf("reading pending transactions: %w", err) + } + + decParams := reqBoolOption(req, "decode-params") + fmt.Fprintln(cliw, "Transactions: ", len(pending)) + if len(pending) > 0 { + var txids []int64 + for txid := range pending { + txids = append(txids, txid) + } + sort.Slice(txids, func(i, j int) bool { + return txids[i] < txids[j] + }) + + w := tabwriter.NewWriter(cliw, 8, 4, 2, ' ', 0) + fmt.Fprintf(w, "ID\tState\tApprovals\tTo\tValue\tMethod\tParams\n") + for _, txid := range txids { + tx := pending[txid] + target := tx.To.String() + if tx.To == ownId { + target += " (self)" + } + targAct, err := env.(*node.Env).ChainAPI.StateGetActor(req.Context, tx.To, types.EmptyTSK) + paramStr := fmt.Sprintf("%x", tx.Params) + + if err != nil { + if tx.Method == 0 { + fmt.Fprintf(w, "%d\t%s\t%d\t%s\t%s\t%s(%d)\t%s\n", txid, "pending", len(tx.Approved), target, types.FIL(tx.Value), "Send", tx.Method, paramStr) + } else { + fmt.Fprintf(w, "%d\t%s\t%d\t%s\t%s\t%s(%d)\t%s\n", txid, "pending", len(tx.Approved), target, types.FIL(tx.Value), "new account, unknown method", tx.Method, paramStr) + } + } else { + method := chain.MethodsMap[targAct.Code][tx.Method] + + if decParams && tx.Method != 0 { + ptyp := reflect.New(method.Params.Elem()).Interface().(cbg.CBORUnmarshaler) + if err := ptyp.UnmarshalCBOR(bytes.NewReader(tx.Params)); err != nil { + return xerrors.Errorf("failed to decode parameters of transaction %d: %w", txid, err) + } + + b, err := json.Marshal(ptyp) + if err != nil { + return xerrors.Errorf("could not json marshal parameter type: %w", err) + } + paramStr = string(b) + } + fmt.Fprintf(w, "%d\t%s\t%d\t%s\t%s\t%s(%d)\t%s\n", txid, "pending", len(tx.Approved), target, types.FIL(tx.Value), method.Name, tx.Method, paramStr) + } + } + if err := w.Flush(); err != nil { + return xerrors.Errorf("flushing output: %+v", err) + } + } + return re.Emit(cliw) + }, +} + +var msigProposeCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Propose a multisig transaction", + Usage: "[multisigAddress destinationAddress value (optional)]", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "account to send the propose message from)"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "a multisig address which contains from"), + cmds.StringArg("destinationAddress", true, false, "recipient address"), + cmds.StringArg("value", true, false, "value to transfer"), + cmds.StringArg("methodId", false, false, "method to call in the proposed message"), + cmds.StringArg("methodParams", false, false, "params to include in the proposed message"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + reqLen := len(req.Arguments) + if reqLen < 3 { + return fmt.Errorf("must pass at least multisig address, destination, and value") + } + if reqLen > 3 && reqLen != 5 { + return fmt.Errorf("must either pass three or five arguments") + } + + ctx := req.Context + + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + dest, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + + value, err := types.ParseFIL(req.Arguments[2]) + if err != nil { + return err + } + + var method uint64 + var params []byte + if reqLen == 5 { + m, err := strconv.ParseUint(req.Arguments[3], 10, 64) + if err != nil { + return err + } + method = m + + p, err := hex.DecodeString(req.Arguments[4]) + if err != nil { + return err + } + params = p + } + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + + act, err := env.(*node.Env).ChainAPI.StateGetActor(ctx, msig, types.EmptyTSK) + if err != nil { + return fmt.Errorf("failed to look up multisig %s: %w", msig, err) + } + + if !builtin.IsMultisigActor(act.Code) { + return fmt.Errorf("actor %s is not a multisig actor", msig) + } + + msgCid, err := env.(*node.Env).MultiSigAPI.MsigPropose(ctx, msig, dest, types.BigInt(value), from, method, params) + if err != nil { + return err + } + buf := new(bytes.Buffer) + + fmt.Fprintln(buf, "send proposal in message: ", msgCid) + confidence := reqConfidence(req) + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, confidence, constants.LookbackNoLimit, true) + if err != nil { + return err + } + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("proposal returned exit %d", wait.Receipt.ExitCode) + } + + var retval msig2.ProposeReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)); err != nil { + return fmt.Errorf("failed to unmarshal propose return value: %w", err) + } + fmt.Fprintf(buf, "Transaction ID: %d\n", retval.TxnID) + + if retval.Applied { + fmt.Fprintf(buf, "Transaction was executed during propose\n") + fmt.Fprintf(buf, "Exit Code: %d\n", retval.Code) + fmt.Fprintf(buf, "Return Value: %x\n", retval.Ret) + } + return re.Emit(buf) + }, +} + +var msigRemoveProposeCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Propose to remove a signer", + Usage: "[multisigAddress signer]", + }, + Options: []cmds.Option{ + cmds.BoolOption("decrease-threshold", "whether the number of required signers should be decreased").WithDefault(false), + cmds.StringOption("from", "account to send the propose message from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("signer", true, false, "a wallet address of the multisig"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 2 { + return fmt.Errorf("must pass multisig address and signer address") + } + ctx := ReqContext(req.Context) + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + addr, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + dt := reqBoolOption(req, "decrease-threshold") + msgCid, err := env.(*node.Env).MultiSigAPI.MsigRemoveSigner(ctx, msig, from, addr, dt) + if err != nil { + return err + } + + fmt.Println("sent remove proposal in message: ", msgCid) + confidence := reqConfidence(req) + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, confidence, constants.LookbackNoLimit, true) + if err != nil { + return err + } + + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("add proposal returned exit %d", wait.Receipt.ExitCode) + } + + var ret multisig.ProposeReturn + err = ret.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)) + if err != nil { + return xerrors.Errorf("decoding proposal return: %w", err) + } + cliw := new(bytes.Buffer) + fmt.Fprintf(cliw, "sent remove singer proposal in message: %s\n", msgCid) + fmt.Fprintf(cliw, "TxnID: %d\n", ret.TxnID) + return re.Emit(cliw) + }, +} + +var msigApproveCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Approve a multisig message", + Usage: " [proposerAddress destination value [methodId methodParams]]", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "account to send the approve message from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("messageId", true, false, "proposed transaction ID"), + cmds.StringArg("proposerAddress", false, false, "proposer address"), + cmds.StringArg("destination", false, false, "recipient address"), + cmds.StringArg("value", false, false, "value to transfer"), + cmds.StringArg("methodId", false, false, "method to call in the proposed message"), + cmds.StringArg("methodParams", false, false, "params to include in the proposed message"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + argLen := len(req.Arguments) + if argLen < 2 { + return fmt.Errorf("must pass at least multisig address and message ID") + } + + if argLen > 2 && argLen < 5 { + return fmt.Errorf("usage: msig approve ") + } + + if argLen > 5 && argLen != 7 { + return fmt.Errorf("usage: msig approve [ ]") + } + + ctx := ReqContext(req.Context) + + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + txid, err := strconv.ParseUint(req.Arguments[1], 10, 64) + if err != nil { + return err + } + + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + var msgCid cid.Cid + if argLen == 2 { + msgCid, err = env.(*node.Env).MultiSigAPI.MsigApprove(ctx, msig, txid, from) + if err != nil { + return err + } + } else { + proposer, err := address.NewFromString(req.Arguments[2]) + if err != nil { + return err + } + + if proposer.Protocol() != address.ID { + proposer, err = env.(*node.Env).ChainAPI.StateLookupID(ctx, proposer, types.EmptyTSK) + if err != nil { + return err + } + } + + dest, err := address.NewFromString(req.Arguments[3]) + if err != nil { + return err + } + + value, err := types.ParseFIL(req.Arguments[4]) + if err != nil { + return err + } + + var method uint64 + var params []byte + if argLen == 7 { + m, err := strconv.ParseUint(req.Arguments[5], 10, 64) + if err != nil { + return err + } + method = m + + p, err := hex.DecodeString(req.Arguments[6]) + if err != nil { + return err + } + params = p + } + + msgCid, err = env.(*node.Env).MultiSigAPI.MsigApproveTxnHash(ctx, msig, txid, proposer, dest, types.BigInt(value), from, method, params) + if err != nil { + return err + } + } + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) + if err != nil { + return err + } + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("approve returned exit %d", wait.Receipt.ExitCode) + } + return re.Emit(fmt.Sprintf("sent approval in message: %s", msgCid)) + }, +} + +var msigAddProposeCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Propose to add a signer", + Usage: "[multisigAddress signer]", + }, + Options: []cmds.Option{ + cmds.BoolOption("increase-threshold", "whether the number of required signers should be increased").WithDefault(false), + cmds.StringOption("from", "account to send the propose message from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("signer", true, false, "a wallet address of the multisig"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 2 { + return fmt.Errorf("must pass multisig address and signer address") + } + ctx := ReqContext(req.Context) + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + addr, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + msgCid, err := env.(*node.Env).MultiSigAPI.MsigAddPropose(ctx, msig, from, addr, reqBoolOption(req, "increase-threshold")) + if err != nil { + return err + } + + confidence := reqConfidence(req) + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, confidence, constants.LookbackNoLimit, true) + if err != nil { + return err + } + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("add proposal returned exit %d", wait.Receipt.ExitCode) + } + + var ret multisig.ProposeReturn + err = ret.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)) + if err != nil { + return xerrors.Errorf("decoding proposal return: %w", err) + } + cliw := new(bytes.Buffer) + fmt.Fprintf(cliw, "sent add singer proposal in message: %s\n", msgCid) + fmt.Fprintf(cliw, "TxnID: %d\n", ret.TxnID) + return re.Emit(cliw) + }, +} + +var msigAddApproveCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Approve a message to add a signer", + Usage: "[multisigAddress proposerAddress txId newAddress increaseThreshold]", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "account to send the approve message from)"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("proposerAddress", true, false, "sender address of the approve msg"), + cmds.StringArg("txId", true, false, "proposed message ID"), + cmds.StringArg("newAddress", true, false, "new signer"), + cmds.StringArg("increaseThreshold", true, false, "whether the number of required signers should be increased"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 5 { + return fmt.Errorf("must pass multisig address, proposer address, transaction id, new signer address, whether to increase threshold") + } + ctx := ReqContext(req.Context) + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + prop, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + + txid, err := strconv.ParseUint(req.Arguments[2], 10, 64) + if err != nil { + return err + } + + newAdd, err := address.NewFromString(req.Arguments[3]) + if err != nil { + return err + } + + inc, err := strconv.ParseBool(req.Arguments[4]) + if err != nil { + return err + } + + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + msgCid, err := env.(*node.Env).MultiSigAPI.MsigAddApprove(ctx, msig, from, txid, prop, newAdd, inc) + if err != nil { + return err + } + + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) + if err != nil { + return err + } + + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("add approval returned exit %d", wait.Receipt.ExitCode) + } + + return re.Emit(fmt.Sprintf("sent add approval in message: %s", msgCid)) + }, +} + +var msigAddCancelCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Cancel a message to add a signer", + Usage: "[multisigAddress txId newAddress increaseThreshold]", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "account to send the approve message from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("txId", true, false, "proposed message ID"), + cmds.StringArg("newAddress", true, false, "new signer"), + cmds.StringArg("increaseThreshold", true, false, "whether the number of required signers should be increased"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + + if len(req.Arguments) != 4 { + return fmt.Errorf("must pass multisig address, transaction id, new signer address, whether to increase threshold") + } + ctx := ReqContext(req.Context) + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + txid, err := strconv.ParseUint(req.Arguments[1], 10, 64) + if err != nil { + return err + } + + newAdd, err := address.NewFromString(req.Arguments[2]) + if err != nil { + return err + } + + inc, err := strconv.ParseBool(req.Arguments[3]) + if err != nil { + return err + } + + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + + msgCid, err := env.(*node.Env).MultiSigAPI.MsigAddCancel(ctx, msig, from, txid, newAdd, inc) + if err != nil { + return err + } + + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) + if err != nil { + return err + } + + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("add cancellation returned exit %d", wait.Receipt.ExitCode) + } + return re.Emit(fmt.Sprintf("sent add cancellation in message: %s", msgCid)) + }, +} + +var msigSwapProposeCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Propose to swap signers", + Usage: "[multisigAddress oldAddress newAddress]", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "account to send the propose message from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("oldAddress", true, false, "sender address of the cancel msg"), + cmds.StringArg("newAddress", true, false, "new signer"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 3 { + return fmt.Errorf("must pass multisig address, old signer address, new signer address") + } + ctx := ReqContext(req.Context) + + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + oldAdd, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + + newAdd, err := address.NewFromString(req.Arguments[2]) + if err != nil { + return err + } + + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + msgCid, err := env.(*node.Env).MultiSigAPI.MsigSwapPropose(ctx, msig, from, oldAdd, newAdd) + if err != nil { + return err + } + + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) + if err != nil { + return err + } + + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("swap proposal returned exit %d", wait.Receipt.ExitCode) + } + var ret multisig.ProposeReturn + err = ret.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)) + if err != nil { + return xerrors.Errorf("decoding proposal return: %w", err) + } + cliw := new(bytes.Buffer) + fmt.Fprintf(cliw, "sent swap singer proposal in message: %s\n", msgCid) + fmt.Fprintf(cliw, "TxnID: %d\n", ret.TxnID) + return re.Emit(cliw) + }, +} + +var msigSwapApproveCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Approve a message to swap signers", + Usage: "[multisigAddress proposerAddress txId oldAddress newAddress]", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "account to send the approve message from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("proposerAddress", true, false, "sender address of the approve msg"), + cmds.StringArg("txId", true, false, "proposed message ID"), + cmds.StringArg("oldAddress", true, false, "old signer"), + cmds.StringArg("newAddress", true, false, "new signer"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 5 { + return fmt.Errorf("must pass multisig address, proposer address, transaction id, old signer address, new signer address") + } + ctx := ReqContext(req.Context) + + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + prop, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + + txid, err := strconv.ParseUint(req.Arguments[2], 10, 64) + if err != nil { + return err + } + + oldAdd, err := address.NewFromString(req.Arguments[3]) + if err != nil { + return err + } + + newAdd, err := address.NewFromString(req.Arguments[4]) + if err != nil { + return err + } + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + msgCid, err := env.(*node.Env).MultiSigAPI.MsigSwapApprove(ctx, msig, from, txid, prop, oldAdd, newAdd) + if err != nil { + return err + } + + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) + if err != nil { + return err + } + + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("swap approval returned exit %d", wait.Receipt.ExitCode) + } + + return re.Emit(fmt.Sprintf("sent swap approval in message: %s", msgCid)) + }, +} + +var msigSwapCancelCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Cancel a message to swap signers", + Usage: "[multisigAddress txId oldAddress newAddress]", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "account to send the approve message from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("txId", true, false, "proposed message ID"), + cmds.StringArg("oldAddress", true, false, "old signer"), + cmds.StringArg("newAddress", true, false, "new signer"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 4 { + return fmt.Errorf("must pass multisig address, transaction id, old signer address, new signer address") + } + ctx := ReqContext(req.Context) + + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + txid, err := strconv.ParseUint(req.Arguments[1], 10, 64) + if err != nil { + return err + } + + oldAdd, err := address.NewFromString(req.Arguments[2]) + if err != nil { + return err + } + + newAdd, err := address.NewFromString(req.Arguments[3]) + if err != nil { + return err + } + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + msgCid, err := env.(*node.Env).MultiSigAPI.MsigSwapCancel(ctx, msig, from, txid, oldAdd, newAdd) + if err != nil { + return err + } + + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) + if err != nil { + return err + } + + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("swap cancellation returned exit %d", wait.Receipt.ExitCode) + } + + return re.Emit(fmt.Sprintf("sent swap cancellation in message: %s", msgCid)) + }, +} + +var msigLockProposeCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Propose to lock up some balance", + Usage: "[multisigAddress startEpoch unlockDuration amount]", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "account to send the propose message from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("startEpoch", true, false, "start epoch"), + cmds.StringArg("unlockDuration", true, false, "the locked block period"), + cmds.StringArg("amount", true, false, "amount of FIL"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 4 { + return fmt.Errorf("must pass multisig address, start epoch, unlock duration, and amount") + } + ctx := ReqContext(req.Context) + + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + start, err := strconv.ParseUint(req.Arguments[1], 10, 64) + if err != nil { + return err + } + + duration, err := strconv.ParseUint(req.Arguments[2], 10, 64) + if err != nil { + return err + } + + amount, err := types.ParseFIL(req.Arguments[3]) + if err != nil { + return err + } + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + params, actErr := actors.SerializeParams(&msig2.LockBalanceParams{ + StartEpoch: abi.ChainEpoch(start), + UnlockDuration: abi.ChainEpoch(duration), + Amount: big.Int(amount), + }) + + if actErr != nil { + return actErr + } + msgCid, err := env.(*node.Env).MultiSigAPI.MsigPropose(ctx, msig, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) + if err != nil { + return err + } + + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) + if err != nil { + return err + } + + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("lock proposal returned exit %d", wait.Receipt.ExitCode) + } + var ret multisig.ProposeReturn + err = ret.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)) + if err != nil { + return xerrors.Errorf("decoding proposal return: %w", err) + } + cliw := new(bytes.Buffer) + fmt.Fprintf(cliw, "sent lock balance proposal in message: %s\n", msgCid) + fmt.Fprintf(cliw, "TxnID: %d\n", ret.TxnID) + return re.Emit(cliw) + }, +} + +var msigLockApproveCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Approve a message to lock up some balance", + Usage: "[multisigAddress proposerAddress txId startEpoch unlockDuration amount]", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "account to send the propose message from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("proposerAddress", true, false, "proposed address"), + cmds.StringArg("txId", true, false, "proposed message ID"), + cmds.StringArg("startEpoch", true, false, "start epoch"), + cmds.StringArg("unlockDuration", true, false, "the locked block period"), + cmds.StringArg("amount", true, false, "amount of FIL"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 6 { + return fmt.Errorf("must pass multisig address, proposer address, tx id, start epoch, unlock duration, and amount") + } + ctx := ReqContext(req.Context) + + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + prop, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + + txid, err := strconv.ParseUint(req.Arguments[2], 10, 64) + if err != nil { + return err + } + + start, err := strconv.ParseUint(req.Arguments[3], 10, 64) + if err != nil { + return err + } + + duration, err := strconv.ParseUint(req.Arguments[4], 10, 64) + if err != nil { + return err + } + + amount, err := types.ParseFIL(req.Arguments[5]) + if err != nil { + return err + } + + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + + params, actErr := actors.SerializeParams(&msig2.LockBalanceParams{ + StartEpoch: abi.ChainEpoch(start), + UnlockDuration: abi.ChainEpoch(duration), + Amount: big.Int(amount), + }) + + if actErr != nil { + return actErr + } + + msgCid, err := env.(*node.Env).MultiSigAPI.MsigApproveTxnHash(ctx, msig, txid, prop, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) + if err != nil { + return err + } + + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) + if err != nil { + return err + } + + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("lock approval returned exit %d", wait.Receipt.ExitCode) + } + return re.Emit(fmt.Sprintf("sent lock approval in message: %s", msgCid)) + }, +} + +var msigLockCancelCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Cancel a message to lock up some balance", + Usage: "[multisigAddress txId startEpoch unlockDuration amount]", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "account to send the propose message from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("txId", true, false, "proposed transaction ID"), + cmds.StringArg("startEpoch", true, false, "start epoch"), + cmds.StringArg("unlockDuration", true, false, "the locked block period"), + cmds.StringArg("amount", true, false, "amount of FIL"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 5 { + return fmt.Errorf("must pass multisig address, tx id, start epoch, unlock duration, and amount") + } + ctx := ReqContext(req.Context) + + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + txid, err := strconv.ParseUint(req.Arguments[1], 10, 64) + if err != nil { + return err + } + + start, err := strconv.ParseUint(req.Arguments[2], 10, 64) + if err != nil { + return err + } + + duration, err := strconv.ParseUint(req.Arguments[3], 10, 64) + if err != nil { + return err + } + + amount, err := types.ParseFIL(req.Arguments[4]) + if err != nil { + return err + } + + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + + params, actErr := actors.SerializeParams(&msig2.LockBalanceParams{ + StartEpoch: abi.ChainEpoch(start), + UnlockDuration: abi.ChainEpoch(duration), + Amount: big.Int(amount), + }) + if actErr != nil { + return actErr + } + + msgCid, err := env.(*node.Env).MultiSigAPI.MsigCancel(ctx, msig, txid, msig, big.Zero(), from, uint64(multisig.Methods.LockBalance), params) + if err != nil { + return err + } + + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) + if err != nil { + return err + } + + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("lock cancellation returned exit %d", wait.Receipt.ExitCode) + } + + return re.Emit(fmt.Sprintf("sent lock cancellation in message: %s", msgCid)) + }, +} + +var msigVestedCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Gets the amount vested in an msig between two epochs", + Usage: "[multisigAddress]", + }, + Options: []cmds.Option{ + cmds.Int64Option("start-epoch", "start epoch to measure vesting from").WithDefault(int64(0)), + cmds.Int64Option("end-epoch", "end epoch to measure vesting at").WithDefault(int64(-1)), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + /*defer func() { + if err := recover(); err != nil { + re.Emit(err) + } + }()*/ + if len(req.Arguments) != 1 { + return fmt.Errorf("must pass multisig address") + } + ctx := ReqContext(req.Context) + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + start, err := env.(*node.Env).ChainAPI.ChainGetTipSetByHeight(ctx, reqChainEpochOption(req, "start-epoch"), types.EmptyTSK) + if err != nil { + return err + } + var end *types.TipSet + endEpoch := reqChainEpochOption(req, "end-epoch") + if endEpoch < 0 { + end, err = env.(*node.Env).ChainAPI.ChainHead(ctx) + if err != nil { + return err + } + } else { + end, err = env.(*node.Env).ChainAPI.ChainGetTipSetByHeight(ctx, endEpoch, types.EmptyTSK) + if err != nil { + return err + } + } + + ret, err := env.(*node.Env).MultiSigAPI.MsigGetVested(ctx, msig, start.Key(), end.Key()) + if err != nil { + return err + } + return re.Emit(fmt.Sprintf("Vested: %s between %d and %d", types.FIL(ret), start.Height(), end.Height())) + }, +} + +var msigProposeThresholdCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Propose setting a different signing threshold on the account", + Usage: "", + }, + Options: []cmds.Option{ + cmds.StringOption("from", "account to send the proposal from"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("multisigAddress", true, false, "multisig address"), + cmds.StringArg("newM", true, false, "number of signature required"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 2 { + return fmt.Errorf("must pass multisig address and new threshold value") + } + ctx := ReqContext(req.Context) + + msig, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + newM, err := strconv.ParseUint(req.Arguments[1], 10, 64) + if err != nil { + return err + } + + from, err := reqFromWithDefault(req, env) + if err != nil { + return err + } + + params, actErr := actors.SerializeParams(&msig2.ChangeNumApprovalsThresholdParams{ + NewThreshold: newM, + }) + + if actErr != nil { + return actErr + } + + msgCid, err := env.(*node.Env).MultiSigAPI.MsigPropose(ctx, msig, msig, types.NewInt(0), from, uint64(multisig.Methods.ChangeNumApprovalsThreshold), params) + if err != nil { + return fmt.Errorf("failed to propose change of threshold: %w", err) + } + wait, err := env.(*node.Env).ChainAPI.StateWaitMsg(ctx, msgCid, reqConfidence(req), constants.LookbackNoLimit, true) + if err != nil { + return err + } + + if wait.Receipt.ExitCode != 0 { + return fmt.Errorf("change threshold proposal returned exit %d", wait.Receipt.ExitCode) + } + var ret multisig.ProposeReturn + err = ret.UnmarshalCBOR(bytes.NewReader(wait.Receipt.Return)) + if err != nil { + return xerrors.Errorf("decoding proposal return: %w", err) + } + cliw := new(bytes.Buffer) + fmt.Fprintf(cliw, "sent change threshold proposal in message: %s\n", msgCid) + fmt.Fprintf(cliw, "TxnID: %d\n", ret.TxnID) + return re.Emit(cliw) + }, +} diff --git a/cmd/multisig_helper.go b/cmd/multisig_helper.go new file mode 100644 index 0000000000..02c41e9c6f --- /dev/null +++ b/cmd/multisig_helper.go @@ -0,0 +1,62 @@ +package cmd + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/pkg/constants" + cmds "github.com/ipfs/go-ipfs-cmds" +) + +func reqConfidence(req *cmds.Request) uint64 { + confidence, ok := req.Options["confidence"] + if ok { + return confidence.(uint64) + } + return 0 +} + +func reqFromWithDefault(req *cmds.Request, env cmds.Environment) (address.Address, error) { + f, ok := req.Options["from"] + if ok { + from, err := address.NewFromString(f.(string)) + if err != nil { + return address.Undef, err + } + return from, nil + } + defaddr, err := env.(*node.Env).WalletAPI.WalletDefaultAddress(req.Context) + if err != nil { + return address.Undef, err + } + return defaddr, nil +} + +func reqBoolOption(req *cmds.Request, cmd string) bool { + tmp, ok := req.Options[cmd] + if ok { + return tmp.(bool) + } + return false +} +func reqUint64Option(req *cmds.Request, cmd string) uint64 { + tmp, ok := req.Options[cmd] + if ok { + return tmp.(uint64) + } + return 0 +} +func reqStringOption(req *cmds.Request, cmd string) string { + tmp, ok := req.Options[cmd] + if ok { + return tmp.(string) + } + return constants.StringEmpty +} +func reqChainEpochOption(req *cmds.Request, cmd string) abi.ChainEpoch { + v, ok := req.Options[cmd] + if ok { + return abi.ChainEpoch(v.(int64)) + } + return 0 +} diff --git a/cmd/paych.go b/cmd/paych.go new file mode 100644 index 0000000000..460be6683e --- /dev/null +++ b/cmd/paych.go @@ -0,0 +1,492 @@ +package cmd + +import ( + "bytes" + "encoding/base64" + "fmt" + "io" + "sort" + "strconv" + "strings" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/paychmgr" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + cmds "github.com/ipfs/go-ipfs-cmds" + "golang.org/x/xerrors" +) + +var paychCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Manage payment channels", + }, + Subcommands: map[string]*cmds.Command{ + "add-funds": addFundsCmd, + "list": listCmd, + "voucher": voucherCmd, + "settle": settleCmd, + "status": statusCmd, + "status-by-from-to": sbftCmd, + "collect": collectCmd, + }, +} + +var addFundsCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Add funds to the payment channel between fromAddress and toAddress. Creates the payment channel if it doesn't already exist.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("from_addr", true, false, "From Address is the payment channel sender"), + cmds.StringArg("to_addr", true, false, "To Address is the payment channel recipient"), + cmds.StringArg("amount", true, false, "Amount is the deposits funds in the payment channel"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + fromAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + toAddr, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + amt, err := types.ParseFIL(req.Arguments[2]) + if err != nil { + return err + } + chanInfo, err := env.(*node.Env).PaychAPI.PaychGet(req.Context, fromAddr, toAddr, big.NewFromGo(amt.Int)) + if err != nil { + return err + } + chAddr, err := env.(*node.Env).PaychAPI.PaychGetWaitReady(req.Context, chanInfo.WaitSentinel) + if err != nil { + return err + } + if err := re.Emit(chAddr); err != nil { + return err + } + return nil + }, +} + +var listCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "List all locally registered payment channels", + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + addrs, err := env.(*node.Env).PaychAPI.PaychList(req.Context) + if err != nil { + return err + } + if err := re.Emit(addrs); err != nil { + return err + } + return nil + }, +} + +var voucherCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Interact with payment channel vouchers", + }, + Subcommands: map[string]*cmds.Command{ + "create": voucherCreateCmd, + "check": voucherCheckCmd, + "add": voucherAddCmd, + "list": voucherListCmd, + "best-spendable": voucherBestSpendableCmd, + "submit": voucherSubmitCmd, + }, +} + +var settleCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Settle a payment channel", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("channel_addr", true, false, "The given payment channel address"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + chanAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + mcid, err := env.(*node.Env).PaychAPI.PaychSettle(req.Context, chanAddr) + if err != nil { + return err + } + if err != nil { + return err + } + mwait, err := env.(*node.Env).ChainAPI.StateWaitMsg(req.Context, mcid, constants.MessageConfidence, constants.LookbackNoLimit, true) + if err != nil { + return err + } + if mwait.Receipt.ExitCode != 0 { + return xerrors.Errorf("settle message execution failed (exit code %d)", mwait.Receipt.ExitCode) + } + if err := re.Emit(fmt.Sprintf("Settled channel %s", chanAddr)); err != nil { + return err + } + return nil + }, +} +var statusCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show the status of an outbound payment channel", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("channel_addr", true, false, "The given payment channel address"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + chanAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + av, err := env.(*node.Env).PaychAPI.PaychAvailableFunds(req.Context, chanAddr) + if err != nil { + return err + } + //re.Emit(av) + w := bytes.NewBuffer(nil) + paychStatus(w, av) + if err := re.Emit(w); err != nil { + return err + } + return nil + }, +} +var sbftCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show the status of an active outbound payment channel by from/to addresses", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("from_addr", true, false, "Gets a channel accessor for a given from / to pair"), + cmds.StringArg("to_addr", true, false, "Gets a channel accessor for a given from / to pair"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + fromAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + toAddr, err := address.NewFromString(req.Arguments[1]) + if err != nil { + return err + } + av, err := env.(*node.Env).PaychAPI.PaychAvailableFundsByFromTo(req.Context, fromAddr, toAddr) + if err != nil { + return err + } + w := bytes.NewBuffer(nil) + paychStatus(w, av) + if err := re.Emit(w); err != nil { + return err + } + return nil + }, +} +var collectCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Create a signed payment channel voucher", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("channel_addr", true, false, "The given payment channel address"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + chanAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + mcid, err := env.(*node.Env).PaychAPI.PaychCollect(req.Context, chanAddr) + if err != nil { + return err + } + mwait, err := env.(*node.Env).ChainAPI.StateWaitMsg(req.Context, mcid, constants.MessageConfidence, constants.LookbackNoLimit, true) + if err != nil { + return err + } + if mwait.Receipt.ExitCode != 0 { + return xerrors.Errorf("collect message execution failed (exit code %d)", mwait.Receipt.ExitCode) + } + + if err := re.Emit(fmt.Sprintf("Collected funds for channel %s", chanAddr)); err != nil { + return err + } + return nil + }, +} + +var voucherCreateCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Create a signed payment channel voucher", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("channel_addr", true, false, "The given payment channel address"), + cmds.StringArg("amount", true, false, "The value that will be used to create the voucher"), + cmds.StringArg("lane", true, false, "Specify payment channel lane to use"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + chanAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + amtFil, err := types.ParseFIL(req.Arguments[1]) + if err != nil { + return err + } + lane, err := strconv.ParseUint(req.Arguments[2], 10, 64) + if err != nil { + return err + } + res, err := env.(*node.Env).PaychAPI.PaychVoucherCreate(req.Context, chanAddr, big.NewFromGo(amtFil.Int), lane) + if err != nil { + return err + } + if res.Voucher == nil { + return xerrors.Errorf("Could not create voucher: insufficient funds in channel, shortfall: %d", res.Shortfall) + } + enc, err := encodedString(res.Voucher) + if err != nil { + return err + } + + if err := re.Emit(enc); err != nil { + return err + } + return nil + }, +} + +var voucherCheckCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Check validity of payment channel voucher", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("channel_addr", true, false, "The given payment channel address"), + cmds.StringArg("voucher", true, false, "The voucher in the payment channel"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + chanAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + voucher, err := paych.DecodeSignedVoucher(req.Arguments[1]) + if err != nil { + return err + } + err = env.(*node.Env).PaychAPI.PaychVoucherCheckValid(req.Context, chanAddr, voucher) + if err != nil { + return err + } + if err := re.Emit("voucher is valid"); err != nil { + return err + } + return nil + }, +} + +var voucherAddCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Add payment channel voucher to local datastore", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("channel_addr", true, false, "The given payment channel address"), + cmds.StringArg("voucher", true, false, "The voucher in the payment channel"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + chanAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + voucher, err := paych.DecodeSignedVoucher(req.Arguments[1]) + if err != nil { + return err + } + _, err = env.(*node.Env).PaychAPI.PaychVoucherAdd(req.Context, chanAddr, voucher, nil, big.NewInt(0)) + if err != nil { + return err + } + if err := re.Emit("add voucher successfully"); err != nil { + return err + } + return nil + }, +} + +var voucherListCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "List stored vouchers for a given payment channel", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("channel_addr", true, false, "The given payment channel address"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + chanAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + vs, err := env.(*node.Env).PaychAPI.PaychVoucherList(req.Context, chanAddr) + if err != nil { + return err + } + buff := bytes.NewBuffer(nil) + for _, v := range sortVouchers(vs) { + str, err := encodedString(v) + if err != nil { + return err + } + fmt.Fprintf(buff, "Lane %d, Nonce %d: %s, voucher: %s\n", v.Lane, v.Nonce, v.Amount.String(), str) + } + + if err := re.Emit(buff); err != nil { + return err + } + return nil + }, +} + +var voucherBestSpendableCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Print vouchers with highest value that is currently spendable for each lane", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("channel_addr", true, false, "The given payment channel address"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + chanAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + vouchersByLane, err := paychmgr.BestSpendableByLane(req.Context, env.(*node.Env).PaychAPI, chanAddr) + if err != nil { + return err + } + + var vouchers []*paych.SignedVoucher + for _, vchr := range vouchersByLane { + vouchers = append(vouchers, vchr) + } + buff := bytes.NewBuffer(nil) + for _, v := range sortVouchers(vouchers) { + str, err := encodedString(v) + if err != nil { + return err + } + fmt.Fprintf(buff, "Lane %d, Nonce %d: %s, voucher: %s\n", v.Lane, v.Nonce, v.Amount.String(), str) + } + if err := re.Emit(buff); err != nil { + return err + } + return nil + }, +} +var voucherSubmitCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Submit voucher to chain to update payment channel state", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("channel_addr", true, false, "The given payment channel address"), + cmds.StringArg("voucher", true, false, "The voucher in the payment channel"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + chanAddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + voucher, err := paych.DecodeSignedVoucher(req.Arguments[1]) + if err != nil { + return err + } + mcid, err := env.(*node.Env).PaychAPI.PaychVoucherSubmit(req.Context, chanAddr, voucher, nil, nil) + if err != nil { + return err + } + mwait, err := env.(*node.Env).ChainAPI.StateWaitMsg(req.Context, mcid, constants.MessageConfidence, constants.LookbackNoLimit, true) + if err != nil { + return err + } + if mwait.Receipt.ExitCode != 0 { + return xerrors.Errorf("message execution failed (exit code %d)", mwait.Receipt.ExitCode) + } + if err := re.Emit("channel updated successfully"); err != nil { + return err + } + return nil + }, +} + +func encodedString(sv *paych.SignedVoucher) (string, error) { + buf := new(bytes.Buffer) + if err := sv.MarshalCBOR(buf); err != nil { + return "", err + } + return base64.RawURLEncoding.EncodeToString(buf.Bytes()), nil +} +func sortVouchers(vouchers []*paych.SignedVoucher) []*paych.SignedVoucher { + sort.Slice(vouchers, func(i, j int) bool { + if vouchers[i].Lane == vouchers[j].Lane { + return vouchers[i].Nonce < vouchers[j].Nonce + } + return vouchers[i].Lane < vouchers[j].Lane + }) + return vouchers +} +func paychStatus(writer io.Writer, avail *apitypes.ChannelAvailableFunds) { + if avail.Channel == nil { + if avail.PendingWaitSentinel != nil { + fmt.Fprint(writer, "Creating channel\n") + fmt.Fprintf(writer, " From: %s\n", avail.From) + fmt.Fprintf(writer, " To: %s\n", avail.To) + fmt.Fprintf(writer, " Pending Amt: %d\n", avail.PendingAmt) + fmt.Fprintf(writer, " Wait Sentinel: %s\n", avail.PendingWaitSentinel) + return + } + fmt.Fprint(writer, "Channel does not exist\n") + fmt.Fprintf(writer, " From: %s\n", avail.From) + fmt.Fprintf(writer, " To: %s\n", avail.To) + return + } + + if avail.PendingWaitSentinel != nil { + fmt.Fprint(writer, "Adding Funds to channel\n") + } else { + fmt.Fprint(writer, "Channel exists\n") + } + nameValues := [][]string{ + {"Channel", avail.Channel.String()}, + {"From", avail.From.String()}, + {"To", avail.To.String()}, + {"Confirmed Amt", fmt.Sprintf("%d", avail.ConfirmedAmt)}, + {"Pending Amt", fmt.Sprintf("%d", avail.PendingAmt)}, + {"Queued Amt", fmt.Sprintf("%d", avail.QueuedAmt)}, + {"Voucher Redeemed Amt", fmt.Sprintf("%d", avail.VoucherReedeemedAmt)}, + } + if avail.PendingWaitSentinel != nil { + nameValues = append(nameValues, []string{ + "Add Funds Wait Sentinel", + avail.PendingWaitSentinel.String(), + }) + } + fmt.Fprint(writer, formatNameValues(nameValues)) +} + +func formatNameValues(nameValues [][]string) string { + maxLen := 0 + for _, nv := range nameValues { + if len(nv[0]) > maxLen { + maxLen = len(nv[0]) + } + } + out := make([]string, len(nameValues)) + for i, nv := range nameValues { + namePad := strings.Repeat(" ", maxLen-len(nv[0])) + out[i] = " " + nv[0] + ": " + namePad + nv[1] + } + return strings.Join(out, "\n") + "\n" +} diff --git a/cmd/paych_test.go b/cmd/paych_test.go new file mode 100644 index 0000000000..dc416f4a16 --- /dev/null +++ b/cmd/paych_test.go @@ -0,0 +1,42 @@ +package cmd + +import ( + "testing" + + addr "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/specs-actors/actors/builtin" + "github.com/filecoin-project/specs-actors/actors/runtime" + tutil "github.com/filecoin-project/specs-actors/support/testing" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + "github.com/stretchr/testify/assert" +) + +func TestEncodedString(t *testing.T) { + mnum := builtin.MethodsPaych.UpdateChannelState + fakeParams := runtime.CBORBytes([]byte{1, 2, 3, 4}) + otherAddr := tutil.NewIDAddr(t, 104) + ex := &paych.ModVerifyParams{ + Actor: otherAddr, + Method: mnum, + Data: fakeParams, + } + chanAddr, _ := addr.NewFromString("t15ihq5ibzwki2b4ep2f46avlkrqzhpqgtga7pdrq") + sv := &paych.SignedVoucher{ + ChannelAddr: chanAddr, + TimeLockMin: 1, + TimeLockMax: 100, + SecretPreimage: []byte("ProfesrXXXXXXXXXXXXXXXXXXXXXXXXX"), + Extra: ex, + Lane: 1, + Nonce: 1, + Amount: big.NewInt(10), + MinSettleHeight: 1000, + Merges: nil, + } + str, err := encodedString(sv) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, str, "i1UB6g8OoDmykaDwj9F54FVqjDJ3wNMBGGRYIFByb2Zlc3JYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYg0IAaAJEAQIDBAEBQgAKGQPogPY") +} diff --git a/cmd/permission.go b/cmd/permission.go new file mode 100644 index 0000000000..46f2ac5a2c --- /dev/null +++ b/cmd/permission.go @@ -0,0 +1,10 @@ +package cmd + +import cmds "github.com/ipfs/go-ipfs-cmds" + +var ( + AdminExtra = new(cmds.Extra).SetValue("perm", "admin") + WriteExtra = new(cmds.Extra).SetValue("perm", "write") + SignExtra = new(cmds.Extra).SetValue("perm", "sign") + ReadExtra = new(cmds.Extra).SetValue("perm", "read") +) diff --git a/cmd/protocol.go b/cmd/protocol.go new file mode 100644 index 0000000000..6237999d95 --- /dev/null +++ b/cmd/protocol.go @@ -0,0 +1,21 @@ +package cmd + +import ( + "github.com/filecoin-project/venus/app/node" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + cmds "github.com/ipfs/go-ipfs-cmds" +) + +var protocolCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show protocol parameter details", + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + params, err := env.(*node.Env).ChainAPI.ProtocolParameters(req.Context) + if err != nil { + return err + } + return re.Emit(params) + }, + Type: apitypes.ProtocolParams{}, +} diff --git a/cmd/protocol_cmd_test.go b/cmd/protocol_cmd_test.go new file mode 100644 index 0000000000..a6d77cb72b --- /dev/null +++ b/cmd/protocol_cmd_test.go @@ -0,0 +1,34 @@ +package cmd_test + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/app/node/test" + "github.com/filecoin-project/venus/pkg/config" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestProtocol(t *testing.T) { + tf.IntegrationTest(t) + ctx := context.Background() + + // Create node (it's not necessary to start it). + b := test.NewNodeBuilder(t) + node := b. + WithConfig(func(c *config.Config) { + + }). + Build(ctx) + require.NoError(t, node.Chain().ChainReader.Load(ctx)) + + // Run the command API. + cmd, stop := test.RunNodeAPI(ctx, node, t) + defer stop() + + out := cmd.RunSuccess(ctx, "protocol").ReadStdout() + assert.Contains(t, out, "\"Network\": \"gfctest\"") +} diff --git a/cmd/seed.go b/cmd/seed.go new file mode 100644 index 0000000000..f9c6dbde32 --- /dev/null +++ b/cmd/seed.go @@ -0,0 +1,704 @@ +package cmd + +import ( + "encoding/csv" + "encoding/hex" + "encoding/json" + "fmt" + "io/ioutil" + "os" + "strconv" + "strings" + + "github.com/docker/go-units" + "github.com/google/uuid" + cmds "github.com/ipfs/go-ipfs-cmds" + "github.com/mitchellh/go-homedir" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/gen" + "github.com/filecoin-project/venus/pkg/gen/genesis" + "github.com/filecoin-project/venus/tools/seed" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var seedCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Seal sectors for genesis miner.", + }, + Subcommands: map[string]*cmds.Command{ + "genesis": genesisCmd, + + "pre-seal": preSealCmd, + "aggregate-manifests": aggregateManifestsCmd, + }, +} + +var genesisCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "manipulate genesis template", + }, + Subcommands: map[string]*cmds.Command{ + "new": genesisNewCmd, + "add-miner": genesisAddMinerCmd, + "add-msis": genesisAddMsigsCmd, + "set-vrk": genesisSetVRKCmd, + "set-remainder": genesisSetRemainderCmd, + "set-network-version": genesisSetActorVersionCmd, + }, +} + +var genesisNewCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "create new genesis template", + }, + Options: []cmds.Option{ + cmds.StringOption("network-name", "network name"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("file", true, true, "The file to write genesis info"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + fileName := req.Arguments[0] + if fileName == "" { + return xerrors.New("seed genesis new [genesis.json]") + } + networkName, _ := req.Options["network-name"].(string) + out := genesis.Template{ + NetworkVersion: constants.NewestNetworkVersion, + Accounts: []genesis.Actor{}, + Miners: []genesis.Miner{}, + VerifregRootKey: gen.DefaultVerifregRootkeyActor, + RemainderAccount: gen.DefaultRemainderAccountActor, + NetworkName: networkName, + } + if out.NetworkName == "" { + out.NetworkName = "localnet-" + uuid.New().String() + } + + genb, err := json.MarshalIndent(&out, "", " ") + if err != nil { + return err + } + + genf, err := homedir.Expand(fileName) + if err != nil { + return err + } + + if err := ioutil.WriteFile(genf, genb, 0644); err != nil { + return err + } + + return nil + }, +} + +var genesisAddMinerCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "add genesis miner", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("genesis-file", true, true, "genesis file"), + cmds.StringArg("preseal-file", true, true, "preseal file"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 2 { + return xerrors.New("seed genesis add-miner [genesis.json] [preseal.json]") + } + + genf, err := homedir.Expand(req.Arguments[0]) + if err != nil { + return err + } + + var template genesis.Template + genb, err := ioutil.ReadFile(genf) + if err != nil { + return xerrors.Errorf("read genesis template: %w", err) + } + + if err := json.Unmarshal(genb, &template); err != nil { + return xerrors.Errorf("unmarshal genesis template: %w", err) + } + + minf, err := homedir.Expand(req.Arguments[1]) + if err != nil { + return xerrors.Errorf("expand preseal file path: %w", err) + } + miners := map[string]genesis.Miner{} + minb, err := ioutil.ReadFile(minf) + if err != nil { + return xerrors.Errorf("read preseal file: %w", err) + } + if err := json.Unmarshal(minb, &miners); err != nil { + return xerrors.Errorf("unmarshal miner info: %w", err) + } + + for mn, miner := range miners { + log.Infof("Adding miner %s to genesis template", mn) + { + id := uint64(genesis.MinerStart) + uint64(len(template.Miners)) + maddr, err := address.NewFromString(mn) + if err != nil { + return xerrors.Errorf("parsing miner address: %w", err) + } + mid, err := address.IDFromAddress(maddr) + if err != nil { + return xerrors.Errorf("getting miner id from address: %w", err) + } + if mid != id { + return xerrors.Errorf("tried to set miner t0%d as t0%d", mid, id) + } + } + + template.Miners = append(template.Miners, miner) + log.Infof("Giving %s some initial balance", miner.Owner) + template.Accounts = append(template.Accounts, genesis.Actor{ + Type: genesis.TAccount, + Balance: big.Mul(big.NewInt(50_000_000), big.NewInt(int64(constants.FilecoinPrecision))), + Meta: (&genesis.AccountMeta{Owner: miner.Owner}).ActorMeta(), + }) + } + + genb, err = json.MarshalIndent(&template, "", " ") + if err != nil { + return err + } + + if err := ioutil.WriteFile(genf, genb, 0644); err != nil { + return err + } + + return nil + }, +} + +var genesisAddMsigsCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("templateFile", true, true, ""), + cmds.StringArg("csvFile", true, true, ""), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) < 2 { + return fmt.Errorf("must specify template file and csv file with accounts") + } + + genf, err := homedir.Expand(req.Arguments[0]) + if err != nil { + return err + } + + csvf, err := homedir.Expand(req.Arguments[1]) + if err != nil { + return err + } + + var template genesis.Template + b, err := ioutil.ReadFile(genf) + if err != nil { + return xerrors.Errorf("read genesis template: %w", err) + } + + if err := json.Unmarshal(b, &template); err != nil { + return xerrors.Errorf("unmarshal genesis template: %w", err) + } + + entries, err := seed.ParseMultisigCsv(csvf) + if err != nil { + return xerrors.Errorf("parsing multisig csv file: %w", err) + } + + for i, e := range entries { + if len(e.Addresses) != e.N { + return fmt.Errorf("entry %d had mismatch between 'N' and number of addresses", i) + } + + msig := &genesis.MultisigMeta{ + Signers: e.Addresses, + Threshold: e.M, + VestingDuration: monthsToBlocks(e.VestingMonths), + VestingStart: 0, + } + + template.Accounts = append(template.Accounts, genesis.Actor{ + Type: genesis.TMultisig, + Balance: abi.TokenAmount(e.Amount), + Meta: msig.ActorMeta(), + }) + } + + b, err = json.MarshalIndent(&template, "", " ") + if err != nil { + return err + } + + if err := ioutil.WriteFile(genf, b, 0644); err != nil { + return err + } + return nil + }, +} + +func monthsToBlocks(nmonths int) int { + days := uint64((365 * nmonths) / 12) + return int(days * 24 * 60 * 60 / constants.MainNetBlockDelaySecs) +} + +func parseMultisigCsv(csvf string) ([]seed.GenAccountEntry, error) { + fileReader, err := os.Open(csvf) + if err != nil { + return nil, xerrors.Errorf("read multisig csv: %w", err) + } + defer fileReader.Close() //nolint:errcheck + r := csv.NewReader(fileReader) + records, err := r.ReadAll() + if err != nil { + return nil, xerrors.Errorf("read multisig csv: %w", err) + } + var entries []seed.GenAccountEntry + for i, e := range records[1:] { + var addrs []address.Address + addrStrs := strings.Split(strings.TrimSpace(e[7]), ":") + for j, a := range addrStrs { + addr, err := address.NewFromString(a) + if err != nil { + return nil, xerrors.Errorf("failed to parse address %d in row %d (%q): %w", j, i, a, err) + } + addrs = append(addrs, addr) + } + + balance, err := types.ParseFIL(strings.TrimSpace(e[2])) + if err != nil { + return nil, xerrors.Errorf("failed to parse account balance: %w", err) + } + + vesting, err := strconv.Atoi(strings.TrimSpace(e[3])) + if err != nil { + return nil, xerrors.Errorf("failed to parse vesting duration for record %d: %w", i, err) + } + + custodianID, err := strconv.Atoi(strings.TrimSpace(e[4])) + if err != nil { + return nil, xerrors.Errorf("failed to parse custodianID in record %d: %w", i, err) + } + threshold, err := strconv.Atoi(strings.TrimSpace(e[5])) + if err != nil { + return nil, xerrors.Errorf("failed to parse multisigM in record %d: %w", i, err) + } + num, err := strconv.Atoi(strings.TrimSpace(e[6])) + if err != nil { + return nil, xerrors.Errorf("Number of addresses be integer: %w", err) + } + if e[0] != "1" { + return nil, xerrors.Errorf("record version must be 1") + } + entries = append(entries, seed.GenAccountEntry{ + Version: 1, + ID: e[1], + Amount: balance, + CustodianID: custodianID, + VestingMonths: vesting, + M: threshold, + N: num, + Type: e[8], + Sig1: e[9], + Sig2: e[10], + Addresses: addrs, + }) + } + + return entries, nil +} + +var genesisSetVRKCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Set the verified registry's root key", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("templateFile", true, true, ""), + }, + Options: []cmds.Option{ + cmds.StringOption("multisig", "CSV file to parse the multisig that will be set as the root key"), + cmds.StringOption("account", "pubkey address that will be set as the root key (must NOT be declared anywhere else, since it must be given ID 80)"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) < 1 { + return fmt.Errorf("must specify template file and csv file with accounts") + } + + genf, err := homedir.Expand(req.Arguments[0]) + if err != nil { + return err + } + + var template genesis.Template + b, err := ioutil.ReadFile(genf) + if err != nil { + return xerrors.Errorf("read genesis template: %w", err) + } + + if err := json.Unmarshal(b, &template); err != nil { + return xerrors.Errorf("unmarshal genesis template: %w", err) + } + + account, _ := req.Options["account"].(string) + multisig, _ := req.Options["multisig"].(string) + if len(account) > 0 { + addr, err := address.NewFromString(account) + if err != nil { + return err + } + + am := genesis.AccountMeta{Owner: addr} + + template.VerifregRootKey = genesis.Actor{ + Type: genesis.TAccount, + Balance: big.Zero(), + Meta: am.ActorMeta(), + } + } else if len(multisig) > 0 { + csvf, err := homedir.Expand(multisig) + if err != nil { + return err + } + + entries, err := parseMultisigCsv(csvf) + if err != nil { + return xerrors.Errorf("parsing multisig csv file: %w", err) + } + + if len(entries) == 0 { + return xerrors.Errorf("no msig entries in csv file: %w", err) + } + + e := entries[0] + if len(e.Addresses) != e.N { + return fmt.Errorf("entry had mismatch between 'N' and number of addresses") + } + + msig := &genesis.MultisigMeta{ + Signers: e.Addresses, + Threshold: e.M, + VestingDuration: monthsToBlocks(e.VestingMonths), + VestingStart: 0, + } + + act := genesis.Actor{ + Type: genesis.TMultisig, + Balance: abi.TokenAmount(e.Amount), + Meta: msig.ActorMeta(), + } + + template.VerifregRootKey = act + } else { + return xerrors.Errorf("must include either --account or --multisig flag") + } + + b, err = json.MarshalIndent(&template, "", " ") + if err != nil { + return err + } + + if err := ioutil.WriteFile(genf, b, 0644); err != nil { + return err + } + return nil + }, +} + +var genesisSetRemainderCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Set the remainder actor", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("templateFile", true, true, ""), + }, + Options: []cmds.Option{ + cmds.StringOption("multisig", "CSV file to parse the multisig that will be set as the root key"), + cmds.StringOption("account", "pubkey address that will be set as the root key (must NOT be declared anywhere else, since it must be given ID 80)"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) < 1 { + return fmt.Errorf("must specify template file and csv file with accounts") + } + + genf, err := homedir.Expand(req.Arguments[0]) + if err != nil { + return err + } + + var template genesis.Template + b, err := ioutil.ReadFile(genf) + if err != nil { + return xerrors.Errorf("read genesis template: %w", err) + } + + if err := json.Unmarshal(b, &template); err != nil { + return xerrors.Errorf("unmarshal genesis template: %w", err) + } + + account, _ := req.Options["account"].(string) + multisig, _ := req.Options["multisig"].(string) + if account != "" { + addr, err := address.NewFromString(account) + if err != nil { + return err + } + + am := genesis.AccountMeta{Owner: addr} + + template.RemainderAccount = genesis.Actor{ + Type: genesis.TAccount, + Balance: big.Zero(), + Meta: am.ActorMeta(), + } + } else if multisig != "" { + csvf, err := homedir.Expand(multisig) + if err != nil { + return err + } + + entries, err := parseMultisigCsv(csvf) + if err != nil { + return xerrors.Errorf("parsing multisig csv file: %w", err) + } + + if len(entries) == 0 { + return xerrors.Errorf("no msig entries in csv file: %w", err) + } + + e := entries[0] + if len(e.Addresses) != e.N { + return fmt.Errorf("entry had mismatch between 'N' and number of addresses") + } + + msig := &genesis.MultisigMeta{ + Signers: e.Addresses, + Threshold: e.M, + VestingDuration: monthsToBlocks(e.VestingMonths), + VestingStart: 0, + } + + act := genesis.Actor{ + Type: genesis.TMultisig, + Balance: abi.TokenAmount(e.Amount), + Meta: msig.ActorMeta(), + } + + template.RemainderAccount = act + } else { + return xerrors.Errorf("must include either --account or --multisig flag") + } + + b, err = json.MarshalIndent(&template, "", " ") + if err != nil { + return err + } + + if err := ioutil.WriteFile(genf, b, 0644); err != nil { + return err + } + return nil + }, +} + +var genesisSetActorVersionCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Set the version that this network will start from", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("genesisFile", true, true, ""), + cmds.StringArg("actorVersion", true, true, ""), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) < 2 { + return fmt.Errorf("must specify genesis file and network version (e.g. '0'") + } + + genf, err := homedir.Expand(req.Arguments[0]) + if err != nil { + return err + } + + var template genesis.Template + b, err := ioutil.ReadFile(genf) + if err != nil { + return xerrors.Errorf("read genesis template: %w", err) + } + + if err := json.Unmarshal(b, &template); err != nil { + return xerrors.Errorf("unmarshal genesis template: %w", err) + } + + nv, err := strconv.ParseUint(req.Arguments[1], 10, 64) + if err != nil { + return xerrors.Errorf("parsing network version: %w", err) + } + + if nv > uint64(constants.NewestNetworkVersion) { + return xerrors.Errorf("invalid network version: %d", nv) + } + + template.NetworkVersion = network.Version(nv) + + b, err = json.MarshalIndent(&template, "", " ") + if err != nil { + return err + } + + if err := ioutil.WriteFile(genf, b, 0644); err != nil { + return err + } + return nil + }, +} + +var preSealCmd = &cmds.Command{ + Options: []cmds.Option{ + cmds.StringOption("sector-dir", "sector directory").WithDefault("~/.genesis-sectors"), + cmds.StringOption("miner-addr", "specify the future address of your miner").WithDefault("t01000"), + cmds.StringOption("sector-size", "specify size of sectors to pre-seal").WithDefault("2KiB"), + cmds.StringOption("ticket-preimage", "set the ticket preimage for sealing randomness").WithDefault("venus is fire"), + cmds.IntOption("num-sectors", "select number of sectors to pre-seal").WithDefault(int(1)), + cmds.IntOption("sector-offset", "how many sector ids to skip when starting to seal").WithDefault(int(0)), + cmds.StringOption("key", "(optional) Key to use for signing / owner/worker addresses").WithDefault(""), + cmds.BoolOption("fake-sectors", "").WithDefault(false), + cmds.IntOption("network-version", "specify network version").WithDefault(int(-1)), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + sdir, _ := req.Options["sector-dir"].(string) + sbroot, err := homedir.Expand(sdir) + if err != nil { + return err + } + + addr, _ := req.Options["miner-addr"].(string) + maddr, err := address.NewFromString(addr) + if err != nil { + return err + } + + var ki *crypto.KeyInfo + if key, _ := req.Options["key"].(string); key != "" { + ki = new(crypto.KeyInfo) + kh, err := ioutil.ReadFile(key) + if err != nil { + return err + } + kb, err := hex.DecodeString(string(kh)) + if err != nil { + return err + } + if err := json.Unmarshal(kb, ki); err != nil { + return err + } + } + + ssize, _ := req.Options["sector-size"].(string) + sectorSizeInt, err := units.RAMInBytes(ssize) + if err != nil { + return err + } + sectorSize := abi.SectorSize(sectorSizeInt) + + nv := constants.NewestNetworkVersion + ver, _ := req.Options["network-version"].(int) + if ver >= 0 { + nv = network.Version(ver) + } + + spt, err := miner.SealProofTypeFromSectorSize(sectorSize, nv) + if err != nil { + return err + } + + sectorOffset, _ := req.Options["sector-offset"].(int) + numSectors, _ := req.Options["num-sectors"].(int) + ticketPreimage, _ := req.Options["ticket-preimage"].(string) + fakeSectors, _ := req.Options["fake-sectors"].(bool) + gm, key, err := seed.PreSeal(maddr, spt, abi.SectorNumber(uint64(sectorOffset)), numSectors, sbroot, []byte(ticketPreimage), ki, fakeSectors) + if err != nil { + return err + } + + return seed.WriteGenesisMiner(maddr, sbroot, gm, key) + }, +} + +var aggregateManifestsCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "aggregate a set of preseal manifests into a single file", + }, + Options: []cmds.Option{ + cmds.StringsOption("file", "file path"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + var inputs []map[string]genesis.Miner + files, _ := req.Options["file"].([]string) + for _, infi := range files { + fi, err := os.Open(infi) + if err != nil { + return err + } + var val map[string]genesis.Miner + if err := json.NewDecoder(fi).Decode(&val); err != nil { + return err + } + + inputs = append(inputs, val) + if err := fi.Close(); err != nil { + return err + } + } + + output := make(map[string]genesis.Miner) + for _, in := range inputs { + for maddr, val := range in { + if gm, ok := output[maddr]; ok { + tmp, err := mergeGenMiners(gm, val) + if err != nil { + return err + } + output[maddr] = tmp + } else { + output[maddr] = val + } + } + } + + blob, err := json.MarshalIndent(output, "", " ") + if err != nil { + return err + } + + return re.Emit(string(blob)) + }, +} + +func mergeGenMiners(a, b genesis.Miner) (genesis.Miner, error) { + if a.SectorSize != b.SectorSize { + return genesis.Miner{}, xerrors.Errorf("sector sizes mismatch, %d != %d", a.SectorSize, b.SectorSize) + } + + return genesis.Miner{ + Owner: a.Owner, + Worker: a.Worker, + PeerID: a.PeerID, + MarketBalance: big.Zero(), + PowerBalance: big.Zero(), + SectorSize: a.SectorSize, + Sectors: append(a.Sectors, b.Sectors...), + }, nil +} diff --git a/cmd/show.go b/cmd/show.go new file mode 100644 index 0000000000..b1059ae75c --- /dev/null +++ b/cmd/show.go @@ -0,0 +1,74 @@ +package cmd + +import ( + "github.com/filecoin-project/venus/app/node" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/ipfs/go-cid" + cmds "github.com/ipfs/go-ipfs-cmds" +) + +var showCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Get human-readable representations of filecoin objects", + }, + Subcommands: map[string]*cmds.Command{ + "block": showBlockCmd, + "header": showHeaderCmd, + }, +} + +var showBlockCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show a full filecoin block by its header CID", + ShortDescription: `Prints the miner, parent weight, height, +and nonce of a given block. If JSON encoding is specified with the --enc flag, +all other block properties will be included as well.`, + }, + Arguments: []cmds.Argument{ + cmds.StringArg("cid", true, false, "CID of block to show"), + }, + Options: []cmds.Option{ + cmds.BoolOption("messages", "m", "show messages in block"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + cid, err := cid.Decode(req.Arguments[0]) + if err != nil { + return err + } + + block, err := env.(*node.Env).ChainAPI.GetFullBlock(req.Context, cid) + if err != nil { + return err + } + + return re.Emit(block) + }, + Type: types.FullBlock{}, +} + +var showHeaderCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show a filecoin block header by its CID", + ShortDescription: `Prints the miner, parent weight, height, +and nonce of a given block. If JSON encoding is specified with the --enc flag, +all other block properties will be included as well.`, + }, + Arguments: []cmds.Argument{ + cmds.StringArg("cid", true, false, "CID of block to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + cid, err := cid.Decode(req.Arguments[0]) + if err != nil { + return err + } + + block, err := env.(*node.Env).ChainAPI.ChainGetBlock(req.Context, cid) + if err != nil { + return err + } + + return re.Emit(block) + }, + Type: types.BlockHeader{}, +} diff --git a/cmd/show_test.go b/cmd/show_test.go new file mode 100644 index 0000000000..d3e8ff1d74 --- /dev/null +++ b/cmd/show_test.go @@ -0,0 +1,263 @@ +package cmd_test + +import ( + "context" + "encoding/json" + "testing" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/pkg/crypto" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/app/node/test" + "github.com/filecoin-project/venus/fixtures/fortest" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +// Receipt is what is returned by executing a message on the vm. +type Receipt struct { + // control field for encoding struct as an array + _ struct{} `cbor:",toarray"` + ExitCode int64 `json:"exitCode"` + Return []byte `json:"return"` + GasUsed int64 `json:"gasUsed"` +} + +func TestBlockDaemon(t *testing.T) { + tf.IntegrationTest(t) + t.Skip("Unskip with fake proofs") + + t.Run("show block returns human readable output for the filecoin block", func(t *testing.T) { + ctx := context.Background() + builder := test.NewNodeBuilder(t) + buildWithMiner(t, builder) + + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + // mine a block and get its CID + mockBlk, err := mockBlock(t) + require.NoError(t, err) + //minedBlockCid := minedBlock.Cid() + blkCid := mockBlk.Cid() + // get the mined block by its CID + output := cmdClient.RunSuccess(ctx, "show", "block", blkCid.String()).ReadStdoutTrimNewlines() + + assert.Contains(t, output, "BlockHeader Details") + assert.Contains(t, output, "Weight: 0") + assert.Contains(t, output, "Height: 1") + assert.Contains(t, output, "Timestamp: ") + }) + + t.Run("show block --messages returns human readable output for the filecoin block including messages", func(t *testing.T) { + ctx := context.Background() + builder := test.NewNodeBuilder(t) + buildWithMiner(t, builder) + + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + // mine a block and get its CID + //minedBlock, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) + mockBlk, err := mockBlock(t) + require.NoError(t, err) + + // get the mined block by its CID + output := cmdClient.RunSuccess(ctx, "show", "block", "--messages", mockBlk.Cid().String()).ReadStdoutTrimNewlines() + + assert.Contains(t, output, "BlockHeader Details") + assert.Contains(t, output, "Weight: 0") + assert.Contains(t, output, "Height: 1") + assert.Contains(t, output, "Timestamp: ") + assert.Contains(t, output, "Messages: ") + }) + + t.Run("show block --enc json returns JSON for a filecoin block", func(t *testing.T) { + ctx := context.Background() + builder := test.NewNodeBuilder(t) + buildWithMiner(t, builder) + + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + // mine a block and get its CID + //minedBlock, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) + mockBlk, err := mockBlock(t) + require.NoError(t, err) + + // get the mined block by its CID + blockGetLine := cmdClient.RunSuccessFirstLine(ctx, "show", "block", mockBlk.Cid().String(), "--enc", "json") + var blockGetBlock types.FullBlock + require.NoError(t, json.Unmarshal([]byte(blockGetLine), &blockGetBlock)) + + // ensure that we were returned the correct block + + require.Equal(t, mockBlk.Cid().String(), blockGetBlock.Header.Cid().String()) + }) + + t.Run("show header --enc json returns JSON for a filecoin block header", func(t *testing.T) { + ctx := context.Background() + builder := test.NewNodeBuilder(t) + buildWithMiner(t, builder) + + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + // mine a block and get its CID + //minedBlock, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) + mockBlk, err := mockBlock(t) + require.NoError(t, err) + + // get the mined block by its CID + headerGetLine := cmdClient.RunSuccessFirstLine(ctx, "show", "header", mockBlk.Cid().String(), "--enc", "json") + + var headerGetBlock types.BlockHeader + require.NoError(t, json.Unmarshal([]byte(headerGetLine), &headerGetBlock)) + + // ensure that we were returned the correct block + + require.Equal(t, mockBlk.Cid().String(), headerGetBlock.Cid().String()) + }) + + t.Run("show messages returns empty message collection", func(t *testing.T) { + ctx := context.Background() + builder := test.NewNodeBuilder(t) + buildWithMiner(t, builder) + + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + //_, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) + _, err := mockBlock(t) + require.NoError(t, err) + + emptyMessagesLine := cmdClient.RunSuccessFirstLine(ctx, "show", "messages", testhelpers.EmptyMessagesCID.String(), "--enc", "json") + + var messageCollection []*types.SignedMessage + require.NoError(t, json.Unmarshal([]byte(emptyMessagesLine), &messageCollection)) + + assert.Equal(t, 0, len(messageCollection)) + }) + + t.Run("show receipts returns empty receipt collection", func(t *testing.T) { + ctx := context.Background() + builder := test.NewNodeBuilder(t) + buildWithMiner(t, builder) + + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + //_, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) + _, err := mockBlock(t) + require.NoError(t, err) + + emptyReceiptsLine := cmdClient.RunSuccessFirstLine(ctx, "show", "receipts", testhelpers.EmptyReceiptsCID.String(), "--enc", "json") + + var receipts []Receipt + require.NoError(t, json.Unmarshal([]byte(emptyReceiptsLine), &receipts)) + + assert.Equal(t, 0, len(receipts)) + }) + + t.Run("show messages", func(t *testing.T) { + cs := test.FixtureChainSeed(t) + defaultAddr := fortest.TestAddresses[0] + ctx := context.Background() + builder := test.NewNodeBuilder(t) + builder.WithGenesisInit(cs.GenesisInitFunc) + //builder.WithConfig(cs.MinerConfigOpt(0)) + builder.WithConfig(test.DefaultAddressConfigOpt(defaultAddr)) + builder.WithInitOpt(cs.KeyInitOpt(1)) + builder.WithInitOpt(cs.KeyInitOpt(0)) + + n, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + //_, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) + mockBlk, err := mockBlock(t) //nolint + require.NoError(t, err) + + from, err := n.Wallet().API().WalletDefaultAddress(ctx) // this should = fixtures.TestAddresses[0] + require.NoError(t, err) + cmdClient.RunSuccess(ctx, "message", "send", + "--from", from.String(), + "--gas-price", "1", + "--gas-limit", "300", + fortest.TestAddresses[3].String(), + ) + + cmdClient.RunSuccess(ctx, "message", "send", + "--from", from.String(), + "--gas-price", "1", + "--gas-limit", "300", + "--value", "10", + fortest.TestAddresses[3].String(), + ) + + cmdClient.RunSuccess(ctx, "message", "send", + "--from", from.String(), + "--gas-price", "1", + "--gas-limit", "300", + "--value", "5.5", + fortest.TestAddresses[3].String(), + ) + + //blk, err := n.BlockMining.BlockMiningAPI.MiningOnce(ctx) + mockBlk, err = mockBlock(t) + require.NoError(t, err) + + // Full block checks out + blockGetLine := cmdClient.RunSuccessFirstLine(ctx, "show", "block", mockBlk.Cid().String(), "--enc", "json") + var blockGetBlock types.FullBlock + require.NoError(t, json.Unmarshal([]byte(blockGetLine), &blockGetBlock)) + + assert.Equal(t, 3, len(blockGetBlock.SECPMessages)) + + assert.Equal(t, from, blockGetBlock.SECPMessages[0].Message.From) + + // Full block matches show messages + messagesGetLine := cmdClient.RunSuccessFirstLine(ctx, "show", "messages", blockGetBlock.Header.Messages.String(), "--enc", "json") + var messages []*types.SignedMessage + require.NoError(t, json.Unmarshal([]byte(messagesGetLine), &messages)) + assert.Equal(t, blockGetBlock.SECPMessages, messages) + }) +} + +func mockBlock(t *testing.T) (*types.BlockHeader, error) { + b := &types.BlockHeader{ + Miner: testhelpers.NewForTestGetter()(), + Ticket: &types.Ticket{VRFProof: []byte{0x01, 0x02, 0x03}}, + ElectionProof: &types.ElectionProof{VRFProof: []byte{0x0a, 0x0b}}, + Height: 2, + BeaconEntries: []types.BeaconEntry{ + { + Round: 1, + Data: []byte{0x3}, + }, + }, + Messages: testhelpers.CidFromString(t, "somecid"), + ParentMessageReceipts: testhelpers.CidFromString(t, "somecid"), + Parents: []cid.Cid{testhelpers.CidFromString(t, "somecid")}, + ParentWeight: big.NewInt(1000), + ParentStateRoot: testhelpers.CidFromString(t, "somecid"), + Timestamp: 1, + BlockSig: &crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: []byte{0x3}, + }, + BLSAggregate: &crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: []byte{0x3}, + }, + // PoStProofs: posts, + ForkSignaling: 6, + } + return b, nil +} diff --git a/cmd/state.go b/cmd/state.go new file mode 100644 index 0000000000..9f5a2cc4c5 --- /dev/null +++ b/cmd/state.go @@ -0,0 +1,612 @@ +package cmd + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "path/filepath" + "strconv" + + "github.com/filecoin-project/venus/app/paths" + + "github.com/filecoin-project/venus/pkg/config" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + cmds "github.com/ipfs/go-ipfs-cmds" + "github.com/multiformats/go-multiaddr" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// ActorView represents a generic way to represent details about any actor to the user. +type ActorView struct { + Address string `json:"address"` + Code cid.Cid `json:"code,omitempty"` + Nonce uint64 `json:"nonce"` + Balance abi.TokenAmount `json:"balance"` + Head cid.Cid `json:"head,omitempty"` +} + +var stateCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Interact with and query venus chain state", + }, + Subcommands: map[string]*cmds.Command{ + "wait-msg": stateWaitMsgCmd, + "search-msg": stateSearchMsgCmd, + "power": statePowerCmd, + "sectors": stateSectorsCmd, + "active-sectors": stateActiveSectorsCmd, + "sector": stateSectorCmd, + "get-actor": stateGetActorCmd, + "lookup": stateLookupIDCmd, + "sector-size": stateSectorSizeCmd, + "get-deal": stateGetDealSetCmd, + "miner-info": stateMinerInfo, + "network-version": stateNtwkVersionCmd, + "list-actor": stateListActorCmd, + }, +} + +var stateWaitMsgCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Wait for a message to appear on chain", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("cid", true, false, "CID of message to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + cid, err := cid.Decode(req.Arguments[0]) + if err != nil { + return err + } + + mw, err := env.(*node.Env).ChainAPI.StateWaitMsg(req.Context, cid, constants.MessageConfidence, constants.LookbackNoLimit, true) + if err != nil { + return err + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + + if mw != nil { + writer.Printf("message was executed in tipset: %s\n", mw.TipSet.Cids()) + writer.Printf("Exit Code: %d\n", mw.Receipt.ExitCode) + writer.Printf("Gas Used: %d\n", mw.Receipt.GasUsed) + writer.Printf("Return: %x\n", mw.Receipt.Return) + } else { + writer.Printf("Unable to find message recepit of %s", cid) + } + + return re.Emit(buf) + }, +} + +var stateSearchMsgCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Search to see whether a message has appeared on chain", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("cid", true, false, "CID of message to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + cid, err := cid.Decode(req.Arguments[0]) + if err != nil { + return err + } + + mw, err := env.(*node.Env).ChainAPI.StateSearchMsg(req.Context, types.EmptyTSK, cid, constants.LookbackNoLimit, true) + if err != nil { + return err + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + if mw != nil { + writer.Printf("message was executed in tipset: %s", mw.TipSet.Cids()) + writer.Printf("\nExit Code: %d", mw.Receipt.ExitCode) + writer.Printf("\nGas Used: %d", mw.Receipt.GasUsed) + writer.Printf("\nReturn: %x", mw.Receipt.Return) + } else { + writer.Print("message was not found on chain") + } + + return re.Emit(buf) + }, +} + +var statePowerCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Query network or miner power", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", false, false, "Address of miner to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + var maddr address.Address + var err error + + if len(req.Arguments) == 1 { + maddr, err = address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + } + + ts, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + power, err := env.(*node.Env).ChainAPI.StateMinerPower(req.Context, maddr, ts.Key()) + if err != nil { + return err + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + tp := power.TotalPower + if len(req.Arguments) == 1 { + mp := power.MinerPower + percI := big.Div(big.Mul(mp.QualityAdjPower, big.NewInt(1000000)), tp.QualityAdjPower) + writer.Printf("%s(%s) / %s(%s) ~= %0.4f%"+ + "%\n", mp.QualityAdjPower.String(), types.SizeStr(mp.QualityAdjPower), tp.QualityAdjPower.String(), types.SizeStr(tp.QualityAdjPower), float64(percI.Int64())/10000) + } else { + writer.Printf("%s(%s)\n", tp.QualityAdjPower.String(), types.SizeStr(tp.QualityAdjPower)) + } + + return re.Emit(buf) + }, +} + +var stateSectorsCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Query the sector set of a miner", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + ts, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + sectors, err := env.(*node.Env).ChainAPI.StateMinerSectors(req.Context, maddr, nil, ts.Key()) + if err != nil { + return err + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + for _, s := range sectors { + writer.Printf("%d: %x\n", s.SectorNumber, s.SealedCID) + } + + return re.Emit(buf) + }, +} + +var stateActiveSectorsCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Query the active sector set of a miner", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + ts, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + sectors, err := env.(*node.Env).ChainAPI.StateMinerActiveSectors(req.Context, maddr, ts.Key()) + if err != nil { + return err + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + for _, s := range sectors { + writer.Printf("%d: %x\n", s.SectorNumber, s.SealedCID) + } + + return re.Emit(buf) + }, +} + +var stateSectorCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Get miner sector info", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + cmds.StringArg("sector-id", true, false, "Number of actor to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + if len(req.Arguments) != 2 { + return xerrors.Errorf("expected 2 params") + } + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + ts, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + sid, err := strconv.ParseInt(req.Arguments[1], 10, 64) + if err != nil { + return err + } + + blockDelay, err := blockDelay(req) + if err != nil { + return err + } + + si, err := env.(*node.Env).ChainAPI.StateSectorGetInfo(req.Context, maddr, abi.SectorNumber(sid), ts.Key()) + if err != nil { + return err + } + if si == nil { + return xerrors.Errorf("sector %d for miner %s not found", sid, maddr) + } + + height := ts.Height() + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + + writer.Println("SectorNumber: ", si.SectorNumber) + writer.Println("SealProof: ", si.SealProof) + writer.Println("SealedCID: ", si.SealedCID) + writer.Println("DealIDs: ", si.DealIDs) + writer.Println() + writer.Println("Activation: ", EpochTime(height, si.Activation, blockDelay)) + writer.Println("Expiration: ", EpochTime(height, si.Expiration, blockDelay)) + writer.Println() + writer.Println("DealWeight: ", si.DealWeight) + writer.Println("VerifiedDealWeight: ", si.VerifiedDealWeight) + writer.Println("InitialPledge: ", types.FIL(si.InitialPledge)) + writer.Println("ExpectedDayReward: ", types.FIL(si.ExpectedDayReward)) + writer.Println("ExpectedStoragePledge: ", types.FIL(si.ExpectedStoragePledge)) + writer.Println() + + sp, err := env.(*node.Env).ChainAPI.StateSectorPartition(req.Context, maddr, abi.SectorNumber(sid), ts.Key()) + if err != nil { + return err + } + + writer.Println("Deadline: ", sp.Deadline) + writer.Println("Partition: ", sp.Partition) + + return re.Emit(buf) + }, +} + +func blockDelay(req *cmds.Request) (uint64, error) { + var err error + repoDir, _ := req.Options[OptionRepoDir].(string) + repoDir, err = paths.GetRepoPath(repoDir) + if err != nil { + return 0, err + } + cfgPath := filepath.Join(repoDir, "config.json") + cfg, err := config.ReadFile(cfgPath) + if err != nil { + return 0, err + } + + return cfg.NetworkParams.BlockDelay, nil +} + +type ActorInfo struct { + Address string + Balance string + Nonce uint64 + Code string + Head string +} + +var stateGetActorCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Print actor information", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of actor to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + addr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + ts, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + a, err := env.(*node.Env).ChainAPI.StateGetActor(req.Context, addr, ts.Key()) + if err != nil { + return err + } + + strtype := builtin.ActorNameByCode(a.Code) + + return re.Emit(ActorInfo{ + Address: addr.String(), + Balance: fmt.Sprintf("%s", types.FIL(a.Balance)), + Nonce: a.Nonce, + Code: fmt.Sprintf("%s (%s)", a.Code, strtype), + Head: a.Head.String(), + }) + }, + Type: ActorInfo{}, +} + +var stateLookupIDCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Find corresponding ID address", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of actor to show"), + }, + Options: []cmds.Option{ + cmds.BoolOption("r", "Perform reverse lookup"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + addr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + ts, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + var a address.Address + if ok, _ := req.Options["r"].(bool); ok { + a, err = env.(*node.Env).ChainAPI.StateAccountKey(req.Context, addr, ts.Key()) + } else { + a, err = env.(*node.Env).ChainAPI.StateLookupID(req.Context, addr, ts.Key()) + } + + if err != nil { + return err + } + + return re.Emit(a.String()) + }, + Type: "", +} + +var stateSectorSizeCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Look up miners sector size", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + maddr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + ts, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + mi, err := env.(*node.Env).ChainAPI.StateMinerInfo(req.Context, maddr, ts.Key()) + if err != nil { + return err + } + + return re.Emit(fmt.Sprintf("%s (%d)", types.SizeStr(big.NewInt(int64(mi.SectorSize))), mi.SectorSize)) + }, + Type: "", +} + +var stateGetDealSetCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "View on-chain deal info", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("dealID", true, false, "Deal id to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + dealid, err := strconv.ParseUint(req.Arguments[0], 10, 64) + if err != nil { + return xerrors.Errorf("parsing deal ID: %w", err) + } + + ts, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + deal, err := env.(*node.Env).ChainAPI.StateMarketStorageDeal(req.Context, abi.DealID(dealid), ts.Key()) + if err != nil { + return err + } + + return re.Emit(deal) + }, + Type: apitypes.MarketDeal{}, +} + +var stateMinerInfo = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Retrieve miner information", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, false, "Address of miner to show"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + addr, err := address.NewFromString(req.Arguments[0]) + if err != nil { + return err + } + + blockDelay, err := blockDelay(req) + if err != nil { + return err + } + + ts, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + mi, err := env.(*node.Env).ChainAPI.StateMinerInfo(req.Context, addr, ts.Key()) + if err != nil { + return err + } + + availableBalance, err := env.(*node.Env).ChainAPI.StateMinerAvailableBalance(req.Context, addr, ts.Key()) + if err != nil { + return xerrors.Errorf("getting miner available balance: %w", err) + } + + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + + writer.Printf("Available Balance: %s\n", types.FIL(availableBalance)) + writer.Printf("Owner:\t%s\n", mi.Owner) + writer.Printf("Worker:\t%s\n", mi.Worker) + for i, controlAddress := range mi.ControlAddresses { + writer.Printf("Control %d: \t%s\n", i, controlAddress) + } + + writer.Printf("PeerID:\t%s\n", mi.PeerId) + writer.Printf("Multiaddrs:\t") + + for _, addr := range mi.Multiaddrs { + a, err := multiaddr.NewMultiaddrBytes(addr) + if err != nil { + return xerrors.Errorf("undecodable listen address: %v", err) + } + writer.Printf("%s ", a) + } + writer.Println() + writer.Printf("Consensus Fault End:\t%d\n", mi.ConsensusFaultElapsed) + + writer.Printf("SectorSize:\t%s (%d)\n", types.SizeStr(big.NewInt(int64(mi.SectorSize))), mi.SectorSize) + pow, err := env.(*node.Env).ChainAPI.StateMinerPower(req.Context, addr, ts.Key()) + if err != nil { + return err + } + + rpercI := big.Div(big.Mul(pow.MinerPower.RawBytePower, big.NewInt(1000000)), pow.TotalPower.RawBytePower) + qpercI := big.Div(big.Mul(pow.MinerPower.QualityAdjPower, big.NewInt(1000000)), pow.TotalPower.QualityAdjPower) + + writer.Printf("Byte Power: %s / %s (%0.4f%%)\n", + types.SizeStr(pow.MinerPower.RawBytePower), + types.SizeStr(pow.TotalPower.RawBytePower), + float64(rpercI.Int64())/10000) + + writer.Printf("Actual Power: %s / %s (%0.4f%%)\n", + types.DeciStr(pow.MinerPower.QualityAdjPower), + types.DeciStr(pow.TotalPower.QualityAdjPower), + float64(qpercI.Int64())/10000) + + writer.Println() + + cd, err := env.(*node.Env).ChainAPI.StateMinerProvingDeadline(req.Context, addr, ts.Key()) + if err != nil { + return xerrors.Errorf("getting miner info: %w", err) + } + + writer.Printf("Proving Period Start:\t%s\n", EpochTime(cd.CurrentEpoch, cd.PeriodStart, blockDelay)) + + return re.Emit(buf) + }, +} + +var stateNtwkVersionCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Returns the network version", + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + ts, err := env.(*node.Env).ChainAPI.ChainHead(req.Context) + if err != nil { + return err + } + + nv, err := env.(*node.Env).ChainAPI.StateNetworkVersion(req.Context, ts.Key()) + if err != nil { + return err + } + + return re.Emit(fmt.Sprintf("Network Version: %d", nv)) + }, + Type: "", +} + +var stateListActorCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "list all actors", + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + results, err := env.(*node.Env).ChainAPI.ListActor(req.Context) + if err != nil { + return err + } + + for addr, actor := range results { + output := makeActorView(actor, addr) + if err := re.Emit(output); err != nil { + return err + } + } + return nil + }, + Type: &ActorView{}, + Encoders: cmds.EncoderMap{ + cmds.JSON: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, a *ActorView) error { + marshaled, err := json.Marshal(a) + if err != nil { + return err + } + _, err = w.Write(marshaled) + if err != nil { + return err + } + _, err = w.Write([]byte("\n")) + return err + }), + }, +} + +func makeActorView(act *types.Actor, addr address.Address) *ActorView { + return &ActorView{ + Address: addr.String(), + Code: act.Code, + Nonce: act.Nonce, + Balance: act.Balance, + Head: act.Head, + } +} diff --git a/cmd/state_test.go b/cmd/state_test.go new file mode 100644 index 0000000000..db1a805712 --- /dev/null +++ b/cmd/state_test.go @@ -0,0 +1,40 @@ +package cmd_test + +import ( + "bytes" + "context" + "encoding/json" + "github.com/filecoin-project/venus/cmd" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/app/node/test" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestActorDaemon(t *testing.T) { + tf.IntegrationTest(t) + ctx := context.Background() + t.Run("state ls --enc json returns NDJSON containing all actors in the state tree", func(t *testing.T) { + builder := test.NewNodeBuilder(t) + + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + op1 := cmdClient.RunSuccess(ctx, "state", "list-actor", "--enc", "json") + result1 := op1.ReadStdoutTrimNewlines() + + var avs []cmd.ActorView + for _, line := range bytes.Split([]byte(result1), []byte{'\n'}) { + // unmarshall JSON to actor view an add to slice + var av cmd.ActorView + err := json.Unmarshal(line, &av) + require.NoError(t, err) + avs = append(avs, av) + } + + assert.NotZero(t, len(avs)) + }) +} diff --git a/cmd/swarm.go b/cmd/swarm.go new file mode 100644 index 0000000000..1851d1c6d8 --- /dev/null +++ b/cmd/swarm.go @@ -0,0 +1,366 @@ +package cmd + +import ( + "context" + "encoding/base64" + "encoding/json" + "fmt" + "time" + + "github.com/filecoin-project/venus/app/node" + "github.com/ipfs/go-cid" + cmds "github.com/ipfs/go-ipfs-cmds" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p-core/routing" + ma "github.com/multiformats/go-multiaddr" + + "github.com/filecoin-project/venus/venus-shared/libp2p/net" +) + +const ( + dhtVerboseOptionName = "verbose" + numProvidersOptionName = "num-providers" +) + +// swarmCmd contains swarm commands. +var swarmCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Interact with the swarm", + ShortDescription: ` +'venus swarm' is a tool to manipulate the libp2p swarm. The swarm is the +component that opens, listens for, and maintains connections to other +libp2p peers on the internet. +`, + }, + Subcommands: map[string]*cmds.Command{ + "id": idCmd, + "query": queryDhtCmd, + "peers": swarmPeersCmd, + "connect": swarmConnectCmd, + "findpeer": findPeerDhtCmd, + "findprovs": findProvidersDhtCmd, + "bandwidth": statsBandwidthCmd, + }, +} + +var swarmPeersCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "List peers with open connections.", + ShortDescription: ` +'venus swarm peers' lists the set of peers this node is connected to. +`, + }, + Options: []cmds.Option{ + cmds.BoolOption("verbose", "v", "Display all extra information"), + cmds.BoolOption("streams", "Also list information about open streams for each peer"), + cmds.BoolOption("latency", "Also list information about latency to each peer"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + verbose, _ := req.Options["verbose"].(bool) + latency, _ := req.Options["latency"].(bool) + streams, _ := req.Options["streams"].(bool) + + out, err := env.(*node.Env).NetworkAPI.NetworkPeers(req.Context, verbose, latency, streams) + if err != nil { + return err + } + + return re.Emit(&out) + }, + Type: net.SwarmConnInfos{}, +} + +var swarmConnectCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Open connection to a given address.", + ShortDescription: ` +'venus swarm connect' opens a new direct connection to a peer address. + +The address format is a multiaddr: + +venus swarm connect /ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ +`, + }, + Arguments: []cmds.Argument{ + cmds.StringArg("address", true, true, "address of peer to connect to.").EnableStdin(), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + results, err := env.(*node.Env).NetworkAPI.NetworkConnect(req.Context, req.Arguments) + if err != nil { + return err + } + + for result := range results { + if result.Err != nil { + return result.Err + } + if err := re.Emit(result.PeerID); err != nil { + return err + } + } + + return nil + }, + Type: peer.ID(""), +} + +var queryDhtCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Find the closest Peer IDs to a given Peer ID by querying the DHT.", + ShortDescription: "Outputs a list of newline-delimited Peer IDs.", + }, + + Arguments: []cmds.Argument{ + cmds.StringArg("peerID", true, false, "The peerID to run the query against."), + }, + Options: []cmds.Option{ + cmds.BoolOption(dhtVerboseOptionName, "v", "Print extra information."), + }, + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + + id, err := peer.Decode(req.Arguments[0]) + if err != nil { + return cmds.ClientError("invalid peer ID") + } + + ctx, cancel := context.WithCancel(req.Context) + ctx, events := routing.RegisterForQueryEvents(ctx) + + closestPeers, err := env.(*node.Env).NetworkAPI.NetworkGetClosestPeers(ctx, string(id)) + if err != nil { + cancel() + return err + } + + go func() { + defer cancel() + for _, p := range closestPeers { + routing.PublishQueryEvent(ctx, &routing.QueryEvent{ + ID: p, + Type: routing.FinalPeer, + }) + } + }() + + for e := range events { + if err := res.Emit(e); err != nil { + return err + } + } + + return nil + }, + Type: routing.QueryEvent{}, +} + +var findProvidersDhtCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Find peers that can provide a given key's value.", + ShortDescription: "Outputs a list of newline-delimited provider Peer IDs for a given key.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("key", true, false, "The key whose provider Peer IDs are output.").EnableStdin(), + }, + Options: []cmds.Option{ + cmds.BoolOption(dhtVerboseOptionName, "v", "Print extra information."), + cmds.IntOption(numProvidersOptionName, "n", "The max number of providers to find.").WithDefault(20), + }, + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + numProviders, _ := req.Options[numProvidersOptionName].(int) + if numProviders < 1 { + return fmt.Errorf("number of providers must be greater than 0") + } + + c, err := cid.Parse(req.Arguments[0]) + if err != nil { + return err + } + + ctx, cancel := context.WithTimeout(req.Context, time.Minute) + ctx, events := routing.RegisterForQueryEvents(ctx) + + pchan := env.(*node.Env).NetworkAPI.NetworkFindProvidersAsync(ctx, c, numProviders) + + go func() { + defer cancel() + for p := range pchan { + np := p + // Note that the peer IDs in these Provider + // events are the main output of this command. + // These results are piped back into the event + // system so that they can be read alongside + // other routing events which are output in + // verbose mode but otherwise filtered. + routing.PublishQueryEvent(ctx, &routing.QueryEvent{ + Type: routing.Provider, + Responses: []*peer.AddrInfo{&np}, + }) + } + }() + for e := range events { + if err := res.Emit(e); err != nil { + return err + } + } + + return nil + }, + Type: routing.QueryEvent{}, +} + +var findPeerDhtCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Find the multiaddresses associated with a Peer ID.", + ShortDescription: "Outputs a list of newline-delimited multiaddresses.", + }, + Arguments: []cmds.Argument{ + cmds.StringArg("peerID", true, false, "The ID of the peer to search for."), + }, + Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error { + peerID, err := peer.Decode(req.Arguments[0]) + if err != nil { + return err + } + + out, err := env.(*node.Env).NetworkAPI.NetworkFindPeer(req.Context, peerID) + if err != nil { + return err + } + + for _, addr := range out.Addrs { + if err := res.Emit(addr.String()); err != nil { + return err + } + } + return nil + }, +} + +var statsBandwidthCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "View bandwidth usage metrics", + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + bandwidthStats := env.(*node.Env).NetworkAPI.NetworkGetBandwidthStats(req.Context) + return re.Emit(bandwidthStats) + }, + Type: metrics.Stats{}, +} + +// IDDetails is a collection of information about a node. +type IDDetails struct { + Addresses []ma.Multiaddr + ID peer.ID + AgentVersion string + ProtocolVersion string + PublicKey []byte // raw bytes +} + +var idCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show info about the network peers", + }, + Options: []cmds.Option{ + // TODO: ideally copy this from the `ipfs id` command + cmds.StringOption("format", "f", "Specify an output format"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + addrs := env.(*node.Env).NetworkAPI.NetworkGetPeerAddresses(req.Context) + hostID := env.(*node.Env).NetworkAPI.NetworkGetPeerID(req.Context) + + details := IDDetails{ + Addresses: make([]ma.Multiaddr, len(addrs)), + ID: hostID, + } + + for i, addr := range addrs { + subAddr, err := ma.NewMultiaddr(fmt.Sprintf("/ipfs/%s", hostID.Pretty())) + if err != nil { + return err + } + details.Addresses[i] = addr.Encapsulate(subAddr) + } + + return re.Emit(&details) + }, + Type: IDDetails{}, +} + +// MarshalJSON implements json.Marshaler +func (idd IDDetails) MarshalJSON() ([]byte, error) { + addressStrings := make([]string, len(idd.Addresses)) + for i, addr := range idd.Addresses { + addressStrings[i] = addr.String() + } + + v := map[string]interface{}{ + "Addresses": addressStrings, + } + + if idd.ID != "" { + v["ID"] = idd.ID.Pretty() + } + if idd.AgentVersion != "" { + v["AgentVersion"] = idd.AgentVersion + } + if idd.ProtocolVersion != "" { + v["ProtocolVersion"] = idd.ProtocolVersion + } + if idd.PublicKey != nil { + // Base64-encode the public key explicitly. + // This is what the built-in JSON encoder does to []byte too. + v["PublicKey"] = base64.StdEncoding.EncodeToString(idd.PublicKey) + } + return json.Marshal(v) +} + +// UnmarshalJSON implements Unmarshaler +func (idd *IDDetails) UnmarshalJSON(data []byte) error { + var v map[string]*json.RawMessage + var err error + if err = json.Unmarshal(data, &v); err != nil { + return err + } + + var addresses []string + if err := decode(v, "Addresses", &addresses); err != nil { + return err + } + idd.Addresses = make([]ma.Multiaddr, len(addresses)) + for i, addr := range addresses { + a, err := ma.NewMultiaddr(addr) + if err != nil { + return err + } + idd.Addresses[i] = a + } + + var id string + if err := decode(v, "ID", &id); err != nil { + return err + } + if idd.ID, err = peer.Decode(id); err != nil { + return err + } + + if err := decode(v, "AgentVersion", &idd.AgentVersion); err != nil { + return err + } + if err := decode(v, "ProtocolVersion", &idd.ProtocolVersion); err != nil { + return err + } + if err := decode(v, "PublicKey", &idd.PublicKey); err != nil { + return err + } + return nil +} + +func decode(idd map[string]*json.RawMessage, key string, dest interface{}) error { + if raw := idd[key]; raw != nil { + if err := json.Unmarshal(*raw, &dest); err != nil { + return err + } + } + return nil +} diff --git a/cmd/swarm_integration_test.go b/cmd/swarm_integration_test.go new file mode 100644 index 0000000000..d7a64d3813 --- /dev/null +++ b/cmd/swarm_integration_test.go @@ -0,0 +1,119 @@ +package cmd_test + +import ( + "context" + "io/ioutil" + "testing" + + th "github.com/filecoin-project/venus/pkg/testhelpers" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/app/node/test" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestSwarmConnectPeersValid(t *testing.T) { + tf.IntegrationTest(t) + + ctx := context.Background() + builder := test.NewNodeBuilder(t) + + n1 := builder.BuildAndStart(ctx) + defer n1.Stop(ctx) + n2 := builder.BuildAndStart(ctx) + defer n2.Stop(ctx) + + test.ConnectNodes(t, n1, n2) +} + +func TestSwarmConnectPeersInvalid(t *testing.T) { + tf.IntegrationTest(t) + + ctx := context.Background() + builder := test.NewNodeBuilder(t) + + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + cmdClient.RunFail(ctx, "failed to parse ip4 addr", + "swarm", "connect", "/ip4/hello", + ) +} + +func TestId(t *testing.T) { + tf.IntegrationTest(t) + + ctx := context.Background() + + builder := test.NewNodeBuilder(t) + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + id := cmdClient.RunSuccess(ctx, "swarm", "id") + + idContent := id.ReadStdout() + assert.Containsf(t, idContent, "/ip4/127.0.0.1/tcp/", "default addr") + assert.Contains(t, idContent, "ID") +} + +func TestPersistId(t *testing.T) { + tf.IntegrationTest(t) + + // we need to control this + dir, err := ioutil.TempDir("", "go-fil-test") + require.NoError(t, err) + + // Start a demon in dir + d1 := th.NewDaemon(t, th.ContainerDir(dir)).Start() + + // get the id and kill it + id1 := d1.GetID() + d1.Stop() + + // restart the daemon + d2 := th.NewDaemon(t, th.ContainerDir(dir)).Start() + + // get the id and compare to previous + id2 := d2.GetID() + d2.ShutdownSuccess() + t.Logf("d1: %s", d1.ReadStdout()) + t.Logf("d2: %s", d2.ReadStdout()) + assert.Equal(t, id1, id2) +} + +func TestDhtFindPeer(t *testing.T) { + tf.IntegrationTest(t) + ctx := context.Background() + + builder1 := test.NewNodeBuilder(t) + n1 := builder1.BuildAndStart(ctx) + defer n1.Stop(ctx) + cmdClient, done := test.RunNodeAPI(ctx, n1, t) + defer done() + + builder2 := test.NewNodeBuilder(t) + n2 := builder2.BuildAndStart(ctx) + defer n2.Stop(ctx) + + test.ConnectNodes(t, n1, n2) + + n2Id := n2.Network().API().NetworkGetPeerID(ctx) + findpeerOutput := cmdClient.RunSuccess(ctx, "swarm", "findpeer", n2Id.String()).ReadStdoutTrimNewlines() + n2Addr := n2.Network().API().NetworkGetPeerAddresses(ctx)[0] + + assert.Contains(t, findpeerOutput, n2Addr.String()) +} + +func TestStatsBandwidth(t *testing.T) { + tf.IntegrationTest(t) + ctx := context.Background() + builder := test.NewNodeBuilder(t) + + _, cmdClient, done := builder.BuildAndStartAPI(ctx) + defer done() + + stats := cmdClient.RunSuccess(ctx, "swarm", "bandwidth").ReadStdoutTrimNewlines() + + assert.Equal(t, "{\n\t\"TotalIn\": 0,\n\t\"TotalOut\": 0,\n\t\"RateIn\": 0,\n\t\"RateOut\": 0\n}", stats) +} diff --git a/cmd/sync.go b/cmd/sync.go new file mode 100644 index 0000000000..8d49154391 --- /dev/null +++ b/cmd/sync.go @@ -0,0 +1,155 @@ +// Package cmd implements the command to print the blockchain. +package cmd + +import ( + "bytes" + "strconv" + + cmds "github.com/ipfs/go-ipfs-cmds" + + "github.com/filecoin-project/venus/app/node" + syncTypes "github.com/filecoin-project/venus/pkg/chainsync/types" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" +) + +var syncCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Inspect the sync", + }, + Subcommands: map[string]*cmds.Command{ + "status": storeStatusCmd, + "history": historyCmd, + "concurrent": getConcurrent, + "set-concurrent": setConcurrent, + }, +} + +var getConcurrent = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "get concurrent of sync thread", + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + concurrent := env.(*node.Env).SyncerAPI.Concurrent(req.Context) + return printOneString(re, strconv.Itoa(int(concurrent))) + }, +} + +var setConcurrent = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "set concurrent of sync thread", + }, + Options: []cmds.Option{ + cmds.Int64Option("concurrent", "coucurrent of sync thread"), + }, + Arguments: []cmds.Argument{ + cmds.StringArg("concurrent", true, false, "coucurrent of sync thread"), + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + concurrent, err := strconv.Atoi(req.Arguments[0]) + if err != nil { + return cmds.ClientError("invalid number") + } + env.(*node.Env).SyncerAPI.SetConcurrent(req.Context, int64(concurrent)) //nolint + return nil + }, +} + +var storeStatusCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show status of chain sync operation.", + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + tracker := env.(*node.Env).SyncerAPI.SyncerTracker(req.Context) + targets := tracker.Buckets + w := bytes.NewBufferString("") + writer := NewSilentWriter(w) + var inSyncing []*apitypes.Target + var waitTarget []*apitypes.Target + + for _, t := range targets { + if t.State == apitypes.SyncStateStage(syncTypes.StateInSyncing) { + inSyncing = append(inSyncing, t) + } else { + waitTarget = append(waitTarget, t) + } + } + count := 1 + writer.Println("Syncing:") + for _, t := range inSyncing { + writer.Println("SyncTarget:", strconv.Itoa(count)) + writer.Println("\tBase:", t.Base.Height(), t.Base.Key().String()) + writer.Println("\tTarget:", t.Head.Height(), t.Head.Key().String()) + + if t.Current != nil { + writer.Println("\tCurrent:", t.Current.Height(), t.Current.Key().String()) + } else { + writer.Println("\tCurrent:") + } + + writer.Println("\tStatus:", t.State.String()) + writer.Println("\tErr:", t.Err) + writer.Println() + count++ + } + + writer.Println("Waiting:") + for _, t := range waitTarget { + writer.Println("SyncTarget:", strconv.Itoa(count)) + writer.Println("\tBase:", t.Base.Height(), t.Base.Key().String()) + writer.Println("\tTarget:", t.Head.Height(), t.Head.Key().String()) + + if t.Current != nil { + writer.Println("\tCurrent:", t.Current.Height(), t.Current.Key().String()) + } else { + writer.Println("\tCurrent:") + } + + writer.Println("\tStatus:", t.State.String()) + writer.Println("\tErr:", t.Err) + writer.Println() + count++ + } + + if err := re.Emit(w); err != nil { + return err + } + return nil + }, +} + +var historyCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show history of chain sync.", + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + tracker := env.(*node.Env).SyncerAPI.SyncerTracker(req.Context) + w := bytes.NewBufferString("") + writer := NewSilentWriter(w) + + writer.Println("History:") + history := tracker.History + count := 1 + for _, t := range history { + writer.Println("SyncTarget:", strconv.Itoa(count)) + writer.Println("\tBase:", t.Base.Height(), t.Base.Key().String()) + + writer.Println("\tTarget:", t.Head.Height(), t.Head.Key().String()) + + if t.Current != nil { + writer.Println("\tCurrent:", t.Current.Height(), t.Current.Key().String()) + } else { + writer.Println("\tCurrent:") + } + writer.Println("\tTime:", t.End.Sub(t.Start).Milliseconds()) + writer.Println("\tStatus:", t.State.String()) + writer.Println("\tErr:", t.Err) + writer.Println() + count++ + } + + if err := re.Emit(w); err != nil { + return err + } + return nil + }, +} diff --git a/cmd/tablewriter/tablewriter.go b/cmd/tablewriter/tablewriter.go new file mode 100755 index 0000000000..0bce40d704 --- /dev/null +++ b/cmd/tablewriter/tablewriter.go @@ -0,0 +1,140 @@ +package tablewriter + +import ( + "fmt" + "io" + "strings" + "unicode/utf8" + + "github.com/acarl005/stripansi" +) + +type Column struct { + Name string + SeparateLine bool + Lines int +} + +type TableWriter struct { + cols []Column + rows []map[int]string +} + +func Col(name string) Column { + return Column{ + Name: name, + SeparateLine: false, + } +} + +func NewLineCol(name string) Column { + return Column{ + Name: name, + SeparateLine: true, + } +} + +// Unlike text/tabwriter, this works with CLI escape codes, and allows for info +// in separate lines +func New(cols ...Column) *TableWriter { + return &TableWriter{ + cols: cols, + } +} + +func (w *TableWriter) Write(r map[string]interface{}) { + // this can cause columns to be out of order, but will at least work + byColID := map[int]string{} + +cloop: + for col, val := range r { + for i, column := range w.cols { + if column.Name == col { + byColID[i] = fmt.Sprint(val) + w.cols[i].Lines++ + continue cloop + } + } + + byColID[len(w.cols)] = fmt.Sprint(val) + w.cols = append(w.cols, Column{ + Name: col, + SeparateLine: false, + Lines: 1, + }) + } + + w.rows = append(w.rows, byColID) +} + +func (w *TableWriter) Flush(out io.Writer) error { + colLengths := make([]int, len(w.cols)) + + header := map[int]string{} + for i, col := range w.cols { + if col.SeparateLine { + continue + } + header[i] = col.Name + } + + w.rows = append([]map[int]string{header}, w.rows...) + + for col, c := range w.cols { + if c.Lines == 0 { + continue + } + + for _, row := range w.rows { + val, found := row[col] + if !found { + continue + } + + if cliStringLength(val) > colLengths[col] { + colLengths[col] = cliStringLength(val) + } + } + } + + for _, row := range w.rows { + cols := make([]string, len(w.cols)) + + for ci, col := range w.cols { + if col.Lines == 0 { + continue + } + + e := row[ci] + pad := colLengths[ci] - cliStringLength(e) + 2 + if !col.SeparateLine && col.Lines > 0 { + e = e + strings.Repeat(" ", pad) + if _, err := fmt.Fprint(out, e); err != nil { + return err + } + } + + cols[ci] = e + } + + if _, err := fmt.Fprintln(out); err != nil { + return err + } + + for ci, col := range w.cols { + if !col.SeparateLine || len(cols[ci]) == 0 { + continue + } + + if _, err := fmt.Fprintf(out, " %s: %s\n", col.Name, cols[ci]); err != nil { + return err + } + } + } + + return nil +} + +func cliStringLength(s string) (n int) { + return utf8.RuneCountInString(stripansi.Strip(s)) +} diff --git a/cmd/tablewriter/tablewriter_test.go b/cmd/tablewriter/tablewriter_test.go new file mode 100755 index 0000000000..c6bf7be17f --- /dev/null +++ b/cmd/tablewriter/tablewriter_test.go @@ -0,0 +1,37 @@ +package tablewriter + +import ( + "os" + "testing" + + "github.com/fatih/color" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestTableWriter(t *testing.T) { + tf.UnitTest(t) + tw := New(Col("C1"), Col("X"), Col("C333"), NewLineCol("Thing")) + tw.Write(map[string]interface{}{ + "C1": "234", + "C333": "ou", + }) + tw.Write(map[string]interface{}{ + "C1": "23uieui4", + "C333": "ou", + "X": color.GreenString("#"), + "Thing": "a very long thing, annoyingly so", + }) + tw.Write(map[string]interface{}{ + "C1": "ttttttttt", + "C333": "eui", + }) + tw.Write(map[string]interface{}{ + "C1": "1", + "C333": "2", + "SurpriseColumn": "42", + }) + if err := tw.Flush(os.Stdout); err != nil { + t.Fatal(err) + } +} diff --git a/cmd/go-filecoin/util_test.go b/cmd/util_test.go similarity index 89% rename from cmd/go-filecoin/util_test.go rename to cmd/util_test.go index ce7eac1b0b..c66c6bba97 100644 --- a/cmd/go-filecoin/util_test.go +++ b/cmd/util_test.go @@ -1,4 +1,4 @@ -package commands +package cmd import ( "testing" @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" ) func TestOptionalAddr(t *testing.T) { diff --git a/cmd/utils.go b/cmd/utils.go new file mode 100644 index 0000000000..81d51399c1 --- /dev/null +++ b/cmd/utils.go @@ -0,0 +1,196 @@ +package cmd + +import ( + "bytes" + "context" + "fmt" + "io" + "os" + "os/signal" + "strconv" + "syscall" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/hako/durafmt" + "github.com/ipfs/go-cid" + cmds "github.com/ipfs/go-ipfs-cmds" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/app/node" +) + +// SilentWriter writes to a stream, stopping after the first error and discarding output until +// the error is cleared. +// No printing methods return an error (to avoid warnings about ignoring it), but they do return +// a boolean indicating whether an error is waiting to be cleared. +// Example usage: +// sw := NewSilentWriter(w) +// sw.Println("A line") +// sw.Println("Another line") +// return sw.Error() +type SilentWriter struct { + w io.Writer + err error +} + +// NewSilentWriter returns a new writer backed by `w`. +func NewSilentWriter(w io.Writer) *SilentWriter { + return &SilentWriter{w: w} +} + +// Error returns any error encountered while writing. +func (sw *SilentWriter) Error() error { + return sw.err +} + +// ClearError clears and returns any error encountered while writing. +// Subsequent writes will attempt to write to the underlying writer again. +func (sw *SilentWriter) ClearError() error { + err := sw.err + sw.err = nil + return err +} + +// Write writes with io.Writer.Write and returns true if there was no error. +func (sw *SilentWriter) Write(p []byte) bool { + if sw.err == nil { + _, sw.err = sw.w.Write(p) + } + return sw.err == nil +} + +// WriteString writes with io.WriteString and returns true if there was no error. +func (sw *SilentWriter) WriteString(str string) bool { + if sw.err == nil { + _, sw.err = io.WriteString(sw.w, str) + } + return sw.err == nil +} + +// WriteString writes with io.WriteString and returns true if there was no error. +func (sw *SilentWriter) WriteStringln(str string) bool { + if sw.err == nil { + _, sw.err = io.WriteString(sw.w, str+"\n") + } + return sw.err == nil +} + +// Print writes with fmt.Fprint and returns true if there was no error. +func (sw *SilentWriter) Print(a ...interface{}) bool { + if sw.err == nil { + _, sw.err = fmt.Fprint(sw.w, a...) + } + return sw.err == nil +} + +// Println writes with fmt.Fprintln and returns true if there was no error. +func (sw *SilentWriter) Println(a ...interface{}) bool { + if sw.err == nil { + _, sw.err = fmt.Fprintln(sw.w, a...) + } + return sw.err == nil +} + +// Printf writes with fmt.Fprintf and returns true if there was no error. +func (sw *SilentWriter) Printf(format string, a ...interface{}) bool { + if sw.err == nil { + _, sw.err = fmt.Fprintf(sw.w, format, a...) + } + return sw.err == nil +} + +// PrintString prints a given Stringer to the writer. +func PrintString(w io.Writer, s fmt.Stringer) error { + _, err := fmt.Fprintln(w, s.String()) + return err +} + +func optionalAddr(o interface{}) (ret address.Address, err error) { + if o != nil { + ret, err = address.NewFromString(o.(string)) + if err != nil { + err = errors.Wrap(err, "invalid from address") + } + } + return +} + +//nolint +func optionalSectorSizeWithDefault(o interface{}, def abi.SectorSize) (abi.SectorSize, error) { + if o != nil { + n, err := strconv.ParseUint(o.(string), 10, 64) + if err != nil || n == 0 { + return abi.SectorSize(0), fmt.Errorf("invalid sector size: %s", o.(string)) + } + + return abi.SectorSize(n), nil + } + + return def, nil +} + +func fromAddrOrDefault(req *cmds.Request, env cmds.Environment) (address.Address, error) { + addr, err := optionalAddr(req.Options["from"]) + if err != nil { + return address.Undef, err + } + if addr.Empty() { + return env.(*node.Env).WalletAPI.WalletDefaultAddress(req.Context) + } + return addr, nil +} + +func cidsFromSlice(args []string) ([]cid.Cid, error) { + out := make([]cid.Cid, len(args)) + for i, arg := range args { + c, err := cid.Decode(arg) + if err != nil { + return nil, err + } + out[i] = c + } + return out, nil +} + +func EpochTime(curr, e abi.ChainEpoch, blockDelay uint64) string { + switch { + case curr > e: + return fmt.Sprintf("%d (%s ago)", e, durafmt.Parse(time.Second*time.Duration(int64(blockDelay)*int64(curr-e))).LimitFirstN(2)) + case curr == e: + return fmt.Sprintf("%d (now)", e) + case curr < e: + return fmt.Sprintf("%d (in %s)", e, durafmt.Parse(time.Second*time.Duration(int64(blockDelay)*int64(e-curr))).LimitFirstN(2)) + } + + panic("math broke") +} + +func printOneString(re cmds.ResponseEmitter, str string) error { + buf := new(bytes.Buffer) + writer := NewSilentWriter(buf) + writer.Println(str) + + return re.Emit(buf) +} + +func ReqContext(cctx context.Context) context.Context { + var ( + ctx context.Context + done context.CancelFunc + ) + if cctx != nil { + ctx = cctx + } else { + ctx = context.Background() + } + ctx, done = context.WithCancel(ctx) + sigChan := make(chan os.Signal, 2) + go func() { + <-sigChan + done() + }() + signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT, syscall.SIGHUP) + return ctx +} diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 0000000000..1fdb07a961 --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,25 @@ +package cmd + +import ( + "fmt" + cmds "github.com/ipfs/go-ipfs-cmds" + + "github.com/filecoin-project/venus/build/flags" +) + +type versionInfo struct { + // Commit, is the git sha that was used to build this version of venus. + Commit string +} + +var versionCmd = &cmds.Command{ + Helptext: cmds.HelpText{ + Tagline: "Show venus version information", + }, + Run: func(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment) error { + return re.Emit(&versionInfo{ + Commit: fmt.Sprintf("%s %s", flags.GitTag, flags.GitCommit), + }) + }, + Type: versionInfo{}, +} diff --git a/cmd/version_daemon_test.go b/cmd/version_daemon_test.go new file mode 100644 index 0000000000..3c2f9d4b58 --- /dev/null +++ b/cmd/version_daemon_test.go @@ -0,0 +1,86 @@ +package cmd_test + +import ( + "fmt" + "io/ioutil" + "net/http" + "os/exec" + "strings" + "testing" + + th "github.com/filecoin-project/venus/pkg/testhelpers" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + manet "github.com/multiformats/go-multiaddr/net" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestVersion(t *testing.T) { + tf.IntegrationTest(t) + + commit := getCodeCommit(t) + tag := getLastTag(t) + verOut, err := exec.Command(th.MustGetFilecoinBinary(), "version").Output() + require.NoError(t, err) + + version := string(verOut) + assert.Exactly(t, fmt.Sprintf("{\n\t\"Commit\": \"%s %s\"\n}\n", tag, commit), version) +} + +func TestVersionOverHttp(t *testing.T) { + tf.IntegrationTest(t) + + td := th.NewDaemon(t).Start() + defer td.ShutdownSuccess() + + maddr, err := td.CmdAddr() + require.NoError(t, err) + + _, host, err := manet.DialArgs(maddr) // nolint + require.NoError(t, err) + + url := fmt.Sprintf("http://%s/api/version", host) + req, err := http.NewRequest("POST", url, nil) + require.NoError(t, err) + + token, _ := td.CmdToken() + req.Header.Add("Authorization", "Bearer "+token) + + res, err := http.DefaultClient.Do(req) + require.NoError(t, err) + require.Equal(t, http.StatusOK, res.StatusCode) + + commit := strings.Trim(getCodeCommit(t), "\n ") + tag := getLastTag(t) + expected := fmt.Sprintf("{\"Commit\":\"%s %s\"}\n", tag, commit) + + defer res.Body.Close() // nolint: errcheck + body, err := ioutil.ReadAll(res.Body) + require.NoError(t, err) + require.Equal(t, expected, string(body)) +} + +func getCodeCommit(t *testing.T) string { + var gitOut []byte + var err error + gitArgs := []string{"rev-parse", "--verify", "HEAD"} + if gitOut, err = exec.Command("git", gitArgs...).Output(); err != nil { + assert.NoError(t, err) + } + return strings.TrimSpace(string(gitOut)) +} + +func getLastTag(t *testing.T) string { + var gitOut []byte + var err error + gitArgs := []string{"rev-list", "--tags", "--max-count=1"} + if gitOut, err = exec.Command("git", gitArgs...).Output(); err != nil { + assert.NoError(t, err) + } + gitArgs = []string{"describe", "--tags", strings.TrimSpace(string(gitOut))} + if gitOut, err = exec.Command("git", gitArgs...).Output(); err != nil { + assert.NoError(t, err) + } + return strings.TrimSpace(string(gitOut)) +} diff --git a/designdocs.md b/designdocs.md index b1ad6a9197..7e0592bb97 100644 --- a/designdocs.md +++ b/designdocs.md @@ -2,20 +2,20 @@ ## Goal -Articulate the reasons why we write designdocs and propose that the definition of a plan is that it is written down. +Listed the reasons why we write designdocs and propose that the importance of designdocs. ## Problem Statement -If we don't capture, on paper, in the open, the design intent behind important parts of Filecoin we experience at least the following negative consequences: +If we don't write it down and shared it publicly, the purpose of a specific design within the Filecoin network would have the following negative consequences: - - **Wasted time**: when we don't take the time to formalize designs we often end up building the wrong thing or supporting a bunch of stuff that we don't want. We also waste time at a lower level, working within systems that are painful to use because we didn't take the time to fully think through how they should work up-front. - - **Missed opportunities to engage the community**: when we don't write designs we miss benefitting from the many points of view and specialized knowledge in the community. We also miss the opportunity to come together *as* a community. Engaging on design proposals brings us together. Itโ€™s exciting and energizing. - - **Inability for the community to engage.** This is less obvious flip side of the above. Designs have to exist on paper so that they are accessible to current and future collaborators. It can be frustrating to build, change, or work with something you don't understand the design of. You spend time trying to reverse engineer design intent instead of doing the thing you want to. The worst part is that unless there is a design on paper then nobody can run with or extend it. + - **Wasted time**: when we don't take the time to formalize designs we often end up building the wrong thing or supporting a bunch of stuff that we don't want. We would also waste time with minor issues, working within systems that are painful to use because we didn't take the time to fully thinking through how they should work up-front. + - **Missed opportunities to engage the community**: when we don't write designdocs we miss benefitting from the many points of view and specialized knowledge in the community. We also miss the opportunity to come together *as* a community. Engaging on design proposals brings us together. Itโ€™s exciting and energizing. + - **Inability for the community to engage.** This is less obvious flip side of the above. Designs have to exist on paper so that they are accessible to current and future collaborators. It can be frustrating to build, change, or work with something you don't understand the design of. You spend time trying to reverse engineering intent instead of doing the thing you want to. ## Proposal 1. Write designdocs for important components and features, not just ahead of time but in circumstances where there is uncertainty or confusion. -1. Adopt the attitude that there is no plan (design) unless it is written down and circulated in the open. The norm is: __show me the plan or it doesnโ€™t exist__. +1. Adopt the attitude that there is no plan (design) unless it is written down and shared with the community. The spec is: __show me the plan or it doesnโ€™t exist__. ## What is a designdoc? @@ -35,25 +35,25 @@ It is important to understand that the goal of a design doc is not to defend a p Capturing design intent on paper, in the open, in a designdoc: - **Subjects it to thoughtful criticism**. -- **Clearly articulates what is and is not important**. +- **Clearly articulates what is/not important**. - **Synchronizes the community on important questions**. - **Disseminates information in a scalable fashion**. -## What is a designdoc not? +## What is not a designdoc? A designdoc is not a spec: you use a designdoc to rationalize a plan ahead of implementation and it should have less detail and more discussion than a spec, and it should capture far more of the *why* than a spec would. A designdoc is not a github issue, though it may be captured in one: a designdoc typically ties together a number of open questions or problems into a coherent whole. A designdoc *does not* have to: -- be kept up to date. It's a tool for capturing knowledge, formalizing our thinking, and synchronizing the team. Once it has served those purposes we don't necessarily need to tend to it. -- be long. In fact it should not be long. Several pages, by six or eight it starts to feel bloated. -- solve every problem. It should contain sufficient detail to convince readers that it contains a good idea, but not so much as to obscure the big picture or risk bike shedding on details that can fall out later. +- be kept up to date. It's a way for capturing knowledge, formalizing our thinking, and synchronizing the team. Once it has served those purposes we don't necessarily need to tend to it. +- be long. In fact it should not be long. The importance here is always have a clearly description. +- solve all issues. It should contain sufficient detail to convince readers that it contains a good idea, but do not depend on a designdoc to solve all kinds of issues. ## Alternatives ##### Something like BIP or EIP. [Protocol-level changes](https://github.com/filecoin-project/specs/blob/master/process.md) go through a process -like that. Possibly we should adopt something similar for go-filecoin. But for now, we have designdocs. +like that. Possibly we should adopt something similar for venus. But for now, we have designdocs. ##### Use specifications. @@ -63,7 +63,7 @@ Specs do something different than designdocsโ€”they enable interop. Compare the Specs are a contract between implementations and users. And like all contracts, they are dense and detail-oriented. This makes them a difficult way to understand the big picture of a design. It is tempting to use specs to serve both this contractual use case and also the proposal-evaluating use case we're talking about here. You could think of this doc as a proposal to use designdocs for the proposal-evaluating use case, as they seem to be a more appropriate tool for that task. -Obviously, we need specs too. But they often come later in the lifecycle, and are less useful for articulating system-level design than a designdoc. +Obviously, we need specs too. But specs often arrive late, and are less useful for articulating system-level design than a designdoc. ##### Github issues. @@ -81,7 +81,7 @@ A designdoc is a tool so like any apply it judiciously. If youโ€™re building som With probability 1 it will be wrong. The point is to explicitly communicate what we are and are not trying to accomplish and to rationalize a proposal. Itโ€™s a planning tool and as soon as it is finished reality will start to diverge. But as they say: plans are worthless but planning is indispensable. ##### What if Iโ€™m not sure what the solution to this problem should be? -Thatโ€™s OK. We are never sure. Try really hard to take a position. Nobody is going to hold it against you if we all discover together that the position was wrong. The hardest part of design is understanding the problem well enough to propose any solution. It facilitates collaboration and progress to write down a clear description of a problem and one hypothesized best solution. +Thatโ€™s ok, keep working hard. Nobody is going to hold it against you if we find it wrong in the end. The hardest part of a design is be clear with the problem well enough to propose any solution. It facilitates collaboration and progress to write down a clear description of a problem and with a proposed solution. ##### I donโ€™t like / want to write design docs. I want to write code. -OK, but youโ€™re just limiting yourself. Getting good at writing designs enables you to increase your leverage to accomplish bigger, better things. Youโ€™re also giving up influence over outcomes if you donโ€™t get good at articulating your ideas. But if you really donโ€™t want to, OK, find someone to work with who does, and collaborate. Or do the prototyping, dump state, and hand off. +OK, but youโ€™re just limiting yourself. Getting good at writing designdocs enables you to increase your leverage to accomplish bigger, better projects. Youโ€™re also giving up the practice about articulating your ideas. But if you really donโ€™t want to, OK, find someone to work with who does, and collaborate. diff --git a/documentation/cn/refactor_notes.md b/documentation/cn/refactor_notes.md new file mode 100644 index 0000000000..0a388efc1c --- /dev/null +++ b/documentation/cn/refactor_notes.md @@ -0,0 +1,13 @@ +# ้‡ๆž„ๆ—ฅ่ฎฐ + +- [ ] ๅ…ณไบŽ venus-devtool ้ƒจๅˆ†๏ผŒไนŸๅฐฑๆ˜ฏๅผ€ๅ‘่ฟ‡็จ‹ไธญ้œ€่ฆ็”จๅˆฐ็š„ๅ„็ฑป่พ…ๅŠฉๅทฅๅ…ทๆ”พ็ฝฎไฝ็ฝฎ๏ผšไปŽ็Žฐๅœจๆฅ็œ‹๏ผŒไปฅไธ€ไธชๅ•็‹ฌ็š„ใ€ๅ†…้ƒจ็š„ module ๆจกๅผๆฏ”่พƒๅฅฝ๏ผŒๅฏไปฅ้ฟๅ…ๅœจ venus/v2 ไธญๆ˜พๅผๅฃฐๆ˜Žๅฏนๆ–ฐ็š„ module ่ฟ›่กŒ replace๏ผŒไปŽ่€ŒไนŸๅฐฑ้ฟๅ…ไบ†ๅ‡บ็Žฐไพ่ต–ๅ…ณ็ณปไธŠ็š„โ€œ้šพไปฅๅŽ˜ๆธ…โ€ใ€‚ + +- [ ] ๅœจๆŠฝๅ– `chain.BlockHeader` ็š„่ฟ‡็จ‹ไธญ๏ผŒๅ‡บ็Žฐไบ†ๅŒๆ ท็š„ๅบๅˆ—ๅŒ–่ฟ‡็จ‹ๅๅคๆ‰‹ๅ†™๏ผŒ `cachedBytes` ไธŽ `cachedCid` ็”จไธŠไบ†ๅˆๆฒกๅฎŒๅ…จ็”จไธŠ็š„ๆƒ…ๅ†ต๏ผŒ่ฟ™ไธชๅบ”่ฏฅๆ˜ฏๅœจๅค„็†ๅކๅฒ้—็•™้—ฎ้ข˜ๆ—ถ่ฟฝๆฑ‚โ€œๅฟซ้€Ÿๅฎž็Žฐโ€็š„็ป“ๆžœใ€‚ๅŒๆ—ถ๏ผŒๅœจๅ†™ๅฅฝๅฎž็Žฐไน‹ๅŽ็ซ‹ๅˆป่ฟ›่กŒๅŸบๆœฌ็š„ๆต‹่ฏ•็ผ–ๅ†™ๅธฎๅŠฉๆ‰พๅ‡บไบ† `SignatureData` ๆ–นๆณ•ไธญ๏ผŒ็”ฑไบŽ็ป“ๆž„ไฝ“ๅคๅˆถๅŽๆฒกๆœ‰ๆธ…้™ค cache ๅฏผ่‡ด็š„bugใ€‚ + + ็”ฑๆญคๅฏ่ง๏ผŒๆต‹่ฏ•็”จไพ‹๏ผŒๅฐคๅ…ถๆ˜ฏๅŸบ็ก€ๅŠŸ่ƒฝๆ€ง็š„ๆต‹่ฏ•็”จไพ‹๏ผŒๅบ”ๅฝ“ๅœจ้€ป่พ‘ไปฃ็ ๅฎž็ŽฐๅŽ็ซ‹ๅณ็€ๆ‰‹็ผ–ๅ†™๏ผŒ่ฟ™ๆ ทๅšไธ€ๆ–น้ขๆ˜ฏๅฏไปฅๅฐฝๅฟซๆ‰พๅ‡บ้—ฎ้ข˜๏ผŒ้ฟๅ…็ณป็ปŸๅคๆ‚ไน‹ๅŽๆ›ดไธบๅ›ฐ้šพ็š„ debug ่ฟ‡็จ‹๏ผ›ๅฆไธ€ๆ–น้ขๅˆ™ๆ˜ฏๅฏไปฅ่ถ็€่ฎฐๅฟ†ไป็„ถโ€œๆ–ฐ้ฒœโ€๏ผŒไฟ้šœๆœ‰ไธ€ไธช่พƒๅฅฝ็š„ๆต‹่ฏ•่ฆ†็›–็އใ€‚ + +- [ ] ๅœจๅค„็† `chain.BlockHeader` ไธญ็š„ `cachedBytes` ๅ’Œ `cachedCid` ๅญ—ๆฎตๆ—ถ๏ผŒๅ‡บ็Žฐไบ†ๅๅคใ€‚ๆœ€ๅผ€ๅง‹่ฎคไธบๅฏไปฅๆŠฝ่ฑกๅ‡บไธ€็ฑป `cborCache` ็ฑปๅž‹๏ผŒไธ“้—จ่ฟ›่กŒ data ๅ’Œ cid ็š„็ผ“ๅญ˜ใ€‚ๆŽฅ็€ๅ‘็Žฐ๏ผŒๅœจ `Message` ่ฟ™็ฑปๅฏน่ฑกไธญๅฆ‚ๆžœไฝฟ็”จ่ฟ™ๆ ทไธ€ไธช็ผ“ๅญ˜๏ผŒๅพˆๆœ‰ๅฏ่ƒฝๅ‡บ็Žฐไฟฎๆ”นไบ† Message ็š„ๅฑžๆ€งไน‹ๅŽๅพ—ไธๅˆฐๆญฃ็กฎ็š„ๅบๅˆ—ๅŒ–็ป“ๆžœๅ’Œ cid ็š„้—ฎ้ข˜ใ€‚ + + ๅ› ๆญค๏ผŒๅฐ† `chain.BlockHeader` ไธญ็š„ cache ๅญ—ๆฎตไนŸๅšไบ†็งป้™คๅค„็†ใ€‚ๅฆ‚ๆžœไป”็ป†ๅŽปๆƒณ๏ผŒ่ฟ™้‡Œ cache ๅญ—ๆฎตๅ‡บ็Žฐ็š„ๆ„ไน‰ๅˆฐๅบ•ๆ˜ฏไป€ไนˆ๏ผŸๆˆ‘่ฎคไธบ๏ผŒ่ฟ™็ฑปๅฏน่ฑกๆไพ›ไบ†ๅคชๅคš้œ€่ฆ่ฟ›่กŒ้›ทๅŒ็š„ๅบๅˆ—ๅŒ–่ฟ‡็จ‹็š„ๆ–นๆณ•ใ€‚ๅฆ‚ `Cid` ่ฟ™ไธชๆ–นๆณ•๏ผŒ็”š่‡ณๆ˜ฏๅ…ˆๅบๅˆ—ๅŒ–ๅ†่ฎก็ฎ—ๆ•ฐๆฎ็š„ๅ“ˆๅธŒๅ€ผใ€‚่ฟ™ๅฏผ่‡ดๅบๅˆ—ๅŒ–่ขซๅๅคๆ— ๅบๅœฐไฝฟ็”จ๏ผŒๆˆ‘ๆƒณ่ฟ™ๆ‰ๆ˜ฏๅŠ ไธŠ cache ๅญ—ๆฎต็š„ๅˆ่กทใ€‚ + + ้‚ฃไนˆๅฎž้™…ไธŠ๏ผŒๆˆ‘ไปฌ็œŸๆญฃ่ฆๅš็š„ๆ˜ฏๅ‡ๅฐ‘ๅบๅˆ—ๅŒ–่ขซไฝฟ็”จ็š„ไฝ็ฝฎ๏ผŒๅนถๅฐฝๅฏ่ƒฝ่ฎฉไธ”ๆœ‰ๅบ๏ผŒๅฆ‚ไธๆไพ›ไธ€ไธชๅช่ฟ”ๅ›ž Cid ็š„ๆ–นๆณ•๏ผŒ่€ŒๅŒๆ—ถ่ฟ”ๅ›žๅบๅˆ—ๅŒ–็ป“ๆžœๅ’Œ Cid diff --git a/documentation/images/venus_logo_big2.jpg b/documentation/images/venus_logo_big2.jpg new file mode 100644 index 0000000000..8d8be38721 Binary files /dev/null and b/documentation/images/venus_logo_big2.jpg differ diff --git a/documentation/venus-market module design & roadmap.md b/documentation/venus-market module design & roadmap.md new file mode 100644 index 0000000000..402597d5c1 --- /dev/null +++ b/documentation/venus-market module design & roadmap.md @@ -0,0 +1,113 @@ +## venus-market module design & roadmap + +by Venus team + +Sep 2021 + +## Background + +As the rebranding of filecoin terminology spearheaded by [FIP0018](https://github.com/filecoin-project/FIPs/blob/master/_fips/fip-0018.md) settled, consensus has been reached across communities (developers, providers, ecosystem partners and etc) to push for taking on more storage deals to improve the public perception on the fact that most of the network storages are still commited capacities (CCs). Given the above sentiment, design and implemenation of venus-market module has been put into the spot light. A clear long-term roadmap is due for Venus community to dissus and iterate on, also as a means for better communications with filecoin eocsystem in general. + +While Lotus is leading the way of implementing a full-fledged market module according to the [spec](https://spec.filecoin.io/#section-systems.filecoin_markets), Venus has been making much efforts to catch up and closing the gap in regard to [markets](https://github.com/filecoin-project/venus/discussions/4532). Right now, Lotus supports a 1-to-1 (client-to-provider) storage and retrieval model where burdens of discoveries are mostly on storage clients and match making services like Estuary. Negotiation is a fairly mannual process and does not support much flexibility. As venus-team is picking up the reminiscences of the [Filecoin Component Architecture](https://docs.google.com/document/d/1ukPD8j6plLEbbzUjxfo7eCauIrOeC_tqxqYK_ls9xbc/edit#), emergent ways of how market could facilitate the dynamics between storage providers and storage clients are constatntly being intergrated into the long-term vision of Venus filecoin. + +## Goals + +Current roadmap for venus-market are loosely broken into the following phases. + +### Phase 1: peer-to-peer model (short-term) + +For phase 1, venus-market will deliver a complete deal making experience as what lotus offers. This includes compatibility with lotus client where one can make deal with venus-market using lotus client, retrieve deal/data in the same way as lotus retrieves its data, setup storage ask and etc. + +![image-20210910170740850](https://i.loli.net/2021/09/10/seIgEWBiko6AKc2.png) + +- Implementation of the one-to-one model of lotus market like module and fully interoperable with lotus implementation, which means compatibility with lotus client and more +- venus-market deployed as independent module, like venus-sealer and venus-wallet +- Implementation of a reliable market module that runs a seperate process from the main storage process +- A clear module boundary that allows interoperability and user customizations +- Flexibilities of market module to interact with existing venus infrastructures using RPC APIs +- Supports for mainnet, calibration and Nerpa +- Lightweight client: compatibility with Lotus and support for venus-market unique features including client running seperately as a process and remove dependencies for node; great for bootstraping tests on deal making process + +### Phase 2: platform model + +For phase 2, venus-market is taking the following approach. + +**platform-to-peer**: venus-market as deal making backend for middle-man services like Estuary connecting client and provider. As deal market matures, instead of ineffectively advertising one's storage system in #fil-deal-market, storage middleman services like Estuary and Filswan are taking up the roles for distributing datacap more effectively to storage providers looking for deals. Given venus' unique architecture where multiple providers are sharing same infrastructure (chain services), venus-market is in a good position to provide before mentioned deal making backend for a storage middle-man service. + +**platform-to-platform**: venus-market as storage backend for a storage integrator (a storage provider who offers different kinds of storage products to its end user, for example, filecoin, S3, tape and etc). + +![image-20210910160837732](https://i.loli.net/2021/09/10/sRY5u6Bw9aj713H.png) + +- Taking advantages of Venus' distributed architectural nature, a gateway service backend built on top of current infrastructure +- Compact API: seperation of node and venus-market data enabling local storage of some of the deal related meta data +- Data transfer support for different protocols in addition to `Graphsync` [*](https://docs.google.com/document/d/1XWcTp2MEOVtKLpcpiFeeDvc_gTwQ0Bc6yABCTzDmeP0/edit#heading=h.1oxn84bcd1n1) +- Meta data stored locally in HA database like mySQL by venus-market +- venus-market as deal gateway for storage providers using venus chain services (venus shared modules) +- Deal match making: multiple copies for store and faster retrieval + +### Phase 3: Decentrialized market (Dp2p) model (long-term vision) + +For phase 3, venus-market will look into ways to automate deal flow between client and provider using a peer-to-peer approach, giving up its role as a gateway in phase 2. Additionally, venus pool can be positioned as a retrieval node which is fully aware of deal meta that chain services helped to record. + +![image-20210910171104881](https://i.loli.net/2021/09/10/VE6BLpaARrMck9x.png) + +- Goals for phase 3 is not as clear cut; require more iterations as filecoin develops smart contracts and others +- auto-match deal market: a service to provide algorithmically (as opposed to manually verifying data using current fil-plus framework) verified data storing/retrieval from peer to peer +- venus-market as gateway for IPFS: options for paid IPFS node +- In time, a platform model as an easy and quick way for matchmaking might fall out of favour and a faster layer 2 protocol could be built on top of Venus to make true p2p data storage with standardized storage services governed by blockchain +- New econ market on layer 2 + +## Design ideas + +Design draws inspirations from the original [filecoin component document](https://docs.google.com/document/d/1ukPD8j6plLEbbzUjxfo7eCauIrOeC_tqxqYK_ls9xbc/edit#) and [filecoin storage market module](https://docs.google.com/document/d/1FfMUpW8vanR9FrXsybxBBbba7DzeyuCIN2uAXgE7J8U/edit#heading=h.uq51khvyisgr). + +### Terminology + +- module and component: "A **module** means a code library that may be compiled and linked against. A **component** means a distinct process presenting or consuming RPC API." In this document, the distinction is not as clear. Will need revamping of the Venus documentation to redefine all terms. +- **GraphSync**: "The default underlying transfer protocol used by the Scheduler. The full graphsync specification can be found at [here](https://github.com/ipld/specs/blob/master/block-layer/graphsync/graphsync.md)." + +### Modules and processes + +> In a multi-process architecture, the storage component would form the miner operatorโ€™s entry point for all mining and market operations (but not basic node operations) pertaining to a single storage miner actor. It depends on a node to mediate blockchain interactions. **The storage component drives these interactions**. If viewed as a system of services, the storage component is the consumer of a service provided by a node. Thus, the **storage component will depend on an RPC API be provided by a node**. This API is likely to include streaming operations in order to provide continually changing blockchain state to the component. The [mimblewimble/grin project](https://github.com/mimblewimble) is another example of this multi-process node/miner architecture. + +Similar to what is described for storage component above, venus-market will be dependent on a RPC API provided by a node ie. chain services, venus shared modules. Blockchain interactions will be handled by venus chain services which can also be extended to handle authentications among others. + +### Deal flow + +In phase 1, louts market deal flow will be mirrored in Venus. Maintainace of the market and evolution with the network. + +In phase 2, proposing and accepting a deal will work as following. + +- [Provider] Add storage ask bidding policy along with other deal acceptance policy +- [Client] Query asks from venus-market with filters like geo locations, redundancy, deal lifespan and etc +- [venus-market] Aggregate requirements from both providers and clients, matchmaking on demand +- [venus-market] Provider(s) and client go through rounds of real-time biding to match-make +- Once matched, provider proceeds to store data as in the one-to-one model + +### Meta data + +Platform model implementation of venus-market may store metadata on the deals it distributes to providers under its wings. Like Airbnb, it may include metrics that a repututation system of both client and provider can be built upon. Metrics like storage success rate, retrieval success rate, fast retrieval enabled? and etc. + +### Dependencies + +1. `venus` module to provide node services +2. `venus-messager` module to provide data services +3. `venus-gateway` to provide signature services +4. `venus-sealer` to provide sealing and data lookup services +5. `go-fil-market` compatible with lotus one-to-one model (For compatbility with lotus only) +6. piece data from external deals +7. datastore using HA databases for deal meta data + +*Note that `go-fil-market` included as dependencies is sololy for the use of compatibility with lotus. venus-market will be bundling other unique features along with compatibility with lotus.* + +![ๆจกๅ—ๅ›พ](https://i.loli.net/2021/09/08/7UxfVujcNPmszyR.jpg) + +### Interactions + + + +## Risks + +- Community's concerns on [infrastructure failure](https://filecoinproject.slack.com/archives/CEHHJNJS3/p1627872429033000?thread_ts=1627864468.030900&cid=CEHHJNJS3), node redundancy can be setup +- Data transfer complexities +- Some of the goals in later phases may be moving target as ecosystem evolve diff --git a/extern/filecoin-ffi b/extern/filecoin-ffi new file mode 160000 index 0000000000..52d80081bf --- /dev/null +++ b/extern/filecoin-ffi @@ -0,0 +1 @@ +Subproject commit 52d80081bfdd8a30bc44bcfe44cb0f299615b9f3 diff --git a/extern/test-vectors b/extern/test-vectors new file mode 160000 index 0000000000..d9a75a7873 --- /dev/null +++ b/extern/test-vectors @@ -0,0 +1 @@ +Subproject commit d9a75a7873aee0db28b87e3970d2ea16a2f37c6a diff --git a/_assets/arch-diagram.monopic b/fixtures/_assets/arch-diagram.monopic similarity index 100% rename from _assets/arch-diagram.monopic rename to fixtures/_assets/arch-diagram.monopic diff --git a/fixtures/_assets/car/calibnet.car b/fixtures/_assets/car/calibnet.car new file mode 100644 index 0000000000..cbade953f8 Binary files /dev/null and b/fixtures/_assets/car/calibnet.car differ diff --git a/fixtures/_assets/car/devnet.car b/fixtures/_assets/car/devnet.car new file mode 100644 index 0000000000..f1b3f342a6 Binary files /dev/null and b/fixtures/_assets/car/devnet.car differ diff --git a/fixtures/_assets/car/forcenet.car b/fixtures/_assets/car/forcenet.car new file mode 100644 index 0000000000..cc0eb71763 Binary files /dev/null and b/fixtures/_assets/car/forcenet.car differ diff --git a/fixtures/_assets/car/interopnet.car b/fixtures/_assets/car/interopnet.car new file mode 100644 index 0000000000..80ecd6e729 Binary files /dev/null and b/fixtures/_assets/car/interopnet.car differ diff --git a/fixtures/_assets/car/nerpanet.car b/fixtures/_assets/car/nerpanet.car new file mode 100644 index 0000000000..c32e0171bc Binary files /dev/null and b/fixtures/_assets/car/nerpanet.car differ diff --git a/fixtures/_assets/proof-params/parameters.json b/fixtures/_assets/proof-params/parameters.json new file mode 100644 index 0000000000..1d45844545 --- /dev/null +++ b/fixtures/_assets/proof-params/parameters.json @@ -0,0 +1,152 @@ +{ + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0170db1f394b35d995252228ee359194b13199d259380541dc529fb0099096b0.params": { + "cid": "QmVxjFRyhmyQaZEtCh7nk2abc7LhFkzhnRX4rcHqCCpikR", + "digest": "7610b9f82bfc88405b7a832b651ce2f6", + "sector_size": 2048 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0170db1f394b35d995252228ee359194b13199d259380541dc529fb0099096b0.vk": { + "cid": "QmcS5JZs8X3TdtkEBpHAdUYjdNDqcL7fWQFtQz69mpnu2X", + "digest": "0e0958009936b9d5e515ec97b8cb792d", + "sector_size": 2048 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0cfb4f178bbb71cf2ecfcd42accce558b27199ab4fb59cb78f2483fe21ef36d9.params": { + "cid": "QmUiRx71uxfmUE8V3H9sWAsAXoM88KR4eo1ByvvcFNeTLR", + "digest": "1a7d4a9c8a502a497ed92a54366af33f", + "sector_size": 536870912 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0cfb4f178bbb71cf2ecfcd42accce558b27199ab4fb59cb78f2483fe21ef36d9.vk": { + "cid": "QmfCeddjFpWtavzfEzZpJfzSajGNwfL4RjFXWAvA9TSnTV", + "digest": "4dae975de4f011f101f5a2f86d1daaba", + "sector_size": 536870912 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-3ea05428c9d11689f23529cde32fd30aabd50f7d2c93657c1d3650bca3e8ea9e.params": { + "cid": "QmcSTqDcFVLGGVYz1njhUZ7B6fkKtBumsLUwx4nkh22TzS", + "digest": "82c88066be968bb550a05e30ff6c2413", + "sector_size": 2048 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-3ea05428c9d11689f23529cde32fd30aabd50f7d2c93657c1d3650bca3e8ea9e.vk": { + "cid": "QmSTCXF2ipGA3f6muVo6kHc2URSx6PzZxGUqu7uykaH5KU", + "digest": "ffd79788d614d27919ae5bd2d94eacb6", + "sector_size": 2048 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-50c7368dea9593ed0989e70974d28024efa9d156d585b7eea1be22b2e753f331.params": { + "cid": "QmU9SBzJNrcjRFDiFc4GcApqdApN6z9X7MpUr66mJ2kAJP", + "digest": "700171ecf7334e3199437c930676af82", + "sector_size": 8388608 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-50c7368dea9593ed0989e70974d28024efa9d156d585b7eea1be22b2e753f331.vk": { + "cid": "QmbmUMa3TbbW3X5kFhExs6WgC4KeWT18YivaVmXDkB6ANG", + "digest": "79ebb55f56fda427743e35053edad8fc", + "sector_size": 8388608 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-5294475db5237a2e83c3e52fd6c2b03859a1831d45ed08c4f35dbf9a803165a9.params": { + "cid": "QmdNEL2RtqL52GQNuj8uz6mVj5Z34NVnbaJ1yMyh1oXtBx", + "digest": "c49499bb76a0762884896f9683403f55", + "sector_size": 8388608 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-5294475db5237a2e83c3e52fd6c2b03859a1831d45ed08c4f35dbf9a803165a9.vk": { + "cid": "QmUiVYCQUgr6Y13pZFr8acWpSM4xvTXUdcvGmxyuHbKhsc", + "digest": "34d4feeacd9abf788d69ef1bb4d8fd00", + "sector_size": 8388608 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-7d739b8cf60f1b0709eeebee7730e297683552e4b69cab6984ec0285663c5781.params": { + "cid": "QmVgCsJFRXKLuuUhT3aMYwKVGNA9rDeR6DCrs7cAe8riBT", + "digest": "827359440349fe8f5a016e7598993b79", + "sector_size": 536870912 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-7d739b8cf60f1b0709eeebee7730e297683552e4b69cab6984ec0285663c5781.vk": { + "cid": "QmfA31fbCWojSmhSGvvfxmxaYCpMoXP95zEQ9sLvBGHNaN", + "digest": "bd2cd62f65c1ab84f19ca27e97b7c731", + "sector_size": 536870912 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-0377ded656c6f524f1618760bffe4e0a1c51d5a70c4509eedae8a27555733edc.params": { + "cid": "QmaUmfcJt6pozn8ndq1JVBzLRjRJdHMTPd4foa8iw5sjBZ", + "digest": "2cf49eb26f1fee94c85781a390ddb4c8", + "sector_size": 34359738368 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-0377ded656c6f524f1618760bffe4e0a1c51d5a70c4509eedae8a27555733edc.vk": { + "cid": "QmR9i9KL3vhhAqTBGj1bPPC7LvkptxrH9RvxJxLN1vvsBE", + "digest": "0f8ec542485568fa3468c066e9fed82b", + "sector_size": 34359738368 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-559e581f022bb4e4ec6e719e563bf0e026ad6de42e56c18714a2c692b1b88d7e.params": { + "cid": "Qmdtczp7p4wrbDofmHdGhiixn9irAcN77mV9AEHZBaTt1i", + "digest": "d84f79a16fe40e9e25a36e2107bb1ba0", + "sector_size": 34359738368 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-559e581f022bb4e4ec6e719e563bf0e026ad6de42e56c18714a2c692b1b88d7e.vk": { + "cid": "QmZCvxKcKP97vDAk8Nxs9R1fWtqpjQrAhhfXPoCi1nkDoF", + "digest": "fc02943678dd119e69e7fab8420e8819", + "sector_size": 34359738368 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-2627e4006b67f99cef990c0a47d5426cb7ab0a0ad58fc1061547bf2d28b09def.params": { + "cid": "QmeAN4vuANhXsF8xP2Lx5j2L6yMSdogLzpcvqCJThRGK1V", + "digest": "3810b7780ac0e299b22ae70f1f94c9bc", + "sector_size": 68719476736 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-2627e4006b67f99cef990c0a47d5426cb7ab0a0ad58fc1061547bf2d28b09def.vk": { + "cid": "QmWV8rqZLxs1oQN9jxNWmnT1YdgLwCcscv94VARrhHf1T7", + "digest": "59d2bf1857adc59a4f08fcf2afaa916b", + "sector_size": 68719476736 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-b62098629d07946e9028127e70295ed996fe3ed25b0f9f88eb610a0ab4385a3c.params": { + "cid": "QmVkrXc1SLcpgcudK5J25HH93QvR9tNsVhVTYHm5UymXAz", + "digest": "2170a91ad5bae22ea61f2ea766630322", + "sector_size": 68719476736 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-b62098629d07946e9028127e70295ed996fe3ed25b0f9f88eb610a0ab4385a3c.vk": { + "cid": "QmbfQjPD7EpzjhWGmvWAsyN2mAZ4PcYhsf3ujuhU9CSuBm", + "digest": "6d3789148fb6466d07ee1e24d6292fd6", + "sector_size": 68719476736 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-032d3138d22506ec0082ed72b2dcba18df18477904e35bafee82b3793b06832f.params": { + "cid": "QmWceMgnWYLopMuM4AoGMvGEau7tNe5UK83XFjH5V9B17h", + "digest": "434fb1338ecfaf0f59256f30dde4968f", + "sector_size": 2048 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-032d3138d22506ec0082ed72b2dcba18df18477904e35bafee82b3793b06832f.vk": { + "cid": "QmamahpFCstMUqHi2qGtVoDnRrsXhid86qsfvoyCTKJqHr", + "digest": "dc1ade9929ade1708238f155343044ac", + "sector_size": 2048 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-6babf46ce344ae495d558e7770a585b2382d54f225af8ed0397b8be7c3fcd472.params": { + "cid": "QmYBpTt7LWNAWr1JXThV5VxX7wsQFLd1PHrGYVbrU1EZjC", + "digest": "6c77597eb91ab936c1cef4cf19eba1b3", + "sector_size": 536870912 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-6babf46ce344ae495d558e7770a585b2382d54f225af8ed0397b8be7c3fcd472.vk": { + "cid": "QmWionkqH2B6TXivzBSQeSyBxojaiAFbzhjtwYRrfwd8nH", + "digest": "065179da19fbe515507267677f02823e", + "sector_size": 536870912 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-ecd683648512ab1765faa2a5f14bab48f676e633467f0aa8aad4b55dcb0652bb.params": { + "cid": "QmPXAPPuQtuQz7Zz3MHMAMEtsYwqM1o9H1csPLeiMUQwZH", + "digest": "09e612e4eeb7a0eb95679a88404f960c", + "sector_size": 8388608 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-ecd683648512ab1765faa2a5f14bab48f676e633467f0aa8aad4b55dcb0652bb.vk": { + "cid": "QmYCuipFyvVW1GojdMrjK1JnMobXtT4zRCZs1CGxjizs99", + "digest": "b687beb9adbd9dabe265a7e3620813e4", + "sector_size": 8388608 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-0-sha256_hasher-82a357d2f2ca81dc61bb45f4a762807aedee1b0a53fd6c4e77b46a01bfef7820.params": { + "cid": "QmengpM684XLQfG8754ToonszgEg2bQeAGUan5uXTHUQzJ", + "digest": "6a388072a518cf46ebd661f5cc46900a", + "sector_size": 34359738368 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-0-sha256_hasher-82a357d2f2ca81dc61bb45f4a762807aedee1b0a53fd6c4e77b46a01bfef7820.vk": { + "cid": "Qmf93EMrADXAK6CyiSfE8xx45fkMfR3uzKEPCvZC1n2kzb", + "digest": "0c7b4aac1c40fdb7eb82bc355b41addf", + "sector_size": 34359738368 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-2-sha256_hasher-96f1b4a04c5c51e4759bbf224bbc2ef5a42c7100f16ec0637123f16a845ddfb2.params": { + "cid": "QmS7ye6Ri2MfFzCkcUJ7FQ6zxDKuJ6J6B8k5PN7wzSR9sX", + "digest": "1801f8a6e1b00bceb00cc27314bb5ce3", + "sector_size": 68719476736 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-2-sha256_hasher-96f1b4a04c5c51e4759bbf224bbc2ef5a42c7100f16ec0637123f16a845ddfb2.vk": { + "cid": "QmehSmC6BhrgRZakPDta2ewoH9nosNzdjCqQRXsNFNUkLN", + "digest": "a89884252c04c298d0b3c81bfd884164", + "sector_size": 68719476736 + } +} diff --git a/fixtures/_assets/proof-params/srs-inner-product.json b/fixtures/_assets/proof-params/srs-inner-product.json new file mode 100644 index 0000000000..8566bf5fd8 --- /dev/null +++ b/fixtures/_assets/proof-params/srs-inner-product.json @@ -0,0 +1,7 @@ +{ + "v28-fil-inner-product-v1.srs": { + "cid": "Qmdq44DjcQnFfU3PJcdX7J49GCqcUYszr1TxMbHtAkvQ3g", + "digest": "ae20310138f5ba81451d723f858e3797", + "sector_size": 0 + } +} diff --git a/fixtures/asset/asset.go b/fixtures/asset/asset.go new file mode 100644 index 0000000000..2470e0d40e --- /dev/null +++ b/fixtures/asset/asset.go @@ -0,0 +1,413 @@ +// Code generated for package asset by go-bindata DO NOT EDIT. (@generated) +// sources: +// fixtures/_assets/car/calibnet.car +// fixtures/_assets/car/devnet.car +// fixtures/_assets/car/forcenet.car +// fixtures/_assets/car/interopnet.car +// fixtures/_assets/car/nerpanet.car +// fixtures/_assets/proof-params/parameters.json +// fixtures/_assets/proof-params/srs-inner-product.json +// fixtures/_assets/arch-diagram.monopic +package asset + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +// Name return file name +func (fi bindataFileInfo) Name() string { + return fi.name +} + +// Size return file size +func (fi bindataFileInfo) Size() int64 { + return fi.size +} + +// Mode return file mode +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} + +// Mode return file modify time +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} + +// IsDir return file whether a directory +func (fi bindataFileInfo) IsDir() bool { + return fi.mode&os.ModeDir != 0 +} + +// Sys return file is sys mode +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var _fixtures_assetsCarCalibnetCar = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\xbd\x05\x50\x55\x5b\xff\xff\x7f\x0e\xb1\x0f\x82\x02\xd2\x1b\x29\x25\x45\x5a\x52\x01\x49\x69\x24\x95\x94\x16\x90\x6e\xa4\x37\x21\x0d\x22\x21\x2a\x48\xa3\x80\x48\x48\x88\x28\xdd\x02\xd2\x22\x48\x0a\x28\x21\x29\x02\x52\xff\xe1\x79\xbc\xcf\x8f\x73\xfe\xdf\x19\xee\xf6\xce\xdc\x19\x65\x3e\x7e\x5e\x6b\xad\xbd\xde\x6b\xaf\xda\xbc\x45\x33\x2d\x9c\x1d\x1c\x5c\x5d\xa0\x61\x76\x1d\x56\x04\xd2\x29\x7d\x06\x8b\xe1\x75\x55\x8b\xb9\xca\xb7\x04\xa3\x90\x29\x3c\xd0\xc7\x5c\x53\x8c\x25\x49\x39\x4f\x31\xcc\x52\x9d\xf3\x20\x92\xfa\xfa\x93\x53\x84\x96\xee\x16\xce\x2e\xd6\x0e\xf6\xc8\x12\xac\x7f\xf7\x0f\x1e\x48\x21\x10\x90\x0e\x83\xc2\x23\x42\x1e\x27\xe8\xfb\xf4\xf4\x7b\x64\xa5\xd7\x54\xe2\xa3\x2d\xea\xbe\xea\xab\xde\xed\xcf\x5a\xab\x25\xb6\x5f\x3c\x42\x30\x04\x22\x24\xa0\x40\x84\x0e\x03\xe2\x84\xff\x02\x8e\x0a\xcb\x8c\x40\x3a\x91\x30\x10\xfb\x06\xd2\x30\x7f\x41\x09\x30\x60\x29\x4c\x24\xbc\xa8\x79\x97\x12\x23\xff\x48\x66\xfb\xae\xf2\x8b\xb8\x67\xd0\x5a\x6a\x97\xb3\x04\xe2\x58\xbd\x8c\xbd\x12\xba\xd9\x17\xef\xb2\x4d\x7e\xee\x97\xe5\xab\x65\x08\x23\xb8\xbf\x1a\xfe\x3a\x91\x30\x4d\x7d\xcf\x73\x51\xac\xf0\xb4\xe6\xb1\xd0\x59\x8b\x48\x31\xaa\x2e\x60\x6a\xf4\x01\x79\x59\xf1\x92\x76\x3d\x63\xa6\x8a\xfe\xd4\x02\xd3\xb0\x88\x70\xf3\x1b\x11\xef\x1b\xdc\xc7\x42\x93\x79\xfc\x5f\x15\x8c\x31\x44\x91\x9e\xaf\x51\xa6\x6b\xbb\x51\x9d\xc8\x31\x2c\xa5\xcc\x34\x7a\x46\x2f\xa9\x0d\x9b\xbb\xb4\x9b\xf8\x17\xb5\x71\xd7\xe5\x80\x5f\x08\x59\x04\xee\xe6\x14\xa2\x05\xeb\xdf\x14\x3b\xc7\x4a\xc6\xc4\xd5\xc2\xd5\xda\xce\xc2\x85\x8f\x87\x57\x88\x93\x47\x80\x93\x47\x80\x81\x87\xf7\x0a\x9f\xd0\x15\x01\x5e\x4b\x55\x0b\x57\x0f\x07\x67\x1b\xab\xeb\xd6\xb6\x16\x66\x0e\xd6\xf6\x16\x5a\x0e\x36\x16\xf6\xff\xfb\xab\xed\x7f\xfe\x2a\x69\xe7\xe0\x66\xef\xea\x92\x65\xa3\xe5\xe0\x6a\x62\xab\xe9\xe6\xe8\x68\x7b\xcf\x8e\x8f\x83\x87\x87\xe7\x9f\xff\xef\xa8\x58\xdb\x5b\x38\xbb\xd8\xf1\x72\xf0\xff\xbf\x1f\xda\xaa\x39\x3b\xb8\x3a\x98\x39\xd8\x2a\x9b\x98\xba\x64\xd9\xc8\x58\xb8\x5b\xd8\x3a\x38\xda\x59\xd8\xbb\xda\x5c\xfe\x7f\x51\x36\xd7\xdd\xec\xcd\x9d\x4d\xac\x5d\xac\xed\x2d\x6d\xf8\xfe\xdf\xcf\xef\x5e\x77\x70\xb3\x37\x37\x71\xb5\x76\xb0\xb7\xe1\xfd\x7f\x3f\xb6\x54\xb1\x70\x71\x31\xb1\xb4\xf0\x94\xd7\xb2\xb2\x76\x61\xb0\x76\x61\x70\xb5\xb2\x60\x90\xb3\xb0\xb7\x70\xb1\x76\x61\x90\xb2\x75\x30\xb3\x61\x70\xb8\xf3\x9f\x1f\xfe\x53\x09\x06\x19\x0b\x33\x0b\x7b\x57\x67\x13\x5b\x6b\x2f\x0b\x73\x06\x4d\x57\x07\x67\x13\x4b\x0b\x86\x3f\x55\xe7\x9a\x24\xf8\x77\xcf\x34\x50\x66\x46\x85\x80\x39\x26\xc3\x84\x17\x0a\x94\x46\x2c\xa0\x82\x87\xd9\x6f\x21\x90\xda\x08\x92\x3b\xd6\xb6\xdc\xbc\xdc\x2e\xff\x4d\x6b\x77\xd4\x10\xc7\x9e\x69\x51\xe2\xb5\x4b\xe7\xf7\x5e\x6e\x44\x5d\x1c\x13\xb1\x7f\xfa\x6d\x9d\xf7\x1d\x21\x4a\x89\xa0\xd7\xa4\x51\xa4\xe1\xe7\xbb\x2b\xc6\x3e\x08\x25\x04\x8e\xad\xe4\xf6\xd4\xf0\xdc\x10\x05\xe2\x3f\xb9\xa5\x10\x7a\xc1\xc3\xec\x1a\x47\xa9\xcf\xfc\x37\xb5\x89\x99\xd9\xd1\x03\x38\x96\x75\xe2\xfe\x7b\x5b\x23\x13\xcb\xc0\x2e\x2a\xb5\xc1\x94\x1c\x41\xda\xde\x6e\xfd\x4a\xe6\x6a\xed\xc6\xa4\xc7\xd3\x34\x2c\xab\xb8\xad\x08\x15\x04\xd6\xf7\xeb\x4d\x3e\x2d\x6f\x20\x5d\x63\xc4\x3f\x79\x2d\x4e\xcc\x9b\xd7\xbe\xdb\x67\xea\xf2\xe4\xf3\xd7\xd6\x4b\xfe\x06\xee\x6a\x03\xe4\x2f\x9a\x44\x7c\xa5\x1e\x57\x88\x7f\xe5\x77\x34\xb0\x10\xfe\x89\x50\x42\x10\xb8\x05\xd0\xa2\xe8\x35\x4e\x2d\xfc\x93\x15\x08\x1e\x66\xd7\x39\x77\x94\x96\xe2\xbf\x69\xdd\x2d\x9c\xad\xef\x58\x5b\x98\x3b\x5b\x58\x5a\xbb\xb8\x3a\xdf\x3b\x96\xdf\x9d\xa3\x7c\x5c\x71\xd3\xff\xc6\x00\xb6\x14\x05\x81\x74\xaa\xbb\x9a\x6f\x3c\x50\xc9\xe2\xd6\x97\xb4\xd8\x41\xb3\xc1\x77\xe9\x3e\x42\xe2\x4f\x52\x9c\xff\xbb\x75\x1d\x1d\x3c\xd0\x5a\x57\xaa\xe5\x60\x69\xd9\x54\xc5\x71\x5a\x80\x30\xd0\x3e\x4c\xd1\x51\x9d\x6e\xbb\xbe\x69\xa0\xa7\x2d\x94\x1a\x3c\xe3\xd7\x2d\x66\xf2\x9f\x7c\x41\x81\x52\x08\xec\xe0\x61\xf6\x1b\x47\xf9\xf0\xff\x9b\xcf\xcc\xd9\xc1\xfe\x58\x1e\x8b\xde\x91\x4f\xe6\x0f\x3b\x07\x7b\x88\x41\xdf\x06\x9b\xc1\x5d\x54\xdd\xc7\x90\xce\x2f\x45\xeb\xc4\xc1\x75\x03\xde\xfb\x94\xba\x08\x89\x40\x29\x84\xd9\xc9\x8f\x45\xd6\xb5\xe5\x75\x46\xd5\xdd\xb6\x77\xc5\x09\x65\x8f\x7c\xe2\x2f\x46\x7b\xda\xf6\xac\xfc\x2e\xed\xfb\x96\xfd\xe9\x9c\x47\x32\xfe\x7f\xd2\x58\x9e\x98\xc6\xf2\x0a\x6b\x81\xfe\x92\x31\xf1\x7c\x95\xc7\xf4\x99\x3a\x1d\x7e\x0a\x33\xaf\x84\xf1\xbe\xcc\x3e\xfc\x42\x75\x27\xcf\xf8\x1e\x85\x3f\xad\x24\x8d\xf8\xfe\x2f\x3b\xe1\xc1\x86\x61\x43\x22\x97\xbc\x17\x7d\xe0\x96\xd9\xbb\x1c\xbe\x75\x97\x5a\x2f\xc1\xcd\xad\xf4\x60\xf1\xcf\x01\x17\x6d\x53\x24\xb7\xfe\xaf\x4e\x88\x08\x1e\x66\x57\x3f\x4a\x7d\xfa\x4f\xea\x7b\x2e\xae\x16\x76\xc7\x92\xca\x16\x7f\x6c\x60\xe8\x5e\xd2\xf7\xa1\x31\x6d\x1a\x00\xc5\x84\x67\x16\xb3\x63\xc2\xc8\x9d\x53\xbe\x19\xa5\xe0\x17\xcf\xd4\xd7\xfd\xa7\x94\x81\x81\x52\x08\xdc\xa3\x0e\x42\x75\x94\x8a\x14\xbd\x94\x26\xce\x36\x16\xc7\xeb\x3d\xaf\xf7\xe5\x6d\xd9\xdb\xe2\xe4\xb7\x02\x61\x4a\x0e\xfd\xfd\x9e\x16\x54\xd3\x7e\x2f\xf2\xe3\x18\x7b\x73\xdf\x02\x5f\x7f\xc4\x2a\xff\xa7\xf9\xd4\x82\x87\xd9\x35\x8f\x92\x11\xfe\x37\x99\x9d\x9b\xad\xab\xb5\x8b\xb5\xe5\xb1\x3c\x6a\x6f\xb9\x47\x95\x6c\xcb\xd6\x33\x06\xa7\x8a\xcc\x05\xf9\xc9\x55\x7c\xa5\x34\xbf\xb6\x6b\xee\x69\xd4\x70\x7d\x20\x20\xe8\x53\xfd\x5f\x2f\x43\x62\xf4\x0a\x6b\x7b\xeb\xe3\xe5\x69\x23\xa4\xd6\x43\x8e\x12\x94\xb3\x18\xf6\x2f\xd3\x71\x75\x73\x0b\xb0\xba\xd4\x35\xea\x2d\xcd\xe7\x8f\x67\x78\x13\x2f\xae\x4e\xff\x2f\x8f\xf9\x89\x8f\x54\xfa\xbe\x93\x6d\x95\x5a\x59\x15\x6d\x68\x5c\xe0\x53\xd5\x48\xca\x31\xa1\xca\x17\x69\xab\xf9\x3a\x91\xca\x00\xb9\xc8\x66\x74\xe4\xff\x25\x2c\xf5\x13\xb3\xa6\xe2\xf9\xa7\x65\x99\xf5\xf7\xe2\x94\x87\x94\x24\xcb\x3f\x3d\x15\x3e\x20\x35\xb8\x6e\xfd\x21\x2d\xdf\x39\xfa\xeb\x44\x69\xfd\xc1\xff\x0a\x78\xe7\xc4\x54\x64\x29\x9e\x6e\xb1\xab\x85\x62\x67\xf4\xe3\x8a\xe9\xc2\x5f\x0b\xa7\xfd\x64\x71\x4a\x62\xfb\x56\xff\xc5\x35\x6f\x48\x3d\x7f\xaf\x02\xb3\x80\x47\x0f\x16\x0b\xa3\x8b\x38\x5b\x78\x98\x38\x9b\x1f\x4b\x7a\xcb\x4f\x1a\x1a\xc6\xf1\x22\x9d\xf5\x5e\xa7\x48\xec\x20\xb4\xc3\x3a\x5b\x9f\xc8\xd9\x6e\x18\x72\x8b\x26\x8f\x74\xbd\xa1\x91\x0a\xa1\x82\xc0\x8e\x9e\x23\xf2\x49\x8e\x26\xea\x44\x20\x10\x81\xd2\x88\xf9\x7f\xd9\xa3\x85\xdc\x27\xba\x47\x6d\x2a\x90\x6e\x16\x23\x35\x48\x6c\xd3\x2f\x83\x32\xb3\xaf\xd6\x3c\x97\x99\xf2\xfb\x71\x88\xe7\x6a\x49\x9a\xd0\x7a\x34\xdb\xff\x9d\xee\xff\xff\x93\x6f\x58\xff\x6e\xd0\x8e\x3e\x56\x12\x4a\x9e\x83\x49\x83\x79\x25\x77\xa6\x9c\x59\x93\x84\x37\x6b\x1f\xb6\x56\x2f\xc6\xf9\x34\xd5\x05\x99\x17\x24\xaa\x98\x3d\xdf\x5b\x97\x90\x38\x16\x4c\x41\xe5\x65\xe4\xd3\x2a\xb9\x3d\xe8\x59\x1e\xb1\x15\xe3\x9b\x2a\x18\x7e\x29\xd0\xbe\x33\x54\x6d\x40\xef\xe9\xa7\xfd\x2f\xb6\xbc\x4a\x08\x64\xba\xb6\x55\xfa\x7f\xe6\x26\xc7\xfe\x19\xd5\xc1\xdd\x4e\x93\xac\x2c\x9b\xd3\x42\xa2\x8a\x57\x62\x72\x95\xa0\x4b\xeb\x1d\x4f\x35\x02\xd4\x1e\xa4\x78\x0e\xe0\x69\x47\x9c\x3e\x16\xfa\xe8\x97\xf3\xea\xdd\x10\xac\xa0\x4e\x87\x9d\x90\xcb\x43\x13\x81\xef\xf2\xa6\xc2\x5d\x3e\x6f\x41\xcf\x74\x78\x91\x7a\xfb\x5a\xef\x8e\x85\xae\x1a\xd4\xbd\x6d\xcc\xe6\x0f\xa1\x93\xf7\x2c\x98\x50\x7f\x95\xbc\xb8\x0a\x8d\xf0\x0e\x4b\xb7\x0a\x98\x53\xb3\x6d\xb2\x4f\x7f\x3e\x16\x2a\x62\x44\x19\xf6\x49\xe1\x35\x65\x5c\x9b\x05\x76\x54\xc0\xd3\xd1\xa9\x82\xfb\x5f\x09\x0f\x56\x66\x4f\xf7\x06\xbd\x7e\xee\x4f\x78\x1a\xc4\x55\x3b\x5e\xde\x6b\x4d\x7c\x83\x4f\x27\x5f\x2b\x06\x14\x86\xa9\xa8\x8e\x6b\x6a\x07\x60\xb1\x3c\x0a\x9f\xfa\xa8\x9c\x9a\xde\xd1\x5a\x3f\x7c\x50\x2e\x61\xf1\xef\xda\x2e\x5c\x0a\x71\x47\x0a\x71\x27\xe0\x97\x0e\x0b\x82\x09\x0f\x49\xc2\xf0\x95\xe7\xd0\x79\x24\x84\x36\x95\xde\x90\x3f\xe7\xac\xcf\xc3\xe1\x97\x56\x87\x64\x3c\xfa\x86\x99\x22\x8a\xdb\xb8\xab\xb4\x26\xc9\x01\xd8\xe7\x10\x08\x04\xde\x51\xf3\x81\xa7\x38\xd9\xfe\x5d\xa3\x43\x01\x17\xff\x5d\x33\x07\x4a\x04\xe8\xfe\xbb\x56\x0e\xc2\x41\x06\x49\xe2\x1c\x9f\x09\x9b\xc8\x50\xe6\x78\xaf\xb5\x0e\xcd\xe5\xc7\x6d\xb6\x7d\xdd\x9b\xec\xd9\x4e\xaa\x9b\xe2\xa5\x6a\xc9\x37\x33\x33\xf5\x1a\x4e\xbe\x1b\x70\xf3\xdf\xc5\x05\x49\xe2\x1d\x4f\x2b\xda\xd5\xba\x37\x7d\xfb\x5b\xf7\x2b\x49\xfc\xc1\x1f\x2f\xe5\x3f\x65\xf7\x64\x48\xf6\x31\x56\xcc\xac\x5a\x71\xdd\x2c\x1b\x17\x9d\xf9\x27\xed\x49\x71\x41\x92\x0c\xc7\xd3\x8a\x0d\x12\x12\xd8\x3b\x7d\x9b\x3f\xad\xa0\xa7\x30\x91\x11\xb0\xca\x5e\xf6\x82\x32\xa0\x27\x4d\x70\x6a\xc5\xe2\x1a\xa7\xbc\x8b\xfd\x3f\x69\x4f\x8a\x0b\x92\xc4\x3a\x9e\xf6\x4b\xcc\xca\x20\x4f\x6b\xc2\xf6\x10\xd0\x7a\x51\x2b\x98\x46\xdc\xbc\x96\x4d\xe0\x36\x87\x9b\x8c\xda\x2f\x7e\x73\xc7\x56\xf6\xa9\x00\xae\x7f\x17\x17\x24\x49\x1c\x00\x49\xe1\xf4\x5c\xfc\x77\x1d\x59\x0a\xa7\xe7\x3e\xf2\xdf\x75\xe4\x20\x6c\x10\x1b\x11\x24\x89\x1d\x78\xac\xd4\x91\x25\x84\x8d\x9d\xd9\xd3\x58\x4f\xa8\x5f\x5d\xad\x2a\xd2\x16\xfb\x46\xfd\x1a\x67\x16\x49\x22\x73\xff\x7a\x6c\x19\x62\xd4\xf9\xe5\x71\xf5\xa9\x59\x70\x7b\x4f\x6e\x2d\x25\x5e\xf7\x7e\x3d\x1b\xbb\x1b\xcd\xbe\x21\xfb\x51\xb5\x80\xff\xf2\xfc\xa2\xe1\x98\xd6\x7d\xe9\x53\x01\x41\xd8\xff\x2e\x67\x90\xe4\x61\xd8\xb1\xbc\xb5\x64\xab\x2a\x59\x1e\xd7\x78\xcc\x35\xda\x8c\x0d\x8c\xfd\xaf\x4c\xf3\x29\xde\x3e\xd8\xcb\x1e\xf6\xb5\xfd\x7e\x53\x35\xd1\xee\xec\xb1\xd0\x5d\x79\xc1\xf0\x52\x7a\x3d\x02\x55\x35\x1c\xcf\xd3\x8b\x1e\x57\xd6\x85\x08\x04\x35\x2f\xad\x3c\x5e\xb6\xf0\x26\x2a\xba\x49\x76\xeb\x58\x68\x88\xd3\xb5\xef\xa1\x72\x81\xb8\x77\xdf\x9c\xb9\x2b\x45\x67\x9e\xb2\x94\x52\x97\x30\x98\xc9\x25\xa1\x3c\xea\x16\xf7\x24\x2f\xe3\xce\xb1\x50\x49\x4f\x9e\x4a\xcf\x81\x73\xd7\xe7\xc8\xbe\x53\xa5\xce\xb2\xa9\xf1\x56\x8a\xbc\x7c\xee\x48\x5d\xb1\x85\x9d\x47\x60\xc6\x28\x8f\x73\x2c\x74\xb0\x3a\x4e\xbd\xdb\xaf\x38\x84\x44\xbf\xb3\x6c\x3a\xb3\xd5\x9b\x2a\x3b\xfc\x33\x0f\x7b\xd7\xed\x24\xb9\x6c\xc6\x91\xb3\xb7\xb5\x8e\x85\x2a\x95\x2c\x1c\xc6\x1c\x46\xd1\xb2\x2a\x4e\x64\xe0\x43\xd3\xdb\x11\xb5\x13\x1b\xfc\x19\x73\xc2\x2a\x46\x7a\x33\x75\x0f\x36\x02\x8e\x85\x1e\xaa\xd4\x12\xf7\x38\x93\x8f\xed\x5f\x49\x53\xb2\x8f\x6c\x2d\xd5\x9e\xce\x8c\x18\xdf\xe3\x27\x89\xf0\xcc\x22\x7d\x16\xfa\x8b\xf7\x58\xa8\x73\xc1\xb8\x4b\x64\xa7\xee\x93\xba\x8b\x84\xfb\x66\xf6\xc2\x9d\x7a\xa9\xa3\x5d\xad\x03\x67\x6f\x09\x94\xfc\x0e\x37\xcd\xbc\x33\xf6\xbf\x87\x70\x52\xab\x62\x3c\x04\x99\x27\xbf\x7d\x68\xb5\x64\x2e\x07\x3c\xbf\xec\x2d\xf8\x23\xc8\x6b\x85\xb6\xe1\x74\xbd\xb9\x07\x71\xd8\xc5\xe1\x26\xa9\xb5\x7a\xc2\x63\xa1\xdf\x05\x7a\xab\x74\xed\x4c\x25\xcc\x36\x3f\x2c\xa5\xe4\x64\x06\x15\x76\x55\x12\xdc\xce\x6b\x11\x2a\x11\x66\x77\xb2\x9d\xa9\x3c\x1e\x3a\x66\x3b\xa3\xfb\x63\x5a\xf4\x45\xd8\x86\x7b\x7b\x9d\xea\x95\x62\x0b\x3a\xb2\xd6\x1b\x89\x21\x2e\xfe\xd3\x0e\xfd\x49\xf7\x3f\x74\x1d\x0b\x9d\xfa\xf6\x38\xb3\x7b\xf9\x77\xb4\xf3\x88\x35\x76\xd4\xad\x75\x23\xed\x67\x03\x88\xcf\x5f\x27\x0b\xc9\x6a\xb3\x85\x29\x9e\x44\xa9\x1c\x0b\xad\xd2\xfa\xb9\xff\xcd\x8f\x1f\x42\x19\x8f\xeb\xb3\x90\x47\x9d\x36\x29\xe2\x12\xb0\x3a\x90\xff\xce\xf1\xec\x1a\xfb\x0a\xa2\x94\xe5\x58\x28\x1d\x73\xc7\xb0\x40\x61\x7d\xc2\xed\x33\x56\x71\x2f\xac\xec\x45\xf4\xac\x07\x79\x1c\x72\xaf\x48\x67\xdf\xae\x8f\xb5\x41\x66\x5f\x38\x16\x5a\x3f\x15\x9b\x76\x96\x82\xd5\x8d\xd1\xbe\x93\x5b\xa5\x7a\xc8\xfb\x72\x8f\x9b\x92\x6e\x7f\x1e\x0b\x91\x18\x71\x71\x26\xc0\xb6\x7f\x2c\xf4\xfc\x1b\x62\x4f\x46\xd7\xc0\x39\x53\xb5\x48\xb3\x04\xee\xac\x8f\x56\x3e\xd6\x2e\x3e\xab\x42\x4f\x49\x66\x34\x8a\xcf\xf3\x13\x76\x04\x54\x03\xff\xae\x55\x83\x24\x0f\x03\xc2\x22\x11\xd8\xc3\xec\x3a\x17\x11\xc8\xc0\x69\x6c\xe8\x3b\x16\x83\x74\x48\x5d\x11\x41\xab\xdb\xdb\x1f\xc4\x43\x2d\x51\xba\x07\xca\xe2\x22\x0e\xd7\x5a\xaf\x9e\x21\x16\xfc\xed\xcb\x34\x20\xfc\xe3\x26\x04\x02\x08\x04\x35\x82\xb2\x9c\x48\x42\x1e\xf1\xfe\x85\xe7\xd1\x0b\x41\x01\x11\xd1\x7a\x61\xf2\xbf\x7f\x72\x49\x3d\x75\xf9\x89\x63\x33\x93\x02\x62\x39\x9b\x87\x7c\x7d\x2b\xa5\x34\x12\x89\x4e\xa8\xa4\xa5\xff\xb6\xa0\xc4\x19\x38\xd5\x7b\x2b\x6b\xde\x62\xd5\xb0\x69\xaa\xe5\x85\xf0\x97\x9f\x0a\xb3\xcf\xbc\xf1\x44\x2e\x05\x59\x40\x20\x80\x84\x49\xc0\x42\x27\xdc\x19\x24\xca\x0d\xa8\xca\x9d\x56\x2f\x9f\x18\xdf\x95\x4e\xd7\x7e\xce\xf6\x36\x31\x6c\xab\x93\xee\xdc\xce\x23\x4a\x71\xb9\xf7\x92\x10\x08\x60\xc1\x24\x60\xa3\x13\xb8\x1e\xf5\x92\x98\x2f\xd2\x5c\x4d\x35\x76\x69\x7f\x43\x5c\x22\x43\xc7\xd2\xdf\xb3\xf3\x3b\x25\x84\x6f\x4a\x7a\xd8\x01\xf1\xc1\x11\x02\x01\x6c\x98\x04\x1c\x74\x82\x4b\xe3\x20\xc5\x63\x53\xf7\x1e\x2d\x35\xa6\x28\x82\xfa\xa8\x0f\xd1\x03\x2e\x48\xe7\xbb\x59\xd3\x6b\xdb\x03\x2b\x79\x49\x8b\x47\xcf\x01\x07\x26\x01\x17\x9d\x40\xcd\x28\xac\x97\xf7\x1d\xc7\x62\xb9\xc5\xd1\x8c\x2d\xeb\x19\xa7\x41\x74\xba\x34\x25\xc2\x7b\x55\x4b\xf2\xe9\xd5\xca\xcc\x71\x1c\x08\x04\x70\x61\x12\x00\x74\x82\x7d\xf3\x88\xee\x05\x92\x42\xd3\x5a\xf3\x0c\x05\xcb\x59\x0b\xec\x0a\x4d\xbe\x02\x93\x14\x33\x45\x28\x0e\xb0\x7b\x14\x7f\xf1\x88\x00\xc0\x24\xa0\xd0\x09\x39\x0e\xd6\xe4\xef\x07\x1c\x92\xa9\x0c\x21\xe1\xf4\xfc\xd3\xf7\xf4\xa3\xee\xf9\xd7\x15\xdf\xde\x70\xff\x62\xe5\x39\x2f\x86\x6f\x02\x81\x00\x0a\x1e\xe1\x1f\xf1\x9c\x34\xce\xfc\x57\x3c\x78\xe8\xc5\x49\xea\x08\x2c\xac\xfa\xe2\xd1\xc7\xa0\x9a\x94\xfb\x3d\x7a\x12\x3b\x45\xe2\xbc\x44\x9d\x22\xd6\x7a\xb0\x96\xc6\xf6\xed\x8b\x01\x5a\x10\x08\xe0\xc1\xac\xf0\x29\x74\x02\xe9\x27\x1a\x0e\xab\x71\xbf\x11\x57\xab\x55\x5d\xb9\xc1\xfb\x1e\x9d\x1b\x76\xf8\xda\xee\xfe\xd7\x36\x24\xdf\x3a\xba\xef\xad\x1c\x89\xe7\x14\x4c\x02\x3e\x3a\x41\x97\xf5\xf6\x0a\x61\x87\xe2\x9d\x1b\x8b\xd0\xb9\xa9\x16\xc5\xec\xdf\x4f\x48\x51\x9d\x5a\x0f\xec\x82\x99\x55\x17\xc6\xda\x22\x25\x20\x10\xc0\x87\x49\x20\x40\x27\x94\x50\xcc\xf0\x5a\xa3\xe2\x34\x09\x1e\x07\x5c\xe1\xb0\x7e\x85\xb3\x98\xae\xe5\x39\xf3\x9c\xfd\x20\xe5\x33\x74\x09\x74\xd6\x36\x87\x40\x80\x00\x26\xe1\x34\x3a\x41\x01\xaf\xd3\xdf\x57\xf1\xb6\x7e\xda\x1b\x8d\xb4\x54\x9f\x5e\x12\x0d\xf2\x3b\xcb\xed\xdb\x8d\x01\xd6\x8d\xf3\xa7\x9d\x68\x29\x38\x20\x10\x38\x0d\x93\x70\x06\x9d\x70\x23\x97\x88\x82\x9c\x26\xa5\x4e\x5d\xf1\xbc\x94\xde\x3d\x6a\x4b\x77\xae\xf2\xb3\xab\x16\x86\x87\x92\x02\x4e\x34\x81\xdc\x26\x77\x20\x10\x38\x03\x93\x40\x88\x4e\x68\x22\x77\xda\x69\xa5\x3c\x35\xcf\xd6\x6d\x6b\xd1\x49\x91\x1e\x6e\x22\x7f\x4a\xaf\xfd\x3e\xd5\x86\xc7\xc7\xe9\xeb\x2e\xa1\x69\x3a\x10\x08\x10\xc2\x24\x10\xa1\x13\x22\x18\x6f\x3c\xa0\xbf\x1b\x44\x4d\x3c\x25\x60\x25\x8d\x0d\xf6\x54\xfb\x5c\xde\xcb\x04\xe8\x44\x17\x1d\xb6\xde\xcf\x47\xfe\x3a\x0d\x81\x00\xd1\xdf\x89\xe7\xa4\x37\xef\x7f\xc5\x43\x8c\x5e\x1c\xb6\xc7\xa5\xb1\xe7\xb1\x0d\x3a\x22\x56\x32\x53\xed\x03\xaf\x05\xc5\x33\x9d\x71\x2d\x9d\x52\x14\x01\x5a\x2a\x8b\x78\x82\x58\xf0\x21\x10\x20\x86\x59\xe1\xb3\xe8\x04\x8e\x9b\xa8\xf7\xfb\xa2\x06\x7e\x3d\x85\x65\xa6\x93\x50\xd2\xec\x74\xb7\x9a\xab\x59\x62\x43\x6f\x88\xb7\x5f\xd6\x9c\x5a\xbd\x3a\x04\x02\x67\x61\x12\x48\xd0\x09\x79\x52\x29\x72\xea\xf2\x1f\x1e\x63\xdb\xd4\x26\x2d\xb3\x06\x2e\xae\x79\x64\x59\x6b\x31\xd6\x9a\x10\x20\x2f\x94\x70\x5f\x4d\xb1\x85\x40\x80\x04\x26\x81\x14\x9d\x20\x2b\xef\xe4\xbf\x83\xab\x96\x2f\x27\xe4\xac\xb9\xf7\xf2\x16\x56\x48\x29\x44\xfb\x20\x11\xb1\x65\x25\xf4\x83\x68\x98\x71\x93\x19\x02\x01\x52\x98\x04\x32\x74\x82\x32\xeb\x5e\xfa\xaf\xaf\x1a\x9d\x58\xc8\x03\x9d\xa1\xd5\xc1\xe6\x42\xda\x51\xfe\x51\x52\x01\x94\x48\xf3\x41\x7f\x50\xbe\x3f\x3b\x04\x02\x64\x30\x09\xe4\xe8\x84\x03\x62\xe5\x30\xe7\x1c\xaa\xd3\x65\x6e\x75\xf6\x16\x5f\xde\x31\xe3\x13\x17\x36\x0b\xfe\xf2\x94\x11\x25\xd8\xe5\x9d\x20\x0b\xe5\x82\x40\x80\x1c\x26\x81\x02\x9d\x60\x6a\xcf\xd3\x80\xe0\x30\x17\x2c\x35\x92\xcc\x25\xc4\xd6\x8f\xdc\xe7\xb2\xc4\x26\xaa\x33\x06\x2e\x45\x22\x04\xd5\x6e\xaf\x6a\x40\x20\x40\x01\x93\x40\x89\x4e\x98\x76\xe8\x5c\x67\xd1\xba\xc0\xe2\xd8\xa7\x51\x03\x11\x5b\x14\xa8\x30\x6c\x51\x5f\xa1\xf2\x60\x7e\x33\xa8\xbf\x5b\x22\x4f\x42\x08\x81\x00\x25\x3c\x42\x23\xf0\xef\xe6\xa2\xff\x15\x0f\x15\x15\x7a\x79\xf0\x7f\xc7\x32\x92\x87\x14\x34\xe5\x2e\x16\x6b\x4a\xd0\xae\xca\xea\x44\x53\x4d\x71\xf9\xff\x94\xe4\xd0\x75\x1a\x69\x2a\xb9\x4b\x07\x81\x00\x15\xcc\x1a\x53\x81\xe8\x88\x2d\x47\xb5\x71\xcf\x67\x2a\x22\x62\xb5\x6c\xa2\x6c\x31\x6a\xa7\xc3\x66\x91\x3d\x8c\xd7\x04\xb6\xb7\x33\x23\xd2\x98\x95\x75\xe8\x21\x10\x00\xe1\x22\xa8\xd1\x11\xce\x23\xc3\xcf\xaa\x06\x8a\x62\xfd\x92\xac\xe2\x84\xab\x1b\x65\xde\xe3\xf8\x12\x3a\x77\x0c\xee\xab\xac\xad\x3f\xa7\x5e\x6c\xa6\x80\x40\x80\x1a\x2e\xe2\x1c\x3a\xe2\x55\xfe\x56\x6e\x4a\x9e\xf1\x08\x35\x75\xfc\x0d\xb1\xc1\xcc\xdb\x4a\xc5\x17\xee\x92\x8e\x34\xeb\x14\x70\x5e\x14\x52\xf7\x4a\xb9\x00\x81\xc0\x39\xb8\x08\x1a\x74\xc4\x79\x05\x91\x2e\x88\xf4\xfb\x05\xdf\x91\x72\x3d\xdc\x57\xab\x5f\xb9\x69\x9b\xd3\x04\x33\x2e\x34\xbf\x5a\xd0\xb8\xa8\x40\x55\x4a\x09\x81\x00\x0d\x5c\x04\x2d\x3a\x42\xe4\xe9\x95\x0d\xad\x11\xf9\x3c\x72\xe6\x7e\xc0\xf2\x8b\xe6\x94\x96\x3b\xa9\xaf\xa7\xf5\x0b\xcf\x26\xa6\x99\x37\xac\xbb\xf2\x2e\x10\x08\xd0\xc2\x45\xd0\xa1\x23\x04\x5e\x94\xad\xf4\x18\x13\xbc\xf5\x93\x77\xd2\x3c\xf4\x35\x8f\x7e\x98\xd5\x54\x5f\xf2\xde\x8f\xd4\x66\x70\x40\x8e\x7a\x8e\xea\xe8\x05\x44\x07\x17\x41\x8f\x8e\x10\x5f\xe6\xd9\x5b\x14\x43\xf2\x7b\x99\xe4\x5c\x91\x3c\xeb\x5e\xe9\x4e\x52\xe5\x53\x3f\x15\xfd\x48\x71\x37\x63\xc7\xe8\x49\xf4\x5d\x08\x04\xe8\xff\x4e\x44\x27\xad\xd2\xfe\x88\x88\x01\xbd\x3c\xc3\xe1\x0f\xe3\x5b\x50\xc3\x7d\xb1\x19\x03\x95\x71\x9b\xa4\xb8\x7e\xdb\xc9\x6a\xca\x4f\xdf\xd2\xf1\x6d\xee\xb3\xf8\xde\x58\x44\x41\x20\xc0\x00\xb7\xca\xe7\xd1\x11\xa5\xf8\x35\xc0\xa4\xd1\x55\xd3\x8f\xa4\x59\x32\x4e\xf8\xcf\x7d\x14\x1a\x8c\x78\xd6\x76\xcb\x79\x52\xf9\xe8\xb9\x34\x0f\x78\x8f\x46\xd7\xf3\x70\x11\x17\x30\x5e\xa4\x73\x99\x03\x35\x02\x37\x66\x5a\x88\xb5\x6f\xf9\x46\x9e\x75\x30\x0c\x2d\x3d\x3f\x65\x64\x8b\x23\xbd\x42\x5b\x6e\xc6\x05\x18\x42\x20\x70\x01\x2e\x82\x11\x1d\x01\x94\x7c\x71\xfe\x62\x15\xeb\x33\x8f\x52\x79\x50\xac\xfb\x30\xfb\xaa\xae\x64\xc9\xc4\x94\xba\xa8\xd2\x1c\x99\xd1\x07\xa9\xa8\xa3\x49\x22\x23\x5c\x04\x13\x3a\x22\xed\x77\x73\x65\xd2\x05\xac\xb1\xdb\xf2\xc6\x9c\x92\xfe\x93\x1c\xef\x36\x81\x74\xac\xfb\x2d\x03\x9b\x9a\xd5\x84\x05\x0e\xe9\xb2\x10\x08\x30\xc1\x45\x30\xa3\x23\x16\x47\x15\x2a\x19\xef\xfa\x98\x67\xe2\x75\x8d\xd9\x8c\x87\x2b\xaa\x37\xc9\x80\x1c\x0b\x9b\x31\x72\xdd\x5b\x49\x6d\x42\x31\x9c\x10\x08\x30\xc3\x45\xb0\xa0\x23\x7a\xde\xe1\x81\x63\x2a\x56\x63\x1d\x94\x41\x92\x36\xbb\x7d\xce\x8b\xa5\xea\xeb\xc2\x62\x32\xde\x5e\xb9\x0e\xb5\x9e\xd4\x86\x47\x3a\x65\x81\x8b\x60\x45\x47\xf0\x63\xeb\x19\xdd\x8f\x70\xf7\x54\x1f\x24\x8b\x31\xc4\x1e\x8f\x59\x21\xb2\x13\xa0\x47\xe2\x29\xd4\xa6\x9e\x95\xb3\xa2\x75\x3c\x7a\xdc\xac\x7f\x27\xa2\x93\xf6\x2f\xfe\x88\x88\x0d\xbd\x3c\x84\xef\xe9\x77\xb0\x9d\x88\xde\xe2\x35\xbe\xbb\x1b\x63\x4d\x7b\xc3\xa2\xf1\x7a\xab\x74\xf1\x50\x12\x93\xc3\x44\xca\xcb\xd7\x0f\x94\x20\x10\x60\x83\x5b\xe5\x8b\x18\x13\x88\xbc\x58\xbe\xc8\xdb\x43\x22\xb1\x4b\x7a\x35\xf7\x8c\x02\x3f\x4d\x85\xfc\x34\x6b\xdb\x0d\xbe\x8c\xec\x31\xd9\x7a\xda\xf6\xea\x2a\x04\x02\x17\xe1\x22\xd8\xd1\x11\x1b\xbe\x11\xde\x35\x7e\xad\x7d\x8c\x44\x6f\xa0\x35\xe2\xd3\xab\x41\xb3\xf2\xe3\xbc\x22\xf6\x0c\xee\x8d\xb6\x0f\x1d\x55\xbc\x8f\x10\xec\x70\x11\x97\xd0\x11\x6f\xe6\x92\xe5\x90\xaf\x63\x96\x75\xa2\xd9\xd3\x2b\xbd\xf5\xb0\xcf\xb2\x09\x8f\xd8\x0d\x9d\x31\x49\x77\x7f\xb1\xcf\xa7\xfe\x8c\x1a\x02\x81\x4b\x70\x11\x1c\xe8\x08\xbd\xf3\x8a\x4c\x73\xae\x4a\x09\xe6\x17\xfb\xd4\x9b\xa3\x09\x49\x9d\xf3\x7e\x23\xe2\xf7\x89\x93\x38\x47\x26\xd3\x4d\xf0\xca\x84\x21\x10\xe0\x80\x8b\xe0\x44\x47\xb8\x27\x57\x3c\xa2\x28\x2a\xae\x2d\x8d\xdd\x12\x60\x97\xad\x7b\x12\x84\xc7\xc8\xaa\xa0\xaf\x87\x6a\xdd\x26\x59\x0e\x8b\xd2\x00\x21\x10\xe0\x84\x8b\xe0\x42\x47\x8c\xb2\xd4\x32\xd0\x34\x57\x2b\x2a\xc4\x07\x5d\x23\xc8\xe3\x71\xc1\x9f\xcc\xba\xf1\xe6\x47\x84\xae\xb4\xf3\x8a\xc6\x40\xbe\x94\x24\x04\x02\x5c\x70\x11\xdc\xe8\x08\xf3\x78\xfc\x6f\xc3\x90\x2c\xc1\x15\xa9\x3a\x01\xd4\x06\xc7\x72\x58\xab\x56\xd9\x41\xd1\x3b\xc9\x70\xdd\x09\x2e\xfc\x8d\x64\x63\x08\x04\xb8\xff\x4e\x44\x27\xed\xec\xfd\x11\x11\x0f\x7a\x79\x14\x29\xd3\xc6\xe6\xb3\xc2\xc9\x05\x02\xb1\x99\x52\xae\x3d\xa0\xbc\xb4\xd8\x47\xca\x01\x68\x90\xe6\x13\x44\xa1\xb4\xef\xcc\x2b\x40\x20\xc0\x03\xb7\xca\xbc\xe8\x88\x28\x26\x46\xc6\xf2\xbb\x28\x1b\xad\x5f\x29\x2c\xdc\xbe\xe0\xd0\xeb\xeb\xdd\x83\x1f\x97\x73\x07\xaa\xb4\x08\x17\xce\x66\xfd\xc2\x83\x40\x80\x17\x2e\x82\x0f\x1d\xb1\xc9\x64\xe2\xf2\xe8\xf3\x0a\x63\x11\x7e\xa9\x54\x82\x97\xe1\x80\xf2\xbd\xb9\xd4\xb3\x06\x26\x3c\xd1\x01\xd9\x75\xd1\x1d\xdf\x98\x20\x10\xe0\x83\x8b\xb8\x8c\x8e\xa8\x7f\x9d\x21\xee\x58\xcf\xd9\xd1\x19\x21\x0d\x96\x3e\x37\xd4\xf2\xd2\x45\x69\xe0\xa8\xcf\x5a\x7f\x69\xcc\xbd\x97\x09\xcc\x1d\xbd\xb2\x2f\xc3\x45\xf0\xa3\x23\xb4\x37\x76\xb3\x85\xa8\x6d\x79\xb0\x5a\xf9\xba\xb3\xbb\xe7\x7b\xbd\x77\xb4\x07\x38\xb4\xdf\xdb\x9a\x13\x7a\xf2\x4e\xe3\x47\xe9\x42\x20\xc0\x0f\x17\x21\x80\x8e\xb8\xa6\xd4\x9a\x7c\xb6\x78\x84\x29\x16\x49\xf5\xa4\x24\x23\x64\x8a\xc4\xbd\xbf\xee\x77\xc2\x16\x91\x94\x61\xd2\xb9\x3c\xf9\x66\x6d\x08\x04\x04\xe0\x22\x04\xd1\x11\x3e\x81\x85\x99\xa2\xdf\x7f\xb1\x2a\xb1\x9f\x57\x48\x1e\xbc\x0c\xfa\x0b\xdc\x6a\x7c\x95\x73\xae\xd3\x6a\x48\x46\xb3\x85\x16\xe1\x08\x81\x80\x20\x5c\x84\x10\x3a\x22\xcc\xa9\xc6\x0e\xca\x53\x0e\x3e\xd7\x8e\xd3\xde\xa2\x97\xb8\x80\x63\x52\xba\x54\x31\xb4\xc1\x64\x9b\x42\x6f\x35\xe5\x5f\x64\x02\x81\x80\xd0\xdf\x89\xe8\xa4\x3d\xef\x3f\x22\x12\x46\x2f\x0f\x4e\xd9\x88\xbf\x1d\x81\x9f\x97\x8f\x03\x47\xbf\x86\xef\xcf\x62\xea\xca\x66\xe4\x25\x82\x76\xd5\x39\x72\xb5\x7a\x9a\xda\x5e\x21\x08\x04\x84\xe1\x56\x59\x04\x63\xc7\xaf\x93\x13\x17\xe0\x4f\x6c\x62\x2e\x9f\x44\x66\xee\xad\xa6\x0c\x0f\x12\x93\xb8\x26\x17\x55\x11\x09\xdf\x18\xda\xef\x95\x12\x83\x40\x40\x04\x2e\xe2\x0a\x3a\xc2\xea\xb7\x4d\x8b\x7c\x05\xc3\x73\xb5\xb5\xf0\x33\xc1\xca\x9a\x2b\x6f\xce\x5c\x8a\x0a\x0a\x8d\x0a\xbe\x56\x4c\x26\xc3\x3f\xba\x8a\x03\x81\xc0\x15\xb8\x88\xab\xe8\x08\x87\x1f\x66\x8c\xa2\x87\x9e\x42\xca\xdf\xbe\xe9\xee\x9a\xbe\xfb\xf1\xe4\x79\xd0\x22\x81\x91\x94\xea\x67\xe2\x3e\x7b\xcb\xa6\x07\x47\xd3\xb9\xab\x70\x11\xa2\xe8\x88\x50\xae\x67\xa5\x5f\x17\x1e\xc7\x89\x0c\xe8\xd0\x66\x93\xcf\x23\x6f\xe6\xde\xa4\x56\x4b\x1a\x99\xd8\xa3\x22\xe9\x78\x89\xa7\x77\x34\xa0\x89\xc2\x45\x88\xa1\x23\x6a\x99\xcc\xdf\xe2\x93\xe8\x93\x14\x58\xd9\x3f\xba\x20\x8b\x7f\x9d\x9a\x44\x87\xb7\xd3\x8b\xc7\xdc\xbb\x4d\x45\x60\xd1\x2f\x95\x0a\x02\x01\x31\xb8\x08\x71\x74\x04\x91\x4f\x4f\xe8\xd0\xa9\x2c\x2e\xca\x92\xaf\xdb\x61\x58\x11\x16\x2f\x92\xc8\x43\xb2\x4d\x27\xae\xb3\x2a\xbd\x0f\x10\xf6\x1c\x3a\x7a\x16\xe2\x70\x11\xd7\xd0\x11\x9f\x49\x76\xbf\xd4\x0a\x7c\x2f\x79\x6b\xb2\xd4\x5e\x76\xfa\x43\x0b\x63\xb9\xe4\x5a\x37\x6b\xcd\x4d\x6f\xbc\x45\x6a\xce\x2f\xe5\xca\x10\x08\x5c\x83\x87\xf8\xe7\x50\xee\xa4\xf3\x4b\x8c\x43\xb9\x5b\x91\x3c\x39\x67\x19\x78\xfa\x99\xae\x4d\xe4\xca\xfa\x96\x13\x5a\xd7\x3e\xb5\x88\x75\xad\xd3\x50\xa5\xee\x8e\x49\x4b\xad\x9c\x3e\x16\x2a\x3f\xed\xd9\x1b\xf4\xda\xa3\xe6\xba\xee\xa5\xfc\xa7\x22\xb5\x32\x97\xec\x1b\xaa\xaf\x68\x73\x3f\xd6\xc8\xe1\x3c\x25\xfb\x24\x79\xf9\x58\xa8\xf7\xa6\x3f\x70\x4f\x32\x13\x8a\x97\x7b\xc6\x10\x6f\xb9\xee\x3c\x92\xee\x7e\xdd\x96\x6e\x5b\xeb\xec\x4e\x3e\xce\x6a\x78\x16\xc7\xb1\xd0\xbd\x96\x09\x49\x5d\xb6\x16\xbe\xa4\xcb\xd7\x27\xbe\x5f\x37\x55\xd9\x7e\x44\xcd\x32\x38\x98\x89\xc0\x23\x29\xf8\x2a\x59\xea\xd6\x7e\x2c\x94\xff\x8c\x67\x40\x8e\xc0\x29\x45\x04\x19\x79\x32\x16\xd1\xc5\x74\x9c\xab\x73\xa1\xc9\xfa\xfa\xde\x9d\x43\xb1\xf3\x82\xe5\x62\xc4\xc7\x42\x6d\xda\x98\x0b\x3f\x3b\xf9\xdd\x75\xc8\x5c\xe6\x52\x95\xa2\x28\xa7\xb7\xf1\x34\xa1\x5b\xbc\x3d\xc9\xd5\x92\xe0\x42\xea\xf8\xe2\xf8\xd1\x6c\x81\x77\xe8\xfb\xdc\x6f\xcb\x7e\x6c\x9e\x04\xd4\xaa\x8e\xa6\x92\x34\x26\x6f\x2d\x6a\x5f\xad\xdd\xf8\x99\x4c\xf3\x91\x32\xc6\xb1\xf6\x58\x28\x8f\xee\x9d\x4a\x7b\x31\x6c\x3b\xd7\xba\xd1\xfb\xb5\xda\xac\x44\x51\xc9\x61\xfa\xfa\xb5\x2f\xb9\x75\xce\x9e\xfe\x7d\xce\x2f\xa6\x3e\xe0\x9f\x91\xec\xa4\x56\xfd\x33\x92\x49\xa0\x77\x8a\x36\x1f\x43\xff\xec\x92\xee\xa5\xd8\x9e\x26\xbb\xc2\x6a\xc1\xb1\xd4\x1b\x8d\x85\x8c\x4d\x3c\xb1\xf1\xdb\x11\x9d\xaf\xf9\xe5\xc8\x20\x10\x90\x80\xdb\xef\x24\xd1\x11\x9d\x65\x97\x43\x92\xb4\x42\xab\xa5\xfa\xef\x28\xdf\x54\xf6\x17\x66\xbd\x86\xf5\xda\x81\xfc\x93\xbf\x98\x62\xd2\xe1\xc5\x82\x54\x67\x08\x04\x24\xe1\x22\xa4\xd0\x11\x5e\xcf\x25\xa3\xd3\xeb\xa7\x0d\x9a\x66\x4c\xa3\xe8\x52\xc6\x96\xf6\x51\xc5\x2a\xf4\x45\xd1\xa1\xa3\x85\x4c\xa3\xfc\x77\x66\x04\x21\x10\x90\x82\x8b\x90\xc6\xd8\xa3\xaa\x71\xfe\xa4\x3c\x24\x62\x13\x59\x36\x1a\xd7\xe5\x98\xbf\x42\x79\x5d\x69\xa2\x5b\xf9\x21\x7e\x57\xbd\xf1\x5b\x42\x11\x13\x55\x08\x04\xa4\xe1\x22\x64\xd0\x11\x54\x29\x3c\x76\xaa\x2e\x35\x0b\x84\x0f\x3d\x36\xe9\x83\xae\x4c\xb9\x0d\x74\x70\x2e\x71\x19\xf0\xcf\x75\x5f\x73\xf6\x3b\xed\x8f\x84\x40\x40\x06\x2e\x42\x16\x1d\x11\x2c\x8e\x1f\x3b\x71\xf3\x43\x0e\xf4\x45\x0b\xff\xda\x70\x40\x91\xa8\x0d\x72\x87\x26\xfd\x8a\xda\x3e\x65\x42\x2d\x2b\xff\x1d\x51\x08\x04\x64\xe1\x22\xae\xa3\x23\x56\x4d\x9f\x30\x92\x69\xef\xa9\x77\xd2\x87\xeb\x10\xdb\xbd\xd2\x9d\x4d\x8d\x8b\x2f\xcd\x67\x4d\x38\xfb\x8e\x41\x48\x76\x29\xce\x1c\x02\x81\xeb\x70\x11\x72\xe8\x88\xb7\x24\x6f\xb1\xb3\x33\xe7\xaa\xdf\x2f\xdf\xc7\x3d\xad\x33\x71\xd0\xf8\xc8\x5b\x5f\x50\x6c\x33\x72\xec\x5d\xd0\xba\x55\xad\x9a\x35\x04\x02\x72\x7f\x37\x1d\x38\x69\xbc\xf9\x23\x22\x79\xf4\xf2\x88\x0e\x5c\xe4\xbf\xed\x79\x31\x1e\xb1\x67\xf5\x66\x90\xb9\x5e\xf8\x34\xa4\xbd\x9f\xaf\xdf\x22\xe8\x6b\xa5\xdf\x44\x48\xfc\xe0\xa8\xfb\xc9\xc3\xad\xb2\x02\x3a\x42\x63\xed\x61\x9e\xa7\x64\x86\xd5\x74\x18\x33\xf6\xd9\x94\x75\x3f\x48\xb7\x83\x63\x18\x14\x55\x63\x70\x89\xdb\x5f\x18\x8f\x96\x87\x40\x40\x01\x2e\x42\x11\x1d\xd1\xbd\x16\x63\x80\x3c\xd7\xd4\x79\xa3\x0a\xd5\xfb\x80\x79\x49\x83\xac\x7a\xd6\xf3\xb0\x59\xe3\xb5\x3d\x47\x75\xa2\x70\x60\x00\x3e\x04\x02\x8a\x70\x11\x4a\x18\xcb\xeb\x86\x0b\xd7\xb1\x6f\x38\xb9\x2b\xe1\x5f\x68\x29\xfe\xee\xdb\xcc\xd1\x7c\xcf\xbb\xfd\x7b\xf4\xfd\x68\xde\xbe\xe2\xf7\xe4\xfe\xb8\x10\x08\x28\xc1\x45\x28\xa3\x23\x1a\x52\x69\xfb\x76\xdb\x86\xf1\x7f\x9b\x17\x90\xf8\x32\x2c\x63\x75\x2b\x6a\xd4\x7e\x72\x8f\xf1\x13\x1f\x8e\x75\xa4\x25\x19\x56\x81\x40\x40\x19\x2e\x42\x05\xa3\xfb\x09\x7f\x2f\xb2\xf2\x6c\xd0\x01\xa9\x44\xbf\x77\x29\xad\x30\x35\xbf\x4c\xc9\x36\x7b\x23\x65\x23\xbf\x54\x70\xda\x2c\x10\xa2\x80\x40\x40\x05\x2e\x42\x15\x1d\xf1\xec\xb3\x09\xb2\x41\x84\x8a\x2b\xd8\x7d\xc5\x75\xe6\x30\x27\x24\x45\xf2\x93\x23\x27\xce\x66\x48\x44\x52\x89\x3a\x67\x0c\xc3\x1d\x08\x04\x54\xe1\x22\x6e\xa0\x23\xd6\xcf\x1b\x04\xad\x58\xcf\xbf\x2e\xf9\x71\xeb\xe5\xc4\xb5\x18\x94\xec\xa8\x46\xd3\x2c\xcd\xc0\x05\xf2\xc1\xfe\xdb\x55\xd2\xe1\x7c\x10\x08\xdc\xf8\x3b\x11\x9d\xf4\x26\xfe\x23\x22\x35\xf4\xf2\x94\xd3\xbb\xb4\xe2\x30\xce\x7f\x88\x0c\x55\x96\xe3\xb9\x2f\x98\x7e\x7d\xa9\x56\x81\x3a\x33\x88\x13\x65\xf2\xba\x92\x71\x25\x52\x09\x02\x01\x35\xb8\x55\x56\x47\x47\x9c\xfa\x92\x2a\xb9\x50\xdd\x2a\x62\x49\x23\x99\xdc\xde\xe5\xca\x18\xf2\xb8\x1e\x4b\x8a\x89\xb4\x0c\x41\x10\x55\xb2\xd7\xac\x2b\x00\x81\x80\x3a\x5c\x84\x06\x3a\xa2\x19\xc9\x78\x2e\x9b\xb0\xd2\xc9\x3f\x52\x57\xc3\xc8\xe8\xfc\x42\xcc\xb2\xc3\x7d\xe7\xe0\x15\xea\x82\xc0\x2f\x58\x42\xcc\x3d\xa7\x20\x10\xd0\x80\x8b\xd0\xc4\xb8\xc0\x51\xe7\x69\xaa\xd2\x3e\x2d\x59\xb0\x14\x9a\xe6\x3a\xe7\xfe\x2a\x37\x2b\x81\x84\x03\x7f\xe3\x2e\x85\xbc\x24\xde\xfd\x4a\x9a\xa3\x55\xa3\x26\x5c\x84\x16\x3a\x02\xb5\x9a\x58\xf2\x46\xc3\x69\xa7\xa5\x7d\x49\x94\x24\xd5\x82\x34\x99\xda\xec\x0d\xb5\x1c\xf7\x35\xdf\x0b\x67\xce\x0a\x71\x7b\x5c\x87\x40\x40\x0b\x2e\x42\x1b\xe3\x20\x2d\x7d\xa3\x37\x02\xd4\xd9\xed\x1b\xe9\x16\xa3\x25\xfd\xa8\x74\xea\xfa\x43\x1a\x83\x1f\xb5\xdb\xac\x56\x19\x62\x7e\x56\xf9\x97\x20\x10\xd0\x86\x8b\xb8\x89\x8e\xd8\x6d\xbf\x51\x33\xc4\xf9\x65\xb8\x43\xeb\x82\xfa\x9a\x64\x71\x06\xcf\x66\x42\x30\x6f\x71\xd1\xb5\x2a\xa6\x83\xf0\x49\x9f\x77\x47\x3d\xfc\x26\x5c\xc4\x2d\x74\x44\xee\xbb\xa5\x1f\xae\xa2\x26\xef\xb4\xb1\x7e\x2d\x20\xfc\x9e\xcb\x9b\xdd\xc9\x55\xf0\xb1\x46\xf8\xd7\xb8\xf8\x44\xd1\x19\x65\xab\x43\x20\x70\xeb\xef\x44\x74\xd2\x1c\xf5\x8f\x88\x74\xd0\xcb\xf3\x90\x8c\x8b\xa6\xa1\xb9\xf7\xea\x0a\x3d\x39\x1f\x87\x6e\x8e\xc3\xd2\x19\x91\x21\xce\xc4\xae\x3e\x11\x8f\xaf\x9e\x9c\x54\x6e\x78\x10\x08\xe8\xc0\xad\xb2\x2e\x3a\xa2\x68\x33\xc1\x20\x71\x7f\x24\x9c\x76\xa2\xd8\xe4\x6c\xcf\x8f\xf3\x0e\x9d\x8b\x0c\x4f\xcf\x73\x1f\x30\x45\x9d\xc9\x6e\xdb\x79\x6b\x01\x81\x80\x2e\x5c\x84\x1e\xc6\x00\x9b\x64\x99\xfe\x4a\x40\xb9\xf1\x2b\x9f\xa4\xb4\xc1\x27\xb1\x1f\xd9\xb4\xdc\xd6\x7b\xca\x4d\xc4\xad\xee\x3a\x44\x0a\x9c\x5e\xac\x10\x08\xe8\xc1\x45\xe8\xa3\x23\xca\x7e\xc8\xbd\x5b\xa1\xeb\x2a\x5f\x61\x48\x5b\xa4\xe6\xec\x56\xbd\xff\x52\xd1\x90\x35\xeb\x87\xa2\x4f\xc7\x5d\xf5\x34\x8b\x2e\x4a\x08\x04\xf4\xe1\x22\x0c\xd0\x11\xd8\x7e\x0e\xed\x95\x42\xd2\x53\xa7\x7d\x66\xca\x57\x63\xf5\x22\xe8\xa4\x65\x5e\xf9\x1f\x62\xdb\x34\x69\xf6\x70\xfe\xb0\x0e\x60\x87\x40\xc0\x00\x2e\xc2\x10\x1d\x91\xd9\x1e\x51\x8a\x17\x3e\xc1\x17\xb8\x92\x4f\x3a\x5a\x84\x17\x3e\x89\x6d\xff\xe0\x73\x8b\xce\xcf\xf1\x3a\x26\x8d\x3d\x2b\x66\x69\x08\x04\x0c\xe1\x22\x6e\xa3\x23\xa4\x3e\xbe\xd1\x9c\x2f\xbd\x49\x75\x78\xcb\xe6\xfb\xe6\xbe\x4a\x06\xe9\x13\x8e\x1a\x23\x7f\xe1\xac\xe7\x69\x78\x95\xaa\xf8\x6a\xa7\x21\x10\xb8\x0d\x17\x61\x84\x8e\xb8\xff\x5e\x21\x02\xb7\x32\xd7\x97\x47\x78\xe2\x73\x43\x32\xbd\x42\xb9\xdc\xa4\xc4\xed\xe1\xdc\x92\x89\xa9\xfb\x17\x22\x07\x33\xae\x41\x20\x60\xf4\x77\x22\x3a\x69\xf5\xf6\x47\x44\xc6\xe8\xe5\xf1\x5b\xb4\x4b\x26\xe4\x32\x4a\xf7\xa6\x8e\x01\xd7\x0f\x1a\xbd\x22\x78\xa2\x78\xca\x29\x98\x4b\xb3\xb4\x82\x7f\x52\x9e\x51\x38\x9a\xce\x19\xc3\xad\xb2\x09\xc6\x2d\x9f\xf6\xa8\x1c\xc4\x0c\xee\xa3\xad\xb1\x4b\x12\xa1\x92\x8f\xfd\x5f\x34\xae\xb1\xcf\xa8\x7a\xe2\xc7\xc4\x7e\x35\x9a\xd5\x91\x16\x82\x40\xc0\x04\x2e\xc2\x14\x1d\x41\x69\xc4\xfc\xab\xcf\x3f\xe8\xd6\xc0\x17\xa5\x07\xba\x99\xb3\x57\x0e\x3b\x19\x82\xef\xad\x27\xdc\x7c\xaf\x80\xea\xf8\x95\xdb\x74\x34\x85\x30\x85\x8b\x30\x43\x47\x30\x6d\x2d\x4a\x73\x93\xec\x33\xd6\x36\x2c\xb9\x9b\xed\xf8\x87\xca\xb1\xf2\x90\xa9\x6e\xa7\x53\x05\x70\xd4\x7e\xd8\xc5\xfd\xa5\x03\x81\x80\x19\x5c\x84\x39\xc6\x9a\x68\xd5\x73\x99\x97\xeb\x4e\xc9\xc5\x5b\x92\xda\x31\xf6\x1f\x67\xce\x29\xee\x1e\xe2\x5a\x31\x52\xb6\x67\xfc\x2c\x40\x28\xb6\x1b\x41\x20\x60\x0e\x17\x61\x81\x71\x79\x47\x31\x39\x49\xe0\xba\xf6\xca\xac\xcf\xb3\xa7\xe7\x9d\xe5\x9e\x0d\xe3\x7f\xb5\xe6\xfc\x7d\xf3\xb2\xf2\x7b\xc2\xd9\xf8\x0d\x35\x10\x02\x01\x0b\xb8\x88\x3b\x18\xb3\x02\xad\xb9\x8e\xe9\xc7\x79\xcf\x0e\xa7\x5b\x17\x12\xcb\xc5\x03\x3f\x62\x45\xc6\x39\xd0\x33\xf0\x79\x55\x3d\xc1\x2f\x47\x06\xab\x41\x20\x70\x07\x2e\xc2\x12\xe3\xb4\x84\x97\x5d\x46\x28\xf2\xb9\x6e\xb1\x9d\xbc\x53\x46\x62\x5e\x7f\x8e\x40\xbc\xf2\xd6\xe5\x7a\x2d\xf1\xd3\x81\x83\x49\xb5\xd5\x8c\x10\x08\x58\xfe\x9d\x88\x4e\xda\xd7\xf8\x23\x22\x2b\x8c\x43\xfe\xfd\x37\x00\x95\xd5\x84\xf5\xdc\xe6\x63\x85\xaa\x6f\x2c\x17\x2f\x3b\x9c\xb9\xea\xb5\xa8\xc6\x81\x17\xb6\x68\x6d\xe2\xa5\x4e\x0e\x81\x80\x15\xdc\x2a\x5b\x63\x0c\x4d\x06\x91\x4f\xe7\x0f\x54\xb9\x37\x99\x2b\xc5\x74\x26\xbd\x1f\xbc\x65\x3e\xc8\x4d\x2d\x29\x37\x76\x2a\x49\xcd\xfa\xad\x19\x7f\x34\x6e\x58\xc3\x45\xdc\xc5\x68\xd5\x14\xee\xa0\xa4\x7e\x99\x09\xc2\xd7\x5f\x9a\x76\xf4\x0a\xa9\xb9\x9f\xfd\x2c\x38\xc7\x90\xf7\x86\xa8\x09\xbb\xf7\xb4\x6a\xde\xd1\x6b\xe2\x2e\x5c\x84\x0d\x3a\x22\xe1\x03\xb5\x2e\x9b\x84\xb8\xe7\x69\x39\xbd\x8f\xa2\x2a\xb3\xca\xc9\x1e\xa7\x04\xd7\x92\xb3\xc8\xc5\x7f\xb0\x04\x3f\x14\x5d\x3a\x12\x91\x0d\x5c\x84\x2d\xc6\xce\x5f\x70\x66\x93\x18\xf1\x25\x3a\xc1\xf8\x7b\xbf\x4f\x21\x24\xb9\x83\xde\xcf\x2d\x51\x20\xcf\xf7\xdc\x8b\xee\xbb\xcf\x43\x42\x40\x0b\x81\x80\x2d\x5c\x84\x1d\x3a\xe2\xee\xf3\x0b\xd8\xdb\xfb\x2c\xe5\x44\xca\x6e\xac\xc5\xbe\x3c\x7a\x5d\x0d\xdd\x1f\xf6\x39\xfb\xe5\x90\xe7\xec\x58\xd8\xb2\xc2\x2e\x43\x20\x60\x07\x17\x61\x8f\x8e\x90\x7c\xe5\xb2\x26\x2c\x7f\x7b\xe4\x5e\xb8\x29\x7b\xc2\xe3\xc8\xcb\x8d\x3c\xf5\xa4\x6a\xea\x93\x65\x53\xd1\x92\x74\x44\xe3\x83\x17\x20\x10\xb0\x87\x8b\x70\x40\x47\xb0\x13\x3f\xc4\xbe\x31\xb7\xd2\xa8\xcb\x3d\x6e\xa3\x48\x55\xa2\xfd\xfa\x95\x8f\xba\x56\xef\x78\x59\x62\xc2\xe5\xa1\xe6\x6b\x29\x96\x10\x08\x38\xfc\x9d\x88\x4e\xda\xf1\xfb\x23\x22\x47\x8c\x1d\xfa\x0a\x21\x16\xb5\x87\x89\x0c\x0b\xcd\xcb\x6e\x8e\x2b\x82\x7a\x0d\x0e\x5d\x9d\x5f\x3f\xfa\x98\xec\x9d\xfb\x22\x53\x65\x89\xe4\x87\x40\xc0\x11\x6e\x95\x9d\x30\x26\xc9\xfe\xbb\x52\xac\xf6\xe4\xd3\xcc\xa4\x9e\xcf\x9e\xe4\x8a\xbd\xf4\x18\x2b\x78\xca\xa5\xd0\x5c\x7c\xae\xa1\x1f\x12\x49\x79\x7e\xb4\x26\x72\x82\x8b\x70\x46\x47\x84\x0b\x34\xd1\x8f\xeb\xc5\x15\xf6\x2d\x7f\x64\xe4\xc3\x8b\xc7\x29\x5b\x49\x77\xe4\xdd\x1f\x70\xac\x21\xf5\x59\x10\xd2\xa4\x3b\x5a\xf5\x3b\xc3\x45\xb8\xa0\x23\xac\x81\x57\xa8\x2c\x40\xdf\x40\x98\xe8\xa7\x60\xe1\x4f\x5c\xb7\x32\xa3\x89\x35\xfb\x34\x14\x41\xda\x08\x4f\x01\x8f\x13\x25\x13\x04\x02\x2e\x70\x11\xae\xe8\x88\xc7\x89\x58\x1e\x2d\xd7\x2f\xc9\xf1\x7f\xdc\x1b\x8e\x0e\xd0\x76\xea\x0d\xb0\xe6\x14\xb9\xa8\x3e\xa5\x9f\x7e\xc7\x71\x48\x75\xf8\x68\x4d\xe4\x0a\x17\xe1\x86\x71\xf9\xe5\xad\x63\x62\xda\x27\x4e\x2d\xf2\xd2\xcd\xbe\x0d\xf2\x6e\x45\x06\x71\x85\x8a\x35\x44\x35\xcf\x8b\x7e\xe1\xe7\x82\x72\x8f\x91\x10\x08\xb8\xc1\x45\xb8\xa3\x23\x7a\x1f\x09\x63\x27\xe8\xb8\x68\xe1\x08\x6d\xaf\x27\xf9\x0a\x2b\xd9\x0a\x7f\x28\x3c\x7f\x2e\xfe\xb4\xc4\x0d\x8b\x8c\x6d\xf6\xb2\x23\x11\xb9\xc3\x45\x78\x60\x1c\x9c\xf2\xe1\x2f\x17\x0d\x2a\xaa\x7e\x2e\x3d\xc5\x26\xf3\xbb\x61\xee\x8a\xde\x04\x6e\x81\x1e\xeb\xa7\x52\x8b\x29\x5c\x83\xfe\xd6\xa3\x05\x82\xc7\xdf\x89\xe8\xa4\xbd\xf0\x3f\x22\xf2\x44\x2f\x4f\xf6\xf3\x97\xd1\x4e\xc8\xe6\xfc\x19\xce\x27\xd1\xc6\x9c\x7d\xc5\x72\xef\x73\xf1\x92\xf1\xc9\xb5\x09\xaf\x0f\x6d\xab\xd6\x84\x1c\xf5\x70\x4f\xb8\x55\xbe\x87\x71\x31\x8a\xca\x76\x74\x37\x53\x83\xd4\x98\xf0\x56\x6a\x85\xd5\xca\x13\x4a\xb3\xf2\x8b\xdf\xbd\xa9\xdc\x73\xa6\x00\x19\x45\x9b\x16\x1e\x08\x04\xee\xc1\x45\x78\xa1\x23\x10\xb3\x55\x81\x2f\x49\x6f\xef\xe8\x9d\x6f\x4c\x7d\x82\x9a\xcc\xc0\x6d\xc8\x8f\x6f\x76\x0b\x13\x2c\x77\xca\xc5\xc7\x0f\x41\x4a\x40\x20\xe0\x05\x17\xe1\x8d\x8e\x18\xec\x59\x48\xbd\x15\x1c\x8d\x4b\x47\xe9\xa5\x8d\x7d\x6a\x9e\x18\x9a\xd7\x1f\x58\x8c\x35\x78\xed\x76\x28\xcc\xb5\x65\xf3\xfe\xa8\x87\x7b\xc3\x45\xf8\xa0\x23\x9e\x5c\xa5\x92\x45\xd4\x60\x6b\xf9\x10\x3d\xaf\x2a\xef\x18\xb8\x57\xf0\xd3\x85\x72\x9d\xb6\xba\xbc\xed\x76\xd1\xfc\x33\x2f\xa6\xa3\xee\xe7\x03\x17\xe1\x8b\x8e\xc8\x8a\xf9\x29\xf1\x76\x86\xaf\xd0\x77\x66\xa7\xa8\xbf\xd8\x28\xb9\xbd\x4d\x49\xa0\xca\x93\xf1\xd9\x0f\x4d\xb5\xc6\x1d\x3c\x82\x33\x10\x08\xf8\xc2\x45\xf8\x61\xac\xb2\x5f\xec\x3e\x4e\xa7\x36\x25\x9b\x33\x96\x69\x79\xa9\x58\x50\x9a\x55\x8c\x0c\x58\xbe\xae\xfa\xbd\x55\x38\x05\xf9\xed\x71\x0a\x15\x04\x02\x7e\x70\x11\xfe\x18\xf7\x6b\x02\xa6\x72\xc4\xb2\x3b\x3e\x1e\xd6\xc9\xd6\xe9\xa6\xb6\x51\x17\x61\x71\x94\xcf\xe7\x77\x12\x9e\x4a\x5f\x6a\xaa\xd7\x63\x3b\x7a\x16\xfe\x7f\x77\x58\x77\xd2\x17\x84\x18\x87\x75\xb4\x59\x9f\x0d\xe5\x7b\x7e\xe3\x8e\xb0\xa8\x2c\xc6\x3e\xc9\x7c\x89\x5f\x02\xf4\xb2\xdd\x4a\xfe\x1a\xd2\xec\xbc\xbf\x94\x89\x34\x3d\x16\xfa\x53\xfc\xf4\xef\x8c\x27\xdd\x76\xa1\x4e\xea\x75\x03\x67\xfc\xe6\x0c\x37\xbb\x1a\x5a\x25\xf9\x94\x85\x9e\x72\x51\x51\x73\x50\x46\x1e\xff\xa5\x12\xa4\x03\xed\xba\x6f\x58\xf7\x26\xad\x59\x13\x42\xc4\x83\x72\x37\xc4\xcb\x96\xe3\x9d\xc2\x5b\xe5\x73\x63\x95\x7c\xdf\x2f\x02\xc7\x42\xcd\xbe\x45\xfd\x48\xfd\xe6\xfe\xfa\x47\x09\x39\x49\xe3\x7b\x54\x1a\xcb\x8c\xff\xd5\x17\x91\xc5\x0d\x6e\x7d\x04\x0c\x75\x8a\x9a\x34\xc7\x42\xcb\xe2\x3e\x2c\x7c\x30\x1a\x23\xbd\x37\xe4\x1c\x5f\x8f\x75\xb9\x83\x25\x75\xcb\xb5\x06\x3f\xad\xb9\xe2\x57\x32\x1e\x2a\x67\x07\x3c\xfe\x5b\x6e\x76\x45\x68\xb9\x08\x3c\x42\xdf\xa8\x0f\xf8\xca\xec\x0f\xfb\x04\xe6\x88\x5d\xfd\x6c\x7c\x36\x96\x54\xa1\x4e\x75\x7a\x52\xff\xf6\xb1\xd0\x71\x4e\x02\x82\x48\x79\x7f\x90\xc0\xc4\x85\xed\xce\x5b\xfc\xda\xa8\x05\xcd\x84\x60\x92\x67\x8f\x6c\x37\x7f\x69\xfa\x72\x7a\x1f\x2f\xeb\x58\xc8\xcf\xe5\xb8\xc5\x5b\x3b\xd4\x33\x71\x25\x26\x83\x01\x5a\xa2\x22\x82\x41\x0f\xbe\x7e\x24\xd2\x7f\xce\x05\xb8\xad\x7d\x5a\xf8\xdf\x61\xdd\x49\xad\xfa\x67\x24\x0b\xc0\x9c\xc7\xed\x98\x56\x4f\x5b\x54\x98\x68\x34\x5d\xed\xab\x2d\xce\xc6\xd2\xa6\x91\x4e\xe2\x09\xda\xc9\x98\x32\xde\xa2\xb6\x48\xd6\x86\x40\x20\x00\x6e\xbf\x83\xd0\x11\x21\xf2\x9a\x16\x57\x3a\x7d\x14\x0b\x2a\xd3\x38\xcd\x98\xb3\xf5\xf6\x6b\x98\xde\x77\xbd\x10\x4d\xd2\x53\x63\x67\x23\xfc\xfd\xd1\x19\x02\x01\x08\x2e\x22\x10\xe3\x3c\x30\xab\x87\xfc\xfd\x7d\xd1\xbc\x65\x1f\x6e\xa9\x4b\x0d\x65\x71\xa5\xfe\x8b\xef\x69\x6b\x5e\xe6\x3d\xa8\x66\x70\x1b\x14\x60\x33\x85\x40\x20\x10\x2e\x22\x08\x1d\x61\xb4\xdd\x0b\xf5\xe9\xe0\xd2\x9e\x49\x27\x1d\xd3\xf4\x28\x3a\xa5\x16\x80\x9d\x2a\xf0\x7b\xb5\xb8\x80\x84\x3d\x4b\x5a\x93\x06\x07\x02\x81\x20\xb8\x88\x60\x74\xc4\x95\x8f\xc9\xc9\xeb\x37\xf3\x69\xc3\x23\xd5\x8d\xd3\xe7\xac\x0e\x7f\x25\xd0\x2a\xd3\x35\xa4\xf5\x50\x1c\xee\x50\xbf\xc9\xcf\x35\x84\x40\x20\x18\x2e\x22\x04\x1d\xc1\xda\xa6\x47\x1f\x43\xb7\x57\x50\x4e\x6e\x8b\x4a\xd3\xa3\x2a\xe7\x4d\xe5\x63\x92\xae\x34\x2a\x54\x89\x99\xee\x09\x4d\x14\x3a\x9a\xd4\x84\xc0\x45\xdc\xc7\xb8\x0b\xeb\x8d\x8f\xfd\x14\x31\x18\x9a\x19\xea\x72\x58\x77\xdf\x85\x7a\x6d\x94\xf2\x49\x48\xa4\x93\x8e\xc2\x40\x16\x61\xb4\xe7\xc4\x69\x08\x04\xee\xc3\x45\x84\xa2\x23\x2a\x5e\x7d\x0c\x8a\xb5\x31\xe1\x67\x15\x77\x77\x77\x7b\xfe\xba\xbe\xe2\x1d\xfe\x2b\x25\xd4\x92\xe4\x86\xb5\x81\xa1\xb4\xa0\x30\x16\x04\x02\xa1\x7f\x37\x1d\x38\x69\xbc\xf9\x23\xa2\x30\xf4\xf2\x9c\x7b\xba\x12\x4c\xa0\x79\xfb\xda\x2d\x4e\xa5\x0b\x57\xa0\x74\xc5\xed\xfa\x2f\x1b\x45\xbf\x83\x6e\x55\x74\xfb\x21\xa6\x75\x53\xa8\x21\x10\x08\x83\x5b\xe5\x70\x8c\x6b\x85\x50\x3f\xef\xd0\x38\x40\xc5\xfb\x78\x94\x1a\x24\xce\x51\xd9\x16\x96\xe0\xed\xaa\x7e\xa5\x5d\xa5\x64\xbf\x5f\x44\x48\x79\x05\x02\x81\x70\xb8\x88\x08\x8c\x7b\x5d\xe4\xcf\x6c\xe4\xa6\x1e\x45\xbb\xee\xeb\x72\xda\xed\x3b\xae\xf7\x51\xae\x60\xa9\x47\x94\x9c\xce\xdf\xe3\xbf\xf0\xb2\xc8\xcc\x06\x02\x81\x08\xb8\x88\x48\x8c\x1e\x5e\xeb\x5a\x4b\x9b\x9c\xfd\x48\x33\xaa\xe0\x99\xb3\x42\x77\xaf\xdf\x14\x0d\xfd\x28\xb3\xba\xd6\xb5\x28\xb2\x7b\x2e\x01\x4c\x47\x93\x9a\x48\xb8\x88\x28\x8c\x4f\x26\x72\xdc\x80\xe6\x91\xdd\x1c\xd1\x97\xcf\x9c\xef\xbd\xd9\x63\xf4\x5c\xbf\x10\x80\x33\x1c\x6c\xf3\x46\x9e\x7b\x32\x91\xc0\xef\xe8\x2d\x17\x05\x17\x11\x8d\x31\xfb\xab\xe8\x6d\x5b\xa1\xe5\xef\x93\x65\x22\x41\xac\x04\x85\xee\xf1\x4e\xb3\x04\x0f\x19\x28\x17\x3f\xe5\xe9\xca\x60\x8d\x21\x10\x87\x40\x20\x1a\x2e\x22\x06\x63\x09\x35\x84\x4b\x5d\x29\x18\xd0\x37\x40\x6c\x75\x0a\xaf\x5a\x37\xea\x1a\xa3\x86\x91\x62\xf4\xe0\xba\x69\xbd\x77\xc5\x93\xda\xb3\xec\x10\x08\xc4\xc0\x45\xc4\x62\x6c\xf4\x36\xe4\x1d\x34\xfb\xa7\x4a\x28\x91\x93\x0f\x19\xeb\x48\x0f\x80\x86\x2d\x2f\x1f\xae\x68\x37\x6f\xf2\x59\xad\x7f\x60\xeb\xb0\x86\x40\x20\xf6\xef\x44\x74\xd2\x9b\xf8\x8f\x88\x1e\x60\x7c\x25\x42\xdd\xa7\x8f\x8c\xb5\x1b\x67\x4e\x18\xdd\xb8\x62\xe3\x26\x15\xf6\xd3\x77\xb4\xf3\x76\xdf\xcf\x22\xaa\x3a\xda\x1a\xf9\xe1\xa3\x56\x7d\x00\xb7\xca\x71\x18\x5f\x8b\x25\xa6\x64\xb4\x3d\x51\xea\xfd\x55\x4e\xa1\x4c\x2d\x46\xf3\x98\xc5\xed\x8c\xdd\x35\x31\x46\xbe\xc4\xdb\xdf\x55\x44\x33\x33\x29\x21\x10\x88\x83\x8b\x78\x88\xb1\x0b\xab\x15\xfc\x26\xc3\x8a\x2c\x8e\xff\xfb\x4d\xec\xe5\x8d\x43\x1b\x80\x7e\x92\x27\x26\x66\xc9\x3c\x36\x53\x42\xb8\xd1\xd4\x9a\x0c\x02\x81\x87\x70\x11\xf1\x18\x97\x23\x79\x32\x27\xa2\xbd\x25\x58\x9d\x8d\x3d\xd8\x4d\x5c\xb3\x2f\x68\x46\xd4\x57\x8a\x4e\x5a\xf0\x1b\xce\x38\xe7\x34\x4d\x37\xb0\x42\x20\x10\x0f\x17\x91\x80\x8e\x10\xec\xeb\x32\x7c\xfb\x56\xa2\xbd\xd2\xbb\x2e\x49\x95\xea\x2d\x76\x85\xd8\x6e\xbb\x51\x7f\x3e\xa1\xf2\xf3\xfc\x69\x84\xd7\x7f\x3e\xab\x4b\x80\x8b\x48\x44\x47\xec\x98\x18\x6b\xbf\x21\x9c\xd1\x95\xba\x7b\x91\x8f\x90\x1d\x78\xe4\x51\x50\x97\x2a\x73\xf3\x65\x1c\xde\x85\xac\x91\x41\x47\xdd\xcb\x10\x08\x24\xc2\x45\x24\xa1\x23\xb4\xe2\xf0\x5b\xe3\xd2\x44\x9e\x5a\x90\xb5\x98\x7a\xc5\x3c\xee\xe0\x96\x23\x40\x72\x1a\x89\xef\x3c\x61\x5b\x50\x4b\xab\xb8\x26\x07\x81\x40\x12\x5c\xc4\x23\x74\xc4\xf5\x77\xcf\xcd\x5c\x83\x67\x06\xc7\xae\x56\x0b\x52\x0c\x38\xfe\x20\x1f\x64\x3d\x88\xfd\x30\x49\x88\x47\xf0\xe0\xe7\x88\xd3\x4d\x55\x08\x04\x1e\xfd\x9d\x88\x4e\x9a\xa3\xfe\x11\x51\x32\xc6\xd7\x5c\x50\x7a\x5c\x53\xd7\xdb\x24\xa7\xd1\x70\xe5\xea\x86\xdc\x80\x72\xc1\xf5\xb9\x05\xed\x86\xf4\x6a\xdc\x7b\xc9\x48\x2e\x4a\x23\x08\x04\x92\xe1\x56\xf9\x31\x3a\xe2\x11\xd8\x32\xaa\xce\x6d\x71\x8d\xd2\xd9\x72\x49\xd4\x6a\x8a\x65\x4a\x35\x58\x91\x91\x7a\x17\x37\xd7\x36\x53\x90\x73\x94\xf1\x68\x2d\xfe\x18\x2e\xe2\x09\xc6\x6b\xc2\x96\x93\xfb\x46\x1c\xb2\xe8\xb0\x7c\xb5\xcf\x40\xa8\x6a\xc5\x2c\xce\x3f\x8b\x2c\x7f\xbe\xe7\x2a\xb6\x49\xb0\xb1\x74\x8d\x25\x04\x02\x4f\xe0\x22\x9e\xa2\x23\x3e\x52\x2f\x13\xb8\x8e\x30\x79\x28\x06\x30\x49\x53\xbb\x05\x23\x24\xa6\x0e\x2e\xe5\x40\x66\x5b\x38\x5e\xd7\x02\x99\xcd\xa4\x58\x20\x10\x78\x0a\x17\x91\x82\x21\xa2\x2e\xa2\x9a\xf3\x79\xd9\xdc\x21\xe0\x16\x0b\x75\xb1\x2e\x33\x02\xb5\xf3\xc0\x4b\xcb\x5e\x7f\x18\x3f\xdf\xfe\xc9\xa9\xed\xa3\xbe\x91\x02\x17\x91\x8a\xf1\x39\x4d\x97\xdc\x60\x6b\xcb\x46\x3f\x7f\xe9\x85\x34\x46\xed\xb5\x2a\x2e\xb6\xa7\xfd\xde\xf9\x16\x34\x91\x2a\xcc\xa3\xef\xd5\xd9\xd5\x21\x10\x48\x85\x8b\x78\x86\xb1\x82\x2f\xa6\x19\xab\x0e\xa4\xd9\x09\x4d\xb4\x5b\xeb\xde\x51\x31\xb3\x3c\x7c\x17\x2c\xbe\x7f\x95\x87\x98\x23\x02\x3a\xf5\xb8\x51\x12\x02\x81\x67\x70\x11\x69\x18\x87\x63\xa1\x43\x82\xe5\x60\xd5\x96\x45\x52\xa9\xe0\x9e\xb6\xd0\xc2\x25\x4a\x43\x46\x1c\xfa\xbc\xdf\x5b\x02\x82\x37\x93\xe3\x86\x71\x21\x10\x48\xfb\x3b\x11\x9d\xb4\x7a\xfb\x23\xa2\x74\x8c\x1b\x6d\x1d\xd3\x2e\xcc\x4b\x5f\xfd\x95\xcc\x04\xc5\x0c\x84\x85\xe6\xba\x5d\x2e\xe5\x2a\xd3\x3c\x21\x18\x7d\x96\xe0\xb3\xb4\x54\x78\x34\xfa\xa5\xc3\xad\x72\x06\xc6\xf5\x2e\x4b\x11\x4e\x66\xfe\x3d\xbf\x67\x66\xdf\x1f\x5d\x77\xb8\xd7\x62\x2c\x68\xf4\x58\x3c\x56\xc5\x79\xf9\x4e\xd5\xb4\x8f\x4b\x11\x27\x04\x02\x19\x70\x11\x99\xe8\x08\xe1\x59\x83\xe0\x76\x43\xc9\x8d\xe0\x80\x90\x71\xa5\x79\x97\x34\x0f\x3f\x9c\xb4\xc7\x95\x56\xb1\x28\xe1\x80\xc1\x07\xf7\x23\x8f\x46\xbf\x4c\xb8\x88\x2c\x74\x44\xfe\x80\x5a\x71\x87\x60\x98\xce\x77\x83\x15\xb5\x71\xd1\xcf\x81\x4a\x93\x96\xfa\x07\x5e\x36\x9a\xdc\x04\x6b\xc4\x4f\x0a\xab\x6e\x43\x20\x90\x05\x17\x91\x8d\x8e\x18\xa2\x1a\xe7\x1c\xa2\x4e\xb9\x18\xf9\x61\xba\x71\x39\xa2\x9e\x4a\xa6\xd0\xfa\xdc\xb7\x57\xa7\xa8\xd6\xbf\xf0\x53\xac\x25\xc4\x0a\x40\x20\x90\x0d\x17\x91\x83\x71\x08\xe0\xdd\xc5\x75\x17\x0b\xca\xd4\x1d\xf2\x0b\xed\x7e\x2c\x3c\xdc\x62\xbf\x1a\x3d\x6b\x34\x54\x62\x30\x22\xcb\x2a\xd1\x92\xe0\x04\x81\x40\x0e\x5c\x44\x2e\x3a\x22\x6e\xab\xf7\xbe\x28\x71\xed\x16\x95\xfc\xed\xd5\x3b\x82\x1e\x25\xfa\x87\x79\x4e\x7e\x39\xf5\x88\x4c\xd6\xec\x92\x6b\x5f\xde\x1d\x0d\xcb\xb9\x70\x11\xcf\xd1\x11\x0c\x52\xf6\xdc\xaa\xf6\xdc\x3c\x6b\xcd\x92\xfb\xdd\xd3\x3c\x07\x9a\x4a\xe6\x8b\xea\xaf\x82\x84\x6f\xe8\xab\x77\xcf\x0b\x3c\x3c\x7a\x16\xcf\xff\x4e\x44\x27\xed\x6b\xfc\x11\xd1\x0b\xf4\xf2\x70\xa7\x33\x10\xd5\xad\x15\xc8\xb8\x5d\x7a\x59\xe9\x73\xdf\xf1\x5e\xf0\xa5\xe7\x7b\x64\xc2\xa1\x06\xa7\x9f\xb0\x0e\xb6\x7f\xaa\x93\x86\x40\xe0\x05\xdc\x2a\xe7\xa1\x23\x84\x6e\xef\x20\xd3\xad\xaf\x76\xfe\x78\x77\x90\x75\xe5\xf3\x87\xab\x4c\x6f\x13\x24\xec\x62\x33\xb1\xf9\x90\x06\x48\x46\xfd\x2b\x77\x21\x10\xc8\x83\x8b\xc8\x47\x47\x7c\xf8\xc4\x1a\xe8\xfa\xe5\xad\x29\xf6\x0b\xa3\x4a\x9b\x9b\xa3\xd9\xcd\x1f\xe2\x03\xde\xd6\x3e\x9f\x21\x15\xa7\x6d\x48\x4b\x28\x10\x84\x40\x20\x1f\x2e\xa2\x00\xe3\x50\x3d\xb1\x69\xf8\x7e\x7b\x1a\x44\x9b\x87\x93\x93\xfd\xca\xed\xe9\xd8\x28\x91\x1e\xc3\x0e\x2b\x8d\xa2\xe3\xf4\x94\x70\x6d\x80\x36\x04\x02\x05\x70\x11\x2f\xd1\x11\xbf\xa6\xf9\xa7\x5c\xc4\xf7\x19\x28\x90\xf2\x0f\xa9\x3d\xec\x82\x04\x48\xc6\x37\xe5\x2a\xeb\xeb\x7a\xd9\xaf\x05\x83\xb7\xe4\x8f\xd6\x44\x2f\xe1\x22\x0a\xd1\x11\xea\xec\x50\x68\x65\xcf\xf9\x1f\x16\x83\x57\xa4\x87\xf0\xd6\x57\x48\xf6\x2e\x3c\xa4\x6b\x6a\xbc\x14\x20\x07\x18\x3f\x4b\xb9\x81\x0f\x81\x40\x21\x5c\xc4\x2b\x74\xc4\x97\xb5\x77\x17\x4a\x08\xe7\xec\x1a\x73\xb8\x71\x95\xfb\xd8\x53\x2e\x78\x71\xdf\xe4\x2b\x2d\xcc\x15\x14\xfc\xfd\x68\xe7\x9c\x80\x09\x04\x02\xaf\xe0\x22\x8a\x30\xd6\x44\x17\x13\x73\x2d\x6c\x0f\x6b\xc8\xed\xc2\x91\x63\x52\xa7\xea\x4d\x0a\x96\x38\x6b\xfa\xf4\x79\xcd\xbc\xa5\x38\xc2\x88\xfe\xf3\xfb\x64\x8a\xfe\x4e\x44\x27\xed\xf8\xfd\x11\x51\x31\xc6\x7d\x1f\x79\xf3\x61\x7f\x76\xed\xc5\x9c\x52\xd5\x3b\x0c\x76\x2a\xbe\x1c\x44\xcb\xa3\xb2\xc5\xf5\xaf\xbe\xf3\x84\xab\xe3\x30\x44\x9c\x85\x40\xa0\x18\x6e\x95\x4b\x30\x2e\x46\xd1\xa4\x47\x39\xba\xb2\x38\xe1\xe1\x68\xeb\x33\x64\x57\xc6\xd0\x4f\x64\xe6\x48\x1b\x3c\x96\x70\x0c\xfd\x3a\xf0\xe5\x66\xaa\x30\x04\x02\x25\x70\x11\xa5\xe8\x88\xbd\xe1\x39\xfd\x88\xb6\xa0\x24\xdc\xd3\x8b\x77\x8c\x8c\x5d\x91\xe5\x64\x56\xf3\x1c\xd4\xdb\xd9\x37\xa3\x12\x6b\xc6\x47\xa8\xb0\x20\x10\x28\x85\x8b\x78\x8d\x8e\x20\x04\xac\xf6\x67\xf5\x3f\xe4\x9e\xe2\x5c\xdf\xe5\x37\x0b\x56\x78\x86\x6b\xf4\x42\x21\xef\x03\xd1\x63\x0b\x81\x57\x97\x94\x59\xb5\x20\x10\x78\x0d\x17\x51\x86\x8e\x58\x01\x5f\xa5\x70\x40\x64\xcd\xb8\x0c\xd5\xda\xe2\x22\x8b\x9f\x90\x4b\x3d\xac\xce\x7c\xb9\x71\x28\x73\xf1\x3e\x8a\x37\x3f\xd8\x20\x10\x28\x83\x8b\x28\x47\x47\x18\x4a\xb1\x04\x23\x9d\x13\x3c\x05\x37\x95\xcf\x88\x56\xd5\xa6\x3e\x04\x46\xd6\xe6\xdd\xe9\x7d\x54\xdc\xbd\x57\xb4\x83\x5e\x1c\x0d\x68\xe5\x70\x11\x15\xe8\x08\xbb\xdb\xa2\xe5\xbe\x44\x2f\x65\x45\xdc\xb9\xc2\xeb\x18\xf4\xa4\xe3\x71\xe3\x32\xb9\xb3\x7b\xea\x9a\x5e\x36\x47\x2a\xb1\x8b\x1d\x0d\xcb\x15\x70\x11\x95\xe8\x08\x7b\x94\xb3\xcd\x8f\xf3\x3d\x35\xe3\x45\x61\x17\xbe\x9c\x1b\x0a\x6a\xf2\xdb\x9b\x75\xba\xf6\xbb\x49\x7f\xdf\x39\xc1\x47\xf4\x1d\x37\x04\x02\x95\x7f\x27\xa2\x93\xf6\xc2\xff\x88\xe8\x0d\x7a\x79\xc2\x1e\x97\x82\xdf\x3f\xe6\x2f\x32\x5a\x45\x46\x90\x42\x6b\x86\x67\xd3\xbf\x32\xf3\xc7\x79\xb5\x30\x2e\xce\x6c\xde\xef\xa7\xbf\x00\x81\xc0\x1b\xb8\x55\xae\xc2\x58\xcc\x8e\x1d\xb8\x8b\x06\xf7\x0d\x16\x7d\x5c\xfd\x02\x04\x3f\x0a\x12\x91\xa0\x71\x93\xce\x35\xcc\x0f\x6f\xb0\xa2\x20\x6a\xba\xa5\x00\x81\x40\x15\x5c\xc4\x5b\x8c\x23\xd0\xfc\x21\x5a\xf7\x9a\xf7\x67\x3b\x42\x2f\xca\xb2\xfb\xb5\xdf\xe0\x78\xc0\xba\xec\x30\x76\x45\xb9\xbf\x45\xcd\x0a\x75\x8f\x5c\x1c\x02\x81\xb7\x70\x11\xd5\xe8\x08\x8f\x79\x91\xf9\xb3\x4c\x5c\x96\x75\xe9\x82\x9e\x82\xfd\x4a\x96\xe2\xc0\xc0\xf8\x8b\xdc\xaf\x76\x87\xe4\x02\x1b\x5c\xd2\x76\x04\x10\x08\x54\xc3\x45\xbc\x43\x47\xb8\xe9\xe3\xd5\x98\xea\xfd\xdc\x18\x2c\x9b\xe4\xc0\x42\x24\xe7\x68\xfa\x6c\x8b\xdd\xbd\xdd\xc3\x3d\x55\x25\xc9\xd1\xa0\xa3\x70\x34\x86\xbf\x83\x8b\x78\x8f\x71\x31\xea\xc1\xe4\x01\x65\x47\xc2\x29\x13\x39\x29\x4a\x9e\x6d\xe6\x80\xf5\xb0\x8c\x12\xb2\x60\x69\x3d\xbf\xb0\x60\x5e\xda\xcf\x3b\xe4\x10\x08\xbc\x87\x8b\xa8\xc1\xb8\x2e\x3d\x95\x12\x0c\x12\x67\x75\x49\xf1\x5f\x89\x58\x61\x19\x70\x4a\x91\x17\x25\xe1\x7f\x03\x51\xdb\x88\x67\x22\x45\x3a\x5e\x9a\x42\x20\x50\x03\x17\x51\x8b\xb1\xa5\x9c\xf8\x74\xa4\x4a\xf6\xb2\x58\x50\x11\x1b\xb2\x9b\x6d\x32\xf8\xb9\x45\xe1\x21\xe5\x90\xd5\xbd\xf1\x5f\xba\xbd\xea\x53\xa8\xa3\x01\xad\xf6\xef\x0e\xeb\x4e\xfa\x1d\x9e\x18\x87\x75\xd9\x2d\x0a\x82\xcf\xcf\x2e\x99\x64\x70\x26\x5f\xdf\x27\x4b\x4a\x62\xbe\x73\xa7\x5e\xdb\x2c\x8f\x99\x23\x59\xef\xfe\xe9\x1a\xc1\x57\xc7\x42\x37\x47\x45\x62\x35\x4f\x29\xfa\x69\x8f\xce\x90\x79\x18\x75\x75\x34\x3e\x60\x34\x2d\x12\xd6\xcb\x32\xdc\x3d\x75\x63\x36\xed\x3c\xc9\xb1\xd0\x5f\x2f\xd8\x5f\x6e\x54\x09\xad\x7a\x3d\xca\x30\xa0\x05\x6b\xfc\x2a\xdb\xf0\xbe\x49\x8e\xaf\x90\x06\xe3\x44\xbb\x2b\xcd\x7b\x76\x1c\x0b\xf5\xd1\xa8\xaf\xb2\xb2\x20\x6a\x5d\x20\x15\x13\xbf\x7a\x75\x7f\x26\x7b\xba\xf5\x65\xfd\x53\xe2\x9a\x37\xb4\x1f\x3a\x36\x3d\xf3\x99\x8e\x7f\x59\x27\xaf\x54\x57\xf1\xc2\x18\x10\x2f\xee\x62\x9c\x6a\x02\xcc\xfc\x36\x6f\x65\x9c\x59\xfd\x38\x3b\xc5\x2c\x9c\xd3\x66\x14\x6f\x75\x2c\x14\xeb\x6c\xdb\x79\x17\x0d\x95\xfe\xae\x5d\x6c\x8b\xb5\x7d\xca\x49\xb1\x36\x63\xa5\x8b\xa4\xdd\x8e\x45\x07\xc2\x0b\xde\xe2\xf4\xa4\xc7\x42\x5b\xef\xd7\x2a\x9d\xb1\x53\x8d\xbf\x45\x47\xe3\x65\xf6\x7b\xef\x22\x77\x98\xb0\x8d\x70\xe2\x95\xb4\xb7\x7c\x0c\xcb\x38\x17\x6c\x9c\x8e\x85\x5e\xbc\xf1\xdb\x54\x85\xa3\x92\xd5\xdc\x89\x29\x37\x27\x3d\x84\x5c\xf8\xeb\xc2\xa1\xe2\x39\x79\xf6\xfe\xba\x85\xc1\x55\x9e\xa0\x9b\xff\x3b\xac\x3b\xa9\x55\xff\x8c\x64\x75\x18\x37\x8c\xd5\x0b\xde\x05\xcc\xd3\xd3\x60\x11\xef\x2f\x06\x65\xbc\xea\x7d\xb3\x20\x9d\x78\x83\x12\x67\x01\xdb\xee\xf5\x12\xe1\xbe\xd0\xd1\x1c\xbf\x0e\x6e\xbf\xab\x47\x47\x0c\xfc\x0c\x79\x63\x66\xbb\x6c\x9f\xb2\x95\x64\x24\xc8\x6e\x92\x97\x5e\x09\x3d\xaa\xa9\xba\x49\x52\xbf\x8a\xea\xb5\x52\x50\xb6\x87\x40\xa0\x1e\x2e\xa2\x01\x1d\x81\x5b\x1d\x7e\x3e\x2e\xbd\x80\x55\x5a\xdc\xf8\x0d\x2b\xca\x7e\x8f\x32\xd9\xf4\x4a\x7c\xbc\x1c\xdb\xf3\x5d\xb2\xc6\xa7\x69\xc3\x32\x10\x08\x34\xc0\x45\x34\xa2\x23\x72\xe4\x9e\x28\x3a\x7f\xee\xb2\x17\x97\x8e\x6f\xb0\xb2\x0b\x04\x9e\xea\x4a\x2f\xf3\x3a\x26\x53\xdf\x1d\xb0\x67\xc7\xfb\xf1\x98\x1e\x02\x81\x46\xb8\x88\x26\x74\x44\x92\x7f\x34\x19\xa9\xf9\x03\x9c\xb3\x97\x53\x12\x06\x2f\xb7\x01\x6b\xa7\xfa\x14\x78\x86\xbf\xbb\xe2\xdd\x8e\x74\xca\x4a\x4a\x3a\x5a\xc1\x37\xc1\x45\x34\xa3\x23\xfa\xcf\x11\x99\x2f\x90\x2e\xf2\x59\x8e\x08\xd5\x4f\xe9\xd5\x6a\xce\xee\x2f\x9c\x5e\xcc\xd9\x7b\x90\xf4\xda\x70\xa0\x25\xf1\x29\x0f\x04\x02\xcd\x70\x11\x2d\xe8\x88\x89\xb1\x87\x08\x01\x31\x11\x37\xec\x40\x27\x7d\xbd\x88\xc6\xc7\x23\x4e\xdc\xeb\x79\x37\x21\xd6\x92\x9b\x8b\xb3\xe6\x74\xa3\x47\xb5\x68\x81\x8b\x68\x45\x47\xac\xd9\x1b\x7a\xa6\x80\x95\x2b\x4d\xfa\x67\x7c\x0a\xd9\x3f\xbb\x9a\xa4\xdc\x90\x29\xc3\xb7\x79\x8d\xc4\xd1\x9d\xf6\xb0\x75\x38\x7a\xfd\xb6\xfe\xdd\x74\xe0\xa4\xf1\xe6\x8f\x88\xda\x30\x8e\x56\x16\x27\x4c\xa8\x44\x3d\xe5\xcf\x9f\x8a\xa4\xe4\x99\x38\x7c\x67\x4d\x1a\xcc\xa0\xf5\xa6\xda\xdf\x86\xf9\x4d\x2b\x91\x51\xf9\xd1\xfb\xa1\x0d\x6e\x95\xdb\xd1\x11\xbf\xfd\x8b\x12\xb7\xe9\x59\xf4\x98\x66\x84\x74\x40\x2f\x49\x76\x33\xa2\xad\xa7\x3a\xa5\xdd\x2a\x82\x63\xaa\x63\x1e\xf3\x66\x96\x10\x08\xb4\xc3\x45\x74\xa0\x23\x70\xc6\xb5\xf8\x32\x1d\xfb\xc0\x91\xe7\x59\xb4\x1a\x72\xfa\x54\x7d\x95\xd8\x89\x71\x01\x28\xb7\x96\x89\x1b\x86\x9f\x09\xdc\xcd\x20\x10\xe8\x80\x8b\xf8\x80\x8e\x80\xb2\x8b\xf6\xaa\x7e\x52\x82\x1c\x5c\x51\x8e\xdf\xda\x5e\x9f\x16\x38\xb3\x89\xdb\x71\x5b\x34\xe8\x3d\xab\xc2\xda\x4e\xb4\xe3\xd1\x74\xe0\x03\x5c\x44\x27\x86\x4e\x99\xcf\xaf\x35\x36\x66\xab\x64\xf3\x54\x3b\xfc\x22\x4c\xa4\x76\xe7\xaa\x5e\x50\x1e\x53\x33\x42\x32\xbf\x69\x4c\xc4\x53\xa6\x82\x40\xa0\x13\x2e\xa2\x0b\xe3\x58\x49\x8c\xb6\xba\xee\xa1\x57\xb3\xcc\xc2\xd9\xcb\x0d\xe2\xd7\x2e\x15\x53\xf0\xb2\x9a\xee\xd6\xac\x0a\x37\xf0\x53\x5f\x0c\x9c\x3b\x7a\x16\x5d\x70\x11\xdd\xe8\x08\x2f\xa9\x05\x55\xfc\x94\x77\xcf\xbb\x4d\xd8\x85\xb6\x4c\x79\x88\x56\xe5\x97\x4b\x93\x17\x70\x82\x6a\xae\x06\x4f\xb1\xe9\x78\xf0\x41\x20\xd0\x0d\x17\xf1\x11\xe3\xaa\x56\xc4\xa5\x6f\xa6\xc4\x5e\x95\xdd\x87\x3e\x36\xdf\xb3\xfa\x28\xcb\x70\xcd\xbe\xe2\x9b\xac\x8d\x50\xf5\x38\x5c\x5f\xbd\x55\x75\x34\xe3\xf8\xf8\x77\x22\x3a\xe9\x4d\xfc\x47\x44\x3d\xe8\xe5\x99\x7e\x43\x5e\xbf\x9c\xfe\x30\xcf\x81\xa3\x25\x6d\x86\x2e\x7d\xa8\x3c\x31\xb8\x22\x45\xfa\x97\xe6\x43\x77\x4f\x4d\x15\xb3\x80\xa3\x65\x44\x0f\xdc\x2a\xf7\xa2\x23\x34\x10\xa3\xc0\xbc\x82\x9e\xd3\xe4\x5d\x93\xf9\x0b\xee\xa4\x0d\x4e\x73\x13\x72\x82\xaa\xfa\x5b\x67\xea\xfa\xfc\xaa\xf4\xac\x9c\x21\x10\xe8\x85\x8b\xe8\xc3\xd8\xa1\x0f\x5e\x29\xa1\xfd\xed\x67\x78\xf3\xbc\xb9\xa7\x4c\xf2\xd6\x45\x09\xba\x85\x79\xcf\x03\xc2\x2c\x7d\x9c\xe1\x9a\xf7\x5c\x8c\x8e\x10\x08\xf4\xc1\x45\xf4\xa3\x23\x3c\xb7\x0f\x99\x7c\x76\xb7\x71\x86\xad\xeb\xae\xb6\xe6\x12\x5d\x12\x44\x55\x9e\x1b\xab\x56\x31\x2d\xa4\xa9\x6a\x5c\x11\x7a\xaa\x04\x81\x40\x3f\x5c\xc4\x00\xc6\x8d\xde\x59\x66\x3b\x3b\x0b\x2e\x2b\x85\x59\xb0\x05\xa7\x34\xb3\x91\x8f\x81\x90\x4b\xbd\x57\xeb\xa5\xb8\xdb\x21\xd1\x5a\xe5\xa5\x23\x9d\x0e\xc0\x45\x0c\xa2\x23\xcc\x3f\x9a\x7e\xd6\xde\x87\x38\x0a\xf1\xb9\xd2\x2e\xdc\xc3\x8a\x79\x50\x16\x42\xc4\xf3\x0c\xd7\x6d\xc9\x06\x7b\xef\xc7\xcf\xc9\xa3\xc5\xc7\x20\x5c\xc4\x10\x3a\xa2\xc5\x4d\x3a\xb7\xbc\xd0\x57\x86\x3a\xc2\xf2\x7c\xd6\x80\xed\x79\xa7\x97\x03\x4f\x1b\x35\x3e\x14\xff\xaa\x68\x7c\xaf\x1c\xf7\x90\x03\x02\x81\x21\xb8\x88\x4f\xe8\x08\x7a\x83\x9d\x9e\x07\xc0\x8e\xb8\x6b\x35\x9b\xac\xda\x37\xcf\x70\x8e\x4d\xcd\x19\xe7\x10\x96\x9f\x57\xa7\xb8\xce\xbc\x8b\xb3\xba\x03\x81\xc0\xa7\xbf\x13\xd1\x49\x73\xd4\x3f\x22\x1a\x46\x2f\x4f\xcd\xcb\x39\x59\xf5\x5f\x23\x7c\x5a\x54\xa7\x88\x4b\x2f\x0b\xc8\xbe\x57\x9a\xa3\x95\x58\x6f\xbe\xa2\x7c\x85\x71\x3a\xed\x13\x1b\x36\x04\x02\xc3\x70\xab\xfc\x19\x1d\xf1\x4d\x77\xe9\xc7\xe5\xc0\x6a\xc6\x8d\x4d\x31\xd7\x4c\x9c\xdc\xe6\x65\x2a\xc3\x5b\xc6\xf8\x53\x14\xf2\xb1\x9f\xf3\xc9\xbb\x1c\x41\x08\x04\x3e\xc3\x45\x8c\xa0\x23\x5a\x65\x87\xa9\x26\x78\x9e\xf7\x73\x54\xc4\x51\xad\x2a\xa7\xa5\x9d\xce\xec\x9b\x0c\x6a\xa3\xd3\x8a\x0d\xe4\x3d\xc5\x05\x8c\xd8\x40\x20\x30\x02\x17\x31\x8a\x8e\xb8\x9a\xb1\x2f\xb3\x59\xf0\xe0\x12\xeb\x96\xc4\xc3\x0b\x7a\xbf\x14\x2c\xb6\x4c\x48\xc8\x23\x2a\xef\x1f\xec\x2e\x91\x41\x3f\x6e\x0a\x40\x20\x30\x0a\x17\xf1\x05\x1d\xe1\x7b\x60\x61\xef\x38\x7d\xf1\x01\xb5\x83\x1e\xc2\x48\x40\x75\x8c\x53\xb9\xf6\xf0\xeb\xdc\x52\x59\xe4\xf3\x0c\xe9\x33\xbe\xaf\x8f\x44\xf4\x05\x2e\x62\x0c\x1d\x31\x75\xbd\x92\xbb\x59\xb8\xd8\x74\xdf\x8e\xde\xd8\xa6\x2d\xb5\x68\xb4\xac\xb4\x57\x8b\x63\xac\xeb\x70\xad\x77\x62\xe0\xd3\xc7\xa3\xa9\xf5\x18\x5c\xc4\x38\x3a\xe2\xc5\x7a\x84\x64\x05\xf5\x47\xda\xa1\x03\xfa\xf9\xb1\x4c\x1a\x9e\x03\xea\x88\x8f\xca\x5c\x22\x4e\x8b\x64\x45\x37\x5f\xb5\xb1\x9e\x83\x40\x60\x1c\x2e\x62\x02\x1d\x11\x78\x2b\xa1\x21\xa2\xa1\x6e\xc7\xa4\xda\xfd\xbe\xe2\x47\xaf\xae\xc0\xb2\xab\x66\x8d\x61\xe7\xc1\x88\xa0\x9d\x56\x9c\x81\xb0\x33\x10\x08\x4c\xfc\xe5\x97\x75\x27\xac\xde\xfe\x88\x68\x12\xe3\x98\x2b\xcd\x54\x35\x79\xe8\xe9\x8a\xc9\xbc\x14\x0d\x61\x9f\xf4\xa7\xa0\xe7\xf8\x63\xe2\x6b\xb7\xf2\xb4\x88\xe5\xc9\x13\x9d\x38\x8e\xa6\x97\x93\x70\xab\x3c\x85\x71\xc1\x1d\xbc\xd1\xd6\x10\x1c\x43\x37\x50\xa3\x7c\xfe\xd5\x83\xac\x47\x12\x0c\x11\xb1\x9b\x5f\xa6\x5d\x34\xd2\x7f\x06\xd2\x32\x86\xeb\x42\x20\x30\x05\x17\x31\x8d\x8e\x50\x55\x95\x36\x98\xe0\x3c\xfd\xf5\xe5\x57\x7c\xa9\xdf\x11\x21\x77\xea\x36\x27\xe4\x54\xee\xf2\x5a\xe7\x6f\x5e\xad\x1b\x7c\xe3\x7f\xb4\x26\x9a\x86\x8b\xf8\x8a\x8e\x30\x20\x23\xe3\x77\x28\x6f\xf3\xcc\x74\x9d\x41\x11\xd4\x1c\x0c\xf4\x7e\xe1\xd7\xc9\x56\x4b\x32\xdf\x34\x34\xb4\x5a\x8f\xdd\x65\x84\x40\xe0\x2b\x5c\xc4\x0c\x3a\x62\xf9\xf0\x35\x49\x5b\x50\x8f\x09\xdd\x8b\x53\x22\x17\x48\xdf\x0a\x5e\xa5\xf2\x77\x19\xc3\xbf\x2e\xe2\xe5\x4e\x1f\xe0\xea\x3f\xa5\x06\x81\xc0\x0c\x5c\xc4\x2c\x3a\x42\xfc\xc6\xbd\x85\xe7\x23\x99\xec\x5f\xcf\x7e\xe0\x68\x09\x8b\x9d\x7a\xdd\x4f\xf8\x84\xbb\x6a\xba\xfa\xf3\x26\x8a\x3a\x99\x72\xe5\xe8\x35\x31\x0b\x17\x31\x87\x71\x4b\x28\x21\xe2\x65\x20\x72\x5e\x69\x6e\x4a\x69\x7a\x9c\xff\xa7\x37\x62\x44\x40\x4b\x72\x3d\xd8\x33\x0a\x57\xc9\xfc\xd4\x26\x70\x15\x02\x81\x39\xb8\x88\x6f\xe8\x88\x85\x55\x22\xae\xc0\xdf\x7b\xf8\xec\xdf\xdd\xf8\xb8\x74\x4a\x3f\xb2\x2d\x97\x16\xb3\x1b\x09\x8a\x7a\x93\x7a\x9e\xe2\x55\xd8\x3e\x1a\xf9\xbf\xfd\x9d\x88\x4e\xda\xd7\xf8\x23\xa2\xef\x18\x37\x65\x96\x63\x42\x08\x5f\xe6\x5f\xa9\xa1\xa5\x51\xaa\x49\x93\x62\xf0\xb0\x9a\x95\xa9\x1d\x6d\xe5\x3c\x85\xfc\x20\xb6\x99\x7b\x8f\x12\x02\x81\xef\x70\xab\x3c\x8f\x8e\x48\x57\x52\x55\x52\xbb\x37\xa2\x92\xdb\xb1\xe8\x4c\xf9\xb0\xe7\x57\xfb\xac\x84\x30\x85\x74\x3f\x96\x92\xfa\xfc\xc3\x6d\x76\x07\x52\x08\x04\xe6\xe1\x22\x16\xd0\x11\xbc\x99\x62\x25\x64\xe4\xc3\x87\xb4\x55\x6e\xdb\x5c\x25\x9e\x17\x8c\x6e\x7a\x2c\xf4\x9d\xc9\x91\x3a\xbb\xf1\x82\xf9\xd6\x17\x26\x36\x08\x04\x16\xe0\x22\x16\x31\xbe\x3b\xa2\x60\xec\xf5\xb9\x26\xf0\xbc\x75\x91\xc4\xb4\xf2\x63\x8b\x1e\x4f\xc3\x83\x08\x57\xf0\xc1\x5b\xce\xeb\xad\xb2\xfb\xf8\xb6\xbc\x10\x08\x2c\xc2\x45\x2c\x61\x6c\x8f\x54\xac\xb4\xfd\x4c\x88\xa5\xaa\x69\x14\x72\x6f\x5e\xea\xab\x01\xe5\x86\xa5\xe5\x83\x92\xce\xfa\x33\xe0\x29\xed\x5e\x1d\x3e\x7a\xd9\x2d\xc1\x45\xfc\xc0\x58\xb0\x78\x5d\x3d\x85\x95\xcc\xad\x6b\x40\x42\x57\x8a\x30\x5d\xd0\xea\xda\x68\x5a\x27\xdf\xeb\x5c\x24\x1e\x3a\x6d\x53\xdb\xd6\x6f\x00\x81\xc0\x0f\xb8\x88\x65\x74\x04\x2d\xef\x87\x1f\x50\x15\x97\x6b\x7c\x26\x5b\x86\xa6\xa5\x7a\x58\xcd\x95\x6f\xb1\xb7\xf9\xec\x93\x0e\xab\x1e\x09\xdf\x14\xd3\x62\x81\x40\x60\x19\x2e\x62\x05\x03\x41\xc1\x30\x6d\x8e\x72\x9f\xff\x9e\xe5\xc2\xc6\xbf\xf1\xf0\xaa\x41\xc4\xc4\x05\xb7\x1e\xba\xaa\x32\x51\x57\x8b\x14\x44\xc9\xd1\x50\xb0\xf2\x77\x22\x3a\x69\xc7\xef\x8f\x88\x56\xd1\xcb\xe3\xd4\x5f\xfc\x33\x35\xb4\xa2\xd7\xe8\xb9\x4b\x8e\xea\xe5\x0d\x1b\xca\xaa\x7a\xb5\xa5\x78\xd3\xb2\x37\x9f\x9c\x85\x1e\x05\xac\x1e\xad\x89\x56\xe1\x56\x79\x0d\x1d\x41\x51\x7c\x26\x3f\x9d\x84\xee\xeb\x2d\x4d\x9a\x8e\xa2\x37\x83\x0c\xde\x54\xdb\x0d\x6c\x61\x33\x6d\x31\x2a\xfe\x58\x42\x9b\x86\x47\x55\x5e\x83\x8b\x58\x47\x47\xe0\x2b\xfc\xae\x4d\x95\xe9\x88\x67\x63\x11\x12\x6b\x32\x9e\xc0\x66\xdd\xf6\x7a\x22\xd4\x33\xf5\xc8\xa7\xf7\x66\x24\xf8\xfd\x36\x17\x04\x02\xeb\x70\x11\x1b\x18\xab\x09\x71\x61\x86\xb0\x20\xa2\x47\x59\x3b\xd7\x22\xc5\x7a\x47\x9e\xe1\xc9\x65\x65\x64\x66\x52\x3c\x0c\x5a\xbb\xeb\xb9\x17\x19\x4f\x02\x81\xc0\x06\x5c\xc4\x4f\x74\x44\xc1\xd9\x77\xdc\x51\xf8\x6d\x16\x35\x67\xe5\x5e\x94\x0d\xdf\xfb\x92\xe9\xa4\x9d\x8e\x65\x11\xc9\x11\x2d\x1b\x9e\x92\x85\x97\x4a\x03\x81\xc0\x4f\xb8\x88\x4d\x74\x44\x2e\x4e\x44\x88\xc4\x7d\x6c\xde\xfc\x1e\x4d\x4e\x81\x88\x52\x81\x97\x28\x7e\x32\xef\x8c\x3a\x8e\x41\xc6\x35\x6b\x67\xad\x0f\xea\x10\x08\x6c\xc2\x45\xfc\x42\x47\xbc\x23\xaa\xb9\x67\x19\x42\xd3\xcb\xa0\x7b\xe6\xa3\x3a\xdf\xf3\x25\x8a\x33\x78\xaa\x8c\x92\xbc\x97\x28\x5f\x8e\x29\xea\x59\xce\xe8\x41\x20\xf0\x0b\x2e\x62\x0b\xe3\xee\x55\xb1\xbd\x20\x07\x47\xce\x40\x26\x69\xf5\xa2\x7d\xa5\xe9\x13\x99\x8d\xb7\xb2\x2e\x67\x05\x3a\xae\xde\x0f\xff\x7d\xdd\xa3\x9d\x1a\x02\x81\xad\xbf\x13\xd1\x49\x7b\xe1\x7f\x44\xb4\x8d\xb1\x21\x69\xf9\x8b\x57\x70\xf2\xfa\xfc\xea\xaf\xc0\xb1\x1b\x8b\x91\xa1\x88\xdc\xce\x4c\xf6\xef\xfb\x58\xaf\x98\x48\xec\x44\x48\x51\x47\x0b\x96\x6d\xb8\x55\xde\x41\x47\x10\x0f\xd9\x00\x0f\x25\xf8\x67\x95\x97\x0b\x7a\xfc\x25\xe2\x9a\xbe\x93\x94\xa6\xea\x39\xdb\x57\x48\x0b\x7f\xce\x40\x50\x67\x91\x41\x20\xb0\x03\x17\xf1\x1b\x1d\x21\xd1\x84\xb7\x6a\x1e\xf0\x72\x88\x76\x6d\xbb\x81\x44\xfc\x67\x3c\xc5\x14\x97\xee\x8f\x2f\xa6\xc2\xcb\x88\xf2\x3b\x2f\xfc\x94\x24\x21\x10\xf8\x0d\x17\xb1\x8b\x8e\xb8\xa4\x73\xbb\xb9\x84\x0f\xf7\xdd\x39\x6e\x90\xe6\x81\x72\x48\xa6\x9a\x0f\x14\xda\x49\x42\x41\xd9\xfa\xb3\xf1\x46\x1b\x31\xd5\x75\x08\x04\x76\xe1\x22\xf6\xd0\x11\xe4\x88\x69\x6b\x8b\xb5\xb9\x11\x60\xe9\x19\x30\x47\xb1\x9d\x6e\x20\x77\x06\x27\x62\x6a\x4d\x5c\x2a\x31\x4d\xb3\x91\xe6\x80\x0a\x02\x81\x3d\xb8\x88\x7d\x74\xc4\xe3\x16\xdf\xcb\x76\x21\x89\x52\x11\x4f\x5f\xc5\x5f\x7f\xfd\x46\xf3\x4c\xdb\x55\x88\xd6\xd9\xa3\x00\x11\x26\x7d\x09\xf9\x2b\xdb\x18\x02\x81\x7d\xb8\x88\x03\x74\x84\xb5\x1f\xc1\xdb\x81\xfb\xa2\x4f\xd6\x3d\xaa\x1f\xff\x5e\xaa\x0f\x16\x78\x5f\xae\xa4\xb5\xa7\x29\x33\xb9\xee\x12\xf6\xf8\xba\xb2\x28\x04\x02\x07\x70\x11\x87\xe8\x88\xd5\xcc\xf6\xb3\x22\x9f\xaa\x64\x22\xb4\xd8\xc8\xac\xa1\xac\x73\x05\x5d\x11\x42\xeb\x39\x94\x8c\x1d\x56\x67\x64\xf6\x39\xef\x1b\x42\x20\x70\xf8\x77\x87\x75\x27\xb9\xe8\x61\x1c\xd6\x59\x71\xc7\xad\xa6\x46\x71\xad\xea\xba\x3b\x72\xd9\xf4\x53\xf8\x97\x82\xbb\xb5\xbb\x45\x83\x66\xd7\xc8\x57\xd2\x27\x56\x37\x8e\x3b\xbd\xe2\xc4\x26\x14\x79\x07\x2f\x8e\x87\xf3\x79\x7f\x02\x0a\xb1\xba\xd2\x34\xd3\x56\x0f\x5c\x01\x1e\xec\x61\x55\x03\x13\x04\x15\xe3\xb1\xd0\x2b\xe3\x51\x9f\xe5\x57\x19\xf4\xca\xda\xd6\xeb\xd6\x5b\xbe\x4a\x73\x78\xeb\xbd\x5f\xfb\xdc\x9c\xdc\xc3\x53\x29\xb1\x4f\xdf\xdb\x7b\x2c\x94\x85\x26\x21\xa6\xeb\xc3\xad\x42\x29\x62\xe2\xeb\xc6\x4d\x3b\x58\x07\xb1\x61\xb2\xa4\x50\xcd\x57\xe6\x85\x4e\xfb\x90\x3d\xda\xe6\x63\xa1\x4b\xde\x33\xd6\xc2\xfb\x60\x13\xcd\x78\xe2\x7c\xc2\x5d\xb2\x91\x33\x76\x31\x86\x0b\xad\xfb\x2b\xd4\xd3\x42\xde\xcd\x8c\x4c\x0e\xc7\x42\xcf\x19\x22\xfd\xa2\x95\x9b\x44\x5f\x98\xfe\x3a\x0c\xb3\x07\xa3\xb2\xf1\x5c\xf6\xfb\xfd\xa9\x3e\xed\x11\x7a\x23\xc3\xe8\x34\x99\x8f\x85\xa6\xd7\x70\x39\xd2\x5d\xf6\x86\x7e\x1a\xce\xcf\x45\x7b\x67\x2d\x7e\x13\x6e\xb9\x65\xe6\x6c\xbe\x27\xbd\xf3\x1b\xc7\x8b\x6f\x8c\xed\x58\xa8\x9c\xd5\xe5\xe8\x9a\x6c\x71\xf5\x49\xf9\xc3\x8c\xd0\x57\x5b\xf8\xe2\x74\x37\x94\xeb\x7c\xeb\xc5\x28\x36\x0a\x77\x42\xb6\x38\x43\x03\x3e\x00\xff\xae\x55\xff\x3b\x92\x81\x48\x0c\x77\xba\xc0\xe8\x2d\xc4\x33\xad\x73\x45\x4d\x2e\x24\xab\x81\x95\x26\x38\x8e\xed\xa7\x8d\x1b\xf5\xc5\x54\xf8\x13\x3c\x8a\xc9\x78\x5b\x75\x21\x10\x05\xd7\x9d\x0e\x44\x62\xf8\xd3\xed\x17\x97\x9c\xad\xd0\x5d\xad\xae\xf5\xec\xce\x24\xe7\xaf\x6e\x2f\x29\x7c\xf7\x24\x6f\xbb\xfe\x57\x76\xc4\x9b\xd7\x77\xb4\xa8\x0c\x20\x10\x05\xd7\x9f\x0e\x44\x62\x38\xd4\xdd\x54\xbe\x35\x3f\x7e\x91\xb0\xa9\x22\x59\x53\x4e\x04\x5b\x7e\xcc\xaf\x8a\xe1\xfe\x9d\x9b\x59\x09\xb3\xf2\xf5\xad\xf6\xd5\x9f\xad\x20\x10\x05\xd7\xa1\x0e\x44\x62\x78\xd4\x19\xc7\xfa\xa8\x96\x15\x8d\xbc\x4c\x9e\x20\x5a\x0d\x9d\xe9\xc1\x6d\x29\xf0\xfd\x6d\xf9\xf5\xed\xae\xd9\xe5\x22\x65\x75\x0a\x1d\x75\x08\x44\xc1\xf5\xa8\x03\x91\x18\x2e\x75\xb5\xe2\xbe\xf6\x64\xdd\x4d\xd4\xac\xb2\xc4\x38\x6e\xfb\xb3\x4d\x3e\x0c\x1b\xbf\x8c\xbe\xb9\x8a\x7a\x10\xda\x08\xe4\x30\x7b\x4a\x43\x20\x0a\xae\x4b\x1d\x88\xc4\xf0\xa9\xab\xb1\xc4\x1d\x2e\x8f\x4e\xbc\xfc\x4d\x73\x45\xdd\x59\xb3\x86\xc3\x22\x74\x6e\x43\x11\x6b\x86\xa8\x5c\xb7\x82\xcd\x2c\xf2\x32\x21\x04\xa2\xe0\xfa\xd4\x81\x48\x0c\xa7\xba\x4d\xba\xa7\x77\x98\x1e\x67\xe6\xb2\x72\xfa\x36\xcd\x69\x2c\xe2\x2d\xb7\x11\xb4\x07\x69\xc8\x4f\xcb\x72\xab\x92\x5d\x8d\xf3\x13\x83\x40\x14\x5c\xa7\x3a\x10\x89\xe1\x55\x17\x75\xce\x4e\xf6\x57\x57\xdd\xfc\xec\xf5\x16\x8d\xb5\xd4\xcd\xf3\xcd\xda\xe9\xc9\x0c\xa3\x32\x29\x17\xc3\x6b\x86\x3e\xd0\x79\x1c\xb5\x15\x4c\xaf\xba\x7f\xc4\x74\xd2\xb8\xf3\x8f\x98\x30\xdc\xea\xe2\x63\x9e\x29\xbd\x03\xbd\x7b\x4a\x1a\xdb\x13\x5f\x04\x3e\x53\x26\x17\x6b\x60\x97\xc4\xf6\xb3\x7d\xdf\x91\x3a\xb9\xe6\xf1\xd9\x08\x02\x51\x70\xdd\xea\x40\x24\x86\x5f\x9d\xcf\xb6\xbb\xd0\xc7\xcf\xe3\x5c\x7a\x63\xa6\x6c\x2e\x76\xf3\xd6\x01\xf3\xae\x71\x12\x3a\x8c\x5a\x2f\xe9\x3d\x1d\x14\xaf\x89\x71\x42\x20\x0a\xae\x5f\x1d\x88\xc4\x70\xac\xdb\xf5\xbe\x7a\xa7\x86\x06\x7a\x85\xf7\xf4\xd7\xe2\x6b\x09\xe1\xec\xb8\x69\x9a\x95\xba\x17\xed\x7d\x78\x79\xfa\x21\x21\xd4\x97\x1c\x20\x10\x05\xd7\xb1\x0e\x44\x62\x78\xd6\x55\x3a\xdc\x6a\x51\x2a\x62\x70\x94\xe6\x0a\x52\xa8\xda\xc0\x9a\x5a\xad\xf4\xe9\x01\xab\x75\x64\x5f\x7d\x09\x9f\x66\xf7\x5f\xb8\x00\x81\x28\xb8\x9e\x75\x20\x12\xc3\xb5\xee\xea\x57\x54\xb6\x62\x2a\x4b\xc6\xd9\xf3\x97\x29\xb2\xa7\x8a\x43\x43\x39\xe4\x6c\xbf\x67\xe5\x5e\x86\xbc\x0c\x1e\xdb\xac\x92\x68\x42\x20\x0a\xae\x6b\x1d\x88\xc4\xf0\xad\xd3\xce\xfe\xe8\xd2\x97\x28\x4e\xf8\x86\x13\x1c\x54\x6f\xf6\xcf\x1d\x19\x7a\xef\xb0\x60\xe7\x62\x19\xe2\xbc\x12\x7e\x9d\x7b\xe3\x16\x04\xa2\xe0\xfa\xd6\x81\x48\x0c\xe7\xba\x58\x2a\x87\x8f\x38\x50\x45\x79\x7a\x9b\xa7\x9e\xb7\x7b\xb3\x0a\xf8\x7a\x02\x75\x63\x54\x6f\x36\xca\xfe\x3c\xe7\xa7\x69\x2b\x06\x08\x44\xc1\x75\xae\x03\x91\x18\xde\x75\xb3\xbc\x6e\xa9\xf7\x77\xdf\xf9\x55\xb8\xf5\xf7\xdf\x24\x8c\x25\xbd\xa2\xa8\x6c\xf1\x79\x77\x28\x80\x98\xfb\x63\xfc\x1c\x0f\x88\x82\x40\x14\x4c\xef\xba\x7f\xc4\x74\xd2\x9b\xf9\x1f\x31\x61\xb8\xd7\x7d\x56\xfc\xcc\x86\xa2\x6b\x12\x24\x4a\x7c\xcc\xb8\x51\xaa\xc3\x1a\x20\x13\xfe\xa4\x46\x95\xab\xac\x7c\x71\xe9\xaa\x30\x7b\xad\x19\x04\xa2\xe0\xba\xd7\x81\x48\x0c\xff\xba\xe7\x75\x29\x0a\x8d\xf9\x1b\x88\x6a\x4d\xd6\xab\xdc\xf4\xdf\x9e\x14\x48\xf4\x36\xeb\x86\xfb\x7f\x6d\x37\xd0\xf2\xf5\xe5\xca\xb0\x83\x40\x14\x5c\xff\x3a\x10\x89\xe1\x60\x07\x45\xbf\x60\x94\x8e\x53\x7f\x30\xfa\x50\xab\xd6\x36\x74\x6c\xd3\xd7\x6b\xd4\x9d\x57\x14\x47\xe2\x5a\x46\xa2\x63\x61\x87\x29\x0b\x04\xa2\xe0\x3a\xd8\x81\x48\x0c\x0f\xbb\x76\x6e\x91\xdd\x36\x32\x2e\xdc\x4c\x83\x2c\x22\x9a\x1b\x04\xb2\x1c\xe7\x44\x35\x3e\x61\x85\xd4\xed\x9e\xc5\x5d\xb1\xe6\xb4\x39\x1a\x6d\xe1\x7a\xd8\x81\x48\x0c\x17\x3b\xff\xdb\xf9\x46\x85\xda\xf3\xa7\x3d\x70\x72\x1e\x55\x86\xf7\xae\x5b\xca\x7a\xea\x31\xab\xb3\x09\x3c\xf8\xa1\x15\xac\xde\x77\x09\x80\x40\x14\x5c\x17\x3b\x10\x89\xe1\x63\x07\x35\xc9\xdd\x3d\xaf\x3a\x13\x3b\xb8\x79\x70\x01\xf2\xd4\x90\xc0\x9b\x3c\x57\xc3\x47\x91\x60\x39\xb6\x61\xb4\x7b\x9d\x15\x71\x0e\x02\x51\x70\x7d\xec\x40\x24\x86\x93\x1d\x61\x24\xe1\xd2\xec\xa8\xbe\xf6\x7a\xde\x99\xd8\x8f\xf4\x76\xd5\x29\x55\x34\xda\xc9\xa1\x25\xc9\xa7\xd6\xc9\x0d\x0b\x8a\x9e\x0b\x42\x20\x0a\xae\x93\x1d\x88\xc4\xf0\xb2\xdb\x29\x6e\x53\x6d\xbb\xbd\x6b\x31\xf9\x6b\x50\xc2\x72\xf4\xe1\x0e\x19\xd5\xcc\xd6\xbb\x71\x59\xfc\xd7\x1d\xf5\xd7\xe4\x43\x8a\x89\x21\x10\x05\xd3\xcb\xee\x1f\x31\x9d\x34\x77\xfd\x47\x4c\x18\x66\x76\xa2\x9f\xcf\x2c\xbe\xd4\x38\x5d\x68\x50\xb4\x65\x59\xc0\x52\x6b\xca\xf9\x5e\x2c\x6c\x3f\x5b\x80\x25\x02\x87\xec\xc9\x1d\x73\x75\x1d\x08\x44\xc1\x35\xb3\x03\x91\x18\x6e\x76\x99\x6a\xa8\x8b\x93\x2e\x3b\x2c\x14\xb7\xf2\x71\x93\x24\x4c\x2d\xf0\xde\x0a\xdb\x67\x35\xe3\x63\x11\x52\x3f\xc4\x0e\x06\x2f\x92\x42\x20\x0a\xae\x9b\x1d\x88\xc4\xb0\xb3\xab\xda\x18\x34\x3d\xd0\xd7\x9c\x71\xfd\x64\x7d\xbd\x62\x44\x70\x0d\x77\x24\xfa\xd3\xbe\x77\xe4\xef\x54\x16\xd4\xc0\xe5\x2b\xa7\x1c\x21\x10\x05\xd7\xce\x0e\x44\x62\xf8\xd9\x55\x45\x8b\x76\x0f\xd8\x67\xae\xe2\x3c\x48\xad\x28\x88\xc4\xfe\x50\xf7\xe9\xab\x65\x61\xf2\xd2\xcb\x6f\x97\xfd\x6d\xfd\x62\x5a\x8e\xa6\x79\x70\xfd\xec\x40\x24\x86\xa1\x1d\xd1\xb9\x1b\x35\x94\xd1\x39\x83\x65\xef\xb9\xc8\x19\xfa\x1f\x3f\x6d\x21\xea\xf1\xfe\xfe\x73\xab\xb0\x81\x09\xb5\xcd\xb1\x7e\xf9\x12\x04\xa2\xe0\x1a\xda\x81\x48\x0c\x47\x3b\x57\x79\xee\x7a\x7e\xcd\xe1\x26\xf9\x8a\x5b\x1d\xe5\x59\xe9\x93\xcc\xb7\x3c\x95\xa5\x48\xe3\x59\xe7\xc1\x4b\xcc\xd7\x5e\xe5\x32\x42\x20\x0a\xae\xa3\x1d\x88\xc4\xb0\xb4\xe3\x53\x57\xd1\x1e\xa0\x44\xa8\x2f\x57\xab\x5d\x71\x12\x20\xd5\xbf\x59\xfa\x98\x03\xd7\xe5\xbb\x0a\x81\x9b\xac\x92\xc2\x99\x9b\x47\xcb\x07\xb8\x96\x76\x20\x12\xc3\xd3\x8e\xb8\xbe\xe0\x7c\x82\x83\x66\xaf\x61\x6d\x16\xbd\x41\xbb\x6f\x41\xee\x6a\x39\xb2\x58\x91\x63\x43\x2a\x78\xe9\xec\x12\x1b\x37\x35\x04\xa2\x60\x7a\xda\xfd\x23\xa6\x93\x56\x77\xff\x88\x09\xc3\xd4\xee\xf6\x98\xf5\x9a\x0c\xc2\x9a\x2a\x89\x24\x28\xf5\x9e\xd2\x9d\xe2\x68\xdb\x89\x5f\xa7\xaf\x5c\xc9\x6d\x97\xe2\x14\x77\xf1\xf0\xc0\x83\x40\x14\x5c\x53\x3b\x10\x89\xe1\x6a\x47\x8f\xfb\x3c\xad\x29\x9f\xa2\xb6\xfb\xeb\x55\xf3\xf3\x55\x7e\xac\x19\x1f\xd2\x0c\x0c\xdd\x58\xe8\x73\x28\x1f\x4f\x2c\xf6\xb6\xcb\x40\x20\x0a\xae\xab\x1d\x88\xc4\xb0\xb5\xa3\x3b\xdc\xd6\x10\x14\x25\xff\xd4\xc0\xc4\xcb\xe5\x7a\x17\xff\xe7\x81\xda\x4e\x9d\xc7\xbb\xe9\x65\xf2\x1d\xdb\xd8\x2a\x53\xd5\x53\x10\x88\x82\x6b\x6b\x07\x22\x31\x7c\xed\x6c\x82\x0c\x71\x8d\x48\x4d\x2f\xcc\x9b\x48\x3c\xfd\xb6\xff\x72\xff\x3a\xf6\xbe\x67\xf6\x37\xed\xa0\x24\x19\x9d\xa9\xe6\xbd\xbb\x02\x10\x88\x82\xeb\x6b\x07\x22\x31\x8c\xed\x26\x8d\x76\x1e\x2d\x4f\x51\x9c\x8e\x45\x9a\x32\x63\x89\x30\x0b\xc7\xd3\x2e\x11\xad\x4c\x19\x9d\x17\x64\xcc\x31\x9b\x1d\x13\xa1\x80\x40\x14\x5c\x63\x3b\x10\x89\xe1\x6c\xd7\x9e\x61\x1c\x1c\x25\x26\x5d\x01\xac\x1b\x16\x46\x98\x95\xe3\x2a\x93\xb1\xb8\x54\xf0\xbe\x53\xae\xeb\x9f\xbb\x8e\x47\xd1\x67\x0a\x81\x28\xb8\xce\x76\x20\x12\xc3\xda\x2e\xa6\x26\xef\x9d\xd1\x66\xa5\x2c\x40\x90\xab\x7e\x2b\xba\x85\x3f\xc8\xf8\x85\x90\xd1\x98\x5c\x5e\x69\x24\x43\x9a\xd4\x88\x10\x0d\x04\xa2\xe0\x5a\xdb\x81\x48\x0c\x6f\xbb\x4a\xfb\x94\xed\x80\x76\x17\xfc\xb0\x84\x9b\x66\x96\xaf\xde\xe5\x18\x1b\xe9\x89\x7d\xbf\x7c\x65\x85\xc7\xf2\xd3\x93\x92\x4c\x8b\xa3\xb7\x1f\x4c\x6f\xbb\x7f\xc4\x74\xd2\xfe\xc7\x3f\x62\xc2\x30\xb7\x53\x9a\x55\xe2\xe3\xbb\xf0\xec\x5c\x56\x60\xd0\xc3\xcb\x3b\x0d\xee\x49\xf8\x83\x79\xdb\xd1\xd3\x23\xca\xc5\xbf\x17\xfb\xa7\xcf\xd3\x42\x20\x0a\xae\xb9\x1d\x88\xc4\x70\xb7\x9b\x7b\xab\xcc\xbf\x32\x73\x17\x6f\xa7\x29\xd8\x44\xf7\xac\x75\xc7\xb8\xba\x04\xd7\x27\xc7\xee\x66\xe9\xdf\x66\x07\x5d\x1a\x57\x8e\x04\x0b\xd7\xdd\x0e\x44\x62\xd8\xdb\x45\x7a\xea\xce\x65\xd1\xea\xb6\x9c\x4a\xf9\x8d\xf0\xae\xf0\x0f\xbb\xff\xf8\x87\xf8\xc8\xbe\xba\xd2\x37\xb2\xa8\xb8\x8b\x46\x44\xdc\x10\x88\x82\x6b\x6f\x07\x22\x31\xfc\xed\xc4\x6c\x18\x4a\x22\xd7\x68\xc3\x6a\x2c\x73\x07\xd6\x2e\x2a\x7e\xe5\xe7\xce\x7a\xff\xfe\xda\x52\x0c\xb5\xc4\x41\x85\xc6\x6c\xc9\xd1\xf4\x08\xae\xbf\x1d\x88\xc4\x30\xb8\x3b\x53\xff\xf8\x83\xe6\xb8\x1f\xf9\x57\x4a\x63\xb9\xc6\x0a\xdb\x1f\x2a\xab\xcc\x9f\x28\x0b\x9e\xed\x0a\xa6\x7f\x79\xd0\x6e\xec\xc9\x0e\x81\x28\xb8\x06\x77\x20\x12\xc3\xe1\x2e\xaa\xb0\x74\x42\xca\x10\x90\x89\xcc\xe0\x0e\x08\x16\xe1\x5a\x1d\xa5\x35\xbf\xca\x7d\x4d\xd8\x34\x3f\xef\xb3\xff\x98\xae\xd5\x11\x03\xae\xc3\x1d\x88\xc4\xb0\xb8\x0b\xd4\xec\x1a\x84\x7c\xb2\x9d\x4a\x74\x07\xcc\x29\x35\xae\x99\x78\x14\x18\x5e\x84\x92\x89\x5e\xe1\x22\x13\xc3\x87\xfd\xc7\x8f\x66\x23\x70\x2d\xee\x40\x24\x86\xc7\xdd\x1d\x9a\x6d\x8f\x58\x5f\x9d\x0b\xcf\x56\xae\xf6\xdf\xd4\x08\x17\x8c\xf2\x1f\xe4\xb8\x73\x13\xf7\x27\x7d\x77\x6f\x96\xa6\x58\xe6\xd1\xf2\x01\xa6\xc7\xdd\x3f\x62\x3a\x69\x87\xf0\x1f\x31\x61\x98\xdc\xb5\x33\x2a\x13\x66\xf9\x8e\xb9\xe0\x5d\xb8\x69\x7e\x86\x60\x6d\x59\xbe\xa0\xd2\xdd\x60\xdf\xa7\x7e\x32\x99\x0e\x97\xa6\x76\xf7\x36\x04\xa2\xe0\x9a\xdc\x81\x48\x0c\x97\xbb\x95\x55\x53\xb9\xcf\x5c\xf6\x11\x74\x2b\xda\x85\x6e\x9d\xe4\x09\x1a\xf1\xba\x8a\x61\x76\x89\x5e\x1f\xac\x9c\xf6\x58\x3a\x47\x8f\xd6\x1a\x70\x5d\xee\x40\x24\x86\xcd\x1d\xaf\x5c\x67\x7d\x3a\x45\x4d\xe1\xdd\xcb\x57\xcc\x58\x1c\xe9\xc9\x76\x4e\x3d\x2c\xea\xd5\xfe\x1e\x7e\xc6\xe4\x13\xd6\xc3\xdf\xac\x47\x6f\x26\xb8\x36\x77\x20\x12\xc3\xe7\x4e\x00\xa5\x53\x3c\x2c\xcc\x18\xf0\xf3\x74\xfb\x45\x61\x5e\x85\xf9\x73\x2f\xc6\x65\x35\xc6\x5b\xcc\x1f\x05\x8e\xad\x1b\x0d\x7e\x31\x81\x40\x14\x5c\x9f\x3b\x10\x89\x61\x74\xf7\xea\xfd\xf8\x8f\xa2\x5a\xba\x17\x5d\xd8\xd6\xe7\x9d\x5a\xb5\xca\x1a\x12\x3e\x3e\xac\x50\x77\x29\xf3\x28\xfc\x60\xc3\xff\xd6\xd8\x00\x02\x51\x70\x8d\xee\x40\x24\x86\xd3\x1d\xee\x25\x06\x6d\x72\x26\x3f\x4f\x62\x6b\xd9\xab\x0b\x81\x24\x24\x85\xc2\x14\x0f\x6f\x8f\xde\x1b\x7d\xaf\xd8\x05\xc9\x99\x91\x9e\x87\x40\x14\x5c\xa7\x3b\x10\x89\x61\x75\xd7\x59\xf6\xb8\x9d\x48\x4e\x4c\x93\x20\x01\xf5\xb1\x9b\xeb\xeb\x15\x13\xc9\xb9\x5e\xca\xdc\x45\x24\x1d\x30\xff\x7a\xa7\xac\xe1\xa8\x5f\xc1\xb5\xba\x03\x91\x98\x5e\x77\x74\xe7\x6a\x2d\x83\x26\xaf\xec\x68\xfb\x92\xb2\xf1\xe4\x6c\xf1\x78\xbf\xae\x5e\xd3\x79\xcc\x89\xb5\x58\xd2\xdb\xe1\x7a\x56\x15\x02\x51\x30\xbd\xee\xfe\x11\xd3\x49\x7b\xe8\xff\x88\x09\xc3\xec\xae\xc0\xc5\x27\xa6\xb3\xc2\xf6\x26\xc2\xcf\x73\xd4\xf6\x3d\xe5\x48\x25\x15\xca\x95\xf0\xeb\x37\x9e\x6b\xfd\x57\x47\x48\x38\x27\xf5\x20\x10\x05\xd7\xec\x0e\x44\x62\xb8\xdd\x79\x6e\x25\xfa\xa4\x64\x34\xbe\xf1\x7a\xfa\x95\x83\x8d\x31\x79\x80\xeb\xa5\xeb\x1c\xb1\x9f\x89\x73\x3c\xad\x26\xfb\x78\xca\x6d\x69\x08\x44\xc1\x75\xbb\x03\x91\x18\x76\x77\x82\xe4\xbc\x7a\xbb\x0d\xa9\xae\xb5\x66\x0c\x61\x64\xc1\xfc\x42\x5b\x59\x6e\xc3\xde\xe7\x1a\x3f\xe1\x08\xe4\x39\x3c\x7b\x63\x2e\x04\x81\x28\xb8\x76\x77\x20\x12\xc3\xef\xce\x32\xab\x69\x5f\x35\x41\xfe\x96\x7b\xe3\x47\xf7\x36\x27\xb9\xcb\xbb\xb6\x44\x32\x8f\x9c\x02\x9c\x36\x08\xba\x00\xd9\xa0\x46\x36\x08\x44\xc1\xf5\xbb\x03\x91\x98\x86\x77\xbe\xd8\xef\x43\x7c\xe2\x3d\xf2\x03\xbe\x51\x34\x90\x75\x4a\x76\x50\x2f\x72\xb4\xb8\x09\xd3\x3b\x9a\x11\x7a\xe2\xfa\x8b\x60\x41\x20\x0a\xae\xe1\x1d\x88\xc4\x70\xbc\x6b\x7f\x11\x4d\x32\x40\x1a\xa1\x5d\x62\x23\xce\xfd\xf4\x55\x24\xbe\x43\x72\xc7\x2b\x61\xc6\xb2\x96\xd3\x83\x2e\xc5\xab\x56\xed\x52\x10\x88\x82\xeb\x78\x07\x22\x31\x2c\xef\xf0\x38\x9a\x45\x57\x47\xa8\x95\x91\x5a\xb3\x46\xbc\x3a\x75\x7e\x3b\x7a\x8c\x00\x5d\xa7\x94\xdb\xe5\x09\x39\x76\xfa\xbe\x14\x61\x08\x44\xc1\xb5\xbc\x03\x91\x18\x9e\x77\xb1\xaa\x2f\x65\x48\x7c\xf7\xcf\x2d\x4b\x2c\x52\x9d\x11\xfc\x11\xf8\x81\xdf\x3e\xef\x07\xc2\x66\x5a\x17\xe2\x77\xfe\x6c\x98\xcd\x0b\x81\xa8\xbf\xf4\xbc\x53\x2a\x59\x38\x8c\x39\x8c\xa2\x65\x55\x9c\xc8\xc0\x87\xa6\xb7\x23\x6a\x27\x36\xf8\x33\xe6\x84\x55\x8c\xf4\x66\xea\x1e\x6c\x04\x60\x1c\xf6\x9d\xa3\x0f\x2e\x2b\x3a\x1b\x5e\xee\xe3\x7b\x7f\xe7\x8c\x11\x8a\xc7\xd7\x27\xa3\xbe\x26\x59\x32\x3f\x37\xcd\x40\x27\xf8\x5d\xcd\xf1\xaf\xdd\x52\x6b\x9b\x49\x79\xc5\x11\x6b\xdd\x07\x2f\xb5\xf6\xcc\x71\xf0\xb8\x65\x28\x3a\xda\x5e\x87\xe3\x74\xdc\xef\x9d\xce\x1e\x0f\x52\x3b\x16\x4a\x0a\x59\x64\x3a\x7f\xa8\xcd\x0f\x3b\x5c\x33\x5b\x51\x68\x7a\x9e\x7f\xa3\x4f\xb6\xa5\xd3\xdc\x4a\xf9\xb5\xe1\xfb\x92\x7b\xd8\xe7\x8f\x85\x86\xdf\xf5\xd0\x96\x7c\x96\x82\xf4\x79\x91\xed\x27\xac\x3d\x3a\xd4\xf2\x8d\xbc\xcf\xf5\x51\xf8\x35\xf6\xb3\x07\x96\xca\x1c\x03\x32\xc7\x42\xe9\xc9\xec\xcf\x6a\xba\x2a\x80\x02\xe7\x7f\x38\x8b\x70\xc9\xa6\xde\x6c\x48\x50\x16\x32\x45\xd9\xbd\xd4\x33\xed\x1a\x72\xb0\x79\x7e\x2c\x54\x4a\xad\xab\x41\x81\xbd\x63\x89\x62\x81\x72\xc2\x7d\xb4\x22\xcf\xea\x26\x4e\x4e\x5b\x2c\x9b\x08\xf1\x5e\x1f\xe4\xec\x3a\x6d\x74\x2c\xd4\x68\x6d\x79\x6d\xc9\x3e\xac\x76\x69\xfe\xd2\x57\x87\xaf\xd9\xe3\x86\x94\xae\xa5\x8f\x18\x7a\xc8\x9f\x15\xb5\xdd\x4e\x7f\x83\x7a\x7f\xfc\x77\x8e\xea\x56\x14\x2c\xf1\x72\x5b\x53\x14\x2e\x0a\xdf\x7e\x9e\x42\xff\x53\x70\x85\xfd\xf6\x74\x27\xc3\xe8\x97\xe8\x58\x5e\x5b\x86\x5f\xff\x3b\xec\x3b\xa9\x55\xff\x19\xd1\x30\x4c\xef\xde\xf1\xa5\x31\x57\x4c\x2b\xc8\x66\x17\x64\xa9\x1a\x90\x84\xe6\xce\x9f\x17\xd7\x0b\xd1\xf5\x67\xbf\x74\xd1\xbf\x4c\xac\xf2\x12\x3f\x04\xa2\xe0\x9a\xde\x81\x48\x0c\xd7\x3b\x9a\xf8\x32\x32\x1e\xba\xec\x17\x0b\x32\x66\xce\x2d\x04\x51\xf1\x92\xe2\x7e\x4b\xf2\x5d\x46\x8e\x12\x9e\x52\x9a\xf5\x31\xbf\x14\x20\x10\x05\xd7\xf5\x0e\x44\x62\xd8\xde\xc5\x56\xe8\xc6\x1a\x9f\xef\x6c\x32\xcd\xca\x21\xa9\x76\x64\xd5\x10\xc4\xdb\xb8\x59\xb7\x8e\x4c\x08\xcd\x89\xd8\xe4\x70\x29\x93\x85\x40\x14\x5c\xdb\x3b\x10\x89\xe1\x7b\x47\xf7\x62\xa5\xc4\xb3\x04\xcf\x8e\xe0\x93\x17\xe9\x97\x7d\x81\xb1\x1a\x2e\x63\x42\xc3\x0b\x10\xeb\x1c\xae\xc8\xcc\xc8\x03\x55\x23\x08\x44\xc1\xf5\xbd\x03\x91\x18\xc6\x77\xd7\x87\xf6\x96\x5c\xb6\x02\xc6\x76\xe3\x05\x38\x42\x3f\x8a\x20\x51\xac\x05\xbc\x9e\xcc\xed\xb2\xdf\xbb\x3f\x58\xb6\xa9\xbc\x3d\x7a\xe5\xc1\x35\xbe\x03\x91\x18\xce\x77\x5e\xb2\xba\x6b\x96\x3e\x0f\x2c\x9e\x1b\x8d\xb0\x02\x7d\xd7\xc5\xd7\xd5\x2d\x3a\x9b\xdd\xe6\x96\x63\x4a\xce\xd5\xb1\xbb\x5a\x1e\x8d\x68\x70\x9d\xef\x40\x24\x86\xf5\x5d\x69\xdc\x8f\xa6\x07\x52\xd3\x23\xc8\xdb\x0b\x5a\x0d\xe9\x56\xc3\x8c\x7d\x23\x2c\x4f\xc4\x1a\x6e\xce\xd0\xef\x63\x13\x3d\x55\x36\x84\x40\x14\x5c\xeb\x3b\x10\x89\xe1\x7d\x37\xf0\x6c\xa2\x47\x72\x62\x96\x53\x23\xf4\x23\xc3\xe9\x49\x6b\x95\xdf\x51\x0b\x92\xc5\x04\x91\x87\xf7\x16\x2b\x1f\xff\x8a\xff\xff\x38\xbb\xef\x78\x2c\xdf\xff\x7f\xfc\xce\xd3\xb8\x4e\x23\x64\xd5\x81\xec\xbd\x37\x65\x25\x3b\xa3\x65\x67\x46\x11\x59\x91\x48\xc3\x49\x56\x46\x19\x19\x91\x06\x49\x25\x84\xec\xbd\x89\xc8\x5e\x49\x29\x4a\x56\x94\x8c\xe4\x77\xbb\x3e\xbf\xaf\xf7\xad\xdb\xf9\x8f\xdb\xf9\xfa\xff\xf9\x87\xeb\xbc\xae\xc7\xf3\x78\x1e\xc7\x71\x73\xde\x25\x8e\xa3\x80\x80\xd3\xbe\xdb\x09\xd3\x6e\x7d\x67\x27\x4c\x18\xfc\xce\xa9\xcc\x20\x59\x64\xfd\xcb\xf5\xf5\x4b\x31\x65\xa7\x65\x8f\x6b\x8e\xdf\x55\xc9\x7b\xf3\x77\x81\xfb\x30\xc7\x5d\x61\x1a\xb7\x6b\x4e\x28\x20\xe0\xc5\xef\x00\x84\xd1\xef\x4c\x8a\xb6\xcc\x97\x5e\xd9\xbe\x32\x5f\xba\xbf\x5f\x5b\xe4\x4b\x77\x6b\xc9\xf6\xc0\xf3\x37\x8d\x14\x4f\xaa\x17\x6b\xa9\xcf\x2a\x11\xc3\x84\x57\xbf\x03\x10\x86\xbf\x63\x75\xa3\x48\x71\xbf\x49\x72\x66\xdf\xad\x3f\x65\x7c\x3a\xf9\x2f\xeb\x99\x8b\x54\xb6\x2b\x92\xe8\x74\x62\x5c\x9d\x47\xaf\x6b\xba\xa1\x80\x80\x97\xbf\x03\x10\xc6\xbf\xbb\xf1\x49\x66\x31\xa6\x20\xfa\x8c\xcc\xdb\x64\xee\xbf\xbe\x19\x7a\x9c\x17\x7c\x03\xa8\xb7\xd8\x84\x45\x8a\xa2\x2b\xbc\x0e\x8a\xc9\xa3\x80\x80\xd7\xbf\x03\x10\x06\xc0\x3b\x0b\x3b\xe4\xed\x71\x6d\x35\x79\x26\x07\xaa\xdf\xeb\xf3\xeb\xde\xe8\x7f\xf8\xd8\xce\x5c\x28\x2e\x65\xbb\x8e\x4f\x4f\x25\x03\x42\x01\x01\x2f\x80\x07\x20\x8c\x80\x57\xe2\xcb\xc0\x91\xfd\xf0\x09\x9f\x90\xd7\xf8\x5c\xb3\x6b\x43\xc3\xc7\x5f\x9f\xa4\xaa\x4c\x26\xcf\x5e\x38\xbb\x98\xa9\x80\xda\x19\xa1\x80\x80\x57\xc0\x03\x10\x86\xc0\xeb\x8d\x39\xbc\x65\x64\xf3\x35\x81\xd9\x6b\xa1\x4a\x7a\xa8\x47\x30\x20\xeb\x56\x56\xeb\x74\xde\x1c\x99\xfe\xfd\x99\x4d\xbb\x2f\xc4\x71\x0d\x2f\x81\x07\x20\x8c\x81\xf7\xe3\x8a\xfc\xd2\xb8\x99\x78\x32\xcb\x22\xdd\xab\x2e\x9e\x8b\xa3\xbe\xfc\xd6\xf9\xe9\x07\x26\x78\x2e\x99\x5e\xac\x30\xf8\x76\xf5\x04\x0a\x08\x38\x0d\xbc\x9d\x30\xed\xb6\x32\xef\x84\x09\x83\xe0\x5d\x7f\x38\xaf\x2f\xcc\x54\x9c\x79\x93\x87\xd2\xea\xf4\x49\xe9\x10\x21\x89\xb2\xb7\x06\x5c\x4e\xb4\xb1\xf1\xc2\x3a\x8c\x36\x3d\x7a\x28\x20\xe0\x45\xf0\x00\x84\x51\xf0\x4e\x1c\x0d\x5f\xb5\xbf\x0d\x6b\xfe\x71\x88\x51\x8d\xbf\x34\x16\xda\x33\x08\x22\x55\x19\x5a\x5f\xad\xab\xbb\xd7\xca\xa4\x12\x88\x9b\x4a\xbc\x0a\x1e\x80\x30\x0c\xde\x61\xa6\x80\x73\xca\x79\xfe\x27\x2a\x7b\x14\x3e\xd1\x5a\xd2\xd4\x1c\x32\xd7\x9c\x5f\xbc\xd5\x78\x65\xbe\x78\x80\xcb\x71\x6f\x8c\x3a\x0a\x08\x78\x19\x3c\x00\x61\x1c\xbc\x75\x96\xd7\x8e\xc1\x46\x64\xe3\xcf\x7a\xbd\xf6\x4d\x8b\xea\x39\xfb\xdc\x60\x78\x7b\xa3\xda\x63\x73\xb5\x9c\xd7\x3f\x94\xeb\x9e\x0a\x0a\x08\x78\x1d\x3c\x00\x61\x20\xbc\xcb\x51\xc2\x5c\xa7\x95\xd9\x5b\x6a\xf5\xaa\x16\x37\x1d\x9d\xc5\x38\x3f\x44\x6e\xd1\x70\x67\x65\x5a\x1e\x54\xd7\x5b\x40\xab\x89\x9f\x03\x2f\x84\x07\x20\x8c\x84\x67\xc7\xe3\xdf\xd6\x4a\x2d\x77\x58\xf0\x87\x68\xc6\xf3\xbb\xd7\xc5\x6c\xf6\x55\xb6\xcb\xd1\xd0\x6d\xc7\x8a\x0e\x50\x73\x2c\x76\xba\xa3\x80\x80\x57\xc2\x03\x10\x86\xc2\x4b\xe6\xd7\x12\x95\x6e\xf3\x8b\xd4\xfe\x45\x92\x25\x7b\x00\x99\xe8\x2d\xdc\x2f\x62\x5d\xad\xf8\xeb\xa6\xff\xef\x5f\xec\xac\xb1\xc4\x06\x8a\x97\xc2\x03\x10\xc6\xc2\x93\xb0\xd3\xb1\x8e\x5a\x99\x92\x8c\xb8\x3c\x5d\xdb\x3b\x79\x9a\x59\x34\x9f\x36\x90\xc6\xc8\xd6\xc6\x64\x3b\x94\x2d\x78\xf8\x2e\x71\x52\xc0\x69\xe1\xed\x84\x69\xb7\xd9\x75\x27\x4c\x18\x0c\x8f\xa9\x4f\xda\xdb\x73\x4f\x9e\xba\xbb\xc4\x66\x22\x55\x00\x38\x32\x18\x3e\xec\x32\xa7\xf2\xf6\x93\xa0\xe7\x9f\x4d\x86\x1e\x49\x5d\x14\x10\xf0\x62\x78\x00\xc2\x68\x78\x0f\x28\x49\xeb\x17\x84\x22\xdd\xa4\xe7\x64\x38\xf7\x66\x0e\xec\xa9\xd6\x18\x2c\xb9\x3f\x21\xf3\xac\xf1\x78\x39\x7f\x5e\xef\xeb\x7d\x28\x20\xe0\xd5\xf0\x00\x84\xe1\xf0\xee\x1b\xd1\x53\x98\x51\xbc\xe7\x50\x53\x03\xc1\x57\xf2\xe2\x3e\xf4\xef\x99\x90\xe0\xf3\x2d\xfd\xac\xf5\xd8\xc2\xea\xb7\xc7\xff\x9d\x02\xe1\xe5\xf0\x00\x84\xf1\xf0\x0e\x47\x2d\x7e\xef\x5e\xb0\xe0\x9d\x08\x2e\xbc\x16\x7b\xc3\x22\x7f\xf2\x0b\xdf\xb5\x24\x85\x8e\x8f\x4d\x72\xd5\xe6\x57\xce\x9d\x76\x40\x01\x01\xaf\x87\x07\x20\x0c\x88\xa7\xc5\x6c\xd3\x41\x97\x47\x5a\xb3\x72\x5e\xdb\x59\xcf\xc9\x39\x5c\xbd\x8a\x5d\x70\xab\xae\x15\xdd\xeb\x23\xb6\x2d\xad\x76\xcc\x02\x05\x04\xbc\x20\x1e\x80\x30\x22\xde\x9f\xdf\x45\x9c\xd1\x8e\xec\x92\x31\xd6\x57\x7b\x9e\x1c\xc9\x89\xf7\xfc\xf1\xbe\xc7\xa8\x52\x34\x8a\x2d\x5e\xd9\xef\x7a\xcc\x0f\xe2\xaa\x81\x57\xc4\x03\x10\x86\xc4\xeb\x53\xfd\x65\xa5\xde\x23\x20\x41\x55\x47\x5e\xbf\x72\xcf\xc9\xb5\x26\x9a\x3e\xbd\x6d\x70\x23\x91\x7e\xbf\xe6\x45\xe5\xcf\xc7\xb8\x50\x40\xc0\x4b\xe2\x01\x08\x63\xe2\xe9\x19\x6f\x16\x6e\x46\x34\x94\xca\xc6\xf9\x7f\x5b\x93\x3e\xf0\xd0\x91\x94\xae\xb5\xd5\x57\x4e\xd5\xc9\xd1\xd0\xcd\xd2\x0e\x92\x41\x01\x01\xa7\x89\xb7\x13\xa6\xdd\x76\x77\x3b\x61\xc2\xa0\x78\x25\x5b\x8c\x6b\x57\xfa\x9a\xe9\x1f\x93\xdc\x9f\xc8\x2a\x33\xe0\x29\xe5\x14\x9c\xb7\x0b\xb4\xb4\x2e\x77\x38\x7c\xa5\xa4\x5b\xf3\x3c\x0a\x08\x78\x51\x3c\x00\x61\x54\xbc\x35\x42\xb0\xbf\x02\xc9\x62\x93\x7a\xcf\x79\x1e\x66\x31\xc3\xbd\x3e\x04\x73\xaf\x00\xca\x02\x7b\x8f\xb5\xaf\xa3\xe3\xa5\xbe\xa7\x50\x40\xc0\xab\xe2\x01\x08\xc3\xe2\x2d\x96\xc7\x0d\x30\xb8\x73\x1b\x54\xc5\xb2\x8c\x54\x18\xdb\x58\x5d\xcf\x4a\xca\xda\xfa\xe6\xd5\x2b\xdb\x30\x3a\x2a\xa6\xaf\xef\x89\x02\x02\x5e\x16\x0f\x40\x18\x17\x8f\xa2\x97\xe0\x35\xae\x57\x75\xb4\xfe\xe7\x01\xa9\x33\x97\x32\xcf\xd6\xf1\x3f\xd0\xb0\xaf\xe9\x69\x18\x5a\x71\x23\xbb\x56\x3d\x49\x5c\x35\xf0\xba\x78\x00\xc2\xc0\x78\xa5\x27\xb4\xdd\xa3\x4d\xf6\x74\x9c\xaf\xa4\xce\xfe\x2d\x63\x2a\x2a\xef\x17\xf8\x8c\xf7\xdc\x13\xa7\xf9\x6e\x7e\xf2\xac\xe3\x14\xe2\x28\x20\xe0\x85\xf1\x00\x84\x91\xf1\xee\x22\x3e\xd6\x49\x5b\xe7\x24\x54\xed\x4e\x5d\xd4\x35\x3e\xbc\x55\x66\x7b\x6f\x01\x4a\x22\x13\x2c\xab\x4f\x2d\x70\x2b\xec\xd5\x40\x01\x01\xaf\x8c\x07\x20\x0c\x8d\xc7\xa3\xef\x6d\x6f\xc3\x1b\xbd\x7d\xe5\xd5\x3e\x2b\x51\xd6\x89\xd8\x35\xdd\x88\xa8\xab\xe4\xba\xb2\xd9\x0c\x7d\xec\xc5\x83\x3f\x98\x50\x40\xc0\x4b\xe3\x01\x08\x63\xe3\x7d\xde\xa6\x2d\x38\x6f\xcf\xb1\x72\xd5\x47\x8a\x4a\x1b\x5e\x6d\x39\xfd\x85\x01\xad\x9f\x4d\xaf\xf8\x4e\x22\x7b\x51\x61\x4d\xc7\x1c\x05\x04\x9c\x36\xde\x4e\x98\x76\x3b\xff\xd8\x09\x13\x06\xc7\x93\xcd\x6a\x05\xdd\xdb\xb5\x47\x87\xdd\x3c\x38\x34\xe8\xb7\xc2\xed\x21\x2e\x85\x83\xb4\xa7\xa6\xe1\xb0\x85\x80\x79\x3a\xf8\x02\x0a\x08\x78\x71\x3c\x00\x61\x74\x3c\x31\xb7\x9a\x7d\x4f\xf2\xa0\x1f\x0b\x1b\xc5\x85\x54\xa6\x23\x0f\x3f\xcc\xaa\x64\x7c\xe4\x89\x6c\xf1\xd7\x97\xe0\xfa\x20\x20\x4f\x81\x02\x02\x5e\x1d\x0f\x40\x18\x1e\x8f\xb3\x74\x70\x4d\xb4\xb7\x2d\xcc\xe9\xfc\xeb\x35\xd5\xa7\xb3\xcf\x3e\x66\xc7\x06\xad\xc1\x26\xf9\x0b\xea\x8c\x73\x7d\x27\x9f\x13\x97\x7c\xbc\x3c\x1e\x80\x30\x3e\x5e\xe9\xd0\x03\xfa\xc3\x16\x4a\xdd\xe6\x6a\x8a\x27\x8d\x85\xb7\xf8\xb9\x85\xd9\x4a\xac\x4c\x8f\x70\xfb\x8d\x0e\xc6\x91\x47\x66\x1a\xa2\x80\x80\xd7\xc7\x03\x10\x06\xc8\x53\x13\x56\xa6\x71\x2f\x1e\xef\x97\x3f\x38\x03\xd1\x91\x70\x93\x35\x65\xec\x07\x6c\x87\x4f\x8a\x66\xf7\x9f\x57\xbd\x55\xff\x93\xd8\x6d\xf1\x02\x79\x00\xc2\x08\x79\x6f\x5f\x2f\xd8\x49\x19\x9c\xce\xce\xe7\x3f\x36\x17\x77\x44\xe7\x7b\x3d\xed\x5f\xe9\xfd\x2d\x07\x07\x03\xe0\x34\x6d\xce\xe0\xc3\xfb\x51\x40\xc0\x2b\xe4\x01\x08\x43\xe4\xbd\x66\x37\x4b\x7d\xe7\xf2\xe0\xd5\x95\x62\x7e\x56\xf1\x69\x83\x63\x35\x0f\xf8\x1e\xcc\x29\x78\xc0\x35\xa1\x3f\xdd\x7a\x64\xd3\x89\x4d\x1a\x2f\x91\x07\x20\x8c\x91\x97\xe3\xd1\xf4\x28\x5b\xdd\xcb\x94\xd9\x39\x94\x56\xc9\xad\xf9\x2b\x69\x6e\xb6\x55\x89\xd8\xad\x87\xe2\x4c\x99\x42\x37\x8c\x2d\x58\x51\x40\xc0\x69\xe4\xed\x84\x69\xb7\x13\xc2\x9d\x30\x61\x90\xbc\x77\x2c\x36\x47\x27\xfd\xab\xd4\xcf\xdf\x71\x09\x56\x52\xd1\x6c\x70\xb7\xfd\xf9\x8b\x40\xbb\x70\xac\xdf\x6a\xba\x54\xd8\x46\x87\xd8\xd1\xf1\x22\x79\x00\xc2\x28\x79\x3c\x77\x3d\xbc\xf8\x0d\xc7\xdd\x23\x59\x12\x45\x59\x7c\xb3\xeb\xdb\x1d\xc8\xa0\x0e\xa5\xb5\x79\x4b\x6d\x0d\x09\x11\xea\x0c\x62\x97\xc2\xab\xe4\x01\x08\xc3\xe4\x79\xcb\xe4\x27\x3c\x88\xf9\x90\x26\xea\x70\x67\xdb\xc1\xb0\x9f\xa5\x0b\x6d\xe5\xab\x3a\xd2\x1d\x7c\xcc\xf3\x39\xc8\xbc\xb4\x48\x8f\x02\x02\x5e\x26\x0f\x40\x18\x27\x6f\x25\xfd\x98\xfa\x4b\x0e\x21\x57\xa0\x93\xfd\xdc\xe6\xbb\xa6\x2d\xfb\xe5\x80\x88\x97\x9d\xd1\x29\x0c\xa9\xe9\xf9\x93\x5b\x62\x24\x28\x20\xe0\x75\xf2\x00\x84\x81\xf2\xa2\x62\x45\x2f\xf1\x66\xaf\x93\x86\xaf\x73\x7a\x9b\x69\x6f\x9c\x48\xd6\x39\x99\x4a\xc2\xea\xab\x7b\x02\x96\x5a\xb1\x16\x1c\x21\x6e\xaa\xf1\x42\x79\x00\xc2\x48\x79\xc3\xfd\x24\xf9\x07\x34\xc2\x2f\x48\x54\x25\x06\xe7\x6e\xfc\x1c\xf2\x2a\x77\x9a\x88\xd0\x32\xe2\x5a\x2b\x2a\xac\xf5\x3d\x5f\x8b\xa0\x80\x80\x57\xca\x03\x10\x86\xca\xf3\xa5\x91\xfe\x28\x37\x66\xbf\x22\x68\xb3\xd6\x75\xad\x51\xe0\x6f\xc7\xaf\xd8\xe2\x10\xfa\xc8\xb6\x26\xd6\x27\x52\xc6\xb1\xd9\x47\x51\x40\xc0\x4b\xe5\x01\x08\x63\xe5\x4d\x41\x64\x9d\x22\xcf\xff\x3a\xff\x8a\xb6\xd3\x4b\x7a\xcb\xc4\x70\xd7\xfd\xfb\x5d\xc3\x50\xc2\x45\xb5\x4b\x26\xb5\xa2\xe1\xf7\xc5\x50\x40\xc0\x69\xe5\xed\x84\x69\xb7\x33\xf4\x9d\x30\x61\xb0\x3c\x19\x9a\xfd\x63\x65\x8b\x91\x95\xc3\x49\xaa\xd2\x83\x13\x66\x5c\xbc\x64\x35\x49\x54\x7b\x2e\xe9\x6a\xee\xfb\xda\x76\x73\x04\x21\x7e\x68\xbc\x58\x1e\x80\x30\x5a\x5e\x56\x97\x60\xdd\x1d\xa1\x37\xf4\x5c\x31\x72\xc5\x33\x50\x6a\xa0\xd5\xe3\x43\x94\xb5\x2d\x37\x5e\xba\x8d\x08\x7e\x94\xd7\xa6\x11\x42\x01\x01\xaf\x96\x07\x20\x0c\x97\xc7\xa3\x77\x10\xbd\xe4\xba\xda\xd6\xc1\x2d\x33\x51\xbe\x52\x35\x2b\x2d\x1f\x11\x7b\x99\x5a\xf6\xe7\x18\xc3\x9e\x9a\xc2\xa8\x60\x7e\x14\x10\xf0\x72\x79\x00\xc2\x78\x79\x86\xfa\x2f\x6a\xee\x0c\xe4\x98\x8b\x6e\x1c\x7e\x0a\xf5\xf3\x1f\xa3\x70\xac\x7b\x74\x78\xf6\xc8\x00\xa4\xba\x76\x8c\x6b\xa9\x90\xb8\x6a\xe0\xf5\xf2\x00\x84\x01\xf3\xa8\x5b\x06\xb4\xa8\x48\x6e\x64\x94\xff\xcd\x7b\x18\xf6\x28\xae\xfd\x7a\xc7\x02\xc9\xf9\x58\xfd\x7c\x06\xe3\xb3\x62\x8b\x83\x6e\xc4\x31\x0f\x2f\x98\x07\x20\x8c\x98\x47\x9e\xf5\xed\x51\x49\x3e\xd7\xf9\x54\xde\x80\x2f\x0a\xd5\x7e\x7a\xeb\x94\x4b\x97\xde\xad\x98\x67\xc9\x5f\x9f\x27\xef\x69\x36\x92\x47\x01\x01\xaf\x98\x07\x20\x0c\x99\x27\x29\x21\xdb\x9c\x67\x3b\x21\x73\xaa\x45\xd3\x62\xe0\x66\xd7\xe8\xc3\x83\x0f\xf4\x6f\xbd\x68\x52\xf1\xf8\x18\x73\xab\x9a\x90\x21\x8d\x02\x02\x5e\x32\x0f\x40\x18\x33\xaf\x9e\x8e\x25\xa5\xe3\x34\xe1\xed\x34\xdd\xc6\x85\xf7\x42\x8d\xfd\x6c\xbc\x23\xc6\xfa\x8d\xbf\x42\x84\x5d\xe8\x03\x3b\x7b\x60\x41\x14\x10\xfe\xa3\x99\xb7\x6d\x54\x4b\xdf\x73\x91\xf9\xfd\xd6\xa1\x07\x06\x1e\x51\xad\x85\xa6\x9f\x1e\xdf\x9a\xf8\x23\xc7\x70\xcb\x3f\x93\x31\x23\x7c\x55\x1a\x73\xd9\x27\x41\xe7\x4e\x5e\x41\xa0\x1e\x75\x08\xce\xb6\x92\x08\x66\xe5\x8b\x78\x6e\xde\x75\xcf\xaf\xac\xea\xf7\xf7\x96\xee\x19\x5b\xab\x92\x7f\x4a\x53\xdd\xdb\x66\x87\x2f\x5c\xbe\xc7\xab\xa0\x35\x67\x70\x3e\x4d\xf5\xa3\x11\xf9\x5c\x05\x7c\xb6\x61\xee\xed\x97\x99\x3e\xb8\xfd\xc8\x3f\xa5\x69\x2f\x35\x33\x3e\xfd\x0d\x4a\x94\x58\x3f\x76\xc7\xed\xab\xca\x19\x81\x12\xd3\x13\xcd\xc6\x35\xcc\xd7\xf8\xe6\xd5\x6a\x54\x14\x59\xfe\x85\xf0\x06\xfe\x14\x21\x1b\x67\xa7\x94\x96\x1a\xfb\x58\x2c\x5a\x58\x86\x6c\x5c\xa5\x4a\xc8\x87\x25\xdd\x55\x6c\x7a\x3e\xcf\xd1\xbb\xfe\x53\xfa\xd9\xab\xad\xc7\xb4\xd7\xe0\x71\xd8\x83\x43\x35\x4f\x4c\x23\x48\x22\x87\xbb\x9f\x51\xf1\x3f\xb2\x5d\xd4\x0d\x8b\x7d\x7b\x6b\x38\xfa\x9f\xd2\x0e\x21\xfd\xe7\x3d\xb3\xcf\xc6\x83\xe4\x38\xdf\x9f\x3c\xfa\xa5\xf6\x01\x09\x53\xbe\xd3\x97\x69\x97\xbf\xec\x43\x8c\x16\x03\xcf\x4f\xfe\xfb\x22\xd2\xb6\x4c\x0b\x91\x6d\x69\x7d\x6f\xa1\x1f\x1f\xb2\x99\x1b\x4e\x2f\x8f\x2e\x56\x5d\x51\x9c\x3d\x23\x3a\xe3\x2d\xfe\x29\xea\xcf\xbf\xff\x85\x98\xf0\x3d\x61\xc9\x4f\xff\xba\x34\x7f\x77\xb1\x96\xe3\x3b\x8a\x05\xd1\x03\x89\x07\xc4\x06\xcf\x97\x0e\x66\x2d\x94\x21\x7b\x29\x68\xff\x77\xd9\xb7\xdb\x53\xdd\xe9\x68\x18\x34\x6f\x94\xd3\xff\x6d\xa4\x77\xcd\x7b\x6d\xc5\xab\x5f\x5f\x36\x2b\x5d\xd3\x18\xf7\x1f\x43\xea\x0e\x20\x3d\x3f\x1c\x0f\xd3\x6b\x90\x71\xa3\x80\x80\x17\xcd\x03\x10\x46\xcd\x5b\xff\xfc\xe0\xda\xbb\xe9\x55\x97\xd2\x9f\xa7\xf6\x7a\xff\x18\x98\x80\xc7\x55\xac\x0c\x87\x4c\x27\xfa\xdd\x06\xe9\xbd\x48\x13\x8c\x50\x40\xc0\xab\xe6\x01\x08\xc3\xe6\x69\x8a\x5b\x1d\x3c\xb6\x98\x26\xc6\x5b\x73\xd1\x43\x46\x33\x31\xb5\x4f\xd5\x80\xd4\xf5\x8c\xf5\x67\x2b\x15\xf7\xb5\x8b\xe7\x96\x88\x63\x0e\x5e\x36\x0f\x40\x18\x37\x8f\x7b\x20\xcc\x78\x26\x9b\x8e\xe5\xb6\xb8\xb9\x23\x4b\xc7\x91\x49\x33\xf5\x52\xce\xd2\x43\xdf\x4c\x17\x0d\x09\xda\xaa\x9f\x2f\x3a\xa3\x80\x80\xd7\xcd\x03\x10\x06\xce\x83\xba\x83\x84\x0f\x56\xbf\x39\x45\xf3\x5b\xef\x6f\xd2\xeb\xa3\x37\x18\x20\x38\x47\xfc\x2f\x14\x7a\x7a\xdc\xcd\xa4\x78\xad\xc0\x1d\x05\x04\xbc\x70\x1e\x80\x30\x72\xde\xc8\x8b\x09\xe1\x00\x29\x1a\xea\xe6\xb7\xdd\x77\x90\x6f\xb6\xe2\xb3\x89\x17\xe2\xc8\x3f\x5a\x2f\x7d\xe6\xdc\x93\xc7\x63\x12\x2f\x82\x02\x02\x5e\x39\x0f\x40\x18\x3a\x4f\xd1\x4f\x45\xf7\x68\xb4\xe0\xbd\x15\xa5\xaf\x7e\x92\xd3\xca\xbc\x96\xec\xe4\x32\x07\x6a\x78\xae\xd9\x1f\x57\x2b\x14\x62\x61\x3a\x8e\x02\x02\x5e\x3a\x0f\x40\x18\x3b\xef\x88\x5c\x0c\xb5\xc1\xcf\x43\xab\xfb\x5b\x38\xf9\x6c\x1e\x50\xde\xb0\x62\xd4\x93\xfb\x1e\x12\x13\xd2\x72\xdf\x71\xea\xf9\x19\x2f\x39\x14\x10\x70\xda\x79\x3b\x61\xda\xad\xef\xec\x84\x09\x83\xe7\xc9\xfe\x6d\x96\xf8\x5e\x78\xf2\xf6\xfe\x6b\xd2\x3c\xcf\xad\x73\x8f\x9f\x54\x74\x64\x65\xa0\x6a\x08\x93\xaf\xe5\x64\xb1\x1f\x69\xa6\x44\x01\x01\x2f\x9e\x07\x20\x8c\x9e\xc7\xe7\x75\x77\xa0\x5e\x98\xcc\x4f\x58\x3c\x00\xdd\x1f\x33\x35\x59\xab\xdd\xc5\xd7\xcf\xd8\xd2\x42\x71\xb3\x26\x40\xcd\xd5\xdf\x03\x05\x04\xbc\x7a\x1e\x80\x30\x7c\xde\xf0\x66\xa5\x80\xd0\x59\xe9\x07\x0e\x31\x22\xd2\xb2\xef\xf2\xaa\x1f\xdc\x37\x8e\xe6\xec\xf7\x72\x69\x7f\x7b\x7d\xf0\x79\xe6\x00\x0b\x0a\x08\x78\xf9\x3c\x00\x61\xfc\x3c\xc6\x7b\xc3\x88\x00\xef\x0a\x7f\x9c\x62\x9f\xb9\xef\x44\x54\x34\x57\x8d\x53\xdc\xd7\xfe\x61\xf2\xa6\x96\xb1\xc4\x80\xbb\xfa\x7c\x28\x20\xe0\xf5\xf3\x00\x84\x01\xf4\x6c\xfc\x84\x37\x27\xad\x8e\xfd\x16\xa2\xd8\xcf\x7e\xf0\xf5\xcb\x0a\x29\xda\xa6\x66\xf1\x67\x94\x62\xc7\x3b\x85\xbd\x9e\xa7\x9e\x22\x8e\x07\x78\x01\x3d\x00\x61\x04\xbd\x4b\x74\x02\x71\xc7\x06\xdd\xfa\x8a\x13\x95\xbf\xd8\x6c\x36\x0b\xfe\xee\x3a\xee\xe5\x5f\xdd\xee\x47\x3a\xc4\xcc\xfd\x78\x4a\x90\x18\x58\xbc\x82\x1e\x80\x30\x84\xde\x18\xd5\x57\x63\x37\xe5\x54\x4b\xbf\x1b\xa7\x25\x5b\x2f\x8e\xb3\x55\x4b\x18\xad\x67\xd8\x5c\x95\x14\x4f\x79\xf0\x22\xb9\xaa\xc9\x12\x05\x04\xbc\x84\x1e\x80\x30\x86\x5e\xce\xab\x3e\x71\x83\x73\x02\x94\x39\x33\xa7\x8f\x16\xc9\x3c\x74\xb8\x71\x9b\x9a\xf7\x6e\x67\x4c\x5a\xa4\x56\x8d\xf4\x50\xe9\x71\x1d\x14\x10\x70\x1a\x7a\x3b\x61\xda\x6d\x65\xde\x09\x13\x06\xd1\x2b\xbf\x07\xc7\x4b\x5a\xdc\xb6\xaa\x1a\xe7\x27\xfc\x56\x41\x3f\xfd\x30\x10\xbc\xfa\x46\x69\xe8\x5c\xde\xe9\x99\x75\xf2\xa8\x61\x61\x14\x10\xf0\x22\x7a\x00\xc2\x28\x7a\xe7\x07\x5b\x57\xe6\x46\xc6\x38\x8a\xb7\xbe\xfb\xea\x73\xb7\x0e\x64\x68\x2c\x06\x18\x5f\x73\x76\xd0\x38\x57\xf3\xca\x4f\x93\xe9\x24\x0a\x08\x78\x15\x3d\x00\x61\x18\xbd\x78\xea\x0c\x44\x3d\x88\x62\xe0\x65\xd5\x68\xf2\x79\xea\x55\x8d\x14\x4b\x52\xaf\x8a\x3c\x5f\xdf\x58\xfd\x9f\x95\x87\x6a\xa8\x61\x14\x10\xf0\x32\x7a\x00\xc2\x38\x7a\xc7\x85\x9b\x5d\xcc\xa2\x66\x73\xae\xbf\xae\x3f\xcc\x68\x14\x60\x35\x71\xcb\x74\x80\xf3\xfe\x0d\x7a\xd3\xbf\x9c\xf5\x84\x07\xb2\x07\x50\x40\xc0\xeb\xe8\x01\x08\x03\xe9\xb1\x89\x50\xf9\x49\xf0\x5b\x08\x2d\x16\x14\x67\x7d\x74\x5f\x35\x1e\x71\x52\x72\x90\xe0\x37\xa9\xa2\x29\xba\x59\xc0\x62\xcc\xc7\x85\x02\x02\x5e\x48\x0f\x40\x18\x49\xaf\xfc\x3b\xa3\x94\xf5\xf1\x07\x95\x24\x6a\xa1\x97\x7c\x02\xd8\xd5\xf3\x67\xfd\xda\x6c\xc8\x4a\xee\x68\x8f\xeb\xd1\xbd\xf6\x68\x64\x47\x01\x01\xaf\xa4\x07\x20\x0c\xa5\x27\x72\xe6\xe9\x3b\x7f\x4e\x8e\xd0\x58\xaa\x8a\xc7\xc6\x93\xce\x74\x26\x7c\x65\xce\x73\x84\x6c\x34\x3e\xf6\xa1\xad\x86\x5e\xf3\x7e\x14\x10\xf0\x52\x7a\x00\xc2\x58\x7a\x66\xf2\x6b\x74\x83\xb3\x5a\xfa\x3c\x52\xbf\x25\x26\x97\xba\xe2\x2c\x4c\xa9\x94\x68\xc5\x13\xad\xbe\x77\xfc\xed\xa2\x91\x7e\x45\x6c\xd2\x38\x2d\xbd\x9d\x30\xed\x36\xbb\xee\x84\x09\x83\xe9\x85\xbe\xd8\x68\xb9\x31\xa0\xbb\xef\x20\x85\xc3\xcb\xf4\x37\x94\x1b\x22\x3d\x36\x2e\xb3\x34\x6c\xa9\x09\xb1\x4a\xbf\xfa\x9c\xd6\x4c\x51\x40\xc0\x8b\xe9\x01\x08\xa3\xe9\xbd\xfb\xd6\x39\x2f\x53\xb9\xee\xd3\x4e\x77\x5b\xa1\xb9\xbc\x4f\xb0\x2e\x8b\xcd\xca\xdb\x2f\xb5\xdc\xc8\x31\x79\xe5\x67\x64\x9d\x2e\x0a\x08\x78\x35\x3d\x00\x61\x38\x3d\x87\x12\x76\x6d\x21\xf9\xe3\x07\x33\x2f\x8a\x68\xa5\xbd\x5d\x90\x9e\xe9\x32\x74\x34\xb5\x9d\x3a\xb0\xdc\xcf\x7e\x2f\xcf\xed\x3d\x40\x01\x01\x2f\xa7\x07\x20\x8c\xa7\xd7\x70\x6b\xf4\x41\x0f\x1b\x78\xc4\xd7\x1b\xc4\x90\xd6\x5c\xbc\xc9\x49\x46\x5f\x1e\x4a\x75\x28\xcc\x25\xa2\x64\xd9\xf7\xd6\x16\x2f\x0a\x08\x78\x3d\x3d\x00\x61\x40\x3d\xe3\x1c\xed\x26\x4a\x1e\xeb\xcb\x60\x21\xd4\x58\x5f\xa6\x1a\x51\x63\xdf\x9b\x7c\xeb\x0a\x4d\xf1\xaa\x5f\xb4\x89\x3d\x3d\xdd\x11\x14\x10\xf0\x82\x7a\x00\xc2\x88\x7a\x85\xfa\xdb\xfb\x9b\x66\x3f\x8f\xb7\x47\xe8\xd0\x72\xff\xe9\x6f\xa3\xba\xab\x6a\xb5\xc1\x66\x7c\xb0\x59\x9e\x2e\x2d\x43\x08\x96\x40\x01\x01\xaf\xa8\x07\x20\x0c\xa9\xa7\x97\x93\x31\xdc\x9d\xb8\x5a\x3d\x34\xad\x5f\xff\x7e\x58\xfd\xbe\xcb\xdb\x63\xd3\x1f\xdf\x36\x3e\x7f\xf1\x47\x3c\x7c\xfc\x8d\x8a\x0a\x0a\x08\x78\x49\x3d\x00\x61\x4c\xbd\x1b\xdc\x1e\x66\xa1\x9f\x29\x67\xf2\xb9\xa8\xb2\x5f\xd5\x5c\xab\x0d\x38\xcf\x73\x7a\x76\xd1\xce\xd1\x50\x23\xea\xad\x08\x97\x2f\x71\x65\xc2\x69\xea\xed\x84\x69\xb7\xdd\xdd\x4e\x98\x30\xa8\x9e\x58\xeb\x08\x69\x11\xcf\xc9\xbe\x79\x8d\xb3\xea\xb9\xa0\xf4\xb3\xc3\x3e\xa6\x73\xf6\x6f\xc6\x5a\x83\x6c\xed\x0c\x35\xde\x89\x11\x3b\x3a\x5e\x54\x0f\x40\x18\x55\xcf\xfc\x18\x53\xd4\x73\xbe\xb4\x3a\x7b\x93\xce\xa6\x5c\xb2\xae\x0f\x9c\x9d\x76\xf1\x6b\x9f\x7f\xdf\x98\xfc\xf0\x41\xc8\xa2\x6b\xd8\x1a\x05\x04\xbc\xaa\x1e\x80\x30\xac\x5e\x12\xa4\xed\x72\x6e\x3c\xfa\x20\xab\xe2\xbe\x91\xb2\xe8\x77\x6e\xa5\x85\x56\xab\x67\xbe\xaf\x54\x2c\x27\xab\x92\x69\x70\xd9\xc8\xa2\x80\x80\x97\xd5\x03\x10\xc6\xd5\xb3\x0d\x63\x3f\xea\xd3\xe5\x63\xcd\xab\xff\xea\xe3\xad\x98\xe3\x8a\x29\xda\x57\x03\x6e\xb4\xd7\xac\x3f\xf2\x71\xf0\xab\xed\x9b\xd0\x43\x01\x01\xaf\xab\x07\x20\x0c\xac\xf7\x27\x3d\x61\xfb\xbd\x4d\x08\x19\xef\x9e\xa0\xb8\xb1\xf4\x03\x06\xaa\x82\xd2\x65\x5a\xa2\xb5\xde\xaf\x82\x9e\x3e\xb9\x55\xac\x47\xec\xe8\x78\x61\x3d\x00\x61\x64\xbd\xb6\xb1\x98\x77\xb1\xe3\x07\xee\xf1\x8d\x59\x84\x2e\x05\xc3\xc6\x36\x91\xb7\x78\x86\x5e\x51\x9e\xd1\xc9\x0d\xde\x6b\x79\xe4\x32\xf1\x73\xe0\x95\xf5\x00\x84\xa1\xf5\xde\xd6\x52\x42\x97\x10\xcd\xe5\x80\x55\xc9\xe1\x96\x03\xe1\x76\x91\x0e\xb7\x5d\x37\xb3\x1a\x06\xb3\xe5\x3d\x16\x56\x5a\xcf\xd8\xa1\x80\x80\x97\xd6\x03\x10\xc6\xd6\xab\xdf\x4a\x77\x66\x52\xa1\xf1\xba\xec\x17\x4a\x75\x34\xfd\xa8\x6d\xb5\xde\xbb\x82\x1e\x2e\x7d\x6b\x05\x59\xa3\x48\xe5\xe4\xcb\xa2\x28\x20\xe0\xb4\xf5\x76\xc2\xb4\xdb\xf9\xc7\x4e\x98\x30\xb8\x5e\xfe\xb9\x46\x6a\xb6\x7e\xb5\xea\x6f\x69\xeb\xeb\x49\xaf\xbf\xe5\x49\x36\x87\x4f\xbb\xcd\xed\x15\x61\xcf\xab\xcb\x29\x8d\xe8\x20\xfe\x41\x78\x71\x3d\x00\x61\x74\xbd\x4f\x0c\x69\x49\x1e\x87\x2b\x7e\xbe\xe1\xd3\x14\x67\x39\x94\x94\x2a\xbc\xcf\x44\xec\x33\xaa\x1f\x9c\xf1\x44\xf2\x9c\xa0\x91\xfb\x05\x14\x10\xf0\xea\x7a\x00\xc2\xf0\x7a\x0b\xb0\xeb\xc8\xdf\x59\x3b\xf3\x1f\x9a\x32\x32\x01\xfb\x3f\xdd\x8f\x51\x89\xf9\xe9\xd6\x66\x92\x69\xed\xf9\x30\x36\x3c\xd9\x56\x0a\x05\x04\xbc\xbc\x1e\x80\x30\xbe\x5e\x45\xf6\x48\xd7\xf6\xb1\x8c\xbb\x5b\x05\xeb\x76\x47\x72\x1e\xdf\xf3\x92\x36\xbe\x7f\x49\x40\xec\xc6\x68\xc0\xd2\xa5\xfb\x46\xf7\x89\xfb\x19\xbc\xbe\x1e\x80\x30\xc0\x5e\xd3\x45\x23\x86\x35\x0f\xf5\x6e\xaa\xb1\x4b\x69\xec\xcf\x60\x4f\x9e\x6b\x35\xe4\x4f\xc7\x82\xe8\x93\xdd\xc1\xc7\x97\x15\xe1\x82\x28\x20\xe0\x05\xf6\x00\x84\x11\xf6\x9a\x68\xdc\x25\x28\xff\x2c\x7b\xfa\x0e\x44\x65\xde\x01\xb2\x41\xc3\x74\xdd\xf6\x63\xee\xeb\x16\x5f\xde\x5d\xb9\xd0\x50\xe5\x4e\x1c\xf3\xf0\x0a\x7b\x00\xc2\x10\x7b\xdc\x49\x7f\xf6\x4d\x49\x38\x38\x46\xbe\x37\x28\xb3\x0a\xd9\xcc\x98\xeb\x5b\xdd\x78\xc3\x72\xba\x28\xf1\x6c\xf8\xc5\x57\xae\xef\x88\x4d\x1a\x2f\xb1\x07\x20\x8c\xb1\x47\xf6\xf0\xfb\xc1\x66\xd7\xb8\xe2\x29\x55\x66\xe1\x5f\x57\xfc\xad\x0a\xb3\xef\x27\x58\xc5\xdc\x51\x1e\x6c\xcb\xa4\x7c\x34\xb5\xb9\x17\x05\x04\x9c\xc6\xde\x4e\x98\x76\x3b\x21\xdc\x09\x13\x06\xd9\x1b\x19\x50\x4d\xf9\xd5\xcc\x57\x1a\xd9\x5e\xfb\x27\x26\xd4\x82\x89\xbb\xdb\xc1\x2a\x23\x2e\xe7\xae\xcd\x1f\xb6\x7e\xdb\x73\xea\xc4\xb9\x13\x2f\xb2\x07\x20\x8c\xb2\xd7\xd6\x54\x5f\xeb\x92\xaf\xf0\xa2\xa7\x4a\xd4\xa6\x68\xab\xbe\x80\xef\x50\xa5\x36\x1d\xdf\x47\xa9\x34\x96\x63\x61\x29\x1f\xcc\x6d\x51\x40\xc0\xab\xec\x01\x08\xc3\xec\x95\xe8\xf5\xa7\xb1\x1d\xd5\x7a\x43\x29\xd2\x9a\x24\x32\x78\x48\xd4\x2e\x39\x61\xe6\x33\x89\xf3\xb3\xbe\x12\x6e\xda\x40\x0e\x0a\x08\x05\x04\xbc\xcc\x1e\x80\x30\xce\xde\xd4\x05\x9a\xab\x91\x52\xfc\x93\xdf\xdb\xf2\x46\x85\xcf\x7c\xcf\x0d\x46\xe6\x93\x67\xab\xba\x1e\x4b\x3f\x13\xbc\x2d\xe6\xc1\xc8\x81\x02\x02\x5e\x67\x0f\x40\x18\x68\xef\xaa\xcf\xd5\x84\x82\xe2\x43\x39\x1f\x86\x3e\xf6\x4d\x0e\x29\x4a\x17\xb0\x57\xdd\xe3\xeb\xe4\x89\x98\x57\xdc\x1a\x7b\x15\xfb\x7f\xef\xe9\xc2\x0b\xed\x01\x08\x23\xed\x41\xe5\xbf\x6e\x85\x38\xf3\xba\xa7\x17\x0d\x19\x33\x6a\x78\x38\xdb\xfd\xfc\x64\xaf\x4a\xb2\x6c\xc6\xa7\xcf\xc0\xff\x65\x94\x8a\x18\x58\xbc\xd2\x1e\x80\x30\xd4\x1e\x63\x66\xfb\xb0\x82\x5b\xbf\xcc\xab\xb5\x00\x9d\x65\x27\x5e\x87\x8c\x94\x46\x2a\xed\xcd\x7e\x9a\x5b\xac\xcb\x1d\x5f\x61\xe4\x34\x0a\x08\x78\xa9\x3d\x00\x61\xac\x3d\x9e\xfe\x8a\xa9\xce\xfc\x33\xbc\x95\x9c\x26\xc5\xa6\x0e\xa8\x11\x72\x90\x93\xff\x67\x52\xf5\x09\x71\x79\x42\xdc\xeb\x87\xbd\xc6\x28\x20\xe0\xb4\xf6\x76\xc2\xb4\xdb\x19\xfa\x4e\x98\x30\xd8\x9e\x63\xd9\xfb\xd2\x6e\x35\x4b\x0b\xdd\xf6\xbe\x48\x41\xb4\x1c\x41\x97\xe2\xd2\x0e\xd6\x3f\xfe\x65\x19\xdd\xd8\x4f\x1b\xfe\xe4\x1c\x0a\x08\x78\xb1\x3d\x00\x61\xb4\xbd\x62\xee\x87\xa6\x15\x59\x03\x83\xda\xc8\x59\x72\x09\xde\x87\x63\x45\x07\x5d\x6b\xc9\x9e\x50\x47\x56\x6e\xdc\x08\x0d\x68\x75\x63\x44\x01\x01\xaf\xb6\x07\x20\x0c\xb7\x97\x22\x2b\x2b\xec\x9d\x9b\x69\x74\xf8\x82\xe8\x62\xef\x57\xbd\xa0\x0f\xbd\xfa\xd6\x0b\x13\x93\x13\x6f\x4a\x1d\xd4\x03\xe4\x78\xb4\x51\x40\xc0\xcb\xed\x01\x08\xe3\xed\x9d\x4b\x4d\x77\x6f\x70\xac\x76\x39\x91\xfe\x79\x53\xb0\xf8\x74\x79\x53\xc0\x1b\xaa\x03\xd7\x28\x23\x2d\x2d\x08\xa2\xef\x15\xf3\x88\x23\x18\x5e\x6f\x0f\x40\x18\x70\x4f\xc8\xc4\xdd\xa0\x4b\xbc\x6b\xec\xe2\xef\x5b\x2e\x69\xea\x7e\xfc\xbd\xc2\x61\x34\x95\x6d\x10\xff\x10\x8d\x50\xb3\x52\xb9\xb9\x11\x0a\x08\x78\xc1\x3d\x00\x61\xc4\x3d\x6b\xa6\x63\xd5\x7c\xd2\x13\x2b\x12\x53\x24\xaa\xdf\xbf\x7b\xf5\xfa\x3e\xf5\xaf\xda\xe3\xbf\xe5\xa5\x10\x2e\x99\x1d\x10\x20\x7f\x02\x05\x04\xbc\xe2\x1e\x80\x30\xe4\x5e\xa9\x2e\xbd\xe3\x84\x8c\xe9\x90\xfb\xb6\xc2\xdc\xbc\xdb\xb3\x97\xb3\xaa\x17\x35\xcf\x8d\xc6\xfe\xae\xbd\x90\x5c\x3b\xf4\x63\xd9\x0c\x05\x04\xbc\xe4\x1e\x80\x30\xe6\x1e\xcf\xbc\xee\x71\xfd\xfc\xbc\x16\xd9\x06\xa9\x7a\x6e\xb9\x91\x25\xa5\xb2\x15\x83\x9f\x24\xa2\x76\x8e\x81\x67\xdb\xef\x94\x51\x48\xa3\x80\xf0\x1f\xcd\xbd\x8b\x2f\x26\x7c\xa2\x3a\x2d\xef\xd5\x09\xd3\x6e\x39\x7a\x28\x75\x5a\xdd\x1f\xeb\x6a\xed\xdf\x6b\x2e\xff\x6a\x23\xf2\xcc\xe3\x73\xef\x31\x97\x7d\x09\xcf\xed\x25\xc9\xe3\xa5\x2e\x79\xb8\x05\xa5\xaa\x51\x5d\x9e\xf8\x53\xc9\x3b\x30\x72\x64\x95\xbc\xdf\x4d\xc0\x6d\xf9\x41\x87\xce\x3f\xa5\x7b\x4f\x92\x68\xe7\xbc\xb7\x13\x7a\x4c\x2d\xf4\xf1\xd9\xe2\xad\x0e\x6b\x83\x68\x77\x12\x73\x67\x95\x66\xe5\x0d\x1a\x86\x3b\xbf\xeb\xff\x29\xb5\x9d\x3d\xea\x96\x7e\xed\xe0\xe0\x47\x2d\x98\xe2\xd4\xd9\xac\xc4\xb0\xce\x15\x8a\x05\xdf\xca\x4c\x89\x42\xdf\xd5\x9a\x1b\x05\xff\xbe\x9b\x33\x3a\xf7\x6c\x44\xa3\xfe\x57\x6e\x66\xb3\x12\x65\x26\xe9\x88\xc9\x3b\x97\xb7\xb8\x54\xda\x59\x9d\x12\xef\x1e\xca\x18\xea\xa4\x14\xf9\xf7\x2d\x9a\x1b\x23\x32\xd7\xb7\x6b\x6f\x71\x78\x3f\xf2\xfc\x91\x60\xf8\xb8\x41\x51\xe2\x52\x6f\x48\xa6\x2a\x19\xbb\xc7\xbd\xe1\xe2\x9b\x13\xff\x94\x6a\x6d\xdf\xed\xac\xa5\x60\x53\xfc\x76\x25\x73\x0f\x6b\x5f\x97\x44\x79\x8c\x47\xe9\x72\xfc\x53\x5d\xdd\x70\x9e\x26\xe5\x85\x6b\x95\xff\x94\xb6\xc4\xf7\xe7\x84\x09\xfa\x9e\x5e\xba\x29\xab\x5c\xf5\xd2\xac\xa3\xe7\xd8\x93\xb4\xe2\x73\xd9\x05\x2d\xd6\x03\xee\xec\xee\x13\xfa\xff\x94\x1e\x33\x5b\x12\xab\xe6\xfe\xc8\x37\x03\x57\x9a\x90\x88\xc4\x1f\x17\xe3\x8e\x9d\x48\x8f\xf5\xcf\x18\x58\x7e\xdc\xcc\xff\xe0\xa6\xd0\xff\x2e\xfb\x76\x7b\xaa\x3b\x1d\x0d\x83\xee\x45\xed\xcf\xb6\xd3\x38\x64\x24\x29\x34\x72\x8f\xfa\x76\x21\xcd\x91\xb3\xcb\xa3\x04\x8f\x98\x94\xcc\xfe\x4f\x24\x8b\xbc\x96\xf5\x6a\x28\x20\xe0\x45\xf7\x00\x84\x51\xf7\x16\x98\x74\x3b\xe4\x95\x3f\xf6\x4d\xf3\x79\x6b\x49\x79\x52\x9b\xc1\xae\x5f\x66\x44\xac\xc8\x4e\xdc\xfd\x62\xfb\x29\xe9\x44\x25\xb1\x8d\xe3\x55\xf7\x00\x84\x61\xf7\x22\xad\x78\xa5\xf8\xfd\x9c\x75\xef\x29\xf4\xe4\x93\xe8\xa5\x89\x1d\x99\xea\xee\xbc\xfa\xc0\x93\xa6\xa6\xb5\x38\x3a\x81\x84\x4c\x18\x05\x04\xbc\xec\x1e\x80\x30\xee\xde\xdf\xd4\x3b\xd7\x7e\x4c\x87\xf0\x1d\x10\x0e\xeb\xea\xfc\x16\xb2\x6c\x4d\xb8\xff\x1a\x6a\x60\xe5\x38\x99\xa7\xba\x74\x6e\x36\xc0\x07\x05\x04\xbc\xee\x1e\x80\x30\xf0\x9e\x7c\x92\xbd\xfd\x40\xfb\xe1\x90\x6e\xe7\x8e\xfb\x95\xc1\x84\xee\x85\xd7\x1f\x9e\x69\xe6\xb6\x7f\xf1\x63\x8e\x69\x15\x06\xe7\x84\x50\x40\xc0\x0b\xef\x01\x08\x23\xef\xf9\xe4\xf9\x74\xd6\x8d\x4a\x2a\xed\xd1\x67\x3d\x40\x79\x1f\x96\x1d\xa7\xb6\x60\xcc\x7a\xc3\x8a\x36\x21\xaf\x04\x0f\xa5\xeb\xd2\xa1\x80\x80\x57\xde\x03\x10\x86\xde\xcb\x5a\x91\xa3\x8e\xf8\x5a\x95\xfc\xfa\x7e\x44\x07\x2b\x29\x6b\x91\x2f\x59\xc2\xde\x63\xdb\x8a\xbd\xf4\x70\x61\x47\xe2\x87\x23\x07\x50\x40\xc0\x4b\xef\x01\x08\x63\xef\x19\xc6\x6a\xdf\x48\xa0\xef\x3d\x54\xdc\x2b\xe3\x2b\x1d\x20\xca\x65\x79\xc8\x7b\x9f\xa4\xa7\x05\xe1\x70\x29\xe3\x33\x46\xd3\x05\xe2\xde\x07\xa7\xbd\xb7\x13\xa6\xdd\xfa\xce\x4e\x98\x30\xf8\x9e\xde\xc4\x25\x16\x21\x6d\xdf\x9c\x8f\x56\x8f\x91\xbd\xaa\x47\xa2\x56\xa4\x09\x39\x62\xcd\x81\xd7\xa8\x6f\x4e\x4e\x4c\x70\xe5\x12\x37\x7c\x78\xf1\x3d\x00\x61\xf4\xbd\xdc\xfe\x1f\xac\xe3\x17\x4a\xe3\xc4\x38\xe7\x1c\x43\x56\xda\xb7\x28\xbc\xdb\x1b\xc9\xd3\x9a\x84\x59\x4e\xe5\xfb\xa7\xb0\xad\x10\xe7\x47\xbc\xfa\x1e\x80\x30\xfc\x5e\x86\x12\xb7\xeb\xa3\xdb\x83\x81\x8a\x3f\x25\xe7\xc4\x9f\xc5\xae\xde\xf9\x7c\xbc\x63\xce\xff\xad\xf3\x93\x53\x76\x95\xe5\x07\x0e\x52\xa2\x80\x80\x97\xdf\x03\x10\xc6\xdf\x5b\xe1\xf8\xf4\xbe\x32\xed\x73\xd4\xab\x81\x71\x76\x12\x41\xcd\x82\xea\x29\xe4\x54\xc1\x9a\x61\x60\xdb\xb5\x61\x97\x0f\x55\xdc\xdc\x28\x20\xe0\xf5\xf7\x00\x84\x01\xf8\xd6\x57\x3b\xa8\x8d\x32\xf7\x48\x90\xfd\x8c\xcb\xf1\xfa\x48\x47\x71\x62\xe5\xfb\xf7\x71\xb1\x42\xe9\x67\xba\xaf\xbd\xc9\x0c\x3e\x92\xa0\x80\x80\x17\xe0\x03\x10\x46\xe0\xcb\x33\x5f\x3a\x31\xbb\x9c\xf1\x21\xf1\xe5\xf5\xb2\x66\xd6\x13\x53\xc3\xef\x26\x03\x74\xdb\xd9\x7b\xd2\xcb\xee\x8c\x9f\xa1\x4d\x22\xfe\x08\xf1\x0a\x7c\x00\xc2\x10\x7c\x1a\x5b\x17\x85\x0e\xa8\x8f\x2c\x2e\x55\x29\x4d\xfc\x3d\xc0\x3e\x3b\xb6\xaf\xe6\x56\x19\x29\xff\xed\x67\x11\x2a\x82\x67\xa6\xa9\x24\x51\x40\xc0\x4b\xf0\x01\x08\x63\xf0\xe9\x7d\x6c\x92\x4d\x79\xea\x33\x18\x7c\x8a\x79\x4c\x2f\xe5\xb9\xfa\xbe\x21\x0e\xcb\x10\x9f\x87\x97\xfb\xfe\x9a\x46\xf7\x64\x2f\x72\xa1\x80\x80\xd3\xe0\xdb\x09\xd3\x6e\x2b\xf3\x4e\x98\x30\x08\x1f\x93\xbb\x42\x79\xc7\x94\x2c\x65\xc3\x5e\xb2\xa9\x32\x52\x66\x83\xf4\x39\xd7\x83\x94\xdc\x16\x06\x7d\xee\xfc\x9e\xd6\x45\xb7\x88\x61\xc2\x8b\xf0\x01\x08\xa3\xf0\xb5\xb6\xc4\xa9\x84\xc8\x3c\x2f\xf4\x23\x37\xbc\xff\xfa\x87\xc7\xe6\xe4\xdb\x30\xad\x87\x1f\xc6\x78\x8d\xe7\x36\x2e\x0f\x05\x64\x5a\xa0\x80\x80\x57\xe1\x03\x10\x86\xe1\xbb\x3b\x5b\x27\x99\x26\xe9\xa9\xe0\x5f\x35\xe8\x13\x1c\x35\xf4\x32\xf2\xad\x77\xde\x4f\x6f\x35\x85\xb0\x93\xa1\xd1\x7c\x83\xb6\x22\x28\x20\xe0\x65\xf8\x00\x84\x71\xf8\x78\x43\x5f\x0d\x18\x92\x95\xaa\x09\x26\x2c\xcc\x97\x5f\xe1\x28\xaa\xff\x79\x9d\xe1\x70\x66\xe3\xf9\x6f\xfd\x2c\x81\xf7\x50\xf5\xe3\x28\x20\xe0\x75\xf8\x00\x84\x81\xf8\xea\xb6\x5e\xeb\xd3\x54\xd3\x14\xa5\x77\x9f\xd6\xf9\x71\xfc\x4b\x87\xfd\xc4\x4b\x07\x8b\x76\xff\x12\x55\x83\x4a\xea\x0d\xd3\x3b\xce\x28\x20\xe0\x85\xf8\x00\x84\x91\xf8\xca\x61\x7e\xe5\x75\x45\x3d\xf7\xba\x84\x7b\xa7\xde\x45\xaa\x54\xe8\x51\xe6\xb7\x94\x84\xda\xa8\xdd\xaf\x2a\x48\xcd\x29\x13\xe1\x47\x01\x01\xaf\xc4\x07\x20\x0c\xc5\xf7\x77\xef\x9d\x49\x06\x8d\x9f\x57\xa1\x9f\x03\xd4\xa9\x65\x92\x7b\x3f\x7d\xd6\xfc\x70\x9d\xf7\x08\xc3\x37\xb4\x70\xb8\xb0\x27\x42\x1f\x05\x04\xbc\x14\x1f\x80\x30\x16\x5f\xe2\xe1\x3b\x72\x06\xb4\xa4\x27\x24\x6a\x33\xe6\x18\x4f\xcd\xf1\xd5\xd0\xa5\x3e\x66\xce\x29\x78\xd6\xdd\xe2\xf8\xfa\x9e\xf1\x6f\x36\x14\x10\x70\x5a\x7c\x3b\x61\xda\x6d\x76\xdd\x09\x13\x06\xe3\x2b\x1b\x4e\x89\x52\x7b\xef\x2c\xa2\xe7\xde\x97\xb7\xbd\x5c\x7e\x42\x2d\x68\x41\xd9\x6c\x2d\x87\x23\xc0\x5c\x27\xa3\xb2\xfa\x18\x71\xac\xc0\x8b\xf1\x01\x08\xa3\xf1\x15\xad\x18\x30\xbc\x09\xdf\x1a\x21\xa9\x4d\x28\x2a\x6d\x38\x1e\x94\x79\xcb\xd5\x2c\x22\x99\xe1\xf0\x13\x58\x56\xf7\xb4\xdd\xc6\x19\x14\x10\xf0\x6a\x7c\x00\xc2\x70\x7c\x94\x8f\x1a\x8e\xa5\xb2\x86\xab\x95\xa5\x75\xfd\xa6\x9a\xa2\xfb\x76\x2d\x9a\x24\xbc\x66\x69\xf2\x89\x5c\xe2\x1b\xab\x0c\x55\x5e\xe2\x83\xc5\xcb\xf1\x01\x08\xe3\xf1\x5d\x31\x9e\xcd\x72\x7a\x5e\x6b\xb1\xcc\xf6\xf6\xd2\x05\x86\x8c\xd3\xaf\x6b\x9e\x07\x26\xb6\x1f\x7a\x34\xf6\xb7\x2e\xb5\x76\x88\xce\x09\x05\x04\xbc\x1e\x1f\x80\x30\x20\x9f\xe3\x83\xb7\xaa\xa3\x4c\xfb\x3f\x49\x24\x45\xbe\xf7\xf2\xb3\xcd\xa8\x6d\x4f\xb6\xe8\x59\xfd\xe4\xff\x21\x57\x7f\xfd\x2d\x0d\x27\x1f\x0a\x08\x78\x41\x3e\x00\x61\x44\x3e\xb2\x38\x27\x2e\xab\x83\x7f\xa5\x44\x42\x56\x9f\x35\xf3\x64\xb9\x1c\x52\xea\xf1\xd1\xa8\x94\x3e\x5e\xd4\xa6\x9d\x16\x46\x57\x05\x50\x40\xc0\x2b\xf2\x01\x08\x43\xf2\x79\xdb\x89\x2b\x2d\x2b\xca\xad\x6c\x5a\x2f\xf8\xd0\x78\x1e\x1d\x8d\x71\xe3\x98\x05\x9f\x07\x4a\xb7\xca\x54\xb4\x1a\x8f\xb9\x10\xc7\x3c\xbc\x24\x1f\x80\x30\x26\x9f\x8c\xcf\x8b\x87\x02\x6f\xaf\xfa\x0f\x6f\xb6\x85\x50\xbc\x17\x90\x52\x96\x3f\xe4\x60\xaa\x55\x72\x45\x90\xbb\xf0\xfb\xcc\x42\x83\x3d\x0a\x08\x38\x4d\xbe\xff\xbd\xdf\x69\x97\xdd\xdd\x4e\x98\x30\x28\x5f\x6d\x64\x71\x92\xae\x10\xd3\xc3\xa5\x47\xce\x89\x3e\xa1\x12\x81\xfa\xd3\xca\x29\xf5\xe4\xcf\x72\x3a\x26\x23\x9b\x39\x8c\x4b\x4c\x51\x40\xc0\x8b\xf2\x01\x08\xa3\xf2\x1d\x50\xf8\xe3\x2f\x87\xf6\x5c\x7e\xe7\x78\x3b\x14\x0a\x4a\xd0\x77\x9d\xf5\x15\xd5\xdb\x88\x69\xce\x57\xeb\x7e\x2c\x7c\xc5\xee\x10\x0a\x08\x78\x55\x3e\x00\x61\x58\x3e\xf9\x8f\x0f\xb2\x1f\x2d\x35\xbd\xa7\x2d\xe5\xbf\x60\x67\xd7\x7e\x2f\xde\x43\xf1\xa3\x7e\x7d\x28\xdd\x90\x26\xe9\x1d\xed\x1a\x35\xe2\x98\x87\x97\xe5\x03\x10\xc6\xe5\xd3\xb4\x7e\x67\x25\x94\xb2\xfe\x03\x3e\xce\xaa\xb0\xd1\xdd\x0d\x9d\x50\xbf\x62\x59\xcc\x4f\x97\x6c\x48\x5a\x9d\x1c\x1f\xcb\x25\x87\x02\x02\x5e\x97\x0f\x40\x18\x98\xcf\x4f\x41\x72\xc8\x2f\xfe\x93\x5b\xf9\x5c\x54\xef\xc5\xcc\x15\x41\xa7\xfc\xec\xbb\x16\x91\xbf\x7f\x2f\x1c\xdb\x9a\x00\x29\x33\xae\x28\x20\xe0\x85\xf9\x00\x84\x91\xf9\xc4\xa9\xd4\xd5\x6f\x8d\x4a\x51\x4d\x9d\x6a\x1a\x11\xb2\x7e\x9a\x1a\xb2\x60\xb8\x4f\x81\xd1\x81\x8c\x23\x50\x5f\x31\xff\x75\x3a\x71\x9f\x8c\x57\xe6\x03\x10\x86\xe6\xcb\xca\x7c\xdb\x3f\x6f\x4e\xf0\x94\x96\x0e\xd5\x83\xbf\x5d\x7e\xe3\xc4\x58\x10\xe5\xe6\x26\xed\x49\x50\x60\xe0\x3f\xf3\x44\xd2\x0a\x05\x04\xbc\x34\x1f\x80\x30\x36\x5f\x9a\xfb\x59\x85\x04\x81\x3f\x19\xeb\x89\xfa\x9f\xb6\x07\x5e\x7e\xb1\x69\x67\xfb\xfc\x73\x1c\xc8\xea\xb9\xf8\xba\xf8\x2b\x5e\xa7\x46\x01\x01\xa7\xcd\xb7\x13\xa6\xdd\xce\x3f\x76\xc2\x84\xc1\xf9\x42\xff\x6c\x32\xa5\xef\x59\x64\xe0\x9e\x5c\x8d\xbc\x61\xad\x20\xd3\xc9\xb1\x71\xe8\xdc\x22\xbb\x25\x47\xa2\x02\xf5\x3b\x92\x52\x31\x14\x10\xf0\xe2\x7c\x00\xc2\xe8\x7c\x97\x17\x42\xf9\xb2\xec\xed\x68\xa2\xee\xcd\xcf\xa7\x48\xb2\xf6\x44\xa8\x2a\x4e\x95\x5c\xad\xf4\xe3\x96\x75\x52\x3f\xb0\x9c\xcd\x81\x02\x02\x5e\x9d\x0f\x40\x18\x9e\xcf\xa5\xfd\xc4\x09\x9e\x60\xfe\x9b\x17\x4a\x0f\x0c\x1c\x8a\x1f\x6e\x23\xd5\x90\xd2\x94\x7a\x63\x97\x52\x39\xd2\x46\xa7\xaf\x0e\xd1\xa2\x80\x80\x97\xe7\x03\x10\xc6\xe7\x7b\xff\x95\xcb\x52\xd1\xda\x22\x84\xcf\x20\x29\x8a\x1e\x75\xe3\xbc\xb7\xac\x94\xd6\x0b\x2d\xd6\x64\x31\x98\x2b\xdd\x7a\xc3\x4f\xfc\x11\xe2\xf5\xf9\x00\x84\x01\xfa\x24\x8d\x2e\x16\xf1\xed\xe5\x37\x10\x79\x24\x95\xfa\xb2\x61\x58\x8d\x90\x09\x87\xc7\xfb\x10\x7c\xe6\xe7\x52\x2d\x46\x57\x9d\x89\x23\x18\x5e\xa0\x0f\x40\x18\xa1\x6f\x8c\x77\xff\xc2\x79\xa9\x29\x41\x53\x1a\x6d\xc1\x74\x05\x70\x4e\xfa\x68\x94\x4e\x9f\xc6\xcf\xbf\x63\x7a\x17\x65\xdc\xa5\x82\x18\x50\x40\xc0\x2b\xf4\x01\x08\x43\xf4\x89\x2a\x15\x5e\x71\x3b\x1f\x77\xda\xc6\xa7\x63\xe2\x4a\xe2\x42\xd1\xe4\x6f\xa1\x7d\x73\x7c\xa3\x91\x76\x19\xad\x31\xeb\x87\x0f\xab\xa0\x80\x80\x97\xe8\x03\x10\xc6\xe8\x63\x3c\x19\xbf\x55\xed\xb6\x19\x9f\xf6\x7d\xf9\x22\xa5\x41\x69\x89\xb8\xa3\x9e\x77\x9a\xa4\x65\xd0\x73\x81\xb5\x19\xab\x6c\x46\x03\x14\x10\x70\x1a\x7d\x3b\x61\xda\xed\x84\x70\x27\x4c\x18\xa4\xcf\x44\x4d\xc3\x41\xdf\x3e\x84\x7a\xd4\xf3\xda\x03\x75\xb3\xbc\x7d\x5e\x52\x12\x11\x4a\x0b\xc1\xb6\x47\x07\x84\xd1\x18\x21\x7e\xe2\x8f\x10\x2f\xd2\x07\x20\x8c\xd2\x27\xc4\x77\x1d\x52\x6a\xbf\x10\x71\xf3\xd2\x21\xae\xbf\x22\x4e\x56\x5f\x27\x0e\xa8\xb8\xf3\xfa\xd3\x7a\x4f\x0a\x3f\xfe\x7c\x79\x0f\x01\x05\x04\xbc\x4a\x1f\x80\x30\x4c\x9f\xf1\xfa\xe8\x9e\x0c\x66\xce\xb8\xd7\x25\xaf\x33\xac\x92\x58\x1d\x23\x16\x35\xfb\xa9\x46\xc9\xc3\x37\x37\x26\xaa\x3e\xcf\xce\xd9\xa0\x80\x80\x97\xe9\x03\x10\xc6\xe9\xbb\x72\xf7\xa1\x49\x97\xd1\x8b\x53\xb7\xf3\x9f\x3e\x30\x0d\x6e\x2a\xa6\xd4\x53\x34\x16\x56\x8a\x8b\xb0\x0e\xca\x6e\xf1\x81\x52\x89\x9f\x03\xaf\xd3\x07\x20\x0c\xd4\x37\xf8\x48\x1e\xf9\x93\xea\x41\x5d\xfb\xfe\x2d\xfd\x8c\x68\x62\x78\x55\x9d\xcb\xad\xe2\x23\x5c\x0a\xf1\xcf\x4a\x84\x2d\xdf\x45\x1d\x41\x01\x01\x2f\xd4\x07\x20\x8c\xd4\xb7\x3e\xfa\x45\x60\x5f\xe1\xc7\xb0\xef\x31\xf7\x5e\x2a\x78\xab\x48\x1e\xd8\xab\x11\x76\xed\x31\x43\x4c\x39\xd7\xe8\x22\x8d\xcd\xb8\x22\x0a\x08\x78\xa5\x3e\x00\x61\xa8\xbe\xf8\xd3\xd7\x1e\x3c\xf0\x3a\xa9\x24\xe7\x2f\xe9\xfb\xb1\xd9\x63\xa6\x3e\x65\xe6\xaf\xa4\x69\xcf\x5c\x73\xf1\xda\x6b\x2f\xd7\xe2\x93\x28\x20\xe0\xa5\xfa\x00\x84\xb1\xfa\xa8\xbc\xbf\xbf\x82\x27\x5b\x0f\x76\x6c\xaf\x71\xa5\x69\xdd\x95\xba\x45\x75\x4a\xee\x17\xc9\xef\xe9\xa8\x7a\xcd\xde\xe1\xb3\x6c\xc4\xa9\x0a\xa7\xd5\xb7\x13\xa6\xdd\xce\xd0\x77\xc2\x84\xc1\xfa\xc6\x4e\x8a\xc5\xce\x5d\x31\x4c\x73\xf8\xe4\xed\xaa\x6a\x72\xf3\xee\xb6\x4f\x37\x7c\x7b\x32\x2c\xf0\x53\xf8\xe8\x5d\x11\x12\x4d\x69\x14\x10\xf0\x62\x7d\x00\xc2\x68\x7d\x8f\xff\x7c\xd3\x76\x72\x5b\x9c\xae\x9c\xbd\x23\x5a\x37\xeb\xaf\x7f\x40\x33\xc6\xd7\xaf\xc0\x95\x46\xc1\xff\xb9\xdf\xb2\xfa\x21\x09\x14\x10\xf0\x6a\x7d\x00\xc2\x70\x7d\x9b\xcd\x8a\xf0\x58\x16\xeb\x87\xaa\x2b\x51\xe2\x0f\x9c\xba\xf5\x3b\xff\xd4\xde\x3f\x60\xda\xad\x3a\x94\xab\x49\x22\x24\xfd\x92\x38\x82\xe1\xe5\xfa\x00\x84\xf1\xfa\x8e\xc3\x45\x61\x45\xc9\x25\x96\x32\xaa\x61\x5f\xe7\x16\x2c\xdf\x1a\xf5\xc9\xb0\xac\x1c\xd9\xb4\x32\x8c\xb0\x20\x2f\xf9\xf8\x48\x0b\x05\x04\xbc\x5e\x1f\x80\x30\x60\x9f\xfc\x8f\xb3\x0d\x57\xe4\xb3\xb6\x5d\x07\xa6\x9e\x11\x56\xc5\x83\x15\xee\x5c\x3b\x1d\xf4\x46\xd0\xae\xef\x75\xa7\xad\xf4\x1c\xa3\x39\x0a\x08\x78\xc1\x3e\x00\x61\xc4\x3e\xc5\x77\x53\x08\x7d\x70\xf1\xe9\x0a\x63\xc4\xef\xef\xe4\xa7\x72\xa5\x43\x8c\x9b\xc7\x51\x27\x13\x7a\xcb\x2b\x6c\xea\x92\xbf\x3c\x51\x40\xc0\x2b\xf6\x01\x08\x43\xf6\x5d\x9a\x35\x33\xff\x70\x84\xe9\x4a\xaa\x94\x12\x25\xff\xfd\x3e\x3b\x99\xae\xbb\x1b\x26\x5b\x71\xbc\xea\x73\x6a\x0c\xb1\xd7\x73\x2c\x50\x40\xc0\x4b\xf6\x01\x08\x63\xf6\x99\x26\x9a\xae\xff\x60\x56\x0d\x27\x73\x36\xe0\xef\x9a\xfc\xcd\x3f\x9a\x12\x93\xff\x45\x46\xa2\x85\x56\xc6\x79\x92\xbb\x99\x8a\x38\x12\xe3\x34\xfb\x86\xa0\xff\x3f\x4c\xc9\xc7\xcf\x4a\x06\x4e\xfe\x9e\xbb\xab\x13\x58\xf4\xe5\xf6\x66\x8c\xc8\x8a\x76\xb7\xf1\x0b\x39\xd9\x6f\xdf\x6d\xde\x9b\x84\x69\x52\x86\x68\xd0\xdd\xfc\xe7\xfe\xca\xe2\x8a\x1f\x6d\xb5\x5b\x5e\x83\xa4\xc8\x7b\x56\x12\x17\x65\xbd\xfa\x0b\xf1\x8b\xf7\x8d\xdc\x16\x54\x9d\x5b\x4d\x32\x1b\x7d\xc1\x3f\xa5\xed\x8f\xed\x0f\xdd\x94\x70\x39\x61\x97\xcc\x92\xea\x9c\xf2\x94\x87\x5c\x92\xd3\xf1\xc9\x94\xfb\x4c\x5a\xcf\xfe\xb5\x7d\x83\x1c\xcb\xff\x94\x66\x6e\x31\x6b\xf3\x87\x04\x97\x87\xea\xca\x68\x1b\x5c\x1e\xbe\xa7\x45\x58\x3c\x52\x9a\x73\xe4\x8d\x05\xe9\x5c\xf6\xc8\xa2\x72\xe9\x3f\xa5\x3d\x2c\x6c\x3f\xa0\x84\xc6\xed\x40\x73\xaf\x3e\xbf\x69\xea\x85\x60\xc9\x68\xf9\xc5\xa5\x4e\x32\x46\xb6\x5f\x4f\xf8\x60\x85\xf4\xa0\x9d\x5b\xcc\xdd\xfe\x52\xcc\x2d\xe6\x79\x25\xe6\xd3\x26\xa2\x79\x03\x0e\xbe\x9c\xaa\x17\xce\x6b\xfa\xe9\x68\x7e\xa2\xa8\xa9\x50\x3e\xa8\xfb\x67\xd8\x82\x4b\xa9\x3e\xf7\x9f\xd2\x3f\x72\x3e\x5f\xc6\xea\x82\xea\x79\xac\x7c\x7e\x51\x93\xea\xa4\x31\x8e\xd5\x06\x92\xbd\x9e\x75\xab\x0b\x35\x26\x83\x53\xa6\xab\xfe\x29\x7d\xd2\xf8\x9d\x37\xf2\xa9\xb9\x52\xa4\xeb\xab\xc0\x87\xef\x99\x16\xb3\xbc\xa7\x4c\x37\xdb\x56\xba\x5c\x4b\xbf\xdb\x38\xfc\x39\x66\xf4\x4f\x29\x7a\x77\xbb\x53\x32\x65\xc2\x22\xd6\x8c\x74\x3a\x5a\x5e\xa3\x6d\xec\x6f\x98\xb5\x67\x46\xff\x79\x9b\xc9\x1f\x27\x3f\xa8\xb6\x37\xfc\x53\x1a\x7b\x85\xb9\x58\xe4\xe6\xb4\x95\xbd\x50\xb7\x80\xc3\x87\xa5\x4d\x36\x39\xb5\x3f\x49\x89\xfb\x7a\x34\xe9\xfd\x8c\x84\x15\x5b\x0f\xfc\x53\x4a\x9f\x36\xb2\x1e\xb3\x84\x4e\x83\x0e\xa1\xea\x04\x7f\x4b\x93\x7a\xe9\x3d\xe1\xaf\x79\xaf\xe9\x54\x2f\xa5\xbd\xba\x73\xb3\x6b\xf6\x9f\xd2\xea\x53\x74\xae\x56\xf6\xc3\x33\x63\xf6\x51\x1f\x06\x75\xbc\x7c\x4f\x3d\x16\xff\x15\xf8\xeb\x29\xc1\x5c\x67\xe4\xb2\xd8\xd2\xfd\xb4\x7f\x4a\xe3\x24\xf6\x26\x6b\x7e\xb5\x8f\x69\x65\x8f\x3c\x3d\x1c\xa4\xfb\xc9\x8b\x47\x99\x4c\x4a\xb7\x87\x6a\xd2\x99\x9b\xb9\x64\x4d\xc8\xe8\x7f\xb7\x98\xbb\x3d\xd5\xff\xd7\xaa\x61\x0c\x46\x58\x80\xbe\x59\x51\x1b\xec\xe0\xea\xb1\xea\x2e\xcf\x85\xef\x8c\x1f\xa8\x55\x3d\xbe\x06\xf3\xc8\xec\x21\x3b\x3b\x6f\x8d\x30\x09\xa1\x00\xc1\x8d\x11\xc2\x18\x8c\xf0\xa8\xad\x2d\x7a\x7a\x82\x55\x51\x2d\xe0\x97\x6a\xc4\xd9\x19\x3f\x91\x38\x9a\x2f\x3f\x27\x98\xf8\x72\x0f\xbc\xaa\xdf\x2f\x25\x40\x82\x02\x04\x37\x46\x08\x63\x30\xc2\x7d\x9f\x35\xce\x49\x72\xff\x79\x9c\x94\x37\xfc\x41\x32\x80\x64\xff\x95\xe9\x0e\xd2\xe7\x11\x86\xb6\x4f\xd5\xb9\x3f\x93\xfe\x42\xc5\x50\x80\xe0\xc6\x08\x61\x0c\x46\xa8\xf7\xf9\xba\xb7\xee\xc3\xbd\xa9\x87\x08\x05\x1b\x8a\x86\x43\x14\x54\x55\x3f\x6e\x22\xe7\xa3\x73\x73\x82\xd7\x74\x05\xc8\x2a\xad\x51\x80\xe0\xc6\x08\x61\x0c\x46\x68\xdc\x70\xe5\x43\x20\x39\xa9\x53\xb1\xe7\x8f\x60\xf2\xd6\xc3\x32\x85\x21\x0f\x5e\x3f\x25\x79\xc7\x28\x43\x1e\xde\xed\xf1\xe3\x1d\x2d\x0a\x10\xdc\x18\x21\x8c\xc1\x08\xdf\xfe\x26\x0d\xb3\x35\xa8\x9e\x79\x98\x15\x33\xef\x3d\x50\xf8\x9c\xcf\x09\xdc\xfa\xed\xae\x4d\x12\x95\x7b\xe9\x1a\x65\xf4\xb9\x63\x28\x40\x70\x63\x84\x30\x06\x23\xa4\x12\xfa\xce\xfd\x3e\xa7\x62\x76\x65\x1a\x3d\x28\x26\x75\xa0\xd8\x78\x3c\x44\x51\x3b\xc3\xd9\x2c\x50\x38\xde\x9c\xf5\xf7\x5e\x3b\x14\x20\xb8\x31\x42\x18\x83\x11\x9e\x16\x49\x4f\x34\xa1\x2c\xec\x1e\x79\x4b\xf5\x80\xac\xff\x76\xa3\x7a\xe8\xd4\xa0\xb2\x92\x99\xb4\x56\x49\xf1\xb1\x8d\x19\x66\x4f\x14\x20\xff\x11\x23\xdc\xad\xef\xec\x84\x09\x83\x11\xde\x16\xf9\xd8\x99\x64\xd3\x31\xa4\x9f\xd3\xf3\xe3\x54\x51\x2e\x47\xf6\xc5\x4a\x8e\x78\x42\xf8\xe7\x2a\x3a\x92\x2f\x1f\x56\x57\xb9\x50\x80\xe0\xc6\x08\x61\x0c\x46\xa8\xe3\x77\xb1\xda\xd5\xa8\xd6\x67\x33\x62\x5c\x98\xb7\x2b\xd6\xaf\xc6\xb0\xb9\xe7\xd5\x72\x3e\x2f\x53\x6b\xc8\x92\xdc\x7a\xae\x3e\x0a\x10\xdc\x18\x21\x8c\xc1\x08\xd3\xb7\xff\x7a\x9c\xc8\x9e\x91\xa1\xf8\xb6\xf7\xd5\x93\x23\x91\x4d\x35\xf7\x37\x16\x15\x32\x17\xd9\x56\xfa\x16\x4d\x7e\xac\x4e\xb8\xa2\x00\xc1\x8d\x11\xc2\x18\x8c\xf0\x72\x72\x1c\xdf\x61\xc5\x1f\xc1\xae\x66\xb7\x93\xc3\x7e\x4a\x68\x85\xdc\x8d\x83\x7c\x44\x7f\x47\x70\xcc\x57\x57\x7d\x78\xf1\x88\x0d\x05\x08\x6e\x8c\x10\xc6\x60\x84\xd1\x81\x46\x1d\x7f\x5d\x72\xcd\x73\x4c\x0e\x96\x25\xb4\x77\xfa\xb7\x90\x5d\x25\xf1\xcb\xfb\x54\xde\xb4\xad\x2a\x66\x7a\xbb\x9d\xf8\x43\xc7\x8d\x11\xc2\x18\x8c\x70\xa8\x51\xdd\x4a\x88\xbc\x39\xa4\xe7\xf0\x50\x20\x42\x25\x3c\x5d\xbf\xd2\xf8\x49\xeb\x8c\x0d\x63\xdf\xa8\x64\x9e\x94\xb9\xb5\x1c\x0a\x10\xdc\x18\x21\x8c\xc1\x08\x6d\x4a\xc7\xa2\xaf\x76\xa3\x64\xcd\xfc\x31\xdf\x7b\x43\x7e\xd1\xc7\x4d\xf7\x99\x59\x68\x6f\x9b\x34\xad\xe5\xbc\x66\xb7\xec\x23\x7e\xe7\xb8\x31\x42\x18\x83\x11\x76\x86\xf0\x47\xd1\x37\x3d\xc9\x65\xbe\x5d\x9f\xe6\x9a\xdc\x4b\x29\x35\xaf\xfc\xf1\x5a\xf4\x93\xb5\xa2\xba\x57\xef\x58\xdc\x2d\x8d\x51\x80\xfc\x47\x8c\x70\xb7\x95\x79\x27\x4c\x18\x8c\xd0\xd9\x5d\x28\xe9\xc2\x25\xc2\xdd\xc9\xc4\xe3\x31\xaf\xb3\x7c\x4c\x6f\x20\xef\x45\x47\xe7\x55\x25\xb7\x36\x37\x04\x4c\x6f\xe4\x71\xa2\x00\xc1\x8d\x11\xc2\x18\x8c\xd0\x3e\x85\xe4\x85\xd3\x1c\x7d\x10\x99\xdf\x63\x58\xad\x6f\xfd\xef\x7c\xe7\xd7\x17\x56\x05\x7f\x58\x0b\xb6\xd3\x5f\x3c\xf7\x70\x67\x40\x01\x82\x1b\x23\x84\xb1\x18\x21\x0f\xa9\x91\xcc\x8f\x46\xf1\xd4\xcf\x86\xbc\xaa\xb7\xd6\x69\x25\x3e\x52\x9d\x12\x5c\x72\xc9\x0d\x8d\x30\xd9\xb8\xb5\xf5\xfe\x24\x0a\x10\xdc\x18\x21\x8c\xc1\x08\xb9\x27\xb9\xf2\x0f\x2b\x3f\x2d\x6d\xdf\xae\x37\x0e\xaa\x2b\xdc\x47\x9a\x7f\x3a\xe6\x68\xba\x7c\xfc\xf3\xc6\xcd\x89\x74\xcf\x26\xe2\xea\x87\x1b\x23\x84\x31\x18\x61\xcd\x49\xae\x4d\xfa\x45\x0f\x07\xf9\x6b\xef\x4c\xa3\x51\xe4\x50\x96\x59\xaf\xca\x8b\x73\xd5\x9a\x4a\xc5\xb9\x5b\x5c\x25\xe9\xc4\x95\x09\x37\x46\x08\x63\x30\xc2\xbf\x94\x63\xca\xee\x31\xaa\x7a\x87\xee\x15\xa5\x3d\xe6\x1c\xe2\xbe\xcd\xd0\xf9\xd7\x7c\x91\x55\xf0\x6d\x03\xef\x45\x61\x33\x4a\x5b\x14\x20\xb8\x31\x42\x18\x83\x11\x7e\xcb\xdf\xa3\x79\xea\x13\x79\x3b\x07\x69\xd2\x96\xa9\x77\x96\x7b\x86\xc2\x2b\x49\xb1\xc6\x05\xad\x5e\xd1\xf0\xc7\xfb\x7f\x56\x9f\x46\x01\x82\x1b\x23\x84\x31\x18\xa1\x5a\xd5\x44\xa1\x64\x87\xc4\x77\xe3\xd6\x13\xae\xf0\x85\xbc\xaf\xcc\x15\xfa\x5f\x50\x24\xcf\xce\x9a\x53\xeb\x6d\x2c\x65\x91\x0d\x0a\x90\xff\x88\x11\xee\x36\xbb\xee\x84\x09\x83\x11\x46\x1b\x42\x83\xf1\x5e\x13\x8e\xdd\xf7\xac\xfa\x1e\x9f\x3e\x33\xeb\x77\x20\x2b\x3f\x27\xe4\xc7\x2b\xf2\x48\x2b\xd3\x93\x57\x75\x88\x7f\x10\x6e\x8c\x10\xc6\x60\x84\x4a\x2d\x3e\x01\xdb\xbc\x93\x1d\x0d\x06\xb9\x33\x63\x47\x03\x4b\x99\xa8\x2a\x45\xeb\xac\xa7\x52\x2d\x7f\xeb\x7d\x69\x2e\x77\xd4\x45\x01\x82\x1b\x23\x84\x31\x18\x21\x2f\x62\xad\x1b\x54\x33\xf8\xf9\x98\x57\x3c\x93\x2a\x49\xec\xc9\x7e\x25\x96\x4a\x2a\xed\x42\x65\x4f\xd5\xed\x85\xe0\xc5\x22\x0d\x14\x20\xb8\x31\x42\x18\x83\x11\x6e\x3b\x5f\xc8\x9f\x99\xea\xfd\x03\x8d\xbe\x31\x30\x7e\x4f\x92\x14\xef\xc4\x66\x2e\xef\x7d\xe2\xa5\x70\xdb\x14\x7b\xd9\x93\x33\x02\x28\x40\x70\x63\x84\x30\x06\x23\xf4\xd0\x1d\x96\xfd\x59\x45\x6e\x6e\x42\x21\xbd\x56\x23\x11\xb4\xf0\xb7\xd5\x51\xce\x3c\xea\x0c\x8b\x90\x4c\xa6\xc5\xd1\xfb\x9b\xc4\x15\x16\x37\x46\x08\x63\x30\xc2\x5c\x0d\xbd\xe2\x5e\x0d\xc2\xf7\xf5\x80\x9b\xdf\x82\x57\x6a\x46\x3b\x1a\x0d\x5e\xf2\x3e\xf2\x3e\x23\x13\xfe\x85\x5a\x32\xb7\xd0\x0a\x05\x08\x6e\x8c\x10\xc6\x60\x84\x53\xb5\x06\x6b\x37\xad\x98\x15\x73\xde\x25\xca\x05\x2b\x51\xe5\x0d\xd4\x68\xfa\x71\x64\xd7\x57\x2a\xc9\x2c\xfe\xf8\xc9\xfe\x96\xb8\x6a\xe0\xc6\x08\x61\x0c\x46\x28\xc1\xed\x7e\x56\x7a\x35\xc3\x27\x65\xb2\xe6\x5d\x93\xa3\x7e\xb4\x5d\xce\xf1\x97\x05\xe2\xd7\x8e\xd6\xb3\xbd\xfa\x2a\x68\x67\x24\x81\x02\xe4\x3f\x62\x84\xbb\xed\xee\x76\xc2\x84\xc1\x08\x0f\x79\xc5\x9a\xa5\x9a\x90\x93\x6b\xbe\x09\x74\x81\xe4\xd1\x40\x29\x2d\xc7\x83\x1c\x04\x54\xf9\x66\xbf\x1b\xdf\xe7\xd3\x9e\x64\x28\x40\x70\x63\x84\x30\x06\x23\x1c\xdf\xaf\x50\x77\xc8\xec\x60\xc1\xe0\xab\xe3\x8f\xc3\x20\x73\x9e\x4e\xaa\xf4\x58\xae\x84\x90\xf0\xfd\x39\xd3\xfe\x34\x7a\xfc\xfc\x28\x40\x70\x63\x84\x30\x06\x23\xe4\x3d\xdf\x18\x46\xf1\x64\x4f\xa3\xfb\x4a\xbe\x41\x98\x17\xfd\xd9\xe8\x2b\x54\xcf\x5d\x7c\xdb\x1d\x6f\xd8\x24\xec\x27\x5d\x91\x90\x41\x01\x82\x1b\x23\x84\x31\x18\x61\xd3\xe6\xf9\x3a\xe7\x86\xcb\x21\x0b\x8a\x7b\x4d\x9f\x32\xe5\xc4\xde\xe2\x78\xa8\x18\x57\xa1\xf5\xc1\x8d\x86\xe6\xf2\xa3\x67\x5f\x35\x51\x80\xe0\xc6\x08\x61\x0c\x46\x98\xd2\xd8\x59\x1c\xa4\x1d\x4e\xa2\x94\x7e\xe2\xf9\x70\x8d\x1b\xc3\x20\x89\x15\x7d\x77\x93\x8f\xad\x5a\xec\xe3\x19\xc1\xa7\xc2\x67\x51\x80\xe0\xc6\x08\x61\x0c\x46\x18\xc6\x5f\x71\xec\xaf\x50\x45\xbe\x11\xa9\x51\xa3\x77\xb1\xb9\xb7\x72\x4f\xcd\xdc\xe7\x92\xd7\xfe\x77\x49\x6f\x71\xa7\x9f\xf1\x25\x06\x16\x37\x46\x08\x63\x30\x42\x06\x76\xb7\x6b\xd2\xee\x36\x93\xc1\x1b\xf3\x74\x8e\xe2\xdd\x25\xae\x6a\x76\x5f\xaf\xf0\xaf\x9f\x6f\xe2\xef\x0e\xde\xac\x28\x06\x28\x40\x70\x63\x84\x30\x06\x23\xa4\xad\xdd\xf7\x23\xc6\x34\xf5\x60\xd2\xaf\x6f\x0a\x17\x57\xab\xc3\x2a\xc8\x85\x68\x0a\x14\x6b\x33\xbe\xcc\x0f\x1a\x27\x70\x26\x9d\x40\x01\xf2\x1f\x31\xc2\xdd\xce\x3f\x76\xc2\x84\xc1\x08\x33\x8d\x6c\xcf\x3c\x33\x8e\xb8\x99\x32\xd9\xd2\x13\x1b\x55\x39\x72\xea\x9e\xeb\x63\xc9\xa3\xd7\xf4\x4c\x63\x0c\x1a\x4a\x9d\x0b\x88\x63\x05\x6e\x8c\x10\xc6\x60\x84\xf4\xac\xf9\x76\x64\x14\x47\x27\x1f\x78\x94\x1b\xdd\xb3\xcd\x49\x90\x7f\x7d\x87\xb3\xa4\x2f\xb5\xe6\xfc\xb8\x70\x69\x7c\xdf\xd7\x73\x28\x40\x70\x63\x84\x30\x06\x23\x3c\xdf\xb3\xfd\xfd\x69\x64\x1d\x63\xe3\xb2\xe5\xbb\xc2\x37\xe5\xd9\x1b\xf9\xe3\x3c\x02\xee\x52\xf9\xd7\x4b\xed\x29\x16\xd6\x6e\x13\x9b\x02\x6e\x8c\x10\xc6\x60\x84\x23\xf7\xd9\x9c\x9e\x35\x1b\xae\x3b\x56\x0d\xc6\xdc\x6a\x79\x5a\x33\x9d\xf7\x38\xe1\xb0\xc5\x00\x41\xa2\xb7\x54\xe9\xfa\x44\xb0\x10\x0a\x10\xdc\x18\x21\x8c\xc1\x08\xa1\x0f\xc1\x5a\xd0\x5a\xd8\x6f\x95\x9a\x77\x41\xab\x24\x7e\x02\x2c\x9a\x19\xad\x8d\x1f\x59\x4d\x29\xf8\xde\x90\xdf\x67\xd4\xa6\x42\x01\x82\x1b\x23\x84\x31\x18\xe1\xd3\xeb\xa1\x31\x1b\x0f\xbd\x1a\x8f\x34\x6d\xfa\xd1\xdb\x2c\x5d\x47\x2d\x69\x15\xd8\x29\x07\x4f\xba\x5f\x57\xbe\x3d\x71\x44\x9c\x1e\x05\x08\x6e\x8c\x10\xc6\x60\x84\xc7\xbe\x59\x9e\xbb\x12\x2d\xad\x13\xfd\x99\x1f\x62\x54\x34\x70\x94\x68\x50\x83\x7a\xbd\x65\xce\x8f\xcb\xfa\xe7\x55\x7e\xbe\x42\x81\x02\x04\x37\x46\x08\x63\x30\xc2\x4b\x9c\xef\x12\x66\x87\x1e\x3e\x15\xdd\x2a\xf8\x95\xc5\xc0\xc8\xf6\x52\x34\xfd\x99\x23\x45\x8e\xfb\xf2\xef\x12\x07\x43\xf9\x76\xe2\xf7\xf1\x1f\x31\xc2\xdd\x4e\x08\x77\xc2\x84\xc1\x08\x6b\xb7\xd9\x24\xb3\x32\x42\x0b\xee\xd6\x67\x2c\xa1\x0c\x1c\xa4\xee\x2e\xab\xee\x1b\x93\xa4\x95\xbd\x8c\x23\xf2\xf7\x12\xf4\x88\xdd\x16\x37\x46\x08\x63\x30\xc2\x6f\xdd\x92\x49\x77\x37\x43\x28\xde\xd0\x53\x5d\x0f\x3c\xfc\x30\xbf\xfe\x92\x55\xe7\xc3\xab\xb5\xef\x9f\x55\xd0\x34\x0c\xbc\x3f\x7e\x10\x05\x08\x6e\x8c\x10\xc6\x60\x84\x17\xea\x9c\x52\xb9\x6e\xc6\x2f\x37\x6d\xdd\x7b\xf4\xa4\x48\x83\x7b\x2e\xe8\x4a\xfa\x63\xad\x6b\x06\xe4\x03\x01\x7d\xae\x0d\xf3\xfb\x50\x80\xe0\xc6\x08\x61\x0c\x46\xc8\x86\x1a\x6c\x12\xc2\x7d\x3f\x17\x6e\x1d\x9d\xb8\x21\x99\x3e\x5a\xa8\x93\x36\x56\xd6\x42\xb2\xb5\xf0\xd9\x38\xb9\xf4\x80\xa9\x22\x0a\x10\xdc\x18\x21\x8c\xc1\x08\x27\x24\x17\xc9\x18\x24\xa4\x64\xb2\xd2\xbd\xc6\x96\x2f\xa6\xfc\x0e\xe5\x61\x92\xff\x52\xe8\x2d\x43\xda\x79\x44\x5e\xee\xaa\xa5\x35\x0a\x10\xdc\x18\x21\x8c\xc1\x08\x45\x23\x0f\x59\xc7\x0d\x50\x4b\x52\x3d\x8a\x79\x3b\x78\xe1\x4b\x3a\xfb\x21\xf3\x03\xb9\xab\xb3\x9b\xf7\x6c\xbd\xe5\xc3\xba\x3e\x1d\x47\x01\x82\x1b\x23\x84\x31\x18\xa1\x8b\x7d\xc1\xb5\xc7\x7a\x7a\x25\xa1\x6a\xf9\x64\x49\xd6\xeb\xd6\xc2\xa4\x36\xfd\x27\x0f\x1e\xf7\x45\x23\x90\x43\xb2\xdd\x9f\xf7\xa3\x00\xc1\x8d\x11\xc2\x18\x8c\xb0\x21\xe5\x88\xc0\xbe\xa5\x5f\x4f\x13\x9a\xc3\xb3\x45\x4f\x97\x58\x0d\x5f\x3c\x3b\x76\xc9\x76\x66\xa5\xa3\xd7\x9f\xf1\x81\xef\x01\x07\x14\x20\xff\x11\x23\xdc\xed\x0c\x7d\x27\x4c\x18\x8c\xb0\x72\x43\x94\x44\xd2\xc0\x45\xeb\x74\x42\xfe\x58\x83\x41\x4b\x51\x6f\x89\xeb\x5d\x5d\xce\x9f\x53\x92\xcf\x12\x09\x4f\xae\x6e\x13\x67\x5b\xdc\x18\x21\x8c\xc1\x08\x9f\x3c\x2e\x4f\x7e\xc8\x1d\xfc\x1a\x6c\x92\x17\x3e\x1d\x4a\x74\x5f\xbb\xf9\x55\x48\xa0\xbf\x68\x78\x96\xf6\x5e\xb5\xcf\x8b\x38\x11\x14\x20\xb8\x31\x42\x18\x83\x11\xa6\xc8\xfc\x74\x7c\xab\x90\x9b\x2c\x4c\x2b\xd4\x75\x7c\xbc\x39\x9b\xe5\xdc\xe1\x97\x93\x57\x05\x43\xc9\x7d\x1f\xe6\x9b\xb4\x86\xeb\xa0\x00\xc1\x8d\x11\xc2\x18\x8c\xd0\x38\x1d\xf0\xfe\x62\x5d\x14\x79\x5a\xac\xcb\x79\xfc\x92\x73\x28\xd5\xca\x09\x6a\x4b\x6d\xba\xbe\x3f\xe4\x1b\x4b\x82\x94\xe4\xc4\x55\x03\x37\x46\x08\x63\x30\xc2\xd8\xf3\xc6\x57\xea\x09\xb0\xc8\xd2\xdc\x9b\xa5\x3c\x73\xee\x32\xda\xef\xf5\x75\xb2\x21\x2f\xae\x39\x65\x9d\x9a\x2c\xf8\xce\x29\x8a\x02\x04\x37\x46\x08\x63\x30\xc2\x67\x9d\xd1\x6e\x1b\xd6\x27\xc7\x26\x9e\x8b\xbe\xbb\xeb\x77\xa9\xaf\xaa\xd1\x55\x7b\xf8\x37\xc5\xb3\x35\x72\xf9\x48\xde\x73\xce\x5a\x28\x40\x70\x63\x84\x30\x06\x23\xdc\x12\x5e\xa5\x4b\xaf\xfd\xab\x3d\x3e\xdd\xd0\xa2\xe1\x29\x1b\xec\x9a\x7e\xd5\xf0\xaa\x5c\x71\x12\x33\x85\xc8\xcd\xae\x99\xf7\x87\x50\x80\xe0\xc6\x08\x61\x0c\x46\xb8\x6e\x1a\x13\x79\xe7\x75\xf0\x59\xd5\xee\x0a\xdb\xbb\x2e\x6c\x9f\x84\x1c\xe5\x93\xca\xa0\xaf\xc9\x87\x82\xf7\x8e\x58\x06\xf1\xa9\xa3\x00\xf9\x8f\x18\xe1\x6e\x77\x8d\x98\xcb\x3e\xf6\xd0\x8a\xb7\x19\x55\x66\x81\x7b\x5b\xf3\x97\x2c\x32\xfe\x24\x38\x56\x5a\x4b\x74\xad\x9c\x4c\x76\x6c\x38\x6e\x9e\xc8\xbd\xfd\xef\x55\x57\xfe\x77\xcf\xad\x80\x1b\x9b\x3f\xd9\x7e\x4f\xb0\x9c\xa9\x96\x0b\x99\x7d\x77\x56\xc3\xd6\x49\x5e\x37\xd8\x4a\x28\x42\xae\xea\xf9\xbf\xd7\x72\xdf\xd4\x0d\xd9\x6d\x36\xeb\xa7\xff\x6c\x7e\x61\xb8\xe8\x1e\xeb\xcf\xd6\x22\x56\x45\x2e\xa9\xbd\x0a\x44\x44\x12\x59\x2e\x91\x9f\xfa\xa7\xf4\xd3\x78\xee\x8d\xf0\xe6\xab\xb6\xf6\xf4\x92\xa7\xeb\x9c\x95\x8f\xa5\xe4\x5b\x4b\xdc\x14\xaf\xd3\x2d\xfc\x62\xef\xb2\xed\x55\x35\xf0\x4f\xe9\x3c\xbb\x55\xf6\xac\xd8\xd7\xa8\x5b\x6c\xd7\xf2\x2e\xb9\x4f\x7d\x7b\xa2\x72\xb4\x78\xac\xc6\xed\xf7\x83\x85\x2f\xd7\x04\x9c\x8f\x33\xfd\x53\x7a\xc6\x54\x59\xa1\xc3\x66\x51\xb5\x7e\x4f\xb0\x7d\xa4\xd2\xf2\x2b\x45\x01\xb5\x6e\x69\xf9\x96\x5a\x45\xef\x0c\x69\x11\x3a\xed\x7f\xaf\x51\xeb\x5f\x5c\x8d\x43\x86\xa8\xc5\xbf\xde\xcb\x50\x6c\xcc\x3f\xe8\xaa\x3b\xba\xff\xd7\x45\xa6\x91\x7d\xa1\x72\x91\x45\x1d\x04\xd5\x7f\x2f\x26\x7d\xf3\x6b\xfe\x56\xca\x28\xd2\x8e\x3e\xcd\x1d\x24\xaf\x38\xe7\xda\xaa\x9a\x47\x35\xda\x7b\x67\x70\xf4\xae\xb6\x89\xb9\x54\xcb\xfe\xff\x5d\xf6\xed\xf6\x54\x77\x3a\x1a\x06\x23\xe4\x21\x79\x04\xb9\x55\x5d\x4f\x6a\x12\x74\x6e\x2a\xf3\x27\x04\x7b\xbc\x51\x36\x6d\x4f\x0b\xd3\xb8\xeb\x10\xf8\x23\xac\xe8\x35\x71\xa9\xc0\x8d\x11\xc2\x18\x8c\x50\x25\xae\x80\x72\x5f\xf3\x46\x25\x9f\x9d\x72\xf1\x56\xfa\xb2\xe5\xb4\xb9\xb0\x67\xb2\x16\x67\xcf\x35\xbb\x32\x06\x89\x0b\x5a\xc4\x4e\x80\x1b\x23\x84\x31\x18\xe1\x44\x30\x41\xf6\x89\x23\xcf\xe1\x41\xbd\x7b\xb2\xf2\xe2\xa4\x8f\x15\x7c\xce\x58\x5e\xdf\xca\x5b\x6e\xac\x48\x08\x10\x2a\x1f\x24\x7e\x0e\xdc\x18\x21\x8c\xc1\x08\xe5\xa8\x06\xbd\xbd\xda\x07\xcc\xdb\xf6\x2a\xb8\x1f\xcc\x78\x6c\xfb\xcc\xdd\xf3\xe1\x9f\xcf\xef\x7f\x3b\x90\xa1\xd5\x51\x42\x0b\x10\x0a\x10\xdc\x18\x21\x8c\xc1\x08\xbd\xbe\xa5\x14\x7b\x17\x5c\x7c\x17\xc7\x7b\xf3\x5c\x93\x47\x67\x01\x4c\x42\xc9\xbf\xfa\xec\xd1\x99\xee\xfb\xa4\x76\x9d\x9f\xba\x95\x50\x80\xe0\xc6\x08\x61\x0c\x46\x78\xdd\x84\x8b\xb9\x0b\xf2\x3b\x45\x99\x75\xad\x77\xe4\xf4\x9d\x53\xae\x4f\x7f\x51\x73\xc6\x1e\x4b\x17\x65\x6e\x1b\x8b\x3b\xd8\xeb\x8d\x02\x04\x37\x46\x08\x63\x30\x42\x0e\x1f\x4f\x59\x7d\x0f\x7f\x46\xe1\x93\x46\xcc\xa1\xa0\x5a\x70\x2e\xfa\x87\xfe\xb0\xa9\xd9\x39\x0e\x9a\x33\xc7\x2d\xa1\x04\x23\x14\x20\xb8\x31\x42\x18\x83\x11\x52\xdd\xed\x64\x12\x34\xe8\x61\x99\x7d\xe2\xd0\x72\xee\xb8\x74\xe4\xe5\x27\xa2\xcd\x5f\x39\xe5\x92\xe4\x26\xb2\xb4\x39\x5d\xde\x32\xa2\x00\xf9\x8f\x18\xe1\x6e\x7d\x67\x27\x4c\x18\x8c\xb0\x3c\xe4\xc5\xfb\xcd\x23\x0a\xdf\xe5\x28\x65\x07\x1b\x02\xb3\x0e\xb6\x7b\x79\x5d\x33\x79\xc3\x1d\x34\xf4\x41\x77\x34\x6d\x9f\x8d\x20\x0a\x10\xdc\x18\x21\x8c\xc5\x08\x63\x8f\x19\x07\x70\x32\xbc\xa0\xf7\x0e\x31\x09\x2b\x7b\x6a\x2a\xe1\x15\x9b\xc5\xd1\x25\x45\x3f\x13\xcd\x68\x5c\x19\xbd\xe1\x81\x02\x04\x37\x46\x08\x63\x30\xc2\x8b\xea\x7a\x77\x97\xe6\xef\x89\xce\x77\x3e\x54\x9e\xc9\x9d\xef\x17\x0c\x98\x3e\x1a\x2c\x79\xb3\x3c\xc0\xd6\x36\x71\xf1\x91\x85\x2a\x0a\x10\xdc\x18\x21\x8c\xc1\x08\x59\x95\x6e\xab\x4e\x9a\x2b\xeb\xa9\xff\x66\x4c\x34\xb8\xbb\xb6\x35\x7c\x8f\xbc\x93\x24\x6e\x1f\x23\x6f\x96\xa1\xa3\xde\xa9\x66\x61\x14\x20\xb8\x31\x42\x18\x83\x11\x7a\xf9\x77\xcb\x24\x96\xb0\xce\x86\x88\x1e\x7c\xf2\xe9\xc5\x33\x68\xcb\xbc\xc3\xbb\xa4\xbf\xd2\x90\x33\x7e\x2f\xcb\x75\x36\x11\x6e\x14\x20\xb8\x31\x42\x18\x83\x11\x3e\x95\x86\x42\xb3\x35\xc9\x6b\x82\xfc\xe9\x6d\x1e\x79\xca\xac\x5c\xf7\x7a\xb3\x76\x98\x6e\x66\xe6\x4b\xe2\x12\xb9\x53\xb5\xa7\x1a\x0a\x10\xdc\x18\x21\x8c\xc1\x08\xed\x9e\xac\x3c\x08\x20\xad\xd7\xb3\x0d\xbd\x7a\x2a\x32\x89\xfd\xc3\x07\x0b\xcf\x4b\xe7\x2f\xc4\x1e\xe5\x0b\x30\x8f\x66\x3f\xe9\x4c\xdc\xfb\xe0\xc6\x08\x61\x0c\x46\x58\x54\xa5\xc4\x9e\xcc\xbf\x65\x95\xc8\xa4\xa9\xbe\x68\x4c\x13\x30\x7d\xf1\x5d\xdf\x51\xe3\x49\x71\x1f\x01\xd7\xf5\x9f\x47\xf2\x55\x50\x80\xfc\x47\x8c\x70\xb7\x95\x79\x27\x4c\x18\x8c\xb0\x76\xde\x24\x72\x95\x96\x32\xad\xc4\x2f\xe6\x18\xe3\xd1\xfd\x90\xa9\xaa\xb7\x25\x7f\x89\x87\x69\x9e\xc3\xf3\xa1\x93\x9b\x77\xc5\x50\x80\xe0\xc6\x08\x61\x0c\x46\x78\x7e\xed\x45\x4a\x11\xd3\x9c\x75\x58\xed\xf8\xb1\x13\x15\x5a\x99\x54\x13\x93\x41\x8d\x1c\x31\xc1\x5c\xa4\xf1\xdf\x53\x46\x20\x1f\x14\x20\xb8\x31\x42\x18\x83\x11\x9e\x5f\x91\x0f\x50\xfd\xd0\xf8\x4c\x5e\x23\xf8\x91\x3d\xe3\xc1\x3b\xec\x17\x8c\x37\x65\xba\x5a\xfd\x1c\xbe\xef\x7f\x7a\x88\xba\x45\x00\x05\x08\x6e\x8c\x10\xc6\x60\x84\x84\x74\x87\x52\xc9\xd6\x57\x3f\xae\x48\x71\xed\x71\x4b\x15\xf4\x38\xc7\x51\xf2\xdb\xf3\x73\x21\x85\x80\xd3\xc0\x9d\x92\x2b\x87\x89\x8d\x07\x37\x46\x08\x63\x30\xc2\x57\x9d\x29\x9e\x03\xac\xa8\x85\xa6\x86\xc7\xc1\xe5\xd9\xaa\x46\xd0\x97\x43\xa9\xd2\x10\x24\x70\xdb\x71\x4c\xa8\xe5\x6c\xd2\x59\x14\x20\xb8\x31\x42\x18\x83\x11\xc6\xa7\x54\xb3\xef\x21\x08\xcc\xc2\xc3\x31\x7f\xa5\x2f\xa4\x72\x84\x19\x15\x5e\x2f\xcb\xd9\x1e\x53\x1c\x9d\x8e\xa1\x96\x61\x74\x43\x01\x82\x1b\x23\x84\x31\x18\x61\xb4\xfe\x90\x4a\x4e\x21\x9d\x3a\xf3\xd4\x48\x10\xb3\x88\x4b\x85\xcf\x61\xfe\x99\x17\xb0\xfa\x1f\xad\xdf\x95\xea\x87\xad\xab\x89\xab\x1f\x6e\x8c\x10\xc6\x60\x84\xb3\xbe\xa3\x0d\x06\xe2\xfb\xae\xcd\x2a\x54\x15\x19\x7b\xeb\x18\x92\x98\xf5\x1f\x60\x35\xb1\xd5\x09\xfe\xa9\xe9\x93\x1a\xfe\x15\x41\x01\xf2\x1f\x31\xc2\xdd\x66\xd7\x9d\x30\x61\x30\x42\x55\x52\x69\xb6\x26\x3e\x3a\xf5\x27\x8f\x65\xf2\x9b\xf9\x45\xc4\x26\xd8\x26\xa4\x86\x9e\xe8\xb9\x5a\x0b\x58\x3b\xd4\x7e\x79\x6f\x88\x02\x04\x37\x46\x08\x63\x30\x42\x13\x76\x29\xb9\x7e\x1f\xdf\x16\xdf\xad\x40\x97\x53\x3a\x3d\x41\x36\x86\x85\xe4\xa5\xed\xca\x12\x47\x47\xe6\xba\xdf\x3b\x46\x10\x3f\x34\x6e\x8c\x10\xc6\x60\x84\xb7\x53\x86\x0b\x7a\x8f\xdd\x91\xbb\x7a\xa0\x7b\x4f\x71\xb0\x06\x85\x0f\x49\x91\xdb\x09\xe3\x46\x6f\x3b\x95\xd3\xf4\x9e\x56\x37\x89\xa3\x24\x6e\x8c\x10\xc6\x60\x84\xa3\x7a\xe8\x55\x8d\xb4\x47\x1d\x74\xa1\xa4\x05\xd9\xb6\xe1\x3c\x71\x2f\x02\x02\xa8\x98\xd3\x67\x8d\x66\x92\xef\x45\xdb\x7e\xe5\x40\x01\x82\x1b\x23\x84\x31\x18\xe1\xeb\xd1\x5c\xb9\x4b\xe5\x36\xc1\x49\xca\x5a\xe6\x54\xc7\x39\xe5\x17\x3d\x03\xad\x78\x53\xd9\xe2\x79\x49\x6a\x0b\xe3\x22\xda\xbc\x50\x80\xe0\xc6\x08\x61\x0c\x46\x78\x59\xe9\x65\x40\xa0\xd8\xf3\x7b\xf5\x7a\xf4\x77\x18\x4e\xdd\x52\xf5\xe4\x10\xfa\xeb\x94\x23\xe7\xac\xb6\xfc\xb0\xab\x7b\x35\x95\x06\x05\x08\x6e\x8c\x10\xc6\x60\x84\x7c\xdf\x1f\xd3\xdc\xed\xe8\x48\xde\x83\x74\xdd\xb8\xc4\xec\xd3\xa9\xd7\x72\xd9\x80\xb2\xd7\xfa\xf6\xc4\xaf\xab\x0f\x8e\xb9\xec\x39\x8a\x02\x04\x37\x46\x08\x63\x30\x42\xc3\xf7\x62\x12\x6c\x5b\x05\xb7\x8b\xaa\x0d\x22\x96\x0a\xb9\xd5\x98\x62\x36\xfa\x9a\xc4\xe6\xd7\xe2\xee\x3b\xdc\x91\xb1\x9f\x12\x42\x01\xf2\x1f\x31\xc2\xdd\x76\x77\x3b\x61\xc2\x60\x84\x14\xfb\xb2\xc9\xf6\x74\x65\x1e\xb5\x70\xe3\xb5\x1c\xb5\xb9\xf3\xec\x57\x5d\xf4\x2c\x79\x31\xc9\xc7\x43\x9f\xc5\xd8\x04\x3a\x28\x88\xbb\x75\xdc\x18\x21\x8c\xc1\x08\x49\xe6\x6f\x0e\x98\x8f\xe8\xfb\x06\xe7\x0d\x55\x3c\xbf\xff\xe9\x45\xe1\xd7\x89\xdc\x90\x28\xda\x57\xcc\xa4\x0c\x7b\x32\x3e\xf7\xf2\xa1\x00\xc1\x8d\x11\xc2\x18\x8c\xf0\xad\x88\x53\x37\xa7\xf4\x3e\xb3\x63\xc5\xae\x3e\x89\xe2\x9d\xc7\xed\x34\x0a\xb6\xf2\x5e\x07\x3d\x39\xa9\x3f\x3e\xdf\x19\xc5\x25\x81\x02\x04\x37\x46\x08\x63\x30\xc2\x88\x75\xc7\x35\x4a\x4a\xfe\x89\xaa\xfa\xdf\x92\x09\xed\x6e\x0b\xd6\x04\x7d\x4e\xe9\xe2\x0a\x7e\xc4\xeb\xac\xf9\xe2\xec\x4b\xe2\x0f\x1d\x37\x46\x08\x63\x30\x42\xda\x59\xf7\x37\xb7\x4f\xa8\x2e\xb5\xa3\x72\x4d\x8f\x82\xe5\x72\xae\x48\x56\x18\x9d\x7a\x21\x5c\xf6\x8a\x2e\xa4\x40\xa3\x80\x9f\xf8\xac\x70\x63\x84\x30\x06\x23\x54\x0b\x08\x8e\x58\x66\x79\xf8\x60\xd9\x80\xfc\x64\x3b\xad\x5c\xa0\xd9\xa6\x46\x58\x12\x57\xfa\xfd\x9f\xfc\x3f\x75\x04\x73\xd2\xec\x51\x80\xe0\xc6\x08\x61\x0c\x46\xc8\x58\x16\xa1\x5f\x29\xcb\xdf\xdc\xac\x76\xfb\x45\xb7\xd3\xab\x9b\x9d\x1a\x99\x61\x17\x8f\xa2\x67\x58\xde\x7d\xf2\xe7\xfd\xb6\xc6\x86\x02\x04\x37\x46\x08\x63\x30\x42\x81\x27\xde\x6f\x57\x14\xe3\x7d\x38\xca\x3e\xa9\x94\x9f\xbe\xa7\x78\xf5\x56\xfd\x93\x0a\xda\x40\x47\x6d\x81\xf1\xe7\x66\x8a\xc5\xa6\x28\x40\xfe\x23\x46\xb8\xdb\xf9\xc7\x4e\x98\x30\x18\x61\x5c\xcb\x45\xbb\x2e\xc3\x52\xa3\x43\x1f\xdc\xe3\xdb\x8e\x3b\x2a\xdf\x5b\x40\xaf\x66\xb8\xb5\xfb\x6b\x53\xff\xb0\x2b\xd9\xdf\x43\x5c\x35\x70\x63\x84\x30\x06\x23\xb4\x5f\x53\x7c\x63\xb9\x6c\xd8\xf6\x88\xfa\x08\x69\xe1\xfd\xe5\x8b\xcd\xdd\x32\x7f\x32\x48\x9d\x53\x12\xb8\x73\x95\x59\xbc\x3f\x79\xa2\x00\xc1\x8d\x11\xc2\x18\x8c\x90\x05\x9a\x96\x74\x5e\xd8\x34\x94\xdf\x4b\x23\x3e\x71\x39\xbe\x9a\xd7\xf9\x9b\xcb\xd9\x3b\xb6\x54\x4f\xde\x56\xa4\x5e\xd4\xeb\x25\x6e\xdc\x71\x63\x84\x30\x06\x23\xe4\x89\x8a\x3b\x2c\xc0\x75\x4a\x89\x8b\xa3\xfd\x6b\x56\xcf\xd0\x73\x2e\x39\x0a\xfd\xb5\xc5\xae\x92\x82\x8c\xda\x1c\x01\x97\x34\x3b\x14\x20\xb8\x31\x42\x18\x83\x11\xda\xec\xcd\xfd\x3d\x5d\x29\x65\x4b\x77\x98\xc2\xd4\xeb\xe5\xa8\x9f\xb1\x31\xa2\x94\x98\xfe\x2d\xd8\xb4\x53\x8d\x21\x30\xd3\x89\xb8\x71\xc7\x8d\x11\xc2\x18\x8c\x50\xc1\x89\x9b\x21\xe1\xe7\xf5\x79\x49\xf7\x35\x1d\xa7\xdf\x94\xf9\x72\xfb\x1b\x74\x96\x3e\x84\x56\x79\x74\xea\x1b\x50\x8f\x75\x28\xa2\x00\xc1\x8d\x11\xc2\x18\x8c\xb0\x49\xc7\xb8\xa4\x70\xf0\x48\xbd\xf8\x87\x88\xe9\xf0\x6e\x8b\x1a\xaa\xe0\xcc\xee\x6f\x01\x5f\x69\x5e\xf6\x55\x47\x9f\x5d\xe6\x24\x36\x05\xdc\x18\x21\x8c\xc1\x08\xf9\xa8\x5e\x50\x32\x5e\x97\x31\x3b\x9a\x63\x92\x0c\x31\x30\xd4\x3b\x1a\x66\x7b\x1e\xf6\xe0\xa6\x92\xd5\x0e\x60\x1f\xf3\x78\x47\xfc\x3e\xfe\x23\x46\xb8\xdb\x09\xe1\x4e\x98\x30\x18\x61\xc4\xd0\xd6\xb9\x9a\x1c\xd6\x09\x59\xab\x4a\x05\xc5\x75\xce\x57\x4e\x1e\xd2\x22\x55\x02\xd6\x87\xa5\x91\x9c\x90\x23\xe9\xaf\x68\x51\x80\xe0\xc6\x08\x61\x0c\x46\x98\x5c\x18\xdf\x34\x40\x43\x2e\xf9\xb2\x95\x45\x71\xf5\xea\x29\x5e\x0a\x71\x4b\xf2\x9e\xd4\xd8\xaa\x23\x47\xf6\x2b\x19\x69\xbf\x24\x7e\x79\xb8\x31\x42\x18\x83\x11\xba\xef\xfb\xb4\xc2\xc9\x51\x26\x7c\xab\xc1\x32\x4e\xa9\x35\xa9\xfe\x89\xfd\xd4\x7a\x6b\x05\x7c\xd9\xe1\xfe\xdc\x04\x57\x03\x25\x09\x0a\x10\xdc\x18\x21\x8c\xc1\x08\xbf\xc5\xff\x44\x2c\xa6\xf3\xf9\xe5\xd4\x7a\xf6\x69\x97\x55\xc5\x5f\x38\x66\x20\xe5\x4b\x6e\x4b\xe2\xf0\x21\x55\xc5\x89\x51\xcb\x1c\x05\x08\x6e\x8c\x10\xc6\x60\x84\xab\x76\x8e\x11\x07\x0c\x3c\x0c\x1f\x5d\x1c\xda\xce\x10\x05\xb9\x11\xcb\xe1\x29\xb1\x77\x12\x52\x3f\xbd\xe1\xf9\x09\xa2\xa9\x89\x9f\x03\x37\x46\x08\x63\x30\xc2\x98\xd8\x32\x0a\x73\x50\xe6\xf3\x95\x8c\x70\x3e\xe6\x0a\x29\x09\x79\x88\x34\xd0\x76\x62\x4d\xd7\x96\x8a\x20\xcb\x1a\xdb\xab\x8d\x02\x04\x37\x46\x08\x63\x30\xc2\xf8\xa3\xfe\x02\x5f\x38\x63\xb5\xbb\x8e\x04\x70\x8c\xda\x3e\xc9\xd5\xe4\x22\x6f\x78\x71\x2f\x76\xb0\x46\x39\xf6\xbd\x2c\x59\x0d\x25\x0a\x10\xdc\x18\x21\x8c\xc1\x08\xb3\x17\x4b\x04\x7e\x7d\x2a\xe1\xa1\x4c\x6c\xe7\x7e\xff\x40\x54\x81\x2b\xd1\xe6\xe6\xf7\x1b\x4b\xfd\xe1\x79\x55\x71\x3f\xeb\x2e\x9e\x44\x01\xf2\x1f\x31\xc2\xdd\xce\xd0\x77\xc2\x84\xc1\x08\xab\x03\xf7\x27\x86\x59\x37\x08\x13\x22\x19\x19\x5e\x94\x56\xe9\x6c\x2f\x32\xb7\x7c\x22\x50\xde\x20\xf1\x71\xe4\x5e\x38\xcf\x4a\x40\x01\x82\x1b\x23\x84\x31\x18\xa1\xf5\xed\x25\xbb\x0d\x0f\x91\xf3\xc6\xef\x2d\xbf\xea\x0f\xbf\x11\x19\xb2\x67\x88\xaf\xa0\x65\xb9\xbc\x71\xae\xd6\xf7\x64\x5c\x95\x24\x0a\x10\xdc\x18\x21\x8c\xc1\x08\x27\x5e\x3a\x5d\x8d\xe3\x14\xaf\x5b\xbf\x40\x1a\xd8\x33\xe4\x9b\x43\x69\x56\xf1\xee\x39\xa7\xde\x31\xc7\x20\xfb\x87\x23\x3f\x4a\xe8\x51\x80\xe0\xc6\x08\x61\x0c\x46\x78\x9c\xe4\xe9\x95\x65\xc5\xb3\xcb\xac\x6d\xf7\xc2\x3b\xfc\x68\x8f\x49\xfa\xd0\x23\xb3\x0d\x89\xf7\x4b\xb4\xbd\x57\xc7\x4c\xec\xa9\x51\x80\xe0\xc6\x08\x61\x0c\x46\xd8\x99\x7c\x63\x10\xa6\xca\x33\xa9\x53\x89\x08\xcc\x2b\xf7\x7b\xd6\x4e\xcf\xd3\x96\xfb\xf7\xa0\x77\xe0\x46\xd0\x9d\x62\x6f\x26\x66\x14\x20\xb8\x31\x42\x18\x83\x11\x7e\x88\xfb\xf8\x4a\x30\xae\x6f\x75\xcf\x68\xd9\x97\x83\xec\x0b\x13\xde\x64\x15\xd6\x6e\xb2\xfa\x1a\x45\x2f\x05\x4f\x98\x4e\x84\x91\xa2\x00\xc1\x8d\x11\xc2\x18\x8c\xf0\x94\x0b\x53\xa1\xd6\x8f\xf5\x49\xe5\x9e\xfb\x27\xda\x2f\x7f\x13\x68\x38\xcd\xad\xd9\x53\xc8\xd3\x42\xa5\x7f\xff\xd5\xf9\x90\x52\x05\x14\x20\xb8\x31\x42\x18\x83\x11\x1e\x8b\xa2\xe5\x29\xb3\xdc\xfb\x25\x86\x2b\x35\x58\x71\x4e\x23\x7a\x6d\xe3\xb3\x56\xba\xfd\xb9\x0c\xa5\xfb\x45\x07\xcf\x2a\xab\x10\x03\xfb\x1f\x31\xc2\xdd\xfe\x5b\x10\x73\xd9\xa7\x9d\x21\xe9\x40\x62\xa5\x43\x67\x18\xfc\x6d\xde\xbd\x2b\xfb\x7c\xd9\xdd\x57\x23\x73\x9e\x3e\x49\x02\xcc\xdf\x16\x37\x68\xaf\x67\xfc\x53\xda\x79\xb3\xee\x4e\xed\xf5\xb7\x87\xa9\xef\x89\x2b\xa2\x13\xb0\xa8\xf1\x8f\xb5\x66\xaa\x4d\x9b\x40\xd9\x19\x37\x61\xc6\xcb\x47\xff\x75\x0b\xe9\x27\x84\x43\xfa\xb4\x42\xff\xaa\x18\x5f\x7b\x13\x2a\x7f\xc0\xe5\xef\xc8\xdb\x2b\x97\x7f\x5a\xc7\x18\x97\xe6\xe4\x36\x0e\x7d\xb5\xfd\xa7\x94\x93\xe5\xcb\xeb\x47\xc1\xfd\x4f\x49\xe6\x8b\x23\x35\xa8\x12\x1b\xd1\x52\xd3\xca\x75\x7d\x9f\x5c\x93\xde\xa6\x07\xfe\x4c\x94\x43\xff\x94\x3e\xf6\x5d\x82\x3d\xe3\xed\xca\x5f\x8a\x2b\x4b\x4b\x1b\xca\x6e\x2b\x26\xce\x3c\x7a\xf8\xa0\x7b\x32\x4d\xb8\x5d\x95\x46\x44\x90\xff\x9f\xd2\x02\x3b\x38\x24\x7c\x79\xf5\x20\x25\x83\x86\x52\x83\x6b\x44\x85\xde\xdf\x2b\xd7\x1a\x44\xdb\xeb\x16\xef\xe9\x68\x76\x04\x3b\x3f\xf8\xa7\xf4\xd0\xf9\x95\xd9\xcc\xb3\x4e\xa8\x21\xe3\xd5\x4f\x45\x3f\x5e\x89\xea\x69\x7d\x66\x30\xaa\x9d\xda\xd2\x3b\x0f\x2b\x2a\xb7\x5e\x7c\xf3\x4f\x29\xb5\x61\xff\x97\x3d\x61\x66\x0e\x31\xba\x27\xab\x17\x75\xab\x17\x90\xb6\x8f\x29\xad\x51\xad\xe9\x1d\xf1\x2e\xf9\x99\x4d\xb2\x3f\xfe\x77\xd9\xb7\xdb\x53\xdd\xe9\x68\x18\x8c\x30\xf6\xcf\x33\xfd\xbd\x77\xc8\x22\x8e\x18\x53\xa4\xc4\x39\x52\xc6\x95\x27\x90\x29\x9c\x36\x07\xf7\xf3\xb2\x05\x46\x42\xe3\x0f\xc9\xa1\x00\xc1\x8d\x11\xc2\x18\x8c\xb0\xc8\x44\xf2\xc6\x75\xf5\xfb\xda\x7f\x2d\x5a\x6e\xba\xf3\x5d\xd5\xb5\xef\xa6\x5e\x16\x62\x25\x47\x7e\x30\x1f\xbd\x6d\x96\x32\xcf\x81\x02\x04\x37\x46\x08\x63\x30\x42\x93\x5b\x05\x67\xbf\x59\x19\x5f\x74\xd9\x33\x33\x7d\x69\x05\x3e\xd8\xb7\x3f\xbe\x6d\x9a\x27\x9e\xe6\x44\xcf\x96\x9c\x0d\xb3\x89\x2a\x0a\x10\xdc\x18\x21\x8c\xc1\x08\x45\x2d\xcc\xff\x8e\xa5\x99\x7d\x65\xe9\x15\xa2\xa3\xd5\xbd\xa5\xb1\x66\xe3\xc2\xac\x78\xbd\x6e\xc8\x2b\xe4\x43\x79\xa2\x75\xbf\x20\x0a\x10\xdc\x18\x21\x8c\xc1\x08\x5f\x67\xf5\x9d\x64\x67\x5d\xe3\x41\x52\xdd\x4c\x13\xf9\x82\x73\x1c\x2b\xd3\x23\xba\x64\xe4\xdb\x95\xbf\x1e\x1f\xe6\x30\x4e\x20\x76\x4d\xdc\x18\x21\x8c\xc1\x08\xab\x3e\x3b\xba\x91\x5b\x75\x87\x15\x8a\xf4\x0f\x57\xc4\xc8\xa3\xdd\x17\x2a\x0f\xf9\x3c\xb4\xcb\x22\x6f\xf4\xfa\x24\x9e\x9f\xcb\x8a\x02\x04\x37\x46\x08\x63\x30\x42\x23\x8d\xe1\xe1\xd2\xc6\x63\xbf\x05\xbb\x8a\x6e\xb7\x93\xfd\x6c\x6a\xf3\xed\xcc\xcf\x2f\x7f\xb7\xf6\x8a\x5c\xde\xdc\x2e\xa5\x4f\x17\x05\x08\x6e\x8c\x10\xc6\x60\x84\xfb\xee\xcf\xbc\x52\x78\x41\x6a\x17\x4c\x42\x15\x93\x35\x95\x5b\xcc\x90\xd4\x1d\x44\xc9\x98\x20\x3b\x11\x3f\x8d\xd0\x3e\x75\xe0\x45\x01\xf2\x1f\x31\xc2\xdd\xfa\xce\x4e\x98\x30\x18\xe1\xef\xce\x1a\xc8\x33\x50\x1c\x7a\x99\xbc\xd5\xc8\x00\x77\xc5\x90\x94\x65\x32\xa9\x84\xd2\xa9\x5c\x46\xf4\x5c\x2d\x4f\x5a\x02\x14\x20\xb8\x31\x42\x18\x83\x11\x2e\x2f\x96\x0a\x5f\xf2\xb6\xb9\x64\x6e\xcb\xcf\x72\x4f\x88\x7a\xe6\x16\x4f\x44\xd1\xc6\x1b\xdf\xe8\xb9\xef\x4b\xc6\x1e\x5e\x16\xa2\x28\x40\x70\x63\x84\x30\x06\x23\x24\x31\xd8\xc7\x82\xd2\x2e\x5e\xca\x28\xe4\x4b\x16\x24\x79\x27\x93\xee\xfc\xcb\xbd\xf8\xbd\xe9\xed\xdb\x08\xc5\xda\x26\x7b\xd5\x45\x14\x20\xb8\x31\x42\x18\x83\x11\x1a\x77\xb8\x7f\x57\xc8\xa4\xce\x7d\xc3\xb8\x52\xab\x78\x86\x5d\x37\xba\xb6\xd7\xe9\x81\x6e\xce\xd1\xbc\xc1\x35\x0d\x82\x5f\xbf\x15\x0a\x10\xdc\x18\x21\x8c\xc1\x08\x5f\x3c\x51\x6d\xf8\xf8\xf1\xa7\x49\x3c\xe2\xbe\xdf\x85\x3e\x7c\xff\x89\xbd\x2e\x8e\xe4\xc3\xf6\xf3\x2a\x81\x86\x2e\x2b\x1e\xe2\x10\x0a\x10\xdc\x18\x21\x8c\xc1\x08\xbf\xd1\x19\xfb\x86\x3e\x16\x94\xea\x52\x61\x8d\x31\xb4\x36\x23\x99\xa0\xb9\x30\xd8\xe8\x31\x1a\xc5\xd5\xca\x10\xfd\x50\x64\x82\x02\x05\x08\x6e\x8c\x10\xc6\x60\x84\x6d\x6c\xe9\x8a\xdc\x73\x51\xd4\x52\xea\xbe\x4d\x6d\xd7\x12\xa6\x62\x83\x95\x25\x3d\x92\xa8\x09\x2f\x85\xa9\x22\xef\xd1\xde\x25\x8e\x9d\xb8\x31\x42\x18\x83\x11\x6a\x34\x93\x35\x19\xc4\x1e\x8f\xb2\xf3\x5d\xe3\xaa\xf0\xd6\xfa\x61\x5b\xd7\xb0\xd7\xfb\xf9\x06\x09\xe9\xb5\x4b\xef\xfd\xf6\xf7\x71\xa3\x00\xf9\x8f\x18\xe1\x6e\x2b\xf3\x4e\x98\x30\x18\xe1\x51\xe3\x73\x77\xd6\x7b\x0e\xea\x4d\xe8\x4a\xdf\x27\x7b\xf6\x28\x6d\x3c\xe4\xbc\x6c\x99\xa7\x63\x62\x31\xad\xfd\x63\x92\xd9\x58\x6f\x14\x20\xb8\x31\x42\x18\x83\x11\xe6\x7d\x5d\xe9\xd9\x94\x9d\xfe\x48\xfb\xa4\x96\xe2\xee\x99\x7c\x54\xea\x1c\xc7\x4d\x9a\x99\x80\xed\x68\xb1\x14\x5b\x65\x07\x13\x62\x98\x70\x63\x84\x30\x06\x23\x7c\x6f\xa4\xe5\xa7\x31\x53\xc6\x93\x92\x73\x80\x83\x63\x36\xb4\x3d\xb5\x86\x21\xe5\xfa\xa1\x53\x7e\x95\xe1\x0c\xef\xcc\x68\x8e\x4a\xa1\x00\xc1\x8d\x11\xc2\x18\x8c\x50\x4f\x5c\x9d\xc2\x93\xaf\xb8\xa2\x43\x4f\x72\xe3\x0b\x69\x4d\x56\x7f\xd0\xa1\xa8\xf3\x8f\xe6\xdf\x54\x90\x08\xaa\xb7\x14\xdc\x20\x36\x1e\xdc\x18\x21\x8c\xc5\x08\x7f\x04\xde\x7e\x9b\x52\x70\x7d\xf2\xf5\x70\xb7\xe6\xc2\xf9\x01\x26\x55\xd5\xc3\x9a\x5b\x13\xf3\x2f\x09\xf2\xd5\x2a\xef\xe5\x88\xfb\x12\xdc\x18\x21\x8c\xc1\x08\xed\xdf\x9a\x19\xf9\x24\xac\x49\xa8\x6f\x57\x18\xad\x5a\x9b\xfb\x4a\x86\xd3\x73\xec\xf5\x4a\x30\x89\x9e\xca\xd3\x95\x69\x3d\x4f\x5c\xfd\x70\x63\x84\x30\x06\x23\x3c\x56\xb1\xdf\x69\x15\xda\x50\xcf\x4b\xdc\x3c\xa8\x6a\x24\xa7\x35\x20\x95\x96\xc9\xe4\xb6\x71\x2b\x5b\x41\xbf\xcd\x39\x37\xca\x12\x05\x08\x6e\x8c\x10\xc6\x60\x84\xdf\xf6\xce\x3a\x3d\xaf\xcf\xbc\x71\x5f\xb3\xc2\x86\x83\xc6\x2a\xd3\xf2\xf6\x4b\x72\xc1\xe7\x4c\x7f\xde\x8f\x9d\x91\xab\xd8\xd3\x63\x8d\x02\xe4\x3f\x62\x84\xbb\xcd\xae\x3b\x61\xc2\x60\x84\x4e\x3a\x33\x25\x5f\x1e\x45\x91\x5b\x44\xeb\xd2\x6c\xa2\x26\x76\x91\x89\x46\x06\xc8\x29\xa1\x94\xe7\x7f\x1f\x98\xd0\x57\x1e\xd5\x44\x01\x82\x1b\x23\x84\x31\x18\x61\x75\x6b\xa4\x35\xbd\x5a\xe2\xfa\xc8\xe4\x37\x69\xbf\x9f\x47\xaa\x5b\xe7\x47\x64\x1a\xcf\x08\x58\xab\xab\x45\x1a\xb9\x71\x39\x1c\x46\x01\x82\x1b\x23\x84\x31\x18\xe1\x87\x4b\xd6\xe3\x41\x03\x77\x5a\x50\x48\xeb\xe9\xdd\xc9\x5f\x99\x5e\x03\xc7\x9e\x76\xe5\x58\x98\xc8\xf7\xd9\xbb\xde\x92\x3e\xc8\x85\x02\x04\x37\x46\x08\x63\x30\x42\x9e\x8a\xfd\x16\x7b\x46\x8a\x64\x8f\x9e\x28\x91\x3c\x12\x2c\x49\x42\x73\xb4\xcf\x45\x76\x49\x68\xea\x00\x55\x59\xe5\x9c\x86\x8e\x11\x0a\x10\xdc\x18\x21\x8c\xc1\x08\xfb\x0f\x93\xd1\x05\xdc\x74\x88\xe3\x7b\xfc\x6d\x88\xcd\xec\x3a\xe5\xb3\xb5\x03\x73\xf7\x3c\xea\xda\x32\x0e\x9c\x7c\xbf\x5a\x5e\x8a\xa0\x00\xc1\x8d\x11\xc2\x18\x8c\xb0\xfe\x70\xdb\x2d\x2b\x3f\x3f\x3f\xb9\xee\x14\x4f\xd7\x8a\xb3\xdd\x75\x6d\x19\xce\x6d\x17\xf6\xa4\x84\xbc\x63\x75\xa7\xaa\xcf\xe4\x41\x01\x82\x1b\x23\x84\x31\x18\x61\xf6\xcf\xea\xe7\x3e\x86\x57\x51\xf3\xdf\x6f\x5b\x56\x38\xcf\xf5\xde\xbe\xfc\x90\xe4\xa1\xa8\x3f\xdd\xd7\x9b\x50\xb5\x91\xf6\x4b\xe2\x28\x89\x1b\x23\x84\x31\x18\xe1\xf5\xaf\xf4\x39\x0f\xa6\xd4\xe6\x98\xf9\xa9\x8f\xc8\x36\x71\x77\x05\x3d\x6a\x5c\xff\xd1\x76\xed\xe1\x44\xd0\xd8\xa5\x2f\xa6\xc8\x49\x14\x20\xff\x11\x23\xdc\x6d\x77\xb7\x13\x26\x0c\x46\x18\xeb\x29\xf8\xd9\xb8\x58\x7d\x8b\x86\x46\xc3\xea\xe8\x86\x81\xbf\xc1\xa7\xc4\x41\xda\x37\xe6\xb1\xbf\xf7\x7b\x26\xb3\x09\x8d\x11\xf7\x4c\xb8\x31\x42\x18\x83\x11\xe6\xd1\x7e\xf6\x29\xcb\xd6\x1c\xca\xf7\x36\x9f\x3b\xeb\xce\x13\xf0\xcd\xb0\x9a\xff\xa9\xe0\xcb\xeb\x9b\xf3\x91\x8f\x1f\x54\xcd\x11\x97\x7c\xdc\x18\x21\x8c\xc1\x08\xc7\xed\x3e\xed\xd3\x25\x7b\xf7\xb3\x9c\x30\xad\x09\x0f\x32\x2c\x91\x84\x56\x19\xcf\xc6\x67\x97\x34\x57\x8f\x15\x6d\xca\xbf\x74\x42\x01\x82\x1b\x23\x84\x31\x18\x61\x6f\xb2\xd9\xa5\xec\x99\x47\x31\x0d\x84\x22\x29\xd2\x9b\x75\x45\x26\x4e\xe6\xad\x3d\x69\xdd\x02\xfd\x1f\x13\xd7\x1d\xbc\x0a\x88\x9d\x10\x37\x46\x08\x63\x30\x42\x72\x9e\xbb\xdd\x6f\x6e\x92\xb0\x95\x07\x5d\x61\xf6\x8c\xbd\xb3\x08\xc9\x82\x72\xef\x67\x5f\xd6\xa7\x5f\x9d\xfd\x66\x23\xcf\xa4\x80\x02\x04\x37\x46\x08\x63\x30\x42\xb2\x92\x82\xe8\x51\xcb\xc1\xd1\xa6\x61\xd7\xc9\x35\x87\x6e\x9f\xe2\x18\x8f\xaf\xee\x72\xab\x6f\x96\x1a\xb6\x95\xaa\x8a\x32\x88\x2b\x2c\x6e\x8c\x10\xc6\x60\x84\x0f\x74\xc9\xc3\x2c\x2e\xf2\xec\xbd\xf8\xfd\xf6\x6a\x81\x7f\x01\xfb\x47\x28\x6c\x5b\xde\x9f\xf9\x2a\x41\x9c\xfd\xbc\xe5\xed\x54\x15\x14\x20\xb8\x31\x42\x18\x83\x11\xd2\xfd\x16\xa5\x7e\xf2\xa3\x34\x77\xbe\x32\xcb\x36\xc6\x6b\xbc\x69\x4a\x7c\x60\xef\x55\xe9\x50\xa6\x0c\x39\x4d\xaa\x35\xaf\x50\x3e\x14\x20\xff\x11\x23\xdc\xed\xfc\x63\x27\x4c\x18\x8c\x90\x7a\x74\x7b\x85\xee\xdd\xd5\xda\xad\x7e\xf6\x29\xde\x53\x85\x84\x87\x4b\xfe\xc3\x2d\xf1\x8d\x2f\xa6\x9b\xda\x98\xf4\xbf\x5c\x65\x46\x01\x82\x1b\x23\x84\x31\x18\x61\x93\x7d\x64\xe4\xf9\xc0\x4b\x34\xcd\x47\xa8\x02\x86\x67\x74\x7e\xe7\x28\xb7\xf1\x3a\x7f\xf2\xf8\xb0\xa9\x9c\x21\x5c\x2d\xe5\x26\x8b\x02\x04\x37\x46\x08\x63\x30\xc2\xd5\x2f\x7b\xcb\x85\x62\x69\x93\x57\x93\xdf\xad\xc4\x80\x73\xfa\x13\x9e\xb9\x1e\x1f\xc7\xcd\xbb\x7b\xf3\x3b\x2e\x75\x31\x6c\x33\xa1\x00\xc1\x8d\x11\xc2\x18\x8c\x70\xae\xde\xd6\x6f\x4e\x8f\xbe\xb2\x57\xc4\x83\xb1\xad\xa3\x99\xf2\xf2\x59\xde\xf7\x9c\xe2\x6c\x03\x8a\xaf\x0e\x8c\x6f\xfa\xdd\x77\x40\x01\x82\x1b\x23\x84\x31\x18\xe1\xe9\xd4\xf6\xd2\x6a\x01\xdb\x77\x4c\x91\x4f\x2e\xdb\xce\x5f\x47\xd4\x99\x7d\xe2\x53\x52\x4c\x65\x82\xe9\x6b\xf3\x52\xae\x15\x9c\x42\x01\x82\x1b\x23\x84\x31\x18\x61\xa8\xee\x82\x26\x57\xca\x8c\x20\x4a\x59\xaa\xec\x1a\x2c\xce\xda\x5b\x50\xe5\x4f\xda\x23\x7b\xa1\x8f\xeb\x26\x7d\xb2\xce\x25\xe2\xca\x84\x1b\x23\x84\x31\x18\xe1\xc1\x1c\x8e\xf2\x94\xc9\x3a\x51\xc9\xa1\xe1\x28\x9e\x3d\x1f\x94\xa6\xb6\xfc\x99\x4e\x31\x91\x2e\xf6\x9d\x4a\xfb\xa4\xc4\x2f\xc6\x8b\x02\x04\x37\x46\x08\x63\x30\xc2\x9e\xd9\x82\xba\x3f\xfb\x36\xd9\x38\xce\x78\x19\x9c\x51\x13\xf9\x32\x38\xc3\x5b\xfd\x54\x69\xdf\xf4\x08\x5b\xca\x39\xc5\x99\xfc\xbd\x28\x40\xfe\x23\x46\xb8\xdb\x09\xe1\x4e\x98\x30\x18\xe1\x87\xf9\x74\x1d\x45\x3a\x09\x33\x8d\x4a\x79\x1d\xab\x12\x4d\x55\x9a\x16\x75\x46\xf6\x94\x3a\x0e\x41\x0b\xd9\x17\xe9\xae\x57\x89\xf3\x33\x6e\x8c\x10\xc6\x60\x84\x83\xd4\x16\x7b\x97\x86\x33\xba\xca\xde\xfc\xf9\x92\xd0\x5c\x1a\x10\x34\xf7\x54\x49\xe0\x93\xe1\xeb\x60\xd3\x62\x96\xba\xb7\xa1\x47\x50\x80\xe0\xc6\x08\x61\x0c\x46\x68\x54\xec\xc1\x07\x67\xb5\x6a\x1a\x8a\xcd\x19\xbf\x0b\x70\x74\x14\x6c\x22\x99\xbc\xa5\xa1\xba\x44\x19\x36\x56\xfe\x90\x29\xc0\x11\x05\x08\x6e\x8c\x10\xc6\x60\x84\xea\x42\xde\x2d\xf5\xef\x15\xc5\x45\x02\x6d\x2b\xf2\x4a\x84\x94\x74\x3a\x72\xf5\xc5\xe3\x75\x72\x2d\x17\x48\x3b\x74\xbd\x36\xe4\x51\x80\xe0\xc6\x08\x61\x0c\x46\x48\xe1\x6a\x18\x1f\x5e\x41\x17\x77\xc6\xb2\x94\xa3\x4f\xb0\x25\x69\x6f\xea\x44\x6c\xe6\x74\x9a\xfe\xd7\x53\x36\x97\x13\x17\xfe\x12\xc3\x84\x1b\x23\x84\x31\x18\xa1\xf0\x2b\x82\xdf\xaf\x80\x60\x0a\xb2\x25\x3d\xf9\x47\xce\x66\xe3\xce\x87\x0a\x1a\xcf\x18\xd7\xd2\x50\x46\xdf\xb4\xa9\xe7\x53\xda\x83\x02\x04\x37\x46\x08\x63\x30\xc2\x87\x62\x09\x7a\x3d\x47\xea\x39\x6d\xa6\x78\xfc\x17\x5d\x0c\x6f\x14\x5a\x3e\x97\xa2\xa9\xfb\x96\xdc\x27\x4b\x48\x7e\x73\x34\x85\x03\x05\x08\x6e\x8c\x10\xc6\x60\x84\x25\xfd\x4d\xe2\xf9\xc2\x4b\xe3\x8f\xa9\xfc\x1f\xab\xad\x2e\x30\x33\x8e\x06\xa6\x2f\x84\xdd\x84\xbb\x3f\x77\xf2\x8b\x87\x6f\x1b\xa2\x00\xf9\x8f\x18\xe1\x6e\x67\xe8\x3b\x61\xc2\x60\x84\xd9\xcb\x2d\x95\x51\xb7\x68\x47\x4b\xdb\x32\xd3\xf9\xb5\xef\x67\x5e\x17\x59\x6f\x70\xf4\x8a\xca\xf5\x2a\x4e\xea\x3a\xd3\xdd\x4d\x0c\x13\x6e\x8c\x10\xc6\x60\x84\x5a\x9f\x85\x03\xeb\xb9\xde\xbe\xfe\xa3\x45\xb0\xfd\xa6\x6e\xc5\x7a\x35\xe9\xe5\x85\x2a\xca\x9c\xf2\x33\xbf\xce\x17\x5d\x3c\xab\x49\xdc\x97\xe1\xc6\x08\x61\x0c\x46\x98\xaf\x60\xf3\xe7\x8a\xbe\xef\x19\xae\x86\x87\x1d\xdb\xb2\x62\x16\xc2\xfb\x6a\x8d\xa7\x2e\xc5\x27\xc4\xfb\x6d\xf1\x1d\x9c\xee\xa3\x42\x01\x82\x1b\x23\x84\x31\x18\x61\xa8\x9d\xb8\xfc\x0a\xeb\xd5\x3f\xa3\xf2\xc5\x43\x39\x6a\xdc\xcc\x19\xd6\xdd\xf7\xc2\xea\x58\xa5\x73\x37\x7d\xeb\x67\x37\xd4\x4d\x50\x80\xe0\xc6\x08\x61\x0c\x46\xf8\xb8\xfc\xdc\xe6\x0f\x92\x0f\xb5\x33\xfd\x96\x6d\xce\xd9\x7b\x0e\x5c\xa5\x8f\x6b\xfa\x75\xd0\x4b\xf5\x34\xcb\x27\x3b\x67\x83\x7c\x72\x14\x20\xb8\x31\x42\x18\x83\x11\xaa\x4d\xc6\xb1\x55\x51\xee\xd9\x1a\x1a\x39\x21\xf5\x89\x2b\xfb\xca\x72\x46\x99\x4c\xaf\x94\xf1\xb5\x64\x0e\xaf\x91\xe3\xfd\x22\xfa\x28\x40\x70\x63\x84\x30\x06\x23\x74\x33\xf9\xb3\x2f\x79\xff\x19\x37\xf7\xdb\x0f\xed\x17\x12\x22\x57\x97\x9f\xaf\x59\x5c\x7e\x3b\x72\x44\x64\x59\x33\xe4\x90\xbb\x34\x19\x0a\x10\xdc\x18\x21\x8c\xc1\x08\x7b\xcf\x6f\xd7\x16\xff\xbd\x69\xfe\x53\xea\xeb\xde\xde\xaa\x5c\x1f\xce\xdb\x93\x1d\x2f\x8a\x26\x64\x99\xf2\x6f\xaf\xb8\xd1\xff\x25\x86\xe9\x3f\x62\x84\xbb\xbd\xef\x13\x73\xd9\x27\x49\xa5\xc3\x41\x95\xbe\xa8\x72\x4b\xc0\xf8\x23\x43\x7e\xe9\x75\xfe\xf3\xfc\x4f\x58\xe9\x52\x38\x7f\x3a\x9e\xdb\x64\xb9\x42\xf1\xef\x05\xda\x83\x55\x8a\x06\x9e\x4c\x2f\xa7\x73\x13\x4f\xc3\x13\xea\x53\x94\xb4\x5b\x29\x8c\x97\x7e\x91\xe8\x9c\xa0\xa3\x68\xe1\xb6\x17\xa6\xfa\xa7\x94\x2b\x7e\xa0\x99\xd2\xcc\x49\x37\x7c\x4a\xe0\xce\xa6\x98\x91\x74\x65\x6e\xe6\xbe\xfa\xc2\xce\xc8\xed\x3d\x3f\x9f\x7c\xf7\xd0\xe3\xfa\xf7\x35\x9e\xe8\xf6\x7a\xef\x8a\xc3\xd5\x8f\x59\x2a\x4d\xf9\x1b\x4b\x65\x22\xfa\x02\xf9\x29\x4c\x63\x5b\xcd\x8f\xe3\x62\x34\x55\xdf\xe5\xfd\x53\x2a\xd1\x90\xb0\xa5\x28\xa7\x73\x9b\xec\x18\x1f\xcb\x92\x9c\x90\x02\x55\x6d\x38\x13\x0a\x85\x5a\x96\x0b\xcf\x48\x76\x4f\x70\x3f\xfa\xa7\x14\x22\x1b\xbb\xe6\xd3\x4d\xad\x78\xfd\xc4\xda\xc6\x60\x46\xd3\x75\x72\x51\xb2\x7e\xc7\xd1\xa9\x2c\x31\xc5\xf7\xba\x03\x9e\x03\x49\xff\x94\x56\xce\xab\x72\xfb\x4c\x1a\x48\xd8\x31\xd2\x9f\xe8\xfc\x4d\x3e\xaa\xb5\xfe\x28\xc4\x2b\xbb\x87\x77\xaf\x12\x41\x87\x59\x6b\xb1\xe3\xdf\x7b\xc1\x7d\x61\x8d\xde\x7d\x07\xf6\xb0\x98\x1a\xb3\xa8\x9d\x10\xbb\x51\x2a\x6c\x5e\xf4\x3d\xc8\xfd\xc3\xb3\xa3\xfa\x61\x41\x33\x73\x67\xff\x77\xd9\xb7\xdb\x53\xdd\xe9\x68\x18\x8c\xd0\x60\x7a\x3d\x75\x33\xdd\xd4\x2e\xea\x9b\xd0\xf7\xaf\x84\x2e\xc9\xbd\xd7\xd5\xfd\xda\xdf\x68\x19\x57\xdf\x77\xfb\xab\xb5\xde\x25\x88\x02\x04\x37\x46\x08\x63\x30\xc2\x9e\xd2\xc3\x1b\x6f\x6e\x89\xcd\x2e\x2e\x26\x72\xda\xf8\xc5\x4a\xa8\x69\x0d\x4c\xb3\xcd\x4b\x27\xd1\xc8\x78\x66\x56\xae\x1e\xd1\x45\x01\x82\x1b\x23\x84\x31\x18\xe1\x75\xad\x03\x14\x4d\x5b\xe4\x47\xac\xbe\x54\x8d\x35\x06\x7f\x74\x1c\x4f\x75\xf6\x67\x12\x29\x7a\x1b\x9e\xc5\x9e\xef\xe6\xad\x44\x1c\x41\x70\x63\x84\x30\x06\x23\xa4\x6f\xf2\xdc\xee\x50\xf1\x36\x99\x90\x7d\xe3\x33\x39\x45\x13\xf1\x83\x51\x31\x8d\x6e\xf4\xab\x92\xc4\x67\xcd\x4b\xfb\x05\x1b\xcd\x50\x80\xe0\xc6\x08\x61\x0c\x46\x18\x19\xcf\x2e\x22\xc7\x3c\xee\x3a\x07\xde\xfd\x76\x45\xb2\x83\x7d\xfe\x8c\xfa\x05\xb6\x84\xdf\x98\x4e\xbd\x08\x12\xdf\x8d\xcb\xa0\x00\xc1\x8d\x11\xc2\x18\x8c\xf0\xef\xb9\x60\xd2\x8b\xe6\xd9\x8d\x21\x1d\xed\xf4\x60\x78\xd0\x9f\xea\x69\xcd\xeb\xfe\x3a\x27\x37\xcb\xba\x9a\xf1\xbb\x5a\x87\x84\x50\x80\xe0\xc6\x08\x61\x0c\x46\x08\xdb\x76\x05\xce\x15\x97\x9a\x89\xf1\xfb\x8f\x58\xb9\xcb\xfd\xe9\x8d\x56\xa6\xb3\x17\xb9\xab\x50\x7d\x55\x3d\x25\xc4\xa4\xcb\x13\x05\x08\x6e\x8c\x10\xc6\x60\x84\x41\xa2\x1f\xc2\xdc\xa9\xcc\xcd\x56\xad\x32\xa9\x78\xa7\xe6\xdb\xba\xc5\xa3\x05\x3f\x16\xd5\x03\x97\x11\xc7\xe6\xe2\x31\x12\x0d\x14\x20\xff\x11\x23\xdc\xad\xef\xec\x84\x09\x83\x11\x1e\xa0\xa1\x98\x5a\xb8\x6c\xf9\xe1\xc9\x30\xe1\xc5\xc2\xb6\x7a\x91\xcf\x93\xdc\x8f\xce\xaf\xaf\x6e\x6f\xe7\x8e\x06\xda\x5e\x8d\x3d\x84\x02\x04\x37\x46\x08\x63\x30\xc2\x2b\x77\xeb\x10\x2e\x81\x9c\x7d\xd7\x5c\xff\x3f\xf6\xfe\x32\xac\x8a\x2d\x7c\xf8\x80\xd9\x9b\xda\x48\x4a\xce\x06\x24\x04\xa5\x44\xba\xa5\x41\x10\x10\x09\x41\x4a\xba\x3b\x15\x41\x62\x00\x69\x44\xba\x24\x04\x29\x11\x10\x94\x6e\x90\x92\x10\x24\x25\x44\xa4\xa4\x04\x69\x04\xe5\xbd\xce\x73\xf4\x79\xd9\xfb\xf9\xbf\x17\x67\xfc\xf6\x5e\xd7\xff\x7c\xd1\x23\xf7\xdc\xbf\xb5\x86\xb9\x67\xd6\xac\x35\x33\xbf\xf0\x5b\xc5\x18\xe1\xe6\x56\xef\x7e\x99\xcb\x44\x8d\x24\x7d\x33\xd3\x0c\xde\xc4\x7f\x82\x00\x91\x08\xc8\x32\x42\x38\x9a\x8c\x30\xa8\xe3\xf1\x72\x49\xcc\xd1\xcb\x31\xa9\x78\xc1\x8c\x04\xe7\x6d\x91\x0e\x95\x25\x32\x95\x6a\x8b\x1d\xf6\x48\xd5\xd5\xe2\x43\x62\x10\x89\x80\x2c\x23\x84\xa3\xc9\x08\x19\x38\x5d\x48\xad\x48\x97\x1f\x58\x46\x9e\x24\x1f\x7d\x57\x2e\xb1\xb5\x23\x8e\xe7\xac\xa6\xc6\x67\xc6\x0f\x31\x93\x11\x5e\xd7\x07\x91\x08\xc8\x32\x42\x38\x9a\x8c\x70\x94\x73\x2d\x14\xeb\x7d\x03\x4f\x8a\x97\x1f\x9d\xce\x93\xac\xb6\x04\xe1\x6b\xa6\x1f\x11\x03\x98\xdd\xf7\xe3\xf8\x1f\xd2\x30\xff\x73\x73\x0c\x59\x46\x08\x47\x93\x11\xbe\x96\x08\x0e\xb8\xf9\xa0\xf3\x0e\x0d\xcb\x1b\x7b\x3a\x02\xf1\xfd\xef\xc7\x32\xd1\x46\x93\x2e\x6c\x76\xde\xe6\xd1\x4c\xc3\xbe\xff\x0c\x0f\x20\xcb\x08\xe1\x68\x32\xc2\x60\x31\xbd\xe8\x43\xb6\xcc\xf4\x8c\xa6\xa1\x2e\x9a\x5d\xb6\xcb\xdd\x74\x92\x6a\x91\x02\xc9\xf9\xa4\xbd\xf1\xf1\x7a\x57\x6e\xab\x81\x48\x04\x64\x19\x21\x1c\x4d\x46\x78\x97\xcf\x9e\x9f\xa9\x18\xeb\x5b\xc3\x50\xae\x66\xf3\x7c\xfa\xa5\xb5\xd5\x5f\x6f\x8f\x8f\x64\x2e\x5f\x4f\x2a\x48\x7e\xbd\xf2\xfd\x0e\x88\x44\xfc\xa5\x8c\xf0\xac\x2b\xf3\x9f\x62\x42\x93\x11\x3e\xad\x4d\xc6\x8a\x08\x7a\xfb\x29\xe4\xc7\xe3\x96\x56\xee\x80\xc8\x5e\x93\x2d\x8d\x4b\xd5\x5b\xdc\xe6\x84\xdc\x01\x5d\x31\xb5\x17\x41\x24\x02\xb2\x8c\x10\x8e\x26\x23\x94\x17\xfb\xfa\x4d\xeb\x44\x70\xa2\xf0\x43\x3a\xe2\xd6\xfb\x87\x70\x30\xd7\x89\xf8\xd3\x83\x06\xff\xce\xee\x16\x4d\x0d\x2a\x06\x5a\x10\x89\x80\x2c\x23\x84\xa3\xc9\x08\xb9\x8e\x96\x59\x56\x57\xe5\xaf\xd4\x32\xf8\xf3\xe5\x75\x00\x17\xac\x17\xb1\x85\xc7\x3c\x67\xc5\x71\xef\x27\x85\x1d\xba\x12\xfd\x73\x85\x85\x2c\x23\x84\xa3\xc9\x08\x7d\x1e\xbe\x71\x31\xb6\x54\xaf\xeb\xa3\x67\x08\x89\xa0\xdc\x49\x75\x69\xab\x7d\x25\xba\xf3\xa4\xa1\x63\x7b\x78\x1e\x61\xd2\x4e\x05\x22\x11\x90\x65\x84\x70\x34\x19\x61\xe7\xdd\x1c\x03\x75\x6b\x4a\x7c\x6c\xc9\x11\x7c\xcb\xfd\xab\xf7\x26\x4a\x90\xde\x4c\xf2\xe6\x4f\xf3\x41\x1a\x3f\xd7\x47\x7c\x0c\x20\x12\x01\x59\x46\x08\x47\x93\x11\xae\x7f\x6e\x14\xe7\x16\x28\x8e\x9e\x28\xf3\xa1\xb5\x59\x26\xdf\xd1\x6d\x92\xba\x95\xd3\x55\x50\xa5\x6c\x7b\x61\x4c\xd4\x4a\x87\x04\x44\x22\x20\xcb\x08\xe1\x68\x32\xc2\x39\xea\x66\x63\x3c\xc2\x3c\xae\x73\x3a\x97\x07\xd2\x9c\x06\x29\x4f\xc2\x3f\x97\x1b\xb9\xec\x5b\xc1\x5b\x0e\xf3\xa4\x05\x06\xfe\x39\xd0\x21\xcb\x08\xe1\x68\x32\xc2\x17\x0a\xf0\xef\xbc\x4c\xe9\x1c\xb5\xcf\xef\xd1\x3e\x2d\x5b\xa3\xa2\x2c\x88\xa0\x5b\x2a\x1e\x37\x0c\xd3\x5e\x1e\x26\xb4\x2e\xc7\x05\x91\x88\xbf\x94\x11\x9e\x35\x76\xfd\x53\x4c\x68\x32\x42\xa3\x17\xfc\x4b\xd1\x4e\x06\x3f\x06\xd8\xf9\x9f\xae\x8a\xe6\x78\x86\x9d\x94\xdd\x22\x0c\xf8\x76\xc2\x94\xa6\xf6\x82\x33\xde\x9c\x09\x44\x22\x20\xcb\x08\xe1\x68\x32\xc2\xfb\x58\x43\x16\x31\xcb\x4a\xc1\xcc\x2b\x8f\xf0\x39\x46\x92\x84\x3b\x25\xef\x4f\xaf\xdf\x1d\x99\x1f\xa9\xfc\xe2\x72\xed\xf5\x18\x0c\x44\x22\x20\xcb\x08\xe1\x68\x32\x42\xf2\x40\x8b\x0b\x69\x4b\x2c\x78\xcc\xca\xc5\x37\x93\xbf\xf4\xe3\x16\x94\x49\x36\x9b\x49\x4a\xee\x3f\x61\xcf\x75\x63\x32\x74\x24\x04\x91\x08\xc8\x32\x42\x38\x9a\x8c\xf0\xeb\x3e\xb5\xe1\x25\x73\xd6\x25\x0c\xfc\x61\x5b\x66\xfb\xdb\xfa\x69\x19\x46\x33\x4d\x77\xf6\x3a\xab\x37\x0a\x1c\xce\xc9\x76\x48\x80\x48\x04\x64\x19\x21\x1c\x4d\x46\xf8\x74\x5e\xcb\x64\xe6\xd6\xed\x60\x17\x9c\xa4\xd0\x4c\xf2\x06\xd5\x8c\x9b\x12\xd6\xf7\x8c\x89\xa4\x35\x06\x98\x58\x4a\x57\xc6\xfe\xb9\x39\x86\x2c\x23\x84\xa3\xc9\x08\x2f\x3c\x22\xa1\x38\x28\x97\xee\x1b\xce\x1e\x2d\xa7\xd2\x09\x2a\x4e\x2a\x91\x93\x7a\x99\x98\x3f\x5a\xc9\xf4\xf3\xad\x45\x21\xbb\x3c\x88\x44\x40\x96\x11\xc2\xd1\x64\x84\xa4\x4b\x8d\x1d\x95\xfc\xe2\x5b\xaf\xd5\x8e\xb7\x24\x6c\x58\x71\x97\x45\xe8\x85\x8a\xa5\x0a\xde\x8b\x66\x44\x37\xb8\x9e\xef\xd4\x01\x91\x08\xc8\x32\x42\x38\x9a\x8c\x70\x40\x64\x21\x5a\x35\x4c\xff\x8b\xdf\xf2\x97\xf5\x4a\x3b\x7a\x69\xee\xb2\x02\x92\x89\x7b\x9e\x7b\xc1\xec\x0a\xfe\x89\x1c\x81\x82\x20\x12\xf1\x97\x32\xc2\xb3\xee\xee\xfe\x14\x13\x9a\x8c\xd0\xa8\x31\x43\x53\x54\x93\xb5\xd6\x7b\x4b\x01\x49\x70\xc4\xc1\xa2\x31\xb7\xcb\x8e\x5f\x34\x1a\x3d\x5b\xf5\xeb\x21\x48\x5f\xf7\xcf\x7d\x00\x64\x19\x21\x1c\x4d\x46\x68\x3b\x45\xf8\xeb\x13\xe6\x85\xc1\xf6\xa3\xe1\xfd\x47\x36\x4f\xa6\xdc\x82\x74\x62\x0a\x5a\x4f\x6e\x8b\x39\xed\xf4\x5d\x1c\xdc\x52\x04\x91\x08\xc8\x32\x42\x38\x9a\x8c\x30\x24\xfd\xc1\x39\xe9\xa5\xb5\x17\x97\xd6\xe8\x74\x12\xf6\x8e\x6b\x4d\xcf\xf3\x07\xb0\xa8\x92\xf6\x73\x4a\xe3\xd0\x46\xd1\x5c\x55\x01\x91\x08\xc8\x32\x42\x38\x9a\x8c\xf0\x76\xd9\xce\xfb\x42\x01\x1b\xeb\x8e\x20\x01\x2c\x7e\x96\x41\xbb\x9b\xd4\x0e\xd7\x8f\x6a\x91\xd9\xd7\xbd\x6b\x54\xbf\xaf\x87\x8a\x83\x48\x04\x64\x19\x21\x1c\x4d\x46\xf8\x6b\x9e\x4b\x31\xe6\x10\x74\x9e\xef\xe1\x18\x29\xba\x20\xd1\x9a\x44\x79\xb3\x7e\xe6\x25\xdd\x3d\xc3\x98\x81\x6a\xb5\xef\xd8\xf4\x20\x12\x01\x59\x46\x08\x47\x93\x11\xf2\x4a\x47\x2f\x9b\xd7\xc3\x5b\xbe\x19\x1a\x86\xcf\x1e\xb7\xae\x30\xdc\xa6\x64\xfa\x61\x5d\xcf\x4c\x4b\xe2\x5e\x57\x89\x49\x7a\x05\x44\x22\x20\xcb\x08\xe1\x68\x32\xc2\xa6\x62\xee\xb0\x6f\xbb\x76\xe1\xcf\xa3\xf1\x10\x9f\xa5\x3c\x37\x12\x47\xd3\xa8\x4f\xcc\xb2\xe9\xc0\x8c\x41\x5e\x8f\xf6\x08\x72\x10\x89\x80\x2c\x23\x84\xa3\xc9\x08\xaf\x93\xbd\xbe\x1c\x91\x45\xc8\x49\xbd\x9b\x36\x43\xba\x6b\x5e\xb6\xff\xec\x46\xa4\xed\xc8\x5b\x57\x7d\xd5\x15\x0c\x3b\xab\x76\x67\x10\x89\xf8\x4b\x19\xe1\x59\xf3\x1f\x7f\x8a\x09\x4d\x46\xb8\xce\xb1\x30\xf1\x9d\xad\x3c\x9d\x54\xe0\x73\xac\x92\xb9\x53\x90\x30\xa7\xd7\x9e\xd2\xb3\xe7\x03\xcf\x2c\x16\xaf\x20\x2e\xf2\x9a\x83\x48\x04\x64\x19\x21\x1c\x4d\x46\x58\x55\xb9\x2c\x05\x62\x73\x55\x89\x6c\x69\xfd\x1c\x58\x20\x78\xf8\x0a\xdf\x70\xaf\xfd\x6b\xc6\xb8\x40\x5d\xfb\x9c\xa8\xca\xfd\x7f\x86\x60\x90\x65\x84\x70\x34\x19\x61\xe8\xb4\x66\xf2\xca\xb9\xe3\x8c\xc7\xdb\xaa\x0f\x92\x4c\x39\xa3\x28\x16\x57\x08\xbc\xbe\x44\x8b\x5a\x09\xce\x58\x39\x5b\xcd\x48\x82\x48\x04\x64\x19\x21\x1c\x4d\x46\xf8\x3a\x3d\xbd\x11\x97\x5c\xe1\x9e\xe3\xe4\xb5\x9e\x1f\x0c\xa3\x3f\x1b\xd8\x26\xb5\x9b\xdb\xd2\xd5\x88\xca\x31\x42\x16\x35\x82\xed\x41\x24\x02\xb2\x8c\x10\x8e\x26\x23\xd4\xe2\xf9\x62\xd6\x73\xdb\xdc\xed\x03\x11\xc7\x98\xec\x73\xf8\xfe\xeb\xd6\xed\xae\xad\x1d\x89\x15\x17\xa3\x7c\x8e\x3b\x94\x9f\xb1\x40\x24\x02\xb2\x8c\x10\x8e\x26\x23\x14\x73\xef\x4d\x0c\xaf\xb0\x1c\x4f\xa1\x50\x24\xd9\x77\xf9\xcc\xff\xa8\xeb\x40\x4c\xe2\x8a\xcf\x78\x18\x20\xc1\x4f\x6b\x34\x27\x0b\x22\x11\x90\x65\x84\x70\x34\x19\xa1\x7e\x0d\x63\x21\xe3\xbd\xc6\x9f\xfd\x3c\x5d\xac\x1f\xbb\x57\x44\xf2\x22\xdd\xec\x23\xe1\x2b\xef\xc8\xa6\x3e\x9a\x5e\x96\x60\xe6\x07\x91\x08\xc8\x32\x42\x38\x9a\x8c\x70\xcd\x33\xe2\xde\x16\xef\x73\x4f\xf2\x93\x87\xc7\x7c\x1a\x6d\xbb\x64\x0c\x1b\xe6\xe4\x56\x7e\xba\x2f\xfd\x62\x10\x11\x5b\x3b\x6c\x20\x12\xf1\x97\x32\xc2\xb3\x66\x08\xff\x14\x13\x9a\x8c\x70\x28\x54\x37\x38\x81\xb0\x20\xf0\xa5\xbd\x71\x4d\xdd\xdc\x1a\x8e\x03\x41\x9c\x3c\xde\x79\x95\xd6\xee\xc9\xeb\x7d\x74\x62\xf0\x9b\x20\x12\x01\x59\x46\x08\x47\x93\x11\x76\x29\x78\x28\xe5\x3a\xa5\x76\x66\x5c\xe6\xe9\x12\xd8\xcc\x10\xea\xc9\xed\x91\xd3\x0e\x19\x81\xc9\xee\x52\xbd\x53\x63\x1d\xf9\xe7\xbe\x0c\xb2\x8c\x10\x8e\x26\x23\x4c\xcd\x72\xda\x34\x78\x4c\xcd\x56\x99\x90\x80\xdd\xa3\x71\xeb\x0b\x29\x88\xa5\x64\xe6\xf3\x2b\x61\x2d\x40\xf3\xce\x3a\x65\x0c\x31\x88\x44\x40\x96\x11\xc2\xd1\x64\x84\x79\x2d\x7e\xf8\x16\x6f\xc4\x3e\xbe\x3d\x3f\x41\x91\x9e\x6e\x72\xa3\x96\xab\x76\x57\xe6\x00\xcb\x84\x4f\x18\x9f\x5c\xb9\xca\xff\x9f\xab\x06\x64\x19\x21\x1c\x4d\x46\x18\x56\x52\x70\xe4\x93\x84\x91\xc6\xfe\x31\xe6\xda\x45\x5f\x8f\xc2\x2c\x69\x51\xd3\x9b\xe7\xa6\x5f\x62\x61\xac\xbb\x3d\x7c\xa6\xeb\x08\x22\x11\x90\x65\x84\x70\x34\x19\xe1\x81\xd9\xbd\xa5\x85\x7a\x21\x7c\x5c\x3b\xb1\x9f\x4a\x98\x4f\x5d\x7f\x4a\x98\xbe\x90\x8e\xbc\x8c\x4c\x49\x96\x54\x51\x0f\xe1\x15\x00\x91\x08\xc8\x32\x42\x38\x9a\x8c\x50\x3d\xe4\xdb\x31\xc5\x18\x8b\x16\x15\x6e\xcf\x57\x9a\xc1\xce\xbe\x9b\x63\x3d\x86\xcd\xd7\xa5\xb5\x67\x61\xac\x17\x53\x7d\x52\x6f\x81\x48\x04\x64\x19\x21\x1c\x4d\x46\xd8\x23\xe0\xfe\xc3\xd2\x28\x92\x0c\xf1\xc2\x0c\xc7\x6d\x46\x8b\x34\x35\x56\xba\x42\x43\xb1\xc9\x7a\x79\xdb\xb8\xe2\x63\x57\x0a\x2f\x88\x44\xfc\xa5\x8c\xf0\xac\x39\xf4\x3f\xc5\x84\x26\x23\x5c\x6c\x9a\x60\x30\xb8\xcf\x4b\xb3\xbd\xb5\x84\x05\x72\x22\x01\xc1\xe3\x82\x12\xdc\x74\xc7\x89\x69\x31\xae\xbe\x50\x8a\xe1\x7f\x6e\x14\x21\xcb\x08\xe1\x68\x32\xc2\xdb\xa6\x45\x15\x69\x1b\x1a\x6e\x56\xce\x63\x82\xcb\x4c\x5b\xa6\x24\xef\x38\x0c\xe9\x08\x48\x12\xac\x89\x03\x75\x75\xa2\xb6\x6d\x41\x24\x02\xb2\x8c\x10\x8e\x26\x23\x64\xba\x12\x7a\xa7\xf4\x06\xd0\x48\x22\x00\x7e\xdd\x1f\xa3\xad\x59\xfb\xe9\x30\x44\x6c\x78\x57\xa1\x33\x54\xdf\xde\xd1\x59\x9a\x1a\x44\x22\x20\xcb\x08\xe1\xe8\x32\x42\xe5\x54\x3a\x6d\xb1\x01\xd8\xeb\xf1\x45\xec\x14\x96\xde\xa4\xba\xd1\x9e\x9f\xac\x17\xac\x6b\x26\xb7\x71\xcd\x93\xf1\x5f\xff\x53\x4c\x90\x65\x84\x70\x34\x19\xe1\x4d\x3c\xec\x75\x02\xc2\x58\x72\x4f\x1d\xc2\xf9\xa0\xe2\x79\xd7\x59\x5f\xa3\x1b\xca\xfb\xe4\xfb\x81\x34\x2c\x38\xc3\x3b\x36\xcc\x20\x12\x01\x59\x46\x08\x47\x93\x11\x7e\x60\x9b\xba\xd2\xe9\x7f\xf3\x81\xbd\xdd\x11\xbe\xe6\x24\x20\xab\x90\x39\x34\xe7\x7d\x98\xbf\xff\x65\x8b\x83\xed\x5a\x39\x27\x0f\x88\x44\x40\x96\x11\xc2\xd1\x64\x84\x59\x84\x03\xdf\xc8\xb1\xe2\x59\x33\x56\xa4\xbe\xcc\x6d\x63\x11\xbf\x72\x98\xfe\xb5\xbc\xdf\x30\x19\x4b\x70\x3f\x0c\xd1\x54\x79\x09\x44\x22\x20\xcb\x08\xe1\x68\x32\x42\xb9\xef\xdc\x6a\xa2\xd3\xde\x00\x23\x82\xd4\x93\xa5\xe3\xcb\xf6\x14\x2b\x5c\x8e\xbe\xd8\x98\x71\xb1\xd2\xf9\x92\x5b\x44\x08\x06\x88\x44\x40\x94\x11\xd6\x90\xfc\x5b\x4c\x92\x6f\x79\x47\xd2\x3e\xbf\x56\xf2\x2f\x0e\xbd\xa9\xfa\x49\x53\xcb\x1f\x7e\x39\x29\x6c\xf6\xbd\x4a\x7a\xd6\xbb\xce\x96\xf1\x5f\x15\x60\x32\xf7\x69\x15\xe0\x5b\xcc\xcf\x9f\xbc\xdb\x0d\x9e\x5e\x5a\x96\xce\xde\xe8\xf7\xb8\xc4\x65\xc6\x91\x72\x20\x74\x77\x6a\xa0\x3c\xcc\xbf\xe7\xff\xa8\x0b\xfe\x84\xee\x48\xb6\x91\x8d\x65\x24\xf2\xc3\xea\xfd\x22\x1b\x1f\x50\x25\xa9\x1a\x97\x44\x44\x27\x5e\x79\xcd\x46\xc2\x74\x97\xcf\x26\xa7\xf4\x7f\x43\xff\x37\xf4\x7f\x43\xff\x37\xf4\x7f\x43\xff\x37\xf4\x7f\x43\xff\xff\x29\x34\x14\xf6\xdf\x06\x03\x21\xa7\x72\xf6\xd4\x82\xc5\x4a\x0c\x8f\xb3\x2b\x5c\xdd\x76\x62\x12\xc5\xeb\x13\x58\x67\xd6\xd9\x7d\xc8\x39\xb0\xa4\x0e\x02\x1f\x95\xb0\x0f\x9d\x0a\x9d\x6e\x25\x5f\x6c\xec\xdb\xab\xbb\x43\xe2\xfb\xa6\x29\xb6\x9e\x72\x1a\x9f\x52\x3e\x6a\x40\xf9\xcd\xeb\xfb\x75\x9a\x08\x6f\x86\x0e\x29\x29\x24\x26\x06\x12\x13\x23\x40\x4a\x2a\x1b\xf6\xdf\xb2\x07\x62\xc0\x02\xa5\x61\xfe\x60\x98\x0c\xd6\x80\x94\x94\xd4\x29\xd8\x1b\x6b\xf7\xfb\xe3\x53\xcf\x85\x4b\x9c\xb2\x9c\xa5\xa5\xdf\x5a\x5f\x53\x4a\xb8\x2c\x6a\xdb\x25\x3c\x64\x6c\xec\x9b\xf6\x85\xb3\xe5\x54\xe8\x82\x45\x84\x38\xd0\x87\x33\x3b\xf9\x84\xe2\xcd\xab\x35\xad\x16\xa6\xec\x9b\xfa\xb3\x2b\xcc\xe3\x22\xc2\xed\xd5\x22\xde\xb7\xb8\x02\x14\x30\x80\x7f\x46\x5b\x18\x0a\x18\x9b\xff\xe7\xcf\x00\x29\xa9\x00\x29\x29\xdd\xff\x06\x0a\xc4\x81\x05\x4a\x33\x80\xa7\x78\x1d\x42\x6a\xc2\xaa\x19\xdb\x82\xa5\x07\xb2\x55\x26\xca\xac\x4a\x9e\x59\x1c\x17\x9a\x5f\xf5\x5f\x54\x58\x8d\x8e\xfd\xb5\x8c\xeb\xe2\xaf\xfd\xdf\xe2\x02\xa5\xfd\x4f\xa7\x95\xc2\xf8\x24\x5a\xc3\xe6\xe2\x40\xfc\xec\xe9\x03\x4d\xaa\xd7\x62\x81\x13\xf7\x43\x67\xdf\x5c\xfb\x96\x66\x4e\xb1\x16\xf1\x83\x4b\xf8\x4f\xda\xb3\xe2\x02\xa5\x11\xa7\xd3\xae\xc4\x54\xad\x8d\x64\xab\x89\x1b\x89\x24\x4a\x20\x0f\xbf\xa5\xf3\x98\xce\x71\x04\x74\x4a\x49\xd4\x67\xf1\x0c\xb5\xc5\x76\xf8\xfe\x49\x7b\x56\x5c\xa0\x34\xd6\xe9\xb4\x4b\x8e\xd6\xb5\xb1\xb6\xf0\x8c\xa1\x52\xda\x36\x1f\xa9\xe3\x57\x93\xc2\x41\xaf\x44\x1c\x61\xa4\xf9\xde\xe5\x3f\x57\x65\xb9\x13\xfe\xa4\x3d\x2b\x0e\x6d\xdf\x0e\xfa\x54\xe9\x3d\x19\xf3\xa9\x75\x5d\xd1\xd1\xb9\xfa\x6e\x66\x51\xe9\x35\xb9\x63\xd6\x4a\xfc\x33\xad\xf5\xe2\x7b\xb5\x5c\xe9\xcc\x7f\xd2\x9e\x15\x17\x28\x0d\x47\x69\x6d\xc5\x2f\x0e\xe5\xa7\xda\x79\x2d\x87\xc5\x9c\x3a\x36\x72\xf3\xb2\x84\x09\x5e\xe3\xdd\xa0\x2e\x29\x2f\xfe\x54\x9d\xac\xa5\x85\xbf\xda\x7f\x8b\x0b\x94\x46\xf8\x83\x8f\xfe\x39\x58\x95\x31\x60\x59\x5a\xd6\x59\xff\x1e\x4f\xff\xc3\x01\x76\xf5\xbf\x1d\x9b\x81\x18\x18\x81\xd2\x18\xfe\xfe\xba\xff\xad\xc4\xfe\xdf\x83\x11\xde\x6b\x12\x2f\x58\xed\x1a\xf2\x2b\xf5\x43\xf6\xe5\x93\xd2\x4c\x52\xd1\x3d\x53\x3b\xd5\xc7\x2d\x37\x77\x2b\xd3\x3f\xb1\xaf\xd9\xfc\xd9\x61\x67\xc5\xa1\x1d\x8c\x5a\x78\xb5\xac\xcf\xa9\x13\xb5\x96\x99\xbe\x14\xa8\x4a\x51\x3c\xf3\xf9\xac\x7d\xa2\xa2\xf8\x42\x25\xe9\xf2\xdb\x88\x88\xfc\x97\xe7\xfe\xa4\x3d\x2b\x0e\xed\x60\x4c\x60\xaf\x1d\x03\x3e\x5d\xce\xcd\xeb\xb6\xbf\xfe\xd0\xd8\xeb\x68\x87\xcd\x4b\x88\x46\x17\x67\xf0\xc4\xe3\x97\xa7\x1b\xfd\xfe\xd0\x9f\xb4\x67\xc5\xa1\x1d\x8c\x8b\xe1\xba\x6a\x2d\x7b\xd9\x94\xc5\xba\x7d\x64\x94\x36\xee\x59\xbb\xbe\x99\x39\x37\x12\x5e\xe5\x47\xb0\xe0\x94\x3f\x7d\x8c\x79\xf9\x4f\xda\xb3\xe2\xd0\xf6\x6d\x7e\xd4\xaf\x46\xe1\xf5\xab\x6b\xd2\x1c\x85\x0d\xad\x4c\xd6\xe7\x89\x2b\xd3\x6e\x29\x67\xae\x5e\x57\xc7\xcf\x29\xd1\x1e\x8a\xb0\xff\x93\xf6\xac\x38\xb4\x83\xb1\xc3\x98\x58\x75\xd9\xcc\xad\xc0\x92\xb9\xa6\x93\x72\x65\xbb\x75\x28\x3c\x3f\x8a\xe1\x73\x58\xb6\x51\x2a\xcb\x70\xb0\x6c\xe6\x5d\x7f\xce\xff\x16\xf7\x7f\x0e\x46\x69\x82\x20\xd8\x7f\xbb\x3a\x84\x40\x38\x65\x42\x08\x95\x92\xfa\x3f\xc7\x3b\x1d\x4c\x0b\x83\xd0\xd2\xc6\x9e\x8b\x87\xcb\xc4\xcc\xcc\xc9\xc3\xd1\x1d\xe5\x7f\xc4\xff\x4d\x36\x13\xdc\x60\x6f\x64\x62\x15\xd0\x07\xa8\x8d\x3c\xcd\x15\xbc\x30\xd8\xaf\x5f\x75\xa9\x4e\xab\x2d\x31\xe5\x0b\xed\xe5\x4d\xec\x4e\x50\x0b\x16\x6e\x26\x6b\x18\xa2\x47\xae\x7a\xf9\x7b\xeb\xd7\xb6\x87\x54\xda\x07\x5b\x54\x5d\x7a\xff\x6e\x5d\xd8\x7d\xf4\xc1\xd4\x2d\xf5\xe3\x5c\x27\x87\x9f\xc1\x3d\xb5\x61\x8a\x82\xb7\x22\x3e\x32\x29\x95\x12\x73\xfc\xce\x06\x16\xc2\x3b\xa0\x0e\x0f\x66\x11\xc7\xae\x88\xb2\xd1\xc7\x5f\x35\x0a\xc5\x56\x17\x16\x6d\x38\x63\x76\x9d\x4d\xa5\x91\x01\x24\xe7\x53\x4c\xa7\x36\xb6\x1f\xb6\x76\x0b\xc8\x71\x5b\x7c\xd8\x48\xff\x5c\x7f\x9c\x19\x23\x79\x9c\xca\x0d\xd3\xc2\xa0\xfc\xb7\xa9\xf7\x2c\x5c\x6d\x2c\x6d\x2c\xcc\x5d\x2d\xac\x6c\xdc\xdc\x5d\x1f\xfc\xcf\xff\xea\xff\x7b\x77\xdf\xbb\x52\xf1\x49\x69\xd7\xef\xd6\x30\xa6\x0c\x25\xbe\x6c\xfa\x3d\x35\x9f\x38\x9c\xaa\xcb\x1e\x1f\x12\x57\xdf\xd1\x6e\xf3\x72\x04\x07\xca\x60\xa8\x9d\xda\x8d\xcd\x30\x99\x20\x96\xdc\xca\xf3\x08\x66\x93\xfc\xfd\x69\xff\xd5\x15\xcf\x85\xb7\x0e\xcd\x0d\xb0\x9e\xb8\xa0\x05\x9d\xdb\x4b\x3a\xa7\x42\x81\x5f\xb6\xbd\x26\x39\x39\x76\x04\x42\xd7\x94\x44\x1f\xe7\x29\x83\x1c\x5b\xef\xd2\x34\xfc\xd5\x9e\x3c\xf5\x1c\x46\x68\x85\x13\x08\xfe\xb7\x8c\x01\x72\x0c\x18\x18\x18\xe0\x33\x13\x1e\x30\x40\x06\x43\x5d\x8a\x15\xa6\x85\x41\xfa\x6f\x9f\xdc\xdc\x9d\x5c\x4d\xac\x2c\x9c\x9d\xee\x5b\xb8\xfe\xbf\xff\xb2\xfb\xbb\x87\x32\x1d\xbf\xd6\xbe\x99\xde\x74\xfe\x22\x40\x14\xe0\x18\xaa\xe4\xac\x4e\x77\xd0\xf2\x76\x78\xa0\x2b\x84\x1a\x49\xe8\xdb\x2f\x6e\xf2\x44\x01\x43\xf1\xf7\x69\xef\xdf\x3f\x15\x31\xe0\x03\xa8\x7f\x51\xc6\xc0\x9a\xc5\x10\xf9\xfc\x3f\x47\x49\x05\xe8\x00\x18\xf0\x29\x7b\x8c\xff\xe1\xbf\x3b\x18\x98\xcd\xff\xd3\xbf\x63\x9e\x9e\xc9\xb0\x2c\xa5\xf5\xb9\xff\xd8\x37\x52\x98\xcf\x94\x33\x50\x81\xff\x82\xca\x8b\x4e\x2f\x3d\xfe\x1b\x9f\xe3\x38\xec\xd9\x5f\x11\x78\x0d\x63\x9c\x7e\x18\x39\x31\x6e\x2e\xcd\x61\xf0\xc9\x93\x43\x26\xc3\x47\xe9\xea\x6d\x8a\x65\xd9\xdc\xca\x7c\xc1\x45\xa2\x69\xd8\xdb\x91\x43\x47\xd9\x72\x7b\xed\xb0\xff\x96\x35\x40\x96\x01\x43\x2e\xf0\xdf\xdd\x9a\x41\x71\x7a\x28\x15\x94\xc3\xeb\xef\xc8\x69\xb3\xfa\xbc\x27\xe6\x93\x42\x72\x55\xd2\x5d\xf1\xb5\xc0\xad\xa5\xe2\xd8\xcd\xed\xcc\xc5\x35\x09\x92\x7f\x37\x29\x87\x9f\xda\x84\xcc\xf5\x8e\x07\xcf\xe7\x11\xfc\x03\xe6\x59\x82\x67\xda\xdf\xc2\x7c\x2d\x86\x33\x63\x6a\x0e\xb3\xfd\x0f\x90\x9b\x97\x35\x46\x90\xff\x6e\x92\x7d\xfa\xf9\xeb\xa0\x55\xcf\x77\xe1\xde\xb5\x27\x49\xe3\x16\x87\x18\x5e\xcc\x4e\x96\x1f\x6a\x02\x76\x25\x1e\x9d\xb0\x9a\xb6\xca\xde\xec\xd9\x26\x15\xfc\x6f\x8d\xf9\x33\xf2\x0a\x90\xc5\x58\xc1\x95\x01\x61\x82\xff\xad\x41\xa7\x36\x5b\x3e\xb5\xd9\x59\x8d\x3a\xb5\xd9\xd7\x7f\x36\xf3\xfe\x6f\xbf\x93\x00\x39\x7f\x18\x06\xec\xdf\x7d\xfd\x4f\x3b\xff\x9f\x0b\xed\xef\x9f\x7c\xfd\xff\xf9\x93\xe5\xff\xf7\x27\x00\x4c\x0b\xe3\xdc\xbf\x47\xbd\x99\xab\x93\xe3\xff\xf7\x6f\xbc\xff\x36\xca\x62\x70\x62\xcc\x3c\xb6\x77\x64\x80\x04\xe9\xd3\x6a\x37\x72\x84\xdb\xfc\xfe\x51\xef\x54\xe9\x16\x49\x50\xf3\xb0\xf7\x4f\x2a\x5d\x30\x20\x40\x06\x03\x0b\x3b\x40\x06\x03\x1b\x8f\xfd\xf7\x69\x4d\xde\xbd\xe3\xf5\xb3\x1a\xdb\xae\xfa\x57\xf1\x6f\x92\x1e\xc6\xb1\x45\x79\xda\x0f\x6c\xfc\x28\xff\xb0\xf4\x7c\x8c\xe6\x7e\xf2\x39\x50\x06\xc3\xec\xf7\x19\xd0\x4a\x94\xa5\x48\x7f\xcd\x98\x64\xb9\xe6\xfe\x17\xc2\x66\x1d\x7e\x4a\x33\xaf\xf8\x4f\x1f\xb2\x3f\x9c\x2b\x56\x77\xf1\x8c\x1b\xb8\x01\x6a\xc1\x68\x97\x27\x05\x6c\x18\x9e\x68\x7f\xc7\x60\xb8\xdc\xd1\x55\x56\x50\x77\x09\xa9\xb8\x04\xff\x77\xf3\x5f\xdb\x77\x5b\x13\xae\x2a\x7a\xd1\x07\xec\x9b\xd5\xe7\xf2\x6e\xb9\x35\x79\x09\xee\xee\x67\x05\x49\x7c\xf4\x67\xb3\x7f\x2a\xbd\x1f\x75\xea\x48\x29\xab\x26\x6e\xfa\x79\xd5\x49\x83\xdf\x9f\xaf\xcf\xc8\xd5\x29\x03\x41\x2d\x65\xc4\xd6\x42\x4b\x27\x1b\xd8\xa8\x16\x30\xe5\xed\x87\x32\xde\xa6\x04\xbc\x8c\x1e\x76\x4a\x1f\x8c\x78\x56\x84\xef\x3f\xf6\x49\x17\x0c\xe3\x08\x70\xec\x0d\x51\x1b\xd6\x4b\x1b\xfb\x39\x65\xcf\x73\x7a\xbc\x03\xe1\x5c\x75\x2a\xb4\x55\x33\x72\xb2\x5f\xd6\xfa\xfd\xe0\x64\x10\x25\x3c\x54\xcb\x74\xa6\x46\x86\x17\x30\x90\x11\x59\x89\xef\x25\xd2\x66\xd6\x74\x3c\x15\xba\x69\xd0\x5c\xdb\xf6\x9c\xff\x11\x9d\xa2\x67\xd1\x8c\x7a\x49\xf2\xea\x26\x38\xc1\x33\x2e\xdb\x29\x60\x4e\xcd\xba\xcb\xfe\xe5\xe3\xa9\x50\x31\x8f\xb2\x52\x52\x76\x95\x0d\xf8\x55\x6f\x5d\xcf\x3b\xf1\x9a\x8c\x8b\x7c\xc1\x33\xac\xb5\xac\x0b\x61\x1c\x58\xec\xc7\xcb\xc7\x48\x78\xec\xe9\xf6\xa6\x3c\x3b\xa0\xb8\xa3\xd4\x63\x14\xe4\xa9\x44\x3e\x7b\x2e\xca\x2c\x4f\x28\x5d\x2d\x10\x88\x40\x64\xcf\xa5\xef\x25\x98\xed\x84\x4b\x59\xfc\xb7\x7d\x17\x26\x83\x61\x2e\x83\x61\xee\xbf\xa7\x73\x19\x83\x19\x01\x23\x65\x70\xa9\xc4\x92\x90\x1c\xd4\x6f\x25\x23\x4c\xb9\x20\x48\x86\x35\xbc\xbe\x48\x13\x79\xdd\xf1\xbc\x39\x35\xd5\x15\x2e\xaf\x1b\x74\x0f\xfd\x31\x69\x30\x30\x30\x10\xff\xec\x3e\x24\x1e\xa7\xee\x7f\xdb\x25\x81\x58\x30\xb4\x91\x8e\xa4\x81\x6b\xf2\xa5\x3c\xbf\x2f\xc9\x0c\xf6\x75\x7e\x5b\x17\x8d\xdb\xe9\x3c\x7d\x97\xb5\x9f\xab\x2f\x37\xa4\x2f\x64\x27\xd4\x91\xfd\x19\x92\x9c\x15\x87\x36\x2e\x73\x0f\xef\x6f\xe0\x4f\xc7\x69\xee\xe6\x67\xf5\xb9\x2d\xe2\x59\xdc\xf1\xe8\xbe\x2e\xa5\xa5\x09\x4e\x3b\x33\xc5\xde\x61\x5b\xf7\xd3\x3f\x69\xcf\x8a\x0b\x94\x26\x39\x9d\x76\xfd\xd9\x0e\x4d\x84\x91\xd1\x62\xcf\xc0\xd5\x92\xdc\xf2\xeb\xd7\x84\x14\x6c\x02\x97\x2f\x6b\x89\x8b\x13\xb0\x6d\x7b\x3e\x50\x58\xf8\x93\xf6\xac\x38\xb4\xb4\x14\x69\xed\x86\x7e\x07\x85\xe6\xb8\xea\x24\x7b\x26\x79\xc4\x0a\xe2\x18\x3b\x7c\x4a\x74\x7e\x97\x9e\x89\xdf\x6c\x3b\xf6\xa3\xc0\xf4\xbf\xfa\xdf\xe2\x02\xa5\xb1\xfc\x41\x19\xac\x81\x60\xd8\x7f\x3b\x96\x02\x31\x91\x98\x18\x81\xd2\x98\x01\xa7\xda\x32\x29\x4d\x52\xd7\x78\x22\x39\xf6\x83\xda\x9c\x41\x19\x43\x90\xff\x87\x22\x23\x43\xd4\xf3\xf8\x18\x4d\x9f\x21\x0a\x1a\xa9\x6c\xa7\x53\xa1\x86\x63\x8c\x13\x0f\xbf\x49\x6d\xd4\xee\xf8\x25\xe5\x6a\x85\x6d\xe6\x81\xaa\xfc\xfd\x70\xc2\x6c\x7a\x44\xa6\x31\x9d\xcd\xf1\xa6\xff\x9f\xf7\x7c\xce\xca\x89\xf6\x9e\xcf\xfa\x38\x86\x62\xdf\x6a\xde\x7a\xcc\x2f\x5e\x69\x64\x79\x9f\xcd\xc6\x3e\x09\x15\x01\xb1\x48\x9f\x5f\x8e\x0f\x65\x85\x9e\xee\xf1\xa9\x50\xc2\x37\xd2\x7c\xf0\xab\x05\xcc\x26\xe7\xef\x6e\x7e\x9d\xbb\x93\x98\x94\xd0\xa4\x22\x47\x36\xa6\x25\xaf\xc8\x27\xe1\xff\xf2\xca\xe9\xeb\x0c\xcf\xd0\xb3\x36\x55\x21\x25\x7a\xfc\x1f\xe7\x36\x2c\x96\x12\x96\x5f\x1d\x7c\x7c\xdb\xe4\x4e\x1c\x59\x50\xd6\xef\xf1\x76\xbb\x91\xed\x54\x68\x61\xb1\xad\xc4\x37\x42\x6a\x46\xd2\xd1\xd7\x89\x39\x91\xf7\x3e\x1c\x86\x56\x29\x5a\x4e\x1f\x15\x00\x25\xc7\xf9\x5b\x6a\x63\xa7\x5f\x34\xda\x48\x5b\x9d\x8d\xd2\xc3\xed\x9f\xf8\xfa\xc0\xba\x97\xf1\x53\x28\xf8\x71\x50\x66\xa7\xa6\x8a\xa5\x68\xff\xd1\x27\xcb\xa1\x26\xd8\xa9\xd0\xc7\x81\x8e\x25\x4d\xc1\x11\xd4\x0c\xaa\xf9\xac\x7a\xdf\x82\x83\x03\x73\x09\x2f\xd6\xbe\xe4\xa1\x58\xb0\x6b\x0e\xfa\xe6\x2c\x28\x7a\x2a\xf4\x51\x75\xfb\xf4\xed\xeb\xc2\xd3\x8a\x63\xca\x74\x58\xb7\x5f\x23\x41\xf7\x15\x07\x07\xe4\x35\x23\xc3\x21\x6f\x35\xfa\xf0\xa6\xf7\xa7\x43\xb1\x28\xbf\x7d\x65\x13\xfd\xb5\xce\x1a\x36\xcb\x87\xc5\x92\x3e\x44\x40\xf6\xc1\xfe\x97\x77\xfa\xcc\xbe\x82\xb2\x98\x4a\xac\xe3\xff\xfd\x25\x9c\xb5\x57\xd1\x7e\x09\x65\x49\xd4\xcb\x93\x8e\x13\x9a\x6f\xa3\x0b\xd3\x57\x73\xc7\x5e\xea\xd0\x57\xfb\xbd\x4b\xc7\xd5\x4c\x76\x9b\xd6\xef\x2f\x87\xed\x9e\x3e\xd5\xbe\xc0\x98\xd4\xc6\xa7\xb9\x48\x40\xa6\xe1\xf2\xce\xb5\x7c\xe1\xd0\x18\xab\xcc\x88\x3a\x88\x85\x7f\x3b\x89\x56\x74\x8f\xe7\xb4\x1b\x4d\x00\x21\x28\x8a\xb1\x96\x51\x63\x7e\xc8\xef\x28\x2f\x6f\x88\xd3\xe6\x18\x6d\x44\x7c\x58\xd6\xf8\x43\x7e\x76\xdf\xf2\xfd\xb9\xdc\x53\xa1\x12\x86\xab\x07\xb4\xc3\xcd\x7a\xd5\x17\xb8\x53\x2b\x6c\xcb\xf8\x3e\x34\xf2\xd2\xe4\xdf\xff\xf4\x4c\x9b\x27\xfb\xd7\xde\xb5\x3c\xc6\x53\xa1\x72\x8f\x9e\x0e\x7e\xe0\x5c\x56\xaa\xae\xcd\x6a\x1c\xbe\xbc\xf6\x26\x24\x6b\x97\x6a\x53\x0d\x8f\x8d\xec\x8b\xed\x5e\xab\xb7\xeb\xe1\xa9\x50\x41\xd7\x2f\x3e\x7c\x94\x9b\x6f\x5d\xfd\x3a\xc9\x79\xec\xee\x13\x45\xe5\xb4\x54\x25\xc5\x26\xa9\x3b\xa5\xcf\x18\x22\x3b\xc3\x8a\x4f\x85\xca\xf2\x31\x3f\x7e\x14\x0e\xd3\x96\x8f\x66\x58\x7d\x5a\xb5\x7f\x75\x35\xce\x0a\x6f\x78\x64\xaf\xfe\xe8\x83\xab\x7d\x45\x2a\xdc\xe1\x54\xa8\xd7\x4e\x29\x37\x48\xc6\xd5\x50\xaf\x68\x17\xc0\xc5\x14\x00\xf2\x3d\x92\xa2\x08\xc8\xf7\x14\x28\x25\xaa\xb8\x46\x55\x11\x1a\xe5\x5f\x84\xf3\xdf\xf6\xea\xbf\x2b\xca\x18\x68\xeb\x97\xf7\x19\xa2\x8d\x9b\x56\x94\x3f\xd8\xf2\xd3\x45\x3f\xdb\xba\xcc\xc2\x92\x2c\xb4\x6e\x31\x43\xd7\xad\x5b\x7b\x34\xfc\xfc\xbc\x2e\x88\x81\x41\x8d\x41\x55\xae\x2e\xa5\x88\xd1\x10\x1b\xfa\x1f\x56\xfd\x60\xa8\xf9\xe9\x31\x88\xcb\x17\x72\xb9\x53\x75\x13\x1b\x2d\x28\xf4\xfd\x3a\x4a\x8f\x6e\xb3\x97\x9e\x0f\x16\xb9\x5a\xf2\x22\x48\x5b\x8e\x4d\x0e\x84\x41\xcc\x0f\x47\xcd\x9f\x6b\x22\x44\x6e\x57\xd5\x34\x6a\xe1\x16\xb3\xed\x35\x99\x85\x70\xae\xb7\x8d\xb2\xb8\x56\x17\xcd\xb9\x35\x31\x18\xbe\x48\x49\x03\xc2\x21\xe6\xc7\x44\xcd\xaf\xf3\x8d\x82\x15\xdc\x45\x14\x76\xcb\x0b\x7c\xf1\x0f\xd8\x3d\xd4\x9b\xb9\xcd\xc0\x19\x87\x13\xce\x20\x36\xd4\xdb\x17\x68\x8b\x03\x62\x42\xcc\x8f\x85\x9a\xff\xe5\xe3\xe5\xeb\xac\xd9\x51\x3e\x63\x2a\xa3\xba\xda\x29\x17\x02\x56\x34\xb1\x10\xc4\xca\x5f\x70\x34\x74\xae\x4b\xab\x5c\x31\x74\x01\xb1\x20\xe6\xc7\x46\x7b\x5b\x59\x27\x71\xb5\xca\x8a\x28\xc7\xff\xbc\xff\x6c\xf6\x85\x2a\xd7\x3d\x9b\xe0\x8d\xce\xd0\xaa\x71\x32\x07\xcb\x03\x33\xcb\xe7\xc2\x20\x36\xc4\xfc\x38\xa8\xf9\x05\x8d\x00\x0a\x0f\xa2\xb4\x3c\xd3\x14\x7f\xdc\xbc\x97\xe6\x2b\xfd\xef\x2d\x9e\x05\xc8\x4c\xb5\x0f\xdc\x8b\xbe\xcf\x17\xff\xce\x18\xc4\x81\x98\x1f\x17\x35\x3f\x0c\x96\x6a\x8d\x41\xb7\xcb\xfa\x5d\x32\xc9\x93\xd6\xdd\x38\x56\xa4\x70\x4c\x3b\xf8\xc1\xa3\x63\xda\x6d\x42\x50\x24\x95\xd2\x10\xc4\x85\x96\xff\x4f\xb1\x9c\x75\x5e\xf9\xb7\x58\x10\x68\xdf\x00\xe1\x3b\x14\x16\x3d\x8c\xc8\xd0\x64\x7f\x68\x2c\x17\xe1\x3b\x53\xc0\xff\x8a\x80\x90\xce\xef\xeb\x2f\x6d\x85\xf5\x60\xd7\x70\x65\x10\x01\xb1\xb3\x78\x68\x9d\xcd\x68\x97\xf5\x19\x2b\xd1\xd5\xb1\x60\x0e\x4f\x15\x6d\x7c\x43\x47\xcd\xb0\xd5\x6e\x9a\xf9\x84\x1a\x7b\x9a\xc5\x75\x27\x05\x1f\xc4\x83\x98\xff\x1c\xda\x93\x58\x03\xce\x01\xbc\x19\x14\x63\x1c\x91\x3b\xa3\x11\xf9\x01\x85\xa4\xbe\x07\x21\x1c\x45\xca\x04\xe2\x2d\x9c\xdf\xda\xee\x52\xc2\xc0\x73\x10\xf3\xe3\xa3\x3d\x14\x2d\x17\x57\xa9\xc4\xae\x2d\xa9\xf8\x4e\xd6\x52\x7e\x63\xc7\x22\x3c\xec\x71\x56\xf8\x95\x20\x01\x12\x9b\x5d\xb5\x0c\xa6\xab\x06\x20\x3e\xc4\xfc\x04\x68\x9f\x29\x58\xf1\x78\x2b\x9e\x49\x5c\xdb\xee\x21\xa2\x36\x57\x56\xbf\xfc\xe5\xf5\xc4\xf4\x12\x89\x13\x3f\xe2\xe9\x1d\xfa\x81\x4e\xc2\x3b\x20\x01\xc4\xfc\x84\xa8\xf9\xf3\x13\x2c\x7e\x3e\x89\xe9\x5e\xaf\x18\x13\xdb\x66\x56\xc8\x8f\xae\x18\xfb\x66\xaf\x3b\xd8\xc1\xda\x45\x9c\xea\x83\x90\xf9\x6c\x02\x12\x42\xcc\x4f\x84\x9a\x3f\x83\xd3\x45\xba\xfb\xda\xe4\x8d\x16\xa7\xca\xc9\xe3\xb5\xc0\x7b\xfb\x89\x4c\x38\x25\x1f\x71\x56\xea\xca\x15\x71\x33\x0d\xbc\x74\x40\x22\x88\xf9\x89\x51\xf3\x0f\x3e\x92\x95\x22\xc3\x53\x67\xac\xda\x57\x37\x0d\x8a\x18\x29\x69\x72\x71\xa7\xd0\x5d\x4b\x27\x27\xb8\xd9\x54\x5f\xf3\x6e\xfd\x22\x48\xfc\x77\xc5\x72\xd6\x95\xf5\xdf\x62\x21\x41\x6d\x8c\xaa\xa9\x37\x7b\xbb\xa3\xb3\x69\x36\xd8\x6a\x7f\x99\xb1\xcd\x37\x46\x72\x3a\xdc\xba\x72\xe9\xa9\xa6\x0f\xbe\xa4\xea\x64\x3d\x29\x48\x02\xb1\xb3\xe7\xd1\x3e\x1b\xa6\x53\xc0\xb4\x5c\xf5\x9c\x95\xc7\x9b\xee\xc1\x49\x40\x16\xe1\x9d\x91\x84\x15\xc5\xa5\x83\x2d\x6a\x00\x81\x58\x98\xba\x2f\x04\x9e\x87\x98\x9f\x14\xed\x01\x6e\x9b\xe0\x2c\x30\x12\x34\x3e\x92\x2b\xad\xdf\x09\x11\x90\xbc\xa4\x6a\xa5\xec\x52\x37\xd2\x7e\x40\x14\x62\xdf\x7d\xbd\x90\x0e\x24\x85\x98\x9f\x0c\x35\xff\x55\x92\x71\x8e\x98\x56\x5f\x65\xd1\xdc\xf4\x65\x3a\xf6\xcf\x27\xb9\xbd\x8b\xc5\xd1\x62\xd7\x8f\x92\xe9\x65\x34\xed\x2f\xf0\x31\x83\x64\x10\xf3\x93\xa3\xe6\x27\xda\xd5\x5b\xac\x59\xeb\x33\x7c\x58\x07\x0a\x51\x3c\x3d\xc8\xed\xc6\xba\xaf\x52\xbe\xbf\x83\x40\xec\xb1\x7f\xb7\x92\xdf\x45\x80\xe4\x10\xf3\x53\xa0\xe6\x3f\x71\x32\xfa\xd1\xca\xd9\xf8\xa8\x34\x5b\x8d\x3b\xba\x07\xf0\x1b\xf8\x56\x57\x23\x9a\xa7\xa4\x74\xe2\x22\xd7\xe4\x42\x49\xea\x00\x52\x40\xcc\x4f\x89\xf6\xd4\x13\xb9\xdc\x4c\xe3\x3b\x55\x7c\xb9\x5c\xb5\x85\x92\xeb\x07\xe4\xb3\x3e\xe9\xa6\x06\xdd\xfc\x24\x02\xd1\x8f\x97\xac\x28\x7f\x5c\x06\x29\x21\xe6\xa7\x42\xcd\x9f\x50\xf5\x56\x41\x2b\x94\x52\xd9\x00\x5b\xa1\xb0\x98\xf4\x70\xb5\x6a\xc0\xa3\x09\xfb\x3e\x5e\x90\xa1\x02\xcd\x6c\x6f\x6c\xc6\x2d\x90\x0a\x5a\xfe\x3a\x9c\xff\x36\xb6\xfc\xb7\x58\x00\x00\xb5\x35\x37\x52\x4f\x0e\x4f\x22\x27\x36\xba\xbf\xb5\x27\xb5\x70\xa5\x36\x98\x8a\x9a\x55\xb1\xba\xa5\xc6\x6b\x2d\xf3\x26\x88\xe3\xc9\xb3\x80\x00\x00\xb1\xbb\x00\x12\xed\xb5\x42\xfb\x42\x26\x21\x55\xb1\x37\x12\xcf\x1b\xb8\x6b\xaf\x13\xab\xc3\x5e\x57\x84\xfa\x74\xec\x8c\x2e\x99\x39\xc0\x52\xea\x1b\xec\x41\x00\x09\x95\x40\x8d\x36\x96\x24\x9d\x18\xb3\xda\xb5\xc3\x19\x97\xc6\xf1\x98\x8e\xab\x10\xd6\x59\x92\x18\xe3\x6c\xe9\x5e\x78\x49\xfe\x42\x51\x61\x28\x52\x0e\x04\xa8\xa1\x12\x68\xd0\xbe\x0a\x66\x69\xf9\xa5\x22\xce\x26\xf3\x71\x80\x17\xfe\x0c\x49\x62\xae\xc7\xe7\x51\xae\x18\xe6\xc7\x1f\x32\xd2\x75\xa9\xaf\xd4\xe8\x98\x82\x00\x0d\x54\x02\x2d\x5a\xd5\x07\xd8\xc4\x93\x5e\x8f\x6b\x1f\x97\xa2\x2c\xed\xbf\xe5\xe0\x6b\xe0\x37\xa8\xa3\xf1\x79\x2b\x8d\x26\x61\x23\x38\xad\x78\x04\x01\x02\xb4\x50\x09\x17\x50\x09\x6d\x8a\xfa\xfc\xb9\xf5\x09\xe5\xf7\x4a\x8d\x63\xf3\x87\x35\x08\x9b\xe9\x07\xf1\xf5\x0a\x1b\x85\x00\xac\x0a\x8a\x97\x96\xa6\xac\x20\x70\x01\x2a\x81\x0e\xed\x35\xf7\x97\xcd\xd2\x6c\x8b\x39\x2b\x29\x3b\x4c\x97\x6a\xc8\x2e\x5e\x69\xa4\x36\xb0\xd1\xb6\x8a\xc8\x5b\xe5\xc7\xae\x6f\xc9\xc9\xc3\x07\x01\x3a\xa8\x04\x7a\x54\x82\x9f\x66\xa5\xc3\x03\xf9\x91\xda\x4a\x1a\x9c\x9f\x02\x95\x2e\xde\xf4\xf9\xba\xf6\x69\x0f\x23\x84\x7e\xbc\x3b\x1c\x17\xf0\x74\x15\x02\x01\xfa\xbf\x2b\x9e\xb3\xee\xb6\x7e\x17\x0f\x03\x6a\x73\xe6\xc7\x54\xcc\x5a\xea\x3d\xf2\x30\x5c\x40\x7d\xb3\x6f\x6e\x18\x14\x53\x55\xfe\x81\xee\xf2\x06\x2c\x2b\x54\xd5\x95\x0f\xb1\xa8\x41\x80\x01\x6a\x87\x19\x51\x09\x13\x1c\xf7\x44\x60\xa6\xf1\xbc\x1e\xa2\x0f\x0d\x46\x35\x0c\x9e\x12\x8a\x38\x1e\xbb\xbd\xcc\x3e\x54\xb5\xe8\x33\x0e\x67\xe6\xc3\x06\x01\x46\xa8\x84\x8b\x68\x5f\xbf\x89\x53\x55\xf7\xf9\x21\xe0\x94\xc5\xec\x06\xab\xf8\xa4\x9a\x3a\xf0\xa3\xc6\x12\x53\xc1\xef\xed\xbd\xee\x0c\xb7\xbd\x39\x1f\x19\x10\xb8\x08\x95\xc0\x84\x4a\x88\xe8\x1f\x13\x2e\xa1\xd3\x9d\x68\xb8\x79\x0e\x8f\x3b\x7c\x16\x2f\xb1\x65\xb6\x7d\xb8\x95\x43\x3e\x36\x27\x1f\xc7\xb9\x48\x0f\x03\x04\x98\xa0\x12\x98\x51\x09\x16\xcc\x05\xab\x5f\x5e\x7b\x92\x17\x49\x84\x96\x7f\xd3\xb1\xd0\x70\xff\xa6\x25\xad\x40\x1f\x21\xc9\x2a\x7a\xdc\xeb\xd7\x10\x61\x0b\x02\xcc\x50\x09\x97\x50\x09\x53\xcc\x95\xa1\xc4\xe7\x93\x3e\x17\x6d\x4c\x15\x77\x39\x14\x8f\x13\x35\x09\xf9\x7c\xa4\xc0\x50\x32\x8b\x2d\x4a\x29\xfc\x14\xaf\x04\x02\x97\xa0\x12\x2e\xa3\x12\xfa\xbb\x52\x64\x53\xcc\xb2\x00\x93\xeb\xbc\x17\x1d\x47\x32\x6b\xea\xdd\x22\x3f\x74\x1f\x97\xa9\x5f\xd7\x37\xf1\x68\x21\x2e\xc0\x07\x81\xcb\x50\x09\x2c\x68\x03\x17\xe7\x60\x92\xe3\x27\x2d\x66\x16\xb6\x31\xa1\x2c\xcb\x8e\x32\x18\xe5\x0e\x39\xcf\xd4\xa2\x52\x1e\xae\xdc\x32\x9b\x11\xf0\xe5\x07\x01\x96\xbf\x2b\x9e\xb3\xe6\x1f\x7e\x17\x0f\x2b\x6a\x73\x2e\x62\x8c\x52\x13\xed\x4c\x4f\xd4\xe2\x1e\x79\xe9\xcf\x0e\x7a\xaf\xd2\x2e\x61\x2d\xbc\x32\x32\x6a\x7f\xbe\xa2\xb2\x76\x1d\xc9\x0c\x02\xac\x50\x3b\xcc\x86\x4a\x50\xf2\x24\xe3\xa4\x69\x37\x7b\xac\x36\x4d\x5e\xff\xcd\x42\x48\xe3\xc1\xf3\xef\x33\xfe\x36\x4c\xb6\x63\x45\x1a\x6b\xf1\x1f\xfb\x35\x40\x80\x0d\x2a\x81\x1d\x95\x10\x19\x57\x5f\x94\xf9\x42\x9a\xd7\x8e\x9c\xeb\x95\xb0\xe4\x46\x9b\xfb\x5b\x6e\xcc\xd4\xde\xa2\x1f\xb1\x4a\x83\xc4\x01\x51\x98\x72\x20\xc0\x0e\x95\xc0\x81\xf6\x22\x80\x13\x76\xfb\x35\x62\x1e\x1a\x3e\xca\x17\x64\x32\x1d\xa5\xca\x4b\xb4\x76\x9d\x4e\x6d\xda\xe2\xed\xdd\x5b\xa2\xa9\x9f\xd7\xa9\x40\x80\x03\x2a\xe1\x0a\xda\xcb\x7c\x54\x33\x80\x5b\xea\x15\xa1\x12\x9b\xa8\x08\x32\x75\x42\xb9\xa7\x82\xe9\xf2\x98\xc1\x6d\xdd\xee\x14\x05\xbb\x1e\xfc\x57\x54\x40\xe0\x0a\x54\x02\x27\x2a\xa1\xba\xe5\x8a\xba\x9f\xc5\x43\x33\xfc\x22\x46\xe2\xcb\x7e\x11\x04\x8a\x64\xa1\x7d\xad\x8a\x04\x9f\xc3\x38\x65\x3e\x3e\xae\xbe\xcf\x0e\x02\x9c\x50\x09\x57\x51\x09\xdd\xf5\x11\xaf\xd7\x46\x57\x9c\xf6\x7f\x76\x99\xcd\x98\xab\xe4\x60\x3f\xaf\xcf\xe2\x39\x9c\x1b\x5e\x94\x88\x7f\x2d\x2c\xcf\xa7\x02\x02\x57\xa1\x12\xb8\xd0\x8e\xa5\x18\x4d\x2e\xf5\x0b\xf0\x41\xbe\xa9\x27\x0b\x60\x09\xa5\x64\x91\xe8\xf9\xe9\x4f\xab\x66\xe2\x3c\x2f\x0c\xe4\x6d\x96\x13\xc8\x40\x80\xeb\xef\x8a\xe7\xac\x19\xb9\xdf\xc5\xc3\x8d\xda\x9c\xda\x7d\xff\xc0\x4d\x15\x22\xcc\x7a\x06\xc1\xad\x5e\xd3\xc6\x92\x97\x6e\x1e\xc9\x98\xf4\xad\xeb\x07\xd4\xee\xd3\x57\x75\xdf\x39\x83\x00\x37\xd4\x0e\xf3\xa0\x4d\x70\xf9\x70\x35\xb5\xc8\x7f\xa7\x41\xd4\x86\x5f\x4f\x9c\xc8\xdc\x95\x08\xfa\x6a\x1b\xd6\x71\x5e\x4e\x72\x34\x5a\x9f\x91\x74\x18\x09\x02\x3c\x50\x09\xbc\xa8\x04\x33\x4e\x52\xff\xc5\x82\x5e\xcf\x68\x8a\x04\x9a\xd7\x8c\xef\xfa\xbb\x55\x3b\x58\xbc\x87\x35\x61\xf0\xcd\x0c\x2a\x45\xaa\x70\x42\x10\xe0\x85\x4a\xe0\x43\x25\x1c\xcf\x60\xcd\x5d\x9c\x11\x7f\x66\xfe\xc9\x2c\xba\x6b\x4e\xd8\x8d\xe7\x9d\x5d\x7e\x2e\x53\x5a\xf4\x1d\xd5\xe5\x67\xaf\x5c\x2e\xba\x81\x00\x1f\x54\x02\x3f\x2a\x81\xe2\x47\x91\xb1\x7c\x40\xbf\x22\x2c\xd8\x47\x43\xb3\x3e\x83\x03\xff\xca\xd8\xf7\xa2\xa4\x94\x2f\x5f\x9b\x64\xf4\x73\xcb\xad\x25\x40\x80\x1f\x2a\x41\x00\x95\x70\x2e\x52\xc0\x87\x3d\x66\x67\x71\x8b\x3a\x1b\x5f\x10\x89\x45\x51\xe4\xf1\x14\xeb\xc1\x68\xce\xc6\xb1\x09\x4e\x1e\xf5\xf7\xc8\x5b\x20\x20\x00\x95\x20\x88\xf6\xfa\xfd\xf3\xf3\x41\x58\xfe\xb9\xc9\xc3\xc9\xaf\x37\x3f\x18\xee\x8f\x38\x32\x13\xd7\x5d\x4a\xd0\xc2\x96\x96\xeb\xbf\x7c\x5e\xda\x9a\x00\x04\x04\xa1\x12\x84\xd0\xbe\x4c\xf7\xd2\x9a\x82\x7a\xc2\xad\x51\x54\xa3\x99\x7e\x74\x3c\x16\x7f\xa3\x5f\x08\xbf\x1c\x6f\x4d\xc3\x26\x81\x18\xfe\x68\xe1\xb2\x01\x08\x08\xfd\x5d\xf1\x9c\x35\x47\xfd\xbb\x78\x84\xd1\xde\xd3\x0f\xba\x64\xab\x6c\xb9\xc9\x64\x1d\x40\xe6\xfc\xa9\xfc\x87\xf3\x86\x5d\x91\xb4\x49\xf7\xd7\x13\x36\x7e\xf1\xce\x64\x4d\x55\x6d\x10\x10\x86\xda\x61\x11\x54\xc2\x3d\xa4\x84\x47\xfa\x78\x54\x4d\xb6\x87\x12\x47\xe4\x5d\x2b\x52\x33\x84\x58\x1e\xb7\x9e\xde\xcb\x84\x69\xa2\x4b\x3c\xcf\x3d\xaf\x82\x80\x08\x54\x82\x28\xda\x17\x83\x36\xde\x95\x1c\xe2\x9c\xcf\xde\x14\x20\x8c\xde\x9b\x50\xb1\x2e\xf9\x25\xb3\x84\x29\xba\x1b\x64\xb3\x05\x7c\x70\x9a\x53\x91\x05\x01\x51\xa8\x04\x31\xb4\xfb\xd4\xc2\xc1\xe4\xb8\xa7\x24\x8a\xcb\x23\x06\x35\x06\xed\x34\x9e\x4f\x86\x12\x78\xe5\xef\x29\x1e\xae\xd8\x32\x28\x71\xd2\x99\xeb\x83\x80\x18\x54\xc2\x35\xb4\xcf\x94\xb1\x52\xeb\x95\x9b\x52\x7c\x7d\x30\xbe\x78\x99\x2d\x42\x37\xdb\x85\x4d\x6b\xbc\xfc\x95\x59\xba\x22\x3d\x26\x51\xf1\xa6\xa6\x19\x08\x5c\x83\x4a\x10\x47\x25\xbc\x91\xda\xba\x36\xfe\xd9\x97\x94\x2f\x68\x78\xf6\x53\x90\x35\x07\x6d\x7b\x53\xa4\x57\xc7\x07\xc2\xce\xe9\x59\xf7\x25\xe2\xf7\x38\x20\x20\x0e\x95\x20\x81\x4a\xa8\xb3\x8c\xbe\xa1\x64\x9e\xaa\x9a\xec\xa3\x75\xcc\x9c\xef\x8b\x43\xd6\xb4\xc8\xb6\x4e\x7a\xe9\x4b\x4e\x51\x44\xbf\x87\x15\xcf\x75\x10\x90\x80\x4a\x90\x44\x1b\x3e\x3f\x4a\x25\xe3\x36\x11\x5a\x21\x1f\x59\x29\x15\xf0\x4b\x4d\x48\xf5\xf1\xdc\xe5\xc0\x4a\x48\xbe\xd5\xc9\xeb\xeb\xc2\xdd\xa1\x07\x02\x92\xd0\x08\x7f\x16\xcf\xce\x5a\x67\x44\x5b\x3c\x03\xde\xa4\x8b\xa6\xa4\x96\x1a\xb9\x79\x98\x9a\x3c\x54\xcf\x28\x53\xe5\xbf\xc4\xc6\x31\x59\x51\x72\xcd\xc1\x15\x49\x92\x6b\x7d\xfa\x71\xb4\x69\xdf\x58\xd1\x17\x85\x0d\xbb\xfe\x12\x4c\x0f\x82\x42\x70\x31\x9e\x47\x98\x5d\x62\x43\xb6\xdf\x92\xa9\xc1\x21\xa8\xdd\x34\x3b\xed\xef\x92\xf7\xf9\xf1\xf5\x55\x6b\x85\x8c\xa9\xbd\xa6\xa5\x93\xb8\xb9\xd3\x8b\x1d\xc1\xaf\xbd\xdd\x47\x72\xb2\x99\x5a\x8e\x89\xd5\xea\x47\xa7\x42\x95\x3a\x7e\xe6\x8c\xae\x6b\x3f\x8f\xf7\x8c\xd3\xa9\xc6\x7d\x1c\xf2\x92\xd3\x88\x91\x72\x90\x2d\xd3\x29\xa9\x26\xbf\xa6\x26\xad\xe8\x54\xa8\x8a\xcf\x0b\x67\x38\x87\xe9\xf2\x35\x24\xfb\xc7\x2b\x5f\x62\xb9\xa5\x29\x5e\xcd\xc4\x38\x7a\xca\xe4\xd4\x08\xfb\x32\x89\x15\x5e\x3d\x15\xea\xdb\xc1\xd2\x70\xee\x3c\x4d\x05\x8e\xa3\x32\x18\xc9\x6b\x3f\x2b\x75\xd9\xe1\xd6\x4d\xd2\xb9\xf1\x96\x8b\x1f\x23\x5f\xbe\xeb\x74\x3f\xfd\x4c\x60\x72\x7d\x64\xa4\x3d\x9b\xb8\x63\x68\xec\xda\x43\xde\x66\xaa\xc7\x43\x01\x8c\x9a\x3b\xea\xf3\x1e\x5f\x44\x76\xc7\x25\xe6\xde\x9e\x0a\xad\x6a\x7b\xb2\x97\xc6\x91\x98\x78\xdc\x81\xa1\xf0\x71\xf0\xba\xc8\x2d\xee\xc9\xfa\xc4\xa9\xf2\xfc\x2d\x35\xd7\xda\x07\xc5\x6a\x5e\xfe\x7f\xce\x60\x67\xed\xd5\xdf\x67\x30\x29\xb4\x0f\x62\x90\x5c\xc1\x8b\x0b\x39\x77\x38\x75\xfb\x93\x90\x9d\x7f\x9f\xce\x4c\x8c\x35\x97\xd6\xfc\x4b\x9e\xac\x63\x30\xad\x6b\xf3\xc0\x19\x04\xa4\xa0\x1e\x75\xd2\xa8\x84\x1f\xc7\x5e\x26\x05\x5a\x06\xbf\x7a\x4e\x98\x69\x9b\x99\x7f\xbc\x89\x13\x28\xbd\x84\xf1\xe5\x68\xf2\x5e\xc2\x11\xd7\xc7\xa9\x2e\x6e\x10\x90\x86\x4a\x90\x41\x25\xf0\xcc\x8a\x38\xab\x4d\xaa\x0b\x6e\x05\x5e\x2b\xc3\x0f\x62\x01\xc6\x60\x6f\xa6\x16\x0c\xba\xc7\x8b\x0f\x16\x55\xf4\xd2\xa6\x05\x41\x40\x06\x2a\x41\x16\x95\xe0\x26\xc1\x2e\xbd\xd7\xf3\xf3\x9c\xe1\x65\x72\x4d\x29\x00\xdf\x56\x9b\x1c\x57\xab\x42\x94\x98\xf0\xf5\x61\xbb\xf3\x06\xb5\x1f\x1c\x04\x64\xa1\x12\xe4\x50\x09\x23\x0e\xd3\xf3\xb7\x8f\x9c\xb2\x7a\xa5\xae\xdd\x9f\x4f\xde\x16\x76\xae\x7d\x67\xc6\x13\xb3\x1f\x32\x58\xec\x15\x56\xeb\xce\xc3\x01\x02\x72\x50\x09\xf2\x68\x5f\x20\x68\xd5\x39\x47\x10\x31\x01\x14\x2d\x77\x29\xa7\xd4\x28\xd9\x5f\xcb\x7b\xeb\x9b\xf5\xd2\x17\xab\x35\xf8\x07\xfd\xe1\x8f\x13\x7e\x10\x90\x87\x4a\xb8\x8e\x4a\xc8\x64\xff\x59\x7e\xf8\x8e\xbd\x9a\x02\xc0\x39\xd7\x43\x76\x6d\xad\x33\x56\xe5\x39\xa6\x35\x15\x31\xce\x23\x7d\xa6\x9b\xb2\xda\x44\x20\x70\x1d\x2a\x41\x01\x95\x40\x97\x28\x20\xd5\x90\xc4\xff\xba\xef\x08\x69\x5c\x45\x55\xfa\x65\x93\xe2\x63\xd2\x13\xbb\xc6\x27\xb8\x30\x02\x62\xe2\x49\x4c\x03\x10\x50\xf8\xbb\xcb\xff\x59\xe7\x99\xdf\xc5\xa3\x88\x56\x3c\x96\xe7\xc7\xe2\xe8\xd6\x2e\x1c\x30\x07\x36\x48\x8b\x4b\xdd\x23\x7d\xc0\x5c\x62\x88\x2d\x67\xf3\x75\x00\x5b\x40\xd6\x83\x43\x0c\x04\x14\xa1\x76\xf8\x06\x2a\x61\x81\xa2\x3f\x0c\x7e\xa4\xaf\x22\x40\xc4\x1a\x3f\xf6\xbe\x7c\x72\x87\x23\x9b\xef\xd5\xcb\x60\xa5\x35\xb8\x04\xc3\xae\x5a\xd2\x0d\x10\xb8\x01\x95\xa0\x84\xf6\x4d\x00\x83\x71\xad\x9a\x07\xd2\xc6\x1f\xca\x16\x79\x85\x11\x33\x4b\xef\xc3\x2d\xf4\x15\x18\xdf\xe6\x8c\xf2\xce\x85\x3e\x9f\x12\xc3\x05\x01\x25\xa8\x04\x65\x54\x02\x6b\xd4\xb4\xc6\xe5\xcc\xfb\x83\x57\x76\x1a\x64\x69\x0f\x0d\x3f\x3e\x6a\x3c\x22\xf3\x9a\x8c\x2c\x4d\xd7\xbd\x91\x6e\x1f\x8c\xc7\x06\x02\xca\x50\x09\x2a\xa8\x84\x55\x0e\x15\x6e\x2d\x23\xd7\xd4\xfe\x4c\x96\x7b\xb8\xb4\xa1\xe4\xea\xb7\x86\x52\xb0\x7a\xac\xe7\x47\xfa\x49\x60\xad\x4a\x06\x9a\x20\xa0\x02\x95\x70\x13\x95\x10\x93\x55\x13\xfb\x75\xd6\xfd\x39\x4c\xe8\x65\x78\x52\xf7\x53\x1b\xb9\xbe\x38\x7b\x83\x56\xdb\x08\x86\xd1\x99\x26\x0a\xfb\x31\x6d\x10\xb8\x09\x95\xa0\x8a\x4a\xf8\x19\x4a\xa3\xf1\xd5\xa0\x23\xfe\xe3\x9e\xcd\xf7\xef\xfe\x89\x1f\x06\x12\x5b\x89\xd2\x39\x1f\xce\x53\xb7\xc1\x99\x95\xf4\xf2\x65\x41\x40\x15\x2a\xe1\x16\x2a\xe1\x50\x87\x3e\x88\xaa\xc9\x1b\xcf\x42\x4d\x70\x36\x52\x7e\x56\xc6\x89\xbd\x88\x60\xd6\x54\x58\x65\xad\xe1\x16\x01\xdf\x97\x66\x2e\x10\xb8\xf5\x77\xc5\x73\xd6\x95\xf7\x77\xf1\xa8\xa1\x8d\xa8\x16\xc3\x6f\x8a\x87\xfb\x75\xdd\x27\x4c\xac\x99\x62\x96\xe6\x7d\x68\x23\xfd\xb2\xe0\x82\xe6\xad\x73\x56\xba\xdf\x38\xe6\xce\xe1\x82\x80\x1a\xd4\x0e\xab\xa3\x7d\x88\xc9\xb1\x31\xa6\x7a\xc5\xd5\x96\x16\xff\xb8\xb8\x76\xec\x41\xd7\xfa\xc5\xcd\x17\x5b\xcc\x78\xb1\x8f\xd2\x43\x2c\x91\xc5\x45\x4c\x20\xa0\x0e\x95\xa0\x81\x4a\x78\x7b\x87\x63\xe4\x6a\x86\x9b\x7a\xd9\xdd\xfe\x06\x26\xaa\x1d\xd9\x2c\x2b\xda\x4c\x9e\x96\x07\xb8\x59\xe2\x33\x4f\xdf\xed\xa8\x5f\x04\x01\x0d\xa8\x04\x4d\x54\x02\x59\x10\xc6\x85\x38\xfc\x71\x41\x67\x0e\x83\x21\x46\x43\xd6\xa0\xf7\x76\x8a\x6d\xaf\xb0\xdf\xec\x46\x85\x78\xd0\xbd\xbe\x75\x74\x07\x04\x34\xa1\x12\x6e\xa3\x12\x44\xfd\x8a\x2b\x56\xde\x7b\xca\xd5\x92\x2f\xad\xb0\xb1\xf6\x79\x99\x53\x86\x6e\x74\x15\x86\x72\xde\x7c\xe5\x97\x8c\x91\x33\x4b\x02\x02\xb7\xa1\x12\xb4\x50\x09\x6c\x0b\xa3\xf5\x84\x88\x83\x2c\x91\x02\xf8\xe7\xcc\xee\xf7\xe4\x07\x8d\x69\xb8\x93\x5b\xef\x68\x55\x3f\x3f\xb9\xe9\xe2\x27\x4f\x05\x02\x5a\x50\x09\xda\x68\xdf\xaf\xb3\x23\x2e\x2c\x7c\xc9\x45\x33\xf2\x42\xbc\x96\x80\xf2\x76\xce\x4f\x9c\x3a\x78\xff\xf9\xec\xdb\x4e\x95\x94\xef\xe6\x96\x0e\x2d\x41\x40\x1b\x2a\xe1\x0e\x2a\x61\xeb\x85\xf5\xc1\xdd\xdb\xde\x53\xef\xef\xec\x52\x04\x53\x3e\xfd\xa5\xfa\xab\x10\x2f\x12\xe1\x95\x24\xf0\x6d\xec\x1a\xe1\x43\x73\x39\x10\xb8\xf3\x77\xc5\x73\xd6\x58\xf4\x77\xf1\xe8\xa0\x36\x27\x49\x68\x47\x84\x92\xa4\x8b\x29\x39\xe6\xbd\x3a\xb0\x0d\x1f\x1a\xc4\x6b\xd1\x68\x23\x65\xfd\xf9\xa3\x30\xfc\xc6\xa6\x43\x80\x3d\x08\xe8\x40\xed\xb0\x2e\x2a\x01\x93\x25\xc3\x66\xff\x4d\xba\x87\xf8\x45\x1f\x26\x9f\xcd\x6f\x14\x0e\x40\x7b\x96\x55\x54\xe5\xf9\x9d\x55\x6f\x0c\xbe\x9b\x9d\xd4\x20\xa0\x0b\x95\xa0\x87\x76\xc3\x73\xc9\x8a\x31\x3c\xcc\x98\xb4\xa4\xbf\xf6\xd2\xa6\x43\xca\xb6\x4d\x5a\x90\x66\x45\xf5\x33\x31\xc1\x5b\x54\x6d\xa0\x5c\xbb\x2b\x08\xe8\x41\x25\xe8\xa3\x12\x1c\x5d\xe8\xdc\xab\x6e\x5f\xc1\x7a\xe2\x59\xff\x64\x67\x8b\x76\xbd\x29\x75\xca\x84\xa0\x2a\xb4\xad\x5a\xe2\x11\x85\x52\x41\xc2\x0d\x10\xd0\x87\x4a\x30\x40\x1f\x7a\x5e\x0a\xa5\x7b\xd8\x78\xff\x86\xf6\xd2\xb9\x68\x56\xbe\x15\xd2\x39\xc4\x8d\xa8\x6c\x89\xf6\x2f\x2c\x35\xf3\xf1\x47\x37\xe5\x40\xc0\x00\x2a\xe1\x2e\x2a\xc1\x52\x73\x95\x98\x73\xd9\x9b\xec\x8b\x48\xeb\x25\xe7\xd9\x7a\x9b\x67\xc3\x91\x43\xd5\xe4\x7c\xa9\x5e\x01\x3b\xf6\xd5\x6c\xef\x64\x40\xe0\x2e\x54\x82\x21\xda\xcd\xf3\xed\x09\x9c\xe1\xa5\x89\xa7\x33\x18\xc7\xdd\xdd\x1b\x15\x4a\x30\x04\xc5\x73\x95\xaf\x5b\x7b\x0a\x5f\x0a\x65\x3b\x68\xcd\x84\x41\xc0\x10\x2a\xc1\x08\x95\x80\xa1\x91\x17\x7b\xa1\x9d\x84\x80\x66\xf0\x64\xbe\x45\x47\x3a\x34\x3d\x52\xf2\x22\x99\x91\x57\xb7\x9b\x0c\xfd\xda\xa0\x8d\x10\x01\x08\x18\xfd\x5d\xf1\x9c\x75\x77\xf6\xbb\x78\x8c\xd1\xc6\xda\xd7\x6a\x37\xa2\x3e\x8b\x6d\x0e\x71\x27\xde\x2c\x7c\xe2\xe5\xdd\x75\x81\x5e\xf4\x63\xc5\xbb\x47\x73\xa6\xa1\x62\xb3\x2a\xc9\x2a\x20\x60\x0c\xb5\xc3\x26\x68\xab\x8b\x56\x7c\x92\x62\xe1\x0e\x31\x21\x1f\xab\x32\x3a\x0a\xdb\xb6\x84\x8c\x9a\x2e\x55\x5d\x88\x22\xab\xd8\x9f\x66\xef\x15\xbc\xc3\x0d\x02\x26\x50\x09\xa6\xa8\x84\xef\x21\x37\x1d\x26\xf9\xe9\xf6\xce\xf1\x5f\x29\xa9\xe4\x7e\xb1\xdc\x7a\xfc\xb6\x7d\xbd\x25\x12\xfb\x64\xbe\x02\x27\xff\x76\x19\x1e\x08\x98\x42\x25\x98\xa1\xcd\x53\xff\xba\xb3\x9c\xc8\x8f\xdd\xcb\xfe\xbc\x33\x26\xe9\xa7\xd9\xf5\xf4\x4f\xcd\xbc\xc8\x34\xc7\x2f\x2c\x8a\xc4\x45\x75\xa9\xcc\xe4\x20\x60\x06\x95\x60\x8e\x76\x58\xd0\x33\x28\x6c\x32\x78\x06\x3b\x16\x16\xfb\xb8\x98\x21\x67\xdc\x9c\x2b\x53\xb7\x82\x52\x73\x9e\x49\xeb\xcb\xac\x8b\xb3\x39\x83\x80\x39\x54\x82\x05\x2a\xc1\x59\x36\xc8\x54\x65\x3e\xef\x21\xc2\x58\x66\xc5\xad\x06\x21\x78\x55\x03\x27\xe2\x58\xa4\xe0\x5c\x5f\x3a\xff\x37\x8b\x65\x98\x32\x08\x58\x40\x25\x58\xa2\xcd\xcf\xbd\x80\x45\x55\x05\x69\x2e\x07\xed\xbe\x3a\xc9\xc9\xa5\x0f\xb7\x31\x67\xd7\x00\x95\xe7\xd5\x3e\x6a\x6f\x67\xd4\xd8\xc8\x12\x83\x80\x25\x54\x82\x15\x2a\x61\xbd\x2c\x6f\xda\xe3\x89\xba\xf4\x49\xc8\xa4\x0d\xa1\x34\xfc\x13\x79\x73\xc8\xc8\x25\x8e\xf0\x12\x49\xf2\xe4\x8a\x21\x89\x2f\x36\x20\x60\xf5\x77\xc5\x73\xd6\x7c\xc5\xef\xe2\xb1\x46\x6d\x0e\x25\x91\x11\xfe\xfc\x85\xcd\xe0\x73\x11\xbd\x57\x6b\xa7\x95\xf2\xd9\x8b\xb3\xc2\x11\xdd\x46\xc1\x61\x55\xea\xa1\x23\x4c\x6f\x39\x41\xc0\x1a\x6a\x87\x6d\xd0\x56\x24\x7a\xe5\xb4\xe7\x85\xc5\xf3\xf4\xeb\xe9\xbd\x71\xf4\x70\xef\x98\xda\x5f\x0b\xcc\xfd\x74\xaf\x4e\x65\x77\xcd\x23\x27\x5f\x4d\x0c\x04\x6c\xa0\x12\x6c\x51\x09\x76\x27\x33\x8b\xad\x82\x42\x64\x0e\x61\xdb\x65\x5f\x97\x8c\x73\x3f\xdb\x30\x86\x04\x14\x64\xcd\xbc\x11\xf6\xc8\xbb\x62\x1f\x8f\x04\x01\x5b\xa8\x04\x3b\xb4\x1b\xd5\xf4\xb0\x52\xac\x18\xe3\xef\x37\x82\x12\x5f\x24\x4d\x3d\xf1\x9a\xe8\xcc\x49\xa5\x8d\xed\x7b\xb3\x75\xf0\x99\x5c\x37\x97\x5a\x1c\x04\xec\xa0\x12\xec\x51\x09\x47\x27\x94\x1a\xb8\xd4\x98\x59\xd9\x85\x2a\x9b\x45\x4c\x21\x27\xf1\x1b\x34\x26\x87\x78\x0f\x1b\xe3\xce\x57\x9b\x88\x77\x14\xd8\x80\x80\x3d\x54\x82\x03\xda\xed\x3c\x71\xfd\x5b\x1b\x5a\x11\x0f\x6b\xfc\x7b\xf4\xcb\x33\x62\x0d\x49\x61\x3f\x05\xb4\x73\xcf\xef\x8e\xb9\x5a\x0e\x75\x22\xd3\x54\x40\xc0\x01\x2a\xc1\x11\x95\x30\x76\x7c\x53\xf5\xaa\x85\x91\xc8\xa8\x3a\xdc\x51\xad\xec\x21\x7e\x52\x2f\xa5\xf7\x70\x7f\x87\xf9\x25\xca\x5b\x57\xd6\x2f\x6f\xdb\x80\x80\x23\x54\x82\x13\x2a\xe1\xd2\xb9\x4d\xba\x86\xbc\x09\x39\x2f\xc4\xa7\x38\x4d\xe4\xbe\xbe\x5c\x44\x99\xdd\xb9\x45\x25\xa2\x90\x20\x39\xcf\x70\x3a\x01\x53\x10\x70\xfa\xbb\xe2\x39\x6b\x06\xef\x77\xf1\x38\xa3\x36\xe7\x39\x02\x7b\xa0\x4a\x96\x41\x79\x84\xd4\x81\x93\x00\x66\xab\x36\x11\xb5\xb7\xed\x20\xf3\xd1\x88\x48\xc4\x8e\x04\x6f\xab\x59\x03\x04\x9c\xa1\x76\xd8\x05\x95\xf0\x40\x42\x81\x43\xca\xdc\xfe\x97\x74\x9c\x5f\x08\x52\x64\xe3\xb8\x91\xb6\x03\x51\x27\xfb\x5c\xc9\x8f\xf1\x46\xe6\xde\x7e\x12\x0f\x08\xb8\x40\x25\xb8\xa2\xdd\x2f\xe4\xe7\xf6\x31\xbd\x6b\xd1\x7e\x12\x0a\x9b\x1e\x98\xf1\x68\xbb\x4b\x3b\x24\x30\x66\x65\xd1\xcf\xe1\xd6\xeb\xda\xdc\x5f\x4b\x00\x02\xae\x50\x09\x6e\xa8\x04\xf6\xae\xf7\xa5\x29\xed\x56\xc9\x22\x19\x8b\x92\xf5\x5a\xda\x29\x64\xf1\x3f\xd5\x84\xf8\xa3\x38\x1f\x4e\xc9\x07\xd7\x1d\xb1\xda\x82\x80\x1b\x54\x82\x3b\x2a\xe1\xf1\xe2\x72\x0b\x55\x91\xeb\xc9\x83\x9d\x9e\x2a\xd2\x8e\x62\xbf\x37\xe3\x98\xd4\x09\xe6\xc9\x61\x93\x54\xc9\x14\xd8\xbd\x2d\x4c\x20\xe0\x0e\x95\xe0\x81\x4a\xa0\x32\xd4\x9b\x3e\xa6\xd8\x3c\xe6\xd2\xf3\x13\x22\xbd\x83\xd5\x92\x66\x18\xd9\x3e\xa7\x46\x94\x3a\x3a\x2a\x50\xc3\x31\x46\x79\x07\x04\x3c\xa0\x12\xee\xa1\x12\x96\x03\x0a\xba\x1e\x5d\xf5\xf0\xb1\xda\x9b\xfc\x75\xe2\x80\x7f\x95\x5f\x0e\xfb\xf6\x1c\xdd\xea\x13\xd7\xaf\x7a\x6d\xed\xe5\x45\x36\x20\x70\x0f\x2a\xe1\x3e\xda\x5e\x9a\x51\xc0\xf0\xae\xbb\xdd\xed\xb8\xc1\x88\x75\xed\x24\x79\x98\xc6\xcc\xe1\x27\xa3\x8e\x88\x3d\x83\x98\xe6\xb6\xb4\x43\xa6\x2e\x08\xdc\xff\xbb\xe2\x39\x6b\x4e\xfb\x77\xf1\x78\xa2\x2d\x5f\x30\xb6\x3b\x8b\x0c\x70\x69\x68\x68\x8a\xd8\x9a\xb9\x52\xb6\x91\xfd\xe4\x87\xe3\x0f\x7e\xe8\xa1\xda\x93\x98\x0f\x3f\x21\x67\x02\x01\x4f\xa8\x1d\x7e\x80\xf6\x40\x6b\x40\xe9\xa5\x41\x04\x99\x58\xdc\xad\xee\xf6\x9c\xae\xfe\x19\x3f\x51\xcc\x5f\xd7\x76\xea\x23\x15\x09\x7a\xe2\xf4\x1f\xba\xd1\x80\xc0\x03\xa8\x04\x2f\x54\x82\xd1\x0a\x91\xc6\x10\xee\x37\xa5\x94\xfd\x36\x8f\x88\xa2\xe8\xed\x8b\x25\xab\x5e\xee\xd3\xc8\xa8\xde\xfc\x87\xf7\xbc\x8e\xa5\x14\x41\xc0\x0b\x2a\xc1\x1b\x95\xf0\x51\xec\xa5\x9e\x1e\xf1\xc2\xf0\x2c\x69\xc4\xfa\x25\xb7\x2e\x51\xb9\x0b\x96\x8b\x91\x57\x27\xb3\xd6\x52\xc7\x6e\x75\xfd\x1a\x71\x04\x01\x6f\xa8\x84\x87\xa8\x84\x2f\x17\xa5\xac\x44\x60\x87\x9b\xf4\x2d\x35\x7b\x29\xe2\x59\x8d\x36\x37\x8b\xa9\xe1\x71\x2b\x70\xdd\x4b\x48\xc6\x70\xea\x36\x5b\x10\x78\x08\x95\xe0\x83\x76\x77\x6b\xdd\x30\xf0\xeb\xad\x19\xb9\xd9\x95\x91\x71\xb7\xbb\x62\x32\xcf\x08\x7c\x6c\x11\xf6\x21\x61\xba\x2a\xc1\xbd\xeb\xbe\x03\xcc\x20\xe0\x03\x95\xe0\x8b\x4a\xb0\xea\x18\x7c\x60\x2b\xc9\x4a\xb9\x7a\x40\x20\x5f\xf8\x69\x64\x93\x63\xf1\x7a\xba\xc9\x8a\xf8\x85\xbe\x04\x3f\xc3\xe7\x74\xea\x86\x20\xe0\x0b\x95\xe0\x87\x4a\x30\x6f\xe0\x17\x69\x18\xe8\xc9\xbf\xf3\x4a\x7b\x45\x61\x6e\xf4\xc3\x4e\xf9\xde\xe1\x37\x7e\xa4\xd3\x91\x93\xe4\xf9\x9d\xec\x24\x73\x10\xf0\xfb\xbb\xc5\xb6\xb3\xde\xd4\x43\x5b\x6c\x5b\x2a\x2c\xc1\x89\xca\x7e\x44\xc4\xf2\xc4\x69\x94\xe5\xf2\xf1\x4b\x71\x9e\xfa\x60\x1a\xbc\xf4\xd7\x70\x67\xbe\x08\x8e\x05\x78\xfb\xa9\xd0\xbc\x68\x71\x95\xaa\x3b\xcc\x23\x07\x01\xb6\x73\x01\xbc\x92\x52\x5e\x2d\x9e\x8e\x1d\xa4\x07\x04\x72\x84\x5d\xcd\x29\x6c\x6f\x99\x4e\x85\x96\x33\xce\x5c\x7f\xa1\xcf\xfb\x6c\x93\x20\xbc\xd4\xb3\x89\x63\x21\x23\xb8\xfb\xf5\x54\x9d\x07\xe6\x9e\x09\xfe\x1d\xe3\x0a\xee\x9b\xa7\x42\xc7\x83\x1c\x0a\xef\x8c\x24\x34\x27\x5e\xfc\x3e\x67\x50\x4b\x71\x62\xf5\x3e\xec\xa1\xed\xc4\xd8\x8d\xfa\xea\x57\xf0\xbb\x54\x52\xa7\xdf\x19\x1e\x78\x88\x3b\x42\xa5\x63\x94\x55\xcc\x27\x77\x77\x7b\x87\xa9\xfa\x0e\xdd\x40\x55\x94\x6a\xe8\xdb\x1b\xf7\xe4\x27\x7c\xe3\x52\x10\xa7\x42\xa5\xed\x9e\x57\x37\x2e\x72\x3d\x74\xa4\xd4\xfc\xaa\x42\x86\x1d\x32\xd8\x35\x3f\x1b\xbe\xc6\x65\x89\x27\xf4\x8c\xa8\x93\x0a\xa3\xf3\x54\x68\xb1\x7f\x60\x68\xb1\x7c\xdf\x67\x7f\x35\x72\xe3\xf2\x76\x7e\x77\x99\x94\x41\x99\x9f\xc9\x6f\xbe\xe0\xf2\x7c\xde\x2b\x43\x58\xe8\x9d\xfe\x60\x89\xe1\x5b\xf9\xc5\x57\xe7\x7f\x58\xa9\x84\xac\xba\x1b\xdf\xff\xf0\x93\x9b\x27\x68\x4c\x90\x72\xa9\x9f\x83\xba\x6d\xcc\x58\x3e\xeb\xff\x2e\xb6\x9d\xb5\x57\x7f\x9f\xc1\xfc\x51\x8f\x89\x87\xed\xec\x9a\x77\xed\xf3\x16\x46\x92\x7b\x9a\x5e\xc2\x9b\x5e\x5e\x77\xdf\xea\xee\x30\x7e\x8f\x15\x74\x9e\x32\x9c\x9a\xa7\x8d\x04\x04\xfc\xa1\x1e\x75\x20\x2a\xc1\x53\x90\x61\xba\xe9\x5c\x25\x77\xbf\xc5\xb6\x83\x98\x1d\x23\x7f\x60\x44\xf9\x3d\xfb\x1f\xba\xd7\x19\xec\xf6\x97\xfa\x12\x06\x30\x41\x00\x84\x4a\x08\x40\x1b\x60\x50\xf4\xd8\x2d\x74\xc4\xc4\xde\x59\xa4\xad\xb6\xc3\x79\xd9\xe6\x92\x82\xa4\x39\x27\x04\xe6\xbd\x42\xe2\xc6\xa9\x8e\xd9\xba\x81\x40\x00\x54\x42\x20\x2a\x81\x20\x6d\xc8\xcb\xed\xc8\xfd\x2b\x9d\xe4\x03\x03\xfa\x28\xdb\x98\x78\x30\x3c\xff\xe4\xb6\xe2\x4f\xd2\xb1\x5b\x61\x42\xc2\x69\x2e\x20\x10\x08\x95\x10\x84\x4a\xf8\x86\xed\x14\xaa\x45\x1e\xc4\xc1\xd9\xbe\x73\xef\xd1\x24\x4d\xf4\xb0\x11\x89\x5b\xde\x3d\xd1\x82\x95\x46\x99\xa8\x19\xa7\x27\x3a\x20\x10\x04\x95\xf0\x08\x6d\xda\x56\xf0\x52\xca\x20\x7f\xbb\xd5\xc7\x2a\xb6\x03\x0e\xdc\xf7\xc2\xa4\x4f\xc7\x34\xc2\x6e\x1e\x56\x38\x48\x59\x49\x58\x78\x2b\xf3\x82\xc0\x23\xa8\x84\x60\x54\x82\xfe\xe3\x45\xb7\xd7\x2e\xd3\x7e\x73\x39\x25\xb7\x65\x4b\xba\xc8\xb4\x25\x61\x6f\x7a\x62\x3b\x9c\x64\x38\x43\x0a\x9d\x0c\x74\xdd\x40\x20\x18\x2a\x21\x04\x95\xc0\x2c\x43\xfc\xb2\x08\xe0\x63\x5d\x7b\x1e\xac\x1a\xf1\xcd\x3b\x8f\xec\x5d\xf6\xb3\xf7\x63\x76\x0d\x8f\x0b\x2f\x4e\xb5\xf0\xdb\x5f\x00\x81\x90\xbf\xbb\xfc\x9f\x75\x9e\xf9\x5d\x3c\xa1\xa8\xcd\x79\xcf\xcc\x33\xd0\xcb\x59\x77\x55\xd1\xf1\x7b\x1c\x71\x5c\xdd\xc1\x87\x28\xe1\x44\xc2\xda\x49\xc7\x7a\xe7\x37\x83\x2f\x58\xc2\xed\x40\x20\x14\x6a\x87\xc3\x50\x09\x55\x42\x56\x89\x3d\x32\xc4\xbb\xbb\x74\xa5\x89\x1f\x9f\xdc\xc7\xbf\x91\x82\x9c\xfb\xa8\x80\x59\x21\xe7\x9e\x53\x1f\xb4\x5c\x72\x13\x04\xc2\xa0\x12\xc2\xd1\xd6\xc2\xf1\x22\x70\x8f\x6a\x4d\x84\x26\x4b\x84\xe7\x3b\xf9\xdb\xfb\x5c\xee\xd3\x1c\xea\x95\xac\xc1\xa6\x66\x03\xfa\x1c\x68\xd2\xf0\x40\x20\x1c\x2a\x21\x02\xed\x0d\x06\x67\xce\xe8\xde\x44\xb6\x52\xae\x91\xde\x23\x05\x0a\xa2\x94\x5a\xfa\x3b\xdb\x3f\xe9\x27\x30\xb5\xbf\xde\xa5\x7e\xa1\xe4\xce\x0f\x02\x11\x50\x09\x91\xa8\x04\x9b\xe2\x08\x1f\x2b\x7a\xeb\x1f\x8a\x95\x44\xdf\xef\x53\xbc\x98\x9a\x17\xf4\xcf\xb9\x81\x37\xce\x66\x45\x6b\x3e\xfc\x58\x25\x8f\x14\x04\x22\xa1\x12\xa2\x50\x09\xad\x6c\x48\x55\xb7\xa0\xa5\xe8\xca\x9d\xe8\x80\x98\x8d\xbb\x3e\x5b\x0c\xcd\x36\xae\xd9\xcf\x2c\x54\xd4\x67\x07\x26\xdb\x53\x75\x41\x20\x0a\x2a\xe1\x31\x2a\xc1\x1b\xae\x32\x77\x6d\xd2\xce\xe1\xbe\x0a\xcd\x52\x33\xf5\xc7\x26\x01\x3a\xfe\x38\x6e\x46\x83\xee\x16\xdb\x04\xfe\x9a\xca\x0d\x36\x10\x78\x0c\x95\x10\x8d\x56\x3c\x07\xb3\xdf\x6f\x6c\x6b\x53\x8b\x8d\x6d\x30\x0a\x1d\x60\x54\xbe\x58\xf9\xe6\x38\xdb\x26\x60\x23\x35\x85\xf0\x92\x27\xeb\xc6\x02\x81\xe8\xbf\x2b\x9e\xb3\xae\xbc\xbf\x8b\xe7\x09\x6a\x73\xf2\x79\xcc\x3b\xb9\x66\x54\x1b\x54\x3c\x07\x0a\x8d\xf5\x39\xef\xd0\x7d\xdd\x8f\xe3\x21\xaf\xc6\x9d\x9c\xea\x4d\x7c\x6f\x7e\x81\x0f\x04\x9e\x40\xed\x70\x0c\x2a\xc1\x7d\x58\x27\xc9\xc8\x4c\x46\x65\x31\x89\x2e\x38\x79\xd9\x1e\x4f\xd2\x2e\xae\x9d\xf0\x01\x58\xb6\x29\x3e\xf5\xf5\x31\xd8\x28\x07\x02\x31\x50\x09\xb1\xa8\x84\x61\x5f\x02\x27\x6a\xc4\xbb\xef\x76\x2a\x66\xd7\xfb\xdd\x67\x5f\xe1\xad\xe3\xb8\x89\xfa\xbc\x87\xb1\x39\xc7\xae\x7f\xc4\x8d\x50\x00\x81\x58\xa8\x84\x38\x54\x42\x4a\x51\x5f\x55\x35\xcf\x8f\xc9\x64\xaf\x40\xb6\x54\xdd\xa7\xcf\x9c\xe4\x26\xb2\x88\x09\xcd\xe5\xdc\x79\x40\x49\xcc\xe2\x3d\x03\x10\x88\x83\x4a\x88\x47\x25\xbc\x5e\x4d\xd6\xab\x08\xa6\xfe\xca\xbe\x11\x53\x1f\x34\x45\x44\x7f\x3e\xef\x73\xc4\xe1\xea\xb9\x8b\xd1\x23\xf3\x43\x8f\x0f\xef\x8a\x80\x40\x3c\x54\x42\x02\x2a\x21\xab\x24\x2b\x7a\xe8\x93\x47\xf4\x96\x5a\x02\xbb\x11\x49\x18\xe7\xb7\x5f\xa9\xf2\xe2\x5d\x63\x7c\xc6\x2b\x9f\x06\x58\x63\xe9\x38\x40\x20\x01\x2a\x21\x11\x95\x20\x8e\x8b\xcb\x8e\xc9\xfe\xa1\xf0\xae\xba\x3d\xc3\x5b\xb5\x7d\xe7\x6b\x18\x4f\xb9\x12\x15\x64\x3f\x7d\x71\x22\x31\x69\x23\x5c\xc0\x02\x81\x44\xa8\x84\x24\xb4\x35\x0f\x02\xee\x1e\x49\x91\xb0\xcf\xc2\xb8\xe7\x03\x32\x97\xb2\x2b\xd9\xaa\x6d\x54\x37\x5d\x1e\xe8\x5f\xb1\x79\x64\xd1\xe3\xc2\x03\x80\x40\xd2\xdf\x15\xcf\x59\x63\xd1\xdf\xc5\x93\x8c\xda\x9c\x1c\xbc\x5a\xce\xf2\x59\x69\xd2\xc8\x56\x59\xc6\xf8\x49\xab\xda\x09\x26\x9d\x78\x83\x4a\x15\xf2\xd6\x95\x47\xe1\x6b\x12\x66\x14\x20\x90\x0c\xb5\xc3\x29\x68\x0f\x61\xb0\x77\xcb\xbe\x30\x2a\x7b\xfc\x53\x5a\x69\xa8\x35\xd9\x64\xc4\xbf\x74\x9f\x06\x23\xbf\x27\x3f\x00\xdb\x9e\x66\xee\x4d\xf6\x05\x10\x48\x81\x4a\x48\x45\x9b\xcc\x73\x7b\x9e\xd1\xc2\x33\xd5\xfd\x54\xd2\xac\x1f\xf9\x22\xe1\x27\x96\x6c\x38\x9d\x4f\x0d\xfc\xa0\xac\x3d\x3d\x67\x0d\x87\x5e\x08\x04\x52\xa1\x12\xd2\x50\x09\x85\x96\x86\x38\x98\x69\x14\xaf\xf7\xf0\x30\xad\x37\xe8\x0f\xdc\x34\x59\xc8\xd7\x69\x3a\xb5\x8e\x3b\x37\x64\x93\xad\x47\x94\xf9\x40\x20\x0d\x2a\xe1\x29\xda\x2d\x15\xc0\x7f\xc2\x74\xc0\x3f\x1b\x3b\x41\xa3\xf4\xb0\x03\x2f\x69\x27\xf1\x80\x0d\x3f\xe7\x7d\x10\x5b\x74\xd1\x62\x88\x87\x2d\x25\x08\x3c\x85\x4a\x48\x47\x25\x14\x61\xd5\xd2\x54\xfa\x1e\xc5\xbc\x5a\x53\x60\x63\xa9\x32\x3e\xa2\x0a\x75\xbb\x3e\x71\xb8\x9b\x45\xfb\x79\xeb\x22\xa3\xed\x00\x3e\x08\xa4\x43\x25\x64\xa0\x12\xb0\xe4\x25\x39\x36\xf9\x9e\x26\x2e\x3c\x9b\x6a\xc4\xaf\xb2\xd3\x37\xb6\xea\x80\xdf\xbc\x5b\x1e\x36\x11\x52\xff\xae\x6c\x04\x83\x0e\x04\x32\xa0\x12\x32\xd1\x06\xb7\x23\x1a\x2d\x42\x82\x57\x22\x9b\x42\xb5\x4c\xda\x7f\xf8\x2f\x5c\xbe\xea\x3c\xcb\xa7\x57\x3a\x80\x21\xd1\x38\xd3\x63\xbe\xc6\x07\x02\x99\x7f\x57\x3c\x67\xdd\x9d\xfd\x2e\x9e\x2c\xd4\xe6\x10\x5f\x26\x60\x2f\x08\xd2\xe1\x78\x67\xc0\x69\x68\x32\x47\xee\x9d\x64\xf6\x60\x41\x65\xd3\xcf\x85\x74\x7c\x3b\x47\x21\xab\x89\x1e\x04\xb2\xa0\x76\xf8\x19\x2a\x21\xe8\x92\x31\x42\xd3\x97\x40\xe6\xbe\xc0\xfb\x88\x34\x46\xa2\x3b\x7e\xc8\xe8\x7e\xa9\xc9\x43\x8f\xb5\x5b\xbf\xac\x3b\xae\xba\xf1\x81\xc0\x33\xa8\x84\x6c\x54\x82\xb5\xc3\xe5\xcb\xac\xa6\xc2\x3c\x5b\xa0\x3e\xb7\xc7\xc7\xc9\xb5\xfe\xea\x4b\xce\x87\x37\xa9\xbc\x30\x09\x9d\x41\xb9\x4f\x66\xbc\x20\x90\x0d\x95\x90\x83\x4a\x10\x9e\xde\xb8\xf9\x92\xb1\x64\x80\xb9\xb0\x0a\xef\xcd\x6d\xf7\x2f\x75\xc7\x0a\x04\x1a\xf6\x8f\x0d\xd3\x34\xb4\x06\xb2\xaf\xb1\xe9\x80\x40\x0e\x54\xc2\x73\x54\x82\xec\x74\xd1\x7d\x42\x83\x8c\x7b\x47\x2e\x0a\xaf\xaf\x58\x97\xb7\xbd\x32\x5d\x48\x98\xf1\xac\xab\x10\x5a\x71\xb7\x9e\x1f\xb8\x65\x06\x02\xcf\xa1\x12\x72\x51\x09\x5e\xe5\x45\x59\xf5\xbd\x8b\x0c\x6f\x26\x22\xcb\x82\xf8\x15\x86\xea\x06\x89\x36\xf6\x9a\x0e\x5c\x68\x73\x10\x93\x2c\xe7\xcd\xb8\x41\x20\x17\x2a\x21\x0f\x95\x80\x34\x27\x46\xde\x25\x7f\xb9\x51\x90\xdf\x97\xa5\x10\xbd\x90\xe4\x6c\x7d\x63\xaf\xd6\x94\x7b\x6d\xfc\x5d\x4c\xe5\x61\x8f\x2c\x16\x08\xe4\x41\x25\xe4\xa3\x12\x0c\xb1\x9a\xe9\xd7\xb9\xc4\xfc\xfb\x29\xdb\xe7\xe2\xae\xf9\x46\x25\xf4\xdc\x2b\xde\x33\x7d\xbf\x66\xbb\xec\xea\xb0\x54\xf3\x12\x06\x02\xf9\x7f\x57\x3c\x67\xcd\x57\xfc\x2e\x9e\x02\xb4\x37\xaa\x68\xb8\x3b\x9e\x1a\xc1\xa7\xa9\x3e\x6b\xbc\x19\xed\xfe\x3c\x7a\xe8\x92\xfb\xc6\x2a\x62\x8a\xdc\x33\xad\x18\xe0\x97\x61\x65\x01\x81\x02\xa8\x1d\x2e\x44\x25\x60\xd7\x6f\xcc\xe1\x46\x81\xf7\x85\xcb\x47\xe4\x87\x79\xe2\xc8\xf0\xb6\x16\xa6\x9f\xfa\x6f\x20\x71\xfb\xe9\x73\xea\xba\x73\x08\x41\xa0\x10\x2a\xe1\x05\x2a\xc1\xdf\xc3\xbe\x38\x76\xe5\xf5\xfb\xe5\x14\x73\xe3\x1b\xdf\x6e\xf4\x06\xbc\xe4\x27\xe0\xdf\x2b\xaa\x33\x79\xeb\xf7\xb5\xd5\x80\xd0\x0c\x04\x5e\x40\x25\x14\xa1\x2d\xb6\x8d\xda\x04\xee\xf9\x6e\xd4\x5c\x97\xee\x0c\x54\x7f\xf9\x35\x2f\xb3\x2f\x76\x28\xe7\x51\x57\x8f\xd0\x08\xa1\x46\xee\x1a\xe0\x06\x02\x45\x50\x09\x2f\x51\x09\xf0\x9f\x35\xc7\x4c\x99\x43\x1e\xc6\x74\xf8\xfd\xf2\x32\xcd\x81\xe7\xec\x4c\x9e\x98\xc5\x03\xfb\xa3\x0f\x22\x49\xc8\xe2\x35\x95\x40\xe0\x25\x54\x42\x31\x2a\x41\xe6\xd1\xb8\x67\x1a\xf5\x15\xd9\xcc\x35\xdf\x4a\xb2\x6e\x2e\xf6\xa3\xaf\xa5\xb8\x0e\x6c\xd4\x5e\x55\x89\xdf\x77\xe8\x35\xd6\xaf\x80\x40\x31\x54\x42\x09\x2a\xe1\xee\x97\xe5\x13\xf7\xc5\xc5\xb7\x33\xf5\xaf\x70\xc6\xdc\xdb\x26\xb4\x67\xc4\xf6\x1f\x84\x1b\x66\x06\xfb\x90\x5d\x62\xf8\x89\x87\x04\x81\x12\xa8\x84\x52\xb4\xa7\xb0\xd2\x78\xf7\xcd\xf5\x74\xad\xb7\xd6\x53\xac\x86\x29\xbf\x67\xea\x3c\x1e\x7f\xd5\x30\x1f\x7c\x7e\x3d\x52\xfd\x62\x53\x66\x98\x06\x08\x94\xfe\x5d\xf1\x9c\x35\x83\xf7\xbb\x78\x5e\xa1\x8d\xe6\x7f\x04\xd3\x10\xf8\x14\xd4\xf8\xbb\xb7\x5b\x49\xe6\xb5\x7f\x1a\xb3\x8c\xed\xc8\x55\x4f\x9b\xb6\xfc\x5c\x35\x7e\xff\xd9\x05\x45\x10\x78\x05\xb5\xc3\x65\xa8\x04\x1c\x9a\xfe\xe1\xea\x0d\xea\x15\x96\x47\x8d\x5f\xd7\xbc\x85\x94\x1c\xf4\x37\xb0\xe0\x0d\x42\x3e\x6c\x73\x2f\x57\x80\x2e\x2b\x7d\x10\x28\x83\x4a\x28\x47\x7b\x82\xa9\xd4\xc1\x26\x8a\xdf\x32\x45\xc5\xe6\x38\xa2\xa4\x6a\xa4\x82\x77\x50\x95\x9d\x7d\x4c\xed\xd8\xfd\xa6\xe8\xb6\x19\x2d\xd1\x35\x10\x28\x87\x4a\x78\x8d\x4a\x28\xbf\x9f\x12\x95\xe1\xc0\x19\xf7\xfc\xfe\x52\xa3\xd1\xf2\xaf\xfd\x9d\xd0\xeb\x49\xeb\xfd\xdb\x70\x4c\xc6\xe4\x91\xcc\x4a\xa9\x2b\x20\xf0\x1a\x2a\xe1\x0d\xda\x94\x44\xc0\xb6\x7c\xff\x7b\x69\xe2\xf8\xfa\xfb\xd7\xf2\xb8\x33\xea\xd5\xf5\x36\x1e\x8b\x79\xd2\x19\x9a\xf7\xc9\x13\x34\xba\xbc\x66\x01\x81\x37\x50\x09\x15\xa8\x84\x35\x0c\x42\x5a\x1f\x6e\xa7\xca\x0f\x42\x85\xc5\x7a\x99\xd2\x0b\x9a\xd1\x93\x14\x5e\x15\xda\xe0\xaf\x1e\x2d\x17\x47\x8e\xd1\x3b\x20\x50\x01\x95\x50\x89\xf6\xf0\xbc\x88\x51\x42\xef\xd5\xb6\x7b\xe3\xd8\x7b\xb0\xec\x8a\x87\x0b\x33\x2f\x6a\xda\x11\x9c\x49\x4e\xae\x1a\x86\x7e\x85\xf9\x92\x9c\x20\x50\x09\x95\x50\x85\x4a\xd8\x37\x7a\x36\xd3\x16\x1e\x9e\xc7\xfe\x22\xca\xd0\xa2\xfc\xf5\xa2\x57\x38\x87\xab\x04\xb9\xad\x20\xbe\x97\x47\x08\xd9\x98\x91\x19\x08\x54\xfd\x5d\xf1\x9c\x35\xa7\xfd\xbb\x78\xaa\xd1\x26\x61\xb3\x32\x09\xf4\x73\x1f\xcd\x93\x60\xe7\xe1\x3b\x37\x1d\x5e\x1e\x2d\x54\x08\xa8\xbe\xdd\xed\xcc\xb8\x59\x8a\x7f\xf4\x2b\xc0\x15\x04\xaa\xa1\x76\xb8\x06\x95\xb0\xf9\x24\xb4\xad\xbc\x49\x52\xe8\xae\x4a\xc4\xf1\xa5\xd1\x37\x94\x69\x8f\xdf\x62\x10\x28\x77\xe6\xdc\xfe\xc4\x59\xca\x1b\x12\x67\x03\x02\x35\x50\x09\xb5\x68\x8b\xff\x73\x82\xf5\xac\x6b\x0a\xed\xba\xaa\x8a\x1a\x0c\x85\x5c\x89\xb4\x30\xff\x74\x39\xb6\x84\x78\x4a\x22\xff\xc5\x0b\xb9\xba\x22\x20\x50\x0b\x95\x50\x87\x4a\xc8\xa8\x32\xc6\x32\xff\xde\x75\xd1\x2d\x56\xa3\xb0\x04\x79\x23\xba\xda\xfb\xb3\xa0\x8b\xa3\xfc\xc9\x09\x27\x03\xde\xb1\x67\xfa\x5d\x10\xa8\x83\x4a\xa8\x47\x25\x08\x86\x7d\x18\xc3\x76\xf8\x39\x38\xf8\x80\x60\xee\x00\x36\x9b\x62\xbf\xc4\xbc\xa8\x58\xe6\x2d\xab\x81\x9f\xb5\x95\xb9\x1e\xe7\x00\x02\xf5\x50\x09\x0d\x68\xd7\x05\xaf\x8c\x55\x1d\x45\xf6\x88\x21\x3c\xff\xa9\x41\x35\xd7\x81\xe4\x2f\x13\x8c\x55\x6a\x7a\xfc\x12\x5b\x92\xc5\x3d\x45\x9c\x5a\x20\xd0\x00\x95\xd0\x88\x36\x73\xfb\x5a\x26\xe4\xa6\xb1\x6b\xfd\xb5\x1d\x01\x44\xde\x96\x67\xba\xa7\xe4\x0d\x47\xb1\xfe\x12\xfb\x9b\x3e\xce\x8f\x0a\xbd\xde\xdb\x83\x40\x23\x54\x42\x13\x2a\xe1\x4a\x43\x6f\xe6\xf8\x71\xcd\x05\x16\x83\xe6\x29\x8a\xd2\xc5\x85\xe0\x18\x87\xdc\x9a\xe7\x4f\x4d\x67\x44\xd3\xd3\xbc\x4a\xfb\xe9\x41\xa0\xe9\xef\x16\xdb\xce\xfa\xd6\x25\xda\x62\xdb\x3c\x66\xe1\xc6\x4b\xa1\xc3\x3d\xc2\x76\xfe\x4f\xd3\xac\x5d\x73\xcd\xcb\xa5\x3f\xa6\x5e\x28\x5e\x03\x9e\x39\x2e\xf6\xce\x7f\x15\x3b\xfd\x2d\x68\x78\x7e\xc7\xc3\xc6\x80\x99\x37\x87\xed\x48\x3f\xd2\x14\xa6\x27\x9f\x1f\x37\x71\xba\x15\x19\x8c\xaa\x2c\x08\x8b\x29\xb2\xc5\x9d\xfe\x96\x75\x90\xba\xa7\xae\x98\xf0\x38\xf5\x38\x3c\x52\x2b\xbc\xd1\x8a\x6a\xbf\x30\x7c\x0a\xe9\x71\x54\x77\xdd\x8e\x32\xb4\x9b\x6d\xf3\x54\xa8\x6a\xcd\x67\x69\x73\xbe\xd6\x89\xf6\xec\x01\x36\xfb\x32\xff\x9e\x7d\x0e\xc9\x39\x93\x44\x72\xc2\x28\x41\x42\x32\xce\xad\xef\xa7\x3f\x0a\x1f\x39\x51\x6d\xcd\xa2\xd5\x17\xfd\xde\x8e\x71\xc3\x81\x7d\xf0\xea\x6a\x09\xbd\xd4\x62\xb8\xf2\xc6\x50\x87\x74\x1e\x16\xc7\xfc\xd8\xa9\x50\x2b\x4c\x12\xbf\x8b\x0c\x95\x33\xa2\x9c\x8b\xae\x54\xa9\x78\x37\xb8\x04\xc3\xbd\x90\xbc\x3a\x54\x57\xfd\x4d\x97\xe3\x24\x3d\xa6\x4f\x7f\xc6\xb3\x4f\xe4\xd7\x64\x6b\x59\xf6\x70\xf5\xe7\x77\xf0\x42\x05\x51\x6b\xa5\x8d\xcd\xef\x05\xd7\xad\x56\x5d\x26\x1a\x25\xe2\xd3\x26\x4e\x85\xaa\x7d\x98\x7b\xa6\xa2\xf0\x28\x63\x9d\x82\x03\x14\x8a\x30\x31\xad\xd7\xf3\xc9\xb0\x63\x45\x48\xbc\x56\xed\xa1\x6d\xe9\x70\xf2\xfb\xbf\x8b\x6d\x67\xed\xd5\xdf\x67\xb0\x66\xb4\xc7\x05\x26\x4d\x18\x56\x73\xfb\x5c\x82\x8d\x13\x5f\xe1\x25\xb1\x5b\xdb\x59\xea\xe7\x55\x89\x2a\xd2\xf3\xf4\x9c\x0f\x08\x54\xc4\xc7\x06\x81\x66\xa8\x47\x5d\x0b\x2a\x21\xaa\x88\x89\x3a\x3f\x61\x44\x69\x88\xad\xf4\xd6\xb6\xc5\xe5\x20\x5a\xce\x1a\xcc\xfb\xab\x3b\x2e\x8f\xa5\x02\x69\xf0\x77\xe3\xf8\x40\xa0\x05\x2a\xa1\x15\x95\x40\xfd\xd4\x54\xb8\xf5\xe1\x95\xee\xb7\xd5\x52\xbb\x5e\xe9\x3d\x3a\x7a\x6a\x64\xaf\xdb\x75\xbe\xa9\xc6\x68\x0a\x38\x8c\x8e\xc7\x08\x80\x40\x2b\x54\x42\x1b\xda\x23\x58\x5f\xb3\x77\xcf\xb3\x1c\x4c\xfb\x90\x64\x3b\x08\x8d\xb2\x06\xaf\x3f\xb8\xa6\xef\xa6\xfd\xec\x4a\x9f\x7d\x22\x66\xc5\x8f\x8e\xdb\x20\xd0\x06\x95\xf0\x16\x95\xa0\x6e\xd6\x42\xd1\xd9\x73\xec\xfb\x76\x5e\x84\xa4\x65\x63\xca\x2c\x2a\xcf\x86\xb3\x66\xfb\xea\x61\x8d\xd9\xa2\x75\x52\x7a\xa8\x09\x08\xbc\x85\x4a\x68\x47\x25\x50\x24\x65\x11\x6b\xd7\x4b\xc5\xdb\x8c\xbb\x2a\x1b\x36\xb5\x71\xd6\xb0\x96\x64\x27\x45\x85\x83\xc1\x41\x9f\x55\x0e\xc6\x2d\x44\x41\xa0\x1d\x2a\xa1\x03\x95\x60\x91\xb7\xc5\x5c\x8a\x3d\x13\x73\x7d\x05\x97\xa7\x03\xff\x6a\x82\x64\xd4\x07\x3f\x31\xc5\x63\xd6\x46\xf7\x9c\x68\x79\xb1\x39\x2c\x10\xe8\x80\x4a\xe8\x44\x25\x98\x79\xdb\x0a\x11\x99\xf5\x62\x86\x07\xf7\x1f\xcd\xe8\xf1\xa7\x96\x48\x16\x8f\x34\x7f\xda\xd0\xcc\x61\x4b\x2d\x76\x7f\xb5\x74\x1e\x04\x3a\xff\xee\xf2\x7f\xd6\x79\xe6\x77\xf1\x74\xa1\x36\xa7\xe2\x2b\xbf\x2e\xb6\x10\xfb\x16\xcb\xe5\x51\x37\x37\x91\x06\xd8\xc5\x86\xac\x65\xbf\x5c\x06\xfe\xc3\x3b\x78\x03\xc5\xee\xd9\x4e\x20\xd0\x05\xb5\xc3\xdd\xa8\x84\x06\x1e\x4b\x63\x4a\x9f\xb2\xbb\x32\x0c\x6e\x7a\x59\xad\x29\x4a\xb9\x2f\x6e\xd1\xd4\x76\x6a\xe1\x65\x2f\xf1\x38\x4f\x7c\xe7\xe7\x00\x81\x6e\xa8\x84\x77\xa8\x84\x3e\xcc\x4c\xee\xe6\xee\x58\x2d\x04\xd1\x07\x25\xef\xf0\xcc\xf2\x18\x9a\x07\xe7\xb6\x48\x9c\x2b\x46\x00\xdc\x10\x16\x26\x5e\x2a\x10\x78\x07\x95\xd0\x83\x36\xee\x3c\xa8\xf9\xd8\x6e\xff\x78\x7c\x84\xe7\xfc\xd6\x9b\x2d\x6b\x06\x43\x5c\x5f\xeb\x60\x16\x15\x7d\xed\x42\xbe\xe3\x73\x12\x72\xc2\x20\xd0\x03\x95\xd0\x8b\x36\xa9\x5a\xe4\x4a\x1d\x16\xd4\xf4\xc1\xf6\x9e\x99\x3f\xd1\x53\xe3\x9d\x49\x93\x58\x7c\xdb\x9b\x9f\x24\x8c\xd7\xb2\x67\xec\x9b\x99\x6e\x82\x40\x2f\x54\x42\x1f\xda\xe3\x7c\x5d\xa3\x7e\xef\x43\x54\x68\xd5\x57\xc4\xfa\x8d\xaa\x48\x8b\xda\x2f\x24\x12\x98\x8f\x58\x2e\x5f\xcb\x09\xa8\x66\x59\x70\xb4\x05\x81\x3e\xa8\x84\x7e\x54\xc2\xdc\x48\x0f\xa5\x56\xd9\x93\xa7\xb7\x85\xc1\x99\xbb\xe7\x89\xbd\x31\x3f\xbc\x98\xb3\x1d\x3a\x11\x9e\xec\x14\x5f\x31\x77\x70\x71\x04\x81\x7e\xa8\x84\xf7\x68\x2f\x7a\x09\x2f\xbd\x7b\xd4\xed\x67\xd7\x7d\xae\x37\x65\xd5\xd5\xbb\xb7\x79\x24\x2f\xd4\x07\xfb\x32\x5f\xf7\x66\xa5\xdd\x70\x6e\x8e\x38\x08\xbc\xff\xbb\xe2\x39\xeb\xca\xfb\xbb\x78\x06\x50\x9b\x53\x5d\xee\x78\x85\xf5\x36\x0e\x93\xfa\x33\xae\xc1\xe1\x81\xd6\xd8\x5e\xeb\x19\x5d\x6b\x2e\x42\xee\x9e\xd7\xc6\x36\x79\xa6\x4d\xe4\x20\x30\x00\xb5\xc3\x83\x68\x4f\xce\x1b\x1e\x60\x16\xb1\xa4\xde\xe0\x6f\x7c\x67\x80\xf4\x23\xa9\x4f\x92\x8d\xc8\x3f\x3a\x0a\xa9\x19\x7e\xe1\xfa\x5c\x28\x52\x44\x1d\x04\x06\xa1\x12\x3e\xa0\x12\xa4\x4f\x5a\x27\x2b\x29\xdb\x18\xdb\x2f\xe6\x22\xb6\x60\x43\x36\xd7\xa8\x7a\xcd\x89\xb1\x98\x17\x03\x13\x38\x6a\x5c\x6e\xeb\x0a\x80\xc0\x07\xa8\x84\x21\x54\x82\x72\x7d\x36\x37\x21\x5c\x41\xb8\xaf\x39\xc6\x60\x8c\x48\x63\x48\x65\x61\x63\xa7\x98\x38\x9b\xe5\xee\x5e\x5a\x50\x96\x60\x20\x31\x08\x0c\x41\x25\x0c\xa3\x12\xe4\xdf\x05\x07\x06\x7d\x62\x0b\x5a\xbd\x2e\x4f\x85\x99\x29\x25\xf8\xfd\x16\x70\xf8\xa2\x7c\x79\xe5\x4e\x54\x15\x1d\xa3\xdd\x01\x21\x08\x0c\x43\x25\x8c\xa0\xad\xdb\x74\x6b\x79\x04\x55\x6f\x30\xf2\x32\x19\x18\x97\x47\xda\x52\x84\x30\xcd\xeb\xd1\xf8\x05\xc8\xee\x8a\xf6\x98\x57\x7e\x0a\x73\x06\x81\x11\xa8\x84\x51\xb4\x11\x00\x56\x40\x6e\xcf\x0f\xfa\x27\xb3\x8a\xd8\x24\xd6\x60\xc1\x37\x2e\x9d\xef\x4f\x2d\x66\xe4\xb5\x4f\xd2\xe0\x9b\x38\x06\x13\x36\x20\x30\x0a\x95\x30\x86\x4a\x08\x37\x7b\xd7\x69\xd4\xcc\x25\x79\x93\x67\xec\x96\x3a\x41\x50\xee\xee\x86\x16\x89\xde\xe6\x8e\xe8\x48\xcd\x1c\xfc\x2d\x85\x3a\x2d\x08\x8c\xfd\x5d\xf1\x9c\x35\x16\xfd\x5d\x3c\xe3\xa8\xcd\x09\xf5\xd9\xda\x27\xf5\xec\xab\x6f\xf2\xa7\x19\xa4\x76\xc2\x8f\x90\xdd\xc2\x93\x66\xfd\x18\xbc\x40\x91\x42\xf9\xa9\xed\x78\x5e\x15\x04\xc6\xa1\x76\xf8\x23\xda\x7a\x41\xb3\x48\x3b\x82\x5e\x5f\x36\xd1\xc6\xe1\x03\xa0\xf5\x44\x6f\xc2\xfd\x12\x2b\x41\xee\x7c\x36\x93\xf2\x72\xd8\xbd\xf9\x0b\xc6\x20\xf0\x11\x2a\x61\x02\x95\xf0\x52\xf4\x06\x03\x63\xfe\xa8\xcb\xa4\x5e\x94\x54\x7c\x1c\x35\xc7\x66\x89\x2f\xbd\xe9\xed\x5b\x34\xef\xad\x64\x96\x57\xb2\x1e\x53\x83\xc0\x04\x54\xc2\x24\x2a\x41\x6e\xbd\xab\x50\x68\x50\xa9\xa1\x70\xa9\xa8\x9a\x75\xef\xe6\xd7\x76\x24\xb6\xef\x4d\xf1\xb7\xb6\x27\x9f\xca\x9e\x5f\x48\xe0\x24\x07\x81\x49\xa8\x84\x29\x54\x42\xbf\xab\x70\x0d\xe2\xe4\xd2\x17\x9d\xb7\x42\x19\x05\x93\xf6\xb2\x0e\x37\x09\x92\xf3\xbb\x6e\x2f\xf2\x4e\x8a\x5b\xff\x24\xd2\xe1\x00\x81\x29\xa8\x84\x69\xb4\x97\xa4\x72\xc1\xf8\xe8\x79\x56\x0c\x86\x39\x86\xd2\xae\xd4\x79\x0a\xb6\x4b\x47\x56\x06\x44\xaa\xaf\x4d\x5d\xa4\xc6\x63\xb1\x38\xd8\x41\x60\x1a\x2a\xe1\x13\xda\x43\xd8\xfd\xb8\x8a\xbd\xd4\xb7\x4b\xd3\x8e\x54\x78\x88\x31\x04\xd9\x49\x86\xde\x31\x7e\xc7\x7b\xb0\xaf\x1b\xcb\xdd\xc8\x6c\x0b\x73\x03\x81\x4f\x50\x09\x33\xa8\x84\x57\x0d\x69\x72\x06\x8c\xf0\xd9\x2d\xbe\x4d\xce\xa1\x8f\xd1\xbc\xef\x9b\x7e\x31\x0c\xf3\x27\x32\x97\xbc\x1a\x03\x65\xb8\x58\x45\x40\x60\xe6\xef\x8a\xe7\xac\xbb\xb3\xdf\xc5\xf3\x19\xed\x97\x96\xd6\x75\x9d\xbf\x11\x5e\xe4\x53\xc7\x80\xbf\xc9\xa7\x0c\xf3\xfb\xd6\xde\xc3\x6f\xe1\x3a\x98\x78\xa5\x3a\x47\x92\xb8\xe8\x02\x08\x7c\x86\xda\xe1\x59\x54\x82\xbd\xcb\xaf\x17\x0d\x47\x4c\x3a\x69\x54\xd2\x3f\xd4\x65\x6b\x9f\xf7\x08\xdd\x7f\x11\xc4\x30\xec\x84\x47\xcb\xb4\x92\x16\x5b\xe4\x0a\x02\xb3\x50\x09\x5f\x50\x09\xf1\x58\x6b\x06\x63\xc5\xf0\xee\x4d\x47\xd6\xe7\xcb\xdf\xe1\x89\xe3\xfd\x1b\xc9\xab\xf3\x6d\xa2\x34\xcc\x61\xef\x06\xa8\x6e\x73\x80\xc0\x17\xa8\x84\x39\x54\xc2\x71\x6d\xc1\x81\x66\xd7\x8d\xab\xef\xf7\xe5\x2a\x5f\xee\x6b\x2a\xe3\xad\x67\x17\x61\x47\xcb\xbe\x8d\xf5\x05\xac\xb3\xb4\x02\x99\x41\x60\x0e\x2a\x61\x1e\x6d\xb5\x7d\x9d\x1f\x41\xe8\x0e\x2b\xb0\x9e\x11\xb8\x94\xee\x9c\x50\xcc\x3c\x45\xbe\x96\xc5\x1f\xe6\x45\x92\xb2\x53\x0c\x00\x92\x02\x20\x30\x0f\x95\xb0\x80\x4a\x98\x1f\xc9\xc1\xdc\xab\x76\xcb\x6b\x33\x8a\xe4\x1a\x5c\x6a\xb8\x0d\xaf\xf4\x79\x60\xb0\xc1\x12\x2b\x11\xc1\x52\x6b\xf1\xd5\x56\x04\x04\x16\xa0\x12\x16\x51\x09\xb4\x77\x9f\x7f\xb7\x74\xa2\xc5\x3a\x59\xee\x93\xf4\xbd\x4c\x70\x60\xd9\x4b\x38\x6f\xcc\x52\xf9\xd0\xf1\xd2\xe6\xad\xa2\x7b\xdf\x6c\x41\x60\x11\x2a\x61\x09\x95\x60\x20\xb9\x90\x02\x63\xe7\x5a\x6d\x4b\xfb\xc9\xfa\x78\x96\xf0\x76\x81\x9a\x24\x27\x9e\x84\xfc\xf7\x1c\xe1\xc0\xc5\x09\x5a\xbb\x6b\x20\xb0\xf4\x77\xc5\x73\xd6\x7c\xc5\xef\xe2\xf9\x8a\xb6\x50\xf5\x78\x11\x19\xc4\xc5\xed\xc7\x90\xc7\xe3\x76\xde\xb6\x3b\xaf\xf0\x67\x3f\x91\xfd\x5d\xbd\xba\xf3\x07\x8e\x8b\xb2\xbd\x5c\x66\x20\xf0\x15\x6a\x87\x97\x51\x09\x6f\x93\xc9\x71\xbb\x5c\x5e\x8d\xfa\xea\x5d\x96\x1e\xd9\xc5\x6b\xd1\xc6\xc4\x32\x79\xcf\x48\x7f\xe9\x6d\x6b\xc1\xc3\xc7\x21\xef\x89\x40\x60\x19\x2a\x61\x05\x6d\x24\x5c\x59\x8e\x2d\xab\x5a\x34\x8f\x3c\xc7\x6e\x34\xaf\x26\x5a\xc1\xb9\x9f\x9d\x3a\xac\x4f\x4f\x75\x47\x88\x95\x02\x93\xa7\xc2\x02\x04\x56\xa0\x12\x56\xd1\x1e\xc2\x28\x1d\x70\x3c\x47\xfb\xda\xcf\xea\x6a\xca\x4d\x37\xae\x74\xc6\xd1\x78\xaf\xc7\xd3\x88\xf6\x36\x05\x26\x7a\x95\x2c\x2d\x13\x29\x10\x58\x85\x4a\x58\x43\x25\x64\x8f\x98\x96\xdd\xd5\x6e\x33\x79\xbd\x31\x7b\xdb\x75\x3f\x2e\x41\x68\x98\xa7\x6f\xff\x60\x85\x68\xd8\x26\x71\x4f\x30\x4c\x8e\x12\x04\xd6\xa0\x12\xd6\x51\x09\x4f\x0b\xe4\x1a\xa5\x70\xc7\x4e\x14\xbc\x9e\x50\xc4\x50\x16\x0a\x68\xbb\x13\xd4\x7c\x23\x30\xda\xee\x25\xb7\xda\xae\x89\x79\xcf\x0e\x02\xeb\x50\x09\xdf\x50\x09\xdc\x27\xf9\xfe\x47\x8e\x1f\xfb\x98\xb0\x7d\xd7\xd9\x65\xbc\x6a\xc4\x55\x9f\x28\xeb\x7d\x9f\xc3\xfc\xce\x93\xf3\x94\xcb\x97\x89\x05\x04\xbe\x41\x25\x6c\xa0\x8d\x62\x48\x46\x97\x34\x0b\x2d\xb0\x30\x43\xb2\x3f\xd5\xc7\x7e\xbb\xd4\xb7\x94\xf6\x54\xeb\x60\xdd\x97\xa8\x9f\x6c\xc8\x31\x4e\x98\x01\x04\x36\xfe\xae\x78\xce\x9a\xc1\xfb\x5d\x3c\x9b\x68\x37\xaa\x29\xed\x97\xe7\xab\xf2\x2f\xd6\xf2\x7a\x03\xbf\x7e\x94\xf3\x05\xe1\xcd\x75\x1f\xc0\xeb\x0c\x35\x30\x05\x5f\x2d\x68\x6f\x98\x82\xc0\x26\xd4\x0e\x7f\x47\x25\x98\xf6\x11\x8e\x7c\xed\xca\x0c\x55\xd5\xa7\x36\x5e\x86\x2d\xcb\x4d\x53\xd6\x71\xfd\x32\x6d\xe8\xe7\x9d\x0f\xa9\xcc\x2a\x26\xb2\x05\x81\xef\x50\x09\x5b\xa8\x84\xd1\x49\xe5\xbb\xba\xc5\x19\x61\x4a\x75\x14\xf8\x3c\xc1\x13\xb9\xc4\x9b\x93\xfc\xaf\x3e\xdf\xef\xde\xae\x5b\x55\xfd\xee\x24\xc8\x05\x02\x5b\x50\x09\xdb\xa8\x84\x95\x1b\x64\xc5\xb2\xcd\xe1\x76\x77\x2f\xaa\x0c\x3a\xd6\x5d\x8f\x19\xd4\x3b\xf1\xa6\xf0\xd8\xdc\xde\xa9\xa6\xd1\x6f\xfa\x18\x84\x00\x81\x6d\xa8\x84\x1d\x54\x02\x9b\x80\x10\x65\xe7\xbd\x85\x19\x70\x81\x50\x43\xf3\x92\x8f\xed\x2f\x0d\xc2\xe1\x10\x21\x62\xd6\x6a\x62\x59\xbe\xaf\x19\x1d\x7a\x20\xb0\x03\x95\xb0\x8b\x36\xa8\x5a\x44\x3e\x29\x94\x74\x1f\x6c\xf6\xb0\x35\x2e\x7c\x9d\x47\x5b\x9f\xee\x07\xdc\xcd\x28\x33\x9c\x56\xd5\x6b\x89\xfa\x4c\x4f\x0d\x02\xbb\x50\x09\x7b\x68\xd3\x2a\x9f\xd4\x36\x3f\x3e\x1f\xd9\xa0\x3c\x91\x19\x65\x13\x64\xe2\x8f\xa6\x27\xb3\xe9\xfa\x90\xd5\x79\x54\xe1\xf0\xe1\x42\xb8\x0a\x07\x08\xec\x41\x25\xec\xa3\xad\x6e\x99\x87\x69\xf0\x20\xe9\xd3\x66\xa3\x05\x0f\xca\xb9\xb4\xe1\x94\x09\x16\xd9\xdc\x8b\xbc\xea\x44\xbb\xad\x4a\x1f\xf7\x1c\xf1\x41\x60\xff\xef\x8a\xe7\xac\x39\xed\xdf\xc5\x73\x80\xda\x1c\x09\x17\x81\xbe\xcb\x78\xba\x57\x3f\x48\x05\xb0\x07\x7e\x7e\x56\xd7\xae\x6b\x6c\x5a\x1c\xcf\x1f\xe0\x48\xa3\xf5\x9e\xac\xc4\xd5\x12\x04\x0e\xa0\x76\xf8\x10\x95\xa0\x79\x45\xc9\xd9\xe5\xde\x1e\x5c\xaa\x5e\x11\x21\x64\x9c\x12\x73\xfe\xdd\xd5\x2a\x7f\x8f\xf8\xf7\x38\xab\x0d\x4c\x7a\xbf\x3a\xae\x83\xc0\x21\x54\xc2\x0f\xb4\x55\xde\x46\x3e\x67\xa7\x27\x24\xcd\x69\xdf\xcb\x22\x37\xe2\x12\xc4\xad\x99\xce\x27\xe2\xda\x87\x57\xfb\x68\x69\xa4\x59\x30\x28\x5c\x05\x81\x1f\x50\x09\x47\xa8\x84\x64\x79\x61\xbb\xb5\x35\x81\xf7\x6c\xe2\x07\xd7\x3d\x6e\x88\x75\x8d\x31\x10\x07\xde\xe4\xc5\xa5\x5f\xc6\xe8\xc3\x51\x71\x0d\x26\x07\x81\x23\xa8\x84\x63\xb4\xeb\x73\xdd\x50\xd0\x41\xaa\xe5\xdd\x64\x32\xca\x3b\x3f\x32\xf5\xf7\x24\xb1\xee\xbe\x3f\x56\x52\x3c\xba\xb3\xaa\xe1\x56\x42\x6b\x05\x03\x81\x63\xa8\x84\x9f\x68\x77\xb7\xb6\x65\xc2\xf9\x5f\x9a\x29\x0d\xc4\x54\xc2\x24\x5f\x9d\xfb\x59\xcb\x68\xa6\x19\xa2\x7c\xdd\xcf\x28\x7d\xfa\x0e\x23\x96\xbe\x0c\x08\xfc\x84\x4a\xf8\x85\x4a\x78\x84\xb0\x78\xbe\x7e\x67\xcc\x45\x2f\x0a\xfb\xc2\xe7\xe0\xb4\x10\xec\x9d\xc8\x85\x5b\x8c\xb2\x2f\xc3\xe0\xfa\x37\x3e\xe8\xbe\xb2\x05\x81\x5f\x50\x09\x27\xa8\x04\x2e\x4d\xcd\x35\x0d\x8e\x0b\xc9\xd8\x6c\xac\x91\x0f\x1e\x50\xbf\x75\x2f\x36\x11\x8a\xa4\x6d\xc9\x09\xda\x64\x25\x0d\xa2\x6e\xb5\x04\x81\x93\xbf\x5b\x6c\x3b\xcb\x16\x87\xb6\xd8\x76\x57\x75\xa6\x8f\xb3\x25\xeb\xe3\xb3\xfd\x32\x97\xa2\xc2\xc9\x4b\x08\x7d\x7e\xcb\xea\x28\x21\xe3\x1c\xb1\x4d\x57\x41\x7b\xe0\xb4\x5c\x4e\xe4\xdd\xf5\x39\x0f\x62\x0d\xb6\x4f\x0e\x76\x2f\xda\xbe\xf6\xd6\xe7\xaf\xfa\x55\x1b\xe0\x7e\xa3\xb2\x40\xac\x30\xc6\x09\x57\x75\x9c\x0a\x2d\x5a\x8d\x44\x8a\x68\xdd\xf6\x89\x51\xa5\x19\x6e\xf7\x73\x4a\xfc\xf0\xa1\xf8\xae\xe5\x49\xa3\x70\x6b\x84\xee\x6d\x6e\xf2\x7b\x17\x4f\x85\x46\x54\x67\xa6\xe9\x49\xdb\x93\xa5\xe7\xc6\x0c\x4d\x56\xbe\xde\x18\xb8\x77\xe3\xa2\xdc\x49\x81\xad\xaf\x43\x7c\x1c\xe1\x0a\xf7\xe9\x06\x44\xe4\xcd\x97\xbf\x7a\x55\x5a\xa8\x56\xa3\xf5\x59\x82\xae\x13\x50\x7c\xab\x38\xf0\x63\xec\x9b\x37\x6e\x6a\xdc\x7d\x11\xee\x3a\x95\xd3\x0b\x83\xf6\x8f\x5a\x90\x36\xe7\x9f\x0c\x63\xdd\x4e\xb8\x22\xed\x12\xa0\xc5\xcb\x30\x7f\xf2\x6e\x8e\xd9\xae\xd4\xa0\x50\xa2\xe6\xe1\x69\x71\xa6\x2a\x69\xe3\xf7\x46\x65\x04\x7d\x90\x8e\x31\x35\x57\xf1\xe4\xc4\xf8\x15\xf0\x7d\xcc\xd5\x68\xe9\xc6\x55\x9f\x58\xc1\x3e\xbc\xfd\x53\xa1\xc3\x0f\x86\x8c\x1f\x04\xb1\xe7\x5d\x93\xa2\x94\xb7\xb6\x0f\xce\x7a\xd7\x8a\x10\xb9\xa8\x2f\x3c\x4b\xf1\x24\xe3\x41\xf7\x9e\xdb\xb8\x7f\x0f\xce\x7f\xdb\xab\xff\x9e\xc1\x90\x30\x34\x0b\x5b\x49\xe2\x7c\x96\xb0\x2a\x96\xe3\x80\x53\xd1\x82\xc2\xe4\x3e\xac\x23\xe1\x83\x0b\xef\x44\x82\xff\x11\x6f\x38\x1b\x13\x93\x0b\x33\x88\x84\x41\xf5\xb0\x21\x61\x68\x26\xb6\xde\x52\xff\xfd\x2f\x87\xf4\x75\xce\x1d\x5d\x37\xf1\x85\xca\xfa\x3e\x78\xa7\x48\xbb\x52\x20\xef\x48\x4a\x7c\x37\xcf\x61\xf9\x69\x02\x22\x61\x50\x5d\x6c\x48\x18\x9a\x8d\xed\xab\x97\x68\x30\xad\x97\xef\xa8\x64\x89\xc2\x04\x7f\x49\xa3\x42\xbc\x8e\x82\x0c\x1e\x97\xdd\x39\xaa\x39\x73\xd2\x8e\x91\x2c\x06\x10\x09\x83\xea\x63\x43\xc2\xd0\x8d\x6c\xcb\xc9\x4e\xca\x3c\x57\xf5\x2f\x10\xe3\xde\xde\x7e\x12\xb4\x6b\xc6\x2a\xda\xad\x19\x58\x4c\x53\xcc\xc6\xcc\x17\x3c\x82\xcd\x0e\x22\x61\x50\x9d\x6c\x48\x18\x9a\x95\x0d\x09\xf3\x5b\xa0\x37\xdc\x9b\xea\xea\x0e\x43\x2e\x57\xdd\xe3\xd4\xaf\x93\xe6\xcc\xd3\x1c\xe9\xe1\x60\xce\xdb\x6e\xfe\x89\x8f\x05\x22\x61\x50\xbd\x6c\x48\x18\x9a\x99\x0d\xf3\xfd\xb4\xb2\xd2\x08\x7e\x74\x38\x85\x5a\xfd\xc4\x01\x95\x50\x93\xf5\xcf\xd6\x27\xde\x01\x11\xde\x89\xc8\x1f\x89\x11\xc9\xca\x20\x12\x06\xd5\xcd\x86\x84\xa1\xd9\xd9\xa8\xa5\xc2\x04\x36\x7a\xb2\x9e\xbe\xd9\xc7\x45\x3a\x9e\x0f\x2c\x26\x62\xef\x0f\xac\x2b\xa0\x7d\xa4\x68\xc0\x45\x6d\x66\xa2\xaf\x03\x22\x61\x50\xfd\x6c\x48\x18\x9a\xa1\x2d\xed\xad\xa3\x65\xfe\xbc\xdf\xcf\x04\x83\xca\x9f\xb2\x5c\x93\x51\x26\x99\x9c\x5c\xcf\x9a\x5a\x73\xf4\x64\x65\x6a\x19\x18\xcd\x2e\x83\x48\x18\x44\x47\xdb\x9f\x62\x3a\xeb\xbc\xf3\xa7\x98\xd0\x2c\x6d\x4d\x2c\x2a\xbc\x64\xed\x0f\x63\xe3\xdc\x54\x6f\x02\x14\x9d\xd6\x77\x4d\xbe\xbe\xb9\xac\xc5\x6a\x4d\x32\x13\x1c\xcc\x3a\x47\x43\x02\x22\x61\x50\x3d\x6d\x48\x18\x9a\xa9\x8d\xb3\x46\x8d\x48\xf6\x63\xe2\xb1\xf1\x62\xc8\x93\x44\x5f\xae\x0f\x6a\xb0\x6b\x7b\x8f\xab\x49\x02\x4d\xc9\x57\xfd\x4a\x5f\x7e\xc6\x00\x91\x30\xa8\xae\x36\x24\x0c\xcd\xd6\x36\x1c\x2a\xf7\x6a\x82\xf4\x5c\xfa\x4b\xb5\x8c\x25\x67\xca\x87\x38\x62\x5b\xd4\x57\xe2\xcb\x16\xee\xeb\x30\x99\xcf\x04\x67\x56\xda\x82\x48\x18\x54\x5f\x1b\x12\x86\x66\x6c\xf3\xcb\x54\x41\x8a\x0d\x36\xd4\xf2\xec\xec\xaa\xb3\xf1\x5e\x1c\xa6\x27\x10\xd9\x62\xc1\xe7\x5c\x5f\x48\xfd\x38\xca\x2f\xc3\xaf\x0f\x22\x61\x50\x9d\x6d\x48\x18\x9a\xb5\x4d\x3a\x92\xc3\x6f\x2f\xe3\x56\x2a\x56\x50\xbd\x05\x4c\xf7\x1a\x69\xa4\xf9\xcb\xe5\x18\x13\xdb\xc4\xe6\x1c\x62\x77\x6a\x8d\x47\xea\x20\x12\x06\xd5\xdb\x86\x84\xa1\x99\xdb\x7c\x4b\x2a\x0d\xe0\xfb\x09\x38\xd5\x3e\x4f\xa5\x7e\x0a\x4f\x95\x20\xbc\x92\x98\x70\x99\x3f\x59\x6a\x63\xde\xe2\x6d\x1e\xaa\xd5\x03\x91\x30\xa8\xee\x36\x24\x0c\xcd\xde\xe6\xe5\xa5\x44\xdd\x7d\x24\xad\xc5\x47\x40\x28\xac\x66\xf2\x83\xcc\xe4\x86\xf5\x8d\xd6\x78\x71\x25\xe3\xf4\x7d\x66\x89\x9a\x4f\xd6\x20\x12\x06\xd5\xdf\x86\x84\xa1\x19\xdc\xe4\x46\x42\x49\xcb\x33\x4a\x92\x88\x3f\x8f\x81\xfe\x55\x3d\xf1\xa4\x34\xda\x16\x12\xce\x99\x05\x21\x17\xd8\x47\xd2\x2a\x5e\x1b\x80\x48\x18\x44\x87\xdb\x9f\x62\x3a\xeb\xca\xfc\xa7\x98\xd0\x2c\x6e\x93\xcf\xf7\x68\xaf\x93\xc8\x5c\x25\x30\x88\x7b\xf1\x03\x60\x5b\x7e\x76\x64\x81\x9d\xa2\x50\x7c\x7e\x86\xc4\xc8\xed\x47\x30\x99\x1d\x88\x84\x41\xf5\xb8\x21\x61\x68\x26\xb7\x50\x95\x95\xef\x5a\xeb\x8b\x2e\xa2\x66\x32\x34\xa9\x2e\xab\x2b\x02\x35\xcf\xc5\x43\xfd\x67\x25\x18\xf4\xba\x98\x9a\x1a\xb5\x58\x41\x24\x0c\xaa\xcb\x0d\x09\x43\xb3\xb9\x5d\xc0\xbf\x75\x45\x0e\x29\xb6\x20\x60\x2f\x1a\xff\xc3\xd2\xa9\xba\xd6\x44\x83\x7d\xc4\xb4\x82\x7c\x8a\x5f\x8b\x87\x7e\xea\x0b\x26\x88\x84\x41\xf5\xb9\x21\x61\x68\x46\xb7\x3b\xba\x5b\x57\xc9\x3e\xae\x38\x1b\xef\xf7\x2b\xef\x67\xdf\xd6\x52\x49\x9f\x10\xd3\xaf\x0c\xbd\xcc\xe0\x35\xad\x93\x91\x5e\xc1\x0f\x22\x61\x50\x9d\x6e\x48\x18\x9a\xd5\xcd\x76\x33\xbc\x8b\x8e\x5a\x48\x95\xf9\x95\x46\x22\x01\x65\x63\x96\xb0\x7d\xab\x59\x00\xbf\xc9\xf9\x32\x7a\xee\x83\xeb\xe9\x46\xff\x5c\xc5\xa1\x7a\xdd\x90\x30\x34\xb3\x9b\xa1\xa6\xa8\xed\x9e\x44\x3f\x6c\xfd\xf6\x9a\x06\x1b\xa9\xf5\x2d\x02\xe2\x09\x70\x2c\x32\x5f\x76\x40\xea\x13\xa7\xa7\xf0\x63\x7c\x10\x09\x83\xea\x76\x43\xc2\xd0\xec\x6e\x8e\xaa\x1d\xb6\x9e\x95\x70\xc1\xe8\x65\x91\x4b\x0f\x88\xba\xcb\x1e\x37\x71\x34\x9c\xa7\xa4\x7b\xf9\xf4\x17\xe5\x16\xdb\xc7\x2a\x24\x88\x84\x41\xf5\xbb\x21\x61\x68\x86\x37\x3c\xae\x74\x23\x23\x04\x6f\x86\x50\xbb\x6f\x50\x68\xfd\xaf\x82\x5e\xdd\x5b\xcb\xaf\xb0\xda\x9d\xdb\xf3\x4a\x9f\x49\xe0\x5a\x09\x81\x48\x18\x44\xc7\xdb\x9f\x62\x3a\x6b\xec\xfa\xa7\x98\xd0\x24\x6f\xb7\x1f\x4c\xfc\x52\x79\xbc\x5c\x7c\xc1\xf2\xb6\x3b\xf6\xec\x22\x2b\x87\x89\x21\x57\x7c\xcf\x85\xa6\x9e\x21\x92\x60\xda\x5b\x6f\xa9\x40\x24\x0c\xaa\xe5\x0d\x09\x43\xd3\xbc\x5d\x54\xc2\x55\xbf\xc3\x90\xf8\xff\xe1\xec\xce\xa3\xb1\xea\xde\xb8\x81\xb7\x8f\x59\x44\x32\xb4\xcd\x0a\x99\xc9\x4c\x86\x8c\x45\xa8\x0c\x19\x42\x86\xcc\x43\x86\x10\x0a\x87\x32\x46\xc9\x90\x12\x92\x22\x91\x88\x08\xa1\x10\xc9\x94\x29\x43\x09\x99\x32\x26\x63\x12\xde\x75\xbf\xef\xeb\xb7\x5a\xe7\x1f\xeb\x3c\xff\x5f\xeb\xf1\x38\xf7\xf9\x5e\xfb\xda\x7b\x77\xfb\xb0\xc9\xaa\x00\xf3\xfb\x66\xc7\x99\xad\x9e\x9b\x5e\xcd\xa3\x7f\x4a\xcf\x67\x59\x7f\xf6\x56\xc3\x61\x4f\x14\x02\xbc\xce\x1b\x04\x18\xe8\x4d\xc0\xc2\x72\x43\x47\x63\xc6\xe4\xda\xd5\x0e\xa5\xb3\x95\xfb\x66\xfc\x18\xa7\x3a\x96\xc7\x03\x13\x55\x9b\xcf\xfe\xe8\xb0\x23\x55\x41\x21\xc0\x2b\xbd\x41\x80\xa1\xde\x0e\x88\x16\x6b\x85\x95\xf6\x8a\x7f\x3a\x47\x37\x6d\x5f\xe0\xf6\x79\x4c\x6e\x6d\x63\xfa\xc8\x83\x6f\x64\x41\x0d\x72\xa3\x1a\x2e\xb6\x28\x04\x78\xad\x37\x08\x30\xd8\x5b\xb5\x6d\x10\x7f\x4f\x0f\xaa\x6b\x36\x24\xa9\x14\xf0\x52\x58\x39\x54\xe2\x4e\xc2\xbe\xf6\xa4\x94\x7a\x5a\xbb\x55\xbd\x1a\x47\x51\x14\x02\xbc\xda\x1b\x04\x18\xee\x6d\x4b\x6d\x3f\x75\xc4\x0a\xfb\xf7\xad\xd2\xaf\x24\xc7\xb4\xb5\x3b\xce\xbc\x33\x4e\xf1\xae\xba\x4b\xff\xbb\x44\x67\x31\x24\xb5\x87\xb0\x6a\xe0\xf5\xde\x20\xc0\x80\x6f\x65\x0e\x41\xb6\x7e\x66\x0f\x6f\xab\x2a\x7e\x6d\x4b\xbc\x2a\x9b\x49\x4d\xe2\x0c\x43\x9e\xd0\x90\xab\x9e\x0c\xe6\x14\xd4\x32\x96\x40\x21\xc0\x2b\xbe\x41\x80\x21\xdf\x36\xcf\x2e\x0a\x1d\x11\x6c\x5c\xe2\x68\x9e\xb2\x0d\x63\xb3\x2a\xa3\xe0\x72\xb5\x43\x75\xb2\xaf\x54\xba\x3c\xb7\x62\x17\x5c\x12\x47\x21\xc0\x69\xbe\xfd\x2f\x4c\xbb\xec\xee\x76\xc2\x84\x41\xdf\x0c\xe9\x59\x13\xee\xff\x96\x37\xe1\x11\xac\x25\xde\x24\xd3\x6d\x1f\xff\x2b\xc6\xde\x58\xf2\xca\xae\xec\x6a\xd8\xb1\x6a\xe3\x3a\x0a\x14\x02\xbc\xea\x1b\x04\x18\xf6\xed\xfc\xea\xbe\x62\x66\x50\x1c\x62\xee\x71\xfd\x70\xdf\xef\xda\x83\x47\x99\x1b\x9d\x17\x4d\x45\xac\x8a\xcc\x46\xac\x69\x79\x0e\x10\x46\x49\xbc\xee\x1b\x04\x18\xf8\x8d\x48\x4d\x61\xdc\x81\x0a\xde\xe5\x98\x72\x0f\xdc\xf7\x28\xbe\x6f\x2a\x5b\xcf\x25\x73\x99\x95\x7b\xe6\xfc\xaf\x3c\xbf\x1b\xba\x27\x50\x08\xf0\xca\x6f\x10\x60\xe8\xb7\x92\xd7\x91\xca\x9c\xcd\x0f\x7f\xd4\xf0\x8b\x92\x3f\x18\x39\x1f\xce\x68\xc8\xf8\x59\x3d\x42\x23\xe8\xa7\x45\xd3\xfd\x2c\x64\x50\x1d\x85\x00\xaf\xfd\x06\x01\x06\x7f\x6b\xe3\xa0\x4d\xa5\x57\x4c\x3c\xd8\x76\xc1\xcf\x51\xcb\x90\x6f\x42\x5b\xe0\x8f\xd7\x92\x88\x7c\x0e\xb1\x89\xdc\x52\x02\x49\x1f\x1d\x0a\x01\x5e\xfd\x0d\x02\x0c\xff\xc6\x96\xdb\x94\x7d\x75\xab\x6c\xfe\xf7\xbb\x79\xe7\xc7\x42\xb6\x55\x39\xe3\x81\x7f\x4e\x87\x28\xd7\x87\x89\x6d\x4f\xb8\x5a\x1f\x34\x45\x21\xc0\xeb\xbf\x41\x80\x01\xe0\x9a\x88\x33\x36\x3d\x24\x95\x94\xfb\x4f\x0f\x4f\x39\xbe\x5c\xd6\xec\xbc\x76\x91\x6d\x3e\xff\x40\x77\x94\x75\x54\x5f\x5e\x83\x13\x09\x0a\x01\x5e\x01\x0e\x02\x0c\x01\x27\x71\xd7\x53\xbe\xd9\xc6\xd2\xc2\x26\x2b\xf3\x0b\xf1\xb4\xa2\xc8\xb1\x1e\x9a\x25\x35\xe9\xc1\xab\x9f\x3e\x66\xd5\x50\x08\x04\x28\xa1\x10\xe0\x34\xe0\x76\xc2\xb4\xdb\xf9\xc7\x4e\x98\x30\x08\xdc\xdb\x95\xfa\xdb\x0f\xe9\x19\x99\xb7\x53\xdb\xa7\x56\x1e\x55\x67\xbe\xcd\x09\xc9\x51\x29\x7a\xf4\xd0\x85\xd1\xea\x31\x77\x0e\xa7\x2a\x0a\x01\x5e\x05\x0e\x02\x0c\x03\x17\xce\x79\xa9\xea\x56\x6c\x90\x51\x05\xd5\x9a\x91\x68\x0e\x78\x14\x9b\xd9\x6d\xa5\xa0\xbd\x1c\x69\x2d\xf3\xe0\x9e\x11\x2b\x91\x36\x0a\x01\x5e\x07\x0e\x02\x0c\x04\xe7\x6d\xf6\x7d\xbd\xfe\xb6\x61\x93\x05\xd9\x84\x42\x4a\x75\x01\xf3\x1f\xf5\x9e\xb2\x12\xa2\xc9\xd8\x37\xd2\x99\xba\x99\x86\x46\x6e\x28\x04\x78\x25\x38\x08\x30\x14\xdc\x0c\x8d\x92\x62\x6e\x36\xf5\xe4\x48\xcd\x5a\x6c\xd3\xa3\x03\xcb\xe7\xde\xbe\xe3\x8e\x49\x5e\x3d\x43\x7e\xcf\x67\x6f\xe7\x65\x13\x2f\x14\x02\xbc\x16\x1c\x04\x18\x0c\xce\xaa\x78\x40\x62\xe5\x91\x52\xc9\xbb\x36\xf6\x64\x76\xd2\x79\xf6\x55\x1b\x09\xff\x1c\x54\x9b\x7a\x2e\xe4\x70\x23\x7b\xe9\x1e\xc2\x48\x8c\x57\x83\x83\x00\xc3\xc1\x09\x0a\xaf\xb6\x9f\x4d\x39\x5c\x5f\xf6\x84\x29\x95\xe7\xe9\x43\x2e\x3b\x72\x86\x46\xf2\xac\x3b\x8a\x09\xa7\x03\x6c\x0d\xeb\xaa\xc9\x50\x08\xf0\x7a\x70\x10\x60\x40\xb8\xf3\x8f\xc7\x72\xf8\x1f\x9c\xf6\x90\xdc\xf2\x5c\x6c\xde\x30\x97\x09\x92\x3f\x2b\xfb\xee\x10\x67\x87\x16\x53\xfa\x1b\xc7\xf3\x03\x47\x51\x08\xf0\x8a\x70\x10\x60\x48\xb8\x44\x2b\xbe\x00\xc6\xbb\xd7\x85\xd6\xcc\xf7\xdf\xaa\xa6\x5a\x69\x8b\x65\x57\x09\xbb\xea\x28\xfe\xa2\x73\xf8\xe0\x07\x95\x68\x76\x6e\x14\x02\x9c\x26\xdc\x4e\x98\x76\x3b\x21\xdc\x09\x13\x06\x85\x63\x7b\x36\xd2\x38\xf4\x52\x54\xf5\x7b\xa7\x7f\xf2\xb3\xbb\x77\x10\xa6\x5e\x77\x1b\xa5\x16\x89\x76\xd5\xd8\x7c\xdf\x1f\xbd\xf4\x2c\x28\x04\x78\x55\x38\x08\x30\x2c\x9c\x0c\x52\x7a\x55\xa6\xee\xfd\x3d\xf4\x69\xcc\xa1\xeb\x31\xdd\x96\xf9\x21\x37\x48\x74\xaa\x92\xee\xd0\x59\x9e\xd6\xd7\xbd\x40\xc5\x8c\x42\x80\xd7\x85\x83\x00\x03\xc3\x31\xfb\x08\x6a\xfb\xca\xf5\x47\x89\x28\x92\x3f\xf3\xbc\xe9\xf6\xc5\x95\xfd\xf7\xa4\x6a\xc7\x97\xbc\x5b\x52\xb7\x3c\xf9\x49\x5f\x13\x1e\x2c\x5e\x19\x0e\x02\x0c\x0d\xb7\xbe\x7c\xf1\x42\x4b\x22\xbd\x10\xa5\x75\x2b\x51\x8e\xa8\xc0\xa5\xd7\xa1\x33\x72\x7d\x53\x81\x1d\xab\xb2\xc1\x4f\xb9\x48\x46\xac\x50\x08\xf0\xda\x70\x10\x60\x70\xb8\xa6\x2d\x79\xaf\xd4\x13\xd3\x3f\x38\xbf\x45\xe7\x97\xf6\xb7\xc6\x53\x03\x31\x44\x80\x46\xf5\xa2\xc5\xb9\x06\x66\x35\xdf\x26\x39\x14\x02\xbc\x3a\x1c\x04\x18\x1e\xce\x8b\xb9\xe9\xf8\x07\xd2\x51\x91\xe6\xed\x3c\x52\x58\x68\xe5\x3e\x5d\xa5\x61\x78\x6e\xbf\x21\xe7\x62\x90\xb5\xb9\x4d\x05\x11\x0d\x0a\x01\x5e\x1f\x0e\x02\x0c\x10\xf7\x62\x2c\x86\xcc\xeb\xf7\x9d\x3f\x2d\x7e\x05\x11\x89\xd9\xc7\xaf\x5a\xcc\xfe\x6e\x7c\x59\xc3\x22\xd1\xbe\x42\xe5\x46\xf3\xb3\x7f\x0f\x0a\x01\x5e\x21\x0e\x02\x0c\x11\x17\x04\x4f\xfa\xc8\xa0\x89\x6a\xac\x49\x0c\x37\x56\xe4\x27\x0b\x3d\xc8\x0f\x37\x27\x86\x8f\x16\x93\xfd\x6a\xbc\x19\x1b\xff\x8c\x30\xae\xe2\x34\xe2\x76\xc2\xb4\xdb\x19\xfa\x4e\x98\x30\x48\xdc\x50\x18\x6d\xbd\x90\xdb\x17\xb5\x9b\xa7\x68\x6e\xbd\xa4\xdd\x57\xd9\xd0\xa8\xda\xc8\xe3\xfe\x34\xef\xcf\x16\x7d\xaf\x4f\x7f\x12\x23\x0a\x01\x5e\x25\x0e\x02\x0c\x13\x37\xbd\x77\x48\x9c\x3a\x88\x47\xb9\x27\x2c\xaf\x72\xf0\xe7\xbe\x45\xf4\x32\xd3\xdd\xe7\x92\x15\xdc\xd3\xeb\xa3\xe7\x7a\x93\x27\x59\x51\x08\xf0\x3a\x71\x10\x60\xa0\xb8\xb1\x0c\xf2\xe5\xb8\xa4\xdb\xe8\xe1\x83\x24\x77\x63\x4f\x1b\xfc\x49\xf7\xbc\xae\x9f\xb2\xc0\x12\x4b\xb2\x3e\xfc\x65\x89\xcc\x92\x30\x56\xe0\x95\xe2\x20\xc0\x50\x71\xb7\x54\x7f\x57\x91\xf3\xc6\x4c\x45\x46\x32\x92\x58\xf0\x09\x46\x09\xc8\xa7\x6c\x51\x7e\x94\x7e\xf3\xab\x7d\x73\xc3\xcb\xa1\xc3\x12\x85\x00\xaf\x15\x07\x01\x06\x8b\x2b\x10\xb1\x1c\xde\xe7\xeb\x1d\x63\x10\x32\x36\x57\x4a\xb2\x1e\x9d\xf3\x66\x62\x32\x9f\x54\xf6\xcd\xf1\xea\xb5\x52\x29\xd3\x3f\x92\x28\x04\x78\xb5\x38\x08\x30\x5c\x1c\x4f\xa5\xf3\xdf\x07\xa7\x24\x0c\xdf\x55\x18\x66\x93\xaa\xbf\xd7\xba\x24\xdf\x39\x5a\x22\xdc\x6b\xe5\x77\xcd\xe6\xc0\x0c\x3b\xab\x37\x0a\x01\x5e\x2f\x0e\x02\x0c\x18\xf7\xac\x8e\x54\x3e\x69\x35\x48\xbf\xca\xf8\x92\x9e\x5f\xda\x91\x8b\x55\x37\xd9\x4e\xbc\xaf\x0c\x40\x8b\xdd\xa3\x8f\x83\xac\x8b\x66\x28\x04\x78\xc5\x38\x08\x30\x64\x1c\xbb\xb3\x54\xf2\x55\xe2\x52\x46\x16\x6d\x85\x63\xa1\xfd\x6a\xaf\x5f\x14\x0c\xbb\x39\x51\x48\x9e\x93\xd0\x3c\x51\x5e\xe7\xd1\x64\x80\x42\xf0\x1f\xcd\xb8\xb8\x30\xf7\x82\x9a\xf0\x18\x66\x4e\xbd\x1c\x3e\xb3\xf9\xf0\xf0\xb0\x27\xd4\x87\x2a\xf2\x8f\x32\x8c\xbb\xbc\xbd\x3e\xef\x21\x2d\x8f\xb9\xec\x5b\x6a\xf0\x59\x65\x99\x16\xbe\x1f\xb9\x99\x37\xea\x7c\x59\x98\x3e\xdc\x57\xa3\xe8\x22\x4f\xef\xfb\x18\xe7\x5f\xb9\x9b\xd0\xea\xc1\x3f\xa5\xbf\x64\x9b\x06\x1e\x7b\xa7\x2e\x07\x6f\xf9\x3c\x5c\x30\x7f\xdf\x47\x5e\x34\xf2\x40\x39\x3a\xa0\x81\xa5\x31\x81\x2f\x9a\xe7\x6f\xf2\x3f\xa5\x35\x0f\x2f\x95\x6e\x5f\xbf\x7e\x6c\xe5\xc2\xb9\x8f\x96\x7e\xca\x07\x05\x15\x90\x00\xc7\x56\xde\xeb\xe2\x1f\xb9\x8b\xdf\x68\xa5\xda\xfe\x53\x3a\x74\x31\x9c\x48\xfc\xd7\xac\xaa\xce\xc7\x58\x91\xa7\x15\x6e\x2f\x9e\x4c\xdf\x0b\x9c\xb1\xa0\x5f\x5f\x56\x1f\xbf\xb2\xaf\x01\x39\xfa\x4f\xa9\x79\x8f\xc3\xdd\xf6\x8a\x83\x44\xc7\x65\xf9\x2d\x48\x8a\x7f\xfc\x8a\x57\x3b\xf9\x52\xa3\x77\xbb\xfc\x46\x07\xe5\xc0\xaa\xef\x6c\xf4\x3f\xa5\xd3\xbc\x0d\x33\x7c\xd4\x56\x2e\xf2\x1c\x91\xdf\x69\xaa\x79\x7a\x0f\x9f\x5e\x7c\xb0\x75\xe3\x91\xbf\x55\x86\x5e\xab\xc4\xb5\x2c\xf1\x7f\x4a\x25\x9f\x53\xaa\x91\xf5\xbf\xb8\x3b\xc9\xfd\x5b\x4d\x8a\x8b\x6f\xc3\xec\xe3\x8a\xfd\xfb\x66\x8e\x3b\x12\x3f\x84\xaf\xd5\x77\x46\xfc\x7b\xdb\x68\xf4\x47\x23\xf8\x3a\x5d\x72\xb4\x82\xbe\x17\x67\x58\x3d\xa9\x2a\xed\x4a\xdb\x18\x59\x67\x90\x7a\xd9\x00\x1b\xdf\xe6\x01\x1a\x9f\xff\x5d\xf6\xed\xf6\x54\x77\x3a\x1a\x06\x8d\x4b\xf9\x1e\x3e\xce\xf4\x2c\xec\xa3\x23\x5d\xc7\xc5\x58\x3a\x87\xc0\xb4\xa3\x31\x37\xa7\x3e\x15\x67\x05\x5d\x62\xb9\x40\x7e\xb0\x4b\x07\x85\x00\xaf\x1a\x07\x01\x86\x8d\x0b\x36\x53\xff\xd3\xa8\x26\xb5\xc1\x71\x30\x22\x54\xdb\xb8\xeb\xe9\xc6\x95\x1f\x7d\x02\x36\x44\x37\xca\xbc\xb5\xc6\x84\x48\x52\x35\x51\x08\xf0\xba\x71\x10\x60\xe0\xb8\x9a\xc5\x5e\xe2\x10\xe7\x96\x57\xde\x99\x86\x7e\x9d\x3f\xc1\x57\x44\x08\x81\xb5\xa4\x21\x8b\x9a\x4d\xef\x8f\xc7\x8f\x40\x31\x14\x02\xbc\x72\x1c\x04\x18\x3a\x6e\xf4\xa7\x05\x93\xc2\xb0\x26\x51\x41\x15\x3b\x97\xcd\xe5\x57\x6e\x2f\x55\xae\x1d\x13\xb5\x33\x68\xb3\x3b\x81\x6c\x7d\xcb\x98\x24\x74\x02\xbc\x76\x1c\x04\x18\x3c\x6e\xe6\xef\xc7\xf2\x4b\xd4\x91\x62\xad\x66\xe7\x75\x3a\x2f\xff\x8a\x68\x9e\xa4\xfd\xd4\x6a\xc5\xdc\xb1\x77\x59\xda\x26\x24\x29\x92\x0b\x85\x00\xaf\x1e\x07\x01\x86\x8f\xab\x1a\xfa\xee\xe3\x42\xb7\x8f\xc3\x86\xb1\xcc\x70\xb2\xda\x9d\xa4\x6c\xe6\xf9\xe9\x1a\x18\xc9\x5c\xda\x50\xda\x3d\x46\x7e\x99\xb0\x2f\xc1\xeb\xc7\x41\x80\x01\xe4\x2e\x57\x05\xbe\x78\x1e\xbc\x4c\x75\xa8\xe4\xca\x4f\xf5\xd9\x94\x5e\xe1\x90\x5e\xbf\xd2\xe0\xce\x6f\x4f\x5a\xb6\x52\x56\x9e\xb6\x10\xf6\x25\x78\x05\x39\x08\x30\x84\x9c\xb3\x4c\xdb\xe3\xc2\x9a\x62\x1f\xc1\xcf\xef\xcb\x9c\x6e\x45\x88\x07\x66\x28\xce\x3c\x5f\xa2\x7b\x74\xdf\x5c\x59\xcb\xf9\x7a\xb9\x10\x0a\x01\x4e\x43\x6e\x27\x4c\xbb\xf5\x9d\x9d\x30\x61\x10\xb9\x57\x07\x57\x2d\xe4\x39\x0b\x6b\x8f\x28\x4b\xd9\x28\x66\xd1\xb0\xf1\xff\x71\x3d\xab\x5a\x72\x6a\x70\x65\xbc\xe1\xe5\xab\xea\xd0\x83\x28\x04\x78\x15\x39\x08\x30\x8c\x5c\xd5\x59\x06\xfa\x86\xce\x12\xbd\x98\x30\xff\xc5\x8b\xc1\x33\xd3\x0f\x9b\x28\x44\xdd\xf5\x7e\x54\x7e\x94\x9a\xca\x78\x66\x43\x7c\x06\x85\x00\xaf\x23\x07\x01\x06\x92\x1b\x98\xb1\x56\xd6\x10\xef\xe6\x36\x20\x43\xd9\x2a\x01\x95\xc0\x47\x8e\x25\xdf\x62\x91\xf6\xbb\x44\x23\x1d\x0a\xa1\x22\xde\x76\x28\x04\x78\x25\x39\x08\x30\x94\xdc\x99\xc9\x4d\x32\x66\xd4\x97\xfc\x1d\xd1\xd7\xd8\xd4\x84\xc7\x62\xc3\x60\xc5\xd4\xc6\x97\x85\xa7\xe5\x32\x45\x92\xdf\xd8\x31\x72\x14\x02\xbc\x96\x1c\x04\x18\x4c\x2e\x28\x4f\x4b\xa9\x40\xe5\xe4\x40\x50\x68\x85\x22\x5b\x3f\xc7\x20\x12\xf3\xd9\x65\x98\x58\xd5\x20\xd0\x24\x71\xde\x3b\xca\x09\xa0\x10\xe0\xd5\xe4\x20\xc0\x70\x72\x0e\xe4\xc4\xb0\x3b\xb5\xaf\x3b\xe0\x6c\xa0\x63\xa9\x88\xaa\x09\xdf\x90\xe4\x11\x59\xd3\xa8\xe2\xbb\x1a\x79\x81\x3d\x6d\x6d\x84\x9f\x81\xd7\x93\x83\x00\x03\xca\xcd\x87\xd4\x14\xeb\x40\x8e\x85\x54\x77\xa9\x6b\x17\x05\x0d\xae\x1d\xe3\xfc\x5e\xb5\xad\x33\x38\x7a\xbc\x7e\xa6\x69\xf8\xa9\x28\x61\x3c\xc0\x2b\xca\x41\x80\x25\xe5\xc4\xf7\x7a\x98\x5c\x95\xb6\x97\x43\x83\x7d\x7e\xdc\xbf\xd9\xba\x3e\x5a\xf4\x52\xe8\xda\x03\x6b\x6d\xba\xd0\x33\x49\xc4\x4c\x02\x28\x04\x38\x4d\xb9\x9d\x30\xed\xb6\x32\xef\x84\x09\x83\xca\xad\xf2\x96\x53\x7e\xae\xb6\xe4\xe6\x13\x89\x23\xb2\x9a\x76\x68\x12\xe0\xeb\xca\x93\xfc\x16\xbb\x66\x9a\xcc\xad\x29\x70\x28\x59\x04\x85\x00\xaf\x2a\x07\x01\x86\x95\x2b\xd7\x3e\xfc\xe8\x14\x7f\x53\x7d\x3e\x65\xb2\x4b\x9a\x63\xb7\x6a\x50\x88\x67\xfc\xa2\x7e\xfa\x35\xa4\x57\xf7\x90\xa7\x55\x3f\x61\xf5\xc3\xeb\xca\x41\x80\x81\xe5\xd0\x85\x0a\xdf\x3b\xb4\x4e\xfc\xf3\x8a\x8c\xe9\x67\xb3\x26\x02\xb7\xba\x0d\x5b\xed\x3b\x33\x1f\xee\x23\x91\x69\xab\x4d\xdd\xb7\x1f\x85\x00\xaf\x2c\x07\x01\x86\x96\xeb\xb2\x1f\x90\x65\x66\xaf\x20\xad\x4b\x8e\xd5\x7e\x14\xf9\x80\xc4\xab\x5c\x38\xf7\xab\x90\x79\x42\xce\x99\xde\x1f\x69\xef\xd2\xa8\x51\x08\xf0\xda\x72\x10\x60\x70\xb9\x58\xaf\x4a\xa7\xca\xf3\xdf\x32\x87\x9a\xac\x87\x1e\x9f\x1d\xb4\x48\xf6\x58\x69\xd2\xb9\xdf\x3a\xff\x90\xc2\xe9\xd6\xe9\x27\x4f\x8c\x50\x08\xf0\xea\x72\x10\x60\x78\x39\xc7\x17\x53\xe7\x9c\xd2\x6c\x6e\xab\x7d\x4c\xa6\x99\x62\x6c\x19\x38\x11\x91\x08\xe5\x8d\xa6\xb8\x2a\x0a\x23\x53\xad\x26\x02\x5d\x51\x08\xf0\xfa\x72\x10\x60\x80\xb9\x71\xe1\x86\xd2\x57\xdb\x83\x9b\x27\x57\x1e\x6d\xfe\x58\x9f\xe7\xc9\xa5\x27\x97\x3c\xb3\xe6\x3d\x4c\x19\xa5\x51\xb1\xbf\x71\xd4\x06\x85\x00\xaf\x30\x07\x01\x86\x98\x23\x0a\x8e\xf0\x74\x3c\xd8\xdb\xe8\x7c\x8e\x35\x98\x6b\x40\x9a\x28\xd6\xe1\xe1\xc6\x5d\xb9\xd5\xa1\x4b\xcc\xa1\xed\xac\x0d\x5b\x84\x15\x16\xa7\x31\xb7\x13\xa6\xdd\x66\xd7\x9d\x30\x61\x90\x39\xb2\x72\x79\x73\x17\x9d\xbc\x84\xe9\xfc\x6d\x66\x77\x0d\xfa\xb5\xb4\x6f\x0d\xbe\xa2\x7d\x42\x16\xac\x4e\x2f\x0f\x0c\xf6\xf8\x11\x96\x63\xbc\xca\x1c\x04\x18\x66\xae\xb1\x85\xf1\x09\x7d\x13\x53\x80\xdb\xb9\xd5\x4a\x0d\xbf\x18\x87\xcf\xa1\xe9\x12\xee\x92\x5f\xb3\x35\x29\x0f\xfe\xa4\xe3\xfa\xbf\xff\x44\x04\xaf\x33\x07\x01\x06\x9a\x4b\xe3\x3c\xf2\xd2\x4c\x40\xfd\x3c\x97\x72\x8a\x73\x95\xe0\x02\x89\x4f\xb7\x5b\xd5\x5a\x5c\xb9\xdf\xd2\x51\x13\x8d\xe6\x67\x5a\xaa\x28\x04\x78\xa5\x39\x08\x30\xd4\x9c\x15\xc5\x20\x63\x42\x4d\x9e\xd1\xbc\xf1\x0b\xfb\x63\x70\x6b\xdd\x77\xaf\x6d\x6f\x22\x53\xfc\xd8\x91\xe8\x3b\x8a\x53\x75\x3e\x4c\x28\x04\x78\xad\x39\x08\x30\xd8\xdc\x4c\x27\x2d\x45\x75\xa4\xe3\x5c\x40\xd5\xb8\x8d\x2e\xc7\xb5\xd3\x92\x6f\xbc\x36\xc5\x13\x9f\x8c\xb2\x86\x9c\xa0\x1a\xe6\x78\x40\xf8\x3d\xf0\x6a\x73\x10\x60\xb8\xb9\x41\xf2\x03\xe7\xd6\x5f\xa4\x6e\x04\x8f\x29\x3e\x95\xb7\xad\x98\x25\xf5\x01\xbf\xd9\xf4\xd6\x0d\x32\x46\x56\xdf\xb3\xd7\x11\x11\x46\x62\xbc\xde\x1c\x04\x18\x70\x6e\x2b\x95\x6d\xbc\x6b\xe6\x80\xb2\x57\x4a\xd0\x41\x92\xf7\x0c\x35\xc1\x55\x92\xc1\xdf\x58\xfe\xe8\xda\x28\x06\xc7\x76\x99\x96\xf0\xa1\x10\xe0\x15\xe7\x20\xc0\x90\x73\x12\x92\x57\xf3\x03\xb6\xd4\xff\xf2\x0e\xbe\xb8\x61\x1d\x5c\xf3\xce\xc5\x28\x7d\xf8\x92\xba\xd1\x63\xe9\x7a\x8b\xae\x33\x33\xfa\x16\x28\x04\x38\xcd\xb9\x9d\x30\xed\xb6\xbb\xdb\x09\x13\x06\x9d\x73\xb2\x2c\x62\xdf\x4a\xe3\x10\xf0\x10\xbd\xa8\xeb\xc6\x52\x94\x69\x32\x24\x77\xfe\x84\xf0\x42\xeb\x1e\x71\x4f\x71\x53\xbb\x67\x0e\x28\x04\x78\xd5\x39\x08\x30\xec\x9c\x48\x1f\xb5\xbb\xca\xe5\xf9\x86\x73\xd9\xeb\x07\x8a\xc4\x2e\xbe\x39\xcd\x95\xaf\x7e\x59\x6e\x6f\xbb\x33\x4d\xe6\x91\x02\x57\x48\x08\x13\x5e\x77\x0e\x02\x0c\x3c\xf7\x97\xff\x3e\x75\x92\xed\x48\x73\xeb\xd4\xc3\xc8\x93\xc2\xd3\x4e\x2a\x76\xbf\xe7\x8c\xd4\x2b\x56\xdf\x2c\xfb\xb9\x9b\x0e\x3c\xd4\x43\x21\xc0\x2b\xcf\x41\x80\xa1\xe7\x3e\x38\x1d\xbe\x7f\xaa\xcb\xe7\xd6\xbb\xed\xcb\x7b\x22\xe2\xab\x96\xe2\x9f\x72\x45\x82\x8d\x40\x52\xf1\x99\x8f\x37\xd4\x58\xef\x9f\x42\x21\xc0\x6b\xcf\x41\x80\xc1\xe7\xf6\xce\xbc\x38\x53\xa3\xd5\x5e\xed\x7c\x53\xe3\xa9\x9d\x79\xc0\x05\x6f\xb6\xb2\xce\xcb\x87\xa3\x4c\x7a\xd7\x04\xdf\xea\x5e\x4e\xf2\x44\x21\xc0\xab\xcf\x41\x80\xe1\xe7\xa4\xe3\x1f\x32\x30\xbd\x47\x2a\xb3\x86\xb7\x92\x3e\xef\xdb\x1e\x89\xb6\xfb\x51\xc4\xab\xf3\x83\xae\x53\x47\x2b\xa3\xe6\xc8\x32\x61\x24\xc6\xeb\xcf\x41\x80\x01\xe8\xbe\x0f\x66\xf6\x54\x07\x04\x7e\x71\xd7\x7d\x98\x76\x55\xaf\x32\xf5\xa5\xb7\xfa\xda\x92\x8c\xa7\x3f\xcc\xe2\xb2\x76\x2a\x5e\x25\x3c\x2b\xbc\x02\x1d\x04\x18\x82\xee\xe9\x44\x4e\x88\xb0\x2a\xdd\x87\xe2\x66\xa0\xc4\xed\x98\x02\x86\xa6\x55\x9b\x88\x32\x72\x3b\xfb\xeb\xe7\x67\x74\x73\x36\xce\xa3\x10\xe0\x34\xe8\x76\xc2\xb4\xdb\xf9\xc7\x4e\x98\x30\x08\x9d\x78\xa0\x92\xe2\xb8\x14\x79\x33\x0f\x05\x9b\x69\xd6\x9f\x08\x01\x33\xce\x4f\x61\x1a\xd4\x27\x0f\xd3\x55\x7e\x15\xa5\x1a\x2a\x20\x6c\x78\xf1\x2a\x74\x10\x60\x18\xba\x7e\xee\xee\xc5\xad\x73\x6a\x1c\xc6\x12\x46\x2b\xc5\x3a\x7f\xfb\x5b\x02\xa6\xdd\x40\x52\x99\xe2\x31\x2d\x72\x86\x27\x15\x45\xb2\x28\x04\x78\x1d\x3a\x08\x30\x10\x5d\x91\x02\xb9\x50\xfa\xe5\x79\x8f\xc4\x13\x1a\x6f\x4c\x92\x95\x04\xd5\x1a\x1c\xa9\xe6\xae\x5d\xb8\x39\x61\xe4\x23\xca\xc5\x55\x42\x98\xd1\xf1\x4a\x74\x10\x60\x28\x3a\x8a\x35\x21\x7a\x44\xe1\xbb\xa6\x64\xd7\xfc\xeb\x6b\x09\xf9\xed\x2e\x8b\xdc\x07\x8d\x48\x67\x5e\x9e\x26\xa6\x76\x5c\xeb\xeb\x22\xcc\xe8\x78\x2d\x3a\x08\x30\x18\x5d\xf2\x5d\x95\x5a\x39\xf2\x4f\x7f\x06\x2b\x34\x3b\xf2\x5c\xcf\xf9\x29\xc7\xbc\x57\x5f\xdd\x3a\x4e\x1b\xd2\x4e\x7a\x85\xef\xc3\xe5\x8b\x28\x04\x78\x35\x3a\x08\x30\x1c\x9d\x45\x08\x39\xaa\xac\x17\x7b\x59\xd6\xce\xa5\x84\x96\xef\xf6\xc5\xf9\xdb\x64\x6e\x19\x89\xcc\xf9\xa8\x9d\x7f\x96\xd1\xf3\x3c\x2a\x14\x02\xbc\x1e\x1d\x04\x18\x90\xee\x5c\xaa\xe7\x18\xf5\x6b\xa6\x23\xa5\xab\xd6\x63\xda\x24\x1d\x73\xab\xcb\xbe\x6e\x2e\x66\x2e\xf2\x26\x5c\xdf\xbd\x0d\xd5\x43\x8e\xa2\x10\xe0\x15\xe9\x20\xc0\x90\x74\x6f\x82\x3f\x2f\x5b\x28\x18\xbe\x42\xee\x3d\xfa\x96\x79\x45\x5f\xe2\x6d\x58\xc2\xd1\xae\x67\x54\x5b\x82\xd9\xa7\xb4\xa5\x17\xd5\x44\x51\x08\x70\x9a\x74\x3b\x61\xda\xed\x84\x70\x27\x4c\x18\x94\xce\xfe\x1e\xfb\xcd\xaa\xcc\x57\x77\xb3\x44\xb8\x66\x43\x3a\x04\x98\x7e\xf1\x72\x1f\xfa\xd8\x74\xf9\xf8\x74\x62\xe6\xa1\x16\x67\x03\x41\x14\x02\xbc\x2a\x1d\x04\x18\x96\x6e\x35\xa3\xc7\xff\x8d\x58\x43\xc9\x5e\xd5\x53\x7f\xfc\xc6\x75\x9c\xee\x2a\x75\x37\x27\xde\xd3\xb2\x1b\x4d\x22\x53\xd3\x7c\x3c\x43\xd8\x97\xe1\x75\xe9\x20\xc0\xc0\x74\x55\xfd\x65\x63\x5e\x13\x20\x2a\xc1\x2c\x44\x8c\x56\x97\xa5\x2f\xb3\xf6\xf1\xdd\xd8\x8d\x9b\x4b\x1c\x7b\x0a\x4c\x65\x0f\x85\x13\x5e\x74\xbc\x32\x1d\x04\x18\x9a\x4e\xad\x38\x7b\xa8\x99\xec\xe6\x48\xf2\xb8\xe1\x25\xc1\x5f\xfe\x07\x03\x55\xea\x7c\x94\x11\x4d\x0e\x1e\x0a\x31\x03\x5d\x87\x28\x42\xb7\xc5\x6b\xd3\x41\x80\xc1\xe9\x46\xad\xb9\xbc\xd6\x90\xa2\x92\x9e\xef\x0f\x2f\x54\x5a\x98\xeb\xdf\x22\xbd\x9d\xe9\xff\x3d\x78\xf8\x58\xb2\x63\x62\xa0\x06\x91\x1c\x0a\x01\x5e\x9d\x0e\x02\x0c\x4f\xa7\x90\x74\x8b\x2a\x61\x3f\x77\xbe\x64\x2e\xf3\x34\xfc\x6a\xce\x44\x4e\xa1\x39\x3b\x60\xd1\xa5\x9f\xa6\xe4\xc8\x71\x3e\xf4\xf1\x1e\x14\x02\xbc\x3e\x1d\x04\x18\xa0\xee\x97\x73\xd3\x0f\xd6\x82\x91\x29\x7a\xca\xd5\xd4\xc3\x2c\x91\x67\x1c\x5c\xf2\x52\xf9\x47\x64\x5c\x43\x52\x53\x8a\x97\x2f\x78\x1f\x40\x21\xc0\x2b\xd4\x41\x80\x21\xea\xf2\xbb\xf4\x85\xae\x3f\x51\x3f\xb0\x91\x6a\x7f\x52\xe2\xe0\xa5\xbd\x2f\xf7\x9e\xa5\xf1\x20\x2a\xdd\x4e\x39\xe2\x79\x6e\xb4\x98\xf1\x10\x0a\x01\x4e\xa3\x6e\x27\x4c\xbb\x9d\xa1\xef\x84\x09\x83\xd4\xad\x32\x84\x2a\xbf\xed\xca\x52\x97\xf9\xd8\xb9\xe0\xef\xb2\xe7\x5e\xb2\x2f\x43\x7e\x33\x8f\x8e\x2d\xc3\xc4\x43\x83\xc2\xf1\x09\x17\x14\x02\xbc\x4a\x1d\x04\x18\xa6\xee\x5b\x83\xb7\x89\xf2\xab\xdf\x43\xc9\x59\x77\x8c\xc6\x15\x6b\xce\xa6\xf4\x7e\x3a\x1b\xf7\xf2\x74\x52\xad\x70\x4b\xbe\x26\xf3\xeb\x33\x28\x04\x78\x9d\x3a\x08\x30\x50\x9d\xfd\xc7\x1c\x85\xe4\x5f\xb4\xe1\x1f\x6d\x47\x93\x1c\xf7\xcf\xf5\xc0\x1a\xfb\x15\x16\xef\x85\x72\xa9\x6a\x9e\xbf\x11\x59\xd7\x18\x50\x08\xf0\x4a\x75\x10\x60\xa8\x3a\xc1\x4d\x65\x4b\x03\x85\x94\x67\x8d\xe2\xa2\x55\x4e\xb9\x63\xc7\x9e\x31\x58\x3d\x7c\x10\x53\x36\xed\xaa\xa2\x39\x79\xf1\xe6\x2b\x6a\x14\x02\xbc\x56\x1d\x04\x18\xac\xee\x81\xfd\x98\xf1\x3d\x9d\x73\xa6\xf2\xf4\x68\xa2\x55\x61\x98\xcf\xa3\xbb\xc4\xf0\xe7\xc6\xda\xa5\xf3\x73\xf1\xbd\x31\x1d\xad\x42\x28\x04\x78\xb5\x3a\x08\x30\x5c\xdd\xe5\x9e\x1a\x1a\xed\x3f\xdd\x17\xda\x8c\xcf\x7f\xee\x38\xea\x36\xd7\x4f\xd2\xf3\x5a\x72\x22\xa1\x4b\x58\xb9\x42\x06\x8c\xbd\x71\x44\x21\xc0\xeb\xd5\x41\x80\x01\xeb\xca\x65\x25\xe8\x9a\x5c\x57\x1e\xdc\x53\x9c\x64\xfc\x69\x01\x7a\x84\xbe\x9a\xfd\xf2\x36\x53\x33\x08\x5c\xb8\x2d\x3f\xee\x33\x43\xd8\x33\xe1\x15\xeb\x20\xc0\x90\x75\xd5\x86\x41\x0e\x95\x93\x4e\xd7\x62\xd9\x4f\xb0\x71\x9b\xa7\x15\x7c\x7d\x2f\xb2\x54\xc3\xd6\xfe\xdc\xa2\x25\x55\xe1\x6d\xe1\x2a\x82\x42\xf0\x1f\xcd\xba\x1b\xaf\xdf\x0f\x1a\x6a\xca\x0e\x9e\xec\x3d\xc5\x4e\x6c\x58\x0c\xd1\xcb\xd3\x6e\x6e\x50\xe1\x82\x65\x57\xe0\x19\x8e\xe8\x9a\x76\xcc\x65\x9f\xae\x4c\x75\xca\xcb\xf7\x3c\x79\x83\x32\xed\x2c\x75\xab\x97\x5c\x62\x3d\xdc\xf5\xb7\xdb\xa7\x9c\x35\xc8\x9a\xa8\xc5\x7a\xb5\xcb\xff\x29\xdd\xe6\xa6\xc9\xbb\x76\x89\x9e\xf9\xe6\x7d\x32\x3b\x67\x93\x3c\xe3\xaa\xae\x78\xe3\xd4\x8b\xdc\xf4\xa6\x32\xb6\x3e\xad\x66\xd5\x14\xff\x94\x16\x6f\x7c\xee\x93\xe2\xd8\xbf\x72\x98\x71\x86\xf1\x48\x7a\xf3\x8c\xba\xc5\xf7\x95\xbf\xaa\xdd\x2c\xd5\x03\x31\xb9\xaf\x5d\x65\xaf\xfe\x53\x5a\x36\x7a\xde\xdf\x31\xc0\x56\xe1\xf8\x7b\xe3\x8f\xa3\x45\x47\xaa\x53\x4e\xbe\x5e\x7b\xb1\xfa\xf6\xee\x88\xc5\x5f\x7f\x9d\xcf\x71\x4f\xff\x29\xdd\xfc\x96\xf3\xba\x5b\x26\x92\xe9\x94\x80\xec\xf5\x33\xab\x52\xd2\x0f\x6f\x5c\x4b\x3b\xc2\x54\x42\x49\x65\xb1\xe6\x37\xd7\xca\xf2\xe4\x9f\x52\x9d\x62\xaf\x7e\x86\xbb\x64\x79\x89\xba\x48\xc2\xf7\x19\x7e\xf0\xbb\x46\x33\xde\x24\xc2\x7d\x53\x7d\xdf\xa7\x81\x36\xc5\x1f\x3d\xff\x94\x16\x74\xf7\xbf\xcc\xb3\x0d\xab\x3e\xb2\x47\xe9\x1a\x97\x89\xf0\xe9\xdf\x0a\x7f\x1c\x3f\x40\x45\xc7\xe2\xd0\x0d\xfb\xbd\xe2\xbf\x4e\xfd\x53\x5a\x55\x4f\x7f\x7b\x4f\xc7\x69\xb6\x35\xd1\x65\x21\xe6\x44\xb9\x4b\x11\x0f\xe8\x64\xbf\x2e\xbf\x9e\xdf\x32\xeb\x66\x2a\xa6\xc9\x22\xfd\xdf\x65\xdf\x6e\x4f\x75\xa7\xa3\x61\xd0\xba\xc9\xee\x07\x6a\x47\xaf\x1c\xcc\x05\x4a\xce\xfd\x1f\x06\x0a\x6f\xed\x91\x6e\xf1\x71\x4d\xbd\x60\xf9\xfa\xb2\x95\x2e\x9c\xbb\x40\x86\x42\x80\x57\xad\x83\x00\xc3\xd6\x95\x29\xbf\x1c\x57\x67\xf2\xd7\xb9\x3a\x20\xf1\x6a\x9e\x45\x96\x8e\xeb\x75\x6d\x96\x5a\xe4\xec\x8a\x1a\xa9\x9c\x15\x73\xbc\x08\x05\x0a\x01\x5e\xb7\x0e\x02\x0c\x5c\x97\x43\xa3\xfb\x5b\x6a\xcb\xc5\x5c\xfa\xc8\x8a\x5c\x0a\xe9\xf1\xb4\x40\xe5\x84\xaa\x70\x5e\xc3\xea\x05\x93\xfb\x76\xfa\x64\x5b\x17\x50\x08\xf0\xca\x75\x10\x60\xe8\x3a\x81\xc8\x4e\x89\xbc\x12\xde\x47\xfd\x21\xb1\xe9\x48\xc6\x94\xe6\x3b\xc6\x37\xe3\xd6\x7e\x8c\xf0\xa8\x88\xea\x96\xc3\xd2\xd1\x63\x28\x04\x78\xed\x3a\x08\x30\x78\xdd\x50\xcf\xbb\xab\xfe\xbe\xce\xe3\x2c\x5c\x7e\xc7\x5f\xf7\xf5\x99\xda\x25\xe7\x35\x8f\x5e\x5b\x6e\xbe\x4c\x3b\x22\xb6\xe7\xf5\x9c\x0c\x0a\x01\x5e\xbd\x0e\x02\x0c\x5f\x27\x70\xff\x96\x50\xf5\x13\xe6\xcc\x84\xbe\x98\x6a\xd1\xef\xbc\xce\xed\x37\xa9\x65\xa8\x57\xe7\x1c\x8f\x80\x66\x9d\x72\x5d\x84\x1c\x85\x00\xaf\x5f\x07\x01\x06\xb0\x13\xe4\xaf\xb4\xb5\x51\xe7\x49\xd1\xf9\x2c\x5d\x52\x57\x92\x57\xce\x29\x52\x1a\x96\xf0\xc2\x49\xf9\xa3\x8b\x53\x87\x60\xeb\x90\x36\x0a\x01\x5e\xc1\x0e\x02\x0c\x61\x97\x70\xb2\xf4\xbc\xd8\xc9\xdc\xe1\xc8\x8c\xf8\x42\xee\x2b\xc4\xf6\x5b\x73\x5c\xb5\xb4\xbc\xc4\x3a\xf5\x77\xcc\xf8\x05\x2d\xc6\x14\x51\x08\x70\x1a\x76\x3b\x61\xda\xad\xef\xec\x84\x09\x83\xd8\x15\x9e\xb9\xc1\x71\xd3\x3e\x31\x92\xe9\xa9\xab\x64\xe9\xed\x5f\xbf\x87\x5c\x0e\x3e\x59\xd9\x56\x2e\x4b\xb8\x98\xfe\x2c\x2a\x42\x8f\xf0\xe1\xe1\x55\xec\x20\xc0\x30\x76\x95\x3a\x11\x27\x5a\xde\x30\x7c\x08\xbc\x4c\xfd\xbe\x68\x21\x5d\xea\x80\xc5\x3e\xda\x77\x63\xab\x22\x0a\x8a\x67\x9a\xb8\x28\xc5\x9c\x50\x08\xf0\x3a\x76\x10\x60\x20\xbb\xd5\xce\xaf\x6c\x52\x03\x77\x69\x3f\xbf\xf4\xf0\x81\xf9\x4b\xf3\x89\xc9\x57\x59\x3c\xd6\xce\x74\x99\xe4\x3a\xe9\x39\xe4\xd8\xd3\xa1\x10\xe0\x95\xec\x20\xc0\x50\x76\xd4\x17\xfc\xc3\xda\x92\x1e\x0e\x97\x1e\xb8\x5e\x1e\x36\xbd\xfa\x9a\x65\xc4\xf9\x75\xef\x4a\x59\xa5\x51\x6b\xc2\x51\xf1\x2f\xfa\x84\x31\x07\xaf\x65\x07\x01\x06\xb3\x13\x2d\x3a\x7c\x73\x32\xce\x73\xeb\x91\x3c\x53\xa0\x8d\xe9\xe1\x02\x58\x91\xc8\xf8\xae\x49\xa8\xe2\x0d\x89\x6e\x7a\x10\xb1\x3d\x2b\x0a\x01\x5e\xcd\x0e\x02\x0c\x67\x37\x11\x9f\xf6\x42\xf8\xba\xb7\x3f\xc3\x8b\xa0\x0f\x1d\x43\x99\x5d\x49\xfb\xcb\xec\xf7\x6b\x1d\xb7\xe1\x2a\xb5\xbf\x67\x62\xfc\x9d\x30\x82\xe0\xf5\xec\x20\xc0\x80\x76\x22\xf5\x5a\x57\x4c\xb5\x6e\xf7\x68\x16\xdc\x29\xfc\xb5\x78\x7f\xf6\xd5\xc8\x34\xfb\xc2\x1d\xe2\x1e\x55\xff\xcc\xf2\x47\x92\xde\xe7\x51\x08\xf0\x8a\x76\x10\x60\x48\x3b\x41\x09\x97\x7d\x86\x05\x7a\x5e\x40\x37\x11\x25\x59\x0f\x52\x2d\x7c\x44\xab\x39\x25\x6e\x65\x11\x98\x4e\xd7\x13\xb0\xfe\xc3\x0d\x85\x00\xa7\x69\xb7\x13\xa6\xdd\x56\xe6\x9d\x30\x61\x50\x3b\xb5\x9b\xf3\xad\x22\x33\xe6\xbe\xd5\x05\x77\x5c\x19\x99\xcc\x6f\xd8\xeb\x3e\xd3\x2d\x3f\x92\x27\x36\x3c\x47\xaf\x6e\xbf\x70\x88\x30\x3f\xe2\x55\xed\x20\xc0\xb0\x76\x4d\x91\x5f\xcd\xa7\x42\x4d\xb5\xda\x13\xdf\x04\x69\xd2\xd2\xbf\x3e\xb4\x90\x9d\x13\x07\x19\xa2\x4a\x7f\xa5\x06\xac\x6c\xf1\x11\x3a\x08\x5e\xd7\x0e\x02\x0c\x6c\x37\x4e\x63\xf8\x53\xfc\xc5\xe2\x55\xee\x7d\x25\x39\x96\x5c\xd7\x2e\x07\xd7\xbc\x51\xe1\x4d\xf9\xb9\x74\x5a\x85\xb7\x95\xa6\xe3\x01\x33\x0a\x01\x5e\xd9\x0e\x02\x0c\x6d\xf7\xa1\x8e\xf5\x4c\xf5\xfe\x6c\x44\x54\x94\x2b\x8b\xd7\xd6\xae\x66\xa1\x28\x55\xe1\xf2\x25\xbb\xcf\xa7\x44\x15\x6a\x7a\xa7\x79\x24\x50\x08\xf0\xda\x76\x10\x60\x70\xbb\x53\xd2\x9a\x7f\xc9\x73\xd9\xe8\x7e\xea\xba\x9e\x90\x3f\xe0\x78\xff\x41\x11\x65\x6d\xfa\x09\x7b\xb7\x57\xc6\x27\xa2\x37\x9f\x05\x5a\xa0\x10\xe0\xd5\xed\x20\xc0\xf0\x76\x1a\x21\xce\xbf\x7b\x7f\x92\xbb\xbb\x97\x18\x68\xff\x94\x54\xde\x47\x47\xfe\x8c\xdc\x44\x2a\xe6\x28\xa2\xad\x68\x38\x74\x46\xd3\x14\x85\x00\xaf\x6f\x07\x01\x06\xb8\x8b\x94\x97\x8b\xb4\xc8\xf7\x42\x67\xb3\x4f\x1e\xe7\xfe\xb0\x76\x9c\xa2\xd9\xd4\x44\x68\xb5\xc4\x6e\xd9\xd0\xe9\xe9\xc3\x6c\x7b\x42\x03\xc5\x2b\xdc\x41\x80\x21\xee\x9a\xaf\x11\x1f\x6f\x9b\xe2\x73\xd0\x1c\x1c\x1b\xf9\x5e\xf7\x49\x74\xc1\xd7\xf1\x11\x73\x93\xdb\x1e\x12\xad\x6b\xd4\xaf\x5e\xfc\xbd\x84\x42\x80\xd3\xb8\xdb\x09\xd3\x6e\xb3\xeb\x4e\x98\x30\xc8\xdd\x88\x83\xe9\xdb\x3d\xd2\x6f\x11\xbd\xb1\x5f\xcf\x29\xed\x35\x6f\xdf\x1a\x62\xcd\x3c\x16\xf8\xfe\xec\x4a\xae\xca\x66\x6d\x3b\x35\xa1\xa3\xe3\x55\xee\x20\xc0\x30\x77\xd9\x72\xea\xef\xce\x7e\xf5\x2e\x14\x96\x3d\xfd\xda\x78\x54\x76\xb5\x6a\x86\x76\x5f\xc7\xfa\x08\x3f\xaf\xc1\xbc\x9b\x9c\xd3\xed\x83\x28\x04\x78\x9d\x3b\x08\x30\xd0\x5d\xb2\xde\x4d\xf1\xa4\xf2\xc0\xb7\xbc\x91\xe5\x88\xee\x82\xe5\xe5\x76\x45\xf6\xd2\x97\xbe\x32\xf1\x5c\x85\xd1\x5a\xcd\x44\x49\x4a\x28\x04\x78\xa5\x3b\x08\x30\xd4\x1d\xdd\x2f\xa5\x0f\x3d\xfd\x0b\xaa\x97\xc4\xc8\xa6\x04\x04\x4a\xf4\xa9\x47\xff\xf2\xfd\xae\x34\x19\xa5\x52\x1e\xde\x2b\x26\xe7\xa2\x89\x42\x80\xd7\xba\x83\x00\x83\xdd\x7d\x1f\x63\x3f\xce\x2f\x94\xc0\x05\xa2\xa6\xa6\xb3\x7f\x50\xfc\xb4\xa6\x2a\x12\xf0\xee\x3e\xfc\x93\x4f\xb5\x94\x56\xd4\xa9\x8a\x07\x85\x00\xaf\x76\x07\x01\x86\xbb\x53\x93\x3e\x97\x66\xa0\xf8\x20\xd0\x2b\x84\x8f\xfc\x96\x68\x88\x52\xf4\x23\xf1\x8f\x72\xab\x2c\x47\x87\x38\xe5\xbc\x3d\x1f\x72\x12\x9a\x1b\x5e\xef\x0e\x02\x0c\x78\xa7\x6e\x5a\xc2\xa8\x28\xd9\x29\x81\x16\x2b\x4a\x1a\xdf\x55\xf0\x18\xa5\xf4\xea\x8e\xbf\x27\x4b\xe4\x45\xaa\xb8\x9c\xda\x9d\xe3\x85\x42\x80\x57\xbc\x83\x00\x43\xde\x95\x4a\xdd\xd5\x7a\x39\x2a\x67\x20\x7e\xe7\xc6\x79\xfd\x57\x3d\x2c\x56\xd5\xf4\x23\x6b\x63\x0a\x1e\xd5\xc7\xba\x32\xf3\x7c\x94\x09\xab\x38\x4e\xf3\x6e\x27\x4c\xbb\xed\xee\x76\xc2\x84\x41\xef\xfa\xee\x9e\xb7\xfc\x3a\xf0\xd4\x78\x32\x7a\x2d\x95\x3a\xe8\xd8\x98\x95\x3f\x1a\xd0\xfd\xa8\xa8\x23\x28\x1d\x35\xb0\xbc\xc4\xcd\x8d\x42\x80\x57\xbd\x83\x00\xc3\xde\xb1\xea\xdc\xb7\x12\x0d\x36\x68\x52\x64\xe5\xe0\x6b\x62\x31\xdf\x9b\xd9\xc9\xe2\x3a\x2f\x15\x48\x77\xb3\x2f\x6f\x41\xcf\x43\x94\xf0\x4b\xe3\x75\xef\x20\xc0\xc0\x77\x01\xab\xfb\xf8\x0f\xec\x1f\x3c\x24\x78\x25\x24\x9c\x33\x27\xf2\xe2\x8f\x24\xe7\x2b\x54\xbe\x39\x2f\xbc\x39\x38\xe7\xd3\x1f\x5b\x9e\x43\x21\xc0\x2b\xdf\x41\x80\xa1\xef\xa6\x86\xb4\xd5\x55\x0c\x8b\xd8\x57\xa4\xf4\x18\x27\x2d\x65\xaf\x1d\xad\x7c\x7c\xbf\x9e\xf8\xce\xbc\x3e\xa9\xe9\x87\x4b\x08\x27\xa1\xf1\xe0\xb5\xef\x20\xc0\xe0\x77\xed\xd1\xfb\xf7\x3f\x09\x3d\x95\x91\xcf\x7e\xb7\x62\xfb\x87\x66\x8b\x7b\x00\x3f\x91\xb9\x99\x62\xd8\x79\xcd\x13\x4a\x81\x07\xc5\x3d\x50\x08\xf0\xea\x77\x10\x60\xf8\xbb\x50\xb6\xf3\x7f\x9e\x50\x28\x49\xd5\x59\xb7\x97\x5d\x7a\x97\x1b\x7c\x94\xcc\x6d\xfd\xe6\x42\xc7\x39\x7a\x2e\x9e\xca\xc6\xf8\xbd\xfb\x51\x08\xf0\xfa\x77\x10\x60\x00\xbc\x32\x2e\xfd\xcc\xe3\x0c\x57\x4c\x35\xe6\x6a\xaf\xb7\x84\xde\x57\x93\xde\x73\xb8\xcf\xbc\x9c\x6f\x51\x24\x29\x44\x23\x7d\x2d\x98\x30\x12\xe3\x15\xf0\x20\xc0\x10\x78\x9c\x91\x2e\x0c\x8f\xea\x32\x45\xb5\x4b\xb9\x0e\x26\xbc\xfd\xac\x51\xb9\x71\x62\xe9\x1b\xe2\x15\x11\xe5\xb8\x55\xf3\xf0\xb5\x1d\xe1\xf7\xc0\x69\xe0\xed\x84\x69\xb7\xf3\x8f\x9d\x30\x61\x10\x3c\xc0\xca\x3e\xf8\xfe\x67\x5b\xfb\xdf\xbd\x03\x5f\x9e\x09\x98\xf4\x05\x56\x0c\x4d\xbc\x79\xee\x5d\xb6\x67\xfa\x30\x03\x63\x4a\xc2\x5e\x14\x02\xbc\x0a\x1e\x04\x18\x06\xef\xf1\x62\xfa\xea\xbd\x56\x36\xfa\x0d\x8f\xf7\x09\xc7\xcf\x33\xd1\xe8\xe7\x95\x7c\x9e\x37\xff\x6a\x15\xb7\xd6\x6a\xbd\x64\x35\x65\x89\x42\x80\xd7\xc1\x83\x00\x03\xe1\x75\x26\xd6\x3b\x04\x84\x05\xb8\xa7\x2e\x7c\xe1\x69\x3b\x66\xe5\xeb\x0e\x29\x13\xe9\x10\x59\x7a\xb6\x91\x3d\x83\xa6\x8c\xe6\x84\x9f\x81\x57\xc2\x83\x00\x43\xe1\x3d\x4f\xb6\x11\x93\x0c\xdb\x62\xac\x3f\xf5\x58\xe2\xbe\x80\xe5\xdb\x86\xea\x45\xae\xda\x3d\x27\xb3\xc6\xf6\x0b\x59\x50\x86\xe9\x11\x9a\x02\x5e\x0b\x0f\x02\x0c\x86\xd7\xe9\x9e\xe4\x7f\xed\x4d\x8b\xed\xdb\x43\x37\x5c\x07\x03\x2c\x38\x3f\x4e\xb4\x89\x6f\xdd\x2e\x3c\xfc\xe1\x10\x9b\x3e\x3b\xe3\x5b\x43\x14\x02\xbc\x1a\x1e\x04\x18\x0e\x4f\x3c\xca\x33\x97\x5c\xe9\xde\x5f\xc4\x7e\xbd\x61\x31\xc7\x65\x6c\x3d\x97\xfb\x52\x5d\xc8\x87\xce\xb8\xa0\xcf\xbc\x2e\x3c\xf1\x9c\x28\x04\x78\x3d\x3c\x08\x30\x20\xde\x1e\xf6\x16\xeb\xfb\x8c\x1f\xda\x4d\x7e\x35\xbc\x53\x9b\x8c\xe5\xf6\x7d\xf1\x46\x98\x7f\xe4\x7d\xa5\xf7\xfd\xfa\xac\x43\x2e\x3d\x84\xe6\x86\x57\xc4\x83\x00\x43\xe2\x79\xb7\xb9\xfe\xd2\xff\xf1\x7b\xa0\xb7\x2b\xec\xf2\x40\x2c\x87\x95\xc9\xfc\x01\xa9\x9b\x53\xdb\x99\x2e\x92\xbf\x57\x8a\x55\x43\x08\x7b\x26\x9c\x26\xde\x4e\x98\x76\x3b\x21\xdc\x09\x13\x06\xc5\x2b\x15\xa4\x9e\x6b\x56\x66\x8d\xde\x6e\x1a\x5f\xce\x3e\xca\xfb\x6d\xa1\x80\xaa\xfd\x47\xae\xe3\x73\xd3\xa7\xcf\x5e\x68\x73\xec\x97\x41\x21\xc0\xab\xe2\x41\x80\x61\xf1\xdc\x1a\xfa\x25\x98\x7f\x55\x5d\x48\xca\x18\x0c\x8f\x38\x96\x29\xf1\xee\xe3\xcc\xef\x08\x35\x22\x87\x61\x3f\xae\xa5\xf2\xd6\x72\x51\x14\x02\xbc\x2e\x1e\x04\x18\x18\xef\xf5\xa1\x3d\xad\xde\xd3\x62\x3f\x33\x5a\x7e\x93\x1d\x2d\x3c\xbc\xe9\x5a\x9d\x78\xc2\xa2\xc3\x17\xaa\x7d\xe3\x39\x37\x67\x2a\x01\x51\x08\xf0\xca\x78\x10\x60\x68\x3c\x13\xd7\x02\x0a\x8f\xca\x73\x36\x86\xeb\xbc\xbd\x43\x73\xc9\x35\x17\x3f\x67\x2d\xdf\x4e\xf6\x58\xb9\xf1\xe6\x9a\xe0\x33\x1e\x49\x16\x14\x02\xbc\x36\x1e\x04\x18\x1c\xef\x30\xdd\x5b\xc3\xe2\x9c\xae\x60\xc1\x19\xdd\xac\x3d\xfd\x6b\xed\xcb\x67\x55\x3d\x89\xe0\x48\x3e\x6f\xad\x8d\xbc\x93\x55\x87\x1d\x0a\x01\x5e\x1d\x0f\x02\x0c\x8f\x77\xef\xf4\xad\x47\x7e\xde\xf5\x23\x91\xcc\x32\x07\x2d\x2f\x7e\xde\x08\x71\xa0\xc8\x39\xbe\x3f\x59\xc7\x61\x7a\x91\xd4\x3e\xf8\x3e\x61\xcf\x84\xd7\xc7\x83\x00\x03\xe4\x79\xbe\x3d\x97\xd5\xce\x74\x76\xef\xba\x92\xd4\xc9\x7b\xc7\x38\x1e\xc4\x3a\x9b\x09\x7a\x8f\xd9\x8c\xd2\xa7\x7c\x1f\x3c\x56\x96\x28\x8d\x42\x80\x57\xc8\x83\x00\x43\xe4\x5d\x15\xd7\x61\x3d\xd1\x46\x4a\x2b\x46\x99\x2f\x17\x18\x5c\xdd\x77\x20\xa6\x22\x3c\xf5\x79\xe3\xcd\xf1\x87\x3c\x35\x2f\x2e\x99\x1a\xa1\x10\xe0\x34\xf2\x76\xc2\xb4\xdb\x19\xfa\x4e\x98\x30\x48\x5e\xe2\xc7\x1f\x4e\x5e\x67\x32\xfe\xe6\x8a\xf2\x59\x6b\x75\x9d\x1c\xeb\x94\xd9\x68\x1d\x32\xe1\xab\xd2\x3f\xe4\xc0\x76\xef\xf1\x0b\x3d\x14\x02\xbc\x4a\x1e\x04\x18\x26\x2f\x52\x55\xe5\xbe\x30\xd7\xcd\x5c\x57\x97\xc2\x3a\x45\xde\xfc\xfd\x83\xd5\x0f\x4b\x36\xd6\xdd\x8f\xe5\x4a\xb9\x4c\xe7\x25\x19\x13\xf6\x33\x78\x9d\x3c\x08\x30\x50\x9e\x53\x12\xdd\xc9\x59\xd3\x5c\xb3\xe5\xf7\xce\x11\x67\xcf\xcc\x99\x50\xd7\xdc\xb0\x4d\xd6\xb6\xce\xe6\xde\x63\xfe\x23\x33\xa7\x8c\xd0\xa5\xf0\x4a\x79\x10\x60\xa8\xbc\xcb\x5a\x37\xe8\xa3\x2a\x8d\x59\x69\x4d\x25\xc2\xdc\x99\x97\x43\xc8\x23\x88\x8d\x34\x2e\x2f\x9c\xd1\x7f\x94\x4f\x22\x25\xec\x7b\x0c\x85\x00\xaf\x95\x07\x01\x06\xcb\x63\x8a\x5d\x5b\xe7\x6e\x33\xc8\x32\xb9\x53\x95\xd9\x51\x26\xda\xf0\x3c\x9c\xa7\x8b\xec\xb7\x3c\xed\x7d\x8f\xaf\xae\x29\x13\xc7\x09\xab\x06\x5e\x2d\x0f\x02\x0c\x97\x67\x92\x3b\xe4\x36\x44\x46\x72\x53\x5f\xa0\xb5\x57\x52\xb2\x56\x1c\x35\x27\xfe\xbb\xc4\xe7\xaa\x12\xfb\xc1\xbd\x2b\x62\xfe\xbe\x37\x0a\x01\x5e\x2f\x0f\x02\x0c\x98\x47\x15\xb2\x92\x9f\x44\x7f\x8c\x74\xa2\xbc\x80\xd2\x70\x24\x88\x92\xe7\x1d\xe9\x40\xce\x63\xb2\x07\x91\x37\x02\xbe\x56\xf7\xc9\x88\xa0\x10\xe0\x15\xf3\x20\xc0\x90\x79\x5a\xd9\x6a\x25\xc6\x45\x42\x82\x42\x86\xe4\x6f\xdb\x35\x79\x92\xf2\x74\xfb\xb6\x68\xdd\x43\x32\xa6\x88\xea\x46\xf2\x1b\xde\x13\x9a\xf4\x7f\x34\xf3\x6e\x10\x33\xce\xff\xe0\x97\xdf\x9a\xe3\x8b\x1a\x91\x20\x3e\x92\xd6\x45\x75\xa0\xd3\x75\x2b\x30\x6d\x68\xed\xc4\xa9\x63\x3a\x77\xdc\x31\x97\x7d\x37\x7b\x2e\x96\x7c\xf2\x67\x2e\xa0\xe5\x37\xe0\x7d\x4e\x79\xad\xf7\xbb\xaf\xc6\x9d\xac\x03\x6b\xea\xd3\x1f\x14\xb7\xe8\x5f\x44\xfc\xfb\xc5\x3a\xfd\xfd\x30\x5a\x66\x9d\xb2\x75\x80\x8a\x8d\x79\xfe\x17\x3b\x7b\xfd\x0c\xe7\x0d\x62\xea\x74\xf2\xd4\x50\x2f\xc5\x86\xac\xd5\x8a\x7f\x4a\xad\xe5\xde\xa7\xfd\x6e\xfc\xbd\xef\x60\x18\x49\x58\xe1\xad\x70\xa7\x23\x06\xf3\x69\xda\xe5\x75\x6c\x94\xbc\xcd\x82\xea\xe1\x8b\x94\xff\x94\x0a\x1c\x26\xb7\xee\x22\x96\x32\x2f\x5e\x14\x24\x3d\xc9\xeb\xdd\xa8\xe2\x70\xff\xc7\xf7\xfe\x3d\x4d\xcf\x63\xa7\x2a\x67\xc2\xa8\xb5\xfe\x29\x2d\x49\xee\x6a\xb9\x59\x36\x61\x54\xcb\x92\x5e\xb5\x90\x40\xd4\x48\x3d\x10\xcd\xf9\xb6\x82\x7d\xb1\xdc\x65\x8d\xc9\x69\x42\x86\xe4\x9f\xd2\x2e\xcb\x3a\x45\x5d\xbb\xb8\xd4\x5e\xfb\xc9\xfb\x5e\x1a\x15\xdc\x0f\x58\x5a\x23\xef\x4b\x45\xd3\xa8\xcd\xb3\xae\x35\x4a\x3a\xac\xfe\x53\x4a\x1f\x7d\xe7\xde\xd9\xd8\xdf\xa7\x5e\x3d\x2e\xe9\xef\x9e\x72\x1c\x99\x9e\x9a\xb8\x70\x6c\xa0\x54\x21\x43\xec\x7d\x74\x1a\x0b\xc2\xf7\x4f\xe9\xd1\xcd\x21\xaf\x84\x2e\x3f\x24\xfe\xce\xea\xf3\x18\x26\xb1\x8f\x8f\x88\x9b\x4f\xdc\x1f\x60\x2c\x31\x5d\x23\xe2\xa7\x9b\xdf\xae\xfb\xdf\x65\xdf\x6e\x4f\x75\xa7\xa3\x61\xd0\x3c\xcb\xf1\xa4\x9a\x69\x91\x97\xa3\x7a\x42\xb0\xf9\x36\x69\xb7\x41\x2f\xad\x97\x66\x94\x7f\xb2\x5c\xdc\xb9\x91\x40\x99\x2a\x55\x2b\x14\x02\xbc\x6a\x1e\x04\x18\x36\x8f\x8d\x8f\x89\x7c\xf5\xdc\x96\xc2\x9c\x64\x7a\x7d\x4e\xe4\xb1\xb4\xc1\xbe\x9b\xf7\xd2\x2f\x3f\xb7\x8c\xa9\x20\x55\xb6\xda\xce\x24\x2c\xab\x78\xdd\x3c\x08\x30\x70\x1e\xf7\xf4\xb8\xf0\xeb\x85\x5c\x5b\x8e\x05\xc9\x33\x97\x66\x18\x3d\x32\x5e\xe6\x11\xd5\xd0\xb4\x1f\xe0\xf1\xe4\xd7\x4c\x2f\x10\x20\x45\x21\xc0\x2b\xe7\x41\x80\xa1\xf3\x62\xec\x1e\x5c\xd1\xee\x92\xe5\xbf\xc2\xaf\xae\x5c\x27\x40\x62\xc2\xca\xd4\x45\x97\x20\xe2\x3f\x95\xe8\xad\x2a\x97\xfc\xa5\x96\x1c\x85\x00\xaf\x9d\x07\x01\x06\xcf\xe3\x1f\xaf\x99\xa5\xa3\xcf\x62\x1a\xe7\x9b\xca\xef\x62\x4b\x59\x4d\x91\xa3\xcc\x2f\x1a\x0c\x01\xf1\x76\x45\xf1\xa3\x1b\x99\x36\x28\x04\x78\xf5\x3c\x08\x30\x7c\x5e\x67\x5c\x2d\xe5\xd8\xcf\x41\x85\xa9\x73\x25\x8f\xfa\xf6\x9d\xa9\x14\x71\xbd\xde\xca\xf9\x3a\x88\xb5\x3b\xd4\x57\xb9\xd9\xa5\x8e\x06\x85\x00\xaf\x9f\x07\x01\x06\xd0\x6b\xf6\x4e\xbe\x98\xa0\x33\xc0\x5c\x4c\x6f\x7a\xa1\xb6\xd3\xcf\x36\x18\xdd\x6e\x39\x84\x3c\x57\x32\xfd\xfa\x79\xf6\xec\x53\x27\x2d\x14\x02\xbc\x82\x1e\x04\x18\x42\x8f\x2c\x9b\x3b\x85\xac\xa7\x14\xdd\x7e\xc8\x1f\x98\x12\xc7\xf3\x40\xf9\xba\x46\x5b\xab\xc6\xa3\x3d\xa5\x4e\xc5\x4b\x64\x51\xcd\x9e\x28\x04\x38\x0d\xbd\x9d\x30\xed\xd6\x77\x76\xc2\x84\x41\xf4\x68\x78\xec\x85\x1e\xbe\xca\x98\xe6\x33\xbd\xe1\xcf\x56\x4c\x63\x18\xdf\x46\xf9\xcb\xfa\x01\xc5\xf5\x8a\xb5\x6f\x8b\x36\x21\x40\x1c\x85\x00\xaf\xa2\x07\x01\x86\xd1\x1b\x5e\x72\x36\xb3\xf8\xab\x96\xea\xb8\x0e\x33\xcd\xa7\xe5\xbd\x58\xe7\x74\x54\xa7\x03\xae\xba\x6d\x0b\x8b\x55\xbb\xaf\x74\x5b\xa3\x10\xe0\x75\xf4\x20\xc0\x40\x7a\xfe\x86\x76\x64\x2a\x65\x1d\x66\x9e\xd7\x4d\x5f\x7d\x1a\xf3\x73\x1d\x3b\x76\xf7\x4b\x95\x5d\xdf\xbc\x89\xdb\x00\x95\xe6\x83\xd0\x33\x28\x04\x78\x25\x3d\x08\x30\x94\xde\x4b\x5e\x5f\x29\xcb\x7b\x95\x2f\xab\x04\xf3\x04\xfe\xda\xe7\x9f\x5b\x5b\xe8\xb8\x15\xd5\xd4\xe8\x1e\xdc\xe2\x7d\x52\xcb\x73\xf1\x38\x0a\x01\x5e\x4b\x0f\x02\x0c\xa6\x17\x5c\x2b\x38\xb5\x59\xf4\xe1\x58\xb3\xd9\x9d\xef\xe1\xa4\x25\xc3\xd1\x69\xa4\x5b\x3a\x7a\xf6\xa1\xbf\x4d\x8f\xd6\x67\xb3\x6a\x21\x28\x04\x78\x35\x3d\x08\x30\x9c\x5e\xd7\x17\xcb\xb9\x08\xea\x33\xf2\xdf\x64\x26\x39\x05\xd7\x9d\xc7\x1b\x52\xd7\x14\x22\xa9\xfc\x0b\x63\x9f\x10\x25\x48\xb4\xfe\x24\x34\x50\xbc\x9e\x1e\x04\x18\x50\xcf\x85\xb5\xe6\x8d\x63\x80\x49\xfa\xfd\xe5\x09\x6e\x3f\xb4\xae\x9b\x71\xdb\x68\x3a\x76\x93\xc6\xb8\x56\x51\xa6\xf1\x02\xbd\xbc\x26\x0a\x01\x5e\x51\x0f\x02\x0c\xa9\x87\x3c\x2b\x12\x3c\x28\x9d\xf2\x39\xf1\x5e\xd1\x83\x72\x45\xf5\xe7\xb3\xf7\x0f\xcd\xef\x8f\xf7\x16\x30\x9a\x21\xa2\xe8\x2c\xd6\x24\xfc\x0c\x9c\xa6\xde\x4e\x98\x76\x5b\x99\x77\xc2\x84\x41\xf5\xf6\xde\x4b\xcc\xea\xf3\xfa\x40\x75\xdd\xfd\xd7\x86\x46\xbc\x98\xcf\xc9\x9e\x68\xa2\xb8\xe3\x8c\xbf\x61\x5c\xd3\x7e\xce\x0c\x6a\x06\x14\x02\xbc\xaa\x1e\x04\x18\x56\x8f\x36\x46\xb7\x27\xa7\xd7\x77\xb0\x78\x5b\xb8\xbd\x6a\x95\x26\xa7\xde\xdb\x94\xba\x3a\xd3\x3e\x27\x35\xf1\xc8\x75\x9d\xac\xc4\x8b\x28\x04\x78\x5d\x3d\x08\x30\xb0\x1e\x63\xf5\x46\x96\x36\xcf\x0b\x6d\xbd\x5b\xa6\xe5\x7a\x17\x34\x3a\xd7\xdc\x14\x47\xdd\xc4\x7f\xd6\xaa\x5b\x0d\x3d\x58\xe4\xb2\x23\xec\x19\xf0\xca\x7a\x10\x60\x68\x3d\x49\xae\xc3\xbc\x42\xb7\x0a\x4c\x0b\x4e\x3c\xd6\x3a\x11\xb6\x57\x8f\x29\xaa\xf1\x49\x79\x1c\x05\x49\xab\xf0\x94\x07\xc3\x82\xeb\x11\x14\x02\xbc\xb6\x1e\x04\x18\x5c\xef\xd8\xe8\x63\x99\x07\x57\x6f\xba\xd6\xfb\x3b\x9d\x58\xd5\x7f\xcd\xad\xb0\x67\xb5\xf6\xa7\x52\xfc\xb7\xdf\x77\x5a\x1b\xf2\x42\x3e\x93\xa0\x10\xe0\xd5\xf5\x20\xc0\xf0\x7a\x9a\x47\xe3\x12\x53\x89\xef\x57\x48\x64\x8b\x81\x6b\x5f\xdc\x3f\x0f\xbe\x7e\x35\xe9\xf3\xed\xe4\x5d\xed\x87\x11\x47\xf3\xf5\x6b\x6d\x51\x08\xf0\xfa\x7a\x10\x60\x80\x3d\xb6\xb7\x21\x7c\x54\x55\xa4\x9d\xb9\x29\x1a\x5d\xde\x01\x01\xa8\x96\xe3\x87\x17\x27\x51\x1a\x75\xa3\x76\xfa\x2b\x2d\x87\x04\xd9\x51\x08\xf0\x0a\x7b\x10\x60\x88\x3d\x69\x71\xcd\x3d\x0e\xd3\xf3\xdf\xb5\xad\x45\x2e\x9d\x10\xcc\x4d\xfe\xc1\xd9\x5c\xc2\xff\x2e\x9e\x8c\x7e\xf9\x7c\x98\x69\xfb\x38\xe1\xdd\xc5\x69\xec\xed\x84\x69\xb7\xd9\x75\x27\x4c\x18\x64\xef\xf1\xf3\xcd\x42\x1a\x41\xcf\xbd\x57\x7c\x78\xab\x55\x9e\x2d\xf3\xb2\x2a\xbe\x13\x79\x5d\xb5\xa2\x9e\xee\x6a\xf2\xd5\xe5\x87\x8f\x39\x0a\x01\x5e\x65\x0f\x02\x0c\xb3\xf7\xf5\xca\x50\xe7\xcd\x08\x1e\xbe\x59\xfd\x84\xf5\x7b\x11\x26\x26\x6a\x71\x17\x3f\xf6\xff\xda\x4b\x8d\xb4\x06\xfc\xf9\x6b\xbf\x4c\x78\x09\xf1\x3a\x7b\x10\x60\xa0\xbd\x50\xba\x4e\xeb\xef\xcc\x62\x80\xc2\x50\x6c\x8e\x26\xaa\xc6\x6e\xfa\x79\x66\xad\xc7\x1e\x86\x77\xee\xe4\xfd\x8e\x82\x4a\xdf\x08\xe3\x11\x5e\x69\x0f\x02\x0c\xb5\x17\xc9\x7b\x2a\x9c\x5b\x2a\xed\x43\x14\x95\x0d\x07\xfb\xad\xb4\x60\x05\xa3\xdb\xa2\xcf\x52\x89\x4d\x6d\x79\xaf\x75\xe8\xb0\xe6\xb9\xa0\x10\xe0\xb5\xf6\x20\xc0\x60\x7b\xa9\x2c\x54\xdc\x2a\x8d\x57\xb5\x2e\x18\xcc\xc6\xa6\x9d\xd8\x3e\xf7\x04\x70\xd7\x25\x2d\x6c\x5e\xf6\x0d\x17\xf4\x4a\x0f\xbc\x4d\x8d\x42\x80\x57\xdb\x83\x00\xc3\xed\x69\x25\xf3\x79\xf0\x32\xeb\x5e\xd9\xbf\x59\x75\x85\x8b\x38\xf8\xdd\x95\x3d\xa5\xcb\xbd\xa7\x57\x45\xb5\x88\x5c\xc2\x5b\x2e\x1b\x11\xc6\x3c\xbc\xde\x1e\x04\x18\x70\xaf\x5c\x47\x46\x46\x3f\x31\xf9\xe7\x63\xb0\x11\x7a\xd9\x69\x94\xb1\x4a\xe3\x05\xf2\xa9\xd9\xe1\x95\xaa\x8b\x90\x6d\x53\xcc\x33\x46\x14\x02\xbc\xe2\x1e\x04\x18\x72\x0f\x59\x36\x79\xf5\x67\x78\x73\x20\x72\xc3\xac\x3e\xf6\xa0\xec\x88\x87\x2b\x87\x49\x62\x0e\x6b\x96\xd4\xdd\xc7\xef\x53\x47\x62\x4c\x50\x08\x70\x9a\x7b\x3b\x61\xda\x6d\x77\xb7\x13\x26\x0c\xba\x27\x20\x56\x4c\xa2\x6c\x6d\x9b\xbe\xa6\x6d\xd1\x57\x7a\xdd\xee\x75\xc6\x73\xba\x89\xfb\x93\xf1\xda\xad\x7c\xda\x71\x83\x74\x1f\xdc\x51\x08\xf0\xaa\x7b\x10\x60\xd8\xbd\x2b\xf7\x6f\xd7\x28\xaf\x5c\x78\x14\x3c\x92\x34\xc8\x23\x51\xfe\xf0\xe2\x14\x49\xe3\x6f\xb9\x8a\xc2\xec\x41\xc6\x33\x55\x7d\x82\xde\x28\x04\x78\xdd\x3d\x08\x30\xf0\x1e\x45\xf1\x54\xf8\xab\xe0\xc0\x1c\xa6\x27\x92\xdd\x27\x49\xbe\x55\x18\x51\x67\xf1\xf1\x3d\xf5\x67\x77\xde\x8c\xf0\xa2\xf5\x39\x79\x1a\x85\x00\xaf\xbc\x07\x01\x86\xde\x8b\xdc\x73\x84\x79\xc6\x28\x4d\x5b\x67\xf5\x99\x01\x5d\xdb\x95\x46\xbe\xa2\xf8\xae\x0f\x8f\x0e\xf1\x7c\xaa\x59\x60\x5f\x3b\xa2\x25\x86\x42\x80\xd7\xde\x83\x00\x83\xef\x19\x1d\x34\xba\x3a\xfc\x2c\xa1\x71\xba\x2e\x85\x39\xd8\xde\xc7\xf2\x4a\x6d\xb5\xd4\xe1\xac\xfd\x39\x7b\xd4\xdb\x78\x5c\x29\x73\x65\x51\x08\xf0\xea\x7b\x10\x60\xf8\x3d\xe9\x47\x81\x71\xb5\x95\xb6\x34\xf1\x03\x80\x79\xca\xfa\x7b\xf8\x69\xf1\x6f\xf5\xac\xa7\x36\xde\x98\x3d\x7f\xff\xe9\xce\x9a\xe9\x49\x14\x02\xbc\xfe\x1e\x04\x18\x80\x6f\xe8\xbc\xca\x95\x42\x13\xcf\xb6\x2d\x31\x97\xfd\x56\x4d\xb7\x67\xf3\x7c\x3f\x3e\xef\x44\x22\x99\xf6\x5d\xdd\x10\x3a\x9d\x59\x4f\x18\xc1\xf0\x0a\x7c\x10\x60\x08\x3e\x5d\x4b\xbf\xc6\x57\x11\x0e\xf6\xcd\x17\xd5\x9e\xeb\xbb\xdb\x64\xbf\x5d\xd2\x68\x38\x2d\xff\x57\x7d\x3c\x77\xf6\xdc\xe4\x23\x0f\xc2\x7b\x85\xd3\xe0\xdb\x09\xd3\x6e\xe7\x1f\x3b\x61\xc2\x20\x7c\xf6\x6c\xae\xef\x7d\x63\xe5\xcb\x85\x5f\xe6\x9c\xd3\x5f\xde\x7b\xc1\x2f\x89\xf8\x6f\x58\x48\x45\xc1\x48\x47\x38\xb9\xf3\x72\x3a\x2b\x0a\x01\x5e\x85\x0f\x02\x0c\xc3\xf7\x91\x88\x8b\xaf\xec\x52\x46\xec\x51\x34\x79\xc0\xf0\x33\xe5\xc4\x81\xc1\x0c\x4b\x6e\xa7\x86\x82\xb4\x88\xba\xf0\xb6\xa1\x5e\xc2\x3e\x00\xaf\xc3\x07\x01\x06\xe2\xfb\x8a\x1c\x4f\x08\xca\xb6\x42\x26\x2d\x8f\x18\x7b\xf3\xfe\xbc\xa1\x76\xda\x5c\x38\x6e\xcb\xc1\x5e\xa6\x6e\xa3\xe4\x58\xc2\x63\xc2\x0b\x82\x57\xe2\x83\x00\x43\xf1\x3d\xa1\xaf\x63\x9c\xb4\x17\xe8\xdf\x7b\x43\x8d\x47\x95\xf7\x9a\xbe\xc1\x85\x71\x79\x09\x0f\x7d\xef\xf2\x57\x27\x92\x5b\x33\x4d\x94\x50\x08\xf0\x5a\x7c\x10\x60\x30\xbe\x55\x4a\x12\xee\xc9\xf6\xf2\x92\x04\x13\x26\xcf\xf5\xc9\xa8\x03\xb3\xcd\x9e\x11\x14\x63\x39\x44\x06\x6e\x57\x0d\x18\xc7\x2e\x71\xa2\x10\xe0\xd5\xf8\x20\xc0\x70\x7c\xf3\xf4\x5f\x39\x12\x29\x14\x82\x2e\xbe\xff\x29\x9e\xf8\xec\x16\x13\x37\x73\xba\xf3\xbd\x62\xb2\xfd\xcd\xe2\x6b\x6b\xb3\x8c\x81\xfc\x28\x04\x78\x3d\x3e\x08\x30\x20\xdf\xa7\x96\xd2\xd2\x93\xd6\x95\xe4\x8b\x34\xd6\x4c\x71\x3c\x7a\x5e\x0e\xdb\x5d\x81\xe7\x6d\x64\xaf\x79\x44\xa8\xc4\xf5\xfa\x1b\x3a\xa1\x10\xe0\x15\xf9\x20\xc0\x90\x7c\x01\x7f\x92\x5f\x8c\x68\xb6\x0c\xf5\x44\x27\xd5\x6b\xef\x11\x91\x7b\xcb\x16\xe1\x7d\xd9\xdf\xbd\xa8\x24\xc6\x80\xb7\xbb\xea\xd9\x05\x14\x02\x9c\x26\xdf\x4e\x98\x76\x3b\x21\xdc\x09\x13\x06\xe5\xbb\xe6\x37\x63\x91\xe9\xf1\xf8\x1d\xdb\x3b\xba\x1b\x77\xc7\x06\x38\x83\x6a\xa3\x0f\x3d\x34\xe4\x94\x73\x21\xcd\xec\x57\x6a\x56\x25\x45\x21\xc0\xab\xf2\x41\x80\x61\xf9\x86\xc7\xc2\xf8\x6a\xef\x08\xcf\xaf\xd3\xbf\xb5\xfa\x16\xba\x21\x78\xfe\xb0\x4b\xef\x08\x9b\x66\xa8\x68\xd6\xb4\x79\xc5\xb7\x5e\x72\x14\x02\xbc\x2e\x1f\x04\x18\x98\x8f\x96\xe8\x84\x59\xa8\xcb\xc4\x4d\xb1\x25\x49\xaf\x29\xc6\xcc\x36\x76\x1e\xfb\x3d\xea\x54\x01\xfb\x53\x0b\xbf\x24\xeb\x54\x73\x12\x3e\x3c\xbc\x32\x1f\x04\x18\x9a\xef\xef\xb0\xdc\x5e\x85\x93\xcf\xa9\xcc\x55\xd4\x42\x89\x57\x5a\xd0\x73\x49\x36\x9e\x1d\x45\x6d\x4f\x17\x45\xee\x22\x96\x72\x0f\xe5\x50\x08\xf0\xda\x7c\x10\x60\x70\xbe\x7d\x11\x2f\xfa\x1d\x33\x97\xd6\x44\x8e\xd1\x19\x1b\xb3\xf6\xbc\xe0\xd6\x16\x59\xd2\x89\xbb\xdb\xed\x67\x54\x58\xe9\x91\x5f\x78\x08\x85\x00\xaf\xce\x07\x01\x86\xe7\xf3\x67\xbc\x11\xe7\x17\xdc\xf3\xfe\xf3\x03\xf3\xde\x9a\x96\x38\xcf\x2f\xd3\x4e\xb1\x1c\xdf\xc1\x70\xed\x53\xee\x5c\xa4\x75\xcd\x12\x85\x00\xaf\xcf\x07\x01\x06\xe8\x23\x1a\xc8\xa2\x2f\x16\x3a\x25\xeb\x5a\x18\xa4\x7b\xb1\xbe\xbb\xda\x45\xea\x59\x1c\x89\x42\x40\xee\x53\x47\x57\xdf\xa7\x99\x5a\x54\x28\x04\x78\x85\x3e\x08\x30\x44\x5f\xd2\x7d\xfe\x1c\x3f\xd1\xe7\x87\x89\x88\x7b\xa6\xbb\x84\xfd\xab\xb3\xb9\x6a\xdc\x92\x39\xf7\x5d\x4b\xdc\x2b\x3c\xfb\x5a\xd8\xcb\x14\x85\x00\xa7\xd1\xb7\x13\xa6\xdd\xce\xd0\x77\xc2\x84\x41\xfa\x18\xf7\x50\x1b\x74\x37\x51\x76\xd6\x54\xa1\x82\xd7\xaf\x50\x09\x1a\x4f\x46\x73\x7d\xbf\xe7\x3d\xec\x9f\x51\x32\xfc\x99\x1c\xee\x43\x21\xc0\xab\xf4\x41\x80\x61\xfa\xde\x3f\xbd\x39\x34\x75\x8c\xae\x74\x22\xcf\xb3\xe4\xb5\x4d\x67\xaf\x70\x3d\xf7\x88\xf9\xf6\x1c\xff\xcb\x07\x07\x2d\x03\x8b\x9e\x9e\x40\x21\xc0\xeb\xf4\x41\x80\x81\xfa\x16\x15\x0e\x2e\x75\x8c\x90\x98\xa5\x32\x67\xc3\x26\x36\x8b\xc1\x07\xb6\x09\xc2\xe3\x07\xc3\x6b\x5f\xd0\x0c\x0c\xbc\x73\xa1\x22\x6c\x78\xf1\x4a\x7d\x10\x60\xa8\x3e\x91\xc6\xd2\xc6\xac\x8b\x7d\xbc\x53\x44\x46\xce\x63\xdb\xa7\x88\x28\x66\xda\x4a\x4d\x2e\xcb\x29\xf2\x96\x35\xb1\x6f\x12\xc5\x1a\xa0\x10\xe0\xb5\xfa\x20\xc0\x60\x7d\x7f\x14\xfb\x17\x90\x78\x05\x5e\xa3\xf1\xd5\x8e\xbd\xc7\x33\xcc\xea\x3c\xf9\xfe\xb8\x1d\x38\x2f\x47\x15\xff\x31\x95\x49\x69\x81\x05\x85\x00\xaf\xd6\x07\x01\x86\xeb\xeb\x18\x74\x72\x69\xf4\x90\x37\xa6\xab\xf1\x18\x5f\x93\x32\x24\x25\x16\x9a\xbe\xa4\x00\x9d\xed\x4d\x3a\xbb\x2e\x65\x91\x3d\xa4\x47\x21\xc0\xeb\xf5\x41\x80\x01\xfb\xc8\x25\x63\x62\x0c\xdb\x85\xae\x3d\x4f\x9a\xa2\x8a\x5d\x13\xfb\xfa\xe4\xa2\x5d\xc5\x79\x51\x3a\xbb\xf0\x5b\x1a\xf2\xa7\xa3\xf7\x11\x46\x30\xbc\x62\x1f\x04\x18\xb2\x4f\x60\xa3\xde\xf2\x27\x6b\xc3\xdf\xb1\x4f\x76\x07\x97\xea\x27\x33\x3a\xfa\xe3\x6a\xcf\x7e\x60\x38\x31\xfa\x55\xde\xfc\x6a\xf2\x3b\xc2\xfe\x12\xa7\xd9\xd7\x0b\xfe\x5f\x98\x2c\x7b\xb9\x06\xae\xce\x1f\xff\x59\xb1\x1c\x7c\xf7\x89\x51\xd4\x42\x36\xaa\x27\xd9\x86\x50\x3f\xe2\x20\xcf\xb0\x62\x77\xfa\xbb\x10\xa6\x42\x73\xfd\x9f\xfb\xab\xfe\x2c\x45\x06\x26\x79\x8d\xc7\x94\xfe\x22\x1b\xdd\x91\xaf\x3a\x86\x02\xcc\xaf\xb6\x15\x4b\x6c\xf8\xdd\xbd\xf4\x80\x27\xb0\x32\xf7\x9f\xd2\x9c\xf2\x17\x14\xf1\x6b\xbc\xd9\x83\x1b\x83\x6a\x3a\x97\xac\x39\x8f\x86\xd3\xec\x35\xfb\xca\x3d\x71\x8e\xf9\xc3\xe5\x87\x85\x89\xff\x7e\xb1\xce\x5a\x43\x85\x5f\x59\x6a\x73\x35\x39\xc8\x56\x44\xa1\x76\xe8\xd6\x32\x51\xac\x46\xfc\x4b\xa3\x1e\xb3\xa2\x7d\x7c\x6f\x3a\x2a\xff\xbd\x96\xbb\xa2\x79\xce\x32\x58\xce\x4f\xd6\x4a\x9a\x84\x46\xf5\xa5\xa6\xd8\xcf\x2f\xec\xfb\x1f\xd9\x06\xf7\x1f\xca\x6b\xad\xa9\x76\xfa\x63\x1b\xb2\x73\x8b\xb9\xdb\xff\x29\xe6\x16\x33\x54\xed\x52\x4f\xd1\x49\x8b\xc2\x0b\x16\xba\xcb\x63\x56\x7c\xbe\xc2\x7b\x8e\xbf\xb3\x7c\xe0\xf3\x25\xea\x89\x75\xbb\x33\xc3\xfe\x7f\xff\x90\xa7\x57\xc1\x44\xc4\x15\xe5\xe3\x5d\xb5\xc4\x7f\x73\xc6\xdf\xb2\xdf\xd3\x63\x7c\x72\xe4\x52\xc3\x90\x96\xd9\xa2\x18\x09\x47\x7b\xfc\xbf\x5f\x59\xbc\xe8\x1b\x13\x98\x63\xc6\x78\xb2\x4f\x69\xf3\xf6\x5a\xd2\x43\xf5\x37\x2a\x49\x2a\xef\xb6\x3a\x88\x4e\x8f\xf5\xd9\x6a\xde\x0d\x2d\xfe\xa7\x54\x83\x28\x48\x37\x63\xa8\x77\xd1\xc4\x81\x93\xa3\x52\x4e\x95\x26\xd2\xe8\x21\xd1\x15\xad\x37\xa7\xce\x6b\x2b\x56\xdd\xff\x9c\x83\xfe\x53\xfa\x36\x89\xb7\xe7\x32\xc5\xa8\xc3\xe0\xab\xe6\x0e\x21\xa9\xbe\x67\x94\xc6\xea\x9f\x1e\xab\x88\x7e\x51\x7e\x20\xa1\x45\xfa\x72\xdb\xef\x9f\xd2\xcf\xfa\xe8\xb1\xfd\x1c\x7e\x86\x97\x26\xbc\xf7\x3e\xfe\xf5\x52\x77\xe5\xee\x1c\x31\xe7\xac\xaa\xe1\x53\xe6\xf8\x3e\xf3\x19\x56\xb1\x7f\x4a\xf3\x8b\x75\x3d\xbb\xde\x1a\x6f\xd8\x2d\xac\x0a\x51\xdc\xd8\x93\xe4\x7b\x60\x64\x8e\xae\x25\x52\xc9\x7c\xf5\xf3\xe7\x7e\xdf\x93\xf0\xdf\x52\x3d\x93\xb2\x3d\x1b\x36\x5f\x59\xa7\x0e\x65\x28\xab\xcc\xe5\x54\xb2\x1c\x10\x0a\x0a\xe7\xd8\x2b\x18\xe1\x11\x50\xee\x4a\x23\xf5\xbf\x5b\xcc\xdd\x9e\xea\xff\x6f\xd5\x08\x06\x23\x1c\x6d\x59\x34\xbe\xee\x12\xcd\x3a\xa8\x72\xaf\xc3\x6f\xfc\x32\xcd\x15\xfa\xf0\xf8\xbe\x0d\x9a\x73\x44\x2a\x29\x5c\xa9\x3d\xa5\x8c\x28\x44\x70\x63\x84\x08\x06\x23\xf4\x5e\x4b\xce\x67\xed\x5e\xe2\xd7\xe4\x94\xf7\x39\x12\xe4\x21\x1b\xc4\x66\x6b\xc6\xef\x51\xf9\x57\xc2\x2b\xda\xa0\x4d\x60\x51\x03\x85\x08\x6e\x8c\x10\xc1\x60\x84\xf4\x0a\x24\x39\x02\xe4\xf6\x4e\x67\x6f\x88\x8e\xd4\x13\x7d\xcb\xfe\xf6\x38\x34\x8d\x4d\xe7\x81\xe3\xe4\xfe\xce\x96\x64\xea\xcd\xfd\x28\x44\x70\x63\x84\x08\x06\x23\xb4\x72\xfa\xd9\xef\x38\xc2\x91\x91\x46\x26\x98\xce\xc8\xb8\xa2\x97\xc2\x36\x3b\x30\x51\xff\xc2\xa6\x6f\xbd\x49\x0e\xd8\x5c\xf0\x40\x21\x82\x1b\x23\x44\x30\x18\x61\xe5\xfb\x29\x4d\xe9\x37\x66\x7c\x76\x41\x9d\x7f\x4c\x8e\x26\xbf\x5e\x53\x28\xdc\x47\x9d\x2f\x41\x34\x5e\xf8\x31\x25\x6f\x6a\x89\x15\x85\x08\x6e\x8c\x10\xc1\x60\x84\x72\xce\xc1\x1b\x9c\x0e\x9f\xc7\xbc\xec\xa1\x5f\xf2\x82\x1d\x5f\xdb\x1d\xb7\xf7\xa5\x3f\x4f\x94\x8d\xb5\xba\x56\x25\xae\xa2\x07\x50\x88\xe0\xc6\x08\x11\x0c\x46\xc8\x78\x4e\x62\x9a\xe5\xdc\xa6\xf7\x18\xd3\x90\x5d\xd4\xb9\x89\xb7\x54\x99\x2a\x8a\x32\x4f\x47\x8f\xcb\x16\x34\xca\x4c\x6f\xd0\x1a\xa0\x10\xc1\x8d\x11\x22\x18\x8c\xf0\xeb\x8a\x53\x42\xf3\xd9\xcb\x5c\x55\xe7\x59\x57\x63\x7a\x65\x0c\xeb\xeb\xcf\x68\x58\xaf\xa4\xd4\x45\x35\xbf\xce\x69\xf9\xdb\x62\x8f\x42\xe4\x3f\x62\x84\xbb\xf5\x9d\x9d\x30\x61\x30\xc2\xf8\xe0\x68\xeb\x9b\x8f\xf2\xa9\x96\x9d\x34\xdd\xfc\x44\x66\x87\xa3\xc6\x98\x6d\x2f\xc9\x2a\x04\xe6\xb5\xdd\x78\xb2\xaa\x94\x60\x85\x42\x04\x37\x46\x88\x60\x30\xc2\x59\xff\x49\xc3\x96\x6f\x4f\xec\x16\x14\x9f\xbc\x50\xfb\xf0\x91\x76\xc6\x86\x5f\x9c\xc6\x5b\xb7\x55\xf4\x37\x12\x47\x72\x63\x5d\x15\x85\x08\x6e\x8c\x10\xc1\x60\x84\x4f\x17\xa8\x82\x26\x84\xbe\x3d\x51\xe0\xf9\xd0\xef\x31\xf6\x5c\xfb\x7a\xa6\xd8\xe4\xb4\xe4\xa4\xc4\x58\xd9\x72\xe7\xdb\x68\x45\x67\x14\x22\xb8\x31\x42\x04\x83\x11\x9e\x48\x9a\x3d\x2a\x42\x6a\xdc\x75\x88\x59\x2c\x53\x6b\xe9\xc7\xe0\x46\xa7\x2c\x75\xec\xaa\x79\xa2\xe1\x51\xfd\x40\x9b\x45\x4e\x5a\x14\x22\xb8\x31\x42\x04\x83\x11\x96\x1d\x36\xfa\xf5\xc1\xce\x25\x2e\x50\x6b\xdc\xaa\x91\x48\x49\xe6\xe9\xa6\xab\x71\x80\x6c\x71\xa9\xc5\xfe\xe4\x5c\x61\x1d\x04\xa0\x10\xc1\x8d\x11\x22\x18\x8c\x50\xfc\xcb\xeb\xb1\xd4\x77\x44\xd2\xd1\xd7\x54\x5c\xcf\x31\xd3\xc4\xac\x16\xfa\xcf\x10\xf1\x1b\xcf\x91\xeb\x6c\xbf\x16\x82\x72\x47\x50\x88\xe0\xc6\x08\x11\x0c\x46\xd8\xfb\x5a\xc5\x5d\xdf\xaa\x2c\xaf\xc8\x2b\x45\xa0\xea\x96\xbd\xde\x90\xfc\xd6\x33\xc9\xe8\x26\xcb\x32\x44\x65\x2e\xf2\x76\x8f\x29\x0a\x11\xdc\x18\x21\x82\xc1\x08\x13\x7a\x87\x2c\x55\x96\xbf\x8f\x1e\x9d\xd8\xeb\x52\xab\xf2\xbd\x7b\x75\xf2\x6a\x1c\x9b\x98\x75\x2d\x85\x32\xb9\x60\xa4\xf2\xcf\x4b\x28\x44\xfe\x23\x46\xb8\xdb\xca\xbc\x13\x26\x0c\x46\x18\x5c\x82\xac\xc7\xc8\xd9\x3d\x09\xb0\x57\x10\xbd\x2d\xab\xcd\x91\x85\x34\x4f\xf5\xb3\x18\xcb\x5c\xad\xbb\xd1\xca\xef\x82\x9c\x42\x21\x82\x1b\x23\x44\x30\x18\xe1\xa6\xe3\x45\xe4\x96\x42\x0a\xc9\x7c\xc9\xcd\x92\xcb\xf6\x46\xe9\xb9\xec\x14\x09\x5e\xcd\x03\x7d\xe9\x8f\xa2\xe7\x52\x69\xca\xcd\x50\x88\xe0\xc6\x08\x11\x0c\x46\x38\xc5\x5c\x96\xe6\x50\xb0\x32\xb7\xe1\x27\x16\xf4\xd5\x8a\x8b\xb4\x9a\xd3\xa5\x1f\x1d\xaf\xca\x7d\xe2\x4c\x7b\xfb\x10\x9d\x11\xa1\xa3\xe3\xc6\x08\x11\x0c\x46\x38\xf9\x7e\x98\x65\xb5\x40\x35\xea\x8a\x8e\xde\xf2\x9c\x3a\x53\xe4\xf1\xa7\x06\xb5\x2f\xd7\x83\x98\x99\xf6\x6c\x7e\xaf\xfb\x26\xaa\x88\x42\x04\x37\x46\x88\x60\x30\xc2\x73\xe1\x85\x73\xdb\x67\xed\x7a\xd4\x0c\xde\xd0\x5c\x5d\x72\x7b\x7a\x96\xad\xec\x88\xb5\xb2\xd2\xc5\x5e\xe7\x25\x45\x53\xfd\x90\x0b\x28\x44\x70\x63\x84\x08\x06\x23\xac\x6f\x10\x25\x8e\x4f\x81\x07\x13\xcf\xfe\x09\x6d\xc8\x88\x7d\x1d\xa5\xc1\xe7\x57\x7c\xdf\xd6\x6f\xcd\xfb\xd5\xe6\xf1\x6c\x15\x6b\x14\x22\xb8\x31\x42\x04\x83\x11\xb2\x5a\xeb\x45\x51\xd3\xeb\xca\xb8\xb8\x37\x2e\x1d\xff\xe6\xac\xc7\xc2\x57\x30\x46\x77\xe5\x75\xfd\x3e\x13\xc6\x75\xa5\x76\x79\x15\x14\x22\xb8\x31\x42\x04\x83\x11\x26\x14\xf2\x70\xdd\xd4\x18\x46\x2a\xe3\x69\x66\xbd\x5f\x71\xaa\x6c\xba\xc9\xbd\x68\x19\xe4\x92\x39\xb1\xa1\x47\x51\xd5\xfe\x82\x30\x55\xfd\x47\x8c\x70\xb7\xd9\x75\x27\x4c\x18\x8c\x30\xf1\xac\x6b\x88\xde\xd2\xcd\x34\xf2\x41\x0b\x5a\xd6\x73\x71\xb2\x3c\xfb\x22\x17\x7d\xdd\x7c\x4f\x15\x4a\x56\x50\x0f\xd0\xcb\x7a\xa2\x10\xc1\x8d\x11\x22\x18\x8c\x70\x49\x77\x8f\x8f\x9a\xc7\x28\xc3\x84\x6a\x74\x9b\x43\xe8\xd5\x03\x25\xcb\x31\x94\x7a\x5b\xec\x79\x44\x5d\x7b\x52\x6d\xaa\x24\x09\x2b\x13\x6e\x8c\x10\xc1\x60\x84\xb9\x67\xcd\xe1\xad\xa5\x1f\xae\xb4\x62\x4f\x5a\xc3\x8b\x3c\x69\xdd\x78\x42\xb7\x6f\x20\xa2\x55\x3d\x0e\xd5\x7f\x19\x69\xe3\x44\x50\x88\xe0\xc6\x08\x11\x0c\x46\x68\x6a\x46\xcb\xb3\xf8\xf7\x89\xd1\xef\x9e\x12\xef\x46\xc0\xdd\xd3\xbf\x12\x68\x78\x23\x5c\xa6\xe7\x3b\xe9\x33\xd9\xdc\x67\xd7\x75\x50\x88\xe0\xc6\x08\x11\x0c\x46\xa8\x2d\x67\x70\xfc\x6f\x1b\x14\x12\x79\x95\x3b\xfb\x7b\xda\xb2\xe3\x60\xe4\x46\xe1\xde\x09\xd5\x76\xf3\x8b\x4d\x19\x56\x06\xe4\x36\x28\x44\x70\x63\x84\x08\x06\x23\xf4\x3a\x60\x58\xda\x62\x1f\x7c\x86\xeb\x50\xd4\x72\x71\xda\x58\xf8\x75\x5e\x3d\xc6\xc8\x84\xdf\x3e\x4a\xea\x3f\x4f\x6f\x7f\x24\x21\x8c\x79\xb8\x31\x42\x04\x83\x11\xc6\xd4\x5f\xe6\xba\x3b\xd0\x33\x3f\x99\x20\x67\x5b\xd5\x80\x20\x9e\x47\x9b\xd7\xe8\xa6\x36\xc5\x9f\xbc\x73\xe2\x1c\x92\xf1\x64\x46\x21\x82\x1b\x23\x44\x30\x18\xa1\x8f\x58\xc8\xd0\x11\xa7\x47\xb7\x1b\x56\xd4\x0b\xc5\x2d\xe7\x6d\xcb\x87\xfb\x90\xed\xb6\x13\xc7\xab\x95\x8d\xbe\xc9\x5c\x53\xf2\x46\x21\xf2\x1f\x31\xc2\xdd\x76\x77\x3b\x61\xc2\x60\x84\xe5\x42\x2f\xbc\xd9\x2e\x7c\xac\x3c\x16\x24\x7f\x55\x2d\x29\xb4\xbd\x57\xb5\x72\x21\x22\xa3\xee\xae\xcf\xf3\x00\x0b\x47\xed\x97\x52\x28\x44\x70\x63\x84\x08\x06\x23\x34\xfb\x6c\x5f\x49\x3e\xfb\x82\xf5\x84\x87\x15\x9d\x05\x0b\x45\x84\x73\x72\xd4\xd7\x53\xd2\x64\x41\x31\x37\x26\x6b\x64\xf8\x0e\x13\xba\x14\x6e\x8c\x10\xc1\x60\x84\xb9\x6f\x4e\x41\x2a\x62\xbb\x8f\x7e\xf9\x35\x8b\xd6\xc5\x42\x2a\x21\xf4\x34\x32\x1b\x12\xd5\x9c\x35\xac\x7d\x6a\xf2\x8a\x8e\x84\x2e\x85\x1b\x23\x44\x30\x18\xa1\xe6\x28\x7f\xe0\xcd\xc6\x9c\xf8\xc4\xd3\x56\xe5\x32\x4f\xff\x30\xda\x1b\xf6\x53\x3c\x30\x60\xa6\x92\xbf\x0d\x0d\x36\x26\x4f\x9f\x45\x21\x82\x1b\x23\x44\x30\x18\xa1\xc6\xd5\x59\x2e\xed\x49\xcb\x95\x40\xf6\xa9\xc0\x7e\x3e\x12\xfb\x7e\x74\x61\x71\xa5\x3c\x80\xc4\xe5\xab\xea\x8a\xec\xf6\x59\x6a\x14\x22\xb8\x31\x42\x04\x83\x11\xc6\x9d\x52\x2a\x9e\x58\x4e\xa3\x92\xf5\xd7\xb2\xcb\x54\xd1\x74\x0a\xbc\x50\x2c\x3d\xfa\x98\x2e\x6b\x90\xf5\xfb\x08\xbd\x1f\x9f\x2e\x0a\x11\xdc\x18\x21\x82\xc1\x08\x5f\x19\x39\x1b\xaf\x43\x1d\x29\xb3\x50\xce\xc8\x66\xc4\x8c\x58\xec\xf9\x10\x75\xe3\x90\x61\x8c\xe5\xfe\xf4\x33\x7f\x19\xba\xb9\x50\x88\xe0\xc6\x08\x11\x0c\x46\x18\xb7\xb6\x35\x42\x1a\xba\x37\x5e\xff\x80\xab\x10\x51\xb2\xec\x68\xda\x52\xbc\x20\x4f\xe5\xc8\x7a\xf8\xfe\x33\x97\xaa\x89\xbd\x08\x0d\xf4\x3f\x62\x84\xbb\x9d\x7f\xec\x84\x09\x83\x11\xea\x5e\x55\x4e\xa9\x4b\xa1\xb6\x21\xbf\x93\x4c\x6e\x33\x77\xab\xaf\x22\xcc\xdb\xfe\x6f\x1c\x4b\x79\x7c\xb6\x6a\xf3\x5d\xf2\x42\x1e\x14\x22\xb8\x31\x42\x04\x83\x11\xe6\x78\x33\x73\xeb\x33\xf7\x3c\x75\xfb\xf5\x5e\xeb\xb8\xae\xee\x10\xba\x22\x43\x5b\x12\xe0\x6e\x20\x35\xfe\xd6\x8a\xeb\xca\x63\x0e\x14\x22\xb8\x31\x42\x04\x83\x11\x7a\x5c\xd5\xed\x55\xb9\x77\x90\x42\x6f\xe8\x95\x6e\x99\x72\x62\xe3\xdd\x3b\xae\x5e\x12\x95\x56\x3f\x4b\xbf\x8f\x23\x2b\x61\x55\xa7\x51\x88\xe0\xc6\x08\x11\x0c\x46\x58\x7e\x75\x71\x8e\xec\xe0\xa0\xf6\x87\xc0\x17\x4b\x7b\x13\xa8\xdd\xa8\x6a\x96\x97\xb8\x3b\xba\xff\x46\x35\x0a\xd8\x3f\x65\xa1\x17\x40\x21\x82\x1b\x23\x44\x30\x18\xa1\x8e\x40\xba\xf7\xb0\xa0\xe0\xd1\x4f\x49\xae\xbf\x2b\xe4\x6e\xfd\x5c\x3b\xd4\xd4\x5b\x6e\xa4\x46\xdf\x79\x8a\xbb\x98\x39\x8c\xe1\x20\x0a\x11\xdc\x18\x21\x82\xc1\x08\xc7\x0d\xb4\xcf\xd2\x30\x1c\x55\xab\xf2\x29\xa5\x90\xaa\x09\x2d\xad\x3e\x7c\x22\xb2\x9b\xf8\x4e\x5a\x69\x7b\x78\x8c\x1c\x15\xf7\x19\x14\x22\xb8\x31\x42\x04\x83\x11\x86\x71\x9f\x34\xfb\x7e\xc0\x61\x94\x64\x80\x6a\xcd\xfa\xe4\xe6\x59\x11\x8f\x90\x27\xad\xdc\xf7\xd8\x4e\x24\x71\xbf\x95\x1b\xa2\x77\x47\x21\x82\x1b\x23\x44\x30\x18\xe1\xb3\xb5\xd4\xba\x99\xc9\x9b\x61\xfc\xba\x46\xf5\x11\xa6\x4e\xac\x05\x22\x8e\xe2\x87\xa4\x43\xba\x1d\x4d\xac\x2a\xcf\x0f\xf5\x72\xa3\x10\xf9\x8f\x18\xe1\x6e\x27\x84\x3b\x61\xc2\x60\x84\xeb\xfa\xfc\x4a\x01\x0b\x3f\x2a\x3b\x5c\xb9\x2f\x04\x5c\x97\xca\x79\xbb\xaf\xe2\xfb\x20\xf5\xcf\x5b\xe1\x4f\x5b\x6d\x32\x6e\x9a\x1b\xa2\x10\xc1\x8d\x11\x22\x18\x8c\xd0\x5c\xba\x84\x66\x9b\xf8\x47\xce\xcd\x5b\x94\x65\x54\x1f\xb7\xc4\x5f\xcf\x16\x37\x8e\x9d\x55\x3c\x10\x4c\x21\x77\x44\xf6\x8e\xfc\x1e\x14\x22\xb8\x31\x42\x04\x83\x11\xf2\xa5\x18\x16\xb3\x55\x88\xd5\xfe\x9a\x67\x28\xde\xa2\x8c\x4a\x2f\xdd\x92\x71\x56\x77\x65\x52\x7d\xf9\x49\x34\xd9\x92\xd2\xc0\x03\x85\x08\x6e\x8c\x10\xc1\x60\x84\x5e\xc2\x6f\xaa\x0b\x49\x8f\xc6\xa5\xf7\x7e\x76\x7a\x62\xfb\xd9\xe7\x08\x6d\xf6\xa6\xcc\x03\x99\x8b\xf4\xb4\x97\x38\x95\x29\x36\xf4\x51\x88\xe0\xc6\x08\x11\x0c\x46\xa8\xd9\x5d\x63\xea\x75\xf8\x51\x7e\x66\x6b\x7c\xff\x19\x2a\xb6\xc1\xc6\xcf\x61\xe1\xf7\x28\xcc\x9c\x17\xde\xf2\xfc\xfa\x33\x18\x7f\x08\x85\x08\x6e\x8c\x10\xc1\x60\x84\x82\xd3\xf9\x7a\x54\xd1\xdc\x7d\xf9\x3c\x76\x6c\xc1\x44\x03\xeb\xe7\x03\x3b\x7b\x7a\x85\x5b\xe8\xf3\x89\x5f\xb1\x6e\x47\xc4\x11\x5e\x74\xdc\x18\x21\x82\xc1\x08\x53\x8d\xa8\x8c\x3a\x52\xfe\x6e\xba\x74\x64\xcd\x56\x95\xf4\x98\xf6\x2c\xff\x58\x36\x25\xcd\x7a\x6c\xe9\x49\xfd\x54\xa2\xc6\x85\x1d\x85\x08\x6e\x8c\x10\xc1\x60\x84\x3c\x66\x47\x24\x2e\x67\xde\xbe\x32\x26\xf6\x10\x1d\x57\x5a\x99\x6b\x66\x8d\x57\xfe\xb8\x21\x48\x63\x5c\x6b\xcc\x9f\xa0\xe9\x6c\x84\x42\xe4\x3f\x62\x84\xbb\x9d\xa1\xef\x84\x09\x83\x11\x86\x06\x49\xa7\xa8\x9d\xb7\xe8\x53\xfa\x3b\xcf\x5d\x60\x53\x98\xeb\x9e\xfe\xf9\x88\x8a\xb1\x06\xd9\x85\x77\x6f\x2f\xa6\x0e\x86\x33\xa0\x10\xc1\x8d\x11\x22\x18\x8c\xf0\xa5\x98\xa1\x72\xde\xfd\x54\x29\xe5\xc3\x0d\x83\x83\x4c\x94\x8f\x84\x83\x3e\x77\xbc\xf9\xd3\xc0\x66\x71\x37\xdf\x34\xfc\x6d\x1b\x13\x0a\x11\xdc\x18\x21\x82\xc1\x08\x1d\xcf\xf8\x72\xdb\x90\x7a\x85\xed\x55\x75\xf4\xfb\x10\xf2\x47\xd5\xae\x5c\x7a\x41\x33\xdf\x78\x63\x45\xf7\xf5\x29\x6b\x95\x77\x32\x28\x44\x70\x63\x84\x08\x06\x23\x94\xa5\x6e\xe4\x59\x6b\xef\xf4\xb6\xb9\x79\x7d\xf9\xf7\x51\xaa\x8c\xbe\xe1\x8e\xa8\xaa\x3b\xa9\x19\xfa\x54\xda\xd2\x8b\xb1\x19\x2c\x28\x44\x70\x63\x84\x08\x06\x23\x6c\x21\x13\xe4\x24\x11\x72\xf1\xf5\x28\x24\x23\xba\x46\xb7\x49\x4b\x9d\x18\xe1\xf8\xfe\x96\xb5\x86\x41\xf4\xac\xe7\xbc\xb4\x3b\x61\xd5\xc0\x8d\x11\x22\x18\x8c\x90\x37\x96\xdf\x6f\xb1\x07\x64\x7e\xa6\xff\x93\x77\xaa\xbc\xac\xb1\xd7\x69\xdd\xcc\x55\x88\x68\x64\x90\x58\xd8\xe1\xea\x38\x09\x61\x0f\x8b\x1b\x23\x44\x30\x18\xa1\x63\xf8\x32\xd9\xba\xdb\x64\x3b\x65\x11\x05\xd1\x40\xb3\x5e\xf1\x77\xa1\x8c\x23\x9a\x87\xdd\x43\x7b\x35\x9c\xa7\x0c\x4b\xa5\x6d\x51\x88\xe0\xc6\x08\x11\x0c\x46\x58\xaf\xf8\xb6\x37\x74\x53\xdb\x39\xeb\x90\x8c\xfb\xfd\x91\xca\x80\x3a\xc6\xc9\x6f\x65\xd5\xa2\xa2\x9d\xf2\xd9\x48\xf8\xba\x23\x40\x21\xf2\x1f\x31\xc2\xdd\xee\x1a\x31\x97\x7d\x0b\x6e\xfc\x21\xb1\x31\xdb\xda\x69\x34\x22\x6f\x92\xd7\x2f\x0c\xdc\x91\xb1\x3b\xa9\x7a\xe2\x2f\x89\x1d\xfd\xf6\x6d\xaa\x57\x65\x65\xff\x94\xb6\xcd\x5f\x0a\xd9\xb6\xdb\xf7\x5c\x53\x9a\x48\xfc\x2d\xf3\xa8\x22\x2d\x2b\xdd\x6f\xb2\xf7\xa6\x6c\xfd\x97\x4e\x9c\x97\xb5\x35\xef\xfc\xa7\xf4\xfc\x11\x83\x17\xe7\xee\xfd\x1c\xcc\x38\xb2\x74\x83\x71\x8d\x6c\xc1\x7c\xfa\xb6\xea\x79\x9a\xe1\xf1\xa6\x80\x32\x6d\x41\xda\x50\xe3\x7f\x4a\x59\x28\x29\xc2\x9a\x2c\x25\x4f\xfd\x78\xe4\xee\xaa\x55\x28\xc6\x33\x3c\xd8\xad\xaf\xcd\x50\xc1\x51\x57\x73\x5f\xd7\x7f\xa3\x85\xf9\x9f\xd2\x14\xca\x1f\x01\x86\x91\xdf\x27\x38\x0d\xfd\x86\xe4\x67\x5c\x4d\xfc\x33\x6e\x4d\x28\x0a\x2f\x56\x05\xde\x0d\x66\xe8\xb8\x68\x3a\xf1\x4f\xa9\x52\x37\xb7\xcf\x0b\x44\x80\xdd\xeb\x87\x40\x17\xa9\x8f\x97\x9d\x52\x8c\x40\x03\xf1\x80\x2b\x7a\x76\xee\x45\x53\x01\x22\x16\xf5\x4f\x69\x45\x05\x5f\x69\x82\x52\x74\x7b\xdb\xdd\xc7\xfa\x3e\xc4\xc6\x1d\x3e\x69\x72\xfa\x53\x0c\xb7\x89\xab\xe6\x03\xf8\x17\xe2\x14\xbe\xfc\x53\x1a\x12\x7b\xad\xc4\x4d\xb1\x2d\xa6\x65\xf1\x36\x0f\xaf\x5e\xd8\xe6\xdc\xc8\x2c\xa9\x80\xb7\x25\x69\xbb\x15\x51\xbe\x75\xac\x6f\xd8\xff\x2e\xfb\x76\x7b\xaa\x3b\x1d\x0d\x83\x11\x6e\x8f\xc9\x71\xdc\x79\x12\xa0\xb0\x54\x79\xa6\xd6\xa4\x2a\x7e\xed\x61\x91\xca\xa1\xc7\xa5\xd7\xe6\x6e\x4c\xd8\xfa\x4c\x86\x5b\xd9\xa1\x10\xc1\x8d\x11\x22\x18\x8c\xd0\xe2\x8c\x9e\xc6\x64\xae\xf8\x14\xe9\xf8\x1d\x9d\xc6\x3e\x86\x3c\x26\xed\x64\xaf\x18\x0f\x5f\xee\xd3\xee\x76\x8b\xf4\xd4\x37\x08\x4b\x05\x6e\x8c\x10\xc1\x60\x84\xf6\x57\xab\x36\x3f\x53\x76\x7d\x4a\xf5\x3f\xf4\xbc\xce\x40\xa4\xe3\xbb\x99\xc3\xec\x09\x1f\x31\x8d\x9f\xb3\x9b\xe3\xfe\x02\xae\x17\x51\x88\xe0\xc6\x08\x11\x0c\x46\xb8\x74\x73\x99\xff\x59\x5d\xa6\xeb\xdf\x2f\xe7\x47\x46\x02\x06\xed\x16\xbb\x6f\x66\xb7\x66\x1e\xe3\xaa\xbd\xa7\x7f\xc2\x8e\x81\xc8\x1b\x85\x08\x6e\x8c\x10\xc1\x60\x84\x02\x6f\xb3\xf7\x7f\xf9\x3e\x20\xf4\x61\x39\xc9\xe8\xaf\xc9\x93\x4f\x7e\x50\x95\x25\xf3\x99\xd7\xb7\x9e\x95\x07\x09\xbc\xc3\x71\x42\x28\x44\x70\x63\x84\x08\x06\x23\xac\x7e\x23\x66\x4a\xf3\xbc\x54\x7a\x79\x98\x63\xe9\x4d\xbf\x43\x46\x7b\x72\xed\x5a\xd1\x9f\x14\xc7\x43\x6a\x23\x9d\x19\x79\x5c\x54\x28\x44\x70\x63\x84\x08\x06\x23\x5c\x2f\x6a\x96\xb6\x76\x1b\x09\xed\x48\x8b\xe0\x0d\x94\xbc\x30\x0f\x63\xda\xcd\xd9\xae\x73\x76\x73\x3d\x67\x79\xc6\xca\xfc\xee\x04\x0a\x11\xdc\x18\x21\x82\xc1\x08\xd5\x54\xd4\x89\x84\xf3\x44\xc6\x25\xbb\xf9\x23\xe3\x90\xc2\x37\x4f\x66\x2b\xf8\xca\x03\x5e\x5a\xdc\x38\x6f\x66\xfc\x98\x42\x77\x1f\x0a\x91\xff\x88\x11\xee\xd6\x77\x76\xc2\x84\xc1\x08\xa9\x25\x75\xa9\x90\x6a\x3a\xa2\x22\x9b\xde\xb2\xc6\x82\x55\xda\xb8\xfb\x53\xe1\x93\xcb\x96\xd6\x54\x9d\x55\xe9\xb9\xe9\xb1\x94\x28\x44\x70\x63\x84\x08\x06\x23\x0c\x89\xe5\x0d\x1f\x0c\x7e\xac\xf9\xed\xae\x9e\x75\xbc\xc9\x21\xaf\x88\xa6\x11\xe1\xd0\x08\x05\x99\xa7\x7f\xd0\xde\xf4\x54\x9a\x93\x28\x44\x70\x63\x84\x08\x06\x23\xf4\x9f\x8a\x15\xf0\x39\x62\x59\x70\x6a\x38\x55\x7d\xbf\xa3\x7c\x62\x6a\x81\xf4\xc4\xa9\xfb\x3a\xa7\x5d\x62\x3f\x85\x0b\xa9\x48\x1f\x41\x21\x82\x1b\x23\x44\x30\x18\x61\x47\x52\x91\xc0\x06\x54\xa3\x69\xb9\x26\xeb\xe3\x5f\x17\xe4\xc6\x00\x2e\x98\x07\x3a\xe9\x30\x84\x92\x1f\x32\x59\xda\x47\x74\x1c\x85\x08\x6e\x8c\x10\xc1\x60\x84\xa4\x3e\x35\x54\x93\x9e\x47\xdf\x5f\x90\x8e\x2b\xb8\xf2\x42\x52\x7c\xc5\x91\x9f\xd1\x84\xcc\xea\xb6\xec\x9e\xce\xc2\x86\x0c\x6f\xc2\xcf\xc0\x8d\x11\x22\x18\x8c\xb0\x25\x82\x36\xb2\x39\xf7\x29\x37\xe5\x25\xaa\x2b\xad\xa2\xb7\xc5\xb6\x9f\x9c\xe2\xf2\xbd\xf6\xe7\x83\x71\x31\xdd\x75\x62\x51\x43\xc2\x86\x0f\x37\x46\x88\x60\x30\x42\x4e\x13\x69\xdf\x29\x1d\xaa\xb8\x36\x6e\x0f\xf2\xad\x1a\x72\x47\xaf\x64\xca\x28\xdf\x91\x3f\x79\xf5\xd9\x21\x7c\x09\xc1\xaa\x74\x28\x44\x70\x63\x84\x08\x06\x23\x6c\x59\x38\x30\x20\xd2\xba\xbc\xb7\xe5\x0b\x51\x97\xbe\xb5\x35\x99\x80\xd8\x06\x65\xa1\x4e\xe7\xd3\x3a\x8d\x64\xf6\xbd\xea\x8e\x16\x28\x44\xfe\x23\x46\xb8\xdb\xca\xbc\x13\x26\x0c\x46\xd8\x50\xe3\xf5\xed\xa7\x5e\xb4\xa3\xaf\x47\xdb\x5b\x51\x39\xe3\x47\x7d\x39\x74\x0b\x79\xa3\xc9\xfb\x3f\x9c\x3b\xfb\x41\xfc\xd7\x0b\x41\x14\x22\xb8\x31\x42\x04\x83\x11\xae\xf1\x16\x56\xa5\x5f\x97\xd4\x17\xa0\x59\x0d\x3f\x90\x7d\x6f\x2a\x4c\x5d\x3a\xf6\xcd\x62\x94\xaf\xe1\xdb\xf3\x54\x93\x66\x96\x84\x8e\x8e\x1b\x23\x44\x30\x18\xe1\xa7\x21\x5d\x1b\x86\xfa\xab\x81\x88\xe4\x8f\x65\xde\xfc\xa3\x8c\x37\x0c\xd4\x03\xcb\x18\x17\x6a\x17\x55\xc7\xaa\x3e\x4d\xcb\x12\x36\x95\xb8\x31\x42\x04\x83\x11\x5e\xb1\x59\xef\xbf\x90\x51\xf8\xf4\x9a\x3a\xf7\x27\xd6\x9c\xdf\x6b\xf7\x2a\xc8\xda\x8d\x96\x48\x59\xe2\xad\x39\x18\xce\xca\xa6\xb1\xa2\x10\xc1\x8d\x11\x22\x18\x8c\x90\x9c\x38\x7b\xe8\x2b\xd3\x38\x05\x97\xd1\x70\x6b\xd9\xe8\x00\xdd\xb1\x77\xfd\xfb\xe6\x1d\xdd\x7e\xfb\x86\x53\xf7\xbc\xa8\x8e\x20\x43\x21\x82\x1b\x23\x44\x30\x18\x21\x9a\xfe\x83\x27\x94\xce\x47\xae\xa3\xa9\xe8\x4c\x01\x69\xfb\xde\x0d\xb4\x90\xd7\xfb\xdd\xe9\x3d\xcc\xfe\xd1\x55\xae\x1d\xba\xd6\x28\x44\x70\x63\x84\x08\x06\x23\x7c\xeb\xc9\x41\x2b\x3c\xf3\x1a\x9d\x7c\x0a\x07\x25\x0c\x1f\x49\xde\x35\x32\x2e\xd5\x1b\x17\xbc\xb2\x1a\x76\xf3\xfc\x7b\x1f\x35\x5a\x14\x22\xb8\x31\x42\x04\x83\x11\x4e\x36\x84\x3b\x5c\x8f\xe4\x34\xa0\x0a\x13\x48\x74\x7c\x23\x33\xb1\x25\x86\xa6\x9c\xd8\x4c\x64\x36\x9c\xfd\xfb\x27\xf1\xcb\xd3\x4b\x28\x44\xfe\x23\x46\xb8\xdb\xec\xba\x13\x26\x0c\x46\x28\x16\xff\xf6\x86\xf9\xd3\xa1\xd9\x89\xc6\x15\xfe\xe9\xc2\x8f\xd1\x96\xf7\x9c\x13\x72\x7c\x2e\x9c\x3c\x7a\xf0\xcc\x59\x60\xd1\x48\x8c\x42\x04\x37\x46\x88\x60\x30\xc2\x61\x09\x9a\x94\xdb\x8e\x4e\x45\xb2\xb3\x91\x0a\xb1\x2d\xef\xd8\xf7\xdf\xdd\xe2\x6a\x75\xed\xb5\x79\xff\x3b\xb4\x0c\x16\x44\x11\x46\x17\xdc\x18\x21\x82\xc1\x08\x3b\xa9\x6a\xf2\x98\x97\xa4\xfb\x94\xa6\x4e\x33\x7d\xcd\xba\xa7\xc4\x68\x2e\xec\x77\xdd\x90\xf8\x9d\xa5\x67\x54\x48\xd4\xc1\xb3\x8c\x28\x44\x70\x63\x84\x08\x06\x23\xfc\x41\x9e\xdd\x8b\x64\x36\xac\xff\x96\xca\x4a\x7c\xe4\xae\xf3\xe8\x3e\x47\x92\x73\x63\xb8\x03\x53\xf7\x29\xf7\x35\xdf\xe4\xa7\xd4\x28\x44\x70\x63\x84\x08\x06\x23\x74\x33\x88\xd8\xc3\x60\xf6\x3b\xe9\x53\x5a\x3f\xf1\xc9\x1b\xf9\xd7\x2f\xe6\x3c\xa9\xfa\x1b\x32\x30\xed\x95\x54\x9e\x9c\xdb\x9e\xea\x81\x42\x04\x37\x46\x88\x60\x30\xc2\xef\xca\xf9\x3e\x43\x29\x8d\x9a\x8c\xb7\x4f\xbe\x53\x6e\x3e\xbd\xff\x2f\x38\x12\xe6\xb6\x37\x2d\x88\xd9\xea\x31\x10\x32\xd5\x24\x8c\xf6\xb8\x31\x42\x04\x83\x11\x0e\xb3\x28\xf5\xdd\x7d\x3f\x74\xe3\xf3\xe3\x91\xc9\x09\x91\x10\x97\x49\x09\x83\x20\xaf\xba\xb9\x17\x56\x6f\xa5\x6d\x43\x6c\x29\x99\x51\x88\xe0\xc6\x08\x11\x0c\x46\xf8\x8c\xd2\x79\x50\x9c\xbc\x58\xe7\xb9\x71\x82\xb2\x86\x06\xed\x5a\x6c\x14\x67\xcc\xcb\x97\x17\x9e\x76\x1b\xc4\x5e\x5f\x54\x35\xa0\x47\x21\xf2\x1f\x31\xc2\xdd\x76\x77\x3b\x61\xc2\x60\x84\x37\x66\xd3\x23\x4d\xdc\x9e\xca\xff\x08\x0b\xfc\x52\x1d\x3c\xa4\x72\x37\xbc\x82\x76\x6f\xf7\xd4\x2d\x41\x0d\xaa\xde\x49\xb4\x98\xf0\xe1\xe1\xc6\x08\x11\x0c\x46\x78\x8f\x5e\x93\xb6\x4e\xe6\x44\xd4\x89\xe8\x7b\x02\x95\x85\xd2\xb9\x39\x87\xd3\x4e\x8d\x7f\x9f\x9d\x8a\xf8\x2c\xa3\x12\xab\xaa\x75\x0a\x85\x08\x6e\x8c\x10\xc1\x60\x84\x89\xa8\x6e\x4c\x7f\x1c\xd0\xfa\x31\x84\xdc\x64\xdf\x2e\x90\x72\xb9\xaf\x5c\x5e\x43\x5b\x31\x10\x65\xec\xb4\x9d\xf1\x81\xc9\x11\x85\x08\x6e\x8c\x10\xc1\x60\x84\x2e\xdc\x17\x7b\x99\x87\xab\x3c\xc3\x5f\xcf\x0e\xd6\xf9\xed\x9b\xab\xac\x58\x4e\x3b\xde\x75\xf8\x22\x9a\xfd\x59\x7d\xa8\x85\x8e\xf0\xe1\xe1\xc6\x08\x11\x0c\x46\xa8\xb6\x67\x64\xcd\x5c\xfb\xb9\x43\x5a\x59\xc8\xfb\x2b\x3f\x5a\x99\x96\x8e\x5c\xbf\x7b\x31\xca\x7b\x15\xfd\xc4\x20\xe4\x7f\xa5\xf0\x34\x0a\x11\xdc\x18\x21\x82\xc1\x08\x39\x64\x0b\x5d\x65\x48\x5c\x87\xd9\x51\xa7\xfd\xb7\x66\x5e\xdd\xf0\xb1\x78\x4d\xac\x74\xd8\x2c\x84\x77\xeb\x90\x89\x67\x8f\x39\x61\x52\xc0\x8d\x11\x22\x18\x8c\x90\x51\xb3\xf1\xc3\x27\xd1\x81\xeb\xf1\x33\xc6\xb5\x8a\xcd\xda\x5e\xee\xfb\xe3\xd5\x3f\x45\x35\xa7\x11\xcf\xfa\xda\x51\xfe\xa9\xd3\x43\x21\x82\x1b\x23\x44\x30\x18\xe1\x05\xfe\x94\xd7\xed\xef\x0f\x5d\xeb\x1c\x3a\xc5\xfa\x8a\xe1\xa6\x75\xb5\x8e\xf1\x79\x9e\x27\x56\x5b\xa9\x95\xcf\xef\xf8\x8f\x36\x7b\xa2\x10\xf9\x8f\x18\xe1\x6e\xe7\x1f\x3b\x61\xc2\x60\x84\x85\xd2\x1f\xd2\xc6\xce\x16\xb9\xc6\x2d\x19\x56\xe5\x1c\xfd\x13\xaf\x72\x2c\xbb\x29\xcc\x31\x56\x7a\xf1\xb1\x3e\x1b\x90\x4b\x3f\x8c\x42\x04\x37\x46\x88\x60\x30\xc2\x53\x2c\x2e\xe7\x1d\x75\xf2\xfa\xc5\xda\x04\x68\xc8\xc4\x7e\x8b\xda\x31\x14\x3b\xa6\xe4\x08\xbc\xfa\x95\xf2\x2b\x89\xad\xd9\x9b\x07\x85\x08\x6e\x8c\x10\xc1\x60\x84\x16\x52\x61\x1c\x5d\x47\x8c\x97\x55\xe7\x7e\xaa\x86\xf3\xbf\x53\x5c\x79\x7e\x21\xba\x78\xea\xea\x1b\xb3\x4b\xe9\x0f\x42\xce\x1f\x21\xac\x4c\xb8\x31\x42\x04\x83\x11\x6e\xbd\x97\xe8\x91\x1a\xb1\x69\xfe\x78\x69\xff\x97\xc5\x48\xe3\x57\x5d\xa2\x9e\x06\xc6\x69\x3f\x39\x37\x35\xcb\xdf\xb6\x6a\xed\x23\xfc\x1e\xb8\x31\x42\x04\x83\x11\x0e\x31\x1c\xfe\x98\x47\x26\xe9\xe0\x12\xe2\x93\x2b\x72\x88\xac\xd9\x36\xc9\x94\xd4\xcf\xa3\x7c\x7b\x95\x2c\xf7\x2d\xc5\x25\x3e\x65\x14\x22\xb8\x31\x42\x04\x83\x11\xde\x5a\xab\x50\x37\xf3\xf4\x4e\x29\xe4\xb8\x73\x2b\x91\x87\xbd\x42\x61\xfb\x15\xcd\xbb\xfa\xf0\xc1\x84\xf8\x20\xf7\x56\xca\x2d\x5e\x14\x22\xb8\x31\x42\x04\x83\x11\x9e\x5c\xe4\x61\x7c\x2e\x57\xc7\x93\xc7\xfc\x48\xfd\xf9\x74\xd0\x88\xaf\xbb\xf5\x2c\xe5\xea\x42\xcd\xd9\xcb\x47\xcb\xc4\x3c\x15\x55\x51\x88\xe0\xc6\x08\x11\x0c\x46\x78\xde\xe3\xc3\xfa\xe3\x16\xed\x87\xcf\xdc\x28\x4e\xd9\x27\xdb\x9b\xae\xeb\x0c\xe9\x89\x22\xf7\x6f\xfc\x3d\xa0\x63\x0d\xbe\x69\x10\x46\xe2\xff\x88\x11\xee\x76\x42\xb8\x13\x26\x0c\x46\x88\x54\x75\xad\x4d\x8d\x18\xfc\x2e\x1f\x66\xe8\x74\x39\x28\xff\x68\x7a\x5f\x39\x6d\x88\xe3\xc2\xcd\xc0\xec\x3c\x49\x07\xaa\x70\x79\x14\x22\xb8\x31\x42\x04\x83\x11\x7a\xd2\xcf\x24\x3b\x76\x52\xe4\xfb\xc9\xe4\xf8\x8f\xbf\x7c\xbc\x39\x2c\xfe\x98\xdb\xb7\xea\x40\x23\xbc\x1a\xee\x71\x24\x64\xd2\x0c\x85\x08\x6e\x8c\x10\xc1\x60\x84\x7b\xd8\x87\x86\xe1\xd4\xc7\x3c\x73\x8f\xc0\xb5\x25\x8d\xb9\xf5\x51\xda\x8b\x99\xcd\x92\x26\x13\x4e\xaf\x63\x5e\x31\x99\x6a\xdb\xa2\x10\xc1\x8d\x11\x22\x18\x8c\xd0\x50\x59\x22\x22\xac\x82\xc1\x64\x9d\x25\xb8\xf1\x70\xad\xcc\xd5\xf0\x48\xe5\x46\x4b\x7b\xc5\x7c\xab\x9f\xd5\x32\xea\x7f\x68\x08\xa3\x0b\x6e\x8c\x10\xc1\x60\x84\x99\xef\xd9\x28\x32\x74\x59\x1b\xf4\x46\xce\x9e\x1b\x98\x79\x5d\x0f\xbf\xc9\xd2\x4e\xfe\x12\x2a\xeb\x15\xed\x1d\xde\xb3\x6f\x58\x02\x85\x08\x6e\x8c\x10\xc1\x60\x84\xa7\x59\xbb\x98\xb3\x9e\x65\xd1\x27\x7e\x33\xf4\xad\x4d\x29\x3c\x72\xac\x8d\xb1\xe4\x17\xc3\x5c\xed\xb5\xc2\x46\x3e\xdb\x90\x02\xc2\x68\x8f\x1b\x23\x44\x30\x18\xa1\x6d\x76\xbb\x70\x60\x96\xa7\x2d\x9b\x00\x67\xb2\xfe\xef\x77\x06\x9f\x78\x68\x85\xdd\xc9\xe9\xa9\x43\xdb\x5c\xea\x25\x90\x5e\xc2\xa4\x80\x1b\x23\x44\x30\x18\x21\x51\xef\x68\x67\x5f\xc3\x65\xaf\x2b\x72\x4d\xb9\x0c\x3d\xb9\x72\x15\xe8\x68\xb6\xb7\x8c\xbf\x5e\x48\xfc\x91\x55\xe9\x05\x0b\x03\x14\x22\xff\x11\x23\xdc\xed\x0c\x7d\x27\x4c\x18\x8c\x50\x45\x7a\x82\xd8\x85\xcf\xf7\x17\xab\x06\xa5\xb8\xc2\x23\x87\xbc\x6b\xb1\x39\x46\x51\x6b\xdb\x03\x82\x2e\x8b\x2e\xee\x7e\xfa\x44\x28\x44\x70\x63\x84\x08\x06\x23\x64\xce\x7c\x4c\x3b\x11\xc4\xb7\x30\xb6\xb1\x65\xb7\x11\x27\x16\xa8\xfb\xfe\x6a\xe8\x8b\x79\xf5\xb3\xd7\x29\x0f\x89\x88\x58\x76\x12\xc6\x23\xdc\x18\x21\x82\xc1\x08\xef\xd8\xee\x4d\xd7\xeb\x1f\x38\xa3\x69\xcf\x43\xcb\xe8\xde\xc7\x5b\xf4\x80\xdd\x6d\x40\x2f\x7d\x6d\xdb\xa1\x86\xd1\xfd\x9b\x26\xa1\x29\xe0\xc6\x08\x11\x0c\x46\x28\x31\xf5\x47\xbc\xfd\x76\x83\xb4\x8f\xa9\x59\x60\x91\x6c\x8e\xde\x8f\x60\xd1\x5f\x7f\x28\xc2\xbb\x8d\x3b\x18\x48\x4c\x03\x47\x84\x51\x88\xe0\xc6\x08\x11\x0c\x46\x08\xc9\x7b\x5c\x04\xbf\xc3\x31\xfe\xcc\x4f\xa2\xef\xd4\x7c\x0f\xbe\xdd\x54\x32\xb4\xfc\xda\x4b\xc3\xb3\x58\xb6\x70\xe4\x61\x0c\x2b\x0a\x11\xdc\x18\x21\x82\xc1\x08\x35\xef\x11\x69\x88\x9e\x38\xc1\x2b\x57\x11\xe1\xf2\x31\xff\x5a\x0a\x99\xbd\x52\x3a\x4c\x3c\x57\x22\xf1\xd1\x43\x9f\xa2\x5d\x8e\xd0\xd1\x71\x63\x84\x08\x06\x23\xf4\x0b\xbc\xf2\x52\xef\x1e\x65\xcf\xec\xbb\xbb\x7a\x29\x4b\xf5\x79\x28\x69\xf3\xb0\x14\x51\x72\xb9\x4e\xb6\x91\xbd\x93\xf9\x9c\x29\x0a\x11\xdc\x18\x21\x82\xc1\x08\xcd\xf4\x1d\x23\x5b\x89\x5d\xc7\xbf\x3b\x48\xf5\x9d\x95\x75\x97\x3f\xba\x97\x4a\xaf\x68\xa4\x57\x31\x9c\x8d\x25\x66\xbb\xf1\x3e\xe1\xbd\xfa\x8f\x18\xe1\x6e\xdf\x16\xc4\x5c\xf6\x75\x69\xba\xe9\x0e\x50\x85\xa0\x5a\x09\xaf\xb4\x1f\xbf\xb0\xcb\x5e\x63\xb5\x03\xe6\x46\x71\x9c\x53\xc7\xfe\xce\x33\x86\x50\xe7\xff\x53\xaa\xe6\x31\x11\xc5\x17\x9d\xc7\x17\x7e\xb8\xc4\xf1\x68\x53\x52\x4a\x8e\xd0\x85\xca\x70\x35\x99\xb4\x43\xfd\x71\x86\x61\x02\xa1\x6b\xff\x94\xa2\x87\x02\x49\x69\x7e\x37\x73\x34\x52\x93\x2b\xfc\xc9\xc9\xd4\xba\xac\xd3\x76\x76\xfe\xda\x91\xbd\xfa\xb3\xfe\x54\x01\x73\xdd\x63\xff\x94\x32\xca\x5f\xfe\x20\xac\xd8\x9c\xf3\xea\xef\xfb\xf6\x39\x19\xca\x5f\xc2\x87\x48\xf6\x98\xe4\x37\x6d\xde\xb7\xfa\xe1\x26\x5f\x96\x25\xfb\xef\x1f\x48\xed\x08\xdb\xbf\x07\x9e\xf9\x28\x03\x86\xfa\xa5\x5c\xe2\x9a\x8e\xfb\x6d\x35\xfe\x9c\xe8\xbd\xce\x49\x9b\x2b\x15\xe8\xe5\xfd\xef\x7f\x95\xfc\xdb\x03\x4d\x26\xf7\x58\xdf\xc5\x37\xe4\x3d\x3e\x35\x0e\x33\x15\xa7\x75\xdd\x75\xe3\xbf\xdf\x7e\xfb\xcb\x26\xd0\xdf\x51\x06\xf9\xa7\x54\x5d\x4c\xb5\xcc\xff\x34\x59\xdd\xf2\x9a\xea\xf7\x24\xa9\xd4\xbe\x30\xff\xcf\xc2\x44\x0f\xd3\x58\xcc\x58\x56\x94\xb7\xd8\x1f\xfd\xfc\xa7\x54\xd6\x7a\xea\x65\xb9\xcc\x82\x30\xd9\x80\xa1\xd3\xbe\x68\xf0\xed\x4f\x47\x44\xe2\x4c\xe7\x45\x93\xc6\x82\xbd\xd6\xe3\xc2\xa1\x41\xff\xbb\xec\xdb\xed\xa9\xee\x74\x34\x0c\x46\x18\x1c\xc7\xc8\xa8\xd7\x6e\x62\xab\x98\xce\x54\x52\x33\x39\xe0\xb3\x79\x31\x86\x8e\x52\x44\xee\xd0\x3e\x9d\xd8\xf1\x47\x91\x59\xba\x28\x44\x70\x63\x84\x08\x06\x23\x14\x3b\x48\x31\x7e\x96\x42\xc7\x36\x59\x66\xbb\x55\x7c\xce\xd9\x2d\x9d\x54\x21\x4c\x32\x5f\x2d\xf5\x8a\x4a\xc3\xca\x44\xe8\x71\x80\x42\x04\x37\x46\x88\x60\x30\xc2\x3f\xed\x0a\xa9\x23\xa5\x22\x06\xfa\x8e\x12\xec\xde\x39\x0d\x33\x6e\xa1\x55\xf5\x94\xfa\xca\x6b\xab\x31\x6a\xb9\x16\xcf\xfc\x38\x50\x88\xe0\xc6\x08\x11\x0c\x46\x18\x33\xa0\x3d\xfe\x5a\x69\x1b\xb8\x52\x2f\xfc\x08\x32\x28\xfe\xec\x2d\xc1\x41\xcb\xbb\xe1\xd1\x24\xab\xf3\xe4\x99\x54\xe6\xf5\xe3\x28\x44\x70\x63\x84\x08\x06\x23\x5c\xfb\xbd\xde\xfe\x2d\x06\x7d\xb2\x1a\xab\xec\x73\x60\x34\xf1\x8e\x46\xe1\xcf\x0c\xe8\xb9\xe1\xe0\x4f\x1d\x3d\xc2\x6c\xc5\xcd\x8d\x42\x04\x37\x46\x88\x60\x30\x42\x8e\x14\xdf\x37\x9e\x9c\x13\x4c\x26\x1f\x45\xd7\x8d\x4d\xb2\x15\x7a\xd9\x1f\x3a\x7b\xb8\x3d\x1c\x6c\xfa\x64\xc8\xf9\xaa\x51\xf0\x00\x0a\x11\xdc\x18\x21\x82\xc1\x08\x65\x1f\x8f\x9e\xcf\x28\xbd\xbf\xfe\xfd\x0f\x9a\x22\x61\xb6\x5e\x7f\xba\xc4\xb9\xe8\xc7\x59\xad\xc3\x8f\x3d\x0f\x3e\x31\x17\x3e\xba\x17\x85\x08\x6e\x8c\x10\xc1\x60\x84\x7d\x0b\x9f\x5e\xf9\x08\x91\xef\xdb\x0e\x22\x92\xe3\x79\xf7\xac\x38\xc7\x77\x4d\x4f\x4a\xbc\x8d\xb1\x37\x80\x7e\xd4\xfe\x14\xca\x8f\x42\xe4\x3f\x62\x84\xbb\xf5\x9d\x9d\x30\x61\x30\x42\xb2\x1f\xe6\x0f\x69\x7f\x9d\x52\xec\xe1\x34\xf6\xbe\xf1\xe3\xd2\xd8\xde\x6d\xbd\xa8\x96\x34\x0b\xce\x7b\xde\xbf\x62\x5d\x83\x7c\xa5\x51\x88\xe0\xc6\x08\x11\x0c\x46\x28\xad\xf1\x39\x91\x2f\x45\xda\xcb\x24\xdb\xac\x41\x5c\xd4\x61\x76\xff\xbe\xce\x4b\xf6\x0f\xc8\xaf\x3d\xbb\xc0\x99\xcc\xd0\x99\x4d\x98\x83\x71\x63\x84\x08\x06\x23\xbc\x63\x88\x8a\x1a\x32\xed\x11\xf7\xcc\xea\xbe\x53\xf8\x0d\x9c\xfc\xd4\x7c\x6b\x7c\xf9\xa3\xf7\x95\x0e\x35\xf0\xcc\x3f\xac\xe8\x10\x0a\x11\xdc\x18\x21\x82\xc1\x08\x2b\x87\x13\x8e\xeb\x9f\x51\xe2\xd7\xd5\x9b\x4f\x66\x3c\xcf\x5e\xea\xa4\x7d\xf9\x52\x4c\x90\x36\x2b\xe2\x1e\x7b\xfb\xfc\xbd\x7d\x4e\x28\x44\x70\x63\x84\x08\x06\x23\xfc\xe9\x18\x38\x79\x9d\xb5\xa5\xf1\x98\x7a\x7e\x72\x67\x61\x61\x45\x74\x7d\xd2\xaf\xb4\x86\xab\xc8\xe4\xe2\xb0\x47\xc1\xc3\x76\x39\x14\x22\xb8\x31\x42\x04\x83\x11\xd6\x9c\xa6\x31\x88\xb0\x9e\xac\xa8\x31\x8d\x63\x5f\xaa\xe4\x95\x49\xf8\xf8\x7d\xc6\xae\x62\xe0\xf3\xfb\xdc\x0b\x9e\x0e\xd7\x63\x08\x2f\x21\x6e\x8c\x10\xc1\x60\x84\x15\xa7\xc7\x33\xea\xbc\x6b\x0b\xe7\xac\x53\xa6\x79\x84\x32\x5d\x6e\x68\x34\xdf\x66\x1d\x19\xc8\xee\x7e\xd6\x5a\xb4\x2f\x4b\x8e\x30\x76\xe2\xc6\x08\x11\x0c\x46\xe8\x20\xfd\x27\x35\xdd\x38\x56\x89\x42\x49\xc7\x21\x93\x74\x39\x33\xf4\x6f\xc4\x71\x52\x8d\x03\x94\x29\xc5\x2c\xf3\x2c\xc7\xfd\x08\xa3\xd4\x7f\xc4\x08\x77\x5b\x99\x77\xc2\x84\xc1\x08\xf5\xc4\xf8\xb5\x9e\xd5\x09\x16\x94\x3c\xd4\x06\xdc\xf1\x1f\x4f\xed\x33\x2d\x0c\xaf\xac\x35\x1d\x83\xcb\x29\x5a\xcd\x24\x51\x84\x4e\x88\x1b\x23\x44\x30\x18\xe1\x74\xa5\x47\xbd\xc8\x55\xd3\x05\x19\xb1\x46\xc9\x16\xf3\x24\xfe\x77\x40\xcd\xe9\xd4\x75\x91\x6e\xce\xda\x34\xf3\x91\xb3\x0d\x87\x51\x88\xe0\xc6\x08\x11\x0c\x46\xe8\x42\x3d\x3f\xce\xe5\x23\x18\x4e\x41\x09\x47\xbe\x99\xdb\xf4\x59\x1f\x38\x29\x65\x25\x69\xa8\x43\xe9\xb4\x94\x5a\x74\xe2\x1c\x61\x33\x86\x1b\x23\x44\x30\x18\xa1\xae\xd6\x19\x72\x53\x6e\x0d\xcb\x3a\x2a\xde\xac\x8d\xe1\xb6\x03\x3f\xa7\x84\xf5\x5a\x91\x41\xe3\x2b\x2e\x36\xf3\x0f\x7a\x1d\xec\x51\x88\xe0\xc6\x08\x11\x0c\x46\x78\x9f\x39\x41\x2b\x60\x2e\xba\x42\x70\xe3\xb3\xcb\xdc\x29\xd6\x80\x53\xd2\x7b\xc6\x1f\xcc\xaa\xbe\x95\x13\x9a\x65\x92\xf8\xb6\x97\x09\x85\x08\x6e\x8c\x10\xc1\x60\x84\x6b\x62\x47\xe5\x52\x68\x4d\x1a\x4c\xe9\x02\xdf\xbd\x6b\xbe\xee\xb9\xa4\xc7\xb0\xef\x75\x8f\x37\xd9\x63\x6a\xf4\xe2\xdd\x47\x02\x3c\x28\x44\x70\x63\x84\x08\x06\x23\x9c\x3b\x3b\x3a\xc6\xc7\xd8\x39\xd8\xf8\x24\x40\x3e\xa6\x91\x48\x71\x36\x7e\x13\xb6\xd0\x39\xab\xff\x2e\xd9\xbe\x5d\x60\x2e\x07\x51\x88\xe0\xc6\x08\x11\x0c\x46\x48\x43\xda\x7d\xba\xc8\xbd\x80\x68\xa6\xf0\x0e\xa5\x80\x32\x75\xde\x83\x73\x92\x0f\x53\x4e\xf7\x8b\xc7\xea\x98\x72\x38\x7a\xdf\x32\x44\x21\xf2\x1f\x31\xc2\xdd\x66\xd7\x9d\x30\x61\x30\xc2\x82\x20\xa2\x84\x32\xe7\xa7\xd1\xda\x74\x94\xbc\xfc\xff\x87\xbd\x37\x8f\xde\xa9\x7a\xff\xff\x39\x84\x8a\xc8\xd8\xdd\x20\x51\x86\x4c\x39\xfb\x0c\x91\x8c\x95\x44\x19\x4a\x51\xc4\x3e\xf3\x3c\xec\xb3\xcf\xb4\x49\x6e\x12\x8a\x48\x52\x4a\x28\x42\x29\xcd\x32\x93\x88\x4a\x21\x89\x10\x4a\x09\x91\x64\x48\xa8\x7e\xcb\xe7\xfd\xf3\xfe\xbe\xd6\xdd\x77\xad\xd7\xfb\x6e\x7d\xce\x1f\xdf\xb5\xde\x7f\xd5\x6a\x5d\xed\xd7\xbe\xf7\xd9\xd7\xb5\xaf\xfd\xbc\xae\x73\x1e\xa3\xcb\x4d\xad\xfb\x80\x3c\xb2\x2e\xac\xb4\xea\x4d\xea\xc3\x9a\xb5\x1f\x3b\x7c\x53\x3e\x47\x15\x0d\x23\xa4\x0a\x60\x84\xc2\x13\x15\x2f\x84\x7f\xad\xeb\x59\xeb\xdb\x6d\x65\x66\x6e\x35\xdf\xaa\xed\xbf\xa4\x7e\xa0\xb4\xba\xbb\xe6\x4f\x9d\x2b\x6d\x5b\xc2\x76\xce\xe7\xa8\xa2\x61\x84\x54\x01\x8c\xf0\xe8\x00\xe7\x9d\xea\xcf\x33\xef\x5c\x57\x65\xc5\x7b\x97\xf4\xbb\x69\xf7\xcb\xba\xfc\x34\x77\xb2\xde\xa0\x2d\x93\x6a\xce\x7a\x92\x6c\x3d\x17\xa5\x8a\x86\x11\x52\x05\x30\x42\xf7\xe6\x31\x55\xa5\x1e\x0b\x02\xbf\x45\x3b\xd9\x03\xaf\x75\x7d\xf7\x09\xa8\xec\x6a\x3e\xb6\xce\xee\x8b\xcf\xde\xf9\xed\x81\x21\x7d\xf3\x39\xaa\x68\x18\x21\x55\x00\x23\xbc\xa2\x4f\xf5\xa3\x5b\x8f\x5e\xb4\xfb\xb1\x21\xbb\xf6\xbc\xd8\x50\xef\x53\x6d\x4c\xf3\x59\x7d\xde\xaf\xb2\x60\xf8\xca\x5b\x1e\x3e\x73\x7d\x70\xce\x61\x8b\x86\x11\x52\x05\x30\xc2\x99\x5f\x6e\x78\xeb\xe4\x5b\x6f\x7f\x50\xe7\x73\x7b\x46\xba\x77\xd8\xf5\x2b\x3e\xec\xa5\x1d\xaa\x55\xff\x71\xaa\x75\x97\xe7\xca\xfe\xfa\xac\x9a\xcf\x51\x45\xc3\x08\xa9\x02\x18\x61\xb7\xf7\x3e\xed\x72\x66\xf7\xbd\x4f\x3d\x42\xb5\x1e\xf1\x73\xb5\xc3\x75\xff\xe8\xde\xf6\xe9\x0a\x35\x5a\x8e\x6e\xd8\xe9\xc9\xa7\x26\x04\xbf\x3f\x90\xcf\x51\x45\xc3\x08\xa9\x02\x18\x21\xd3\xfc\xdd\xab\x54\x6f\xce\x8f\xeb\xaa\x6d\x57\xfa\x2c\x98\xdc\x69\xd8\x2c\xab\xdc\x88\x4e\x1d\xfe\x7c\xbe\xc1\xfd\xaf\x5d\xd4\xbb\xbd\x9c\xcf\x51\xff\x10\x46\x58\xda\xed\xee\xbc\x33\x15\xc0\x08\x6f\xff\xe4\xa7\xfa\x8d\xdf\x78\xbd\xc2\x0d\xf2\x0f\x3b\x36\x0e\xda\xff\xf1\x7c\x69\x65\xff\xd7\x57\xb7\x79\x6b\x7e\xf3\x05\x5c\xdb\x8d\x1b\x9b\xe5\x73\x54\xd1\x30\x42\xaa\x00\x46\x58\x67\xf2\x2f\x5c\xcf\xe7\x9b\x57\x7a\xf0\xcb\x7a\x0f\xf4\x18\x51\x95\xbe\xe2\xa1\x51\x6f\xf4\xf9\x90\xa1\xaf\xdc\xde\xb8\x42\x77\xf1\x9d\x96\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\x7e\xde\xfc\xf7\xe7\xd6\xf7\xd9\x7f\xa8\x45\xcb\xd6\x75\x9e\x9c\xd6\x7a\x13\x77\xa0\xff\x8c\x13\x23\xb6\x94\xa3\xad\xd5\x5f\x5d\x7a\x64\x48\xbb\x7c\x8e\x2a\x1a\x46\x48\x15\xc0\x08\x3b\xb3\x5d\x07\xea\xed\xf0\x83\x57\x2d\x5e\x5a\x77\xd1\x2d\x97\x4e\x6c\x93\xdb\x33\xa6\x4e\x85\xb3\x8f\x34\xb8\xab\xd5\x8b\xd4\xa2\x3b\xfb\xe7\x73\x54\xd1\x30\x42\xaa\x00\x46\x78\x76\x73\xbd\x77\xa6\xed\x78\xb4\xf7\x93\xcf\xcc\x3d\x39\xa7\xd2\xdd\xaf\x7d\x35\xba\xf7\x1d\xec\xb8\x5a\xf0\x03\xe6\x70\xad\x65\x5d\xc6\x9f\x0b\x0a\x45\xc3\x08\xa9\x02\x18\x21\x35\xf1\x8a\xc6\x3f\xec\xef\xd8\x97\x9d\xb8\x70\xba\x7a\xcb\x8f\x7d\x4e\xbe\xf2\x48\x5d\x6e\xec\xb5\xd6\xc6\x2e\xfb\x2b\x6e\x9b\xde\xed\xc2\x7c\x8e\x2a\x1a\x46\x48\x15\xc0\x08\xef\x97\x36\x9e\x69\x5c\xbb\xc5\xe9\x7e\x4d\xa9\x6a\xb7\xb4\x1d\x74\xf6\xd8\x2f\x5f\x3f\x37\xf5\x29\x7b\x4a\xb9\xf5\xe3\x87\x7c\xf1\xca\x59\x3f\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\x4a\x9f\x0f\x10\xcf\xfc\xfa\xc4\x99\x3a\x9f\x3c\x14\x26\x1f\xe2\x8f\xa7\x35\xbf\xee\xb3\xfa\x65\x5e\x3c\x7c\xf3\x64\xf5\x97\x2f\x27\xb6\x6b\x93\xcf\x51\xff\x10\x46\x58\x9a\xfe\x71\xde\x99\x0a\x60\x84\x47\xa5\x0b\x6b\xee\x70\x84\xaf\x7e\x7c\xa6\xdd\xbc\xa5\xcd\x36\xce\xb9\xca\x19\xbc\xe9\xf6\x74\x7d\xdd\xd7\x57\xbf\xdf\xe2\xc3\xbb\xc6\x54\xca\xe7\xa8\xa2\x61\x84\x54\x01\x8c\x10\xdf\x77\xd9\xb4\x6e\xe6\xd1\x9a\x57\x0f\xbb\xb6\xe1\x3b\x47\x5a\x55\xfa\xae\xdd\x80\x1b\x5e\x7a\xfe\x86\xc5\x0d\x67\x1d\xaf\x33\x76\x76\x5c\x3d\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\x2e\x68\xf6\xda\xc9\xeb\xe7\x4d\x88\x5b\xef\xfc\xf4\xc1\x36\x52\xf3\x01\x2d\x8e\xb2\xe5\x9a\xaf\xf9\x7c\x38\xf7\x50\xb7\x49\xed\x27\x54\xc8\xe7\xa8\xa2\x61\x84\x54\x01\x8c\xb0\x6d\x8b\xbe\x8b\xaf\x7e\x6f\xa8\x71\xea\xb3\x09\x7d\x8e\xbe\xb6\xa9\x66\x8f\xb7\x57\x95\x97\x3a\xbe\xfb\x73\x7d\x50\xa9\x45\x8d\x29\xd3\x51\x3e\x47\x15\x0d\x23\xa4\x0a\x60\x84\x15\x57\x0e\x7f\x6d\xbd\x74\xfc\xc9\x4f\xd0\x65\x35\xc6\xcf\x5c\x76\xef\xf2\x7d\x23\xbb\xbf\xf5\xde\x86\xea\x37\xff\xae\xcf\xd9\xb1\xfc\x11\x29\x9f\xa3\x8a\x86\x11\x52\x05\x30\x42\xfb\xc5\xa7\x3b\x0e\xbb\xe9\x8e\xb5\xe3\xae\xfb\xc1\xdc\x7d\x6a\xfe\xc1\x1f\xdf\x9e\xb2\xfc\xcb\xdf\x67\xcc\xc3\x4d\x56\xff\x30\x68\xd2\xe0\x16\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\x7e\x55\xe1\x4c\x1b\xdb\xdf\x6f\xcf\x3c\x35\xf7\xe0\xce\xcb\xd7\xef\x19\x73\xf7\x25\x65\xef\x7b\xff\x93\x96\xbd\xfa\x75\xfa\xf3\xec\x7b\xb3\x2f\xca\xe7\xa8\xa2\x61\x84\x54\x01\x8c\xb0\xcf\xca\x8f\x9c\x8a\x37\xff\xb8\xa3\x43\xab\x53\x4a\xdb\xf9\x74\xae\xcc\x5b\x47\xb9\x33\x9f\x83\x3b\x9b\xbc\x32\xf2\xc1\x75\x5f\x57\xee\x93\xcf\x51\xff\x10\x46\x58\x9a\x42\x78\xde\x99\x0a\x60\x84\x67\xde\xad\x3d\x7e\xbe\xb5\xe1\xe0\xb0\x78\xf9\x8b\x9d\x57\x56\x89\xa7\x05\xdf\x1c\x5b\x20\xf7\x9f\x01\x9a\x1d\x5f\x36\x7e\x73\xc5\x41\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\x3e\x32\xac\xe2\x3d\xf7\xdb\x4f\xca\xe3\x5e\x3d\xe6\xe6\x96\x75\xa9\xd6\xfd\xeb\x9b\x7f\x90\x7a\x8c\xad\xf2\xe6\xba\x07\x2e\xfd\x76\x1d\xbe\x3a\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\x8f\x5a\xfc\xb2\x3c\x7a\x78\x9c\xba\xf1\xf2\x55\x2b\x48\xc3\x2b\x97\x96\x07\x35\xb6\x6e\xdc\x3a\xee\x9a\x1e\x8b\xbf\x58\xbf\xf0\x81\x17\x2b\xe6\x73\x54\xd1\x30\x42\xaa\x00\x46\x38\xe9\xa7\x3f\xa7\x7e\x37\x66\xce\xb7\x56\xf2\x25\x24\xc3\x6b\x7d\x33\x7d\xfc\xac\x89\x51\xbd\xfb\x98\x51\x4b\x96\x8e\x1d\xd4\xa1\x8c\x91\xcf\x51\x45\xc3\x08\xa9\x02\x18\x61\x5f\xe9\x6d\x73\xa5\x51\x7e\x67\xcb\x9b\xf4\xb5\x8f\x76\x1c\xfe\x4e\x9f\xe5\x2b\xb4\x9a\xd7\xdc\x34\xad\xff\x89\x5e\x53\xcb\xca\x03\x85\x7c\x8e\x2a\x1a\x46\x48\x15\xc0\x08\x2b\x5d\x03\x76\xee\xba\x59\xf8\xa1\xfc\x4b\x03\xfb\x76\x7c\xbd\xc2\x84\xa7\xbd\x2f\x9a\x96\x5b\xbf\xe8\x3a\x7d\xcb\x9c\x65\x6f\xda\xfb\x61\x3e\x47\x15\x0d\x23\xa4\x0a\x60\x84\xdd\x8f\xbf\xf8\x59\xae\xdd\xc0\x79\x07\xbb\x8d\x3d\x30\xbb\xf1\xb7\x93\xee\xbb\xeb\xcb\xf7\xbe\x7a\x78\x37\xdd\x77\xf2\xc4\xa7\x7f\x3c\xda\xe1\x5c\xe0\x29\x1a\x46\x48\x15\xc0\x08\xaf\x56\xee\xbc\xe6\xce\x8d\x43\xfe\x1a\x58\xf1\x8b\x2b\x1f\xfe\x79\xfd\x8b\x55\x3e\xfd\xa6\xdc\x1a\xf2\x4e\xff\x99\x37\x3e\xbd\x31\xef\x4d\x38\xf7\x3c\xfe\x21\x8c\xb0\x34\x0d\xfd\xbc\x33\x15\xc0\x08\x47\x55\xab\xb3\xb4\x4a\xbb\xdf\xca\xcd\x76\x7f\xf9\x75\x42\x6f\x50\x61\x70\xb3\xba\xe5\x5b\x1d\x85\x57\x3a\x47\xa7\x0d\xfc\x62\x41\xbf\x6b\xf3\x39\xaa\x68\x18\x21\x55\x00\x23\xfc\x2e\x2f\x4b\x7f\x6e\x13\xbf\xdb\x5a\xbe\xdb\x95\xd5\xee\x5c\x78\xc1\xa7\xfa\xaf\x8b\xf4\x4e\xab\xab\xd4\xbf\xbb\xf1\xaa\x1b\xb6\x9f\x6d\x9f\xcf\x51\x45\xc3\x08\xa9\x02\x18\x61\xfe\xa7\xaa\x63\x6a\xef\xdd\x56\xbb\xfe\x15\x6d\xb7\xbb\x1d\x4f\x36\x5d\xfa\xcb\x6a\x28\x0f\x99\x5a\xbd\xe5\xcd\xc2\xf1\xcf\x3b\x41\x2d\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\x4d\x97\x5d\xf3\xd2\x6f\xbd\x7a\xdd\x2e\xed\xbd\xe9\xf5\x0b\x8e\x7c\xfc\xec\xb4\xe4\xa3\xc7\x47\x8e\x7e\xf9\xd7\x11\x1b\xfb\x1f\x5b\xf2\x75\xdf\xc6\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\x76\x1c\xdf\xf9\xc8\xd4\x53\xcb\xae\x7e\xec\xab\xdb\x3f\x22\x97\x74\xff\xb6\xdf\x2b\xd7\xd7\x3b\xbc\xb3\x71\xcd\x9a\x73\x8e\x6f\xdb\xf6\xd9\xe6\x4e\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\xae\x74\x77\xef\x9f\xb0\x01\x5c\x70\xcf\xcd\xe3\x5f\x5e\xfd\xda\x85\x53\xd7\xd7\x9d\xf2\x63\x95\xc3\x9b\x1f\xda\xb5\x61\xe2\x73\xd7\x54\xde\x57\x33\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\x3e\x42\xcf\x26\x8f\x31\x6b\xde\xee\xb7\x6e\x10\xfb\xe4\x25\xef\x4b\x8d\xb4\xa9\x2f\x8c\x6b\xbe\xa7\xc5\xda\x05\xa8\xd9\xde\xb9\x35\x6e\xc9\xe7\xa8\xa2\x61\x84\x54\x01\x8c\x70\x88\x57\x77\x8f\x2d\x5f\xdf\xe0\xdd\x0b\xef\x9e\x7d\xdb\x42\x77\x7c\x6d\x79\xfd\x97\x43\xc7\x3f\x53\xbf\x51\x2f\x67\xd1\xe1\x63\xef\xde\x9d\xcf\x51\xff\x10\x46\x58\xda\xf7\x3e\x0b\x8a\x7d\x15\xee\x6b\xf1\xe3\xef\xc7\xce\xd4\xaa\x77\xc7\xd1\x31\xc3\xab\x5c\xf1\xde\x88\x2a\xf7\x7d\xd3\x70\xe0\xb7\xc7\xf5\x69\xb3\xb7\x6e\x48\xab\x7d\x53\xc2\xf4\xaf\xfb\x0e\xcc\xfc\xe0\xc5\x3a\xab\xd6\x4e\x7b\xf2\xcb\x2e\x48\x6f\x3f\xee\xc8\xa6\x21\x95\x9f\x19\x52\xb7\xfa\xa3\x4f\x4b\x13\x7f\x7e\xf5\xd2\x12\xa6\x55\xd6\xfa\xfd\x9a\xac\x18\xb4\xff\xa5\x7e\xa3\xbd\x61\x6f\xbe\x8d\x3b\x6e\x6a\x38\xe6\xd2\xfd\xdf\x37\x3a\xbd\xab\xca\x75\x7f\x7e\xde\xe1\xa9\x92\x65\xb9\xa7\xee\xb9\xee\xb9\xbf\x1e\xfd\xa2\x5b\xc3\x6a\xa1\xd6\xb5\xdc\x77\x6f\xf4\x68\x7f\xef\xae\x6e\xdd\x2e\x33\x5f\xfe\x68\xab\x61\xfd\xfa\x59\x09\x53\xaf\x9c\x41\x2d\xae\x31\x65\xf9\xf4\x5f\xb6\x2c\xfc\xe4\x8a\x4f\x0f\x1c\x59\xf8\x71\xef\x67\xc2\xd7\x2f\x6f\xfc\xf1\x0d\xcf\xfc\x8c\x7e\x9b\x5e\xf2\x67\x8d\x79\x61\xdc\xa6\x3b\xff\x98\x58\x1d\x36\xfa\x72\xd6\x13\xbd\x06\x3a\xb3\x2a\x9b\x6b\x1f\x6f\xf0\x6e\x54\xa3\xc3\x37\x93\xeb\xd4\x9e\x52\xb2\xda\xb8\x68\xe7\xee\xc7\xbb\x7a\xfa\xe6\x3b\xc9\xf7\x97\x4d\x9f\x3a\x14\x4f\x1f\x73\x71\xc7\x05\x95\x6f\xf9\xa1\x7f\x57\x30\x66\xc7\xfc\x4d\x25\x4c\x5f\xbc\xa4\xe7\x83\x7f\xd5\xaf\xba\x7d\x7f\xc7\xb2\x5f\x6f\x19\x56\xad\x49\xbd\xdb\xda\x0c\x3f\x75\xe3\xb3\x55\xf7\x5d\x7e\xf4\xce\x79\xa7\x2e\xfa\x3f\x30\xc2\xd2\x56\xf5\x7c\x44\x2b\x80\x11\x1e\xe9\xdb\x73\xc1\xf1\xee\x4d\x1f\xed\xbc\xeb\xaa\x1a\x7c\x9d\x65\x03\xd7\xdc\x51\x67\x71\xf9\x5f\x2e\x3a\xeb\x76\x9c\xa5\x4f\x6c\x38\xad\x4e\x3e\x47\x15\x0d\x23\xa4\x0a\x60\x84\x73\x2b\x55\xfb\xad\xc9\x36\xd0\xf4\x93\x36\x4f\x2f\x7e\xac\x7b\x55\xed\x99\x66\x9f\x6c\xa8\x64\x6e\x9a\xaa\xd6\x7b\x72\xb9\x7c\xe4\xf2\x2e\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\xee\xb9\x60\xe5\x84\x4a\x37\xe5\x0f\xad\xbf\xf7\xa3\xf7\x7f\xc2\x8b\x50\xff\x97\x7e\x9d\x7e\xff\x9a\x63\xed\xc7\xcf\xb9\x42\xaf\xf3\xe7\xe7\x3d\xf2\x39\xaa\x68\x18\x21\x55\x00\x23\x9c\xb8\x22\xfd\xf5\xf3\x36\x43\x9b\xdd\xb0\xb3\x6d\x83\x11\x6f\xbc\xac\x24\x2b\x2f\x1d\xd4\x7e\xde\x6d\xa7\xdf\x98\xd0\x7d\x40\xf7\xc1\xcf\x9f\xf3\xd2\xa2\x61\x84\x54\x01\x8c\xb0\x6e\xa2\xff\x56\xf6\xc9\x21\x65\x26\xde\xb6\xa6\xc6\xa5\x55\x85\x7b\xf8\xab\x8e\xf5\xf9\xec\xd4\xeb\xd3\x2a\xdc\xf9\xe4\xa3\xca\xa1\x63\xb9\x7c\x8e\x2a\x1a\x46\x48\x15\xc0\x08\xa7\xf4\xb8\x61\xa3\xd5\x44\x53\xfe\xd8\x92\x38\x6e\xdf\x4d\x67\xa7\x75\xf9\x2b\x69\xb3\xe0\x9d\x6f\x7e\xbf\x54\xaf\x7a\xfd\xc8\x96\xe7\x22\x41\xd1\x30\x42\xaa\x00\x46\xf8\xc8\xb1\xfd\xdb\x17\xd6\x3e\xdc\x1b\xbe\x51\x7d\xe0\xba\x75\x47\x6e\x58\xbf\x96\x1e\xd9\x6c\xaf\xfd\xdc\xe1\xce\x07\xd7\x7e\x31\xfa\xf1\x73\x51\xb3\x68\x18\x21\x55\x00\x23\x5c\x7b\x07\x2c\xd3\xf6\xd3\xf7\x84\xb8\xce\xfa\xbb\xcb\xeb\x6f\x7e\xf2\xc0\x27\x6f\xdc\xbf\xbb\x93\x34\x6b\xe3\x23\x0b\x6a\x1e\x68\x53\xe7\x9a\x7c\x8e\xfa\x87\x30\xc2\xd2\xe2\xce\x79\x67\x2a\x80\x11\xbe\xf3\x6d\xdf\xb9\xbd\xaa\x4f\xf2\xb9\xae\xd5\x96\x4c\x19\x30\xf6\xdb\x53\x1b\xe5\x8b\x9d\x79\xdf\xfe\xf4\xf0\xfb\xf8\xd3\x57\x2a\x77\xec\x90\xcf\x51\x45\xc3\x08\xa9\x02\x18\xe1\xda\x47\x46\xb6\x7f\x7b\xe4\x5a\xf9\xda\xd1\x0f\xd6\x38\xd9\xbe\xe1\xf5\x23\x07\x05\xdb\xe9\xba\xf3\xab\x53\x7d\xc8\xfa\x2a\x03\xbe\x6a\x9a\xcf\x51\x45\xc3\x08\xa9\x02\x18\x61\xbb\xc1\xd1\x9b\x2d\x71\x85\x3f\x85\xa7\x56\x37\x7a\x47\x3a\x51\x63\xf6\xca\x17\x7f\x7c\xef\x1e\x48\xb5\x6c\xfb\xe0\x07\x0f\xd5\xda\xdd\x24\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\x45\xfb\xb7\x3d\x75\xff\x90\xa1\xc3\xbf\xae\x77\x73\xbe\xfd\xa3\xd7\x2c\x18\xf0\xf1\x37\xdc\x9f\x67\x1f\xd2\x0e\xae\xb8\x9c\x5d\xd5\x89\xba\x38\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\xd9\xab\xef\x1b\x38\xb9\x6a\x9d\x96\xad\x71\x8b\x83\x9f\x96\xab\xd0\xff\x82\x57\x0d\xfb\xc1\x45\x33\x8e\xf4\x40\xcb\x9a\xb6\x04\xf5\xef\xcc\xe7\xa8\xa2\x61\x84\x54\x01\x8c\xb0\xe5\xcc\x16\xaf\xfe\x54\x69\xef\x84\x0d\xf7\x95\x9f\xb0\x78\xdf\x8d\x67\x99\x7e\x4f\x5d\xf3\xf5\x33\x78\x09\x37\x9c\x5d\xf1\x88\x77\xe3\x80\x7c\x8e\x2a\x1a\x46\x48\x15\xc0\x08\xdf\xef\xb9\x62\xc3\x4b\xa7\x17\xb4\xbd\x7d\xf6\xed\x5b\x0d\x70\x76\x4b\xf0\x51\xbd\xab\xf9\x5b\x7a\x5c\x7b\xb5\x39\xe5\xb9\x26\xb5\x21\xc8\xe7\xa8\xa2\x61\x84\x54\x01\x8c\xf0\x5a\xe1\xf3\x56\x33\x16\xb5\xdc\x22\x1d\xb8\xbe\xec\xfa\x47\xde\x7a\xe9\xb6\x1d\xc7\x5f\xbd\x7c\xcb\xbc\xb3\xdb\xbe\xb8\x60\x55\xd7\x8f\x9c\xfe\xf9\x1c\xf5\x0f\x61\x84\xa5\x9d\xcc\xe7\x9d\xa9\x00\x46\x78\x7a\xfd\xda\x99\xf7\x3d\x3e\x22\x37\x53\x1b\x54\xfd\x18\x3a\x7b\x61\xc5\x26\xf7\x77\xbd\xec\x93\x5a\x17\x0f\x73\x0f\xdf\x11\xfe\xdc\xb5\x5d\x3e\x47\x15\x0d\x23\xa4\x0a\x60\x84\xfb\x6f\x5e\xb7\x7f\xd3\xad\x8f\xff\x36\xb1\xfd\xf5\x2d\xec\xbe\x37\xcc\xdf\xf5\xdd\x4f\x5f\x5d\x92\xef\xb2\x79\xa2\xfe\x8c\x56\x3d\xc8\x37\xca\xe7\xa8\xa2\x61\x84\x54\x01\x8c\x70\xfd\x9c\x41\xef\x4d\x78\xaf\x71\xaf\x72\xed\x36\x57\xba\x7e\xda\x0b\x93\xd6\x5c\x74\xcf\xee\xad\xf5\x97\x0e\x92\xc0\x88\x16\x4d\xae\x8b\xfc\x7c\x8e\x2a\x1a\x46\x48\x15\xc0\x08\xef\x85\xc7\x6a\x6f\xf8\xa0\x59\xef\x95\xbf\x51\x9d\x2b\x4f\x7c\xec\xb6\xaf\xbe\x5a\x77\xf1\xb6\x75\xe1\xd3\x03\xf7\x79\x4f\x37\xb8\x67\xd6\xb9\xb5\x2a\x1a\x46\x48\x15\xc0\x08\x37\x5d\x09\x9f\x9c\xbf\xb5\x61\x44\xdf\x7e\xaa\x41\x6b\x17\xdc\xd0\xf3\xaf\xe7\xe7\x3f\x55\xf1\x9d\x65\x33\x90\xf7\x6a\xcb\x26\xf8\xc6\x7c\x8e\x2a\x1a\x46\x48\x15\xc0\x08\x0f\x4f\x1a\xd4\x44\xbb\xfa\xf5\x9b\x3e\x3f\xf5\x95\xf0\x74\xa5\x4d\xd7\xca\xe3\xd7\x37\xd1\x67\xbc\xde\x73\xdf\x80\x8f\x87\xae\xec\xf9\x70\xdf\x7c\x8e\x2a\x1a\x46\x48\x15\xc0\x08\xc7\xb5\xdd\x56\xb3\x91\xf4\xda\x31\x6a\x73\x93\x77\xd6\xf6\xfc\xe6\x93\x5f\xfb\x4b\x87\x76\x95\xbf\x42\xba\x4a\x7a\xf8\xb7\xfd\x83\x3f\xae\x94\xcf\x51\x45\xc3\x08\xa9\x02\x18\x61\xa5\x2e\xeb\xf7\x4e\xe9\x38\x7a\x7c\xba\x6f\xd8\xc8\x7a\x2f\x7c\xd1\xf4\xd5\x59\x63\x2f\x1a\x33\xe1\x48\x9f\xb7\x9e\xbe\x63\xe3\xa9\xb9\xaf\xd7\xca\xe7\xa8\x7f\x08\x23\x2c\x2d\x77\x3d\xef\x4c\x05\x30\xc2\x35\x7b\x6a\xec\xdb\xf0\x7e\xbf\xb1\xab\x0e\x82\x8b\x6f\xda\x7e\xfa\xee\x4f\xae\x5c\xb2\xab\x5d\xaf\x0b\x5b\xb4\x6d\xd5\x7b\xee\x3d\x43\x1f\x6d\x95\xcf\x51\x45\xc3\x08\xa9\x02\x18\xe1\x95\x2f\xb7\xe3\xaa\xcc\xba\x72\xe1\x99\x2a\xd3\x8e\xf4\x7e\xd7\xb9\x77\xf8\x3e\xf9\x86\xbb\x6a\xc4\xbd\x0e\xba\x9f\x2f\xe9\x3d\x63\xe0\xb9\xe3\xb8\x68\x18\x21\x55\x00\x23\x7c\xbc\xa1\xf4\xeb\xa9\xab\x77\xbe\xf7\x0e\xdf\xbc\xd5\x07\xca\x08\x8b\xfa\xe9\xeb\xd1\xd7\x3f\xf2\xaa\xfa\xf5\x2d\xa8\x17\x5f\x19\x5d\x98\xcf\x51\x45\xc3\x08\xa9\x02\x18\xa1\x67\xee\x1d\xdb\xea\xf1\x7b\x86\xf7\xdf\x57\xf3\xfa\x0f\xfb\x0e\xde\x7c\xc5\xef\xab\x57\x9f\xba\x58\x1a\xb9\xec\x77\xa9\xca\x93\x9b\x73\xe7\x22\x61\xd1\x30\x42\xaa\x00\x46\x38\xe3\x64\x7b\xf8\x40\xdd\xba\x3d\x72\xd7\x1e\xdf\x7c\x72\xde\x03\x55\x6f\x51\xf7\x3a\x5d\x07\xef\xbe\x6d\xc4\x43\x8d\xda\xee\x7f\xf8\x69\x2f\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\x7a\xd5\x5e\xdd\xf4\xf1\x91\x97\x5e\xa9\xbf\xe7\xf4\xbd\xc3\x2f\x97\x6a\xa2\xc9\x3d\x3f\xe9\xd9\x67\xea\xe4\x01\x87\x36\x2c\x5a\x3e\xe3\x87\xdb\xf3\x39\xaa\x68\x18\x21\x55\x00\x23\xac\x78\x6a\xe1\x90\x85\x4f\x97\x19\xf2\xf0\xd1\xbe\xdd\xef\xbd\x64\xee\x86\xd3\x55\xf7\x77\x76\xee\x78\xe3\xe4\xef\x67\x86\x37\xaf\xf2\xcb\xbb\x75\xf3\x39\xaa\x68\x18\x21\x55\x00\x23\xec\x44\x5d\x11\x9c\x8c\x87\xff\xb4\x71\xb0\xbf\xe8\xd4\xa8\xe9\xcb\x17\xac\xb8\xfd\x99\x4b\x72\x07\x5a\xd4\xda\xfe\xf0\x15\xcb\xbb\x5c\x59\x39\x9f\xa3\xfe\x21\x8c\xb0\xb4\xdb\xdd\x79\x67\x2a\x80\x11\xde\xdc\x76\xe3\x89\x9e\x73\x1e\x1d\xdd\xdf\xea\x56\xc9\x9e\x15\x37\x4a\xe6\x7c\x55\x77\xed\x07\xed\x2e\x5e\x1b\xde\x33\xfd\xab\x67\x8c\xf2\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\xce\x9e\x74\xc9\x47\x83\x5a\x77\x8d\xb4\xce\x73\x06\x55\x6a\xbe\xff\xd9\x3b\x8f\x5c\x70\xc9\xf8\x4b\xd5\x67\x2b\x3f\x76\xef\xfc\x63\x47\x1f\x39\xb7\x41\x8a\x86\x11\x52\x05\x30\xc2\x56\x83\xe7\x8f\x79\x77\xe9\xdb\xfa\x4b\x1f\x4f\x58\x71\x51\x0d\xee\x4d\x63\x78\x93\x16\x1b\x50\xe7\x9e\xbf\xbe\xda\xe2\x97\x17\x96\x35\xbd\x37\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\x0a\x2f\x7c\xf2\x5a\xfd\xf9\x03\xec\x23\x37\xef\x5c\x79\x66\xdd\x7d\xed\xbb\xbe\xf6\x4a\x9f\x91\x23\xbe\xda\xb9\xa4\xf7\x55\xdd\x3f\x5f\xf4\x50\xef\x7c\x8e\x2a\x1a\x46\x48\x15\xc0\x08\x47\x2f\x5d\xb6\xad\xd5\xc7\x7f\x38\xbf\x8f\x9a\xbd\xa1\x7e\xb7\xf6\xcf\xec\x69\xb7\x6b\xf2\xe5\x7f\x2d\xac\xc6\x5e\xfb\xc2\x45\x3b\x2e\x9d\xda\x39\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\xeb\x56\x7e\xf6\xc8\xee\xfb\x96\x9c\x1e\x75\x67\x95\xc7\xd3\x25\x0b\x06\x8d\xaa\xe4\xdd\x3f\xa7\xb6\xdd\xa3\xf5\x85\x6b\xbb\xfc\x71\xf2\x07\x2d\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\x91\x73\x1e\x79\x78\x62\xab\x37\xbb\xda\x55\xd4\xb5\x6d\xb6\x3f\xb7\xee\xed\x07\x2b\xdf\xb7\xfb\xde\xeb\x66\x94\x8f\xd1\xea\xd1\x93\x5b\xf0\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\x0a\x6d\x5a\xfe\x3c\x7e\xb5\xd1\x79\xf4\x1d\x2d\x9e\x7f\xeb\xa1\x97\xdb\xfd\xf2\x67\xe5\x06\x57\x2d\xd9\x73\xd9\x47\x2f\x5e\x51\xf3\xcc\xa9\x83\xe7\xee\x97\xff\x10\x46\x58\x9a\xfe\x71\xde\x99\x0a\x60\x84\x8d\x97\xb6\xef\x24\x4e\x74\x2a\xcd\x18\xbb\x61\xd6\x98\x3a\x4d\x87\x5e\x3b\x9b\x8c\x6c\x31\xf7\xc6\x1b\xe4\xb5\x37\xbe\x22\xcf\x6c\xdb\x30\x9f\xa3\x8a\x86\x11\x52\x05\x30\xc2\xdb\xcc\x67\x9a\xad\xbc\xfc\x9a\x6d\xaf\x0f\x3e\x5a\x7e\xff\xd2\xbb\x77\x3d\xbf\xb4\xfc\x6d\xca\x9b\x03\x9f\x2b\x73\xba\xd1\x88\x1f\x82\x01\x65\xf3\x39\xaa\x68\x18\x21\x55\x00\x23\xbc\xe3\x00\xdf\xf2\xd0\x7b\x4f\xf7\xea\xd5\xf8\xb1\xd7\xc7\xab\x95\x7e\x39\xfc\xd5\xa1\x2a\xad\x99\x57\xe4\xef\x7b\xaa\xa3\x0f\x8e\x19\x2f\xe5\x73\x54\xd1\x30\x42\xaa\x00\x46\x58\xff\xcf\x4f\xdb\xad\xa9\x55\x6d\xfe\xd5\xdb\x3b\xd6\xb5\x06\x8d\x2e\x3f\xa4\xdb\x94\x7b\x1a\xb6\xb8\xfa\xaf\x59\x4f\xf5\xc4\x3d\xdb\x7c\x74\xee\x1e\x50\x34\x8c\x90\x2a\x80\x11\xbe\x99\xde\xd8\xa7\x8b\x67\x50\xda\xf2\x01\xa3\xb7\x2e\x6e\xa8\x37\xfc\xf1\xbd\x3b\x17\xb3\xab\xbe\xcc\x2f\x7a\xe4\x87\xc5\x07\x6a\x5f\x91\xcf\x51\x45\xc3\x08\xa9\x02\x18\xe1\xaa\x16\x93\x57\xdc\xf5\xec\xdb\xfb\x1a\x2f\x4b\xda\xbc\x5c\xf5\xad\xc3\xe1\xad\x1b\x96\x8f\xbb\x61\x78\xc7\x1e\x5b\x3a\x4d\x78\xec\xc3\xba\x5c\x3e\x47\x15\x0d\x23\xa4\x0a\x60\x84\xfa\xc9\xfd\x0f\x5d\x71\xa1\xbc\x49\xf9\x6e\xea\x17\x97\xbd\x38\x14\xf5\xdd\x70\x41\x95\xe9\x0b\x6a\x34\x9e\x39\x63\xa9\x77\xdd\x07\x7c\xbf\x7c\x8e\x2a\x1a\x46\x48\x15\xc0\x08\x2b\xec\xed\x3b\xeb\xbe\xdc\xad\x63\xef\xd9\xb7\xa5\xfe\xba\x03\x77\xad\x99\x73\x65\xaf\xfb\xbf\x3d\x78\x63\xeb\x1a\x03\x4f\x4c\x95\xae\x69\x72\x5f\x3e\x47\xfd\x43\x18\x61\x69\x0a\xe1\x79\x67\x2a\x80\x11\xee\xbe\xa9\xe3\xdb\x95\xb6\x7d\x76\x7a\xc4\xd1\x1c\x78\xcb\x6d\xf5\xe5\x84\x17\xfe\xf8\x71\xce\xc6\xaf\x8f\x36\x7b\x79\xc0\xb5\x97\xb5\x5f\x01\xf3\x39\xaa\x68\x18\x21\x55\x00\x23\xdc\x7e\xdd\x38\x73\xcc\xa4\xd7\xf9\x9f\xa6\x50\xc3\xe6\x6d\x29\x5b\xb6\xcc\x63\x1b\x2e\x6e\x65\x3c\xf1\xc7\xd0\x35\x77\x6c\xe8\x74\x63\xdd\x4e\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\xf6\x68\x33\xb6\xcb\xd2\xf8\x1a\xb5\xec\xe2\x25\x70\xe8\x13\xcd\x7b\xcf\xfe\xf8\xb6\xfd\x07\x16\x37\xfd\x6a\xcf\xca\x1f\xbf\x1c\xb7\xa7\xc7\xb9\xdf\x51\x34\x8c\x90\x2a\x80\x11\xde\xfc\xc1\x27\xc9\x7d\x83\xfb\x2e\x70\x7e\x5d\x77\xd8\x7a\x76\x52\x72\xd5\x45\x7f\x1d\xa2\xc5\xa7\x37\xfe\x36\x7e\x65\x87\xdd\xcc\xd2\x81\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\x5e\x5e\xd6\x6a\x32\x73\xc5\x43\xe4\xf0\x8a\xc5\xd5\xe9\x53\x4f\xdc\xf0\xf4\x8a\x37\xde\xbd\xc7\x9c\x5e\xa7\x8a\xd5\x73\xa6\xd2\xf4\xc0\xd5\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\x9e\x88\x06\x8f\xbb\xb2\x46\x7a\x7a\xeb\xc8\xef\x17\xde\x5f\x79\xab\x4c\x55\xec\x30\xe0\xde\x07\x6e\x5c\xf0\x45\xae\xdc\x96\xe9\x5b\x06\x5b\xf9\x1c\x55\x34\x8c\x90\x2a\x80\x11\xce\x9a\x7f\xbc\xec\x49\xad\xf6\x23\xaf\xee\xe9\x47\x16\x6c\xdc\x3e\xf4\x73\x98\x96\xdd\xbe\xf3\xe7\x36\xb7\xf3\x5b\x17\x75\xba\xb2\xea\xb9\x53\xbc\x68\x18\x21\x55\x00\x23\x7c\x30\x58\x81\xd4\x41\x9d\x8f\xbb\xd6\x1d\x37\x75\xa1\xeb\x89\x8d\x5b\x1f\xde\x54\xe1\xca\x76\xb5\x56\xb7\xeb\x3d\xe7\xcf\xdd\x43\xce\xdd\x99\xfe\x21\x8c\xb0\x34\x0d\xfd\xbc\x33\x15\xc0\x08\xdf\x29\xbb\xb5\x23\x49\x9a\x76\xee\x71\xf2\xe7\x01\x2d\x7b\x0f\xbf\x68\xf8\xf5\x13\x6b\x5a\x9d\xeb\x1e\xed\xfd\xf6\xea\x0a\xa3\x2e\xad\x7a\x51\x3e\x47\x15\x0d\x23\xa4\x0a\x60\x84\xef\xbd\xfa\x4a\x83\xf5\xd6\x55\x5f\xfc\x79\x78\x20\xc3\xdc\xb1\xa0\x7a\xf2\x42\x87\xab\x2f\x79\xe5\x78\xd7\xdd\xd4\x43\xb9\xca\x07\x1e\x3d\x97\x3f\x17\x0d\x23\xa4\x0a\x60\x84\x4b\xe4\x67\x77\x06\xb3\x6e\x5b\xfc\xd8\xa8\x9f\x7e\xbd\x56\xff\xec\xaa\xed\x4d\xa7\x4d\xeb\xf8\x5a\x99\x36\xbf\x0d\xef\xfd\xcb\xbe\xbe\x9d\xce\x45\xc2\xa2\x61\x84\x54\x01\x8c\x10\x8d\xfd\xed\x87\xca\x3d\xf9\x7d\x0d\x2e\x1b\x34\xe9\xac\x31\xd8\x6d\x35\xe3\xf6\x86\x17\xdc\x3d\xb7\xd6\x8b\xec\xac\x9d\x33\x4f\x09\xf5\xf2\x39\xaa\x68\x18\x21\x55\x00\x23\xfc\x61\x56\xe3\x83\xd5\x1e\xa9\xf7\x35\x7b\x53\xa3\x19\x4f\x74\x7d\x2b\x58\xc8\xbd\x91\x74\xb9\x7c\xfd\xdd\x7b\x57\xfe\x3c\xa3\xfa\xca\x46\xed\xf3\x39\xaa\x68\x18\x21\x55\x00\x23\xdc\x79\x7b\xbf\xdd\xaf\xdc\xfd\x5b\xf3\x8f\x85\x6a\xd5\xc3\x57\x7a\x91\xef\x2c\x63\x53\xe7\xf1\x43\xe6\x36\x9e\xbd\x6e\xd2\xe7\xbf\x3a\xe7\xee\xb0\x45\xc3\x08\xa9\x02\x18\xe1\xac\x27\xf7\x7e\xf9\xf8\x20\xee\x88\x8d\x99\xdb\x17\x7d\x37\xfd\xb1\x89\x87\x56\xe4\x56\xbd\xf6\x40\xeb\x06\xcf\x1d\x87\xdb\xa7\x5f\x78\xee\x99\x17\x0d\x23\xa4\x0a\x60\x84\x95\xab\x96\x99\x7d\x0d\x5c\xdf\xff\xab\x63\xe6\x9d\xca\x4f\xe6\x9d\xed\x9b\x7c\xaa\xef\xf8\x72\xf7\x53\x2f\xcc\x2b\x47\xbd\x7e\xe7\xd5\x6c\x3e\x47\x15\x09\x23\x5c\x54\xed\x5f\xce\x34\xe5\xc5\x53\xb5\xee\xbb\xe3\xd3\x81\x8f\x24\x77\xd4\xfc\xf6\xa2\x71\xe2\x6c\xfe\x85\x9e\x23\x2e\x7b\xbc\xd2\x4b\x7b\x5f\x38\xf9\xb4\x78\xfc\xb1\xfc\xb3\x25\x81\x75\x15\xfb\x4d\xee\xd5\x98\x79\xde\xfd\x76\xe0\x9a\x74\xc0\xd4\xb7\x96\x46\x0b\x1a\xbf\x3f\xb2\xfb\xc1\x5f\x2f\x59\xd3\xf8\x60\x7e\x58\xbf\xdb\x4b\x98\x1e\x6f\xff\x61\x8d\xad\xd3\x26\x33\x65\x97\x3e\x3c\x76\x79\x5a\xe7\x99\xbb\x06\xcd\x7f\x7c\xfc\xe4\x66\xef\x34\xa9\xd6\x60\x00\xd0\x67\xbe\xf1\x5f\xd3\xff\x9a\xfe\xd7\xf4\xbf\xa6\xff\x35\xfd\xaf\xe9\x7f\x4d\xff\x5f\x32\x1d\x5d\xf6\x3f\x4b\x06\x46\x95\x18\xf3\xf6\x31\x7b\xac\xc9\x27\x6f\x6d\xb9\xbe\xff\x89\x29\xcf\x8c\x36\x9b\x5e\x08\x9e\xf2\x3b\x34\xb8\xe6\xc3\x46\x6f\x9f\xb9\x67\xd2\x91\x9f\xdb\x94\xfc\x50\x77\xf7\xc9\xcd\x37\x7d\x50\xef\xee\x87\xd8\xdb\x17\xae\x3b\x4c\xbd\xf3\xe2\xfe\x5e\xaf\xf6\xf0\x3f\xae\x30\xa4\xeb\x45\xaf\xaf\xbb\x0f\x9f\xee\xd0\x21\x57\xae\x4c\xae\x5c\x99\xe1\x1d\x3a\xbc\x54\xf6\x3f\x1b\x7d\x44\x99\xb2\x23\x3a\x96\x1d\x96\x1f\xd3\xa9\xfc\xc6\x0e\x1d\x3a\x94\xf8\x63\xe5\xa9\x6b\xee\x38\xda\xe8\x9b\x9d\x87\x66\x9b\xd7\xdc\xa0\x3d\xac\x76\xff\x71\xe5\xdc\x15\x7f\xf5\x7d\xf8\xb7\x8f\x2e\xde\xf7\xf0\xdc\x23\x5a\x09\xd3\x1f\xe4\xc7\x6f\xbe\xec\xb3\x0a\xdf\xee\x98\x50\xeb\xdd\x37\x0f\xf5\xf9\xa0\xc1\x4b\x77\x3e\xf0\xed\xc1\x6b\xb7\xb5\xbe\x71\xcd\xc2\xd6\x83\x7b\xb4\x1c\xde\xa5\xcc\x65\xe7\xb2\xad\x32\x5d\xca\xfc\xf2\x3f\xff\x1c\xde\xa1\xc3\xf0\x0e\x1d\xfa\xfd\x67\x7f\x68\x44\x85\xb2\x23\x3a\xd6\x2b\x89\x1c\xb6\x6b\x77\xed\xf8\xd1\x9e\x1b\x66\xfc\x35\xf6\xd3\xe6\x33\x3a\x3d\xda\xb2\xf9\x65\x52\xcb\xc9\x33\xff\x78\xbe\xce\x43\x8b\x1a\xbf\x7a\xf6\x8d\xb1\xc3\xee\xfd\xcf\xec\x46\x74\x1c\x56\x72\xd8\xae\xef\x75\x7b\xf7\xb2\x4b\x2b\xce\xab\x4f\x5d\x50\x6d\xd6\xa4\x77\x6f\xef\xa1\x4d\x4e\xcb\x54\xfa\xf4\x9d\x16\x4d\x7b\x5e\xf1\x6e\x8f\x23\x73\xcf\x0f\x5b\x9a\xdd\x88\x8e\x95\x4a\x0e\x5b\xe7\xf5\x7a\xf1\x43\xf5\xe3\x4d\x77\x94\xb9\xd5\x88\x82\x5d\x3f\x59\x2f\xa1\xbd\xbf\x8c\xb8\x7a\x27\xdf\xac\xec\xab\xdb\x97\x98\x5b\xce\x0f\x5b\x9a\xdd\x88\x8e\x54\xc9\x61\x71\xc3\xf9\x8f\x0e\xb8\x46\xd8\x6f\xbd\xf2\xda\x3b\x3f\x81\x9e\x43\xf7\x57\x6f\xf1\xfe\x97\x1b\xc3\x5b\xb6\x85\x49\x9c\xdc\xbf\xe1\xb5\xf3\xc3\x96\x66\x37\xa2\x63\xf9\x92\xc3\xf2\xc3\x9f\xea\xf7\xcc\xc0\xeb\xbe\x7e\x72\xd0\xd6\x85\x53\x2a\x27\xbf\x37\x7b\xe9\x87\xef\x1e\x3c\x30\xa5\xc2\xc2\xb2\xe3\x3e\xd9\xbc\xeb\xf3\x7f\xcf\xb6\x34\xbb\x82\xd9\x3e\xcb\x99\x5f\x74\x88\xd1\xca\x4d\x83\x6a\x76\x5b\x75\xc9\x35\xf3\xea\xf6\x6a\x77\x7c\xf7\x17\xa7\x1f\x68\x3c\xb2\x5a\xb3\x31\xed\xff\xfa\x70\x58\xcf\xff\xcc\x6e\x44\xc7\x7a\xc3\xf2\x23\xcf\x6d\xd6\x6e\x65\xca\xce\xe8\xa3\xcd\xf8\xd7\x7e\xfa\xbf\x6c\xb0\x7e\xff\x99\xcf\xfc\x7d\x77\xd5\xfd\xf0\xf6\xe9\xbf\x0e\x9e\x78\x41\xc5\xe5\xe3\xae\x58\x7b\xb6\xde\x3d\xd3\xf7\x2c\x79\x59\xb7\x66\x5d\xb9\x43\xae\xb5\xaf\x0b\x3a\x31\xe0\xfc\x0a\x94\x66\x57\xb0\xbb\x36\xef\xa0\x1e\x7e\xf4\xe0\xa1\x57\xfe\x6c\xb3\xfd\xe8\x85\xb5\xfd\xe7\xae\x6d\x7d\xb3\xbb\xee\x62\xeb\xaf\x0e\x6b\xbf\x79\xfb\x83\xc1\x97\x34\x3a\x3f\x6c\x69\x76\x05\xbb\xeb\x27\xf2\xda\x81\xef\x37\xbf\xf8\xf5\xcc\x11\xd7\xcc\x9f\x7b\xe3\x5f\xfc\xce\xa5\xd3\x66\xdc\x35\x66\xd5\x17\xe5\x9c\x1f\x2f\x5a\xda\xb8\x6e\xeb\xf3\xc3\x96\x66\x57\xf0\xbc\x16\x7c\xb9\xb4\xe9\x33\xb7\x3d\x31\xe9\x47\x7b\xd9\x36\xb1\xc9\x2f\xbb\xde\x9c\x1d\x1f\xbe\xed\xd4\xd4\x3f\xae\x58\xb1\x76\x56\x87\x71\xc2\xd2\xf3\xc3\x96\x66\x57\xb0\xbb\xee\x5f\xb8\xfb\x5e\xbc\x69\x5b\xd9\x0b\xce\x56\x5b\x57\xe1\xe1\x36\x4d\xda\x0e\xee\x19\x1e\x6b\xf4\xf3\xec\x87\x6e\x3b\x70\xf9\xb6\xb7\xeb\xcd\x3b\x3f\x6c\x69\x76\x05\xb3\xad\x3a\xfd\x9e\xa3\x67\xc7\xee\xbb\xf4\x05\xe7\xa2\x8b\xdf\x6a\xf3\xf8\xa7\x3d\x83\x25\x7a\xe5\x9f\xee\xae\x40\x8e\x3f\xd5\x19\x57\x69\xbd\x6c\x58\xf3\xff\xcc\xee\x7f\x76\x57\xc7\xca\x57\x96\xed\x53\xa6\xb2\xa2\x5b\x2d\x5b\xb5\x0c\xd2\x00\xcb\x76\xc9\x7f\x6f\xf4\xaf\xa1\x6e\x7d\x73\xc3\xaa\x7a\x9f\x1f\x7a\x60\xc8\x95\xc2\xea\x2f\x73\x37\xdf\xf8\xfd\x4f\xb3\x9e\x18\x5d\x0b\x4d\xfd\x71\xe0\xd4\x8b\xde\xfc\xfe\x83\x95\xc3\xae\x2f\xdb\xa7\x4c\x8d\xff\xff\x7f\xc4\x2e\x82\xaa\x6c\x43\x64\xca\xf8\xff\xf2\x9f\xde\xa4\xfe\x35\xe6\x81\xfb\x77\x2e\x7e\x77\xf1\x9b\xcf\x2e\x66\x47\x77\x73\x37\x6f\x4e\xe4\xcb\xbe\x1b\x3a\xf7\xd5\x27\x1b\x6c\x9a\xbd\xb8\xc2\xde\xc3\xe3\xbb\x3f\x5e\xe2\x27\xef\x3b\xbe\x88\x3f\xd2\xbd\xc3\x7b\x78\xc0\xd6\x8a\xed\x7b\x5c\xa9\x3c\xb8\xed\x8b\xcb\x85\xd1\x27\x9d\xbb\x97\x57\x69\xdf\x8c\xe9\xdf\xbc\x64\x67\x65\xfc\xe7\x30\xbd\x56\xb9\x5a\x8b\xbe\xad\xf7\xe7\x0d\x3b\xbe\x27\x1b\x1b\x0e\x59\x3e\xa2\x79\x97\x69\xa7\x1b\x8f\x9a\xde\x7a\xe2\xe5\x87\x4a\x98\xb6\x6a\x5e\x15\x1b\x6b\x5e\xaf\xf5\x2e\x5d\xb5\xd7\x9a\xdd\xf7\x9c\xa8\x32\xe1\xed\xaf\xef\x6a\xf0\xea\x88\xbd\xe3\x9f\x59\xb4\xaa\x36\xb7\xab\x84\xe9\x65\x7f\x1a\xeb\xe1\xcc\x99\x66\x65\xbe\xed\x1d\x6d\x9e\x98\xdd\x2d\xdf\xf4\xd7\x4f\x9e\xef\x3d\xac\xe7\x84\xa9\xc9\x97\x95\xfa\x3c\x56\xb9\x84\xe9\x96\xfb\xdb\xd5\x7e\xb0\xe2\x86\x56\xa7\x9b\xa7\xf3\x17\x4d\x3d\x35\x74\xc9\xd0\x4b\x76\x1e\x54\x6e\x5a\x7b\xc9\x89\xa6\x15\x6f\x8a\xf4\xeb\x73\x17\x96\x29\xd9\x0a\xfb\xec\xb1\x2b\xfa\x46\x27\x9f\x3e\x74\xdd\x07\xcd\x2f\xfe\x25\x9a\xde\xef\xc0\x89\x13\xf7\xb6\x7b\x6a\xf7\xc5\x47\xbf\x98\x77\x65\x59\xe9\xf7\x7a\x1d\x3a\x74\x18\x45\xfd\x67\xab\x30\xa2\x5c\xee\xc2\x32\x23\x3a\x5e\x3d\xb2\xc4\xf8\x5c\xdd\xeb\xea\x7f\x6f\x7e\x7a\xba\xe5\x2d\xdb\x7b\xdc\xb9\x20\xf7\xe1\x75\x4b\x7e\x3b\x3c\xe4\xe0\xd5\x5d\xc5\x6d\x9d\xeb\x94\xad\x7b\xb4\xe4\xca\x75\xc6\xd5\xe7\x6f\xba\x65\x76\xc5\x35\x97\x77\x9f\xb7\x7c\xe7\x8e\x25\xcf\xd4\x5b\x7a\xa4\xd3\xac\x3f\x2a\xbe\x39\xca\xb2\xd7\xef\x55\x6b\x95\x30\x9d\x52\x7b\xcb\x98\x5b\x34\xe9\xfa\xcb\x77\x55\x58\xd5\xa8\xf3\xaa\x7d\x7f\x0c\xe8\xb6\xf0\x44\xf5\x70\xcb\xd1\x0a\x2b\xf6\x4c\x9a\x59\xab\xe4\xc9\x2a\x6c\x7c\xfd\x5a\xf6\xd7\x13\x83\x17\x5f\x32\xa2\xd9\x90\xf7\xd6\xf0\x67\x1e\xab\xd4\xf3\xe8\x75\xae\x3e\xca\x66\x9a\xec\xa9\xb6\xab\x4e\x09\xd3\xf9\xbd\x56\x56\x3f\x32\xf0\xb7\x8b\x96\x1c\x9f\x3b\xd5\x93\x57\xb5\x0a\xee\xaa\xf0\x23\x3d\xf9\xd3\xc7\xf6\x3e\x48\x5f\xba\x72\xf1\x94\x60\xd8\xf9\xce\xe4\xd2\x7e\x54\x41\x67\xf2\xd3\xf3\xde\x30\x2b\x06\xdd\xaa\x55\x3a\x74\xbc\x57\xf8\x91\xff\x5c\xb7\x9d\x77\xaf\x9c\xba\xfc\x89\x32\xfc\xcc\x5b\x5a\x5f\xf6\x33\x7f\xac\x84\xe9\x2c\xaa\xc6\xe9\x51\xd3\x6f\xda\x39\xf6\x77\xe1\xe0\x96\x99\x2f\x1f\xfc\x09\x92\x47\xd2\x1d\xea\x5a\x6a\xae\x5e\x76\x45\x5d\x66\x51\x09\xd3\x5d\xed\x9f\xda\xd1\x7e\xff\x01\xbd\xf3\xd1\x13\xe5\x6e\xff\xc3\x99\x34\x76\xcb\xd3\x97\x7c\xb6\xad\x52\xc3\x55\x1f\x7c\x72\xfa\x96\x96\xbb\x46\x94\x30\x7d\x65\x9e\xf1\xf9\xad\xfd\xda\x2f\xab\xd0\xee\xb6\x33\xb7\xbe\x3c\xe9\xf3\x37\x60\x93\x09\x55\x37\xcd\xab\xf4\x47\x85\x21\xaf\x1f\xdf\xf6\xc7\x80\x12\xa6\x3f\x0f\xde\x34\xab\xf9\xf1\x5a\x87\xae\xde\x55\x75\xfc\xa5\x9d\xb6\xdf\xd2\xab\xfb\x14\x7d\xe8\xa8\x0f\x93\x39\x83\x5a\xbf\x51\x69\xf2\x8d\x25\xf9\x28\x9b\xc7\x2d\x19\xde\xe3\xfa\xab\x5b\x9d\x79\xb8\xe9\xb0\xa1\x7d\x92\xe5\x6f\x59\xab\xbf\xe6\x3b\x2d\x7b\xab\xbb\x25\xd7\x29\x3b\xd2\xee\x5f\x32\xed\x3a\xd6\x7a\x73\x9f\x9b\xbb\x9f\x5e\xda\x68\x9c\xbc\xe1\x3b\x67\xeb\xbc\x83\xab\x5a\x7c\x76\xd1\xa6\x95\xb7\x19\x27\x1b\x37\x1c\xd7\xf4\xc9\x12\xa6\x17\xbf\x3f\xe4\xbe\x5d\xa3\xfa\x4d\xde\x35\xaa\xfe\x63\xaf\xf5\x76\x6a\x3d\xf4\xdb\xbd\x4d\x16\xec\x3a\xb3\xbf\x7c\xae\xcc\x03\xd0\x1d\xbb\xe3\xdf\x0f\xa1\xb4\x55\x2d\x78\x08\xaf\x0d\x18\xf7\x01\x79\xa8\x72\xd9\x54\xdc\x7c\xdd\xaa\x16\x73\xbe\x9a\x76\x83\xd4\xe7\xa9\xb5\x6f\x7c\xf7\xc7\x99\x65\x63\x56\x7c\xbb\xed\xaa\x12\xa6\x0d\xce\x2c\xde\x32\x7a\x42\xcd\x0f\x1e\x5b\xdf\xa4\xfd\xf4\x99\x3b\xba\x7b\x6f\x3e\x70\x43\x95\x07\xb6\x2f\xbd\xe0\xe7\xce\xfd\x4e\xd0\x9d\x6a\x96\x30\x85\x3f\xee\x1b\x39\xe7\xe6\x3f\x7b\xbc\xd3\x63\x4e\xe5\x83\x83\x97\x5f\xf6\xe8\x41\xb3\xe6\x89\x8a\x33\x97\xac\xad\x78\xa2\xc1\xac\x6f\xb7\x54\x2f\x61\xda\x6d\xde\x13\xb7\xa8\x35\x2a\x8c\xbe\x74\xee\xe6\x32\x0f\xec\xb1\xfd\xb9\xc3\x2b\x36\xed\xba\xae\xa5\xf3\xcc\x9e\xb3\xdd\x67\x0e\xa2\x4a\x3e\x84\x1a\xb5\x97\xec\x1a\xaa\x8d\x7f\x6e\xe4\x6b\xf8\xc6\x97\x1b\x37\x58\x9e\xf6\xaf\x57\xb3\xed\xae\xf9\x9f\x97\xad\xf3\xd0\x15\x3d\xed\x6e\xbf\x96\x30\xfd\xb3\xd7\x1f\x00\xb2\x6d\xaa\xef\x3e\xb9\xb7\x5b\xf9\x85\x03\x5e\xbf\xdc\xaa\xf4\xd1\xf4\xf9\x1d\x1e\x8f\x2a\x9e\x18\x5f\xb6\x55\x5c\x72\x17\x8c\x1c\xb5\x6d\xdc\xe4\xfd\x1d\x6e\xea\xfc\xd7\xa4\xf5\x7b\x98\x9d\x0f\xf6\xad\xdb\xac\xee\xee\x3b\x86\xfc\xde\xe4\xac\xd1\xa8\xce\xed\x4d\xdf\x2c\x61\x5a\xed\xd9\x9b\xcb\x8f\x7d\xe0\x48\xd3\x7b\x6b\x5f\xbc\xef\xec\x86\xed\xdd\x9c\x55\xec\xa1\x11\x53\xfa\x1e\xf3\xe6\x5d\x36\xe4\x9b\x06\x43\x5e\x1c\x76\xa6\xd2\x7f\xb6\xaa\xff\xd2\xc0\xb7\x5d\xdf\xb7\x71\x99\xb2\xf9\xef\xca\x4d\xac\x57\xaf\xe2\xd0\x81\xbb\xd8\x35\x17\x3d\x55\xee\xe5\x9e\x17\xee\xed\xfa\xd8\x5d\xcb\x77\x1f\x9b\xda\xe9\xfd\x6a\xef\xdf\xb0\xed\x10\x59\xfb\xc6\xec\x76\x57\x94\x29\x53\xa6\xd2\xb9\xac\xe2\x44\xa7\x32\x52\xe7\x32\xfb\x2b\x26\x1d\x05\xa8\x0a\xae\x0c\x19\x81\x85\x82\x08\xb1\x95\xc8\xa2\x16\x0b\x1e\x6f\x1a\x9e\xa1\x86\x0e\xe4\x10\xe7\xf3\xb2\x81\x34\x99\xb3\x25\x0f\x58\x0a\x60\x3c\x3b\x88\x1d\x9a\xf7\x4c\x53\x97\xcd\xf3\x1f\x98\xeb\xd0\xe1\x7f\x77\x26\x5a\x0a\x05\x8e\xb8\x96\x61\xf8\xd8\xb0\x89\xe3\x61\x45\x8c\x9c\x84\x47\x91\xc7\x3b\xa6\x18\x59\x29\xf2\x53\x26\x60\xad\xc8\xf4\x91\x25\xeb\xa6\x29\x67\x33\x13\xc1\xb0\x04\x95\x31\xd5\xc4\x61\x79\x9a\x04\x89\x26\x7b\xd8\xb3\x1c\x1a\x8a\x92\x9f\xa0\x48\xa7\x89\xc1\x24\xae\x16\x00\x26\xa6\x69\x55\x71\x6d\xc5\x07\x19\xad\x49\xac\xb9\x62\x18\xea\x12\xab\xeb\x91\x26\x87\xa6\xe3\x89\xbe\x28\x78\x16\x67\xd2\x80\x35\x45\x68\xd9\x18\xd2\x8a\x08\x5d\x0e\x13\xac\xa6\x2a\xed\xab\x19\xad\x89\x25\xbb\xac\x22\x89\x48\x0f\x1d\x2f\xb1\x42\x12\x05\xc4\xa4\x6d\x04\x60\x62\x9a\xb6\x08\x7d\x89\xb6\x18\x5d\x52\xe4\x58\x54\x75\x45\x15\xd3\x04\xa3\x8c\x66\xe2\x04\x69\x00\x22\xe0\x92\xd4\x0d\x5d\x28\x48\x50\x13\x42\xdd\x05\x2e\x93\xc4\x8e\x2a\xb9\x3c\x62\xf4\x98\xb7\x05\x15\x58\x2a\x2f\xa0\xd8\x31\x84\x34\xa3\xa7\xe3\x04\xbc\x04\xcd\xc4\x94\x42\x10\x12\x64\x60\x08\xb5\x90\x8e\x55\x83\x8e\x5d\xc2\x06\xb4\x04\x03\x11\x60\x91\x85\x6c\xe8\xb9\x0c\x21\x46\x80\x61\x46\x33\x81\xba\x80\x8d\x10\x42\x2d\x89\x14\x29\xc5\xbc\x02\x52\x09\xd1\xaa\x20\x23\x12\x69\x56\xe4\x08\x98\xf8\x09\x27\x10\x26\x75\x7c\x99\x21\xa1\x12\x70\xff\x9e\xc9\xf9\xe0\x53\x5a\x9c\xce\x20\xf8\x88\x04\xf3\x32\x23\x45\x9c\x6d\x61\x62\x04\x21\x2f\x41\x3d\x50\x12\x36\x61\x75\x35\x48\x61\x2a\xe9\x9c\xc7\x87\x1e\x13\x05\x1a\x1b\x4b\x9a\x22\x06\x56\x56\x0b\x68\x73\x69\x24\x24\x20\x62\x5d\x4b\xb1\x55\xd3\x90\x4d\xac\xb3\x16\xeb\x40\x4e\xd2\x7d\x4f\x41\x96\x88\x39\x5d\x08\x05\x97\x95\x59\xe2\x19\xaa\x9e\xd1\x4c\x84\x90\xf3\x5d\x51\x90\x14\xcd\x8f\x68\x26\x4a\x09\xab\xc6\xc8\xc5\xa9\x62\xea\x81\x07\x18\xdd\x35\x59\xcb\xb0\x55\x09\xf8\x86\xc3\x02\x21\xa2\x15\x5f\xc8\x6a\x26\xa2\x1c\xb8\x40\x0e\xcd\x20\xd6\x58\xd9\x0e\x7d\xa0\xea\x49\xc2\xeb\xc4\x36\x91\xaa\x99\x82\x88\x6c\xdf\xa7\x11\xa4\xbd\xc8\x14\x3d\x51\xb5\x02\x26\xa3\xa7\x23\x24\xa6\x9b\x88\x12\xd0\x52\x2f\xb1\xc4\xc4\x74\x4d\x9f\x71\x53\x40\x68\x4f\x8c\x3d\xc7\x01\x24\xf5\x1d\x86\x86\x48\x13\x13\x89\xd7\x6d\x57\x32\x93\xac\x8e\x06\x26\xb2\x13\x8e\x08\xb2\x6b\xb0\x31\xcd\xba\x2e\x8f\x65\x24\xd1\x9e\xc4\x46\x34\x9f\xa8\x69\xec\xa2\x34\x0d\x6d\x5f\x62\x68\x2f\x94\x65\x25\x95\xb2\x7a\x3a\x1a\x72\x5c\x05\x32\x81\xa7\x02\x43\x83\x31\xef\xc4\x80\xc7\xb1\xae\xb2\x49\x12\xa4\xc8\x77\xac\x98\x40\x10\x59\x89\x1d\xe8\x90\xf3\xa2\x94\x0b\x32\x0a\x83\x42\x68\x2b\xba\x03\x05\x55\x34\x91\xac\x02\xde\x0d\x2d\xd1\x0f\x14\xd6\xb2\x22\xde\x55\x68\xc1\x8c\x3d\x1b\x87\x26\x4c\xb1\xc3\x27\x01\xc3\x44\xc0\x10\xff\x16\x7c\x4a\xcb\xfc\xb2\xc8\x7c\xb0\xe8\xd9\x91\x6d\x02\xec\xdb\x26\xd2\x25\x1f\xdb\x72\xea\x33\x2a\x1f\x22\x8d\x77\xd3\x90\x56\x62\x86\x73\x15\x95\xd7\x2d\x8d\xd5\x9c\xc4\x83\x41\x46\x0b\xe8\x9b\x69\x04\x11\x87\x1d\x56\x56\x60\x9a\xc4\x1a\x26\x3c\x27\x98\x50\x32\x13\x3a\x36\xb9\x30\xd0\x34\x5e\x22\x42\xa8\x42\x5d\x90\x02\x36\x65\x49\x56\xdb\x9b\xc7\x86\x4f\xfb\xba\x24\xc9\x82\x2d\xb1\xa1\x61\xb1\x0c\x17\x48\xd8\xf4\x88\x62\x10\x1c\xc6\x8c\x03\xe8\x44\xe4\x7d\x29\xd4\x1c\x2c\x87\x8e\xa9\x73\x19\xb9\xbc\xe5\xfb\x00\x46\x44\xf2\x31\x67\xd8\xac\x69\x69\x9e\x21\xa5\x91\x2b\xf0\xac\x42\x30\x36\x81\x44\x80\x0e\x58\xe2\x6b\xb4\x68\x3a\xb1\x40\xdb\x24\xa3\x6c\x10\x4a\x49\x64\x59\xd8\xc2\x40\x75\x2c\xc2\x59\x09\x34\x12\x31\x76\x3d\x64\xb8\x06\x44\x20\x24\x76\x92\x70\xbe\x0c\x11\x8b\x4c\x4e\xc1\xa1\xc5\xea\x7a\x56\x4f\x07\x78\x16\xcf\xda\xb2\xe5\x70\x7e\x9c\xd0\x72\x28\xf8\x88\x57\x90\xcf\x73\x3e\x4b\xb3\x20\x70\x23\xd5\x30\x14\x8f\x63\x4c\x39\x61\x53\x64\xcb\xd8\xc9\xca\xe5\xfd\x50\xc7\x1e\x60\x83\xc0\x15\x1c\xd1\x34\x43\x4d\x89\x88\xe4\xf9\x8a\x26\x78\xb1\x1b\xcb\x89\x6a\xa8\xbe\x2e\x59\x12\xe3\x32\x2c\x46\x0e\x87\xb2\xca\x4b\x15\x27\x49\x91\x14\x59\x22\x8c\x0d\xc7\x85\x26\x62\x8d\x28\x34\x3c\x4c\xb3\x09\x2d\xd0\x80\x13\xac\x44\x50\x45\x85\x41\x29\x60\x34\xd5\x50\xb4\xc0\xfb\x5b\xf0\x29\xed\x2e\x99\x41\xf0\x09\x6c\x9a\xe7\x19\x9e\x97\x54\x9a\xe5\x65\x8e\x45\x76\x92\xca\x09\x89\x3c\x4b\xd4\x0c\x04\x5c\x53\xc2\xd8\x34\x15\x8b\x36\x82\x20\xe4\xfc\x00\x19\x5a\x46\xdb\x1b\x59\x76\x24\x23\xec\x62\x04\x62\xff\x7f\x2e\x81\x7e\x62\x48\x90\x0b\x75\x21\x76\xe9\xd4\xe7\x5d\x95\xc3\x96\xeb\xa6\xc0\x81\xaa\x0d\x88\x67\xd9\x19\xcd\x04\xeb\x01\xb0\xac\xd8\x63\x2d\x0b\x02\x5b\x16\x05\x1c\x81\xd8\x00\xa6\x2b\xa6\x0c\xc3\x3b\xae\xe5\x0a\x44\x0b\xe8\x54\x51\x4c\x43\x90\x58\x4d\x12\x33\x73\x79\xa0\xda\x00\x59\x96\x0c\x0c\xcc\x69\xba\xcc\xf9\x16\x60\x74\xc3\x31\xac\x88\x91\x2c\x91\x97\x0d\x19\x01\xc3\x60\x35\x93\x48\x7a\x6c\x05\xb1\x24\x66\xe5\xf2\xa1\xe8\xa8\xa6\x20\xa3\x10\xa7\x89\x2d\x43\x25\xf2\x08\xd1\x62\x9a\x0f\x18\x8f\xd7\x23\x3f\x4c\x20\x67\x3a\x28\x51\x3c\xcf\xa7\x1d\x1a\x44\x99\x05\x1f\x9f\xd6\x2d\x9b\x36\x2d\x4f\x8e\xce\x3d\x14\x2e\x95\x83\x90\x37\x15\x59\x72\xa1\xc4\xeb\x7e\x1c\x47\x46\x92\x02\xe4\x0b\x4a\x24\xc6\xb1\x6a\xa7\x28\xa3\x99\x40\x18\xd9\xa9\x00\x03\x4c\x22\x89\x35\x6d\x5e\xd7\x89\x92\xc8\x46\x20\x5b\x0a\x27\x19\xae\x1a\x44\x58\x43\x2e\x76\x63\x07\x2a\x09\x86\xb4\x66\xf8\x59\xdd\x1a\x78\x1a\xc7\x24\x4e\x02\xe4\x46\x89\x09\x84\x58\x48\x58\x35\x06\x9a\xc8\xa5\x7c\xc8\xda\x31\x51\x01\x83\x6c\xc0\x47\x41\x42\x00\xa4\x13\x9f\x41\xc9\xdf\x82\x4f\x69\xea\xd4\xff\x7e\xf0\x11\x88\x9a\x18\x08\x31\x92\x27\x45\x61\x0a\x35\x09\x9a\xc0\xf6\x12\x4d\x85\x30\x02\x01\x48\x05\x08\x42\x3d\x72\x45\x8f\xf6\x93\x44\x04\x5a\x2a\x40\x3a\xa3\x4d\x15\x23\xcb\x4d\x19\x5f\x4c\xc3\x50\x35\x68\x1c\xf2\x22\x43\x13\x43\x21\x1a\x74\x34\x25\xf1\x52\x86\xb5\x43\x8b\x09\x19\xe2\x3a\xb6\xa8\x88\xba\x9d\x2a\x59\xe9\x1b\x0c\x36\x88\x9e\x00\x0e\x45\x0e\xe7\x8b\x3a\x93\x0a\x71\xe2\xc9\xac\x7a\x2e\x28\x32\xb1\x0d\x69\xcd\xe3\x45\xcd\x09\x6c\xce\xf5\x80\xab\xf2\x66\x56\x2e\x2f\x72\x2e\xcd\x30\x26\xa3\x05\x04\x98\x5c\x48\x8b\xbe\xa1\x8a\x8a\x2b\x8a\x76\x9c\x6a\x3e\x63\x45\xaa\xa8\x38\x22\x51\x74\x56\x83\x24\x35\xe3\xd8\xcf\x4a\x55\x20\x86\x1c\x49\x11\xa7\xd8\x20\x15\x83\x08\xb3\xa2\x12\xb0\xc4\x56\xcd\x10\x87\x2c\x31\x43\x11\xa5\x3c\xb2\xf9\xc0\x77\x13\x86\x20\x1e\x00\x11\x98\x19\xad\x49\x22\xc8\x31\x2d\x43\x4e\xb6\x13\x46\x8c\x38\x3e\x51\x1c\x22\xc4\x34\x88\xa1\x9b\x30\x20\x01\xb1\x1e\x41\x41\x51\x35\x39\xb2\xb0\x1a\xb2\xac\x22\x66\x35\x13\x1c\xeb\x58\x11\x48\x90\xb2\x50\x12\xfc\xd0\xb6\x91\xe8\x00\x93\xf0\xae\xc3\xb8\xae\xea\x28\x81\xc7\xc4\x8a\x1e\xda\x31\x10\xdc\x04\xfa\xbc\x09\xb3\x12\x0a\x7c\xcb\xf7\x53\xdd\x23\xb2\x2a\xd8\x4e\x10\x47\xb2\xad\xcb\x7c\x18\x33\xbe\x0f\x63\x23\xa6\x35\xdd\xf4\x51\x6c\x27\x84\x0e\x3c\xdb\xf3\xb0\xc9\xa3\xf0\x6f\xc1\xa7\x34\xbd\x3b\x83\xcc\x47\xf7\x21\x9d\x3a\x90\x65\x55\x16\x98\x2c\xf4\x38\x40\x5b\x9e\xcf\x8a\x1c\x6f\x49\x18\xfb\x06\x71\x7c\x8b\xf5\x18\xcb\xd0\x4c\x03\xc7\xb2\xad\x1a\x59\x9d\xf2\x01\x4e\x45\x3b\x46\x09\xb2\x24\x44\x74\x87\x56\x14\x86\x25\x01\x76\x43\x4c\x42\x9c\xb2\x3c\x94\x0c\xd9\x89\x1c\xcf\xa4\x03\x36\x30\x1d\x8c\x83\xac\x2e\x80\x92\x8c\x93\x20\x22\xbc\x19\x08\xaa\x11\x21\xdd\x62\x7d\x0d\xf2\x1c\xef\x83\x30\xf5\x53\xa8\xa9\xb1\x1d\x79\xac\x21\x07\x31\x12\x38\x41\xa7\x21\x9d\x95\xf4\x1d\x00\x0f\x26\x22\x4e\x25\x82\x24\x9b\x20\xc7\xf4\xb1\x6e\x49\x26\x17\xf0\x9a\x84\x22\xc6\x05\x9c\x64\xa6\x1c\x63\x05\x5e\xa0\x99\x8e\x2b\x00\x3d\xa3\xab\x28\xb4\xfd\x04\x30\xb6\xa6\xa9\xc8\x56\xb9\x44\xc5\x92\x6d\x89\x8e\xee\xd3\x48\x66\x54\xda\x0d\x4d\xc8\xa8\xa9\x27\x27\xba\xe2\xe8\x5c\x44\x63\xdd\x12\x33\xca\x4b\x05\x57\x15\x14\xa4\x27\x1c\xb1\x18\xdb\x56\xe8\x58\xd7\x3d\x99\xf0\x69\x2c\x89\xba\xe8\xca\x36\xf0\x03\x5d\xc0\xbe\x1e\x58\xa6\x08\x54\xcd\xf2\x59\x92\x55\xf0\x09\x1c\x06\xb9\x84\x23\x51\x62\x3a\x3c\xe0\x41\x20\x49\x80\x0d\x64\xa2\xa7\x4a\x18\x70\x26\xb4\x3d\xc2\x78\xa6\x6b\x7b\x61\x18\xdb\x8c\x6c\xda\x74\x56\xb9\x7a\x10\x22\xd3\x4e\x22\x51\xd3\x45\x5a\x26\x2c\x91\x35\xc5\x57\x13\xc1\xf6\x58\x4b\xd3\x75\x16\x24\x89\x65\xdb\x1c\x96\xcc\x80\xd1\xa3\x90\xc3\x8a\x8e\xff\x16\x7c\x4a\xab\xa0\x65\x90\xf9\xb8\x49\xe2\x8b\x02\x0f\x31\x74\xa1\xcb\x89\xd0\x49\x02\x82\x90\xc5\x5a\x91\xed\x3a\x34\xf1\x61\xca\xa7\x56\xcc\xfb\x2a\x0e\x41\x98\x28\x38\xc0\x7e\x66\x35\x26\x56\xe1\x78\x46\x44\x1e\x92\x6c\xd9\x8a\xc4\x40\x0d\x80\x63\xf0\xac\xc1\xf9\x38\x54\x23\xd1\x55\x45\x45\x94\xf8\x28\xf4\x2c\xdb\x47\x4a\x04\xb3\xaa\xbb\xa5\xc4\x11\x4d\xe8\x3a\xa6\x6a\x7b\xa2\x86\x2c\x45\x07\xb1\xed\x33\x11\x8e\x0d\x03\x48\xa2\xcb\x71\xa1\x69\x43\x5f\x61\x64\x4e\x64\x65\xc1\x13\xfd\xac\x54\x05\x5e\xe5\x21\x46\x81\x92\x10\x36\x54\x02\x87\x49\x19\x8f\x48\x08\xfb\x0c\x41\xc4\x88\x68\xcf\x30\x24\xec\x6a\x91\x8b\x13\x23\x54\x53\x4d\xd4\x31\xce\x68\x4d\x14\x8f\x8e\x1c\x5f\xb6\x60\xec\x1a\x10\xa6\x36\x6f\x06\xa6\xcb\x19\x8c\x99\x5a\x0a\xb6\x78\xc9\x64\x92\x73\x97\x0c\xe4\xd1\xa2\xe5\x06\x40\xa6\x85\xac\x74\x30\x31\xb4\xd5\x88\x0b\x22\xd9\x0b\x19\x40\x84\x48\xf7\x2d\x35\xb5\x7d\x5d\x71\x2c\x37\x76\xa1\xce\xb9\x71\xe8\x25\x7c\x9a\xea\x6a\x98\x3a\x9e\x24\x89\x5e\x56\x82\xb3\x22\x8b\xaa\x08\x0d\xa8\x28\x58\x32\x0d\x64\xf3\x3e\x6d\x78\x9e\x17\x59\xae\xec\x6b\x20\x36\xec\xc8\x0c\xc5\x50\x44\xaa\x2b\xa7\x7a\x28\xd2\x30\xab\x80\xac\x47\xb6\x03\x4d\x14\xc5\x18\x27\x29\xab\x28\x3e\xe4\x69\x60\x1b\xb2\xc8\x7b\x24\x05\x7e\x62\xfb\x06\x8b\x0c\x15\x2b\xba\x07\x4d\x91\x33\x8d\x12\x85\x89\xf3\xc1\xa7\xb4\x9a\x7c\x06\x99\x8f\x1c\xca\x72\x14\xc9\x31\x49\x7c\xd9\x09\x75\x59\x06\x3e\xa0\x89\x17\x32\x9a\xe7\xb8\x51\x28\xa6\xae\xc1\x4a\x7c\x10\x38\x02\x9b\x72\xb6\xa2\xe2\x20\xce\x68\x53\xb1\x3e\xd1\x08\x4d\x40\x2c\x3b\x89\x8a\x34\x33\x40\x16\x42\x6e\xec\xca\x58\x12\x20\x4b\xdb\xb6\x48\x5b\x66\x6c\x58\x89\xee\xca\x61\x4a\xeb\x9c\xe0\x66\x34\x13\x5d\xf3\x88\x99\x78\x81\xe0\xa3\xd0\x4a\x25\x53\xb2\x3d\x0e\x38\x72\x4a\x2b\x2e\x4f\x04\xd7\x85\x84\xe6\x62\x51\xc5\x8c\x9f\xd2\x46\xc2\xa9\x58\x94\x32\x13\x12\x0d\x5a\xb5\x0d\x4d\x83\xbe\x21\x85\xac\x99\x28\xc4\xc2\x22\x8a\x39\xd9\xa7\x5d\x13\xcb\xc8\x8a\x0d\x89\xe1\x42\x1a\x41\x43\x8f\x11\x43\xc4\xac\x8a\xfe\x3c\xd2\x25\xc3\xb1\xe4\xd4\x8f\x58\x81\x61\x11\x41\xaa\xa2\x2a\x11\xd6\x31\x52\x14\x93\x45\x76\xe4\xdb\xae\x1b\xfa\x5a\x2a\x09\x74\xcc\xc3\x10\x64\xb5\x26\x8e\x08\x39\x9d\x73\x50\x2a\x71\xa2\x4e\x52\x23\xd2\x04\x40\x8b\xaa\x6f\xa6\x4c\x1a\xf3\x69\xca\xc5\x2a\xad\xab\x8c\x97\x78\x82\x8b\xb1\xcf\xe3\x34\x2b\x99\xd7\x05\x2a\x62\xe5\x30\x24\x32\x6d\xd0\xb6\x46\x47\x1e\x23\x07\x38\x61\x04\x1f\x27\x3c\x16\x31\xd0\x03\x39\x41\xa6\x66\x32\x16\x21\x74\xec\xda\x66\x56\x33\x11\x19\x05\xeb\x06\x86\xa9\x91\xb0\xba\xe9\x58\x74\xe4\xa9\x11\x4f\x22\xc5\xa6\xbd\x88\xf1\x4c\x33\x95\x83\xd8\x96\x79\x44\x02\x8f\xa4\x58\x40\xc1\xff\x11\x4f\xce\x37\x5b\x95\xd6\x97\x56\xd0\x6c\xd5\xf3\xc5\x81\x5d\x09\x78\x67\xd0\xfe\x35\x7b\xfb\x9c\x5a\x36\x6c\xf4\x4c\xc1\x9a\xb4\xf3\xa7\x8f\x36\x2e\x6d\xf6\xde\xb4\xb2\x6c\x85\xee\x25\x4c\x73\x4d\x1b\x46\x0f\x5c\xfa\xcb\x95\x5f\x7d\x41\xbe\xf7\x9f\xfc\xa6\xfb\xcb\x6d\x7a\x1f\x6f\x3d\xb6\xe1\xce\x7a\xf1\xd4\xfa\xfd\x7a\xaf\x2e\xf9\x2a\x5f\x95\x06\x7f\xf0\x73\xeb\xae\xde\xf7\x5b\xe3\x4e\xd7\x7f\xdf\x2c\x5d\xf4\xa3\x32\xd1\xe6\x2f\xee\x97\xa8\xef\xfd\xd2\xae\xc2\x73\x5f\x95\x6c\x60\xda\xd8\xf3\xec\xa5\xeb\x6b\xbe\x37\x6a\xfd\x5b\x7b\xa9\xbb\x9b\xac\xda\x7b\x33\xbc\xf0\xa5\xa9\xeb\x5e\xaa\x31\xde\x6b\xd3\xa2\x5f\xff\x87\xaf\x2c\x61\x3a\x64\xcc\xd1\xee\xb7\xac\xef\x3f\xaa\xc9\x9b\x2d\x9a\x3c\x2a\xbd\x55\xa3\x73\x63\x7d\xcb\x12\x79\x52\xa7\x65\xa3\x2e\x98\xab\x5d\x70\x4b\xc9\xde\xb4\x65\xbb\x17\x76\xf2\xd9\xfb\x26\x2c\x5e\xf4\xc3\x88\x16\xe5\x6a\x5e\xf7\xfc\xa8\xf5\x3d\x87\x7e\x54\xbf\xe1\x5d\x54\xed\xaf\xa7\x3d\xf9\x4a\xbd\x92\x6d\xa0\xe1\x0d\x6d\xaf\xaa\x74\x7c\x70\xc7\x9b\x3f\x78\xa6\xf3\x1b\x4d\xde\x69\x21\xdd\xeb\xe4\xed\x0a\x7b\x2f\xad\xf4\x4a\xd5\xb6\x1d\x7f\x9e\x50\xc2\xf4\x83\x83\x8b\xcb\x2f\xbd\xa0\x5d\x2d\xe5\x1e\xa7\xf3\x83\x9f\xae\xdd\x71\x6c\xfe\x8d\x47\xb6\x54\xfe\xb2\xc6\xad\xad\xbe\xfa\xe3\x52\x7c\x7a\xca\xbf\x9b\xad\x4a\x5b\xd5\x0c\x4e\x00\xda\xf7\x15\x5f\x26\x9a\x90\x9a\xbc\xe6\x2a\x46\x82\x12\xc7\x85\x36\x1d\xab\x7c\xa0\x84\x22\x17\x79\x72\xe4\xa7\xb4\xc0\xcb\x02\xf6\x64\x4f\xe0\xa4\xac\xd2\x4f\x2e\x61\x3c\xc3\xa7\xfd\xc8\x64\x78\xa0\xf0\x9c\x01\x99\x14\x06\x5e\xe4\xc8\x58\x8d\x93\xc0\x84\x9a\xc8\x7b\x4e\xe2\x28\x1e\x50\x78\x9b\x25\x81\x90\xd1\x4c\xa0\xed\x09\x9a\x92\x2a\x42\x4c\x23\x15\x10\x5d\xf5\x14\x24\xb8\xa2\xe8\xaa\x6a\x02\x55\xda\x21\xc4\x64\x88\x66\x9b\x80\xd3\x54\x03\x39\x46\x92\x18\x59\x9d\x8a\x0c\xe1\x14\x03\xf2\x4e\xc0\xb3\x82\xe1\x89\xb6\x22\x62\x1d\xda\x30\xa6\x83\x58\xf4\xa5\xc8\x72\x0c\x5a\x60\x54\xa0\x71\xae\xe2\x4a\x09\x0a\xf9\x34\x2b\x09\x30\xb2\x1c\x90\x04\x8a\xc1\x01\x2f\x94\x54\x19\x7a\x52\xc2\x04\xb6\xa7\xba\x92\x9f\x58\x8a\xaa\xda\x36\xe2\x38\x89\x95\x2c\x8b\x46\x2a\xab\xe9\xb6\x91\x95\xc2\x1d\xb9\xa2\x05\x15\x48\x44\x8e\x96\xc4\x88\xc3\x81\x68\x61\x95\x09\x43\x20\x30\x21\x10\x35\x56\x57\x6c\x2f\x15\x6d\x45\x48\x68\x89\x67\xf8\x88\x27\x61\x56\xe9\x27\x31\xf9\x98\x78\x38\x40\x66\x02\x4d\xe4\x0b\xbe\x49\x6c\x03\x13\xa0\x6a\x81\xa1\x9a\x3a\x04\xba\xc8\x68\xbe\x23\x98\x40\x76\xd4\x50\x8d\xfc\xac\x72\x16\x2d\x8c\xd5\x08\x5a\x40\x21\x61\xec\xa9\x7c\xac\x5a\x30\x66\x2c\x9a\x4f\x13\x5f\x4c\x6c\xe2\xc9\x92\x95\xd0\x3a\x74\xa1\x6e\x0b\x8c\xc6\xc6\x90\xfe\x7b\xfa\x59\x5a\x9c\xce\x22\xf8\x60\x55\xd4\x2c\xa2\x6a\x89\x2d\x25\x8c\x68\x40\x96\xd5\x65\x2e\x84\xac\x1f\x78\x72\x60\x32\x89\xaf\xe8\x28\xe4\x50\x08\x15\x35\x12\x12\xd3\x24\x19\x25\x38\x02\xd1\x23\x42\xcb\xbe\xc2\xd1\xe0\x5c\x0c\x62\x4c\x39\xa4\x79\x0d\x28\x31\x1f\x2a\x2e\x92\x34\x5b\xb1\x7d\xa2\xb8\x29\x44\x9c\x2c\xd1\x91\xa0\xd0\x46\x46\x33\x51\x03\x06\x08\x26\x08\x38\x53\xb0\x25\xc3\x92\x08\x0a\x34\x28\x3b\x3c\xe1\x3c\x64\x04\x51\x8c\x88\x90\x06\x88\xb5\xed\x44\x42\x62\xe0\xa4\x6e\x9a\x55\x19\xd6\x94\x1d\x10\x19\xa2\xa3\x81\x84\x96\x63\xcf\xf0\x4c\x49\xc2\x4c\xc4\xc6\xb6\x92\x00\x16\xa9\x5c\x0c\x50\x90\x10\x3a\x36\x0d\x1c\xc5\xba\x2d\x1a\x59\xad\x09\x4d\x2c\xc3\x4f\x15\x33\x01\x01\xb6\x34\x83\x33\x40\x0c\x19\x57\xf7\x15\x11\x19\xbc\x41\x02\x41\xb5\x1c\x29\x70\x2c\xec\xfb\x50\x13\xe4\x30\x11\x33\xba\x85\x0b\xb2\x03\x13\xd5\x70\x51\x6a\x85\xa1\x0f\xb1\x67\xc9\x66\xc0\xcb\x24\xa5\x4d\x99\xc4\x46\x9c\x26\xaa\xe8\x98\x4a\x20\x44\x31\x9f\x30\x66\x4c\x22\x3a\xa3\xa3\x41\xe0\x6d\x5d\x72\x0c\xd7\x4f\x54\x35\xc0\x36\x6f\xd3\x1e\xe2\x54\x68\x38\x61\xec\x07\x40\x80\xac\x66\x38\x1e\x0e\x84\xc8\x4f\x45\x19\x29\x4a\x64\xd0\x59\xa5\xe4\x9c\x79\x2e\x19\x17\x3c\x0f\x00\x41\x09\x22\xe8\x24\x02\x42\x22\x27\xfa\xd8\x53\xcc\xc8\x27\xa9\x25\x6a\x82\xea\x12\xcf\xf4\x04\x9f\x70\x8a\x2f\xfc\xbd\xdf\xa1\xb4\xcc\x2f\x03\xe1\xcd\xd1\xd4\x73\x37\x72\x20\x62\x9e\x08\xc0\x07\x4a\x44\x80\x1f\xc8\xa2\x8d\x19\x47\x81\x34\x31\x21\x6b\x3a\x9a\x1f\x12\x9a\xb0\x69\xc4\xa9\xa2\x9f\x91\xa3\x09\x02\x70\x13\x5a\x07\x88\xc6\x81\xa3\xbb\x30\xe1\x15\x27\xb1\xac\x04\x07\x9a\x23\x5b\xa9\x19\x31\x48\x16\x54\x43\xb7\x34\x5b\xb3\x53\x9b\x06\x26\xc9\xea\x51\x22\x31\x51\x3c\x33\x60\x35\x8c\x4d\x35\x8d\x00\x8e\x58\xd9\xb6\x78\xdd\x67\xa1\xcd\xb8\x06\x67\xbb\x82\x27\x4b\x34\xf4\x5c\x1e\x63\xc5\xd3\x43\x23\xa3\x7c\x03\xca\x8c\x0c\xa1\x4b\x54\x91\x4b\x55\x92\x8a\x71\xa2\x62\x59\xf1\x44\x24\xa8\x9e\xe3\xc8\xb6\x66\x43\x25\xc6\x74\x0a\x04\x10\x49\x34\x09\x79\x8e\xce\x4a\xf5\x77\x31\x1f\xc5\x34\x17\x61\x90\xea\x01\x2b\x18\x84\x37\x15\x39\xb4\x69\x0e\xcb\x22\x2d\xbb\x7c\xa0\x18\x08\xc6\x21\xb0\x25\x1e\x43\x68\x6a\xa9\x9e\x55\x5e\x6a\x7a\x0a\x4d\x73\x90\x16\xb5\x34\x84\x0c\xed\xc3\x04\x62\x5e\x66\x38\x45\x4b\x13\xda\xf1\xbd\x98\x0f\x88\xee\xca\x6c\x2a\xfb\x46\x94\x26\x1c\xca\xac\x12\xa2\x48\x96\xc0\x85\x34\xb6\x04\x4f\xf2\x4c\x3a\xf4\x1c\x5a\xf0\x2d\xc5\xd0\x79\x16\xd2\xac\xaf\x60\x1f\x85\x86\xa9\xf2\x8e\x1f\x13\x0b\x71\x1e\x67\x65\x75\xf7\x65\x22\xd3\x91\x18\x85\x8e\x24\x00\xb0\x16\x79\xac\x1e\xf9\xa9\x65\x10\x3e\x70\x79\x3a\xf4\xb1\x04\x75\xcf\xb4\xb0\x05\xe2\x44\xf3\xd5\x24\x25\x25\x3a\x74\xce\x07\x9f\xd2\xee\x92\x19\x04\x1f\x85\x24\x9c\xcf\x20\x5b\x56\x75\xd9\xb5\x0d\x09\xd3\x48\x92\x88\xaf\x84\x1c\x12\x34\x18\x29\x7e\x1a\x28\x12\xc7\x47\xa6\x6d\x1a\x5a\xaa\x02\x88\xb3\x2a\x9b\x40\xa2\x61\x12\xf2\x9e\x23\xb3\x6e\xc8\x05\x32\x6f\x48\x5e\x92\xba\x8c\x62\x39\x92\x24\xd2\x90\x30\x4e\x9c\xea\xbc\x41\x03\x00\x21\x09\x01\x4a\xb3\xea\xbc\x70\x89\x62\x33\x7e\x1a\x89\x16\x14\xcd\xc4\x66\x5d\xa4\x70\x42\x4c\x30\x03\x0c\xec\x8a\x8a\xe6\x38\x69\x28\xb3\xd8\xc6\x69\x92\xba\x30\x34\x90\x95\x51\xf1\x13\x02\x8c\x24\x42\x5b\x6e\x24\xd8\x30\xd0\x35\xe4\xc9\x3e\x87\x89\x40\x80\xc3\x63\xcb\x55\x45\x49\x49\x90\x24\x00\xdf\x0b\x15\x31\x52\x4c\xa4\x98\x19\x65\x3e\xe7\xae\xa2\x72\x2c\x0b\x0c\xaf\x70\x2e\x2b\x47\x0e\x49\x4d\xc4\x84\x92\x46\xfb\x01\x63\xcb\x32\x96\x1c\x51\x03\x22\x27\x1b\x2c\x61\x02\xd3\x8b\x71\x56\x6f\x20\x41\x12\x60\xd6\xd6\x02\x40\x5b\x40\xf4\x90\x84\x7d\xa4\xb8\x92\x0f\x52\xda\x11\xe8\x40\x75\x34\x17\x86\xaa\xeb\x68\x11\x4c\x42\x27\x60\x44\x1c\x04\x59\x1d\x0d\x7c\x10\x82\x73\xb9\x0f\xe1\x68\x8c\x3d\x5f\xe0\x55\x83\x68\x09\x30\x03\x5f\x10\xa0\x49\xeb\x58\xd3\x39\x0b\xc8\x5e\x1a\x19\xba\x27\x09\x69\x4a\xb2\x7a\xdb\x06\x8a\x41\x48\x1b\x02\x40\xba\x2f\xf8\x0e\x2b\xf1\xbc\x9c\x2a\xb6\x2c\x89\x32\x8b\x7c\x3e\x90\x65\x9a\xf7\x2c\x39\x51\x7d\x9f\x67\xb1\x1e\x07\x4e\x6a\xff\x2d\xf8\x94\xa6\x4e\x65\x10\x7c\x22\x83\x49\xac\x24\x05\xa9\x00\x38\xc9\xc0\x82\x12\x38\x91\xaa\x6b\x21\xc7\xe9\x52\xe8\xe1\x28\x76\x22\x62\x8a\x9c\x9a\x86\xba\xe6\xf9\x21\x51\xb3\xaa\x63\x43\x1e\x68\xaa\xcd\xe3\x44\xc4\x4e\xa0\x4a\x2c\x76\x18\x2e\xa5\x43\x46\x63\x50\x62\x71\x7c\x60\x39\x29\x8b\x42\x03\x58\x2c\xc7\x2a\x96\x2a\xd9\x11\xc9\x4a\x7d\x62\x6c\xcd\x88\x62\x36\x76\x20\xc7\xa5\x8a\xa4\x5b\x8a\x1b\xa7\xa9\x19\xd1\xae\xc8\x63\xd1\xb6\x80\x2b\x20\x5f\xe4\x79\xa2\x44\x90\xc6\x91\x61\xeb\x59\xb9\x7c\x90\x70\x26\x1f\x12\xdb\x81\x0a\xf1\x23\xd3\x40\x0c\x0a\x78\x2e\x56\x51\xc8\x02\x00\x25\x59\xb5\x81\x03\x90\xe8\x06\xd0\x8b\x5c\x96\x84\x06\xcc\x48\xdf\x80\x10\xf2\xb2\x20\xf1\x50\x97\x52\x9f\x24\x26\xb6\x2c\xd6\x55\x10\xc2\x09\xc0\xae\x08\x8c\x88\x09\x65\x6c\x22\x5a\xf4\x4d\xa0\x5b\x31\xa6\x4d\x2b\xab\xcc\x87\x11\x25\x1f\x21\x99\x10\x45\xf5\x7c\x59\x85\x7e\x62\xba\x2e\xe3\xfb\x0e\x72\x4d\x5d\xd2\x13\x5e\x20\x11\x54\x6c\xa0\x19\x21\x4b\x02\x2e\x80\x66\x56\xea\x13\x1b\x99\x50\x55\x81\x27\x88\x98\x55\x45\xcf\xb2\x35\x3e\x74\x03\xc4\x8b\xd8\xb0\xfd\x48\x51\xa0\x69\x31\x48\x77\x82\x28\xc1\x98\x66\xe2\xc0\x4f\xb3\x2a\x7e\x02\x07\x85\xc0\x4d\x2c\x59\x44\xba\xc6\xa7\x5e\x0c\x0c\x21\x82\xbe\x92\xf8\x61\x2a\x4a\xac\x69\x18\x16\x32\x13\x89\x53\xe4\x34\x4e\x0c\xcc\xa6\xd8\xf8\x5b\xf0\x29\x4d\xef\xce\x40\xf3\x51\x7c\xd7\x62\x14\xee\x5c\x64\xf1\x53\x45\x4f\xb0\xe0\x26\x96\x1b\x46\x06\x31\xa3\xd8\xd7\x43\x51\x35\x2c\x4e\xd2\xb1\x43\x23\x24\x99\x81\x86\x84\xac\x6a\xfb\x6e\x6c\xeb\xc8\x72\x75\x57\x60\x43\xe2\x80\x54\x03\x00\x12\x07\xba\x11\x10\x1d\x9f\xd3\x35\xc3\xe5\x5c\x9a\x0d\x09\xeb\xd9\x6e\x8c\x68\x37\x14\xb2\x2a\xaf\xd1\x3c\x0f\x78\x6c\xcb\x0e\x4a\x44\x27\x4e\x31\xc3\x22\x56\xc2\xb1\x60\x78\xd0\x91\xfd\xd4\x83\x91\x1e\x4a\x1e\xd0\x5d\x29\x0a\xd3\x58\x25\x4a\x66\x9d\x17\x5a\xc8\x22\x35\xf1\x0d\xd9\x82\xe7\x36\x8e\xa1\x44\x66\xc0\xbb\x06\xe4\x62\x3a\xe5\x10\x09\x35\x39\x20\x31\xed\x29\x9c\x06\x45\x64\xd3\xa6\x8a\xd8\xac\x54\x05\x9e\x17\x89\x01\x5d\xd5\x97\x42\x11\x99\x01\xd6\xfc\xc8\x46\xa9\xc7\x33\x21\xcb\x38\xb1\xc4\xe9\x86\x17\xf0\x86\x2a\x3b\xa9\x2d\x73\x8c\x63\x4a\x59\xa9\x4f\x5a\xea\x25\x58\x54\x03\x4d\x20\x6e\x14\xc2\x98\xf5\x79\x56\xf3\x70\xe2\xd9\x09\xd2\x38\x6c\x46\x91\x22\x6a\x34\xeb\x32\x58\xa5\x3d\x09\x61\x35\xab\x16\x27\x21\xe2\x19\x23\xd2\x44\x86\x98\xbc\xa6\x59\x8a\x08\xb1\x6b\x8a\x69\x92\x8a\x4c\x42\x7c\x4b\x4b\x22\xd5\x4d\x49\x20\x9a\x4a\xe0\x29\x38\x0e\x1c\x06\x64\x75\x48\x19\xba\xc9\x41\xcf\x02\x46\x4c\xeb\x88\x85\x28\x09\xb1\x69\xdb\xbc\x1b\xd3\x32\x72\xd3\x38\x16\x13\xd5\xd0\x35\xdd\x13\x44\xd9\x13\x15\x81\x71\xac\xbf\xbf\x60\x57\x5a\x05\x2d\x83\xcc\xc7\x80\x3a\x4c\x74\xcb\xf5\x09\x34\x3c\x13\xc9\xc0\x70\x04\x1f\xc6\x61\xa8\xd2\x28\x01\x9e\x0a\x4c\x11\x28\x9e\xcf\xb8\x96\x25\x42\x99\x57\x7c\x31\xab\x2b\x06\x67\x70\x3a\x13\x85\x90\x48\x36\x4f\x20\x51\x79\x46\x93\x64\x86\xe3\x79\x85\x93\xb0\x04\x91\x4b\x4b\x21\x52\x34\x4e\x37\x0d\xcc\x03\xcf\x53\x48\x46\x2f\xaf\x43\x37\xd2\xc2\x44\x0d\xb4\x20\x16\x4c\x5a\xd7\x7d\xe8\xb2\xb4\xe4\x25\x96\x4f\xb3\x12\x36\xb0\x15\x01\xcd\x4e\x34\x31\x66\x38\xdb\xb5\xa0\xcd\xba\x7e\x56\xd9\xa0\x19\xeb\x84\x4b\x08\x46\x96\x86\x21\x43\x58\x82\xf8\x04\x99\x91\xa3\xea\x38\xc0\x5c\x04\x1d\x12\xa2\x30\x4e\x48\x22\x2a\x3e\xcd\xf2\xb1\x29\x65\xd5\xd5\x28\x25\x2a\xab\x41\xe4\x99\x20\xe0\x59\x86\x37\x02\x36\x11\x2d\xc9\xa4\x79\x36\x04\x50\x40\x91\x62\xc9\x58\x94\xd9\x58\x61\x52\x31\x14\x19\xe2\x1b\x19\x29\x72\x50\xa1\x39\xcb\x72\xf9\x54\xf1\x7c\xde\x4f\xa2\x90\x27\x89\x68\x58\xbe\xe1\xdb\xc0\xa2\x55\xdb\x4a\x69\x5f\xa0\x1d\xc7\x89\x50\x94\xc8\x11\xeb\x2a\x41\x56\x2f\x62\xd2\xb6\x18\x49\xb2\x6e\x5a\x38\xf2\x22\xcc\x3b\x31\xcf\xf1\x6c\xec\xc7\x16\x0a\x75\x5f\x8c\x8c\x34\xe5\x58\x57\xd7\x14\x5a\xa4\x53\x4f\x04\x8a\x99\x55\xf0\x11\xa4\x98\xd7\x19\xa8\x25\x2e\x1d\x12\x25\x71\x39\x5d\x97\x35\xcc\x13\x14\x41\x60\x3b\x31\x4f\xeb\x66\xaa\x29\xb1\x08\x5d\x1a\x73\x0e\x8c\x81\x46\x93\xbf\x05\x9f\xd2\x6a\xf2\x19\x04\x1f\x91\x08\x69\x94\x4a\x38\x14\x3c\xd3\x30\x14\xd5\xb5\x4c\xdb\x21\x82\xe3\xa7\x98\x0f\x69\x28\x8b\x1c\xa2\x2d\x05\x79\x2c\xe2\x98\x40\xf1\x38\x45\xc8\x6a\x53\x59\xa1\x18\x31\x01\x2b\x8a\x10\x6b\xae\x11\xf2\x81\xab\x84\x9e\x6c\xb3\x09\xe0\x35\x5d\xe0\x19\x4f\x0b\x93\x40\x95\x7d\x49\xb5\x02\xc7\x49\x52\x26\xcd\x2a\xf3\x49\x78\x53\x20\x86\xa3\x0a\xbc\x6b\x98\x36\xef\xf9\x20\x42\x6e\x94\xf2\x0c\x11\x23\x10\x25\x21\xab\xb2\x92\xaa\x32\xc4\x00\x8c\x4b\x58\x2f\xf5\xc5\xac\x5e\x26\x8b\x0d\x10\x21\x47\x09\x25\x5e\xa1\xb1\x8f\x14\x91\x77\xe4\x88\x30\xbe\x1b\xc8\x52\x84\x5d\x47\x12\x5c\xe0\xfa\x2e\x51\xe3\xc4\xe0\x65\x8f\x8d\xac\x8c\x8a\xb9\x42\x8a\x44\x5d\xc0\x38\x80\x1e\xe1\xa0\xc7\x48\xae\x17\x63\x99\xa3\x05\x0f\x1b\x46\x1c\xa3\x10\x86\x98\xd5\x05\x25\x30\x74\x22\xab\x8a\x10\xf9\x99\xbd\xe3\xa2\x00\x3d\x49\x74\x8f\x45\x92\x24\x22\x14\x90\xc8\x4d\x5d\xc7\xc5\xb1\x1f\x09\x02\xe2\xe2\x50\x94\x6c\x9f\x93\xa3\x00\xcb\x2a\xc1\x71\xc2\x86\x42\x66\xea\x13\xa7\xd2\x0a\x13\x87\x1e\xd1\x45\x10\xf1\xbe\x24\x2a\x91\xe6\x39\x16\x23\x58\x0c\x91\x0c\x3a\xf5\x4c\x2d\x74\x19\xa0\x58\xbc\x45\x07\x02\x13\x9a\x59\x75\xbf\x12\x85\x55\x7d\x06\x80\x50\xb5\x42\xd6\x02\x30\x4a\x4c\x9d\x47\xac\x13\x26\x61\x6c\x01\x0f\x03\x14\x4a\x4a\xc2\xc7\x80\xf0\xa2\x46\x9b\x8a\x02\xe4\xbf\x35\x5b\x95\xf6\x65\xaf\x82\x66\xab\x1b\x9f\x3d\xd1\xe7\xd6\x3e\xc2\xc5\x1d\x0f\x94\x67\x7a\xd5\xcf\xff\xd5\x17\xbe\xf8\x44\x95\x21\x73\x5f\xfb\x73\xee\xad\xcf\x97\xdb\x3f\xba\xe4\x17\xce\x26\x5e\x3e\xb0\x6f\x70\x45\x6d\x69\x52\xad\x6e\x13\xcb\xdc\x7d\x57\x9d\x03\x3b\xee\x0a\x76\x6e\x39\x25\x9c\xad\xa4\x79\x83\xdf\x5f\x3e\xb8\x84\x69\xc3\x1d\x6d\xef\x9f\xb0\x63\xf3\x8a\x6b\x3a\xfd\x69\x59\xee\x67\xbf\x2c\xee\x78\x42\x94\x6b\x7f\xbc\xe9\xf7\x32\x83\x4e\x0e\xb5\x3f\x2f\xf9\x0d\xaa\xb6\x75\x4d\x67\xcb\x55\x77\x2c\xf8\x7a\xd3\x99\x39\x9d\xd7\x2d\xaa\x73\x67\xcb\x66\xaf\x7f\x58\x6e\x79\xb3\xbb\x9e\xbb\x6b\xee\x9e\xf5\x4e\xc9\x0e\xaa\xfb\xae\x1b\xfc\x65\xef\x35\x8b\x1d\xcf\xfe\x64\xdc\xb0\xf9\x97\x2f\xeb\xbf\xa7\xdb\x2d\xe3\xce\xf4\xf8\xa1\xc7\xcc\xad\x1b\x7a\x1c\xda\x51\x72\xae\xaf\xb0\x95\x07\x76\xdd\x37\x56\x68\x2f\xef\xdc\x7c\xba\xd1\xee\xef\xa5\x35\x5d\xab\xab\xd7\x1a\xf7\xbb\xbf\x4d\x78\x78\xd6\x22\x75\x41\x09\xd3\x1e\xb0\xfe\x6b\x0f\xa6\xab\x7f\x1d\x1f\x7d\x78\xe1\xd7\x6b\xb6\x5d\xb3\x7c\xcd\x86\x89\x7f\xb4\xdd\xa5\xb7\x5e\xb4\x6f\xf0\x96\x69\x9b\x57\x97\x30\x1d\xf7\x76\x20\x3f\x32\xee\x18\xd5\xfa\xee\x8f\xdf\xbf\xb5\xd1\xc8\xd7\xe8\x8b\x86\x35\x38\xda\xb0\x0b\x69\xd0\xa1\x6d\xe5\x5e\xcb\x8e\x37\xfd\x77\xb3\x55\x69\xab\x9a\xc1\xdd\x97\x57\x15\xc5\x30\x22\x1a\x28\x2a\x93\x98\x04\x05\x2c\x1f\xf9\x82\xc5\x5b\xa2\xea\x62\x62\x63\x84\x21\x61\x44\x5d\x97\xf5\x18\xe9\x8e\x24\xf9\x69\x56\x82\x0a\x27\xc4\xb2\xe4\x02\x4e\x8c\x62\x55\xd2\x54\x8b\x01\x8e\xe6\x44\x81\xe8\xc8\x12\x72\x89\x66\x03\x8d\xb6\x14\xe9\xdc\xcd\x34\x61\x78\x95\x58\x21\xcc\xea\x2c\xe2\xf4\x88\x38\x11\x67\xa1\x10\x05\x86\xc5\xd9\x9a\x92\x3a\xb6\x64\x12\x1f\x20\x2c\xdb\x28\x16\x51\xe2\xab\xd8\x82\xaa\xae\x05\x8e\xe6\xb8\x74\x66\x1d\xf6\x92\x0c\x68\x87\xd5\x34\x0e\x84\x2c\xf4\x24\x8e\x33\x19\x89\x53\xe3\x48\xb6\x43\x5f\x55\x4c\x8f\xa7\x43\x43\xe2\x90\x12\xd1\x1e\x92\x01\x46\x2a\xc8\xea\x7b\x52\xc0\x57\x1c\x4e\x56\x4c\x45\x96\x15\x3b\x66\x2c\x56\x8a\xfd\xc4\x41\x89\xc4\x85\x16\xa3\x6b\x9a\x81\x63\xcd\x0c\xdd\xc8\x0b\x44\x94\x78\x31\x2f\x8b\x59\x29\xdc\x32\x89\xe5\xd8\x66\x45\x47\x55\x6c\xde\x06\xae\xe9\xa5\x8a\x2d\x31\x9c\x0b\x03\x8c\xad\x48\x11\x4d\x87\x57\xe9\x98\xf6\x25\x4d\x23\x41\x12\x07\x24\xab\x0b\x53\xcc\xb8\x0c\x21\x40\x65\x5c\xd6\xe3\x11\xad\x59\x41\xa8\xbb\x89\xed\xcb\x74\xac\x31\x10\x18\x01\x13\xa4\x24\x09\x65\xcb\xd6\x22\x25\x89\xd2\xd8\xca\x6a\x9f\x18\xa2\x28\x70\xb1\x19\xab\x02\x56\xa4\xd8\x34\x84\xc0\x45\x5e\xa2\x25\x86\x8f\x89\x89\x4c\x09\x73\x89\xe3\x72\x29\x6b\x1a\x22\xc0\x10\xeb\x00\xb2\x7f\x4b\x3f\x4b\x8b\xd3\x19\xa4\x9f\x98\xc8\xaa\xa6\xdb\xa9\xe5\x00\x85\xc8\x2a\xcb\xd8\x58\xe0\x0c\x90\x70\x6a\x80\x42\xc6\xb0\x25\x87\x06\x4e\x62\xa5\x8c\x12\xd2\x6a\x24\x7a\x22\xce\xea\x35\x51\x87\x24\x36\x67\xd9\xb1\xef\x7b\x5c\x42\x23\xd6\x62\x62\xa0\xea\x9a\x2b\xd2\x06\x96\x6d\x4e\x8b\x4d\x0d\xba\x74\xa8\xb3\x8a\x94\x04\xa2\x8b\xad\x20\x2b\x09\x90\xf3\x0d\x64\x4b\x7c\xe2\x62\x41\xe5\x1d\x9a\x71\x35\x39\x65\x68\xdb\xc2\x16\x72\x19\x87\x0f\xe2\xc8\x65\x7d\xc8\x92\xd4\x16\x49\x14\xa3\x44\x4d\xb3\x12\x54\xb0\xe5\x2b\xb1\xc6\x10\x05\x19\x11\x93\xb0\x16\xd6\x80\xce\x98\x3e\xab\x3a\xb4\xc4\x5a\xbc\xc6\xeb\x3c\xd0\x85\xc8\xa1\x45\x56\x32\x23\x39\x64\x85\xac\x54\x7f\xda\x71\x90\xc3\xc5\xae\x06\x74\xde\x90\x2d\x5b\x4a\x90\xcb\x98\x74\x94\x68\xb2\x4a\x43\x53\x0d\x74\x03\xc0\x30\x76\x35\x49\xa6\x03\x4d\x26\x86\x9f\xd9\x47\x88\x90\x21\x29\x9a\xa6\x09\x9a\x86\x38\xe0\x19\x12\x23\x06\x5a\x12\xd1\xbc\x17\xc8\x12\x54\x03\x26\x12\x43\x25\x08\xd3\xd0\x13\x68\xc9\x61\x2c\x35\xc8\x4a\x16\xe5\x52\xd1\xc0\x08\x93\x18\x58\x4e\x04\xc2\x54\xe5\xb5\x14\x3a\x0e\xf6\x48\x24\xa5\xb4\xa1\xda\x82\x60\x61\x99\x11\xe9\x30\x52\x03\x06\x38\x80\x64\x26\xbc\x69\x29\xa3\xa5\x21\x66\xe8\x58\xd2\x59\xd6\x03\x44\x50\x79\x06\x0a\x4e\x64\xb2\x56\xa2\xb2\xa9\x2b\xa9\x51\x18\x0a\x09\xd4\x3d\x43\x44\x5a\xa0\xff\xbd\xdf\xa1\xb4\xcc\x2f\x0b\xe1\x8d\x20\x1b\x4b\x01\x9f\xd0\x6e\x12\xa9\x1a\x0a\x15\xc3\x16\x9c\x80\x8e\x52\x8e\x95\x00\x51\x6d\x3d\x4c\xa0\xc4\x26\x89\x6a\x07\x40\x8b\x75\xcd\xc8\x2a\x7a\xb3\x6a\x68\x89\x56\xc4\xa5\xb4\x68\x60\x6c\xb8\x5a\xa8\x62\x29\x8c\x53\xd1\xe0\x1d\xd7\x60\x4c\xc9\x22\xbe\x9a\xf2\xd0\x73\x19\x56\xd4\x74\xc9\x0b\xb2\x7a\xb1\x39\x92\x38\x01\x25\x28\x14\x55\x93\x53\xa2\x30\x4d\x69\x95\x10\xda\x95\x6c\x68\xb0\xa1\xa4\xa9\x2e\x66\x09\x03\x83\x80\x91\x03\x36\xb1\x7d\x4f\xa4\xb3\x6a\x40\x53\x1d\x8b\xc4\x00\xf8\xb6\x47\x03\xd7\xd6\x22\x48\x0c\x6c\xd8\x84\xe8\x96\xa7\x63\xc7\x84\x52\xea\xd8\x48\xd4\x74\xdb\x16\x34\x46\xa0\x01\x9b\xd5\x67\xf5\x04\x9b\xb7\xb0\xe0\x58\x96\xe0\xd3\x2c\x8c\x5c\x5e\x76\x18\x1f\xbb\x90\xd1\x52\x14\x02\x5f\x4f\x38\xcf\x12\x74\xa4\xf3\x91\x27\xd3\xae\xe6\x05\x89\x91\x91\xcb\x0b\xba\xe2\x86\xa2\xc6\x6a\x09\x8e\x10\x4f\x14\x41\x31\x4c\x8b\xd1\xf5\xc0\xf2\x5c\x9e\x76\x64\xd3\x73\x75\x9a\x21\xb1\x40\xc7\x1c\x0d\x43\x43\xd6\x50\x56\x25\x47\x4f\xd7\x20\x13\x41\xd5\x8c\x83\x48\x71\x23\x11\x08\x30\x45\xba\xe7\x32\x02\x03\x45\x57\xe4\x95\x40\xd3\x3d\xcf\x95\x41\xea\xdb\x9a\xe0\x03\xa2\x67\x76\x0b\xf7\x6d\x55\x52\x30\xe7\xda\x06\x03\x19\xe8\xca\xb6\x88\x79\x4c\x2b\x0e\x32\x12\x21\x0c\x59\x46\x42\x9e\xe2\x04\x29\x6d\x2b\x76\xa2\x24\xa2\xad\xa7\x7f\x0b\x3e\xa5\xdd\x25\x33\x08\x3e\x7a\x6a\x24\x7a\x0c\x94\xd4\x14\x44\x53\xb5\x65\x9f\x08\x01\x76\x62\xcf\x8d\x69\xd9\xb1\x0d\x3d\x51\x62\xc3\x37\x6d\x85\x0e\x15\x64\xc5\x12\x93\xa6\x51\x56\x8e\x86\x4c\xa2\x08\x74\x98\xb0\x08\x01\x2e\x14\x83\x18\xa7\xa6\xad\x4a\x91\x0d\x23\x1e\xa0\x18\x2a\x1a\x71\x71\x2a\x0b\x96\x2d\x79\x08\x18\xba\x9f\x55\x79\x4d\x03\x38\x0c\x3c\x5b\xb4\x5d\x86\xa8\xae\xc4\xa5\xdc\xb9\x83\xc3\xb0\x78\x5d\xd6\x5d\x45\x60\x78\x87\x40\x8b\xb1\x24\x64\xb3\xa1\x17\x43\x5b\xcb\xec\x03\x7f\xa6\xa5\x5a\xa9\x04\x35\x35\x8d\x62\x0f\xc0\x00\x02\x9d\x65\x3c\xde\x67\x68\x2c\x33\xa6\x4b\xab\x9c\x66\x26\x9c\xed\x01\x5a\xc2\x42\xe8\x98\x01\xc9\xea\x68\x20\x30\x55\x31\x1f\x68\x9c\x10\x32\xaa\xe1\x84\x2a\x6d\x7a\x58\x82\x58\xe1\xc3\x00\x30\x62\x20\xb2\x12\xe1\x44\x11\x4b\xac\xc5\xd0\x52\x62\xd2\x7e\x56\xcd\xdd\x66\x2a\x27\xba\x03\x6c\x3e\x01\x81\x9a\xba\x29\x22\x86\xcc\x81\x58\xe0\xd2\x04\x09\x24\x74\xe2\x84\x70\xb1\x2f\x90\x54\x0b\x64\xdd\x8f\xa3\x30\xab\x4f\xba\x40\x41\x54\x34\x26\xe2\xa1\xcd\x30\x01\x08\x68\x29\x51\x38\xc1\x05\x71\x1c\x03\x68\xf3\x12\x94\xb1\xc9\xc6\xa6\xcc\x46\x02\xcb\x10\x33\x65\x4d\x08\x33\x12\xde\x04\x10\x47\xa6\x05\xb1\xeb\x20\x1b\x05\x7c\xea\x47\x96\x90\x26\xac\x2e\x10\x43\x55\x48\xea\x8a\x36\x4d\x47\xbc\x0e\xa1\x17\x71\x80\x57\x62\x03\x08\x7f\xff\xbe\x43\x69\xea\x54\x06\x9a\x8f\x44\x54\xc1\x8f\x4c\x24\x88\xa9\xe2\x29\x4a\x6a\x99\x9c\xad\x21\xa4\x73\x4c\x62\x3b\x0c\x67\x62\xcd\xf7\xd8\x14\x29\xb1\x86\x43\x47\xa2\x05\x2f\xe5\xb3\x6a\x33\x17\x14\x1b\xca\x8a\xca\xfb\xb6\x6e\x00\x6c\x61\xc6\xc2\xb6\xef\x33\x11\xe0\x25\x55\x63\x18\x5f\x05\xbc\x42\x73\x29\xe6\x39\x47\x92\x44\x86\xc9\xcc\xd1\x68\xc9\x91\x53\x2c\xfa\x29\x4a\x55\x8d\xe8\x62\x4c\x7c\x37\xb1\xd9\x04\xa8\x6e\x02\x83\x44\xe0\x4c\x47\x64\x59\xa8\x4a\x96\xef\x2b\xa2\xc3\xa4\x99\xa9\x0a\xae\xca\xb2\xac\x4a\xa7\xba\xe3\xd2\x30\x30\xb1\x93\x1a\x31\x32\x35\x23\x8d\x00\x8f\x24\x3f\x0d\xb1\x8d\x88\x67\xc4\x61\x10\xd1\x22\x92\x52\xd3\xcc\x4a\x69\xf1\x39\x36\x72\x80\x4f\x27\x32\xe7\x02\x36\x11\x11\x8b\x15\x14\x5a\x8a\xcf\xfa\xb6\x15\x10\x2b\x01\x69\xe2\xd2\xd8\xa3\xcf\x6d\x93\xc0\x81\x38\xab\x57\xac\x21\x17\x05\x91\xeb\x5b\x04\x6b\xaa\x2c\xd2\x4e\x24\x29\xc8\xf7\x69\xd9\x0b\x59\x40\xcb\x9a\xcb\xb3\x11\xcf\x0b\x29\x22\x7a\xaa\x03\x1b\x23\x31\xcd\xaa\x29\x0f\xaa\x96\x2c\x30\x76\x44\x2b\x8a\xcd\x72\xa1\xe9\x61\x07\xea\x9c\xc6\x59\x0a\xf0\x1d\x41\xe6\x1d\x17\x8b\xaa\x14\x3b\x28\x08\x51\x0c\x18\x26\xf6\xd3\xac\x32\x9f\xc4\x97\x53\xe8\x71\xb4\x45\x80\x2f\x69\x82\x83\x3c\x29\xb0\x39\x8d\x95\xec\x88\x38\xc0\x04\x2c\x16\x09\x1f\xab\x11\x6d\x05\x4e\x82\x01\xb6\xa0\xf0\xb7\xe0\x53\x9a\xde\x9d\x41\xf0\xb1\x7d\xa0\x4a\x92\x91\x26\xa9\x08\x42\x8b\x83\x61\x14\xd2\x40\xe6\x84\x28\x21\xae\x1a\x00\x9d\x30\x16\xf0\x4d\x0d\xa9\xac\x23\x41\x5a\x96\x4d\x21\xab\x97\xc9\x04\x87\x61\x79\xe4\x7b\x92\x2d\xb8\x0c\x63\x29\x91\xa9\xd0\x7e\x4a\x54\x39\x35\x38\x2b\x60\x81\x26\x43\x96\xb1\x7d\x0f\xfb\x7c\xe8\xb2\x0c\xd6\xd3\xac\x34\x1f\x28\x45\x4e\x10\x13\x85\x8e\x30\xe1\x43\x12\x10\x09\x1a\x5a\x22\x63\x2c\x8b\x91\x4f\xc3\xd4\xd1\xe2\xc8\x65\x63\x09\x49\x3c\x2b\x09\x4a\x2a\x59\x59\x39\x9a\x16\xc7\x8e\x2a\xf0\x36\x9f\x78\x89\x22\xc9\x12\x62\x24\x53\x8d\x5d\x64\x84\x3c\x89\x0d\x47\xd3\x19\x85\x48\x0a\xf6\x22\xdd\x31\xcd\x80\x4b\x55\x29\xab\x80\x0c\x13\x36\xd1\x38\x51\xd3\x38\xec\x46\xbe\xc0\x88\x9c\xab\x47\x82\x2d\xc0\xd4\x74\x1c\x9f\xc0\x94\x09\x25\x09\xb0\x36\x67\xdb\x22\x34\x88\x1e\xd2\x19\x95\x1c\xa1\x1f\x2a\x40\x60\x8c\x58\x45\xb6\xee\x7a\x5c\xca\x47\xb1\xe8\xc9\x01\x67\x26\x80\x15\x13\xdf\x05\x86\x21\x19\xac\xe5\x29\x09\xe2\x7c\x2f\x52\x80\x91\x55\x37\x4a\xe2\x89\xac\xc6\x27\x06\x49\xd4\x14\x7b\x80\xd8\x50\xa5\x59\xda\xd6\xe2\x20\x06\x0c\xcb\xbb\x9c\x6d\x5a\xb4\x97\xda\xbc\x8e\xe5\xd0\xf7\x68\x51\xcf\x4a\x7d\x52\x64\xa0\x5a\x20\xd6\xe3\x80\x38\x12\x71\x81\x6a\x69\xb4\x6f\x79\x92\x46\xa7\x08\xd8\x96\xe0\x79\xb2\x9f\xea\x1c\x90\x44\x24\x9b\x3c\xe1\x45\x33\xf8\x5b\xf0\x29\xad\x82\x96\xc1\xb5\x4b\xf5\x68\x3f\x75\xfc\x94\x77\xf4\x44\x85\x9a\x81\xac\x73\xfb\xcb\xb6\x92\x38\xb1\x69\xc3\x76\x0c\x13\x61\xcf\x8d\x9d\x54\x49\x80\x00\x68\x51\x33\xb3\xfa\x3c\xeb\xb9\x4b\x31\x30\x2d\x04\x52\x9a\xd5\x71\x6a\x79\x89\xce\x22\x16\xbb\x01\x76\x2c\x2f\xf1\x75\x18\xb1\x2a\xcb\x05\x38\x65\x6d\x56\xb7\x6d\x9f\xd0\x59\xf5\x3b\x80\xc8\x73\xa2\x30\xa5\x1d\x49\xc5\x8a\xaa\x62\x5e\xb6\x22\x1a\xb0\x96\x63\x04\xb4\xa2\x89\xa1\x19\x27\xa6\xc4\x69\x3a\x36\x68\xce\x41\x28\x95\x50\x66\x4a\x0b\x4e\xb0\xaa\x12\x06\x18\x4e\xe0\x06\x9a\x47\x58\xce\xe2\x43\x9e\x65\xf9\x10\x09\x92\xe1\x01\xd7\xe5\x6c\x01\xaa\xba\x9d\xd2\xb1\x07\x6c\x5f\xc8\xec\x23\xcb\xb6\xc8\x39\x22\xc3\x62\x5a\x10\x38\xd3\x4a\x59\xc2\x84\x69\x6a\xb0\x9e\x88\x2c\x2b\x49\x19\x17\xa4\x12\xf1\x54\x03\x9b\x8a\x10\xf0\x9a\x64\x93\xac\x74\x30\x00\xa1\x10\xba\x1a\x6d\x4b\x5e\x0c\x0c\xc9\x33\x1d\xc7\x32\xbd\x50\x22\x26\x46\xbc\x83\x4c\x2e\x8a\x4c\x1a\xf2\x6c\x40\x47\xae\x92\x88\x49\x94\x55\xb3\x15\x8c\x0c\x62\x71\x26\x93\x5a\xb1\xe4\x02\x1b\x5a\xac\x2f\x84\x26\x9d\x10\xe2\xf2\x91\xc9\x30\xa6\x28\x38\x01\x9b\x24\x72\x18\x70\x1e\x17\xd2\xae\x47\xb2\x3a\x2e\x59\x9a\x0f\x35\x8f\x39\xb7\x37\xc3\x34\x32\x23\xc9\xe4\xec\x98\x58\x1a\xc1\x34\xd2\xa3\x44\xf6\xfc\xd0\xd1\x01\x8c\x39\x1c\xf9\x8c\xc1\xba\x49\x89\xbc\xf4\x7c\xf0\x29\xad\x26\x9f\xc5\xb5\x4b\x81\x98\x51\x95\xc4\xb0\x15\xc6\xd7\xa1\x65\xf8\x96\x2b\xf2\x7c\x60\xc4\x71\xa4\x48\xa9\xe2\x8a\x21\x51\x52\x51\x62\x14\x4f\xf0\x58\x9e\x85\x38\xab\x2a\x06\x23\xfb\x48\x12\x80\xe2\x11\x5e\x65\xdd\x90\x88\x3c\x23\x27\x96\xa5\x2b\x21\x40\x40\x84\x50\x12\xad\x94\x43\x91\x91\x20\x27\x62\x88\xee\xc9\xd9\x35\xed\x7a\x92\x4a\x73\x22\x02\xa2\x96\x46\x76\xc8\x04\x62\x20\x8b\x61\xc0\x2b\x3e\x03\x55\x68\xd0\x48\x30\x82\xd8\x14\x6c\x29\x84\x4c\xea\xd2\x66\x9c\x99\xb8\xaa\x45\x89\x0d\x45\xd5\x60\x5c\x5d\x36\x08\x91\xc3\xc8\x88\x52\x3b\xc4\x12\x9b\x7a\x9e\x2f\xd9\x8c\xe5\xea\x09\xcf\x73\x96\x01\x05\x8d\xd3\x90\x66\x66\xa4\x83\x41\x27\x34\x68\xcb\xf2\x4d\xe0\xb1\xb4\xa6\x27\x81\xa4\x49\x3c\x84\x9c\xa4\x5a\x36\xc3\x04\xae\x1d\x28\xc8\x73\x84\x48\x16\x59\xc8\x99\x1e\x07\x64\x90\x91\xa3\xc1\xc4\xa2\x31\x88\x22\x3f\x10\x4c\xe4\x19\x3e\x86\x2a\x43\x2b\xba\xa6\x84\x72\xca\x58\x8e\x28\x39\xb4\x6f\xe9\xb4\xc4\x32\x88\x8f\x12\x85\x8e\x2d\x33\x2b\x95\x12\xb3\x58\x37\xa5\x90\x4e\xa5\x20\xf1\x39\x4f\x77\x74\x3d\x04\x44\x43\x9a\x95\x6a\xac\x1c\x33\x2e\xe7\x46\x24\x96\x69\xde\xf2\xfd\x38\x4c\x22\x0c\xb2\x3a\x1a\x2c\x85\x25\x81\xc7\x22\x5e\x21\x52\x88\x23\xe2\xab\x8c\x18\x27\x9c\x43\x6c\x35\x50\x62\xda\x72\x1d\x19\x23\xe4\x70\x6e\xc8\x62\x87\x35\x79\xec\xf3\x7f\x6b\xb6\x2a\x8d\x8d\x58\xd0\x6c\x35\x60\xdc\xb2\xd5\x9b\x1a\x4c\xd9\x54\xf5\x95\x85\xcf\x72\x6b\x1b\xcf\xfe\xf4\xb2\xd9\xd5\xf6\x6e\x65\x8e\x08\xf5\xee\xaa\x56\xa9\xf3\x8f\x07\x4b\x98\x52\x93\xa7\x38\xb7\xfe\x7f\xb4\xfd\x7b\xf4\xb7\xdf\x39\x1e\x8a\x52\x6d\x96\xa0\xb5\xec\x16\x09\x95\x38\xa4\x49\x50\xcb\x36\xe7\x33\xe7\x23\x94\x06\x71\x48\x84\xb4\xda\x94\x2e\x8a\x79\x7e\xe6\xf1\x99\xe7\xf9\xcc\x49\xe3\xd8\x83\x53\x94\x3a\x36\x0d\xdd\x58\x9b\x51\xd9\x41\x04\x59\xc4\xa9\xc4\x5a\x44\x10\xc7\xb2\xac\x58\xcb\x52\x5b\x48\x84\xe5\x7c\x58\xd6\x1e\x3f\x63\xc4\x78\x87\x5f\xc7\x78\xff\xd9\xcf\xff\xf7\x78\xdf\xef\xf8\x7c\x3e\xcf\xf5\xdc\xf7\x75\x5f\xd7\x75\x7f\xf0\xa7\x3f\xfe\xdd\xbf\xf2\x8f\x3f\xf0\x75\x5f\xf0\xf5\x4f\x79\x97\xdf\x7d\xb7\x6f\x89\x3f\xf1\xd2\x17\xbc\xf7\x87\xff\xc8\x5f\xfd\xfc\x37\xfb\x1b\x0f\x96\xfe\x87\x2f\xfe\xab\xaf\x7b\x97\xcf\x7f\xc6\xaf\xfe\x5d\xf4\x13\xbf\xff\xdf\xbd\xf8\x35\xaf\xd7\x2f\xf9\x8e\xff\xed\xc5\x1f\xfe\x13\xf8\x5f\xbe\xd7\x77\xff\x87\x27\xbc\xef\x4b\x1f\x3c\xd8\xf9\x98\x27\x9c\x6f\xff\x05\xaf\xfe\x82\xf5\xbd\x6f\xfb\x8d\x6f\xf9\xef\xde\xf9\xb1\x3f\xf4\xa1\x1f\xf7\x87\x7f\xfc\x7f\xbf\xea\x3d\xde\xe1\xe9\x2f\x7c\xbf\xb7\x7e\xab\xbf\xff\x92\x5f\x78\xa0\xf4\x6b\xe4\x7f\x79\xff\xdf\xfb\xb6\xf6\xb3\xe6\xaf\x3f\xeb\x2b\xe7\xa7\xbe\xea\x45\xfe\xeb\x7e\xf1\x99\x11\x7c\xe2\x27\xa4\x2f\x7c\xd9\x4b\xfe\xfd\x77\x3d\xfb\x67\x1f\x28\x7d\xdb\x67\x3f\xe9\x2d\xde\xb3\x7f\xd0\xfb\xbd\xe0\x8b\xde\x0f\xfd\xf2\xe7\xfc\xef\x7f\xfb\x8f\x7e\xe3\x73\x3e\xe7\xfd\xfa\x6f\xfd\xb3\x6f\xf4\xff\xe9\x95\x1f\xf7\xed\x1f\xfb\xbf\x3f\x50\xfa\xb2\xef\xfc\xa5\x2f\xf9\xdc\x6f\x78\xde\x2f\xe0\x9f\x82\x5f\xf6\x49\xf2\x7f\xf8\x94\xa7\x7f\xff\xff\xf7\x2b\xbe\xe6\xff\x7c\xc6\xc7\xbf\xf9\x17\xbe\xe7\x1b\x3e\xf5\xdd\x9e\xfa\x43\x0f\x94\xfe\xbf\x9f\xf5\x5e\xec\x7f\x7c\xe9\xdf\x7c\xfd\x67\xd1\xe3\x73\xff\x97\x67\x7e\xff\x7f\x39\xff\xef\x5f\xfd\x08\xf4\x93\x5f\xf7\xd5\x9f\xf8\xf2\xa7\x7c\xf1\xd7\x7d\xfd\x7b\xfe\xce\x5f\x88\xad\x1e\xf6\xa9\xde\x21\xb7\xc5\xd0\x8b\x74\x5e\xe6\x0c\xa7\xe2\x8a\xca\x9e\xa8\x72\xa5\x01\xee\xfc\x0a\x20\x84\x05\x0c\x89\x95\x97\x99\x93\xa5\x2d\xb1\xdb\x82\xdc\x79\x70\xc2\x07\x1b\xe5\xd9\x8d\x33\xa5\x3a\x10\x71\x28\x25\x50\xb2\xc9\xb1\x25\x85\x76\x87\xf3\x9c\x5b\x12\x9c\x7b\xb9\x3b\x71\x1b\xf1\xa6\xda\xe6\xf5\xe6\xc5\x4e\xfd\x3a\x98\x4b\xe9\xe8\xd1\x9e\xdb\x18\x0c\x58\x62\xe0\x91\xed\x44\xeb\x30\xac\xad\x1e\x2e\x17\xb2\x30\x77\x61\x4c\xdf\x75\x73\x20\x33\xb3\x4f\xd8\x71\xa6\xba\x06\xb5\x3b\x96\xe9\x15\xa2\xc0\x72\x6c\x60\x34\x31\x3c\x80\x62\x90\x13\xec\x3d\x97\xbb\xf4\x0e\xcd\xf1\x29\xec\x16\xcb\xbe\x45\xc8\x4e\x7d\xea\x34\x8f\x0b\xcd\xb9\x85\xb6\x5a\x81\x67\xac\x12\x6e\xb0\xcc\x5d\x05\xe6\x16\x64\x77\xdd\xcf\x22\xd2\x5f\x8d\x1c\x3d\x44\x46\x4a\x6e\x28\x6d\xc5\x39\xb0\x6f\xca\x85\x25\xd9\x65\xa5\xdc\x42\xb6\x64\x06\x7a\x10\x53\xb7\x90\x96\xb9\xc9\x8a\x4f\x56\x50\x58\x17\x8b\xe9\xb9\x17\xc9\xcf\x46\x57\x9e\x53\x16\x24\xcd\x9e\x2f\x73\xe0\x13\xe8\x3d\x35\xb7\x21\xc9\x33\x62\xf5\x9a\xb7\x11\x6f\x13\xc2\xa0\x61\xda\x26\xf6\xe4\x94\x3a\xd4\x0b\x42\x14\xb8\x51\xfd\x3c\xf0\x40\x2e\x29\x8c\x90\x01\xca\x7a\xd0\x3b\x70\x74\xcd\xfc\xa8\xf6\xf3\x61\x38\x7d\x47\xb8\x4c\xd4\x2a\xfb\x64\xc3\xb2\x58\xd7\x12\x7a\xad\xa7\xdf\x20\x20\x86\x5d\x23\x9d\x65\x47\x52\x10\x10\x4b\x9f\x06\xb0\x71\x19\x5d\xef\xb2\x89\x46\x93\xfd\x4a\xd4\xef\x21\xbb\x4e\x19\xd9\x00\x68\x9c\x9a\x52\xba\xec\xe6\xc8\xd7\x39\x0e\xdb\x04\x90\x6b\xe5\x93\x87\xc8\x02\xbd\x4b\xf6\x55\x35\xaf\xdb\xf4\xb4\xf8\x62\x9b\x20\xa8\x15\x1b\x4f\x69\x76\xdf\x32\x0f\x5b\xea\x5b\x4a\x27\x03\xc8\x2a\x72\xa4\xad\x16\xe5\xd3\x5d\x2b\x47\x78\xcc\xeb\xf0\x9b\x85\xe2\x84\xdc\x56\x26\x62\x19\x75\xa9\xa4\x19\x26\x68\x57\x99\xe6\xc3\xe4\xd0\x83\x35\x75\x4f\x92\x6f\xf9\xae\x7b\x9d\xd4\x06\x77\xea\xa0\x2b\x95\x3b\x30\xfd\xf0\x73\x23\x14\x9c\x8a\x22\x05\xbd\x32\x64\x80\x12\xe0\xdc\x15\x85\x92\x41\x34\x3c\xd1\xe0\xae\xf6\xf3\x1c\x1a\xac\x7d\xdb\x29\xf0\x3c\x6b\xdc\x4e\x7c\x3a\x0c\xb3\xb4\x58\xf2\xe1\xc8\x5c\xaa\x7b\xd8\xea\xd2\x1b\xbb\x48\xc5\x16\xd6\xbb\x5c\x07\x13\xf7\xe5\x9d\x74\xde\xa7\x9a\x2d\xcf\xe4\xdc\x5d\xd3\x09\xe3\xc9\x81\xed\xa7\x02\xa3\xee\xdb\x16\xae\xbc\x10\x32\x45\x81\xed\x36\x27\x06\x5d\x73\xdb\xa5\x76\xc5\xed\x21\x8a\xd4\xab\x58\x28\xac\xe3\xaa\x8a\x80\x51\x75\xda\xb5\x14\x73\x6d\x75\x93\x23\x44\x6b\x9d\x5e\x8f\x56\x7a\x3e\xac\xf3\xbb\x23\x52\x5e\x96\x30\x07\x4b\x9d\x28\x11\x34\x60\x0e\x67\x50\xb5\x97\x62\xf8\xc0\x63\x2f\x80\x46\xda\xa6\xbf\x3c\x24\x41\x55\x25\xe3\xbc\x2d\x41\x80\xe1\x9d\x50\x30\xcc\x06\x8c\x00\x0e\x95\xb2\x71\xb9\x67\x1a\xc5\xa5\x4f\x09\x22\xde\x61\xc2\x1b\x32\xb6\x96\x96\xe0\x9c\xa7\xbd\xcb\xe5\x98\xe2\x3e\x5d\x80\x5e\x0e\x2e\x0e\x56\xa4\xd1\x1a\x6b\x82\x14\x30\x1b\xdb\x95\xd2\x7c\x0a\x51\xab\x3e\xa4\x71\x97\x9c\x5d\x8f\xbb\x3a\x1f\x52\xd0\xd6\xf4\x24\x80\x94\xe3\xe0\x6a\xa3\xc2\x6e\x60\x3b\xa4\x6c\xc0\x6f\xd7\xb5\x1b\xa7\x63\xd3\xb5\x43\xd4\x60\x2a\x89\x07\x72\x57\x82\x00\xc9\xa7\x4d\x80\x4e\x73\x65\x93\x6a\x6f\x3e\xeb\x8b\x9c\xb1\x91\x70\x65\xb3\xf9\x58\x6d\x2f\xe8\xe8\x32\xf2\x70\xf1\x99\xc6\x85\xc9\x5d\x24\x93\x1a\xc6\x76\x30\xcd\x79\x44\x21\x16\x53\x17\x27\xc3\x2a\xd5\xa4\x3f\x44\x2c\xb2\x29\xb8\x27\x43\x77\x7b\x0e\xe7\x0b\x0c\x88\xdd\x96\x34\xa1\x92\x48\xb6\x6c\x17\x4e\x7b\xe1\xa9\x25\xaa\x53\x60\x04\x64\x98\xa3\xe3\x73\xcd\x75\xee\xba\xbb\xb8\xab\xc9\x30\xe1\x72\x8d\x7a\x97\xcb\x91\x55\xbe\x1c\xef\x7b\xa2\xf1\x40\xaa\xf2\x0e\xa2\x15\x4a\x1b\x13\x3b\x42\x36\x93\x71\x25\x9c\x50\x70\x67\xe4\xc4\x31\x6a\x9b\x7e\x74\xa6\xe7\xc3\x66\xc9\x3b\xc6\x2e\x8e\xb0\x83\x59\x60\x15\xae\xb2\x4f\xa2\x70\xe6\xe6\x4a\x17\x03\x1c\x6b\xd1\x98\x55\x2b\xc1\x92\x9d\xd2\x03\x42\xba\xaf\xc5\x6e\x43\x6f\x45\x8e\x83\xa5\x74\x00\xa8\x4f\xa7\x0a\x3c\x0b\xa7\x76\x91\x31\xc0\x99\x4a\x49\x5c\xca\xad\x64\xa6\xca\x6e\xb2\x84\xa7\x3e\xdc\x4d\x57\xab\xa8\xa3\xc0\x88\xc4\xb8\xc1\xe3\x3c\x42\xef\xdc\x92\x52\x4c\x6e\x76\x4f\x7d\xed\x14\xcf\xd2\xcc\x16\x36\xbc\x00\x43\x47\xb7\x94\xa7\xbb\x1a\xfb\x7c\x84\xc5\x5a\x8d\xcd\xda\x6b\x34\x1c\x2d\x9a\x92\x43\x01\x81\x92\x5c\xb0\x6b\xab\x06\xcd\xdc\xe3\x7e\xf5\xdc\xd2\xb9\xac\xd3\x77\x85\xe7\xd6\x5a\x0e\xb6\xa5\xbc\x2f\xb9\x19\xef\x75\xd8\x70\xe7\x61\xcc\x04\x83\x69\xca\x64\x83\xb5\xad\x95\xcb\xb1\x50\xe0\x38\x6d\xe3\xae\xbe\x94\xec\x48\x26\x65\xf5\xbe\xa8\x26\x24\x9d\x4a\xcb\xb8\x58\x38\xb5\x34\x46\x5c\x68\x9c\x17\x39\x0d\x58\x43\x6c\x96\x40\x66\x88\xb6\x77\x1d\xd3\x21\x12\x9f\x04\x09\x3f\x55\x69\x1d\x87\x7d\x54\x9a\xe9\x46\xb8\xb7\x29\x81\x28\x19\xdf\xb4\x89\x07\xec\x55\xe4\x74\xcd\xa2\x1a\xb9\xcb\xe3\x42\xbd\x44\x35\x30\x39\xb5\x66\xdb\xb1\xf8\xb1\xd1\x00\xa2\x9f\xd8\x8f\x78\xed\x3b\xa3\x9d\xb6\x32\x8b\x45\x5e\x5d\x49\x52\x86\x2d\x7d\xb4\xc5\xfa\x61\xec\xd4\x1d\x1e\x97\x06\x17\xe5\xdc\xc4\xc4\x7a\xc0\x70\x68\xe2\x30\x59\x6d\x10\xb7\x23\xc8\xb6\x11\xb8\x3c\x9d\x7e\xa4\xbb\x9c\xcd\xef\x69\xb7\xf3\x2e\x5e\x19\xf2\xbc\x83\xee\x20\x5e\xdc\xb1\x90\xcf\x14\x81\x95\x14\x76\xa3\x9c\x42\x10\x74\x4a\x09\xc8\x57\x2a\x07\xe5\xc8\x86\x25\x2d\xbc\x6b\xff\x20\x89\x40\xf9\x0c\xd1\x69\xb6\x8e\xa9\x36\x2b\x05\x3a\x66\x92\x72\xcc\x05\xaf\x95\xc1\x2e\xa6\x47\x74\x18\x61\x96\xd3\xf4\xec\xb7\x0d\x80\xbb\x04\x9d\x6f\xf2\x28\xcc\x48\x78\xec\x67\x96\xa3\x57\xd8\x55\x99\x06\x8d\x6c\x07\xf5\x51\x47\x66\xc4\x9e\x66\x60\x49\x3a\x72\xd7\x01\x65\x7a\xec\x41\x25\x41\x00\x22\x8f\xfc\x92\x03\x0e\x46\xd6\x3e\x8d\x73\x46\xc0\x64\xcf\xa5\x69\xcb\x12\x51\xaa\x62\xeb\xcd\xd3\x14\xd7\x5d\x3c\xd8\x52\x8f\xfc\x07\x7b\x38\x79\x6d\x90\xf6\x9d\xd3\x08\x8e\x0a\x41\x27\x6c\x2c\x7c\x95\xeb\x88\x02\x1b\x8e\xd8\x3a\x2e\x53\x70\x02\xf9\xb6\xe8\x1f\x86\x5a\x9d\xc3\xc3\xb9\x91\xba\xe3\x5a\xcd\x1e\x67\x25\x0b\x73\xb5\x92\xc2\x7a\xd2\x63\x2c\xac\x36\x13\x93\xc1\xfd\x0a\xb7\x0d\x80\xe4\xa2\xfb\x36\x7c\x62\x36\x47\x14\xe9\xba\x76\xa3\x33\x4c\x09\x74\xa9\x2d\xd9\x0b\x60\x06\xeb\x6b\x02\x75\x0a\xbe\xc1\x40\x27\x58\x8f\xee\x7c\x1e\xc6\x77\xdf\x00\x3e\x44\x9c\xdb\xf4\x53\xbb\x95\xe2\x96\xac\xf7\xae\x32\xd9\x7d\x35\xdd\xec\xd7\x41\x36\xc8\x90\xb3\x28\x73\xcc\xcf\x6d\xd1\x6d\xba\xdb\x8e\xa4\x64\x31\x59\xe2\x5b\xda\x42\x02\x6b\x97\xcd\x14\x0a\x2e\x90\x6a\xb2\x83\x78\xa6\x78\x5d\x94\x6f\x65\x33\xa9\xeb\x58\x0e\x1d\xeb\xbc\xad\x07\x43\x63\x68\xd6\x54\xed\x6e\x4b\x3e\x35\x5b\xf6\x2d\x6b\xde\x83\x09\x18\x67\xd3\x3b\x83\x7c\x73\xfd\x0c\x4b\xb3\x46\x2b\x0f\xee\x26\x12\x9e\x2c\x19\x01\xbd\x48\x3b\x64\x8d\xa8\x16\xa4\x6c\x38\xfd\xb5\x80\x3e\x47\xc9\x48\xa3\x4b\xeb\x79\xd1\x76\xea\xb9\x9b\x92\xa4\x9d\xf6\xae\x6e\x50\x8f\xee\xed\xec\xa0\x0f\xee\xd5\xc2\xfb\xb4\xed\x74\x70\x1d\xd2\x5c\x20\xcd\x0d\xa2\x7d\x22\x7d\x04\x0d\xfc\xc0\x13\xea\x92\xc9\x5d\x32\xf3\x43\x6a\x5d\x76\x41\x28\xbe\x76\xc4\xaf\x2e\x48\x2f\xc2\xd9\x12\xec\x38\x93\x72\x15\x26\xef\xf6\xb5\x4d\xc9\x0f\x7c\x6e\x8b\xd7\xdb\x3a\x1f\x7f\xec\x0d\x93\x38\xe0\x58\xab\xe5\x64\xf7\x2b\x48\x43\x8f\x7e\x1a\x64\x80\x16\x63\x5c\x79\xf3\x74\x67\x3e\xf0\x9a\xae\x6b\xd3\xb7\x69\x40\x28\x49\x00\xd6\x7e\x58\x27\x49\xa2\x33\xea\x81\xaf\x62\xce\xcd\x9c\x61\xc3\x61\xcd\x1e\x27\xea\x3b\x41\x35\x55\x10\x2e\xa3\x4e\x4a\x1e\x05\x3e\x0f\xdb\xa0\xdd\x00\x3e\xd6\xaf\xd9\xea\x69\x02\x3a\x84\x45\x5c\xe0\x39\x77\x88\x9c\xf0\x9b\xa0\x47\xde\x2a\x26\xec\x0a\x51\x0a\xb2\xc6\xe0\xa5\x07\x08\xef\x8a\x67\x9d\x23\xd0\xcb\xe2\x5c\xc4\x9e\xe9\x21\x87\xaa\x04\x09\x82\x4b\x56\x88\x01\x54\xf6\xbd\xb2\xeb\x3a\xb8\x5c\xe2\x18\x20\x59\xc0\x6f\x23\x12\xfb\x80\x26\x9c\xbd\x3a\x8f\xb3\x94\x6e\x48\xed\x94\xe2\xa1\x1b\x1d\x31\x0f\xd5\xf8\x83\x9c\xbb\xd8\x8f\x73\x77\x06\xce\x81\x43\xbe\x8b\x84\x07\xc5\xb0\x73\xb4\x23\x09\x1b\xc2\x59\x44\x55\x39\x00\xd4\x82\x38\xb3\x73\xfb\x35\xa4\xeb\x98\xaf\xdd\x9c\x04\xba\x73\x47\x95\x92\xbb\xa4\x70\xd6\x74\xb5\x39\x7f\xa2\x4b\x42\x4c\xb0\xe5\xb6\x58\x5f\x2e\x00\x2e\x6c\xb5\x42\x86\xae\x8b\x6e\xcd\x25\x0e\xb8\x8a\xcd\xa0\x07\x6f\x45\xfd\xff\x79\xd8\xd9\x15\x57\xda\x96\x08\x1b\x38\xc8\x61\x41\x25\x5d\x2d\xe0\x0f\xb9\xd5\xbe\xe7\x74\x79\x3c\x64\x0c\xa0\x16\x30\x95\xc2\xe4\xb8\x2d\x78\x1a\x2a\x6c\xf9\x0c\xd5\xa8\x8e\x36\x17\x71\x1a\x43\x0a\xc8\x54\x10\x91\x6f\x66\xd4\xa2\x4a\xe3\x7c\xbf\x82\x0b\x40\x9f\xb3\xd5\xdb\x46\x51\xce\x45\x96\x86\x33\xa5\xf7\x1a\xd3\xc4\xe1\x9a\x43\x5f\xdd\x93\x34\x4a\x2f\x40\xf8\x43\x29\xa3\x13\x42\x27\x33\xce\xef\x1e\x3e\x70\x47\xfe\x8d\xe0\xf3\xb0\x9d\xfc\x0d\x62\xab\x58\xb3\xba\x54\xf1\xcc\x2e\x09\x8d\xa0\x24\xdb\x14\x93\xe5\x27\x96\x4e\x26\x25\x9d\x6f\xaa\x50\xb5\x29\xd0\xd7\x66\xc0\xb6\xd5\x9b\xe2\xe0\x49\x5b\xde\x98\x79\x30\x74\x0d\x62\x88\x9b\x85\x68\x85\x92\xa9\x42\xe7\xa5\x2f\x17\x09\xef\xa5\x1e\x29\x00\x84\x44\x08\x11\xe5\x72\xd7\x5f\x52\x03\x56\x61\xaa\x5d\x90\x34\x59\xd8\xb9\xf7\x1e\x61\xb3\x6c\x74\x5a\x78\xbd\x3c\x85\x3e\xdb\xed\x00\xdd\x96\x1a\x4a\x21\x79\xdd\xd5\x83\x29\x26\x0f\xda\xf1\x82\xb4\xaf\xad\x55\x88\x99\x3a\xbb\xa8\x57\x51\x97\x20\xc7\x54\xd5\x14\xb2\x45\x5c\x88\x0a\x64\xa9\x43\xd2\x74\x17\xe7\x93\x25\x04\x27\x8b\x59\x55\xe5\x86\xa7\x4a\x96\x6b\xb7\xb1\x5f\x28\xef\x24\x9f\xdb\xbe\x33\x6b\x38\xea\x11\x80\x72\x9e\x17\x9d\x6b\xde\xb4\x6a\xa7\x8c\xdb\x21\x36\x1b\xe7\x20\x6c\x9d\x7c\x54\x61\x0e\x3c\x49\xdf\x03\x10\x32\xf7\x83\x02\xa7\xd7\xde\xf7\xe3\x44\x76\x4b\x49\x0f\x70\xd7\x61\x2d\xaa\xb5\x1f\xe5\x04\x1d\x5f\xa7\x0c\x1a\x50\x8d\x36\xc6\xcd\x45\xa7\xc4\x45\x9d\xb6\x2e\xaa\xcf\xa1\x0b\x29\xd0\x1c\x46\x56\x7f\x57\xe8\x21\x71\xa0\xda\x38\xa4\xb0\x13\x55\xc2\x4a\xb1\xc2\x47\xb9\xe5\x9e\x79\xeb\x3d\xd5\xc8\xc9\x36\x55\x9e\x66\xa3\x9a\x59\x46\x7b\x7a\xe0\x29\x7e\xa3\xd8\xea\x37\x3f\xe5\xd5\x5f\xf7\x5e\xbf\xfb\xb6\xaf\x7b\xe2\x6b\xde\xfa\x0b\xdf\xe6\x83\x7f\xe1\x19\xff\xf0\xd9\x5f\xa9\x9f\xf7\xaf\x7e\xe0\xfa\xfa\x4f\x7e\xda\x37\xbd\xf9\x97\xbd\xef\x77\xfc\x25\xb1\xd5\x0f\xbd\xfa\x47\x5e\xf4\x29\x1f\xf0\xdf\x3f\xe3\x75\xef\xfd\xca\xe7\xff\xeb\x9f\x1c\xcf\x7f\xdd\x8f\x3c\x85\xbe\xff\x27\xfe\xd3\x3f\xf8\xf9\xaf\xfa\x8c\x7f\xf9\xe6\xef\xf6\x96\xf0\x81\xd2\xb7\x7a\xf2\xfb\xb3\x67\x3e\xeb\xd7\xfe\xf4\xef\x31\xf6\x96\xef\xf2\x8e\xdf\xf0\x2d\xdf\xfc\xa5\x6f\xff\x92\x57\x7d\xc0\x5b\xc2\x57\x7d\xed\x4b\x7f\xe8\x89\xef\xfc\xf4\x07\xc5\x56\x5f\xfb\xbc\x57\x3c\xe1\xf5\x5f\xf9\x4e\x4f\xf9\xca\x0f\x7a\xec\x37\xfc\xca\x5f\x7b\xc9\xf3\xc1\x8f\xbf\xf2\x8f\x9e\xfb\xdf\xa0\xc7\xf6\x4f\x79\xdf\x77\x5e\x5f\xf0\x0f\xbe\xfa\x81\xd2\x0f\xff\x81\x3f\xc3\xaf\xfc\xa5\xeb\xdf\xff\xf8\x77\xbd\xf0\x5b\x7f\xf1\x79\x1f\xf1\xd7\x7e\xf5\x8b\xbe\xfd\xd3\x3e\xe7\x57\xbe\xe4\x37\x9f\xf5\xa1\xef\x1d\x3f\xe2\x0d\xbf\xfb\xfa\x07\x4a\x3f\xec\x0d\x1f\xf7\x33\x2f\xf9\xd1\x2f\x7d\xf9\x5b\xbe\x78\x7b\xec\x2f\x7d\xea\x8f\x73\xf7\xdd\x4f\x7f\xfe\xaf\x7c\xcc\x8b\xbe\xcc\x7f\xd3\x27\xfe\xde\x13\xdf\xf0\xe1\xff\xe8\x81\xd2\x97\x7c\xed\x1f\x3d\xf1\xf9\xd7\xef\xbe\xe1\x43\x9f\xfc\xcc\x0f\xfa\xfd\x3f\x7b\x87\xc7\xff\xe9\x5b\x7d\xd4\xe7\xbf\xe3\x3f\xff\xe6\xa7\xbd\xc5\x17\xff\xf0\xe7\xbe\xf8\xbd\x3e\xe8\x3b\x1e\x28\x7d\xcd\x73\xff\xe1\xdf\xf9\xad\xa7\x3c\xf9\x65\xe2\x8b\x5e\xf1\x91\x9f\xf1\xcf\xde\xf7\xaf\x3c\xa9\xfd\x8b\x1f\xfd\x51\xf7\x2b\x1f\xf6\xd7\xbf\xe7\x13\x7f\xe7\x31\x7f\xe5\x6f\xfd\x93\x07\x4a\xdf\xe4\x31\x3f\xfd\xb8\xaf\xfb\x84\x5f\x7c\xe2\x9b\x3e\xe3\x1b\xde\xfb\x1f\xcf\xa7\x7e\xd6\x37\x7f\x99\x7d\xb3\x57\xbc\xfa\xfd\xd7\xdb\xbc\xe1\x47\xde\xe7\xd3\x7e\xe8\xe3\xf5\x5f\x88\xad\x1e\xf6\xa9\xde\xd0\x7e\xba\x36\xb6\x92\x78\xaa\x49\x04\xa8\xd5\x6e\x77\xa9\xf7\xb0\x9f\xe4\x54\xe5\x32\x07\xf3\x03\x94\x41\xe2\xf0\xcd\x4a\x91\x8b\xda\xee\x3a\xa1\x4f\xab\x8c\x89\x43\x2c\xb1\xde\xaf\x30\x7d\x28\x2c\x50\x0f\x21\xaf\x67\x89\xa7\x6f\x6c\x4b\x9d\x4b\x57\x71\xbc\xb2\x2f\xb9\xc4\xdd\xdd\x85\x31\x80\x83\xc3\x72\x3a\x71\xc5\x60\xee\x60\xcb\x18\xa8\x72\xb9\x2d\x6f\xcd\x51\xde\x04\x33\x31\x78\x49\xe3\x84\x82\x39\x1e\x9c\xa6\x37\x4d\x9c\x64\x1c\xa6\xd2\xab\x0d\x6f\x4e\xe7\xcf\x84\x29\x68\xf8\xd4\xda\x20\xc7\x25\x41\xbe\xb4\x8d\xf7\x16\x00\xb0\x46\xa8\x93\x07\x4b\xcd\x5d\x18\xa3\x34\x8d\x7b\xc9\xf8\xba\x06\xac\xc2\x57\xa6\x17\x52\xf0\xf2\xce\xc2\x2b\x3c\x02\x71\xa5\x82\x4b\x96\x61\xa4\xc2\x91\x44\xc0\x6e\x13\x16\x11\x1c\x61\x97\xad\x77\xed\x32\x96\xd4\x36\xb9\x41\xb7\xd1\x33\xa0\x3d\x70\xbc\x49\xc1\x61\xb2\xf2\xba\x64\x5a\xbb\x75\xfa\x52\xec\xae\xa6\x4f\x15\x92\x05\xc0\x7b\x41\xa4\x16\x10\x4f\x3a\x57\x98\x7a\x1e\x4e\x9f\xd2\x1d\xfa\x38\x91\xe6\x85\xb5\x74\xd1\xc8\x4d\x1e\x6c\x80\xbb\xd4\x28\x0a\x8b\xb0\xaa\x8d\x8b\xef\xfb\xb0\x7d\x85\x0b\x69\x7f\xa1\x8b\x3b\x5a\xb7\x51\x76\x1d\xf6\x69\x73\x6f\x09\xb0\x4b\x27\xc6\xe6\x52\x8f\x6a\x3f\x1f\x86\xd3\x37\x80\x4f\x5c\x87\x49\x8b\x1e\xd9\x6d\xc5\x9a\x4b\xd5\x12\x38\xb1\xdb\x09\x18\xf2\x47\x73\xda\x94\x2e\x69\xa3\xf4\xda\x54\x9a\xed\x54\xea\xb6\x58\x3d\x17\x96\x25\x87\x38\x86\x1f\x7b\x4e\x67\xa0\x5b\x2a\x6b\x67\x7b\x2b\x89\x08\x1c\x03\xef\x93\x31\x3a\x84\x3c\x5c\xc4\x17\x58\x93\xdc\x45\x32\x75\xa1\x75\x99\xa1\x89\x64\xeb\x18\x92\x1e\xd7\x71\x12\x77\x4c\x9a\x21\xd6\x81\x2d\x29\xf3\xd6\x61\x4f\x1a\x0a\x88\xb9\xd9\xc3\x6d\x6c\xee\xbe\xed\x26\xf9\x7a\xb5\x80\x2e\x3d\x77\x83\x6c\x96\x62\x31\xd9\xc9\x4e\xd3\xb6\x0b\x33\x9d\xbc\x06\x76\x6a\x2c\x30\x81\x10\xe1\xb6\x2b\xd6\xc9\x7b\x19\xf6\x3d\x1c\x25\x56\xcd\xb4\x89\x5c\x12\xe9\xeb\x14\xcd\xfb\x32\xce\x2a\x1c\x0d\xd6\x79\xaa\x67\x3c\x53\x90\x92\xde\xa6\x46\xd9\xfb\x39\xd6\x49\x24\xda\x3a\x01\xdb\x01\x0f\x46\xf6\xb6\x85\xe5\x92\x8e\xd6\x15\x45\x97\x80\xab\x4a\x4f\x40\x54\x8e\x84\xe3\xbc\x6d\x0a\xc7\x15\x18\x1d\x7c\xc5\x80\xda\xb6\xd2\xe4\x66\x5a\x9a\xf6\x26\x20\x35\xb2\x89\x9a\x5a\x3b\xba\x54\xf4\x88\x97\x48\xbb\xab\x57\xbd\x8b\x99\xc8\xaa\x67\x62\x9c\x3c\xfa\x59\xb6\x03\xd3\xbe\xd1\xc4\xe0\x76\x49\x52\x78\x70\xca\xc6\x9a\x2a\x6e\xfa\x3c\x8c\x05\x23\x40\xe7\xff\x2b\x37\x4c\x1f\xd6\xf9\xdd\x00\x3e\x03\x09\x3c\x4f\xe1\x05\x63\x72\x2a\xb9\x04\xb2\xbb\xf6\xac\x82\x40\xf7\x50\x92\x53\xf6\xe8\x4d\x23\x2c\xd8\x7e\x46\xa4\xbd\x80\x77\xad\xd7\x18\xf3\xc8\xcd\xee\x60\x54\xa7\x40\x4a\xa5\x04\xab\x99\xf8\x02\xb9\x5f\xaa\x70\xc8\x04\xd9\xc4\xce\xc8\x18\x5a\x9c\x3b\xdc\xba\xb9\xeb\xab\x3c\xb4\x33\xdb\x10\x5a\x19\xb8\x35\x30\xe6\xd9\xda\x6e\xaa\xda\x4f\x09\xbc\x34\xac\x77\xc7\x46\xb3\x61\x06\xd6\x95\x88\x68\xcd\x74\x97\xc5\xba\x83\x85\xf5\x45\x8f\x11\xed\x49\x53\x8c\xb5\x38\x8c\xb3\xd4\xdd\xfa\x7a\x05\x3e\x06\x1a\x99\x54\x46\xf0\x40\x8e\x45\x03\x83\xb9\x2d\x56\xef\x4a\xd9\x09\xba\xa9\x7c\x99\x59\x1c\x69\x6d\xd0\xe4\x1c\xd2\x74\x86\x4a\xd5\x41\x72\xf3\x42\x43\x76\xac\xb4\x53\x6e\xc0\x05\xef\x92\x99\x5f\xa5\x1e\xa6\x47\x1f\xc7\x49\x8e\xd1\x0d\x64\x45\x0a\xa3\x52\x9d\x9e\xee\x41\xf3\xbe\xf9\x86\x28\x22\x49\x61\xd9\x37\x9e\x79\xba\xab\xf3\x81\xe5\x9c\xab\x1f\x39\x24\xa6\xc0\x81\xcb\x69\x64\x14\x87\xaf\xde\x9f\xd7\xd6\x21\x10\x7a\x70\x30\xcc\xda\xd3\xc0\xba\xa1\x1a\xe6\x5d\xcb\x4f\x66\x62\xed\xb1\x63\x46\x4b\x9d\x70\xb3\x7b\x13\x99\xe1\x88\xac\xf2\x4e\x1e\xb8\x7a\x22\x66\x9f\xde\x99\x1e\x9b\xd8\xc9\xb9\x1e\x88\x43\x7a\x23\xf8\x3c\x6c\x96\xbc\x81\x78\xeb\x7c\x41\xb7\x8b\xc5\x2f\xd3\xdb\x39\x7c\xe7\x8d\x5c\x09\x7b\x4b\x9d\x97\x91\xed\x52\x39\x3e\xf6\xed\x6a\x33\xa5\x79\x8a\x3d\x93\xbb\x0c\xab\xba\x58\x82\x74\x3f\xb5\x18\xbc\x6d\x82\x11\xbb\x55\x13\x04\x51\x95\xf4\xee\xaf\x65\x67\xeb\xc4\xb2\x74\x0d\x61\xd5\xb1\x79\x7d\x57\x78\x2e\xb1\x05\x39\x88\xda\xcc\xd1\x39\x8a\xaf\xd5\x0c\xb6\x0a\x25\x04\xe0\xc5\x60\x43\x1c\x1d\x32\x9e\x56\xc8\x02\x32\xe2\x7a\x58\x5a\xee\x7a\xd0\xc4\x8a\x23\x88\x79\x84\x71\x29\xa7\xa5\x17\x97\xf5\xe0\x52\xb0\x5f\xe2\x38\xe0\x7e\x81\x7c\xd4\x1a\xc9\xb9\x0f\x75\x1c\xb9\x59\x70\xdb\x42\x38\x56\x1e\x67\x43\xae\x7b\x6a\x7a\x08\x38\x50\x1c\xed\x62\x20\x6e\x4c\x9d\xc6\x28\x3e\x62\x19\xde\x6b\xc1\x25\x5e\x87\xc3\x80\xde\xb5\x09\xd9\x0b\x67\x42\xcd\x88\x34\xde\xdc\xee\xc2\x45\xe4\x11\xa4\xe8\xcd\xa6\x29\xdd\x4a\x1b\x42\x65\xb3\x31\x07\xe6\xb1\x25\xe6\xea\xee\xae\xc0\xff\x00\x8f\xb8\xf2\x75\x8e\x4e\x0a\xa5\x1c\x5e\xea\x2c\x19\xf3\xac\x75\x20\xbd\xd3\x4a\xa4\xa4\x9b\x10\xa2\xf0\x5d\x90\xde\x4a\xbf\xcb\x95\x45\x77\x9b\xb1\x1e\xec\xb4\xf8\xc0\x3e\x6e\x17\x70\x3c\xf9\x73\xd0\x30\x8d\x90\x43\x39\x62\x7d\x5b\x9b\x1b\x00\x05\x4f\x22\xbb\xb6\xf5\xe8\x7c\x87\x87\xb1\x53\x77\x80\x0f\x69\xbc\x98\xd5\x31\x05\x8e\x94\x72\xa5\x24\xf6\xc6\x1b\xac\xbb\xdc\xd3\xa4\x28\xa3\x36\x7a\x81\xe7\x2e\xf8\x71\xee\x32\xa6\xdb\xc2\x73\xc7\x3e\x28\x58\xb9\x91\x50\x13\x3d\x0f\xfa\xc8\xd7\xc9\x37\x2f\x14\xcd\xdc\xf1\xd1\xb7\xb2\xe4\x4a\x8e\x8d\x8b\x7a\xa1\x99\x15\xb7\x0d\x80\x04\xf0\xa3\x96\x71\x72\xb2\xca\x16\x71\x81\x15\x52\x90\x0d\x1f\x87\x69\xeb\x50\x97\x8e\x8d\xa7\x72\x8e\xb1\xe7\x1e\xe0\xb4\xd5\xde\xb5\xc7\x0e\x72\x66\xb2\x17\x5a\x10\x41\x6c\x2f\xc5\x4d\x5d\x6b\xea\x17\x4d\xc3\x26\x17\x7c\x16\x87\xee\xfb\x89\xaf\xd3\x54\x9b\x93\xbc\xee\xba\x1c\x4a\x6b\xda\x19\x0b\x59\x47\xdf\x38\x3f\x24\x46\x50\x1b\x69\x59\x5e\xc5\x4a\x87\x0e\xb9\xad\xf3\xb0\x35\xe9\x41\x17\x3e\x4d\x72\x83\xdc\x95\xf6\x75\x04\xb3\x54\x3d\xd6\xde\x2f\x04\x37\xcf\x61\xb5\x2d\x0d\x75\xc4\x70\x6c\x1d\xed\xad\x6e\xe4\xd8\x99\x56\xfe\xd8\xb7\x35\x14\x53\xec\x2e\x03\x7c\xd1\xa2\xee\xf8\x22\x81\xe2\x63\xf7\x6d\x9f\x87\x09\x6c\x45\x9d\x47\x89\xbd\x50\x08\xbb\x67\xd1\xea\x32\xbd\x81\xac\x6f\x1e\xe8\xbb\x74\x31\x7e\xbb\x4e\x81\xfc\x98\x05\xbb\x9e\xed\xa1\x4f\x48\x6a\xe7\xc0\x65\x08\xda\xb1\xab\xb4\x06\xec\x38\xd0\xd2\xf9\xb5\x89\xd2\x70\xc6\x8f\x02\x9f\x87\xf1\xdd\x37\x8c\x5d\xe9\xe8\xb3\x68\x4b\x24\x19\xdc\xed\xeb\xaa\xbb\xc1\x23\x3b\xa4\x4f\xd2\x30\xb1\x67\x0a\xb9\xd9\xa4\x86\xac\xa4\xa5\x62\x4f\xcd\x6e\x5b\xe0\x64\x12\x30\x9e\x3b\x77\xd8\x0e\x44\x16\x02\x5d\xe2\x9a\xb8\x6e\xa1\x1d\x56\x91\xc8\x2c\x2e\x42\xb1\xb0\x6d\x55\xda\x3c\xc9\x6d\xd9\x49\x1b\x00\x9b\xdb\x36\x23\x58\x5b\xf2\x4c\x71\xe5\xad\xb2\xdd\x6e\xea\x02\xba\x5a\x18\x03\xe1\x1b\x56\x70\x86\x4e\xcd\x48\x5d\x77\x77\x97\x9f\x03\xcc\x78\x4c\x0c\xaa\x49\x61\xdb\x13\xdc\xd1\x16\x96\xca\xf4\x40\x6c\x4c\x4e\x8a\x61\xdb\xc0\x4b\x93\xac\x5c\xa7\xd1\x1c\x7a\xf0\xbb\x1e\xf9\x29\x2b\xd4\x6b\x77\x3a\xe3\x51\xc9\xb6\x1d\x6d\xf0\xc9\xcf\xed\xb8\x86\xd7\xeb\xaa\x66\xa3\x46\x2b\x0c\x09\xe5\x73\x8b\xce\x13\x7a\x9b\xf2\x62\x05\x0c\x8f\xce\x15\xe5\xb3\x40\x60\xe5\x06\xc5\x68\x96\x68\x27\x29\xb1\xdb\xc9\x24\x2f\x1a\x2f\x55\x21\xf0\xc1\xfa\x23\xa6\xbb\xb2\xd8\x06\x12\x5b\xa9\xa5\x1e\x2c\x9e\x04\xc4\x6d\x8b\x65\x45\xd4\x67\x80\xf8\x30\xba\xe6\x64\x98\xe0\xba\x15\xb9\xe1\x2b\x37\x79\x8d\x7c\xd7\xa1\x0b\xc9\x89\xa4\x88\x06\xb9\x09\x59\x61\x9f\xc2\xc7\x6b\xaa\xe8\x6a\x0b\x7c\x91\xa9\x76\xae\x95\xbd\x90\x9c\x64\x2e\x4a\x66\x3b\xf2\xa3\xd3\xcc\x1f\xb6\x41\xbb\xa1\xf3\x39\x82\xdd\x0e\x8e\x76\x9f\xa3\x76\x39\x08\xec\x47\xb7\x6e\x09\x92\x2e\x80\x2e\x25\xe2\xf0\x2a\x1e\x4d\xf2\xe0\x4f\xd8\xc2\x29\xc9\x5d\x94\x66\x98\x6c\x2c\xcc\x63\xc2\xb2\x2a\x02\x32\x5b\x2c\x15\x89\xf4\xd5\x7d\x62\x2c\xd9\x2a\x51\x19\x86\x8a\xab\x44\x6b\x54\xc7\x9c\xdc\x45\x24\xaa\xda\x65\x90\x87\x3f\xcf\x95\xc5\xc5\x01\x93\xf6\x54\x4a\xc1\x01\x3d\x87\xdb\x79\xa6\x91\xe1\xd9\x27\x0e\x3e\x9e\xa2\xa5\x70\xde\x75\x2b\x8a\xe2\xd8\x7c\x8e\xdb\x92\xa4\xc9\x24\x15\xaf\x9a\xb7\xed\x2a\x0d\xa2\x99\x5c\xaf\x75\x1c\x26\x46\xbd\xfb\x93\xef\x9d\xa4\xe4\xe6\x6d\xbe\x9f\x12\xf1\x61\x96\x19\x79\xb7\x88\xa4\x80\x58\xf7\x03\xfa\x0d\x0a\x1d\x88\x98\x44\xd8\x14\xb5\x29\x12\xf4\xa1\xb8\xa1\x57\x28\x77\x05\xee\x90\x2d\x81\x25\x89\x4f\xf4\xe2\x12\xca\x7d\xb7\x53\x71\x35\x15\x81\x97\xbd\x3a\xeb\xba\xa7\x6c\x53\x8a\x62\xaf\xd4\xe5\xec\xda\x6d\xa6\x43\xea\x76\x91\x3d\xbf\x24\x16\x65\x77\xea\x88\xae\x1d\xa5\x54\x41\x76\x86\x50\xdd\x7c\xf4\x7d\xe7\x7e\x6d\x3b\xd2\x3e\xb4\x03\xef\x43\xdf\xb5\x15\xdd\xd3\x32\x14\xd4\x48\x7c\xd3\xfe\x34\x56\x7a\x89\x1b\x3a\xa3\xe7\x89\x92\xbc\x5d\x52\xa8\xed\x5c\x29\x6e\xe7\x91\x8b\x5a\xdc\x3e\x40\x7d\xbf\x11\x7c\x1e\xb6\x93\xbf\xa1\xf3\xb9\x36\xce\x38\x63\x13\x9e\x50\x9f\x4a\x0c\xbe\xc5\xa1\x35\x41\x27\x56\x13\x51\x7f\x1a\x77\x76\xd6\xf7\xbe\xa7\x06\x10\x40\x55\xea\xbb\xe4\xc3\x20\x39\xb8\x2d\x02\xf6\x2c\x8f\xdd\xce\xc3\x22\x08\xaf\x2b\xa1\xad\xd1\x33\xb9\x15\x9d\x69\x97\x2e\x67\xc7\x91\x5b\xe8\x56\x58\xf3\xae\x30\xbb\x25\x76\xca\x81\x46\xd2\xa7\x24\x72\x4e\xd4\x5f\xb9\x1f\xfd\xc0\x0d\x9f\x8a\x49\xa9\x8e\xc4\x4f\x95\x1c\x8e\x04\xc6\x95\xce\x2b\xdd\x96\xf5\x02\xd8\xce\x70\x4a\xa6\x39\xa4\x84\x4e\x32\x49\xd7\x1a\xbb\x98\xb1\x87\xf5\x71\x63\xc3\x2a\x80\x23\xaf\x3b\xda\xc3\x52\xf1\xb6\x43\x75\xd4\xe5\xd3\xc1\x44\x36\x54\x6b\x0e\x66\xd2\x75\x84\x31\xd9\x5e\x59\x3f\xae\x5a\xcf\xe8\x88\x3a\x18\x16\x34\x5e\xd7\x98\xa0\x57\x9c\xef\xa2\xbe\x4d\x80\xc1\x61\x33\xcb\xaa\xb6\x12\xd8\xba\x54\x64\x31\x6f\x8b\x8b\x87\x33\xe7\x11\x68\x00\x28\x1d\xe7\xee\x18\x8b\x3d\x6f\xc7\x5d\x39\xa7\xd4\x0e\x4e\x26\x32\x0e\x55\x6c\x2d\xee\x27\x04\xe7\x89\xcf\x72\x2e\x89\x72\x3a\x5b\xcc\x01\x46\x4b\xa0\x82\xcd\x6a\x42\x80\x5a\xec\xae\xd7\xe5\x51\xad\x1a\xee\x98\x54\x0e\x36\x43\x6b\x91\xc2\xe4\x7c\x3b\x4e\x19\x3b\x4c\x0a\x00\x6d\x54\x76\x5c\xe5\x72\x5c\x07\xbd\x68\xb1\xf5\x51\x62\xab\x9f\xfa\x82\xef\xfa\xcc\xe7\xbc\xc7\x13\xdf\xe7\x4f\x3e\xed\x3d\x3f\xfd\x79\xcf\xbd\xbe\xe7\x5b\xdc\x0f\xfe\xfc\xfe\xc1\xdf\xfd\x2d\xcf\x76\xe2\xed\xdf\xf4\x5f\xf8\x4f\xf8\x4b\x62\xab\x67\xbe\xc5\x73\xff\xe7\xf7\x7b\x26\x53\x5f\xfa\xdf\xfe\xde\x9b\x3d\xf9\x89\xef\xf2\x83\x4f\x82\x5f\xf5\xf8\x0f\xfe\xbd\x7f\xf8\x79\xaf\x7e\xcc\x77\x7e\xc9\xf6\x86\x8f\xf9\xad\x07\x4a\x5f\xf9\x6f\x7e\x39\xbc\xeb\xdb\x3d\xfb\x33\x3f\xe6\x19\x7f\xf2\x39\x07\xec\xff\xf2\xab\x7f\xec\x71\x5f\xfd\xf8\x9f\x7b\xde\x27\x7f\xc5\x57\xff\xd2\xdf\xfb\xd9\x7f\x3b\x9f\xfb\x40\xe9\xdf\xfc\x93\x77\x23\xcf\x79\x19\x7b\xda\x2f\x84\x7f\xfb\x69\xee\xa3\xf0\x07\xfe\xb3\x5f\x9f\x1f\xfd\xd1\x2f\x78\xcd\x2b\x3e\xe2\xfc\x77\x3f\xf5\x77\x9f\xf3\xae\xcf\x7a\xa0\xf4\x19\xcf\xf9\xa1\x17\xbe\xea\x33\xde\xe5\xdb\xdf\xfb\x7f\x7e\xc2\xb7\x7e\xc5\xf5\x6d\x4f\xd3\xfe\x37\xfe\xcd\x9b\x7c\xd7\x57\x7d\xc6\xcb\x3e\xf8\xb3\xf3\x3b\xfc\xf3\x0f\x78\x50\xeb\xf4\x8f\x5f\xf3\xb7\xde\xe3\xab\x3f\xec\x7b\x3e\xec\xbf\xff\xfc\x2f\xfd\x5f\xcd\x3f\xf8\xb9\xf5\xcd\x7f\xf8\xe5\x5f\xfe\xa4\x77\x7c\xfa\x6f\xbf\xee\xff\x7c\xfd\xa7\xbd\x34\xbc\xd9\x47\x3d\x50\xfa\x44\xff\xcb\xbf\xf9\xe1\x4f\xf8\xbd\x37\x7f\xfc\x93\x5f\x80\x3e\xea\xb5\x8f\x51\x9f\xf3\x79\xee\xd5\xf9\xc7\xfe\xe0\x5f\xfd\xb5\xf7\xff\xe4\x7f\xfd\xac\xff\xc1\x3f\xfb\x81\xd2\xaf\x78\xc1\x63\xff\x3f\x6f\x4d\xde\xf5\xbb\x9f\xfa\x56\x2f\x7a\xf1\x53\xc1\xb7\x7e\xf2\x3f\x79\x0a\xfb\x9b\x6f\xfa\x1d\xbf\xfe\xeb\xef\xf3\x21\x7f\xfc\x37\xfe\xe6\xdf\xf8\xba\xef\x7f\xa0\xf4\x05\x3f\xf6\x45\x2f\xff\xa3\x2f\xc4\x2f\xfb\x9d\x7f\xf2\x6f\x3e\xed\xb3\xff\x0a\x7a\xd1\x0b\x9e\x64\x5e\xf7\x91\xef\xfa\xe4\xdf\xff\xc9\x7f\x67\x5f\xfb\x49\x7f\xc2\x3e\xe2\x2f\xc4\x56\x0f\xfb\x54\xef\x08\x56\x3d\x58\x82\x25\x47\xdb\xf8\x32\x8d\xca\xe6\x44\x6e\x46\x9d\x78\x43\x4a\xc9\xb9\xc0\x99\xc6\x99\xaf\x0d\x4e\xe8\x36\x41\x73\xbb\xeb\x20\x39\xd9\x01\xd0\x15\xf9\x33\xad\xbe\xfb\x98\x33\xdd\x98\x31\x0e\x1d\xf6\x80\x91\xb7\x90\x6c\x65\xe4\x64\xf0\xdc\x80\xd9\xd2\x20\x4e\x81\x9b\xe4\xb6\x34\xee\x05\x6c\x4c\x13\x30\xfc\xe8\x0b\xb0\xce\x2f\xe0\xae\xc4\x2f\xc2\x64\xa2\xb4\xa6\xa4\x12\x5f\x22\x94\x53\x6a\xa6\x31\x53\xe6\x26\x0a\x90\xce\x3d\xba\xe6\xea\x9a\x4c\x91\xf3\x72\xe0\xc8\xd4\x1b\xe0\x2c\x0c\x45\x4b\x5c\x87\x83\xd2\xc6\x43\xd9\x3c\xd9\x0e\xa3\xd9\x17\xbc\x0b\xed\xc0\xbe\x2d\xbb\x0d\xcc\xbd\x56\x5c\xf5\x36\x80\x07\x06\x44\x4e\xb1\xdb\x36\x1d\x68\x75\x84\x3b\x9d\x2e\x44\x87\xb7\xc4\x38\x46\xef\x92\xc2\xc5\x73\xdf\x0c\x18\x43\xa4\x93\xa3\x4c\x43\x00\x6d\xc3\xbb\xda\x68\xb8\xd0\x39\xda\x1e\xe7\xca\x24\xb8\x90\xfb\x00\xb5\x90\x84\xf8\x5d\x31\x37\x48\xa2\x78\x5e\x00\xec\x7b\xa3\x29\x3b\x8d\x8f\xa8\xeb\x30\xb9\xaf\x90\xb8\xbb\x62\xa8\x3b\x70\xd1\xba\x7a\xe0\xca\x01\xc8\xf5\x36\x66\x02\xe4\x6b\x81\xe2\x68\x44\xf5\x6c\x1d\x85\x1c\xae\xa0\x8e\x79\xfa\x0a\xeb\x86\xf1\xe5\x62\x65\x36\x9b\x76\xd1\xdd\xc8\xae\xcd\xf9\x40\xd2\xf5\x1b\xc1\xe7\x61\x38\x7d\x47\xb2\x95\x9e\x78\x9d\xb5\x69\x99\xa6\xae\x15\x07\xc7\x8e\x91\x13\x3e\x8c\xd9\xcd\x90\x2c\xf5\x66\xe2\xb9\xbb\x75\xaa\x61\x01\x44\x24\xdd\xa5\x56\x8b\x36\xb3\x66\x7d\x68\xbd\x19\x20\xa7\xc2\xb1\xf8\xbc\xe3\x0b\x74\xb2\x84\x28\x18\x96\x13\x31\xb4\xb5\x10\x4d\xc5\x5d\x09\xca\xee\x7a\xe4\xc7\xe5\xbc\xd8\x9b\xf5\xa3\x89\x6c\x52\x24\x1a\x5d\x9e\xa4\x69\x87\xe5\xfb\xba\x82\x5f\xe7\xc2\x2e\x1d\xf3\xcc\x47\xa1\x6c\xdb\xe0\x5d\x6c\x6e\x3b\x8e\xbd\xf1\xdc\x89\x1b\x94\x93\x74\x5c\x22\xd4\xd3\x00\xed\x0f\x42\x0e\xd0\xcb\xac\x83\xfb\xb2\x4d\x44\x4c\xe9\x10\xeb\x73\xde\x45\x77\xed\xdd\x19\xb1\xdb\x2d\x59\x0d\xcd\xae\xe5\x99\x11\xbf\x7c\xde\x2f\xcd\x72\x74\xea\x9a\x44\x68\x63\xae\x31\x44\x43\x6b\xcd\x02\xf4\x5d\x6b\xd8\x35\x35\x49\x1e\x19\x85\x27\xc8\x48\x32\x0c\xf5\x98\x97\x10\x83\x6a\xb8\x01\x76\x9e\x6c\x65\xb5\xd6\x99\x83\x8b\xd1\x6e\xa8\xa6\xbb\x60\x10\x36\x72\xe1\xd5\xa6\xd2\x3b\x66\x61\x6c\xc1\x21\x9f\x7a\x57\xbb\x81\x82\x67\x07\x77\xe0\xe1\x95\x1b\xcd\x87\x5b\x47\xb2\xc9\x81\xbb\x2c\x4f\xd8\x14\x1a\xa6\x4c\x3b\x1d\x7e\x6e\x8f\xbc\x89\x3a\x62\x41\xaf\x1a\xd7\x76\x4e\x28\x1c\x47\x35\xa7\xd6\x44\x63\x96\xd9\xa4\xe5\x03\xce\xcf\x37\x82\xcf\xc3\x3a\xbf\x1b\xc0\x07\x65\x75\x09\x19\x42\x2c\x58\xa4\xc6\x10\x4f\xdc\xf3\xae\x62\x31\x56\x72\x03\x46\x50\x38\x5f\xb0\x57\x99\x85\x9e\x9d\x49\x99\xef\x32\xd5\x9c\xd6\x8a\x33\x8b\x61\x4f\x33\xcb\x20\x5d\x56\x57\x7b\x0b\x3a\x55\x9c\xe8\x5c\x7c\x2b\xa5\x2e\x9c\x64\x07\x41\x98\x39\xe8\xb0\x37\xf5\x60\x94\xc4\x74\x19\x68\x84\xe0\x46\x1e\x17\x07\xb2\x61\xab\x32\xf6\x78\xc7\x20\x5b\x0f\xd6\x28\x4d\x25\xb2\x51\x73\x2d\x48\xcd\xe0\xe9\x2e\x36\xb7\x41\x05\xf5\x46\xdb\xd1\x01\x81\x74\x05\x6e\x6d\xb3\xc2\x4c\xea\xca\x25\x06\xa8\x17\xf5\xae\x18\x70\x36\x75\x21\x76\x6e\xfc\xd0\x77\xed\x1f\xb8\x2b\x57\x68\x70\x0c\x8c\xdb\x11\xb7\x32\xcf\xbd\x65\x8d\xc0\xe5\xc7\xc9\xc1\x56\xaa\x00\xeb\xba\x2c\x61\xce\x64\x74\x00\x67\xee\xca\x52\x26\x40\x46\x24\x9d\xaa\x87\x63\x85\xd2\xad\xcb\x14\x91\x70\x7e\x8d\x72\x24\x6c\x69\x39\x4b\x47\x22\xc1\xee\x85\xae\x21\x9d\x1e\xdf\x95\xa5\x4c\x97\x09\x13\x40\xe7\x76\x8c\xf6\x2e\xa2\xd3\x17\x42\x7c\xc3\x9b\x09\x86\x25\xc1\x75\x3b\xae\x33\x26\xd2\x99\x95\x97\xd6\x5b\x9c\xb7\x39\x84\x09\xdc\x13\x9a\x23\x29\x75\x4d\xd4\xa5\x3f\xf8\x2e\x8e\xc0\x3d\xd9\x82\xc7\x29\x5e\x72\x2d\x0c\xe3\xc0\xaa\xb1\xb5\x9d\x3e\xec\x35\x3c\x0a\x7c\x1e\x36\x4b\xde\xc0\xfa\x53\xb4\x0e\x73\xaa\x51\xa5\x2b\xb1\xdb\xb5\x4f\x10\x16\xcb\x06\x6d\x08\x42\x7e\x78\x87\xa7\xcc\x67\x9e\x20\x14\x16\x4f\x64\xd1\x6d\x91\x2e\x19\x7b\x06\x4a\x36\x45\x5f\xd1\x8c\x1e\x50\x87\xba\xc3\x39\x16\x1e\xc9\x46\xae\x60\x6e\xb0\x54\xe1\x59\x9a\x68\x33\x8c\xdf\x26\xee\xa6\x87\x21\x02\x2f\xd9\x6c\x11\xce\xa7\xba\x2b\x6e\xaf\xd6\x77\x42\x5d\x07\x79\x40\x88\xb6\xf3\x92\x70\x57\xde\x4e\x7d\x49\xd0\x8a\xbd\xcd\x76\x4e\x0c\x6c\xce\x1c\x11\x39\x7b\x5d\x32\x3a\xa8\x0e\xef\x77\x84\xdd\xa0\x21\xa3\x28\xc9\x55\x8e\xc2\x22\x6b\xe5\xb8\xda\xa6\x90\xbe\x2b\x5d\x14\xe0\xc2\x88\x80\x88\x71\x8d\x3a\x72\x70\x39\x66\x5a\xbc\x40\x5d\xed\xca\x2b\x02\xdf\x5a\xbb\x72\x5e\x84\x1d\xb4\x26\xba\x1f\xb7\xad\xa6\x2f\xad\x59\x70\xb1\xba\x0d\xee\x61\xc7\x3a\x06\x7d\x98\x0c\x3b\x24\xea\x6c\x64\x4f\x87\x3d\x77\x69\xd6\x3e\xe3\x98\x2d\x7a\x45\xee\xba\xe4\x45\xf7\x06\xf9\x55\xd0\x01\x66\x3d\xd0\x32\x69\x4f\x93\x5c\x2c\xbb\x08\xf7\xab\x81\x63\xbf\x12\xdc\x8d\x1a\x22\xba\x3d\x5f\xa6\xd7\x70\xdb\x1a\xd6\xaf\x16\xcb\x38\xfa\x5e\xc4\x9e\x6a\x80\x6e\x93\x5e\xee\x70\x4f\xce\xd9\x11\x4f\x02\x81\xb0\xa3\xf0\x90\x19\x02\x41\x9f\xa3\x95\x47\x67\x7a\x3e\x8c\x9d\xba\x01\x7c\x80\xc5\x43\xc4\x88\x0e\xbd\x4b\x33\x19\x5e\x2c\x84\x16\x20\xd7\x76\xc2\x6d\xeb\x23\xaf\x80\xb9\x4a\xc4\xd7\xac\x8c\x1f\xce\xd6\xbb\xb6\xc7\x6e\x4c\xda\x2f\xc1\xd0\x71\xce\xe5\x6c\xc0\xba\x0e\x31\x95\x89\x2c\x0a\x35\x84\x46\x74\xd1\x78\x8c\xc6\x11\x15\xf8\x52\x53\xb9\xbb\xc0\x67\xa7\xa6\x6a\xb5\xec\xdc\xe9\x8a\x0a\x57\x2d\xb4\x21\x03\x37\x60\xa9\xbf\xb6\x13\x74\x2b\x2e\x07\xdd\x42\xfc\x0a\xcb\xa3\xae\x6f\x8b\x1a\x2c\xdc\x88\x33\x88\xab\xc1\x9e\x77\xb2\x63\x44\x48\xc2\x1a\xc2\x6d\xcb\x9d\xa4\x99\x48\x84\xd1\x73\x2e\x01\xb6\xa9\xd3\xbc\x54\xb9\x4b\x52\xcd\x76\xd7\x91\x76\xb8\x9c\xf1\x5a\x5d\xcf\x1c\xb4\xef\xe7\xd1\x2e\x58\xf9\x80\x48\x20\xca\xb3\xf4\x21\xa2\xe5\x26\x55\x97\x91\xee\x2e\x1d\x6e\x68\xb9\x11\x9b\x63\xd6\xec\x3a\x33\xa6\x7b\xeb\x60\x1e\x71\x9f\xde\xfa\xab\x39\x66\x8a\x47\xc4\x04\x51\x99\xa9\x78\x2f\x11\xf1\xbb\x76\x32\x73\xa0\x76\x58\xb8\xe1\x0a\x61\xb8\x04\xd4\x02\xc5\x7c\xb8\x4b\xa1\x72\x06\x16\xe3\xb6\xae\x53\x6e\xb9\xea\x45\xbd\x6c\xf0\x40\x77\x7d\x3b\xd4\x1e\xaa\x61\xc2\x40\x4a\x65\xb1\xb5\x0d\x62\xb0\xc8\xcd\x24\x72\xee\xc8\x50\x5f\xc8\xb6\xf7\xc3\x84\x9a\x8f\x13\x05\x05\x22\x7e\xe0\x10\xd5\x1b\xc1\xe7\x61\x7c\xf7\x1d\x67\x04\x2b\x3c\x26\xc6\x36\x68\xbd\x7c\x49\xe5\xb0\xab\x45\xa4\x4f\x5b\x80\xe0\x5a\xab\xac\x83\x21\x39\xcb\x13\x6f\x72\x53\x61\x77\xf9\xae\x09\x7a\x18\x01\xea\x8a\x5b\x2f\x9c\x23\x57\x55\x8f\x7d\x04\x15\xd7\x38\x7d\x74\x5d\x01\xe2\xfb\xd8\x70\x1d\x45\x6b\x36\x0a\xec\xde\xdc\xc5\x3e\x79\xb3\x51\x32\xcc\x86\x8e\xf3\x64\x8f\xcc\x82\x61\x73\xcc\xf1\xcd\x02\x3e\x57\x23\x0b\x3a\xe4\xb0\x3a\x7d\x77\x5d\x6e\xa9\xf0\x70\xdb\x2a\x89\xc5\x4b\x26\x4b\x44\x3c\x98\x9e\x20\x1c\xb0\xcf\x38\x0c\x58\x15\x3a\xac\x0b\x4d\x5d\x2b\x74\x2e\x81\x29\x09\x81\x43\x94\xdb\x5d\x29\x4e\x54\xb6\x4b\x1f\x94\x17\xa6\xd2\xee\x4e\xd8\xf2\xc8\x3d\x0c\xe9\xd1\xda\x73\x64\xcd\xa0\x0b\x6b\xa2\x35\xad\x53\x45\xd2\x7c\x42\xfc\xb6\x7b\x9d\xfe\xcf\x33\x38\x70\x6d\xe1\x4c\x9b\xb2\x00\x35\x46\x9a\x21\xeb\x38\x0b\xe1\x03\x1e\x5b\xe3\x76\x68\xb6\xdc\x6a\xc1\x02\x68\xe7\x5d\x2b\x92\xde\xe0\x79\x14\x02\x4f\x72\x09\x0c\xa3\x9f\x51\x18\xcd\x10\x7f\x64\xc0\xc9\x50\x01\x00\x40\xf0\x48\x26\x1d\xd9\x19\xac\x30\x84\xde\x35\x9e\x47\xbe\x03\x08\x24\x88\xac\x8d\xf6\xc8\xab\x73\xe0\x26\x37\x29\x3c\x26\xe9\x34\x95\x37\x64\x69\xdd\xd9\x65\x8a\x33\x1a\x46\x91\x56\x7c\x14\xf8\x3c\x6c\x83\x76\x03\xf8\xac\xb6\x38\x50\x0e\xea\xd0\x0b\xce\x65\xd3\xd1\x27\xae\x4b\x93\x7b\x16\xb3\x30\x59\x86\x39\x33\x39\xbb\x94\x54\x38\xa5\x5a\x5b\x77\xa1\x37\x6a\x3b\xe8\x1b\x9c\x5e\xa9\x91\x64\x13\x65\x07\xe7\x5e\xda\x04\xfe\x3a\xa0\xf5\x97\x14\xcb\xc8\x82\x0f\xa9\x0f\x1d\xb8\x35\xe0\xb6\x48\x97\x78\xae\xb1\x97\x43\xae\x44\xb3\x32\xbd\x13\x9a\x18\x55\xf9\x1a\x92\x4e\x5b\x4c\xe4\x11\xe6\xba\x32\x26\xf2\x74\x62\x63\x92\xe6\xdb\xee\x75\xa2\xda\x60\xdc\x06\xdd\xfc\xa6\xdc\x69\x3b\x8f\x32\xce\xab\x28\x0e\xf5\x41\x2f\x1b\x27\xd3\x33\x16\xcb\x4c\xb2\x41\x8d\xc8\xec\x5d\xdf\xce\x84\x54\xc8\x15\x4f\xd2\xf3\xa8\x16\x4b\xcd\xf6\x2b\x9c\x7d\xb6\x16\x09\xd0\x96\xe1\xc8\xe2\x9e\xf8\x25\xab\x2e\x19\x35\x4b\xd6\x5d\x62\xab\x28\x7a\xde\x94\x51\xc2\x88\x9e\x80\x2d\xea\xb2\xfc\x38\xe5\x94\x53\x53\xc9\xcf\x35\x0a\x02\xc1\x18\x10\xab\xe6\x28\x4c\x69\x6e\x73\x81\x6f\xce\xae\xa3\xd1\xe5\x2e\x8a\x84\x25\x1d\x35\x28\x7c\x98\xa9\xf1\x23\x9c\x7d\x0d\x1b\xa9\x42\x43\x53\xb5\xcd\x11\x81\xc4\xdb\xbc\x6b\x17\xe9\x54\xb5\x7a\x68\x63\xac\x60\x11\xad\xb1\x8a\x56\xde\x2b\xcc\x50\xa1\x41\x27\xbc\x3d\x82\xca\xfb\x4a\x06\x66\x0b\x33\x54\x32\xb3\x47\x81\xcf\xc3\x76\xf2\x77\x10\xce\xa9\x27\xbd\x6f\xb4\x21\xae\x13\xdc\x7a\xbb\x52\xfc\xf3\x43\x52\x7e\x9c\xd3\x82\x55\x96\x34\x39\x67\xb7\x3a\xb1\xe7\x3c\xdd\xaa\x77\xfd\xbc\xaf\xa1\xce\xe0\xf9\x1e\xe2\x84\xd8\xd9\x43\x94\xbe\x35\x0c\x71\xf3\x13\xec\x5a\x72\xde\x8b\xc1\x76\x13\xee\xf4\x3d\x73\xda\xcf\xbb\xb6\x5d\x64\x0d\xdb\x36\x6c\xc2\xa6\x53\x82\x52\x1d\x73\xeb\x81\x68\x0c\xbb\x5e\x17\xaa\xd1\x2a\x58\x31\xdb\xaa\x8b\x59\xee\x85\x03\xb5\xeb\xbb\xc8\x55\xbb\xa3\x03\x45\xa9\xa2\x98\xdd\xf1\x2a\x1c\x42\x41\x35\xac\x4f\x64\x59\x4f\x96\x1e\xc2\x8d\xbd\xab\x99\xac\xda\x50\xd1\x2b\xdc\x46\x38\x1f\x5c\x6d\xd9\xad\x52\xd9\x70\x02\x51\x43\x7c\xf3\x6c\x6a\x85\x02\x2b\x1b\xa3\x15\xee\x10\xa3\xab\x5f\xd0\x67\x80\x25\xe2\xf5\xb6\xb3\xc5\x48\xf5\x6b\x3b\x5a\xc7\xa3\xb9\xfd\x90\xe7\xc0\x03\x88\x39\x20\x3c\x17\xb9\x2c\x4c\xe1\x50\x25\x9a\x02\x22\x02\x6a\x23\xd8\x44\x7e\x97\xc1\xee\x34\x53\x79\xe3\x0b\x3c\x7a\x2d\xbe\xc2\x35\x07\x42\x67\xe2\xdd\x78\x98\x43\x64\x1b\x00\x3a\x98\xeb\xda\x44\x3a\x5c\xb9\x1c\x58\x77\xfd\x25\xb1\xb4\xb8\x2a\xbc\x16\x34\x71\xa8\xbc\xe5\x89\x44\x3e\x0d\x74\x63\x9b\xed\x8a\x47\x9c\x68\xe1\xd1\x61\x15\xf0\xa8\xc4\x51\x94\xd8\xa3\xc4\x56\x1f\xf1\x3b\x4f\xfb\xa9\xe7\x7e\xc0\xb3\xff\xf8\xe5\x4f\xf9\x02\xf1\xe3\xbf\x1c\x7e\xee\x1b\x7f\xfd\x3f\xfd\x77\xaf\x7a\x8b\x57\x7f\xdf\x87\x99\xdf\x7f\xea\x93\xbf\xe0\x3d\xbf\xe8\x2f\x89\xad\xfe\x9b\x67\xfe\xd1\x9f\x3d\xff\x27\xbe\xf6\x1f\x3e\xfe\xf5\x1f\xf9\xda\x4f\x7d\xdc\xef\xbf\xdb\xaf\x7c\xde\xc7\xfc\xe9\xab\x3e\xf1\x0f\x3e\xf0\xb5\x9f\x83\x9f\xfa\x4e\x1f\xfa\xec\xb7\x79\x50\x97\xf5\x94\xb7\x79\x9f\xef\xfa\xed\xdf\xfe\x86\x5f\x7c\xdf\x97\xfe\xfd\x1f\xfa\xf2\xb7\xfd\x7f\xbe\xef\xeb\x9e\xf5\x65\xef\xfc\xf4\xef\xfd\xea\x7f\xfa\x0c\xff\xb8\x3f\x00\x3f\xf7\xb4\x07\x4a\x3f\xf2\xcb\xff\x5f\x7f\xf7\x53\xbe\xe9\x9d\xfe\xb7\xc7\xbf\xe7\x67\xff\xed\x9f\x7c\x93\x57\xbe\xe0\x75\xff\xe9\xef\x3c\x39\x3f\xe7\xdd\xcb\x47\x7d\xca\x7f\xfb\x8d\x1f\xfa\xb3\x8f\xd3\x0f\x94\x7e\xe5\x8b\xbf\xf8\x4b\xdf\xf0\x27\xcf\xc9\xdf\xff\xb9\xdf\xfb\xd4\xc7\x3d\x05\x7e\xfb\x7f\xfc\xce\xaf\x72\x1f\xf8\xf2\x77\xfa\xcc\x3f\x79\xc7\x0f\xfa\xa3\x8f\xf9\xe3\xb7\xff\x1f\x1f\x28\x7d\xda\xcb\x9f\xf0\x35\xef\xfe\xdc\x2f\xfc\xe8\xaf\xfa\x94\x1f\xff\xa4\xdf\xfe\x47\xef\xf0\xb3\xef\xfe\x3f\xa1\x0f\xf9\xf0\xe7\xbf\x5d\x7d\xfa\x9f\xbd\xe4\x0f\xbe\xff\x43\x3f\xe1\x65\x0f\x94\xfe\x1f\x5f\xf3\xf7\xde\xfe\xb3\xe9\xf9\xb4\x8f\x7d\xda\x87\x3c\xf3\x4d\xbf\xff\xbb\x3f\xeb\xdf\xff\xbd\x6f\xfd\x99\x7f\xf1\xf1\x1f\xf6\x16\x3f\xf2\x6b\xbf\xf0\x3d\xaf\xfd\xe9\x0f\x7c\xf0\x5f\xc5\xe0\xef\xbf\xab\xf8\xf9\x0f\x80\x1f\xfb\x4a\xf9\x21\x3f\x00\x9f\xf1\xac\xfd\xa7\x3f\xfd\xa9\x6f\x51\x5f\xf8\xc7\x8f\x37\x3f\xfb\x71\x6f\xf3\x2f\xfe\xcb\x63\x1e\x28\xfd\x3b\xef\xf1\xd1\x8f\xc3\xcf\xfd\xb2\xaf\x7d\x9b\xef\xf8\xa6\xef\x7d\xda\x27\xbe\xfe\xeb\x5f\xf1\x82\xe7\x3f\xee\xc7\x3e\xe4\x45\x9f\xfc\x66\xdf\xf6\xc3\x2f\xff\x1e\xf8\xa7\xbf\xf7\x17\x62\xab\x87\x7d\xaa\x37\xbc\x01\x16\x6e\x35\xd3\xca\x30\x99\x5d\x90\xba\x81\xb1\x16\x0f\x8e\xf2\x49\x14\x54\x87\x85\x02\x3a\x14\x5d\x42\x9c\x98\xe6\x31\xb8\xe6\x6d\x8e\xbe\xb5\x0f\x57\x9a\x96\x70\x99\x8c\x43\xf3\xa8\xa3\x19\x6a\x12\x99\x5e\x9c\x5a\x95\x36\x8d\x2a\x68\x8a\xe6\xe5\x49\x30\xcc\xa5\xbb\x4e\x93\x98\x19\xcd\xb5\x71\xb7\x57\xe7\x12\x64\x11\x99\x55\x09\x17\xf4\x70\xf0\xc0\x06\x42\x9a\x95\x2d\x7b\x24\x43\x00\xdf\x0d\x89\x7b\xd9\xef\x7a\x03\x34\x0d\xf4\x02\x57\xa0\xaa\x39\x3f\x29\xf7\x98\xd8\x88\x4b\x1e\x94\x01\x7c\xda\xe9\x2e\x36\x7d\x65\xae\xb0\x7d\xd5\x5d\x79\x73\x93\x13\x83\x5e\xb8\x4f\x89\x8f\x82\xaa\xdd\x5a\x28\x0c\x01\x72\x71\x1f\xd2\x70\xb2\x80\xbe\x5d\x13\x22\x5c\xe5\xa5\xc5\x41\x15\x21\x2e\x43\x73\x97\x15\xdf\x36\x90\xb7\xe1\x90\xd1\xa0\x29\x83\x32\x43\x58\xee\x99\x79\x30\x62\x4e\xaa\x9e\x3c\x0e\xd4\x1b\x3b\xc9\xe9\x4c\xd9\x1a\x20\xe9\x3e\xcb\x93\xb9\x42\x1e\x22\x53\x59\xa9\x0a\x3e\xf4\x36\x4f\x60\xaf\xd3\x10\x09\xa0\x3e\x04\x8a\x41\xec\x5b\x03\xd0\x00\xd1\x37\x78\xdd\x65\x8d\xa3\x02\xe8\xb1\x42\x25\x45\x9a\x8d\x09\xb3\x8b\x90\x44\xde\x88\x5e\x17\x46\x2d\x6d\x42\x50\x45\xb2\xf2\x46\x14\x20\x45\xef\x70\xd1\x47\xb3\xfe\x0f\xc3\xe9\x1b\xc0\xc7\xb3\x94\x5a\x9c\x73\xb5\x96\x89\x03\x09\xd2\x36\x80\x8e\x1c\xab\x3d\x78\x6f\x1d\x8a\xfb\x81\xe1\x52\x4b\xe0\x6e\xc5\x3c\x6b\xbe\x6b\xa9\x75\x02\x9f\x10\xdf\x56\x24\x7d\x51\x74\x69\x7e\xca\x71\x4c\xb3\x05\x5d\x5d\x3b\x28\x4d\x51\xe0\x79\xf1\x19\x6d\x5a\x22\xa5\xe6\xf9\x5d\xe0\x83\x46\x81\xe9\xac\x6e\xb4\x8b\x71\xe7\xc4\xc6\x3b\x57\x23\x1e\xb0\xb5\xb2\x30\x1d\xdb\x71\x59\x6e\x7a\xb6\xce\x98\x55\xc1\xb9\xd2\x5d\x0a\x3e\x6e\xf7\xa8\xe8\x86\x64\x20\x1b\x83\xf4\xa0\x72\xa5\xd8\x63\x38\x09\xdc\x64\x77\xb9\xef\x7d\x60\xd4\x5d\xf5\x55\x89\x15\x46\x2b\xb7\xe5\x8e\xa1\x2c\x4e\x75\x46\x5e\xf3\x0e\x32\x6f\x12\xc2\x47\x3a\xaf\xc3\xa5\x75\x59\x4b\x43\x3a\x8d\x2c\xc8\x4d\x6a\x43\x5d\x3b\xd1\x2b\xdd\xe6\xc4\x68\xb9\x8e\xab\x40\xca\x6b\x14\x16\xe0\x7d\x68\x70\x44\xc0\xdb\xd6\x99\x82\xc3\x0b\x6b\x34\xcd\x8c\x87\xaa\xaa\xf4\x32\xce\x7c\xdb\xed\xe8\x21\x8c\xdc\x64\x29\x3e\x81\xce\x2d\x12\x3d\xe1\x63\x99\x0e\x65\xdf\x8e\x4e\xd1\x26\x0a\xa9\xb6\x09\x1c\xe8\xa5\x32\xd7\x1b\xb8\xcb\xa4\x67\x57\x0d\xfe\x90\xc6\x95\xf3\xd4\xa4\x41\x29\x28\xb9\xb6\x6b\x4b\x3d\x35\xad\x45\x00\xa6\x78\x7a\x5e\xd7\x91\x0a\xe8\x28\x56\xc0\x1f\xad\x77\x78\x58\xe7\x77\x03\xf1\x96\x36\x8f\xa0\x2a\x08\x80\xed\x04\xbb\x45\xa2\x7a\x36\x5d\x5f\xd4\x29\x33\xba\x80\xa7\x39\xba\x9f\x27\x85\xba\xe9\x5c\x23\xd1\xe9\xae\xe9\xaa\x78\x0d\xf3\x79\x56\x52\x96\x39\x8e\x65\x22\xc7\x7a\x6a\x6a\x4e\xca\x30\xab\x36\xf2\xb4\xd8\x10\x30\x6c\x1e\x46\x07\xf6\xcd\xd2\x9b\xce\xfa\xd0\xa5\xa3\xad\x57\x95\x6e\x2f\x31\x15\x82\x82\x3c\xdc\x4c\x17\x40\x7c\xbf\x30\x16\xcc\xb4\x89\xf6\xd5\x70\x32\x6a\xb5\x03\xf1\xe3\x2e\xbf\x25\x2d\x8a\xf3\xac\xdd\x26\x82\x22\xfa\x2a\x58\x07\x2e\x56\x1e\x2e\xee\x69\xa8\x50\x27\xe2\xd1\x5f\x4e\x0c\xb7\xb6\x6b\x77\xb8\x19\x73\xd7\x51\xe9\xb2\x86\x86\x98\x64\xab\x11\x73\x57\x03\x90\x1d\x87\x36\x23\xab\xb6\x0d\x21\xbd\x3c\xca\xe1\xd7\x80\xb6\x83\x23\x3b\x0c\x1a\x06\x77\x1d\x5d\xca\x9e\x04\xb7\x85\x08\xa7\x0e\xeb\x72\xba\x01\x8b\x36\xc0\x31\x4f\x85\xb2\x4e\xd2\xa0\x3d\xfb\x99\x44\xc9\xc8\xd6\xd8\x49\x2e\x77\xe5\x3b\x30\x0a\x0e\x25\x24\x74\xbc\xa4\x63\x58\x5f\x18\x11\x55\xc4\x33\x11\xb3\x82\xef\xc9\x1d\x63\xe4\xb2\xeb\xce\x4d\x67\xc9\xfa\x75\xdb\x19\xc1\x02\x11\xc9\xc4\x23\x60\xb4\x47\x3c\xc0\x75\xd0\xcd\x51\x44\xdc\x9e\xce\xd5\xac\x50\xc3\x84\x46\x88\x2d\x0e\xd1\x01\xc0\xbe\xf3\x47\xb3\xfe\x0f\x9b\x25\x6f\xe8\x7c\xa6\x3b\xdc\x41\x08\x09\x83\x10\x73\x9c\x66\x0b\x81\x9a\x2a\x82\x10\x11\x6e\xa7\x65\x27\x84\xb3\xeb\xdd\x59\x4b\xf7\x8b\x7a\xcc\xf5\x5d\x62\x2b\x93\x97\xae\xa4\xf3\x8b\xd7\x41\x46\x4d\x15\x4d\xbb\xe7\x9a\x51\x47\xc8\x6b\x82\x5a\x5c\x9b\x68\xc5\xb7\xfd\x0c\x6d\x1b\x55\x90\xbb\x56\x8e\xb2\x9c\x39\x2d\xe3\x4e\x07\x27\xa9\x3a\x9f\x9a\x99\x6b\xca\x0d\xa9\x78\xb4\xe8\x82\xaf\x43\x61\x5d\xf8\x23\x2f\xd9\x43\xa6\x43\x9a\x9b\xbc\x85\x44\x5c\xf9\x80\x22\xb8\x11\x93\x36\x57\x25\x74\x37\x52\x77\xa7\x5b\x0a\x5b\xc4\x2c\xe3\x47\x7e\xf9\x39\xcd\xb8\x13\xea\x27\x2f\xe0\x36\xdf\xcf\xbc\x04\x5f\x84\x15\x27\xaa\x10\x64\x56\x10\x6d\x83\x8d\x54\x08\x29\x2d\xb3\xb4\x0d\x37\x11\xaf\x92\x52\x1f\x8c\x5c\xa3\x46\x73\x97\xf4\x3e\xad\x61\xc1\xd9\x55\xf4\x5b\x0c\x4b\x13\x4b\x74\xde\xae\x49\x62\xb3\x4d\x2f\xdf\xce\x38\xb8\x9f\x08\x6b\xba\xce\x30\x01\xd1\x77\xbd\xa4\x48\x66\x6b\x24\xc7\x41\x50\x45\x9d\x04\xaa\x68\x9a\xc5\xae\xce\xed\xe0\xd4\xac\x60\x84\x5f\x07\xa1\x97\xa0\x19\xe1\x12\x90\x31\xb7\x09\x15\x43\xee\x05\x09\x28\xe7\x5a\xd6\x2f\x23\xa9\x85\xd6\x02\x64\x15\x24\xd7\xb4\x27\x47\xbb\x38\xf2\x74\xdb\x89\x6b\x53\xfd\xb2\x71\x3e\x3a\xd3\xf3\x61\xec\xd4\x1d\x99\x9e\xe2\x72\x21\x86\x35\xba\xb6\x7b\x9d\x1d\x6d\x7f\x7e\x9a\xed\x5a\x9c\x44\x45\xae\xde\x25\x1b\x87\xbe\xd0\xd1\xa8\x0d\x51\x61\x73\x57\x96\x01\x39\x98\xaf\x26\x31\xbc\x83\xba\x04\xce\xf3\x58\x7a\x89\xd0\x27\x43\x14\xe8\x30\x16\xcc\x3d\x7a\xa3\xd7\x90\x0e\xd3\xe3\x20\xee\x2e\x8b\x35\xc1\xd7\xa0\xb3\x65\x25\x4e\x24\x74\xbf\x32\x11\x4a\xb0\x3a\xd3\x3a\x74\xe9\xfd\x48\x9c\x8f\x86\xaf\x4b\x1d\x8b\x20\x10\xad\xbe\xca\x6d\xb6\xf3\x73\x37\x86\x09\xd6\x65\xe6\x10\x54\x5b\xd3\xd8\x50\xe4\x69\x37\xf9\x3a\x8b\xe9\x99\x88\xe2\x2e\x29\x68\x59\x8b\x5e\x49\xe8\xbb\xf2\xa4\x68\xdd\x2c\x13\x1a\x38\x52\x5c\xc5\x83\x22\x89\xc0\xbe\x37\x11\x2a\x3f\xa3\x6e\x49\x5d\x0c\x1c\x83\xf6\x91\xcb\x71\x2c\x94\x93\xaf\x77\xe9\x2b\x49\x42\x2e\x22\x6b\x99\xc1\xea\xa2\x83\x57\x74\x85\x9d\x80\xb2\xaf\x4c\xd0\xd8\x2b\x3f\x12\x90\x8e\x6a\x6d\xe4\x15\xf9\x62\x6c\xde\xa5\x32\x08\x8b\x5a\x9b\x1a\x91\x6e\x3a\xc9\x30\x4c\x4d\xac\x42\x4d\x4b\x6b\x10\x92\x51\xba\xe4\x92\x7c\x31\x24\x3d\xd1\x23\xc6\x73\x07\x77\x0d\xc5\x5a\xe8\xe0\x2d\x90\x09\x51\x89\xa4\xf3\x5a\xcf\x12\x49\xf0\x39\xc0\x3d\xf0\xfd\xb8\x12\x3b\x2d\x9f\x05\x1c\xf8\xc2\xc9\xa5\xa5\xf3\xa3\xc0\xe7\x61\x7c\xf7\x0d\x63\x17\xd1\x1b\x87\xe7\xe6\x20\x3e\xd7\x8e\xc9\x35\x06\xec\xba\xcb\x3c\x38\xbc\x5c\xc4\x21\xca\x70\x9e\x30\x51\x90\x39\x6b\xce\x64\x31\xef\x5a\x39\x9a\xa3\x54\x08\x4d\xad\x1a\xb1\x8a\x2e\x9a\x7d\xd5\x34\xe4\x93\x83\xd2\x4f\x10\x02\x2c\x1b\xcc\x49\x23\x84\x83\x3f\xd6\xa0\xe0\xb6\x2c\x83\xd6\xda\xcc\xf5\xea\x04\x82\x00\xc2\x4e\xc7\x92\x6b\xa2\x41\x50\x3d\xb9\x90\x46\x8b\xc4\x0e\x62\x29\x9c\x9a\xc0\xee\xb3\xbf\xd8\x6d\xa9\x0a\x7e\x78\x3d\xb9\x21\x3b\x66\x90\x89\xcb\xd0\x5a\x75\x97\x28\x29\x75\xc1\xc5\x78\x4a\xc4\xb0\x8c\xb5\x30\xde\x35\xa9\x55\xbd\x8d\x69\x69\xf5\x2c\x7d\xbb\x60\x54\xde\x47\xc2\x24\x75\x1e\x76\x24\x81\x56\x76\x83\x07\x97\x7b\x4b\x83\xe4\x2d\xe9\x84\xac\x8e\x34\x24\x76\x57\xbe\x83\x6f\xe6\x54\x2d\xa5\xd8\xd6\x9e\xa8\x0a\xf8\x54\xd8\xd6\x71\xad\x63\x75\x51\xd4\x9e\x36\xb2\xb8\xd1\xdb\x3e\x86\x58\xbd\x38\x61\xee\x8a\x74\x21\x04\xaf\x9c\x56\x93\x43\x2f\xe4\x23\xcf\x83\xea\x58\x27\x30\x7c\x74\x8c\x19\xb0\x91\xce\x81\xae\x43\x0d\xd1\x7c\x56\x57\xb7\x37\xbd\xa4\xc8\x86\xcf\x50\x67\x97\xe0\x98\xd0\x39\x74\x10\xd8\xa0\x55\x19\x4f\x36\xd1\x34\xd5\xf1\xc3\xec\x38\x8d\x11\x8e\x89\xc7\x6a\x92\xfc\x57\x38\x9f\x87\x6d\xd0\xee\x70\xf7\x66\x47\xaf\xb1\x8d\x38\xb7\xec\xf6\xad\xae\xd8\xda\x9c\x25\x5c\x57\xea\x53\xf9\x1d\x48\x13\xd8\xe8\xd5\x4a\xdb\x91\xa4\x58\xdc\xb6\xc5\x80\xa7\x82\x62\xe5\xbe\x05\xe4\xb0\x5d\xfb\xe5\x55\xda\x10\x60\x1e\xd3\xe5\xfa\x9e\x29\xe0\x24\x54\x4c\xd0\xa2\xf8\xdc\x36\x78\x9a\xbb\x12\x8b\x4e\xca\x08\x57\xd7\x01\x72\x42\x38\x6e\x0b\x93\x43\xa9\xc9\x8e\xdd\xf9\x0b\x58\x71\x5e\x67\x3e\xa7\x6f\xc7\x95\xa5\x85\xa3\x17\x7f\x5b\x4a\xf5\xe0\xbe\x4f\x71\xd1\x13\x0c\x6f\x6c\x2c\x66\x5c\x70\x1f\x2b\x44\x28\x00\xc8\xbb\x11\x62\x9c\x1c\x4c\x17\x39\x92\x67\x67\x36\xdc\x96\x3b\xa6\x67\x99\xd4\xba\xc3\xe0\x1a\xb7\x8e\x47\x0d\x9c\x70\xbf\xc7\xba\x37\x2b\xe9\xc1\xc8\x5c\x9b\x1a\x2c\xa4\xca\x0e\xd3\x06\x6d\x77\xdd\x75\xa5\xca\xc6\x8c\xf3\x71\x6e\x58\x6c\x4a\xd0\x16\xe6\x74\xab\x84\x80\x37\xe2\x37\x01\xce\x44\x72\x59\x4a\x45\x70\x15\xb2\xea\xb1\xab\xbb\x38\x1f\xb2\x9d\xc4\x82\xbc\x61\x09\x32\x8d\x5b\xdd\x82\xd5\x55\xa0\xbc\x1f\x22\x84\x47\x9e\x9a\x6d\x17\xde\xe5\x6c\xd4\xc1\x60\x43\x30\x4a\x7a\x17\xf8\xec\xb4\x98\x74\x8a\x58\x93\x62\x64\x92\xee\xe8\x8a\x61\x87\x68\x90\x9a\x4f\xa4\x83\x42\x61\x62\x75\x3a\x4d\xe5\x85\xaf\x81\xc7\x03\xf6\xc7\x37\x82\xcf\xc3\x76\xf2\x37\x80\x8f\x54\x16\xd1\x76\x89\x26\xf6\xbd\xb4\x82\x2d\xa7\xe6\x30\x2d\x2f\x55\xd4\x8e\x36\x78\x81\x29\x19\xee\x42\xd7\x83\x0f\x0f\x8c\x03\x77\xe9\x2b\x19\x63\x5a\x05\x06\xb4\xf7\x5d\x0e\x75\x79\xc5\x8f\x56\xed\x14\x27\xba\x40\x72\x06\xef\x2b\x4c\x04\x4a\x70\x0e\xd9\xbe\x6c\x5f\x77\x31\x2d\xc0\x77\x66\xc4\x39\x47\x30\xce\x01\x6f\x41\x3b\xac\xd4\x27\x18\x24\x5c\x98\x8d\x43\x16\xeb\x55\x65\x9a\xb0\x0d\xb1\x04\x62\x80\xb7\x25\x67\x30\x93\x9a\xd5\xf5\x04\x17\x4f\x5a\x16\xbf\xf1\x30\x43\x34\x84\xe8\xb4\x31\x69\xb3\x6b\x98\x6a\x29\x75\xf7\xa4\x81\x02\x50\xbe\x0b\x7c\xe4\x16\xf0\xbe\x15\x53\x4b\x6d\xc1\x1b\x19\x03\x05\x0a\x96\x3d\xf7\x90\x66\x41\x8a\xee\xf3\xd0\xda\xb4\x4d\x6d\xa1\xf8\xd3\xa7\xfb\x0e\x6b\x49\x03\xd1\x40\x98\x4e\x99\xb3\x61\xbd\x9e\x97\x4a\xc0\x0b\xdf\xa8\x4b\x2c\xae\x6d\xe9\x90\xc9\x84\x85\x9f\xe0\xe4\x18\xa9\x7a\x17\x09\xcf\x05\xc1\x63\x18\x2b\x29\x24\xb0\xba\xea\x92\xb5\x35\x5d\x1b\xcb\x72\x0a\x1e\xba\x41\x82\xe0\x53\x67\xea\x00\x2c\x7b\x48\xe1\x2e\x6d\x32\x29\x41\xe9\x13\xc8\xe8\x8d\x97\x7e\x48\xcd\x14\x59\x88\x33\x27\x83\x33\x97\x8f\x9b\xe0\x67\x62\x11\x17\x82\xf9\xa6\x86\x0f\xf9\x81\x17\xf7\x1b\xc5\x56\x6f\xf9\x1d\x9f\xfa\xb1\xaf\xf9\x57\xff\xf4\xcb\x5e\xf3\xaf\xde\xf5\x73\x5f\xf4\x31\xe1\x6d\xff\xf9\x1f\xfc\x93\x77\xff\xf6\xd7\xfc\xc9\xaf\xfd\xd5\xc7\xbf\xc9\xc7\x93\xf3\xf3\xff\x97\xbf\x24\xb6\x9a\xff\xf9\x3f\x7f\xc3\xb7\xfd\xc4\x0f\xff\xf8\x9b\xfc\x83\x4f\x78\xe9\xa7\xbe\xc7\x0f\x84\x8f\xfb\x80\xff\xf5\x9b\x7f\xf3\x6b\xde\xec\x5b\x9f\xf5\x22\xf1\x84\xaf\x7d\xe9\x1f\x3e\xe9\x81\xd2\x97\xff\xc7\x7f\xfe\x8e\xe6\xa9\xe8\x0b\x4f\xfa\xf1\x4c\xa0\xc7\x7e\x67\xfe\xd5\x1f\x7c\x7c\x7a\xe5\x63\xd7\xd3\xbe\xff\x2b\xff\xc6\x9b\x3f\xe6\x87\x7f\xf0\x81\xd2\x4f\xff\xb9\x0f\x7a\xb7\x6f\x79\xa7\xcf\x7c\xeb\xff\xe9\xcb\xdf\xf1\x9b\xfe\xfa\xaf\xfd\xdb\x9f\xfd\xc7\xdf\xf3\xc2\xdf\xe8\xcf\x79\xe1\xdf\xfd\x05\xf0\x76\x48\x7e\xec\x9b\xa4\x07\x4a\x3f\xe4\x0f\xaf\x97\xbd\xe8\x3f\x7f\xcf\xab\x9f\x04\x5f\xf2\xf9\xdf\xfe\xbc\x8f\xfe\x47\xcf\xf8\x8d\xe7\xf6\x27\xff\xa3\x27\xc9\xf7\xff\x8f\x9f\xf9\x8d\x3f\xf3\xda\xe7\xbe\xe0\x81\xd2\x9f\x7f\xe1\x8f\x7e\xd8\x4f\xbe\xe2\x15\xf3\x33\xdf\xca\x7c\xe3\x4f\xbe\xd3\x47\xbe\xc3\x4f\x7f\xc3\xb7\xa6\x9f\x02\x9f\xf5\x3e\xff\xf4\xb1\xef\xe5\xbf\xfb\x9b\x3e\xfd\x1d\x1e\x28\x7d\xfb\xdf\xfa\x9a\x1f\x7c\xed\xbf\xfe\x7f\x7c\xef\x6b\x3f\xef\x65\x1f\xf7\x9c\x7f\xf0\xfe\xdf\xf7\xa5\x1f\xf0\x7b\x1f\xbb\xe7\x8f\x7b\xec\xeb\x9f\xe0\xbe\xe9\xd9\x6f\xfd\x7d\x2f\x7e\xa0\xf4\x3f\x7c\xcd\xdb\x5d\xdf\x36\x7f\xe6\xdd\xfe\xaf\x8f\xfd\xf0\xfd\x73\x5f\xf1\xce\x9f\xf1\x98\xcf\xfe\x90\x5f\xfc\xd4\xef\x7b\xc5\xdf\xfa\xd5\x17\x7e\xd2\xd3\x9f\xf9\xf2\xf6\xe0\xbf\xfa\x25\x4f\xff\xa9\xf1\xde\xff\xd7\x3b\x7d\xd2\xf6\xe6\xcf\xfb\xac\x37\xfd\xe0\xd7\xff\x1f\xaf\xeb\x7f\xf8\xee\xea\x8b\xfe\xf6\xdb\xfd\xb3\x17\xff\x9d\xaf\xf8\xa2\x57\x7d\xf3\xc7\xff\x85\xd8\xea\x61\x9f\xea\x0d\xb3\xef\x75\xc9\x32\x76\xdc\x5c\x2f\x5b\x38\xd8\x54\xa7\x2b\x84\x07\xdd\xf0\xc5\xe8\x12\x81\xb9\x55\xe6\x36\xb7\x7e\xd1\xe8\x21\x04\xa9\xde\xf5\x64\x1f\x46\xb3\x4d\x44\xdf\x2f\x7c\xd4\x51\xcd\x31\x44\xc3\x82\x5f\xc7\x89\x20\x53\xa6\x1e\xb5\xf5\x1e\xf5\x75\x26\x75\xa0\x14\x77\xad\xef\x42\x3b\x73\xd8\xad\x0d\x98\x37\x69\xbc\x8f\x3b\x09\x2c\x85\xbd\x67\xbf\x89\x7d\xd8\x9e\x8e\x38\xe3\xda\x4c\xb1\x9b\x31\x1a\x44\xbb\xd9\x74\x17\xd7\xce\xa0\xac\x79\x13\xbd\xad\x29\xe5\xc6\x4a\xa6\xfb\xf4\x9d\xd8\x41\x36\xb6\x9b\x2c\xc5\x3a\xe3\xd1\x96\xde\x00\x3b\x94\x0b\x57\xba\x4f\x58\x14\xe5\xb5\x0f\x2a\xa4\xe4\x6c\x2f\x25\x83\xe0\x81\x3f\x57\x46\x6d\x1e\x42\xda\xe5\x4f\x94\x08\x59\x6c\x85\x5c\x8e\xbc\x5f\xda\xdd\x65\xb1\x6e\xed\x9c\x5a\x9e\x06\x62\xf4\xc8\x4f\x22\x04\xc9\x20\x39\x24\x3d\xd7\x19\x0a\xf3\x40\xcb\x19\xe7\x19\x0c\xa9\xe3\xd8\xe5\xb8\xd2\x6d\xc1\xaa\x05\xd6\xb2\x8a\x51\x55\x01\x6e\x57\xd6\xc3\xee\xd3\x99\xe3\x9c\x70\x4f\xc7\xbe\x4d\x9d\x58\x6f\xbb\xac\x97\x1a\x28\x6b\x90\x80\xbd\xeb\x1c\x03\x45\x4a\x14\x4f\x62\x0f\x23\x1d\x3b\x20\xd6\xc1\xca\x0e\xe6\x0e\xba\xa7\xcc\x36\x54\xad\x6c\x9a\x38\x0f\x42\xc5\x9e\xcf\x5a\xe0\xa3\x89\xb7\x87\xe1\xf4\x0d\xe0\xc3\x97\xf4\x73\x58\x1a\xfc\x8e\x74\x93\x95\xba\xc5\xc7\x4a\xb8\x8b\xbc\xa6\x8c\x6c\xfa\x8d\x2a\xe6\x3a\xc2\x18\x9b\xac\x09\x31\x77\xf1\xca\xf3\xa8\xc1\x04\x09\x77\xc6\x6b\x68\xb1\xa8\x40\x5d\xed\xbc\x6d\x69\x43\x5d\x09\x09\x2a\x88\x79\xec\xd8\x99\x74\xad\x2b\xba\xce\xef\xca\x4e\xc2\xb6\xf9\xc6\x1b\x0f\x38\x3b\x33\xa7\x1e\xa1\x03\x5e\x8e\x13\x1e\xe2\x38\x1d\xba\xa2\x93\x90\x5f\x32\xc1\x13\xd0\xcc\xcd\x22\x77\x49\x9c\xa8\xcf\xea\x9c\xa0\x23\x15\xe0\xb0\xb8\x5c\x76\xd9\x3d\x57\x3b\xfb\x75\x61\xae\xe7\xce\x4e\x33\xd1\x75\xec\x95\x57\x43\xc5\xc5\xb7\x72\x5b\x6e\x30\x66\x32\xb6\x1d\xfa\x53\x1f\x51\xf6\x2e\x2e\x96\x26\x77\x66\x0a\x5b\x1b\x8f\x5b\x65\xa7\x07\x34\xa6\x61\xf2\x2c\x95\xce\xa2\x6f\x03\x1f\x0c\x1d\x1c\xf3\xe4\x36\x1d\x2e\xf2\xb8\x16\x91\x71\x1b\x7d\x9d\xaa\x46\x58\x17\x23\x3e\xaa\xa9\xa1\xd1\xbc\xf8\xb5\x41\x08\xef\xfa\x4c\xc0\xdc\x2e\x8c\x55\xc2\x65\x56\x10\xa2\x59\x59\x9c\x98\x6c\x47\x27\x63\x47\x16\x77\x1e\x11\x45\x6e\x13\xd1\x5c\x13\xc5\xac\xcf\xdb\xee\xae\x93\x6e\x87\xe8\x39\x85\x36\x01\xb0\xa6\x7a\xbf\x5d\x02\x37\xe3\xa2\xaf\x3a\x9f\x9b\xf0\xf9\xf4\x5d\x3a\x30\x39\x3d\x8c\x53\x0f\x5e\x80\x7f\x23\xf8\x3c\xac\xf3\xbb\x01\x7c\xd8\xb6\x4a\xc9\x28\x6d\x43\xd3\xc2\x14\xda\x22\xd4\x43\x57\x82\xac\x06\x43\x92\x83\x17\xc2\xe0\x46\x2b\x1f\x86\x89\x64\x30\xbf\xcd\x54\x23\x84\x33\x97\x05\xb1\xc3\x01\xc7\xda\xb1\x3b\xe3\x75\x41\xb2\x1b\x2c\xce\xe0\x13\x8c\x9d\x7a\x50\xd7\x25\xe9\x91\xb2\xb2\x87\xbc\xcd\xc4\x2b\x3b\xde\xcf\xdc\x9a\x09\xd1\x98\x43\xe3\x11\x96\x59\xb1\xb9\x76\x5d\xa1\x61\xac\xa0\x29\x68\xa7\x42\x4f\xb5\xd7\xba\x18\x5b\xf6\xae\x99\x26\x50\x2a\x7c\x65\x8b\xa3\xd3\xa9\x4b\x44\xc3\x8c\xc6\x34\x8d\x9a\xae\x7c\x70\xe0\x4e\x7f\x52\xc1\x36\xe0\xa2\x39\x89\xdd\x09\xa4\x77\xa5\x6f\x9c\x3b\x6f\x09\xae\xb9\x0b\x1f\x2a\x3b\x0a\xb0\x07\x5e\xc6\x25\x43\x37\xc2\xa1\x97\x70\xe1\x72\xc4\x98\xc5\x08\x13\xf4\x49\xfb\x5d\x49\xd7\x24\xe7\x9c\x81\x35\x83\x0a\x70\xe9\x05\xbc\x27\x34\x5e\x61\xa0\x3e\xd0\xc5\x00\x3e\xd1\x89\x0d\x73\xad\x6b\x71\x28\x35\xa4\x4c\xf5\xae\x23\x8f\xc7\x49\x12\x69\x64\x45\xad\x80\x6d\x2b\xe5\xb3\x9e\x01\x1d\x9d\x58\x13\xb8\xb0\xb8\x08\x4a\x11\x93\xae\xce\x16\xb9\x62\xc2\xce\xbb\xd8\x9a\x90\x8b\x9e\x44\x45\x70\x9d\x9b\x91\x8a\xb9\x1a\xf5\xd6\xc1\x9f\xeb\xfe\xb9\x84\xda\x9e\xb4\x08\x9e\x0d\x62\x30\x05\xbf\xed\x4b\x3f\x9a\x78\x7b\xd8\x2c\x79\x03\xf1\x66\x64\xd8\xc7\x24\xd8\xc2\x4c\xc3\x76\x58\xd3\xb1\x56\x3d\x6a\x93\xb6\xe3\x22\x05\x9d\x12\xe1\xce\xcc\x06\xd9\x84\xb9\xe3\x84\xec\x5d\x4b\xad\x8b\x4f\xb8\x1b\xbd\xe8\x92\x92\x0f\x29\xc5\xbe\xaa\xe2\x3d\x0d\xc6\xf3\x2a\xbe\x8f\x98\xa9\x57\x49\x56\x07\x76\x87\x55\x40\x77\x3d\x68\x94\xa4\x02\x4c\xc2\x42\xe5\x44\x84\xe8\xda\x1f\x81\x62\x01\xf1\x8a\xb6\x8f\xb4\x89\x8d\x10\x76\x91\xb1\x31\xb5\x02\xe9\x15\x5d\xf5\xae\xb7\x3c\xa3\xca\x9c\x9c\xe9\xe0\xd1\x62\x22\xcd\x99\x76\x0e\x8e\x05\xf6\xb5\xd9\xa1\xd9\x6e\x1b\x24\xd9\x0f\x65\x2a\x02\x52\xd1\x65\x6f\xbb\x30\xab\x26\xa4\xe9\x91\x1f\x30\xdc\x8c\x8c\xfd\x80\x22\xd4\xce\x77\xdc\xbb\x24\xa2\xf8\x43\xc6\xb4\x77\x70\x04\x9a\xdd\x69\xe3\x71\x09\x72\x17\x19\x59\xfc\x90\x74\x32\xaf\x4a\x88\x44\xef\x30\xba\x29\x04\x3b\xf6\xe4\x26\x61\x30\x9a\x0e\x22\x9e\x57\x2b\x04\xba\x04\xd5\xa1\xbb\xbe\x6d\x3b\x64\xbd\xda\x60\x97\x52\x0c\x84\x0b\xe1\x78\x63\x67\x6e\x58\xc9\x8e\xf4\xb8\x92\x6c\xca\x79\x0c\x9a\x00\xcb\xfb\x28\xe6\x65\xd3\x5d\xac\x3f\xb9\x9a\x63\x60\xef\xf3\x40\xd0\x8a\x38\xc6\x10\xb9\x79\x9e\xa7\x4b\x21\xc5\x9e\xa5\x3c\x78\xc9\xd5\x49\x24\xe6\x08\x98\xb3\x07\xee\xc8\xbf\x11\x7c\x1e\xc6\x4e\xdd\xd0\xf9\xd8\x9c\x86\x67\x15\x4f\xc7\x2b\x84\xad\x5d\xe7\x1c\x80\x29\x77\x8a\xbd\x37\x73\x06\x75\x1d\x45\x4a\x0f\x2c\xb3\x19\x9e\x59\x16\x7e\xd7\x5b\x1e\x0b\x50\xd8\x5e\x77\x64\xf7\x66\x76\xcc\xe5\x89\x44\x5b\xb0\x6a\x2e\x90\x60\x5b\xc4\x74\x5d\x76\xda\x70\xe9\x61\x19\x46\xc9\xde\x95\xdc\x4d\x58\xa8\x48\x71\x67\x77\x08\xdb\xe6\x80\x0d\xaa\x19\xc2\x10\x3a\x4b\xa7\x23\x97\x64\xa5\x8e\x22\xaa\xbe\xfb\xe3\xd4\xfa\xb0\x85\xdd\xf5\xf3\x66\x84\x88\x2d\x9c\xa3\x7b\x64\x8c\x8a\xc1\x96\xca\xdc\x71\xe4\xbc\xf4\x50\x1a\x1d\x45\x32\xa1\x0b\xa2\x71\x4f\x1c\xc2\x72\x96\xbb\x72\xd5\x49\xd7\xd3\x76\x7c\x52\xdb\xea\xdc\xbb\x3f\x14\x01\x11\xd5\xc3\x5e\x75\x4e\xbb\x73\xab\x11\x67\xaa\x26\x92\xd5\x29\xfa\x20\xdd\xde\x15\xfd\x43\x42\x67\xf1\x3c\xbc\x3c\x21\xa7\x58\xa3\x46\x34\x40\x32\x61\x49\x4b\x54\x2e\x7a\x7d\x30\xb7\x9f\x58\x76\x77\x4a\xc0\x4c\x3c\x87\xbd\xcb\xd8\x7c\x01\xa8\xe5\xe6\xc8\xe0\x79\xc1\x9d\x13\x30\xb3\xe7\x62\x51\x28\xdd\x09\xa5\x85\x2d\xb1\x4c\x5c\xda\xf6\x03\xca\xfc\xff\xa3\xed\xdd\xa3\xf8\xfb\xea\x31\xf1\x2f\x8a\x30\x0c\x8d\x4c\x25\x15\xc6\xad\x11\x3a\xfb\x72\x5c\xc6\x64\xa4\x22\x31\xca\x25\x26\xb7\x7d\x3d\x67\x9f\x7d\xf6\xfd\xbe\x25\xc2\xcf\x25\xa5\x14\xc2\xb8\x84\x62\x24\x93\x7b\xe8\x32\x93\x44\x25\x64\x4c\x4c\x53\x31\x26\x15\x51\xca\xa5\xdc\x6a\x7e\xeb\x6b\x56\xd6\x67\xf9\xce\x5a\x9f\x3f\x66\xce\xbf\xef\xf5\xfa\x63\xaf\xf3\x3e\xe7\xd9\xaf\xcb\xf3\x7a\x9e\x7d\xe1\x91\x5d\x55\x76\x65\x8d\xdd\xca\xc1\x49\xc1\x6e\x80\x6c\x2a\x20\xab\x8f\xbe\xc9\xa3\x11\x6c\x19\x34\x79\x2e\x6b\x64\xee\xd4\xde\x68\x90\x17\x01\x6f\xf0\xf8\x78\x07\xf8\xdc\xac\xdf\x7d\x85\xb8\x4c\x40\x36\xb3\x6e\xf9\xb1\x74\xd1\x80\x3c\x96\xa6\xcf\x85\xb4\x0e\x7a\x2a\xcc\x4f\x02\x49\xd7\xdd\xf1\x62\x36\x4a\xab\x3f\xf6\xcb\xe8\x3c\x29\x70\x21\xca\xe9\x00\x5c\x63\x19\x83\xcb\xb6\xe8\x7c\x92\x3a\x43\x06\xcd\x57\x78\xf0\x63\x2c\xfd\x00\x14\xf3\x00\x76\xbb\xd6\x71\x99\x6a\x24\x61\x8a\x1d\x1d\x1d\x99\x90\x33\x57\x78\x2c\xdd\x99\xec\x56\xaa\xf9\x81\x1c\x03\xbc\x63\x83\x32\xf7\x61\x05\x2d\xa0\xb9\x1f\xec\xaa\xd7\xfb\x50\x65\x98\xd3\xb9\x19\x35\x10\x72\xe8\x30\xa5\x52\x79\x5f\x4a\xca\xe7\x9a\x72\x31\x20\xe8\x63\x82\x6c\xf5\x9e\xc0\xb6\xb0\x46\xaf\xa2\x7d\xa1\xa0\x49\x49\xce\x67\x34\x5b\x3a\x6a\x90\x20\xae\x7b\x1e\x49\xac\x66\xda\x31\x1c\xf3\xa2\x40\x5a\x37\x70\x42\x6d\x4e\xa7\xc0\xbc\x4a\xd2\x05\x84\x02\x82\x9f\x8a\x1d\xd0\xcf\x64\x4e\x30\x53\x4a\x55\x61\x39\x05\xd7\x7e\xab\x9b\xcd\x04\x2a\xd8\x4c\xef\x78\x6d\xd4\xe0\x79\xd5\x66\x49\xd9\x4c\x5b\x80\x08\xc3\x02\xca\x27\xc1\x43\xf5\x38\x52\x81\x30\xef\xeb\x7a\xf4\xd6\x00\xdb\x29\xee\x94\x2e\x34\x82\xb3\xa7\x7a\xd5\x4a\x28\xc1\x7d\x49\x4b\xc7\x2c\x36\x03\x56\x3d\xaa\x74\xe2\x50\x84\x41\xe7\x08\x6f\xbc\x6f\x88\x4f\xbb\x0c\x70\xb0\x25\x0b\xa0\x4f\xa0\x6f\xd8\x47\x7f\x07\xf8\xdc\x6c\x82\x76\x01\xf8\xac\x67\x47\xd6\x2d\x0c\x4a\x31\x84\x83\x4c\x14\x99\xd6\x64\x8b\xe2\x78\x68\xc9\xa4\x62\x45\x10\xd8\x1a\xad\x14\x88\xd5\xb4\x70\xd9\x64\x67\xec\x22\x98\x62\xa4\x88\x16\x01\x18\x8f\xc0\x09\x58\xa8\x6f\x7a\x01\xc2\x56\xe4\x87\x42\x6a\xa1\x6c\x55\xab\x3e\x13\xb2\xa8\x5e\x66\x1b\x20\x08\x57\xc8\x2a\xb1\xac\x5b\x0c\xc3\x6f\x96\x27\x24\x4e\xcd\x73\xc0\xa2\x66\x42\x22\x31\x5e\xa9\xd9\xcd\x06\xd2\xdc\x4e\xa8\x2e\xdb\x33\x5e\x77\xb2\x0b\x99\x47\x92\x96\x46\x27\x58\x80\x8c\xe4\x05\x4e\xa2\x5b\xaa\x71\xe7\xc5\xc6\xb9\x14\x2f\xce\xd2\xc9\xe1\x79\x56\xf4\x2a\x62\x11\x2f\x7b\x5d\x4d\x8b\xca\x67\x0c\x3b\x6f\x22\x75\x0d\x9d\x3d\xcf\x29\x0e\xd5\xfd\x96\x85\x4b\xab\xde\x5d\xb5\xa1\xdb\xa1\xa7\xa1\x57\x89\x2c\x63\xd5\x42\xdb\x77\xb7\xe2\x3a\xfa\x79\x8c\xbe\xf5\xbe\x6e\x0a\x42\x07\xd0\x51\xc6\xb2\xaf\x8c\xec\xc1\x48\x4d\x45\x15\xd4\x00\xb4\x5c\xd5\x69\x21\x78\x29\x46\x9f\xdb\xc9\xce\x9d\xb6\x93\xac\xc9\x9a\xcc\xec\xe1\xf3\xb9\xb5\xaa\x20\x3d\xa0\xd7\x65\x09\x0b\x37\x6e\x29\x9a\x25\x75\x95\xae\xba\x34\x8b\xdc\x72\x77\x27\xb2\xc2\xd0\x70\x54\xaf\x17\xd3\x7a\xf6\x75\x13\xdb\xda\x80\x8c\x84\x4e\x3c\x15\x9b\x16\x25\xc8\x16\x78\x03\x01\xed\x1d\xe0\x73\xb3\x99\xfc\x05\xe0\x23\x03\xa1\xf5\x40\x47\x52\x7a\xb9\xb5\xce\x20\xc7\x19\x22\x24\x43\x2f\x1d\x62\xc9\xf8\x28\xd3\xf9\xb0\xe7\x1d\x15\xc8\x4f\x12\x36\x75\x15\xd9\x2a\x5a\x15\xb3\xc7\xc9\x8d\xd4\x40\xd6\x0d\xda\xd2\x69\xb4\xb2\x4e\x3b\x42\x72\xac\xef\x2b\x2a\x05\xc8\x9d\x8c\x73\x22\xc0\x35\xbb\xaa\xe7\x03\x23\xe4\x7c\x22\x3e\x94\x3c\xb5\x8d\xf5\x08\x73\x0a\x57\x41\x37\xd0\xb8\x23\x81\xa9\x46\x00\x54\x63\x8e\x17\x70\x92\xd6\x38\xb9\xea\xf5\x3e\xdb\xde\x00\x5f\xb6\xb9\x0d\x01\x4a\xd8\xea\xa9\x61\x5e\x4b\x23\xe3\x40\x7e\x3f\x4d\xe3\x65\x17\x38\x59\x8b\x0f\x0e\x70\xd8\xb9\xbe\x4a\xb8\x0d\x47\x04\xf6\x41\xa4\x38\xa0\x98\x1a\x9f\xa8\x45\x6a\xc9\x81\x5b\xe3\x4e\x14\x5f\x80\xca\xa7\x81\x61\x0a\xa7\xb3\x39\x33\x82\x57\x71\x4e\x69\x71\xc8\xca\x0a\x1d\xa4\x8b\x86\xc7\x89\xe1\x2e\x31\x5c\xaa\xa2\x41\xc8\x5c\x37\xec\xc9\xb4\x47\x96\xb1\xb4\x6c\x71\x0c\x5e\x91\xab\x08\xef\x8c\x96\xe8\x64\x3d\xf2\x34\xbe\xb5\x79\x2e\xca\xc4\x0e\x32\xed\x52\x9a\x98\x40\x69\xd3\xb3\x23\x0d\xcb\x17\xb9\x1f\xfb\x28\xfc\x32\xda\x97\xee\x60\x44\xef\xf0\xbe\x6d\x6b\x4e\x96\x4c\x35\xb0\x67\xce\xef\x38\x82\x6d\x37\xa2\x38\xc5\x2a\xc7\x7b\xa7\xcb\x19\xf1\x61\xc3\x0d\x0a\x68\xef\x20\x5b\xdd\x2f\xdf\xf1\x3f\xfe\xe6\xa7\xfe\xd0\xbb\xbd\xe0\xae\x0f\xfe\xd1\xe7\xbe\xf2\x15\xcf\x7a\xd2\x3d\x9f\xfd\xa7\x9f\xf2\x94\xb7\xbd\xdb\x8f\x7f\xfd\x69\x5e\xf2\xea\xed\x4e\xff\x88\x6c\x25\x1f\xf9\xe0\xf2\x1d\x8f\x7a\xf5\x6f\x3e\xec\x96\x78\x97\xdb\x8b\x3f\x7e\xf7\xef\xfd\x92\x27\xde\xe3\xfe\x77\x38\xde\xf2\xb2\x3b\xdd\xe9\x2e\xbf\xf5\x63\xff\xec\xcf\x6e\x08\x7d\xf8\x33\x5e\xf7\x5d\x5f\xf1\x5e\x2f\xfe\xf4\x6f\xb9\xe5\xb9\x7f\xf9\x8a\xc7\xbc\xfb\x9b\xde\xf0\x82\x6f\xf8\x98\x37\xbe\x8b\xfc\xee\x5f\xfb\xa6\xdf\xfa\xe8\xa7\xbf\xe8\x3e\xdf\x7a\x43\xe8\x8f\xee\xf7\x7e\xc2\x9f\x7c\xf2\xf6\x5d\x8f\x7f\xd3\x07\xfc\xdd\xd3\x6e\x07\x1f\xf6\xd5\x1f\xf3\x0d\x8f\xfa\xc9\xfb\xbe\xf1\x57\x3f\xe3\x37\xde\x8d\xfe\xe2\xdf\xdc\xee\xd3\x6e\x08\xbd\xff\xff\x7c\xfb\x27\xbc\x0d\xb8\xad\x7d\xf8\xc3\x5e\xf9\x91\xf0\x7e\x4f\x78\xfc\xd7\x7e\xf5\xfb\xfe\xce\x4f\x3f\xee\x9e\x1f\xff\xe4\xbb\xdf\xe1\xd3\x9f\xf3\x19\xb7\xbf\x21\xf4\xf1\xf7\x7b\xc1\x6b\xee\x0c\x1f\x2e\xef\x7b\xe7\x0f\xfd\xdc\xcf\x78\x97\x63\xbe\xfc\xc1\xb7\xff\xb1\x77\xff\xcc\xa7\xa5\x67\x3c\xf1\xe9\x7f\xf8\x7e\x5f\xfb\xc7\x4f\xb9\x21\xf4\xb3\x7f\xf6\x97\x3e\xeb\x31\xbf\xfc\xe6\xff\x38\x3e\xf9\x21\x9f\xf9\xe0\x7b\x7c\xe7\xed\x7f\xea\xe9\xf7\x7a\xdf\xb7\xbf\xf4\x73\x3e\xeb\x41\x5f\xfe\x3e\xdd\xde\x27\xdf\xe5\x86\xd0\x5f\x7e\xec\x6f\xfe\xee\x5f\x7f\xcb\xa3\x3f\xe2\x7b\xbe\xec\x9f\xff\xe6\x5b\xee\xf0\xc2\xcf\xf8\xd1\x87\xfb\xdf\x78\xf2\xcf\xdf\xe7\xef\xde\xf0\x41\x6f\xfe\x9b\xf7\x7f\xdb\x6b\x9e\x7c\x43\xe8\x6b\xdf\xef\x21\x7f\xb6\x7e\xfb\x7d\xe4\x77\x3c\xe0\x31\xaf\xbd\xe5\xa1\xcf\xe0\xcf\xbc\xeb\xcf\xfc\xe5\x6f\xfc\xdc\x9b\x5f\xf8\x49\x1f\xf1\x4b\xef\x4e\x1f\xf0\xdd\x3f\xfa\x55\xef\xf8\x13\x6e\xf6\x54\xff\xd1\x9f\xb0\xfd\xe0\x0b\x9e\xf5\x3f\xbe\xe9\xd9\x77\x7c\xd7\xbb\xde\xff\x0f\xfe\xc7\x7d\xff\xe8\x95\x77\xfb\xc8\xaf\x12\x3f\xfe\xd1\x1f\xfd\x8a\xae\x7f\xe5\x07\xcc\xcf\xfd\xc9\x7b\xde\x10\xfa\x5b\x1f\xf6\xb1\x2f\xfc\x99\x1f\xfa\xb0\x07\xdd\xfb\x33\x5f\x45\x3e\xe8\xaf\x7e\xe1\x2b\x5f\xfe\x91\xf7\xfb\xed\xe7\x7c\xc2\x73\x5e\xf2\xc4\x4f\xac\x7f\xf0\xea\xef\xfa\x8a\xbf\xb8\x21\xf4\x77\x3f\xfb\x65\xdf\x7b\xdf\xe7\xee\xff\xe5\x3e\x3f\xf5\x8b\xef\xfd\xbb\xb7\x7b\xd8\xcb\x7e\xf2\xdf\x7d\xf7\xed\x3f\xfa\x8e\xdf\x3f\x7f\xf6\x65\x3f\xf9\x73\x1f\x74\xcb\x0b\x6e\xb4\x7d\x4c\x5f\x6c\xbe\xf1\x09\x3f\x84\xde\x5b\xbe\xe6\x49\xbf\x77\xe7\x17\xbc\xee\x95\x9f\xf4\x73\xf7\x7c\xd1\x4f\xde\xf7\x6f\x1e\x04\xdf\x6b\x69\xff\xfe\x39\xcf\x7a\xf1\x0d\xa1\xf7\xfd\x97\x5f\x7c\xcb\x9d\xfe\xf3\x23\x7f\xf2\xf9\x1f\x87\x7f\xf5\x8e\xdf\xfa\xf4\xef\xfc\xe1\xf7\x78\xe2\xa3\xef\xfc\x5d\x4f\xf8\xf1\xe7\x94\xd7\xdc\xe9\x5d\x7e\xe8\x81\x0f\xbd\x21\xf4\x3d\xff\xeb\xc3\xbe\xf1\x09\x9f\xf3\x47\x77\xf8\x99\xf8\xf1\x7f\xf8\xd6\x5f\x79\xd0\x93\x6f\xf7\xa4\xef\x79\xfd\x3d\xee\x75\xb7\xaf\x79\xe0\xdd\xee\xfb\x50\xb2\xfd\xf1\xaf\xdf\xf8\x27\xbc\xe2\x5e\xcf\xf8\xa7\xef\xf6\xc8\xdf\xfc\xa0\x27\x84\x4f\x7a\xdd\x47\xbc\xf1\x03\x1f\xf5\x05\xf2\xa3\x3e\xfc\x57\xff\xd9\x7b\xde\xfd\x7f\xdc\xfb\xc3\x9f\xfc\x79\x3f\xfb\x1e\x37\x84\xfe\xc1\x5f\x9d\x0f\x7a\xd8\xef\x3d\xfa\xb9\xaf\x7a\xed\x3d\xee\x77\xbb\xb7\xfd\xf1\x77\x8d\xbf\xf8\xfc\x07\xbc\xfa\x2b\xbe\xbc\xb7\x27\x7d\xd3\xfa\x90\x57\x7d\xec\xe3\xfe\x81\xf1\x76\xb3\xa7\x7a\xc5\x9e\x3b\x36\xf8\x38\x87\x5a\xa0\xe6\xd9\x15\xbe\xb9\xe8\xd6\xd4\x15\x07\x83\x25\x7e\xf0\xb6\x03\x8a\x4e\xb2\x05\x33\xc4\x66\xd1\x69\x2f\x6b\x1f\xc3\xb5\xa7\xa5\xd1\x59\xf7\x2c\x25\x67\xc4\xe5\x2a\xd0\xba\x13\xc7\x31\xaf\xb1\x16\x7d\x86\xee\x31\xdf\x60\xd1\xda\xef\xac\xc2\x74\xd5\x64\x51\x52\x48\x5a\x4e\x85\xf1\xcd\x4a\x35\xf4\xb9\xd2\x11\x28\x42\x47\xc3\x25\xd1\x63\xd9\xb5\xc9\xb1\x38\x27\x5c\x9a\xe9\x24\x60\x55\x57\x69\xd8\x0f\x7e\xa0\x5b\x33\xef\xa1\xd6\x8c\x5d\x70\x1a\x62\x36\x4e\xaf\x73\x19\xbc\x37\x5b\x67\x13\x15\x45\x1b\xb1\x3b\x76\x41\x9a\xe8\xe0\x2a\xfa\x8b\xc3\x12\x49\xce\xad\x67\x8b\xa4\xa9\xa3\xd2\x97\x93\x8c\x69\xdd\xde\xf7\x34\x08\xe4\xd6\x6c\x86\xe2\xd3\x6c\x3a\xb3\x8a\x33\xbc\x6c\x11\xd8\x9d\xda\xaf\x28\x91\x89\x1b\x8c\x73\x33\xdb\xd9\x13\x18\x9b\xd6\x9b\x4b\x47\x83\xa7\xed\x5e\x61\x80\x8f\x7c\x9a\xde\xb4\xb7\x44\x5d\x75\xf9\xc9\xd4\x36\x5f\x69\xab\x1d\x39\x9f\xa8\xef\x40\x46\x79\x3a\x1b\x88\x29\x92\xe4\xc5\x22\x05\x2d\xe1\xf1\x6c\xfb\xb6\x56\xdf\x04\xbb\x2a\x49\xea\x7b\xb5\xdb\x01\x5b\x39\x8b\xd8\x70\x6d\xfb\xde\xa2\x3f\xb3\xab\x9b\x18\x51\x09\x3d\x7c\xcd\x9c\x8e\x9c\xd0\x28\xeb\xe6\x67\xe6\xb7\x25\x9d\xdc\x0c\xa7\x2f\x00\x1f\x71\xae\xf1\x08\x63\xaa\x6a\x68\x5e\xb6\x14\xb3\x75\xb0\xbb\x39\xc4\x01\x83\xdd\x36\x30\xc7\x1e\xd1\xd2\x73\x91\xa5\x03\x8e\xc4\x55\xfc\x21\x0a\xf8\x84\x48\x9b\xd9\xab\x34\x7d\x70\x70\x58\xaf\xbc\x30\x45\xec\xa7\x51\x25\x0b\x0e\xf2\xd1\xb7\xb4\x62\xc2\xe2\x60\xe3\xc4\x57\xf9\x08\x51\xbd\x07\x1a\x57\x67\xce\x0d\x97\x82\xd9\x99\xb6\xe9\x78\xd2\x4b\x2a\xa2\x88\xe1\xfc\x12\x0b\x84\x13\x1f\x76\x2d\xcb\x49\x54\xf1\x57\xd9\x9b\x90\x08\x2b\x0a\x23\x41\x9a\xfa\x62\x22\x2d\x46\xd2\x63\x9f\x38\x76\x0f\x16\x05\x09\xe0\xbe\x9d\x49\x4b\x65\x74\xf2\x36\x7a\xa1\xc8\x55\xe0\x63\x27\xd7\x7d\xc0\x30\xcf\x33\x4e\x54\xf2\x3c\xc9\x80\x34\x43\x8b\xd4\x5a\x9b\x74\x38\x8e\xe6\x80\x5c\x84\x69\x55\xb4\x32\xc8\x55\x0e\x8a\xc4\x34\xd0\x79\x3a\x7a\x50\x7c\x5b\xe4\xbe\x84\xd3\xe8\x61\xc9\xca\xd6\xd6\x28\xc4\x8d\xcc\x43\xaf\x2d\x84\xbc\xaf\x9d\x34\x9a\xdc\x71\x55\xad\x58\xd1\x50\xb2\x4b\x31\x64\xaf\x6e\x74\xb9\x51\xdd\xdb\xde\x4c\x6e\xeb\x7e\xae\xba\x58\xa1\xa7\xf4\xa7\x23\x89\xa2\x26\x0e\x5a\xf5\x55\x5a\x43\x02\x77\x80\xbc\xe0\x68\x67\xd0\x0c\x6c\x18\x38\xc7\x41\xb0\xac\x7b\x83\x08\x2b\xb8\x1f\xc1\xec\x94\x24\x3f\x94\x74\x82\xaf\x00\xdc\x56\xe1\xe7\x66\x99\xdf\x15\xdd\x4f\x54\xc8\x09\x47\x73\xa7\x2c\x15\x6d\xc6\x53\x9f\x08\x14\x65\x47\x9c\x9c\x12\xe7\xa6\x80\x86\xa0\xcf\x00\xe5\x2c\xa5\x35\x72\x99\x2b\xcb\x7a\x2a\x13\xa8\xc2\x5e\x0c\xd2\xfb\x79\x70\x59\x5c\xcc\xf2\xdc\xeb\xc1\x87\x98\x1b\x6c\x27\x38\xcd\x81\x54\xd1\xa8\xd9\xb0\x3a\x7d\x95\xa8\xd7\xa2\x96\x86\x5d\xf3\x67\xaf\xa8\xa3\xee\x0c\xc7\x20\x06\xc6\x68\xc5\x82\x56\x94\x89\x97\xbd\x95\x45\x2f\x21\x24\x12\xa9\xa8\xea\x32\x1d\x3f\x2c\x21\xb1\xab\x3d\x13\x8b\x12\x8a\x91\x7b\x41\x95\x51\xcf\x18\xa9\xf4\x80\xd2\xf4\xe9\x87\xa5\x8e\xec\x08\x9e\x14\xc1\x73\x5e\xa5\x66\x53\xcb\xd6\xf8\xdf\x2f\x85\xc8\xa5\xd2\xba\x7b\xe2\x7d\x9e\x0d\x68\x16\x79\x03\xc9\x8d\x63\xdd\x67\xb2\x6e\xe9\x79\xaf\xa6\x4a\xc2\x2e\x12\x9b\xa5\x71\xdb\x24\x64\x07\xdf\xc8\xe4\x4c\x4b\x8e\x0b\x1b\x8b\x1f\xc0\x89\x43\x95\xb2\x7b\x03\x17\x63\xc1\xea\x20\xaa\x6b\x25\xda\x84\xf3\x2a\x18\xdc\x39\x3d\x16\x11\x16\xc9\xec\x86\x6a\x43\x71\xcd\x8a\xfb\xad\xe4\x00\x24\xeb\x4e\x89\x3c\x3a\x67\x04\x36\xd2\x56\xb1\x1a\xec\xd2\x55\x86\x3c\x02\x05\x51\xc2\x18\xd1\x13\xa2\xd1\x64\x7c\x35\xce\x2d\x89\x04\x8f\x6c\x81\xcb\x9a\x37\x24\x04\x28\x1e\x2f\x8e\x6e\x18\xae\xe7\x68\xb7\x01\x9f\x9b\xd5\x92\x57\xac\x9a\xb2\x68\x13\x11\x08\x42\x93\x8b\xb0\x4b\x57\x81\xc7\x53\x41\x47\x25\x5d\x84\x17\x28\x5b\x37\x25\x20\x56\x2e\xb4\x5b\xaa\x1c\xbf\x4a\x2f\x05\x2e\x96\xd0\xa5\x6c\x70\xe7\xac\x67\x21\x59\x73\x06\xd3\x7d\x08\x54\x70\x92\xa1\xe4\x8e\xf9\x52\xc3\x5e\x06\xc9\x36\x9e\x8b\xbd\xcc\x2d\x50\xeb\x78\x06\x33\x56\xb8\x2a\x1b\x14\xa7\x87\xb3\x61\x19\x9d\x09\x6e\x45\xa3\x7e\xa5\x8a\x49\x8c\x91\x9e\x08\xaf\xe1\xa4\x94\x5f\x65\xae\x4b\x9a\x5e\x18\x49\xab\x5c\xa5\xd4\x1d\xda\xd3\xf2\x3c\x20\x49\x47\x75\x13\x57\x54\x0f\x6a\xb6\x6d\xd5\xb7\x42\xa2\xde\x59\x59\x2a\x65\x57\x89\x88\xa6\x38\xb5\x25\x7e\xe6\x30\x65\xe8\xe7\xa9\xbd\x59\x79\x95\xa8\xa8\x11\x39\x02\x84\xad\x9b\x3a\xf7\x3a\xe6\x76\x64\x14\xe4\xc6\xf8\x55\xa3\x17\x18\xb2\x4e\xc0\x8c\x99\x57\x4d\x42\x92\xcc\x97\xe6\x1c\x3e\x68\x11\x62\xee\xd4\x32\x91\x57\xba\x64\x18\x77\x7f\xac\x2b\x2c\xf4\xaa\xb2\x8b\x32\x2c\x5c\x08\xd3\xb7\x56\x11\xc8\x73\x73\x27\xef\x9d\x13\x41\x72\xdc\x76\xb9\x3a\xd1\x8f\xb5\x4c\x7d\x86\xf3\x10\xdc\x67\x07\xd5\x55\xce\x57\xe8\x08\x81\xfb\xe4\x16\xcb\x12\xe7\x5e\x47\x19\xb6\xc3\x3b\x38\xd0\x84\xdc\x10\xb9\x62\xa7\x10\x39\xa1\x5f\x2a\x18\xa0\x2f\x3e\xdf\x96\x74\x72\xb3\xee\xd4\x05\xe0\xe3\x0e\x53\xd1\x8c\x4b\xc7\xba\x1b\xd4\xa1\xcb\x50\x39\x3d\x64\xc6\x5d\x69\xb4\x52\x0a\xd7\xe1\xce\x7e\x9e\xe7\x72\xd6\x22\xaa\x89\x57\x71\xfd\x5b\x6b\x66\x41\x21\x02\xe9\x79\xe4\x9d\x0c\x92\xce\x62\x43\xa6\x40\xa7\x45\xa0\x91\x66\x23\x68\x55\x9d\xfa\xbd\x43\x90\x82\x5a\xae\xba\x47\xb4\x85\x87\x31\x61\x50\x2e\xe7\x01\x96\xe9\xd7\x64\xb6\x99\x46\x30\x84\x85\x3d\x7b\x3c\x73\x1f\xe1\xc4\xfb\x36\x94\x41\x7c\x59\xc8\x55\x7d\xb0\xd8\xb9\x94\x68\xcc\x88\xf6\xb4\x69\x81\x87\x9c\x1b\x2e\xbe\xc8\xbc\xe9\x6c\x42\xde\x59\xe6\x6a\xe3\x55\x90\xa9\x3d\xc2\x2e\x2f\x57\x75\x9f\xe2\x09\x51\x08\xa5\xce\x05\xe3\x8a\x22\x5a\x4e\x00\x44\x21\x7a\xb6\x19\xf6\xe1\x25\xb2\xd3\x2b\xd6\x7a\x67\x0c\x17\xe8\x71\xb9\xce\x4f\x3b\x9d\xfb\x32\xb1\x45\x02\xd1\x00\xf7\x94\x4e\x59\x24\x29\x66\x39\xc1\x89\x67\xb6\x03\x09\xa6\x23\x5a\xf6\x9d\x41\xa1\x77\xa7\xd9\x55\x27\xb1\xba\xda\xe3\x5c\xd3\xa6\xcd\x56\xad\x12\x4a\xa8\x69\xa8\x2c\x94\x86\xda\x7d\x00\x11\xaf\x3a\xc9\x0a\x85\xc1\x9a\x63\x7a\x56\x7a\xd5\x1b\xcb\x7b\x5f\x41\x08\x96\x84\x33\xc9\x83\x6e\x80\x1a\xe2\x4e\x1e\x07\x44\xd8\xa9\xd4\x0e\x0b\xe0\x0e\x87\x11\x3a\x58\xbc\x12\x05\x6f\xb8\x2e\xdf\x01\x3e\x37\xeb\x77\x5f\x50\x76\xe5\x13\xee\xd8\x98\x7d\x23\xd6\x28\x71\x48\x19\x94\x39\xdb\x58\x9b\x5c\x82\x9d\xcd\xae\xc2\x71\x07\x27\x3f\x12\x9b\xee\x0c\xd1\xd0\xab\x94\x5b\x0e\x90\xb9\x4a\x52\x6c\xad\x56\xda\x56\x1e\xf5\xa1\xe8\x56\x40\x87\x14\x17\x10\xa9\xe5\x8b\x9d\x47\x3e\xa7\x23\x86\x84\x1e\x0f\x72\x95\x8b\x04\xe4\xf0\xe8\x67\xe1\x9b\x1a\x54\xee\x76\xb5\xda\x36\xb8\xce\x23\xc2\x9e\x8e\xb6\x0b\x83\x80\xe1\x1d\xd8\xd1\x25\x39\x97\xb1\x7b\x7d\x19\x9b\xfc\x84\xf8\x6c\xc1\x6d\x1b\x3a\x4e\xb1\xf7\x73\xcd\xd4\x1d\x61\x01\xca\xf4\x75\xf1\xdb\xb1\xc5\x25\x63\x95\xe3\xd4\x66\x29\xb4\x49\x7a\x55\xf7\x29\x53\x9d\xe7\xc4\x44\xcf\x73\xdb\xd5\xa1\xc1\x3e\xba\x82\x63\x05\x6b\x17\xa7\x40\xde\xe9\xaa\x8c\xb6\x22\x4d\xd1\x8c\x55\x9b\x54\x57\xc9\xde\x4e\x9d\x8f\x43\x05\x2c\x8f\xa8\x1c\xee\xa7\x0d\xc7\xd6\xd6\x21\x6d\xc5\xc2\xf2\x11\x2b\x11\x49\x3b\x60\x33\xdc\xa2\x81\x61\x1c\x57\x39\x5f\x51\x32\xc5\x41\xad\x13\x02\xec\xd0\x30\x54\xf8\xde\x8d\x14\x7e\x29\x87\x73\x8c\xe8\x33\x1f\x22\x0b\x57\xbc\x3c\xc4\x20\x10\x61\x79\x15\x55\x9d\xea\xde\xb3\xa7\xb8\x4f\x68\x82\x29\x65\xa9\x4e\x04\x64\x5a\xda\xa5\x93\xb3\x70\xa1\x62\x0b\x5c\x6f\xa1\x71\xd2\xad\x45\x6b\x9d\xe2\x36\xe0\x73\xb3\x09\xda\x05\x99\x0f\xd6\x49\x8a\x75\xaf\x70\x57\xdd\xab\x36\x0e\xb6\x7a\xcd\xf8\x79\x60\x42\x17\xe4\x64\x57\x16\xe1\x7d\x58\xbd\x59\xa3\xfd\x18\xfd\x32\xcd\xba\x4e\x5b\x0b\xfb\x8a\xe9\xae\x0a\xde\x14\x66\xb5\xd3\x2c\x3d\x34\x75\xa0\x34\xa1\x9f\x2c\xee\xe5\xe8\x98\x1d\x53\x40\x78\x08\x17\xae\x5a\x9d\xd5\x62\xe8\x34\x23\x70\x31\x8c\x73\x60\x28\x6d\x5e\x87\x54\x79\xaf\x6d\x1d\xa0\x95\xc8\x0d\x43\xf4\x94\x85\xfa\x34\x3d\x29\xe5\xaa\x19\x13\x81\xd1\xf6\xb4\x9e\x84\xc6\x18\x17\x6f\x7d\xcd\x47\xa9\x11\x19\x74\xec\x8c\x65\xbf\x58\x08\x37\x94\xa8\x12\xdc\x0b\xb2\x86\x8c\x97\xab\x9c\x35\x62\x2b\x1d\x99\x2e\x14\x62\x35\x05\x08\x84\x9b\x9a\x6c\x14\x74\xb7\x2f\x0b\x1d\x76\x53\xc7\x79\x54\x4f\x03\x95\x78\x47\x16\x88\xe3\xaa\xb2\x4b\xaf\xba\xc6\x9d\x4c\x16\x05\x60\x8d\xe9\xa9\x90\x87\x14\x55\xac\x81\xf7\x87\x3d\xeb\xb4\x33\x68\x3d\xa8\xac\x3c\xaf\xc3\xf3\x7c\xd5\x27\xbf\x2d\x95\x46\x8d\xf8\xb6\xc3\xb5\x56\xc4\xd5\x6a\x7a\x5b\xac\x6e\xae\xe2\x5c\xbc\x6a\x6a\x2b\x2e\x49\x08\x95\xad\x64\x02\xbc\x5c\xb6\xe5\x78\xe8\x45\xc0\xd9\x0f\x65\x82\xe7\x89\x53\x25\x28\x2c\xab\x3f\x81\x3b\x79\x52\x79\x4d\x1d\x48\xb3\x57\x1f\x52\x97\xdb\x51\xcc\x92\x6e\xbb\xe5\x78\xb3\x99\xfc\x05\xe0\x43\x32\xde\x16\x23\xb6\xb6\x20\x40\x56\x3f\x41\x14\x75\xc6\x93\xea\xd3\x65\x70\x32\x17\x74\x57\x85\xd7\x35\x38\x62\x92\x45\x80\x86\x8b\xca\x2e\x6a\x62\xd0\x61\x5d\xfa\x56\xc0\x56\xd6\xb4\xc7\x86\x40\x39\x43\x55\xd1\x7a\x70\x5a\xee\xf7\x65\x0c\x57\x81\x44\xe6\xdc\xb8\xa1\x39\x5c\xa5\xb2\xb8\xb0\xe0\x46\xda\x04\xcd\x29\x18\x59\xc4\xc2\xfb\x64\xc4\x97\x90\x65\x17\xc0\x93\x58\x8d\x5e\xd1\xaa\xb3\x1d\x87\x0d\x85\x87\xcb\xf4\x1e\x1d\xb1\x03\xa6\xd5\x67\x9c\x9c\x8d\x6a\xd2\xbd\xac\x64\x84\xb9\xe3\x01\xb9\x1a\xd9\x9b\x94\x9d\xaf\x82\x33\xbd\x81\xa9\xc0\x3e\xae\xe2\x99\x65\xb2\x4b\x13\x88\x3e\xf9\xe9\xe6\x38\x09\x1d\xdc\x97\xc3\x2f\x82\xd8\x94\x78\x8b\xd1\x78\x23\x59\xdd\x59\x37\x6e\xef\xdc\x80\xcb\x6c\x7d\x8e\x62\xa5\x04\xab\xac\x8a\x96\xfd\xa4\x07\xae\xe7\xe1\x20\xf0\x11\x77\xbb\xc3\x5a\x6e\x2d\x39\x7c\x40\x0b\xa5\xd6\x20\xec\x34\xbd\x6a\x2a\x4a\x16\xb1\xe1\xc0\xd7\x04\xfc\x3e\xa1\x3c\x19\x53\x1c\x9c\xb2\x20\xb3\x32\x99\x7c\x72\x31\x72\xbb\x50\xeb\xe2\xa9\x91\xd4\xa7\xb1\x57\x2d\x7b\xd3\x48\xd1\xe0\xe7\x90\xab\xd6\x56\xc7\x24\x2c\x70\xf9\x0c\xa0\xe1\xc6\x19\xc8\x08\x59\x84\x25\xec\x48\xb8\xba\x11\xcd\x7d\x5a\x08\xbd\x0d\xe3\xed\x66\xbc\xb4\x7f\x44\xb6\x7a\xf5\x5d\x3e\xfc\xbb\x7f\xec\x4d\xb7\xdf\xee\x79\xe2\x5f\x78\xaf\xef\xfc\xc2\xa7\xbc\xe2\x2e\x7c\x7d\xe7\xcf\x7b\xe8\x2b\x3e\x93\xdc\xef\x9f\x3d\xea\x9d\xbf\xe5\x41\x37\x84\x7e\xf3\xfc\xd9\x7b\x8f\xa7\x3e\xf9\xfe\x8f\x7d\xda\xff\xfa\x82\xff\x60\x7e\xe9\xad\xed\xb7\xbf\xfc\x2f\xef\xfc\xda\x37\xbf\xf8\xd5\xf2\x81\xf7\xf8\xf8\xd7\xff\xc6\xef\xde\x10\x7a\x3b\x78\xe7\x27\xfc\xc0\x17\xdd\xe1\xad\xcb\x87\xda\x2f\xff\x9c\x4f\xf8\xe0\xf9\x90\x37\xfe\x97\xf7\xfe\xc0\xaf\xba\xff\x5f\xdc\xe9\xc9\xfe\xdb\x5e\xf6\xe2\x4f\x7f\xe5\x0d\xa1\xfa\xd9\xf7\x79\xfe\xcb\x1f\xfb\x45\x6f\xfc\xec\xcf\xf9\xb2\x5f\xf8\xe5\xdf\xfb\xba\xaf\xff\xd6\xb7\x7c\xd1\xb3\xee\xf8\xc1\xdb\x6f\xbf\xe8\xb1\xcf\x7b\xc8\x7f\x7b\xe8\x7f\x78\xee\x8d\xc4\xb0\xff\xf5\x65\x5f\x72\xcb\x1d\x6e\xff\x45\xff\x24\xff\xdd\x83\x9f\xf3\x96\xa7\xfa\xff\xf9\x51\x7f\xf6\xd0\x9f\x7b\xd6\x43\x7e\xf6\x79\x8f\xf9\x89\x77\xba\xe7\xb3\xee\xf9\xa4\x1b\x42\x5f\xf5\xf6\x07\xfe\xc1\x17\xfa\x97\x7c\xdf\x63\xbe\xe4\x39\x5f\xfd\x94\xbb\xbf\xe2\x57\x1f\xf1\xb2\x5b\x3e\x5e\xfd\xe7\x8f\x7b\xa7\x4f\x7f\xe0\x4f\xbc\xcf\x5d\x3f\xe5\xbf\xdf\x78\x80\x7b\x7f\x72\x29\x2f\xbd\xcf\x43\x6e\xf9\xe4\x97\x7c\xec\xa7\xbd\xf9\x9b\x9f\xf6\xfa\x37\xbf\xcb\x97\xcc\x6f\xe8\xe3\x27\xea\x1b\x7e\xfa\x3d\xbe\xf4\x0f\xee\xfc\xe9\x37\x84\x7e\xc5\xf7\x3d\xf6\x8d\x5f\xfa\xcd\xdf\x83\xef\x71\xcb\x5f\xbd\xd3\x52\x5f\x77\xcb\xa3\xd9\x63\x3e\xf5\x8f\x1f\x7e\x87\x9f\xf8\xb8\xf7\x7a\xb7\xf6\xd5\x8f\x40\x77\xfc\x07\xb2\xd5\xcd\x9e\xea\x05\x37\xc0\xba\x8a\x5d\xf8\x29\x8f\x73\xd9\xf3\x04\xad\x6c\xec\x64\x78\x72\x84\x48\x93\x24\xc9\x43\x36\xdf\xdb\x38\x67\xe6\xae\xe7\x61\x06\xbf\x8a\xe2\xd4\x75\x38\x26\xc3\x5e\x1f\x09\x09\xee\x4e\x91\xcc\x58\x0d\x3d\xf5\xe8\x87\x3e\x77\xc9\xc0\xad\xb8\x2c\x30\xc8\x12\x2b\x4d\x00\x55\x57\x5d\xe6\x33\xc3\xde\x31\x32\xac\xe5\x85\xd9\x9e\x54\xb5\xc3\x1e\x09\x15\xcf\xce\x23\xe3\x11\x41\xdd\x28\xc3\x2b\xd8\x11\xac\x30\x15\x70\x95\xdc\x07\x85\xd0\xe0\x50\x96\x1a\x10\xb5\x19\xdb\xd6\x56\x0a\x25\xb2\xcb\xf4\x69\x49\x9b\xb6\xd9\xd2\xdd\x04\x28\x37\x9d\x14\x4a\x51\x93\xcb\xd6\x6f\x75\x23\x65\x28\xd4\x47\x5b\x64\x16\xfe\x90\xba\xae\xd1\xe8\xb3\xf0\xce\x25\xa5\x5d\x59\xed\x4e\x6f\x4f\x64\x60\x32\xd9\x51\x7e\x95\x89\x19\xf5\x15\x6e\xd4\x84\xf5\xb4\x6d\x03\x8b\x23\xfb\x9a\x7b\x36\xcd\xef\xd8\x27\x40\xbd\x37\x7e\xc9\xb4\x30\x11\x56\xba\x68\xbf\x34\x75\xd9\x9a\x03\xb6\x71\x1a\xb0\x31\xe0\x69\x38\xd5\x04\x74\x6e\xde\x2c\x72\x05\x61\x46\xbf\xd7\xb1\x1b\x21\xf8\xad\xb5\x9c\x02\x55\x39\x5a\x83\xbe\x4a\x02\x25\x2c\x54\x05\x9a\x80\x9e\x0e\x96\xc5\x2a\x6d\x54\x1c\xf4\xa4\x5e\x4a\x94\x10\x8b\xee\x5c\xda\xe1\x86\x6e\xcb\xa2\x71\x22\x29\xab\xdb\x36\xde\x6e\x86\xd3\x57\xc8\x8b\x1d\xe5\x28\x1b\x91\x3e\x24\xe2\x46\x93\x15\xf5\x81\xbb\x37\x42\xb8\x7c\x96\x61\xe7\x5a\xce\x19\xc2\x2c\x15\xe5\xa5\x4c\xc4\xd5\x55\x66\x98\x44\x58\xb1\x70\xbb\xac\x48\x28\xe0\x0f\x97\x33\x4d\xd2\x30\x01\xcb\x3e\xf7\x90\x00\x29\xfb\x1e\xc0\x12\x71\xa1\x0b\xf6\x47\xe3\xcb\x55\xdb\x5e\xd8\x1f\xb1\xd4\x5d\x1f\x0b\xae\x53\x62\xba\x2d\x82\xc9\xc2\xab\x14\xa0\x0e\xe0\x4c\x82\xcb\x11\xf7\xd6\xb9\x0b\x61\x34\xc1\x6c\xbc\x8a\xce\x53\x4c\x6d\xa2\xfa\xb6\x69\x4e\xd7\x6d\x5f\x1c\xaf\x7e\xa7\x1d\x02\x55\x89\xf4\x75\x60\x70\x1c\x41\x0f\xc1\x28\x3b\xf9\x0c\x90\x2c\x57\xf5\x03\x68\xae\x1d\x6e\xce\xc1\x23\x8e\xea\xb3\xe5\xd5\x79\xd6\xb3\x32\xbd\x5a\x52\xa2\x69\x64\x37\x4c\xf1\x40\xb6\xd4\x38\x3f\x30\xbc\xea\x24\x34\x8b\x9d\x31\x61\xba\xb6\x4a\x04\xb9\x61\xce\xc7\x2c\x7d\x12\xb3\xaf\xa5\xca\xc4\x50\x46\xeb\x29\xa4\x37\x23\x85\xc0\x18\xae\x97\xd9\xe0\x28\x36\xb6\x09\x5c\xca\xc4\x44\xb0\x33\x05\x89\x5a\x97\x35\x84\x85\xa7\x34\xa4\x4a\xa8\xd3\x55\x57\x78\x1c\x85\x48\x76\x74\x1c\xae\xf2\xfc\xa4\x79\x0f\xcc\x5b\x86\xb2\x2f\xd4\x6f\xb6\x11\x9c\xf5\x11\x1a\xa3\x53\x6f\x1c\x85\x6a\x98\x59\x74\x31\x5b\x34\x8d\x0f\x59\xd4\xc2\x6e\x6b\x24\x7b\xb3\xcc\xef\x82\xcc\x27\xd6\xd5\x9d\xde\xe1\x5c\xb4\xa5\x60\xa7\xb9\x11\x09\x61\xf5\xaa\x8d\x02\x0f\x4f\xf5\xca\xd3\x50\x30\xd4\x14\x27\x99\x9e\x9f\xf3\x2a\xb2\x15\x9a\x5b\x63\x78\x22\x4a\x8b\x56\x95\xac\xa8\x6c\xcc\xe5\x23\x2f\x86\xab\x00\x14\xf0\x7b\x8a\x12\xc8\x23\x30\x40\x73\xae\xa5\x5f\xb5\x3b\x43\xcb\xb6\x1e\x35\xd2\x33\x72\xe8\x0d\xe5\xc7\xb2\x17\xb1\x34\xce\x64\x91\xda\xb2\xbd\xdb\xd1\x30\xa7\x5e\x84\x2e\x7a\x57\xae\x38\x76\x55\xbb\x0b\x73\xb6\xee\xa6\xae\x3b\x0a\x95\xe2\xa2\x8e\x2d\xf0\x94\xd7\x88\xe0\xec\x8a\x43\x5c\x7d\x26\xc3\x4e\x36\xd4\xca\xaa\xca\x71\xbf\x8a\xf6\x45\x18\x11\x05\x78\x34\xe4\x2a\xa9\x08\xf5\x1c\x9b\x6d\x6b\x44\x45\x44\x30\x76\x13\x10\xc8\xca\x76\xb8\x5b\x1a\xec\xd2\x3a\x40\xf4\x32\xb7\x73\x62\x30\x22\x69\x08\x91\xeb\xbe\x2b\x98\x8d\x0e\x75\x70\x83\xd9\x0a\xc2\x36\x98\x81\x98\x1e\x90\xd0\x82\x8d\xee\xb5\x59\x96\xaf\x22\x5b\xd1\xc0\x23\x87\x8a\x81\x05\x8d\xb0\xe7\x25\x6c\x0e\x6d\x56\x6b\x61\x45\xd7\xf5\x04\x26\x77\x29\x2d\xf4\x96\x40\x73\x7a\xd6\x75\x18\x57\xcd\x1f\x26\xde\xc2\xcc\xe3\x60\x94\x68\xb3\xa9\x4d\x97\x62\x19\xe6\x7e\x76\xbc\x31\x32\x43\x5c\x51\x0a\x56\x1e\x60\x87\xb7\x96\xc7\x5d\xff\x1f\xbc\x1c\x6f\x56\x4b\x5e\x90\xf9\x18\x11\x07\x63\x75\xea\x6d\x45\x39\x1b\x8f\x8e\x03\xe9\x61\x2a\x4b\x38\xcb\x7a\xec\x07\xa8\x27\x12\x9c\x6d\x2c\x68\x41\x2a\x88\xe3\xaa\x12\x63\xd0\x4c\xb1\x39\xc8\xc2\x8f\x26\xa0\x9b\x8c\xc2\xd8\x37\xc3\xf6\x10\xd3\xba\x32\x9e\x4f\xb3\xa0\x68\x4e\x2c\x58\x83\x66\x41\xec\xb8\x2a\x9d\x2e\xc1\x74\x5c\x63\x85\xb3\x01\xb2\xba\x94\x47\x07\x29\xce\xe4\x43\x3b\x43\xeb\x9e\xb2\x42\x32\xa9\x10\x9a\x23\x30\x11\x43\x51\x97\xd9\xa9\x11\x55\xc0\x19\xa4\x72\xdb\xba\x43\x7e\x2a\x58\xca\xd1\xc5\x54\x65\xe1\x58\xb7\x1a\xe1\x66\xe0\x89\x54\x02\x0e\x23\x70\x58\x7d\x99\xa8\x17\xd0\x39\x40\x42\x75\xeb\x23\x75\x75\x80\xa6\xc4\xc1\xd8\x32\x29\x17\x05\x27\x00\x56\x41\xc0\x59\x77\x29\xed\x4c\x4b\x81\xeb\x76\xd9\xb6\xcd\x88\x6b\x8d\x0b\x5a\xb7\x6d\x57\xe3\x3c\x48\xda\xe8\xbe\xca\x82\x85\x87\x44\xe4\xb1\x01\x75\xe6\xba\xd2\x32\xa4\x20\xa2\xc9\x14\xf3\x55\x43\xf2\x41\xc0\x0e\xcc\xe1\xa3\x5b\x43\x3f\xf5\x31\xfc\x0e\x47\x57\x64\x59\xf7\xcd\x1e\x1d\xc2\xc6\x51\xeb\x8d\x06\xda\x8c\x23\xdb\xc6\xc2\x55\xdc\x64\x1d\xb4\x3d\x5d\x16\x4c\xe6\x23\xb5\xea\xc5\x5c\x55\x65\x91\x22\x68\xa3\x08\xaa\x9b\x9a\x4e\x5c\xac\x2a\xd0\x86\x3c\x85\x28\xa3\xdc\x06\x7c\x6e\xd6\x9d\xba\x20\xf3\xa1\xde\xe4\x45\xc8\x00\xac\xda\xcf\xa2\x36\x8c\x41\x9f\x2b\xc2\xc1\xf4\xb0\x20\x4a\x18\x2e\x68\xdb\x53\x8b\xca\x2c\x6b\x1e\xdc\x5c\xf6\x52\x6d\xaa\xa8\xa1\xcc\x66\x97\x3d\x4a\x3e\xea\x76\xe8\xee\x06\xb7\xda\xee\xc2\xb9\xd2\xa7\x67\x28\x97\xe1\x6b\xec\x6a\xdb\x8a\x48\xfa\xaa\x1c\x4c\x0a\x7a\x34\x89\x32\x0f\xf4\xd8\x8b\xc5\xa4\x18\x0e\xd6\x05\xda\xf3\xcc\x6a\x05\xd9\x8f\xd0\x4f\xab\x52\x05\xc7\x8a\x3d\x0c\x12\x5c\x55\x00\x2e\x53\x98\x7c\xc6\x3a\x24\x72\x1b\x3f\x23\xd8\xd0\xb0\x20\x20\x60\x41\x3f\x97\x63\x09\x5b\x16\x36\x29\x7e\xb4\xa6\xb2\x87\x43\x84\xab\x06\xc2\x61\x10\xb8\x83\x3a\x52\xb5\x06\x3b\xe0\xc9\x26\x3d\x2f\x66\x91\x6b\x16\x98\x1d\x6e\x8a\xc3\x79\xa0\x78\x21\x55\x46\xd8\xa3\xb9\x4a\x72\x8d\xec\x73\x34\xda\xb8\xa3\xa7\x81\xc4\x2b\xb6\xa8\x18\xd7\x0a\x4e\x7a\xd6\xb3\x41\xa2\x7c\xe4\xa7\x26\xcc\xae\x91\x9d\x74\x20\xdd\xf9\x75\x0b\x76\xdb\x58\x85\x25\x27\x5e\x42\x52\xb8\x55\xcc\xf6\x2e\x4b\x81\xd9\xb1\x4d\x95\xa3\x88\x63\x3a\x17\x0e\xc0\x9b\x29\xd2\xd7\x70\x95\x21\x0f\xe9\xf3\xc8\x0c\x9a\x35\x1e\xcc\xf7\xc3\xe2\x34\x60\x2b\x7a\x8c\x61\xf1\x11\xcf\xda\x0e\x2b\x0d\x5f\x8f\xee\x90\x4d\x07\xc4\xfb\xff\x49\x52\xfe\x66\xfd\xee\x0b\xc0\xc7\xd0\x36\x99\xc3\xaa\xd8\x68\xd3\xee\xb7\x2a\x51\x81\x63\xad\x42\xd3\xdd\x65\x93\x09\x50\xb1\x00\x2f\x0f\x96\x78\x21\x39\xef\xf1\x2a\x8d\xdc\x34\x80\xb5\xb6\x85\x2c\x4f\x20\x86\x81\x3a\x78\x02\x87\x0f\x27\x90\xac\xcd\x16\x37\xb9\x4b\xbd\xac\x7c\xdb\x63\x2a\x0e\x36\x38\x2f\x6b\x7d\x1f\x35\x18\x8f\xb6\x63\xe9\x38\x52\x07\xc0\xc2\xc2\x28\x90\x79\x5f\x6b\xf5\xa3\x9a\xf5\xf0\x09\xcb\x02\x20\xce\x89\xc8\x76\x8c\xab\x32\x9f\xb5\xc9\xcd\xeb\x7c\x8e\x93\x4d\x2f\x37\x2c\x1c\xc0\x5a\x48\x6f\x5d\x96\x68\xd4\xad\x42\x84\x60\xf0\x4b\xac\x73\xf0\xad\x24\x1e\xaf\xba\xe5\xfb\xa8\xc2\x4b\xdd\xe8\x2c\x06\xd5\x41\x90\x3d\xe4\x88\xc4\x27\xc0\x53\x35\xc1\x20\x10\xfa\xbe\xae\x86\xa2\x63\x10\xd1\xb0\xa6\x57\xed\xb8\xf0\xb5\xf7\x83\xc9\x02\xcf\x9c\xd9\xa0\xab\x28\x3e\x85\x14\x91\x8b\x70\xc5\x4b\x58\x83\x13\x01\xb8\xb9\x8b\x13\x5b\xb0\x85\xba\xc6\xab\x14\x05\xd3\x9e\x44\x39\xf5\xe2\x1c\x17\xad\xc6\xaa\x92\xa8\xbd\xee\x68\x9c\xcd\xce\x80\x07\xeb\x0d\xb3\xb5\x32\x44\x63\x83\x63\x67\xfe\xb2\xe1\x67\x03\x61\x72\xb8\x1c\x99\xe9\xc2\xea\xb6\x30\x7d\x9a\xe5\xdc\x4c\xf3\xf3\xc8\xbe\xc0\x73\xb0\xac\xd9\x3a\xc4\x62\x8c\x20\x08\x46\xb5\xdf\x06\x7c\x6e\x36\x41\xbb\xc2\x48\xb6\xa2\xc5\x03\x9c\x87\xce\x2b\x83\x98\x48\x97\xac\x31\xbc\xaa\xae\xe9\x02\x23\x25\x5c\x61\xb6\xed\xfd\xa8\xe7\x16\x73\x98\x34\x5e\xc5\xd3\x87\xaa\x20\x77\x6e\xb1\x84\xa3\x46\x90\xfd\x01\x26\x6c\x53\x1f\xab\x27\x9b\x4e\x4c\xa1\x8a\x98\xe7\x31\xad\x62\x73\x24\x0f\x3a\x97\xab\x4e\x42\x08\x06\x6b\xa0\x79\x71\xba\x5a\xb7\x13\xbc\x76\x6c\x19\x06\xd8\x73\x46\x93\xe6\x69\x96\x93\xe7\x2d\x3b\x71\xb6\x72\xd6\x94\x2e\x13\x2d\xaf\x74\xdd\x1c\x1f\xbb\x0b\xf5\xe4\x30\xb6\x15\xef\xc2\x53\xee\x56\xb1\x45\xb2\x42\xd7\xf3\xb6\xb7\xb6\x51\x80\xf0\x86\x98\x2f\x7c\x5c\x95\xd8\x2b\x27\x79\x11\x13\x67\x05\xc7\xdc\x1d\x2b\xba\x81\xb3\x82\x18\xc9\x04\x03\x52\x3a\xd7\x28\x13\x40\xee\xc4\x1d\x12\x42\xd0\xa0\x57\xe5\x1b\x79\xc0\xc5\x58\xbd\xeb\xca\x59\xd2\x16\x56\xde\x86\x36\x27\x39\x26\x98\xe3\x3c\x0f\xa8\x2a\xea\x74\x07\x66\xdb\x25\x8d\x83\x9e\xe1\xaa\x86\xf3\x40\xdb\x84\xad\x77\x05\xa2\x31\x2e\x15\x25\x9a\x3e\xa1\x61\x05\x07\x51\x14\x5b\x40\x50\x2c\x6c\x43\xe6\x7c\x8e\x30\x83\xac\x97\x65\xc8\x04\x77\xe8\x0f\x1b\x63\x2e\xee\x80\x3c\x27\x7b\xb0\xae\x97\xe4\xec\x12\xf6\xb8\x18\x38\xbb\x97\xbb\xa2\xe2\xd8\xf1\x00\x9e\x74\x7d\xdb\x1d\x97\x9b\xcd\xe4\x2f\x00\x9f\x70\x34\x38\xd8\xd6\x34\x6f\x58\x38\xa1\x59\x4c\x7b\x8a\x9b\xd7\x00\xc5\x96\xeb\xc9\x7c\x5f\x57\xcb\xda\xb2\x26\x6b\xfb\xee\x4a\xb8\xea\x43\xdb\x2a\x2d\x41\x39\xb3\x46\x85\x79\xf2\x7d\xcd\x72\x75\x3b\x27\x78\xb1\xa3\x62\x25\xcf\xd5\xa9\xa8\x86\x62\x91\xc9\xd1\x25\x2a\x57\x95\x18\x54\x64\x4e\x9d\x17\xa8\xb9\x45\x53\xbe\x99\x43\x05\x36\xbb\xbd\x15\x14\x73\xf0\x1b\x68\xc9\x65\x00\x56\x3c\xd1\x7a\xeb\xef\x30\x5e\x06\xc8\x66\x3d\x56\x35\xcd\x2a\xb6\x6d\x9b\x4b\x4d\x2d\x83\x26\xa0\x76\xb9\x2b\x0f\xfb\xca\x71\x38\x02\xd0\xd2\x17\x55\x49\x35\xbd\x8f\xe3\xaa\x9e\xcf\xa6\xd4\x52\x6b\xea\x23\x4c\x18\xca\xc2\x0b\xf5\x43\xd2\x6e\xb6\x8d\xac\x65\x95\xaa\x37\xb8\xc0\x3d\x9d\xb0\x76\x4c\xf2\x42\xd9\x65\xba\x26\xb1\x4c\x62\x59\xc2\x71\xd9\xc5\x80\xa0\x52\x70\x4e\xdd\x76\xb0\x91\xdd\x8c\xf5\x80\x9b\x29\x7a\x59\xf8\x9e\x72\xd0\x4a\x40\xec\xd4\x55\x03\x6e\x04\x80\x67\x53\xa0\x4d\xe9\xa5\x37\xc3\xe5\xe2\x32\x9f\xf0\xd0\x90\x12\x20\x31\xb1\x8a\xa7\x05\x96\x79\xa4\x6a\x66\xa9\x13\x5c\x25\x2d\x40\x5a\x4a\x96\x09\xb3\x50\x6e\x60\x8f\x9b\xb3\x6e\x68\x01\x37\xe8\x62\xa4\x66\x13\xc8\x78\xba\x40\x3c\xcc\xae\x40\xf4\x2b\xf4\xdb\x0d\xdf\xce\x3b\xc8\x56\x37\x53\xf6\xfa\x47\x64\xab\xd7\x7c\xc9\x3d\xff\xfc\x1b\xfe\xe6\x2b\x9f\xf9\x35\x2f\x7b\xde\xf9\xfa\xcf\xfb\xa8\xc7\x3e\xe0\x5f\x7d\xef\x1f\x7e\xd4\xf3\x1f\xf3\xa2\x7b\x7d\xfd\x5f\xbe\xd3\x13\xe1\x3f\x79\xc0\x0d\xa1\x8f\x7b\xf1\xdf\xd4\xfb\xdf\xef\xb9\xdf\xf7\xc1\xaf\xf9\x97\xec\x0f\x3f\xe5\xed\x77\xa6\xef\xfa\xe8\xb7\xfe\xd2\xdd\x7e\xec\x57\xed\xfd\xdf\xe7\xb3\x1f\xf2\xa2\xdf\x79\xc2\x0d\xa1\x8f\x78\x3b\x31\xef\xf5\x4b\x3f\x62\x7f\xed\xa1\x1f\xfe\xb6\xef\x7c\xc1\xd3\x1f\x74\xbf\x5f\xb9\xdf\xcf\x7f\xfb\x7f\xc0\x9f\xf6\x59\x5f\xf4\x96\xa7\xf0\xdb\x7d\xe5\xef\xdc\x48\x8b\x7a\xce\x2f\x93\x2f\xf8\x6e\xf2\x4f\xbe\xfd\xc1\x9f\xfb\x5b\xcf\xfe\x60\xf6\xf8\x9f\xff\xbe\xf2\xc8\x0f\x61\x1f\xf0\x05\x8f\xfd\xd3\xbb\xfe\xcd\x23\x3e\x4e\x7f\xef\x0d\xa1\xe7\xdd\xef\xf8\xa2\xdf\xff\x84\x27\x7c\xc6\xdb\x6e\xff\xc0\xcf\x7e\x97\x5f\x7a\x7b\x78\xdf\xb7\xf9\x57\x3f\xf0\xdd\xff\xea\xfe\xbf\xf2\x9a\x3f\xfa\x88\xfb\xbe\xe9\x25\x77\xb8\x21\xf4\x6b\x7f\xea\x2d\x3f\xfb\x99\xbf\xff\xca\x37\xdd\xe9\xd9\x4f\xf9\x8f\xaf\xfd\xdc\xcf\x7d\xe1\x2f\xbc\xff\xdf\xbe\xe9\xc9\x7f\xf6\xd4\x7f\xfd\x84\x6f\xbb\xc7\x0b\xbf\xf1\xed\xbf\xf3\x57\x37\x84\xfe\xe9\xaf\xde\x37\xdc\xfb\xeb\x3f\xea\xed\xdf\xf9\x79\xdf\xf1\x95\xdf\xff\x89\xef\xfb\x19\x8f\x7e\x54\xf9\xe6\x0f\x81\x6f\xb8\xe5\xb3\xde\xa6\xde\xf7\xe9\x2f\xf9\xa7\x1f\x79\x43\xe8\xef\x7d\xd9\x83\x1e\xfe\x6f\xde\xfb\xf3\x3f\xe4\x2e\xf6\x65\xe8\x21\x77\xf9\xe8\xd7\xfd\xdb\x1f\xf9\xa4\xc7\xbd\x33\x7c\x95\x78\xd3\x7b\xd6\x2f\xfb\xaf\x7f\xfe\x91\x5f\xf7\x0f\x64\xab\x9b\x3d\xd5\x2b\xf4\x1d\xa0\x63\xe3\x14\x28\x2f\xc3\x18\x3c\xa1\x44\xa5\xaf\x19\x15\xe4\x91\x49\x32\x0a\x16\xdd\x2e\x22\x81\x59\x58\xd8\xa2\x8a\x6a\xb9\x0a\x63\x0c\x19\x74\x4f\x95\x31\x6d\x8c\x3b\xb9\x5f\xb1\xdd\xce\xd6\x0a\x30\x98\x0c\xac\x36\x2b\x8d\x72\xb6\x87\xe0\x36\xdc\xb3\x12\x81\x5c\x35\x4a\xc2\xcd\xef\xc9\x62\x6e\xa3\xd3\xf6\xd8\x82\x19\xd8\xb9\x0c\xed\x02\x6c\xd0\x18\x2a\x96\xd2\xbe\x82\xd5\xb2\x85\x57\xe9\x96\x82\xc6\x55\x75\x1e\xc3\xcb\x71\x26\x10\x7c\x5f\x89\x6c\x04\xc0\x5d\xf9\x79\x80\xbd\xe6\xbc\x19\x1f\xc9\xd1\x81\xe3\x22\x87\x2c\x65\x55\xcb\xc2\x29\xbb\x8a\x65\x80\xd6\xb1\xee\x3b\x42\x0c\xd2\xd2\x81\x5a\x3c\xa8\xcc\xc7\x79\x88\x24\x1b\xef\x13\x6f\x67\x5c\x6d\xee\x89\x1b\x0d\x85\xdd\xc8\x71\x19\xcb\x60\x87\xc3\x2d\x78\x67\x6a\xdf\x18\x32\xa6\x9c\xeb\xd4\xc8\x68\xe3\xb7\xce\x97\xb0\x15\xc8\x6d\xe1\x0e\xe6\xc2\x8a\x60\x0b\x74\x7a\x5c\x95\x08\x3b\x29\xa0\xb5\x73\xb5\x65\x59\xf7\xe8\x2b\x31\x63\xb3\xd6\xe7\xc8\x7c\x8b\xf5\xe4\x0b\x8b\x87\x88\x8b\x82\x6a\x94\xea\xd8\x62\xd4\x55\xad\xe2\xb6\x87\x85\x2d\x5d\x9f\x44\x51\xb0\x76\x48\xe6\x14\x9d\x2c\xd5\xa0\xdd\x01\x50\xa0\x3d\xd2\x1c\xa7\x75\x38\x14\x68\xb3\xe8\xe4\x38\x6e\x93\x7e\xde\x0c\xa7\x2f\x00\x1f\xba\xaa\x33\x05\x4a\xa1\x3e\xf7\xae\x13\xa9\x20\x87\x5e\xb6\x75\x92\x73\x45\xbb\xca\x59\xa0\xb3\x84\x23\xc1\x35\xc6\xda\x76\x88\xe2\x55\xeb\xc4\x36\xc9\x65\xd1\x2c\x6e\xb4\xb9\xc3\x68\xd3\xda\xb6\xa9\xde\x3c\x20\x91\x82\x63\xc3\xb3\x40\x4a\xf1\x52\xfa\x24\x69\x68\x24\x8f\xcb\x98\xd3\x22\x95\x20\x7a\x55\x72\x90\xed\x18\xcb\x5e\x45\x6a\xdc\x13\x96\xb6\x30\xdd\x8e\x4f\xb4\x69\x67\xa1\x65\x61\xd0\x7a\xc0\xb1\x9b\xab\x96\x6a\xa8\x5b\x49\xb2\x44\x8a\x42\xb1\x94\x5b\x41\xa0\x34\x36\x6d\x44\x36\x1f\xc7\xb1\x6c\x2b\x03\xf8\x50\x8e\x08\x50\x6c\xa2\x76\x26\x9e\xaf\x12\xf9\x06\x40\x79\x9f\x87\xda\x37\x33\x20\x2a\xc7\x29\xda\xa2\xc7\x49\x5d\xd1\x23\xe9\x95\xef\x6e\xf3\x81\x3a\x0f\x3b\x71\xac\x6b\x9a\xe7\x55\x2a\x4e\x7e\xf1\x14\x1d\xc3\x0d\xbf\x77\xbd\xd6\xcc\x03\xc6\x0e\x25\x63\x61\x9e\x67\x74\x6d\xda\x05\x9c\xa7\x39\xb5\x5e\x9d\xcc\xe3\x60\x97\xe9\xfa\xbb\xe4\x61\xf3\x70\x83\x98\x35\xde\x1a\xdf\x76\x2d\x4a\xd3\x6c\x81\x52\x75\x39\xc9\xbe\x53\xa0\xb3\x3d\x74\xb3\x4d\xec\x7a\x73\xea\xaa\xd2\x6d\xce\xb6\x6a\x3b\x61\x85\x76\x1f\x22\xc3\xcc\xf7\x22\xb8\x3f\x94\x61\x6b\xe2\x85\xd0\x24\x99\x91\x47\x34\x03\xa0\x61\x0b\x41\x37\x14\x07\xef\x00\x9f\x9b\x65\x7e\x57\xac\x58\xc7\x20\xa5\x58\x6a\x98\x67\x5d\x16\x4d\x52\xa0\x22\x29\x58\xd2\x70\xe7\x36\x94\x75\x98\x9d\x7b\xa2\x19\x89\x71\xec\x32\x9c\xec\xb8\x8a\xef\xb0\x54\xe0\x38\x63\x70\x65\x13\x13\x90\x69\x9c\x65\x46\x77\x68\xed\x28\x91\xb4\xa5\x04\x85\x04\x9a\xd1\x50\xd0\x99\x43\xe5\xf1\xb2\xf9\xc3\x32\x2c\x02\x29\x31\x74\x9c\x61\x88\x50\x36\x4f\xc1\x74\x9b\x6c\x9c\x32\x2b\xb8\x1e\xb4\xe8\xb8\x91\xb2\xf8\x9c\xdd\x28\xae\x5e\xd6\xda\xc9\xfa\xd0\x44\xc8\x74\x30\x79\x02\x1a\xc6\x51\xf9\xea\x83\x81\x62\xf5\x48\xb4\x82\xb2\x62\xa0\x9e\x3d\x2c\x80\xa1\xc5\x59\x37\xc1\x55\xae\x0b\x5b\x58\x92\x15\xbd\x02\xa3\xbb\xaa\x6b\xaf\xf9\x44\x55\xc6\x81\xd3\xb9\x0d\xe2\xce\x7d\x37\xea\x24\x3c\x9d\xbb\x61\x70\x22\xc8\xc6\x45\xcb\x57\x14\xcd\xb0\x09\x38\x83\x60\x63\x4c\x13\x05\xc6\x74\xec\x72\x28\xe8\xf3\x31\x74\x40\x6e\xab\xce\xf0\x45\x71\x43\x4d\x3a\x17\xa1\x2f\x9b\x84\x00\x1d\xa1\x4f\x2c\xc8\x96\x40\xe7\x8b\xc6\x71\x89\x9e\x87\xcd\x7b\x93\x76\x1c\x73\x26\xc9\x1e\xcc\x47\xbb\xaf\x89\x75\x39\x9c\xba\xcc\x75\x61\x6c\x4b\xdc\x01\x03\xd5\x11\x5f\x01\x15\x41\x4b\xb5\x06\xa0\x21\xd4\x63\xd1\x74\x63\x1e\x88\xa9\x96\xbf\xb7\x05\x2d\xfb\xce\x97\xdb\xf2\x1d\x6e\x56\x4b\x5e\x30\x72\x3c\x33\x26\xee\x00\x6e\xa9\x2a\x1e\x92\x0a\x16\x37\xb9\x09\xb2\xef\x04\x9f\x36\x0d\xbd\x67\x4a\x39\x3d\x09\x69\x9c\x85\x53\x55\x70\x5c\x65\x5c\x3f\x8a\x23\x50\x34\xbe\x62\xa5\x89\xc6\xbc\x11\x52\xfc\xd9\xba\x51\xcd\x6d\x71\xf3\xe1\xdc\x36\x79\xc4\xe3\xd6\xea\x82\x9b\xb3\x59\x7d\x55\xe6\x03\x35\xb2\xcb\x8c\x72\x9b\xa5\x99\x14\x80\x47\x95\x4e\x93\x7b\x47\xd2\xca\x34\xb5\xed\x4d\xd0\x60\x4f\x49\x4a\x49\xaa\xd7\x7a\x59\x93\x09\x4c\x14\xc5\xde\x54\x46\xcd\xd9\x91\xa0\xcf\xd2\x91\xb9\x8c\x64\x4b\x9c\xa1\xd9\x1e\x6d\x0c\x27\xc2\x6c\x85\x47\x0f\x38\xad\xec\x2a\x13\xb3\x6d\xa9\xec\x1c\xc8\x43\xa5\x01\x96\xfb\xec\x9d\x14\x91\xb7\x54\x55\x88\xa2\x2d\xaa\xda\x4e\x1b\x50\x32\x30\xe1\x57\x94\x0a\xbc\x0c\x06\x15\x2e\x13\x8f\xd5\x1a\x9b\x86\x38\x21\x04\x96\xf8\x3d\x0e\xa2\xeb\x3a\xac\x6a\x11\x90\x2a\xb4\x0c\xc2\xe9\x3d\x2b\xb2\xca\x8d\x5f\xd5\x78\x4b\xa8\x4e\xcb\xd7\xde\x97\x96\x1c\x23\xc2\x19\x8e\x86\x72\xcb\xde\xd1\x11\xf0\xa1\x69\xc8\x12\x0b\x66\x42\x89\xc9\xa9\x7d\xc7\xfa\xaa\x6f\xc7\x52\xdb\x82\x6b\x0e\xca\x1d\xae\x82\xd2\x96\x37\xdd\xc0\x61\x42\x21\x25\x36\xb2\x93\x85\x29\xbe\x1e\x4d\x2d\x4b\xbd\x35\xd9\xf0\x40\xde\x06\x7c\x6e\xd6\x9d\xba\x20\xf3\x49\x9b\x46\x26\xb2\x78\x22\x4b\xc6\xd8\xce\xe9\xc0\x42\x83\x8b\xc9\x3a\x93\x89\x9c\xa7\x13\xbb\x1e\x0b\x3c\x6d\xdb\x06\xb6\xb4\xd0\xab\x84\xdb\x24\x6c\x98\x00\x49\xb7\x69\x29\xf5\x56\x29\x06\x0e\x4c\x03\x36\x01\xf8\xc6\x17\x5c\x1d\xdf\xc2\xa4\xb3\x45\x45\xe6\xb6\xed\x66\x5e\x25\xe9\x92\xa3\x5d\x37\x6b\x46\xf5\x0a\x85\xce\xb0\x53\x3d\x6d\x9e\xe7\x72\x34\x24\x9d\xa6\xc8\xf0\xa5\xd0\x2c\xc0\x26\x96\xa1\x30\x5e\xaf\x32\x31\x23\x61\xd6\x43\xfa\x96\x7c\x2e\xe7\x70\xa0\x7a\x82\xbb\x64\x94\x8b\xb8\xf0\x3d\xa8\x24\xc7\xb6\x26\xc6\xb6\x1c\x63\x11\xf4\x4c\xf9\x32\x9b\xdf\x75\xcb\x82\xcd\x89\x1a\xdc\xb4\x56\xd3\xeb\xbd\x15\x28\xe4\x7e\x6e\x2d\xd2\x43\x14\x6b\x2c\xab\x01\x32\xbb\x5b\xd6\x70\xf1\xfc\x32\x40\x26\x25\x71\x53\xdc\xb9\x30\x7a\x92\x65\x4a\x27\x56\x83\x98\x73\xd5\xb7\xba\x31\x0a\x6d\x31\x22\x36\x4b\xe2\xaa\xc8\x6a\x0e\x9c\xc6\x55\x26\x66\x2d\x8b\x85\xa3\x14\x64\x74\xeb\x61\x52\x23\x21\xa8\x80\x37\xba\xee\x19\x73\x33\xeb\x2e\xb2\x6d\x26\xec\x59\x78\x9f\x0f\x9d\xd7\xab\x24\x29\x09\xdb\xdc\x59\xe3\xda\x61\x71\xab\x39\x61\x59\xcf\xea\x39\xed\x47\x32\x58\x96\x04\x17\x15\x48\xd9\x5b\x06\x32\xef\x98\xeb\x43\xf8\x1b\xe6\x54\xef\x00\x9f\x9b\xf5\xbb\x2f\xc8\x7c\xe0\x29\xa8\xd0\xb6\x81\xcc\x16\x90\xa7\xf3\xb7\x66\xf1\xcd\xd2\x63\x20\x3b\x11\x62\x89\xcf\x19\xbc\x06\x51\x76\x09\x68\x41\x4c\x5d\x35\xb3\x45\xac\x73\xe6\x45\x5b\xd6\xc8\x82\x1f\xe4\xa0\x5b\xf3\x3d\x33\xb6\xb3\x7d\xba\x4c\x55\x01\x1b\x43\xcc\x1e\x7b\x61\x78\xd3\x06\x8d\xcb\x84\x54\x40\x2a\x80\x4f\x9b\xe5\x99\x28\xc8\xb9\x6f\xe7\x39\xd0\xa6\x4e\x8d\x24\x18\x59\x93\x69\x47\xdf\x95\xb0\x19\x1d\x4e\xf3\x55\x90\xab\xe8\x3c\x9e\xba\x93\x21\xba\xda\x13\xdb\x13\x1a\x20\x58\xc5\x5b\xb3\x4c\x32\xdf\x4e\x4a\xd4\x64\xb4\xe5\xce\x84\x19\x4a\x8e\x63\xe6\x1d\x5c\xf5\x4c\x28\x26\x41\x37\x33\xe6\x5e\xd2\x2e\x77\xb1\x91\x1c\x71\x04\x4b\xad\x18\x2e\xac\x4c\x63\xeb\x84\x07\x07\xf8\x3c\xca\x6a\x01\xa2\x57\x6d\x3c\x13\x60\x69\xaa\x64\x10\xb7\xe8\x81\xb7\x74\xce\xf3\x04\x2b\xd4\x68\xe9\x7b\xd3\x06\xa0\xba\xcf\xc2\x6a\x57\xda\x09\x58\xc3\xa1\xf0\xbc\x4a\x5c\xa6\x86\x6d\x35\x68\x5b\xa0\x57\xb6\xc5\x35\xea\x5d\x83\x60\xcd\x1c\xe2\xd0\x66\x27\xac\xa2\x3e\x55\xaf\xac\x69\xb6\x02\x7c\x9e\x47\xb8\x4a\x77\xac\x3a\x32\x66\x27\xce\xfb\x1d\x58\xc2\x39\xe6\xdb\x9e\x3a\x17\x9b\x22\x6d\x1f\xd9\x62\xec\x36\xbb\xa5\xac\x8d\x3c\x81\xb0\x89\xb3\xdb\x8a\xcb\xdc\x6c\x82\x76\x85\xb2\x15\x2a\x6c\xd9\x17\x08\x36\x8f\x34\xd9\xbd\xaf\x54\x79\x42\x16\x04\xb1\xf3\x6e\xdd\xff\xfe\x0b\x0c\x7c\x3b\xf7\xd2\xdb\x8e\x36\x7a\x99\x95\x02\x15\x84\x20\x2d\x0b\x30\xd1\xb4\x6d\xa9\x10\x78\xbe\xe1\xe2\x04\x33\x40\x60\xac\x27\xf3\x31\x6c\x80\x26\x06\xd8\x1e\x60\x40\x57\xc9\xea\xd1\x18\x1d\x66\xeb\x6e\x56\x68\xcd\xaa\x68\x0d\x75\xf5\x2a\xd3\xe9\x89\xd8\xcc\x81\x7c\xd9\x7a\x2c\xa1\xac\xae\xa5\x99\xa0\xec\xea\xaa\x89\x3a\x95\xfb\xb9\x2e\xce\x49\x66\x77\x28\xdb\x1e\x2b\xa7\x5e\x53\x7a\x76\xb3\x46\x9c\x0e\x81\x22\xd1\x70\x51\xde\x21\x18\x63\x10\x84\xf0\xab\x5e\xef\xc6\x45\x3b\x2a\x24\x4b\x10\x20\xf4\xdc\x16\xb7\x87\x49\x86\x34\x4b\xed\xcb\xda\x82\xa4\x74\x77\x5e\x4e\xa4\x63\x0e\xa4\xe9\x0e\xae\x62\x35\x32\x4a\x37\xef\x2c\xf4\x27\x83\x85\x69\xd1\x97\xa1\xb6\x16\xac\x10\xd5\xf1\x83\x35\x82\x4d\x17\xa9\xe5\x6a\xf7\xde\xc6\x06\x16\x7e\x95\x9a\x79\xde\x4b\xd9\xb7\x98\x7c\x5a\xab\xaf\xa2\xf3\xfd\x28\xa3\x38\x2e\x59\x3f\x80\x3e\xcf\x9a\x57\x00\xa7\x8c\xb2\xa4\xd4\xf3\xca\x02\xbf\xea\x6a\xd8\xc1\x76\x94\x50\x40\xe1\x70\x45\x3e\xf8\x12\xa0\x5f\xbb\x99\x4a\xd9\xe9\x5d\xd8\xe3\xb9\x34\xeb\xf4\xe6\x44\x5d\x18\xe9\x54\xdc\xf0\x9e\xbc\x03\x7c\x6e\x36\x93\xbf\x62\xc7\x65\x04\x86\x31\x59\x7c\xef\xc4\xe5\x6d\x85\x7b\x4a\xf4\xe0\x1b\xcd\x40\x06\x4f\x94\xf1\xd1\x08\xb7\x21\x68\xf0\xb9\x1e\xa7\x69\x97\x35\x9c\x47\xa1\xa6\x26\x8f\x1a\xe7\xf0\x3c\x83\x4a\x03\x32\xba\x81\x40\xdd\x69\xf7\x79\xa6\x45\xb3\x11\xb6\x24\xca\x54\x43\x0d\x5b\xd7\xcb\x88\xcc\xc4\x9f\x14\x8b\x68\x07\x1e\x6c\x44\xda\xfc\xb6\x58\x44\x56\xa3\x11\xc4\x9c\x6d\x6c\x9e\x30\x87\x83\x61\x7f\x32\x9c\x77\x21\xc6\x79\x95\x8b\x75\x51\x43\x6c\xd1\xbb\xa2\xe3\x41\x93\xdb\x1c\xb2\xa4\x77\x98\x37\x81\x3d\xe7\xaa\x53\xa3\x4a\x9f\x6a\x2f\x0c\x62\x87\x50\x6a\xf4\xaa\xbc\x34\x18\xaf\x7c\x9f\x13\x4b\xc4\xb1\xb4\x26\x6d\x9b\x57\xbb\x98\x43\xcf\x2a\x2a\xa3\xc0\x41\x49\x34\x3d\x8e\xb5\x00\x6e\x0c\x28\xcb\x55\x13\xc0\xc0\x3d\x58\xcb\x41\xf3\xcc\xa4\x6a\x0e\x38\x92\x23\x35\x92\xf7\xcd\xf0\xc5\x60\xc7\xbd\x5d\x2c\x46\x28\xc3\x94\x55\x08\x73\x5e\xb6\xf7\x53\x4f\xa6\x49\x19\xc5\x6e\xb2\x1d\x06\x86\x41\x6b\x12\xfb\xe9\x26\xdd\x2d\x73\x07\xe0\x87\x85\xa4\x1b\x6f\x73\x92\x39\x2e\x41\x2c\x57\x65\x83\x2b\x0f\x1c\x84\x6d\x99\x87\x16\x6e\x21\xa9\xa0\x4d\x2d\x70\x5b\xf9\x68\xa6\x6f\x56\xad\xc5\x27\x18\x99\x2b\xa7\xeb\x7b\x5b\x77\x7b\x83\x9d\xd5\x3b\xc8\x56\x37\xf3\x46\xfc\x47\x64\xab\x97\x3e\xe4\x69\x8f\x7e\xe9\xbd\xf6\x8f\x7d\xf0\x43\xdf\xfc\x1e\xdf\xf3\xb4\xdf\x78\x10\x7b\xcb\xdf\xbe\xf0\x43\xbe\xe6\xbd\x9f\xf7\x94\x0f\x7b\xd5\x5f\xdf\xee\x99\x5f\x7d\x23\x83\xea\xb7\xef\xf5\xf0\x97\x7d\xfe\xbb\x7f\xdb\xb3\xd2\x4f\x6d\x4f\xfd\xe2\xa7\x9a\x1f\xfd\xa0\x87\x3e\xe2\xd3\xdf\xfb\x7d\x7e\xf8\x77\xfe\xee\x8b\x9f\x7f\xd7\x3f\xbd\xd7\xb7\x3e\xfc\x86\xd0\xe7\x3d\x70\xbc\xf4\xcf\x3e\xfb\x49\x4f\x94\x2f\xfa\xf1\x4f\x79\xf5\x9f\x3f\xf3\xdf\xbd\xef\xf3\x5e\x0f\xde\xf0\x17\x6f\xf8\xd3\xd7\x3c\x1d\xbc\xf8\x53\xf4\x03\xef\x75\x43\xe8\x17\xbf\xf3\x3d\xdf\xfa\xc3\xfa\x23\x1f\xf8\xbb\xff\xea\x19\xbf\xfe\xfe\x8f\x7e\xd9\x8b\xef\xf9\xd8\x97\xbe\xf3\xaf\x3d\xe7\xe7\xbf\x7e\xcf\xf2\xe1\x1f\x7a\xcb\x1d\x3f\xea\x86\xd0\xf7\xff\xfe\x7b\xfd\xe8\xd3\x7e\xe6\xed\x9f\xff\xfc\xd7\x3d\xe9\x57\x1e\x7d\xe7\xc7\xfd\xc4\xa7\xfc\xf9\xed\x7f\xf1\x63\xdf\x72\xf7\xef\x7f\x46\xfd\x82\xd7\xdd\xf2\x2e\xef\xf4\x55\x37\x84\x3e\xea\x8b\xfe\xe5\x77\xde\x0f\xde\xeb\x33\xbf\xe4\x61\xdf\xf1\x80\x27\xde\xfb\x4b\x1f\x67\xee\xf4\xcc\x1f\xc0\x6f\xbc\xd7\xc3\x1e\xfa\xc2\x27\xbe\xeb\x7f\x79\xc2\xb7\xd0\x1b\x42\xff\xf5\x23\x3f\xe0\xc9\x6f\xfd\xf5\xc7\xff\x7f\xff\xfa\xfd\x5e\xf4\xb8\xa7\x3e\x40\xfd\xfe\xbd\xea\xe3\xbf\xf0\x9b\xde\xed\x01\xf7\x7d\xd4\x3b\x7d\x6a\x7e\xdb\x6b\xff\xea\x31\x37\x84\x92\x6f\xfd\xb6\x5f\x7e\xf5\x8f\x3c\xed\x78\xc2\x53\x9f\xfa\x35\x2f\x7e\x54\xff\xc5\x0f\xf9\xca\x7f\x71\xe7\x6f\xfc\x13\xf4\xf8\xb7\xcd\x37\x3f\xe3\x11\xec\x4f\x9e\xf8\x0f\x64\xab\x9b\x3d\xd5\x0b\x6e\x00\xb0\x0c\xcd\xc0\xad\xd9\xd5\x19\x26\x45\x70\x57\x79\x83\x27\x58\x3a\x96\x87\x3a\x41\xa1\x7b\xa0\x27\xde\x70\xb0\xc2\x6e\x07\xb3\xfb\x55\x8a\x82\x54\x13\xc5\x38\x48\xb9\xd1\x2c\xbd\xe4\x55\xda\x25\x1e\x1b\xc1\x8b\xe8\x32\x4b\x83\x19\x3f\x97\xcd\x6d\x4e\x89\xd8\x67\xc2\x78\x4b\x57\x25\x7d\x83\xc8\xc1\x14\x09\x0e\x52\x94\x37\x69\x63\xed\xc8\x2e\x67\x82\x09\x96\x73\x1e\xb8\x35\x89\xcd\x3a\xd6\x63\x00\x2b\xce\x15\xe5\x74\x55\x0b\x50\xd4\xd5\xef\xd3\x40\x97\xb1\x0c\xc3\x0e\x4f\x79\x70\x7d\xd1\x33\x8f\x41\x54\x23\x1e\x9d\x0a\x20\xbd\x0a\x66\xce\xba\xed\x7d\xbb\x0c\x63\xf6\x3c\xec\x0e\x02\x17\x27\x24\xec\x10\x36\xaa\xcc\xc4\xde\x44\xa5\x9d\xf7\x59\xcf\xec\x47\x6d\x9e\x98\x6c\x62\x98\xd9\x4d\x38\xae\xe2\x3b\x6c\xda\x6f\x5c\x6d\x43\x9f\xca\x00\x8c\x34\xe6\xce\x22\x63\xf9\x2a\xb0\x5a\xd7\x1e\x5c\x6d\xcd\xbb\x35\x89\xf3\xa0\xb0\x2a\x7d\x2e\x57\xe9\x80\xd0\x3d\x23\x6e\xcf\x20\xbb\xd5\x47\x58\xb0\x48\xeb\xe4\xc2\x61\xb3\x99\x01\xa7\xd2\xe7\xce\x6d\xb3\x6e\x09\xab\x1e\xeb\xa1\x22\x1b\x57\x11\xc4\xe3\xa2\x8d\x20\x7c\x26\x54\xcd\x01\xa2\xcf\x2c\x93\x58\x00\x4d\x09\x4c\xdd\x6b\xed\x0b\x33\x29\x59\x4a\x65\x63\xb9\xe4\x22\x27\xbd\x4d\xfa\x79\x33\x9c\xbe\x62\xcb\x71\xa5\x27\x2b\x92\x89\x52\x9c\x00\x22\x09\x09\xb2\x74\x63\x0e\x3f\x16\x9a\x42\x03\xf5\x84\x7b\xed\xab\x05\x65\xba\x12\x46\xd0\x57\xd5\xbe\x11\x8a\x50\x56\x20\xa9\xdb\x4d\x49\x2a\xf4\x90\xf1\x58\x93\xd1\x45\x1a\x3a\x51\x31\x01\xd7\x71\x10\x51\xcf\x65\x86\xad\x82\x1a\x2f\xe2\xcd\x11\x9f\x81\x5b\x06\xc3\x88\x6c\xeb\x8c\xc7\x1e\xe9\xde\x6c\xf2\x5a\xa0\x6d\xb0\x80\xbd\xd5\xc5\x08\xca\xb0\x67\x78\x48\x1c\xcf\x7e\x1d\x9d\xc7\x2b\xc0\x8e\x5a\x56\x8e\xc3\x69\x12\xf1\x86\xee\x98\x33\x6e\x13\x9a\xbb\xcb\x76\xed\xd0\xd7\xe2\xaa\x1f\xcb\xd6\xa9\x10\x24\x5c\xc5\x25\x3c\x9a\xd0\xc8\x4f\xc3\x47\x97\x10\x76\x75\x76\x3d\x0d\x0d\xa6\x13\x59\x8f\xba\x2d\xbd\xce\xc2\x7b\xc1\xb0\x22\x69\x7a\xde\x54\xba\x8a\x11\x7c\x22\x2e\x97\xea\x1a\xdb\x79\xe2\x7b\x75\x54\x84\x7e\x66\x1e\x57\x5a\xce\xed\x48\xbc\x99\xee\x12\xca\x96\xc4\xda\x31\xdb\x89\x63\x17\xb9\x9b\x51\xbb\x84\xbe\xee\x8b\xc4\xb5\xed\x51\x68\x93\xb6\x6e\xd5\x5c\x6f\x85\xe2\x31\x02\xc5\x76\x11\x07\x4c\x14\x2f\x70\x66\x55\xa2\x19\xc7\x55\x9c\xd3\x83\xb3\x39\xc6\x42\xdd\xe1\x97\x9a\x5c\xd2\x81\xce\xc4\x4e\xae\xd2\x06\xfc\xa2\xcb\xd6\x6a\xf5\xd8\xc6\x12\xe4\x38\x04\x34\x20\xdd\x96\x6c\x75\xb3\xcc\xef\x8a\xc6\x5b\x33\x03\xc7\xea\x19\xe4\x7c\x8b\x2d\x0c\x92\xb0\x9d\x7e\x30\xb5\x4b\x69\x45\xda\x36\xcd\x8a\x1c\x04\xac\xf6\x38\x16\x0c\xd3\x71\xd1\x78\x8d\x2e\x14\x4d\x5e\x2c\x8b\xe6\xc4\xf8\xe0\x58\x47\x67\xab\xe1\xf4\x6c\x18\x9e\x15\x19\x5e\xa8\x5a\x8f\x29\x16\xd3\x2d\x39\xf6\x9d\x5c\xe6\x4d\x99\xe5\x6e\xd8\x32\xa9\x3d\x94\x16\x34\xa3\x32\x94\xd4\xfe\x00\x72\x93\xf4\xd0\x76\xad\x93\xf5\x18\x36\x65\x20\x97\xa3\x24\x8d\xf2\x55\xa3\xa4\x9a\x29\x36\xa7\x59\xc3\x61\xf4\x49\xbc\x23\x89\xd3\x74\xa8\x12\x5b\x5b\x80\x20\xbd\x6d\xca\x35\x5d\xd7\x99\x43\x2a\xb1\x1e\xc7\x55\xc3\x4f\x5a\x14\x34\x9b\x5a\x50\x9d\x9b\x1b\x53\x44\x4c\xf9\x2e\x7b\xde\x0c\x0b\x2b\xb6\x0b\x12\x63\x6f\x0e\x2f\x04\xe6\x50\x55\x4f\x09\xd1\xab\xfc\x2c\x80\x29\x86\x94\x16\x76\x64\x77\xbf\xfb\x58\x33\x4b\x45\x58\x76\x70\x19\xd7\x8d\xa5\xc5\x92\x5a\x95\x33\xdd\x1d\x1e\x10\x49\xd6\xe5\xaa\x93\xf0\x03\x02\xa2\x99\x9b\xd2\x60\x43\xed\xa6\x6d\x1e\x48\x59\x90\x7a\x3a\x63\x72\xb3\x07\xc1\x6d\xa2\xcb\xe4\x2b\x5e\xcb\xde\xd3\x65\x13\x33\xc6\xf6\x99\xe3\x4c\xc1\xa8\x88\x20\xb6\x44\x48\xc1\x1c\x12\x1a\xe9\x92\x36\x52\x99\x09\x08\x69\xc0\xa5\xd6\x0b\x87\x3a\x9e\xea\xb6\x5d\xff\x9b\xd5\x92\x57\xc8\xea\x79\xc2\x7c\x36\xab\x5d\x66\xcc\xd4\x15\x33\xce\xdd\x5b\x5f\x0a\xd6\x3c\x21\x04\x7d\x8a\x54\x74\x3e\x8c\x4e\x95\xea\x1d\xd1\x78\xd5\x87\xb6\x4b\xb9\x0f\x40\xc0\x41\x60\xe7\x28\x80\xbd\x7b\xad\x97\x0d\xd6\xc2\xe0\x4c\x99\xe4\x90\x1d\x52\xb8\x00\xec\xba\x3d\x34\xe9\xf3\xaa\x1d\x17\x36\x37\x93\xa7\x0f\x3b\x86\xad\xcd\xec\xce\x23\x0e\x99\xd5\x06\x08\x43\xde\x8c\xa0\x8b\xa8\x47\x46\x29\xf2\xa4\x05\x08\x03\x86\xab\x26\xea\x90\x9f\xd0\x6d\x9c\xb3\xa5\x84\xc3\x39\x23\xa9\x1e\xd6\xec\xbd\x0c\xb0\xee\xcc\x1c\x98\x9c\x26\x31\x00\xf0\x29\x68\x53\x68\xdb\x2e\xe3\x3b\xa8\xbd\xed\x28\xd4\xb6\x07\x7c\x40\x93\x0e\xb4\x65\xbc\xd4\xda\xf8\x22\xcc\x1a\x1b\x4c\x27\x00\x88\xab\x6d\x3d\xf6\x3d\x97\x7d\x95\xe7\x55\x92\xf2\x8a\x84\x7a\x2a\x98\x01\x62\x55\x44\x47\x71\x6a\x41\xd9\x4d\x49\x9e\xd2\x54\xa6\x14\x56\x73\x3a\x25\x00\x9b\xef\xdb\xaa\xe9\xd4\x57\x7d\xf2\x74\x1d\x9d\xe2\x33\x4a\x45\x7c\x5c\x57\xd6\x98\xd1\x63\xd7\x31\xaf\x0b\x5d\x8b\xd8\x40\xd2\x75\x05\x3e\x63\xc8\x64\xd9\x56\x6a\xc9\x65\xbc\x98\xc0\xb8\x9d\xab\x41\x90\x21\xaf\xf6\x06\xed\x5c\x19\x9f\xab\xaf\xad\x23\x71\x38\x1e\x26\x12\x9d\x9e\x2d\xaf\xdc\xad\xc2\xed\xc4\xdc\x06\x7c\x6e\xd6\x9d\xba\x80\x6c\xe5\x0f\xb8\xf0\xa5\xd2\x03\x6e\x91\xba\x6d\xa4\xa1\x6c\x4b\xbb\x3b\xc0\x28\xeb\x49\x51\xc4\x74\x1f\x12\x3a\xa4\x4b\x5e\xcf\xc3\x2d\x57\x51\xaa\xe9\x51\x0a\x05\x7c\x23\x4e\x1f\x6e\x16\xb1\x1f\x80\x50\xd2\x70\xdc\x98\x45\x90\x05\xc4\x47\x34\xd8\x90\xc9\x52\xab\x60\xae\x9c\xf2\xab\x5e\x6f\x73\x82\xba\x08\x70\x78\x99\xec\x16\x4d\x16\x72\xa5\xea\xc8\xd6\x70\x1d\x54\x49\x28\x83\xa4\xac\xf2\x52\x47\x87\x99\x03\x8b\x5e\xae\xda\xfb\xa1\x05\x4d\xdd\x98\x3c\x13\xb2\xbd\x67\xd0\x37\xb2\x7a\x21\x9d\x5f\x8e\x9a\x4a\x3d\xa9\xe1\x0b\x70\x67\x2b\x01\x1d\x79\x3f\xd3\xaa\xaf\x92\xac\x65\x12\xf6\x6e\x38\x4f\x1e\x59\x00\x87\x3f\x9a\x17\x87\xcc\xab\x5c\xc9\x0e\xfc\x61\xb6\xbe\x76\xa2\xb8\x3e\x04\xa2\xa7\x8d\x7c\x67\x57\x2d\x01\x1c\x8e\xcc\xc6\x2c\xae\x08\xac\x9a\x97\x85\x9b\xd3\x6f\x08\x98\x21\x76\x4a\x87\xac\xc7\x68\xb6\xee\x39\x31\xb7\xab\x15\xaf\x76\x5e\x36\x93\xa1\x76\x0f\x71\x9d\xc2\xd8\x70\xc8\x16\x96\x89\xf7\xfd\xb4\x47\x4d\x32\x9d\x63\x93\xbe\x2f\x4d\xb4\x40\x14\x02\x69\x24\x71\x98\x33\x5e\xe5\x7b\x32\xe2\x22\xd7\xae\xd6\xc8\xb5\x72\x42\x94\xb3\x80\x26\xf1\xa2\x7d\x0f\xeb\xd8\xd8\xb6\x5b\x00\x89\x31\x56\x29\xc0\x32\x5a\xe3\x12\xe6\x6d\xc0\xe7\x66\xfd\xee\x0b\xc0\x47\x4b\xb8\x23\xba\xed\x22\x3b\xca\x82\x9a\x19\x89\x28\xce\xd4\xd6\x28\xca\x44\x4a\x9f\x55\xed\x64\x6c\x67\x9c\xa3\xca\xb4\x6c\x9e\x5e\x45\x2c\x8a\xf9\x4c\xb0\x19\xb2\x45\x0a\x58\xeb\x1d\x2a\x81\x18\x96\x7b\x2f\xa0\x07\x26\xcc\xac\xe1\xc4\x96\x50\x1c\xf7\xe0\x53\xdf\xba\xba\x6a\x8e\x9d\xfa\xb1\xc1\x8e\xa7\x35\x55\x4b\x95\x22\xab\x36\xa2\x1c\x22\xdc\xed\x02\x1a\x59\xdc\x51\xaa\x4c\x58\x15\xbe\x47\x5e\x55\xe6\xe0\x32\xbd\xec\x8e\xa7\x59\x8d\x96\x2a\xd4\xe1\x51\x09\x0a\xdb\x18\x54\xa0\x1c\x1e\xce\x54\x75\x44\xc7\xd7\x75\x39\xc4\x12\x5c\x54\xbc\xc6\x78\x55\x73\xd5\xf0\xb9\x53\x5d\x1c\xe4\x9a\x1c\xe5\x84\xdd\xa8\x05\x23\x66\x96\x63\x83\x78\x29\xc0\xc5\x3a\x4e\xad\xb8\x33\x02\x36\xe4\x92\x0c\x57\xd9\xfa\x84\xe8\xd2\xb2\x16\xb4\xc9\x04\x47\x39\x17\x4c\x97\x52\x76\xc0\xc1\x59\x55\xdf\x01\xe2\x47\x08\x07\x29\x6b\xd5\x2c\x31\x69\xb6\xfd\xb2\x95\xd0\xc5\x37\x44\x71\x6c\xec\x94\x8b\xcc\x4e\xee\x5b\xe2\x2c\x74\x08\xd3\x98\x90\x05\xb0\xa3\xc6\x4c\xd1\xbb\x92\xd0\x91\x04\x99\x5d\xae\xda\x71\xa1\x9d\x9f\x2c\x49\xb7\x69\x19\xa3\x76\xb6\x1e\x6c\xf2\x52\x50\xb4\x3b\x8f\xaa\xd6\xe1\xf5\x4e\x60\xdc\xfa\x5a\x73\x4c\x8c\x69\xdd\x6f\x03\x3e\x37\x9b\xa0\x5d\x50\x76\xf5\x09\xd4\x36\x49\x6c\x9b\x5d\x35\x5d\xd9\x76\xe4\x26\x7b\xe6\x55\x84\xdc\x31\xf6\x07\x0e\x60\x1f\x69\x1e\x1a\x89\x60\xf8\xea\xc1\x55\xc5\x4e\x8b\x32\xd6\x3a\xb2\x94\x76\x5b\xeb\x4c\xa4\x90\xea\x75\xb8\x35\xcf\x8e\xe7\x1e\x9a\x39\x75\x04\xb8\xa3\xa8\xf5\x44\x94\x87\x3d\x5d\x45\xe7\xc9\x73\x89\x91\x83\x81\x26\x35\x90\x80\xea\x00\xf5\xcb\xce\x96\x52\xb7\x29\xb9\x8b\x8b\x5d\xa4\x3f\x1d\x0d\xfb\xbe\xa4\x0d\x93\x7c\xd5\x33\x21\xde\xd1\x79\x40\xe9\xf0\x32\xda\xec\x5e\xa6\xdd\xda\x64\x0e\x85\x09\xa2\xe7\x8a\x87\xc9\x3c\x75\xe5\x3d\xc7\x44\x71\x9f\x0f\xcf\xae\xf2\x75\xdd\x02\xb5\xa1\x2c\xbb\x07\xc8\x9f\x0d\xac\x2e\xa4\xed\x84\x0a\x1a\x51\x3b\xee\x40\x55\x7e\x66\x78\x86\x05\xb0\x50\x6c\x66\x7d\x51\x57\xb1\x51\xd0\xd9\xbc\xdb\xe2\x10\x60\xae\xe7\x39\xce\x29\xc7\xa9\x36\xeb\xa6\x62\x04\x11\xb9\xd4\x04\x76\x06\xac\xd8\x14\x5f\x9a\x47\x1a\x83\xab\x84\xa7\x0f\xe9\x70\x20\xab\x59\x48\x0b\xa9\x3a\xd2\xce\xa5\x01\x65\xcb\xda\x9c\x91\x30\xf0\xd6\x20\x1a\x48\x04\x8b\x7b\x97\x94\x0e\x7e\x99\xc9\x63\xcf\xb9\xa3\xb9\xb9\xc1\x38\x8e\xbd\x8d\x14\x81\x82\x93\x91\x31\xd5\xbe\x37\xc4\x68\x80\xfb\xd0\x50\xf9\x94\xca\xba\x5a\xbc\x92\xdb\xf6\x7c\x6e\x36\x93\xbf\x62\xda\x35\xe8\x82\x48\x2f\x98\x9e\xca\xee\xab\x05\x09\x49\x74\x28\xc1\x0a\x93\xfa\xa0\x0a\x30\xce\xc1\xa8\xd2\x34\x41\x16\x1e\x19\x1f\x57\xf9\xb8\x58\xab\xab\x88\x70\x00\x82\x96\x73\x75\x4b\x9f\x65\x8b\xf2\x34\x22\x8f\x5c\x09\xc5\xbc\x1e\x38\x0a\x84\x49\x46\x5c\x6c\x2e\xd3\x70\x55\x73\xd5\x01\x99\xb9\xdb\xf7\x83\x6d\x5d\x4b\xe5\x97\x35\x89\x58\xe0\xb2\xbb\x45\x3a\x7f\xc0\x60\x0d\x21\xc8\x7b\x92\x12\xe6\x59\x86\x90\xae\xba\xd1\x60\x31\x78\x4d\x61\x14\xda\xe1\x88\x31\x0c\x51\xd6\x58\xf7\x06\x66\x2c\x54\x30\x43\x75\xae\x44\x2f\xcc\x5a\x01\x52\x5c\xc3\x88\x57\xcd\x22\xa7\x15\x92\x57\x4a\x29\x25\x40\x2c\xb9\x1d\x88\xc4\x29\x00\x83\x68\x6c\x4b\xef\x21\x8e\x65\xc6\x03\xef\x61\x77\x85\x1c\x86\x1c\xf3\x2a\xf0\xe9\x4c\x9d\xbb\x5f\x52\x59\xbb\xec\xa2\x09\x41\x92\x6b\xa5\x32\xdc\x99\x8d\xd5\xb2\x00\xbd\x4f\x85\xc5\xa3\xa9\x94\x77\x2f\x40\xbc\xea\xba\x3c\x44\x84\x5e\xab\x36\x68\x43\xa8\x75\x65\x99\xea\x7b\x3c\x56\x56\x12\x4a\x6b\xcc\xa1\x9a\xd3\xc0\xb4\x6f\xbd\x98\xdd\x1e\x98\x5d\x66\x7b\xc6\x89\x27\x2c\x33\x36\x9c\x39\xf3\xe9\xb7\x65\xb1\x06\xd4\xd6\xf2\xb1\xca\x5d\xb6\xdc\x70\x01\xf8\x98\x40\x0f\x4e\x74\x2b\xcb\x3e\xeb\x6d\xc8\x56\x8f\xbf\xdf\x0b\x5e\x73\x67\xf8\x70\x79\xdf\x3b\x7f\xe8\xe7\x7e\xc6\xbb\x1c\xf3\xe5\x0f\xbe\xfd\x8f\xbd\xfb\x67\x3e\x2d\x3d\xe3\x89\x4f\xff\xc3\xf7\xfb\xda\x3f\x7e\xca\x3f\x22\x5b\xa1\x47\xfe\xf5\x7b\xbc\xec\x3e\xcf\xbc\xe5\x01\xf7\x7f\xf4\xe7\xde\xe1\x21\x7f\xf7\xbb\x9f\xf6\xb8\x47\x3c\xe5\x45\xe7\xc7\x6f\xe2\x07\x3f\xff\xdf\xfe\xe5\x3d\xdf\x32\x6f\x08\xfd\x4f\x0f\x7a\xf2\xf3\x7f\xfa\x4d\x1f\xf3\xd4\x97\x7e\x74\xfc\xba\xb7\x7e\xef\xcb\xff\xfb\x2d\xdf\xf5\xc3\x3f\xfc\xb1\x7f\xfe\x48\xfe\x6f\xf5\xcb\x7f\xe0\xf9\xc7\x7b\x7d\xcf\x0d\xa1\x3f\x42\xbf\xe5\x57\x3e\xf9\xa9\x1f\xf0\xaa\x3f\xf8\xf7\x2f\x79\xda\x57\xbf\xf4\x15\x9f\xf8\x53\xdf\x70\xd7\xaf\xfa\xd8\x8f\x79\xe9\x3d\x7e\x19\xbf\x34\xbd\xdf\xf7\x3c\xe5\xf9\x37\x84\x3e\xe1\xcd\x77\x7f\xfb\x3d\xee\xf2\xb2\xef\xfe\xec\x3b\xdb\xaf\xfb\xd3\xbf\x7e\xee\xdd\xfb\x0f\xfe\xf4\xab\x9e\xff\xdb\x60\x7e\xdf\x2f\xfc\xed\x0f\xbc\xe9\x87\xbe\xed\x69\x37\x84\xbe\xf6\x91\xbf\xf3\x9f\xde\xed\x51\x6e\x7c\xf3\x3b\x3f\xeb\xb3\xfe\xdb\x9d\xbe\xe9\xc7\x9f\x86\xff\xf3\x57\xbc\xfd\xc7\x3e\xf0\x41\x4f\x79\x9f\x47\x7e\xe2\x53\xfe\xd7\xf3\xde\x76\x43\xe8\xf3\xbf\xe0\xd5\x3f\xf5\xa4\x07\xbd\xe6\xc3\x1e\xfb\x83\x9f\xfa\xea\xd7\xbf\xf9\xef\xfa\xfb\xfe\xda\xef\x7f\xfb\x2f\x7e\xe9\x57\xfe\xed\x87\x7f\xe9\x4f\xdc\xfb\x0d\x6f\x79\xe8\x8b\x6f\x08\x1d\xef\xf1\xbd\xcf\x7d\xc4\x13\x9f\xfd\xe4\xef\xfd\x37\x1f\x68\x3f\xef\xd7\xe5\x97\xbe\xfc\xc7\xee\x71\x37\xfe\x8d\x8f\xfb\xe7\x77\xbc\xfb\xeb\x1f\xf7\xec\xb7\x3d\xfe\x59\x37\x84\xde\xed\xb3\x1e\xf0\xeb\x3f\xf9\x01\xb7\x7c\xe3\x6f\x7f\xcd\x6f\xde\xf5\xdf\xbf\xf5\xc5\x9f\xfc\x96\x1f\x7a\xe5\x47\x7d\xe4\x53\x5f\xfd\x59\x77\xfb\x9c\x77\x7d\xc6\x33\xff\xc5\x3d\xee\xf6\x0f\x64\xab\x9b\x3d\xd5\xff\xbb\x1b\x40\xdc\xef\x96\x3f\xba\xed\x6e\x61\x94\x49\x70\x04\x30\xeb\xc7\xbe\x86\xb5\x9a\xac\x28\x38\xe4\x7a\x52\x68\x4d\x37\x88\xd0\xde\xfa\x2a\xf6\xc4\x8d\xa4\x56\x2f\xf4\xef\xdb\x5d\x3f\xfe\x85\xff\x37\x6f\xf1\xff\xe9\x24\xd4\x4d\x11\x4f\xba\x6c\x90\x29\x11\x3b\xae\x20\x0a\xee\x43\xe3\x63\x35\x49\xf1\x1c\x77\xb5\x20\xa5\xf0\x0c\x7a\x2b\x91\x10\x1f\xfe\x77\xc5\xf9\xff\xfe\x24\x84\x49\x7e\x9c\x74\xe1\x72\x9b\xd3\x9c\x4e\x37\xe7\x93\x71\x4e\xc4\xee\x38\x6f\xb8\x06\x8d\x74\x69\x4d\x03\xa3\x0f\xa3\xd8\x16\x58\xbf\xea\x24\x3e\xee\xd9\x9e\x85\xf0\x7c\x40\xb6\x21\xc7\xd4\x64\x0c\x43\xca\xf9\x31\x82\x5c\x24\x5d\x17\x9b\x14\xb7\x9b\x1f\x62\xcc\xb4\xfd\x6f\x0e\xf7\x05\x27\x51\xd9\xc3\x8e\x73\x8b\x3a\x22\x6b\x42\x0e\x6d\x39\xe3\x3c\xfa\xc1\xfe\xbe\x51\x8b\x56\xa9\x68\xcb\xc5\x70\x32\x45\x44\xd3\x8c\x00\x2f\x3a\x89\x00\x40\xd6\x64\xc6\x50\x14\xec\x12\xc7\x83\x38\xbc\x87\x48\x57\xee\x67\xd7\xeb\x82\x19\x38\xc3\xda\x0b\xdf\x26\x75\xd8\xb7\xf9\xbf\x25\xe5\x2f\x78\x63\x77\xc4\xf9\xe6\x8d\x5c\x4e\x9a\xb0\x57\x7b\xe8\x04\x07\xe1\x9a\x72\x05\x06\xa2\x86\x94\x34\x2e\xba\xe0\x10\xac\x6e\x88\xb9\x9c\xda\x45\xcf\xe4\x90\x13\xa3\x50\x51\x34\xc0\x57\x53\x4e\xba\x71\x11\x12\xf4\x58\x25\xc0\x68\x9e\x55\x7a\xa8\xe8\x4e\x63\x1a\xb1\xb3\xb9\x33\x5a\xff\xe1\x24\xef\x00\x9f\x9b\xe1\xf4\xff\x7b\xf0\xa1\xa9\x1e\x03\x2e\x9d\xa4\x74\xea\x24\x81\xc2\x74\xf9\xff\x69\xfb\xd7\xf8\xff\x9a\xb2\x2e\x14\xb7\x03\x04\x6a\x25\x27\x51\xf1\x94\x89\xa0\x56\xc2\x9a\x59\x33\x52\xf2\x8f\xd0\x08\x39\x68\xa0\x69\x7f\xb0\xad\x33\x6b\x66\xd6\x9c\xd7\x9c\xd7\xcc\x20\x9e\x4b\x11\x6c\xe3\x46\x4b\xef\x30\x4d\x51\x3c\x42\x98\xe0\x8d\x5b\x31\x94\x20\x51\x39\xdc\xc8\xd6\xd4\xa0\x50\x90\xda\xc8\x71\x23\xca\x71\xbf\x6e\x8a\xfa\xe5\xef\xc1\xef\xc9\x5e\x8f\xbe\x4f\xae\xd7\xf7\xb5\x5e\xf3\x59\xf3\x5e\xef\xf7\x75\xbd\xaf\xeb\x3a\x2b\x58\x13\xa2\x3b\xa4\x01\x8a\x5d\x9b\x92\x3b\xad\xec\x58\x14\xca\x44\x92\x8c\x2f\x3a\xc0\x02\x25\x6f\x35\xbb\x5c\x7d\x17\x2b\x50\x18\x07\xbf\x9c\xd5\x6c\xdc\x93\xd4\xa0\x43\x6b\x05\xa5\x1a\xb8\x41\x68\x57\xbd\xae\x53\xe7\x8b\x5e\xaa\x46\x3a\x0d\x7c\x39\x36\x32\x51\xe6\x58\xc5\x45\x09\xb0\x9b\x0e\x62\x9d\x87\x73\x75\xb1\xa5\xe8\xaa\xd9\xa2\xdd\x42\x2b\xf6\x54\x89\x8b\xce\x44\x9a\xf3\x8c\x87\x76\x5c\xa1\xe0\x25\x9d\x74\x1d\x68\x93\x69\x06\x3a\x63\x0e\x23\x19\x75\x27\x39\x6e\xe6\x84\xeb\xda\xd4\x72\x1e\xcb\x55\x17\x6d\xd5\x67\x5e\x15\x6e\x60\x51\x05\x7b\xac\x0b\xef\x89\xbb\xd6\x35\x4a\x22\x97\x63\x2e\x23\x08\x81\xdd\xde\x64\x3a\x1c\x29\x66\xcf\xed\xa2\x33\x39\x73\xab\xe9\x84\x3e\x16\xc6\xd6\x95\x2d\xa4\x11\x56\xef\xa4\xe8\x0e\xf0\xe9\x87\x00\x66\xd2\x71\xc8\xc8\xb3\x3d\x34\xf4\x55\x12\x7d\xd1\x93\x84\x15\x0d\xa3\xe9\x3c\x4f\x83\x67\xec\xa9\xf4\x29\x14\x1d\xd0\x22\x6b\x53\xd8\x19\xde\x4c\x13\xfd\x48\x18\xbb\x4c\x16\x29\x82\x59\xaf\x3a\x93\x26\x64\x0b\x62\xf0\xba\x67\x8b\xe8\xb9\x45\xde\x22\xac\x50\x1f\xa5\x48\x0e\xdc\xe1\x62\xb2\x5a\x9d\xce\x53\x68\x17\x2a\x01\x63\x37\x81\xcf\xad\x98\xdf\x05\xe0\x03\xfb\x56\xb7\x85\x2d\xab\x00\x1b\x3c\xfb\x11\x87\x5e\x8c\x25\x88\xc7\x91\xea\x6e\xcf\x09\x34\x37\x55\x70\xb5\x83\x18\xc0\x8a\xeb\x65\x57\x7e\x63\xfd\xf4\x3b\x36\xe3\x20\xf4\x6c\xda\x58\xa8\xa3\x47\x5d\x7b\xdb\x19\x39\x42\x1a\xbc\xca\x5e\xe6\x18\x1a\x6f\x02\x46\x75\xaa\x8b\x98\x0f\x2d\x65\x5d\x7c\x18\xa9\x33\x0d\xed\xbe\xb3\xcd\x2d\x4d\x96\x9d\xf5\x9e\xbd\x8e\xd4\xed\xb9\xcf\x04\x3b\xed\x47\x45\x45\x78\x58\xc9\x45\x80\x4c\x7d\xe2\x73\x3a\x4c\x47\xeb\x64\x85\xc8\xf5\x85\x9f\x7e\x3b\x69\x07\xa4\x30\xd2\x73\x26\xda\x2c\x25\xb1\xa6\xd7\x18\x3b\x90\x55\x5d\x06\x3e\x95\x20\xb3\x03\xad\x97\x72\xf2\x96\x7c\xa0\x87\xed\x82\xf6\x70\x4c\xdb\xc1\x84\xa7\x3b\xe5\x82\x37\x51\x2b\x1e\x05\x3b\x8f\xc7\x55\x4f\x42\x88\x5f\x97\xda\x60\xa9\xd2\xd8\x7e\xf0\x69\x81\x0f\x65\xe9\x53\xf0\x41\xcb\x4e\xc3\x84\xb4\x6d\x07\x81\x60\x5f\xad\xd1\xa7\xdd\xae\xba\xf2\x53\xcd\x8e\x36\x0a\x1a\x62\x7a\x42\xc4\x2a\xac\x73\x93\xa9\x1c\x12\x68\x23\x16\x67\xec\x66\xc9\x7a\x82\x40\xad\xce\x63\xe0\xca\x2e\xfa\x48\x51\xb5\x8d\x2d\x03\x45\x1c\x16\x42\x6a\xba\x82\x43\x9e\xe5\x28\x74\x4f\x1b\xd5\x08\xf6\xc5\x64\xa1\x17\x14\xc7\x68\xba\x87\x9c\xe9\x7f\x5b\xeb\xf3\xbf\x80\xcf\xad\xb4\xe4\x05\xb2\x0b\x09\x73\x32\x25\x00\x91\x4b\x45\x61\x65\x0b\x16\x8a\xed\x68\xd1\xd9\xc8\x23\x94\x42\xe2\x02\xce\x63\x9d\xa1\xc6\xbe\xeb\x25\x9f\x74\x5e\x74\x80\x7d\x2c\xbb\x1c\xfb\xba\xf6\x55\x07\x27\x76\x70\x78\xad\xc0\xd1\xb1\x21\x48\x6d\xe8\x50\x11\x09\xa2\x58\xef\xeb\x39\x5d\x6f\x14\xfe\x37\x9b\xf9\x05\x4f\xe2\x44\xac\xab\xe6\xe6\x94\xed\x44\xbb\x97\x29\x20\xee\xb6\x8c\x82\x03\x6e\xb5\x34\x03\xe4\xdc\xb2\xae\x43\x6d\xd1\x57\x0c\x8f\x8d\x5e\x24\x31\xe8\x4e\x3b\x1f\xe5\x04\xb9\xf9\xb5\x1e\xfa\x34\x6a\x7a\x2f\xf2\x26\x07\xae\x7b\xae\x98\x1c\x98\xcb\x24\x64\x24\x2a\x41\x7f\x16\x3f\xae\x7a\x12\x31\x5a\x57\x0b\x8b\xfb\x0a\x6d\x96\xc0\x25\x56\xac\x81\x4d\x45\x68\x56\x95\x30\xe7\x4c\xc0\xf3\x50\x26\x2d\x43\x60\x3c\x90\x2c\xee\xa2\x27\xc1\xce\x14\xa6\xb3\x9c\xd4\x88\xc8\xa4\x21\x47\x0a\x71\x08\x83\xd2\x71\xb0\xb5\x27\x0f\x50\x85\xc7\x3a\xdb\xea\x3c\x34\x13\x6a\x73\x95\x14\xed\xf8\x54\xb9\x69\x7c\x68\xd1\x1d\x82\x44\x93\xb6\x2b\x8e\xac\x34\x9a\xac\x39\x26\xe9\x62\xda\x15\x4e\x00\xa8\xea\x63\xb4\x81\xa8\xab\x3e\x0d\x5c\x0f\xd1\x70\x89\x09\x58\x2c\x5a\x45\x53\x9c\xf3\x60\x45\x50\xd5\xb3\xa7\x1a\x39\x6e\x85\x8c\x08\x09\x8a\x0f\xb6\x0d\x17\xe9\x4d\xe0\x73\xab\xec\xd4\x05\xe0\xb3\x32\x42\xda\xce\x51\x40\x42\x24\x80\xa8\x55\xbd\x49\x59\x4c\x65\x74\x25\x7d\x03\x05\xb2\x03\x74\x6f\x3b\xf5\x8b\xf0\xeb\xea\x75\xbd\x4a\xb7\x72\x96\xb8\x93\x44\x87\x13\x6f\x7b\xf3\x38\x8a\xb5\x0d\xac\xc1\xa2\x30\xd1\x1b\x81\x2b\x28\x85\x57\x6b\xf3\x74\xaa\xfa\xba\x81\xe3\xa2\x27\x31\x91\x1f\x07\xac\x31\xe4\x1a\x91\x22\x43\x08\xe3\x26\xa0\xdb\x11\x67\x36\xdd\xce\x64\x0f\x2d\x96\xde\x31\xc6\x84\x22\x8c\x92\xb9\xe8\x2b\x4f\x54\xdd\xb5\x3c\x90\x8f\x4b\x33\xa3\x93\xf5\x4c\x75\x75\x27\x2f\xd3\x49\x3d\xe5\x98\x53\x0a\x93\xe1\x8a\x4f\x12\x40\xc6\x3c\x7b\x75\x55\xf6\xa9\xce\x73\x39\xe8\x48\xc2\xeb\x51\xcc\x18\x19\x6e\x0d\x0a\x28\xe5\xde\x33\x35\x67\x27\xb5\xd2\xd5\x4c\x80\xe2\x0e\xac\x0d\x5b\x8f\x57\x5d\x34\xb0\x2f\x31\xa0\x8d\xaa\x62\x8f\x9d\xac\x05\x54\x89\xea\x2e\xfc\x22\xb7\x8d\x42\xb0\xf3\x33\x71\xbc\x1e\xb6\x72\x89\x9c\xa8\x50\xc6\xed\xa2\x27\x31\x1e\xb7\xc3\x32\x68\xf9\x26\x11\x28\x84\xba\x83\xba\xbd\x32\xb3\xf1\x68\x9d\x77\xd5\x20\x6a\xb2\x20\xb1\xee\xa9\x03\xc0\x3a\xb8\x08\x90\x09\x3b\xf8\x5a\x17\x9b\x56\x91\xd3\x1e\x98\xa7\x23\xe2\xc9\xc5\xb6\x85\xcc\x82\xaa\xf0\x2c\xe5\xdc\x49\x23\x35\x33\x11\xcf\xa3\xa7\xb9\xdf\x04\x3e\xb7\xca\x77\x5f\x20\xbb\xd8\xf4\xd6\xc1\x29\xf4\x2e\x23\x5a\x3a\x52\x89\x0d\xb0\xc0\x65\xc0\x09\xb1\x3a\x43\x6b\xea\xec\x56\xc5\x30\x67\xa7\x2d\x9f\xd9\x5e\xc5\x37\x32\xde\xe2\x3e\x50\xe1\xbc\xf1\x8c\x89\x76\x65\x2e\xdd\xea\xc9\xee\xa4\x66\x20\xa8\x9d\xf5\x71\xaa\x29\xa2\x6b\x7d\xba\x21\xdb\x40\x57\x25\x12\x95\xb4\x7a\x8c\x16\x88\xef\x03\x21\x3b\x4e\x0f\xb7\x31\x65\x81\x2b\xd0\x49\x1b\xa1\xcd\x38\x09\x82\x48\xc5\x13\xf9\x2a\x43\xbe\xe8\xa2\x11\x68\xe2\x92\xab\xd6\x60\x4e\x25\x90\x92\x27\x4e\xe7\x6e\xe0\x3e\x72\xe1\xa6\x59\xbd\xb7\x00\xfb\x42\x44\xf5\xd3\xa3\xcd\xe1\xbe\x80\x8b\xce\x64\x49\x01\xb3\xa1\xc1\x46\xe7\x8a\x27\x87\xb2\x8f\x19\x9d\x8a\x91\x06\x74\x22\x82\xa7\xb1\x8c\xc8\x98\xb5\x34\x20\x61\x27\x16\x75\xd5\xaf\x73\x64\xbe\xb4\x75\xe8\x25\x2c\x71\x6b\x31\x28\x33\x0e\x2b\xdd\x76\x06\x46\x43\x30\x18\x15\x55\x6a\x06\x1c\x32\x9e\xdb\xb1\xee\x5a\x5f\x95\xfa\x3e\xa4\x9f\xda\x1f\x9d\x7b\x89\x3d\xa6\x6b\x20\x28\x42\x1e\x62\x85\xe8\x90\xae\xc1\x08\xd1\x71\xf0\x9e\x5c\x4b\xb6\x39\xc9\x64\x09\x17\x3d\xc9\x32\x25\xa3\x24\x96\xe9\x40\x08\x08\x40\x57\x4e\x12\x42\xb2\x84\xe6\x95\xe0\xc3\x75\xa7\x68\xa0\x40\xcf\xa6\x66\x3d\xd7\x13\xda\xed\x26\xf0\xb9\x55\x05\xed\x02\xf0\x51\xc3\xae\x5d\x9d\xcc\x3a\x01\xe2\x69\x6d\x9d\xda\xe9\x0e\xc9\x5e\x8d\x6d\x7a\x59\xce\x85\x33\xa1\x16\xd8\x95\x02\x61\x23\xce\xea\xe5\xaa\xd7\xfb\xac\xd9\x04\xb8\x0a\x42\x9c\x95\xd0\xa4\xb8\xd1\xdd\x39\x46\x1a\x97\xa4\x20\xd4\xbc\x42\x2b\x35\x8a\x41\xca\xe7\xb0\x65\xb9\x01\xbd\xff\x3f\x66\x83\xa2\xe4\xb3\x76\x4a\x02\xb0\x77\x7e\xc9\xab\x96\x52\x1f\x27\x6e\x39\xb8\x6d\xfa\x12\xed\xa9\xa3\x5f\xb1\x54\x60\xee\xed\xb0\x73\xb9\xa8\x02\x48\x96\x83\x48\x31\x1d\x2d\x89\xe1\x75\x3d\x04\xc5\xd2\x33\x48\x66\x6c\x86\x1c\x03\x8d\xe5\xf4\x27\xde\xdb\x06\xd1\xb1\x83\xe6\x57\xac\x2f\x7a\xbd\x29\xe5\x9d\x77\xcd\xa1\xcc\xce\xcd\x12\x96\xc5\x83\xb9\x70\x61\x53\x12\x82\xe7\x9a\x80\x24\x02\x45\x0c\xe8\x66\xf7\x01\xf7\xa6\xe3\x55\xf9\x0d\x9f\x51\x75\x33\x84\x33\x1d\x76\xe1\xa2\x8a\xb3\xf5\xcd\x32\x72\x1a\x79\xf8\x13\x0b\x9a\x34\x5e\x5c\x48\xbe\x11\x17\xa9\x25\x72\x5c\x94\xfa\xa6\x0a\x94\xe8\xab\x1a\x5c\xea\x12\xec\x91\xf7\xad\xee\xd5\x6d\x68\x08\xa0\x8b\x28\xba\x21\xd2\x41\xc2\x6b\xc3\x07\x64\x21\x13\x1f\xaf\xe2\xa5\xc6\x13\xbf\x44\xdc\x41\xd4\xae\xc3\xe4\xb4\xc2\x5d\x25\x89\x01\x9e\x10\x42\x97\x0c\x3a\xdb\x98\xb1\x77\xd1\xbd\x19\x41\xa4\x71\x33\xf8\xdc\xaa\x26\x7f\x01\xf8\x98\x0a\x33\x3a\xcf\x75\xd9\xed\x0e\xad\x0f\x39\x9d\xb1\xeb\x36\x81\x0a\xb6\xc9\x84\x84\xce\xf4\x54\x18\x61\xc1\xcd\xba\x59\x98\xe7\x45\xb5\x03\x2a\x47\xc6\x85\x27\x17\xab\x99\x47\xa4\x2b\xa3\x5c\xcb\x03\x14\xe8\xd9\xe0\x70\x73\x61\x18\xb8\x60\xb2\x57\x74\xda\x85\x60\x33\xc0\x55\x57\xbe\xf3\xc3\x91\x4a\xb5\x3c\x7b\x2d\xf0\x20\x33\x2e\x00\xbb\x73\xee\x45\xa7\x91\x4b\x58\x4a\x97\x11\x30\xc8\xdb\xb9\xa0\x9e\xa0\x30\x57\x49\x51\x17\x76\x4a\xc0\xdc\x96\xba\x17\x16\x6b\x83\x92\x6c\xc5\x07\x45\xb7\xb6\x52\x5e\xf1\x99\x69\xda\x19\x03\x12\x1e\x96\x8a\x4c\x17\x73\x95\xc4\x28\x4b\x67\x35\x6c\x8c\xc1\xd8\x41\x5e\x57\x57\x56\x8b\x42\x05\x2e\x1c\x7b\x6f\x65\xcf\xbd\xec\x15\x10\xeb\x8b\x98\x7a\xf4\x73\xea\x8b\xd2\xbc\xd4\xf0\xb9\x5a\x98\xea\x59\x57\x3e\x75\x5a\xa9\x0f\x10\xb4\x04\x29\x4f\x42\xae\xb6\x69\x06\xa6\x32\x47\x2e\x04\xa0\x8d\x54\xc6\xd4\x45\x39\x1f\x3a\x34\xc7\x39\xba\x72\xf0\xa6\x35\xd9\xb2\x9b\xf9\xdc\x40\xce\xad\x0f\x1a\x94\x5b\x8f\x63\xd4\xee\x14\xa4\x69\xac\xce\x2e\x83\x8f\xab\xea\x6e\x70\xed\x72\x48\xa6\x04\x07\x80\x1b\x3c\xcd\x36\x24\x6c\x4d\xce\x30\x5a\xb3\x2a\xc0\x4d\x41\x9d\x73\xde\x8e\x7a\x20\x92\x48\x8c\xff\x93\x42\x7c\xc4\x6c\xf5\xf7\x5f\xf0\x92\x2f\x79\xda\x4b\xdf\xf1\x9c\xf1\xb0\xc7\x3d\xf6\x31\x9f\xf6\xbd\x77\xf9\x37\x3f\xf9\x39\xf7\xf8\xe0\xab\xbe\xec\x4b\x1e\xf5\xa4\x8f\xeb\xfe\xc1\xe5\x13\xff\x94\xd9\xea\xde\xfe\x73\xbe\xf8\x45\x4f\xfa\x96\x87\x7d\xfa\xa3\xbe\xf7\x57\x3f\xff\xe3\xbe\x89\x75\xf3\x6e\x76\xb7\xdf\xf8\xa6\xfb\x3f\xf2\xf5\xe2\x05\x7f\xef\xc5\xcf\x79\xdc\x0d\xa1\xdf\x5a\x1e\xf5\xc4\x17\xbf\x07\xbd\xfd\x31\x4f\x7e\xc3\xb7\xfc\xee\xbb\x9e\xf5\xa0\xe3\x07\xff\xd2\x2b\x9f\xfb\xf9\x4f\x84\xbf\xf6\x8a\xf0\xd5\x3f\xf5\x35\xf4\x59\x37\x6e\xf1\x3b\xcb\xdd\x3f\xfd\xf1\xaf\x7a\xc3\x5b\xbf\xec\x49\xcb\xfd\x1e\xf6\xeb\x9f\xfc\x99\xef\x7d\xc0\xf7\xac\x2f\x7b\xb8\xfd\xa2\xf4\xe8\xf7\x7c\xf2\x33\xbe\xe1\x57\x6f\x08\x7d\xd0\x97\x3e\xfd\x0b\x3e\xff\xcf\x7f\xd6\xcf\x3c\xfd\xbf\xfc\xed\x3f\xf3\xd7\xfe\x8c\xff\xaf\x4f\xfc\xcb\xbf\xb3\x7c\xff\xfd\x9e\xf0\x1b\x77\x91\xf7\xbf\xff\x8b\xd9\x73\x7f\xe8\x86\xd0\xfe\x0f\x5f\x48\xef\xfa\xe2\x2f\xfb\xee\x17\x7c\xe9\xdb\xf7\x4f\x7c\xdf\x8f\xbd\xff\x8f\xbf\xea\xd1\xcf\x7a\xe4\x57\x3d\xf2\xa7\x1f\xf4\x96\xe7\xf8\x17\xfe\xbd\x37\xbe\xf2\x86\xd0\xdb\xde\xf1\xf0\x7f\xf8\xe0\xdf\xf9\x8c\x6f\xf9\x83\x6f\x8d\x0f\xfd\xba\x4f\x7a\xf4\xbf\xfa\xd7\x5f\xf6\xbb\xaf\x7e\xf9\xb3\x3f\xf0\xff\x7c\xdb\x3f\xbf\xfd\xc1\x9f\xf0\x0b\x2f\xfb\x77\x37\x84\x7e\xef\x4b\xfe\xef\x4f\xe5\xe0\x57\xef\xa1\x3e\xe6\xef\x3e\xe5\x67\xbe\xf9\xf6\x07\x3e\xe1\xeb\x9f\xf0\xed\x9f\x5c\x5e\xfe\xc7\x6f\xff\x89\x0f\xfe\xc9\xeb\x7f\xfb\xf7\xcc\x0d\xa1\x85\xfc\xdc\xaf\x3d\xf9\xb5\x8f\xfb\x8b\xe8\xb1\x5f\x70\xef\x6f\x79\xde\xef\x3f\xed\xdf\x80\x4f\x91\xcf\xf8\xb4\x87\xfc\x9b\x47\xbe\xec\xbd\xe2\x53\xbe\xf1\x11\xef\xfa\x1f\x66\xab\x5b\x9d\xea\x15\x7e\x07\xa3\xdd\xaa\x34\x17\x28\x0b\x44\x88\x17\x3a\x4d\x92\x3b\xa8\xac\xfb\x10\x0b\x14\x7d\xb8\xc4\x51\xdf\x90\x3d\x39\x52\xfb\x7f\xb7\x51\x5e\xa1\x7d\x77\x0c\x04\x4c\x6d\x21\xe0\xb4\xc7\x4e\xec\x3a\x55\xa3\x34\xed\x74\x4c\x73\x9c\x74\xd8\x96\x50\x93\x64\x23\xab\x45\x36\x70\x58\xfc\x45\xf7\x29\x16\xa5\xd0\x14\x3c\x7a\x4e\xce\xd3\x06\x6c\xd6\x93\x97\xc0\x4f\xbc\x31\x49\x0c\xdc\x40\x84\xde\x37\x3c\x8d\x3c\xbb\x31\x8e\x99\xab\x6e\xf6\xce\xda\xda\x2c\x1d\x5e\xa3\xb4\xca\x95\x8e\x03\xac\xc7\x5a\x79\x69\x64\xae\x8e\x1e\xb0\x83\x1a\xdc\x32\xaa\x3b\xba\x97\x30\xee\xcb\x55\x4f\x92\x74\x32\x10\x5a\xe0\x8f\x95\x2d\x22\x30\xcb\xd6\x3a\x85\x9c\xd9\x16\x92\x0e\x99\x52\xa2\xcb\x21\xb8\x15\x35\x74\x76\xce\xaa\x97\xab\x48\xdf\xb9\x1b\x85\x28\x31\xc6\xaf\x9a\x16\xc1\x92\xbc\x93\x71\x76\x1a\xd6\xc9\xaa\x98\xab\x23\x26\x36\x91\x97\x23\xe1\xdd\xc0\x25\x62\x76\x51\x91\x9c\x70\xc0\x25\x95\x7d\x37\x70\x0b\x9d\x04\xb4\x2e\xbb\x02\x4a\x8e\xb4\xe4\xd4\x12\x54\x68\x74\x25\x63\xa4\xf6\x6c\x63\xcc\xb0\xae\x93\x5d\x74\x26\xa9\x79\x3c\x25\x30\x47\x3e\x51\xcb\x7c\xb1\x58\xaf\x65\x8f\x5e\x10\x4c\x28\x61\x86\x2d\x72\x99\x20\x9c\x98\x9e\x25\x17\xd3\xd4\x98\x37\xd1\xcf\x5b\xe1\xf4\x05\x59\xff\x70\x1e\xac\x64\x78\x1a\x3c\x4e\xa3\x06\xd1\xed\xd8\x13\x86\x38\x37\x11\xa5\x0b\xf5\xe0\x5d\xd6\x0a\xa2\xe5\xe0\xec\x78\x57\x6a\xa6\xab\x2c\x4e\x40\xae\x0c\xaa\x85\x44\xc3\x35\x39\x01\x57\x46\x22\x19\x3b\x91\x38\xaf\x2b\xd6\x9c\x08\x5f\xb4\x9b\xb9\x2c\x7b\x9d\x1b\x26\x97\xbd\x54\x6c\xe1\xc8\x25\x03\x53\x6a\x68\x0c\x3b\x04\xd9\x00\x30\x7a\xfa\x93\xf3\x43\xf0\xb2\x23\xe3\x19\xe4\x36\x29\x37\x0e\x84\x19\xa3\x57\xc1\xa0\xd9\xb6\xd9\xcc\xc1\x09\x26\x32\x67\x6b\x74\xdf\xa8\xb7\x29\xf0\x60\x4d\x39\x7a\x4c\xb4\x45\x78\x28\x65\x8e\xd9\xc3\xea\x7a\xba\xac\xd0\x07\x08\x72\xed\x4c\xca\xaf\x74\xe5\x29\x11\x20\x07\xec\x64\x33\xb1\x84\x7d\x17\x63\xf7\x18\x63\xe2\x37\x89\xd1\x22\xd6\xa3\xf0\x7d\xbb\xca\x94\xd7\x65\x67\xc7\x59\xf7\x19\xce\xd4\x01\x38\x94\x6b\xa9\x32\x8f\x11\xd1\x8c\x1f\x94\xa3\x4d\x14\xbc\xf5\xad\x9b\x20\xd9\x01\x75\x1f\x57\x29\x4e\xbf\xb9\x45\xc3\xcd\xdb\x33\x57\x70\x6c\xd9\x22\x94\xb9\x73\xd5\x92\xac\x99\xc5\x88\x6d\x0d\x48\x16\x55\x3e\x76\x2d\x5b\x90\x64\x8c\xab\x0a\xc2\x27\x60\x64\xe7\x8a\x2f\xf2\xe8\xc2\xf0\xac\xa5\x23\xaa\xaa\x26\x94\x23\xde\xea\xc1\x27\xcd\xd5\xd8\xae\x3a\x4b\x36\x17\x64\xf2\x4d\xe0\x73\x2b\xe6\x77\x01\xf3\xc1\x3c\x4d\xcc\x5d\x3a\x3b\x6d\x54\x41\xa1\xfa\x41\x5a\xf4\xfc\x4e\x95\xb9\x6e\x50\x51\x85\xfd\x6a\xb7\x55\x3b\x06\xc1\x6e\x59\x37\x57\x55\xd4\xb9\x27\x60\x98\xa5\xf0\xca\x2b\xd8\xcd\xc4\x52\xc7\xcc\xa4\x51\xc4\x6d\x92\x6d\xeb\xea\x28\xd8\x8f\xc1\xb7\x0f\xb7\x98\x84\xba\x5d\x55\xc7\xa6\xa9\x91\xa3\xee\xca\x12\x74\xa6\x9d\x2b\x13\x8a\x01\xae\x66\x12\x19\x1b\xc7\xde\x51\xa4\x40\x75\xcf\xce\x01\x16\x89\x67\x06\xe9\x2a\x18\xa4\x33\xeb\xa8\xd4\xe2\xcf\x73\x52\x2e\x35\x83\x4d\x03\xe3\x85\x53\x8d\x77\xbb\xd9\x05\x6e\xc4\xa9\x45\xa5\xb4\xe4\x33\xa8\xd1\x21\xb8\x4a\xfb\xd2\xe3\x00\xa2\xe1\x2a\xe5\x26\xf0\x51\x91\x70\x60\x6f\xb5\x0d\x4c\xaa\x97\xa7\x2c\x26\x24\xba\x22\x10\x54\x97\x09\x0c\xd2\x8f\xcb\x2c\xd5\xbb\x6c\x8b\xdd\x1b\x1c\xac\x2e\x29\x24\xab\x14\x95\x23\x76\x44\x99\x6c\x90\x60\x88\x03\xef\xfb\x58\x39\x01\x5a\xf6\x24\xc2\x42\x2e\x72\xe8\x10\x02\x33\xf1\xa6\x24\xa9\x0e\xb7\xb1\x11\x63\x63\xa9\x19\x33\x3d\x90\x46\xae\xb9\xec\x61\x6b\xfa\x1c\xad\xc1\x05\x1c\x76\x74\x48\xae\x4a\x46\x22\xc4\xe8\x5a\xe0\xbe\x36\x9c\x4f\xaa\x23\x4f\x8e\x86\x71\x00\x93\xc9\x8c\x98\xaf\xc9\x2a\x8e\xea\x59\x85\x18\xf4\xc0\x4b\x4b\xe5\xe6\x92\xe3\xad\xb4\xe4\x05\xcc\xc7\xc1\xb8\x21\x49\x98\x4e\x8b\x4a\x65\xd1\xc4\xcf\x32\xa8\x45\x8b\xdd\x34\x9c\x79\xf7\x61\x86\xba\xcb\x3b\xa5\xfa\xb6\x42\x09\xd5\x55\xb2\x8b\xf8\x0d\x6b\x02\xcf\xa8\xa9\x3d\x60\xa5\x12\x85\x69\x41\x40\x9b\xa8\xa2\xf5\x33\x27\xed\x35\xa6\x82\x42\x6d\x0c\x48\x4d\xba\x44\xae\x22\xb1\x11\x6d\x89\xc6\xa0\x4a\x1f\x45\xe0\xcd\xb0\x48\x16\x5c\xa3\x20\x6a\xd2\x69\x45\x81\xf9\xb4\x22\xcc\x22\x69\x47\x90\x24\xba\x90\x8b\x2e\x1a\xe5\x7b\x4c\xfb\xe9\x94\x6d\xd1\x67\x75\x76\x26\x48\x2a\x86\xec\x8a\xc8\xb6\x0a\xb0\x67\xb4\x41\x12\xab\xb5\xfb\x0c\xf1\x20\x56\xea\xab\xfa\x7e\x9a\x5c\x34\x48\x63\xe8\x63\x9d\x07\xe6\x5e\xc2\x65\x78\x11\xca\xbe\xf3\x68\x22\x4b\x52\xfb\xdd\x23\xb2\xea\x5d\x91\xe0\x4b\xe6\xf4\x2a\x7f\xe5\xee\xb1\xc6\x47\xb6\x92\x95\xa9\xd9\x5c\xba\xdf\x3b\xe9\x8a\x85\x02\x13\x86\x26\x1c\xf3\x2c\xcc\x57\x5b\x75\x5f\xf2\xea\x3a\x9c\x17\x31\x1f\xca\xe7\x18\x86\x60\x3f\x6b\x0a\x9b\x65\x66\x3d\x19\x9b\xb2\x35\x11\x51\x57\x5a\xb9\x06\x78\xe6\xb8\xc7\x45\x07\xbc\x7c\x98\x20\x5e\xe5\x7e\xa5\xf4\xb4\x6d\x3b\x77\x1a\xab\xd8\x04\xaa\x85\x94\xb6\xba\x51\xc5\x3e\x27\x90\xbc\xf9\xc9\xc6\x4a\xcc\x4a\x4e\x01\x70\x3b\xd2\xbe\x81\x9b\xc0\xe7\x56\xd9\xa9\x0b\x98\xcf\xe9\x13\xc3\x55\x6a\x28\xa6\x3f\xb6\xe6\x6b\x0a\xca\x1c\x3e\x32\x25\x77\xd0\xe2\x21\x1c\x9c\x4d\xaf\x0d\x18\x9f\xa1\x3c\x8f\x53\x5f\x45\x1d\x23\x20\x1a\x92\xb9\x89\xdd\xd9\x63\xec\x7b\x74\x88\x03\x6e\x4f\xc0\xc2\xa9\x9c\x1d\x3b\x4e\x13\xf6\xa2\x64\x34\x87\xf7\x8e\x9e\xea\x32\xcf\xa9\x17\x2b\x57\xfb\x92\x4f\xdb\xd9\x41\xa0\x6d\xb9\xe4\xca\x8a\xb3\xda\x49\xea\x94\x88\x9d\x83\x23\x07\xeb\xc3\x41\x5c\xe0\x27\xbd\x0a\x06\x57\x9b\x87\xdf\x09\x8f\x15\x1a\xc6\x00\x4a\x06\x09\x56\x65\x9b\x7d\x5b\x62\x40\xc4\x62\x59\x72\x75\x32\xd0\xa6\x78\x44\x3b\xdf\x2e\x72\x19\x90\xc3\xae\x2d\xcf\xd3\xf4\xc3\x00\x60\x99\xb7\x98\x94\xee\x16\xb2\xed\x6b\xdc\xb5\x42\xa5\x47\x8b\xab\xa7\xfb\x10\x2a\x24\x0b\xfe\xfb\x36\xd5\x4b\x18\xf2\xd2\x35\xc9\x71\x80\xa5\x2c\xb6\xb3\xdc\x57\xce\x0c\x5d\xcf\xe1\x35\x4f\x1b\x23\x59\x07\x45\x3d\x45\x35\x47\x78\x30\xe2\xc8\x55\x67\x02\xe4\xc1\xc9\xb0\x53\xea\x25\x81\x10\x50\xcf\xab\x09\x65\xad\xc2\xb6\x29\xc1\xbe\xe0\x31\x25\x2d\x63\x59\x10\x28\x62\x6c\x74\x51\x57\x35\xa7\x62\x78\xf6\x86\xc6\x39\x0f\x03\x24\xdb\xa1\x59\xe7\x46\x84\x59\xfb\xbe\x56\xe9\x59\x5a\x25\xe4\x39\x50\x32\x22\x65\xa7\x5a\xd6\x60\xcd\x4d\xe0\x73\xab\x7c\xf7\x05\xe0\x13\x0f\xb1\x59\xc0\x05\xb4\xf0\x50\xf0\xb0\x3d\xf2\x4e\x66\x9d\x94\x75\x7a\x62\x33\x52\x36\x22\xc1\x11\x6c\x5a\xdc\x5c\xac\x86\x97\x1d\x60\x10\xa2\x86\xc1\x34\x6c\x6e\x1f\x5b\xed\xb4\xd4\x73\x28\x99\x77\xd1\xda\x06\x17\x06\x22\xdd\x01\x37\x2d\x7a\x35\x05\xc2\xc9\xd9\xab\x64\xd7\xd2\xf3\xe2\xbb\x1b\x38\x4b\xee\xa6\x68\xba\x47\xa7\x0a\x39\x57\x67\x74\x9e\xd8\x35\xbd\xee\xf5\xa0\xca\xcc\x89\xfd\x02\x02\x5e\xc8\x55\x29\x4d\xb8\x31\x89\xcd\xd9\xab\x6b\x61\xc6\x55\x23\xbc\x2c\x7d\xdd\x9a\xb0\x4d\xc7\x5c\x42\xa1\x67\x40\x75\xc6\xed\x64\x1e\x4a\xbd\x6f\x17\xb9\x51\x88\x38\x39\x94\x58\x39\x8a\x09\x5e\xec\x31\x37\xae\xf8\xa9\x4f\x2a\x77\x57\xcd\x86\x06\x6a\x52\xb4\x72\x3a\xc3\x14\x14\xb2\x75\x7c\x99\xd3\x13\xe1\x9e\xc9\xd1\x63\x36\x4c\x09\x54\xf3\x21\xf0\x68\xdc\x48\xd6\xe6\x02\xb6\x08\x12\xa4\xb4\x92\xc2\x23\xc1\xda\xe5\x6a\x6a\xa2\x57\xf9\x62\x82\x49\x7e\x4e\x05\xa0\x84\x74\xdf\x8e\x53\x20\xbd\x67\xd3\xcf\x09\x30\xf3\x8d\xad\xe8\x58\x41\xdf\xf6\x2d\xd5\xb5\xaf\xd9\xc6\x74\x95\xec\x3a\x44\x5c\x8b\x98\x21\x83\x75\x16\xcc\x86\xb0\x10\x88\xb5\xb3\x1d\xba\x28\xc6\x80\x73\x5d\x19\x03\xed\xa0\x26\xfa\xb0\x75\xe9\xe2\xcd\xdd\xbd\xb7\xaa\xa0\x5d\x20\xbb\x78\xd1\xa0\x4e\xd5\x3d\x3d\x13\x37\x1a\x66\xac\xc9\x84\xa7\xda\xf7\x83\xbb\x3c\xf6\xb0\x00\x0a\xca\xd2\xd1\xb6\xb4\x40\xd0\x68\x57\xd1\x69\x5a\x6d\xc6\xc1\x72\xb7\x01\x68\x3d\x3a\x4f\xaa\x02\x46\xed\x3c\xc1\x61\x43\x1f\xca\x54\xd4\xcf\xd4\xfc\x1c\xde\x89\x01\xdb\xd6\xcd\x45\x66\x2b\x2a\xf6\x9d\xfb\x38\x70\x8d\x24\x9f\x82\x6a\xb7\xed\x00\x2e\x0d\x60\x03\x79\x05\x21\xf9\x66\x8d\x76\xab\xdb\x96\xb8\x63\x82\x3a\xbf\xca\x6c\x45\x3d\x2f\x52\xf5\x62\x38\xf7\x1c\x0c\xeb\xeb\x76\xa4\x1c\xac\x08\xa0\xda\x19\x0e\xed\x53\x46\x87\xe9\xa0\xed\x74\xab\xc5\x27\x7d\x55\x13\x00\x5d\x0f\xe7\x4d\x76\x69\x11\xce\xee\xb3\xaa\x23\x37\xd1\x7b\xeb\xa1\xd4\x38\xe1\xbe\x38\xa3\xa0\xa7\xb0\x6c\x41\x9f\x6d\x85\x6c\xb0\x8b\xb2\x4f\xa4\xa0\x40\x46\x6a\x7e\x90\x65\xdf\x05\x07\xc1\x67\xde\x57\x22\xeb\x2e\x55\x0d\xc2\x0a\xa3\x5c\xdb\x56\xce\x8a\x94\x7c\xcf\x20\x91\xab\xfa\x8c\xb9\xa3\x25\xa9\x48\x97\x75\x35\x33\x9a\xde\x3a\xe0\x38\xab\x53\xd1\xd1\x41\x5f\xfa\x14\x78\x26\x67\x70\x47\xd2\x2d\x4c\x41\x43\xaf\x3a\x13\x73\xb2\x5c\xf6\x88\x9d\xd8\xb5\x2d\x79\x73\x12\xa5\x4c\x0a\xdc\x5d\xe0\xc0\xb9\xa5\xb2\x21\x97\xd8\x5c\x53\xb4\xea\xca\xcf\x78\x83\x15\xee\x23\xe0\x73\xab\x9a\xfc\x05\xe0\x53\x55\x39\x91\xab\xd8\x2a\xb2\x0d\x0c\xc4\x52\x93\xb1\x2a\x2e\xc2\x79\x2a\x79\xe5\x6b\xe3\x35\xc0\x12\x4e\x36\x03\xd1\x0a\x54\x75\xd5\xeb\x9d\x7a\xe7\x13\x13\x46\x18\x5f\x5b\xf6\x1b\x32\x31\xe0\x1d\xa3\xe0\x64\x83\x28\xa2\x28\x48\x12\x93\x42\x4d\xc4\x98\xbb\xdf\xe3\xbc\xaa\x98\x1b\x1b\xe8\x18\xd9\x82\xf1\x9e\x7d\x93\x61\x0b\x7a\x6f\x78\x24\xc4\xce\x6d\x0c\x08\x25\x3b\x32\xef\xd4\xd5\xe1\x62\x2b\x40\xb1\xab\x0c\xef\xc4\xee\x1e\x70\x95\xd8\x6a\x3c\x20\xfb\x92\xb7\x5d\xae\x9d\x98\x65\xb1\x1b\xd4\xc9\x25\x76\x80\xba\x26\xe2\x16\x89\x7c\x6a\x07\x05\xea\xaa\x84\x73\xdb\x5a\x4a\xc8\xec\x82\x5a\x27\x81\xd2\x6d\xa7\xa3\x14\xed\xf8\x19\x32\x20\x4d\x18\xec\x58\x39\x9b\xeb\xca\x9f\x4e\xdb\xed\x18\x57\x59\xef\x49\xf0\x61\x10\x59\xd9\x7e\xb2\x63\x1e\xc6\x59\xb5\xd2\xcd\x08\x45\x62\x32\xb2\x96\x41\x92\xcb\x52\x99\xd3\x03\xeb\xb0\xdb\x44\xbe\xea\xca\xfb\x2e\x1d\x82\x5c\xae\x3e\xaf\xd3\x4b\x1f\xd5\x61\xf7\xc5\x50\x76\xc0\x0d\x22\xbe\x0c\x2e\x05\x4f\x09\x8d\xe8\xb3\xc6\x5e\x94\xab\xc0\x87\xc6\xc5\xf3\x92\x80\xec\x9e\x65\xc2\x28\x5c\x24\x6e\x15\xaa\x41\x49\xc1\x8e\x6d\x6a\x32\x7f\xe8\x21\xfc\x49\x36\x3a\xe0\xae\x8e\x68\x6f\x32\x5b\xbd\xf4\x3b\x5e\xfd\xba\x3f\xf9\xce\x6f\x7f\xe0\xf7\x7d\xcd\x7d\x5f\xfd\x47\x77\xfb\xf7\x8f\xfe\x89\x27\x86\x57\xfe\xc0\x0b\x1f\xfc\xfe\x3f\xfc\x2b\xef\x78\xef\xc7\x7f\xe0\x8d\x3f\xf0\xa7\xcc\x56\x7f\xe1\x3d\xdf\xf3\x90\x6f\xbd\xe3\xf1\xbf\xfb\x85\xdf\x11\xfe\x16\xf9\xd8\x37\x7c\xda\x47\xe9\x9f\x7e\x7b\x7e\xeb\x6d\x3f\xf2\xb3\x3f\xfb\xd5\xaf\x0a\x8f\xbd\xc7\x8d\x93\xad\x3e\xf1\x11\xcb\x13\xdf\xf3\x35\x6f\xfc\x1b\xdf\xfa\xc3\x2f\x55\xcf\xbc\xfd\x17\xef\x77\xc7\x27\xdc\x3b\xbf\xff\xf6\xf9\xfb\x6f\x79\xef\x7d\x1f\xf7\x55\x1f\x7a\xdf\x8d\xb6\x28\xfe\x9a\x87\xbb\x3b\xfe\xb9\xfa\xbe\xbf\xf2\xf5\x1f\xf5\xc6\xf7\x91\xbf\xf3\xfd\xee\x61\x0f\xfd\xb9\x8f\xfd\x27\x5f\xf0\x6b\xef\xf9\xce\xb7\x8d\x3f\x78\xdb\x3f\xf9\xaa\x1b\x42\x5f\xf9\xe2\x1f\xf9\xae\xf7\xfc\xd1\xcf\x7f\xee\xf7\x87\x77\xfd\xec\xd7\xbd\xe2\xb9\x3f\xf9\xac\xaf\xfd\xae\xbf\xf9\x5a\xf0\x39\x0f\x2c\x7f\xed\xc9\xb7\xfd\xce\x57\x3c\xfc\x0d\x37\x84\x7e\xb0\x3f\xe0\x1f\x7e\x1f\x7a\xe6\xeb\x9e\xf5\x45\x3f\xff\x90\xf2\xb1\x2f\xff\xb1\xbb\xf3\x47\xdd\xff\xc5\x4f\xd9\xee\xf9\xf1\x8f\x78\xec\xfb\xdf\xfb\xe4\xe7\xff\xfe\x0d\xa1\x9f\xfe\xa9\xcf\xfb\x4b\xf7\x7c\xe8\x2b\xdf\xfc\x2b\x3f\xfc\x99\x7f\xfc\xb2\x1f\x78\xf9\x97\x3f\xec\xbe\xe5\x4d\x7f\xe7\x4d\xa7\x79\xea\x93\x9f\xff\xc4\xaf\xf9\xe3\x9f\xbf\xfb\x0d\xa1\xee\x07\xde\xf2\xf9\x7f\xff\x2e\x0f\x79\xd6\x3f\xfd\x89\x87\xbd\xf3\x01\xbf\xfc\xe6\x5f\xfe\xec\xff\xdf\xfb\x5e\xf2\x9a\x17\x3d\xf6\xa7\x9e\xf3\xbc\xe7\xfe\xe8\xdf\xfa\x47\xaf\xbb\xd1\x18\xf6\x53\x9f\xf6\xf0\xbf\xfa\xdb\xcf\xfc\xd9\xf4\x18\xf3\x9b\x1f\x3c\x05\xfc\xff\xff\xf5\xcf\x7e\xdb\x97\x3d\xed\x1e\xf7\xff\x8e\xef\xfd\xc7\xdf\xf8\x9b\xdf\xf4\x69\xe7\x67\xfd\x0f\xb3\xd5\xad\x4e\xf5\x02\xed\xcb\x31\x87\x68\x81\x1b\x5e\xab\xab\xbe\xed\xdc\xee\xdc\x7b\x60\xb6\x73\x8b\xca\x78\x5b\x8a\x94\xdd\x64\x72\x64\x83\xa2\x9e\x6e\xc4\xab\x48\x5f\xf4\x90\x1a\x5b\xbd\xc9\x27\x38\x01\xc5\x18\x70\x82\x71\x02\x30\xa6\xa8\x62\x5e\xf9\x20\x3b\xe6\xd9\x1e\xdd\x2d\x5b\xa3\x9d\xd2\xab\x14\xe7\x54\x5d\x85\x3d\xaf\x74\xe3\xa9\x5b\xe8\x67\x61\x08\xb0\xde\x43\xcc\x5d\x69\x25\xa8\x29\xa0\xd3\xd1\x63\xed\xe7\x22\xa1\xbd\xb0\xfe\x50\x54\x2e\xa9\x59\xd2\x8f\x3e\x65\x92\x4e\x4f\x35\xc6\x84\x71\x2b\x1b\xc7\xab\x8d\xdb\xd9\x69\x03\xd6\x9b\x31\x89\x0a\x08\x5c\x85\xbb\xd4\x2f\xa5\x34\x6f\x0f\x54\x8e\x22\x0d\xea\xc0\x2e\x52\xa1\x20\x34\x3a\x02\x9e\xbe\x73\x66\x09\x02\x60\xb9\x93\x8e\xeb\xbe\xa5\x75\xb9\xaa\xe4\xb8\x9c\x6c\x5b\x0e\x0c\x26\x65\x16\x26\x9a\x3c\x63\xf1\x64\x4c\x54\x20\x43\x2f\xfe\x34\xf6\xb4\x67\x97\xa9\xd8\x3d\x2c\x12\x94\xd3\x5e\xa5\x7d\xcb\x01\x56\x21\x17\xda\x48\x4a\x1a\x09\xc4\x09\x45\x4c\x2c\xeb\x40\xb0\x5b\xe0\xd0\x26\xe0\x32\xbb\x04\x07\xd9\x5a\x41\x22\x3a\x72\xd1\x93\xd0\xbe\x4e\x7e\x4a\xc5\x05\x5f\x47\x9c\x39\x26\x8f\xfd\xc9\xa6\x76\x24\x06\x88\x16\xbf\xc4\x04\x75\x2d\x1e\x8b\x6c\xa3\xc5\xe5\x4c\xf5\x26\xfa\x79\x2b\x9c\xbe\x00\x7c\x7c\x31\x61\x5f\x7a\xd2\xd8\x1f\x77\x12\xe3\x5d\xb5\xb4\xa8\x9d\x6a\xb8\x4b\x7f\x4c\xc0\xfc\x02\x26\xe0\x81\x4d\xec\x8e\x81\x04\xdb\xae\xea\x19\x53\x12\x4f\x27\x61\x17\xc7\xce\x3b\x16\x19\x81\x99\x72\xc4\xfd\xc0\x53\xb6\xad\xb3\x04\xc5\xf0\x24\x74\xe8\xd1\x7a\xaa\xcd\x1e\xf3\x2a\xe7\xc5\xc2\x78\x29\xd3\x86\xea\x26\xe7\x1c\x66\xb6\xb3\x9d\x6f\x41\x0c\xe9\x99\x45\xe8\x90\x7b\x25\x01\xd5\x82\x03\xd2\xdb\x0a\x9d\x33\x57\x69\xdf\x75\x61\x59\x0b\x35\x21\x5b\x29\x9c\x13\x63\x46\x2c\x38\x0b\x85\xf0\x20\x13\x05\x30\x7d\x74\x67\x8c\xf4\x50\x07\xe0\xf0\x1c\x20\x5e\x95\x99\xc8\x0e\xd6\x6c\x34\xc4\x61\x21\x63\xf0\x35\xab\x20\x16\x0a\x7d\xe0\x46\xc7\x09\xb8\x9d\x3b\xf5\xcd\x71\xdc\x3b\x3d\xfd\xbe\x9b\x71\x15\xd5\x5a\xf7\x6d\x64\x71\x02\x5d\xd0\xa2\x76\x88\x36\x9e\xf7\x26\x11\x14\xc8\x9a\xee\x17\x5d\x42\x12\xc7\x0c\xde\x85\xb3\x46\x75\xda\x44\xaf\x6a\x6c\x46\x81\x35\x59\x26\x5f\xa0\xe3\x2a\x6b\x7f\x50\xa9\xf5\x1c\x13\xc9\xad\x72\xd2\xa4\x6a\xa9\xf9\xc6\x73\xde\x12\x54\xac\x35\x99\xae\x7a\x4f\x66\x80\xdb\x6a\x8a\x92\xca\x1b\x0c\xe4\xb1\xae\xfb\xea\xb7\x90\xf3\x26\xbc\xb2\x72\xad\x64\x8c\x23\x75\x59\x73\xec\x7a\x23\x43\x2f\xf6\x26\xf0\xb9\x15\xf3\xbb\xc2\x6c\x15\x9b\x36\x28\x08\x07\xa7\xb3\x32\x14\x5d\xa0\xa9\x41\xae\xa4\x69\x7f\x34\x21\x62\xa7\xea\xe4\xae\x60\xcc\x06\xa8\xa5\xae\xe9\xaa\x2b\x3f\xcf\x1a\x46\xec\x4c\xb1\x50\xb5\x86\x0a\x4c\x1d\x7b\x5e\x92\x90\x29\x32\x17\x2c\xaf\xc4\x92\x79\x42\x26\xf4\xdc\x45\x9c\x91\x5e\x65\x71\x32\x5a\x0e\xc5\x77\x63\xc0\x3e\x5c\xe5\x07\xf5\xfb\xe2\x55\x95\x26\x20\x4a\xfd\x3e\x53\x17\x8b\xe9\xd4\x81\x04\x03\x3b\x41\xc3\xea\x2a\xcf\xe9\x19\xbb\x49\xc5\x2e\x94\xd0\xbd\x55\xe5\x4e\x20\x5a\xf1\x21\x26\xd2\x69\xdd\xec\xd9\x13\x80\x72\xa2\x86\x93\xb5\x8a\x02\x0e\xc6\x55\x4d\xbc\x20\x28\x46\x82\x63\x27\x8b\x33\xf3\x32\xa5\x27\x05\x2d\x68\x2f\xf5\xe4\x1a\x9f\x8a\x76\x81\x90\x5d\x43\x52\xb9\x64\xba\x11\x37\xaf\xca\x07\x68\x40\xa0\xde\x4e\x9a\xb7\x19\x22\x3a\x03\x68\x13\xcf\x33\x6c\xb8\x70\x9d\xd0\x0a\x61\xda\x42\x36\x2a\xf8\x94\x0a\x11\x62\x81\x51\x5e\xc5\x06\x65\x9c\xd3\xa3\xc8\xbb\xcb\xa0\x76\xcc\xf0\x52\x74\x76\x67\x6f\x4e\x09\x28\x13\x20\xdc\x9f\x62\x32\xe0\x84\x14\xb4\x70\x11\xaf\xf2\x3b\x04\x75\x2e\x4a\x89\xc4\xbb\x90\x95\x60\xc3\x01\x93\x07\x68\x3d\xb2\x4d\xf1\x89\x36\xbb\xa7\x43\x53\xc9\xd1\x62\x0c\x36\x02\x0a\x8a\x6e\x02\x9f\x5b\x69\xc9\x0b\xc0\x67\x1f\xb6\x76\x53\x28\x35\x3a\x9c\x85\x2f\x80\x48\x4b\x21\xd7\xa0\x05\x1f\x97\x2a\x38\xd8\x28\x6a\x66\x6d\x92\x95\xe6\x9b\xe6\x57\x0d\x29\xa3\x75\xd1\xe6\x4e\x29\x93\xfc\x99\xea\xe2\x32\x01\xf9\x80\x60\x02\x91\xe8\x92\xe4\xda\xc0\x76\xca\x7a\x6a\x8e\x9b\x6e\xdb\x8e\x7c\xdc\xae\x32\x16\xf5\xc1\x14\x2a\xeb\xac\xfb\x79\x1a\xbd\xf6\x7d\x5f\x92\x12\x44\x82\xad\x12\x26\xb8\xac\xcc\xe2\xb1\xe4\xa8\x87\x5d\xa9\xd3\x82\x5d\xf5\x52\x11\xb6\x99\x46\x97\xe8\x4c\xe8\x42\x50\xa5\xa2\xf7\x58\x21\xd5\x4c\x1e\x76\x71\x79\x4b\x54\x04\x7b\x40\xb1\xd6\x59\xf5\xe1\x0c\x4b\x57\xa5\xbb\x76\x28\x03\xed\x85\xb1\xd5\xee\x71\x65\xd9\xf6\xd1\xda\xb0\x33\x31\x48\x23\xdb\xb7\x78\xec\xb1\x8f\x83\x31\x8a\x8f\x58\xe5\xa2\xb7\xab\xd2\x5d\x76\xd1\x81\x43\xd5\x7a\xca\x6d\x06\xa2\xaa\x3b\xca\xa8\x5a\x40\xe2\xd0\x82\xac\x67\x3e\x34\x63\xbd\xf7\x6c\xb8\xb6\x1d\xb0\x8f\xcb\xac\xf7\x02\xe4\xbd\xed\x99\x8a\x58\x15\x94\xfb\xba\xa3\x00\x03\x8e\xc7\x81\x93\x66\x74\xf4\xad\xe3\x86\x13\x3b\x7c\x6a\x50\x86\x9e\x2e\x33\xa0\x69\x55\xe4\xe6\x8e\x58\xed\xc2\xbd\x10\x71\xa3\x75\xe6\x33\xac\x6e\x2a\x9f\x5a\x65\xcc\xf1\x23\x11\xd3\xfa\xb2\x73\x33\x55\x17\x37\x0c\x4a\xf8\x08\xf8\xdc\x2a\x3b\x75\x85\xd9\x2a\xa7\x3e\x03\x4c\x4a\x85\x9d\xad\xac\x2e\xda\xd7\x0d\x32\xb5\xf4\x85\xf2\x39\x40\x6d\xc7\x0a\x24\x99\xc5\xea\x13\xc7\x1d\xef\xe5\xaa\xe1\xb9\x68\x94\xd0\xc8\x09\x59\xaf\xe4\x14\x7c\x55\x21\xb2\xc8\x4f\x3c\xd7\x51\x13\x65\xa6\xee\x58\xc1\x83\x09\x93\x84\xab\x6d\xcd\x31\x5f\xd4\x59\x42\x89\xda\x76\xb4\xe0\xe9\xef\x64\x81\x7c\x2d\x73\xa4\xb0\x99\xcd\x45\xbb\x33\x04\x72\x0a\xb0\xca\x83\x40\x8f\x42\xcc\xde\x21\xa7\xcd\x45\xdf\x56\xa2\x08\x09\x54\x66\x6c\x14\xdd\xaa\xf0\x1c\x30\xdb\x9c\xe8\x76\xe4\xda\xa0\xe2\x85\x1e\xcc\x04\x28\xfb\xc2\x0d\xe2\xab\x27\xf9\xb2\x31\xbe\x5d\x0e\x5a\x35\x44\x01\x78\xb5\x23\x38\x00\x91\x5b\x8d\xdd\xb4\xcc\x32\x8c\x19\x9d\x6e\xc6\x08\x3c\x5e\xaa\x5d\xbd\xe3\xfb\x4e\xae\x1a\x42\xb4\x49\xa5\xb8\x3b\xce\x71\xee\x24\xed\xce\x6b\x57\x55\xf5\x59\xc0\xc5\x19\x14\xf6\x2d\xa9\x5d\x45\x0e\x65\x0f\x71\x67\x6b\x3e\xcc\xbc\x6a\xe0\xce\x9a\x48\x64\x23\x2a\x11\xab\xde\x7d\x40\x84\xae\x01\x95\x33\x82\x45\x28\x40\x26\x97\xb8\xc8\x35\xe7\xca\x39\x32\xf3\xc0\x24\x2e\x17\x9d\x09\x19\xa2\xf7\x6d\x09\x63\x82\x8d\x46\xc8\xbd\xd5\xd1\x47\x83\xf9\xc6\xab\xaa\x73\x35\x49\x92\x41\x76\x44\x21\xc3\xb1\x4e\x9f\xf4\x56\x6e\x02\x9f\x5b\xe5\xbb\xaf\xe8\xee\x45\xbe\xce\xb5\xec\xc6\xaf\xf1\x44\x36\x9c\xb9\xc0\xc0\xe2\xe0\x61\xae\x1b\x15\x23\x24\xe8\xdb\x08\x7a\xe7\x5a\xac\x7e\x3d\x4a\xbc\xaa\x99\x4c\xcb\x99\x4e\x86\xe2\x2c\xa4\x75\x2e\x2c\xda\xf2\xe9\x24\x94\xa2\xba\xc6\x07\x70\x2e\xb7\x54\x1b\x40\xdb\x6e\xa7\x36\x58\xf2\xe5\x2a\x63\xd1\xd8\x16\x1b\x00\x30\xdb\xa1\x32\xab\x4c\xa0\x92\x63\x59\xfc\x71\xfa\xd5\x30\x8d\xe7\x39\xac\x81\x92\x75\x2c\x57\x4c\x21\x64\x84\x5d\x35\xf3\x02\x37\xbe\x9e\xc2\xa0\x8d\xf8\x39\xed\x89\xd7\x25\x92\xc3\x0d\x1b\x4f\xaf\x29\x38\x8e\x80\xf7\x03\x2f\xa9\x59\xec\x19\x5f\x31\x29\x57\xf5\xd4\x12\x66\x9c\x3b\x06\x62\x16\x1f\x85\x98\xf5\xdc\x24\x00\xa8\x6f\x13\xa2\xae\x59\xde\x97\x83\x4d\x33\x86\x9a\x52\x9e\x79\xb6\x36\xd1\x76\x55\x9a\x17\xa4\xdd\x2d\x84\x26\x20\xf9\xac\xee\xd0\x48\x99\x16\x03\x2f\xd5\x30\x91\xd9\x96\xe3\xb9\x76\xe9\x76\x9c\x1d\x44\x28\x19\x85\xe9\x55\xb2\x8b\x1c\x41\x21\x78\x56\xd3\x32\x20\xdb\x88\xd4\x67\xc1\xad\x8e\xbb\xc5\xd9\x6a\x1e\x96\xa1\x21\x75\x8e\x1f\x63\x5f\x5a\xdc\x10\xbc\x8c\x83\x95\xa5\xf8\x56\x42\xac\xca\x64\xed\x8d\x9a\x51\x95\xe6\x32\x0f\xc3\x94\xe4\xc8\xe0\x15\x64\x8b\xb0\x8e\x80\x90\x10\x70\x10\x03\xdf\x04\x3e\xb7\xaa\xa0\x5d\x61\xb6\xa2\xbb\x05\xbb\x93\xb0\xd3\xbe\x39\x68\x9c\x3a\x8e\x26\x3b\x88\x05\x02\xf0\x61\xeb\x4c\xd0\xda\x53\xb8\x78\x0a\x8d\xa8\x67\x33\x57\x65\x15\x20\x98\x56\x10\xbc\x6e\x61\xb8\x91\x23\xae\x70\xb7\xc6\x37\x6e\x78\x59\xb1\x68\x52\xd4\x13\x9e\x72\x92\x36\x0a\x4a\xb0\x14\xbe\x5d\x25\x31\x42\xe1\x19\x81\x63\x69\x98\x7b\x4c\x7a\x6d\xbb\x3b\xeb\xb9\x45\xd8\x18\x83\xbb\x83\x62\x67\x8b\x6d\xaa\x0c\x08\xd0\xc9\x17\xdf\x96\xab\x86\xcb\xa0\x48\x3a\x21\xcb\xa9\x38\x21\xa7\x15\x10\xb2\x72\xf6\x82\xa1\x15\x15\x51\x4a\xfd\x92\xbc\x3a\x09\x92\xab\xf6\x4c\x31\xaa\xe9\x76\x55\xdd\xad\xb5\x71\x32\x16\xf8\x68\x03\x33\xb3\xfa\x3c\x07\xc7\x5c\xfb\x35\x69\x37\xba\x5a\xda\x1a\x46\x6c\xa1\x4a\x38\x77\x48\xe9\x6e\x97\xab\xc6\xf8\x16\xeb\x54\x82\xb2\x4e\x63\x74\x1e\x55\x70\xb1\x6b\xec\xb3\x1c\xb9\x3a\x2b\xc5\x29\x97\x90\xd5\x71\xd4\xa5\x56\x61\x6d\xdf\xd5\xbc\xaa\xc6\x04\x40\xa2\xc6\x4d\x58\x76\x41\xa4\x98\xeb\x82\xd9\xc1\xfc\x4c\x0c\x38\x0f\x59\x00\x5a\xb5\x8e\xf4\x96\xc0\x09\x95\x9d\xb1\x48\x7b\x95\x14\xdd\x4f\x49\x9c\x11\xb3\x1b\xb4\x8c\x96\x95\xdf\x45\x46\x18\xd3\x3c\xfd\xba\x19\x17\x2c\x0c\x42\x90\x33\x1d\x2e\x27\x4c\x17\x3c\x6e\x18\x41\xf1\x11\xf0\xb9\x55\x4d\xfe\x02\xf0\xf1\x16\xd6\x18\x94\xc9\xeb\x3e\x61\x60\x48\x74\xb8\x9a\x09\x77\xe3\xb0\x5d\x28\x3a\x46\x42\xbb\x15\xb8\x24\x0e\xca\x11\x05\x3d\xaf\x9a\xe2\x44\x9d\xb0\x69\xc7\xcc\xdb\xaa\x9b\x09\xcc\xab\x4c\xad\xeb\x99\x4d\xa3\x8a\x1e\x1c\xee\x6b\x18\x70\xa5\x1e\x9b\x20\xb2\xa5\x47\xde\xae\xa2\xd3\xb8\xf0\xc5\x0f\xa8\xd8\xd9\x0f\x5d\x87\x36\xe4\xd8\xd2\xb2\x36\x2f\xb2\x5d\xa3\x41\x9b\x22\x53\x4f\x9b\xd2\x48\xce\x9a\xc8\xf7\x7c\x59\xff\x68\x9c\xb1\xb7\xd3\x6b\xb8\x63\xa9\x51\xc4\x63\x28\xe9\xd4\x7e\x64\xe7\x26\xee\x13\x73\x16\x63\xe0\x59\x05\x09\x5d\x0f\xe0\xbc\x6a\xd1\x05\xa9\xc6\x64\x9f\x8e\x55\xd1\x93\xaf\xe7\x3e\xa4\xad\x63\x8c\x65\xdd\x17\x06\x4d\xd8\x15\xc5\x87\x39\xd8\x6a\x58\x00\x7d\x55\x42\x78\x70\xd5\x80\x3f\xd8\x0c\x69\xc4\x44\xdf\xd5\x39\xf6\x94\x29\xd5\xc4\xb9\xf3\xcc\xab\xf7\xbb\x89\x2b\x33\xfb\x2c\x87\xe3\x0c\x57\x2e\x16\xaf\xb7\xcb\xd6\x59\x79\x12\xab\x5b\x7c\x67\xc2\x93\x72\xee\x63\x2e\x72\x6e\x78\x1d\xee\x3c\x14\xb3\x54\x2c\xaa\xe1\xb9\xda\xb5\x0a\x13\x92\x66\xea\xbc\x6c\xee\xd8\x10\x88\x68\xbb\x0d\x98\x8c\xc9\xb4\xf1\x23\x03\xd8\xbc\x83\x4e\x73\xb0\xcb\x15\x9d\x64\x87\xed\x44\xd3\x47\xa3\x6a\x70\x76\x31\xe7\x4d\x66\xab\x37\xdd\xfb\x71\xef\xc4\xff\xec\xc1\xe2\x7b\x1e\xf1\xb4\x37\x7d\xd4\xe3\x9f\xcb\x7e\xf6\x93\x9e\xff\xee\x57\xde\xfe\x8e\x7f\xff\xd0\x07\xbe\xe4\xee\xf4\x11\xcf\xfc\x89\x3f\xbd\x46\xf0\xa3\x9f\x76\x3c\xe9\x5e\xff\xfb\xbf\xb2\xaf\xbb\xe3\x6f\xfc\xfa\xcb\xee\xfe\x89\x5f\xfa\xb9\x3f\xfd\xd8\xcf\x7d\xfa\xf2\xe4\x8f\xf9\xe3\x47\xfc\xe6\xb3\xff\xcf\x67\xfe\x2f\x6b\x04\x1f\xf2\xf7\x3e\xe5\xb3\xbf\x7e\xbe\xfe\xe1\x1f\xf5\x09\xef\x79\xf4\x6f\xbf\xfc\xf7\x3e\xf9\xe3\xbe\xe3\xb6\x0f\xfe\xe0\x5f\xfd\x68\xfc\x05\xf7\x78\xfc\xc7\xe3\x8f\x3d\x6f\x08\xfd\xf1\x27\xff\xd7\x3f\xff\x84\x1f\x7c\xd7\xcb\x3f\xf6\x27\x6e\x7b\xd3\x7d\x5e\xfa\x85\x3f\xf3\x25\xaf\xfd\x8f\x5f\xf6\xad\xf6\xf6\xa7\x7d\x09\x79\xcb\x6f\xfd\xde\x37\xfd\xf8\x8d\xd3\xa2\x1e\xd9\x3e\xee\x39\x2f\xf8\xb5\xc7\xfc\xc8\x87\x5e\xf0\x29\xdf\xf5\xb9\x0f\xf2\xb7\xfd\xd6\xbd\x1e\xff\x9a\x37\xfc\xf2\x8b\xbf\xfa\x9b\x9f\xff\x80\x67\xbc\xfd\x85\x9f\xfd\xc0\x1b\x42\x7f\xe1\xe9\xe3\xa3\xd6\xfb\xcc\xdf\x79\xc0\xfc\xbc\x8f\xfe\xd4\x7b\xdc\xf7\x2f\xbd\xe5\x45\x9f\xf7\xa4\xaf\x1f\x1f\xb3\x7e\xe0\xb6\xdb\xef\xf2\xce\x4f\xfd\xa2\xc7\xdc\x10\xfa\x88\xef\xfc\xc1\xa7\x7e\xed\x7f\xf9\xc9\x4f\x7c\xda\xf3\x36\xd8\x5f\xf5\xf1\xe8\x45\xbf\xf5\xa3\xf2\x39\x1f\xfd\xec\x1f\x7f\xe9\xcf\xdd\xe5\x37\xee\xf9\x3d\x4f\x79\xd5\x0d\xa1\xbf\xfb\xb6\x3f\x79\xf7\x5d\xef\xf8\xe4\x1f\x7c\xcc\x17\x3f\xe8\x47\x5f\xf7\x6c\xf8\x2f\x3e\xd0\xff\xe5\xbd\x3f\x2f\xbc\xf8\x7b\xdf\xf3\xa1\x7f\xf5\xa0\x7f\xf6\x93\xf5\xc6\xff\xfa\x97\x7f\xe7\x51\xbf\xfc\xb6\x7b\x7c\xd6\x3b\xff\x31\x3a\x3e\xed\xad\xcf\x7c\xf8\x63\x3e\xa8\xfe\xe0\xbe\xcf\xba\xd7\x3b\xc2\x1f\xdc\xef\xc1\xbf\xfe\x9f\xde\xf6\x96\xcf\xf8\x9f\x6b\x04\x6f\x71\xaa\x17\x7c\x01\x88\x4a\xe5\x8c\xb0\x37\xc4\xd8\xb1\x2e\x6e\x1d\x9a\xf5\xaa\x17\x6e\x39\x44\x78\xad\x46\xb3\x35\x22\xc1\x56\x68\xd7\x35\x6c\x36\x5c\xd6\x47\x47\xce\x7e\xda\x3e\xab\x50\x73\x81\x85\xa0\xba\xc1\xa2\xbb\xd4\xa2\x25\x52\x17\x98\xda\xb0\x22\xf6\xce\xd6\x69\x09\x4e\x8e\x8d\xe5\x22\xaa\x45\x90\x3f\x3a\x47\x4c\xe8\x38\x4f\xba\xe9\xc6\x36\x4d\xf6\x4d\xdb\x18\x73\xe6\x62\xad\xd3\x6e\xc3\xe5\x66\x0a\x3e\x8d\x81\xb8\xf4\x71\x95\xce\x1b\x67\x22\x64\xc7\x23\x69\x84\xdd\x96\x00\x3b\xfc\x7a\xee\x6d\xec\x20\xad\x4a\xb2\x50\x8c\xda\x0a\x3f\x36\x73\xe4\xb0\x87\xa0\x12\xb8\xea\x0b\x30\x8f\x58\xe9\x5e\xc2\x41\x50\x12\x3c\x68\x78\xe4\x80\x14\x90\x69\x5d\x56\xab\x47\xef\x5a\x48\x0b\xad\xce\x1b\xe1\xcc\xf2\x7d\xd1\x57\xd5\xf6\x09\x3d\x55\x0d\x14\x27\xc4\x22\x13\xbe\xa3\x05\x04\x5d\x53\xd9\xfc\xbe\x48\x3a\x5a\xb7\x8d\xc5\x0c\x16\x0f\xd9\x61\xb9\x03\xe5\xaa\x16\x6b\x42\xd6\x4e\x70\x63\xa3\x90\xb9\xa8\x5d\x14\xdf\xb6\x35\x8f\x8c\xba\x03\xb8\x36\x56\xb6\xdc\xa3\x38\x57\x66\x47\x1d\xee\x28\xce\x90\xab\xbe\x8a\xb6\x14\x1b\x60\x90\xba\x39\x68\x47\x22\x1b\x70\x64\x73\x89\xd2\xb0\x63\x09\x23\x9e\xd8\x33\x10\x95\xda\x79\xd6\x7c\x59\x33\x59\x6e\xce\xfa\xdf\x0a\xa7\x2f\x00\x9f\x92\xd6\x32\x83\xb6\x8c\x19\x2e\x76\x2a\xfb\x14\xd2\x10\xe8\x97\x8c\x06\x1f\x42\x75\xbe\x4c\x28\x3c\xa2\xb3\x46\x95\x21\x09\x57\x0d\xb3\xa3\x13\x1c\x4a\x76\xb0\xad\xd1\xad\xd5\x88\x7d\x1f\x87\x04\xae\x06\x90\xd1\x28\xb5\x90\x33\xb1\x79\xcc\x84\xc3\x36\xf3\x40\x67\x1e\xec\xaa\xd7\x1b\x8a\xe8\x84\x88\xc6\x8c\x90\x09\x52\xc5\x1e\x8d\x6e\x48\x39\xbd\xa3\x56\x03\x07\xc9\x9d\xfc\x4e\xf4\x3b\x80\x75\x36\xf6\xb2\x5c\x56\x5e\x3b\xad\x4a\x91\xe0\x1d\x04\xca\xd1\xd4\x1b\x5b\x98\x9e\xba\x0a\x6c\x97\x46\xa4\x6e\x12\x6c\x7d\x17\x0e\xaa\xd4\x0d\x9b\x22\xe1\xcb\xea\x0f\xc1\x60\x22\xc7\xc1\xa5\x9b\x2b\xe3\xca\xba\x31\xe2\x26\x47\xa2\xee\x20\xfc\x20\x09\x2f\x55\x4b\x8b\x4f\xbd\x45\x66\x1d\xca\xf6\xc2\xcd\xa1\x2a\x17\xd3\xab\x98\x3c\xc7\xea\x40\xcd\x38\xf4\xb2\xeb\x9d\xc2\x02\xdd\x71\x12\x52\x83\xc1\x5b\x22\x65\xe4\x54\x2b\xcf\xec\xaa\xc4\xdb\x64\x80\x0c\x4f\x71\x60\x78\x46\x37\x6a\x43\x49\x69\x92\xd7\xb9\x55\xb7\xe8\x83\xdc\xa9\xc2\x7b\xda\x90\x02\x1e\xeb\x33\x75\x77\xd5\x98\x7d\x62\xb8\x3f\x4d\xea\x67\x88\xcb\x89\xa1\x27\x42\x56\x4d\x30\x3b\x8a\x51\x2b\x08\x95\x79\x50\xb6\x60\xd9\x16\x75\x39\x59\x4d\x2b\xd1\x37\x3b\x3d\x6f\xc5\xfc\x2e\xc8\xfa\xd7\x1d\x89\x45\x08\xbe\x6c\x14\x2d\x48\x9e\x6b\xad\xcd\x09\x24\xd6\x60\x98\xaa\x50\x1c\xb1\x57\x09\x41\xef\x1b\x62\x52\x61\x7b\xce\xab\xb4\xef\x1c\x34\xaa\x1e\x5c\xa1\xa7\x31\x45\x37\x1d\xcd\x3a\x87\x3a\x45\xdb\xf9\x56\x42\x57\x80\xb2\x66\x69\xcf\x49\x7a\xdc\x13\xb7\x57\x71\x30\x6a\x24\x3b\xed\xaa\x66\x46\x41\xed\x10\xa3\xa4\xe7\x50\x87\xd8\xce\x89\xe3\xd4\xa4\x11\xc8\x41\xf4\xcd\x7b\xba\x09\xbf\xc3\x36\xaf\x9a\xd6\x4b\x51\xd1\xeb\xda\xa6\x04\x6a\x13\x1b\xc1\x72\x55\x85\xcc\x8c\x44\xa3\xa6\x6f\x75\x3d\xce\xed\x9c\xc4\x72\x7a\x40\xcd\x17\x19\x4f\x99\xae\x4a\x77\x41\xb1\xec\x5a\x18\x37\x02\xf2\x0b\x07\xd8\xee\x0e\x8c\x2d\x41\xd8\xb1\x5b\x0b\xad\xd8\x0e\x8a\x6c\xa5\x40\xad\x14\x8d\xa5\x0d\x73\xd5\xf8\x45\xee\x5a\xa1\x9a\x08\xb1\x37\x24\x9b\x95\x71\x4f\xb5\xd1\x45\x46\x4b\x49\x33\x2b\xda\x71\x89\x50\xce\x39\xc8\x68\x15\x54\xc7\xd3\x55\x86\xf7\xe8\xeb\xd8\x72\xd9\x59\x14\xce\x39\xeb\xcd\x2e\x85\x20\x56\x2a\x9e\xfd\xd6\xe1\x09\xa6\x53\x07\xeb\x1c\x1d\x91\xb4\xed\xd0\x22\x5d\x35\x0f\x77\x59\xe3\x21\x19\x23\xf2\x70\x13\x35\xc3\x80\xdd\x22\xa3\xe4\x10\xb8\x1c\x1b\x50\x40\x08\x10\xbb\xe2\xde\x12\xe0\x5d\xdc\xc1\x96\xd2\x4d\xe0\x73\x2b\x2d\x79\x45\x97\x23\x35\x50\xef\x9b\x1e\xc4\x6d\xa0\xad\x2d\x6e\x36\x87\x80\x42\x59\x57\xb6\x09\x6d\x01\x96\x54\x9e\xc0\xe6\x35\x64\x47\xe4\x5e\x2f\x5b\x85\x76\xac\x6a\xe9\x87\x8a\xa6\x9d\x79\x15\x7e\x1b\xdd\xa9\x00\x24\x1e\xd4\x84\xad\x1f\xe1\x98\x28\xee\xba\x14\x02\x39\xf4\xb8\xb3\x60\xaf\x92\x18\x5b\x0b\x09\x72\xbf\x96\x15\xab\x3e\xf2\x98\x74\xa5\xdb\x18\xe3\x64\xcc\x6e\x63\x56\x90\xa2\x89\x6c\x49\x3b\x68\xc6\xb3\x6d\x2c\xf4\xaa\x49\x13\x96\x9a\x1d\x11\xb4\x6b\xbf\x71\x5f\x4e\x48\x7d\x52\xa0\x97\xdd\xac\x8b\xac\x80\x57\x06\x97\x9d\xb7\x8d\x80\x95\x6f\xc9\xee\x95\xdb\xab\x8a\x5a\xc6\x7b\xbf\xcd\x8e\x67\x68\xf9\x28\x70\x8c\x65\x8e\x2a\x8b\x0e\x7b\xf3\x76\xa4\x65\x93\xeb\x81\x55\xb5\x0b\xd2\xab\x3b\xa2\x4f\xe6\xaa\x5f\x87\xcc\x02\x27\x2f\x3e\x6f\x59\xd7\x2c\x74\xda\xb1\xa7\x28\x1b\x9d\x83\x6a\x87\x5a\x30\x44\x09\x53\x73\xf8\x1d\x64\x46\xd7\xb9\xdb\xab\xc4\x4e\xd3\x27\x3e\x5c\x27\x72\x2d\x28\x1e\x7c\xf1\x96\xf3\x7e\xb8\x7d\x96\x0c\x07\x85\x1e\x35\xb6\x03\xdd\x8e\x64\x29\x61\xed\xe8\x4b\xb9\x8a\x83\x35\x2a\xa2\xa4\x66\xea\x84\xb0\x3f\x58\x8f\x02\x77\xb0\xac\xb5\x79\x3c\xbc\x81\xc6\x13\x34\xcd\x22\x0c\xe1\x96\x58\x9a\x14\x36\x37\xb7\x58\xdf\x2a\x3b\x75\x45\xc9\xb1\x7f\x58\x2f\x9e\x9a\xa6\xac\x12\xe7\x3b\xde\xc9\xb6\xcf\x7d\xe5\x40\xc4\x52\x56\x77\x98\x0d\x1e\xc0\x5b\x30\x3c\x3d\x96\xeb\x26\x32\x13\x19\x78\xb0\x6d\xaa\x0c\x54\xe0\x54\x26\x80\xcb\x0e\x18\x43\x24\x94\x1d\x1c\x84\x17\x0b\xaa\x9e\xa8\xa2\x63\xac\x75\x43\xd3\x9a\xab\x60\xb0\x9d\x54\x98\x2d\xc6\x92\x3d\x54\x4d\xd7\x3e\x89\x2a\xad\x5b\x11\xc1\xb4\x3b\x39\xa2\x73\x05\x00\xc6\x67\x38\x3b\xb2\xa4\x59\x7d\x95\xcb\x60\xc4\x19\xb0\x09\x12\x0a\x6d\xcb\xa1\xd6\xcc\x16\x6c\xe3\x64\x49\xfa\xf5\xe0\x9a\x86\xb0\x6e\x5e\xac\xde\xd8\x79\xd0\x3d\x8c\x83\x5e\x95\xdf\x60\x6c\xf1\x12\x07\x4e\x79\x6e\x46\x33\x0f\xe5\x79\x68\x59\xcd\x3a\x49\xf1\x9b\xe0\x15\x15\x0f\xf0\xb2\x35\xab\x12\x96\xc6\xe4\x7c\x51\xfb\x23\xcd\x24\xd2\x78\x6e\x53\x20\xe2\x27\x03\x3a\x30\xb4\xe8\xe5\x6c\x22\xa7\x95\x1c\xda\x13\x5b\x52\xc4\xa7\xa4\xde\x71\x5a\x02\xa9\xe9\x32\x51\x8c\xbd\x28\x4c\xf5\xed\xa4\x19\x2f\x71\x28\xc3\xf6\x80\x13\xd4\xf5\x98\x1d\xb7\xd3\xeb\x54\xa3\x72\x0d\x67\x29\x20\x34\x2b\xbc\x6a\xea\x3d\x85\x9e\xa9\x35\x23\xe9\xb6\x69\x2d\x4e\x9b\xe5\x3a\x7b\x71\x12\xb5\x26\xd2\xd3\x1e\xec\x6c\x16\x50\x1e\x1c\x17\xad\xa8\xe4\xf7\x74\xf3\x4c\xcf\x5b\xe5\xbb\x2f\x00\x9f\xb8\xef\xab\x82\x5b\x89\xa9\x2c\x1a\x4b\xda\x7a\x82\x73\xaa\x9d\x43\xb1\x10\x30\x35\x9d\x7e\x72\x33\x55\xcd\x59\x1f\x3b\xb4\x3e\x5f\xb5\x33\x7d\xc6\xb9\xb4\x39\xce\xe9\x3c\xc6\x85\x70\xb1\x75\x7e\xe8\xc9\xa3\x47\x49\x10\xa7\x56\x6b\xb5\x43\x1e\x2d\x6b\xe3\x46\xaf\x07\xb8\x6c\x2f\x92\x1e\x21\xb8\x6d\x02\xe3\x0d\x66\x46\x29\x44\x73\x0c\xaa\xf2\x93\x1d\x5d\xa1\x83\x6b\xcd\x50\x80\x32\xcb\xb9\xe4\x25\xa4\x93\x2e\x57\x69\x79\xcc\x69\x06\x69\x3f\x12\xa0\x72\xd9\xd2\xf0\x19\x2f\x14\x05\x4e\x38\xad\x20\x9f\x1d\xc1\x58\xf7\xc5\x73\xb7\x03\xca\xed\x8a\x4c\xb9\xcc\x03\x92\x61\xd1\x61\xa1\x79\x0b\xb9\x17\xe5\xa2\xa1\xc1\xa5\x92\x66\x2b\xd9\x6b\x05\xda\xe1\xab\x44\xfc\xce\xdb\x26\xed\x02\x73\x49\x17\x15\x84\x49\x18\x2b\xcf\x22\x62\x7f\x70\x8d\x89\x72\x43\x51\x5b\x3b\x16\x11\x6f\x53\x9b\xcd\x1e\x0d\xd0\x6c\xa3\xf4\x34\x2c\xaa\x63\xbb\x8f\xab\x12\x05\xfa\x0c\x40\x9a\x79\x8a\x99\xcf\xd2\xf3\x88\x04\xac\xfb\x5e\x25\x60\xf9\xe0\x5b\xc4\xaa\x65\x83\xc1\xb1\x1a\x03\x60\xf4\x87\xa6\xe9\xaa\xd2\x34\x0a\x6d\x49\x46\x96\x35\x1c\xab\x66\x79\xf6\xc4\xa4\x80\x9a\x28\x6d\x3b\x4f\xd4\x15\xb1\x6c\x4c\xd0\x85\x6f\x41\x9c\x1b\xd6\x2c\xdd\xbc\x40\xf9\x56\x15\xb4\x2b\xb6\xb7\x73\x02\xb7\x74\xb8\x43\x13\xc5\x33\x28\xe9\x54\x27\x16\x48\x01\xc1\x4e\xe8\x17\x2c\xd6\xd5\x9d\x51\x5a\xa2\xcf\x51\x77\x35\x74\xb9\x0a\x7c\x74\x43\x82\xb6\x45\x69\x1e\x47\x49\x01\x09\x36\x4a\xea\xf5\x64\xab\xb0\x74\x4f\x1c\xef\x90\x70\xc5\xa1\xdb\xc4\x32\x44\xed\x0b\xb8\xca\x73\xca\x37\xa5\xc2\xe8\x9c\x62\x14\x88\x00\x53\x1d\x93\x22\xaf\x19\x56\x44\xb2\x65\x5d\xd7\x16\x8a\xd5\x41\xec\xb3\xa5\x65\x5d\x46\x1e\x57\x0d\x14\xee\x8b\xaa\x9d\xd4\xc3\x6c\x6a\x69\x22\xeb\x2a\x4e\x34\x67\x74\x10\xda\xcc\x83\x61\x69\xd3\xbb\x97\x7a\x0f\x84\x9e\x73\x43\x27\x56\x57\x95\x03\x76\x11\xf4\x36\xf8\x94\x78\x55\x9b\xc8\xf1\x10\x2d\xf8\x09\xec\xa9\x32\xc4\x93\x2a\x6f\xf6\xc4\xf3\x2e\xe2\xca\xc1\x1a\xe2\xb1\x5e\xc6\x4b\x0f\x2d\x16\x56\xb5\x08\x3a\xf9\x28\x12\x47\xa2\xa2\x90\x6c\x05\x33\xaf\x26\xac\x63\xef\xbc\xcc\x92\x43\xf7\xe7\x2e\x32\x9c\x10\x5c\xd5\x18\x71\xe6\x3d\x8c\x3a\x62\xad\x88\x9a\x34\x5c\xd4\x63\x18\x73\x3a\xec\x12\x93\x1f\x9e\xc3\x4f\x3a\xb6\x38\x2a\xb2\x77\x5b\xeb\x8a\xc8\x55\x6c\x50\x1e\x49\xe0\xb2\x69\xa1\xab\x9e\xe5\x58\xeb\x0e\x81\x50\xa3\x66\x22\xf0\x2e\x4e\x3c\xa2\x0c\xad\x8f\x0d\xef\xa7\x5b\x5d\x74\x4a\xa9\x9b\xc0\xe7\x56\x35\xf9\x0b\x12\xce\x4b\xa3\x3e\x2f\x0c\x6a\x62\x8f\x16\x68\x83\xbb\x55\x1e\x9c\x21\x47\x99\x84\x17\xf0\x3c\x6d\xa7\x6b\x9e\x59\x31\xba\x94\x75\x9e\x57\xd9\x87\xa9\xe9\x5d\x1f\x70\x3d\x99\x08\xbb\x6a\xab\xe6\x32\x92\xba\x70\x0c\x4f\x30\x73\xdf\xe9\x36\x43\xef\xa5\xa0\xc5\x96\xb5\x36\x93\xb3\xb9\x6a\xa0\x30\x25\x79\x49\x32\x06\x0f\x71\x94\x0d\x6e\xb0\x43\x42\x95\xf1\x7b\x4e\x26\x85\x15\xbb\xba\xad\x82\x43\xc9\x43\x41\x18\x41\x70\xea\xab\xb4\xbc\xde\x11\x07\xd9\x4c\xb0\x30\x18\xbc\x5c\x19\xe6\xb1\xc8\x5d\x56\x3b\x8b\xee\x96\x9f\xd0\x60\x7e\xcc\x5d\xa3\x43\x6e\x7d\x41\xe5\xaa\x25\x8f\x24\xf2\xa4\xe4\x62\x85\x4f\x33\xc3\x0c\x16\x4f\x6a\x49\x41\xd4\x9e\xf8\xe0\x84\x95\xa2\xe0\x1a\x02\x51\x77\xfe\x69\x04\xe2\xcb\x1a\xfa\xe9\x8e\x0a\xc4\x73\xd5\xa7\x10\xd3\x52\xaf\x10\xad\xd1\x0c\x1a\xd8\x62\x29\x01\xce\x16\x1a\xad\xb3\xb5\x69\x77\x12\xac\x32\x3b\x2f\xcb\x83\x0d\x72\xf4\x01\xf7\xe3\x48\x6d\x45\xe1\x50\xab\x47\x24\xe5\x80\xfb\xca\x94\x86\x0b\x5f\xf4\x00\xeb\x26\x1a\x07\xab\x27\xa6\xe7\xbe\x5c\x65\xc9\xb0\x3c\xa3\x56\x00\x6c\xed\xd8\xb3\x20\x4c\xcf\xea\x7c\x37\xcb\xdc\xa4\x41\x5b\x2f\xc0\x62\x20\x0d\xe3\x1c\xcf\x4c\x63\x2b\x61\xab\x37\x99\xad\xbe\xf7\xe3\x5f\xfb\x94\x2f\x92\xec\x73\x3e\xe9\x75\x77\xfd\xa5\x07\x7c\xe1\x2f\xbd\xe9\x03\xff\xe8\xd1\xb7\xbf\xfb\x9e\xf5\xb5\xef\xb8\xeb\x2f\xfe\xa7\xef\xfa\xa1\xfb\x3c\xec\x4f\x99\xad\x1e\x7e\xc7\x2b\xe3\x8f\xfd\xf3\x4f\x10\x5f\xba\x7d\xdd\xa7\xfc\xc1\x57\xde\xfd\x8b\xdf\x74\x8f\xaf\xb8\xdb\x6b\x5e\x76\x87\xfa\x3f\x7e\xe5\xf1\x0f\x7d\xff\x33\x3e\xf8\x8e\x1b\x42\xb7\x1f\x0b\xcf\xbc\xcf\x3f\x7e\xd4\x17\xfc\xe1\xef\x7d\xfd\x1b\xff\x25\x7c\xea\x2f\x3e\x74\xcd\x3f\xf4\xa2\x37\x7c\xc3\x8f\xbe\xe6\xa9\xaf\xfa\xd1\x27\xbe\xfe\x85\x9f\x71\x43\xe8\x6f\xf7\x77\xbd\xe2\xdb\xde\xf6\xbe\x5f\x7b\xe0\x5f\xbe\xe3\x6e\x5f\xfb\xc0\xa7\xfc\xe0\x2f\xbd\xea\x6e\x9f\x73\xbf\xfe\x75\x4f\x7d\xdf\xed\xf9\x4d\xe6\x9b\xbf\xf0\xe9\x37\x84\xbe\xe3\x8d\xcf\xbf\xff\xcf\xdd\xf6\xa9\x5f\xf9\xca\x3f\xfb\x5d\x77\x7f\xd4\x9b\xbf\xfa\xa7\x5e\xfc\x9d\x9f\xf5\x86\x5f\xff\xfc\xfb\xdf\xf6\x6c\xf6\x4b\x77\x59\x5f\xf2\xef\xef\x76\xe3\xbc\xac\xbf\xf0\x87\xaf\x78\xe2\x37\x7e\xd7\x0f\xfd\x5f\xf1\xcb\xbf\x74\x79\xf2\xa7\x3f\xf5\x9e\x3f\xf6\xeb\xdf\xfa\x4b\x77\x3c\xe4\xd9\x5f\xfb\x0f\x9e\xf1\xbb\x9f\xff\xd2\xa7\x8c\x1b\x42\xff\xf0\xa3\xfe\xe6\x6b\xbf\xe4\x17\x9f\xfe\x47\x8f\xbf\xeb\xeb\x7e\xff\xb7\xe6\xc7\xfd\xcd\x67\xdd\xe5\x6f\xfc\xb9\xcf\xfb\xf8\xe7\x9d\x2f\xbb\xfb\x13\x9f\xf1\x1f\xef\xfb\x12\x75\x43\xe8\x53\xcb\xbd\x7f\xe0\x7c\xff\xc7\xa0\x0f\xfe\x36\xe0\xf7\xfb\x71\xf2\x95\x4f\xbd\xcf\x5f\xf8\xb6\x2f\xb8\xed\x43\x3f\xf0\x84\xb7\xde\x4f\xff\xb9\x87\x7e\xf7\xcf\xdd\x10\xfa\xab\xdf\xf4\x1f\xde\xfd\xd4\x67\x7c\xe7\x6b\xdf\xfe\x4f\xff\xf0\xf3\xce\xff\xfc\x2f\x3e\xf3\x76\xf3\x9c\x27\x3d\xe7\x1b\xdf\xfa\x0f\xde\x16\xc0\x5f\xbf\xd7\xcb\xeb\xbd\xbe\xe1\x23\x3f\xc2\xad\x4e\xf5\x4f\xfd\x08\x7f\xf7\x8b\x9f\x21\x9f\xf9\xc2\x17\xbd\xeb\xb1\xff\xe2\xb6\x4f\xfa\xf9\x07\x3c\xef\x1f\x7c\xe8\x8d\x5f\xf1\xa1\x5f\x78\xd4\xab\x9f\xf3\xb8\x97\xbe\xed\x1d\xf5\x37\xde\xfd\xba\x1b\x42\x5f\xf1\x94\x97\xbc\x72\xfd\xb1\x2f\xf9\xc0\xeb\xfd\xa3\xdf\xf5\x82\xc7\x3e\xf3\x09\xdf\xae\x3f\x44\x9e\xf3\xb3\xe9\x85\x4f\xe6\xe4\x6e\xbf\xf9\xb5\xf7\x79\xe9\x0d\xa1\x2f\xfc\xea\xe3\x35\xb7\x3f\xf1\x1d\xaf\x7f\xec\xbd\xbe\xfd\xfb\xfe\xcc\xcf\xfc\xf4\x5f\xfc\x98\xfb\x3c\xe9\xb9\xbf\xf8\x90\xdb\xdd\xff\xf6\xbc\xef\x79\x8a\xfa\xa1\x7f\x7b\x63\xe8\x8b\x9f\xfe\xfd\xdf\xf6\xb5\x6f\x7a\xc1\xc7\xfd\xe7\x1f\xfe\xfd\x47\x3e\xe8\x95\xaf\xf8\xc4\x3b\x9e\xff\x0b\xef\xbc\xcb\x7b\xde\xf4\xaf\x7f\xe4\x4f\xbe\xda\x7d\xec\xb7\xd5\xb7\xdf\x10\xfa\xf6\x1f\xff\xe1\xe7\xff\xf4\xd3\xbe\xfb\x83\xef\xff\xba\x57\x3f\xe0\x5e\x5f\xf9\xb7\xdf\xfa\x79\x6f\x7d\xda\xa3\x5f\x24\x3e\xe3\x41\xf3\x7d\x4f\x3b\x5e\xfe\xfa\xf4\x1f\x6e\x08\xbd\xe3\xbd\xbf\xf2\xe8\xef\xfe\xb3\xff\xfa\x9d\xef\xf8\xf2\xd7\x7d\xd5\x5d\x9f\x40\x1e\xfc\x8c\x7b\xfe\xa3\x57\xdf\xfb\x9e\x9f\xfa\xe6\xf3\xb6\xc7\x7f\xc5\x37\xbf\xf4\x6b\xde\x7d\x43\xe8\xcb\xd4\xaf\x3e\xe9\xf1\xf3\x75\x3f\xf9\x9d\x9f\xf9\x2f\xdf\x82\x1f\xff\x0b\xe6\xbe\xff\xf6\xd9\xcf\x7d\xb8\x84\x77\xfc\xd1\x9b\x1f\x79\x5b\xfc\xac\xe7\xdc\xf5\xc6\xc3\x7a\xe0\xaf\xbc\xf9\x71\x7f\xd5\xff\x35\xf0\xf8\x77\x3e\xe4\xcd\x7f\xfd\xcb\xff\xe3\x3f\x39\xfe\x64\x3c\xf5\x4b\x3f\xeb\x8f\x9e\x41\xdf\x88\xff\xdd\xeb\x5f\xf3\x0d\xff\xc3\xf1\x76\xab\x53\xbd\xe0\x33\x3c\x83\x98\xc7\xae\x0b\x1b\xc6\x6f\x29\xae\x21\x28\x3d\x14\x08\x53\x84\x3d\xd9\x0c\xcb\x3e\x16\x2f\x75\x3b\x81\x5f\xc7\x8a\xfb\x4a\x2e\x03\xfa\x60\xcf\x20\x12\xf2\xdd\x57\x54\x34\x68\x69\x87\xb3\x64\x3d\x0c\x58\x0f\x2e\xbd\x63\x4d\x65\xae\xeb\x79\x1a\xb9\xd2\xd3\x94\xeb\xba\x78\xa8\xd5\xce\x92\x11\xd9\xee\xd4\x3e\x4d\x46\x96\xe5\x6a\x35\xdb\xb5\xf2\x94\xd9\xe1\x8b\xaf\xe4\xec\x9e\x70\xb4\xb1\x6a\x97\x7c\x95\xab\x16\x2c\x7d\x6d\xa7\x8e\x2a\x91\x23\xf9\x06\xb9\x07\x76\x51\xae\xd4\x83\xa1\xca\x95\x57\xb5\x2d\xab\x69\x07\x8b\xdd\xe5\x65\x3a\xbc\x5d\x55\xf0\x58\xee\xfc\xde\xa5\xa2\xac\x0f\x84\xb7\xc5\xec\x24\x64\x38\x69\xb3\x6d\xb4\x15\x6c\x63\x77\x4e\xab\x6d\x14\x4b\xab\x10\x1b\x93\xa7\xba\xaa\xa7\x5b\x6e\x69\xdb\x3d\xd8\x64\xf5\x03\x6f\x08\xa1\x26\xce\x12\xe5\x42\xe2\xb2\x08\xa7\x8d\xe5\x8d\x22\xbf\xca\xd2\x24\xb4\xba\xac\xab\xb9\x6a\xa9\x48\xcc\x75\xa8\x18\x54\x13\x70\x1b\xe3\x10\xe7\x9c\x7a\x0b\xdc\x39\xb5\x55\x94\x26\x5a\xfc\x0a\xf0\xb2\xed\x46\x74\x41\xf5\x26\x8f\x78\x95\xe7\xb9\x9f\x35\xcb\xaa\xb2\xc2\xa2\x34\x22\x59\xf0\x3b\x5a\xa9\xa8\xa1\x89\xed\x08\x7c\x9c\x4b\x3f\x5c\x59\x4b\x59\xa6\xa3\x56\xe3\x60\x6e\xd6\x00\xb7\xc2\xe9\x0b\xc0\xa7\x57\xe3\x40\x83\xa2\x9d\x85\xe0\xe9\x8d\xad\xd9\x8a\xe2\x7d\xab\x87\x16\x42\x2e\x8e\xc1\xed\xb0\xe2\x4c\xab\x39\x8d\xc2\xae\xa8\xab\x0a\xe7\x89\x27\x0e\xf7\xcd\x2d\x73\xa2\xb0\x08\xa3\x36\xe9\x71\x4a\x4e\xd7\x6a\xcf\x24\x37\x8e\xbd\xc9\xee\x44\xb9\xb4\x15\x94\x83\x0f\x7a\xd5\x94\x74\xae\x0f\x18\x20\xde\x94\x3d\x86\x75\xab\xe0\x51\xb6\x59\x3c\xb6\x72\x26\xb0\x48\x66\x10\x89\x52\x12\x65\x44\x6b\x7b\x15\x1b\xb8\xac\x16\x6e\x4f\x15\x3c\xef\x66\x41\x5d\x43\x86\x61\x28\x26\x1c\x8b\xb0\x3d\x94\x35\xa9\xa6\xc1\xb1\xf3\x2c\xaa\x23\x70\xd9\xd7\x3d\x79\xcb\xae\x32\x9d\x90\x7d\x28\x63\x74\x2c\x4b\x96\x32\x69\x1a\x77\x74\x50\xa8\x43\x66\x51\x6c\x40\xf4\xd5\x1c\x79\xba\xc0\x65\xd9\x79\xc0\x85\xd7\xab\x06\x5a\x53\x1b\x23\x75\xce\xe1\xa9\x16\xbe\x2a\x9a\x1a\x54\x0a\xcf\x83\xd7\x55\x78\xa1\x77\x0f\x20\x24\xeb\x7a\x0e\x22\x05\x24\x90\xfa\xa0\xaf\x32\x9d\x18\xe3\xf2\x59\x8a\x3b\x4b\x3d\xeb\x6e\xe2\xb1\xd9\xfd\x80\xc7\x09\xc2\x06\x50\x5f\xc8\x44\xac\x2f\x66\x19\xeb\x21\xf6\x75\x3a\xbd\x5f\xb6\x89\x62\xd5\x0a\xcc\x36\xc4\xd9\xb4\x88\xe0\xd8\xfb\xda\x53\x04\x60\x8e\xc3\x33\xb9\x01\xad\x33\x92\x27\xd4\xc6\x56\xe2\x6b\x8f\x78\xcd\x37\xd7\x7d\x6f\xc5\xfc\xae\xe8\xf6\xc2\x0b\x28\x64\x5f\x6b\x74\x1a\x4a\x70\xa7\x7a\x64\x4e\x16\x0e\xdd\xd8\xf2\x76\xd8\xcd\xc9\xa4\x4c\xb1\x22\x5b\x02\xbb\x47\x27\xbb\x4a\x44\x39\x42\xd6\x53\x41\xce\x87\x05\xdc\x1e\xbc\xd4\xa6\x47\x10\x09\x8c\x61\x7d\x6a\xa6\xc4\x06\x67\x93\xe6\x98\xe7\x2a\xf5\x3a\xf4\x65\x3b\x73\xce\xbe\xb7\x65\x50\x88\xab\x15\x64\x6f\xa7\xa7\xa0\xf0\x84\x88\x64\xad\x2d\x60\xef\x47\x5c\x7b\x16\xa7\x59\xe3\xd6\x60\x40\x20\x5d\x95\xdc\x27\x27\xaf\x25\x18\x23\x1c\x31\xad\x4b\x13\x98\x2c\xa4\x79\x68\x95\xd4\x87\x95\x70\x41\xc2\x8b\xac\xd1\x92\x5b\x4c\x61\x4f\x67\x8b\x57\x31\x9f\x3d\x9b\xd1\x3c\x5f\x09\xc8\x1a\xa3\x21\xb7\x14\x8c\x16\x81\xa5\xa2\x89\xaf\xc7\xb1\x55\x14\x80\xe6\x68\xcf\xb1\x02\x24\x4b\xbd\x6a\x69\x2a\x91\x74\xd7\x2d\x2c\x8c\xf0\x26\x16\xec\x53\x59\x8d\x22\x73\xac\x14\x96\x2d\x9e\x52\xd5\x66\x39\x10\x16\xe9\xb3\x6c\xad\xe1\xdc\xed\x55\xb6\x6c\x43\xd2\x87\xe7\x42\xb0\x99\x68\xf7\x2b\x18\x2d\x1d\x11\x62\x3f\xe7\x3e\xcd\x20\x29\x58\x97\xe1\x49\x36\x86\x5b\x93\xb3\x23\xa7\xae\x9a\x49\x75\x82\xda\xa0\x84\xca\x1d\x04\xf8\x7d\x74\x14\x48\x5f\xe1\xf4\x9e\xb1\x03\x8f\xa1\x2c\x4f\x24\xc8\x51\x56\xd6\xb0\x4b\x60\xe2\x1b\x26\x94\x7e\x04\x7c\x6e\xa5\x25\xaf\x98\xea\x0c\x60\xd9\x63\x66\x6b\xc7\xb3\x1f\xdd\x03\xbe\x1e\xec\xcc\xfb\x9e\x2b\xb1\x7d\x35\xa7\xc8\xcb\x7e\x66\xbe\x6d\x34\xa4\xaa\x2a\x32\x57\x8d\xb6\x30\xdb\x8c\xb0\x29\x2a\x56\x7e\xca\xbc\xb7\xe6\xa5\xc0\x53\xed\x73\x17\x51\xe1\x24\x20\x68\x89\x25\xb0\xbb\x16\xd1\xa2\x01\x53\x97\x7d\xd1\x80\x23\x89\x7a\xb3\x65\xda\xe2\x76\x06\x60\x1a\x36\x7b\x03\x1b\x59\x1c\x5f\x42\xb7\xc3\xdb\x01\x0e\xb0\xc9\x13\x05\xda\xc4\x28\xe3\x2a\x36\xa8\xf8\x10\x47\xa9\x88\x76\xd1\x56\x6d\xa7\x3f\xb1\x28\x00\x35\x37\x49\xad\x0b\x57\x79\x13\xab\x49\xa7\x9f\xb6\xe2\x46\x11\x91\xcb\x55\x06\x0b\x69\x17\xed\x3b\x3c\x59\x72\x93\x5b\xa8\x7d\x99\x42\x65\xbc\xd0\x83\xca\xd4\xec\x11\x96\x19\x60\x31\xd6\x6d\x6d\xf5\xb0\x47\xbc\x5d\x65\xb7\x75\x9c\x6c\xab\x37\x90\xaa\x30\x77\xa6\xce\xda\x79\x59\x28\x81\x93\x84\xd0\x37\xa2\x63\xb3\x1b\x24\xc3\x87\x34\xa1\x5f\x14\x3b\xc6\x55\xfd\x0f\xb4\xc6\x15\x20\x1b\x5c\x11\x0e\x54\x6f\xce\x6c\x50\x6a\xa1\x2a\x49\xf9\x14\x0b\x1e\x96\x6d\x6a\x1b\x02\x81\x34\x2d\x9d\x15\xe8\xab\x9a\xa3\xf5\x72\x88\x81\x15\x60\x2a\x4e\x08\x73\x0a\x64\xe6\x55\xa7\x63\x9e\xd2\x53\xe7\x67\xd0\x54\x67\x84\x8f\xc9\x76\xd5\xe6\xe6\x70\xb9\x79\x9d\xda\xad\xb2\x53\x17\x30\x9f\xa3\xa3\x66\x43\x80\x87\xaf\x20\x67\xb1\x45\x15\x6a\x5c\x28\xf6\x8d\x13\xc0\xe2\xce\x99\x70\xbd\x45\x2c\x8f\xe8\xb7\x53\x1e\xe4\xaa\xd1\x16\xb4\x47\x8f\x5d\xd8\x2c\x55\x48\xc1\xa3\x08\x08\x77\x45\xb6\x54\xcf\x1c\x68\x0d\xe3\x80\x4b\xc8\x24\xb4\xad\x45\x06\x0d\x33\xc4\x93\xab\x5a\x59\x90\x98\x41\xcd\x8c\x16\xa2\x8e\xc5\x9e\x2b\xcb\xb4\xee\xab\x61\xb6\xc9\x63\xdf\xd2\x40\x70\xac\x15\x24\x4f\xdc\x22\x09\xcc\xb5\x5e\xb6\xc5\x7a\x3b\xcb\xb6\xfb\xc3\xb3\x1e\xc1\xe2\x01\xe4\xb4\x9a\xad\x33\xc4\x35\xcc\x26\x9f\xb3\xa1\x68\x44\x60\xab\xf4\x45\xa1\x34\x12\xde\xae\xaa\x85\xbb\x2c\x84\x10\x5d\x39\x5c\xe3\x91\x55\x61\x04\x0c\x3e\x04\x17\x8a\xd5\x01\xd3\x0c\x06\x2c\x59\xb6\x6d\x6c\x2b\x90\x82\x96\x7d\x5e\xc5\x37\x52\x17\x0b\x5b\x64\x3e\x57\xb7\x87\x9a\x1b\xda\x8f\x16\x2a\xe4\x74\x3f\x70\x91\x0d\x4a\xcf\xce\xa9\x80\x73\x12\x9b\x2c\xd6\x6d\x67\x57\xbd\xb1\xd9\x6f\x14\x71\x94\x9b\x58\xe0\x39\xd9\x81\x89\xcb\xc7\xbe\x0d\x3f\xb7\x71\xa6\xa0\x7d\xf0\xa4\xa0\x6a\x32\xd2\x38\x19\xb5\x5d\xb7\xd1\xe8\xd4\x6d\xb7\x24\x99\x04\xd3\x36\x17\x70\x48\x8c\x23\xd9\x9c\x04\x86\x8c\xb4\xe1\x5c\x8a\xde\x0b\xe0\x74\x29\xbc\x41\x86\xcb\x54\xfd\x26\xf0\xb9\x55\xbe\xfb\x02\xe6\x83\xa2\xdf\x81\x0f\xb9\x0f\x91\x15\x20\xeb\x36\x30\xc0\x08\xe5\x25\x9f\x7a\x0b\x1e\x16\xd0\x3b\xcb\xf1\x5c\x3a\x8e\x44\x9f\x2b\xb8\x6c\x27\x70\xe1\x85\x09\x81\x58\xdf\xd2\x74\x76\xcf\x74\xae\xc2\x89\x93\xa5\x8d\xe5\x15\x6d\x4d\xa5\x1a\x94\x93\x08\xae\x7e\xf7\xd6\x56\x7e\x99\x9b\x7c\xa9\xb2\x6c\x3d\xae\x06\x52\xa7\x77\xe9\x3a\x75\x69\xc8\x4c\x1a\xc2\xcb\x09\x37\x9e\x44\xe9\x16\x82\x73\xa6\xec\x0f\x45\xa4\xdc\x2e\xda\xf1\x41\xf6\x48\x54\x5d\x33\x3a\x4d\x33\xdb\xe2\x48\x2e\x53\x86\x6e\x90\x0e\x48\xef\x0c\x9c\x06\xe5\x96\x56\xdb\xf5\x99\xcb\xa2\xac\xa5\xf1\x2a\xbe\x31\xa9\x23\x64\x0c\x0c\xcf\xbc\x66\x3f\xe8\x16\xbd\x87\xc5\x88\x51\x7c\x38\xd7\xc8\x11\xde\x11\x5e\xeb\x79\x6c\xa1\xd5\x94\x4b\xbe\xce\x8f\xb8\x88\x85\xf9\xcd\x90\x08\x7d\xf7\xbe\x06\x93\x2a\xfd\x7f\x69\xfb\xf3\x28\xf0\xbe\x6b\x3e\x18\xa6\x1a\x31\x45\xd1\x98\x55\xab\xde\xbe\xaf\xd7\x90\xc6\x19\xee\x51\xd5\x47\x45\x48\x49\x68\x04\x6d\x0d\xc1\x19\xef\x3d\xe7\xdc\x33\x9f\x73\xcf\x60\x68\x4c\x51\x6d\xd5\x58\x3a\xa4\x6a\x4a\x1b\xf3\x58\x25\xc2\x83\x36\x28\x41\xcc\x12\x91\xd6\x10\x54\x44\x91\x94\xa5\x7d\xf0\xac\x9f\xb5\x58\xdf\xe5\xd7\xb5\xbe\x7f\xdd\xff\xf7\x1f\x67\xdd\x61\x9f\xbd\xf7\x67\xd8\x79\x6d\xb3\x49\xdf\xe7\x2c\x91\x24\xdf\x30\xe4\x76\x23\x29\x58\xe5\x8c\xbd\x6d\x99\x7f\xe1\xa3\xb7\xd3\x51\x96\xf3\xd5\xdc\xa8\xdb\x41\x53\x13\x8c\x1c\x41\xef\x0e\x36\xa9\xdb\xb6\x0d\x08\x6c\xa5\xbb\x1d\x09\x79\x76\x17\x25\xa8\x04\x1c\xfd\x65\x5c\x76\x81\xd5\x93\x87\xeb\x22\x75\xdf\x77\x27\x1a\x10\x9e\x62\x67\x5a\xe2\xa0\x06\x18\xea\x82\x20\xef\xac\x3e\xb0\xe5\xe9\x4f\x92\xcf\xc3\x10\xb4\x1b\x2a\x1f\x8b\x45\xc1\xf6\xda\xe9\x59\x4e\x21\xa5\xd1\x8d\x6d\xa1\xe8\xed\x80\x41\x79\x68\xb2\xb0\xcd\x19\xcc\x98\xdd\x83\x50\x20\x6b\x00\xee\xb2\x17\xd3\x83\x8f\x2d\xf0\x53\xe9\x74\x02\x8e\xd6\xa2\xd3\x68\x45\x2f\xa6\x21\x6e\x27\x08\x62\xb3\x27\xa5\x07\x2d\x4b\xaf\x41\x52\x24\x77\xb5\x18\x4c\x86\x62\x35\x33\x19\x4e\x12\x64\xbf\x86\x11\x96\xcb\x7a\x6a\x38\x94\xe2\x32\x29\x23\xb8\x11\xde\x80\x65\x75\x48\x0b\xc5\x0b\xdc\xf4\xcb\x53\xaf\xc6\xa6\x95\x4d\x98\x6e\x6d\x45\x13\x3c\xb7\x18\x8b\xb5\x23\x0f\x4a\x82\xfb\xd6\xf4\x71\xec\x9c\x65\x1b\x66\xb8\xfa\x92\xf4\x2e\x2c\x92\x35\xce\xd2\xc9\x43\xf1\x2a\xd0\x72\xa0\x53\x36\x27\x68\xee\x1a\x8c\xd9\xfb\x55\x8f\xb0\x87\x50\xa3\xaa\x87\x57\xc8\xfb\xb5\x4d\x7a\xd7\x16\x89\x42\x05\xda\x1a\x89\xc3\xb1\x10\x00\x8b\x97\xd9\x54\xde\x1d\x66\x6b\x9b\x87\x4d\x4c\x6c\x72\x8f\xfe\xf0\xca\xc9\x70\xb2\x76\xed\xf9\x2e\x1f\xf2\x00\x03\x16\x87\x0b\x7c\xe4\xac\x9b\xec\xcb\xee\x5b\xba\xb4\xe5\xb5\xda\xbe\x0d\x37\x8f\x59\xa6\xd3\xca\x65\x79\x65\x73\xf9\xab\xdc\x75\x12\xa5\xe6\x01\x81\x75\x66\x16\x72\x39\xcd\xbc\xd5\x07\xbc\xfc\xd9\x86\xae\xd1\x5c\x0b\x8f\xb5\x11\x91\x6c\x41\xa8\x6c\x90\x1a\x52\x1f\xbd\xcf\xe2\x61\x98\xfc\x1d\xc9\x27\x81\x81\x00\x1f\xc9\x91\x06\x51\x73\x6e\x17\x60\xeb\xd8\x1d\xc1\xc6\x99\x8a\xe1\xc5\x9e\x08\xa1\x1a\xd1\xc5\x10\x68\x01\xde\xb6\x1d\x00\x74\x26\x88\xe9\x96\xee\x2c\x76\x3d\x7d\x85\xf1\x3a\xfd\x3c\x2c\x2a\x07\xe8\x48\xa7\x62\xf4\x69\xf4\xae\x8e\x3a\xc1\x6a\x81\xac\xbb\xd0\xae\x88\x6c\xc6\xda\x49\x33\x3c\x6d\x33\xe5\xbd\x6e\x63\xec\x94\xdb\x9e\x1d\x34\xa4\x54\x00\xbb\x39\x3c\x86\xc4\xd2\x2d\xce\x63\xbb\x6d\x5d\x0b\x81\x0b\x11\x1b\xeb\xe2\xce\x38\x67\xd1\x99\x2b\x60\x42\x72\x8c\xaa\x2b\x07\x1a\x67\xa5\x89\xcc\x6a\xa3\xae\x07\xef\x17\x4e\x77\xad\x6b\xa1\xca\x49\xaf\x35\x6b\xfc\x30\x7e\x86\x09\xd6\x0a\xc2\x85\xad\xd7\x3d\x9e\x11\xc9\x98\xf0\xae\x5c\x05\x5e\xee\x19\xa6\x30\x8f\x79\x9b\xb1\xaa\x56\xf6\x82\xd8\xf2\x79\x35\x12\x72\x0b\xba\x50\x4b\x38\xe4\xec\xcc\x6c\x52\x64\xf7\xbe\xa5\x62\x8a\x3f\xe9\xbe\x43\x3b\x18\xb9\xcb\xf6\x96\xd6\x94\x37\x42\xb4\x4a\x62\x90\x78\x9a\xc1\x55\x55\xb6\x40\x74\x21\xb7\x08\x93\x9a\xb4\x26\x9a\x9d\x39\xda\xab\xa8\x79\x64\x47\xef\xd2\x3f\x20\xda\xa7\xa2\x3c\x80\xa8\x1d\x55\x70\x0e\x15\x57\xea\x27\xb9\x46\x37\xa2\x5f\xde\xe2\x65\x84\xc7\x0d\xeb\x70\x00\x3c\xf5\xc8\x8f\xb6\x17\x7b\x18\x2f\xed\xcf\x90\xad\x9e\xf9\x9d\xef\xff\xee\x1f\xf6\x8f\x3e\x4d\xbc\xd6\x17\x3e\xe7\x5f\x3f\xf1\x23\xbe\xff\xa5\xf1\xc5\x1f\xf1\x51\xef\x67\xff\xe0\xa9\xdf\xb9\x7f\x91\x7e\xca\x67\xbf\xe4\x41\x16\xd9\xe3\x9e\xf2\x36\x4f\xd8\xfe\xeb\xd3\x7f\xfa\x3f\xfe\xdc\x57\xbd\xd5\xcf\x3e\xe6\xeb\xde\xf2\x1d\xfe\xd3\xe3\xfe\xe7\x1b\xbd\xe8\xb3\xbe\xfa\x17\x5e\xf8\xfe\x3f\xd5\x7f\xfe\x5f\xfd\xe8\x83\x84\xb3\x67\xfd\xf2\xc7\x7c\x63\xfd\xa3\xa7\x7c\x04\x2b\x6f\xf1\xcf\x7e\xf5\x83\x3f\xe5\x29\x6f\xf8\xa1\x1f\xfb\x7b\x6f\x1b\x5f\xf6\x82\x57\xd2\x57\xbe\x6b\xfd\xc9\x37\x7a\x20\xf4\xeb\xff\xaf\x8f\x7b\xaf\x6f\x83\x1f\xb4\x7f\xf9\xbf\xfc\xee\xaf\x14\xe8\x19\x7f\xf8\x83\xfb\x3b\x7f\xdf\xdb\xff\xe6\x67\xfd\xdd\xef\x7e\xc5\xbb\xfe\xc2\xcb\xbe\xec\xf9\xe2\x81\xd0\xc7\xbc\xd3\x3b\x7d\xe6\x07\xfd\x95\x7f\xf3\xd1\xf2\xb5\xbe\xf7\xd5\x6f\xff\x0e\xbf\x3f\x5e\xfe\x65\xfd\xc9\xaf\xfa\x85\x27\xfe\xfd\xaf\x78\xf5\x5b\x7c\xc6\xdb\xff\xfc\x78\xcc\x83\xdc\xb4\xdf\xfa\xe9\xd7\xf9\x4f\x8f\x7f\xf1\x2b\xde\xee\xed\x9f\xbf\x3d\xe6\xa5\xbf\xfa\x7e\xbf\xf8\x85\xef\xfd\x33\x4f\xfa\xf6\x7f\xfa\x7a\xff\xf4\xbf\xbc\xf4\xc7\xfe\xe3\xf3\x3e\xe4\xcf\x3f\x10\x1a\x3f\xe4\xcb\xbf\xe6\xc3\xff\xf5\x5f\xf9\xaf\x6f\xf3\xbf\x5e\xf0\x58\xf0\xd1\x6f\xf2\x8a\x5f\x79\xea\xf3\x9f\xf0\xbf\x5e\xf5\x37\xfe\xda\xdb\x3d\xfb\x3d\xbe\xe4\x65\x9f\xfa\xc2\xbf\xf6\x40\xe8\x1b\x3e\xed\x1b\x3e\xe0\x93\x7f\xe4\xf7\xbf\xe5\x9d\xde\xf7\x99\x5f\x02\xd2\x8f\xff\xde\xbb\xbc\xee\x7a\x02\x7e\x1f\xf1\x8f\x5f\xbe\xff\xef\x9f\xfc\x82\xbf\xf5\xbb\x9f\xf8\xa7\x64\xab\x87\x3d\xd5\x1b\x6e\x00\xd4\x9b\x85\xb3\xf3\x83\xbb\x93\xa5\x03\x83\x46\x73\x4e\x2d\x32\xd5\xe0\xa5\x45\x18\xcb\x67\x8b\xe2\x4e\xab\x18\x3e\x69\xca\xe1\x5d\x1b\x14\xad\x64\x54\xed\x66\x02\x52\x2e\x7d\x3a\x72\x48\xee\xae\x33\x7b\x71\x9c\xdb\x49\xcc\x7e\xc8\x4a\xec\x61\x01\xea\x43\xea\x5e\xf6\x43\xdc\x55\x08\x47\x42\x1b\x4e\x65\xa5\xc2\xc7\x39\xf0\xb1\x3b\x55\x84\x3d\xb5\xc6\x48\xc4\x28\x6c\x47\x09\x95\x61\xaf\xdd\x05\x2e\x46\x41\xd4\xde\xf5\x4c\x7a\x03\xa5\x84\xb8\xaf\x7a\xd9\x66\xa8\x3a\xdb\xde\x9b\x35\xbc\xf7\xa1\x58\x04\xdb\xe1\x23\x26\x15\xe8\xdc\x13\xba\x2e\x1f\xd6\x5d\xe2\x02\x86\x96\x6f\xe2\x6c\x3a\xee\x99\x4e\x4a\xd1\x60\xfe\x14\xa0\x69\xa5\x2c\x5b\x4b\x1d\x9b\xf7\x03\x97\x08\x19\x3c\x43\xe3\x9d\xb3\xdb\xda\x94\x75\x58\x5b\x2d\xd2\x6a\x1f\x6e\xe1\x7d\x9d\xd0\x8e\x09\xc5\x01\x35\x1c\x08\x6c\x56\x8d\x05\x8b\x22\xda\x1f\x57\x43\x82\x59\x7f\xde\xd5\x71\xf6\xb2\x55\x24\x9b\xe8\xc8\x67\x05\xbd\x63\xc3\xb3\xa6\x2f\x7d\x92\x9c\x8c\xe2\x85\xcb\xb0\xad\x8b\xd8\xd9\xbb\x9d\x68\x5d\x6e\xde\x25\x56\x72\x20\xc2\x14\x4b\x81\x62\xec\xb0\xac\xd0\xa1\x02\x71\xf4\xdc\x2a\x0e\x5e\x80\x32\xfc\x42\x8a\x8f\xb3\x22\x0f\xa7\x69\xb3\xa5\x47\x9b\x6c\x3c\x2c\x4f\xdf\x90\x7c\x22\x4c\x05\xa1\x91\xcb\x7e\xf9\x66\x51\xb8\x02\x4e\xc6\xef\x1e\x93\xab\xf4\xc4\x92\x53\xd3\x98\x2e\xbc\x70\x23\xf7\x48\xd9\x71\x9b\xce\x1d\x43\x26\xe7\x95\xdb\x25\xf7\x75\xd8\x74\x6e\xf1\xda\xd3\x01\x99\xe2\xf5\x8a\xfb\xd0\xf5\x04\xb0\xe4\x6b\xaa\x42\x8a\xa2\x93\xf9\x7a\xd7\x49\x84\x42\xe7\x2e\x54\x33\x73\x2b\x89\x3b\xc0\x4b\x20\x51\xe5\x42\xf4\xb9\x57\x79\x02\xaa\xf8\x35\x31\x3f\x12\x60\x1a\x1e\xad\x5d\xfa\xae\xa2\x4f\xab\x19\x11\x56\x87\x62\x01\xe0\x70\xc0\x1c\x1d\x3e\x90\xb7\x5c\x65\x77\x39\x00\x74\xe5\x5d\xed\x76\xf7\x7b\xd9\x49\x46\x8d\xd0\xbb\x06\x6f\x03\x1f\x08\x5a\x4a\x37\x67\x8b\xac\xc2\x88\x7c\x0d\x39\xd1\x0e\x45\x82\xfd\xec\x20\x69\xd8\xb1\x18\xd0\x25\xbe\xa7\x3f\xde\x80\x7b\xdb\xfa\x56\xac\x13\xcb\x28\x9e\x10\xd8\x44\x13\x0d\x50\x2b\x85\x6c\x99\xf3\x40\x4c\xc9\xe1\xb1\x93\x97\x88\xf8\x08\xda\x6f\x3b\x2b\x34\xdd\x45\x71\x8a\x3e\xe3\xeb\x1c\xcb\xcb\x03\x8c\x2a\x70\x3f\x54\x10\xc8\x0f\x9a\xfc\x62\x71\x8b\x6a\x1a\xb1\xed\xec\xb0\x49\x70\x3c\x8f\xb5\xf8\x5d\xaa\x40\xa5\xf1\x28\xbd\x80\xa8\x37\x77\x98\x48\xaf\x8b\x0c\x78\x78\x23\xfb\xb6\x9a\x49\x73\x5f\x86\xf4\x32\x12\x46\x63\x35\xc5\x12\x2d\x8f\x5e\xa7\xf6\xb0\xca\xef\x86\xa9\x3f\xdc\x42\x90\x2e\x35\x94\xb7\xda\x2a\x04\x0a\x39\x19\xda\x5e\x63\x10\x27\x89\xc9\xf1\xbe\xe2\xba\x26\x8f\xa1\x7b\xda\x49\x31\xe9\x26\xbe\x03\x73\x44\x71\x68\x33\xde\x1a\x57\x74\x0d\x42\x5a\x8a\x16\x95\x16\x0d\x37\xce\x9d\x25\x78\x74\x58\x84\x69\x10\x92\xd8\xfd\x4c\xe3\x2e\xeb\x4e\xea\x33\xab\xdb\x71\xc9\x00\x1a\x1d\x54\x07\xd8\x0a\xef\x29\x94\x58\x34\x01\x58\x2f\xa1\xdb\x51\xe4\x9c\x08\xcb\xe0\x76\x41\x52\xbe\xcb\x43\x66\x63\xfa\x50\x18\x1d\xeb\x8f\xdf\x84\xdc\x93\x3f\x94\x61\x3b\xf0\x61\x02\xe4\xaa\x72\x93\xad\x2e\xd8\x6c\x17\xb7\x7b\x1f\x14\xdb\xbb\xf6\x08\x19\x2a\x6a\x6d\xf3\xc2\x4b\xa5\xab\x5c\x21\x35\xd6\x4a\x9d\xfa\x32\x7d\xab\x17\x53\x09\x66\x4f\xa4\xdf\x78\x05\x10\xb8\xbe\x7a\xb9\x6b\x04\x98\x7d\xde\x23\x35\x88\x4f\x20\x9c\xb2\x0e\x50\x6e\x4f\xcc\xc1\x60\xc8\xa6\xd9\x6a\x56\xa6\x10\x38\xd1\xe4\x23\xaa\x2a\xfb\x39\xef\x1a\x8b\x72\x7f\x76\x8d\xe2\x30\x0c\x0f\x1b\x21\xa6\xca\xb8\x3d\x23\x30\x25\x3e\x55\xe0\xc9\x37\x0f\x8f\x33\xc8\xe9\xa6\x2f\x36\x9d\xfe\x2e\x18\x96\x52\x14\xd0\x79\xd4\x8e\x62\xe6\x20\xd8\x11\xcb\xf2\xa7\xea\xdd\x2f\xeb\x00\x20\x70\xca\x40\x2e\x06\xe8\xb1\x07\xbe\x47\x3c\xaa\x7e\xf4\xe0\xed\x61\xbd\xe4\x1d\x34\xf3\xbd\xf2\x75\xc9\x5d\x3b\x89\x71\xb8\x72\x83\x9a\x4c\x49\x42\x0c\x62\x1d\x16\x23\x62\x5a\x02\xf0\x02\x45\x35\xb4\xb5\x72\x2e\x7a\x17\x91\xf9\x14\x63\x00\x59\x45\x85\xc1\xc1\xcd\x89\x75\xae\xa0\x44\x03\x75\x9e\x4b\xb1\x14\x96\xbe\x8e\x54\xc2\xb5\xef\x4b\xd0\xc0\x85\xb8\xcb\xc6\x81\xd9\x61\x80\xea\x05\xea\xd5\x27\xda\x68\xd6\x26\x9d\x75\x2f\xa7\x0b\x58\x75\xaa\x62\x34\x03\xec\x4e\x49\x7d\x6c\x5b\x5d\xdd\xfa\x72\x17\xd9\x6a\x9d\xe9\x40\x3e\x21\x82\xaa\x83\xcc\x34\xef\xc9\x34\x25\xef\x5d\x5c\x75\x59\x5e\x15\x0e\x11\x90\x4a\xc5\xb9\xa8\x41\x47\xd8\xeb\x4d\xe0\x27\xab\x59\x79\x06\x4e\xbf\xf1\x01\xbb\xe0\x60\x73\xb5\x5b\x46\xc6\xe8\xa3\xec\x29\x0e\x7d\x5d\x07\x13\xac\x73\x5b\x0e\x1a\xc0\xa8\x77\xad\x0e\x63\x5a\x4a\xe3\x21\x14\x48\xe9\x3c\x22\xef\x26\x39\x8d\x2e\x69\xce\x02\x4f\x04\x74\x2c\x93\x12\xb1\xb8\x68\xa4\xad\x11\x09\x26\xe6\x2e\x9d\xfb\x41\x36\x04\x4b\x3a\x1b\x51\xe2\xac\xa6\xd3\xd5\x20\x98\x8e\xe1\x5d\x00\x77\xa9\xdd\x41\x99\xe3\x76\x1d\xa3\x34\xcd\x51\x42\xed\xb6\x06\x30\x65\xdd\x78\x6f\xeb\x91\xef\x83\xf6\x93\x93\xe1\x44\x38\xbc\x3b\xc3\x10\x99\x09\x92\x5a\xe3\xae\x27\xab\x71\x0a\xa5\x9f\xb2\x1a\xfa\xa8\xe4\xf3\xb0\xe9\xd4\x1d\xbb\x1c\x71\x11\xd8\x98\xa9\x7a\x36\xd8\xc5\x30\x20\xde\x0e\xbd\xb9\xd5\xe5\x06\x89\x0c\x8d\xee\x98\x1e\x22\x50\xc4\x0a\xb9\xac\x93\xb7\xdd\xad\x54\x5e\xa7\x82\xbc\x73\x67\xb7\x36\x92\xea\x94\xda\x86\x78\xec\x87\x24\x5c\x28\xe0\x4f\xdc\xb9\xd1\xf3\x1a\x61\xd8\xbc\xc7\x49\xef\x2a\x62\x5d\x19\xb9\x9e\xfc\xda\x21\xca\x14\x8b\xad\x6a\x67\x33\x94\xc9\x6e\xad\x25\xd6\xd1\x58\x21\xb8\x1d\x19\xeb\xed\xac\x5a\xef\x50\xdf\x35\xf3\xc9\xd7\x7e\xba\x2d\x00\x6b\xf6\x84\x3b\x66\xda\x92\x46\x53\x83\xbe\xb7\x43\xe6\xb4\xd2\x95\x78\x24\x58\xed\x78\x0e\x4d\x2f\x63\x6e\xa3\xc2\x89\x59\x42\x03\xcd\x37\x21\xec\x28\x60\xc5\x38\xb7\x11\x43\x36\x30\x2d\x79\x3a\x8c\xa8\x8c\xf6\x82\xc8\x6f\xbd\xba\x96\xd0\x0e\xef\x3a\x89\xc3\x57\x66\x56\x5c\xd0\x4a\xb8\xf6\xb1\x83\x63\xdb\xa2\xa6\x26\x5f\xa5\xb6\x69\x35\xe9\x08\x88\xed\xb4\x92\x06\xad\x4f\xcd\xdc\xba\x4b\xea\x67\xc1\xb6\x91\x0b\x81\x05\x56\xe6\x15\x53\xac\x71\xc6\x22\x61\x1b\x47\x27\x96\x72\x90\x31\xc1\xca\xc8\x32\x41\x9e\x47\x50\xf5\x2e\xb3\x59\x5a\x4b\x75\xf0\x00\xdb\x28\x85\xe5\xc9\x66\xec\x79\x12\xe8\xc9\x75\x41\xec\x76\x65\x2f\x77\x05\xaa\x51\x95\x05\xf2\xd5\xb9\x8f\xe9\xd1\x96\xf2\x0f\x9b\x77\xdf\xe1\xea\x0c\x32\x02\xfb\x29\x8f\x8b\x1b\x56\xd2\x3c\x0f\x1b\x86\x02\x6a\x4f\x87\xde\x96\x35\xd0\xa9\x51\x15\x09\x24\xd8\x4b\x3b\x1f\x47\xbe\x8b\x44\xc3\xe7\x4a\xf4\x54\x02\x0d\x1f\xf6\xc1\xb6\x00\x4e\x68\x0a\x58\x27\xc0\x10\x79\x3f\xce\xd0\x4a\x16\xab\xed\x5c\x5b\x18\xa4\x33\xf5\x2e\xf3\x04\xdf\x92\x90\x1b\x11\xa5\x96\xea\x39\xf7\x64\xd3\x19\x11\x3e\x5b\xb5\x62\xa4\x8a\xb6\x12\x93\x55\xb6\xee\x59\xf8\x96\x6b\xee\xfc\x2e\x50\x8b\x5b\x25\xf7\x79\x25\x22\x11\x2b\xcd\x44\x6a\x6c\xeb\x87\xda\xf8\xd5\xbd\x6a\xc5\x93\x03\xd6\x6b\xb3\x4b\xcf\xd2\x68\x25\xf2\x34\x77\x59\xa0\xa8\x58\x10\x25\x0a\x31\xa4\x48\xbb\x82\xee\x10\x2e\xaa\xae\xb8\x18\x96\x44\x5d\x20\x79\x78\x10\x18\xf2\xe1\xb7\x32\x77\x49\x1d\xbd\x8b\xdc\xed\x57\x89\xe7\x5a\x73\xec\xda\x6f\x62\x17\xec\xb0\x08\x51\xe7\x02\xf2\xb2\x35\x5f\x0e\x77\x0a\xa3\xf6\x33\x5f\x50\xd0\xa5\xec\xb9\xee\xaa\x06\xd5\xc9\x4f\x5f\xf6\x12\xcc\xb6\x39\xc0\xc9\x8e\x9c\x54\x3e\x6d\x2a\xa9\xb4\xf6\x8b\xf4\x56\x9b\x08\x11\xf7\x55\x0e\x06\xe7\xc4\xf4\xae\x81\x73\x6b\x76\xdf\x83\x93\x54\xe2\x08\x8e\x73\x27\xd7\x3c\x71\xa1\x0b\xc4\x6b\xe9\x1e\xcb\x90\xad\xac\xbe\x07\x7e\x41\x72\x4e\xb3\x12\xc0\x8f\x4a\x3e\x0f\x43\xd0\xee\x98\xf9\x48\x78\x92\xc3\x43\xe8\xc1\x8a\x27\xd8\x46\xdd\x21\x5a\x49\x92\x35\x8e\xd3\xc6\x23\xd4\x4b\x41\xcd\x77\xc6\x45\xca\x6d\xd2\x7d\xde\xc5\xaf\xec\x7b\x72\xb5\xc1\xb0\x79\x5b\x8d\xf0\xea\xc2\x1b\xea\x02\x8d\x32\x6d\xa6\x1a\xc5\xc5\x73\x80\x05\x80\x4d\x15\x7a\x0e\x70\xc6\x72\x17\x83\xaf\x30\xaf\xf7\x80\xc3\x01\x0c\x5b\x10\xcd\x85\xce\x69\x9a\xaf\x3d\xc1\xae\x8e\x3a\xf0\x22\xf5\x34\xe1\xbc\xc6\xc9\xea\x49\xd8\x76\x97\xb1\x2a\x3b\xd6\xec\x39\x2c\xb7\x83\x5a\xd4\xec\x32\x60\x33\x0a\xde\x3c\x2f\xbe\x1b\xa8\xa8\x54\x26\xe0\xec\xd4\x76\xee\x70\xea\x79\x48\x78\x57\xf2\x39\xb5\x9c\xce\xc9\xcb\xcb\x73\x8b\x67\xd3\x2b\x56\x1a\xcc\x35\xb4\x81\x44\xa9\xe9\x31\xc8\xca\x5c\xbe\xb9\xb4\x61\x59\xad\x21\xf6\x2e\xbb\x05\xcb\x3a\xc5\xb8\x0c\x0f\x8e\x5d\x10\xdb\x85\x85\x63\x64\xce\x70\x21\x5a\x5c\x8c\xd9\x53\x22\x32\xa5\x86\x98\xb8\x47\x1a\xe3\x75\x9b\xb7\xe1\x59\x76\x0b\xda\xd4\xce\x5f\x0e\x35\xba\xf8\x39\xcd\x9e\x7b\xde\x34\xc8\xb8\xa1\x47\xea\xa1\x4c\x00\x60\xb4\x32\x1e\x5a\x0d\xee\xb6\xd1\x37\xc0\x99\xa3\x00\xd8\x4a\xda\x70\xcf\xb1\x53\x23\xd0\x6b\x95\x7d\xb8\x73\x4a\x8a\xbb\x83\x54\xee\x93\xaa\x60\x8d\x55\xae\xdb\xf2\x68\x8d\xcb\xc3\x30\xf9\x3b\xec\xc5\x08\xaa\x3b\xfe\xe3\x3b\x9e\x6a\xbb\xda\xc1\x52\xf1\x5b\xea\x89\x9e\x99\x92\x6a\x7c\xd2\xd1\x5d\x1e\xa8\xab\xfb\xd8\x57\xc4\xf6\xae\x99\x0f\x48\x5a\x34\x7d\xc5\x68\x76\xb6\xb2\xd6\x80\xe0\x74\x3a\x7b\x2c\xbd\x17\x18\x9b\x23\x4c\xcd\x70\xa4\x88\x06\x51\x13\x22\x8f\xd9\x5d\x85\x7d\xba\x40\xb5\xd5\xc3\xd2\x6b\x3e\x15\x5b\xd7\x39\xd1\x76\xb1\x8c\x4a\x54\xe4\x58\x81\x6f\x8d\x49\xc0\x1b\x80\x56\xb8\x35\x77\x70\x9b\x8a\x42\x2a\x73\x6c\x75\x38\x52\x7d\xb6\xb9\x0a\x6a\x2f\x54\x28\xc1\x57\x75\x17\x71\x73\x8f\xb2\x5d\x7b\xe7\x7b\x39\x77\xc8\x69\x4e\xbd\xdc\xa6\x71\xd1\xb0\x1a\x3a\x80\x47\x83\x53\x37\x64\x4e\x42\xb2\x3d\xa8\x2b\x17\x4c\xf1\x5c\x92\xa4\x33\x8b\x8b\xd8\x69\x9a\xd4\x96\x13\x7a\xd3\x1c\x8c\x02\x8e\x5b\x49\x66\xdf\x9d\x40\x6c\xf5\xc5\x10\xe3\x12\xd5\x86\x76\x14\x10\x6f\x75\xfa\x0e\x30\x69\x5c\xd6\x4c\xf4\xec\x6d\xde\x55\xab\x33\x55\xf6\xe9\x83\x99\xe2\x70\x83\x81\x30\x23\x0a\x57\x04\x2a\xd5\x56\x8c\x89\x4e\xcf\x5d\x11\x0b\xaf\x10\x8c\xa3\x68\x67\xed\xe2\x77\xfd\x3b\x33\xc2\xc6\x0c\x68\xd0\x45\xc5\x2e\xb6\x84\x03\x16\xe8\x83\xaf\x29\x13\x31\xe6\x44\x73\x22\x30\x8b\xc7\xe5\xf4\x80\xf9\x5d\xf1\xeb\x51\x64\xab\x87\x39\x7b\xfd\x19\xb2\xd5\xeb\xbe\xd5\x13\xd0\xbb\xfc\x8f\xf4\xa6\xdf\xf4\x55\xaf\x7c\xae\xfd\xf6\xb7\xfc\xa2\xf7\xf8\x80\xdf\x79\xe2\x53\xde\xee\x2f\xfd\xdc\xaf\x3f\xf1\xfb\xb1\x79\x4d\x7f\xdb\x07\x42\xbf\xb9\x3c\xe9\x5d\xbe\xfa\xdd\xde\xf0\xb7\xbf\xf2\x1f\xbc\xe6\xdf\xff\x9d\x0f\xfb\x95\x4f\xfb\xee\xf9\xc1\x2f\x79\x9f\x6f\xff\xca\x67\xbd\xf5\xf6\xdb\x5f\xfa\x8c\xf5\x83\xcf\x7c\x20\xf4\x6d\xde\xf0\x7d\x3f\xe0\x93\x3e\xf1\xc7\x9e\xf7\x33\xaf\xfc\x9d\x27\xdb\xdf\xfc\xae\xf2\x3d\xcf\x7a\xd1\xaf\x1c\xff\xe0\xef\x7f\xc7\x2b\x7e\xe8\xc9\xdf\xfe\x06\x6f\x0d\x1f\xb4\xab\x7a\xe5\xa7\xab\x77\x7d\xdf\xdf\xfa\x9e\x3f\xfc\xa6\xef\xfe\xd6\xa7\xbd\xcd\x6b\xde\xfb\xeb\x3f\xf7\x7b\x3f\xf4\x73\x3e\xeb\x6f\x7d\xee\x8f\xbf\xe4\x1d\x3f\xfe\x49\xef\xf0\xba\x1f\xf5\xad\x0f\x84\xbe\xfb\xd7\x7f\xd6\x67\x7e\xd5\x0b\x7e\xe2\x83\x3e\x97\x7e\xe0\xfc\x3a\xf7\xcf\x9f\x79\x3d\xf1\x93\x9e\xf5\x8e\x2f\xfe\xdd\x9f\x78\xc9\xeb\xbd\xf2\x1f\x3e\xf6\xe7\x3e\x31\x3e\x10\xfa\x1f\x7e\xee\x45\x5f\xf6\x31\x2f\x7b\xfb\x2f\x7b\xc5\xb3\x3f\xfe\x63\xfb\x9f\xfb\xc5\xa7\xc7\x0f\xf8\x43\xf3\x0f\xde\xef\xfd\xfe\xd3\x87\x89\xe7\xff\x7f\xcb\x37\x3d\xee\x41\x13\xac\xdf\xfe\xf5\x7f\xf2\x5e\xbf\xfb\x21\x2f\xfa\xb8\x27\x3d\xfe\x0f\xd6\x17\x7f\xc8\x8f\x7f\xff\x57\x3c\xfd\x15\xef\x06\x3e\xeb\x33\x1e\xf7\xb1\xcf\x27\x3f\xfa\xdc\xd7\x66\x9f\xf0\xa0\x17\xdb\xdf\xfb\xda\x67\xff\xe0\x8f\xfd\x85\x2f\xfa\xce\xdf\xc7\x4f\xf8\x6f\x6f\xf7\x19\x2f\x8c\x3f\xf0\x71\x9f\xf7\x83\xbf\xf6\x33\x7f\xf0\x7d\x7f\xf0\x01\xcf\xfa\xbc\x8f\xfd\xdf\x6f\xf8\xa7\x64\xab\x87\x3d\xd5\x1b\xf8\x0e\x0b\xc6\xb3\x5f\xd8\xd5\x8d\x94\xb8\xf3\x69\xf5\xde\x27\xf2\xe7\x3a\xf8\xce\xea\x3a\x36\x05\x25\xc8\x26\x0c\xaa\xaa\x0e\x64\xe7\xec\xae\x3f\x1b\xd7\xcc\xd2\x39\xcb\x41\x99\xa4\x83\x98\x24\x16\x9c\xae\x57\x77\xe2\xc2\xa7\x07\xdb\x94\xc2\xef\xd0\x1a\x02\x5b\xb8\x2e\x57\xca\x5d\x0e\x02\x57\x0a\x31\x22\xb5\x05\x1f\x78\x8e\xf1\xb8\x24\xc7\x8b\xf6\x41\x9a\xdc\x18\x90\xe7\xf2\xcd\x1c\x90\x74\x01\x88\x31\xca\x10\x70\xde\xa4\xb7\xa4\x4d\x77\x21\x8e\xa1\x0d\xce\xa7\x6e\x43\x9a\x6b\x1b\x9b\x96\xf3\x44\x74\x72\x4d\xad\x1a\x51\x4d\xb0\x1f\x26\xd5\x3c\x85\x3d\xfa\x6d\x5e\x06\x46\x23\x40\xf9\x95\x16\x57\xcd\x29\x0b\xc1\xc9\xea\xe6\x2f\xc2\xc5\xe1\x02\x66\xd9\x28\x4d\xae\x0d\xa0\x4b\x2f\x38\x90\x91\xfa\x36\x8f\xad\x20\xe7\x38\x0f\xce\x73\x60\x6b\xe5\xe2\xeb\x76\xd6\x71\x18\xca\x42\xc0\xf0\x62\xd9\xf8\x64\x93\xd1\x62\x61\xee\xfd\x31\x74\x84\x77\xf5\xbe\x31\xe5\x23\xa5\x38\x72\xe0\xb8\x6d\x14\x95\xe1\x19\x1b\xdc\x0c\x19\x40\xe2\x3a\x68\xd2\xba\x59\xb0\x99\xc5\x0e\xab\x98\xda\x6e\xfb\x62\x33\xdf\x94\x29\x57\x87\x07\xc5\xb5\x14\x0e\xc3\xde\xc8\xd9\xc6\x14\x10\xe9\x75\x85\x7c\x35\xc6\x87\x5d\x27\x16\x6a\xcf\xb1\x81\xff\x83\xca\xf1\x61\x79\xfa\x0e\xc8\x31\xf1\xbd\x50\xb2\x19\x5d\xc6\x61\xb4\x32\x53\x4c\x86\x1d\x64\x3b\x9e\xbd\x3b\xb7\x76\xbf\x49\x4b\x4b\xb7\x62\x85\x59\xce\x2a\xee\x9a\xfa\x67\xb8\xc4\xa1\xb0\x04\xa9\xe1\x8d\x9f\x28\xc4\x2a\xcd\x2a\x49\xd5\xe6\x4c\x25\x3a\x48\x96\x49\x13\x8d\xc7\x8b\x1a\xc5\xb4\x4b\x77\xa5\x41\x2e\x3c\xf5\x05\xfa\x6c\x9a\xc8\xbe\x4e\x36\x30\x74\x45\xe1\xac\x09\x32\x74\x6c\x47\x5d\xd1\xea\x81\xa3\xcb\x9b\xc5\xdc\x6e\xf6\x2e\xb1\xf7\xa9\xe2\xb9\xe3\xca\x77\x0e\xd9\xb1\xd6\x1a\xd9\x4c\x41\x71\x86\x52\x46\x20\x30\x38\x8e\xeb\x2a\x78\x3b\x20\xd7\x08\x8c\x0b\xce\xbb\x16\xbd\x53\xb0\x24\xca\x0c\x86\x60\x40\xb5\x47\x9d\x7e\x73\x1d\xf6\xe5\xd5\x0e\x75\x87\xd8\x4c\x71\xea\x79\x36\xc8\x76\xb2\x11\x65\x17\xb8\x6d\x75\x58\x50\x5a\x58\x4d\x8f\x2c\x60\xb4\x20\xef\x47\xca\x20\xb8\xcb\x5c\x41\x94\xd2\xf7\xc5\xa0\x83\xac\x99\x59\x87\x1a\xf8\x0c\x1e\xb3\xbb\x58\x06\x9b\x39\xda\xf0\x10\x26\xad\xb3\x0b\xac\x34\x46\xdc\xb1\x1b\x24\x45\x9e\x94\x24\xb4\x9d\xc0\xb4\x78\xe1\x28\xf1\x39\x3d\x60\x87\xbe\x4b\x0d\x7b\x9e\xde\x03\x24\x34\x00\x09\xf4\x0b\xc8\xbd\x78\x7c\xee\xc5\x98\xab\xf4\x0d\x4e\xb8\x48\x4b\x79\x11\x38\x57\x6d\x8a\x9f\x9b\xc9\x8f\x56\x39\x3e\xac\xf2\xbb\xc3\xdf\x21\x0a\xb8\xdc\xa6\x4c\x70\xa6\x6f\x7c\xc7\xfe\xc0\x5b\xd5\x20\xbb\xce\x37\xc9\xd8\x80\x07\xbc\x30\x16\xfe\x22\x0e\x6f\xbd\xa4\xdb\xac\x3a\xf6\x0e\x99\x73\x69\x45\xc8\xa2\x06\xde\xb2\x6e\xe2\x38\xc8\x44\x0e\x18\x68\xe4\xdc\x16\x85\x44\x64\xb2\x8a\x75\x51\xb2\x75\xde\x06\xf4\x39\xcd\xa8\x33\xaa\x87\xcb\x5f\x5c\xe9\x2e\xec\xae\x4f\x68\x0f\xc9\x9d\x99\x3b\xe9\x1d\x28\x3e\x4e\xcc\x98\x8d\x3a\xc6\xca\xa5\xbe\x8b\x73\xba\xa0\xed\x9d\xee\xb3\x89\x6c\xbd\x43\xbe\x63\xde\xed\xc0\x49\xb3\x40\xf5\x85\xac\xa9\x6d\xd9\x93\x06\x6d\x35\x30\x90\xb0\x02\xee\x42\xd4\x55\xed\x5c\x5d\xcb\xa1\xe8\x84\xcf\x91\x43\xb6\x8f\x74\x59\x75\xae\xc8\xe1\x72\xd0\xb4\x74\xca\xed\x54\xea\x4c\xa5\x28\x29\x41\xbd\x8b\x66\x4e\xd3\x41\x1a\x39\xa0\x9e\x2b\xa2\x76\x34\x7a\x6c\xea\x50\x2d\xd0\x1e\xb6\x30\xcf\x35\xb7\xe3\x88\x5a\xf2\x63\x87\x40\x9d\x19\x92\xbb\xb6\x9d\x33\x32\x9a\x83\x45\x56\x48\x19\xb2\xb4\xa8\x3c\x05\xad\x9b\x97\x83\x88\xcb\xe3\x78\x6a\x29\x02\x86\x9b\x5f\x7d\x2b\x7d\x44\x7d\xdc\xb5\x84\x99\x72\x1d\x3b\x77\x02\xee\x99\x95\x5a\x21\xda\x6c\x9e\x5e\xf1\x93\x94\x7a\xe6\xb5\x5f\x0b\xb8\x3d\xe0\x31\xac\x45\xc7\x89\x29\xf8\x3f\x39\x5b\x3d\xac\x97\xbc\xa1\xf2\xc1\xac\x96\x66\x58\x3e\x50\x5f\xc3\x44\x6e\x55\x14\xa7\x60\xe7\xc6\xba\xb4\x96\x24\x19\xdd\x1e\xe2\x34\x31\xe2\xa9\x16\x80\xb9\xdc\x45\x64\xbe\x10\xea\x08\xf1\xb3\x36\x55\xf3\xd8\xc3\xd6\xb1\x9d\xca\xe5\x2a\xd2\xda\xe6\x00\xb4\x7b\xdb\x59\x8b\xde\x34\x8d\x13\xa8\x3a\xdd\xa5\xe7\x98\xb1\x78\xd3\x4e\x99\xf5\xc9\x0e\x3a\x77\xd7\x2d\xe0\x44\x76\x4b\x7a\x1e\xd7\x7e\x0d\x2c\x83\xd3\xe0\x3a\xb0\x16\xb5\xcb\x82\xd6\x5d\x62\x6f\x1d\x5c\x4a\x25\x60\xb1\x9f\xbb\xef\x5b\x1a\x38\x42\xc0\xdd\x01\x15\x9e\xac\x2d\xbc\xaf\xd5\x25\x16\x3d\xed\x38\x6c\xc7\x71\xac\x75\xd7\x72\xdd\x7d\x5f\xe5\x44\x64\x12\xb4\x15\x90\x58\x0d\xac\x05\x7d\x41\x77\x50\x78\x1c\x4c\x5b\xb8\xd7\x13\x24\x1c\x08\xd1\xc3\x6c\xb3\x9f\xf3\xae\x7a\xa3\x1c\x04\x14\xc1\x65\xce\xfb\x6e\xb6\x90\x77\x9e\x51\x15\x5b\xde\xd7\x31\x99\x29\xce\x14\x8a\xd0\xc5\x92\x96\x95\xa2\xc8\xa0\xbc\x0b\xa7\x62\x24\x8d\x22\xc2\x11\xd4\x3e\xf2\xae\xc1\x5c\x75\x6c\x6c\xc9\xe2\xdc\xb0\x73\x40\x3a\xe5\xbc\x58\x28\x59\x85\xb3\xdb\x20\x77\x68\xef\x62\x04\xe3\x9d\x44\x2a\x05\x6f\x24\x2e\xd4\x1c\x40\xa0\x9c\xfc\x20\x31\xf7\xfd\xb2\xd1\x94\xc5\x6d\x4e\x6d\xa9\x3d\x5e\xd4\x4e\x91\x09\x3c\x1e\x95\x7c\x1e\x36\x9d\xba\xa3\xf2\xb9\xc2\xb9\xcb\x00\xd9\xcc\x76\xab\x6e\xac\x51\x56\x58\x5c\x6c\x2e\xed\x51\x03\xb2\x83\x2a\xc8\x99\x5b\x81\xc4\x5f\xac\x6c\xf6\xb6\x1b\x0d\x04\x4f\x0e\xe8\xd8\x2e\xce\xdd\x2e\x52\x6a\xe9\x14\xb1\x10\x83\x41\x4c\xec\x4e\x65\x79\x22\xad\x40\x9b\x8a\x79\xef\xbc\x40\xb7\x35\x3b\xb4\xc7\x42\x58\x48\x52\x14\xa7\x7b\x73\x17\x03\x04\x5b\xd2\x70\x45\xba\x7a\x7d\xa2\xe1\x44\x20\x90\xce\x8b\xd9\x3e\x20\x13\xf5\x2e\xc7\x22\x96\x4e\x94\x8f\x66\x59\xd9\x94\xa1\x61\x84\x92\x58\x47\x81\xd9\x20\x8c\x54\x6c\x9f\xb5\xaf\x74\x4a\x6b\xd6\xc4\x62\x26\x8d\xee\xb2\xfe\xa1\xf6\xaa\x96\xb0\xdc\x0e\x99\x50\x7e\x24\x2d\x5e\x59\x5e\x03\xad\x48\x34\x8c\x9b\xc4\x0e\x43\x09\x5c\x1e\x31\xee\x6e\x27\x93\xe1\xbb\xcc\x73\xa9\x33\x5c\x1f\x88\x0a\x68\x3b\xc4\x27\xa1\xe7\x9e\x46\x74\xdb\x16\xae\x24\x65\x6b\x56\xfb\x7e\x05\x8a\xf9\x81\x37\x2f\xba\x06\x76\xdd\x04\x7e\x32\xc1\x7b\x10\xea\x04\xe3\x28\xac\x99\x76\x86\xe1\x83\x55\x24\x22\x15\xae\x7d\x57\xf8\x20\x01\x1c\xd1\xf6\xce\xf2\x7e\x95\x2e\x5b\xbd\xeb\xe2\x6e\xdc\xcb\xb6\x32\x77\xe7\xd2\xaa\x8b\x2e\xca\x29\x33\xe9\x2c\xcd\x19\x55\xf2\x66\x03\xe0\x18\xde\xa7\xb8\x57\xe0\x17\xe0\x34\x99\x47\x25\x9f\x87\xcd\xbb\x6f\xa8\x7c\x78\x3f\x0f\x6f\x41\x63\xb4\xf2\xed\xf0\x40\x30\xbf\xb3\x78\xa5\xcd\xc8\x85\x46\x85\x43\x48\x62\xb7\x4c\x37\x97\xbb\xd0\x89\x8f\xdb\xb0\xfd\x66\x4d\x0d\xe1\x14\x78\xdf\xe0\x0c\xf0\x4c\x8e\x9d\x70\x7a\xd0\x0e\x36\x87\xec\x23\x1e\xa1\x41\x0a\x57\x84\x71\x03\x9c\x01\x78\xde\x65\xcf\x7a\xad\x14\x77\x70\xe5\x0a\xa1\xdf\x49\x54\x91\x81\x15\xd4\x68\x74\x37\x17\x11\x10\xcf\x83\x78\x00\x87\xf6\xd7\x7e\x5a\x6f\x19\xa2\x77\x25\x1f\xb8\x0e\x9d\x32\x50\x01\x11\xa7\x52\xd7\xa4\x9c\x7b\x47\xd8\x8b\x50\x44\xee\xe5\x1c\x0a\xe7\x3e\xa4\x6f\x74\x8f\x4c\x40\xe8\xd9\x5d\x5c\x42\x52\x06\xa1\x16\x03\xdd\x75\x58\x87\xc8\x93\xd0\xd6\xd6\xca\x56\xf0\x76\xa5\x19\xf7\xb4\x45\xa3\xb1\xbc\x84\x41\x61\xe3\xe2\x48\x77\xd5\x60\x70\x35\x7f\x72\x20\xc6\xae\x34\x3d\xaa\x5e\x7c\xbb\x70\xc4\xb5\x0e\x3a\x60\x9a\x9e\x70\xcc\x90\x18\xf8\xe8\x97\xa0\xba\x35\x30\xef\xb2\x74\xf1\x16\xc3\xd9\x13\x9a\x46\x1b\x73\x40\x10\x57\xc3\xd7\x74\x6a\x45\xd9\x18\x76\x8f\xdc\x5f\x01\x6c\xec\x62\x7b\x32\xe7\xda\x52\x61\x77\x89\x0e\x79\xe8\x16\x1f\x73\x4c\xb8\x00\x18\x08\x48\xbb\x73\xbc\xdc\x85\x40\x5f\x4a\x20\x79\xb2\x50\x34\x91\xda\xac\x33\x23\x1e\xdd\x46\x1f\xdd\x76\x3d\x0c\x41\xbb\x21\xf9\x90\x75\x3d\x72\x65\x11\xdd\x9a\xc6\x44\xad\x82\x45\x61\x0c\x55\x02\xe1\xe2\x39\x9c\xae\x32\x55\x72\xde\x2e\x3e\xf4\xa1\xf8\x99\x6f\xfb\xe5\x49\xa0\x22\xf1\x8b\xcf\x34\xed\x39\x75\x12\x03\x55\xc0\x28\xcf\x98\xcc\x6b\x38\x8a\xcd\x98\x02\x96\xd5\x1a\x5b\x92\xda\x08\xcf\xdb\x48\xbb\xfb\x2e\x66\xdc\x2e\xaa\xf7\xb5\xed\x17\xd8\x18\xdc\x67\x9f\x64\xd1\x61\xd0\x72\x58\x7a\xb8\x4a\x74\x3a\xa2\xd6\x42\x52\x1d\x96\xbb\x28\x4e\xfd\xb4\xa0\x5d\xec\x84\xbe\x9d\x62\xc1\x35\x08\x2f\x84\x4f\x2e\x0e\xe5\x45\x2d\xbb\xf5\x98\x72\x3a\x72\xe4\xc9\x59\xbf\x2c\xbc\xcd\x56\xaf\x19\x20\x93\x2b\xa9\x1b\x4c\x40\x1e\x44\x8b\x26\x40\xeb\x83\x55\xa8\x03\x31\x1a\x16\xb9\x31\x00\x81\x99\xdb\xb0\xcc\xe7\x7a\xd7\x4a\x5b\x16\x29\x42\x70\x1b\x64\x6c\xc6\xbb\x9d\x75\xbb\x6f\xab\x52\x0c\xc5\xce\x13\x5b\x79\x85\x5d\x43\x6d\xaf\xa8\x38\x51\x99\xd1\x73\xdd\x66\x41\x01\x3a\x46\x7c\x84\x79\x38\x70\xda\x30\x45\x3a\xe2\x89\x5a\x8d\x78\xb0\x29\xd4\x90\x15\x55\xb0\xcc\x5c\x30\x13\xaf\xac\xcb\xc6\xdc\x55\x97\x56\x92\x28\x27\x64\xa3\x5b\x29\x0c\x74\xbd\x2f\x12\x63\x17\x20\x8b\xba\xb1\x15\x3b\x3a\x40\x8b\x0d\x1c\x84\xec\x1b\x48\x3b\x07\xd3\x3d\x2a\xf9\x3c\x0c\x93\xbf\xa1\xed\x3a\xfa\x75\x41\x10\xc1\x46\xa6\x1e\x87\xf4\xa7\x49\x69\x46\xa3\xc5\x9a\xc6\x55\xc0\x95\x17\x8e\x1a\xdb\xb1\x16\x65\x5b\x7b\x71\xb7\xcd\x7c\x96\x95\x69\x8b\xa1\x78\xee\xcb\xc4\xbe\xef\xd6\x47\x81\xcf\x25\xb8\x16\xb5\x33\xe4\x8d\x07\x0a\x61\x71\x09\x86\x9a\x00\xe5\x60\x77\x8d\x79\x65\x3b\x07\xf0\x48\x6e\x9b\x14\xb8\xc6\x93\x82\xf3\x30\x7e\x32\x08\xd4\x68\x29\x5a\xed\xfc\x35\xc0\xda\x28\x75\x46\x88\x8e\xf0\xbc\x6b\xab\x24\xb2\xd1\x6b\x6d\xc3\x81\x11\xe2\x5d\x2a\x2e\x9c\xa9\x4a\x22\xeb\xf2\x1a\x68\x42\xae\x18\x2a\xc9\xd0\xb4\x9d\x47\x03\x17\x5a\xe0\x2e\x4d\x2d\x1c\x72\x6c\x3e\x0c\x8c\xab\x73\x63\xf1\x2c\x34\x9f\x52\x8d\xb0\xed\x78\xf3\xc9\x73\xe5\xcd\x01\xbd\x5f\xfd\x94\xa7\x48\x97\xb8\xcd\xe4\x00\x10\x0d\x44\xc0\x4a\x42\x80\x9a\xac\xb0\x27\x28\x09\x16\xc4\xc4\xb0\x14\xf2\x80\xb9\x83\xf3\x8c\xed\xba\xd2\x20\x4e\x33\x70\xd7\x06\x45\xd6\xf5\x4e\x32\x12\x1b\x23\x85\x5d\xf3\xb2\xd7\x04\xf5\x48\x4b\x69\x8e\xc1\xb6\x9f\xf5\x34\x24\x97\x02\x45\x5c\x8e\x77\x5f\x0f\x34\xef\x9a\x0d\x92\x0d\xd9\x6b\x97\x32\x84\x65\x23\x75\xcb\x82\x9d\x79\x64\xe5\xae\xba\x20\xc7\x1e\x05\x81\x0a\xd1\xbe\x81\x2a\x0e\x7e\xb4\x29\x1e\x18\x38\xff\x09\xd9\xea\x61\xbb\x11\xff\x0c\xd9\xea\x97\x7f\xe9\x19\x5f\xfc\xaa\x2f\x7a\x7a\xff\xc0\x6f\x78\x37\xff\xb4\x97\xfc\xbb\xf9\x82\x6f\x7c\xda\xbf\xe0\x9f\xf2\x1b\x4f\xfb\x3b\x3f\xf4\xb6\xaf\xf7\x85\xdf\xf5\xf6\x5f\xf8\x40\x68\xf8\xc1\x77\x7c\xb7\x7f\xfb\x05\xff\xe2\x69\x4f\xfb\xa6\x67\xd8\xd7\x7a\xf3\x7f\x19\x9f\x1b\xbe\xf9\xc3\x1f\xf3\xc1\x3f\x33\x3e\xea\x29\x2f\x7f\xf6\x8f\xfe\xf6\x4f\xfc\xd2\x03\xa1\x1f\xf4\x5a\xdf\x40\x9e\xf9\x44\xf6\xa4\x4f\xf8\xcc\x57\xff\xbd\x5f\x72\x1f\xc3\x7e\xf3\x37\xff\x7f\xf3\xc3\xff\xff\xec\xd3\x5f\xf3\x2e\x6f\xfa\x45\xf9\x3b\x5f\xf9\x47\x0f\x84\xbe\xd7\x1f\xbc\xfe\x7f\x7b\xc2\x5b\xbe\xfe\xc7\x7f\xfa\x77\xbe\xf3\x63\x5f\xf4\xc1\xef\xf0\x3f\xf7\x5f\x78\xe1\x7f\xff\x84\x7f\xfb\xa2\x4f\x89\xcf\xfe\xea\x97\xbd\xf5\x2f\x7d\xca\x83\x07\xf8\x98\x8f\xf8\x8a\xcf\x07\xe3\x0b\x3e\x62\xbc\xe6\x89\xbf\xf3\x13\x6f\xf3\xe6\xf6\xad\xe8\x77\x9a\x57\xbe\xf8\x5f\xfc\xab\xff\xf2\xeb\xaf\xff\xc9\x6f\xf4\x6b\x2f\x7d\xea\x03\xa1\x3f\xf7\x82\x37\xff\xfc\x5f\xfb\xa1\xff\xf6\x2d\x5f\xf7\x35\x2f\x7d\x96\xfa\x81\xaf\xf9\x99\xc7\xfe\xce\xe3\xdf\xe0\xe7\x7f\xe4\x3b\xfc\x97\xfc\xec\x8b\x7f\xef\x73\x5e\x6f\x7c\xda\x83\xbb\x1c\xff\xe1\x7c\xec\xeb\x7c\xf4\xef\xbd\xec\x45\xbf\xf9\xcb\xff\xea\x29\xf0\x6b\x3f\xf9\xfd\x5f\xf0\xba\x6f\xfe\x7e\x1f\x4f\x9f\xa7\x9e\xfa\xbd\xff\xeb\xcb\x9f\xf7\x8c\x07\xc9\x56\xbf\xfd\x43\xf3\x8b\x3e\xf5\x43\xde\xff\x6f\xfd\xfe\x5b\x3c\xb9\x3e\xfb\x5b\xde\xf4\xb5\xcb\xf9\xf2\x5f\x7a\xb3\xdf\xfa\xec\xf7\x78\xe5\xf3\xbe\xe5\x43\x3e\x50\x7e\xcd\xa7\xfd\x29\xd9\xea\x61\x4f\xf5\x0e\x73\x19\x25\x00\xdb\x26\x9e\xa6\x64\x4f\x77\x97\x65\x82\x5a\x10\xe3\x8f\x96\x15\x09\x7a\x23\xd7\xf2\x07\x6c\xc9\x5f\x6e\x9f\x1c\xef\xeb\xae\x5d\xec\x27\xd8\xaf\x64\x42\xa1\xa6\x71\x87\x0e\x37\x15\x13\x4e\x1f\x99\x0c\xe7\xcc\xf4\xa5\x1a\xc6\xcb\x59\x84\x82\x56\x12\xe3\x0c\x2b\x77\x4d\xfd\x05\xe4\xc0\xab\x6c\x32\x92\xcd\x6c\x28\x65\x27\x81\xcc\x7e\xd4\xd5\x51\x4d\xd8\x5f\x5b\xdb\xaf\xcd\xb9\x66\xcb\xc9\xaf\x2e\xc6\x5d\x92\x27\x0a\x5b\x90\xb2\x36\xee\x04\xe6\x7c\x73\x5b\x0c\x23\xf9\x25\x84\x3c\xba\xdd\x04\x56\x7b\x42\xea\x80\x12\x9b\xab\xf0\x64\x4e\xc2\xee\xe2\x80\x30\xaf\x2a\x1c\x03\xc5\x6e\xda\xd8\xa6\xd7\x92\x1f\x18\x6e\x6a\x43\xdc\x9d\xc8\xe9\x8e\x16\x17\x67\x3b\x79\x23\x05\x50\x7d\x44\x48\xef\xe2\xc5\x9c\x19\x1e\x34\xf6\xb3\x38\xdf\xb0\xa2\xd4\x08\x27\x2c\x3e\xe9\xb6\x03\xd0\x46\x38\x36\xc9\x4d\x57\x45\xe8\xaa\xbd\x62\xb9\x32\x73\x17\x2f\xa6\x0d\x6c\xae\x20\x8f\x53\x5d\x94\x78\xce\xb8\xc5\x08\x21\xd6\x94\x0c\x4d\x74\x0a\x0c\xa4\x8c\xe4\x71\x68\xe9\x5d\x9f\x7b\xe6\xf0\x2e\x2a\x1c\x5d\xf5\xd8\xdd\xe6\x35\xd0\x7b\xf2\x4c\x2f\x00\x23\xd4\xb9\x43\xb2\x59\x68\x7b\x50\xb5\x67\xb8\x19\xe4\x29\x36\x29\x64\xe7\xd2\xa3\xcb\xcf\x87\xe5\xe9\x3b\xc8\x56\x47\xa5\x56\xec\xdb\x36\x33\x06\xd9\xf2\x83\xd8\xf3\x40\x45\xa2\xd6\x01\x91\x4e\xda\x08\x05\xdf\x74\xe3\xe1\x3c\xb5\x2a\xe1\xd0\x77\x01\x38\x3b\xe6\xf6\x92\x8c\xb1\x39\x08\x69\x12\x41\x52\x1c\x26\x90\x2e\x63\x17\x5c\x0a\xda\x0b\x42\x3c\xf0\x31\x06\x3b\xae\xb5\xd3\xcd\xdc\xb5\xd6\xa7\xec\x67\x8f\x92\x80\x2d\x90\x02\xf3\x4e\xb8\x5d\x52\x4d\x9f\x13\xbd\x8a\x3b\x7c\x0e\x24\x48\x73\xa0\x22\x10\xd9\x76\xe9\xf3\x5c\xf7\xa9\xd7\x20\xcd\xac\x9d\x06\xa9\x1c\xe9\x7e\x76\x5c\x6d\x57\x25\x45\xde\x4f\x83\xf4\x64\xd5\x46\x74\x68\x7a\x6c\x08\x21\xe4\x26\xbf\x0b\xe8\x63\xfb\x50\x04\xe2\x7a\x72\x33\x31\x49\x0d\x5d\x29\x41\x0b\x2b\xb8\x64\x5e\x45\x0a\x9b\x61\x05\x3b\x12\x3b\x62\x67\x4b\xfd\x1c\x5b\xbe\x8b\x58\x34\x1b\xd9\xa6\xee\xd2\x87\x9d\x4b\x18\x69\x55\xc2\xb4\x83\x1e\x3a\x85\xe6\x33\xda\x3b\xef\xf5\x48\x12\x0b\x6d\x13\x99\xae\xb3\xbb\xd2\x20\x95\x29\x0a\x56\x38\xce\x59\xc9\x9a\xd9\xb5\x60\x30\x4b\x11\x0a\x7c\x99\x73\x27\x13\x10\x71\x64\x62\x94\x3b\x7d\x3f\x0b\x48\xfe\x36\x2a\x1c\xdc\x45\xde\x74\xcc\xfe\x18\xe5\x9c\xc8\x44\x5c\x86\x23\x00\x9c\xc7\x80\x28\x94\x23\x78\xcc\x42\xf0\x66\x32\x90\x36\xde\x86\x37\x8f\x76\xb6\x7a\x58\xe5\x77\x43\xe5\xb3\xe9\xb0\xfb\xbd\x20\x89\x86\x48\x55\xd7\x0d\x4e\x70\x36\xdb\xb7\xd8\x65\xb3\x04\x8d\x9c\xae\xb2\x2e\x6c\xaf\x54\x1c\x89\xe9\x9c\x77\x01\x38\x34\x9a\x88\xa4\x0d\xa5\x7a\x5e\x27\x3e\x45\xc5\x7b\x23\x8e\x4d\xd5\xc6\x88\x73\xa3\xb4\x21\x13\xad\x4a\x93\x28\xcd\x14\x5c\x77\x81\x9f\xec\x8c\x22\x5d\x1b\x5f\xe2\x9a\x9d\x0c\xae\x51\x76\x85\x0e\x4b\xec\x54\xd8\xc2\x2b\x45\x9c\x2f\x81\x86\xad\xca\xef\xed\xc2\xc0\xdc\x35\xf5\x7f\x24\x11\x5b\x98\x28\x47\xb3\x68\x09\x71\x1b\x3b\xa2\x73\xea\x6b\xcc\x59\x15\xce\xde\x0a\x11\x56\xb0\xd0\x45\x9d\x08\x4c\x82\xde\x96\x90\xdb\x7e\xc2\xa9\xf9\x65\xd5\x02\x5b\xeb\x38\x4f\xd7\x56\xbe\x0e\x6c\xcd\x5a\x51\x8f\x53\xc0\x16\xb5\x95\x11\x09\x28\x5a\xa4\x32\xdd\x84\x0e\xd1\xb5\xeb\xa2\xad\x40\x57\x96\xc0\x21\x99\xf1\xc5\xaa\xed\xc9\x91\x55\x02\xa5\xc0\x6b\x1f\xb7\x02\x17\x4d\x2a\x57\x75\x85\x93\xdc\x65\xe4\x4e\xc7\xd0\x6b\xc0\x8c\x47\xad\x59\x4b\xad\x4f\x41\x48\xde\x33\x59\x32\xec\x17\x3b\x1a\xbe\x38\x09\x87\x93\xae\x53\xc9\xcb\x68\x44\x87\x9b\x4e\x22\x0e\x9b\x99\x65\x72\x47\x5b\x06\xb2\xe6\xbc\x4e\xdf\xf0\x9c\x4d\x98\x65\xce\xda\xf5\xae\x8a\x25\x6a\xe8\xe2\xfd\x05\x5d\x2c\x0f\xb8\x8b\xfe\x49\xf2\x79\x58\x2f\x79\x43\xf2\x99\x5b\x62\x99\x88\x26\xb1\x15\xdc\xe8\x80\x91\x27\x9e\x98\x65\x34\x40\xcc\x7a\xdc\x36\x2a\x82\xed\x8c\x9c\xb4\xc1\xc3\xd7\xa6\xef\xb2\xd5\xe3\x92\x7b\xb2\xb6\xce\x3b\x1d\x41\xcc\xec\x34\xb7\xcd\xcb\x00\x21\x12\xbd\x17\x3e\xec\x28\xf6\xe4\xd9\x77\x0c\xc9\x00\xc9\xd8\xbb\x00\x1c\x71\x84\x63\xda\x1a\x0d\x8f\xb5\x0c\xb7\xed\x91\x5d\xc1\x79\x29\xe6\x59\xd4\x34\x49\x55\x61\xe5\xe6\xf6\xbd\x29\x0c\xe1\x05\x34\xb8\xcb\x63\xeb\x8c\x4c\x7b\x97\x12\x95\x09\x8e\xa4\xa9\x4e\xab\x5c\x06\x53\x6d\x70\x46\xe7\xbe\x97\x26\xc0\xf2\x99\x44\x50\x9c\x2e\x7e\x1c\xb7\x99\xdb\x53\x7c\xd0\x0b\x06\xb0\x1d\xad\x99\xc5\x58\x20\x18\xb6\xf3\xda\x7d\x5e\xc8\x2f\x4c\xce\x34\xb4\x69\x33\xd3\x53\xb6\x06\xe0\xe5\xd9\x6d\x84\xf7\x2b\xf1\xbc\x19\x7b\xb8\xbe\x95\x20\x93\x85\xe1\x64\x43\x1a\x2e\x97\xa5\xb4\xf9\x68\x29\xa5\xb5\xb1\x14\xb7\xb0\x0b\x15\xf0\x5d\x16\xd8\x8c\x4d\x2e\xb8\xe1\xbb\xc7\x46\x6b\xcb\xa5\x3c\x95\x91\x74\x51\x23\x73\x99\x17\x25\x5b\x80\xc2\x07\x15\x8f\x73\xec\x02\x65\x3e\xeb\x5d\x88\x59\x61\x8e\xcc\x8b\xc3\x95\xbd\xaf\xc2\x2a\xd8\xc4\xd1\x48\x37\x11\xf6\xe3\x04\x3e\x1f\x4b\xb9\xab\xa4\x43\x48\xcc\xcf\x94\x35\xe0\x8f\xd6\xb8\x3c\x6c\x3a\x75\x47\xf2\x11\xb8\x98\xa9\x00\x4d\x72\x4b\x79\x08\x79\xf2\xb9\xa1\xcb\x66\x69\xae\x7c\x75\x5e\xb2\xbe\x9c\xe2\x4a\xa2\x25\xf4\xd5\xcf\x66\xef\x12\x09\xed\x23\x5e\xf5\x0c\xf5\x91\x8b\x0c\x2e\x7d\xb9\xee\x9c\xd0\x71\x0f\xc6\x69\xd3\x43\x8a\x6d\x25\xbb\x6b\x46\x5a\xbd\xec\x71\xa5\x8b\xdd\x85\xa8\x9f\x05\x01\xde\x3c\x45\x3a\x4e\xa2\xac\xc3\xa4\xc8\xae\xe4\x05\x8c\x75\x79\x25\x95\xd4\x76\x55\x63\xd3\xde\xd2\x88\x1c\x43\xc0\xee\xfa\xbc\x37\xa4\x48\xf4\x08\xa8\xe9\x2f\xbe\x67\x39\x36\x3e\xe6\x6c\x20\xc0\x40\x45\xa9\xc3\xaa\xdd\x14\xd1\xb6\x3a\x38\xca\xbb\xf0\x66\xde\x25\x27\x9e\x31\x67\x89\xb5\xeb\x16\xe6\x94\xeb\xe1\xd4\xa1\xbb\xeb\x5c\x77\xaf\x71\x47\x91\xd7\x53\x38\xaf\xc6\x76\x85\x9d\x14\x97\x7b\xbd\x4b\x60\x77\x1a\xc8\x64\x8e\x70\xef\x5b\xe8\x2b\x99\x55\xf4\x01\x2f\xc3\xcf\x93\x8b\x4a\xb7\x43\xe3\x73\x84\x5e\x38\x8a\xdd\x6e\x2e\xd8\x72\xdb\x77\x92\x4e\xb2\xce\xc6\x24\x3a\x62\x00\xe2\x20\xb9\xc1\xec\xca\xe1\x0f\x4a\xc8\xda\x6b\x82\x6a\xcd\x13\xba\xe5\xf6\x19\x06\x49\xc5\xdb\xbb\x24\x1a\xe0\xe8\x3e\x45\x1b\xfd\x71\x38\x7c\x85\xd3\x65\xab\xe7\x9e\xa8\x3a\x89\xc6\x92\x57\xae\xc4\xa1\xb1\xd5\x46\x5d\x17\x08\xd3\x21\xf0\x68\xa6\xe7\xc3\xe6\xdd\x37\x24\x9f\x1d\x2a\x34\x4a\x3d\x36\xe7\xd8\x6e\xc7\x56\xeb\x68\x71\x4b\x25\x8d\x7c\x71\xe1\x68\x1a\x7d\x93\xa7\xd2\x6d\x1d\x9e\x80\xd3\x66\x70\x13\x8e\x4d\xf7\x12\x9d\x5a\x13\xeb\xb5\x6f\xae\xba\x08\x42\x17\x8b\x88\x53\x40\x50\x92\xc2\xe7\xf2\x8e\x85\x78\x69\x31\xd1\xb4\x09\xc7\xdb\xec\x4b\x58\xee\x03\xaa\xc0\xcd\xa5\xb6\x71\x5e\xaa\x8a\x70\xd5\x4a\xb8\xe2\x9a\x9e\x38\xcb\xce\x0f\x56\x08\xc3\xda\xd9\xd4\xbd\x3c\x14\x05\x37\x95\xd3\x4c\x81\x2e\x11\xf5\x50\x35\x7e\x25\x1a\x49\xd8\x00\xc4\x16\x14\xdf\x9b\x74\x95\x23\x14\x50\xcd\xac\xf7\x63\x82\x6d\xc6\x6d\xab\x77\x8d\x34\xa9\x1f\x1b\xdb\x6a\xd7\xcc\xa7\x98\xa4\xed\xb5\xab\x7d\xc2\xb6\x36\x11\x25\x17\x55\xec\xb4\xa4\x19\xe3\xb4\x52\xe5\xcb\x30\xe4\xcd\x6d\x14\x27\x29\x85\xad\x04\xe3\x86\x9c\x40\x65\xbb\x36\x79\x1c\x09\x6d\x16\x54\x25\xd4\x76\x39\xe7\x64\xf1\x76\xe2\x6c\x83\xc6\x8c\xf0\x7c\x97\xef\xd8\x09\x64\x24\xdb\xb6\x5b\xe5\xac\x91\x91\xd1\xfd\xdc\xb5\xa9\x6c\x8d\x64\xb6\x92\x88\xf3\xe1\x04\xeb\x38\x0b\x3c\x81\xc1\x93\x51\x73\x57\x5d\x2a\x84\x4f\xa4\x33\x92\x26\xbc\x4c\x81\x72\x33\x2b\xf1\x96\x02\x65\x44\xe1\xac\xcf\x11\x02\x88\x7d\x67\x91\x73\x77\xd4\x7e\xc1\x07\x56\x7e\xff\x49\xf2\x79\x18\x82\x76\x47\xf2\xc9\xce\x40\x29\x4a\x21\xc0\xb9\xbc\x1d\x81\x5f\x27\x98\x1a\x79\x42\x5a\x05\xe6\xc2\xf5\xb4\xa9\xc5\x43\xfb\xf3\x38\xaf\x12\xba\xb9\x8b\x44\xd3\x0e\xbd\x2e\x46\x9a\xae\x29\x0a\xab\x5c\x37\x1a\x26\x3e\x35\x3f\x89\xc7\xc7\x45\x82\xa9\x61\x72\xe4\x07\xbd\xae\xed\xe0\x5e\xf1\xbb\x86\xab\x60\xb0\x59\xed\x29\x9c\x08\xdc\x1b\x8a\xc9\x34\xcd\x01\xa0\xa4\x3f\x64\x42\x65\xd1\x58\xa3\xa2\x73\x8b\xd2\x2b\x78\x05\x16\xea\x5d\x0d\x20\x13\x92\xb8\x2c\x4f\xc5\x91\x99\x79\xf8\x01\x88\x29\x91\x23\x00\x4a\xed\x31\xb8\x44\xf1\x94\x55\x65\xe5\xc0\x52\x72\x6f\x6b\xde\xf5\xa3\xb1\xb5\x71\x13\xf6\x22\x87\x5f\x18\x21\x1b\xf6\x73\x03\x62\xb9\xb3\xec\xc7\x9e\x60\xa5\xa8\x27\xdb\x5a\x00\xba\xb4\xdc\x02\x1d\x77\xb5\xa2\x94\x08\x76\x80\x03\xbb\xb2\x83\x71\x9d\x0c\x2c\x54\x73\xd2\x21\xa0\x05\x6b\xbf\xfc\xa6\x93\x9c\x60\x56\x6a\x36\xb4\xfc\xa2\x40\xa6\xbb\x12\x72\x4e\xfc\xaa\x79\x6d\x9b\xe2\xa4\x55\x16\x3c\xcd\xe9\xa8\x61\x55\xcd\x29\xd9\xcf\xc8\xe5\x19\xd8\x28\xc0\x13\x81\xcc\x42\x47\xba\xcd\x5d\xb4\x1d\xd3\xfb\xb8\x39\x4f\x45\x01\x52\x04\xed\x06\x53\xbd\xe6\x63\x67\x69\xc9\xa9\x80\xee\x4d\x0c\x52\x69\x9f\x5a\x1d\xdc\xa2\xf2\xe8\xb6\xeb\x61\x98\xfc\x0d\x68\x97\x2d\x46\xd7\x81\x8c\xbe\xec\xba\x62\xda\xbb\x3b\x07\xe1\xf8\x14\x87\x40\xf3\x2a\x6c\x46\xee\xd8\x9e\x1a\x4c\x49\x34\xec\x47\x4a\x77\xa1\x5d\x2a\x61\x50\x87\x15\xa3\x82\x29\xc0\x30\xc2\x37\xc8\x28\x2e\x12\x44\x41\x0b\x56\xa7\x2e\x50\xc4\x62\xf9\x10\xd4\xc9\x98\xd9\x5d\xfe\x95\xf4\xb0\xbb\xb7\x0d\x68\x79\x9a\x2a\x4d\xbe\x64\x3d\x1d\x91\x29\x6c\x54\xf1\xb1\x03\x8d\xae\x5e\xe5\xdc\x75\x28\x58\x3b\xb6\x7c\x9a\x77\xd1\xbe\xfa\x10\x5c\xf6\x5d\xcc\xa5\x65\x46\x5d\x14\x9d\x55\xde\xe9\x7e\xa1\xbd\x48\x21\x9b\xe0\x46\x4a\x4c\xba\xdf\x40\xc6\x19\x1d\xe9\x36\x1b\xdf\xa9\x8f\x73\x14\xa0\x72\xe1\x54\x49\xc9\x12\x59\x3b\x4e\x04\x85\xcd\x98\xd3\x2d\x97\x74\xc1\x29\x39\x1b\xea\x2c\x88\x9b\xe2\xeb\x5d\x1a\x17\xba\x94\x70\xba\xe7\xc0\xc8\x76\x7a\x68\xc2\xd6\x48\x23\xea\x98\x4e\xd3\x68\xfb\x7e\x25\xed\x58\x4a\x69\xed\xd9\x43\xcf\x9b\x5a\x77\xa5\x41\x95\x73\x39\x7b\x96\x49\x03\x74\x88\xa3\x07\x7c\x4a\xe4\xf0\x45\x77\x75\x0e\xa7\xf6\x1d\x12\xe3\xa5\xdb\x9d\xd9\xb8\x36\x85\xad\x72\xd7\xdb\x01\x28\x96\xa0\x7c\x2f\xa9\x46\x93\xb6\x75\x74\xb8\x20\xef\x9c\x6b\xb8\x42\xb6\x3d\x0d\x3b\x75\xbf\xe4\x76\x1d\xe9\xd2\xbb\x8d\xc5\x3d\x8a\x6c\x25\x1f\xfb\xaa\x1f\xf9\xa8\x4f\xfe\x82\x2f\xff\xe9\xf4\x61\x7f\x17\x7c\xe2\x5f\xf9\x27\x6f\xf6\x95\x3f\xfc\x19\xdf\xfb\xe3\x7f\xe3\xdf\x7f\xc2\x87\x7f\xfe\xcb\xde\xe3\xfb\x3e\x73\xfe\x19\xb2\xd5\xd7\xbf\xd5\xa7\xbf\xf1\x6b\x3e\xe8\xf1\xdf\xf5\x8c\x2f\xff\x98\xaf\x7e\xe3\xf7\xfe\xde\xff\xf9\x89\x2f\xfc\xc5\xfe\xd3\x9f\xfd\x57\xdf\xe6\x07\xbf\xed\x39\xef\xf9\xb5\xff\xf5\x27\x5f\xfc\x40\xe8\xbf\xfe\xa6\xbf\xfe\xf4\x17\x7d\xcf\x87\xbe\xea\xd7\xbe\xe5\x8d\x9f\xf4\xa4\xff\xfc\x66\x5f\xf3\x81\x2f\xfd\xfe\x7f\xf9\xab\x1f\xf9\x03\xaf\xf7\xb5\x1f\xff\xd9\x5f\xfd\xe7\x7f\x83\x7c\xd0\x83\xa1\xef\x69\x7f\x85\x3e\xeb\x8b\x3f\xf8\xe5\x8f\xff\xa4\x6f\xd8\xc4\x77\x3c\xe7\xd7\xff\xc2\xfb\xfe\xe8\x3f\x7a\x0a\x7a\xf5\xe7\xbf\xcf\xfe\xb7\x9f\xf9\xd3\xfe\xb7\x1f\x24\x30\xfd\xef\xf7\xfc\xad\xf9\x8c\xe7\xbf\xe4\x49\xfd\x7f\xbc\xfc\x17\x7f\xf5\xa7\xdf\xe4\xa5\x9f\xf4\x03\xed\x8d\x3f\xe5\xbb\xde\xf8\x27\x7e\xe5\xcd\xaf\xbf\xf9\xd5\x6f\xfb\x29\x0f\x84\xbe\xdb\xa7\x7c\xfb\x97\x3d\xf7\x27\x9f\xff\x79\x3f\xfc\x4f\xbe\xfb\xb1\xfc\xc9\x5f\xf9\xcf\xf5\x6f\xfc\x9b\x97\xf8\x67\x7f\x5d\x7d\xbd\x2f\x79\xdc\x3f\x7e\xc7\xfc\xd7\x5f\xf0\x40\xe8\xb7\xbc\xd6\x13\x3e\xe1\x43\x9f\xf6\x47\x3f\xfb\x84\xb7\xfa\x91\x37\xff\x81\x2f\xf9\xae\x6f\x7d\xe5\x73\x5e\xfd\xf9\x7f\xe3\xf7\xbf\xf4\x99\xfb\xb7\x7f\xe7\x7f\xfc\x95\xff\xfe\xfb\x4f\x7e\x20\xf4\x09\x7f\xef\xbd\xfe\x1f\xf1\xd4\xfe\xd8\x3f\xd4\x8f\x79\xea\x0b\x3f\xf2\x47\x9f\xfb\xda\x5f\xfb\xcd\x9f\x08\x9e\x94\x7e\xf4\xeb\x5e\xf1\x11\x6f\xff\x47\x7f\xee\xbb\x7e\xee\x81\xd0\x4f\x7e\xec\xd3\x7f\xec\x05\xdf\xee\xde\xe2\x33\xfe\xe2\x8b\xde\xea\x79\x8f\x03\x5f\xfc\xd5\x1f\xf3\xde\x7f\x07\xbc\xef\xaf\xbe\xe3\xab\xff\xcb\xe3\x7f\xe4\xdb\x3e\xd4\xfe\x9b\x3f\x25\x5b\x3d\xec\xa9\xde\x70\x03\x5c\x88\x20\x69\xc0\x71\x1c\x75\x98\x99\x56\x1a\xfe\x24\x16\xf9\x39\x2c\x8c\xf5\x40\x73\x70\x4c\xb1\x54\x81\x29\xed\x6d\x5e\xeb\x36\x07\xe3\x82\x4e\x8b\xf3\x23\xed\x35\x0c\x53\x2e\x8c\x74\xb4\xf6\x8a\x03\xab\x88\xc5\x35\xb0\x84\x80\x1e\x27\x5b\x2c\xed\x88\x52\xa4\x8f\x79\x17\xa8\xd5\xaf\x33\xb4\x9d\x11\x85\x9c\x15\x93\x37\xc4\xa7\xac\xe8\xd2\x28\x0e\x07\x8a\xea\xf8\x60\x95\x84\x66\xf4\x8a\xf1\x80\xcb\x88\x7c\x17\xb1\xe8\xb2\xac\x93\xba\x37\x5e\x4f\xba\x89\xcb\x17\x9f\xa0\x65\x0a\xd3\xee\x17\x2d\x8e\x51\xa6\x39\x5f\x24\x79\x51\xb4\x94\x92\x70\x71\x97\xe7\x85\x21\x50\x9b\xb4\x06\x31\xa7\xb4\xd7\x89\x85\x47\x79\x23\x27\x20\x24\xda\xb4\xc3\x4a\x8c\x84\xdd\x9d\xe4\xf0\x0e\x5e\x75\xcb\xb9\xdc\xe5\xb9\x0d\xd2\x71\xa6\x70\xe8\x0e\x11\x85\x68\x01\x75\x56\x10\x42\xdc\xd8\x19\x41\x1a\x9b\x3e\x01\x80\x5b\xf2\x66\x32\xeb\xaf\x82\xaf\xba\xee\x9a\xd6\x90\x30\x1b\x38\xab\x96\xb8\x9e\xc5\xe6\x31\x39\x2f\xe0\x54\x12\xd3\x15\xe9\x1c\x86\x23\xed\xe1\xd1\xa0\x76\x6b\xc2\xb6\x8b\x48\xef\xa2\x65\xef\x4c\x41\xaf\xac\xf6\x91\x76\x71\xd0\xe4\x82\x3f\x4f\x52\x6a\x51\xfa\x8f\xb7\x8a\xf3\x90\xe0\x3a\x2a\x39\x43\x92\x61\xa8\x99\x1f\x70\x24\xf9\x93\xe4\xf3\xb0\x3c\x7d\x87\xab\x73\x50\x5d\x31\xc5\xe2\xf0\xb6\x9b\xac\x62\xa3\x54\x48\xd2\xba\x03\x95\xd6\xa6\x9c\xd4\xbc\x79\x05\x90\xb3\x9c\x63\xe5\xd0\xba\x6b\xc8\x74\xb0\x0e\xb1\xa3\xd5\xae\xe3\x92\x7a\x76\x81\xfa\xbe\x68\x3d\xda\x8e\x21\x59\x8e\x5c\xc3\xb4\x43\xb8\x7a\x29\x96\xb9\xdb\x55\x62\x77\x69\x0b\xcf\x96\xf7\x2d\x39\x45\xe1\xa6\xbd\x6a\x88\xd2\x80\x33\x9a\xf0\xb8\x8e\xda\x02\xd7\x86\xa8\xb8\xa9\xbc\x29\xd9\x80\x40\x69\x66\x7b\x17\xd9\x2a\x4b\xd9\xb9\x3f\x03\x8b\xcd\x05\xc1\x37\x2f\x1c\x3d\xcf\xb9\xd6\x71\x99\xe1\xb9\xcc\x99\x72\xbb\x15\x7c\x5d\x78\x4f\x87\x92\xea\x36\xd9\x39\x39\x48\x8d\x05\x46\x49\x3b\x1a\x23\xd0\x6d\xf0\x64\xa4\x63\x17\xdf\x8d\x2c\xe6\x42\xbd\x84\xcc\x36\xe5\x19\x26\x43\x41\x6f\xcb\x5d\xf2\x1e\x6b\xf2\x8c\xd7\x19\xcf\x2b\x29\x49\xdb\x21\xc1\x81\xf7\x0d\x2c\x7f\xc4\x2e\xb8\x3b\xd5\x79\xac\x5d\x19\x4f\xc2\xa6\x33\x2d\xd0\xa5\xbb\x4c\x0f\x39\xe8\xc3\x1f\x75\x45\x47\x02\x58\xf1\x74\xe0\xd0\x07\x33\x66\x4b\x0e\x94\xe1\x99\xa4\x86\x36\x3b\x1c\xca\x81\xe1\xd2\x10\xb9\xab\x39\xa0\x75\x64\x2b\x29\x2d\x67\x8b\xa6\x40\x15\x83\x62\x20\xa6\xd6\xba\x91\xae\x26\x68\x01\xd9\x27\xdf\xc3\xe5\x40\x3d\x87\xd0\xb8\xf3\x47\xef\x30\x7d\x58\xe5\x77\xc3\xe0\x0d\x5f\x61\xb0\x65\x17\x1f\x66\x49\xca\xce\xc0\xdb\x05\x4e\xa7\x18\xa3\x65\xf8\xbe\x05\x95\xb2\x95\xda\x84\x96\xe3\x05\xeb\xe6\xd6\x5d\x44\x66\x96\x70\xdd\xcb\xb6\xa3\x31\x2b\x3d\x37\xd9\x13\xa8\x53\x74\xb3\x0e\xd8\x36\x6d\x07\xef\x88\xda\xad\x78\xb0\x0f\x16\x41\x05\x6e\xde\x04\x7e\xb2\xb1\x23\x11\x18\x55\xae\x58\x07\x85\xb8\xb8\xba\x70\x4c\x8f\xdc\xfe\x2c\x9d\x85\x5c\xad\xcb\x3e\x68\xf5\x1c\x9c\xba\x4e\xa8\xcc\x5d\x5e\xca\x0c\x44\xc5\x5b\xc5\xe6\x74\xc6\xe7\x2b\xd7\xd6\x95\x84\x6a\xd0\xd9\x6a\x92\x41\x15\x3f\xe5\x62\x36\x39\x0c\xe7\x15\xf9\xc1\x1b\xbf\x4f\xd1\xc7\xc2\x30\x97\x74\x9c\xec\x51\x2a\xe6\x63\x5f\xe7\x6a\xd7\xbe\xcc\x76\x6d\x26\x87\x9d\xe8\x2e\x79\xcb\x42\x92\x89\xa5\x1b\x77\xd9\xdc\xd0\x6d\x9f\xcc\x74\x10\x3b\x46\x84\xc7\xd5\x98\x35\x24\x27\x55\x23\xf3\x0a\x31\x71\xa1\xea\x2a\xa4\x38\x6d\x44\x4f\xc9\x6d\x02\x77\x81\xe4\xcc\xe7\x40\xd5\xac\x0b\xe7\x68\x2b\x24\x97\x0a\xc4\xed\xa0\x86\xa2\x2d\xd9\xfb\x5e\xec\x51\x6b\xbd\xa6\x59\x29\x38\x3e\xd0\x39\xd7\x5d\x90\x63\x1c\x9b\x57\x30\x72\xb7\x8e\x2a\xcf\xca\x11\x70\xe4\xac\xca\x63\xd9\x37\x8d\x98\x4a\x50\xda\x54\xe8\x09\x56\x09\x7a\x53\x39\x3e\x60\x35\xf8\xa7\x83\xb7\x87\xf4\x92\x37\x54\x3e\xc5\x60\x3d\x61\x65\x87\x00\xe5\x91\x33\x8b\xe2\xd2\x94\x9e\xa4\xa9\x5c\x8d\x40\x37\xbc\x8f\x96\x77\x0e\x96\x3a\xb8\x36\x52\xdd\x66\xa4\xb2\x71\xc3\xca\x26\xd9\x79\xf2\x0b\x6a\x24\x1f\xb9\x4a\xcd\x59\x62\xc4\xce\x6d\x1b\x99\x9d\xa6\x75\x9c\x19\x07\xba\x91\xc3\xea\x38\xee\x5a\xd1\xcb\x50\x31\x60\x23\xd3\x13\xa5\x03\xe5\xd4\x28\x5f\xda\x4a\xd4\xb3\x6b\x90\x98\x79\x99\x63\xab\x8a\x78\x30\xbc\x59\xa7\x1d\x4c\xdf\x36\xf5\x47\xc4\x87\x76\x5c\xe8\xda\x2e\x5f\x76\xce\x58\x36\xd1\x5c\x64\x26\x2b\x76\xe7\x92\xe3\xfe\xa2\x97\xd0\xfe\x34\x8a\x47\x95\x0f\xc2\xef\xaa\xc1\xe2\x26\x01\xdc\x4c\x89\x7a\x2a\x9a\xa1\xb8\x80\x6e\x43\x85\xed\x1c\xe6\x70\x79\x6c\xc2\x54\xc2\x35\x88\x5b\x1a\xb5\xd7\x47\x4e\x74\xd7\xac\x3d\x48\x5e\x70\xab\x4a\xf0\xc6\x50\xe3\xce\xb9\xa3\x9c\xa6\xed\x61\x5f\x88\x7a\xd3\xb6\x43\xc7\x08\x63\x0e\x03\xaa\xeb\x32\x51\xdf\xe5\xe9\xc9\xa0\xca\x29\xcf\xc1\xcb\x75\x24\xc9\xe8\x3a\x74\x4b\xf4\x88\x93\xb5\xd6\x83\xd9\xd6\xda\x48\x64\x1d\xa9\x75\xd2\xbc\x55\xcd\xf8\xba\x8b\x80\x96\x07\x32\x17\xcd\xca\x97\xac\x8b\x73\x7a\x9f\x68\x9f\xf1\xe2\x15\xe2\xdc\xb3\x3d\x52\xd8\xce\x6b\xe7\xee\x50\xad\xf7\x6e\xa3\x30\xeb\x51\xc9\xe7\x61\xd3\xa9\x3b\xfc\x1d\x62\xe3\x45\xb2\x59\xea\xa1\x57\x3d\x7d\xf2\xd4\xa3\x3a\xf5\x14\x0d\xe5\x31\x2a\x47\xab\x65\xc4\xb8\x03\x91\xc0\x6d\xdb\xfc\x6d\xc2\x66\x56\x1b\xd6\x82\xaf\xd8\xe5\x24\x2d\x26\x51\xf7\x86\xaf\x9e\x85\x77\x85\xc2\xdc\x6a\x61\x24\x9a\x12\x8d\xd8\x42\x3f\x88\xac\xe9\xae\x5b\x7e\x93\xae\xb0\x2b\x99\x7d\x96\x4b\xd8\x66\x70\x39\x5b\x9d\x0e\x32\x98\x0f\xb7\x53\x8d\x0d\x1f\xac\xd0\xbe\x27\x72\x10\x76\x39\xa4\xef\x52\x51\x64\x7e\x5d\x66\x1a\x7c\xb5\xcb\x22\x02\xfd\x2e\xd9\xa0\x07\xc1\xa6\xed\x75\x6d\x89\x38\xcf\x96\x55\xdb\x12\x98\xc0\xbd\xf5\x6b\x96\xbb\x7e\x79\x03\x46\x74\xa6\x09\x32\xb6\x35\x85\xd4\x18\x65\x00\x44\xbd\x68\x47\xcc\x94\x03\x41\x1a\x20\x58\xb8\x68\x10\xa2\x17\x40\x3b\x73\x97\xfb\x46\x03\x8a\x11\x99\x2e\xca\xd5\xa1\x64\x05\x7d\xf3\xa7\x3c\xfb\x35\x03\x71\x80\x8c\xf3\x12\xe5\xec\x49\xf0\x06\xa1\xf4\x9d\xb1\x23\xdd\xf5\xcb\xfb\x0d\xbb\x0d\xb7\x06\x3d\xe6\x6c\xd9\xb9\xb4\x6c\x08\xf3\x75\xa4\x1c\xb8\x0c\x1d\x94\xd2\xd8\x5a\xba\xbb\x30\xe5\x4a\x9a\xc1\xbb\x9a\xe2\x81\xab\xcc\x16\x15\x3e\xe0\xb6\x35\x45\x96\x31\x25\x0d\x8e\x95\xdc\xdb\x01\x33\x41\x2d\x33\x28\xe3\xe8\x9d\x9b\x9c\x9a\xd8\xa0\x7f\x54\xf2\x79\xd8\xbc\xfb\x86\xe4\xb3\xae\x2a\x34\x4b\xb6\xd0\x4b\xb8\xdc\xd5\x24\x07\x1d\xb2\x04\x01\x36\xa5\xd5\xce\x8e\x89\x19\x89\x62\x3a\xe0\x38\x18\xd9\xf0\x74\x17\x61\x24\xe7\xb9\xed\xe9\xec\x2e\x1b\xcc\xab\xc3\xa3\x6d\xaa\x6f\x21\x41\x94\xf5\x49\xcc\x12\x75\xe2\xb3\x8f\x82\xda\xcc\xcd\x6a\x01\xf2\x5d\x23\x4d\x6e\x8f\x5e\x45\x36\xa0\x07\x0d\xb4\xd8\xc8\x68\xc5\x6a\x87\xf0\xee\xbd\x31\x43\xc8\x0d\xd5\xee\x3c\x61\x51\xcc\x8b\x5c\x60\xd8\xbb\xcc\xfa\x03\xe8\x52\x32\x5d\x36\xae\xb1\xdd\xcf\x02\xc1\x48\x51\xec\xad\x1f\x83\xf5\x74\xce\x68\x84\x03\x84\x6c\xc2\x14\x5b\xbb\x4c\x17\xb8\xcb\x55\xe1\xdc\x4f\xa3\x77\x15\x4b\x04\xd7\xd1\xb2\xc0\x5b\x39\x79\x1e\x10\x4a\x83\xe4\xb6\x8f\xc1\x0f\x07\x3d\x94\xe1\xd2\x3c\x2c\x49\x60\xb9\xeb\x92\x1a\x07\x57\x67\xf2\xc7\x31\x1b\x75\x09\xa4\xf3\x3a\xa4\xda\xf2\x98\x3d\xac\x32\x7b\x94\x0a\x1d\xb5\xed\x96\x85\x30\xf6\x3f\x36\x45\xbd\x8b\xe9\x59\x35\xf2\x47\xc1\x11\x74\x90\xdb\x75\x6c\x3b\xa8\xd1\x4f\x2c\x1b\x84\xda\xf8\xb8\x33\xa8\xab\x3a\x37\xca\x52\x86\x17\x9d\xc6\xeb\xbb\xae\x86\x81\x9a\x9d\x94\x9a\x9e\x87\x05\xcb\xc3\x51\xab\xcf\x46\x5d\xa5\x4e\x69\x8c\xd9\x75\x99\x6b\x9c\x55\x55\xc6\xae\xe9\xcb\x10\xf9\xd1\x1a\x97\x87\x21\x68\x37\xcc\x7c\x12\x14\x63\xf3\xe3\xa2\xe2\xcc\x97\x44\xb4\x98\x03\xc9\x4c\x2f\x09\xaf\x12\x09\xef\xe4\x02\xf4\x94\xeb\x3a\xc9\xde\x2e\x3e\xd2\x65\xef\x7a\x80\x88\xfa\x3a\x5c\x8d\xc6\x14\xaf\x2c\xc6\x78\x1b\x71\x1c\xe0\xd2\xa5\xb3\x9d\x2c\x12\xf3\x2a\x4e\xcc\xa9\xec\x61\x43\xeb\x81\xb0\xbb\x5a\x0c\x6b\xf6\x13\x91\x50\x27\x96\x69\x06\xbe\x49\x05\x22\x21\xbd\xd5\x72\x1a\xdc\x4d\x63\x36\x42\x43\x37\xa0\xb0\x0a\x4c\x3b\x91\xc0\x5d\x53\x85\x50\xe4\x49\x0b\xf0\x97\x4a\x6c\x1b\x13\x03\x12\x46\x6e\xbd\x4e\xf8\xc7\x30\x4a\xa8\x67\x36\x83\xd0\x7d\x6d\x94\x9c\xdb\xe4\x8d\xdd\xb5\xa9\xdc\x35\x0a\x62\xc5\x78\xc9\xba\x7b\x23\x37\xa5\x6a\xb4\xbc\x4b\xe5\x01\xb6\x17\x5e\x16\xe0\x23\x0e\xa8\xfa\x62\x8c\xd5\x80\xdb\x5d\xdb\xcd\xe8\xa4\x60\xf1\x03\x64\x02\x14\x90\xcb\xed\xf9\x08\xa3\x10\x56\x83\x86\x1c\x47\xa9\xe3\x32\xc2\x3a\xec\xed\x59\xb0\x3f\x17\x20\xe6\x2e\x04\xf0\x84\x55\x5c\x8b\x9b\x50\xa7\xa6\x75\xe2\x7c\xd0\x8d\x47\x84\xa2\x2d\x9b\xda\x24\x5a\x3b\xc5\x49\x39\x44\xb1\xdb\x81\x3f\x50\xe0\x77\x91\xad\x58\x90\x0e\xec\x60\x8c\xcd\x2f\x3f\x06\x0c\x3a\xc0\xc3\x57\x90\x19\xbe\xa8\x8d\x0e\xee\x24\xb4\x56\x65\xed\xd2\x8c\xaa\x22\x37\xf1\x51\xc9\xe7\x61\x98\xfc\x0d\xc9\xa7\x77\x34\xa9\xe1\x78\xc1\x80\x42\x8b\x5b\x3f\xc8\xf0\x0e\x3a\x72\xe6\xca\x4f\x86\x4e\x73\x9c\x3a\x5c\x6e\xc2\x03\x0d\x8a\xce\xa8\xef\x12\x93\x05\x40\x68\x6b\x2e\xb1\x2e\xe6\xbe\xe9\x63\xab\x31\x8f\x7e\x21\xc5\xb6\x43\x13\x15\xba\x35\x9c\x52\xda\xa6\x02\xfd\xca\x64\x2c\x70\x57\x1a\x14\x79\x5d\xe5\xca\x06\x70\x3e\x9b\xd5\x34\x20\x5a\x38\x2c\xbb\x22\xa7\x0a\x55\x21\x50\xc1\x18\xdd\xe6\x1d\x2e\x6b\x75\x45\xeb\x36\xdd\xcf\x1a\x96\x53\x87\x26\x0a\xfb\x66\x60\xda\xbd\x63\x9e\x1e\x1b\xf1\x07\x39\x65\xc6\x48\x1c\x09\xf0\xe4\x66\x35\x4a\x4a\xb9\x4e\x01\xef\x5a\x1b\x40\x2f\x0a\x9a\x1b\xf9\xa0\x76\x62\x9a\xda\x2a\x6b\xac\xd1\x19\xd6\x9c\xe9\x8c\x79\x5b\x59\x4c\x19\x95\x4e\x80\xa8\x68\x4d\x02\x77\xed\xeb\x64\x06\x5b\xa5\xbb\x0a\xda\x9c\xfc\x38\x75\x9b\x2e\xa6\x75\x08\xa4\xc1\x26\xa1\xa9\xfb\xce\x48\xf2\xb1\x07\x10\x95\xbd\xcc\x38\xe8\x5d\x26\x07\x80\x19\x25\x4a\x84\x97\x94\x8c\xd8\x19\xb7\xc3\x4f\x47\x37\xb1\x6d\x40\x60\xe3\xe3\x28\xe8\x8c\x7d\x15\x8d\x85\xda\x48\xd8\xe1\x6d\x5f\x6c\x8a\xc3\x28\xef\x72\xa8\x4a\xa3\xb1\x49\xd6\x74\xd4\xdd\x75\x0d\x67\xd8\xeb\x7c\xe4\x3a\xdf\xdc\x24\x9d\x9b\x0d\x81\x7d\x09\x52\xc8\xa3\xc8\x56\xaf\x7a\xad\xf7\xfc\xa9\x0f\xfe\xbf\x3f\xe7\x77\x9f\xf1\xba\x2f\xff\xe5\x9f\x5d\x6f\xf2\x9e\x5f\xf1\x98\x27\xbc\xce\x5f\x7f\x8b\x6f\xec\xdf\xff\xfa\x1f\xf5\xf9\x3f\xff\x96\xff\x59\xff\x19\xb2\xd5\x27\x7c\xd4\x5f\x66\x3f\xf3\x16\x1f\xfe\x47\xaf\x7c\xc9\xe7\x7c\xeb\xbb\x7e\xeb\xcb\xfe\xf1\xff\xe7\x0b\x7e\xf1\x95\xaf\x79\xc2\xbb\xfd\xa3\x5f\xfc\xbd\x77\x7e\xff\x1f\x7e\xe7\x17\xbf\xe6\x81\xd0\x2f\x78\xb3\x7f\xf7\xf5\xef\xf3\x1b\x4f\xf8\x9b\x2f\xe5\xec\x3b\xbe\xf6\x7a\x86\xfc\xa9\xb7\x79\xcc\x4b\xc5\x2f\xbf\xfa\xe3\xde\xe9\xb3\xde\xf4\xfb\x8e\xd7\xf6\xe3\x81\xd0\x7f\xfb\xb6\x74\x7f\xbb\x27\xbf\xfc\x71\xcf\xfd\x4a\xfc\xe7\x5f\xf7\xf7\xfe\xe6\x7b\xbf\xfb\x3b\x7d\xdc\x67\x3f\xfb\x3b\x5e\xfc\xfe\x6f\xf5\x7d\x1f\xfd\xba\x9f\xf7\x31\x2f\x7e\xf7\x07\x42\x7f\xfe\x83\x7f\xe0\x27\xff\xe2\xef\x3c\xf6\xb1\x5f\xf5\xcd\x3f\xfc\xb2\x7f\xf8\x13\xdf\xf3\x1f\x5e\xf9\x9c\x1f\x78\x89\xfd\xc6\x37\x7f\xe6\x2f\xbd\xc9\x6f\x3c\xf1\x8d\x3f\xf5\x93\x9e\xfb\x40\xe8\x27\x3d\xfe\x4b\x7f\xe3\x13\xff\xd2\x4f\xbe\xe7\xe7\xbd\xb3\xfe\xd1\x5f\x7c\x8f\xe7\x3f\xb6\x3c\xfd\x29\xef\xf4\xb8\xf3\x9b\xff\xfd\xfb\xbe\xe9\xd3\xd0\x07\x3d\xe5\x8b\xde\xe1\x81\xd0\xb7\xfe\xc3\xa7\xbe\xfa\xb7\x9e\xfa\xa4\xcf\xe4\xf9\x55\xbf\xf0\x23\x9f\xfa\x64\xfa\x39\xbf\xfa\xb7\x7f\xda\x3e\xef\xa3\x3f\xfa\x2d\xf6\x2f\xfb\xd6\xeb\x3f\xf3\x07\xcf\xfa\xf3\x2f\xfc\xc3\xa7\xbe\xc1\x6b\x5d\xcf\xf9\xbe\x0f\xf8\xcb\x3f\xf8\xcf\x9e\xf3\x97\x9f\xf7\xfe\x9f\xff\x91\xdf\xfb\x3a\x9f\xf3\x91\xe5\x39\xdf\xfd\x06\xaf\xf8\x10\xf7\x98\x2f\x7f\x20\xf4\x57\x7f\xf3\x9f\xbe\xc9\xd3\xfb\xd7\x7f\x29\x7e\xfc\x7f\x7f\xec\xb7\x3d\xeb\x7f\x7c\xc2\x17\xfc\x54\x7d\xee\xe7\xf6\x6f\xfd\xa6\x5f\x7a\xbd\x37\xfa\xa4\x17\xfe\xd5\x77\x7f\xe3\x3f\x25\x5b\x3d\xec\xa9\xde\x70\x03\x38\x71\x36\x39\x89\x3d\x90\xae\x24\xe2\x1d\xf2\xca\x8c\x23\x2b\xf0\xa1\xc7\x66\x8c\x40\x08\x96\x0a\xb3\x1b\x15\x2b\x01\xe9\x6d\x6a\x79\xb6\x12\x76\x2d\x9e\x6b\x04\xdb\x60\x4e\x69\xec\xfb\xb6\x3c\x18\xe0\xd0\x60\x9a\x88\x47\xdf\x8d\xa8\xd8\x1c\xed\x8a\x1b\xde\xb0\x29\x77\x09\x8d\x18\x26\xb3\x0e\x64\xd6\xd8\xc2\x41\x71\x8e\xa9\x4e\x96\x0f\x60\xd3\x64\x50\xa1\xad\x08\x16\x07\x3a\x0b\xcf\x65\x61\x6a\xaf\xf3\xb6\xcd\x1a\xb8\x87\x91\xc1\xe2\x56\xaa\x2b\x47\x5b\x0a\xa0\x3a\x14\xd1\x08\xd8\xb1\x5e\x36\x72\x50\xac\x85\x17\xf0\xf8\x2a\x3b\x82\xa1\xde\x66\xfd\x83\x45\xde\x9d\xdf\xc3\xd2\x61\x3b\xfa\x75\xa0\x2b\x2d\xaa\xa1\x71\x64\xd3\xd9\x41\xe3\x8e\x2b\xe7\xa4\x91\xf6\xd3\xed\x7a\x9d\xf7\xad\xb0\x99\x50\x15\xcd\x57\x09\x8c\x07\x46\xb9\x45\xc6\x40\xd5\xe8\x30\xde\x94\x3d\x39\xe9\xd0\xd5\x2a\xa0\x01\x05\x6a\x99\xac\x3b\xbe\xcb\xfa\x87\x4a\xcb\x08\xcc\x7c\x59\x8d\xd2\x50\x70\x22\x37\x7a\x21\x5c\x0e\x9e\x27\xd9\xfd\x79\x85\x99\xf6\xcc\x66\x90\xbc\x06\xcc\x79\xa5\x77\x11\x15\x89\x19\x89\x89\x3c\x64\xa8\xa7\x3f\x2a\x71\x9a\xef\x98\x4c\x77\x50\x11\xe5\x74\xc7\xde\x7a\x09\x1b\xf1\x22\x90\xb2\xb4\x52\x64\x3d\x9a\xeb\xff\xb0\x3c\x7d\x07\xd7\x9f\x9d\x45\x48\xbf\x5d\x28\x85\x69\x3d\x0c\xf2\x0c\x7b\x2c\x25\x6b\x30\xa6\x65\x2e\x5e\xe6\x6a\x27\xbe\x68\xc9\x56\x19\xb7\xcf\x7c\xd7\x36\x22\x1b\x88\x1a\xf8\x22\x99\xe4\xcd\x88\xad\xd1\x0a\xb8\x0a\xa7\x94\x4c\x0d\x39\x74\x29\x87\x6c\xc3\x4f\x85\x8c\xbc\x1c\x33\xe7\x96\xef\xea\x7d\xc9\xe1\xf9\x51\x4f\xd5\x47\xce\x2c\xaa\x44\x07\xc5\x41\xad\xb5\xab\x51\x01\x06\x17\xf0\x23\x4e\x98\xe5\x6c\x83\x3b\x5e\x51\xc9\x77\x75\x57\xbb\x64\x70\x61\x0e\x0a\x27\x70\x1a\x03\x45\x38\x66\xdc\xf2\x5c\x17\xb7\xd4\x66\x38\x69\x6b\x0d\x4e\x9e\x7c\x61\x08\x31\x0c\xe0\x6d\xd6\x9d\x40\x6d\xb5\x9b\x8b\x6f\x81\x9f\x89\x5c\x76\x8b\x7b\x3e\xaf\x70\xcc\x01\x70\xb6\x55\x34\x2c\xdd\x8e\x12\x95\xc2\x76\x02\x21\xbd\xcb\xd9\x8a\xc1\x1c\xed\xd9\x04\x29\xd4\x9a\x92\xc2\x46\x64\x22\x4b\x1d\x27\x9a\xc7\x09\xe2\x9e\x25\xb8\xc2\xd1\x8e\xcd\x8c\x73\x5a\xc2\x8f\x95\xee\x82\xa6\xc5\xd2\x69\x9f\x11\xcd\xd8\x32\x3a\x65\x29\x4c\x30\x8d\x82\x1e\x08\x6f\x30\xe0\xb3\xac\xd5\x27\x61\x4e\x20\x63\x66\x8e\xbd\x95\xbb\xd6\x31\x4c\x53\x50\xda\x76\x91\x8e\x2d\xe8\xaa\x26\x1d\x26\xa2\xbe\x47\x79\x86\x8b\x95\x71\xb1\x93\x36\xe6\xb3\x4b\xa3\x4d\x98\xe1\x94\xf5\xd1\x12\xeb\x87\x55\x7e\x37\x24\x9f\x88\xed\xe6\xb4\x52\xb9\x65\x0e\x6d\x17\x2c\x2a\x43\xce\xed\x08\x0e\xb9\x9d\x76\xa1\xfc\xb8\x24\xdd\x4d\x6a\xd7\x6c\xa4\xb0\x76\x1b\x7a\x6c\x37\x41\x41\x63\x3b\xb1\x1b\x77\x12\x23\x3c\xf2\x2e\x3a\x59\x7b\xbd\xca\x86\x93\xd2\xd0\x5d\x0c\x73\x13\x16\x29\x30\x9a\x14\xcd\x5d\x9f\xf7\x29\xc7\xa5\xb6\x51\xa1\x3c\xf6\x33\x83\x38\x51\x73\xd9\xf6\x41\x3a\x0d\xe5\x0c\x6c\x2d\xbe\x1c\x2d\x12\xf2\xcd\x62\xbe\x0d\x9d\xee\x3a\x49\x6d\xb8\xa5\x71\x9e\x1d\xa4\xf3\xb0\x8e\xe6\x15\xe1\x15\x23\xcf\x27\x94\x9d\x95\xd4\xb4\x6d\xe3\x91\xe2\x30\x17\x3d\xa1\x06\xca\xdc\x25\xef\x29\x51\x45\xb8\x30\x6d\x06\xa0\x0e\x36\x28\x62\x1c\x33\xdb\xbd\x08\x50\xff\x5f\xda\xfe\x35\x8a\xbf\xae\xaa\x0b\xc5\x15\x32\x41\x07\xa2\x22\x17\xe5\x62\x11\x8a\x24\x2a\xcf\xba\xaa\x91\xa4\x24\x36\x54\xbc\xfd\x93\x54\xb4\x5c\xb7\xbd\xf7\xda\xeb\x7e\xdb\x6b\xaf\xa5\xf8\xf7\x51\x30\x05\x34\x41\x89\x80\x43\x2a\x49\x06\x0a\x68\x85\x10\x52\x07\x41\x8a\x82\x48\x3c\xa8\x47\xcc\x50\x7c\x2c\x21\x40\xa0\x53\x28\x81\x9e\xf1\xc0\xd0\x7e\xc3\x9f\x63\xfc\x5e\x74\xf6\xab\xef\x9b\xf9\x62\x7d\xd7\x5e\xeb\xb3\xe6\xfc\xcc\xcf\x9c\xd3\x48\x45\xf7\x2a\x8f\x05\x1c\x5c\x60\xdd\xc3\x01\x9a\xae\x57\x51\x80\x9b\x73\x99\xec\x6c\x6a\xe2\x58\xed\x6a\x94\xf3\x84\x61\x51\x00\xe5\xc2\x05\x5a\xdb\x74\x32\x48\xa3\x43\x48\x2d\x8b\x30\x54\xba\xac\xde\x12\xc1\x84\x42\x59\x40\x45\xba\x20\x32\xf1\xe8\xa7\xa3\xdc\xad\x62\x66\xa6\x61\xe5\x16\x96\x95\xf6\xde\x46\x3a\x89\x54\xbd\xef\x57\x29\x74\xd8\xaa\x89\x3d\xf8\x01\x37\x0f\x0f\x32\x2a\xb6\xb4\x71\xea\x5b\x72\x51\x9f\xb6\xa5\x00\xe1\xc2\x71\x92\x82\xd7\xe0\x5d\x05\xc9\xe6\x71\x13\xf8\xdc\x2a\x96\xbc\x20\xec\x2a\xac\x63\x54\xe5\x16\xf4\x29\x37\x21\x83\xcc\x89\x76\x1b\xb6\x35\x25\x4c\xc0\x42\x8a\x64\x81\xcc\xb0\xee\xa8\xcf\x45\x08\xba\x5e\xd5\xc6\x97\xcd\x5d\x49\x52\x5a\x81\xfe\x44\xe2\x00\xd1\xef\x0d\xb7\xa5\xd5\xd9\x83\x20\xf0\x24\x0b\x6e\x1d\x54\x91\x65\xdb\x98\xe5\x51\x44\x79\x59\x9f\x20\xdd\x9a\xda\x10\xc0\xf6\x6c\x7e\x89\x3e\x6a\x94\xb4\xf7\x0e\xb2\x04\x39\xb4\xfb\x80\x41\x07\xb4\xe8\xcd\x0d\xd4\x41\x21\x07\xbb\x8a\xcd\x2d\x44\x61\xa1\x53\x57\xa7\x62\x3a\x05\x6b\xd6\x03\xe2\xac\x37\xbe\xb1\xca\xc0\x91\x15\x74\x2d\x7b\x29\xf5\xac\x5b\x92\x93\x2d\xe6\xaa\x6a\x1b\x99\x18\x4c\x7a\xf6\x06\x2d\x2b\xfb\xde\x89\x8b\x46\x1b\x25\x65\x3a\x70\x1f\x54\x11\x53\x3a\xf1\x02\x7b\xb0\x02\x6b\xc5\xea\xc4\x55\x41\xb1\x3d\x59\x4c\xfe\xd8\x52\x62\xf3\xc3\x13\xfc\x44\xa6\xac\x25\xec\x27\x5a\xd6\x9d\x27\xb9\xf3\x32\x5c\x00\x98\x54\xa9\x0e\x6e\xb5\xb8\x4a\x8d\x52\x36\xc7\x80\xe0\xc2\x9f\xc3\xa8\x99\x5d\x8c\x41\xe2\x98\xe0\x62\x30\x8b\x53\x29\x9f\x95\xde\xa0\x89\x79\x6e\x8a\x0e\xa1\x94\xbe\x2a\x3c\x67\x28\x9c\xa8\xf6\xdd\x08\xca\x13\x9c\x19\x2d\x63\xc1\xdb\x38\xb8\x6c\x93\x66\x1c\x86\xd8\x62\xd3\x5b\xad\xd6\x1d\xde\xe2\x7e\xe6\x9b\x1b\x0a\xdf\x8a\x9d\xba\x02\x7c\x8e\x55\x47\xbd\x36\xce\x77\xaf\xd7\x7c\xc6\x29\xe0\xa6\xe1\xe6\x52\xb5\x00\xed\x15\x1b\x7b\x06\xb5\x6c\xc5\x13\x05\xc6\x1e\x1d\xbb\x8a\xcd\xb5\xeb\x46\x6c\xa1\x34\xac\xd9\xaf\x3b\x3f\x8d\x20\xdd\x14\x66\xfb\x70\xde\x5a\xe4\x3a\x3e\x6d\xd7\x01\xcd\x83\x2c\xe7\x21\x8b\x64\x57\x15\xd8\x35\x98\x02\xd1\x66\xc1\x74\x4f\x75\x17\x46\xd4\x00\x76\xc6\xa1\x71\xbb\x84\x1b\x4f\x51\x31\x15\xb6\xe5\x34\x21\x1d\x8b\xa5\xdb\x7e\x59\x2c\xef\x2a\x67\xba\x84\x3c\x8e\x40\x67\xdc\x38\xd5\x84\x2c\xee\xa8\x87\x3b\xfc\x41\x03\x86\x48\xb4\xbd\x4e\x2b\x96\xe2\xc6\x9d\x87\x7c\x5c\x25\x2c\x5a\xe7\x26\x55\x85\x6d\xc3\x04\x9d\x74\x81\x9e\x33\x30\x17\x4d\x6d\xb0\x4d\xd5\x55\xc5\x9d\x45\x73\x92\x70\x92\x65\x5d\x5a\xb1\xeb\x65\xfe\x06\x9f\x69\x59\x2a\xea\x32\xb0\xcd\x5a\x91\xe2\x24\x54\x12\xb4\x8c\x64\x85\xd7\x71\xcb\xda\x54\xad\x47\x59\x60\x38\x57\x57\x0b\xbd\x6c\xf0\xa5\x8d\xab\x5b\xd6\xb3\x34\xaf\x74\x59\x74\x8b\x86\x9f\x83\x17\x60\x75\x3c\x12\x30\x67\x3e\xf5\xd1\x4d\x23\x13\x55\xa7\xbb\xd2\xe1\x2a\xbd\x03\x6f\x27\x6d\xf9\x00\x58\x91\xd8\xb6\x33\x82\x8d\xec\x4a\xf9\x51\x27\xac\x83\xdb\x63\x8b\x8c\xc9\x80\x0b\x43\x14\x07\xe8\xc3\x58\xe1\xcd\xd3\xdb\x6f\xc5\x77\x5f\x51\xe3\x32\xcb\x8a\x08\xc9\x7d\x8d\x29\x6f\x55\x53\xb8\x56\x6a\x91\x15\xfb\x71\x12\xbf\xe4\xb6\xa2\xb8\xab\xb8\xf1\xd1\x3b\x82\x32\x12\x7d\xd1\xf1\xe6\x7b\x85\x8e\x72\x1c\xa6\xf6\x7e\x16\x62\x77\x0a\x42\x9a\xca\xd0\x72\xac\xc8\xa9\x63\x5b\xa2\x84\x9a\x8b\x0a\x29\x2b\x26\xda\xc8\xaf\x0a\x76\xf2\x12\x8d\xd0\x2b\x62\x41\xb8\x65\x49\x5c\x9d\xc6\xc4\x60\x78\x88\x7b\xe3\x53\x21\x17\x86\x93\x6d\x05\x3b\x32\x6c\x53\xad\x35\x76\xd5\xf1\x96\x29\xb2\x91\x7c\x17\x13\x19\x4b\xc0\x51\x91\xa2\x4e\xdb\xaa\xd1\x99\x50\xdc\x11\xc4\x2b\x72\xcd\xe9\x34\x32\x99\x34\x2e\x72\xbf\xaa\xda\x86\x84\x15\x6c\x04\xad\x12\xab\x2c\xd0\xd4\xa4\xcc\xbe\xa9\x65\xf8\xce\xed\x39\x47\x84\x6d\x33\x87\x9a\xb1\x2c\x1b\xc4\x5e\x42\x79\x55\x4d\x2d\x17\x88\xf6\x00\x9c\xe3\x30\x15\xb2\x2d\x30\x43\xba\xac\xa6\x52\x6c\xc1\x8a\x77\xdc\x59\xdd\x95\xaa\x29\x50\x43\xd7\x81\x5d\xd8\xe4\x55\xde\xe0\xbe\x0e\x73\x26\x78\x78\x39\x41\x46\x13\xf5\x9a\x0e\x52\x09\x34\x13\x0b\x13\x21\x32\x26\xa1\x22\x40\x00\x86\xb8\x7d\x53\xd0\x8a\xab\x9e\x86\xee\xf0\x52\x33\x20\x9b\x05\xbb\xe9\xcd\x53\x68\xad\x0e\x5e\x1d\x02\x07\x66\xf3\x72\xc2\x58\xb5\xb5\x55\x21\x08\x22\xa8\x7b\xe5\xe5\xe6\xb0\xeb\x16\x19\xb4\x0b\xc0\xe7\x1c\x44\xb0\x75\xe0\x2c\x79\x96\xbe\x71\xbb\xcd\xbe\x4b\xb6\xaa\xb8\x21\xa4\x8d\x0b\x27\x94\x53\x35\x7d\xb2\x74\xec\x9e\x27\x2c\xae\xa2\xef\xd2\xb2\x51\x2f\x69\x2d\x4e\xb2\x63\x75\x22\x97\xde\xe4\xb9\x1e\x12\xe5\x6d\x3f\xa5\xf7\x5d\xcb\xb9\xee\xa1\xa7\x33\x14\xb0\xec\x85\x5d\x05\x83\x30\xae\xa6\x76\x63\xf0\xbe\x30\x8a\xc7\x5c\xa8\x81\xec\x58\x8a\x42\xcb\x1e\xf0\x9e\x62\x6f\x0a\x1e\x2e\x18\xb3\x38\xa4\x14\x17\x57\xb5\xb9\xe1\x3c\xd2\xe4\x9d\xdc\xe5\x61\xe2\x36\x4f\x6f\xaa\x40\x6d\xea\x05\x15\x9c\x51\x38\x07\xc5\x19\x9f\x83\x9a\x95\x08\x98\x72\xa9\xf1\x32\x7d\xa5\xf3\xdb\x42\x76\xcf\x9b\x45\x66\x01\xb9\xf0\x23\x02\xa6\x7b\x43\xc2\xef\x1d\xb7\x9a\xd8\x09\xac\x30\x94\x8c\x2a\xa8\x77\x11\x80\xab\x54\x06\x29\xcb\x65\xd7\xdb\x40\x73\x78\x8e\x8d\x1f\xeb\xb2\xf7\x03\x44\x74\x6e\x09\x30\x4e\xb4\x0c\x22\x67\x9f\x61\xc1\x9a\x41\xbc\xc4\x79\x19\x37\x48\x4f\x1e\x4f\x19\x73\xdf\xd5\x59\x1a\x98\x80\x2c\xcb\x96\x2c\x5c\x45\x58\x8f\x62\xf1\x92\x31\x9a\x56\xd2\x5a\xd1\x02\x92\xf3\x97\xb5\xe5\x90\x07\x2c\x24\x42\xd2\xc4\x50\xab\x45\xa7\x71\x6e\xf6\x5c\x84\x9a\x54\x33\xbe\x6f\x8e\x69\xbe\x1e\x30\x96\xd3\xa0\x05\xf1\xd3\x67\x70\x13\xf8\xdc\x2a\x27\x7f\x01\xe1\x0c\xbc\xf3\xb4\xc8\x70\x34\xc0\xeb\x70\x68\x0e\x9a\x59\xc0\xc2\x33\x19\x95\x68\xc0\x10\x5d\x12\x4d\x53\x85\xb5\x34\xd6\x68\xb9\xaa\x35\x18\x3f\x41\x50\xd4\xae\x64\xa3\x39\xe2\x36\xd9\xae\x50\x8f\xf4\xd0\xa9\x84\x4d\xa0\xb3\x7a\x64\x4f\x95\xd9\xea\x2a\x20\xf3\xa0\x2b\x11\x57\x55\x0c\xec\xa6\x82\x5d\xad\xe7\x4c\x83\xc4\xb0\x67\xd9\xa2\x25\x92\x34\x3f\x9a\x9f\x26\x70\x06\xa7\x6e\x3c\x0a\x4b\xd1\xde\x26\x51\x64\xbf\xaa\x78\x9d\x7b\x4a\x6a\x9e\xd2\x95\x0a\xd7\x13\xd5\xd1\x30\xed\x92\xb8\xb5\xa9\x7c\xb0\x71\x1e\x10\xb4\xe8\xe7\x09\x94\xed\xee\x90\x3b\xbf\xea\xa2\x31\xc5\x4e\xb6\xd0\xa9\x0d\xb1\x64\x62\xbc\xe1\xb3\x45\xe6\xe7\x54\xc6\xc7\x56\xf6\x35\x2d\x70\xa9\xda\xad\xbc\x84\xa0\xb4\xf1\x7e\x5e\x95\x77\x33\x62\xa3\x79\x0c\xc7\x10\x8a\x2a\xa6\x5d\x1d\x42\xdc\x89\x02\x8d\xad\xdb\x8a\x47\x1c\x72\x8a\x9a\xb3\x27\x7d\x31\x2c\x2b\x7f\x5c\xd6\x82\xa2\x18\x37\x36\xb1\x8d\x72\x10\x07\xd2\x44\x5c\x03\xcf\x89\x09\xd1\x10\x17\xdb\x91\xa4\x73\x1b\x2a\xa7\x97\x87\xca\x0b\x69\x56\xcc\xab\xf8\x52\xa1\xf6\x1c\x50\x74\x8b\x5b\x7c\x28\x73\x55\x6c\x2e\xad\x67\x68\x46\x21\x52\xa5\x95\xb0\x93\x1f\x82\x55\x47\x37\x6b\xfc\x21\x18\x10\x37\x89\xad\x9e\x52\x3f\xe5\x47\xfb\x07\x3f\x9e\xfc\xe1\x5b\xa0\xba\xff\x0b\xd9\xdf\x7a\xca\xbd\x3f\xf6\x7b\x1f\xf9\xec\x3f\xfa\xd1\x6f\x7a\xf7\xfd\xf7\xbb\xfe\xd5\x67\xbc\xe2\x4f\x89\xad\xe2\xfd\xef\xf1\xc2\xff\xfa\x03\xfc\x7b\x9e\x7a\xdb\x0b\xbf\xf2\x31\x2f\x53\x4f\xfc\xdd\x2f\xb8\xfd\x9f\x1c\x2f\xfb\xfe\x97\xbd\xfe\xb1\x0f\x7d\xd2\xeb\x3f\xed\xde\xfc\x06\xd3\x37\xbe\xe4\xe3\xfe\xf3\xdd\xda\x8f\xdf\xe5\x01\x3f\xf7\xe6\x7f\xfd\xde\x67\xbd\x63\xff\xe2\x07\xff\x93\x7f\x35\xbf\xec\xeb\x3e\xa9\xdf\xf1\xad\xdf\xff\xef\x7f\xe0\xab\xde\x79\x83\xe9\xf7\x7c\xc7\x4f\xff\xd6\xab\x6e\x7f\xff\x5b\x7e\xea\x41\x0f\x7d\xcd\x6f\xb4\xaf\xfd\xe8\x1d\xff\xd7\x4f\xfd\xaa\xa7\xc5\xf6\xc0\x9f\xff\x92\x97\x7f\xd7\xbd\xdf\x74\xcf\x1b\x4c\xff\xfc\x37\x7f\xc8\xbc\xe2\x7e\xbf\xf3\xee\x77\x9b\x87\xfe\xe0\x1b\xee\xfa\xfd\xdf\xfe\xfc\x9f\xfe\xf1\xcf\x39\x1f\xf8\xa0\xdf\xfc\xe5\xbb\x3f\xe0\x78\xeb\xbd\x9f\xfe\x75\x37\x98\xbe\xe7\xc9\x7f\xef\x03\xaf\x7b\xd6\x47\x83\x0f\xdc\xe7\xf3\x7f\xf5\x31\x3f\xfb\xf8\x37\xde\xfd\xcf\x3d\xf6\x95\xb7\x7d\xed\xdb\x8e\x3f\xf7\x16\x78\xfb\x3f\xfd\xec\xb7\x7e\xcc\x0d\xa6\xb7\x3d\xe5\x19\xdf\xbf\xff\xbd\x4f\x7c\xfb\xcb\xbe\xe4\x21\xef\x78\xf8\x8b\xff\xfa\xfd\x1e\xf1\xba\x5f\x58\xde\xfb\xee\xdf\xf9\x83\xaf\xf7\xdf\xe1\x7f\xe5\xcb\xc3\xe3\x6e\x30\xbd\xf7\x27\xbc\xed\x3b\x7e\xfb\xb1\x4f\xfb\x0b\x6f\xfa\xfc\xfc\x4d\xcf\xfa\xae\xe7\x1c\xcf\x79\xcc\xc7\x3d\xe9\x6f\x7c\xe0\x7d\xdf\xf1\x95\xdf\xf8\xb0\x2f\x78\xf0\xfe\x7d\xff\xf2\x06\xd3\xaf\xf8\xbe\xf6\xc6\x6f\xfa\x2f\x5f\xfa\x05\xfb\x57\xbd\xee\x9f\x3e\xe8\xe3\xff\xe2\x7f\xf8\xe6\x7f\xf4\x2f\x9e\xf4\xa1\x5f\x78\xe7\x2b\xfe\xe5\xed\x5f\xf0\xba\x17\xdc\xe5\x0b\xde\xfa\x27\x62\xab\x5b\xed\xea\x15\x2f\x40\xa3\xf6\x5c\x0e\x69\x55\x45\x72\xa3\x5b\x5e\x22\x3c\x77\x82\xc0\x58\xf0\xa6\x36\xab\x33\x65\x46\x08\x42\xd2\x9a\x72\x3d\xb7\x64\xae\x1a\x23\x58\xf6\xc3\x9e\x20\x12\xac\xd9\xb6\xb5\x0e\xfa\x5c\xe0\x5a\x62\xdd\x78\x26\x23\x97\x96\x36\x06\x26\x8d\xe7\xb1\x12\xe6\x8d\x58\xfc\x55\x49\x2d\xbe\x98\x75\x08\x44\x99\x70\x0e\xd0\x90\xb7\x5d\xc2\x93\xa7\xb8\x26\x2e\x87\x00\x43\x0f\x84\xa0\xc2\xcd\x37\x07\xd7\x14\xd2\x11\xc7\x55\x25\x4f\x52\xad\x8a\xe0\xb9\xed\x11\x80\x20\x77\x25\x29\xa7\x07\xb7\xbc\xd3\x70\x38\xb4\x8a\x23\x69\x67\x41\xd7\x16\xce\xf5\xc8\x46\x2e\xfc\xb2\xe1\x7d\x9a\x53\x3f\xa7\xee\xac\x9a\x1a\xb2\x77\x7d\x47\x4a\x3a\xef\xb4\xf0\x4c\x7b\x92\xa0\xea\x47\x56\xfc\x54\xeb\x79\xa6\x1a\x39\xbb\xaa\x97\x81\xd8\x89\x75\x93\x20\xc4\xb1\xdd\x38\x64\xa8\x4c\xd2\xb2\xd9\x77\x0d\x14\xf6\xb3\xb9\x21\xca\xb1\x18\x91\x08\x2a\x61\xee\xed\x32\xba\x8b\x51\xa1\x35\xb3\x10\x35\x4b\x8e\xc3\x00\xa5\xb4\x2b\x7e\xa3\xbb\xe2\xd2\xf5\x05\xb0\xd6\xe6\x39\x89\x5f\x2b\x16\x2b\x5a\xb7\x3d\x5f\x36\xc9\x6b\x5b\x68\x88\x3c\x66\xdc\x67\xb1\xb9\xf4\xf3\x28\x5e\x85\xd6\xdc\x16\xb0\x4d\x16\x2f\x81\xd4\xbc\x4f\xa4\xc2\x52\x62\xf6\x21\xff\x19\x62\xab\x5b\xe1\xf4\x05\xe0\xc3\x96\xea\xd0\x52\xf1\x96\x31\x8b\x0e\x06\x9f\x8a\x3b\xcd\x19\xd0\x91\x22\x99\x3d\x39\x4c\x27\xe8\x9a\x9e\x05\xd3\x04\x38\xd9\x2f\xab\x51\xd7\x89\xe1\x13\xd0\x4d\x4a\x0c\xe4\xb9\xed\xfb\xde\x0b\x17\x0d\xcb\x2a\x0f\x3c\x87\xde\x8c\xf3\x1c\x22\x86\xb1\x3c\x49\x75\x66\xe8\xab\x72\xfb\x12\x75\x04\xe0\xc9\x9a\x30\x3a\x30\x0d\x05\xa1\xad\x2e\x8d\x66\xb9\x2c\xb1\x2f\xba\x75\x82\x76\xea\xd2\x61\xe3\x56\x25\xcc\xa9\x5e\x25\x40\x4b\x0c\x17\x94\x85\x89\x71\x2e\x52\xc2\x12\xd6\x8a\xb8\xa6\x9c\x01\x5c\x32\x98\xf2\x8c\x41\x83\x94\xca\xd9\x96\x75\x31\xdc\xb5\xfd\x2a\x57\x6b\xa1\xab\xe1\xa3\x13\x7f\xd4\x39\x18\x88\x61\x0b\x85\xaa\x91\x1d\xb2\x94\x2b\x3b\xf4\x3e\xf6\x3a\x41\x1f\xdc\xa7\xc1\xf7\x03\x5d\x35\xdd\x8c\x8d\x55\x09\x68\x81\xe4\x68\x8b\x15\xba\x96\x73\x70\x08\x7a\xdf\x82\x39\xd3\xa0\xe5\xf4\x6a\x37\xd4\xca\x90\x59\x05\x7c\x45\xc7\x55\xcf\x25\x5f\x91\x53\xa9\xad\x28\x28\xb1\x9f\x19\x97\x06\x0e\xdb\x42\x0f\x54\xaa\x46\x7c\xd4\xce\x66\xbc\x74\xae\x86\xc0\xca\xe5\x3d\xed\x97\xf1\x46\x23\x53\x86\x5d\x36\x60\x8e\x13\x1e\xaa\x23\x5a\x36\x18\xd0\x02\x86\xdc\x71\x1d\x9e\x17\x1f\x24\x67\x96\x9d\x0a\xc9\xc2\xd8\xfc\x33\xe6\x59\xdc\xca\xf3\xbb\x80\x78\xb3\x10\x59\x2f\x57\x78\xf0\x85\x72\x62\x40\xef\xbd\x54\x0f\x0f\x44\xaa\xb2\x00\x70\x9d\x07\x70\x48\x93\xb0\xf4\xb9\xad\x76\x32\x7e\xd5\x45\x6b\xb8\x76\x29\x7b\xd8\xa0\x4e\x95\xa2\x2e\x1d\xde\x57\xc9\xb7\xec\xe1\x01\x12\xe1\xad\xb4\x1d\x93\x1d\x60\x6e\x28\x4d\x7b\xde\x2f\x9b\xac\x11\x94\x3b\x44\x6c\x0b\x16\x59\xed\x51\x6d\x5b\x29\x35\x26\x07\x56\x78\x2a\xe0\x11\x45\x51\x6b\x4d\x04\x96\x64\x01\xc0\xdb\x58\xf5\x65\xd5\x6b\x6a\xdd\xa3\x86\xb9\x1b\xe8\xdd\x4e\x0c\x0e\x86\x45\x46\xf1\xbe\x80\x59\xf6\x0d\x4c\xd8\xbd\x34\xc0\x54\x0a\x9a\xde\x37\x04\x2f\xe3\x95\xe7\x06\x92\x6d\x6e\x3f\x83\x3c\xcf\x15\xaf\xbb\x58\xa8\x42\x4b\xd4\xde\xc4\xbc\xee\x12\xb4\x06\x01\x8b\x56\xa7\x7d\x0f\x5a\xdb\x7a\x55\x42\x98\x0b\xdd\x99\xc8\x93\x7b\x6f\x35\xa9\x61\x9f\xc7\x6e\x89\x0f\x07\xb7\x46\x45\x06\xa1\xb5\x0e\xf7\x4e\x25\xe4\xa8\x77\x5c\x7c\xbc\x4a\x03\xc2\x72\x8a\x83\x2f\x05\xab\xa6\x45\x80\x20\x0c\xdc\x63\x1c\x79\x4a\xe8\xb5\x8e\x46\xc5\xd1\x8d\x01\x78\x95\x2a\xf5\x35\x51\x0f\xae\x1a\xe5\xcc\x0f\x87\x05\x6f\x1b\xf0\xa5\x40\xa8\x79\xd9\x28\x9d\xb4\x84\x3c\x6c\xab\xeb\x09\xd7\x5d\xaa\xb9\xae\x95\x03\x21\xfd\xaa\x46\x96\xfa\x66\xb1\xd5\xad\x62\xc9\x2b\x1a\x0a\x6b\xd8\xeb\xf0\x04\x6a\x99\xf6\x98\xb2\x3e\x36\xac\x29\xe2\x27\x82\xa3\x65\x62\xcb\x54\x15\xef\x00\x1f\x69\x5b\x1b\x21\xb1\x5c\x35\x25\x93\xfb\xa5\x40\x8c\x82\x3d\xd4\x39\x3a\xaf\x7d\xb0\x2a\xb2\x5d\x49\x5a\x65\x1e\x4a\xee\x32\xdb\xec\xb0\x39\x29\x6a\x76\xa6\x85\x53\x78\x55\xb0\x63\x59\xa0\x03\x4f\xcc\x5c\xa2\xc3\xf9\xcc\x67\xf4\x01\x69\xbb\x39\xd4\x47\x30\xcc\xaa\xc3\x72\x7e\x48\xb8\x15\x5b\xf7\x54\xbd\xb8\x2a\xb7\x5f\x0f\xbf\x6d\xc7\x68\xd8\x39\xad\xf5\xc1\x7a\x89\xd4\x4f\x9c\x94\xa3\x2b\x27\xb4\x44\x0a\x5d\x1a\xd4\xe2\x73\xcd\xdb\xd9\xd9\xb8\x2c\xe5\x48\x27\x38\xcf\x60\x75\x2f\x34\x9e\x0c\xef\x9a\x92\x2a\x51\x31\x23\xea\x71\x4a\x0c\x88\x20\xa2\x84\x85\xeb\x88\x8f\xc8\xf8\x39\xeb\x55\xd2\x7b\xb1\x05\x8a\xbd\xe9\x6c\x91\x23\xda\x49\x84\x54\xbc\xbb\x83\x0e\xb0\xa1\x6d\x68\x9f\x96\x70\x8c\xe9\xa8\xec\x84\x52\x61\xe5\x6e\xaf\x9a\xb3\xb6\x48\x26\x85\x64\x14\xb3\x73\xc4\x48\x55\x42\xbb\xe2\x53\xc2\x14\x06\x52\x7d\xaf\x94\xad\x88\xed\x4b\x0c\xe0\x80\x68\xc9\x4e\x8e\xab\x28\x8b\x71\xec\x21\xae\x10\xa7\x60\xd7\xbe\x7a\x6e\x9b\x58\x8f\x86\x55\xa1\x58\x63\xd2\x87\x8f\x32\x6b\xd2\x36\xab\x79\xa7\x73\x66\x60\x6f\x16\x5b\xdd\x8a\x9d\xba\xa2\xb9\x0c\x4f\x70\xad\xb1\x83\x44\xe7\x02\x30\x76\x9e\xec\x47\x21\x87\x2f\xa7\xf4\x7a\x76\xb5\xcd\x2c\x79\x90\x30\xaf\x29\x74\x22\x66\xba\xea\x50\x11\xc5\xd5\x18\x73\x1a\xbc\x2d\x30\xf5\x5d\x94\xd1\xb1\xb2\xe1\x14\xe3\x64\xfc\xc8\xc3\x9c\xdb\x6c\x63\x80\xee\x77\x25\xaa\x5c\xc1\x55\x9f\x32\xe2\x8a\xcf\xa5\xe2\x63\x59\x2c\xad\x24\xc8\x43\x19\x3e\x8e\xad\x71\x70\x72\x6b\x50\x96\x3b\xf1\x48\xbb\x85\x6c\xbc\x3a\x8d\xc0\x65\x7d\xd5\xd7\xe4\x91\x1c\x69\xc3\x3b\xd9\xb7\xc4\xf6\x56\x88\x65\xe0\x38\xb3\xc6\x7a\x89\xb4\x11\x47\xe2\x92\xab\xaa\x61\x8b\xfe\x08\xeb\xa6\xfb\x55\x8e\xfd\x44\xa1\x6d\xee\x64\x60\x5b\x8d\x61\xc5\xd2\x41\x77\xba\xb7\xee\xce\x0a\x4f\x6f\x15\x5d\x04\xd2\x2a\xd5\x05\x06\xe6\x1b\xa0\xf3\x2a\xa6\xc5\x01\x13\x3d\xc8\xb1\x92\x43\x41\x63\xab\x40\x72\x6f\x79\x35\xfd\x70\x54\xb9\xfd\x24\x10\x01\xe9\xc6\x87\x3b\xbf\x3a\x7b\x2a\x72\xd5\x44\x7b\x96\x33\x46\x62\x54\x41\xc0\xa8\x3d\x52\x56\xb2\x40\xdb\xd1\x09\x6f\x73\x42\x3f\xcf\xcd\x81\x35\x29\x6a\x16\x30\x54\x5d\x90\xd5\xe2\xaa\x3e\x20\x59\x90\x78\xf0\x36\x1d\x03\x68\x70\xc2\xcf\x5a\x7c\x48\xb4\xad\xc2\x17\xbe\x20\x04\x5d\x72\xc2\xe4\xe0\xe5\x5a\x84\x1d\x7b\xf8\x33\x86\xe9\xdc\x8a\xef\xbe\x42\xe9\x79\xa2\xad\xa9\x30\xe8\x71\x0a\x67\x43\x41\x98\x74\x06\xea\x9a\xab\x77\xc3\x9f\xca\xae\xd8\x45\x2a\x44\x9c\x19\x07\x93\x23\x93\x57\x75\xb6\xc2\x75\x51\xd9\xa7\x0d\x8c\xae\x17\xaf\xb7\x8d\x11\x16\xcc\xea\x80\x93\xcd\x95\x73\x87\xb0\xb1\xe3\x60\x36\x92\x49\xbb\x41\x71\x93\x57\xd5\x8f\x2a\x99\x3a\x47\x50\x6f\xcc\x50\xa5\x91\x4e\x7c\x75\xd4\x35\xee\xf1\x02\x41\x17\xe6\x60\x0e\xc4\x43\x2a\x67\x05\x49\x6a\xa8\x32\xaf\x5a\x49\x0a\x16\x30\xe3\xab\xa7\x91\xf4\xe9\x56\x15\x0d\xcc\x7b\xa8\x24\x4f\xc3\xdc\x41\xcd\x76\x9e\x61\x3a\x6d\x4f\xb0\x37\xdf\xe4\x51\xae\xaa\xa2\x50\x1a\xc6\x55\xf7\x26\x7a\x8a\xd8\x15\x00\xc9\xa2\x14\x52\x8b\x4c\x89\x7b\x60\x71\x38\xcb\xba\x18\xbf\x89\x7c\xe7\x19\x6a\x47\xb8\x6a\x94\x33\xe7\x25\x18\xcf\xfc\x96\xd9\xee\x98\x3a\xcb\xb0\x34\xa2\x3b\xcf\x2f\x2d\x76\xe7\x9b\x65\x7e\x21\x25\xc8\x0c\xcf\x2e\x76\xb3\xa0\x0c\x2f\x52\x19\x70\xb1\x53\xdc\x0e\x5d\x9c\x91\x75\x56\x47\x72\x33\x71\x73\x25\x25\xa8\x8b\x15\xd8\x5a\x8c\x29\x5b\x18\x6f\x11\x70\x5a\x3c\x76\x57\x4d\x53\x65\xfb\xaa\x8e\x33\x4d\x61\xb7\xb5\x58\x73\xe7\xcf\x96\xd7\x93\xaa\xac\xd7\x30\x00\x8e\x50\x01\x6c\xcc\xd9\xb2\x98\x7a\xba\x62\xcc\x6e\x6f\x02\x9f\x5b\x65\xd0\x2e\x00\x1f\xd8\xa9\x5c\xd0\x2c\x5b\x68\x5c\x55\x04\x81\x31\x21\xb4\x50\x8d\x9a\xfb\x34\x2b\x48\x63\xc7\xc7\x61\x80\x15\x86\x39\x85\x66\xba\x4c\x44\x13\x46\x9c\x26\x58\x76\x76\x23\x11\x31\x0b\x5b\x45\xa9\x9e\xd0\xc5\x1c\xb6\xd8\x33\xf2\xde\xdd\x20\x62\x5d\x07\xf2\x26\x39\x62\xc0\x55\x23\x7a\x87\x37\xab\x83\x76\x86\x0c\x90\xc9\x7c\xb1\x19\xe1\x5d\x66\x30\xf2\x52\x2a\x2e\x7c\x5d\x1d\x37\x80\xa1\x05\xcf\x98\x63\x29\xfd\xaa\xf6\x25\x1c\x28\xc6\x2b\x48\xc9\xfb\xb3\x90\x63\xa5\x25\x85\xc9\x99\x0c\x33\x26\x01\x8c\xb4\x07\xc2\x15\x0c\xe7\x4a\x66\xde\xa4\xb1\x56\x73\x55\x6b\x01\x2b\x29\xef\x03\x93\x94\x44\x4e\x87\x8a\xe0\x5c\x76\xe5\x50\x39\x64\x40\x4e\xa2\xb8\xe9\x63\xcf\xe5\xa4\x87\xac\x90\x98\x6c\xc5\x7e\x59\xe3\x07\xb1\x04\xda\x18\x22\xc6\x65\x21\x25\x49\x7b\xa2\x6c\x03\x70\x4d\xde\x13\xbd\x14\xa2\xb1\x14\x55\xe7\x22\x62\x84\x94\x31\x7f\x55\x4f\x4f\xbe\x14\xb4\xcc\x4a\xd4\xba\x41\xb6\x14\x46\xad\x2f\xb5\x47\xb1\x1d\x4a\xb9\x65\x1a\xda\xfa\xa2\x46\x6d\xaa\xe5\x26\xe5\x18\x2d\x9a\xcb\x66\x8a\x15\x54\x0d\x00\x38\xf3\x9a\xc7\x1e\xf7\x69\x92\x66\xe7\xbe\xcc\x12\xb6\xbe\xd8\xcd\xa9\x8a\xdc\x10\xa6\x2c\x3c\x2f\xb6\x9d\x66\xde\x2c\xb6\xba\x55\x4e\xfe\x8a\xd6\x02\xa8\x2f\x6c\xd5\x72\x86\x9d\x6a\xc1\x17\xb4\xc7\x3d\xe6\xea\x37\xc3\x47\xb0\x74\xee\x29\xb9\xa3\x0c\x19\x29\xde\xb8\xaa\x47\xc9\x57\xbd\xad\xb1\x91\x0e\x90\xeb\x68\x32\x56\x41\x72\x7a\x03\x84\x8f\xb0\xb3\x7e\xa2\xb0\xa9\xd1\xa3\x75\x24\xd6\x74\xe4\x01\x95\x40\x6b\xab\x57\x11\xce\xea\xdc\x60\x93\xb3\x6c\xd6\x4a\x02\xf6\xfd\xe0\x5d\xe5\x8a\x88\xa2\xe8\xc4\x80\x97\x01\x42\x88\x2e\x60\x09\x4f\x38\xe0\x3a\x20\xb8\x68\x66\x3a\xa3\xb8\x5a\x82\x6d\x1f\x65\x5d\x06\x5b\x07\x17\x67\xef\x35\x67\x66\x2a\x86\xc0\x71\x4b\xdc\x36\x56\x9d\x96\x53\x91\x54\x58\x10\x57\xb5\xac\x65\x62\xae\x6a\x2b\x71\xdf\xe2\x76\xb0\x93\x82\xf5\xce\x27\x74\xe3\x62\x48\xcd\x49\x9e\x4a\x45\xa5\xc2\xca\xf1\x61\x57\x45\x42\x49\xe2\xaa\x26\xcb\x3c\xc3\x95\x28\x0f\x80\x4d\x19\xdb\x12\x53\xd1\x11\x1c\xa0\xa3\x61\x81\x72\x26\x2d\x9d\x06\x7c\xc0\xce\x48\x37\x14\xba\x63\xdd\xf8\x55\x80\x1c\xb0\xe8\xa7\x58\x86\x43\x74\xf7\x51\x0d\x6e\xe6\xea\x3b\x46\x8e\x3b\xc4\x1d\xdf\x4a\xf0\xf3\xcc\xac\x60\x6e\x22\x5d\x8c\x29\xec\x22\xbe\x94\x79\x40\xc3\x39\x0a\x60\x4b\x19\xc2\x50\xd6\x22\x2f\x93\xea\x1c\x0e\xcb\x21\xe1\x8b\x18\x1e\x33\x64\x7d\x1d\x10\x56\xd5\x15\xcd\xe6\x26\xb1\xd5\xeb\xbf\xeb\xd7\xfe\xfb\x53\x7e\xe8\x69\xbf\xfc\x9e\x1f\x78\xd7\xe7\xf5\xdf\x7a\xce\x43\x5e\x6e\x5e\xfc\x6d\x2f\xbe\xfd\xdd\x5f\xff\x7b\x11\x7e\xce\xbd\xfe\x5d\xbb\xd7\x9f\x12\x5b\x3d\xe7\x7b\x7f\xfc\x2e\x8f\xfb\x9e\xfc\xdf\x9e\xfd\xc6\xed\xb7\x5f\xfe\x1f\x1f\x5b\x9e\xf9\x98\x1f\xfb\xfb\x9f\xf9\x82\xc7\x3d\xfa\x5e\xaf\xfb\xf6\xbf\xf4\xcf\x5f\x7f\xcf\xf7\xdf\x60\x7a\xdf\x27\xbc\x3d\xfe\xce\xf7\xdd\xfe\xf1\xef\x79\xd7\x67\xf1\x7b\xbf\xe6\xfe\x9f\xfa\xe8\x57\x3f\xeb\x75\x0f\x4e\xcf\xf8\x2f\xc7\x33\xbf\xfe\x7f\xa6\x7b\xfd\xcf\x3f\xba\xc1\xf4\x11\xff\xe3\xd1\xff\xec\x09\x6f\xc2\xff\xfd\x0b\x1f\xf1\x59\x7f\xe7\xed\x2f\xfd\x85\xe7\x7c\xef\x1f\x7e\x0a\xfa\x31\xf3\x3d\xdf\xf8\x7e\xfc\xfa\x47\x9d\xaf\xb9\xdf\x0b\x6e\x30\xd5\x7f\xf3\x63\x5e\xfb\xc9\xfe\xb3\xfb\x77\xff\x2e\xbb\xed\xdb\xbe\xf0\x81\x9f\xfa\xcc\x37\xfd\xea\xdd\xbe\xe1\x9f\xbd\xe2\xa9\xcf\x7f\xfe\x1f\xde\xf3\x79\x4f\x7f\xf5\xbc\xc1\xf4\x59\xdf\xf0\x89\xcf\xb9\xeb\xe7\x3e\xe0\xf8\xa4\x47\xde\xf6\x59\x77\xfb\xa9\x7b\x6f\x5f\xf4\xa4\xbd\x3c\xf2\x8e\x0f\x7d\xf0\x6e\x77\x79\xf2\x1f\x3c\xe8\x01\xdf\xf5\xf0\x1b\x4c\x3f\xee\x5f\xfd\xc5\x1f\x7b\xf1\xdf\xce\xe2\x7f\x3c\xe8\x19\xbf\xf6\xda\x4f\xfc\xfc\x5f\xfa\xde\x5f\x7d\x0e\xbf\xe7\xfb\xee\x31\xbf\xe1\x4b\xbf\xfb\xe5\x4f\xfc\xc6\x77\x3d\xed\x06\xd3\x7f\xfc\xdd\xf7\xb8\xe3\x60\xed\xad\x77\x79\xea\x1b\x7e\xf8\x91\x77\x7b\xc3\x73\x1f\x93\x7f\xe6\xa1\xfe\x1e\x77\x7f\xee\xbf\xad\xef\x7d\xc8\x63\x7e\xf3\xe7\xfa\x8d\xba\xac\xaf\xbb\xed\xf1\xdf\xfe\xa1\x07\xfe\xe4\x13\x5f\xff\xbe\x97\xfc\xeb\x27\xbd\xe6\xa1\x0f\x7a\xf2\x6b\x1f\xf8\x09\xbf\x4f\x3e\xf3\x3f\xfc\xfc\x2b\xeb\x3b\x3f\xf8\xc5\xff\xf9\x4f\xc4\x56\xb7\xda\xd5\x2b\x0a\x8d\x4e\x06\x8e\x98\xd4\x81\x0d\x3e\x16\xe1\xbd\x65\xe9\xf0\xb9\x46\xd7\xe5\x86\x69\x68\x02\xe0\x48\x4d\x07\xbc\xee\xd5\x1e\x24\x99\xab\xf4\xca\xa3\x1f\xcb\x69\x8b\x5f\xa9\xa5\x99\x41\xa7\xcb\xb6\x36\x24\x85\xd4\xa4\x05\x70\x0e\x81\x6c\xc1\xb4\xc1\xa6\x56\x48\xf1\xbe\xc7\xfd\x2a\xf7\x53\x9a\x4a\x67\x9f\x69\x99\x79\xae\x75\x9b\x07\xb7\xf4\x48\x27\xab\xbd\x41\x03\xe5\x21\x1c\x9a\xab\xc4\xa7\x3e\x5a\xb5\xc2\x01\x0a\xae\xba\xd9\x43\x82\xee\x6b\x4d\x73\x81\x4b\x89\xdd\x6c\x29\xb8\xe0\xcd\x18\x69\xd9\x2c\xd8\xdb\x6e\x10\xf4\x26\x93\x49\x1a\x15\x9e\xe9\x78\xd9\xc4\x66\xdc\xa3\x58\xdc\x76\xee\xa6\x3a\x30\x4a\x40\x48\x45\x1c\x4f\x22\x46\x8c\x0d\xe4\xa0\xd8\x0c\xc4\xa1\xe8\x27\x58\x8a\x99\x69\x94\xab\x12\x7d\xf1\x34\xb2\x4d\x23\x57\xe8\x8f\xe3\xe4\x03\x4d\x3c\xc5\x38\xc1\xa2\x2b\x63\xfc\x6c\xb9\xa3\x85\x15\xaf\xee\x7c\x35\x39\x40\x66\x8e\xab\x44\xae\x2d\xea\xac\x99\x9e\xbb\xee\x3e\x97\x55\xe0\xe5\x4c\x6a\x4a\x0d\x17\xd3\x1b\x4d\xb1\x67\x03\x96\x3e\xf8\xb1\x82\x9e\xd5\xb1\x56\x70\x95\x3c\xb0\x8b\x94\x0c\x3b\x38\x3c\x60\x33\xcb\xb6\x1d\xd6\x36\x7e\xb2\x45\x2f\x1b\xf0\xb3\x0c\x6f\xb8\x8c\x77\x7a\xec\x9a\x15\xba\xac\xf9\x4c\xe1\x26\xf7\xf3\x56\x38\x7d\x81\xfb\x89\xcc\x60\x4e\x66\xaa\x63\x1b\x75\x35\x51\x35\x74\xc0\x4a\x7d\x3e\xed\xe1\x64\xce\x5c\xc7\xc9\xfb\x68\x42\x06\xe5\x99\x25\x8a\x5d\xd5\x58\xb5\x1d\x14\x6a\x38\xd2\x12\x1b\x9f\x9a\x87\x7e\x26\xa3\xb7\x83\x2c\x01\x3a\x31\x4b\xc5\x96\x2f\x67\xd2\x1b\xce\xe2\xb0\x8a\xa0\x36\xae\x92\xf3\x50\x56\x63\x24\xc5\x8f\x6d\x37\x80\x54\x7b\x1e\x1d\x27\xcc\xe5\x11\x1d\x33\xe7\x62\xcf\xb8\x34\x4f\xf5\x1c\x0a\x6c\x18\xcc\x10\xf5\x45\xee\x27\x3f\x9d\x8c\x4e\xcb\xed\x4c\x4a\x18\x6b\x37\xb6\x78\x16\x72\xa4\xc1\x71\x55\x65\x85\x7c\x47\x16\x9a\x54\xc4\x68\xae\x00\xc8\xa1\xbc\x6c\x4f\xf2\x72\x34\x38\xd6\xfd\xb0\x2e\xfb\x91\x6b\x88\x23\xea\x95\xe5\xc9\xe6\xe6\x91\x65\xbc\x9e\xe2\x10\x9d\x45\x11\x4f\x51\xd1\x48\x97\x09\xd0\x9a\x49\x25\x4c\x00\x71\x51\xcb\xbe\xf0\x4c\x08\x36\x95\x9e\x8a\xdb\x10\xe5\xc8\xf4\x58\x7c\x99\x5c\x34\x81\xd4\xb0\xd8\xcb\xcb\x14\xf6\x66\xa6\xb3\xb6\xe5\x00\xda\xf6\xfd\x50\xeb\x56\xe9\x29\x25\x51\x2b\xc5\xe7\xdc\xe7\xc8\x6d\x73\x3b\x6b\xdb\x9a\x91\x45\x4c\x35\x7f\xd9\x08\xfd\x6a\xc5\xa6\x82\xe4\xcd\x6a\xd7\x72\xc4\x78\xef\xaa\x9c\xc9\x99\xd6\xb8\x8a\x79\xa5\xae\xd2\xbe\x70\xcd\x48\x93\xb9\xca\xc6\x07\xb9\x09\x7c\x6e\xe5\xf9\x5d\x00\x3e\x8b\x16\xe7\xa9\x25\xdc\xab\x39\x58\xeb\x35\x0d\x2b\xd8\x46\x57\x5d\x2a\x03\x5e\xee\xb1\xb6\xa9\x3a\x0e\x79\x63\x5e\x50\x2f\x8f\xab\x58\x7f\xde\x1a\xed\x4e\x33\x6e\x07\xa8\x7c\x13\x95\x76\x95\xd2\x98\x7e\xe1\xa9\xe7\x65\x0f\x50\x26\x37\x8a\xb4\x1c\x6a\xb9\xad\xdb\x86\xf2\x55\x84\xca\xd8\xb5\x68\xfb\x2e\x0f\xa0\xa3\xda\xb2\xee\xbd\x40\xe3\xb3\xf5\x83\x05\x6d\xca\x82\x3d\xb4\xcb\x0c\x73\x01\xe0\x14\x62\x3b\xe5\x65\x1d\x04\x80\xdd\x19\x5d\xfa\x41\x89\x54\xd4\xf4\x26\x07\x4d\x0c\x1a\x54\x16\x4d\x77\x24\x22\x37\x8d\x28\x95\x93\x56\x42\x45\x00\x36\xb8\x5f\x76\xbc\xf7\xb0\xaa\x12\x32\x71\x78\x49\x36\x39\x92\x18\x20\x30\xb8\x22\x3f\x3c\x63\x67\xef\x9a\x88\x81\x05\xf7\x76\x1a\xe3\x69\x0d\x57\x8d\x9b\x64\x53\x0f\xb9\x4b\x64\x0f\xe3\x06\x8d\xd2\xc6\x11\x0e\xcd\x4e\xb3\xae\x27\xc7\x73\x4f\xa1\x05\xa8\xee\xbc\x62\x4e\xc7\x5d\xc7\x33\xb1\xab\xda\x2f\x2e\x6c\x12\x14\xf7\xc5\xee\xd0\x15\x45\xfc\x01\x44\x39\x56\xd7\xe2\x3e\xad\x75\x74\x4f\x3a\xaa\x73\xda\x01\x11\x82\x59\x1c\xd0\xe8\xab\x58\xff\x93\x6d\x9e\x6d\x15\x9f\x84\x68\x56\xc7\x32\x21\x19\x6b\x99\xcb\xe4\x46\xba\xad\x91\xe1\xf5\x5e\xb3\x83\x30\x38\x0c\xf1\xf0\xc6\x1c\x37\x81\xcf\xad\x62\xc9\x0b\xc2\x2e\x15\xc4\x04\x54\x1f\x7d\x0d\x53\x9e\x75\x9d\x7e\x3d\xd3\x4e\xc6\x3c\x4e\x09\x0f\x78\xfa\xe2\x01\xce\x21\x54\x63\x0e\x92\x99\x2e\x57\xd1\x18\x6c\xef\x9d\xb9\xc5\x9c\x33\x8f\xd1\xc3\xa1\xe4\x06\x26\xce\x1a\x09\x50\x8e\xc6\xa7\x5f\x27\x93\xbd\x2e\x89\xdb\xc0\x3c\x1b\xb1\xa4\xab\xb4\x84\x5b\x10\x05\x73\xbf\x6d\xa8\x31\x9d\xb8\x39\x71\xce\x9c\xa1\x98\xb1\x9c\x34\x02\xc7\xb5\xae\x47\x5b\x2b\xa0\xa9\xd7\x83\x36\x90\x2e\xeb\xa4\xb9\x63\x56\xed\xd1\x24\x30\x94\x77\x5c\xce\xb5\xe4\x61\xd6\x5c\x2d\x9f\x04\x37\xbb\x0a\xef\x4f\x12\xcd\x5c\x4e\x0e\x6b\xe6\xe1\xb2\xa6\x87\x01\x77\xce\xcb\xbe\x41\xad\xf7\xe0\xb7\x11\x62\xde\x17\x13\x88\xf6\x7e\xc8\x4e\x9c\x4f\xe5\xc8\x06\xec\x4c\xed\x3c\x6a\x40\xb6\x72\x55\x78\xbe\x56\x85\xf6\x79\x08\x52\x17\x48\xdd\x38\x01\x0c\x88\x2b\x44\x70\xdf\xa0\xc5\x3d\xb7\x69\x3d\x6d\x63\xc2\xd9\x55\x2b\x16\xd1\xcb\x4a\xac\xb5\x42\x2e\x15\x53\x26\x0c\x1d\x86\x00\x4c\x6d\x67\x3e\x75\x45\x0c\x2b\xb3\xe3\xb9\xc6\x63\x8d\xf2\xd8\x89\xcd\x1e\x2b\x5f\xd7\xcb\xb2\x43\x7d\x4d\x44\xfb\x33\x6a\x72\x44\xe0\xed\xb6\x9e\xc7\xde\x51\xad\x53\x7b\x06\xc5\x36\x31\xeb\xb1\xfa\x1c\x2d\x74\x51\x15\xad\x88\xd5\x37\x81\xcf\xad\xd8\xa9\x0b\x3c\x1f\x25\xab\xb6\xbd\x24\x8b\x8b\xe3\x7d\x27\x6e\x22\x98\x4f\x61\x99\xf3\x05\xce\x45\xce\x33\xba\x90\x54\x64\x02\x67\x72\xa7\xcf\x21\xae\x4a\x39\x46\x2c\xa1\x76\x5b\x9f\x8a\x8c\x92\x68\x5e\xb0\xac\xc7\x3c\xb3\x69\xd8\xf1\xd0\x4b\x96\x22\x66\x8b\x2d\x2b\xa9\xc2\x46\x02\xb3\x17\xcd\x91\x67\x64\xd9\xb5\x54\x03\xe3\xac\xd7\x11\xd3\x62\x4e\xef\x4c\xc9\x65\x82\x7d\x67\x4a\xc8\x66\x5b\xb0\x10\x81\xb0\xb8\xb6\x7b\xe1\xe7\x65\x80\xdc\x60\xdd\x01\x36\x8b\xd8\xf7\x96\x69\x01\x71\x51\x19\x9a\x15\x20\xa7\x29\xf2\xab\x2a\x1e\x76\x88\x9d\xed\x55\x2e\xad\xa0\xaa\xd2\x55\xad\x06\x4d\x29\x51\x41\x40\x9c\xda\x65\x38\xd9\xd4\x2c\xd7\xb4\xba\x81\xa8\xde\xcd\x80\xe7\xd0\xda\x67\x16\x8e\x7d\x07\x4c\x1d\x1a\x98\x74\x55\x78\x7e\x14\x33\xa6\x1c\x8e\x04\xe7\xf4\xb1\x07\x3d\x43\xf1\xac\x86\x06\x84\xeb\x01\x9d\xbe\xc3\x34\x59\x04\x14\x4d\xba\x7a\x41\xd1\xbc\xaa\x17\xdb\x6e\x4e\x03\x18\xda\xf8\xe6\x45\x43\xd4\x0f\x08\xf1\x1e\x4f\x3c\xcd\x5e\x10\x83\xd0\xcf\x19\xaa\x4e\x30\x9d\x82\x86\x0a\x8e\xb3\x5e\x35\x67\x6d\xd6\x13\x77\x42\xc5\x4e\x16\xc8\x5b\xb5\x33\x22\x6a\x12\x27\xb2\x69\x40\xfa\xba\x8c\xca\xcb\x19\x40\x45\x12\x26\x5e\x5a\x2e\xe6\xe6\x01\xca\xb7\xe2\xbb\xaf\x18\xa6\x13\x37\x8c\xf1\xb1\x1d\xc9\xc8\x70\xaa\xa2\xb0\xa8\xc5\x46\x83\x67\x07\xc0\x05\x08\x03\x44\x47\x4f\x59\x07\x4e\xb5\x59\xa5\x34\x57\x6d\x60\x32\x65\x53\xb3\xf8\x39\xcf\xe6\x94\x13\xc5\x00\x33\x58\x9c\xa9\x2f\x10\x08\xd4\x4c\xe1\x5b\x2d\x2d\x8d\x44\x21\x8b\xaa\xa9\xfd\xaa\xec\xf1\x3e\x33\x30\x2a\x54\x26\xdc\x31\x56\xa3\x8f\x99\x31\x8a\xe7\xcc\x9a\xa0\x88\x97\xc5\xad\x3a\x8b\xc0\x12\x8e\x51\xe6\x78\xba\xce\x2f\xca\xed\xb3\x13\x29\x4a\xba\x76\x8b\x0b\xae\xf4\x8c\xb5\xaf\x28\x87\x84\x57\x32\xe9\xa2\xb6\xc1\x9a\x43\xd3\x33\xd9\x97\x50\x74\x18\x41\x5d\xd5\x49\x93\x71\x37\x63\x9c\xdc\x0b\x46\x34\x72\xf3\x80\x5e\xb9\x20\xec\xea\x13\x46\x93\x95\x6a\x54\x17\x09\xc0\xdd\xf0\x35\x1d\x80\xb3\x43\x5f\xd5\x7d\x03\x1d\xc6\xa2\x80\xcb\x31\x27\xc2\x3c\xa3\x84\x55\xa2\x59\x0e\x27\x87\x3d\x14\x3f\x4d\x94\x07\x94\x07\xe0\xdb\x8a\x28\xca\x8b\xbe\xaa\x09\x11\x5b\x68\x0c\x8d\x6c\xad\xc4\x31\xce\x00\x34\x3e\xc8\xe0\x0d\x46\x2f\x57\x58\x9d\xb1\x67\xc0\x94\xe2\xce\xc6\xae\x52\xac\x0e\xe9\xcb\xb4\xc9\x15\x27\x3b\xec\x11\xdb\x1e\xad\x9a\x6c\x92\x55\xe8\xed\x90\xbb\xb2\xc8\xdb\x21\x1a\x70\x73\xb1\xa7\x8e\xd4\xcd\x3b\x71\x3b\xe5\xb1\xdf\x04\x3e\xb7\xca\xa0\x5d\x00\x3e\x99\xa1\x61\x73\xa9\x63\xe9\xfa\x3c\x06\x10\x22\xc1\x15\x34\x67\xa2\xc1\x61\x5d\x1c\xc2\x02\x32\xcc\xb4\x4b\xfe\xa8\x16\x54\x0f\xae\xe2\x7c\xfa\x19\x98\xa1\x43\x69\xa0\x1a\x8f\x86\xe7\x2a\x96\x33\xfb\x6c\xc3\xa0\x61\x57\x65\x6f\x6b\x3e\xd9\x30\x9a\xa2\x1e\x09\xdf\xcb\xb8\x0a\x7c\x92\xab\x59\x90\x18\x91\x45\x47\xd9\xe2\xb1\xc4\x40\x12\x11\x1b\x11\xd2\xce\x62\x1c\x21\x1b\x36\xb5\x76\x1a\xad\x0f\xae\x5b\x7f\xd5\x44\x7b\x2e\x38\x61\x4b\x8f\x63\xec\xe0\xe4\x21\x07\x26\xfd\x62\x52\x2b\x30\xb4\xaa\x14\x8f\xbb\x71\x62\x86\x31\x4f\x0a\xc3\x11\xc3\x0a\x2e\x23\xe1\x41\x29\x63\x59\x50\x17\x65\xf3\x6d\x8c\x35\xc7\xce\x3d\x92\x86\xd9\xa2\x35\x5f\x06\xeb\x72\x28\xbf\x82\x09\x09\xf4\xab\xc6\xec\xb2\x39\xf2\xfb\xd1\x55\x4e\xc0\x9f\x52\x9b\x36\x57\xb9\x37\x7c\x1a\xb6\xa5\x92\xc4\x89\x02\x5d\x05\xa8\x46\xf3\xda\x4e\xd6\x4e\x2e\x4a\xaa\xe9\x2a\x1d\x6e\x6f\xd1\xcd\xdd\x54\x22\x50\x05\x4a\xc5\xbe\xee\x52\x29\x43\xc9\xbe\xea\x0a\xa6\xbb\x33\x12\x85\xb1\xb1\x29\x8e\xc6\x66\x71\xf2\xb2\xbb\x53\x6a\x5b\x99\xe3\x3d\xf3\x4e\xe2\x16\x17\xbe\x2d\x5a\xa2\xd0\xc1\x34\x63\x16\x18\x53\x25\xbb\xdd\x44\xd6\x3d\x3b\xa7\x28\x15\x37\x34\xc7\xfc\x13\xa5\xe7\x2d\x72\xf2\x17\x84\x5d\x9d\x34\x68\x36\x36\xd0\xba\x7b\x21\xdc\x12\x2b\x00\xc9\x8e\xe8\x36\xd4\x36\xea\xaa\x83\x27\x49\xbd\x82\x73\x75\x5a\x2a\x45\x42\xbd\x4a\xb4\xbb\x9e\x60\x59\x39\x2e\x43\x35\x3f\x0e\xab\x48\x98\x85\x45\x00\xf5\x1a\x45\x64\x18\xa4\x08\x94\x3f\x9a\x3b\x97\xc3\xc0\x82\x86\x63\x57\x7d\xca\xe9\x36\xd7\x27\xeb\xa6\x1f\x7b\x01\x8a\xe6\xfd\xe8\x7e\x59\xfa\x9e\xeb\xb6\x34\x8d\x0d\x77\xa4\x6f\x71\xfa\xa6\x50\x33\x42\xf3\xcb\x9a\xd9\x85\xbd\x47\x0d\xf3\x66\x79\x47\x56\xa4\xa2\xf8\x41\x18\x92\xdb\x8a\x15\xa0\xaa\x3a\x5f\x8f\x7d\xd4\xc1\xc8\x96\x4e\x24\x08\xb6\xe2\xaa\x22\x00\x85\x62\x72\xab\x3c\xb3\xd8\x01\x63\xda\xb0\x96\x6d\x5f\x8e\xa1\x32\xd6\x46\xb8\x58\x7b\x1f\x8c\xaa\xba\x27\x4a\x1c\x2a\x83\x81\xab\x64\x5f\x5a\x33\x09\xa5\xf0\x44\x27\x6b\xeb\x0a\x5a\x58\xfb\x3a\x0b\xf6\x64\x53\xb6\x82\x50\xb8\x08\xa6\x23\xe4\xf0\xb9\xc7\xb9\x0b\x7f\xd5\x88\x2f\xa6\x52\x72\xe9\x5c\xab\x95\x60\x7a\xd3\x44\x1f\x5e\x45\x02\x21\xce\x47\x37\x89\x9f\x44\x4b\x90\x44\x9d\x74\x1b\x62\x4e\x1e\x5a\xb9\xa8\xd7\x0b\x3f\x6a\x43\x0c\x66\x0b\xea\xc9\x8a\x0d\x53\xb0\x88\xe3\xd1\x32\xac\x84\xa1\x93\x06\xcf\x78\x32\x0a\xc4\xc4\x6c\xc3\x75\x75\x05\xdc\x2c\xb6\xe2\xbf\xf8\xa2\x87\xe0\xf7\xfd\xf7\x6f\x7b\xc5\x27\x7c\xf7\xc3\xbf\xfd\xa5\xaf\xa5\xff\xf3\xc9\x77\xfb\x9a\xf7\x7e\x46\xd0\x7f\xd7\xa1\x87\xfd\xe6\x27\xfe\xa7\xfb\xfe\x69\xb1\xd5\xc3\x3e\xe9\xff\x62\x6f\xfe\x8a\x27\x7c\xf5\x6d\xea\x87\x7e\xf2\xf1\x3f\xfe\xa3\xe7\xf3\xef\xf3\xd6\x57\xff\xde\xfb\x7f\xed\x47\xee\xfe\x84\xf7\x7c\xf0\x0d\xef\xf8\xff\xdf\x60\xfa\xff\x7c\xc5\x9b\x1f\xc7\xee\xfd\xfd\x7f\xc5\xbe\xfc\xfb\xbe\xe4\x6d\x9f\xf6\x77\x1f\x70\xc7\xef\x7f\xcd\xdf\x7f\xd4\x13\xc5\x8b\xde\xb5\x75\xf1\x7f\xbf\xfe\xb6\xf7\xdd\x60\xfa\x77\x9e\xf7\x6f\xee\x7e\x8f\x3f\xf8\x6b\x8f\x7a\xdf\x97\xbe\xe3\xe3\xde\xf2\x8d\xf7\x49\x5f\xfe\x88\xc7\xdd\xf1\x65\xcf\xff\x35\xf9\x84\xdf\xfb\xa6\x7f\xf0\xb5\xe9\x53\xbf\xf2\x06\xd3\x9f\xfc\xb2\xef\xf9\xed\xdf\x7d\xf0\x7d\x3f\xe7\xd5\x4f\xfc\xe1\x97\x7d\xce\x23\xcf\xa7\xdf\xff\xef\x89\x5f\x7a\xc2\x4b\xbf\xf5\x6b\x1f\xf5\x5b\x3f\xf6\x3d\x7f\xfd\x1b\xee\xf3\x1f\x6e\x30\xfd\xd0\xef\xdd\xfe\x94\x57\x3e\xe4\xd7\x7f\xf6\x27\x5e\xfd\xa1\xb7\xdf\xf5\x6f\xdf\xff\x25\x77\xbd\xef\x23\xbf\xf5\xe5\x4f\xfc\xd2\x4f\xf9\xe6\x87\xff\xfb\x2f\xfa\xc0\xe7\x3d\xe8\x1b\x6e\x30\x7d\xc8\x9b\xff\xf0\xf5\xf7\x7a\xc2\xb7\x7e\xf1\xff\x09\xfe\xf2\x77\x7f\xf6\x4f\xbe\xe2\xcd\xff\xf0\xae\x3f\xf4\xb1\x1f\xfa\x89\x87\x2d\x0f\xbc\xfd\x09\xdf\xf9\x17\xbe\xfd\x63\x6f\x5c\xc0\x17\x3f\xee\x61\xe4\x0f\xfe\xd6\xeb\x7e\xe5\xeb\x3e\xe3\xeb\xf3\xff\xf1\x23\xee\x37\x7e\xe6\xaf\xbc\xe9\x8b\x9e\x7b\x8f\xef\x1d\x4f\xba\xcf\x8f\x3c\xfa\x3d\xcf\x78\xc6\xe3\x6f\x30\x7d\xdb\xdf\xf9\x1c\xf5\x80\xef\xac\x5f\xf5\xfc\xf1\xce\xbb\xfc\xea\xe7\x3e\xe7\xa9\xbf\xf0\x0f\x3f\xfb\xc5\xcf\xf8\x76\xb2\xbc\xfc\xd1\xaf\xfd\xe1\x6f\x79\x08\xb9\xfd\x3b\xff\xf8\x23\xdc\x6a\x57\xff\xd4\x47\x80\x2f\x7a\xcd\x1f\xbc\xe4\x77\x5f\xf7\x49\x4f\x7b\xd0\x4f\xfc\xdb\x4f\xfe\xad\x7f\x41\xdf\xfe\x83\xe1\xeb\xee\xfb\x30\xfb\x40\xf2\xbe\x77\xfd\xd6\xf1\x13\x9f\xb8\xdd\x60\xfa\xa8\xbb\x3d\xf3\x19\x5f\xfd\xf6\x07\xff\xd0\x93\xbe\xea\x29\xbf\xde\x9f\xfb\xb4\x27\xbc\xe9\x85\x6f\xfd\x34\xa8\xff\xe3\x73\xef\xf7\xe2\xb7\xde\xe7\x8d\x1f\xf3\xe3\x3f\x7f\x83\xe9\x03\xef\xfe\xe4\xa7\x3c\x9d\xcf\x8f\xbf\xef\x2b\xbf\x72\xfd\x8d\x0f\xdc\xfe\x29\x1f\xfa\xab\xcf\xfb\x9b\xaf\xbc\xfb\xd3\x7e\xfa\x03\xcf\xfa\xe6\x8f\xfa\x8a\x17\x3c\xf1\xa9\x37\x98\xde\xeb\xcb\x7f\xe0\x33\xbe\xf5\x93\xff\xdc\x2b\xdd\xcf\x7e\xd1\x57\xbc\xe3\x4b\x1c\xbd\xdb\x7d\x3e\x37\x7d\xf5\x37\xbd\xfb\xf8\x74\xfb\x02\xfa\xdb\x9f\xf9\xbe\x0f\xdd\x60\xfa\xde\xbb\x7c\xe5\xfb\xee\xf7\xda\x87\x7c\xe3\x0f\x7e\xf4\xcf\xd7\x4f\x7a\xf1\x17\x3c\xfe\x2e\x0f\xb3\x6f\x7f\xdf\x67\x7e\xef\x57\xa3\xc7\xfe\xf3\x97\xff\x51\xf9\xc2\x1b\x3b\x91\xfd\xf4\x4f\xfc\xa3\x67\x7d\xfc\x1d\xfa\xe1\xdf\xf6\x8a\x17\x3e\xe5\x07\x1e\xf1\xf0\x0f\xbd\xec\xeb\x9f\xfb\xa6\xdb\x7e\xee\xcd\xff\x05\xd7\xcf\xf8\xf7\x8f\xff\xa9\x67\xde\xf5\x06\xd3\x07\x3f\xf4\x7e\x77\x7d\x60\xa1\xef\x0d\x2f\xfa\xd4\x7f\xf4\xee\x57\xe6\x7f\xfd\x35\xe8\xf3\x7e\xe5\x67\x5e\xc3\xf5\x8b\x1f\xf2\xdf\x9e\xf4\xc6\xcf\xff\xce\x1b\xff\xd6\x43\x5f\xfa\x9d\xcf\xb9\xe3\x6b\xde\x73\xc7\xbf\x7d\x0c\xfd\xee\x57\x7d\xdf\xb7\xbc\xe3\xd7\x3f\x19\xff\xff\x3e\xf1\x36\xf3\x3b\x8f\x7a\xda\xbf\xf9\xc7\x9f\xfd\x4f\x9e\xf1\xba\x3f\x51\xbc\xdd\x6a\x57\xff\xf7\x9e\xe1\xe5\xd1\x1f\xf5\x8e\x9b\xfd\x5d\xb4\x0c\x71\xa6\x33\xc3\xe3\xb4\x3d\xf3\xa3\xaf\x39\x3b\x8a\x2a\x27\xdb\x72\x56\x9a\x27\xe4\x4d\x4b\x4f\x2a\x56\xd5\xc8\x0c\xcd\x87\x8b\x19\x5f\x7a\xcf\xff\x1d\x28\xf9\xb3\x56\xc2\xfd\xc0\x92\x56\xd2\xca\xf4\xc9\x26\x2c\x0e\x2c\xf1\x52\x28\x3b\x83\x42\x9b\x34\x29\xac\x88\x64\x45\xec\x56\x21\x67\xa8\x9c\x0c\x2e\xd7\xac\x84\xcd\x7e\x70\x52\x35\x0f\x7e\x45\xbb\x86\xf6\x24\x84\x7a\x0e\xd8\xe1\xb7\x45\xe0\xdd\x8a\xed\x9c\x29\xf2\x93\xb8\x53\x20\xaa\x62\x34\xfc\xa2\x95\xd8\x76\x02\xb5\xaf\x3b\x18\x68\x0b\xa1\x33\x44\xf6\x93\x69\x2b\x32\x23\x0a\xee\x98\x93\x08\x6a\x11\x75\x19\x46\x42\x7e\x26\x5e\x60\xba\x68\x25\x88\x48\xd0\xec\x5e\x46\xed\x80\x9b\x85\xed\xca\xf1\xc8\xc6\x2c\xc8\x83\x3c\x93\x40\xd5\xb4\x98\xa3\x24\x6b\xc3\xa4\x4d\x0f\xc0\x45\xe7\x84\xad\x59\x6e\xdc\x9b\x0a\x98\x72\xe7\xe9\x1c\x92\x72\x11\x79\x22\x6b\x50\xee\x49\xad\xcb\x60\x31\x8e\x45\x27\x07\xb7\x00\xc1\x72\x7e\x84\x11\xbe\x60\x25\xb0\x2f\x70\x77\x45\xa9\xc3\x3b\x43\xfb\xae\xcd\xee\x68\xe9\x86\xe1\x6e\xdc\x34\x7d\x38\xe4\xfc\xa2\xa5\xd2\xab\xef\x76\xae\x46\x5f\xb4\x12\xbe\xdb\xe8\x95\x81\xf0\x90\xb1\x32\xb7\x40\xb6\x8f\x26\x0e\x36\x88\x81\x39\xa3\x93\xa6\x25\x59\x38\xcf\x3b\xe3\xa6\x28\x5b\x05\xa2\xfe\xaf\x13\xfb\xc7\xe0\x73\x2b\x9c\xfe\xff\x1e\x7c\xf8\xd2\x4d\x32\x1d\xd6\x53\x9e\x40\x27\x85\x97\x63\xc5\x62\x25\x8c\x21\xa4\x59\x6a\x3c\x09\xc3\xec\xd4\xfa\x10\x85\xf2\x28\x2a\xfb\x48\x0f\x99\x0b\x3e\xa5\x22\xa7\x4c\x7d\xcd\x67\x25\x70\x07\x6b\x46\x62\x6a\x6a\x86\xc3\xc4\x11\xdf\x53\x3b\x6c\x8f\x88\xd2\x35\x79\x10\x38\x8c\x13\x5e\x06\x3e\x7d\xdf\x2c\x3c\x13\x2e\xc5\xb8\xb9\x91\x93\x69\x88\x36\xa9\x8e\x7d\x03\x55\xef\x29\x56\xd1\x0a\xef\x43\xef\x26\x60\x1b\x50\x16\x80\x5d\x74\xa8\x9c\xee\x28\x8d\x5e\x38\xca\xc6\x2d\xb3\x32\x0e\x96\xdc\x00\xe2\x9b\x6d\xdc\x6c\x79\x2e\xdb\x62\xe9\x3e\xbb\xe3\x8b\x73\xa7\x3a\xec\x55\x17\xad\x68\x3d\x33\x3d\x41\x29\xc4\x86\x08\x53\x6b\xb4\x1e\xc4\x0b\x55\x8a\x38\x6a\xc0\x25\x8e\x11\xd8\x5a\x13\xdd\x79\x1e\x19\x2c\x1f\x99\x99\x73\xc1\x4a\x2a\x5e\x39\xb2\xdc\x6c\x0a\x0d\xae\x5b\xd3\x46\xd8\x1d\xe5\x36\x61\x5f\x00\xc8\x12\xc9\xc5\x9e\xb4\x09\x6f\xb3\x2c\x5c\x90\x61\xd7\x8b\xbe\x4e\x66\x47\xd8\x10\x0a\xcb\xd8\xb1\x6a\x0e\x41\xb9\xcc\x64\x0d\x17\x96\xef\x4c\x1d\x47\x71\xab\x94\xf3\x8c\x95\x0a\x3d\xe7\x88\x1b\x18\x17\xad\x44\x64\xb9\x13\xcd\x09\x68\x52\x6a\x1d\x84\xb7\x5a\x3b\x9e\x6b\x5b\x60\x4c\x93\x4e\x9d\x56\x39\x48\xe8\x90\x9e\xe7\xd9\xc6\x89\x93\xbb\x09\x7c\x6e\xe5\xf9\x5d\xe0\xf9\x18\x35\xbb\xd9\x8a\x60\x00\x4d\xb3\x04\xaa\x1b\xf6\x80\x4b\xca\x50\x55\x69\x3d\x77\x77\xf2\x5d\xa3\xe4\xf3\x71\x1e\x68\xe8\x75\x4f\xe6\xaa\x57\x5e\x74\x46\x08\x05\x51\xa0\x08\xb5\x81\x5e\x0a\x24\xd8\xf4\x33\x8a\x39\xf5\xa6\x07\x3a\x86\xd5\xc3\x10\x48\x5a\xac\x0b\x4f\x1f\x49\x02\x5d\xf0\x29\x8d\x11\x35\xcb\x43\x94\xd5\x56\xc5\xfb\x19\x51\xc7\xa3\x8e\x05\xd0\x1c\x48\xee\xe5\xe0\xf2\xc4\x29\x75\xb6\x8b\xae\xce\x7a\x6e\xf2\xaa\x8b\x96\x8d\x0e\x0b\xa5\x85\x9b\x74\xec\xb2\x06\x54\x2a\x2d\x7d\x09\xac\x2d\xdd\xb0\x0c\x95\x3a\x98\x84\x3d\x79\xea\x39\x75\x62\xc3\xfb\x55\x80\x5c\xf9\x46\x4b\x8a\x7e\x80\x32\x13\x67\x92\x96\x01\xe0\xf0\x36\x7b\x2f\x4f\x5f\xf7\x3e\xea\xda\x64\xad\x39\x12\x10\x38\x68\x74\x5e\x74\x4e\x38\x4d\x69\x2f\x6a\x5b\x76\x3d\x78\x01\x9b\x4d\x32\xb8\x33\xd8\xb1\x6b\x23\x44\x47\xc6\x9f\x3d\x72\x21\x87\xa0\x70\xdd\x62\xde\xf9\x0c\x17\xed\xc9\xa8\x61\x95\x9c\x31\x2b\xd5\x0a\xe6\x42\x92\x5f\xf9\xe0\xc7\x29\x28\x5e\x66\x4d\xab\x24\xcc\x31\x29\x4e\x31\xd8\x3a\xf5\x82\x91\x28\x17\xed\xc9\xa8\x71\xd6\x29\xdc\xc1\x85\x9a\xc3\xab\x76\x90\xa4\xf4\x6a\x0d\xf0\x4a\xc2\xdc\x42\x1a\x01\x15\x98\x0f\x03\x69\x18\x2d\xa9\x14\x6e\x02\x9f\x5b\xc5\x92\x17\x80\x8f\x38\x41\x46\x39\x5b\xee\xed\x28\x35\x9c\x4e\x54\xcd\x02\x65\xd9\x8c\xdc\x5c\x10\xb6\x52\x92\x59\x19\xdd\x66\x68\x85\x15\x20\x91\x8b\x36\x10\xc3\x64\x64\xdc\xf2\x56\xfc\xa6\x08\x24\x86\xa3\x45\x6c\x0b\x93\x4a\xa3\xc6\x30\xd3\x93\xae\x27\x8a\x59\x37\x53\x51\x69\xa3\x33\x7a\x55\x88\xd1\x01\x14\xd1\xd6\x63\x89\x19\xd3\xdd\x01\x95\x37\x81\xd1\x9a\x17\xcc\x32\x49\x08\x75\x03\x4e\xd2\x20\x8a\xa5\x21\x1f\xce\xac\xaf\x0a\x45\xed\x61\x08\xa9\xfb\x34\x96\x41\xed\xf9\xa1\x40\xdc\x4e\x03\xd4\x59\x6c\x67\x79\x6d\x8a\x80\x71\x38\xd3\xed\xbe\xaf\x58\x9f\xc7\xf6\x91\x1e\xf6\x17\xec\x89\x36\xfb\xb6\xad\x43\x28\xaa\xd5\x4e\xf0\xe1\x0d\x60\xfd\x8c\x7c\xcc\x28\x4f\x31\x89\x3f\xb8\xb2\x02\x60\x50\xca\xb2\xa8\x9c\x5d\x3a\x2f\x5a\x49\x70\x70\xb3\xf3\xd8\x7b\xd1\x87\x32\xc5\xb6\xb1\x3a\x1a\x96\x6d\x98\x16\xc6\x7e\x02\x22\xf7\x83\x23\xa7\xf7\x4d\x9d\xac\xd2\x5e\x64\xbd\x68\x25\xde\xeb\x5e\x4f\xcc\x06\xb3\xe7\x4e\x55\x42\xa6\x52\x4c\xfa\x2e\x5d\x69\x51\x38\xe9\x3c\x8e\x63\xef\xe7\x11\x9a\x46\x3e\xb8\x55\x5c\xe4\xf9\xb0\x78\x86\x55\x92\xd0\xa3\xe6\x6b\xc6\xab\xdc\x77\xa0\x95\x3e\xbd\x87\x5d\x18\xf4\x61\x92\x20\x77\xdb\x0e\x82\x39\x5d\xe2\x3c\xa4\x35\x37\x81\xcf\xad\xd8\xa9\x0b\xc2\xae\xae\xf6\x62\x76\xe4\x38\x19\xc0\x6c\x40\x1e\xcb\x59\x36\x90\x57\x6e\x09\x15\x6e\x61\x55\xc1\x53\x47\xb9\xe0\x88\xd5\x24\x8d\x82\xb1\x5d\x15\x62\x24\x73\x0e\x19\xd8\x39\xa1\xb3\x5b\xde\x34\x50\x41\x2d\x26\x50\xb1\x8f\x3d\x56\x8e\x22\xec\x6d\xec\xc0\x25\xba\xcc\x9d\x22\xb7\x5f\xe5\x83\x99\x6d\x6d\xd6\x58\xe4\x4d\x44\x55\x72\x76\x98\x33\xf6\x25\x0b\x08\x70\x22\x53\xc8\x61\xa8\x4f\x42\x6d\x70\xe0\x7e\xe4\x82\x78\xc1\x17\xad\x84\x1f\x19\xe6\xe9\x07\x50\x31\xd6\x96\x42\x75\xa9\x73\x37\x97\x9d\x43\xbb\x30\x28\x4f\xca\x8d\x22\xea\x9c\xa9\x59\xba\xb4\x45\x8a\xab\x02\xc0\x8d\x82\xd1\xe1\x74\x3a\x09\x78\x44\x95\x06\xf7\x7a\xa1\x84\xd9\x05\x91\x26\x0d\x63\x6d\x1d\xd0\x44\xd3\x30\xe4\xe0\xe8\x54\x8b\x8b\x7c\x30\x0e\x08\xdc\x57\x58\x56\x50\x91\x2b\x99\xe5\x1a\xb0\x8f\x51\x97\x52\xf2\xc8\x82\x17\xbb\x19\xd2\x37\x15\xeb\x79\x16\xa8\x64\x94\xd9\x5f\xb4\x92\xb6\x20\xce\x1c\x06\xd5\x6a\x78\x2e\x3c\x32\xc0\x7d\xc4\x58\xa1\xd3\xf6\x5d\x53\x15\x38\xd6\x19\x9f\xc7\x5e\xe3\x89\x11\x6f\xa7\xbd\x0c\x06\x99\xb4\x7b\x1c\x5e\xd4\x1e\xb9\xc6\x66\x51\xc1\x36\x8e\xb1\x3c\x23\xc7\xbd\x9a\x6d\x70\xce\x15\xa4\x9b\xce\x1a\x37\x0e\x90\xc0\x37\x81\xcf\xad\xf8\xee\x0b\x3c\x1f\x79\x60\x49\x51\x5a\x91\x8e\xa7\x56\x6e\x8b\xd2\xe4\xd9\x32\xa8\x70\x19\x5e\xba\x90\x70\x02\xc0\x0a\x0d\x09\xad\xa5\xdb\x4d\x7d\x64\x26\xf0\x15\xee\xf4\xb1\x67\x34\x75\x3f\x7b\xdf\xd6\x8d\x8c\x7e\x90\xb8\xc4\xb1\x1c\x94\xa7\x13\xac\x5b\xd9\x60\x4a\x33\xc9\x26\x39\x21\x1e\x65\x9b\xe1\x45\x2b\x41\x10\xe7\x1d\x43\x44\xfb\x06\x74\x4e\x34\x28\x4e\x94\x66\x13\x29\x89\x0e\xe5\x91\xdb\xa7\x1f\x69\xf3\x09\xba\xb2\x0f\x05\xc8\xbc\x6a\x25\x61\x5b\x2b\x97\x49\x3a\x14\xf0\x74\x1a\x98\x83\x75\x8c\x8f\xc6\x46\x5e\x18\xf2\x0d\x86\xce\x8f\x04\x18\x3e\x34\x6d\x73\x91\x5b\x02\x57\xf1\x60\x99\xef\xba\x04\x87\x85\x2d\xb9\x88\xda\x4a\x1e\x7d\x4d\x48\xc1\x72\x6c\x98\x71\x45\xb1\x10\x56\xc0\x7e\xb2\xc6\x53\xca\x9e\x5f\xf5\xca\xe3\x36\x3a\xb0\xd9\x5b\x9c\x4e\x32\x35\xc5\xf3\x58\x76\x81\xf8\xda\x24\x67\xb9\x84\x62\xa0\xd5\x12\x45\xc2\x0a\x06\x4a\x8f\x96\xe6\x45\x5f\xa7\xcf\xf5\x44\x89\xcf\xec\xe1\xbe\xab\xb9\xb1\x49\x79\x68\x95\xa1\x61\x90\xc8\x8d\x86\xcd\xe7\xdd\xb5\x15\x9d\xd1\x58\x63\x5a\x2a\x57\x25\x26\xa6\xaa\xdc\x56\x9c\x99\x59\xb8\xc3\x6a\x49\xfc\x60\x74\x96\x09\x9b\x1e\xd8\xd8\x9d\x1e\xf1\xcc\x6c\x94\x1e\xe8\x32\x96\xb8\xad\x92\xdd\x04\x3e\xb7\xca\xa0\x5d\x00\x3e\x25\x9d\x95\x06\x52\x35\xda\x45\x03\x43\xdd\xf9\x3f\x12\x9d\x6c\x99\x16\xc7\x9d\xaf\x96\xad\x46\xef\xa0\x09\xe4\x18\x36\xdd\x83\x8f\xf4\x77\xb8\xe0\x53\x4a\xae\x94\xcb\xd0\x80\xb4\x79\x6f\xa2\xdf\xf8\xba\x60\x92\xeb\x71\x54\x0d\x37\x6f\x2b\x0d\x0d\x1a\x5b\x0e\x16\xb0\xd6\x60\xc3\x49\x5f\x15\x00\xee\xca\x2d\x73\xc6\x1e\xa3\x0a\x67\x3a\x5c\x11\x25\xe3\x05\x1e\xc2\xc5\xad\xee\x40\x19\xe4\xd4\xd0\x90\x2d\x6a\x88\x15\x1d\x73\x5e\x95\xc5\x48\xbe\x36\x45\x37\x9e\x76\x3f\xed\xaa\x5b\x1a\xb3\x9b\x7a\x80\x43\x02\xab\xe4\xa1\xb8\xc8\xe8\x68\x78\x26\xbc\xc6\x35\x33\x3f\xd3\x45\x7e\x29\x3b\x62\xa5\xa1\xc8\xb0\x56\xb7\x32\xee\x82\xeb\xa1\xd5\x2d\xd4\x66\x21\x5d\x0c\xd6\x56\x1c\xe7\xd1\x57\x2d\xeb\x58\xb7\xcc\x0e\x29\x2e\xba\xf2\x2c\x02\x3b\x88\xe3\xd2\xad\x40\x95\x2d\x89\x55\x81\xbe\xa6\x61\x87\x2e\x01\xee\x88\x93\xd6\x08\xda\x9a\x3a\x5d\x97\xa1\xb5\x9c\x3f\x52\xd1\x77\xc1\x4a\xa8\x12\x47\xcf\x72\x82\xad\x2b\xbc\x94\xa6\xcd\x5e\xa5\xa9\xeb\x6a\xe9\x7a\x58\xb4\xd9\x63\x91\x71\x5d\xf3\x51\x94\x89\x92\x03\x26\x2f\xca\x45\x72\x21\xf3\x39\xfb\x90\xc6\xb8\x94\x3c\x2a\x7c\xdd\xc7\xf4\xbb\x05\x49\xb9\x75\x86\xe9\x7b\x27\xae\xac\x73\x63\xd4\xcb\x74\x52\x0b\x6f\xce\x76\xdd\x2a\x27\x7f\x01\xf8\xf0\xa5\xc1\x9d\x76\x20\x20\x89\x3b\x59\x89\x5d\xab\xd9\x09\xdd\x1d\x03\x9d\x8a\x24\xcc\xb0\x73\xd9\x82\x5b\x4c\x1a\x2a\x58\xda\xf6\x8b\x62\x79\xbe\x74\xb7\x34\x91\x9c\x57\xc7\x48\x05\xda\xc1\x78\xb3\x24\xf2\x6d\x1d\xa0\x69\xae\xb0\x1a\x07\x41\x89\x04\x11\x01\x24\x58\xa4\x7c\x55\xb0\x03\x36\xe0\xa3\x54\xd9\x67\xd6\xb0\x8e\x52\x68\x9f\xf2\xba\x6c\x10\x0f\xde\x8e\x31\x19\xda\x72\x11\x92\x3a\xd6\x74\x02\xfe\x44\xec\xb2\x64\x2e\xf5\xce\xe5\x3a\x29\x1c\x2b\x5e\x43\x9c\x60\x52\x9f\xed\x84\x0e\x34\xc2\x49\x17\x80\xea\x7d\xf3\x45\xad\xc5\xcf\x8a\x76\x75\x59\xd8\xc5\x67\xa8\x60\x86\x0d\xb4\x59\x14\xc2\xba\x33\xdc\x92\x21\x85\x99\xde\xa6\xe5\xad\xa9\x0e\x6d\xa4\x63\x65\x65\x9a\xce\x52\x2f\x57\x3d\x52\x71\x2a\x57\x30\x6b\xaa\x40\x61\x8e\x9e\x60\x3b\xd5\x2e\x52\xcb\x09\x88\xdd\x49\x59\x25\x58\x79\xd9\xce\x22\xfc\x7a\x1e\x27\xde\xf4\x55\x3e\x98\x84\x08\x08\x89\x9d\xf0\x72\x19\x16\xca\x41\x47\x66\x5c\xb7\xe9\x75\x19\x66\xd8\x5d\x0a\x88\xa5\x08\x05\xe3\x74\xe7\x99\x39\xae\x4a\xfa\xf3\xae\x0b\x8d\xc1\x12\x1f\x75\x5f\xf1\x2a\xe1\xba\xf7\xb4\xba\x33\x67\xd9\x0f\x46\x65\xcd\xdb\x39\xed\xd6\xc5\x66\xa5\xee\x78\x7a\xf3\xbf\x52\x24\x7f\x2c\xb6\xba\x95\x2e\xed\x4f\x89\xad\x5e\xfd\x6d\x0f\xfe\xf5\xc7\x7e\xe6\x53\xde\xf3\x43\x5f\xf2\xb5\x4f\xfb\xa3\x71\x8f\x8f\xfe\xa6\x17\xa4\xa7\x3f\xef\x8e\x77\xfe\xbb\xb7\xb0\xfb\xff\xc6\xfa\xd0\x4f\x7f\xc4\x0d\xa6\x77\xfc\xde\x8b\xde\x70\xdb\x17\x3d\xa2\xfc\x8d\x27\x7f\x4c\xfc\xca\x37\xbf\xf2\xcb\xbf\xf9\x37\xff\xda\x3f\xfb\x81\x5f\xbe\xe3\x93\x5e\xf5\xd4\x9f\xba\xef\x23\x5e\xfe\x0f\x3e\x78\xa3\x2a\xe9\xe3\xfe\xd3\x3d\x7f\xe9\x21\x0f\xf8\xd1\x67\x3f\xfd\x3b\x7f\xf4\x55\x2f\x5d\x5e\xf5\x81\xdb\xdf\xff\x74\xf8\x45\xbf\xfa\xc2\x6f\xb8\xdf\xbf\x7b\xc7\xb3\x9f\xfb\xf4\xc7\xde\x60\xfa\x29\x1f\x7c\xf4\x23\xdf\x7a\x3c\x2f\x7c\xd6\x6d\x1f\xf7\xac\x8f\xea\x6f\xff\xa5\x4f\xff\xc1\x67\xfc\xcb\x0f\x3c\xde\xda\x6f\xf9\xfc\x9f\xf9\xf4\xa7\xfc\xc2\x3b\xf5\x0d\xa6\xe0\x1e\xe0\xaf\xff\xe2\xef\xdf\xef\x49\x5f\x9c\xbe\xed\xab\x7f\xf6\x65\xfe\x59\x1f\xfc\xa9\xbf\xfb\xd4\x1f\xcc\x3f\xf2\xb4\x27\xff\xca\x27\x7c\xe0\x6d\xbf\xf9\xc4\x7f\x71\x83\xe9\x27\xfc\x85\xb7\x2d\xdf\xfa\xe8\x7b\x2f\x2f\x7a\xd9\xc3\xde\xff\xf8\xb7\xdc\xfe\x4f\xdf\xf5\xcc\xcf\x7b\xdd\x6b\x7f\xf8\x97\x3f\xe1\xf5\xe7\x43\x5f\x75\xc7\x3f\xfc\x91\x1b\xc7\x3e\x3e\xef\xe7\xde\xf0\xd7\x7e\xfe\xcf\x3f\xff\x9e\xaf\x7d\xcc\xa7\xbe\xe8\xb3\x1e\x17\xea\xc7\x7c\xd9\xb3\x9f\xf7\x3f\x5e\xd2\xfe\xea\x67\xe4\x07\x7f\xd4\x5f\x4c\x1f\xeb\x6e\x30\x7d\xf1\x03\x9f\xe2\x7f\xf6\x73\xe3\x5f\x7e\xf6\xa7\x3d\xf2\xe1\xbf\xf8\x1f\x5f\xf2\x88\x9f\xfe\xc7\xfe\x1e\xbf\x7b\xaf\x2f\xfc\xc5\x6f\xf9\xfd\xe7\xfe\xa5\x77\x3c\xea\x03\x0f\xfd\x13\xb1\xd5\xad\x76\xf5\x02\xe2\xad\x48\x64\x0f\x0a\x76\x17\x02\x2e\x1b\xe6\x59\xfa\xa3\xe3\xea\x4f\x87\x77\xca\x01\xd0\x44\xad\x62\x9b\x1b\x51\x66\x96\x59\x75\x1e\x17\xe9\x1d\x78\x5d\xda\x1a\xc4\x74\x87\xda\x4e\xcf\xfd\x3a\x8b\x33\x73\xdd\x48\xe0\xdb\x86\xb8\x5d\xe1\x38\x00\xa6\x15\x94\xd6\x29\x6a\xe0\xdc\xec\x45\x09\x1c\x46\x8e\x4d\xaf\x2b\xe0\x29\x0a\x5b\x45\xd0\xa3\x39\x09\x82\x87\x70\xc3\x8c\x7c\xb8\xad\x4f\xcc\x5d\xe2\xd3\xee\x0a\x3a\xb0\xfa\xc9\xaf\x62\xfd\x31\x26\xc1\xda\x36\x8f\x3c\x7d\x58\xe0\xde\x51\x9e\xc7\x30\x07\x1c\xa7\x9e\x0b\xa6\xb5\xb8\xa2\x17\x07\x93\x65\xa7\xde\x64\x19\xe6\xaa\xf4\xda\xaa\xd0\xca\x7b\x43\x08\x13\xac\xb7\x5d\x61\x7a\x48\xc2\xeb\x31\xec\x01\xea\x22\x20\xe4\xc1\x26\x10\x7c\xcd\x34\xec\x94\x0d\x3a\x2e\x8a\xf3\x38\xe7\x84\x9b\x0d\x93\xa3\xdb\xd6\x19\x1e\x07\x33\x1b\x75\x9a\xdb\x89\xbc\x63\xb4\x6c\x0b\xdb\x76\x1d\xc1\x82\xda\x89\x6a\xd5\x33\xa3\xab\x38\x92\x0f\x77\xd1\xcd\xfa\x88\xc8\x6c\x2b\xa7\xc2\x0c\xc1\x3b\x40\x3d\x2e\xb5\xeb\xb9\xb9\xc3\x28\x62\xb8\x8c\x9c\xad\x58\x90\xa9\xae\x52\xa3\xf0\x90\xca\xa9\x39\xd8\xf5\xb9\x9e\x81\x10\xcc\xd3\xc2\xb3\xf3\x94\x76\x59\x30\x3e\xba\xcf\x98\xf4\x05\xc3\xa8\x24\xd9\x9b\x25\x4d\xee\x37\xb9\x9f\xb7\xc2\xe9\x0b\xdc\xcf\xb8\xb6\x45\x81\x05\x11\xbe\x17\xc7\xe2\x00\xcb\x00\xad\x20\x11\x98\x4b\x8b\xa1\xd0\x14\x38\x06\xdc\x00\x10\x70\xa4\x8d\x73\x75\xd5\x45\x63\xed\xcc\xc5\xb4\x33\x25\xcf\xbd\xcc\x3a\xed\x5a\x8a\x35\x44\x45\x1b\xb7\xdb\x22\x66\x67\x73\xcb\x5a\x30\x84\x32\x3d\x0f\x8f\xa5\xb9\x2a\xf6\xad\x67\xce\x33\x30\xb1\x12\x35\xf3\x06\x0b\x27\xb9\xb0\x42\x46\x4b\xed\x8c\xe5\xcc\x94\x2c\xc6\xcc\x8e\xec\x02\x4b\x43\x7a\x61\xec\xb2\xdc\x7e\x17\x6a\x97\x6c\xad\x30\x87\xb9\xa4\xa6\xfb\xda\x65\xdb\x60\xde\xdd\x38\xd0\x79\x96\xa8\x73\x97\x1a\xb8\x50\xba\x20\xd9\xd0\x71\x15\xd7\x9e\x1a\x96\xe7\x1e\xcf\xb2\x0e\x6e\xf1\xba\x9b\x51\x62\x4b\x01\xb1\x1e\xf6\x7d\xb7\xf4\x80\x3d\x4f\x2a\x71\x57\x31\xb0\x90\x97\x2e\xae\xe2\xda\x43\x1e\x58\x9c\x3d\x91\x55\x58\xe6\x72\x8a\x9b\x9e\xc7\x42\xc8\xbe\x2e\x47\x09\x46\x0f\x3c\xf4\x7e\xb4\x0c\x17\xcb\x73\x1e\x0b\xbb\x2c\x21\xbc\xf5\xe9\x14\x43\x2a\xe8\xb1\x00\xb1\x79\x08\x1b\xaa\x14\x58\xee\x90\xde\xec\xc9\xac\x56\xa4\x8b\x71\x2c\x47\x36\xaa\x0f\xa4\xe5\x55\xb2\x2f\x94\xb9\x2d\x9c\x10\x10\xf7\x1e\x06\x01\x07\x76\x10\xd1\x81\x38\x58\xa0\xdf\xdd\x3e\x35\x02\x29\x73\x7b\x84\x6a\x01\x6a\x9b\xd8\xcb\xcd\xb1\xef\x2d\x3c\xbf\x0b\x3c\x1f\xaf\x69\x88\x32\x69\x4d\xf7\x19\x96\x11\xaa\xd8\x56\x21\xa5\xd7\x62\xc5\x85\xb6\xb2\x1e\x22\xb9\x9e\xc2\xf0\xb5\xa3\x4c\xa8\x00\x17\xb1\xfe\x4c\x04\x54\x0f\x46\x8e\x40\xb6\x6d\xa9\x79\x24\x37\xe6\xb6\x9e\x5a\xa3\xa5\x6e\x2c\xa9\x94\x95\x08\x80\x31\x81\x5c\xdf\x88\x33\x7d\xbf\x88\x50\xe1\x59\x73\xe5\x3c\xd0\xf2\x38\xc3\x42\x47\xef\xa6\x58\x1c\x8b\x04\x2d\xe0\x79\x0e\x87\x9a\xc2\xc8\x9b\x93\x75\xc4\x34\x2c\xb6\xb1\x8b\xe2\x3c\x86\x08\x8b\x3c\x2b\x58\xa2\xd0\xeb\x41\x26\x47\x34\xd4\xba\x79\x7b\xac\x2d\x18\xae\x2c\x33\xc4\x1f\xdc\x15\xc1\xb9\x90\x36\x6c\x97\xd1\x5d\x9c\xa6\xd2\x07\x4c\xad\x66\xba\x49\x57\x21\x47\xc2\x84\x6e\x14\x1a\x72\xcf\x30\xad\x65\x5b\x10\x3d\x81\x4e\x5e\x28\x58\x08\x06\x17\x5d\x34\x36\x0e\x46\xa2\x1e\x6d\x35\x83\xc6\xdd\x1f\x35\x63\xd9\x76\x44\xca\xd8\x35\xd8\xf9\x38\x37\x7f\x52\x24\x02\x58\xf8\x76\xd0\x35\x9b\x7c\x55\x9e\x8a\x90\x7d\x27\xd4\x3b\x1b\x10\x94\xcb\xa2\x75\xc9\x64\x61\x90\xeb\x3d\x91\x6e\xb4\x76\x3e\x1d\x88\xc2\xb2\x6f\x24\x6f\x69\x9b\x91\x5f\x25\xb6\xda\x0f\x84\x6b\x3f\x75\x94\xfc\xcc\x26\x2d\xf8\x34\x8c\x53\x13\x8a\x94\x0e\x54\x55\xa8\xdc\x19\xa7\x10\x21\x88\x72\x8a\x0b\xdd\x45\xbe\x09\x7c\x6e\x15\x4b\x5e\x00\x3e\x2a\xb5\x65\x04\xb7\xe4\x90\xb7\x78\x66\xb2\xec\x65\xc9\x0e\x18\x48\x1d\x6f\x08\x3b\xeb\x8e\x79\xee\xb2\x60\x2a\x23\xeb\x39\x61\x7d\x95\xbf\x61\xe9\x51\x72\xd8\x2d\x0d\x20\xab\x80\xa9\x93\x5c\x6c\x3a\x00\x6d\xe3\xac\x47\xe1\xeb\xe4\x0b\xa5\x62\x97\xcc\xb7\xaa\x62\x0d\xf5\xaa\x57\x3e\xb4\xee\x48\x32\xc8\x1b\x37\x62\xae\x2a\x19\x69\xab\xad\x10\x7a\x25\xdb\xd9\x2b\x15\x6e\x24\xed\x02\x2e\x83\x63\x55\x00\xc9\x57\x69\x40\xfc\xe6\x35\x21\x81\x6c\xdd\xf7\xf3\x2c\x7c\xa3\x56\xea\x8e\x50\x6d\xeb\x91\x97\x05\xec\x58\xe2\x63\xd9\x66\xa9\xc6\xac\xb1\xdb\xaa\xaf\x92\x38\x31\x48\x3c\x55\x30\x78\x20\x91\x5a\xb7\x39\x97\x83\x88\xed\x38\x44\x22\xda\x0b\x83\x28\xa5\xcc\x1f\x48\x37\x92\x96\xb3\xf7\xca\xf8\x55\xde\xa0\xee\x7b\x36\x93\x65\x11\xe8\x6a\x78\xa0\x26\x55\x18\xce\x94\x45\x64\xcc\x9f\x3b\xef\x61\xb5\x12\x78\x9c\xb8\x32\x96\xac\x69\x37\xf2\xa2\x3d\x49\x3d\x9e\x7c\x27\xd5\x95\x2e\x25\x3d\x02\xa0\x9a\x9c\xa4\x41\xad\x6b\xd5\xdd\xa2\x13\xd2\x4d\x64\x10\xb7\xa1\x3b\xde\x58\x6b\xec\x22\x45\x30\xe7\x07\xde\xd7\x85\x59\x8f\xd7\xd8\x86\xcc\x27\x99\xc3\x38\x4e\x8a\x3f\x34\x4d\x8a\x9d\x7d\x34\x30\x30\x1d\x6e\x55\x66\xc1\x56\xef\xf4\x26\xf0\xb9\x15\x3b\x75\x41\xd8\x45\x4f\xeb\xbb\x63\xc8\x16\xda\x38\xce\x87\x4c\x93\x58\xea\x56\xd2\xcc\x2a\x56\xc9\xbd\xee\xaa\x4f\xb3\x1e\x4a\x91\x64\x13\x28\xfb\x55\x61\x57\x25\x7b\x2e\x25\xf1\xc9\x96\x42\x21\x06\x06\xb0\x84\xd9\x2c\x14\xeb\x11\x47\x39\xa6\x08\x91\x2d\x1a\x4b\x2a\x2d\x2d\x47\x4a\xf3\xaa\x8b\xb6\x00\xaa\x4e\xe8\x15\x45\xd2\x50\xe3\x47\x41\xc9\xae\x39\x98\x70\xd2\x99\x92\xd6\x24\x96\x92\xad\x05\x45\x6f\xd3\x42\xe3\xf3\x55\xee\x34\xdb\xb7\x13\x7b\x5e\x88\x3a\xb1\x0a\x14\x2d\x50\x76\x17\xd1\x49\x39\xf8\x48\x85\x47\x3d\x47\x63\x4e\x33\xbb\xd0\x19\x71\xb2\xb8\x5c\xc5\x70\xaf\x5b\x8a\xf2\x94\xc2\xd6\xb5\xab\x76\x84\x64\x8e\x3c\x4f\x47\x27\x83\xbb\xc5\x94\x70\xab\x95\xb3\xa8\xea\xd8\x0e\xc7\xd4\x51\xcc\x55\x3a\x5c\x2b\x4c\x15\x56\x9a\x5c\x0e\x4c\xcb\x39\xb7\x06\xd5\x32\x55\xdc\xfa\xe0\x36\xf7\x62\x23\x30\x63\xb6\x19\x75\x40\x7d\xa7\x6b\x63\x57\xe9\x1d\xb2\x69\x08\x2e\x61\x59\xfd\x5e\x21\x25\x4b\xa6\xa6\x74\x50\x31\xeb\x91\x99\x65\x0a\x38\xa8\x62\x73\x3b\x82\x03\xdc\x80\x24\xb9\xb8\xaa\xfc\x11\xe7\xbc\xec\x42\x46\x81\x37\xbb\x8e\x15\x14\x99\xdb\x6a\x40\x6d\x78\x59\xfb\xde\x26\x9e\x75\x2c\x46\x22\xa9\x04\xe8\xd6\xd2\x30\xe5\x4d\xe0\x73\x2b\xbe\xfb\x02\xf0\xf1\x11\x9f\x4c\xf2\x04\x56\xea\xb7\x1a\xed\x6a\xf6\x73\xab\xc5\x99\xbd\x7a\xb4\xd6\x4e\x4e\x6b\x58\x67\x59\x6c\xd6\x2f\xe9\x6c\x4d\x5f\x95\x3d\x4e\x05\xe5\xe0\x49\xa5\x25\x2c\x14\x14\xeb\x27\xb6\x32\x6d\xa7\x5a\x80\x3a\xa9\xf1\x9b\xcf\xfd\x48\x9b\x74\x0e\xb7\x88\x97\x4d\xcd\xab\x8e\x37\x6e\x68\x21\x7c\xfa\x06\x14\x44\x9b\xdd\xce\x55\xd1\xc5\x1b\xb0\xe6\x58\x21\x30\x7d\x9d\xec\x58\x11\xa3\x99\x49\xa0\x56\x85\xcd\x55\xfe\x06\x5f\x56\x2b\x77\x57\x52\xe2\x24\xb2\x55\x85\xde\xe3\x96\x57\x62\xaa\x1a\x01\xa9\xea\x91\x1b\xcd\x99\x8a\xe1\xbe\xa6\xb2\xcb\x09\xaf\x12\x32\xf3\xee\x54\xb3\x42\x02\xc5\xad\x1c\x70\x5f\x49\x04\x5c\x31\x25\x2c\x92\xe7\x59\xc3\x58\x12\x57\x9b\xde\xaa\x0c\x25\x8d\xc1\x95\x18\x97\x25\x84\x8f\x4d\x69\x4e\x33\xdd\xd7\xde\xb6\x36\xf0\xbe\x75\x4e\x2a\xeb\xdd\x0f\xbb\xb9\x93\xee\x1e\x78\x99\xc4\x0a\xbd\x1a\xcd\x6c\x82\x5f\xa5\xaf\x4c\x3e\x84\x38\x6a\x2a\x82\xc0\x1d\x8d\x32\xb2\x29\xc5\x8d\xee\x88\x5c\x25\xcb\x6b\x13\x19\x09\x10\xa4\x34\x5c\x8e\x0d\xe3\x63\xbf\xaa\x08\xc0\xa4\x54\x34\x6f\x74\x9e\x71\x78\x57\xe8\x59\xed\xae\x9d\x15\x87\xaf\xc7\x24\x8b\x38\xd6\x0c\x01\xd8\xed\xc2\x2b\x80\xa2\xd2\x4d\x6e\x37\x81\xcf\xad\x32\x68\x17\x80\x0f\x58\xfa\x8a\xea\xc2\x55\x3b\x94\x3c\x9c\x85\xf5\x08\xf2\xac\xae\x77\xe1\xe9\x8a\xe6\x20\x31\xe6\x44\xc7\x4a\x90\x2e\xa8\x07\xb6\x5f\x95\xed\x22\x90\x52\xcf\x45\x80\xe9\x40\xba\xe4\x95\x28\x52\x4d\x95\xd0\xca\x13\xf6\x63\x76\x5b\xf6\xd1\x07\x3f\x53\xaf\x49\xa1\x39\xf7\x79\x15\xe7\x23\xf6\x63\xa4\x88\x51\x6f\xf9\x38\xf7\x80\xeb\x94\xab\x56\xfb\xca\x97\x86\x49\xda\x98\x8b\x18\xe4\x61\x91\x82\x08\x6b\x78\xac\x5b\xba\xaa\xac\x0d\xe8\xf5\x18\x1f\xce\xdf\x43\x9b\x10\xa3\x98\xf7\xe3\x04\xcc\x60\xdf\x2c\x8d\x54\xc0\x46\x19\x5a\x26\xed\x39\x1d\x6e\x6c\x62\xb9\x4c\xf6\xb5\xba\x83\xed\x10\xb9\x9c\xad\x46\xc0\x51\xba\x8e\xdc\xd9\x62\x50\xc8\x89\xb7\x02\xc2\xbe\x9b\x2d\x1d\xa7\x96\x6b\x90\x56\xe1\x2e\xae\xf2\x06\xf9\x01\x82\x30\x93\x1e\xd3\x9b\x64\xe0\x82\x43\x21\xce\x20\x54\x32\xdb\xa6\x82\x1e\x69\x76\xba\x61\x72\x9b\xa3\x21\xa8\xe2\xaa\xaf\xca\xbb\x35\x77\x6e\x8c\x4f\xdd\x65\x35\x49\xc8\x48\xb6\x52\x26\xa9\xa9\x40\xb7\xc9\x05\x00\xad\x61\x71\xab\x62\x15\x2e\x6d\x43\xe2\xf0\x57\x55\x20\xf1\xb4\x17\x6e\x4f\x43\x0f\x63\x76\xe8\xa0\x12\xbb\xd6\x15\xbb\x65\x66\x60\x6d\x4c\xd6\x00\xa0\xa8\x85\x6a\x46\xce\x8e\xe0\xb7\x7c\x43\x65\xfc\x1f\x83\xcf\xad\x72\xf2\x17\x70\x3e\xfb\xb2\x1d\x65\x3d\x05\x0b\xcb\x61\x8b\x80\x6b\xf3\x8e\x75\xbc\x38\xb1\x9d\xbd\xb2\xbc\x32\x23\x0e\x93\x50\xee\x9d\xf2\xcd\x62\x7e\x15\xcd\xcb\x0c\x1b\xbe\x7a\x7a\xea\x52\x84\x4f\x0c\x1d\x08\xf7\xd9\x02\x5d\xd3\xe9\x02\x28\x15\x48\x28\x39\x34\x76\xfc\xbf\xb4\xfd\x69\xf4\x76\xcf\x55\x16\x08\x77\x08\x10\x21\x86\x28\x83\x08\x11\x81\x06\x15\x82\x90\xb6\xaa\x4e\x55\x18\x5e\x30\x32\x75\x83\xb6\x90\x6e\x06\x03\xa4\xa9\xaa\x53\x75\x6a\x1e\x4e\xd5\xa9\x09\x83\x46\x02\x01\x94\xd9\x34\x63\x18\x15\x64\x54\xa6\x80\x10\x5e\x9b\xa4\xb3\x20\x12\xe6\xa1\x79\x09\xc3\x1b\x20\xc4\x40\xd0\x20\x81\x28\xf2\x87\x5e\x61\xad\xb0\x9e\xc5\xdf\xb5\x9e\x4f\xe7\xc3\xf3\x6d\xaf\x67\xdd\xab\xee\xfb\x77\xed\xbd\xaf\x7d\xed\x6b\xeb\x43\x9f\xf2\x18\xe7\x79\x57\x11\x4b\x95\x1c\x07\xb3\x53\x00\x4c\x64\xe0\x7b\x46\x5b\xd5\x3b\x66\x5a\xcb\x69\x9b\x51\xa7\x6b\x27\x85\xce\xa2\x70\x30\x2d\xb5\xa5\xf6\x2e\x89\x53\x8b\x79\xb3\xb1\x25\x26\x02\xbd\x12\x8b\xb8\x34\xea\x05\x2e\x42\xb0\x4d\x86\xcd\x00\x94\x5c\x59\xc3\x91\x35\x25\x84\x7d\x24\x7b\xd7\x3c\xe5\x38\xe1\x1b\xda\x06\x96\xf2\x6e\x4f\x4c\x89\xd9\x56\x1f\x32\x68\x1c\x1c\x3e\xd7\x99\x50\xde\x46\x04\x28\x8f\x96\xb6\x23\xa9\xcb\xdc\xf6\x87\xa6\x51\xc4\x27\x75\x6d\xb1\xd2\x1a\xc6\x06\x87\x04\xe2\x94\xe4\x38\xcc\x62\xb2\xba\xe8\xa6\x88\x29\x82\x0b\xe4\x99\x50\xce\x7c\xde\x35\x77\x13\x4d\x93\xe8\x01\x3d\x2a\xe7\xb5\x1e\xf4\x3c\x8e\x76\x4a\x3b\x7c\xdb\x3b\xa5\x93\xc1\x72\x18\x78\xf9\x18\x05\xa2\xaa\xae\xaa\xe8\x5d\x4d\x71\xbf\x28\x3a\x4a\x85\xe6\xb0\x8b\x10\x44\xcf\x48\xdd\x11\x51\x3e\x5a\xa2\xba\x3b\x07\x82\x5d\x59\xd1\xaa\x95\x9f\x95\xb6\xcb\x3e\x90\x1a\xde\x28\xb6\x7a\x98\xb3\xd7\x9f\x11\x5b\xbd\xf4\xe3\xfe\xd2\xd7\xfc\xf4\xe7\xfc\xc8\x0f\x5d\x8f\x7c\xbd\xfe\xa4\xf7\xff\xff\xbf\xec\x33\xfe\xd9\xf7\xfe\xb5\x8f\x79\xfa\x17\xfb\xa7\xfe\xc7\x2f\xff\xa4\x17\x92\xf7\x7b\xfc\x03\xa1\x1f\xf3\x8c\x9f\xfc\xf4\xef\x7e\xe2\x77\x96\xf3\xf1\x2f\x12\x1f\xfc\x91\x3f\xf8\x15\x5f\xf1\x8d\x3f\xf2\xd4\xd7\x7c\xce\x8b\x9f\xfe\xe5\xaf\xfd\xf7\x3f\xfc\x79\x8f\xfb\x8b\xff\xdb\x03\xa1\xf3\xeb\x3e\xe6\x29\x8f\xfd\xd9\xf7\x7b\xa6\xfb\xe4\x6f\x7c\xec\x5f\xf8\x97\x6f\xf1\xe2\xd7\xff\xc4\x1f\x3e\xf3\xbd\x9e\xf2\xc5\x1f\xf1\xbf\xbd\xf3\x7f\x7e\xf2\x67\xff\xe6\x57\xfe\xd5\x07\x42\xff\xce\xdf\xfc\x83\x27\x68\xf1\xa3\x9f\xff\xb2\xfd\x31\x5f\xf5\xd8\x37\x7b\xd9\x23\x4f\xfc\x0a\xf9\x77\x5e\xfb\xbf\xbf\xf2\x5f\x9e\x7f\xfd\xff\xf7\x66\x8f\xff\xa3\xcf\x3c\x1e\x08\x7d\x87\xfd\x4b\xdf\xf5\x59\xaf\xfc\xb2\xc7\xbe\xdb\x3f\xfc\x77\xee\x25\x9f\xf2\xc2\xff\x81\xfe\xd1\x13\x3f\xfa\x0f\x7f\xdd\xbe\xf5\x6b\x9f\x53\xde\xfe\x07\xe9\x9f\xff\xd9\x07\x42\xff\xdb\x5f\xfe\xd9\x8f\xfb\xf9\xeb\x35\x2f\x7a\xc5\x93\x3e\xec\x6f\x7d\xc0\xb7\xbf\xc5\xff\xf7\x1d\x7f\xe3\x8f\x9f\xff\xa9\xcf\x06\xbf\xfe\x7f\x3d\xef\xb9\xcf\x7c\xbb\xc7\x7c\xc1\x13\x1f\x08\xfd\xc7\xcf\xff\x17\x5f\xf4\x6b\xdf\xf8\x6e\xaf\x79\xe2\x2f\xbe\xf6\xfd\xdf\x2c\xbd\x74\xbc\x99\x7a\xc6\x87\xfc\xdd\xb7\x78\xd5\xef\xbf\xcd\x9f\x7b\x97\x2f\xfd\x67\x9f\xf2\xa3\x7f\xe1\x81\xd0\xf4\x97\x7f\xf1\xb5\x9f\xf5\x34\xfb\x81\xcf\xfc\x67\x9f\xf0\xe1\x6f\xf2\x9a\x2f\xf8\xa4\x97\xfe\xfa\xd7\x7d\xd5\x3f\x7f\xc6\xfb\xbc\xcf\x5b\x3d\xf7\x07\x1f\xf9\x35\xf5\x49\x3f\xfd\xa7\x62\xab\x87\xbd\xea\x1d\x5b\x8e\x5e\x10\x79\xba\x31\xab\xec\x2b\x37\x79\x32\x08\x2c\x81\xcc\x50\x6e\xaf\x28\x94\x3c\x73\x4e\x08\xec\xd3\x51\x8c\xc2\xe1\x0e\x7e\x57\xd1\xc7\xac\xb6\xa1\xd4\x56\x77\x64\x6c\x83\x49\xad\xe0\x7d\x01\xba\x8f\x6d\xcc\xe2\x60\x0d\x5a\x15\x27\xaf\x8b\x59\x49\x55\x6a\x15\xde\x35\xc0\xa9\x72\x07\xd4\x42\xc8\x4e\xd4\xd4\x50\xd3\x01\x2e\x13\x73\x46\x84\x92\x48\x83\x40\x05\xdc\xca\xb5\x58\x5c\x34\x0e\x5b\xad\xdd\xef\xea\x69\x06\x99\xe0\xa0\x9b\xe8\x54\xee\xd7\x01\xa8\xc0\x9b\x0d\x10\x60\x6e\x73\xa6\x6c\x81\x90\x00\xe6\xd3\x76\x71\xda\x2b\xb0\x76\xa8\xdb\x84\xbf\xb1\xa7\xca\x7d\x12\xad\xd9\xbd\x8b\xd9\x2f\x47\xaf\xbd\x1e\x27\x21\xbd\xe4\x78\x4d\xd5\x79\x25\x9a\x05\x42\xd6\x6e\x91\x6d\xe6\xb6\xcd\x4f\x83\xb5\xd3\x69\x22\x35\x50\x8b\xe0\xb4\x90\xaa\xba\x05\x76\x06\x73\xd6\x6b\x71\x9d\xb7\xe1\x70\xbf\xe0\x3e\x38\xe0\xfb\xb2\xe1\xb6\x92\x5c\x41\xc8\x34\x5b\x9d\x1e\x2d\xe3\x53\x47\x44\xc8\xe4\xbb\x3a\x8e\x71\x42\xef\x56\x63\xde\x45\xe9\x45\x6d\x72\x67\xe0\x18\xe7\x98\x77\xb1\xfe\xa1\xc5\x85\xd9\xc4\x00\xb2\x23\xd7\x8a\xb6\xda\x63\xaf\x50\xe5\xd0\x47\x96\x16\x95\xa9\xb6\x93\x92\x03\x58\xe4\x1a\xab\x3e\x52\xfe\xa8\xf2\xf3\x61\x38\x7d\x43\xef\x7b\x20\xb8\xe1\x37\xe4\x2f\x80\xd5\xe6\x0a\x28\x8b\x2b\x4b\x01\x2d\x63\x4e\x15\x93\x72\x04\xe4\xe0\x60\xa8\x15\xd3\xfd\x94\x55\xd1\x9b\xf6\xe8\x58\x47\x0c\xf8\xb9\x85\x91\x8f\x9d\xce\x55\xfb\x04\xbb\xd0\xd6\xd6\x34\x15\xa3\xfb\x5e\x03\x6c\xcb\xc2\x52\x60\x24\x7d\x64\x24\xd7\x5d\x1b\x7d\x69\xb6\xba\xda\x95\xa6\x1f\x67\x03\x09\x74\x13\xc2\xc0\x83\xa1\x5e\x38\x19\x59\x5c\xde\x76\x71\xd8\x46\xd8\x25\x6c\xb7\x78\xc2\xbb\x34\x20\xb1\x91\x58\xc8\x09\x0f\x29\xca\x66\xe6\xb2\x08\x47\x23\xd0\x76\x39\x8c\x44\x64\xa4\x2f\x69\xa5\xdd\xc9\x4e\xaf\x24\xd7\xa4\x86\xdd\xb5\xca\xe2\x9a\x8c\xd7\xee\x5d\x1f\xf0\xba\xb0\x5d\xaa\x96\x74\xa0\x34\x35\x9c\x58\x9f\x9a\xb2\x63\xe6\xb3\xc1\x5c\x58\x42\xdc\xe6\x4e\xca\x5d\x85\xb0\x91\x1d\x28\x11\xb1\x32\x17\x30\xbc\x68\x91\xe9\x86\xd9\x4c\x84\x9d\x48\x57\x6d\x5a\x41\xa6\x4c\xd3\xfd\x11\x2e\x51\x27\xe2\xeb\x2e\x47\x12\x8c\x3b\xbd\x82\x8b\xe1\xa2\xc0\x59\x46\x01\x35\x8c\x6f\xad\xee\x8c\x88\x60\x24\x2e\x57\x00\x63\x1d\x32\x3b\xd8\x41\x70\x58\xdc\x65\x0a\xc0\x74\xe7\x4d\x11\x6f\x09\xda\x34\x93\xa7\x95\xb1\x7b\xe6\x85\x6a\x74\xb9\xb1\xdb\x25\x46\xb2\x83\x13\xeb\xab\xc6\x4e\x96\xb3\xd4\x47\x2b\x3d\x1f\x56\xf9\xdd\x00\x3e\x51\x03\x60\x42\xde\x77\x18\xe0\x2c\xcb\x74\x52\x95\x69\xc3\xe6\x4b\xe3\x13\x6f\xa3\x72\x0c\x1c\xb0\xf8\x38\xe8\xde\x89\x38\x3b\xbb\xe9\xab\xa4\x55\xb4\x5a\x32\x3a\x8f\xe2\x80\x82\xce\xca\xe2\x77\x8d\xcf\x75\x98\x23\x5e\x47\x07\x69\x6d\xc2\x2f\x63\xc7\xd0\xe6\xc2\x56\xea\xdb\xec\x4b\x2a\xb8\x72\x41\x96\x03\x7a\x15\x01\x62\x6e\x79\xdf\xe0\x22\x18\xcc\x63\x27\x79\x67\xfb\x15\xb7\xb3\x68\xa2\x0b\x55\x3b\xeb\x02\xe8\xbb\xac\x06\x09\xcb\x97\x4b\x13\x60\x40\xc5\xb6\x0e\xba\x2d\xeb\x25\xb0\x5a\x97\x7a\x3a\x0a\x63\x52\xd4\x5f\x40\xc2\xb5\x97\x6b\xf0\x28\xf3\x5d\xca\x0b\x1a\x7a\x59\x2d\xc2\x16\x0b\x5d\x07\x1c\x23\x8b\x6e\xa6\x77\x17\xdd\xba\x1a\x1b\x2a\x03\xd7\xa6\x95\x58\x66\xb3\x48\x53\x75\xa3\xb3\x15\x76\xcc\x33\x0b\xf3\x3e\x84\x93\xec\xb8\xac\x29\x6c\x36\x1a\x24\x1c\x2d\x51\x03\x4e\xde\x5b\xd1\x39\xeb\xb6\x43\x67\x07\xed\xe6\x2e\xd6\xbf\x89\x93\xb9\x7d\xed\x6a\xad\x1a\xca\x69\xce\xca\x93\x55\xa6\x96\x33\x69\x24\x33\x77\x96\x28\x88\xd6\x65\x95\xb5\x3c\x41\x9f\xc0\x5d\xdf\xce\xd9\xd0\xb5\x9d\xc3\x30\x25\xc0\x88\x75\xc4\xd5\x39\xb4\x8a\x41\xdd\xc0\x55\xc9\xb6\x63\x87\xa8\xa2\x99\xa3\x8c\x6b\x50\xbc\x95\x47\x3b\x5b\x3d\xac\x97\xbc\x01\x7c\xb4\x67\x17\xd7\xc8\xd4\x00\xca\x9a\xdb\xe0\xd6\x8f\xc4\x6c\xa0\xb2\x1d\x70\xc5\x00\x4a\x9b\x36\xbb\xce\xdc\xaa\x94\x16\x24\xc1\x4d\x83\x3e\x26\xe7\x9a\x30\x34\xee\xa0\x54\xc8\x0d\xb1\x88\x57\xe7\x15\xb9\x19\xcc\x00\x2e\x2e\x3d\x01\xf1\x1c\x78\x28\xf9\x31\xfb\xd6\xf5\x6d\x9e\x9e\xb1\x7a\x79\x8d\x8b\x08\xcd\x1a\x21\xd0\xa1\xa3\xb8\x0c\x61\x85\x70\x2f\x92\x80\x43\x4a\xbb\x29\xbd\x77\x0a\x59\x3e\xb3\x50\xa9\xde\x25\xb6\xaa\x13\x6c\x53\x0e\xd3\x4f\x11\x37\xa9\xa9\xe1\xfb\x6e\xc0\xd4\x94\x53\xa4\x08\x1f\xc6\x33\x9f\x60\xd6\xf8\x24\x59\x97\x7e\xe4\xf3\x2e\xae\x3d\xf4\xc0\x30\xe1\xbb\x0d\x42\x62\x7e\xd6\x6d\x1d\xbb\x9d\xb2\x18\x4d\x29\x41\x8b\xbe\x21\xcd\xaf\xb0\x65\xde\x6c\x00\x81\x56\xcc\xef\xda\xb6\x09\x47\xd0\xc4\xa2\x74\x8e\x0a\x3c\x70\x42\x5f\x44\x04\x4b\xf6\x68\xa2\xe4\x61\x3b\xf0\x66\xfd\x15\x75\xaf\x46\xc2\x88\x1b\xb7\xe5\x2e\xfb\xc5\x16\xf2\x5e\x23\x1c\x34\x23\x72\xec\xcb\xc2\x74\x2e\x88\x2e\x30\xa1\x22\x18\x6b\x9d\xc6\xa6\xfc\x64\xd4\x09\x9b\x85\x58\x35\x83\xbb\xfc\x1d\xc8\xa5\xc0\x84\xce\x1e\x61\xe1\xad\xac\xe0\xcf\x4e\x4e\x5b\x13\x38\x1d\xdf\x62\x39\x18\x25\x4d\x6d\x29\x06\xd3\x2d\xf0\x66\xef\xf4\xd1\xac\xff\xc3\xd8\xa9\x1b\x38\x1f\x76\x58\x64\x56\x71\x50\xed\x69\x93\xfd\x08\xe7\xe6\x32\xda\xd3\xea\x31\xfa\x06\x7c\xa5\xa8\x6a\xb9\x0d\x75\x5d\xa9\xf6\xb8\xdc\x6d\x7e\x52\x69\x57\x4a\xf4\x62\x83\x42\x09\xa4\x43\x01\x31\xf4\x1a\xa3\x9e\x95\x1e\x2b\xad\x92\xae\x64\xda\x8a\x68\xb5\x85\x0c\x56\xca\xad\x9b\xd8\x5c\x1a\x95\x74\x85\xfb\x32\x2c\xc3\x91\x6b\xc6\x22\x36\xe9\x1a\x4a\xc1\x91\x26\x37\xe4\x08\x23\x70\x95\x63\x14\x14\x74\xad\x03\xbf\x2b\xa3\x31\xdb\x2f\xcb\xa7\xbf\xc2\xa5\xdd\x7e\xc9\x05\x41\x86\x13\x87\x4a\x8b\x43\xac\xb6\x41\x2a\x08\xc1\x14\xcc\xc9\xc9\x79\xb0\x30\xda\xbb\x5a\x8c\x96\x27\x9c\x7d\xf3\xc7\x85\xe4\x21\xd1\x98\x7d\xdf\x80\xf4\xfc\xe0\xa2\xb5\xeb\x1c\x6b\x8b\x4c\xf8\x24\x07\xbb\x38\x9c\xcb\xec\x77\x0d\x84\x69\x76\x70\x5d\xe3\xb8\xe8\xc5\x2e\xe3\x37\x4f\x2e\xb5\x80\xaf\x67\x3f\x8e\x00\xa7\x86\xcb\x12\x00\x66\x5b\xbd\x48\xb1\x51\x1f\xe4\x7e\x17\xf8\x88\x34\xc0\xb1\xef\x53\x48\x82\x91\x17\x79\x8c\xec\x27\x54\xc9\x5b\x48\xf0\x35\x38\x69\x72\x0a\x6a\x85\xd9\x44\x17\x64\x5b\x89\xdf\xa5\xd0\xd1\x9c\x87\x39\x2e\x04\xcf\x74\xec\x13\xd9\x9c\xb6\x05\xcf\x9d\x91\x52\x4d\x28\xb1\x5f\x21\x66\x8f\x04\xee\xe0\x5c\xf0\xaa\x4e\x14\xfc\x28\xf0\x79\x18\xdf\x7d\x43\xe5\xe3\x36\x2a\xa8\x42\x0c\x05\xa7\x4f\x50\x86\x93\x23\x95\x5d\x51\xec\x85\x8c\x95\x4c\xc9\x66\xde\x22\x5d\xc7\xa9\xc0\x10\x5b\xca\xfc\x2e\xd1\x6e\x00\x98\x08\x0a\x28\x30\x70\xd5\x0e\x17\x69\xbb\x72\x1e\xf5\xb8\xc4\xb0\x56\x50\xe8\xd3\xa5\x59\x15\xd4\x22\x2a\xce\xd6\x63\xbd\xab\xb0\x2f\x78\x08\xcc\x94\x19\x12\x78\xcd\x40\x1e\xdb\x08\xc1\x85\x61\x0e\xb9\xa2\x99\x2c\x36\x72\x91\xc2\x8e\x94\xb7\x69\xd3\x32\x76\xdd\xa5\x7e\x95\xa8\xcd\xea\x75\x28\x9e\x64\x11\x41\x61\x52\x5e\x65\x28\x77\xe0\x0d\x7a\xd5\x2e\xad\x96\x40\x51\x5c\x48\x71\x24\x90\x23\xf4\xb6\x71\xc0\x36\xf8\x51\xf3\x38\xd2\xd8\x04\x75\x94\x17\x51\x76\x03\x3b\xa4\xab\x71\x97\x92\x3d\xb7\x31\x15\x0d\xdc\x9e\x24\x67\xdf\x62\xb9\x4d\xef\x70\x19\x9b\x8f\x1d\xa6\x8b\xb1\xad\x95\xcd\xc6\xb2\x83\x29\x92\x84\xb3\x90\x7c\x1a\xa1\xba\x98\xbe\x4d\x7a\xce\xc3\xf3\x64\x66\x9d\x77\xfd\x4e\x86\x3a\x47\x3e\x1d\xdf\xc7\x11\x06\x03\xd6\x4d\x69\xaa\xe1\x4d\x31\x9e\xf4\x68\xde\xb7\xd2\x7a\xdd\x7d\x18\xa0\x10\x74\xf6\xe0\xee\x52\x5e\xe8\xd3\x94\x5e\x0f\x0b\x15\x19\xd3\x76\xc8\x35\x83\x8d\xd1\x9a\x1d\x6b\xa9\x73\x98\x7a\x71\x7e\xf6\x03\x03\x2e\x8b\xa0\xe4\x41\xff\xfd\x37\x82\xcf\xc3\x26\x68\x37\x80\x0f\x05\xda\x57\xaf\xb0\x2d\x6d\x8b\x05\x8a\x5a\x0f\xc1\xfa\x05\x88\xf1\x8c\x8c\xd0\xcf\x90\xe7\x31\x62\xf6\xc2\x58\xc1\x39\xe3\xf9\xae\x3c\x12\x33\xba\xf8\xa1\xe8\xc6\x8e\x28\x04\xd5\xcd\x42\xc1\x8b\x4b\x7b\x26\x10\x9f\xd6\x66\x80\xaa\xa4\x8a\x31\xb2\x83\x1a\x65\x50\xe6\x2e\x55\x23\x39\x26\x5a\x61\xb6\x22\xf6\x32\x79\x5e\x00\x1e\x6e\xcb\x4a\xd3\xd0\xf8\x79\xc5\xe2\x28\x20\xbc\xc8\xb0\x8b\x36\x60\x0a\xd7\x41\xef\x9a\x76\xed\xf9\x08\x3b\xc6\xb6\x63\x77\x4d\x51\x20\x1a\xf0\x38\xcf\xa9\x8b\xc7\xb4\x25\x90\x4b\x30\xcb\xab\x55\x96\x69\x6d\xb6\x6b\x1a\x70\x97\x14\x0e\xce\xd5\x40\xe4\x8b\xea\x6b\x5e\xbc\xb0\x08\x9a\x9a\x08\x8f\x36\xd9\x56\x35\x8f\xe8\x2c\x17\xd0\x39\x2e\x86\x81\x76\xee\x84\xe6\xa6\x5d\x28\x3a\x2c\x17\x80\x53\x8e\xae\x2b\x51\x98\x6c\xa5\x41\x15\x04\x89\xf2\x85\xc2\x90\x76\xe0\xfa\xbe\x61\x01\xb6\x0a\xb7\xcd\x4e\x65\xf7\xbb\x6a\x75\x68\xb1\x2a\x60\x80\x7d\xf3\xfa\x42\xc3\xbb\xcb\x4c\x9a\xe5\x95\x51\xa5\x5d\x03\xe1\x36\x01\x76\xea\x8d\x3b\xe4\x19\x64\xb9\xd2\x6d\xdb\x36\x30\xab\x68\x1a\x06\x3a\xe6\x01\x93\x25\x9c\x71\x98\xc3\x16\x28\x16\x09\xe2\x68\x91\x21\xc4\x71\x39\x88\x2b\xe5\xc4\xfb\x4a\x2c\x3d\x0a\x7c\x1e\x36\x93\xbf\xa1\xed\xe2\x62\x75\xed\xf1\x59\x37\xbb\xf9\xb3\x9f\x1c\x59\x1e\x29\xe1\x43\x9f\xd7\x7e\x16\x1b\xc4\x99\xdc\xce\x15\x20\x02\xf7\x3d\x1c\x6a\xdd\x25\xa2\xc1\x71\x23\x0b\xee\x8b\x1d\x05\xf4\x81\x08\x3a\x10\x05\xdc\x24\xba\x96\xa6\x51\xd9\xbc\x1d\xae\x37\x5d\x73\xd5\x7c\x2a\xa4\x1b\xb8\xcb\x3b\x29\x07\x0b\x66\x1c\x21\xb5\x8d\x2b\xa9\xa3\xb5\x52\x1a\xe2\x4b\x5d\xbe\xd0\x8a\x11\xc4\x9b\x32\x47\x50\x67\xc9\x81\xee\xa3\x48\x73\x17\x09\xbf\x11\xa3\xd4\x75\x72\xc3\xa2\x27\xd4\xd2\x50\xe7\x01\xcd\xd5\xd7\xc2\x14\xda\xb0\x59\x79\xa0\xd0\x09\x96\xa6\x61\x3f\xc4\x01\xf5\x5d\x73\xb7\xcd\x42\xc6\xc9\x21\xfa\xb8\x70\xb2\xd0\x4c\xe6\xa9\xa6\xe6\x34\xb6\xa6\x8a\x76\x00\x0a\x06\x74\xe0\x3d\x5a\x26\x2b\x93\xb9\xdc\x96\xe5\x4f\x9f\xd1\x4e\x58\x2a\xd7\xc5\x64\xbe\x62\xce\xe3\xd8\x11\x77\x54\x95\x93\x67\xc8\xa5\x10\x3a\x04\xb5\x71\x21\x0e\x11\xb7\x8a\x6f\x5b\x8c\x40\x84\xd5\xc2\x59\x11\x72\x5f\x8d\xed\x3a\x5e\x76\x43\x35\x68\xe4\x91\xa1\x98\x89\x20\x67\x16\xe1\xe8\xa9\x71\x2a\x10\x6a\xee\x36\x49\xc6\x81\x5a\x4d\xc1\x95\xd3\x54\xd5\x19\xc0\x96\xb2\x35\xaf\xc8\x98\x54\xbe\xbf\xe1\xf7\x81\x7b\x60\x68\xdb\xb6\xb2\x80\xd4\x98\xb3\x07\x92\xd4\x1b\xc5\x56\x0f\xbb\x8d\xf8\x67\xc4\x56\xef\xf1\x75\xf8\xed\x7e\xea\xd3\x5f\xfa\xd9\x7f\xf3\x83\x9f\xf3\xd3\x7f\xef\x4d\x3f\xe2\xf3\x3e\x63\x7b\xe4\xbf\xfd\xbb\x77\x06\xdf\xf9\x8a\x77\xfc\xf6\xdf\x7d\xec\xcb\x5e\xf7\x7f\x3e\x10\xfa\xfb\xdf\xf9\xbc\xdf\x90\xaf\xfd\xe5\x17\x8f\xd7\xfd\xf8\x8f\x7e\xfc\xbb\x3d\xf7\xc3\x3f\xeb\x13\xc8\x17\x9f\x9f\xfd\xc1\x6d\xfd\xcc\x2b\xbe\xe9\x55\xfb\xf8\xd6\x07\xcf\x3e\x3e\xee\xc7\x9e\xf5\xe2\x1f\x7b\xfd\xcf\xbd\xe3\xf1\x7d\x3f\xf9\x9e\xdf\x26\x7f\xf9\x7f\xfd\xc2\x2f\xf9\xd0\xe7\x7d\xc3\x17\xbe\xcd\x73\xff\xf0\xfc\xe8\xb7\xfb\x8b\xdf\xf5\x8b\x0f\x84\xbe\xef\xff\xfc\x26\xef\xff\x31\x9f\xfa\xed\xcf\x7e\xf9\x3f\xfa\xf8\xaf\xff\x91\xf9\xfb\xff\xe1\x5d\x9f\xf7\xeb\x4f\xf8\xb5\xb7\xf8\x98\xdf\xfb\x65\xff\x57\xde\xf7\x91\x67\xbd\xe9\x7b\x3f\x10\xfa\x8f\x3e\xf6\xaf\x7d\xe9\x47\x1d\x2f\xff\xb2\xbf\xf1\xbc\xd7\xff\xc4\xef\x7d\xd5\x4f\xe8\x5f\xf9\x81\x7f\xf3\x4f\xe8\x63\x3e\xe1\x6d\x7e\xfe\x59\xef\xf0\xd3\x6f\x99\x1f\xf3\xc1\x0f\x84\xbe\xf3\x3f\xfc\xda\xb7\xfd\xd9\x5f\xf9\xe0\xdf\xfc\xcd\xf7\xd8\x7f\xe5\x8b\xcc\xdf\x7b\xce\x9b\xff\xe0\x37\x82\x17\x7f\xe5\x7f\x38\xbe\xf7\xfb\x7e\xe1\xe7\xde\xf5\x43\x1e\xf7\x1d\x0f\x84\x7e\x57\x7d\xdc\x87\x3f\xb9\xbf\xe4\x2d\x7f\xfb\x3f\xbf\xf8\xa3\xcf\xcf\xf9\xa4\x17\x7c\xc1\x87\x6d\x7f\xeb\x3b\xfe\xc1\x6f\xbf\xe5\xbf\xfc\x4f\x8f\xff\x92\xe7\x7c\xf0\x7f\x7d\xeb\x07\x42\xff\xd5\x0b\x3e\xe1\x25\x3f\xf1\x77\x71\xfd\xca\x7f\xf2\x0d\xcf\xef\x6f\xff\x43\x1f\xf4\xfc\xf7\xfa\x49\xf8\x91\x3f\x6f\xdf\xe1\x1d\xff\xf6\x07\x7c\xe5\xff\xf1\x13\xdf\xfd\x8a\x3f\x15\x5b\x3d\xec\x55\xef\xf0\x77\xe0\x67\x8b\x58\x33\xa0\xc9\x9e\x19\x63\x24\xb9\x1c\x33\xd8\xae\x30\x37\xc3\x96\xad\x73\xd0\xda\xe8\x01\x43\xdd\xb2\x4a\x20\x80\xdb\xa8\x1d\x75\xe5\x8e\x8e\x03\xaa\x18\x40\x4c\x49\x16\x72\xcc\x76\xec\x36\xd0\x8e\xe9\x4a\xa9\x2d\x3b\x8d\xdf\x11\x55\x40\x5e\xa2\xd4\xfd\x2e\x5e\x99\x05\x78\x8a\xbc\x76\x2d\x9d\xd8\x58\x45\x53\x4e\x81\xf6\xbe\x11\x3a\x2a\x3b\xf7\x26\x50\xd5\xe8\xb2\x09\xcf\x6b\xc6\xb0\x48\xe7\xb7\x9d\x87\xb3\xaa\x1a\xa9\x64\x8f\x21\x4c\x22\x94\xc0\x3c\xb0\x3e\x05\xbb\xa0\x93\x0c\x23\xef\x72\xa5\xe1\x68\x6d\x8f\x52\x8b\x08\x0f\x7d\xdb\x4c\xa6\x92\xf3\xb2\xec\x58\x22\xd3\xac\xab\x52\xe2\x02\xd7\x42\x99\x8d\x93\x29\x23\x8a\x3f\xe6\xc6\x00\xcd\xe3\x72\xf1\x38\x57\x90\xf7\x19\xb9\x4f\xc8\xb6\x12\x2f\x41\xdc\x61\xea\x76\x05\xcc\x90\x0c\x0e\x5f\x44\x92\xd1\xe8\x02\x9b\x24\x45\x9b\xe0\xc1\x06\xea\x6e\xdc\xb1\xee\xd2\x80\x0c\xbc\x15\x4d\x77\x9b\xcc\x8a\x17\x9b\x02\x59\xe8\xac\xf4\xea\x88\x20\x8a\x41\xa4\xb5\x3d\x8b\x0a\x79\x1b\x0e\xb5\xc2\xb6\x7e\x17\x55\xcc\x90\x8b\xae\x21\x33\x8f\x30\x36\xc2\x65\xdf\x1d\x6a\x57\x0b\x65\xdb\x59\x3d\xd5\x65\x02\xb5\x21\xae\xcc\x19\x5f\xc8\xc0\x3e\xe1\x7a\xb4\xd8\xea\x61\x38\x7d\x03\xf8\x60\xe2\xe0\x96\xcf\x9c\xf6\x69\x68\xce\x95\xcf\x71\xec\x89\x90\xb4\x1b\x1e\x39\xa7\x4d\xce\x11\x48\xef\x26\xcc\x89\x54\x23\xe1\xae\x64\xce\x70\x25\x0d\x5b\x92\xd5\x3a\x9c\x2e\x51\x07\x30\x77\xb9\x09\x6e\xeb\xce\x08\x5c\xbd\xcb\xb2\xd6\x51\xc3\xb0\x11\x36\x88\xcb\x84\x77\x4d\x8f\xd9\x81\x6d\x5e\x56\xa0\xa3\xec\x2a\xd8\xa4\xe7\x66\xcd\xde\xfa\x71\x94\x8e\xd8\x72\xc2\x53\xba\x01\x14\x06\x48\x6e\xf8\xdc\xb7\x7a\x53\x4f\xc3\x68\x10\x8d\x60\x57\x37\x3a\x76\xd1\xf9\xb6\xef\x19\x11\xe1\x8e\x9d\x35\x36\x40\x76\xa5\x60\x55\x18\x04\x06\x18\xac\xd0\x04\x88\xde\x65\xa4\x62\x8c\x14\x6a\x22\x95\x37\x61\x7a\xd9\x59\x84\x09\x4f\x65\xec\x51\xbb\x04\x1b\xbe\xea\xb1\x59\x96\x32\x7f\xc3\xef\x24\xda\x9c\xeb\x6d\xba\xf6\x68\xb6\xbd\x6f\x88\x89\x0a\x66\xe3\xf1\x12\xa6\x4e\x4d\x76\x6c\xb7\xcc\xe7\x2c\x71\x0e\x38\xe0\xdc\xcf\x7c\x5e\xbb\xbe\xa6\x5c\x77\x0d\x84\x29\x2e\x7c\x33\x8a\x36\x25\xd1\x45\xd4\xc1\xed\x39\xf0\x76\xee\x74\x27\xd9\xec\xc3\xc9\x43\x59\x5a\x18\x44\x11\x09\x24\x2e\x99\xb7\x75\x97\x11\x24\x15\x56\xa6\xda\x85\xd8\x41\x27\x2a\x61\xb2\xbb\x8d\x9f\x9b\x90\xdb\x45\xdb\x89\x0f\x5e\x19\x56\x81\x9d\xd7\x9e\x34\x9c\x32\x45\xf7\x68\xf0\x79\x58\xe5\x77\x03\xf8\xcc\x36\xf9\xa0\x78\xd3\xa2\x34\x39\xca\x3a\x2f\x82\x72\xb2\xac\xb5\x56\x3a\x77\x41\xf1\x1d\x2f\xb3\xc4\x56\xa7\x0d\x47\x57\xf4\x36\xd6\xff\xca\x14\xfa\x3d\x96\x62\x41\x54\xf9\xb8\x66\x32\xc2\x40\xa6\x72\x3d\x11\x4c\x57\x0c\x25\xba\x04\x33\xcc\x47\x49\x00\xb5\x0b\xec\x77\x7d\x95\xe1\x12\x1b\x9e\x27\xc4\x15\xbb\xe6\x38\x5f\xfb\xd4\xc5\xa7\x68\x2d\xdd\x61\x8b\x05\x2b\xcc\xc0\xd9\x3a\x3b\xe6\x00\xb8\x20\x7d\xdb\xd9\x62\xac\x26\x41\x45\x2d\x4c\x26\xad\xfe\xa8\x99\xc1\x89\x2b\xc5\x76\x75\x8a\xe1\x39\x46\x80\xa6\x9d\x16\x28\xb9\x66\x1a\x35\x1d\xb7\xf9\x8e\x01\x25\x45\xeb\x1d\x2c\x13\x03\x13\xd8\x1e\xf1\x4f\xfc\x9b\x65\x5e\x45\x50\xc5\xd1\x15\x4f\x5b\xfa\x8e\xb6\x44\x18\x99\x30\xda\x79\xd7\x27\x59\x47\xf2\xce\x37\x47\x3c\x93\xa5\xe7\xcb\x5d\x44\x18\x94\xe5\x7e\xe5\x5e\x78\xc6\x5e\x60\xda\x00\x9e\x60\xee\xa4\x76\x62\xe6\x5d\xf2\x40\x76\xd6\xa6\x63\x75\xce\xb9\x4d\xe7\xa0\xaf\xb5\xd8\x95\xec\x31\xb5\x3b\x5b\xb5\x66\x64\x50\x56\x9c\x29\x84\xbe\x8f\x76\x98\x5d\xdc\x76\xd7\x55\x01\x44\x94\x36\x94\x8d\xa5\x16\x70\xdd\x72\x69\xf7\x3a\x4e\x6e\x3c\x6e\x06\x6b\x74\x49\x01\xc1\x3e\xa6\x89\xac\x63\xc3\xc1\x03\x8e\x24\x6f\x04\x9f\x87\xf5\x92\x37\x80\x4f\x6a\x1e\x2d\xde\xf6\xad\x83\xc3\x58\x96\xb9\xce\x5d\xaf\x6a\xcf\xb0\x99\x54\x19\xc8\xaa\xcc\x6b\x13\x33\x9e\x3b\xb2\x69\x8b\x96\xde\x95\xe5\x17\x58\x5b\xed\x55\xd1\x06\x45\x5a\xc4\x26\x77\x5d\x9a\xdb\x70\xa6\xb8\xb3\xd8\xe2\xa4\x16\x09\x27\xce\x1d\xaf\xa6\x2d\x02\xe8\x3e\xd3\x10\x20\x21\xf5\x01\x7b\xa9\x80\xef\x2e\x08\x3d\x31\x3b\x0c\x51\xd3\x5f\xce\x44\x46\xb1\xde\x97\xd5\x84\x9e\x27\x13\x83\x86\x5e\x6f\x93\x99\x6f\x8c\x34\x9e\x9c\x45\x59\xfa\x4a\x62\x16\x45\x98\x90\x7c\x71\x12\x6f\xf9\x14\xd2\xdb\x8e\xf7\xb4\x61\xe2\x79\xa1\x18\xb4\xf3\xb6\xdb\x0d\x09\xfb\x36\x14\x9b\xa7\x29\x34\x1c\xb8\x67\xea\x10\xb8\xb6\x61\x82\x29\x84\x90\x49\x8e\xad\x00\x3d\xcc\xc6\xb4\x3f\x06\xf4\x77\x81\x0f\x9b\xf6\xe8\x68\x20\x1b\x65\xf6\x0e\x77\xa0\x20\x0d\x49\x18\xe8\x30\xec\x65\x05\xde\x98\x87\xe3\x20\x04\xc5\x13\x12\x1b\x52\x85\x37\xb5\xe7\xcc\xaa\x72\x1a\x0a\xfd\xd1\xd3\x3e\x5c\x42\x8a\x18\xd8\x4f\x36\xbd\xc2\xbb\x95\x1e\x57\x16\x95\x9c\xb8\x4b\x99\x2c\x18\x3e\x9b\x79\xd7\xd1\x25\x5a\x46\xa9\x4c\xb7\xdc\x29\x91\x19\xf6\xed\x3a\x8c\x53\xa3\x55\xcf\x7b\xde\xba\xca\x48\x0b\xe1\x67\xa3\x64\x4d\xc4\x83\xe1\x34\x3c\x0a\x7c\x1e\xc6\x4e\xdd\x21\x33\x17\xc4\x1b\x65\xce\x76\xc1\x6d\xcb\xb8\xe4\x8c\x18\x34\x42\x35\xb4\x5f\x48\x06\x90\xc6\x69\xf1\xd5\xb4\xe0\x9a\x77\x3b\xb8\xbb\x6d\x75\xf6\xd2\xcb\x10\xe1\x25\x13\x71\x87\xd6\xa1\xca\x58\x03\xda\x2a\x09\xa8\xe0\x52\x93\x2d\x22\x64\x56\x93\x5a\x5d\x59\xc7\xa2\xb8\xbd\xcb\xbf\xb2\xbe\xa1\xe9\x8b\x01\x3b\xed\x51\xec\xf1\xe0\x85\x13\x2b\xf5\x9f\x94\x1b\x23\x5d\xb1\x3a\x7b\xc8\x0b\xb4\xcd\xc0\xb9\x5b\x98\x09\xb8\x6b\xad\x6d\xd0\x8b\xff\x89\xef\x4f\xd4\x89\x9f\xca\x2c\xaa\x58\x24\x69\x6b\xc7\x09\x33\x90\xa7\xe1\xb9\xac\x92\xec\xb0\x5b\xd8\x97\x26\x78\xdd\x95\x1a\xe0\x20\xdd\x1b\x7f\x52\x9c\xbd\x48\x36\x73\xb3\x84\x36\xf0\x0a\x27\xdc\x19\x19\x6a\x68\xab\x27\x1a\xd7\x96\x49\x66\x40\x91\x69\xef\xaa\x06\x53\x49\x49\x35\x9b\x7a\xe3\xd2\x9d\xe7\x5e\x96\x9f\x40\x68\x32\x43\x05\x5e\x99\xcb\x6d\x0b\xd9\x6d\xab\x9b\x56\xbb\xf5\x2c\xc1\x75\xdb\x1d\x79\x71\x9d\xb6\x6b\x41\x93\x31\xa9\x46\x5e\x08\x87\x13\x24\x8d\x27\x85\x1a\x34\x9d\x53\xc9\x27\xd2\x93\x59\xe7\xb3\x20\x96\xdd\x76\x7b\x0e\x8c\xcc\xd0\xd0\x12\x0f\xc4\x74\x8b\x79\x33\x45\x2e\xef\x64\x5d\x7a\x03\xcb\x51\x5b\xc8\x31\xb1\xea\x02\x4e\x26\xe6\x55\x31\x7d\xb4\xb3\xd5\xc3\xf8\xee\x1b\xc0\xa7\xa9\x78\x02\x9e\x37\x27\xad\xb2\x84\x01\xc5\xdd\x00\xe9\x12\x7a\x1f\x61\x2f\x97\x49\x18\x4e\xd4\x73\xa1\xd1\xa9\x01\x80\xc7\xb7\xb9\x38\x69\xee\xcc\x92\x8d\xe2\x08\x4c\xaf\xbe\x01\x58\x38\x36\x81\x6d\xdd\xa0\x46\xf7\x2c\xcb\x0e\x3c\x13\xfd\x4a\xa6\x38\xc4\x2f\x38\xef\xda\x5d\xf0\x81\xab\x3e\x4f\x2d\xe3\x24\x28\xc2\xb2\xa5\x29\xc1\x1c\x59\x17\x62\x17\xc4\xed\xca\xe1\x6a\x8c\xed\x68\xd3\xa2\xb9\x6d\x1a\x76\x97\xcf\x29\xd7\x5d\x24\x3d\x66\x5a\xed\x22\x3b\xee\xa2\xf2\x4e\x14\xf2\xfd\xcc\xd3\x6a\x7d\x6d\x74\x15\xbe\x71\x70\x76\xa5\x07\xce\x17\x64\x37\xa9\x51\x28\x0b\x7d\x23\x22\x19\x29\xd2\xce\x89\x3f\x02\xec\x73\xf4\x20\x53\x5e\x9a\x78\x71\xfc\x89\x36\x44\x0f\xac\xa9\x36\x69\xab\xa3\xb3\xbb\x6a\x30\x5c\x81\xf2\x22\xcb\x83\x25\x27\x23\x13\xaa\x15\xca\xce\x78\xb5\x23\xe0\xc4\x93\x90\x09\xad\xda\x4e\xd6\xb2\x0f\x91\xa0\xf3\x02\x37\x9d\x52\xa0\xca\x9c\x2b\xf5\xb9\x47\x13\x63\x31\x40\x58\xc9\x6c\xa8\x6d\xe7\x12\x2b\x57\x27\x1e\x67\x09\xc0\x25\x12\xfd\x50\xcc\xed\xa0\xb1\xbb\x04\x68\x4a\x77\xb1\x9f\x87\x66\xb0\x6f\xea\xb2\x07\x5a\xfa\xa8\x6b\x89\x08\xd0\xe9\x52\x11\x5b\xcc\x3b\x40\x50\xa7\xfd\xf2\x3d\x52\xe6\x8d\x7f\x14\xf8\x3c\x6c\x82\x76\x03\xf8\xa0\x58\xfb\x0e\x0c\x64\x5b\x07\x32\x81\x88\x36\x69\xe6\x22\x07\x98\x63\x28\xda\x18\x14\xd5\x5b\xe0\xce\x06\xcb\x81\xdd\x64\xe8\x36\xce\x47\xb6\xcc\x7a\xb3\x54\x64\x8c\x82\x6b\x87\x3a\x6c\xc3\x28\x58\xbd\xc3\x7d\x47\x5e\x58\xa1\x51\x7d\xc3\x3f\x47\xa8\x86\xc4\x0e\x73\x57\x46\xe3\xc5\x10\x4b\x16\x38\x0f\x5b\xfc\xc5\x7d\x58\xdb\x3c\x73\xc0\x74\x29\xc2\x36\x73\x05\x9c\xd1\xe1\xc6\xba\x6c\x3f\xbd\xc7\x79\x9c\x77\xcd\xdd\x16\xc3\x8a\x66\x7d\xd2\x99\x0a\x3e\x49\x49\xc8\xa9\xa1\xb7\xa6\xb2\xd6\xf8\x04\xbb\x6e\x9c\x03\xa3\x15\x72\x36\xed\x58\x0f\x31\xef\xb2\x5b\xb0\xf3\x1c\x79\xcc\xc9\xbb\xf6\x9d\x30\x7e\x6e\xba\x57\xaf\xea\x90\x3c\x4a\x0b\x28\xad\xf2\xf4\x5d\x83\xd3\x9b\x5a\xce\x7c\x2a\x7d\xd7\xf5\x14\x93\xc5\x69\xf9\xc5\x58\xde\x8f\xa3\x05\x7a\xad\x70\x74\xe9\x44\x08\x9e\x22\xc0\x34\xde\xd8\xa4\x3d\x58\x4d\xce\x20\x97\x34\x05\xdc\x25\x0f\x4c\x34\x8d\x85\x7a\x62\x1a\x01\xf1\x86\xe4\x18\x93\x15\xcb\x26\x48\x3b\xbb\x84\x40\x1a\xb0\x43\xb4\x33\xb9\x63\x33\x26\x1c\x69\xf1\xbb\xf6\xd1\x49\xcb\x61\x42\x3e\x9d\x94\xa0\x9c\x4c\x45\xe2\x02\x80\x5d\x1e\x45\xe0\xb8\x09\x8b\xe6\x79\x0c\xb9\x0f\x76\x19\x62\x76\x95\x8a\x06\x8f\x02\x9f\x87\xcd\xe4\x6f\xe0\x7c\x06\x54\x78\xce\x1a\x26\x3f\x36\x35\x53\xa0\x7d\x33\xa4\xcd\xc1\x26\xbd\xe0\x61\x85\x1d\x9a\x5c\xcc\x22\x43\x4b\xb8\xd0\x79\xb0\x79\x57\xb3\x23\x8e\x1e\xfc\x6e\x44\x66\x17\x6a\x47\xdc\x2c\xce\x69\xa3\x66\x3f\x95\xe6\x76\x19\xd0\x6b\x09\x00\x8a\x23\x1e\xeb\x12\x94\x35\x7d\xd7\x39\x2b\x9a\x0f\xc1\xf6\x79\x18\x2a\x3d\x98\x91\xec\xf8\xe0\x5c\x93\x64\xc4\xec\x48\x0c\x59\x61\x44\x5e\xa3\x88\xa8\x6c\x1e\x5c\x0a\x95\xdb\x16\xa7\x2c\x98\x0e\x72\xc8\x7d\x96\x23\x87\x82\x0f\x8d\x0a\x3b\xb4\xd3\x25\xa7\x42\x67\xaa\xb4\xf0\xe9\x50\xda\x8e\xdd\x10\xc1\xe8\x71\x9b\xb8\x5b\x6a\x8a\xcc\xd5\x1d\x4a\x07\xd4\x7b\x5c\x2a\x1f\x68\xba\x74\x6a\x8e\x34\x3a\xb2\xe1\x83\x61\x41\x84\x94\x9e\xd8\xc4\xce\x45\xf2\x5d\x3a\xdc\x23\x1e\xe9\x5a\x1d\x32\xdf\xb4\x95\x66\xb8\xab\x6a\xb0\x60\xbe\x66\x58\x74\x9b\x5c\xb9\x12\x71\xcb\x8c\xf3\x5d\x7a\x4a\x82\xd9\x6f\xf2\x1d\xa3\xc0\x61\x16\xb7\x60\xd8\x89\xaa\x5b\x2a\x45\xb4\x88\xeb\x7e\x67\xac\x8d\x0e\xae\xde\x14\xb2\x81\x47\x86\x6a\x3d\xb9\xbf\x7c\x65\xb7\x9d\xb3\x92\x7c\x09\x5d\x6b\xdb\x96\x2e\x52\x6a\x4b\xaf\x70\x50\x70\x1c\x9b\x5b\x5d\xee\x09\x35\xc9\xd1\x89\x2e\x40\x83\xae\xb8\x40\xf6\x80\xeb\xcc\x1b\xc5\x56\x8f\xfc\xa7\x67\xff\xd3\x17\xbe\xfb\xcb\x5f\xf0\x0d\x2f\x7a\xe4\xd5\x8f\x7d\xe6\x93\xfe\xf5\x63\xdf\xfe\x03\x3e\xf9\x7b\x9f\xf3\xa1\x6f\xfb\x89\x7f\xf3\x47\x3f\xf0\x0f\x9e\xf2\x57\x3f\xfe\xcf\x88\xad\x5e\xf6\x26\x1f\xf9\xcf\xbf\xe9\x73\x3e\xef\x29\xaf\xf9\x8a\x8f\x78\xee\x7b\x94\xff\xf8\xfd\xe7\xab\xdf\xf5\x89\xcf\xf8\xda\xaf\x7b\xcc\x1f\xbe\xef\x6f\xfd\xc1\x9b\xff\x7f\xbe\xe5\x45\x0f\x84\xfe\xb9\x37\x7b\xc2\x2f\x7f\xe4\xd3\xca\xff\xf5\x92\x57\x7f\x09\xf9\xf6\xf7\xfe\x3f\xdf\x8a\xbf\xe7\x7f\xf9\xc4\xa7\x7f\xa1\x7b\x87\xf9\xbf\xa4\xb7\xfd\x94\x37\xf9\xe6\x0f\x78\x20\xf4\xc9\xbf\xff\x1b\x6f\xfd\xde\xdf\xfe\x63\xdf\xfc\x39\xbf\xf2\xa1\x3f\xfa\x8c\x6c\x3e\xf4\xb5\x1f\xfd\x45\x2f\xfb\xd8\x0f\xfb\xc4\xd7\xbe\xfa\x6b\x9f\xf5\x11\x3f\xfd\x5d\x1f\xb8\x3d\x10\xfa\xa9\x7f\xfb\x6d\xe8\x23\xaf\xc1\x7f\xf4\xbe\x9f\xd1\xaf\x77\x7b\xeb\x2f\x7b\xc2\x77\x7f\xdc\xff\xf1\xe9\xbf\xf3\x3d\x3f\xf5\x41\xaf\x7b\xc9\xe7\x7e\xf2\xab\xff\x46\x7c\xd2\x03\xa1\xff\xc3\x33\xd4\x57\xff\xed\xdf\x7b\xe6\xe7\x3e\xeb\xff\x7e\x1d\xfb\xec\xaf\x7e\xf2\x73\x3f\xe8\x8f\xfe\xfe\xfa\xc4\x0f\xfa\xf5\xf7\x78\x89\xfa\x92\x97\xbe\x1d\xf9\xa2\x07\x3d\xa8\xde\xef\xfd\x9e\x11\x9f\xff\xd8\x2f\xeb\xcf\x7d\xd5\xeb\xbe\xe5\x05\x5f\xfd\xf3\x2f\xf9\xaa\xc7\x7c\xf5\xf7\xff\xab\x5f\x7a\xb3\x17\x3e\xf6\x7a\xcd\x93\x5e\xfb\x93\x9f\xf5\xe0\x07\x78\xef\x9f\x7a\xe2\xf7\xfc\xd3\x67\xbc\xe2\xe7\xde\xe6\x7d\xde\xf3\x69\x6c\xfc\xa3\xd7\xbd\xec\x47\xbf\x32\xfd\xd8\x67\xfc\xd2\x7f\xfa\xd6\x8f\x7a\x36\x43\x3f\xf6\xda\xb7\x7f\xf0\x7f\x7d\xe6\x53\xfe\xda\xd3\xbf\xf2\xaf\x7f\xe3\xdf\xfc\xcf\x1f\xfb\x9c\x37\x79\xf7\x7f\xfb\xaa\x17\xbe\xf4\x15\xef\xfc\xa4\x57\xc4\x6f\xfc\xe5\x3f\x7e\xea\xbb\x7c\xde\xbb\xfc\xd2\xcb\xff\x54\x6c\xf5\xb0\x57\xbd\x21\x03\xd0\x2b\x60\x44\xdf\xd0\x5d\xc2\x46\xb8\x3a\xc4\xc8\xd9\xc2\xce\xd9\x9e\x97\x38\x0e\x96\x01\x54\xed\xa8\x46\xee\xa3\x53\xbb\xef\x27\xb8\x8b\x6b\x27\x21\x77\xa1\xa1\xef\x29\x8f\x48\xc6\x59\x1b\xe7\x17\x70\xa3\x84\xb3\x75\x6c\x9a\x4d\x73\x2a\x68\x0d\x6f\xb3\x87\x2a\xf5\xc1\xef\xea\x69\x5a\xf1\x96\x5c\x1b\xb2\x3a\xce\x02\x4d\xbe\x80\x52\x82\x5d\xe7\x70\x78\x88\xac\xfd\x2a\xfd\x8a\x36\xda\x72\xb0\xb9\x0d\x37\xba\xbb\x4b\xd7\x3e\x45\x4a\xa7\x72\xc6\x61\xd0\x8a\x0f\x78\x27\x39\x93\x12\x28\x8b\x47\x0b\x98\x5c\x8b\xec\xc3\x6d\xfd\xf0\x5b\x32\xa7\x3e\x7d\xe7\xb7\x95\x5a\x0b\xa7\x36\x98\xa9\x5d\xec\xba\x5e\x56\x50\x11\x07\xc6\xee\xdc\x91\xd8\x17\xf1\x83\xa8\x98\xb1\x8a\x7b\x75\x47\x2f\xc5\xe2\xbb\xda\x14\x96\xaa\xa2\xc3\x3b\xb7\xfb\x76\xa4\xda\x14\x04\x67\x34\x06\x22\xb7\xcb\x4c\x6a\x3a\x4a\xe6\x28\x2b\x68\x7b\xe8\x92\x9d\xb3\xfb\x79\x17\xeb\xbf\x69\x5c\x43\xe5\xe6\x08\xfc\x9a\xb5\x00\x12\x05\x5a\x26\x76\xae\xe2\xa2\x12\x55\x0a\x8a\xd9\x4f\x61\x1d\x88\x3c\x6f\x8b\x93\xbb\x4e\x1f\xb3\x9d\xc2\xd0\x38\x09\x35\xd2\x4d\x95\x2b\x9c\xa5\xe0\x23\x12\xab\xa3\xb4\x3d\x9b\xac\x0f\xa8\x4b\xe4\x95\x07\x0c\xa0\x3c\xd1\x06\x1e\x4d\xbc\x3d\x0c\xa7\xef\x38\xa6\x83\x62\x5d\x12\xce\xc3\x41\xc0\x27\x52\xc5\xb7\xc6\x99\x41\x95\x36\x35\x18\xbf\xb2\xde\xd3\xea\x0e\x96\x6b\x43\xfb\x1c\xa9\xdf\x76\xa7\x80\xa8\x19\x27\x44\xa4\x47\x2c\x57\x08\x60\x9e\x3a\x86\x8e\x0b\xf0\x74\x93\xc0\xf0\xcc\xa7\x08\xd6\x4e\x05\x67\xd8\xe4\x8e\x93\xb9\x4b\x37\x87\x21\x54\xa1\x3a\xa4\x04\x6b\x53\x98\xb1\x0d\xd7\x03\xdd\x4f\x23\x4e\xa4\x63\x24\x59\xea\xa5\x0c\x3d\xad\x85\xb9\xf3\xf3\xb2\x30\xdd\xf4\x49\x02\x4c\x96\xec\x62\xb8\x45\x23\x63\x65\xa3\xc0\x0c\xb5\xb2\x9c\x29\xf7\x0d\x07\x7a\x04\xe8\x18\x07\xdb\x10\x06\xe9\xa6\x08\x38\xef\x52\x93\x47\xb2\x53\x5c\x44\x53\xe6\xb8\x84\x2e\xdc\xcf\x7e\xd5\x0c\x19\x43\x4a\x9e\x7b\x5f\x40\xee\xd7\x5c\x93\xe3\x82\xaa\x6c\x84\x8a\x72\x9b\xa5\x4b\x10\x6b\x5b\x9b\x94\x06\x33\x80\x38\x38\x62\xb3\x8a\x0f\x62\x3a\x00\x00\x77\x02\x6a\x88\xa1\x4e\x8b\x46\x3a\xe5\xce\x09\x02\x77\x51\xc5\xfb\x9c\x81\xa8\x6c\x68\xe8\xbd\x67\x9f\x31\x07\x29\x40\x6f\xab\x5e\x3d\xa5\x1c\x2b\x86\xce\x95\x39\xe1\xc9\xe4\x70\x58\x00\x76\x97\x01\xef\x32\x67\xec\x71\x06\xbc\xa1\x04\xa0\x72\x17\xae\x76\x2a\x8d\xc5\x02\xc6\x1c\x87\xeb\x09\x02\x40\x19\x75\x38\x95\x54\x77\x7a\xe8\x47\x5b\xca\x3f\xac\xf2\xbb\xc3\xd3\xd3\x5a\x28\x2e\x1a\x55\x17\xc7\x54\xcb\x1d\x66\xc7\x71\xc9\x6c\x10\xd5\x45\xac\x96\x4a\x94\x00\x38\x07\x88\x57\x1e\xf1\x96\xe0\x5d\x19\xcd\x60\x5a\x4f\x81\x94\x1d\x95\xf2\xad\x1d\x66\x41\x89\x12\x4e\x47\x73\x7a\xd7\xc8\x76\x6f\x12\x39\x51\x19\xfc\x4a\x0d\x97\x4d\xbb\xbb\xc0\x87\xfa\xd0\xe8\x79\x29\x61\xcf\xb2\x87\x25\x9a\x24\xa1\xec\x1b\xdc\xdc\x96\x5c\x18\xde\x1b\x44\x4f\xba\x13\xed\x5b\xe4\x1d\x5d\xf3\x2e\x4b\x17\x56\x4c\x52\x6a\x43\x59\xb2\x48\xfb\x29\x97\x9e\x69\x3f\x55\xee\xa7\xf1\xbb\xc7\x52\xb6\xc9\xf3\xa0\xa9\x0b\x2d\xb7\xed\x2a\x00\xac\xbb\x9c\x34\x09\xc0\xcd\x24\x00\x5a\x32\xec\x84\xd9\x18\x3f\x3a\x16\xdb\x8e\xaa\xd2\x0d\xc9\xcb\xd8\x53\x52\xb0\x18\xb4\x57\x3e\xf5\x26\xec\xbc\xeb\x4d\x68\x14\x7a\x6b\x9c\xd7\x21\x4e\x62\x89\x23\x27\xcf\x12\x49\x91\xa9\x46\x34\x40\xe4\x73\x2f\x67\xdd\x20\x02\x84\x84\x9d\x47\x4a\x6f\x1a\xf4\xd1\xfd\x72\x0c\xf6\xe8\x3a\x80\x76\x2c\x5b\x76\x9f\x16\x4a\x1d\x46\x84\x86\x88\xd2\x1d\x42\xf5\xc3\xd3\x8a\x72\x73\xbd\x01\x62\xee\x5a\xc5\x67\x38\xe4\xc5\x94\xcf\x63\x40\x3f\x72\x0a\xcd\x52\x4f\xc2\x92\x58\x5f\xfb\x5e\x52\x4a\x07\xd6\x97\x74\xaa\x74\xa6\x36\xa1\x9d\xa7\xf9\x51\xe0\xf3\xb0\x5e\xf2\x96\x03\xca\x8b\x8d\x06\xe6\x95\x7d\x6b\xd1\x92\x0d\xaa\xe6\xab\xc3\xf3\x0c\xe3\xc2\xf3\x24\x41\x1c\x57\xd5\x17\xa3\x57\x35\xf5\xd0\x97\xbd\x8b\x50\xd1\x25\x53\x74\x61\x8a\xc8\x12\xd3\xc9\x64\xb3\x2c\x8b\x1e\x62\x69\x3d\x34\x3a\x36\x8d\x25\xd3\x8c\xa2\xe3\x2a\x34\x72\x56\xac\xbe\x29\xb7\xb2\x98\x2a\x68\x67\x42\x1d\x54\x74\x82\x10\x81\x3d\x3a\x0c\x7b\x40\x5a\x42\x7b\x6c\x89\x38\x78\xa6\xcd\x00\x93\x15\xc8\xab\x5e\xdc\xdd\xb5\x45\x11\x7d\x50\x55\x05\x0d\x1b\xc7\x94\x1b\xa6\x42\x6f\x51\x66\x55\x30\x05\xe4\xec\xc9\xf9\xb9\x95\x1e\xa3\x87\x24\x9c\x44\x6f\xe7\x5d\x2e\x4e\x74\x9f\xd0\x60\xc2\xd2\x1e\x24\xe8\xc0\x01\x97\x9b\xd8\xcd\xaa\x07\x3e\x18\xd1\x6a\x00\x75\x61\xdc\x91\x30\x54\x11\xda\x93\xf0\xeb\xb6\x7d\x4b\xae\x25\xa1\x55\x5f\x78\xce\x53\x38\xdf\xb0\xed\xfd\x04\x6c\x32\x69\x37\x24\x66\xce\xb5\xf8\x8a\xcb\x61\x9c\xb8\x08\xd8\xcc\x79\xd7\x9c\xca\x97\xd3\x34\xbb\x69\x39\xa9\x55\xc3\xf5\x8b\x81\x28\xc0\x79\x74\xd0\xbb\xf5\x65\x32\x57\x37\x76\xe4\xbe\x59\x69\x82\xc8\xa0\x95\xfb\x48\x6b\xd6\x7c\x5e\x1a\x82\x0a\x64\x84\x44\x4f\xe2\xaa\x18\xd0\x6e\x07\xe6\x20\xef\x9e\x5b\x59\xd7\x25\x99\xf2\x5c\x75\x9e\xdd\x7c\x34\xeb\xff\x30\x76\xea\x06\xf0\x19\x7d\x0b\x6a\x5e\x9a\xee\x66\xe7\x8e\x49\x8a\xb6\x24\x65\x0f\x5e\x84\x50\x13\xf1\x3b\x03\xca\x56\x5f\xf2\x19\xd4\x5a\x23\x6e\xf3\x2e\x7e\x43\x4d\x79\xe1\x84\x8c\xcd\x7d\x10\x15\x8f\x08\x85\x38\xd0\x40\x66\x63\x2b\xa6\x36\x87\x6b\x62\x26\x60\x25\x5a\x90\xb4\x6d\x2f\xf6\x2e\x89\x93\x1a\x84\x30\xb3\xfb\x44\x1b\x20\x8c\x6b\x6f\x62\x3c\x1b\x6d\x9b\xc2\x76\x47\x88\x6e\x1b\x42\x6e\x30\x87\x9d\x3f\x31\xea\xa2\xe6\xbb\x0e\x28\x03\xb4\xbb\x8b\x37\x2c\x20\x17\xee\xea\x3c\x0b\x88\x08\x06\x8b\xd8\x83\x26\x3c\x4e\xa3\x94\xed\x6c\xf9\xf3\x0d\x1d\x33\x27\x13\xdc\xa5\xf4\x64\x93\x13\x72\x38\xbc\x4d\xdd\x59\x51\x99\xcf\x53\x52\x8d\x8a\x8d\xa2\xee\xa3\x53\x02\x09\x73\x28\x57\xaf\x37\xe9\x53\xd9\x40\xbc\xed\x66\x7a\x09\xcc\x73\xae\x67\xb2\x7b\x9f\x7b\x12\x23\x84\xd3\x9c\xd0\x32\xeb\x79\xae\x4a\x85\xf3\x1c\xe7\xe1\xd9\x45\x0e\x3d\x05\x0b\x57\xbd\x4b\x1e\xb8\x37\xdc\x0e\x2c\xc9\x16\x86\xbe\x76\x3a\x4c\x39\x2d\x3e\x90\x0f\x62\xf7\xfc\xda\xe3\xc0\x9b\xc6\x17\x94\x7c\xd1\xba\xb1\x70\x85\x79\x17\xeb\x1f\x60\xac\x15\x69\x56\x5c\x65\x56\x18\xdd\xea\xee\xf1\x70\xcb\x38\xea\xb6\xb0\x43\xc0\xaa\x72\xa3\xd2\x85\x47\xb5\x13\x88\xf5\xc0\x31\xd0\x37\x82\xcf\xc3\xf8\xee\x1b\xc0\xa7\x10\x69\xfc\xda\x85\xbe\xf0\x1e\xcf\x29\x29\x2a\x47\x42\x48\x6c\x57\x67\xce\x82\x8a\x45\x40\x2e\x88\xe5\x15\xd8\x92\xc1\x42\xeb\xbb\x48\xb3\xd5\x80\xc9\x20\x92\xb5\x5b\xb6\x23\x64\xd8\xce\x9c\xd0\xbd\x96\x8e\xad\x7c\x43\x23\x06\xf3\x82\xfc\x52\xb8\xee\x04\x1e\x4d\xc4\x7c\x9b\xc4\x09\x4e\xa7\xaa\x3d\x94\x5d\x73\x8a\xb5\x70\xa6\x29\x42\x45\xb8\x38\xaa\xea\x75\xeb\x63\xb3\x52\xe2\x28\x85\x2f\xe2\x6a\x78\x5f\x37\x71\x3e\x34\x39\x27\xf8\x9c\x03\xe9\xed\xe4\xe4\x48\xa6\x5f\x58\x5c\x57\x9b\xeb\x92\xf8\x84\x30\x19\xb2\x15\xc5\xae\xac\x70\x5f\x26\x3a\xaf\x6f\x6b\x31\x22\xab\x4a\x36\x35\x2a\xe6\xe3\x3c\xe3\xe4\x6a\x46\x78\x2c\x68\x03\xa6\x65\x8b\x72\x73\x15\x6e\x35\xe8\x03\x95\x5d\x74\x8a\x6f\x3b\xa0\xbc\xcb\xd0\x5d\xba\xc4\xd0\x87\x2e\x12\x70\x87\x68\xce\xa8\x6c\xe8\x80\x7b\x2b\x7b\x77\x8b\x28\x76\xda\x66\xe3\x4a\x24\xb6\x02\x6e\xfb\x24\xb4\xd4\x35\xec\xe4\x44\x8a\x78\xcc\x56\xdb\x2e\xf8\x66\x76\x3c\xdd\x68\x21\x96\x4a\xfd\x64\x78\x50\x4b\x7d\x3b\x95\x57\x64\xe4\xbb\x78\xb0\x95\x11\x61\x70\x62\x62\xa7\xb0\x29\xe2\x88\xab\x5d\x46\x97\x70\xf9\x44\x6c\x99\xab\x74\x3a\x00\x23\xb5\x9f\x57\x30\x15\xea\xfa\x68\x99\xf9\xc3\x26\x68\x37\x70\x3e\xc5\xec\x26\x2b\x7b\x90\xb8\x45\x2f\xb8\x68\x55\xb0\x4b\x92\x1d\x16\xdd\x22\x1c\x7e\xa8\x2d\x55\x8a\xd9\x41\x31\xbd\xa2\x23\xf8\x36\x6b\x01\x48\xb2\x37\xfb\x56\x5c\x8d\xa7\x4e\x11\xb7\x10\xe2\x38\x98\x93\xbc\x94\xe0\xaf\xc6\xf7\x50\xda\xe6\x3b\xd8\x4f\x92\xab\x5f\xfd\x36\x7e\xc3\x5b\xb5\x2a\x05\x54\x36\xdc\x5a\xdb\x8f\x58\x77\xb1\x26\xc3\x52\x2d\x76\x18\x4b\x2e\xdb\x36\x2e\x32\x98\x71\x50\x6b\xd2\x65\xe6\x5d\x95\x4f\xd0\xca\xf1\x19\x72\x64\x7b\xde\x01\x5d\xc5\x18\x45\xe7\x55\x81\x86\x6d\x4f\xc2\x5e\x1d\xcf\x55\x4c\xa2\x7d\xc3\x26\x6d\x6e\xec\x77\x59\xba\xb8\xb6\x41\xd8\x01\x49\x13\xb7\xfd\xc8\x07\x30\x2c\xaa\xbd\x99\x70\xf0\x52\xd5\x92\xa1\x9c\x31\x02\x95\x5c\x74\xc1\x03\x77\xcd\xdb\x66\x91\xcc\x38\xc1\xec\x69\xcd\x8e\x13\xd5\x47\x39\x0d\xdc\x2c\x63\x42\xb4\xa0\xa8\x33\x62\x74\x98\x54\x80\xa0\xf4\x90\xe5\xde\x0f\xb1\xee\x7a\x93\x2a\xaf\xaa\x44\xc6\xe7\xda\xac\x97\x4b\x33\x9c\xd6\x1c\xf1\x88\x95\x69\x55\x03\x97\xdb\xb1\x79\x7a\x22\x36\x4c\x4f\x08\x9a\x5c\xee\xfa\xdb\xe1\x14\xef\x91\xf4\x44\x09\x55\x0e\x35\x4b\x74\x95\x74\x5a\xb7\xad\x9c\xe2\x82\x03\xd9\x59\x45\xcf\x12\x6c\x27\x50\x52\x69\x61\x1f\xed\x66\xfe\xb0\x99\xfc\x0d\xe0\x63\x61\x4d\x45\xf9\x15\xaa\xb7\x93\x2a\x84\x0f\x18\x0a\x3e\x53\x6f\x63\xa7\xfb\xd0\xfb\xd8\x11\x9a\x3b\xb9\x16\x84\xda\x70\x38\x6f\x53\xab\x61\x35\x4a\xc3\x66\xe9\xb8\x0f\xb6\x99\x31\x97\x97\xf4\x5c\x67\x63\xb1\x9d\x20\x7a\xb1\x63\x2f\x97\x39\x94\xad\xd2\x25\x33\x47\xb9\xcd\x5d\x34\xb7\x43\x86\x34\xf2\xb5\xc5\x42\xfa\xa1\x85\xe6\x85\xef\x3a\x90\x71\x05\xb0\x65\x3c\xe1\x4c\x2e\xeb\x10\x4c\xc0\xc9\xe5\xc5\xee\x3a\xea\xb0\xb6\x7d\x56\x7c\x6d\x92\x6b\xbb\x41\xaf\x2a\xec\x8b\xcd\x2b\x7a\x02\x43\x56\x97\x91\xf0\xcc\x6c\x92\x83\xe3\x40\x17\x9f\x2a\xaf\xbb\xaa\x41\x06\x37\x1a\xf1\xb4\x44\xd4\x88\x9b\x66\x6b\xf6\xa9\xad\x9f\x39\xda\xdd\xb5\xb2\xce\xda\x14\x4d\x83\xce\x19\x13\xe5\x03\x47\x7d\x57\xb3\x53\x82\x3e\x2f\x13\xb4\x40\xd6\xf6\xd9\x7b\x3a\x53\x8d\x43\x77\x5e\x53\xdd\xa5\x45\x91\xed\xbd\xee\x74\x35\x57\xfb\x3e\x8f\xb3\xd8\xbb\x26\x80\x9c\xf9\x79\xe1\xc4\x7a\x06\x26\xd3\x66\x96\x25\x87\xf4\x9e\x92\xb1\x9c\x3e\xb3\x57\xdd\x6b\x03\xaa\x1a\x40\x49\x9d\x36\xa9\xd8\x5d\x7c\xe9\x0e\x62\x3b\x39\x13\x24\x6d\x7b\x1a\x82\x81\x39\xd9\x05\x23\xa4\xdd\x1d\xe7\xb0\x15\x6a\x1a\xd2\x29\x2b\x35\x57\x74\xbe\x41\xf3\xc0\x3a\xc2\x1b\xc5\x56\xef\xfe\x33\x7f\xf4\x23\x6f\xf3\xac\x4f\x7e\xda\xbf\x03\x4f\xfe\xb4\xf7\xfa\xe6\xef\xfb\x99\xaf\x7c\xec\x17\x3d\xee\x91\x6f\x78\x4f\xf9\x4e\xcf\x7e\xd6\x3f\x7e\x97\x7f\xf8\xb8\x3f\x7b\x46\xf0\xfb\x3e\x12\xff\xcc\xb3\x3e\xee\x9b\x7e\xe0\x15\x9f\xf5\x5b\x1f\xf7\xf7\x9f\xfc\x07\xff\xfa\xa3\x3e\xfc\xff\x79\xfc\xfb\x7e\x9d\x7b\xe9\x9b\x3e\xff\x05\x7f\xfe\x99\x5f\xf2\x29\x2f\x78\x20\xf4\x0f\x9e\xf5\xef\xff\xf8\xbd\x5e\xf7\x83\x7f\x55\xfe\x83\x57\x7f\xca\x23\xfd\x43\x9e\xfa\xe6\xef\xfd\x2d\xdf\x34\x9f\xf7\xa2\x8f\xfa\xbe\xdf\x7e\x97\xcf\x7c\xab\x1f\xfa\x37\x0f\x6a\x9d\x7e\xfd\x7f\xf9\x1b\xfe\xc3\xbf\xe9\xe9\xe1\x2f\xbf\xd3\xdf\x7a\xe5\xf3\xdf\xf9\xdb\xfe\xa7\x8f\x78\xfe\xb7\x3e\xe9\x8b\x3f\xf4\x3d\xbe\x6d\xff\x7f\x9e\xfe\xee\x7f\xf1\x29\xcf\xfb\xa6\x07\x42\x7f\xe0\x97\x5e\xf4\x09\x9f\xfb\x66\xbf\xfb\xbe\x6f\x3b\xde\xf3\x39\x9f\xfb\x3d\x3f\xfe\xe6\xf6\x85\xed\x0f\xe1\x4b\xbe\xe1\x7f\x7c\xf3\x4f\x7e\xf2\x77\xbd\xff\x73\xff\xeb\xef\x3d\x10\xfa\x1f\x1f\x79\xca\x13\xbf\xfb\xf1\x5f\xfb\xbd\x1f\xf5\xca\x57\x3d\xf9\x91\xbf\xeb\x3e\xed\x35\x6f\x2b\xbf\xff\xa3\x9e\x75\xfd\xf4\x93\x5e\xf0\xbf\x3e\xee\x31\x5f\xfe\x3f\xfe\xab\x07\x42\x9f\xfd\xbb\xf0\xf8\xea\xdf\x79\xf6\x87\x3f\xfe\x39\x8f\x7f\xfe\x9f\xfb\xfc\xbf\xff\xc4\x2f\x7b\xe2\xcf\xff\xf8\xdb\xbc\xe4\xc7\x7f\xf7\xab\xbf\xf0\x09\x2f\xfe\xb7\x9f\xf1\x41\x0f\x7e\xd6\xdf\x79\xf6\xcb\x7f\xe7\x57\x7f\xe5\x95\x4f\x7b\xf7\x27\x7d\xe4\x47\xb4\xdf\xfb\x45\x64\xdf\xe9\x19\xbf\xf9\xc2\x1f\xfa\xa6\x57\xbd\x5c\xbd\xe9\xdb\xff\x85\xef\xfb\xf6\x07\xd5\x5e\x8f\xfc\xea\x8b\x7e\xf8\x5d\x3e\xff\x3b\xfe\xc6\x53\xff\xd1\xf7\x3c\xff\x69\x9f\xff\x96\xcf\x7e\xea\x17\xbc\xf8\x57\x1f\xfb\x24\xf1\xe7\xff\xc1\xa7\xfe\xcf\xef\x6e\x3f\xec\xc5\x1f\xfb\xa7\x62\xab\x87\xbd\xea\x1d\x2b\xd6\xac\x54\x54\x60\x98\xc5\xe8\x5e\xec\xd0\x20\xba\x6c\x74\x32\xc3\x08\x41\x64\x63\x76\x25\xd4\x78\xb7\x8e\xf4\x8c\x61\xb4\xeb\x2e\x91\xab\x12\xb5\x67\xbb\x53\xd5\x44\xdb\x9b\xd0\x13\x96\x39\xe5\x5c\x02\x30\xb5\x48\x9c\xe5\x08\x6e\x9b\x82\x62\xce\x6d\xa2\x73\xdb\xca\x5d\xde\x86\xfb\xd6\xdd\xa1\x3a\xd5\xd1\xcf\xf3\xb4\xca\xe8\x32\xc2\xe4\xf1\x3a\x3b\xdb\x57\x0b\x59\x15\x7a\x58\x9d\x8c\xb7\xf8\xea\x4a\x05\x7e\xd7\x65\x0d\xd5\xf4\x86\xe7\x38\xbd\xd6\xe1\x92\x5b\xc4\xb9\xc2\x8a\xab\x1b\x01\xcb\x95\x29\x1a\x86\x67\x51\xb1\x67\x66\xa1\x1a\x0c\xad\xe5\x2e\x35\xca\xd9\x3b\xa9\x5d\xa9\x0d\x51\x38\xb6\x75\x04\xe3\x33\x51\xb5\x50\xad\x04\x6e\x95\x63\x26\x97\xe4\xf8\xac\xdd\x79\x22\x04\x8c\xe5\xae\xfd\x07\x5c\xa4\x53\xb3\x47\x22\xb2\xef\xb5\x91\x7e\x2a\x0a\x8d\xf0\x69\x14\x2b\x0b\x5a\xa7\x6b\x08\x0e\xbd\x79\x0d\x27\x6d\x4a\x2f\x70\x57\x2e\xf2\xd7\xb9\x0d\x6e\x68\x1e\x1c\x6a\xda\x36\x50\xae\x69\xf3\xf1\x86\x5f\x09\x70\x81\x87\xe3\xdc\xa6\x71\x51\x2b\xb2\x51\xaf\x56\xaf\xfc\x2e\xde\xa8\x09\x0c\x89\x16\xfb\x20\x52\x36\xa3\x53\x5d\x94\xd5\x7c\x94\x9a\xc0\x59\x9b\xd8\x3d\x75\x67\x22\xa3\x82\x6d\x54\x05\xcd\xe1\xca\xa3\x47\x8e\x0f\xc3\xe9\x1b\x88\xb7\x25\xa7\x89\xae\x34\x9c\x64\x82\x68\xb8\x3d\x4c\xe7\x57\xa3\x19\xa3\x72\x61\xbb\x15\x82\xb7\x99\x2f\xaa\xae\x26\xc5\x71\x74\xe2\xee\xe2\xda\x9b\xac\xa4\x39\xc2\xbc\xc5\x5d\x3a\xc2\x94\x9e\xfa\x6a\xd1\x55\xac\x3a\x24\x9b\xb3\xdd\x4d\xbf\x5b\x97\x52\x1a\x48\x76\x1b\xf9\x5d\x1d\xe7\x51\x1d\x05\xfe\x80\x8c\x52\xaf\xdd\x6c\x44\x4e\x71\xee\x96\xb8\xc8\x78\x5f\x75\x91\x0d\x94\xa9\xae\xb0\x3b\xeb\x49\x50\x28\xdf\x76\x46\x90\x10\x7e\xb8\x31\xa1\x17\xde\xeb\xe5\x37\xb9\x18\x59\xc0\xa0\x42\x49\x38\x81\x2a\x9c\x6c\xbb\xbf\x4a\xf3\xc8\x0f\x33\xf7\xe2\x6e\xdb\x2d\x5c\x9a\xfb\x63\x50\x00\xba\xb2\xe5\xaa\xfa\x08\x1b\x6c\xa2\xd8\x13\x12\x50\xb2\x15\x03\x0c\xc9\xf5\x3a\x09\xa6\xe2\x14\xfb\x52\xf9\xae\x8e\x33\xd4\x8b\xeb\x64\x83\x96\x52\xe4\x4b\xb1\xa1\xfc\x6c\xcd\xcb\x3c\x18\x1e\xe7\xce\x12\xbf\x10\x2b\x7d\xae\x94\x2e\x0f\x35\x1f\xe0\x36\x83\xbf\x2b\xe8\x1d\x5f\x60\x24\x5d\xbc\x1d\x0c\x36\x74\x28\xb7\x51\x03\xd7\x55\xa4\x35\x27\x39\x1a\xec\x54\x17\xbf\x21\xb2\x35\xb2\xcc\x5d\xb2\x2f\xe4\xc0\x31\x66\x98\xed\x0c\x05\xb9\x88\xf7\xed\x5c\xd7\xa9\x64\xaf\x97\x68\xd1\x12\x45\x37\x38\x4f\x65\x9b\x2b\xc3\x48\x5c\xc8\x03\x8a\xe0\x37\x82\xcf\xc3\x2a\xbf\x1b\xc0\x87\x34\xba\x35\x51\x8a\x94\xd7\x15\x39\x17\xdc\x02\x17\xcc\xbe\xd3\xa5\x25\x40\x1e\x95\x45\x7d\x56\x7a\x13\xa7\xd1\xd3\x34\x78\xf1\xbb\x46\x8e\x97\xb5\x99\xc0\x83\xed\x93\xeb\x84\x8f\x7d\x37\x5b\x31\x60\x1b\x2c\x66\x30\xfd\x2c\x49\x97\x89\x27\x29\x09\x86\x81\x96\x29\xec\x36\xba\x2b\xd3\x2b\xc9\xba\x0f\x57\xa7\x3d\xb6\x8d\x86\xc1\xd9\xf2\x79\xa5\x13\xd8\x8d\x61\x08\x91\x9d\x61\x8b\x30\x1c\x4d\xb0\xf3\xdc\x77\x73\x97\x93\x26\xd6\xbd\xb7\x73\x8a\xaa\x05\x2c\xd7\x26\x10\x1d\x68\xb6\x2b\x2f\x58\x13\x32\x1e\x91\x6d\x0b\x70\x23\x21\x9a\x3d\x71\x5e\xd8\x71\xde\x45\x77\x6d\xc8\x49\x91\x65\x8f\x13\x4d\x40\xae\x33\xa9\x44\xc2\xd9\xa3\xa3\x04\x62\x41\xc0\xce\xd8\x55\xce\x56\xa2\x21\x66\x1f\x7a\x4f\x77\xbd\x09\x1d\x8b\xa7\x5d\xf8\xc8\xd7\xa5\x69\x25\xdc\x22\xdc\xac\x1d\xc8\xf1\x8d\xe3\x0d\x95\x40\x3d\x23\x64\x22\x8b\x1b\xf3\x29\x92\xba\xdf\x05\x3e\x72\x49\x9d\x5b\xdd\xcb\xde\x4f\xc9\x89\xa5\x52\x1c\x3e\xe6\x73\xf4\xd2\xb5\xe7\xd7\x90\xdb\x41\xc0\xd4\x58\x0d\x7c\x45\xd6\xf6\xbb\x6a\x75\xea\x0a\xd1\x2b\xea\x81\xc8\x2e\xb1\x50\x69\x35\x02\x5c\x96\x5d\x1a\xd7\x90\x52\x7d\xe7\xc1\xad\xd8\x0c\x41\x72\x8f\x2c\x9c\xf2\x01\xbd\xf6\x1b\xc1\xe7\x61\xbd\xe4\x0d\xe0\x23\x8f\x7a\xc8\xd9\xf1\x1e\xa2\xda\x7a\xd9\x30\xba\x98\x41\x67\xc9\xbd\x67\xe2\x8f\x13\x32\xb4\xe0\xc9\x23\x24\x88\x78\x13\xa8\xbb\xed\x6a\x95\x9a\x86\x26\x8a\x91\x15\x26\xf8\x89\xa7\xcf\x84\x1f\xe7\x66\xf7\xb0\x69\xe5\x5c\x50\x11\x1f\xf6\x42\xc7\x25\x97\xe8\x23\xc8\x70\x9b\xd3\x84\xb2\x81\xd3\x5d\x7a\xd6\xb7\x7d\x92\x1d\x1d\x9e\x27\x3b\xcc\x3e\xf0\xc5\x46\xe2\xc8\xec\x57\x27\x45\x18\x5d\xa6\x73\xb0\xa3\xfb\x58\xff\x2c\xdc\x46\x1a\x22\xb0\x4c\x91\x92\x96\xbe\x6e\xe7\x22\xed\x74\x84\xa2\xab\x28\x28\xcf\xbe\x5c\x46\x3a\xc8\xcd\x6e\xdb\xe1\x3b\xbc\x6b\xdf\xf2\xa4\xcd\x0d\x49\x89\xcb\xfb\x80\xab\x97\xd3\x29\xc3\xca\x91\xd8\x22\x23\x47\x9e\x48\xa4\x13\xd3\x93\xa3\xe5\x09\x9a\x15\x55\x70\xdb\xb5\x11\x35\xba\x4f\x73\xce\x89\x24\x3e\xda\x24\x47\xbe\x1a\xb3\xa7\xa8\x09\xab\xb8\xd1\x1a\xa0\x8c\xf2\x1c\xe2\x84\x71\x11\x0d\xd1\x6d\xf5\xc6\xb5\x36\xdc\xc2\x4e\x2e\x76\xc8\x29\x3d\x65\x91\xe1\x18\x0e\x0d\x1a\x3e\xb3\x36\xab\x1c\x9d\x58\xcb\xe8\xc1\xf7\xa8\x37\xac\xeb\xba\x6b\xdf\xb2\xf0\x48\xe2\x4a\x83\x1f\xbc\xa3\xb5\x38\x56\x86\xd0\x79\x42\xbd\xef\xd4\x2b\x94\x4e\x78\x1d\x19\x77\x3d\x81\x0f\xc1\x37\x4c\x4d\x79\x14\xf8\x3c\x8c\x9d\xba\xc3\xcd\x7c\x6c\x3c\x21\xd5\x2e\x2c\x39\x3f\x29\x53\x11\x5f\x05\x89\xae\xdb\xd8\x51\xc5\x60\x40\xe8\x64\x74\x65\x5a\x9a\x2c\xf4\x38\xc3\xbb\x98\x16\x4c\x55\x36\x68\xf7\x54\xa5\x99\xc9\x46\x81\xe1\xfc\xea\x62\x0a\x57\xe9\xe6\x06\xc5\xda\x74\x96\x8f\x0d\x2b\x0d\x5d\x74\x71\xe3\x77\x29\x3d\xe1\xb6\x8a\xb2\xa7\x80\x86\x99\x88\x35\x92\x7d\x0d\xa3\x24\xe8\x15\x5f\xc5\x59\x43\x92\x89\xbb\xd9\x55\xee\x00\xea\x2e\x4a\x71\x77\xe9\x1d\x58\x2f\x74\x9b\x61\x16\x89\x8c\xa3\x44\x2b\x93\xbd\x01\xe0\x58\x91\x8a\x9e\x2e\x3e\x25\x06\x3b\x0b\x09\x41\x47\x4f\x0c\xe1\x64\x77\xd5\x60\x01\x9c\xba\xf5\x39\x1b\x0d\xcb\x5c\xb0\xf3\xed\xc0\x68\x49\x6b\x57\x8b\x6b\x03\x45\xc3\xe3\x6a\x25\xc2\xba\x24\xed\x45\x52\x76\x9b\x9b\xb9\xd4\x3a\x86\x68\x02\x71\x87\x9c\xb8\xe1\x0b\x16\xbd\x29\xc1\x48\x98\x0e\x84\x88\xa8\xef\x34\x57\x78\x66\xbf\x3a\x6b\x50\x5e\xe5\x2e\x40\xd6\xc5\x44\x99\x25\xd0\xc8\x93\x6d\x73\x5c\x02\x20\x7d\x08\xdb\x3e\xa6\xc6\x42\x77\x42\xa5\x46\x0b\x78\xd1\xeb\x5e\x40\x08\xe8\xae\x43\xdb\x6c\x29\xc2\xc0\x3c\xca\xa4\x18\x07\xac\x0e\x4f\xad\xbe\x58\x0a\x67\x81\xe8\x32\x7a\xcf\xc9\xd6\xb2\xc5\x4e\x59\x8d\x1a\xa6\x7c\x96\xf1\x28\xf0\x79\x18\xdf\x7d\x43\xe5\xe3\x37\x31\x91\x47\x84\x6c\xc4\x38\x7f\x74\x98\xb1\x16\x3a\x41\x06\x29\x15\x79\xf7\x51\x47\x9b\x2a\x95\x6c\xc4\xa4\x7a\xc6\xb4\xde\x65\xe9\xe2\x76\x37\xa6\x03\xce\x65\x86\xd5\x48\x2d\xc8\xc2\x8c\xdd\xaa\x3e\xc8\xa6\xb1\xd9\xa6\xe1\xa7\xda\x55\x2e\x26\x8a\x3d\x15\x1f\xf4\x6d\x3e\x41\xdb\x00\x10\xf1\x71\x75\x9d\x57\x39\x6a\x48\x53\xf5\x8a\x9b\x4d\xec\x02\x4a\x33\x4c\xb9\x2d\x03\xa3\x34\xeb\x56\x4d\x93\xf6\x2e\x9a\x97\x05\x3c\x2a\xd2\x82\x76\x36\xd7\xe6\x2a\x0a\xa0\x98\x79\x11\x60\x0c\x93\x22\x40\xdf\x4b\xd3\x3a\x8f\xd0\x7b\x2f\x82\xcf\xaa\xc1\x5d\xdf\x4e\x3a\x8d\xf2\xc7\x01\xc3\x81\x40\x06\xb5\xae\xc9\x18\xa2\x9c\xb3\x43\xd4\xe9\x59\x39\x00\xb5\xba\x81\xd0\x76\xa3\xba\xf4\xfb\xc6\xee\xb2\xb9\xa9\xad\x6d\x2b\x55\x5a\x00\xbc\xc0\x28\xb6\x12\x5f\x24\x13\x01\x60\xc6\x20\xd9\xf9\x71\x1c\x4a\x39\x55\xe8\x05\xf5\x95\xa6\xc8\x77\xf9\xaa\xb3\xa0\x91\x05\x7e\xe3\x40\x90\x2e\x37\xa7\x8d\x06\x72\x54\xd1\xeb\x86\x2b\x2a\x86\x40\xd6\xc3\x64\x6e\x63\xe9\x0a\x49\xef\x4a\xed\x77\x25\x6e\xbb\xc7\x59\x32\xf0\x09\x66\x7b\xd9\x9e\x98\x8e\x8a\x35\xe4\x00\xdd\x5b\xa9\xb2\x85\xd3\x9f\x36\x73\x20\xe5\x2e\x19\xb9\x50\xa7\x8f\x96\x99\x3f\x6c\x82\x76\x43\xe5\x73\xe9\xee\x9a\x8c\x14\x4b\xa4\xb6\x6b\x51\x20\xb8\xa2\x58\xa8\x5c\x83\x83\x20\x59\x36\xe3\xb6\xd4\xa6\xfb\x38\x3a\xba\x1a\x38\xeb\x5d\x59\x5e\x5f\x2d\xac\xc9\x6d\x3d\x50\xe8\xe2\x0c\x92\x39\xbe\x80\x0d\x39\x1a\x2f\x38\xdd\xcb\x39\xc9\xde\x5b\x39\x2d\x93\xb3\xd1\xa1\xf2\x5d\x73\x37\x64\xfe\x44\x78\x41\xf6\x48\xaa\x6f\x7d\x17\x8a\x78\x79\x04\x2d\x7b\xc8\x6a\x2f\x26\x71\xbe\x30\x13\x18\x6e\x76\x3f\xce\xe1\xe0\xbc\x6b\xc7\x05\x21\x64\x10\x01\x40\x9d\x3a\x68\x7f\x05\xd3\xac\x1b\xed\x3a\x46\x46\x71\x43\xf3\x74\xd1\x9f\xc5\x33\x79\x78\xd4\x48\x4e\xc0\xd1\xbb\xf6\x47\x39\x8a\x32\x80\xa2\xcc\x58\x34\xee\xa4\x28\x78\xda\xc5\xc9\x75\xf9\xa1\x97\x31\x85\x52\x10\xcf\xbd\x71\x7a\x66\x1c\x22\x4f\xdd\xde\x65\x72\xd0\x8f\x8b\xf2\x71\x82\xec\x55\xc8\xc3\x2d\x29\x78\xab\x5b\x32\x0d\xe6\x21\x4b\xd8\x38\x17\xe6\xca\xe9\xf4\x5b\x19\x1b\x38\x6a\xba\x6d\x31\x62\xa3\xfe\x50\xb9\x9a\x0e\x29\xf6\xb5\x41\x7c\x84\x34\x58\x09\xa4\x5b\xdc\x95\x33\x74\xe6\x53\x09\xaf\x8f\x26\x0f\xa6\xf4\x66\xca\x5d\x9a\xd3\x39\x19\xad\x07\x6f\x76\x60\x4f\xc0\x9c\x03\xe8\x02\x15\xd3\xe2\x6a\x61\xb4\x65\xab\x90\x74\x5b\x3b\xda\xec\x35\x50\x9b\x49\xfd\x77\x6c\xf5\x1e\x36\x93\xbf\xa3\xf2\xc9\x7e\xdf\x03\x3c\xdf\xd0\x1a\x27\x6f\x7c\x32\x27\x80\x49\x7a\xcd\x76\x5a\x88\xf1\x3c\x87\xd8\xf6\xeb\x90\x44\x2f\xce\x43\xe1\xfc\xae\x07\x34\x47\x10\x84\x1a\x6a\x0f\xc7\x69\xd6\x20\xc8\x0b\x21\xba\x0a\x06\xe0\xd2\x1b\xad\x09\x1f\x09\xf7\x3e\xba\x51\x48\x80\xcb\xee\x77\x39\x69\x52\x5d\xb4\x3a\xe8\xb0\x60\xf4\xb5\x4b\xce\x7d\xc7\x43\x2d\xb8\xc0\x79\x1e\x5d\x68\xb4\x4d\x77\x24\x10\xba\xc8\x61\x80\xa5\x07\x3d\xef\x1a\xb5\x57\x6e\x5a\x24\x86\xb5\xa0\x2d\x6a\xe4\xca\x52\x51\x65\xb9\xad\xf3\xf0\x89\x5a\x9e\x95\xd5\xce\x66\x9e\xd2\x34\x28\x27\xe6\xcf\xbb\xce\x4b\x70\x7c\x80\xc6\xe9\x45\x77\x52\x01\x22\x9b\x6b\x34\x83\xbc\xf6\xe2\xf0\x72\x83\x52\xe0\xa3\x39\xc6\x29\x6a\x95\xb2\x8e\xcd\x83\xdb\x6e\xeb\xb3\x20\xb6\x23\xc3\xe0\x16\x0d\x87\x2f\x07\x4e\xf2\x00\x78\xf8\xa2\x16\x53\x53\xb9\x2b\x55\x8b\xcb\x6e\xc9\x08\x74\x68\x6f\xab\xb9\x6b\x02\xe8\x56\x3c\x12\x07\x68\x74\x7c\x18\x83\x7c\x06\x13\x74\xee\x61\x6f\x54\x1d\xe9\xaa\xbc\xb9\x99\xf1\xb1\x4d\x1f\x4e\x8b\x73\x52\xe7\x5d\x80\x9c\x75\xe2\xc0\xfb\xab\x4f\xb5\x60\xa5\x04\x57\x0f\xaf\xcb\xab\x46\xa1\x48\xfe\x42\x25\xee\xb8\xb3\x52\x00\xcd\x29\x1d\x81\xd2\x53\x3d\x4a\x6c\xf5\xb4\x8f\x7d\x4f\xfc\x5f\x3f\xee\x87\x7f\xee\xe9\x7f\xed\x63\xce\xaf\xf8\x2a\xff\x4b\xdf\xfe\xfe\x3f\xf9\x81\xcf\x7f\xc2\x67\xce\x4f\xff\x4b\x5f\xf5\xc1\xaf\x7d\xde\xf3\x3e\xe1\xcf\x88\xad\xbe\xf9\x29\xaf\xf9\xd2\xef\xfd\xdf\x7f\xe5\x3b\xdf\xee\x9d\xfe\xf1\xbf\x78\xc2\xeb\x9f\xf5\xef\xdf\xfe\x17\x7e\xe1\xfc\xb6\xa7\xfe\xdf\xe7\xcf\xfc\x93\xf7\x7e\x6b\xac\x7e\xeb\x43\x1f\x08\xbd\x7e\xf7\x49\x6f\xfe\xfd\xfe\x59\xbf\xf6\x53\xdf\xf1\x56\xef\xfa\x6f\xde\xef\x75\x4f\x78\xef\x0f\xfc\xc7\xf1\x9d\x3e\xed\xaf\xfc\xdc\x23\xdb\xfb\xbd\xe8\x95\x7f\xfd\x77\x9f\xf8\x40\xe8\x3b\x3c\xee\xef\x29\x82\x9e\xfe\xdf\x3e\xfe\xbb\xde\xe2\xfd\xce\x27\x3d\xf2\x63\xbf\xf9\x1f\x5e\xfd\x9d\x9f\xf6\x43\xeb\xf5\xee\x09\x2f\xfd\xd5\xbf\xf2\xcf\xe7\xaf\x3c\x68\x57\xf5\xe9\xf1\x65\x5f\xfe\x3b\x2f\x7f\x6a\xfd\x2f\x7f\xfc\xc3\xaf\x7f\xda\x6f\x7d\xd5\x87\x31\xff\x03\xdf\xfd\x5e\xaf\x7a\xe5\xfb\x3c\xee\x5b\xfe\xc1\x67\x3d\xff\x91\x97\x3d\x10\xaa\xbe\xf9\xfb\xff\xed\x5b\xbd\xf0\x37\xeb\x3b\xbf\xf2\x1d\xff\xd2\x8f\xbe\xf8\xcf\xff\xc1\xbf\xee\xbf\x6f\x3f\xa0\xfe\xd0\x47\xbf\xf3\xb7\xbe\xd3\x17\x7d\xcd\xf8\xe4\xdf\x7e\x20\xf4\x8b\x7e\xfd\x6b\xbe\xf8\xaf\xff\xd3\x0f\x79\xaf\xd7\x7f\xc7\xbb\xfd\xde\xbb\xfe\xce\xd3\x3f\xe4\x55\x8f\xfb\x92\xff\xe9\x6b\xc6\xd7\xbd\xfe\x91\x17\xbc\xfc\x31\xdf\xf8\x79\xdf\xfd\xd9\x0f\x84\x7e\xd8\xcb\x3e\xed\xe3\xd5\x0f\x3f\xf9\xcf\x7d\xac\xfb\xf9\x5f\x60\xaf\xfa\x63\x25\x3f\xeb\xf3\xbe\xe0\xe7\xbf\xf9\xaf\xa2\xef\xfc\xfd\xbf\xf8\x6d\xfd\x5f\x3c\xf7\x67\x1f\x08\xfd\xfa\xbf\xf0\x77\x5e\xf4\xa6\xaf\xfe\xc4\x8f\xfb\x5e\xf1\x9d\xdf\xf6\x5f\x3e\x13\xbc\xe5\x8f\xfc\xc6\xaf\xbe\xcf\x0f\xfe\x9d\x0f\xf8\xcb\xcf\x7f\xf5\xbb\x3e\xe7\x33\x3e\xf5\x4d\xbf\xfe\x4f\xc5\x56\x0f\x7b\xd5\x3b\xfc\x1d\x32\x49\xbb\xd2\x05\x05\x0c\x1b\xaf\x91\x28\xdd\x06\xaf\x99\x58\x06\x4f\x14\x3a\x3f\xe8\x7e\x89\xc0\x90\xdb\x35\xd5\x82\x33\x76\xd7\x1c\x1b\x27\x51\x37\xbc\xed\x6b\xf4\xc0\x21\xd1\xd7\x3c\xa3\x9a\x9b\x1b\x99\xc3\x8c\xe5\x55\x8f\x61\x47\x0a\x1a\xe0\xce\xd9\xa4\x4a\xdc\x35\xc7\xa6\x79\x05\xa7\xd1\x45\x20\x82\x32\x9f\x10\xa1\x1a\x0f\xc3\x96\x39\x62\x55\x4d\xe6\x03\x54\xee\x6a\x91\x57\xda\x03\x61\xeb\x08\x68\xbf\xad\x24\x8f\x2d\x2f\x15\x93\xc9\x89\x03\x55\x40\x83\x3b\x87\x52\xc8\xc9\xbb\xc2\xf0\x24\x61\x81\x4d\x5a\x8c\x2b\x55\xfa\xc2\x58\xa3\xdb\xae\x56\xd1\x98\x32\xbd\x6a\x4d\xd1\x59\x7f\xa4\x58\x14\x2e\x00\x5c\x17\x99\x85\x0a\x66\xb3\x4b\x98\x1e\xbc\x8d\xb1\x3b\x5b\x40\x3a\xfd\x6d\x83\xbe\x1e\x1c\x9c\xd7\x28\x9e\x7a\x96\x38\xda\x2a\xca\x6c\xbf\x1a\x72\xc9\x96\xb3\x1b\xce\x12\x73\x75\x46\xad\x66\x68\xf3\x94\x46\x9c\x77\x5d\xb1\x0e\xb0\xab\x73\xbf\xda\xce\x54\x75\xab\x9e\x60\xef\x92\xd4\xbd\x6b\xb0\xf6\xcc\xab\x50\x01\x0b\x83\x3b\xbd\x18\xee\xfa\x62\x5e\xf2\xbb\x6c\xf6\xf3\x79\x9d\x97\xbc\xc6\xc6\x00\x9e\xde\x7b\xb5\x84\xeb\x29\x17\x02\x00\x0f\x62\x37\x00\xed\x67\x67\x28\x28\xb7\xa3\xd8\x0e\x81\xd8\xf5\xa8\xf2\xf3\x61\x38\x7d\x47\xf9\x49\xf0\xbc\x46\x1c\xbe\x94\x13\x79\x05\xbc\xe1\xcd\x44\x3b\x2f\x5e\x8e\xed\x3c\x2f\x91\xed\xb4\xfb\xee\xd2\x24\x7c\xe5\x50\x4f\x7d\xd7\x78\xcd\xec\xb9\x0c\x8b\xb8\xd5\x22\xce\xab\x00\xec\xd9\xce\x0f\xac\xa6\x24\x7a\x1c\xc5\x34\x5a\x27\xdc\x69\x60\x12\x27\x41\x8e\x0b\xdf\x75\xc3\x94\x75\x05\x87\xaf\x3c\x2f\x73\xd6\x2d\x4f\x60\xcf\xf3\x48\x1a\x6c\xc9\x93\xda\x94\x9e\x0a\x5f\x91\x5d\xbe\xd6\x8a\x01\x68\x56\xb5\xbb\xd6\x89\xa9\x40\x00\x52\xc1\xbd\x26\x55\x74\x5d\xd3\x05\x46\xac\x49\x8f\x9d\xd1\xb1\x8a\xd9\xc1\x71\x41\xca\x91\x39\x3b\x2c\x27\x5a\xb6\x98\xdb\x2e\x6b\xb8\x2e\xd5\x86\x69\x2f\x09\xa3\x8b\xfa\x83\x22\x75\x00\x00\xe3\x99\x19\xe4\xde\xba\x60\x98\xe8\x92\x55\x66\x22\x6f\xa6\x5c\xb7\x95\x9f\x9b\x4e\x02\xe8\x8b\xb4\xea\x40\x04\x46\x47\x22\xdd\xd8\x90\x35\x64\xac\xa6\x15\xc5\x72\x5b\x12\x52\xd5\x66\x13\xc7\x19\x0f\x03\x6f\x83\xc1\x69\x37\xa6\x8e\x1e\xd1\x72\x12\x2a\xdc\x57\x9a\xdb\x0a\xf3\xd8\x36\xb9\x0e\x52\x55\xd9\x52\x1e\x05\x1e\x82\xb4\xe8\xe0\x3a\xf9\x5d\x96\x94\x56\x9e\xc0\xf7\xab\xaf\xf3\x60\xc7\x15\x63\x07\xb6\xfb\x65\xe9\x74\xe4\x44\xb2\x28\x19\xfd\xd9\xc3\x2c\xa7\xc4\x87\x72\x30\x5e\xfc\xd1\x97\xbc\x1e\x56\xf9\xdd\x50\xf9\x44\x0f\xa8\x35\x1c\x77\x91\x9c\xc5\x61\x1a\xad\x30\xc2\x7a\x9f\xe3\x34\xbe\x8e\x55\xd6\x04\x5b\xb5\xa8\x13\x45\x04\x9f\xa3\xb3\xdb\xbc\x0c\x62\x9f\x64\xe1\xd5\x23\xdc\x01\x48\x10\xc0\xcb\x88\x8c\x52\xf3\x58\xab\x31\x4a\xad\x9b\xdf\xf2\xc5\x57\xc3\x5d\x42\x71\x48\x7e\x17\xaf\x2c\xb2\xab\x53\xec\x84\xd2\x03\xf4\x0e\x57\xbf\x46\x10\x92\xf8\xec\xa7\x13\x6c\xb0\xd8\x62\x3c\x81\x46\x25\x5d\xc3\x6f\x0e\xf1\x79\xd7\x2a\xcb\xc5\xcc\x6c\x97\x0c\x9c\xd8\xc6\x88\x73\xd9\x52\x1e\x8e\x51\x7a\xc7\xa7\xb1\x9b\x55\x68\x4b\x48\x4b\x47\x32\x99\x62\x5f\xd8\xcf\xbb\x36\x3f\x8f\x65\x99\x81\x1c\x19\x3b\xe5\x3e\x20\x0b\x52\x20\xd9\x89\xaf\x7d\xf9\x8c\x0e\xee\x4e\x69\x0b\xa6\xcb\x23\xd1\xa9\x13\xc8\xdc\x66\x21\x17\x93\xe3\x7e\xca\x79\x09\x32\x3c\xdd\x37\xe6\x5a\x0c\xe8\x9c\x69\x4b\x9b\x81\x3e\x0f\x2d\x3a\xd0\xc2\x0d\xae\x19\x06\x7d\xcb\x77\xb9\x2a\x50\x5b\xf9\x45\xf4\xc8\x6a\xe2\xdc\x15\x6d\xb1\x71\x03\xf3\x11\x77\x70\x89\x82\x8e\x04\xa9\xba\x00\x5d\x72\x6f\xd4\x2d\x7a\x9d\xa7\xbe\xeb\xae\x6b\x3b\x1b\xa1\x6a\x0b\xa0\x08\x23\xce\x9d\x6d\x2b\xa2\x7d\x7a\x28\xec\xb4\x97\xdc\xf3\x7e\x86\x72\x86\x38\xca\xc0\xeb\x3a\xf6\xdd\xbb\x47\x6f\x39\x3e\xac\x97\xbc\x01\x7c\x58\x70\xc4\xed\x8a\x34\xab\x38\x42\xd9\xcf\x10\x6a\x95\xb9\xe2\xd3\x02\x16\xfb\x09\xb2\xdf\xa3\x5f\x6a\x3f\x27\x1e\xa6\x1b\xcc\xef\xb2\x2f\xb9\x92\x59\xb5\x57\x19\xc9\x8a\x49\x64\xb2\xaf\x3e\x3b\xda\x0e\x83\xe9\x95\x43\xbb\x90\xeb\xf5\x40\x17\x98\x68\xe0\x04\x74\xcd\xfc\xae\x16\x63\x86\xbe\x9f\xbc\xe4\x60\xb3\x3a\xce\x21\x6c\x11\x35\xa9\x88\x7c\x52\xab\x1d\xc7\xd1\x2c\x46\x3e\x12\xd9\x28\xaa\x76\x1c\x63\xe8\xbb\x32\x5a\xbe\x2c\xb4\x69\xa3\xc7\x5c\x97\x28\x41\x52\x5a\x6a\xe2\xd0\xe0\x49\x68\xd6\xae\x32\x6d\x95\xdd\x8f\x93\xcb\x8e\x0d\xd0\x8d\x98\xbb\x36\x3f\x6b\xd3\x7a\x70\x5a\x74\x41\x11\x79\xbc\x31\x1b\x8d\x58\x0e\x70\x86\xf7\xac\x57\xe2\x15\xb0\x02\x92\xdf\x2e\x6f\xcf\xcc\xe8\x7e\xdf\x66\x49\x31\x04\x79\x6f\xc0\x10\xb0\x8a\x99\xcf\x1c\x85\xc2\xc1\x14\x6a\xcb\x85\x5b\xc3\x19\x9a\x89\x90\x0d\x3a\xd5\x98\x78\xa6\xb7\x5d\x1b\x29\x52\x57\xe8\x3d\x91\xaa\x8f\xe1\xb0\x2f\x91\xc1\xe1\x77\xa2\x9c\x5e\x4b\xe1\x30\x63\x9c\xb1\xd9\x41\x58\xc8\x24\xfa\x9e\xee\xb2\x94\xa7\x64\xb1\xb0\x9c\x76\x8b\x1a\x84\x47\xa1\xbc\x1d\xfd\x20\x0a\x26\xb8\x82\x38\xe5\x00\x23\xb9\xed\xbc\x66\xf6\x6e\xcd\xc6\xe9\xf6\xdf\xa9\x7c\x1e\xc6\x4e\xdd\xd0\x76\xb9\x43\x41\xc1\xe0\xa1\x4b\x01\xa9\x5f\x7c\x19\xd2\xfe\x5f\xda\xfe\x34\xf8\xbb\xa5\x2a\x0f\x86\xd1\xaa\x10\x24\x9c\x80\x53\x40\x44\x44\x22\x22\x10\x1c\x76\x4f\x06\x34\xaf\x38\x80\x26\x80\x51\x31\x08\xc7\x80\x3d\xef\x9e\x7b\xf7\xb0\xf7\xee\x46\x0d\x8a\xd1\xf0\x8a\x18\x8c\xa0\x24\xa0\x22\x41\x81\xa4\x0c\xc1\x89\x21\x46\x24\x22\x6a\x04\x13\x8e\xbe\x70\x1c\xa2\xa2\x38\xa0\x51\x70\x24\x0a\xe6\xad\x93\x94\x3e\x77\x79\x7f\xb8\xbf\x3c\xfb\xfb\xaa\x7f\xfd\xab\x7f\xbd\x57\xaf\x75\xad\x6b\x5d\xd7\x16\x40\x9e\x82\x71\xe8\x74\x18\xda\x83\x2c\x06\x3d\x2b\xb1\x85\x22\xee\xe9\x55\xaf\xfc\xbe\x64\x5e\xd5\xd2\xad\x04\x83\x6d\xca\x36\x2d\xf7\x8d\x07\x70\x0e\x32\x4b\x9e\x0a\xaf\x12\x23\x82\xd9\x89\x89\x62\x21\x80\xe3\x2a\x05\x01\xa6\x36\x66\xf6\xae\xe3\x29\xc3\x2a\xa3\x48\x0a\xcf\x93\xeb\xc8\x17\x74\x1e\x36\xe6\x30\x4e\x8f\x13\xca\x4a\x4d\x44\x0b\xad\xf4\xb4\x57\x89\x86\x9c\x5d\x8b\xa2\xd6\xb5\xf9\xe6\xb7\xd2\x5b\xc8\xac\x38\xbd\xd3\x08\x87\xd9\xf1\x5a\x09\xb6\x27\x80\x0b\x87\x80\xa5\x85\xa0\xf5\xac\x57\xad\x58\x13\x09\x6b\x26\x68\x39\x83\xa0\x5b\xd9\x00\x95\x05\xa4\xc4\x96\x3a\x91\x84\x03\x6c\x85\xf9\x13\xdd\xd5\x16\xab\xb5\x1f\xca\x9b\x7a\x19\xcb\xa0\x6a\x50\x4e\x33\xd0\x49\x51\x33\x35\x1e\x87\x54\x98\x33\x2a\x5b\x45\x45\x2b\xae\x76\x54\x98\x2a\x32\x7a\xc9\xb9\x0a\x5d\xa2\xe5\xaa\x33\x69\x3b\x61\x92\x9e\x8e\x73\x81\x2d\x24\xc1\xe3\x31\x46\x1a\xe9\x84\x36\xe8\xf5\xd8\x31\x92\xc3\x7b\x17\xa2\x4f\x08\x4c\x98\xc6\x65\xbc\x98\x2d\xa3\x56\x5a\x31\x99\x86\xbb\x12\x60\x64\xc6\x59\x97\x64\x3f\x77\x64\x85\x01\xac\x33\x6a\x55\x12\x21\x2c\xb1\x48\x34\x13\xba\x41\xf4\xf0\x2f\x93\xcf\xad\xf0\xee\x0b\x2a\x1f\x0f\xf4\x08\xaa\x9c\x3b\xc3\xe7\xd9\xe7\x89\xf3\xac\xcb\x82\x9b\x2f\x79\x1c\x02\x87\x85\x04\x2e\x77\x36\xfd\x41\x77\x0e\x46\xa9\xe5\x32\x63\xdc\xad\xb6\xe4\x35\xdc\xd4\x82\x9b\xaa\x66\x9b\x91\x0f\x64\xa3\xb6\x96\x23\xc7\xe7\x94\xcc\x6a\x66\x91\xb5\x39\x8c\xd6\x17\xe0\x2f\x22\x16\x31\xb0\xf1\xe8\x03\x41\x4b\x25\x8e\x8c\xae\x43\xa9\x59\x86\xa4\xd6\x10\xd7\xaa\x89\x59\xb0\x71\xb5\xec\x03\x20\x5a\x16\x31\xd3\x59\x2e\xd3\xf4\xdc\x35\x58\x35\xc1\x0d\xe2\x7a\x62\xc0\xb0\x23\xc6\x75\xa7\x74\xdb\xb4\x5a\xed\x82\xac\x56\x85\xa0\x8e\xf3\x96\x8e\xd4\xc1\x7a\x99\xc2\x7b\x11\xd5\x76\x9b\x37\x50\xc8\x84\x2a\x1e\x28\x00\x51\xfb\x26\xc1\xe4\xf9\x20\xd4\x5b\x0c\x36\x6a\x6c\x02\x66\x42\x7d\x80\x9d\xcd\xab\xd6\x11\x0a\x0d\xb1\x9f\xb4\x91\xb5\x46\xb4\x44\xcf\x91\xa8\x34\xb4\x95\xea\xc1\xc8\x7a\xb0\x03\x44\xa2\x42\xf2\xdd\x2f\xb1\x31\x3f\xc0\x55\x9e\x62\xd4\x84\x83\x6c\x1e\x6b\xdf\x58\x48\x12\x2d\x15\x0d\xef\xfe\x8f\xa1\x6b\x58\x32\xc8\x7b\x1d\x87\x4f\x73\x9a\x19\xd6\xe4\xc6\xb1\xf7\xab\x34\x2f\x28\x53\x14\x05\x08\xdd\xd2\xcb\xd1\x4a\x5b\x94\xb5\x78\x47\xeb\x76\xec\xb5\x2f\x69\xea\xa3\xc7\x4a\x11\x8a\x55\x09\xa6\x37\xbc\xe2\x71\xf3\x82\xdd\xad\x26\x68\x57\x4c\xbb\xd2\xbe\x1e\x21\xfb\x62\xe5\x81\x25\x6c\x99\xc0\x72\xf0\x7d\x53\x8c\x4d\xb4\xed\xfb\xda\xcb\xce\xdd\x0e\x08\x05\x4b\xc9\x3a\xe4\xcb\xbc\xb0\xab\x96\x43\x93\xa3\xf8\x79\xec\xd9\xf8\xe1\x16\x74\x64\x0c\x45\x60\x72\x75\xa8\x3b\x31\x25\x94\xc3\x1e\xaa\xe6\x6d\x09\x11\xef\x97\x69\x6c\xc5\x6a\x96\x1a\xcb\x51\xab\x9c\x41\xd6\xbd\xc0\x43\x79\x2f\xba\x5b\x48\xc5\x16\xe7\x49\x69\xc0\x1d\xad\xb1\xdc\x75\x48\x05\xb2\xcb\x36\x59\x07\x08\xac\x60\x53\x03\x53\x50\xec\xb0\xf8\x63\x51\xaa\xa4\xd3\x4b\xce\xc4\x31\xf3\xb2\xc3\x79\x14\x21\x9c\x5d\x0b\x3c\x34\x94\xe3\xa2\x33\xa1\x44\xb4\x5c\x2d\x60\x91\x2d\xbb\xc8\x28\x8f\xd4\xa0\xf0\x2d\x85\xb8\x89\x8a\x6d\xb7\x3a\x48\x27\xd3\x12\x09\x02\x69\x0c\x78\x99\x8f\x0b\xa5\x71\xe2\x43\x19\x3d\xa7\x88\x47\xf2\xeb\xbe\x24\x1e\xe9\x01\xe7\x42\x70\x2b\x9a\x66\x43\xb1\xf5\xdc\x54\x53\xe5\x59\x51\xe7\xe5\xaa\xf6\x5c\x22\x31\xd7\x20\xc2\x82\xbb\x76\x83\x6c\xd8\x69\x6c\x2b\xd7\x23\xe0\x26\xd8\xd6\x4b\x06\xcb\xa6\x4d\xd7\x67\x9d\xbe\x53\xc9\xf9\x55\xa2\x87\xe6\xe8\xa7\x2f\x70\x7a\xc0\x65\x42\x05\xef\xaa\xbb\x7d\x1b\xbc\x19\xb3\xca\x5c\x3d\x92\xc7\xb9\x9b\xba\x44\xb3\x56\xbd\x2c\xac\xd7\x9b\x31\x9f\x5b\xcd\xe4\x2f\x68\xbb\x06\x1a\xe0\x00\x10\xe7\x3a\x3d\x13\xb0\x75\x68\x25\xa6\xa0\x72\xc9\x30\x37\xf3\x48\x89\x75\xbf\xec\x4d\x68\xb1\x6c\xab\xc9\xd6\x5f\x25\x91\x1f\x19\xeb\xcc\x81\xdd\xea\x7d\x99\x7c\xdb\xa6\x51\x6a\x94\x85\x1d\xa8\xad\x6a\xf7\x98\x29\xc5\x92\x04\x27\x6e\x64\xdb\x21\x4c\xcb\x55\x06\xca\x4c\xb3\xa6\x43\x3f\x85\x57\xc2\xee\x54\x0f\x47\xf2\xe2\xbb\x2c\x54\x93\xc5\xca\x7d\x82\x03\x43\x91\xc3\x19\x01\x5b\x11\x6c\xc6\xd4\xab\xc8\x56\xb3\xcf\x56\x0e\x28\x07\x42\x91\x99\x39\xe7\x0a\x24\x5e\xd4\x99\x92\xcc\xab\xda\xfa\xea\x11\xd3\x72\xaf\x07\x5d\x55\x4e\x2d\xfb\xab\xcc\xfb\xa8\xe3\x3d\xee\x0a\x2e\x3e\x45\x10\x67\xce\xbc\x99\x16\xc8\x19\x6c\xaa\x4a\x0b\x3a\x13\x36\x54\x56\x94\x04\x33\xa3\x43\x5f\xf7\xcb\x88\x10\x27\xed\x16\xe3\x6a\x42\xc2\x38\x9c\x49\x53\x86\x50\xde\x4f\xd6\x5b\xef\x08\xfa\x21\xfc\x20\xfb\x10\x91\xcd\xdc\x27\x3c\x6b\xbc\x8c\x73\x1a\x97\x95\xb3\x82\x60\xa8\xfb\x82\x0e\x82\xe3\x19\xd0\xbe\x2f\xcd\x67\xb7\xee\x53\xea\x79\x2c\x05\x00\x80\x81\x3c\x4f\xe2\x89\x80\xf5\xaa\xa9\xa8\x39\xa3\x41\x46\x36\x8f\xd2\x18\x13\xca\xa0\x99\x94\x4b\x6c\x90\x8d\x53\xcc\x7e\x22\x4a\x55\xcc\x87\xc6\x40\x4d\x6d\xfc\xc6\xca\xcd\xca\x56\xef\x7c\xfa\x23\xe5\x03\x9e\xd9\x9e\xf8\xb2\xf1\xbb\x1f\xfc\xf6\x4f\xfa\x37\xcf\xf9\xb1\x6f\x7f\xc4\xf7\x3e\xff\x2b\xb0\x7a\xcd\x67\xbf\xe9\x5b\xfe\xe9\xc7\xe3\xaf\xfe\x6b\x64\xab\xfa\x9f\x3f\xf8\x67\x9e\xf8\xf8\x7b\xbf\xe5\x1f\xbe\xfe\x5f\xe6\xef\xfd\x3b\x2f\x99\xf7\x79\xc7\xef\xbf\xfe\x8f\x3e\xff\xfb\x5f\x71\xe7\x9f\xfd\xe2\x8f\xbe\xe3\xfb\xbf\xf3\x79\x37\x84\xfe\xc9\x27\xbf\xf5\xc9\xf0\x77\x9f\xfd\xaa\x6f\x7b\xc8\xbb\x3e\x7b\xd9\x1f\xfd\xd2\xbf\xf3\xa3\xef\xfd\xca\xaf\xfb\x4f\xdf\x52\x9f\xfb\xec\x3b\x1e\xfe\xeb\xcf\xfe\xbb\x37\x32\xa8\xbe\xe7\x9e\xcf\x78\xd3\x5b\xff\xcd\x0f\xde\xf1\x8d\xdf\xc5\xbe\xe0\x8f\xde\xf7\xc9\xf8\x87\x1f\xfc\xa8\x57\x3f\x5a\x7c\x26\x7c\xc0\x0f\xbd\xf8\x4f\x1e\x74\xdb\x9f\x3d\xe9\x86\xd0\xfc\x3b\x2f\x16\x1f\xfc\xda\x9f\x7c\xe2\xf8\xed\x9f\xfe\xfc\xb7\xbd\xe3\xe1\x6f\x7a\xc7\xeb\xee\x38\xff\xd5\x37\x7d\xe9\xbd\xde\xf8\xd3\xdf\xf9\xfc\x8f\x78\xd7\xe3\x6e\x94\xab\x7a\xc2\xab\xff\xe5\xfa\xe9\xdf\xf9\x4f\x1f\x7f\xbf\xef\xbd\xc7\x63\x1f\xfb\x37\xff\xf0\x7f\x7e\xe1\x33\xbe\xe5\x8e\x47\xfe\xff\x3e\xec\xe3\x5e\xfa\xde\x3f\xf9\xb4\x17\x3c\xec\xde\xaf\xbe\x21\xf4\xd7\x1e\xfb\x41\xbf\xf9\x91\xaf\xf9\x86\xc7\xde\xfe\x6d\x4f\x78\xe0\x93\x7f\xee\xdd\x3f\xf5\xb0\xcf\x78\xcd\xe3\x5f\xf5\x77\xbe\xea\x95\xcf\xb9\xf3\x8b\x3e\xf3\x51\xbf\xf9\xc4\x77\xde\x10\x1a\xdf\xf9\xd0\x7b\xfc\xe0\x27\x3d\xd8\xbe\xe4\x21\xe4\xa9\x8f\x7e\xc2\xcb\x5e\xf9\xed\x1f\xf7\xa4\x76\xfb\xb3\xbe\xfd\xc1\xfc\x13\x3f\xe2\xd3\xef\x3c\x5e\x7b\xe7\x0d\xa1\xdb\x3b\xde\xf4\xbe\x57\x0a\xfe\x15\x5f\xf7\x0b\x4f\xf9\xe9\x57\x7d\xcc\xaf\xbf\x59\xdf\xf6\xb4\x27\xbd\xe4\xf3\xed\xeb\x1e\xe9\x5e\xf9\x35\xf6\x73\xfe\xc7\x2f\xfd\x15\xd9\xea\x56\xa7\x7a\x41\xf9\xc9\xc7\xe8\x33\x77\x9e\x6a\x54\xb0\xc7\xa6\x37\x5f\xf0\xa4\x63\x6b\x0a\xfb\x48\x13\xe8\xb1\xf1\x82\xec\xd8\x28\x82\x65\x6f\x9b\xbd\x4c\x58\x75\xeb\x86\x28\xe1\x12\x61\x4b\x6e\xdc\x40\x27\x35\x3b\xb7\x63\xbf\xab\x13\xad\x38\xb9\xba\xd0\x62\xa6\x9f\x0e\x43\xe7\x95\x48\xcb\x55\x85\x30\x77\x8b\x0c\x83\x3b\xd4\x56\x83\xa3\x88\x5d\x65\xca\xa4\x3d\x3c\xe7\x30\xaf\x70\x10\x49\x22\xd4\x1e\x15\xd4\x4b\xb5\x1b\x65\x57\x8d\x61\x19\xe9\xb3\x32\x4c\xc4\xec\x42\x6e\xa9\x36\x76\xc4\xd9\xfa\x58\x61\x85\x14\x27\xe0\x68\xe2\xc2\x64\xa5\x7c\x41\x98\xb5\xd4\xb1\xbf\x0a\x02\x8c\xe1\x08\x6c\x8b\xbe\x3a\xba\xe5\xf5\xc8\xb5\xa3\x33\x31\x9a\x1b\x49\xc7\x99\x97\xba\xa1\x30\xd7\x7a\x06\x15\xe2\x80\xbd\xd4\x59\xae\x22\x43\x43\x94\x52\xd6\x81\x1d\x25\xaf\x54\xf7\xaa\x37\xc4\x74\xda\x64\xc0\x90\xc5\xc0\x56\xab\xbd\x70\x14\x1a\xae\x8a\x84\xc8\x8e\x32\xae\xf2\x59\xb3\x6b\xd3\xdb\x5d\x55\x8a\x82\x15\x2f\x13\x70\xed\x84\x61\x65\x0f\xa0\xd3\x6a\x0b\x6f\x84\x68\x62\x19\xa5\x7b\x9d\xce\x45\xbc\x6d\x57\x0d\x84\x9b\x4c\x66\x27\x53\x4b\x5d\x57\xb7\x44\x19\x5a\xd7\x0a\xd6\xc3\xf0\xb9\xda\x51\x92\x07\xd9\x53\xd1\x59\x1c\x6d\x97\x76\xf7\xa0\xdc\xac\xea\x7c\xab\x3c\x7d\x85\xa4\xbc\xc6\xa9\x7b\xbe\x15\xdf\x77\xb1\xed\xbb\xd9\x0c\x97\xb8\x2b\x4e\x9a\x96\x62\xd9\xbc\x56\x39\xe2\xed\x64\x2b\x05\x20\x73\xe6\xd9\x55\x20\x93\xd7\x1d\xcb\x18\x07\x50\x67\x95\x07\x23\x40\x88\x2d\x4f\xd8\x88\xd1\x69\x95\x50\xb3\x00\xc6\xd6\x4b\xe8\x28\x67\x1e\xd8\x09\x97\xab\x3c\xc5\xd6\x32\xa4\xda\x9d\x10\xf8\xc8\x01\x10\xe3\x49\x50\x47\x1f\x08\xf5\x0d\x16\x13\x76\x20\xc6\x9c\x6d\x71\x7d\x21\x67\x82\x65\x49\x57\x11\xd0\x18\x1c\x18\xfa\x04\x4e\x4d\x64\x49\x03\xf9\x93\x42\x4a\x5b\x5f\x83\x42\x30\x48\xb5\x86\x75\xd8\x82\xe0\x46\xd2\x88\x22\x83\x61\xec\x75\x3c\xdc\x63\x1a\xd5\x81\x19\x51\x0d\x9e\xad\x8c\x26\x89\x6d\xc3\xac\x16\x9c\x77\x7c\x9e\x2c\x1c\x66\x2c\xb5\xa0\x3d\x49\x2e\xcf\x61\xae\xe2\x3b\xf8\x7a\x62\x66\xf0\x0e\x3b\x06\xd8\xb9\x85\xec\x63\xf4\xa8\xc4\xc0\x63\x59\xb7\xb5\x16\x6c\x45\x33\x76\x26\xb9\x81\x52\x28\x52\x57\x2d\x7b\xd3\x2d\xa3\x64\x3a\x5b\x32\x9e\x88\x0c\x3f\x92\xc6\x64\xa4\x32\x97\x03\x70\x4c\xcc\x9e\xa8\x90\xc7\xba\x34\xce\xa0\x44\x25\x05\x5e\xae\x62\x04\xd7\x95\x8d\x6d\xce\x62\x41\x5b\x16\xa6\xb4\x4a\xc0\xf2\xe0\x7a\x1e\xe7\x02\xb3\x6a\x14\xb4\xce\x00\x5a\x49\xdd\x4b\x33\x2e\x82\x1b\x94\x26\xfe\x32\xf9\xdc\xaa\xf2\xbb\x42\x5c\x46\x44\xbd\x40\xb8\x8f\xd9\xd8\xca\xee\xfa\xf2\xc4\x49\x59\x71\x15\x42\x54\x76\x51\xb9\x65\x9e\x29\xa4\x81\x55\x11\x25\xbf\xf2\xcb\x10\xee\x82\x75\x95\xd8\xe8\xb0\xbb\xc3\x02\xea\x9a\x44\xc7\x39\x0e\x84\x09\x9d\x8b\x90\xd6\x68\x02\x42\xe9\x08\xac\x4b\x22\xfe\x6c\xe6\x32\xf9\x12\x95\xdd\xa0\xe7\x3c\x3c\xc8\x7a\x42\x3f\xf7\xd6\x36\xa7\x50\xf6\xc1\xce\x39\x16\x84\x44\x59\x07\x30\xa1\x77\x55\xb6\x1a\xc3\x79\x19\x91\xd9\x40\x75\xac\xae\x0f\xa6\xce\x75\xb4\xb9\x82\x33\x9e\x0a\x31\x14\x30\xc3\x85\x30\xb9\x29\x31\x62\xc7\x6d\xa7\x47\x4e\xd1\xf0\xbc\x5c\xf5\xeb\x6c\x2b\x3a\x76\xb9\xcd\x6c\xc2\x91\x52\xc0\xc7\xa2\xb1\x32\xc9\xd7\x46\xc1\x72\x1c\xfc\xd0\x36\x73\x20\x96\x8a\x00\xcb\x48\x79\x29\xae\x42\xfd\x93\xe1\xb2\x23\x52\xe3\x62\xe2\x49\xed\xaa\x6b\x5b\xb4\x6c\x33\x55\xc3\xf4\x09\x63\xec\xca\x77\x62\x41\x56\x5b\xd3\xdd\x6f\xee\xaa\x35\x30\x46\xb6\x52\xc5\xc6\xe4\x96\x7b\xde\x28\xb1\xbb\xf1\x4d\x43\x8e\x65\xe6\xb0\x30\x84\x49\x11\xc6\xd8\xd4\x68\xac\x80\xcf\xc8\xf8\x55\x42\x90\x4c\x71\x5a\xe9\x22\x0f\xb1\x09\x27\x4f\x4f\xd6\x33\xf0\x68\xf1\xb0\x0a\x33\x1c\x16\xa9\xa2\x39\x78\x87\xa4\x34\x71\x1c\x51\x22\x34\xc0\x4d\xc9\xe7\x56\xbd\xe4\x15\x4c\x4f\x3d\x1a\x57\x0d\x9d\x7e\x55\x56\x6a\xd0\x51\x22\x64\xfa\xda\x2d\xde\xc4\x29\x8e\xfd\x1c\x3b\xcd\x6b\xdd\x17\xdd\x16\x04\x96\x76\x99\x68\x79\x20\xcd\x06\x1b\x4e\x46\x10\x90\xd4\x13\x89\xda\x41\x98\x62\x54\x89\x62\x77\x15\xb9\x3c\xb9\xa5\xce\xd1\xd2\x0c\x8a\x3b\xc1\x57\x39\x34\x51\x1e\xd9\xb0\xeb\xac\xba\xaf\xeb\x02\xed\xd9\xf2\xc9\x7c\xd9\xc8\xe2\x51\xd9\xa8\xc9\xf9\xdc\x20\xaf\xcd\x2a\xed\xbd\xcb\x62\x31\xe3\x2a\x34\x17\xd7\x84\x5c\xd5\xd6\xed\xc4\x8b\xc9\xce\xd6\xf6\xb8\x59\x0b\x0f\xb4\x9f\xcb\xbe\x9e\x4a\xdb\xd5\x6d\xe8\x24\x07\x6d\x9a\xa0\x24\xc0\x55\x34\xf3\x01\xc9\x1c\x18\x75\x45\x07\x34\xa7\x8d\x3c\xa1\xc4\x80\x42\xeb\x5d\xd5\xbe\xdf\x4b\x5f\x0f\x68\x61\x24\x9e\x5b\xb2\xae\x74\xac\xf3\xaa\xff\x84\xc9\x12\xb6\x4d\xf5\x94\xb1\xa6\xbb\x59\xd1\x6e\x47\x2f\xce\x2c\x6c\x59\x85\x59\xf5\x16\x81\x56\xc6\xaf\x95\xab\x96\x04\x25\x99\x5e\x65\xde\x07\x1d\x51\x1d\x66\x19\x67\xc7\x19\xed\x13\xb4\xc6\xca\xd9\xf7\xa3\xc7\x18\x72\xea\x3a\xcb\xe5\x00\x04\x24\x06\x4d\x63\x1d\x2f\xf4\x32\x07\x96\xd6\xf6\xb4\xf1\xd8\x1a\xcc\x22\xe4\xb3\x4a\x41\x41\xaa\x21\x30\xa0\x3b\xd2\x7c\x77\xf2\x98\x88\x27\x13\x2b\xca\x0d\xa3\xad\xdd\x5c\xf9\xdc\x0a\x9d\xba\x42\xcd\x1c\xda\xa3\x7a\x99\x1c\xed\x5d\x0c\xc7\x27\xec\x29\xf1\x0a\xf1\x62\xe1\x40\xb3\x6c\x46\xed\xba\x87\x7d\x48\x3b\x7a\x96\x28\xd6\xab\x16\x56\x57\x7b\x90\x02\x85\xa5\x69\x4b\xc4\x1c\xab\x80\x8a\x6a\x6a\x75\xf5\x0e\xd9\x85\x1f\x75\x5d\xca\xc9\x17\x9c\x8f\xdc\x4d\x3f\xfb\x39\xaf\x72\xd6\x88\x99\x35\xdc\x9c\x80\x5a\x82\xbe\xfa\x64\x7d\xf0\x28\xc3\xa6\x7b\x8d\x03\x60\x5e\x13\xdb\xfa\x8a\xd2\x36\x44\x65\x1c\xc0\x7c\x99\x8d\xe0\xb6\xc0\x45\x45\x5e\xf4\x3a\xb1\x64\x8a\xea\x72\x10\xbf\x42\x4c\x5d\x59\x11\x52\x2d\x32\xc5\xb0\xef\x83\x22\x54\xb1\x35\xd0\xb0\xab\x34\x2f\x50\x39\x14\xf1\x67\x94\x27\x8f\x09\xe2\xc9\x71\x4d\xae\x10\x6d\x81\xdc\x71\xb3\xee\x90\x16\x13\x80\x61\x23\x08\x8c\x30\xcb\x04\x57\x55\x83\xde\xb8\x15\x92\xb1\x1f\x65\x63\xbe\xec\x6b\xd1\x53\xb1\xe4\xb2\x0e\x02\x4d\xcd\x52\xdc\x5a\x90\x9c\xdd\x75\x83\x35\x3e\x81\x5f\xd9\x55\x28\xa5\x55\x62\x02\x97\x96\x7d\xac\x11\x8e\x26\x98\x33\xd4\xf7\x33\x57\x20\x79\x1a\xe6\x58\x80\xd7\xea\xdc\x52\xdc\xaa\xdc\x8b\x73\x7e\xb9\xe8\xc6\x32\x0d\x62\xe8\xc0\x6a\x7b\xc2\x06\xe0\x34\x35\x73\x42\xdc\x02\xa6\x43\x53\x46\x6c\x91\x86\x42\xce\xbe\x2d\xa2\x47\x06\x45\x22\xdb\xcd\x64\xab\x5b\xe1\xdd\x57\xd0\xcc\x33\x24\xc1\xd9\x21\x72\xe6\x66\xc3\x0c\x75\x9b\x51\x12\x21\x1c\x41\x00\x24\xfa\x3c\xb3\x28\xa1\x20\xc5\x0e\x96\xcd\xc6\xe2\xbc\x4a\x3b\x09\x91\xb4\xf5\xea\xcc\xe0\x84\x55\x35\x77\x90\x63\xa3\x67\xd9\xbb\x34\x6b\x07\x78\x8d\x0d\x9e\x11\x70\x1e\x80\x5c\x61\x22\xca\x6e\x57\xcd\xf6\x17\x6d\x9d\x32\x55\xd1\xa2\xb6\x72\xf8\xb4\xa6\x7d\x75\x36\x96\x4a\x85\x91\x43\xea\xa0\xbd\xc7\xc1\x9f\x47\x32\x0c\xc9\x86\xa9\xb9\x0a\xfa\x3e\xb3\x91\x2c\xb4\x74\xf2\xb1\x85\x2a\x4f\xd5\x3d\xe7\xf4\x38\x56\xb8\x60\x03\xed\xd9\xb7\xbb\xaa\x7b\x67\x64\x3d\x57\xae\xc2\x61\xaf\x1a\x07\x50\xbf\xc4\xe4\x66\x35\xd2\x2a\x1b\x76\xc7\x83\x9c\xfb\xc9\xe2\x96\xb7\xb5\x07\x66\xb2\x6c\x8d\xa2\x89\x01\x90\xd3\x8b\x98\xc3\x9c\x57\x35\x3b\xc7\x14\x42\x9c\xba\x86\x55\x48\xe4\xb6\x51\xec\xda\x36\xc0\xea\x2c\xc5\x3a\xd5\x63\x5f\x18\x6e\x24\x1e\x55\x54\x6d\x8f\xc6\x28\xbd\x4a\xf3\xc2\xcd\x71\x58\xa4\x8f\x25\x14\x1f\xd3\xb9\xd6\x03\x67\xe7\x12\x0a\x84\x62\xd8\x59\x06\x4c\x02\x27\x77\xb2\x1e\x6b\x39\x61\xa7\xdb\x65\x34\x73\xb9\xd4\xea\x31\x58\x16\x02\xaa\x8b\xf8\x84\xad\x32\xa5\x40\x8e\x25\x86\x28\x57\xa1\x67\xf6\x9a\xba\x6e\xcf\x01\x51\x74\x41\x2e\x37\x27\x9f\x5b\x4d\xd0\x2e\xc0\x7c\x76\x86\x8d\xda\x7a\x1d\x52\xb0\x1c\x35\x26\x81\xac\xc8\x3b\xa8\xc0\xa6\xe9\x69\xb6\xb4\xa6\xcd\x66\xb9\xef\xd6\x6e\x5a\xd7\xcd\x5e\xf5\xa1\x51\xc7\x64\x1e\xb4\x95\xea\x43\xe1\x7c\x75\xa9\x50\x32\x76\x6d\x8e\xd3\x80\x91\xda\x00\x56\x64\xba\xae\x62\x30\xdb\x7d\x5d\x93\x30\x57\x91\x68\xda\x39\x81\xd1\x13\x2a\x43\xaa\x5e\x40\x8c\x01\x7b\xe7\x59\x1f\xd0\x20\xc4\x90\xe1\xc7\x42\x0f\x41\x4e\x7c\xe0\xb3\xd5\xb4\x83\xab\xfc\x39\x28\xee\x7b\x67\x2e\x2c\x2d\x7a\x97\xd6\x85\x58\x48\xdc\xc1\x82\x8d\xd4\x5a\x0a\x3a\x74\x76\x54\x2d\xd5\xa4\x4a\x8f\x39\x37\xa1\xaf\x3a\x13\xb6\xef\x4c\x77\x99\xa7\xf6\x89\x25\x82\x40\xdb\x36\x08\xf7\x69\x19\x82\x83\x75\xb3\x47\xce\x25\x05\x56\xb9\x78\x28\x15\x90\xe0\x97\xed\xb8\xe0\xb4\xc0\xde\x58\x0e\x27\xdb\xc0\x3e\x80\xde\xa3\x9e\xa3\x0d\x3f\x10\x57\x74\x04\x12\x39\x77\x1a\x54\xa3\x17\x04\xb5\x02\xe7\x55\x3e\x6b\x4c\x56\x90\x8f\x3c\x31\xe4\x75\xa5\xcb\xba\x79\xd0\xe1\xca\x0f\x34\x31\x6b\xa2\x11\xe8\x97\x7d\x11\x47\xf0\x71\x1d\xc7\x3e\xf4\x1e\xaf\x5a\x09\xa5\xbc\x15\x94\xc6\xa6\x86\x5e\xd7\x55\x65\x82\x19\x6d\x91\x5b\x17\xa4\x63\xd6\x36\x8b\x0c\xc5\xa4\x99\x73\x73\x62\xf1\x41\x3b\xbd\xec\x37\x25\x9f\x5b\xcd\xe4\xaf\x60\x7a\x2e\x55\xd5\x35\x0d\x5c\x43\x8b\x1b\x96\xd0\xbb\x75\x77\xc6\xaa\x4c\x52\x5e\x37\x25\x08\xdd\x26\xc2\x8a\xe1\xa5\xf6\x9d\xd2\x6d\x5e\x45\x5d\x31\x27\x44\x8a\x1f\x66\x21\x19\x2e\x08\xef\x92\xf9\x21\xf6\x75\xab\x06\x99\xa4\x4f\x83\xf6\x2d\x1a\x2d\x02\x56\x2e\x81\x29\x70\xba\x6a\x71\x8a\x61\xac\x34\x64\xf1\xb4\x74\x01\x18\xaf\x3b\x9f\xb1\xa1\x1a\x70\x4d\x81\x54\x32\x97\xd5\xed\x13\x62\x94\x3d\x17\x94\x76\x21\xbc\xbd\xaa\xd9\xe9\x94\x1f\x49\xf8\x55\xa1\xc3\xcb\x29\x00\x3b\x0d\x6a\xa7\x6a\xad\xc6\x25\x4c\x16\xe1\xc2\x49\x8c\x72\x72\x3e\xe8\x01\x92\x30\x97\x39\xda\xc7\x5c\xc2\xc9\xd6\x1e\xa3\x24\x68\x8f\x7e\x20\x4b\x09\xe0\x80\x96\xa3\x32\xbc\x9f\x54\x7b\x89\x32\x5a\x63\x0a\x7e\x0c\x3c\xe4\x72\x95\xb5\x62\xc4\x05\x06\xc9\x18\xdd\xbb\x4f\x48\x42\x2e\x0e\x02\xb6\xa4\x92\x1d\xab\xb1\xe4\xe8\x92\x85\xe2\x18\x3d\xfc\x22\xee\xfa\xbd\xd0\x65\x72\xcf\x28\x3b\x37\x3d\xc2\xdb\xd6\xb3\x0b\x8d\x26\x6a\xe5\x91\x90\x3e\x67\x9d\x87\x23\x7d\x5f\x51\x95\xa5\x11\xc0\x30\x77\xeb\x8a\x1c\xbf\x6c\xbb\x37\x74\x77\x42\xc2\x95\x45\x1b\xe4\x3a\xd5\xa9\xe6\xb9\xe5\x64\xd3\xd2\xb8\x5e\xc8\xb4\x55\x01\x41\x61\x68\x2b\xa4\x1b\x74\xbc\xfd\x3f\x4d\xf1\xdb\x3f\xe8\xff\x26\x9f\xef\xfd\xc2\x37\x7c\xd8\xef\x3f\xfd\x4f\xef\xf9\xfa\x3f\x7a\xf9\x8b\xb2\x7c\xe3\xa7\xd6\x27\xde\xfd\x37\x97\x17\xfc\xd7\xff\xef\xaf\x3d\x6d\xf9\xd0\x37\xbc\xee\x85\xf5\x59\x8f\xb9\xf7\xd7\xde\xc0\x1f\xfa\x85\x0f\xdc\x79\x47\xfa\x88\x2f\xff\xfd\x67\x6f\xbf\xf2\x35\xff\xe9\x8b\x5f\xfe\x25\x9f\xa7\x7f\xf2\xd7\x9e\xfc\xc3\x0f\xba\xf3\xcf\x1f\xff\x1f\xfa\xbb\xdf\xf6\xb8\x47\xde\x10\xfa\x33\x3f\xf1\x13\x9f\xfa\xdc\x47\x3d\xef\xb6\x07\xfc\xb3\x7f\xff\x1d\xcf\xbc\xf7\x1f\x7c\xfc\x6f\x7f\xf3\x1d\xdf\xf5\xe0\x1f\x7a\xd5\xf8\xf3\xdb\x7f\xf4\x97\xbe\xe8\x2b\xde\xf6\xe4\x1b\x42\x7f\xfa\x7f\x89\xdf\xfe\xf9\x57\xfe\xc0\x2f\xb9\x6f\x7a\xd6\xdf\xff\xf9\x57\x7e\xfe\x97\x7e\xc9\xe3\x9f\xf6\xf1\x3f\x9d\xbe\xe5\xe5\x2f\xfd\xf1\x7b\x7f\xdf\xc3\x86\x78\xdb\x0d\xa1\x1f\xfb\x5d\x4f\x5c\x7f\xf2\x99\xcb\xed\x5f\x75\x2f\xf1\xae\x7b\xff\xd9\xab\x1f\x77\xdb\x9b\xef\xff\x88\x0f\x7c\xef\x47\xbf\xf6\x83\xe9\xcf\x7f\xdd\xaf\xfc\xcf\xf7\x3c\xe5\x99\x7f\xc9\x22\xbb\xd5\x7f\xfa\xd7\x58\x64\x7f\xff\xd9\xaf\xbe\xe7\xeb\x1e\xf0\x49\xb7\xbf\x0e\xfe\xc2\x57\xde\x76\xe7\x6b\x3e\xe8\x3b\x7f\xe4\xe9\xdb\xed\xcf\x98\x2f\xff\xfd\xcf\xf8\x9e\x77\xbf\xfb\x39\x3f\xf3\x9a\x1b\x42\xff\xe5\xdf\xf8\xad\x7f\xf0\x31\x3f\xf7\x65\xee\x4b\xff\xe3\x67\xbf\x76\xb9\xe3\x4d\xef\xb8\xe3\x5f\x7c\xca\x93\x7f\xfb\x2f\x5e\x2c\xdf\x60\xfe\xd7\x5b\x9f\x7f\xff\x57\x7c\xdd\x0d\xa1\xf6\x15\x9f\xf7\xb5\x9f\xf0\xc7\x9f\x7a\x8f\xf8\xcc\x07\xdd\xe3\xa1\xbf\xf0\x8a\xe5\xdb\xd6\x77\x7d\xd6\x93\xff\xe0\xbe\x6f\xfd\xd8\x17\xbe\x32\x3f\xfc\x3d\x8f\x93\x37\x84\x7e\xe1\x37\xae\x1f\xf5\x75\x77\xff\xc7\x5f\xf5\x31\x5f\xf6\x3d\xf7\x7f\xea\x1d\xf7\xd9\xbf\xfa\x93\x1e\xf3\xd0\xfb\x7d\xcc\x9f\xdc\x5d\x7f\xff\xd7\xfc\xe1\x77\x3e\x38\x3e\xfe\x86\x50\xf3\xc0\x37\x1c\xcf\x43\xff\xec\x8d\x1f\x78\xc7\x2f\xff\xa3\x17\xfd\xd8\x03\xb6\x5f\x5e\xfe\xf1\xfa\xcc\xaf\x7f\xd9\x47\x1a\x1d\x3f\xed\x5d\xbf\xf3\x9e\x1f\xb9\x21\xf4\x99\x2f\x7a\xde\x37\xbe\xfc\x53\xda\xe3\xf9\xe3\x7f\xe3\x77\xbe\xfc\x3b\x9e\xf5\xb1\xcf\xfe\x9e\x17\xbd\xf7\x07\x3f\xe1\x55\x1f\xff\xf3\x4f\x7f\xea\xfd\x7f\xfc\xdf\xbf\xf0\x4b\x6e\x08\xfd\xfe\xfa\x8b\x3f\xb8\xff\x93\x97\xbf\xec\xb6\x7b\xf1\xa7\x7c\xf6\x9f\x3e\xfd\x5e\xaf\x7c\xef\x73\xef\xf5\xbc\x17\x7c\xee\xbf\x7f\x40\xfa\x86\x47\x3d\xf8\x19\x77\xfb\xf5\x1b\x42\xc3\x7f\x7f\x1a\xfa\x57\x6f\x79\xe9\xcb\x3f\x05\xfc\xea\xfe\xb8\x1f\xbf\xdb\x53\xee\xf1\xf9\xef\xbe\xdf\xd3\xff\xc5\x2f\xfd\xd6\x83\xd3\x0b\x9f\xee\x1e\xf5\x6b\x0f\xfc\x2b\x16\xd9\xad\x4e\xf5\x82\xa7\x2d\x48\x36\xf3\x6c\x68\x3f\x9c\x14\x46\xed\x0d\xcd\x7d\x63\x96\x9d\x14\x9d\x10\xef\x0c\x53\x2e\xcd\xa4\x0b\x13\x0a\xed\x89\x6e\xea\x32\xa9\xc4\x5a\xb1\x5f\xe8\x7e\x9e\xdb\xa2\x21\x59\x1b\xb2\xa8\xb0\x8a\x13\x2a\xae\x4a\x9d\x3c\xd2\x98\x6f\xd5\x8d\x35\x96\x21\x83\xa0\x76\xbb\xca\xf6\x40\x11\x69\x54\xe3\xd8\x64\xd8\x9d\x77\xe8\xd0\x44\x21\xb8\x51\x2d\x16\x08\x14\x5d\x5d\x37\xb6\x64\x97\xf2\x64\x70\x63\xc4\x53\x7b\x15\xd0\x51\x57\x99\xe7\xe8\xd9\xd0\xd2\x24\xa2\x39\xac\x8b\x46\x3a\x26\xb6\xb9\xb3\x8d\x61\xb8\xb0\xa5\x1e\xae\xd0\x73\x18\xd8\xa8\x4d\xcb\x55\x6d\x63\x3b\x78\xf6\xf9\x3c\x98\x11\xa1\x2e\x9a\xc0\xc0\xe9\x29\x3a\x0d\x7b\xdd\x52\x06\xde\x0e\xba\x48\xdb\x24\x0b\xeb\x44\x67\x16\xfd\x32\xa0\xa3\x9d\x27\x4d\x42\xc1\x8a\x10\xc4\x9b\xb3\x22\xc7\xb4\x3a\xa0\x5c\x91\x61\x0b\x63\x47\x20\x9a\x4e\xcd\xe9\xc5\x9e\xbb\x1c\x63\xd6\xab\x9e\x36\x5e\x0c\x0a\x1b\x02\x4e\x2d\xc8\x4f\x1c\xa9\x9d\x6a\x1b\x0c\x44\x9e\x40\x65\x2d\x95\x80\x03\xf2\xeb\xe1\x42\x75\x30\xe6\x24\xdd\x55\xce\x49\xc7\x74\xad\x3a\x65\x78\xac\x93\x04\x08\x79\x27\xb4\x39\x43\xb6\x49\xb6\xb3\xa0\x90\xe6\x70\x63\x74\x1b\xf7\x6e\x09\x4a\x49\xdd\xf0\xdc\xff\x65\xf2\xb9\x55\x9e\xbe\x20\xf9\x88\xe9\xe0\xaa\x6d\x38\x93\x5b\x90\x5c\x4a\x5f\x8b\x4b\x73\x19\xeb\xae\x93\x43\x05\xc9\x6d\xdd\x48\xf5\x43\x0c\x0a\xcf\x4c\x22\x2a\x57\x7d\xf2\xa5\x1d\xc9\xe1\xa3\xb7\x48\x52\x46\xa3\x9c\xcc\xca\xac\x07\x44\x3b\xb6\x8d\x23\x16\x72\xdd\x61\x29\xb6\x40\x81\xe9\x92\x9b\xbf\x6c\x2c\xbe\xae\x84\xcc\x53\x09\x7b\xae\xda\x88\x54\x65\x2c\x7d\x67\xa6\x15\x85\xdb\x89\x12\x8e\xbb\x40\x30\x92\xb5\x93\xec\xda\x20\xf1\x6c\x57\x41\xf7\x08\x9e\x55\x56\x49\x23\x29\x9b\xdd\x55\x14\xf0\xdc\xc0\xc2\x61\x91\xa2\x1e\x66\xe3\x70\x7a\x8c\x25\x43\x20\xa2\xb3\xe5\xe5\x34\xe6\xa2\xa9\x2e\x13\x02\xd8\x53\x65\xb8\xa8\xe0\x70\x57\x26\xc5\x51\xb3\x84\x03\x6b\x4d\x0b\xa6\x14\xed\x09\x3a\x08\x2d\x99\x48\x15\x37\x48\x75\x57\x11\x47\x77\x2c\x56\x14\xf9\xc6\x92\xda\xb2\x91\x6c\x07\x80\x51\xc5\xdb\x3c\x18\xce\x0c\xcb\x22\xb8\xef\x16\xad\x47\xc9\xfb\x18\x2a\x9d\x97\x8d\x78\xce\x78\x82\xa4\xd7\xd9\x20\xa3\x8d\x57\x2f\xb2\x5f\x1c\x23\x4e\xca\x02\x81\xdd\xc3\xc1\x15\x41\x2e\x58\xac\xcc\xd1\x93\x6a\x7d\xb9\xea\xc6\x36\x29\xe4\xa1\x0a\x2b\x4a\xed\x9b\x1b\x64\x0b\x20\x3a\x8f\x24\xb7\x1b\xea\x08\x73\x12\x42\x3f\xa1\x5f\x37\x55\x16\xe9\xf5\x72\xb8\x9b\x37\xa8\x6e\x55\xf9\x5d\x61\xce\x0a\xa2\xe2\x5e\x0f\x64\xd6\x7a\x6e\xd6\x74\x19\x8f\xa3\xae\x7a\xf7\x84\x89\x54\xcf\xe3\x8c\x6b\x3f\x09\xc0\x64\x91\xd3\x9d\xc4\x6f\x57\x65\xef\x21\x07\xe5\xfb\x61\x01\xdd\x36\xca\xd7\x68\x36\xbe\x02\x4b\x1a\x39\xe3\x6c\xdd\x1d\xc7\xbe\x91\x2d\x7a\x46\x20\xdc\xd3\xae\x21\x30\x57\x49\x76\x51\xcb\x69\xd4\x4d\xc1\x24\xd4\x11\xb0\x69\x4c\xac\x87\xca\x55\x94\x04\xa5\x52\xda\x92\x2d\xf2\xc3\x78\xce\x3b\x71\x2a\x83\xd3\x5d\x85\x14\x99\x4c\x25\x3f\x3b\x4d\x68\x3d\x88\x24\x64\x73\x69\x13\xd4\x4b\x35\xc4\x8e\xe2\x58\x6a\x87\xfa\xb0\x6e\xdf\x08\x00\x4b\xd2\xa4\xb0\xab\xf6\xe9\x73\xad\x52\xa0\xc2\x00\x48\x41\x2e\x27\xe8\x6e\x2f\x95\x6e\x5b\xda\xa5\x03\x56\x4c\x07\xf4\xb9\xb3\x56\xa2\x0a\xa4\x6f\x3e\xae\xf4\xaa\xca\x87\x6c\x16\x04\x74\x00\x61\x91\xa5\xc8\xee\x01\x82\x6e\x32\x4a\x26\x64\xee\x75\x86\x3b\xc9\xc2\x34\x88\xb6\x22\x92\xe9\x7b\xe0\xee\xaa\x59\xea\x12\x33\xdb\xd9\xbe\x8e\x4d\x4d\x99\xe9\xaa\x4e\xe4\xf6\xb1\x18\x10\xb0\x5e\x46\xc5\x5e\x0b\x34\x79\x94\x0e\xae\xdd\x84\x6c\xb3\xbb\x8a\xf0\x93\x77\x08\x96\xc9\x49\x2d\x09\xc5\x35\xa4\xee\x1d\xb5\x87\x43\x77\x75\x12\x56\x62\x4f\x8d\xd9\x67\xde\xc7\xba\xc8\xb9\xac\xb4\x85\x05\xdd\x94\x7c\x6e\xd5\x4b\x5e\x51\xf9\xf0\x40\x57\x6f\x25\xd4\x38\xe4\x75\xf6\xe3\x68\xdd\xc6\x43\x2d\xed\x10\x47\x75\xc4\x49\x81\xf5\xd8\x3c\x77\x8b\xdb\xed\x3a\x4a\xbd\x0a\xba\x4f\x5a\xa7\x08\x09\x36\x84\x4e\xcf\xe4\xe9\xd7\x15\x44\xb5\x9e\x71\x74\xe6\x50\x3d\x37\x0e\x61\x0a\x7b\x43\x8b\x81\x27\x07\x75\x5c\xe5\xd4\x48\xcd\x30\xbe\x88\xc1\xf2\x71\xc0\xb2\x9e\x4c\x6e\x7d\xed\xd4\xc0\x7e\xf4\x95\x7a\x7f\xf0\xaa\x0e\x83\x0e\x9c\x33\x41\x0b\x4b\x24\x2c\x57\xb1\xd6\x09\x58\x63\x3d\x71\x1e\xb8\x92\x8d\xa2\xbd\x2e\xde\x82\xb4\x31\xd5\x6b\xd8\xe2\x9e\xa2\x2f\x4e\x1f\xb5\xd5\x55\x88\x0a\x9d\x1b\xe5\x2a\xe7\x24\x50\x57\x40\x27\xb1\x99\x2a\x87\x1c\x0d\x21\x8f\x73\x9c\x86\x81\x13\x0f\x54\x9a\xd9\xa1\x0f\xc6\xf3\x2d\xec\xc2\x33\x65\x01\xbe\x8a\xc8\xc1\x3c\x67\x96\x2f\x51\x6e\x66\x45\x19\x9e\x8d\xad\x76\xf3\x13\xa0\xe3\x70\x23\xaa\x65\x31\x88\x25\x55\x84\x62\x44\xb1\x70\x2e\x33\xd4\xab\xe8\x13\x03\x11\x9b\xa1\x31\xc7\xb6\x6b\xdc\xa3\x50\xac\x6f\x06\xd2\xdd\x1f\xfb\x39\xd9\x19\xd6\x5d\x0f\x8d\xda\x16\xce\x8c\xd7\x85\xcd\x76\x99\x55\xbf\x2f\x2c\xee\xb5\x09\xd4\x71\x4a\x21\xb1\x7c\x94\x51\x4a\x6f\x82\x93\x9d\x19\x07\x02\x8b\x79\x57\x81\x6b\x54\x10\x6d\x3b\x6e\xf6\xe6\xca\xe7\x56\xe8\xd4\x05\x95\x4f\x6a\x5b\x99\xde\xd6\x9d\x2a\xba\x33\x78\x60\x60\xa8\x5c\x06\xc7\x73\x33\xa5\xb4\xba\x6e\xeb\x26\xd1\xb0\xbb\xf0\xb2\x55\x75\x80\x71\x11\x60\xce\x4e\x3a\x34\xa0\xa2\xef\x65\x1e\xc2\x7b\xde\x15\xdf\x06\xdd\x93\x39\x02\x73\xc9\x40\x23\xdb\x96\x44\x29\x6e\xd5\x99\x6a\xb9\x59\x7b\xd5\xc6\xb6\x01\x76\x24\x41\xa3\x35\x71\xc4\x83\xac\x7e\xf1\xdb\x1c\x8c\xce\x10\xb2\x51\xae\x2f\xa2\x4f\x55\x4e\x7c\x86\x26\x28\x23\xda\x5f\x65\x8f\xc1\xca\x0a\xe2\x4a\x75\xde\xda\xb9\xe5\x53\x24\xe9\xf6\x0e\x9d\x2b\xa2\x3b\xb1\x6c\x22\xcb\xb8\x98\x96\x8f\x43\xd0\x90\xf0\xb6\xb4\xe5\x2a\xb9\x08\xa6\xb5\x98\x75\x31\xb4\x84\x95\x52\x68\x47\x8f\x0e\x70\xa2\x0f\x79\x1c\x94\x45\xc6\x1a\x96\x29\x66\x81\xc4\xce\x21\x6c\x4b\x72\xfe\x2a\x22\x07\x2b\xea\xb4\x2b\x81\x4e\x2d\x3b\xd2\x9b\x6e\x49\x24\xbd\xa8\x04\x2d\x58\x38\x49\x73\xaa\xe3\xd8\xa1\x75\x14\x3a\xa9\x93\x96\x48\x5c\xd5\x14\xcb\x0d\xc6\x88\x1b\x07\x0e\x41\xce\xf2\x0e\x4c\x0e\xe1\x80\x24\x36\xb7\xce\x8c\x37\x5c\x14\x51\x1d\x1a\x9b\xf2\xe6\x11\xd8\xe3\x65\x64\x5a\xb1\x13\x4e\xc6\x58\xf6\x30\x57\xed\xb3\x5f\xec\x91\x3c\xf0\x80\xed\x0b\xed\x9d\xce\xc0\xce\x13\xe7\xe4\x41\x3a\xec\x62\x0b\x51\xf5\x66\xd5\x9c\x5b\xe1\xdd\x17\x54\x3e\x66\x89\x7e\x16\x57\x5b\x37\x5b\x0d\x89\x95\x63\x2b\x8b\x02\xe7\xe1\x5a\xb3\xbb\x93\x7e\x71\x79\x97\xca\x0b\xe7\x87\x03\x47\x0e\x57\x95\xd3\x54\xd2\x65\x47\x79\x33\xac\x3a\xc8\xf3\x81\x92\x8b\xcd\x66\x57\xe4\xdc\x8f\xc3\x30\x12\x8f\xd6\x34\xd1\xed\x64\xf6\xc0\x36\xae\x8b\xb8\xea\x95\x5f\xd2\x46\xc8\xbe\x64\x9e\x28\xcf\x8c\xc8\x23\x95\xc3\x2b\xd0\xec\xb9\xec\x24\x71\x69\x5b\xd4\xfc\x3c\x51\x04\x94\x82\x33\x17\x71\x59\x42\x3e\x02\x12\xb1\xba\x56\x5c\x20\xaa\x80\xb9\xf7\x58\xbc\x70\x39\x9f\x7a\x5f\x8a\xd5\x1b\x1f\x4b\x17\x15\xf5\xfd\x5c\x19\x89\x88\x5e\xb6\x2c\x4c\x13\xd9\x2c\xa7\x02\x4b\x8d\x21\xf6\xa8\x07\x8a\x07\x5d\x83\xdd\x0e\x93\x72\xc8\x1b\x61\xc2\xba\x2d\x58\xed\xe9\x91\x8a\x2e\xe6\x32\x37\x29\x80\xb7\x43\x93\xdd\x88\x6d\x44\x16\x2c\x06\x07\x67\x89\x50\xd2\x99\x97\xab\x08\x2b\xb5\xcb\xb4\x7a\x21\x05\x14\x92\xa5\xf4\xe6\x2a\x67\x86\x46\xac\x57\x6d\xdd\x05\x2b\x66\xd1\xc9\x58\xc3\x78\x00\xfd\x18\x33\x0d\x43\xa8\xe8\xad\x68\xdb\xd1\x08\x60\xec\x0b\xc2\x06\x6f\x57\xdd\x58\x64\xc8\xa2\x2d\xde\x77\x44\x3b\xdc\x09\x08\xeb\xde\x37\xcb\xb4\x46\x51\xa5\xe4\xea\x18\x7a\x67\x07\x51\x08\x1d\x41\x69\xe1\xab\x35\x37\x25\x9f\x5b\x4d\xd0\xae\xe0\xcf\x13\x22\xc2\xb9\xd8\xb5\xab\x83\x3b\x28\xd6\x73\xdb\xa4\x65\x90\x82\x18\x05\xd0\x00\x9f\x94\x26\x84\xa4\xc4\x53\x1f\xd1\xea\x7a\xd9\xdb\xba\xa4\xac\xb0\xb7\x1e\x43\x41\x81\x2a\x94\x37\x9c\x23\x75\xcc\x63\x96\xf6\x18\xa6\x11\xf0\x24\x69\x69\x69\x0b\xc3\x3b\xb4\x74\x76\xd5\x3b\x02\x34\x0d\x35\x54\xc6\x64\xc5\x9e\x67\xa0\x77\xd6\x8f\xd9\xb9\xc9\x61\x63\xc8\x4e\x53\x65\xde\xd5\xe6\x77\x3f\x97\xb8\x07\x05\xae\x32\xc8\xa7\x1a\x32\x9b\xd1\x96\x19\xe8\xb0\xce\xbc\xd4\x03\x67\x78\xce\x79\xec\xd5\x2c\x11\x9d\x49\x6b\x2a\x30\x46\x93\xa7\x8a\x41\x59\xf6\xcb\x2c\xd8\xcf\x92\xef\x7a\xde\xa5\x2f\x9b\x76\xd5\x0e\xa8\x01\xb6\xd3\x16\x04\x95\x34\x4e\xf8\x19\x6b\x92\x93\xae\x8d\x73\xdd\x97\x75\x1c\xee\x32\x71\x74\x68\x57\x9b\xac\xd8\x8d\x57\x50\x39\x21\x52\x5a\xe6\x91\xfc\x4a\xe1\x6a\x7d\x01\x7e\x3d\x90\x47\xb3\x9f\xad\xe8\x43\x04\x30\xea\x55\xc9\x67\x11\xf4\x60\x78\x91\x95\x9b\x63\xe1\x0d\xf9\x21\xeb\x4c\xb9\x9e\xcc\xd2\x98\x90\xe9\x65\x3a\xb6\x18\xc1\xa9\x59\xcd\x84\x64\x5e\x26\xe0\xba\xf5\x61\x4c\x63\xff\xd7\xe2\xdd\x42\xcf\x90\x56\x31\x82\x70\x1c\x23\xd9\x8a\x0e\xe4\x30\x24\x13\xee\xbd\x0d\x9e\xf2\x69\x56\xcf\x6e\x4a\x3e\xb7\x9a\xc9\x5f\xb1\x39\x48\x16\x15\x28\xc7\x15\x18\x53\xe2\x5c\x3d\x06\xc3\x2a\x18\x03\xae\xc7\xdc\xad\x2b\x83\xe0\x56\x2a\x71\xa1\x53\x5c\xcf\x49\x2e\x93\x49\xb1\x91\x9f\xda\x2f\xd4\x04\x7e\xf4\x40\x0e\x16\x6b\x27\x7e\x1a\x90\xc7\xd6\x3a\xdf\xec\xd1\x8f\x1c\x52\x17\x7d\x39\xf7\xb9\x9c\xd2\x5e\xf5\xb6\x6a\x56\x71\x29\x10\xc6\x3d\x54\xd8\x37\xe8\x74\x74\x22\x05\x6f\xb7\x23\x4c\xea\xc0\x10\x50\x62\xbe\x39\xa4\xe8\x8e\x5c\xc8\x6c\xb9\xea\x45\x6b\x1d\x0a\x59\x88\xd3\x67\x56\xae\x01\x53\x06\x71\x6c\x39\x32\x33\x0e\x47\xb3\x1d\x87\x53\x8c\x58\x32\x58\x5e\x30\x6d\x5b\x65\x97\xd5\x1b\xa2\x59\x3b\x51\xe0\x6c\x70\xe5\x47\x9a\x95\x6c\xfb\xf4\x55\x24\x9a\x50\xa6\x90\x06\x28\xf6\x88\x0f\x6b\x79\x83\x7c\xa4\x63\x9d\x57\x89\xda\xba\x14\x4a\xd9\x49\x3f\x79\x05\x39\xbb\xee\x70\xa9\x3b\x58\x7d\x47\x70\xc4\x5d\xfa\x63\x3d\xe9\xd2\xc9\xc6\xec\x5e\x64\x39\xc2\x5c\xae\xaa\x4b\x89\xb5\x78\xac\x73\x66\x82\xcd\x99\x52\xdc\x0e\x6d\xd4\xd9\x56\xda\x5c\x2b\x58\x0e\xc2\xfa\x51\x3d\x73\xac\xb8\xad\x69\x9c\x4f\x7b\x15\xfa\x84\xdd\x5e\x0e\x39\x59\x0c\x3c\x74\x0c\x49\xaa\xb8\xee\x9d\x9d\xa3\x98\x10\x96\x19\x13\x65\x88\xfb\xb6\xd3\xad\x00\x15\x06\xb5\x8c\xdc\x24\xd9\x75\x2b\xae\xd7\x5f\x23\x5b\xdd\xed\x5f\x7c\xd5\x07\x3d\xe3\x35\xff\xfb\xfe\xff\xf1\x8b\x5f\xf4\xf8\x7b\xdd\xfd\x7e\xbf\x1e\x3f\xfa\xbd\xe5\xa1\x00\xfc\xcc\x07\x3f\xe8\x2d\x1f\xfa\x37\xff\xd3\x8b\x6e\xbf\x21\xf4\x4d\x7f\xfc\x2b\x8f\xfe\xf3\xfb\xfc\x87\xb7\xbf\xe0\xdf\xbd\xe5\x21\xaf\x7d\xe2\xb3\x5e\xfa\xf5\xaf\xbe\xff\xdd\xfe\xec\x19\x0f\xfa\x9d\x6f\xf8\x9a\xf7\x3f\xfe\x71\x0f\xfe\xe5\xcf\xbb\x21\xf4\xc5\xcf\xfe\x07\xfa\x9f\x7e\xd1\xd7\x82\x37\x7e\xc9\xab\x1e\xfe\xc0\x4f\x78\xe0\xeb\x0b\xb5\x1f\xfa\xa8\x87\x7f\xd2\x8b\xff\xe2\x0b\xbf\xfe\xfd\x9f\x7a\xdb\x1f\x7c\xcb\x0d\xa1\xb7\xbf\xfb\xc1\xdf\xfa\x79\x1f\x78\xed\x37\xff\xc8\x0b\xf0\x7d\xdf\xf0\x70\xbf\xfd\xee\x3f\xf9\xcf\x3f\xf5\x88\x57\xff\x37\xf5\xe2\xf7\x7e\xd6\x0f\xdd\xff\x9d\xaf\xf8\xd7\x37\x84\x3e\xfc\xfd\xee\xcb\xfe\xee\x87\x7e\xf2\xc7\xdf\xe7\x9b\xde\xf0\x2d\x5f\xf0\x71\x6f\x2d\xe9\x1d\xaf\xfb\x7b\xaf\xfc\xb5\xdf\x7b\xd2\x33\x5f\xc2\xee\xfc\xe6\xdb\x3f\xf2\xc6\xbf\xfa\xb7\xfe\xf6\xfb\x7e\xee\x07\x5f\xdc\x1e\xa1\x5f\xf8\x8f\xbe\xeb\x25\x0f\xfb\xed\xaf\xf9\xdc\x5f\xfa\xd5\xdf\xfd\xa8\x47\x3e\xe3\xe5\x5f\xf9\xa2\x17\x7e\x00\xbe\xec\x6d\x37\x0a\x81\x8d\xcf\xfa\xe4\xcf\xfd\x9c\x97\x85\xf7\xdf\xf9\xe7\x2f\xfb\xcc\xff\x71\xaf\xe7\xdc\xf1\x61\x8f\x7b\xec\x4f\x7d\xc7\xfd\xc2\x0f\xdf\xff\x47\x9e\xdf\x6f\xbf\xfd\x53\x9e\x73\x43\xe8\xdd\x9f\xf6\xa3\xdf\x7a\xdf\xd7\xfe\x9b\xd7\xdf\xe7\xb3\x9f\xfb\xe3\x5f\xfd\x03\x3f\x7b\xef\xf7\xbf\xfd\xab\x9e\xf3\xb6\x07\x7d\xc2\x4f\x3c\xee\xef\xbf\xfe\x43\x7e\xf4\xbb\xef\xfb\xea\xbf\x22\x5b\xdd\xea\x54\x2f\x00\xde\xcc\x46\xbb\xa4\xc7\x99\x05\xae\x80\xf3\x34\xb1\x3c\x19\xa4\x99\xb6\x34\x03\xda\x7d\x0d\x60\x9b\x74\xba\xe1\x01\xd6\xc2\xaf\xd1\x5d\xf5\x98\x67\x59\x0e\x2a\x4b\x2e\x79\x39\x43\x55\x38\xa1\x4e\x8e\x94\xe5\x91\xb5\x83\xfd\x20\x6a\x91\x82\x98\x75\x39\xd1\xe0\xe6\xd4\xa3\xd0\xab\xb2\xdd\xd9\x39\x85\x73\x71\x63\x72\x23\xbc\x2c\xba\x34\xdd\x8f\x6d\x35\xe5\x48\xb1\xa8\x4a\x4e\xb4\x83\x19\xd6\xd4\x5b\x96\xdd\xb7\xfd\xb2\x02\x27\x52\xb7\xcc\x71\xb2\x9a\x76\x47\x24\xe3\xb1\xc5\x55\x67\x27\xcf\xdd\xc6\xfd\x5c\x18\x59\x25\x38\xef\xea\xfd\x24\x3b\x0f\x55\x0b\xb8\x4a\xbb\xf6\xae\xd2\xae\xf1\x65\x15\x41\xd4\x45\x9b\xba\x32\xa1\x47\x39\xc3\x0c\x94\x53\x2a\xab\x47\xbb\xed\xaa\x04\xb2\x1a\xe1\x89\x4e\xaa\xcd\xab\x38\xb3\xa4\x76\x49\x1d\x5c\xa8\x3f\x5c\x90\x8b\x21\xa9\x02\x15\x27\xed\xc0\x75\xb2\x6c\xc7\x0a\x93\xc5\x89\x1f\x2a\x19\x90\x4c\x6b\xbd\x5d\xc4\x7c\xa7\x6b\x6b\x11\xce\x5e\x41\x1b\x3c\xf4\x5d\x36\xb3\x6f\x3d\x80\xc5\x92\x50\xda\xe8\xed\xe0\xbb\x9b\x8d\x41\x21\xb8\x63\x61\x13\xd7\x39\x7a\xf2\xbe\xcf\xcd\xdd\xd5\x83\x6c\x1c\xec\xce\x8d\xa4\xef\xea\xd7\x04\xf7\x67\xef\x3b\xf4\x0b\x25\xba\x7a\x61\xcf\x5d\x9a\x9e\x8f\xd2\xb6\x76\x53\xf9\x79\xab\x3c\x7d\x89\x45\x99\xd8\x73\x22\xc7\x56\x0e\x14\x16\x5a\x03\x3e\x86\x45\x8b\x49\xc9\x26\x36\xd6\x65\xd7\x5e\x6a\x1a\xf3\xb9\xac\xc0\xc5\x92\x4e\x7b\xd5\xa0\x6f\x97\xc9\xa2\x75\xad\xeb\xa8\x7b\x30\xab\xa0\x4b\xdf\x16\xe8\xd2\x6e\x53\xe2\xab\x33\xeb\x11\x35\x35\x29\x0b\xda\xec\x82\xc6\xc4\xed\x2a\x08\x10\x16\x62\xb9\x23\x0c\x84\x45\xe5\x03\x4e\xc3\x00\xc4\x47\x02\x3b\x5b\xf3\xda\xe4\x4e\x4b\xde\x2a\x3c\xeb\x59\x71\x6d\xe7\xc2\x0f\x76\x99\x31\x58\x19\x05\x62\x4c\xf7\x09\x2c\x25\x24\x49\xd8\x6d\x72\xa4\x90\x34\x9a\xe1\x70\x50\x59\x38\xb4\x75\xb5\x3c\x84\x28\xd5\x5a\xec\x55\x5b\xec\x50\x8c\x09\xa7\xb5\x71\x5b\x90\x63\xf5\x48\x51\x41\xb7\x2f\x95\x66\xe4\x88\x5a\x45\x3c\xfa\x19\x35\x23\x72\x2b\x7c\x12\x76\xb8\x72\xd5\x18\xd6\xce\x42\x35\x5f\xc2\x36\xd4\xb9\xd0\x75\x93\x1c\x75\x75\x36\x05\x01\x4e\x42\x91\x6d\xa3\x19\x92\x86\xbd\x5a\x37\xba\x57\xbf\x80\x79\xd5\x4a\xeb\x89\x14\x4e\xf9\xac\x14\x33\xcb\xb2\x71\x84\xb7\xa2\x3d\x9b\x27\x26\x9e\x9d\xa7\x5b\x7c\x28\x53\x71\x83\xdd\x59\xb6\xa4\xe4\x1c\x57\x21\x13\x01\xc1\x95\x26\x9b\x6c\x46\xde\x39\x66\xb6\x49\x10\x5a\xe9\xc0\x59\x27\x6f\x90\xae\x35\x41\x7a\x9c\xda\x36\x47\xd6\x45\x2a\x3f\xe1\x4d\xc9\xe7\x56\x95\xdf\x25\xc0\x5b\x74\x55\x92\x20\x36\xdb\x12\x58\xa3\x70\x99\x47\xc5\x36\xea\xf6\x75\x1f\x7b\xb5\xf1\x88\xd3\x2d\x70\x44\xb7\x20\x9b\x4f\x75\x19\xa5\x7a\xc9\x63\x4f\xc1\x6b\xb5\x06\x5f\x85\x27\x27\xcf\x4e\x23\x69\xcd\x70\x00\x6c\x86\x6d\x03\x97\x83\x71\x4a\x61\x45\x29\xc4\x4a\x2f\x13\xe6\x5c\x72\xd3\x3b\x6c\xe0\xc4\x62\x97\x4b\x17\x74\x67\x81\xda\xd6\x24\x85\xb1\xac\xf9\x08\x47\x1c\x08\x68\xb1\x8c\xd1\x21\xa2\x67\xb9\x8c\x65\xc0\x20\x0c\x1a\x54\x52\x50\xc1\x0a\x09\x6a\x68\x8c\x29\xd4\x04\x9a\x16\x0b\xc8\x09\x10\x79\x18\xc1\xc3\xd4\x7b\xe5\x60\xed\x1b\xbb\x6a\x7d\x33\xa4\xd0\xd8\x89\x9c\xee\xcc\x33\xd6\x39\x28\x13\xfb\xdd\xcf\x6d\xcc\x25\x75\x5a\xb3\xe6\x1b\x6d\x06\x0f\x0c\x94\x10\xda\xab\x76\xd5\xc8\x51\xf6\x71\xf6\x44\x17\x36\x35\x32\x2c\x16\x91\xb1\x56\x87\xad\x6b\xd7\xf6\x98\x2b\x4a\xca\x10\x12\x5b\x3e\x4e\x5d\xba\x6a\x52\x82\xab\xba\x70\xc1\xed\x02\xb1\x2b\x61\xcb\x2b\x74\x78\x3d\xc2\x5d\x25\x88\x2e\xa9\x35\x43\x2b\xce\x6e\xf0\x95\x60\x69\x11\x02\x2b\xa2\x6a\x66\x7f\xd5\xf6\xe1\xd2\x3a\xf0\x4c\x1e\xde\x9c\xf9\xdc\x45\xcc\xaa\xd9\x39\x7a\x68\x94\x3a\xe0\xd8\xa2\x6b\xf7\x53\x18\x85\xb8\x48\x29\x8c\xbc\xd0\x9b\x51\xff\x5b\xf5\x92\x17\xb4\x5d\xd9\x08\x2d\x23\x34\x96\xe6\x15\xd7\x45\x86\x3d\x8f\x5e\x6b\xf7\x1a\x8b\x9c\x05\xdb\x91\xb2\x6c\x57\xc3\x56\x18\x34\xc1\xfe\x74\x57\x25\x9f\x9d\x42\x4d\x97\x68\x20\xe8\x63\x2e\x79\xc1\xc0\xb8\x28\x22\xa3\x1c\xd9\x3a\xa9\x8f\xd8\xae\xe1\x94\xfb\x91\xc3\x24\xe9\x58\x39\xbd\x4a\x3c\x4c\xc0\x01\xf8\x88\xb2\xc1\x4d\x17\xcc\x40\x1b\xf1\xa8\x4c\x72\xd6\x1a\xe5\xf3\x38\xba\x4b\x23\x8e\x1d\x67\x0e\x38\x3b\xf7\x9d\x5d\xd6\x00\x1e\xd5\x6c\x0a\x4b\xa1\x11\x9b\x66\x1d\x8e\xa2\xad\xcf\x6c\x92\xe9\x65\x8f\xf0\xac\x7c\xdb\x5b\xdb\x25\x98\xf0\x6c\x4e\x2b\xb4\xd0\xcb\xcc\x4b\xd2\xb2\x6f\xcb\xea\x93\x43\x9b\xf3\xe2\x28\xfc\x64\xd6\x30\x1c\x73\x8e\x08\xed\xdd\xc0\x29\x92\xe5\x9a\x2a\x72\x38\x33\x4a\x15\x57\xb5\xa2\x68\x8e\x7d\x87\xe7\xe1\x95\x6b\x9e\xf6\x4d\xca\x8d\x5b\x3b\x7a\xf6\x59\x8c\x9e\xe1\x54\x46\x97\xd6\x10\xdc\xe9\x3c\x57\x12\xb5\xb9\xea\xc6\xda\xd5\x77\xa3\xad\xaf\x87\xab\x50\x6f\xa5\x79\x92\xba\x3b\xd7\xc6\xcd\x98\xa0\x1f\x3c\x55\x5f\x57\x84\x90\x87\x0d\xad\xc7\x26\xdc\x55\xcc\x8b\xa6\x91\xda\x4e\x76\x92\xb8\x15\x3c\xc1\x52\xa1\xc1\x7c\x72\x9e\xb7\x5e\x4e\x14\xd7\xc2\x02\x3a\xa1\x15\xab\x67\x95\x4e\xcd\xc6\xbc\x39\xf9\xdc\x0a\x9d\xba\x20\xf9\xb0\xed\xec\x83\x53\xd0\xa2\xb0\x36\xe8\xc3\x2c\x13\xd8\x34\x99\xcb\xfb\xe0\x3a\x75\x16\x3b\x15\x5b\xdb\x27\x0b\x22\xb4\xd0\x59\xb9\x4a\x28\x8b\xae\x71\x6b\x6e\xcf\x87\xb3\xa9\x32\x87\x76\xb4\xec\x2e\x61\xe5\x50\x45\x22\xbb\x49\xa1\x67\xcb\x28\x8e\x8e\xca\x8e\x9c\x6c\x2f\x57\xa1\xb9\xad\xb8\xd0\xd6\x82\x83\x39\xdd\x5c\x81\x59\x5a\xab\xdb\x01\x47\xe7\xc4\xe8\x91\x81\xdf\xf7\x8d\xd7\x5d\xd6\x04\xd1\xa9\xcd\x61\xd8\x65\x82\xf1\xeb\x0c\x19\xd2\xca\xad\x02\x0b\x0e\x02\xcd\x5c\xb3\x3c\x4e\x50\x21\x45\xb2\xe0\x10\xfb\x69\xea\xb6\x41\xa1\x1c\x39\xf1\xee\xfd\x55\x9f\xbc\x38\x5d\x3c\xd5\xc0\xdd\x22\x2c\xe4\xe0\x51\xcb\xae\x99\xb0\x4e\x2c\x0a\x23\xb9\x74\xe4\x95\x86\x9e\x0b\x28\x0e\x46\x01\xb5\x97\x19\xe4\xe7\x36\x37\x27\xb3\x54\x3b\x6d\x64\xca\x83\xb9\x3a\xe5\x2a\x0c\x5e\x0e\x12\xe9\x88\xaa\xd0\x56\x13\x31\x36\x77\x33\xda\x52\x34\xb8\x6a\x2b\x4b\xa2\x51\x98\x04\x47\x98\x6a\x9c\xbc\x21\x81\xfc\x44\xd5\x0b\xa6\x83\xd1\x65\x04\x58\xdd\xa6\x0a\x8b\x3d\xf3\x4c\x0b\x6e\x98\x5e\x45\x33\xb7\xbb\x4a\xeb\x9a\x75\x84\x35\x85\xec\xef\x6a\xd6\x4f\x15\x67\x8f\x00\x16\x4f\x17\x9f\xb6\x94\x63\xe9\xce\x1e\x70\xb7\x5e\xe4\xc8\x6f\x16\xae\xb8\x15\xde\x7d\x41\xdb\x25\x93\x4e\x36\xc3\xa5\xa9\xd3\x76\x14\x31\x08\x75\x32\xa3\x75\x82\x0b\x5a\xe8\x39\xd7\xe6\xa7\x82\xd2\x71\x52\x3c\x06\xac\xf4\xab\xea\x0d\x3a\xd6\xa1\x89\xda\x1b\xac\x61\xf2\x6d\x3b\xb6\x4d\x1c\x2e\x11\x09\x0f\x35\xe1\xcc\x73\xdd\x44\xc0\xc1\x6a\x13\xc3\x1a\xfc\x2a\x46\xbb\x6a\x6b\x53\x6d\x0c\x8e\xf3\xc8\xe0\x04\x76\x5b\x0a\x17\x2c\x82\x09\xa6\xca\x56\x04\xd2\x8f\x6d\x86\xcd\x0f\xe5\x7c\xdb\x97\xa6\xa6\x2c\xbd\x5c\x05\xae\x9a\xee\xab\xa2\x3c\x18\xde\x56\xba\x31\x54\xb3\xe9\xcd\xc4\xec\x0a\xd5\x9b\x90\x0d\xaf\x79\x1e\xc0\xb3\x75\x27\x3b\x6d\xba\xe8\xe5\xaa\x0d\xa4\xd3\x94\xbd\x01\x1c\xd3\xdc\xfc\x58\x3b\x65\x75\x4f\xfc\x40\x1d\xd5\x64\x87\x14\x45\x49\x88\x34\x53\xbe\x31\xcc\x2d\x5a\xf4\xe4\x57\x81\xab\xb1\x49\x29\xad\x5d\x91\xc0\xa8\x9f\x07\xc0\x5c\x87\x06\xb6\xe6\x67\x17\x82\xc9\x08\x35\xd9\x0e\xac\x51\xe3\xd6\x06\x85\xce\x5a\xae\x42\x5a\x0a\xd7\x76\x01\x5e\xed\x95\x0f\x79\x20\xc2\x57\xbd\x91\x75\x2f\x79\x73\x9b\x2b\x90\x2c\x7e\x22\xaa\x1d\xe8\x08\x95\x52\x89\xbc\x4e\xc0\xd5\x52\xb7\x07\x59\x34\x29\xd5\x4d\xe5\xb6\x5d\x9e\x54\x5a\xa6\x36\x2f\x6c\x6d\x1a\x6f\x22\x49\xa9\x84\x2e\x7e\x8a\x16\x0f\xd4\x6f\xd8\x33\xfe\xcb\xe4\x73\xab\x09\xda\x15\x06\x35\xfa\x24\x7b\xf3\xc8\xd1\x05\x8c\xb9\xef\x69\x1e\x9a\xc0\x42\x82\x97\x71\x8c\xba\x67\xa6\x7d\xa1\x82\x73\x65\xb6\xc8\xec\x0c\x97\xad\x8c\x2b\x54\xab\xe7\xd1\x09\xaa\x14\x3e\x60\x52\xe5\xc4\x13\x2b\x6d\x86\x56\x7b\xd8\x7c\x97\xb3\x2c\x58\xca\x6d\x1b\x2b\xd3\xdd\xfb\xab\x88\x45\x14\x98\x13\xfa\x59\xf0\xba\x0f\xa5\x55\x90\x47\x28\xab\x10\x33\x6e\x51\x05\x51\x48\x2b\x68\xa1\x16\x1c\x62\xcd\x01\x8c\x2d\x48\x7e\x99\x1f\xc2\x12\x2a\xde\xa4\x2a\x73\xcf\xb2\x2f\x02\x75\x7a\x9a\x03\xfa\x29\x5b\xb0\x48\x35\x8a\xa8\xf2\x83\x6a\x71\xc2\xb9\x96\xca\x74\xe1\x57\x7d\x68\xa8\x92\x90\x24\x5b\x2a\x48\xb6\x6e\xa7\xda\x09\x69\x63\x2f\xcd\x4b\x83\x9d\x98\x45\xf4\xad\xa6\x80\x55\x9d\x1c\x6f\x61\x0c\x3e\xae\x3a\x13\x11\xd2\x49\x85\x4a\x3a\x8e\x94\x3b\x35\x0c\xd8\xb2\x23\xaa\x29\x55\x5b\xf8\x3f\xee\xc1\x52\xb8\x24\x5d\x90\x86\xd6\x1a\x0f\xe9\x2e\x43\x9f\xaa\xcb\xb4\x25\xb7\xc2\x64\x4e\xdd\x25\x36\x18\xd8\xec\xbc\xe7\x42\x52\x0e\x95\x83\x4b\x01\xde\xc3\x04\x13\xe8\x73\xb3\x97\x89\xda\x32\x7b\xe6\x63\xb4\xec\xc7\x7e\x48\x23\xa7\xad\x96\x81\x23\xd7\x23\x16\x5a\x4b\x1a\x76\x01\x04\x0b\x67\xb2\xdf\x61\x5d\x97\x40\x61\xad\x37\x25\x9f\x5b\xcd\xe4\xaf\x00\x9c\x3d\x10\xdc\x99\x70\x6a\xae\xa4\x18\x55\x8e\xba\x27\x00\x46\x39\x09\x82\x0e\xc6\xb1\xad\x4c\x91\x8d\x42\x20\xe4\x7a\xea\xaa\xb7\xab\xa6\x5d\xa7\xcc\x98\x65\xd2\x41\x71\x51\xad\x71\x39\xb2\xb1\x6b\x08\x87\x3b\xce\x40\xad\x55\x69\x4b\x7c\x02\xd2\xe7\x4e\x52\xb1\x56\x64\x76\xd5\xf2\xfa\xb9\xc7\x50\xb0\xe5\xeb\x8c\x43\xc0\x63\x50\x00\x16\xe1\x4f\xeb\xa8\x75\x0b\x8a\xc2\x6d\xc4\xb2\xf5\x58\xa9\xa0\x5d\x04\x22\xe2\x76\x55\xb3\xd3\x29\xed\x08\x65\x19\x81\xc2\x26\x86\xa2\xfb\x3a\x2d\xa0\xb0\xcd\x9c\x82\xa1\x65\x39\x78\xad\x09\x84\xe2\x0b\x06\x71\x37\x83\x5e\x05\xae\x36\x79\x66\xe2\xa9\xe4\x7b\x72\x8d\x8a\xc9\x05\xd8\x17\x78\x46\x97\x2c\xa7\x25\x14\xbf\xe2\x55\x8d\xf3\xc4\x9d\x56\xbe\xac\x5c\xd1\x8b\x14\xb5\xd9\x09\x0b\xd4\xa3\x66\x99\x1a\x1e\x1a\xed\x69\x55\xab\x4c\x09\x9d\xad\xd0\x8a\xd4\x58\x66\xb3\x8a\x82\xd5\xdb\xd5\x29\x87\x10\xdb\xae\xb2\x89\xed\xc0\xf0\x3a\xa5\x85\x79\x42\x8a\x10\x5b\x5d\x99\x0a\xe0\x6a\x0f\xee\xc3\xd6\xd7\xae\xaa\xf4\x82\xf6\x1a\xd0\xa1\xfa\x58\xe3\xbc\xca\x1f\xb1\x41\xcf\x46\xf1\xdb\x61\x0a\x3c\x74\x65\x3a\x70\x4d\x0e\x29\xc4\x3a\x88\xaf\xd2\xae\x82\x86\x25\x8b\xb2\xc6\xb6\xaa\xda\x8e\x4c\xed\x4d\x64\xab\x5b\xa9\x65\xfd\x35\xb2\xd5\x87\xbc\xe1\xe3\xfe\xd1\x73\xca\x27\x3c\xe6\x1e\x1f\xf4\x88\xe7\xfd\x26\xbe\xef\x4b\x5e\x71\xb7\xfc\xe4\x7f\xf8\x1b\xef\xf9\xe2\x37\xff\xf6\x3f\xf9\xc9\x7f\x7d\x8f\xe7\xbc\xf6\x86\x50\xf5\x82\xd7\x7d\xf2\xfe\xee\x07\xbc\xe8\x57\xef\xf1\xfa\x6f\xbb\xe7\xf7\x3f\xaf\x3d\xed\x59\x7f\x0f\xbd\xf9\x73\x7e\xfc\x1b\xbf\xb8\xff\xf8\x3f\x67\x7f\xf0\x45\xbf\x73\x43\xe8\xaf\xde\xf3\x5f\xbd\xf9\x79\xef\x7e\xc8\xef\x3c\xe0\x49\xaf\x79\xcf\xb3\xfe\xeb\x97\xdd\xfe\xa2\x9f\xfc\x46\xf1\xe6\xf2\x69\xe6\x43\x7e\xf1\x89\xcf\xfe\xc0\xef\x3d\xf4\x46\xb9\xaa\x3b\xbf\xe8\xb6\x0f\xf9\xad\xc7\x3c\xff\x97\xff\xcb\xf3\x7f\xea\xf7\xee\xf7\xbf\xbe\xf0\xc3\xff\xf4\x63\xef\xff\x9b\x0f\xbb\xdb\x3b\xbe\xed\x5d\xff\xfb\x0b\x7f\xfe\x36\xba\xde\xe7\x86\xd0\xa7\xbd\xf0\x09\x0f\xbc\xed\x71\xe3\xcb\x9f\xfa\x8f\xff\xf6\xe7\x7e\xd8\x53\x9e\xf1\x18\xf3\x92\x3f\x7e\xe8\xcf\xfe\xca\xfd\xbe\xf1\xf7\xbe\xf5\xe9\xbf\xfa\x29\xef\xfd\xac\x1b\x43\xe3\x7d\xbe\xfb\x87\x1f\xf3\x90\xf2\x25\x2f\xff\xe6\x8f\x3f\x3f\xe3\x7d\x1f\xfe\xc6\xe7\x7f\xfb\x63\x9e\xf0\xb4\xdf\xfb\xac\x6f\xfa\xc4\x57\xff\xc6\xf7\x3d\xfa\x77\x5f\xf0\xa5\x37\x84\xbe\xf4\x79\x3f\xd6\xdf\xfc\x05\xff\x3c\x7e\xdf\x1d\x7f\xf4\x3d\x9f\xf8\x90\xc7\xbe\xe7\x39\xf7\x7e\xe0\xe7\xbe\xed\x9f\xbd\xfe\xee\x0f\x78\xd6\x9d\xbf\xf8\xc3\xaf\xa2\xe1\x86\xd0\x17\x7d\xe4\xb7\xde\xf7\xab\x9f\x47\x1e\x22\x5e\xf2\xe2\x27\x3d\xe1\x29\xbf\xff\x88\xcf\x78\xd3\x9f\x7e\xfa\xfc\xaa\xb7\x7e\xcc\xdf\xfa\xf2\xe7\x7e\xd3\xf3\xcd\xe7\xbf\xef\xaf\xc8\x56\xb7\x3a\xd5\x2b\x56\xac\x4f\xb8\x2b\x59\x84\xa4\xb2\x30\x26\x21\xeb\xa3\xaa\xb2\x35\x19\x67\x0d\x5c\x84\x63\x39\x85\x4e\x0b\xb2\x45\x03\xcd\xa7\x4c\xe5\x22\xa9\x0e\x16\x96\xae\x10\x39\x61\x86\xc8\x9c\x44\x95\xd2\x65\xec\x75\x1d\x05\xd0\x09\x15\x91\x8e\x2e\xb4\xcb\xcc\x95\x73\x05\x79\x5b\x80\xb9\x6a\x8e\xbd\x4b\x77\xb0\x8a\xeb\x51\x53\xb2\x9d\x82\x49\x74\x3a\xe7\x26\x53\x6a\x82\xdb\x50\x66\xe1\xd5\x68\x25\xfa\x8a\x74\x49\xc5\xed\x97\xf1\x1d\xdc\x32\x1c\x21\xf1\xd4\xcb\x81\xa8\x8f\xd2\xd1\xcc\xa6\x18\x7d\xcb\xc3\xef\x9d\xb9\x08\xf0\x10\xfe\x64\x14\x93\x53\x3b\x35\xf7\xcb\x46\x8e\x31\xca\x25\x5a\x36\xf4\x39\xa4\x91\xb6\x2e\xcb\x5e\xb7\x6a\x94\x13\xe2\x4c\xc9\x94\x66\xab\x3e\x65\x3b\x17\xbe\x01\x9a\x25\x92\xe3\xaa\xb7\x28\xaf\x32\xc4\x7d\x73\xc7\x91\xb7\x65\xf2\x7d\xd7\xe3\x74\xba\x79\x9a\x72\xac\xa8\x75\x88\xa8\xc7\x95\xfa\x0d\x6c\xd0\x1c\x0b\xf1\xf4\x2a\xa8\xb8\x39\x06\x44\xf0\x79\x5b\x32\x86\x0d\x82\x00\xf3\x94\x3c\xdb\xa2\x4d\x6a\xda\x11\x8f\xe6\xb2\x42\xcf\x99\xdd\x1d\xca\xb3\xf4\xcb\x44\x01\x14\x44\x10\x8f\x16\xdd\x10\x1e\x33\x4a\x79\x8f\xbd\x95\x65\x46\x5a\x2b\x58\x07\xe5\xa6\xd5\x30\x11\x92\xa7\x66\x74\x75\x69\x58\x71\x53\xf9\x79\xab\x3c\x7d\x41\xf2\x41\x38\x9c\x83\x1e\x18\xcf\x48\xf5\x31\x33\x49\x82\x1b\x16\x80\x30\xf4\xe4\xa5\x98\x2c\x15\x83\x78\x4d\x9c\x9b\x68\xc3\x2e\x0f\x73\xd1\x7a\x0f\x83\x67\x3e\x60\x3f\x1d\x74\x28\xed\x7e\x87\xd6\x1c\xcd\x74\x7a\x4e\xe8\xa4\x93\x7e\xc5\x87\x4f\x55\xa7\xb9\x90\xcd\xce\x73\xa5\x07\xbb\xe8\x7a\x53\xca\x3d\x87\xde\x70\x71\xe6\x74\x64\x2f\xad\x3c\x25\xa4\x91\x87\x0e\x03\x59\x0e\x10\x35\x72\xc7\x3a\x30\xa7\x9a\x08\x54\x66\x16\x57\x89\xcb\xb4\xc3\xc5\x73\x6f\xd1\x0c\xbf\x37\x55\x56\x88\x88\x46\x85\x8d\x02\xc3\x49\xac\xb6\xeb\xb2\xee\x4c\x39\xb4\x9f\xc3\x48\x71\xc6\x9d\x5f\xc5\x26\x77\x48\xad\x27\x4b\x62\xe4\xee\xaa\xa5\x1b\x30\x23\x52\x63\x92\xe6\x85\xab\xae\x35\x4b\x23\x88\xa3\x0d\xbc\x84\x28\xe6\x01\xbd\xb9\x8a\x6c\xb5\x98\x6c\xe7\x62\xbc\x29\xab\x16\xba\x0d\xdd\xa3\x2d\x49\x05\xaa\x31\x2b\x47\x8c\x1b\x48\xc0\xa9\xca\xca\xa8\xa5\x6e\x7c\x3f\xaf\xda\x2d\x64\x95\x82\xb6\x81\x2a\x80\xf4\x2c\x0c\x81\x91\x96\x93\xe1\xb9\x0e\x98\x36\x83\x2a\x06\xfd\x60\x41\x2c\x8b\x33\xae\xe8\x48\x91\xba\x4c\x60\x7d\x4b\x8a\x36\x2e\x4f\x51\xb7\x12\xf3\x69\x31\xa3\xa7\x1d\xdd\x42\x87\x87\x60\x8c\xc3\xe8\x88\xa1\x54\x13\xbf\x83\x1d\xb0\xd2\xe7\xcd\x8b\x46\xb7\xaa\xfc\xae\x30\x67\xad\x29\x2c\x26\xb7\xce\xa6\x15\x59\xa6\x10\x10\xad\x7d\x11\x1a\xc3\x2d\xf6\xb6\x26\x91\x43\x72\xde\x88\x46\xbb\xa1\x69\x17\x57\x91\x76\x99\x3f\x0d\xce\x26\x1f\x81\x68\x28\x57\xe7\xf3\xd0\x75\x2f\x8e\x50\xbb\x85\x91\x8d\x11\xeb\x9a\x57\x32\x86\x97\xc3\x0f\x74\xf0\xfd\xaa\xe4\xc3\x4e\x17\x4d\x01\x52\x4c\x34\xa4\x0b\x6e\x5b\x0d\x16\x60\x37\xbe\x86\x79\x0e\x6b\x37\x52\x16\x17\x81\x3f\xd9\xa8\x8b\xf2\x74\xd4\xab\x3c\x23\x69\x65\x71\x85\x42\x63\xab\xfa\xe9\x95\xdc\x3c\x59\x60\x67\x00\x59\xdd\x37\x8a\xcc\xb1\x44\x86\x4e\x05\x3a\x65\xeb\x4a\x84\xa7\x64\x5c\xb5\xf9\xa9\x49\xc9\x69\x85\x48\xab\x2d\x83\xcd\xfb\x43\x67\x93\x4f\xdd\x76\xd3\xd7\x8e\x3b\xdd\x08\x02\xe0\x58\x16\x36\xf7\xb3\xe3\xb8\xc4\xab\x90\x09\x3a\x74\x72\x53\x9f\xab\x24\x43\x0d\x42\x48\xaa\x11\xcf\xa4\x12\x62\x79\x83\x86\x41\xe9\xb7\x1a\x9d\x99\x03\x25\x03\x67\x48\x8b\xb9\xea\x91\x6a\x68\x11\xac\xe6\x40\xf3\xb2\xe2\xd3\x5a\x3c\xe7\xba\xeb\x66\x8a\xde\x35\x8f\x8b\x56\xc2\x13\xa7\x5c\x88\xd5\x4e\xd6\x96\xc9\x97\xab\x1e\xee\xc5\x14\x64\xab\xdb\xb7\x28\x32\x4e\x7d\x4d\x15\x89\xa1\xd5\x6e\x96\x59\xf0\xb1\x39\x8b\x1c\x6f\x38\x82\x03\x70\x5d\x11\x05\x9d\xdf\xcc\xf4\xbc\x55\x2f\x79\x85\xac\x1e\xd7\x10\x83\xe4\x4d\xf0\x74\x0f\x66\x94\x11\x48\xa2\xbb\x39\xa1\xad\x45\xf7\x83\xf3\xa6\x78\x70\x3b\xe9\xc4\x6d\xc6\x1f\xb5\x5e\xb5\x62\x9d\xd3\x5a\x54\x62\x34\xf7\x4e\xd6\x80\xd9\x62\x4b\x02\x8b\x54\x39\xad\xe8\x0c\x4d\x6d\x80\xcb\x99\x04\xce\xdd\xda\x7d\xaf\x74\xb8\xab\x70\xe5\x13\xec\xbe\x25\xc3\xf6\xb0\x8d\x85\x6e\xbc\xa8\xb5\x9e\x5b\xf6\x06\x6c\xcb\xbe\x2e\xb9\x45\xe3\x99\x13\xbe\x03\x1a\x9d\x12\x3c\xd9\xab\x26\xea\x66\x5f\x04\x0b\x14\x1c\xb1\xe9\xa8\x94\x88\x25\x1b\xc7\x38\xa6\x34\x58\x6f\x8f\x2d\x90\x4d\x89\x52\x16\xbe\x8f\x33\x1f\x92\x97\x7a\xd1\xa0\x8f\xed\x9c\xd2\x6d\x3d\x1b\x13\xac\xca\xea\xd4\x92\x4e\x11\xfd\x0a\x79\xb4\x84\x26\x3c\x75\x4b\x43\x48\x0b\x57\x57\xc1\x09\x7c\x8b\xe3\x2a\x2a\xdc\xe6\xe8\xe4\x4a\x75\xd4\x8e\x34\x96\x40\xb4\xc8\xd1\x21\xed\x1b\xa6\x93\x67\x9d\xab\x08\xec\x08\x66\xed\x66\x89\x5d\x05\x61\xe6\x55\x96\x21\xf6\xec\xe7\xb1\xaf\xba\x09\xb8\x29\x4f\x72\x3b\x34\x0e\xf9\x88\xbd\xe7\x84\x37\xca\x0c\xf3\x99\xae\xb8\x30\xca\xce\x5d\x77\xef\xcd\x55\x0d\x20\x39\x0d\xe7\xdd\x92\x31\x31\xda\x5c\x75\x7c\xe1\x3a\x73\x2e\x5a\xa0\x7d\x65\xa4\xc1\x64\xf2\xb1\x45\x44\x35\x48\x67\xdd\x1d\xe7\x37\xa3\xfe\xb7\x42\xa7\xae\xc0\x7c\x5a\x96\xa4\x4a\x14\x19\x21\x5d\xd3\xb1\xb9\xc5\x7a\x24\x0f\xcc\x3d\x74\x2e\x06\x71\x78\x87\xd7\x9c\xb4\xc8\x15\xc6\x5a\x8e\x79\x15\xe6\xe3\xb7\x04\xcb\x04\xc5\x56\xb1\xe0\xf3\xe4\x3b\x09\x61\x3f\xaa\xc4\xd9\xda\x8a\xab\xb7\x73\xdd\x77\x92\x4f\x10\x6c\x77\x19\x4c\x40\xaf\xc2\x37\x4e\x4e\xa0\xf1\x3d\x31\x5d\x70\x85\x5b\x9e\x55\x50\xef\x99\x82\x94\x6e\x07\x96\x68\xe9\xb5\x2f\x20\xf8\x9c\xc0\x91\x51\xf3\xde\x5f\x45\xfb\xea\xfd\x74\x73\x59\xe2\x44\xac\x9c\x8c\xe6\x30\x37\x9a\x78\x60\x61\xe9\xa1\x78\x98\xbb\x04\x13\xb6\x68\x47\xe8\x44\x6d\x27\x0b\xfc\x2a\x55\x05\x66\x79\x3d\x57\x78\x32\x4a\x45\x82\x83\xe2\x6d\x8f\x78\xb5\x0c\x0c\xa6\x43\x00\x15\x46\x0b\x4f\x88\x63\xf0\x0a\xa9\xd4\x9c\x62\x57\x21\xdc\x4c\x1d\x07\xd7\xb1\x1f\xe9\x00\x9e\xc7\x6d\x39\x29\x61\x1b\xc4\x10\xf5\xb2\x9f\x69\x03\xb6\x63\xa0\x08\xdb\x4e\xb2\x72\xec\xd7\x75\xbb\xaa\xde\x58\x97\x95\x1e\x42\x6d\xb0\x70\xae\x66\x3a\x05\x39\x0e\x06\x3d\x5d\x57\x46\xb5\xc8\x38\xfa\xc1\x77\x4c\x93\x37\x30\xaa\x30\x88\xb6\x57\xfd\x3a\x82\x9c\x2a\xa8\xc5\xc3\xbb\x9a\xf4\x03\x9c\x96\xe3\xb2\x8f\x38\xcb\x2a\xd4\xe9\x0a\x27\xac\x6c\xdd\x59\x18\xb9\x60\x1e\xae\x8c\xdd\x40\x85\xfb\x2b\x8b\xb2\x5b\xe0\xdd\x17\x54\x3e\x1c\x2f\x84\xcc\x8d\x74\x0f\x4f\x82\x91\x59\x57\x21\xa3\x05\x92\x21\x8a\x19\x8c\xa5\xf4\x3a\xd2\x8e\x63\xd1\x86\x17\x89\x1d\xb9\x6c\x94\x54\x04\x2d\x5a\x1e\x15\x83\x9d\x35\xde\x25\x6f\x13\x88\xd6\x23\x42\x66\xcd\x92\xeb\x49\x78\x04\x99\x1c\x09\x62\xa5\x71\xa3\xcb\xbc\x68\xc7\xe5\xae\x4e\x86\x6b\x58\x8b\xd8\x52\x25\xc0\xe6\x9e\x5b\xe9\xe1\x08\x35\xe1\x88\x0f\x8d\x46\x82\x8e\xac\x48\x79\xec\xd2\xa9\x8b\x22\xe3\xaa\x84\x0c\x34\xf3\x13\xa4\x51\xe9\x76\x66\xcb\x3b\xd8\xda\x14\x2a\x38\xee\xcf\xd0\x0b\x5a\xd6\x19\x45\x76\x2d\x07\x83\x40\x43\x67\xbc\x51\x34\xe4\xff\xdd\x7b\x72\xc0\x39\x35\x00\x8b\xad\x78\x91\xce\x34\xeb\x4f\x0f\x8e\x13\x72\x46\xf8\x3e\xa7\xd2\x72\xb8\x3e\x8d\x94\x8a\xec\x4b\x58\x41\xe0\x57\xfd\x3a\xcc\xad\x68\xb2\xca\xf4\xba\x4a\x4c\xb7\x16\x27\x88\x8e\xf1\x45\x1f\xf5\xe0\x78\xdd\x28\xde\x74\x3c\xa2\x36\x52\x72\xee\x7b\x40\xf6\x2a\x07\xf1\x14\x8d\x58\xe0\x2c\x43\x53\x15\x4e\x94\x0f\xe9\xa5\xd1\x08\xa7\x55\x90\x1d\x32\xd3\x47\xa7\xf9\x44\xba\x43\x00\x0d\xe4\xce\xb3\xab\xba\x86\xbe\xba\x43\xd0\x3c\x14\x01\x22\x64\x2d\x21\xf7\xc1\xdc\xf5\xc3\xa4\x03\xc2\x02\x80\x9d\x83\x93\x16\xab\x86\x23\x0c\x80\xb3\x1f\x37\xcb\xea\xdd\x6a\x82\x76\x41\xe5\x73\x92\xd8\x8a\x10\x49\xcc\xe4\xe6\x5d\xf5\xbd\xd3\xde\x01\xa9\xb3\x09\x63\x90\xa2\x57\x39\x06\xcd\x3c\x1d\xac\xed\x29\xe9\x4e\x2e\x9b\xa8\xef\x9b\xf7\xd4\x10\x76\x48\x3c\x0f\x18\x4e\xb2\xaa\x9a\x39\x48\x38\x50\x54\x5b\xdb\xec\xc9\x6d\x5d\x86\xdc\x63\xe7\x80\x06\xc4\xdc\x55\x97\xaa\xc5\x1e\x47\xa5\xca\xea\xd5\x44\xcd\x27\xe0\x69\x51\xf0\xd0\x63\xae\x63\xa3\x89\xf1\xca\xd6\x73\xd0\xc6\x0e\x70\xea\x8d\x19\xec\xaf\x9a\xa8\xe7\x69\xd2\x2a\x82\x38\xed\xa9\xfa\xbe\x1e\xe7\xbe\xec\x0b\xe0\x5b\xe2\x7a\xba\x43\x56\x1f\xaa\x59\x0e\xd5\xc0\x26\xa6\x15\x27\xc3\xe5\x2a\xdf\x6e\xd6\x9c\xad\xd6\xe4\xb4\xe5\xaa\x8a\x6a\x71\xe0\x25\x34\x18\xd5\x56\xda\x9a\x0d\x32\x44\xb7\x28\xf1\xd6\x17\x94\xb0\x4b\x88\xd4\xab\xd6\x1f\x5d\x2c\x14\x81\xec\x70\xe0\x74\xf0\x4c\x2b\xdb\xbb\x6a\x7b\x3c\xc5\xba\xba\x11\xf4\xa8\xe9\x84\x9a\x36\x21\xa5\x3f\x69\x35\x89\x5e\xd5\x8a\x1a\x16\x6a\x94\x91\x6e\x07\x13\x28\x61\x6d\xda\x40\xa8\xcb\x41\x50\xf5\x7a\x17\x54\x68\x8a\xb4\x47\x3a\x8c\xb5\x12\xd5\x77\x7d\xdd\x06\xd2\xd1\xc7\x76\x2c\xd8\xe5\x0d\xd4\x42\x3b\x56\x7c\x05\x20\x41\x65\x1a\xb0\x68\x4e\xd0\xf5\xb6\xb1\x40\xa6\x0e\xb2\x1f\x23\x93\x25\xdc\x94\x7c\x6e\x35\x93\xbf\x20\xf9\xd8\xb3\x8e\x05\x8d\x93\x6f\x09\x38\x00\x8b\x81\x50\xee\x7c\x02\x03\xb0\xf2\x10\xca\x01\xb6\x92\x8e\x95\x45\x79\xcc\xbd\x04\xd2\xae\x1a\xa1\xd2\xb2\x4a\xa5\x10\xe4\x46\xa7\xe3\xc4\xd2\xb0\x05\x23\x49\xf6\xae\x1b\xac\xcb\x71\xcc\x4c\xed\xce\xe1\xa1\x90\xb7\x47\x9c\xda\x6d\xcb\x55\xef\x88\x9f\x87\x3f\xf1\xda\xab\xef\xc1\x6c\x41\x19\xed\x08\x9c\x75\x1c\xcc\x72\x4c\x3a\x1a\x60\xaf\xce\x4e\x89\x4e\x24\x37\x88\x63\x1f\x57\x2d\xd8\x31\x47\x54\x5f\x88\xd6\x0d\x92\x16\x85\x8f\xfa\xdc\x29\xe1\x5c\x05\xec\xdb\x3a\x77\x76\x50\x61\xc6\x32\x31\xe8\x63\xdd\x73\xcf\xcb\x55\x35\x98\xd9\x67\x00\x88\x70\xaa\xc9\x49\x1a\x32\x47\x32\xe1\xae\xf2\x73\xf5\x90\x73\x03\x2d\xb2\x33\x51\xbc\x1f\xea\xe4\x1e\xb5\x7e\xfa\x71\x95\xdc\x73\x3e\x69\x95\x11\x0c\x6e\x22\x39\x3d\xaa\xdd\x6e\xd0\x6c\x2e\xe0\xb3\xb6\x05\x0a\xd5\xcb\x66\x27\x9e\x69\x6d\x1b\x50\x26\x1a\x57\xaf\x92\x5b\x58\x96\x4e\x36\x3f\x93\x16\x3c\xc6\x63\x10\x23\x28\x5a\xec\x68\xe8\xac\xbb\x87\x6a\x43\x38\x01\xc5\xf8\x0e\xab\xd8\x02\xd2\x4b\x30\x97\xb5\xe7\xcd\x12\x4c\x80\x25\x5d\x3a\xb2\x08\xb6\xd0\xb2\x38\xec\x06\x1c\xa4\x90\x2d\xec\x0e\x35\x30\x66\xb1\x1e\x66\x1c\xf7\xc2\x48\x0d\x37\x91\xad\x6e\xe5\x37\xf8\xd7\xc8\x56\x6f\xff\xa1\xcf\xfc\x8a\x8f\x78\xd6\x6f\xfd\xdc\xbd\x5e\xf1\x82\xdb\x9e\xf7\xce\xff\xf0\x7d\xfc\x6d\x6f\x78\xe0\x47\xe9\xf0\xf6\xbb\xbd\xfa\x1f\xfe\xb7\xcf\x7c\xee\x8f\x3d\xf4\x86\xd0\x9f\xff\xb3\xd7\xbd\xe5\x59\x7f\xf8\x48\xf0\xbe\x3f\xfc\x89\x5f\x79\x04\x78\xda\x53\xde\xf2\xc8\xff\xfd\xa6\x7f\xf7\xd1\xf7\x7c\xe7\x1f\xb3\xaf\xf8\xc4\xff\x72\xcf\x17\xff\xec\x0d\xa1\xdf\x7d\xde\x7e\xef\xaf\xfe\xff\x3c\xfa\x33\xef\x78\xdc\x7f\xf9\xfe\xcf\x03\x0f\x3e\x6e\x7b\xee\x1d\xf4\x5b\x9f\x7a\xc7\xef\xbe\xfa\xcf\xd5\x6f\x3d\xfd\x93\x3f\xfa\x8d\x37\x84\x7e\x4f\x78\x46\xba\xe3\x2b\xbe\xf2\xd7\x9f\xf1\x03\x5f\xfb\x7b\xeb\x47\xfe\xc1\x77\x3f\xec\x33\xee\xfc\x8c\xdf\x7f\xe9\x17\xdc\xf7\xd5\x6f\x7c\xee\xff\x78\xcf\x07\xde\x7a\x23\x83\xea\x87\x3e\xfa\x41\x0f\x78\xf4\xc7\x3c\xef\x49\xbf\xf0\xc5\x0f\x7c\xcb\x43\x7e\xfa\x95\x77\x3e\xe0\xee\x3f\xfb\x17\xf7\xfc\x89\x57\xfc\x8d\xc7\xfd\xdb\xdf\xf8\xb0\x9f\x90\x4f\xfd\xbe\x1b\x0d\x1a\x9f\xf0\x6f\xcb\x37\x3c\x8a\xff\xd1\x1f\xfc\xf1\xa7\xfd\xd4\x0f\x7c\xde\x8b\xff\xfb\xcb\x5f\xf3\xd5\xbf\xfa\x6f\x3f\xfc\xdb\x1e\xdb\x3e\xe1\xe5\x2f\xc3\x0f\x7b\xbf\xbd\x21\xf4\x83\x5e\xf7\x87\xff\xf3\x7d\xaf\xff\xc0\x2b\x9f\xff\x90\xcf\x7e\xf7\xf1\xcd\xbf\xf9\x39\x9f\xfb\xce\x47\x7d\xd4\x97\x7e\xfd\x97\x7c\xec\x6d\x4f\x6d\xef\xff\xf4\xef\xb8\xed\xce\x1b\x42\x1f\xf6\xae\xaf\x7c\xc9\x7d\x9e\xf6\xa4\xef\xfa\xa1\x3f\xff\xf0\xff\xf8\xd1\x6f\xfc\xd3\xef\xfe\xb8\x77\xbf\xef\x3b\xf4\x87\xfc\xc5\xf1\xcd\xe0\x93\x1e\xfd\xf6\xd7\xee\xef\xfd\x2b\xb2\xd5\xad\x4e\xf5\x8a\x91\x23\xd1\x44\x07\x72\xae\x7c\xf7\x58\xe1\xea\x56\x8f\xa8\x80\x8b\x1f\x25\x0f\x72\xc6\x9a\xbc\x29\xab\x07\xab\xf7\x64\xf2\xdc\xda\x55\xe2\x32\xac\xab\xd3\x08\x14\x4e\x5e\x02\xf2\x27\x26\x8a\x12\xbf\x03\x03\x7d\xc1\xa6\x39\x1c\x34\x89\x5a\x7b\x3a\x42\xcb\x3d\x21\x12\xb6\x7a\xd5\xf4\x98\x54\x29\xba\x08\x96\x18\x65\x6c\x4c\x3e\x6b\x30\x12\x4b\x7c\x60\xd8\x54\x3b\x37\xc5\xdc\x91\x57\x93\x2d\x85\x3b\xda\x4f\x9e\xf8\x55\x85\xb0\xd4\x32\x12\x02\x7b\x16\xc5\xb5\x2c\xd6\x0a\x1a\x14\x65\x9b\x7c\x2d\x3c\x80\x79\x08\xbc\x20\x0a\x39\x9a\x5c\xa4\x1e\x78\xde\x96\x8b\xe0\x2e\xc6\x43\x15\xdb\x2e\x8c\x4a\x30\xfa\x83\xb5\x9e\xcf\x68\xa4\x8b\xb4\x35\xd2\xe2\x1a\x30\xd6\x1b\x22\x38\x6a\x5f\x85\x76\x51\x9c\xec\x2a\x99\x7d\xd2\xf4\x66\xd8\x29\xff\xff\xec\xbd\x69\xbc\x4f\x55\x1b\x3f\x4c\x48\x25\xf3\x3c\x44\xc9\x2c\x61\x8f\x99\x09\x11\x99\x52\xa6\x4c\x7b\xde\x6b\x0f\x6b\xcf\x6b\xef\xb5\x0c\x71\x10\x92\x0a\xa9\x44\xc6\x54\x22\x99\xe7\x29\x53\x13\x32\x24\x64\xce\x3c\x96\x21\x99\x3d\x9f\xee\x9e\xbb\xdb\xe9\x9c\x9e\xfa\xbb\x7f\xe7\xf3\xdc\x2f\xfe\x2f\xbc\xbb\x9c\xcf\xf7\xb7\xf6\x75\x7d\xd7\x35\x2f\xc4\x6a\xd8\x11\x19\x14\x00\x4f\xd6\x6d\x68\x73\x82\x19\x71\xbc\x65\x21\x4d\xb0\x7d\x84\x42\x4f\xe5\xe8\xc0\x8c\x80\x93\x75\x9b\xae\x03\x8e\x20\x96\x23\x50\x4d\x4c\x1c\x4b\x26\xa7\x11\xcb\x88\x43\x83\xd7\x02\xdf\x63\x3d\x0e\x8b\x66\x10\xd1\x16\xc5\x8b\x7c\x28\x89\xc8\x08\xb3\xea\xad\x5e\x51\x10\x2d\x9a\x93\x35\x4a\x0a\x12\x93\xa6\x55\x04\xb0\xa9\xb8\x3e\x47\x07\x9a\xab\xc6\x9a\xe4\x62\x18\x62\xc5\x8e\xfd\xd8\x92\x71\x4c\xc1\x58\x90\x32\xf6\x3b\xfc\x1d\x4f\x67\x01\xf9\xe8\xc0\x16\x68\x9f\x63\x58\x8a\xd0\x5c\xc0\x7a\x22\x6b\xb1\x34\x1f\xf2\x36\x1d\x46\x71\xec\x48\x84\x45\x6e\xc8\xf3\xbc\xa5\x51\x2e\x74\x75\x22\x67\xd9\x88\x35\x17\x21\x2c\x28\x92\x60\x20\x20\xb1\x5c\x8c\xa4\xc0\x45\x91\x00\x22\x22\xeb\xc4\xe2\x35\xe0\x45\x90\x8a\x2d\x8e\xc1\x54\xe8\xd1\x58\x48\x94\x2c\xdb\xef\x20\x6a\x9a\x4f\x47\x14\xab\xb8\x34\x0a\xad\x48\x54\xc5\x38\xa4\xcc\x44\x64\x08\xc1\x44\x73\x1c\x85\xb2\x13\x31\xe0\x81\x19\xd9\x06\x8d\x28\x9a\x03\x59\x55\xdb\x07\x22\x74\x14\x43\x73\x94\xc4\x70\xd5\x10\x10\x9e\xc1\xbc\x8b\xa3\xc4\x0a\x4d\x68\xeb\x04\x58\x10\xcb\x40\x0d\x80\xc4\xe8\x36\x14\x65\x9f\xce\xaa\xb7\xa2\x44\xe4\x43\x36\x50\x04\x23\x64\x59\x4d\xb3\x93\x88\xc7\x9c\x25\x01\x53\xf4\x18\xa4\x0b\x9c\xa6\xc6\x00\x50\x82\xc8\x04\x2c\x13\x6a\x3e\x27\xc6\x86\x9c\x55\xcd\x56\x36\xe1\x3c\x4a\x54\x28\xce\xd1\x4d\x06\x06\x2e\x94\x6d\x19\x6b\x32\xcd\xf2\x3e\xef\x8b\x80\x4b\x38\xda\x51\xa2\x38\xe6\x68\xc5\x67\x7c\x16\xf0\x59\xe5\x7e\x8a\xa2\x4f\x5b\xa6\xce\x07\xa6\xcd\x87\xb1\x6b\xf1\x11\x07\x64\x97\x0a\x02\x23\x36\x64\xcc\x23\x51\x16\x51\x28\x85\xbe\x1a\x2a\x51\xe0\x43\x09\x23\x29\xab\xfa\x62\x12\x23\x84\x1e\x25\xe9\x16\x50\x58\x8a\x63\x75\xc3\x0c\xb1\x1c\x18\x94\xe1\xda\xac\xcb\xdb\x06\xaf\xd3\x00\x84\x0a\x54\x59\x10\x4a\x84\x43\x8c\x99\x64\x20\x9f\xbf\xf3\xfc\xb2\x20\xf6\xd5\x55\x2a\x14\x24\x90\x88\x9a\x42\x53\x32\x8f\xe4\x58\xc4\x00\x03\x55\xd6\x6c\x5b\x27\xaa\x62\x40\xcc\x01\xac\x01\xd9\xf0\x3c\x4b\x31\x64\xc7\xcf\xaa\x5b\xde\x37\x68\x56\x4e\x54\x8b\x27\x31\x6d\x46\xac\xaa\x03\x60\xf0\x7a\x82\x85\x48\x8c\x50\xe2\xf1\x49\x48\x92\x58\xb0\xdd\xc0\x11\x4d\x68\x88\x0e\x10\xb2\xaa\x80\x63\xf1\x34\xab\x84\x5c\x42\x51\xaa\x1a\xb0\xbf\xdd\x2b\x61\x44\xcb\xa2\xa7\x5b\x80\xc1\x52\xe8\x23\x1a\x33\x0a\xe7\x39\x2c\x93\xf8\x3a\x93\x28\xb2\x9f\x65\x3e\x98\xc5\xc4\x3e\x8e\x05\x12\xf8\x89\xab\xf9\x1c\x50\x74\xdf\xb6\x5c\x43\x0b\x7d\xec\xb0\x96\xe0\x24\x51\x20\x71\x0c\x64\xb8\x88\xf1\x14\x4d\xf6\xb3\x6a\xb9\xbd\xe8\x53\x6c\x04\x1d\x55\xa2\x84\x58\xb4\xa5\x90\x47\xc0\xb2\x69\x3a\x60\xd8\x98\x42\xd8\x4e\x62\x40\xa9\x76\xe0\x98\xae\x00\x68\x97\x25\xc0\xb4\x49\x56\x75\xa3\xd0\xae\x90\x60\x2e\x14\x20\x84\x3e\x0f\x2d\x89\x07\x0c\xd4\x23\xdf\x60\x25\x92\xb0\x82\xc2\x03\x0e\x20\x89\x8e\x62\xca\x63\x29\x86\xd5\x9c\x58\xc8\x22\x93\x17\x31\xa6\xb0\xe8\x09\x81\x0c\x35\x95\x51\x55\xcf\x88\xbd\x10\x26\xac\xa4\x26\xbc\x6f\x79\x96\x92\xd0\x3e\xc7\x86\x9e\xea\xb9\x24\x22\x42\x68\x45\x59\x36\x83\x6a\x06\xba\x60\xe1\x50\x01\x0c\xab\x3a\xac\x09\x58\x8f\x09\x03\xcc\x61\x15\xc7\x48\x52\x7d\x96\xb0\x90\x16\x5d\x10\xa0\xc4\xa0\x3c\x2d\xf6\xed\xbb\xc6\x05\xff\x4d\x3e\x7f\x17\x4b\x66\x81\xe7\x93\xb0\xa6\x16\x86\x98\xa3\x29\x86\xb7\x80\x14\x41\x85\x61\x6d\xd6\xd4\x38\xc5\xe0\x39\x1c\x71\xb2\x2d\xb1\x34\x1f\xe8\x1a\xe5\x21\x10\x13\x40\xb2\xaa\x6c\x22\xb0\x58\xa1\x60\x40\x64\xca\x34\x3d\x1c\x38\x48\x04\x96\xea\x9a\xc4\x71\x34\x5d\x67\x69\x96\xa6\x4d\x96\x4a\x02\x68\xc1\x44\x72\x14\xce\xd2\x11\xce\xaa\xf2\x9a\xaa\xc8\x76\xe4\x90\x84\x10\x5d\x54\x02\x25\xb1\x4c\x18\xca\xbe\xcd\x88\x2c\x88\x15\x9e\x11\x30\xe1\x75\x9e\x26\x82\x89\x54\xc7\xf6\x11\x43\x7b\x59\x95\x57\xa6\xf4\x44\x36\x5c\xc9\x24\x22\x60\x18\x41\x48\x90\x6c\x2a\x7e\xac\x82\x98\xa1\x43\xe2\xb2\xbc\x4b\x25\x1c\x2d\xd3\x3e\xcd\x02\x18\xa9\x8a\xee\xfb\x59\x95\x57\xd6\x75\xc5\x44\x1e\xcb\x85\x54\xe4\x11\xec\x41\x95\x01\x21\x63\x5a\x54\x18\x71\x46\xc4\x6b\x1e\x1b\x0a\x22\x11\x90\x1a\x89\xb2\xc2\x25\x1c\x42\x59\x95\x02\x14\x74\x5b\x95\x04\x93\xf7\xed\x40\x24\x89\x69\xaa\x08\x05\x12\x6b\x03\xc3\xb2\x13\x44\x24\x45\xb4\x94\x38\xe2\x2d\xcb\x06\x3c\x8b\xfd\x80\x0a\xcc\x20\xab\x52\x80\x4a\xa2\x27\xb4\x6c\xd9\x50\x64\x39\x93\x20\x91\xd7\x03\x9d\x44\x81\x27\xf2\x86\xae\xb8\xa1\x6b\x99\x02\x92\xf5\x10\xe9\x91\x9b\x20\x22\xca\x3e\x95\x55\xef\x59\x44\x22\x61\x62\x3d\x62\x25\x93\x66\x0c\x9e\x0b\x71\x02\x63\x82\x7c\xce\x33\xbc\x58\x8b\x44\x31\x0e\x63\x57\xa6\x81\x6d\x06\xba\x27\x59\x52\x22\xdc\x35\x6f\xf9\x6f\xf2\xf9\xbb\xec\x54\x96\x90\x0f\x17\x12\x23\x8c\x22\x02\x12\x83\xe5\x15\x1f\x13\x31\x64\x83\xd8\xa0\x02\xc6\xa5\x82\x48\x62\x2d\x8a\xd2\x39\x19\xf2\x9c\x1b\x08\x3e\xef\x64\x55\x56\x41\xa0\x62\x46\x4c\x78\xc8\x08\x98\xa5\x74\x89\x4f\x90\x9e\x78\x28\x22\x62\x22\x87\x9e\x6f\x1b\xb2\xa9\x49\x3c\x6b\xca\x31\xcd\x47\x24\xf2\xa1\xcc\x04\x59\x16\x76\x31\xac\xab\xa8\x8a\x4c\x78\x1b\x81\x80\xc3\x7a\x80\x83\x84\x76\x89\x13\x4a\x92\x42\x01\xc5\xa0\x1c\xc9\xd2\x25\xca\x03\x9a\x1c\x68\x7e\x6c\x05\x59\xb6\x6a\x50\xf5\xb9\x50\xa7\x02\x68\x19\x50\x96\x01\x80\x40\xd1\xbc\x90\x95\x28\x0a\xca\x46\x1c\x41\x8e\xa5\x64\xcd\x57\x6c\x8e\x25\x06\x8d\x39\x5a\xca\xaa\x51\x3f\x91\x4f\x14\x95\x55\x0c\x99\xb3\x45\x47\x0e\xec\xd8\xe4\x10\xb2\x9d\x90\xf5\xa2\x44\x22\x1a\x4d\x12\xd6\x96\x09\xad\xb2\x8a\xe3\x25\x22\x70\x25\x11\x64\xd5\x9a\x1b\x3b\x10\x7d\x3e\x8a\x0d\x57\x90\xb0\x9e\xa8\x4c\x12\x99\x8c\xce\xd9\x2a\xe5\x0b\xa6\x67\x49\x3a\x17\x82\xc4\x0b\x44\xac\xc8\x51\xe2\xd0\x82\xa6\xf8\x59\xf6\xa8\x34\x0b\x35\x49\xe1\x58\xd6\xb2\x7c\x33\x00\x9c\x04\x00\x23\x0a\xba\x4f\x33\x31\x45\x41\x1f\xf1\xb4\x1c\x01\x17\xc8\x7a\xec\x6b\x06\xc5\x58\x52\x56\xf5\xc5\x08\xbe\x17\xc6\x76\x08\x12\x20\x40\x35\x82\xae\xa5\x71\xbc\x64\x51\xb1\x61\xbb\x49\xa4\x2a\x18\x53\x31\xc2\x3e\x51\xe3\x30\x31\x05\x11\xc5\xae\x7f\xd7\x06\xb4\x7f\x93\xcf\xdf\xe5\xbb\xb3\x20\xec\xa2\x0d\x8b\x49\xa0\x2b\x99\x30\x08\x23\x43\xb6\xb0\x12\x18\x46\xa0\xf1\xa2\x88\x55\xc4\xba\x76\x80\xc4\x28\x04\xa6\x44\x5c\x4d\xf5\x14\x49\xb1\xc3\xac\x2a\x9b\x40\x36\x66\x55\x01\x48\xa2\xe1\xc6\x0c\xc3\x2b\xc8\x65\x29\x39\xf0\x30\xaf\x7a\x22\x74\x5d\xe8\xbb\x20\xa4\x6d\xd9\x72\x38\x95\xb1\x59\x05\xb3\x24\xab\x52\xdf\x92\xc6\x9a\x8e\xed\x44\x52\xc2\x84\x94\xee\x6a\x61\x48\x02\xd6\x97\x68\x19\x20\x86\x46\x02\xe6\x12\xc9\xff\xcd\xa1\x87\x31\x6f\xb3\x58\x73\x13\x92\x45\x86\x26\xda\x0c\x1b\xc6\xbc\xe0\xa8\x92\xee\x90\x04\xc6\xae\x66\xf1\xc0\x83\x90\x87\xac\xaa\x43\x04\x3d\x4d\x0e\x11\x10\x58\xdb\x13\x3c\x3e\x54\x55\x31\xcc\x32\x1a\x34\x7c\xc6\xf0\x99\x18\xc9\x8a\xe3\x1a\x02\x63\x72\x09\x70\x02\x41\x65\xd9\x10\x5b\x84\xf1\x99\x24\xd2\x69\xa4\x4b\x09\xab\xab\xd0\xf2\x21\x16\xb2\x6a\x8b\x93\x43\x47\x24\xb0\x00\x82\x96\x46\x4b\xb6\x6f\x06\x82\xc7\xb1\x98\x13\xa0\xa2\x12\x99\x91\x63\xd7\xb7\xdd\xc4\x06\x81\x26\x72\x9a\xe7\xa8\x3c\xce\xaa\xd2\xb4\x10\xb3\x44\xd1\xa2\x40\x62\x11\xc7\x27\xba\x2c\x07\x22\xa0\x75\x85\x8b\x1c\xa8\xf9\x3e\x89\x89\x2c\x48\xac\xa5\x8a\x7a\xa2\x11\x1b\x84\x32\x63\x88\x59\xd6\x94\x27\x63\x1f\xd2\xae\x62\x23\xc5\x15\x4c\x97\xe3\x75\x46\x83\x86\xad\xb3\x20\x54\xe4\x24\x06\xaa\xac\xbb\xac\x4d\x61\x9e\xf1\x45\x49\xe5\x55\x56\x34\x32\x90\xcf\xdf\x55\xd0\xb2\x80\x7c\x22\x06\x58\x9a\x6c\x98\x32\x04\x9e\x13\x6b\x18\xab\x24\x71\x7d\x0e\x8b\x21\x14\x03\x23\x32\x25\xe0\x1b\xa1\x68\x87\x31\xa5\x91\xc8\x95\x63\x21\xcb\xa6\x28\x02\x49\x77\x90\x6a\x9a\x34\x43\x61\xce\x95\x6c\xdb\x01\x5a\x82\x0d\x06\x72\x56\x94\xa8\x11\x40\x91\x4e\x45\x42\xa4\xb3\x20\x21\x06\x90\x7c\x94\x55\x1d\x7c\xa2\x86\x04\xc8\x63\x95\xc8\x1e\xa5\x6a\xb4\x61\xa9\x40\x25\xd0\x50\x78\xec\x05\xbf\xf1\x6f\x84\x69\x96\xa7\x4c\x8e\x08\x41\x68\xf2\xb1\x0f\x95\xac\x4a\x38\x8b\x46\x2c\xba\x8c\x1a\x5b\x50\xa4\x69\x5d\x12\xe5\xd8\x43\x61\xec\xc4\x52\x00\x29\x95\x63\x5d\xd3\x4b\xf0\x6f\xb7\x9e\xe6\x08\x96\xe4\xab\xb4\x2b\x08\x59\x45\x83\x12\x74\x90\xcc\x26\xb4\x8a\x85\xd0\x46\x30\x54\x0c\x46\x31\x78\xdd\x32\xa1\x00\x14\x56\x53\x42\x60\xd2\x71\x2c\x00\x41\x87\x0e\xe4\x4c\x29\xb6\xb2\x6a\x03\x1a\x27\xcb\x0e\x1d\x72\x96\x2b\x26\xa2\x2d\xc7\xb1\xc3\xb3\x06\x10\x09\x66\x12\x56\x27\xbe\x19\x79\xb6\xad\x60\x9b\x84\x9a\xc8\x1b\x3e\xc0\xbf\x05\xc6\x59\xb5\x5c\xc6\xd6\x59\x9a\x13\x2d\x44\x74\x33\xb2\x3c\x37\xe0\x81\xec\x02\xc6\x0d\x4d\x48\xf1\x2a\x62\x3d\x49\x03\xaa\xe5\x48\x82\x01\x14\x13\xea\xb4\x16\x64\x95\x9e\x04\x04\x39\x21\xab\xd9\x09\x63\x4b\xb6\x62\x46\x18\x6b\x8e\xeb\x22\x53\x89\xa8\xc0\x10\x68\x33\x0a\x40\xc2\x46\x4e\xc8\xd0\x42\x9c\xd8\x8c\xaf\x19\x19\x67\x5c\xfe\xae\x26\x9f\x05\xe4\x43\x10\x4f\x03\x4f\xc5\x2c\x09\x64\x97\xf0\x2a\xc1\x8a\xa7\xc4\x7e\xa0\x89\x31\x1f\x44\x26\x23\x32\x2c\xa4\x21\xa4\x1c\xe2\x92\x58\x11\x2d\x94\x55\x49\x33\x01\xc9\x12\x72\x28\x92\xd0\x54\xe0\xc0\x30\x11\x11\x89\x59\xc5\xe7\x15\xec\x79\x04\x20\xc4\xe8\x9e\x2d\x49\x66\xec\xc9\x8c\x6c\xa9\x36\xa0\x19\x3a\xab\x76\x43\x03\x62\xfb\xa2\x45\x71\x01\xc0\x09\x06\xb2\x25\xb8\x80\xe3\x2d\x9f\x38\xae\xcd\xa3\x98\xd5\x64\x8a\xb3\x90\xcc\xb8\x92\x44\x43\x3f\xd1\x05\x2f\xcb\x06\xa7\x22\xc9\x0a\x81\xab\xda\x0e\xe7\x09\x1a\x61\x7d\xe2\xa9\xa1\x12\x32\x44\x65\x69\x8a\x56\x79\xca\x14\x58\x28\x31\x6c\xc2\x60\xdd\x0e\x6c\x21\xb1\x71\x56\x05\x3b\x21\x30\x84\x24\xf6\xb0\x6c\x07\x92\xcf\xa8\x9e\xec\x2a\x5e\x10\x73\x80\x49\x44\x97\xb8\x51\x10\xf0\x89\x14\xd2\x58\xd3\x88\x2e\xd0\xa6\x0b\xa8\xac\x5a\x28\x2c\x46\xbe\x41\x7b\xb1\xed\x0a\x12\x74\xd5\x58\x4b\x38\x6c\x99\x2e\xf4\x3d\x8f\xd2\x43\xde\xe0\x34\x8e\x27\x11\x4f\x73\x2a\xe3\x5b\xaa\xc2\x59\x8a\x65\x64\xd5\x3c\x3a\x10\x20\x25\x27\x22\x10\x95\x48\x95\x5c\x27\xf2\x74\x89\x71\x89\x07\x64\xd6\x83\x89\xc3\xb3\x94\x9b\x24\x09\x24\x8a\x2c\x27\xbe\xa2\x58\x3c\xf4\xb3\x2a\xfb\xe4\xeb\xbe\x26\x02\x19\x25\x16\x2d\x0b\x9e\xe7\x29\x21\x56\x78\xd9\x51\x19\x8e\x51\x05\x51\x01\x3a\x0b\x6d\xc1\xe3\x20\x0c\x3d\x05\x11\x9c\x88\x77\x2d\x3d\x1c\x7a\xdf\xef\xe4\x33\x25\xbe\x3d\x00\x14\xcd\x51\x74\xe9\xe1\x47\x6f\xd7\xda\x7b\x94\x6c\xad\xd4\x77\xd5\xa0\x1a\x2d\x26\x5e\xaf\x32\x74\x52\x9d\xd1\xa5\xce\x0e\xca\x51\xf2\xc1\x6c\x83\x9a\x94\x1b\x72\x57\x13\x51\xd7\x2e\xf1\xaa\xca\x64\xc5\xfa\xc1\xc3\x16\xc7\x03\xd6\xd6\x59\xb6\xb2\xc0\x95\xdc\x47\xc7\xe2\xf6\x57\xce\x5e\x3e\x16\x0d\xdf\xdf\xee\x7f\x49\x34\xdb\xf2\x46\x83\x56\xf6\x5e\x7d\xe6\xfe\xaf\x1e\x1f\x7e\x32\x18\x35\x77\x56\xdf\x77\x66\x64\xcb\xf3\xc1\x73\xf7\x1f\xe4\xab\x1c\xfb\xf4\x81\xf5\x03\xfe\xdd\x75\xf6\x77\x7f\xf3\x4f\x5d\x67\xc6\x82\x05\x7b\x97\x5f\x9a\x66\x1f\xda\x95\xb3\x5e\xc7\xa3\x7d\x9a\x2f\x3d\xfa\x69\xf1\x16\x71\xa5\x67\xa6\xac\x1f\x33\xe9\x54\xd7\x4b\xa7\xfe\xaf\xe8\xff\x81\xe8\x1f\x1f\xe1\xef\x04\xff\xf4\x11\x16\xe4\xbe\x74\xf6\x51\x67\xc1\xac\x17\x67\xec\x1e\x59\xbb\xd4\x4f\x3b\x8f\x71\x4f\x9f\xcc\x11\xbf\x57\x3e\xad\x43\xae\xa1\x9b\xbb\x54\xbd\xf1\x7f\x45\xff\x0f\x44\x07\xb4\xfe\x67\x72\xff\x72\x47\x06\x65\x7b\xf4\xd1\xff\xaf\x7f\xbb\xb2\xff\x33\xf3\x1b\xd4\x24\xff\xe0\xff\xdf\xd5\xef\xff\x44\x53\xcf\xe7\xf9\x5d\xb0\x76\x8d\xfc\xa1\xb1\xe1\xd3\xa2\x0b\xa8\xfc\x1d\x36\x1c\x7c\xe1\x97\xbc\x6f\xce\xdb\xd3\xf6\xf1\x4f\x06\x1d\x79\xe3\x9d\xa5\x6b\x8b\x71\x07\xd2\x9a\xdd\xb9\x73\xe7\xce\xbb\x8f\x4e\x11\x6a\xdd\xf5\xe7\x6b\xf4\x9b\x35\xaa\xf0\x96\x11\x1b\xc7\xbd\x38\xb1\x66\x93\xb2\xed\xb9\xe1\xb5\x87\x0b\xbf\x94\x17\x8f\x77\x17\xcc\x09\x76\x09\xa6\x70\x7a\xe9\xda\x39\x2b\xf4\x5b\xbf\xb4\x5d\x9d\xb9\x8f\x3f\x79\x7e\x51\x81\x11\x13\x1b\x0e\x1a\x7c\xff\xdc\x33\xe7\xbf\x3a\x57\xf3\xf9\x9c\x17\xec\xd2\x2f\xa6\x97\xae\xf9\xc2\x80\x4f\x7b\xd2\xbb\x8e\x54\x3c\x53\xb6\xeb\xf0\x52\x5d\x0f\x6f\x58\x3b\x01\xcc\x63\x9e\x5d\xf1\xde\xf2\x51\x93\xdd\x09\xdb\xae\xa5\x97\xde\xd2\xe0\xab\x4a\xd6\xe0\xd2\x35\xda\xe7\x39\xf4\xea\x2d\xf6\xb1\x39\x07\x27\x1f\xdb\xca\x3e\x3c\xd1\x1b\xf8\xce\x92\x12\x17\xa7\x75\xcb\x93\x5e\xfa\xd8\x98\x26\xb5\xb6\x15\x44\xd5\xaa\xfd\x52\xbb\xeb\xee\x2f\x3f\x1e\xfb\x42\xe9\x97\xcb\xdc\xb9\xda\xc5\x6a\x65\x6c\x7c\x37\x8f\xfd\x90\x93\x5e\x7a\x5d\x69\x65\x4f\xab\xc7\x6b\xb4\xc4\x27\x2e\x35\x7c\xe3\xe7\x7e\xa3\x3f\xfe\x72\xd6\xda\x45\xf3\xf2\x1f\xc8\x57\x66\xe1\x6b\x15\x17\x9c\x2d\x95\x5e\x7a\x60\xaf\x22\xcd\x6a\x26\xf5\x5e\xae\xf2\xc2\xa0\x78\xc1\x92\x43\x8b\x56\xb4\x79\x22\x77\xe1\x11\x45\x4a\xbd\xb9\x60\x5d\xd5\x0f\x96\x5c\xd1\xd3\x4b\x9f\xec\x50\x5c\xf2\x16\x3d\x75\xe0\xe5\xfe\x1f\x7d\xde\x79\xf9\x90\xd5\x0d\x2f\x9d\xe9\x77\xa0\x68\xbb\xa2\x0f\xb4\x2e\x5c\x6b\xc3\xf2\x4a\x25\xd2\x4b\xd3\x45\xd8\x4e\xf5\xb6\x96\x9d\x67\x7f\x55\xe0\x53\x73\xcc\xa1\xd7\xfa\xc2\xf3\x45\x57\x8d\xd8\xbf\xba\xc3\x83\x5d\xdb\x4e\x19\xdc\xe7\xbd\xf4\xd2\xfd\x6f\x7c\x20\x7c\xbe\xaf\xda\xce\xae\x97\x16\x54\x3c\xf5\xfd\x9e\x5c\xdc\xc2\x9c\x4d\xce\xc8\x6f\x7c\x9f\xcf\xca\xed\xfc\x14\x4c\x78\x25\xbd\x74\x9b\x23\xbb\xbf\xab\xdd\xcd\x1e\x70\xb8\xf9\xd7\xdf\x1a\x1d\x9d\x6b\xa7\xfc\xb2\x5d\x3f\xda\x72\x55\xdf\x7f\x7f\xb6\x01\xb9\xf1\xe4\x53\xe9\xa5\xeb\xad\x7b\xa0\x54\xdd\x9e\x51\xcf\x7e\x8f\x0e\x78\x64\x72\xfe\xc1\x6b\x46\xbe\x71\xbd\x62\x9b\x6b\x7b\xdd\xe3\xf9\xe4\xfc\xf2\x86\x07\x46\xa4\x97\x36\x2b\x37\x7d\xa4\x60\xab\x32\xe1\x73\x83\xfb\xde\x9c\x37\xb4\xc6\x5b\xb9\xb6\x15\x29\x3b\x6f\xe3\x89\x36\x13\xbe\xbc\xda\x75\x67\xff\xba\xa7\xd3\x4b\x4f\x5f\xb3\x63\xd6\xe3\x6f\xec\xda\x7a\x6c\x43\xf7\xec\x6b\x8a\x81\xea\xa7\xb7\xad\xed\xd9\xe6\xe4\xbb\xa8\x60\xdb\x13\xa7\xef\x14\x6d\x77\x25\xbd\xb4\xd7\x62\xd5\xc3\x1d\xb2\xa1\x0e\x83\x1b\x54\xd4\x3e\x11\x96\x34\x5b\xd6\x7a\x75\x38\x79\x52\x9f\xf1\xe7\xa9\x31\x79\x0e\xdf\x1a\x08\xd2\x4b\x57\xe2\xc7\x79\xc1\xc2\x46\x9b\xb5\x1d\x65\x57\x4f\xee\xd7\xa4\x17\xe9\x5e\xe3\xf1\xc5\xb3\x0b\xb5\x99\xc9\x5f\x2e\x59\x60\x54\xdb\x26\xe9\xa5\xef\x6b\x4f\xfa\x9d\x68\x73\x88\xc6\x8b\x77\x0c\xbd\xf5\xec\xc4\x97\x5b\x3d\xb8\xad\xf1\x98\xf1\xf5\xa7\x33\x5b\xbe\xcc\xbd\xb2\xd9\xd2\xa5\xe9\xa5\x9b\xb9\xfa\xd4\x3c\xdd\xba\xe4\x69\x31\xd5\x1e\x57\xd7\x7b\xe0\xca\xb0\x89\xdb\xf3\x3d\x7c\xae\xc5\x89\xfc\x6b\xce\x56\x6c\xf2\xf8\xf8\xda\xe9\xa5\x3f\x1b\xb7\xa7\x55\x9b\x99\x3b\x36\xae\xcd\xa3\xfc\x54\x75\xff\xaf\x35\x1e\x3a\x57\x68\xdf\xc8\x57\x91\x51\xf9\xd5\x07\x46\x56\xfe\xa1\xf2\x8c\xf4\xd2\x2b\x4f\x6e\x1e\x53\x68\x43\x1d\xbb\xe7\x59\x26\xd8\xb7\x2a\xf7\xe2\x9b\xa3\x7b\x56\x74\x7b\xad\x3f\x74\xf6\xe1\x62\x47\x4e\x1d\x2e\x9d\x3b\xbd\x74\xf2\xd8\xac\x0f\x5b\x09\x27\xd2\x94\xf9\x90\x9e\x5f\xe6\xe2\xb3\xe3\x86\x35\x79\xea\x87\x6d\xed\x4a\x3f\xf3\xc4\xd1\xd6\xb9\xfb\xae\xab\x96\x5e\xba\x37\xc6\x3b\x57\xde\xfa\xb9\x56\xd7\xa7\x72\xcd\xcd\x57\x66\x65\x8b\xb7\x36\x6c\x5c\xd8\xaf\xcb\xfc\x6c\x43\xfa\xf9\x9f\xc5\xde\xf1\xe1\xe9\xa5\x73\x6d\x1c\xfe\xcd\xd9\xb1\x13\x66\x35\x69\xfd\x7a\xde\x8a\xbb\x36\xd6\x6a\xd7\x61\x44\xc5\x4a\xf7\xd7\x8e\xdb\x0d\xae\xd2\x79\xf1\x72\x50\x25\xbd\x74\x19\xa9\x7f\x97\x4e\xb5\x06\x0e\xb6\xcd\x57\xdf\xfb\xb6\xe8\x0b\xfa\xeb\x52\xfd\x52\x27\xde\x58\xd5\xb6\xa2\xb2\xe6\x52\xa5\xfe\xf7\xe7\x4c\x2f\xbd\x74\x64\x9b\xf7\x1b\xfc\xdc\x7d\x66\xa3\x9e\xcd\xa5\xba\x3b\x3e\x2b\x95\xa3\xdc\x97\x5f\xb6\xfb\xe8\xc6\x9c\xee\x63\x77\xec\xfd\xf0\xa7\xdd\xbb\xd2\x4b\xaf\xd0\xdf\xfb\x7e\x4a\x91\x2e\xab\x7e\xb8\x49\xd4\x49\xbf\x74\x2f\x4a\xd7\x69\x71\x61\x6c\xf1\x02\x75\x3a\xce\x69\x3f\xef\xc8\xe5\x37\xfe\x64\x69\x43\x46\x76\x9e\xa3\x7c\xd3\xf4\xd9\x13\x3b\x7b\xc4\x5f\xad\x65\x17\xfd\x7a\xd5\x59\xfb\xf1\xe0\xae\x6f\xae\xf9\xf9\xa3\x3d\xab\xbe\x3f\x37\x29\xbd\x34\xdb\xb3\xef\xd5\x33\x63\x4b\x7e\xb9\xec\xfe\x29\x07\xc9\x8a\x71\x65\x6b\x54\x68\xb9\x6b\xcc\xca\xd1\x97\x7a\x3f\x4a\xd7\xcd\x35\xe4\x9d\xdd\x7f\x62\x88\x57\x7f\x1e\x2f\x0c\x2a\x97\xa7\xd0\xc7\xea\xd6\x67\x66\xcc\x9f\x2c\x36\x6a\x5b\x4e\xe9\xff\x78\xe3\x1b\xe3\x3e\x9e\xf4\x6d\x43\xa1\x71\x7a\xe9\xdd\xed\xba\x7c\x65\xee\x3c\x5a\xbf\xd7\x82\x0d\x85\xdb\xee\xc6\x7b\x57\xbe\xb9\xe4\x5c\xd5\x0f\xac\x59\x1b\x46\xb7\x7c\x7f\xf3\x27\x23\xbf\xfb\x93\x0e\x76\xfe\xbe\xfb\x97\xd5\x7f\xec\x5f\x71\x78\xa9\xeb\xdd\xbf\x10\x9f\xf9\x65\x51\x9d\x6c\x2d\x7f\xfe\x26\xef\xdb\x15\xc6\x5e\x5a\xca\xec\x7a\xe4\x4f\x3a\x58\xac\xd7\x23\xd9\xcb\xbf\xf4\xd5\xc1\xaf\x2b\x5c\xbe\x33\xe0\xb3\xe1\xb5\xdd\xa6\x6d\xab\x9d\x6e\xd4\xf0\x81\xde\xaf\x6e\x6d\xbe\xbc\x6a\xc3\x23\x4d\xfe\x19\x73\xa7\x35\xbb\x73\xeb\xf4\xcb\xef\x96\x9e\x22\xd4\x1e\x98\xd6\xa5\xd2\xef\xff\x69\x6e\x9d\xab\x9d\x9e\x38\xfc\x5a\xb7\xce\x97\x40\x8b\x3b\x9f\x6a\x69\x0f\x6e\x2c\x32\xed\xc2\x91\x4e\xdd\xcb\xb6\xbc\x76\xbd\xef\x9a\xde\x7b\xef\x39\x1c\x90\x9b\x66\x3b\x99\x71\xd3\x98\x27\xc9\x90\xf0\x36\xcb\x48\xac\x0b\xf4\x98\x81\x84\x97\x64\xc2\xbb\x28\x4e\x58\xc5\x70\x64\x8f\xb0\x4a\x22\x5a\x71\xc8\xcb\x0e\xaf\x38\xba\xf0\xaf\x84\xf9\xbc\x0e\x8d\x1b\x37\x4e\x07\x7b\xe3\xe8\x5d\x63\xd0\xe1\xbc\xe7\xbb\x37\x14\xe7\x30\xdb\xde\x3e\xfb\xf2\xcb\xc1\x80\xda\x4f\x47\x2f\xde\xb9\xb9\x62\xda\x82\x7c\x41\xd7\x14\xa7\x95\x40\x1c\x23\x1f\x2b\x21\x50\xe8\x20\x62\x15\x46\x48\x18\x8c\x22\x8f\xd0\xa1\xcb\x18\x36\xc3\xb3\x2c\xa4\x59\x1e\x3a\x86\xec\x4a\x52\x20\x6a\xfe\x7f\x5a\xce\xa6\x08\xb5\xd3\xfe\x80\x5d\xdc\xac\xf0\xc8\x63\xbd\xea\x6d\x4b\x1b\x7a\xe3\xc9\x21\xf3\xf2\xbd\xf6\xf1\xe4\x51\xe0\x39\x6e\xfd\xeb\xb3\x8a\xae\xfd\x76\xe1\xc0\x5e\xcf\xa4\xf6\xb4\xb1\x6c\xb0\xbc\x1d\xfb\x18\xf0\x21\xe7\x78\x8e\xc9\x70\x12\xb6\x5c\x33\x8c\xb0\x9c\xc4\x10\x91\x58\x41\xac\x0f\x7d\xce\x31\x74\x45\x88\x95\x84\xf6\xfe\x38\xed\x3f\x20\x97\xbe\x6f\x7c\xb5\x45\x2d\x0f\xb8\xfd\xbe\xda\x3f\xf2\xc9\xa3\xeb\x2e\x6d\xfc\x60\x7a\xb5\xb1\xdb\xa3\xe5\x97\x9f\x1c\x31\xe3\xeb\xbe\xdf\xad\x4e\x2d\x64\x99\x68\xa2\x87\x4c\x5f\x94\xb0\xea\xaa\x2a\xb6\x4c\xce\xd6\x7d\x1f\x70\x4c\x62\x43\x86\x33\x43\xdd\x73\x59\xec\xab\xb1\x1e\x46\x50\xa6\x44\xf7\xf7\xbc\xc2\xff\xab\x20\x77\x5b\xcd\x91\x5f\x96\x14\xdf\xdd\x6b\x48\xe7\xab\xc7\x87\x3c\x5f\x41\xf9\xb4\xd5\xd4\xf8\x5c\xbd\xf6\x35\x4f\xb5\xe4\x6b\xf4\x69\xb8\xe3\x62\xd9\x12\xe9\xd4\x69\x78\xe1\x7a\xe5\x83\xad\xf9\x0f\x9e\xff\xfc\xac\xf4\xde\xd8\x5a\x76\xb1\x81\x13\x66\x56\x7f\xf1\xda\xaf\xad\x5e\x88\xd2\x5e\x64\xb3\x3d\x96\xe2\xcc\xad\xa7\xf8\xa6\x14\x89\xa2\x27\x6b\x1a\x82\x42\x44\xa0\x16\xab\x96\x02\xa1\x2d\x30\x94\x08\x38\x56\xc4\x42\x0c\x4d\xc0\xfb\x50\x25\xaa\x11\x50\xfe\xdd\xea\x34\xe8\x0f\xd8\xe1\xeb\xd3\x1a\xbd\x5c\x6d\xf3\xeb\xd7\xc7\x6d\x92\x9f\xfa\x7a\x64\xcf\xc6\x6e\xae\x99\xe7\x93\xde\xa7\xab\xbd\xbe\x7b\x66\x8f\xf7\xe9\xd4\xc2\xfe\xaf\xba\xb0\xfe\x80\xbc\x7f\xe6\xc4\x39\x7b\x4b\xf6\xae\x74\xfd\xc8\xd1\x1f\xd6\x3c\xf1\x61\xbb\x7a\x4d\xde\xb9\x53\x7b\x67\xeb\x2b\x73\x0b\x3c\xf3\x7a\x8d\xc5\xcf\x75\x4c\x71\xc2\x4c\x92\x20\x4e\x22\x86\xf6\x5d\x4d\xc6\x8c\xe9\xb9\x2c\xa1\x7d\x59\xe4\x83\xd0\x80\x81\x13\x47\xd0\xf1\x6c\x46\xe1\x62\xca\x27\x74\x14\x5a\x4a\xc0\x65\x84\x7c\x66\x60\x9b\xf7\x2d\x13\x0d\x0e\x7b\xa0\x37\xa7\xbd\x59\xec\xb3\x3e\xc3\x15\xed\xd5\x37\xb7\x55\xab\x93\xff\xe7\xeb\x1b\x4e\xc2\xa3\x29\x6e\x23\xa0\x75\x18\x24\x9c\x8b\xb9\x80\xf7\x04\x16\x05\x94\x65\xd0\x8e\x27\xaa\x51\x60\x7b\x10\x39\xd0\xf2\x4d\x2d\x0e\xc2\x40\x97\xe5\x80\x31\x4d\x7c\xd7\x73\xa9\xe9\xb8\xa6\xc3\x43\x79\x0b\xd4\xd4\x3f\x1a\xf6\xf5\xb9\x23\xad\x4a\xdd\x57\xb0\x5a\xc7\xaa\x8d\x9e\x3a\x77\xfe\xcb\x91\x8f\x8c\x5f\x96\xb7\xf1\xfe\x27\xee\x4f\xa9\xe1\x8a\x09\x23\x4b\xb2\x24\x61\xda\xa1\x81\xa3\x29\xb1\xcc\xb8\x31\x00\x02\xeb\x70\x1a\x66\x45\xdb\x31\x2c\x07\x49\x88\x47\xbc\x17\x51\x2c\xc5\x86\x2a\x88\x33\x72\x0d\x38\x74\xe3\xf1\x9d\x69\x73\x6a\xaf\x6f\x8e\x5e\x5b\xda\xb7\xd7\xf6\x8f\x4a\x31\x57\xea\x28\x0b\xbf\x4c\x23\x8b\x7b\x96\x51\xf4\xca\xf7\x0c\x59\x69\x9a\xed\x54\x46\xae\x31\x43\x9e\xc4\xc4\x53\x89\x4f\xb4\x7f\x4d\x88\x5a\x3c\xf2\x12\x21\x8c\x23\xda\xa4\x65\x24\xd9\x0c\xd1\x64\x36\x01\x28\x0a\x2d\xc9\xa6\x78\xea\x5f\xd9\xd4\x39\x5d\x33\x70\x4d\xf7\x95\xad\x4a\x3c\x73\xe1\xad\x7c\xef\xd0\xa3\x26\xcc\xca\x37\xdd\x7b\xf7\xb1\xef\xbb\xb6\x2d\x3f\xea\xf8\xf7\x1f\x7d\x00\x7f\x7c\x6f\xef\x7b\xe9\x8c\xb6\xfa\xcc\x3d\x0d\xdf\xe8\xd4\x74\xef\xda\x61\x55\x56\x57\x38\x6e\xad\x7a\x7b\x55\x8e\x71\x6f\xaf\xbc\x1c\x1e\x5f\x35\x7b\x7f\xd5\x7e\xc7\x7f\x4e\x71\x3f\xae\x4e\x43\x5d\xd0\x5c\x2f\x4c\x3c\x37\x91\x1d\xc5\x44\x11\x63\x9a\xbe\x1c\x99\x32\xe5\xc9\xae\x02\x29\x10\xba\x71\x2c\x0b\xb6\xc3\x79\x54\x48\x49\x99\x18\xed\x98\x20\x68\x78\x59\x5a\xd2\xb3\x5b\xe1\x22\x77\x72\x0e\x6c\x00\x0a\x3f\x36\xf3\x7a\x29\x69\xdd\x3c\x65\xf2\xea\x45\x7c\x70\xdf\x86\x14\x0f\xad\x22\x86\xa6\x88\xc4\x07\xbe\xc3\x42\xdd\x76\x22\xcb\x14\x8c\xd8\x64\x29\x01\x25\x86\xc2\x59\x02\x00\x88\xb8\x08\xeb\x94\x42\x28\x5d\x08\x6d\x8a\xcd\x08\x79\x5d\xb5\x01\xd7\x9e\x59\x51\x7f\xd8\xae\x35\x34\x6a\xba\xf7\x85\xf6\x63\xa3\x39\x37\x26\x76\x98\xfd\x79\x83\x81\xdd\x6e\x9a\xd2\x8a\xdd\x29\x55\x25\xd1\xa6\x5c\xda\x73\x83\x80\x96\x13\x8d\x0e\x88\x13\xd3\x2a\xe5\x26\xb1\x1f\x85\xac\x03\x65\x2a\x48\x20\x61\x54\x29\xb1\x42\x06\xd2\xd8\x88\x70\xe4\xf9\x77\xa9\xd2\x5d\xca\x51\xa9\xe3\xbe\x4e\x0b\x0b\x1a\xfa\x99\x6e\xf7\x9d\x59\x59\x7a\xf8\x17\xda\x97\x79\x1a\x17\x2f\xb6\xe2\x9c\x75\x23\x7b\xe9\xb6\xb3\x27\xaf\xf9\xdf\x99\xe3\xf9\x03\x32\x3d\x6a\x70\xdd\x45\x55\xde\x79\xe9\x97\x19\x17\x73\x0d\x5f\xb8\xb6\xcc\x96\x4e\x41\xee\xcf\x5a\xec\x5f\x5a\xe0\xd7\xbd\x33\x2e\xae\xa9\xdf\x25\xb5\x46\xcb\x98\x1e\x15\x44\x86\x41\x13\x02\x54\x0e\xe8\x31\xef\xc7\x9a\xc9\x68\x38\x08\x15\x13\x59\x86\x86\x5c\x26\xa1\x04\x35\x82\x04\x72\x92\xcd\x27\x14\xfd\xc7\x49\xff\x01\x99\x59\x0f\xb2\xad\x12\x99\x6b\x7b\x5b\x5d\xc8\x5f\x6f\xc1\x17\x6b\x0a\x3e\x7a\xe3\x29\x71\xd4\xce\xd2\x73\xce\xad\xf8\xf9\xe4\x6d\xad\x58\x6a\x4d\x30\x54\x64\x25\x56\x7d\xd1\x57\x55\xe4\x99\x98\xf7\x6c\x1a\x9a\x16\xab\x48\x86\xc7\x46\x2c\x27\xf1\xb6\x1d\x25\x8c\xa5\x7b\xaa\x4f\x29\x96\x46\xc5\xa6\x93\x39\xa3\x17\x5c\x46\xe5\x11\x5e\x9f\x3f\xde\x7d\xe4\xad\x5b\x5f\xf8\xdb\xa7\x48\xed\x3e\xf9\xf4\x18\xd7\x6e\xc9\x33\x61\xd1\x22\x57\x6f\x86\xf7\xee\x8a\x65\xbe\x9e\xca\xd3\xa0\xcc\x71\x66\xcc\x59\x11\x56\x02\x9a\x49\x68\xcd\xf7\x31\x08\x6c\x4e\x40\x2e\xe5\x05\xd0\x20\xb6\x4e\x02\x62\x20\x84\x51\x84\x8d\xbb\x9a\x69\xff\x80\x5c\x8a\xcb\xdd\x7b\xd7\x86\xef\x0f\x99\x4b\xa7\xdc\xde\x31\xbf\xed\xb6\x96\x55\x8f\xb4\x69\xd4\xf0\x87\x7c\x2d\x6a\xb8\xb7\xdb\x9e\x9a\xf8\x6c\x8a\x19\xdd\x73\x05\xec\xc1\x58\x22\x8c\x69\x71\x14\x0a\x19\x85\xb7\x81\x15\x02\x26\xf1\x18\xd7\x60\x68\x56\x63\xec\xc8\x06\x1e\xf6\x39\xc2\xbb\xaa\x6c\xc0\xbb\xcd\xf0\x3f\x27\xbd\xc8\x58\x7e\xf0\xe2\xc2\x21\x3f\xf6\x81\x2f\x04\x97\xb2\x15\xdc\x55\xe7\x83\x79\x3f\x9c\x6b\x39\xe7\xc7\x1a\x1f\xdf\x9c\x5d\xff\xe8\xc2\x59\xa9\x65\x0f\x33\x49\x0c\x87\x61\x63\x59\x75\x35\x80\x58\x43\xd1\x3d\x21\xa2\x14\x9e\x89\x69\x12\x24\x9a\x28\x11\x37\x49\xc2\x90\xa3\xac\x90\x8d\x90\x19\x04\x26\xc9\xa8\xd3\x67\x0f\x3c\xb2\xb8\x4d\xe1\x45\x55\x27\xee\xb1\x56\xd7\xe7\x66\x8f\x7a\xf4\xcb\xd7\xad\x22\xb7\xf3\x69\x43\xfb\x3e\x3b\x01\xdf\xf8\xa2\x7b\x8a\xd7\x3e\xfc\x17\x1b\x8f\xd3\x9d\xf4\x53\x43\xdb\x0b\x27\x97\xbc\xf7\x9d\x34\xf3\xbb\x0f\xde\xe8\xf2\xc5\xa4\x7d\x0d\xd6\x6a\xb5\x0b\x7f\x34\xeb\xb1\xad\x83\xb9\x87\x4a\x2c\xaf\x9d\x5a\x05\x71\x14\x1b\x49\x6e\xa4\xb2\x92\xaf\x18\xae\xa2\xeb\x41\x10\xba\x9e\x4d\x69\x74\xa2\x50\x90\xe1\x19\x17\x00\xc0\x49\xac\xcc\xa9\x14\x05\x2d\x37\x04\x6c\xc6\x93\x7e\x3b\xd8\xf0\x12\x17\xef\x6e\x74\x65\x51\xd5\x72\x73\x1a\x0e\x55\x46\xf7\xeb\x34\x7a\x7b\x9e\xea\x67\x67\xed\x19\x3e\xb1\xe2\x5b\x75\xfb\xa6\xd6\xb1\xc2\x96\x6e\xe9\x82\x20\xc0\x58\x10\x0c\xdd\x31\x18\x08\x45\x23\x54\xa0\xa2\xb8\x34\xe3\x98\x92\x43\xd3\x18\x01\xde\x32\x4d\x91\x4f\x44\x9b\x93\x41\x70\x77\xc8\x7c\xd7\xd5\x92\xcf\x5a\x9e\x76\xe7\x75\xa1\xc7\xf1\x72\x4d\x97\xb5\x3a\xfd\xd4\xa4\x26\xbd\x59\xeb\xd3\xd7\x77\x8d\xfc\xb0\xe0\xde\xfc\xaf\x52\xf7\xee\xc6\x66\x0a\xdb\x67\x14\x2f\xe2\x69\x55\x74\x74\x3b\x0a\x80\x97\x78\x21\x87\xf9\xc0\x36\x23\xd5\x16\x09\x1b\xd9\x1e\x87\xb0\x21\x28\xc8\xa2\x88\xa7\x21\x1a\xf9\x56\x46\x7f\xb0\xd9\x1a\x75\x52\xc3\x4e\x33\x9e\x79\x60\x4e\xfd\x43\xe2\x23\x1b\x6f\x85\xeb\x87\xbd\x73\xd1\x2a\x5a\xa8\xf3\x2d\xef\xbe\xb2\xef\x3e\x7b\x35\xb5\x66\x48\x6c\xdd\x8e\x89\x10\x9b\x31\x32\x02\x4a\xe1\x7d\x03\xc5\x50\x55\x63\xc3\x0f\x75\x35\x02\xac\x29\xda\x5c\xac\xbb\x04\x46\x0a\x13\x99\x12\x10\x7f\x5f\xe9\x9b\x5e\x39\xac\x91\x6f\xb4\x7f\x7d\xd9\xad\xe0\xc8\xb6\xa2\x53\xbf\x27\x2d\x8f\x5c\xdd\x36\xa1\xca\xf8\x95\x35\x0f\x9d\x49\xab\x58\xb3\x79\xd5\x12\xd3\x52\x0b\xd9\x0a\x18\x4a\x8a\xa0\xc0\x00\x17\xf3\xaa\x69\xb3\x7c\xa0\xc4\xaa\x82\x28\xc3\xb4\x7d\xe2\xa9\x9e\xca\xa1\xd0\x30\x3d\x2d\xf2\x12\x57\x62\x69\x4a\x14\xfe\xc2\x85\x9d\x3e\x68\x49\xab\x15\x0d\x99\x1a\x65\xf6\xbc\x35\x6e\x7a\xfb\x8d\x97\xb3\x89\x69\xbb\xa6\x3f\xfe\xeb\x8f\xcf\xd5\xc8\x35\x65\xd6\x91\xe2\x6f\xa6\x97\xde\xbc\x74\xeb\x82\x4d\x2d\xf7\xef\x5d\x39\x7f\x79\xbd\x3b\xa3\x46\xff\x50\x7e\xfb\x46\x79\xdb\x73\xde\xa3\xf3\x4a\x94\x6f\x57\xe7\x88\xdf\x33\x5d\x70\xfd\xf9\xe9\x0f\x97\xef\xe9\x51\xba\xf3\x8a\xad\xd5\x8a\x4e\xac\xd6\xef\xac\x5d\xe9\xd8\xc9\xdc\xe7\x0f\x8c\x1d\x50\x6a\x61\x81\xe7\x8b\x06\x5b\x53\xdc\xa0\xe5\xd3\xb2\x28\x79\xa2\xeb\xc9\xa6\xcf\x09\xbc\xc1\x92\x38\x51\x21\xe0\xa0\xc5\xf9\xc4\x77\x19\x8f\x4d\x1c\x8a\xf1\x12\xe4\xb2\x9a\xab\x47\x86\x28\xdd\xc5\x4c\x77\xff\xc8\xb4\xd1\x78\x5e\xad\x4f\x8f\x2c\xab\xb7\xb0\x4a\x87\xbc\xd9\x27\x54\xea\x30\x6d\xc8\xb3\xb7\x4e\xcf\xde\x31\xeb\x54\xd8\x16\x52\x67\xcb\xa4\xe3\x31\x90\x6b\x86\xfd\xf9\x80\x89\x67\xb4\x62\x67\x7e\xa5\x9a\xbf\xd6\xa1\xf4\xd7\xee\x83\xfe\x73\xb9\x72\x2e\x7c\xc6\x1e\x5d\xbe\xcb\x86\x4a\xa9\xe5\x31\x35\x60\x42\x93\xa2\x58\x5f\x0c\x7d\x6c\xb8\x06\x31\x3d\x20\x24\x86\x4a\x02\x47\x8f\x55\x4b\xb7\x95\x90\xb1\xb1\x64\x06\xaa\xe8\xab\xd6\xbf\xf6\x91\x66\x54\xd5\xd5\x6f\x7f\x56\x6a\xd1\xfa\x5d\x9f\x30\x37\xda\x7c\xde\xef\xe9\xe2\x2b\x3c\x7c\xa0\xcc\xd2\x39\xdd\x37\x51\x3f\x34\x73\x8a\x9a\xe6\xfb\x29\x26\x04\x91\xc5\xb2\x85\x55\xde\x34\xa1\xe9\x07\x0a\xa4\x9d\xd0\xf2\xe8\x98\x8b\x65\x89\x0e\x59\x16\xb2\x9c\xca\x24\xac\xe2\x20\x4d\x30\x65\x37\xa0\x04\xf1\x6e\x1e\xfb\xcf\x49\x8b\xab\xb6\xd4\x6b\xb9\xd7\xf9\x66\x58\xb9\xfb\xdb\x36\xea\x5d\xb0\xd3\xf8\xe9\xb7\x5a\x4f\x38\x53\x7c\x6c\xad\xc5\xeb\xa7\xe7\xea\xb5\xc6\x4d\xf1\x30\xb5\xc2\xd1\x3c\x50\xe4\x84\x57\x55\x64\x00\x37\x24\x82\x18\x7a\x5a\x10\xba\x94\x1f\x22\x45\xb6\x05\xcb\x77\xf9\x24\xa4\xd8\x24\xd4\x69\x43\xb3\x02\x2f\xa3\x17\xb4\xfe\x81\xd2\x83\xcf\xbf\x79\xae\xf1\x4b\x57\xc2\x2a\xc5\x5a\x97\xac\xbf\xaf\xfb\xf4\xc3\xa7\xa6\xd7\x59\x33\xa9\x6a\xab\x62\x3b\xbb\xbd\x32\x29\xb5\x27\xcd\xdb\x40\x86\x86\xe3\x25\x9a\x16\x84\x36\x6f\x53\xae\xcf\x69\x82\x01\xa3\xd8\x0b\x68\x51\x60\x75\x03\xba\x61\x20\x22\x0f\x4b\xca\x6f\x3e\xa9\xf1\x7b\x07\x6e\xc6\x93\xde\x36\x95\xaf\xb7\x79\xc0\xa6\x22\x1d\x1e\x6e\xb9\x73\x76\xdb\xa5\xbd\x9c\x51\xd3\x9f\x7e\xa3\x7e\xe7\xdd\x6d\xca\x8d\x2d\x7f\xe9\xfd\xa6\x61\x6a\x75\x9a\xc3\xa1\x8b\x84\x98\x91\x93\x48\x88\x55\x85\x05\xae\x27\x7b\x4a\xcc\x13\x16\x47\xbe\x28\x9b\x91\xc6\x03\xc6\x91\x55\xd3\x57\xed\x08\xb1\x81\x17\xc0\x8c\x3a\x7d\x3b\x0f\x53\xe0\x69\xf0\xf9\x90\x65\x4a\xc1\x58\x9b\x3d\xb0\xfc\xfe\xf6\x43\x97\xe7\x6f\x7c\xf4\xc9\x9c\xbf\x8c\xbb\xf4\xd2\xdb\xd3\xe4\xd4\x66\x2b\x4d\x05\xd2\xc8\x90\xa0\x4e\x27\x94\x12\xbb\x86\x6b\xca\x72\xc8\x20\x36\xb6\xd5\x84\x66\x7d\x8d\x8b\x69\x3f\x48\x08\x15\x9b\x46\x88\x62\x60\x4b\x86\x91\xf9\xdd\xfc\xd0\x86\x65\x95\x8b\x56\x32\xf3\x84\x05\x76\x55\x8c\x66\xb8\xc7\x8b\x6c\x7f\xb3\xd7\x17\x20\xf7\xda\x6a\x7d\xaf\xbd\x34\x24\xf0\xee\x9d\x3d\x32\x1f\x09\x13\x28\xc4\xba\x1e\x10\x03\x93\x91\xdc\x98\x75\x4c\x18\x1a\xae\xe9\x2b\x04\xc5\x31\x10\x79\x18\x87\xa1\xc6\x6b\x61\x22\x1a\x31\x67\x40\x9d\x92\xb5\x8c\x3a\x9d\xb7\x7b\xfe\xb7\x1e\xdc\x31\x74\x0a\x75\x6c\xfe\xa1\xb1\xb4\x5b\x7d\xca\x9d\x12\x08\x2e\xe0\x0a\xc7\x5a\x8f\x69\xb9\x2e\x0c\xbe\xf7\xbb\x39\xf3\xc9\x3e\x13\x4a\x82\xac\xda\x62\xcc\xca\x98\x97\x19\xcd\x96\x5c\x33\x31\xe4\x84\x8b\xc4\xc4\x95\x18\x43\x8e\x62\x3e\x50\x0c\x10\x60\xcb\xa2\x63\xc6\xc0\x46\x46\xc8\x33\xfc\x47\x7a\x97\xfc\xa1\xf2\xc0\x5b\xa4\xf1\x73\x2f\xd4\x9d\xb6\xa3\xc7\x53\x27\x5b\xb5\xef\x55\xb0\x71\xf5\xc5\x9b\x37\x3e\xf7\x36\x07\x53\x7b\xca\x5e\xec\x26\xa2\xc1\x85\x76\x10\xcb\x32\x8f\x1c\x8a\x07\x5c\xc2\x45\x34\x00\x61\x08\x62\x8b\x49\x68\x5e\x97\x7c\xca\xd5\x31\x88\x59\x5d\x88\x22\xc1\xce\xdc\x45\x7e\x77\xdf\x8a\x0d\x5f\xa8\x4b\x9f\x29\x7f\x6c\x6d\x9f\x8f\x3a\x7e\x5e\x53\xd8\xb5\xee\xd5\xf5\x79\x4f\x0c\x7b\x60\xf0\x96\xed\x65\xd6\x1f\x7d\x25\xc5\xd1\x2a\x42\x2c\x71\x43\x21\xa0\xe8\x88\x4a\x02\x33\xe4\xed\x40\x15\x15\x48\x71\xa2\x48\xf3\xb2\xa4\x69\x9a\xae\x5b\x7a\x20\x44\x34\x88\x5c\xac\x78\x02\xce\x78\xd2\x13\x6f\x3e\x7b\x76\x6e\xae\x7a\xb7\xef\x2f\x6d\x6f\xdb\x58\x41\x59\xdd\xfc\x28\xb7\xbf\x44\xb9\xfa\x71\x25\xa6\x70\xee\xab\xd3\xfa\x8d\x4b\x71\x8e\xeb\xbf\x78\xc2\x3a\x9d\x19\x1e\x78\xaa\x4d\xfd\x12\x25\x2a\x15\x58\xde\xbf\x5b\x5a\x35\xf7\x50\x99\x5a\x53\x96\x2e\xa9\x3f\xa2\xe8\x07\x95\x5f\x34\xcf\x6e\x7a\xf0\xc7\x8b\x29\xf6\x54\x34\x99\x04\x14\x10\x7c\x5b\x17\x04\xc6\xc0\x11\x34\x69\x89\xd7\x62\x25\x8e\x05\x11\x8a\x62\xc8\x29\x0e\x74\x65\x56\x46\x12\xc3\x84\x94\x63\x5a\x6a\xc6\x93\xbe\x5c\xec\xad\x06\xb9\x76\x94\xd8\xd7\xa9\xc0\xc5\xb4\x73\x8f\xec\xf8\xb8\xd6\x87\x47\x5b\x2c\x78\x79\xb9\xd4\x72\x45\x99\xbe\xd3\xbe\x2a\x75\x39\xb5\xfe\x26\xf4\x15\x42\x6c\x5e\xc4\x28\x11\x58\x86\xb3\x7f\xa3\x3d\x28\xc5\x62\x42\x0b\xa1\x2c\x24\x41\x20\x18\x26\x15\xfa\x32\x32\x58\xcf\x4b\x68\x3d\x02\x61\x46\x8e\xbe\xd9\xc1\x5b\xd5\xea\xe9\x3b\x83\xa6\xd7\xbd\xb0\xf5\xe9\x57\xfa\xdd\x01\x9f\xcc\xe8\xfb\xc5\xc5\x92\x2f\x6d\xa9\x27\xec\xad\x75\x68\xc3\x96\xd4\x72\xb4\x1e\x62\xa8\xd3\x9e\xac\x58\x8c\x20\x19\x0a\xf4\x41\x28\x29\x7a\xac\x20\x31\x91\x13\x82\xac\xd0\xc5\x28\x76\x05\x3b\xb4\x7d\x8f\x84\x0e\x61\x7e\x7f\x87\x26\x63\xc9\xf1\x89\xeb\xdd\x87\x56\xea\xc7\x2c\xdd\xf2\xda\x8c\x6b\xdd\x5f\xbd\xd6\x36\xef\x73\x9b\x3a\x84\x95\x3f\x7b\xeb\xbd\x25\xad\xc6\x0e\x79\xfc\x19\x21\xb5\xb0\x63\xda\x23\x32\x43\x19\xa1\x64\x46\x12\xd2\x28\xc9\xb4\x6c\xca\xd2\xec\xd8\x25\x46\xe8\x46\x8c\x85\xa5\xd0\x94\x78\xac\x50\xb6\xad\x08\x2c\xe3\xff\xfe\x3a\x54\x46\xd8\xb8\x75\x95\x11\x5b\x0e\x7f\xa3\xce\x7d\xb1\xa9\xbb\x71\xf2\xc2\x2d\xb5\xa7\xb7\x9f\xfd\x7d\xb6\x1f\x1b\x2c\xed\xfc\x50\xa7\xa8\xf7\xfa\x41\x29\x5e\xf2\x44\x73\x90\x57\x68\x07\x52\x32\xa3\x68\x3a\x21\x2a\xe2\x24\x1d\x21\xc9\xe3\x00\x94\x4c\x86\xe7\x79\x01\x22\x06\x44\x9c\xa7\x26\x71\x1c\x0a\xa2\x99\xb9\x29\xb6\xbe\x30\xec\xe9\xd3\x8f\xf7\xf9\xf5\x81\x59\xe8\xc9\x99\x2d\xa8\x2d\xe5\xc2\x01\xd2\x80\xb1\x85\x1f\x00\x5d\xbf\x6e\x5e\x8f\x7a\x67\x63\x6a\x5d\x26\x43\x85\x7c\x8c\x05\xce\xa4\x7d\x11\x32\xba\x69\x20\x0e\x68\xc8\x05\x86\xc7\xe8\x89\x10\xb0\x8e\xca\x72\x48\x32\x18\x5a\xc2\xb4\x8f\x38\x8f\x35\x99\x8c\xd1\xea\x1c\xe9\x12\xb7\xe2\xdd\x0b\xd1\xb6\x1a\x77\xc8\xda\x46\x2f\x3e\x37\xaa\xf0\xd4\xd2\xb3\xcf\x6e\xad\x59\x25\x67\xcf\xbe\xfb\xf6\x3c\x37\x3c\xb5\x0a\xc2\x33\xbc\xe1\xd9\x61\x12\x41\x36\x01\x98\x37\x58\xd3\x57\x15\x22\xa9\xe8\x5f\x8b\xf5\x79\xc5\xc0\x96\x9a\xc4\x9c\xa5\xc5\x84\xc2\x94\xa2\x40\x89\xce\x08\x79\x6b\xb7\x77\x2f\x4c\x2f\xf7\xe8\xb7\xaf\x94\x67\xe1\xfa\x4a\x55\xf2\x2f\x01\xfa\x08\xb0\xe1\xd5\xf9\x56\x2e\x90\x8b\x79\xeb\x40\x8a\x93\x46\xff\xcd\x1b\xdb\xab\x72\xff\xb3\xb2\x6e\xda\xd3\x6c\xf6\x21\xe9\x0c\xe0\xda\x86\xe6\x35\x5f\x16\x17\x0f\xdb\x33\x02\x57\x1a\x57\x72\xb2\x5b\xfc\x42\xa5\xab\x42\xf1\xec\xa3\x37\x7f\xf8\xd3\xeb\x3b\x8b\x3f\xf2\x71\x6a\x0d\x00\x33\x3c\xc1\x1c\x1b\xa9\x02\x66\x40\x62\x40\xc9\x61\x1d\x91\x56\x59\x1d\xf1\x44\xb3\x90\x1f\xe9\x31\x63\x30\x90\xb7\x24\x83\xd7\x75\x01\xff\xe9\x2e\xfa\x0f\xec\x7a\x0b\x48\x07\xd8\x09\x54\x9e\x56\xed\xdb\xc5\x07\x46\x4c\xe5\x2b\x74\x7e\xe7\x83\x67\x5a\xde\x3e\xd1\x61\xb2\x1a\x92\xeb\x5f\x91\x14\xc3\xfe\x2f\x5e\xa6\x4a\x07\xbb\xdd\xe6\x7d\xa5\xba\xfd\x52\x68\xfd\xc4\x29\x70\x67\xb1\x4d\xa5\x96\xdc\xbe\xb9\xb5\x6d\xf9\x0e\x9e\xf1\x75\xc5\xef\xee\xef\x94\xef\x4c\x9e\x14\xaf\x59\x40\x80\xe5\x70\xe2\xdb\x00\xc0\x48\x65\x1d\xce\x0b\xe9\x90\x0b\xad\x04\x72\x2a\xf1\x04\x26\x31\x24\x4f\x09\x39\x5b\x34\xfe\xf5\xe2\x86\x10\x06\x7c\xe6\xb0\x49\x8d\xab\x3f\xd4\xed\xde\xe9\xb1\xf5\xf7\xcf\x2f\x23\x6e\xac\xee\xcd\x93\x3e\x58\x50\xa3\xcf\x1b\xdd\x7e\x86\xf3\x3b\x7c\xba\xea\xf4\xc0\x14\xd7\x78\x91\xe1\x33\x04\xc4\x49\x1c\xeb\x9a\xce\xe1\x18\x71\xae\xea\x62\x15\xf1\xa2\x97\x50\x9a\x1e\xe8\xb4\xe7\x11\x4f\x8e\x64\x91\xe3\x20\xe3\x5b\x3e\x9d\x39\xec\xfe\x3f\xc0\x82\x9f\x3c\xb1\xa6\x7c\x59\x6a\xeb\xaf\x37\xf9\x9b\x55\x3f\x79\xe3\xb5\xae\x83\xea\xad\xf8\x2e\x30\x6d\x54\x6a\xb0\x73\x3c\xb5\x2c\x49\x05\x86\xe4\xc4\x91\xee\x29\x26\x84\x4e\xa0\x84\x9a\x0f\x29\x36\x82\x8a\xe3\x5b\x16\x9f\xc4\xaa\x85\x38\x99\xf0\x86\x23\xd0\x96\xc3\xb3\xa1\xf8\x7b\xb9\xe8\x5f\x94\x33\xf8\xfe\x7f\x56\x2a\x4d\x6b\x3a\x20\x5b\xcb\x41\xe9\x7e\xe4\x9e\xb9\xe7\x2e\x37\x2a\x38\xfc\xab\x98\xaf\x7f\xbc\xc6\xa6\x76\x5b\xf9\xd1\xe3\x37\xad\x5c\x96\xb7\xed\x83\x15\x7b\xf4\x5b\xb3\xfb\xd4\x8c\x14\x07\xfc\x1e\xa6\x71\xcc\xda\x5a\xc4\xa8\x9a\xca\x24\x38\x96\x59\x4a\xb5\x25\x4d\x52\x10\x8a\xfc\x84\xb0\x8e\xa8\xd8\xae\x9a\x88\x91\x44\x63\x62\xc8\x04\x65\xfe\x6d\x8a\xec\x48\x1a\x3c\xbe\x71\x4b\xbd\x63\xe2\xed\x9d\xef\x1d\x9c\xc7\xbd\xfc\xdc\xad\xab\xfb\x96\x5c\xac\x31\xff\xea\x4c\xd8\xcd\xd7\xb9\xd4\x7a\x66\x3c\x13\x27\x88\xc3\x31\x71\x4c\x5a\x97\x35\xc6\x64\x89\x24\xa8\x26\x9b\x68\x6c\xa4\x43\xd9\x67\x75\x46\x09\x5c\x51\xc0\x9e\x28\xc7\x80\x62\x5d\xcb\xcc\xbc\xf4\x91\xfb\xc2\xdb\x6b\x1b\x36\x7d\xf8\xd6\xb4\xc7\x86\xe3\x5c\x15\x07\x2c\x6b\xb2\xff\xf8\x94\x67\x2b\x6d\xee\xbb\xa1\xda\x80\x8e\x46\xfe\x8f\x3f\x4f\x6d\xd0\x6f\x50\x2a\x25\x43\xc9\x14\x3c\x06\x26\x10\x46\xae\xe9\x47\xa2\x4f\x38\x1c\x29\x30\xc6\x38\x70\x79\x0f\x46\x2c\x2d\x99\x1c\xef\x39\xa6\x6a\x1b\x66\x9c\xd1\xa1\x7c\x6f\xf2\x17\xc7\x3f\xf9\xb1\xda\xd1\x1e\x47\xeb\x35\x50\xb7\xac\x1b\xf1\xfe\xcd\x49\x73\x5a\xf3\x57\xb6\xe7\xdd\x09\xdf\xbf\xba\xec\x44\x89\xff\x9d\x51\xeb\x15\xb9\xff\x59\xb6\x35\xad\x59\x91\xc6\xd9\x1a\x0f\x4e\xf7\x61\xca\x4d\xce\x5e\xee\x9b\xa2\xd3\x9e\x1f\xf8\xca\xd9\x29\x07\xf6\x7e\xff\xfc\xb0\x56\x75\x67\x0e\x3a\xfb\x4d\xb9\x87\x5e\x5f\x73\xac\xdd\x8c\xbe\x2d\x53\xfb\x61\x78\x36\xb4\x38\xd6\x8a\x71\xa0\xa9\x58\xd0\xb0\x28\xfd\xe6\xae\xf9\xbe\x60\x86\x2c\x4d\xd9\xa2\xc5\xd9\x3a\xd6\x80\xa7\x26\x0a\xe7\x05\x82\x23\xd1\x99\x78\xfa\x4d\xed\x6f\x1e\x24\x5f\x7f\xf4\xcb\x23\xa7\x5b\xb4\x18\xfa\xd5\x57\xdf\xaf\x69\xb8\xe4\xa7\x81\xed\x36\xfe\x3a\xb8\x53\xf5\x39\xad\x9e\xca\xf7\x6d\x6a\x21\x43\x12\xb8\x16\x21\x38\xd1\x00\xe4\x64\x4d\x16\x75\x93\x61\x04\xdb\x76\x18\xa8\x44\x11\x0c\x74\xdb\x92\x0d\x55\xb3\x7c\x44\xcb\x02\x51\x4d\x8b\x68\x77\x9b\xc0\x7f\x2c\xd7\x3c\xd3\xfd\xc0\x91\x25\xf3\xdb\x8d\xb8\x60\x8d\x3c\x51\xbd\xf2\xf7\xab\xf6\xbe\x75\x26\xaf\xd0\xa8\xc6\xf2\x6a\x15\xfa\x2c\x1a\xca\xdd\xfb\x88\x54\xa6\x96\x9b\x68\xa1\x44\x90\xa2\x01\x5b\x61\x59\x07\xf9\x11\x0d\x78\xac\xf0\x8e\xeb\xc8\x44\x37\x59\x86\x37\x22\x8f\xa2\x11\x15\xa8\x11\xc3\x45\x81\x45\x04\x33\x73\xd8\xcb\x3f\x74\x0e\xcc\x7d\xff\x9b\x11\x7d\x72\xdc\x69\x3c\xa0\xd6\xe3\x2e\xdf\x68\x8a\x57\x73\xd5\xfb\x5f\xd4\xac\x37\xa7\x5c\x91\xfc\x4b\x8e\xa4\x16\x36\x1b\x3b\x89\x4f\x11\xc9\x54\x54\xe4\xbb\x66\x10\x50\x02\x70\x02\x39\xe2\x29\x8d\x05\xc4\x74\x25\x2a\x30\x4d\x1a\x51\x90\x45\x81\xc6\xd0\x4e\xf8\x7b\x5d\x2a\x23\xec\x8b\x95\x6a\x5e\xdf\x38\xdf\x2b\x5d\x33\x67\x5e\xf5\x97\x75\x5f\x7d\xfe\x9a\xdd\xee\x99\x36\xa3\x5a\x66\xbf\x6f\xc5\x89\xe3\xb3\x5e\xfc\x7e\x41\x8a\x07\x17\x05\x29\x76\x64\x4b\x57\xd9\xd8\x52\x88\x4c\x8b\x09\x60\xc3\x44\x0d\xc3\x00\x52\x36\x11\x21\x43\x49\x3c\x84\x0a\x91\x24\x2c\xc4\xb4\x23\x03\xf3\x3f\xd6\xfb\xeb\x03\xff\xac\xfa\x91\xd6\xec\xd1\xc1\x85\x1e\x78\x25\x7d\x87\xe1\xbc\x73\x6b\xe9\x93\x9d\x27\x1d\x8e\xf6\xbd\xd1\x71\xae\xf4\xd4\xd4\x6a\xc5\x9f\xd9\x99\xad\x74\x8b\x81\x27\x76\x7c\x59\xef\xd1\xb3\x07\x53\xfb\x2b\x45\x8d\x33\x3d\x62\x2a\x8c\x16\xc8\x3a\x34\x5d\x80\x59\xd3\x90\x51\xac\x69\x41\xcc\x88\xc4\x52\x6c\x41\x60\x29\x06\x26\x94\x6b\x25\xb6\x17\xb3\xa1\x9c\xf9\x25\xd6\x79\x14\xb7\xaf\x64\xe7\xa7\x4a\xc1\x67\x4f\x97\x29\xf4\x64\x93\x3c\xe5\x3f\xbd\xda\x78\xd5\xa1\x85\xc7\xea\xb7\x2b\xd9\x46\xea\x32\x29\xc5\x9d\x12\x86\xa9\x87\x86\xaa\xab\xb1\x03\x21\xe6\x15\x5d\xe1\x24\x28\xc6\x58\x11\x23\xda\x52\x45\x8e\xb1\x2d\x2f\x14\xa0\x86\x90\xec\xa8\x40\x71\x68\x0d\xfc\x85\x3b\x77\xa7\x54\xe5\x8f\xe4\xe2\x2d\x6e\x36\xfd\xf8\xe9\x0f\xbd\xcd\xe3\x8a\xcf\x7f\x9e\xef\x7f\xaa\xc9\xf4\xdb\xa5\xbe\xfa\x69\xc0\x98\x72\x3b\x3e\x4d\xb5\x05\x33\xb2\x23\x0a\xaa\x1d\x98\x36\x2d\xcb\x48\x52\x11\xeb\x7a\x92\x60\xf0\xa2\x67\x05\x3c\x8a\x62\x25\x4e\x84\x10\x4a\x94\x05\x42\x4c\xab\x46\x00\x33\x37\x85\x5b\x47\x0b\x0f\x7b\x00\x96\x5c\x32\xbf\xce\x8a\x1d\x03\x5e\x7b\x60\x61\x27\xfb\xe6\xe8\x39\x9f\x4c\xf9\x61\x7c\xce\x92\x2d\xdb\xee\x59\x7d\xef\xad\x61\x99\xc2\xd6\x81\x6e\x19\x18\x23\x57\x80\x09\xe6\x38\x0b\xc7\x90\x91\x30\xd1\x43\x86\xa5\x0d\xdf\x30\x55\xc3\xc4\xb1\xc0\x31\x1c\xf0\x62\x0e\x46\xba\xfb\xfb\x3a\xa9\x8c\xb0\x9f\x4f\x96\x56\xae\xd7\x64\xd6\xc7\xdb\x5f\x3b\xd9\x75\x5b\xa7\xf9\xe1\xb0\x41\x8d\x76\xcc\x73\x92\x71\x9f\xee\x98\x94\xbb\xd6\xb4\x3a\x41\x8a\x17\xdf\x31\x08\x87\x36\x80\x81\xcd\x7b\x8a\x43\x05\xa2\xaa\x46\x41\xa2\x5b\x1a\xc7\xd2\xb6\x8e\x22\xa0\x13\x85\x71\x94\x88\xd1\x25\x46\x61\x2c\x5e\x90\xfe\xc2\x41\xbb\xf0\xd3\x8c\x15\x65\xbe\xa9\xd4\xe7\xeb\x9d\xc5\xb3\x5f\xbd\x75\xf9\x70\xdd\x97\xde\x32\x2b\x16\xce\x71\x95\xa0\x8f\x2a\x4c\x7e\x60\xd6\x4b\xa9\x8d\xd7\x25\xc3\x0d\x91\x8b\x38\x49\x0c\x42\x4c\x33\x26\x1f\x29\xbe\xc4\xb9\xac\xa9\xd9\x96\xaa\x73\xa1\x2d\x28\x18\x61\xdb\x32\x90\x1b\x29\xbc\xe0\x10\x92\xfc\xe1\x3c\x0f\xbf\xff\x9f\x55\x24\xd3\x9a\xe5\x1c\x98\xed\xd1\xc1\xe9\xd3\x56\xfa\x0b\x25\x26\x24\xab\xca\xb6\x7f\x63\x4d\x93\xd6\xaf\x37\x6b\xf1\xf3\x92\xcb\x23\xe7\x0d\xce\x96\xbf\xeb\xf8\x3c\xad\xbe\xfd\x76\x5b\xf3\xd4\xfe\xca\x84\x18\xa1\xc4\xd8\xbc\x6f\x48\x6e\x62\x40\x2e\xc0\x4c\x1c\x99\x18\x63\xc8\x19\xbe\x85\x62\x03\xaa\xb6\xcc\x1b\x89\xc3\xc2\xc0\x60\x38\x3d\xa0\xfd\xcc\xd3\x56\x9f\xec\x98\xd2\x75\x44\xf6\x4d\x6c\xbd\x2d\x53\x5b\xaf\xd9\x50\x36\xdf\xbc\x1f\xa9\x57\xbf\x93\xd2\x1a\x04\x4b\xed\xab\x6e\xb3\xf9\xf7\xde\x38\x94\x29\x6c\x91\x13\x3c\x33\xb6\x31\xd1\xa3\x40\x57\x75\x45\x13\x42\x9f\xf3\x69\x0a\x21\x8e\xa1\xa4\x88\xd8\x10\x11\xc6\x90\x69\xce\x32\x22\x1e\xd2\xac\x28\x2b\x99\xc3\x1e\xca\x6e\xeb\xdf\x60\x7f\xd3\x53\x53\x9e\xd6\x9a\x34\x18\xb4\x79\x3c\x68\xb6\x7c\xce\x99\xfb\x0e\x77\x18\xd5\x3a\xd7\x92\x02\xb3\xca\xde\x7b\x3a\x36\xf3\xfd\x43\x9e\x99\x60\xd9\x11\x12\x42\xdb\x96\xee\xeb\x80\x52\x1c\x45\x35\x1d\x5e\x32\xb0\xe1\x86\x22\xe3\xd2\x71\x84\x0d\xca\xf6\x78\x95\x18\x3c\x63\x1b\x66\xe6\xa6\xb0\x15\xf5\xcf\x31\xe3\xda\x16\xb5\xc0\x63\x17\x77\xce\x5d\xfc\x76\x93\x41\x1f\xe5\x3d\xd6\xb0\x6a\x8f\x0a\xe5\x9e\xeb\x34\xf1\xc9\x72\xe7\xda\xa7\xd6\x82\x89\xc8\xe9\x82\x07\x7c\x01\xbb\x01\xe7\xf3\x81\xcb\x58\x7a\x02\x58\xa4\x7b\x00\x70\x3e\x25\x03\x24\x49\x94\x01\x74\xc6\x32\x5d\x99\x03\x89\x82\xff\x93\x07\x7a\x95\xfe\x67\x83\x87\x69\xcd\x6e\xf5\xbb\xf3\xd3\xbb\x65\xd2\xfd\x4c\xe7\xad\xc5\xfa\xb8\xeb\xd1\xcc\xf1\x9e\xbf\x70\x6f\xb2\xfe\xf1\xc2\xdf\xfc\xd8\xee\xe0\xcb\xe3\x16\xd4\xfa\xa0\xfa\xe4\xaf\x2f\x4a\x52\x6a\x95\xca\xf6\x12\x9a\xb1\x75\x5d\xf3\x6d\x8d\x4b\xb4\x50\xb6\x2d\x09\x02\x8f\xf2\x15\x46\xa3\x9c\xc8\x14\x18\x0d\xbb\x4a\x02\x54\x08\x38\x44\x85\xc0\x92\xec\xcc\xeb\xb0\x15\x9f\xde\xb9\xfc\x67\xbf\x61\xeb\x72\x93\xb4\xc5\xdf\xe6\x58\x5a\xae\xd1\x57\xb3\x77\x8d\x58\x5c\xee\xf0\xc7\x23\xea\xa7\xe5\x6e\x1f\xd8\x29\xae\xa6\xfc\x17\xaf\x2a\xfe\x01\x59\xad\x71\xac\x78\xc3\x97\xde\x60\x96\xf6\xb5\xcb\x4d\x8f\xab\xb6\xe9\x59\x61\xb5\x74\xfb\xc6\xd4\xfd\xb7\x3a\xf4\xad\x5f\x35\xed\xe1\x14\x4f\x8d\x38\xaa\xc2\x40\x48\x78\x18\x51\xbc\xee\xbb\x48\xb0\xb1\x06\xa1\x1b\xfa\x92\x1b\xfb\xc8\x92\x29\xc9\x37\x14\x9f\x02\x0c\xc0\x11\x72\x24\xca\x06\xd6\x5f\x4c\x8d\xac\xae\xbd\x7e\x62\xc9\x85\x70\xf0\xde\xb4\x1b\x26\xb7\x30\xe9\x89\x96\x5c\x7f\x8d\xa7\xb3\x17\xac\xde\x54\x1c\xf6\x4b\xd1\xe9\x7f\x9a\x3c\xdc\xb8\xbf\x60\x9e\x8f\x3b\x4f\xef\x5b\xfe\xa7\x6c\xa7\x77\x3e\xc1\xed\xbf\xce\x2d\xa8\xb1\x89\x45\x95\x73\xe3\xa2\x33\xfb\x4d\xfd\xae\x4e\xba\xaf\x68\xd7\xfc\xb1\xd1\xa7\x8d\xb2\xd7\x7d\xa8\x45\xbd\x07\xbe\xa9\x98\xf3\xd7\x1c\x97\x76\x4c\xbe\xd8\xae\x92\x70\xa5\x50\xaf\xae\x6d\x8e\x8f\xaf\x92\xda\xcb\x3d\xa4\x42\x88\x42\xd7\x8b\x80\x19\x18\xd0\x04\xc4\x03\x21\xb2\x03\xc5\xc5\x66\xe8\xdb\x02\x56\x22\x3a\xb0\x38\xde\xf0\x68\x41\x70\x5d\xde\x55\x7f\x1f\xa4\x49\x1f\xbf\x6d\xda\x55\x62\x47\x4b\x21\x67\x0e\x98\xb6\xa5\xd0\xeb\x55\xdf\x7d\xdf\x38\x34\xaa\x4c\x85\x17\x57\x76\x99\x3a\x2e\xcf\xca\x1c\xd1\x90\x7b\x8f\xdf\x32\xfd\x8a\x02\xcd\x7b\x2c\x8e\x3d\x4d\x4b\x30\x8b\x54\x5b\x97\x79\x45\x87\xb2\x2d\x30\xd0\xe6\x3c\x37\x51\x09\xe1\x68\x37\xe6\xb4\x48\x22\x8c\x63\x43\x3e\x84\x7f\xf1\x15\x67\x67\xfb\xa1\xd6\x33\x95\xea\xdc\x57\xbc\x57\xc3\xce\x4f\xc9\xaf\x6c\x6f\xdf\xeb\x64\xce\xb5\x05\x47\x1d\x5a\xd1\xee\x33\xb8\x64\x50\xd3\x97\xd3\x7d\x97\xd9\xa7\xba\xef\x7c\xbb\xdd\xf5\xeb\xbb\x3e\x9c\x90\xbd\x52\x03\x87\xdd\xf2\xe0\xc7\xef\xd4\xfe\x40\x59\x95\x7f\x58\xf6\xed\x53\x0b\x75\x56\x53\xfb\x5d\x5c\xe8\xb3\xc8\x4a\x08\x54\x74\x2a\x09\x65\x36\xd6\x55\x47\x66\x60\x22\x78\x90\x88\x2e\xe7\xaa\xd8\x90\x39\x4d\xd4\x4d\x4f\x96\x58\xac\x13\x22\x65\x92\xf0\x38\xbb\xa5\xe1\x73\xdb\x4b\xf6\x7b\xa9\x73\x9b\x72\xfd\xc4\x16\xed\x4f\x8f\xbe\xd0\xaf\x48\xde\x87\xda\xd7\xb9\x39\xe4\xb1\x75\xb3\x57\xc6\xf7\x9e\x64\xcd\xfc\xbb\x08\x1c\xcd\x7b\x62\x48\x39\x26\x82\x8e\x2e\x70\x7c\xc2\x41\x89\xa3\x39\x57\x96\xc4\xc0\x94\x03\x12\x59\x72\xa8\x85\x8e\x62\xc5\x91\x85\x82\x20\x94\xff\xe2\xbb\xbc\xb9\xf3\xd1\xbc\x0f\xda\x74\xa9\x63\x87\xcb\xe5\x7d\xe9\x78\x58\xaf\x46\xbe\xf5\xa4\xf0\x9e\xcd\x63\x6a\xad\xff\x44\x59\x2c\x27\x39\xd2\x55\x80\x0a\x5d\xcc\x33\x62\xc3\x96\x02\x65\x37\x8c\xb8\xfc\xdd\x0c\x4a\x39\xcf\x6d\xae\x39\x02\x5e\xea\xff\xd0\xf4\xba\x93\xf7\x35\xdd\x5a\x37\x7f\x8a\x53\xb2\x1a\x66\x08\xc4\x28\x50\xe4\x00\x4b\x1e\xa1\x68\xcd\x62\x3d\x1d\x08\x10\x49\x7e\xe4\x04\x96\x40\xf1\x52\xa0\x42\x59\x41\x09\xed\xc2\x48\x13\xa4\x8c\xac\x57\xac\x58\xd9\xab\xbb\x0b\x92\x9c\x67\xab\xf7\xcb\x37\xa1\x6c\xee\xb2\xf2\x3a\x27\xef\xfd\x1f\x4c\x2a\xf0\x49\x83\x17\x7b\x36\xcb\x76\xa2\x50\x8a\x97\x6b\x0a\x6e\x42\x98\xd8\x15\x01\x43\x29\x9e\x1a\xc8\x8e\x6b\x2a\xc4\x74\x69\x21\x16\x23\x45\x61\x00\x25\x6a\x0a\xf2\x5d\x4b\x63\x0d\x03\x6a\x2e\x91\xa8\x8c\x90\x1f\x19\xfc\xe4\x85\x3d\xdb\x7e\xf9\xe2\xd8\xde\x26\x33\x72\x0d\x3f\xf3\x4d\x85\xdb\x79\xd6\xaf\xbe\xb9\x61\xc5\xf5\xef\x26\xbd\xb9\xea\xf2\xd1\xd4\xb2\x92\x20\x68\x18\x98\xa6\xe1\x85\x54\xa0\xeb\xbe\x21\x7a\x1a\xe7\x88\x8c\xe1\x06\xb2\xa7\x4a\xb4\x9a\xb0\xa6\x13\x10\xdb\x55\xf4\x50\x53\x5c\x3e\x54\xa2\xdf\xdf\x0e\xce\x18\x72\x8c\x7a\x3a\x7f\x30\xf7\x5a\xd3\xae\x5d\x2f\xee\xc8\xf9\x6e\xab\x1a\xe5\x86\xe4\x3d\x57\xe5\xfc\x8f\xeb\x26\x94\xb8\x1a\x5f\xbe\x32\x22\x6d\x5e\x8a\x37\x5c\x43\x57\x44\x22\xd2\xb1\xa7\x12\xc5\x15\xf4\xdf\x80\x22\x4c\x01\xda\xe6\x34\x0a\x07\x9c\xa5\xc9\x2c\x91\xa0\x62\x32\x7a\x04\x6c\xd7\x70\xcd\xbf\xc8\xd7\x3f\x36\x6e\x7e\xcb\x19\x7a\x19\xe3\xd8\xb5\xe1\xab\x36\x35\x6f\xf4\x7d\xfe\x19\x0f\xaf\x3d\xd9\xec\x11\xaf\xcd\xf5\x99\xcb\x17\xce\x22\x45\x52\xcb\x35\x32\x0e\x9c\x88\x8a\x60\x24\xcb\x66\x12\x50\xc4\x75\x31\x97\xb8\x8e\x6f\xd0\x1e\x51\x2c\x9b\x65\x04\xc5\x35\x11\xcd\x40\x2e\x0e\xed\xc8\x63\x34\xfa\x2f\x02\xbc\x0d\x53\x8a\x1f\xae\x73\x72\x40\xbb\x6f\xfc\xca\x73\x7f\x3d\xf5\xa0\xb1\x38\x77\xc1\x1a\x2f\x8d\x59\x37\xa9\x79\xe9\xf7\xa9\xba\xdd\xae\x5e\x4a\xad\x92\x50\x8e\xa0\xab\xc4\x16\x43\x5f\xe6\x59\xd6\x51\x45\x5e\x87\x32\x23\x10\x0f\x99\x82\x83\x39\x4c\xc5\x30\xe6\x35\x24\x31\x9c\xa3\xd1\x08\xb2\xbc\xe1\x66\x9e\xca\xce\xff\x1a\x7b\x6e\x42\xcb\x47\xfb\x9b\xc9\xe1\x62\x7d\x6f\xd6\x98\xf9\x56\xb5\x49\x8e\x36\xbf\xec\x7b\x25\xde\x2a\x59\x31\x16\xec\xbc\x29\xf6\x6a\x23\x12\xfa\x31\xa3\x60\x96\x85\x22\x20\x84\xe8\xb4\xc2\x51\x6a\xe2\x38\x8a\xab\xab\x5e\xa4\x5b\xec\x6f\xf6\x18\xc4\x82\xae\xba\x4e\xe8\x5a\x5e\x26\x8d\x33\xa7\xb2\xd5\x2c\x1a\xbe\xf8\xae\xd9\xb9\xef\xf3\x2b\x0a\x1e\x3f\x91\xff\xdb\x3a\x4b\xcb\xcf\xee\xb6\xbc\xee\xb0\xbd\x2d\xbf\x79\xe1\xe9\x8d\xbb\x52\xbc\x97\xd2\x93\xa0\x65\xf3\x2c\x15\xf0\x26\x8f\x23\xcd\xf6\x03\x57\xb1\x1d\x55\xb7\xa1\x1e\x68\x3c\xa0\x38\x60\x06\x3e\xc2\x34\x2b\xf8\x94\x4c\x9c\xc4\xf7\xfe\xa2\x57\xf6\xc3\x6d\x9f\x3f\x56\xf3\x60\x87\x65\x13\x9b\x57\xb8\xf6\xdd\xa6\x8d\x8d\xdf\x6e\x52\x71\x75\xe5\x49\x53\x87\x8e\xde\x5d\x75\xd8\xeb\xd3\xeb\x5c\x4d\xa7\x4e\xbd\xc5\x3d\x07\xfb\xfe\x54\x9c\xe9\x30\xbc\xf3\xcb\x3f\xd5\xbd\x9a\xdb\x9d\x33\xe1\xd7\x3a\x3f\x95\x5f\xfb\xca\xe8\x9f\xbe\xaf\x75\xbe\xea\xbd\x97\x18\x52\xbe\x96\x2b\x1d\xec\x2e\x71\xa7\xed\x97\x0f\xdc\xdf\xf8\xab\xd6\x97\x0e\xf6\xae\x77\x63\x46\xd9\x53\x23\x17\xac\xec\x28\xdd\xec\xd2\x7e\xd3\x86\xba\xce\xa6\x1c\xa9\x2d\xb6\xe9\xaa\x22\x69\x92\x60\x08\xaa\x1a\xca\xa6\xe1\xdb\xbc\x47\x19\xae\xeb\x22\xcb\x51\x3c\x9d\x8e\x0d\x1b\x99\x91\x14\x49\xbe\xe6\x28\x18\x44\x12\x25\xfc\x45\xf4\xd0\x75\x74\xcf\x6e\xdf\x3c\xbc\xba\x67\xfd\xcd\x65\xa7\x15\x18\x7d\x62\x72\xed\xe6\x8b\xec\x51\xe7\xbb\xed\x10\x9e\x7b\x71\xf7\xc7\x1f\xec\xdb\x91\x5a\xe3\x8d\x35\xcf\x0e\x23\xda\xe1\xa0\x19\x1a\x32\x54\x11\xcb\x31\xb1\xcc\x24\x01\x36\x7d\x01\x30\x2e\x91\x7c\x87\x0e\x28\x8a\x53\x03\xc1\x4a\x28\xcb\x0d\x32\xf1\x6f\x7a\xee\xde\x7f\xae\xfd\xc1\xb2\xeb\x51\xc7\x4a\x51\xc9\x6b\xeb\x43\x50\x6b\x50\xcf\xd3\x1f\xdf\x57\xf3\xe1\xb1\xb3\x5b\x76\x3a\xde\xfa\x56\x6a\x21\x07\x06\xb2\x12\xca\xe5\x58\x20\xe8\x7a\x14\x53\x31\x51\x69\x2d\x70\x43\x5d\xf4\x39\xec\x07\x91\xa7\x0b\x14\xe1\xdd\x04\x69\x9c\x00\x4d\x49\x85\xa1\x9a\x39\xdf\x0c\xc3\x25\x7a\x93\x45\xc3\xe1\xdc\x17\x5b\xef\x11\xc6\x16\x6d\xb0\x4e\xcf\x3b\x7d\x90\x58\x79\xf2\x60\xff\xf4\x84\x5d\x68\x7d\xf6\xd4\xf2\x8d\xe4\x30\x21\x12\x38\xe4\x70\xba\xae\x86\x3e\xf6\x6c\x4c\x74\x2d\x01\x80\x51\x43\x5d\xf0\x14\xcf\x57\x24\x87\x12\x04\x89\xb1\x63\x9d\xb3\xcd\xd8\x40\x19\xf9\xe6\x5c\x81\x7a\xeb\x37\x3d\x32\xdd\xb1\x5e\x5c\x78\xe6\xcc\xd3\x0f\x2e\xa9\x7e\xbc\xdc\x82\x51\x27\xc6\x7d\x9c\x67\xcd\xf8\xc3\xc5\xc6\x89\xa9\x75\x7e\x85\xc0\x55\x5d\x9a\xb0\x42\x64\x50\x4c\x4c\x71\xb4\xec\xba\x09\xf6\x4d\x2d\x90\xa9\xd0\x94\x15\xde\x08\x65\xa4\x52\x48\x94\x58\x10\x3b\x88\x8a\x40\xfa\x93\xfe\x8f\x29\x96\xad\xb1\xa0\xc6\xb3\xb3\xcf\xcf\x9f\x82\x72\xad\xe6\x37\x6c\x7b\xb6\x62\xfd\x59\xda\xcb\xfd\xdb\x09\xc7\xe4\xcf\xf9\x77\xea\xbd\x53\x30\xb5\x0e\x30\x65\x72\xb1\xe2\xba\xac\x0e\x78\xd5\xc0\x12\x47\x24\x08\x23\x48\xcb\xc0\xc4\x34\xc3\xa0\xd8\x27\x90\x93\x35\x4f\xb0\x43\x5f\x33\xec\xd8\x32\xc3\xbf\xe8\xc5\x2a\x32\xb2\xdb\x0f\x33\x66\x1f\x7c\xa1\xdd\xd4\x95\x8f\xbc\x22\x96\x58\x7e\xe8\x85\x37\x27\x8e\x04\xd2\x91\x6c\xe7\xab\x54\xd2\x97\x4e\x4f\x6d\x7e\x57\x50\x84\x44\x50\x79\x02\x4c\xce\xe2\x08\xcb\xea\x6c\x12\xb9\x02\x24\x44\x31\xa1\x1b\x05\x86\xe6\xa9\xb4\x1a\x02\x5b\x13\x03\xc7\x51\x80\x09\x21\x91\x32\xd7\xeb\xf6\xb7\xd5\xd6\xc3\x4e\xdc\x09\xea\x1f\xc1\x93\xa7\x16\x59\xdd\xa3\x45\xb2\xeb\x93\xeb\x8b\x5b\x3d\xdb\xf6\xd7\x5c\x4b\x86\xee\x99\xfc\xce\xff\xce\xf6\xfa\x3f\x20\x77\x34\xaf\x7e\x5e\xf9\xca\x87\x15\x7f\xde\xe0\xae\x7a\x89\xab\xb0\x59\x7f\xfe\xa7\xa5\xbf\x7c\x92\xe4\x5c\xb3\x72\x6b\xb1\xc2\x6a\x70\xef\xad\xbe\x99\x3a\x5a\x14\xe3\x06\x8e\x0a\xe3\xc0\x0b\x5d\xc3\xe3\x88\x1e\xd3\x84\x96\x62\x49\x02\x34\x71\x7c\x33\xf6\x12\x13\x83\x18\x29\x1c\xd2\x3d\x04\x34\xd3\xfd\xfd\x39\x84\x8c\x27\xdd\x6d\xeb\x96\xa6\x4e\xfe\x63\xf7\x4d\xbb\x7c\xaa\xf6\x77\xa3\x67\x66\x5b\x37\x77\x7a\xa7\xc5\x57\xaf\x6e\x3c\x75\xa3\x93\x30\x72\xe6\x92\x6e\x29\x9e\x1e\x92\x79\x31\xc6\x2c\xe7\x79\x92\xef\x21\xc5\xa5\x12\xd5\x50\x6c\x26\x40\xb2\xc3\xd8\x32\xe3\xea\x00\x19\x7e\x90\xf0\x48\x0e\x69\xce\xf4\x2d\xc9\x60\x32\x72\xb5\xdb\xaf\x74\x9e\x67\x0b\x25\x6f\x0e\x18\x92\xf7\xa1\xd7\xc6\x7d\xfb\x30\x3f\x24\xe8\xfd\x60\xc3\xa5\x97\x0b\xc2\x31\xdb\xfb\x0f\xad\x7d\x5f\xca\x63\x51\xe2\x7b\x24\x52\x63\x40\x58\xdb\x95\xfd\x58\x04\x6e\x88\x29\x43\x8e\x11\xc7\x49\x94\xe9\x8a\x38\x66\x13\x5d\x8b\x95\xc8\xf6\xb5\x04\x99\x71\xe6\x1d\xf7\x76\xb3\xfa\x95\x6f\xd6\x1d\x1b\xd7\xcf\x5d\xac\x4d\xa3\x4f\xd4\xf0\x18\x38\x32\xbf\xc5\x8d\x78\xea\xf2\x21\x1b\xdb\x5c\xdd\xfd\x5d\x8a\xa7\x96\x29\xd1\x50\xe5\xc0\xa5\x91\xa2\x88\xbc\x89\x5d\x4e\x87\xd8\x16\x38\x99\xe3\x28\x99\x35\xa0\x9b\x04\x8c\xe5\xc6\x24\x00\xac\xac\x72\xbc\xa3\xd1\x94\x97\xf1\xa4\xc7\x29\xcf\x2f\xfd\x0c\x4e\x7c\xea\xb5\x75\x3b\xba\xaf\x9d\xf6\x4d\xad\x2f\x9f\xe9\x70\xbd\x47\xb7\xd2\x45\xaf\x5d\xae\xfb\x4e\xe3\xab\xc5\xdf\x4a\xf1\x2c\xad\xca\x58\x9a\xac\x46\x06\xe6\x02\x4f\xb2\x29\x29\x70\x78\x57\xf5\x03\x1e\x58\x5a\xa8\x58\x94\xa0\x4a\x08\xb3\x92\xee\x51\x22\xa0\xf5\x28\x42\x20\x13\xc8\x93\x0f\x2c\xaa\xfa\xd1\x9b\x2f\xe7\x6a\x73\x6e\x60\x8f\x55\x17\xab\x7e\x7f\xf0\xfa\x5b\x7b\x5e\x7a\x9e\x5c\xfb\xae\x5a\xbb\x4f\xec\xeb\xa5\x3e\xfb\xdf\xd9\xb9\x9c\x8e\xa7\x4b\xe6\x68\xb5\xf5\x74\xae\x38\xfb\xc8\x8e\xde\x93\x1f\x3c\xf4\x7a\x8f\x45\xb9\x7b\x74\x9c\xd6\x64\x72\x0e\xe3\xc1\x1e\x85\x9f\x69\x0b\x2a\xa6\xb8\x93\x13\x59\x86\xc2\x9b\x8c\x67\x02\xda\xe0\x81\xea\xf8\xac\x9c\xd8\x3e\x9f\x00\xe9\xb7\xe0\x3d\xc1\x82\x02\x0c\x23\x89\x63\x25\x62\x09\xc1\x01\x05\xc4\xcc\xaf\x97\x9f\x3b\x8e\xc8\xb1\xf5\x5c\xcf\x25\x8d\xf5\x0a\xaf\x6e\x5b\xec\xb5\x7a\x78\x1e\x9e\x89\x8a\xee\x59\xb5\x69\xc0\xd3\x53\xd6\x34\xb4\xe7\xa7\xb8\x01\x40\xe3\x5d\x41\x91\xa5\x88\x77\x09\x13\xd9\x14\x43\x05\x96\xa4\xf3\xae\x1f\x6b\xc8\x74\x8d\x80\x48\xa6\xef\x45\x44\xd5\x5c\x24\x98\x58\xf6\x79\x5a\xcf\x9c\xf4\x56\x74\x2b\x7a\xee\x87\x45\x8d\xb7\x37\x99\x3b\x73\x75\xed\xfe\x1d\x97\x9d\xc4\x7d\x86\xf6\xcc\x56\x7b\x4d\xcd\x6b\x4b\x76\xad\x10\x4f\x6e\x4a\x6d\x38\xc0\x58\x94\x96\x60\x88\x91\x0f\x03\xc6\x72\x38\x99\xf5\x49\xe4\xeb\x6a\x1c\x46\x0a\x72\x4c\x5e\x17\x58\x1a\xfb\xba\x89\xac\x20\x31\x54\x2e\xe0\x25\x3f\xe3\xf5\xb2\x67\xc1\xf1\xfb\xfa\x8d\x69\xaa\x3c\xfd\xd0\xd1\x8a\xe3\xf7\xb5\x7f\x16\xbc\xf8\x43\xdf\xb4\x41\xcd\xcb\x31\x75\x7f\xbc\x55\x5c\xba\x3e\x32\xb5\x0a\xa2\x30\x8a\x20\x38\x44\x93\x38\xac\x11\x2c\xc5\x89\x16\x2a\xaa\x2b\xf9\xa2\xe6\x42\xa8\xd8\xba\x2d\xa8\x71\x48\x61\x5a\xa4\x91\x4c\x91\x88\xe7\xa8\xe4\x2f\x12\x70\x63\x72\x58\x9d\x73\xd7\x98\x98\x8d\x81\x83\x36\x1d\x5b\x33\xf1\x89\xed\x79\xfd\xb1\xb7\x83\x96\xc7\x76\x9c\x7c\x6c\x45\x99\x2a\x1d\x1e\x4a\x2f\xfd\x29\xf5\x68\xd7\x91\x6b\x0b\x3d\x75\xa5\xc9\x19\x36\x6f\x8b\x45\x2d\x37\xec\x7e\xec\xbe\x2e\xbb\x7a\x1d\x0d\x37\xbd\x72\xe8\x5c\x85\xf9\x3d\xd6\xe4\xfe\x67\x49\xf3\xb4\x66\x8f\x3e\x3a\xf0\x4f\x5d\xb9\x3b\x3e\xaa\x13\x96\x6a\xf0\x62\xa9\x69\x3d\x4b\x74\x78\xa6\xf1\xed\xe2\x5f\xd5\x39\x3e\x2c\xd7\xe1\x8a\xce\xd5\x55\xaf\x34\xd0\xbb\x8c\x4b\xb1\x2b\xe4\x46\x5c\x4c\x31\x76\xcc\x10\x41\x08\x29\xcf\x06\x3a\xc5\x89\xd8\x31\x84\x38\x61\x1c\x5d\xc1\xb1\x6b\xd9\x9c\x1b\x7a\xc8\xc7\xb4\x22\x31\x5a\x14\xfe\x45\x26\xe4\x52\x9f\x95\x7b\xc6\x80\xb9\xaf\x9c\x12\x5e\xad\xd0\xbf\x16\x58\x5f\x71\x87\x88\xe2\xfa\x6f\x2a\xd3\xef\x3c\x3a\x4c\xcd\x7f\xfa\xb5\xd4\x7e\x78\xd5\xa5\x10\xf4\x14\x4b\x88\x1d\x43\x10\xb0\xcd\x9b\x81\xe9\x70\x06\x63\x62\x4b\x0d\x2d\x5e\x36\x99\x24\xd4\x7d\xc7\x77\x29\xc9\x72\x02\x5a\xa1\x44\x2e\x73\x66\x30\x46\x4b\x3d\x3a\x9e\x9b\x79\x6d\xdf\x6c\xdb\x69\xfd\xf9\xbe\x6f\xbb\x2f\x7b\x6d\x0d\x5b\x52\x2c\x35\x17\xf7\x13\x5b\xd5\x2b\x3f\x21\xc5\xeb\xd2\x38\x55\x63\x44\x98\x18\x02\x45\x73\x9c\x8e\x24\x02\x43\x36\xb0\xb9\xc0\xb1\xf9\x80\x27\x94\x6e\x22\xc2\x70\xac\x6b\x49\xb2\x20\x44\xb2\x6c\x19\x51\xe6\x3c\x3c\x6a\xc0\xeb\xf9\x66\x0d\x7b\xee\xc2\xa2\xde\x3b\x2f\xac\xcb\x93\xfb\xed\x7c\x7e\x9f\xd2\x9f\xd5\xfe\xf4\x95\xbe\x07\xf7\x1e\x69\xce\x7e\x7c\xef\x09\x9c\x4c\x95\x44\x72\x62\x93\xd5\x71\x82\x69\x42\x51\x09\x43\x29\xa6\x26\xb1\xc4\x46\xcc\x6f\x11\xa1\xcc\x28\x96\xe8\x04\x80\x57\x80\x41\x2c\x9f\x91\x5c\x9b\x13\x98\xcc\x95\xe4\xa9\x8d\x17\x8b\x4f\xbf\xff\xc6\x98\xe2\x0d\xd0\xaa\x4e\x4e\x4f\xe9\x91\x03\x05\xd2\x8a\x6e\xad\x56\xe8\xa9\x2a\x1d\x7e\x19\x93\x7d\xfc\xb5\xd4\xc2\x26\x3a\xe5\x59\x91\x6d\x24\x8e\x9c\x24\x1a\xab\x19\x92\xca\x2b\x8c\xea\x02\x68\xba\xbe\x66\xc8\x54\x14\xd1\x94\xe0\x5a\xc0\x33\x0c\x07\x00\x2b\xbc\x2b\xa7\x3a\xe4\xfe\x7f\x56\xc8\x4a\x6b\x56\x21\x7b\xb6\x6c\x83\xd2\xd1\x76\xde\x49\x39\x3a\x0e\xaa\x5e\xb6\xc8\xb2\x99\xcd\xb7\xe4\xb8\x60\x75\x7e\x08\xff\xf2\x64\xbb\xae\xfd\x3a\x0c\xe8\x61\x1d\x1a\x57\xae\xce\xbd\xcf\xe1\x66\x7a\xdb\x88\x58\x92\x25\x43\xd2\x20\x6b\x00\x60\x4a\x8a\x62\xa9\x86\x22\x10\xc1\x50\xfc\x00\x23\x81\xe7\x1c\x5a\x86\x8e\xea\xea\x56\xa2\xc9\x8c\x2f\xe1\xdf\x1f\x42\x4a\xef\x8e\x48\x57\xce\xa5\x71\xee\xed\x07\x9c\x97\xbe\xd2\x6f\xf6\x5f\xf8\x7a\xeb\x9f\xc7\xe4\xbb\x36\x6e\x76\xaf\x2f\x3b\x15\x9f\xda\x31\x79\x5a\x49\xf1\xb2\x43\x82\x0c\xd5\x8d\x03\x37\x8c\x2c\xec\xd0\xc8\x15\xb8\x44\x95\x44\x59\xf1\x29\x59\xf7\x40\xa0\x62\x8d\x0f\x24\x49\x0b\x7d\x3f\x52\x44\x2b\x08\xef\x1a\x2a\x49\xa7\x4f\xef\x6d\xda\xd2\xb4\xf3\xb2\xfd\xbb\xcf\xee\x9f\x52\xea\xe4\xc8\x9a\x8d\xea\xae\x60\x9a\xe4\x7f\x63\x45\xf6\xc5\x83\xdf\x5d\x3b\xa6\x08\xbd\x32\xb5\x27\xad\xb1\x92\x89\x14\x51\x14\x71\xc2\xf3\x91\xc2\xd0\x7c\x60\xb3\x3c\x2d\x10\xc3\x24\x34\x51\x69\x13\xd1\x34\x9b\xb0\x7a\x92\x88\x3a\x22\x9a\xc0\x19\x54\xe6\x66\x30\xed\x68\xb1\x3d\xdb\x2e\xb5\x1f\x9b\x7b\x49\x9e\x51\x3f\xce\xe7\xbf\x0b\xc7\xeb\xeb\xf6\x75\xed\xb6\xaf\xdc\xd3\xaf\x98\x95\x3b\x3f\x9d\xa4\xd8\xc5\xf6\x80\x1c\x01\xe4\xba\x86\x26\x12\x1f\x00\x8a\x67\x3d\xcb\x36\x75\x02\xb4\x80\x76\x23\x9b\x17\x55\xec\xe8\x9e\xcb\x24\xbc\x8a\x69\x06\xb2\xe2\x7f\x28\xfe\xdf\xfd\x35\x7f\x57\x37\x4c\x6b\xd6\x24\xdb\x7d\xd9\xd3\xf7\xd7\x5c\xdc\x7e\xe2\xeb\xb7\xf7\x97\xdc\xf1\xc4\xe6\xb6\xe5\xca\x1b\x63\xaf\x04\x2f\xaf\x3a\xbc\xfb\xe6\xdb\x9b\xf0\xf2\x9a\xd5\xae\x5d\x79\xf3\x89\x14\x97\xa9\x22\x12\x88\x1c\x2f\x93\x48\x56\x3c\x27\x08\xc5\x18\x92\x30\xc2\x3a\x13\x30\x02\xe7\xd0\xa6\xe0\x48\x32\x70\x55\xd5\xf2\x59\x4e\x0c\x9d\x88\xb3\xc2\xcc\xa9\x75\x8f\xfd\xe0\x8f\xed\xc3\x7c\x8f\xf5\xde\x4d\x75\x75\xcd\x05\x1f\xcf\xe3\x8a\x2e\x7f\x63\x50\xf7\xcf\x77\xb2\x97\xb3\xdf\xd7\xba\xf9\xbd\xb7\x42\x64\x5e\xf7\x61\x13\x81\x47\x32\x0e\x05\x42\x01\x4d\x0d\x21\x92\xd8\x00\x07\x5c\x62\xd3\x7c\x84\xe4\x50\x0a\x12\x4f\x8d\x59\xd9\xc2\x11\xb6\x9d\xd0\x36\x05\x37\x73\x9d\x9a\x74\xa1\xc1\xc4\x9d\xa7\x47\x6e\xaa\x54\x68\x8a\x3b\xa2\x7b\xf5\x5d\x3b\x6f\x1e\x52\xe7\x6c\x97\x26\x9a\x33\x0b\xbc\xba\xf2\x33\x3c\x31\xd5\xd4\x6a\x9a\xa1\xc9\x00\x55\x4b\x6c\xc2\x6a\xc4\xa2\xcd\x04\xd3\xb2\x4e\x03\x3a\x61\x28\xce\x54\x13\x42\x07\x2a\x0f\xa0\x8e\x22\x46\x16\x4d\x68\xfd\x45\x63\x5f\xb1\xf1\x2f\x7f\xf9\xd6\xde\xbd\x1d\xd3\x06\x8f\x3b\xcb\x7f\x9d\xbb\x19\xcc\xdb\x60\x46\x91\x52\xdc\x8e\x3e\x97\xb7\x5d\x6c\xda\xeb\xf6\xda\xd4\xa6\x8e\x11\x0f\x22\x8b\xf2\x25\x83\xc7\x34\xe2\x7c\x11\x84\x50\xe3\x2d\xc9\x17\x13\xe8\x2a\x9c\x1a\x33\x54\x1c\x29\xb1\x4d\xd1\x4a\x2c\x38\x14\x8f\xfc\x20\xfa\x83\x78\xfe\xed\xd3\xfd\x5d\xa9\x36\xad\x59\xcb\xc9\xd9\x1a\xa7\xf7\xe9\xde\xad\x52\xba\xc2\xb9\x49\x70\xe5\xe7\x4f\xad\x4f\x5b\xad\xf5\x1e\xb5\xac\xd8\x91\x12\x3b\x7f\x7a\xf8\xe4\xaf\x0d\xb5\x8d\x9f\x82\xe0\xde\x9b\x45\x33\xa5\x57\xc6\x87\x49\xc0\x5b\x82\xe8\xfb\x3e\xe5\x42\x17\x85\x46\x84\x7c\xd6\x66\x0d\x5d\x92\x42\x97\x82\x0c\xa3\xb1\x81\x08\x14\xd9\x55\x04\xde\x0b\x39\x2a\xc8\x9c\x5e\x07\x9d\xfb\xbc\x07\xea\x71\x5e\xbf\xd1\xb0\x45\xe5\x1b\x7b\x27\x2c\x15\x84\xe1\xe5\xea\x4d\x6b\x38\x94\x39\x34\xfd\xd6\x8f\xc6\x9e\x27\x53\x1b\xa4\xf2\x14\x87\x0c\x97\xa2\x90\x6b\x88\x3e\xed\x19\x86\x9d\xc4\x9c\xc2\xca\x4c\xa8\x03\xc4\xa8\x91\x61\xfa\xaa\x40\x11\x91\x36\x23\xcf\x07\xac\x62\x62\x2d\x73\x0b\x3e\xf8\x52\xce\xea\x7d\x9a\xf6\x2e\xb5\x7f\xdd\x9d\x0e\xad\xcb\xbd\x5c\xe3\xd9\xa7\xe6\x36\x9e\x35\xe8\xa4\xfc\x34\x7d\xbe\x4c\xab\xf3\xfd\x0f\xa7\x16\xb6\x63\xb0\x72\xcc\x32\xa2\x12\x52\x18\x49\x4e\xa4\x18\x21\x06\xbc\xcc\x99\xac\x27\x61\x1c\x38\x38\xa1\x13\x1a\xcb\xbe\xe7\x47\x32\x88\xb0\x4a\x42\x3d\x73\xd8\xe3\x3f\x76\x07\xf6\xee\x71\xe5\xe7\x81\x4f\xbc\x7a\xe4\x85\x79\x3f\x15\x2e\xd8\x74\xc9\xf5\xb9\x0b\xa2\x6a\x55\x47\xbf\xf7\xc9\xdb\x85\xa6\xdf\x7b\x73\x7d\xe6\x9d\x41\x02\xc4\x4c\xc0\xbb\x21\x17\x38\xd0\x07\x44\xd4\x23\x5e\xc0\x1e\xd1\x39\xcc\xc8\x00\x87\xae\x1d\x84\x8e\x8b\x14\x59\x32\x35\x9a\x00\x5a\xc7\x74\xe6\x4a\xd2\xeb\xf1\x86\x4f\x54\x3a\x9c\xff\xc5\xb7\x0a\xbd\xb2\xa1\xd6\x8f\xfa\x99\xe7\x66\x2a\x95\xbb\x9e\xed\x30\x7c\x6e\xa1\x0f\xf7\x2d\xf8\x65\xea\xcc\xd4\x5a\x70\x18\x83\x50\x15\x49\x80\x59\x41\x16\xbd\xc8\xb6\x7d\x09\xd2\x26\xe1\x1d\xc8\x38\x8e\x06\xd5\xc0\x65\x62\x15\x44\x76\x4c\x8b\x4e\x22\x78\xbc\x29\x58\x19\x26\xad\xfe\xae\x24\x97\xd6\xb4\x71\x81\xc6\xe9\x5d\xba\xea\xaf\xcf\xe3\x72\xf7\x9d\xb0\x70\xdc\xc4\xbe\xe7\x4e\x55\x5e\x7e\xfb\xe0\xb5\x21\x54\xde\x35\x1b\x1a\x0f\x6e\xb7\x79\xcb\x1a\xed\xc1\x3b\x29\xce\x9a\x2a\x82\x18\x52\x9e\x07\x61\x12\x70\x48\xe3\x03\xcf\x21\xa2\x20\x3b\xc4\xf5\x24\xca\x94\x2d\xc4\xb0\x21\x85\x6d\x3b\xf0\x05\x68\x7a\x58\x0b\xcd\x20\xa3\x4b\x37\xad\x7a\xc9\x82\x13\x8f\xf6\x19\xfc\x4a\xf6\x1b\x0d\x0e\xce\x39\xd4\x65\xd3\xe0\xd7\x7a\x0c\xe8\x74\x7a\x45\x8d\x97\x4e\x1a\x03\xbe\x5e\xfc\x50\x6a\xbf\x4b\x6c\xd0\xc8\x87\x6a\x24\xf3\x2a\x15\x7a\xbe\x2a\xf1\x50\x41\x84\xf1\x9c\x40\x91\x51\xe8\x40\x59\x74\x68\xc7\x73\x88\x16\x27\x06\xaf\xb8\x2c\xfa\xfd\xa5\xb3\x8c\xea\x94\xb3\x52\xbd\x02\x7b\x9e\xcc\xb9\xf8\xd7\x43\x3f\xf4\x58\x35\x30\x5f\xa9\xf7\xbf\xd3\x47\x7f\x74\xe2\x80\xd2\xf6\xeb\xc2\xbf\x8c\x3c\x3a\x30\xb5\x56\x20\xb2\xc4\xd3\x14\x86\x78\x8a\x84\x31\xb1\x7d\x85\xe3\x44\xac\xab\x18\x30\x6e\x68\x60\xd3\x63\x1d\x0d\x39\xb6\x4c\x01\xd9\x16\xed\xc0\xa2\x14\xf3\xf7\xf7\x80\x32\xc2\x1e\x40\x6a\x3c\x54\x69\x5d\x31\x24\x55\xd8\x5c\xe6\x85\x03\xcd\xab\xf4\x86\xcf\xaf\x2c\xd0\x90\xff\x60\x4d\x81\x1d\x24\xba\x55\xf2\x76\x6a\x8d\x17\x48\x58\x23\xb4\x13\x84\x82\xed\xd3\xba\x04\x18\x01\xf0\x14\xef\x79\x94\x1c\x04\x58\x05\x01\x9b\x88\xbc\x89\x18\xc3\x88\x04\x55\x32\x12\xce\xf3\x82\x0c\xf7\xd8\xdf\x65\x3c\xd2\x9a\xdd\x97\xed\x89\x3f\xdd\x63\x8f\x95\x1f\x36\xfe\xdb\x1c\x63\x1f\x9b\xdb\xe5\x8b\x27\xe7\x35\xd9\xba\x69\x3b\x03\x87\x64\xd7\xbf\x9c\xf4\xae\x70\x25\x19\xff\xd0\xd0\xc5\xa9\xfd\x38\x56\xc8\x09\x8e\x41\x3b\x14\x02\xbe\xa1\x8a\x8a\xe4\x6b\xaa\xa6\x08\xba\x2e\x70\x16\x0c\xb0\xa9\x87\xa2\x28\x8b\x96\x20\xc4\xb2\xe4\x59\x00\xd1\xc6\x5f\x50\xd4\xf6\x5c\x3b\xd6\x99\xc5\x96\x5f\x7c\x01\xc7\x25\x9a\xd5\xfa\x34\xbc\xd2\x41\x1a\xf3\xfe\xc3\x9f\xad\xad\xd3\xb3\x46\xbe\x0b\xa0\xf1\xbd\xe7\x87\x33\xbd\x10\x34\x86\x66\x39\x49\x88\x23\x8a\xd3\x59\x2b\xa0\x02\x22\xe9\xa6\x40\x09\x41\x82\xb1\xee\xb8\xba\xc5\x53\x1e\xb4\x68\x18\x86\x9c\x20\xfb\x6a\xa8\x0b\x54\xe6\x17\x42\xb5\x07\x1f\xcd\x31\xe7\xf6\x17\x32\xda\x66\x5d\x7c\xa7\xc8\xe9\x36\xef\x5d\xba\xb8\xe5\x95\xd1\xcb\x36\x6d\xcf\xbb\x65\xf8\xe7\x3f\x1e\xbf\xf7\x19\xd6\xcc\x8b\x62\xb6\x18\xfa\xc0\x13\x29\x96\x35\x89\x67\x26\x28\xa1\x15\x3e\x00\x31\x10\x7f\xbb\xc1\xa8\x84\xa8\x3c\xf1\x6d\x93\x4f\x38\xdd\xa6\x64\xc0\x98\xa2\x94\xb9\x4b\x57\xf5\xce\xa0\xb2\x3f\xcd\x7b\x70\xf3\xd5\x3d\x9f\x55\x3a\xfa\x51\x9f\x66\x0f\xd6\x7d\xa7\xc2\xaa\x96\xdc\xcd\x5b\x5f\xec\xec\x7d\x69\xdd\x86\x39\x29\xce\x04\x71\x8e\xc0\x2a\x36\xd6\x82\x08\x71\x90\x8f\x43\xd1\x17\x19\x41\xb6\x4d\xcf\xa3\x5c\x55\x92\x19\x60\xb8\x3a\x8d\x42\xc5\xf7\x12\x1c\x68\x91\xf0\xbb\xdf\x9f\x51\x49\x1a\x9e\xbe\xf9\x70\xad\x0f\x76\x36\x49\x5b\xd4\xc5\xaf\x8d\xde\x2b\xdc\xfa\x93\xaa\x65\x3e\xcd\x7b\xb2\xcf\xed\x59\xc9\xd7\x97\xc7\xbe\x73\xef\x5d\x75\x99\xea\xb6\x1b\xca\x2e\x8e\x58\x0b\xd9\xa2\x81\x20\xe4\xa0\xc8\xb9\x26\x91\x28\x97\x91\x34\xc7\x30\x34\x39\x76\x83\xd8\xb6\x81\x22\xab\x1c\xd1\x2d\x8e\x12\xdd\x3f\x60\xff\x7b\x56\xf2\xef\xb2\x90\x69\xcd\x1a\x67\x2b\x90\x23\x7d\x50\x56\xa5\xfe\xce\xe3\x71\xb4\xe0\x56\xc7\x32\x6d\xe7\x81\xb7\x9f\x1c\x50\x8a\x3f\xf0\x96\x74\x0b\xfd\x7c\x4d\xee\x34\x60\xec\xe7\x17\x53\x3c\x7b\xeb\x2b\xbe\xc2\x68\x92\x4d\x11\xc2\xb9\x94\x6a\x02\x49\x87\xbc\xef\xdb\x46\x14\x59\xb1\xaf\x4b\x0a\x0f\xcd\xc0\x8e\xb9\x20\x44\x2c\x1d\x3a\x0a\x16\xff\xa2\xac\xdd\x27\x9a\xd1\xae\x4d\xa3\x71\x83\x17\x25\x0f\xf5\x5e\x71\xbc\x55\x95\xf3\xc1\xab\xef\x97\xe8\xcc\x3e\xf5\x7e\xc7\xe6\x05\x3a\xe5\xd9\xee\xa7\x78\x39\xba\x2b\x28\x52\x12\x09\x0e\xab\xc7\xbc\xc2\xf3\x9e\xe9\x78\xb2\x60\x29\x2a\x96\x11\x0b\x31\x15\x44\x8c\x16\x1b\x26\xf2\x78\x9a\xa6\x1c\x8d\xf7\x45\x3b\x73\x0b\x6e\xf6\xe2\xde\x83\x9f\xbc\xfb\x46\xf7\x1c\xda\xfa\xb6\x05\xab\xcf\x79\x29\xcf\x65\x38\xa4\xc4\xa5\x1b\x57\xe7\xef\x9e\x7b\xeb\x72\xb5\x46\xbf\xa6\x78\xa1\x4b\x1c\x43\x4d\xe4\x6d\x3e\x71\x13\x55\x56\x64\x9f\x91\x4d\x2d\x76\x7c\x23\xe2\x49\x6c\x40\x1d\x30\x2a\x91\xd5\xd0\x45\x00\x9a\x66\xc0\x61\x4d\x0e\x33\x6f\x8c\xd1\xe5\x9d\x53\xb7\x3c\xb9\xe9\x27\x73\x46\x85\x65\x4d\xa7\x76\xea\x31\xf4\x58\xcb\x1f\x56\xe4\x28\x6e\x55\x6e\x54\x68\x56\xf6\x79\x7b\xef\x7d\xe8\x21\x53\xd8\x1a\x85\x24\x0b\xb3\x2e\x03\x4c\x9a\x53\x75\x92\x24\x42\xa4\x84\x5a\x80\x80\xe7\x2b\x31\x05\x10\x4c\xc4\x98\x06\xaa\x27\x29\x2e\xcf\x06\x11\x43\x6b\x19\xf7\x75\x4c\x5b\x34\x61\xcf\xf0\xf7\xf3\x8f\x2f\xf4\x63\x8d\xf1\x0b\x66\x4f\xb8\x89\x1a\xbe\x80\xf8\x75\x57\x0a\x5d\xfd\xb1\x49\xf1\xd5\xf5\xd7\x1b\x29\x8e\xb0\x38\x07\x86\x18\xa9\x94\x8e\x69\xcb\x62\x75\x81\x8e\x68\x53\xf3\x39\x2c\x61\x16\x1b\xa1\x25\xeb\x06\xcf\x79\x71\x0c\x75\xcc\xc5\x24\x52\x05\xf9\x3f\x0d\xd9\x33\x1b\xfd\x8e\xf8\xef\x9e\x7c\x4a\x6b\xb6\x7c\xf5\xea\x3b\x7f\x9a\xd3\x98\xf2\xfe\x63\xdb\xb7\xc7\xd4\x9c\x8d\x8b\x0f\x5f\x78\x76\x78\xc5\x53\x8f\x1f\xfc\xf0\xc2\x22\xa3\xde\xc3\x69\xd3\xeb\x7c\xb5\xf2\xcd\x31\x9d\x53\x6b\x07\x06\x07\x2c\xe0\x62\x46\x4f\x18\xe4\x50\xbe\x49\x0b\x7a\xc8\x42\xd1\x87\x86\x1f\x46\x44\x02\x1e\x9b\x58\x5c\x1c\xd1\x72\x22\x51\x92\x4c\x4c\xf8\x57\x2b\x3b\x4a\x16\x5a\xf2\xe4\xb5\x1d\x3b\x7f\xd8\xd8\xb7\xd5\x37\x2f\x3f\x50\xb4\xfc\xfe\x9f\x2e\x94\x99\x04\x9b\x5b\x23\xcc\x42\xd7\xb2\x0d\x6a\xb8\x2f\xb5\x37\x19\x08\x5d\x26\xe1\xc2\xd8\x37\x7d\x16\xda\x5e\xe8\xc5\x94\xe5\x13\x23\x31\x24\x00\xe3\x40\x67\x79\x15\x88\x71\x18\xd9\xb2\x40\x14\x9f\x25\x36\xf6\x98\xcc\x77\x8e\x97\x6a\xd4\x6e\x71\x9b\x3b\xe2\x17\x4d\x6e\x5c\x3e\x53\xab\xc8\xb9\x41\x17\x6f\x8c\xb9\xfe\xf3\xf8\xba\x5b\x0b\xb4\x6f\x59\xe7\x9b\xf1\x1d\xef\x3d\xfe\xcd\x7c\xd5\x4e\xac\x98\xac\x4b\x6c\x19\x27\x2a\xc3\x24\xc0\x4a\x4c\x62\x8b\x9e\x9d\x08\x2a\x32\x90\x46\x25\x88\x44\x72\x12\x71\x0c\x62\x55\x3b\x09\x35\x10\xc0\x8c\x76\xb0\xa2\x61\xae\x2b\xb3\xfa\xbd\xf5\xf6\x27\xb5\xa4\x0a\xad\x2b\x5d\xda\x7a\xdc\x3a\x40\xe6\xcf\x9c\xa7\x5f\xfc\xe6\xea\x0f\x39\xc7\x2e\xcf\x97\x5a\x05\xa1\x35\xc1\x0e\xec\x40\x14\x95\x80\xb3\x24\x97\xd6\x90\x18\xc5\x24\x92\x80\x6b\x7b\x22\x6b\x10\x10\x28\x2e\x52\x3d\x0b\x59\x84\x82\xc8\x56\x69\x90\x64\x2c\x19\x1e\xeb\x30\x52\xed\x75\xf5\xe1\xba\xdd\x6a\xb4\x1d\xda\xbb\xfe\xe1\x46\xf3\xdb\xdd\x2c\x79\x5f\xb5\x69\xe7\x06\xd7\xde\x70\x94\x6e\xf4\x30\x9f\x5a\xc8\x96\x6c\x25\xd8\xa2\x2c\xcb\x13\x39\x3d\x71\x11\x54\x03\xd1\x30\xd9\x10\x68\x3c\x0b\x38\x83\xc5\x86\xe4\xeb\xb2\xee\x05\x86\xa3\xc8\x6e\x60\x43\xf0\x17\xaf\x48\x3c\x77\xec\x56\x89\x0f\x7b\x4d\xbb\x3e\xa5\x9e\xc0\x34\x97\xf6\xa7\x09\x4f\xdc\xd9\x51\xbc\xfa\xb7\xf7\xdf\x59\x56\xb3\x68\x89\xd2\x1f\x35\x48\xad\x4e\x27\x09\x20\x09\xed\xb3\x49\x18\xfa\x40\x01\xc0\x92\x79\xde\xd7\x7c\x9e\x28\x8e\x86\x44\x3d\x62\x91\xc4\x3b\xba\xad\xd8\xb1\xa0\x48\x41\x12\xf1\xc0\xc9\x18\x12\x0e\x7f\x7f\xeb\xc3\x4a\xb9\x0d\x3f\xac\xd9\x33\x65\xde\x7d\x69\xfd\xbf\x6f\x7e\xbc\xdc\xa6\xe1\x6f\xf7\xaf\x58\xec\xe1\x22\x6f\x5f\x8a\xc7\xa6\x38\xd9\xe6\x52\xae\xc8\x1a\xd8\xc1\xae\x9e\x98\x3c\x0a\x65\x8f\xe3\x1c\x36\xb0\x21\x13\x12\xcb\x77\x62\x02\x29\xda\xb2\x6c\xcb\x34\x79\x47\x0d\xb1\x21\x91\xbf\xd8\x01\x59\x7c\x40\x87\x17\x5a\xbf\xd7\x26\xac\x7c\xb1\xc0\x17\x7d\xae\xb4\x9d\xfd\x50\xc1\x69\xc2\x2b\x1d\x83\x73\x4c\x83\x09\x35\x9f\x1d\x67\x6d\x4b\xad\xcf\x22\x99\x7a\x1c\xca\xbe\x41\xc5\x0e\xa0\x80\xcc\xf1\x49\x14\x98\xc0\x66\x58\x0d\x42\xc3\x48\x64\x85\x63\xc2\xd8\x86\xbc\xe8\xca\x18\xf1\x88\x4a\x4c\x2d\xe3\x49\x57\x3f\x71\xfa\x97\xb2\xf7\x2d\x2b\x9e\x7b\x4f\xbb\x3d\x5b\xc7\xee\x9d\x7a\xbe\x48\xbe\x99\x95\x56\x36\xe8\xd2\x60\xb3\xef\xf4\x9a\xb3\xb0\x55\x6a\xaf\x23\x43\xc7\x8c\x8e\xa3\x90\xa1\x62\x19\xb0\xac\x4b\x13\x51\xe3\x19\x41\x84\xc8\x64\xad\x44\x63\xf1\xff\xc3\xda\x5b\x87\x6f\x51\xb4\x6f\xe3\x94\x80\xd2\x65\x81\x94\x28\x21\x08\x6c\x02\x2a\x48\x08\x12\x52\xd2\x88\x38\xdb\x39\xbb\xb3\x3b\x5b\x83\x34\x28\x1d\x22\xa9\x34\x02\x52\x8a\x02\xd2\x21\xad\x20\x0d\xd2\x20\x08\x48\x97\x48\xf3\x3b\x7c\x9f\xf7\x79\x7d\xf8\x7e\x6e\x8e\xe7\x7b\x7c\x7e\xf7\xff\xf7\x1f\xd7\xce\x7d\xd5\x5c\x73\x9d\xe7\xe9\x48\x6a\x18\x04\x42\x0c\x74\xf7\x6f\xf7\xf6\x75\x39\x63\xe6\xd8\xb0\x74\x7a\xc7\xf5\x4b\xc7\xe7\xce\xf3\x53\xbb\xaf\xc7\xff\xb2\x78\xf2\x34\x34\x27\xae\x79\xe0\x20\x24\x46\xb7\x39\x97\xfe\x92\x33\x0f\xd1\x48\x79\xca\x89\xc7\x03\xd6\xf6\x4c\x8a\x24\x31\x1d\xca\x11\xc3\xfb\x1a\xed\x30\x0a\x95\x48\x06\x8b\x13\x28\xf8\xd0\x91\x04\x60\x81\x58\x66\x24\x1f\x00\x42\x69\x4f\xe0\x67\x9e\x25\x74\x2b\xf0\xdc\x9f\xef\x8c\xb9\x69\x74\x5d\xee\xd3\x9d\xf4\x47\x7d\x57\xcd\xe8\xf8\x7d\x33\x50\xbf\x79\xbc\xbb\xee\xc0\x77\xee\x3c\x56\x88\xca\xde\xde\x7f\xee\xa9\x0e\x73\x4a\xe4\x18\xf7\x6d\xa3\x0a\x9d\x92\x69\x05\x4e\x34\xd9\xb2\xbe\x5d\xeb\xb1\x73\x5e\x19\xd7\x7b\x63\xb2\x3e\xbd\x53\x72\xc1\x30\x63\x93\x02\x8c\x26\x68\x50\x0c\x18\x1e\x26\x34\xcd\x1a\x6e\xcc\x12\xd3\xf0\x19\x40\xd3\x90\x10\x07\xeb\x88\x46\xb1\xc8\x3b\x98\x0a\x63\xfc\x04\xf1\x8b\xc2\x63\x4f\x5c\xad\xfa\x45\xa5\x67\x0f\xb7\x7c\x30\x65\xb0\x7d\xb2\x61\x9d\xcf\x8e\xe6\x2e\xca\x15\x3d\xd5\x7c\xc1\xe5\xfb\xdc\xcf\x35\x9c\x34\x4f\x17\x34\x97\x98\xb1\xeb\x0b\xc8\x0b\xac\x44\x32\x25\xdb\xe5\x68\x28\x27\x94\xe2\xf0\x44\x70\x1c\x40\x28\x2e\x12\x55\xcc\xa0\x84\x32\x62\x4e\xc5\xa2\x94\xd1\x9d\x9e\xdd\x30\x26\xcf\x37\x2b\xb3\x1c\x2c\xa3\xe6\x98\x53\xef\xc3\x4f\xf6\x94\x2b\x76\xe2\x47\xc3\xa9\xd5\x31\x3f\xbc\x9c\xa7\xa5\xb0\x78\x46\x9a\x0b\x91\x1e\x33\x16\xf1\x38\x2d\x4c\x14\x55\xb1\xe5\xc8\xf6\x34\x49\x22\x10\x41\xc5\x96\x3c\x1e\x7b\x2c\x05\x0c\x3a\x92\x34\xd7\xa6\x13\x64\xcb\xa2\x0e\x32\x16\xa2\xeb\x43\x16\x15\x9a\xdc\xb8\xe2\x9c\x55\x59\x5a\x7e\xf7\xc6\x98\x01\xe5\x2a\x54\xe9\x30\xe6\x08\x5c\xd6\x66\xfa\x80\xdc\x9d\xdf\x1e\xfa\xd2\xfa\x34\x53\xe4\xfa\xac\x45\xb3\x41\xe2\xb9\x96\x25\x70\x31\x09\x0c\xce\x54\x59\xc4\x52\x74\x2c\xd2\x01\x2b\xb1\x9a\xe2\x3a\xa6\xac\xf8\x94\xc7\x4a\x7a\x64\x0a\xfe\x13\x96\x9b\xc8\x53\x79\x3f\xdd\xd0\x68\x79\x15\x70\xee\x0d\xf5\x5d\xe5\xb3\x6d\xdb\x1e\xdd\xeb\x2f\xdd\x1a\xb9\xed\x08\x79\xa6\xa5\xd8\xfe\x6c\xe6\x91\x11\xa9\xa5\xd3\x02\x07\x30\x72\x24\xf1\x9c\x6e\x02\x93\x93\x22\x00\x02\xd7\x8a\x62\x5b\x8f\x1c\xd5\x53\x5d\x64\xa9\xaa\x62\x78\x06\x45\x49\x82\x64\x5b\x11\x34\x9f\xc0\xa1\x3c\xf6\xee\x8e\x86\xe7\x86\xca\x63\xad\xd7\xeb\xcb\xbb\x36\x7c\xdf\xa6\xd7\xb8\xa0\xe0\x0b\x9f\xe7\xd8\x35\x6e\xe7\x8d\xbd\x5b\xef\xe4\xc9\x9d\xe6\x3d\x17\x1a\xf9\x0c\x13\x7b\xbe\x1a\xc2\xc0\x64\x9c\xd0\x61\x91\x01\x55\xc8\xf2\xa1\x1f\x21\x01\xd9\x4a\x62\x18\x91\x04\x25\x3b\xf6\x22\x17\x08\x1a\x49\x41\x61\x7f\xec\x6c\x3f\x61\xc2\xb9\xfe\x2f\x5f\x9d\x35\xcd\x1d\x4b\xf5\xcf\x59\xf7\x66\xc5\x56\x25\x2a\xb7\xfe\xf5\xa9\x56\x2f\xf5\x19\xd9\x75\x58\x9a\x31\xec\x81\x4e\x0c\x5e\xb6\x15\x41\x76\x24\xda\xb4\x18\x2c\x08\x21\xa5\x9b\x9a\x42\x01\x59\x54\x74\x9e\x75\x18\xc6\x20\xa1\xa2\x6b\x01\xd2\x1d\x5f\x13\xff\x25\x7e\x91\x02\x83\x82\xd4\xb7\x57\xdd\x29\xfc\x4a\xd6\x5d\xd9\x4a\xbc\xb3\xa6\xc1\xa0\xf1\x39\x82\x42\x95\x7a\xcc\x78\x7a\x70\x99\x9c\x59\x2b\x7f\xeb\x5c\x39\xf1\x98\x3b\xe5\x2c\x97\x2c\x9f\x94\xf5\xdc\x8c\x17\x0b\xaf\x9a\x3a\xf0\xb7\xe2\x1f\x72\x5d\x3b\x7c\xbe\x42\xa7\x3b\x5b\x97\xb3\xbe\x52\xb4\xac\x98\xf9\xb9\x71\xca\xc0\x85\x58\x96\x65\xc3\xd0\x58\x89\x63\x83\x38\xa2\x39\x51\xb5\x31\x8d\xb0\x45\x02\x49\x12\x64\xc8\xa8\x3c\x8a\x38\x95\xc5\xa2\x61\xd8\x0a\x1b\xfb\x5e\x9c\xba\x1d\x2b\xd1\xab\xd5\x89\x8a\xaf\xae\xaa\x58\xf8\xc6\x07\x1f\x97\x3f\x39\xfd\x17\x6d\x7e\xef\x91\x6b\xc1\xa6\xae\x4f\x7d\x3c\xa3\xd8\xe0\x57\x7e\xcc\xfc\x60\x23\xf5\x5b\x95\x1f\xc8\xc0\x64\x28\x60\x45\xa6\x2d\x53\x3a\xef\xf8\xb4\x02\x09\x08\x68\x33\xe0\x29\x14\x69\x8c\x63\x70\x8e\x18\x29\x8e\x4e\x3b\x3a\xc6\x01\x4e\xb1\x2b\xb7\xee\xc4\xb6\xfb\x63\xea\x55\xcd\x9b\x75\xfd\xd8\xdd\x9b\x6e\x6d\x99\xf0\xdd\x98\xfd\x6d\xc4\xb3\x0f\xbf\x5e\xf5\xc8\xce\x5e\xb6\x47\x98\x79\x6a\xbd\xd4\x10\x03\x01\xea\xaa\xc3\x3a\x1a\x65\x08\x84\x66\x12\xc2\x58\x89\x11\x40\x1c\x21\x3a\x52\x34\x1c\xb3\x84\xc7\x96\xe1\x58\x61\x6c\x09\xd8\xe2\x05\xce\x08\x53\x17\xa3\x97\x37\x14\xff\x66\xf8\x69\xa5\x4d\x9f\x91\xf6\xb4\xe1\x1d\x1a\xad\x5f\xcf\x75\xad\x33\xf9\xc6\xd6\xa8\xc5\xa8\x57\x46\x97\x98\xf0\x54\xe6\xe5\xd3\x52\xeb\xe4\x1b\x34\x2b\xc5\x8a\xc5\x93\x88\x36\x03\x56\xd1\x74\xdd\xe0\xb5\x38\x01\x81\x10\x84\x31\xe2\x63\x4c\xe2\x08\xd8\xae\xef\x08\x26\x34\x04\x47\x07\x4c\xc6\x93\x9e\x36\xe0\xeb\x92\xbf\x1e\xef\xf5\xca\xd2\x0d\xe7\x99\x63\x67\x4a\xbf\x58\x34\x6f\x89\xdf\x8e\x24\xf5\x8f\xbf\x5d\xf9\xf8\xec\x96\x9b\xb6\x67\x3e\x70\x53\x36\xbe\x66\x24\x81\x84\x35\x2c\x16\x73\xa6\xc9\x85\x0e\x4d\x39\x0e\xe7\xf8\x0e\x51\x58\x0f\x39\x81\xeb\x41\xda\x35\x01\xad\xd2\x81\xa9\x03\x40\xa9\xff\x17\x7e\xfa\x3f\x06\x1a\xc7\xfe\xa8\x6a\xd5\x6a\xc7\x0f\x9a\xdb\xfb\x8b\x89\xe3\xe7\xaf\x5c\xb7\xed\x01\xdd\xe3\x64\xaf\x3b\xf9\x8f\x7d\x34\xea\xd1\xaa\xf5\x0d\xd2\x7c\xf7\x04\x3a\x88\x75\xcb\x41\x04\xfc\x1f\xbe\x73\xda\x80\x02\x02\x51\x10\xa8\x94\x17\xd3\xae\x4a\x9b\x22\xad\xb8\x88\x71\x2c\x4b\x04\x32\xaf\x20\xd1\x4f\x9d\xd5\xd5\xd6\x45\x4f\x17\xec\x3c\x3e\xb9\x38\x74\xd1\x81\xea\xbb\xa6\x3a\xcf\xdf\x5d\xfb\x74\x96\xe5\x23\xbb\x2c\x6d\xba\xeb\xf7\xef\x8b\xe7\xc9\x3c\x17\x70\x6a\xc6\x39\x49\x0c\x1d\x8a\xc4\x34\xe5\x3b\x10\xc7\x42\x48\x22\x56\xf6\x78\x39\x41\x88\xe8\x61\xc8\x68\xc8\x16\x45\x33\x42\x12\x23\x59\x8a\xad\xd3\x0c\x6d\x66\x74\x8e\x61\x3f\x8f\x3a\x5b\xaf\x27\x7b\xac\xff\x1c\xed\x40\xb9\xb3\xb5\x86\x5d\xff\xc5\xe9\x98\x4d\x3f\x7a\xe4\x97\x07\x5d\x60\x90\xb5\xc6\x73\xe9\xcd\xea\x3a\x05\x2d\xe2\x99\x3e\x0e\x74\xe4\xdb\x8e\xe0\x45\xc8\xa3\x14\x3a\x8e\x4c\x8c\x8d\xd0\x94\x2d\xca\x74\x43\x59\xb1\x24\xd3\x4a\x4c\x3a\x72\x6d\xe0\xa4\x9e\xa9\xac\xc6\xd7\xc7\x6e\x28\xc6\xdc\xae\xdc\xa3\xc8\xde\xc5\x2f\xbe\xf1\xe9\x8f\x4f\xaf\x1d\xd5\xb7\x72\xc7\x23\x75\x87\x6d\x59\xd9\x76\xcf\xe9\x34\x73\x5f\x44\xb2\xe1\x9b\x06\x63\x0b\x5c\x42\x99\x1a\x25\x85\x4a\xec\x6b\x94\xa7\x0a\x16\xc7\x8b\xb6\x02\xb0\x4c\xc7\xba\x2b\x29\xac\xcb\xca\x84\x0b\x78\x2a\xd1\x52\xd3\x17\x2f\x3f\x3b\xa5\x59\x97\x5f\xaf\x77\xea\x69\x9c\xde\xc5\xf4\xc9\xbe\xac\xc9\xe9\x43\x5a\xd5\xec\xa5\x6e\x1e\x1b\x34\xd2\x6b\xfc\xf6\x97\x99\x47\xcc\xa6\xec\x56\x2c\x48\x4c\xa0\xc9\x5a\x64\x47\xbc\x87\x1c\x28\x30\xc8\x27\xbc\xc8\x07\x3e\x02\x32\xe7\x42\x29\x4c\xc4\xbf\x3f\x4e\xd1\x2c\x97\x8b\x29\x92\x00\x90\x31\x14\x8f\xf5\x18\x51\x70\x7e\x93\x8d\x8b\xf6\xfc\x79\x7d\xfe\x94\x0f\x1e\xbe\x9f\x7d\xd6\xc6\xb6\x85\x0b\xef\x2a\x3a\xe5\xcf\xbf\x7e\xa8\xf2\x62\xd9\x34\x33\x2e\x0b\xae\x8d\x29\x59\x41\x34\xd4\x35\x2b\xd0\x55\x8e\xa3\x63\xc2\xb3\x1c\xb2\x63\x44\xb1\x02\x10\xb9\x80\x55\x35\x3f\xf2\x74\x9b\xe2\x71\x22\xd9\xa9\xb4\x69\xaf\xd4\x1e\xff\x43\xe3\x79\x5a\xee\xfd\x6f\x54\x2d\xbb\x77\xf7\xc1\x2f\x87\xf5\x1e\x81\x31\x17\xac\x50\xb7\xf0\x7f\x7d\x5e\x7d\x84\x90\xe6\x37\x18\xe4\x58\x8c\xc2\xe9\x9a\x8b\x50\xa2\xe8\x31\x16\x9c\xd8\x72\x82\xd0\x20\x66\x18\x21\x3d\x10\x55\xc3\xe2\x24\x1d\x43\xca\xf3\x24\xd3\xd7\x3c\x01\xa6\x6e\x65\x5f\x1b\x77\x33\x87\xed\x0d\x1f\xfd\x9c\x88\xda\x1f\x6c\xf1\x69\x83\x3b\xbf\xe7\x9f\x70\x61\xb4\xb6\x61\x55\xfe\x9f\xa6\x5f\xec\xd2\x20\xbd\x14\x9b\x02\x91\x68\x90\x40\x81\x77\x25\x9e\x20\x3b\x09\x42\xce\xd3\x0d\xe0\xb3\x44\x0c\x6c\xca\x70\x80\x46\xb9\x7e\xec\x89\x9c\x4e\x43\xde\x88\xbc\xd8\xd6\xb9\xd4\xaf\x13\x23\xaa\x7d\x9c\xab\x42\xd3\x12\xf9\x4f\xd3\x47\xcf\xe7\x98\x3b\x9f\xf9\xf2\xe7\x37\x6a\x95\xce\xd7\x6e\xe3\x80\xab\xfb\xf2\x17\x5a\x36\xf0\x68\x9a\xc1\x49\xae\xa0\x43\x1b\x21\x20\x23\x3a\x46\x3a\xd0\x11\xf1\x43\x83\x05\xba\xc1\x7a\x8c\xa5\xaa\x7e\x20\x51\x04\x7a\xbc\x4b\xf9\xb6\xee\xc3\x58\x13\xec\x27\x5c\x9d\x07\x27\xc7\x86\xe3\xed\xbd\xf3\x4f\xc3\x4d\x71\xd9\x3f\xca\x97\xdd\x52\xfd\x48\xb7\xd6\x7c\xe1\x7a\x6c\xeb\xc3\xbb\xa2\x05\xa5\x3f\x78\xfc\xd7\xdd\xd6\x7e\x79\xa1\x52\xa1\xfc\x9f\xe5\x6a\x5a\x75\x4f\xce\xdb\x7f\xbd\x34\x7b\x69\xdf\xb7\x1f\xcc\x2d\x7d\x80\x5a\xdb\x17\x56\x5b\xdb\xed\xce\xe3\xbf\xde\x67\x0c\x1f\x76\xfe\xd0\x6b\xf7\x9a\x64\xcb\xff\x6c\xce\xa1\xa7\xf3\xb4\xf9\xe6\x4a\xd8\x20\xac\x3d\x58\x79\x6f\xca\x96\xd2\x6d\x36\xdd\x7e\x2c\x29\x34\x0c\x6f\xb6\x6d\x5b\xfc\x83\x2b\xb5\x0e\x77\xa8\x7f\xe5\xfc\x1f\x25\xeb\xb6\x6e\xba\x72\x43\xc1\xf1\x27\xaf\x3e\xfd\x52\x6e\x3f\xfb\xd4\xdd\x69\xde\xd8\xd1\x14\xcb\x17\x6d\x3f\x36\x05\xce\x11\x75\x41\x70\x38\xc3\x0d\x62\x4d\xa3\x63\x37\x11\x0d\x5e\x85\x31\x14\x35\xe4\x38\x32\xa0\x22\x5d\x87\x22\xa5\x65\xac\x1a\x83\x0a\xc0\xc1\x9b\x26\x6f\x7d\xab\x74\x9b\x70\x60\x8e\x9f\x0b\x97\x5f\xb8\x75\xdb\x99\x66\xcf\x66\xdd\x9b\xbb\x06\xc8\x3f\x4b\xaf\x30\x3a\xcd\x8b\x6b\x48\xe5\x6d\x56\xa5\x18\x57\x87\x91\xc7\x7b\xa6\x66\xd2\x08\xda\x24\x91\x0d\xd3\xd6\x80\x18\xb2\x31\xd1\xe3\x50\x8c\x4c\x91\xa7\x39\xcb\x32\x90\x99\x31\x29\x1c\x56\x26\x2c\xa8\x50\x60\xe5\x81\xef\xca\xad\xe9\x46\xef\x5a\x55\xea\xdc\xf2\x17\x2d\xca\x29\xd4\xb2\xdd\xe8\x1b\x0b\xb2\xb5\xab\x37\x20\xbd\xfd\x26\x4d\x34\xfd\xef\xd2\xe6\x30\xbc\xad\xa0\x48\xe7\x7d\x4b\x8d\x18\x16\x4a\x8e\x2f\x79\x91\x6f\xc5\x0a\xeb\x45\xb1\x0c\x03\xa0\xba\x82\x44\xd3\x50\xf0\x52\x47\xd7\x6b\x9d\xf2\xe4\x17\x85\x39\x4f\xb5\x18\x60\x5c\x3b\x5b\x62\x62\xff\x1d\xbf\xed\x39\xbf\xb8\x54\xff\x6a\x0b\x1a\xbf\xcb\xbd\x59\xee\xea\xde\xf4\x9a\xed\x21\x31\xc4\x1e\xe1\x38\x45\xe4\x03\x2c\x38\x10\x78\x48\xc3\x0e\xc1\xba\x08\x78\xd5\x72\x45\xd9\x72\x84\xd8\xa7\x20\x2f\x31\x06\x61\x34\x44\xd8\xd4\x6d\x32\xe8\x3e\xab\x68\x89\xf3\x6d\x7a\xe1\x36\xb9\x3a\x0c\x1a\x30\xb5\x73\xb9\x0f\x77\xbc\x79\x25\x69\x27\x7c\x5f\xe1\x5d\xaa\xec\xb9\xac\x87\xd2\x5c\x9f\x19\x81\xb2\x13\x16\xc6\x48\x95\x40\x42\x70\x94\x50\x92\xac\x9b\x26\x76\x13\x4d\x00\x92\x84\x21\x1d\x12\x93\xf6\x7d\xda\xe1\xa3\x18\x31\x0a\x49\x41\x79\xd2\xeb\xb7\xab\xfd\x7f\x2e\x52\x6f\xd5\xe2\xab\x9d\xfa\xac\xce\xb3\x58\x78\x70\xfb\xe9\x5c\x4b\x5b\xcc\xfc\x71\xce\xf3\x8d\xc6\x8c\xf9\xba\x78\x9a\xd9\x2c\x78\x07\x48\x48\x0c\xc5\x04\x25\xa6\x95\xe8\x48\x8a\x19\x4c\x09\x40\xf4\x58\x3e\x09\x63\x1b\xb0\x46\x9c\x48\xb4\x4f\x82\x40\x20\x32\x30\x5d\xda\xf2\x32\x5e\xc9\x8f\xf6\xda\xfd\xd2\xd4\x8b\xfc\xc9\x05\xc5\xb6\x55\x5d\xb4\x66\xcb\x3b\x45\x27\x4d\xdb\x3a\xe4\xce\xb9\xb5\xde\xcb\xa4\xec\xea\x01\xbd\x33\xaf\x66\x9b\xb2\xd0\xf9\x76\xa4\x08\x89\x68\xab\x3e\x74\x81\xce\xd3\xae\x95\xc8\xb2\xa8\xf1\xc8\x4a\x80\x48\xbb\x46\x48\xb9\x5c\x12\x07\x3e\xa0\x2d\x44\xab\x9a\x1e\xea\xee\x13\xf0\x46\x2d\x1f\x74\x77\x6b\x2d\x79\xd4\xd3\x6d\xc1\x64\xdd\xaf\x4e\x9d\x50\x62\xf4\xcb\x97\xae\xae\x99\x75\xe7\xf4\xbd\x3f\x5b\x4d\xee\x51\x72\xce\x63\x4d\xf5\xb2\x2a\x8b\xcc\xf9\x71\xa9\xdd\x4d\xea\xdf\x9f\x38\xc4\x24\x70\xc4\xd7\x8c\xd5\xb0\x7d\xae\xd5\x85\xe7\x8a\xb9\x1b\x4f\xc4\x6d\xd3\x5b\x5f\x00\xe3\xc4\x0c\x8e\x0c\x53\xe4\x05\x44\x13\x8f\x51\x12\x85\xd5\x92\x50\x90\x02\xc2\x7b\xac\x93\x88\x9a\x1b\xe8\x1a\xc6\x96\x1d\x42\x8b\x8d\x62\xcf\xce\xf8\xbf\xdc\xef\xfc\xf3\xa7\xbb\x7e\xed\xc0\xfc\xb4\xab\x67\xd7\xf1\x1b\x37\x0f\xfe\x78\xee\xc5\x0e\x72\x81\x62\x13\xaf\xef\xee\xf1\xc1\xd3\x6f\x3c\x9b\x5e\xb9\x29\x41\x14\x54\xc3\x91\x44\x1d\xda\x2c\x11\x65\x94\x24\x88\x97\x28\x8d\x50\x3c\x61\xcc\x48\x17\x79\x33\xa0\x81\x67\x47\xaa\x81\x59\x4a\x51\x05\x62\xd2\x56\xea\xa7\x86\x6c\x43\xf3\x08\xab\xd7\x4c\x7b\xb1\x68\x9e\x07\x0d\x0f\x5c\x18\x7c\xb4\xf0\xf0\x4d\x66\x7f\xf0\xd5\xde\xb9\x63\xc6\x4e\xcd\x43\x47\xa3\xd2\x1b\x01\x96\xab\xda\x8a\x1a\xfb\x01\x94\x75\x5f\xd1\x03\xd7\x14\xe2\x44\xf0\x29\x4b\x77\x43\x44\x99\xb1\x17\xeb\x61\x64\x06\x1c\x61\xb0\xad\x47\xb2\xee\xa4\x42\x92\xe2\x63\xca\x87\xb3\xbb\x7d\xf9\xa1\x72\x69\xfe\xf4\x85\xcd\x3e\x17\x87\xb7\xd8\xe2\x9d\x30\x06\x7f\xd4\x6f\xfb\xe8\x6b\x8d\x47\xcf\xe9\x9e\x5e\xe7\x08\x02\x53\x55\x1d\x5b\x06\x32\xeb\x52\x9a\xa5\xf2\x61\x62\xb1\x3e\x20\x94\x1b\x12\x3d\x72\xfd\x58\x0e\x7c\x12\xa9\x8e\x18\xd2\xbc\x95\x18\x04\x51\x29\x74\x42\x87\xe5\xf9\x3a\x4f\xcf\x53\xb7\x26\x97\x5f\x5f\xfc\xc4\x9f\x97\x67\x0d\x59\x75\x29\x4b\xbd\xb2\xc7\xa7\xec\x6f\x5e\x73\xc9\xbb\xa0\x48\xad\xfa\xe9\x0d\x5a\x16\x11\x8d\x50\x84\x8e\x64\x18\xab\x9e\x66\xfa\x9e\xe5\x79\x4e\xe4\xc8\x58\x12\x00\x4b\xd9\xb6\x48\x59\x66\x64\x58\xb1\xee\xc8\x41\x42\xe9\x9c\xf0\xcf\x6a\xe2\x8d\xdc\xff\xbb\x47\x86\x3e\x0d\x7a\x95\xa6\xb2\xf4\x7f\x2c\x6a\x1b\xed\xcf\x76\xf8\xca\x90\x29\x79\x72\xfc\x79\xe0\xe1\xa0\x52\x97\xbf\x79\xfe\xf6\xb5\x4d\xe6\x07\x5c\xf7\xcf\xeb\xfd\xd5\x6e\x4f\x9d\xc9\x25\xd2\x1b\x02\x7a\x14\xda\x66\x12\x52\x61\x24\xd9\x2a\xe1\xf8\xc4\x0c\x1c\x8b\x26\x9a\x62\xc4\x14\x4a\x18\x9a\xe5\x13\x56\xd7\xa0\x4e\xd9\x11\x97\xd0\xba\xef\x81\x14\x32\xf3\x7d\xaa\xdf\x2c\x2e\x43\x37\xfb\x0f\xbd\xa4\xa1\x8d\x57\xac\x5a\x3f\xdc\x7e\xa9\x17\x75\xe1\x93\xc2\x7c\xed\x96\x67\x9b\x8c\x3b\x77\x2d\xcd\x7d\x18\x46\x1e\xb1\x0c\x3f\x04\x0a\x08\x05\x26\xe2\x68\x1d\xc8\x54\x22\x72\x04\xe9\x9e\x87\x7d\x0d\x69\x48\x66\x13\x23\x94\x2c\x19\xfb\x4a\x44\x27\x4f\x58\x2f\x18\x22\xb6\x9d\x79\xdc\x3a\x21\xee\x5c\x59\xe4\xe4\xe5\x4e\x93\x47\xfd\xd9\xc6\x28\xfa\xd2\xd0\xfd\x1f\xdc\xfc\x78\xc1\x01\xbf\xfc\xeb\x99\x37\x3b\x75\x7e\xd4\x45\x95\xa3\x78\x02\x31\x63\x06\x32\x8b\x49\xe2\xb9\xa2\x29\xda\xc8\x52\x25\x8e\xf6\x3d\x97\x09\x34\x07\x30\x90\x73\x91\x0f\x6d\xce\x36\x4c\x2d\x75\x63\x73\x76\xc3\xc2\x95\xfb\x8e\xaa\x0b\xbb\xd7\x1f\xdd\xac\xea\xe9\x0d\x55\xe8\x99\x77\xbe\x15\x16\x1e\x9a\xf5\x0d\x6b\x6e\xbf\x53\xc9\x4d\x2f\x3b\xb0\x20\xa8\x26\x63\x10\xdf\xa2\x35\xc9\x65\x95\x48\x85\x1e\x6b\x21\x46\x72\x49\xe4\x38\x76\x48\xd9\x18\x30\x58\x57\xd8\x58\x0b\x02\x17\x47\x0e\xb1\x9e\x44\x89\x3a\xe9\xcf\xd9\xd9\x0b\x15\xb1\x5b\x9f\x15\xd6\xd7\xff\xf9\xed\x9e\xfd\xdb\x15\xd0\xae\x2c\x3f\xdb\x78\xde\x91\xeb\xdc\x9b\x0f\x06\xf7\xa8\x9b\xde\x1c\x89\x60\x90\x88\x3e\x56\x25\xa4\xd8\xb6\x6d\x41\x53\xd5\x14\x05\x58\x9a\x2e\xfb\x50\x8c\x99\x88\x26\xb6\xee\x48\xb1\xcc\x39\x08\x84\xa2\x63\x28\x1e\x9f\xfa\xb4\x9b\x0d\x28\xb0\xa2\x76\xdd\x9c\xad\xa7\xf4\x22\x9d\xac\xee\x4f\xfd\xb6\xb7\xaf\x7a\xf1\xc1\xaf\xfb\xae\xdf\x2b\x7c\xa5\x43\xd2\x37\xef\xd3\xe9\x75\x12\x5d\x4e\x14\x07\x07\x9c\x10\x2b\x21\x6b\x58\x04\x46\xbc\x82\x69\x2e\xb4\x09\x08\x02\x4a\xd6\x7d\x51\x61\x4d\x2f\x82\xc4\x0a\xf8\x50\xe0\x80\x46\xfd\xb3\x4d\x39\x20\xe7\xff\x6e\x6c\xdf\xa7\x7e\x85\xdc\xff\x83\xd3\x78\xf3\xa2\xd3\x77\x4e\x94\xca\xd2\xf6\xec\xb8\x86\x57\x6f\x7d\x59\xea\xc1\xfc\x5b\xeb\x66\xb7\xfb\x65\xd9\x8f\xb7\x0b\x4c\xbc\xb3\xfc\xd8\xe0\xcc\x93\xd6\xa5\xcc\x39\x0c\x63\x73\x28\xa0\x42\xc4\x0a\x10\x73\x30\x8a\x78\x81\x51\x58\x48\x11\xd7\xa7\x7c\xd5\x84\x18\x0a\x9a\x8d\x18\x45\x35\x7d\x9d\xf5\x3d\x13\xd0\x4f\xd8\xbd\xdc\x3c\xe6\x99\x70\x68\xc3\x59\xc5\xf2\xce\x3f\xbc\x6d\xf2\xba\x3b\xcd\xbf\xfe\xd6\xdf\x5f\xfd\x64\x89\x47\xee\xd9\x59\xb5\xdf\x1e\xbc\x63\x5c\x9a\xf9\x81\x38\x95\x0a\x45\x10\x00\x89\xc7\x14\xc3\xb3\x56\x08\x10\x85\x88\xe4\x5b\x1c\xb1\x62\x00\x28\xdb\x31\xd4\xd8\x93\x31\x56\x14\x1c\xb3\x36\x45\x60\xea\x48\xd8\x31\xbb\xbe\x57\xf8\xca\xfd\x73\xf9\x0f\x6e\x6e\xd9\xf9\xcc\xad\x75\x65\x56\x4c\x66\x5a\x9d\xde\x6d\xcb\x23\x8e\x77\x91\x5f\x1d\xd0\x26\xcd\xac\xe4\x8e\xa7\xf0\x58\x34\x14\x23\x30\x08\x76\xd8\x40\x65\x68\x45\x4f\x02\x1f\x28\xbc\xaa\x44\x7c\x82\x34\x37\x8c\x13\x91\x57\x23\x9b\xb5\x91\xad\xeb\x4f\x80\x6a\xaf\x28\x5b\xaf\x48\xab\x6d\xab\x7a\xd5\xfa\x6e\xf3\xb4\xd2\x73\x0f\x95\x45\x9b\xda\x1d\x57\xab\x5e\xe8\xf3\x71\xdb\xa7\x2b\x16\xda\xa3\xdc\x4d\xf3\x00\x1f\x84\x56\xac\x00\xde\x42\x52\x4c\x93\xc8\xf7\x2c\xcd\x10\x7c\xd5\x15\x08\x1f\x23\x47\x74\x79\x07\x24\x1c\xf0\x44\x86\xd8\x3c\x93\x60\x06\x53\xff\xb0\xbf\xfd\x1b\x7e\xf8\xdf\x06\x15\x7d\x1a\xd0\x59\xb2\x64\x79\x3c\x14\x5e\xde\x36\xb2\x4f\xd6\xaf\xee\x44\xea\x92\x32\xb4\x53\x47\x7e\xeb\xea\xa2\x89\xdf\xce\xcc\xbd\x27\x47\xd1\x75\x9d\xae\xe8\xb3\xe7\x5e\x4a\xef\x57\x22\x9f\xf1\x1c\xc8\x61\xde\x77\x14\x9e\xf2\x2d\x48\x58\x4b\x42\x5a\x2c\x2b\x94\x1c\xf3\x26\xd4\xa0\x17\x85\x48\x93\x6c\x9b\x0d\x5c\x56\xd1\x64\xf2\x04\x82\x7e\xa5\xd5\x89\x06\xdf\xcc\xb9\x31\x76\x8c\xfe\xc1\xf1\x35\xce\x94\xdd\xd5\x6a\xf7\x13\xb2\xe5\xd9\xf0\xf9\xf9\x8b\x45\x6e\xe2\x57\x6a\xa4\x79\x81\x0b\x68\x4a\xac\x0a\x66\x22\x53\x1c\xaf\x40\x51\x42\x0c\x8b\x75\x89\x13\x74\x5d\x49\xcc\xd0\xd0\x3c\x2b\xf4\x00\x6d\x99\x0c\x54\x05\x5d\xd1\x4d\x60\x82\xd4\x66\x1f\xf8\xac\xd8\x1f\xc3\xe4\xea\x43\xbb\xd5\x2a\xb6\xf0\x4d\x79\x46\xdf\x29\x7f\x2c\xaf\x76\x72\xd6\xb6\xcf\xb7\xcc\x63\x0f\x34\xc5\x7f\xf6\x4a\xf3\xae\xba\xa0\x5a\xb4\x6a\x6b\x4c\x2c\xc4\xa2\xcd\x98\xb6\xee\x38\xa1\x16\xd3\x08\x33\x34\x8d\x45\xd7\x88\x5c\xc3\x80\x02\x43\x41\x81\x31\x95\x20\x0a\xcd\x27\xa0\x26\x7b\x7d\xf2\x5e\xe3\xa5\x79\xd0\x43\x4d\x7b\x6a\x85\x5b\x8c\xa9\xe0\x9f\xd8\xf7\xea\xe5\xdf\x5b\xad\x5a\x52\x78\xd6\x61\x3a\x2e\xdd\x33\xcd\xbc\xa4\x44\xb6\x7d\x16\x04\xb2\x4f\x8b\x66\x18\x21\x3a\x88\x65\x43\x44\x81\x87\x28\xd1\xb0\x25\x09\x4b\x94\x2a\xf8\x5a\xec\x8b\x50\x8d\xc3\x98\xd5\xf4\x7f\x42\xe1\xdf\x12\x1b\xff\x6d\x0a\xd7\xa7\x41\xef\xdc\x45\xb3\x3e\x2e\xb1\xf1\xf9\x99\x1f\x47\xbc\xb8\xec\xd4\xe4\xee\x1b\x7b\x6d\x55\xe6\x4d\xaa\x7d\x4c\x2e\x35\x64\xba\x37\xff\xe3\xa2\x53\x0e\xad\x5d\xb0\x39\xc7\xb9\xf4\x56\x05\x9e\x97\x35\xd9\x25\x8a\x61\x51\x1a\x26\x74\x14\xa8\xa2\x25\x72\x44\x62\x59\x10\x29\xc0\x57\x0c\x25\x72\xe3\x28\xb1\x08\x96\x9c\x18\x27\x76\x22\x3d\x01\x53\xd3\xee\xdb\xa5\xdb\xa7\x17\x7c\xa7\x43\x96\x56\x59\x2e\xe6\xdc\x37\xc1\xae\x5f\x69\xc0\xda\x7d\x63\xba\xe7\x19\x58\xa7\x6d\xd9\xec\xa7\x2e\xa4\xf9\x9a\x40\x40\xa2\x62\xde\xd7\x38\x21\x60\x54\x03\x06\x2a\x65\xba\x58\x02\x58\xe1\x03\x9f\x66\x44\x5f\x64\x25\xc2\x89\x22\x96\x58\x8b\xa1\xa4\xd8\xa4\x50\x94\xda\x6c\x5c\xed\x6e\x21\x25\xa8\x68\xc1\x33\xc7\xaa\x4c\xa8\x9c\x1d\x54\xe9\xb6\xec\xc2\x47\x0d\xb2\xd4\x5a\x32\xea\x0d\x66\xf1\x37\x59\x32\x7f\x5b\x4f\x19\xc1\x2e\x65\x25\x9c\x2d\x48\xb6\x4a\xc9\xbe\x86\x44\x55\xa6\x22\x15\x25\x56\xa2\xfb\x0e\x6d\x30\x02\x17\x04\x1c\xa3\x05\x72\x6c\x47\x92\x13\x04\x9e\x67\x3e\x41\xf4\x61\xfc\x6f\xfd\x4a\xca\x1d\x67\x0e\x7d\xbb\xec\xfe\xab\x2d\x96\xc6\x59\x1a\x25\x0d\xab\x34\x79\xed\xfe\x80\x87\x7b\x0a\xf5\xfa\xa1\x61\x8b\xcc\x6f\xbf\xa4\x2c\x66\xb4\xab\x9a\x38\x32\x4d\xd6\x50\x00\xcf\x26\x44\xe1\x4d\x1a\x84\x8a\x2f\x33\x8a\xe1\xb0\x06\x72\xa3\x40\xa6\x43\xdb\x31\x4d\xc5\x66\x64\x59\x10\x0d\x21\x75\x04\x8f\x4d\x5e\xe8\x3d\x3b\x1f\x79\xe5\x61\x58\xfc\x85\xe6\x07\xbf\xae\xe5\xe6\x5a\x69\xbe\xd9\x2f\xdb\x92\x35\x54\xcd\xc9\x5c\x29\x2a\xbd\x7c\xea\x02\x63\xc9\x82\x6c\xc2\x88\xc6\x22\x45\x63\xe2\xb8\xa1\x15\xa3\x08\x0a\x46\xc2\x42\xc2\xb2\xa2\x2f\x11\x82\x5c\x93\xf6\x94\x58\xa1\x85\x80\x15\x75\x3d\xb5\x93\x78\x1f\x65\xbf\xb1\xe8\xfa\xd2\x06\xd7\x47\xbc\xda\xa5\xda\xed\x9e\x5b\xcb\xd4\x7c\x63\x50\xdb\x4e\x0f\x0a\x97\xfd\xf8\x76\xfd\x41\xd5\xde\xca\x3c\xca\x3c\x35\xa0\x21\xb0\x7c\x05\x88\xb6\x2e\x62\x0d\x20\x81\xf5\x5d\x3d\xc0\x3a\x74\x4d\x0f\xa8\x48\x92\x31\xa7\xb9\x24\xa2\x2d\x41\x0b\xf9\x10\x60\xd5\x53\xa9\x7f\xaa\xd3\xa7\x39\xff\x77\x03\xfd\x3e\xf5\x7a\x55\x7a\xbc\x02\x57\x2c\x54\xae\xff\xb5\x73\xfe\xc9\x17\x98\xdd\xcb\xde\xfd\xe2\x18\x9a\x37\x7a\xe0\x09\x66\xe2\x7b\x95\x06\xdd\xde\xf7\xca\xc3\x69\x7c\xbd\xf4\xfe\x35\x9e\xe7\x70\x22\xaf\xd9\x3c\x03\x6d\x5e\x17\x42\x14\xf2\xae\x8e\x05\xe2\x02\x59\xb5\x0d\xd6\x0d\xd4\xd8\x0b\x50\xc0\x3b\x91\x4f\x7c\x46\x89\xf5\x27\xe9\xc2\x0e\xdf\xf6\xcd\x81\xbf\xfa\xfe\x8a\xde\x28\xff\xd7\xd6\x6b\x35\xb6\xd4\xa9\xff\xdb\x2d\x2f\xa4\xa7\xbf\x3a\x6d\x50\x95\x83\xd5\x17\xae\xcb\x7c\xfc\xa6\x7e\x79\xa7\xb1\xa4\xfb\x8a\xac\x46\x61\x28\x44\xbc\xe4\x99\x86\x2e\xa8\x01\x1d\xff\x1d\xba\xb4\x27\x40\x89\x82\xc4\xc0\x16\x71\x80\x0d\x50\xec\x19\x80\x4f\x6d\xf6\xce\xcf\x36\xc5\x07\xdf\xd2\x46\xab\xa7\xa6\xff\xd0\xf4\xd5\x45\xc7\x2a\xcd\x3b\xf5\x09\xcc\x39\xba\xc8\x67\xc5\x47\x7c\xdc\xbe\xda\x89\x52\x69\x26\x95\x20\x9a\x24\x00\x84\x89\x4d\xbb\x2e\x47\x33\x36\x8e\x80\xeb\x7a\x16\x10\x7c\x16\xf0\x8e\x1d\xdb\xba\xe0\x0a\xb4\x41\x42\x9d\x04\x11\x1b\x31\xd6\x13\xd0\x62\xa5\xcb\xbe\x3f\x28\x2a\x32\xb2\xda\x9a\x46\xbf\xb4\xe8\x7f\xea\xec\xe2\x63\xed\x73\x94\x31\xdb\x16\xdc\x3f\xa9\xf4\x98\x1c\xb5\x4f\xde\x4b\xf3\xa6\xac\x0c\x24\x9d\x85\xba\x4c\xf1\xaa\x87\x12\x57\x85\x92\xcf\xca\x96\x29\x61\xc4\xc9\x21\x06\xc0\x03\xb6\xab\xeb\x24\xb6\x55\xda\x27\xaa\xc5\xe8\xd2\x3f\x3b\xc9\xff\xbe\x96\xfd\xb7\xd1\x6d\x9f\xfa\xb9\xdf\x5e\xfb\x3f\x22\xe1\x48\xe3\x66\x9d\xa4\x43\x0f\x66\xad\xfd\xec\x83\xbf\xf2\x34\x6b\x54\xef\xe9\x5a\x1d\x17\xd7\xcf\xf6\xfd\xcc\xf2\xc3\x6b\x37\xa9\x23\xf7\x48\x73\x2f\x4a\xa0\xa5\x33\x01\x4f\x33\xb4\x82\x3c\x9a\x61\xb0\xa3\x1a\x02\x31\x54\x07\x6b\xa1\x82\x54\x0a\x8b\x16\xf6\x95\xc0\x95\x20\x2f\x10\x15\x32\xd2\x13\xd8\xde\x0a\x8f\x29\x1e\x8f\x1e\xd4\x58\xed\x33\x2d\x9e\x94\xe3\x6e\xfb\x9b\x59\xfb\xcf\x78\x6a\xef\xca\xec\x9f\x76\x3e\xbd\x82\x90\xed\x85\x57\xa7\xb7\x3b\xb2\x44\xc1\x10\x29\x28\x23\x5d\x63\x5d\x26\xc6\x82\x66\x20\x8b\xd0\x6c\x14\x99\x09\x54\x28\x4a\x67\x05\x47\xf1\x24\x45\xe0\x15\xc1\x8e\x29\x62\xfb\x4f\xc0\x4d\x16\x1f\x32\xf1\x2b\xbb\xe9\xa2\xcd\x6b\x27\x94\x58\x5f\x90\x4b\xc6\xbf\x36\x7f\xfb\xa0\x71\x9b\xde\xc1\x63\xd6\x56\x28\xfe\xfe\xe4\x38\xf3\xaf\xc8\x29\x03\x58\x91\x05\x23\x52\x58\x2c\x21\xc1\xd0\x02\xc8\x81\xc0\x96\x68\x9e\x62\xa0\x65\x61\x9d\xa7\xb1\x9b\xa0\xd8\x82\xba\x1f\xd2\x06\xcf\xb9\x0c\x52\xe8\x27\x94\x84\x4f\x0b\xb1\x67\x6f\x1e\x15\xce\x0f\x5a\x40\xe8\xb1\xa3\x4b\x86\xe3\x36\xe7\xaf\x6a\x1e\xcf\x7a\xf9\x8f\xd7\x7e\x9f\x71\xb7\xfa\xe5\x34\x2f\x60\x03\x82\x35\xd5\xe6\xa0\x4e\xe9\x2a\x82\x82\x4e\x28\xda\xa5\x75\x2f\xa2\x79\xce\xa4\xcd\xc8\x51\x70\xe4\xd1\x9c\xc1\x40\xc0\x1a\xc8\xf1\x6c\x1b\xfd\x33\xe5\xff\xa1\xd9\xbf\x2c\xfe\xe5\xad\xad\xaf\x5a\xfd\x8a\x57\x69\x99\xe7\xc4\xa0\x07\x6c\x99\x6f\x8f\x4f\xf9\x7d\x27\x9b\x77\x12\xea\x3d\x76\xe9\xf3\xd7\xa7\x77\xca\xd3\xa7\xc1\xa3\x47\x8f\x1e\x8c\x2b\xf5\xd8\x58\xb4\xe1\xc4\x1b\xfb\x57\xcd\x1c\x5f\xaa\xf4\x82\x92\xf5\x3a\x94\xac\x54\x68\x5d\xc1\x2e\x3b\x66\x3e\xfd\xd9\xac\x53\x4f\x65\x9d\xa2\x5e\xaf\x99\x79\xd9\xed\x94\xff\x0e\x92\x5c\x9a\x0f\x0c\x01\x13\x0c\x42\x53\xa2\x25\x56\x49\xfc\x08\xfc\xfd\xed\x12\x65\x73\x8e\xe4\x42\x0a\x72\x2c\x8b\x19\x1f\xeb\x08\x11\x82\x82\x8c\x63\xd1\x43\x0f\x7a\xcf\xba\xfb\xc9\x8a\x07\x75\xb7\xb2\x0d\xa6\x96\x19\x5e\xa5\xc7\xbb\x57\x0c\x74\x65\xcb\x5b\xd7\x47\x0e\x7c\x7a\xe7\xa6\xdb\xe9\x85\x3d\x03\x00\x78\x59\x90\x78\xa0\x4b\x09\x22\xb1\x89\x2d\x8b\x75\x14\xcf\xc3\x31\x8d\x1d\x91\x36\x42\x26\x90\xb1\xe9\x51\x22\x32\x69\xdd\x8a\x30\x65\x5a\x28\xf5\x2e\x56\x85\x4a\xc7\xf1\xa3\x13\xbf\x56\x6c\x7d\xef\xfc\xb4\x5f\x72\xc4\xe5\x0a\x8e\xda\xd6\xe7\x8d\x7a\xce\x85\xf3\x7d\x8e\x94\x9d\x3d\x7c\x45\x7a\xe1\x1e\x80\xd3\x43\x02\x43\xce\xf2\x02\xcf\x37\x2c\xce\xd6\x94\x04\xda\x92\x49\x10\xed\x61\xd9\xf6\x22\xd1\x8b\x91\x8a\x2d\xa0\xea\x9a\x0f\x35\xe8\x50\x18\x67\x3c\xe9\xce\x79\x9f\x39\x56\xe8\x9d\x17\x1d\xb8\xca\x7c\x74\xbe\xd1\xce\xba\x9d\xf2\x5e\xeb\x7a\xf1\xdb\xe5\xc7\x2f\xaf\x1a\xa4\x37\xaf\x5c\xec\xe3\xf4\x16\x31\x5b\x17\x80\x6d\x28\x91\x13\xc2\x50\x54\xf4\x48\x32\x55\xdd\xa2\x4d\x4d\x16\x6d\x23\x51\xf9\x28\xa2\x14\x31\xb6\x58\x41\x30\x5d\xdd\x75\xb1\x28\xeb\x52\x6a\xa2\xc6\x62\x2b\xe6\xd5\x78\x39\x68\xa8\xb7\x6f\x37\x61\xfa\xeb\x4f\x3f\xd4\xe0\x07\xb3\xaf\xdc\x6f\x5d\xf2\xad\xcd\xa3\x5f\xad\x75\x64\xe2\xeb\x4c\x9a\x3b\x1d\x17\x88\x2e\xb6\x79\x48\x11\x0f\x0b\x4e\x60\x27\x96\xe6\x42\x37\x08\x38\x53\xf2\x59\x96\x71\x7d\x4f\x90\x63\x29\xb1\x4d\x3f\x14\x4c\x8d\x15\x3c\x2f\xe3\x49\xf7\x98\xf8\xd6\x73\x1f\xfc\xdc\x02\x67\xf9\x68\xcf\xf3\xc3\x8f\xf0\xc3\xa6\xbe\x70\xe3\xcc\xfd\x5c\xf9\x4e\x36\xf9\xcc\x4f\xf2\x77\x59\x5a\x25\xcd\xb4\x1d\x8c\x29\xca\x3a\x65\x01\xdf\xc2\x5c\x24\xb0\x0a\x4b\xf1\x7c\x20\x43\x2c\x39\xae\x1e\x20\x35\x16\x29\x2d\x12\xc2\xc8\xf3\x35\x8d\xb0\x1e\xb2\xf1\x13\x7c\x7a\x7e\xed\x89\x5d\xbb\xac\x5e\x53\x78\x46\xce\x2f\xbb\x15\x2c\x75\xac\xc4\xc9\x4a\x46\x81\x0a\x1d\x17\x2d\x1d\xa9\x7d\xd2\xb3\xee\xe8\x59\x99\xbf\x13\xa6\x26\xbe\x93\x0d\xcf\x61\x5c\x5b\xb1\x15\xe8\xf8\x44\x95\x01\x51\x82\xc8\xa3\xcd\xc4\xe7\x24\x19\xa9\x1c\x88\x85\x50\x04\xd8\xe6\x35\xcb\x84\xa1\x08\xfe\x63\x8a\xfb\xcf\x94\x50\xc8\xfd\x8d\xe2\xbe\x78\xb0\x5e\xed\xa2\xaf\x4c\xea\x32\xff\x97\x86\xc5\xea\x95\x9d\xb1\x2b\xd7\xd6\xd1\x17\xdb\x5f\xb8\xbb\x7b\x58\xde\xf4\x56\x51\x36\x16\x55\x8c\x62\xd5\x8d\x59\x19\x58\x40\xf4\x65\x5f\x32\xe8\x88\x06\x24\x14\x2d\xd7\x35\x3d\x36\x4e\x34\x00\x45\xd3\xe3\x11\xb2\x43\xc7\x17\x9f\xc0\xa2\xb3\xb7\x6b\x1d\x59\xdc\xb9\xf7\xbb\x2e\xaf\x7e\x31\x74\xf5\x77\xcf\x9d\xda\x38\xe4\x44\xff\x73\x35\x43\x5c\xaa\xe6\x90\x8f\xc9\xcd\xb1\xe9\x5d\x40\x05\x20\x0e\x2c\x91\xe2\xc3\x44\x63\x69\x53\x76\xa3\x28\x92\xbd\xc0\x96\xbc\xc4\x42\x10\xb9\xa1\xa7\x28\x9a\xe4\x7b\xd8\x52\x58\x39\x89\x20\x27\x89\xff\x9a\x12\x66\xac\xa2\xab\x7a\xe5\xad\xea\xad\x5f\xb6\xeb\xe9\xa9\xb3\x5f\xff\xe1\x8f\x8e\x4b\x8f\xaf\xd1\xab\x95\x39\x5d\xfb\xf2\xb0\x2d\xf3\xe3\x73\xcf\x5e\x2a\x92\x5e\xbf\x8e\x45\xdd\xd2\x5c\xca\x0f\xf8\x58\x89\xe5\x48\x96\x81\xef\x44\x41\x28\x72\xb1\x08\xbd\x10\x8a\x88\x71\x5d\x3f\x10\x3d\x23\xd2\x7d\xac\xb9\x32\xed\x09\x4f\x58\x08\x28\x59\xf0\x4c\x8f\xe9\xc5\x99\x47\xed\x0f\x6f\xfb\x28\xe7\xea\x64\xe5\x33\x38\x6c\x53\x64\xc3\xd9\x3c\x25\xbb\xce\x3c\xda\x73\xe5\xcf\xd7\x1f\xfb\xc8\x0b\xcb\x5f\xeb\xe2\xd4\xba\xf1\xe6\xc8\x4d\xe3\xe6\x5f\xf7\x7f\x7e\x7e\x66\x81\xa7\xa6\xb5\x38\x7b\xa8\x6d\xde\x75\xd1\x8b\xb7\x87\xd5\x18\x94\xde\x28\x88\x5c\x8d\x65\xd9\x50\x0b\x91\x29\x39\xb1\xec\xcb\xac\x88\x7d\xcb\x35\x59\x12\x51\x94\xed\xd0\xb4\x43\x33\x61\x84\x3c\xdd\x11\x78\xdd\x54\x25\xc9\x7c\xc2\x26\xcf\x9e\x9f\x3a\xe5\x6f\x2c\xa0\x0f\x4e\x7f\xfa\x7b\xa7\x2b\xaf\xd5\x2b\xb8\x6d\xe7\x73\x25\xda\x1d\xbc\x76\xa5\xd2\xb6\xf3\x37\x3a\x7e\xf3\x5c\xe6\x75\x22\x52\x76\x38\x28\xa4\xb0\x89\x21\xed\x47\xd8\xb3\x14\x81\x84\x56\xc2\x70\xa1\xe0\x31\xbe\xab\xf0\x1a\x71\x44\x2e\x10\x64\x4a\x0c\x28\xda\x94\x6c\x92\xa8\x94\xf4\x84\x79\x79\xbf\xac\x77\x47\x4c\xbb\x5d\x15\x75\x1b\xb7\x6f\x15\x58\xd3\x7c\x64\xb5\x2a\x16\xd5\xb2\x52\xc3\x07\xef\xce\xce\x72\x73\x11\xf2\x33\x2f\xb3\x9e\xd2\xec\x48\x44\xc8\x04\xa1\x40\x87\x74\x60\x2a\x9a\x16\x5a\x56\x20\xc4\x40\xd1\x15\x8d\x82\xc4\x4f\xa0\x29\x48\x2e\x60\x38\x53\x07\x3e\xaf\xa8\x5e\x8c\x9c\xd4\x45\x69\x67\x9e\x2d\x57\xfe\x7c\x2f\xef\xea\xae\xe7\x3b\xbe\x7c\xf1\xfd\x3b\x4f\xd5\xef\xd2\xfb\xed\x51\xbf\x15\xfb\x38\xcb\xc1\x61\x03\x99\xe3\xc7\x92\xf4\x5e\x3a\xb0\x29\xd0\x92\x6d\xb9\x88\x72\x39\x06\x33\xb4\xcd\xb8\x44\x16\x5d\xc3\x53\x75\x07\xab\x26\x6f\xb1\x84\xd2\x98\xbf\x7b\xfc\xd0\x64\x5d\xe2\x05\xa9\x96\xea\xf6\x4d\x1a\xf5\x7b\xbe\xa1\x63\xd6\xf4\x3a\x7b\xaf\xfa\x9e\x2c\xa3\xcb\x5d\xac\x40\xe7\xba\x3b\xb5\xc4\x66\xb6\xd6\xd0\xa6\x4d\xbc\x55\x33\xd3\x3c\x45\x0e\xac\x98\x82\x8c\xcc\x71\xb2\xc4\x62\xd7\x02\x94\xa5\x19\x30\x11\x68\x4a\x89\x03\xe4\x9a\xba\x0d\xc3\x98\x22\x1c\x00\xb6\x21\x49\x11\xc3\x26\x24\xb5\x83\xbc\xf2\xd7\x87\x6c\x8e\x1e\x1d\x27\x17\xae\x70\xe7\x2b\xff\x11\x9a\xba\x68\x79\x93\xb9\x37\xfa\x0d\x18\x97\xaf\xe9\xa5\xae\xc3\xa9\xdf\x32\xbf\x0b\x98\x32\xc3\xc7\x21\xb4\x3d\xce\x10\x35\x02\x13\x89\x89\x12\x40\xd3\x94\x64\xc5\x86\x09\x0c\x93\x62\xa1\x64\x22\xde\x10\xb4\x48\x03\x12\x08\x24\x9b\x97\x20\x42\xa9\x57\xb1\xfb\xd7\xe8\xd5\x76\x41\xcd\x9b\x4d\x92\x37\x3a\x1e\xd9\x9a\x77\x57\xeb\x11\x9f\xf6\xed\xd5\xbc\xd1\x62\xa6\x61\xb5\x53\xfe\xbe\x81\x2f\xa5\x97\x16\x47\x00\x36\x0c\x81\x17\x68\xb2\xe9\xf9\x12\x24\x72\xa8\xf0\xd0\x97\x58\x9a\xb5\x58\xd7\x82\xb1\x6d\x1b\x0c\xf0\x80\xc4\xeb\x76\xe8\x88\x11\x13\x24\x9e\x9a\xd1\x41\x7e\x98\x95\xed\xda\xbb\x57\xbf\xbc\x91\x77\xe4\xaf\x85\x77\x9e\x1c\x30\xa6\xc8\xfc\x23\xad\xd7\x7f\xfd\xf1\xc2\xf6\x65\x66\x9c\xc8\x9d\xd4\xee\x92\xde\xa2\x04\x13\x31\x22\x9c\xe4\x22\x4e\xc1\x2a\xa0\x3c\x91\x88\xc8\x57\x58\x3d\x0e\x6d\x24\x8a\xc8\xc4\x0a\xeb\x47\x86\x20\xc7\xbe\x6b\x1a\x6a\xc8\x49\x20\x05\x90\x63\x2d\xa0\xcf\xad\x7a\x34\x94\x01\xdb\xac\x6b\x6e\xeb\x7a\xad\x5f\x5c\xc4\x77\x1f\xd3\x76\x54\xd5\x67\x7e\x5d\x3a\xea\x66\x9d\x2f\x56\xa4\x9b\x32\xdd\x89\x88\x03\x14\x96\x09\x01\xc5\x68\xb4\x26\x02\x3e\x60\x20\xb1\x90\xee\x9a\x96\xaf\x0a\x44\xa6\x09\x56\x6c\x40\xb9\xaa\x05\xa0\xe6\xf8\x54\xea\x3a\x5a\x2c\xee\x56\xa6\xe5\xdb\xd5\x1e\x1d\x3c\x3c\x7a\xd8\xf3\xaf\x5d\xd9\x49\x97\xbb\xd3\xe1\x85\x4e\xc7\xa6\x3d\xf7\xfd\x07\x07\x57\x77\x68\x9d\xe6\x27\x59\xd6\xf3\x14\x43\x94\x5c\x91\xd5\x2c\x35\x51\x29\x5f\xf2\x02\xd5\xa4\x70\xc0\x2a\x6a\x64\x04\x84\x25\x38\x51\x4c\x89\x91\x64\x91\x8a\x2c\x8b\x77\x88\x94\xda\xa7\x2b\xb6\x1f\x3c\xee\x9d\xca\xc9\xad\x47\x0d\x97\x75\x9a\x59\xb9\xf3\xab\x5f\x1d\xcc\x5e\xbd\x74\x96\x61\xb5\xcd\x17\xdf\xe4\xd6\x58\x27\x33\xcf\xe2\xf3\x84\x15\xc6\x24\xa0\x2c\xac\xcb\x2c\xb6\x7c\xd3\x8b\x13\x51\xf4\x29\x4b\x91\x59\x40\x5c\x90\xc4\x86\xc8\xe8\x90\xd6\x02\x5a\xb7\x49\x42\x07\xaa\xe4\x02\x92\xb1\x3f\xfc\xf0\xd8\xab\x1f\x1c\x78\x33\x7a\xa6\xf4\xcc\x51\xb8\x37\xbc\xfa\x6c\x8e\x31\x61\xa9\xc5\x1b\xf3\x0f\x1b\x39\xf9\xf3\xf9\xbf\xbc\x9b\x64\x1e\x06\x96\x7a\x51\x94\xf2\x15\x5f\x73\x12\xce\xb7\x31\x44\x9c\xcc\x58\xa6\x16\x9a\xba\xa1\xb8\xbc\xe3\x6a\x48\x91\x78\x80\x08\xcb\x29\x02\x47\xf9\x41\x08\x00\x22\x29\x90\x6b\x93\xb8\xd7\xb9\x5c\x9f\xde\x1e\x98\x67\x48\x99\x03\x43\xdb\x17\x5f\x9c\x57\x9f\xb6\xff\x77\x4e\x1f\x56\x76\xef\x34\xf3\x4a\xc5\xde\xe9\xe5\xfc\x03\x32\x71\x23\x28\x27\x1a\x8c\x62\xd5\xd2\x15\x5b\x8e\x4d\x9b\x8a\x55\x3a\x8c\x65\x4d\xa3\xf9\x98\xf2\x34\x8c\x5d\xe0\xf0\x91\xaa\x69\x5e\x60\x52\xb4\x94\xda\xa7\x87\xcd\x2a\x3d\x2f\xfc\x69\x5b\xde\xc3\x5b\xeb\xd5\x2b\xf9\x63\xb3\x62\x75\xb7\xdf\x18\x78\xf1\xb7\xe3\x9b\xd7\xcc\x98\xf9\x51\x91\xa0\x5d\x7a\x29\x1b\x04\x43\x67\x28\x20\x86\x88\x88\x4a\x60\x2b\x26\x4d\x59\x02\xe6\x60\xc8\x8b\x92\x66\x3b\xac\xe0\x19\x8a\xce\x87\x1c\xc5\x84\x3a\xa1\x63\xc6\x90\x75\xd1\x4f\x5d\x5e\xca\xfd\x9e\xef\x85\x1c\x07\x9f\x1f\x93\xaf\x53\xab\x3a\x93\xe9\x8a\x5b\x87\x3d\x75\x62\x42\x16\x3e\xc9\x25\x97\x1a\xb2\xf5\xce\xd3\x67\xd3\xac\xd6\x96\xc8\x09\x10\xc3\xc8\xa0\x01\x42\x40\xd4\xa0\x8e\x44\x8d\x36\x78\xcc\xc7\x90\xe0\xc0\x8c\xa2\x10\xf1\x08\x5a\x02\xcf\x30\xa1\x13\xaa\x0c\xad\xfb\x4f\x80\x9d\xae\xe7\x9e\xbe\xb7\xf3\xf0\x8c\x67\xd6\xe9\x45\x83\x8f\xae\x36\xaf\x74\x74\x5f\x8e\x56\xe5\x09\xde\x90\x83\xca\xb1\xb1\xf3\xda\x97\x37\x3d\xf6\x91\x75\x87\xae\x2b\x71\xfa\xf9\xa2\x2b\x5e\x96\xde\xfa\x68\x61\x9f\x57\x27\xdf\xeb\xcf\x5d\x38\x75\xb3\xe3\xfb\x1b\xef\xe5\xba\xbf\xe3\xd1\xe8\x34\x4b\xe9\x04\xb1\xe7\x9b\x41\x8c\x10\x14\xa0\xe4\xe9\xc8\xd0\x25\x51\x75\x5c\x99\x0f\x04\x4b\x53\x44\x12\x01\xa2\x79\xba\x08\x18\xc6\xe3\xe3\x10\xb2\x92\xa9\xa7\xce\x37\xaf\xfc\x16\x5c\xca\x97\x7d\x43\xe3\x77\x9b\x58\xfa\x24\x73\x4a\xa9\xc6\x97\x06\x7c\xf7\x52\xc1\x42\x5f\x2c\x1b\xec\x37\xcb\xa5\xfd\xf8\x59\x9a\xa1\x1f\x08\x09\xb6\x6d\xf3\x44\xa7\x64\x56\x17\xbc\x90\xd1\x75\x9e\x38\x72\xc0\x2a\x50\x31\x54\x48\x33\x0c\x60\xd9\x28\x01\x9a\xc2\x00\x46\x80\xae\x91\x42\x43\x8c\xe9\x3a\x72\xcf\x89\x42\x43\xd0\xad\x5e\x6f\xea\x3d\x72\x8c\x2d\x22\xe7\x1a\xda\xe7\xcb\x31\xeb\x3f\x5a\xbc\xc4\x1f\xd7\x50\xf0\xa9\x34\x83\x21\x81\x2e\x4a\xb4\x8f\x23\x01\x2b\xae\x22\x85\x0a\xa4\x3c\x43\x05\x1c\x25\xc7\x0a\x56\x6c\x4e\x94\x2c\x4a\x75\x54\x47\x97\xbd\x98\xf8\x1c\xa7\xfa\x5a\xc6\x1a\x8a\xd6\xd4\xaa\xd9\xa0\xaa\x73\x42\x6b\xa6\x2f\x9d\x59\x7b\x44\xdf\x5a\x23\x7b\x7f\x9d\x3c\x97\xa5\xe1\x4f\x8d\x0e\xd4\x29\x78\xa8\x64\xe6\x69\x1b\x52\x17\xa3\x80\x51\x38\x81\xc0\x80\x92\x69\x46\xb3\xb4\x58\x95\x79\x05\x9a\x94\xea\xb9\x98\xa6\xcc\x48\x25\x20\x54\x19\xc0\x7b\x40\xa2\x64\x55\x66\x4d\xfd\x09\x98\xe4\x02\x79\x3e\x5b\x5e\x3a\x6b\xc5\xd6\x0d\xb2\xbf\xf8\xf6\xb2\x91\x8b\x9b\xd7\x3f\xb4\x70\x6e\xf5\x77\xa6\x05\xcf\x55\xd8\xbb\x62\xdb\xe6\x0f\x87\xa5\x37\x4d\x7a\x51\x10\xb3\x76\x2c\xeb\xac\x18\xfa\x88\xa1\x65\x87\x98\x40\x15\xe8\xd8\xd1\x28\x4a\x48\xa0\xaa\x1b\x96\x11\xba\x02\x12\x14\x4e\x63\x21\x2d\x1b\x62\xc6\x93\xee\x3d\xad\x40\xf1\x53\x1d\xc3\x3f\xd4\x5c\x33\xfe\x28\xeb\x57\xde\xf5\xe1\x9d\x6c\xe5\xea\x59\xf7\x1a\x67\xbd\x77\x77\x7f\xfd\x1d\x93\x07\xa6\x19\x0c\x29\xd8\x3e\x94\x21\x40\x91\x20\xb1\x0e\xa7\xea\x38\x61\xd9\x40\x4e\x78\xd6\xb7\xd4\x50\x02\x92\x0a\x58\xd5\x62\x55\x3b\xd1\x7c\x5e\x09\x42\x15\x70\xa9\xc3\x90\x7e\x78\xa8\xe7\xea\x46\xdb\x0f\xdf\x69\x36\xf6\xd0\xd9\x3b\x4f\xf5\x9d\x3c\xa3\xe1\xc3\x97\x87\x0e\x1e\xfc\xfb\x9b\xd7\x4a\x9f\x5c\xdd\x30\x48\x33\x99\x00\x8b\xd9\x58\xc1\x6c\xa8\x28\x16\x8f\x39\x47\x0a\x65\x53\x48\x42\x2d\x10\xa8\x58\xb0\x4c\xc6\x93\x0c\x0e\x32\xba\xad\x70\x9a\x80\x6d\x9d\xa1\x92\x30\x63\x18\xb6\xa9\x3b\xfa\xa3\xba\x13\x56\xfe\xd2\x5f\xef\xf1\x43\xa4\x7c\xb9\x78\xf0\xb4\xd5\x5d\x3b\xbd\x59\xe6\xad\xae\x37\xce\x17\xee\x5c\xb9\xfa\xf2\x34\x6f\x61\x69\xb2\xa2\xb0\x8c\xa8\xab\x4e\x14\x73\xb2\x2e\x50\x1c\x2b\xf3\x61\xa0\x62\xc6\xa7\xa2\x88\xb8\xc0\x08\x45\x26\x52\x58\xcb\x88\x20\x51\x4d\x44\x49\x19\xcb\xfe\x71\x2e\xdf\xdd\xee\x66\xc5\x4b\xe3\xef\x8c\xfe\xad\x96\x5c\x97\xef\xd6\xbb\x85\x6c\x0d\x29\x9a\xb7\xf9\xca\xed\xdd\x2b\x25\xfb\xe6\xa4\x99\x64\x8d\x8f\x7d\x2a\x12\x48\xa8\x61\x45\x91\x44\xe0\xe0\x50\x66\x79\x0d\x38\x12\x27\x85\x5e\x18\x98\x16\x8a\x5d\x4e\x52\x99\xc0\x34\x5d\x4d\x0c\x19\x5f\x49\x3d\x33\x2c\x95\xc3\x1c\xd9\xb3\xfd\xe8\x96\x1f\xbf\xf5\xec\x53\xdb\x1b\x6e\xc9\x5a\x74\x45\xf7\x2a\xcd\xcb\x47\xdd\x57\xae\x7a\x67\x87\xf9\xc5\xb9\x34\x4b\xf9\x39\x31\x17\x5a\xae\xcb\x38\x30\xa0\x7d\x5f\x11\x91\xee\x06\x88\x12\x78\x18\xca\x80\x96\x90\x2a\x4b\x8a\x1d\x87\x88\xd7\x1c\x04\xc5\x48\x73\x80\xa8\x67\x74\x8e\x3f\x6f\x1f\x28\xf6\xed\x90\xbe\xc7\xbf\xf8\xe9\xfb\x1a\x43\x5a\x22\xea\xd1\x57\xc7\x9a\x9d\x5a\x75\x81\xda\xf7\xa0\xd8\xb5\xf2\xcd\x0b\x66\x5e\xc7\x3a\xf5\x45\xd8\x11\x09\xc5\xeb\x61\xa4\x3a\x44\x8a\xb1\x4a\xa0\x1a\x23\x83\x4b\x48\x18\x4b\x74\x48\xc7\xd0\x87\x14\xeb\x39\x0e\x36\xcd\x90\xf3\x80\xee\x0b\x7e\x6a\xcc\x53\xe5\x89\xf2\x9f\xf3\xa6\x7f\x4b\xf5\x5d\xbf\xbd\x54\xc9\x6f\x0f\x7d\xdc\xe1\xe9\xe6\x67\x9e\x5a\xd3\x9f\x31\xce\x37\x7e\xff\xf5\x32\xff\x3f\xb6\x1a\x52\x3a\x88\xc8\x5b\x21\xab\x5b\x9c\xef\xb8\x31\x09\xf5\xc4\x83\x7f\xdf\x1d\xb5\x20\xa6\xb1\x14\xd1\xac\xcc\x0a\x92\xa7\xd8\xd0\x65\x89\x95\x08\x6a\x6c\x28\x56\x8a\x39\x78\xad\x02\x79\x0b\xd4\xaa\x5a\xe3\x78\x7b\xb4\x6d\x47\x87\x13\x9d\xa7\x5f\xfe\xe1\x9d\x89\xb5\xa7\x7c\x2b\x5d\xab\xb4\x70\xf5\xf7\x77\xdf\xcf\xfc\x73\x54\xca\x84\x87\xa0\x49\x25\x4e\x0c\xdd\x90\x15\x35\x45\x77\x4c\x53\x51\x0c\xde\xf6\x31\xb1\x7d\x80\x39\x86\xe6\x58\xcd\x50\xa1\xe6\xf9\x08\x02\x29\xf6\x15\x83\xcb\x18\x86\xf3\x66\x9f\x2b\x7a\x69\xf5\x03\x7e\xec\xd5\x62\xfb\xdb\x1e\xc8\xbf\x33\xc7\xb4\x2f\xdf\x6c\xd3\xfc\x78\xee\xd7\x06\x6f\x3b\x1f\x1d\x5a\x58\x33\xbd\x3d\x87\x29\x58\xbe\x24\x43\x2e\x64\x90\x93\x98\x90\x76\x64\xcb\x51\x5d\xdf\xf7\x74\x2a\x4e\x4c\xc1\x76\x43\x23\x0c\x2c\x36\x04\xbe\x67\x2a\x86\xad\x26\x1e\x4c\xed\x1c\xd5\xbf\x1f\x3e\xaa\x46\x93\x03\xdb\xd7\x79\xc3\xcf\x7d\x72\xae\xce\xb1\x2a\xa5\xa6\x77\xf9\x8a\xd9\xf3\xf0\xd9\x6e\x95\x7e\x3c\x7d\x60\xf2\x98\xf4\x9a\xcd\x09\xba\xa6\xb0\x8c\x46\x5c\x64\x8b\x91\xac\x22\xa8\x29\x86\xa0\x52\xd0\x49\x28\xc6\xc6\x8a\x9d\x08\x24\x92\x84\x24\x08\x45\x53\x8d\x62\xc0\x9a\x56\xc6\x30\x9c\x35\xb5\x53\xd6\xb5\xf7\xfa\x4e\x1a\x54\xed\xe0\x82\x1d\xbd\x06\xce\xbb\xda\x82\xfd\x9a\x7d\x7d\xfe\xb9\x16\x75\x92\x2d\xf7\xce\x8d\xcb\xfc\x73\x54\xca\x1c\xad\xf0\xb2\xae\x60\x91\xd3\x5d\x26\x30\x2d\x93\x8d\x54\x5e\x61\x19\x04\x54\x89\x62\x68\x05\x68\x66\xa0\x1b\x9e\x6b\x3a\x2e\x11\x18\x24\xf0\x16\x30\x52\xe8\x3b\x1e\xae\xff\xda\x99\xda\x0d\x5a\x1d\x6b\xbb\xe7\xf3\xa5\x7b\x5a\xf4\x1d\xc7\xde\xdc\xb9\xfe\x85\x3d\x70\xc9\x14\x78\x74\x1c\x5a\xdf\x7b\x42\x9a\x39\x6a\x08\xcb\x85\x50\xe2\x03\x41\x55\x12\xc5\x06\x82\x23\x70\x0e\x54\x75\x2a\xe4\x3c\xa4\x1b\xc4\x57\x23\xde\x34\x05\xa0\x8a\x92\xa3\xb3\x9c\x8e\x09\x78\x42\x01\xef\xb8\xa3\xa4\xf2\x5c\x37\xfe\x68\x9e\xf1\x07\x97\x9c\x3c\xb5\xaf\x7d\xa7\x3a\x55\xae\x2c\x3f\xf1\xfe\xf7\xdb\xae\x3e\x3a\x32\xa1\xda\x27\x69\xc6\x8b\xd1\x0a\xf6\x18\x39\x0c\x48\xa2\x28\x8c\xe8\x7b\x02\x9f\xd8\x21\x30\x23\xc0\x88\xbc\xe1\x29\x32\x71\x5c\x2d\x20\x3a\x43\x89\x9a\x6a\xc1\x18\x21\x3d\x63\xe6\xe8\x97\xaf\xd9\xbd\xfa\xc1\xea\xcb\xb5\xea\xbc\x31\xfe\x76\x5e\xaf\xc9\xb7\xb7\xba\xac\x6a\xb1\x75\x63\xa5\xa6\x63\xe7\xbe\x52\xa9\xe8\x67\x2f\xa5\x79\xcd\x00\x1a\x94\x6a\x1b\x9a\x06\x90\x21\x05\xac\x19\x2b\xc4\xc2\xa2\x17\x71\x32\xa2\x1c\x13\xcb\x9e\x15\x19\x12\xc3\x05\x94\x07\x0c\x3d\xf2\x18\x22\xd2\x19\x4d\xde\x7c\x64\x4e\xe3\x97\x36\xe5\xbc\xf0\xfb\x80\xfa\xf3\x1a\x67\x7d\x7b\xfd\xd1\x73\x43\xe6\xdc\x72\x87\x16\x9a\x39\x6c\xd4\xbc\x32\x93\x9a\x64\x1e\x71\x92\xb2\xac\x18\x3a\xd6\x44\xdb\x41\x81\x45\xc9\x50\x51\xd0\xdf\xee\xe2\x47\x2e\x6b\x13\x1d\x7a\x61\x20\x49\xb6\xec\x78\xc0\x0c\x63\x4a\x95\x4d\xa2\xc7\xca\xe3\x7a\x39\xff\x14\xf0\x3c\x6b\x5b\x4d\xcb\xfe\xe1\xf9\xdd\x65\xc6\xde\xae\xfc\x65\xee\xeb\xdf\xd6\xc4\xd7\xee\x6c\x3c\x34\x6c\xcf\xd8\x5c\xbf\xe7\x6b\x57\xf9\xc1\xc2\xf4\x66\x0e\xd9\x0e\xb1\x60\x00\x45\x51\x43\x4e\x0b\x2d\x0d\xa9\x5e\x10\x0a\x94\x86\x2c\x01\x84\x26\xcb\xa9\x3c\x46\x8c\x46\x48\x02\x92\x30\xa0\x03\x5b\xf6\x52\x5c\xb2\x3a\x1f\x1f\xb4\x2e\xba\xf8\x62\x9e\x1f\xfb\x96\xce\x36\x7b\xd6\x91\x92\x83\x2b\x0e\xe2\xcf\xf7\xfc\x2b\xc7\xf0\xcd\x55\xb6\x67\x79\xa3\xcd\xcf\xe9\x35\x99\xd7\xa0\xa8\x61\x4b\x89\x62\xcf\x13\x5c\x05\x81\x18\xb0\x8e\x42\x88\xaa\xc4\x98\x62\xa9\x90\x82\xb1\x9b\xd0\x9e\x9c\x04\xb1\x68\x8b\x98\xf1\x3d\x90\x7a\xd4\xb0\x7d\x4c\x2f\xe3\x95\x3d\xe7\x8b\xe0\x61\x27\xa6\x8f\x39\x33\xaf\x6f\xd5\x3f\xdf\xbe\x7b\x6f\xd5\x6b\xfd\xfd\x4a\x43\xc6\xe5\x60\x93\xa5\xe9\x35\xdb\x77\x58\x17\x86\x86\xed\xd9\x8e\x80\x2d\xd1\x09\x43\x1e\xab\xaa\x6a\x4b\x01\x25\x41\xc0\xda\x46\x80\x44\x0a\x3b\xb4\x83\x09\x4d\x79\xaa\x80\x7d\x31\x75\x69\xe9\xfe\x71\xbd\xa4\xc1\x10\xd1\xde\x37\xae\xcf\x76\x6f\xf9\x0b\x47\x6b\xd6\x3b\xf7\x68\xcd\xfd\x3e\x27\xd0\x3b\x66\x89\xef\xb3\x94\xda\x91\x5e\xbf\x96\x1c\x99\x0d\x28\xcb\x63\x15\xdf\x53\x5d\x09\x0a\x09\xe2\x89\xac\x88\xa2\xeb\x4b\xae\x1e\x30\x11\xc6\x91\x0a\x42\x10\xf8\x92\x82\x22\x27\xf6\x48\x0a\x86\xc8\x15\x97\x66\x5f\x1f\x5a\xf3\xf0\x2a\xf0\xe7\xaf\xf5\x96\x51\xf2\x8e\x9f\x5e\x2e\x73\x3b\xd7\xd5\x7c\xa7\xc6\xfe\x78\xf7\xf8\xfe\xb9\xa5\xd2\xbb\xe7\x2f\x70\x5c\x04\x02\x68\x39\x30\x00\x94\x65\x0a\x80\x02\x86\x20\xb2\x21\x96\x04\x5e\x86\x86\xc2\xf9\x01\xa4\x62\xa2\x2a\xc8\xa2\x23\x0a\x5a\x9c\x6c\xa4\x20\xca\xd9\x59\x9e\x9f\x55\x7b\xe3\xad\x1f\x2f\xf6\x62\xdb\x4c\xfe\x29\xe7\x17\x5f\x14\xad\x37\xd4\xa8\x55\xa8\x47\xe5\x67\xbf\xd9\x1e\x9d\x9a\x51\x35\xbd\xa7\x1c\xc4\xac\x11\x3a\xb2\x66\x29\x21\xe0\xa1\x28\x88\x26\xcb\x30\x8c\x10\x28\xb2\x13\x48\x11\xa0\x0c\x1a\x08\xbc\x17\x6b\xba\x0c\xed\x28\x51\x3d\x91\x46\xa9\xb3\x47\xbd\x92\xd9\xb6\x36\xb5\x0b\x0d\x1c\xf0\xce\x95\x09\xf7\xea\x7e\x74\x72\xc1\x44\xf1\x02\x2c\xbf\xb6\xc0\xbd\x9e\x13\x5e\x5b\x5c\xb6\x76\x9a\x15\x8f\x45\x86\x8f\x1c\xca\xb6\x05\x1a\xf9\x9c\xa6\xd0\x1e\xcd\x2b\xaa\x89\x79\xd6\xa2\x54\xd6\x60\x23\x80\x0d\x59\xc6\xc8\xe1\x4d\x5e\x4d\x58\xdb\xd1\xa4\x14\x7d\xc7\x87\xb9\x16\x27\x7a\xad\xe2\xcf\x7f\xfb\x75\x83\x32\xc7\x7b\x2f\x9e\xb3\xa9\xef\xe6\x8b\x87\x16\x5d\x9e\x7c\xba\xcf\xe5\x2f\xdf\xdb\xfb\x6a\xe6\xc3\x30\x35\x6f\x38\x93\x38\x14\xa7\x89\xba\xa6\x8a\xac\x6d\x07\x16\x4f\x4c\xd6\x36\x6d\x57\x8d\x25\x0a\xa9\x01\x23\xc1\x40\x72\x18\x1c\x88\x81\x2c\x52\x8c\x63\x26\xf8\x09\x8f\xd8\x59\xb3\x9b\x5e\xf3\xfa\x42\xe5\xe6\x1d\x76\x97\xda\xfc\xed\xa0\x26\xfd\xa7\x29\xbf\x9d\x59\xb2\xe0\xcb\xef\xf2\x5c\xad\xf4\x74\xf5\x55\xa5\xfe\x0d\x62\xf8\x6f\x8f\xdd\x7d\x1a\x14\x9c\x51\x30\xdb\xe3\x20\x86\x77\xfc\xd9\xcc\xc3\x12\x1b\xa7\x4e\xd8\xb9\x33\x19\xdf\x7d\xc5\x6a\xb7\xc7\xf3\x1f\xd5\xff\xf0\xc6\xae\x5d\xf9\x5f\xd8\xfa\x6a\x72\x21\xcd\xdc\x30\x2a\x63\xcb\x28\x50\x19\x47\x16\x8d\xd8\x63\xfd\x80\x0a\xad\xc0\x89\x1c\x5e\x92\x03\x0e\xba\xba\xfd\x77\xf8\x47\x82\x9c\x88\xac\x6c\x7b\x06\x32\xc4\x27\xec\xa7\x37\x5d\x40\xcf\x79\xbe\x51\x9b\xd1\xb5\xaf\xb7\x9f\x39\x1a\x37\x6a\xf4\x5d\x7b\x52\xe3\xd6\xcd\x46\x9f\xe5\xfa\xe5\xfc\xf1\xe6\x8d\x0f\x96\x4e\xf7\xfd\x02\x07\x32\xaf\x09\xc8\x80\xc4\x52\xf5\x00\x25\x24\x32\x71\x48\x85\x12\x65\xc9\x52\x28\x0b\xa2\xc7\x84\x01\x4b\x10\xab\xba\xaa\x07\x20\x41\x4f\x10\x23\xda\xcc\x7c\x32\x6d\xeb\xb2\xc5\x3b\x66\x55\x7f\xf0\xfd\x7d\x7f\xec\xa0\x67\xb3\xe4\xa8\xf7\xb0\x57\xf3\x91\x05\xca\xfb\x23\xaf\xbe\xd0\x28\xf3\x8c\x69\xa9\x2f\xa0\x8c\x8b\x6c\x55\x8a\x3d\xd1\xa0\x00\xd0\x4d\x10\x78\x56\xa4\x84\x89\xec\xb1\xba\x29\xda\x2e\x8e\xa2\x04\xf0\x32\x36\x10\xcf\xd9\x8c\x9f\x00\x0a\xa7\x3e\xed\x35\x2d\xcc\xf7\x86\xfc\x35\x69\x68\xa1\xa3\xcf\x08\xef\x17\xbc\xfd\x74\xc3\x8b\x95\xef\x74\x64\x6a\xb6\x18\x56\x3c\xb9\x70\xe4\x60\x96\xf4\x0a\x02\x02\x8b\xc6\x52\x48\x44\xc3\xc1\x89\x0e\x70\xc2\x7a\x1a\xe0\x44\x97\x61\x5c\xd3\xe7\x14\x4e\x66\x88\x0a\x58\xa4\xd8\x0c\x60\x6d\x95\x82\x1a\xe3\x88\x6c\x6a\xb3\x4f\x6c\xfc\x6a\xe5\xb1\x9c\xdd\x09\x9e\x94\xcf\xf8\xa1\xe3\x5b\x57\xba\x5d\x1e\x5a\xa8\xfc\xc7\xf7\xb3\xf1\xb9\xff\xac\x58\x54\x19\x9b\x79\xd8\x66\xea\xa7\x7a\x95\x55\x50\x2c\xc4\x3c\x44\x1e\x47\x68\xca\x67\x74\x4e\x24\xa2\xe8\xa2\xc0\x8b\x59\xa8\x79\x82\xcd\xc6\x8c\x21\x69\x96\xe0\x03\xa2\x0a\x09\xd1\x53\x3b\xc9\xe1\x37\x6b\xcd\xab\xd2\xfe\xec\x2b\xf9\xbe\xfd\x7c\xdc\x8e\x11\xfa\xb9\x75\x6f\x81\x76\xe3\xfd\x56\x0b\x56\x17\x7e\x6d\x49\xbe\xe5\x5f\x2e\x49\xf3\xcb\x95\x13\x6a\x91\xed\x5a\x9e\x21\x47\x9c\xcc\x60\x97\x67\xbc\x48\x0c\x91\x22\x08\x84\x45\x61\xa8\x05\x5e\x28\x9a\x21\xcd\x03\x9a\xf2\x5c\xd5\x76\xe9\x7f\x98\xd3\xfe\x2d\xe7\xf9\xdf\x9e\x24\xfa\x34\xc8\xdd\xfb\x5f\x72\x9e\xff\x7c\xe5\xef\x45\x97\xdd\x1e\x75\xf8\xb9\xd9\x85\x2e\x2e\x3e\xd8\x82\x9b\xb4\xa3\x79\xb3\x87\x39\x4e\x4c\x2d\x5a\x4d\x3e\xf0\x09\x6e\xd1\xaf\x65\x9a\x89\x5c\x6c\x96\xd1\x80\x63\x38\x86\xcb\x5a\xa6\x29\xe8\x88\xf0\x2c\xab\x81\x84\x73\x55\xc7\xd2\x59\xd5\xf7\x1d\x06\x44\xb1\x6a\x60\x93\xd7\x28\x59\xb1\x08\x93\xfa\xcf\x79\x61\xc0\x4f\xd7\x6b\x34\xf8\xa5\xf4\x37\xc5\xfb\x0c\xef\x3a\x69\xd7\x53\xe5\x7e\x3d\x5f\x64\x6f\x81\xe7\xc6\xd7\xc0\x73\x56\xd7\xaa\x53\x39\xf3\x6c\x3f\xa9\x99\xf8\x14\x8f\xc3\x1a\xe5\x43\xcb\x80\x92\xa4\xeb\x50\x97\x55\x84\x59\x91\xa2\xa0\x64\x44\x01\xe4\x58\x4a\x52\x3d\xd9\xe6\x58\x62\xd0\x09\x47\x8b\x02\x9b\x7a\x66\xee\xbd\x79\xf6\x50\xd7\x66\x1b\xfb\x95\xbd\xd4\x31\x77\xde\xfc\xcd\xf2\x4d\x87\x3d\xfb\xf5\x6c\x70\x7e\xea\x07\x65\x4a\xad\x1d\x51\xa2\x4a\x7a\xb5\xdc\x05\x35\xa6\x14\x55\x60\xfd\x44\x0e\x60\x12\x5a\x32\xe7\x10\x1f\xb8\x14\xad\xab\xae\xe8\x02\x96\x42\x2e\x25\xc3\x30\xb0\x63\x25\x34\x69\x9f\x49\x6c\x90\x82\xeb\xe4\xce\xa3\x55\xd9\x1a\xdc\x3a\x7b\xa9\xd8\xe7\xfd\x0b\x7b\x95\x0b\x7d\x74\x81\xe3\x5f\x2f\xb3\xe1\x7e\xc7\x37\xc6\xd5\xeb\xbe\xe8\xd5\xf3\xfb\xd2\x4c\x67\xa1\xb0\xae\x13\x53\x14\xcf\x07\x02\xf2\x2c\x9d\xd3\x5c\x1d\x47\x86\x17\x12\x88\x24\x2b\x76\x21\xe6\x29\xcb\x35\x2d\xac\x71\x58\xa2\x28\x0f\x4b\x7e\x06\x08\xc3\x7f\xab\xd3\x7d\xea\x17\xce\x52\xe6\x71\x08\xc3\xe0\x3e\x5d\x56\x6c\xea\xb5\xb3\xe5\xb8\x75\xb5\x47\xac\x79\xe3\x50\xff\xcd\x73\x1b\x0c\x3a\x58\xe0\xc5\x92\x3f\x1e\x9a\x5f\x64\xc3\xaa\x36\xad\xd3\xfb\xbf\x08\x88\xc5\xaa\xcf\xa9\x4c\x9c\x60\x60\x71\x72\x84\x28\x9c\x48\x91\x41\x34\x3a\xe0\x74\x33\x16\x23\x06\x98\x9c\x0f\x29\x35\x16\x5c\x0a\x53\x76\x92\xa4\xce\xac\x8d\xba\x9d\xbd\x8d\xc9\x8c\x06\xe5\x6f\x99\xed\x66\xf7\xde\x57\x21\xf7\x8f\xc5\x72\xd6\x7b\x37\xfb\xe4\xae\xdf\x0f\xed\xbc\xbd\xd6\xa8\x32\x69\x06\xf3\x58\xac\xc2\xf1\x8c\xe8\xb9\x9e\x64\xcb\x56\x28\xfa\xaa\x4f\x43\x83\x67\x0d\x0e\xe1\x40\x0d\x45\x47\x15\x15\x51\xe2\xc3\xc0\xb5\x6c\xe4\x29\xe1\xbf\xf6\x01\x32\xbe\x54\x07\xd5\x16\x0c\xbd\xb8\xb5\x74\x9d\x8a\x8b\x2b\xe5\xf9\xfa\xea\xf2\xde\x7d\xf6\xbc\xd9\xfa\xb7\x47\x67\xe6\xcc\xcf\x3d\xf0\xc1\x27\x97\x96\x66\x7e\x69\xe4\x09\x8a\x55\x82\xe1\xb2\xc8\x15\xe8\x80\xf1\x89\x4b\xf9\x11\xe7\x32\x31\x21\x51\xe8\xeb\x14\x64\x63\x47\x55\x81\xc4\x71\x2c\x11\x1d\x9f\xa3\x3d\x2a\x34\xe2\xd4\x39\xe7\xe7\x1f\x6f\x7c\x88\xef\xff\x38\x6c\x44\xf1\x9e\x6e\x8e\x93\x75\x87\xcd\xbf\x91\xb5\xf8\xfb\x9d\x67\xdf\xde\xd9\xbe\xf0\xe8\xa2\xbf\x5c\xc8\x96\x5e\xb3\x19\xfe\xef\x1b\xa1\xe0\xcb\x8a\x44\x42\x41\xd2\x9d\xc0\x64\x19\x0c\x75\xc6\x66\x0c\xc0\x09\x32\x54\x12\x24\x43\x35\x72\xc3\xbf\x3b\x0c\x26\xb4\x24\xf1\xff\x99\xbd\xa3\xc9\xff\x4d\xee\xa3\xea\x56\xdb\x55\x28\xac\x54\xe9\xcf\xea\x1d\x7f\xdd\x32\x7b\x74\x9b\xe2\x3d\x4b\x3c\xba\xdd\xc1\x6a\x62\x6c\x1a\x97\xc7\x7e\xc6\xe9\xd3\xa0\xe7\xa3\x47\x8f\xfe\x07\x84\xa1\xf4\xfb\x59\x2f\x97\x7b\x29\xc7\xe2\x33\x03\xf3\x7d\xbc\xfe\x93\xd7\xcb\xaf\xba\x09\x02\x6b\x78\xe7\x9d\x5f\xaf\xe5\xd6\x8c\xad\xf7\x6c\xa7\x34\xd3\x14\x5a\x48\x63\x20\x62\x78\x06\xdb\xb4\x60\x04\x10\xf2\x89\xe1\x7b\x6a\x24\x85\x98\x98\x22\x56\x58\xc7\xa5\x78\x0c\x24\x8b\x00\x83\xd1\x1c\x15\xa7\xb8\x6e\x2e\x69\x18\x6d\xab\x34\x6d\x45\xcf\x93\x79\xbf\xac\xfb\x54\x8d\x15\xf5\xda\xae\x9b\x2e\x96\x88\xbb\x6d\x97\x87\xbe\x35\x66\x56\xcf\x59\x0b\xd2\xfb\xcf\x58\x41\x4c\xc9\x86\x6a\x50\x09\xa3\x39\x4e\x04\x18\xce\x88\x81\x6e\x89\x1e\xe0\x64\xda\x60\x05\xce\xa5\xb0\x2f\x62\x25\x31\x25\x5a\x88\x91\xe0\xd3\x28\x75\x35\x18\xba\x70\x50\xd9\xd9\xee\x33\xa7\xba\x15\x2a\xd4\x7d\x5d\xd1\x57\xb7\x8b\x6d\x5e\x9b\x9f\xfb\xc3\x3a\x27\x3f\xcb\xff\x5c\x99\xca\x5a\xde\xcc\xdf\x92\x53\x53\xd6\x05\x8e\x2c\xe3\x40\xb4\x25\x56\x14\x39\x9b\x73\x9d\x18\x41\x22\x49\xb2\x16\x99\x9c\xc4\x2a\x2a\x62\x14\x8d\x96\x59\x23\xf4\x45\x64\x58\xbc\x80\xf8\x8c\x27\xfd\xd9\xa8\xb1\x8d\x7f\x39\x7a\xb0\xf0\xf4\xe9\xa5\xda\x9d\xf9\xb2\x76\xb6\x02\x7b\x07\xfc\x3c\xed\x48\xe7\x0a\xe7\x56\x75\x71\xfa\xce\x72\x17\xa5\xb7\x1a\xc4\x16\x85\xe9\x30\x44\xbe\x60\x7a\xae\x81\x30\x50\x19\x4a\xd1\x35\x25\x90\x13\xc6\x82\xa2\x04\x29\x64\xe9\x94\xc4\x32\x1e\x1f\xc6\x0a\x15\x59\xff\x82\xff\x66\x7c\x24\x83\x5f\x8f\xde\xf1\xe1\xf5\xdb\xdb\x73\xd6\xba\xb0\xfb\xf5\x8f\xea\x66\x1f\xd1\xae\x61\xed\x6f\x36\xfd\x3e\xa2\x66\xb3\x29\x2a\x5b\x7d\x58\xe6\xe7\xc6\xa9\xe1\xbf\x8e\x12\x29\x82\x22\xb8\x31\x34\x23\xc3\x53\xdc\x00\x00\x49\xe6\x83\xc8\xa6\x30\xc0\x81\x62\xcb\xba\x18\x40\x85\x62\x6c\x53\x14\x59\xc5\x66\x48\x0a\x39\x93\xab\xb9\xdb\x97\x6a\xb7\xbe\xe2\xde\xd1\x63\x6e\x89\x9f\x0c\x6d\x7e\x71\xdd\x95\xb2\xbb\x8a\xee\x5c\x3e\xe0\x9d\x95\xf7\xbf\x5c\x76\xb0\xd6\xfd\x34\xa3\xea\x28\x86\x52\xa0\xe8\xa9\x1a\xe1\x64\x41\x01\xaa\x17\xf1\x96\xc6\x70\xc0\xf4\x34\x96\x55\x30\x14\x14\x81\xb3\x82\x04\xb0\xac\xcf\x19\x3a\xa3\x0b\x41\xea\x51\x77\xc1\xac\x5f\x0d\xef\x5d\x63\xf9\x88\x9d\xfd\x9c\xd1\x23\xcf\xcc\x6c\xb4\x47\xfe\xe3\xe2\xaf\xd5\x3b\x0e\x3e\x3b\x3f\xcf\x17\xfb\x57\xc7\xb9\xd2\xbc\x76\xe9\xc7\x3e\x16\xf4\x10\x45\x80\x57\x10\x1d\xb1\x81\x6a\x58\x5a\x1c\x62\x5b\x8c\x10\x1b\x69\x88\xd1\x65\xd9\x4e\x42\xc0\x93\x84\x11\xa1\x21\x02\x98\x71\xf2\x43\x1d\xbd\x3b\x67\x48\x8d\x2f\xae\x4e\x94\x94\x89\xa3\x2a\xe7\xae\x54\x64\xde\xce\x3c\xc5\x0a\x2e\x38\x71\xf4\xfd\x9a\xef\x34\x1b\xdb\x2b\xcd\xf2\xf0\x3e\x4e\x44\x3b\xf2\x62\xcf\x92\x3c\xa2\x43\x4a\x51\x18\x96\xf8\xd8\x09\x30\x09\x70\xc2\xf2\x40\x32\x64\x18\x42\xd7\xa4\x7c\xd6\x37\x21\xc6\xbe\x9f\x71\xd4\xdd\x30\xff\xfb\x1d\x47\x70\x15\xea\x96\x1c\xff\x5d\xdf\xb0\xd1\xbd\xd2\x05\x7a\xf6\x69\x2a\x95\x7d\xb8\xa3\xfc\xee\xea\xf3\x8e\x1e\xda\x6f\xa6\x79\x53\xd4\xe7\x25\x60\xc6\xa6\x14\xd0\x01\xf1\x0c\x0c\x80\x16\x50\x91\x6a\x50\x91\x43\x58\x9f\x92\x80\x2f\xd2\x58\x64\x01\x1b\xb8\x0e\x43\x88\xe1\x63\xf0\x84\x11\xca\xb6\xe2\xcf\xdf\xdc\xfc\x61\xef\x37\xcf\x7f\xde\xb1\xc6\xc2\xb9\xc5\xc7\x7c\x3e\xe7\xd6\xc0\xdc\x0f\x6e\x8e\xfd\xf9\xae\x35\x33\xef\xdb\xd7\x07\x3e\xfe\xeb\x82\x2d\xa6\x26\x7f\xdc\xbd\x95\xa7\x53\xe5\x9f\xb6\xaf\x9f\x62\x4d\xde\x5d\xb3\x44\xe1\xbe\xd3\x27\x76\x8e\xe7\xf6\x7a\xb9\xe6\xfd\x0b\x1f\x3c\x56\x9d\x8b\x0e\xec\x34\x67\xca\xec\x49\xea\xe8\x4f\xd7\xff\xbe\xb3\x4a\xc3\x19\x37\xfa\x8c\xbc\x78\xb7\xc1\x98\x1b\x9d\x60\x8d\x19\x8d\xb4\x1a\xe9\x85\x73\x02\x3e\xd6\x45\x31\x30\xf8\x84\x70\x2c\x32\x7d\x53\xa4\x44\xd5\x15\x45\x09\xdb\x20\xd0\x04\x1e\x33\x8e\xee\x46\x08\xb2\x40\xa5\x9d\xd8\x0f\x4d\x51\xf4\x53\xd7\x80\xc2\x3d\x72\x95\xcd\x5b\xb7\x7b\x5b\x78\xaa\x79\xb5\xa5\x17\x5e\x91\xfe\x2a\xb4\xab\xbf\x53\x72\xd4\x1f\x03\x9b\xb4\x9b\x27\xc8\x63\x2a\xa6\x37\x5e\x64\x9f\x76\x23\x97\x70\x8c\xe8\x6b\x80\xd2\x90\x45\x07\x8c\x26\x46\x2c\xe1\x04\x2c\x61\x9e\xb1\xa8\x90\x92\x22\xdb\x82\x5a\x12\x85\x89\x1a\xc2\xff\x30\xfb\x9f\x65\xb6\x5d\xcd\x45\xa9\xc9\x61\x3b\x27\xbd\xf1\x9b\xb9\x2f\x6c\x79\x73\xb9\x35\xa3\x73\x93\xe3\x5c\x56\xd8\xf9\xe1\x9a\x99\x6e\x8e\xcc\x37\xcb\x29\x4d\x76\xd4\x04\x8b\x0a\x66\x63\x4b\x53\x0c\x59\xa5\x03\xd6\xe1\x79\x62\xf9\x81\xc1\x21\x29\x96\xa2\x30\x4e\x42\xe0\x6a\x7e\x48\xa9\x98\x62\x69\x0a\x3f\xe9\x3e\x5f\xb5\xeb\xbc\xb2\xa5\xd7\xde\xdd\xeb\xe6\x5d\xf9\x11\xce\xd5\xbf\xee\xbd\x99\xf2\xb4\x1f\xc1\x1b\x7f\x56\xbe\x31\x68\x54\xbf\xf7\xff\x78\x2a\xcd\xcb\x6c\x1e\xad\x01\x37\xb2\x7c\x1b\x06\xac\x02\x80\x21\xd9\x92\xc9\x5a\x80\x53\x29\x2a\x88\x1d\x8d\x93\x45\x23\x52\x7c\x49\xc7\x3a\x54\x04\x0f\x0b\x06\x9f\x7a\xc0\x1b\x0f\xf8\xe2\x39\xa5\xe5\xd5\xdd\x4d\x0e\xf4\x2b\x90\xb7\x87\x3a\x9d\xad\x9c\x75\x8d\x30\xbe\x81\xa1\xd8\xa8\xe0\x1f\x85\xd6\xa5\x97\x9f\x1b\xe8\x08\x50\x09\x04\x2c\xab\xb2\xb4\xc9\x02\x97\xa3\x29\xcb\x45\xac\xc8\xf1\x96\x84\x31\x32\x08\x44\x16\xeb\x32\x96\xa1\x99\x06\x8e\x64\x5b\x35\x52\x88\x2d\x8d\x5f\x7d\xca\x28\x54\x60\xf5\xb1\x1d\xd7\xd6\xf0\xc3\x3e\xc2\x85\xd5\xf1\x85\x87\x4f\xea\x32\xfe\xb5\x2d\x47\xe1\xb0\xea\x6f\x8e\x48\xb3\xa0\x4f\xa4\x18\x34\x1b\xb1\x9c\x90\x28\x9e\x67\x88\x21\x76\x62\x15\x51\xb6\x6c\x07\x82\x85\x44\x97\x30\x44\x87\x1e\x48\x68\x5f\x72\x28\x47\xe2\x58\x15\xe3\xd4\xf4\x98\xc5\x3e\x1f\x25\x7e\xdb\x7a\x6b\xf7\xc3\xbf\x2f\x8f\xb5\x9d\xa5\xcb\x2e\x5c\x30\xe1\xee\x60\x4e\x06\x77\x3f\x5a\x38\xaf\xca\xed\xe7\xaf\xa4\xd7\x41\x14\x40\x38\xc6\x35\x14\xcb\xa0\x6d\x5f\xe6\x60\x48\x89\x7e\xa8\xda\x81\x6b\x10\xcb\xb2\x79\x03\xe9\xae\x1c\x13\x2b\xa1\x19\x86\xf6\xc4\x90\x36\xff\x83\x9f\xfb\xff\x99\x5c\xed\xe9\x3b\x77\xcf\xed\x1a\xdc\x49\x51\x77\xce\xe0\xa7\x7e\xfe\x7d\xad\xee\xfd\x48\xd9\x87\xfd\x8f\xdc\x8f\x7f\xca\xda\x78\xd1\xfd\xf4\x8a\x6c\x08\x04\x11\x2a\x24\x49\x44\x6c\xc8\xf3\x18\xc8\x8a\x18\xcb\x8e\x41\x64\x04\x39\x4f\x01\xb6\xce\x5a\x96\x61\x73\x90\xa3\xd8\x50\x36\x0d\xd6\xa1\x51\x9c\xd1\xe4\x0e\x2f\xaf\x99\x3d\x6b\x6e\xf3\x49\x43\xd7\x16\xbd\xfd\x07\xb3\xb7\xfd\x6b\x52\xcb\xac\xb3\x4d\xf2\xc9\xac\x43\x2b\x7f\x9e\x3e\x43\x8c\xd2\x8c\x18\x60\x15\xa4\x9a\x3a\x4f\x04\x1d\x00\xe4\xa8\xba\xe2\x12\x11\x3a\xba\x62\x18\x72\xcc\x46\x4e\x0c\x1c\x83\x22\x91\xcc\x98\x80\x16\x0d\xa0\x9b\xc4\x4c\xed\x1c\xfc\xe4\xbd\x39\x17\x75\xca\x52\x78\x23\x7a\x74\x93\xbf\x30\xf5\xda\xf4\x57\xe6\x5e\x9c\xa4\xde\x2f\xb7\xbb\xe3\xa0\x1f\x66\x57\x1c\x9f\xf9\x55\xd8\x94\x49\x8f\x66\x89\xaf\xfd\x1f\xa5\x0a\xc1\x70\x38\x9d\x51\x22\x12\x1b\x9a\x42\x45\x98\x0b\x7c\xcb\x34\x78\xd7\x70\x24\x43\xd2\x50\x44\xd1\x7a\x24\xfb\xbe\xe5\x66\xcc\xd3\x6f\xbe\xfe\xc9\x6d\x58\x7d\xc2\x8c\xaf\xcb\x57\xb7\x6e\x2d\x58\xe2\x15\x7a\x71\xe6\xe1\x86\x15\x66\x5d\x2e\xd1\x6a\x58\x99\x9e\xf7\xb3\x15\x4b\xf3\xdc\x55\x0e\x3c\x33\xd2\x65\xe0\x1a\x86\x8b\x1d\xd1\xe7\x45\x3a\xa1\x5c\x9d\x4b\x00\xad\x53\xa1\x8e\x5c\x1f\x79\x8c\x9e\x08\xa6\x65\x23\x99\x37\x05\x8f\xce\x68\xf2\x7b\x0b\xab\x34\x59\xd3\xb1\xf2\x42\xd0\xad\xc7\x5d\xf7\x67\xbd\xf0\xb5\xa7\x0a\xed\xdb\x37\xe9\x72\xc7\x53\xbf\x1d\x7c\xfb\x93\x1f\x1e\xa6\x99\x6b\x5e\x48\x62\x93\x46\x40\x64\x12\x5f\x97\x69\x36\x88\x55\x06\x24\x89\x1e\xc6\x49\x82\x15\xd6\x83\xa6\x24\x39\xc4\x31\x69\xdb\xd5\x11\x4f\x23\x09\x3c\xfe\x84\xff\x8f\x73\xd4\x28\xd5\x86\xf1\xbd\xaf\xaf\x7b\xd9\x23\xae\x28\xf5\xd2\x79\xe5\xcf\x29\x45\xc6\x9b\x9f\xe5\xd7\xb6\xd0\x59\x2e\x8d\xdd\xfe\x61\x7a\x9d\xc3\x08\x19\x16\x47\xb1\xee\x4a\x42\xec\x99\x48\x61\x63\x13\x08\xbc\xe9\xf8\x92\x64\x53\x58\xf6\x79\xc9\x00\x02\xff\x77\xde\x60\x3c\xe4\x2a\xbc\x21\xa6\x00\x39\x24\xab\xce\xd4\x38\xda\xa0\x6d\x56\xe7\xd6\x6f\xaf\xd6\x9c\xf1\x16\x55\xe2\xe7\x89\xd3\x2a\x8d\x7b\xbd\xfa\xf4\xa2\x0b\x37\x36\xb7\xaf\x34\x4d\xaf\xc9\x8a\x08\x7c\x40\xc9\x91\x84\x24\x53\x8e\x2d\x5e\x8b\x6d\x11\x1a\x5c\x62\x28\x9c\xc0\xd9\x94\xac\x40\x3d\x12\x03\x86\xf7\xb0\x14\x45\x50\x66\xd9\x24\x85\x73\x1c\x0b\x77\x8c\x9f\xf1\xf0\xee\xaa\xeb\xed\xaa\x60\x96\xb4\xfe\xe6\x52\x0f\xd3\xaf\x3f\x3e\x5c\x5e\x1e\x56\xea\xbf\x75\x9e\x9b\x79\xd1\xb5\xd4\x5b\x34\x44\x48\xc2\x44\xc2\x81\xe0\x9a\x86\xa1\xa8\x8e\x65\xda\x90\x08\x10\x25\x98\x0f\x28\x20\x8b\x9c\x47\x59\x8a\xe7\xb2\x1e\xc7\xf8\x8a\xcb\x29\x82\xf4\x84\xa6\xf7\x97\xdc\x9b\x5a\x8d\xbf\xed\x75\x3d\x81\xcf\xee\x1a\x64\x36\x2d\xd9\xb6\x5d\xe1\x43\x5f\x54\x2e\x30\xf6\x72\xc1\x82\x9f\xee\xdf\xf9\xf9\x0f\x8f\x75\x29\xef\xb6\xf8\xf5\xe8\xd6\x64\xe4\x8c\x11\x9b\x7b\x9d\xdc\xd6\x68\xc4\x82\x4e\xce\xe4\x83\xe3\x5b\x1f\xdd\x96\xb7\x7f\xf3\xf7\x72\x52\x38\xcd\xb4\xa9\x20\x80\x1c\x03\x0c\x26\x04\x74\xc8\x8b\x9a\x2a\xc7\x08\x99\x74\x24\x0a\x12\x22\xb2\xaa\x0a\x88\xa2\xb5\x50\xc5\x86\x22\xc5\x11\x30\x25\xc9\xa3\x48\xea\x36\xb6\xd6\x84\x0f\x1f\x8e\xed\xfb\xd3\x5b\xc2\xfa\xa3\xe7\xcb\xac\xfe\xf5\xc1\xd4\xba\x3b\xdb\x0c\xc9\x3e\xff\xe0\x99\x06\x63\x8f\x4c\xd8\x1b\xa7\x57\x57\x4b\xe0\xdc\x88\xe8\x4a\x40\xeb\x09\x54\x12\xd1\x35\x64\xa8\x3b\x12\x42\x9c\xe0\x7b\x9c\x1b\x72\x71\x2c\xd8\x91\x9e\x50\xbe\xc7\x86\x8e\x2c\xca\x71\x92\x4a\x10\xaf\xed\xdb\x7b\xef\xcf\x1b\x52\xf8\x44\xa7\x11\x5f\x35\x78\x30\xc6\x7e\xbe\x91\x55\x6f\xde\x77\xc7\x7e\x6f\x3a\x74\xfa\x92\x95\xfd\xe6\xb7\xc8\x3c\x26\x23\x35\xd3\xab\x6b\x45\xae\xe2\x71\x30\x86\x01\x87\x0d\x3a\xf4\x54\x86\x60\xdf\x48\x4c\x9a\x75\x64\x0d\xda\x52\xa8\xfb\xb2\x11\x44\x91\xa9\xb1\x42\x64\x62\x41\x4b\xdd\x0f\x32\x6f\x65\xdf\x3d\xeb\x85\x2a\x0b\xc5\x46\x8d\xda\xac\xed\xcd\x9e\x55\xae\x35\xfa\x79\x64\xae\x2c\x43\x98\xaf\x26\xf5\xa9\x97\xa5\x54\xa3\xf4\x46\x41\x64\xc8\x14\x26\x2e\x13\xfa\x92\xc4\x5a\x58\x0d\xdd\x30\x82\xaa\x4b\x22\xc7\x76\xad\x50\xa5\x80\x1d\x46\x0c\x87\x23\x5f\xd7\xc5\xc8\xa7\x43\xdb\x48\x32\xf6\x83\x97\x97\x9c\x6e\x2e\x8f\x7b\xb9\x62\x36\xe1\x99\xca\xf4\xf0\xe5\xc5\xbe\xc8\x51\x7b\xd6\xcc\xb9\xcd\xaa\xb5\xfa\xe5\xc6\xc8\xfb\xd3\x7e\xcf\xfc\xbc\x37\xf5\x6a\x85\x8e\x23\xce\x0e\x78\x4b\x07\x62\xc2\xd3\x0a\x15\x78\xa6\xa5\x23\x4a\xb1\xa1\xa0\xc9\x81\xcc\x86\x72\xe0\x32\xd8\x8d\x24\xe2\x02\x43\xa7\x03\x3d\x48\x9d\xd5\xf3\xb4\x7c\xf5\x83\xef\xee\xee\xfd\x68\x70\x81\xb2\x7d\xfa\xe7\xb2\xc7\xd5\xe9\x24\x2e\x78\x45\xfc\xa9\x7a\xff\x7d\x7e\xe3\x4b\xc7\x66\x64\x7e\xde\x9b\xf2\xa4\x7d\xda\x05\xb1\x88\x13\x89\x78\x92\x4d\x3c\x68\x22\xac\x5b\x92\xc9\xf9\xbc\x26\x79\x21\xe3\xd0\x9c\x64\x26\x1c\x63\xf9\xae\xaf\x99\xd0\x11\xfe\xaf\xda\xf0\xe3\x27\x5d\xb8\xc5\xf5\xf7\x3f\x8e\xd6\x35\xec\x76\x04\x1d\x7d\xf3\x3d\xf5\xcd\x16\x39\x5f\x28\xd6\x69\x94\x51\xef\xc5\x75\xf7\x0a\x5e\x9a\x37\xeb\x41\x7a\x4b\x7e\xc4\x10\xa2\xd2\x34\x65\xf8\x1c\x25\x9b\x3a\x36\xac\xd8\xa2\xa3\x98\x11\x05\x5e\x0c\x09\x51\x54\x39\x31\x03\xa2\xcb\xb2\xc2\x87\x94\xad\xd1\xb6\x88\x33\x86\x61\x07\xe3\x62\xeb\x85\xef\xd1\xdb\xae\x91\x5a\x15\xe7\x71\x0d\xaf\x3c\xea\x79\xe8\x99\xc6\x23\x37\x1b\x07\x0f\xae\x7c\xae\x60\xcd\x4a\x93\xd3\x5b\xf2\x5d\xe4\x69\x08\xb9\xb1\xe7\x88\x6c\xc0\x01\xc6\x8f\xa1\x20\xc4\xa2\x11\xcb\x0e\x85\x44\xdd\xd1\xf9\x20\x32\x08\x1d\x18\x44\xd0\x4c\x45\x50\x38\x3f\x49\x1d\x86\x1b\x72\xdd\xea\x64\xb7\x5d\x59\x72\xca\xe2\xcb\x89\x5f\xe6\x12\xc5\x1f\x2a\xbc\xa5\xf8\xe2\xc6\xe7\x5b\x2d\x5d\x4f\x3e\xcd\xb5\x36\xcd\x27\x1d\x13\xd1\x95\x64\xdb\x11\x49\xa0\x03\xcc\x8b\x26\xc3\x85\xa6\x19\x33\x96\xc8\x8a\x1c\xcb\xf8\x10\xd8\x02\xcf\x27\x8c\xc9\x85\x82\xed\x3a\x3c\x96\x52\xcc\xb9\x0e\x14\x1e\xfa\x5d\x99\x11\x3b\x6a\x7d\x2c\x24\x13\xfb\x35\xeb\x44\xf2\xfd\x75\xbe\xd8\xc7\x3b\x9e\x1e\x5b\xfe\xf0\xfe\x4d\x1d\x3e\x0b\xd2\x2b\x45\x2d\x84\x0e\x62\x4d\x27\x74\x05\x19\x82\xc0\x15\x1c\xce\x0f\x81\x2d\x73\xbe\x2c\x0b\xac\x02\x59\x83\x62\x5c\xcb\x27\xb1\xc5\x93\x44\xa1\xe9\x28\x76\x4d\x35\xf5\x44\xb1\xdc\xa4\x7c\x03\xee\xfc\x2c\x35\x39\x1f\xbd\x5b\x37\xeb\xde\x7c\xdf\x67\x3f\xdc\x32\xe7\xae\x19\xc1\xe0\x8d\xc2\xa1\xa0\xc8\x49\xa0\xa5\x99\x35\xc7\x10\x75\x8d\x01\x12\x6d\x46\x34\x6b\xf1\xc0\x52\x51\xec\xda\x1c\xe7\x84\x48\x96\x83\xc0\xd4\x61\x14\x3a\x80\x15\x35\x96\x83\x52\xa4\x53\x26\x61\x32\xde\x71\x5e\xbb\xf9\xd9\x87\xeb\x57\xdc\x78\xe9\xfb\xde\x37\xde\xff\xe6\x50\xbe\x9d\x53\x3e\xff\x69\x68\x85\x52\xdf\x35\x58\x37\x7b\x32\x7c\x66\x37\x95\xf9\x09\x49\x6a\x6e\xa2\x44\x34\xb0\x87\x49\x44\x5b\x30\xa4\x83\x44\xe5\xb5\x04\x40\x88\x5d\x12\x4a\x09\x65\xa8\xb6\x20\x58\x58\x66\x44\x2a\x08\x55\x9f\xa1\x21\xfd\x1f\x52\xd4\xff\xcf\xe4\x85\xad\x2a\xe5\x3f\xf1\xec\xe8\x8f\xb6\x8c\xcd\xf1\x29\x6f\x1c\x2a\xd7\x74\x65\xed\xbc\x3f\x5c\x7b\x6e\x61\xc2\x5f\x2d\x5c\xbf\xfb\x5b\xe9\xd5\x0e\x06\x7a\x2c\xc6\x9c\x23\x5a\x8a\x8e\x2c\x4a\x64\x08\x01\x89\xa1\x2b\x20\x14\x74\x9a\x0d\xac\xbf\xaf\xe9\xa6\x05\x80\x06\x7c\xa2\x93\x98\x47\x2e\x4f\x89\xa9\xc3\xb0\xff\x87\xc3\x6e\x2c\x7c\x75\xf5\x46\xd3\xd9\xde\x7e\xcf\x62\xbf\x75\xf6\x33\x78\x4e\xd5\x62\xcb\xf2\x77\xdf\x0d\xf7\xf1\x1f\x3c\xbb\x36\xcd\xd7\x32\xc3\x62\x62\xe8\x8a\x26\xf4\x71\x60\x48\x56\x22\xfb\x86\xe1\xab\xbc\x20\x24\x4a\xc8\xba\xb6\x1f\x0a\x01\xd6\x4d\x91\xb8\xaa\x82\x64\x51\xb6\xb1\x9c\x31\x0c\xf7\x17\xaa\xf9\xfb\x3a\xf0\xf0\x7e\x85\xe1\x87\x40\xcb\xfc\xf8\xc0\xa5\x6b\xe5\xab\xb4\xec\x30\x12\x36\x3f\xb7\xe0\xe9\x3d\x6d\x6f\x2c\x4b\xaf\xc9\xa2\x49\xc9\x76\x22\x9a\x2c\xd6\x74\x0e\x4a\x30\x50\x5c\x20\xc8\x46\x64\x89\x22\xe3\x6a\x4c\xc2\xcb\x3c\x64\x54\x8b\xf5\xd8\xc0\xf3\x0d\x04\x04\xc1\x48\xdd\xe1\x25\xcb\x17\x34\xe1\xf7\x0d\x0d\xcb\x8c\x2e\xd7\xf5\xc1\x9d\x86\xcb\xae\xb5\x78\xa5\xcc\xe8\x17\xca\x85\x97\x6e\xf5\xde\x6b\x67\xcb\x99\x79\x9c\x51\xea\x3d\x80\xd0\x04\xaa\x4a\xbb\x82\x88\x59\x55\x74\x2d\x5b\xe3\x03\xc7\xf7\x78\x11\x1b\x36\x0a\x15\x05\x98\x16\xe3\xe9\xd0\x0f\x63\x8c\x29\x26\xf2\x51\xe2\x66\xf4\xe9\x05\x05\xfd\x02\x07\x3f\x2b\x36\xfe\xfe\x91\xe3\x9d\xd7\xcf\xa2\x66\x14\x99\xf5\x43\xb9\x1d\x60\xd5\xc1\xc6\x4d\x1f\x16\xfb\xe5\xf4\xfd\xab\xe9\x2d\xe0\xa1\xc1\xc4\x56\x9c\xd0\x89\x40\x73\x92\x81\x05\xc5\x87\xa1\xaa\x6b\x01\xc7\xe9\x52\xe0\xe2\x30\x82\x21\x31\x45\x4e\x4d\x02\x5d\x73\x51\x40\x54\xd1\x7e\xc2\x85\x21\xcc\xe1\x0e\x7d\x79\x38\xf9\x34\x67\x1f\x52\xb1\x77\xa9\xea\xe5\xb6\xbd\x30\x7c\x79\xbd\xaf\xb6\x87\xb9\x77\x8f\x48\xba\x56\x6e\x7f\xf1\xb1\x0b\xc3\xf3\xdf\x9d\x2e\xff\xee\x8d\x45\xd9\x7a\x34\x5d\x3e\x79\xd4\xfd\xbe\xcb\x72\x0e\x1a\xf2\x65\xee\x3f\x9c\x35\x8d\x6a\xcd\xad\x97\x5b\xdf\x94\xf9\x2b\x73\x6a\x31\x76\x51\x14\xb8\xc8\x8c\x54\x01\x2b\x52\x64\x1a\x82\xef\x78\x6e\xac\xc5\x06\xc2\xc4\xf4\x4c\x09\x73\x31\x74\xb8\x84\x35\x0d\x91\xc6\x00\xeb\x34\x60\x9f\xf0\x91\x60\xf8\x4b\x6f\x6c\x18\x7f\xb8\x69\xb3\x03\x2b\x6b\xcc\x40\x67\xe6\x55\x7d\xf0\xcc\xce\xa1\x4b\xfb\x95\xc8\x37\xab\xd4\xd5\x96\xd3\x87\x37\x7d\x9c\xbe\xb7\xd6\xf3\x6b\x3f\xfb\xa0\xdf\xb9\x1d\xaf\x1f\xe5\xfa\x66\xdb\x33\x7d\xd9\x0f\xcf\x7e\xd5\x72\xce\x3b\x6c\xb1\x16\xbb\xed\x37\xee\x4d\xcd\x7c\xe9\x4a\x99\x9d\x12\x40\x11\x51\xa3\x3c\x9e\x52\x28\x99\xd8\xaa\xa7\x39\xb1\xcf\x0b\xd8\xd1\x69\x91\x75\x65\xdd\x25\x86\x64\xda\x2c\x34\x2d\x9f\x85\x16\xa1\x78\xe3\x3f\x17\xce\xff\xf3\x23\x4b\xcf\xd2\xba\xac\xd9\xf0\x7c\x85\x19\x23\x3a\xb0\x09\x6a\x52\x7d\xc8\x8e\xfa\x70\x7f\xfb\x1f\x4f\x1a\x4d\xba\x6d\x89\x49\xfe\xdd\x8f\x15\xba\xf1\x05\x72\x28\x13\xbb\x57\x18\x72\xad\xc4\x81\x16\xdf\x0f\x78\x7b\x39\x53\xe8\x7d\xff\xd6\x92\x73\x4b\x84\x9d\x6a\x95\x6e\x39\x1f\xb6\x4b\x33\x91\xb5\x06\x34\x59\xc1\x89\xaf\x40\xc1\x73\x64\x11\x31\x22\xc0\x14\x43\x80\x19\xf9\xa1\xa7\x49\x01\xf4\x08\x15\xb8\xb2\x15\xc4\xc0\x70\x25\xac\x0b\x24\x63\x84\x4d\x1a\x5f\x56\x7a\xbd\xfb\xbc\x9f\x5e\x98\x3e\x6e\xdf\x6b\x15\xea\x67\x9f\xd3\x70\x47\x49\xf2\xcb\xbe\x89\x57\xf2\x68\x5f\x57\xec\x39\x6d\x65\x7a\x4d\xd6\xb9\x80\x70\x09\x0f\x6d\xe8\x27\xb2\xc5\x30\x34\x04\xae\xe6\x25\xc0\x0c\xf9\x04\xea\x91\x47\x83\x50\x36\x15\x24\x3b\xa6\x86\x75\xc0\x2b\xaa\x94\x02\x6d\xbd\xe5\xaf\x67\xba\x1f\xf4\xb8\x51\x23\xa6\x6f\xfd\x6a\xe3\x07\x85\x40\xaf\xc3\xf4\xfe\xda\x2f\xec\x6b\x47\x7d\xdd\xa9\xeb\x8d\x35\x4b\xdc\xf4\x9a\x6c\x7b\xaa\x93\x50\x21\xab\x42\x3a\x32\x39\x3f\x36\x89\xc9\x7b\xd8\x4c\xc2\x38\xe6\x24\x3d\xe1\x45\xc7\x48\xd8\x58\xe3\xb1\x84\x0d\x41\x8e\x25\xc6\x07\xa9\x5f\xb0\x5b\xad\x6c\x62\x8f\xdf\xd0\xa5\x5a\xbe\x05\xab\x26\xdd\x08\x0e\x7d\x37\xf9\x72\x81\x5d\x23\x4f\x4e\x6b\xb9\x7c\xeb\xe5\xe2\xaf\xb6\xaf\xf3\x42\x7a\xdb\x64\x28\x63\x4d\x8f\xb1\x29\xcb\x50\xa6\x13\x0b\x06\xa2\xe3\xf9\xae\xa5\xb8\x74\x60\x11\xd7\x31\xa0\xe7\x73\x8e\x19\xd3\xa1\x2a\x88\x01\x86\x9e\x61\x04\x19\xbb\xa0\xcb\x51\xd5\x6d\xc1\xe8\x06\x7f\x75\x3e\x92\x7b\x74\x8b\x07\xef\x0e\x57\xee\xaf\x23\x6d\x1a\xbc\xd3\xed\xfa\x80\x6f\x8b\xf4\xf8\xd2\x3b\x9d\x66\x48\x1c\xa3\xf0\x2e\x64\x28\x25\x81\xa1\xa8\x7a\x72\xcc\x89\x71\x92\x04\x94\x43\x3b\x40\xf2\x71\x6c\x2a\xaa\xe1\x4b\x01\x87\x63\x91\xf1\x54\x09\x1a\x49\x9c\x7a\xa9\x6a\xe3\xc9\xe5\x3b\xf0\xb7\xc3\x37\x1e\x6d\xb7\xa4\xcf\x31\xbb\xe7\x9e\x6d\x77\x6e\x15\x18\xd7\xa8\x4b\xab\xbd\xb0\xc3\x84\xe2\xc3\x9a\x65\x9e\x2a\x3c\xf5\x32\x89\x18\x01\x8e\xe3\x29\x57\x64\x5c\x5a\x37\x69\x28\x89\x8c\x08\x08\x24\xae\x48\x88\xae\xe9\x09\x13\x26\x96\x9e\x98\x1c\xcd\x05\x2e\x56\x04\x64\x7a\xa9\xeb\xf3\xb8\x97\xb2\x3d\x4b\xf7\x3a\x78\xee\x21\xdd\xa1\x50\x99\x72\x6b\x06\xe5\x1c\x7a\xa5\xee\xb2\xda\xfc\xc4\xdd\x6f\x1d\x69\x7d\x61\x72\x92\x79\x6c\x7b\xea\x47\x17\xc6\x61\x08\xa1\x55\xc6\x61\x5d\xde\xa3\x34\xcb\x0f\x74\x27\xb6\x91\x4c\x45\x1a\x03\x68\xc3\x67\xfc\x84\xc4\x81\x6c\xd9\x5a\xa8\xc4\x61\x12\x59\x29\xf8\x30\xe7\x9c\x19\xef\x7e\xb1\xec\x8b\xf2\x7a\xd5\xaf\xda\x23\x7e\xe1\xf4\x12\xf4\x9e\x01\xbb\xbe\x07\x45\x57\xb3\xea\xf1\x2e\x4d\xbb\x64\x5e\x56\x21\x35\xe2\x5a\x62\x8c\xd8\x0a\x24\x55\x4f\x04\x45\x83\x3c\x34\x61\xc4\xf0\xc4\xf0\x98\xd8\x37\x22\x4d\xb6\x59\xda\x96\x62\x1a\x26\xb1\x02\x2c\x2a\xd1\x5c\xf3\x9f\x96\xe2\xdf\x52\x1d\xff\xed\xfd\xba\x4f\x83\x6c\x59\x2a\xf4\x7a\x7c\xb7\xb0\x7a\xf7\x81\x4a\x9d\x11\x27\xe4\x4d\x67\x7f\xad\xdb\x64\x61\xef\x97\xb4\xfa\x9f\x3e\x37\x75\x41\xee\xcd\x42\x2d\xaa\x6d\xb9\x07\xfb\x73\xa7\xd7\x9f\x80\xc3\x23\x43\x04\x12\x27\xab\x1c\xc3\x59\x6c\x60\x03\x2e\x01\x9a\x6d\xa0\x48\x77\x5c\xdb\x45\xbc\x20\x19\x26\xb2\x0d\xd5\x02\x91\xe3\xa9\x9e\xfe\x04\x21\xa4\xeb\x6b\xd6\x55\xff\xeb\xd5\x0e\xe5\xbe\xbf\xf2\x27\x73\xb4\x55\xab\xbd\xe5\xc1\xec\x9d\x7f\xd5\xce\xc3\xff\x50\xbe\xce\xc5\xfa\xb0\x68\x8d\xf4\x96\x5c\xcd\x54\xa1\x19\x50\xba\x6c\x19\x58\x36\xbc\x50\xc6\x96\xcd\xcb\xc8\xe1\x80\x22\xc6\x2a\xa5\x33\x61\x84\xe5\x44\xd5\x1d\x9f\xd5\x6d\x81\x40\x94\x48\x4f\x40\x24\x94\xec\x7a\xb8\x7c\xe9\x4d\xed\xeb\x4d\xdf\x97\x07\x6e\x5d\xbf\xac\xa6\xd4\xe1\x9d\xd1\xc1\xc6\x92\xcc\x81\x96\xad\x8f\x75\x1f\x7c\x3d\xcd\x2c\x38\x21\xa7\x08\x21\xa5\x1b\x32\x4a\xb0\xe7\x72\x8a\x94\x60\x2f\x0e\x22\x89\x55\x2c\x41\xf5\x64\x5e\x65\x80\xac\xcb\x8c\x2d\x2a\x54\xa2\x04\x31\x45\xc3\xd4\x66\xd7\xf9\x65\xd0\xb6\x92\x8b\xaa\xdc\x3a\x36\xb7\xfe\xc1\xeb\xeb\x4b\x4d\x58\xd2\xb7\x7a\xa9\x62\x03\xbb\x15\x1d\xbb\xb4\xc4\xcd\x1f\x94\x9d\x1b\xd2\xeb\x24\x02\x8a\x83\x44\x04\x34\x86\x92\x61\xd8\x6a\xa4\x53\x84\x36\x1c\x22\x98\x6e\x98\x88\xaa\x13\x08\x30\x00\x12\xc2\x21\x11\x6c\xc9\xc6\x76\x20\x78\xff\x90\x51\xf7\xcb\xf9\xbf\x5b\xce\xe8\x53\xbf\x57\xee\xb7\xfb\x3e\x96\xa2\x94\x83\xef\x9d\xca\x36\xa2\x7d\xfb\xf3\xef\xb4\xd5\x8e\x97\xef\xda\x64\xeb\xf6\xa3\xcf\x4c\x2d\x51\x78\x71\x96\x66\xe3\x1e\xed\xb1\xbf\xcc\xbc\x9a\x41\xea\x5d\x73\xdf\xe0\x19\xdb\x36\xa8\x58\xa6\xb1\x9c\x20\x0f\x39\xb2\xc6\x41\xc3\x07\xa6\x1f\x70\x61\xc8\x21\xda\x48\x18\xc6\x84\xba\x8b\x1d\x57\x44\xc0\x73\x32\x5e\xd6\xe2\x4f\xaf\x8e\x5e\xd5\x22\xd7\x82\x9f\x7b\xe5\xda\xfc\x42\xb9\x4b\x27\x1b\x7e\x05\xeb\xf4\xe8\xdb\xb3\x5f\xb9\x9f\x4e\xe6\x56\x16\x4e\x2b\x9f\x66\x18\x2c\x89\x39\xc4\x78\xb6\xac\xea\xb2\x63\x1b\x12\xa6\x3c\x49\x22\x48\x09\x38\x4f\xd0\x40\xa8\xa0\xc4\x57\x24\x8e\x0f\x4d\xdb\x34\xb4\x44\xa5\x01\xb6\x53\x6f\xd8\x2e\x3c\x7a\xbd\xf5\x2b\xef\xaf\x3f\x23\x5e\x42\x3d\x3a\x15\xdb\x73\xeb\xca\x0f\x3f\x89\x83\x5b\x1e\x6c\x50\xe9\xec\xfd\xa2\x37\x2a\x4e\xc8\x7c\x14\xa4\xcc\xac\x58\x30\x31\x21\x1c\x30\x89\xa5\x6a\xba\x61\xd2\x5a\x12\xeb\x4c\xc2\xd3\x7c\x2c\x5b\x32\xeb\x3a\x66\xa8\xdb\x26\x94\x7d\x22\x47\x36\xd4\x55\x45\x7f\x02\xbd\xe9\x7b\x27\xaf\x36\x7c\xd8\xb0\x55\xe7\x37\xbe\x6a\xbd\xf0\xf3\xb2\xd2\xe9\x82\x73\x97\xec\xbf\x32\x7f\xe5\x9f\x95\xf9\x91\x59\x27\x8e\x7c\x98\x35\xbd\xc1\x4b\xb1\xe8\xff\x63\xed\xad\xc3\xbd\xa8\xd6\xf6\x71\x42\xd8\x34\x22\x25\x2d\x9d\x12\x93\x80\x84\xc0\x06\x69\x04\x36\x20\xcd\xd4\x9a\x8e\x35\x6b\x9a\xde\xd2\x8d\x74\x77\x48\x6f\xba\x91\xb2\x40\x90\x54\x40\x4a\x1a\x91\xd6\x4d\xf3\xbb\xde\xf7\xbc\xe7\xa7\x1c\x3e\xfb\xf2\x5c\xfb\xfb\xf9\x7f\xfe\x58\x33\xf3\xd4\x7a\x9e\xfb\xb9\x6f\x53\xe2\x79\x46\x32\xf5\x88\xf2\x54\x1e\xd7\x38\xc8\xb3\x8c\x09\x68\xc7\xe4\x70\x19\x07\x00\x87\x81\x2c\x18\x1a\x83\x1b\x3a\x14\x71\xce\xfe\x8b\xf9\xf3\xab\x84\xff\x6e\xb6\x93\x9c\x38\x38\x63\xcd\xff\x95\x4e\xfc\xeb\x2d\xbf\x78\x6e\xef\x7c\xe9\xff\xb2\xfe\x71\xb3\x9b\x15\x3e\xac\xb4\xfc\x4a\xa1\xe2\x7f\x1e\xe4\xac\xf2\x0f\x53\xfe\x1c\x30\xe2\xcb\xab\x7a\xfa\x47\x6f\xb1\x81\x28\x74\xc0\x5a\x01\x6f\xd9\xbe\x22\x04\xc8\xc5\x22\x8c\x02\x40\x82\x1a\x2e\x72\xa6\xe8\x21\x8d\x04\x36\x49\x44\x1a\x4f\x3b\x0e\x01\x30\xa8\x1b\x9c\x12\x3b\x44\x75\x3f\x33\xac\xe4\x91\x59\x7d\x87\x3d\xe6\x4f\x8e\x2e\xfc\x3e\x52\xba\x8c\x68\xfc\x45\xcb\x6e\x14\x73\xb5\x65\xa3\x95\x8f\xb3\x7d\x9e\x7e\x7e\xd3\xd8\xbb\x5e\x16\xe9\xd8\x8e\x2d\x5b\x8c\x6e\xb2\x78\x60\xb0\xb2\xaa\xa8\xa6\xe0\x06\x1e\xa9\xf0\x32\xce\xba\x2c\xa3\x00\x93\xd7\x75\xcc\xb0\x05\x32\x32\xc9\x48\x8b\x9d\xc7\x96\x81\x04\xb1\x42\x87\x93\xd3\x9a\x3d\xe9\x96\x65\xde\xbd\x36\xed\xc6\x95\x28\xb6\xbb\x45\x9e\x1e\xed\xbb\x6e\x1d\xa2\xef\xa6\x7f\xba\x18\xe7\xae\x27\xc7\x30\x50\x0a\x1c\x96\x67\x91\x80\x54\x80\x99\x01\x6f\x68\x12\xc1\x19\x0a\xcd\x98\x54\x24\x3a\x66\xc8\x0b\x0a\x21\xa9\x08\x0f\x70\xcd\x31\xc2\x34\xd0\x4a\xcd\x37\xcc\xbc\x51\x64\xa7\x2a\x2c\xae\xd9\xa7\x46\xd1\xf7\x3c\xaa\x58\x52\x99\x85\x4d\x5b\x3e\x5f\xfe\x7c\x47\xd5\x3e\x33\xda\xbc\x77\x26\xbe\xc7\xb6\x34\x9c\xe7\x54\x59\x0f\x44\x0e\x08\x7c\x88\x84\x10\x79\x26\x8e\x87\x76\x40\x93\x84\x4a\x18\x21\x94\x58\x40\x43\x86\xc0\x79\x41\x0a\x44\x24\xa6\xb5\x59\x77\x83\x9f\x53\xb8\xf2\xeb\xd3\x5f\x99\x89\x27\x9b\x96\x1b\x7e\xef\x3a\xdf\x4e\x49\x3c\x3f\xbc\xa9\x9d\xa9\x53\xf3\x7a\xfb\x0a\x9c\x89\xb3\x52\x56\xc8\x63\xbe\xe1\x38\x30\x02\x38\x40\x96\xaf\x4a\xd0\xd4\x4d\x43\x0d\x43\x08\x24\x0d\x53\x5c\x45\x25\x70\x43\xb5\xa9\x88\x72\x69\xce\x60\x64\x0b\xfe\xb5\x45\xfb\xef\x6d\x91\x7f\x6a\xb6\x24\x37\xf9\x36\xd3\x7f\x88\xaf\x9d\x88\xda\x24\xf5\x68\x7a\x2c\xe7\xde\x22\xef\x25\x7e\x7c\x74\x42\xd5\x57\x85\xae\x9c\x3c\x26\xac\xca\x54\xb9\xc0\xa9\x39\x39\xfe\xdc\x95\xfe\x9d\xdb\xd8\xc3\x4e\x13\x23\x5c\x87\xb5\xf4\x80\x85\xb8\x17\xe2\xa2\x67\x88\x51\xe8\x84\x5a\x48\x72\x80\x09\x75\xda\xe0\x38\x55\xc4\x91\x2c\x62\x24\x21\x02\x3c\x60\xd3\xd8\x5f\x78\x59\xfb\x75\xd3\xe6\xda\xe0\x5f\x33\x9a\x6b\xb4\xcf\x4d\xa6\xc2\xaf\xc4\xf3\x9a\xd6\xb6\xdf\x8d\x5b\xf3\x53\x2b\xb5\xbf\x3c\xa1\x6e\x9c\x41\xd0\xb6\xa5\x6a\x2e\x4f\x23\x46\x55\x10\x34\x29\x5a\x80\x74\x04\x24\x8d\x08\x25\x0d\xb3\x44\x5b\xc0\x3c\x53\x72\x25\x4a\x09\xb4\x50\xa5\x39\x29\x82\x69\xec\x98\x76\x6b\xf6\x3c\xf5\xd4\x90\x6c\x25\x6f\xae\xa8\xf0\xd5\x80\x95\x13\x53\xd6\xa5\xdc\x3c\xf0\xcb\xc5\x2f\x9f\xfc\x59\x78\xc8\x8e\x3d\x3f\x5f\x8b\x2f\x41\x31\x63\x2b\xb6\x4a\x10\x1a\x6e\x98\x24\x8f\x01\x8b\xd7\x78\xd2\x8d\x80\x14\x21\xcd\x61\x6c\x53\xb2\x6d\x9b\xc5\x4c\x20\x68\xc0\xb5\x02\xde\x8f\x5c\x05\xf3\x62\x1f\x3b\x5f\xa2\x95\x6b\x49\xa6\x7a\x3f\x70\x1b\xf3\x8f\x67\xcf\x3c\x4a\xbd\x5e\x61\x76\x8f\xdd\xa7\xb7\xd8\xf9\x76\xe7\x26\xaa\x4d\x1c\x13\x5f\x5a\x07\xc6\xa2\x19\x97\x84\x28\x82\x88\x0b\xb4\x80\x94\x44\x1d\x20\x5e\xd5\x64\x99\x24\x78\xcb\xe2\x55\x9f\x80\x04\x0a\x54\x4f\xd4\x4d\x8e\x0f\x10\xf1\x7f\x52\x77\xff\x7b\xec\x87\xd9\xfe\xbb\x8e\x5c\x72\x93\x41\xeb\xde\x7d\x33\x95\xcd\x08\xcf\x9e\xb8\xdd\x7f\xc0\xb0\x3c\x09\x1b\xce\x1e\xfa\xf9\xe0\xb2\xf5\x65\x57\xd7\x69\x72\x22\xe1\x69\xc2\xa7\x4b\xa6\x2e\x7c\x59\x2a\x43\x9c\x41\xea\x8c\x6b\x01\x87\x0f\x34\x27\x54\x45\x92\x64\x8c\x80\x63\x23\x1d\x46\x96\x8d\xa9\x24\x4b\xe1\x38\xa1\x86\x06\x69\xe2\x86\xe8\x09\xac\x6d\xf3\xbc\x92\x86\x0c\xe1\xc0\xc6\x87\xfb\x66\xde\x5e\x64\x41\xf7\xb5\x4f\x33\x2f\x3c\x95\xca\x6d\xe8\xd8\xf7\xcc\x4b\x73\x74\x85\xef\x4b\xf0\xd8\xed\xc9\xad\xee\xc4\xf9\x92\x20\x52\x02\x8e\xd4\x08\xc7\x78\xc2\x32\x24\x92\xa7\x05\xe8\x48\xa2\xe4\x6a\x91\xa3\x04\x9a\xe0\x13\x2a\x2d\x98\x91\xa8\x50\xa6\xc4\x05\x18\xe5\x44\x4a\xec\x61\x47\x81\x4f\xe6\x2b\xc5\x6b\xed\x2a\x5a\xa2\xcf\xac\xde\xbf\xd7\xfd\xa1\x8e\xe6\x2d\x78\x54\x61\x57\x43\x61\xd6\xfd\xe8\xcc\xda\xec\xb5\xd3\x4f\x8d\x14\xb3\xaa\x83\x14\xe9\x19\x38\xc4\x02\x81\x32\x71\x32\xe0\x6c\xd2\x01\xb6\xab\x01\x48\x42\x5d\x43\x91\x16\xe0\x61\x60\x62\x8e\x85\x39\xae\xc1\x23\x83\x71\xfe\x46\x4c\xfa\xff\x1f\xb9\x7e\x89\x39\xf7\xda\x64\xc3\xc5\x01\x54\xd6\xc4\x4f\xcb\x5a\x73\x16\xbf\x20\x6f\x1c\xcb\x2b\x2f\xda\x35\x6f\xd0\xa7\x2f\x66\x2e\x4b\xbf\x10\x43\x6c\x1e\x38\xdf\xa7\x1d\x5f\x92\x48\x82\xc1\x03\x32\x12\x0d\x45\x87\xb4\xe4\x20\x46\x96\x04\xca\x73\x38\x8a\x05\x11\xe0\x28\xdb\xf1\xff\xe7\x76\x29\xe0\x26\x32\x63\x1b\xc8\xf0\xde\x05\x16\xb7\xef\x56\x7d\x40\xf5\x9f\xb6\x5e\x6e\x26\x65\xce\xd5\x6d\xfe\x66\xe7\x71\xce\x06\xdd\x0a\xed\xce\x31\x41\x3e\xb5\x72\x61\x7c\x9d\xd7\xe0\x68\x85\x21\x7c\xa8\xb0\x9a\x49\xb8\xac\x44\x59\x91\x86\x5b\x14\x07\x5c\xe0\x05\x3e\xb2\x15\x43\xa1\x59\xc0\x12\x8a\xaa\xe2\xb6\x27\xe9\x36\x93\xc6\xe5\xb7\xfb\xd0\x3d\xdb\x0f\x8f\x3d\xbb\x69\x6d\x8d\x7b\xbb\xbe\x95\x9a\x7c\x5f\xf4\x7e\x8e\x3d\x1f\x1c\x6a\x74\xed\x65\xd3\xde\x6b\x73\x60\x2b\xd2\xbf\x16\x10\x5b\x73\x59\x95\xc8\x88\x45\xac\x28\x49\x02\xc5\x40\xc7\x88\x70\x43\x65\x39\x4c\xf4\x91\xcf\x51\x12\x64\x28\x28\x1a\xbe\x21\xca\x82\xc0\x71\x9a\xab\x93\xca\x5f\x1b\x6a\x4b\x72\xfc\x77\x0d\xf2\xe4\x26\x53\x3e\xf8\x8f\xf2\x79\x53\xfd\xd6\x02\x31\x56\xcf\x51\xee\xd8\x32\xe7\xc9\xfc\x76\xb3\xf5\xa7\x47\xd9\x97\x7d\x9e\x8a\x8d\xae\x6e\x9b\x3b\xef\xdc\x9e\x63\xf1\x75\x5e\x68\x02\x4e\xc3\x05\x40\x68\x84\x29\x13\xa6\x16\x40\x21\x60\x22\x37\x62\xf9\x80\xf5\x69\x35\xb4\x91\x0a\x6c\x22\xb4\x34\x1b\xd3\x23\x4c\x53\x08\x39\x0d\xa2\x8e\xaf\xcb\xa5\xdc\x37\x52\xae\xd7\xc8\x1e\x69\x7b\x0a\xba\x17\xac\x8a\xfb\x16\xec\xdf\x7d\x7f\x66\xee\x39\x4b\x3b\x2d\xda\xfe\xde\xe2\xf8\xb6\xca\x19\x4f\x89\x34\x4a\x25\x42\xcd\xe7\x4d\x5c\x67\x34\x12\xb2\xae\x8a\x05\x51\x64\xd2\x9e\x4a\x10\x2a\xc7\x1a\x88\x0c\x02\xc1\x45\x94\x45\xb9\x98\x69\xfd\x4b\x05\xf8\x4d\xe7\xbd\xf4\xe2\xb3\xe2\xdf\x3e\x1c\x9e\xe5\x8b\x45\xfd\x66\x55\x9e\xd1\x3c\x4f\xe5\x63\xbd\x6f\x8e\x99\x9e\x79\x52\xae\xed\xe0\x93\xfc\x79\xdd\x38\x4b\xdc\x41\x4c\xd6\x74\x4c\xd5\x2c\xc1\xf3\x15\x5c\xa5\x42\x01\xb9\xb4\x0a\x04\xde\x64\x78\x5a\x86\xbe\xef\x29\x41\x88\xdb\x90\x05\x1e\xe7\xfb\xa2\x1e\xda\x69\x48\x4d\x5d\xa5\xf6\x7e\x24\x07\x97\x76\x5f\xdb\xbe\xaa\x82\xbc\x07\x5c\xbe\x38\x92\xa9\x58\x6c\xdf\xc2\x1e\xa5\x0a\xcf\xea\x45\xd7\x9d\xb0\x29\xce\x1d\x7e\x3e\x92\x58\xd5\x35\x09\x5e\x65\x14\x57\x23\x02\x5d\xc6\x28\x92\xd3\x31\x45\x24\x28\xcc\xc5\x4d\xdb\x0b\x35\x55\xe6\x4d\x5d\x20\x7c\xd2\x44\x00\xe2\xb1\x8f\x2d\x65\x3a\xbb\x61\xe0\xc8\x79\x8d\x0a\xa9\x3d\x77\x7c\x94\x99\x50\xe7\xe5\x2e\xf6\xcd\xe1\x0e\x8f\x96\x67\xaa\x94\xf3\xcc\xdd\x3f\x1e\xa4\x5f\x92\x24\x0d\x09\x6f\x42\x87\x48\x45\x11\x6e\xfa\xb8\x69\x62\xaa\xe3\x06\x76\x20\x3b\x04\x43\x0a\xaa\x42\x46\xa2\xe5\x89\x16\xef\x29\x94\x66\x1b\xa4\x60\x38\x22\x23\xc6\xb6\xeb\x55\xeb\xef\x9e\xed\x5f\xa9\xcf\xd3\x9a\xcc\xa1\x67\x45\x9a\x98\xcf\x87\x76\x9f\x5c\xab\xc6\x1f\xc1\x95\xd5\x5b\xbb\xec\xeb\xdd\xf0\xdb\xf4\xc3\x33\x62\xdb\x35\xe3\xf2\x48\x89\x3c\x8a\xc5\x34\x06\xa1\x00\x42\x81\x76\x79\x17\x77\x68\x40\xc3\x90\x25\x6d\xd2\xf5\x3d\x84\x9b\xb4\xc0\x4b\x26\x0d\x2c\x18\xc6\xc0\x3a\x5c\x1a\xfa\xc1\xab\x75\x83\x52\xe7\xa5\xb4\xc8\xb3\x74\x4e\xcd\xfc\xb3\x3a\xc2\x12\x99\x33\xe4\xe9\xb7\x30\xb5\x72\xdb\x01\xd5\x22\xaf\x7d\x7c\xbf\x74\xc8\x98\x41\x48\x88\xa6\x69\x7b\x24\x65\x99\x32\x69\x50\x8c\x8d\x2c\x3a\x20\x79\x59\x21\x30\x01\x53\x42\x9c\xe4\x80\x27\xe0\xa4\xc1\xa8\x01\x0a\xb0\xbf\x0a\xe1\x17\xb5\xff\x8f\xd9\xa1\x98\x70\xa6\x65\xd9\x0f\x9b\x87\x37\x1e\x35\x18\x7f\xbf\xff\x17\xcb\xbf\x5d\xb5\x6f\xf3\xfa\xbc\x17\xf2\x14\xdf\x34\xa6\xfc\xc6\x3b\x45\x93\x13\x53\xbd\xd4\xd7\xd3\x8b\xbd\xf1\x67\xe6\xf5\xdf\x98\xb1\x83\xfb\xf9\x8e\x29\xcb\x9b\xce\xfd\x61\xdf\xd2\x2f\x7a\x2f\x1e\xb9\xed\x54\x42\xdf\xa4\xcc\x3b\xe6\x6e\xea\xb3\xa2\x44\x9c\x09\x7a\x19\xca\xc2\x3d\xe0\x7a\x9e\xac\xd9\x14\x60\x55\x17\x10\xb8\x46\xb0\xa6\x41\xd2\x06\x4f\x11\x40\xe0\x71\xa8\x82\x20\x00\x30\xa2\x55\x4d\x0e\x44\x4e\x7b\xfb\xcf\xdc\xdb\xbf\xfe\x87\x91\x9f\x4d\x1a\xed\x90\x97\x8b\x1f\xad\x91\x25\x77\xf1\x31\xcb\x76\x59\x53\x13\x7a\xfc\x5e\xeb\xcf\x59\xaf\xf7\xcd\x4e\xff\x36\x54\x6c\x36\x23\x85\x26\x5d\x4f\x46\xba\xca\x3b\x91\xa3\x53\xb6\xab\x5a\x92\x8e\x20\xc4\x65\xa4\x71\xa4\xa6\x91\x24\xcd\x00\x86\x75\x2d\x8c\xa5\x91\x41\xea\x2c\x95\xc6\x9c\xf7\x48\xb3\x2c\xf7\x1b\x5f\xdb\xf2\xa4\xf7\xb2\xf3\x67\xd5\x2d\x5d\x72\x77\x9d\xdc\xc5\xfd\xfe\x3c\x56\x76\xdc\xec\x3e\x85\xfa\x2c\xed\x2f\xbd\xe1\xe8\x23\xb2\xb5\x78\x77\xd1\xd1\x4e\xbf\x5d\xc5\xce\xac\xfc\x29\xef\xc8\xef\x27\x9f\xec\x79\xe6\xb6\x93\xb1\x5a\x9e\x2a\x03\xd0\x3b\x25\x2a\x8c\x8e\x6f\x4d\xa4\x23\x5b\xf1\x54\x52\x06\x21\xa3\x4a\x81\xe6\xbb\x2c\x66\x0a\x98\x2d\xfa\x98\xef\xab\x3a\x0a\x59\xcd\x21\x59\x11\xfa\xa4\x0a\x14\x43\x80\x98\x87\xa2\xd8\x38\xac\x5a\x91\x45\x9e\xc0\x8e\xee\xec\xb7\xf8\xea\x17\x1b\x4b\x25\x1e\x7c\xf7\xf0\xef\x97\x5d\x29\x61\x4c\xf7\x9f\x2a\x36\x76\xf1\x89\xbd\xe3\x6b\x4e\x91\x43\x04\x01\x45\xea\x9c\xef\x60\x9c\x11\x20\xd9\x33\x42\x43\x41\xa4\x6b\x71\x9a\xe2\x50\xa1\xfd\xbf\xb3\x47\x8a\xc6\x25\x92\xf0\x08\xe4\xe2\x7c\x8c\x45\xa4\xb6\x53\xf2\x36\x9d\xfb\xdb\xc7\xe3\xd6\x69\x83\xca\xdd\x2d\x62\x3d\x6f\x58\x44\x14\x47\xee\x57\xa4\x81\x45\xf7\xae\xaa\x5c\xb2\xb3\x1d\x67\xc2\x37\xca\x70\x23\xd2\x11\x55\x83\x84\x3e\xa5\x59\x3e\x72\x08\x8b\x87\xa1\x60\x45\x24\xc7\x82\xd0\xb2\x09\xc3\x0b\x2d\x45\x14\x14\x40\x1a\xa4\xe9\x40\xe3\xed\xa1\xe9\x9a\x2c\x1d\xf3\xdd\x5b\x38\x74\xf6\x49\xd8\xdf\x9b\x74\xa7\x56\xe7\x03\x1b\x5e\x6e\x5e\x7c\x6d\xff\x37\x64\xe7\x67\x7d\x17\xb7\x1c\x1a\x5f\x1c\x16\x6b\x00\x07\x0f\x02\xc2\xf2\x15\x37\xa0\x42\x43\x16\x38\x89\xc4\x29\x40\x11\x9c\xae\x11\xba\xec\x13\x11\xc7\x6b\xae\xc6\xb9\x34\xc2\x18\x59\xb2\x70\x46\x8b\x5d\x79\x2e\xcf\x3a\xeb\xe6\xd2\xa0\x7d\xde\xcd\x2b\x92\x36\xe6\x58\x9a\xf2\xe4\xf2\x97\x5d\x1b\x3f\x1e\x64\x4f\x5b\x75\x76\xd4\xfa\x5f\x32\xcd\x5a\x1d\xdf\x9c\xcb\x40\x84\x29\x90\x12\x44\x1b\x32\x82\xe0\xc9\xba\x64\xb0\x94\x80\x53\x91\xa5\x7a\x3e\x24\x04\x82\x61\xb8\x80\xf1\x09\x4e\x8c\x0c\xc6\x73\xc8\xc0\xe1\xd2\x40\xa1\xe4\x78\xdc\x9c\x5c\xde\xa6\xf1\xa9\xdb\x15\xff\x14\xad\xd4\x06\x51\xad\xaf\x9f\x7c\x3a\x28\xd1\xee\x33\xbe\xfa\xbe\xca\xbd\xf7\x15\xc8\xfe\xe6\xd3\x9f\xf6\x98\x93\xa2\x64\x29\xfc\xdb\x57\x07\x8a\xec\x98\xdb\xea\xb3\x2d\x2d\xc9\x93\x57\x9a\xdd\xca\xde\x69\x7d\xa5\x5b\x5f\x97\x68\xf2\xae\xf0\x46\xf8\x1d\x78\xe4\x64\xab\x97\xd5\xe5\xf2\xeb\x4a\x3c\xbd\xbe\xb6\xb6\x29\xac\xaf\xd0\x20\xe7\x63\xe6\xd9\x79\x3e\xc7\x37\x35\x37\xf7\xcd\x96\x7e\x37\x8f\xf9\x27\xed\x20\x10\x22\x9a\xe1\x19\x5e\x20\x3d\x64\x70\x94\x0a\x2d\x5a\xa4\x29\x4b\x97\x3c\x82\x82\x14\x04\x8c\x0d\x22\x96\x50\x18\x10\x46\xa2\x21\xc2\x28\x06\x6b\xf7\xd4\xcd\xe5\x77\xff\x96\x54\x65\xdd\xca\x6e\x23\xf3\xab\x2f\x6b\x3c\x59\x77\x66\xec\x82\xbe\xce\x04\x7f\xec\xe3\xec\xe7\x9b\xf5\xba\xfb\x3c\xbe\xf7\x07\x9e\x53\x30\x82\x52\x6d\x1d\x5a\x12\xa1\x52\x92\xaf\x33\x9c\xeb\x89\xb6\xe9\x38\x32\x83\x28\x4b\x0d\x39\x89\xa6\x04\x85\x24\x71\x89\x64\x40\x64\x69\x7f\x1f\x7d\xff\xfd\xbf\x9c\x09\x42\x7d\x77\x86\x1f\xb8\x92\x85\x77\x95\xb8\x7c\x7c\xc8\xd8\x1d\x47\x26\xef\x1c\x55\xb4\x71\xa3\x82\xf6\x27\x65\xe6\x3e\xbb\xdf\xe1\xcd\xa7\x6f\x66\xbe\x58\xae\x71\xd6\x36\x95\x4b\xb7\x99\x3b\xd5\x76\x3f\xdd\x74\xa8\x42\xea\x6f\xd3\x67\xf6\x48\xd9\x50\xf5\x5c\xff\x7d\xe5\xec\x79\x6f\x18\xf6\xe1\x52\xeb\x12\xf3\x5e\xcb\xfb\x9b\x55\x73\x74\x8e\x5f\x06\x4d\xfb\x6c\x76\xd3\xe3\xe2\xa5\xaf\x1f\xb1\x93\x36\xad\xf9\x66\x48\xef\x1d\xc3\xe3\x1b\xac\x5d\x45\x85\x22\x8f\x5b\x2e\xcb\x92\x1e\x22\x55\x13\xf1\x58\x28\x58\x00\x0f\x11\x0d\x6d\x45\x90\x7c\x21\xd4\xbd\x90\xb1\x43\x51\xe7\x2c\x25\x74\x42\x35\x76\xb0\x6e\xf4\xce\xc6\xed\x3f\xe5\xee\xde\xe5\x90\xd6\x68\x73\xe1\xd3\xd9\x7e\xef\x92\xe3\x9d\xbc\xb5\xae\xdf\xe9\xf7\xee\x89\xeb\xb7\xbb\x2c\xe8\x99\x7e\x31\x90\xd8\x20\x06\x92\x11\x18\x89\x60\x09\x43\x93\x6d\x0c\x05\x1a\x08\x2c\xc4\x4b\x0c\xa5\x0b\xc0\x74\xe8\x10\xb0\x21\x24\x4d\x26\x12\x6d\x09\x0b\x04\xd2\x82\x5c\x0c\xfe\xf5\xa4\xed\x3d\x5e\x0e\x5f\x39\x63\x71\xab\x7a\x9b\x1f\x3e\xfb\xb4\xcb\xc5\x9e\x43\xc5\xd1\x2d\xbe\x76\xd9\xf1\x52\xd2\xd9\xba\x09\x5f\x1e\x8e\x6f\x7e\xe1\x05\x86\xf2\x7d\x45\x05\x2c\xce\xe0\x8e\xe6\x68\x50\x55\x1d\x18\x10\x9c\x0d\x42\x81\x37\x3c\x85\x14\x18\xca\x94\x6d\x56\xc3\x70\x44\x1b\xd0\xf8\x17\x47\xc3\x9b\xf9\xa5\x6b\x4a\xe9\xaa\x8b\x26\x26\x0e\x3e\x56\xb9\xf9\x86\x96\x2f\x8e\x1c\x2d\xdb\x62\x78\xab\x0c\xe3\x7b\xe0\x8d\x66\x24\x64\x7f\x72\x69\x49\xf1\x38\x2f\x51\x85\x51\x88\x1b\x1e\xa7\xe1\x40\x22\xb4\xff\x71\x77\x5d\xb2\x5d\x93\x53\x02\x56\xc1\x38\xc1\x95\x43\x8c\xd6\x39\x4c\xc7\x01\x27\x86\x3e\xe9\xcb\x38\x88\xdd\xdd\x68\xb5\xd4\xba\x5c\x74\xd2\xc2\x99\x39\x16\x66\xb9\xdd\x5a\x1f\xba\xf0\xc3\x62\xfb\xae\xaf\x6f\xb3\x68\xd1\xbe\xbd\x5d\x4f\x2e\x56\xc6\xb0\xf1\x0d\xd6\x81\x2f\x9a\x86\xce\xd3\x86\x15\xe2\x94\xa6\x4a\x02\xf2\x08\x97\xc2\x29\x57\x0f\x31\x5a\x06\x3c\xef\x21\x85\x52\x09\x41\x33\x75\xcf\xe6\x59\xcf\xe4\xd2\x50\xc7\x4c\x6a\x72\xfa\xdd\xb6\x0d\x5b\xcc\xbe\xb6\x62\xd4\x0d\x7e\xf1\xb4\xcd\x4f\x13\x16\xc1\x61\xd8\xf8\xcb\x7f\x8e\x52\xad\xdb\x5d\x3f\x4e\x3f\x43\x67\x4c\x03\x61\x5d\x32\x52\x7d\x0e\x68\x88\x34\x82\xc0\xc1\x03\x91\xa1\x2d\x01\x98\x16\xa6\x78\xc8\xf5\x34\x56\xe7\x31\xdc\xd4\x7c\x17\x92\x8a\x23\x69\x88\x56\x63\xf0\x34\x74\x3d\x76\x65\xee\xd4\x61\x8d\x6b\x12\xa5\xde\x59\x56\x7b\xe5\xbe\xcc\x3f\x9f\xff\xe8\xf9\x67\x2d\x3f\xba\x76\xe1\xc0\xd3\xd6\x87\x76\xf4\x4c\x7f\x09\x1e\x1b\xeb\x2b\xfb\x82\x25\x07\xa1\x15\x79\x2e\xcd\x53\xbe\xe0\x70\x3e\x2d\x11\xba\x6f\xc3\x50\x95\x65\x97\x64\x22\xc4\x91\x1c\x66\xfb\x92\x1c\x50\xd0\xc5\xd9\xb4\x02\xea\x1c\x70\x86\xec\xdf\xbb\x73\x83\xef\x7b\x4c\x2f\x59\x77\x61\xc2\xd4\x67\xbf\x1c\x69\x18\x56\xdf\x3d\x2e\xef\xc6\x2c\xf9\xb8\x7c\x2f\x56\xbe\xf1\x5f\x6a\xb4\xba\x34\x7d\xd4\xa1\x6d\xc7\x6e\x7d\xbc\xb2\x71\x8b\xb5\x5f\x64\x3e\x4d\xd0\x65\xb7\x0f\x69\x7d\x72\xf0\xbe\x4c\x67\x4f\x1c\xbe\x43\xc5\x19\xa0\xcf\x6b\xae\x10\xd2\xaa\x44\xc8\x0e\x6d\x91\x22\xce\x39\xac\xa2\xd3\x91\xc9\x05\x72\x40\x29\x0a\x4f\x10\x38\x72\x70\x5b\x0f\x1c\x12\xf0\x38\x43\x23\xf2\xed\x44\x47\x6e\x67\x3f\x6c\xd0\xba\x91\x70\xb7\xde\xb1\x35\x6d\xf7\xce\x49\xa8\xb4\x7e\xec\xb1\x5a\x77\x77\xce\xae\x94\x35\x65\xe2\xaa\x97\x49\x71\x56\x2d\xa5\x21\x54\x90\x20\x01\x45\x0e\x59\x84\x49\x1a\xe4\x4d\x3d\x30\xb5\x50\x91\x55\x8e\xf3\x09\xd5\x08\x7c\x8b\xe5\xf8\x90\xa3\x71\x51\xb2\x6c\x85\x8d\xd2\x68\x4b\x4e\xfe\xe5\xfa\xb9\xb9\xb3\x8a\x4f\x6d\xf6\xaa\xdd\xf2\xae\xf5\x51\xfd\x77\x86\x25\xcd\xdd\x7e\xed\xdd\x8b\x3f\x0c\x2d\xb9\xbe\x7f\x9d\x65\xe9\xef\x6c\xc4\x9e\xae\x19\xaa\xa8\xe3\x5a\x64\xda\x18\xa1\xda\x2c\xd0\x6c\x82\x54\x78\x1b\x0b\x6d\x80\x1c\x12\xb1\xa2\xa8\xb3\x2a\xc6\x10\x80\x8c\x2c\xdb\x42\xc8\x7f\xa3\x45\xf0\x77\x73\x7a\x99\xf0\x72\xd5\xac\x0b\xb7\xeb\x2f\x3d\x51\xf1\x96\xbf\x5f\xec\x75\x7c\xf9\x94\x5d\xf6\x6f\xb7\xfa\xbe\x0e\x1e\x4e\xab\xde\xbf\xf1\xad\x37\x52\xd7\xc0\xe5\x39\xef\xed\x75\x2f\xfc\x79\xe4\xfa\x82\x07\xf5\x9e\x1e\x61\x16\x9e\xea\xd7\x65\x76\xde\x52\x23\x96\x37\xbc\x5a\x63\xef\x44\xfd\x56\x9c\xe9\x8e\x25\x53\x0a\x55\xc7\x52\x38\xcb\x41\x81\x4e\x89\x16\xeb\x99\xba\x21\xf0\xa1\x86\x40\xa8\x40\xe0\xf0\xaa\x40\xe9\xa2\xe8\x02\x12\xc7\x3d\x4c\xc6\xf0\x18\x75\xd3\xd4\xa5\x65\xc5\x1d\xf9\xa4\x15\x57\x12\xda\x7e\xb3\x35\xd7\xaf\x4b\xa7\x9f\x3e\x7a\xef\xd2\xa2\xe3\x0b\x8e\xf5\xf1\x3e\x1e\x03\x7f\x88\xef\x91\xfd\x80\xe7\x04\x5f\xe4\xc3\x48\x16\x6c\xc2\xe7\x91\x6c\x03\x5b\x64\x44\x8f\x10\x91\xc0\x0b\x2e\xcf\x29\x82\x40\xd2\xbe\x41\x61\x36\x69\x13\x12\xc4\x63\x68\x70\xec\xbb\x57\x57\xd9\x3b\x67\xf7\x77\x67\xed\xc3\x5d\x3b\x16\x9e\x7b\xa5\xe0\x67\x1f\x18\xb7\x6f\x29\x15\xc5\x2c\x5f\xff\x32\x74\x59\xb3\x38\x37\xe6\x69\x8f\x21\x3d\x01\x21\x00\x5c\xd7\xe4\x38\x81\x53\x31\xcd\x50\x78\x9e\x89\x64\x80\x11\x3a\x81\x22\x46\x87\x92\x4c\x0a\xb6\x22\x87\x8a\x87\xbb\x5c\x1a\x8a\x54\x45\x3e\x38\xda\xf0\x93\x3b\x47\x6a\x56\x7a\x4f\x2d\xb0\xad\xf7\xfe\x85\xf5\x1e\x9d\x46\x07\x9f\x7c\xd5\xe9\xdd\x3a\x45\xaa\x65\xa9\x7c\xf0\x75\x7c\x73\x80\x1a\xe0\xa1\x6d\x99\x94\x24\x8a\xb4\x83\x0c\x26\x92\x43\xca\xe2\x4c\x4b\xa2\x6c\x5c\x94\x74\xc1\x35\x65\xce\xe3\x29\x29\x60\x31\xcd\xa6\x14\x03\xca\x31\xba\xa8\xad\x87\x71\xef\x2e\xb5\x3e\xfb\x21\xf7\xad\x7e\x47\x26\xcd\x85\x8b\x32\x4e\xb8\x93\x74\x32\xf7\x8f\x5e\xa7\x86\x23\x5e\x64\xfc\xa9\x64\xfa\x65\x43\x62\x37\xe5\x6d\x5c\x53\x25\x1a\xa9\x3a\xed\xf8\x96\x46\xbb\x94\xcc\x5b\x18\x42\x8a\xaf\xf0\x21\xed\xb1\x3c\xeb\x39\x9c\x63\x03\x47\x70\x91\x6d\x70\xa1\xc7\xc1\xb7\x4b\xb1\xbd\x4f\x82\x2d\xae\x90\xbb\xe7\x47\xdf\x5e\xfc\xb6\xf1\xb0\x3a\x59\xab\x3f\xbf\xb7\xe7\xc3\x73\xed\xea\x7c\x33\x7c\x49\xee\x4d\xfd\x52\xba\xc4\xb7\x40\x30\x70\xc9\x8a\xec\xc0\xf4\x3d\x06\xb1\x2c\x8f\x07\xa2\x89\x6c\x8a\xb7\x65\xd9\x60\x3c\x8f\x75\x18\x00\x58\x42\x10\x04\xc4\xd3\x02\xe3\xb9\xc8\x8b\x9c\xd8\x05\x02\x6a\x55\x25\x87\xf5\xb0\xf8\xc5\x59\x1d\xfc\x1a\x0d\xb8\xd9\xad\x5b\x65\x0d\xdd\x3a\xcd\x36\x94\xc9\xf2\xdd\xd8\xc5\x9b\xd6\x0a\x27\xe3\xeb\x86\xa2\x8f\xb3\xba\x0e\x23\x0b\x67\x2d\x19\x33\x54\xd6\x57\xac\x40\xa2\x43\x42\xc7\x14\x5c\x11\x42\x2a\x62\x70\x9a\xb7\xe9\x08\xa9\xba\x25\xb0\x91\x26\x33\x6f\xbb\xe1\xd7\xb9\x72\xe7\xbb\x71\xbb\x21\x35\x27\x5b\xb6\x9e\xc3\x76\x6e\xaf\xfe\xdb\xf9\x09\xf7\xcb\x44\x47\xf4\xe8\x52\x99\x33\x8d\xcb\x16\xbf\x10\x5f\x7b\x06\x90\x61\x3d\x85\x54\x90\xac\x62\x2a\x8d\xe3\x8c\xa2\x41\x9b\x60\x42\x15\x0b\x08\x0a\x70\x7c\xe8\x46\xa6\x05\x25\x47\x22\x5d\x82\xd7\x18\x28\xca\x66\xec\x2f\x3d\xfd\xc7\x6d\x85\x5b\xd0\x55\x86\x55\x48\xf9\x70\xfc\x4b\x3a\x29\x5b\xb8\x77\x51\x86\xd2\x03\x5b\x2f\xc3\x0b\xe4\x68\xf6\x6d\x93\x3b\x4e\x9c\x79\x1a\x18\x84\xd9\x12\xb4\x0c\x82\x86\x92\x47\x70\x44\x40\x30\xac\xac\x1a\x22\xb2\x55\xdb\x22\x69\xdd\xe5\x48\x20\x10\x92\x60\x39\x14\x4d\x11\xb8\xaf\x48\x31\x78\x4c\x1b\xf4\x26\xcf\x2e\xca\xd9\xa9\x80\x49\x50\x8f\x8f\xa6\x04\x5f\x7d\x7c\xf7\xbb\xa4\x4e\x19\x53\x12\x8f\x9c\x78\x78\x6a\xfa\xa6\x86\x71\xb6\x69\x14\x22\xdc\xc3\xcd\x28\x34\x5d\x93\x61\x79\x46\x62\x5d\xd9\xc4\x4d\x22\xf0\x0d\x91\x37\x69\x9b\x90\x7d\x5a\x67\x45\x5c\x13\x69\xd6\xf6\x0d\x85\x4d\x03\x12\xf7\xe5\x27\x2d\xf3\x65\xf5\x0f\x94\x2b\x3c\x62\x6f\xb1\xa1\x5f\x50\xdd\x7b\xd5\x2b\x5a\xbb\xeb\xd2\x6e\xe7\x2f\x1c\xda\xfa\x41\xc3\xa1\xc3\xc6\xc6\x1b\xcf\xea\x0b\x36\xc4\x8c\x80\x97\x55\x37\x12\x79\xc5\x25\x03\x95\x91\x20\x82\x5c\x40\x98\xb4\xc8\x61\x8e\x2a\xb3\x8e\x1b\x30\x6e\xc0\x72\x08\x3a\x90\x4f\x23\xe5\x3f\xab\xba\xfe\x55\xb5\x68\x41\x4a\x4a\xcf\xdc\x35\x7e\xe7\x16\x5c\x1d\x73\xa4\xf0\x83\xf3\x65\x27\x07\x5f\xde\x6c\x42\x96\xad\x7f\xf7\xf4\x1b\x51\x7d\x41\x8d\x9e\x7f\x7e\x5f\xee\x41\xab\x99\x0b\x27\x67\xbe\xf1\x64\xf2\x6f\x39\x26\x5c\x78\x50\xe9\xf2\x61\x26\xe7\xb4\xbe\x37\x0e\x95\x1c\x1e\x67\xc5\x6f\x4a\x60\x08\xce\x36\x75\x53\x61\x64\x01\xe1\x8e\xed\xcb\x3e\x0d\x28\x19\x07\xbc\x4f\x18\x18\x0d\x48\x52\xf7\xa1\xa4\x31\x8a\x1f\xba\xa2\x1c\x2a\xff\xda\xe2\x7b\xd3\x9c\x96\x27\x8c\xad\xd6\xa7\xf7\x2f\xab\x17\x8c\x3f\x53\x7b\x5c\xb1\x05\xa7\xaf\xa4\xd8\x4e\x4d\x79\x31\xe3\xec\x22\x87\x8e\xcb\x56\x74\x42\x9c\x39\x4c\x05\x42\x64\x7d\x97\x20\x48\x8a\x94\x25\x45\x20\x69\x8f\xa7\x58\xc7\x0b\x35\x0f\x73\x00\x87\xe3\xac\xa9\x41\xcc\x34\x1c\x9b\x36\x15\x9a\x09\xe9\x90\x7d\x3b\xaa\x9f\xc2\x86\xcf\x6a\xb1\x6c\xf6\xa6\xc3\x7b\xda\x1c\xa7\xf9\x43\x87\xe1\xa8\x7e\x19\x0b\xa4\x4c\xfe\x72\x0d\x1a\xd1\x66\xe0\xc0\xec\xf1\xdd\xc7\x60\x0c\x9b\x75\x28\xc9\x13\x4c\xcc\x65\x02\x46\x36\x71\x17\x71\x3e\x34\x91\x85\x64\x1a\x23\xe5\x88\x97\x5d\x09\x09\x61\x48\x90\x82\xa9\x8b\x3c\x0d\x6d\x2b\xf6\x80\xa9\x53\x96\xa7\x23\xfe\x98\x64\xe5\x17\x46\x2d\x5c\x37\x31\xcf\xa2\x85\xdd\xdf\x4b\x52\xbf\xcb\x96\xf1\xb7\x6b\xcf\x6f\x5e\xa8\x7a\x68\x66\xbe\x78\x8f\x31\x30\x57\x57\x35\x51\xe3\x34\x89\xf5\x35\x86\x46\x86\xee\x70\x86\x62\x39\x9a\xe8\x7b\x32\xc1\x2a\x84\xa5\xba\x18\xc4\x78\xdd\xc4\x5c\x95\x43\xb2\xfe\x76\xca\x5f\xc7\xf7\xff\xa3\x7a\x65\xfd\x27\xe1\xf8\x38\xb4\xe4\xee\xa2\x83\xed\x26\x9d\xfc\x68\xd0\xbc\x2c\x19\x6f\xac\x9e\xc2\x36\x0a\x3f\xd8\x10\xe7\x0b\xb6\xe4\x19\xa2\x42\xf8\xae\xe6\x0a\x22\xe5\xf9\x92\xe4\xdb\x96\xe6\x98\x9e\x28\x84\xb6\x2c\xa8\xa1\xe5\x39\x3c\x1b\x3a\x88\x0c\x5d\x5a\xb4\x22\x87\x17\x63\x73\x1c\x55\xfa\xb8\x60\x23\x34\xef\x97\x9f\x8f\x5e\xbd\xf3\xe3\xec\xaf\xe6\xfd\xb9\xbc\xe0\xa8\xaf\xf0\x8c\xe7\xea\x5e\xbb\xda\xf4\x4e\xa7\xb6\x1f\x6c\x89\xaf\x4d\x63\x98\x4b\x43\x2d\x32\x45\x9e\x33\x0c\x3f\xa4\x65\x9e\x21\x31\x25\x74\xc8\x00\x79\x1a\x01\x20\x49\x99\x38\x60\x39\x8f\x40\x3c\xd4\x49\x11\xd3\xe5\x18\xcb\xb4\xed\xa7\x78\x62\xf6\x22\x2d\xcb\x76\xf3\x57\x66\xcc\xb8\x67\x4b\xc5\x1d\x8b\xba\x0e\x2f\x32\xe3\x97\xe2\x03\x17\x77\x3b\xbe\x70\xc7\xe4\x47\xf1\xb5\x69\xc2\x77\x55\x3c\xf4\x39\x89\xd3\x35\x16\x4a\x24\xe6\x32\xb6\x0d\x5d\x8b\x05\x2e\xee\xc9\xbc\x19\x44\x86\xad\x12\x96\xc8\x38\x7c\x60\x40\x99\xe1\xf0\x18\x29\x7f\x65\x8e\x84\x6d\xdb\xb6\xcd\x7a\x70\xed\xc1\x9a\x3f\xfe\xbc\xd8\xa3\x4d\x57\x7c\xc5\xbe\xea\x6b\xe6\x5f\xb8\xb1\x69\xf3\xa7\x0b\x1f\x7c\x74\x25\xbe\xf6\x2c\x19\x2a\x21\xf1\x24\xad\xdb\x96\xac\xd9\x86\x40\xe9\xbe\xa7\x6a\x91\xc0\xc0\x00\x23\x03\x51\xb0\x7c\x5d\xb4\x24\x17\xf0\x86\x6e\xe2\xae\x61\x02\xe6\xaf\xf1\xf4\xbf\x79\xe5\xff\x69\xba\x95\x9c\x38\x28\x43\xe6\x0c\x6f\x62\xfd\x3f\xc9\xbb\xb1\xce\xe0\x1a\xdd\x0e\x7c\xe7\x65\x8f\x52\xc6\x5c\xe8\xf2\xde\xaf\xfd\xc1\xd2\x2a\x89\x79\x96\x9d\xbd\xfb\x73\x71\xce\x8a\xef\x58\x98\xe5\x31\x8e\xe6\x28\x08\x15\x57\x23\x45\x41\x86\x00\x02\xcd\x75\xb9\x80\x53\x54\x49\xd5\x2d\x82\xf3\x55\x11\xa3\x2c\xde\xa1\x49\xda\x88\x44\xcb\x55\xa9\xb7\xbd\xf6\x78\xc5\x0b\xaf\x9a\x35\xed\x74\xc6\xa8\x5e\x7e\xff\xaa\xed\xa5\x33\x34\xf8\x71\x6e\x9d\x0d\x77\x3b\x67\xbc\xf7\x99\x7d\xea\xc3\xc2\x0d\xdb\xc6\xf9\xe2\xc9\xa9\x1e\x8b\x41\x5d\xb5\x02\x00\x58\x59\x86\x86\x41\xcb\x94\xec\xa9\x28\xd4\x30\x1d\x71\x36\x0b\x2c\xcd\x24\x00\xe9\x46\xae\x62\xea\x2a\x6f\xcb\xb1\x47\x2f\x6e\xd5\x57\xe7\x67\xec\xf9\xd9\x5a\x7a\xa1\x54\xff\x2c\x1d\x0b\x2d\x6f\x75\xa2\x62\xd9\x01\x5e\xc2\xe1\xce\x2d\x0f\x66\x0b\x4b\xec\x4e\xbf\x4e\x41\xec\x21\x97\x42\xca\x21\xee\xb0\x12\x8f\x21\x8e\xc0\x74\x1e\xe9\x30\x14\x0c\x1a\x86\x40\x77\x2c\x4c\x76\x49\x31\x70\x6d\x91\xc3\x22\x20\x71\xb2\x22\x00\x87\x8b\x7d\xec\xc6\xd9\x33\x94\xee\x77\xed\x50\xf3\xea\x49\x13\x46\x37\x7a\xff\x5a\x93\x84\x5f\x96\x9c\x3b\xd7\xbc\x7f\xc2\x42\xf2\xe5\x36\x2b\xdf\xc0\x38\x0b\xd7\xa8\x14\xcf\x60\x2e\x2b\xd2\x2a\xc5\xe9\x02\x49\x90\x81\x2d\xf2\x3e\x1d\x89\x8e\x87\x28\x12\x02\x19\xd7\x3d\x96\xe4\x14\x33\xa2\x11\x6e\x29\xd0\x52\xfe\xea\x65\xac\xc8\xf1\xdf\xcd\x8a\x92\x13\x13\x33\xd4\x7a\xf7\x4d\x5d\x97\xf7\xea\x2e\x2d\x3f\xa0\xad\xba\x57\xdf\x26\x4b\x77\x46\x65\x1c\x54\x67\xf5\xc9\xb6\x73\x16\xb6\xba\xa8\x97\x2c\x3b\x5e\xbf\xb1\x24\xfd\xe8\xf3\x98\x6f\xc9\x00\x47\x27\x80\x43\x4a\x36\xc9\x58\x3a\x6e\x1a\x10\xe9\x81\x1a\x98\x84\x07\x2d\x2a\xf2\xa1\x4e\xd2\x11\xe6\xcb\x74\x80\x48\x1a\x62\x2c\xa5\x44\x6e\xec\x9f\x93\xf2\x43\xab\x89\xb5\x3f\x48\xd9\xb2\x6b\x08\x97\xa7\xde\x92\xce\xe7\x2f\x2f\x5e\xb6\xf4\xde\xc3\x61\x2d\x1f\x74\xac\x5e\x7a\x4c\xea\xe9\xf4\x63\x6e\x63\xd3\x2a\xf0\xa1\x6d\xe0\x96\xa0\x7b\x82\xc5\xa8\x16\x45\x4b\x84\x68\x28\xba\x44\xca\x8e\xc0\x07\xbe\x0c\x78\xc9\x22\x75\x2c\xa4\x09\x9b\xe5\x00\x0d\xc8\xb4\x38\x0a\xb2\x77\x3a\xc9\x1d\x29\x95\x0c\xbb\xfc\x90\x34\xd1\x7b\xb4\xef\xd3\x02\x64\xb1\x21\xb7\xf6\x9d\x38\x3b\x33\x3a\xae\x36\x4a\x1d\x1d\x5f\x86\x13\x86\x35\x70\x5b\x80\x11\x2f\x03\x4d\x20\x59\x87\x08\x41\x28\x10\xbc\x4f\xd2\x4c\xe0\xb0\x36\xef\x09\x84\x23\x13\xae\x6a\x51\xa1\x1b\x9a\x46\x44\xfb\x5c\x8c\x04\x56\x34\xd3\xe2\xd3\x52\x8f\x0c\x83\xe4\x3c\x5b\xdb\x67\x1e\xf9\xc5\xe0\x86\xfd\xbd\xea\xf0\x21\x7b\xb2\x5e\x23\x26\xa3\x3e\xe4\xc3\xf4\xeb\x46\xc6\xc6\x92\xe3\xb8\x64\x38\x1a\x21\x09\xac\x17\x0a\x4a\x40\x06\x9a\x6f\x30\xbc\xad\x08\x36\x21\x9b\x26\x0d\x81\x1c\x49\x0a\x63\xab\x2a\x0e\x7d\xce\x76\x55\xdc\x8a\xdd\x89\xac\xb5\x6f\xeb\xbb\x43\xbe\xfa\x78\xcd\xd9\x9d\xd3\xbf\xa2\xce\x8d\xcf\xb1\xae\x2a\xf7\x47\x70\xe5\x3e\x51\xfc\xfb\x2f\xbf\xd9\x3c\x85\x8e\x33\x86\xc1\x63\x29\x19\x40\x17\x85\x02\xcf\x5a\x86\x48\xd1\x3a\x2d\x91\x9a\x4a\x00\x1c\x8a\x4c\x20\x43\x53\x32\xa1\x62\x09\x9e\xa7\x28\x50\x14\x11\x54\xe4\x34\x1a\xa8\x9c\x7a\xac\x8b\xc3\xf6\xad\x5f\x8f\xcb\xd6\x7a\xc5\x80\x8d\x2b\xea\x59\xb3\x7b\x6c\xef\xde\xac\x56\xf9\x61\xa3\x16\xef\xab\xda\x2a\xfd\x24\xc1\xb1\x57\xec\x11\xcf\x09\x62\x68\x91\x32\x45\x68\xb4\x66\x04\x0c\x90\x0c\x20\x78\xae\x0a\x43\xa0\x45\x90\x20\x49\x44\xa8\x96\x6d\x70\x3a\xa5\x32\x4a\xe0\x69\x69\x20\xda\x72\x5c\x6b\xfc\xc9\x90\xa2\x67\xb2\x66\xeb\x33\x42\xdb\x7e\x68\xe4\x84\x2a\xdd\xaf\xdd\x7d\x92\xdd\xdf\x59\xb1\x69\x31\x4a\x3a\x7e\x7b\x65\x7c\x4b\x06\x8d\xe4\x01\xe6\x99\x3e\x27\xf1\x88\x97\x3c\x93\x15\x60\xa0\x39\xbc\x4d\xb3\xae\x26\x2a\x88\xf7\xf5\xc0\x44\xa4\x63\x30\xb6\x17\x50\x9c\xc4\xfc\x9f\xf0\xcf\x1b\x1a\x1c\xff\x34\x29\x4f\x6e\x92\x98\xed\x3f\xf6\x64\xc1\xb4\xc1\xd6\x82\x54\x50\x4c\x4e\x39\xd6\xf5\xfc\xe4\x6a\x56\x8e\xe7\xdf\xe7\xfb\x8e\xe9\x3d\x6e\x46\x72\x13\x98\xa9\x62\x34\x27\xce\x4c\xc8\x56\x80\x89\x3c\x1f\x0a\x80\xa6\x08\x5d\x80\x41\x00\xf5\x10\x97\x2c\x5d\xc5\x69\xca\x0d\x38\xda\x03\xa1\xc0\xa8\x82\x42\x0a\xbe\x40\x93\x91\xc5\xa5\x81\x25\x2f\x95\xb1\xfe\xeb\xda\x77\x95\x31\x5b\x2a\x2d\x9d\x71\x63\xf2\xe0\xef\xb3\xfb\x03\x96\xe6\x79\xfe\xc3\x2f\x9b\x57\xb7\xc5\x9f\x4c\x46\xdf\xc6\xb7\x6a\x20\x3d\x33\x60\x23\x35\xe2\x02\x25\x12\x18\x56\x33\x39\xd7\xc3\x34\x1d\xb0\x2c\x83\x02\xc3\xa7\x4c\x00\x6d\x55\x90\x15\xd3\xb5\x2d\x0f\x77\x28\x3d\xa2\x63\x47\xf8\xce\x7b\x3e\xdd\x3b\x9b\x98\xbb\xbd\xc6\x7d\xc5\xae\x2b\xff\x36\xe2\xd2\xc5\xe5\x43\x2e\xe5\xac\x70\x8c\x3d\x78\x75\x13\x5e\xe4\xab\x32\x71\x76\x60\xdd\x55\x03\x82\xe6\x80\x42\x42\x82\x13\x4d\x14\x81\x28\x80\x96\xa9\x98\x98\xc3\x89\x18\x1d\x29\x08\xe0\x3c\x43\xe8\x8e\x44\x30\x90\x50\x39\x27\x8d\xad\x64\x7a\xdd\xe9\xe4\x5c\x17\x0b\x34\x39\xb2\xf4\xcf\x4c\x09\xc7\x24\xf6\x71\xaf\x3c\xfb\xb3\xe4\x3f\x3e\x79\x9f\x73\xaa\xf3\x1f\xc3\x8f\xdf\x8c\xef\xb1\xf9\x10\x57\x28\x9a\xb5\x78\x03\x60\x3e\xa6\x61\x1a\xf4\x04\x5e\x89\x1c\x91\x12\x59\x5a\x96\x02\x4c\x72\x29\xca\x27\x04\x85\x91\x68\xc6\xb7\x04\xfd\x6f\x4b\x68\xff\xae\x1a\xfe\x09\x9b\x90\x9c\xf8\xf1\xc7\x19\x93\x86\xbd\x91\xc7\x7a\xbd\x37\xe1\x41\xe5\x02\xed\x96\x51\x95\xd1\x9f\x3d\x74\xaf\x4f\xf7\x55\x47\x96\x34\xc8\x3a\xe1\xe9\x91\x62\x7b\xe7\x4c\xaa\xb2\xa6\x6b\x9c\xc9\xc5\x34\x1f\x48\x24\xc5\xf8\xc8\xa2\x08\x97\xd1\x45\x86\x90\x44\x0c\xc3\x4d\x1b\xb2\x38\xa7\xab\x9a\xa1\xb0\x82\x0f\x58\x87\x55\x4c\xce\x53\x90\x1b\xc5\x20\x17\xbb\x78\x67\x5b\x8e\x79\x29\x79\x36\x8f\x9e\x72\x65\xd2\xe0\x32\x79\x9a\xed\x6b\xf2\xe7\xb6\x65\x19\xd6\x5e\xfb\x6e\x40\xfd\x35\x9b\x9f\x4b\xe9\xd7\xf4\x8e\x79\x64\x15\x0b\x35\x9c\xc3\x39\x1d\x82\x00\x1a\x88\x12\x65\x02\xb1\xa2\xac\xc9\x08\x5a\x88\x09\x2d\x87\x41\x5c\xa8\x11\x16\x29\xf2\x0a\x2d\xb0\x8c\xc8\x89\xb1\xed\x89\x9a\x7b\x7e\xd8\x93\x73\x6b\x7e\x48\x6c\x81\x4a\x64\x3f\x3f\x73\x7e\xd7\x42\x39\xcb\xe4\xda\xf1\x7e\xbf\x67\x1a\xd7\x6d\x65\xb1\xef\xd3\xaf\x4d\x16\x5b\x82\x43\x67\x6c\xd6\x50\x39\xc4\x7a\x90\xf3\x2d\x5c\xf5\x68\x55\xf4\x70\x8e\xc1\x74\x01\xb3\x02\x2d\x34\xb4\x10\x37\x71\x4e\xf2\x29\x8b\xf5\x40\xe8\x84\x69\x78\x6f\xcd\xa3\x29\x9b\x7e\x4e\xe9\xf1\x04\x94\xed\x58\xe9\x40\xd8\xbc\x69\x9d\x85\x73\xe6\x0e\x29\xfb\xe0\xf5\xf8\x66\x35\x33\xe4\xd5\xb4\xf4\x0b\xd8\xc5\x2e\x74\x14\x0e\x05\x12\x11\xb0\x0c\xc3\x9b\x44\xc8\x50\xd0\x33\x28\x49\x61\xf1\x90\x15\x75\x1d\x47\x84\xa1\x10\x01\x41\x19\xba\x06\x48\x60\x3a\x2a\x60\xfd\xd8\x5f\x7b\xff\x5e\xae\x7c\x42\xdb\x32\x5b\xc8\x89\x67\xa6\x8f\x1c\x93\x65\xc4\x89\x46\x2f\x2d\x62\xab\x68\x36\xae\x74\x74\x6c\xa3\xc2\x9d\xe7\xc7\xb7\x1a\x36\x31\x9a\x71\x5d\x1d\xb2\x3e\x1f\x8a\x94\x2c\x51\x8e\x65\x07\xbe\x47\x00\x96\x92\x64\x1a\x98\xbe\xaa\x70\x0c\xc3\xb8\x21\xc0\x7c\xcf\xa6\x83\x08\x83\xb1\xbf\xf6\x86\x15\x99\xc7\x76\x1f\xb1\xb7\xd5\xd1\x31\x3d\x5e\x94\x39\x75\x6e\xfd\x5e\x90\x97\xfc\x86\xe8\x59\x7f\x9d\xf0\x64\xfa\xee\x1e\xa7\xd3\xdf\x81\x8a\xcd\xaa\xe8\x32\x84\x88\x1c\x5c\x11\xd5\x88\xa6\x09\xc6\x36\x19\x4d\x34\x09\x28\x7a\x16\x23\xfb\x9a\x86\x19\x6a\x04\x25\xc6\x91\x25\x3d\x74\x18\xcf\x55\xd3\xb2\xed\xf3\xf7\x97\xb4\x39\xf2\x6a\xf2\xc1\x3b\xd3\xbe\x59\x98\x19\xb2\x55\xc7\x62\x27\xca\xd5\x78\x9d\xab\x5c\xc7\xab\xb5\x07\x65\x28\xdc\x38\xfd\x9a\x92\xb1\x5d\x92\x73\x0d\x0f\x10\x98\x66\x1a\xb8\x11\x59\x16\xe7\xc8\x8e\x4e\x07\xba\x62\x22\x20\xf2\x4c\x64\x52\x32\x23\x20\xd2\xe4\x59\x39\x74\x09\x0d\x79\xd8\x5f\x51\x64\x4f\xc2\x7f\x87\xcc\x4a\x6e\xf2\xce\xa0\xdc\x6f\x6e\x83\x74\x8d\x66\xf7\xd9\xb5\xba\x49\x8e\x27\x77\xbb\x95\xeb\x78\x02\x8c\x3e\x19\xb4\x3d\xb8\xa2\xdc\x82\x62\x79\xe8\x0d\xaf\x2a\xb7\x86\xf1\x25\x4e\x60\x91\xc1\xea\x1c\x27\x87\x96\xca\xfb\x21\x6f\x09\x81\x61\xd8\x8a\x8d\xab\xac\xaa\x73\xd0\x91\x24\xc3\xb6\x03\x5b\xd4\x59\x97\x16\xe5\x50\x60\x0d\xd7\xe1\x62\xff\x9b\xab\xe1\xec\x72\x7b\xba\x96\xba\xfb\xfe\xc5\x2c\xe7\x0b\xe5\x10\xbf\xaf\x3b\x7d\xd1\x9f\xcd\xee\x70\x4f\xab\x16\xd3\x12\x3b\xd5\xec\x0a\xe3\xeb\x09\x12\xeb\xe3\xa4\xce\x38\x6a\x24\x79\x82\x1c\xfa\x3c\xe1\x8b\x11\xe3\x48\xae\x48\xe2\x74\xa4\xd3\x5e\xa0\xb8\x12\xaf\x3b\x1e\x60\x6d\x4e\x17\x01\x64\xd3\xb8\xb4\xdf\x29\x3b\x65\xef\xc4\x63\xa5\x46\x9c\x9b\xc8\x58\x7b\x73\xd2\x5f\x57\x2d\x52\xaf\xcf\xc3\x6c\xa5\x67\xb5\x6c\xf0\xaa\xf1\x95\x5f\x3a\x4d\x89\x6f\x21\x8a\xd9\x41\x84\x21\x8d\xb5\x48\xc7\x74\x3d\xd2\xb0\x8d\xc0\x10\xa5\xd0\xd4\x1d\xdc\x21\x28\x2a\xd0\x2c\x87\x53\x6d\xc5\x0d\x58\x5a\x01\x9e\xac\x98\x4a\x1a\x74\x08\xa5\x92\xce\xe2\x4d\x8d\xdb\xbd\x8e\x2d\x9f\xd2\xa1\x49\xf6\xbc\x75\x94\xd7\x13\x7e\x4f\xbc\x32\x6f\x4f\xcf\x56\x9b\xba\x24\xd6\xeb\x96\xfe\x79\x66\xcc\x28\xef\xd8\xa4\x13\x59\x8a\xc6\xf3\xaa\x00\x44\x56\x0a\x22\x20\xa9\x0c\x61\x60\x88\x0a\x85\x10\xc8\x81\x80\x45\x04\x30\x28\x36\x72\xa1\x8c\x08\xc6\x72\xd2\x20\x05\x99\xf3\x71\xe7\xa9\xfb\xcf\xb6\xba\xd4\xe0\x45\xc3\x7b\x79\x27\x62\xd4\xad\xa1\xdd\x06\xf7\x3d\x76\xf6\x44\xdf\x9e\x6b\x26\x8c\xe8\x35\x64\x62\x9c\x6b\x34\x43\x88\xc8\x88\x04\x40\xa1\x58\x8c\xe0\x30\xd1\xf4\x54\x89\x0b\x68\xc5\xc7\x30\x8c\xf2\x69\xcc\x31\x4c\xc3\x09\x55\x22\xb0\x6c\xc0\x73\x34\x81\xfd\xb5\x67\xfc\xef\x4e\xe1\x3f\xe1\x86\x92\x13\x33\xfd\x9f\x02\xe5\x5f\xc5\x4e\xfd\x56\xe3\x07\xe6\x2f\x74\x3e\x4f\xee\x89\x05\xbb\xee\x09\x27\x7e\x59\xa8\x64\xa5\x07\x39\x96\xd4\x7e\xf9\x81\xd6\xc4\x2c\x5e\x74\xcc\xd0\x38\xe3\x64\x39\xca\xf2\x58\x37\xd2\x19\x8c\x08\x59\x8a\x0d\x1c\x64\x98\x90\x76\x45\xce\x40\x2c\x20\x08\x5c\x87\x3a\xa7\xda\xa6\xc1\x8b\x88\xd3\x42\xc5\x44\x31\x34\x0c\xee\x45\x99\x1b\x74\x29\xb5\x8a\xea\x5b\xd2\x98\xb2\xb2\x71\xa9\x1f\xe5\x95\xe5\x32\xcc\x98\x3e\xfe\xe5\xbc\x47\x5f\x96\x9f\x8c\x67\x4e\x3f\x87\x58\xcc\xa0\xe3\x08\x81\x45\x6b\x8c\xc0\x79\xa6\xea\x30\x7c\xc4\xf1\xb8\x87\x11\x81\xa1\x9a\x0a\xc7\xd8\xba\xad\x49\x94\x04\xc2\x20\xa0\x5c\x06\x71\x98\xc4\x01\xc6\x8b\x1d\x74\xfa\x1f\xef\x68\x4d\x1b\x34\xaa\x4d\x9f\xc6\x83\x1b\xce\x98\xbf\xf2\x4c\xdf\x8f\xab\xdd\xce\x35\xff\xb3\x89\x44\xa6\xce\xe7\x4e\x16\x7d\x27\xfd\xfc\x2b\xb1\xbd\xd7\x30\x6c\x83\xf2\x4d\x09\x97\x69\x45\xd0\x74\x3e\xb0\x4d\x42\xc5\xbc\x40\x12\x44\x8c\x51\x45\x24\x2b\x38\xe3\xfa\xa6\xc4\x0b\x18\x92\x84\x48\x81\x28\xb6\xf7\xd6\x5e\xbd\xe4\x79\xb9\x1f\x5f\x9f\x9c\xf7\x65\xa0\xe7\xae\xa5\x34\xad\xf9\xa4\xd1\x3b\x74\xe5\xaa\x1d\x0b\xac\x5d\x50\xfe\x4a\xdf\x1a\xe9\x77\x83\x98\x97\xf6\xc8\xb5\x1d\x3f\x40\x38\xcb\x3b\x96\xa0\x62\x14\xed\xcb\x98\x64\x61\xbc\x4b\x78\x9c\x88\xfb\xba\xa0\x2a\x32\x6b\x73\xbc\xe1\x88\x0e\xd0\x81\x15\xda\xfa\x5b\xb7\xdf\x7f\xc2\x3b\x25\x37\xf9\xa0\xe9\x7f\x70\x0a\x18\xde\xc6\x36\x15\x87\x7c\x50\xf9\x8f\x27\x24\xb3\xe6\xfc\xf4\xee\x54\x9b\x49\x39\xb2\x05\x67\x76\x7d\x74\xb0\x77\xa5\x16\xe4\xca\x7e\xf1\x7d\x49\x85\xf0\xf4\x80\x8a\x58\xc1\x54\x48\x1f\x23\x4d\x93\x76\x04\x9b\xc7\x2c\x9e\xf4\x30\x3a\x10\x43\xdf\xb4\xc3\xd0\xd5\x21\x4f\x60\x96\x2b\x08\x20\xe4\xd9\xd8\xff\xe6\x6e\x93\x22\xf2\x95\xb2\x83\x5f\x3e\x4d\xd0\x86\x1f\x01\x19\xbc\x42\x0f\x1f\x3d\x1f\xb2\xf2\x49\xfb\x9c\x2d\xc4\x03\x25\x1e\x96\x48\xff\xc8\x28\xf6\x32\xa6\x46\x47\x9a\xcb\x0a\x84\x64\x99\x18\x2f\xd1\xb6\x8b\xdb\x3a\x92\x0c\x89\xa1\xe9\x48\x74\x20\x0e\xa2\x50\xc3\xf5\x48\x17\x43\x33\xa0\x21\x32\x54\x29\x76\x64\xbd\xde\x62\xa5\x34\xe3\xe0\xbc\xfc\x25\x7a\xb4\xff\xf1\xf0\xbc\x65\xa9\xc3\xa7\x6d\x9d\xd5\xd9\x68\x9b\x65\xe4\x17\xf7\x4c\x6c\xde\xfb\x44\x9c\xc9\xad\x00\x6d\x5a\xac\x65\x93\x7e\x84\x34\x1b\xf9\x81\x87\x0c\xc1\x74\x5d\x5d\x32\x49\x0d\x6a\x24\x30\x29\xc7\x56\x22\x42\x30\x01\xb2\x6c\xc3\xb4\xa3\x34\xa8\xe9\x66\xfd\x98\xb3\xc1\x82\x35\xf5\x3f\x6d\xff\x7c\xe1\x67\xad\x86\x2d\x01\xc6\xde\xd4\x62\x15\xa7\x37\x35\x53\xa6\x6d\x2a\x3f\x4a\x96\xd2\xdf\x6b\x48\x83\x4a\xcc\x82\x8c\xeb\x38\x96\xa9\xa9\xba\x68\x99\x48\xa2\x10\x86\xb9\x2e\x1d\x22\x46\x60\x55\xa8\x59\x14\x23\x72\x5e\x10\xf0\x9a\x8a\x30\xcb\xd6\xff\x46\x3a\xfd\xef\x84\xf0\x4f\x30\x80\xe4\xc4\x2c\x19\x32\xfe\x87\x24\xb1\xdf\x2e\x71\x77\xa2\xd6\xfc\x6e\x69\x86\xb9\x32\x66\xf8\xb0\x5b\x3f\x76\xa9\x71\xe2\xf7\x66\x1f\x97\xb9\x5c\x81\x9a\x75\x60\x1e\x48\x8e\xef\x5b\x12\x92\xe2\x70\x98\xc4\xeb\x3c\xc2\x44\x19\x49\x2c\x2f\x86\x76\xa0\x47\x3a\xc3\x31\x8c\x80\x34\xd2\x53\x5c\x60\xeb\xb4\x24\xf3\x1a\x2d\x9a\xc0\x89\xc2\xd8\xd1\xb5\xe8\x8d\xcf\xf3\x2e\x54\xf7\xe5\xfb\xa3\xed\xf3\x91\x39\xe9\xe3\xd7\xca\x7d\xb1\x6a\x5e\x9e\xb6\x56\x75\xe7\xc0\xd2\x6a\x5f\x57\xba\x1b\xe7\x92\x2e\x20\x1d\xc1\x56\x09\xc4\x05\x38\x45\xb9\x80\x8e\x14\x05\xc1\x80\x23\x81\x20\xba\x12\x6e\xd3\x84\x6b\xb3\xb8\x60\x05\xbe\xcf\x29\x36\x74\x79\xea\x4d\xe6\xb1\xbf\xd2\xef\xee\xdb\xdf\x76\xbd\x50\xfb\xda\xb8\x9c\xbb\x5f\x7c\xb6\x75\x7b\xfe\xf2\xc3\x0f\x9c\x5c\x98\xba\x69\x66\xbf\xcd\x4b\x16\xde\xea\x37\xb6\x60\x9c\xb9\xaa\x7d\x47\xc0\x78\x12\x41\x60\x9b\xb4\xa2\x23\x9f\x81\x50\x86\x94\xc8\xd2\x92\x43\xf1\x7a\xe4\x49\x82\x63\xf8\x3a\x94\x1c\xc1\xb2\x1c\x45\x75\x68\xde\x7e\x7b\x50\xf7\xb0\xea\xd6\xbe\x60\x9d\xd9\xb0\xe4\x9f\x1d\x88\x05\x0f\x57\x1e\xbd\x71\xbc\xf0\xb3\xce\x0f\xc8\xf7\x56\x0e\xd9\xbf\x6d\x73\x8f\xba\x7f\xc6\xd7\x7b\x5d\x0c\xb0\xb4\x00\x3d\x86\x03\x12\x10\x1c\xcc\xa7\x0c\x4d\xd0\x7c\x2f\x34\x69\x1d\xa3\x03\xcd\xe3\x91\xe6\x43\x9e\x73\x71\x5c\x30\x7c\x96\x95\xe0\x5f\x43\x95\x9d\x1f\xfd\xeb\xc4\x83\x7b\x17\x48\xac\x11\x7c\x34\xb0\x52\xd2\xe7\xfe\xc6\xad\x97\x36\xef\x6c\x53\x2d\x21\xff\xe8\x02\x45\x27\x6c\xdc\x5f\x79\xf1\xd6\x3f\xa5\xe4\xc4\x17\xaf\x5f\x5d\x9c\x5e\xfc\x4d\x0c\xcd\xa3\x6d\x9d\x5f\x25\xbf\x94\xb6\x0e\xe9\x35\x5d\x01\x13\xb5\x79\xd5\xb6\x3d\x38\x90\xe3\xd6\x84\x9f\xb7\x14\x45\xdf\x4a\xb8\x7b\xfd\x8d\xe1\x7d\xde\xea\x37\xe5\x56\xd7\x5f\x8a\xea\xc2\x15\x1b\x16\x0c\x94\xdd\x0b\x47\x76\xd6\x9c\x9e\x38\x48\xbc\xb5\xfa\x74\x94\xa9\xcf\xf3\xf4\xeb\x34\xc7\x6e\x09\x78\x36\x6e\x47\x46\x88\xfd\xcf\x7f\x72\xa1\xe9\xe8\xd0\x67\xf5\x08\x28\x2c\xae\x01\x06\xe7\x03\x9a\x55\x05\x4a\x08\x22\xe8\x6a\x34\x70\x01\xcf\xc5\x50\xe0\x28\x3a\xf3\xc0\x97\x5b\x9e\x34\x1c\x15\xec\xed\xa6\xac\xcb\xfc\xcd\x91\x47\x43\x9e\x1d\xf0\xeb\x5f\x2a\x53\x8a\x5c\x9a\x9a\xb7\xd6\x8a\xdc\xf1\xcd\x79\x21\x83\x4b\xb8\xae\x58\xb6\x49\xc3\x40\x53\x95\xd0\x92\x88\x30\x90\x19\x8c\x96\x44\x43\x09\x08\xc2\xe7\x49\x3f\xf0\x59\xc8\xfa\xba\xc9\x88\x22\x07\xb1\xb7\x4d\x6f\xb8\xcc\x8b\x27\xf3\xbc\x9f\xd2\x61\xb6\xd1\xf5\xeb\x54\x71\xdc\xe1\xd4\xeb\xad\xee\x6f\xed\x7b\xa1\x56\xc1\xe5\xdf\xdc\x29\x9b\x1c\xe7\x05\x55\x8f\x05\x50\x62\xd5\x48\xb1\x29\xda\x30\xf9\x00\x02\x3a\xc0\x31\xd2\xf5\x0c\x3a\x34\x54\x42\x35\x18\x2a\x52\x31\xa0\x32\x82\xc6\x68\xac\x2d\xd3\x2a\x88\xed\xe4\x79\x7e\x2d\x34\xa2\x4f\xab\x41\x33\x2f\x59\xf8\xe7\x2d\xab\xad\x5e\x7f\x6e\xf3\xb9\x65\x93\xaf\x8d\xcd\xf5\xc9\xe3\x89\x1b\x36\x5c\x93\xe2\x3b\xcf\x63\x34\xcc\x30\xd5\x08\xc9\x82\x02\x14\xdd\x53\x39\x5d\x88\xbc\x80\x35\xa0\x05\x25\x57\x67\x65\x4b\x70\x1c\x86\x8c\x28\x1c\x17\x22\x8d\x37\x2c\x3d\x8a\xc0\xdb\xc6\x31\xaf\xc3\x9a\x0f\xb6\xce\xcf\x33\x34\x47\xcd\x4d\x15\x5a\xe4\xcb\x32\x71\x0f\x5e\x3e\xd7\xab\xc2\xa9\x75\xa7\xfb\x6d\x26\x1e\x9f\x9c\x23\xfd\x8a\x32\x31\x8d\x03\x33\x69\x45\xe1\x04\xce\x03\x36\x8f\x63\x8e\xea\x40\x9f\x20\x2d\x1e\xd2\x8a\x1d\x98\x48\xf1\xec\xff\x49\x05\x01\x10\x58\x14\x45\x6c\x00\x05\x99\x41\xb1\x31\x34\x51\xb9\xb6\x9f\x2f\xea\x9f\x3a\x77\xde\x83\xea\x95\x22\x6b\xf2\x92\xbc\x35\xa8\x62\x4b\x5b\x26\xf4\x1f\xdf\xff\xdb\x05\x97\xce\x0f\x8a\x2f\x0d\x2b\x8b\x43\x60\x50\x02\x50\x81\x20\x00\xdd\x27\x34\x92\xf7\x61\x60\xd8\x01\x4f\xb9\x1a\x21\x4b\x92\xe2\xf8\x92\xea\x9a\x9e\x85\x38\x3b\xb0\x7c\x5a\xe0\x62\xc8\xb3\x0c\x9f\xba\x23\x69\xd1\xa8\x4c\xdd\xda\x74\xac\x51\xaf\x4c\xbb\xdf\xd7\x7d\xf4\x72\xd3\xa0\x8f\x86\x57\x79\xbf\xe2\xb1\x5b\x2f\xae\x74\x2f\x97\xfe\xc5\xab\x98\xc6\x21\x05\x34\xcd\x2a\xbc\x6e\x31\x1e\x46\xb3\x9c\xac\x2b\xa6\x69\x7b\x8c\x47\x4a\x94\xca\x13\x04\x43\x92\x04\xa1\x05\xac\x46\x69\xba\x4d\x11\xbe\xe0\x40\xe5\x6d\xe3\x58\xbb\xea\xf2\xb5\x45\x4a\xf7\xa9\x4f\x26\xa7\x16\x38\xbf\xb6\x69\xdb\xd1\xed\x47\x80\x3b\x03\x13\xa3\x8a\x87\x0e\x17\x1e\xde\x66\x68\xfa\x61\x3f\xb1\x99\x24\x09\xd2\xf1\x69\xc6\x04\x9c\x64\x46\x81\xe1\x5b\xa2\x46\xff\x2f\x5e\xc3\x20\x81\x64\x78\x06\x14\x79\xc7\x93\x19\x52\x87\x0c\xa4\x1d\x00\xd8\x7f\xd1\x32\xbe\x3d\x9f\x9e\xbb\x6e\x5b\x72\x7b\xf4\x41\x93\x2a\x13\x6e\x7c\xdd\x60\x4b\xae\x5e\xab\xdf\xab\x2f\x13\xda\x8b\xd3\x43\x17\x2e\x6a\xff\xcb\xbe\xfe\x97\xe2\xcc\xd5\xce\x73\x51\x18\x62\xac\xa9\x58\x98\x87\x4c\xa4\x42\x36\x42\x9c\xc6\xcb\x48\xc4\x2d\x4c\x75\x45\xdf\xf3\x2c\xca\xb0\x5d\x08\x42\x45\x20\x74\x1c\x11\x6f\x1b\xc7\xb3\xfe\xd8\xb6\x13\x59\xf2\x25\x2d\x1a\x80\x6f\x3c\xb8\x38\xb5\xd1\x7b\x4f\xca\xee\xb3\xa9\xe6\x07\x1b\xfb\xeb\x33\x76\x68\x9d\x37\xfd\x00\x86\x98\xf6\xcc\x86\x90\xa3\x28\x06\xb3\x82\x80\x31\x1d\x91\x26\x24\x84\x58\x85\x17\x59\x07\x07\xd0\x62\x64\xdd\xb2\x75\xc1\x14\x49\x42\xa7\x34\x5a\xd1\x74\xff\x6f\xf2\x93\x6f\x14\x63\xf9\xe7\x76\xc8\x5f\x6b\x5d\xd4\xf4\x7b\xbb\x5d\xdf\xc3\xcb\x4f\x3d\xbc\xf0\x74\xcb\xcc\xcd\x7f\x3c\x39\xfb\xc1\xab\xdc\x3f\x53\x1b\xd7\xc6\xb7\x75\xc2\x06\x2e\xc7\x10\x11\xa6\x86\x11\x27\xf3\x9a\x60\x8b\xb6\x23\xba\x3e\x94\x64\xdb\x37\x0d\x1b\x20\x3a\x20\x3d\x3c\xd2\x25\xd3\x75\x2c\xc1\xd5\x1c\x0f\xc1\x34\x16\xaf\x06\x6c\xca\x51\x65\xc3\x9d\x47\xd7\x1e\x64\xff\xc1\x78\x72\xa0\x73\x91\x4b\xf3\x0b\x9c\xf8\xfc\x27\x77\xe1\xab\xa1\x2b\x1b\x9e\x7c\x5c\x69\xef\x1b\x2f\xd9\xa3\xc6\xeb\xcb\xab\x0a\xf7\x29\xf9\xbc\xe5\x17\xc0\x2a\xd8\xf6\xe6\xe0\xeb\x07\xc5\x0f\xbf\x39\xee\x64\xfb\x6e\x5a\x83\xdc\x45\x5e\x9c\x8b\xaf\xe3\x0a\x81\x14\xe0\xbc\xa6\x1b\x2c\x49\xa9\x91\xc7\xd2\x12\x92\x22\x17\x41\x96\x56\x24\xc1\x72\x2c\x4d\x65\x3c\x5e\x72\x3c\xc9\xb5\x02\x2f\x62\x79\x1b\x0b\x63\xef\x70\x64\xec\x31\xb9\xc8\x27\xec\xea\x93\x93\xf2\xff\xba\xbc\xdc\x86\x7a\x73\x53\x52\xe9\x61\x7b\xd6\x8e\x9b\x69\x0c\xdc\x2b\x5c\xc8\xbd\x34\xfd\xc8\x9f\xd8\x34\x56\xba\x25\x5b\x41\x14\x51\x80\xe4\x29\x60\xe8\x48\x14\x2d\x59\x12\xa2\x50\x8d\x3c\xc1\xe3\x58\xdc\x24\x00\xa3\xb2\x8a\x42\xbb\x38\xaf\xeb\xb8\x8b\x71\x6f\x7b\x41\xe1\xdf\x7e\xa7\x57\xdf\x30\x1f\x5f\xca\x7a\xb0\x51\xa5\x5d\xdf\x27\x7d\xc9\x4c\xbc\xde\xa8\xda\x9c\xc6\x85\x86\x25\x8f\xc4\xdd\xd4\xf8\xee\xa6\xb2\x38\xc3\xb0\xae\x29\x61\x3a\x6f\xf9\xb8\xc2\x5b\xaa\x61\x68\xaa\xe5\xf2\x91\xea\xd8\xb4\x61\xab\x94\xe7\xa9\x18\x43\x93\x08\xf3\x4c\x10\x70\x81\x87\x62\x48\x41\x95\xde\x52\xf2\xeb\xa1\x6b\x2a\xd7\xb1\x6e\x5e\xed\xb9\xe7\x55\xfb\x55\x93\xf6\x6c\x2a\x36\x81\xdd\x34\x7f\x70\xbe\xdf\x8c\x2b\x1f\xed\x68\x1e\x67\xc7\x65\x20\x86\x3b\x9e\xa4\x6a\x80\x81\x6c\x68\xc9\x3e\x15\x20\xc5\x24\x14\xd3\x20\x28\x23\x0a\x3d\x2b\x24\x3d\x9a\x21\x1d\xe8\x60\x46\xa0\x88\x26\x9b\x06\xcf\x7d\xe3\xd1\x67\xd6\xec\x78\x5a\xb1\x47\xc1\xc4\xf6\x07\x27\xf5\xef\x3b\x71\x41\x47\x75\xf2\xa9\xca\xcb\x1b\xad\x7d\xf4\x49\x59\xfc\xc2\xb8\xbe\xf1\xb5\x69\xd3\x90\x79\x8c\x88\xec\x50\x64\x80\x1e\x90\x96\x2f\x68\x82\x2c\x92\x94\x29\xf1\xb4\x47\xb0\xb2\x1b\xba\x8c\x15\x90\xa2\x4b\xe0\x84\x4c\x70\xaa\xc6\xc6\x58\x5c\x1e\x9d\x71\xda\xba\xe1\xc5\xe6\xd7\xec\xd3\xa4\x0f\x77\x6c\x51\xe9\xae\x65\x00\x51\xf6\x50\xdb\x2b\x55\x8e\x77\x9d\x14\xcd\x3b\x55\xa4\x5d\x9c\xa3\xba\x8a\x09\x44\x14\x28\xb2\x0e\x2d\x1e\xf1\xac\x2c\xb0\x84\x4b\x5b\x1a\x6e\x6a\x3c\x92\x1d\x1a\x05\x38\xd0\x25\xcf\x82\x28\x00\xa2\xe2\xea\x18\xf2\x62\x57\x2a\x25\x7f\xfb\xe6\xfd\xbd\x17\x33\x8f\x98\xb6\x71\x68\x2d\xbc\x46\x8a\xf5\xe4\xfb\x94\x79\xef\xff\xcc\x9f\xdb\x83\x8a\x59\x8b\x5a\x74\x3e\x1d\xe7\xe8\x41\x05\x3c\xf4\x45\x3b\x70\x28\x5c\xc1\x44\x9b\xe0\x22\x99\x56\x43\x9d\xa4\x74\xca\xf0\xa1\xeb\x69\xbe\x45\xd0\xb4\x08\x0d\xcc\x64\x71\x2b\xc2\xf1\x18\x35\x61\xcf\x7b\x9d\x4e\xdd\x3e\x51\xc9\x79\x51\xa2\x77\xf3\x1d\x4b\xb2\x34\x3b\xf7\x6b\x57\xb2\x42\x4b\xef\xd0\x98\xc4\xe2\xbd\xb2\x6d\x5c\x7c\x37\xce\xa0\x7b\x09\x5a\x7c\xc0\x73\x9a\x23\xfa\x82\xeb\x99\x50\xf5\xec\x28\xd0\xe9\x88\xc1\x15\x8d\xa4\x29\x56\x93\x05\x5d\x23\x1c\xd9\x72\x3d\x9d\x11\x3c\xa4\xd2\x6f\x1f\xf9\xec\x98\x67\xc4\xb3\x46\xc4\xf0\xf9\x95\x99\x6d\x76\xc5\xac\x9f\x9e\xca\x40\xf7\x19\xf0\xeb\xad\x8d\x05\xa8\x36\x8d\x9b\xb6\x6d\x7a\x22\xce\xc1\xce\xa2\x43\xcd\xc0\x75\xe0\xf3\x82\xc4\x21\xa0\xc8\x32\x25\x33\xa4\x88\x29\x04\x47\x8b\xa2\xcc\x87\x82\xe0\x38\xb2\x04\x14\x2d\x00\xa1\x27\xfb\x8a\x17\x3b\x7f\xce\xac\xfe\xd3\xda\x19\xec\xd4\xc6\xdd\xda\x0a\x29\xcd\x5b\x14\x79\xd6\xe0\xbd\x31\x59\x97\xf8\x5b\xaa\xf7\xdf\x7b\xe1\xdd\x9a\xa9\xcf\xe2\x2c\x2c\xec\xc8\x84\x21\x21\xd2\xc2\x7c\xcc\x76\x3d\x89\x12\x31\xc7\x32\x42\x52\x70\x71\x5c\x56\x0c\x4b\x64\x71\xd9\x01\x1a\xc5\xb0\xd0\xc6\x3d\x26\x54\x0c\x39\x8d\x49\x6d\xbe\x15\xd5\x1a\x33\x4b\x51\x8d\xde\x46\x73\x6b\xf5\x3b\xf7\x99\xf0\x68\xee\x6d\x05\x8f\x36\x6f\xb7\x33\x4b\xa1\x69\x99\xcf\x0e\x4d\x3f\x84\x37\x66\xda\xb7\x65\x56\xd0\x0d\x4c\xe6\xbd\xc0\x04\x74\xe8\xfb\x2a\xd2\x48\x0b\xf1\x98\x6b\x92\x51\x10\xea\x84\x2b\x90\x84\xa1\x06\x8c\x4f\x30\x32\x8e\x34\x97\x51\xd2\x48\xfb\x97\x86\x7c\xf6\x41\xdd\x13\xad\x1f\xe7\x5b\x56\x12\xe2\x13\x5a\x9c\xa8\xd3\xac\x4a\x9f\xfc\x85\x0e\x7c\x0e\x5a\xd4\xeb\xbc\x6d\xc9\xa0\x49\x6f\xbc\x64\x3b\xfd\xfd\x45\x9f\xe6\x92\x8b\x25\x75\x1f\x53\xff\x29\x51\xfb\x87\xa3\xd5\xa7\xdc\x34\xca\x6d\x4f\x52\x7e\x97\x67\x0c\x7d\x2a\x3d\x8b\x6f\xfb\x83\xe6\x59\x09\x93\x48\x1d\x89\x58\xe0\x69\x2c\x16\x11\x8e\x0d\x65\xd3\x24\x22\xdc\xf1\x3d\x83\x92\xa1\x10\x62\xa1\xc3\x28\x14\x11\x19\x11\x83\x09\x30\x8d\x7f\x93\x75\xf2\xb0\x1c\x79\x5a\x65\x59\x72\x42\xa8\x7e\xab\xd7\x6b\x79\xdc\xce\xd3\x1d\xaa\x7d\xd2\xed\xc9\x58\x2a\xe9\xb5\x72\x24\x8f\xda\x24\xce\x1b\xa7\x16\xa5\x7b\x81\xc4\x86\xb6\x82\x18\x43\xa4\x7c\xc8\x68\x04\xe6\x92\x81\x62\x28\x88\xa6\xe9\x90\x16\x49\x84\xc9\x81\x42\xb2\xb2\x2e\x06\xb8\x1e\xa6\xc1\x1f\x7d\x7d\x53\xbf\x43\x23\x2f\xfd\xd1\x7c\x17\x93\x7f\x7d\xe3\xfc\x33\xaf\xef\xd1\x3b\xd7\x7c\x5c\xed\xcc\x9d\x59\xbf\xd6\x9e\xd0\x75\x3a\xea\x16\x67\x80\xa6\x25\x38\x24\x45\xf2\x51\xe0\x1b\x1c\x4e\xcb\x6e\x68\x9b\x52\x48\x6a\x01\xe4\x70\x48\x01\xd7\x11\x03\x35\xb0\x0c\x19\xa3\x7c\x8e\x0d\x19\x49\xf8\xdb\x14\xfd\x8d\xe8\x1e\xf4\x6b\xfe\xf1\xf6\xee\x05\x4b\x24\x76\xfe\xfc\x5a\x8e\x19\xf3\x9a\x5d\x7d\x7f\x68\xe9\x41\x7d\xe6\xfe\x74\xb9\xd2\xe7\x7d\xd7\x3b\xa3\xd2\xdf\x0e\x8a\xbd\x58\xc8\x12\x8c\xef\x20\x97\xe3\x45\x03\xc8\xa1\xaa\xd1\x6c\x08\x59\x92\x54\x7c\xca\x45\xac\x82\x49\xaa\xee\xd8\xae\x69\x0a\x26\x8a\x90\xc6\xe0\xb4\x1c\xa3\xad\x37\x78\x9e\x39\x7a\xdc\xd2\xcb\xeb\x8f\x67\x6a\x03\xcf\xd4\xfd\xfd\xc9\x0f\xf9\xcb\x64\xee\xe2\xfe\xdc\x62\xf1\x89\xa7\xa3\xd8\x6d\x57\xd3\x7f\x75\x8e\xdd\xdd\x46\x54\xe4\x91\x54\x64\x80\x40\x0d\x7d\x4e\xa5\xc4\x48\x53\x7c\x47\xa1\x45\x64\x43\x12\x52\x21\xab\x22\x17\xd7\x30\x9a\xa5\x1d\x8e\xf5\x14\x27\x96\xc4\xf6\xfd\xae\x6d\x1b\x74\x99\x79\x6d\xd6\x4d\xb7\xca\xec\x3b\x23\xa6\xde\x5a\xf3\xd3\x87\x5f\xa7\x74\x28\x93\xb9\xe3\xa2\xdc\xc8\xde\xfb\x67\xfa\x79\x42\x63\x2f\xfa\xb0\x82\x8f\x09\x0c\x25\xe8\x01\xc1\x79\x14\x1d\x00\x23\x62\x7d\x0c\xf7\x19\x33\x20\xf0\x00\xf7\x65\x8f\x61\x81\x28\x09\x9e\xe6\x88\x2e\x49\x02\x4e\x4d\x83\xf6\xe8\x97\x4b\x55\x12\x27\x72\xcd\xa6\x3f\x1c\x58\xd2\xac\x5a\x3f\xeb\x87\x7b\xeb\xce\xfc\x34\x63\xfb\xb3\x0f\x77\x69\x17\x6e\x7d\x33\xb7\x82\xfe\xe6\xd3\x05\xaa\x34\x06\xc1\xba\x19\x99\x0b\xe7\xdd\xbe\xc9\x79\x3d\x64\x4c\x0e\xe2\xf4\xae\x4b\xe6\x99\x4f\xe5\x8a\xd1\x8f\x33\x9e\xcf\x3f\xf2\xe6\xd3\xd3\xb7\x5c\x29\x70\x6c\x5e\xcf\xf9\xf7\xeb\x7c\x3e\x91\x19\x50\x29\x63\xf3\xc2\x6d\xf7\x34\xff\x52\x4f\xdd\xf6\xc2\x1e\x96\x7a\xa6\x1e\xff\x46\xb9\xb7\xab\x19\x5d\x46\xf8\xb0\xf1\xaf\x8f\xa5\x25\x9f\x7d\x7f\xa4\xdb\xe9\x0e\xef\x9e\x7f\x50\xf6\xea\xfb\x97\x26\x5a\x0d\x92\xb2\x54\xb3\xd3\xbf\xcf\x1d\x9b\xf0\x4d\x92\x65\x41\x37\xfd\xd0\x17\x19\x5b\xd4\x0d\x45\x77\x65\xd7\x40\x80\xc0\x74\x95\xb2\x44\xce\x96\x45\x19\x0a\x84\x14\x58\x50\xe4\x49\x64\xaa\x51\x8c\x65\xff\xd4\xb6\xe5\x5e\xad\x99\x56\x63\xdf\x90\x9e\xbf\xdc\x3e\x30\xe8\xf1\x81\x9e\x1b\x26\xe6\x11\x17\xef\x7e\xbe\xfc\xb9\xf2\xe8\xe1\x01\x33\xfd\x97\xf8\xd8\x22\x05\x01\xc2\x8c\x40\x0f\x69\x24\x09\x7a\x04\x3c\x25\x80\xba\xec\x30\x3e\xa9\xab\x0a\x8a\x68\xdd\x53\x48\xd1\x35\x59\x59\x8d\x22\xda\xc0\x70\x8b\xc6\xfe\xae\x45\xf6\xb7\x80\xd0\xaf\x77\xbb\x21\x1f\x2e\xea\xf3\x7d\xcf\x1b\x05\xeb\xf5\xde\xd1\x2d\xa8\xd3\x67\xcb\xae\xf2\x56\xcf\x7b\x67\x4b\xe7\x0f\xc6\xdd\xda\x1f\x67\x49\x08\x8f\x8f\x70\x8d\x16\x22\x3e\x50\x3c\xd7\xf4\x75\x8f\x77\x99\x00\x52\xba\xca\x6a\x3a\xb0\x38\x1a\x88\x1a\xef\xd3\x44\xe0\x86\x10\x86\xa6\x40\xdb\x4c\x8c\x2b\xcc\xf5\x33\x35\xc6\x7d\xf2\xf5\x83\xbd\x73\x36\xe2\xe3\x27\xda\x1d\x67\x4c\xee\x32\x6e\xeb\xdc\x7c\x6b\x96\x0f\x21\x5f\x86\xfd\x87\x8c\xb8\x1e\xdf\x80\x10\x1a\x3e\x6f\x73\x08\x1a\x2a\x94\x44\x3b\x10\x54\x24\x38\x96\x64\x12\xba\x25\x45\x9e\x28\x8a\x9e\x4a\x11\xba\x49\x03\x8f\x21\x1c\x35\x10\x83\x40\x8e\xde\x0e\x08\x37\x3f\x9b\x75\xd9\xa9\xdb\x77\x7f\xf9\x3a\x62\x89\x43\x6a\xbd\x41\x23\x7a\x74\x6c\x71\xa2\xc5\xc4\xfc\x63\x0f\x8d\x1c\x5c\x77\xc3\x37\x45\xe3\xfb\x95\x09\x8e\x87\xb6\x2d\x44\x11\x10\x2d\x28\x88\x0c\x0c\x54\xd3\x24\x20\x34\x6c\x53\x95\x79\x39\xa0\xd9\xc8\x63\x80\x8e\x4b\x8a\x4b\x46\x88\x42\x8c\xaa\xc5\xbe\x0b\xe4\x2f\xbf\x66\x4a\xfe\x53\x75\xbe\xc8\xb7\x3a\x7b\x91\x12\x83\xca\x65\x01\x2b\xae\xfd\x74\x20\xb5\xf5\x9a\x06\x3d\x2a\x1f\xf0\xcb\x2e\x5a\x13\x67\x6e\x3f\xe4\x90\xba\x84\x70\x4c\xc3\x39\xcb\xe6\x1d\x68\x03\x93\x87\x78\x88\x19\x2c\x86\x44\x43\x32\x19\x57\x34\x0d\xc9\x63\x02\xd7\x40\x04\xe7\x20\x14\xe3\x4a\x1e\xfc\xfc\xaa\xc9\xa3\x66\x3b\x1f\xec\x96\x8b\x9e\xa3\x0e\x7b\xf2\xdc\x71\xed\x7a\xed\xbd\x38\x3e\x0b\x2c\x30\x28\x75\x76\xdf\x9e\xe9\xdf\x19\x8e\x69\x1c\x32\x52\x4c\x00\x01\x26\x13\x3a\x4d\x92\x1a\x07\x30\x0c\xe8\x86\x41\xf2\x41\x28\x53\x82\xec\xd3\x0c\x90\x89\x08\xd3\x05\xdf\xe1\x11\x66\x18\xc4\xbf\x44\xa5\xdf\x34\x8e\x93\xa8\xeb\x88\x3c\x2d\x3b\x16\x98\x32\x61\x5e\xd2\x3b\x5b\xb7\xb4\xab\xbd\x3d\xa1\x4a\xf7\x6f\x5e\x94\x2d\xbb\x7d\xdd\x96\x52\x1d\x9d\x52\x71\xde\x89\xd3\x50\x60\xb8\xb8\xef\x53\x94\x2b\x59\x04\x0a\x4d\xda\xb5\x65\x12\x0b\x74\xdf\xe4\x31\x02\x39\x02\x16\x05\x81\xca\x70\x9a\x62\x93\x12\xa6\x29\x6a\x1a\x77\x81\x96\xfb\x3a\x8c\xa8\xf9\xdd\x8d\xfb\x25\xf2\xee\xcd\xf4\x71\x6d\xf5\xf7\xd2\x2d\x07\xce\x0e\xc7\xf6\xfa\x7d\x4f\xa7\xa7\x28\xa1\x6e\xe7\xf8\x7e\x69\x56\x80\x2e\x08\x4d\x1d\xd8\xa6\x2d\x59\x81\x4d\x01\x05\x01\x5b\xc7\x54\x9c\xd6\x59\x97\x20\x75\x4d\xf7\xa2\x40\xe1\x11\x49\xf3\x16\xe3\xdb\x90\x94\xe5\xd8\xcd\xd6\x06\xcb\x96\xe0\xc6\xcf\x81\xd7\x50\xda\xd0\x3a\x65\xce\xc3\xfe\x59\xf7\xef\x5f\x9b\xf7\xe7\x0b\x3d\x06\xbc\x4e\xcd\x55\xb3\x53\x91\x2a\x71\x5e\xbd\x32\x2d\x99\x22\x7c\x57\xf5\x10\xce\x70\x21\x64\x0d\x04\x04\x4d\x81\xa2\x46\x23\x4d\x11\x2c\x2c\x54\x08\x56\xd7\x05\x33\x14\x31\x0f\x72\x14\x11\xea\x6f\xa7\x96\x61\xcd\x3f\xbf\x55\xbf\xc9\xaa\x6f\xd6\x14\xbd\x3f\x7f\xdb\xe5\xad\x87\xaa\x1f\x4b\x5d\x3a\xb7\xc9\xbb\x0f\xba\xa6\x7e\x50\x21\xb9\x55\x13\x2d\xbe\x5f\x1a\x0b\x20\x4b\x04\x32\xa0\x02\x82\x95\x3d\x13\x92\x0a\x02\x91\xae\x01\x27\x92\x49\x2c\xd2\x18\x15\xd1\x62\x48\x49\xbe\x80\x87\xac\x10\xba\x0e\xc5\xf0\x69\x5c\x5f\x56\x67\x6b\x43\x72\x62\xae\xcf\x88\x45\x41\xb1\x68\x76\xd2\x2f\x83\x5f\x74\x68\xd7\x66\x44\x52\xeb\x87\xb5\xf2\xac\x1d\x3b\xf2\x87\xfd\x6f\x98\x53\xd3\x1a\xdf\xf6\xdf\xdb\x93\x6f\xdf\xfe\x71\xbd\xb6\x8d\x07\xf7\x5f\x75\x71\xc8\x7a\x2f\x23\xfb\xfd\x8c\xf0\x49\x85\x01\x3d\x8e\xac\x8e\x2f\x3d\x33\xc3\xb1\xac\x68\x99\x06\x61\x69\x1c\xe1\x72\xaa\x10\x60\xa1\x2c\xfa\xd0\x10\x04\xcf\xe4\x15\xce\x67\x28\x3d\x10\x90\xef\x78\x86\x14\xf8\xa1\x88\x63\x7f\x43\xba\xfc\x5b\xea\xea\x9f\xe6\xb0\xc9\x4d\xde\xcd\x90\xfc\x26\x86\x01\x2b\x3b\xe5\x70\x1f\xbb\x9e\x30\x26\x67\x01\xa5\xc5\x89\x3f\xce\x0f\x1a\xb4\xbc\xe9\xdd\x15\x8d\x1e\x1e\x2d\xd2\x72\x44\xdd\x19\xdd\xd2\x5f\x7e\xc7\x34\x3e\xa0\x71\x9a\x81\x44\x64\x2a\x14\xa5\x63\x1c\x2d\x12\xba\x00\x0c\x48\x01\x08\x60\x24\x7a\xb4\xef\x3a\x2e\x6f\x5a\xa4\x1f\x21\x89\xc5\xc3\x90\x64\x84\xd8\x77\xb4\xa4\x09\xf5\x07\x2f\xf4\x92\x9e\xe4\x58\x54\xa2\x86\x80\x61\x53\x57\x9d\x52\xbf\x8c\x36\xdd\xca\xd0\x6e\x42\xb5\x7c\x72\xdd\xc4\xf4\x43\x2f\x62\x46\x28\x55\x82\xac\x4d\x9b\xba\x26\x52\xae\x4b\x71\x1a\x12\x23\x93\x47\x2a\x86\x5c\xc1\x15\x42\xd3\xc2\x6c\x97\x20\x22\x4a\x31\x68\x17\xd3\x18\xd9\xb5\x34\x35\x76\xd3\xf0\xcb\x0c\xdf\x6d\xb8\x1d\xf0\x95\x4e\xdc\xbe\x7f\xa6\xc7\x87\xd9\x5b\x90\x09\x6d\xa7\xf8\xa5\x9d\x6f\x43\xe1\xc4\x92\x46\xe7\x9a\xc5\x17\xc5\xcf\x92\x8a\x8c\x47\x5e\x08\x7c\x4f\x01\x10\x37\xc5\x80\x0c\x6c\x88\xe3\x51\x68\x1a\xbc\xc4\xe1\x8a\x82\x28\xc9\x27\x14\x55\x73\x19\xc3\x0d\x20\x4d\x22\xf0\xb6\xab\xff\x51\xae\xf0\xfd\x97\x6d\x4a\x3c\x79\xa4\xd7\x5b\x7e\xad\xdc\x84\x8d\x3b\xce\x7e\xf6\x6e\xc2\x94\xd5\x37\x2b\x79\x49\x61\x4e\x29\x47\x7c\x9b\x86\x2c\x21\x40\x9b\x67\x71\x60\x45\xb4\x48\x9a\x6e\xc4\xd1\x84\x10\x68\x9a\x0c\x5c\xdc\xc6\x39\x86\xe1\x39\x2d\xa4\x6c\x4f\x09\x6c\xc3\x23\x22\xd9\x12\xf0\xbf\x68\xb3\xff\xad\x7d\xf8\x4f\xa3\x89\xe4\xc4\x4a\x19\x3e\xce\xf6\x26\xaa\x6d\xd7\xc1\x6e\xc9\xdf\x75\xce\x08\xbe\xde\x75\xf2\x93\xa7\x66\xb9\xfe\x54\x45\x34\x7b\xea\x57\x63\x32\x6d\x61\x2f\xdd\x5a\xd9\xbc\x62\xfa\xdb\x48\xb1\x41\x09\x3e\x62\xc8\xd0\x08\x11\x20\x14\x8d\xa1\x65\x49\x81\xba\x82\x61\x62\x64\x32\x82\x6f\xb9\x5c\x08\x28\x8c\x67\x0d\x8b\xc0\x35\xc6\xa6\x70\x3c\x64\xd3\xd8\xe9\xca\xf3\x68\x5d\xa7\xa3\xd3\x57\x1d\x49\x48\xc9\xd8\x6a\x9f\xb5\xec\xbb\xe5\x1d\xcb\xef\x22\x8a\xbf\xcc\x4c\xf7\x3e\x4c\x77\x36\x73\xf7\x8a\xaf\x3d\xf9\x86\xcd\xd3\xae\xa4\x10\x20\x32\x4c\xce\x33\x5c\xdb\x92\x55\xd3\x80\xbc\x2c\x89\xb8\x07\x4d\xa0\x13\x91\xa7\x90\x1e\xae\x1a\x88\x90\x7c\xd3\x57\xc2\xd8\xde\x7b\x6c\xc8\x83\x4d\x27\x6f\x2c\xa8\xb8\x24\xf7\xf8\x42\xf9\xca\x54\x9c\x58\xb8\x81\xfd\x84\x9c\x51\xe3\xf8\xc3\xa4\xed\x4d\x4a\x36\x71\xd3\xdf\xaa\x88\x3d\xa5\xd0\x5d\x9d\x71\x7d\x28\x91\x86\x64\x49\x96\xed\x39\x1c\x72\x05\x83\x53\x78\x60\xd3\x22\x87\x30\x83\xf1\x3c\xd9\xd4\x03\x53\xb1\x70\x06\x30\x34\x96\x06\xc5\xcd\xc1\xe7\xd3\xbb\x57\xea\x98\xe5\xf8\x31\xfa\x0e\x55\x45\xf9\xe9\xe9\xe5\x51\x03\x46\x24\x27\x5f\xc2\x13\xeb\xcd\xae\x93\xff\x8e\x1f\xc4\x99\x24\xd1\x30\x3d\x9e\x0c\x70\x10\x32\x8e\xee\x19\x8e\xa0\x10\x82\x42\x4b\x9a\x6a\x30\xb2\x40\x8a\x82\x23\xab\xb8\xef\x33\x32\x23\x19\xa6\x41\xa9\x9c\xaf\xfd\xb5\x4b\xfa\x6f\x57\xf8\xa7\x76\x5d\x72\x62\xc6\x2f\x32\xfc\x07\xc0\xb3\x65\xc1\x0d\xed\xbb\x0f\xac\x9d\xd5\x9e\x37\xa0\xc7\x94\xb3\x33\x6f\xfe\x71\x20\xe3\xb8\xac\xab\x6b\x54\x2d\xd4\x7e\x52\xbf\x9d\xdf\xb5\xbc\x17\x5f\x9b\x8a\x7c\xd7\x0a\x61\xc0\xcb\xbc\xe5\x2a\x0a\x21\xe3\x91\x02\x03\x84\xd9\x40\xb2\x21\xaf\x5b\x9a\xe0\x32\x1a\x13\xf9\x04\x0f\x94\x48\x04\x30\x82\x2c\x8a\x6d\x53\x9d\xce\x10\x07\x0b\x1e\x48\x1e\x54\xfd\xd4\xce\xf1\x79\x98\x6c\x9f\x2f\x69\x78\xf4\xb7\xfc\x95\xaa\xbe\x9e\x94\x35\x6f\x82\x89\xa2\xf4\x53\x9c\xc6\xcc\xd6\xa2\x4b\xe8\x32\xa1\x0b\x34\xab\x47\x12\xa7\x41\x28\x79\x96\x6a\x12\xbe\xcf\x61\x2a\xa3\xe0\x92\xad\x86\x64\x24\x29\x9c\x1b\x79\x46\xa0\x19\xb6\x90\x56\xff\xba\x46\x85\x3a\x23\x67\x0f\xfb\x69\xf5\xe1\x7d\x7d\x4f\xdc\xd9\x32\xbc\x62\xd9\xa4\x1c\xdf\x36\x2a\x3e\x74\x55\xf9\x3c\x3f\x64\x69\xd8\x7e\xd4\xf6\x38\xf7\x48\x51\x40\x33\x2a\x89\xc9\xbe\x6c\x46\x12\x6f\x87\x34\xe3\xba\x51\x64\xab\x3c\xe7\x7a\x30\xb4\x44\x48\x59\x8a\x4c\x0a\x1e\xaf\x10\x26\xc5\xf1\x12\xa4\x62\x7f\xed\x45\x2f\x92\x72\xde\x38\xf2\x75\xe3\x06\xf7\x47\x56\x94\xce\xfc\x96\x54\x99\xf8\xa5\xc0\xf4\xef\xf6\xb6\x39\x9c\xbc\x32\xd7\xfb\x23\xaf\xa5\x5f\xe1\x27\x76\x0b\x4c\x50\x81\xe5\xf8\x82\xc0\x63\x3e\x2d\x59\x14\xcd\x6b\x24\x67\x93\x02\x20\x5d\xc6\xb3\x29\x91\x73\x58\x4a\x32\x58\xdb\xe5\x2d\x19\x0f\x81\x65\x6a\x7f\x6d\xb3\xa4\x66\xfb\xef\x3a\x49\xc9\x89\x1f\xe7\x7a\x27\xdf\x9b\xa4\x08\x03\x26\x3e\x13\xce\x67\x5a\x76\xad\x0e\xaa\x49\xb3\xdb\xf2\xad\x53\x8b\xff\xb0\x1c\x87\x9d\x5a\xef\x7f\x5c\x7f\xde\xd1\x25\x55\xab\xc5\xf7\x2d\x0d\xdd\xd7\x59\x68\x68\x48\x65\xa0\x25\xf9\x16\x72\xc9\xc0\x64\x19\xcb\xa1\x4d\x3f\xb0\x30\x04\x49\x3d\x92\x50\xa0\x03\xdd\x08\x09\xd7\x46\x91\x9d\x86\x24\xdf\x4b\x68\xea\xcd\x0e\xde\x59\x7a\xe1\x50\xa9\x33\x9f\x55\x99\x74\xae\xea\xe6\x92\x0f\x4a\xdd\x9c\x95\xb7\xc9\xa7\x9c\x36\xab\x67\xf1\x21\x71\xa6\x82\x66\x95\xd0\x73\x81\xc1\xd1\xaa\xc7\xd2\x9a\x06\x55\x86\x33\xc4\x00\xf9\x3e\x65\x2b\x2a\xa9\x4a\x04\x69\x11\x32\xd0\x68\x48\x87\x02\x1f\x51\x7a\x48\xc6\x3e\x36\xdc\xdf\x4b\x19\xf1\x55\xb3\xcc\x89\x87\x5e\x94\x46\xeb\x8e\xb5\xdc\xf2\x61\xfd\x06\x75\x97\x8c\x5b\x96\xb7\xc1\x45\xb3\xb3\xb0\x3f\xfd\xfb\x15\x31\x8f\x0d\x20\x4b\x84\x81\x6f\xe1\x01\xae\x40\xcc\xe6\x78\xd6\xc0\x23\x3c\x02\x96\xc2\xeb\xb4\xeb\xc3\x48\x87\x5a\x08\x54\xcd\xf1\x30\x07\x44\x82\xed\xda\x69\xc0\x69\x77\xf4\xd8\x51\x41\x5e\x98\x33\xc3\x7b\x2f\x37\x74\x6b\x53\xb3\xe0\xe1\xd1\x2f\x9f\x6f\xaa\x77\xdf\x4f\x9a\x5e\xa3\xd2\xef\x0b\x3f\xdd\xb7\x24\xbe\x81\xc7\x40\x00\xc3\x54\xce\x16\x59\xdf\x54\x74\x55\xf7\x7d\x51\x94\xff\xe7\x35\x18\x9b\xc5\x15\x91\x8a\x5c\x82\x65\x29\xcc\x0d\x22\x06\x85\x2a\x09\x14\x87\x8f\x1d\x78\xf2\x92\x1f\x7c\x9b\x2f\xf9\xe1\x80\xae\xef\x6c\xfd\xb1\x48\x99\x4f\x5a\xcc\xde\x3b\x67\x81\xb2\xf3\x6c\x2b\x6f\xc3\xe1\xe5\xf7\xeb\x9c\x4d\x3f\xef\x4d\xec\xcb\x32\x52\x2d\xc6\x31\x55\x89\x30\xe5\x40\x74\x05\x4a\xa6\x70\xc5\x52\x35\x8d\xe3\x05\x86\x23\x80\x4a\x60\x36\xae\x69\x84\x49\x98\xb8\x1b\x41\xc5\x82\x4a\xec\xaf\xfd\xed\xc3\x7a\x89\x2f\x57\x1d\x2e\xf9\xc0\x0a\xb3\x82\xb5\xcf\x1e\x55\x2b\xdb\x6f\xfd\xfe\x62\x09\xe7\x7f\xea\xf9\x5b\xf5\xf7\x67\xf8\x7c\x7c\x8d\x84\xb3\x65\x52\x87\x24\xae\x02\x8c\xd4\x22\xca\x60\x94\x08\xc0\x90\xc5\x0d\xce\xc4\x11\xeb\x98\xb6\x4e\xe9\xa4\x26\xf9\xaa\x8e\x54\xc2\xb0\x4c\xe1\x6f\x93\xd5\x9d\x09\xff\x5d\x53\x3a\x39\x71\xf0\xbb\x19\x32\xbe\x99\x83\x27\x7e\x5c\xe7\xf8\x89\x72\xad\x7e\xaa\x3f\xd5\x5c\x77\x67\x9e\x38\xb5\x50\xe2\xc6\x84\xee\x43\x9b\x94\xde\x56\xa5\xcc\xf6\x05\xb5\x2a\xc7\x97\xcc\x9d\x85\xae\x8a\xab\x16\xc9\x88\x61\xe4\x0a\xc8\x00\x0c\x83\x1c\x8b\xc3\x15\x2a\xa4\x19\x28\x6b\x0e\x2b\xab\x92\xca\x8b\x36\x07\x7c\x4a\xc1\x64\x8f\x56\xf8\xd8\x9d\x8c\x5e\xd5\xea\xb6\xa9\x53\xa5\xd7\xa6\x9e\xe6\xcf\x19\xbf\x3f\x58\xa5\xce\x87\xa0\x55\x8b\xcb\x07\x53\x3f\x7d\xde\xba\xe2\x17\xc5\x2a\x56\x8f\x33\x5b\x31\x19\x00\x4e\x24\x90\xcd\x43\x13\xd1\xb8\x62\xb9\x96\x63\xbb\xba\xaf\x23\x93\x32\x28\x5f\x24\x43\x93\x50\x69\x89\x04\x1a\xa5\x9a\x81\x68\x03\x3a\x8c\xd1\xea\xea\x3d\x35\x91\x95\x37\xf5\x2e\xd8\x95\x1c\x7c\xff\xbb\x11\x8d\xc6\x8c\xcb\x97\x87\xfb\xad\x5a\xb1\xf9\xf5\x2a\x57\x5e\x6a\xbd\x97\xbd\x7f\x9c\x9b\x2f\x1e\x83\xb9\x7a\x60\x4b\x8c\x1a\x92\x0c\x74\x23\x14\x05\x51\xe0\xb3\xa4\xcc\xb1\xb2\x4d\x72\x6e\x64\xf3\xa1\x60\x01\x19\x62\x34\xb0\x54\x05\x62\x6a\xec\xfc\x9b\xf3\xf5\xab\x6d\x63\x8f\x76\x7c\x79\xc1\xfd\x36\xfb\x84\xd2\xe3\x0f\x24\xd7\xc9\x75\xee\xfd\xda\x9d\xdf\x6f\x34\xff\xe4\x8c\xb9\x6b\x5a\xa7\xff\x4b\xc7\x0c\x3a\x24\xa7\x40\x57\x95\x1d\x13\x0b\x78\x28\x03\xa4\x13\xbc\x11\x1a\x96\xc2\x30\x32\x24\x38\xa0\xda\x9a\x4b\xb1\x32\x00\xb2\xa7\x33\x2e\x86\x30\xd2\x4e\x43\x3a\x6a\x6a\xe9\xf3\x7b\x73\x1e\x6b\x75\x82\xfa\xb8\x40\x8f\x3a\xb9\xd7\x47\xe3\x3e\x7c\x16\xae\x79\xfa\x63\xaf\x5f\x4b\x9f\x2d\xd7\x7b\x89\x90\x7e\x90\x41\xec\xbd\x6a\xd2\x67\x59\xa4\x48\xb8\x2c\x2b\xa6\x21\x85\xa6\x65\x2b\x40\x35\x29\xd9\x30\x42\xde\xa7\x74\x03\x22\xcf\x56\x31\x85\x11\x14\xd6\x92\x31\x4a\x42\x7f\xe9\x19\xfe\x7b\x2f\xe4\x9f\x86\x44\xc9\x89\x1f\x67\xc8\x50\xf3\xcd\x9e\xca\xb1\x8c\x99\xc5\xb9\x2f\x1b\x2c\x67\x4b\xde\xd9\x49\x57\x25\xd6\x35\x73\xd6\xb5\xbe\xf1\xcb\xf0\x69\xa5\x13\xf3\x2f\xda\xde\x2f\xa5\x7a\x7c\xdf\x52\x36\x75\x08\x91\x49\xf2\xa2\x26\x1a\x3e\x05\x03\xd2\xc2\x31\x4e\x97\x70\x40\x86\xac\x1b\x91\x62\x14\xf9\x02\xc9\xfb\x50\x24\x4d\x4a\x92\xa4\x28\x4a\xa3\xa6\x6b\x9e\x75\xf7\xb2\xb6\xc2\xad\x51\xf5\xae\x0e\xea\x3a\x98\x9e\xf0\x49\xb7\xbe\x6d\x27\xe9\x97\xf4\x36\xa9\xf9\x0e\xae\x3e\xd7\x71\x6c\xfa\xf5\xff\x63\x96\xa2\xaa\x60\xf8\xaa\x1d\xf8\x16\xc4\x7c\x9a\x30\x18\x20\xb9\x0a\x43\xf3\xa6\xa3\xca\x24\x6e\xb9\xbc\x81\x3b\x9c\xa5\xf1\x1c\x54\x1c\x9f\x77\x6d\x92\x51\xdc\xd8\x90\xf1\xb5\xc9\x4b\xaf\xa4\x18\xdf\xb7\x1a\x5b\xa1\x68\xc7\x59\x47\x7a\xdd\xe3\x2f\x6e\xfc\xbc\xe1\xde\x52\x7b\x0e\x35\xec\x50\x09\x56\x18\x95\x7e\xb9\xe7\xd8\x9c\x33\xbe\xe4\xe3\x3c\x26\x46\x62\x28\xe0\x2e\x14\x3d\x4d\x25\x1c\xda\xf5\x99\x50\x21\x2d\x49\xd3\x7d\xde\x95\x04\x0a\x19\x06\xa5\xf0\x38\x05\x25\x5e\x75\x62\x60\x55\x5b\x5c\xff\xb6\xe3\x1a\x06\x63\x4b\x2e\x6f\xf2\xeb\xbd\x0f\x0f\x64\xfb\xfd\xe6\xeb\xe1\xe5\x2f\x4d\xec\x11\xdc\xb1\x97\xdc\x35\xa7\xc7\xf7\xfe\x6b\x29\xb6\x1e\x41\x56\xa7\x0d\x5b\xf3\x58\x8e\x21\x30\xcc\xe5\x59\x05\x21\x0f\x78\x8a\x64\x07\xa6\x2f\xa9\xae\x80\x81\x28\xb2\x4d\xde\xb0\x38\x83\xd5\xde\x5a\x14\xfc\xa7\xc6\x69\x72\x13\x62\xd0\x7f\xdc\x23\x0b\xcf\x1c\x7c\x75\x04\xf9\x65\xed\x4d\x17\x27\xe7\x9d\x31\xbd\xfd\xdd\x89\x8f\x8e\x9c\x9b\x70\x6d\x75\xf1\xd1\xfd\x5e\x77\x38\x51\xf8\x42\x7c\x99\x97\x58\x0b\x21\x81\x27\x6d\x16\xc7\x4d\x5d\xc0\x02\xdc\x55\x3d\x1b\x31\x10\x9a\x9e\xa0\xe2\x0a\x1f\xa9\xb8\x18\x78\xac\x63\x1b\x40\xa7\x5d\xa8\x19\x12\x93\x06\xf3\xd2\x5a\xaf\xea\xea\x05\xf5\x66\xac\xab\x74\x64\x67\x61\x76\x77\x2a\xfe\x2c\x73\x8f\xcd\x99\x5a\x8d\xfb\x75\xff\xbd\x05\xc5\xef\xdc\x1e\xdd\x29\xde\x7b\xfa\xb2\xed\x2a\x86\x2c\x10\xaa\xea\x87\xbe\x6f\xd9\x96\x63\x06\xb2\xcf\x39\x96\xc3\x03\x95\x30\x59\xde\x77\x78\x26\xf2\x34\xc7\xe7\x43\xd1\x46\x6a\x1a\x7b\xfa\x5d\x6b\xe5\x5f\xbc\x70\xd5\x68\xbb\xc4\xc9\xca\x75\xe7\x65\xce\x3d\xed\x9c\xcd\x0f\x99\x84\x37\x58\x31\x23\xc7\x8d\x5e\x23\xcb\xd6\x4e\xbf\xae\x51\xec\x06\x96\xa3\x2a\x48\x91\x2d\x13\x5a\x08\xd8\xc0\x31\x42\x0a\xd3\x1d\xc2\x00\xd0\x76\x24\x4b\x26\x65\x5a\x74\x0c\x81\x82\x2e\x46\x9a\x94\x6a\x92\x34\x72\x62\x1f\x5b\x33\xca\xac\xcd\xd2\x61\xf1\xf0\xa0\xfa\xc5\xa9\xe5\x7f\xaf\x16\xb2\x4b\x77\x4c\x68\xb0\xee\xc4\x94\x3e\x13\xe7\x5f\x6e\x57\xe0\xd6\xef\xf1\xf5\x04\x57\xa4\x15\xcf\x66\x35\x9b\x27\x2c\x9d\xe5\x15\x4c\x72\x05\xcc\xe7\x39\xe0\x02\xd5\xe0\xa4\xc0\x08\x7d\x8a\x67\x2d\x01\x06\x42\x10\xc8\xa6\x6b\x72\x7f\x93\xca\x68\xfd\x7f\x83\xd3\xf6\x85\x39\xb8\xb9\xf6\x85\x81\x03\x96\xed\xed\xb2\x63\xe8\x9e\x06\x8f\x7e\xeb\x7f\xa1\x60\xbb\x82\xd9\x5a\xe5\xaf\x79\x70\x47\x85\xf7\x93\x13\x5f\xbf\x7a\xfd\x7a\x7a\xa9\x37\x62\x54\xdb\x1f\xa2\x83\x5b\x8b\x57\x2e\x53\x5d\xef\x92\x63\xc6\x94\x83\x75\x0e\x46\x47\xcb\x46\xc2\x2b\xb2\x64\x52\xbb\x4a\x59\x72\x7f\x1f\x67\x9e\x72\xc0\x08\xa4\x6d\x1a\x96\x26\x73\x91\x14\x8a\x84\x0a\x04\x52\x0a\x21\x00\x7e\x18\xe1\x41\x64\x63\xb4\x10\xea\x24\xeb\x2b\x82\x12\x69\x32\x6b\x7a\x6c\x0c\x85\xbb\x6f\xff\x68\x7a\x70\x23\x3b\x16\x3b\xd6\xbc\xfb\xbd\x6c\xd2\xdc\x06\x49\xd3\xd9\xf2\xfb\xd9\x3d\x8f\x5a\xdc\x79\xaf\xc3\xa6\x1c\xe5\xe2\xdb\x06\x62\x34\xcd\x30\x30\x82\x97\x31\x0c\x62\xbe\x87\x09\x22\x32\x48\x4d\x44\x8a\xe2\x21\x9f\xc2\x43\x3c\xa2\x5d\x68\x47\x34\x1e\x46\x8e\x0b\x38\x8d\x52\x6c\x2e\x0d\x3e\xe7\x9f\x36\xaf\xc8\x72\xb5\x0c\xbb\xbf\xc6\xa7\x09\x13\xc7\xfe\x5e\x62\xd9\xb4\xb9\x45\xb7\xe4\xdc\x59\xa8\xdb\xe7\xe7\xcf\x74\xc6\xad\xe4\xc9\x6f\xee\xa9\xce\x59\x98\x79\xe0\xec\xe7\x0f\x0a\xbe\x33\xd2\x18\xd9\xaa\xdd\x67\x25\xf2\x5f\xc5\x4a\x67\x34\xba\x9c\xf4\x67\x7c\x38\x6f\x44\xbd\xac\xf1\x36\x3f\xdd\xc7\x70\x01\x86\x06\xce\xf2\x11\x43\x85\x72\x60\x87\xc8\x25\x08\x47\xa2\x69\x25\xf0\x7d\x9c\x93\x58\x2a\x60\x59\x8c\xb5\x71\x2d\x40\x1e\xaf\xc4\x2e\xa3\x4e\x9d\x21\xc7\x17\x4c\x18\xbd\xe2\xea\xde\x82\xf0\x78\x42\xcd\x6d\xed\x1b\xf5\x43\x7a\xf7\x81\xa0\xe2\xa4\xf5\xd9\x6a\xf6\xb3\x37\xc6\x19\x6f\x20\x85\x22\x0d\x3c\x87\x40\x7a\xc4\x41\xe8\x43\xc8\xfb\xaa\x49\x0b\x84\x0f\x22\x22\xb2\x22\x09\xf2\x3a\xa5\x2b\xa2\x6c\xe8\x92\xae\x49\x7c\xe8\xa4\xc1\xc5\x77\x19\x6f\xbc\x21\xe7\x9d\xa1\xb7\xb7\xcd\x4a\xba\x95\x5a\xbf\xc8\xe9\x43\xce\xf9\xca\x83\xe6\x8c\xeb\x5f\xb8\xcf\xb2\x17\x67\xb7\xbd\x1b\x67\x76\x38\x5b\x67\x0c\x8d\x30\x2c\x3c\x94\x8d\x28\xd0\x64\x17\x53\x49\x02\xe3\x29\x1e\x22\x96\xf3\x18\xe8\xb3\x9e\xad\x87\x50\x40\x36\xa9\x3a\x96\xc7\xd8\xff\xd2\x13\x7c\x7b\x68\xa3\xe4\xea\xbc\x5d\xba\x5c\x79\xc1\xb5\x87\x09\xad\x2b\x7e\x77\x7e\xf8\xd3\xad\x9b\x1f\x30\x4d\x26\x74\xda\x01\x5a\x2c\xa9\x9c\xe7\x79\xfa\x8d\x24\x36\xc7\xa4\xc5\x04\x21\xe5\x30\x86\x61\xd8\xb4\xa1\x71\xb4\x4c\x18\x92\x6b\x2b\x24\x17\x05\x24\x23\xfc\x2f\xf5\x2a\x87\xbb\x3e\x06\x49\x8c\x20\x45\xd3\x67\x62\xe8\x22\x5c\x1c\xbd\x6f\x5f\x8d\x63\x7c\xb7\x27\x7b\x98\x9e\x73\xe6\x5f\x2f\x52\xe9\xeb\x4a\x33\x46\x57\x6a\x7a\xf5\x51\xca\x8c\xf1\x25\xa7\x55\x8a\xb3\x44\xab\x66\xf1\xd0\xa3\xb8\x88\xf7\x42\x9f\x0e\x38\x99\xb0\x75\xc4\x04\x2a\xad\x86\x80\x54\x71\x0f\x5a\xa4\xed\xf1\x44\xa0\x3a\xc0\x10\x5d\x8f\xc4\x14\x86\x8b\x0d\xfd\x69\x8d\x95\xcf\x97\x90\xf4\x69\x2b\x77\xc1\x8c\x22\xf5\x7e\x68\xb2\xbd\xfe\x57\x19\xca\x0c\xbc\xf9\xee\xe0\xc7\x5f\x14\xcc\x55\xaf\x76\x52\x7c\xb9\xb9\xd8\x80\xb0\x09\x31\x44\x96\x60\x3a\x54\x28\x92\x9e\x29\x01\x49\x30\x4d\x32\x70\x6c\x06\x91\x20\xc4\x22\x47\x01\x0c\x2e\x69\x8a\xa4\x02\x95\x24\x59\x18\x03\x53\x7f\xe3\xe9\xc4\x45\x9b\xb2\x34\xc8\xbe\xb9\x5d\xbf\x92\xb5\x4f\xe1\xc3\xee\xf5\xce\x9f\xe7\x5c\xfd\xfb\x45\x1f\x1c\xc9\xd3\xfb\xd8\xe6\x12\x71\xd6\xf9\xb0\x25\x23\xe2\x5c\xc7\x72\x55\x35\xf0\x5d\xca\x52\xc9\x10\xf0\xb8\x80\x63\x22\xe0\x05\x2e\x20\x1c\x85\x0c\x6d\xcf\xa2\x03\xcf\x76\xa1\x19\xa9\xda\xbf\xd0\x1d\x6f\x46\xf6\xd4\x42\x65\xf6\xf0\x43\xff\xf8\xad\xe9\xb1\x2f\xf3\x2e\xed\x3d\x7e\xa3\xfa\x5d\xf5\x72\xdf\xd9\x55\xe5\xd1\xbf\x5e\xee\x33\x45\xfb\x7f\x58\x6b\x89\x19\xd9\xa3\x40\xe5\x18\x9d\x08\x09\x53\xa4\x14\x1c\x8a\x86\xce\x1a\x8c\x44\xd1\x86\x44\x6b\x82\x4d\x12\xbc\x04\x31\x0e\xea\xa1\xa3\x00\x41\x10\x22\x8d\xc7\xf9\xd8\xc6\x51\x9a\x79\x7c\xa8\xfa\xa0\xc6\x1f\x4c\x69\x3a\x7a\x7c\xf5\x42\x5f\xd5\x4e\xc9\xb2\xb5\x5b\x8f\x52\x5f\x14\xcc\xa6\x2a\x8b\x7b\x8e\x29\x41\xc6\x19\xc2\xc8\x87\x38\xad\xc8\x11\x1b\x01\xc0\xfb\x00\x08\x74\xe4\x88\xbc\x07\x7d\x8e\xb7\x23\xa4\x7b\xbe\x65\xb3\xba\x08\x81\xa3\x61\xb4\x46\x89\x06\xc9\x4a\x6f\x7f\xe9\x5a\xdf\xbc\x73\xf2\xb3\x99\x3f\x77\x90\x97\x17\x7f\xd5\xf9\xee\xd7\x35\xc8\x5a\x3b\xd9\x66\x39\xdf\xbd\xbe\xef\xd7\xf9\xbd\xea\xa2\x66\x67\xe2\xfb\xa5\x81\x2f\x10\x12\x2d\xeb\x2c\xcd\xd0\x98\x66\x46\x9c\x20\x0b\xbe\xe2\xb3\x92\xa8\xbb\x2a\x47\x85\x94\x27\x01\xcf\xf1\x75\x95\x97\x09\x20\x79\x01\x0d\x63\xc8\xed\xd4\x01\xed\x6f\xdc\x78\x2f\x39\xbb\xa4\x7f\x51\xac\x5e\xe6\xdd\x17\xba\xad\xcc\x75\xe3\x8b\xbd\x5f\xe4\x4a\x3c\x3d\xc7\x7d\x4f\x83\xf1\xc5\xd3\x33\xa4\xa5\xda\x46\x14\xc9\x38\x21\x11\xac\xc8\x99\x3e\xa0\x14\x11\xa9\x81\x1f\xe1\x34\x6f\x78\x3c\x49\x99\x24\x1e\x70\x22\x67\xbb\x64\x40\x22\x0d\xda\x20\xf6\xdd\x75\x85\x31\xb2\xe5\xcd\x6f\x56\x5c\xd9\xd9\x71\xdb\x83\xea\xd3\x32\x35\xda\x32\x60\x11\x64\x3f\x7f\xaf\xc8\xeb\x91\x5b\x6b\xa7\x64\xf3\xe2\xbb\x61\xc6\x1a\x32\xa1\x62\x3a\xc9\x61\x02\xed\x03\x52\x93\x15\x19\x03\x81\x23\xf8\x0e\x49\x39\x04\x52\x68\x9c\xf5\x8d\x90\xd5\x48\xd6\x72\x0d\x4b\xe6\x25\x89\x4f\x83\x07\x78\x2a\xaa\x33\xea\xe7\xc5\x9d\x04\xab\xd1\xd5\x26\x95\x6f\xc3\xd4\xa3\xda\xf9\xaf\x77\x14\x49\xe9\xd0\xec\xf4\xc9\xa0\x5f\xfd\xca\xf1\x85\xfe\x30\xd0\xe6\x81\x22\x4b\x21\x11\x85\x06\x4b\xaa\x46\x28\x02\xc5\xf7\x30\x8b\x08\x24\x88\x31\x2c\x25\xf3\x26\x67\xdb\x86\x8d\x23\x52\x66\x70\x12\x58\x91\xf8\xb6\x81\x9c\x2f\x55\xb2\x6c\xe1\x1c\x78\xf2\xa4\xec\xa9\xef\xcd\xb9\x76\xfd\xc9\xd9\xfc\x5c\xbd\x4f\x46\xfe\x91\xb5\x79\xca\x07\xf7\x57\x7f\xb6\x3b\xce\x58\x47\x86\xd3\x38\x42\x93\xb9\xff\x8f\xb5\x37\x0f\xdf\xa9\xda\xfb\xc7\x29\x89\x22\x63\x21\x73\xa6\x48\x3e\xec\xb5\x87\xa8\x64\xca\xac\xcc\x11\x62\xaf\x3d\xae\x3d\xef\xbd\xf6\xb8\xcc\x43\x66\x32\xcb\x10\x65\x26\xc9\x4c\x42\xe6\x8c\xc9\x3c\x86\xcc\x33\x45\x72\x10\xbf\xeb\x7c\xcf\x73\x7e\x1d\x8f\xdb\x75\x9e\xeb\x73\xdd\xff\xdf\x7f\xac\xfb\xbd\xdf\xf3\xf0\x7a\x89\xb1\x63\x47\x8e\x21\x69\x52\x2c\xd1\xbc\x25\x98\x01\x6d\x72\x54\x04\x2c\x85\xd1\x23\x35\x61\x05\x5e\xe1\x44\xc6\x23\x8e\x88\x9f\xb2\xfa\x53\xce\xde\x74\xb0\x50\xce\x41\x33\xe5\xbb\x85\xfe\x1a\x38\xb5\xd7\xbe\x5b\xf6\xc5\xcd\xf7\xa6\xff\xb9\x6f\xde\x8e\x59\x03\xf2\x0c\x5f\x79\xff\x31\x5f\xf3\xea\xd8\x0a\xf9\xff\xba\x74\xea\xfc\x56\x61\xc1\x4c\xa7\xf0\x9b\x63\x9e\x9d\xd4\xb7\xf8\x37\x7f\xcc\x6a\x5e\x29\x6f\xb8\xf1\xe5\x53\x25\xb2\xa5\xd7\xd7\x20\x5b\x16\x03\x89\xb0\x3e\xa2\x13\xa2\xda\x42\xa0\x47\xc0\x08\x81\xe7\xf1\x04\x24\x34\x84\x84\xf3\x64\x0c\x18\xdb\x60\x63\x9a\xe7\x79\x26\x81\x29\x7a\x0a\xcd\xbf\xfc\x05\xe0\xb2\xcd\x2f\x3e\x38\xfc\xc7\xb9\x6f\x8e\xd3\x23\xde\xcb\xf1\x8d\x30\xe9\xec\xa5\xf6\x13\xba\x64\x9f\xb9\xb3\xd5\xa0\x81\x69\x5e\x33\x34\x23\xce\x35\x58\xc5\xf0\xa1\x69\x4b\x0c\x85\x99\xc4\xd0\x21\x17\xab\xb1\x49\x39\xc0\x09\x71\x12\x19\x36\x21\x88\x98\xaa\xad\x27\x51\x18\x20\xe1\xc9\xd8\x29\xb7\x60\x6b\xbd\xb3\xff\xed\x37\xb2\x8c\x79\x7d\x7f\xeb\x5a\x61\xd3\xef\x0a\xbd\xb4\x6c\x56\xfe\x76\x5f\x68\x43\x7b\x0e\x18\xbd\xb1\x75\x9a\x1b\x4e\x6e\xa0\xbb\xd8\x26\x14\x60\xb0\x24\x6b\x32\xf4\x58\x96\xd1\x7d\x2e\x96\xa0\x61\x3b\x62\xe2\x71\xa1\x6c\x61\x02\x85\x40\xa0\xa5\xc4\x60\x2c\x91\xc8\x4f\x29\x31\x2a\x2f\x3f\x7d\x65\xea\x4f\x7d\xa3\xba\x95\x96\x2c\xca\xeb\x65\xbf\x5a\xa3\xc1\x5f\x13\x99\x53\xb5\xe7\xc5\x2d\x8a\xf6\xfb\x2b\x5b\xb3\x4f\x1e\x27\x38\x9d\xd9\x7f\xe8\xd8\x81\xfd\x66\x9e\x7d\x76\xca\x96\x57\x0b\x6d\xee\xbe\x74\x56\xad\xd1\x17\x5a\x6d\x3f\x3e\xee\xf3\x79\xaf\x8d\x9d\x18\x65\x1e\x6d\x25\x75\xd8\x22\x00\x29\x84\xf7\x22\xc5\xe2\x74\xc8\x09\x8a\xe6\x47\x72\xec\x8b\xa1\xe4\xfa\x31\xcb\x3a\x1a\xeb\x02\x35\xc1\x44\xd3\x19\xc9\x35\x45\xce\x01\xf0\x49\x55\xaa\x7f\xe9\x7e\x8b\x25\xdf\x9e\x3e\xfd\xcb\xa8\xe7\xde\xeb\xb2\x34\x03\x2d\xe8\xd6\xe6\xb0\xf0\xeb\xda\x45\x9e\xf4\xb6\xd7\xa7\x44\x8f\xe9\x69\xbe\x13\x0c\x2c\x59\x06\x9c\x1c\x22\x18\xa8\x06\xd4\xd8\xd0\xd0\x6c\x1a\x38\x1e\x1b\x5b\x2a\x1d\x06\x00\x9a\xbc\xe3\x32\x14\x84\x96\xc9\xb0\xb6\x0e\xf5\x14\x4b\xb6\x8d\x2f\x0e\xaf\xf5\xfe\xa5\xbc\xef\x39\x97\xdf\x69\x9b\x7d\x4c\xcd\x3a\x4d\x72\xff\x49\xe7\x7b\xb9\xf2\xc7\xd9\x3b\xdd\x98\xfa\xcb\x8c\x92\x69\xa6\x8c\xa1\xf9\x28\x91\x79\xc1\xa6\x1c\x64\xf2\x32\x48\x62\xd9\x21\x6e\x64\x70\x61\x1c\x69\x62\x14\x5a\x3a\x43\x34\xd1\x62\x02\x06\xd9\x2a\xc5\xfc\xb3\xcc\x8b\x52\xf7\x2e\xa7\xd7\x6c\xb7\xa3\xb7\x5f\xa8\xfd\x82\x8b\xcf\xc6\xdb\x0a\x15\x5b\xf8\xf9\x9d\xb3\x07\xb2\xb6\x6e\xd3\xa5\xcd\x1c\xe3\x97\x53\x77\x2a\x7f\x97\x5e\x49\x3b\xd0\x36\x04\x06\x72\x96\xc1\x5a\x06\x6d\x02\x49\x08\x59\x25\xb2\x04\x59\x70\x22\x03\xf2\x88\x08\x30\xf2\x63\x41\x32\x13\x24\x27\x1a\xf1\x55\x90\x82\x29\x74\xf7\x81\xe2\xe2\x4b\x3d\xdf\x7a\x66\xe0\xa6\x38\x68\xfe\xd6\xcb\x8d\xe7\xac\x29\x96\x67\xc2\xb2\x7e\xaf\xdd\x6b\x7d\x7c\xee\xbe\xa5\x0b\xd3\x4c\x21\x18\x00\xd7\x66\x91\x2e\x33\x9c\xe6\xfa\x9a\xa0\x0b\xbe\x4d\x69\x3c\x04\xba\xa9\x89\x40\x85\xae\x23\xf1\x92\xad\xca\xb1\x6e\xbb\xa1\x6c\x70\xaa\xc6\x6b\x4f\x31\xda\xae\xa1\x36\x7e\x44\xbb\xa1\xeb\xaa\xdc\xbd\x76\xfc\xe4\xdb\x53\x92\xdf\xe6\x65\x7f\xad\xf5\x52\x7a\x6b\xbf\x53\x25\xe4\x95\xfc\x91\xb6\x8f\x7d\x97\xe7\xec\x32\xd9\x5b\x8e\x3f\x91\x71\xe5\xe8\xcc\x03\x23\xf3\x0d\xae\xb7\xf9\xfc\x8a\x81\x4d\x4a\xf0\x95\xae\xdf\x2b\x9c\xbb\x55\xe9\xd7\xf7\xa4\xf7\x4f\xc2\xc0\x65\x00\x6b\x38\xa6\x2f\x9b\x20\xb0\xf4\x08\xeb\xac\x17\x3a\x01\x52\xa1\x44\x64\x8a\x4b\x0c\x51\x40\x42\x22\xb3\xc0\x23\x06\x24\x01\xd0\x52\x5c\x7b\xd4\xdd\xf8\xe1\xfd\x4a\x53\xea\x92\x6a\x33\x47\xbe\xfc\xe7\xe7\x5d\x86\x0f\x9f\x9d\xb1\xbf\xf7\xfd\x23\x0b\x3a\x54\x16\xda\x77\xce\x33\x6d\x51\x7a\x33\xa0\xc4\xc5\xbe\x6d\x28\xb4\x2b\x53\xac\x2f\x63\xe4\x12\x4b\x48\x18\xcd\x52\x34\x4d\x60\x74\x81\x10\x09\x6a\x0a\xd4\x18\x4d\x73\xcc\xc4\x0f\x28\x60\x98\xa9\xcf\xbf\xc6\xb7\x5d\xbb\x7f\xd0\x06\x9e\x97\x57\xec\xf7\xab\x54\xfb\x7e\xf2\xa8\x9f\xce\xec\xdf\xd5\x98\x5d\x5f\xe8\xe3\xcf\x72\xce\xbb\x36\x3d\xf3\xb0\xa8\x29\x25\x8d\x78\xde\x81\x2a\xe6\x74\x04\x85\x40\xb6\x24\x20\x1a\xa1\x29\xc7\x46\x82\x83\x90\x46\x92\x0f\x6d\x51\x77\x68\x35\xa6\x24\x9d\x95\x18\x8b\xc7\x38\x05\xf9\xf8\xc4\x0f\x8a\x74\x9e\xd8\x29\x2c\x46\x86\x26\x05\xc8\x97\x37\x56\x45\xdf\xbf\x1a\x9d\x9d\xd9\xaf\x50\xad\x63\xc5\x73\xea\xe8\x8d\xcc\xd3\xc8\xa6\xbe\xdd\x14\xb1\x16\x68\x8e\x0b\x3c\x8e\xd0\xb2\x15\x31\x26\x10\x71\xe0\x4a\x80\x08\x4e\xc4\xf1\x86\xc6\x02\x97\x47\x9a\x0d\x10\xa1\x95\x08\x84\x90\xa8\x4f\x46\xda\x7b\x65\xc1\x5b\xae\x3b\xf4\xd6\x95\x37\xfe\x44\x4d\x86\xdc\x5d\xc8\x17\x3e\x30\x65\xc9\xf3\x0b\xb3\x7f\x50\xb4\xdd\xea\x63\xf0\xf9\x39\xe9\x95\x72\x22\xc7\xb1\x40\x39\x09\x01\x02\x74\x69\xc9\x32\x34\xd7\x72\x75\x4e\x12\xa4\x00\x05\x84\xd1\x3d\x95\x4f\x78\x85\x85\xb4\xc8\xb9\x01\xb1\x3c\x4d\xf0\x53\x97\x7c\x85\x27\x0f\x9e\x37\x95\xbc\xc1\xac\xab\xbf\xfa\x50\x50\xea\x5e\x9e\x1c\x63\x9a\xe4\xde\xfb\xe5\xb4\x63\x7d\xca\x4f\xb5\x16\xbe\xba\x3b\xf3\x0c\xab\x29\x25\x4d\x54\x0e\x52\x89\x82\x13\x9e\x65\x2d\x56\x55\x4c\x5e\x47\x01\x74\x2c\x0f\x03\x3a\xd0\x90\xe8\x3a\xba\x8f\x19\x3b\xe2\xa1\x6f\x23\xe0\xb8\x1e\x8e\x9f\x94\xf4\x67\xb7\x27\xe1\x64\xe8\xa8\xf7\xda\x95\x69\x97\xa5\x59\x6d\xfd\xd6\x99\xef\x9b\x3d\xe0\xdb\xeb\xcb\x3e\x7a\x77\xe2\xcf\x5b\x1a\x5f\xcd\x3c\x4d\x46\x6a\x6a\xc7\xd8\x09\x7d\xc3\xf6\x43\xe8\xeb\x80\xa0\xd0\x8c\x4c\x53\x44\x8e\x62\x6b\x26\xd2\x22\xdb\x75\x02\xe2\xea\x0a\x82\x5c\xe0\x87\xba\x1a\xba\x21\x64\x9f\xd4\xe7\x9f\xdf\xea\xb1\x6a\x47\xc1\x3f\xee\x0d\xf9\xb5\x71\xe5\x1b\xd9\xef\x6c\x34\xe6\xb5\x84\x79\x1a\x5c\xbe\x91\xe5\x7e\xa9\xe7\x36\x0e\xdb\x3b\x2f\xbd\x19\x4a\xc8\xd1\x5a\xa8\x0a\x34\xd1\x39\x55\x35\x64\x81\xf7\x6d\x5d\x48\xe2\x44\xa0\x63\xe2\x1a\x6a\x1c\x2a\x76\x42\xb0\xa0\xcb\xd8\x91\xfd\x08\x5b\x34\x78\x4a\x13\xf4\xf6\xce\x2f\xc7\x0f\xb8\xb1\x6b\xd1\x90\x32\xf7\xcb\x9e\xef\x74\x75\x4e\x85\xef\x6e\xab\x77\xee\x75\x6f\x31\x2b\xd8\x78\xbf\xfd\xa7\xdf\x2d\x4e\xaf\xa4\x29\x8c\x13\x59\xa6\x23\x01\xab\x56\x90\x24\x8a\xe7\x44\xd0\xa2\x45\x9d\x37\x30\x42\x50\x4e\xf8\x48\x4c\x24\x4b\xa1\x08\x60\x81\xa5\x20\x86\x17\xa4\xa7\x04\xa2\xea\x53\xe9\xfd\xde\xe2\x99\x6d\x6e\xdc\xe8\x98\xe7\xe0\x57\xaf\x2e\xe9\x10\xb5\xab\x9b\x6d\xe5\xc0\xc9\x1d\x8f\xb4\xff\xbd\x59\xd5\x7d\xfd\x1e\xb3\x80\x0a\x05\x50\xd8\x4c\x7c\x3b\x9a\x50\xb1\xd2\x8a\xef\x87\x8e\x1e\xf6\xdc\x98\x6e\xd9\x87\xae\x1b\x30\xa9\x6c\x99\x07\x2f\xff\xfa\xc2\xd9\xd9\x69\xae\x6b\xd9\xd8\xa7\x91\xc4\x47\x30\x21\x8c\xe1\xd3\x16\x85\xb5\x24\xe0\x28\x4d\x83\xb2\x64\x01\x33\xc2\x21\x42\x6e\x6c\x45\x51\x84\x25\x21\xf1\x11\x65\x3e\x69\x01\x75\xbe\x58\xd5\x6d\xc1\xa4\x5a\xcb\xe6\x1c\xce\xdd\xb4\x6d\x97\x89\x77\xbf\x81\x6f\xb5\xba\x58\x1a\x97\x7b\x7b\x57\xab\x1d\xe7\x83\xbb\x66\x9a\x91\xc7\x68\x8e\x96\x34\x4a\x55\x55\x3f\xd6\x12\x97\xb8\xb1\x65\x70\x3a\x6d\x25\xb1\x0e\x1c\x5f\xa5\x93\x58\x60\x78\x46\x92\x6d\x28\x23\x4b\xf7\x08\x11\xb4\x27\x2d\xe0\xb3\xf2\xe7\x0e\x7e\xd6\xf4\xb9\xfa\x1f\x1c\x6a\x08\xbb\xd7\x1b\x3f\x6c\x75\xff\x19\x5d\xfa\xaf\x68\xd3\xf2\x7e\x85\xe7\x8b\xcd\xdb\xfe\x66\xe6\x5b\x4b\xa9\xfb\x8e\x20\x34\x7c\x1b\xc1\xd0\x74\x13\x8a\x77\x05\x4f\x56\x71\xec\x3a\x06\x02\x2e\x15\xaa\x94\xe3\x5b\xc8\x80\xba\x68\x04\x80\xb7\x74\x59\x14\x6c\x8d\x4f\x1d\x3b\xb3\x07\x5d\x3e\x18\xb6\xf1\xc4\xc3\x1e\x79\x9f\x79\xa1\xf8\xef\x97\x4f\xbf\x51\xab\xaf\x5d\xa5\xc0\xf0\xb7\x2f\xbe\xfb\x6e\x9d\xe6\x0f\xf3\xaf\x49\x33\xf2\x98\x29\x84\xa2\x84\x74\xc3\x0f\x9d\xd0\xe7\xac\x88\x63\x39\x26\x72\x23\xc3\x0b\x90\x2b\x84\x5a\x92\xb0\x8c\x8d\x54\x99\x12\xa8\xc4\x11\x80\xac\xff\x87\xe1\xfe\xbd\x75\x76\xf5\xd9\xd1\x2d\x7e\xaa\xb5\x09\x5f\x2f\x6b\x75\xab\x92\xb7\xeb\xb3\x8f\xb6\xc0\x2b\x53\xef\x7e\xb6\xea\x42\x81\x15\x1b\xab\xae\xc8\x7c\x47\x2c\x75\xc2\x8b\x54\x9e\x0e\x79\x45\x8f\x70\x28\xdb\xa1\x00\x20\x9f\x78\xc8\xb1\x69\x48\xf3\x82\x2d\x70\x32\x56\x91\xe3\xd8\x12\x48\x5c\x53\x85\x2e\x20\x48\x7a\xf2\xc9\xb3\x4b\xf5\x3a\x58\xe1\xab\x4b\x6f\xf6\xc8\xaf\x4d\xbc\xd8\xe8\xd2\xa8\x99\x47\xaa\x97\x9d\x97\x53\x3a\xd4\x6a\x6d\x3e\xeb\xb7\x46\x0a\x48\xf3\x01\x84\xce\x58\x14\xf1\x64\x85\x04\x91\x89\x5d\xe0\x30\x21\x24\xa6\x1f\xc7\x8c\x6c\xc9\x98\xe8\x56\x1c\x49\xd0\xb5\x0c\x99\x0f\x02\x8c\xe2\x30\x4c\xe8\xa7\x9c\x4e\x57\xa5\x74\xeb\xca\xb5\xa3\x3f\x6c\x3f\xbb\xf8\x93\xe2\x1b\xbf\x6d\xd3\xf4\x85\xc2\xed\x4b\x1f\x2b\x3d\xdc\x2d\xf1\x7e\x51\x6d\x63\xcb\x0b\x8f\x39\xd3\xe5\x05\xdb\x3f\xfb\x50\xed\xbd\x77\x51\xd3\x23\x45\xd0\xa7\xf5\xaf\xcc\x6a\x72\x61\x72\xbb\x99\xc5\x84\x91\x59\x4a\x6d\xf9\xa6\xc5\xf2\xcc\xb3\x6c\xa7\xfc\x93\x06\xed\x6b\x04\xc5\x80\xf5\x42\x8b\x75\x05\x44\x27\x30\x8a\x1d\x89\x51\x22\x97\xd3\xe9\xc8\xe4\x29\xd5\xe1\x04\xd5\xc2\x26\x6b\x3b\xc0\x56\xb8\xff\x28\xf9\x1e\xcb\xd3\x73\x5d\xd8\x72\xf4\x5a\x91\xd5\x95\x7f\xdb\xb2\xae\xcf\xf9\xe2\xc3\xe6\x18\x59\x07\xb6\x58\xde\xf7\xbd\x7a\x47\xf3\x9d\x7c\x81\x64\x14\x4d\x33\x96\xa4\x69\x09\x6a\x94\x78\x48\xb6\x13\x8e\xb6\x01\x66\x9c\x44\xa6\x92\xd8\x45\x98\xd3\x09\x60\xc3\xc0\xb5\x82\x10\x42\x91\x66\x90\x14\x1a\x4c\xa2\x41\xf4\xa4\x7b\x24\x59\xb3\x9d\x9c\xb4\xe8\xc6\xd6\x3c\xb7\xf2\xac\x39\x1c\x37\x2c\x7b\x7a\xec\xca\x75\x07\x0a\x8e\xa8\x72\xdf\x1d\xd9\x74\xd6\x8d\xd7\xb5\x34\xaf\x40\x61\x89\x0a\x99\x44\xa3\x1c\xca\x15\x42\xd7\x41\x7a\x62\x1b\xaa\x29\x44\x8e\x08\x1d\x47\xe7\x58\x1f\xf9\x01\x06\x12\x2d\x4a\x38\xb4\x19\x45\xd3\xe8\xd4\xa9\x58\xd5\x92\x13\x84\x86\xce\xda\x7a\xdb\xd4\xa2\xe3\x47\x17\x91\x4a\x2d\x68\xbc\xf0\xdd\x4e\xb5\xdb\x7c\x52\xfc\xd3\x92\x49\x9b\x8f\xee\x35\x49\xef\xb3\x4d\x4e\x16\x80\xee\x31\x6c\x20\xc8\x3c\x89\x39\x2e\x70\x1d\x9d\xc6\x81\xa3\x09\x9a\x69\x1a\xd8\xb6\x68\x55\xa7\x19\xde\x16\x25\x4e\x57\x0c\x37\xd6\xdc\x27\xbd\xfa\xfa\x67\xb6\xcf\x1f\x79\xea\xaf\xe9\xe8\x82\xfb\xc9\xb1\x7b\xda\x07\x77\xfe\x31\xe3\xb7\x86\xf7\xd1\xb1\xe7\x36\x0d\xfd\x72\xcc\x8c\x28\xf3\x6b\xd0\xa9\xf3\x9a\x08\x68\x96\x1d\xfa\x86\xc9\x7a\xb2\x6c\x44\x32\x32\x14\x45\xb4\x42\x0d\x39\xac\x68\xf9\x9a\xa9\xf2\x36\x27\x71\xaa\xcd\x19\x1a\x48\x22\xd6\xfa\x17\x8d\xec\xe3\xbe\xe6\xe1\x2f\x71\x1d\xdf\x9a\xf0\xf1\x9f\x05\xf9\xf9\xb5\x7b\x7e\x72\xac\xcd\x99\x57\xea\x78\xa5\xcd\x31\xd3\xa3\xf7\x9b\xf4\x5d\x36\x64\x72\x9a\xdb\x18\x32\xa5\x68\xb2\x6e\x26\x0e\x6b\x51\x12\xe0\x0c\xc5\x04\x89\xe0\xd1\x74\xcc\x99\x8c\x0f\x03\xce\x48\x20\x6b\x04\x10\x20\x06\xb2\x09\x15\x26\xba\x97\xba\x8d\xd1\xe8\xc5\x49\x93\x9e\xdd\x72\xe3\xe8\x8c\xee\x19\xb7\x72\xdc\x9c\x96\x71\x78\x6c\x8b\xcd\xf9\xb7\x2f\xce\x72\xf5\x2c\xb8\xd8\xf1\x7a\xfb\xac\x69\xc6\x6b\x97\x1d\x46\x36\x14\x5f\x35\x04\x0c\x21\x1d\xca\xae\xc3\x48\x86\x49\x22\xac\xba\xac\x0e\xb1\x8d\x43\x46\x72\x41\x68\x4a\xc8\xb7\x5c\xdb\x64\x41\x0a\xe6\xdb\xf1\x35\xf2\x8f\x28\x9c\xfd\xb3\xc2\x27\x33\x5a\x75\x1e\x7d\x60\xc6\x1e\x36\x7f\x87\xbc\xdf\xf5\x98\xb9\x25\x6f\xab\x36\xbf\x01\xaa\xe4\x8e\x34\xa3\x0c\x04\xc0\x56\x31\x0f\x6c\x3e\x96\x58\xe0\x98\x89\x23\x69\x48\x60\x44\xe0\x44\xac\x07\x14\x8a\xa2\x28\xcb\x64\x64\x17\x39\x82\x6d\xe9\x92\xc6\x43\x2f\xf5\xfd\x3b\x7b\xe8\xde\xe5\xe8\xc1\xf5\x67\x06\x9f\x8a\xfa\xbc\x61\x2e\x6e\xdb\x7d\xd1\xba\x4d\x2f\xe4\x7b\xd6\xdc\xb8\x7d\xe0\xfc\xc2\x03\xf6\xe7\x4f\xf3\x95\x8b\x2b\xb9\x3a\xa6\x63\xd6\xe5\xb0\xe8\x06\x2e\x44\xae\x25\xf0\x94\x07\x3c\xc7\x10\x13\x92\x10\x9b\x43\xa1\xe1\x70\x4a\x22\xb0\xbc\x28\x93\xc8\x4f\x11\xf2\x7b\xd4\xac\x9f\x91\x23\xf1\xf0\x97\x6f\x2c\x28\xd9\xb5\x57\xef\x4f\x17\xfd\xb4\xf8\x17\xef\x7e\xc7\x59\xbf\xb7\x69\x47\x6f\xed\x27\xa5\xf9\x54\x13\x58\x5e\x00\xec\xd8\x90\x04\x0f\xa9\x5c\xe2\x44\x40\x83\x21\xef\xca\xb1\x1b\x24\x82\xc8\xe8\x9a\x66\x78\x7a\x2c\xb2\xb2\x94\x44\xb1\xe6\x33\x49\xaa\x27\x0f\xfe\x71\x9c\xb4\x7d\x45\xff\x66\x9b\x8e\x2c\x2d\x77\x7c\xe1\x67\x8d\x5f\xf6\x3b\x54\x70\x46\x35\x21\x1f\xcc\x3f\xff\x7e\xa7\xa0\xe0\x9f\x69\x1e\x9f\x2b\x2a\x6b\x60\x8e\xb3\x15\xcf\x52\x34\x18\xeb\x02\x1b\xe9\x98\x37\xa2\xc4\xb4\x0c\x83\x36\x23\x26\x36\x22\x64\xd3\x24\x64\xe5\x38\x14\xb1\xc8\x87\xa9\x87\x60\x63\xd8\x29\x3b\xc6\xd0\xad\x76\x67\x34\x7c\x7d\x84\xd9\x62\x62\xb1\x56\x13\xe2\xb1\xbb\x67\x77\x8d\x27\x14\x11\x3f\xa8\xb4\x7c\xea\x1f\x69\xc6\x47\x35\x65\x81\xd7\x39\xcf\xc4\x90\xc4\xba\x2e\x87\x21\x16\x18\x13\x69\x86\x19\x87\x44\x90\xa0\x21\x45\x01\x67\x18\x26\xe2\x98\xc4\xc3\x14\xd6\xb1\x9c\x7a\x2d\xe4\xe2\xbd\xf9\x43\xcb\x96\x5a\xd6\xf3\x76\x91\xb0\xef\xb2\x60\xd3\x77\x53\xeb\x4d\xee\xba\x99\xea\xdf\xa9\xc9\x3c\xdc\xf8\xb3\xc6\x25\xd2\x8c\xdc\x19\xb0\xc0\x00\x51\x62\x8b\xba\xab\x1a\x8e\xe8\x10\xc2\xcb\x0e\x1d\x85\xc4\x56\x7c\x07\xf8\x44\xe0\x4d\x47\x49\x10\xd0\x90\x88\x4d\x42\x03\x00\xfe\x06\x00\xfc\xf7\x4a\xff\x7f\xdb\x31\xea\x53\x2f\x5b\x96\x52\x75\x1e\x5f\x87\x7c\x34\x7b\xda\xec\x1f\x6a\x6e\xd8\x75\xdf\x1f\xbe\xba\xf7\xce\xe5\xd3\xf7\xd4\x98\x37\xe1\xdc\x92\x57\x2b\x55\x2d\x3f\x8e\xe9\xd5\xa9\x57\x97\x34\xeb\x14\x82\x9c\x45\x08\x8a\x78\x5f\xf7\x6d\xcf\x32\x23\x8d\x96\x44\xd3\x32\x91\x60\xf1\xc8\x62\x5d\x20\x45\xa1\x27\xc1\x58\x52\xe2\xd8\xf5\x1d\xc8\xab\xa9\x5d\x7b\xc1\x41\xf7\xe4\x5f\xee\xee\xcb\x2d\x28\x47\xf7\x94\x5a\x38\xf3\x97\x7d\xf9\x0f\x7e\x72\xae\x72\xe7\x0b\xae\xd7\xbc\xf2\xef\xc7\xbb\xa5\x79\x7c\xc1\x70\x09\xa7\xaa\x0c\x23\xd0\x30\x88\x01\xa2\x1c\x10\x0a\x8e\x47\x34\x09\xcb\x91\x18\x13\x56\x31\x3c\xce\xf2\x63\x2c\x9a\x3a\x2d\x59\x0a\xaf\xc1\x14\x09\xfb\xa4\xf2\xbf\x7d\xd3\x68\xe8\x29\x60\xfd\xb5\x60\xdd\x51\x26\xef\x2a\x4e\x5c\xe3\xf5\xfa\xe9\x42\xb6\x46\xcb\x96\xcf\xe8\x3a\xed\x5a\xe6\xcb\xa2\xd4\xf8\x5d\x06\x1d\x79\x49\xc4\x13\xec\xc5\x8e\xe2\xb1\x48\x52\x3d\xd3\x70\x34\xc5\xf7\x12\x9b\x31\x78\x3b\x0e\xb0\xc0\xd2\x16\xcd\x06\xb4\x2b\x29\xa2\x87\xe2\xd4\x66\xd0\xba\x7c\xc6\xb1\x6d\x3b\x37\x4f\xee\xf3\x8f\xc3\xc7\x92\x91\x1f\xbe\xa8\x2f\xa9\x58\x8c\xf9\xfc\xfb\x06\x3d\x1f\xec\x5e\xc3\x8d\x6a\x37\x31\xbd\xcf\xd6\x5d\x17\x23\x18\x70\x24\x76\x12\xcb\xc4\x5c\xec\x1b\x1a\x32\x0d\x21\xb4\xfc\x90\xb0\xb2\x10\x2a\x1e\xa0\x28\xcd\x90\xa1\x4f\x01\xc1\xe7\x54\x51\x4d\xfd\xec\xa9\x65\xd6\xae\xfe\x2a\xda\xbc\xa4\x4e\xa9\x7a\xfa\xb1\x1f\xfb\x68\x39\xa7\x8d\xc2\x27\x46\x8c\x3a\xf0\x4e\xad\xde\x83\xdf\x9a\x9c\x3b\xcd\xcb\xee\x04\x9a\x3c\x9f\x24\x1c\x1d\x61\x06\x5b\x09\x14\x5c\xcb\xa2\x7d\x5d\x4e\x7c\xcb\x89\x18\x57\x62\x39\x85\xe5\x98\x20\xb2\x05\x27\x0c\x3c\xec\x63\xf7\x6f\x86\x8a\x7f\x93\x77\xfd\xb7\x49\x70\x9f\xba\xd9\xb3\xb4\x7b\x9c\xbc\xeb\x8d\xb3\x7b\x5e\xe3\xbb\x6f\xef\xf6\x69\xff\x7b\xde\x9c\x62\xe5\x6b\x31\x85\xff\x5c\xfd\x87\xfb\xf5\xf6\x1b\x19\xd7\x37\x8d\x69\x39\x2a\xf3\xa9\x64\xca\x3f\x29\x59\x54\xac\xf1\xd8\x4d\x00\xe5\x53\x46\x2c\xe2\x98\x91\x44\x1d\x32\x51\x62\x69\x92\x27\x88\x3c\xd6\x1c\x04\x2d\xc8\x06\xd8\xa5\x6d\x91\x37\xf9\xa7\x6c\xf4\x17\x38\xb1\xbf\x99\x70\xa4\x77\xbb\x73\x07\x7f\x3c\x1e\xf6\x98\xb1\xed\xb3\x26\x33\xb7\xac\xff\x61\xf8\xf5\xae\xa5\x0b\x74\x7a\x74\xf5\xa2\x9d\x66\x70\x44\x4f\xb6\x20\x65\x58\xac\x10\x83\x48\x14\x28\xd6\xf4\x23\x1d\x72\x71\x1c\xc5\x58\x71\x9d\x18\x85\xa1\x0a\x45\x18\x09\x3a\x56\x79\x9b\x8a\x7d\xca\x48\xfd\xec\x52\xd9\x6b\x1e\xff\xf1\xf7\x5d\xf3\xaa\x09\x6d\x6e\xb6\x64\x6a\x3c\x73\xee\x80\x37\xb6\xcc\xbe\x0f\xef\xb7\x2a\x03\xaa\x66\xfd\x62\x66\xe6\xc9\x6f\x53\xd3\xd8\x11\xdd\xc7\xba\x8c\x04\x0b\x13\xce\xa4\x69\x21\xe0\x78\x5f\x47\x9c\x4b\x38\x37\xf6\x18\xd3\x26\x89\x9e\x24\x81\x66\x85\x81\xc6\x31\xb6\x2d\x1b\x4f\x59\x6f\xdc\x56\x7f\xbf\x5f\xbe\x2a\xdc\xf3\xc2\xeb\x35\xcb\xdc\xd7\x5f\x92\x8b\xcf\x7e\xb3\xda\xae\x3a\x25\xe3\x29\xb0\x72\x09\x72\x78\x7f\x9a\x91\x12\x12\x55\x72\xcd\xc0\x94\x25\xcf\x62\x00\xed\x69\xae\xc8\x03\x0a\x3a\x91\x4e\x01\xc9\x0a\x19\x27\x41\x0c\xa2\xa0\xc0\x21\x4e\x37\x30\x63\x31\x61\xf2\x14\xce\xde\xca\xf2\x6b\x65\xdb\xaf\xbb\xe0\xdd\xfe\xe1\x58\x3c\xa0\xed\x7b\x5f\xae\xda\xa8\x7f\x9a\xff\xcc\xb7\x7c\xb9\xd7\xbb\x1d\xb4\x27\x4c\xc8\xfc\x29\x51\xca\x9a\x83\x27\x3e\x4d\x24\xdf\xc2\x02\xd6\x02\x2c\x6b\x9e\xc2\x59\x90\xc5\xba\x86\x1d\x14\xda\x88\xe2\x68\xd6\xe3\xa0\x6e\x5b\x0a\xc0\x22\x64\x88\xf2\x2f\x69\xff\x3f\x25\xf9\xf7\x55\xfb\x7f\x9b\xbf\xf7\xa9\xf7\x4c\xbe\x2c\xb5\x1e\x0f\xbf\x15\xef\x3d\xec\xdc\xf7\xfb\x47\x17\x3f\x7d\xe9\xfe\xa5\x29\xf3\xbf\xdd\xeb\xae\xbc\xf6\xb9\x7f\xf9\xc3\x21\x59\x7f\xcb\xf2\x90\x1e\xb5\x81\x4a\xaf\x29\x04\x01\xe0\x3d\x18\x18\x1a\x2d\x7b\x0e\xaf\x18\x11\xe3\xeb\x91\x8c\x5d\x47\x88\x0c\x8d\x46\x09\xf4\x75\x87\x56\x11\xaf\xb2\x34\x4d\xd3\x66\x22\x24\x4f\xc1\xa2\xec\x9a\xbf\xd8\xa8\xbe\x59\x83\xef\xcf\xee\x19\x78\xbb\xed\x5b\x79\x17\x96\x31\x76\x46\x1b\x8a\x7c\xb1\x62\x63\xdb\x76\x7b\x96\x1f\xbd\xf8\x55\x9a\x73\xa3\xc0\x4e\x90\x6c\x6b\x80\x65\x54\x3f\x08\x2d\x4b\x16\x00\xaf\xca\xd0\x26\xb6\x85\x05\x93\x42\x72\xe2\x24\xb6\xa5\xf1\x7e\xa4\x72\x72\x14\xbb\x89\x93\x5a\xa7\xfa\x95\xb9\xfb\x7d\x5c\xe8\xe3\xa1\xa8\x29\xd5\xfa\xde\xab\xe3\xbe\xa8\x36\xfe\x5e\xd1\xcb\x75\x73\x94\xe9\xf9\xe9\xb5\xa5\x9d\x56\xd5\x6f\x96\x66\xe8\x1c\x27\x96\x5d\x9d\x97\x1c\x55\x40\x09\x65\xa9\x20\x4c\x9c\x48\xa3\x88\x0f\x0c\x16\x61\xe8\x86\x48\x61\x6c\x22\xb1\x90\xb7\x2c\x11\x30\x5e\x40\xf4\xd4\xcf\xfe\xb5\xd7\xb5\xa1\xfb\xbe\xdc\xd7\x63\x61\xd7\x2a\xf0\x51\xc3\x9b\xb3\xe5\xca\x4b\xed\x05\x4b\xcb\x7e\x7c\x2a\x19\xdd\x7a\xdb\x67\x05\x3b\xa5\xb7\x0f\x2c\x9a\x76\xcc\x8b\xb2\xad\x58\x89\xed\x04\x3c\x82\x40\xf3\x42\x86\x57\x78\x5e\x76\xcd\xc4\xc3\x9e\x21\x89\xba\x2d\xe9\xa6\x84\x78\x8c\xad\x48\xd2\xff\x4e\xa0\xd7\x3d\xff\x7f\x9b\x6a\xf7\xa9\xd7\xaf\x56\x96\xc2\x8f\x07\xb3\xc1\x77\x4b\x6c\xa5\xeb\x7e\x68\xfb\xfd\x3a\xbd\x7a\xb9\xfe\xdd\xac\xee\x9e\x52\xe3\x6f\xf9\x7c\x9e\xd1\x07\x85\x9a\x67\x26\x8e\x0b\xd2\xde\x81\x32\x78\x4c\x59\xa1\xec\x42\x36\x4e\x18\x8a\xb3\x63\x2f\x88\xfc\x04\x58\x40\x0d\x80\xed\x1b\x9e\x16\x73\xbc\x42\x58\x9e\x33\xd8\x44\x08\xe0\x53\x56\xfc\x66\x5d\x0c\xf1\x30\x74\x7e\x53\xdf\xd9\xd2\x0f\xf7\x9b\xcd\x74\xab\xff\xe2\x44\xb3\xee\x6f\x2b\x52\x34\x47\xa1\xe5\x67\xd7\x9f\xb9\x9b\xde\x8f\x63\xbb\x38\x46\x90\xd2\x50\xac\xc4\x36\xcb\x32\xd0\x95\xa1\x67\x5a\x1c\x17\x89\x98\x61\xc2\xc8\xf2\x18\x36\x92\x19\xe0\x48\x22\xab\x05\x06\x1b\x88\x4f\x39\x58\xde\x5f\x7c\xfa\xc5\xb2\xcf\x2f\xbb\x36\xf0\xf0\xc8\xe0\x76\xd1\xc2\xfb\x4e\x8b\x85\xde\x18\x74\xfa\xf9\x8d\xd3\x16\x34\xac\xf8\x7c\xa5\x1f\x33\xdf\x1b\x49\xe9\x5e\x45\x91\xb2\x54\xce\x91\xa0\x84\x43\x5d\x13\x2d\x5a\x8d\x6c\x4d\x0d\x74\x86\xf0\xbe\x25\xc8\x52\xc0\xfa\x16\xe0\x28\x21\x34\x90\xc7\xa9\xba\x8e\x31\x9f\x5a\xda\x8d\x2a\x5e\xe9\xf6\xfa\x5f\x7b\x57\x7f\x76\x2f\xcb\xce\xaf\x8b\xe5\xce\x36\xec\xf9\x76\x2f\x1d\x53\xe6\xd0\xcb\x06\x14\xda\x51\xbe\xec\xb1\x56\xe9\x95\x36\x17\x4b\x32\x23\x69\x22\x6b\x42\x5b\xc4\x66\xa4\xb3\x61\x68\xda\x3e\xe3\x06\xb1\x40\x14\x40\x62\xc6\x14\x09\x90\x19\xc9\x76\x63\x88\x1c\x01\xa2\xa7\x00\xe2\x9c\xff\xb4\xcb\x89\xd1\xf3\x67\xaf\xbc\x9a\xb7\x44\xd5\x76\x75\x06\x3f\xbb\xf9\x87\xe3\x59\xb6\x57\xd0\x1a\x9c\x59\x6e\xd7\x57\xcf\xe4\x7e\x3b\xcd\x28\xd6\x8c\x1f\x00\x87\x8e\x20\x6d\xd2\x8a\x61\xeb\xa1\xe8\xc8\x4e\x12\x63\x45\x04\x48\x85\xb1\xee\x24\x02\x4a\x1c\xac\x0b\x9a\xab\x5b\x4a\xe4\x08\xff\x01\x6b\xf8\x6f\x0b\xfe\x6f\xe3\xc0\x3e\xf5\xb2\x56\xcd\x51\xea\x71\x0b\x2e\xfa\xe0\xdc\xc6\x81\x7f\xf5\xec\x57\xb8\xe2\xab\xed\xbf\xcb\x5e\xe3\xf6\x55\xa7\x77\xe7\x0f\xac\x0f\xab\x13\x7f\xe4\x73\x37\x74\xe7\x72\x7a\x13\x24\x4a\xe4\x23\xc8\x52\x12\x16\x50\x44\x09\x3e\x63\x24\x12\x26\xb6\x83\x63\xa8\xf1\x96\xcd\xa0\xc0\x23\x3a\xa4\x90\x28\xf0\x48\x45\x84\xe6\x08\xff\x14\xa4\x84\x47\x1f\x7a\x53\x9b\xc3\x45\xf6\xa9\x9b\xb5\xa7\x4b\x0b\x8a\x90\x4d\xdb\x5e\xde\x3b\x7c\x40\xfd\x5e\xb5\xab\xce\xee\x39\xa3\x68\xc3\xf4\x62\x8d\xf1\x3a\xc6\x8e\x04\x28\xd6\x94\x34\xd1\x8e\x79\x82\x78\xcf\x77\x15\x33\xa1\x39\xa4\xe9\x09\x88\x13\x84\x2c\x8f\xb7\x43\x4d\xa3\x78\x29\x44\x94\xee\x82\xd4\xa6\x90\x51\x6f\xee\xef\x45\x0f\xfd\xdc\x22\xe3\xab\x8e\xc1\xb2\x92\xcc\x99\xd9\x67\x4a\xfc\xf5\x59\x77\xeb\xa7\xa5\xbf\x4f\x94\x5e\xc9\x26\x65\x1e\xf6\x27\xa5\x4e\x41\x2e\x89\x21\x6b\x78\x32\xe2\x1d\x8f\xe3\x84\x48\x30\xf5\x44\xd5\x3d\x9f\xa3\x20\x17\x48\x0a\xc0\x7a\xc8\x01\xc7\x67\x69\x41\x0e\x14\x0e\x5a\xff\x4a\xfe\x9f\x0c\x66\x2f\xcc\x1f\xd5\xab\x67\x96\x39\x17\xb8\xfe\xc6\xce\x0f\x87\xfc\x72\xec\xf4\xee\x0f\xd6\x8c\xbe\x57\x69\xf4\xd5\x56\xd7\xdf\xe9\x7e\x7a\x5d\x8f\xf4\x4a\x5b\x12\x10\x72\x92\x58\x82\x1c\xeb\xf0\x32\x20\xc8\x26\x90\xb5\x34\x91\x43\xbc\x2a\x52\x0c\xc3\x84\x8e\x6f\x68\x8e\xac\x90\xd0\xa3\x18\x2a\xc1\x49\x94\x5a\xda\xf0\x99\x5b\x07\xe6\x6e\xe5\x70\xbd\x2a\x2b\x8d\x6d\x45\xb7\x6d\xf9\xa9\xe2\x92\x83\x8b\x6b\xea\xd9\xe7\xdc\xf8\x28\xff\xbc\x52\x2b\xdf\x4f\x6f\x74\x02\x12\x30\x38\xd5\x02\xc0\xa2\x88\x63\x50\x6c\xec\x2b\x80\x26\xae\xc4\x91\x58\x35\x74\x47\xb5\xfd\x50\x06\x48\x50\xa0\x20\xba\x5e\x90\xf0\x4a\xf2\x37\xfc\xd0\xbf\x6f\x63\xff\xdb\xa0\xad\x4f\xdd\x52\x39\xf2\x3f\x9e\x8d\x56\xf9\xa6\x63\xaf\xbc\x5f\x97\xba\xb9\x3c\xcb\x85\x87\x27\x6e\x0c\xb9\xf9\xd7\xd1\x6b\x7b\x57\xf4\xcc\x0b\x7a\x9d\x98\x57\xed\x48\xd1\xac\x99\x6f\x30\xa6\x4c\xeb\xb8\x00\x88\x31\x66\x54\x2a\xf1\x55\x86\x68\x2e\xe7\x26\x7c\x2c\x78\x86\x03\xb8\x38\xa0\x54\x2e\x76\x01\xa7\x29\x91\xe4\x18\x9c\x17\x6b\xa1\x6f\xc1\xa7\x94\x0a\x6a\x91\x47\xbd\xd8\x6f\x3e\x7a\x70\x67\xf1\x4c\x7c\xa7\xfa\xd6\xc1\xe5\x1a\xc9\x75\x87\x8d\xc9\x5d\x7d\xef\x57\xdf\x3f\x92\x82\x81\x2b\xd3\xfb\x6d\x62\xca\x96\x38\x43\x61\x55\xce\x73\x98\x80\xf0\x9a\x44\x47\x0e\x17\x22\x17\xdb\xaa\x40\xc7\xbe\x45\x1b\xb1\xe4\xf1\x8a\xe9\x53\x2c\x09\x39\x85\x7d\x7c\x8d\xe8\x3f\x73\xff\x71\x6d\x5b\x8c\x38\x39\xe7\xdb\x69\x0d\x7f\xcb\xca\x2c\x3b\xd1\x25\xeb\x77\x6b\xf2\xd0\x55\x3e\x19\xd7\x23\xb7\xde\x2f\x17\x93\xf9\x53\xc6\x94\xb1\x0c\x12\xdb\xa7\x88\xad\x52\x01\xc1\x12\xcd\xa0\x88\x67\x02\x57\x67\x31\xaf\x47\x01\x31\x60\x10\x48\x11\x30\x1c\x2e\x51\x78\x4c\xf4\x88\x77\x23\xfc\x94\xcc\xe1\x95\x9b\xdf\x8e\xee\xd0\xe5\x48\xef\xae\xef\xec\x3b\xd3\x76\x6b\x96\x5f\x6e\xbe\x58\x69\x75\xd6\xcb\xf0\xb5\xe3\xf2\xb9\xfa\x27\x9f\xbf\x59\x24\xbd\x7e\x07\x60\x3b\x21\xa1\xea\x59\xae\xa0\x50\x2a\x8b\x6d\x4d\x76\x24\xd5\xf4\x4d\xd3\x8e\xe9\x10\x50\x12\x8a\x44\x2a\xd2\x08\xe7\x46\x2c\x0a\x18\xdf\x4a\xfe\x3e\x97\x5b\x56\xfd\x5f\x2f\x06\x05\x99\xb6\x6f\xff\x5c\x62\xb1\xb9\x2d\xef\x37\xfa\xe8\x53\x43\xbb\x59\xd7\x5f\x5e\x3b\xe4\x97\x1f\x5a\xe4\x6c\xff\xc1\x57\xfd\xba\x4e\xec\x53\xef\xe4\xc3\x1b\x0f\x3f\x2f\xf6\x58\x87\x51\x1f\xfe\xdc\x43\x9d\xdc\x3c\xc1\xff\x74\xbb\xdc\xc4\x02\x77\xca\xf1\xfc\xde\x3a\x85\x99\x97\x56\xd9\x55\x0f\x77\xfa\xdc\x7a\xa3\x54\x7a\xfd\x94\x25\x98\x94\x46\x0b\x96\x11\xe1\x00\xd8\x02\x36\x58\x16\x4b\xa6\x19\x18\x3c\xd6\x44\x83\x63\x45\x21\x04\xaa\xe8\x22\x6c\x2b\x9a\x1a\x3a\x2a\x9f\x24\x4f\x4e\x16\x57\x68\x93\xeb\x7e\x3a\xb6\xee\xa5\x2c\xf4\x8c\x0a\xbb\x0a\x5e\x29\x77\x67\x69\xa3\xe6\x67\xcb\x5e\x9d\x38\xfc\x70\xfd\xc9\x4d\x8b\xbe\xba\x31\xbd\x4f\x66\x1d\x31\x54\x7d\x22\x51\xb4\x29\x21\xac\x59\x36\x54\x35\x8d\x24\x84\x55\x85\x40\xe2\x43\x15\x85\x5e\x68\x85\x12\xc6\x82\x47\x23\x31\x0c\x55\xcf\x4d\xdd\xcb\x05\x41\x87\xef\xea\x9d\x60\xb6\x7c\xda\xf4\xb9\x79\x23\x6a\x56\x9c\xf7\xee\x6f\x79\xeb\xd4\x3e\x58\x6b\xfa\xa1\x4e\x5f\x69\x83\xca\xbe\x94\x79\x64\xed\x94\x76\xa0\x46\xc4\x94\x78\x5a\xb2\x51\x22\x53\xc2\x3f\x7d\x6c\x40\xfb\x1c\x65\x40\x93\x46\xaa\x11\xf3\x06\x92\xd8\x48\x48\x42\x39\xf4\x74\x29\x4a\x68\x24\x2a\x4f\x4e\xcb\xa7\x94\xff\xb8\xc7\xf3\x6b\x5c\x4a\x5f\x73\xbd\x4a\xa1\x57\x41\x87\x07\xec\x8b\x0d\xbf\x6a\x0c\x3e\xbb\xfb\xe2\xc1\x5d\x2b\x8e\x6c\xac\x93\x5e\x1b\x90\x43\x96\xb3\xbd\x20\xd0\x2c\x47\xd3\x54\xc4\x46\x16\xd1\x88\x13\x18\x41\x1c\x5b\x01\xcb\x2a\x40\xc3\x0c\x07\x25\x94\x28\x9c\xef\x13\x41\x20\xba\xfd\x94\xe5\x8b\x45\xd7\x47\xde\xa9\x66\x2c\xdb\x37\x24\xfb\x4b\xc1\x24\xeb\x52\x83\x9f\xc1\x86\xbf\x2e\x7f\xd4\xa0\x44\xd6\xdb\x1f\x35\x3b\x54\xb9\xdc\xb8\xc7\x5b\xa8\xa5\x6c\x58\x7c\x50\x1b\xa9\x6d\x1f\x3b\xdb\x64\xf6\xd3\xdd\xb7\x1a\x5e\xf8\x6b\xc5\x3f\x9a\x3e\xea\xd7\xfe\x43\xaa\x65\x89\xfb\xa3\xd3\xec\x9f\x1c\x9a\x33\x75\x2d\x11\x1d\x47\x40\x2e\x0b\x99\x40\x73\x18\x5b\x34\xcd\xc8\x14\x01\x23\x06\x24\x76\x44\xcf\xf4\x18\x19\x46\xd0\x41\x2e\xb4\x88\xf9\x94\x93\x9a\x95\x0b\x8b\x6f\xaf\x38\xe1\xe5\x11\x3d\x7e\x5b\x72\xa9\x6e\xd1\x66\x07\xd0\x6f\x02\xf5\x01\x95\x65\x6a\xf3\x96\x8f\xfc\x1a\x03\x86\xec\x79\x4c\xf9\x86\x7e\x32\xf1\x95\x3f\x0b\x8d\x1c\x94\xfb\xb5\x29\x7d\xdb\x8c\x3f\x7f\xcc\x79\x7b\xeb\xd7\xdf\xdf\xef\xda\xa3\xd9\xfa\x71\xa3\x1f\x2e\x6f\x92\xe6\x0b\x2d\x51\x30\x79\xd5\xd0\x24\x5a\x61\x4d\x47\x25\x41\x14\xf9\x81\x66\x45\x32\xe5\x47\x62\x84\x75\x4e\x97\x44\x56\x49\x5c\x43\xd0\x29\x3d\xd4\xd4\xc4\xc3\xcc\x93\xca\xb7\xe2\xe8\xf9\x5c\x6f\xc2\x2a\x43\xf7\x74\x5a\x73\x7d\xed\x6c\xab\xff\xfe\xca\x07\x8b\x17\xb1\x1b\x7d\x39\x94\x5b\xb9\x35\x5f\xce\x5c\x99\xdf\x9a\x4d\x4d\x6b\x4f\x39\x02\x96\xa9\x40\x93\x40\x02\x5d\x59\xf3\x15\x29\x74\x05\x13\xc4\x09\x47\x3c\x87\xc8\xac\x2a\xb1\x0c\xc7\xc2\x98\xe5\x64\x68\x9a\x20\x12\xe8\xd4\x71\xe3\x9b\x41\xf7\xb6\x24\x8b\x9a\xe6\x2b\x3c\xed\x70\x85\xb2\x27\xba\xe7\x1a\xbc\xe3\x9b\x16\x65\xec\xda\xb5\x97\xce\xeb\xf8\x56\x85\x46\x45\x95\xf4\x46\xe9\x44\xc3\xb4\xcb\x2a\xa2\xab\xb2\x36\xf2\xe5\x84\x8f\x35\x87\x8e\x14\x47\x32\xec\x10\xe2\x38\x84\x06\x1f\x40\xcb\x33\xdd\x38\x48\x80\x07\x12\xc9\x7f\xca\xa4\x69\xe2\x91\x35\x40\x2d\x76\xe9\x95\x5a\xbb\x72\x75\x2d\xf8\x61\x48\xce\x7f\x43\xbd\x33\x16\x4d\x98\x33\xb7\xe7\x92\xab\xfc\xe6\x61\x99\x1f\x03\xa6\xa6\x2b\xe0\x68\x5f\x61\xb0\x8f\x7d\x8b\x47\x3a\x09\x54\xe8\x62\x8b\x75\x23\x97\x37\x3c\x9e\xf3\x35\xcb\x45\x8e\x19\x5a\x94\x1c\x46\x96\x13\x11\x87\xd1\xf5\x27\xe3\xc0\xb9\xc3\xaf\xb2\x2d\xae\xac\x92\x5f\x5c\x96\x75\xd3\x7b\x5d\x57\x3d\xf7\xfc\xab\xaf\xd6\x2c\x7c\x2a\xd7\x57\xeb\x70\x07\xa5\xd5\x8e\x51\x69\xa6\x24\xe6\x28\x3f\x22\x51\x8c\x3d\x3b\x8c\x75\x00\x23\x18\x33\x4a\x04\x54\x81\x4d\xb8\x80\x31\x23\xa2\x00\xda\x33\x01\x17\xe2\x98\x00\x9e\x8a\x5d\xda\x8b\x53\xa7\x71\xc3\xaa\xbd\x98\x2c\x79\x70\x74\x7e\x99\x2d\xc3\xab\x13\xcc\xcf\x3b\x66\xf5\x5f\xd3\xbc\xe1\x57\xb3\x1a\x1e\x2c\x37\xef\x0f\xbb\x7f\xe6\x1b\xd5\xa9\xef\xae\x14\x85\x41\xb4\xe0\xbb\x9e\x4f\x69\x9c\x0a\xc3\xd8\xa3\x09\x41\x8a\x44\xcb\x14\x0f\x88\x06\x89\x45\x24\x9d\xa0\x00\x63\xcd\x56\x68\xc3\xc2\x52\x6a\x05\x99\x70\xb5\x78\xe9\x0e\x6b\x6b\x4c\x3b\x57\xe2\xa3\x2c\x4d\x07\x37\x3c\xb6\x5e\xfe\x6d\x70\x81\xc1\x9f\xb6\x7f\xb5\xe4\xf1\x02\xea\xde\x31\x69\x46\x8d\x0d\x50\x22\x29\x9e\x63\x07\xba\xa7\x41\x6c\x2b\x36\x63\xf1\x71\x4c\xfb\x8a\xc4\x3a\xa2\x88\x62\x68\xa2\x20\x26\x48\x0d\x04\x9a\xb5\x19\x06\x47\xff\x91\x34\xff\xff\x4f\xfe\xa2\x77\xce\xaa\x9f\x97\xdb\x70\xe2\xeb\xe1\x35\xe6\xf8\x8b\x97\xdc\x8c\xa7\x9f\x3c\x31\x10\x54\xac\xff\xdb\xea\x0b\x03\xae\x4c\xec\x93\x5e\x54\x16\xa8\x40\xcc\x7a\x1e\x4d\x5b\xa1\x89\xe9\xc0\xa5\x75\xc5\xd2\x45\xdb\x34\x34\x37\x32\x09\xaf\x83\x44\xa4\x25\x56\x70\x75\x46\xe6\x43\x46\x37\x1d\x48\x29\xa9\xcf\x52\x2b\x8c\xce\xd8\x3d\x23\xbc\x86\xbf\xed\xb6\xb0\x59\x39\x5a\xce\x76\x34\xd8\x78\x64\xf2\xf2\x7f\x6c\xe8\x95\xf7\xe0\xd8\xf2\xa3\xb6\x67\x9e\xef\x38\xf5\xd6\x31\xb0\x7d\x9f\x46\x10\x1b\x3e\xd4\x25\x0d\x85\xbe\x68\xb2\xb1\x41\x34\x83\x37\x18\x4b\x04\x14\xf4\x55\x23\xf6\x79\xc2\xc6\xbe\x9e\x50\x12\xd1\xa2\x27\x7d\xf5\xc3\x89\xef\x6f\x7b\xe5\xdb\x49\xc7\x3e\xaf\x3e\x67\x82\x7c\x25\xc7\xa7\xc6\x80\xae\x2f\xbe\xd8\xbd\xc0\xeb\xb0\xce\xc8\xc2\xa8\x25\xf7\x43\x7a\x7d\x75\x1c\x28\xa2\x27\xab\xaa\x6f\xf8\x86\xeb\x05\xbe\xe9\x40\x4f\x57\x42\xde\xa2\x13\x14\xb2\x2a\xe6\x58\x2d\x06\x34\x25\xd0\x00\xda\x14\xc7\xa8\x31\x7e\x0a\xf6\x7f\x2d\x38\x30\x43\x08\x07\x1c\xda\x57\xbf\x44\xae\xb9\x4d\xff\x51\xfc\xd2\x9f\xd3\x2e\x16\x3c\x59\x9b\x39\x38\x6d\x5e\x5e\x73\xe7\xc8\xcc\x2b\x48\xea\xe9\x29\xb0\x91\x1a\x03\x81\x71\x4d\x26\xd0\x65\x45\x49\x6c\x15\x98\x81\x03\x30\x9b\xf8\x81\xcf\x47\x9e\x48\x6c\xe2\x71\x8e\x40\x70\xc2\x46\x38\x11\x53\xac\xd5\xd5\xa9\x6e\xee\xfe\x91\xe1\xef\xe6\x28\xd8\x71\xec\x8e\xef\xae\x31\x6f\xee\xef\xdb\xf1\xfe\x9d\x51\x9f\xf7\x6e\xde\x6d\xc0\x99\xd2\x4d\xd2\x7c\x00\x06\x4d\xe2\x38\x04\x5a\x02\xcf\x22\xda\x24\x21\xb0\x24\xd3\x16\x0c\xc5\x72\x19\x9a\xf0\xd8\xd7\xa5\x48\x70\x29\xa0\xe9\x50\x71\x43\x0a\xf2\x21\x7a\x4a\x11\x38\xe9\xd1\xb8\xa0\xc6\x8a\x17\x4b\xd4\xc9\xfa\x60\xf1\xc3\x87\x05\x66\xce\xa6\xaf\x7b\x1d\xcb\x56\x2c\x52\xb4\x67\x5b\xd3\x3d\xf6\x7b\xe6\x91\x86\x52\x9f\x0b\x58\x88\x85\x9e\x8f\x0c\xcb\xe1\xa5\x90\xd2\x15\xde\xc1\x34\x81\xa1\x11\x26\x21\x03\x84\x44\x31\x4d\x0d\x09\x89\x6f\xc0\x40\x96\x05\x51\x8d\x10\x93\xfa\xd9\x59\x65\xdb\x7b\x4b\x38\x55\xbf\xcb\xd4\x47\x2b\x32\x3e\xac\x78\xf7\x78\xf7\x77\x46\x0c\xfc\x71\xee\xc0\xec\x03\x4b\x2d\xf9\xa8\x6a\xfe\x0a\x69\xc6\x75\xb2\x24\x46\x71\x81\x65\x10\xde\x52\x4c\xac\xb0\x8e\xac\x50\x6c\x6c\x62\x95\x40\x35\x51\x8d\xc0\xf1\x75\x16\x8b\x3a\x17\x5b\x7c\x8c\x4c\xdd\xff\x17\xac\xf1\x93\x7a\x3d\x37\x39\x34\xe5\x8b\x1e\x53\xca\x6e\x78\x5e\xbf\xbf\xef\x85\x8d\x2b\xbe\x1a\x3f\x61\xea\xf4\x47\xa7\x83\x4f\x5b\xce\x68\xbe\xb8\x7a\xc3\xa3\x69\xee\xe2\xb0\xb6\x2d\x99\x6e\x40\x7b\xac\x1f\xf8\x80\x92\x69\x53\xb2\x03\xc5\x77\x6c\xd1\xe0\x1c\xd7\x14\x22\xe2\x90\x30\x11\x1c\x3b\xb2\xf8\x88\xc3\xda\xbf\x18\xd3\x1f\xd7\xeb\xed\xed\xfd\xaa\x1b\xc5\xd6\x59\xc7\x8d\xd6\x92\x59\x79\x38\xd0\xec\xf8\xdc\x55\x1f\xff\x45\x87\x5d\xca\x17\xfd\xf8\xaf\x8f\xf4\xe7\xd2\x2b\x69\x5f\xb2\x51\xc8\x11\x45\x52\xb0\xaa\x53\x96\x64\xfa\x81\x22\xd3\x38\x42\x02\x51\xb5\xc4\xb3\x0d\xe0\x18\xbc\x18\x40\x2b\xf1\x43\x49\x0b\x0d\xe0\x59\xa9\xb3\xbd\x2b\xc7\x7b\x07\x9b\xc7\x77\x7d\x6f\xcf\x81\xf1\xce\x5b\xb5\x6f\x1f\x6a\x71\x2f\xfc\xf9\xe3\xf2\x87\x2a\x7c\x51\x2d\xcf\xf1\x87\x56\xa3\x2c\xe9\x7d\x36\xe0\x2c\xd3\xf4\x7c\xc2\x81\x44\x61\x14\xdb\x21\x14\xe1\x2c\xcf\x20\xc0\xa4\x02\x16\xb2\x91\x40\x71\x48\x53\x2d\x2c\x29\xd8\x22\x3e\xad\x49\xc2\x53\x6e\x17\x5e\xfa\xa6\x74\x8b\xc2\x8b\x5e\xfb\x79\x0d\x78\xe6\xc3\x11\x15\x57\x7c\xb9\xbe\x0c\xf1\xaf\xf7\x7d\xb0\xa9\xc1\xd8\xfc\x45\x3a\xc4\xa7\xca\xa4\x37\xc4\x84\x21\x54\x02\xc9\x21\x8a\x61\x43\x9b\x63\x80\xef\xba\x34\x1d\x12\x0d\x32\x74\x02\x03\x14\x5a\x82\x20\xf1\x40\x93\x75\x2b\x92\x65\x93\x11\x05\x2a\xc5\xb9\xfa\x9b\x1f\xe7\x1d\xdd\x3e\xfb\x42\xb5\x4b\xfe\x29\x3f\x7e\xbc\x75\xdb\xc2\x9c\xaf\xf4\x5b\x59\x75\xfb\xed\x7c\xb7\x0e\x95\x3c\x76\x64\x5c\xbf\xcc\xaf\x40\xa7\x1e\x40\x39\x86\x60\x26\x72\x12\x48\x5c\x6c\xf2\x22\x03\x8d\xd0\xb6\x68\x2f\x71\x18\x87\xd1\x80\xe9\xc6\x48\x8a\x28\x24\x19\xb1\x80\x20\x4b\x45\x8c\x9b\xd0\x4f\x3e\x99\x71\xdf\xfd\x80\x7e\x65\xf5\xa8\x8a\xde\xc3\xd1\x2b\xcf\x36\x7d\x71\x55\xd3\x4f\x4f\x8d\x3f\x5e\xea\xd6\x30\x6e\x45\xeb\x5d\x53\x56\xa4\x99\x87\x54\xe4\x62\xd9\x94\x29\x83\xb6\xe2\xd0\x8f\x40\xac\x09\xac\x17\x26\x16\xf1\x54\x51\x8e\x75\x4f\xe0\xa0\xe7\x06\xba\x46\x5b\x82\x08\x0d\x5a\x85\xf0\x5f\xa4\xd8\x4f\x7a\x8f\x81\x27\xf2\xb7\x29\x37\x3a\xbc\x5c\xa3\xd6\x17\xd2\xe2\x41\xc7\xae\xf4\x1e\xc3\xe7\x6b\xb0\x64\xf3\xc7\x7f\x4e\xdd\x17\x8d\x71\xdf\xc8\x7c\xd5\x9f\x9a\xf1\x95\xa6\x00\x2f\x09\x26\xe2\x7c\x29\x42\xbe\x13\x50\xb1\xed\x3b\x28\x16\x21\x1f\x13\xac\x89\x94\x12\x00\x5e\xa0\x35\x2f\x02\xd8\xa3\x89\x8e\xff\xe3\xd9\x7f\x83\xea\xbc\xfa\x0f\xb9\x2f\x3a\x5c\xa2\x5a\x85\x46\x9d\x77\x94\x2b\xa0\xac\x62\xde\x2b\xff\xaa\xfd\xc2\xe1\x8a\xb9\x8b\xe6\x49\x76\x5e\xcf\x7c\x54\x4c\x59\x0a\x44\xa2\x14\x69\x21\xcd\x53\xae\x04\xdc\xd8\x8f\x28\x5b\x75\x09\x9f\xc8\x26\x15\xc6\x14\x17\xb9\x32\x84\xaa\xed\xc8\x84\xd1\x3d\xdf\xe5\x23\x3d\x06\x42\xea\x52\x60\x09\x7b\xa1\xf3\x4f\x5b\x3a\xfd\x7a\xe2\xcc\xbe\xfd\x8f\xde\x2d\xff\x7b\x89\xe1\xa5\x3f\x5a\x58\x25\x47\x9d\xf1\x55\x8a\xd4\x2c\xb6\x78\x5c\xe6\x87\x04\x29\x75\xda\x70\x6d\xda\x23\xc0\xd3\xb0\x48\xb1\x71\x2c\x84\x9c\x69\x86\x11\x96\x58\x47\xd3\x30\x8b\x0d\x8d\xa8\x61\xc8\x39\x31\x30\xb5\x40\x77\x00\x01\xbc\xfa\x94\xd6\xc3\x1f\xab\xfa\x6d\xb9\xd5\xb4\x16\x0a\xff\xfa\xaa\xdd\x3f\xe2\x9a\xcc\xe8\xdd\xed\xd6\xf6\xac\x7f\x3f\x5b\x03\xaf\x01\x7d\xab\x73\xe5\x75\x8f\xff\xfa\xd9\x51\x57\xcd\x81\x9d\x5f\x5c\x79\xb5\x7b\xa9\xeb\xfc\x73\x55\x8c\xd6\x63\xf8\xd3\xa7\x46\x97\x9b\x3a\xae\xd4\x9a\x82\x25\xbf\x19\xbb\xf7\x31\xe5\xfb\xfc\xea\xb5\x2f\x87\x9d\xe3\xee\x1c\x3a\x57\x65\x69\xdf\x71\x8b\xb7\x2e\xbf\x3e\x69\x69\x58\x7f\xf2\xfc\xb3\x60\x72\x74\xb4\xcc\xe2\x34\x8b\x44\x8e\x4c\x39\x10\x5c\xd3\x92\xc2\xc4\xc5\xc0\x48\x78\x18\x18\xac\x03\x55\x25\xa1\x02\x04\x25\x46\x4a\x42\x96\x76\x59\x5b\x70\x28\xc0\x32\x82\xeb\xa5\x68\x54\x4c\x98\x57\xf2\x45\xbb\x43\xa5\xdf\xce\xf7\x28\x7b\x7c\x54\xb5\x21\x25\x16\x8f\x90\x0f\x0f\x38\x27\x0e\xbd\xf8\x83\xb9\xab\x4a\xa3\x6c\x69\xde\x57\x06\x32\xc0\x4a\xa8\x60\x28\xbb\x01\xa2\x55\x85\x51\x58\x87\x76\x38\xd7\xb6\x39\x4f\x13\x61\x12\x0b\x31\x17\x72\x9e\x68\x5b\x5e\x48\xab\x4e\xec\xc1\xa7\xe4\x36\x3f\x17\xc9\xfa\xfe\x04\xeb\xdc\x7b\xd1\x5b\x27\x83\xfe\xcd\xf2\x2e\xb8\x58\x95\x9f\xbe\xe0\xf5\x5c\x35\xda\x86\x72\xa1\x06\xbd\x9b\x0c\x4b\xaf\xa4\x75\x46\x56\x63\x68\x8b\x89\x13\xe8\x58\xe3\x5d\x80\x12\x8b\x47\xc8\x56\x04\x4f\x90\x03\x45\x81\x76\x62\x8a\x91\x9f\xb0\x94\x69\x89\x24\xa2\x0d\x04\x53\x7b\x27\x6f\x55\x83\xbc\x4b\x8a\x7e\x7d\x6b\x5e\x9b\xbe\xdd\x2f\xae\x0f\xcb\x95\xbf\xf8\x36\x5b\x10\xbe\xdb\x35\x57\x85\x32\xf7\x4f\xd7\xff\xeb\x7e\x7a\x4d\x5d\x77\x64\x8a\x62\x79\x4a\x50\x93\x80\xa7\x29\x97\x8f\x79\x9f\x93\x68\x56\x56\x93\x98\xb2\x5c\x27\xe2\x30\x41\xb6\xc4\x24\x92\xab\x85\x49\xcc\xfe\xcf\x7e\xe9\xe3\x75\xe8\x7d\x3d\x3b\xf5\x42\xf5\x1f\xd6\x2d\x5c\xa1\xb7\x5a\x5a\x17\xf4\x2b\xfc\x60\x5d\x85\xc3\x35\x8f\x1f\x65\xce\x5d\xba\xfa\xf9\xf8\xaf\xd3\xcc\x32\xc1\xfe\xf3\x91\x3c\x15\x21\x89\xe7\x23\x43\xa6\x69\xd1\x8f\x62\x9f\xa3\x0d\x39\x60\x21\x84\x16\xe5\x59\x28\xe2\x59\x95\xd1\x2c\x11\x89\x50\x83\x82\x98\xba\xe2\x6f\xd7\x22\x68\x3f\x7f\xf1\xef\x2d\xb7\xf6\xfd\xa3\x6e\x15\x29\xeb\xa8\x5f\xde\x1c\x5e\xfc\xbb\x23\xe6\x33\xbf\x6f\xc9\xb7\xb8\xd1\x9a\x31\x9f\xa5\x79\xf9\x38\xe0\xa8\x90\x06\x89\xa9\x28\x91\x2b\x07\x12\xe6\x28\x9b\xc3\x41\x42\x99\xb1\x0a\x74\x33\x96\x25\xa2\xc9\x98\x55\x65\xa4\x22\x4b\xd4\x35\x8a\xd8\x4f\x4a\x5a\xdc\x35\x4e\xcd\x51\x4d\xaf\x75\xd9\xa5\x8b\x7c\x50\x9d\x3f\x38\xd7\xef\x16\xe5\x2f\x30\x6b\xd9\x0b\x8b\x72\x15\xaa\xa6\x36\xca\xfc\x81\x46\x4a\x53\xd4\x03\x1a\xb3\x51\xc4\x50\x8a\xa1\xd0\x86\xe5\x60\x2f\x72\x63\x2d\x24\x00\x39\x46\xa8\xfe\x3f\x4e\x3a\x18\x21\x8e\xe5\x64\x49\x67\x04\x83\xc6\xe4\x69\xf0\x18\x6f\x0e\x19\xb9\xbe\xd7\xe4\x12\x1f\x0e\xea\xee\x8e\x6f\x5d\x3d\xac\xf6\xf5\x1b\x6f\x96\xcc\xdf\xa4\xd9\xec\x05\xdf\x7c\x92\xbf\xca\xaa\xb7\x0a\x3f\xf6\x5d\x6a\x0f\xba\x14\x16\xec\xdc\xc7\x3b\xfe\x39\xac\x53\x70\xfb\x6e\x43\x79\x36\x67\xe7\x4a\xaf\xde\xad\x34\x6c\xc7\xe0\x61\xf9\xc7\xe7\xcf\x3c\x3c\x7d\xea\x41\x3e\x8c\x78\x86\xc1\xb1\x45\xa9\x8a\xc8\xe9\x91\xa8\x83\x38\xf6\x04\xc8\x60\x0e\x89\x21\x84\xba\x21\xd1\x5c\x22\x21\xc0\x70\x26\x52\x59\x96\x24\xc1\x93\xd9\xfd\xfd\x7e\x85\x5f\x28\xd9\xb9\x65\xa1\x17\xd1\x4f\x23\xe3\xbb\xa3\xbe\xf8\x64\x11\x79\x69\xdd\x76\xaf\xf7\x8c\x06\x0d\xab\xee\x1c\xf9\x45\x9a\x99\xb7\x62\xd5\xe7\x75\x51\x61\xd9\xc4\x63\x28\x4f\x17\x54\x4e\x37\x54\x1a\x4b\x74\x10\x51\x9c\x64\x4a\xba\x03\x44\x81\x45\x81\x60\x1b\x06\x92\xb1\xad\x22\x9c\xda\x02\x6a\xfc\x19\x5e\x3d\xa0\x1a\xa2\x5b\xe0\xf5\xb6\x0f\xfe\x5c\x59\xee\xda\xeb\xcb\xc6\x4d\xde\x55\x7b\xd5\x33\xe5\x0f\x97\x6a\xbe\x3c\x57\xe6\xa7\xe1\xa9\x11\xf5\x11\xeb\x5b\xbe\xa0\x29\x96\x10\x24\x3e\xa6\x38\x5b\xa2\x89\x66\x47\x82\x6a\x13\x5e\xa6\x7d\x9e\xc2\x9a\xe8\x49\xba\x41\xd9\x82\xcb\x10\x81\x4b\x15\x8c\xba\x6e\x6a\x4b\x5f\xda\xf7\x6d\x25\x7e\x6c\x85\xcf\xff\x3a\xf2\xd6\xa6\xdf\x2f\xb7\xfd\xbc\xd9\xc2\xe5\xd9\xe0\x77\x64\xdb\xae\xc1\x0f\x7e\x4e\xaf\x7b\x0c\x88\xa9\x69\x89\x2a\x30\x71\xc4\x6b\xbc\x91\x60\x1e\x29\x8c\xab\xf9\x12\xf2\x08\x8a\x0d\x87\x17\x43\xec\xab\xae\x45\x31\x8c\x64\x59\x0e\xe3\x61\x25\xcb\xff\x26\x0c\xfb\x6f\xc3\x9a\x3e\xf5\x4a\xd5\x2a\x55\xea\xf1\x09\xfe\xaf\x4d\x97\x4d\x7b\xef\x42\xe3\x21\x2d\xfb\x29\xef\x1d\xbb\xf3\xbc\xb9\xbf\x75\xbd\x47\xdc\xf4\x3c\xe5\xd6\xb3\xca\x6b\xd3\xc0\x17\x99\xe7\x80\x4e\xdd\x05\x91\x14\xcd\x41\xc0\x8b\x74\x60\x99\x1a\xab\x33\xb6\xce\x3b\x3c\xc7\x68\x32\x45\xb0\xa6\x52\x04\x44\x96\xa8\x53\xba\xcf\x51\x01\xd2\x54\x1a\x08\x41\xea\x90\xbb\xaf\xc2\xcc\xa6\xe5\x92\x0f\xfa\x54\x2a\x95\xc5\x1c\xd5\x7b\xd0\x37\xbb\xe6\xb5\xd3\x8b\x62\xa1\x64\xc7\xcf\xe6\x6d\x5d\x56\x30\x5f\xf3\xf4\xea\x53\xe0\x68\xc4\x8f\x7c\xd9\xe6\x88\xed\x48\x2e\x27\x92\x28\x89\x68\x46\xd1\x58\x3e\x70\xad\x30\xa0\x8d\xc8\x57\xe8\x80\x4a\xe8\x98\x75\x28\xe4\xbb\xc2\x53\x8e\x0c\x96\xbf\x3e\xe4\xcb\x9e\x9b\xec\x0f\xdf\x98\x59\xbf\xfc\xaf\xd5\x5f\x03\x37\xce\xfc\xd9\xea\x85\x6f\x0b\x2d\xec\x99\x7f\x49\xd3\xdb\xe5\x5b\xa7\x99\xd9\x33\x22\xa2\x28\xc6\x0a\x36\x55\x51\x62\x74\x37\xf1\x34\xd5\x77\x01\xc4\xc4\xf3\x34\x5d\x0e\xac\x80\x82\xac\xcf\x59\x11\x16\xb1\xa2\x45\x3e\xe4\x79\x9c\xfa\xd9\x5f\x0f\x70\x94\x69\xb7\x3e\x78\x77\x53\xe3\x3f\x9a\xf4\x2a\x38\x7c\xc0\x6b\x57\xd6\xbf\xfb\xda\xdc\xdd\x17\xf7\x3c\xe7\x7c\xd2\xfa\xc4\xa3\xcc\xa3\x37\xa4\x2e\x0a\x54\x5b\x08\x02\x24\x32\x08\x85\xaa\x14\xe8\x96\x23\xb8\x02\x74\x0c\x56\xa7\x00\xa3\x0b\xbc\x61\xfa\x3c\x25\x0b\xbc\xcd\xfa\xc4\x57\x12\x85\x72\x9f\x34\x85\xff\x36\xd2\xeb\x53\x2f\xc7\x0b\xff\x9b\xac\x64\x6f\x8d\xa3\xa5\x86\xf7\xaf\xb1\x5a\x1e\x96\xd1\xa9\xaf\xec\x76\x76\x8c\x8c\xa5\x58\xce\x5d\xa7\xd7\x51\xf2\x4a\x8b\x8f\xf3\x1c\x4e\xf3\xb2\x2f\x2f\x05\xc0\x61\x12\x99\x93\xa1\xe4\x86\x46\xa2\x58\x11\xe7\x31\x81\xe4\x81\x44\x35\x5d\x06\xf8\xc8\x8a\x69\xd5\x82\xae\x45\x45\x31\x60\x60\xa2\xa6\x2e\x7d\xf6\x4e\x1e\x7e\x79\xd1\xae\x56\xe7\x1b\x74\x68\x93\xfb\xa7\x83\xf7\x27\xe6\x1b\x75\xfe\xf5\xd1\x0d\x5f\x6f\xae\x1e\x88\x4b\xec\xe8\xff\x47\xc7\xf4\x26\x17\xa2\xe4\xc7\x38\x24\x9c\x8e\xa1\xa2\x85\x1e\x32\x18\x57\xe5\x39\x96\x73\x41\x90\xb8\x09\xaf\x2a\x91\x19\x3a\x8c\x26\xe1\xc8\x83\x2c\x44\x14\x4f\x49\xa9\x9f\xdd\xe8\xe6\xdc\x16\xb3\xc6\x4f\xfd\xfc\xde\x90\xdb\xdc\xf2\x13\xd4\xac\x81\xc5\x48\xe3\x7b\xdb\x4a\x3f\x17\x95\xae\x57\xfa\xf7\x46\x4b\x33\x8f\xd6\x92\x9a\xf2\x2f\xb6\x79\xfd\x9f\xc1\x95\x92\x02\xe8\xe8\xd0\xf3\x05\x39\xf6\x2c\xcf\xb0\x13\xce\xd6\x24\xac\x05\x8a\x17\xf3\x89\x8e\x38\x3a\x72\x58\xa8\xe1\xe4\x29\x4b\x74\x77\x97\x3c\xba\x3d\xa1\x42\xf9\x0b\x2f\x65\x5b\xbe\xbe\xe5\x8a\xb9\x19\x07\x5f\x9b\xbb\xbf\xb1\xb9\xb1\xfe\xeb\x46\xe7\x09\x27\x37\x4f\xcf\x3c\x4b\x52\xca\x67\x5b\x94\xef\x87\x96\x61\xb3\xbe\xed\xab\x3a\x1b\x03\x83\x52\x11\xeb\xc8\x1a\x6b\x3b\x1c\xb1\x62\x49\x34\x78\x16\x00\x8a\xe3\xd9\x58\x8b\x05\x8f\xa1\xfe\xde\x46\x1b\x90\xfd\xff\x56\x62\xf6\xa9\x93\xa3\xf1\xe3\x86\x70\xaa\x74\xde\x6a\x9d\x3b\xd9\x23\xa6\x37\xc4\xdd\x37\xbf\x3c\xac\x51\xd5\x91\x15\xcd\x6a\x2d\x3f\x1d\xf3\xbb\xdf\x70\xc3\xd9\x2d\xfb\x33\x0f\x5f\x9c\xf2\x3f\xd2\xba\x63\x21\xa4\xdb\x2a\x43\xd3\x42\x24\xc9\x82\x68\x6a\xbe\x2c\xd1\xba\xe9\x91\x98\x4e\x80\x20\x43\x1a\xbb\x1a\xef\xb2\x86\x1a\x50\x21\x4d\x28\x2d\xf5\xa7\xb9\x37\x7b\xc5\xe6\x0f\x6a\x2f\xca\xff\x6c\xab\xb2\xa5\x3a\x4e\xe9\x88\x8a\x5e\x2a\x7f\x63\x7c\xcb\x37\xca\x1d\x79\xf3\xe7\x6d\x19\x75\x9f\xd9\x9f\x66\x18\x91\x10\xd8\xa2\x20\xd0\x9c\x40\x58\x1e\xf8\xd0\x23\x01\xf1\x6c\x4d\xd7\x6d\xc8\xcb\x30\xc2\x98\x96\x64\xa0\x0b\xd0\x0d\x18\xc3\x77\x43\xd1\xf3\x9e\x42\x60\xf5\x7d\xb1\x95\xbf\x74\x6a\xb0\xff\x93\x1f\x17\x7f\xdd\xa0\xcf\x9a\x72\x1f\x16\x5d\x33\x70\xfb\x94\xb1\x49\x95\x23\x3b\xc8\xd1\x49\x2f\x6f\x15\xd2\x2b\x6d\x6c\x09\x90\x95\x58\x1c\xca\x14\x1d\x11\xd1\xe6\x78\x13\xdb\x8a\x90\x58\x44\x48\x22\xcf\xd1\x2c\xc7\xe2\x7d\x36\xd0\x31\xab\x71\x9e\x8e\x04\x1d\x0a\xa9\xa5\xbd\x78\xe8\xcd\x31\x25\xdd\x31\xdf\x90\xd7\xa7\x17\x1f\xf9\xe6\xd0\xdd\x85\xd6\xe3\xe5\xf5\xb2\x15\x2b\xa5\xf6\x9b\xfd\xd7\xd8\xa6\xcd\x33\x5f\xab\xa7\xec\x6d\x61\x6c\x9b\x14\x72\xfc\x00\x12\x4d\x74\x24\xdb\x34\x19\x1e\x07\x94\xa8\xb0\xb4\x6b\x05\xbe\x6a\x8b\x8e\x69\xeb\x06\x12\x7d\x3e\x40\xbc\x1d\x8a\xbe\xf7\xc4\x8d\xc1\x7f\xeb\x9e\xf4\xa9\x57\x2b\xcb\xcb\xb5\x1e\xdf\x50\x76\xba\xe7\x2e\x5a\xa4\xed\x24\xf5\xda\xec\xe2\xed\x3d\xda\xea\xbf\x5b\xcb\xe0\xbe\x2a\x5b\x46\x9d\x7a\xb4\xfe\xd1\xfc\xfd\x5e\xca\xfc\xdd\x4a\xea\x6d\x0f\x26\x32\x14\x35\xe2\x91\x6d\x26\x9e\xa7\xab\x1a\xc2\xb1\x95\x08\x76\xe0\x45\x50\x24\xa1\xe5\xaa\x98\x57\x74\xe4\x68\xa6\xce\x06\x91\xaa\x5a\xc2\x53\x4e\x91\xdb\x56\xd9\x5e\xb5\xf6\xc7\xcd\xdf\x7e\xd0\xa8\xe0\xed\x45\xff\xc8\x15\x2d\x3c\x18\x0f\x1a\x9a\xb7\xd5\xae\xc3\xef\x32\x8b\x16\xf6\xdd\x3b\x37\xbd\xa6\x40\x50\x48\x28\xc9\x95\x59\x0a\x68\x2e\xe5\xd2\xba\x14\x50\x9c\x0a\xe4\x88\x0b\x64\xdb\x13\x55\x53\x36\x5d\x22\xdb\x09\xef\xb1\x92\x48\x85\x50\xa6\x9e\x02\x85\x55\x33\xfb\x4f\xb9\xfa\x36\x67\x2b\x7f\x30\x66\x6a\x87\x9d\xcf\xe6\xfb\xe9\xa3\x1b\xbd\x0f\xbf\xd5\xe6\xba\x66\xc3\x2d\x0d\x86\x7e\x67\xdf\x49\xf3\x6d\x71\x84\x1c\x4b\x8a\x75\x8a\x8d\x35\x5a\xe4\x68\xc7\xd7\x1d\x9b\x92\x8d\xd8\xf1\x19\x0f\x85\x1a\xb0\x15\x09\xcb\x81\xc9\xd3\x94\xc2\x28\x9e\x65\x88\x4f\x21\xb1\x3a\x39\x3e\x63\x48\xc6\xe1\x82\x4d\x32\xee\xe7\x69\xd5\xe0\x9b\xea\x45\xa7\x65\x3d\x5f\xa0\x5e\xad\xcb\x1e\xdb\xf5\xfd\x79\x4e\xd7\xce\xe9\x25\xff\xe0\x51\x82\x13\xa8\x1b\xaa\xc6\xfa\x0e\x1d\xb2\x91\x6f\x89\xbc\x68\x72\x8e\xcf\x05\xba\x0c\x55\x81\x4f\x08\xad\x44\x82\xe5\xfa\x82\xaa\x05\x11\x0c\x0c\x39\xb5\xb4\x1f\x4e\xbe\xfa\xed\x1e\xe9\xe4\xa7\x23\xd6\xd7\x6f\xcf\xed\x5c\xf4\x51\x46\x97\x59\x8b\xfb\x2d\xfb\xa5\x5d\xbe\x75\xfd\x5a\x54\xfa\xac\x64\xe6\xd7\xb5\x9e\xc2\x3d\xad\x04\x2c\x2f\x50\xae\x8b\x89\x40\xe8\x88\xd7\x58\xc9\x0b\x34\x97\xb7\x39\x46\x83\x26\xe6\x69\x2e\x54\x35\xcb\xf7\x54\x9b\xb1\x14\xca\x61\xa9\xbf\xb9\xb7\xfe\xbd\xa1\xfc\xdf\x8a\xfb\x3e\x75\x6b\xf5\xfb\x5f\x84\xc8\xf4\xf5\x9c\x1d\x9a\x96\xbc\x39\x78\xcd\xda\xca\xbf\xbf\xff\x76\xf3\x01\x9d\xee\x7c\xdc\xe6\xfa\x97\x97\x3b\xac\x1e\x7f\x6e\x64\x91\x40\xff\x29\xcd\xd3\x30\xa4\xf1\x71\xe4\x26\xa2\x89\x05\x8f\x96\x5d\xd1\x91\x5c\x1c\xb1\x88\x8e\xa1\x43\x9c\x00\x63\x2e\x16\x7c\x90\x28\x0a\x51\x79\xa0\x3b\x88\x7a\x7c\x72\xf0\x1f\x21\xb8\xef\xa2\xc5\x2d\x3a\xbe\x71\xbd\x6b\xf3\xb7\x4e\xcc\x9c\x7b\xa8\xd0\x90\x43\xdf\x56\xee\x3a\x69\xc1\xd2\xae\xed\x6e\x7f\xdb\x6e\xe0\xca\x7c\xe9\xb5\x04\x59\x57\x12\x81\xe6\x78\xc1\x34\x29\xce\xf6\x54\x4d\x04\x31\x74\x1d\xc5\x85\x62\x22\x50\x09\x4a\x68\x1a\x48\x4c\x60\x05\x26\x50\x5c\xdb\x0d\x9d\xff\xe0\xd2\x7f\xec\xd9\x15\xbe\xdd\x38\x76\xc3\xa0\xbf\x2e\xfe\x28\x9e\x6f\x7b\xb6\x6c\x46\xf7\x86\xa3\x9e\xdf\xd4\x65\xe6\x86\x61\xb5\x9c\xaf\x83\xd1\xf9\x17\xa7\x97\xef\x8f\xf7\x69\x03\x26\x9e\xe1\x46\xc8\xa3\x23\x05\x43\xc5\x14\x14\x2e\x92\x44\x51\x4d\x38\x03\x4b\x9a\x2a\xf2\x26\xe5\x88\x9e\x6a\xf9\xaa\x8c\xfd\xc8\xe1\x9f\xb2\xa1\x7c\xaa\x48\xe9\x1c\xfd\x72\x07\xcf\x0d\x1a\x30\xbf\xbd\xdc\xa5\xf1\x81\xa1\x2b\xdb\xbd\x73\xb9\x73\xfe\xa3\x8b\x6f\x9c\xcd\xf1\xab\xf3\xf5\x17\xe9\xb5\x04\x56\xc7\xb2\xc4\xa9\x21\xad\xa2\xd8\x41\x51\xa2\x09\x9c\xa3\x0b\xa2\xa1\xb1\x3c\xa4\x18\x5b\x8e\x91\xc5\xb0\x6a\x62\xe9\x8a\x65\xea\x4e\x92\xc4\xc2\xdf\xe4\x07\x33\x5a\xfc\x0f\x18\xc9\xfd\x19\xfc\xfa\xe3\x95\x0e\xb4\xbf\xb5\xb4\xdc\xa5\x83\x47\x9e\x63\x97\x65\xab\x7d\x45\xfc\xec\xe0\x4b\xc6\xf3\xf6\x0d\x3c\xb9\x7f\x9f\x7a\x8f\x4e\xfe\x0f\x7b\xcf\xdf\x7f\xb3\xf7\xc0\xfb\x2b\x3e\x69\x34\xb9\xc9\xe4\x5f\x66\x65\x2d\xc7\x75\xf9\xb5\xe4\xa0\x12\x13\xdc\xd3\xa3\x1b\x57\xbb\x6a\x34\x6b\x57\xae\x7f\x9a\x39\x02\x63\x46\xa5\x81\xce\xf3\xac\xa9\x63\xc9\x17\x35\xd1\x0b\x63\x29\xa1\x15\x20\xba\x20\x32\x22\xca\x45\x20\x62\xc4\x18\x98\xae\xa0\xb8\x02\x74\xfd\x7f\xf5\xa9\x53\xf4\xf4\x12\x26\xac\xd2\xfa\x85\x96\x13\x99\x3a\x93\xb3\xd4\x69\x39\xe8\x68\xde\x92\x4c\x9f\x59\xe1\xe6\xf3\xed\xaa\x6c\xe8\x3a\x6c\xd8\x8a\xf9\x8f\x75\x9a\xb6\x56\xfd\xf1\x8f\xfe\x45\x7e\x99\x3c\xa2\xe3\x67\xfb\xda\x74\xf8\x16\x6d\x78\xd4\xee\x8f\x66\xed\x5e\xe1\x8f\x37\x2e\xf0\x1e\x6c\xbc\x25\xf3\xb0\x7d\xa9\x39\xc9\x6c\x12\x71\x58\x95\x89\x0b\x3d\x45\x0b\x43\x1e\xba\x02\x54\xbc\x38\x92\x61\xa2\x63\xcd\x11\x1d\xe0\xf9\xc4\x63\x79\xd9\x36\x24\x5a\x90\xa1\xa7\x3f\xd9\x6b\xbd\x31\xa1\xc1\xa8\x16\xfd\xbb\x76\xfa\xb9\xeb\xc0\xb1\x61\x06\xdd\xa9\x8e\xca\xac\x69\xd4\xf6\xe0\xf5\x05\x63\xee\x6f\xbe\xf8\xe3\xe5\xf6\x69\x86\x1d\x32\x43\x41\x93\xec\x24\xb2\x34\xc3\xa0\x4c\x9d\x0a\x54\x5d\x46\x36\x15\xf1\x56\xcc\x0a\x91\x2a\x63\xdd\x54\x7c\x01\xf1\x02\xcd\x08\x2e\xe5\x58\xc0\x4a\x0d\x5a\xd6\x74\x66\xfd\x4f\xdf\x7c\x79\xac\x76\x24\xca\x79\x63\xc9\x95\xdb\x2f\xcc\x6c\x53\xe0\xe5\xf7\xb6\xad\xbb\x38\xf8\xd7\x3a\xed\x06\x7d\x55\x19\xa6\x19\x97\x4a\x42\x08\x27\x56\x20\xb9\xba\x1f\x45\x32\x54\x63\xd5\xe6\x0d\x35\x81\x1e\x60\x91\x25\x10\x59\xf6\xe8\x10\x84\x2e\x02\x12\x60\x45\x8d\xb3\xfc\x14\x92\xee\x8a\x67\x14\x1d\xf8\x4b\xed\x79\x83\x1b\xa9\x95\x82\xd3\xcf\x4f\xdf\xfb\x63\x97\x43\x95\x2b\xce\x69\xbd\x4a\xba\x54\x48\xeb\x1c\x64\x9e\x75\x35\x35\xaa\x29\x76\x4c\x99\x24\x0c\x22\x0a\x6b\xfa\xa6\x43\xd9\x91\x48\x38\xd1\x10\x01\x85\x5d\x99\x31\x88\x65\x42\xdb\x09\x91\x98\xd0\x89\xee\x32\x0e\xa7\x3f\x05\xb4\xac\x7e\x7f\x7b\xe8\x7b\x13\xf2\xe5\xec\xf4\xe9\xb6\x4d\x8f\x9e\x7d\xa5\xcc\x7c\xee\xcb\xde\xed\x7e\x58\xd9\x6b\x79\x4d\xc6\xde\xd9\xf8\x74\x9a\x59\x32\x23\x2e\x82\x14\xf1\x02\xde\xf2\x5d\x68\xab\x10\x42\x11\x88\xb4\x29\x29\xd0\x13\x0d\x31\x0a\x69\x4c\x64\xe2\x1a\x42\x14\x43\x53\x42\x82\x2e\xfd\xeb\xe8\xfb\x71\x49\x8f\xee\xc3\xbd\xde\xe3\xb0\xde\xfd\x94\xde\xfd\x8f\x87\x5f\x66\xfc\x7e\xea\xe8\xe7\xc5\xd7\xdc\x2e\x5d\x66\x21\x3f\xad\x7e\xf9\x51\x7c\xe6\x8b\xb1\xd4\x6b\x4a\x02\x13\x60\x57\x53\x14\x53\xa4\x21\x89\x08\xa4\xa1\x20\xd1\x7e\x40\x2b\xb4\x4d\x0b\x81\x9f\x58\x11\xc5\x70\x81\x20\xf9\x1e\x87\x92\x28\x48\xbc\xf8\xc9\xd6\xfa\xae\x0f\x72\xe5\x3b\x51\xb6\x7a\xf5\x4d\x0d\xae\x5d\xbf\x26\x65\xc7\x4c\x58\xaf\xc5\xc2\x31\xcd\x0a\x54\x22\x17\x2e\x92\x79\x4d\xf3\xa6\x79\xc9\xd1\x56\x9c\x80\x44\x00\x9a\x21\xd2\x65\x2d\x36\x02\x1f\x51\x04\xb8\x41\x62\x11\x9e\x49\x04\xd5\xc0\x36\x1b\xba\x50\x10\x44\xd9\xe4\x39\x4b\x13\xf9\xd4\x63\xbc\x41\x4e\x8d\x2e\x8d\xd7\xf5\xe9\x5f\x87\x7e\x9d\x9b\x86\xea\xac\x28\x33\xa4\xf7\x40\xfd\xcf\x0e\x8b\x8b\x8f\xdb\x91\x77\x6b\x85\x5c\x99\xbf\x70\x4d\x29\x69\x47\x16\x29\xc8\x26\x4c\xa2\x61\xcf\xe2\x15\xd3\x93\x5c\x80\x44\x4e\xb3\xd4\xc0\x93\x39\x1b\xb1\x5c\x48\x2c\x15\x04\xae\x15\x9a\x4a\x22\x30\x0a\x21\x29\x56\x94\x6e\x4e\xfd\xed\x93\x15\x41\x63\x38\xa3\xb7\x78\x77\xfd\xdb\xaf\xe5\xdb\x2e\xce\xe9\xcd\x2e\x90\x46\xaf\xeb\x72\xef\x83\xc5\x45\x57\xa7\x1b\x86\x84\x07\x89\x4e\xf9\x52\x20\x05\x40\xd1\x09\xa7\x6a\x2e\x16\x55\x1d\xf1\xa6\xa0\x8a\x02\xc3\x98\x10\x28\x76\x22\x09\x38\xe0\x62\xd9\x09\x04\x5d\x4f\x6d\x86\x39\xd4\xb7\x6f\xcf\xfb\xea\x61\xad\x3e\x1b\x36\x1d\x6b\xf7\xe6\xf4\x8f\xaa\x34\x61\xdb\xc6\x6f\x17\x40\x63\xf3\xdc\xbd\x69\x8c\xcb\x58\x91\x66\x5c\x2a\x64\xf2\xc0\x63\x69\x86\x22\x80\xc5\x8c\x0b\x19\x83\x01\x9c\xcf\x99\xc0\x0f\xa2\xc8\x16\x08\x13\x3a\x3e\xc7\x71\x86\x42\x39\x96\xa3\x12\xd1\xa3\x9e\x1c\x62\x94\x1a\xf4\xd5\xb0\x09\x3f\xb5\x5e\x78\xf4\x4a\x8b\x2a\xe0\x7a\xc3\x62\x25\x27\x9f\x2b\x9d\x75\x0a\xbf\xa5\xfc\xc1\xca\xab\xac\xb1\xcb\xba\xa6\xd7\x47\xfb\x92\x2a\x08\x92\x19\xeb\x16\x92\x5c\x59\x61\x45\x31\x21\x41\x4c\x78\x53\xe5\x82\x50\xc6\x02\xe3\x33\x9c\x21\xc9\x8e\x99\x60\xd7\x15\x04\x36\x4c\x05\x7b\x34\x6e\x42\x9e\xd3\xcd\x87\xff\xaa\xee\x5b\x59\x77\xc9\xe9\xcb\x5d\x6f\xb6\xce\xa0\xbb\x7d\x53\xba\x7f\xe9\xd7\x9e\x19\x39\x24\xd7\xf4\xb1\x99\x47\x9e\x4e\x7d\xad\x20\x79\xd0\x10\x89\xa8\x12\xe2\x5b\xd8\xd3\x3c\x5f\x70\x74\x55\xf3\xb1\xe7\x20\x5a\x76\x05\x43\xe7\x54\x40\x93\x40\x57\x75\x5d\x70\x80\xe9\x50\x6a\xea\x45\x30\xa5\x8d\xff\xc2\xcb\xb7\xca\x7b\x4d\x0f\x0e\x3b\xbb\x52\x5b\x3b\xe8\xbc\xd7\xa3\xc7\xa1\x3f\xb6\xec\xca\x71\xb9\xc3\xbc\x49\x1d\x41\xe6\xb9\x50\x53\x0f\x52\x5c\x83\xf6\xd4\x40\x87\x98\x95\x35\xde\x8e\x6d\xec\xc2\x88\xb6\xa1\x6e\x8b\x9a\x24\x43\x25\xf1\x23\xe2\x1a\x92\xae\x91\x84\x11\x13\x17\xd1\x24\x85\xc3\x1b\x5d\x18\xcc\x3b\xf7\x46\x83\x9b\xad\x3e\x99\x31\xfe\x9d\x25\x6a\xd3\xe7\x57\x1f\x1a\xb6\xbf\xd4\x90\xea\x1d\x17\xcc\x3e\xb3\xe1\xe1\xec\x29\xe9\x95\x34\xe3\x45\x32\x67\xc4\x96\x14\x0b\x96\x4d\xb3\x44\x60\xb1\xad\x7b\x9c\xa2\x01\x29\x64\x7d\x4d\x8f\x24\x8d\xe5\x00\x4b\xfb\x1c\x03\x12\x93\x78\x04\xe8\x4f\xea\xf3\x1f\x57\x66\x34\x5a\x5a\xf9\xa5\x02\x23\x96\x2d\xcb\x68\x7e\xa5\x79\xd9\xba\x2b\xbe\x7b\x74\x71\xc5\xf3\x3f\x54\x2f\x30\xb3\x74\x87\x37\x97\xa7\x19\x28\x35\x96\x1c\x16\x3a\x5c\x00\x3c\xdd\x92\x55\x8b\x8a\x1c\xa4\xa9\xa6\x19\xe9\x51\x6c\xf2\x9a\x26\xdb\xae\x2d\x10\xc0\x05\x24\xe4\x6c\x4f\xd3\x44\x07\x3a\x4f\x59\x23\x3d\x47\x3f\xd8\xd3\x24\xdf\x83\x87\xbb\xb2\x7c\x39\xbb\xf9\xd2\xa6\x79\x76\xbf\xf3\xc6\xf7\x1b\x26\x31\x05\xde\x9b\xd9\xf3\x44\x91\xef\xd2\x7b\xa9\x00\x83\x98\x0b\xbc\x90\x62\x24\xd6\x09\xd4\xd8\xa1\x54\x56\x93\x24\x2b\xf1\x09\xf0\x13\x68\x84\xaa\xc3\xf3\xa2\xcd\xfc\xb3\xe2\x66\x6c\x60\xd9\x89\x02\x84\x27\x95\x63\xf9\x06\x32\xbe\xf8\x27\x0d\x57\xd6\x7f\x36\xd7\xe5\x22\xb3\x5f\x5c\x12\x55\x9f\x3e\x7e\xc6\xa9\xdd\x5b\xa7\xbe\xb2\x6b\x3a\x57\xa4\x58\xd1\xf4\x4a\xda\x8a\x30\x09\x6d\x10\xda\x98\x27\x0a\x88\x63\x57\x8a\xb4\xc4\x34\x02\x9e\x89\xd4\x98\xa1\x71\xcc\xfa\x21\x52\x25\xa2\x31\x3a\x8d\x78\x35\xe0\x88\x9e\xba\x94\x0b\x2e\xde\x1f\xb6\xee\xad\x91\xad\x72\xd5\x42\xbb\x47\xdd\x98\x60\xb8\xa3\xbf\xdb\x39\xb7\xe1\xbd\x1a\xa7\x2e\xe9\xe3\xba\xe7\xcd\x9d\x66\xbc\x07\x0b\xc2\x00\xea\x20\xd4\x94\x90\x22\x82\xeb\x12\x24\xcb\x89\x47\xc1\x88\xf1\x55\x39\x34\x58\x28\xcb\xd0\x96\x40\xcc\xfa\x9c\x1b\xd2\xb4\x4d\x25\xfe\x53\x16\xc1\x56\x57\xed\xf4\xe9\xb1\xad\x17\xf5\x4d\x77\x6a\x8f\xc8\xdd\xb1\x48\xab\x82\x73\x3a\x4e\x7e\x70\xef\xe4\x3b\x17\xab\xb5\xfc\x76\xee\xd1\x57\x6b\x3c\xe6\x6b\x8a\xff\xea\x56\x6f\x5f\xa9\xf2\x68\xf5\xa5\xfb\x47\xc6\xef\xfa\x2e\xde\xbd\x72\xb5\x33\xe1\xe2\xa6\xa4\x7a\x9f\xf3\x97\xda\xfb\x19\x7b\xd3\xfb\x27\x69\x9a\xd6\x68\x8e\xa2\x54\x0f\x59\xc8\x0c\x2c\x2d\xd4\x8d\x38\x0c\x94\xd8\xa5\x6d\x86\x4e\x3c\xc3\x36\x3d\x6c\x42\x59\x31\xe9\x90\x73\x1d\xca\xe0\xf9\x27\x0d\xb7\x75\x9e\x3e\x4d\x73\xae\xef\x30\x17\x5b\xb9\x0f\x34\x59\x9f\xf7\xd1\x2b\xef\x1f\xbc\xbb\xe2\xd9\x0e\x7b\x2f\x57\x98\xfb\xfd\xd9\xd5\x6e\xb7\xf4\xaa\x93\x2b\x19\x0c\x17\xd2\x1c\xc0\x89\xe4\x38\x48\x36\x7d\xc6\x23\x5c\xe8\x19\x1c\x4f\x07\x58\x05\xb2\x17\x11\xc3\xa5\x91\x25\x33\x3a\xc3\x28\x66\x04\xe0\x93\x4f\x76\x6f\xdd\x2a\xb5\x76\xc4\x56\xbf\xde\x27\x57\x6b\x15\x9f\x56\x7f\x57\x6e\xb7\x38\x73\x47\x6a\xdc\x6d\xc8\xdc\x6e\xf5\x98\xfe\x8f\xd2\x0c\x19\xa8\x12\x9d\x8b\x88\xe3\x63\x4f\x8f\x79\xdd\x73\xa1\xab\x13\x53\xf3\x09\x50\x54\xac\x29\x3a\xe2\x01\x12\x68\xd5\xb5\xa0\x0e\x24\x4b\x09\x94\xd0\xb5\x53\xb7\xf5\xf6\x35\x1e\x75\xba\xcc\x9e\x59\xcf\xec\xcf\xa8\x50\x64\x55\xf7\x4f\x66\x95\xf1\x86\xe7\x1c\x3f\xaa\x5e\xed\x89\x93\x73\xac\x5c\xd0\x60\x4d\xe6\x8b\x85\xd4\x5e\x3d\x48\x22\xca\xf0\x2c\x83\x71\x63\x96\x20\x8e\x21\xa1\xac\x09\x34\x54\x02\x11\xf2\x1e\xb6\xb1\x0e\x0c\x24\xd2\x0e\xcb\x63\x86\x92\x50\x12\xb8\x24\x75\xfc\x2c\xdf\xf1\xe3\x5c\xef\x35\x9c\xfe\x70\xc8\xcd\x52\xbb\xf7\x8d\x1d\xfa\xc5\xc5\x75\x39\xac\xf6\x35\x7f\xcb\x58\x90\xbd\x6c\x95\x6e\x07\xc5\xcc\x73\x64\xa4\xa6\x3f\x77\x5d\xc0\x87\x44\x74\x7d\x56\x33\x19\xdd\x50\x1d\x4d\x4c\x42\x1b\x72\x8c\x4c\x7c\x5f\x07\x22\x01\x08\x30\xc4\x55\x29\x41\xb7\x22\x48\x99\x24\x45\xa6\x52\x53\x69\xf5\xc3\xf2\xaf\x1f\x76\x7f\x6e\xee\x89\xa1\xe7\x4a\x53\x0f\xff\x9c\xb1\x6b\x68\xfd\x3b\xc7\xdf\xba\xfd\x70\x61\xdd\xda\xeb\xe4\xcc\xb7\xab\x53\xef\xfd\x01\xdf\xc1\xaa\x49\x2c\xdf\xd4\x13\x5e\xa5\x59\x05\x58\x98\xf5\x9c\x28\x8c\x45\x5e\x8c\x91\x18\x8b\x34\x9d\x88\x5c\x40\x00\x40\x9a\x00\x12\x21\x45\x3e\xd8\xa6\xdb\xec\x6f\x33\x06\xe6\x69\x7f\xe7\xcf\x9c\x0d\x0e\x3a\x1d\x9e\xf9\x39\x9b\x7c\xbc\xff\x82\xac\xa5\xab\x85\x47\x4f\xea\x5d\x1b\x66\xfe\x22\x2a\xa5\x4e\x9b\x32\xe3\x5b\x82\x9c\xa0\x7f\xaa\x2e\x11\x55\x1a\x5a\x94\x63\x26\xac\x19\x39\x31\xc7\x09\x30\x84\x01\x4e\xb0\xce\x98\x4a\xec\xca\x50\x60\x75\x48\x52\xc3\x05\xbf\xf6\xf3\xf4\x66\xaf\x14\x1b\xbc\xf8\x16\x21\x62\x8f\x75\x9d\xde\x12\x2e\x36\x6b\x76\xbf\xe6\xbe\x9a\xfd\xa7\xbe\x32\xb7\x71\x1f\xd0\x37\xbd\x92\x8e\x05\x8e\x46\x46\x60\x43\xc5\x63\x31\xed\x3a\x04\x8b\xbc\x61\x40\x99\xe6\x79\x37\x62\x25\x86\x0a\x70\x40\x01\xd3\x70\x6c\x10\x39\x8c\x6f\x18\x46\x8a\x45\xea\xda\xcc\x92\x2b\xb5\x1b\x3e\x9b\xb7\xd8\x85\xef\xae\xfe\x76\xec\x87\xf3\x23\xf6\x0d\xc9\xb2\x6a\xf8\x83\x9f\xfa\xee\x78\xf8\xfb\xd5\x8b\xc3\x1f\xa6\x1b\x4f\xd2\x05\x8a\xef\x44\x94\xcb\x11\x99\x62\x18\xd3\x62\xb5\x10\xb3\xa1\x85\x63\xd1\x42\x24\x92\x54\xe2\x89\xd0\x16\x81\xa7\xb8\x76\xc4\x0a\xc4\xe5\x9f\x0c\xf9\xa4\x6b\xaf\x3f\x5f\x5e\x57\xb6\x6b\xc7\x52\x9b\x4a\x54\x5e\xbf\xb6\x47\xf3\x1f\x7a\x4c\xc8\xf2\xd9\x9e\xea\x51\xf3\xd3\xf9\xbf\xa5\x92\x34\xb3\x48\x3b\x44\xd5\x5c\x02\x55\xcf\xa0\xb1\xae\xc5\x8a\x8f\x2d\x91\xd7\x69\x9b\x12\x18\x53\x0d\x0c\xa4\xe1\x50\x86\x01\x84\x31\xad\xb8\x49\x60\x2b\xca\x7f\xb4\x19\x1e\x8f\x9d\x60\xce\x9a\xac\x13\x66\xe5\x3a\xa1\x4d\xbc\x89\x5b\x5c\x9c\xf5\xce\xc6\x8a\x4c\x91\x2e\xd1\xb0\x8d\xd3\x5e\x7b\xf0\xd1\xae\x79\x7e\xd9\xc7\x52\x31\xf6\xd8\xe0\xab\x03\xbf\x78\x3d\x17\x7c\xbd\xd7\x15\x8e\xba\xf8\x49\x33\xea\xde\x9a\x8a\x45\x2a\xe6\x7c\x8e\xb1\x6f\x59\x3b\x1b\xd6\x4f\xaf\x2a\x61\x41\xb5\x43\x59\xd7\x01\x4d\x25\xac\x23\x98\xa6\x8d\x94\x38\xd1\x68\x8b\x35\x82\x58\x0e\x50\x18\xa8\x54\xc0\x07\x2a\x83\x62\xa2\x21\xc1\x0b\xb5\x14\x07\x1b\x9c\xd6\xbb\x7a\x4e\xc1\x28\x74\x27\x47\xb1\x19\x45\x36\xad\x5a\xbf\xac\x86\xf4\xe2\xfd\x32\xf9\xcf\xb4\xb4\xc3\x3e\x70\xf4\x85\xf2\xe9\x2d\x2d\x02\x07\x79\x88\x47\x44\x43\x91\xe5\x61\x45\x60\xe4\xd8\x95\x88\x88\x80\xac\x47\x01\xe7\x3a\x91\xa7\x53\x72\x94\xc0\x50\xa1\x22\x4f\x0a\x15\x9f\x92\x53\x97\xcb\x2f\x2e\x38\xa1\xcc\x1b\x69\x1e\x6a\x54\xa4\xea\xd9\x8f\x7a\xef\xa9\xd7\xaa\x7d\xe3\x69\xfb\xbd\x17\x32\xbe\xee\x7b\x6e\xe6\x56\x75\x60\xe6\xcf\xce\x53\x53\x0a\xfb\x06\xa6\x23\x93\x57\x3c\x08\x84\x28\x8e\x69\x24\x31\x02\x2b\xab\x71\x00\x62\x57\x90\x4c\x12\xba\x06\x6b\xf1\x90\xf5\x54\xd7\xc1\xb1\x12\xa3\x14\x8c\x81\xef\xc3\x6d\x75\xde\x1f\xf0\xc7\xe9\x15\xd9\xb6\x7c\x4e\xcd\xfd\xad\xf8\xf0\x13\xa5\xcc\x22\xd9\x4f\x1e\xf8\xb1\x6a\xef\x3e\x95\x8e\xf8\x6d\xd3\x2b\xe9\x24\xe0\xd8\x04\x45\x92\x65\x2b\x82\x04\x1c\xde\x97\x45\x2d\x50\x79\x15\xb9\x76\x60\x79\xb4\x12\x09\x91\xaf\xba\x12\x23\x22\xdd\xe5\x12\x33\x82\xbc\xf1\xa4\xd1\x7e\xf7\xce\x3e\x67\xbd\xb3\xa7\xdf\x18\x65\xff\xd7\x5f\x44\x23\x85\x7f\x7c\x55\xe3\x60\x81\x2c\x33\x86\xf6\x89\x93\xb3\x6b\xb7\xec\xc8\x3c\xd4\x7e\xea\x0a\xdf\xc7\xaa\x40\xbb\x1e\x47\x64\x5a\x33\x4d\x64\xd1\x6c\x28\x5a\x51\xe2\x02\x4b\x0b\x14\xcd\xd3\x58\xa4\xfb\xbe\x28\x47\x84\xb1\x44\xd6\xa5\xa3\xff\xa0\xe4\x7f\x9c\x8c\xfc\xee\xa2\x56\x7f\xbe\xf3\x53\x8b\xb6\xc3\xd6\xe7\x6f\xe3\x9d\xd9\xd7\xfa\x72\xc3\xe7\x8e\x97\x6e\x56\x60\x6b\xc6\xfc\x81\x93\x76\x1d\xce\x3c\x1b\x49\xea\xf5\x01\x15\x26\x2e\x21\x9e\x06\x7c\x8a\x82\xb2\x22\xdb\x40\x13\x4c\x3d\x70\x92\x98\xa2\x1d\xd9\xe7\x81\x1f\x40\xc0\xa8\x1c\x0e\x3d\x1f\xe9\x16\x20\x29\x52\xd8\x09\xc9\x55\xf1\xcc\xd7\x6f\x7f\xb8\xba\x6a\xb6\xee\xe3\xff\x7a\x66\x54\xa1\x1b\x97\xff\xcc\x98\xd5\xb0\xcd\xa6\x22\xd1\xf1\xb6\xa7\xd6\xb5\x48\x73\x63\x82\xa7\x15\x9e\xb2\x10\x0d\x82\x84\x50\x0e\xc5\x02\xa4\x5b\xa2\x05\x79\x81\xd1\x30\xe1\x0d\x8b\xd5\x54\x33\x96\xc2\xc8\x31\x09\x67\x47\xaa\xc0\xa3\xd4\x15\x51\xde\x0b\x1f\x77\x3d\x7d\xf7\xd7\xdf\x3b\x94\x1f\xf8\xd3\xf5\xed\xc3\xdf\xad\xfc\xd1\xb4\x9f\x0b\x7d\xd9\xaa\xe8\x55\x5d\x1e\x54\xb2\x57\x57\x2f\xbd\x81\xc8\x93\x1d\x5d\x40\x0a\xcd\xdb\x82\x29\xcb\x2e\x94\x62\x5d\x77\x6c\x1d\xda\x8e\x16\x40\x22\xd1\xa6\x9d\x98\x62\xa0\x50\x1a\xad\xf3\xaa\x14\x04\x01\xef\xa4\xde\x18\xae\x7b\xb0\x1d\xb7\xb3\xd2\x6b\x4d\xef\x9d\x2c\xf4\xed\xfa\x3b\x6b\x8b\x7f\x39\xf6\xc1\xa2\x97\xd1\xa4\x3c\x2d\xdf\xdf\x74\xab\x4d\xe9\x7e\xad\xd3\x5c\x30\x58\xb6\xed\x24\xbe\x8b\x05\x16\x68\x74\x82\x13\x4f\xc7\xd8\x4c\x22\x93\x15\x15\x91\xf7\x94\x40\xf0\x68\x81\xb2\x45\x51\x87\x62\xa2\x32\x4c\x4a\x3f\xdd\xa2\xe7\xf2\xce\x5f\x90\xb7\x0f\xb4\xbd\x5b\x7f\x4a\xcf\x93\x83\x8e\x77\xcb\x5d\xe4\xcd\x5f\x6e\x7c\xb9\x69\xc7\x80\x0f\x36\x6c\x3e\x57\x25\xbd\x3c\xb0\x90\x60\xcd\x45\x88\xb2\xa2\x88\x40\x49\xd5\x44\x3a\xd4\x80\x6e\xc9\x26\x0a\xa5\xd8\x10\x0c\x8a\x16\x78\x13\x51\xc8\xf3\x28\x1c\x39\x28\x89\x69\x20\x3c\x65\xbe\x76\xbf\xc5\x5e\xf6\x37\x7e\x74\xf6\xe6\x0d\x6e\x16\x7c\x56\x5e\xdb\xbe\xe7\xf4\x63\x63\x2b\x16\x19\xdc\x63\xc5\x9a\x1b\x17\xdf\xc3\xe7\x5e\x79\xec\xbb\x0c\x99\x32\x6d\x50\x06\xfb\xf3\x9e\x0f\xe2\x97\x77\x71\x7b\x82\x57\x7f\xc2\xdb\xf6\x09\xab\xb7\x75\x6a\xb0\xb7\xcf\x8f\x33\xb8\x3b\x99\x87\xaf\x4c\xe9\x22\x3d\xd7\x49\xa0\x8c\x19\x29\x40\x82\x0d\x28\x3b\x61\x22\xc7\x49\x3c\x22\x02\x0b\x21\x47\x97\x9c\x24\xd2\x75\x8a\x51\x44\xc9\x8d\x14\x97\xb3\x28\x8d\x7b\xd2\x45\x1e\xfb\x79\x42\x28\x2d\x99\x74\x02\x2c\xdc\x70\x60\xf3\x73\x37\xda\xbc\xd9\x70\x5f\xb6\x6e\xf9\x43\x79\x7a\xff\x87\x15\xe3\xeb\x3d\x47\xa6\xd7\x45\x62\x13\x01\xcf\xb6\x7d\x1e\x13\x4d\x55\x89\xe6\x88\x2c\x4a\x10\xd4\x6c\x28\xb0\x82\xaf\x3b\xa2\x4b\x84\x48\x02\x16\x6d\x02\xc7\xa0\x38\x5a\xff\xd7\x59\x51\x8a\xbc\x66\xdc\x17\x33\x73\xaf\x6c\x39\xe0\xdd\x92\x4b\xf2\x5b\x0f\x1a\xe2\x92\x15\xbb\xad\x0a\x36\x2d\x9b\x63\x9f\xfb\xee\xf6\x4a\xfd\xf5\xcb\x25\x1e\x8b\xb6\x79\xac\x55\x65\x3a\x7f\x7c\xe4\x99\x6b\xc3\x67\x0c\xad\x51\x64\xf0\x6b\xb7\x6a\x56\x3f\x8e\x2a\xfe\x58\xa5\xa1\x53\xb9\xe2\xe6\x43\xed\xd7\xa7\x37\xda\x62\x45\x67\x4c\x4f\xf0\x0c\xc6\xe2\x93\x44\x31\x88\x0d\x28\xe8\xda\x1e\xb6\x6c\xd3\xe7\x65\x62\xd8\x92\xaa\x27\x14\x6d\x58\x91\x92\xb0\x16\x0c\x60\x0a\xee\x92\xb2\x95\xb3\x66\xff\xc7\x9e\xed\xf7\x0e\x2f\x19\xb4\xb9\x47\x5f\xbd\x7d\xc7\xaf\xd6\xde\xab\xf6\xfd\xf9\xe7\x3a\x64\x3f\x56\xef\xd8\xed\x22\x49\x9a\xc7\xee\x4e\x60\x7a\x0e\x4d\x64\x3e\x90\x5d\x59\x11\x7d\x24\x06\x74\x8c\x03\xc0\x24\xae\x11\xfa\x7e\xa4\x6a\x8e\x83\x38\xd3\x16\xb9\x90\x77\x5d\x23\x31\xf8\x27\x9f\xdc\xf2\x87\x53\x63\xce\xcd\xed\x91\x23\x6b\x87\x01\x2f\x3f\xda\x32\x11\x35\xeb\x73\xf0\xe5\x97\x7e\xe8\x39\xc4\xda\xd0\xb9\x4f\xb0\xf3\xa5\xb2\xe9\xcd\x1e\x35\x96\xf7\x3d\x89\x56\xf5\xd8\xe7\x05\x26\x54\x34\x02\x64\xda\x61\x1d\x25\x34\x90\x88\x68\x3d\x32\x35\x87\xf3\x68\x1c\x0b\x81\x13\xb2\x98\x41\x86\x95\xba\xb8\xfe\x69\xc8\xa8\x76\xdb\xb7\x2e\xe8\xd6\x2a\x63\x62\x9e\xef\x4b\xfe\x9c\x63\x44\xb9\x71\x5b\xe6\x7f\xff\xc5\xf9\xdb\x63\xbe\x09\x2a\x7e\xdf\xe5\x4a\x7a\x25\x6d\x6b\x66\xc8\x10\x8f\x8a\x59\x3d\x36\x99\x98\xb6\x7d\x1a\xd9\x7a\x22\xfb\x6c\x8c\x74\x86\x83\x90\xe6\x12\xdb\x88\x0d\xc3\xa0\x8c\x30\x90\x42\xd3\x0b\x9f\x94\xf4\xde\x71\xe5\x5b\x5b\xeb\x5b\xb4\xf8\xfc\xe7\xe4\x35\x76\x68\xd6\xe9\xc3\xf2\x94\xae\x3e\xb6\x64\xe9\xa3\x4b\x1a\xdc\xfe\xe4\xfb\x33\x05\x96\xa7\x57\xd2\x1e\x25\x03\xde\xb4\x58\x53\x56\x29\x33\x32\x2c\x09\x25\x2c\x54\x34\x4e\x4d\xcc\xc0\xd0\x6c\xc8\xb3\x48\x24\x3a\xe2\x78\xcf\x83\x52\xcc\x5b\x91\x6f\xa4\xb8\x9d\x75\x7e\xee\x5b\x70\xe2\x2b\xf7\x4f\x54\xee\x54\xb6\xf7\xfe\xd1\xc5\xe5\x0e\x2d\xa3\xea\xd7\xda\x1f\x5e\xf0\xfc\xe9\x8e\xb3\xda\x8d\x48\x6f\x95\xca\x03\x9d\x55\x31\x15\x53\x22\x63\xa2\x80\x8e\x4d\x23\xd0\x12\xde\x95\x03\x97\xf6\xf9\x08\x51\x92\xc1\x48\x94\xc8\x9b\x9a\xa1\xc8\x9e\x25\xe3\xc0\xd1\xc5\xd4\x09\x42\xb1\x8b\x9f\x1c\x7a\xed\xcd\x1f\xd6\xbd\xf2\x47\xb3\x79\x2d\x3e\xbc\xb6\xe3\xb3\xb5\x63\xf3\x2e\x9f\xf3\x55\x93\xe3\xf7\x1b\x45\xa5\xa6\x9f\xc8\xfc\xd2\x4e\x4a\xe5\xe0\x7d\x56\xa1\x4c\x49\x89\x28\x06\xf0\x9c\x43\x80\x27\x85\xc4\x33\xa0\x6e\xd8\x3e\x30\x04\xdb\xd5\x63\x14\x88\x21\xe7\xda\xbc\x89\x2d\x06\x40\x37\x4c\xdd\x13\x78\xf7\x8f\x43\x2f\x0d\x5b\x59\x6b\xd7\xbd\x22\x63\xc4\x64\xc3\xbc\x53\xfb\x77\xf6\xbe\xd4\xef\x9b\x91\x3f\x6e\x6b\x5f\xa4\xb5\xbd\xf3\x5c\x9b\xf4\x3a\x3c\x5f\x67\x6d\x4e\x04\x06\x04\xaa\x09\xe4\x08\xb9\x8c\xf5\xcf\xa2\x55\xd6\x22\x9e\xb5\x04\xda\xf4\x09\xc5\x79\x82\x6d\xe8\x8e\xa9\x03\x9f\x92\x68\x31\x05\xb7\xbd\x3e\x7a\x48\xfe\x1f\xce\x94\x9a\x3f\xe3\xc0\x92\x09\x6d\xe0\xfb\x4b\xd7\xf7\x3a\x39\xfb\xb3\xa5\x53\x72\x8d\xbf\xc7\xb7\x78\x26\xf7\xe6\x85\x69\x4e\x10\x74\xc9\x65\x1d\x1b\x5b\x82\x85\x13\xc6\x8a\x14\xdd\x72\x44\xc6\x20\xa2\x80\x44\x3f\x82\xb4\xa5\x59\x94\x4c\x33\x62\x28\x42\x3a\x10\x29\xac\x42\xf1\xc9\xd8\xb9\xb8\xe1\x81\x31\xeb\xbf\xde\x5e\xa2\xf2\xf1\x1a\xeb\x1b\x8a\xe3\xde\x9e\x3c\xec\xed\xac\x87\xb3\xcf\xaf\xd1\xa5\x6b\xb2\x31\xe7\x33\xdd\xcf\xa5\x79\x72\x11\x72\x00\x81\xc4\x95\x9d\x00\x12\x04\xed\x28\x76\x75\xa4\x86\xac\x6c\x03\x53\x20\xd8\x67\x0c\x28\xc7\x2e\x52\x19\x4f\x08\x0d\x89\xa5\x83\x44\x48\x9d\x3d\x96\xbe\x76\x7b\xf0\x9a\xb5\xbb\x67\x0e\x2c\x50\xb7\xfb\x4f\xf1\xe4\xab\x1b\xde\x07\xfe\xf7\x1d\xe7\x4e\x79\x7f\xd4\x81\x8f\x1b\xc4\x47\x72\xa6\x7b\x3b\x99\x35\x28\x3e\x8c\x63\x97\x52\x68\x4e\xf5\x19\x8d\xf1\x20\x66\x6d\xc6\xd3\xb1\xa4\xd8\x06\xa3\xb0\x82\x8b\xf5\x44\xb5\xbc\x44\x32\x45\x5e\x73\x53\x94\x17\x0b\xe7\x0e\xdf\xb9\x75\xc7\xf0\x2e\x4b\xbe\xd8\x3c\xb5\x44\xcd\x97\x4e\xf6\xcc\x77\xa1\xde\xcf\xb9\xbf\xa6\xae\x8d\xb8\xba\x76\xed\xef\xbf\x0c\x4c\x73\xf7\x85\xc3\x14\x2d\x20\x9e\x8a\xcc\x28\x24\x94\x10\x8a\x31\x65\xc4\xae\x18\xf3\x82\xec\x42\xe8\xbb\xae\xe2\x8a\x44\xb2\xb0\x2d\x23\x01\xb1\x82\xa2\xb9\xa9\xdb\xcd\x07\xae\x4e\xae\xf4\x79\xb3\x72\x23\x76\x16\xcd\xbd\xfd\x9d\x8c\x56\xfd\xae\x9d\xfa\xb0\x70\x01\x6a\xd8\x47\x2f\xb6\x78\x39\xff\x6a\xb9\xd5\xee\x34\x87\x16\x22\x9b\xb4\x9b\x84\x82\xc1\x0b\xff\x0c\x2e\xb6\x27\xb3\x30\x22\x3e\x0d\x34\xdf\x16\x64\xd5\xb2\x92\x40\x62\x7c\xd3\x4f\xe2\xc4\xe6\x03\xcd\x33\x70\xea\xfa\xd3\x8f\xf6\x76\x18\xda\x7e\xef\x7c\xb3\x5f\x55\x73\xfe\x8a\x9b\x83\x1b\x66\xdf\xb0\x7a\x68\xf5\xe4\xd4\x90\x85\x8f\xd6\x8c\x9b\x73\x3f\xf3\x60\xc8\xa9\xd3\xd8\x50\x31\x4c\xd6\xa6\x74\x4d\x71\x99\x88\x81\x48\xe7\x02\xde\x0d\x80\x15\x05\xaa\xe4\xb9\xc4\x0d\x5d\xc1\xe1\x18\x59\x61\x92\x18\xf1\xa1\xa6\x09\xe8\x49\x53\x1c\xf8\x8f\x89\xcd\xb5\xa5\xa5\xb6\x8b\xef\x25\xdd\xc3\x41\x8b\xa7\x37\xf7\xdb\x55\xbd\xb4\xa8\xcf\x5b\xf2\xde\x3f\xc5\xe2\x5e\xfb\xcc\x8f\x6b\x53\x9b\x22\xa5\xe9\x49\xec\x06\x9e\x15\x79\x01\x65\x62\x1e\x60\x9b\x06\x04\xc8\x1e\xa4\x3c\x95\x09\x81\x10\xa9\x41\xa4\x49\x5c\xa8\x85\x82\xc2\x5a\xee\x7f\x10\x05\xf7\xcb\xfe\x7f\x5b\xdc\xeb\x53\x37\x5b\x8e\x52\x7d\x1f\x47\x7b\x3e\x4a\x95\xed\xf2\xde\x9a\xa0\x6c\x3e\xbb\xe3\x9d\xaf\xdc\x72\xd9\x2f\x4e\x79\xb0\x6f\x41\xf6\xdb\xc7\xf1\xfc\x73\xb3\x0b\x37\xca\xfc\x3d\x62\x6a\x3c\x15\xd7\x30\x78\xc4\xc1\x48\x62\x49\x44\x9b\x31\xa7\xca\xd8\x11\x80\xcd\x9a\x3c\x83\x7d\xdf\xd5\x62\x41\xc3\x54\x22\x85\x56\x20\x00\xde\x64\xa0\x2e\xa4\x8e\xa1\xf3\xc7\xee\xcd\x91\x31\xf4\x61\xae\x39\x19\xdf\xce\xff\x4b\x5e\xcb\x4e\x68\xf2\xa0\xf1\xfa\x03\x45\x4e\x9d\xdd\x9d\x8d\xbb\xf5\xb3\x95\x79\xd0\x9d\xd4\xb3\x22\x19\x21\xcc\x49\x3c\x64\x63\x8e\x11\xe3\x50\xe2\x43\x2c\x19\x3a\xb6\xf4\xc8\x76\x15\xc3\x07\xae\x69\x70\x84\x4e\x64\x51\x65\x6d\x9a\x88\xfe\xe3\x44\x11\x7f\x5b\x41\x9b\x42\xcb\x98\xac\xcd\x26\xe5\x6d\xf8\xeb\xd7\xe2\xc5\x51\x1f\x1f\xbf\x90\xff\xd1\x80\x5d\xbf\xee\x28\xdb\x7e\x47\xad\x9e\x13\x71\xce\xcc\x13\xeb\xa4\x8c\xa1\x6c\x1c\xc1\x24\xf0\x14\xc9\x66\x24\x14\xc6\x1e\x2f\x29\x92\xe0\x27\x2e\x51\x11\x0e\x43\xd5\x15\xc5\x28\x60\xe3\x58\x51\x09\xcf\x50\x8e\x8e\x62\x1c\x3d\x19\x43\x83\x33\x1d\xc1\x54\x52\xe1\xea\x1b\xe7\x67\x54\x5e\x72\xf2\xc5\x79\x2f\x6c\xd1\x73\x9f\xbd\x98\xd1\xb1\xef\xb0\x23\x79\x9f\x69\x52\x3e\xf3\x57\x7a\xa9\xb9\x80\x7c\x86\xb2\x9c\xc4\x8b\x45\x8d\x36\x14\x45\x14\x4c\x2a\x54\x7d\x45\x8c\x63\x6c\x69\x2e\x34\x15\x1c\x13\x8f\x8e\x61\x6c\x07\xac\x2f\x5b\x74\xc0\xff\x5d\x7f\xfe\xfb\x16\xf1\xbf\x8d\x76\xfb\xd4\x2b\x95\x25\x6f\x97\xc7\xd7\xd6\x6f\x2d\xc9\xf5\xd1\xab\x63\x36\xe7\xba\xd4\xd6\x18\x30\xb7\xd7\x86\x66\x85\x6b\xee\x2c\xf0\x60\xc7\x85\xde\x3a\xfb\x67\xb5\x96\x74\x9f\x34\x8f\x96\x04\x90\x18\xaa\xaf\x2b\xaa\x4e\x92\x44\x22\x84\x75\x79\xc7\x06\x2a\x27\x48\x8a\xaf\x46\x3e\x13\xc5\x8c\x2e\xcb\xac\x2d\x4b\x26\x96\x82\x90\x15\xc9\x53\xa8\x83\x40\x9d\x02\x95\xb8\x77\xfc\xbb\xb9\xeb\xa3\x71\x2f\x4e\x1e\x36\xbc\xfe\x82\xcb\x5a\xed\x1f\x9f\xa9\xd6\xf8\x52\x07\xe5\xda\x3b\x2b\x33\xbf\x5f\x99\x52\x9f\x68\x14\x30\xb6\xa1\x78\x81\xab\x85\x1e\xf0\x1d\x0d\x10\x3a\x22\xba\xc6\x39\xbc\xa2\x63\x01\x31\x21\x23\x38\xa2\x87\x39\x49\xb1\x79\x3f\x81\x84\xa2\x52\xc7\xb0\xe6\x79\x73\x72\x77\xcb\x36\xa3\xc1\x2f\xef\x91\x79\xa5\x5a\x2b\xf7\x6b\x5f\x3d\x3b\x7d\xfd\xd7\x57\x56\x67\x54\xbd\xb4\xb4\xd8\x99\xe1\x69\xb6\x5e\x51\xa1\x3d\x83\x60\x5f\x88\x0c\x89\x81\x1a\x6f\x06\xa6\x90\x20\x85\xb1\x04\x4c\x0b\xd0\x07\x1c\x60\x99\x38\x8c\x81\xe9\x51\xac\xcc\x88\xbe\x66\xa6\x7e\x76\xc9\xff\x8f\xb5\xb7\x0c\xd7\xaa\xda\xc2\x86\x69\x10\x15\x50\x69\xa5\x94\x06\x89\x15\x73\xd1\xb9\x51\x91\xee\x14\x58\xdd\x31\xd7\x5a\x73\xc5\xa4\xb7\x74\xa7\x84\x20\xdd\x28\x5d\x82\x02\x22\x20\x48\x49\x97\xb0\x45\x5a\x94\x46\x40\xe2\xbb\xce\x7b\xde\xf3\x79\x38\x3c\xfb\xf2\xbd\xf6\xf5\xfc\xd8\xff\xf6\x8f\xf1\xcc\x35\xc6\x98\x63\x8e\x71\xdf\xf7\xe8\xbe\x3c\x0d\x34\x2a\x37\x67\xec\x32\x7e\x46\xb3\xab\x59\xb3\xf6\x1e\x3a\xf3\xfc\x96\xc9\xfb\xb6\xf6\xdb\x7a\x61\xd6\xae\x27\x53\x33\xae\x86\x91\x38\x7a\x03\x2f\xb0\xa1\x81\x7d\x45\x16\x79\xc2\x0a\x04\xc9\x85\x90\x10\x1d\x44\x93\x84\xa8\xd8\x0c\x1d\x30\x0c\x17\xbb\x58\x8d\x55\xd2\xf4\x5d\x3e\xc6\xf0\x25\x5a\xee\x3f\x4d\x6a\x52\x53\xb2\x64\x9a\x93\xe9\xc5\x50\x98\xb5\xf2\xf1\xbd\xf6\x15\x0f\x64\x51\xc7\x83\x43\x33\x8f\xf5\x58\x71\x35\x28\xf3\x47\x2d\xa1\xc4\x8e\xe8\xd7\xd3\x9f\x1d\xf9\x06\xcc\x4a\x6e\xc0\x73\xb6\x4d\x4a\x01\x83\x14\x85\x97\x18\x1b\x01\xc9\x24\xe5\x00\x05\x31\xc3\x22\x4b\x09\x15\x5f\x77\x5c\x8e\x06\xa4\xa3\x46\x8a\x4b\xc6\x6c\x64\x7b\xe9\xe8\xff\xff\xf5\xcd\xfe\x1a\xbd\xa6\x6c\x5c\xbf\xfc\xcb\x1e\xf3\x6f\xe1\xab\x1d\x87\xdc\x9c\x83\x3e\xd8\xd2\xd0\x02\x07\x27\x37\x2e\x57\xa4\xb4\x97\x64\x2a\x04\x2d\x73\x94\xc1\xe9\x8a\x48\xc5\x9c\x8a\x90\xaa\xf3\x86\x46\xb9\x08\x93\xa1\x44\x10\xae\x40\x09\x92\x11\x31\x88\xb7\x0c\x57\xf0\x38\x1e\xc4\x86\x9c\x38\x82\x0b\x2c\x58\xde\xf4\x51\x1f\xe5\x8b\xcf\x3a\x0e\xbf\x53\x7b\x67\xbd\x83\xe3\x8f\x56\x1e\xdb\xf1\xfe\x77\x9c\xcd\x74\xde\xde\x14\x3e\xce\xb8\x0c\x5b\xe2\x59\x13\x0e\x09\x9b\x8b\x5d\xc9\xd2\x62\x5f\x8f\x63\x8f\xe2\x03\x4a\xa2\x14\x45\x8e\x3c\x4e\x0f\x23\x16\x21\x8e\xd6\x31\x09\xa0\x4c\x1a\x86\xc3\x47\x50\x4d\x7c\xda\xbd\x07\xee\xdb\xd2\xfc\x79\xed\x49\xe7\x77\x8c\xb8\x3a\xf4\xd7\x6e\x85\xbb\x54\x7c\x7f\xd7\x17\x27\xdd\x86\xf9\x27\x28\xd1\xe9\xec\x53\xcb\x24\x59\x74\x17\x2a\x06\xb4\x15\x35\x24\x29\x96\xa4\x30\x21\x19\x3e\x61\xdb\x0e\xe0\x0c\x87\x80\x11\x50\x0d\x82\x20\x01\xb4\xb4\x98\xd3\xad\xc0\xa3\x03\x1f\xab\x2f\xdd\x0a\xff\xd4\x74\x4d\x4d\x79\x33\xd3\x80\x7c\x2f\x86\x42\xab\xad\x2a\x91\x6b\xe5\xd1\x4b\xed\x32\x9d\xfd\xee\xda\xc3\xfd\x1b\x27\x0f\xee\x72\xac\x42\xed\xae\x67\xcb\xc3\x69\xf7\x6a\x10\x75\x32\x4e\xeb\x4b\x2c\x31\x6f\x50\x08\x3a\xaa\xee\xd1\x32\xa6\x1c\x01\x48\x11\x45\xeb\x98\x92\x75\x93\x31\x08\x0e\xd8\xb1\x0b\x64\x43\x62\x7c\x57\x24\x7d\x1b\x4a\x5c\xa8\xa7\x23\xd6\x50\x3e\xa8\x34\x35\xdb\x93\x9f\x5b\xff\x35\xb5\x83\x7d\x31\xef\x9c\xd5\x1b\xcf\xed\xad\xd4\xf3\xf2\x74\xf9\xf9\xd6\xc2\xf5\xaa\xb4\x56\x1f\x25\xb9\x70\x35\x3c\xc6\x31\x44\x93\x27\x29\xc3\x02\x61\xc8\xa9\x0e\x03\x82\x30\x24\x6d\xc3\x89\x62\x55\x47\x20\x0a\xdd\xc0\xc2\xb1\x65\x4a\x31\x15\xf0\x91\x2e\x27\x36\xbb\xcf\x9c\xf2\xc1\xac\x9b\xf3\x8e\xb5\x4d\x29\x34\xf4\xe1\xf5\x81\xe3\xae\x9e\x5d\xbc\xa7\x6b\xf1\x6e\xef\x9c\x14\xe6\xed\xeb\xf9\x65\xd5\x8c\x6b\x9a\x26\xbc\x15\xe4\x50\xd3\x03\x22\xd6\x6c\xc5\x11\x45\xcc\xcb\x91\xc0\x86\xba\x2c\x23\xc9\x54\x44\xc7\x93\x90\x4c\x32\x50\xe3\x18\xdd\x0e\x0d\xd3\x23\x2d\x9a\x37\xd2\x79\x90\x95\x9e\x57\xab\xc0\x90\x47\xeb\x5f\x6d\x33\x3b\x2f\x59\x2e\xcb\xba\xcc\x5d\x72\x97\x7c\xd7\x4f\xc9\xfa\x8a\xf4\xac\xf4\x95\x4f\x72\xbe\x91\x71\x35\xaa\xc4\x5d\x55\xcd\xe3\xac\x58\x82\x0c\x17\x9a\x31\x15\xf3\x0c\x19\xd0\xbc\xa5\x62\xdf\xc1\x94\x1d\x93\xa2\x21\xd0\xbe\x0b\x11\x12\x11\xaf\xf3\x3a\x54\xa5\xff\x2a\x45\xbf\xcd\xf9\xff\xd6\xe7\x4e\x6d\x94\x9f\x7b\x91\x96\x7b\xe8\x8b\x75\xf5\xaf\xae\x7b\x34\xe7\xca\xf7\xa5\x72\x04\x68\xdf\xdc\x53\xdf\xdc\xc8\x95\xb6\xf7\x0d\xa6\xf0\xc9\x07\xed\x06\x91\x3b\x33\x9e\x5c\x13\x7a\x14\xeb\x68\x0e\x25\xea\xb6\xe7\x5b\xbc\x1f\xd3\x86\xe0\xd3\x32\x62\x4c\x2e\x96\x50\x14\x39\x31\x60\x59\x44\x69\x8e\x2e\xc1\x98\x91\x54\x4e\x22\xb1\xef\x24\xf6\xa8\x6d\x53\x7b\x3f\xdb\x30\x62\x47\x51\x5e\xab\xb9\x79\xce\x95\x47\xdf\x15\xdf\xd4\x65\xdc\x88\xe6\x15\x83\x36\xd3\xb3\xe4\x5d\x72\xfa\xf0\xa6\xe4\x9a\xad\x11\xb6\x14\x33\x2a\x29\xa8\x10\x53\x94\xe7\x3a\x2c\xf6\x68\xcd\xb5\x71\xa8\x58\x9c\x69\x61\x47\xe3\x34\x0f\x30\x36\x16\x64\x35\xc0\xbc\xc9\xf8\xe9\xf0\x5b\xc3\x26\x0f\x1b\x5f\xed\x74\xe2\xed\x62\x0a\xfd\x61\xcb\xd8\x78\x3c\xbe\xed\xa5\x3e\x81\xfd\xf6\xc4\x1b\x84\xb4\xfc\xf5\x9b\x57\x32\xfe\xc4\x4f\x78\x95\xb9\x01\x85\x68\x37\xd2\x38\x45\x24\x22\xdb\x8f\x6c\x1c\xf2\xa4\xae\x70\xa4\x1a\x10\xc8\x67\x68\x01\x18\x14\xab\xb0\x90\xa7\x20\xf0\x2d\x85\x0f\x3c\x3b\xf1\x55\xd6\xef\xad\x82\xc3\x73\x5f\xcc\xf7\x3c\xdf\xb2\xfd\x25\xda\x3e\x7c\x44\x2d\xa9\x9e\x23\x7e\x50\xe4\xbb\x63\x53\xef\x9d\x61\xb3\x14\x78\xa3\x41\x92\x6f\x60\x5e\x0b\x6c\x46\xe3\x02\x4b\xd5\xa9\x80\x41\x50\x52\x58\x45\xe7\x75\x3f\x96\x4d\x87\xd5\x79\xa8\xe8\xaa\xa1\x43\xde\x71\x62\x8d\x82\x0e\x67\xba\xe9\x88\xad\x8c\x7d\x73\x95\xb6\x73\xe7\xc2\xa0\x71\xad\xd7\xe6\x4e\x6f\x54\x9e\xcd\xc9\xdd\x76\xd6\x1f\x6c\xfe\xcb\x90\xfb\xd7\x0e\x57\x48\xed\xf6\x43\x92\x4b\x7f\xd3\x13\x60\x20\xa8\x92\x4d\x59\x46\xc8\xf9\xc8\x89\x2c\x55\xd4\x2d\xd6\xf7\x19\xdf\x52\x4c\x00\x64\x48\x33\xc0\x92\x0d\x4f\x90\x75\x4b\x88\xb8\xbf\xcd\xde\xd1\xe8\xdf\x16\xb7\xf8\xf5\xe4\xd1\xea\x5d\xcd\x01\xbf\x34\xd9\x7b\x50\x6b\x67\x3f\xba\xe6\x16\xef\xb2\xe8\xc0\x43\xe5\xe7\x1c\x99\x06\xe4\x8c\x67\x5f\x4b\x4d\x79\xfe\xbc\xdf\xf3\xa9\xc5\x5f\x78\x7a\x66\x25\x56\xb6\xdd\xdb\x63\xf6\x8a\x79\x70\x55\x89\x01\x33\x4a\x78\x03\xdf\x5f\x9b\xb6\xfb\xe8\x98\x13\x3f\xec\x9c\xfc\x9b\x93\x72\xeb\x6c\x72\x8b\x57\x96\x07\x0c\xcb\x11\xa1\x46\x11\x9a\x48\x18\xb4\xe7\x51\x82\xc4\xb8\x9c\x23\x46\xaa\x2d\x11\x0e\x60\x48\x08\x28\x5a\xd3\x7d\x0f\x41\x32\x8e\x6d\xdd\x7d\xf9\xe9\x99\x73\x40\x85\xc6\xc5\x3f\xf9\xf1\xf1\xcd\x59\x3d\xbe\x3a\x6f\x9f\xc8\xda\x6f\x98\x77\xbf\xef\xf9\xc1\xa3\xf3\xf1\xa5\xe3\x69\x55\x6a\x64\x9c\x5a\x98\xd8\xa1\x18\xcd\x90\x7c\x25\x10\x38\x57\x25\x64\x5b\xd5\x54\x8e\x37\x49\x14\xc6\xd8\x8e\x55\x86\x15\x90\xef\xca\x1a\xa2\x63\x93\x8c\x03\x82\x06\x2a\x80\xe9\xa8\xa0\x77\xa9\xbc\x65\x60\xa1\x35\x0b\x8f\x1f\xab\x3e\xe7\xf8\x88\x6a\x6f\x7f\xb5\x83\xbf\x54\x7d\x72\xa9\xfa\xc5\x8e\xe6\xe8\x3b\xe6\xe1\xdd\x94\x8c\xef\x51\x48\x78\xd2\x8e\xef\xca\x91\xec\x99\xbc\x8e\x25\x52\x13\x39\xd6\xd5\xa1\x03\x75\xc1\x06\x92\x21\x41\x59\x32\x4c\x24\x7b\x9c\x4c\xc9\x44\x80\x29\x8d\xa0\x28\x5f\x7e\xf9\xa4\x27\x55\xce\x9f\x85\xfe\xa6\x75\xbd\x6d\x9d\xf7\xfd\xd5\xb0\x6d\xe6\xdb\x17\x96\x65\xc9\xd2\xa0\xec\xb5\x0a\x99\xea\x9f\x9a\xb8\xb8\x50\x98\x64\x05\x12\x08\x78\x97\x83\x8e\xea\x47\xb1\x2f\x31\xbc\x2e\x40\x96\xf8\x57\x00\xb3\x2a\xe6\xb0\x21\xf9\x94\x17\x1a\x92\x83\x7d\x85\x8b\x00\xc5\xba\x1c\xc1\x86\x89\x11\x4f\xd5\xce\x2e\x6e\xd7\xab\xec\xc0\x71\x1f\xa7\xee\xbc\x90\x35\x1c\x91\xb5\xed\xb5\xde\xfb\x67\x3f\xcd\x96\x56\x6e\x56\xa3\xce\xac\xfe\x98\x49\x72\x53\x91\x0f\x02\x2d\xd6\xe8\x00\x05\x3a\xc5\x90\x96\x2c\x72\x11\xab\x30\xb4\x86\x64\x1f\x03\xc8\x98\x16\x87\x75\x09\x60\x81\x66\x48\x19\x85\x41\xec\x25\x50\x41\x57\xcc\x29\xf5\xb7\x6d\xd8\xae\xcd\x2d\xe8\xbd\xdd\x32\x77\xde\x39\xb9\xf7\x67\xfd\xdc\xcd\x15\x7d\xed\x2e\xbd\x5a\xe8\xdb\xf7\xee\x2d\x4c\x32\xd1\x5c\x96\x45\x0b\xc6\x0c\x82\xac\x17\x4a\x9c\x66\xf2\x32\x49\x11\x01\xc9\xe8\x94\x88\x48\xc7\xb5\x02\x43\xd7\x4c\xda\xe4\x09\x28\x33\x2c\x88\x44\x22\x81\xc9\x0f\xfa\xf6\x4d\xc9\x32\xfa\xe7\x79\xc7\x7b\xb4\x1f\x33\xa1\x54\xed\x6f\xd7\xe7\xb9\x51\x63\x55\xce\xfa\x1b\xe6\x5e\xf8\xf8\xe7\xdf\xe3\x1d\x19\xdf\xfb\x99\xb0\xc0\xe1\x79\x93\x36\xe2\xc0\x20\x1d\xd9\x16\x69\x59\x86\x90\xf4\xb5\x18\x44\x84\x1b\x44\xb2\x27\x90\xbc\xc8\x52\x22\xc3\xb3\x61\xa8\x8a\x36\x43\x52\x81\xa6\x26\xee\xb5\x11\x1d\x4e\x15\xc8\x7c\xa4\x68\xa1\xa1\xd2\xa2\xe0\xd7\x26\xd5\xb3\x3c\xaf\xf7\x4d\xa7\xae\x9f\x9f\xbb\x77\xc9\xb9\x73\xfc\xfb\x65\x7b\x9e\x27\xb9\x9c\x54\x78\x48\x7a\xae\xa3\x23\x01\x6b\x88\x93\x90\x21\xba\x48\x93\x6d\x40\xd1\xb2\x2c\xc5\x98\xb0\x61\x68\xbb\x11\x45\xc6\xa4\x41\x89\x9c\x8b\x88\x04\x03\xfa\x59\xad\xb6\xe4\x1a\xbc\xa5\xd9\xf5\xce\x35\x88\x3a\x2d\x7f\x28\x3f\xef\x66\xb8\x6f\x9e\x7b\xeb\xfa\xe8\x91\x1d\xaa\x34\x84\x13\xa6\xbf\x93\x64\x6a\x61\x68\x0b\xbe\x47\x85\x3a\x13\x87\xba\x1a\xb3\x5a\x60\xcb\x2e\x43\x31\x5e\x20\x41\xc5\x74\x90\x2d\x46\x0a\x42\x24\x34\x44\x32\x8c\x18\x59\x55\xb1\x9b\x78\xf8\xf3\x5a\xab\xba\xf8\x8f\xaf\xb5\xfc\x0d\x2f\x54\xb9\x7c\x63\x44\x97\x41\x46\xc7\x16\x0d\x8f\x5a\x7f\x6c\x7a\x02\xee\xdb\x9b\xe1\xb8\x8c\xcf\xac\xd2\x59\xb0\x41\x99\xb2\x4a\xd0\x01\x96\xed\x18\x8b\x2e\xe0\x04\x45\x8a\x7c\xd9\xe4\x21\x03\x2c\x82\x16\x63\x25\xb4\x01\xc1\x52\x3e\x0c\xd4\xc8\xf3\x68\x2e\x7e\xf9\xa4\x8b\xb1\x1d\xb2\x3f\x3e\xdc\xe2\xfc\xa1\xcf\x85\x79\x7f\x56\x7d\x7a\x74\xed\xbd\x5e\xa9\x45\xce\x0e\x28\x70\x9d\x2f\xd4\xb4\xdc\xc2\x2c\x4f\x93\x9b\xa3\x65\x55\x25\x82\xc0\x8b\x62\x88\x29\x88\x08\x01\x71\x4e\x2c\x71\x91\x29\xcb\x2c\x83\x18\x49\x8d\x42\x8a\xa0\x14\xcf\xa0\x82\x08\xb0\x3e\xc1\xf1\xff\xd6\xe4\x4e\x00\x51\xa9\xb2\x63\xeb\xa4\x89\xcb\x0a\x3c\xb9\x76\x7f\x63\xfb\x1b\xca\x90\x9e\xf6\x89\x99\xc4\xaa\xaf\x16\xf4\xbb\xd2\x6d\xe0\xfb\x39\xb6\x4f\xdb\xf9\xe2\x7f\xcf\x9c\x91\x72\xa2\x4f\xdd\x95\x6b\xf6\xcb\x97\x7b\xd5\x58\xb1\x69\x86\xb0\xf9\x54\x8b\x69\x3f\x5d\x28\xf0\xee\xb4\x7b\x3d\xf5\xfd\x59\x5f\x79\xa1\x0e\xea\x06\x9a\xed\x18\x03\x3e\x28\xd4\xaf\xc9\xbd\x69\x7f\xf4\xff\xa6\x54\xf0\xe7\xf0\x4a\x7d\xd7\x97\x49\xad\xb6\x79\xfe\xcc\x69\x37\x4f\xff\x98\xdc\xdb\x56\x0a\x20\x17\x06\x3a\x2b\x42\x40\x59\x46\x20\x2b\xb2\x1e\x00\xca\xd2\x55\x81\x14\x04\xca\x14\x75\x51\xa5\xfc\x7f\xfd\x19\x0c\xab\x92\x8c\x1e\x69\x66\xe2\xdb\xd6\xfc\xa4\x59\xce\xc9\x85\x7f\xcd\xc2\xef\xba\xf9\xfc\x72\x19\x73\xce\xd0\x87\xf3\x86\xad\x39\xf3\xd1\xad\x02\xeb\xf2\x18\x53\x9e\xad\xcb\xb8\x56\x5e\xc2\x84\x0a\x98\xc8\x63\xed\x08\x7a\xba\xa0\x4a\x00\x79\xb6\xc4\xc4\x81\xa8\x2b\x42\x80\x09\x92\x87\xa4\x4b\x71\x1c\x62\x7d\x11\xb2\x8c\x66\x7a\x48\x47\x2e\xf7\x72\x42\x9d\xfe\xb0\x76\xdf\x99\xc5\xce\x6e\x2e\xb3\xe8\xe4\x9e\x69\xe4\x4f\x07\x66\x0f\x2f\xa5\xf5\xab\x9d\x4d\xfb\x68\x5a\xaf\xce\xab\xbe\x8a\x32\xde\x3c\x49\xbc\x9b\x81\xa2\x4c\x99\xf4\x18\x97\x76\x81\x44\x0b\xac\xca\x5a\x96\x6d\x7a\x36\xe9\xcb\x02\x41\x3a\x36\xc9\x88\xa1\x2a\xf0\x26\x96\x03\x8f\x27\x15\x04\xb9\xf4\xc4\xb3\x2f\xec\xdb\xb4\xa5\x61\xc1\xad\xc6\xaa\xdc\x15\xab\xdd\xba\x35\xbd\x6f\x87\x56\x7d\x56\x45\x39\x5a\xbf\x51\xf8\x93\x94\xc2\xc5\x7b\x6c\x11\x5f\xfc\xef\xfe\x47\xdf\xfb\xbc\xf4\xac\xcf\x57\xdd\xeb\x57\xe2\xee\xe4\xef\xbd\xf6\x1f\x5d\xfb\xf1\x58\x7c\xed\xf6\xf2\xf5\x45\x4f\x76\xbc\x77\xe7\xad\xf0\x85\xaf\xf8\xd9\x9c\xbc\x43\x4b\xbd\x35\x67\x4b\x89\x45\x4b\x3a\x2d\xcd\xf4\x7d\xd3\x71\x72\xed\x27\x5f\xc1\xfc\xfe\xa1\x81\x67\xfb\x7d\xdb\x48\xab\x99\x64\xf1\x6c\xda\xf3\x0c\xde\xd2\x05\x56\x92\x40\x48\xd9\x92\x1b\x01\x0c\x24\x59\x8d\x65\x29\x30\xa1\x81\x44\xec\x12\x40\x14\x21\x8c\x15\x4e\x46\x86\xa1\x45\x2f\xcf\x8f\xef\x2c\x1b\x73\xf7\xaf\x0f\xf3\xd5\xbc\x3d\xbf\xff\x3d\x71\xcc\xea\x2d\x83\x73\xee\x1c\xd4\x6a\x6c\xcd\x59\x73\x56\xd5\x9a\xdc\xa5\x50\x91\x24\x6f\x43\xe2\x7c\x44\xab\x02\x8f\x9d\x50\x8c\x19\xe4\x40\xc1\x97\x11\x1d\x84\xae\x60\x99\x1e\x4b\xba\xc8\xf7\x38\xc6\xd1\x3c\x47\x13\x80\x1d\x2a\x8c\xe8\xc3\x74\x70\x9e\x9b\x26\xd5\xfd\xae\xc9\x12\xf3\x8b\x9f\xed\x6c\xeb\xd8\xfa\x4b\x1b\x0f\xe9\xe5\x8f\x4c\x9b\xf4\x51\xa5\x03\xb3\xa9\x9e\xd7\x1a\x1f\x4a\xae\x36\x32\x0b\x04\x9e\x51\xcc\x80\x51\x68\x18\x70\x00\xa9\x9a\x0c\x05\xcf\x67\x5c\x9a\xc2\x91\x2a\x50\x20\x70\x7c\xf6\xff\x68\xa1\xa9\x0c\x1f\xa8\xbe\xab\xa8\xd4\xcb\xc9\xfa\x8f\x16\x92\x99\x65\x45\xef\xc7\x75\xcf\xae\x6a\x54\xbf\x73\xd9\xab\x2d\xba\x95\x92\x7f\x1b\x38\x34\xeb\x2f\x47\x6b\xe5\xa9\x50\x66\xca\xe3\x24\x0b\x27\xc5\x62\xa4\x5a\xa4\xc9\x44\xa4\x27\xc7\x76\xec\x62\x4d\x04\x64\xc8\x81\x38\x72\x39\x8c\xac\x30\xc2\x20\x84\x1c\x8e\x15\x4f\x54\x61\x18\x20\x36\x1d\xc8\x75\xf5\x7a\xed\xcf\x1c\xce\xb1\x70\xef\xfb\x1f\x15\xca\x7c\x74\x51\x39\xa6\xc5\x43\x7f\x10\xfb\xcd\x92\x9b\xb8\x48\x76\xbf\x7e\xd7\x02\x19\x77\x90\xc4\xdb\x08\xe4\xd0\x32\x05\x4d\x84\x1c\xa2\x02\xd9\xa6\x75\x00\x1d\x9a\xd5\x04\x57\x51\x79\x1d\x6b\x44\xe8\x7b\x16\x41\x8a\xb2\x2d\x63\x24\xb2\x5c\xa0\xfe\x5b\xed\xf8\x45\x9f\x96\xd2\xce\xd9\x95\xab\x9d\x6c\x8d\x3f\xac\x52\xf8\xc3\x6d\xed\xcf\xec\xa9\xbf\x8b\x2d\x5b\xb6\x48\xf5\x5c\x8b\x2b\x6f\x1a\xb9\x6e\xb1\x92\x6c\x93\x45\x8b\x61\x28\xe4\x08\xae\xee\x3b\x82\xe2\x91\x3e\x25\xb8\x10\xf3\x8a\xcb\x9b\x24\x0e\x05\x40\xd0\x2c\xc5\xd3\x98\x17\x6c\x64\xf2\x0e\x24\xc2\xc4\x4f\xf8\x2f\xea\x77\x6f\xbf\xf1\xf3\x36\x3f\x4c\xab\x6c\x65\x31\x57\x86\xa8\xcd\xbb\xea\x82\x31\x77\x8e\xbc\x72\xb6\x58\xbf\x69\xde\x5b\x5d\x93\xfb\xe2\xe2\xec\xd0\x54\x5d\xc3\x56\x6d\x8e\x46\xd8\x22\x63\x85\x24\x59\x6c\xb1\x76\x40\xf2\x16\x04\xaa\xa2\xd9\xc0\x26\x68\x84\x69\xc7\xb4\x43\x97\xb0\x11\x47\x26\xee\x1c\x76\xc8\xb5\x69\x3e\x57\x73\xdb\xe4\xc2\xb9\x3b\x1e\x1b\xb8\xc6\x6c\x9e\xa7\x08\x57\x22\xbe\x59\x78\x4a\xaf\x8b\xad\xfe\xac\x58\xe6\xe0\xec\xe4\x26\x3d\x47\x11\x4d\x2b\x80\x7a\x18\x3a\x90\xc0\x7c\x10\xc8\x71\xa4\xcb\xbe\xc1\xda\x8e\xe5\xd1\x3e\xa2\x68\xd6\x00\x1e\x6b\x40\x12\x52\x6a\x48\x30\x06\x4b\xa4\x73\xda\x69\xd3\xde\x39\xba\xf7\xcd\xfc\x69\x1c\xd7\xf6\x37\x3c\x6d\xef\xf5\x05\x9d\xbf\x26\x4f\xb4\xbf\x5c\x60\x64\x35\xa7\xf4\xc5\x5b\xcb\x93\xeb\x24\x76\xe8\xf8\xbc\xe9\x88\x41\xa0\x0b\xa1\x18\x87\xc8\x60\x91\xe0\xcb\x2e\xc3\x84\x1e\xb4\x51\xac\x84\xbc\xcf\xa8\x9c\xc5\x30\x58\xd0\x29\x3d\xd0\xfe\x6b\x23\xe3\x8b\x6a\x12\xa3\x4b\x7d\x9b\x73\xc5\xbd\x13\x77\x9e\x67\x5a\x30\xb8\xe7\x5b\x3b\x3e\xb8\xd7\x4c\x9d\xd1\xe7\xfc\x73\xf3\x95\xc3\x07\x66\x8d\x2e\x9e\x71\xb6\x55\xc2\x7c\x6d\x6b\xa1\xa3\x92\xae\x62\x70\x21\x65\xf0\xd0\x13\xb9\x00\xb0\x94\xa0\xc8\xb4\x48\x30\xa2\x6f\x5a\x7e\xa0\xc5\x7e\xcc\x02\x05\x46\x14\x0f\x68\x83\x37\x5f\x2e\x14\xd4\x75\x0d\xf2\x85\x1b\xda\x16\x33\x4a\x7c\x73\xee\xee\x38\x74\xeb\xd4\xae\xb4\x3a\x2d\x0b\x5d\x2d\x39\xbc\x69\xed\x5c\xa5\x2f\x6e\xfc\x2e\xb9\x0e\xc2\xda\xa2\x4a\x07\x3c\xef\x47\xa2\xcb\xe8\x8c\xc1\xb8\x3c\x94\x28\x49\x84\xac\x4a\xb1\x16\x49\x99\x30\xf4\x5c\x9f\x26\x29\x82\x61\x2c\x81\xb7\x59\x96\x7c\x39\x83\x3c\x1e\x3e\x72\xc7\x8e\xca\x4f\xb6\x7e\x5f\x50\x58\xb6\xcc\x79\xdd\x6d\x44\x4e\x7f\x38\xec\x9a\x9c\xb5\x69\xb5\x6e\x3b\xa6\x4f\x9a\xd8\x29\xb9\x26\x73\x24\xcd\xda\x20\xd6\x19\xd1\xb7\x41\xa0\x72\x38\x0e\x63\x55\x37\x63\x68\xeb\x82\x11\x78\xd8\xf5\x03\x85\x75\x22\x36\x8e\x6d\x87\xe5\x23\x60\xab\x7c\x62\xe7\x28\x62\x14\xdc\x5c\x09\x97\x2d\xd5\x63\xc7\xad\xec\x83\x6b\x9e\xae\xcc\xb7\x98\xfe\xd5\xa2\x96\xd4\xc6\x2c\x47\x8b\xd6\xfc\x6b\xbe\x7e\x2b\xb9\xce\x81\x55\x1c\x01\x9e\x23\x03\x20\x68\x98\x02\x02\xa2\xd0\xbf\x92\x9e\x6f\x2b\xa4\xa6\x4b\x84\xa9\x1b\xbc\xc1\xd2\x21\xe9\x70\x86\xe6\xc5\x31\x83\x04\xe9\x65\xe7\x98\xbd\x60\xf3\xb3\xcd\x57\x2b\xde\x5f\x5c\x23\xec\x52\x37\xbc\x38\xaf\x99\x3c\x36\xff\xe5\xba\x55\x8b\x8f\x72\x4f\x0e\xec\xd3\xa3\x4b\xc6\x89\x48\x09\x4d\x26\x1d\x55\x60\x1d\x53\x08\x05\x88\x3d\xd1\xc7\x8a\xc5\xfa\x80\x00\xb2\x8f\x42\x51\x63\x42\x95\x8b\x24\x00\x0c\xda\x71\x55\xcf\xf7\x38\x9e\x35\x31\x78\xd9\xe4\x3b\x8f\xe4\x5f\x9e\x41\xf6\xc8\xf7\xdb\x9d\x83\x13\x3f\x9f\xd1\xf1\xe4\xf0\xda\x55\xa7\x4d\x6a\x7b\x7b\x51\xd9\x76\x97\x73\x52\x6b\xd7\x24\x59\x10\x0d\xf2\xb2\xc7\x32\x40\x53\xbd\x48\xd1\x54\x49\x8b\x85\x98\xa3\x4d\x92\x93\xe9\x38\x0c\x4d\x13\xcb\x16\x10\x75\xd6\x0b\x75\x01\xdb\xb1\x67\xf8\x82\x91\xb8\x1f\x0f\x57\x15\xaf\x3f\x7a\x5c\xaf\xe7\x55\xe6\x3c\x6f\x77\xae\xeb\xf0\xf6\x6d\x8e\x7e\xf5\x16\x91\x43\xe8\xaf\xe4\x2b\xf8\x59\x85\x85\x25\xd5\xe4\x26\x3c\xc7\x30\x44\x3e\x8e\x23\x4a\xa5\x5d\x9e\x91\x1d\x2d\x44\x40\x44\x28\x88\x31\x92\x80\x4b\x92\x8e\xc6\xd0\x9e\xc2\x21\xa8\x80\x10\x6b\xb6\x61\xaa\x64\xe2\x97\x51\xb5\xf0\xaf\xda\x75\x52\xcb\x6e\x48\xd9\xbd\x6a\xca\x1f\x51\xde\x57\xdb\x6a\xdb\xf8\xa0\xd2\x8e\x81\x4c\xeb\x8d\xcf\xab\xd4\xbb\x54\x3d\xb9\xa7\xcd\x73\x80\x95\x42\x27\x8e\x35\x22\xe2\x6c\xd7\x66\x05\x4b\xd2\x21\xf2\x48\x1b\xf9\xa2\xc8\x39\x9a\x6e\xf2\xd8\x8e\x71\xc4\x90\x76\xe0\xd8\x32\x11\x27\x10\xc1\xd8\xf4\x70\x81\x5d\xb5\x9c\xf9\xea\x95\x9a\x7d\xf5\x8e\x3d\xed\x4f\xb7\xb4\x1e\x3c\x72\x4b\xf7\xb4\x83\xe7\xff\x1c\xf2\x61\x5a\xda\xc4\x8c\x23\xba\x13\x9a\xcc\x00\x4a\x0f\x64\x51\xb4\x6d\xac\x3b\xac\x89\x75\x42\xe6\x2c\x4a\x17\x65\x29\x14\x18\x45\x76\x04\x86\x94\x28\x36\x04\x84\x2f\x28\xbc\x82\x62\x81\xa7\xd2\x61\xf4\x54\x1d\xdb\x29\xf7\xe9\x01\x0b\xca\x3e\xd7\x7f\x2c\xd4\xbc\xf3\xda\x1a\x4f\x7f\xd9\x53\x65\xea\xd5\xb9\x7d\xea\x4a\x6b\x8a\x38\xa5\x26\xcb\x2f\x7c\x17\xd4\x3c\xd3\xce\x79\x3d\x70\x83\x15\x5d\xda\x7c\xc2\x5f\xaf\xd0\xfb\x29\x7e\xa8\x9c\x68\xd9\x2a\x4d\xd9\xd3\xa5\xc2\x99\xfd\x6d\x92\xab\xe4\xcb\x85\xa6\xc8\x48\xae\x11\xc5\xbe\x14\x62\x18\x48\x2e\x47\x12\x3a\x43\x72\x1a\xcb\xeb\xc8\x16\x15\xc9\x85\xd0\xa1\x08\x21\x36\x58\x40\x59\xb2\x21\xf3\xc1\xcb\x59\x3d\x7a\xe7\xe3\xf2\x07\xbe\x58\x7b\x7e\x75\x0d\xd8\x7c\xed\xae\xae\xc7\x32\xd5\xed\xb3\xaa\xf3\xfa\x4c\x07\xb7\xdc\xd8\xf8\xb8\x5b\x97\x5e\x49\x46\x6f\x92\xb2\xe0\x02\xd5\x71\x2d\x25\xf2\x8c\x98\xd2\x1c\xda\x8b\x4c\x86\x20\x0c\x25\x22\x29\xdb\x53\x6c\x8b\xe6\x6c\xdb\xd2\x62\x8e\x80\x80\x47\x91\xa5\x81\xc4\x6f\x9d\x3e\x35\xbf\xda\xfb\xf6\x89\x0f\xaf\x66\x2a\x7d\xa9\xfb\xc9\xea\xdf\xef\x58\xf9\x33\xc8\x7a\xae\x5e\xcb\x31\xaf\xdf\x79\x54\x27\x5e\xbd\xb1\x6a\x72\x03\x97\xd2\x19\x09\x51\x8e\x68\x61\x04\x1c\x3a\xc0\xa4\xef\x73\x6e\x84\x82\x10\x59\x96\xe9\xd8\x48\x76\x44\x22\x24\x19\xd2\xe6\x28\xd5\xe7\x10\x20\xd8\x04\x5b\x30\xb6\xee\xee\x92\x6d\x57\xfd\x6b\xdd\x5b\x15\x1c\x60\x95\xea\x3a\x61\x69\xbd\xcf\xe6\x17\x1d\x36\x8a\x1a\x30\x47\x5a\xbf\x3e\xd7\x1e\x9c\xdc\x76\x06\xcb\xeb\x92\x28\xc7\x01\x64\x44\x8a\xf3\x90\xe6\xb0\x9a\x8e\x42\x45\x02\x7c\x10\x5a\x12\xf2\x2c\x46\x21\xfd\x00\xe8\x58\x8d\x3d\xc4\xfa\x8c\x68\x68\xe9\x69\x46\x66\xbd\xf0\xc6\x80\x56\x4f\xfb\xd7\x7e\x6b\xd9\xa5\xae\xf5\x2d\x3e\x5b\xe7\x2e\x4d\xca\x9e\x6d\xf0\x0e\xbf\xe3\x9d\x92\xbf\xd7\x99\x93\xfd\xe4\x0b\xb7\xed\xdb\x35\xac\xdb\xcf\xc6\xad\x6d\x3f\xed\xad\x3d\xbb\x1f\x0e\xfa\x68\x65\x8e\x22\xeb\xb2\x1e\x6b\xde\xe6\x7b\x7a\x62\xc1\xbc\xfb\xa5\x87\xc9\xdd\xe9\xcd\x12\x52\x28\x53\xbe\xc4\x89\x28\x10\x85\xc0\x34\x48\x3f\xb0\x85\xc8\x37\xc3\x90\xb7\x18\x99\xc2\x31\x70\x1c\x17\x32\xb1\x0c\x28\xd5\xa3\x42\x9b\xd5\x12\xbc\x8c\x46\xe6\x2d\x15\xad\x6a\x99\x65\x4a\x8d\x9a\x0d\xb5\xba\xcd\xfc\x45\x23\x8a\xdd\xd9\x32\xb1\x49\xd3\x25\xcd\x3b\x4b\xc7\xbb\xfc\x7c\x5e\x4b\xb2\xc9\x76\x18\x33\x18\xe0\xd0\x26\x05\x82\x70\x48\x82\x44\x9a\x08\x29\x27\x30\x81\xaa\x44\x91\xe7\xfb\xb4\x49\x43\xc4\xe3\x00\x84\x12\x29\xca\x12\xef\xbd\x6c\xf2\xc5\x5c\x25\xa8\xca\x7f\x54\x1d\xa3\xf6\xb9\x38\x3e\xf5\x76\xdf\x25\x87\x52\x95\x12\xd9\xd5\x79\x43\xbf\xbe\x37\xf7\x5a\xc5\xe7\x6f\x36\x4d\xee\xab\x88\x53\x55\x33\xf4\x6c\x22\x00\x91\x2d\x59\x2a\xc1\xa9\x34\xc5\x0b\x5a\xc4\xc5\x12\xf0\x64\x5b\xf7\x31\xa7\xda\xa1\xea\xb1\x1e\xa9\x29\x9a\xe4\x9b\x42\x3a\x18\xd9\x1a\x29\x9b\xda\x7d\xd0\x78\x77\x36\x70\xf3\xf9\x3d\xb4\xb4\x75\x4d\xfd\xcc\xcd\x9e\xca\x4f\x17\x7e\xbd\x70\xb0\xdb\xec\x76\x69\x79\x93\xdc\xa0\x30\x91\x66\xcb\x08\x42\x07\x61\x06\x72\xb2\x05\x6c\x19\xe8\x7e\x18\x61\x05\x07\xa2\x27\x33\x90\x62\xb1\xa0\xa9\x14\x13\x86\x22\x0e\x3c\x43\xd4\x12\xb0\xd4\x8c\xe6\xdf\x0f\x28\x3f\x66\xf3\xd7\xce\xc6\x82\xf4\x84\x0d\x99\xf8\x68\x7d\xc3\xbf\xde\x48\x65\x89\x53\x1f\x7c\xb5\xac\x0e\x53\x21\xc9\x27\x6d\xeb\xba\x68\xbb\x62\xa8\xdb\x5a\xec\x85\x6c\x20\xf9\x86\x1f\x20\x4b\x85\x3e\x80\x5c\x8c\x05\xca\xf3\x7c\x0c\xa0\x14\x10\x96\xa8\xc5\x21\x17\xea\x66\x3a\xdd\xe4\x8f\xca\xae\xbb\x90\xbf\xc1\xef\xda\x77\x95\x2b\x3d\xf9\xa1\xc5\x86\xce\x65\x1e\x8a\x45\xeb\x77\xae\x75\xe9\x9d\xc5\x9f\x1d\xcb\xbd\x6d\xf1\x2f\x2f\x04\x6d\xce\x6e\xe5\xe9\x3b\xf5\xeb\x9d\xcf\xdc\x61\xea\xf8\x85\x8f\x47\xee\x7d\x9c\x2f\x73\x99\x9c\x6f\x64\x5e\x31\xb1\xff\x89\xbe\x8d\x47\x8c\x2c\x94\xe4\x31\x10\x10\x6d\x08\xb1\x13\x86\x01\x4d\xfa\x58\xb6\x0d\x21\x8a\x04\x56\x64\x7d\x57\x56\x24\xc6\x16\x23\x8d\x41\x58\x37\xa0\xa1\x89\x82\xe3\xdb\x94\x4a\xbc\xfc\x5d\xa8\x9b\xc3\x1b\xf7\x13\x52\x2b\x5e\xbe\x5b\xf4\xdd\xec\x3b\x6a\x7e\xbb\x66\xc8\xe6\x1b\x65\x4f\xae\x8a\x5a\xb7\xe1\x0a\x1c\x71\x27\x67\x1c\x48\x91\x78\x61\xb9\x13\x69\x92\x65\xba\xb6\x2f\xa9\x54\x04\x44\x0e\xa9\x8e\x1a\x9a\xa1\x4a\xc6\xb6\xec\xc7\x9a\x67\x49\xc0\x8c\x99\x90\xd7\x00\x45\xc8\x58\x60\xbc\x04\xdc\xd9\x69\x8f\xf8\x46\x0b\xcf\x99\x07\x27\x8f\x9f\x50\xb0\xfd\xc0\x26\x7b\x1a\x6c\xed\xd9\xe7\x49\x27\xaa\x73\xfb\xbd\x55\x2f\x96\x28\xf0\x83\x93\x64\x45\x04\x00\x39\x97\x11\x90\x48\xeb\x02\xaf\xa9\x36\x4d\x59\x8c\xc5\x68\x58\x53\x09\x8a\xd3\x2d\x1a\x01\x56\xb0\xf5\x90\x63\x0c\x16\x91\x8a\xe5\x23\x95\x48\x5c\x22\xdf\xef\x3d\xe6\x46\xe1\xb2\x7f\x76\xeb\xf3\xa4\xe6\xaa\x55\xaf\x54\x5e\xd3\x67\xfc\xa8\xa9\x4b\x0e\xf6\x6f\x94\xb3\x6b\xc3\x61\x0e\xd8\x96\x71\xa4\x4d\xe2\x5c\xc3\x49\x26\x2b\x4a\x32\x03\x4d\x55\x23\x7d\xc3\xa7\x0c\xdf\x84\x90\x0a\x48\x46\x90\x15\x8a\x82\x32\xc9\x48\x04\x88\x7d\x06\x58\x82\xc0\x53\x14\xfe\x9b\x1c\xb6\x35\xe7\xff\xdb\x24\x25\xb5\xf1\x1b\xf9\x73\xbd\x88\x82\xca\x36\x61\x5f\xcd\x21\x25\x8a\xda\x7b\xbf\x68\xfe\xeb\x3a\xa6\xce\xb9\xee\xe8\xe4\xed\x6e\x5b\x87\xe9\x75\x06\xed\xb0\x07\x7d\x61\x8e\x4b\x6e\x66\x52\xf0\xbf\x62\x57\xb0\x39\xc3\xa4\x58\x47\xe5\x09\xd5\x75\x99\x80\x34\x38\x23\x30\x42\x8a\x55\x1d\x57\x30\x74\x96\xb7\x18\x97\x37\xb8\x98\xd6\xa3\xff\x62\xc0\xbd\x60\xf6\x89\x67\xef\x79\x1d\x0f\x74\x2c\xf4\x56\x47\xae\x35\xd3\x7d\xee\x47\xdf\x4d\x1f\x3e\xe2\x6d\xa5\xc6\x97\x82\xb0\x7e\x62\xb1\x85\x8b\xa6\x25\x19\xc1\x2f\xfa\x82\x24\x01\x21\xe2\x5d\x6c\x1a\xb2\xc7\x61\x5a\x32\xa5\x50\x70\x79\xc1\xa3\x01\x1f\xa8\x2e\x72\x54\x53\x01\x14\x6d\xc9\x96\x61\x20\x51\xf7\x12\xbb\xd4\x83\x53\x6f\xf6\x3f\x74\xd7\x0a\xda\xe5\xff\xe4\xd5\x49\x97\x56\x9e\xec\xf6\xf9\x83\x6b\xf9\xaf\x4c\xdd\x3f\xb9\xf8\xb1\xe7\x8d\x23\x3d\xe3\x2c\xf2\xc4\x1b\xf1\x58\xd7\x09\x3d\x9f\x12\xb0\xcb\x45\x16\x4d\xc6\x81\x6b\x43\x8a\xb1\x30\x96\xb1\x1e\xb3\xae\x63\x98\x1e\x15\xb2\xbc\xc0\x04\x81\x82\x23\x60\xaa\x62\x62\xb3\x77\xee\x18\xb8\xb5\x5b\xa7\x0e\xd7\x3b\x0e\x6e\x62\x5c\xd8\x2c\xee\xcc\x9f\x57\xcc\xf7\xe5\xb3\x2a\x9d\xa6\x4c\x2d\x4a\xb5\xbf\x50\x74\x55\x72\x03\x38\x34\x54\x17\xb2\x8c\x4c\x3a\x9c\x08\xb0\xc6\x0b\x84\xa0\x61\x0d\x49\x8c\x41\x04\xac\xa2\x05\x0a\xc9\x47\xb2\x64\x52\xaa\x1b\xe9\x02\x96\x5c\x46\x57\x12\x9b\x3d\xe4\xf1\xe8\xc2\xef\x2c\xeb\x31\x65\xfa\x77\x07\x3e\x6a\x3e\xc0\xed\x7e\xcc\x9e\xba\xbe\xef\xf3\xaa\x5f\x4f\xe9\x72\xf4\xdc\x9f\x55\x3a\x67\x9c\x2a\x99\xd0\xb7\x19\x0f\x91\xaa\x60\x69\x18\x10\xbe\xef\x40\x8e\x91\x35\xac\x44\xa4\xee\x41\x8e\x63\x75\x42\xf5\x15\x15\x18\xa4\xe8\xc4\x81\xa6\x3a\x02\x17\xc7\xf8\xef\x19\xee\xe0\x1c\xff\x6f\xc3\xcd\xd4\x94\x2c\xf9\x32\x0d\x78\x91\xed\xb4\xad\x56\xf5\xcd\x69\x53\x89\x31\x8f\x7b\xaf\x3a\xfe\xea\x1f\x85\xc6\x08\xf3\xdb\x15\xe8\xdd\x3b\xf7\xe2\x83\x9f\xb6\x7f\x8f\xe8\xbb\x2a\xe3\x92\x22\x09\x3f\x8e\xc2\xbb\xbc\x6c\x91\xbc\x82\xac\x98\xe1\x01\x00\x81\x14\xfa\x50\x21\x58\x48\x10\x92\xa9\xe9\x86\x18\x70\xc0\xa2\x15\x3f\x50\x28\x43\xf3\x69\x5a\x8f\x12\xbf\x63\xca\x75\x9c\xca\xad\xb9\x73\xfb\x75\xb1\x49\xdb\xce\x5d\xa7\x56\xed\xd0\x9b\x2a\x5b\xf9\xe8\xaf\xc7\xe6\x7e\xe2\x0e\xeb\xc9\xdf\x22\x33\x4e\x27\x4f\x68\xb6\xa9\x92\xbe\xc6\x46\x84\x45\x45\x3c\x6b\x46\xa2\x0b\x05\x91\x93\x6d\x29\x70\x3d\x9a\xa5\x63\x2c\x32\xd0\x70\x85\x80\xd1\x63\x0d\x89\xaa\xce\x33\x6c\x82\x7b\xec\xcb\x2d\x53\x86\xef\x99\x30\xa4\x66\xd8\xb3\xf5\xba\x43\x1f\x35\x59\x70\xf8\xb3\x12\xca\x83\x29\x7d\xf9\x12\x35\x5a\xde\x70\x3e\xfd\x2a\x48\x32\x26\xc0\x0c\x42\x31\x70\x42\x59\x17\x38\x46\x56\x08\x5b\x08\x1c\x85\x8b\x28\x52\x0d\x58\xc9\x09\x62\x40\x6a\x1a\xd4\x63\x91\xe7\x78\x43\xc0\x90\x62\x09\x36\x71\xae\xfc\x60\xff\x86\xd7\xea\xbf\x3a\xe1\xcc\x4f\xa5\xb3\x7e\xf2\xf5\x92\x0e\x79\x56\xf4\x3a\x95\xf3\x7c\x4f\xb0\x9a\xaa\x95\x63\x7b\xcf\x6d\xeb\x92\xdc\xbe\xf4\x03\x86\x13\xd9\x48\xe7\x79\x01\x68\x14\x63\x1a\x20\x8e\x63\x3b\xb6\x23\x4a\x33\x65\x25\x0c\x00\x2d\xc6\x86\xa1\x9b\x96\x61\xd3\x24\xa6\xec\xf8\xdf\x15\xc3\x0b\x5b\x76\xfe\x69\x28\x9b\x9a\x92\x92\xab\x64\xb6\x17\x2f\xb2\x9c\x39\x5f\x9d\x76\xde\x58\xd0\x7b\x5b\xa5\xbc\x87\xc6\xfd\x76\x2e\xf3\xd2\xb8\x55\xa1\xf1\xa0\xce\xc8\xdb\x69\x32\x47\x1c\x2f\x99\x71\x4d\x91\xc4\x9b\x9b\xa0\x41\x52\x98\x25\x18\x57\x52\x18\x3d\x56\x74\x9a\x24\xa3\x08\xd2\x14\xe2\x6c\x68\x60\xc7\xd0\x50\xa4\x7a\x76\x00\x1c\x41\x27\x0d\x6c\xe1\x17\xd0\x0f\xff\x65\x76\xf6\x93\x25\x1e\x5e\x6a\xd7\xf7\xd0\xe4\x6c\xd5\xa7\xe7\xda\xfb\x61\x4a\xc1\x2f\xab\x57\xba\x9c\xfb\x97\xd4\xe3\x95\xf2\xb4\x16\xe5\x31\xc9\x56\xa5\xd3\x2d\xd5\x25\x45\x01\xd3\xb1\xa8\x9b\x3a\x54\x54\x20\x90\x81\x6a\x78\x26\x8e\x62\x4d\x83\x8c\x4b\xe8\x16\x69\x44\x5c\xec\x11\x92\xc1\xc6\x9e\x0b\x13\xcf\x4b\xaa\xb7\x18\x36\xe3\x59\x8e\xe8\xec\xb4\xd5\xc3\x6e\x15\x9f\x31\x71\x7f\xf6\x12\x64\x27\xa9\xdf\xb2\x1a\xd9\x2a\x91\x3b\xd6\x3d\x3f\x30\x25\xc9\x66\x93\x0a\x88\x63\xdf\x8a\x79\x99\x56\x62\xc7\x62\x43\x5a\x63\x82\x38\xe2\x62\x16\x91\xb2\x2e\xea\x91\xca\x20\x4e\xa7\x34\xd6\xb3\x10\xe5\xca\x5c\x8c\xd3\x31\x7b\xe4\x27\x2d\x67\x9f\x73\x47\x3c\xbc\xd0\xf9\xf2\xd2\xd7\x33\x0d\xa9\xf6\xca\xa3\xb7\xa7\xb6\x3a\xb9\xf0\xc0\xd8\x37\x86\x6f\xcb\x47\x74\x4b\xb2\xd0\x15\x16\x65\x45\x35\x63\xc3\x22\x25\x2c\xca\x34\x65\xfa\x1c\xd0\xc8\x08\xc8\x9e\x8b\x28\xcd\x14\x2c\x82\xb4\x22\x23\xa6\x24\x44\xc8\x01\xef\xf0\xbe\x91\xd8\x49\x06\xec\x5b\xf1\x68\x98\xba\x9c\x18\xf1\x1b\x71\xa1\xd2\xc3\xcb\xe3\xbe\x9d\x2b\x15\x18\x53\xa4\x59\xd1\xa9\x35\x33\x17\x28\xf8\xca\xd0\x8c\xaf\xe7\x4b\x98\x2b\x7d\x1a\x1a\xb1\x11\x38\x48\x73\x0c\x11\xb3\x18\xc8\xbc\xaa\x04\x82\x26\x1a\x94\x65\xc4\x3c\x22\x4c\x2c\x19\x91\xea\x30\x26\xc6\x42\x6c\x42\x37\xd6\x5e\x62\xa6\xfc\x13\x50\x22\x35\xa5\x41\x83\x6c\xff\xb3\x66\xa7\xc9\xd1\xc3\x59\x33\xb5\x6e\x37\xe5\xeb\x99\x37\xeb\x9d\x1b\x1c\x94\x7b\xb3\xd1\x9e\x6c\x9f\xee\xf8\xee\x6c\x93\xee\x6e\xbf\x4e\xb9\x73\xe5\x4d\xee\x75\x4d\xf8\x32\xaf\x18\x58\x56\x22\x53\x88\x28\x5e\x63\x69\x5a\x15\x01\x62\x69\xe8\x39\xa2\xa7\x53\x11\x94\x54\x17\x01\x17\xb1\x92\x1c\x70\x91\xae\xe3\x74\x26\x9e\xc7\xf3\x9f\x6a\xd6\xb3\x78\xaf\xb4\x70\x50\xff\x8f\xb3\xb7\x2c\xda\xb4\xcb\xbb\x42\xe1\x52\xbf\x2c\x4c\xe5\x3a\xf7\xb9\x3a\xe2\xf8\xeb\x49\xee\xef\x92\x92\x0b\xdd\x38\xe2\xbd\x40\x81\x22\xc7\x62\x45\x45\x90\x55\x9c\x98\x43\x28\xb4\x35\x80\x31\x60\x1c\x2e\xa4\x24\x6c\xb0\x2e\xf0\x55\x8e\xc7\xe9\x10\x6a\xee\x74\x7c\xe5\xc2\xf0\xbc\xc3\x36\xba\xeb\x7b\xf7\x5a\x5e\xd0\x3b\xf0\xe3\xae\x67\xd5\x17\xd4\xed\x81\x8e\x97\xdd\x5f\xe6\xdb\xf9\x8f\x1a\x27\xd7\xa7\x80\xc8\x89\x71\x8c\xb1\x4e\x2b\x12\x09\x43\x8d\xf7\xe2\x90\x16\x0d\x3b\xe2\xe3\x88\xe5\x02\x37\xd6\x23\x05\xa3\x38\x26\x42\x4b\x13\x79\x5f\x90\x09\x9c\xd8\xec\xac\xdf\x81\x85\x47\x6a\xed\x1c\xa5\x76\xbf\x76\xe8\xa3\x96\x7b\x6f\x0d\x9c\x36\x28\xcb\xb8\xe6\x17\xdb\x2f\xba\x7c\xb7\x58\xd3\x9d\x3f\x27\x97\x47\xc0\xd9\x8a\xec\x73\x02\x14\x4c\xca\xa6\xb1\xa9\x12\x7a\xc0\x86\x34\x1d\x20\x36\x76\x25\x96\xb2\x10\x69\x87\x5c\x00\x09\x96\x0e\x54\x06\x61\x49\x50\xe0\xdf\xf3\xe5\xff\x2c\x9c\xfa\xa7\x3e\x7a\x6a\xe3\x8a\xff\xbb\x45\x14\x2e\x58\xfe\x89\x9c\x72\xa8\xf2\xc9\xc2\xcf\x17\xcf\x9f\x44\x55\xed\x71\xbd\xdd\xe1\xc3\x6f\xcd\x5f\x92\x1f\x39\x75\x2f\x2d\xac\x72\x33\xc9\x43\x74\x86\x11\xcc\x88\xd0\x14\x24\x85\xbc\x4e\x09\x4a\x04\xa1\xa8\x71\x14\x4b\x5a\x96\x40\xca\x24\x88\x58\xd6\xa6\x69\x51\x04\x58\x0e\x2d\x4d\xf6\xf8\x74\x44\x60\x7e\xfa\xe0\x68\xdb\x32\xab\x87\x0d\x73\xc7\x5e\xbd\x59\xad\xe9\xc7\xc5\x3a\xff\xd6\x6b\xfe\x88\x85\xf0\x03\xb8\xb7\xf0\xf5\x1b\x17\x87\x64\x1c\xea\x99\xb0\x9f\xc8\x44\x86\x15\x9a\x2c\x65\x78\x0c\xe2\x68\x37\x10\x20\x06\x06\x63\xca\x00\xe9\x32\x2f\x0b\x9c\xa5\x86\x62\x88\x75\x39\x10\x45\x00\x0d\x48\x78\x5a\x3a\x48\x8b\xca\xbd\x7a\xbe\xde\x72\x5b\xfd\x02\x8b\xae\xcc\xfa\x22\x57\x39\xe2\xc0\xc1\x5e\x51\xb7\xf7\x9e\xf6\xb9\x7f\xfa\xb7\x91\x97\x47\x67\xab\x9d\xdc\x2d\xa2\xac\xe4\x4a\x9e\x28\xd0\x24\xe0\x23\x4d\x61\x20\x13\x98\xbe\xca\x91\x9a\xc4\x18\x1c\x65\x99\x91\x49\xb3\x5c\x14\x46\x8c\xa8\x78\x82\x29\x71\x96\x4e\x70\x30\x71\x24\x74\x96\x6e\xff\xf0\x5e\xd6\xaa\xa2\x05\x2f\x4d\x4d\x9b\x5a\x62\xce\xb2\x5f\xe4\xf9\xcd\xf2\x15\xcc\x5a\x78\xf1\x1a\xe3\xc7\x4c\x1f\x25\x97\xa3\xc5\x06\x06\xaf\xb3\x28\x46\x96\x2c\x85\x9a\x49\xc1\x98\x0b\x3c\x51\x31\x6c\xcc\x29\x16\x6f\x6b\xa4\xa0\x59\x14\x1b\x99\x8e\xe5\x7b\x92\xef\x12\x50\xfc\xaf\x9d\xad\xff\x89\x84\x7f\xea\xa7\xa7\x36\x2e\x99\xe5\x8d\x17\x23\xa1\xdd\xeb\xed\x2f\xbf\xb9\xe9\x9b\x77\x16\x17\x7f\xbd\x60\xc5\x35\xdd\x9f\xfc\x35\x2a\xeb\xa7\x79\x96\x75\xbf\xda\xfd\xc4\xab\xde\xfc\x99\x63\x7e\x4d\xee\xb7\x89\x98\x50\xf5\x02\x8d\xb1\x35\x29\x32\x01\xc5\x6a\x6c\x20\xab\x22\x30\x14\x5d\x63\x69\x0f\xba\x8a\x09\x5d\x59\x65\x5c\x92\x54\x91\x05\xa1\xe1\xb0\xe9\x50\x49\x9b\xac\x2a\x64\x57\xf9\xf9\xdc\x47\x3d\x2b\xb7\x3e\xf5\x78\x50\x9e\x81\xcd\xe5\x42\xdb\x97\xef\xb7\xb7\xe7\xb9\xf7\x69\x8d\x6e\x87\x56\x14\x4d\x32\xc9\x92\x85\xc8\x24\xac\x48\x90\x2c\xd6\x0f\xe5\x18\x13\x0a\xe6\x19\x3a\x36\x43\x5b\x15\x0c\x4e\x22\xd4\x80\xc1\xb4\x41\x23\x49\x77\x5c\x4d\x50\x43\x3d\x9d\x7d\x9c\x5f\x53\x60\xd1\xb0\x70\xea\x4f\x1d\x41\xfd\xba\xbd\x56\x15\x18\xf1\xf9\xd6\x2a\xa3\xde\x7f\xcd\xa8\x55\xb6\xf0\xc0\x26\xef\x9f\x3e\xf5\x79\x72\x03\x98\xe7\xcc\x18\x01\x87\x0b\x21\xa1\x41\x36\xd0\xb0\xce\xc8\x92\x69\xb2\x4c\x84\x0d\xd5\x85\xa6\x12\x9a\xaa\x46\xf8\x4a\x44\x28\x92\xea\xd0\x92\xf2\x6f\xd0\xf3\xcb\x01\x2c\x15\xdb\x35\x72\xf8\x83\xe8\xed\xd3\xfd\xf6\x6f\x3c\xf6\xe3\x91\xac\x59\x9f\x74\xff\xed\xd7\xc1\xbd\x6e\x35\x77\x2a\x45\xe8\x39\xcc\xf8\x2c\x3b\x61\x55\x47\xb9\x94\x20\x60\x5a\x88\x55\xc9\xd0\x2d\x37\xd0\x20\xc6\xa2\x1d\x90\x91\x49\x99\xb6\xe6\x91\x58\x8d\x21\xc9\xe9\x40\x00\x04\x69\xb0\x61\x28\xb0\xe0\xa5\x48\xf8\xa7\x26\x75\x6a\xe3\xcc\x25\xff\x27\x12\x46\xbf\xb7\x31\xbf\x57\xee\xb5\xf9\x99\xae\xd5\xca\xda\x2a\xef\xa8\x86\xca\xf9\xbe\xe2\xe9\xb9\xc1\x59\xfd\xad\xc5\x5d\x47\x4f\x3c\x37\x3f\xc9\x5c\x27\x42\x50\x7c\x2f\xb4\x05\x16\x7b\x94\x03\x3c\xd2\x27\x39\xc2\xd5\x84\x50\xd1\x10\x56\xe4\x48\x75\x90\x00\x3d\x3b\x0c\x19\x37\xb0\xc8\x58\xf7\xf5\x74\x36\x4b\x77\xee\x9f\x75\x4b\x43\xe7\xeb\xd7\xf7\x57\xa9\xb2\x22\xe7\x9a\x75\xa5\xf9\xb7\xf9\x3f\xe9\x26\xbf\x8f\x7f\x3a\x8a\xdf\xd0\xa1\xc0\xfa\x8c\xab\x39\x24\x16\x3c\x95\x7c\x26\x30\x18\xce\xd4\x41\x28\x19\x0c\xa7\xa8\xb1\x8a\x02\xdb\xf0\x81\x12\x92\x0c\x6d\xe8\xa1\x11\x9b\x82\x6e\x38\x8e\x13\x51\x52\xa8\xdb\x7c\x3a\xdb\xfc\xc0\x96\xbc\x77\x86\xee\xa5\x0f\x2e\x55\x17\x4d\x4d\x69\xb6\x7e\x77\x9f\x7b\xaf\xf7\x9f\x90\xe9\x4b\xf6\x79\xd6\x47\xb3\xd7\xc2\x4e\x93\x93\x4c\x69\x91\x62\x85\x24\x74\x53\x8b\x3d\x26\x30\x55\xce\xd2\x55\x85\x0c\x2c\x03\x45\xaa\xef\x68\x01\xa6\x23\x0c\x18\x01\xea\x1e\x45\x79\x80\x64\x35\xc6\x4f\x07\xd5\xd1\xae\xd6\xce\xd2\x67\x4b\x65\xbe\x75\xb6\xbe\xba\x79\xdd\xb4\x05\x2b\xf6\x7d\xad\x6d\xfe\xbe\xe2\xc8\x0b\x45\x73\x5d\xda\x74\xf7\xb8\x99\xf1\xd5\x26\x89\x65\xd8\x44\x4b\x24\x04\x8b\x60\x68\x51\x25\x1d\xcd\xf6\x7d\xce\x93\x4c\x5e\xa4\x90\x82\x15\xe8\x91\x2c\x52\x14\x48\x12\x2e\x40\x1c\x01\x1c\x2d\x14\x88\xbf\x69\x2d\xe3\x6b\xfd\xdb\xe2\xda\x3b\x72\x15\xad\xd5\x03\xf5\xe8\x5b\x72\x40\xb1\xd9\x79\x07\x6d\x1b\x3d\xf6\x71\x99\x16\x8f\xce\x38\x97\xf3\x08\x79\x85\x9d\xb9\x46\xa6\xa6\x3c\x7f\xfe\xd7\xd3\xa9\x2f\xea\x54\x36\xae\x5e\xaa\x86\x9d\x33\xcc\x59\xa2\x6a\x9d\x6e\xca\xf4\xb4\x6a\x33\xdb\x66\x7f\xa5\x45\x85\xb3\x65\xb2\xe7\x5a\xb3\xe6\x79\x97\x26\x19\x9f\x4d\x25\x2e\x02\x03\x99\x54\x64\x06\xf8\x14\xf0\x22\x40\x72\x40\x67\x54\x1d\xe9\x92\xec\x43\x59\x52\x34\x82\xd6\x64\xc9\x65\x68\x04\x1c\x68\x87\x36\x22\x15\xcd\x7a\x79\x70\x39\x76\x5d\x91\x51\xd5\xee\xb7\xfc\xbd\x5b\xfe\xe0\x64\x96\x02\x77\x5f\xad\x78\xa6\xde\xbd\x15\xa5\xba\xb7\x58\xd2\x6a\xc1\x6c\x62\x45\xa9\x8c\xe3\x22\x13\x3b\x94\x4a\x47\x5e\xe8\x11\x8e\x0a\x4c\x45\x73\xd8\x20\x60\x22\x52\xb1\x34\x31\x04\x18\x69\x30\x96\xb1\xc6\x84\x5e\x04\x69\x2a\xc2\x48\xe2\x20\xeb\x25\x40\x36\x9d\x1b\xdf\x2b\x5b\xd9\x01\x0d\xb3\x95\x3c\xc9\x05\xab\xdd\xe9\x33\x36\x6d\x5e\x33\x68\x43\xea\xbc\x67\xdf\x1f\xfa\xe5\xf4\x90\xb3\x0f\xe7\x25\x37\x74\x15\xcd\xc5\x4e\x18\x0b\xb6\x66\xdb\x9e\x46\x88\xba\xc4\xe9\x96\x1f\x08\xbc\x04\x14\xc3\x8f\x41\xe4\x7a\x16\x61\x38\x8c\x6d\x46\x0a\x67\x08\x44\xc0\xa5\x43\x55\xdc\xb9\x25\xad\xce\x85\xd2\xcb\x67\xa5\x04\x1d\xb6\x34\x2e\x57\xec\x8d\xa7\x7f\x16\x5f\x55\xb7\xeb\x83\xea\xcd\x37\x71\x57\xc6\x9c\xe8\xbf\x3a\xb9\x89\x52\x47\x84\x4b\x85\x06\xad\xa9\x04\x92\x35\xda\xe5\x69\x20\x31\x2e\x6f\x12\xa1\xe3\x42\xd9\xb7\x05\x27\xa4\x03\xc4\xdb\xac\x6d\x68\x1e\x85\x08\x16\xaa\x2f\xcf\xf4\x8e\x94\x4b\xf5\xaf\xe5\x7c\xfd\xf8\x44\x7c\x8c\xef\xb0\xfa\xe9\x8e\x26\xe3\x3b\xec\xdb\xf9\xda\x89\x86\xcb\xb7\x1e\x1c\xf9\x7b\x95\x69\x9d\x93\xeb\xcf\x50\x75\x78\xc2\x34\x51\x18\x2b\x98\xf4\x59\x06\xf8\x26\x89\x90\xa9\x04\x2c\x29\x3a\x26\xa2\x3c\x5b\x00\x21\xe7\x79\x04\x0b\x1d\x47\xb6\x58\xd6\x55\x12\x27\xc9\x42\x43\x36\x9f\x6b\x29\x84\x27\x3e\x2b\xd6\x48\x74\xba\x5e\x18\x1a\xd7\xbe\xf0\x74\xd8\x6a\x7e\x61\x9d\x66\x9f\xb5\x5b\x05\xdb\x24\x77\x9a\xc1\x6a\x0a\x76\x43\x01\x40\xec\xb3\x41\x24\x4a\x06\xe0\xbd\xd0\x54\x28\x45\x42\x66\x20\xc6\xa4\x69\x7a\x81\x8b\x02\x12\xf0\xb2\x81\x35\x9d\x51\x44\x82\x48\xdc\x79\xce\x5c\xfa\x6b\xf1\x99\xbf\x68\x2c\x75\x22\x4f\xc5\x3b\x2b\x2b\x2c\x69\xf8\x4e\x69\xbe\xe3\xa3\xab\x7f\x65\xe9\xbc\x0d\xb6\x18\xfa\x79\xc6\xa1\xf7\x09\xfd\x1a\x87\x01\xf7\xaf\x87\xb8\x6d\xc9\x94\xa6\x92\x46\x04\x00\x63\x71\x04\x1b\x58\x8a\xc4\xd3\x9a\xc1\x2b\x11\x86\x0e\x17\x01\x33\xe2\x29\x46\x74\x1c\x3d\xc1\x1a\x99\xe9\x25\x26\x7f\x35\x99\xbd\x36\x91\x9b\x55\xa8\x6c\xd7\x9f\xdf\x99\x9e\xda\x68\x43\x9b\xc2\x5d\x4f\xb7\x6e\xd2\x7d\x7e\x59\x75\x19\xce\x38\x56\x29\xa1\xc9\x32\xe3\x3a\xb6\x42\xd1\xb2\x04\x1d\x12\x1a\x46\x28\x3b\xaa\x13\xc9\x7e\xa0\x22\x05\x01\xc4\x42\x86\x26\xc9\x90\x20\x38\x1c\x44\x08\x58\x84\xc5\xa5\x23\xe5\x54\x3e\xf7\xca\x31\xe3\xab\x0d\x7a\x04\xb8\x77\x0b\x76\x99\x79\xbd\x68\xd9\xbb\x61\x70\x3b\xd7\xa5\xf7\xe2\x0a\x0d\x27\x2e\x2e\x59\x3d\xe3\xfb\x2b\x12\x83\x0c\x05\x45\x11\x43\x4f\xb7\x14\xca\x21\x1c\x59\x21\xc4\x48\xc5\x51\xe4\xbb\x3e\x2b\x63\x07\x7b\x0e\xfa\xd7\x5d\x6a\x53\x38\xc0\x94\x06\x14\xc5\xc0\x56\x62\xb3\xbf\x5b\xb0\xaa\xf5\xa3\xfc\x45\xad\x96\x5b\x4f\x2c\x96\xea\xd5\x3f\x76\xf9\x03\x0d\x9d\x1f\xdf\xaa\xfd\x44\xbf\xfc\x2b\x1d\x76\xf4\x3a\x94\x64\x07\xa1\x85\xd8\x07\x88\x96\x78\x55\xa7\x49\x53\xf1\xc9\x10\x73\x31\xb2\x4d\x86\xb4\xa0\x82\x34\x89\x74\x21\x17\x33\x32\x0f\x2c\x16\xf3\xb1\x02\x71\x3a\x22\xed\x3f\x36\x29\xf6\x68\x2d\x6c\x3f\x7b\x43\xc9\xdd\xad\xba\x32\x6d\x6f\x3f\x78\x3a\xe7\xdb\x7a\x6d\x2e\x2c\xee\x5f\xe3\xf8\xd9\xdb\xd3\x5f\x4d\x2e\xb5\x9c\xe3\x28\xda\x11\x25\x51\xc0\x8c\x19\xa8\x1e\x88\x15\x2f\xf6\x22\xd2\xc1\xb6\xcf\xf3\x22\xa1\x8a\x1a\x61\xf3\x86\xc2\x13\x50\x95\x05\x4f\x76\x43\xc3\x4b\x87\xec\x96\xf5\xfc\xdb\x63\x5b\x3c\x78\xed\xde\x1f\x85\x6e\xae\x2a\xb6\x72\xeb\xc6\x2f\xdb\xef\x38\x35\xa9\x60\xeb\xc7\x1d\xbc\x60\xe5\xbc\xd7\xf7\x64\xbc\xb9\x99\xb8\x95\xcc\x58\xbe\x2b\x08\xb6\x80\x6d\x1d\xb3\x64\x68\xe9\xb2\xa1\x93\xa2\xec\xa8\x66\x1c\x33\xae\xac\x88\x71\xcc\x3a\xbc\x1d\x72\x7e\x60\xdb\x32\x62\xd8\x04\x22\xbd\xf7\xf3\x46\x6d\x6b\xcf\x7b\xfb\xdc\xaa\x26\x1f\x36\xb8\x3d\xf9\xcf\x46\x25\x36\x4d\xe2\x3f\xdd\xbe\x66\x72\x91\x11\xb3\xe6\xcc\x2a\xda\x2e\xe3\x4b\x90\x13\xd7\xe2\x2a\x25\x90\x36\x65\x90\xc0\xc6\x0c\x60\xa3\x30\x24\x03\x35\x90\xdc\x50\x20\x23\xc3\x01\x96\x23\x59\xb6\x4d\x42\x8e\x70\x05\x1e\x19\x9a\x2b\xc6\x46\x3a\xd8\x98\xe5\x47\x76\xf4\xbb\x71\x65\x4e\x5e\xe3\x42\xf3\x5f\x46\x54\x2e\x7e\xad\x4c\x8b\x5f\xaf\x67\x19\xa7\x15\x4b\xbb\x74\x16\x0e\x5b\xe9\xaf\x7b\xe1\xbb\xd0\x79\xe1\x99\xde\xf3\xc6\xde\x3e\xbd\xea\xf9\xa3\x0d\x57\x76\xdf\xa6\xa6\xdc\x3d\x30\xb2\x6e\xe5\x3f\xd6\x95\x38\x29\x66\x2a\x59\xa5\x5e\x92\x6b\x49\x48\x1b\x0e\xad\xeb\xbc\x06\xe4\x88\x0b\x05\x9f\x8e\x2c\x86\x25\x3c\x06\xbb\x2c\x1d\x32\xbe\xa0\x40\x42\x32\x38\x55\xd5\xa4\xc8\x11\x30\xcf\xc7\x09\xc4\x15\xac\x2b\x07\x6b\x2c\x99\x70\xa0\xe4\xf5\xa9\x59\x3e\x07\x8d\xcf\x1f\xee\x7c\x0d\x16\x4c\xdb\xb3\x60\xde\xe0\x0f\xd6\x95\xe9\x52\xae\xf6\xb7\x49\x16\x09\x42\x4c\x68\xaa\x2c\x67\xc4\x84\xcf\x29\xbc\xcf\x84\x22\x84\x31\xb6\x24\x0e\x86\xae\xa4\xd9\xa4\x00\xcd\xd8\x13\x0c\x8e\x54\x05\x45\x56\x14\xca\x45\xe9\x00\x0d\xbf\x1b\x9b\xb6\xaf\x32\x7b\xf7\x12\xf5\x97\xd1\xab\x48\xda\xf6\xae\x4b\x4e\x55\x18\xcd\x8e\xe8\x7f\x7c\x5e\xe9\x75\x79\xac\xe1\x7a\xbb\x17\xbe\x0b\x39\x80\x3b\x7f\xa9\xc0\x93\xed\xcf\xca\x65\x2e\x72\x7c\x7b\x8e\xf3\xed\xb6\x65\x5b\xd4\xb7\x20\xde\xfd\xe6\xaa\x5a\x69\x8d\xec\x4e\xc9\x5d\x31\xcb\x02\x25\x66\x28\x4f\xc1\x80\x89\x59\xdf\x94\x7d\xc8\x91\x31\xf0\x59\xa0\xe3\x90\x05\xa4\x1b\x45\x16\xa9\x05\xae\x4e\x28\x12\x8e\x9d\xc8\x77\x64\x22\x41\xbc\x0c\xd8\xd5\x63\xde\x1f\x79\x7a\x56\x19\x53\xc5\x2c\x36\x26\x90\x46\xef\x38\x99\xa5\x68\x36\x30\x70\xc9\x98\xf1\xab\x06\xc0\x72\x4f\x32\x8e\x8d\x4c\xf8\x5d\x54\xd2\x87\x16\x52\x63\x51\xd1\x7c\xc7\xb0\x3d\x99\x47\x32\x32\x79\x10\x4b\xa4\xe6\x4b\xbe\x16\x00\x36\x22\x5d\x86\x0e\x18\x9b\x12\x1c\x8f\xb5\x60\x94\xce\x77\x39\x53\x77\x6a\xc1\xbc\x3b\xc7\xe6\xac\xd8\x70\x18\x6a\x35\xbd\x7c\xf7\x12\x53\xab\xe7\x7f\xd7\xfc\x76\xdc\x25\xfc\xce\x61\xb8\x2b\x53\xa5\x17\xff\xbb\x72\xb6\x71\x7f\x7e\x58\xff\xbb\x61\xbd\x9a\xcf\x79\xf5\x93\xbd\x64\xf8\x67\xb3\xc6\xd5\xa7\x2e\x7b\x40\xcf\xc7\x7f\xfa\x6f\x3d\x39\x7b\xf5\x45\x6c\x42\x85\xcc\x55\x5f\xf7\x96\xf6\x1c\x26\x8d\xa8\x3d\xb1\xd1\xd7\x4f\x2f\x96\xf9\xe8\x74\xa7\xdc\xf7\xef\xdf\xa8\x30\xa8\xa3\x59\xac\xe3\xa8\x24\xc3\xb8\x7c\x55\x05\x58\x12\xa1\x25\xb2\x61\x68\x38\x8c\x4e\x87\xa2\xef\x88\x21\xc3\x0b\x0a\xab\x53\x3c\x09\x29\xcb\x0a\x18\xac\x2b\x61\xa4\xeb\xa6\xa0\x6b\x89\x6b\xa7\xfa\xf1\xc1\x82\xeb\xdb\x3a\xe7\x3f\x6f\xdb\x64\x9d\xb2\xfa\x87\xba\x9b\xde\xcf\xb4\xaf\xe3\xf0\x3e\xb9\xef\x5e\x59\x54\x20\xf3\xa4\x1c\xef\x26\x39\xc2\x34\x42\x84\xa6\x07\x43\x8d\x66\x08\x37\x62\x54\x01\x09\x04\x0a\x23\xce\x27\x55\x9b\xd1\x54\xd2\x13\x01\x47\x90\x84\x16\x83\x48\xe7\x2c\xd7\xf7\x13\x48\xde\x7e\xa0\x9f\xc8\x62\x87\xdc\x84\x9d\x47\x37\x7c\xd4\xa7\xd7\x9e\x94\x85\xf7\x52\x16\x0f\x7c\x67\xc0\x80\x57\xdf\xaa\x55\xef\xf3\x02\x4f\x7b\x25\x99\x86\xab\xaa\xb6\x65\x6b\x16\x63\xc8\x52\x0c\x02\x80\x48\x4f\xa5\x15\x91\x63\xac\xd8\x20\x2c\x9b\x62\xcd\x90\x85\x3e\xe9\x42\x13\x87\x5c\x40\x4a\xc8\xe3\x12\xb3\x77\x3e\xd9\xfd\x4b\xed\xdf\xfa\x8e\x3c\x55\x2e\x6d\x7d\xb5\xee\xbb\x8e\x16\x2c\x9e\xa3\x6c\xab\xa2\xa5\xc6\x49\x69\xb6\xd2\xa7\xca\x8c\xf5\xfd\x92\x2c\x83\x69\xb3\x3a\xe1\x52\x40\x22\x5c\xce\xa1\x7c\xca\xd2\x55\x5f\xa4\x5d\x46\x11\x2d\x4b\xb3\xf8\x90\x62\x44\xd3\x70\x5d\x4d\x56\x78\x12\xd1\xa4\x23\x71\x09\x64\x55\xb5\xd2\xc7\x2b\x50\x59\x07\x6f\x1a\x37\xb9\xdb\xad\xcd\xf3\xf7\x36\x5c\x34\xe8\xf9\x8d\x59\xe5\x5f\xc7\xed\xba\xcf\x98\x9a\x67\x19\x9f\xe4\x45\xc1\x8e\xee\xf2\x48\x37\x2d\x14\x20\x8d\x90\x62\x19\x38\x9e\xe9\x32\x20\x22\x02\x16\x8b\xa2\x07\x48\xcf\xa6\x79\x9a\x42\x96\xa3\xf9\x20\x90\x45\x8e\x4f\xb0\x62\x7c\x8b\x5d\xe4\xf6\xc2\xee\xd5\xbf\x2c\xfc\xcd\xb1\x94\xb4\xd7\xde\x9f\x93\x37\x73\xd1\x1d\xcd\xcb\x1d\x7d\x7c\xb2\x6a\x91\x11\x8d\x66\xa4\x5c\x4c\xae\x3f\x2b\xb1\xc7\xf8\xa2\x6b\x42\xa4\x63\x1b\x72\xb4\xc0\x89\x9a\x62\x93\x3e\x65\x09\xb1\x48\xf1\xa6\x13\xeb\x14\xc1\xb0\x32\x02\xa1\x41\xb0\x8c\x1e\x93\x30\x9d\xcc\x34\xb9\xef\x82\xa5\x29\xfd\xdb\x36\xa9\xbd\x3c\xf3\x1f\x4f\xd4\xaf\x2a\xc3\xfc\xaf\x35\xeb\xfb\x57\xf9\xf0\xe2\xda\xad\x77\xe4\x89\xb8\xd1\x0b\x41\xdb\x79\x20\xf8\xb2\x56\xbb\x43\xf7\x1f\xad\xfa\xa0\xe4\xb7\x99\x72\xe7\x72\xcd\xd5\x6b\xd7\x8f\xfd\xf8\xe1\xfb\x67\x1f\x4f\xf8\xad\x6f\xff\xe4\xca\x24\x71\x9c\xcc\x2a\x0a\x0f\xa1\x42\x90\xaa\x6d\xc8\x1e\x69\x7b\x02\xa7\x63\x36\x0c\x09\x1b\x7a\x1e\x14\x24\x89\xf2\x5c\x5e\xf6\x18\xcd\x95\x48\x5b\x55\x12\xed\xc8\x50\x7f\xac\xbe\xaf\x21\xf5\x59\x8b\x15\x7f\xd4\xfa\xb0\xf7\x47\x25\x0f\xa0\xd7\xde\xda\x3e\x87\x2a\x52\xbe\xe7\xdd\x63\xb3\x3e\xf6\x0a\x66\x7c\xf5\x7b\xe2\x59\x70\x04\x5d\x43\xe4\x28\xd9\x8d\xb4\xd8\x33\x58\x84\x42\x0e\x1a\x06\xad\x72\xb1\xe5\x73\xb2\xc2\xba\xc8\x14\x55\x92\x57\x30\x64\x38\x41\x23\x22\x92\x4b\x8c\xf3\x2e\x7e\xeb\x8d\x54\x77\x30\x27\x47\xc5\xc3\xf9\x33\xc6\x56\xcf\xd3\xbc\xed\x4f\x2d\x0a\xfc\x32\xac\x32\x13\xac\x9d\xba\xb1\xd3\xa8\x8d\x49\xc6\x13\x0b\x7a\x28\x52\xba\x13\x87\x2c\x8f\x6d\x21\xf4\x45\x4d\x01\x31\x1b\x30\x16\x21\x4a\x6e\xa0\x70\x84\xa1\x62\x26\x60\x14\x9b\xd6\x29\x08\xd5\x90\xe0\x5f\x3e\xe9\xa9\x57\x26\xe5\x39\x38\xef\xb2\xf6\xcd\x8e\x41\xb3\xd2\x2a\x68\x47\x7a\x56\x1c\x74\xf9\x83\x35\x05\xe7\x77\x78\x33\x95\x7d\xbe\xf3\xbe\x9e\x5c\x93\x63\xc6\x31\x90\xe1\xe3\x98\x97\x59\x3b\x32\x08\xc5\xe5\x4c\x8d\x30\x74\xd2\xf2\x54\x09\xf8\xa1\x41\x4a\xba\xa3\xc8\xba\x1b\xf3\x0c\xe9\x68\x0c\x26\xd3\x01\x80\x8e\x3e\xfd\x53\xad\xdc\x3f\x17\x1f\xf9\x63\xd3\x0f\x3e\x3e\xff\xeb\xd4\x0d\xd9\x4f\x64\x99\x78\x66\x39\x5d\xee\x52\xa3\x2a\x07\xd7\xb4\xf5\xda\x26\x19\x49\x19\x69\x84\x14\x7a\xa4\x8a\xc3\x98\x02\xac\xab\x6a\xd0\xf0\x65\xcf\x30\x6d\x5a\x0a\x59\xc9\x71\xb4\x88\x90\x4d\x49\x54\x15\x00\x7c\x1c\xea\xd6\x7f\xc1\xa0\x5f\xc8\xea\x75\x1e\xdc\x9f\x74\x4c\x10\xa6\x57\xda\xae\x8f\x3f\x5c\x16\x57\xaa\xd3\x63\xc4\xe6\x1e\xdc\x8d\xbb\xab\xae\xd2\x64\xd3\xdf\x3a\x66\xdc\xaf\x13\xf3\xa4\xb0\x1c\x51\x90\xc3\xae\x45\x6a\x9a\x88\x15\x16\x33\x9c\x8d\x7c\x96\x8a\x75\x8a\x77\x11\x63\x2b\x96\xab\x99\x48\xa6\x22\x47\x37\x74\x1d\x41\x2f\x41\xef\xe1\xa4\x17\xbf\x65\x34\x59\xda\x08\x2e\xb5\x57\x9c\x5c\xb6\xf9\xe4\x2f\x77\x8f\xa4\xfd\x34\xf0\xc1\xc2\x63\xad\xd4\x49\xcb\xc7\x8e\x3e\x95\x64\x14\x25\xc4\x1a\x47\xf8\x0e\x6b\x22\xd5\xb4\x35\x5d\x32\x25\x80\x68\xdb\x31\x05\xc8\xb1\x2e\x15\x49\xa2\x4c\xd9\x18\x3a\x94\xad\xb8\x9e\x8c\x05\xdd\x4f\xd0\x4f\x7b\xbe\x91\x7e\xfa\x3e\xff\xa4\x58\xf7\x66\x57\xc9\x8f\x7b\x36\x1f\xb7\xa5\x7d\xbe\x13\x0d\xb6\x9c\x98\xfe\xe7\xc3\xb9\xf3\x1e\x3c\xdc\x9b\xdc\xee\x3d\x4b\x04\x90\x77\x81\xa6\x2b\x66\x08\x3c\x5b\x84\x3a\x69\x1b\x5c\x24\x6a\xbc\x88\x75\x96\x45\x96\xa3\xb3\x2c\xeb\x23\x0e\x3a\xc0\x96\x05\xc9\xa6\x49\x36\x9d\xac\xbe\x0d\xdc\xd8\x74\xee\xee\x6f\x42\xcd\x27\x77\x56\x1c\xfe\xf5\xe9\x84\x93\xcc\x85\xd9\xa9\x35\x8e\xb6\xae\xda\xb6\xf0\x9f\x13\x76\xc1\xdd\x2f\x44\xc0\x1b\x1b\x3f\x3f\xd7\xfc\xd1\xc4\xb9\x7d\x14\x6d\xdb\x94\xaa\x29\x4c\xa7\x79\x67\xde\xeb\xfa\x66\xd3\x42\xda\x9b\x03\x1e\x1f\x5f\xfa\xb0\x5a\x72\x7f\x24\x8d\x3d\x99\x02\xc0\x0d\x65\x07\xba\x8a\xaf\x32\xa4\xec\x33\x06\x65\xf0\x5a\x10\x01\x4b\x72\x91\x4c\x39\x9a\xe8\x28\x5c\x1c\x86\x14\x29\x38\x40\x4d\xef\xb1\xf3\x53\xcd\xfc\xd9\xbf\xaf\x21\x6f\x5e\xf7\x45\x30\x6c\x6e\x9d\xf5\x0d\xb9\x36\x02\xc2\x39\x66\xd7\xd9\xff\x53\x3b\xfd\xbb\x83\x6f\xbc\x58\x26\x97\xdb\x98\x56\xed\xd3\x2a\x77\x6b\x9f\xab\xcd\xb6\xdd\x38\x7d\xc5\x9c\xc6\x2d\xef\x57\xd9\x4d\x2d\xfd\xfd\x64\xcf\x21\xb9\x7f\xe8\xf5\x8c\x4d\x32\x0b\x85\xe3\x59\x41\x8e\x14\xc2\x85\x34\x70\x28\x0c\x58\x45\x96\x63\x5e\x61\x0c\x33\x22\x74\xd1\x8e\x6c\xd7\x8e\x4d\xa4\x44\xae\xa4\x93\x61\xe0\x99\x31\x4e\x7c\x0f\xdc\x1a\x9b\x79\xf6\x9c\x32\xa9\xab\xe6\x36\x90\x8e\x75\x5e\x5f\x2f\x3b\x31\xb8\xdf\x9d\x3c\x79\x3e\xc7\x63\x4e\x6d\xed\xda\xdc\xdb\x55\x31\xc9\xba\x43\x14\x4d\x81\xd8\xb7\xf4\x58\x30\x00\xc7\xb2\x3c\xb2\x90\xef\x12\xd8\x62\x3d\x8f\x54\x62\x96\x57\x7d\xcf\xc4\x34\x2d\x46\x32\xc7\x2a\xba\x1d\x6b\x42\x02\x92\x3b\x55\xf3\x8f\x56\x7b\x3f\xfd\xa1\x4a\x8e\xd3\x4b\xd6\xec\xcc\xb5\xf5\xb9\xf9\xf5\x5a\xf1\xfb\x69\x25\xed\x72\x1d\x1f\x2d\x1a\xff\xa4\x51\x72\x33\x93\x1c\xb0\x16\x13\x4b\x58\x80\x84\x24\x93\x9a\x21\xa9\x12\xb6\x34\x91\x89\xa1\x07\x45\x5e\x44\x31\x49\x33\x84\x0e\x30\xeb\xf9\x3a\x13\xba\x96\xa8\xa6\xb3\x15\xbf\xd4\xb9\xc6\xa0\xd1\x7b\xd6\x84\x3d\xa3\xfd\x4d\x7c\xb7\x92\xce\x98\x5f\x5b\xf6\x78\xd8\x60\x5e\x3d\x79\x71\xf5\x61\xcb\x3e\xef\x5f\x3e\xb9\xd9\xc9\x90\x68\xec\x39\xb4\xcb\x48\x58\x40\x7e\x80\xa1\x4c\xf1\x61\x04\x2c\x6c\xca\x9e\x14\x12\x86\x6d\x89\xbe\xeb\x5a\xc0\x46\xb4\x6f\xd1\x3a\xe3\x43\xe6\xe5\xec\xd4\x77\xc5\xd1\x9f\x52\xcb\x52\x0d\xae\x34\x5d\xac\x5f\xfe\xa9\x7f\xc3\x3a\xbd\xf3\x1e\x69\xb9\xec\xd7\x22\x8b\xd7\x4c\x5f\x95\xb9\xfa\xad\xfb\xc9\x3d\x69\x01\xeb\x94\x22\x6b\x66\x64\xeb\x04\x2d\x12\x2e\x52\x5c\xdd\xc6\x44\xac\x04\xb2\xad\xd3\x2e\x2d\x42\x05\x32\x9e\x11\x0b\x31\x4b\x45\x0e\x63\xd1\x2e\x9b\xb8\xbd\x98\x72\x74\xfd\xdc\xdf\xdf\x2f\x3d\x65\xe8\x92\xd6\xb3\x5b\x3c\xba\xdc\x89\x1d\xd5\xe9\xc0\xc4\x65\xb3\xf6\xa5\x96\xec\x3c\x66\x9c\x37\x27\xb9\x1b\xf0\x58\x22\xb6\x68\xd2\xf3\x78\x5a\x33\x60\x2c\x42\x24\x3b\x1c\x89\x6d\x59\x0a\x05\x8e\xb7\x44\x41\x8f\x39\xa4\xbb\x32\x8b\x08\xc7\xf7\xed\x18\xd9\x01\x14\x13\x17\x0a\xcd\xc8\x57\x2a\x54\x5c\x7b\x28\xcf\xa7\x8f\xa6\xd4\x6d\xf0\x6d\x81\xed\xef\xad\xfb\x7e\xda\xfa\xc1\xa0\xd5\xe0\x89\xd1\x5f\xdb\x98\x9c\xbf\x24\x37\x14\x23\x16\x69\x00\x78\xaa\x69\x03\x60\x46\xb6\xcc\x72\x34\xed\x04\x11\x87\x7c\x84\x68\xca\x88\x05\x23\x66\x82\x58\xb0\x38\xec\x20\x4c\x45\x9e\xf5\x6f\x8d\xd0\x17\xd0\xcf\xff\xd4\xa5\x4b\x4d\x99\x94\x29\x53\xe9\x17\xd1\xcf\xe2\x86\xe3\xc6\xe2\x4b\xcf\x8e\x75\xcb\x7e\x7a\x74\x4a\xa3\x43\x2d\x37\xce\xc8\xb1\x8d\x7a\x77\xe1\xac\x8a\x75\x0e\xbb\x59\x56\xef\x9f\x9b\xdc\x5f\x19\xd3\x31\x19\x92\x14\x70\x3c\x6c\x70\x02\xe5\x23\x4a\x13\x01\x4b\x7a\xbc\xc8\x01\x5e\xc5\xa1\x6d\x73\xc8\x20\x02\x5f\x90\x05\x02\x2a\xaa\xa3\xa5\xa7\x14\x3f\xad\xef\x98\xb3\x6f\xfe\xd8\x64\x49\x89\x82\xd5\x07\x1d\x69\x31\xfb\xb7\x1c\xf2\xdc\xd4\x56\xaf\x9a\x8b\x06\x14\xf9\xbe\xc2\xcf\xb5\x4a\x95\x4c\xae\x4f\x91\x98\x76\x45\x25\x54\x7d\x3a\xb4\xad\xd8\xa3\x1c\x5f\xb2\x59\x4c\xc4\x9e\x85\x5c\x0c\x43\x2b\x72\x2d\x17\x1a\x34\xe0\x19\x4a\x8b\x20\xf0\x18\x3e\x4e\xec\x53\xfb\x7e\x7c\x72\x77\x75\xdd\xf2\x77\xc6\x7b\x23\xcb\x7d\x8f\x2e\x1f\x2d\x7a\xba\xf1\xe9\xa9\xbf\xe6\xb9\xff\xde\x59\xe9\xcb\x62\x9f\x1e\x03\xc9\x2d\x3e\x5d\xcb\x95\x1d\x56\xa3\xf8\x98\x10\x4c\x49\x37\x09\x96\xd7\x0d\x9a\x27\x22\x8e\xd2\x61\x8c\x7c\x57\xd2\x3c\x86\x8c\xa9\x98\x8f\x1c\xc9\x17\x43\x23\x76\x13\xa3\x03\x0a\x0f\xca\x69\x9c\xba\xb3\xe1\x17\x2b\x8f\xfc\x6a\xb9\xa7\x55\x9b\x2e\x7a\x40\x57\x89\x37\x7e\xf1\x4d\xe1\x03\xe5\x1f\x5c\x68\x56\x73\x73\x72\x2b\x06\x5d\x37\xbd\xd0\xf7\xcd\xd0\x47\x21\x92\x75\x68\xf3\x86\x6c\x53\x76\x48\x3a\x3c\x09\x22\x82\xc5\x40\x88\x08\x9d\x88\x69\x5b\x92\x69\x6c\x6a\xb2\x91\x8e\x74\xf4\xca\xc9\xb9\x57\xb6\x42\x97\x47\x54\x7f\x3a\x7c\xf2\x88\x37\x1b\xe7\x78\xd5\xd9\xdf\x63\x76\xe1\x01\xb5\x7e\xbd\xf5\x61\x81\xb6\x7a\xa7\x24\x63\xcd\x2d\x4f\x25\x3c\xcb\x0d\x3d\x4f\xc4\xa6\xe8\x05\x2e\x15\x4a\x86\x21\x20\x9d\x60\x3c\xa0\x01\x07\xb3\xac\x09\x10\xad\x58\x2e\xc7\x61\xda\xa5\x38\xf8\x77\xcd\xfc\x1f\xf4\xf3\x3f\xf5\x73\x53\x53\x06\xbc\x5b\xf2\x7f\x56\x54\x64\xff\x60\xee\xd0\x67\x0f\xb6\x2f\xe5\x4f\x5d\x5a\x7c\xf2\x10\x7a\xf3\xc0\xde\x2c\xe5\xc7\x1d\xa9\xb9\x72\xf7\xab\x83\xb3\xf2\xdf\x9e\xc9\xb8\xf4\x49\x62\xa0\x8c\xa8\x87\x9c\x07\xbc\xd0\xb3\x6d\x0d\xb1\x24\x66\x64\x3b\xc2\x50\xb4\x6d\x5f\xe0\x35\xd3\xc5\x2e\xef\xa9\xb2\x24\x20\x85\x96\x5d\xdb\xd5\x03\x8e\x4e\x1c\xc1\xab\xbb\xe7\xf9\xa6\x60\xaf\x2f\xe7\x9d\x4c\x7b\xfb\x7c\xbe\x6e\x0b\x4e\x9f\xfe\xa9\xc6\xd9\x25\x07\x17\xee\x5f\x7b\xa5\x6f\x9e\x45\x3d\xbf\x0a\x93\x1b\xc1\xb4\x1c\x44\x94\x82\x02\x10\x22\x83\x51\x24\x3b\x04\x21\x21\xc6\x21\x49\xda\x98\x8d\x74\x12\x5a\x8a\xec\x39\x9a\x47\x38\x34\x21\x53\x2c\xd0\x1c\x41\x4d\x1c\xc1\x13\x4f\xa5\x3d\x5a\xd1\x37\x8b\x96\xa3\xe7\xd2\xb9\xdf\x4e\x2a\xdc\x26\x8d\x1c\xe8\x76\x99\x79\xed\x4c\xff\x4b\xf3\xcb\xce\xa9\x99\x76\x23\xc9\x72\x85\x52\x18\xf2\xb2\x85\x42\x3b\x24\x0d\xde\x82\x44\xc4\x32\x1c\xa4\x00\x45\x23\x37\x88\x6c\x48\x6a\x08\x90\x12\xc3\xc1\x88\x51\x78\x60\x28\x0a\x4c\x87\xbf\xc0\x2f\xfa\x74\xff\xf8\x35\x95\x96\xd4\x6a\xff\xed\xae\x7b\xda\xda\x13\xd5\x9b\x35\x69\x9d\x65\xf4\xde\x53\xf0\x28\xd9\x34\xdf\xc5\x36\x19\xc7\x9a\x27\xde\x42\x2b\x68\xa2\x6d\x89\x11\x22\x03\x97\x61\x19\x40\xb3\x2c\x04\x2a\x49\x52\x94\x1b\xb0\x30\x86\xac\x43\x3a\xa6\x20\x48\x04\xd0\x61\xc0\xb9\x58\xf6\x8c\x97\x90\x6e\xff\xd4\x42\x4f\x6d\x5c\x32\xdf\x6b\x2f\x46\x42\xff\xbb\x6d\x8b\x7f\xf6\xe5\xc1\x0f\xe7\x97\xa6\xeb\x68\xf1\x36\xfb\x93\xda\xc4\x1f\xcb\x6a\xbe\x95\x27\xec\x7c\x74\xf3\x7b\x9f\x6f\xcc\x38\xee\x24\xf1\xb2\x16\x5e\xb2\x19\xc4\x52\x40\x37\x5d\x5e\x10\x00\xd4\x20\xc3\x2a\x04\x29\x43\xcb\x02\xaa\xe4\x01\x95\x16\x78\x5f\x75\x3d\xde\x71\x48\x86\x65\x2d\x98\x0e\xa0\xde\xfc\xb3\x46\xc7\xf1\xc2\x23\xe2\xda\xb3\x85\x35\xbf\x38\xf3\xf9\x83\x26\x45\xcb\xb5\x38\xb1\x7c\xcf\xf6\x4f\x97\xb3\x23\xb6\xef\x5e\x57\x25\xd9\xb8\x13\x95\x50\x31\x11\x59\x9c\x8c\x0c\x33\xe6\x04\x13\xb0\xba\x03\x3c\x37\xe4\x78\x02\xd8\x7a\x6c\x44\x7c\x6c\xfa\xbc\xe1\xf1\x0c\xf6\x19\xd9\xd4\xd2\xa1\x2f\xf4\x2a\x30\xac\x7d\xb5\xc7\x9b\xde\xfe\xa2\xdb\xc4\xa2\xcf\xbb\x6e\xdd\x74\x2b\xcf\x6b\x79\x73\xec\xaa\x3c\x74\xef\xb0\xfc\xfd\xb3\x8d\xae\x96\x71\xd5\xd8\x84\xa7\x4d\xe9\x31\x6b\x0a\x2e\xa3\x3a\x28\xf6\x65\xdd\x11\x11\x15\x90\x3e\x63\xb9\x91\x11\x98\x82\xeb\x72\xaa\x83\xb9\x30\x46\xbc\x60\x8b\x16\x6b\x00\xf1\xdf\x7a\x5c\x2f\x9f\x76\xfe\x71\x47\x07\x46\x5f\x7f\x24\xf5\x9d\xf3\xfe\xce\xd5\x9b\x57\x7f\xea\x7c\x58\x6d\x66\x34\xf2\x1d\xeb\xad\x0d\xe6\x4f\x85\x6e\xdd\xc8\xb8\x76\x45\xc2\xd3\xd6\x14\x9d\x42\x21\xe9\x52\x92\x66\x9a\x0e\xc3\x5a\x3c\xb4\x98\xc0\x35\x29\x91\x09\xf5\x00\x2a\x4e\xec\x60\x4a\xf3\x74\x4a\xd3\x54\xc2\xd1\x29\x1d\xfe\x2d\x48\xfe\x9f\x4b\xe1\x9f\xc6\x43\xa9\x29\xd9\x0a\xe7\xfb\x9f\x4b\xa1\x10\x75\xb9\x41\xf7\x99\x0d\x0a\xcd\x6d\x59\xda\x9f\x74\x65\xf9\x99\x3c\x23\x2a\x7e\xfa\xa4\xde\xfd\xdc\x4d\x17\xbe\xde\xb3\x60\x5d\x7b\x71\xb2\xd3\x14\x4b\x9b\x14\xa5\x13\xc8\x0d\x7d\xd7\x27\x24\x4d\x03\x01\xad\xc0\x30\xf0\x10\x61\x63\x39\x44\x96\xc7\xd2\xb4\xe5\x49\x02\x27\x43\xa0\x80\xd8\x4d\x9c\xa6\x4e\x53\xcd\x0a\xed\xbb\x59\xae\xf7\xf5\x83\x47\xef\x0c\xeb\xd0\xb2\x6a\xe3\xa1\x3b\x0f\xec\x28\x2a\xdf\x9d\x38\xac\x46\xf1\x2c\x79\xda\x65\x1c\xab\x9a\x5e\xcd\xcd\x43\x42\x66\x2c\x5b\x75\x78\x57\xd1\x30\xab\x70\x36\xe3\xd0\x81\xec\x92\x90\x90\x5c\x8d\x87\x1e\xf6\x1c\x3d\xd2\x69\x4b\xc0\x2a\x03\x70\x3a\xfc\x85\x9e\xfb\x9a\xef\xe7\xda\xcc\xf9\xee\x8c\xd3\xa4\xb2\x5e\xb9\xf4\x3b\x7e\xc7\x77\xf3\xb4\x39\x91\x17\xcd\xf9\xa6\xe7\xc1\x42\xe5\x3b\xb6\x4b\x32\xfc\x19\x05\x18\xea\xbc\xed\x01\xc8\x93\x81\xae\xc7\xb6\x6c\x62\x55\x10\x78\x23\x42\x28\xa0\x0c\x82\x65\x64\xcf\x10\xb4\x28\x10\x55\xe4\x84\xae\x0f\xfd\xc4\x66\x93\x87\xab\x2d\x3c\x6f\xf6\x20\x6f\x8f\xb9\x77\xc5\xa6\x6a\x5d\xbb\xe3\xda\x4d\x9b\xee\xc9\x36\x6f\x87\x52\xe8\x95\x49\xf0\x52\xb1\x24\x6b\xf3\xdb\x1c\xd6\x28\xc9\x06\x44\x1c\xe2\xc8\x91\x3c\xc5\xb2\x3c\x53\x53\x01\x4b\x73\x06\x03\x62\xd3\x17\xbc\x48\x75\x1c\x01\xb0\xaa\xe0\xf8\x9a\xc3\xff\xfd\x04\xfe\xcf\x0b\xe7\x9f\xa6\x17\xa9\x29\x99\xf3\x95\x6f\xf0\xe2\x0b\x67\x48\xfc\x6e\xb9\xb5\xad\x52\xb1\x7f\xad\x48\xfe\x8f\x1d\xad\xf8\xb8\x31\xde\xf2\x4a\xde\x8e\x82\x55\x66\x3c\x1b\xb9\x74\xd1\xf0\xd3\xc9\xad\x02\x5d\x13\x52\x02\xc3\x39\x1e\x42\x9c\x04\x91\x0d\x61\x24\x0b\x14\x6f\xb0\x8a\xe7\xf2\x90\xe4\x25\x51\x54\x2d\x4b\xa1\x79\x51\x94\x45\x9b\xf6\x81\x1a\x24\xfe\x38\x1d\xb3\x6f\xdb\x56\x76\x58\x76\x3b\x57\xc1\x06\x97\x9a\xd5\xcb\x71\xe5\xa7\x52\x7d\xc9\xe5\x8d\x37\x07\xd3\x87\x3c\xd8\xbf\xb8\xd8\xed\x24\xdf\xd8\x9a\xe8\x52\x8e\xae\x86\x31\x17\xd2\x74\x18\xa9\x16\xaf\x46\x8a\xab\x31\x3c\xf2\x68\x8f\x71\x7d\x18\x98\x86\x49\x79\x8a\x1c\x21\x53\xb1\x34\xc0\xab\x20\xf1\xad\xd0\xa9\x22\x73\xb9\xc3\xa1\x6a\x27\xcf\x9a\xc7\x46\x6f\xa3\x26\x4c\xeb\x3b\xeb\xd7\x11\xdb\x8f\x4f\x2f\xbd\x74\x4c\x8f\x89\xb7\xfb\x75\xce\x78\x28\x24\xbc\x15\x62\x55\x31\x22\x8f\x90\x5c\x8f\x67\x25\x51\xe4\x20\x83\x65\x1a\x32\x94\x0d\x34\xcd\x30\xb1\x09\x55\x8f\x86\xd0\xd4\x6d\x3f\xf6\x28\x5e\xf3\xac\xf4\xb6\xcc\x34\xfe\xec\xcd\xc2\x9b\x26\x0d\x5e\x7f\xef\xd8\xbb\xd1\xc4\xd7\xb9\xb6\xb5\x0e\xdf\x21\x6b\x64\x7e\xe7\xde\xf6\xf3\xdb\xe4\x42\xb0\x56\x8d\xe4\x86\x02\x8f\x7d\x46\xa4\x84\x00\x98\x86\x8f\x35\x0f\x31\x02\xab\x7a\x52\x44\x47\xb4\x2a\x7b\x31\x1b\x0b\x2a\x70\x18\xe4\x50\x81\xa7\xd0\xa1\xa0\x48\xbc\x97\x0e\xbf\x73\xfc\x13\x2e\xff\xf1\x87\x25\x85\x6a\x5d\x1f\x97\x2e\xd3\x6f\xf2\xda\x95\x0d\xad\xa3\x23\x96\xbd\xb2\xf5\xf8\x8c\xd2\x56\xa1\xb2\x45\x32\x3e\x85\x4c\x8c\xff\xd4\x59\xcc\x4b\x12\xa2\xfd\xd0\x8e\x09\x93\x91\x05\xc7\xd2\x69\xd9\xf0\x01\x8b\x79\x47\x76\x3c\xc1\xe4\x42\x53\x55\x90\x4a\x58\x48\x32\x05\x15\xf3\x2f\xbd\x70\xfe\xa9\x53\x9d\x9a\xf2\x4a\xa6\x2c\xff\xc3\xef\x7c\xd8\x78\x74\xe3\x23\xf3\xb5\xf5\xf7\xde\xf8\xec\xdd\xbb\x43\x47\x96\xab\xa8\x7d\xfa\xe6\x9b\x25\x3a\x74\x0d\x6f\x5d\x45\x99\x97\xbd\x32\x32\xc9\xad\xba\x50\xd4\x24\x4a\xf2\x3c\x13\x12\x81\xa0\xd3\x62\x00\x81\x82\xb5\x80\x94\x02\x4a\x09\x38\x9a\x12\x3d\xd6\xd7\x91\x08\x2c\x2e\x92\x5d\x41\xa5\x88\x74\x0a\xa4\x3f\x27\xf4\x1d\x34\xeb\x68\xd3\xc7\x1d\xe8\x87\x6d\x67\xe7\xaf\x73\xad\x81\x77\xea\x95\x0d\xcc\xd6\xb1\x37\x72\xfc\x38\x75\xe2\x90\x67\x19\x5f\x01\x94\x98\x82\x44\x21\x3d\x66\x59\x2d\x74\x23\x9d\xc0\x16\x19\xf9\xbe\xe5\x6a\x52\xe0\xf9\xb1\xa8\x69\x9a\xac\x7a\x31\x8e\x0c\x5f\xf2\x39\x2e\x88\x2d\x2f\x12\xdc\x74\x34\x3b\x2e\x95\x08\x0b\xbf\xdb\x96\x3e\x18\x0d\x32\x47\x8d\xad\x7a\xf8\x5e\xe6\xac\x3f\x44\xd7\xaf\xd5\x2b\xd8\xfb\x48\x81\x12\xfe\xa9\xee\xfd\x93\xfc\x6a\xb6\x44\xc2\xd2\xb8\x58\x8e\x62\x51\x15\x35\x8f\x20\x02\x0f\x7a\xaa\xa4\x0b\x42\x64\xdb\xaa\xeb\x6b\x9e\x1c\x89\x7e\x44\xf0\x90\x64\x1d\x91\xfe\xbf\x18\xb5\x97\xf3\x65\xd4\xf9\xbd\x4d\x9b\xaf\xfc\xb5\xbd\x69\xa6\x5a\xb7\xa8\x3f\x3f\xce\xf3\x6c\x77\xd5\x72\xb3\x8b\xbd\xb2\xed\x34\x37\x91\xfb\x6d\x5b\x99\xeb\x49\x56\xca\x72\x38\x31\x14\x39\x8a\x91\x80\x4d\x8b\x81\x85\x63\xdd\xa5\x90\xa0\x10\xd0\xa3\x4c\x51\xf4\x05\x8b\x57\x48\x1e\x88\x1a\x8d\x29\x4f\x77\x42\x5f\x7f\x99\xd5\xf6\x4f\xf3\x8c\xd4\xc6\x85\x33\x0d\x7a\x31\x12\xf6\x1d\xb9\x38\xb2\xa0\x3c\xac\xc1\xc5\x34\xf7\xc1\xa1\x13\x4f\x86\x94\x2a\x93\x26\xe2\xfe\xf6\xcc\xc7\x6f\x74\xfa\xe3\x58\x5d\x35\xc9\x32\x30\x0c\x0e\x48\x91\x30\x19\x15\x21\x95\x66\x24\xec\xd1\x82\xc7\x71\x94\xcf\x90\x24\xe6\x5d\xdb\x30\x7d\x4e\xf2\x5c\x17\x04\x7c\xa4\x2a\x12\x6f\xb8\x46\x3a\x2e\xb5\x3e\x6d\xce\xb4\xa3\x67\xb3\xef\xec\x1c\x5c\xbe\x51\xf8\x70\xb3\x1c\xed\xee\xf7\x59\x9d\x63\xf6\x8e\x16\x3f\x6d\xe9\xf5\xca\xe5\x8f\x8f\xa7\x25\xd7\x6c\xd1\xf6\x74\x95\xd3\x5c\x32\x66\x6c\x31\x0c\x22\x4d\xd0\x79\xd1\x37\x54\x32\x92\x24\x5e\x84\x92\x26\xf0\x9a\x60\x69\x04\xd6\x55\x1b\x62\xca\x09\x88\x74\xda\x5e\xc2\x89\x32\xdf\x73\x2d\x97\x4c\x7a\x7c\xb4\x46\xcb\x47\x79\xf8\x82\xb7\xdf\xf8\x25\xcb\x4a\x66\xf1\x6c\xff\xf7\xdc\xd7\x0f\x8c\xa2\x32\xde\x3f\x4a\x4c\x0f\x0b\x74\x4b\xa0\x24\x22\x10\x48\xd2\x57\x02\x87\x56\x03\x18\x1b\x1a\x66\x3c\x9b\x21\x10\xf4\x05\x56\x75\x74\xc3\x37\xc8\x30\x52\xa0\x1c\xc5\x98\x4f\xa7\x71\xbd\xfd\x6d\x2a\xeb\xf0\x3f\xa9\x95\x05\x2f\x4c\x7e\x37\xf7\x5d\x6b\x87\x6f\xf4\x5c\x5c\xe9\x56\x13\x2d\xf3\x38\x1b\x15\x7e\xef\x87\x8c\xe3\x96\x12\xab\x8d\x90\x32\xa9\x52\x1c\x52\x02\x82\x25\x39\x6c\x09\xba\x8e\x74\x51\x8b\x39\xc3\x8b\xc4\x90\xf0\x23\xce\x34\x3c\x8d\xb0\x91\x1c\xd1\xbc\x4d\x09\x8a\x6a\xfd\xff\x66\x8f\x6c\xf0\x6f\x8b\xf5\x72\x8d\x8b\xbd\xf1\xf1\x3b\x7e\xf3\x41\x7d\x9e\xac\x1e\xfa\xfe\xa4\xec\x3f\xe5\x2f\xbe\x7a\xd7\x95\x16\x33\x7e\x78\xd8\xe5\x58\xbf\x5a\xd7\x53\x53\x9e\x3f\x3f\xff\x7c\x6a\x89\x17\xe1\x8c\xdb\x3f\xd5\xd6\x3d\xe9\x53\x45\x7b\x54\x42\xd8\xed\x73\xed\x2f\xb4\x9b\x73\xc2\xda\xd3\x7b\x6d\xe7\x6d\xc1\x84\x4f\x8c\x05\x05\x92\xfb\x33\x43\xd7\xb0\x63\x0a\xf2\x31\x42\xb2\x46\xf8\x88\xe1\x29\x02\x6b\x12\x56\x58\x4b\x91\x22\x27\xa6\x68\x13\x19\x14\xa2\xb0\x6d\x99\xbc\xc4\xab\x66\x2c\xbd\x3c\xc0\xa9\x3d\x71\xdf\xec\x86\xcf\xdf\x1e\x55\xf4\x17\x68\x15\xf8\xbe\xcb\xb2\x6c\x63\x7e\xe8\x74\x62\x69\xff\xdd\x59\xbe\x38\x3c\xa6\x0f\x77\xa0\x6e\x72\x53\xab\xc2\x10\x71\x48\x62\x53\xfd\xd7\x33\xc1\x11\x61\xcc\x59\xaa\xc4\x00\xd6\x90\x28\x80\x04\x9d\x65\x91\x1c\x93\xba\xa3\x23\x9a\xe4\x88\x20\x64\x54\x5e\xca\x94\x78\xd7\xc5\x86\x23\x5b\x4e\x6f\xea\xf9\xd7\xf5\x51\x2d\xa8\xba\x95\x56\x18\x05\xa6\x56\x3d\x7d\xdb\xee\x32\x7d\xc7\xaa\xcb\x39\xce\x8d\xde\x7f\xe5\xce\x0b\xdf\x25\xff\x6f\x2d\xbf\x38\xfa\x76\xcb\x3b\x1f\x33\xbf\x6f\x4e\xe1\x5e\xab\x82\x16\x34\xa8\x9b\x72\x83\xdf\xf5\xf6\xba\xcf\x8a\x2d\x67\x4f\xdd\x49\x72\x3b\x23\x64\x51\xac\xd2\x51\x1c\x12\x92\x2f\x3a\x9a\xa4\x07\x8c\x6b\xea\x06\x12\x22\x41\xe2\xb8\x48\xb5\x74\xdb\x70\x2c\x83\x36\x29\xcf\xf4\x6d\x4e\x70\x13\xac\x1a\x5a\x63\x0f\x29\x41\xe3\x9c\xb7\x0e\xda\x55\x8a\xee\x78\x56\xe6\xfa\x27\x3f\xe6\x9b\xd7\xe4\x95\x4f\xb2\xa4\xac\xd9\xf7\x6a\x21\xb7\x5a\xc6\xa5\xc5\x13\xde\xd4\xac\xea\xfa\x21\xa4\xa2\x00\x08\x82\x4d\x13\x26\x1d\x6b\x42\x84\x34\x42\x34\x44\x0a\x30\x34\xd2\x35\x81\x86\x40\x12\x68\xca\xa0\x69\x87\x37\x1c\x1e\x24\xce\x4f\x83\xa5\x5f\x97\x8f\x57\xea\x3c\xd8\xb7\x66\x7d\x8e\x4f\xb5\xea\x37\x5f\xeb\xb0\x7e\xd8\xad\xf9\xcd\x2f\x56\xfb\xe1\xd1\x5f\x93\x2a\x37\xe6\x93\x7c\x1b\x44\xc8\x24\x3d\xd1\x27\x59\x8e\xd2\x59\x4f\x72\x63\x81\xf5\x81\x25\x46\x8c\x10\x58\xb4\x63\xa8\xa2\x60\xd3\x24\xb0\x70\x08\xbc\x30\x72\x54\xc5\xb7\x12\x43\x59\xe6\xd4\x3d\x51\x49\x8a\x0e\x5e\xac\x36\xd2\xee\x33\xf4\x58\x77\x8f\xaf\xd8\x2a\x67\xd3\x89\xbb\x1b\x92\x79\xbf\x7a\x34\xe7\x02\x9f\xf1\x0d\x49\x09\xa3\x00\xf8\x4c\x00\x74\x06\x2a\x58\x36\x54\xcf\x56\x2d\x22\x16\x24\x5a\xe4\x75\x5f\xe0\x18\x12\x87\xa1\xe4\x61\x2c\xfb\x56\xa4\xdb\x64\x40\x02\x2f\x26\x95\x97\x67\xdc\x5f\x67\x29\x3a\xa8\x17\x1c\xfd\x5d\x0e\xa2\xef\xca\xb9\xc5\x7f\x2d\x36\xf0\xd2\xc5\x9a\x27\xbb\x97\xec\xbb\xaa\xd5\x80\x7c\x7b\x27\x1e\x9c\x9e\x5c\x93\x19\x4d\x03\xb1\x82\xb1\xc3\x00\x35\xb2\x6d\x0b\x86\xb2\x2a\x45\xbe\xc2\xfa\xba\xef\x02\x31\x66\x38\x14\x7a\x06\xa7\x73\xae\x0e\x7d\x19\x38\x91\x46\xbc\x6c\xf2\x9e\x6a\xbb\x0f\x8f\x5f\x37\x67\x5c\xa5\x86\x4b\xcf\x44\x5e\x83\x72\xbf\xd3\x13\x27\x09\x3b\xbb\xbe\x77\xa9\xe1\xc9\xb7\x73\x3f\xda\x3b\x3c\xc9\x42\x77\x88\x46\x30\x32\x8c\x90\x80\x86\xa2\x9b\xac\x8b\x1d\x32\x70\x1c\xde\x35\x48\x31\xe4\x3c\x88\x54\x1d\x45\x44\x44\x28\xae\xa7\xc6\xa4\x4a\x48\x5a\x3a\x0f\xb1\x3b\xdb\xfa\x4c\x39\xfe\xed\x77\xf6\x34\x7b\xc7\x95\x1b\xeb\x3e\x6a\xdd\x61\x6e\xbb\x22\x75\xb7\x94\x1b\x79\xb9\x5d\xc9\xe1\x7d\xae\x15\x98\x98\xe4\x87\x18\x32\xe5\x00\x78\x81\xe8\x20\x8a\xc4\x5c\xa0\x42\x43\x8e\x4d\xa8\x4a\x96\x61\x87\x36\xab\x02\x3b\x44\x4e\xc4\xc4\xb1\x2a\xa3\xd8\x72\x04\x81\x77\x12\xe3\x36\xf2\xbc\xa7\x1c\xbf\x2c\x3c\xdf\x5e\x7e\x55\x4f\xa4\x2d\x38\x79\x97\x64\x9a\xbe\x3f\xfb\xca\xd5\xd3\x4f\x7f\xae\x66\xdf\x9d\xaf\x75\x4d\x6e\x07\xc8\x63\x24\xcd\xc4\x82\xa8\x22\x20\xd8\x6e\x2c\xb1\x94\x27\x3b\x14\x25\xd2\x28\xe4\x0c\x9d\xf0\x81\x68\x51\x86\x25\x62\x53\x21\x68\x47\x03\xa2\xaa\x26\x10\x57\x2e\xcc\x3d\x9d\x35\xd0\xda\x77\xae\x5e\x05\xe9\xdd\x0a\x7d\xc6\x8a\x1f\x82\x47\x7c\x8b\x03\xcb\xdb\x55\x06\x8f\xd8\xfe\xe3\xa6\x66\x7c\xbe\x9d\x58\xc0\x91\x94\x35\x04\x11\x89\x04\x8a\xa1\x1d\xe8\x20\x48\x39\x4c\x64\x62\x55\xb5\xb0\x63\x43\xc5\x35\x88\xd0\xb2\x75\xd9\x16\x03\x82\x67\x23\x4e\x7c\x41\x11\xf7\xbf\x2f\xa3\x55\xeb\x8a\x75\xfe\xf1\x33\x78\x63\x6b\xf6\x5e\x6d\xf7\x8c\xbf\xb9\xae\x5a\xd5\x03\x15\x1e\xcc\xa8\x3d\xe5\xcb\xac\x03\xe6\xdd\xde\xe8\x6c\x7d\x21\xd7\xe4\x1e\xf6\xce\xa4\x0e\x07\x3e\xd9\xb5\xa2\xcd\xa0\x2a\xa9\xeb\x4f\xb4\x3a\xba\xe2\xdb\xa7\x69\xf1\x90\x29\xe5\xd5\x0f\xce\x7f\xf1\xc3\x7b\xc5\x93\x1b\xb8\x22\x34\xfc\x58\x14\x18\x96\x95\x89\x30\x24\x71\x88\x22\x4b\x94\x18\x13\x9a\xb1\x21\x72\x11\x67\x07\xb6\xed\x12\x2a\xe5\x39\x28\x32\x69\x83\xe2\x63\xfe\xe5\xef\x52\xf7\x34\xf5\xf1\xbd\x0d\xcd\x7e\xce\x36\xf9\xfb\x0f\xcd\x2f\x76\xde\xbc\xd5\xe0\xe6\x31\xae\xf2\xa4\x7d\x55\xf4\x8a\xda\xc0\x62\xf3\xa6\x26\xf7\x32\xf2\x64\x23\x74\x44\x86\x00\x36\xe3\x91\xae\xcc\xf0\x3a\x16\xa5\xd8\x72\x21\x1b\x78\xa6\x62\xb9\x36\x63\x8b\x9a\x42\x79\x02\xc5\x00\x59\xb4\xdc\x18\x8b\x2f\x23\xe5\xd7\x55\xda\x12\x14\x7c\x7b\xe6\x89\x2d\x95\xde\xdb\x53\xb9\x7d\xca\xde\x67\x79\x4f\xb9\x3f\xdc\xf9\xe6\xe4\x6a\x20\x8d\xae\xbd\xb5\x68\xc6\xeb\x9a\xc4\x1c\x65\x4f\x8e\x2d\x5b\x8b\x05\xc5\x8c\x38\xc2\x8e\x1d\xca\x0e\x1c\x42\x82\x3e\xf2\x34\xcd\x31\xd5\x58\x96\x18\x9d\x0c\x6c\x5b\x33\x59\x4a\xe6\x50\xc0\xa7\x93\x6b\xca\xec\x54\xf5\xfc\xc6\xba\x2f\x17\x08\xbd\xf3\xb7\xfc\x44\x38\xfd\xe0\xa2\x76\xa7\xfa\xc5\xb5\x27\xcf\xbf\xd9\x61\xfc\x57\x7f\xad\x68\x9d\xdc\x0a\x92\x76\xe5\x48\x94\x2c\xcb\xf1\x80\x08\x11\x4f\x0b\x50\x30\x85\x40\x76\x3c\x4d\x97\x04\x8d\x08\x2d\x19\xb8\x11\x19\xf8\x92\x2b\xaa\x71\xc0\x4b\x92\x6b\xff\x77\xae\xf9\xdb\xa7\x17\x5d\x29\xd5\x69\xd5\xd2\x27\x95\x87\x8d\x9f\xf4\xe9\x77\x39\xb2\xf9\x17\xda\x5c\x19\xd5\xfd\xeb\x33\xf3\x72\x96\xfa\x7c\xe5\xb2\xb4\xd4\xcb\xc9\x3d\x6d\x4f\x66\x48\x89\x72\xff\x55\xdd\x87\x86\x2d\xb3\x06\x8d\xd5\x80\xe3\xfe\x8f\x56\x9a\x6e\x87\x5c\x6c\x04\x2e\x08\x14\x96\x67\x69\x03\x18\x8e\x48\xfd\xd7\xb5\xff\x37\x4f\xb9\xd9\x77\xbd\x6f\xae\x18\x54\x62\xfd\x8c\xa9\x65\xcf\xe0\x1c\xdb\xe1\x57\x2d\xdd\x2e\x41\xee\x0f\x9b\x28\x97\x3b\x0f\x4d\xad\x97\x64\x78\x33\x09\x11\x09\x1d\xac\xf2\x1a\xe5\x60\xcf\x34\x48\xec\x79\x5e\xa0\x02\x09\x8b\x82\xee\xc8\x81\x6c\xf9\x2c\xa5\x52\xa1\x19\x45\x80\x09\x39\x13\x60\xed\xe5\x9a\xf0\xc9\xf6\xbf\x9c\x39\xb5\x52\xbe\xee\x94\xb9\xe4\xce\xb7\xaa\x72\xee\xd1\x7e\x13\x0e\x95\x3f\x28\xd0\x27\x04\xa7\xce\x2b\x6f\x8e\x4a\xf2\x46\xb3\x00\xda\x8e\x43\x49\xc0\xb6\x6c\xde\x75\x1c\x25\x10\x79\x1a\xb3\x61\xc4\x20\x11\x70\x84\x68\x60\x0b\x69\x0a\xc9\x84\x02\xc1\x68\x9a\xa4\x31\x84\xe1\x27\xe6\xd9\x7c\xf4\xed\xb3\x2c\x3d\x6f\xd7\x5e\x91\xbf\x57\xb7\x59\xc5\xa9\x7d\x2d\xe1\x84\x8a\x0b\x3e\xeb\xf0\xcb\xdc\xb8\xea\xf0\xf7\x5b\xb4\xeb\x95\xe4\x37\xab\x68\xb1\x91\xac\xd9\x6e\x6c\x20\x04\x59\xdf\x31\x44\xdd\x63\x44\x1c\x13\xba\x88\x43\x2d\x8c\x23\x99\xb7\x74\xc9\xe3\x82\x90\x89\x28\x3d\xc4\x01\x91\x80\xfd\xe1\xb6\xbb\x52\xb2\xcc\xf2\x4c\xbd\x5a\x6d\xfc\x9d\xa2\xeb\x4c\xdf\x73\xfa\xcc\xda\x95\xb7\xbb\x5c\xc9\xd2\xe4\xd1\x89\xce\x37\x32\x6d\x80\x49\x96\x99\x8c\x09\x3a\x96\x22\x2d\x74\x45\x9b\x96\x54\x56\xe3\x05\x41\x23\x62\x95\xe5\x59\x4a\x61\xf8\x48\x33\x39\xd3\x21\xa1\x0a\x5c\x06\xaa\x5e\x28\x43\x57\x4e\xe7\x55\x74\x64\x4b\xb6\xb2\xa3\xdc\x1f\x5e\xb7\xf2\x75\x3c\xf2\x46\x9b\x1f\x07\x97\x3f\xb6\xa4\xd9\xf1\xe0\xd9\xa6\x16\xaf\x8e\xaa\x50\xcc\x6c\x3a\xf8\x45\x56\xce\x92\x99\x39\xa7\x3f\xea\x91\xf3\x51\xbe\x72\x55\xbe\x6e\xfa\xbc\x64\xbe\x51\x6d\x3a\x84\xf5\x6e\x3d\xe4\xcf\x9d\x3e\x35\xa5\xd3\x9e\x8c\xf3\x9f\x12\xde\xb6\x18\x87\x8c\x6e\x61\x2a\xa0\x2c\x25\x16\x7d\xca\x17\x14\x24\x0a\x8e\xa6\x9a\x3c\xe3\x09\x88\xe5\x3c\x89\x37\x25\xcd\x35\x63\x92\x8e\x2d\xc4\xd2\x71\x82\x4d\x73\xc3\x3e\x9c\x78\xa7\x37\xcc\xdf\xa2\x61\xfd\xe5\xc2\xf2\x77\xc9\x11\xb9\x87\xd5\xcf\xf1\xcb\x9b\xcb\xd2\x2e\x9f\xa8\x5a\xf7\xab\x29\x35\xbf\x4c\xb2\xca\xbf\xac\xe9\x92\xea\x49\xac\x2b\x41\x37\x34\x6c\xc5\x0e\x14\x5d\xb3\x5c\x8f\x15\x54\x31\x16\x65\x53\x36\x0c\x60\x1a\x51\x68\xab\x1c\x2d\xfa\x80\x55\xed\x97\xef\xce\x19\xdd\x8e\xf7\x88\xdb\x08\x0f\xc0\xa0\x3f\xef\x16\x9c\x52\xac\xcc\xf4\xfb\x1b\xd3\x46\x1d\x78\xeb\x44\xb3\xd5\xfc\xc9\x83\x67\xbd\x25\xc9\xf5\x7e\xdd\xa2\x34\xd3\x84\x31\x27\x48\x58\x23\x09\xec\x30\x9e\x29\x63\x2f\x86\x26\xcb\x43\xc5\x77\x00\xf6\xa3\x18\x1a\x40\x91\x63\xd5\xa4\x05\xe2\xff\xae\x6e\x4e\x50\xd3\xcc\xe8\x7f\x7e\xff\xbc\xd2\x2d\xfb\x16\x9c\x3d\x4b\x79\xad\x7d\xea\xfd\x9d\x8d\x4a\xd4\x1d\x7b\xf9\xfa\xca\x15\x23\xec\x1a\xf5\x4e\x94\xde\xff\xe2\x40\xab\xc9\xc4\xd7\x2e\xb7\xf0\x9e\xb9\x25\x5b\xde\xdc\x9f\xf2\x68\xf1\xbb\x41\x93\xbd\xa3\x9d\xcc\xc6\xc4\x5b\x47\x67\x7a\xc1\xf1\x23\x49\x76\x25\x48\x5b\x3e\x1f\x59\x82\x46\x44\x62\x48\x4a\x1a\x11\xea\x06\xc1\x86\x11\x19\x79\x88\x77\x30\x4b\xb1\x91\x1e\xd9\x02\x32\x65\x8e\x0b\x1c\x4d\x81\x54\xe2\x12\x59\x1e\x56\xa3\xd3\xb7\x2d\x1a\x1d\x7b\x6f\xea\x4f\x33\x99\x99\xc3\xae\xcf\x3c\x38\x7d\xcf\x8f\x9f\xb1\xc7\x06\xa1\x61\x2b\xf3\x49\x7d\xf2\x27\x5b\x15\x24\x64\x5c\x4a\xd0\x58\x1b\xda\x8c\x1a\x2a\x02\x25\xb1\x32\xab\xc9\x9e\xa1\xd3\x1a\xc1\x87\x9e\x42\xb8\x11\x4f\x00\x27\x74\x90\x8a\x22\x14\xe1\x04\x6f\xa8\x3e\x37\xd7\x35\xea\x67\x6e\xbf\x96\xb9\xdf\x94\xdf\x56\xe7\xcf\x5a\xe2\x01\xdc\x32\xf8\xb7\xd4\xde\x29\xef\xd7\x89\x1b\x4c\xeb\x89\x70\x92\xe5\x33\x19\xc8\xf2\x0c\x03\x58\xe0\x79\x1c\x11\xaa\x32\x66\x1c\x27\x14\x08\x57\xf0\x01\x87\x9d\x90\x52\x08\xe4\x20\x42\x61\x18\x19\x10\x50\xe6\x89\xd8\x4c\xfc\xc0\xce\xb3\xba\xda\xd7\xdf\x1c\xbe\x51\x3e\x2e\x3d\x4f\xec\x9b\x7b\xf7\x81\xc6\x9b\x52\xae\x1d\x1d\x7e\xe4\xfa\x0f\xdc\xc0\x31\x9b\x07\x7e\xfa\x20\xb9\x51\x20\x99\x84\x24\xfb\x91\x6d\xd0\x96\x68\x72\x50\x0b\x1c\x9d\x30\xc3\xc8\x77\x02\x59\x94\x99\x90\x94\x5c\x96\xc3\x00\xab\x3c\xb6\x68\x8f\xe2\x09\xca\xc3\x2f\xe7\x9a\x9e\xcc\xb4\xa1\x07\x1f\xfc\x91\x6d\x5b\xdd\x6e\xc4\x93\x8f\xef\x57\x72\x37\xcf\xdc\xbd\x6f\x7b\xc1\x6b\x65\x77\xb9\xbb\x32\x1d\xde\x36\x26\xb9\x26\x47\x71\x20\x3a\x92\x1e\x72\x18\x99\x74\x10\xb3\xff\x1f\x6b\x5f\x1d\x6e\x45\xb5\xf7\x4f\x88\x02\x02\xd2\xdd\x0a\x28\x48\xcd\x9a\xa0\xf3\xd0\x48\xa7\x84\xac\xe9\x99\x35\xbd\xa6\x49\x0f\xdd\x08\x4a\x87\xb4\x92\x22\x21\x20\x1d\xa2\x48\x37\x88\xa4\x20\x21\x12\x12\x82\x20\xbf\xe7\xbe\xfe\xee\xeb\xe5\xb2\xcf\xe3\xfb\x9c\x67\xff\xbf\xff\xf8\xee\x35\xdf\x8e\xcf\x87\x32\x54\x31\x72\xa0\x85\x01\x8f\x7d\xdd\xd6\x29\x60\x87\x32\xc3\xe8\x2c\xa5\x46\x50\x08\x68\xc4\x26\xd8\xc6\x3e\xd3\xb6\xf9\xbc\x85\x43\x37\x9e\xad\x36\x7e\x5b\x83\x5a\x79\x17\xbd\xf3\x6e\xae\x7c\x8f\x6a\xb6\x3e\xfd\x79\xe6\x03\x45\x7f\xac\xb3\x6a\x43\xeb\x24\xd7\x4f\x8a\xa6\x92\x81\xa0\x48\x2a\x20\x3d\x22\x88\x4c\xcf\x63\x54\x57\x62\x4c\x91\xd0\x45\x95\xf3\x7d\x8d\x0b\x3c\x64\x44\x06\xe7\x4b\x82\x45\xc5\x91\xcd\x27\xce\x1e\xcb\x2c\xa8\xf7\x70\xc9\xf6\xbe\x25\xea\x65\xf8\x7d\x45\x9f\x0f\x26\x85\x84\x06\x1e\x0a\x15\x32\xd5\xec\xf7\x66\x4a\xbf\x5d\xcb\x7e\x4e\x72\xdb\x94\xb2\x11\xf4\xb0\x69\xb9\x54\x1c\x60\xd5\xb7\x45\xe0\x30\xb2\x1b\x61\x81\xd1\x63\x23\x8a\x4c\xce\x12\x3c\x92\xf5\x25\xa0\x91\x48\xd7\x4c\x05\xc4\x09\x6e\xfa\x7a\xa9\x9d\xcb\xed\xca\xef\xdf\xb9\x66\x56\x77\xc7\x64\xae\x37\xa6\xed\xa8\x71\x64\x85\x09\x77\x46\xfd\xa9\x1e\x3a\xa6\xcc\x6d\x5e\x24\xc9\x87\xb8\xb1\xa8\xd8\xbe\xcb\x63\x3e\x70\x44\x8e\x41\x50\x14\x24\xdd\xb4\x9d\x30\xc0\x81\xa2\x73\x5e\x28\x52\x12\x43\x44\x0a\x2d\x87\xb4\x67\xb2\x3e\x8f\xd5\x97\x3d\x47\xb4\x9e\xb9\x49\x76\x12\xd6\xa6\x9c\x2c\xd4\xa6\xd1\x8d\xb5\x3f\x4d\xf1\xc3\xc7\x9d\x3e\x95\x0f\x55\x2d\xfe\x73\x25\xfd\x58\xd6\xf4\xb7\xe6\x12\x2a\x07\x0e\x69\xc4\x78\xb1\x6e\x40\x31\xb6\x7d\xa4\x3a\xa4\x83\x19\x3a\x90\x1c\x8f\x02\x00\xf2\x82\xa4\x03\x03\x38\x9c\x89\xa1\xe5\x9b\x54\xec\xa9\xd0\x4b\x23\x10\xfd\x34\x70\xe3\x90\x3e\xda\x9f\x47\x9a\x5c\xfb\xac\xe4\xe0\x4c\x8f\xff\x2c\xbc\xab\x44\xbf\xe6\x3b\xba\xbf\x3b\x7e\xcd\xd8\xf5\x99\xba\x36\xd9\xfe\x42\x20\x3a\xd6\xba\x72\xc9\x96\x1f\x96\x1b\xd4\x41\x91\xa6\x2d\x58\x5e\x6e\xc3\xba\x9a\x25\x05\xa3\xfc\xfb\x3d\x1c\xa0\x2e\xae\x54\x65\x50\xfa\x0f\xbc\x12\x4f\x0a\x09\x99\x63\x1d\x8a\xd4\xb1\x4f\x50\x01\x43\x1b\xa1\x4e\xf9\x3e\xe1\x6a\x16\x92\xfd\x58\x90\xe2\x80\x70\x00\x00\x34\x10\xc2\x90\xd1\x18\x9e\xc4\x41\xe2\xcb\x8f\x61\xb3\xe7\xdd\x28\x53\xb2\xce\x03\xa7\xcf\xda\xc1\x63\xb6\x1d\x98\xf3\xee\xc7\x5b\x74\xf0\x63\xbb\x89\x5d\xdf\x1d\x56\xb5\xca\xd9\xb6\xdb\x93\x8c\x7b\x6f\x09\x96\xe6\xc7\x0a\x06\x8a\x25\xb0\xb2\x03\x18\x57\x02\x3c\x4f\x43\xcb\x95\x80\x09\x05\x57\x03\x9e\x1a\xd3\x1e\x6d\x46\x94\xc7\xd1\xb1\x86\x12\x9c\xa2\x3f\x7c\xfc\xa8\xc0\xb3\xd4\x61\xed\x6b\x3e\x6d\x5f\x6a\xf4\x9b\xa7\x9b\x7f\x93\x29\xb5\x59\x8f\x1b\xe7\xb2\xdf\x1b\xbd\xbd\xdd\xb9\xc9\xd5\x92\x4b\x47\xce\x92\xa1\x15\x90\x5e\x88\x48\x44\x99\xbe\xe6\x93\xaa\x12\xb8\x8a\x07\xc3\x98\x44\x02\x12\x34\x99\x0e\x34\x13\x4b\x66\x4c\x30\xb6\x1a\x87\x32\x0c\x58\x2d\x8d\x14\x79\x47\xd7\x94\x03\xa5\x07\xe4\x14\x76\x55\x7a\x38\x7d\xc5\xd5\xb6\xb7\x9a\x5c\x1b\x8e\xa6\x7c\x58\x6f\xec\x98\xbe\x7b\x16\x96\xbc\xb8\xe2\xfc\x0b\xea\x34\x98\x65\x3f\xfb\xb8\x79\xb5\xfd\xe5\x7e\xfc\xea\xd2\xd9\x8b\xf3\x67\xce\x78\xb3\xd6\xe9\x0e\xd9\xd6\xe7\x92\xfa\x4e\x3c\x92\xe3\xf1\x33\x23\xb9\x36\xc3\x86\xbc\xc6\x61\xd1\x94\x90\xe8\x38\xc8\x34\x7c\x95\x8b\x79\xcf\xa3\x1c\x43\xe6\x1d\xc5\xf7\x23\x0b\xc9\x90\x74\xa4\x90\xf1\x5d\x07\x73\x1c\xfa\x8b\x8f\xe0\xe5\x71\xdb\xc4\x1a\xeb\xda\x4f\xaa\x3b\xe9\xbd\xd4\x52\x7d\xfa\xae\xdb\xf5\xfc\xe9\x17\xa3\x2a\x36\xff\x78\xcb\xab\x83\x5a\x4e\x25\xf6\xbf\xbf\x72\x6f\xf6\xe4\x7e\x1b\x05\xdb\x90\xf4\x68\x48\x32\xb1\x10\x69\xa2\x85\x6c\x11\xc7\x50\x12\x62\x45\x09\x15\x52\xa2\x14\x5a\x64\x15\x16\x92\x92\x87\xa1\xc9\xb1\x18\x29\x6e\x1a\xdf\xa6\xe3\xdd\xed\xa3\x2f\x16\x9a\xd0\xbb\xd7\xdc\x06\x45\xb0\x33\xae\x55\xbb\xe5\x19\xfa\x80\xd6\xe7\xae\x4e\xee\x5c\xfe\x35\xb5\x7a\x8b\xad\x2f\x02\x0b\x37\xbf\xf3\x6c\x45\xbb\x4d\xa7\xfa\xb6\xca\x6d\xee\x3e\x3c\x32\xd3\xbe\xe2\x6d\x5f\xc9\xd4\xa2\xe0\xac\x6f\x97\xae\x94\x96\x14\xa8\xc0\x24\x19\x24\x9f\xc6\x1c\x14\x00\xc5\xf1\x0a\xe5\x53\x1a\x88\x35\x4e\xf5\xac\x90\x70\x63\x2f\x74\x62\x8b\xd0\x3d\xcf\x0b\x1d\x27\x86\x9c\xcc\xba\x36\xcb\xc8\x1c\x97\x38\xe7\xac\x44\x35\xbc\x59\x6c\xf4\x8d\xf5\xbf\xd4\x6d\x98\xfb\x64\x6f\x69\x4e\x6e\x72\x4d\xf8\x7e\xd9\xc3\x43\x95\x35\xb5\xbe\xbf\xee\x66\x4d\x2e\x55\x1f\xab\x42\xde\x75\xbd\xc8\xa7\x62\xd1\xf6\xb1\x6f\xda\x1e\xeb\x61\x37\x52\x7c\x35\xa0\x5d\x9f\x15\x6d\xe0\x18\x8c\x60\xd0\x9c\x4b\x00\x42\x0f\xfe\x15\x11\x5f\x36\xf5\x39\x75\x6e\x9c\xdd\xd1\xf0\x83\xb5\xd9\xa3\xee\xe7\x5a\xb6\xbd\xb7\x79\x54\xb5\xb0\x79\xca\x99\xcb\x68\x6f\xab\xfd\xf5\x2b\x70\xc2\xde\x24\x8f\xcf\x84\x08\xe1\xd8\x01\xa6\x63\x47\x5a\x44\x93\xa2\xe1\x32\x91\xa8\xb8\xb2\x1f\x30\x11\x08\x3c\x87\xd7\x39\x8a\xd5\x44\x8f\xb5\x70\x6c\x41\xcf\x03\x76\x62\x2b\xe8\x7e\x3e\xff\xd9\x5a\x15\xb2\x1c\xae\x5f\xb0\x65\xcd\xef\xee\xb5\x1c\x5a\xe8\xf5\x0c\xc3\xbb\xaf\xd8\xbf\x61\xfa\xb4\x47\x9f\x8e\x5f\x30\x35\xfd\x31\x3a\x71\xdf\x9e\xf5\x1c\x53\xf4\x55\x37\xd6\xad\x20\x88\x35\x42\xd1\x9d\x10\xb8\x6c\x28\x8a\xba\x83\x81\x17\xc4\x16\xa7\xe2\xc8\xe0\x09\x51\x56\xe5\xc8\xe3\x5d\x37\xb1\x82\xbc\x93\xe3\xdb\xae\x78\xf4\xfb\x57\x6f\xec\xf7\x6f\x9c\x9f\xd8\x64\xdd\xca\xd7\xe7\xbe\x56\xd7\xbb\xf7\x4a\xe3\x5f\x4a\xa7\x2c\x7b\xef\x5c\xfa\x7d\x4e\x62\xe3\x75\x54\x1c\xb8\x12\x02\x32\x13\x46\x28\x00\x9c\xc2\x02\x9f\x85\xae\xad\xb1\xbe\x15\x70\xc0\x0a\xb0\xa6\x47\x81\x44\x13\x9c\x88\x05\xc8\x70\x04\x7c\x39\xb5\xe8\xb0\xe6\xda\xaf\x76\x4a\x93\x19\x99\xf7\x74\x3d\xd0\x21\xdb\xf1\x9d\x2b\x6f\x8f\x0a\xff\x28\x78\xb1\xe7\xe1\x67\x27\x51\xd9\xcc\x1d\x93\x0b\x4b\x02\x6d\x49\x60\xf9\x48\x52\xa1\xa8\x13\x91\xc9\xf0\xb4\xc4\x71\x0a\x63\xa9\x42\x14\x90\x42\x28\xba\xc0\x24\x75\x85\x34\x49\x28\xfa\x3a\xe1\xc9\x24\x26\xd8\x34\xfc\xcd\xb1\xcc\xf5\x6b\xef\xad\x38\x1f\x8b\xa5\xd7\x8d\xcd\x1d\x95\xc8\xbd\xe6\x49\x36\x7c\x73\xc7\x96\xfe\xeb\x53\x3f\x9e\x51\x62\xc9\x33\xe7\xdf\x3b\x9e\xff\x34\x6c\x4e\x4d\xc9\xf1\x4a\xa6\x8c\x2f\xee\x78\x72\xcf\xe6\xd6\x17\xdf\xc9\x96\x75\xe8\x19\xcd\xdf\x37\xb7\x53\x4a\xe6\x60\xf7\x85\xb7\x5a\x4d\xf2\xa6\xac\x1a\xb9\x7e\x35\x38\x99\x5c\x76\x79\xd6\x50\x18\xd3\xe2\x6d\x45\x61\xd4\xd8\x14\x23\xd3\xe5\x64\x89\xe3\x79\x43\xe1\x24\x0a\x33\x1e\x96\x7c\xce\xd6\x03\xdb\x8c\x0c\x37\x20\x1d\x9a\xe1\x88\x34\x76\x96\x1e\xd7\xab\x96\xff\xee\xf2\x3a\xf4\x87\x67\x36\xd0\x54\x7b\x3c\xf0\x78\xae\x15\x63\x1f\xb5\xae\xf3\xe0\x83\x7a\xa7\x52\x9e\x5c\xc9\x38\x34\xc9\xb8\x27\xd8\xb3\x62\x17\x84\x31\x50\xad\x40\x72\x48\x27\xa2\x04\xc7\x54\x81\x16\x90\x91\x17\x5a\xb2\x15\x51\x31\x1d\xf8\xc0\x15\x80\xec\x42\x8d\xa5\x6c\x2e\xb1\xad\xd7\xee\xb6\xed\xfe\xd3\xcc\x85\xe4\x3d\xd4\xb6\x91\xad\x8e\xe7\x98\x58\xf0\xde\xa7\x13\xf2\xf6\x18\x30\xb0\x1e\xf7\xeb\xfc\x6f\xc7\x2f\x8e\x92\x7c\x87\xca\x03\x35\x14\x2d\x92\x10\x75\x44\x7b\xa2\x62\x1a\x11\xb6\x04\x32\xa2\x25\x09\x3a\x34\x84\x94\x6f\x92\x88\x24\x55\x26\xa6\x44\x07\x45\x0c\x46\x69\x80\x0a\x1e\x3a\xd4\x21\xfb\x84\xb7\xdd\x57\x8f\x7c\x91\x7b\xc1\xfd\x7a\x64\xcb\xde\xd9\x1e\xbc\xd2\xf4\x76\xe1\xa1\x45\xae\x7a\xe1\xef\x6e\xce\xe4\x12\x6d\xb2\x32\x21\xc3\x80\x17\x6d\xd2\xe1\x38\x31\x36\x43\x9e\x09\x02\x96\xd4\xa0\x2c\xb3\x50\xe2\x2d\xda\xd0\x22\xce\xa7\xa1\xa9\x29\xa4\x21\xea\x11\x23\xa9\x64\x62\xb1\x9f\x15\x3e\xa4\x5d\x99\x6a\xdc\x9c\xf7\x45\x91\x0c\xdf\x3c\x5e\xfd\x7a\xb9\x81\x70\xdf\xcc\x72\x9d\xf2\x34\x6a\x93\xf5\xcc\x91\xe9\x8f\xcd\x24\x63\xfa\x93\x6a\x80\x35\xc1\x44\xd0\xf3\xf8\x08\x71\x31\xe9\x99\x26\x87\x49\x9a\x50\xc9\x88\x8a\x1d\x5b\x11\x7d\xc9\xd3\xfd\x48\x50\x23\xcf\x12\x28\x03\xfb\x2f\xdd\xa1\xfe\xd3\x84\x2e\x35\xa5\x41\x83\x46\xb9\x5f\xb4\xe0\x66\x2d\xef\xfd\xf9\x73\x0a\x3e\x55\xf7\xf9\xd3\x94\x05\x9d\xea\x56\xad\xfb\x7e\x8d\x76\xe5\xe7\x4d\x2a\xdb\xa0\x54\xfb\x41\x6d\xee\x4c\xed\x95\xe4\x11\x92\x1b\x70\xa2\x1f\xeb\xa4\xa5\xf3\x86\x63\x71\x80\x95\x42\xdb\x47\xa2\x16\x5b\x1c\x88\x75\xa0\x7a\xb6\x26\xd0\x9a\x28\x6a\x36\xc6\xa2\x20\x10\xae\x95\x78\x84\x34\x77\x6a\x8d\xcb\x27\x1a\x70\x9f\xe4\x7b\xb7\xe9\xb3\x55\x23\x77\x4e\xfc\xbe\xe7\xc9\x79\x5f\xcd\x7e\x55\x5e\x7e\x6b\xc3\xef\x75\x6e\x3f\x3d\x9f\x5c\x0b\x76\x84\x88\xb3\x79\xd2\x26\x0d\x9b\x88\x19\xd1\x53\x31\x4b\x84\x84\xed\xda\x28\x80\x3a\x27\xf1\x6e\xcc\xf2\x24\x26\x55\xdb\x57\x2c\x2c\x2b\x96\x1b\x99\x89\x2d\xb8\xea\xe5\x4d\x2d\x47\x6c\x3f\xf8\x4b\xcf\x09\x97\x7f\x2d\x55\x53\x30\xc5\x92\xbd\x6f\x4f\x3e\x76\xb6\xdf\xde\xde\xdb\x1f\x56\x1d\x30\xf4\x40\x72\x4b\x20\x1d\x42\x2a\x50\x48\x41\x88\x34\x20\x68\xa6\xe0\x7a\xbe\x1a\x59\xa2\x03\xa2\x48\x33\x1c\x1f\xb9\xb6\x4f\xc6\xbe\x8c\xcc\x38\xa0\x64\x95\x8a\xd4\xbf\xce\x67\x5f\x7e\xed\x3e\x5f\x9f\xca\x98\xff\x14\xf7\xc6\xf1\x25\xd2\xb3\x6a\x03\x9e\xd5\xf9\x79\x1d\x5a\x55\xa9\x59\x78\xc6\x3f\xb6\xb5\xc9\x49\xf9\x77\x2d\xc9\x9d\x4f\x91\x92\x6c\x12\x00\x4f\xd2\x3c\x4a\x03\xd0\x0f\x91\xc2\x38\x94\xe1\x85\x5e\xa0\x01\xcb\x05\x8e\xc7\x8b\x21\x13\x80\x98\xe1\x64\x02\x89\x22\x48\x63\x21\x6f\xcc\xdd\x5b\xb5\xda\xa4\x6a\x27\xe3\x1d\x5b\x17\xde\xc8\x5c\xb6\xcb\xc9\x7e\x97\x9b\x3d\xed\x91\xfa\xc9\xba\x0c\x53\x2e\x5e\x75\x5a\xa5\x7f\xa7\x21\xf1\x4e\x7c\x4c\x9a\x9e\xac\x87\x90\x90\x25\x84\x20\xd6\x98\x88\x51\x19\xd5\x0b\xf4\xd0\x05\xa1\xa1\x09\x8c\xc8\x91\x8a\x60\xbb\x22\x30\xa1\xe1\x11\x4c\xfc\x37\x56\xd4\xbf\x2d\xf8\x9f\x46\x1b\xa9\x29\xd9\xb2\x66\xfd\x2f\x1e\xad\xb2\x03\x67\x67\x1d\x56\xfe\xbb\x7d\x67\xe9\x5f\xd7\x77\xfb\x7e\x68\x87\x79\x75\x3e\x6a\x79\xa2\xcb\x1f\x7a\xf6\xad\x1f\x54\x4e\x3d\xdf\x21\xb9\x65\x35\x4b\x8a\xb6\x2e\x8a\x36\x42\x91\x85\x21\xad\xb8\x9a\xe9\xb3\x1c\xad\xe8\xaa\x44\xfb\x9e\x25\x00\x47\x0f\x04\x47\xe7\x23\x13\x68\xba\x66\x87\x2e\xc1\xa5\x41\x5d\xf0\x56\x6e\xa7\xf3\xbc\x3d\xbf\xe7\xd9\x03\x73\x4c\x2f\x55\xbb\xf5\xc9\x2d\x57\x7a\xaf\xed\xb2\xfa\x14\xf3\x68\xcb\x35\xba\x37\xea\x90\x31\xb9\xe9\x14\x45\x86\x58\xc0\x02\x34\x18\xc7\x56\x7d\xd1\xe0\xc9\xd0\x06\x04\x47\x3a\x02\x8f\x03\xc5\xe6\xc8\x58\xa3\x69\x81\xa5\x80\x41\x85\xae\x45\x84\xca\x8b\x7c\xf6\x7f\x8b\xbd\xe7\xd9\xf3\xa2\x1f\xdf\x76\xe7\x17\xcb\x06\x16\x96\x5d\x50\xd5\x59\xdb\x67\x71\xdf\x89\xa5\x86\xbe\xb2\xeb\xfe\x84\xe2\x39\xf7\xca\xb5\x93\xfb\xda\x16\x85\x68\x5d\x11\x45\xc7\x73\x38\x80\x02\x9e\xb5\x44\x95\xd1\x68\xd9\xd4\x49\x5d\xfa\x57\x98\x33\x42\x5f\x80\x92\x6a\x7b\x7e\xe4\x31\x98\xf5\xd2\xe2\x1e\x29\xf5\x51\xe3\x46\x52\xf1\xe2\x3b\x8d\xeb\xd7\xf1\x81\x3f\xa1\xc1\xf0\xa3\xfa\xa0\x0e\x3b\xdb\x7f\xd3\xb3\xd0\x86\x06\x07\x85\x73\x49\x56\x12\x1f\x41\x1f\x22\xdb\x08\x95\x20\x92\x1c\xcc\xb2\x2a\xd4\xf5\x20\xc0\x94\x61\x48\xc8\xa6\x78\x24\xc5\xae\xa9\x0b\x3c\xe3\x09\x22\x61\xa8\x9c\x4d\x26\x16\xbb\xe8\x46\x21\xd7\xdb\x7d\x97\x4e\x58\xb4\xf0\x46\x70\xaf\x6d\xeb\xe7\x4f\xd6\xf7\xaf\x53\xa2\x5a\xae\xab\xef\xe6\x2f\xbe\x71\xfa\xe9\x85\xcb\x92\xeb\xe6\x75\x36\x88\x39\x93\x56\x3c\xc3\x31\xb0\x6c\x49\xbe\x48\x79\x64\xc4\xf8\x02\x62\x65\xd3\xd5\x5d\x08\x14\xc7\x03\x96\xa8\x72\x98\xf7\xa0\xeb\xca\x0e\xff\xd2\xd1\xe0\x3f\x4d\x94\x52\x53\x06\x65\xc8\xd0\xe4\xc5\xed\xf2\x8b\x64\xf7\x6e\xa9\x29\xd2\x39\xbc\x18\xad\xb6\x5b\xf9\x57\xeb\x97\x29\x75\xb6\xf1\xd7\xfc\x7b\x6f\x4d\xbe\x94\xe5\xe2\xc0\xc3\x93\x93\x0c\xd8\x44\x10\x8a\x4b\xe9\xa6\x1d\xfb\x8c\x6e\x39\x0e\x4b\x72\xaa\xaa\x51\x32\x92\x81\xc5\x7b\x86\x8d\x5c\x0e\x9a\x1c\x30\x49\x42\x25\xed\x00\x6a\x12\x21\x25\x76\xaf\x7b\x1e\x8e\x9f\x59\xf8\x83\x4b\x37\x6b\x6e\xba\xb7\x63\x50\xae\xd6\x95\x72\x54\xbd\x38\xbb\x26\x85\x3f\x1a\xf6\x7c\x46\xbd\x2b\x45\xbe\x1a\x96\xe4\xb3\x5f\x95\x42\xa2\x12\x88\xa6\xa2\x6a\x9c\xac\x29\x5e\xa4\x5b\x76\x2c\xf3\xa4\x42\xd0\x02\x50\x5d\x49\x62\x19\xdb\xb0\x02\x93\xb0\x44\xe4\xab\xa1\x0c\xa5\xc4\x3a\x55\x21\x7b\xae\x77\xf7\xf4\xce\x51\xb0\xc5\x85\x9f\x6c\x62\xe0\xee\x0f\xca\xe4\x5f\xb9\xea\x62\xc5\xe5\xc3\x46\x32\xfe\xf2\xfd\x9d\xe2\x24\xdf\xa5\xd9\x1e\xc5\x87\xaa\x15\x62\x29\x62\x35\x4a\x52\x51\x84\x2d\xcf\x36\x49\x18\x98\xaa\xaa\x6a\x8c\x0f\x02\x27\x66\x78\x2a\x10\x2c\x13\x9a\x8e\x18\x70\x69\x60\x5c\xcf\x49\xad\xb2\xac\x60\x99\x9e\x4f\xab\x1e\xde\xf3\xf4\xdb\x2f\x1b\xef\x7c\x75\x69\xc5\x16\xec\x8e\xa9\xa5\xc6\xb5\xe8\xf3\xf4\x6a\x89\xe1\x79\x93\xeb\x2f\x4d\x49\x32\x0d\x92\xa1\x15\x06\xc6\x1a\x2b\x84\x9a\x2c\x03\x43\x94\x43\x23\xf2\x58\x44\xe1\xd0\xe6\x48\xd2\xd4\x7d\x97\x22\x14\x32\xe4\x00\x8e\x08\xf9\xa5\x74\xf4\x9f\x7a\xda\xa9\x29\xb9\x1b\x64\x7a\xf5\xc5\x60\x36\x3e\xc3\xe3\x56\x1f\xbf\xb7\xb9\x66\xa1\x75\xa3\x2f\xb5\xcc\xb4\x73\xe8\x9d\xd6\x53\xb6\xbd\xd1\xba\xd3\xb1\x57\xcb\xf4\x89\xf6\xa7\xee\x4f\x7f\x89\x93\x78\x23\xd8\x32\xac\x08\xca\x1e\x2f\x05\xbc\x19\x9b\x48\xd7\x14\x8a\xe5\x90\xa8\x40\xdb\x41\xb2\xe7\x46\xd0\xd1\xb1\xac\xa0\xc0\x00\x9a\xce\xe8\x9c\x88\xd3\x08\x66\xd6\x0f\x76\xc1\xe9\xb5\x76\x94\xca\x3e\xaa\xcc\x84\x7a\xe4\x94\xdd\x1f\xdc\x05\xce\xc0\x7d\xfc\x82\xae\xcd\x88\x26\xef\x65\x2b\x95\x64\x76\x63\x4f\xa2\x45\x42\x14\x05\x82\x63\x69\x82\x96\x03\xca\xf3\x7c\x5d\xa4\x45\xca\x42\xbc\xe2\x91\xa2\x69\x87\x9e\x4c\x82\x30\xe4\x68\x5e\x56\x18\x2d\x48\x8b\x52\xae\xfd\x9d\xcd\x4b\x9e\xf4\x6c\x33\xb4\xfd\xf0\x2f\xeb\x2c\x63\x1a\x2f\x58\x7c\xec\x95\x8f\xef\xac\x3c\x10\xe6\x67\x1f\x57\xcf\x77\xa0\x7a\xf9\xe4\x3a\x1e\xc3\x73\x3c\x88\x1c\xcb\x51\xb8\xd0\x74\x68\x96\xf1\x7c\x22\x92\x2d\x26\xd2\x91\x1e\x7a\x1a\xa7\x62\x9d\x82\xaa\x21\xb8\x9c\xea\xd2\x0c\xb6\x28\x5e\x4c\xec\x78\xac\x16\xe5\xaa\x35\xba\xfa\x30\x4f\x70\xb3\x5c\xce\x11\xe5\xba\xc1\x5e\x73\xed\x56\x3f\x1f\x9b\x3f\xf3\xe3\x43\xef\xb5\x6f\x59\x7d\xf4\xe2\x24\x83\xd0\xf0\x0e\x43\xf8\x1a\xa0\x63\x5e\xe3\x0c\xc7\xb4\x2d\x02\x89\x2c\xf0\x55\x49\x93\x28\x40\xf8\x2c\x0b\x09\x27\xb4\xb1\xcc\xf2\x14\x32\x62\x11\x01\x9c\x58\xec\x39\x1d\x7f\xd6\x5f\x27\x44\x23\xe5\x6b\xf4\xd5\xb9\x29\x55\x3d\xf2\xe6\x2f\xa9\x6a\xed\xeb\x67\x67\x4e\xad\x21\x6d\x98\xb0\xb8\x5f\x72\x75\x9b\xb6\x7c\xc2\x41\xb2\x4b\x59\x26\xa5\xf2\x38\x0e\x1d\x5e\x16\x49\x15\x2a\xaa\x16\x0a\x0e\xab\xbb\x22\xc1\xf1\x22\x4b\x08\x9c\x25\x06\x1c\xa3\xf2\x0e\xfb\xbf\x4a\xf2\x28\xeb\xff\x6d\x8c\x90\x9a\x32\x68\x57\xe9\xd2\xc3\x5e\xa4\xbe\x2c\xd1\xb5\xed\xfb\xdf\x6d\x59\x52\xed\x4a\x95\x89\xc7\x9f\x8f\x36\xce\x1c\xbb\x66\x8e\x3d\x96\xe9\xf0\xac\x83\xd7\x77\x9e\x1d\x3f\xbc\x7a\x72\xfd\x14\xc9\x47\x31\x19\xab\xaa\x61\x13\x14\x62\x71\x60\x1a\x22\x89\x7c\x02\x43\x8b\x42\x8c\x28\xf3\x46\xe0\x85\x86\xc4\x32\x82\xed\x70\x31\xc3\x06\xc8\x61\x13\xbb\xd7\x4a\x35\xea\xae\x9e\x5f\x2d\xf8\xb6\xfb\xda\xc1\x4d\x8b\x72\xd9\xac\xfb\xeb\x17\x7c\xb4\x78\xf0\x89\x13\xf7\x6a\x1d\x59\xf1\xca\x07\xab\x32\x27\x79\xe9\xc6\x72\x25\x9f\x74\x41\x48\xf3\xbe\x40\x78\x3c\xf4\x59\x1d\xaa\xae\x2b\x40\xd2\x70\x64\x2b\xd0\x03\x23\xa2\x80\xc4\x13\x51\xe4\x91\x14\x0c\x1d\x27\x0d\x3c\xa6\x7b\xdb\x8e\xf6\xaa\xdc\xab\xef\x67\x77\x5e\x6f\x52\xb9\xc6\xa2\xcb\x78\x65\xd9\x27\x87\x9a\x14\x59\x3d\x72\x6b\x6b\x65\x72\xb7\xa2\x2d\xd2\xbf\x78\x93\x50\xa7\x2c\x57\xc0\x34\x30\x09\x9f\x11\x0c\x06\x86\x9e\x2f\xe9\x81\x17\x70\x36\xe9\xf3\x3c\x29\xe9\xa4\x28\xf1\x84\xe6\x2b\x6e\x44\x02\x3a\x10\x08\xc3\x27\xd2\x70\x3c\x85\xeb\x16\x7b\x58\xf1\xde\x9c\x13\xe8\xb3\x81\x93\xee\x8e\xa8\xa0\x56\xc8\x3e\x27\x6b\x8f\x39\x7d\xba\x8a\x97\x94\x2e\x45\xfa\x4d\x4b\x7f\x4b\x28\xb1\x05\x9b\x12\x10\x62\xc7\x27\x0d\x4a\xa3\x51\xcc\x84\xba\x64\x93\x14\xc1\xe9\x34\x1b\x6b\x3e\xe3\xb0\x04\x0f\x0d\x97\x86\x54\xcc\xd2\x26\x49\x02\x53\xb5\xd2\x68\xb6\xbf\xd7\xfb\xc1\xdd\xb2\x33\x6b\xb6\x2f\xbe\xe4\x62\xe7\x15\x13\xf3\x0f\xcf\x5d\x6b\x4b\x15\xf0\x25\xc8\xfd\xd9\x4c\xae\xa0\x5e\x2c\xb9\x48\xee\x2c\x23\x90\xd8\x62\x28\x22\xd4\x79\x68\x3b\x36\x80\x82\x03\x4c\x93\x25\x70\x4c\x09\x64\x04\x6c\x87\xd5\x42\x2a\x02\x3c\x14\x65\x2f\x10\x35\x05\xc3\x34\xe8\xd6\xd6\xcf\xf9\xea\xa7\x63\xf7\xd6\x0f\x6f\x32\x64\x7e\x99\xc9\x79\x27\xf7\xec\x9f\xa1\x8d\x9b\xff\xa7\xed\x3f\x3c\xff\xa4\xa6\xa6\xd5\x2a\x9a\xfe\xfc\x32\xa1\x92\x48\x81\x0c\x75\x24\xc6\x21\xa2\x89\xc8\xc7\x8a\x21\x89\x98\x66\x18\x16\xc7\x06\xc5\x21\xdd\xd2\x48\x4b\x14\x61\xe0\x98\x3a\x76\x18\x96\x60\x22\xe2\x65\x36\xda\x7f\x9a\x91\xa5\xa6\x34\x2f\x3d\xe8\xbf\xa0\x37\x1a\x66\x6a\x73\xb8\xc5\xa9\x16\x43\xe7\x36\xfe\x20\x9e\x94\x75\xe6\xa8\xcc\x2d\x2a\x4d\xaa\x3a\xb2\x4b\x5e\xa9\x64\xae\x35\x6f\x7e\xb5\x24\xc9\xb3\x5a\x64\xea\x8e\xe3\x33\x5e\xc8\x61\x60\x59\xc8\x43\xb4\x83\x7d\x20\x6b\x1e\x45\x46\x86\x2f\x68\x81\x1c\x42\xc2\x63\x6c\x56\xf5\x1d\xc1\x09\xf4\xf8\x2f\x7a\xc5\x97\x3f\xce\xc8\x6f\x5a\xee\xdb\x36\x6e\xe2\x92\xc1\x9f\x5c\xf9\xb2\x5f\xbb\x4c\x0d\x61\xbd\xaf\xaf\x1e\x1a\x71\xb0\x5d\xae\x72\x95\x16\xcc\xba\xf4\xd3\xbb\xc9\x15\x1b\x84\x4c\xa0\xab\xba\x03\x69\x5b\x17\x2c\x64\x73\x6a\x2c\x28\x2a\xf0\x0c\x07\xf0\x2c\x13\xca\xa1\x82\x94\x88\x0c\x3d\xca\x66\x6c\x96\x90\x99\x08\xa5\xc1\x27\xdd\x6d\x4e\x89\x31\x7f\xdc\xff\xb9\xe2\x3e\xee\xde\xc4\xbd\x95\xaa\x6d\xec\x97\xfd\xe8\x88\x27\xe3\xf0\xd7\x13\x8c\xef\x57\xcf\x3c\xf1\x47\x8e\xe4\x8a\x1d\x45\x2c\x74\x25\xce\x47\x21\xad\x33\x44\x14\x85\x84\x82\x81\xcc\x2a\x82\xe7\x1b\xa1\x1f\x23\x57\x10\x21\x15\xf3\x24\x85\xbc\x90\xf4\x23\x4b\x56\xf5\xc4\x62\x97\x3d\x40\x75\xd9\x90\x7b\xc8\x27\xdd\xbf\x58\x51\x7e\x7e\xd6\xa7\x5d\xe9\x26\x57\xef\x5e\xbb\xd6\xeb\x61\xd9\xe3\x59\x1b\x4f\xb9\x34\x25\xb9\xe0\x82\xac\x6f\xd8\xbc\x6b\x82\x10\xda\x24\x23\xf1\x31\x02\x96\x13\x03\xd2\x23\x22\x20\x33\x34\xad\x28\x56\x48\xc9\x7a\xc4\x42\x4d\x40\xb6\x20\xc4\xae\x4d\xbc\x0c\x4d\xf6\x4f\xe3\x9b\xd4\x94\x06\xd9\xff\x9b\x8e\xb6\xc5\xee\x7b\xd5\x86\x95\xc9\x50\xa5\x5f\xdd\x0e\x57\x27\x2c\x5f\x7d\xa3\x71\x39\x77\xf2\xaa\x16\xa7\x76\xad\xec\x53\xf3\xc3\xe3\xe7\x93\x8c\xeb\x0e\x19\x16\xab\xb6\x29\x58\xae\x2d\x71\x30\x82\xbe\xc6\xc6\x96\xc1\x00\x2a\x80\xae\x63\x52\x8a\x21\x51\x46\x44\x4b\xa6\xa6\xb0\x62\x48\x87\x01\x1d\x20\x3f\xb1\x7b\xed\x56\xe9\x78\x8e\x9a\x1d\x33\xac\xd8\x5d\xfe\xfc\xa7\x8f\xe0\x8c\x4f\x67\x8f\x5a\x33\xf2\xe1\xaf\x95\xc6\x5d\xeb\x76\x20\xe3\x8e\x55\xe3\x2e\x25\xb7\xda\xf7\xa9\x48\x11\x43\x51\x88\xc4\xd0\x37\xa3\x50\x94\x58\x14\x06\x72\xa0\xbb\x01\x23\x6b\x0c\xf2\x0c\x01\xc5\xa2\xa5\x99\x10\xb3\x54\x20\xa8\xac\x8f\xe2\xc4\x62\xd7\xff\xe2\x5a\xcf\x9c\x99\x6b\x8d\x28\x59\x6f\xc5\xd6\x7c\xd1\x8a\xb3\x9b\x6e\xcd\xe8\x5b\x97\xe9\x58\x65\x07\xce\xc7\x89\xc5\x9c\xac\x49\xc6\x10\x87\x50\x20\x0d\x33\xf0\x75\x4a\x55\x25\xcb\x40\xd8\xe5\x34\x59\x76\x9c\x58\x09\x24\x85\x92\xb1\xc8\x09\x0a\xa6\x58\x8b\xb1\x79\x00\xb0\x89\xd5\x34\x26\xc7\x2d\x5a\xbd\x57\x78\xfb\x99\x6d\x7d\xe6\x36\x7c\xce\x57\x6f\x56\xfc\xd3\x49\xe3\x7e\x1d\xd8\x05\x15\x2f\xd3\xb6\xf4\xa7\x41\xa1\x66\x25\xa8\xe4\x9a\x82\xc9\x10\xa2\x0e\x39\x1a\x03\x45\x71\x8c\x58\xd6\x68\x10\xa9\x22\x69\xe8\x34\x0e\x62\x5f\x45\x4e\xc4\xd0\xae\x83\x19\xa4\x7b\x90\xc6\x61\xcc\x10\x7f\xaf\x19\xef\x6c\xf4\x97\xc4\x0b\xb7\x1d\x5d\xf6\xe6\xf8\x93\x87\xae\xec\xee\x99\x71\x5b\x41\xa5\xd2\x8d\xc3\x3b\x7a\xbf\x77\x6d\xaa\x9f\xa7\xcd\xcf\x37\x9e\x17\x68\xfb\x30\x35\xe5\xf9\xa3\x3f\x9e\x4f\x2d\xf9\xe2\xfc\x73\xc3\x00\x67\x67\xc9\xcf\xd7\xf4\x13\xe8\xc3\xaf\x7d\x51\x58\xa6\x33\xf5\xca\x71\xbe\x4d\xfe\xec\x9b\xca\xde\x3d\xbf\xda\x58\x30\x60\xf2\x0b\x8f\xe2\xbf\x3b\xb6\xdd\xfc\xf8\xb0\xb7\xaf\xbd\xf0\xcb\xb3\x9a\x67\x0d\xa5\x64\xd3\x1d\x83\x0f\xba\xb5\x16\x2c\x2f\xda\xe2\xd4\xae\xb1\x49\xce\xd1\x41\xc0\xf0\x22\x19\x63\xd9\xf4\x58\xc1\x25\x01\x81\x90\x69\x7a\xa6\x8b\x84\x58\x8d\x91\x44\xd8\x91\x4a\xf9\x3e\x22\x34\x0e\x41\x5d\x20\x63\x9b\x90\xd2\xc0\x68\x9e\x31\xe0\xfa\x7a\x7a\x50\x85\x9c\x65\xb7\xbc\x31\x6b\xd8\xc4\x5b\xbf\xf7\xec\xfc\x64\x79\xdf\xf3\xd9\x4b\x34\xca\xbc\x34\xdc\x7c\xbf\xcc\xe6\x17\x3b\x20\x6d\xbe\x51\x96\xcd\xce\x7d\xeb\xfc\xb5\x2f\x17\xba\x7f\xe4\x50\x37\x0f\xba\xf0\x63\xcf\x73\x5b\x9f\xfd\x54\x79\xc4\x8d\x2f\x47\xd4\xaf\x99\x5c\x85\xb5\x65\x3f\xc2\x0a\x82\x22\x0c\x78\x8d\x89\x43\x97\x51\xe9\xc0\xd1\x28\xc5\x84\x1e\x0d\x91\x69\x1b\x8e\x87\x6c\x29\x10\x5d\xe8\xd9\x18\x99\x4a\x5a\x4b\x25\xd4\xe0\x68\xca\x67\xef\x7c\x38\xd9\x6c\xfd\x56\xf6\x2a\xad\xbf\xca\x38\xb9\xda\x4c\x66\xb3\x3b\x87\x18\x50\x77\x5d\xed\x5d\x63\x9c\xf4\x43\xa6\x26\x4e\x63\x5c\x81\x54\x63\x9f\xa3\x5d\x11\x30\x7a\x14\x12\xc0\x24\x59\x81\xa4\xa9\x40\x06\x1a\x15\x38\x5e\xac\x19\x8c\x17\xc5\x20\x0e\x04\x0f\x6b\x24\x13\x4b\x2f\x2f\x95\x74\xf9\x75\x6b\x8f\x0e\x8f\x82\xd9\x75\x5e\xdd\x7c\x37\x75\x67\x97\x19\xc7\xb7\xb5\xe9\x3f\xe0\x71\x96\x1e\x85\x77\xf4\xc8\x90\x77\x4c\x0f\x9c\x64\x08\x5e\x2b\xa0\x58\xda\x09\x38\x4d\x24\x44\xd7\x14\x65\x09\xf3\x9c\x1d\x92\x24\x8e\x62\x92\xb3\x81\x4c\x05\x9c\xee\x21\x59\x11\x49\x13\x62\x92\x33\x88\x38\xf1\xae\x6a\xbb\x7c\xda\xd7\xe7\x2e\x3d\xd8\x32\x6f\xec\x83\x57\x8e\x64\x1a\xf2\xed\xa6\x26\xa3\xbe\xe8\x70\x67\xd2\x81\x7c\x8f\x3e\xff\x66\xe8\x72\x6e\x4e\x72\xc5\xe6\x23\x89\x70\x64\xc0\x01\xdf\x84\x96\x0f\x58\xc1\x46\xa2\xc2\xd8\x00\x91\x24\x8a\x08\xc4\x4a\x9c\x05\x84\x58\x21\x5c\x2e\xe6\x29\x4f\x96\x79\xc2\x7b\x79\x57\x75\x60\x7f\xcf\xb9\xf9\x69\x9b\x27\x7d\x7f\xef\xbd\xa7\x72\xfd\x80\xea\x51\x67\x70\xa6\xdd\xbf\x66\xaf\xf4\xe6\xba\xae\xa7\xa7\x7c\xfe\x30\x57\x92\xa1\x2e\x78\x3b\x60\x49\xa0\xc8\x10\x31\x82\x42\x2a\x36\x2b\xe9\x8c\xee\xb1\x06\x25\x02\x22\xe0\x90\x0f\x75\xc2\xf2\x79\x41\xd7\x38\xda\x16\x22\x01\xff\x85\x60\xf6\xa2\x72\x8c\x1d\x57\x76\x59\x8d\xcb\x5f\x56\xbd\xbe\xe4\x4a\xd1\x82\x37\x3f\xd9\x3d\xfe\x56\x8b\xc1\xc5\xe6\x3f\x7e\xfd\xcc\xd5\x09\x17\x0a\x6f\x1f\x27\x26\xb7\xe4\x54\x58\xc3\x14\x54\xc9\x14\x42\xd5\x12\x5d\x25\x66\xc8\x88\xb1\x22\x2f\xd4\x5c\x64\xe8\x72\xac\x68\x46\xc4\x2b\x22\x56\x38\x52\xd6\x0d\x96\x77\x00\x02\x89\xd7\x38\x6b\x15\x78\xbe\x3a\xcb\xfd\x86\xc7\x3f\x58\x57\xfd\xb2\x92\xbd\x70\x70\xe7\x70\xbd\x5a\x67\x0a\xdf\xbd\xf8\xbc\xc0\x47\xcc\x93\x2c\x17\xd2\xdf\xeb\x4a\x8c\xf0\x2e\xb1\xa2\xa3\x84\x74\xac\x91\xba\x2e\x12\x81\xa2\x58\x42\xcc\x44\x01\xcf\x29\x9c\x29\xe8\xc0\xc6\x0a\xeb\xda\x0a\xd6\x10\x07\x24\x59\xb3\xa9\x18\xbd\xac\x1c\x5f\x0d\x79\xb6\x22\x4b\x30\xfb\xb5\x76\x43\xc7\x37\xac\xf3\x74\x62\x9f\x29\x9b\xed\xa1\x7f\xfe\xda\x48\xab\xb7\xa8\xc7\xa9\x83\xda\xbe\x24\x93\x93\xb8\x0a\x06\x9a\x16\x58\x94\xa6\x41\xa0\x0b\x1c\xeb\xfa\x20\x50\x01\x32\xb9\x88\x24\x19\xc3\xd4\x4c\x36\x96\x31\x11\x89\x22\x52\x59\x9e\x92\xf9\x17\x01\x45\xfe\x7e\x69\x5d\xdd\x92\x75\x81\xf0\xb4\xf7\x9c\x4b\x77\xd5\x06\xef\x2c\xcd\x5b\xa7\xf4\xfc\x3a\x30\xc7\xc2\xae\xb3\x0e\x0f\x54\x96\xe1\x7a\xe9\xa7\xa0\x4d\x5c\xd1\x88\x0e\xf1\xaf\x72\x3e\x76\x24\x56\xf2\x4c\x33\x20\x50\xa0\xc7\x08\x46\x1a\xe3\x90\x22\x96\x45\x53\x77\x02\x23\xc2\x8e\x48\x4b\xb2\x06\x4c\x8f\x93\x5e\x5e\x92\xda\xbb\x16\x3d\xbd\x5d\xb8\x59\x53\xfb\xda\xaa\xcd\xe8\xfa\xf1\xb3\x99\x33\x55\x2a\x56\xeb\xee\xe0\xd4\x7a\x83\x1b\x2e\xda\x7a\x62\xf6\xa0\xe4\x8a\x1c\xe8\x14\x6f\x60\xe4\x3a\x48\x67\x44\x07\xc4\xbe\x67\x38\x1a\x8f\x2c\x2b\x94\x7c\xc2\x51\x25\x9b\x8b\x08\x8f\xc7\x94\xe7\x87\x32\xcb\x18\x14\x74\x5e\x60\x62\xfc\xdb\xe1\xe5\x4d\xb9\x51\xf5\x75\x63\x51\xb7\x85\x03\xe7\x17\xba\xfc\x69\xe5\x4b\x05\xa6\x66\x7e\xef\xf2\xd4\x8b\x17\x6e\xfc\x7e\x75\xf4\xed\x83\x77\x92\xbc\x66\x89\x34\x49\x8b\x78\x28\x4b\x91\x1f\x58\x00\x62\x08\x14\x8a\xb4\x18\x9b\x24\x5c\x81\x44\x26\x21\xd1\xf2\xbf\x0a\x1d\x0b\x10\xbc\xcb\x7a\x06\xc2\xb1\xfb\xb2\x4e\xbf\xe7\xf5\x5e\x58\xb5\xdf\xba\x19\xe7\xc7\x1d\x9c\x7c\xe1\xad\x7a\x65\xf6\x7e\xa9\xfc\xfc\xe9\xb0\x7e\x19\xf0\xd5\xc9\xe5\xff\x98\x50\xf4\x48\x92\xe7\xa7\x50\x97\x64\xdb\x55\x03\x00\x69\xdd\xf5\x01\x2d\x19\x56\xc8\x62\x83\x09\x10\x1d\xc8\x9a\x0a\x23\xdb\x91\x05\x5d\x91\x7c\x51\x62\x65\x85\x52\x31\x7a\x59\x39\x86\xe7\x2d\xf2\x45\xbd\xcf\xa2\x6b\x59\xbe\xb8\x33\xfb\x5a\xae\x2d\x43\xea\x52\x97\x2f\x78\xf1\xd4\xef\x26\xd7\x3e\x3d\xe2\x51\xa6\xc5\xf7\x93\x2b\x32\x0f\x48\x82\xe3\x29\x9d\x33\x78\x31\xd2\x00\x1f\x31\x91\x03\x59\xc5\x8b\x0d\x05\x47\x28\xd2\x54\x9e\x03\x14\xcf\x99\x98\xa2\x6c\x48\xca\xce\xff\x07\xa4\x7f\xd9\xe1\xd5\x58\x35\xea\xc9\x6a\xe1\xe6\xd3\x53\x07\xb7\x0e\x7e\xad\xdb\x9c\x0c\x3d\x6e\x67\xbd\x25\x6e\xce\x5a\x6b\x6c\xd7\xdb\x27\x5a\x81\x62\x49\x5e\x34\x26\xe4\x90\x57\x2d\x0e\xc5\xac\x42\x92\x10\x86\x3e\x8f\x04\x27\x10\x95\x80\x04\x6e\x6c\x51\x8c\x45\x84\x34\xe0\x81\x03\x28\xc5\xf0\x44\x41\x76\x1c\xfa\xe5\x97\x76\x1b\x8d\xff\x61\xcf\xea\xaf\xce\x97\x27\xc7\x67\xa8\xf7\x1b\xdb\x61\xe2\xfe\x29\xc1\xc1\xa2\x83\x0e\x71\x7f\x0c\xfc\x3e\x35\xc7\xa9\x75\x49\x2e\x00\x25\x51\x54\x55\x9f\x00\xa2\x44\x86\x28\x76\x30\xc5\xf8\x36\xab\x31\x1a\x27\x99\x6e\xac\xbb\x8e\x0b\x63\x92\x53\x14\x41\x09\x1c\xc5\xe0\x79\x3b\xb2\xd3\x38\x83\xe0\xea\x54\xba\xb6\x35\x0f\x77\xb5\xe4\x5b\x46\xc7\x9d\x44\xf3\xe6\x57\x88\xaa\x6b\x2b\x09\xf6\xac\xc1\x75\x16\x6e\x3a\x6b\x0d\xff\xf2\x85\x34\x76\xed\xd9\xae\x72\xa9\x2f\xcb\xd5\xbf\x5a\xa7\x41\xc3\x7a\x27\x3a\x1b\xd7\x07\xcd\xeb\xd3\x26\x67\xb6\x95\x3f\x3c\x59\x2f\x4c\xad\x32\xee\xcd\x24\x63\x2b\x1b\xa4\x63\xc6\x74\xec\x87\xc8\x60\x00\x03\x30\xcf\x03\x0a\x0b\xb1\x12\x89\x1e\xa6\x11\xd4\xad\x98\xb4\x90\xa9\x5b\x9e\x17\xe8\xa4\x80\x74\x42\x4f\x9c\x5c\x35\xe9\xb4\x24\x27\xd3\xeb\xd0\xfe\xa6\xa9\x4b\x3b\x73\xe6\x9a\x5b\x07\x6b\x15\x27\x9a\xc1\x52\x07\xc3\xba\xd9\x97\x36\xe9\x98\x2b\xfd\x3b\x40\x09\xad\xc0\xf5\x15\x25\xe4\x20\x56\x30\x69\x92\x3a\x4d\xb1\xc8\x54\x85\x58\x23\x38\x96\xe6\x6d\x25\xb6\x38\x97\x60\x31\x61\xe9\x94\xa7\x23\xc7\x66\x21\x4f\x24\x80\x46\xb8\xdf\x48\x1c\x9c\xeb\xcf\xc3\x13\xc7\xb7\x1e\xdb\x3a\x7b\xe6\xfe\x5d\x9f\x35\xab\xb7\xbe\x03\xba\xbb\x2a\xdb\xb6\x37\x7b\xb0\x2b\xce\x7f\x90\xe4\xe3\x66\x8d\x71\x54\x3b\x8a\x15\x5f\x67\x5d\x42\xc2\x8e\x6b\x98\x64\x68\xc6\x91\xa0\x92\xb6\x21\x49\x20\x8e\x64\x87\x22\x42\xd7\x13\xbd\x10\xf0\x94\x00\x12\xdc\x2e\xfd\x51\x71\xd8\xda\xf6\x55\xde\x1f\x58\x03\x9c\xcd\x52\x38\x77\xe7\xde\x0b\x2b\x3c\x18\x5d\xf2\xda\xe5\x09\x1b\x17\x1f\x3a\x79\x3f\xf7\xbc\xa6\x49\xb6\x00\xd2\xe4\x22\x4d\xa0\x5c\x22\xd2\x75\x3a\x26\x45\xca\x0b\x19\x97\xf2\x28\x8b\xd2\xb1\xe8\x08\x9c\x63\xca\x82\x03\x49\x57\x30\xc8\xc0\x51\x1c\x85\x30\x12\x87\xfc\x0c\xc7\x1e\x15\xf8\xed\xbd\x4c\x63\xa7\x5d\xaa\x74\xa5\x4c\x8a\xfc\x13\x7b\x6d\xfa\x83\x9b\xcc\xda\x5d\xd3\x7f\xe8\xd9\x95\x2c\x35\xfb\x70\x72\xc5\x16\x19\x89\x97\x14\x84\x2d\xe0\x11\x32\x94\x11\xe1\x42\x5f\x8a\x09\x5d\x16\x49\xd7\x67\x1c\x3b\xd4\xe9\x40\xb4\x0c\xc2\xc5\x44\x24\x49\x34\x94\x23\xe2\xe5\x97\xd6\xbe\x9e\xbe\xbf\xd2\xcf\x37\xde\x9e\x3d\xfc\xc2\xe7\xbf\xcc\xec\xad\xed\x09\xd8\x8f\xd7\xff\x50\x7d\xfc\xa0\x49\x75\xba\xe5\xe2\x9f\xa4\x7f\x95\x3b\x61\xe6\xad\x09\xa1\x2f\xd2\xa1\x0b\x04\x59\xd2\x1c\xc2\x8a\x48\x4f\x77\x50\x10\x32\x01\x34\xf1\xbf\x32\xab\x98\x8b\x75\x88\x05\xc0\xd1\x88\xe2\xe8\x50\xb1\xa5\xc4\xc7\x9a\xe4\x86\xe5\x83\x6a\xcf\x29\x92\xed\xc2\xa5\xd3\xcb\xbb\x95\x1a\xb9\x24\x63\x8d\xa6\xdf\x6d\x5c\x94\x65\x5e\x87\xf7\x9f\xb6\xce\xbf\xad\x4e\xfa\x71\x0b\x13\x8a\x4d\x78\x8c\x16\x8a\x3e\xaf\x09\x2e\xc9\xcb\x8c\xec\x88\x16\x08\x55\x9a\x24\x22\x91\x92\x05\x59\x53\x1c\x06\x22\x8e\xa3\x69\x5b\xb2\x1d\x37\x94\xed\xbf\x9a\x4d\x2f\x16\x0c\xa3\xba\x7f\xd1\xbb\xf9\xfb\x8b\xba\x1c\xa9\xb5\x88\x29\xd6\xae\x5a\xcf\xd2\xe7\x5a\xf6\x78\xd0\xf6\x7a\xb5\xd7\x3e\x2f\xba\xf1\x69\xc1\x0a\xe9\xdf\x3d\x4a\x7c\x8d\xf4\x3f\x28\xea\x8e\xe2\x5b\x24\x92\x25\x96\xe1\x50\xc4\xb1\x01\x41\x06\x96\xe8\x06\x4a\x2c\xeb\x3e\x12\x68\xc4\xf2\x16\x0b\x25\x8a\xa3\x63\x41\x13\x5e\xf6\x1c\xa7\xcb\x4e\xf7\x1e\xaf\x6a\x77\xf3\xc4\xc1\xcc\xab\x0e\xf5\xec\x1e\xa4\x16\x77\x06\xac\xbb\xa8\xcd\x1c\xf7\xe5\x3c\xf6\xd7\xa7\x85\xeb\x27\x57\x64\x55\xe4\x63\x80\x4c\xc2\x8f\x64\x83\x8c\x5c\x9e\x45\x0a\xd4\xbc\xd0\xc2\x40\xe0\xcc\x48\x09\x08\xa0\x49\x62\x68\x9b\x86\x8d\x05\xdf\x41\x48\x23\x88\xc4\x6d\xe2\x0b\xb3\x3e\xed\x7a\x69\x57\xd5\xb1\x7f\x8e\x32\xe6\xda\x7f\x1e\xf1\x8b\x64\x5a\x3c\x81\xd5\xbc\x7b\xb9\xc6\x1c\xfb\xe6\x53\x3f\x25\xfd\x9d\xc8\xc4\x62\x87\x38\x22\xa8\x28\xe4\x6c\x13\x20\x40\x3a\x0a\x49\x0a\x3e\x17\x03\x05\xd0\xa2\x46\x92\x42\x04\x6c\xc7\x0c\x64\xd6\x10\x82\xd8\x77\x74\xc6\x7d\x11\x8b\xf3\x6f\xef\xd1\x20\x67\xaf\xa2\x05\x8f\x67\x2f\x5c\xb4\x47\xbd\x16\x53\x5f\x3d\xd3\xaa\xf5\xd1\xaf\xa9\xbd\x35\xf2\x1f\xfb\x20\xe7\xa1\x45\x67\x26\x0d\x49\x32\x84\xa8\xc5\x62\x97\xc4\xc0\x88\xb0\xaa\x04\x18\x85\x0a\x61\x6a\xb6\xaa\x58\x6a\xa8\x0a\x02\x23\xfa\x2c\x8a\x2d\xd2\xe7\x02\xa4\x31\x81\x4d\x03\x13\xfd\xb5\x86\xf0\xa2\x82\x6c\x9e\xd5\xb1\x49\x4e\x37\x6f\xeb\x05\xc3\xee\x98\x6f\xfe\x32\x74\x98\xab\x9d\x1b\x36\x77\xe1\x2b\x64\xd6\xce\xcf\xeb\x6d\xaf\xbb\x3f\xfd\xc4\x5b\x69\x80\xb5\x0a\x0c\x1d\x28\xba\xa8\x9b\x3a\x0e\x1c\x4a\x31\x5c\xd2\x31\x6d\x4a\xa2\x63\x46\x14\xe4\x08\x7a\x3a\x19\x1b\x90\x0f\x44\x13\x2b\x66\x64\x0a\x5c\x1a\x8b\x69\xd9\xab\xcd\x9c\x5a\xae\xcd\x6b\x0f\xd9\x7a\x6d\xfb\x0e\xe8\x3c\xa2\x79\xff\x53\x3b\xb7\x4e\x4b\x7d\xe7\x9c\xbb\xbd\xe2\xca\x42\x5b\x8f\x74\x4a\xae\x9f\xf6\x3d\x29\xe0\x03\x86\xf6\x34\x91\xf0\x59\x5f\xb6\xa0\x65\xb9\x71\x00\x10\xe7\xf0\x01\xc0\x66\xa4\x32\x72\x8c\x0d\x93\x08\x5d\xd9\xd7\x7d\x11\xfe\x07\x84\xf7\x8b\xa7\x7e\xf3\x4f\xb3\xad\x5a\x7c\x9a\xad\x5d\xad\xcf\x4e\x3b\x2d\x3f\x99\x74\xf9\x60\x97\xbb\xdd\xda\xef\xf3\x6b\x16\x1f\xf8\x71\xd9\x53\x1d\x4e\x24\xd7\xe9\x51\x1e\xa4\x91\x04\x54\x95\x70\x03\xc1\x77\x0c\x8b\x35\xb5\x50\x64\x43\xcb\x8c\xb5\x10\xc4\x64\xa0\x07\x32\xc1\x70\xa2\xe7\x31\x91\xcb\xe8\x06\x13\xb9\x69\xb4\x37\x2b\xf5\x7a\xd3\xf8\xf8\x17\xf8\xc3\xd1\x3e\x6b\xc7\xe4\x2d\xf3\xda\xa2\x20\xcf\xae\x4d\xab\xfa\x3f\x9f\xf7\x6d\xa6\xb7\xea\x7d\x5b\xf8\x83\x6f\x5f\xb0\x82\xce\x29\xb5\xb2\x35\x1b\x70\x6b\x41\x61\xbd\xed\xb1\x6e\xb7\xbf\xeb\x7f\xe9\x6a\xde\x3f\x72\xec\x28\xb4\x72\xf3\xcc\x0d\x79\xdc\x63\xf3\x92\xbb\x29\xc5\xf2\x51\x64\x30\xb2\xad\x42\x23\x08\x02\x5b\xb7\x69\x8e\xb0\x0c\xa0\x23\x57\x89\x03\xcb\xb2\x4d\x97\x06\x9a\x86\xa3\x08\x38\xac\x18\x6a\xb4\x40\xb0\x09\x6e\x8b\x3e\x2f\x75\xbb\x5f\x1b\xbc\x74\x98\x27\xb7\x1b\xd7\x3b\xe8\xb6\xe7\xcf\x6c\x17\x3b\x1c\x38\x7b\xe2\x69\xf7\x9b\xf7\x8b\x5d\x28\x78\x3a\xfd\xfc\x44\x09\xd5\x29\x54\x7d\x5b\xb7\x28\x49\x25\x42\xda\x61\x4d\x00\x08\xce\x8e\x3c\x92\xb3\x2c\xdf\xf7\xad\xc8\xd7\x19\xd5\xc2\xb4\xe8\x01\x92\x76\x31\x14\x03\x35\x0a\x12\xab\x13\x5c\x54\xf2\x98\xff\xea\xa0\xa5\x65\x6e\xd5\x39\x77\x72\x72\xbe\xa3\xc6\xb2\x41\x2b\xed\xb1\x4b\xfb\x4e\x08\x3f\x9e\x36\xfd\x61\x96\x24\x73\xc9\xb8\x31\xe1\x38\x3c\x88\xa8\x98\xd5\x49\x08\x7c\x13\xb0\x16\x21\x73\x84\xe7\x4b\xb1\xc8\x9b\x0e\x61\x10\xa2\xa5\x99\xac\x2d\xcb\x04\x96\x68\xe8\xbe\x48\xfa\xfa\x77\xe8\xef\x51\xbd\xea\x9b\x43\xbb\x9a\x9f\x5d\x9f\x9a\xe9\xfb\xf5\xa5\x4f\x94\xa8\xb0\x75\x6d\xa7\xe6\x15\x1a\x65\x7b\xc5\x98\x3a\xf7\xd4\x1f\x13\x2b\x27\x79\xd7\x23\x20\xd9\x90\x31\x48\x18\x51\x84\xcc\x31\xa1\x2f\x87\xb6\xef\xc5\x6c\xc8\xbb\xb6\xa3\xab\x3c\x92\x38\x86\x42\x7c\x00\x18\x2f\xf6\x1c\x83\x27\xb1\xf2\xb2\x82\xb0\x4d\x27\x74\xbc\x46\xe3\xa3\x13\x3b\x2f\x10\x3b\xed\xf9\x65\xf0\xb4\x79\x15\x3b\x9c\xac\x35\xaf\x72\xea\xcd\x35\x45\xaa\x5b\xdd\x2b\x24\x19\x72\xd2\x0e\x31\x6f\xca\xa6\x28\x85\x8e\xa4\x10\x51\xec\x86\x34\x1b\x0b\x58\xd7\x43\x14\x85\x00\x46\x42\xe4\xb3\x26\x76\x44\x53\x0b\x90\x29\x48\x00\x59\x2f\x67\x2b\x23\xe7\xde\xee\xf2\x43\x9d\x26\x33\xcb\xd5\xe8\xb4\xd1\xab\x65\x1f\x3e\x74\xfb\xe9\x89\x05\x8b\xfb\xe7\x5c\xd1\x7f\x86\xa9\xd2\xd3\x93\x5c\x34\x80\xc0\x47\x1a\x74\x4d\xc3\xd1\x1d\xcc\x44\xb6\xaf\xb1\x51\x48\x29\x6c\xac\x4a\x62\x1c\x99\x9c\x4e\x10\x3e\xa3\x40\x68\xf9\x34\x60\xc4\x40\x05\xac\x9b\x46\x0d\xca\x64\x6f\x54\x3f\x97\xb9\x70\x96\xaa\x0e\x1b\x5b\xf6\xda\x88\xd9\x45\x72\xbe\xff\x58\x2f\x7d\xa1\xdc\xe0\x6a\x43\x3a\xde\xbd\xbc\xa9\xca\x8b\xbf\xae\x5a\xb4\xea\xef\x6f\xad\x7a\x5a\xaf\x4a\xa5\x06\x93\x96\x57\xce\x75\x32\x7b\x95\x8c\xf3\xdb\xfd\xb1\xa6\x61\xee\x1d\x3b\xa3\xdf\xfa\x5c\x17\x5f\x50\x3c\xe6\xd3\xd9\x47\x07\x4f\x56\xef\xee\xac\x65\x8f\x7d\xab\x56\x8e\x4e\xf3\x83\x7b\xbf\xdc\x98\xb5\x21\x38\xf0\x4a\xc1\xfe\x99\x8b\x1c\x48\x3f\x3b\x48\x62\x1a\x32\x20\xd1\x82\x41\x10\x9a\xed\x50\x1a\xb6\x6c\xac\x58\x84\x4f\x04\x64\xa4\x11\x82\x8e\x6c\x31\x60\x4c\xca\x07\x01\xa4\x03\xc4\x00\xdd\x97\x64\x16\xbf\xfc\x15\x1b\xf4\xd9\x72\x68\xd4\xc9\xc2\x43\x86\xb5\x7f\x7e\xf2\xe7\x1d\x29\xb9\xde\xfa\xc9\x09\x3b\x6f\xb8\x56\x74\xf8\x57\x87\x32\x7d\x3f\xe6\x59\x4a\x72\xbf\xa2\xec\x18\xa6\x08\x49\x6c\x49\x40\x95\x61\xc0\x18\x01\x60\xdc\x40\x91\xa8\x30\xc4\x91\x63\x1b\x5a\x10\x43\xe0\x6b\xa1\x8e\x15\x48\x5b\x7e\x44\xe3\xe8\xe5\x82\xa4\xed\xbb\x6f\xe2\xbd\xb9\x77\xf5\x5a\x57\xbf\xf5\xde\xef\x3a\x0f\xed\xda\xeb\x8d\x4f\x7e\x2f\x90\xbb\xc8\x95\xc2\xd4\xc1\x5c\xcf\xc6\xac\x7e\x35\xc9\x83\x4d\x9d\xf7\x2d\x93\x09\x6c\x27\xa0\x74\x02\x62\x9d\x0e\x22\x95\x22\x14\xd3\x54\x4d\x36\x92\x09\x5f\xd2\x04\x09\x1a\x56\x48\xc8\x00\x19\x8e\x19\xaa\x72\xe2\xe4\x6d\xd5\xa5\xb2\xcd\x3e\xfe\xcd\xa8\xb0\xbd\xeb\xf6\x56\x1f\x5d\x1f\x93\xef\xcb\x81\x87\xe3\x7e\xed\x51\x9b\xc8\x58\xba\x65\x9a\xb6\x3f\xfd\x26\x9e\xd0\x99\x9a\xbe\xec\x85\x12\x96\x71\xc0\x22\x42\x51\x6c\x68\x52\x04\x6f\x85\x9a\x4d\x50\xbc\xab\xba\x9a\x0f\x64\x3d\x94\xb9\x80\xa4\x75\x53\x83\x3a\x65\xda\x09\xf0\x7b\xb7\xb5\xa1\xef\xbc\xbe\xae\xd3\x9e\xf3\xde\xab\x4b\xfa\x90\x3b\x8b\x79\x9e\x73\x74\xd6\xc4\x8e\xe4\xa8\x63\xb7\x9b\x7f\xb8\x26\xd7\xb7\x49\x6e\x65\x04\x9c\xa5\x59\x61\xc0\x2a\xbc\x8e\x09\x89\x21\x75\x0e\x86\xbc\x07\x75\x1f\xdb\xa6\x05\x34\x35\x82\x84\xa0\xba\x02\xab\xcb\x31\x15\x5a\xbc\xf7\x1f\x48\x55\x2f\x84\xad\xd7\x07\x2d\xbf\x59\xad\xec\x1b\x6b\xa5\x3e\x2b\x9f\xe6\xb2\xb2\xbd\xda\xb7\xfb\xaf\x6b\x8b\xf1\x2d\x7f\x1c\x8a\xbe\x6a\xda\x6b\xe7\x81\x0d\x49\x2e\xfd\x28\x87\x23\x4d\x82\x8d\x6d\x45\xe5\x0c\x8e\xd2\xc5\xd0\x84\x7e\x8c\xa5\x50\xd7\x22\x01\x52\x81\x0e\xa0\x20\x45\x50\x34\x91\x8a\x44\x3d\x40\x18\xa5\x91\x05\xe5\xcc\x1c\xde\xff\xad\xd9\xfd\x2d\x39\xca\x1b\xb3\xd7\x1d\x3b\x7a\x1d\xa6\x14\xcf\x71\x71\xd2\xf2\xef\xd7\x8c\x1e\xab\x4a\xf3\x1f\xbc\xff\x82\xaf\x69\xbe\xb9\xca\xc4\x6f\xaa\x94\xbd\x30\x24\x75\xee\x2e\x69\xf7\xae\x52\xaf\x1e\x9d\x34\xa1\x4a\x8d\x75\x2d\xea\x93\xbf\x4e\xa8\x95\x75\xe6\x1b\xc9\x4d\xac\x03\xc1\x73\x2d\x84\x44\x1d\x22\x3f\x94\x91\xc5\xcb\x2e\xf4\x0d\x52\x53\x64\xd5\xd4\x64\x92\xa0\x45\x43\xc4\x2a\x4d\x60\xdf\x76\x2c\xc9\x09\x7c\x3b\x81\xaf\x09\xbe\xd9\xe1\x0f\xd8\x3c\xda\x5d\xf1\x79\xeb\x15\xd7\x5f\xff\x68\x5d\xa7\xdc\x8f\xbf\x1a\xb8\x34\xe4\x17\x7d\xd7\x92\x2c\x7a\xb3\x5c\xc3\x24\x0f\x78\x6d\xa8\x78\x14\xa6\x03\xe4\x23\x8e\xd0\x21\x76\x63\xd9\x0a\x11\xad\x5a\xb4\x2a\xf1\x20\x40\x34\xf6\x1d\x4a\x0b\xd5\x00\xbb\x84\xa2\x69\xac\xed\xbc\x2c\xf2\xea\x8a\x7d\xde\x1c\xbf\x77\xcf\xb5\x69\x9d\x07\xe6\x29\x3b\xbe\xf6\xf1\xed\xa7\xa5\x4f\x32\x78\xdd\xbe\xba\x45\xff\xfe\xb4\xdd\x88\x8d\x49\x06\xd7\x52\x74\xd6\xe3\x14\x52\x75\x0d\x02\xc7\x11\x15\x72\x48\x0f\x2d\x16\x19\x50\xf4\x25\x10\x9b\x06\x81\xfd\x08\xd9\x5a\xc0\x6a\xb1\x0b\x21\x26\x45\x82\x79\x69\x9f\xe8\x9f\xd6\x21\x52\x53\xde\x6e\xf0\xdf\x54\x87\xf6\xb3\x89\xd3\xeb\x0c\x7b\x7b\x50\xeb\x6d\x59\xa2\x3d\x3f\x8e\xa9\x73\xa8\xfe\x80\xfc\xed\x33\xf1\xf3\x4b\x4c\xdc\x55\xc2\x2a\xbc\x67\x45\x72\x83\x00\x6f\x68\x82\x6e\x20\x4b\x34\x7d\x55\x53\xb1\xab\x11\x16\x6d\x60\x6c\xb0\x90\x14\x03\xd2\x96\x28\x46\xa3\x9d\x28\x22\x6d\x81\xe7\x75\x91\xd1\x84\x38\x0d\xca\xf9\x26\xee\xf3\xd3\x7e\xf1\xdc\x3b\x36\xbf\x35\xa8\xf8\xcd\xa2\x97\xeb\x97\xf8\xbc\x4c\xde\x86\x33\xf0\x94\xde\x83\xde\xac\xf4\xf4\xe0\xea\xf4\x77\x5a\x13\x83\x01\xc9\x58\xf0\x34\x44\x98\x26\x2f\x04\xbe\xe3\x2b\x58\xf0\x43\x5f\xa6\x22\x2d\x30\x62\x9b\x8e\xb8\x30\xa0\x39\xc6\xe7\x28\xd6\x09\xc8\x48\xe6\x2c\x94\xc6\x99\xf7\xbc\x77\xb7\xec\xce\xf9\xd6\xe9\xe7\xed\xaa\x6c\x85\xa5\x1e\x54\xc8\xff\x24\x82\x7e\xe9\x46\x45\xda\x8e\xde\x7c\xed\xc4\x9e\xb5\x2d\xd2\x8f\x33\x9a\xf0\xb5\x5d\x28\x8b\xba\x0d\x91\xc6\x6b\x66\x1c\x69\x90\x8d\x78\xcb\x53\x2d\x42\x80\x06\xc6\x7c\xe0\x38\xba\xa5\x8b\x9c\x2f\x73\xa1\x6e\xca\x21\xaf\x03\x9c\xc6\x3e\x51\xa6\xb5\x1d\x3e\xa9\xf0\x59\xf6\xca\xa5\x8f\xbc\x79\x69\x67\x36\xe7\xe2\xf6\x6e\x37\x36\x77\xcd\x36\xb7\xd7\x83\xad\xaf\x92\xa2\x98\x27\xfd\xd3\xca\x84\x62\x1b\xc8\x37\x54\x8d\xc1\x12\xd2\x25\xdf\x50\x04\x45\x50\x62\x9d\x15\x3d\x96\xb5\xfd\xd0\xb2\x81\x43\x33\x08\x8b\x3e\x29\xe8\x34\xe2\x69\x56\xf3\xd9\xbf\x8b\x81\x7f\x1f\xa8\xfc\xd3\xd2\x4c\x6a\xca\x2b\x5f\x0c\xca\xf0\xe2\x81\xca\xb4\x51\x45\x67\x37\x7b\x36\xf6\xf5\x03\x55\x3b\x54\xca\x58\xfe\xc4\x94\x71\x5f\x76\x6c\x7f\x24\xf7\x4f\xed\x1a\x34\x7e\xb7\xcc\xce\x3e\xf3\x0e\x26\x37\x76\xd8\x3e\x08\x19\x5a\x73\x19\x46\xc2\x86\x2f\x5b\x9c\xa5\x4a\x3e\x13\x39\x34\x1f\x70\x51\x44\x92\x32\x6f\x62\x21\x64\x75\x2f\xd2\x6d\xdf\x05\x0a\x1f\xa5\x01\x59\x5f\x7c\xd3\xea\x45\xa7\xdf\x1f\x56\xb9\x79\xf7\xa2\xef\x67\x57\x32\x99\xef\x34\xc9\xf6\x8d\xf2\x4d\xe3\x4b\x39\xbb\x2f\x0a\x77\xec\x7e\x6d\x57\x72\x3f\x8e\xea\x79\x2c\xe0\x25\x68\x22\xd5\x8c\x3d\x41\x56\x01\x64\x61\x40\x3b\x12\x67\x50\x24\x67\x53\x7c\xe4\xe8\xb4\x0e\x63\x0e\x07\x3e\x88\x19\x9e\xe5\xd3\xd0\x29\xb5\x49\x5b\xb1\xdc\xb2\x59\xa8\xc5\x27\x23\x6f\xce\xb9\xf2\xc9\x4e\xfb\xee\x78\xee\xe2\xb4\xf2\xe3\xcb\xe4\x2a\x93\xf3\xe1\x85\x30\xb9\xa6\x00\xcd\x40\x21\x62\x86\x64\x58\x42\xe7\x1d\x85\xf6\x4c\xda\xd4\x68\xe0\x88\x88\x16\xf9\x40\x83\x51\x2c\xf9\x3a\xf0\xdc\x58\x21\xb9\x10\xba\x34\x02\x2e\x4a\x2c\xf6\x8f\x47\xc7\xeb\xb3\xcf\x4f\x2e\xbc\xe7\x60\x38\x72\xf1\xf6\xe5\x39\x4f\x3d\x3d\x9e\x9a\xa1\x4e\xad\xf9\x1f\xbf\x3d\xb8\xe9\xc2\x26\xdd\x87\x27\xb9\x3b\x64\x72\x1a\x14\x61\xcc\xd1\x04\xcf\xf9\xb4\x8b\x39\xcd\x95\x48\xcf\x03\x2c\xe9\x01\x4e\xa6\x14\x51\xb7\x22\x4e\x17\xd9\x90\xe0\x19\x92\xf1\x99\xd8\x4b\x2c\xf6\xb6\xd9\x4f\x5a\x9b\x6b\xf2\x0c\xbc\x6c\x6d\x69\x96\x31\x47\x96\x95\x45\xda\x6c\x6b\x54\xb3\xdb\xee\x61\xd1\x07\xcb\x7a\x74\xf8\x79\xdd\xec\xe4\xc6\x5f\x4d\x05\xac\xe0\x58\x40\x0a\x68\x33\x88\x6d\x35\xc6\x8a\x0c\x7c\x95\xd3\x34\x8e\x77\x21\x2d\x2b\x94\x16\x9a\x01\xe6\x48\x2b\x40\xb4\x6e\x22\xcc\xfe\xad\xdb\xff\xa6\xf2\xf9\xa7\x79\x61\x6a\x63\x22\xc3\xa0\x17\x63\x59\x8d\xa7\x75\xee\xdf\xdc\x1b\xba\x4d\xf9\xdf\xf2\x0f\x29\xb0\xb2\x7d\xfd\xf1\x53\xf3\x6d\xa9\x95\x7b\xcb\xe1\xd2\xef\x4c\xb9\x50\x70\x77\xff\xe4\xfe\x49\xde\x89\x7d\xec\x3b\x2a\xc1\x71\x91\x87\x14\x68\x92\x10\x73\x00\x4b\x22\xa3\x89\xa6\x2b\x92\x84\x4b\x84\x61\x80\x1c\x09\xc4\x08\x29\x2e\x19\xa3\x34\x4e\xf0\x1f\xbc\xdf\xa1\x53\xeb\x6a\x85\x3b\xf6\x68\xf6\x63\xbb\xcd\xfb\xab\x36\xec\xd9\xae\xdd\x84\xec\xdd\xf2\xd3\x5d\x9a\xcc\xba\x78\xea\x6e\x06\x36\xc9\xb7\xec\x96\xe3\x08\x94\xa2\x07\x08\x38\xb6\xe3\xca\xba\x28\x2b\x81\x1e\x70\x4a\x60\x28\x54\x40\x5a\x9c\xab\xf1\xba\x21\x86\xb4\x6f\x4a\x0c\xd6\x9d\xc0\xc5\x89\xc5\x2e\x34\xb5\xf8\x67\x39\xbf\xcd\x1a\xfe\xe0\x3f\x4c\xd5\xb3\xbc\x3a\xf6\x7c\xa3\x1c\x13\x2b\x96\x3f\xf8\x55\xa1\xc9\x6f\xf7\x3b\x3c\xad\x53\xfa\xc5\x4e\x1c\xcb\x44\xcb\xe6\x01\x2d\xd2\x0a\x13\x1a\x91\x6e\x60\xce\x60\x75\x00\x78\xd7\xc4\x96\xa9\x7b\x1c\x69\xfb\xbc\xa8\xb9\xb4\x15\x3a\x3a\x76\xb0\xc5\x68\x6c\x62\x4b\xf0\xbb\xef\x63\xdb\xb4\xde\xb9\x06\x3f\xad\x7d\xf4\x40\xd7\x1d\x53\x4e\xba\x7f\xf6\x8c\xb3\xcc\x7c\xe7\xd5\x66\x8d\x47\x54\x5a\x5b\x38\xfd\xc0\xea\x89\x63\x19\x07\x69\x85\x36\x9c\x88\xa7\x39\x25\x8e\x54\x5f\x66\x01\xc1\x49\x36\x8a\xc8\x28\x60\xa2\x88\x0e\x24\x42\x91\x48\x2b\xb4\x58\xd3\x75\x6d\xc6\x8d\xfe\xbe\xc8\xdd\xf4\xda\xff\xad\x43\x9a\x9a\x92\x23\x43\xc6\x06\x2f\x9a\x42\xf1\x78\xe4\x9d\x05\x33\x06\x2c\x18\x99\x71\xf0\x6d\xae\xed\x19\xfb\xd0\xe6\xb1\xed\x1f\xfc\x99\xa7\x95\x74\x3a\xe7\xb5\x9f\x27\x7d\x54\x38\xb9\x85\xb2\x43\x4b\x58\xa0\x15\x49\xf7\x51\xa0\x02\x88\x5c\x81\x0a\xc2\x28\xa0\x68\x06\xc6\x04\x2f\xa8\x8a\xc4\x00\xdd\xf1\x28\x20\x13\x26\xa3\x85\xae\x42\xa4\x71\xce\x52\x26\x9f\x94\xf5\xad\x91\xa3\x6e\x2d\x6f\x3d\x6a\xc3\xdd\x9e\xe7\xcd\xd6\xe5\x3a\x34\xc8\x37\xa8\x29\x98\x9b\x6b\xcc\xe6\xec\x87\x9f\xe7\x4c\xb2\x29\x88\x34\x54\x35\x2e\x22\x1d\x84\x30\xeb\x0b\x26\x06\xa4\x6f\xe8\xa4\xae\x0a\x40\x92\x29\x3a\x80\x12\xe9\x07\x74\x6c\xd8\x48\xf1\x2c\x5d\x23\x50\x90\x18\x21\xbc\x76\xb7\xf7\x7e\x7f\xca\xaf\xab\x48\x0e\xe9\xff\xc6\xef\xaf\x66\x9a\x72\xf8\x70\xb9\x3f\xfa\x7e\x3f\x2a\x88\xbb\x7e\x3e\x26\x97\x73\x7c\x75\x72\x75\x2a\x02\xac\x20\xc6\x96\x09\x7d\x27\x70\x11\x2d\x2a\x1c\x13\x1a\xa6\x1f\x79\x9e\x05\x09\x05\x71\xb4\xc5\x59\x8c\xcd\x87\xa2\xab\x60\x87\xf2\x10\x8c\x13\xa0\xc3\x1e\xdf\xd7\xb4\x58\x9b\x37\x70\xd3\x75\x1f\x6d\xea\x76\xa2\x77\xee\x39\xd5\x7e\x9b\x36\x77\xe3\xd7\xa0\xc4\xe0\x91\x5d\xba\x54\x38\x76\x2f\xfd\x0b\x3b\x89\x37\x2c\x00\x05\x1d\xa8\x53\x84\xaa\xe8\x14\x6f\x80\x58\x66\x49\x8d\xa5\xa0\xc6\xd8\x66\xec\x21\x41\x0a\x54\xc3\x83\x10\x61\x8d\x62\x03\x82\x60\x18\x3e\x8d\x33\xad\x77\xf7\x16\x6f\xde\xf2\xbd\x01\xbb\xd6\xbf\xb7\xf1\x74\xdf\x41\xcb\xca\x4d\xb9\xb8\xec\xf3\xf1\x54\x8b\x8c\x2d\xb5\xee\x9f\xed\xed\x31\x24\xfd\x17\xde\x09\xc3\x6f\x20\xab\x2e\x1b\x7a\x81\xae\x9a\x9a\x6e\xda\x34\x4b\x78\xb4\xa9\x28\x2a\xa5\xf1\x22\xa4\x74\xec\x91\xbc\xef\x19\x04\x81\x54\x41\x32\x79\x03\xb1\xea\xdf\x59\xc3\xbf\xe3\xd8\x3f\xf5\x1c\x53\x1b\x67\x6e\x50\xfa\x45\xe3\xad\xb7\xf0\xc7\xb5\xed\x8b\xbf\x9f\xa1\x63\xc6\x4f\x2e\xd5\x0b\x6e\xe6\x6a\xd6\x36\xb5\x4f\xaf\x7a\x79\x6f\xde\x2a\x06\x7b\xb5\x39\x32\x7f\x69\x72\xbf\x0d\x13\x88\x92\x85\x5c\x2d\xd2\xb8\xd8\x12\x25\x5a\x30\x01\x8d\x04\xd1\x32\x4c\x57\xa4\x22\x5f\xf2\x49\x8a\x22\x6d\x8b\x70\xfc\x38\xe2\x25\x0f\xf3\x4e\x1a\xb7\xbb\x1b\x46\xcf\xe8\x74\xaf\x8d\xcf\x44\xa5\xbe\x9b\xd4\xb8\xdb\xf0\x5c\xf5\x3a\x7f\x77\xa3\x79\xc6\x46\xbb\x27\x3a\x3f\xbc\x16\xb3\x64\xfa\x5b\xa0\x89\xf7\x32\x28\x0f\x6a\x64\x14\x98\x9a\xe8\xf9\x94\xa4\x5b\xac\x85\x21\x29\x78\x32\xc5\x43\x4d\xa4\xdd\x40\x01\x88\x04\x61\x6c\x93\x62\xec\x79\x41\x00\xd3\x22\xfc\x1c\xea\x2d\x3d\xda\x6a\xd3\xdb\x0f\x27\x8c\x5a\x4a\x14\xea\xbc\x98\x7f\x38\xa6\xc6\xdc\xda\xd9\x97\x2d\xf4\xdf\x79\x3a\xe6\xa3\xd9\x65\x92\xdc\x9a\xf0\x63\xdb\x92\x08\xdf\x71\x01\x30\x24\xc6\x12\x2d\x96\x88\x4d\x31\xf4\xa0\xa4\xfa\x0c\x0f\xa8\x48\x66\x0c\x02\x84\x8a\xe1\x4b\x1a\x32\x10\x4b\xc2\x34\xee\xd2\xab\x17\x1c\x32\x6c\x4a\x87\x25\xd9\xf6\x65\x1b\x7c\x66\x5a\xde\x4a\xf7\x0e\x36\x3c\xd9\x06\xa6\x96\xbb\x93\xf2\xed\xca\x99\x7d\x7b\x3c\x4d\x3f\xd3\x46\xc2\xf6\x84\x15\x42\x2c\x18\x20\xe2\x14\x83\x09\x35\x0a\x7b\xaa\x4d\x2a\x36\xd2\xe9\x10\xbb\x04\xc9\x8b\x9e\x63\xab\x31\x1d\x9b\xb2\x6b\x03\x51\x31\x14\xf4\x1f\x08\xbe\xff\xb6\x84\x7f\xea\xa7\xa7\x36\xce\x9d\x39\xf7\x8b\x96\x70\xe7\xce\xc3\xdf\x1f\xeb\x5e\xd9\xfd\xfd\xc8\x8a\xb5\x3f\xfa\xa6\x69\x81\x0d\xbf\xb5\x35\xbb\x0f\xe7\xf2\x7e\x53\xf9\x93\x47\xe7\xeb\xa7\x9f\xef\x33\x31\x48\x88\x4a\xb2\x30\x50\x49\x4a\x36\x4d\x0e\x09\xa6\x63\x90\x1a\xa7\xf1\x24\x22\xf8\x28\xf6\x60\x0c\x34\x4a\xa3\x25\x53\xf7\x35\x5f\x24\x6d\xcc\x1b\x1c\x91\x46\x8e\xb1\x39\x7f\x8d\x29\xbb\x27\x64\x9a\xb7\x6f\x69\x93\x86\xd9\xab\x95\x20\xca\x2f\xe8\xfc\xdb\xdd\x9f\x8e\x5c\xac\x7a\x7a\x50\xfe\xfd\x46\x6a\x72\xc3\x58\x48\xc5\x42\x20\x2b\x82\x28\x50\x91\x1d\x63\xdb\x31\x18\x23\xe0\x63\x55\x87\xb6\x45\xd2\x84\x41\xd8\x0e\xa9\x7a\xae\xc1\x88\x58\xb3\x35\xc6\x0d\x9c\x34\x4e\x77\x3f\xb8\xd4\xa9\xd5\x8d\x0b\x66\xb5\xb2\xad\x80\x15\x2e\xee\x30\xb3\xf8\x9f\x63\x8b\x7c\xd8\xa9\x64\x77\xa5\xea\xe8\xa5\x57\x17\xd4\xfa\x2d\xb9\x96\x80\x65\x86\xc0\x3c\x27\x38\x8e\x24\xa9\xb4\xe9\x48\x9c\x43\xba\x3c\xed\x48\xb1\x1c\xb1\x2a\xd6\x55\x0c\x49\xd2\x67\x6d\x45\x70\x21\x69\xb1\x40\x88\xd2\x48\x44\x3f\x7d\xbc\xfa\x8f\xba\x2d\x9b\x56\x5a\x56\xfb\x4a\xd1\xb1\x9f\x29\x47\x9d\xf3\xfb\xda\xee\x3a\xb9\xb9\x40\xfb\x33\xc5\x1f\x33\x8d\xfb\x66\x4a\xae\x25\x84\x94\x48\x9b\x56\x88\x21\xcd\xaa\xac\xa5\x20\x86\x73\x1d\x49\x63\xe3\x90\x66\x34\x36\x0c\x11\xa1\xe9\x4e\x2c\x72\x0a\x8d\x42\xc7\x36\x45\x21\x8e\xc2\xff\xb5\x84\xdf\xb2\xfe\xdf\xba\xbd\xa9\x29\x0d\x32\x34\xfd\x2f\x34\xb7\xeb\x87\x76\x1d\x3a\x32\xbb\xe9\xd3\x16\x47\x7f\x2e\xfe\x8b\xdb\x65\xc7\xe9\x36\x87\x6b\xdf\x32\x3e\xeb\xf8\x0c\xed\xf8\xaa\x6c\xcd\x13\x49\x9e\x23\x63\x9d\x60\x18\x92\x61\x78\x89\xa0\x18\x81\xa6\x1c\x3d\x8c\x84\x30\xf6\x2d\x8d\x93\x55\x07\x98\x88\x77\x5d\x84\x44\x8d\x50\x31\xf6\x68\x1b\x3b\x7f\x8d\x3e\x5e\x36\x85\x86\xc5\x6f\x4c\xf7\xb3\x95\x6f\x57\x79\x5f\xc1\xcf\xf2\xbc\xba\xf3\xc2\xa0\xd5\xfe\x1f\xcb\x66\x14\x29\xfc\x5d\x7d\x8e\xaf\x91\xe3\xcb\x2f\x93\x5c\x78\xf2\x61\x48\x08\x2e\xef\x02\x53\x07\xb4\xce\xc7\x5a\x6c\x8a\xbc\x47\xb8\x91\x16\x8b\xac\x6d\xc6\x8a\x2f\xdb\xd8\xf4\x25\x29\xe6\xa1\xc9\xf1\xbc\x03\x12\x67\x74\xb3\xae\x9e\x4d\x09\x7a\xd6\xcd\xf8\x45\xbb\x77\x6a\xde\x3e\x37\xfc\x42\x91\xf9\x1b\x4e\x9c\xce\xf9\xf9\x37\xef\x5a\xec\xc5\x0c\xf4\xdd\xf4\xaf\x90\x25\xd4\x29\x07\x29\xa6\xc8\x30\x98\x45\xb6\xaf\xf2\xae\x49\x62\x97\xc1\x81\x68\x42\x4f\x0c\x10\x74\x80\x20\xf8\x90\x07\x81\x6d\x30\x06\xcb\xe8\x9c\x4c\xa9\xe2\xcb\x73\xe4\x67\x97\x0f\x36\x28\xb9\xa1\xfc\xb6\x0d\xbb\x85\x93\xde\xf6\xa6\x73\x47\x76\xfe\x74\x6a\x9f\x6f\xdf\x9d\x3e\xf2\xa7\x29\x29\xef\xac\x1d\x94\x64\x76\x3a\x31\x00\x3c\x94\x04\x45\x20\x64\x33\x14\x91\x80\x55\x59\x87\x8a\xa7\xf8\xa2\xa2\x43\x43\x53\x23\x21\x66\xb1\x87\xb4\x50\x09\x79\x47\xc3\x2e\x8d\xd2\xb0\xde\x3e\x6d\xd7\x15\xdc\x1c\x2b\xaf\x95\xfb\xae\x45\xf9\x4d\xb0\x2e\x1a\x52\xe1\x78\xf7\xd3\xbd\x86\x15\x5e\xda\xe6\xfd\x8b\xb9\x3a\x9d\xe7\x93\xab\x20\xb1\xa4\x60\x05\xf1\xa4\xef\x08\x84\x4e\x0a\x0e\xe5\xb3\x2e\x0a\x6c\x9d\x89\xb1\x09\x21\x61\x28\x86\x45\x63\x10\x43\x5b\x74\x5c\xd1\x37\x35\x06\x53\x89\xc5\x3e\x75\xf2\xa3\xae\xc5\x3f\xe8\x71\x7b\xfc\xd8\x41\xab\xd6\x8d\xf9\xf5\x9d\x82\x59\x86\xab\x66\xb9\xde\x7a\xab\xfb\xa3\xec\x11\x11\x7f\x33\xb9\xaf\x8d\x54\x49\x23\x19\xd3\x8d\x28\xc1\x8e\x4c\x8e\x16\x44\xc2\x62\x98\xc0\x73\xb1\xa6\x52\x81\xea\xb1\xc8\x02\x2a\xa4\x09\x91\x12\x4d\x56\xd1\x79\x9b\xf8\xbb\xd7\xf0\x47\x8b\xff\xdf\xe9\x6f\xb6\x25\x47\xfb\x0c\x7e\xfb\x21\x75\xcb\x49\x4b\xe0\xfa\x94\x8d\xad\xb6\xba\x9f\xce\xe9\x3b\xe3\x57\x62\xd2\xeb\x17\x9f\x7d\xa8\xa4\xa6\x0c\x7c\xfe\xfc\x2f\x46\xd8\xbf\xff\xa6\x3e\xa4\x64\x75\xf8\x5b\xa3\x59\x44\xca\xe1\x26\x0f\xaf\xbf\xda\xa5\x74\xb9\x57\x32\x1e\xbf\x57\xb7\xd9\xc2\x8e\xf9\x4f\xdc\xfb\xf3\x4e\x72\x89\x25\xa1\x48\x30\x42\x08\x0c\x81\x21\x79\xc4\x20\x23\xc2\xa4\xad\x49\x8e\x89\xcc\x90\x89\x6d\x5b\x51\x68\x0b\x63\x47\xd3\x08\xac\xc8\xb1\x06\x90\xe1\xf0\x52\xe2\xa3\x0f\xb1\x45\x8e\x32\x3f\xf1\xa7\x0b\xe0\x92\xc1\xde\xb7\x1b\x64\xdf\xd3\x55\x3c\x5f\xa9\xf3\xb4\x11\xd5\x46\x64\xea\x79\x15\xb6\x2e\xd5\x26\xc9\xcb\x50\xbc\x23\xe9\x86\x64\xc6\x8a\x49\xcb\x81\x2f\x93\xbe\x1d\x43\x05\xa8\x3a\x43\x2b\x8e\x0e\x54\x5d\xf6\x1d\xc7\x56\x48\xc5\x88\x74\x49\x89\x35\x86\x48\x70\x32\x76\xea\xfd\x62\xa0\xec\x93\x11\xf4\xe9\x69\x0f\x0f\xbe\x5e\x3e\x6e\xb7\xf4\xb7\xdc\xbf\x75\xce\x71\xa3\xf6\xc7\x5f\x2d\x7b\x7d\x71\xd9\x21\x75\x92\x1c\xc5\x10\x27\x10\x1c\xe4\xc8\x7f\x15\x8d\xc0\x42\x2e\x34\x64\x4c\x02\x46\xd6\x31\x04\x86\xc5\x13\x5a\xc0\x53\xb4\x40\x50\x2e\xa0\x28\x14\xc9\x88\x4f\x70\xf4\x71\xcb\x29\x1c\x95\x2c\x2c\x94\x5c\x70\xf0\xb5\x4a\x65\x23\xad\x7e\x9e\xab\xb9\x3f\x6a\xfe\xeb\x91\xe2\x6f\xb7\xfc\xe1\xdc\x91\x66\x3d\xd2\xcf\x66\x94\xb8\x86\x94\x78\xde\x51\x34\x52\x30\x24\xa8\x84\x98\x56\x0c\x5e\x88\x9d\x40\xb3\x18\x3b\x90\x0c\x37\xa2\x78\x4b\x0f\x35\x21\xd0\x62\x32\x64\x34\xda\x53\xd5\x34\x00\xaa\x7b\x3f\x2e\x92\xb7\xc0\xa9\x6c\x7d\x70\x96\x53\x1f\x8c\xb8\xd6\xb6\x4e\x1c\x97\xe7\x6e\xfd\xd6\xfa\x9d\xb3\x5b\x9c\x94\xc1\x9d\x8a\xa4\x1f\xfd\x35\xa1\xd8\x1a\x23\x38\x3a\x1f\x8a\xb4\x80\x19\x4d\x92\x2d\xcd\x93\x31\x76\x05\xc8\x70\x14\xe5\x92\xba\xa5\xfb\x0c\xaf\xc7\x24\x43\x29\xba\xe1\xc9\x34\x13\x28\x09\x56\xde\x07\x6d\x6b\xbf\xe3\x30\xf9\xbc\xf3\x98\x76\xe0\xeb\x36\xd5\xc6\xae\xdc\xf0\xdd\xc9\x32\x87\x4b\x6f\x7b\xbe\x7a\xec\x3e\xa9\xfa\xe1\xed\x6f\x25\x37\xf8\xd3\x02\x81\x39\xc6\x65\x28\xc4\x78\x2a\x43\xf3\xa2\x49\x09\x5e\x0c\x5c\x85\x17\x28\x81\x23\x2d\x9a\x8d\x43\x14\x21\x23\x54\x02\xc4\xd1\x94\x8d\x80\x9b\x78\x1b\x2b\x73\xae\xf3\x37\x4e\x75\xfc\x8c\x38\x56\xff\xdb\xf1\x45\x72\x6c\x75\xc9\xde\x95\x67\xac\xbe\xd8\xfc\xc4\xe7\x7d\x3a\x34\x6e\xf5\xd1\xb3\xf4\xdf\x5e\x25\xd4\x69\x14\x47\x81\x4a\x49\x01\xa1\x3b\x9a\x61\x86\x32\x0e\x68\x0b\x21\x93\xd2\x19\x48\x93\x1e\x6b\x01\x56\x00\x48\xf0\x19\x39\x90\x9d\x90\xf4\xa0\xcd\x92\x2f\xeb\x74\x9e\x8a\x87\xce\xae\x29\xdc\xe1\x51\xd6\xc3\x17\xba\x8c\x3d\xf1\xbe\xfd\xf5\x96\xc3\x3f\x54\xac\xf7\x15\x38\x2d\xd9\x47\xcf\xdc\x71\x92\xcc\x9c\x16\x01\x9d\x75\x68\x05\xeb\xac\x48\xf2\x3e\xe9\x68\x01\x21\x8a\x8e\x19\x6a\x02\xc7\xf2\x41\x6c\x11\x3e\x19\x07\x0e\xcf\x23\x55\x76\xc8\x40\x22\x85\x28\xc1\x45\x50\x97\x4c\x6b\xca\x74\xbf\xc7\xbe\xde\xe9\x8f\xd6\x1b\xe7\x67\xba\xd0\xe1\x56\x05\xa3\x05\x5a\xc5\x49\xad\xb2\x7e\xae\x7e\xdb\xec\x8d\x59\xc9\x75\x76\x50\xf0\x35\x11\x70\x01\xa7\x23\xda\x0b\x6d\x31\x80\x10\x79\x24\x67\x05\xb2\xc0\x70\xbc\x48\x18\x1a\x15\x70\xaa\x12\xf9\xa1\x19\x22\x47\xb2\x22\x98\x46\xd3\xac\xe4\xf7\x41\xbb\xbd\x73\xdf\xad\x3e\x63\x55\xc3\x7d\x55\xa2\x37\x1a\x2f\xda\x74\x7b\x48\x8e\x37\x86\xac\x2c\xcc\x35\x6b\x5d\xbd\x6d\xab\xe4\x7a\x0f\xc8\x86\xc8\x0c\x39\x1e\xc8\x91\x15\x6a\x5c\x88\x4c\x64\x93\x66\x04\x62\xc2\xe2\x02\xcb\x30\x40\x1c\xd9\x06\x49\x40\x47\xe6\x42\x9e\x51\x74\x93\xff\x0f\x6e\x8a\xff\x15\x79\x59\xde\xc6\x1d\xee\x1d\x78\xb6\xea\xfe\x85\x0b\x7b\x4f\x9c\x1f\xf2\x67\xb9\x1f\xdd\xc7\xca\x86\xbd\x3f\xb7\xfa\x22\xeb\x88\x21\x07\x51\x92\x81\x4d\x19\xd6\xf6\x34\x2b\x22\x68\x02\x0a\x54\x2c\x41\x2a\x46\xba\x48\x20\x45\xc1\xae\xa3\x41\x60\x5a\x32\xd4\x3d\x42\x04\x31\x8f\xbd\x90\x33\x45\xdb\x49\x63\xfd\xc8\x29\xd3\xbc\x71\xfe\x35\xcb\x3b\xe4\xdd\xbb\xbe\x1c\x5f\xf7\x2c\xe2\xab\x4f\x15\x26\x0d\xb3\x97\x8c\x9a\xb6\xe5\x1b\xb4\x70\xf7\x9e\xe4\xa6\x58\x42\xa8\xb9\xae\x66\x05\x2a\xeb\x60\xc5\x11\x04\x89\x91\x20\x27\xc5\x12\x25\x00\xd1\x76\x5d\x4a\x37\x11\x47\x9a\xc0\xd0\x40\x64\xb0\x26\x41\x51\x89\x0e\xa8\xbf\x28\xd1\xe5\xc2\x26\xf9\x7e\xdb\xad\x6b\xae\x8d\x6e\x5e\xe1\xa3\x5f\xb3\xcc\xef\x33\xd5\x6a\x3d\xa0\xf2\x97\x27\xb3\x96\xed\x3b\xf7\xf2\xdb\xc9\x55\x0e\xd9\x84\x36\xf4\x60\x6c\x29\x12\x81\xbc\xd8\x76\x4c\xd7\x34\x28\xd9\x87\x48\x35\x78\x01\xd1\x58\x60\x59\x8a\x13\x35\x37\xf2\x2c\x5e\xe2\x04\xf4\x97\x19\xbe\x1c\x5a\xde\xcc\xb3\xb8\xc3\x5b\x35\x3f\xcd\x30\xed\xcb\x4a\x29\x75\xe8\x9e\x07\xd6\xb7\xfe\xe2\x42\xfb\x63\xdd\xf7\x94\xb8\xbc\x7b\xd3\xc7\xc3\xd4\x24\xf7\xaf\x91\xcc\x07\x1a\xa5\xc4\x98\xb6\x14\x89\x64\x68\x47\x8d\x23\xc5\x14\xb9\x20\x66\xec\x58\x85\x3e\x24\x05\x60\x1b\xbe\x61\xb0\x9c\x68\x48\xa4\x1f\x47\x09\xc8\x31\xbe\xbd\x7c\xf6\x5c\xce\xac\x19\x3a\xd6\xcd\x9d\x33\xda\x5d\xb1\xf0\xa1\xaf\xdf\xd9\xf0\x75\xf8\xa0\xe0\x91\x7a\xd7\xcf\xd4\xb8\xb2\x2b\x4a\xff\x01\x75\x42\x9d\xd6\x29\x21\x22\x75\x92\x61\x28\x46\xd5\x74\x29\x00\x36\xad\x08\x8a\x05\x58\x00\xa1\x60\xf3\xba\xa9\x98\xc8\x72\xa1\xc8\x86\xa6\x25\x07\x36\x0d\x5d\x3d\xb1\x4e\xbf\x77\xb3\xf8\x60\xb8\x73\x47\x95\x15\x6d\x17\x8d\x68\x52\xb9\xf3\x27\x07\xdb\xe4\x2b\xf5\xd6\xa6\x05\x79\xde\x9c\x5c\xfd\x4a\x94\xe7\x5a\xfa\x37\xc1\x13\x9f\xf5\x86\xa1\x6b\xb1\x74\x18\x93\xba\xad\x7b\x1e\xe1\x9b\x82\x4d\xe9\x01\x96\x45\x53\x8c\x3d\x5e\x50\x9c\xc0\xe6\x91\x64\x07\x3c\x0c\x0d\x83\x62\xfc\x58\x78\xd9\x7b\xcc\xab\xd3\xf8\x5c\x58\xb4\x18\xae\x9b\xf3\xc9\xed\x16\xf9\xbf\xde\x7d\xed\xec\x3b\x33\xa7\xfc\x76\x6d\x9a\xf1\x7c\xcf\x6b\x35\x4f\xd7\x49\xff\x3d\x44\xe2\xe5\x75\x9f\xf6\x25\x5a\x64\x28\x23\x54\x3c\x1e\x86\x2a\x76\x10\x2d\x91\xba\x21\xf0\x3a\xe7\xf1\x66\x48\x53\x0a\xed\x01\x91\x8b\xa1\x4b\xb1\x86\x67\x44\x69\x80\xe5\x9f\xfb\x69\xf5\xf4\xb6\x47\xb3\x1c\xf8\x66\xe4\xba\x9e\xca\xae\x35\xb9\xc7\x57\xe4\x86\xf5\x78\x3f\x67\x8b\x05\x1f\xd7\x2d\xdf\x70\x8f\x40\x26\xf9\x1a\x99\x51\x65\xd9\x73\x38\x95\x35\x75\x06\x22\x68\xb8\x91\x04\x54\x2f\x88\x63\x1a\x02\x64\x50\x48\x94\x48\x23\x60\x68\x51\xf5\x69\x3d\x14\x24\xa0\xa4\x41\x04\x31\xa1\xcb\x95\xa6\xdf\x2f\x9c\x70\x7e\xfe\xe6\x2f\x57\xec\x16\xce\x96\xa7\xea\x3d\xa8\xd9\xa5\x49\xef\x32\x17\xae\x15\x2f\xba\xfd\xfb\xed\xc5\x92\xbc\x09\xc8\x28\x04\x6f\x52\xa2\x00\x08\xd2\x13\x5c\x10\xd8\x40\x60\x28\x9e\x51\x2d\x33\x16\x49\x83\x60\x75\x99\xe3\x1c\x0a\xc5\xbe\x1d\x32\xba\xc2\x12\x04\x9b\xc6\x26\x60\xdb\x6d\x63\x52\x9b\x2d\xfc\x6d\x79\xd7\x2f\xd6\xd5\x2d\x73\x75\x65\xf1\x8c\xed\x86\x9d\xeb\xc2\x0a\x57\xfb\x37\xba\x5a\xb7\x6b\x8b\xae\x67\x5f\xf8\x93\xf9\xf0\xef\x3f\x6d\x3d\xf7\xf6\xb6\x8c\xe2\xee\xf8\x9b\xb9\x07\x0d\x2a\x4b\xbe\xea\x6b\xda\x6f\x2a\x31\x7b\x40\xaf\xde\xc5\x41\xed\xaf\x93\xdc\x68\x24\x14\x2f\x84\x9e\x89\x38\x85\xf0\x45\xac\x7a\x62\x40\xc7\xb1\xad\x93\xa4\x86\x05\x0b\xf1\x0e\xa7\x4a\x86\xac\x4a\x16\x64\x83\x98\xa3\x03\x46\x31\x12\x17\xcf\x5b\x2a\x8d\xf4\xfa\x83\xf6\x79\x7b\xdd\xab\xf9\xe5\xa2\x1e\xb5\x53\xf2\x8f\x19\xfb\xb6\xf5\xe4\x8d\x75\x39\x7b\x54\x3c\x95\xf1\xea\xd2\x24\xa3\xd4\x28\x72\x20\x53\xb6\x1f\xc8\x36\xad\x92\x3a\x56\x29\xc9\xa5\x09\xdf\x0f\x78\x42\xd0\x19\x27\x20\xb1\x06\x00\xc5\x2b\xd2\xbf\x34\xcf\xf5\x64\x46\xd4\xd2\xba\x61\xde\xd7\xbd\xc5\xe2\xcc\x17\x16\x5e\x29\x46\xcc\x58\xf0\x46\xbf\xdd\x15\xaa\xed\xe3\x0b\xe6\xb9\xd7\x2e\x7f\xb7\xea\x8f\xb5\xf5\xef\x59\xcd\x5f\xf8\x93\x75\xbb\x8e\x59\xfd\xae\x70\xba\x7f\xb9\xca\x9f\x35\x5a\xd5\x76\xd3\xf6\x9d\x9f\x2d\xed\x5c\x7c\xc4\xef\xd3\x2e\xd4\x60\x66\xe5\xbe\xf5\x7c\x7a\x72\xa3\xae\x29\x70\x98\xf2\x5c\x91\xe7\x3c\x96\xf4\x38\x5d\xd7\x65\xac\xa9\x9e\x64\x4a\x31\x09\x0d\xd5\xa3\x65\xc5\xb2\x80\xe5\x98\x21\x10\x7d\x5f\xb5\x94\xb4\xe0\xc4\x7f\xf8\x6a\x75\xb7\x47\x7e\x89\x3c\xeb\xee\xb5\xa9\xd7\xbc\x74\x76\x76\x07\x9d\xb1\xdd\x90\x9f\x07\x0d\xce\x3c\xa5\xe8\x07\x8b\xbe\x6a\x99\xe4\xce\x57\xa0\xca\x1a\x08\x6d\x0a\x63\xa4\xc7\x32\x1d\x42\x05\x90\x32\x2f\xf8\xaa\x4c\xb8\x8a\x6a\x5b\x2e\xe7\x61\x36\x88\x14\x15\x99\x94\x66\x92\xce\x7f\xd2\xf7\xbc\x50\x6a\xf4\x3c\x72\xfc\xca\xb1\x55\x5b\x3e\x7c\x30\x6e\x5a\xf1\xba\xf9\x99\x27\x6f\x3d\x3c\xff\xf8\x24\x1c\x8a\xca\xe6\x69\xc8\x57\x23\xbe\x7b\x92\x5c\x95\xf2\x38\x01\x9b\x40\xf0\x10\x0e\x64\x4a\xd0\x3d\x1b\x48\x4a\x18\x32\x4a\xac\x23\x47\x92\x11\xcb\x39\xba\x6d\x13\x0e\x24\x2c\x1f\x71\x16\x27\x69\x38\x01\x19\xb0\x98\xb7\xe8\xf6\x22\x57\x6f\x9e\x69\x3a\xdd\xff\xa8\x3f\x77\xbc\xc9\xfe\xaa\xcf\x3b\xbd\x71\x92\x9f\x04\xa5\x41\x19\xbf\x28\x90\xeb\x95\x24\xd7\xa1\x5e\x40\x62\x9b\xb7\x5d\x5b\x30\x80\x22\x31\x88\x11\x15\xc6\x60\x4c\x68\x4a\x38\x54\x65\x4e\x0f\x08\x1c\x40\x2b\xd0\x3d\x24\x0a\x0e\x96\x48\x35\x41\x08\xdb\xd5\x7b\xec\xac\xcd\x35\x2a\x74\x2c\x9c\xba\x2a\xcb\xd5\x76\x95\xfb\x9d\xf9\x44\xca\x34\x6e\xce\xac\xe6\x6f\x8f\x2a\x9d\x37\xe3\xd2\x86\x87\x92\x8c\xa1\x45\x84\x94\x1f\xa8\xb6\xe2\x40\xd3\x31\x7c\x52\x30\x80\x46\x28\xba\xeb\x99\x3c\xed\x09\x8a\xa1\x78\x3e\x41\x21\xdf\xe4\xed\x50\xc7\x44\xac\x33\x1c\x4e\x7c\x10\x6c\x8f\x79\x45\xae\x22\xbe\x3d\xfa\xda\xa1\xc7\x0f\xa2\x89\xf9\xbf\x1b\x75\x6c\xc0\x8e\xbd\xfb\x6f\x2d\x9b\xdc\xb7\xb1\x50\x02\xfe\xf9\x28\xb9\x62\x47\x3c\x85\xd5\x48\x24\xa0\x2d\xd0\xb6\x13\xf2\x82\xc6\x45\x34\xe9\x23\x47\x50\x7d\xc7\x0f\x38\xec\x28\xbe\x2e\x72\xa2\x40\xc6\xbc\xe2\x07\x9a\xf7\x1f\x8b\x41\xff\x2b\xf2\xe4\xba\x45\xf2\xaf\x7f\xfd\xeb\x0c\x55\xce\x4d\xf8\x7c\x38\xfc\xf9\x76\xb5\xca\x8f\x7a\xe5\xbf\x39\xe2\xfd\xef\x7f\x09\xab\x6e\x58\xfc\xf4\x72\x92\xef\x3d\x19\x03\x61\x81\xd1\x79\x5b\x75\x4d\x20\x1b\x3c\xb2\x38\x43\x64\x6d\x88\x7c\xd9\x8f\x7c\xac\x1a\x81\x11\x23\x82\x8c\x0c\x44\x50\xaa\x15\x8a\xff\x01\xc2\xf8\x37\x14\x8f\xd4\xbf\xd8\x8e\x7b\x37\xf1\x67\xcf\x1b\xe4\x9e\x9e\xb9\x5c\xfd\x95\x85\xf8\xfe\x33\x36\xdc\x1c\x71\x7b\xd1\x37\xbd\xd9\x7e\x13\x7e\x49\xee\x2b\xab\x44\x68\xe9\xaa\xc7\x33\x21\x1d\x47\xbc\xa0\x50\xa4\x43\x10\xbc\xeb\xc3\x80\x64\x55\x2c\x93\x00\x9a\x80\x88\x29\xac\x10\xa6\x65\xf0\x84\xa2\xab\x4e\x62\xe5\x18\xd6\xf8\x9d\x95\xb5\xcd\x07\x15\x6e\x54\xf9\x3c\xf7\xe8\x2b\xe7\xd6\x8e\x9b\x5e\x51\xfc\xe3\xdc\xa4\xcd\x53\x37\x9c\xed\x7d\xf4\xe3\xd9\xed\x93\x2b\xb6\x22\x22\x1f\x50\x88\x8b\x7c\x8f\x31\x1d\xcf\x54\x30\x44\x0c\x07\x38\x56\x73\xd8\x08\x92\x48\x0a\x68\x1b\xab\xd8\xd0\xa0\x24\x01\x14\xb2\x0c\x9f\x20\x67\x3f\xb8\xb1\xcd\xfd\xe7\x87\x8e\xef\xcc\x3d\x76\x4c\xe9\xe1\x1b\x7f\x6a\x6a\x95\x38\x99\xa9\x53\x34\x68\xdb\x98\x79\x8f\xcf\xfe\x52\xed\x78\xfa\x7b\xe6\x09\x3d\x87\x14\x01\xd6\xc6\x02\xef\x00\x52\x15\x2d\x5f\x06\x82\xe1\xfa\x3c\x43\xfb\xbe\x08\x05\xac\xcb\xa2\x65\x33\x3e\x21\x1b\xac\xa3\x99\xc8\x92\x43\x01\x1a\x2f\x7b\x8e\xd3\x47\x9f\x7d\xea\x34\xc9\xc4\x3c\xeb\xf5\xda\x23\xff\x4e\xbe\xc6\x1f\x1a\xcb\x86\xf5\xfa\x7d\xf4\xfd\x02\xcc\xad\xc2\xfb\x5b\x7c\xb0\x39\xc9\x78\xe4\x2c\x2b\xe8\xff\x03\x2a\x66\x6a\x52\x28\x58\x2a\xa7\x2a\x34\x6b\x07\xae\x1d\x3a\x32\x4f\x68\xa6\x6e\xb2\x02\x47\x12\x9a\xa5\x9a\x10\x31\x10\xb0\x72\xe2\x0e\xd6\x94\x54\x91\x38\xf0\x8a\xda\xf5\xed\x26\x4f\x1a\xe7\xa9\x94\xa7\xe3\xe0\xe1\x4b\x4e\xd1\x7b\x99\x01\xbb\x4f\xbf\xd6\x30\x1f\xf7\x3c\xfd\x99\x4a\xe2\xbb\x7c\xcd\xd4\x7c\x52\x8d\x24\x23\xa4\x18\x4e\x0c\x78\x8d\xf4\x3d\xdf\xc0\x14\xcf\xba\x8e\xec\xa9\x06\x44\x86\x19\xdb\x1c\xcb\xc5\xa4\x0a\x82\x08\xc4\x09\x10\x3d\x16\xfe\x79\x3f\x6b\x98\xe7\x7c\xab\xc7\xd7\x1b\x65\xac\x98\xe3\xc7\x96\x99\x9b\x13\xcb\xfa\x0e\x2c\xb4\x7e\xc4\x7a\xa3\x99\x76\xee\xf5\x24\x73\xb1\xb2\xb1\x2d\x8a\x2e\x19\xf0\x26\x94\x35\x8d\xb3\xad\x98\x66\x78\x9a\x14\x23\x5b\xe3\x0c\xc5\x92\x1d\x05\xb9\x8a\x12\x61\x11\x98\xa1\xa4\xbb\x98\x71\x13\xdc\x13\xae\xbf\x56\xed\x93\xc5\xbb\x1f\xa7\x6e\xfe\xf9\x54\x2b\xaf\x25\x51\xed\xab\xf5\xc1\xa2\x76\x45\x8f\x17\x5d\x57\xe4\x51\x11\xbe\x54\xe6\xf4\x6f\x5e\x27\x86\x96\x8a\x10\xc5\xca\x52\x60\x92\xb1\x26\x02\x99\x0e\x62\x2b\xa2\x62\x23\x92\x28\x4a\x8c\x25\xc6\x95\x31\x65\xd9\x21\x06\x92\xc0\xf8\xa6\x06\x62\x87\x8b\xd3\x80\x4b\x6b\x5c\x7b\xd1\xda\xaf\x7f\xac\xe6\xec\x28\xbe\x7f\xdd\xa8\x42\x6b\x9b\x1d\xdc\x32\xb2\x45\x1e\xaf\xe8\xf6\x8b\xef\xce\xe2\x7a\x6d\xaa\x9a\xe4\xa3\x16\xde\xa7\x7c\x8d\x8d\x0c\x95\x76\x28\x99\x62\x23\x13\x50\x26\xe5\x09\xae\x0f\x63\x4a\x67\x4d\x32\x04\x9e\xa5\x13\x91\xa7\x9b\xa1\x21\x93\xb6\x44\x24\xf0\x1c\xfb\xeb\x56\x6f\xd0\x3a\xd7\xb1\x2c\x43\xd8\xd9\x6e\xdd\xc6\xc7\x4b\xce\x29\xd9\xb4\x44\x3e\xcd\x1d\xf2\x61\xf5\x42\x73\xea\x5f\xe9\x9a\x64\x7a\x3c\x47\x92\x44\x92\x53\x79\x09\xc6\x3c\x87\x44\x9e\xf6\xb8\x88\xb0\x22\x60\x0a\xaa\xe2\x79\xb2\xa5\x93\x84\x6e\x00\xc6\x24\x29\x9f\xf1\x21\xd2\xed\x17\x96\x36\xff\x33\xf3\xbe\xfe\xb6\x9f\xe9\x6d\xaf\xe2\xdd\x93\xa3\xce\x6f\x7f\x64\x54\xaf\x3d\x75\xff\x0f\x37\x51\x93\x7c\x1b\x2f\xd5\xaf\x91\x67\xc5\x83\x0d\x1f\xbf\xf0\x5d\x5e\xed\x31\x7b\x5d\x36\xb4\xbe\xee\xac\xf3\x97\x0b\xe5\xac\xb6\x1c\x6d\x5c\x3f\x40\xea\x50\xe3\xb2\xb3\xaa\xd4\x82\x19\xad\x1e\xdf\x9c\x9b\xe4\xaa\x28\x22\x24\xf9\x5f\xca\x13\x52\xaa\xa5\x8b\x12\x30\x0d\x55\x01\x66\xc8\x20\x48\x2b\x1c\x6d\x2a\x36\x2d\x42\x85\x0f\x43\x2a\x88\xf5\xd0\x67\x49\x47\x7b\xf9\xbb\x74\x58\xdd\xf5\x5b\x6d\x44\x8f\x69\x6a\x73\xf4\xd6\xf5\xce\xfa\xa4\xa6\x61\xca\x82\x19\xfd\x3a\xfb\xc7\x0a\x37\x1e\xb7\xb4\xd3\xf5\x4d\x49\xc6\x4a\x90\x39\x51\xb3\x0d\x59\x8e\x3c\xa8\xdb\x84\xad\xf9\xb2\x20\xd2\x4e\x18\x05\x66\x8c\xa3\xc0\x12\x44\x52\x76\x3d\x09\xb1\xa6\x19\x4a\x8a\xa9\xdb\x36\x9d\xb8\x87\x9b\xa1\x0e\xfa\xba\xc9\x47\x77\x4e\xd6\x59\x70\xa9\xc8\xa5\x4c\xa5\xab\x14\x9b\x30\xe1\x8d\x53\x2d\xf5\xd3\xba\x3c\x70\xfc\xa8\xbd\x83\x66\x26\xd7\xab\x4b\xae\x2f\x1a\xa2\xac\x9b\x66\xec\x08\x21\x4f\x70\x22\x32\x25\x49\x02\x01\xd0\x79\x40\x9a\xa6\x1d\x38\xc0\xf4\x23\xda\xd0\x2d\x53\xf0\x6c\xc3\x64\x13\xa4\xb0\x9f\xb6\xe6\xe7\xfe\x7c\xa5\xf9\xea\xeb\x9f\x69\xf9\xfb\xdd\xcf\x37\x79\x54\xc7\x71\xcd\x97\x3d\xb9\xb6\xb2\xbe\x5c\x38\x5b\x8b\x6a\x6e\xb6\x24\x77\xcb\x59\x4d\xd5\x35\x18\xd9\xbc\xa4\x2b\x52\x8c\x30\xad\xf1\xd8\xd3\x54\x5e\x52\x15\x83\xe5\xb5\xc8\x70\x0d\x0f\x06\xa1\x01\x05\x9a\xe3\x3d\x8d\xc0\x64\xe2\x97\x6e\x3a\x7e\xc9\x97\x25\x61\xb0\xb8\x80\x9e\x6b\x44\xf5\xb1\x83\xaf\x94\x6c\xd9\x6c\x5f\xe1\xb1\x3b\x3a\xff\xd2\x63\x70\x8b\x3e\x4e\x4a\xa5\xe4\xbe\xb4\x0e\x23\x56\xc6\x3e\xc7\x21\x5d\x37\x35\xde\x62\x68\x43\xd2\x82\xc0\x03\x3a\x0d\x23\x5a\x91\x0c\x51\x57\x4c\x23\xb4\x6d\x53\xa2\x43\x57\x11\x6c\xc8\xbe\xfc\xd2\xdf\x1e\xfd\xe9\x87\x07\x23\x2e\xcb\x9f\x0c\x3f\x7d\xa9\xed\xf5\x33\x35\x6a\x9d\x9c\x53\xb9\xf6\xf2\xf7\x5b\x9c\x19\x5d\xa2\x79\x91\x36\xb7\xd2\xcf\xe5\x91\x98\x98\xca\xe0\x15\x0a\xd3\xb2\xce\xc5\x9a\xc6\x38\x9c\x26\xa8\xd8\x10\x03\xa8\x50\x0e\x0c\x1d\xc9\xd2\x62\x5f\x03\xac\x60\xe9\x82\xe8\xbb\x8a\x63\x48\x4e\x1a\x24\x42\x4d\x86\x8e\x69\xde\xf4\xbd\x0e\xbf\x36\xcf\xd1\x2d\x63\x96\xd1\x2b\xe6\xd0\xa7\xea\x77\x3b\xf5\xe1\xb7\x47\x97\xd4\x8a\xb2\xde\x1f\x53\xc3\x4a\x32\x60\x83\xfe\x3f\xf7\xaf\xb4\xeb\x19\xa6\x4d\x4a\x88\xa0\x3c\x0e\x7a\x2a\x8c\x65\x13\x43\x3e\x00\x32\xe9\xf1\x28\x50\xb8\x58\x8b\x3d\x03\x11\x00\x45\x7a\xe2\x45\x9b\x1a\x2d\x73\x15\x6a\x65\xaf\x06\x59\x87\xad\x5b\xf1\xda\xc8\x61\xd7\xfb\x17\x6b\xb4\xf4\xf0\xe5\x9d\x3d\xb7\xca\x83\x37\x9e\xc8\x91\x31\xc9\xad\x20\x5a\x8c\x2d\x25\xc6\x34\x01\x15\x93\xd0\x02\x8a\xc7\xac\x27\x51\x88\xd7\x7c\xd9\x94\x38\x27\xa2\xc9\x88\xf2\x80\x63\x40\x9d\x90\x21\x89\x3d\x8f\xc7\x69\xf4\xbb\xfa\xd7\xcc\x5f\x1f\xb6\x3f\xfe\xfd\x37\x25\xe6\xb3\x4d\x76\x16\x1a\x9b\x27\xcb\xe9\xeb\x6d\xf6\xb4\xf1\xd7\xac\xca\x7b\xbd\x60\xb1\xda\x7f\xbc\x08\xde\xd3\x70\x49\xdd\x25\xb7\x98\xcb\x29\x6f\xaf\xe0\x5f\x4d\x79\x5e\xf1\xc4\xd6\xce\xbd\x1a\xcd\x2e\x35\xf6\xf5\x9f\xde\xa2\x87\xbb\x47\xe5\x24\x27\xbe\xc8\x92\x78\x45\x8a\x90\xa6\xe8\x80\xa6\x10\xcd\x9b\x06\xa5\x1b\x3c\x23\xd0\x0a\xc3\x84\xb6\xe9\x07\x81\x65\x32\x58\xd0\x54\x96\xf4\x15\xa4\x11\x69\xcc\x41\xb3\x87\x1f\x3f\xd3\x8a\xe4\x08\xde\xfa\x75\xe3\xde\x42\xfe\x47\x63\xee\x15\x95\xe6\xce\xf8\xe1\xa0\x57\x79\xd0\x86\x8a\xcb\xb6\xfa\x49\x6e\x05\xe9\xa4\xcd\xd1\x32\xe4\x55\x87\x50\x1c\x97\x50\xa1\x11\xbb\x11\xab\xd1\x84\xc6\xa9\x64\x8c\x25\xc3\x8a\x2d\x4f\x92\xa1\x6d\x13\x1c\x45\xca\xa4\x12\x33\x2f\x07\xa4\xec\x23\xbe\x28\x92\x6d\xe9\xb4\x71\x6f\x14\x38\x35\x3d\xcf\x9f\xdf\x67\x54\xdd\x82\x03\xa6\x77\x7d\x3c\xbf\xc0\xd7\xf5\x6f\x0e\xf8\xbc\xd0\xc2\x24\xe3\xc2\x11\x4a\x10\x1b\x2e\xc4\xa2\x4a\x72\x82\xca\x08\x86\x2d\x38\x24\x54\xe2\x90\xa6\x3c\x9b\x14\x04\x56\x82\x8e\xa4\xab\x02\x26\x44\xc1\xf7\x41\xcc\x52\x2f\xfb\x9b\x94\x82\x9f\x15\xdb\x91\x6b\xef\x91\x81\x53\x19\x50\x7a\xcd\x94\x0f\xd5\xa0\xd3\xcf\x95\xee\xce\x5f\x36\xf0\xec\xac\x15\xe7\xfa\x5e\xe4\x92\x6b\xb8\xa4\xed\x22\x0c\xf4\x28\x76\x19\x04\x6d\x2c\x72\x96\x17\x98\x26\xad\xb2\x9e\x20\xc4\x32\x6b\x70\x82\xcb\xb0\x84\x4b\x3a\xb2\xa5\x32\x0c\xe9\xb1\x4a\x1a\xeb\x08\x99\x0a\xdc\x9a\xd8\x7c\xee\x5b\x05\xae\xb6\xfc\xba\x7c\xed\x16\xdd\xf4\xab\xb9\xc2\x92\xe7\x79\x61\xde\x27\x08\x94\xa8\x5d\xb4\x57\xfa\x91\x9d\x12\xf3\xbc\x50\x74\x84\x54\x36\x0e\x02\xc4\xc4\x76\xe8\xb8\x61\x2c\x2a\x6c\x44\x6a\xb4\xa6\x39\x96\xc4\x33\x1c\xf2\xc5\xd0\x74\x18\x46\xc7\x90\x90\x45\x0b\x51\x2f\x2b\x47\xb6\x4f\xc6\xbe\xae\x1d\x5b\x33\xb8\x5f\xae\x55\x35\x6b\x6d\xc8\xfa\xc3\xa2\x0a\x2d\x0d\x97\xfa\xe9\xf9\xbc\xcd\xa3\x0f\x7c\x38\x7f\x44\x92\xc1\x2e\x64\x8a\xe7\x25\x4b\x17\x09\x8d\xc5\xb4\xa5\xc8\x76\x08\x69\x5b\x30\x03\xc5\xf4\x48\x1b\x2a\x91\x28\xb2\x0e\x81\x3c\xda\xb6\x0d\x14\x50\x9c\xe9\xe2\xbf\x27\xce\xff\xbe\x07\xfd\xa7\xae\x7a\x6a\x4a\xa6\x3c\xaf\xfc\x17\xfb\xe6\x17\x1f\xb8\xf7\x8f\x0c\xfd\xd5\xb1\xa6\x1c\x29\x59\xd4\xed\x37\x69\x55\xbb\xbd\xfb\xa7\xf7\xb9\x58\xa9\xc4\xa3\x6a\x7f\x92\xcd\xfa\xe7\x4b\x6e\x55\xc2\x39\xbc\x4a\x2b\x2c\x4d\x78\x3c\xaf\x28\x26\x67\x68\x8a\xa2\xb3\x8e\xeb\x89\xc0\xb2\x63\x26\x56\x6c\x89\x8f\x68\x33\x00\x4c\x18\x86\x5e\x14\x52\x76\x1a\x3c\x18\x1d\x83\xdf\xf2\xe5\x9e\x9f\x69\xce\x07\x83\x3e\x2e\x3d\x73\x18\x3d\xe0\xf6\x7b\x17\x4a\xb5\x2f\xbe\x91\x1a\xd6\xe6\xc7\xaf\x46\x3e\x5b\x9c\xfe\xce\x51\x62\x7d\x0a\x11\xef\xc5\x88\x97\x80\xe1\xfb\x21\x1b\x91\x31\x15\x73\x51\x48\x88\x8a\x0b\x21\x1b\x7a\x4e\x40\x8a\x10\x1b\x42\x84\x25\x91\x25\x48\x14\x47\x62\xe2\xb0\x5b\xe0\xe2\x7b\x98\x1d\x35\xae\x58\xe1\xf9\xef\x4e\x5e\x46\xd4\xa8\x56\x3e\xf5\x72\xf5\x5d\x6c\xd8\x37\x65\xe2\xa8\xd7\x5e\xab\xb6\x6e\x4d\x72\x5f\x1b\xd3\xa1\x40\xb3\xb2\x1a\x8a\x84\xae\xb0\x84\x1d\x52\xa1\x61\x68\x46\xa8\x4a\x62\x6c\xaa\x11\x6b\xfa\x8c\xc7\x60\x56\xb2\x6c\x2a\x42\x56\xac\xa2\x38\x48\xfc\xda\x39\xb9\x42\xeb\xd7\xae\x58\xbf\xd2\xaf\x5e\x5f\x3d\x92\x63\x63\xd7\x7a\x37\x07\xaf\x4c\xe9\x3d\xf6\xb5\x31\x6b\x6b\x34\x7e\x50\xad\x7d\xfa\x37\xcd\x12\xf3\xe7\x06\xc8\x23\x69\xd5\x20\x15\xdb\x06\xa2\x24\x47\xa4\x6f\x40\x85\x06\xbe\x12\x87\x94\x6b\x21\x09\xb8\x34\x47\xba\x9a\xe5\x88\x0c\xe6\x09\x89\x51\xd2\xe0\xe3\x18\x3c\xeb\x64\xfb\x3f\x97\x9f\x59\xbf\xf7\x93\x47\xcb\xe5\xa2\xf1\xee\xdf\x9e\x0f\x6f\xd1\xff\x49\x8e\x8b\x9b\xbf\x3f\xd3\x60\xea\xbc\x30\xb9\x83\x6a\xc8\xc5\x92\x20\x63\x4b\x95\x2d\xd9\x87\x21\x43\x48\xb1\x12\xeb\x32\xcb\x45\xbc\xc2\xd2\x4e\x2c\x08\x96\x20\x98\x12\x4b\xf9\x9a\x24\xd0\x26\xb6\x39\x45\x7b\xe9\x1e\xf4\x9f\x66\x2f\xa9\x8d\x5f\x19\xb4\xed\xc5\xeb\x01\x3e\x3a\xa7\x17\x28\x93\x9d\x29\xdf\x98\x2a\xdf\xe2\x78\xb6\x5c\x75\x97\x57\x5b\x33\x67\xc9\xc2\x41\x6b\x07\x17\x6f\xbb\xf4\xdb\x71\x5d\x92\xbc\xf7\xe0\xaa\xc0\x8b\x95\xd0\x60\x03\x47\x40\x2a\x89\x19\x15\xc6\x64\xa0\x48\x92\x29\xe8\x38\x92\x2c\x02\xb0\xc0\x25\x42\xfa\xff\xb1\xf6\xe6\x71\x3b\x55\x7b\xff\xb8\x10\x32\xcf\x43\xc8\x14\x32\x85\xbd\xf6\xda\x9b\xc8\x78\x3b\x11\x4a\xa2\x44\x83\xb5\xf6\xb8\xf6\x3c\x4f\xca\x3c\x95\x59\xe6\x79\x16\x22\xc9\x90\x64\xc8\x90\xb1\x44\x66\x22\x65\x8e\xcc\x21\xd3\xef\xd5\x39\xbf\xf3\x9c\x3c\xae\xfb\x75\x9e\xd7\xfd\xbd\xfe\xbf\xfe\x58\xd7\xda\x9f\x79\xbd\x3f\xef\x37\x47\x05\x16\x62\xe2\x00\x67\x02\x2d\xad\xfc\xf4\xf3\xf9\xce\xbc\xbd\xbc\x6a\xf7\xd7\x97\x15\x8f\xf3\xcd\xca\x7b\x35\x47\xb9\x82\xe5\x5e\xdb\x70\xe6\x4f\xa9\xd5\xcd\x3f\x0e\x4f\x3a\x9c\x66\x76\x25\x89\x51\xf9\xd8\xf0\x14\x29\x80\xb4\x66\x31\x76\x18\x8a\x02\xe0\x24\x43\xb0\x78\x5a\x09\x3d\x57\x72\x7d\x9e\x67\x23\x43\x33\x28\x62\xc6\xbe\x87\x33\xd9\xa3\xa9\xba\x67\xc6\x91\x43\xf9\x3e\x5e\xb6\xe7\xd9\xad\xfd\x27\x55\x6a\xd2\x3b\x29\x5a\xbf\x71\xd7\xd2\xd3\xff\x51\xf0\xbb\xb3\x93\xc2\x59\x93\xb2\x2e\x3a\x92\x32\x29\x98\x90\x50\x91\x49\x6c\x35\x08\x5d\x28\x1a\x5c\x1c\xe9\xc4\x02\x32\x1b\x63\xd5\xe2\x22\xd3\x32\x13\xc6\x96\x14\xcf\x43\xb4\x40\x1b\x6c\xc4\x5b\x5a\x26\xf8\xe3\xab\xd9\xdb\xe7\x7f\x7b\xe2\xe7\xfc\x6b\x85\xba\x3e\xb8\xdb\xa2\x7b\xf7\xbe\xef\xf7\x78\xb2\x02\xf9\xb8\xf6\xf8\x49\xb7\x8f\xb5\x5e\xb4\x3b\xeb\x71\x27\x13\x01\x6c\x8b\xc2\x11\xf2\x65\xd1\xb3\xa0\xe7\x42\x49\x35\x4c\x3d\x4a\x28\x62\x86\xae\x03\x09\x8c\x08\x89\x23\xec\x9b\x24\x66\x15\xd7\x16\xd5\x58\x45\x8f\xed\x83\xfe\xb7\x59\x48\xdf\x8c\x22\xd9\x66\xfc\x93\xe6\xe3\x3f\x45\x86\x71\x68\xfc\x2f\x8d\x66\xb3\xf5\xfd\x7d\x3b\x5a\x96\xad\xf9\xa2\x75\x72\x1e\x97\xfd\xc2\x85\x36\xe6\xe2\x01\x9d\xfe\x68\xac\x1f\xcd\x3a\x93\x6b\xca\xe8\xaa\xfb\x0e\x8c\x38\x05\xd9\x11\x07\x08\x0a\x20\xe5\xfa\xb1\x6a\x4b\x4e\x88\x79\x4a\x33\x38\x43\x72\x60\xac\x68\x26\x91\x59\x88\x74\x39\x09\x3d\x0e\x3e\x3e\xc7\x3c\x79\xf4\xf2\x44\xa9\x49\x45\x7a\xcc\x89\x4f\xc6\xdd\x1d\xe5\xd7\x18\x31\x7b\x5c\x0d\x63\xf3\x9f\xdf\x8f\xff\xa2\xd9\xea\x65\xc1\xa2\xf4\x32\x5e\x22\x98\xc4\x41\x40\x47\xa1\x26\xaa\x9e\x86\x7c\x5b\x10\x6c\x4e\x51\x62\xdf\xd2\x2c\x3e\xf6\x2d\x3a\x11\x89\xe4\x78\x1e\xa4\x03\x94\x44\x32\x6b\x48\x24\x93\xf4\x5b\x66\x4f\x8e\x4f\x8c\xe5\x4f\xce\x58\xb4\x79\x45\xb3\xf7\x7b\x34\x7d\xb1\xfc\x84\xe9\x6f\x2d\xbb\x59\x7b\xec\xc1\x8d\xbb\xba\x6c\x30\x3b\x66\x5d\x43\x21\xf5\xb1\x09\x4b\x49\x0a\x13\x04\x10\xf9\x74\xc0\x02\x5d\x0e\x7c\x5b\xc1\x92\x04\x0d\xd1\x34\x55\x37\x8e\xa5\x00\x87\xac\x08\x61\xa8\x8b\x12\xaf\xb9\x0a\x49\x7d\xec\x5f\x1f\xbe\xd5\x61\xf3\x15\xb1\xdc\xca\x8a\xf3\x6f\x8f\x7e\xa3\x27\x28\x37\xa5\xe6\x88\x6c\xe5\xa7\xe4\x1e\x90\xf3\xe5\x76\x2b\x97\xb6\x9e\x9d\x66\xaa\x5f\x49\x53\x88\x24\x5a\xae\x45\x05\xb2\xef\xf0\x90\x71\x35\xce\x89\x00\x10\x14\x5a\x60\xa4\x28\xe2\x64\x1d\x18\x40\x30\x03\xc2\x99\x89\xc0\x02\x97\xcf\x64\x7b\x60\x51\x9b\x1e\x1f\x75\x10\xb4\x42\xdf\xe0\x89\x3b\x5f\xa9\xf6\x3c\x35\xbc\x66\xe9\xc6\x03\x2a\x95\x7c\x72\x7b\xcf\xcf\xa4\xe1\xe7\xcf\xa7\xf7\xb6\xe5\x58\xf4\x19\x8b\x56\x54\x3b\x8c\x58\xd9\x94\x4c\x20\x08\x12\x1d\xd1\x0a\xc4\x89\x69\x05\x71\xa4\x05\x42\x6c\x51\xaa\x48\x27\x80\x0d\x20\xef\xaa\xc2\x63\x24\x3d\xff\xad\xdf\xed\x9b\x91\xa3\x7f\xb6\xff\x45\xd2\xd3\xeb\xdb\x65\x43\x06\x9e\x3e\xf8\x69\xfd\x32\xb7\x72\xe5\xda\x9a\x63\x45\x78\xfa\x9b\xda\xab\x73\xff\xc8\x56\x3f\xf0\x67\xd7\xae\xcd\xb4\xae\xe9\x8d\x51\x14\xcb\x02\xd6\xd3\x05\xc3\x89\x38\x23\x8c\x3d\x1a\x3a\x90\xf7\x42\xac\x58\xc8\x10\xec\xd8\x42\x01\xf1\x79\x0b\x10\x93\x0f\xfc\x38\x94\x12\x11\x65\xa2\x9e\xb5\x7c\xc2\xe5\x2b\xd6\x99\x0a\xef\x3d\x71\xee\xf7\x0a\x8b\x3e\x1e\x75\xe8\x7e\x77\x78\xe3\xbb\x53\x5f\x94\xdf\xb2\xb9\xd8\x13\x1b\xdb\xa5\x59\xcc\x15\x33\x86\x93\xe8\x40\xe2\x80\x85\x6d\x8d\x24\x00\x27\x92\xa5\x53\x22\x0b\xec\xc4\xb1\xe4\x20\x96\x75\x41\xe0\x55\x8e\xd7\x08\x08\x88\x89\x03\x5b\xcd\x64\x65\xa9\x48\xaf\x17\x3e\xb9\xd9\xfe\x97\xf1\x07\xc2\x37\xba\xb9\xbf\x8f\x1c\xfc\x59\x85\x57\xde\x5c\x7e\xb3\x6c\xde\xe2\x9b\x1b\xbc\xb3\xce\xce\x96\xf5\x07\x94\xd4\x0c\x01\x09\x56\x55\xdb\x47\xa2\x16\x6b\x22\xc7\x00\xdb\x17\x12\x17\x2b\xbe\x9d\x84\x08\x39\xd0\x8e\xc4\x44\xe4\x13\x0e\x8a\x3a\x22\xa1\x65\x99\x2c\x95\x09\xa1\xca\xee\xcf\x3f\x9a\xb2\xed\x56\x45\x77\x40\x81\x61\x4b\x44\x21\x27\x11\xde\xdb\x55\xd0\x9d\x51\x8d\x3e\x58\x61\xfb\xbc\x91\x47\x3b\x66\x5d\x90\x28\x13\x62\x63\x3f\x0a\x03\x59\xf2\x78\xda\x16\x35\xd6\xf2\x42\x89\xd1\xad\xd0\xf0\x7d\xcb\x64\x6c\x84\x09\xd6\x2c\x24\x33\x0e\x46\x38\x0a\x24\x5f\xd3\xc8\x7f\xf8\x98\x07\xbf\xfe\xaf\x13\x57\x63\x27\xda\xee\x8a\xa6\xdf\x49\x3f\x3e\xb3\x7e\xc6\x07\xcd\xdf\x4b\xde\xae\x53\x65\xd5\x92\xa2\xed\x17\xb1\x37\xca\x14\x1e\xf5\x4a\xf3\xbe\x19\x0f\x1f\xf6\xba\x3b\xe1\x99\x47\x32\xd9\xbe\x53\xef\xb8\xdf\x8d\x78\xe6\xeb\xaa\x8b\x3a\xd4\x51\x09\xb5\x31\xe3\x80\x73\x8f\x55\xab\x95\x7a\xfb\x97\x8e\xb3\xca\xad\x7f\xb6\x4d\x7a\x3d\x9e\x09\x64\x22\x49\x14\xb6\x2d\x4e\xf3\x38\x93\xc4\xbe\xce\x53\xa6\x01\x80\x0c\x11\x13\x0b\x94\x0c\x2d\x27\xe4\x61\xa4\x29\x02\xd0\x29\xc9\x48\x70\xf8\x78\x26\x3b\x51\xfc\x23\x67\x55\xc3\x07\xd5\xfb\x24\xdb\x70\x3b\x6e\xc5\x82\x8e\xd5\x5f\x1f\x5d\xa7\xf3\x6f\x77\xeb\x3c\x1c\xf6\x76\xdb\x2a\x5f\x66\x7d\x6a\x95\x3a\xb6\x12\x21\xd6\x75\x21\x30\x04\x8d\xb1\x34\x9f\x24\x96\x87\x4c\x25\x88\x88\x02\x58\x51\x8c\x0d\x48\x39\xa2\x12\x18\xbe\x6e\x33\x50\xf0\x54\x85\x55\x33\x19\x39\xbb\x3d\xf6\x5e\x7f\xf9\x1c\x5f\x79\xf1\x8e\x4a\xa3\xab\x9d\xf9\xea\xc4\xaa\x1e\x83\x5f\x99\x70\xef\xa7\x99\xa5\xba\x38\x0b\xa5\x7d\x93\xb2\xfe\x56\x94\xba\x7c\x06\x82\x8c\xe5\x48\x52\x69\xce\x8a\x90\xc5\x40\x4a\x22\x80\xc8\xb1\x43\xb9\x4e\xe0\xd0\x84\x89\x23\x22\xdb\x36\xd6\xc2\x20\x8e\x13\x2b\x35\x6c\x78\xcc\xcd\x3b\xb7\x8a\xe8\xc3\x0e\x4c\x3d\xfe\x8e\xb1\xa4\xdb\x9c\x9f\x4e\xb4\xbd\x7b\xf3\xe8\xa1\x07\xf9\x9e\x5e\xb7\xe2\xc3\x05\xad\xee\xb6\x4a\xef\x91\x55\x9b\x8a\x68\x8a\x8b\x6c\x9d\xf5\x01\xed\xeb\xba\xc4\x53\x4c\x08\x75\xd9\x54\xad\xd8\x76\x15\xce\x55\x35\x9a\xa6\x3d\x8b\x0e\x30\x4d\xf9\x26\xb0\xe5\xd4\x37\xfd\xca\xe8\x95\xe7\x9b\x0e\xe3\x27\x0c\xf9\xd4\x7d\x3b\x9c\x51\xb3\x77\x8f\x89\x13\x26\x2e\x9b\xaa\x7d\xd1\xa3\xfb\xe1\x1a\x39\x5b\x2e\xcc\xfa\x33\x4a\x6a\x69\x74\x28\xa3\x00\x98\x14\x23\xfb\xbe\x92\x60\x6c\xb2\x10\xf8\x5a\x20\x19\x4e\x42\x1b\x09\x64\x35\x3b\x22\x8a\x1f\x3b\x48\x13\x7c\x9f\x02\x81\x81\xfd\xc7\x6f\x7a\xd7\x44\x53\x28\x58\x78\xf0\xce\xf0\xe0\x2f\x83\xcb\x34\x2e\x72\xe4\x46\xb5\x8f\x72\xcd\x5b\x70\x78\x8f\xf5\xe2\x81\xf7\x5f\x1f\x5f\x20\xeb\x84\x42\xa9\xd1\xfb\x5e\x10\xd1\x92\x69\xd2\x8a\x13\x07\x96\x67\xf0\x81\x69\x71\x91\x47\xf4\x28\x30\x90\xef\xe8\x21\x92\x75\x8e\xf0\x36\x92\xdc\x90\xe7\x15\x86\xa6\x50\xea\x20\xf9\xc1\x84\x9c\x13\x85\xdc\x9d\xf6\x56\xfb\xed\x09\xe9\xf5\x77\x82\x87\x6d\x26\xd7\x2f\x3a\xba\xdf\xaa\xb1\x9b\x2b\x1f\xe8\x7f\x77\x45\xb1\x34\x73\x7c\x49\xb1\xe6\x47\xaa\x87\xb1\xaa\x58\xa1\x27\x50\x00\xc9\x1a\xa6\x05\x05\x04\x96\x61\x53\xfe\x5f\x7d\x16\x66\x02\x15\x06\x32\xef\x05\x46\xa0\x08\x1c\x4c\x6d\x20\x4f\x4d\x9f\x7b\x72\x37\x5f\xb9\xdc\xe8\x86\x23\x76\x2d\xbb\x97\xb3\xea\xc5\x87\xea\xb7\x27\x27\x97\xfe\xf5\xd0\x90\xa2\x42\xb3\xb5\x27\x40\x7a\x53\x12\x97\x48\xba\x97\x58\xb6\xcc\xd0\x61\x98\x78\xa6\xa6\x38\xb1\xe8\x11\x09\x20\x0e\x5a\x7a\x6c\xab\xbe\x10\x28\x1e\x74\x9d\xbf\x0a\x1c\x60\xc7\xb4\xad\x3c\x3e\x8d\x7d\xbd\xf0\xce\xd2\x6d\x6a\xfe\x32\x73\x7a\xbd\x03\x7f\xf6\xb7\x84\x5d\x27\xc9\x0b\x9f\x5f\x99\x50\xe2\xe3\x31\x95\xec\x41\x97\x47\xd7\xcc\xfa\x84\x21\x75\x9c\xf6\x03\x1f\xab\x3a\xe5\x19\x9a\x6a\xca\x14\xab\xd0\xac\x1a\x62\x5d\x31\x90\xa2\x20\xe0\xd3\xaa\x12\xbb\x92\x20\x26\x48\x94\xe2\x24\xb1\x79\x89\x64\xb2\x2b\x51\xa1\x94\x5d\xac\xcd\x5d\x91\x79\x7e\xd1\xde\x3b\xeb\x3f\xd8\xf3\xc1\x6f\xb7\xbf\x39\x93\x3c\xe8\x3d\xbc\x4b\xbe\xef\x2b\xbc\xde\xff\xc3\xca\x69\xde\x81\x27\xbe\x2f\xc8\x34\x05\xb5\xc8\x37\x44\xcb\xb0\x08\x6d\x13\xc3\xd0\x01\xb2\x01\x06\x9a\x12\x03\x93\x98\xb4\x48\x64\x3d\xa6\x43\xca\x65\x02\x94\x62\x1a\xbb\xfc\x5c\x93\xd6\x82\x3a\xac\xe3\x77\x93\xed\xb2\x82\x3f\xb3\x53\xde\x67\x5e\x17\xab\xb8\xe7\xb8\x07\xa2\xf0\x66\x52\xf3\x95\xb1\xe9\xbd\x69\x03\xf1\x9a\x62\xc5\x06\xe7\x85\x16\x26\x50\x15\x05\x53\xf3\x31\x84\x7c\x64\x61\x18\x7a\xaa\x1c\x63\x8c\x05\xc0\xca\xc4\x21\xd0\xc7\x14\xfd\xb7\xde\xee\x11\x57\xfc\xa6\x9f\xbc\xf4\x34\x3e\xb6\x6e\x60\xbe\x96\xa3\xd6\x9e\x1c\xdf\x74\x8f\xf7\xfe\xf2\xa2\x93\x6b\x0d\x28\x7e\xb6\xe4\x4f\x2f\x1f\x71\x8f\xa5\x99\xe5\x44\x75\x18\x12\x72\xa6\xca\xc8\x8c\x6e\xd1\x11\xa5\xf1\xb6\x6e\x86\xd8\x88\x15\x41\x0c\x25\x0d\xa9\xba\x9f\xd0\x5a\x48\x41\x43\x47\x16\x17\xd1\x89\x9b\xfa\x2d\xa7\xcc\x9b\xf5\x5f\xbd\xfd\xf4\x88\x4e\x2f\x38\xd9\xea\x7e\xf6\x6a\xdb\xc6\x6c\xc5\xfb\x57\xdb\xf6\x6b\x38\x5a\xac\x76\xef\xa5\x9c\xd3\xce\xde\x4e\x33\xc9\x58\x00\x5c\xc6\x02\x8c\xcf\xc5\x82\xa4\xd1\x91\xaa\xeb\x49\xe8\xb8\x9c\x90\xb0\x04\xe1\x7f\xee\x5c\x63\x29\x00\x96\x1b\xa9\xb4\x48\xe3\xc8\x70\xa8\xc7\x0d\x04\x5c\xfe\xa9\x4b\xaf\x23\x97\x87\xb6\x79\x79\x34\x7b\xf2\xeb\xe1\x9f\xd1\x9d\xb7\xf7\x93\x1e\xb2\x25\xa7\xbf\x2f\x0e\xfc\x5c\x9c\x7b\x22\xbd\x47\x66\x39\x42\x90\x06\x68\x5f\x63\x82\x40\xa5\x04\x81\xe8\xae\x21\xb3\x8a\x80\x79\x3d\x14\x29\xe4\xfb\x49\x94\x30\x86\xe4\x41\x4e\xa2\x25\x59\x71\xd4\x14\xe9\xa5\xc9\xae\x97\xb2\xaf\xf9\xf8\x72\xb9\x6a\x1f\xdc\x29\x37\xf1\xce\xaf\x0b\x57\xce\x2b\x3d\x7e\x3d\x7e\x03\x37\xcf\x35\xaf\xf0\x67\x0f\x7e\x38\x97\xe6\x79\x45\xc2\xd8\x14\x16\x28\xc6\x94\x55\xda\x70\x2d\x83\xd7\xf9\x58\xe2\x01\x64\x1d\xd6\xc1\x84\x89\x18\x60\x0a\x7e\x18\x32\x40\x70\x68\x07\x12\xf6\x6f\xec\x26\x8f\x18\x47\xe9\x3a\x3f\x8a\xb7\x7e\x2c\xbe\x9c\xf9\xa4\xe9\x98\x5d\x3b\x32\x2e\xe4\x69\x54\xf2\xcb\x49\x6f\x34\x3f\x5e\x75\xe4\x5d\xd6\x6e\x32\xab\x64\x9a\x81\xed\x81\x6e\x20\xd5\x09\x42\xcf\x8b\x62\x28\x8a\x36\x62\x29\xa0\x2b\x02\xc7\x5a\x49\x0c\xec\x48\xb7\x15\xe8\x28\x92\x27\x12\x0b\xa9\x1c\xa3\x2a\xa9\x50\xc8\x63\x16\x96\x2e\x31\x76\xd4\xf9\xdc\xda\xfe\xfc\x43\x8a\x74\xe9\x36\x3f\xa3\xd0\x97\x67\xd1\x30\x9c\xf7\x9b\x99\x39\xde\xc8\x6e\x54\xc9\xfa\x8e\x66\xea\x92\x09\xf2\x2e\x54\x03\x09\x69\xae\xc6\x0b\x82\x42\x7c\xcc\x98\x2e\x61\x64\x60\x8a\x06\x50\x1c\x5e\xf5\x75\x05\x62\xac\x4a\x26\x2f\x52\x0e\xa1\xa8\x14\x70\xb1\xb5\xb7\x0f\xef\xd9\x39\xf9\x41\xb1\x45\x5f\x5d\x30\x3b\x95\x18\x70\xb6\xf6\xe4\x2f\x96\xd5\xec\xbb\x27\xc7\xc8\xd3\xd5\xce\xf4\xf5\xde\xce\xfa\x36\x6c\x6a\xa0\x29\x0b\x88\x62\x27\x11\xab\x68\x82\x1a\x68\x90\x37\x68\x87\x61\x35\x8a\x65\x2d\xd5\x96\x80\xc7\x2a\x02\x08\x75\x8d\x95\x0d\x1d\x04\x1e\xe3\x38\xae\x9e\x3a\x89\x0f\xaf\x3b\x49\x6d\xfd\xc5\x13\x27\xc0\xae\x95\x46\x93\x7a\xcf\x44\xc7\xae\xce\x6b\xf0\x64\xd5\x82\x23\xdb\x5d\x1e\x77\x71\x96\xbf\xe6\x68\x7a\xe3\x34\x25\x53\x86\xc5\x0b\x8e\xe1\x20\x1f\x12\x8b\xe7\x88\x61\x3b\x92\x28\x03\x18\x63\x3f\x88\x13\x44\xcb\x8e\xcb\xf1\xac\x8e\x7c\x62\x53\x46\x44\xa3\x14\x1a\x3f\x33\xce\x15\x3d\xbe\x68\x37\xca\x38\x32\xf2\xfb\x81\xa5\xb3\xb5\x9d\x42\x2f\x45\xba\x38\xe8\x75\x7e\x59\xf6\xf9\x7b\x9b\x95\xf8\x35\xeb\x4a\x84\x29\xcb\x25\x25\xb4\x80\xac\x26\xa1\x98\xb8\xa1\x17\xb9\xb1\x8d\x00\x94\x24\x5f\x06\xbc\x6b\x0a\x9c\xcd\x92\xc0\x55\x59\x60\x42\x55\x05\xb4\x6d\x98\x0a\x76\x92\xd4\x53\xa1\xbc\x7d\xb7\x8d\x3f\xd1\xb8\x4a\xc9\x1a\x1e\x53\xe6\x52\x3f\x9c\xb1\x78\xec\xd9\x6e\x4d\x87\xed\x38\xb9\x78\xc0\x85\xe4\x10\x6c\x9d\x5e\x66\x7b\x14\x86\xa1\x4e\x41\xdb\x01\xa2\xc5\x3b\x7c\x84\x62\xe4\x6a\xbe\x61\x7b\x18\xa8\x2e\x25\xc0\xd8\x4d\x42\x04\x59\x12\x61\x4b\x8e\x68\xe0\xda\x84\xca\x0c\xe5\x76\x41\xcd\x11\x14\xae\x51\xf4\x1d\xd0\x67\x23\xda\x7a\x7b\x52\xe7\x19\x21\xb5\xf1\xf8\x9f\xed\xce\x3d\xb9\x8a\x88\x87\xc1\xde\x37\x1f\x89\x35\x95\x3b\xd1\x65\x4a\xac\x68\x7e\xe9\xbb\x41\xd2\xe9\x5a\x97\x37\x97\xfb\x03\x1c\x9c\x41\x65\x9b\x7f\x8d\xd4\xce\x9d\xbd\xfe\xa8\x56\x59\x4f\x44\x29\xff\xa4\x2a\xd2\x32\xc4\x92\x2c\x78\x26\xe6\x6c\x92\x78\x50\x70\x04\xcd\x0d\x59\x47\xf0\x13\x48\x54\x2d\x20\x32\x8a\x25\xcd\x49\xe2\x40\x74\x29\xc9\xc2\xd2\xe3\xb1\x66\xf2\x9a\x5d\x0d\x93\x89\x95\xc6\xef\x29\x7f\xe2\x7a\xfe\x7e\xdf\xb6\xd9\x5c\xed\xa7\x42\x67\x85\x2b\x5d\xb9\xfa\xd4\x0f\xad\x2e\xae\xca\x97\x66\x1c\xbe\x24\x70\x40\xa3\x78\x4c\xcb\x96\x07\x74\xdf\x71\x4c\x9d\x06\x86\xe1\x9b\x6a\x64\xc7\xac\x1b\x19\x82\xa2\xb2\x1a\x6f\x3a\xc8\xa3\xb0\x44\x07\xa9\x84\xb9\x36\xbd\x3b\xf0\xd6\x53\x2b\x9f\xaf\xbf\x3f\x7b\xc7\x8b\x57\x97\x16\x18\xcc\xe5\xbd\x59\xa8\x13\x75\xa9\xf8\x92\xfd\xb9\x77\xb5\x3d\x79\x73\x60\x7a\x9d\xd6\x63\x14\xc7\x75\x6d\x9c\x20\xd1\x65\x01\xa4\x54\x0a\xd9\x10\x25\x2e\x0b\x49\x6c\xc5\x6e\x90\x70\xa6\x85\x44\x02\x79\x96\xd7\x58\x37\xb0\xed\x24\x4a\x9d\x88\x2a\x2e\xad\xf1\x5e\xf3\xbe\x5f\xfe\x7e\xf2\xc7\x82\xfb\xca\x6d\xdb\x50\xbb\x7f\xbd\xa1\x19\xdd\x7b\xf5\x78\x58\xa9\xf2\xc1\x9a\x0d\x9b\xd7\x9f\x9c\xe6\x45\x54\x21\x81\x1a\xed\xf8\xa1\x0f\x85\x44\x71\x20\x36\x2c\x1a\x04\x0e\x8d\x05\x47\x94\xa1\x16\x28\x3c\x48\x88\x6a\xba\x1e\x02\x0c\x87\x7c\x9e\x27\xea\xe3\x37\xdd\x73\xff\xb9\xb1\xe7\x7f\xaa\xd3\xa5\xfc\x6f\x73\xf3\x48\x0b\x0f\xae\xae\x9c\x4d\x6c\xbb\x62\xda\xc5\x86\x39\x41\xf7\x69\x4d\xf1\xe8\xac\x2b\x0e\xa4\x16\x1f\x06\xa2\xc7\x9b\xb2\xac\x70\x52\xa4\x8a\xc4\xa2\x58\x57\x70\x7c\x9a\x92\x4d\x4a\x34\x2d\x85\xb6\x0d\x1d\x21\x68\x59\xc8\x75\x19\xde\x13\x6d\xdb\x4d\x41\xa2\xf8\xd5\xed\x26\xeb\x1a\xb8\x73\xd7\x04\x41\xd5\xba\xa3\x4b\xbd\x54\x7f\xd5\xe0\xef\x06\x8f\xed\x9a\xab\xe2\x17\xb9\x9f\xa2\x5f\x1c\xf6\x53\x9a\x11\x6e\xff\x5c\xab\xa6\x2d\x59\x09\x74\x5a\x8b\x1d\xc4\x01\x1d\x71\xba\x83\xb1\x25\xb1\x32\x6d\xb3\x09\x6b\xf0\xc0\x26\x44\x12\x5c\x45\xa0\xa0\x8b\x28\x2a\x13\xcc\xd5\x80\xd3\x2b\x57\xbd\xb0\xb7\xf1\xe8\x1e\x45\xc6\x1e\x78\x63\xfd\x9c\x4b\x25\x82\x7e\xd3\x72\x97\x2f\x70\xbe\xfc\x8c\x07\x35\x5b\x7f\xdd\xd7\x7c\x24\x6d\x15\xb8\x53\x7b\xe0\xde\xbd\xdf\xd4\x29\x5e\xb3\xe3\xb8\xa0\xe5\xf0\xdd\x9b\x0a\x4f\x6e\xa2\xca\xaf\x1e\x0b\xab\x7c\x56\xae\xf2\x87\xa3\xf6\xa7\xd7\x69\xa1\x27\x0a\x8e\x61\xcb\x54\x1c\x12\xd1\x20\xb2\x8c\x18\x64\xaa\x92\x4e\xe9\xbc\xaf\xbb\x91\x02\x80\x8f\x82\x00\x69\x16\x93\xb0\xa1\x4a\x5b\x32\x9f\x62\x0c\xb4\xfd\xbd\x83\xe4\x97\x62\x27\xb6\xad\x5a\xb5\xbc\xdd\x62\xa9\xca\x3c\x6e\xfd\xe5\x4a\xa3\xba\xad\x79\xb5\xd3\xda\x11\x39\x86\x54\xff\x42\x49\x6f\x68\xf4\x3c\xce\xd2\x03\x5d\x05\x9e\xad\xab\x0e\xe1\x6d\x4f\x17\x62\x9b\x96\x58\xdf\x91\x59\x33\xf6\x29\x31\xa4\x19\x53\x94\x58\xa2\xc9\x50\x36\x22\x0b\xb9\xa9\x87\x13\x1f\xbb\x6d\xbe\xbf\xff\xfd\xca\x41\xec\xf0\xf5\x85\xa7\xcd\x38\x92\xef\xc2\xf8\xa3\x33\x3a\x5e\x7f\x7a\xcf\x33\x15\xf3\x7f\x56\xb5\x76\xef\xac\xaf\xac\xa6\xf4\x00\xec\x20\x83\x61\x62\x96\xd7\x18\x35\x84\x28\x81\x54\x20\x32\x9e\xcd\x13\xdf\xf0\x65\x55\x42\x16\xa7\x32\xae\x20\x71\x06\x4d\x7b\xa2\xea\xc4\x88\x52\x53\x77\x44\xcf\x9d\xff\xe2\xf8\x9b\x6f\x5e\x6e\x91\xf4\xa8\xf2\xf5\x6f\x47\x5b\x3f\xef\xaf\x2d\xb3\xe4\x93\xfc\xad\x06\x57\x6b\xf4\xc4\x8e\x8d\x8b\xcb\xa6\x97\x99\x0c\xcb\xb1\x15\x79\x9c\xe4\xca\x38\x31\x03\x1f\x85\xd0\x66\xa1\x6c\x79\x91\xa5\x47\x8e\xcc\x78\x6a\x10\x88\x9c\x4c\x41\x93\xf6\x24\xca\xe2\x1d\x4f\xa2\x52\xa8\x9b\x74\x6d\x99\xfd\xda\xf4\x45\xa7\x32\xce\x08\x6d\x8e\xd6\xd9\xdb\x6c\x17\x53\xab\xe8\xd9\x9d\xa3\x8b\xf6\x55\x8b\x54\x1f\xd8\xaa\x6c\xf9\x7a\xe9\x35\x10\x1e\x59\x88\xf3\x38\x2e\x36\x75\xcd\xd3\x2c\x89\xa2\xfe\x2a\x15\xc3\xd0\x53\x58\x51\x16\x43\x2f\x64\x7c\xc0\x28\x09\x50\x63\x1e\xa9\xa1\x4f\xc9\x49\x90\x62\x5b\xf0\x44\x9b\xa7\xf5\xb7\xcf\x35\xc9\x08\xc6\x3c\x78\x61\x6a\xbf\x8c\x72\x39\x1a\xbf\x5a\xb3\xe8\xfd\xef\xdf\xdd\xfe\xe4\x33\x6d\x3a\xad\xc9\x3a\xc7\x6c\x6a\xbe\x47\x29\xc1\x51\x40\xc5\xbe\xad\x07\x81\xa9\xb2\x10\xc8\x81\xee\x69\x4c\xec\x18\x91\xcf\xc4\x0e\x6b\x08\x92\xef\x11\x1f\x23\xdf\x53\x3c\x89\xfc\xff\x3b\x6c\x8f\x77\xf9\x4d\xee\x8f\xaa\xb6\xef\x8b\x22\x4b\xde\x78\xaf\x2c\x5f\x64\x5d\xa7\x6e\x85\x4f\x5f\xec\x32\xb7\xf4\xd0\x5f\xa2\x3e\x83\x97\x4e\x59\x9e\x37\xbd\x5a\xd6\xd8\x4d\x02\xd3\x83\x92\x1e\xd1\x3a\xa7\x0b\xaa\x1f\xc7\x92\x69\x59\x81\x2a\xf8\x94\xab\x20\xa0\xfa\x2e\x89\xa0\x6f\x7a\x34\x40\x61\xa4\xd3\x8e\xa4\xb8\xa9\xc7\x40\x9f\xee\x78\xa1\x3f\x75\xa3\xd0\x80\x93\xad\x57\x1c\x6d\x7d\xe2\xc0\xcc\xcd\x3f\x8f\xac\xd7\x22\x5a\xb5\xe7\x6c\xbb\x87\x63\x47\x8f\x2f\x95\x75\xe2\xc9\x94\xb7\xcd\x79\x0e\x34\x63\x5b\x8c\x25\x59\x96\x45\x8b\x65\x30\xf2\x0c\x4e\x51\x75\x41\xc5\x8a\xe2\x29\x90\x20\x86\xf5\x48\x64\xab\x3c\xa5\xe9\x92\x2a\x51\xc1\xe3\xb5\xfa\xe6\xa1\xe7\xf3\x6d\x7f\x62\xea\xd0\x53\xeb\xdb\xf6\xed\x31\xf0\x97\x96\x19\xe5\xaf\x6e\x6e\x3c\xe8\xbd\x01\xd5\xfa\xff\xb4\xe4\x5c\xdb\x16\x2b\xd2\xeb\x86\x50\x0b\x2d\x53\x72\x62\x01\x24\xac\xa6\xc5\x5a\x22\xc6\x1a\x91\x0c\x33\x21\x1c\x82\x48\xa4\x02\x17\xc8\x1c\x30\x04\x89\xf0\x54\x68\x41\x95\x01\x7a\x6a\xf8\x63\xaf\xca\x8b\xb7\x6e\x74\x96\xbe\xff\xc2\x4f\x5d\xbf\xdf\xfc\x6c\xc9\xdd\x25\x2e\x36\x3a\x33\xf7\x05\x6b\xf6\x2b\xbf\x35\x5c\x1b\xd5\xfc\x26\xeb\x02\x24\xa9\xc5\x6c\x42\x3a\x46\x0a\x07\x13\x60\xd2\xa6\x6f\x31\xa1\xcc\x46\x86\x0e\x74\x56\x73\x3c\x4e\xc3\xb4\xa6\xc8\x1a\x31\x03\x3d\x06\x32\x1d\x21\x5a\xb3\x08\x48\x41\x99\xb1\xe7\xec\x3b\xe5\x55\xf6\xbb\xe7\xee\xab\x5f\xdf\xdb\xd3\xa6\xea\x90\xf7\x5b\x77\x7d\x6a\xec\x85\x37\x07\x9e\xaa\xf2\x64\xeb\x4f\x6a\x8e\x49\xaf\x4d\xdb\x8a\x8b\xb5\x48\x65\x03\x55\x55\x80\x0e\x04\x4e\x21\xc4\x83\xba\x98\x38\x94\xa6\x59\xb6\xa6\x52\x94\xc0\x6a\x40\x48\x2c\x8c\x02\xd3\x90\x1d\x20\xa6\xb6\xe9\x9f\x6f\xdf\xd4\xeb\x55\x0f\xe7\xf5\xd9\xe5\x7f\x76\x6d\xdb\xd9\x77\xbe\x7f\x35\xcf\x91\xa3\xd2\xad\xb2\xef\xbd\xd3\xe7\xa9\xad\x83\x1a\x65\x9d\x70\x27\xe5\xb1\x65\x00\x30\xc1\x49\x88\xa4\xc0\x66\x1c\x62\xd2\x2c\x1b\x73\xbc\x2c\x49\x91\x03\x74\x2d\x09\xb0\xae\x99\xa2\x2e\x78\x81\xc8\x63\x4a\x8a\x9c\x28\x4e\xb1\x52\xfa\xdb\x1b\xaf\xdd\x8e\xc7\xbf\x3a\x0d\x5d\xfc\xf3\xe9\x0a\x63\x6a\xe0\x16\x5f\xbc\xf1\xdb\xed\xdc\x73\x2f\x6f\xbe\xfb\xfa\x33\xdb\xee\xfd\x3f\xb0\x7c\xa4\x74\x43\x60\xcb\xa6\x12\x30\x14\x31\xed\x08\x58\x2a\xcb\x61\x0e\xd8\x06\x34\x10\x23\x58\x80\x31\x55\x5a\x61\x59\x8d\x13\x23\x56\x73\x5d\x87\xe1\x13\x0b\x5b\xa9\xab\xef\xde\xf4\xf6\x7d\x45\x86\xbc\xde\x3f\x5b\xc3\x37\x7e\xaf\x5e\xa3\x7b\xe5\xd2\xdb\x4e\xa3\x8c\x3d\x6b\xeb\x2d\x9f\x52\x77\xfa\x93\x94\x32\x34\xcd\x8b\x61\x06\xab\xb0\xa6\xab\xc9\xbc\x97\x28\x7c\x42\x45\x86\x14\xa1\x88\xf0\x96\x47\x3b\x2c\xad\x5a\x66\x12\x7a\xbc\xe1\x6b\xbe\x12\x51\x2e\xd4\x23\xfa\x5f\x4d\xc3\xa3\x36\xdd\x7f\xfe\xd8\x5e\x93\xe7\x2f\x70\x4a\x5d\x6f\xed\xcd\x7d\x69\x83\x51\x31\xdf\x81\x45\x6b\x9e\xac\x3b\x33\xff\xba\xd5\xf4\x46\xad\x7e\x9a\x79\xaf\x42\x9b\xb5\x78\x99\xb8\xb4\xc1\x80\x80\xf3\x4c\x56\x26\x41\xc4\x79\x36\xab\x62\xe0\xd0\x46\xc8\x49\x88\xf7\x05\x03\xd3\x1a\x4f\x10\x11\x38\xfc\x2f\x89\x97\x47\x8d\x63\xc4\x9a\x7d\xe5\x16\x0f\x6d\x1c\x39\xf3\xa9\xdd\x0b\x6b\x0d\x2a\xbe\xa1\x50\x8d\x09\x13\xea\x2e\x5c\x3f\xfc\xdd\xcf\x4f\x37\xee\x3a\x2b\xcd\xa8\x7a\xc6\x30\x23\x81\xe1\x45\xc5\x4e\x42\xcc\x29\x01\xcf\x29\x48\xe2\x14\xcd\xb6\x5d\x57\x10\xa1\x9f\x68\x5c\xac\xbb\x81\xea\xb1\xa1\xaa\xd2\xac\x17\xc5\x38\xf5\x18\xa8\xc1\xa9\x27\x32\xae\xf5\xf9\xad\x73\x8f\x4e\x47\xf8\x5e\x8d\x2e\xf5\x9e\x3a\xf7\x4a\xe1\xc5\xad\xdb\xbe\x32\xf5\x74\xa9\x3e\x8b\x7a\x56\xce\x3a\x1b\x53\xea\x31\x10\xcd\x6b\x3e\x17\x30\x02\xe0\x04\xcd\x0f\x39\x5b\x00\x34\xcb\x50\x09\xfb\x57\x85\xc7\x44\x8e\x22\xcb\x6a\x88\x13\xdd\xe1\x62\x5a\xe6\xd8\x98\x72\x52\xa4\x96\xc1\x33\x96\xae\xcb\x73\x21\xd7\x9c\xbb\xf1\x1d\xe3\x74\xab\x43\xdd\x0a\x6f\xd9\xb2\xfb\xea\x9f\x2d\xd6\xd7\x2b\x5e\xad\xd5\xb5\xe6\x1f\x3c\x48\x6f\x9f\xa3\xc3\xc0\xc1\x2a\x1f\x00\x55\x00\x89\x14\x49\x94\xcc\x30\x16\x41\x8a\x13\xb8\x9e\x1f\xab\x84\x0d\x69\x8a\x67\x34\x55\x40\x26\x21\x1a\xc1\x7a\x02\x53\x6f\x76\x8f\x2d\x69\x74\x75\x4f\xbd\xba\xbd\xcf\xdd\x22\x5f\xcb\xef\xee\x6a\x52\xf1\x7c\x99\x86\xe3\xf3\x70\xa3\x1e\xe6\x98\xd6\xd4\xae\xf2\x5a\x9a\x41\x6f\x8c\x09\xd9\x04\xf0\x09\x96\x5c\x2a\x8c\x68\x96\x96\x68\x44\x71\x8a\x85\x92\x84\x20\x53\x56\x6d\x28\x69\x61\x40\x3c\xdb\x23\x5c\x2c\xd3\x24\xa0\x94\xc7\x6f\x7a\x29\x25\x4d\x2a\xf5\x69\xa5\x89\x6b\xe3\x49\x5f\x14\x18\xb0\x6f\xf2\xf6\xa6\x5b\x3b\x7c\xd4\x75\xdc\x54\xb7\xef\xad\xd7\x7b\x5d\x2f\x9c\x75\xa5\xc0\xd4\x6f\x39\xa1\x81\x19\x96\xe3\x55\x43\x10\x19\xce\xf1\x60\x22\xf1\x6a\x2c\xba\x0a\x41\x88\xa5\x13\xc4\xb8\xbe\x91\x18\xd0\xe6\x02\xd5\xa0\x0c\xe4\x31\x9c\xf9\xf8\x91\x7f\x27\xcd\xdf\xdb\xfb\xc5\xb2\x71\x4e\xb3\xea\x53\x97\x95\x1a\x35\x51\x1d\x43\x7d\xbf\x68\xeb\xd3\xdc\xbb\xe5\x7a\xb4\xaa\xf7\x7c\xee\x3c\xe9\x75\x43\x87\x63\x44\xc5\x0d\x42\x20\x23\xe8\xb9\x2e\x07\x4c\xc9\x67\x35\x3f\x8a\x79\x40\x93\x24\x30\x9d\xc0\xc7\x5c\xa4\x26\x1a\xe4\x45\xc9\xb1\x7c\x8a\x44\xa9\xdd\x10\x34\x9a\xcc\xe4\xf8\xf8\xc3\xed\x77\x3e\x2b\x57\xff\xeb\x5e\x9f\x5c\x2c\xd9\xb0\x68\xcb\xcf\xee\x2f\xbf\x74\xbe\xe2\xc4\x15\x39\x3b\xcd\xce\x3a\x31\x71\x6a\x86\x5f\x2f\x34\x55\x26\xf4\x3d\x83\x35\x2d\x18\x3b\x11\x56\x04\x4b\x8a\x69\x18\x30\x8a\xc7\x41\xac\x5b\x6e\x40\x3b\x8e\xe2\xd0\x3c\x83\x28\xcb\xd3\xb8\x14\xc6\xf1\x60\x72\xaf\x62\xbf\x56\x0d\xfa\x7c\xf3\xe4\xa8\x1a\xd9\x47\x2d\xba\x3e\x21\xef\xed\x9e\x57\xca\xb7\xca\x96\xf7\xe8\xf9\x83\xa3\xcf\x77\xbe\x99\x5e\x37\x34\x64\x3b\x49\x0c\xc6\x16\x22\xdd\x05\x7e\xc4\xf2\x2c\xe5\x29\xae\x1e\x46\x81\x4e\x44\x5a\x76\x00\x12\x8c\x50\x4c\x78\xa0\x8b\xb2\x88\x3d\x41\xb4\xbd\xd4\xd3\xd8\xb1\x35\x4e\xe3\xe3\xc1\x1a\x71\x70\xff\x1a\xa7\x7a\x5c\x59\xbb\x65\x74\xbb\x5d\x9f\xee\xaa\x37\xab\xee\xb7\x3d\x6e\x1d\x5f\xd7\x78\xf4\x0b\x69\x86\x81\x85\x96\xec\x1a\x0c\x6f\x38\xa6\x6a\x28\x92\xad\xc7\x8c\x69\x7a\xb4\x41\x01\xc3\x56\x19\x9a\x70\xae\x2b\xb3\x80\x35\x38\x8a\x0f\x44\x93\xf2\x61\x9c\x89\xa0\xf6\xe0\xb7\x8b\xd6\x0f\xf6\xb7\xae\xb0\xa1\x6e\xa3\x13\x5b\x14\x98\x67\x6a\xd9\x35\x8b\x9f\xa8\x36\x2b\xde\xd8\xf4\xf8\x1f\xf9\x85\x5a\x5a\x7a\x0d\x84\x98\x81\x9d\xc8\xa6\xa5\xd8\x16\x47\xc9\x2e\x15\x00\x9e\x03\xa2\x20\xc6\x5c\x28\x33\xc0\x61\x8d\x84\x82\xa2\xca\x30\x1e\x92\x89\xcf\x30\x84\xf6\xe4\xd4\xb5\x47\xde\xe7\xb6\x9d\x99\xb2\xdf\x5f\x3a\xfb\x8f\xee\x8d\x7f\xa9\x34\x4b\xfd\x76\xeb\xa9\x73\x23\xf7\xd9\xbb\x69\xef\xe7\x93\xc9\x0f\x7f\x50\x69\x4e\x2f\xa6\xcd\xb2\x01\x65\x71\x26\xe2\x2c\xcc\x0a\xa1\xe9\x84\x9a\x08\x3c\x25\xa2\x02\xd6\xe4\x04\xc5\x33\x24\x2e\x8a\xa0\x01\x10\x02\x91\xe5\xf0\x71\x8a\x57\x86\xd2\xf6\xd7\x05\xd7\xae\xc8\x57\xac\xf2\xb0\x53\x9d\x7f\xff\xf4\x87\xfd\xd9\x8e\x6f\x5f\x53\xb2\x6f\xa7\xa1\x05\x9a\x95\x8e\xda\xbd\x34\x65\x5d\x7a\xbb\x71\x4e\x32\xb5\xc0\x61\x23\xda\x37\x59\x5d\xa3\x7d\x56\x0b\x2c\x1e\x47\x8a\xab\x33\xa2\xef\xd2\x14\xb1\x91\x2f\x87\x1e\x10\x3d\x99\xe1\x55\x45\xb0\x1c\xea\xf1\x6e\x7c\x71\x75\x53\xac\xfa\x54\xf7\x93\x7f\x98\x5f\xe4\x66\xc6\xe7\x7a\x67\xdd\xc6\x02\xf9\x46\x7f\xd9\xaf\xd0\x2f\x25\xaa\xcf\xff\xa0\x5f\xd9\xac\x8b\xc4\x67\xb2\x45\x1c\x12\xdf\xc2\xac\xc3\xf0\x36\x2f\x1a\x11\x43\x01\x4b\xf1\x1d\x8f\x33\x24\x4a\xc6\x71\x10\x69\x01\x6f\xbb\x80\x32\x68\xde\xd4\x04\x1d\x78\x49\x94\x3a\x23\xc2\x8c\x93\xd7\xe6\x14\xda\xb1\xd7\x2d\xb4\x3d\xe7\x8f\xdd\xc6\x55\xad\xbb\xf3\xf7\x83\x77\xce\x7f\xb5\x93\xa9\xff\x71\x9e\x9e\x77\xbf\x29\x98\xe6\x37\x03\x25\x90\x68\x4d\x37\x61\x24\x02\x06\x31\x2a\xaf\xba\xaa\xee\x46\x14\x15\x31\x2a\x91\xa0\x82\x93\x08\xd3\xbe\x66\xf3\x14\x2f\x59\xbe\x02\x1d\x37\xc5\x4d\x77\x3c\xd8\xb2\x5f\xad\xf1\x55\x7e\x57\x3e\x79\xe5\xf4\x9f\x8d\x8f\x8d\x71\x9e\x68\xb8\xe3\xfd\x6f\x16\x2c\xf9\x62\xed\xca\x5e\x73\x1f\xac\xcd\xfa\x63\x5f\x4a\x7b\x56\x02\xd1\x94\x65\x4b\x32\x68\xd7\xd4\x2d\xcd\x89\x1d\x3a\x12\x8d\xc4\x37\x00\xed\x68\x88\xd2\x4c\xdb\xb4\x0c\xc7\x57\x95\x90\x0e\x14\x8d\xb7\x0c\x2e\x45\xb9\x34\x7f\xdb\x8c\xa3\x6b\x9f\x3b\x50\xc0\xfe\x6a\xc0\xd3\x17\xdb\xf4\x99\xd2\x39\xef\x26\x76\xde\xf0\x4f\x66\x6c\xe1\x87\x4c\x1a\x38\x7a\x62\x9a\x5f\x66\x2c\x85\xa6\x78\x2a\xc0\x0a\x2d\x39\xd8\x94\x62\x37\x26\x46\xe8\xca\xa6\x02\x62\x9f\xd5\x30\x74\x18\x2c\xc7\x22\x6d\x42\xd5\xf7\x58\x4d\x31\x29\xfb\x3f\x5b\xf1\xff\x06\x25\xff\xb7\x87\xa7\xbe\x19\xcd\x9a\xf5\xfe\x5f\x6a\x6b\x3f\xe6\x3a\x3c\xa7\x3e\x3f\xff\xe5\xb1\xf2\xb7\x7b\xda\x74\x9c\xba\xbb\x5a\xe5\xaf\x41\xd1\xe3\x2b\xda\x17\x7a\xfd\xde\xf1\x41\x83\x9c\x34\x3f\xd1\xe3\x00\x2a\x92\x88\x34\x03\x4a\x96\x1f\xf3\x4e\xc4\x24\xb1\xaa\x63\xc6\x35\x02\xc2\xda\x02\x8a\xc2\xd8\xa7\x62\xc8\xc6\xba\x24\xa8\x22\xd4\x88\xc2\xa6\x1e\x48\xbd\x06\xe6\x8f\x1d\xc4\x16\x19\x97\x6c\x3c\x32\x61\x02\x9f\xe7\x79\xc5\x8c\x96\x6f\x2f\xb7\x65\x48\x46\xc6\xb0\xb0\xc9\x8a\xbe\x23\xd3\x9b\x8d\x62\x87\x23\xd8\xf3\x5c\x64\x25\x0c\xb2\x68\xde\xb4\x42\x4f\x60\x28\x6c\x79\x8a\x12\x86\x8e\x8f\x7c\x0f\x12\xfc\x57\xc5\x95\x08\x92\x88\x03\x1b\x64\xa2\x3b\x58\xcd\x46\xbb\xb7\x9d\xdc\x38\xe2\xa9\xeb\xfb\x4f\x57\x7d\x50\x10\xd7\x7f\xc6\xfb\x60\x63\xfe\xde\x07\x4b\xb5\x6b\x3e\x67\xe3\xc9\x91\x59\xdf\x4a\x4f\x19\x70\xdc\x40\x89\x69\x2a\x42\xae\xab\xa9\xae\x08\x08\x83\xa9\xd0\x07\x7f\x99\x92\x44\x63\x8b\x16\x25\x45\xf5\xdc\x08\xfb\xbc\x49\x11\xc6\x45\x32\x72\xd9\xd4\xb9\x7f\xed\xde\x0e\xa7\xa7\x9e\xbf\xf2\x5e\xb3\x7b\x1f\xe7\xba\x3a\x6e\xd0\xe9\xe7\x4e\xf7\xcf\x56\x73\x77\x34\xed\xde\xc1\xf7\x5b\xdc\xdc\x3c\x21\xbd\x9b\xa2\x48\x56\xc3\xd0\x36\x15\x5d\x20\x8c\x65\xc8\x38\xc1\x30\x66\x38\xd9\x49\x2c\x9c\xd8\xae\x15\x3b\x2a\x21\x16\xc5\x06\x6a\x48\x43\x18\x10\x2a\x34\xa9\xff\x94\x2c\x03\x72\xfd\xdf\xde\x46\xfa\x66\xcc\xc8\x96\x2d\x4f\xbf\x47\xfe\xe5\xec\x3d\x75\x3f\xbf\xff\x61\xd9\x43\x07\xc2\xc3\x73\xbd\x57\x9e\x38\xf7\xe6\xd7\x5f\x2e\xcb\xfb\xd1\xbe\x6e\x1f\x7e\xd8\x7d\x8b\xfb\xc3\x37\x15\xd3\xbc\x4d\x27\xf2\x8a\x86\x29\x5e\x94\x92\x44\xd7\x4c\x35\x34\x2d\x57\x37\x4d\xc1\x89\x4c\x9e\x0f\x99\xc0\x56\xa1\xea\x87\xa1\x0a\x74\x55\xd1\x09\x27\xd9\x5c\x26\x25\xf0\x8f\xf5\x7e\xad\x11\x4e\xcf\xd3\x71\xe5\xfa\x27\xd7\x2b\x6b\x2a\x4d\xef\x54\x21\xe3\x1b\xb0\x33\xaf\x64\xf7\x39\x3a\x6f\xdd\x79\xee\x5a\x9a\xfb\x23\x24\xdb\x0a\xcd\xeb\x48\xb6\x62\x9b\x85\x88\x52\x38\xce\x0f\x85\x58\xd0\x3c\x04\xb5\x08\x31\x44\x09\xb1\x2d\x41\x46\x26\x40\x33\x35\x13\x72\xde\xe3\xa1\xf5\x70\xa9\x7b\x7b\xd4\x05\x07\x77\xaa\x75\x7e\x19\x53\xe6\x4e\xe3\x41\xcd\x8b\x5c\x1e\xb6\x40\xa9\x58\xe0\x8f\xe3\x60\xf3\x8e\xb7\x6a\xf4\x4c\x6f\x68\xb5\x63\x44\xcb\x20\x88\xdd\xc0\xd0\x19\x13\x58\x48\x12\x2d\xde\xd7\x29\x91\xf5\x04\x86\x53\xcc\x44\x50\x4c\x0b\x10\xde\x47\x81\xe8\xd0\x91\xa3\x73\x99\xc8\x96\x75\x3b\xf6\xc3\x90\xa0\x43\xa7\x4f\x5e\xe0\x46\x16\xde\x5b\x38\xe7\x9a\xba\x33\x87\xd5\xfc\xbc\xd1\xe8\xba\x93\xb6\xb6\xd9\xd5\xf1\x6a\x90\x75\xd5\xd0\x94\x37\x1d\x30\xbc\x0c\x0d\xce\xc6\xa6\x68\x5b\x44\xc0\x01\x00\x18\x89\x9c\x97\x84\x98\xb1\x30\x23\x38\x3c\xa7\xf9\x0a\x94\x43\xc7\x0a\xe2\x58\x34\xa3\x7f\x01\x7c\xff\x79\xd3\x53\x32\xfe\xff\xad\xf4\x0e\xc9\x07\x67\xdb\xff\x0c\xe2\x55\x3f\x0e\xba\xdf\x66\x5a\xaf\x97\x9f\xda\xd3\xec\xe3\xc9\x8d\xe7\xd2\xdf\x6f\xcb\xbd\x36\x63\xf5\xea\xbe\x19\x0f\x8d\x87\x0f\x27\x94\x7f\xc4\xa0\xae\xbc\x62\x75\xff\xa4\xd9\xc2\x4a\xcd\x8a\x5f\x0d\x7b\x8c\x1b\x74\x34\x63\x43\xae\x07\x0d\xdb\xbe\x7b\x8c\x9b\x75\x3d\x1f\xf9\xa5\xf8\xbd\x34\x7f\x9d\x24\x54\x29\x33\x90\x2c\x9d\xb6\x8c\x84\x20\x15\x11\x87\x8e\x62\x64\xf9\xaa\x4f\x12\xdd\x37\xad\x90\xd7\x63\xc8\x10\x9c\x98\x46\x4c\x21\x92\x8a\x34\xe0\x4e\x99\x16\xef\x99\x53\x17\xdf\xb9\xf8\xe4\x2f\x37\x5f\xa2\x86\x17\x6e\xb9\xff\xcd\x93\x33\xba\x8c\xc9\x95\x6d\x4f\x34\xf0\xec\x80\x46\xf5\xd3\xcc\x23\x6c\x68\x26\x31\x88\x87\x45\x96\x52\x02\x59\x8f\x69\x84\x29\x53\xc2\x50\x02\xba\xa4\xa0\x90\x72\x0d\x10\xb3\x12\x06\x22\x07\x60\xa8\x23\x42\x19\xa9\xa7\xe6\xc1\xc9\x09\xf3\xdf\xe8\xdb\xf2\x4a\xdb\x6e\x97\x8f\x7a\xb5\xb2\xbf\xc6\x74\xd5\x5a\x4f\x9b\x5c\xf6\xab\x55\xb5\x0b\x4c\xb9\xfd\xe6\xbc\xe9\xe9\x35\xa8\xd8\xb3\x12\x2f\xe1\xf4\x00\x73\x42\x12\x1b\x82\x1f\x30\xb6\x40\x24\x4d\xa5\x0c\x81\x07\x8e\x6f\xda\xb1\x49\xbb\xc0\x09\x54\xc0\x9a\xb1\x6f\x0b\x76\x8a\x39\xc1\xb8\xe7\xef\x4d\x12\xf7\x6c\xac\xff\xda\xee\xe7\x7f\x9f\xf0\xf0\xe1\xf7\x65\xb4\x3e\x17\xce\x9e\xec\xf2\x9c\xb2\xb4\xfe\xf0\x2b\xcb\xd6\xa6\x57\x78\x13\xc9\x3e\x74\xa4\xc8\x56\x04\x0d\x31\xa2\x10\x2b\x62\xa0\xba\xac\xa9\x20\x26\xa4\x62\xc6\x49\x7c\x59\x70\x93\x90\xb2\x44\x46\x46\x9c\xa3\x53\xaa\xe4\xc0\xd4\xae\x5b\x71\xc3\xb4\x1b\x0d\xc6\x3d\xd8\xff\x65\xf3\xb7\x7b\x5d\x50\x4f\x89\x5c\xc7\x42\xdd\xbd\x72\xef\xc2\x76\x45\x7a\xcf\xbc\xd6\xe0\x7a\x9a\x83\xa4\x2b\x09\xb1\xc4\x86\x8e\x96\x84\x81\x45\xb4\x58\xa5\x60\x68\x31\x34\xaf\x63\x41\x56\xa1\xaf\xf2\x89\x40\x0b\xb1\x12\x8a\xae\x65\x53\xba\xc1\x04\x14\x93\xba\xcc\xd1\xbf\x98\xba\xe5\xfc\xb5\x96\xd7\x83\x1f\xab\x4f\xb7\x73\x89\x93\x36\x96\xa8\xb6\x75\xef\xc5\xdd\xf7\x06\x1f\xde\x33\xf7\xbb\x3d\xfd\x76\xa6\xd9\x15\x7d\x11\x60\x5a\x09\x25\x47\x27\xa6\xc5\xc4\x6c\x10\x72\x96\xe0\x32\x6a\x04\x20\x17\xd9\x26\x50\x14\x5e\x81\x9a\x25\x46\x0e\x63\x5b\x81\x08\x14\x3d\x13\x08\xd4\x1f\xe5\xca\x18\xd5\x85\xdb\x25\x66\xfc\x23\xac\x3d\xdc\x6d\xc4\x18\x56\xbf\x0b\x4e\x93\x72\xb9\xae\x7e\x9a\x6f\x75\x2d\x5a\x3d\xf6\x48\x3b\x53\xfc\xdb\x63\x03\x16\xcd\xfc\xa8\x0e\x57\x40\x18\x3f\xa6\xf7\x90\x57\xb7\x3f\x5f\x32\x67\xde\x01\x5c\xe5\xf5\xdf\x97\x2a\xd3\xec\x67\x79\x53\x9a\xa7\x65\x96\xa3\x47\x58\xf6\x0d\x43\x60\x61\x60\x68\x31\x54\x10\x0b\x38\x80\x9c\xd0\xc5\x4c\x10\x21\x49\x13\xa0\x05\x65\xc3\xd4\xb5\x38\x66\x62\x81\x8a\x1e\xf7\x82\x3a\x60\xd3\x98\x8e\x05\xe1\xa5\x35\xd7\x32\x7e\x79\x17\xdd\x9b\x02\xba\x2f\x1a\x32\xf7\xf9\xd2\x9b\x8f\xd7\x6b\xf5\x85\x3e\xa7\x7b\x92\xde\x23\x6b\x2c\x80\x82\xc7\x44\x14\x25\x8a\x2e\xfc\xab\x91\xf4\x7c\xc0\x63\x5b\xd6\x08\x1d\x73\x9e\x13\x80\x98\x16\x18\xdb\x84\x74\xe4\xc8\x74\x24\xf0\x7f\x93\x10\xf8\x9f\x23\x4f\x6b\xdd\x2f\xdf\xa6\x2e\xad\xdb\xef\x5c\xdd\xba\x59\xae\xb6\xee\x13\xd7\x3f\x9f\xdd\x6f\x64\xe3\x3d\x93\x3e\xdf\xdf\x75\xd1\xa5\xfd\xdf\xa6\x17\x21\x8a\x2d\x44\xd3\x80\x89\xd8\x88\x51\x0c\x5d\xc2\xa1\x2a\x31\x89\x87\x20\xe0\x25\xce\xc6\x89\x93\x98\x12\x01\x44\x0d\x2c\x91\x63\x45\x07\x23\x2d\xe1\xad\xd4\xbd\x6e\x85\xd5\x73\x56\xd5\x45\xa5\xb8\x96\xc7\x47\x4e\x34\xde\x69\x35\x63\xd0\xc9\x0e\x95\x4a\x49\xef\x1f\x2f\xd6\xf2\xe0\x96\xb3\xe2\xbd\xac\xab\x41\xa7\x8c\xec\xa2\xac\xb1\x94\x69\x8a\x9c\x21\xd3\x62\x28\x3b\x01\x8f\x2d\x15\x63\x2d\xd2\x59\x87\x71\x15\x01\x3a\x48\xa5\x29\x62\x99\x90\x76\x1c\x5b\x40\x88\x57\x1f\x4f\x46\xb5\x8c\x4d\xa7\x16\x3f\xdb\x57\x43\x47\x07\xeb\xb3\xc6\x35\x08\xa8\xfe\xf3\x46\xc9\x7b\xf7\x94\xbc\x5c\xf3\xf7\xfe\xcc\x47\x5b\xb3\xbe\x33\x91\x9a\xe4\xcb\x06\x12\xcf\x2b\x71\x14\x73\xc0\xd7\x18\xe4\x07\x3e\x05\x04\x06\x07\x51\x62\x4a\x2e\x20\x09\xad\x01\x5b\x95\x1d\x09\x1a\x3c\xa2\x04\x41\xfd\x1b\x49\xe6\x7f\xf6\x80\x1e\x64\x8f\xcb\xc8\x1d\xbd\xc6\xdf\x56\xae\xda\x76\x66\x8f\xa9\xdf\x14\x5d\x9e\xbf\xc7\xed\x61\xcf\xed\x7c\xef\xc7\x3a\xaf\x5e\xa8\x92\x75\x3a\xb5\x94\xe1\x91\x84\x8a\xa3\x26\xc8\xe1\x4c\x56\x52\xb1\xc9\xaa\xb6\x07\xcc\xc8\x76\x38\x0b\x21\x23\x52\x70\x68\x4a\x1a\x4f\x19\xd0\xc6\x82\xaa\x31\x92\xad\xa8\x7c\xea\x29\x59\xfd\x27\x48\xb6\x15\xf9\x3e\xc6\xaf\xf4\x9b\xb4\xf9\xe6\xaa\xfb\xc1\x92\x21\x05\xfa\x77\xfd\xc7\xf1\x57\xa2\x9a\x47\xf4\x11\x05\x51\xd6\xa9\x1b\x53\xf3\x7a\xc6\x0c\xad\x99\x20\x92\x58\xc1\x31\xe3\xbf\x8a\x5d\x1a\x21\xcf\x97\x75\x11\xd2\xba\x20\xca\xba\x1c\x2b\x0e\xa4\x6d\xd6\x8c\x0d\xde\x02\x31\x51\x52\x3c\x77\xbd\x40\xd8\x11\x2b\xd6\xd4\x79\x90\x8f\x7e\xb3\x86\x7c\x22\xe7\xfc\x60\x2f\x28\x41\x72\x3c\xa8\xda\x42\x13\xba\xd4\xda\xb0\x5a\x4a\x33\xea\x59\xe0\x1d\x41\x97\x91\x62\x85\x2c\x27\x05\x06\x6b\x8b\x30\x88\x59\x05\x50\x84\x45\x0a\x87\x68\x08\x3c\x4f\xf0\x35\xcd\x4d\x74\xe2\x1b\x3e\x07\xcc\xc7\x1f\x15\x37\x14\x68\xfb\xc2\xf3\xef\xc7\xd5\xcf\x3f\xd8\x31\xf9\x7c\xb9\x9e\x0d\x8b\xcd\x19\x92\xf3\x41\xc9\x49\xad\x7e\x38\x50\x6e\x6d\xff\x9c\x79\xb3\x0e\x9e\x4c\xdd\x17\xf1\x06\x32\x5c\x60\x38\x8a\xcf\x3b\x86\x17\xe3\x08\x02\xdd\x15\xa1\x43\x58\x5a\x41\x11\x23\x7b\x89\xa5\x92\x08\x5a\xba\xc3\xa8\x90\x53\x19\xd5\x4b\xdd\x17\x75\xe8\x91\x2d\x57\xfb\xfd\x75\x6f\xcb\x13\xef\xad\xa9\xbf\x6e\xeb\x9c\x31\xf4\x6f\x77\x7a\x3e\x37\x65\x0e\x58\xb2\xee\xa7\xc1\xf3\x9f\xc8\xba\x71\xa4\xce\x9d\x14\x26\x36\x76\x81\x9a\x98\xb4\x4f\x19\x44\xd5\x89\x13\x63\x0d\x5b\xa2\x08\x5d\xc8\x39\xa6\x46\x85\x8a\x19\xab\x21\x45\xa9\x8c\x8b\x5c\x8f\x98\x8f\xbb\xe1\xa1\x05\x43\xa6\x89\x57\x7f\x28\x55\xea\xd3\xf7\x3a\x5f\x3e\xb7\x64\xf5\x53\x25\x9e\x9a\xbf\xa1\x43\xa1\x5d\xb7\x7a\xf5\x68\xdf\xfa\x94\x1d\xa5\xd7\x9e\x79\x2c\x08\xba\x03\x54\xca\x96\x0d\x43\xfd\xab\xd5\x96\x44\xc8\x38\x5e\x10\x78\x04\xc8\x86\xe6\xb1\xa6\x0f\x54\xcd\x0d\x90\x09\x09\xa1\x64\x68\x93\xd4\x90\x84\x67\xa7\xf6\x58\xfd\xd5\xd8\x01\xc5\x7f\x6b\xd0\xd8\x17\x4e\x8c\x3b\xb9\x03\xe6\xcc\xde\x62\x44\xd5\xc9\x55\x7a\xe6\xfe\xf9\xa5\x19\xeb\xd2\x5b\x7d\x23\xd9\x50\x12\xc9\x93\x13\x36\x88\x20\xa0\x75\x1e\x78\xaa\x6f\x87\x92\x6c\x19\x32\x1d\x40\xd6\xf7\x68\x24\xb3\x1c\x91\x74\x99\xa5\x93\x50\xe2\x24\x2e\x05\xe6\xd3\x79\x75\xd5\xd5\x7e\xd4\xbd\x63\x1b\x6e\x6e\x5a\x76\xa6\xfd\xef\x75\x6b\xb5\xdd\x77\xb2\xc7\xeb\xef\x2e\xbb\xcb\xbe\x58\x30\xef\xeb\x35\xb2\x8e\xc3\x4a\x3d\xd1\x60\x19\x1a\xb8\xb6\xe6\xb3\x22\xaf\x79\x4a\x88\x12\x1f\x50\xb1\x8e\xa1\xc4\x53\x7a\x20\x4a\x3a\x10\x1c\x8b\x09\xe4\xc8\xf5\x09\x47\xdb\xb4\xaf\x19\x99\x60\x3e\x73\x67\x3c\x51\xef\x41\x3f\xe3\xad\x9a\xe8\xf9\x96\xc7\x7c\xe1\x7a\x9b\x75\x3f\xe4\x28\xdc\xc7\x9f\xd9\x77\x50\x9b\x1a\x1f\xd6\x79\x71\xee\x23\xe1\xb1\xe8\xed\x02\x9b\xce\x16\x9e\xbd\xf9\x8c\xb7\x69\xf1\x49\xd6\x6f\x52\xd7\xff\x7a\xc7\xcf\xb7\xe8\x01\x23\xcb\x7e\x68\x1c\xd8\xf8\x30\xbd\xac\x46\x98\x0f\x59\x42\x23\x39\x32\x29\x3f\x11\x23\x93\x21\x44\x90\x3d\x36\x71\x02\x04\x74\x23\x64\x29\xa2\xc6\xb2\x18\x72\xc8\xa4\x3c\xc6\x40\x21\x90\xa9\x14\xdf\xa5\xd6\x8b\xcf\xdc\xcd\x47\x84\xde\xd3\x5e\xc8\xf7\xed\x3b\x2f\xd7\x5b\xeb\xac\xee\x73\xea\xfa\xca\xc6\x13\xed\x5f\x1f\x8e\x79\xeb\x99\xf0\xfb\xf4\x9a\x92\x1b\x03\xc3\x30\x42\xdb\x13\x35\x20\xc4\x3a\xad\xda\x16\xa2\x63\xcb\xd6\x80\xc8\x85\x49\xe8\x48\xa2\x2c\xaa\x14\xcb\x4b\xb2\xe3\xfa\x26\x1d\xd2\x89\xf8\xf8\x91\x87\xe4\xfb\x6a\xd7\xbe\x0e\xd1\xe2\x25\x13\x96\x6e\x3b\xf5\xfd\xb0\xf2\x5c\xa3\x8e\x2f\x1f\xde\xd6\xe0\xd9\x76\x8d\x9f\x69\x37\x3f\xde\x99\x5e\xd9\x78\xe4\xc5\x34\xa5\x1b\xaa\xac\x06\x3c\xe7\xaa\x06\x1d\xf0\x61\xac\xea\x1a\x52\x12\x90\xc4\x9a\xa6\xd0\x24\x80\x11\x96\x81\x2e\xc9\x22\xfe\x2b\x02\xfd\x6d\x4e\xfc\x88\xd3\xd2\x6b\x0b\x57\x3d\xf2\xfc\xf3\xcf\xd3\x53\x2a\xe5\x95\xc7\x85\xb5\x0f\xf1\xaf\x4d\x6c\xfb\xfc\xfc\x5f\x2f\x0d\x68\xd0\x7e\xff\xd5\x59\xe9\x5d\xbf\xc1\x3e\x67\x08\x7e\xe2\x70\xba\x96\x10\x31\xe4\x43\xde\xd5\x04\x87\x0d\xb1\x1d\xc7\x96\x68\x1b\x0a\x43\x51\x72\x64\x18\xb6\x25\x79\x94\x91\x50\x1c\xb2\x53\xd0\x1e\x8f\x7b\x78\x70\x50\x8d\x77\x1f\x36\xdc\x39\xe2\xd5\xee\x9d\xff\xb1\xbb\xf8\xc0\x16\x15\xc7\x36\x75\xb6\x5e\x1e\xfc\xc2\xab\x43\xa7\x4d\xed\x28\xa6\x79\x7f\x96\x16\x3d\xa2\x78\x28\x56\x22\x48\x54\x43\xa3\x02\x4b\x0a\xd8\x24\x10\x75\xca\x0a\x68\x4b\x55\x63\xc1\x0d\x75\x81\x75\x12\xd7\x4a\x62\x0f\xff\xfd\xdd\xe3\x91\x9b\x2e\x7e\x6b\x50\xd7\xf5\x3d\x4e\x2f\x2b\xb8\xbb\x6c\xb2\xbe\xce\xd5\x3e\x57\x3e\xeb\x84\xa6\xdd\x51\x7f\xcf\x57\x79\x5d\x46\xd1\xd7\x8e\xf7\x49\x6f\xb3\x10\x41\xc6\x4b\x14\xcf\xf7\x13\x12\x29\x90\x15\x9c\x38\xc1\x1e\x74\x43\x85\x72\x69\x8b\x72\x7d\x0e\x6a\x14\x25\x33\xbc\xc1\x32\x96\x8b\x1c\xd6\xa4\x52\x70\x1d\x74\xdc\xda\x49\x6e\x5b\xbc\x4d\xaf\xd9\x4d\x3f\xaf\x94\x57\x9a\xb7\xbd\xee\x67\xa3\xeb\x34\xdf\x9e\xb7\x6f\x19\x56\xe9\x98\x77\x94\x92\x66\x19\x4b\x2c\xfa\x40\x61\x43\x8a\x03\x8c\xa5\x30\x12\xa3\x49\x9e\xaa\x30\xac\xa2\x23\x2a\x64\x39\x9b\x53\x63\x2d\x11\x65\x53\x17\x55\x3b\x16\x4c\x8d\xf5\x95\x4c\xf6\x25\xb2\xff\xb8\xa2\x90\x94\xbb\x57\xed\xf6\x33\x2b\xb7\x98\x05\xe7\x7d\x38\x7d\xe9\xc1\xf8\xe0\x8d\x12\xbf\x77\x7d\xa2\xdc\x58\x6e\xf5\x8e\xac\x37\x0b\xa9\x2b\x15\x85\xd1\xf4\x84\xa1\x69\x0c\x35\x19\x03\x44\xbb\x09\xe3\x3b\xaa\xa2\x10\x4a\x80\x46\xe2\xeb\x31\xe7\x06\xa2\xca\xd9\x0c\xed\x9a\x89\xe2\x9b\xc4\x7e\xdc\xa6\x3b\xb4\x78\xed\xf6\xbe\xd1\xfa\xa8\xcf\x36\xbd\x36\xe2\xe6\x53\xd7\xe9\xec\x6b\x8a\xf3\x6b\xa2\x57\xab\x97\xaa\xf3\x7d\xfd\x67\xdb\xac\xd8\x9c\xe6\x2a\x45\xd7\x45\x83\x65\x0d\xd9\xb5\x3c\xc2\x11\xc5\xe2\x45\x24\xea\x5e\x2c\xf8\xba\xee\x86\xa6\x27\x68\xd8\x50\x35\x1d\x93\xd8\x32\x6d\x43\x14\xb1\xea\x3c\x1e\xf0\xb4\x39\x53\xbe\x2f\x5a\x7c\xdd\x95\xb0\x4d\x0e\x5c\xad\xea\xf2\x2a\x7b\xa7\xd8\x2d\xbb\xad\x1e\xd0\x85\xfb\x69\xf2\xfd\x0e\x3f\x85\x47\xd2\x5b\xa5\x78\x91\xe3\x24\x26\xe2\x24\x46\x48\x1c\x19\xb8\x98\x71\x5c\xe4\x32\xb1\x6f\xfb\x91\xe5\x46\x0e\xcb\x88\xaa\x9a\x84\xb4\x26\x02\xd7\xa7\x89\x88\x90\xfa\x37\xe3\xf8\x7b\xee\x1c\x02\x67\x7e\xba\x73\x99\x31\xcf\x67\x3e\x2c\x5d\x7e\x57\x97\x9c\x4d\xdb\xed\xaa\x77\xf5\xa9\xfa\x9b\x7e\x7a\x3f\x57\x8b\x21\x79\x7f\x0e\x1e\x71\xda\x65\x83\x36\xae\xad\xda\x9e\xdb\xf4\x73\x91\x4f\xbb\xad\x1b\xbb\xe6\xa5\x06\x03\xff\xf1\x55\xb6\x1f\xea\x7c\x38\xab\xdb\xbb\xea\xef\x7b\xcf\x07\x69\xa6\x8d\x94\x13\xdd\xa2\x91\xcb\x29\x22\xa0\x18\x9d\x87\x89\xe5\x5a\x42\x18\x01\x97\x46\x50\x70\x18\xdd\xf0\x23\xe2\xda\x36\xcd\x8b\x2a\x1b\x31\x81\xf6\x2f\x71\xa3\x47\x9d\xf6\xea\xd7\x93\x26\xa2\xe7\xd7\xf5\xef\xb0\xe2\xda\xfe\x27\xbf\xd3\x0a\x9d\xad\xc5\xf4\x3a\xc8\xa9\x1f\x96\xa8\x7c\xaa\x7e\xc9\x83\x4f\x66\xdd\xfa\x53\x3a\xad\x09\x31\x1b\x70\x96\xa6\xd2\xb6\xa8\x7b\xac\x69\x0b\xae\xa0\x18\x96\xee\x6a\x22\x03\x6d\x47\x10\x75\x35\x64\x78\x0b\x32\xac\xce\xb9\x88\xa1\x82\xbf\x41\xd2\x1e\x99\x71\x0d\x38\x56\xf9\xbb\xde\x8b\x8a\x1d\x7e\x30\x43\xf8\x78\x42\x85\xb6\x0b\x86\x54\x9a\xf3\x92\x72\xe3\x97\xb7\x9a\x2f\x5f\x3b\x63\xa8\x9d\x2d\xcd\xe2\x0c\x8c\x86\x75\xac\x02\x9b\x8f\x04\x4d\xc4\x92\xaf\x2a\x2e\x8e\x03\x64\x88\x20\x0a\x2c\xa4\x50\x0e\x17\x06\x2e\xb1\x6d\x12\xf0\x40\x53\x23\x14\x2a\x5e\xea\x58\x53\x63\xd6\xf1\x87\x0f\xff\x70\xfa\x3d\xdd\xe4\x89\x05\x3f\xbc\x6d\xf5\xeb\x00\x2e\xf5\xd9\x1b\x8a\xef\xf4\x3e\x5c\xee\xc5\xad\x13\x8f\xce\x48\x33\x76\x20\xb4\x5c\x16\x9b\xb6\xc0\xbb\x3a\x09\x7d\x3d\xc0\xd4\x3f\x85\x5d\xa1\x47\x13\xcf\x20\x1a\x1d\xe9\xbc\xc9\x02\x14\x07\x58\x0d\x23\x80\x79\x8f\x7b\x3c\xd6\x2c\x7c\x2e\x4f\xdf\x89\x4b\xe6\x2f\x1e\x7c\xeb\x61\xde\x33\x3d\x7c\x55\x2a\xcf\xf0\x57\x9a\xef\x9d\x9f\xe7\x8a\xea\x6c\x2c\x73\x22\xcd\xa4\xe9\xb6\x28\xb3\x06\xcf\x7a\xae\xce\xa3\x40\xd2\x39\xc7\x0d\x7d\x3e\x92\x02\x9e\x76\x64\x25\xe2\x0d\x23\x24\x7c\x22\x29\x66\x68\x47\xa6\x4b\x89\x8a\x8b\x52\x6c\x90\x2f\xac\x7f\xfa\xd7\x92\x4f\x27\xf9\x16\x76\xbb\xbb\xa6\x6e\xb3\xb9\x47\x14\xf9\x0e\xbb\xeb\xd8\xb1\x42\x15\xa9\xa2\x2f\xe4\x78\xb2\x4f\xd6\xdf\xe4\x52\x6f\xa5\x00\xcf\x77\x2d\x9d\xd3\x4d\x3a\x91\x4c\x9e\x89\x19\x93\x97\x02\x45\x63\x89\x40\x4c\x11\xd3\xac\x91\x20\x8d\xd6\x78\x47\x87\xbe\x15\x22\x5d\x4e\xa2\xd4\xcb\x34\x60\xc7\x32\x50\xb2\xd0\xc6\x53\xf7\x96\x1e\xae\xdd\xa0\x5a\x65\xb5\x92\xdf\xf3\x6e\x87\x4a\x9f\xe5\x79\xa2\x50\x81\x2d\x83\x8e\x15\x48\x33\xdc\xc1\x95\x18\xd3\xd7\x38\xdb\xd1\xfc\x80\xb7\x83\x80\xd8\x84\x13\x18\x5f\xe4\x58\x4f\x12\x78\xca\xd6\x24\xd1\x32\x18\x3b\xc2\x32\x02\xc0\xe2\xb0\x86\x53\x44\x8f\x97\x2a\x8d\x9c\x97\x7d\xc2\x8d\x77\xcb\x37\x98\x34\xf5\xbb\xbb\xc7\x1b\x7d\x58\xb5\x7b\x9b\x5a\x5f\x1f\xfa\xa1\xdc\xbe\x85\x4f\x9f\xb8\xd2\x2d\xeb\x8b\x7b\xa9\xdd\x50\x0d\x9c\x50\x48\xb0\xa1\x73\xba\xcf\xd0\xac\xe9\x32\x6e\xe0\xe3\x28\x76\x88\xae\x53\x89\x61\x22\x0c\x39\xcd\x0b\x90\xed\x00\x51\x8f\x91\x82\xd9\xc7\x8f\x3c\xb6\xf3\xa7\xb9\x8d\x25\x19\x85\xb9\x7d\x73\x3b\x7f\xce\x16\x1a\xbb\x68\xf5\x83\xfb\x3b\xfb\x2c\x18\x50\xec\xbb\x63\x77\x76\x59\x6d\xe7\xa5\xd7\x9e\x45\x1e\xf1\x1c\x8f\x58\x88\xa2\xd8\xb2\x58\xc1\xa6\x15\x01\x27\x3c\xb0\xcd\x98\x16\x42\xc5\x63\x91\x44\x23\x45\xb4\x4c\x2a\x00\xb4\xe8\xe8\x7c\x9c\xa4\x1e\x4c\xe4\x2c\x50\xed\xc6\xf9\xd5\x45\x47\xfe\x71\xb2\xfd\x61\xba\xc9\x2f\xef\x77\xae\x31\x7f\x50\xb5\x0f\x5e\xfd\x16\xf5\x18\x44\x1d\x5e\xff\x47\xd6\x29\x33\x52\xd7\x83\x46\x04\x4c\x49\x4e\x3c\x1a\x23\x8f\x73\x35\xde\xd2\x28\x15\xb3\xaa\x20\x38\x34\x50\x02\x3d\xe4\x44\x16\xaa\xba\xc2\x88\x24\xf4\x4d\xd1\xf3\x53\x01\x5a\xcd\x1b\x1b\xdc\x0a\x79\xa6\x7b\x75\xcb\x34\xbb\x35\xbb\xfc\xb3\x5f\x0b\x7d\xcf\x0d\x7d\x8e\xaa\x6a\xbf\xd1\xa3\x74\x91\xa4\xf9\xb7\x5f\xa5\xf7\xa6\x29\x43\x37\x58\x97\x37\x03\x9f\xc2\x5e\xac\xd3\x49\xcc\x3a\xc8\x84\x9c\x81\x78\x4b\xe0\x7c\x4a\x65\x88\x6b\xb3\x76\x22\x98\x92\xeb\x23\x9f\x75\x1f\x81\x0e\xff\x3d\xe5\xd3\xe3\xf6\x07\xc3\xf2\x57\x94\x46\xcd\x69\xf2\x8c\x79\xee\xf4\xf0\xa2\x49\x05\xf1\xc8\xed\xf1\x4f\xf2\x91\xbe\xff\xc9\xc6\x9b\x8e\x3c\xf2\x5d\x46\xcf\xaf\xc4\xb7\x2f\x7c\xaf\xc2\x42\xa6\x26\x33\x5f\x7a\xbb\x66\xd1\xe2\x87\x36\x1d\x2e\xb1\xff\xcb\x71\x05\x27\xe9\x53\x76\x2f\xb8\x9a\xde\x58\x93\x48\x81\xaf\x63\xd6\x30\x79\xcf\x07\x38\x60\x79\x6c\x51\xb2\x07\xa8\x00\x71\x61\xc2\x44\x6e\x24\x5b\x02\xa3\xf0\x90\x4b\xe4\x48\x71\x19\x9b\x72\x52\xb4\xcb\xf3\x9b\xe4\x5b\xf6\xe4\x80\x5e\xdf\xcc\x9c\xfd\xb0\x3a\xd9\xed\xe5\x6d\xf3\xe1\xf4\xfe\x4d\x8a\x75\x6c\xbc\xf3\x87\xed\x9f\xac\xda\xd8\x29\x7b\x9a\xe1\xaf\xb2\x23\x61\xc2\x07\x91\x06\x78\x64\xdb\xb6\xe0\xc5\x02\xcb\x9b\x22\xcd\xd0\x22\xc2\x02\x91\xa1\xa1\x23\x9b\x31\x0c\xcf\x16\x82\x24\x8e\x70\x8c\x52\x0f\x8c\x06\x2c\x28\x5a\xa8\xe6\xa7\x6d\x67\xfc\xa3\xd7\xe5\x2e\x85\x3f\x25\xa5\xfe\xa8\x4d\x1d\xb2\x97\xcf\xa4\x07\xd1\x2d\x6e\x36\xaa\xb7\xa0\x65\x7a\x6f\x5a\x21\x7e\xac\x6b\xa6\x99\x38\x2a\x10\xc4\x58\xb5\x13\x91\x10\x4f\xa6\x7c\xd7\xd3\x58\xd7\xf3\x75\x60\xab\x4a\x02\x3c\x43\x95\x5d\x20\x51\x5c\x88\x99\xc7\x6f\x7a\xc3\xc9\xfa\x53\x57\x7f\x95\xe7\x07\xb0\x61\x13\x77\xe7\xea\xc3\x56\x9f\x2d\x9d\x30\x64\x49\x95\xfb\x19\x0f\x06\x9c\x9c\xb1\xde\x3c\xd9\x31\xbd\x47\x16\x02\xd6\x92\x13\x9d\x36\x3d\x46\xb4\x63\x23\xb6\x30\x6f\x9b\x11\xa5\x26\x5e\x1c\x23\x12\x22\x0b\x6a\x04\x40\x95\x15\x38\x5d\x0b\x24\x39\x92\x28\x21\x93\x97\xb8\x93\x63\x3a\x0f\xdf\xc0\xf7\x72\x66\xdc\x78\xbe\xdd\x85\xdc\x13\xef\x40\xa5\xca\x85\x3c\x5f\x7c\x7b\xe6\x76\xfb\x31\x15\x7a\x4e\x7f\x7a\xe2\xa3\xbf\x86\x15\x3f\x7a\x6b\xec\xbe\xe1\xbb\xb2\x3d\x65\xb4\xcb\x35\xe4\xcf\x72\x7f\x96\xfb\x7c\x0f\x1c\xf3\xfe\x99\x1d\x5f\xe6\xa5\xca\xbe\x3b\x29\x7e\x74\xa5\xb8\xfe\xbd\x53\x5f\xe7\x1d\xba\xb2\xd7\x5d\x6b\x56\x9b\xfb\x8d\xaf\xfc\x36\x2a\x5f\x8e\x91\xb5\x93\xc2\xbf\x57\x3f\x57\xb3\xae\x5d\xa1\x45\x9a\x39\x74\x28\x81\xd1\x1d\x95\x76\x9c\x80\x89\x63\x2d\x16\x11\x07\x80\xaa\x24\x46\x28\x08\xa6\x28\x78\x12\xa3\x1a\x3c\x2d\x68\x0e\xd1\x63\x93\x61\x79\x1e\x1b\x8f\x97\x13\xaf\xec\x9b\xd9\xa6\x4d\xcd\x6d\xd2\x6f\xd4\x9d\x75\x41\x02\xa2\x65\x1d\x46\x2e\xfc\xb9\xe9\xae\x3c\x9d\xf2\x8d\xa2\x86\x34\xee\x95\x3f\xcd\x74\x56\xae\xa8\xc9\x71\x68\xb2\x82\xad\x87\x5e\xc0\x86\x8e\x8c\x80\x22\xe8\x56\xe4\xaa\xa2\x4b\x27\x8e\x16\xd0\x20\x22\x50\x27\x20\x46\x81\x4c\x12\x8a\xcb\xa4\x75\x39\x6a\x1e\x96\xd7\x1e\x5d\xa9\xe6\xd8\x7c\xea\xf6\xc0\x2d\x55\xee\x2d\xba\x76\xf3\x27\xfe\xd2\x8e\x0a\x17\xda\x7f\x74\xff\x1c\x3b\xe5\xd6\xa3\xbf\x3e\x52\xe5\xfe\xea\xca\xe3\x4e\x9f\xda\x31\xd9\x2a\xb1\xa5\xc8\x6f\x85\xff\xf1\xd9\x9a\xaf\x67\x96\xbc\xf1\x46\xfe\x17\x17\x14\x1a\xbc\x4e\x1f\xf5\x6f\xbc\xe0\x7f\x7b\xa5\xed\x9b\xd1\xac\x77\xbd\xff\x45\x62\xfa\x70\xf4\x8e\xcf\xeb\x6f\xe8\x55\x78\x66\xeb\x2e\x67\x5b\x82\xa7\xf7\xcf\xe9\xfb\x8f\xa2\x39\x6b\x42\x27\xef\xf7\xcd\x0b\x5f\x2c\xfd\x74\xa1\xf4\xfa\x01\xb2\x34\xcc\x08\x8e\x11\x33\x31\x17\x3b\x38\xb4\x24\xca\x80\x88\xd5\x55\x48\x33\x3c\x27\x71\x89\x46\x7b\xb6\xc2\x31\x96\xc6\x31\x9e\x2c\x08\xb1\x46\x52\xbf\xff\x0f\x7a\xf5\x99\xfd\xe6\xa5\x46\xfb\x85\x89\xbf\x76\xab\x58\xf4\x9b\x0d\x0d\x5a\x7d\xf8\xe0\x78\x8e\x7a\x37\x96\xf6\x3e\xf2\x92\xb2\x29\xef\xf5\x34\xaf\x55\x86\x2e\xb0\x4d\x4f\x0b\xfd\x88\xe3\x35\x4d\xa0\xf9\x80\x97\x42\x4b\x06\xbe\xef\x26\x0c\x0e\x69\x39\x52\x79\x25\x70\x54\x4d\x51\x12\x8f\x32\x13\x3b\x93\x5d\x72\xdb\x94\x16\xbd\xbf\x64\x05\xae\xb6\x1a\x9c\xfe\xe8\x70\x53\xff\x70\xe3\x8b\x23\x16\x6c\x2d\x5a\xb9\xe1\xe1\x4f\x8a\x7e\xbc\x54\x49\xf3\x6d\x9b\x1a\xcd\x68\xa1\x6d\x4a\x12\x54\x34\x41\x8e\x34\xd6\xc3\xa6\x62\x53\x80\xe8\x11\x4b\x59\x92\x22\x39\x94\xc7\x10\xcf\x49\x54\x9d\xf2\x71\x28\xe2\x4c\x60\x8e\x9f\xd6\xd9\xf8\xd1\x0d\xf0\xe7\xb5\x69\xef\xbc\x5f\x77\x4a\x8e\x42\x2f\x35\xf8\x6a\x54\xed\xd1\x2b\x9b\x9c\xfe\x3d\x27\xee\xf3\xd1\xf8\xeb\xab\xd3\x5b\x2e\xf0\x09\xb1\xa5\xd8\xa2\x63\xcb\x77\x68\x4d\x70\x5d\xcc\x63\x42\x9b\x24\xa2\x21\x03\x4c\xa8\xb9\x49\x12\xc6\x2c\xd6\x79\x5a\x51\x62\xc7\x0a\x7d\x37\xf8\x9f\xc8\xf0\x6f\x57\xf8\x6f\x73\xf5\xbe\x19\x85\xb3\x65\xcf\xf1\xa8\x2b\xfc\xd6\xbf\xe8\x1b\x7b\x9f\x1d\xe6\x77\x0c\xe6\x24\xdb\xbe\xf3\xba\xd4\x3c\xfa\xa5\x0e\xff\xf1\xeb\x8c\xdb\x46\xb7\x0b\x3b\x37\x7c\x83\xd3\xcc\xb9\x44\x31\x0c\x1b\xd0\x54\x42\x25\x0e\xe7\x41\x04\x09\x74\x20\x6f\x43\xd5\x8a\x42\x56\x45\x1c\xe5\x40\x16\x8a\x8a\xe0\xc6\x94\x13\xcb\xa6\xe8\xa9\x4e\x6a\x30\xe7\xce\xe2\x6d\x57\x1c\x7b\xaf\x75\xc7\xeb\x3f\x9c\x9a\xf8\xdd\xae\x67\x73\xac\x1b\xfa\xe9\xf5\xb7\x3f\x69\x5a\x6f\xdd\x9e\xa7\xdd\xc1\x8d\x67\x1e\x4f\xef\xc4\xc9\x97\x65\xd6\xe7\x9d\x00\x69\x21\xe6\x91\x2d\x47\x82\xe1\x99\x0a\x45\x74\x19\x21\x99\x0a\xdc\xd8\x0b\x79\xdd\xa5\x63\x88\x14\x37\x00\x0c\x31\xe3\x4c\x3c\xf8\xc9\xa8\x7e\x9d\xb5\xf9\xdf\xd9\xba\xa8\xf9\xec\x25\x6b\xa6\x0d\x28\x67\x64\xef\xfc\xf5\x5b\x17\xa6\x0d\x5f\x55\x3e\xc7\xbd\xb9\x39\x7f\xd8\x91\xe6\x17\x9b\x30\x08\x00\x65\x51\x0c\x1b\x93\x48\x16\x0c\x4d\xb1\xed\xd8\x52\x08\x9f\xc4\x8a\xee\x51\x9c\x68\xf0\x3a\x52\xd4\x10\x12\xde\x65\x12\xc9\xd5\xdd\x4c\x6e\xbb\x62\x97\xbe\x3f\x8f\x6c\x50\x36\xef\xb1\x16\x17\x2f\x74\xfc\xb6\x67\xd1\x77\x56\xcf\xdd\x7c\xeb\xed\xf2\xf5\x2b\x35\xd8\x74\xb7\xc2\x60\x25\xeb\x1c\x05\x29\x8f\xed\x29\xa6\x24\xb8\xa6\xc3\xe8\x50\xb4\x35\x5b\x67\x6c\x44\x31\xc0\xd4\x5d\xfe\x9f\x2a\xab\x4a\x48\x18\x2e\x86\x1c\x36\xb4\x44\x55\x0d\xd6\x33\xff\x26\x1a\xf4\x6f\x91\x95\xff\x36\x26\xeb\x9b\x31\x34\x5b\xb6\xfc\x8f\x8a\xac\x74\x6f\x5b\x78\x77\x8b\xf5\x4d\xcd\x35\xad\x07\xe6\xfb\xb5\x67\xa3\xbb\xb8\x62\xc6\xfe\x65\xc1\xb7\x67\xc7\x54\x19\x3d\x77\xc2\x6b\xff\x0f\x5a\x7d\xa9\xfb\x5d\x3b\xf2\x58\x93\xf1\x08\xad\x70\x3e\x15\x0b\x28\x11\x3c\x9b\x4d\x90\x98\x68\xd0\x52\xb0\xa4\x21\x49\x25\x0a\xe5\x73\xb4\x8e\xa0\x1a\x1a\x94\xaa\xa4\x1e\x3d\xd1\xbf\xdf\x18\xfa\xc2\xd9\x6c\xd3\x8a\x96\x7f\xeb\xab\xfd\x1d\x57\x9e\xd9\x36\xe3\xca\xc2\x6a\x07\x60\xd3\x49\xe7\x3b\x3d\xc7\x37\x18\x71\x25\xbd\xe1\x55\x32\xb4\x24\x04\xc0\xd6\x2d\x0a\x98\xba\x1c\xa0\x44\xf1\x14\x3d\x49\x88\x66\x11\xcf\x50\x11\x1f\x1b\xba\xc3\xc9\x44\xd7\xb1\x4c\x63\x0a\xc0\xbf\x11\xbd\x3d\x72\xec\x92\xbd\x4e\xe4\x1a\xe5\x8a\x83\xdb\xb5\x6e\x51\xb0\x5c\xe5\xde\x8d\x56\x6f\xbb\xb9\x25\x5f\xc3\x87\xc7\xcf\x54\x58\x3f\x50\x33\x4e\x65\x7d\xd3\x26\xf5\xca\x2c\xa7\x60\x97\x11\xb0\xa6\x71\x01\x20\xb4\x10\xba\xa6\xa3\x68\xae\x65\x41\x5d\x67\x18\x36\x0e\x91\x9d\xc8\x9a\x03\x4d\xc4\xb0\xb2\x4a\xac\x88\xe0\xd4\xae\xd0\x63\xf9\x88\xd2\x64\x56\xc9\x69\x85\x8b\x55\x2b\x77\xa7\x44\x95\xe7\x6e\xbf\x5b\x7e\x5d\x51\x5e\x7c\xfa\xc5\x43\xe5\xdf\x9c\xda\xac\x7d\xd6\xc1\xef\x29\x27\x0c\xbe\x48\x63\xa4\x43\xca\xd3\x08\x88\x44\x6c\x21\x0a\x1b\x16\x84\x02\x1d\x69\xa1\x42\x58\xc1\xc4\x90\x38\x30\x0a\x14\xcf\x8a\x20\x8d\xfd\x48\xf3\x52\x1b\xc9\xe8\x9e\x67\x56\x8e\xdc\xf8\xa0\xaf\xde\xe1\xd0\xf4\xd7\xcb\x5e\xfb\xfd\xd8\xfe\xeb\x0b\x8b\x1d\xda\xd6\x6b\x59\xff\xcb\xab\x66\xaf\x3e\x9f\xf5\x25\xa1\xd4\x8c\xdc\x9a\x65\x08\x2a\x00\x01\x6f\x79\x48\x17\x01\x52\x62\x9f\x0b\x50\xcc\xa8\xc0\x71\xe8\x88\xb5\x45\x5b\x03\x49\x64\x44\x3c\xb1\x78\xdf\xa3\x38\xef\x3f\x20\x93\xfe\xb9\xfe\x6f\x5d\x6f\xdf\x96\x79\x66\x64\xeb\xf7\x48\x2d\x9f\xbf\xe6\x85\x7d\xb3\xbb\x83\xcd\xc7\x57\x57\xe0\x7b\x34\x12\xac\x3a\x33\xe2\xc3\xd7\xe5\x3b\x57\x2e\xce\x9c\xf8\xf3\x7c\xf1\xa7\x72\x69\xee\x7d\x19\x91\x46\x06\x6b\x68\x2e\xe7\x88\xb4\x10\x7b\x91\x0f\x03\x0e\x5b\x1c\x87\x02\xac\xd0\xa2\x1e\x25\x56\x6c\x60\x13\xc9\x90\xd6\x30\xa4\xb5\x24\x05\xe6\x77\xdf\xad\x62\x4b\x26\xed\xfe\xa0\xf2\x07\x0d\xba\xb5\xfc\xf1\x19\xd0\xff\xc5\xc3\xa5\x3f\xfa\xa4\xcd\xc8\xe2\x63\xdf\xcf\x18\x35\xfe\xb3\x6a\x83\xd3\x5b\x64\x40\x8a\x77\x15\x91\x24\x34\x0f\x31\x9d\x24\x2c\xcb\x23\x0d\x84\x1e\xa6\x69\x13\x25\x8c\x05\x12\xc3\xd6\x43\xdb\xc6\x26\x31\x81\x40\x87\x31\xb0\x33\xd1\x85\xd9\x45\x4e\x7e\x77\x65\xcf\xc3\xb2\xa3\x3b\xbc\x71\x67\x6d\xff\x1a\xd7\x26\x7d\xb0\x75\xd2\xe5\x6b\xd3\xf2\x2c\xbf\x55\xb3\x63\xcf\x43\x20\xeb\xe2\xeb\x29\xcd\x49\xa0\x4d\x2f\x11\x41\x2c\x69\x80\xe2\x62\x5a\x76\xf5\x20\xe0\xb0\x42\x7b\x28\x90\x23\xcc\xf9\x36\xe1\xad\x24\xd4\x80\xeb\x43\x9a\x8f\x23\x2b\x54\x33\x59\xb8\x81\xbb\xdf\x1b\x3e\x71\xf1\xa4\x1d\xa7\xf6\x4e\xde\x53\xeb\xd0\x9d\x01\xb3\x8b\xd4\x9c\x76\xb0\xd5\xa8\x4f\x26\x97\xfb\xe1\x0c\xba\x54\x3d\xeb\x74\xfa\xa9\xbd\x40\x0c\x29\x59\x30\x19\x59\xf1\x29\x85\x73\x89\x60\x23\xc8\xe0\xd8\x62\xb1\x43\x13\x8f\x28\x81\x4b\x2b\x6e\xac\x84\xba\x64\xf8\x82\x17\xd3\x5c\xf2\x1f\x00\xed\xbf\xf3\xd8\x7f\xeb\x7c\xfb\x66\xe4\xca\x56\x29\xcf\xa3\x79\x6c\x4b\xb5\x27\x72\xdd\xcd\xbe\xff\xde\xc8\xb7\xd5\x60\xa9\x3c\xe9\xfd\xb0\xdf\x6f\x17\x8e\x7f\xb4\xff\x54\xb5\xdc\xc7\x0a\xd5\x38\x98\x91\xf5\x45\x97\xd4\xf0\x03\xdf\x51\xf5\x28\xe0\x64\xc2\x51\x42\x02\x13\x41\x16\x6d\x29\xc2\xba\x05\x35\x99\x10\x08\xa2\x48\xd3\x75\xc6\xe3\x55\x97\x26\x81\xcf\x78\xe2\xa3\xe2\x73\xff\x39\x36\xda\x77\x60\xf7\xfd\x36\x63\xa3\xfc\xcd\x7b\x5f\xc8\xb9\x77\xc0\x2b\x77\x5f\xeb\xd2\x69\x6b\x3e\x79\xc8\xd0\xe5\x8d\x0e\x7f\xde\x98\xaa\x9a\xde\x8f\x63\x79\x32\x8a\x74\x4d\xe3\xf5\x40\xb2\xbc\x40\x06\x94\x63\x2a\x0a\xa0\x35\x5e\xb4\x59\xcf\x92\x5c\x9b\xa3\x6d\x19\xa8\xa1\x11\x8a\xd8\x89\x43\x3d\x36\x53\xdb\xd4\x91\xce\x95\x2e\xb4\x98\x70\x71\xa9\xf2\xc2\xcc\x1b\x05\x6b\x7f\xb2\xe1\x95\x9b\x25\x7e\xbc\xac\xd5\xcf\x59\xe0\xc6\x47\xd7\xab\xee\x9d\xf3\x30\xcd\x58\xb8\xd8\xb2\x74\x2e\x01\xaa\xa1\xb2\xbc\x4a\x08\x83\x5d\xdb\x22\xbe\x10\xf2\x66\x44\x18\x53\x50\x14\x9e\xb1\x68\xd9\x95\x13\xca\xa5\x2c\x27\xc4\x14\x93\xda\x83\xcf\x57\xdb\xc6\xbd\xfd\x6e\xa1\xfb\x25\xbb\x5e\xb9\x3c\x7c\x61\xfe\x37\x67\x7e\xe3\x7f\x51\x7e\xd8\xe1\x1b\xdc\x1b\x2d\x0e\x7d\xba\xbd\x56\xd6\x79\x41\x52\x73\x38\x09\x4e\x88\x04\xc7\x72\x2c\x2a\xd2\x5d\x91\x31\xa1\xcf\x86\xa6\x25\x84\x96\xa4\xd2\x7e\xc8\x8a\x94\xc0\xb3\x44\xa6\x22\x18\x73\x24\x92\x62\xe7\x91\xf7\xcf\xbf\x1d\x7b\x59\xfe\x21\x41\x98\xbd\xfb\xc3\xfb\xfb\x7e\xed\x94\xef\xdc\x39\xf1\xfc\x39\x6e\xc4\xe2\xd5\xad\xa7\xc6\x3b\x07\x85\xbb\x87\xb5\x2b\x95\xe6\xa1\x9b\x93\x10\x0f\x05\x7c\xc4\x7b\x21\x0a\x3d\xdb\x83\xb1\xca\x3a\x9e\x03\x03\x08\x75\x82\xa0\x6f\x25\xb4\xe0\xbb\xba\xcf\x9a\x86\x4f\x87\x9e\x80\xe2\xff\xb1\xed\x5b\x79\xfe\x6f\xd3\xa8\xbe\x19\x13\xb2\x35\x2b\x3e\xf0\x91\x7f\x89\xef\x6d\xce\xbe\x7a\xfc\x86\x0b\x1f\x76\x3f\xd3\xb9\xe8\xf4\x2d\x17\x0a\x8d\x3b\x58\x3f\x97\x57\x7f\xb7\x36\xf7\xe3\xa2\x05\x5a\xe6\x4f\x73\xeb\xe9\x51\x11\xef\x5b\x1c\xcf\xd3\x76\x04\x5c\x08\x75\x0f\x6a\x8c\xe5\x03\xdd\x32\xa5\x28\xf0\x24\x37\xf2\x24\x1f\x20\xcd\xf0\xc4\x44\x89\xa3\x30\x51\x32\xc9\x0a\xfb\x6a\xb7\xe6\xdf\xbf\x2b\x96\x7e\xbe\x5e\xf1\xc5\x1d\x4a\x0e\xbe\xbe\xed\x95\x9b\xc5\xbb\xcd\x28\xc6\x82\xee\x1f\x9c\x9c\x5c\xb8\x64\x9d\xf4\xda\x54\x42\x38\x5d\x8a\x10\x45\x85\xb2\xea\xfa\x1e\x91\x0c\x08\x02\xc1\x55\x1d\xc0\x52\xae\xad\x0a\x11\x15\x89\x1c\x49\x1c\x96\x41\x82\x23\xf0\x89\x6c\xe3\xd4\x36\xb5\xad\x61\xc9\x0a\xc5\x8a\x9c\xdf\xbf\x75\xb2\x5d\xeb\x4c\xb9\x0d\xbb\x37\x0f\x61\x0e\x75\x1c\x38\xaf\xd0\x2b\x95\xa6\x8e\xdc\x58\xfa\x8f\x32\x69\x86\x02\x88\xbe\x27\x0b\x36\xe3\x24\x50\xd5\xc5\x84\x60\xc6\x4a\xe2\xc8\x94\x4c\x0f\x13\xd9\x33\x38\x11\x4a\x50\x47\x0e\x8d\x23\x25\xb4\x68\xa0\xd8\x6e\x26\x6b\x15\x0d\xb6\x76\xbe\x73\xb6\x52\xbf\xd2\x25\xcf\x7e\x59\xb6\x7c\xc3\x9e\x25\x8b\x54\xcc\x56\x6e\x5c\x83\xde\x2d\x4a\xae\x18\xdd\xa8\x8c\xbc\x24\xeb\xdb\xa3\xa9\xf7\x6e\x62\x2a\xc6\x36\x72\x79\x43\x12\x69\x51\xb4\x95\xd0\xf6\x8c\x08\x72\x62\xc4\x3a\x9a\xad\x09\x11\x70\x18\xe8\xd9\xa2\x6d\x25\x7e\x82\x3c\xcd\xe7\xa2\xd4\xc7\x9e\x3d\x24\xfb\x8a\x82\x97\x6a\x5d\x11\x5e\xec\xf6\x4e\x9d\x8d\x3b\x66\xd4\x53\x77\x94\xad\xbd\x20\xc3\x2a\xbc\xb2\xff\xb5\x87\x63\x77\xa7\xbb\x12\x95\x3d\xc9\x16\x63\x87\x12\x69\x97\xa1\x12\xc0\x49\x2a\x4f\xb0\x13\xe8\xc0\x47\xae\xe2\x70\x1e\xcb\x4a\xac\x82\x11\x0a\xdc\xbf\x9a\x49\xc6\xb6\x33\xa1\x88\x67\x06\x9f\xd9\x52\xa2\xe4\xd5\x63\x5c\xf4\xdd\x05\x6f\xc4\x9c\xb9\xd7\xbf\x3a\x50\x2c\xfb\x0a\xdc\x73\x90\xf4\xd9\x4f\x0b\xa7\x77\xdd\x92\xe6\x30\x9f\x38\x94\x2a\x98\x1e\xe2\xf4\x20\x96\x54\x12\x24\x0e\xa4\xad\x28\x71\x08\x43\x5b\x50\x14\x75\x89\x38\x9c\x89\x6c\x68\x59\xbc\x63\x45\x7a\x88\xe9\xc7\xa6\x41\xff\x6d\xdc\xda\x37\x23\xcf\x8c\x9c\xff\x6b\x30\xfa\xe1\xed\x95\xe2\x70\xca\x8d\x5e\xfe\xba\x14\xbc\x3d\xf4\x8f\xb7\x84\x0b\x23\xbd\x9d\x51\xfe\x25\x77\xeb\x9c\xcd\x3b\xe7\xed\x16\x59\x97\xf6\x4e\x9d\x83\xa1\x21\x71\x02\x03\xa1\xa6\x39\xaa\x4b\x18\x8e\x10\x1a\x23\xd9\x01\x74\x48\x51\x86\x13\xb0\x80\xf7\x89\x45\x78\x39\x74\x24\x85\xa2\x35\x2e\xf6\x53\x7f\x9c\x05\xb7\x36\x54\xeb\x37\x75\xfd\xec\x3f\x7e\xee\x33\x70\xf2\x49\x6d\xef\x99\x37\x67\xac\x3f\x36\xfc\xc2\xc9\x5a\x13\xf3\xae\x20\x23\xdf\x38\x90\xde\x63\x03\xd6\xd6\x15\x1e\xba\x9a\x67\x3a\xc4\x32\x99\xc0\x30\xcc\x48\xc2\x9a\xc8\xb9\xae\xa1\xfb\x01\xc7\x1b\x6e\x00\xf5\x90\xe2\x1d\xd6\xf6\xf4\x24\x4c\x32\xb1\xa9\x9c\xab\x3a\x6c\x29\x7e\xaf\xd1\xb1\xe6\xd3\xb3\x55\x5b\x57\xa8\xd7\xb5\x6e\x5f\xae\xce\x75\xfa\x7e\xcd\xde\x0d\x1f\x4c\x2e\x9f\xc3\xbe\xf3\x4c\x9a\x49\x36\x61\x18\x12\xce\x97\xbc\x40\xa3\x6d\xdd\xf6\x55\x97\xa5\x1d\xc2\x07\x86\x62\x30\x8c\xa3\x04\x01\x07\x78\x5a\x0b\x4c\x23\x21\x9c\x8f\x3d\xde\xd0\xc4\xd4\x85\xda\x81\x59\x72\x1b\x5b\xbf\x7e\xb3\x9f\xd8\x30\xe7\xfd\x1e\x05\xbf\xeb\x16\xfe\x84\xa7\xf7\xfe\xbc\x86\x34\x7c\xf6\xbc\x12\xc5\x8f\xa6\xb9\x73\x0f\x75\x28\x7a\x0e\xc5\xc8\x1a\xa5\xa8\xa1\x6f\xb0\x40\xd3\x88\x69\x08\x01\x07\x4d\xa4\x39\x62\x04\x2c\x8f\x68\x9a\x27\xd0\x80\xb2\x28\x4f\xf1\xf0\x7f\xd4\x15\x4f\xe6\xfb\xbf\xbd\x25\xf4\xcd\x28\x53\x39\x5b\xc6\xa0\x47\xfe\x65\xd9\x4b\x4b\xd6\x56\xb8\x71\xb9\x77\xbe\x77\x92\x77\x1b\x55\x3d\xd1\xb1\xcb\x91\x1c\x3d\x7b\x6f\xfd\x73\xe3\xfe\xed\xb9\x7f\x2a\xba\xf5\xdc\xac\x34\xbf\x11\x24\x82\x82\x0d\x53\x10\x80\x4c\xeb\x1c\xf4\x79\x39\xd2\x45\xc1\xa2\x7c\xc5\x34\x39\xa4\x6a\x9e\x22\x78\x82\xe9\x5b\xa2\x22\xc4\x88\x86\x8c\xc8\x9b\xa9\x3f\xce\x80\xd6\x1f\xb8\xe3\x6a\x1d\x16\xad\xbd\xd7\xc6\xb4\x9c\xfb\xd6\xfb\xfb\x1b\x8e\x1f\x7c\x28\xd7\x8d\xfe\x3f\x7d\x33\x63\xec\xed\xfb\x2b\x5e\x4d\xf3\x34\x88\x13\x65\x1c\x30\x09\xc0\x41\x42\xfb\x1e\x60\x38\xc9\x0c\x04\x2f\x72\xa5\x48\x40\x72\x2c\x79\x8a\x8b\x68\x8b\x71\x91\x64\xa0\x44\x92\x45\x6c\xfb\xa9\x8f\xfd\x55\xf6\xab\x43\x28\xba\xe8\x8a\x9f\x7b\x1f\x9f\xd5\xf5\xde\xdc\xdf\x5f\x5f\x30\x37\xf4\x0e\x76\x5d\x71\x63\xe4\xe7\x9d\xef\x56\xff\x39\xeb\x04\x6a\xa9\x15\x38\xb0\xe2\x11\x29\x51\x63\x16\x27\x96\xc4\x78\x44\x20\x0a\x0a\x19\x9f\x52\xb1\x1e\xd1\x26\x15\xa8\x42\xa4\x01\x2d\x81\x7c\x64\x24\x3a\x0c\x08\x67\xa6\x46\xc5\x76\xdb\x73\xb5\x69\x2f\xef\x93\x46\x23\x7e\xb9\x5f\x6c\xd6\xe5\xda\x2d\x6a\x7d\x3e\xec\x48\x83\x3f\xe7\x7c\xf3\xab\xfc\xd6\x83\x37\x44\x20\xa4\x79\x23\xf3\x2f\xff\x64\x29\x45\x37\x4d\xe8\xca\x10\x3b\xbc\x11\x84\xd0\x33\x22\x1d\x2a\x2c\xa6\x28\xc2\x08\x12\x27\x27\x32\x23\xa8\x89\x9b\x78\xc4\xf9\x5b\xbc\xfc\x9f\x23\x9f\x69\x55\xba\xa9\xdd\x6b\xbf\x3a\xc5\xaf\x91\xff\xcf\x0a\x73\xaf\xee\x5c\xf6\xde\x98\x37\x8b\x1d\x54\xc7\x3f\x28\xf6\x64\xa7\x07\xbf\xa6\x97\x4b\x08\x73\x4a\x10\xdb\x16\xa4\x43\xdf\x09\x22\xc5\x84\x5e\xc2\x4b\x44\x50\x24\x2c\xfa\x90\xb1\x65\xa4\x5b\x90\x72\x62\x8d\x16\x00\x0d\x09\x08\x24\xd9\x16\x53\xc7\xca\xab\xcd\x96\x3c\x57\xb6\xe9\xa8\x66\x67\x07\xdf\x69\xf6\x5c\x79\x35\xdb\xcd\x52\x4b\x0b\x17\xa9\x3d\xe7\x5e\x35\x5c\xbd\xec\xde\x6c\x2b\x6b\xa6\x19\x17\x08\xfc\xc4\xd5\x48\x60\x68\x12\xe0\x74\x47\x75\x91\xcd\xc0\x98\x41\x86\x20\x26\x3c\xcd\x87\x96\xa3\x5b\x91\x4e\x5c\x09\x33\x92\x6d\x8a\x6c\x4c\xf1\xa9\x8f\xfd\xc1\x05\x83\x5e\x9c\x7d\x7d\x8d\x3a\xa2\x10\x0e\xdf\x7e\x6f\xc3\xbe\x9c\x5f\x3c\xf8\xed\x58\xdb\x9c\x77\xf4\x67\xef\x5c\x6c\x3d\x37\xeb\xcf\x2b\xa9\x25\x5d\x15\x21\xe0\x03\x46\xd4\x41\xcc\xb9\x81\x07\x39\xd1\x85\x89\x2e\xa9\xbe\xe7\xc3\x44\xf5\x39\x27\x66\x1d\x9d\x75\x6d\x33\xa2\x13\x87\x05\x80\xcb\x8c\xe2\xa3\xc1\x5b\xb9\xf7\xb7\x6a\xf8\x6b\xb9\x37\xea\x8e\xfd\x74\xca\x86\x1d\x83\x4a\x9c\x78\x49\x5c\xf3\xcb\xa6\x5a\x23\x4e\xfd\xa9\x66\x5b\x50\xba\x5f\x9a\x49\x89\x13\x51\x8f\x43\x15\x1b\x3a\x0b\x89\x2f\x7a\x58\x4b\xf8\x30\xb1\x99\x40\x70\x92\x58\xb4\xb8\x58\xa7\xb1\xc4\x69\x01\x64\x18\x46\x71\x08\x42\xca\x7f\x5e\x1a\xbf\x6b\xfc\xaf\x13\x67\x58\xf2\xac\x7c\x5d\xbb\xe4\x7b\x69\x96\x3e\xf1\x05\x3b\xcf\x1f\x83\xa7\xed\x2d\x98\xff\xd2\x4b\x67\x0b\x6d\xb8\x58\xb5\x79\x95\xc9\xf5\xfb\x66\x3c\x7c\xf0\xf0\xfe\x3f\x05\xfc\xfe\x26\x66\x79\xb6\xd3\xc1\x86\xbd\x8a\xc3\xf5\xe3\xed\x79\x87\x3f\xd9\x37\x42\x99\x4a\xf7\x98\x7b\xfd\xfe\xc9\x8e\x6b\xeb\xdf\x5a\x5c\x72\x62\x7a\xb1\xf8\x48\x0b\x63\x1c\x44\x02\x07\x65\x33\x4e\x34\xd5\x60\x88\x17\x0a\xb1\xa4\x58\x9c\x25\x48\xa1\x40\x20\x4e\xb0\x25\x87\x3e\x0f\xb1\xc0\x44\x52\x2c\x69\x99\xb0\x5c\x17\x9e\xf5\xec\xe5\xa9\xfd\xdb\x1b\x15\xef\x28\xf3\x6a\xf6\xdb\x1f\x92\xbe\x75\xfa\x9f\x1a\x31\xfe\xdd\x71\x3d\xb6\x47\x5f\x65\xcb\x93\x75\x79\xc5\xd4\x2b\x04\x0c\xd0\x05\xdb\x8c\x14\xd3\x30\x25\x5e\xc2\x62\x60\x63\x49\x73\x7d\x8a\xd7\xf4\xc4\xa0\x0c\x23\xa1\x14\x64\x79\xbc\x1b\x3b\xb6\x8a\x7d\x9b\x8b\x53\xec\x97\xfc\x38\x15\x3e\x93\xb3\xc3\xc8\x1f\x2b\x5f\xf9\x3e\x1b\x53\xb7\xd6\xfe\x8c\x3f\xcf\x8d\x99\xb9\x68\xd7\x86\xbc\xc3\x4b\x97\x84\x2f\xb5\x19\x91\xe6\xfd\x12\x9d\x63\x0c\x8e\x86\x1e\x85\x31\xa3\x6a\x31\x4c\x68\x3f\x8e\x15\x68\x71\x8e\xa6\x45\x31\x6d\x82\x98\x4f\x2c\x49\xf1\x54\x11\xbb\xac\xcc\xeb\x49\x8a\x75\xd2\x87\x65\x7f\xaf\xb8\xb0\xf2\xaf\x47\x56\xc0\x4f\xee\xed\x1d\xf3\x69\xf9\x5e\xdd\xaf\x4d\x5f\xb4\x62\x56\xf3\xee\x3f\x74\x5b\xf8\x66\x7f\xed\x42\x9a\x51\x9b\xac\x21\xd9\x02\xa2\x20\xc2\x01\xf6\x0d\xc6\x50\x44\x2f\x88\x15\x4d\x53\x04\x60\xab\x66\x42\xb0\xef\x88\x10\x63\xc9\xf2\x03\x5f\xc7\xb6\x95\x64\x22\xa7\x4e\xf2\x56\x6c\xbc\xed\xe8\x87\x9f\x0f\xcb\xee\xec\xee\x74\xa9\x61\xc7\xa3\x82\x6a\xbc\x92\x6b\xe0\xa2\x76\x7d\xf7\x5d\x9c\x71\xb7\xd3\xb8\xf4\xc6\x77\x49\x0f\x90\x02\x68\xdd\x71\x34\x42\x53\x3a\xcb\x4a\xb1\x13\x22\x51\xa5\x4d\xc7\xc6\xbe\x4b\x99\x8a\xa2\xca\x76\x10\x11\x5e\x32\x79\x4d\x80\x21\x27\x65\xb2\x05\xbb\xe3\xc0\xf2\x5f\xda\x76\xac\x28\x6e\xbd\xf0\xd4\x88\x7c\x65\x9b\x2e\xa8\xb1\x7a\xd5\x88\x19\x1b\x4a\x2d\xda\x3d\x6e\xe3\xda\xcf\x8a\x9d\x49\x6f\x51\x49\x83\x44\x13\x11\x0b\x39\x2b\xd6\x63\xd7\x66\x7d\x5a\xd2\x54\x23\x10\x54\xc1\x83\xac\x18\xc8\xa2\x1f\xd2\xa1\x9c\xa0\x20\xf6\x18\x87\xf6\x3c\x81\x23\x8f\xe3\x70\x7a\x67\x1b\xf2\xf0\xb7\x37\xc5\xbd\x8b\xf2\x2d\x5f\xb5\xb8\x48\x91\x16\xab\x6f\x0e\xad\xde\xbe\xe3\x4b\xd2\xa4\x62\x9d\x66\x94\x7b\x50\xae\x49\x9a\xc1\xa6\x3c\x6f\x02\x8f\xd1\x2c\x1c\x61\x9d\x0f\x43\x93\x85\x0a\xc1\x49\x4c\x47\x50\x4e\x1c\xd5\xb7\x75\x5d\x88\xf5\xc4\x93\x30\xab\x38\x24\x36\xf5\x54\xec\xa9\x27\xbe\x1b\xf8\x8f\x95\x97\xf2\xcd\xce\xb6\xe1\xcc\xe5\x17\x8e\xb4\xae\xba\x9c\xfe\xfc\xe2\xd0\xfc\x47\xa6\xdd\xba\x36\x60\xd6\xfa\xc5\x85\xd6\xa7\x77\xb0\x24\x89\x96\xc2\xc5\x42\x22\xb3\x90\x70\xa2\x6b\x9b\x62\x60\x19\x09\xd0\x42\xe2\xd2\x6c\x82\x89\xa1\x4a\x8e\xe0\x4a\xa2\x0d\x05\x00\x2d\xdb\x84\x2a\x49\x0d\x36\x55\x2f\xd5\x6b\x31\x6d\x7f\xc7\x2e\x53\xd6\x16\xdd\xb8\xe5\xb9\xcb\x75\x6a\x2e\xd8\x75\x57\x7e\x82\x7a\xa1\xd8\x62\xe7\xe5\x60\xc0\xae\x9c\xe9\x4d\xfe\x82\x84\x03\xdd\x4e\x08\xa0\x3c\x4a\x34\x01\x4b\x62\x56\xf3\x84\x08\xa8\x50\x62\x38\xca\xe6\x75\x4e\x15\xbd\xc4\x17\xb1\xac\x73\x72\xc8\xd9\x5a\x4c\x3d\x7e\xd3\xeb\x1a\x4f\x39\x35\xfe\xa5\x37\x47\x39\x4d\x4b\xf6\x7f\xb3\x3f\x35\xef\xc7\xed\x05\xbe\x84\xef\xd6\xef\xf7\xda\xda\xb6\x57\x3e\xea\x52\x46\x4f\xaf\x3d\xa3\x44\xe4\x75\x12\x3a\x26\x66\x19\xcd\x00\x8a\xc9\xf8\xac\xcf\x8a\x72\xac\x13\x64\xa9\xa1\x14\xd8\x44\xc7\xb6\x6d\x27\x92\x63\x00\x83\xf3\xc5\x04\x64\x02\x36\x3d\x5d\xe4\xc7\xa1\x87\xc4\x4b\x43\xeb\xdc\xeb\x5f\x07\xfe\x39\xa4\xa4\xb6\x7e\x79\xb9\xca\x51\x83\xf9\x41\x3e\x5f\x9a\xf2\x64\x2e\xe5\xd1\x5f\x2f\x3b\xda\x20\xa3\x7c\xe7\xbd\x76\xf3\x3d\x15\x9a\x7c\x55\xf5\xfc\xcf\x19\xbf\x35\x6f\x76\xed\xed\xaf\x4a\x7c\x39\xe1\x8f\x2f\x2b\x6c\x91\x3e\x7a\xe4\x2b\xe6\xe1\x37\xcd\xf9\xf3\x3d\xfa\x6c\xc5\xd7\x36\xd5\xad\xfd\xa0\x9b\xd8\xbe\xf3\x5b\x51\xab\xdb\x5d\x7f\x53\x37\x34\xe9\x38\xee\x3e\x49\xaf\xe0\x25\xa2\x59\xc3\xf4\xe5\x80\x0e\x98\xc0\x70\x25\x0e\x63\x47\xb1\x94\x80\x8d\x6d\x95\x97\x74\xdd\xd6\x39\x23\x40\x01\x4f\x0c\x4d\x11\x39\x4b\x74\x64\x96\x13\x1e\x77\xf1\xd6\xf9\x1b\x39\xc3\x7e\xee\xd3\x74\xc9\xf9\xe9\x8d\xd7\xce\x2e\xd7\x65\x6a\x97\xb7\x4a\xb9\xb9\xf6\xac\xbd\xeb\x9f\x3c\x58\x7d\x7d\x1e\x94\x5e\x7f\x01\x89\x6f\x68\x1c\xc5\x47\x92\x48\x90\xec\x91\x84\x63\x02\x68\x41\xcf\x8b\x50\x04\xec\xd8\x60\x39\x88\x69\x3e\x82\x72\x18\xf0\x88\xf8\x3e\x15\x67\x32\x88\xbd\xff\xce\xdc\x76\x63\x9a\x4e\x3e\xda\xb0\xe5\xc4\xf5\xeb\xc3\x9f\x3b\x75\x60\xb7\x4d\x1b\xb5\xb9\xda\x53\xd5\xfb\x77\x5d\xb6\xae\x79\xb4\x26\xcd\xc3\xfd\x38\xf0\x92\xc0\xb7\x62\x3d\x72\x02\xca\xa2\x42\xc5\x30\x22\x26\xc2\x74\xe8\x72\x6c\x64\x0b\xbe\xae\x86\x82\xa4\x06\x2c\xf6\x05\x35\x54\x99\x18\x68\xa9\x8b\xe5\xe5\x9b\x33\xc6\xcc\xcf\xf1\x4d\x83\xd3\x3b\x5f\x2c\x5b\xea\x95\x49\x0b\x5f\xec\xb1\xf4\xc3\x41\x7d\x96\xe5\xab\xff\xf5\xe4\x5b\xd3\x5e\xaf\xb1\x36\xbd\x45\x82\x90\x84\x42\xa8\x43\xce\x90\x44\x9d\xd5\x81\xa9\x5a\xb1\xa8\xf3\x34\x63\x22\xd7\xf3\xb4\x40\xe4\x54\x83\x95\xa8\x90\xb2\x79\x59\x4e\xdc\x28\x74\x33\x93\x61\x2c\xb8\xa0\x4e\xb6\xfc\x3d\x8b\x1d\x79\x6b\xac\xf4\xe7\xbe\x05\x7b\x7a\x9c\x78\xe3\xf2\x65\xd4\xea\xcf\x1d\x6b\xda\x97\xac\xbb\x78\x44\xae\x83\xe9\x3d\xb6\x42\x54\x06\x59\x1a\x50\x42\x8a\x38\x10\x39\x91\xef\xa9\xba\xce\x9a\x21\x25\x38\x66\x1c\x86\x5c\x24\x29\x44\x26\x16\xe6\x04\x8b\x13\x31\x6d\x68\xdc\xe3\xb5\x4d\xf5\x6f\x1b\xb7\x3b\xee\xd6\xde\x38\xf4\x83\x4b\x1d\xfb\x4d\x5c\x3f\xba\xec\x0b\x95\xb7\x70\xd5\x3e\x2e\xd0\x67\xcd\x95\x4f\x66\x17\xe9\xf9\x5d\x9a\x8f\x6c\xf1\x12\xc5\x70\x0e\xe0\xe4\x38\xd0\x7d\xda\xe5\x5c\x81\xf3\x5d\x56\xb4\x69\x24\x21\x85\x72\xb0\xe2\x86\x2a\xd6\x79\x1f\xd1\xb1\x49\xa9\xa1\x92\x02\x25\xbe\xf1\xfc\xc2\xb1\xaf\xdc\xaf\xd6\x66\xea\x81\x7c\xbc\x32\x7a\x34\x55\xba\x60\xb1\x63\x9d\x0f\xb5\x2b\x7a\xb7\xc8\x52\x6e\xc0\xbb\x24\xeb\x9a\x12\xa9\x89\xec\xe5\x80\xd2\xa4\x80\x8e\x79\x9f\x72\x2c\x47\x23\x04\xcb\xb1\x1d\x31\x98\x97\x03\x1a\xb1\x34\x6b\x09\x91\x14\x43\x01\x01\x45\x8e\x1c\xd1\xa2\x50\x26\xfa\x6f\xd3\xc7\x57\xfb\x75\xc3\x4e\xe3\xe3\x9e\x1d\xaa\x6e\xe8\xf2\xea\xaa\x55\xd2\x4a\x7a\x70\x8f\x5b\x19\x13\xd9\xb7\x0b\x8d\xd9\xb2\x3c\x47\x7a\x09\x1c\x30\xa3\xc6\x3c\xc3\x61\xcb\x02\x00\x8b\x6e\x80\x8c\x08\x3b\x0e\xc7\x70\xb6\x67\x89\x6a\x60\x27\xb1\xc6\xc9\x58\x32\x13\x4b\xb5\xb0\x9d\x30\xa2\x8d\xad\xd4\x36\x5d\xea\xe1\x36\xef\xeb\x07\xbf\x96\x1e\x5f\x92\xff\xb5\xca\xc5\x61\x5b\xcf\xcc\x1b\x3f\x86\xdc\x39\xd0\x61\xe6\xa7\xd9\x1a\xe4\x5d\xfa\x4d\xff\xf4\x1e\x9b\xe2\x29\x59\xe5\x71\xcc\x78\x0c\x15\xb3\x14\xed\x30\x94\xe4\x46\x1a\xed\xd0\xbe\x86\x79\x5f\xe0\x14\xcb\xd0\x45\x6c\xc5\x40\xe0\x34\xde\xd0\x08\x46\x29\xd8\x10\xbc\xa1\xcc\xc9\xca\x9d\x47\x9d\x5a\x79\x2f\xcf\xc5\x97\xe8\x21\x2f\xae\xde\xb6\x6c\x57\xab\x11\x81\xda\xf2\xdd\xe9\x51\xc1\x95\x7f\xa4\xd7\x40\x4c\x8b\x07\x89\xce\x88\x8a\xa9\x2b\x21\xc3\x49\xd0\x90\x21\xe3\x11\xca\xd1\x43\x8e\x11\x30\x8e\x80\x0c\x02\x08\x79\x23\x60\x75\xc8\x84\xae\x1d\xcb\x8f\xa7\x97\x79\xab\x0e\x1c\x7a\x6e\x74\xf9\x46\xfb\xfa\x7d\xd4\xce\x5c\x31\xeb\x56\xbb\xd3\xe5\x84\x97\xef\xed\xfa\x78\xf7\x35\xf4\xa0\xc7\xc6\x37\xb2\x2e\x20\x9f\xda\xa6\x5d\x35\x0e\x0c\x01\x22\xe0\x2a\x2c\x13\xcb\x9c\x63\xa9\x8a\x68\xf1\x8e\xa7\x20\xc3\x37\x4d\xce\x67\x2c\xa0\x08\x8c\xe4\xda\x3e\x60\x64\xcf\x8f\xe3\xd4\xe5\xd8\x04\x70\xe8\xb3\xdb\x2b\x76\x57\xae\xbb\xfc\xa9\xf0\x72\x89\x07\xc3\x37\xd5\xeb\x56\xb5\x51\xc5\x3d\xcb\x2e\xbc\x9d\xcc\xfc\xec\x68\xf1\x51\xe9\xcd\x8a\x81\x8a\x43\xd6\x93\x7c\xce\xd3\x10\xc3\x07\x86\x6b\xd8\x40\xc5\x22\x44\xa1\x91\x20\x57\xc7\x08\x13\x8e\x4b\x58\xdb\xe0\x5d\x22\x08\x02\xcb\xf1\xe8\xf1\x9b\x3e\xec\x77\x5f\xbf\x7d\x7e\xb3\xc1\x3b\x8f\xfd\x1a\x1b\x1d\x60\xff\x1d\xb7\xdb\x65\xe4\x7d\x29\xa3\xd7\x1f\xed\x2a\xe4\xfe\xb2\xc1\xbd\xac\xb3\x1e\xa6\x6e\x99\x79\xc8\x68\xc0\x11\x18\xc9\x88\x5c\x36\x46\x12\xe3\xf0\x4a\x64\x47\x1c\xc5\x33\x44\xf0\x39\x55\x4a\x6c\xe0\x3a\x9a\x44\x42\x00\x30\x9b\x24\x99\xcd\x17\xd9\xdf\x9e\xe9\x57\xe5\x56\xf0\xde\x57\xad\x60\xe5\x97\xaa\x0f\x5d\xf9\xda\x92\x82\x85\x5a\x1f\xfe\xaa\xc0\xde\x2f\x0f\xb7\xfa\x40\x7c\x90\x66\xf5\x30\x07\xb8\x3e\xe0\x13\xc3\x13\x35\x17\x03\xcf\x8b\x24\x4d\x8b\xa1\x44\x34\x15\x8a\x20\xf6\x54\x94\x18\x71\x24\x13\xc1\xf0\xa0\x62\xaa\x3c\x2b\xa0\x14\xc2\x8a\xed\x0b\xf4\x7d\xae\x7c\xa9\x9b\xc5\x1a\x96\xce\x3d\x6c\x7d\xdd\xc6\xee\x9a\xb5\x20\xfb\x8d\xa1\x4d\x0e\x76\x1d\xb4\xe3\xa3\xca\x53\x4f\x8e\x4e\xef\x91\xcd\xff\x8f\xb5\xef\x8a\xd6\xa2\xc8\xda\x06\x24\x4a\x12\x44\x40\x90\xa4\x24\x05\x44\xba\x3a\x08\x48\x92\x23\x49\x04\x61\x90\x8c\xd8\xd5\xd5\xb9\xab\x53\x75\x06\x04\x8e\x28\x39\x8a\x88\xa8\x24\x89\x22\x41\x32\x48\x8e\x12\x95\x28\x41\x24\x47\x41\x44\xc9\xa0\xfc\x6b\xfe\xf9\xbe\xcf\x61\x78\xcf\x72\xd6\x59\xef\xd5\xb9\x79\x2f\xf6\xa9\xde\xa9\x76\x3d\xcf\xb3\x0d\xdd\xe6\x18\xc2\x27\x6c\x48\xbb\x89\x8c\x65\x23\x22\x20\x96\x75\x5d\xb6\x88\x16\xd2\x86\x19\xd9\x2a\x0b\x58\xcd\x33\x70\x14\xea\xb6\xc9\x67\x85\x3e\x59\x37\x6c\xd7\xf8\x06\x1f\x35\x2f\x52\xb4\xe6\xca\x85\x3f\xe4\x9d\x3b\x6c\x4c\xfb\xb5\x3b\x6b\x6e\x87\xf9\x3f\x39\xdf\x6a\x55\x8e\xe2\x33\xd3\xab\xe6\x09\x4d\xca\x89\x38\x85\x92\xd8\x20\x54\x5c\x51\xc7\x44\x8e\x4c\x35\xe1\x92\xc0\xf0\xe2\xd8\x81\xac\x49\x89\x1a\x4d\x20\x4b\xd1\x89\xa7\xfa\x2e\x8e\x35\x2f\x0b\x6a\x4c\xc6\xb8\xf5\xef\x1d\x69\x7a\x71\x0f\xbb\x79\x20\xb5\x69\x53\x97\x37\xe6\x7c\xd5\x60\x29\x2e\xff\xfa\xa8\x95\x27\x2e\xbc\xb5\xb3\xd4\x67\xab\x1e\xfe\xf5\x88\x07\xf6\x9b\x3b\xfb\x5c\x82\xed\x79\xfa\x40\xae\x8b\x2f\xff\x76\xa0\xe8\xc7\xaf\xf6\x26\xce\x2b\xbf\x15\x59\x5b\xba\xfb\xa2\x1e\x6d\x1e\x3a\x92\x16\xa5\x5f\x5a\x77\x45\xe9\xdf\xe3\x71\x61\x66\x13\xbb\x5c\x21\x77\xd6\xa0\xc6\x33\x0b\xcd\xba\xfd\xe2\xd6\xe9\x63\xb5\x9b\x0f\xee\x97\x4e\x6f\x98\x9b\xae\xc5\x4b\xb1\x97\x30\xae\xad\x7b\x80\x0b\x24\x8b\xc3\x32\xe5\x59\x44\xd5\x39\x39\x94\x89\xae\x78\x9e\x17\xc4\x5a\xe2\x58\x58\x88\x68\x23\x4e\x94\xd4\x62\x6b\x34\x93\x6b\x6f\xbe\x5b\x2f\xf5\xf9\x7a\x40\x15\xf0\xc1\x8d\x9d\xed\xfe\xd8\x3b\xbe\xe5\xec\x3d\x05\x3e\x6d\x7c\x68\xd2\x2f\x15\x4b\xdc\x7a\x22\xbd\x66\xeb\x26\x17\x58\x06\xa2\x0d\x51\x50\x58\xe0\xf1\x10\x5b\x10\xcb\x3e\xd2\x05\xd1\x31\xb0\x89\x7d\x9d\x85\x3a\x91\x78\xc7\x97\xdd\x08\x00\x14\x01\xfc\x68\x76\x52\x8d\x1e\x73\xd8\xc5\xb8\x4f\xed\x43\xa3\x5b\x9e\xe0\xa7\xd4\xa9\x46\xd5\x6c\x74\xf2\xf1\x5b\xcd\x86\x6c\xf8\xfe\xb3\x2d\x0b\xef\xde\x49\xf3\xb8\x15\x89\xae\xa4\x21\x41\x56\x39\xcf\x76\x62\xd6\x8c\xe2\x50\x8d\x02\xcc\x3b\x21\x09\x08\x25\x62\x45\x96\x35\xd5\x61\x18\x4b\xd0\x8c\x7f\xb6\xc6\x8e\xf1\x68\x98\x5f\x4a\xca\xde\x99\x36\xea\xfc\x32\xbd\xf6\x99\x31\x93\xee\x6d\x3a\x72\x6a\x59\xde\xd3\x46\xae\x22\xeb\xdd\x01\x2d\x17\x9e\x2b\x54\xae\x79\x9a\x5f\x3e\x34\xa4\x39\x8a\x2e\x73\x16\x63\x61\x51\x10\x03\x4f\x84\xbe\xc4\x21\x40\xd4\xc0\x02\x11\x8e\x14\xc6\xf6\x78\x16\xca\x3c\xcb\xfb\x96\xc1\xb1\x59\x69\x51\x96\x3b\xd7\xf1\xcc\xca\x7e\x6d\xae\x6d\x3f\xdd\x4f\x5f\x51\xf8\xbb\xe8\x63\xe9\xf8\xe6\x70\xf1\xa1\xe5\x79\x66\xaf\x78\x9f\x7f\x61\xff\x82\xf4\xde\x8c\x3c\x31\xf0\x88\x43\xbb\x32\x31\x28\x05\x18\xba\x44\x30\x52\x59\x37\x91\x35\xd9\xf2\xe5\x90\xb2\x13\x46\xc4\x89\xa6\x47\x91\xaa\xf9\xac\x2e\xa9\x4e\x16\x9a\x20\x65\x7e\x19\xbc\x8d\x2f\xc3\x5e\x3c\xf5\xeb\xc5\x73\x8f\x4b\x67\xd8\xb6\x78\xeb\xf3\x99\xfd\x2a\x4f\x13\x1a\xbd\xd0\x9f\xf9\xbe\x6d\xf6\x01\xf8\x29\xcd\x8e\x45\xdb\x76\x15\x43\x33\x58\x2a\x20\xd8\x64\x11\xe7\x38\x1c\x31\x79\x68\xc9\x81\xc9\x72\x7e\xc2\xa1\xc8\x60\x42\x19\x33\xb6\xe6\xaa\xff\xec\x78\xdc\x47\x07\x20\x6f\xd4\x9f\xfc\xcc\xbc\xfb\xf3\xeb\x96\xba\xfc\xd9\xb9\x3f\xf7\xec\x2f\xf2\xa1\xfb\xe3\xd9\x3e\xab\x86\xef\xdd\x36\xfc\x95\x16\xad\x1f\xf4\xfa\x32\xbd\xbd\x8d\x23\xba\xaa\x42\x19\x92\xe9\x26\x84\x26\x80\x32\x79\xdf\x73\x6d\xc9\x8f\x5c\x31\x16\x79\xe4\x79\x2a\xcd\xd8\x36\xaf\xfe\xf3\x4f\xc0\xd3\x9c\x0b\x53\x84\x61\xe7\xc3\x58\xfd\x69\xdf\xcc\x5c\x55\xde\x79\x7e\x68\xfb\x0b\xed\x9f\x27\xdd\xa3\x3f\xd6\xd7\x1f\x81\x9f\xea\x58\xf7\xf9\x99\xfe\xe8\x34\x33\x3a\x13\x56\x76\x12\x2f\xd6\x04\xc8\xeb\x58\x56\x65\xdd\xf7\x4d\x81\x45\x76\x12\xb1\xb2\xc0\x27\x8e\xcb\x31\xc4\x31\x25\x0d\x28\x34\xa7\xeb\x66\xa4\xa3\x2c\x14\x9d\x3f\x2f\x3a\xed\xf9\x02\x63\xb6\x6d\x3b\xbd\xe0\xe7\xc7\x3e\xac\x53\xc9\x78\xad\xfe\xe8\x8b\xe7\x27\xf7\x9a\xbe\x13\x56\x1c\xde\x52\x2b\x9d\xe6\xb5\x75\x7a\x88\x88\x27\x3b\x1c\x96\x64\xcd\xf0\x88\x80\x15\xd6\x25\xbc\x47\xcb\xd8\x16\x01\xc6\x94\x8f\x62\x85\x72\x02\x1c\xa8\xd0\xd7\x7c\x31\x74\xfe\xf5\xa2\xf7\xe8\xcd\x68\xd0\x4a\xf6\xab\x9f\x3a\x96\xac\x73\xf8\xcb\x3c\xaf\x2b\x9f\x56\xb9\x97\xf3\xc2\xbc\x3f\x6f\xb4\x58\xfa\xd2\xdb\x8d\xe3\x64\x74\xc3\xe6\xdd\xd3\xeb\xd3\x1c\x27\xc8\x46\x14\x03\x2c\x62\xac\x26\x98\x91\x12\xc8\x25\x94\x46\x13\x9e\x33\x5d\x4a\x21\x02\xc7\x20\xec\x93\x00\xd3\x38\xd2\x62\x44\x0c\x18\xa4\xa6\xfd\x3e\x51\x69\xd7\xfc\x4f\x16\x16\xbe\x3b\xed\xcd\x1e\x73\x3e\xcf\xd7\xa4\xc3\xd3\x43\xb7\x7f\xff\xd6\xc0\xc2\x15\x67\xbd\x53\x99\xbf\xa1\xbf\x73\x28\xcd\xaa\xa9\x84\x53\x13\x4b\x8d\x68\x0e\x49\xac\xa8\xd8\x49\xc0\x51\x86\x23\x85\x92\x66\x04\xb4\xa2\x84\x48\x30\x8d\xc4\x0a\x34\x8e\x96\x90\x05\x4d\x57\xd2\x53\x48\x0c\x88\xa7\x7e\xfc\x74\x94\xdf\x35\x67\xef\x6a\x7f\x14\xad\xd7\xa3\xdd\xbb\x9b\x22\xe5\x63\xf6\x42\xd4\xfa\x6e\xbe\xa6\x07\x7a\x7d\x63\x64\x7f\xbf\x50\x4a\x07\x31\x28\x39\x70\x34\x8b\xf0\x9a\x2f\x60\x5a\xc1\xb1\x04\x11\x56\x15\x97\x8b\x30\xd6\x62\x93\x78\x1a\x14\x88\x41\x90\x04\x74\x91\xd3\xb0\x06\x89\x94\xc5\x2c\xf2\xcb\xaa\x37\x72\x75\x2f\xfd\xec\xb6\x2a\x2d\x8a\x77\x46\xef\x2e\x2e\x52\xeb\xc7\x75\x3d\x8b\xef\x16\x6e\x7c\x91\x51\xf4\x8b\x6a\xbf\xff\xa2\x3e\xe4\x4e\x95\x4a\x5e\x28\xf5\xd8\xa7\xaf\x5f\xdb\xd9\x08\x0e\x1f\x19\xac\x53\xde\xdd\x7d\x19\x8f\x1e\x53\x79\xed\xe0\x2d\xf3\xfe\x60\xce\x6c\xcd\x3e\x31\x23\x65\x0d\x85\x8c\x2c\x12\xcc\xdb\x81\x19\x3a\x0a\x47\xf1\xba\x01\x3c\x41\x11\x0c\x05\x72\x8e\x2b\xd0\x8c\xa7\x4b\xbe\xca\x1b\x98\x32\x3d\x16\xa3\xd8\x23\xc0\x4d\x1d\xbc\xb3\xbf\xf8\xf1\x68\x85\xbd\x15\x5f\x7e\x76\xef\x6f\x87\x72\xd4\xbe\x7f\xb7\xc2\xbc\xbc\xa3\x3e\x7a\x36\xef\xfe\x4a\xf6\xe8\x8d\xfc\x3e\x39\xfb\x8f\x08\xa9\xbf\x8d\x6c\x02\x51\x75\x11\xa3\x9b\x80\x97\x29\x22\xc8\x0a\x13\xf1\x3a\x45\x19\x02\xad\xb9\xd8\x45\x16\xf0\x19\x97\xc7\x94\xc2\x9a\x6e\x60\x41\xa0\x0a\xa9\x83\xb7\xe8\xd0\x13\x8b\x1b\x3e\x51\x77\x50\xad\x93\xf9\xaa\x1d\xa0\x07\x96\x2e\x5d\x3a\x6f\x87\x19\x33\x86\x15\xe6\x7f\x19\xd7\x6e\xe4\xf6\x1c\xd9\x5f\x0e\x96\x32\x55\xfa\xbe\x1f\xbb\x5e\x14\xf0\x80\x32\x29\x93\x83\x61\x22\x25\x31\x13\xf2\x8c\x67\x21\x51\xd2\x54\xd1\x11\x14\x5e\x87\x20\x56\x79\x10\x60\x17\x47\x02\x9b\x45\xbb\xfc\xf5\x0b\x2f\x5d\x97\xda\x34\xea\xbd\x81\x2d\x75\xb7\xdd\xc8\xee\xb9\xf2\xce\x2d\xd8\xad\xf1\xd5\x4d\xf7\x4e\xec\x20\xc3\x46\x7c\x38\x7e\xf8\xff\x22\x86\xfe\x6e\x0c\x9e\x99\xf1\x5a\xa1\xdc\xb9\x1e\x46\x0c\x35\x8c\x8a\xf7\x6b\x31\xe6\x9c\x99\xf1\xdc\x9e\x06\x45\xfc\x2b\xbb\x5f\xf7\xca\x4c\x84\xf7\x97\xde\x6a\xb3\x76\xc4\x90\xa7\x76\xde\xcf\xfe\xe3\x4a\xca\xcc\xa0\x78\x9e\x49\x27\x3e\x01\x5e\x2c\x60\x3f\x10\x3d\x35\x70\x7c\x0c\x28\x8d\xc3\xae\x17\xfb\x5e\x28\x04\x7a\xe2\x41\x1a\x21\x41\x87\xd8\x41\xe2\xbf\xf4\xdb\x1f\x4d\x68\x8d\xca\x3d\xb7\xb1\x43\xa7\xba\xef\xf6\xaf\xfa\x4a\xa9\x46\x14\xbc\xb3\x68\xca\xea\x51\x8d\xb6\x4e\x1a\xca\x9d\xdb\x5c\xbd\x44\x95\xd5\xe9\xa5\x0b\x40\xda\xd0\x13\xc5\x87\x89\x11\x41\x46\xd4\xf9\x80\xf1\x81\x88\xcd\xd8\xf1\x91\x62\x5a\x41\x12\xea\x36\x94\x99\x50\x85\x32\x1d\x87\x36\x25\xb1\x74\xec\x3d\xda\x7c\x9e\xb8\x57\x7d\x77\xd0\x29\xc8\x25\x9e\x18\xd1\xed\xd5\xd1\x1f\x6f\x1f\x7c\xb8\xfc\x53\xa7\xed\x9f\x5b\xf6\x3e\x35\x3c\xf7\xf4\x23\x85\xdd\x34\x6b\x00\x01\x5e\xa3\xf9\x44\x90\x64\x6c\x58\xb1\x2c\x3b\x98\x15\x81\x68\x84\x00\xd9\xa1\x8a\x8d\x58\xe6\xdc\x84\x8e\x3c\x55\x71\x74\xcb\x34\x31\x0c\xd5\x2c\x66\x81\x0d\x7b\xdd\x9e\xf7\x78\x79\xb4\x67\x6e\xcb\x49\xc5\x84\xf2\xfe\x57\xb5\x3b\x0d\x2c\xbb\x78\xef\xcb\x3d\xe7\x6e\x6a\x79\xb8\xfd\xb9\x13\x69\x7e\x13\xa2\x81\x43\x5b\x44\xa2\x3c\x5a\x25\x34\x9b\x30\x71\x18\x61\x0e\x62\x59\x48\x5c\x5e\x05\x1e\x34\x00\x91\xb9\x30\xf4\x63\x27\x62\x91\x18\x86\x5a\x96\x94\xb7\x5f\xee\xae\xfb\xb4\x98\xfd\x1d\x7f\xbf\xe9\x8b\x5b\xf5\xcc\xe3\x93\x46\x1c\xb4\x4e\xd2\x73\x73\x4e\xaa\xb7\xa5\xf5\x9c\x3d\x1b\xb2\xcf\xb5\x4d\x69\x36\xf6\x79\xca\xf6\x18\x26\x11\x3d\xd9\xd4\x44\x56\x92\x3c\x5b\x17\x42\x51\x32\x29\x46\x0f\x98\x44\xa7\x18\xc5\x8e\x80\x14\x26\x10\x42\xcf\x62\x7c\xa4\xa6\x36\xdb\x1b\xd0\xa0\xec\x85\x51\xe5\xdb\x9c\x6a\x78\xbd\xe5\x82\xe9\x55\xdb\xe1\x35\xe3\x67\xff\x7c\xa8\xdf\xb7\x4b\xde\x2a\xd7\x7f\xfd\x5b\xe5\xfb\xa6\xd9\x6c\x0f\xf2\x2a\xb1\xdc\x38\xb0\xb8\xc4\x56\x20\xa7\xb2\xac\x84\x03\x2f\xc0\x81\x19\x70\x16\x03\x68\xc1\xd7\xbc\xc4\x10\x24\x82\x63\xdb\x4d\x94\xd8\x4f\x6d\x36\x35\xaf\xde\x0c\xf1\xf1\x73\x6d\x0b\x12\xc2\x6d\xba\xd9\xf9\xb3\x95\x6d\xfe\x98\x3e\x75\x76\x90\x7b\xf6\xb0\x16\x42\xf3\xfd\x99\x4d\xd2\x1b\x8e\x98\x83\x86\xe0\x4b\x82\xe8\xfb\x96\x08\x44\x22\x4a\xc0\x93\xac\x38\x89\xed\x98\x82\xc4\x09\x41\x60\xd0\x4a\x10\x71\x26\xf0\x13\xcb\x77\x62\x47\xe7\x53\xd7\xb1\xb2\xdb\x7f\x5a\xbd\x6f\xd4\x9d\x79\xc3\x16\x1e\x6c\x3e\xd9\x1a\x55\xdf\x11\x57\xce\x9c\xf3\xc3\x80\x1c\x5d\x17\x37\x9c\xbe\xf6\xa5\x8f\xd2\x2c\x35\x17\xeb\x72\x48\x47\xb4\x6e\x49\x0e\x36\xd8\x90\x52\x00\x6f\xda\xa2\x06\x0c\x16\x84\x24\x31\x85\x00\x62\x10\xc9\x1c\x47\x5b\x2e\xe0\x74\xd3\xf6\xc0\x5f\xec\x9d\x41\x79\xff\xbb\xb7\xcb\xcc\xa6\xb9\x73\xd4\x79\x18\x1e\xbd\xa4\xe7\xfc\xd5\xb5\xf6\x32\x43\x37\xc1\xe1\x95\x16\x08\xc3\x97\xd4\x98\xf2\x6e\x9e\xb8\xae\xbb\xf6\xa3\xf2\xeb\xb7\xec\x0b\x86\xa7\xb7\xea\xf1\x2c\x0c\x45\x64\x01\x56\x08\x42\x19\x29\xb2\x41\x03\x53\x31\x03\x22\x98\x22\x72\xad\x44\xc1\xe0\x9f\x17\x1e\x24\xf0\x14\x17\xd1\x9c\x9c\x18\x3e\x8f\x52\x7f\x9b\xc6\x93\x57\xcf\x1d\x23\x37\x39\x38\xb6\x48\xed\xe6\x07\xaf\x3d\x73\xe7\x6e\xbe\x29\x9f\xbf\x6c\x2d\xf8\x66\xd0\xb9\x89\xf1\xe4\xe3\x05\xb2\x2f\x84\x99\x32\x12\xa0\x25\x62\x4a\xa6\xa2\x88\x35\x13\x33\x8a\x80\xa5\x5a\x40\x31\x3d\xca\x85\x4c\xc0\xeb\x36\x06\x32\x67\xf9\xbe\x27\x7a\xa1\xa8\x45\x9e\x64\x0b\x9a\x9d\x3a\x12\x8a\xb7\x98\xda\xef\x99\x9e\x83\x73\xde\xb9\x31\xee\x7e\xb3\xa3\x77\x7b\xe5\x7c\xba\xe8\xe8\x3f\x3f\x1b\x75\x65\xf1\xf2\x37\x86\x36\xae\x7e\x74\x69\x9a\x5f\xfd\x99\xd8\x85\x22\x08\x71\x22\xc5\x91\xe0\x31\x88\x31\x12\x86\x18\x08\xca\x58\x95\xdd\x18\xd3\x44\x77\x24\x17\x9a\xbe\x2d\xd8\xbc\xcb\x7a\x2c\x0f\x52\x8f\x18\xfe\xd1\x64\xcc\x80\x36\x35\x2b\x50\xb7\xa7\xbd\x92\x6b\xeb\xc5\x8e\x03\x0f\x4c\x4b\x3e\xb8\xb2\xf6\xed\xce\xad\xd7\x4f\x78\x79\xdb\xd4\x36\x27\xd3\x4c\x96\x27\xde\x3f\x1d\x81\x8d\x08\x81\x6e\x0c\x63\x3b\x74\x63\x0e\x98\x5c\x10\x00\x06\xcb\x92\x1e\xe0\xc0\xe2\x55\xda\x13\x09\x10\x92\x50\x30\x6d\x87\x7a\x84\x29\xf0\x77\x33\xc4\xcc\x8c\xfc\x39\x94\xff\x60\x0a\xe4\x1c\xfb\xd3\x75\x7e\xcb\x37\x43\x9f\xdc\x66\x37\xfb\x35\x63\x68\xb3\x1d\x2f\x2f\x98\x72\x7e\x6c\xe1\xe7\x8b\x2c\xb9\x91\xa3\xe5\x9e\xc4\x4a\x6f\x09\x0e\x7d\x1b\x27\x9a\xee\xb1\x02\xed\x51\xa2\x68\x87\xb2\x86\x44\x51\xe7\x58\x4d\x56\x3d\x2a\xc1\x0e\x09\x5c\x60\xfb\x7c\x22\x04\x3e\x9f\x10\x8c\x28\x9c\xda\xa7\xa6\x2f\xbf\xde\xb4\xec\xcf\xb7\x0b\x97\x59\x2d\x96\x66\x66\xf4\xeb\x5b\x78\xce\x2b\x76\xbb\x3b\x5b\xc7\x85\xb3\x06\xb7\xca\x73\x73\x6d\x9a\x3f\x0e\x61\x45\x46\x50\x9d\x50\x8c\x44\x5e\x75\x2c\x43\x97\x03\xc0\xb8\xaa\x02\x15\xde\xe3\xa9\xc0\x15\x01\xf6\x5d\x13\x21\x35\xf1\x14\x07\x25\xbc\xa4\x1b\xa9\xcd\xfe\x3d\x53\xac\x5c\x68\xfe\xd3\x47\xde\xbe\x9f\xf9\xee\xf2\x06\xc1\x59\xa9\xc2\xc7\xf2\xae\xee\xfa\xe3\x1b\x1e\x9b\xf3\xc1\xd7\x13\xbe\x4e\x33\xa8\x4b\x51\x44\x3d\x70\x18\xd6\xa3\x7c\x27\x89\x1d\x53\xa2\x55\x8f\xd6\x0d\xca\xf3\x59\xcd\xe7\x64\x87\xf1\x78\x98\xf0\x81\xe4\x43\x24\xb2\x11\x1b\x04\x54\x16\xbc\x8c\xb2\xdf\xb5\xbd\xd7\xed\xf1\x9a\x6f\x6e\xf8\x6c\xf4\x3e\xb1\x51\xbd\x3f\xf7\x7e\x35\x4e\xc1\x07\xdf\x56\x6a\xa0\xd7\x1a\xfe\xb8\x7c\x47\xf6\x45\x83\x53\x9e\xb6\x84\x45\x53\x55\xa1\x2f\x28\x9a\x19\x5b\x31\x95\x24\x16\xc2\x16\x1b\x7a\xb2\x6d\xd8\xb4\x68\x3b\x8c\x2c\x61\x8f\x32\x45\xd9\x05\x8e\x15\x2b\xb1\xf0\x57\xc3\xf3\xbf\x45\xe1\xef\x06\xe4\x99\x4d\x73\x0e\xc8\xfd\x70\x24\xdc\xaf\x31\x75\xc5\x1f\x3b\x8d\xbe\x85\x9c\x37\xc6\xcc\x5b\xd8\x28\x98\x93\x39\x78\xae\x30\x65\x6b\xd9\xad\x77\x56\x57\x7d\x72\x7a\xd3\x3f\xd2\x1c\xef\x91\xab\x8b\x3c\x4f\x0c\xdf\xd6\x08\x90\x6c\x4b\x82\x94\xed\xf8\x7e\xa8\x89\xd8\x73\x80\x4e\x71\x72\x2c\xc8\x56\x80\x29\xcf\x88\x90\xca\xfc\xcf\x6c\xee\x51\x97\xf2\x45\xbf\xf0\x18\x6f\x6d\x81\x29\x7a\x8b\xa3\x4b\xcb\xf5\x7e\xb7\xf1\x9e\xad\xf5\xfa\x15\x3b\xd5\xf6\xe6\xc2\x0f\xac\x3a\x07\x2a\xa5\x17\xda\xc2\x7b\x86\xa0\x88\x16\x82\xbe\xa1\x62\xdf\xb5\x19\x46\x0b\x45\x12\x39\x58\xf7\x7d\x28\xda\xae\xcc\x61\x8f\x0b\x25\xa8\xf2\xac\x8f\x5c\x0f\xf9\x30\xce\x82\xb7\x7a\xba\x12\xae\xf5\xca\x92\x06\xee\xb6\x33\xf3\xde\x9f\x0e\x6b\x15\x69\xe5\x8d\x3e\xf9\x49\xe5\x4b\x4f\x3e\xbb\xef\xd5\xd2\x4c\xd1\x41\xf9\xd2\xdb\x1e\xc5\x6c\x90\x60\x43\x32\x30\x76\x3c\x57\x47\x2e\x6f\x71\x86\xaf\x3a\x2c\x1b\x23\x4a\x0f\x2c\x99\x0a\x3d\x8e\xa6\xcd\xc8\x4d\x18\x46\x23\x32\x45\x1b\x59\xd0\x32\x86\xac\x11\x26\xdd\x2b\x7b\x0a\x1c\xa7\x3b\xe0\xd9\x67\x3b\xb4\x1d\xf7\x65\xc1\xd3\x55\x84\x52\x83\xe9\x39\x95\x1b\xba\x4d\x0f\x64\x5f\xa4\x23\x65\x00\x53\xaa\xcb\x68\x44\x0f\x1c\x13\xd9\xac\xe5\x2b\x16\x61\x50\x2c\x4b\x81\x4a\x25\x2e\x1b\x3a\xba\xc6\xe8\x82\xc7\x9a\x20\x04\x82\x4c\x18\x1e\xf8\x02\xfd\x48\x7b\xf4\x77\xc3\x97\xcc\xa6\xfd\x1a\xe7\x7d\x38\x12\x92\x5e\x03\x2e\x88\x03\xee\x0d\xcc\xd9\x75\x57\xc7\xdb\x67\xd6\x17\xc8\xd9\x72\x4a\x8b\xb3\x17\x3e\x5d\x7a\x72\xfe\xba\xa9\x95\x2a\x74\xcd\xfe\xfa\xed\x94\x05\x5b\x42\xa6\x4c\xd1\x74\x10\x27\x1e\x54\xe0\x3f\xd3\x16\x8a\x78\xe8\xea\x84\xa6\x19\x37\x40\x44\xd0\xa0\x01\x25\x46\x06\x9a\x64\x32\x96\xa1\x08\xae\x93\x45\xc1\x0e\x1e\xcb\x68\xf0\xe1\x8d\x77\x76\xed\xad\x5d\xe9\xeb\x5a\xfc\xc5\x4b\x55\x0b\x5e\xff\x52\x5c\xf8\xd8\x53\x1f\x3f\xd9\xb1\xf2\x87\x8b\xb3\x3f\xa9\x4e\x8d\x96\xf2\x12\x47\x17\x6d\x51\x0a\x78\x8f\x4b\xc4\x10\xea\x24\x11\x15\xa4\xb2\x54\xc8\x99\x7c\x6c\x4a\x2e\xef\x11\x8b\x53\x35\xdb\x57\x63\x8f\x72\x65\xc0\xa7\x36\xbb\xef\x4b\xc5\x67\xcc\xc8\x3b\xbf\x48\xde\x2b\x2d\xdf\x9f\x50\xe5\xc5\x15\xa7\xaf\x8d\xdf\xc4\x35\xc9\x5d\xeb\xed\x1a\x73\x29\xaa\x0d\xc8\x3e\x83\x3b\x35\xd3\x87\x0a\xa0\xab\x33\x48\x56\x68\x2e\x08\x18\xa4\x72\x38\x0a\x29\x53\x0f\xad\x80\xf5\x7c\x5b\x0d\x55\xd9\xb7\x88\x44\xd3\xaa\x19\xf0\x09\x60\xa9\x98\x4d\x1d\x09\x39\xfc\x5e\xbb\x4a\x77\xaf\xb8\xfa\x57\xaa\xd3\x2b\x8b\x4f\x9c\xe8\x71\xab\xf3\x4f\xcd\x37\xd5\x7b\xe0\xc4\x6b\xf6\x55\x3f\x78\x67\x56\x7a\x61\x1a\x10\xf0\x2c\x0e\x42\x57\x35\x19\xc8\x88\xae\xcb\x03\x25\xa6\x23\x5e\xd0\x1d\xcf\x96\x65\x29\x96\x4d\x8e\xe3\x78\x53\x50\x38\x96\x92\x18\xcb\x13\x65\x81\x7b\xa4\x3d\xfa\xbb\x99\x51\x66\xc6\x13\xf9\x1f\xff\x8f\xf6\xa8\x27\x7b\x4c\x9f\x3e\x72\x4b\x71\x32\xe4\xec\xbc\xc5\x5d\x17\x1d\x2e\x78\x39\xef\xa2\x21\x37\xcb\x37\x7a\xa7\x75\xed\xdf\xef\x6f\x99\x98\x66\x95\x7f\x0a\x32\x09\xf2\x4d\xc1\xc5\x06\xcb\x6a\x88\xd5\x5d\xcb\x0c\x30\x82\x46\xc8\xd2\x46\xc0\x60\xe4\x43\x95\xd3\x12\x91\xc2\x91\xc9\x6b\x8a\xc2\x6b\x4a\xea\x8f\xb3\xa5\xf4\xd8\x73\x8f\x8f\x9a\xb9\x2b\x67\x9e\xb7\x5f\x7e\x71\x62\xbe\x31\x5f\xd6\x58\xb2\xa6\xe8\x17\xd7\xca\xe5\x98\xd1\xa2\xc2\xb4\x21\x17\xd3\x2b\xab\x05\x91\x46\x03\x5e\x17\xac\x44\xc2\x2c\x86\xa6\xac\x9b\x5e\xcc\xa8\x26\x20\x11\x31\x5c\x62\x25\x91\x23\x22\x93\x40\x2a\x41\x1c\xcb\xf9\x4a\x44\xd4\x2c\x64\xb5\x4a\x56\xd9\x7a\xc6\x7e\xbe\x74\xe1\x3e\x43\x6a\x33\xa5\xd6\x96\xd9\xfd\x4d\xa5\xcb\x51\xa7\xfa\xef\x1b\x99\xc7\x9e\xf9\xb0\x8d\xb2\x3a\xcd\xf8\x60\x5f\xd7\x1d\x0e\xc8\x10\xc5\x82\x6a\xb3\x32\x42\x1a\x43\x34\x8a\x89\xa0\xe5\x50\x31\x8e\x89\xad\x92\x98\x8d\x39\x62\x03\x33\xa2\x13\x8d\xc0\x38\x0b\xe5\xa6\xbd\x05\x3f\x3f\x56\xa0\x59\xbd\x45\xb3\xeb\x3e\x31\xbd\xd4\x97\x2f\x55\xbd\x3f\x77\xfd\x2b\x53\xa6\x6f\xcc\x5b\xa5\xf9\x47\xb0\xe3\xcb\x75\xde\x4a\xf3\x7b\x93\x66\xc6\x14\x30\x0c\x8e\x65\xb8\x40\xb4\x0d\x35\x62\x18\x44\xb3\xb4\x66\x6a\x82\x23\x22\xd5\x57\x22\xcb\x76\xf8\x40\xd0\xa5\x48\x55\x69\x3b\x06\x7f\x01\x07\x6f\xb0\xff\xb2\x78\xfe\x27\x87\x5b\xbd\x31\x67\xdf\x96\x0d\x05\xc5\xab\xcf\x1f\xbb\x55\xeb\xf1\x2b\xc5\x7f\x1c\x3e\x24\xd0\xaa\x0d\xc9\x3f\xbc\xda\x91\x6a\xb3\x33\x33\x1e\x5c\xb9\xf5\xc3\xf8\xb2\x0f\xfd\x9b\xf3\x37\x94\x1c\xd9\xee\x87\x9c\x4f\x7e\xd1\xb7\xc2\xfe\x4b\xe7\xdf\xf9\x79\x59\xdf\x55\x57\x0e\x7f\xdd\x6d\x76\x66\xa1\x96\xb8\x74\xbb\x62\xc7\xd2\x7b\x6b\x0e\x2c\x3e\x4e\x22\xde\xb2\x6d\x05\x98\x3c\x42\x2c\x92\x15\x12\x21\x51\x56\xf9\x50\x89\x3d\x93\x65\x2d\xd9\x94\x89\xa7\x63\xc9\x00\xa2\x49\x90\x10\xa4\x86\xc0\xe5\xa7\x0b\xb5\x7f\xe5\xcf\x65\x4b\x0b\xfc\xf9\xf2\x8a\x2b\xf7\xca\x74\x2b\x99\x71\x9b\x7d\xee\xf7\x31\x99\x5b\xc7\xcc\xfb\x79\xe3\xc0\xf7\xbf\x4a\xb7\x48\xa4\x13\x69\x40\x13\x45\xa4\x49\x4a\x84\x28\xc9\x67\x75\xd9\x65\x31\xcb\xb1\x94\xab\x63\x2a\x09\x89\x2f\x3b\x3c\x0d\xb5\x28\x01\x50\x0b\x91\x93\x62\xa9\xc1\x92\x3b\x33\x8a\x2c\xbf\xb4\xfb\xd8\xb7\xf6\x92\x71\x7b\xb7\xbc\x57\xa3\xe9\xa4\x2f\xd0\x16\x2d\xff\xda\x0e\xbb\x0e\x7d\xf8\x63\xf1\x03\x69\x1e\x30\x72\x20\xa1\x39\xdd\xf6\x12\x01\x6b\x18\xeb\xb4\xe1\x7a\x14\x44\xa2\xc0\xd0\x1e\x26\x0a\x1d\x19\x1e\xef\x70\xb1\xa7\xdb\xaa\xa7\x08\x61\xc0\x38\x6e\x8a\xd5\x11\x67\x4e\xfc\x32\x2e\x6f\xcd\x85\x87\xd4\xcc\x7a\x4d\x0f\x7f\x83\xda\xf4\x7b\xf0\x2e\x29\x7f\x23\x9e\x76\xec\xea\xa8\x3e\xdf\x3f\xf1\x63\xf6\xbb\xe7\x94\xce\x41\x3b\x54\x22\xf1\xd8\x81\x11\x92\x80\xc4\x71\x7a\x2c\x23\x39\x96\x79\x10\xe9\x51\x20\x04\x6a\xe0\xb8\xba\xe3\xd8\x22\xe7\x41\xc3\x75\x0d\x9f\x8f\xb3\x78\x73\x3d\xb4\xeb\xd8\x26\x6d\xdc\x88\x12\x57\xf5\xb2\x77\xf2\xbe\x7b\xb7\x55\xe7\x1c\x9d\x6f\x7c\xdb\xa0\x7f\xd1\x56\x87\xe8\x70\x74\x79\x2d\xfb\x42\x7e\x29\xfb\x39\xce\x93\x1d\x15\x46\x62\xc0\xc8\xb1\x05\xe9\x80\xa8\x0e\x52\xb0\x89\x59\x5e\xf7\x59\xce\x30\x02\x99\xc7\x6e\x10\x78\x8e\xc4\x02\xa2\xfb\xaa\xe5\xaa\xa9\x33\xce\xa7\x4f\x14\xa9\xfc\x91\x5e\xfe\xad\x03\x3f\x8d\x8b\x7f\x7a\xf7\x8d\xb1\xef\x15\x09\x57\xb7\xc9\x31\xe7\xee\xd7\x9d\x16\xd7\xfc\x8c\x7b\x2c\xcd\x4b\xae\x12\x53\x66\x55\xa2\xb3\xd0\xe2\x88\x84\x2c\x1f\x26\x6e\x1c\x4b\x84\x91\x34\xce\x8d\x34\x85\xb5\x28\x95\x73\x7c\x83\x66\x24\xe4\x32\x82\x17\xc5\xb1\x98\x05\x1a\xf5\x89\x26\xce\xe0\x01\x2f\x8e\x9b\x54\xa7\x47\xf3\xb6\x55\x6a\x0e\xde\x72\xbd\x68\xa3\xe1\xd5\xe6\x2c\x28\x7a\x26\x63\x69\x2b\x4c\xb2\x5f\x4d\x53\x33\x6d\x00\xc7\x99\x50\xb0\x80\x13\xd0\x2a\x71\x65\x56\x64\x3d\xdd\x43\xc0\x40\x11\x08\x83\x24\x34\x88\x16\x87\x31\x8c\x9c\xd0\x73\x44\x3a\x49\xb4\x24\x05\xd3\x26\x2e\x38\x68\x73\x09\xfe\x66\xe6\x16\x3f\x57\xe1\x77\x9f\x1e\x36\x4b\x92\xca\xd1\x5f\xbf\x2d\x45\x9b\x9f\xda\x60\xd5\x1f\x6e\x7c\x94\x66\x31\x41\xc1\xe2\xac\xc4\x8e\x04\x59\x08\xe9\x24\x11\x58\x45\xe3\xf8\xd8\x05\x2a\x42\x3c\x56\x68\xdb\x05\xbe\xec\xb0\xa1\x1a\x53\xd8\x34\x71\xc0\xfe\x0f\x83\xf2\x3f\x98\xc1\xb3\x36\x3e\x36\x7b\x74\x7f\x10\xd6\x1d\xe8\x4e\x8f\xbe\xdf\xf1\xd8\x28\xaf\x84\xb8\xae\xd9\xd4\xe7\xfb\xf4\x18\xdf\x9c\xaa\x7e\x35\xcd\xb3\x11\x1e\xd1\xac\xcf\xd9\x11\x86\x96\x45\x41\x3b\xd0\x58\xc9\x95\x31\x03\x13\x36\x56\x74\x07\x22\x56\x94\x6d\x53\x31\x25\x2c\x5a\x06\xf4\x83\xff\xd9\x8a\x9b\xe2\x99\xd8\x69\xa3\x4c\xb9\x63\x45\x3f\x7f\xdd\xe2\x56\x01\xa9\x58\x05\x69\x77\xcf\xcc\x2f\x2f\x5f\xdf\x55\xac\xd7\xde\x8a\xa7\xd7\x0d\xee\xf2\xb0\x46\x1c\xb5\xbd\xea\xc2\x71\x7d\xaf\x56\xdf\xfe\xe4\xd8\x5f\x47\x2c\xe5\xa2\x95\x93\x8f\x54\x7b\x65\xe0\xed\x6d\xf9\x46\xbd\xff\x6c\xcd\x43\x20\xfb\x30\xf2\x94\x11\x20\x89\x40\x36\x40\xa8\x86\x24\x31\x51\x62\x01\xd9\x50\x28\xc7\xb0\x91\x42\xc5\x2e\xc0\x06\xb4\x6d\xd1\x89\x55\x16\x20\xc1\x15\x75\x2e\xe1\x04\x9d\x3c\x9a\xd5\x9b\x28\xed\x2f\x90\x22\xcd\x0b\x7c\x9d\xc7\x66\xab\x7c\xbc\xb8\xa4\x72\xb7\x9f\x53\xfd\xdb\x1a\xd4\xad\x11\x87\x3e\xee\xb4\x75\xde\x9e\xf4\x7a\xbf\x4a\x5b\xac\xcb\x1b\x41\x02\x49\x10\xb0\xac\xc6\x9a\x36\x65\xc5\x12\x27\xcb\x5a\x02\x25\xcf\xb0\x8c\x58\xb4\x6c\x8b\xf2\x29\x27\xb6\x69\xc7\x11\x62\x33\x75\xae\x99\xb9\xb6\xd6\x82\x46\x95\x84\x6a\xb7\xee\xee\xce\xb3\xae\xf7\xe4\xd1\x6f\x74\x98\xd4\x20\x77\xce\x83\x27\x7a\x5c\xfc\xe4\x89\x0e\xc3\x4b\x5e\x4c\x73\xd9\x87\x9c\x6c\xa1\x58\xb1\x9c\xc0\x40\xb4\x1b\x72\xac\x22\xda\x10\x59\x9c\x28\xbb\x3c\x47\x5b\x91\x27\x2b\x61\x28\x43\xc0\xb0\x32\x23\xd8\x3e\x8a\xa9\xd4\xb9\xa6\xdc\xc4\x85\x25\x6e\x37\x28\xc0\x36\x39\xb2\xed\xbd\x56\x65\xa2\xcc\x22\x53\xae\x17\xeb\xf0\xf1\x97\xed\x17\x3f\x7d\xeb\x52\xdf\x17\xff\x28\x98\xde\x28\x88\x62\xa4\xb2\x1e\x93\xf8\x72\x18\xea\x1a\x13\xc9\x32\xe5\xaa\x12\xaf\x00\xc1\xe7\x91\x24\x2a\x3e\x32\xb8\x98\x22\x8e\x16\x1b\x0c\xc4\x9a\x84\x1c\xef\xd1\x1a\xfa\xe9\xd9\x7b\x49\xe5\xb2\x3f\x9e\x7f\x7e\xe8\x7e\x7e\xc7\xa5\x5e\x67\xae\x2e\x5d\xf7\xd3\x82\x3a\x87\xb7\xdc\x1f\x7d\xb4\x48\xcd\x7e\x3b\xb3\xbf\xd8\x20\x0b\x2c\x9e\xad\x28\x0c\xed\x48\xd0\xe2\x43\x57\x4a\xd4\xd8\x46\xae\xe2\x84\xae\x86\x11\x66\x25\x29\x88\x05\x27\xe2\xed\x50\x54\x25\x86\xf1\x09\x45\xfd\x9b\xfc\xc9\x5f\x1a\x75\x65\x2f\x0d\x3e\x51\x46\x2a\xbe\xa6\xab\x74\xa2\x6b\xf7\x96\x43\x98\x3a\x27\x17\xb7\x9b\xdf\xf3\x65\xa6\xc2\xc0\x72\x1b\xf7\x0e\xce\xfe\x06\xee\x94\xa7\x6c\x72\x14\xf0\x78\x99\xf1\x1d\xac\xd1\x0a\x60\xec\x80\x47\x58\xf1\x44\x1a\xc7\x02\x11\x2c\x43\xc0\x8a\xab\xea\x9e\x21\x11\x83\xa7\x23\x93\x0d\x11\xcc\x8a\x1e\xf7\x66\xae\xd7\xfb\x57\x8d\x8f\xad\xa9\x27\x38\x19\xe3\x0e\x56\x46\x55\xc9\xba\xcd\xb3\xcb\xe4\xec\x36\xe7\xf3\x85\x1f\xec\xec\xf0\xf0\x0e\xfa\xcf\xea\x1f\xe6\xef\xc8\xfc\xc8\xb9\x23\xfb\x0f\x6b\x77\xe4\x76\xd9\x2f\x8a\xd6\xbf\xd0\x79\xf9\xe2\x15\xd5\x5e\xdb\xbe\xa5\xf2\xd5\x52\x7f\xa6\x59\x0f\xcb\xa1\x39\x08\x62\x96\xd3\x63\x51\xb7\x2d\xd6\x62\x3d\x3d\xd1\x54\x62\xfa\xd8\xe6\x74\x12\x27\x24\xe4\x23\x0a\x72\x5e\xe8\xfa\xa6\xe6\x01\xd5\x33\x1f\xfd\x2e\x3f\x1e\xad\x7a\xc6\xa4\x9c\x67\x07\x94\xcc\x5f\xec\xb1\x9f\x33\x99\x6e\x6f\xab\x75\x5a\xf6\xae\x57\x26\xf8\x6e\xf8\xf4\x97\x76\xdd\x4e\x33\x12\x35\xe2\xf4\x7f\x5e\x4b\x64\xc8\x59\x9a\x8e\x39\xdb\x01\x81\x6b\x05\x31\x47\x27\x42\x00\x82\xc8\x67\x64\x06\xc9\x32\x9d\x68\x80\xb6\x12\xc6\x8e\x1d\x41\xcd\x02\xd7\xf1\xad\xfb\xf5\x13\xbf\x4d\x2d\x57\xf7\xe7\x89\x3b\xde\xc9\xb7\xb0\xc2\x3c\xcb\x5a\x37\x63\xe1\x2b\x2f\x31\xec\xae\x7b\x3f\xc6\xca\x94\xaf\x1e\xfa\x2e\xe5\xc6\x7c\xbd\x73\xa3\xb2\x4d\x03\x5f\x18\x6f\xfc\x36\xf5\x1a\x3f\xef\x8d\xe7\xeb\x8d\x68\xbe\x64\x54\xdd\x4d\xd7\xd4\x73\x27\x06\xf5\x4a\xf3\xc0\x47\xf6\x25\x91\x92\x68\x16\x6a\x04\xf3\x76\x4c\x49\x31\xe5\x13\x5a\xb0\x78\xec\x48\x3a\x07\x74\x02\xe2\x18\x28\x14\x25\x80\xd8\x51\x20\x14\x61\x8a\x5d\x76\x1d\x73\xf7\xaf\xf0\xf9\xef\xb5\x33\x9f\xda\x39\xfb\xdd\x89\xbd\x3f\x1d\x50\xef\xee\x83\xdd\xb9\xba\xfe\x36\x75\xde\xfe\x9c\xdd\xe7\xcc\x2f\x75\x39\xcd\xcf\x2d\x86\x4e\xf9\x01\x34\x80\xe9\x1b\x28\x01\x49\xc4\x09\x84\x13\x62\x01\x29\x92\x89\x3c\x22\xeb\x26\xc3\x0b\x7c\xe4\xda\x82\x83\x75\x33\xd1\x81\x93\x95\x4c\xf7\xde\xca\xfb\xfb\xd5\x38\xd8\xe4\xa5\x65\xad\x36\x8e\xab\x56\x6a\xd0\xc0\xe7\x26\x02\x34\x69\xfc\xdd\xef\x66\x59\xb8\xe4\xb6\x8d\xd9\xef\x37\x53\x66\x26\x5e\x13\x78\x53\xf6\x24\xda\x42\x52\x88\x59\xd5\x83\x48\x09\x25\x9b\x20\xd7\xa2\x45\x49\x92\x35\xce\x31\x85\x50\x35\x04\xc1\xe7\x74\xc9\x06\x91\x4e\x52\x97\xae\xde\x6f\x76\xcc\xb8\x71\x6d\xfd\x37\x97\x86\xaa\x5f\x95\xbe\x3d\xb8\x66\x41\xe3\xf6\x1b\x1b\x3f\x99\xf6\x14\x29\x78\x7b\x42\x85\xb9\x3f\x67\x3f\x70\x53\x13\x5c\x30\x23\x40\x5f\xa1\x4c\x42\x00\x50\x21\x51\x38\x2e\xe1\x88\xe5\xc6\x86\xef\xc9\x11\x90\x35\x24\x26\xb2\xec\x41\x4a\x40\xa6\x2c\xc6\x2e\x52\xe3\xd4\xa7\xdd\xf5\x54\xe9\xd7\x27\x7c\x45\x85\x19\xdd\x1a\xee\xdd\xd1\xf1\xee\xcc\xeb\x4d\xbe\xea\xa9\x15\xd9\x7c\xe2\xd3\x05\x95\xaf\x4e\xb1\xc4\x11\x69\x16\x47\x4c\x5c\xec\x21\xc2\x45\x94\x15\x05\xb2\xe2\xfa\x92\x86\xa1\x49\xa8\x20\x66\x19\x04\x12\x19\xab\x7e\xc4\x23\x26\x8a\x64\x4c\x80\x12\xaa\xca\x43\x1c\x86\x7f\x0b\xc7\x5a\x13\xce\x7f\x6b\x4e\xaa\xfb\x6a\xe3\x67\xca\xe7\x9a\x59\x2d\xef\xf4\xfc\x4b\x67\x7c\x31\xba\xfb\xfc\x5c\xcd\xae\x55\x7b\xef\xf7\xb1\x27\x2a\xa4\x19\x16\xc3\x9b\x5e\x84\x3d\x5b\xd3\x88\x29\xe9\x0c\xc3\xb0\x91\x1d\x29\x54\xa0\x92\x10\xca\x5c\xc2\xd9\x6e\x42\x30\x8a\x63\x49\x57\x74\xcb\x0f\x2d\x0e\xa6\xe0\x05\xbf\xc9\xe4\x78\xf7\xf8\xb0\x8b\xc6\xe0\x6f\xcb\xbc\xb6\xe6\xa9\x5e\x65\xed\xe9\x8f\xef\xce\x85\x46\x6c\xee\x74\x7b\xf7\x80\x8e\x67\xba\x65\x5f\xff\x36\xa5\x83\x08\xa1\xa1\x98\x3a\xe5\x43\xde\x13\x58\xc5\xa4\x10\x34\x65\x68\x07\x0e\xab\x89\x09\x1d\x79\x20\x42\x22\xa7\xb3\x2e\xcf\x62\x37\x44\xaa\x23\x44\x5a\x90\x85\x6c\xef\x80\x12\xa5\x1a\x57\x9b\xb6\xf8\xfb\x32\x7b\xfb\xbc\xb5\xe6\xfa\x37\x66\x85\x60\xeb\x0f\xcf\x99\xcc\xed\x81\xdb\xf7\x76\x91\x2a\x67\x5f\xfb\x27\x65\x76\x67\x34\xc7\x41\x36\xb1\x28\x53\x20\x08\xd9\xba\x2b\x39\xb2\x66\x5b\x74\xcc\x24\x34\xc2\xbc\xc4\xb1\x96\xca\xf0\x06\x6d\x53\x01\x88\x41\x44\xd9\x5e\x56\x24\x97\xc2\x85\x17\xbe\x51\xa4\xeb\xe8\xa5\x37\x96\x4d\x39\x73\xa8\x79\x9e\x9d\xbb\x6f\xf5\x5a\x3e\xf5\x90\x25\x95\x7c\x7f\x63\x17\x65\xf4\x84\x7a\x0f\xff\x3a\xbf\x56\xae\x56\x81\x3c\x6c\x87\x3a\xad\x82\xd1\xc3\x1b\x1c\x6f\x95\xb1\xf1\xe2\xb2\xb9\x39\xa7\x7e\xfa\x6b\x9e\x93\x2f\xf8\xf9\xcf\x34\x7b\xf8\x46\xac\x1f\x95\x5a\x4e\x39\x1f\x7e\x39\x70\xea\xef\xdf\x1d\x3a\xf4\xd4\xaf\x17\x57\x6a\x2f\x3f\xc8\x78\x66\xe5\x77\x63\x57\xdf\x5a\x78\xf6\x5e\x7a\xbf\x64\xe2\x45\x4c\xc8\x72\x82\xc6\x4a\x00\xfa\x9e\x91\xd8\x34\xa7\x3b\x90\x45\xbe\x4a\xb1\xa1\x2c\xc5\x1e\x24\x91\x45\x79\x34\x02\x0e\x24\xbe\x4b\x74\x27\x35\x05\xaf\xfa\xcb\xe5\x32\x85\x0f\x56\xed\x7a\xa5\xed\xa5\x25\x39\xf2\xf5\x5d\xad\x3d\xf6\x09\xd7\xab\xca\xea\x1b\x19\x5b\x2a\x35\xed\xdd\xf2\x8b\x12\x69\x7e\x59\x75\x5d\x62\x84\xae\xe8\xa8\x14\xad\x20\x25\xb4\x18\x43\xa4\x31\x13\xf0\xb2\x64\x44\x58\x92\x65\xc0\x69\xa6\x88\x65\xac\xb1\x82\xaa\x11\x98\x90\x14\x72\x19\xff\x28\x74\xbc\xd1\xa5\x41\x5b\xda\x8c\x5b\xf0\x6c\xf4\xc5\xa4\xdd\x25\xfb\xf4\x3a\xfb\x86\xdd\xbf\x58\x95\x8d\xfb\xd6\x6e\xb8\xfe\xc6\xf0\x53\xe9\xad\x05\x88\x07\x66\x20\x70\xa6\x67\xf1\x8c\x42\x7c\xd3\x25\x84\x95\x2d\x4e\x57\x2d\x49\x0f\x1d\xcd\x51\x65\xa0\x12\x4b\xf0\x04\x93\xa5\x80\xe4\xd2\xcc\x43\x0a\x4e\xff\xee\x4e\x56\xc3\x7c\x1e\xd3\xec\x93\x45\x2d\x5f\xec\x43\xe6\xe5\x98\x56\xad\xde\xd8\xd5\x6f\x2e\xca\x53\x69\xd2\x4f\xb7\xca\xbf\x3e\xf6\xd9\x2a\x3b\x1f\xba\x3d\x14\xf8\x60\x70\x01\xe6\xe0\x8a\xdd\x95\x72\x16\xab\x76\xe3\x85\x5a\x57\x9f\xdb\x51\x2b\x57\xdd\x06\xf5\x4b\xfe\x39\xb5\x44\xb3\x5d\x15\x1b\xa5\xf9\xae\x86\x39\x4f\xc3\x1a\x8e\x20\xc7\x00\x91\x37\x38\x91\xf1\x42\x0e\x4a\x90\x97\x90\xab\x05\x92\x29\x88\x91\xa0\xf1\xba\xce\xbb\x9e\xca\x98\x01\xc7\x7a\xc2\xa3\xad\x45\x09\x6e\x5e\xce\xae\xd5\x1b\x5f\x7b\xba\xab\x7d\x7b\xf8\xad\xd9\xbf\x33\xc5\xcf\x77\xab\x38\x6d\xd0\xa9\xf1\xc3\xd7\x39\xdf\xe6\x5f\x90\xe6\xed\x84\x54\x6c\x2b\x31\x4b\x79\x9a\x63\xd2\x9c\x03\x38\x86\x36\x13\xd9\x85\x0a\x23\x84\x31\xe2\x89\x26\xd0\x21\x9b\xa8\xbc\x2b\x1b\x01\xb4\x35\x45\x0d\x51\x8a\x1b\xb1\x3e\x49\x3a\x5e\xfc\xd7\x91\x7d\x61\xb2\x7e\x72\xc6\xa8\xce\x8d\xd6\x5f\x7d\xfa\xd6\x42\xae\xd2\x96\x8d\xc5\x3f\x9b\x47\xd7\xfa\xfd\x6e\x9a\x45\xf8\x63\x00\x19\x62\xf9\x22\x67\xc8\x9a\xc7\xf8\x26\x0b\x69\xc9\x34\x58\x9f\x93\xb8\x28\xe0\x13\x8a\x91\x38\xa2\x6a\x26\xa6\x18\xca\x43\x9a\x21\x27\x4e\x6a\x16\x4f\xc1\xb7\x2b\xbc\xb4\x1e\xde\x2e\xd8\x7f\xf7\xd6\x56\xfb\xaa\xbf\x5f\xab\xec\x1d\x77\x7c\x97\x06\x7b\xd1\x99\xbb\x87\xee\xf7\x3a\x78\x7a\x6c\x7a\x4f\x9a\xd8\xac\xa2\x25\x5a\xe8\x72\x3a\xc3\x3b\x26\x23\x04\x38\x04\x98\x06\xa2\x6a\xf2\x62\xcc\x8b\xba\x63\xab\x1a\x91\xa8\x20\x94\x91\x06\x23\x93\xa4\x62\xdd\x57\x7e\x76\xe2\x8d\x65\xe3\xb6\xe4\xe8\xb9\x73\xc5\xd2\x97\x66\xef\xf9\xbc\xd3\xca\x64\x9e\xde\x71\xf9\xe6\x4f\xea\x4e\x99\x9a\x7f\xed\x88\xec\x9b\x9c\x5a\x30\x06\x4a\xc0\x94\x74\xd5\xb4\xf9\x10\x29\xbc\x83\x2d\xd3\x30\x38\xe2\x11\x49\x35\x25\xda\x34\x05\xcb\x01\x89\xe2\x71\x86\xe5\x88\x56\x24\xc5\xae\x8a\x1e\xcd\x33\xb5\x3b\xb4\xe8\xab\x17\xfd\x63\xf4\xe5\x9f\x9f\xef\x5b\xf5\xb1\x76\x13\x6b\x5a\xfb\x1b\x54\x79\x66\x91\x37\xff\x41\x51\xe3\xd0\xc0\xbe\xf5\xd3\x8c\xa8\x17\x09\x1b\x78\x80\x0e\x02\x4b\x26\x12\x8f\xb4\xc4\xc7\x66\xa4\x53\x89\xa0\xe8\xac\x10\x79\xc0\xe0\x80\xa2\x23\x51\xe4\x12\x02\x9d\xc0\xb3\x85\x2c\x70\x9f\xb3\x9e\xce\x5b\x68\x7c\x97\x21\xdb\x97\x1e\x0a\x4f\x6f\x78\x71\x68\xdd\xf6\x4d\x1e\xbc\xb1\xf8\xc1\x53\xc5\x67\x3f\xce\xf2\xf7\xe6\x9f\xc9\x3e\xaf\x24\xa5\xd9\xbe\x6c\x80\x58\x15\x02\x5d\x4a\x28\xd6\x0f\x19\x37\xc6\x7e\xe2\x06\x0a\xa3\x6b\x49\x62\xab\x91\x81\x80\x6f\xab\xba\x68\xd3\x08\x20\xdf\xe6\x45\x27\x48\x5d\x88\xde\xee\x30\x6a\xa5\xfa\xf8\xb4\x21\xdf\xe0\x7d\xdb\xe6\xdc\x10\x9f\xdd\xd1\xa8\x77\xae\x23\x93\x2a\x0c\xfb\x74\x26\xae\xb1\x44\xba\x94\xfd\x56\x39\x65\x4b\x21\x07\xd0\x77\x54\x0b\x73\xae\xca\x22\x62\x47\x9c\x27\x71\x96\x82\x78\x96\x32\xe3\x80\x55\x25\x83\xb3\x54\x57\x8d\x55\xc1\x15\xa4\x38\x92\x18\xff\xdf\xf4\x26\xff\xcf\xe4\xfe\x45\x97\x2c\x2f\x5e\xff\xc4\xad\xfe\x33\x72\xea\xd7\xa6\xb5\x9d\xb0\x34\xfc\xf1\xad\xc6\x0d\x97\x9f\x6b\xe9\x54\x5d\x3c\xe0\xf1\x9c\x1f\xa4\x59\x9a\x87\x26\xbc\xa9\x7b\xae\xa2\x5a\x58\x40\xb1\xe3\x04\xc8\x0d\x74\x3d\x31\x81\xa2\x2b\x0c\xf1\x64\x5b\x08\xb4\x30\x0e\x02\x9a\x02\x96\x11\x47\x34\xff\x17\x1d\xe6\xfd\xbc\xff\xdd\x84\x33\x33\xa3\x78\xc5\x1c\xff\x7f\x19\xc6\x5f\xfe\x54\x79\xea\x8f\xd3\x86\xf6\x16\x07\x4c\xdb\x50\x4c\x79\xef\x8f\xd2\xcb\xdf\xde\xdb\xcb\x90\xfb\x1c\x7d\xe9\xbb\xae\xff\x28\x50\x66\xdf\xb0\xec\x13\x4b\x52\x6b\xdb\xf9\x42\x40\x13\x46\x10\x78\x4f\xb1\x34\x9f\x23\x96\xe4\xdb\x22\x66\x22\xc0\x29\x2a\xe4\x68\x5b\xf1\x23\x22\x8b\x0e\x92\x0d\x62\x9a\x51\x4c\xc7\x20\xf5\xc3\x4a\xbe\x9d\x05\xba\x57\x9b\xf7\x9d\x57\xab\xd2\xb4\x7b\x85\x46\x6c\xf8\xfc\xe7\x09\xdf\xf4\x7f\xaf\xf6\x71\xb1\xd5\xd3\x9d\x56\xd3\x47\x8f\x64\x1f\xf4\x99\x3a\x0c\xd4\x10\x21\x25\x52\x35\xc6\x35\x54\x3f\x12\xb5\x80\x8d\x58\x55\x8c\x0d\x9a\x8f\x05\x95\xd7\xa5\xc8\x96\x62\x4a\x56\x34\xc7\x73\x63\xa4\x2b\xa1\x91\x45\x3f\x76\xea\x7a\x8e\xb5\x87\x43\xab\x7d\x97\x84\x6d\x71\xba\x7b\xc5\x32\x2b\x26\x7e\x56\xb1\xca\x83\x76\x2f\xc4\xa0\x45\x8f\x05\x4f\x28\xab\xd2\x6c\xb6\x12\x9b\xa6\xcd\x62\x93\x47\x84\x12\x91\xa5\xe2\x08\x4a\xa1\xe7\x2a\x32\x74\x12\x31\x96\x28\x35\xf4\x51\xc4\x79\x7c\x18\xab\x92\x22\xe8\x34\x89\x1e\xcd\x93\xbf\x77\x99\x3d\xeb\xdc\x17\x0d\x35\xf4\xdd\x90\x5c\xad\xba\x94\x7b\x9f\x39\x3e\x22\x5f\x9d\x2a\x9b\x17\x0d\x9b\xb8\xff\xd4\xd5\x0d\x7d\xb3\xaf\x14\x9b\x72\x0a\xa2\x86\x7e\x64\xb8\x74\x62\x00\x41\xb4\x18\x97\x0d\x24\x5f\x0f\x9c\x58\xf0\x54\x55\x11\x6d\x62\x30\x62\x18\x05\x2a\xa1\x4c\x55\x21\x32\x45\x41\x9f\x3c\x8a\xd8\xfe\xbb\xe1\x5b\x66\xd3\x67\x2b\x56\x7c\x18\x87\xb1\xf3\xce\x3b\x97\xa7\xd4\x1c\x74\xa4\xe7\x3b\x0f\x66\xb6\xfd\xfd\xc1\xb0\xba\x15\x3f\x7f\xf2\xc9\x9b\xb5\xfb\xce\x17\xae\x4f\x5c\x92\xab\xd8\x93\xe9\xfd\x2e\x8a\x41\x69\x66\x44\x87\xc8\xc5\x89\x68\xd0\x9a\xe9\x25\x92\x4a\x38\x0a\x5a\x50\x71\x03\xc3\xb2\xa9\xc4\xa6\x3d\xdd\xc0\x42\xc0\x98\x74\xe4\x70\x59\x81\xf3\x7e\xce\xe8\x74\x74\xe6\xf3\xb3\xca\x7c\x44\xbf\x95\xfb\xfb\xc2\xad\x16\xe5\x6b\xce\x81\x6f\x6f\x2f\xbe\x90\xac\x4f\x2e\xcf\xd9\x4e\x77\x4a\x6f\x83\x13\x29\x6e\xe4\xb8\x86\x80\x22\xd9\x8c\x20\xa5\x1b\xb1\xa4\x79\x9a\x10\x28\x50\xb0\xd5\x28\xc0\x38\x20\x41\xe8\x21\x6c\x46\x14\xe1\x68\x37\x34\x8d\x2c\x94\xf4\xdb\xef\x2b\xbd\xbf\xf9\x57\x03\xc6\x0d\xde\xb3\x23\x57\xf5\x72\x55\x7a\xb6\xff\x60\xfb\x95\x57\xbf\x3f\x13\x6c\xef\x3a\xf9\xbd\xb7\x3b\x34\xea\x9c\x66\x70\x9e\xe2\x99\x9a\x29\x01\x4e\x40\x9e\xe9\xdb\x44\x36\xa1\xe1\x05\xc8\xa7\x1d\x9a\x09\x64\x51\xa2\x3c\xca\x76\x43\x8e\x35\x34\x27\x4a\x22\xdb\x08\xfe\x35\xd5\x7d\x34\xe7\xf4\x68\xff\x74\xd3\xc6\x6f\x24\xe5\xf7\x96\x9d\xf2\xf1\xd3\x4f\x0d\xbf\x33\xe6\x99\xbb\xbd\x5b\x47\x85\x5e\xc4\x23\xdf\x95\xee\x9d\xe9\xbb\x28\xcd\xf3\x40\x62\xdb\x4a\xa0\xdb\x61\x20\x48\x86\xeb\x22\x92\xe0\x98\x12\x55\x2e\x36\x3d\x0a\x2b\x9a\x6f\x30\x09\xad\x33\x8c\xc7\xa8\x0a\xd2\x31\xb4\x41\x82\x73\xfc\xe7\x5a\x98\xbf\x1b\x77\x66\x66\x4c\x19\x94\x23\xc7\xc3\x6b\x61\xba\xeb\xb7\xe2\x07\xe7\xaa\xfb\x05\x37\x8f\x7a\xb1\xff\xa8\x4b\x0d\x87\x8e\x56\xd6\x0e\x98\x90\x79\xe4\xcb\x35\xd7\x06\x4c\x59\x39\x21\xfb\xaa\xa1\x29\x5b\x39\x4b\x52\x91\xae\xf2\x8a\x8b\x80\xad\x53\xae\xac\x38\x2e\x65\xe1\x40\x0b\x2c\x44\x48\x28\x27\x10\x60\x00\x7d\x2d\xf6\x22\x29\x62\x0c\xcb\x64\xa0\x93\xc5\x08\xf1\xce\xfc\xd1\x75\x2e\x1e\xfc\xe5\xdd\xe6\x39\x7f\x2b\xf7\xca\x3f\xf6\x1f\xb8\xf8\xb2\xff\xc2\xec\x41\xb3\x86\xb9\xc5\xd5\x3a\x55\x87\x4e\x4a\x6f\x28\xd0\x2e\x34\x08\x64\x59\xca\xd6\x42\x2b\x66\xa9\x80\xc1\x80\xe6\x62\x1a\x52\x12\x30\x35\xac\x25\x2a\x4d\x39\x2e\x34\x02\xcb\x33\x28\xda\x57\x04\x2d\x8b\x11\x62\xde\xfd\xdb\x7e\x94\xce\x77\xcc\x28\x31\xfd\x27\xb7\xc4\xf4\xf8\xed\x93\x9d\x5e\x6c\x56\xff\x58\xf9\x0f\x47\x17\xb8\xd4\x31\xe9\xae\x66\x7f\x49\x6b\xea\xed\x91\x0e\x0f\x1c\x35\x09\x7d\x60\xf0\x44\xd3\x42\x16\xdb\xba\xaa\x8b\x08\x39\x01\x13\xc6\x9c\xc8\xea\x24\x64\x4d\x81\x31\x29\x99\x32\x0c\x41\xc6\x02\x9d\xfa\xb4\x27\xf7\x2d\x7a\x79\xd6\xcd\x15\xd5\xd4\x01\xbd\x97\x54\x39\xac\xf6\x59\x94\xf7\xd8\x0e\xd4\x71\xf7\x4b\xe3\xc4\x2e\x1b\x16\xff\xdc\x35\xfb\x73\x85\xd4\x37\x2b\x1c\x29\x3c\x4c\xd4\x10\x79\xba\x23\x20\x9b\x55\x08\x49\x58\xcf\x21\x00\x2b\x48\xa2\x28\x55\x05\x04\xcb\x22\xef\x01\xc9\x57\x68\x21\x30\xa1\x90\xfa\xb4\x1f\xe4\xae\xff\xee\x11\x63\xc3\x49\x70\xa4\xed\x94\x1e\x25\xab\x55\xb1\x0b\x0e\x5a\x7f\xe1\xf6\x0f\x83\xba\xff\x79\x9d\xab\x3d\x7c\xea\xf8\xf4\x36\x3b\xa6\xaf\x51\x86\xe1\xe8\xc0\x66\x28\x45\x8d\x08\x52\x10\xc7\xf3\x2c\x92\x0d\x4c\xd3\xc4\xc2\x44\x72\x6d\x13\x06\xa2\xc0\xf0\xac\x6e\xb3\x40\x04\xe6\xff\x25\x9e\xff\x05\x15\xfe\xdd\x48\x2b\x33\x63\xf2\x13\x8d\xff\x03\x54\xd8\xea\x8b\xc6\x63\x57\xce\xf0\xa7\xf2\x7a\xe3\xae\xe6\xf7\xb7\x85\x9e\x49\x8e\x2d\x47\xc3\x9a\x5b\xbe\x2f\x36\x72\x4e\xdd\x29\xc3\xba\xa4\xb7\x98\x89\x8e\x8d\x20\x11\x18\xd7\x95\x44\xcf\x85\x41\x02\x2c\x2d\x91\x38\x9e\x32\x49\x1c\xcb\x5c\x4c\x71\x48\x71\x39\x4d\xc2\x86\x19\x1a\x84\x72\x4c\x3d\x8b\x9b\xcd\x99\xc3\xd3\xf6\xec\x64\x9a\x57\xdf\x3a\xa2\xdd\xa9\xcf\xea\x84\x57\x0f\x17\x1d\xfa\xfa\xb2\x3f\x72\x5a\x93\x9f\xef\x74\x7e\x79\xbf\x2d\xe9\x15\x93\x86\x04\x78\x24\x21\x9a\xec\xc9\x14\xd2\x13\x57\x0d\x75\x2e\x36\x34\xc5\x8a\x01\xe7\x28\x1c\x1d\xab\x8e\x10\xf8\x9c\xe4\x45\x72\xc8\xb8\x2a\xe5\xfc\xcf\x5e\xc5\x47\xab\xc2\xcf\xef\xef\x1f\xaa\x4c\xb9\xf3\xdc\x8a\xf1\x1b\x5b\xd6\xbd\x32\xf6\xc2\xda\x35\xcf\x9d\x46\xde\x07\xad\x6f\xf5\x29\x31\x6a\x6d\xdf\xf2\x69\x1e\x32\x98\xa1\x1f\x3b\x21\xc5\xea\xb6\x03\x88\xcb\xfb\xac\x24\x28\x00\x58\xb4\xa4\x7a\x40\x63\x92\x04\xf8\xb2\xe3\x40\xcc\x25\x32\x16\xfd\x30\xb6\x39\x0a\xa7\x0e\x85\xf8\xf2\x53\x77\xc0\x3b\x2d\x3a\xef\x44\x79\x1a\x3e\xfb\xd4\xf0\x5b\x13\x1a\xef\xa8\xf8\xcc\xf9\xf6\xad\x67\xb4\xcf\xd1\x7d\xf0\xce\x2d\x95\xd2\x5b\xcc\x90\x05\x3d\x45\x0a\x94\xc8\x63\x85\xc8\x75\xad\x58\x50\x62\x0b\xc8\x09\xd0\x4d\x96\x27\x8c\x25\x31\x86\x07\x18\xcf\x54\x65\x9a\x20\x31\xe4\x59\xf8\xd7\x62\xa7\x6f\xf2\xfd\x77\xf3\xda\xcc\xa6\xb9\x2b\x16\x1a\xf0\x50\xbb\x0d\xff\xac\xd1\x9a\xae\x7c\xbe\x7c\xf7\xa6\x23\x9e\xb0\x8e\xbd\xdd\x1f\x2e\xac\xf6\x4a\x95\xa9\x0b\x73\x9d\xdd\xdb\xb2\xef\x39\xeb\xd7\xf9\xe9\xfd\x27\x29\x55\x0e\x62\x44\xc9\x90\x00\xc3\xa1\x79\x8e\x81\x61\x10\x51\xbc\xce\x98\xbe\xc1\xd9\x9c\x00\x7c\x8e\xa7\xa5\x84\x0b\x5d\x27\xc0\xb1\x22\x48\x89\x98\xe2\x65\xb5\xe4\xa2\x8a\x3d\x16\xcc\x7a\xa1\xea\xcf\xe5\x4f\x8f\xea\xe9\x15\x62\x0e\x6d\x6c\xdd\xf7\x50\x9f\xe7\xee\x9e\xda\xdf\xcb\x3d\xfb\xad\x97\x66\x59\x22\x3a\x94\x78\x59\x45\x89\xa5\x71\xaa\x00\x25\x5a\xb3\x35\xdb\xf5\x4c\x45\x87\xb1\x65\x70\x89\xe6\x38\x38\x20\x31\xb2\x39\x46\x81\xa2\x17\x10\x37\x0b\xf2\xef\xf3\x6f\x54\xb3\x06\x6c\x12\xdf\x7a\x31\xe3\xfe\x94\x2b\xdd\x2e\xc8\x93\x9f\xef\x51\x18\x6f\x16\x7e\x28\xf4\x7e\x99\xcf\x9a\xcc\x59\x9b\x33\xcd\x51\xe0\xf9\x82\x6a\xeb\xa6\x2a\x49\xa2\xe3\x2b\x30\x52\x70\x1c\x04\x58\x72\x22\xc8\x46\x2e\x82\xb6\xe0\xd3\x90\x84\x71\x62\xdb\x3e\x06\xaa\x10\x51\x59\x80\x4f\xca\x5e\xaf\x37\x75\x6b\x97\x73\xcd\xfa\x4f\xe9\xb3\xf8\x4c\xd3\x5b\xc7\x36\xe6\x30\xd7\x74\x0d\xa9\x4a\xaf\x6b\xd5\xeb\x37\xf5\xd6\xa5\x19\x7e\x45\x33\x96\x65\xcb\x18\x86\xae\xad\xf0\xb2\x4f\x64\x87\x81\xb2\xe5\x88\x98\xa5\xa1\x89\xa1\xa2\xc9\x06\xd2\x79\x5a\x15\x24\x57\xa4\x19\x2d\x76\xff\x05\x2b\x7c\xd4\xec\x57\xf6\xfe\xfe\xe1\x2d\xf7\x7a\xc7\x9a\x17\x57\x0d\x3c\xfe\xc4\xd7\xd7\xcb\xb7\xea\x5c\xb6\x78\xdf\x6f\x9b\xb4\xa9\xbf\x39\xae\x8e\x66\xa5\x77\xbd\x19\x9f\xc4\x2a\xef\x60\x46\x93\xd9\x98\x72\x19\x49\x60\x81\x1a\xc6\x91\x28\x86\x50\x05\x34\x25\x58\x96\x90\xb8\x72\x92\x58\xae\x69\xd8\xb6\x4e\x33\x9e\xf3\x57\x03\xfd\xbf\x9d\xe8\xdf\x4d\xc7\x33\x33\x72\xb5\x78\x22\xe7\xc3\x9d\xe8\xcc\xad\xa5\xf5\x5f\xeb\x4f\x2c\xb7\x64\xe3\x3b\xda\x07\x6f\x66\x8e\x28\xda\xf8\xea\xae\x0d\xb7\xc6\xb0\xf3\x1f\xfb\x3d\x80\xbf\xd4\x48\xaf\xd6\x37\xa4\x13\xd3\x47\x86\xaf\xda\xb2\xcb\xc7\x3c\x4f\x47\xd0\x34\x10\xe5\xab\x92\xa4\xc3\x24\x91\x14\xd6\x34\x23\x86\xd8\x00\x02\xc3\xf2\x85\x50\x80\x54\x16\x7c\xd4\x7e\x55\xda\x6c\x97\xab\xac\x1a\x73\xb1\x5e\xcb\x1a\xe6\xa9\xda\x43\xe6\xcc\x1d\xfd\xc3\xa9\xcb\xef\x95\x7c\xf9\xee\xa0\xbc\x5f\xae\x61\xf6\xa7\xf9\xc2\x0c\xb4\xd8\x42\xbc\xa9\xa9\x66\x6c\x86\x9c\x62\x50\x86\x93\xc4\x90\x4f\x30\xb6\x55\x49\xf7\x29\xe4\x27\x92\x1b\xb1\x11\xf6\x10\x0f\x39\xd9\x70\xb3\xe8\x44\x73\x35\xbf\xf4\xdd\xcc\x61\xb5\x2f\xee\x7c\xb6\xfb\xb7\xdf\x37\x7a\xe6\xf7\xb5\x3f\x97\xc9\x77\x46\x57\xd9\x85\xfb\xaf\x94\x78\x62\x4e\xef\xf4\xd2\x68\xa1\x96\xb8\xbc\x2c\x50\xd8\x89\xa5\x88\xe2\x15\x47\x14\x18\x5f\x8a\x3c\x89\x06\xac\x85\x24\xce\x71\x78\x9b\xe6\x3c\xd6\x90\x14\x87\x0f\x88\x41\x81\x24\x0b\xa5\x2e\x7d\x67\x48\xcf\xa1\x4a\xac\xdf\xf9\x3a\xf8\xc8\xc9\xf5\xd3\xd2\x31\x7b\x37\xe4\xec\x38\x17\x3c\x71\xaf\x5d\xb5\x9f\xc6\xac\x1a\x9a\x27\xbd\x5d\x83\x4b\xe9\x58\xe4\x51\x42\x98\x00\x6b\xc0\xb5\x3d\xc1\xe3\x5d\x1f\x40\x42\x40\xa2\x47\x41\x10\x51\x02\x26\xc4\x84\x50\x0a\x05\xcf\xf7\x7c\x29\xc9\xe2\x2e\x79\xa0\x9d\xff\xcb\xb3\x9f\x8d\x18\x90\x77\xe4\xc8\x35\xf8\xbd\x89\x2d\x27\xcd\xec\xce\xea\xaf\xa0\x3c\x33\xae\x34\x28\x7b\x83\x79\xa6\x40\x7a\x7b\xb4\x30\x30\x2c\x5f\x86\x9c\x44\x63\x1d\xc5\x82\x4f\x0b\xb1\xe8\xd1\x81\x4a\xdb\x11\xa6\x88\x14\x32\x0a\xf4\x38\xcb\xd7\xd4\xc4\xb6\x15\x90\x68\xc8\xfd\x8b\x60\x7a\xb8\xf9\xbf\x2c\x5e\x7d\x61\xd7\x87\xc5\x37\xd7\xc5\x6f\x5f\xa6\xc9\x8f\x6b\xf2\x2d\xbb\x3f\xe6\xed\x2a\x76\xcf\x4d\x27\x2e\x17\x2a\x79\xfa\xe2\xc9\xb2\xf9\x32\x33\x1e\x1c\x7d\xb0\xe8\xff\x63\xfa\xff\x7a\xca\x28\xdc\xd5\xf8\xc7\xd6\x1a\xf5\xd6\xdf\xce\x37\x3f\xd3\x91\x33\x8b\x17\x3c\xf3\xce\xaf\x47\xb7\x0e\xd9\x70\xee\xea\xd1\x7e\x43\x32\xdb\x28\xe9\x75\x2a\x47\x61\xc2\x40\x74\x12\x5b\xc5\xa1\x65\x61\x36\xa4\x64\x56\x52\x2d\x83\x78\x3c\xa0\xc2\x50\x08\x65\xcd\x16\x00\xa2\x08\x03\xa0\xcd\x48\x86\x88\x94\x47\x0b\xf0\xd7\x6f\x36\x95\x8d\xad\x9d\xff\x21\x56\x3f\x74\xe5\x7e\x0d\xea\xc5\x4e\x65\xae\x54\xe8\x36\xa9\xe5\xbc\x7d\x19\x5d\xff\xac\xf9\xec\xc6\xec\xcb\x64\xa5\x74\xa8\xc0\x30\x41\x44\x24\x8d\x05\xb6\x8f\x64\x91\xb7\x51\x44\x13\x6c\xcb\x16\x72\x22\x43\x92\x65\x8c\x5d\x96\x45\x0c\x32\x0c\xca\x95\x19\x45\xc5\x5a\x0a\x91\xbd\x6f\x97\x15\xf9\x26\x4f\xc6\x80\xcc\xf6\xc5\x1e\x5b\xfb\x92\x26\x6f\x1c\xbf\xe1\x8f\x5a\xc1\xe7\xfa\x8b\xd1\xfb\xed\x8a\x14\x5e\xb3\x2b\xfb\x80\x8e\xd4\x28\x73\xc7\x25\xc8\x81\xa2\x63\xfb\xb6\xc3\x73\x5a\xa0\x1a\x9e\x4c\x0b\xac\x68\x0b\xb4\x0b\x19\x96\x73\x91\xaa\x6a\x96\xc7\x9b\x04\x08\x89\x09\x05\x21\x0b\x5e\xcb\x82\xab\x5b\xda\x1e\xeb\xbf\x8b\x7f\x72\xdc\xb6\x1a\xbf\x4d\x39\xfa\xdb\xa2\xdd\xfc\xd7\x35\xbb\x74\xeb\x97\x81\x4a\x6f\xbd\xf9\x59\x8d\xf4\x76\x67\xd0\xa5\x18\xdf\xb4\x24\x81\xe2\x43\x88\x05\x8f\x0b\x54\x03\x03\x40\x68\x26\xa4\x82\x18\x47\xa1\x4a\x49\x98\x58\xba\xcd\xab\xc0\x66\x12\x55\xc7\x09\x9f\xfa\x79\xee\xa9\x03\x9d\x2a\x2e\x1d\x27\x5e\xff\xae\x48\x9e\x97\xe7\xdc\x1b\xdd\xd6\x6f\xfe\xa0\xe8\x4a\x30\xe0\x76\xdd\x59\x9b\x9d\x9a\xdb\x9b\x1d\x4f\xb3\x80\xb0\x18\x47\x86\x22\x08\xae\x05\x93\xc4\x25\xa6\xc7\x1a\x5e\xa4\x68\x3c\xb4\x2c\x06\x04\xd0\xd5\x4c\x47\x77\x34\x15\x25\x8c\x60\x9a\x4a\xa4\xda\x40\x7e\x74\x86\xdb\x21\x2c\x10\x98\x17\xfe\x2c\x79\x33\x5f\xf7\xa1\x0f\x16\x4c\x3f\xf1\xfb\x83\x9a\xbd\xc6\x75\xb8\x24\x7c\x72\xea\x82\xb2\xfd\xb7\x39\xd9\x27\x7c\xa4\x16\xbd\x12\x24\x85\x0e\x38\xfe\x9f\xb7\x5c\x40\x28\x14\x49\x2c\xb4\x40\x18\x86\x80\xc7\x1c\xe2\x45\x4f\x67\x42\x5d\x64\x02\xc8\xd0\x89\x1e\x33\x3a\xcf\xb3\x8f\xfa\xf4\xc4\x15\xa4\x89\xd5\x64\xa8\x5d\x71\xd5\xfc\xf9\xdd\xda\x7d\x18\xee\xe8\x72\x50\x29\xbb\x6d\x39\xb8\x1a\x2e\x3a\xfe\x8f\xfa\x53\x5f\x4f\xb3\xa4\xad\x90\x84\x8e\x81\x28\x53\x26\xb2\xc5\x03\xd9\xd6\x7c\x9d\x35\xbc\x98\x56\x10\xd4\x12\x53\x13\x71\xa2\xf0\x30\x12\xa1\xcb\xb0\xc4\x64\x34\x0d\x90\xd4\x79\xfd\x86\xb8\xab\xe9\x2f\xc6\xb6\xbd\x4d\xee\x5c\x2e\xbc\xaa\xd0\x50\xfa\xea\x17\xcb\xce\x9f\xff\xe5\xa9\xbe\x0d\xe7\xcd\xec\x91\xaf\xdf\xb9\xf4\x42\x67\xa0\x8f\x25\xd5\xe4\xa1\x2c\xe8\xae\x28\x03\xce\xf2\x0d\xc1\x21\x12\x63\x18\x01\x67\x49\x14\xd4\x43\x1b\x7b\xbe\xce\xc7\x9e\xc9\x45\x84\xa6\x03\xa0\x09\x59\x40\x67\xc6\x96\x2d\xda\xe3\x4e\x4b\xb1\x61\xd5\x73\x1d\x9f\x4f\x9a\x7e\x39\xac\xc7\x3f\x3e\xed\x7f\x6b\xe2\xea\xc6\x7f\x96\x28\x9c\xa7\xfc\x9b\x3f\xe6\x7e\xe8\x5a\xf5\x5e\x70\x2d\xcf\xbd\x39\x57\x87\x1e\x88\xb7\x37\x1d\x55\xa6\x62\xf7\x06\x23\x7d\x6e\x76\x2d\x7a\xe9\xfc\x61\xc1\x2f\xdb\x4f\xef\xa8\x9b\xde\x6f\x43\x98\x20\x31\x11\x17\x45\x54\x48\x2c\x81\x17\x2d\x8c\x98\x58\xb5\x28\x25\x62\x34\x87\xd5\x74\xe8\x78\x12\x2b\x0a\xd8\xf1\x5d\x62\xa9\x8a\xc2\xea\xe0\x51\x77\x1a\x55\x78\x48\xe1\xee\xe7\x46\x66\x1c\xec\x7e\xf0\xdb\xce\x33\xfc\xe6\x1f\xef\x58\xbb\x74\x7a\xe5\x32\x3b\x5f\x19\x4f\xbe\xbc\x36\x78\xe0\x8d\xf4\xf6\x92\x58\x32\x5c\x99\x43\xa6\xe1\x6b\x81\x6e\x23\x53\x25\xd0\xc0\x11\x41\x89\xae\x7a\x5a\x2c\xd2\x32\x63\xc7\x34\x03\x4d\x4e\xb7\x25\x62\x40\x8b\x08\x20\xb5\x48\x6d\x75\xe9\xcb\xf9\x15\xaa\x80\xe1\x23\x36\x3d\xef\x0f\xde\xf0\x5e\xc7\x59\x1f\xdf\x6b\xb7\x3b\xf7\xcd\x27\xef\xbf\x30\x20\xc7\x1f\x97\x16\x3f\x97\x66\xfc\x73\xc4\x42\xd6\x0b\x55\x68\x3a\xb6\x23\xea\xa1\x17\x4a\x72\x0c\xfc\x84\x45\xb6\x28\x20\x0f\xc9\x3c\x71\x62\xdb\x8e\x75\x51\x72\x03\x0d\xd2\xe6\xbf\x6d\xf8\xfd\x3f\x93\xdb\x7e\xd4\x8a\xcd\xb7\x7b\x63\xe6\x6f\x0f\x9e\xe2\xda\xe5\x76\x96\xf5\xc9\x7b\xf6\x97\xd2\x9d\x46\x74\xaa\xfa\xe2\xfc\x4b\xf4\xd4\x8f\x86\xa7\x99\x1e\xa2\xff\xf3\x26\xad\xc4\x24\x60\x31\xe5\x24\x34\x54\x29\x13\xb2\xba\x65\xeb\x2c\xb6\xfd\xc0\x41\x18\x2b\x34\x89\x4c\x14\x88\xae\xc4\xfa\x86\x90\x48\x8f\x9a\xfc\x43\xf8\xcd\x25\xa9\xe1\x9b\xbb\xef\x1c\xf9\x6a\xfa\x9e\x66\x15\xb5\x7d\xc3\x9b\xcb\x0d\xc6\x6f\x59\x4f\xad\xdb\x73\xfe\xce\xc1\x05\x1d\xd3\x0c\x6d\x51\xa9\x90\xb5\x42\xdb\x88\x02\x26\x62\x22\x0b\x23\x16\xb8\x8e\x20\xc0\x80\x15\x61\xc0\x78\xbc\x2d\x45\xa1\x4f\xe9\x94\xe3\x10\xde\x85\x62\xa0\xd2\x59\x04\xed\x94\x3e\xa7\x1e\x54\x94\x8b\x2f\x2a\x97\xef\xe4\xde\x71\x07\x61\xe5\xb3\x1d\xeb\x6c\x7c\xf2\x97\x4a\x13\x77\x6c\xed\xe3\xdd\x99\x7e\xf4\xca\x43\x99\xe9\xed\x11\xed\x37\xac\x5d\x3a\xbb\x42\xe5\xdc\x95\x7e\x2a\xb7\x66\xb9\x70\x55\xf9\xbe\x43\x83\xc7\xbb\xbd\xb2\xa8\xf6\x2f\xbc\xfc\x55\x66\xf6\xd5\x1d\x53\x43\x8e\x2c\xec\xc1\x88\xd1\x65\x1f\x1a\x10\xfa\x02\x70\x13\xd6\x08\x8c\xc4\x89\x13\xca\xf2\x79\x62\xcb\x82\xc3\x7b\x2a\x1b\xb3\x40\x42\x48\x36\x24\x4f\x4a\x5d\x6d\x07\x4e\x3f\x38\x7f\x6c\xdd\xab\x56\xc3\xae\x4f\x55\x78\x70\x6f\x46\x81\x39\xc6\xb7\x35\xc2\x8f\xb6\x8d\xd9\xfa\x42\xdc\xe3\xb3\x6e\x97\xb2\x3f\xa7\x4a\x99\x6b\x94\x98\x87\x6c\x62\x19\x9a\xe6\x78\x1a\x4e\x4c\xdb\x93\x84\xc0\x8c\x38\x37\xb0\x39\x53\x17\x02\x23\x76\x9d\x98\x26\x8c\x11\xe8\x8e\x6b\x88\xaa\xae\x8b\x8f\xe6\x9a\xed\x43\x9f\xdf\xc2\xfe\xf9\xea\xd2\xf3\xd7\xd7\x0c\xfc\xa6\xf5\x9e\x95\x25\x14\x98\x6f\x48\x7c\xa6\x61\xcf\xed\xf5\x9e\x88\x16\x4f\x4a\x2f\x9e\x1f\x12\x1e\x78\x0e\x20\x08\x88\x06\xc4\x31\x62\x19\x59\x4c\x20\x9b\x28\x31\x6d\x39\x2a\x43\x58\xe0\x87\x10\x23\x8a\xd2\x55\xdd\x95\x4d\x9e\x91\xd4\x14\x4d\xef\x9f\xc7\xd7\x99\x95\x9e\x1b\xe5\x17\xac\xb5\xf5\x58\xde\x77\x2e\x55\xd8\xff\x5a\x95\x8b\x9f\x95\xfd\x69\xe5\x27\xc6\xfa\xef\xbf\xa8\x5d\x24\xcd\x2f\x72\x9c\xcc\xf1\x9e\x4b\xa4\x28\x61\x7c\x89\x98\x74\x4c\xdb\x09\x72\x3d\x87\x4e\xdc\x44\x0b\x28\x5b\xd3\x90\x67\x29\x81\xe5\x45\x9a\x2f\xc7\x8a\xa0\x3e\x84\xf8\xfc\x37\xe7\xa8\x5c\xf6\xa3\x62\x2b\xea\x0c\x7c\x50\xe0\xc2\xd9\x72\xb9\x3f\xe9\x3d\xe0\x78\x95\x0d\x55\xf3\xd6\x6f\x8d\xb7\x0f\x7c\x63\xe1\x9b\x47\xba\xad\x4b\xef\x49\x27\x01\x07\x54\x47\x8a\x99\x84\x20\x3b\xe1\xa4\x24\x16\x1d\x31\x74\x89\x0c\x43\x8e\xf8\x3a\x0d\x69\xc6\x04\xa6\x49\x59\x89\x9d\x84\x22\x34\x82\x7f\xdb\x6d\xfd\x7f\x26\x33\x37\x8b\xb5\xdf\xdb\x21\xe8\xfe\x5c\xa9\xb7\x2f\xce\xf9\xe1\xc7\x60\xdc\x76\xf7\x64\x66\x7f\xd5\x3a\x76\x6c\xb2\x5f\xea\xa9\xde\xd3\xd2\xeb\xcf\x7a\x62\xb2\x40\x09\x90\x0c\x51\x4c\x00\xa5\x4b\x34\x10\x43\x5f\xe7\x55\x43\x82\xbc\x4e\x5b\x82\x84\x88\xca\x26\xb2\x07\x28\x6c\xea\x58\xb1\x9d\x14\x1b\xee\xa6\x0c\xec\x58\xac\xee\xc4\x1f\xb7\x54\x99\x59\xfb\xe6\xba\xc9\x97\xee\xed\xee\xd0\xa6\xea\xf1\x39\x19\x8b\x2e\xf5\x12\x3e\xec\xd2\xb3\xfb\xd0\x34\x67\x74\x05\xf3\x94\x00\x05\x33\x8a\x75\x31\x71\xb1\x6d\x5b\x88\xb1\x1d\x20\xe9\x0c\x6f\x27\xa2\x68\xba\xa2\xaa\x00\xdd\x76\x13\x45\xe4\x62\x41\x14\x55\x29\x75\xed\x2c\x6f\x15\x6a\x55\x2d\x98\xff\xda\xe8\x67\x8b\x96\x6f\xf9\x8f\x72\x65\xfd\x89\x87\x96\x7e\x50\x37\xa3\xf2\xf4\xc3\x1f\xef\xdb\xf8\xca\x9d\xbd\x69\x86\x1c\xa9\xd0\xe6\x88\xcb\x46\x51\x08\x3c\x11\x7b\x82\x9a\x30\x32\x88\xb0\xa1\x83\xc8\xe4\x09\xd0\x88\x47\x45\x12\x09\x35\x49\x66\x6d\xde\xa6\x84\x38\x45\xe6\x00\x4b\x6e\x4d\xac\xd3\x30\x63\x54\x8d\xd6\x3d\xf7\xe7\xec\x5f\xd8\x9d\x71\xd6\x1b\x33\xeb\x97\xd2\x3f\x08\x45\x06\xbf\x3a\xef\xd3\x4e\x6d\xd2\xdc\xf4\xba\xae\x4b\xe9\x5a\x08\x45\x2a\x52\x13\x0a\x63\x1e\xda\x91\x19\x32\x41\xc8\x44\x02\xc5\x5a\x8c\xc5\x6a\x82\xe1\x07\xaa\xa8\xc8\x72\x28\x49\x8e\x87\x1e\x35\xb9\xfd\xfb\xa0\xe5\xa6\xd9\x07\xda\xdc\xe9\xb6\x42\xdc\xf7\x73\xe9\xab\x0d\x8a\xef\x29\x3a\x2f\xc7\x88\x1b\xad\xcb\x27\xbd\x27\x1f\x5e\x73\x3f\xbd\xd3\x2e\x28\xba\xd8\x71\x24\xdf\xb2\x59\x99\x0f\x54\x85\x09\xb4\xd8\x77\x75\x95\x82\x94\x82\x54\x45\x76\x4c\x20\x4b\xaa\xa1\x10\x41\xf2\x2c\xc4\x73\xf6\xbf\xf6\xed\x3c\x7a\xf7\x14\xc0\xe8\xdf\xc1\xae\xfb\x0d\x97\xdd\xe8\xd4\xac\x74\xeb\xaf\x8a\xed\x5a\x9d\x83\x2f\x58\x6f\xd1\xa8\xa1\x4f\xd5\xf8\x76\x66\x89\xb5\xd9\x07\xe2\xa4\x86\x3d\x51\x9e\x6e\x87\x92\xa8\xc7\x8c\xc7\x0b\x84\xe8\x22\xb6\x25\xda\x0d\x5c\xe4\x07\x81\xe3\xd9\x88\xa7\x63\xd9\x8d\x35\x1a\xaa\x82\x2e\xc0\xc0\xf1\xe4\x2c\x4a\xfe\xd4\x17\x97\xd5\x5a\xb4\xad\xf0\x84\x5f\x5f\x19\xd8\xf0\xe2\xe9\x3a\x25\x87\xb6\xf8\xf6\xe3\x2e\xcb\x2e\x66\xcc\xb8\xd1\xac\x04\x3a\x97\xf1\x30\x89\xf5\xdd\x49\x4f\x17\x3b\xb0\xe9\x5e\xe9\x62\xd7\x37\xbf\xd3\xb8\xeb\x7b\x53\x1b\x69\xf3\xcf\x8b\x6b\x5e\x5a\x75\xfc\xe5\xcb\xd5\x7f\xe8\xf9\x79\xd5\xf4\x36\xbd\x54\x04\x63\x4f\x37\x10\x46\x96\x60\x6a\x3c\xc3\xc5\x9a\x8f\x29\x4a\x12\x4d\x45\x74\x68\x92\xf0\xb6\x67\x4b\x7c\xcc\xda\xa2\x29\x81\xc0\x82\x96\x07\x1f\x6d\xc5\x4e\xff\xaa\x64\x96\x60\x7e\x3b\xf4\xf4\x55\x04\xb7\x4e\xba\x57\x4b\x9e\xb3\xbc\xde\xb4\x0d\xf9\x3f\x9c\x0f\xae\x95\x38\xf8\xf2\x94\xcf\xd2\xfc\xb0\xec\x69\x1c\xcb\x01\x8d\xf3\x45\x9d\xa3\x10\xa4\x78\x97\xd2\x59\x3d\xa6\x63\xce\xe5\x1c\x1c\xe8\x8c\x07\xe2\xc4\xd5\x0c\xda\x66\xcd\xc0\x85\x1c\xc1\xa9\xc5\x71\x0b\xc0\x9e\x07\xb6\xf6\x1b\xf5\xdc\xfa\xdc\x5b\xdb\x16\x5a\xfe\xfa\xd7\x60\xf7\xeb\x47\xfb\x2d\x29\x13\x14\x2c\x31\x64\x43\xfe\xfa\x0b\xba\xa6\x59\x44\xd4\x96\x21\x0f\x12\x81\xf2\x65\x0f\x39\x7e\x40\x2b\xbc\xe0\x99\xb6\x0a\x85\x80\x81\xa2\xcf\x85\x04\xba\x32\x42\x40\xa1\x2d\x03\x4a\x04\x52\xba\xf0\xe8\x49\x33\x7b\x97\xdd\x7c\x70\xb2\xea\xb1\x3f\x2a\x7d\x7c\xe9\xb7\xf9\x53\x8b\xe5\x59\xbf\x63\x74\xf0\xe2\xf9\x9b\xd3\x93\x6f\x46\x1c\x50\x16\x64\x7f\x01\x4b\x4a\xe7\x60\x2d\x99\x52\x58\x5a\x46\x8c\xe8\x0a\x74\xa2\xb2\x24\x09\x15\x51\x8a\xcd\x10\x1a\x51\x12\xdb\xc0\x57\xf4\x40\x4c\x6c\x22\x29\x80\x31\x11\x40\x49\x16\x3b\x1e\xab\x0f\xf8\xa8\xe9\x93\x85\x47\x4c\xe9\xb0\x60\x48\x87\xed\xfd\xc6\x77\xef\x7f\xf3\xc9\x4b\x7b\x51\xf1\x65\x9b\xbf\x7f\xea\xe7\x2f\xfb\xac\x1c\x94\xe6\x27\x3d\x3b\x0e\x2c\x6c\xc8\x92\x82\x0d\x82\x0c\x2e\x12\x6c\x5d\x66\x44\x4d\x8d\x75\x00\x1c\x15\x3a\x31\xeb\x86\xff\x42\x6f\x32\x16\x36\x09\x6f\x78\x8f\x96\xfc\x6e\xe5\xeb\xb5\x2d\xeb\x5e\x38\xd8\xed\x5a\xbe\x19\x97\x3e\x5c\xf4\x52\xee\xb8\x68\xdf\x3b\x42\x99\xe9\x47\x5e\xbb\xdf\x71\xed\xd6\x84\x4e\xaf\xc9\xac\x47\x29\x58\x74\x24\x19\xda\x86\x64\x41\x51\x09\x08\x0f\x5d\xcb\x0f\x64\x93\xb5\x05\x5b\x94\x6c\x3a\xf1\x02\x17\x06\x0e\x36\x2d\x8e\x76\x7d\x8a\x4e\xdd\x79\x6f\x1b\x5b\xf8\xd4\xcd\xda\xdd\xd1\xc6\x9f\x8e\x0f\xe9\xd7\x34\x44\x2f\x38\x95\xb7\xb4\xe2\x8f\x4c\x5d\x70\x76\xe4\xc8\xdd\x9f\xf7\xcc\xfe\x32\x89\x94\x3e\x6d\x47\xac\x29\x01\x5b\xc0\x89\xe2\x89\x86\x27\xd0\x14\xe6\x0c\x4f\x32\x19\x31\x64\x55\x1a\x4a\x0e\x10\x75\x87\xf0\x06\x95\x10\x4b\x65\x25\xd7\x86\x29\x54\x42\x7e\x6c\xb0\xb3\xf3\xa0\x01\x55\xc5\x2e\xa3\xd9\xb5\x27\xa7\x49\x15\xf7\xae\xff\xe5\xd4\xb1\x01\xa3\x8a\x7d\xf2\xc7\xfc\xad\xfd\x3f\x3f\x20\xa7\xb7\x8d\x65\x9c\xc0\x51\x39\x1a\xfa\x0c\x52\x1d\x40\x07\x7e\xe4\xd8\xff\x7f\xeb\x31\x0e\xad\x58\xa7\x12\x92\x48\x9a\xeb\xba\x46\x12\xf0\xba\x15\x5b\x46\xe2\xa5\x98\xdd\x9e\xb8\xd4\x75\xee\xca\xf2\x67\x97\xe9\x28\xdf\x0d\x66\xea\xa0\x1d\x73\x9b\x8d\xa8\x34\xea\x4d\xff\x8a\xb7\x6e\xf0\xb6\xd2\x93\xce\x35\x4a\xaf\xc9\x11\x2f\xa8\x82\x16\x31\x9a\xc7\xf3\x86\x17\xd0\x1a\x15\x59\xd8\xb3\x38\xa8\x23\x8d\xb1\x04\x80\x22\x16\x33\x1e\xb2\x1d\x0e\x84\x0e\x93\x28\xda\x43\x4c\xda\x7f\xdf\x9e\xb3\x89\xd9\x3f\xe8\xfe\xaa\x4f\x67\xe7\x3e\x6e\x1f\xe2\xaf\x97\xff\xc7\x88\xcf\x4e\x16\x3e\x7d\x76\xc5\xf1\x0f\xe6\x55\x72\x32\xfa\x0e\x4e\x73\x69\x41\xa2\xe7\x25\x86\xed\xe3\x44\x14\x45\x9a\x20\x19\xc9\xa2\x60\x4b\xb1\x62\x22\x83\x65\x2d\x45\xf6\x79\x9b\xf5\x3d\xce\x66\x35\x81\xa1\x31\xd6\x53\x38\xc7\xab\x33\x6e\xab\x5b\x86\x3c\xbd\xea\xc2\xd5\x66\xbf\x5f\x5e\xfc\xee\xe4\x8f\x5a\x68\x67\xa6\x4c\xf3\xd4\xc2\xef\x3d\xf6\x7d\x8d\x19\x6b\xa7\xa7\xf7\xa4\x25\xc4\x4b\x90\x81\xa6\x44\x8b\x92\x07\x82\x58\xc4\x76\x14\xcb\xb6\xe1\xf9\x26\x4a\xf8\x58\xe6\x90\x2a\xeb\x11\x23\xc5\x7c\x9c\x40\x3e\xf6\x15\x37\x45\x3f\xf8\xdd\x0f\x1f\x96\x0d\x3a\x96\x8f\xbf\xaf\x8a\x36\x94\x3b\xfc\xe6\x4e\xb6\xe4\x84\xe8\xfd\xa1\x19\x4f\xbe\x93\x63\xfa\xd9\xc9\x35\xae\x6d\x4a\xaf\xc9\x8e\x1e\x07\xbc\xcb\x7a\x26\x23\x4a\x7c\x1c\x85\x8a\x97\x70\x2c\xd4\x79\xa4\x47\x54\xa8\xb3\x3e\x51\x14\x0e\x25\xd0\x97\x79\x15\x22\xc2\xc4\x4c\x12\xa5\x66\x6a\x16\x04\xd7\xf6\xcf\xff\xaa\xd4\xd3\xcb\x3b\xf5\xfc\xe3\xc3\xcb\xa7\xf8\x3b\x97\x3b\x56\xa8\xc7\x2f\xb3\xd8\x23\xa1\x3c\x76\xe3\xc9\x17\xd3\x7c\x01\x96\x81\x1b\xa9\x31\x13\xf1\x8c\xa7\x12\x33\x0c\x45\x89\x15\x20\x2f\x7a\x84\x71\x65\x49\x90\x02\xc6\x85\x92\x2b\x9a\x86\x28\x08\x12\xf6\x45\x86\x52\x1f\xcd\xd1\x0d\x8f\xbf\x36\x7f\xe7\xd4\x6e\xbd\xad\xfa\xb7\x1b\xac\x75\x9e\xc3\xab\x9e\x2e\x79\xeb\x85\x4d\xcb\x9e\x9b\x5b\x61\x72\xde\x9b\x5b\x39\x35\xbd\x39\x5a\x43\x0e\x89\x74\x5a\xd0\x55\xd1\x8a\x7d\x42\xb1\x18\x22\x41\x66\x95\x58\xe2\xd4\x48\x26\x5a\xc0\x7b\x31\x40\xbc\x09\x25\xd6\x16\x39\xd9\x67\x91\x95\x05\x55\x28\xe7\x48\x51\x7a\x71\x4d\xc7\xc1\x1b\x4f\x9d\x7e\x6a\x71\x9f\x1e\x03\xda\x3f\xeb\x75\x8d\xd6\x5e\x1b\xd8\x6a\x3f\xb9\x7c\xfc\x89\x99\x69\x66\x20\x13\x3d\x4e\x50\x8c\x59\x0b\x63\x35\xd0\x2c\x35\xb1\x88\xc9\x7b\x96\x4f\x09\x38\xb4\xe8\xc8\x0c\x81\x93\xf0\x36\xc5\xd1\x09\x27\x9b\x02\x47\x27\xfa\xa3\x61\x58\xf9\x99\x2d\x73\x73\x36\x9a\xff\x94\x6d\xe6\x7e\xf7\x9b\x41\x97\xbf\x9c\xfb\xda\xdc\xef\x2a\x0f\x9f\x34\x91\xef\x5a\xeb\xfc\xc4\xd7\x97\x65\x1f\x4f\x9e\x1a\xfc\x1b\x32\xbe\xa2\x03\x9a\xf5\x00\x30\x23\x11\xa8\x22\x63\xbb\x8a\x11\xc9\x0c\xb1\x4c\xc1\xb6\xe9\x24\xb2\x24\xda\xf5\xd4\x04\x62\xc9\x07\x0a\x43\x52\xe4\xe8\x99\x4f\xee\x3a\x74\x67\x63\x9e\x5b\x85\x5f\xfd\xa8\xd8\xcc\x91\x83\x8f\x1c\xde\x5d\xa1\xe4\xad\xb3\x58\x7f\xa7\xce\xd5\xcc\x32\xb5\x4a\xbe\x99\x66\x89\x12\x0f\xb2\xd8\xc0\x9c\xa3\x61\xdd\xe0\x6d\x8b\x27\x08\x12\x4d\xf5\xdd\x30\xa4\x80\xc8\x47\xa1\xac\x5a\xa1\x1e\x70\x89\xe7\x10\xdf\x0d\x34\x0d\x66\xb5\xc5\xe2\xd7\xba\xcf\xed\x5a\x0d\x36\xae\x3e\xfc\x93\x7c\x79\x7f\xb3\x2d\x07\x7e\xd1\x0b\x4d\xf9\x68\x48\xb3\xeb\x7d\x84\x76\x4d\xf2\x05\xc5\xea\x3c\xfc\xeb\x41\xf5\x07\x54\x28\x77\x6a\xea\x8a\x02\x7f\xb6\x2b\xb2\x63\xdc\xf0\x3e\x93\xfb\xcf\xba\x3e\xf1\xd8\x6b\xd5\x6e\xe5\x0f\x86\x34\x27\x32\xf7\x90\xe3\x55\xf8\xa0\x3c\x75\xb2\x75\x8f\xda\x13\x3a\x5b\x1f\xb4\x2b\xf8\xcd\xda\xfb\xa5\xfa\x7e\xba\xeb\xe8\xb5\x57\x07\x65\xe6\x59\x35\xe7\xa5\x4a\xd9\x47\xbd\xa5\xbe\xa9\xca\x81\xcb\x6b\x86\xa4\x04\x16\xa1\x15\x16\x06\x34\x74\x04\x40\x47\x12\x4f\x90\x69\xc8\xba\xed\x39\x1e\xeb\xab\x96\xa2\xe9\x54\x68\x02\x03\x53\xf4\xa3\x5f\xb1\xd6\x63\xd6\x8a\x4f\x86\xb6\x2f\x71\xf4\xcb\x31\xf7\x3f\xda\xe9\xab\x7b\x96\x8f\xfd\x25\x6f\xed\x9e\x53\xff\x6c\x79\xb8\xb3\x77\x32\x67\x7a\xf7\xef\xc2\x90\x11\xd9\xd8\x12\xf1\x3f\x93\x4e\x2c\x4b\x89\xc8\xe8\x9c\x8a\x05\x8f\x32\x21\x67\x12\xc7\x90\x75\x25\xf0\x55\x86\x15\x05\xce\xb2\x19\x15\x8b\x20\x85\xe3\x31\xf9\x16\xbe\xf1\xca\x07\xfc\xd9\xeb\xdd\xcf\xf6\x2e\xdb\x4a\x9f\xee\x56\xef\x6d\x7d\x9a\x6f\xd6\x95\x01\xf1\xba\x6a\xd5\xa3\x5b\xd9\xc7\xab\xa6\x0c\x6f\xce\x09\x34\x9d\xb5\x25\x4c\x27\xd8\x50\x6c\x4f\xf3\x68\xdd\xb7\x15\x86\x0f\x34\xd3\x0a\x24\xc9\x89\xa0\x1a\x8a\xd8\xe3\x38\x14\x03\xdf\xf3\x19\x97\x4e\xdd\xa3\x0f\x79\x41\x9e\xb4\xb7\xdd\x1f\x65\xc4\xd1\x8d\xbe\x3c\x34\xbd\xf9\xe0\x2e\xce\xba\x5d\xaf\x4a\x2e\x57\xf7\xe4\xce\x91\x7b\x9e\x08\x2e\xa5\x99\xc2\xeb\xd9\x22\x47\x44\xc6\x84\x1c\xe7\xcb\x7c\xec\xe8\x94\x66\xfc\xb3\x6d\x14\x0c\x5a\xd7\x4d\x8c\x42\x43\x67\x15\xdb\x92\x91\x4d\x68\x93\xb8\x61\xe2\x3f\x9a\xff\xc7\x0c\x5e\x21\x97\x3a\x89\xcf\x8f\x59\xd0\x77\xc6\xb6\x26\x93\x57\x0e\xa8\x31\x73\xd3\xd6\xea\xeb\x87\x35\x1e\x73\x7e\xe9\x90\x12\x3d\x1e\x4f\xaf\xc9\x8c\x26\x62\x29\x49\xec\xd0\xb6\x45\x2b\x72\x02\x4c\x04\xe2\x32\x12\x08\x04\x6c\x2b\x9e\x46\x89\x3a\x8d\xc5\x58\x05\xbc\x24\xc6\x82\x4c\x07\xc9\xbf\x21\x05\x1f\x0a\xc3\xae\xf3\x5e\x98\xd9\x85\xec\x3b\xbd\xf5\x6a\xab\x9c\x4f\x1e\x9a\x76\xe8\xbb\x70\xc0\x6b\x6b\x66\x91\xa1\x25\xd6\xbd\xb7\x3a\x9a\x96\x99\xe6\x9d\xd2\xae\x9f\xf0\xa6\x40\x58\x97\x52\xc4\x98\x06\x01\x04\x46\xa2\x87\x0a\x90\x79\x05\xc7\x9c\x46\xcb\xd8\xd7\x29\x0a\x29\xc4\x73\x74\x55\xa4\x59\x4b\x4d\x31\x4d\xf4\xf3\xb7\x6d\xd9\x7f\xf4\xf1\xe7\x96\xe4\x0e\x95\xdd\xfd\x4a\xbc\xf7\xf5\xf3\xcd\xac\x85\x4d\x73\x7f\x92\xdb\xff\x66\xc7\xd8\x42\x3b\xa2\xf4\x56\x5a\x4b\xa5\x28\xcd\x74\x10\x02\x26\x88\x49\xa2\x85\x9c\xa7\x68\x41\xa4\x3b\xbe\xca\xba\x2c\x13\x79\x02\x4b\x19\x94\xce\xca\x32\x8f\x42\x4e\x74\x43\xc8\xa6\x10\x69\x6b\x38\xd5\x3c\x7c\xe4\xea\xec\xf7\x4b\x8c\xce\xdc\xb8\x67\x6a\xaf\x3f\x0f\x34\x2f\x3d\xf6\xf7\xef\xf7\xbd\xfc\x5d\x58\xaf\x55\xd8\x26\xfb\x4c\xc0\xd4\x1b\x06\x1c\xda\x34\x59\x4f\x00\x3a\x43\x0b\xd0\x0e\x80\x6a\x63\x1c\xd2\x9c\xe9\xe9\x4a\x62\xb3\x0e\xeb\x4a\x9c\xe4\xd3\xaa\x66\xd9\x8e\xc1\x80\xc0\x7c\x68\xc6\xf5\xef\x19\x7d\xfc\xce\x29\xfa\xe0\x26\x95\x8e\x7a\x5f\xf5\x2e\x76\x73\xc5\xb6\x16\x13\xe2\x8d\xb5\x7f\xb6\xc2\x67\x82\x97\x5f\xfe\x1c\x58\x95\xe6\xfe\x96\xff\xbf\x7b\xfc\xcd\x6c\x9a\xff\x85\xff\xc0\xe6\x15\x1b\x75\xf2\xf1\xd2\xc7\xdf\xfa\xa3\xec\xcc\x1e\x4f\x4c\xeb\x6c\x4f\x5f\x5e\x64\x22\x9b\x7f\xd9\xbb\xa4\xf5\x9d\x64\xea\xb3\x07\x37\x6f\x4e\x37\xe4\x44\x03\x98\x09\x01\xd2\x18\x8d\x67\xb4\x00\xd3\xc0\x57\x6d\xc6\x52\xb1\x2d\x18\xb2\x4d\x07\x9c\x8d\x54\x8f\x66\x1c\x17\x59\xaa\x1f\x60\x41\xcf\x02\x2d\x36\xec\xd0\xf2\xdc\x6f\xd3\x79\x5b\x6c\x9a\xb0\x40\xeb\x47\x5f\xfc\x35\xcf\x6f\x97\x16\x7f\xee\x31\x07\xf2\x74\x1e\xd5\xee\xc5\x49\x15\xb2\x5f\xb6\x52\x6f\x04\xd2\x89\x22\x26\xc4\x4c\x92\xc8\xc7\x22\x16\x88\x4e\xe9\x31\x6f\x27\x4e\x28\x01\x4a\xa0\x7d\x9d\x40\xc5\x23\xbe\x13\x3b\x1c\xe0\x6d\xd1\x17\x35\x90\x1a\x52\xd8\x98\x79\x67\xcc\xb2\x0f\x06\xef\xbd\xf7\xa9\xdf\x61\x44\xbe\x9d\x6b\xa7\xd5\x6b\x07\x27\x7b\x3f\x7c\x79\xe4\x71\x79\x4b\xb9\x89\xf7\xb3\xbf\xdf\x37\xe5\x55\x5c\x75\x78\x26\xa2\x38\x05\x21\x86\x42\x91\xa2\x69\x5a\x48\xa0\xe0\x33\xc8\x43\x01\x93\xc4\xaa\xa2\x63\x13\x02\x9a\x67\x18\x14\xb1\x1e\xd6\x63\x55\x4f\x6d\xf6\xb1\xe9\x46\xef\x77\xdb\x15\xa8\xf3\xfd\xf3\xe8\x34\x9a\xdd\xe9\xc0\x5e\x3d\xd7\xb4\xca\x4b\x76\xae\xf9\x20\x68\x36\x38\x5a\xf5\xb3\x90\xe6\xb8\xa1\x08\x31\x58\x40\x51\x1c\x20\xba\xc9\x46\xb4\x47\xa0\x24\x01\xdb\x74\x4d\x6c\x8a\x0a\x92\x13\xdb\x90\x79\xdd\xd7\xa2\x98\x66\x4c\x1d\x8b\x94\x91\x7a\x98\xd7\xf6\xe6\x6f\x57\x8b\x2f\x1d\xb7\xbe\xe9\xe2\xc7\x3b\x6e\x7f\xff\xb1\x19\xbb\x0e\xed\x2e\xdf\xad\x4a\x97\x9f\x4e\x35\x6e\xbe\x79\x77\xad\x3a\xd9\x57\xa4\x4b\xad\x46\x64\x8a\x01\xc7\x1a\x1e\xc3\x47\x48\x0c\x05\x06\x21\x87\xe6\x44\x43\x46\x30\x80\x11\xe5\x18\x84\xb0\x0a\x81\x80\xd2\x28\x8d\x55\xe8\x98\xa2\x79\xe3\xd1\x0c\xd5\xe5\xfa\xaa\x5e\x1b\x46\xae\x6e\xad\xee\x3a\xd0\xa4\xd3\xc9\xe7\x72\xb9\x13\x32\xfa\x5d\xac\xf0\xda\x27\x5f\x1b\x1b\xdf\x17\x26\x7c\x7e\x36\xcd\x22\xdf\x84\x06\x50\x07\x84\xd5\x21\x46\x9a\x81\x12\x97\x28\xbc\x68\x72\x09\x6b\xbb\x1a\x09\x42\x37\x81\x31\x71\x19\x8c\x23\xe4\x0a\xc4\x8c\xad\xf8\xaf\x3a\xf0\xbf\x24\xcd\xbf\x7b\xbb\xce\x6c\xda\x39\xff\x7f\xf0\x5a\x9e\xee\xe5\xe4\xba\xd6\xe8\xd4\x33\xfd\x5f\xfd\xaa\xf7\xd5\xae\xef\x6c\x45\xa7\x6a\x2f\x7e\x1d\xee\xaa\x59\xa8\xd4\xb1\xa1\xbf\xb5\x1d\x34\x35\xbd\xee\x84\x1d\x8c\x90\x09\x5c\x40\x6b\x91\x8d\x35\x6c\x6b\x2e\x05\x6c\x09\xab\x10\xf1\x84\xd3\xb0\xe0\x98\x56\x80\x7c\x59\xe2\xd4\x44\x10\x4c\x22\x08\x7a\xea\x9c\xb3\xa5\x29\x59\xd7\x61\x2f\xe8\x3f\x52\x13\x8e\x7c\xdd\xc9\xaa\xce\xfd\xd0\xa8\xc1\x87\xc7\xc7\xd6\xdd\x58\x66\x54\xc3\xc6\x7b\xeb\xe5\x4a\x6f\x8d\xe6\x03\x86\xb2\x01\xeb\xc5\xba\xc7\x09\x34\xcb\x4b\x16\x31\x31\x46\x81\x1a\xe9\x90\xa2\x5d\xc8\x23\x95\x15\x64\x25\xd2\x02\x43\x76\x3d\x27\x81\x2e\x95\x1a\xc9\xd4\x6f\xd1\x9c\x45\xdf\xab\xb3\x4e\xff\x63\xed\xed\x85\xa0\xa4\x37\x36\x6e\x50\xfd\xf8\x02\xae\xe1\xf2\x55\xf3\xce\x89\xdb\x9b\x3f\x97\x7d\x29\xb1\x94\x2e\xc5\x32\xbe\x40\x29\x14\x0d\x64\x9b\xd1\x79\xc5\xb6\x03\xa8\xda\x3c\x4f\x31\x34\x6b\xd9\x16\xa7\xfc\xff\x65\xe3\x0e\x92\x0d\xc5\x8f\x42\x85\x91\x21\xc8\x62\xc1\xd4\xb9\xf2\xf9\xc6\xd4\x84\xfd\x4f\xda\xc3\x57\x95\x29\x64\x36\x9f\x58\x63\x3f\x9b\x03\x96\x3c\xdf\x87\xdb\x59\xf4\xf5\xaf\xee\x7e\x9e\xfd\x79\x5a\x6a\x18\xb3\x26\x89\x4a\x4c\x2b\x0e\x23\x6a\x21\x41\xd0\x02\x36\x1b\x2b\x9a\x2e\x7b\xa1\x44\x31\xac\xef\xc9\x8c\x0e\x6d\x47\xd0\xcc\x38\xb6\x74\xc7\xf1\xf8\xf8\x11\xba\xf2\xdf\x3d\xe9\x64\x36\x6d\x91\xe3\xd9\x87\x23\xa1\x59\xf1\x8a\x0d\x6a\x56\x1c\xd5\xe5\xf0\xa5\x96\xbd\xbe\x1d\x5c\xd6\x5f\x7b\xa6\xf0\xb1\xba\x27\xbe\xd9\xaf\x3d\x38\xd1\x4e\xee\xe7\x8a\x69\x86\x98\xc7\xaa\xe1\xa2\x18\xda\x61\x48\xbb\x4a\x04\x45\xc7\x57\x7c\x5e\xa5\xfd\xd0\x57\x78\xc3\x08\x05\x22\x85\x2a\x13\xb2\xb6\xcd\x31\x14\xb4\x38\x4c\x65\xc1\xfb\x55\xde\xb8\x31\x3d\x7f\xe1\x7d\x67\xbe\xab\x34\x63\x71\x9b\xae\xcf\xad\x9e\x7b\x6b\xf0\xba\x27\x8b\xbc\x51\xf5\x5a\x85\xcb\xe3\x7b\x0e\xe7\xd3\x3c\x17\x12\xe4\x88\x0b\x3c\x83\xd1\x79\x0a\xc4\x49\x10\x58\x49\x28\x73\xb4\xcb\x61\x43\x34\xe3\x98\x04\x36\x94\x0d\x97\x47\x82\x20\xa9\x8e\x09\xb5\x04\xab\x56\x6a\xb3\x7f\x7d\x7a\x59\xd3\xd6\x25\x0f\xbd\xd9\xb7\xd0\xc9\x3d\xcf\xf6\x29\x3c\xa8\x73\xd5\xdc\x67\x87\x19\x4f\x7f\x5e\xa0\xe5\xa4\xbc\xc3\x26\x4c\xc9\xbe\xf2\x4d\xca\xea\xab\x49\x09\xcb\x38\x01\xe3\x62\x60\x07\xd8\x37\xa0\x8c\x44\x87\xd0\x36\xab\x12\x20\x40\x2f\x09\x24\x9b\x56\xa1\x02\x5d\x12\xbb\x91\x90\x28\x02\xcc\x42\xc5\xab\xc8\x8d\xed\x63\xde\xaa\xd2\xb9\xcb\x03\x06\xcc\xfe\x7d\x4d\xab\xef\x7b\x95\x74\xb9\x1f\xb7\xd6\x79\x55\x7e\x69\x66\x06\xc5\x4e\x2f\x9b\xde\x00\x36\x44\x8b\x91\x90\xe0\xaa\xbe\x69\x47\x86\x9f\x04\x24\xd1\x29\xec\x02\x3e\xd2\x75\x2c\xf0\x0e\xa2\x0c\x5a\x45\x92\x18\x0a\xb2\x2a\xc9\x42\x1c\x79\x7f\x09\x93\xaf\xca\xf7\xdf\xcd\x2b\x32\x33\x06\xe4\xc8\xf1\xd8\xc3\x14\xaf\xc9\x4f\xfe\x51\xea\x43\xef\xa3\x0f\xf4\x09\x7d\x0f\x57\x78\xf2\xf0\xfa\x79\x65\xf0\xf8\x45\xcc\xbe\xb7\xba\xbd\xd3\xba\x59\x66\xc5\x5e\xe9\x15\xcb\xe1\x2d\x0e\xf9\x0e\x48\x62\x4e\xc4\xa6\x27\x28\x84\xd2\x15\x36\xd1\x0c\x47\x83\x34\x8f\x00\x96\x40\xc2\x12\xc5\xb6\x5d\x31\x34\x63\x2a\x88\x61\xf0\xaf\xad\xc6\x0f\xdf\x80\xee\xe5\x9f\xb0\xb9\xce\x6b\x77\x9b\xb7\x7b\xad\xf8\xb2\x41\xcb\x0e\xe7\x78\xbd\xc5\xc4\x37\xc1\x27\x5b\x1a\x89\xb3\x32\x7f\xac\xd5\x7d\x73\xf6\x9f\xcc\x53\x8b\x67\xea\x8e\x96\x08\xac\xad\x6b\x84\x11\x91\x65\x88\x04\xc7\x1c\x86\x86\x1e\x47\x9a\x6e\x28\x92\x00\x1c\x2b\x26\x22\x0b\x3c\x89\x55\x75\x1e\x40\x35\x8b\x8d\x1c\x33\xbf\x78\xb0\xb8\xc2\x9e\x67\x8f\x4c\x38\x54\xe6\xc2\xe2\x42\x37\x87\x8d\xdb\xfe\xf4\xa8\x11\x25\xa9\xce\x0b\x4e\xc0\xba\x6b\x1b\xaf\x4c\xaf\x3e\x3f\x8c\x23\x11\x25\xbc\x40\x0c\xd1\x13\x45\x3e\xf6\x28\x5b\xf7\x81\xcf\x7b\x00\x40\x48\x62\xe2\xd3\xac\x2f\xda\x11\x71\x9c\x20\x14\xf8\x28\xf4\x6c\x4d\x4a\x6d\xf6\xa5\xe1\xf5\xef\x74\x9d\xb2\x64\x66\xb3\xd6\xb9\xc7\x95\x5d\xf7\xf4\x37\x1d\x0b\x4d\xc8\xc8\xbc\x5c\xca\x2f\xfe\x53\x7c\x3e\xa8\x3d\xf4\x7c\x9a\x87\x11\x11\x1d\x48\xa2\x8b\x44\x5e\x74\x21\x14\x69\xe8\xc7\x44\x72\x1d\x4f\x34\x13\x82\x05\x84\x43\x2a\x42\xb2\x45\x31\x9a\x2b\x03\x59\x48\x44\xcb\xcd\x62\x27\xd6\x37\x4b\xcc\xe1\x27\x76\x7c\x5d\x6a\xc7\xa4\x7b\x35\x6e\x5c\x79\x7d\x7d\xa9\xd7\x4f\x2c\xca\xbf\xdc\x7b\xa7\x70\xee\x55\xd6\x2f\xcd\xda\xd6\x4a\x33\xa1\x8e\x09\x19\x89\x57\x05\xa8\xd9\x21\x4d\x73\x62\x60\x33\x14\x22\x4e\xcc\x49\x0e\x34\x6d\xdb\x74\x6d\xd5\x03\x18\x19\x16\x2b\xd1\x98\x11\x63\x26\x51\x1e\xa9\x63\x7f\x37\x3f\xcc\x6c\x9a\x3f\xf7\xe3\x0f\xd7\xb1\x11\x0d\x3e\xf9\x7e\x5f\xe3\xb5\xbd\xfa\xed\x2c\xf6\x66\x91\xbc\xcc\xeb\xee\x91\x9c\x35\x6a\x84\x4b\x0a\xb6\x7e\xdf\x3c\x5d\xfe\xb7\xd5\xd9\x27\xef\xa4\xac\x63\x8e\x01\x12\x3f\x92\x7d\xde\x87\xbe\x86\x19\xcc\xf9\x4a\x42\x61\xcf\x0d\x65\xd9\x04\xb1\x0a\x12\x9d\xa3\xa8\x38\x48\x42\x22\x89\x0c\x8f\x4d\x09\xb9\xa9\xbf\xcd\xee\x03\xeb\x06\x33\x33\x4a\x57\x02\xd7\xd0\x94\x3a\x66\xaf\xdf\x3e\x91\x87\x3d\x96\xfb\xd3\x92\xca\xe2\x15\xc3\xbe\x79\x7d\x5f\x4d\x3d\xbd\x01\x1c\xf3\x1a\xf0\x0d\x4d\xb1\x19\x43\x8f\x22\xc9\x36\x80\xac\x60\xcc\x31\xac\x11\x42\xd3\x65\x6c\x89\x8f\x88\x42\x04\x5b\xf0\x89\x12\xf9\xb4\xcc\xa8\x51\xea\x48\x38\xb8\xf3\x52\xb9\x70\xee\xa1\x6a\x49\x9e\x79\xb9\xc6\xeb\x4d\x5e\x3d\xf7\xdd\xd2\xf9\x7d\x26\xce\xae\x50\xea\x68\xb1\xfc\x37\x16\xd4\xca\xbe\xe2\x55\x6a\xad\x79\x4e\xe6\x64\xcc\x45\x8a\x10\x18\xac\xc4\x12\x5d\x31\x18\x1e\xd1\x94\x11\xbb\x76\xcc\x45\x26\xb1\x0c\xd5\x55\x0c\xa0\x18\x06\x97\x08\xb6\xe7\x69\x4a\xea\xd3\xbe\x72\x61\xf2\x72\x34\xe5\x41\x37\xda\x5a\x5d\xa9\xcb\xc1\xf6\x53\xf6\x74\xa9\xeb\xee\x6d\xef\x50\xfb\xf3\x34\xcf\x25\x4f\x9b\x3f\x24\xcd\x6f\x1c\x41\x1c\x22\x64\x8b\x71\x10\x73\x48\x67\x4c\x92\xc4\x22\x27\x6a\x26\xe3\x6a\x38\x8e\x54\x2a\x60\xec\xd8\x09\x6c\x5f\xa1\x13\x99\x86\x50\x36\xa8\xbf\x2e\xbf\x2b\xf3\xfd\x77\x73\x97\xcc\x57\x73\x7e\xfb\x70\x15\x7b\x69\x38\x68\x5b\xfa\xbd\xc6\xbb\xdb\x7e\xfe\xcb\xfb\xbf\x1d\xbf\xde\xb8\x15\x29\x7e\xe5\x5a\x87\xc5\x7f\x7e\xba\x74\x5e\x8f\x9d\xf7\x5f\x68\x95\xde\x68\x87\xba\xaa\x9b\xc4\x0b\x3c\x44\x6b\x7a\x00\x6c\x25\x31\x31\x26\x94\x1a\x46\x4c\x14\x13\x03\x78\xa6\xaa\x10\x43\xf2\x7d\xa8\x4b\xbc\x62\x07\x1e\x48\xb1\x06\xa0\x7f\x06\x29\xf8\x81\xbc\x24\x73\x45\x5e\xfb\x9d\x2d\x0b\x2f\xa1\x20\xbc\xff\x72\xff\x7b\x63\x8b\x06\xd3\xdf\x9e\x55\xe1\xf8\xc8\x92\xe9\x2d\x07\xd0\x54\x1c\x97\x4b\x44\x6c\x3a\x9a\x14\x3a\x54\xc2\x2a\x8a\x61\x6a\x01\x91\x88\x11\xcb\x92\x1d\x51\xa1\x18\x3a\xbc\xca\x00\x12\x13\x51\xc3\x86\x9b\x45\x10\x94\x68\x36\xa1\x46\xa9\xd2\xb7\x4f\x14\xbf\xfa\xf1\xb8\xdb\xfb\x9b\x9d\x8e\x85\x5c\x25\x4b\x3e\xd1\x39\x3f\x1d\xce\xfe\xbc\xec\x95\x5c\xcf\xa4\xd7\x9b\x4c\x4f\xb7\x65\x2a\x72\x35\xce\xb4\x54\xe8\x6b\xb2\x1a\xb8\x94\x2a\x43\x8d\x96\x15\xd3\x4a\x00\x32\x29\x90\x00\xd1\x46\x09\x87\xad\x98\x95\x50\x56\x82\x1b\x8d\xfb\x0a\x77\x86\x15\xe9\x5e\xb1\x7b\x8b\xbd\x9b\x57\xdd\xee\x30\xbd\x87\xb0\x6f\x45\xad\x8a\xc3\xa7\x7e\x34\x79\x53\xdf\x86\x73\x9b\x65\x1f\x43\x92\x7a\xff\x09\x32\x68\x4b\x46\x48\xa0\x7c\x47\xb3\x2c\x2c\x41\x3d\x36\xb1\x12\xf9\x31\xe0\x14\x01\x6b\x2c\x6f\x60\x22\x00\xc0\x1a\x22\x0c\x55\x46\x96\x75\x3a\xf5\x69\xaf\x3a\xde\xaf\x2e\xd5\xfa\x52\x8e\xfd\x6f\x7e\xb7\xa3\xaa\xb8\x55\x9d\x30\xb2\x74\x8d\x63\x7d\x06\xae\x3c\x55\xef\xab\x33\x5e\x9d\xe1\xd9\xa7\x39\xa6\x4c\x39\x1e\x54\x38\xe2\xd8\x66\x4c\x91\xc4\x81\x3c\xe2\x48\x4c\x81\xd8\x34\x5c\xd3\x44\x91\xe9\x69\x61\xec\xc9\x3e\xf2\x3c\xd7\x66\x29\x0b\x52\x3e\x97\xfc\x75\x65\xff\xba\xe1\xbf\x2c\x8e\x2a\x7d\x35\xa3\x15\x7f\x3e\x53\x5c\x64\x82\x45\xcf\xfc\xd6\xf2\x93\x41\x4d\x5e\x3e\xb2\xa7\x6d\xd9\x66\x35\xcf\xbc\x9e\xaf\xf7\xc6\x17\x32\x33\x1e\x3c\xb8\x79\x6b\xfc\xc3\x0a\xee\xb8\xd8\xe9\xee\x6d\x0f\x1d\xbd\xff\x78\xfd\x36\x3b\x6f\xac\x6a\x7f\xa7\x67\x97\xee\x19\xe6\xa6\x5c\x03\xbe\xac\x7c\xe2\xca\x8a\x8e\xfd\xd7\xa7\x37\x7c\x29\x4c\x58\x47\x94\xdc\x24\xb0\x45\x9f\x42\x8c\xcf\x47\x6a\x48\x1b\x89\xe8\x61\x8d\x91\x3c\xfe\xff\xb1\xf6\x9e\xd1\x57\x13\xdb\xdf\x38\x4d\x3a\x28\x48\x6f\xd2\x04\xe9\x90\x4c\x12\x8a\x02\x52\xa4\x0b\x02\x0a\x08\x28\x93\xde\x93\x49\x99\x64\x02\x48\x13\x69\x02\x82\xa0\x54\x41\x8a\x58\x40\xba\x20\x88\xf4\x22\x45\x7a\x93\x2e\x20\xd2\x94\x5e\x04\xe4\xbf\xee\xff\x3e\xbf\xe7\x5e\x7e\x9c\xef\xf2\x59\xdf\x75\xde\x9f\x17\x73\x32\x7b\xf6\xec\xd9\xfb\x53\x18\x28\x9b\x04\x2a\x62\x0c\x12\xd5\xf3\x79\xc5\x4b\x85\x43\xfe\x2c\xf7\xe3\xf1\x75\xde\x80\x73\xfd\xdf\xc6\x57\xf0\x73\x8e\xdc\x37\x64\xec\x2f\xf9\xab\xbc\xb0\xa6\x35\x55\x64\xef\xd1\x26\xdd\x6f\x34\x4b\x33\xd0\x2e\xb4\x35\x91\x0d\xa9\xd8\xd5\x7c\xcb\x88\x79\x1a\x03\xe5\x5f\xf7\x81\x4e\x27\xa1\x2f\x1b\xba\xc7\x29\x98\x8e\xa0\xe6\x5b\x0c\xe0\x18\xcc\x25\x7a\x9c\x41\x4f\xbb\x45\xe5\x15\xa0\x4b\xff\xf3\x65\x8a\xc8\x45\xa8\xa6\xd6\x5c\x33\x3f\x33\x60\x57\xf3\x23\xd5\x97\x4a\xb8\xe6\x5b\xbf\x21\x30\xf3\x89\xf0\xab\x38\xa4\xe3\xa9\x87\x56\x48\x56\xb6\xdc\x37\xbd\xcd\xd8\x6e\x65\xeb\x7f\xb0\xac\x59\xf9\x86\x37\x4a\x4b\x5b\xfb\xb5\xee\x73\x7c\xa8\x98\xde\x3f\x19\xc4\x31\x74\x44\x19\xf8\x0c\x03\x58\x64\xe8\xa2\x6b\x3b\xaa\x41\xcb\x86\x27\x59\xc8\x22\x98\xa1\x6d\x2d\x84\x5a\x6c\x8a\xd8\x0d\x25\x42\x12\x3f\x03\x7a\x7f\xfe\xf1\xeb\x85\x9e\x0f\xfe\xda\x63\x2e\x3e\x97\xe5\xb7\xa2\x4b\xfa\xf6\x7c\xbe\xef\x9d\xa2\xf7\x66\x5d\xd8\xb9\x7a\xd3\xf5\x72\xbd\xea\x67\x1e\x23\x9e\xda\x73\x13\xdb\xaa\x8a\x49\xc8\x58\x96\xa6\x69\x18\x46\xbe\xcb\xd9\x09\x83\x24\x8b\x53\x78\x96\xf3\x5d\x8e\xb6\x10\xe1\x4c\x26\x56\x3c\x35\x8e\x20\xd1\xed\xd4\x80\x6b\x5a\xae\xbb\x7a\xf4\xfa\x71\x87\x1c\x29\xef\xd5\x55\x61\xcb\x30\xdf\x5f\x0b\x8e\xf0\xa4\x90\x31\x73\x50\xe3\x2f\x2e\x48\x75\xd3\x3b\xad\x84\x02\x76\x3d\x20\xd9\x4c\xc0\x70\x5a\x4c\x7c\x92\xf0\x0c\x2f\x10\xf2\xaf\xdb\xdb\x14\x48\x12\xd2\x1e\x32\x90\x48\x79\x0a\x8d\x0d\x5b\x14\x08\xc5\xa7\x00\x23\xec\x6f\xf2\x8a\x5e\xe3\xd5\x6d\xed\xb6\x77\xc8\x3a\xa2\xe4\xd4\x2d\x03\xbd\x06\xfb\xff\xac\x53\xb7\x4f\xeb\xa8\xd7\x8f\x39\x36\x67\xa9\xd6\x3f\xcd\x62\x57\xb4\xc3\x88\xaa\xe5\x08\xb1\xe7\x69\xa1\x14\x25\x86\xc2\x22\xac\x19\x42\x10\x18\x11\x1b\x5b\x44\x25\x3e\xb1\x34\xd9\xf2\x24\xec\xe9\xd8\xc6\x7e\x0a\x7e\xd5\x1f\x0b\x6f\x74\x8f\x2a\xc5\x24\x9a\x5c\xb5\xd5\x30\xdd\xad\xeb\x95\xcd\x59\xed\xe5\xe1\x4a\x9d\x49\x05\xb6\xf0\x75\xf7\xbf\x91\x3d\xdd\x9a\xe2\x81\xa0\xd8\x8e\x2d\xc6\x88\xa6\x6c\x1a\x48\x7c\x68\x08\xb1\xc8\x4a\x3a\xf0\x0d\x3f\x4a\x30\x8b\x0c\xd9\x15\x19\xd5\x0e\x34\xd6\x23\x1e\x27\xd8\xa9\x67\xc2\x4d\x97\x54\x73\xbf\xf8\x36\xe7\xd1\x8d\xfa\xd1\x81\x77\xd6\x1f\xa2\xcc\xea\x71\xa7\xb7\xe7\x7c\x3a\x6f\x4c\xce\xf7\xea\x1c\x12\x2b\xa5\x59\x3e\x58\x62\x90\x14\x22\x42\x3c\x17\x42\x83\x49\x04\x91\xb3\x1c\x87\xf2\x21\x72\x19\x3b\x04\x14\x17\x28\x8c\x24\xd1\xe1\xff\x7f\x0f\x28\x2c\xe0\x4c\x12\x3d\xfd\x4e\x77\x36\x1c\x3b\x51\x38\xf7\x17\x3f\x1e\x5a\x7f\xa4\xf9\xc2\x42\xb9\x99\x9c\x5f\x9d\xfd\xed\xa8\x99\xbb\x47\x54\x6f\x46\xee\x21\xdd\x9b\xa6\xd7\x8c\x15\x92\xc0\x51\x44\x1e\x42\x53\x94\x14\x2a\x91\x59\x64\x2b\x3c\xe1\x71\x2c\x70\x8c\x9c\x04\x48\x11\x59\x68\x41\x51\x88\x05\x02\x95\x44\x93\x19\x20\xf8\xa9\xc7\x17\xbc\xba\xbc\xc0\x86\x86\x0d\x96\xd4\x2a\x35\xc0\xed\x3d\x7b\xdd\x6f\xb8\xf1\xed\x8e\xee\xb1\xd7\x7b\x0f\x2e\x9f\xf7\xb5\x41\x3b\x0b\xde\x48\x6f\xa9\xa0\xf9\x06\x64\x34\xec\x68\x52\x24\x86\x40\x12\xa0\x01\x02\xdd\x96\xa0\x12\x40\x8c\xad\x38\x31\x48\x88\xa1\x21\xa0\x38\x92\x0c\x45\x05\x96\x46\xa7\x30\xa4\xbb\xd6\x73\xc7\xaf\x05\xec\x0a\xf7\x96\xdc\x2f\xf2\x7b\x8f\xaf\xa6\x7f\xfe\xc3\xe1\xd6\xb5\x4f\x0c\x2f\xb3\x26\xcb\xcc\xd9\x95\xf7\x16\xfa\x3b\xbd\x24\x2f\x5e\x57\xfd\x80\xa6\xf5\x20\xd0\x18\x21\x60\x62\xde\xb3\x02\x8d\xb7\x3d\x47\xa4\x7c\xec\x50\xb6\x4d\xfb\x80\xf6\x90\xc6\x30\xac\x6d\xa9\x49\xc4\x53\x06\x9b\x1a\x04\xf9\xda\xb1\xdc\xd3\xf8\x39\xe3\x8b\x76\x13\xd6\xbd\xdc\xf5\x31\xd7\x88\xe9\x7a\x31\xdc\xb7\xf5\xc1\xeb\x17\x0b\x8f\x59\xd3\x49\x59\x3e\x36\xbd\x01\x12\x79\xbc\xae\xf9\x8e\xc5\x08\xa6\xef\xf9\x42\x10\xfa\x1e\x89\x14\x04\x24\xda\xc7\x2a\x03\x79\x89\x63\x04\xc1\x14\xe8\x28\x86\x21\x8f\x90\x67\xf3\xe4\xe9\x6b\x7f\x52\xcf\xca\xc5\xcf\x64\xdb\xba\xc3\x73\xde\xf6\x3a\x7c\x52\xb3\x1f\x53\xa9\xe2\xe8\xd3\x23\xef\x16\xeb\x5a\xbb\x4e\x9f\xa3\x45\xba\x66\x1e\x7d\x95\x81\xa8\xad\x03\x4c\x35\x88\x80\xeb\x09\x94\x63\xc4\xae\x9f\xd8\xa6\x1c\x45\x76\x62\x58\x14\xc5\xd1\x44\x72\x38\xcc\x53\x50\x55\x1c\x41\x71\x99\x38\xd0\xcc\xa7\x13\xde\xed\x5c\xd5\x6b\x2f\xbf\x57\x32\xf7\x81\xfe\xfb\x72\x8c\xd8\x7d\xaa\xfd\x8c\x29\x35\x0a\x0f\x78\xd4\x2c\x5f\x6f\x63\x75\xf6\xa1\xdf\x34\x28\x98\xe6\xf9\x89\xc6\x07\x7a\x08\xa1\x1a\x63\x59\x24\x01\x27\xd3\x44\xf4\x28\x85\x97\xbc\x04\xab\x26\xb6\xf9\x20\x41\x31\xcb\x27\x80\xd8\x48\x02\x49\x28\xfb\x19\xb4\xcb\x3a\x78\x5d\x86\x1c\x29\x3f\x84\x1d\x56\x7b\xe1\x73\xfd\xe4\xd6\x9f\x74\x19\x57\xe9\xde\x4f\x23\x16\x17\x79\xa6\xce\xa0\x9b\x95\x96\x96\x63\xd3\x5b\x7b\xb8\x09\xeb\xe2\x98\xd7\x83\x48\x12\xb5\x20\x34\x24\x28\x39\x31\xcb\x9a\x9e\x08\xa4\x7f\x3d\x2e\x62\x4e\x75\x10\xab\x3a\x62\x60\x2a\x91\xef\x1b\xac\x20\xa6\xae\x3d\xf6\xd6\x5f\xfe\xf9\x98\x6b\xbb\x6b\x2d\x7b\xfd\x72\x27\x6a\x7f\xc1\xe3\x79\xf7\xce\x73\xc6\x56\xb7\x5e\xcb\x37\x32\x58\xec\x67\xdd\x7e\x2c\xbd\x31\x6d\x40\x62\x07\x36\x17\x6b\xbe\x2f\xd8\x08\x02\x0c\x98\x28\x09\x1d\x4e\x41\xb1\xe5\x50\x7e\x40\x89\xb4\xc8\xd3\x86\x49\x34\x45\xf3\x64\x25\xf6\x9e\x34\x67\xfe\x4f\xd2\x2b\xb5\xfd\xab\x6a\xdf\x2e\x68\xd9\xf9\x08\xfd\xd6\xac\xa5\xdb\x9f\x5f\xdd\x77\x59\x85\x62\xab\x27\x15\x6d\xbe\x25\x6f\xf2\xd6\xb9\xb1\xf5\x33\x0f\x84\x49\x3d\xd8\xb7\x01\x6f\x98\xa1\x6d\xf8\x11\x1d\xd1\x3c\xc7\xd1\x12\xe4\x38\x8f\x06\xc8\x43\x1a\xf2\x19\x89\x40\x85\x93\x7c\xd3\x89\x2d\x4a\xc0\x7c\xcc\xf3\xf0\xe9\xb8\xbe\xfc\x45\xd9\x12\xef\x76\xef\xf7\xde\xc9\xed\x7d\x73\x6d\xfd\xb0\xc1\x5b\xb0\x63\x83\x06\x77\xde\x5c\x72\x77\xfc\xde\x2f\x0e\x44\x1f\x14\xfa\x39\xbd\x71\x6d\x71\x3a\xa7\x25\x16\x27\x29\x8a\x92\x50\xd8\x8f\x02\x3a\x92\x80\xe1\x04\xb1\xe6\x82\x98\x13\x59\xa4\x23\xda\x90\xdd\x50\xc3\x10\x5b\x71\xfc\x7f\xaa\xbc\x14\xde\xbf\xf7\xde\x1f\xbb\x1d\x1d\xff\x64\xf5\xa3\xe5\xc7\xe1\xdc\x0a\x0b\xdf\x9a\xf1\x0e\x35\xbc\xcb\xa8\x36\xcf\x3d\xea\xcc\x5e\xbe\x34\xf9\x50\x9a\x87\x38\xa2\x17\x27\x11\x11\x0d\xc3\x42\xc8\x06\x3e\xaf\xe8\x24\xb1\x75\x93\x42\x92\xa5\x24\x4e\x62\x47\x11\x6b\xf9\x4a\xa2\x42\xce\x16\x51\xcc\x99\x34\x9f\x1a\x29\x35\xb6\x6e\x0f\xf3\x9b\x1e\xcd\x6a\xcc\x68\xc7\xe7\x1e\x51\xa6\xf9\x57\x5b\x3b\xac\xb8\xfc\xca\xb5\xf3\xfc\x07\x1d\x5a\x9d\x2f\xd4\x22\xc8\xbc\x40\x59\x6a\x43\x3f\x8a\x35\x4d\x87\x23\xb2\x8b\x38\x14\xe3\x90\x4b\x62\x41\x37\x91\x8e\x2c\xda\xa4\x14\xcb\x24\x14\xe2\x29\xdb\xb6\xb1\x87\x63\x09\x33\x8e\xec\xc7\x4f\xdf\x8a\xb3\xb7\x2d\xec\x74\xb7\x7f\xf6\x4e\x4b\x87\x0f\x42\xe0\xc0\xfa\x7b\xdf\x76\x68\x40\x5f\xef\xf7\xd5\xfe\xe9\x1b\xce\x79\x3b\x0f\xf7\x4d\xf3\x33\x80\x11\x21\xc4\x8a\xc4\xba\xac\x2c\x7b\x34\xcb\x9b\x5a\x8c\x55\x35\x30\x42\x91\x67\x60\x2c\xd0\x01\x10\x1d\x3a\xb6\xcd\x98\xb7\x29\xd9\x66\x18\x5b\x0f\x9f\x8e\xe9\x1b\xb9\x4a\x74\x83\x5a\xbe\xf7\xe7\xdd\xa2\x0f\x7e\xd6\xa8\x63\xdd\x64\xdd\xe7\x2d\xf2\xd4\xdd\x30\xb2\x8a\xbf\xf2\xad\x12\xc9\xea\x34\x73\x46\x14\xa0\xba\x7c\x1c\x88\x22\x63\x2a\x88\x11\x7d\x33\x26\x18\x13\x33\xf1\x44\xc0\x23\x51\x11\x90\xa3\xa0\x98\x38\xa2\xc8\x73\x0e\x0a\x55\x4a\x17\x84\xd4\xdd\x95\x0a\x39\xfa\x7c\x5b\x6b\x60\x0f\xf6\xcd\xfe\x7c\xc3\x3f\x7f\x7e\xf3\xd7\x31\x67\x1a\x36\xca\xd6\x76\xd7\x1f\xc9\x9f\x57\xdf\x9c\x34\x7e\xc2\xc7\x69\x0e\x0e\xd1\xe4\xd9\x90\x0a\x4c\xde\x15\x5d\x83\x0a\x5d\x9b\xe2\x91\x29\xeb\x1a\xc7\x40\x8a\x41\x72\x80\xbc\x50\x37\x14\xce\x46\x51\x62\x7a\xac\xcb\x9a\x4a\xea\xa3\x38\xcc\xbd\xde\x5a\xf7\x66\x0e\x6c\xff\x7e\x9d\x11\x93\xda\x93\x4f\xf3\xd6\xeb\x5d\xff\x99\x09\x95\xb6\x89\x73\x47\xae\x99\x68\xbd\x93\x66\xd5\x6a\x56\x36\x22\x51\x93\x69\xa8\x52\x21\xeb\x32\x22\xc5\xc9\x9a\xa8\xb0\x94\xee\x1b\xaa\xe3\x06\x01\x44\x14\x1d\x39\x4c\xe2\x86\x28\x56\x74\xca\x8f\xf8\x24\xf5\x53\xa0\x40\x53\x71\x4a\x27\x26\x1c\xd5\xb6\xeb\xfd\xca\x05\x3e\xa3\x76\xd4\x3e\x3d\xfb\x52\xb5\x62\x07\x37\xb5\x6c\x25\x6e\xfa\x70\xf6\xfd\x4f\xd2\x8c\xb5\x64\x58\xc7\x34\xc3\x04\x7b\x89\xed\xc8\xb4\x1e\x01\x2f\xc1\xc4\xc0\x34\x89\xb5\x44\x66\xb8\xc0\xb7\x7c\x4d\xb6\x68\x64\xc2\x58\x53\x45\x9f\x18\xce\xd3\x65\x53\xc5\x97\xe7\xee\x98\x5f\xf1\xcf\x05\xbd\x26\x5d\x3b\xda\x61\xd0\x8a\x0d\xe3\xeb\x8f\x5a\x3b\x69\xc4\xf3\xf7\x97\x9f\x3a\x93\xfd\xaf\xbe\x2d\x17\xa4\xb7\x40\x0d\x42\x3a\xe1\x45\x51\x77\x91\x80\x6d\x96\x8e\x34\x68\xb2\x30\x09\x23\x68\x72\x0c\x2d\x80\xc8\x16\x65\xc7\xd4\x12\xcb\x94\x49\x68\x71\x88\x33\x08\x93\x01\x02\x7c\x95\x76\xb5\x69\x97\xe5\xe6\xad\x8e\xad\xf6\xd5\xc8\x51\xe1\x62\xb6\xcf\xb3\xe6\x93\x66\xe7\xcf\x51\xb3\xe2\xbd\xa9\xa3\xc9\xbb\xdb\xd8\x27\xf6\xc5\x5b\x5d\xab\x5a\x1f\xd8\x7a\x18\x4b\x9f\x5a\xdc\x3f\x3a\x31\x64\xe9\x1b\x0f\xa6\x97\xf9\xb6\x91\xbd\xe3\x7c\xad\x86\x3f\x0f\x98\x94\x79\xf6\x71\x6a\x4c\x9f\x8d\x22\x49\xa3\xad\xc8\x45\xb1\xc3\xc5\x5e\x80\x05\x21\xa4\xcc\xd8\xb7\x3d\x1c\xb1\x3a\x36\x5c\x42\x54\xda\xd0\x05\x4c\x22\x3b\x90\x35\x45\x00\x4f\xef\xcb\xb6\xdb\xf0\x40\xeb\x55\xe3\xca\xb7\xfd\xe5\xb5\xaf\x1f\x74\x5e\x38\x7f\xd6\xe0\xca\x75\x1a\x0d\xeb\xfb\x9d\x31\xe7\x13\xbe\x50\x8e\x93\x99\x6f\xf0\xa4\xbc\xf6\x65\x4d\x88\x63\x4d\xa4\xf5\xc0\xc0\x30\x8c\x02\x44\x4c\x01\xaa\x9c\xa2\xf9\x01\xa4\x6c\x51\x77\x83\x30\x91\x22\xc6\xf1\x54\x68\x0b\x9c\x2d\x62\xd1\x4a\x9d\x6f\xae\x93\x01\x13\x1f\x74\xd8\xe5\xad\xaf\xd5\xb0\xfe\x80\x19\xd5\x2f\x67\xdf\xb6\xa2\xd0\x0f\xe6\x59\xe3\xc2\xab\x8b\xb6\xed\x7b\x38\x2c\x67\x9a\x19\xf5\x30\x62\x40\x20\xaa\x8e\x16\x8b\xaa\x20\x3a\xa2\x87\xb8\xc8\x74\x54\x05\x21\x86\xa5\x64\xd6\x17\xa1\xc3\x26\x8e\xa2\x83\x28\x91\x05\x81\x53\x7c\x39\xf5\xb2\xd7\x65\x9f\x7a\xfc\xee\xe7\xe7\xd8\x25\x87\xc8\x96\x29\x2d\xb3\x16\xd9\x72\xed\x86\xad\x53\xc5\x5e\x43\x9d\x2f\x3c\x5c\xdf\xb2\x46\xe6\xf3\x4d\xca\x00\x31\xa2\xd0\x10\x88\x15\xda\xa1\x66\x8a\xa1\x9c\xd0\x14\xa2\x09\x6b\x07\xd0\x37\x01\x1f\xe0\x98\x0b\x28\xdb\xd6\x7d\x56\xe0\x3c\x41\xb0\x0d\xda\x79\x02\xf4\xf9\xdf\xa7\x60\x84\xf7\xd7\xd0\x21\x79\xcc\x37\xea\x7e\x54\xa0\xef\xe8\x02\xd7\xf6\xe5\x39\xd4\x66\x29\xad\xb4\xf8\xb9\x55\x30\x6a\xb9\x3b\xa1\xf3\x93\x7f\xf2\xef\x09\xee\x81\x15\xd7\x76\xb7\xe1\x1e\xbf\x7d\x67\xca\xde\x86\x3d\xfb\x94\xd9\x7e\xb8\xe0\x99\x2e\x47\x1a\xf5\xfc\xf8\xa3\x29\xbb\x3a\x67\x5e\x48\x3c\xe5\xde\xf0\xa2\xc4\x59\x9e\x64\xca\x02\xd0\x89\x17\xdb\x31\xc5\xe9\xbe\x2b\x00\x8a\xf2\x83\xc8\x75\x2c\x04\x19\x22\x05\xb2\x27\x5b\x54\x22\x4b\x4a\x98\x10\x3d\x75\x52\x2d\x96\xb7\x68\xb7\xd5\xb7\xc7\x0a\xb7\xab\x49\x97\x3a\x3c\xaa\xb5\xf2\x52\xbf\x2d\xdd\x3f\x1b\x95\x3d\xdf\xb1\x66\xcb\x1e\x17\xaa\xd3\xef\x64\x7a\xf7\x46\x8e\x0c\x64\x44\x74\x10\x8b\x31\xa5\x21\x89\x91\xb1\xc2\x08\x0a\x0b\x21\x00\x1a\x44\x21\x8f\x04\x03\x9a\x89\xa6\x61\xc1\xe7\x78\x57\x08\xa0\x90\x02\x73\xff\x7d\xa1\xe7\xda\xfd\x70\xa1\x7d\xf7\x95\x1f\x65\xbd\xd7\xe8\x72\xd9\x82\x0d\x66\xec\x0b\xa6\x5e\x30\xa6\x8c\x28\xb1\x53\x1f\xfb\x6b\xa3\xcc\x8b\x8e\xa4\x86\x6a\xd9\x42\xac\x98\x14\xd4\x2c\x21\x0a\x2d\x2e\xe2\x6d\x3f\xe4\xcc\x44\xa3\x5d\x82\x82\x50\x40\x7a\x14\x46\xae\xe5\x84\x62\x48\xc5\x38\xa1\x62\x49\x37\x52\x57\x92\x95\x7b\xcc\xfe\xed\x8b\x77\x37\x14\x2b\x5d\xe5\xaf\xbf\xd7\x81\xf1\x0f\xdf\x5d\xf4\x79\x8b\xee\x2b\x6b\x96\xab\xd1\xb8\xd5\xc2\x0f\xb7\x95\x49\x73\xb1\x60\x63\xc1\x75\x54\x4b\x76\x68\x91\x67\x35\x26\x84\x1a\xc5\xc8\x88\x95\x79\xdf\x55\x4c\xd7\xd2\x54\xc1\xe4\x1c\x56\xc6\xa6\x23\x53\x82\xee\x3a\x91\xa1\x3d\x5d\x49\xd6\x7b\xf7\xf5\xbc\x55\x6a\x28\x1d\x6b\x66\xc9\xb6\xe1\xca\x88\x3f\xcc\x6d\x89\x88\x9b\x84\x7c\xab\xd9\x97\x5f\x2a\xb3\xbf\x76\xd9\x34\x63\xee\x15\x4f\x54\x79\xdb\x08\x28\x28\x59\x71\x6c\x59\x40\x14\x65\xc1\x4b\x80\x69\x00\x2f\x42\x92\x22\x13\xe8\xba\x44\xd6\x90\x45\xab\x0e\x4d\xc9\x31\x4a\xa1\x83\xfc\xdd\x96\x7e\xad\xef\x76\x5b\xf6\x36\x58\x35\x64\x72\x8d\x23\x2b\xd7\x9c\x3d\x7c\xf0\x7a\xd3\x7c\x06\xfb\x56\xcf\x01\xd5\xf8\xa3\x93\xd2\xec\x28\xa5\x09\x44\xf0\x69\x0d\x5a\x9c\x2c\xab\x3a\xcf\xd0\x8e\x1a\x05\x4e\xc0\x2b\x9e\xc0\xeb\x2c\x88\x29\xc3\x97\x75\x8a\x45\x84\x60\x3d\x76\x7d\x9f\xa7\x9c\xd4\x29\xf2\xe2\x86\x51\xe5\x1e\x36\xdf\x76\xaa\xd9\xd4\xcd\xda\xcb\x6d\x3a\xaf\xe4\x1f\xe7\x6e\xf2\x65\x99\x13\x79\xee\x65\xbf\x54\xba\xe0\xa9\xeb\x99\x47\x6a\xa7\x36\xe1\xc6\x89\x45\x33\x9c\x00\x15\x2e\xe6\x02\x46\x8b\x1c\xcd\x62\x03\x48\xa9\x26\x10\x04\x0d\xe8\x8c\x9e\x38\x90\xc5\x91\x1c\x0b\x26\x13\x84\xb1\x49\xe4\xd4\xaf\xfe\xc5\x7b\x8a\x2d\x19\x08\xca\xcd\xed\x03\xfe\xdc\x96\x2c\xfa\x20\xef\xc4\x6b\xdf\x66\x1b\x58\x6a\xed\x86\xaa\x53\xf3\x59\xc9\xb0\x0e\x99\x9f\x8a\xa6\x5c\x76\xa4\xf9\x9c\xeb\x98\xac\xed\x6a\x91\xc2\x28\x22\xad\xe8\x11\x52\xac\xd8\xf3\xc4\x08\x43\x4e\x0c\x3c\x35\x4e\x4c\x35\x12\x54\x53\xd4\x22\x26\xb1\x8d\x0c\x44\xcc\x99\xd3\xe3\x0a\x8e\x5d\x90\xfb\x78\xf5\xb1\xd2\x9d\x9a\xcd\xf5\x79\x8b\x73\xf5\x9e\x51\xea\xea\xc3\xea\x3c\x2f\xbd\x4c\x6d\xe9\xd7\x27\xcd\xac\x4d\xd5\x0c\x35\x45\x37\xfd\xc8\xf0\x81\x82\xbc\xc0\xe4\x9c\xd0\x88\xd5\x40\xd0\x48\x42\x87\x91\xe0\xf8\xa6\xaf\x32\x0c\x63\x82\x80\x51\x23\x24\x1a\x46\xea\x66\x45\xe9\x73\x37\x37\x8d\xf8\xf5\xee\xf2\x1f\xbe\xdc\x4d\x55\xac\x54\xad\xeb\xfc\x3b\xb9\xd6\xed\x0f\x9b\x9c\x3a\x93\x2f\xeb\xe6\x2f\x97\x2c\x98\x9c\x66\xed\xf5\xd0\xe4\xe9\xc8\x31\x23\x8a\x36\xe2\xc4\xf0\x45\xcb\x4d\x80\x1b\xd1\x0e\x00\xb1\xe4\xc8\xa6\x22\xa9\x91\x62\xc1\x00\x20\x6c\x46\x98\xe2\xf4\x24\x85\xb1\x70\xbb\x19\x03\x57\x8e\x5d\x51\xf8\xe6\x94\x64\x76\xe3\x37\xef\xd7\xf9\x71\x61\xaf\xce\x63\xaa\xcc\xbf\x51\xfa\xc8\xd9\x25\x97\x0b\x1d\x9d\x96\x79\x81\x8b\xd4\x68\xe0\x18\xb8\x3a\xa2\x10\x36\x00\x47\xcb\x1c\xab\x43\x40\xa0\xef\x62\x5b\x0a\x94\x28\xf6\x0d\xa8\x0a\x9c\x6b\xc7\xb6\xec\xd2\x32\x67\x31\x89\xff\x6f\x31\x80\xa7\x99\xc8\xed\xbf\x98\xb6\x76\x66\xa7\x4d\xda\x8e\x77\x8a\xd4\xee\x5a\x91\xba\x32\x71\x58\x83\x45\x85\x76\x27\x3b\x2e\x7f\xd7\xf1\xf9\x23\x79\xab\x64\x1e\xb3\x96\xf2\x32\x37\x04\x21\xc1\x86\x23\x41\x0e\xaa\xbe\x6f\x1a\x7a\x2c\xf0\xb6\xe9\xb9\x92\x6b\x1a\x81\x13\x23\x8f\xc7\x08\x38\x9a\x66\x38\x49\xec\x32\x56\xec\x05\xd6\xd3\x4f\xe8\x39\x5b\x8f\x6d\x99\x50\xfb\xf5\x7a\xdb\xb2\x7e\xb7\xf1\x64\xd3\x49\x44\xd5\x9a\x64\x1d\x74\x7d\xc0\xd8\x25\xc7\x3b\x5e\x9d\x9f\x6b\xc4\xd6\xf4\x1e\x45\x96\x33\x69\x06\x79\xc8\x15\x89\x0e\x11\x0a\x04\x12\x2b\xa2\xcb\x71\xae\xa8\x0b\x8e\x20\x40\x2c\x93\xd8\xe6\xa2\x48\xb7\x09\x01\x2a\xe6\x6c\x0d\x67\xf9\xdf\x2e\x33\xff\x34\x92\x1d\xdc\x62\x70\x8b\x2c\xcf\x3d\xc9\x1f\x8a\x47\x2d\x7f\xb8\xf4\xce\x9e\x8d\x66\x9b\x81\xe5\xe7\x17\x3c\x3c\xfe\x46\xb3\xc3\x5f\x8f\xf9\xda\x6a\xd7\x68\x57\xee\x1e\x5f\xd4\x7a\x2f\xf3\xc4\xe5\x94\xf1\xa4\xea\x50\x62\x13\x39\x34\x7c\xc9\xb4\x50\xc0\x29\xa2\x11\x87\x98\x83\xbc\x89\x29\x2f\xa2\x69\x06\x38\xb1\x4c\x73\x8a\x65\x10\x2d\x96\xa9\xd0\x37\x84\xd4\x2f\xee\xcd\xc5\xaf\xdf\xdc\xbf\xb0\x52\xaf\xb3\x87\x7f\x2f\x7e\x7e\xf1\xb4\xdf\x8b\x7c\x7f\x24\x6b\xee\xa2\x54\xb7\xbe\x3b\x5f\xfc\xb2\xf2\x9c\xec\x99\x1f\x09\xa5\x5c\xb6\x15\xc4\x81\xa2\x24\x80\xd6\x6d\xdf\xf1\x55\x37\x61\x58\x93\x0b\x39\x86\xe1\x42\x8f\x17\x75\x97\x76\x1c\xd6\xe2\xa1\xa2\x59\x84\x8a\x5c\xda\x42\xbc\x95\x7a\xd9\xf3\x5b\x2c\xbe\x53\xe7\xb3\xa3\x1b\xde\xdc\x76\xb5\x5b\xb1\x3d\x13\x72\x95\x18\x57\xe0\xd5\x9d\x0f\xfa\x9f\xff\xee\xed\x86\x57\x7b\x3d\x1e\x9b\x79\x1b\xfd\x94\xcb\x16\xe3\x98\xa3\x11\xb2\x21\x32\x7d\x59\xe7\x15\x9a\xb7\xa0\x63\x8a\x1e\x01\x0c\xeb\x68\x7e\xa4\xdb\x34\x50\x01\xb1\x24\x03\xd9\x2c\x07\x35\xe0\x39\xa9\x97\xdd\xa4\xe9\x9c\x6b\xcf\x94\x19\x74\x67\x7e\xaf\x1c\x53\xf3\xff\xba\x67\xe7\x7b\x3d\x3e\x69\xc5\xd7\xdb\xf4\xe7\xc1\x47\xa5\xaa\x9e\x1d\xf5\x5b\xe6\x09\x1f\xa9\x91\x5f\xb4\xca\x88\x40\xa3\x20\x32\x24\x1d\x46\xb4\xa4\x19\x2a\xab\xa2\x18\xaa\x9c\xcf\x30\x9c\x2e\x41\xd9\x0e\x74\x2b\xf1\x03\x4a\x09\x13\x81\x83\xff\xb6\x1c\x7d\xba\x06\x18\x3d\xa1\xdd\xa5\xb7\xfb\x74\xaa\xf1\xea\xe4\x6f\xb3\xac\x7f\x8e\xbc\xdd\xec\xd9\x96\xed\xc6\x3e\xb7\xe3\xe2\xe5\xaf\xc6\x7f\xfa\x77\x2d\x37\xcd\xf2\xa8\xa2\xc1\xb9\x0a\x0f\x18\xd9\x86\x40\xa0\x79\x95\x97\x13\xe4\x62\xd7\x76\x20\x0d\x64\x6c\x7a\x98\xc3\x11\xcb\x60\x33\xb0\x02\x45\x4a\xec\x28\xf4\xff\x93\x2b\xff\xe7\x04\xff\x53\x9b\x60\x70\x8b\x16\xcf\x35\xcd\xfd\xe4\x09\x1e\xbf\xb7\x5e\x9f\x89\x45\x46\xa8\xef\x97\x8a\xfa\x8c\xda\x7a\x93\xeb\x57\xe0\x58\x3d\xe9\xd9\xb3\x07\x7f\xec\xfe\xe7\x8d\x77\xf8\xd7\x32\x9f\xa7\x52\x5b\xd9\xf1\x06\xd0\x15\x41\x27\xd0\x12\x68\xcc\x60\x24\x98\xbe\xeb\xb2\x6e\xc0\x30\xa2\x20\xeb\x26\xcd\xa9\xbc\x1a\xd1\xa6\xcf\xb8\xbe\x05\x55\x25\x84\x5a\xea\xcd\xb9\xf5\x47\xb7\xbc\x43\xf3\x94\xfd\xa4\xdb\xb4\x2e\x75\x7f\xa9\xb7\x7e\xa3\xd3\xad\xdf\xe0\x5f\xbe\x6f\xb6\x69\xfb\xc3\x19\xdd\xde\xee\xe7\xe2\xf4\x2e\x5b\x02\x82\xa8\x72\x46\x14\x87\x16\x76\x13\xc4\xe8\x2c\x47\x51\x31\x23\x60\xd9\xc4\x3a\xf2\x03\x37\xe0\x23\x97\x0d\x13\x24\x44\xa2\x0d\x54\x5d\x11\xa8\xd4\xcb\x9e\x7d\xa1\x75\xb7\xbe\x65\x46\xf6\x0c\x5f\x05\xb9\x4a\x0d\x72\xe6\x8d\x61\x93\x81\xbb\xf3\xad\xec\x09\x1e\x3c\x5b\xbb\x32\xd9\xbd\x32\xbd\x27\xd8\x75\x38\xa0\x53\x51\x24\x21\x47\x64\x3c\xde\xb6\xa9\x10\xb0\x9c\x02\x78\x3b\x66\x9c\x28\xe4\x5c\x92\x78\xd0\x36\x6d\x0f\x47\x54\xe0\x43\xc4\x88\x19\x0c\x0b\x1e\xcf\xba\x71\xb1\x46\x52\x4d\x9c\x57\xb0\xc0\xbc\xc6\x72\xb4\xa2\x40\xab\xe5\xbb\xf8\x83\x0b\x6f\xb5\x9a\x20\xd6\xeb\xf0\x69\x83\x7e\x69\x7e\x95\xba\x06\x81\x71\x12\x99\xb4\xab\x24\xc0\x4c\x70\x10\x20\x43\x66\x5c\xd3\xd2\x93\x84\x50\x0c\x23\x7a\x2a\xa1\x35\x2b\x0c\x65\x0f\xf9\xb6\x15\x7b\x19\x50\xb6\x4e\x69\x7f\x7f\x94\xb5\xc3\x91\xa0\x8a\x11\x34\xce\xfe\x7a\xef\x2a\xeb\x67\xed\xbf\xd9\xfa\xfb\x59\xdd\x9f\x5d\x55\xb3\x5e\xd9\x0b\xe7\xce\xa5\x19\xa1\xef\x0a\x8c\xca\xc5\x7a\x12\x2b\x24\x70\xe9\xc4\x82\x0a\xc5\x50\x96\x1a\xf9\x11\x0d\x18\xce\x61\x2d\xc3\xa4\x5c\x62\x71\x5a\x20\x85\xc8\xa5\x04\x2d\x79\x8a\x4e\xf7\x4f\x2d\x8e\xc1\xcd\xb3\xe7\xfc\x5f\x74\xba\x1f\xe3\xd1\x4d\x1a\x36\x6d\xfd\x53\xbf\x5b\x6b\xf3\xba\x27\x9a\xee\x2d\xd6\xae\x64\x85\x9c\xc5\x43\x7a\xd7\xfc\x89\x9f\x4e\x3d\x7f\xe4\x60\x7a\xb3\x2b\xf0\x75\x8a\xe5\x88\xcd\xc9\x9a\x03\x05\xa8\xcb\xb6\x1f\x26\x08\xda\x3c\x8e\x39\xd7\x13\x7c\x12\xb3\x81\xcc\xd9\x54\x6c\xeb\x89\x69\xc4\xbc\x16\x64\xe0\x34\xb3\x76\xca\x8a\x1a\xad\x9a\xee\xbc\xd8\x6b\xe6\xd4\xc9\xfd\xe7\xfe\x9a\x7b\xef\x94\x77\xe6\x5e\x3c\xdd\x76\xde\xdf\x1f\xd5\x69\x5f\x08\x71\x99\x1f\x31\xa4\x16\x1c\xe4\x90\x1f\x11\x1a\x85\x81\xc7\xa9\xa2\x15\xd0\x3c\x10\x0c\x27\x32\x24\x40\x44\xdd\xa3\x91\xe2\xab\x32\xe0\x62\x4a\x43\xb6\x20\xd1\x3e\xcb\x50\x4a\xea\x90\x0a\xfb\x1c\x9e\xfe\xf3\x40\x6e\xe6\xc4\xde\x37\x3f\x2b\xb0\xe7\xdc\xc8\xfb\x79\x2e\xc5\x57\xe7\x5d\xff\x24\x47\xf9\x8f\xb2\x6c\x5b\xf3\xf3\xdd\xf4\x7e\xed\x04\x07\xa2\xc6\x23\xc3\x87\x58\xb4\xbc\x48\x26\x9c\x0a\x63\xc9\x77\x44\x8a\x95\x35\x59\xe1\x55\xc2\xf0\x9c\x2b\x12\x8b\xb2\x04\x2a\xf6\x74\x01\x65\xd0\xa9\xfc\xaa\x90\xd2\xd0\x2c\xd7\xa9\xd7\x47\xf7\xca\xc9\xec\x9d\xd7\x8f\x5c\xfa\x70\xe1\x6b\xe0\xc6\xf2\xa6\xf4\x9f\xac\x7e\x11\x47\x99\xef\xd1\xa4\x5c\x76\xa4\x18\x1a\xcb\x43\xc3\xb0\x19\x9d\x0f\x64\xd1\x53\x65\xde\xd3\x63\xde\x65\x12\x31\x94\x13\xc6\x82\x06\xc2\xb2\x4f\x39\x1e\xa7\x18\x80\x42\xdc\x7f\x5d\xc1\x77\x9a\xff\x7b\xc5\x7d\x08\x39\xb8\xe6\xd1\xb5\xba\x3d\xea\x3f\xb3\xb8\x60\x99\x35\xad\x26\x6c\xde\xb2\xbc\x7f\xf7\xa5\x59\x86\xf6\xf7\x16\x46\xe8\xb7\x11\x83\x5b\x3c\xbe\xf3\xf8\xf1\xa4\x72\x4f\xbc\x13\x2a\x74\xc9\xf3\x4b\xdd\xa5\x3f\x07\x59\x46\x95\xf2\x67\x93\xd7\x06\x8e\xea\xf2\x32\xd3\xad\x59\x89\x12\xfa\xeb\x2d\xdb\xd7\xbf\x76\xa2\x50\x9a\xfb\xfb\x4c\xa0\x19\x62\x48\x11\xd1\x8f\x11\xeb\x6a\xb6\xa6\x85\x74\xa2\x7a\xaa\x49\x54\x46\x8a\x80\xc3\x3a\x38\x89\x24\x8a\x33\x11\x8a\xc2\x18\x07\xb4\xf5\x74\x4f\x67\xf3\x83\x56\xb7\x8a\x7e\xec\xee\xf9\xbd\xf8\xd0\xcd\x6d\xbf\xa9\x7f\x69\xbf\xba\xfa\xf6\x77\x9f\x79\xc7\x6e\xdd\xaa\xb2\xa3\x2b\xbe\x9f\x66\x00\xa7\x83\x40\x28\x28\x2a\x64\x78\xc5\x91\x24\xa8\x61\x83\x96\x04\xdf\x74\x45\xc4\xd1\xac\x67\x18\x88\x02\x81\x0c\x55\x9e\xe7\x44\x2a\x70\x64\x5b\xd5\x49\xea\xee\x59\x8f\x09\x7f\xd7\x7e\xfb\x6e\xbd\x9c\xa3\xe7\x4c\xb9\xb4\x36\xef\xaa\x3e\xa5\x6e\xe6\x39\x7e\xfb\xbc\x3b\xed\xad\xa3\x3f\x5b\x15\xc5\xcf\x33\xdf\x43\x4e\xad\x7f\xeb\xca\x31\x17\xf1\x92\x2c\x8b\x02\xe7\xfb\x1e\x65\x5b\x94\xe5\x24\x1e\x13\x12\x55\x92\x8d\xc4\x72\x18\x04\x61\x22\x24\xb6\xe7\xab\x1e\x17\x6b\xa6\xf0\xf4\x97\xfe\xbe\xea\x83\x49\xfb\x6a\x36\x1c\x9c\x6b\xc2\x48\x70\xe9\x91\xbf\xac\x8b\xb1\x6c\x60\x07\x7c\xeb\x8b\x4f\x0f\x66\x99\x32\xb3\x32\x9f\x66\xfe\x1f\xed\x29\x16\x05\x79\x8f\x56\xa5\x24\xb4\x1c\x9d\xd5\x0c\x8c\x5c\x29\x08\x0d\x51\xf6\x45\xc1\x47\x11\x13\xab\x96\xc2\xf9\x16\x60\x59\xcf\xd0\x38\x5e\x7d\xfa\x11\xb9\xb3\xd8\xa4\xc3\xd5\x5a\xee\xcf\x67\x14\xa0\x72\x8e\x6c\xd5\xb2\xc5\x3c\x74\xfc\xcc\xd1\xcf\x17\x9c\xfb\x71\xc5\xcc\xcb\x33\xea\x8f\x4b\xef\x3b\x05\xba\x12\xf6\x80\xa2\x2b\x92\x2e\x61\x44\x19\xbe\x12\x1b\xa2\xea\xc8\x44\x26\x1a\x2f\x8b\x4e\x12\xf9\x0c\x65\xeb\x3a\xe5\x06\x9a\xc8\xd8\x44\xd6\x21\x4c\x0d\xa8\x62\xcf\xfc\xbe\xe7\x0c\x7b\x7a\xcd\x27\x2f\xf8\x65\x06\x65\x5b\xda\x76\x17\xf3\xa9\x52\x8a\x3a\xb0\x31\xdb\xbc\x91\x5b\x27\x30\x8d\xd2\x6c\x17\x43\x39\xae\xcc\x9a\xba\xc9\x02\x11\xd2\xb2\x07\x85\x80\x75\x6d\x68\xf0\x26\xcb\x3b\xd8\xb6\x12\x4d\x04\x31\xe7\x50\x81\x83\x2c\x62\x1a\x0c\x15\xf2\xc9\xd3\x8d\x91\x86\x9d\xe6\x77\xbc\xec\xfd\x85\xcc\xf5\xcf\xc3\x9e\xc3\xa2\x62\x13\x7b\x94\xea\xbc\xf3\xc0\x4c\xad\xf2\xc9\x6f\x85\x69\xab\x0e\xbf\x90\xe6\x71\x81\xcd\xb1\x81\x97\x88\x96\x1f\xd0\x4a\x0c\x02\x12\x32\x5c\x24\xb2\x96\x12\x4a\x1e\x86\x24\xc6\x34\x15\xba\x76\x12\x53\x92\x19\x59\x58\xd4\xf9\x24\x85\x1b\x48\xf2\x4c\xde\xc9\xe7\xa6\xee\xa8\x72\x5a\xdf\x59\xa0\x92\x7c\x23\xac\x70\x75\xa8\x78\xba\x70\x49\xd6\x3d\x34\xe9\x99\xc5\xd6\xac\xcc\x8b\x05\xa4\x5c\x32\x07\x03\xd7\x65\x7d\x9b\xa8\xba\x41\xb1\x81\x19\xe3\x88\x41\x0c\x2f\x62\xd7\x82\x46\x2c\x9b\xb1\x2b\x87\x36\xa7\x25\x44\xa2\x54\x86\x4a\x1c\x57\x8b\x53\x4f\x38\x94\x3f\xaa\xaf\xf9\xfb\xcf\x72\xa8\xd4\x66\x23\x9e\xf3\x5c\xb9\x76\xcb\x73\xa3\xbb\x8b\x6b\x07\x35\xac\x8a\x1d\x3e\xb0\xaa\x75\x9a\x9e\xde\xab\x48\x89\x65\x8e\x66\x02\x53\xd0\x09\xc3\xa1\x10\x60\x84\x68\x83\x0e\x28\x2c\x79\x89\x2f\x89\x86\x47\x07\x94\x02\x44\x05\xf0\x66\x88\x22\x33\x66\xbd\x14\x5f\x7a\xe6\xdd\xe7\x8a\x1e\x6f\xdc\xa1\xd0\xfd\x02\xd7\x7f\xac\xdd\x62\x45\xf2\x52\x05\x65\x46\x29\x7a\xf4\xa4\x52\xc5\x67\x2d\x9c\xc9\xd7\xaa\x93\xde\x25\x33\x8e\x65\x1b\xbe\xe5\x51\xb2\x65\x2a\x49\xa8\x39\x3e\x96\xe3\x18\xc7\x6e\x10\xa2\x04\x28\x94\x65\x68\xc0\xe6\x41\x20\xb8\x7a\x84\x19\x20\x12\xf1\xbf\xe1\x10\xff\x3d\x30\xeb\x9e\x45\xbd\xde\xf2\x5a\xd7\x9f\x17\xee\x1c\xb2\xf5\xe7\x83\x4b\xab\xca\x1f\xbb\x6d\x5f\xa8\xdb\x66\x4c\xbe\xeb\x97\xed\x5f\xff\xbc\xb2\xfa\x89\x12\xe1\xd8\x9d\xfa\x95\x66\x3d\x6b\xed\x39\xd7\xed\xf6\xb8\x62\x7f\xcc\x58\xb2\xfc\xda\xf4\x3c\x2f\x5c\x6e\x3d\x6b\x63\xb3\x35\xf3\xf3\x4c\x7e\xee\x8d\xf4\x86\x93\x49\xe9\xae\x04\x34\x1c\x7b\x3e\x4e\x5c\xa8\x85\x96\x13\x90\x50\x97\x01\xb4\x58\x8a\x35\x6d\xd1\x76\xb1\x61\xda\xb6\x2d\x12\x0b\x0b\x0e\x88\x89\x95\x3a\x9c\x7a\x8f\xb8\xd7\x6a\xe2\x5b\x4d\x5e\xfd\xbe\xa1\xb2\x7b\xf3\xed\x4d\xd7\xdb\xbf\x33\xe7\x71\xa3\x97\xfb\x4d\x2e\xf6\xd9\xd1\x12\x8d\xbc\xf9\x99\x9f\x89\xa4\xdc\x1b\x35\x21\x91\xe7\x24\x96\x42\x05\xbe\x4c\x22\xc9\x61\xf4\xd8\x67\x58\x5b\xf0\xed\x48\xa7\x65\x28\xc9\xba\xc3\x78\x96\xcc\x9a\x0a\x4d\x34\xa2\x4a\x74\x0a\x71\xe4\x3d\xcf\x4c\xcd\x76\x3f\x6a\x3c\x6a\xcd\x2e\x65\xe6\xb5\x29\x7f\xdd\xba\xf6\xcd\xb4\x3c\x8b\x9e\xb9\x0f\x82\xbe\xb0\xed\xcc\x23\x3b\x9c\x34\xab\x0c\x53\x86\x6b\x53\x9e\x1b\xb0\x58\xa2\x0d\x33\x10\x80\xa8\x87\x9e\x62\x44\xd8\xe2\x24\x4b\x8f\x59\x1a\x50\xa2\x45\x94\x98\x77\x29\xcb\x8c\x25\x96\x64\x60\x7a\xff\xf2\x98\xde\x8d\x3e\x1a\x3e\x1f\x74\x9b\x79\xaa\x18\xa8\xb7\xa6\x69\xaf\x51\x65\x66\xae\x9a\x23\x7c\xa8\xfc\x71\xfc\x42\x9b\xa5\x27\x33\x8f\x84\x4c\x7d\xe5\x7b\x28\xb2\x84\x80\x25\xa6\x18\xd0\x74\x18\xc6\x0e\x89\x28\x41\x31\x1d\x89\xc3\xa1\xee\xd8\x4a\xac\xfa\xb2\x6c\x51\x86\x60\x78\xb4\xe3\xc9\xbe\xe8\x3c\x7d\xe5\x6b\xb9\x67\xce\x93\xbe\x99\xf1\x68\xda\xa8\xc7\x5c\xcb\xbd\xef\xb5\x9b\xdb\x79\x42\xeb\x23\xd3\x9f\xb9\xd0\x54\x2d\x37\xe9\x85\x65\x47\xbf\x4c\x6f\x3d\xe8\xf8\x2e\x88\x5c\xa0\x00\x56\x88\xc4\x28\x12\x15\xd5\x90\xc2\xc8\x10\x28\x20\x6b\xb1\x9c\x40\x55\xe5\x69\x23\xb0\x75\x23\xb2\x23\x49\x35\x14\x47\x13\x53\xb7\xbb\x0b\x5e\xeb\x6d\x95\xdd\x55\xf7\x95\xef\xdf\x2e\xfe\xdc\x98\xcd\x8f\x73\x8c\xfc\x23\xc7\xac\x2b\xdf\x8f\x7f\xbe\xdc\xc0\x6b\x53\x77\xae\x6b\x9d\x79\xf3\xd0\x0c\x8c\x79\x40\xa8\x11\x48\x41\x5f\x55\xff\x95\x08\x25\x03\x50\x40\x95\xe5\x90\xb2\x40\x1c\x73\xba\xa9\xb9\xa1\x16\x60\x9a\x09\x69\xe4\x23\xd1\x86\xff\xb6\xb3\x7c\xf2\x4b\x0f\xdf\xbe\xee\x52\xdb\x52\xdf\x94\x5a\x7d\x1d\x77\x79\x0b\x6e\xea\xba\x49\x68\x5a\xb2\xb4\xfa\xc6\xf5\x0e\x45\xcb\x6e\x1f\x5b\xa8\xcc\xd4\xf4\x2e\x59\x15\x98\x30\x20\x91\x45\x13\x00\x03\x8e\x0d\x02\x9d\x73\x49\x00\x13\x56\x54\x12\xa4\xb0\x1a\xe1\xd5\x28\x61\x15\xa0\xbb\x48\x67\x71\x6c\xd3\x81\x91\xfa\x4b\xdb\x93\x8b\x5e\x5f\x3e\xb9\xf1\xcf\xd9\xbe\x38\xd9\x68\xe7\x3b\xdf\xfe\x5d\xca\xdb\x72\x45\xbb\x54\x75\xa3\xd7\xb1\xe1\x57\xca\x91\x76\xbf\xa7\xb7\x52\xa1\x15\xde\x4c\x68\x87\xf8\x10\xc5\xae\x2e\x84\x34\x0a\x12\x51\xb6\x0c\xc1\x8c\xad\xd0\x63\x28\x35\xb1\x45\xd7\x08\x5c\x4b\x63\xe8\x80\x89\x6d\xf5\xbf\x9c\xf7\xff\xd3\x72\xc7\xe3\xa8\xca\xb7\xde\x38\x3b\xf4\x4c\x30\xa5\xe9\xcd\xbb\x43\x95\x9d\x23\x77\x94\xee\x54\xdc\xc8\xfa\xf0\x64\xbe\x9d\xe6\xb1\x6e\x69\x7e\x30\x58\xb6\x1a\xa8\xb6\x46\x63\x81\x85\x82\xce\xab\x76\x84\x1d\x19\xa9\x3e\x0b\x29\xce\x8b\x5c\xd3\x22\x8c\x1f\x39\x8e\x45\x73\xb6\xc7\x69\x8c\xe7\x7b\xa9\x87\x65\xcf\x56\x75\xde\x99\xfc\xd2\xb2\x7d\x6f\x1c\xfe\xa9\xf4\x9e\xeb\x57\x7f\x7b\xaf\xc2\xe7\x8b\x86\x94\x7e\x5c\x6d\x55\xe1\x07\xdd\x87\xd6\x80\x69\xee\x33\x26\x1a\x11\x75\x11\x98\xd8\xb0\x08\xe7\x8a\xa6\x4b\x1c\xac\xc1\xd8\x50\x94\x98\x67\x12\x1d\x39\xa1\x43\x4b\xa2\x17\x88\x96\xe6\xea\x9a\x1b\x23\x28\x3d\x9d\xa7\x7f\x9f\x30\xad\x7a\xce\xa6\x0b\x26\x3c\xba\xf5\x70\xf0\xd9\xa6\xcd\xb2\xbd\xb3\xee\xe4\xc7\x7d\xa3\x17\x1b\x8e\x5e\xba\x74\xed\x27\x15\xc6\x67\x9e\x55\x94\x1a\xb1\x9e\xa8\x41\x12\x72\xae\x2d\x31\x4e\xc8\xfa\x12\xa7\x8b\x6e\x4c\x1c\x20\x9b\xb6\x28\x0a\x14\x4c\x80\x1d\x11\x8d\xd3\x29\x9a\x86\x30\x09\x69\x8f\x50\x19\xa0\xc5\xec\x82\x3b\xba\xee\xaa\x35\x71\xcf\x94\x5a\x37\x97\xd6\x9b\xb1\xf5\xd3\x64\x71\xfd\xfe\x9d\x3e\x79\xb8\xee\x8d\xf7\x4f\xe6\xbd\xbe\xb9\xfa\xa5\x27\xf6\xa5\xdf\xb2\x93\x8d\x3e\x2d\x5b\xeb\xa7\xfc\xd9\x5f\x5d\xb3\x65\xb6\xbf\x7a\xc4\xd8\x59\x65\x5b\x4a\x7a\x77\x31\xec\x33\x2f\x4b\xae\x71\x99\x77\x50\x48\xb9\x2f\x54\x24\x0a\x94\xc3\xd1\x09\x2f\x9a\xc0\xe3\x3d\x5b\x14\x51\x24\x8a\x72\x48\xab\x6e\x1c\xd8\x91\x61\x46\x66\x14\xab\x5e\x60\x2a\x2e\xa5\xd2\x41\x64\xa6\xb8\x3f\xf7\x76\x7f\xf7\xd6\x8a\xf9\x9b\x5a\xad\x3e\xdc\xf0\x68\xe5\x73\xf9\x68\xfe\x8f\x8d\xf2\xba\x72\x73\x07\x7d\xdf\xfa\x93\x8d\xa0\xee\x9b\x69\x7e\x15\x05\x6a\x18\xaa\x8a\xe7\xbb\x3e\x87\x5d\x2c\xc5\xa2\xaa\x87\x24\x74\x44\x59\x88\x75\xda\x30\x4d\x1c\x70\x34\x48\x64\x4f\x0e\x7d\x3f\x0e\x38\x01\x89\x7e\xea\x57\x51\x9e\xac\x49\x9f\xef\xf7\x34\xfa\xb6\x49\x91\x6f\xc4\x87\xe5\x9f\xed\xda\x33\x5f\xd3\x32\x0f\x5b\xbd\x2f\x8d\xec\x57\x7a\xd0\xbb\x5f\x6c\x4a\xaf\xcb\x0d\xb4\x15\x5b\xe3\x0c\xe0\x7a\x71\x40\x59\x94\x29\x69\x21\x27\xd9\x06\x27\x3a\xba\x23\x0b\x36\xa3\xb0\x8c\x61\x85\x8e\x16\x05\xba\x4c\x3b\x2c\x16\x8c\xff\x3a\xb8\xff\xa1\x02\xd6\xcf\x7d\xfc\xe2\xf8\x56\x65\x9b\xdf\x75\x3f\xa6\x7a\xbe\x3b\xef\x8b\xf7\x3e\xcc\x3b\x66\x04\xfa\xa6\x7a\x61\xff\xd4\x87\x0d\x3a\xa5\x59\x8f\x0c\x5a\x2c\x03\x7d\x22\x49\x01\x56\x55\x0d\x04\x96\x81\x30\x11\x2d\x56\xe0\x68\xa4\x10\xc1\x02\x2c\xaf\x03\xc8\x87\xac\x65\xc4\x38\xb2\x85\xc0\xe4\x9f\xbe\x88\x38\x6e\x7f\xbf\xdc\xdf\xe5\xd9\xdc\xbd\xfd\xa9\x56\x47\x5f\xab\xda\xa8\xd9\xbe\x42\xa4\xde\xb1\x46\xf2\xf6\xc5\x7f\x7d\x55\xfa\x46\xc3\xaa\xe9\x8d\xe7\xc8\xc7\xa1\x17\x01\x1b\x05\xa2\xc8\x30\x22\x05\x31\x14\x43\x1f\x91\xd0\xa2\xa5\xc4\x26\x32\x6d\x24\x3c\x71\x54\x24\xf9\xa6\xa3\x03\x3b\x54\x61\x06\xb8\xaf\xae\x67\xa2\x57\x63\xb6\x73\xd1\xfd\xca\x9e\x6d\x7f\x1f\xc8\xbf\x2c\x18\x86\x8b\xdf\xfb\x65\x4c\xf3\xa2\x73\xd9\xc2\x87\xff\x3a\x12\xa5\x59\x39\x80\x67\x79\x43\x65\x58\x1c\x99\x61\x04\x19\x82\xa1\xa1\x72\x96\xc6\x9b\x09\xb0\x2d\xc8\xf9\xaa\x0c\x55\x5d\x73\x29\x19\x84\x31\x08\x02\x2d\xf1\x52\x80\x36\xff\x6c\x2c\x3d\xcc\x52\xb6\x7b\x9b\x1f\xe7\x17\x0e\xb2\x2d\x2b\x5c\x60\x7f\xd5\xbb\x46\xa9\xbb\x57\xea\xcf\xca\xb5\xf9\x7a\xe9\xfe\x8b\x07\xa5\xb7\xf2\x36\x04\x95\xf3\x08\xb1\x20\x00\xae\xe4\x22\x5d\xc2\x82\xc0\xc5\xbc\x1b\x42\x45\x55\x18\xe2\x12\x31\x11\x02\xcf\xb3\xd9\x48\x36\xa0\x27\xd9\x98\xcf\xe8\x55\x34\xaa\x42\xb9\x5d\xbf\x9f\xbe\xb9\xa3\xff\xed\x6b\xdf\xbd\x50\xbb\xf3\x8f\xb5\xeb\xbd\x16\xce\xff\xe5\xd2\xc3\x15\xad\xf3\x5c\xfb\x68\xe5\x27\xd7\x9f\xfc\xf5\xaf\xd4\xdd\xd7\x83\x17\xea\x74\x99\xd8\x6a\x4b\xa7\x4b\xa6\x53\x63\x05\xfd\xc5\xa2\xd1\x77\x2e\xdd\xeb\x9c\xeb\xd2\xd5\x2e\x6b\x1a\x4f\x7e\x62\x17\xeb\x97\xfa\xf4\xd6\x9b\x85\x2b\xcf\xdc\x33\x63\x4a\xbb\xe1\xed\x9e\x5f\x90\x75\xd9\x71\x7d\xe2\x9f\xe5\x6f\x8c\x1b\xb9\xe2\x34\x99\xf8\x30\xf3\x1a\x17\x29\x77\x11\xab\x21\x8a\x80\xa2\xd0\xaa\x63\x53\x8e\xeb\xca\x3e\xa7\x10\xac\x88\x86\x0d\x23\x16\x26\xae\x8b\x13\x83\xe8\x96\x08\xa0\x4a\xc9\xa1\xe4\x07\x62\x0a\x48\xf4\xee\xca\xe3\x56\x9c\x41\x07\x4e\x7d\xd8\xf4\xd4\xd2\x9f\x8b\xd7\x9f\xd2\xaf\x45\xb3\x5c\x5b\x94\xae\x0f\x87\x16\x56\x98\xd5\xf3\xbb\x64\x1e\xa0\x95\x32\x2b\x99\x9a\xa1\x02\x8e\xe0\xc8\x43\xbc\xe9\x61\xd5\x53\x12\x99\x77\x0c\x57\xb1\x44\x26\x51\x78\xc7\x46\x81\x25\x09\x3c\x60\x29\x5d\x61\x63\xda\x54\xf9\x8c\xc0\xa0\x9d\x2b\xd4\xea\xb4\xa1\xec\xe2\x86\x47\x72\x17\x29\x5a\x32\xfc\x5d\x99\xd6\xe6\xc6\x71\x5e\xcc\x3a\xf2\xde\xa2\xed\x47\x76\x4e\x9a\x7e\xfc\x89\x7d\xc9\xfe\xd3\xc1\xe2\xb9\x1f\xb7\xf1\x0f\xbc\xb4\x60\xd1\xf9\x3f\x9a\xe1\x99\x77\xae\x8d\xce\x5f\xb0\x69\x8b\xfc\x4b\xc5\x25\x0b\x8f\x77\x9d\x9d\xee\xb7\xad\xe4\x72\x2c\xab\x18\xb2\x65\xe8\x92\xcb\x43\xc5\x54\x34\x3d\xe0\x93\x18\xe9\xac\x8f\x38\xcb\x76\x4c\x2a\x51\x4d\x9f\x36\x29\x9d\x21\x3c\xd4\x53\xe0\x47\x9a\x95\xed\x73\xe7\x8c\x69\xb6\x6a\xd6\xad\x75\x96\x5f\x85\x03\x2d\x56\xb7\x3b\x7d\xf0\xf8\x8d\x95\x6f\x96\xfd\x2c\x4b\xcb\xee\xcf\xbe\x9d\x5e\x90\x2e\x34\x13\x47\x71\x05\x0a\xc4\x11\xab\xe8\x3a\xb0\x10\x45\xa8\x48\xb0\xe8\x08\x43\x55\x71\xc3\x40\xc0\x26\x41\xac\xc2\x10\xcb\xf6\x0c\x16\xb9\xaa\x97\x81\xa6\xce\xb3\x2f\x7e\xbd\x73\x78\x93\xf2\x17\xff\xe8\x3c\xa7\xf8\xa3\xfc\xec\xaf\x8d\x3e\x3a\xc9\x56\x5d\x51\xfd\x33\xf3\x5a\xf1\x65\x93\x76\x74\xee\x92\xde\xa4\x20\x4a\x8a\xc4\x32\x89\xaa\xbb\x14\xe5\x88\xba\x24\x72\x3c\x87\x79\x93\x8f\x38\x07\x5b\x40\x11\x30\xd2\x2c\x93\x8a\x34\x93\x4e\x14\xec\x19\xa2\xcc\x9b\xa9\x39\xef\xcf\x8f\xbd\xb6\xfa\x60\x2e\xd5\x58\x50\x74\x52\xc1\xfd\x55\xee\x7f\xfc\xdd\xf8\xbb\x1d\x3b\x9d\xf8\x9e\x8d\x07\x7d\x7e\xbe\x9a\xf2\x5e\x7a\x7d\x45\xa1\x43\xdc\xc4\x70\x4c\x18\x47\x86\x08\x58\x43\x86\x8a\xe0\x07\x36\xcb\xc9\x06\x36\x7d\x33\x76\xf9\x28\xb2\x08\x2b\x28\x0a\x01\xb6\x81\x2c\xd6\xa0\xfc\xa7\x03\x64\x76\xc9\x67\x4e\xe4\xef\x59\xb1\x70\x97\xec\x57\xdf\x5a\x28\xf5\xf9\xe4\xea\xf4\xce\x7d\x97\x76\xca\x3a\xf6\xe0\xcf\xf7\x0b\x94\xf8\xa8\x76\xe6\x85\x1d\x53\x2b\xa0\x18\x0c\x4d\x22\x04\x88\xae\xe9\xba\x4a\x53\x6e\x12\x32\x98\x58\x72\xe2\x4a\x21\xcf\x58\x1c\xef\x20\x87\x62\x79\xcc\x2b\x48\x37\x13\x16\xf9\x7c\x8a\xc2\x6d\x69\x95\xb5\x1f\x4e\xeb\x7a\xbf\xab\x31\xf1\x21\xff\x93\x50\x77\xf6\xf7\x2f\xce\x8f\x87\xf7\x5f\x72\xa0\xee\xda\xf6\xd6\xa1\x5f\x5b\x3d\x48\xb7\x3c\x0e\x27\x87\x14\xa7\x28\x01\xe0\x02\x5b\x34\x6d\x25\xc6\x90\x13\x04\xd9\x62\xcd\x40\x4d\x30\x1f\x41\x51\x23\x54\xc2\xd2\x21\x51\xb1\x1b\xba\x54\x06\x1a\x5e\x79\xcb\xe7\x04\x0d\x76\x74\x7f\xa1\xc9\x77\x59\x0b\x6d\x3c\xd2\xf3\xb1\x7d\x62\xed\x83\xb6\x8f\xc6\xdd\x7e\xd4\xea\xfb\x51\x5d\x57\x4f\x48\xaf\xa8\x38\x54\x3c\xe2\x01\x96\x85\x38\xa1\x75\xc8\x71\x8e\x04\x42\xdd\x31\x38\x8f\x73\x48\xa0\x09\x80\x40\xc9\x13\x80\xee\xab\xba\x60\x59\xb6\x24\xab\x9e\x9e\x81\x2f\x77\x85\xbe\x07\xaa\x8f\x99\x30\xe9\xb6\xfb\x77\x85\xed\xb9\xde\xe8\xf4\x12\xd2\x3b\x7c\x5c\x74\xbc\x90\xeb\x87\xf9\x75\x73\x9e\xaa\xdb\x3f\xf3\xfe\x95\xa9\xa7\xdf\x41\x10\x33\x89\xe2\x10\x41\x64\xbd\x38\x22\xbe\x47\x6b\x20\x11\x20\x49\x34\x55\x8d\x18\x81\x47\x40\x25\x06\xd0\x5c\xdf\x0f\x39\xce\x66\x39\x88\x53\x63\x0d\x4c\xee\x6c\xb9\xdc\xad\x0f\xaf\xaa\x59\xe3\xc1\x0f\xd1\xab\x83\x27\x4e\x6b\xf2\x42\x90\xeb\xfa\xb6\xc5\x6c\x91\x9a\x37\xee\x9d\x99\x5b\x39\xbd\x47\xd1\xf3\x18\x20\x90\x40\x60\x29\x12\x44\x2e\x07\x7d\x4f\x00\x2a\x8e\x58\x3e\x4c\x12\xda\x4e\x62\xd5\xa2\x14\x24\x71\x86\x4c\x11\x29\x90\x81\xa9\x09\x24\x83\xb2\x62\xf6\xdf\xcf\xd6\xfe\xd2\x69\xd3\xa4\xd6\xdb\xad\x0f\x77\xe9\xf0\xd5\x90\x87\xbb\x4a\x5f\x7e\xb6\x2d\xfb\x65\x0d\xf1\xcb\x06\xcd\xee\xd5\x54\x9e\xb8\x90\x72\x1d\x6b\x5b\xe3\x1a\x26\xfd\x6a\x85\xbf\xde\x18\x7c\x16\x7a\x4b\x7b\xe2\x9e\xdd\x5a\xfe\xfd\xc3\xec\x85\x95\x57\x9e\x3a\x5c\x25\xbd\x3a\x40\x3c\x93\x28\x91\xc0\x26\x0c\xcf\x87\x86\x86\x21\xc7\x84\x8a\xe0\x04\x7a\x40\x59\xa2\x86\x68\x8d\x76\x55\xdf\x93\x69\x59\x47\x02\xcd\x07\x01\x0e\xe3\xff\x32\xea\xfc\xbf\x4b\x1e\x35\x7e\x4b\xb5\xdf\x8b\xb5\x2f\x17\xce\xfb\xa0\xdb\x1d\xb9\x5d\x7b\xbe\xdc\xc8\x3c\xf7\x3a\xdf\xee\x7b\xa5\x71\xbe\x57\xb1\xf6\xd1\xad\xf4\xe6\x1b\x49\x0c\x34\x33\xf2\x91\xc9\xf8\x16\x1f\xe9\xac\x95\x00\xda\x8b\x05\x13\x5a\xb6\x4f\x27\xb2\x98\xc4\xae\xe5\x20\xc9\x85\x02\xe3\xb1\xb4\x26\xaa\x82\x92\xba\xb0\xbe\xdc\x60\xf8\xf3\x13\xef\x7d\xda\xf8\x1a\xb7\xb7\x24\xf7\xfd\x37\x03\x7b\xfc\xf9\x75\xc5\x17\x77\x94\xba\xff\x61\xc3\xbb\x2f\x4f\xdc\xd4\x2d\xf3\x88\xd7\xd4\xec\x04\x59\xc5\xbe\x12\x0b\xd0\x91\xb1\xe9\x0b\xb4\x12\xda\x16\x8c\x18\xd9\x12\xd4\x38\x0a\xa0\xa7\x40\x43\xc0\x06\x02\x5e\x14\x71\xbc\x6a\x32\xbc\x8e\x9f\x2e\xc9\x1e\x5c\xb8\xb6\xc6\x9a\x30\xf3\x46\x8b\x4e\xdb\x7f\xed\x5a\xb5\xca\x87\x6f\xc5\xbd\x77\xee\xfb\x85\xee\xb0\x61\xef\xc4\xdc\x77\x7a\xde\xe6\xd3\xfb\xa5\x43\x55\x4b\x30\xcf\x85\x5a\x80\x5c\xd1\x90\xad\x48\xd7\x68\x24\x10\x4d\x30\x39\x9b\x51\x31\xe7\xe8\x81\x43\x04\x60\xc7\x10\x63\x56\x15\x6c\x59\x40\xa9\xef\xd0\x42\xbb\xa6\x4b\x6f\x74\x5c\x5a\xec\xd8\x83\xaf\x76\x70\xc1\xa7\x7b\x26\xad\xbd\x7b\x77\xcd\x99\x4d\xef\x0f\xce\x72\xe5\xb3\xae\xa7\x4f\x65\x1e\x24\x94\x81\xf9\x6c\x20\x09\x49\xc2\x44\x40\x31\x0c\x2d\x71\x0d\x35\x0a\x81\x24\xab\xa6\x12\x79\xbc\x2e\x85\xb6\x65\x0b\x18\x01\xc1\x56\x6d\x21\x62\x43\x57\x24\x29\xbc\x44\xc6\x19\xe7\x56\x8e\x3a\x39\xb1\x14\x4e\x36\x78\x59\x7e\x99\x30\xec\xaf\x43\xcd\xbb\xf0\x6d\x8a\x97\xdd\xef\x66\xaf\xfa\xf5\xb6\x5c\x99\xcf\xec\xa9\xbd\xa4\x04\xcf\xf6\xa1\xc4\x00\x60\x05\xa1\x64\x53\xb1\x86\x44\xcf\xd4\x80\xc3\xcb\x3c\x25\xb9\x12\x13\xd8\x4e\x22\xd3\xd0\x96\x29\x3e\xb6\x79\xcd\x11\x53\x68\x6c\xcc\x28\xb4\xb4\xea\xc3\x1a\x5b\x76\xf7\x9e\x9c\xf5\xf0\xda\x07\xcf\x15\xa5\xc2\x47\xd6\xf6\x53\x8b\xd0\xb6\x43\xef\xd4\x7d\xe1\xce\xb5\xcc\xf3\x9a\x52\xd7\x85\x82\x11\x08\xa6\x68\x78\x3e\x66\x38\x3f\x4e\xd4\x90\x96\xe4\x44\x72\xd5\x88\xf0\xa6\x17\xf9\xa6\x4b\x19\x24\x09\x13\x57\x73\x40\xa4\x73\x4a\x98\xa1\x89\xc1\x0e\x38\x05\x2f\xae\x35\x75\x60\xa5\x0e\xf5\xc6\xcd\x1f\x38\x6b\xe3\x3b\x8b\x5b\x8d\xfd\xb4\xf4\xfe\xd2\x5b\x36\xbd\xe2\x0d\xd0\x46\xe7\xb8\x99\xfb\xff\x6d\x66\x35\xb8\xc5\xc0\xf2\xe5\x3f\x7a\x12\xc3\xf8\xec\xf0\x2a\x6b\xa6\x1c\xb9\xd1\x4c\xbb\xb1\xa1\x67\xf6\x79\x93\xf0\x47\x23\x9b\xff\x94\x7f\xfb\xe7\xdd\x16\x76\x9e\x7c\xb3\xf1\x96\x5c\xe9\x9d\xec\xf3\x5e\x2c\x53\x22\xa5\xfa\x11\x63\x29\x6e\xe8\x63\x56\x71\xb0\x1b\x02\x89\x57\x1c\x2e\x50\x31\x50\x6d\x31\x4a\x34\xda\xb2\x54\xce\xf0\x65\x46\x50\xc4\x0c\x30\x8c\xc3\xa2\x0f\xb7\x14\x6b\xee\x8c\x5d\xd8\x73\xf7\x35\x6d\xd1\x2b\x35\x7e\x8d\xd6\xe3\x67\x4a\x15\xcf\xcf\xbd\x9b\xf7\xd0\x33\xbd\xb2\xa4\x59\x55\xcd\x86\x06\x95\x90\x98\xf7\x1d\x6c\x70\x12\x2f\xd8\x81\xad\x2a\xae\x21\xc5\x58\xb7\x71\x4c\xf1\x9c\x2a\xd1\x31\x1d\x09\xbc\xc4\xc7\x91\xec\x7b\x34\xca\x40\xfe\xb9\xb1\xf9\x43\x8d\x09\xc7\x3f\xb8\x86\xa7\x6c\x39\xfd\x23\xa3\x5d\xf5\x0a\x5d\x6a\xfa\xc7\x92\x46\x3d\x4e\x0e\xe3\xf7\xad\x5a\xb5\x73\x68\x9a\xe1\xbc\x1a\x1d\x05\xc4\xfe\x57\x8e\x47\xba\x8b\x3c\x0d\xab\x8c\xc6\x01\x3e\x06\x34\x09\x3d\xd6\xf4\x13\x29\x60\x74\x8a\xc1\x48\x55\x42\x96\x75\x7d\x3d\x03\xe8\xe5\x07\x1f\xac\x1d\xdf\xb6\x4b\xf3\x33\x87\x6f\xee\x6a\x55\x7d\x77\x49\x30\x62\xc9\x4e\xf2\xce\x78\xf5\xbb\xbb\x27\x8e\x97\xd4\xbe\x7c\x34\x2c\xbd\x67\xdd\x13\x62\xd9\x35\x7c\x46\x0d\x02\x43\x21\x98\x0e\x30\x23\x59\x26\xa7\x21\x06\x5a\xc0\xd1\x59\xcb\xe1\x5d\x49\xa4\xa0\xeb\x70\x41\x20\xbb\x5a\xa8\x0b\xa9\x27\x14\xc3\x6a\x9b\x37\x75\x25\x3c\xf9\x5b\x8f\xa6\xbf\x7e\xdb\xb2\x5f\xa1\x9a\xaf\x38\x65\xae\x14\x69\xfd\x47\xc1\x81\x0f\x3b\xb5\x13\x47\x65\xbe\x3f\x9b\x5a\x40\x96\x30\x22\x17\xb0\xa1\x9f\xd8\xc8\x44\x8c\x80\x19\x91\x91\x7d\x0e\xc6\x8e\x04\x54\xd1\x40\x8e\x02\x58\x4f\x62\x4d\x35\xa0\x79\x08\xfc\x18\xd2\xf2\xd3\xf7\xd7\xb8\xca\x76\xf4\x0e\x3b\x7d\xfa\x98\xdf\x6f\xcc\xeb\x73\xfd\xb5\xbb\x7b\x0a\x5c\xca\xd3\x73\x57\x96\x1d\x63\x57\x16\x9d\xba\xef\xde\xd9\xf4\x02\x13\x78\x5e\x8a\xa5\x58\x97\x80\xea\x5b\x56\x12\xb8\x14\x65\xd3\x09\x25\xc9\xa6\xe7\xc9\xb2\xe4\x87\x1e\xad\x42\x99\x45\x1c\xcd\x0b\xa6\x42\x80\x82\x75\xf4\x1f\x5a\xec\x88\x9c\xff\x6f\x1d\xf3\xc1\x2d\xd6\x65\xc9\x3d\xf0\x49\xdc\x65\xd3\xbe\x9f\x9c\x6f\x4d\xa3\x36\x0d\x47\xd4\x2d\xde\xec\x4b\x65\x56\xdd\x4e\x6b\xbc\x1e\x67\xcd\x67\x67\x37\x28\x78\xb2\xe0\xfa\x61\xe9\x55\x41\x87\x31\x47\x28\x05\x32\x52\x04\x65\x31\x54\x28\x28\xb1\x8c\x61\xd3\x14\x2b\x18\x08\x41\x3e\xa1\x6c\x97\x62\x05\x62\x44\x92\x67\x84\x36\x8f\x15\x15\x4a\xa9\x4f\x6f\xa5\x62\x83\x97\x8c\x58\x5f\x6c\xf8\x64\xbf\xc3\x1d\xba\x7a\x7e\x7e\xe8\xa3\x1c\x6d\xff\x1a\x53\x6f\x7c\xe1\x63\xd9\xef\x69\x8f\xc1\xe5\x34\x97\x71\xba\x03\x5c\xc0\x09\x9a\xe9\x10\xd3\x62\x64\x09\xa9\x38\x09\x6c\xce\x54\x13\x8f\xa6\x54\xd1\x60\x21\x52\x55\xa8\x19\x32\xc6\x4a\x28\x0b\x74\x46\x78\xef\xb2\x39\x8f\xef\x62\x8b\xe5\xf9\xb9\xd1\x9c\x68\x0e\x3d\x71\x7c\xd5\x75\x67\x5b\x76\x2f\x7c\x7f\xe7\x62\xb5\x64\xc3\x55\x7d\x1f\xef\x4e\x2f\x4c\x0e\x32\x06\xcd\x0b\x9c\x22\x45\x71\xc8\xba\x06\xad\x13\xde\x82\x1a\xd4\x3d\xdd\x08\xdc\x00\x88\x14\xe5\xb3\x14\x8c\x59\xd1\x31\x78\x39\xe0\x65\xe4\x9b\x19\xe4\xca\x35\x2d\xbe\xdb\xd1\xf2\x4a\x11\x8e\x79\xee\xf9\x73\xbd\x82\xce\x2d\x8f\x67\xed\xf8\x6c\xc1\x97\x9a\xc5\x03\xf3\x74\xff\x0c\xf4\x81\x66\x7a\x97\xcd\x49\x02\x8e\x3c\x31\xa1\xd4\x48\x62\x64\x3f\xd4\x0c\x3d\x10\x8d\x40\x51\x4c\x4e\xc1\x26\x50\x4d\x2c\x8b\xae\xa2\x78\xd8\x97\x0c\x57\xe4\x29\x28\xa2\xa7\x58\x40\xff\xd4\x1d\x1d\xdc\xa2\xd3\xc0\x2c\x83\x9e\xbc\x7f\x07\xf5\x2c\xd1\xb8\xf9\x5d\xf7\xda\x28\xaf\xf7\x1e\x76\xf5\xf6\x8b\xdb\x6f\xef\x78\x48\xd6\xf4\x7b\x71\x4e\xad\x57\xe3\x11\xd1\xad\xeb\x69\xd6\xb2\x93\x04\x9b\x4b\xd8\x48\x88\x60\xec\x88\xc4\xb3\x34\xc1\x08\x6d\xc9\xa1\x69\x20\x46\x91\x2f\xc4\x46\xec\x1b\xa6\xe0\xd9\x11\x43\x73\x31\x85\x74\x23\x03\x08\x72\xfd\x79\xb8\x69\xa3\x92\x54\x49\xa5\xe3\xec\xd9\x1b\x5b\x3b\x1b\xeb\x1c\xb8\x32\x72\x77\xc3\x1f\x0e\x5e\x78\xbb\x98\x5f\xad\x48\xbf\xcc\x37\x7d\x52\xa6\xd6\x98\x65\x7c\x0d\x8a\x86\xab\x27\x4e\xc8\x13\x09\x18\xb4\x69\xc8\x96\xaa\x38\x94\x23\xc5\x9c\x6c\x18\x11\x92\x02\x5a\xc0\xb1\x09\xb0\xcf\x33\x51\x62\xa7\x8e\xa9\xdf\x4b\x54\x6c\x5c\x6b\xf0\xd7\xfe\x6b\xbd\xcc\x26\x4d\x56\x57\x9b\x1e\x76\x6d\xdc\xf9\x70\xcb\xc7\x03\x2f\x7f\x2c\xef\xff\xd4\x3f\x92\xe6\x99\xb5\xea\x11\x49\xc6\x86\x28\xb2\x91\x6b\xd1\x9c\x66\x72\x96\x1c\x85\x84\x61\x42\x04\x3c\xcd\xc2\xb4\x48\x92\x24\xa0\x8c\x90\xe2\x62\x07\x78\x94\xa3\x65\xd0\x8e\x28\x47\x97\xa8\xf4\x52\xf9\xab\xe2\xf6\xf9\xea\x99\x12\xd7\xdf\x5b\x9b\x8d\xdb\xbf\x98\x3c\xd3\x2a\xd7\xfa\xd6\xa5\x37\xe7\xfe\xe5\xfc\xf7\xe9\x0d\x12\x96\x15\x79\x26\x00\x0a\x83\x39\x3f\xe2\x75\x24\x79\x16\xef\x12\x87\x36\x7c\x98\x20\x4e\x62\x3c\x53\x93\xd8\x30\x0a\x65\x99\xf0\x0e\x47\x61\x2f\x50\x52\x07\xc9\x56\xf6\xc3\xdc\xfb\xa7\xb5\x39\xf6\x08\xe7\xfb\xf6\xf3\x1e\xb5\xd7\xfc\x31\xf4\xf0\xfc\x11\x55\x7f\xd9\xb0\xec\xca\x9d\xce\x43\xa4\x26\x99\x97\xe1\x4b\xed\xfa\xac\xc6\x3e\x66\xf5\x44\x73\xc4\x98\x67\xf4\x98\x24\x96\x0c\xbd\xc4\xc3\xbc\x83\x3d\xca\xb1\x24\x91\xb5\xe4\x44\x57\x54\x23\x90\x4d\x57\x27\xb1\xff\x1f\xfd\xaf\xa1\x39\xff\xdf\x26\x16\x83\x5b\x3c\x97\x3b\x4b\x8e\x21\x4f\x2a\x59\x54\x29\x95\x7f\x71\xc7\xdc\x0d\xdb\xc0\x53\xeb\x76\xb4\x78\x2f\xe7\xb2\xbd\xe7\x3b\x17\xaa\xf7\xee\xd2\x17\xe6\x77\xec\x81\xe7\xec\xd8\x9f\xde\xcd\xd1\x8d\x80\xd2\x25\x25\x4e\x10\x61\x5d\x47\xf7\xc4\xd0\x35\x59\x91\x0d\x6d\x12\xda\x89\xe1\xf0\x90\x4e\xb4\x90\x77\x05\x93\x03\x7a\x98\xb0\x12\xab\x07\xa9\x37\xa7\xff\xdd\x01\x3f\xf4\xf9\x78\x16\xbc\x5b\xad\x54\x93\x56\x37\x3f\xc8\x51\xe1\x66\x55\xb1\xe6\xb1\xc9\x4d\x2a\xae\xfd\x55\xed\x93\xfd\x8f\xd1\x69\x56\x58\x65\x34\xc4\x7b\xc0\x35\x69\xca\x40\x10\x41\x87\xd6\x64\x19\x18\x3e\x21\x2a\xe0\x65\x29\xb6\x19\x4b\xc2\xa2\xcb\xa8\x8e\x66\xb3\x0a\xef\x43\x64\xa4\xee\x49\xd4\x1c\xbf\xec\xb7\xaf\x66\x3f\x6e\xb5\xe1\xf2\xce\x6d\xe7\xdb\x88\x0d\x7f\x1a\x87\xbf\x5c\x77\x24\xdb\x95\xcb\x59\x1b\xac\x99\xb5\xc4\xff\x35\xbd\x31\x85\x25\x47\x67\x54\xd5\x57\x89\x8f\x2d\x4d\x15\x21\x15\x22\x0a\x18\x0e\xd6\x1d\x47\x50\x0d\x4d\x8d\x6c\x05\x6a\x8e\x2b\xc2\x40\xa7\x18\x92\xb0\x41\x8a\x31\xd1\xc3\x6e\x53\x67\x6f\xde\x70\x79\x61\xfd\xad\xb7\x1a\x3c\xd8\xaf\xff\x74\xbd\x0a\x5d\xb3\x75\xe1\x7b\xfc\x8b\xef\x4f\x79\xf3\x9b\xcb\xbf\x2f\x4a\x73\xf5\xcc\x5a\x02\xe5\x7b\xba\xaf\xc5\xae\x1e\x61\x9b\xc1\xb4\x86\x69\x12\x25\x6c\x84\x0c\x57\x54\x68\x2f\xa4\xfd\x40\xb2\x04\x44\x18\xa0\x0b\xa2\xfd\x5f\xf8\x9e\xff\x39\x06\xff\x34\x20\x1a\xdc\x22\x5b\x96\xf2\xe5\x87\x3c\x29\x00\xbd\x62\x75\xe7\x2b\x03\x85\x1c\xdd\x5e\x3e\xb3\x6e\xc6\xc6\x8d\xf7\xcf\xaf\xdc\x98\xa7\x42\x2e\x7c\x2b\x9e\xb8\xa3\xca\x17\x0f\x8a\x66\x1e\xc5\x94\x32\xb5\x9a\x1c\xf6\x3d\x47\x37\x39\x87\xf2\x24\x87\xe1\x2c\x91\x17\x54\xcd\xa1\x34\xd3\x4d\x02\xec\xf3\x4a\xc2\xcb\x1c\x27\xe8\x22\xb4\xc3\x40\x72\x03\x27\x48\x51\x6c\x7f\x39\x30\xe7\xc1\x36\x27\xe7\xee\x18\x73\xa4\xc6\x37\x42\xc1\x63\xbd\x8d\x0d\x39\x4b\x54\x9c\x32\x98\x71\xbf\xe9\x51\xf1\xc7\xa9\xab\xd3\x2c\xf4\x67\x05\x01\x76\x90\x60\x07\x01\x70\x45\xcb\x8d\x7d\x49\x84\xb4\xe3\x5b\x16\x4f\x2b\x21\xa3\x08\xd8\x90\xa2\x84\x11\x1c\xcd\xf6\x19\x37\x60\x19\x14\xc0\xd4\xb7\x41\xe9\x9c\xd9\x07\x4d\xdd\xd2\xa0\xdd\x4b\x2d\xf3\x0e\x2d\xb6\xbb\x41\xab\x8b\x6d\x0f\x09\xc7\x4b\xed\xaa\xe5\xcd\x1b\xd2\xbb\x81\x73\x38\xf3\xe2\x51\xa9\xc7\xf4\x58\x56\xb1\x2b\x13\x29\x54\x7c\x93\xe5\x23\x01\x49\x18\x81\x10\xe8\x4e\x10\xa8\x12\x6d\x39\x16\xf2\x4c\x5d\x8b\x2c\x9b\x07\x26\xc5\xab\xb4\x28\xa6\x4e\x38\xa4\xf9\xd1\xed\x8f\xbe\x6c\xb2\xfd\xa7\x93\x57\x0e\x1c\xf5\xcf\x7d\xd5\xf9\xfb\x7d\xb7\x73\x6f\x5c\xb2\x7c\x4d\xbf\x33\xaf\x9e\x1e\x73\x2e\xf3\x9c\xd0\xd4\x3c\x9a\x58\xc1\x14\xe1\x01\x17\x9a\x32\x54\x70\x64\xf3\x74\x20\x79\x2c\x54\x45\x8c\x29\x5a\x89\x1d\xc4\xc4\xbe\x1c\x19\x0c\x12\x30\x70\x59\xda\x23\xff\xd1\x72\xfb\x1f\x46\xd9\x3f\xb5\xa5\x07\x37\x9f\x99\xa5\xc5\x93\x2f\x1b\xa5\xe8\x73\xa8\xcc\xc5\xcf\xff\xe8\x84\xa5\xf3\x56\xe7\x3d\xf4\x33\x15\x5d\xa6\x5b\xbe\xfe\x45\x96\x6f\x3d\xb5\xae\xdf\xe6\x7c\x99\x37\xb6\x49\xad\xc6\xe4\x03\x39\x09\x58\x49\x51\x69\x28\xfb\x90\x33\x6d\x3f\x88\x5c\x41\xc5\x92\x64\xc9\x89\xc1\x85\x91\x2c\x91\x20\x94\x42\x2f\x14\x45\x42\x42\xd7\xc8\xc0\x5d\x51\x1f\xfb\x58\xbc\x58\x7d\xc0\xd0\xe5\x15\xca\x36\xeb\x5b\xa0\xf4\xa5\xb1\x57\x3e\xfd\x6b\xf2\x67\x7d\xdf\x3c\xf2\xfa\xdf\x5d\x5e\xfc\xb8\x66\xab\x34\xe3\x53\x93\xc0\xb6\x54\x59\x37\x7d\xc7\xd1\x60\x48\xcb\x12\x0f\x63\x10\x03\x84\x51\xa8\x69\x92\x4d\xe9\xbe\xc5\x3b\x71\xac\x22\x9f\xc2\x8c\x1b\x50\x19\x71\x2b\xbf\xbe\xdb\xb7\xd9\x95\x2d\xe5\xb3\x87\x6f\xfe\x72\x3f\x6e\xb5\xeb\x60\xb6\xae\x7b\xa5\x2f\xea\x84\x07\x5e\x9e\xfe\x75\xbe\x95\xdf\xf6\x39\x9e\xe6\xe6\x55\x14\xd3\xb2\x23\xe8\x58\x66\x63\x13\xcb\x81\xe8\xe0\x20\xe0\x04\x59\xd0\xa0\xc9\x78\x52\x24\xa8\xbc\xcf\xf1\x8c\x66\x19\x28\xb2\x25\x55\x86\x19\x29\xa4\xfc\xd2\x7c\x70\xfe\xca\xcd\x98\x7d\xc7\xca\xed\x68\x99\xe5\xc0\x37\xeb\xcf\xe4\xae\xfc\x76\xf5\x82\xd4\xc3\x42\x85\x37\xd6\x5c\x3e\xab\x40\xe6\xcd\xb4\x53\xa6\x4a\x40\x33\x9e\xce\xd0\x80\x8b\x54\x4a\xf3\x10\xe7\x48\x3c\x2b\x69\x30\x01\x92\x08\xb0\x64\x03\x4b\x4f\x6c\x82\x54\x1b\xd1\x96\xaf\x13\x89\x62\x13\xfa\xff\xe6\x9d\xff\xb1\xa5\xfa\xa7\x0e\xe4\xe0\x16\x39\x86\x67\xc9\xfa\xe4\x51\xb8\xbd\xfc\xc8\x82\xb2\x8b\x76\x6c\x38\x35\x36\xb9\x38\xe7\xcb\x4b\xf6\xfb\x5b\xff\x7c\x49\xea\x37\x88\x7a\xaf\x6b\xee\xa9\x25\xeb\x8d\x90\xd3\x1b\x53\x74\xf0\xaf\xc7\x9b\xe9\x60\xde\x82\xbe\xa6\x7a\xae\x84\xd8\x20\xe1\x13\xda\xe6\x02\xd3\x51\x04\x51\x8e\x3d\x91\xa7\x91\x1b\xca\x02\x96\x0d\x4f\x36\xf4\xd4\x31\xb5\xa6\x71\xb1\x81\x07\xd9\x93\xd3\x5f\xde\x9c\xe3\x74\xfb\xb9\xd3\xf4\x1b\x3b\x9b\xf5\xf8\x74\xd5\xcc\xb6\xad\xde\xfc\xb3\x7f\xb5\x42\xed\xda\xa7\x59\xc2\x9d\x8a\x62\x5b\x0d\x12\xd7\xe2\x1c\x2a\x71\x4d\x8b\x52\x35\x95\xd7\x75\x16\x59\x94\x1f\xdb\xbc\x04\x75\x18\x1a\xb1\x05\x3c\x87\x67\xfc\x10\x70\xb4\x96\xba\x2e\xaa\xd3\xa7\x60\xcd\x6d\xaf\x95\x9c\xf1\x5b\xbf\x01\xd4\x50\x7a\x50\x99\x05\xf9\xf2\x1c\x00\x4b\xe7\xd2\xbf\x0c\xbb\xd6\xe1\xf2\x2c\x98\x79\x37\xda\xd4\xfe\xa8\x32\x71\x01\x23\xab\x32\xef\x50\x8c\xa3\xd2\x9e\x6b\x31\x2a\xb0\x0d\x41\xf6\x2c\x6c\x51\x94\x16\x08\x91\xac\x18\x8a\xad\xf8\x0a\xe7\x81\x90\x83\xde\xd3\x23\xed\xf7\x1a\x74\x28\xd3\x8c\xdd\x74\xed\xc3\x3a\xd4\x84\x57\x2e\x4f\xdf\xdd\x7b\xaf\xf3\xe9\xb8\xaf\x98\xb9\x59\x46\x97\x5e\x98\x54\xdd\xdb\x3b\xcd\xf0\x49\xc7\xe6\x54\xda\xe2\x15\xd1\x54\x8c\x84\xf3\x03\x3f\x82\x80\x77\x5c\x47\x07\xbc\xa8\x58\xb2\x27\x99\x40\x93\xa9\x90\xc8\xbc\x6d\x5b\xb6\x08\x8c\x0c\x0a\xe7\x6f\x97\x5d\x69\xfa\xe2\x81\x55\x23\x71\xd5\x41\xa3\x5b\x4d\xd8\x93\xed\xaf\xc2\x4d\x9c\x3d\x2d\x5e\xfc\xe3\xdc\xe8\xb8\xfe\x9e\xf5\xdf\x8f\x49\xef\xb2\x01\x13\xab\x44\x15\x35\x59\xa2\x69\xc9\xe0\x12\x43\x20\x2a\xc0\x58\x4d\x5c\x82\xb1\xa9\xb9\x40\xd0\x80\xee\xfb\xbe\xe0\x84\x0e\x0b\x3d\x88\xd0\x7f\x7a\xb8\x93\x5e\xfe\xf7\x8a\x9f\xd9\x32\x62\xc7\x95\x89\xd3\xe6\xbf\xda\x6e\x4c\x81\x17\x0f\x6f\xa9\xdb\xf1\x8d\x51\x2f\x56\xc9\x59\x2f\xea\xf8\xfe\x4b\xdd\x56\xac\xd6\x5e\x1a\xdc\xe2\xf1\xe3\xb5\x6b\xff\x7f\x3e\xe8\x7f\xfe\x66\x9e\x97\x7e\x59\x57\xa7\x3d\xdd\xeb\xf0\xc9\xbb\x15\x67\x85\xb5\x2a\xf7\x9e\xc7\xaf\x0a\xf6\x72\xb7\xbf\x7c\xa3\x52\xdb\x71\x15\x1a\x67\xfe\xf8\xa6\xee\x44\xba\x1c\xb2\x2d\x51\x17\xb1\xe1\xaa\x49\x6c\x1b\x81\x00\xc2\x44\x93\x81\xcf\x78\xc0\x89\x09\xc7\x78\x4c\x4c\x38\x43\x61\x05\x1a\x79\x7e\xe0\xfa\x19\x54\x19\x0f\x36\x0c\xfa\x69\xd8\xcb\x47\xdf\xeb\x32\x79\xfa\x77\x3f\x5f\xea\xb0\xe9\xd1\x89\x66\xdc\xa8\x37\x57\x3c\xe8\x5c\xe8\xb7\xc3\xf8\xc2\x8e\x51\x69\x96\x71\xb2\x4d\x9a\x84\xb1\x6f\x41\x8b\x77\x05\xc0\x04\x00\xf1\x62\x88\x81\xe9\x1a\xbe\x17\xe9\x02\xef\xf2\x66\x40\x1c\x4d\x25\x36\x26\x9e\xac\x4b\x19\xd1\xed\xe7\x3d\x73\xfc\xf5\x5e\xd9\xb5\xbb\x9c\x5a\x21\xdf\x88\xaa\xe3\x92\xd5\x2d\x0b\x6d\xd8\xb2\xb8\x60\x8b\x1e\x68\xc1\x38\x13\x57\x5d\x9c\xde\x52\x54\xf0\x75\xce\xe0\x12\xca\x53\x0c\xdf\x0a\x05\xcb\x4e\x18\xe2\x21\x9b\x85\x89\xca\xf1\x8c\x1e\xda\x2c\x02\x8a\x19\x27\xa1\x11\x79\x96\xc5\xa2\xd8\x73\x32\x18\x4d\xa1\x01\x79\x71\xed\x4e\xdd\x37\xb5\x8c\x1b\x74\xfa\xf1\xf2\x82\xbc\xcc\x8f\x1b\x2e\xaf\xf8\x60\xe6\x65\xff\x40\xce\xa3\xdd\x87\x7c\xe6\x3c\xf9\xeb\xf1\x33\x27\xde\x2d\x32\x52\xca\xb9\xf9\xf4\x9f\xab\x46\xc3\xa1\x6c\xd1\xdf\x8b\x79\xab\xea\xdd\xe4\xe4\x71\xcb\x9e\x7f\x74\xde\x7f\xf2\x5d\x5d\xea\xca\x83\x42\x77\xce\x6e\x3e\xb1\xa6\xf6\xe7\x8b\x3f\x7e\x67\xe1\x73\x27\x57\x1c\xbe\xd4\xf8\xda\xbc\x72\x1b\x37\x3f\x33\xe2\x9b\x43\xcf\x7d\x97\x6e\xb0\x3e\x05\x0d\x5d\x60\x23\xc9\x35\x0d\xd6\x26\xba\xa6\xb2\x80\xd5\x44\x12\x7b\xba\x15\xc4\x89\x9f\x10\x8a\x09\x0c\x10\x71\x2a\x27\x09\x24\x8e\x78\x3d\x35\xbb\xb7\xc2\x89\x99\xd7\x8c\x92\x73\xcb\x9d\x5c\xfd\xfe\xbd\x5f\x5e\x1a\x3a\x67\x8e\xdc\xfb\x56\xb4\xec\xf5\x06\xd3\xe9\xf7\x2f\x5d\x7b\xbd\xc8\x73\xe9\x5d\xb6\x17\x60\xcd\x09\x4c\xd3\x34\x19\x0d\xd9\x5a\x98\x24\x7c\xe8\x1a\x0a\xd1\x4c\x0f\x07\x86\x1e\x23\xca\x4f\x1c\xe2\xda\x76\x24\xc6\x58\xd1\x45\xc9\xb3\x9e\x7e\x07\xf5\x2a\x7e\xb4\xa4\x3d\xc9\x3e\xea\x3d\x3e\x7f\x97\xdf\x36\x67\x49\xae\x49\x75\xe6\x76\xce\x33\x90\x59\x74\xd1\x2d\x6c\xc4\xf3\x33\x6f\xe6\x96\xf2\xa8\xfb\x16\x08\x7d\x43\x07\x9c\x4b\x41\x42\x24\xc6\xd7\x5c\x99\xe2\x81\xed\x4a\x86\x8e\x12\x5a\x32\x13\x85\xb7\xb1\x25\x71\x71\xcc\x47\xb6\xa2\x18\x44\x48\xc1\x03\xfb\xeb\x87\x2c\x85\x16\xee\x3c\x35\x28\x5e\xc2\xd4\x3a\x3d\x72\xf0\x47\xf8\xfa\xd8\x5e\x35\xe5\x1d\xa7\x57\x6f\xff\x7a\x78\xdd\x57\xbf\x48\xef\x9b\x9a\x0e\x61\xcc\x26\x21\x51\x34\x8e\x15\xec\x08\xd8\x26\x63\x21\x8c\x15\x4e\xa7\x25\xd1\x33\x69\x8e\xb2\xe8\xd8\x0b\x79\x4f\x35\x13\x15\x19\xc8\xa4\x32\x70\x14\x1e\x50\xec\xb5\xd7\xef\xbd\x5f\x65\x9a\x39\x3d\xee\xb0\x77\xc1\x85\x1a\xed\x47\xbc\xb5\x0f\xae\x5c\x34\x29\x2e\x54\x78\xe5\xd6\xcf\x5f\xca\xfc\xd8\x32\x75\x9d\xcd\x19\xd8\x53\x61\x22\x78\x12\x2d\x44\x82\x91\x68\x8c\x0b\x78\x06\xb3\x06\xed\xba\xba\x6d\xe2\xc4\x4e\x90\x61\x10\x5e\xc6\x62\xc0\x11\x57\x0c\x9c\x0c\x68\x11\x7b\x4b\x32\x4d\xf2\x93\x17\xe8\x99\x9d\x3e\x3b\x7d\xe3\x5b\x66\xd1\x9b\xd9\xa3\xe7\x92\xf6\xcb\xfb\xbe\xb3\xe2\xf4\xdb\xcf\x1e\x19\xbe\xf8\x49\x79\x8a\x0f\x8a\xd7\xe8\x33\x7c\xed\x86\xf2\x68\x19\x5a\xbf\x4f\x47\xf7\xfb\xef\xbe\xd5\x7c\x71\xc5\x92\xc4\x7c\xb1\x08\x3a\xdb\xf7\x48\x9a\x4b\x11\x95\x4b\x2c\x15\xc4\xb2\xa3\x48\x31\x27\xfb\x2c\x9d\x78\x3e\xe2\x62\x87\x4b\x54\x2c\xc4\xa2\x07\x64\x62\x43\x37\x06\x36\xcb\x44\x9a\x60\x3a\x49\x06\xfe\x62\xb3\xa6\xbe\xbd\xe7\x54\xf3\xba\xc7\x3f\x6c\xf6\xf1\x1e\x25\xc7\x87\x57\x36\x2c\xcd\x23\x77\x17\x0e\x57\x19\xf0\x10\x6c\x5f\x7d\x62\xc8\x6b\x69\x86\x8e\x08\x3c\x32\x05\xc7\xb7\x65\x07\xfa\x2a\x30\xa5\xd0\x12\xa1\x17\x69\x54\x4c\xa2\x08\x07\xaa\xa3\x38\x4e\xe0\xca\x81\x6a\xcb\xc0\xb6\x13\x96\xc0\x0c\xe4\x29\x56\x17\x92\xe6\xe7\x6b\x74\xe3\xc8\xe6\x96\xc1\xeb\xcb\xf0\xac\x29\x3b\xdf\x87\x2f\xfe\xbe\x65\xdf\xab\x39\x3f\x9a\x56\x62\x15\x18\xbf\x26\xbd\x37\x87\x11\x08\x21\xa7\xc5\x48\x25\x2c\x8a\x54\x88\x1d\x2c\xe8\x34\x52\x1c\x91\x0a\x25\x1f\x28\x2e\x0d\xd5\x90\x82\x89\x2c\x62\x68\x26\x30\xf4\x3c\x2d\x03\x11\x84\xde\x2d\x3e\xad\x5f\xe5\xc7\xb2\x8b\xce\x7c\xd3\xf5\xf5\xba\x9b\x76\x7f\xf4\xed\xb1\x51\x1f\x95\x7a\x5d\x5a\x72\xf0\xca\x00\xb5\xd4\xa2\xfa\x5d\xd3\xcc\x69\xa2\x5d\x33\xc2\x8c\x15\xb0\x9c\xef\x2a\x02\x31\x34\x25\x22\xc0\x36\x13\x55\x50\xf8\x20\x51\x59\x99\x96\x28\x4f\x77\x62\x28\x07\x9a\xc3\x29\x02\xcf\x3d\x9d\x73\x06\xd7\x68\xfd\x70\xc4\x30\xb6\x7e\xd6\x8b\xaf\xad\x3c\x78\xb6\x77\x48\x97\xde\xd0\xfb\x77\xd3\xec\x7a\x75\x36\xfb\xd9\xd9\xab\xbd\xd2\x2c\x40\x44\x42\xde\xc2\xbe\xcb\x44\xa2\x08\x4c\x13\x69\x3e\x01\x02\xaf\xd0\x88\x77\x4c\x5b\x4d\x4c\x9f\x32\x04\x82\x14\x5f\x0a\x13\x8d\x68\xc4\xc6\xdc\xbf\x97\xfc\x24\xe2\xe5\xec\xf2\x1e\xb7\xe5\x5c\x75\x1e\x55\xb5\xea\x9d\xdc\x5a\xfa\xe3\xfb\x75\x3e\xa9\x63\xef\x68\xb1\xbd\x56\xd9\xbc\xf5\x1b\x4c\xee\x51\xb8\x73\x9a\x09\xe3\x4a\xe2\x9b\x80\x23\x1c\x60\x7d\x0a\xf1\x81\xc3\x87\x8e\x86\x69\x4b\x85\xb4\xaa\xf2\x9a\x41\x2b\x81\x49\x21\xc6\xe1\x38\x2d\xd6\x59\x12\x99\x24\x03\x38\xd4\x27\xf5\xca\x55\xe8\xd0\x75\x65\xbf\x8f\xdf\xaa\x32\xe8\x2f\x7f\x4a\x83\x8f\x46\x2f\xba\x31\xbe\x64\x93\x86\xa5\x6b\x76\xcd\x3d\xf3\x41\xeb\xbd\x69\x96\x10\x8d\x04\xac\x72\x96\xc1\x01\x46\xe3\x65\xcf\x90\x9d\xc8\xe2\x2d\x49\xc5\x30\x31\x63\xd1\x48\xa4\xd8\x35\x62\x81\x33\xac\x40\x63\x4d\xd9\xf7\xfc\x40\x7f\xfa\x0e\x3d\xd8\xe2\xf3\x2a\x9f\x7c\x51\x60\xe0\xa4\x0b\x27\x76\x37\xad\xc7\x0c\xdf\x50\x4d\x6c\x58\x62\x43\xb9\x67\xbe\x6f\x7e\xeb\x87\xdd\x05\xdf\xcc\xfc\xac\x23\xb5\xab\x4c\x14\x47\xff\xaa\xcf\x64\x2d\xa1\x40\x00\xd9\x50\x00\x81\x1e\xab\xba\x8c\x3d\x18\x52\xc0\xc3\xc4\x94\x51\x1c\x8b\x4c\x62\x42\xce\xb3\x44\x42\x89\x4f\xc7\xf3\xf9\xeb\x27\x26\x77\x58\xd7\x77\xc8\x03\xf5\xd0\xf8\xa6\x67\x87\xdf\xad\xd6\x31\xcb\x8c\x70\x73\x9f\x4e\x6d\x5e\xda\x71\xa7\xe9\xaa\xb7\x32\xff\x95\x53\x07\x07\x1f\x4b\x24\x88\x68\x1f\xdb\x4c\xe8\xe8\x91\xa1\x25\xb6\x2d\xfb\x82\x4a\xb8\x50\xf1\x43\x0e\x3a\x9c\xa4\x7a\xb2\x8a\xa0\xe6\x01\x3b\x0a\x6c\x02\x52\x07\x47\x95\xe0\xe1\xed\xd7\xea\xd5\x91\x26\x76\x7f\xa7\xe2\xc7\xc6\x9b\x57\xcf\x96\x44\x83\xdf\x66\xdb\x49\x25\x95\x0b\x53\xc7\x15\xba\x9c\x5e\xf5\x23\x9e\x26\x09\xa6\x1c\x21\x81\x5a\x48\x42\xc1\xe7\x1d\x0a\xab\x04\xb0\x31\x26\x3c\x13\x68\x82\x03\x3c\x3f\xa4\x34\xe4\x24\x3c\x4b\x69\xa6\xe9\xd1\xba\xf6\x74\x70\x4c\xeb\xf1\xfe\x0b\x59\xda\x97\xea\x71\xe5\xfd\x25\x3f\x97\x58\xf0\x4e\x85\x4a\x8b\x1b\xd4\x6d\xfd\x4a\xc3\xb9\x59\xa7\xb7\xbf\x5e\xb5\xd2\x9f\x99\x6f\x34\xa7\x16\x41\x90\x74\x22\x63\x2e\x40\x1e\x6d\x72\x32\x0e\xd9\x44\x8e\x12\x47\x0c\x64\x5e\x8b\x7d\x9b\xd7\x59\x4b\x32\x65\x15\xb1\xac\xcc\x73\x8e\x28\x10\x0b\xa5\xc0\x9b\x7f\x63\x6f\xad\x44\x66\xed\xbe\xf8\xab\x5a\x73\xca\xb7\xbf\x15\xef\xb9\xa5\x6a\x5e\x8d\x5a\x31\x33\xe7\x5f\x3f\xfc\x58\x62\xef\x10\x77\x47\x7a\x2b\x15\x56\x8b\x50\xa4\xaa\x0e\xc7\x62\x12\x9b\x3a\x89\x95\x38\xe6\x14\x0d\x00\x87\x66\xf4\x90\x50\x2a\x27\x40\x15\x59\xb2\xc1\x4b\x58\xe2\x2d\x9a\xa1\xd8\x0c\x2a\x95\x1e\x57\xdf\xff\x73\x48\xaf\xe7\x1f\x76\x06\xca\xd5\x3b\x39\xe6\x1d\xfa\xa1\x41\x34\x56\x59\xb3\xab\x4f\xc3\xf5\xea\x0b\x64\xde\xc4\xe8\xc9\x5f\x0b\xed\xef\xf7\xee\x87\x4f\x67\x7f\xe3\xe3\x5d\x42\xc1\x5f\xdf\xca\xd1\x33\xa8\x55\xb0\x45\x15\xfe\x48\xb9\x06\x2f\xdc\x28\xbe\xe1\x3c\xf7\x44\x8b\x25\x41\xc9\xda\x8d\x95\xc7\xf6\xda\x8e\xdf\xfd\xb1\xda\xa9\xca\xb5\x3b\x76\xda\xd0\xb8\x65\x34\xea\xea\xfc\x5b\x5d\x7b\xbf\xbb\xe0\x7c\xe6\x01\x09\xa9\xcb\x64\x88\x78\x14\x09\x89\xcc\x42\x3b\x11\x69\xdd\x15\x59\x4a\xa7\x22\x2c\xfb\x1e\x03\x1d\xdd\x86\x66\xe0\x21\x2e\x52\x79\xdb\x92\xf8\xc0\x85\xa1\x97\xa2\x4c\x5e\x50\xfd\xfa\xa6\x43\xd4\xdd\x03\x0b\xfe\x1c\xb5\xee\xd3\xc5\xc5\xf6\x74\x69\x7c\x63\xdf\xce\x7e\xeb\x4f\xf4\x3f\x58\xb5\xd2\xce\xd2\x73\x32\xef\x67\x90\x7a\x17\x8d\xd0\x0a\xc5\x50\xb4\x59\xcf\xd4\x09\xd1\x22\x1b\x53\xa2\xaf\x3a\xb4\x2a\xa9\x8e\xc9\xc4\xae\x29\xd3\x62\x2c\x23\xda\xa1\x78\x4f\xd4\x13\xe8\xa3\x0c\x76\x71\x25\x20\x49\x81\x46\x4b\xda\xfd\xb4\x74\x4e\xb1\xe2\x1f\xbe\xa2\x0f\xdc\x34\x7f\xea\x96\xcf\xf8\x5b\xa3\x7a\x7d\xbd\xea\x7c\xd1\x78\xca\x13\xfb\x52\xb2\x4e\xf6\x0a\xe5\xa6\x3a\x93\xaf\x57\xaa\xd6\x62\x5c\x7f\x7a\x53\xf3\x09\x3b\x41\xd7\x3b\x52\xf7\x0e\xaf\xe6\xff\xa6\x71\xf5\x1f\x5b\xa4\x37\xf5\x32\x72\xe0\x47\x61\xcc\x43\x97\x36\x59\xa4\xd0\xa1\xae\xaa\xba\x13\x71\xd8\x77\x2d\x21\xb1\x03\x64\x46\x3a\xb2\x19\x4e\xd5\xe8\x44\xc1\x8e\x99\x50\xe8\xe9\x7d\x01\xbd\x2a\x8e\xfb\x21\x5b\xaf\x32\x9f\xbf\xfd\xc9\x80\xeb\x9d\x4a\xff\xde\x7e\xd4\xb5\xef\xd4\x0f\x5b\xcd\xd9\xb4\xac\xe9\x86\xcb\x65\x1a\xa5\x77\xf8\xca\x9b\xbe\x62\x50\x21\xd1\x2c\x1b\x5b\x20\x84\x89\x60\x12\x5d\xf1\x22\x8f\xd5\x28\x8f\x09\x01\x95\x78\x82\xc7\x51\x14\x0f\x03\x5e\x70\xc2\xc0\xb1\x32\x1a\xbe\x16\xdf\x57\xfd\xc8\xc7\x27\xb4\x5d\x7b\xbb\xd3\x3f\x75\x9e\xac\xae\x2c\x96\x6f\xf1\xd9\x92\x7d\xcb\x35\x6e\x38\xf2\x44\x91\x7d\xfa\x9d\xdd\xe9\x4d\xbd\xa1\x16\x99\x58\x76\x20\x2b\x03\x95\x09\x13\x48\x49\x82\x0a\x59\x49\x45\x81\x6d\xd2\x94\x6b\xf0\xc4\x61\x12\x95\xd1\xa2\x58\x89\x40\x88\x29\x2f\x70\x9f\x4e\xbd\x27\x9b\xaf\x3b\xba\x7c\x4d\x99\xc5\xde\xe4\xab\xdb\xf7\xce\xde\x7a\xc3\x5d\xf8\x60\x1f\x77\xae\xf4\xe6\x26\x3b\x4b\xde\x96\x6f\x74\xf8\x2b\xbd\x27\x80\xc8\x01\xad\x25\x9c\xa9\x79\x6c\x14\x40\x00\xd4\x30\x12\x89\xe8\x00\x35\x8e\x2c\x2d\x89\x03\x1d\xf0\xba\xa6\xb0\x34\xe4\x45\x02\x5c\xd3\x82\xbc\x96\x1a\xba\xd8\xae\x0e\xbb\xb2\xd8\xe3\x76\x1f\x77\xbb\x61\xe4\x38\x54\xf2\x14\xf3\xd2\xbd\x8e\x0b\x6e\x57\xbd\xd1\xbe\xd3\x6b\x1d\x6a\x1c\x6d\x9b\x2d\xbd\x4c\x0e\x3e\x46\x36\x67\xb9\x82\xc9\x6b\xac\x06\x9c\x40\x06\x40\xd1\xa0\xe0\x85\x91\xef\xf2\xa1\x4b\x1c\x40\xb9\x3e\x74\xb1\x80\x91\x08\x0c\xd1\x80\x36\x0c\x9e\x8e\x69\xdc\xf3\x71\xfe\x37\x27\x89\x89\x7c\x64\xdc\xe7\xeb\xb6\xd8\xdc\xeb\x27\xee\x95\xc8\xfd\xf5\x8a\x3c\x9f\xcf\xab\x3f\xf9\xa7\xd2\xe5\x7b\xa6\x59\x40\x4e\x13\x03\x40\x2c\xde\xb7\x7c\x23\x94\x20\x13\xfa\x86\xeb\xc8\x3a\x67\x85\x9e\x68\x03\x84\x01\x42\x8e\x40\x31\x86\x02\x55\x04\x02\x5f\xb1\x50\x9c\x41\xae\x69\xbc\x3a\x4b\xa1\xaf\x9c\xec\xf3\xf3\xdf\x7e\x6d\x6a\xef\x9f\x92\x4e\xf3\xc3\xe2\x63\xff\x58\xf1\xd1\xac\x53\x9d\x27\x57\xad\x91\x74\x5b\xf0\x44\xf1\x51\xff\xdd\xca\x7d\xe5\xb3\xd5\x77\x3c\xbb\x7d\x7b\xf5\xf7\x26\x75\x1d\x5e\xb2\xcd\x85\xfb\xcf\x6e\x1e\xe3\xea\xc9\x86\xfc\x3f\xdf\x1f\xf4\x61\x9a\x51\x13\x8a\x22\x12\x97\xc5\x50\x53\x12\x56\xc1\x14\xcb\xd3\x0a\x89\x08\x97\xc0\x58\x07\x89\xc5\x48\x36\x9d\xf8\xae\xa5\xb9\x20\x0c\x1d\x24\x47\xb4\x9f\xe2\x26\xef\x5d\xa2\xe4\x85\x3b\x03\xee\x34\x69\x7c\x7b\x6d\xb7\x03\x55\x4a\x3e\xbf\xe7\xc7\x35\xfc\x38\x82\xfc\x36\xef\xbd\xd3\x7f\x99\xb1\x67\x40\x9a\xe7\x30\xd8\xb5\x71\x48\x28\x5b\x54\x02\x59\x51\x02\x4e\x32\x31\x45\x33\xa6\xad\xfb\x94\xac\x0a\xa1\x11\xc5\x86\xc8\xaa\x5a\xa0\x53\xac\xed\x79\x44\xf4\x52\x70\x0b\xa0\xd4\xb4\xe2\xee\x43\x73\xbb\x1e\x1f\x78\x6b\xc9\x97\xd7\xbf\xcd\xd6\xf2\xaf\x13\x27\x5e\xae\xb3\xb0\x53\x81\x99\x35\xbb\x90\xa1\x85\xd2\xac\x90\x47\xdb\xbc\x8f\x21\x81\x0e\x65\x10\x56\xf1\xcd\xc4\x34\x69\x0e\x18\x0c\x15\xab\x91\x61\xd1\x0c\x56\x93\x50\xc0\xb1\x66\x38\x12\xc0\x48\xd7\xd8\xc4\x49\xad\x52\xe0\x77\x1a\xb3\xcf\x04\x45\x96\x7e\xdd\x71\xc3\x9c\xd5\x7f\xbf\x52\x77\xe2\xcf\xfb\xa7\x77\x1b\xd4\x7a\x49\x8b\xcd\xa3\xb2\x4f\x79\xe5\xc5\x29\xe9\x0d\x0e\x04\x19\x1f\x78\x82\xe1\xba\x89\x2c\x8a\xb4\xef\x28\x01\xe0\x35\x8e\x87\x14\xe3\x7b\x54\x22\xc6\xae\xa3\x51\x08\xf9\x71\x28\x2b\xb2\xc1\x5b\xff\x07\x26\xfd\xbf\x54\xf2\x2e\x4e\x9b\x57\xf3\xab\x49\xc3\x16\x26\x93\x3b\xad\x6a\xd0\x7f\xd1\xa4\x4e\x05\xb7\xbd\x34\xf1\xce\x2b\xa5\xe6\x77\x79\x26\xf9\xbb\x66\xe1\xf4\x1e\x5a\x8d\xe8\xb1\x16\xd1\x32\x31\x78\xc1\x50\x2c\x09\x25\xbc\x1f\xd8\x91\xeb\x44\x94\x64\x5b\xba\x16\xcb\x91\x8e\x0c\x4b\xa6\x42\xd9\x33\x23\x11\x10\x82\x9f\x0e\x8e\xbf\xe7\xad\x3d\xbd\xf1\xad\x59\x47\x57\xd7\xfa\xd4\xf9\x2d\x6f\xae\x59\xef\x74\xa2\xdb\xef\xc8\xb9\xbd\x4c\xfd\xdd\x53\x66\x96\xdf\xf0\x20\xcd\x4e\xa9\x0e\xad\x78\x8c\x14\x86\x89\x44\xe9\x94\xa5\x52\xd8\x05\x92\x1f\xc4\x80\x47\x41\xcc\x05\x42\x40\x6b\xbe\x14\x7b\x86\x6a\x00\x33\x49\xa8\xc8\xb1\x0c\x25\x75\x46\xaf\xba\xb3\xf6\xb2\xed\xf9\x67\x70\xe5\xae\x9e\x69\x29\x8f\x8e\x56\x3f\x97\xed\x54\x57\x6d\xeb\xb9\xef\xea\x78\x45\x85\x17\xcf\x55\xc8\xbc\xb0\x5f\xea\xe0\xb0\x02\x4f\x60\x5d\x17\x98\x00\xfb\xaa\x8b\x65\xd7\x61\x11\x2b\xa8\xac\x20\x9a\x89\x6f\x58\x2c\xab\x32\x46\x10\x44\x9c\x6b\xda\x8e\x15\x99\x76\x90\x22\x38\xce\x35\x5a\x44\xda\x5d\xba\xf2\xf6\xa3\xda\x63\x9d\x29\xd3\x6e\xde\x79\xf0\xe0\x98\x96\x5d\x78\x77\x45\xe3\xa2\x77\x97\x7a\xc3\x1e\xbd\x98\xde\x25\xcb\x9c\xeb\x84\xac\x1a\xfa\x2e\x21\xb1\x43\x69\x0c\x66\x09\x1f\xd2\xae\x2d\x2a\x74\x60\x19\x66\xec\x30\x1c\xc7\x44\x90\xe8\x12\x72\x03\x0b\x68\x54\x92\xba\x23\x56\xf1\xeb\xbc\xcd\xfa\xd5\x2a\x9f\xd4\xac\x29\xb1\xc9\x78\x7a\xdd\xf8\x87\xdd\xa6\xe5\x3d\xf3\xcc\x45\x6b\x6c\x5b\xcd\x5b\x72\xcd\x4f\x33\x12\xc9\x8f\x59\x5e\x63\x31\x08\x59\x9a\x35\x0c\x8a\xc3\x84\x84\xb6\x2c\x12\x96\x50\x2a\x52\x7d\x8f\xd5\xc5\x40\xd3\x13\x47\x42\xb4\xe7\x41\x46\xf6\xec\x0c\x66\x29\x7d\x5f\x3c\x76\xeb\xdb\x02\x6b\xb3\x4e\xba\xfb\x6d\xd6\x63\x6d\x07\x4e\xdf\x5d\x8c\xce\x7b\xf5\xfc\xa4\x9a\x7b\x3f\x7b\x65\x74\xf7\x6e\x5f\xbc\xf1\xe4\xaf\xb7\x7f\xfa\xcb\xd7\x4d\xbb\xff\xf9\x82\x99\xad\xed\xe5\xa2\xdb\xb6\x4c\xba\x50\x77\xe3\xd8\x05\xfb\x6b\xa0\x96\xd9\x17\x67\xaf\x01\xed\x7e\x4f\x64\xa6\xf7\x17\x2b\x5b\x8b\xff\x70\x4f\xcf\xd1\x61\xd1\x85\xa0\x48\x97\xb1\x27\xe9\xae\xee\xf8\xe6\x4d\x46\x7e\x35\xf6\xe6\x81\x01\xb7\x9e\xcb\xbc\xe4\x77\x6a\xba\x8c\xcb\x07\x6c\x60\x88\x40\x91\xe8\x50\x35\x1d\xdd\xb4\x4c\xc6\x05\x81\x12\xfa\x36\xa1\x59\xc1\x77\x78\x14\xaa\x8c\x83\x88\xe8\xf3\x02\x0d\x5c\x94\xa2\xa1\xf2\xfd\x85\x1d\x33\x86\xb6\xe9\xb6\xb4\x4c\xee\x03\x4b\x2a\x35\x58\xbb\xed\xc3\xaa\xcf\xc3\xb2\x1b\x46\x1c\x2d\x65\x1f\x6a\x39\x64\x4d\xdb\xcc\xf7\x35\x53\x3b\xfb\xe9\x6a\x18\xdb\x34\x8d\x34\xcd\xb3\x1c\xde\x0f\x79\xce\x52\x15\x1d\x48\xa2\x47\x20\x87\x00\x6b\x52\x7a\xe8\x62\xc6\x95\x18\x93\xd8\x14\xaf\x6a\x29\xb4\x0e\x7f\x7f\x61\x4b\xb7\xe7\x8b\xbd\xfe\x72\x2d\x7a\x73\xff\x86\xfc\xcc\xef\x8f\xcd\xda\xfc\xc6\xe2\xd1\x65\x7f\xc8\x37\x0c\xb6\x2e\x04\xb3\x64\x1e\x14\x9d\x32\x33\x85\x0e\x63\xcb\x18\x38\x80\xa7\x0c\xa0\x9b\x2c\x50\x65\x16\x50\x58\xe3\x91\x24\x07\x58\x61\x5d\x98\xd8\x7a\x20\x7b\x61\x14\xd8\xac\x87\x5c\x0d\x86\x4f\xa9\xde\xff\xd3\xf8\x6e\x70\x8b\x9c\xd9\xf2\x67\x79\x12\xb1\x7e\xba\x79\xcb\x39\xcd\x6f\x28\xfd\x9b\xd4\x71\x0b\x0c\x6a\x5c\xb2\x76\xf6\xa5\x97\xfb\x9f\xac\x7a\xb7\xd0\xb3\xe6\x17\x3d\x76\xff\x76\x23\xf3\x4e\x0a\xa9\xdd\x39\x58\x5d\x67\x39\xdb\x32\x1d\x40\x8b\xb2\xac\x69\xbe\xc7\xca\x90\xe6\x35\x1d\xb1\x91\xa1\x69\x96\x8d\x30\xe0\x68\x5f\x57\x59\x4f\x45\x6a\xe2\xf2\x7e\xea\x09\xeb\x9c\x9b\xc5\xfb\xac\x1c\xf8\x43\xa5\x43\x9d\x07\xbb\xe2\xde\x47\x13\x50\xf3\x5a\xd3\xdf\xbd\x50\x7b\xe2\xf6\x03\x9d\x8e\xae\x1f\xb7\x3e\xbd\xcb\x86\xc8\x0b\xbd\x50\x0e\x63\x86\xa7\x58\x62\x59\x96\x9a\x48\x66\xe4\x22\x9f\xa3\x28\xc1\x96\x44\x9d\x02\xa2\x17\xf1\xc0\x56\x4d\x11\x38\x58\x91\x00\x9f\x01\x81\xfe\x4a\xe1\xcf\xba\xcd\x9d\x3b\x7e\x6c\xa5\x47\xa5\xbb\xf9\x5f\x0c\xa8\x5e\xb9\xf3\x96\x37\xf2\xf7\xfc\x65\x65\xf8\x99\x54\xb1\xec\x57\xa5\x9b\xa7\x59\x34\x9b\xf0\x48\x8b\x5d\x2b\xe0\x23\xc3\x08\x74\xac\x23\x83\x49\x88\x16\xc9\x58\x91\x84\xc0\x8d\x35\x9a\x17\xb1\xc9\xc7\xbe\xa7\xda\x5c\xec\x49\xa6\xc0\xa6\xce\xc1\xef\x3d\x98\x39\xe5\xa5\x2b\x59\xaf\x98\xb7\xbe\x1b\xf5\x7a\xc5\x8f\xfd\xd9\xdd\xfb\x76\x2c\x95\x6b\xb0\x5a\x72\xda\x91\xee\xb3\xab\xcd\xc8\xbc\xc0\x4d\x6a\x7f\x9f\xd8\xb0\x63\x99\xb0\xa1\xce\xb0\xa2\x44\x04\x5b\x91\x42\x85\x17\x75\x43\xa4\x64\x96\x91\xa8\x90\x31\x65\x05\x98\x82\x08\xc4\x88\x87\x34\xd4\xf5\x0c\x18\x3e\x57\x5b\xd5\xef\xa3\xb9\x3b\xaf\xcd\xd5\x9a\xbc\x27\xd6\xfb\xee\xc5\x49\x15\x06\x96\xac\xfd\xce\x84\x89\xc3\x8b\xf6\x7f\xbc\xb9\xd2\xd8\x34\xfb\xdd\x6b\x08\x86\x12\x8c\x62\x57\x64\x7d\x5a\x10\x9c\x84\x95\x62\x1e\x40\x17\x06\x4e\x62\x31\xd8\xf4\x2d\x1a\x25\x30\x31\x88\x49\xb3\x8a\x68\xaa\xb6\xf1\x34\xe7\xe4\x9f\x46\xea\x83\x5b\x0c\x1c\x93\xe5\x7f\x9d\xe0\x3f\x97\xb5\xfd\xed\xe5\xbd\x0f\xde\xfe\x6b\xf7\xd9\xa2\xb5\xeb\x1f\x3f\xb9\xa3\xdc\xc3\xdf\x9a\xdd\xa8\xad\x1f\xcf\x53\xf9\xf3\xdb\xcf\xc2\xa3\x69\x66\xd6\xa8\xc4\x21\x34\xe0\x22\x87\x95\x13\xdb\xa6\x88\xa7\x39\x76\xc4\xfa\x94\x05\x19\x99\xd2\x05\x24\x10\xc9\x36\x0c\xa2\xd2\xc4\x66\x64\x91\x75\xf5\x0c\xc8\x1b\x39\x86\x5f\x79\xa7\xd6\x8e\x6d\xd5\xae\x9b\x23\x36\x95\xfa\xb0\x58\x33\x1b\x6f\xc5\x85\xb7\x96\x3e\xbc\xeb\xdd\x3e\x37\x37\x61\x75\x78\x9a\x75\x12\x45\x5e\xa7\x24\x44\xc9\x82\xad\x30\x38\x62\x3c\x2e\xd0\x44\x57\x09\x03\x44\xcb\x42\xec\x68\x52\x40\x62\x51\x80\x20\x82\x11\x27\x71\x16\xeb\xf8\x7c\xea\x99\xaf\x9a\xb3\x54\x31\x6a\x5b\x50\x4a\x78\x7f\x52\x34\x62\xc2\xd0\x5d\xdf\x5f\xa8\x70\xbb\xcc\xa3\x62\x0f\x1a\x1e\xbc\x58\x5e\x2e\x58\x6a\x43\x9a\xe1\xba\x21\xe5\xfb\x8e\xab\x24\x01\x36\x42\x1d\xca\x66\xa8\x44\xa1\xa1\x0b\x51\x14\xcb\xbc\x4b\xb1\xaa\xed\x32\x5c\x40\x69\x5e\x84\x00\xc6\xb6\x93\xd0\x19\x38\x5d\x6e\x28\xb3\xea\x60\xa3\x73\xe5\x9f\xbd\xf3\xc1\x2d\x7a\xca\xb0\x43\x37\x6e\x0e\xfe\x66\x70\xd6\xec\x6b\x47\xbf\xb7\x7d\x36\x78\x3c\x70\x5f\xe6\x35\x0b\x52\x2b\xf8\xc5\x4c\xac\xb2\x82\xaa\xb2\x81\x83\x11\x0f\x04\xd6\xd1\x30\x6f\xf1\x90\x18\xb6\x8d\x12\x48\x40\x28\x8a\x34\x63\xb1\x96\x25\x40\x3d\xd1\x42\xca\x48\xfd\xb5\xe7\xad\x3b\xbd\x79\xc4\x88\x25\xbf\x1e\xef\x93\x7d\xfc\x99\x6e\x43\xb3\xec\x5b\x7f\xa6\x78\xf7\xda\x79\xfb\xf5\x2c\x31\x73\x4a\x89\x02\x5b\x32\x4f\x55\x4d\xad\xac\x65\xdb\xb6\x90\xc4\x5c\xe2\x62\xdf\x09\x00\x21\x54\x42\x42\x35\xd0\x5d\x05\xdb\x26\xf1\x28\x41\x65\x1c\x4e\x0b\x4d\x8a\xd5\x19\xcb\x41\xb6\x67\xf8\x4f\x11\x28\xff\x69\xb6\x3e\xb8\x45\xee\xdc\xb9\x9b\x3e\x89\xad\x2c\x85\xce\x9c\x1b\xd8\x2a\xd7\xd4\x83\x8d\xf2\xa1\xce\x1d\xde\xeb\x3d\xbf\xd0\xe8\x06\x0b\x3a\x9b\x43\xd6\xe3\xda\xd1\xd1\x83\x1f\x64\xde\xca\x3b\x35\xfd\x0a\x12\x85\x86\x62\x88\xbd\x24\x12\x4d\x53\x08\x65\x01\x11\x88\x1d\x2d\xb2\x78\xc3\xd1\x80\x26\x05\xc8\x11\x3d\xcf\x50\x15\x17\x2a\x12\xd2\xf5\x0c\x3c\xf6\xf2\xd4\x7d\xb7\xf1\xfa\xf5\xc3\xd7\x4e\xa9\x3a\xe5\x93\x1e\xb3\x7e\x38\xff\xd5\xcd\x7b\xf9\xd7\xa2\xad\x35\x06\x5c\x5f\xfa\xd2\x33\xfd\x1b\xa7\x37\xa6\x78\x47\x27\x8a\xa5\x5b\x3e\xad\xe2\xc0\xb7\x02\x3a\x21\x11\xc3\x38\xe8\xff\x63\xed\xbd\xc3\x75\xb8\xba\xfe\x71\xbd\x26\x4a\xf4\x12\x9d\x10\x7d\x4f\x13\x04\xd1\x22\x7a\x12\xd1\xa2\x4d\x9f\x3d\x7d\xf6\xb4\x3d\xa3\x84\x23\x7a\x17\xa2\x86\x90\x20\x88\x5e\x23\xc2\x51\x83\xe8\x9d\x44\x09\x12\x3d\x5a\x10\x8e\xf0\xbb\x9e\x37\xdf\xe7\x4d\x3c\xee\x73\x3d\xef\x75\x7e\xf7\xbf\x2e\x7f\xac\x33\xf7\x5a\x6b\xaf\xf2\x59\x9f\x8f\x10\xa8\x06\x81\xcc\xff\x51\x18\x85\xa6\x8a\x31\x29\x3a\x8a\xee\x62\x1d\xc4\x30\xb1\x4f\x9d\x78\x78\x69\xdd\xad\xb4\xab\xe1\xfe\x0e\x75\xe7\x0c\xe9\x3f\x72\xe0\x87\x25\xc6\x94\xad\x7c\xe2\x07\xbe\xe1\x4b\xad\xdc\xe1\xfb\x3b\x31\xc9\xf5\x29\x60\x4b\xbc\xef\x51\xaa\x6e\xa8\x26\x0a\x90\xe7\x87\x92\x48\x48\x98\x8d\x7c\xcf\x11\x2d\xc9\x35\x23\x31\xe6\x34\xc7\xa0\x88\x28\xb0\x79\x85\xf7\x79\x3b\x71\x04\x57\xfa\xba\x34\x37\x6d\xd8\xe3\x79\x0d\x4a\x3c\x5b\xeb\x15\xe4\xae\x9e\xb0\xb3\xc2\xb6\x6b\x4e\x5f\xce\x2d\x46\xad\xc6\xf7\x2a\xd2\x2e\xb9\x69\xde\xa3\x80\xc0\xb9\xb6\xc1\xda\x40\xa1\xb1\xaa\xd2\x71\xac\x04\xb2\x07\x91\x1c\xc8\xbc\x09\x64\x49\xd0\x19\x4d\xd2\x0c\xd3\x55\x63\xce\x03\x31\x0f\xe2\x17\x60\xc6\xff\x6d\x79\x93\xd2\xbc\x69\xae\x4c\xff\x71\x4b\xdc\x75\x68\xcf\xac\xf7\x1e\xb4\xb8\xd3\xf6\xed\xb7\xb2\x96\x78\xba\x93\xe7\x5f\xde\x36\xf6\xc9\x95\xcc\xef\xf7\x6e\xb0\xa9\xce\x27\x6b\x9a\x4e\x48\x6e\x9e\x32\x48\x6c\x89\x94\x11\x46\x2e\xad\x07\x48\x53\xa0\x45\xb0\x5e\x20\x00\x1d\x11\xc0\x57\x18\xd9\x89\x43\x22\xa0\x4d\xce\x0d\x04\x4c\x8a\xae\x4f\x23\x3a\xb1\x4f\x55\x58\xbb\xf7\xc7\xe3\x67\x5f\x99\x75\xb3\x7d\xa6\xb9\x6c\xdb\x25\x1f\x14\x99\x7f\xb7\xdb\x95\xda\x6d\x86\xa5\xbc\x19\xff\x51\x68\x44\xb1\xc6\xc9\x0d\x05\xd9\x06\x4e\x64\x3a\x11\x63\x42\x2c\xb3\x8a\x8a\xf4\x7f\x65\x5a\x43\xc7\x21\x36\x80\x6a\x98\xaa\x86\x3c\xdb\x0a\xcd\x48\xc2\x04\x47\x00\x5e\xd1\xd2\x09\x85\x7e\xa9\x70\xd9\xda\x01\xe3\xbf\xdf\xb0\xa8\x4e\xf6\x5e\x07\xfe\x58\xb8\xfe\xfe\x2b\x9f\xba\xc1\xb3\xe2\xf5\x1e\x8c\xcc\x56\xff\xc0\x98\x24\x1f\x0a\x18\x0a\xe3\xd3\xac\x1d\x12\x61\x1c\xfb\xc8\xd1\x18\x6c\x4a\x2a\xa7\x04\x96\x4a\xa9\x00\x8a\x61\x88\x11\x69\x70\x0c\x6f\x98\x82\xe7\x60\x4c\xc2\x58\x49\x3c\x7c\xf9\xe6\xf3\x5c\xcb\xdb\xd5\x1d\x7e\xe1\xd8\xf0\x0f\xef\xeb\xbb\x8b\xef\x28\x7e\xba\xfb\x2b\x43\x41\x89\xaf\xb4\x7b\x9b\xef\x5e\x3b\xf0\x4b\xc6\x05\x6b\xd3\xe9\x7f\x29\xcc\x0a\x9c\x03\x64\xc6\x54\x3c\x5b\x97\x35\x15\x2b\x9e\x6b\x68\xaa\x67\x92\xb2\x17\xd2\x58\xd7\xd8\x90\x45\xbc\xa2\x9b\x92\x83\x7d\x1f\x26\x60\xb2\xd9\xd5\x6a\x1f\xfb\x51\x8d\x61\x83\x95\x7d\x17\x32\x0f\xad\xf6\x38\xa8\xf1\xab\xda\x5c\x3c\x53\xfd\xa5\xc7\x64\xcf\xc2\x60\x42\xcf\x8c\x73\xfd\x27\xfc\xd2\x48\x27\x29\xc7\xf1\x83\x18\xd0\x74\x40\x21\x0a\xe8\x04\x21\xfa\xac\x16\x87\xb1\xa3\x44\xb6\x44\x99\xb1\x0d\xf9\x10\x63\x9e\xa7\x7d\xd2\xa6\x7d\xf8\xf7\x49\xc6\xe6\x9c\xff\xb7\x65\x6a\x4a\xb3\x72\x03\xb7\x3f\x5f\x89\x5e\x6b\xd6\x22\xec\xff\xec\xea\xaa\xf7\xae\x2c\x19\xf4\x56\xf6\x8f\x3b\x54\xe9\xd8\x32\xd7\xb2\xcd\x1d\x7b\xaf\x98\x5f\x76\xf0\x89\x09\x0b\x32\x8e\xf1\x4c\x18\x05\xa6\x22\x23\x55\xf6\x08\xde\x63\x62\x8e\x70\x08\x29\x88\x09\xc7\x15\x79\xc3\x23\x4d\x89\x05\xb1\xc6\x52\x9a\xa9\x38\x7e\x0c\x62\x2a\x0a\x68\x99\x77\x94\xc4\x51\xb0\x64\xe2\xdc\x1c\x5b\x8a\x5c\x80\x43\x0f\xce\x58\x36\xdb\x5b\x59\xa8\x68\xcb\x02\x29\xbf\x1d\xd8\xd1\xb3\xe0\x92\x7d\xaf\x4d\x4e\x9d\x9e\xdc\xa6\x8c\x0d\x14\xa0\x12\x28\x8a\x54\x8b\x8a\x2d\x46\x34\x15\x12\x44\xa6\x64\x7b\xb2\x2c\x3a\x9a\x23\x20\x45\x35\x65\x93\x66\x29\x55\x86\xac\x6d\x7a\xae\xc8\x51\x89\x1f\x84\x57\xda\xde\xce\xdb\x3d\x7f\x91\xcd\x15\xd8\xec\x57\xf8\xeb\x6f\x4c\xfb\x42\xab\xb9\xf0\x8f\x46\x59\x46\x7f\x7f\xa0\x7f\xd3\xd7\xb7\x35\xca\xf8\x4e\x3f\xf1\x05\x96\x4b\x7b\xa4\xe8\x0b\x21\x69\x22\x89\x30\x0d\x0e\x9b\x9c\x0f\x03\xa8\x33\xc8\x51\x25\xde\xe5\x45\x8b\x8e\x03\x46\x8b\xc2\x50\x8b\xc8\x38\x30\x22\x31\xb1\xd9\x59\xcb\xe3\xde\xdf\x6e\xdb\x3f\xb7\xde\xfb\xa3\x52\x6b\x0c\x39\xd4\x6c\x70\xa9\xab\xb5\x5a\xfd\xd9\xeb\x0d\xcd\x3f\x73\xee\x93\xe9\xf2\xfe\x24\xd3\x78\x00\x04\x83\x30\x8a\x02\xd6\x8c\x55\x9f\x08\x79\x4a\xa6\xc9\x58\xd2\xb4\x38\xb0\x62\x0a\xb8\x90\x90\xfd\xc0\xb5\x08\x2f\x96\xd8\xd0\x95\x58\x0e\xa5\xd3\xae\x14\xbd\x57\x61\xdb\x87\xb5\x0a\xfc\xdc\x70\x7b\x83\x97\x82\x51\xcd\x06\x16\xfc\xb2\x7c\xef\xfc\x6f\x95\x09\x98\xf5\x5d\x9f\x94\x3d\xf5\x66\x92\xef\x04\x3c\xda\x66\x23\x14\x98\x11\x0b\x64\x59\x12\x09\xdb\x74\x45\x4c\xb1\x8a\x2f\x2b\xd0\xb7\x25\x5d\xd2\xa0\x11\xf0\x94\x28\x78\x8a\x22\xca\x2e\x81\xfe\xe2\x90\x7b\xae\x12\xfd\x6f\x5b\xf7\x94\xe6\xb9\xde\xca\x54\xe0\xf9\xe7\xb7\x54\xd9\x6a\x77\x17\x8e\x9f\x74\x7f\xd6\xbc\x2b\x1f\x4f\x5a\xb4\x79\xfe\xca\x61\x73\xf6\x9d\x2c\xe6\xe6\x50\xf9\xd2\x79\x3b\x9d\x69\x9e\x71\xd4\x64\x62\x42\x69\x4d\xd5\x58\x51\x72\x55\x5e\xd2\x09\xce\x89\xd4\x40\x60\x6c\xc7\x20\x45\xc6\xa6\xc4\xd0\xa7\x3c\xc8\x13\x81\x8e\x1d\x40\xf0\x14\xb0\xfe\xd5\xdd\xc8\x89\x23\xf8\xca\xe6\x63\xe6\xa0\x75\x59\x8f\xcd\x2f\xd8\xa3\xee\xc7\x4b\x94\x1e\x57\xfd\xcd\xc6\xe4\xa9\x4d\x5e\x59\x52\x2c\x67\xd3\xaf\xdc\xa7\xc9\xcd\xae\x9c\xef\x18\x98\x0e\x50\x40\xc6\x21\xc1\x32\x96\xeb\x45\x98\x70\x51\xec\xda\x4e\xa8\x3b\x21\xb6\x39\xde\x67\x3d\x36\x20\x49\x43\x75\x78\x11\x39\x3e\x0c\x13\x9b\x3d\xad\x38\xd8\xbe\x77\xe9\xc9\x26\xbf\x4c\x3a\xd2\x2c\xf5\xf6\x9a\x3e\x7b\xb8\x49\x3d\xdb\x3c\xb8\x76\xf8\xa7\x5d\xf4\xb1\x07\x29\x85\x92\xcb\x02\xc9\x9a\x44\xa8\x20\xc1\x0f\x04\x4e\xf1\xf4\xd8\x43\x40\x08\x25\xc6\x13\x42\x08\x62\xc1\xe1\x3d\x51\x31\x69\x51\xa5\x43\xd6\xe7\xe8\x10\xfa\x9c\xf1\xff\xe8\xcd\x5e\x0c\x85\x27\x25\xc7\x3e\x6a\x5c\x2d\x67\x9f\xe1\x87\x4e\xfd\xfe\xce\xc1\x36\x13\x06\x3d\xda\x99\xbb\xcb\x89\x7d\x57\xf2\xf6\xac\xfa\x41\xfb\x85\xd9\xae\x25\xd7\x6c\xcb\x33\x24\x1f\xfb\x8c\x08\xb9\x80\x61\x08\x9d\x94\x5d\xdd\x21\x08\x8f\x20\x04\x57\x62\x80\x2c\x49\x1a\xa5\x40\x21\x64\x09\xce\x41\x8e\xa8\xd8\x9e\xf2\xbf\x66\xff\xfb\xf4\xf3\xbf\x2d\x85\x53\x9a\x35\x29\x30\xe8\xf9\x48\x38\x3e\xae\xe3\xc9\x9b\xb7\x7e\x39\x71\xaf\xf7\xa6\x29\xa5\xaa\x57\xea\x3b\xba\x46\xbd\x81\xa3\x7e\x1d\xd2\x69\x6e\xa6\xd9\xf9\xba\x2e\xfd\xfc\xe5\x24\xcf\x8e\x5c\xa8\xc8\x2c\xd6\x00\x0e\x63\x41\xe2\x79\x23\xa4\xb1\x12\x13\x31\x40\x48\x0e\x45\x48\x52\x91\x2e\xdb\xc0\x0c\x45\xc7\xc4\x20\x86\x98\x45\xe9\xf4\x64\xdb\xbf\x80\x5f\x64\xce\x11\x14\xaa\x32\xb8\xee\xdb\x2f\xb7\x18\x78\x6b\xe3\xb8\xde\x6f\x94\xec\x5e\x6d\x79\xc3\xa7\x65\x8f\x7c\x3a\xb5\xdc\x83\xe4\x46\x02\x09\x4c\x96\x03\xbe\x4c\x2a\x02\x8f\x3d\x51\xe2\x43\xcb\xa0\x39\x25\x12\x29\x9f\x76\x25\xc7\xf7\x30\x2d\x80\xc0\x51\xfc\x88\xf5\x4c\xa4\x03\x93\x4f\x47\x86\x38\xc8\xd3\x5a\xaa\x34\xfa\xbb\xad\x05\x5f\x5d\x34\x27\xe5\xdd\xe2\xfd\x0f\xd4\x8c\x4e\x8c\xa9\xb9\xfc\x5c\xa1\xcc\x70\xf0\x46\x66\xca\xd4\xe4\x7e\xed\x98\x97\x49\x9a\xb0\x74\x68\xe8\x6c\x60\xc0\x08\x45\x06\x63\xb1\x01\xc4\xa4\xea\x22\xd9\x0f\x79\xde\x93\x78\x43\x0b\x18\x9f\xd1\x1c\xa8\x87\xee\x3f\xb8\x25\x9e\x33\xbb\xda\xb4\x05\x73\xcb\x3f\xd9\x5f\x72\x46\xad\xca\x0d\xcb\xf6\x38\x7b\xe4\xc8\xe1\x73\x9e\xf9\xe3\xe8\xcb\x3b\x8e\xd5\x78\xb5\xe6\x87\xf9\x32\xce\x4f\x98\x58\x18\x17\x07\xba\xee\xe9\x1e\x21\x9b\x7a\x4c\xeb\x98\x55\x31\x1f\x5a\x36\x52\x2d\x95\x45\x84\x1f\x1b\x18\xd3\x8e\xc8\x22\x0a\x69\xb4\xe4\xf9\x3a\x05\xff\x2e\xfb\xff\xfd\x28\xfc\xb7\xad\x54\x4a\xf3\x26\x05\x0a\xfe\x87\xae\xe6\xc3\x7d\xb3\x7e\x3f\xb9\x76\x64\x6a\x9f\xfc\xeb\xa7\x4c\x4f\x5d\xde\xfa\xd6\x8d\xa7\x67\x5f\x1d\x2f\x65\x3a\xdd\xae\x64\x9e\x4d\x2f\xd7\x4d\x32\x59\x2d\xc4\x24\x25\xf1\x21\x04\x8c\x4d\x02\x8a\x0e\x44\x4e\x8f\x84\x40\x71\x5c\x48\x41\x4b\xc6\x90\x0a\x1c\x13\xca\x82\x41\x4b\x9a\x45\xc4\x02\x6d\x3d\x77\xcd\xf4\x0f\xb3\xf7\x66\x2b\xf6\x7b\xd3\xfe\xe3\x5b\xf3\x76\x5a\xfe\xb2\xed\xba\xce\x5e\x8a\x3e\xcc\x6a\x7c\xf4\xe6\xc0\x2b\x1f\xe7\x3d\x2d\xb5\xbe\xda\x2b\xb9\xa1\x20\xba\xbe\x23\xe2\x00\x4a\x11\x2b\xab\x11\x50\x02\xd1\x0d\x05\x9b\xe5\x5d\xd9\x89\x2d\x85\xd6\x29\x59\xb3\x4c\xd2\xe4\x9d\x88\x0b\x54\x32\x52\x0c\x35\x9d\x50\xe8\x5e\xfb\xcb\x59\xc7\x5c\xfe\xc8\xa9\x85\xcb\xbe\x5d\x46\x35\x6d\xe9\x00\x33\x38\xd4\x72\xee\x4b\x33\x3a\x83\x15\x6a\xda\xb6\x6c\xc9\x2d\xeb\x18\x20\xd1\x5e\xa8\x06\x3c\x6d\xf1\xba\xc3\x04\x1a\x6d\xcb\x48\x0f\x2c\x25\xc2\x80\x42\x9a\x27\xf8\x94\x68\xc8\xa4\xc3\x8a\x82\x16\x32\x04\xc1\xa2\x74\xd8\x61\x5a\xc9\x5b\xcb\x5d\x25\xfb\xac\x6f\x62\x37\x48\x83\xdd\x96\xad\x98\xb2\xb2\xfc\xec\x3b\xc5\xf3\xce\x6a\xd1\xf9\x9b\x99\xaf\xf4\xfb\x33\xc9\xea\x53\x9a\xaa\x44\x50\x94\x35\x8d\x90\x23\xc3\x17\x2d\xce\x94\x81\x09\x7d\x45\xb3\x69\x8e\x33\xe5\x18\x61\x09\x68\x98\x33\x08\x44\xda\x42\x48\x04\x0c\x7c\x71\x52\xf7\xdf\x56\xae\x29\xcd\x9b\x34\xf9\xcf\x50\x38\xb5\xfc\x7b\xfc\x63\x99\x34\xeb\x54\xde\xc6\x7f\xce\xca\x57\x6d\xd7\xc6\x5b\xdb\x3a\x7f\x74\x3e\xd3\xf9\xfa\x9d\x5a\x0c\x5b\xf4\xe3\xb6\x0f\x92\x4c\x93\x49\x40\x8c\xa1\x4d\x21\x41\xe0\x11\x72\xe3\xc0\x8a\x2c\xd3\xf2\x42\x27\xe0\x38\x44\x87\x3e\x2f\x18\x0e\x2d\x06\xae\x27\xca\xb1\x17\x62\xca\xe7\xc4\xc4\x3e\x35\x2a\xf7\x17\xdf\xfe\x59\x73\x44\xc9\xa8\xec\x3b\x93\x72\x5c\x7e\x2f\x3e\xae\xa2\x7a\x60\xc4\xfd\xcf\xf3\x5c\xaa\xdf\x79\xcc\x98\x0f\x92\x7b\x55\xc2\x89\x7e\x84\x7d\x8b\x05\x5c\x2c\x53\x90\x33\x91\x60\xd3\xb2\x14\xaa\xae\xe2\xcb\x6a\x18\x2b\x94\x25\x41\x86\x31\x3d\x3b\xc4\x32\xf2\x25\x4f\x14\x09\x3d\x9d\x6d\xd9\x9d\xef\x66\x6e\xcb\xb9\x9f\x7e\xff\xcf\x29\xdf\xe6\xab\xb4\xf4\xfc\x89\xbc\xe1\x57\x5c\xcd\x4f\x77\x13\xf5\xe7\xd2\x9d\xda\x3c\xfb\x32\xc9\xf4\x0b\xb6\x4b\xb2\x8c\x44\x72\xa4\xc4\xf8\x81\x05\x43\x82\x88\x59\x29\xb0\x63\x8e\x12\x19\x29\x00\x8e\x49\x28\x0c\x61\x21\xc5\xa4\xdd\x48\x16\x59\x83\x55\x12\x87\xc2\x01\xeb\x5a\xa1\x02\x4f\xbe\x8a\xbe\xf9\x61\xc0\xbd\x6f\xd3\x8e\xce\x3b\x94\x69\xc0\x68\xff\xe2\x8e\x39\x9f\x6d\x2e\x74\x79\xc8\xc0\xb2\xb9\x92\xfb\x2a\x04\x30\xd2\x02\xda\xe2\x34\xdf\x8b\x98\xc0\x50\x64\x16\xd8\x94\xa7\x68\xd8\x8b\x22\x8d\x11\x34\x48\x09\xbc\xec\x39\x2c\x92\x2d\x31\x08\xd9\x40\xfb\x4b\xc8\xf4\x7f\x9c\xe4\xcb\x37\xff\xb2\xb8\x34\x3f\xa0\x6b\xe7\x3a\x83\x3e\x36\xb4\x91\xd3\x0f\x14\xe9\xa4\x8c\xe5\x1b\x96\xbc\x3c\x6e\x53\xfb\xca\x62\xea\xbd\x2a\x03\x72\x64\x4b\x69\xbe\xf9\xe9\xb3\xeb\x53\x4b\x3f\x8f\x59\x10\xc7\x81\xd2\x67\xd6\x49\x5f\x76\x2d\xf4\x4e\x7d\x69\x5c\x5a\xfd\xbe\xea\xd5\xb6\x3f\xae\x60\x7a\x1c\xf9\xec\x6d\xa9\x56\xa5\x3b\x8b\x9e\x9b\xd9\xd4\x5f\xc0\xc1\xaa\x6d\x97\x33\x39\x46\x66\xce\x5e\xb0\x56\x9f\x83\x83\x7b\xef\xeb\xfd\xa8\xd1\xde\x21\xbf\x4d\xd9\xdb\xe2\xc6\x2e\x36\x4e\x32\xd8\xd4\xc7\x5a\x0c\x80\x19\x53\x1c\xc2\x1c\x6b\x1b\xb1\xc3\x5a\xbc\xc1\x19\xc0\x37\x90\x4e\xda\xbe\x48\xc4\xa4\x67\xaa\x91\xe1\x33\x92\x83\x39\x83\x4f\x20\xeb\xe1\x95\xe8\x7d\xb4\xd4\xeb\xeb\x1e\x1e\x7b\x5a\xa1\x57\xf1\x31\xaf\x1d\xcd\x3d\xe5\xd5\xba\x83\x3e\xa8\x5c\xa3\xd3\x8d\x46\x3b\x56\x2e\xd8\x9b\x25\xb9\x26\x1b\xc0\x97\x28\x06\x93\x36\x49\x41\xcc\x48\x08\xf9\xa2\xe9\xbb\x4a\x84\x08\x36\x26\x25\x46\xd4\x58\xc0\xfa\xa2\xcd\x4b\x9a\x86\x28\x5d\x45\x04\xa4\x13\xdf\x62\x49\x2f\xcf\xfc\x24\xfc\x2a\x57\x57\xb9\x48\xeb\xbb\x03\x97\xd7\x6d\xbb\xf4\xe5\x02\x7d\x9f\x9e\xa0\x0e\xa7\xbc\x6c\xa4\x6d\x49\xfb\xff\xb1\x33\x49\x68\xb6\x00\xac\x00\xf1\xdc\xbf\x5a\x36\xc1\xc6\x22\x07\xa2\x88\xf3\x09\x8b\x60\x43\x5d\x46\x58\xf3\x08\xc8\x9a\x36\x92\x3c\x56\xf5\x2d\xdd\x08\x08\x95\x4b\xa0\xae\xe3\xad\x9e\x7b\x6b\xee\xe8\x96\x39\x72\x7d\xd7\xeb\x6c\xfe\x3a\xfb\x6f\x18\x55\x72\xdc\x9a\x7e\xf4\xc1\x35\x9a\x9b\x7b\xf5\xd1\x06\x22\x7b\x72\x23\x86\x8c\x69\x49\x65\x19\xd3\x65\x28\x4e\xb5\x79\x43\xe2\x3d\xc8\x1a\x6c\x08\xdc\x90\x77\x84\x40\x37\x55\xc0\x91\x32\xa1\xd0\x96\x64\x09\x18\xf9\x4c\x94\x40\x43\xf7\xfe\xb8\x75\x37\x57\x2e\x2a\x78\xfa\xa5\xd5\x67\xce\xbe\xb9\xe8\xbb\x41\xa3\xde\xfb\xfd\xc0\x1b\xbb\x07\x2d\xd1\x66\xae\x6c\xe8\xfd\xba\x3b\xb9\x6a\x51\x9c\xce\x5a\x4c\x44\xc5\x14\x6b\x38\x4c\x64\x98\x88\x8b\x6d\xd3\x22\xa1\xae\x18\x64\x18\x59\x1a\xab\x8b\x81\xce\x71\x81\x40\x28\xae\xee\xa9\x8e\x67\xf2\x44\xe2\x73\x9b\x2e\x7d\x9b\xac\x38\x54\xf7\xec\xe3\xb7\xf5\x47\xee\xac\x73\x35\x6e\x7c\xfd\xa4\x40\x4e\xb3\xd9\xea\x9f\xce\x9f\xec\x8f\xbb\x95\xa8\x92\x71\xc4\x6b\xe2\x11\x9d\xa9\x05\x22\x22\x23\x82\xa5\x80\xce\x58\x00\xc7\xbe\x8c\x24\xdd\x10\xbd\xc8\x0b\x58\x8e\x16\x02\x95\x46\x22\x45\xb3\x1e\x25\x88\xb2\xe5\x71\x0e\x9d\x80\x6e\xbd\xd2\x67\xf5\xe6\x8e\x29\xf6\x59\xe7\x51\x43\x2e\xce\x7e\x15\xd4\xe8\xe7\xfc\xbe\xf8\x93\x2c\xfa\x2f\x57\x7a\x77\x28\x79\x78\xdf\x9c\x8c\x73\x2a\x26\xf6\x67\x32\x22\xf8\xc8\x14\x3d\xd2\x91\x11\xcd\x11\x5e\x64\x86\x2e\x27\xf2\x9c\xe7\xb1\x7c\x1c\x86\xbe\x66\x45\x66\x14\xd0\x36\x4f\xf0\x1c\x0e\x02\x8e\xd5\x5e\xf4\xe7\x0b\x47\xed\x3b\x95\xa6\xee\xd8\xb2\xa7\xcc\x7b\x63\x17\xfd\xdc\xf6\x74\x25\x2c\xcd\x5d\xb8\xeb\x68\x55\xfb\xad\xbe\x7b\x5a\xd4\x9b\xba\x25\xb9\xc3\x22\x2b\xb0\x74\x59\xb4\x08\x2e\x42\x1a\xed\x19\x38\xc6\x6e\x6c\xc5\xbc\x40\x1b\x8e\x6c\x43\xc0\xc8\xc0\x13\x18\x1d\xf9\x2e\xc1\x98\x01\xe7\xd2\x9a\x97\xce\x8a\x69\x3d\xbf\x26\x2d\xfb\xb0\xd5\xaf\x4f\xdc\x53\xf3\x69\x1d\xbb\x7f\x9e\x91\x07\xfb\x67\xfe\xb6\xe3\x9f\x8b\xbf\x3e\x57\xfe\xe5\x7c\xfb\xfb\x66\x5c\xf8\x34\x31\xa3\x36\xe2\xcc\xc0\xf5\x04\xca\xa7\x2d\xcb\xb0\x38\x3b\x44\x11\x42\xbe\x27\xf0\x4c\xc0\x41\x8d\x30\x38\xd3\x0e\x24\x83\x97\x29\x44\xb1\x5e\x40\x7b\xaa\x95\x4e\xc2\x5b\xb0\xac\x6c\x66\x69\xfe\x84\xd4\x9c\x90\x1b\x1a\x76\xc9\xb4\x7e\x89\x3c\xb4\xe1\x9c\xae\xdf\x1a\x9f\xae\xed\xb7\xf5\xfd\xad\x44\x72\xcd\xb6\xb1\x25\x0b\xb4\x15\xda\x90\x93\x11\x25\x0b\xaa\x0a\xa0\x08\xb1\x69\x12\x21\xaf\x91\x38\x76\x6c\x0e\x85\xba\x1f\xd0\x14\xc7\x48\x76\x1c\x08\x7a\x02\x07\xe9\x77\xf4\xc9\x67\x8d\x17\x75\xbe\xd2\x00\xa6\x86\x83\x27\x5c\xbd\xb2\xe3\x72\x63\x69\xf4\xb8\x42\xa6\x50\xaf\xef\x6d\x66\x59\x8b\x8c\x3f\x2d\x09\x1d\x44\x84\x84\x2d\xc3\xd0\xe7\x43\xc7\xa6\x0c\x17\x10\xb4\x24\x8a\xa4\x28\x09\x8e\xc3\x99\x40\xa7\x2c\xec\xca\x92\x66\x2a\x3c\xb2\x5c\x92\xf2\x03\x8b\x4b\x20\xc3\xb3\x62\xd1\xe8\x32\x2b\xfb\x4f\xd9\x77\xa8\xd1\x37\x79\x3a\xd8\xd7\x4e\x75\x03\x23\xbf\xfb\xf1\x7c\x9b\xcf\x0a\x10\xad\x0b\x5b\x55\x46\x24\x99\x09\xc1\x82\xbc\xe8\x53\x8c\x6b\x02\x68\x62\x56\x55\x64\xd7\x03\xb2\xe8\xc5\x96\x0b\x39\x19\x93\xa6\xe9\x4b\xba\xcf\xa8\x84\x2d\x39\x9e\xec\xeb\x8e\xf6\xdc\x40\xe4\x9f\x55\xca\x99\xa9\x95\x0f\xb4\xe4\x76\xad\xce\xdf\x42\xbc\xbd\xce\x2d\x94\x97\x64\xd7\x45\x13\x4b\xb3\xaf\x54\xff\xbe\xdc\xd5\x5a\x15\x8c\xfa\xcf\xc3\x24\xe6\xdd\xaf\x5c\x0c\x8e\x2f\x93\x7f\xf4\x8e\xf5\x8f\xce\x66\x5e\xd9\x31\x57\xeb\x22\xef\xbd\x75\x75\x26\x55\xf2\xf8\xca\xd5\x93\xc2\x9d\x49\xde\x0d\x87\x9c\xc0\xa8\xa1\xc6\xca\x9c\x1d\xc2\xc8\xf4\x08\x3b\xd0\xcd\x48\xd1\x48\x57\x01\x21\x09\x1d\x57\x85\xba\x0a\x65\x49\xf1\x22\x10\xfb\x16\x13\x4b\x89\x2f\x79\xaa\xf7\x9d\x35\x48\x3a\x96\x96\xb2\xed\xfa\xec\x4f\x96\xce\xb4\x2a\x68\x85\x2a\x36\x6f\xb8\x64\xe3\xa9\x93\xdf\x36\xa9\x74\x69\xd2\xfa\xe4\xb2\xf7\xb3\x2e\x56\x65\x12\xd3\xb1\x69\x04\x9a\x04\x5d\xc4\x07\x26\xa2\x3c\x07\x91\x8a\x09\x88\x90\x05\x96\xea\x07\x92\x4b\x43\x5f\x50\x90\x10\x40\x4f\x20\xc4\x17\xb3\x7a\x78\x29\x53\x27\x66\x76\x83\xdd\x27\xcc\xbb\x67\xd6\x74\x79\xaf\x16\x39\x68\x1f\x79\x63\xdb\xa7\xc4\xdb\x43\xe9\xc2\x33\x56\xfe\xf8\x75\x72\x83\x96\x35\x63\x3a\x94\xa0\x1c\xc7\x82\x19\x5a\xba\x12\x00\x8b\x37\xd9\x90\x8c\x01\x43\x7b\x48\x66\x6d\xc8\xd2\xaa\xce\x43\x17\xba\x22\x76\x29\x9f\x47\x4a\xe2\x96\xc4\xab\xdc\xd9\x3d\x9a\x5a\xbb\xe1\xa7\x75\x36\xe7\xa8\x54\xb8\xd6\x35\xf1\xd4\x1f\x5c\xd5\x9f\x46\xcf\x79\x79\xf4\xaa\xa6\x0f\x46\xaf\x4e\x2e\x77\x2b\x2b\xc7\x8a\x20\x7a\x84\xaf\x50\x34\x89\x19\x89\x30\x39\x16\xc4\x12\x64\x74\x4b\xf7\x45\x4f\x16\x6d\x95\xb5\x35\x4c\x5b\x98\x96\x64\xc9\x77\x75\x19\xa4\xc3\x08\x57\xf2\xf0\xa8\x1b\x9b\xea\x65\xbe\x3e\xec\xf3\x6c\xb5\x4e\x7c\xf4\xda\xb8\x70\xd3\xb2\x0b\x75\x1e\x3e\x3b\xf2\x69\xf6\x87\x5f\xcd\x2b\xb5\x61\x41\x92\xd7\x8f\x96\xe6\x00\x2e\x52\x31\x52\x1d\x2f\xf0\x0d\x04\x31\x6b\xd9\x3e\x6b\x62\xa4\x92\x86\xed\x69\x81\x4b\x29\x81\x64\x0b\x26\x16\x22\x27\xc4\x34\x9b\x0e\x23\x5c\xc5\xc2\x4b\x6f\x75\xee\xd5\xac\x5c\x23\xee\xda\x67\xd9\x5e\xe9\x7f\x3c\x6f\xc7\x3b\xaf\x65\x15\xb6\x3c\xf2\x6f\x96\x6c\x53\x37\xf3\xba\x8c\xdf\xe8\x27\x56\x76\xf2\x1d\x41\xa4\x19\xc1\xf5\x5c\xcf\xe4\x79\x93\xa1\x21\x22\x19\x3e\xf2\x3d\x4d\xc0\x8e\x47\xd2\xae\xed\x68\x92\xe6\xc9\x48\x30\x7d\xe4\xa1\x90\xff\xa7\x84\xe1\x3f\x73\xce\x87\x17\x9a\x36\x5c\x72\x22\xc8\x35\xe9\x49\x93\xcf\x2b\x9e\xeb\x87\xb2\x2f\xbe\x38\x77\xd7\xc9\x36\x97\x97\x5e\x7a\x76\xa5\x4e\x81\x13\x1b\x9f\xfb\x23\x47\xcc\xfe\xf9\x15\x65\x76\x97\xc3\xe3\x1f\x1e\x58\xd1\xd5\x7c\x29\x47\x9d\x51\xad\xba\xf5\x7f\x96\xfd\x61\xe1\x7b\x4d\xde\xae\xd6\x6c\x7a\xc6\x83\x37\xf1\x1e\x8f\x72\x05\x4a\x55\x23\x29\x44\x2a\x65\xd8\x16\x26\x28\x5a\x81\xb4\x11\x87\x22\x4d\x30\xa2\xe5\xb3\x32\xc5\x2a\x82\xc5\x92\x9c\xcb\x04\x9a\x21\x6a\x7a\xe2\x9c\x53\x61\xf3\x06\x73\xf4\xad\x3b\x93\xb2\x0c\xf9\x5d\xab\xb2\xe6\x83\x49\xf7\x56\xec\x9a\xb1\x83\xaf\xf0\xdb\xab\x63\xaa\x1f\x4c\xab\x51\xa2\x4f\x72\x5d\x0a\x38\x8e\xe4\x88\xb1\xc2\x45\x1a\xa3\x58\x92\x8a\x11\x36\x2d\xd6\x00\xa1\xcc\xb8\x92\xcf\xd3\x81\x2d\x06\x4e\x04\x38\x46\xe4\x3c\x5b\xb4\x39\x5a\x70\x5e\xcc\x39\xc6\x17\xe7\x2b\x4d\xac\x48\x2e\xa9\x58\x7e\x7a\xf1\xa2\x0f\x0e\x4d\x69\x5f\xe0\xe0\xf0\xa2\xbf\x4d\x78\xf5\xea\x8e\xfc\xf7\x37\xd5\xc0\x45\x93\xbc\xdd\x32\x69\xd9\x8c\x64\x46\x64\x9d\x88\x37\x19\xc1\x30\x0c\x8a\x56\x63\xcd\xd6\xa1\x68\xc0\xd8\xe0\x08\x03\x69\xa4\x02\x02\xcd\xf5\x4c\xd7\x65\xd1\xf3\x87\x48\x7f\x7f\xe9\x1c\x0b\x0e\x0c\x38\xd2\xfa\x56\x47\x6f\xdc\x9f\xb8\x70\xf5\xab\xc3\x5e\xf9\x31\xf5\xd5\x6f\x5e\x6f\x5b\xfd\x4e\x50\xf3\xfa\xe3\xd3\x1f\x94\x4d\x32\x07\x11\x6b\x98\x3e\x66\x3d\x46\x71\x4d\x0a\x98\x3a\x4f\x09\x2e\x6b\x78\x0a\x2b\x47\x1c\xa3\x84\x5c\x48\x98\x8c\x64\x58\xba\xaf\x03\xd3\xe3\xf4\x88\x80\x09\x5a\xe7\x33\x0b\xee\xad\xce\x6a\xfd\xb2\xea\xec\xe6\x0b\x6f\xd7\x6c\xf4\xc1\x43\xf4\x72\x38\xa9\x8b\x76\x6d\x69\xcd\xc3\xed\xee\xa7\x69\x15\x92\x3b\x7b\x65\x3d\xdd\x91\x42\x85\x8c\x25\xa4\x06\x24\xa6\x74\x4f\x21\x20\xa9\x39\x94\x6c\x02\x81\xd2\x19\x85\x81\x0c\x01\xb9\xc0\x04\x3c\x25\x68\x81\xe8\x53\x9c\x9f\x38\xdf\xbc\x36\xa2\xd7\x0f\xbf\x9f\xeb\x46\xfe\x38\xed\x3d\x6d\x5b\xae\xdc\xdd\x3f\x1a\x78\xfe\xcc\x89\x57\x5a\x95\xfd\xf9\x62\xd3\xad\x7f\x2c\x9b\x96\xf1\x47\x29\x61\x77\xa4\x1b\xa1\x01\x23\x41\x65\x19\x9a\x27\x78\x11\xab\x9c\xe7\xc1\x40\xa2\x1c\x59\xc6\x44\xcc\x0b\x8e\xc3\xaa\x3c\xa2\xa1\xa8\x1a\xba\x2f\x41\xd9\x73\xc8\xc4\x0e\xc2\xdc\x9e\x9e\x23\xef\x17\x67\xbd\x82\xf9\xce\xce\x4f\x63\x72\x15\x6f\x6b\xb5\x4e\xab\xdb\xa5\xc4\x6f\x7f\xd4\xff\xb6\x4c\xe3\x91\xfb\x93\x4c\x65\x12\x2a\x0e\xe0\x01\xd6\x74\x16\x72\x04\x83\x49\x36\x8e\x45\xcc\x82\xc0\xa0\x14\x8b\x20\x7c\xd2\x54\xdd\x38\xd2\x4d\x8b\x76\x7c\xd2\xf4\x44\xcc\xaa\xea\x8b\xa1\x38\xbd\x74\xbe\x16\x63\xe6\x37\x4c\x6d\xf2\xe5\xc3\xce\xe7\x0b\xfc\x59\xbe\x22\x9b\xa9\x7b\x01\xaa\x46\x09\x7e\xd0\xf0\x7e\xa3\x17\x74\xd8\x96\x5c\x93\x1d\xdd\x71\x22\x68\xc7\xa2\xcc\x19\xa6\x1b\x06\xa2\x01\x45\xc6\x0f\x49\xc7\x61\x43\x35\x04\x0a\xd4\x1c\x14\x1a\x38\x06\xae\x6d\xd8\xb6\xa7\x31\xc8\x4f\x7c\x13\x58\x76\xd3\x82\xed\x85\x4a\xb5\x2d\x69\x1f\xcb\xa2\x36\xd9\x3c\xa3\x6d\x3c\xa1\xec\xa4\x33\xd1\x6c\x6c\x2e\x69\x5a\x3a\x77\xd6\xe1\x9d\x93\x9b\xab\x23\x55\x64\x5c\xc7\xf0\x2c\x31\x50\x55\x96\x77\x8d\xd8\x0d\x79\xc2\x75\x03\x1c\x71\x36\x34\x28\xcb\x8a\x7c\x6c\x40\x92\x43\x11\x65\xe8\x20\x12\x23\xf5\xc5\xba\x7d\xdd\xda\x03\x65\x37\x0e\xee\xf8\x64\x7a\x91\x0b\xc1\xa8\x0f\xaa\x4f\xfd\x63\x4b\x91\xb9\x29\xc7\x07\x54\x6c\x3d\xe0\xd9\x5c\xe9\x8b\x3a\x19\xe7\x17\x4e\x8c\xb7\x20\x6c\x8d\x11\x44\xac\xc7\xac\xc5\x71\x2e\xc5\x02\x15\x2b\xb1\x23\x45\xb6\x13\x52\xb4\xc9\xca\x26\xa1\x73\x3c\xa0\xb0\xa8\x92\x30\x50\x18\xf0\x17\xcf\xc1\xf3\xd9\xe3\xc1\xe1\x5f\x32\x9d\x6e\xe9\x57\x78\xfd\x33\xf7\xf5\x3e\x5b\x0b\x8d\x9f\xd0\x68\xc5\xdc\xa1\x53\xde\x9e\xfb\xd1\x81\x31\x6b\xef\xf4\x28\x95\x71\x9e\x83\xc4\x1c\xec\x72\xa4\x61\x87\x08\x4c\x21\x06\x88\x8c\xc9\xd0\x73\x02\xda\xa3\x09\x2d\xa6\x78\xcd\x26\x48\x4d\x73\x48\x97\x07\x16\xd0\x68\x43\x55\x44\x42\xe7\xfd\x74\x30\xd6\xf7\xec\xe2\x83\x37\x16\x9d\x7f\xb7\x6c\x4a\xcf\x55\x1b\x7b\x5f\xb9\xe8\x55\xd8\xf1\x8d\x40\x96\x59\xfd\xe7\x85\xa7\x9f\x9d\xee\x9c\xf1\x53\xc6\xc4\x4c\x59\x90\x15\x08\x81\x37\x69\xe8\xe8\xba\x27\x03\xdf\x92\x43\x39\x76\x29\x93\x56\x44\xdd\x03\x96\xcb\xf1\x96\x16\x92\xa4\x41\x61\xd5\x8e\x55\xde\x74\xd2\x69\x1e\x7a\xcf\xfb\xc2\x9a\x4e\xe4\xef\x78\x6e\x4c\xa6\x28\xcf\xb9\xa7\xb3\x6e\xae\xfe\x7e\x72\xe3\x9a\x2d\xce\xb7\xea\x7b\x79\xd4\xf1\x97\xf5\x25\xc9\x35\x5b\x33\x59\x13\x38\x0c\x26\x1c\xd5\xc0\x24\x32\x54\xc8\x60\x88\x14\x86\x60\x62\x92\x24\x0d\xa4\xd1\x61\x10\xc5\x0e\xc6\x12\x36\xb5\xc8\x96\x50\x22\xbe\xb8\x61\xd9\xb3\xd4\xc9\xf2\xf1\x82\x0b\x0f\x3a\x5c\x59\x9d\x75\xfc\x7b\x75\xa6\x65\x1b\x73\x6b\x76\x19\x21\x73\x9b\xd2\xab\x3a\x96\x50\xa8\x36\x49\x5e\xc3\xf8\x18\x2a\x9c\xe0\xf2\xb2\xc3\xe8\x16\xe1\xa3\x10\x05\x66\x28\x19\x54\xcc\x20\x9b\xf7\x55\x0a\xd3\x90\x85\x90\xf3\x22\xd9\x66\x7d\xc3\xa1\x84\x74\xd6\x30\x97\xf4\xfb\x5b\xc6\x17\xe9\xfe\x71\xa9\x8d\x39\x6b\x4e\xd8\x33\xf1\xc3\xa3\x70\xd2\xaf\x8b\x3e\x7a\xe9\x1b\x5c\x61\xb6\x78\xaf\xd0\xe6\x8c\x93\xd1\x26\xec\x79\x5c\x45\xb4\xe3\xc8\xb7\x21\x8b\x3c\x91\x62\x6d\x43\x01\x32\x25\x9b\x16\xe7\xfc\xcf\x6e\x00\xf2\x82\x8a\xdc\x50\x43\x2c\x8e\x20\xe9\xb1\xaa\x05\xc8\x7f\xf6\x3c\x7f\x3b\x48\xa9\x1a\x5d\x96\x7f\x66\xb5\x1f\x91\xea\xdc\x1c\x7c\xe1\xc7\x75\x7b\x1b\xce\xee\x7a\xf7\x87\x05\xa7\x9a\x89\xd9\x97\xff\x70\x79\x5e\x6a\x83\x24\x33\xbb\x86\x14\xc9\x63\x2b\x52\x0c\xa0\x6b\x56\x24\x38\x8a\xad\x93\xbe\x67\x53\x98\x8b\x04\x09\x8b\x1e\xe9\x81\x58\x8d\x62\x02\x31\xa6\xa4\x19\x48\x55\xf1\x8b\x0e\x32\x65\xb6\xfb\x7a\xd7\xdb\x23\xfa\x5d\xce\x79\x74\x7a\xa7\xf6\xda\xdc\x33\xdf\xf7\x61\xc7\x4e\xe5\x07\x0f\x7a\xba\xe5\xc4\xe2\x96\x57\xad\xe4\x26\x3d\xc9\x63\x90\xaf\x71\x72\x2c\x3a\xac\x03\x3d\x45\x11\x7d\xe0\xc7\xa4\xc3\x61\xc4\x29\xaa\xe8\x1a\x72\x44\x71\x80\x75\xb0\xaf\x5b\x32\x8a\x4d\x29\x3d\x90\xd9\xf6\x0f\xdf\xab\xde\xc8\x5c\x7a\xe5\xc1\xe1\xcd\x76\xfb\xde\x9d\xfb\xf5\x4c\x23\xf6\x95\xf5\xbb\x95\x9b\xad\x94\xbc\xdd\xfb\xb0\x9f\x71\xc9\xf6\x84\x66\xdb\x96\x82\x24\x8b\x63\x6d\xdf\x67\x14\x83\xe6\x80\x8a\x2c\x02\x88\x92\x6d\x29\x14\x36\x3c\xc9\x21\x78\x31\xb6\x04\xda\xf6\x55\x35\x08\x5c\x36\xd2\xd8\xc4\x03\xb8\xe3\x5b\xdb\x2c\xa9\xfa\xc3\xc1\xc7\x99\x15\x63\xc6\x21\x30\xa3\xf9\xed\x65\xdc\x38\xc4\x6c\x4d\x13\x52\x0a\xfc\xf1\xa0\xcf\xdc\x24\x43\xfa\x28\x97\x31\x2c\x91\x03\x2e\x61\xa9\xae\x83\xa5\x80\x61\xbc\x28\x40\x9e\x2e\x42\x5a\x13\x62\x24\xf8\x8e\x6b\x19\xb4\xe4\xc6\x3c\xed\x18\x51\xc4\x47\xec\x8b\x4f\xcc\xcd\xd2\x95\x5f\xa9\xf8\x45\x96\x85\x8d\x0e\x9f\xd2\x6a\xec\x66\x67\x96\xd9\xb7\x7e\xee\xae\x07\x3b\xec\x82\x15\xa7\xbc\x31\xaa\xf3\x96\x7d\x49\x46\x3e\x87\x04\x16\x5c\x15\x3b\x50\x90\x81\xa4\x00\x47\x37\xb4\xc8\x64\x19\x9e\x09\x43\x8e\xa4\x43\x36\x56\x35\x26\x74\x1c\x4f\x61\x30\x1b\x72\xae\xa5\x2a\x2f\x96\x4c\x69\x57\x8c\x3f\xd6\x7e\x5e\x35\xdb\x6f\x6f\xb5\xce\xdb\xaa\xff\x79\x69\xe1\xe2\x07\xdf\x95\xde\xbf\xc4\x1b\x76\x25\xf5\xbd\xdc\x8d\x6a\xb1\xc9\x0d\x43\x2e\xa6\x79\xd5\x92\x5d\x11\x9b\x31\x45\x92\x9a\x25\xeb\x34\x10\x62\x43\x77\x65\x45\x76\x08\x8f\x25\x43\x47\xf3\x7d\x0b\x40\xd7\x47\xbe\xc5\xe2\xf4\x46\x0f\x24\xd3\xf7\xb3\x8d\x85\x1a\xd6\x2e\xfc\xeb\xde\x8e\x9b\xbe\xa7\xaa\x2c\x60\x33\x1f\xec\x9a\x32\x74\x48\xbe\x33\xb3\x8a\x5e\xbf\xde\x2a\x4a\xf2\xa8\x53\xe3\x18\x02\xf1\xb1\x06\x49\x07\x4b\x44\x44\x1a\x38\x74\x19\x5e\xc4\x3c\x8a\x18\xd9\xd4\x03\x2b\x72\x64\xc4\x45\x96\xc8\x7b\x16\xc5\xf3\x1e\x9b\x5e\x0f\xdf\x63\xc6\x74\x23\xe7\xb5\xc6\x43\x72\xb4\xe3\x47\xbf\x7a\x66\x0a\xdc\xb8\xbd\xe7\x9b\x75\xf6\xb1\xdd\xdf\x18\x72\xf7\xf8\x9d\x06\x43\xdb\x3f\x97\x22\x73\xed\x68\x7b\x64\x54\xbd\x1f\x8e\xe7\x94\x7b\xb7\xd8\xf0\x80\x29\x3f\xa7\x05\xde\xfe\x5b\x89\xa3\x1f\x54\xee\x59\xaf\xfa\x17\xaf\x57\xcc\xb8\x04\x75\x62\x1d\x13\xc5\x42\x80\x77\x28\x5d\xd2\x14\x8d\xe1\x80\xc2\xeb\x18\xd8\xbe\x08\x05\x6c\x0a\xae\xaf\xda\x34\x11\x91\xa1\xe3\xb2\x96\xae\x60\x00\x0c\x1a\xe2\x17\x23\xa0\x5e\xdb\x41\x39\xde\x1c\x59\xf3\xd2\xec\xcb\xe3\x96\xf5\xaa\x35\x3a\x65\xec\xf0\x5d\xa7\x1e\x09\x5f\xaf\x28\x9d\x8b\xcc\xd1\xe8\x54\x8d\x8c\x23\xc5\x12\xaf\x55\x24\x33\xd4\x6d\x5f\xc4\x50\x86\xae\x04\x78\x9d\x64\x1d\x87\x74\x29\x52\x26\x84\xc0\x15\x42\x3d\x66\x14\x0e\x69\x81\x66\xc5\x36\x63\x05\x2e\xe0\xfe\x9e\x9a\x2f\xca\xf3\x7f\xdb\x37\xa7\x34\xcf\x96\xa3\x4f\x81\xa1\xcf\xf3\x69\x16\xba\x6d\x76\xdd\x71\xbe\xfa\x86\x75\x3d\xd1\xfc\x2d\x33\xef\xbc\xbd\x66\xe6\xec\xaf\xbb\x56\x6c\x59\x57\xdb\xfe\xf3\xa2\xd4\xb7\x93\xcb\x26\xc5\x09\xb1\xa9\x1b\x64\x2c\xa9\xb2\xe2\xd0\x00\xd3\x10\x09\x11\x01\x48\x10\x91\x31\xc9\xc0\xd0\x0e\x02\x18\x62\x1d\x3a\x76\x1c\x63\x2e\x70\x43\x57\xd7\xd3\x29\x25\x9b\x77\x3c\x74\xc5\x2a\xf1\xed\xcf\x1b\x6a\x3f\xdb\xbf\xad\x47\xdd\x37\xf1\xd0\x45\x97\x67\xf4\x9f\xb7\x2d\x5c\xff\xe5\xb4\x42\xa5\x73\x24\x79\xcc\xe8\x98\xa4\x10\x39\x0a\xa5\xd2\xaa\xe2\xb0\xaa\xef\xd2\x3a\x0b\x02\x8c\x20\x05\x25\x9b\xf1\x69\x83\xb6\x25\xe4\x89\x9e\xa5\xd8\x66\x60\xc9\xca\x5f\x80\xd6\x17\xcd\x0e\x9f\x3c\x6c\x3a\xf1\x8f\x9d\xf7\x6b\x8e\x6b\xdb\x63\xea\xdd\x97\x6f\xec\x36\x66\xe7\xb8\x70\x3a\x65\xeb\x0f\x1d\x9e\xf6\x9e\x78\x3d\x2e\x96\xdc\xac\x2a\x91\x26\xcd\x90\xae\xea\xb9\x9e\x6f\x1a\xaa\x64\x9b\x1c\x90\x09\x97\x41\x81\xe9\x44\x2e\x25\x73\x4c\xa4\x40\xa8\xfa\xa4\x4c\x9a\xae\x61\x19\x0e\xc7\x26\xae\xcb\xaa\xd6\x0b\xfc\x96\x5d\xce\xa5\xae\xbb\x76\x72\x7d\xc1\x4e\x07\x6f\x5d\xfc\xe1\x83\x33\x78\xe9\xc7\x3b\x27\x75\xde\xbf\xaa\xea\xbc\x73\x4d\x92\x3c\x66\x74\x69\xdf\x88\x6d\x3b\x44\x96\x0e\x44\xc9\x97\xc2\x00\xf3\xba\xc0\x86\x9a\x62\x99\x21\x23\x71\x48\x65\x80\x61\x23\x33\x60\x0d\x87\xd3\x59\x25\x0a\x12\x17\xee\x05\x2f\x15\x9d\x75\xab\xdb\x8c\x8f\x2f\x1f\x1f\x7c\xb6\xf6\xfb\x6a\xf3\xb7\x6a\xec\x28\x37\x7f\xd8\xe8\xbb\xbb\xc6\xaf\xf8\x64\xdb\xe5\xa2\x19\xa7\x81\x48\x7c\x8a\xaa\x06\xb2\xce\x22\x0d\x91\x88\x8f\x01\x61\x29\x0c\xe3\xb0\xbc\xa1\x10\x1a\x1b\x21\x9e\x71\x3d\x4f\x95\x3d\x42\xe4\x80\x27\x06\xa4\xc0\x78\x31\x4c\x50\x97\x05\x64\xf7\xb5\xeb\xab\x4d\xbe\xbf\x61\xb7\x75\xb5\xfc\x39\x70\x41\xfb\xf4\x9b\x22\x59\x2b\xbf\x3d\xb4\x5d\xf3\x5a\xb0\x76\xfb\xf1\xe3\x93\x5b\xb8\x07\x02\xcd\x21\x8c\x7c\x5e\xd6\x68\x29\xf0\xa3\x08\xc8\x71\x0c\x2c\xc1\x60\x55\xca\x17\x14\xd9\xf2\xa8\x98\x64\x5d\x97\x14\x5d\x0a\x1b\x8e\xcd\x83\x74\x2e\x44\xfa\x54\xf9\xe2\xfd\xc2\x07\xab\x8e\x1a\xf0\xda\x8e\xaf\xa7\x6c\xdf\xba\x66\x71\xcf\x1a\xb9\x6a\xe6\x3d\xb6\x6c\x4b\x5a\xa7\x1e\x8d\xd3\xd6\x6c\x4f\xae\xd9\x06\x72\x34\x87\x01\x58\xf6\x09\xd9\x67\x5c\x05\x85\x14\xe1\xeb\x4e\x00\x91\x69\x13\xba\x29\xd8\x0a\x88\x22\x2b\x20\x24\xca\xd0\x65\xc1\xe0\xbc\x7f\x90\x61\xad\xcf\xf9\x7f\xdb\x7a\xa5\x34\x2f\x90\xf9\x3f\xa5\xcf\x72\x1e\x31\x57\xa6\xbd\xb6\x3d\x4b\x97\x4a\xed\xeb\x74\xea\x73\x7e\xf1\xd4\xa6\x6b\xb6\xe4\x18\xf3\x5b\x87\xfb\x7b\xaf\xcf\x39\x31\xa5\xf1\xcc\x64\xdf\x28\x19\x81\x88\x3c\xcb\x43\x44\xe8\x30\x9a\x6a\xab\x0e\x56\x05\x96\xf6\x21\x17\x5a\x20\x72\x18\x4b\xa6\x3d\xdd\xb2\x22\xc2\x64\x65\x83\x88\x6d\xdd\x48\x3c\xfd\x52\xcb\xf4\x38\x6c\x7f\xf4\x2c\xaf\xd6\xbb\x15\x3b\x64\xd3\xb5\x12\x4f\x0e\xff\x9c\xa9\xe2\x9d\xac\xc3\x9a\xcd\x5b\x3e\xf4\xf7\x0b\x5f\x65\x5c\xf3\x38\x31\x53\x99\xc3\xf0\xbc\x89\xa0\x6d\xf8\x82\xa0\x48\x34\x45\x40\x55\xd2\x78\x14\xbb\x9a\xa4\x53\x8a\x44\xc6\x96\xa2\x79\x0e\x0c\xb9\x98\xb6\x54\x47\x0f\x59\xf7\xc5\x52\x6e\x51\x09\xe6\x59\x95\xa5\xbd\x3e\xca\xb5\x7d\xdd\x80\xe5\x77\xdf\xcd\x96\xf7\x93\xb1\xef\x14\xde\x55\x71\xc4\x9a\x62\x06\xdb\x39\xe7\xe4\xa5\x49\x66\x10\x55\x43\x97\x82\x4c\x40\x00\xe8\x31\x26\xa3\x7a\x22\x46\xa2\x11\x60\x95\x46\x92\xeb\x59\x31\x88\x6c\x49\x62\x0c\x39\x50\x90\x65\xb0\x9e\x26\xbb\xe9\x24\x9c\x32\xf9\xbe\x79\x8f\xac\x6d\x34\x7d\xf3\x88\xb3\xb1\xc0\x4c\x9c\x6f\x4f\x69\xa1\xca\x93\xef\xe6\x2d\xe8\x37\xd6\x7c\xfa\xfe\x7a\xa7\x7a\x92\x07\xd1\x9a\x4f\x12\x92\x25\xc9\xa6\xea\x11\x0c\x2d\x21\x46\x73\x43\xe0\x51\x6c\x68\xb3\x9a\x14\xf3\x44\xc4\x88\x6c\xac\x04\x96\x01\x38\x0d\x38\x02\xf7\x8f\x7b\x85\xff\x35\x79\xcd\x9b\x0d\x46\xf4\x59\x59\x7d\xf3\x99\xa0\xfd\xea\x6f\x2b\x38\xad\xa3\xf3\x13\x07\xdf\xb8\xbd\xf3\x66\xe9\x2c\xdb\x4a\x1e\xe7\x46\xe6\x4f\x6e\x8e\x74\x39\x83\x89\x02\x9e\x88\x91\x69\x7a\x82\x26\x11\xbe\xa0\xf8\x4c\xa8\xda\x44\xa8\xe8\xc0\x44\x4a\x2c\x19\x81\xeb\x28\x82\x48\xf1\xba\x83\x20\xe0\xff\xce\x91\xff\xbe\x55\xf8\x6f\xbb\xa3\x94\x66\xb9\x72\x15\x7e\x1e\x95\xda\x6d\x75\xfc\x47\x93\x3b\x1b\x3f\x1e\x98\xa9\xd7\xfc\x6a\x72\xe1\xaa\xc3\x7b\xad\x19\x0b\x1f\x6c\x6c\xd0\xae\x60\xd5\x66\x23\x1b\x94\x5f\x96\xdc\xdf\xc5\xf1\x23\x08\x3d\xce\x26\x95\xc0\xa7\x55\x52\xe7\x28\x59\x32\x4d\xc2\x08\xc3\xc8\x52\x5d\x2a\xa4\x34\x9a\x64\x62\x32\xf0\xbd\x88\xb7\x6c\x0c\x95\xf4\x24\x61\xbb\x58\x85\xa6\xfe\x22\xe7\x3e\x77\xbd\xfa\x92\x13\x57\xf6\xd4\x28\xbf\x71\x71\xa1\x45\x73\x04\x7e\x1e\xcc\x9b\x7a\x7c\xdd\x4c\x2d\xe3\xf2\xd9\x89\xc7\xd6\x48\x42\x41\x10\x79\x92\x64\xca\x4c\x10\xbb\xac\xcf\x06\xb6\xe6\xf0\x2c\x64\x91\xae\x38\xa1\xa1\x6b\x88\xa0\x31\x85\x34\x2d\xa6\x38\xc1\x51\xdc\x74\x00\xda\x8d\x67\xfc\x32\xb2\xd4\xbc\x5c\xb9\x26\xf5\xa9\xff\x52\xce\x46\xc7\x2e\x4c\xdc\xb3\xab\xdc\xd7\x27\xaf\xff\x94\xb2\xf5\xd9\xbb\x99\x6a\x7c\x59\x30\xb9\x2e\x25\x68\x86\x61\x45\xb4\xa0\x33\x96\xc7\x6a\x54\xc8\x2b\x04\x41\x63\x3e\x26\x69\xac\x0a\xae\x0c\x2c\x21\xd6\xa2\x08\xc6\x8a\x12\xba\x71\x10\xc4\x34\x9f\x8e\xc6\xeb\xb2\x8a\x46\x87\x9d\x0b\x57\x5e\x9d\xbf\x70\xe6\xee\x71\xe5\x4b\x7d\xeb\x48\xfb\xef\xf2\x9f\xb6\xa9\xf4\x59\xc9\x3d\x03\x5f\xb5\x1e\xf1\xc9\x6d\x51\x78\x1a\x30\x4c\xec\x30\xbe\x4e\x62\x86\xa6\xa0\xa2\x08\xa2\xa9\x12\x22\x47\xb1\x34\x47\x9a\x08\xf9\x6e\x64\x05\xb4\x89\x64\xc8\x23\x91\xd6\x18\xf6\xef\xa3\xd9\x7f\x03\xb4\xff\x5b\x07\x96\xd2\x3c\x4f\x9e\x4c\xff\x01\xd0\xce\x9f\x36\xf9\xa5\x13\x55\xd6\x57\x74\x9d\x2b\xd2\x9a\x45\x27\xcb\x16\x6b\xb5\xb5\x47\xed\x55\x78\xc6\x56\xa9\xc8\xa6\x72\x1b\x57\x24\x59\x85\x28\x26\xb4\x30\x64\xe5\xc8\x17\x90\x66\x1a\xa4\x19\x52\x7c\xa8\x61\xca\x81\x9c\xc5\xc2\x80\xd4\x54\xcf\x8f\x35\x9d\xb5\xa0\x06\x81\x4a\x30\x9c\x0b\xcc\xc4\x3f\x4e\xcd\x77\xf9\xa6\x65\xe7\xe4\xaf\x95\xad\xc8\x9a\x2e\x07\x77\xde\xe0\x26\xdc\x6a\x3e\xa8\x4c\xca\xd7\x78\xe3\xcd\xac\xeb\x9f\x35\xfd\x35\xe3\x13\xef\xc4\xd7\x46\x01\x10\x38\x83\x25\x42\xd3\x93\x4d\x49\x12\x4c\x64\x43\x8d\xe3\x69\x96\x35\x54\x5d\x0d\x1d\x83\x71\x24\x01\x21\xc0\x07\x11\xb6\x43\x91\x47\x6e\x3a\xf3\xaa\x4e\xb3\x7f\xdf\xa9\xea\x69\x7f\x16\xaf\xfc\x25\x33\xb7\xfd\xa5\xdb\xf8\x8b\xa1\x60\x94\xd3\xae\x75\x93\x42\x57\x07\x53\x67\x07\xde\x4c\xee\x3b\x66\x49\x0e\xe5\x49\xb1\xed\x12\x54\xec\x31\x42\x24\xe9\x24\x21\x51\x58\x90\x49\xc3\x91\xa2\x88\x8c\x29\x4a\x10\x88\xc0\xe2\x34\xc7\xb4\x79\xac\x18\x4e\x90\xf8\x6b\x97\xdd\x5e\xa9\xc0\x98\xcf\x5f\x79\x32\xab\xc9\x6f\xa7\x8a\x37\xef\x3f\xf0\xeb\x93\x69\xe7\xf3\x7c\x7d\xfc\xd3\x37\x66\xbf\xd3\x6d\xb2\xde\xb0\x6b\x92\xef\xee\x4c\x18\x7a\x98\x62\x23\x56\xc7\x2a\x23\x3a\xa4\xe6\x31\x14\x1d\xaa\x82\xe1\xfa\x36\x6f\x08\x86\x49\xd9\x91\x1a\xe2\xc0\xf2\x21\x69\x5a\x86\xcc\xff\x2d\xb2\x70\xbe\xfe\xff\xbb\x78\x1f\xd3\xee\xb3\x37\x6f\xf7\x58\xdc\xb8\x57\x0b\xbe\xfe\x91\x65\x25\xb3\x96\xdd\xb5\xab\xc3\x82\xb4\xe5\x3d\x26\x1f\xf9\x71\xfe\xad\x93\x27\x52\x9a\xdf\x7c\xd6\xe0\xcf\xa9\x25\x9f\x1b\xcb\x7d\xf8\xce\x80\xef\xcb\x97\xef\x7c\x64\xe1\x6e\xdc\x57\x19\x39\x66\xc0\x84\xca\x45\x3e\xbf\x9c\xe7\xfd\x2a\x9f\x48\x85\xef\xbe\xa6\x14\xcc\x78\x61\x94\x0e\x98\xc9\x77\x35\x9b\xa4\x24\x96\x35\x74\x85\xd4\x90\xc3\x73\xb2\x61\x08\x6c\x20\x2a\xac\x47\xd3\x81\x09\x69\x8a\xd3\xa0\x40\x72\x62\x1c\xe9\x1e\x88\x13\x70\xae\x0d\x3b\xb5\x69\xf9\xa9\x3c\x9f\x4d\xe9\x34\x6b\x59\xd7\xdd\xa5\x37\x75\x6b\xd2\x35\x7b\xe3\x61\xeb\x17\x6f\xdc\x58\xa6\xc4\x84\xad\x47\xc8\xe4\x4e\xc8\x39\x3d\x0e\x75\x4c\x2b\xbe\xab\xfb\x06\x74\x0c\x09\xca\x1a\x43\xc6\x6e\x14\x72\x2a\x4f\x33\x3e\x15\x11\x81\xab\xa9\xb1\x48\x61\x4a\x74\x48\xda\xf4\xa3\x04\x50\xbe\xd1\x97\x82\x7a\x44\x6f\xa3\xe2\xc9\xc1\xbf\xdf\x3a\xf9\x75\xc9\xaf\x17\x54\x9e\x5b\x7e\x5c\x79\xa1\x4e\x9e\x89\x73\x0e\x1e\x43\xa9\x30\xc9\xce\x04\x15\x9d\x8f\x4c\xc7\xe2\x04\x47\x00\x6c\xec\xaa\xaa\xc2\x46\xbe\x07\x20\x11\x08\xb6\xa8\xf9\x21\x1d\xc5\xae\x6a\xb3\x21\x45\xab\x36\xa5\x63\x81\x4b\x3c\xd4\xdf\xdf\xbe\x58\xe7\xfe\x6f\x17\x68\x5d\xfe\xd2\x9f\xaf\xbe\x76\xe6\xbd\x81\x13\x40\x96\xfc\x5d\x72\x73\xa7\x67\x6e\xe9\xf2\xcd\xf4\x11\xa9\x76\xb2\x37\x99\x90\xf7\x55\x55\x08\x00\xb4\x45\x05\xc1\x30\x74\x09\xcd\x44\xba\x19\xfd\x2b\x39\xba\x12\x65\x12\xba\x14\x5b\xb1\x04\x00\xe6\x79\x05\x0b\xff\x80\xa8\xfe\x3d\x00\x2d\xd2\x84\xd8\xbb\xeb\xc4\xb1\xba\x4d\xe7\x1b\x83\x56\x7e\x64\x09\xcc\xf5\xdd\x87\x96\xa5\xe6\xa8\xd5\xa5\xca\x9e\xe1\x4d\x2a\x66\x7c\x51\x95\xb0\x3f\x91\x1d\xce\x74\x7c\xa0\xd8\x04\x65\xeb\x21\xc1\x58\x8e\x2b\xeb\x24\x24\x0d\x31\xc0\x34\x26\x60\x20\xe8\x1e\xa9\x3b\x80\xe0\x1d\xdf\xf4\x78\x0c\x20\x93\x0e\x25\xf1\xb9\x19\xd7\x24\x50\xe6\xb5\x43\xad\x5f\x1d\xf2\xf4\xcd\xfb\xbf\x78\x3b\xae\x17\x3a\x50\xf5\xfd\xfd\x6f\x1f\x1a\x5e\xb7\x6e\xc1\x7c\xff\xc3\x05\xf4\xf7\xef\xd2\x64\xdb\x93\xc1\x13\x4a\xd6\xdc\xb7\xea\xd2\x8e\x13\x65\x8f\xe6\x37\xde\x2b\x7f\x78\xfe\x34\xad\xe9\xe7\x0d\xdb\xbe\x31\xbf\x79\x11\x2b\x53\x72\x1f\x30\x5b\x63\x58\x25\xb2\x44\xc5\x88\x29\x41\x84\xba\x11\x45\x0e\xaf\x44\x88\x33\x2c\x56\xb4\x58\xc4\x00\x5f\x55\x74\x26\x54\x79\x47\xd0\x0d\xda\xd5\x85\x04\x54\xd1\x6f\xe5\xdc\x5c\x39\xff\xfa\x91\xd4\x0d\xd4\xae\xde\xc5\x97\xcb\xcf\x29\x79\x56\x2a\xf1\xe3\x5a\xe6\xd1\xe1\x33\xef\x16\xee\x5b\xff\x66\x72\x87\x55\x1c\x2f\xe0\xd0\x94\x19\x2d\xb2\x58\x2e\x0c\x54\x4d\x27\x55\xc7\xa4\xb1\x6a\xea\x58\x60\x2d\x1b\x45\xa2\xaf\x60\x2f\x8e\x22\x95\xe1\x25\xd2\x81\x21\x4c\x87\x88\x60\x68\x8e\x78\xce\xed\x3b\x8f\xda\x4d\xde\x72\xeb\x46\xfb\xd7\x87\x7d\x37\xb4\x7e\xcd\xf3\x57\x8d\x42\x87\x36\xed\x7f\xe5\xd1\x77\x0b\x46\x67\x5c\xe2\x38\x61\xf9\xa9\xea\x9c\x4c\x6a\x32\x36\x29\x06\xc4\x2e\x56\x44\xdb\xb3\x75\x13\xb0\xbc\xe0\x60\x14\x40\x10\xab\x24\xb6\x14\x97\x20\x43\x00\x64\xc9\x32\x24\x87\x48\x5c\x7e\xe2\xc2\xbb\xcf\x7f\x90\x37\x6e\x33\x6a\x5a\x83\xc6\x52\x81\x22\xef\x4c\xfa\xbd\xf2\x58\xd3\xa8\xdb\xac\xe2\xd7\xa5\xeb\x3f\xf9\xa0\xe4\xf9\xe4\x46\x01\x43\xf3\x92\xed\x33\x84\x61\x41\xc5\x96\x82\x40\xc4\xbc\x13\x09\xba\x1a\x89\x9a\xe7\x0b\x36\xe9\xf1\xff\x6a\xbf\x6c\x27\x54\x51\xe4\x7a\x5c\xe4\xc2\x74\xaa\xe6\x05\x7d\x88\xd2\xd3\x1a\x15\x6d\xfe\xfd\x6b\x7d\x57\xae\xec\xcd\xbc\x5b\xbb\xeb\x96\xf2\x45\xb6\xb8\x55\x4b\xa3\x2b\xc6\xa4\x3d\x69\x19\x57\xfa\x4e\x0c\xf8\x40\xaa\x20\x29\x8a\xc2\x29\x0a\xa2\x09\x5b\x15\x48\xde\x55\x70\x00\x18\xdb\x15\x05\x56\x76\xc9\x80\xf7\x25\xd7\x8f\x7c\x9b\x03\x82\x49\xea\xb2\x1b\x27\x36\x7b\xc5\xf6\x02\xd2\x3b\x37\x16\xad\xec\x34\xbf\xee\xd4\xb3\xe2\x88\x6f\x0b\xec\x71\xef\xab\xcd\x47\xae\xaa\xb6\xea\xad\x34\x7f\x5f\x91\xcf\x93\x0c\x53\x55\x4c\xc7\xd3\x02\x3b\xd4\x54\xcb\xe5\x34\x2a\xa0\x40\xa0\x59\xb4\xa4\x51\x2e\x25\xd8\x5a\xcc\x92\x3a\x07\x22\xa4\xb1\x91\xcb\x85\xb6\xa5\xfa\x48\x4c\x9c\xdd\x4b\x96\x39\xd1\xef\xdd\x72\x07\x8a\xac\x9b\x54\xfb\x74\x8e\xaf\x7e\xeb\x3e\xb3\xf8\xd4\x5f\xa6\xa7\x7c\x91\xed\xe2\xcd\xcf\x8b\xd5\xaf\x73\x31\xe3\xd4\x5c\x89\x77\xfa\x22\xc7\x4a\xb2\x1a\x01\xc6\x0d\xa0\x6e\x30\x8a\xc8\x1b\x81\x8e\x4c\x41\xd1\x69\x9d\x51\x65\x45\xf4\x18\x4d\xd1\x00\x19\x62\x11\x86\xae\xac\x08\x09\xb2\x7b\xff\x57\x7a\x54\x58\xb4\x35\x73\xa6\x89\x87\xfa\x6f\xa5\x9b\xf4\x9b\xb0\xfe\x83\x3f\xde\x31\xaa\x34\xac\xfd\xed\x56\x6a\x4a\x9e\xa8\x40\x97\xe4\x3a\x08\xa3\x43\xc3\xe1\x20\x6d\x8b\x11\x8b\xb1\xae\x0a\x92\x6f\x21\x4f\xd2\x95\x40\x15\x22\x31\x96\xc9\x50\x27\x74\x43\xa5\xa0\xaf\x51\xa1\xe9\x30\x96\x06\xd2\xc9\xee\x25\xa7\xae\x1b\xd4\xe0\x97\x9a\x33\x1b\x55\x28\x5f\xb2\x49\xfe\x76\x87\xcd\xa5\x6d\x2e\x6e\xe9\x78\x65\xee\xf9\x2f\xee\x18\xee\xad\x60\xcb\x73\xee\x74\xe1\xe9\xba\x6a\x17\x8e\xe5\x18\xde\x2e\x57\x85\x1f\x2e\xdf\x59\xcb\xdd\xa6\xd7\x71\x4d\x8b\x5e\xb8\xbd\x52\xbe\xfe\x71\xbd\x15\x20\xe3\x7b\xa2\x84\x7f\x24\x17\x47\x24\x23\x41\xdd\xd5\x19\xd3\x16\x9d\xc0\x13\x63\xca\x8c\x15\xec\xc9\x2c\x08\x3d\xe8\x30\x50\x12\xa3\x98\xf4\x48\x29\x34\x6d\x4d\xd3\x61\x4c\x25\x86\x3d\x75\xcb\x81\xb7\x9b\xc2\xef\x8f\x46\xbf\x3b\x26\xd3\xf9\x02\xeb\xaa\x2f\x79\x65\x61\x38\xbd\x62\xbf\xed\xf1\xf0\x0d\x8f\xba\x6e\xbf\x93\xf1\x1a\x27\xa1\x3b\x61\x05\x0b\x56\xe8\xcb\xb1\x1d\x22\x4c\x10\x16\x34\x02\xe4\x0b\x26\x43\xb3\xaa\x20\x5a\x9c\x48\xf3\x92\xc7\xf0\x98\xc7\x9a\xad\x08\x16\xa9\xe2\x28\xc1\xa4\xb9\xc7\x42\x7e\x4e\xaf\xa0\x42\xcb\x1a\x39\xc6\xa5\x8e\x69\x5c\xa7\xee\xf8\xd1\xd3\x27\xe6\xba\x17\x4f\x9b\x9c\x75\xd8\x1b\x59\x9a\x2d\x4b\x32\x7b\x7b\xc4\x03\xdd\x26\x08\x8d\xb7\xa0\x2b\xf8\x82\x44\x7b\xae\xe3\x01\xd3\x0a\x4d\x4a\x13\x54\x26\x0e\x23\x5d\x23\x15\x01\x33\x0a\xc5\x70\x24\x29\xb0\x42\x02\xa4\xd6\xaf\x45\xfb\xfa\xd9\xd6\xdf\x18\x51\xa3\xf5\xea\xe5\xad\xde\xbe\xd8\xb8\xf9\x9a\xf9\xbf\xcb\x27\xde\xf5\x0b\x67\x1f\xb4\x6d\x79\xb7\xe6\x19\x2f\x7e\x13\x2b\x92\x71\x1e\x47\x1b\x2a\x0b\x04\x35\x14\x49\x2b\xe6\x39\x12\x61\xd9\xe0\x15\x07\xb9\x0c\xc3\x0b\x9e\x6e\x00\x0a\x19\x3a\x2d\xf2\x21\x69\x00\x8a\x57\x8d\x74\x22\x60\x79\xad\x5b\xd5\x6e\xe8\xb7\xd3\x66\xca\xd9\xfe\xdc\xa9\xed\x98\xa5\x55\x50\xf1\xd1\xb4\x57\x16\xcd\x3b\x7c\x74\x21\x68\x77\xf5\xf1\xf3\xff\xfb\xb3\xb0\xf8\xaa\x8e\xbf\xd7\xfc\x79\x47\x83\xe9\xde\xa2\x09\x3b\xc2\xfe\x1b\x56\x6c\x8e\x36\xe4\xae\xb6\x6a\x7b\xae\x75\xd3\x56\x1e\xef\xf3\x5c\xbc\xc0\x53\x7f\x64\x6e\xb0\x83\xbe\x7f\x8c\x7b\x63\xe3\xa5\x0f\x9f\xe2\x16\x53\x6e\x5e\xcf\x7a\xb8\xfb\xb7\x7f\x34\x74\xab\xaf\xaa\x71\x66\x61\x72\x7f\x45\xd6\x89\x1d\x1c\x84\xa6\x4a\xca\x8c\xa2\xd2\x0e\x13\x45\x50\x31\xa0\x6c\xb9\x86\x11\x33\x38\x66\x44\xc1\x71\x6c\xd1\x85\xb6\x42\x1a\xd8\x26\x42\xd5\x4d\x7c\x65\xd7\xfc\xf8\xbb\x6b\xb3\xd7\xcb\xf2\xe7\x91\xb4\x67\xbb\x3e\x7f\xb7\x5c\xa3\x97\x16\xfd\xf9\xf0\xe7\x16\x39\xae\xd7\x9f\xd5\x2d\x4d\xfc\xa6\x56\x72\x09\x1d\x59\xd2\xf2\x42\x01\xa8\x04\x47\x85\x40\xb2\x81\x45\x52\x92\x1a\xc5\x8c\x0c\x22\x8c\x15\x36\xe0\x08\xd1\x33\x34\xa0\xa3\x80\x70\x65\x5a\x8f\x38\x92\x17\x5e\x6c\x63\x56\x5d\xb8\x47\x2e\xe8\x36\xca\x5e\x51\x5c\x61\x6b\x1c\x5d\xf2\xd0\x9d\x55\xcc\x9d\xe9\x7d\x98\x12\x48\xd5\x50\xd9\x9a\x23\xae\x27\xb7\xac\xe0\x1c\x22\x26\x34\x1d\x11\x11\xa0\xa0\x17\xe9\x36\x86\x14\xa2\x3c\xcb\xf5\x4c\xdd\xc6\x0e\x64\x03\x4a\xa6\x68\xd7\x8b\x28\x83\x82\x86\xe1\xc4\x80\x78\x71\x8a\xbe\x83\x6e\x5e\x61\x77\xfe\x5a\x15\x06\xbf\xbb\x65\xef\xee\xfe\x33\x8f\xfd\xde\x88\x5d\x55\xfa\xad\x0b\xe2\xa2\x9f\x2b\xba\xeb\xff\xe0\x93\x0c\xa7\xa2\x5d\x9e\x52\x15\x36\x50\x24\xd2\x67\x14\x99\xd7\x10\xa6\x29\x24\xb0\x02\xe3\xa8\x02\xd6\x25\x59\xd1\x58\x97\x23\x48\x8b\x14\x49\xd1\x97\x1c\x2a\x4e\x87\xba\x7a\xf7\xfe\x87\x3d\xef\x1c\x7a\xbb\xbd\x74\xe3\xdc\xae\x57\xea\x1f\xef\x35\xaa\xcf\x57\xf7\xaa\x54\xa9\x79\xb9\xfe\xe3\xb5\x0f\xe5\x9f\x67\x7e\x95\xdc\x72\x59\xa1\xa0\xeb\x69\xd8\x97\x62\xd1\x75\x7c\x83\xf0\x5d\xc6\xc6\x9e\xac\xca\x1c\xe9\x91\x86\x15\xb2\xac\x6f\x6b\x0c\x8f\x58\x2f\x72\x91\xef\x8b\xae\xa0\xa4\x03\x88\x68\x2d\x4e\x5c\x2f\x2e\x5a\x5c\xb0\x52\xd6\x43\xad\xda\x4d\xfe\xa9\xe3\x28\xf1\xc9\xba\x5f\x9f\x14\x28\x51\xae\xe9\x27\x5f\x7e\x73\xb0\x5e\x97\xe7\x22\x20\x1c\x91\x5a\x6a\xe7\xf0\xa1\xc3\x37\xcc\xbc\x1b\x7d\x3f\x62\xde\x57\x63\x4f\xed\x3b\x50\xa0\x46\x99\x9e\x3d\x72\xe6\x69\xb2\x65\xdf\x95\x24\x33\xa3\x18\x3a\x11\x00\x91\x50\x6d\xc9\x35\x65\x64\x78\xa2\xc4\x70\x50\xf5\x4c\x43\xd0\x1c\xe8\xbb\x94\x47\xb8\xd0\x84\xb6\xa4\x21\x8b\xe6\x2d\x02\x68\x20\x7c\xd1\x9d\xb6\xd5\x2c\xb0\xef\xdc\x8a\xbb\x75\x2f\x1d\xb4\x4f\x6d\xfc\x43\xae\x3a\xfb\x4b\xf9\x71\xb3\x5c\x9b\xfb\xec\x7a\x7a\xa8\xe3\x8f\x57\xfb\x64\x5c\xc5\x29\xa1\x3b\x49\xb2\x27\x4b\x51\x48\x0b\xa6\xa5\x50\xa1\x4b\xd1\xa4\xcf\xa9\x24\x72\x9d\x30\x74\x18\x43\x46\x04\x47\xc6\x04\xe2\x2d\x82\x21\x19\x43\x35\x59\x1d\x28\x2f\x06\xed\xc1\x1a\xf9\xd6\xd8\xfd\x32\xa5\xbe\x5a\x21\xe7\xc2\x5c\x95\x87\x55\x98\x39\xac\xe7\xa0\x26\x8d\xce\x67\x59\xed\x94\x6d\xf4\xe5\x6f\xdf\x64\x9c\x74\x23\xe1\xb8\x44\x13\xac\xc8\x75\x80\x61\x13\x8e\xe6\x6b\xa1\xcd\x41\x4b\xe1\x02\x52\x07\xac\x10\xb8\x9e\x14\x98\xc8\x40\x9a\xc3\x03\x49\x12\x24\x8e\xf1\xc9\x90\x05\x89\xf1\x62\xe5\x8a\x6d\x72\xe3\xdd\xaf\xb5\x1a\xd7\xa1\xf8\xd3\x4e\xdf\xf7\x3b\xf8\x5e\x9e\xdd\xad\x8b\xcc\xac\xdf\x78\x9e\x0d\x96\xb5\x2e\x79\x34\x25\xb9\x59\x9d\x57\x2c\x86\x32\xb5\x90\x95\x84\xc8\xd6\x63\x9a\x17\x44\x2e\x34\x02\x26\x02\x0a\xa9\x44\xd0\x74\x24\x2b\x88\x62\x83\x11\x42\x9a\x61\x78\x5d\x50\x75\xf6\xc5\xb7\x79\x7d\xc7\xed\x95\x9e\xfc\xf8\xc3\x86\x1b\xab\x73\x14\x5a\x73\xfb\xd5\x47\x91\xb6\xa7\xdb\x8d\x05\x2b\x5a\x7f\xd2\xb0\xed\xf8\xbd\x71\x8e\x8c\x5f\xbb\x24\x3e\xf7\xc6\xac\xed\x98\x81\xe2\x38\x6c\x6c\x49\x32\x46\x3c\x62\x58\xdf\xa1\xcc\x98\x94\x64\x95\x73\x04\x95\x73\x23\xc3\x02\x14\xed\x09\x62\xc0\xe9\x90\xd7\x5f\x34\x79\x53\x8b\x2f\x2b\x97\x1a\xb4\xb5\xe7\xeb\x79\x7e\x99\x96\x65\xe5\xeb\xbd\x9a\xd5\x7f\xf7\x97\xea\xde\xe2\xb2\xf1\x8e\x55\xf5\x4f\xe0\x43\x23\x93\xeb\xcf\x0a\x85\x01\x41\xf2\xd8\x0f\xa1\x13\xbb\xb2\x67\xda\x91\x12\x7a\x74\xa0\xd9\x9c\x0f\x14\xc8\xd1\x2c\xaf\xb9\x98\x26\xed\xc8\xa3\x3c\x35\x90\x34\x97\x49\xec\x1c\x55\xcf\xe8\x83\x52\x3b\xb6\x3d\x3e\x25\xf5\x56\xef\x7d\xbd\xa7\xf6\xa9\xa6\xc3\x98\xef\xd2\x69\xde\xae\xd3\x7b\x5a\xca\xeb\xb2\xf7\x4f\xf2\x11\xb2\xac\x10\x22\x47\xc8\xd0\x75\x81\x1d\xfa\x7c\xac\x32\x81\x63\x10\x76\x2c\x70\x3c\xa9\xc9\x46\x24\xeb\x84\x2d\x44\x2c\x76\x19\x15\xb1\x14\xaf\xb3\x09\xf0\xea\x33\x2e\x1c\x5a\x70\x76\xf3\x79\xa5\x91\x75\x2b\xef\x97\x56\xb5\x46\x99\x1a\x74\xfd\x72\xc6\xf0\xb2\xe5\xc8\x87\xb5\xbf\x5c\xf6\xda\x9d\x8c\xdf\x4d\x27\x96\xf7\x32\x04\xdb\x80\x82\x82\x1d\x91\xd7\x74\x5d\x61\x25\x93\xb5\x90\xcd\x58\x06\x27\x7a\x82\x47\x70\x2a\xa9\x13\x9a\xe3\xf2\x91\x6f\xb8\x80\xe0\x08\x21\x01\x82\x7a\xd7\xa1\x81\xd5\xea\xe6\x08\xf7\x3c\xce\xbd\x2b\xef\x90\xc1\x3f\x0e\x2d\x7e\x60\xe7\xac\x8b\xed\x86\xcb\x37\x26\x76\xef\x52\xa3\x5a\x5a\x72\xe9\xcd\x38\x8a\x36\x70\xc4\x86\x34\x1d\x9b\xac\x1c\xc6\x36\x63\x09\x3c\xe4\x0c\x42\x80\x2c\xe6\x11\x82\xb6\x28\x71\x24\xad\x58\x3c\x0f\x4d\xd5\x08\xc4\x10\xc6\xe9\x40\x91\x47\x1d\x55\xba\xe7\xcf\xdc\xfe\xeb\xf6\xa9\x93\x87\xbe\x34\x6b\xc9\xd5\x8d\x47\x96\x3c\xca\xbc\xb3\x67\x2c\x2e\x99\xb6\x90\x5a\x9f\xf1\xdd\x5b\x42\xb3\x3d\xa4\x19\x9e\x82\x68\x03\x62\x2d\x56\x08\x08\x3c\xcf\x75\x42\x32\xf2\x79\x06\xca\x91\x4d\xe8\x41\xe0\xf0\x6e\x20\xba\x16\x49\x61\x19\x86\x90\xb3\x5e\x74\x0e\x23\xfb\x37\xcd\xda\x7d\x38\x2f\x2f\xb1\xf6\xf7\x5f\xdb\x66\x29\x95\x99\x5b\x3e\xb5\x9c\xdf\x38\xd7\x83\xa3\x1d\xd1\xba\x8b\xf3\x7a\x24\x79\xf0\xc1\xf3\x3c\x94\x4d\x1e\x40\xc3\x08\xa4\x50\xc6\x86\x2c\x28\xbe\xa7\x45\xa2\x45\x61\xe0\xe8\x2a\xcd\xc4\x66\x44\x01\xd7\xd4\x75\x4a\x0b\x62\x2d\x88\xe9\xc4\xa8\x8a\x3c\xb5\x6b\x94\x1b\x79\xea\xf0\x57\x76\xa3\xba\x5b\x7f\xaf\x76\xf1\x51\xd7\xea\x65\x4f\x3e\xae\xbe\xa3\xce\x84\x77\x9a\xf0\xe0\x46\x26\x23\xb9\x5f\x5a\x0d\x39\x9b\x94\x42\xdd\xe4\x08\x42\xe1\x39\x21\x74\x02\x2f\xb4\x42\xde\x35\x81\x44\x53\xb6\xe6\xe0\x88\x45\x8e\x27\x5b\xac\xce\x23\x89\xb0\x59\x96\x79\xf1\x4b\xaf\xbd\xf5\xd3\xd0\x6d\xf2\xed\x52\x93\xfb\x6d\x3b\x3e\xa0\xc5\x2f\x9f\x2f\x3a\xfa\xfe\x84\xc2\xcd\x67\xae\x7b\x67\xdd\x87\xb5\xaf\xef\x3b\x3c\x2e\xb9\x26\x2b\x91\xca\xda\x2c\x4d\x6a\xa2\x6a\x1a\x11\x1d\x19\x0e\xc3\xcb\x88\xd2\x04\x93\x82\x8a\xae\x9b\x8a\x45\xcb\x9a\x4f\xca\xff\xaa\xbc\x42\x6c\x4a\xe6\x3f\x40\x98\xcf\xd5\x83\x79\xa7\x9b\x27\xcf\x4d\xb9\xbb\x38\xca\x33\xb4\x77\xe9\x8f\xd3\x7e\x1a\x68\x6d\xf4\x3f\xad\x4a\x4c\x5c\xb8\xb8\x53\xf1\x66\x45\x1a\x65\x7c\x1b\x95\xb0\x54\x52\x4d\xc2\xd4\x69\x35\x72\x63\x4f\xf3\x58\xc2\x0f\x24\x99\x8d\x79\x43\x73\x75\x5b\xd1\x55\x4b\x31\x39\x13\x50\x8e\x62\x31\x3a\xcf\xdb\x01\x22\x95\xbf\x26\xbe\x2f\xce\x04\x46\xbf\x49\x56\x39\x3c\xb4\xd3\x97\x79\x8e\xb5\x3c\x79\xb4\x56\xff\xe1\x4f\x26\xff\x96\x7b\xd2\x81\x8d\x9b\xcb\xef\x2f\x50\x43\x1a\xaf\x54\x48\xae\xd9\x3c\xaf\xc4\x1e\x8a\x5d\xc7\x80\x88\x22\x69\x93\x15\x25\x91\xb7\x28\x51\xa3\x34\xdf\x95\xd9\x80\x37\x1c\x8a\xd2\x08\x41\xd2\x34\x20\x90\x1a\xd2\x61\x02\xad\xb1\x0b\xf9\x3e\x6b\xdc\x20\x4f\xaa\x9e\xf7\xa3\x42\xbd\x9f\x3d\x19\xd8\xad\x75\xd7\xa7\xc2\x9c\xc5\xe7\x53\x0b\x7e\x3b\x4e\xcf\x54\xf5\x6c\xc6\x15\x7d\x12\xd6\x1d\x0c\x92\x02\x9f\x88\x64\x35\xd0\x0d\x64\x46\xc8\xb3\xec\xc8\x86\x32\x8b\x62\x36\x56\x4c\x52\x67\x39\x0f\xf3\x01\x1f\xb2\x36\x6f\x63\xde\x23\x23\xc7\x7c\x31\x4f\x3f\x19\x32\xa6\xf8\x11\xbf\x87\xc7\xbc\xb1\x65\x61\x9e\xb0\x2d\x3b\xf8\xb5\x7d\xfe\x88\x91\x05\xc6\x8f\x9a\xb2\xac\x38\x67\x6c\xe8\x9e\xe4\x41\x9e\x23\x5a\x16\xe9\x3b\xb6\xeb\x3b\x34\x64\x23\x49\xd2\x8c\x98\xe0\x78\xcb\x89\x5d\x0d\xeb\x31\xd2\x2d\x55\x02\x18\x33\x0c\xc3\x72\x34\x43\x23\xcd\x4b\x3c\x5b\x3f\x1c\xdf\xd9\xda\x6f\x53\xa0\xbd\x5b\x64\x67\x5c\xb1\xc3\xee\x6f\x8b\xb4\xf8\xf4\x70\xbe\x2c\x60\x6f\xeb\x49\x95\x5a\x6e\x9b\xda\x3f\xc9\x1b\x56\x26\x70\xcc\x88\xe0\x23\x5d\x92\x80\x8b\xb8\x7f\x39\xaf\x09\x88\x50\x92\x5d\x91\xfe\x97\x8f\x90\x11\x92\xb1\x24\x60\xce\x57\x19\x55\x50\x6c\x17\xfe\x5d\x98\xfe\x5b\x79\xe5\xbf\x2d\x69\x52\x9a\x67\xc9\x36\x3e\xcb\xf3\x7c\xd7\xa3\x97\x37\xad\xf5\x3e\x5e\x7e\xe8\xe8\x5e\xfa\xe4\xfc\x95\x43\xb7\xe4\x19\x72\xba\x27\xea\x75\xaa\x62\x95\xb3\x17\xf5\x2a\x7f\x4c\xce\x38\x19\x40\xe2\x7b\x1e\x08\x63\xc4\x60\xe0\xba\xb4\x6e\xd9\x84\xe3\xfb\x8c\x17\xd0\x26\x2f\xba\x2e\x1f\x78\x16\xe5\xda\x51\x64\xb1\xb2\xe7\x30\x2a\x87\x22\x04\x24\x64\x24\x4e\x38\x22\x59\x6c\x74\xf6\x9b\x33\x2a\xbf\xb3\xe7\xfb\x76\xa0\x3f\xd5\xfb\xda\xdc\x9d\x27\x6f\x6c\xca\x71\xa2\x77\x96\x93\x8f\x2f\x7f\xb8\xd3\x4b\x6e\xb9\x62\xd3\x22\x20\x68\xd5\xb5\x61\x24\xb1\x88\x10\x02\x00\x7d\x2c\x59\xb4\x8e\x55\xc5\x40\x98\x16\x54\x8f\xe1\x21\xb0\x69\x07\x7b\xa1\x07\x4d\x5d\x75\x12\xfb\x54\xa7\x6a\xd6\xd2\xce\x87\x7f\xfa\xee\x7c\x8f\xc6\x56\xd5\x1b\x3b\x52\xaf\xb5\x3d\xfb\x56\xff\x62\xbd\x3b\x77\x27\xbb\x2d\x5b\x6c\xdd\x3e\x9e\xe4\xdd\x30\x21\x47\x86\x84\x70\xc0\xd1\x18\xfb\x31\xa6\xed\xd8\x05\x80\xf6\x74\x64\x47\xa1\x40\x1b\x80\x31\x78\x31\xe0\x62\x3d\x64\x03\x9e\x88\x90\x8b\xd2\x21\xb1\xcb\xb9\xa1\x49\xfe\x01\x5f\x77\xee\xb1\xe1\xe3\xb1\xeb\x5e\xed\xdb\x6f\xf6\xf9\x2e\xf3\x47\x6c\x0b\x9f\x34\x99\x70\x5e\x9b\x7c\xea\x8f\x0f\xa6\x24\x99\x9b\x23\x0e\x21\x41\xb3\x48\x83\x14\xaf\x63\x1f\x10\xbc\xa2\x40\x35\x44\xb2\x4f\x86\xa2\x64\x48\x8a\xab\x18\x71\x48\x68\x01\x50\x90\x4e\x03\x9f\x06\x54\xe2\xc5\x47\xf1\x56\xed\x3f\x9e\xf3\xdd\xcf\x62\x9d\x51\xfb\xef\x3c\xb9\x7d\xbb\xe2\xc8\x5f\x9d\xec\x3f\xa5\xa0\x3e\x5b\xf7\x35\x9d\x50\x68\x75\xcb\xfa\xc9\x4d\x3c\xb4\x68\xb8\x5c\xe0\xa8\x72\xe4\x06\x82\xe6\xab\x94\xab\xfb\x5e\x64\x10\x1c\x81\x14\x43\x66\x21\xa5\xf2\x98\x73\xd9\x50\x76\x18\x85\xe1\x02\x83\x84\x7f\x37\x3c\xff\x3e\x0f\xf8\x6f\x83\xf8\x94\xe6\x4d\x32\x6f\xcf\xf2\xfc\x79\xc0\xf0\x73\x6d\xc6\x15\xd9\xff\x2b\xbd\x70\x4f\x98\xed\xd0\x90\x6b\x0f\x3b\x0e\xae\x9a\x73\xeb\xe4\x2d\xf7\xe7\x5c\x0b\x8a\xdd\xa8\x3e\x6f\x6f\x92\x19\x06\x41\x28\x92\xac\x49\x48\x3e\x1f\x38\xac\xcd\x58\x34\x20\x28\x0d\xb8\x66\xe8\x8b\x86\xc7\x93\xa4\x45\x7a\x88\x0b\x43\x25\x02\x74\x64\xd3\xb4\x47\xa4\x13\x0a\xb7\xba\xed\xcc\x9c\x7d\xcb\xdc\xed\x5f\x76\x5f\x59\xab\xff\x9b\x1d\x06\xcc\x4f\x3b\x2d\xfd\x34\xb2\x7b\x99\x12\x9f\x8d\x39\x32\xe4\xee\xdc\x8c\xf7\x48\x09\xcd\x46\xa2\x18\xf2\xa6\x6e\x71\xb6\x6f\x58\x02\x4f\x9b\x82\xc1\xea\x7a\x14\xc7\x4a\xa0\x62\x93\x17\x11\x62\x79\x8d\x76\xa9\x20\xa0\x64\x47\x91\x44\x29\xbd\x57\x61\xf2\xa2\xaf\x17\xb7\x99\xc1\xba\xe3\x4a\x1f\x5c\xba\xb1\xe8\xd0\x4d\x77\x57\x5c\xe7\xda\xcd\x6d\x78\xf3\xa5\xa0\x56\xfd\xbe\x8f\xfd\x8c\xab\x64\x24\xe6\x50\xd7\x0d\x88\x48\xc5\x8f\x35\x4d\x75\x23\x5f\x12\x25\x59\x65\x4c\x57\x89\x5c\xdf\xd0\x15\x29\x54\x80\xed\x42\xcb\xf2\x81\xef\x4b\xba\x8e\x65\x18\xa7\x83\x9c\x7b\x1c\xb5\x10\xeb\x35\xfb\xf3\xee\xcc\xb1\x5d\xeb\xbd\xda\xaf\x75\xc1\x83\x95\xf7\x7d\xb7\x79\xf1\xed\x8e\x39\xf3\x76\xed\x31\xba\xd3\xf6\xe4\xaa\x37\xb3\x22\x56\x08\x5f\x88\x5d\x45\xd7\x05\x1a\xa8\x6a\xc0\x85\x22\xf2\x48\x5a\x64\x48\x4c\x01\xce\x8d\x80\x65\xd9\x86\x45\x09\x04\x26\x22\x42\x8e\x08\x80\x13\x9b\x9d\x63\xf9\xe5\x7d\x4b\xfa\x18\xbd\xbe\xeb\xa7\xde\x3c\x6f\x56\xed\xbf\xec\xde\xde\x77\x56\x9d\x1d\xf4\x43\xf6\x26\x63\xe5\x81\x3f\x14\x9d\x9d\xdc\xd7\xc9\xb1\x24\xd6\xe3\x45\x2c\xb8\x0e\x32\x6d\xac\xd2\x1c\x8b\xd5\xc8\x57\x49\x8d\x8e\x04\x8e\xe3\x49\x53\x63\x20\xcb\xca\x8c\x1e\x10\x01\xc1\x21\x3f\x4e\x07\x98\x92\xaf\x47\x8d\xee\x5b\xca\xe6\x10\xca\x64\xcd\x51\xf8\xbb\x93\xdf\x8f\xe9\x5a\x7f\xe2\x9b\x7b\x3a\x4c\x7a\x4b\x38\x39\x6f\x75\x83\x2c\xd7\x93\x0b\x4c\x61\x19\x15\x3b\x9c\x80\xb0\x68\x79\xba\xa9\x78\x8c\x01\x79\x99\x62\x22\x43\x61\x05\x5b\x8c\x0c\x45\xf6\x43\xd7\xa2\x19\x53\xb0\x18\x37\x86\x92\xc4\xc4\x09\x76\x4d\x1d\x5e\xae\xf9\x53\xd1\x52\xa7\xbd\xbb\xc7\xa7\xee\xdc\x79\x62\xe5\xb3\xbc\xc5\x9a\x57\x3d\x53\xb5\xca\x8a\x73\x99\x0e\xdc\xbe\x76\x61\xda\xa5\xe4\xbe\x4c\xd8\x86\x22\x67\x78\x16\xe6\x23\xc7\x70\x45\x2c\xf9\x3a\xcf\xb3\x61\xa8\x90\x80\x86\xa4\x8a\x7d\x87\xa3\x68\x46\x83\xa2\x8b\x15\x5e\x32\x42\x55\xfd\x9b\x28\x72\x55\xce\xff\xdb\xca\x26\xa5\x59\x81\x4c\x99\x53\x9e\xab\xf7\x5f\xcd\x7b\x72\xfa\xf5\x0d\x3f\x55\xc9\x37\x76\xe4\x98\x2b\x2d\xaf\xba\x4a\xd3\x43\x4b\x16\xb7\x5b\x76\xa8\xe5\xb0\xab\x6d\xce\xc4\x35\x86\x26\xd7\x9d\xa2\x80\xa5\x6d\x18\xf9\xb2\x16\x31\xb6\x6a\x06\x1e\xa2\x04\x5f\x25\x69\x37\x52\x21\x50\xb9\x08\x2b\x26\x66\x48\xde\x02\x12\xa7\x04\x8c\x8c\xb4\x7f\x3c\xbf\xff\x6b\x72\xed\xf1\x67\xda\x36\x1b\xf7\x0a\x48\xcb\x76\xb0\xe3\xf4\xa3\x69\xfb\x8c\x2d\xbf\x4e\xac\xd0\x33\xd7\x27\xe1\x91\xc5\xa9\x39\x4e\x77\xc9\x38\x0d\x5f\xe2\x16\xc5\xf4\x28\x59\xd0\x35\x86\x20\x7c\x52\x07\x9a\x29\xfb\x2a\xcb\x53\x94\xe5\x06\x5c\x88\x5c\x47\x93\xa0\x2d\xda\x72\xc0\x18\x8a\x05\xa1\xa2\xb9\x7f\x29\x3d\x3d\xdf\xa2\x7c\x3b\xa0\xd1\xb9\x0a\xa3\x1a\xac\x3d\x59\x20\x7f\x9b\x23\x87\x45\xe7\x60\xcb\xf8\xf4\x58\x79\x4d\x8d\x31\x7d\x87\x75\xa5\xe9\x6c\x19\x3f\xf2\x4c\xac\xd3\x16\x68\xa1\x18\x20\xc7\xf4\x23\x00\x34\xd5\x33\x0c\x12\x8b\xb4\xaf\xea\xb6\xe1\x41\x64\x91\xa2\x81\x2c\x23\x90\x74\x10\x09\x9c\xa2\xea\x32\x72\xd3\x91\x43\xae\x20\xdf\xd9\xcf\x77\x29\xde\x7a\xc5\xfb\x97\x98\x23\xa9\xc7\xaf\xd5\x1c\xf1\x83\xdb\x9c\x63\xbb\xaf\x78\x5c\xc8\x3a\x75\x64\x60\x92\xc9\x80\x62\x5a\x06\x12\x19\xfa\x76\x0c\x79\x22\x60\x1c\x81\x97\x02\xc5\x36\x75\x92\xd3\xc9\x58\x50\x41\x64\x6b\x8a\x6f\x91\x84\xa4\x33\x3a\x70\x39\xd2\xd7\x12\xd0\x4a\x5e\x0c\x6e\xac\x28\x69\x6b\xe6\xe9\x69\xdd\xa7\x75\xb6\xbb\x2d\x21\x4b\xe5\x1c\xbe\x7a\x6d\xa3\xab\xed\x3f\xa7\xab\x65\x5f\x33\x7c\x54\x92\x79\x31\x2c\x10\x38\x40\xd1\x2d\x8d\x72\x34\x5d\x08\x11\x8f\x39\x15\x72\xb4\x69\xdb\x26\x45\x05\x3e\x24\x63\xc1\x52\x79\x99\x95\x98\x50\x83\x11\x72\x05\xe7\x05\x3c\xf4\x7f\xdb\x9c\xa6\x34\x2f\xf7\xf1\x7f\x0a\x7a\xec\x79\x7f\xed\x87\x83\xe6\x76\x38\xa6\x37\x7b\xe7\x41\xad\x09\x97\x86\xcd\xba\x5e\x7b\xff\xce\xfb\x75\xb9\x32\x4b\x06\x8e\x9d\x4e\x9f\xc8\xf8\xfd\x43\x62\x0e\x5b\x91\x8b\xed\xd8\xa3\x82\x50\x13\x05\x28\x05\x1e\x15\x07\x0e\xa7\x72\x98\xa5\x30\x49\x07\x1c\xcd\xf2\x22\x8c\x59\xc0\x09\x12\x15\x58\xac\x23\x71\x30\x71\xd1\xdc\xf1\x58\xb9\xa9\x37\xdb\xcf\xf8\xf3\xd1\xc0\xe8\xe5\x61\xbd\x97\xff\x5c\x62\xea\xe7\x55\xf6\x1c\x6e\xbd\xc3\xeb\x73\xf3\xb7\x8f\x3f\xe8\xf3\x63\x92\x0b\x9c\x80\xb5\x7c\x19\xea\x2c\x1d\x22\x59\x84\x9a\xed\x69\x84\xe1\xbb\xac\x23\x08\x91\x25\x63\xda\xe1\x08\x88\x4d\x21\x8c\x08\xa0\x30\xb1\x4b\x20\xc1\x4d\xfc\xe4\x2e\x27\x5f\xff\x6d\x51\x96\x4d\x83\xeb\x0c\xa9\x56\x90\x13\xf4\xc7\x5a\xf9\xd9\xb5\x26\xe5\x4a\x5d\x77\x70\x5c\xae\xcd\x7d\x1a\xd5\xc8\x38\xcd\x5a\x62\xd0\x41\x18\x48\x58\x77\x4d\x99\xd1\x19\xc4\x12\x06\x74\x15\xd9\x27\x05\x5e\x80\xb4\x6f\x01\x1c\xf1\xa4\xee\x52\x8c\x4f\xf8\xa2\x4c\x30\x94\xaa\xda\x6a\x3a\x66\x57\x3d\x39\xe0\x99\x5f\xdb\xfb\x74\xe4\x81\x72\xa3\x5e\x4a\x75\x26\xbf\xdd\xf8\x78\xdb\xd4\xec\x79\x8a\x7f\x33\x63\x1f\x3b\x68\xc4\xee\x24\x57\x0a\x0a\x0c\x45\x01\xc9\x90\x23\x42\x4a\xf1\x35\x99\x8c\xa1\xec\xc5\xb1\x68\x01\x12\xe9\xb6\x2b\x52\x96\x23\x00\x92\x80\xb6\xe0\x1b\xa1\xc5\x72\x86\x6a\xbc\x10\x0a\xff\x6d\x17\x99\xd2\x3c\x57\xf9\x4c\x99\x9f\x0f\x85\xaf\xa6\x5d\xbd\x54\xfc\xe2\x17\x95\xe4\xb4\x36\x23\x0e\x77\x1b\xfa\xce\xc7\x77\x46\x5f\x6a\xbf\x97\x7a\xf3\xcf\x47\xf3\xf7\x7f\xb2\x72\x43\xc6\x39\x21\x12\xdf\xd4\x8a\x1c\x11\x53\x3c\x70\x79\x86\x88\x54\x95\x10\x2c\x25\xb2\x69\x14\xc5\x01\xaf\xb1\x1a\x22\x22\xd6\xf7\x7d\x22\xe2\x1d\xd3\xe5\x48\x92\xa3\x00\xc1\x27\xfe\x71\x5e\xcd\x3a\xa5\xee\x8e\xe3\x1d\xee\xd7\xbb\xbe\xe0\xcd\x8f\x1f\x7e\x7f\x68\x7b\xe7\xf2\xaf\xec\xae\xf4\x6e\x87\xa5\x5e\xd5\x42\xcb\xdf\xdf\x9b\x71\xfe\x9e\x84\xa1\x40\x62\xde\xe7\x81\x00\x28\x89\xe0\xc9\x10\x5b\x4e\xa4\x02\x4d\x67\x69\xd1\x89\x90\x2f\xeb\x61\x4c\xa8\xa2\xe6\x4b\x22\x94\x09\xc7\x26\x28\xc6\x4f\xcf\xa7\x4e\xe7\x7d\x44\xe6\x2a\x7c\x7f\xd0\x27\x37\x5a\xaf\x68\x71\xa6\xf7\xf5\x1b\x85\x1a\x14\x51\xdf\x79\xe9\xbb\x8f\xb6\xee\xcd\x59\xf1\xe6\x1b\x19\xe7\xa4\x4a\xbc\x9a\x74\x15\x56\x8f\x3c\x11\x92\x94\x64\x51\x1a\xa4\x1c\xd2\x73\x23\x3a\x92\xa2\x30\xe0\x25\x44\xc5\x94\x49\x70\x36\x74\x03\xac\x02\x47\x0e\x91\xe1\xa4\xc3\xef\x78\xbf\xe4\x4c\xa6\x51\x8b\x2d\x4d\x7a\xf5\xcf\xd2\xae\x7c\xbf\xd5\x5c\xbb\x77\xa7\x1d\x49\x3d\x94\xad\xd5\x2b\x8d\x3e\x54\xe7\xb4\x7e\xe9\x61\x72\x1f\x32\x88\xe9\xd8\x60\x0c\x4d\x82\x4e\x10\xd9\x94\xef\x40\xda\x44\x0e\x74\x38\x81\x54\x2d\x23\x80\x2a\xb2\x04\x86\x01\xaa\x08\x1c\x0b\x41\x21\x40\xe8\xef\x61\x6c\x4a\xdb\xbf\x2c\xde\xa8\x4c\x3f\x3e\xa7\x70\xd7\x4d\xa7\x9f\xc4\xd2\xec\xfb\x3d\x8a\x10\x6f\xbc\x7d\x67\x72\xb1\x02\x6f\xbc\xbf\xbc\xe3\xca\x8b\xbf\x8f\x53\x52\x9a\x3f\x3b\xf7\xec\xd9\xd4\xb2\xcf\x15\x73\x9d\xf3\x2a\x85\x5b\x9f\x1a\x32\x71\xd8\x00\xa3\xcb\xce\xef\xdb\xb6\xf8\x58\xaf\xb5\xe2\xc7\x8f\x3e\xce\x59\x2f\x5f\x8b\x6a\xdd\xc8\xfe\x17\x93\xfb\x67\xd2\xb6\x8a\xfc\x40\xd1\x54\x40\x07\xb1\x44\x73\x32\x10\x79\xc9\x17\x02\x49\x24\x82\x88\xb0\x0c\x97\x04\x2a\x52\x42\x2c\x58\x8e\x13\x85\x22\x6f\xa2\x04\xf4\x17\xf3\xcb\x9d\xfd\x72\xca\x6c\x35\x2e\xb9\x68\xd3\x9d\x9b\xc4\xcb\xbd\x26\xdf\xad\xd9\xa7\xdd\xc6\xc2\x07\xf2\x5d\x4b\x31\xeb\x76\x1a\xf9\x7e\x72\xf7\x28\x50\xb2\x7c\x5e\xa1\x14\xec\x05\x88\x89\x25\x4e\x52\x35\x9d\x84\xd0\xd5\x6d\x8b\x01\xa6\xa8\xd9\x16\x04\x64\x1c\x72\x20\xa4\x01\xeb\xab\xa2\xf2\x57\xfd\xf9\x1f\x26\xf7\xd4\x76\xb3\x43\x1a\x47\x7d\xd7\xee\x69\x7f\x62\x45\x99\x7c\x29\x64\x6a\xd6\x0b\x17\x2f\x34\x1e\x8d\xe5\x02\x93\x1b\x35\xab\x93\x5c\x93\x45\x4f\xe0\x2c\x5b\xa4\x42\x0b\x68\x9c\x20\x1b\x2a\x74\xf8\x18\x9b\x8e\x1a\x20\xcf\xb1\x65\x22\x74\x2d\x8f\x20\x18\x3a\xa6\x98\x7f\xfd\x3b\x89\x50\x7a\x90\xc6\x5c\xbd\x4f\xfd\x91\xbb\x7d\xda\xf1\x36\x37\x9d\xc5\x8f\xaf\xcd\xbb\xbc\xec\xdb\xd5\x37\x16\xdd\xfb\x2e\x2d\xcb\x6c\x68\xb7\x6d\x30\x3a\xfb\xf3\xff\xbb\xd0\x90\x2b\xe6\xe7\xbb\xc4\x49\x15\x6f\xa9\x45\x1e\x8c\x28\xfb\xc6\x86\x07\x85\xa8\x73\x17\x46\x35\xea\x53\xfb\xa8\x57\x15\xc1\xbe\xcf\x15\x8a\x0d\x7e\x58\x35\x71\xfb\xc8\x7b\x03\x1b\xa3\xf2\x27\xb4\x82\x15\x1f\xbf\x71\xb9\x44\xd6\xd1\xca\xe3\xd2\xa5\x72\x2f\x1c\xf5\x5b\x91\xb3\x19\x7f\xd8\x13\x3f\x35\x80\x64\x14\xa8\xb2\x1c\x8e\x95\x18\xe8\xa1\xc6\x4b\x9a\xe0\x61\xc4\xab\x06\x1d\xa8\x34\x24\x7d\x49\x24\x80\x80\x23\xd5\xe2\x42\x5a\xe5\x81\x20\xbf\xd8\x45\x1c\xaf\x74\xf8\x11\x99\xba\xa2\xce\x6b\x0d\xdb\xe4\xab\x30\xba\x5b\x0f\x7d\x7f\xcb\x5d\x6b\xa6\xac\xad\x19\x14\x7c\xe3\xe4\x87\x87\x86\xcd\x4b\x32\x99\xb7\x4e\x05\x6e\x1c\x6a\xd8\xd2\x08\x42\x17\x4c\x9d\x61\x3d\x6c\x00\x96\x97\x29\x47\x56\x21\xed\x61\x47\x67\x7c\x93\x93\x23\x09\xda\x48\x27\x98\xbf\xae\x85\x12\xe0\x75\x5e\xcb\x16\xcd\xdc\x72\xb6\x7c\x21\x7a\x59\x93\x57\x9d\x6e\x9f\xfc\x32\x9f\xcd\xb2\x69\xc3\x3b\x93\x5f\x3f\xf1\x55\x85\xf7\x9b\xd6\x85\x35\x9f\x4b\x08\x6f\x3d\xb8\x90\x6b\x72\x9c\xf3\xfb\x33\x45\xca\xe6\x5e\xf5\xfa\x81\xed\x4b\x3b\xff\x9e\x6f\x59\x5a\xf3\x8f\x87\x55\x56\x9f\x7d\x52\xda\x4f\x32\x86\x9f\xb1\x7d\xde\x15\xb9\xc8\xf5\x14\x18\x7b\xba\xe9\x98\xac\x49\x7a\x11\x8c\x04\x9f\x44\x18\x7b\x3c\x19\xfb\x88\xe4\x78\x03\xd8\x0c\x41\xd3\xb4\xc9\x09\x2f\x76\xdd\x9d\x0b\x1d\x6e\xf0\xcd\xa7\x85\xb2\x81\x2e\x43\x7b\xf6\x5e\xfb\xb2\xf7\xdb\x86\x76\x13\xfa\xe7\x25\x4b\x7d\x32\x74\xc7\xa6\xa1\xdc\xf7\x19\x27\x6b\x4c\xfc\x9e\x23\x43\x25\x44\xc1\x75\x19\x60\x18\x88\x56\x2c\x3e\xd0\x41\x04\x49\x93\x61\x7c\x0f\xa8\x01\xe5\xe9\x9a\xe3\xdb\x0a\x34\x75\x45\x0f\x5c\x2b\x54\x61\x82\xad\xfb\xaf\x8b\x0e\xec\x2e\x76\xfb\x97\xed\x3d\x4f\xed\x8f\xf2\x1f\xcd\x3d\xf1\x59\xe9\x8e\xa5\x72\x3d\x2a\x9b\x5a\xea\xd8\xa1\x89\x3d\x0e\x3e\x4b\x6e\xda\x15\x54\x5f\xf5\x65\x56\xb2\x1d\x97\xb5\xa2\x50\x0a\x28\x1c\xd1\xd8\x36\x44\xd1\xf2\x74\x3f\x32\x63\xc6\xd7\x63\xc7\x89\xfd\x80\xf2\x80\x1f\x53\x02\x4c\x47\x85\xfb\x87\x45\x55\x7f\xed\x21\xcf\xba\xd9\x69\xce\x88\x94\x31\xca\xc1\x31\x3b\xbf\x6a\x95\x3b\x5b\x91\x9e\xaf\xe6\x33\xc5\x39\x53\x2a\xbd\x9f\x71\x6c\x60\x42\xe7\x70\x3c\xe8\x7a\x28\xd0\x59\x6c\xe1\x58\x41\x8a\xa1\xc6\x30\x8a\x62\xd2\xe1\x3d\x5e\x64\x28\xdd\xe1\x43\xcc\x05\x84\x6e\x6a\x51\xcc\x42\x9b\x26\x22\x98\x18\x85\x59\x3b\xec\x78\xb1\xe2\xe2\xa2\xf5\x8f\x5c\x79\x78\xf9\xe6\x99\xba\xdf\x51\x33\xa7\x77\x2a\xec\x77\xca\x66\xcd\x58\x34\xe7\x74\xe7\x47\x49\x9e\xbc\x23\x2c\x48\x12\x15\xc5\x88\x52\x5c\x59\x13\xe9\x48\x8a\x65\xda\xb7\x7d\xc9\x93\x35\xcf\x70\x3c\x85\xf7\x04\x28\x0b\x81\xc8\xc6\x9a\x4d\xd1\x96\x07\xd0\x8b\x2f\xc6\x5e\xf8\xd5\xd9\xad\x2b\x96\xb8\xb3\xba\x4d\x28\xf9\xc1\xe9\x26\x3b\x4e\x46\x65\x2f\x16\x9b\x70\xa1\xc0\xe9\x41\xc5\x87\xd0\xa3\x9a\x24\x99\x18\x80\xe3\x42\x3d\xe0\x43\x99\x73\x7c\x89\x97\x68\xdf\x63\xbd\x80\x32\x22\x5f\x92\xe3\x98\x50\xc4\xc0\x8c\x85\x88\x62\x35\x8a\x0d\x25\x82\x09\x2c\x24\xff\x43\x55\xe2\xef\xab\xac\x46\xb9\x56\xdf\xcd\xdd\x7f\x59\xc5\x91\x5b\xaf\xa4\xd9\xc5\xaa\x0e\xf8\xad\xc5\x6d\xa6\xcf\xe3\x8b\xcd\xcf\xe5\x2c\xb2\xe9\xdb\x4e\x19\xa7\x7a\x4d\x87\x1d\x8e\xb3\xb0\x1a\x88\x06\xcf\xc8\xb6\x28\x71\xa6\x1d\xc6\x7a\xec\x07\x72\xac\xd2\x01\xad\x22\x4b\x66\x60\x28\xf2\x3e\x12\x44\x26\xa2\x44\x03\xff\x85\x6f\x78\xb1\x3e\xbd\x33\xbe\xc6\xfb\x1b\xbf\x50\xb7\x4f\x64\xd4\xb2\xed\x3a\x1f\x6e\x9a\x7b\xd1\x07\xc7\xc6\x0a\x1d\xfa\xfc\x7a\xa7\xf1\x4b\xec\xa2\xdc\x54\x72\x9d\x83\xd0\x3c\x87\x64\x39\x2d\xc4\x91\x8b\xa1\x4a\x84\x50\x54\x79\x1e\xc4\x9c\x20\xfa\xb4\x4b\x10\x8c\xc8\x12\x7a\xa0\x48\x92\x19\xbb\xc0\x27\x19\x99\x70\x12\x0f\x5a\x5a\x77\xe9\xd2\x7a\x52\x96\x5a\x1f\xfe\xda\xaf\x49\xcb\x6f\x1a\xbd\x74\xf7\x8d\xb7\x9a\x8f\xac\x92\xfd\xd2\xf9\xaa\x9b\x66\x96\x7e\xc9\x2b\x9b\x64\xad\x03\x92\x16\x80\xaf\xab\x6e\xe4\x85\x80\xd3\x24\x56\x15\x0d\xce\x66\xa3\xd8\x25\x4d\x80\x62\x87\x27\x3d\xcd\xb7\x91\x2d\xd0\xb2\x4f\xd1\x7e\x6c\x82\xbf\x70\x95\xcf\xbf\x9f\x7b\xd6\x56\xaf\xfa\xa0\x58\xff\xf5\x73\xf6\xb7\xfb\x7c\x02\xd5\xba\x48\xb5\x53\xee\xf4\x8e\xcc\x86\x7a\xc5\x7e\xce\xdc\x5c\xb8\xbe\x65\x56\x72\xab\xa0\x58\xc6\x2a\x42\xa4\x60\x0b\x81\x1f\xb1\x8a\xc0\x6a\x84\x61\x63\x45\x66\xd9\x80\x70\x89\x88\x63\x09\x1f\x06\x16\x6f\x03\x07\x63\x9e\x50\x22\x8e\x05\xe9\x2c\xc0\x6a\xf7\x2c\xce\x17\x5e\x35\xbd\xf5\x7b\xbf\xf6\x7e\xe9\x9b\x45\x61\xea\xfa\x9c\xdd\xf2\x81\xc1\xf3\xf8\xa9\xa9\x83\xb3\xdd\x33\x8e\x26\xf9\x40\x92\x90\x5c\xc8\xc7\xae\xc5\xf1\x16\xc7\xf2\x1a\xa9\xaa\x84\xe4\xb3\x58\x35\x55\x57\x76\x0c\xd1\x20\x03\xdf\x03\xac\x45\x5a\xac\xc6\x89\x9e\x4c\xc5\x62\x62\x8e\x8e\xb2\xd5\xd6\x1a\x23\x3a\x6b\x55\x8f\x17\x6a\xf2\x76\x83\x3a\xb9\x0a\xe1\x5f\x67\x4e\x1d\xdb\x72\xed\xb4\xda\x7d\xec\x1f\x86\xdd\xfe\x2c\xb9\x58\x34\x96\xf2\x10\xe7\xe8\x91\xab\xb0\x9c\xc8\x62\x46\x75\x84\x98\x88\x8c\xd0\x33\x74\xca\xe5\x23\x13\xd0\x91\x28\x98\x32\xa1\xa9\x0c\xe1\x5b\x41\x60\xb8\x6e\xf4\x62\x06\x69\xf6\xd1\x05\xe1\x61\xad\x36\xef\x29\xa3\x27\x7d\xde\xab\xdd\x81\xa0\x77\x39\x62\x40\xf7\x77\x86\x2c\xe8\x7a\xe9\x46\x09\x7a\x62\xbb\x5d\xc9\x6d\x15\x39\x59\x46\x84\x0f\x28\xd1\x26\x02\x4f\xf7\x39\x89\x0b\x3d\xa0\x61\x8e\x8c\xe3\x28\x96\x2d\x4b\x04\x06\xe6\x5c\x06\x6a\xbe\xa1\x12\x01\x20\x68\x68\x27\x06\x2a\xd6\xfc\x7d\x58\x6a\xee\x32\xc5\xcb\x35\xaf\xbe\xbb\xce\xfd\x15\x05\xd3\x3e\xed\xb8\x73\xef\x94\xdc\xc2\xa6\x8a\xf7\xde\x6b\x56\xb4\xc4\xf9\x43\xc9\x0d\x45\x9f\x65\x7d\x8a\xb2\x45\x93\x90\x68\x68\x1a\x48\xf6\x95\x58\x25\x58\xd2\x8b\x6d\xcb\x80\x2c\x02\x21\xef\xba\x16\x61\x20\x1d\xd1\x84\x19\xc0\x88\x4d\x30\x10\x6f\xdf\xbf\xc5\x17\x33\x7e\xf9\xa8\x7d\xf7\xb1\x97\x27\xf6\x6b\xd8\x72\xd7\x9e\xf1\xef\x56\xba\x7b\xbe\xfc\x27\x4f\x17\xa5\xec\x7e\xed\xea\xa7\x19\x27\x0a\x49\xe8\x1c\x26\x56\x0c\x9a\x14\x15\xca\x74\xa9\xd8\x54\x4c\x07\x5a\xba\xfc\xaf\xde\xc4\x22\x79\x92\x16\x41\x24\x2a\x92\x88\x10\x1d\x39\xa6\xab\x32\xa6\xe4\x71\x09\x80\x8a\x3f\x0e\x9b\xbd\xb4\xd6\x8f\x4b\x2b\x2f\x7c\x63\xbd\x7e\x91\x9f\xf2\xf4\x41\xc3\x4c\x56\xee\xcd\x05\xf3\xdc\x6f\x38\x78\x59\xd1\xc3\x57\x06\x27\x99\x62\x20\x16\x91\xce\x01\x99\xe4\xa1\x88\x30\x1d\x10\x48\x14\x6c\x27\x14\x22\xc6\x70\xa1\xe0\x21\x05\x02\x0a\x42\x3a\x76\x34\xd9\x47\x2c\x6b\x3b\x44\x3a\x61\xf8\xe6\x99\xc2\xe7\x2a\x7c\x96\x6b\x8b\x5b\xbd\xc7\xe2\x6d\x8f\x06\xcc\x19\xde\xb0\x55\x07\x7d\x63\xda\xbd\x0a\x6b\x32\x7d\x54\xab\xc7\xb5\xd2\xc9\x4d\x7a\x2e\x14\x3d\x86\xc6\xac\xc9\xd1\x0a\x63\xf8\x4c\xa4\xa8\x26\x1f\xdb\x10\x85\xae\x1d\xb8\x1c\x41\x04\x06\x6f\x6b\xd0\x8d\x0c\x95\xe0\x03\xd2\x00\x50\x7a\xb1\xf6\x68\x51\xa1\xd5\x99\x93\x27\x1a\xee\x11\xda\x75\x2b\xd0\x6a\xfd\x84\xab\xaf\x1f\x3a\xfe\x88\xac\x55\x46\xfc\x6a\xd9\xb0\xac\xa8\xcf\xf5\x95\xc9\xf5\x67\x8d\x13\xed\x88\xf5\x90\xab\x1b\x88\xe7\x15\xcd\x42\x2c\x13\x05\x32\x0c\x31\x24\x22\xcb\x8b\x08\x55\xb0\x59\x45\x11\x22\x4e\xf5\x75\x57\xb1\x04\xa8\x24\x0e\xc3\xd6\x67\x97\x5e\x4a\x59\xf0\x70\xb0\x30\x73\xd7\xb3\x4a\xbf\xfe\x76\xe7\xde\x9a\x9a\xaf\xf7\x2d\x7d\xad\x7f\x03\x21\xfa\xe0\xc3\x8e\xbd\x32\x7e\x30\x9d\xd0\x6c\x99\x0c\x3c\xdb\xd4\x5d\xa4\x7a\x4a\xc8\x01\x5a\x63\xb9\x38\xf2\x2d\x8e\x93\x14\x23\x0c\x19\x5a\xa2\x43\x93\x23\x29\x8a\x72\x63\x20\x41\x9a\xe7\x80\xff\x62\x18\xda\xe5\x47\x37\x7a\xa3\x65\x51\xf1\xd7\x5c\xec\x7c\xe6\xd5\xef\x7e\x18\x99\xfb\xd3\x61\x45\xab\x8d\x82\xce\x9e\x56\x1f\xac\xcb\x7c\x77\x6b\x92\x5f\x44\x91\xe1\x04\x00\x29\xc9\x70\x1c\x11\x21\x87\x33\x30\x0a\x94\x40\xa1\x7d\xda\x92\x79\x49\x92\x15\x47\xb0\x64\x47\xa7\x6d\x96\xb0\x63\xc7\xc2\x4e\x02\xe7\xf8\xb9\x6f\x91\x43\x6f\xd0\xc4\xa3\x2e\x7d\xad\x25\x6d\x0a\x57\x1e\xb3\xe7\xf5\x1a\xa5\xca\x7f\xb8\xb5\xdb\x4b\xbb\x2f\x8e\x3d\x9a\x86\x72\x26\x19\x33\x44\x6a\x88\x82\x86\xa8\x62\x93\xf5\x23\x07\xc9\x1e\x8d\xb1\xcc\xf2\x5a\x88\x0c\x42\x65\x5c\x0f\x10\xa1\xaa\x98\x14\xc1\x68\x2c\x6d\x47\x0a\xfd\x0f\xc1\xa2\xe7\x1e\xf1\x67\x6d\x0e\xb4\xf8\x62\xe1\xc3\x2d\x95\xbb\xc0\xc6\x59\x8b\x6d\xcd\xb6\x79\x75\xf5\x2e\xad\x56\xec\xa8\x9f\xe9\xc4\xa4\xa2\x61\x89\x21\x49\xa6\x0c\x00\xb1\x68\x78\x3a\x0a\x22\x89\xb2\x64\x41\x47\x84\x4c\x45\x26\xe1\x50\x84\x49\x60\x1d\xa8\xc0\x91\x3d\xd1\x74\xa1\xa0\x86\x21\xf4\x6c\x32\x12\x1d\x3f\x71\x95\x67\x4c\xab\x7c\x7e\xc8\xe3\x78\xee\x37\xdb\x6e\xd6\x15\x4e\x74\xc8\xf5\x73\xab\x67\xfd\xcb\x9c\xce\x79\x6d\xfb\x0f\xbf\xe5\xbc\x48\x96\x1e\x91\x5c\x07\x41\x12\x01\x2c\xde\x46\xb2\x27\xeb\xa1\xc1\xc9\x92\x8b\x19\xcd\x0e\x30\x85\x18\x16\x59\x24\xc3\xf0\x9a\x2a\x50\x81\x0d\x80\x6b\x59\x98\x8b\xe2\x88\x7b\xd1\x41\x0e\xaf\xb8\x5b\xfb\x54\x4b\x7f\x80\x34\xb7\x49\x97\x6b\xf9\x1f\xb4\x5a\x99\xeb\x53\x61\x6d\xc9\xcd\x79\x1b\xdc\x6e\xfe\x3e\xad\xb3\xb5\x92\x7c\xd9\xaa\x78\x94\x60\xea\x8e\x84\x4d\x4d\x75\x00\x2d\xba\x4c\x2c\x88\x16\x6d\xc8\x46\x44\xc6\x50\xd3\x15\xc1\x0c\x4d\x0b\x38\x8c\x16\x31\x2a\x44\x7c\x94\xce\x97\xce\xd4\xec\xcf\xcf\x4f\xb6\x06\x2f\x0d\xd9\x56\xab\x71\x83\xbd\xd6\x7d\xb2\x42\x87\xcf\xaa\x15\xdd\xf8\x0b\xce\x3c\x03\x8c\xed\x99\x9a\x71\x1d\x82\xc4\x7e\x2d\x49\xbe\x1d\x09\x2a\x19\x18\x72\xc4\xfb\x98\xf3\xfc\x30\x82\x8a\x2b\x4b\x41\xc0\x93\x40\x20\x1c\x4e\x26\x44\x2d\x70\x4c\x18\x4b\x34\x83\x8c\xbf\xb4\xc3\x9e\x7f\x11\xcf\x7d\xbd\xe3\xcf\x06\xb0\x6e\xd9\xf7\xd4\x8a\x1f\x6d\x1b\x7d\xff\x68\xb5\x16\x46\x87\xd3\x4b\xa3\x3d\x3f\x1f\x7e\x7c\x75\xc0\xfe\x49\xaf\x27\xf9\x50\x9a\xb0\x75\x86\x32\x44\xdd\xa4\x9d\x10\x03\xd1\xe7\x1c\xc4\x48\xc8\x61\x68\x87\x02\x14\xe1\x5a\x81\xac\xaa\x92\x4d\x93\x9a\x88\xa9\x08\x19\xa2\x67\x26\xc6\x0b\x17\xbc\xd3\xae\xe2\xeb\x7f\xe4\x6c\x36\x78\x47\xc9\x35\xc5\xb7\x4d\x3b\x39\xaf\xc8\x30\x7e\x65\xea\x90\x42\xf2\xf8\x8d\xdc\x89\x6c\x17\xb2\x26\xb7\xf6\x30\x4c\x45\xa2\x55\x93\xf3\x75\x52\x93\x00\x72\xb9\xc0\x06\x2c\x0c\x7d\x92\x37\xd5\x90\xf2\x3d\x87\xc5\x40\xe7\x35\x86\x8e\x3c\x9e\x31\x0d\x1b\x80\x04\x6c\x34\x35\x3f\xba\x98\x6b\xb2\x3d\xa6\x7f\xc7\xac\xf7\x07\x96\xf6\xc6\x4e\x6c\xdf\xbc\xe7\xda\x31\x3f\x6e\x3d\x32\xa3\xc6\xa1\xc6\x9f\xdf\x7c\xfb\xb3\xe4\x3e\x2d\x14\xb4\x45\x00\x7d\x26\xf0\x74\x60\x01\x15\x5a\x8c\xa4\x63\x8a\xd4\x54\x06\xc7\xc1\xff\xc7\xda\x77\x46\x5b\x51\x2c\x6d\x23\x49\x40\x41\xb2\x28\x48\x90\x70\x90\xcc\x44\x92\x92\x83\x64\x11\x10\x91\x34\xd3\x93\x7b\x62\xf7\x64\x40\xf0\x08\x12\x24\x07\x39\x20\x19\x24\x27\x41\xa2\xa0\x80\x48\x96\xa0\xe4\x1c\x24\x4b\x46\xb2\xf0\xad\xfb\xde\xf7\x7e\xd7\xf3\xb2\xcf\xba\x77\x9d\xb5\xff\xef\x1f\xb5\x7b\xaa\xaa\xab\xab\x9e\x7a\x1e\x55\xe1\x18\x89\x8e\x25\x92\x53\xfc\xc8\x17\x65\x64\xc9\x1a\x69\xbe\x78\xb5\x8c\xf9\x7d\xc6\x84\xae\x5f\x4f\xcf\xbb\x67\x45\x8e\xe1\x79\xb7\xcc\x29\x7c\x61\x71\xc1\xee\xaf\x4f\x7c\xb0\xa2\x48\xfb\x67\x3d\x76\x0a\x25\x2b\x26\x37\xe1\xd1\x20\x14\x80\x2d\x06\x04\x8b\x80\x63\x47\x9c\xc6\xcb\x81\x1d\xba\x00\x28\x40\x89\x2d\x97\x57\x3d\x52\x06\x34\x30\x35\xc5\x03\x8c\x0c\x0d\x3a\xc2\x89\x1f\x5b\x52\xa5\x61\xe1\x5f\xc2\xb3\x0e\xa5\xe9\xec\x63\x96\xc0\xdd\x8f\xd7\xb4\xca\x59\x39\xfb\xed\xeb\x47\xde\x7e\x78\x37\xef\xe0\x32\xe4\x8a\x24\xe3\x85\xb1\x28\x78\x82\xa1\xb1\xaa\xa4\x6a\xa6\xa5\xdb\x32\x19\x59\xbc\x05\x22\x86\x72\x25\x37\x74\x24\x1e\x06\xb6\xa2\xda\x1a\x47\xf9\xb4\x1f\x02\x0b\x80\xc4\x58\xa5\xc9\x93\xea\xff\xb4\xfb\xaf\x4f\x88\xd5\x27\x24\x73\xc8\x77\xe5\x26\x9f\xaf\xf2\xa0\xda\xf4\x93\x47\xf2\x9c\x5c\x30\xb1\x76\x81\x62\x87\x93\xac\x06\x66\x4a\x21\xa3\x4a\xd0\xa1\x39\xc6\x8b\x6d\xcd\x32\x01\xa4\x69\x21\x96\x29\x93\xc0\x0e\x29\x33\x9e\xaa\x28\x32\xe0\x11\xb4\x22\xcb\x0f\x62\x91\xe3\x12\x2c\x99\xaf\x98\x62\x84\x63\x6e\xbf\x3f\x72\xed\xa8\xca\xb7\xa7\xcc\x79\xfe\xaa\x75\xc4\x78\xb2\xb2\xd6\xd1\x3e\xbb\x9b\xe5\x86\x1b\x8e\xfd\xd2\x2e\xc9\x85\xa9\x23\x88\xa2\xa7\x5b\x24\xc5\x22\x2f\x8a\x04\x29\x20\xa0\xab\x73\x7e\xec\xb8\x64\x60\xfb\x94\x26\x68\x11\x11\x6a\x24\xcf\x08\x0e\xa9\x98\xac\x1f\x81\x0c\x66\x12\x65\x8a\x8c\x1f\xb4\xe6\x7e\x8e\xb4\x6d\x47\xef\xdf\x6d\xb3\xc3\x6c\xbb\xc6\x29\xfe\xf8\xe0\xc3\xe3\x9d\x36\xdc\x2c\x93\x75\xc4\xeb\x33\x8b\xa6\xff\xf5\xaa\xce\x07\xca\xb7\xff\xe3\xed\x9c\x97\xdf\x14\x97\xbe\x71\xf7\x64\xff\x3c\xe7\x37\x7c\x5e\xb5\x60\x89\xfc\x1b\xaf\x3d\xdf\xc1\xc2\xd0\x48\xf7\x15\x7b\x94\xbe\x3c\xba\xf0\xa5\x22\xfe\xf6\x99\x42\x95\xfc\xcb\xb6\xd6\x2c\xd0\xff\xbb\x49\x37\x8a\xb6\xd6\x86\x3d\x9c\x5c\xa8\x7b\xcf\xd7\x66\x24\x37\x66\xa2\xd8\x04\x90\xb3\x4c\x28\x1b\x36\x50\x90\x2e\xa9\x64\x60\x38\x94\xef\x06\x9a\x46\x0a\xc0\x62\x18\x0f\x1a\x9c\x23\x51\x22\x03\x68\x91\xb7\x81\x63\xbe\x78\xdb\x5e\x69\x3b\x70\xf3\xba\xcf\xe5\x22\xa5\x46\xbc\x7c\xe5\xf1\xbb\xa5\x1a\xfd\x7e\xe1\xcc\x80\x59\xe4\xfd\xfc\x27\x47\x9e\xc8\x53\x7c\x98\x38\x2b\xc9\x84\x0c\x11\x03\x38\x39\xa2\x91\xc0\x23\xc1\xf4\x78\x5d\x89\x03\x4d\xe0\x64\xd1\x56\x28\x4a\x85\x86\x15\x92\x42\x2c\x7a\x6a\xc8\x39\xbe\x66\xf2\x0e\x9d\x9e\x83\xf0\xdf\x27\x4d\xcf\x29\xb4\x37\xfb\x37\x23\x0a\x36\xfa\xb4\xc3\xf4\xdf\x36\xd7\x53\x79\x4d\xdc\x5c\xe4\x64\x4a\xbe\x76\x15\x9f\x4c\xdd\xb6\xf4\xfa\xab\x49\x1e\x0a\x43\xe0\x22\xc1\x07\x58\xd6\x5d\x91\x0f\x42\x9b\x0a\xe8\xc8\x8d\x24\x82\x45\x16\x83\x02\xec\xf3\x42\x48\x3b\x4e\xc0\x69\x20\x10\x43\x37\x54\x04\xe3\xc5\x84\xaa\xaf\xec\x2b\x1d\xfe\xf9\xe7\xe2\x69\x33\xb2\x29\xeb\xe6\xb7\x5c\xbd\xb1\xf7\x3e\x2f\x65\x3d\x5c\xf3\x6a\xfe\x0f\x7b\xf4\xde\xb6\x5e\x4b\x6e\x66\x0a\x55\xe4\xbb\x24\x63\x5a\xb1\xa3\x47\x8a\xc7\xf1\xd8\xb7\x40\x40\x7b\x34\xb6\xb4\x48\x14\x90\x24\x52\xb4\xcc\x4b\xba\xcb\x33\x40\xa3\x09\x39\x06\x7f\x67\xe6\xfb\x7b\x04\xec\x33\xb6\x9e\xae\x69\x7c\x94\xad\xed\xe3\xdc\xf5\xee\x16\xc9\x53\x68\xc2\x07\x9f\xb6\xfb\xae\x4e\xc5\x91\xdf\xd8\x97\x6e\x4d\x7d\xfe\xf9\x8d\x74\x77\x73\xad\x7d\xa5\x9d\xde\x53\x16\xde\xba\xbf\x3c\x77\xa5\xdf\x7a\x38\xe3\x5f\x1a\xd2\xed\xc8\xf7\x0d\xa3\xa6\xaf\x2f\x1b\xc6\x08\x57\xc4\x24\xb3\xa4\x2a\x86\x81\x18\x8d\x8b\x55\xc6\xe0\xdc\x40\x8c\x70\x18\x92\x96\x24\x12\x14\xc2\x3c\xa0\x64\x2f\x36\x04\x4b\x80\xaa\x65\x39\x1e\x02\x56\x24\x3a\x44\x82\xb6\x73\x5a\x36\x6b\x83\xb5\xbf\x5e\xb5\x8b\x0a\x25\xe7\x48\x99\x3c\x64\xdd\xe4\xa9\x9f\x15\xae\x9a\xf3\x97\x67\xe3\xb6\x7e\xfd\x73\x8e\xde\xc9\x95\x35\xe2\x30\x6f\x2a\x94\x20\x33\x9a\xe4\x85\xba\x24\x3a\x3a\x4b\x50\x1e\x4f\xd2\x9a\xec\x39\x1c\xad\x06\x84\xc9\xd3\xa1\x44\x7a\x1c\xaf\x28\xac\xa0\x73\x6c\x14\xbf\xe8\x4a\xa7\x07\x7d\x57\x39\xfb\xc3\x8d\xde\x77\x4b\xd3\xfa\xef\xca\x9b\xfa\x72\xf5\x3f\x56\xe4\xe9\x57\xf8\x8f\x4b\xc5\xbe\xec\xd4\x7f\xe8\xc1\x21\x49\x26\x79\xe4\x35\x5d\xe4\x21\x82\x9a\xc0\xd8\x9c\x2a\x63\xa4\x91\x34\xe4\x79\x51\xf4\x4d\x85\xd3\x35\x31\x0c\x48\x5b\x31\x49\x02\x07\xa6\x23\x09\x81\x2c\xc6\x19\xd0\xb4\xf6\xad\xbc\x76\x6d\xa5\x87\x53\x47\x7d\x3e\x17\xdd\xe0\x6a\x15\xdc\x3b\x66\xc4\xf8\x7a\xbd\x87\xcc\x6e\xd7\x8b\x1d\x7b\xe5\xf8\x4b\x35\xc5\x24\x33\x92\x45\xb4\x88\x25\x87\x35\x2d\x51\x63\x39\xd5\x88\x54\x5e\xf7\x42\x56\x72\x58\x10\x6b\x10\xe8\x96\x4f\xf2\x58\x77\x14\x93\xb7\x09\x35\x64\x75\x39\xf2\x12\xe7\x9a\x7e\xd5\xb6\x7d\x56\x76\xf9\xd0\x0b\xf1\x8d\xb4\x92\x6f\x2c\x29\x5a\xe4\xd0\xa6\xa9\xef\x5e\x24\xf3\x19\x45\xde\x8e\x8f\x4c\x1a\x28\xff\x98\x64\x9a\x56\x05\x22\x1e\xf2\xa2\x4c\x31\x88\x10\x5d\x84\x62\xdd\xf4\xe8\x28\xf2\x04\x2d\xd6\x74\x37\x50\x65\x09\x43\x56\x0a\x55\x6c\x9a\x3e\x69\xd8\x38\x12\x5f\xf4\xe9\xf9\x33\x5b\x5a\xa8\xd0\xdd\x54\x67\xe3\xae\xcb\x12\xf3\x96\xd7\xa6\x4f\xb5\xbd\xe3\x9b\xe7\x6c\x51\xeb\xe1\x51\x99\x98\xb4\x2b\xf3\xf4\xf9\x89\x29\x5a\x43\x02\x51\x08\xe9\xbc\xa9\x47\xd8\xb5\x42\x03\xb8\x2a\x67\xb1\x1c\x82\x11\xf2\x0c\x0b\xe8\x2e\xcb\x20\x0e\x47\x81\x8e\x48\x1d\xe8\x80\x70\x98\xc4\x55\x50\xd7\xce\x6b\x56\xf4\xfd\x93\x3c\x33\xe4\xf2\x47\x3b\x86\xdf\x7c\xbb\x3c\x5d\x77\xdd\xbd\x55\xc5\x0e\x0c\xac\x70\x6a\xfa\x8e\x61\x9f\xae\x60\x92\x5b\x52\x58\x12\x36\xa3\x00\x38\x3e\x27\x8b\xa6\x4a\x00\x9d\x41\x84\xab\x1a\x92\x18\x18\xa6\x60\xfb\x98\xe0\x6d\xde\x8b\x8c\xd0\x20\x39\x53\x76\x65\xc9\xfe\xdb\xd3\xef\xff\x9b\x3c\xfa\xf1\xe4\xe7\x5f\xe7\xbd\x53\xac\x74\x4a\xf9\x45\xa7\xda\x7d\x79\xe6\xd5\xa6\x75\x07\xa5\x4c\x1a\xfe\x74\xe7\xe2\x4e\xa3\x27\x2f\x9c\x72\x22\xb9\x26\x73\xa2\x45\x45\x46\xa4\xea\xb1\x63\x53\x0e\x34\x0c\xdd\x05\x92\x6f\xb8\x9a\xaf\xb1\xa1\xc2\x51\x24\xa0\x75\x48\x23\x81\x11\x2c\x2a\xe6\xa9\x48\x27\x85\xc4\x6f\xa8\xd6\x93\xea\x88\xf7\xd7\x4f\x2b\x53\x13\xbd\xd9\xa4\xe4\x8d\x37\xb3\xdc\xaa\x95\x7b\x6f\x51\xfe\x68\xeb\xfe\x6d\x3a\xfc\x66\xd7\xeb\x96\xdc\x95\xfe\x7f\xa4\x32\x36\x0e\x25\x41\x0b\x15\x59\x15\x2c\x2c\x9a\xc8\xf3\x79\xd5\x45\x12\xe3\x86\xb4\xc5\x98\xbe\x40\x53\x26\xab\x78\xac\x0d\xdd\x88\x35\x43\x37\x01\x3d\xe6\xe9\x57\x96\xee\x39\xbf\xa1\x83\xb5\xa3\x7e\x8e\x09\x03\xeb\x8f\xba\x0a\x2b\xce\xdd\x30\xb2\xf7\x86\xb5\xdf\xfc\xf4\xd7\x65\xc5\xea\x7d\x2c\xb9\x61\x88\x38\x2a\xd2\x11\x76\x23\x29\x50\x43\x3f\x22\x00\x70\x48\x99\xf0\x0c\x68\x43\xda\x92\x25\x83\xa2\x01\xc9\xd1\x9c\x6a\x38\xe6\x3f\x9e\x59\xae\x49\x24\x50\xba\xbe\x3f\xba\xe6\x06\x3a\xea\xb7\xea\xcb\xb9\xa5\xcb\x76\xae\x71\x41\x81\xf5\xcb\xfd\xb6\xb9\xed\xb9\x66\xbd\x7b\xce\x59\x93\x75\xce\x6f\xb9\x92\xeb\x1c\x02\x1b\x86\x1a\x90\x3c\x4a\x77\x5d\x10\xf1\xac\xe8\xd9\xd8\xc1\x88\xb6\x10\xc5\x32\x84\xc3\x3a\x96\xe8\x90\x56\xac\x88\x3a\x63\x92\xb2\xe3\xb3\xe8\xdf\x18\xec\x7f\xc1\x21\xff\x13\x60\x27\xb5\x49\xce\x2c\xe5\xfe\x0f\x53\x72\x9b\xb3\x67\x0f\x17\x28\x92\xbb\x42\x9b\x02\xd7\x73\x74\xe8\x5a\x0b\x2c\xe5\x6a\x55\x30\x7a\x38\x93\xbe\x3a\x73\x32\xed\xe5\xbe\x76\xe6\xb9\x43\x12\x33\xb4\x88\x28\x02\xc0\x8f\xa1\xcc\xd2\xae\x6b\xd8\xb4\xa6\xd1\x30\x32\x7c\x80\x19\x57\xf2\x35\x45\x23\x7d\x9d\x16\x05\x20\x03\x07\x8a\x9c\x4f\xa2\x28\x03\x0d\xb5\xd1\xa3\xe6\x97\x3a\x54\xa4\xec\x50\x72\x9f\xcc\xa4\xf6\xdd\x81\x7f\xec\xac\xdd\x9e\x58\x7f\x6e\xde\xd2\x4b\x0b\xf6\xba\xb8\xbb\x5c\x72\x91\xc1\x5c\xac\x86\xaa\x2d\x63\x9a\x07\x22\x0a\x75\xca\x8c\x5d\x81\x21\x85\x30\xb4\x1d\x1c\xaa\x9a\x2a\xf1\xd0\x25\x43\x3e\x0a\x1d\x2f\x0c\x08\x85\xd2\x11\x27\x24\x6e\x44\x0e\xe8\x5f\xb9\xe2\xbc\x6d\x6b\x0a\xd7\x99\xd2\x97\xca\xfb\xa6\xb7\x70\x56\xb7\x8a\x7b\x6e\x48\x6e\x8b\x1d\x43\x72\x05\xe6\xd1\xf1\xfd\x92\xdc\x88\x14\x4c\x31\x72\x81\x13\xa1\x48\x56\x62\x15\x04\xb1\x63\x85\x06\x1d\x92\xb2\x15\x72\x38\xe4\x19\x68\x02\x9a\xe6\x64\x41\x77\x1c\x09\x98\x54\x14\x67\xf0\x2e\xaf\x99\xed\xf7\xb4\x73\x17\xa7\xf6\x5c\x1c\xa4\xec\x7f\xb5\xd5\xef\x9b\x06\xe5\x2d\xbb\x78\x55\x81\xf9\x1b\xe3\x2e\xc1\xcb\x3f\xb5\x98\x90\x64\x8c\x0d\x04\xb1\x43\xf9\x2a\x2f\xd1\x62\xa0\x60\xd9\xf7\x4d\x45\x62\x63\x55\x8e\x65\xc9\x51\x59\x24\x51\xa4\x8f\x04\x44\xca\x86\xef\x30\x84\x46\x0a\xaa\xf6\x6f\x1d\x9a\x7f\x85\xc2\x7f\x42\xa3\xa5\x36\x69\x90\xbd\xe2\xff\x09\x05\xf6\xe6\xe7\xd9\xd6\x6f\x9c\xdd\xbb\x72\xeb\x39\xd3\xc1\xfc\x31\x7b\xb4\x05\x3f\xfc\xf9\xac\x70\xdf\x5c\xab\xc6\xab\x15\x7f\x29\xbf\x30\xc9\x69\x35\x30\x44\x4f\x07\x02\x21\xf2\xba\x10\x91\x9a\xcc\xd8\x04\x2f\x72\x22\xd0\x29\x21\x0c\x5d\x2b\x92\x1c\x5e\x54\x54\xc5\x15\x2c\xec\x44\x11\x2f\x82\x88\x4e\x5c\x98\xbd\xd3\xd7\xfc\xe9\x8b\x1c\x5f\x7e\x92\x77\xe8\x3b\x7b\x66\x3c\xa8\xdc\xed\xce\xa1\xb6\xb3\x2e\x97\x3a\x51\x7f\x7a\x87\x49\x79\x8b\x36\x91\x33\xaf\xac\x95\x18\xdf\x42\xf9\xb4\x13\x61\x8a\xc7\x21\x61\x20\xde\x33\x24\x5e\x53\x62\x06\x85\x36\x49\xa8\x14\x47\x0a\x76\xa0\x63\x28\xa9\x06\xc4\xb6\x89\x6c\x51\xe5\x9c\xc4\x3e\xb5\xec\x74\xee\x5d\x78\xe4\xe3\xbb\x6f\x2e\x1b\xfe\x7b\xeb\x83\xcb\x56\xc7\x85\x74\xf9\x54\xc1\x0b\xf1\x8a\xaa\xfa\x9a\xf9\xdd\x27\x7c\x9a\xdc\x2a\x27\xa0\x63\x51\xf6\x30\xa0\x7d\x86\x0d\x15\x41\xc0\xbc\x4a\x2a\x22\xe3\x59\xa6\x8c\x50\x1c\xc4\x02\x07\x68\x5d\xe2\x95\x50\x8e\x0d\xd5\x15\x28\x8d\xf7\x12\x9f\x76\xf5\x2d\x02\xf9\x41\xb3\x95\x2b\x17\x97\xdb\xf4\xc4\x78\xef\x97\x9e\xdf\x1c\x59\xf3\x56\xb3\x0b\x53\x2e\x44\x07\xca\x3d\x7a\x76\x7e\x6a\x92\x25\xd4\x1d\xca\xa0\x49\x19\xd3\x04\x41\x59\x04\x0b\x69\xd1\x35\x40\xa4\xfb\x31\xaf\xcb\x5a\xe0\x8b\xa4\xa5\x29\xbe\x11\x59\x3c\xa9\x7a\x2a\x72\x6d\x4e\xfd\x5b\x97\x60\x40\xce\xff\x0e\x00\x98\xda\x38\x7b\xb1\x2c\xe9\x25\x60\xd4\xc7\x1b\x3a\xcd\x77\xb7\x36\xa8\xf4\x61\x59\x7a\xf8\x2b\x9d\x6f\xee\x1d\x4a\x55\x1b\xfd\x83\xff\xde\x9c\x7e\x66\xfe\xf3\x75\xe2\x24\xbf\xaa\x58\xc1\xb5\xb1\x46\xf2\x26\x4f\xf8\x82\x4d\xdb\x91\xe5\x52\x82\xee\x5a\x86\xe9\x08\x98\xd1\x3c\x4d\x36\x44\x28\x5a\x84\xc9\xd2\xa4\x15\x45\x14\xf3\x37\xe2\xba\xf4\x7d\x85\x3c\xcf\xc6\x13\x47\xf2\xd7\x98\xda\x1d\x2f\x6e\x94\xfd\x7e\xb7\x37\xef\x8c\x7a\xa5\xfd\x27\xa3\x17\xcd\xa9\xf0\x7c\x4c\x93\x6f\x2f\xef\x4c\x32\x2d\x8c\x24\x10\x1c\x24\x49\x1e\x51\xbe\x12\x2a\x91\x4e\x00\xc9\xe6\x75\x4d\x34\xb1\xcd\xfa\x24\xa1\x98\x8c\x8f\xbd\x98\xb7\x62\xce\x0a\xa1\x0b\xa1\x90\x80\x33\xe8\x52\xf6\x66\xfd\x06\x96\x94\xb7\xfd\x3c\x2f\xbe\xbc\x63\xeb\x91\x7b\xa9\x45\xc6\x0d\x2e\x79\xb2\xdd\xdc\x52\x4d\xab\x9d\x78\xbe\x7c\xfb\xec\xe4\x9a\x0c\x38\x46\xb0\xd8\xc0\xe6\x58\x4e\xd1\x29\x1f\xb2\xaa\x2b\x71\x11\xd4\xe9\xd8\xb1\xad\x98\x0c\x29\x18\xb9\x62\xe0\x48\x04\x8d\x08\x45\x52\x54\x11\x5a\x89\xa3\x60\x61\x93\x79\x33\xe4\x13\xed\xd6\x3c\xeb\x54\xf5\xee\xb1\x7b\x47\x1f\xd7\x83\x67\xbe\x6e\x3c\x67\xd3\xac\x33\xb5\x96\x57\x7b\x9d\x3d\x9f\xf9\x9c\x93\x98\xed\x9c\x41\x94\x21\xf2\x3c\xe7\x7b\xba\x45\x8b\x14\x10\x02\x96\x74\x2c\xc9\xd2\x22\x45\xd5\xd8\xc0\x13\x79\x03\x41\x9e\x0b\x74\x42\x30\x58\xcc\xd2\xfa\xbf\xb1\x1a\x77\x72\xfd\x77\x8d\xc3\xd4\xc6\x2d\xb2\x36\x49\xcf\xeb\x30\x4b\x3a\xb8\xa3\x0d\x9d\xba\x66\xfe\x9d\x93\x4b\x4e\x36\xa8\x55\x6b\x4c\x96\xdf\x9e\x54\xfa\xa2\x2c\x75\x76\xc6\x90\x2f\x9d\xe7\xb3\x33\x4f\x2c\x98\x58\x9e\x47\x06\x11\x96\x02\x52\x73\x19\x42\x95\x29\x06\x88\x58\xf6\x15\x86\x92\x18\x1d\x86\x26\xa1\xb9\x36\x92\xac\xd8\x36\x0d\x3b\xf0\x1c\x35\xd0\x51\x46\xc3\xce\xba\x3d\x5f\x3b\x51\x7d\x5e\xab\xca\xab\xcd\x7e\x8b\xc9\x57\xfa\xb7\x35\x3f\xda\x30\x7d\x6e\xca\xb9\x2b\x29\xa5\xb6\x15\xbb\xde\x72\xfd\xf8\x24\x8f\x2b\x58\xcb\xf1\x30\x54\x23\xc0\xf2\x58\x8a\x7d\xd2\x36\x5d\x2e\x44\xbe\x27\xaa\x8a\x47\x32\x8a\xe9\x52\xa1\x49\x02\x60\x90\xa2\x42\x59\xac\xa4\xa5\x7f\x3e\xfe\xdb\xec\xa1\x3f\xc6\x97\x94\x27\xd6\xb2\xd5\x25\x37\x5f\x7a\x7c\xea\xe9\x0c\xfa\xf5\xdf\xb3\x3e\xa8\x52\x33\x5f\xb7\xfa\xcb\xba\x53\xcd\x5a\x15\x4e\xf2\xed\x0b\x21\x29\x7a\x9c\xa5\x04\xa2\x1c\x29\xb1\x2e\x6b\x02\x63\xc5\x92\xa3\x51\x9c\x8a\xc5\xd8\xb7\xb1\x25\x11\x84\xae\x13\xac\xa1\x18\x14\xf0\x6d\x32\x83\x9c\x33\x6a\xc2\xd4\xca\xcb\xf6\xd6\x78\x50\x2b\xf7\x9b\x0f\x37\x8e\x28\x3f\xe3\x87\xbb\xdd\xbe\x3d\x8a\x56\xbe\xbf\x7e\xde\xd8\x03\xd7\x6f\xd8\xc9\xa5\xa2\xe2\x3c\xa0\xbb\xaa\x2d\x19\x16\xe3\x70\x72\x4c\xa3\xd8\x91\x5c\xd1\xa5\x62\x89\x26\x09\x52\x62\x09\xc8\xd1\x26\xa0\xe8\x90\x8a\x14\x03\x1b\x5c\x68\x44\x09\x08\x92\xbe\xbd\x94\xf6\xe5\xed\x61\x8d\xd6\x76\xf8\xb4\xd3\xe1\x99\xfb\x97\xed\x3b\x32\x0c\xfc\x95\x2a\x54\x3f\x3d\x39\xff\xb5\xc6\xe1\xc8\x6f\x9a\x27\xf7\x0a\x33\x11\x56\x23\x4e\xb6\x89\xd0\xa2\x34\x49\x06\xba\x6b\xab\x94\x4f\xb8\x52\xa8\x8a\x82\x44\xaa\xd0\xe2\xb1\x28\x20\x8d\x06\xa4\x63\x1a\x14\x1b\xff\x8d\xb2\x27\x9d\x83\xe4\xd8\x35\xfe\xf6\xe7\x7e\x8d\xbe\x2b\x1e\x57\x7a\x6b\xd3\xf9\x69\x55\x47\xf5\x1e\xbc\xe2\xfd\x92\x1f\x06\xf8\xfb\x8d\x05\xf3\x0d\xdf\x93\xf9\xe1\x50\x62\x7a\x35\x53\xa2\x45\x55\x26\x70\xa0\x87\x82\xc5\x51\xba\x8f\x5d\xec\x09\xae\xa1\x6b\x86\xc2\x1b\xaa\xe4\x84\x22\x69\x61\x5b\x37\x6d\x8b\x33\x6c\x31\xf8\x1b\x36\xfd\xec\x2b\xff\xdd\xf8\x21\xb5\x49\x6a\x8e\x26\xf9\x07\xa5\xa7\x36\xd3\x07\xf4\x39\xf0\xd6\xdc\x42\x5f\x5c\x9e\x34\xab\x23\xff\x9c\x4a\xcb\x9d\xbb\x9c\x30\xa0\xd4\x84\x9c\x5a\x96\x66\x37\xc6\x83\x47\xc9\xfd\x97\xa2\xec\x20\x39\x30\x54\xdd\x77\x4c\xac\x06\xa1\x20\x71\xc8\x85\x9c\xac\x72\x8a\x4f\x4b\xa4\x8c\x19\x40\x71\x8e\xa7\xeb\x72\x6c\x3b\x16\xa7\x2b\x5a\x82\x7e\x55\x9f\xbe\x87\x66\x3e\xfd\xe1\x54\x81\x4a\x27\x3a\x14\x5e\xba\xad\x44\x9e\x29\x5f\xcc\xd8\x6e\x2e\x3e\xf2\xc7\xf4\x6b\xef\x1e\xba\x27\xe0\xea\xc9\x0d\x01\xcb\x67\x2d\xcc\x22\x52\x96\x44\x4c\x6b\x51\x0c\x29\xc6\xd2\x44\x8a\xf6\x74\x86\x12\x2d\x9e\x0d\x62\x09\x4a\x50\x60\x05\xce\xb3\xa5\x38\xe2\x34\xde\x49\x9c\x70\x36\xba\x6f\xef\x58\x78\x85\x29\xd7\xdd\xee\x55\xbd\x5f\xeb\xa3\xab\x0e\x74\xd8\x92\x7b\x4c\xbd\x87\x29\xe5\xee\x1e\x2e\xb7\xe8\x40\xb6\xcc\xeb\x4e\x25\x34\xdb\x60\x99\xc8\x0b\xad\xd0\xc0\x18\x51\x86\x42\x18\x1a\xf0\x35\x0b\x46\x1e\xc0\x32\x8d\x90\x27\x3a\x30\x82\x82\xa0\xdb\x11\x0b\x62\xc7\x74\x91\xaa\x25\x36\xbb\x6e\xd3\x73\x1f\xdf\xde\x15\x66\xdb\xb9\x76\x4e\x9d\x6b\x6b\xda\x7f\x75\x64\xc1\x50\xf6\xed\x33\x5d\x5b\x7e\xd2\xb3\xf0\x4f\xfb\x7e\xbb\x07\x93\x6b\xb6\x4b\x78\x0e\xa6\x20\x20\x38\x0f\x8b\x84\xe5\xf8\x8e\x40\x93\x31\xcb\x10\x91\x2c\xb0\x8e\xc0\x0b\x9e\x45\x23\xac\xb2\x2a\xe6\x14\x81\x0f\x44\x42\xcd\xa0\x6e\x7e\x7f\xcd\x07\xc4\x98\xf7\xf8\x72\xcd\x87\x66\x69\xd7\x6e\xe5\xa3\xda\xf7\x4e\xd6\xb9\x31\xff\xf9\x37\x65\xfe\xf8\xac\xed\xdd\xfc\xa0\x4e\xe6\x5b\x6d\x89\xfb\xb0\x54\x40\x11\x64\xc8\x79\x00\xaa\x16\xa7\x92\x80\x61\x3d\x57\xf2\x58\x24\x48\x92\x1d\x48\xaa\x17\x30\x94\xc6\x1a\x8e\xaf\xdb\x8a\x2b\x90\xc8\x71\x33\x50\x64\xfa\x68\xfe\xf9\xd6\xc4\xf4\xb3\x85\x6f\xbe\xf7\x43\xe7\x5e\x41\x96\x63\x03\x2e\x8e\x5a\x7b\xa2\xe9\x94\x35\xed\xfe\xfc\x43\xfb\xab\x55\x35\x36\xb9\xb9\x52\xa7\x91\x68\xc9\x96\x2d\xb8\x88\x25\x90\xe0\x49\x24\x69\x68\x06\x56\x74\x27\x0e\x21\xe4\x4d\xc7\xd2\x24\x4c\xeb\x11\x0f\x4d\x37\x66\x39\x35\x76\xa8\xc4\xb9\xb2\xc8\x50\x6f\xe2\xc1\x5f\x76\x2e\x9c\xbc\xa1\x59\xbd\x4d\x4b\x8b\x37\x62\x5f\xf6\x0b\xa4\x1d\x6c\x70\xfb\xad\xfb\x17\x9e\x55\x18\xad\xb5\x49\xee\x65\xea\x29\x30\x10\x38\x3b\x92\x58\x52\x30\x6c\x59\xa4\x80\x6e\xa8\x2c\xf0\x63\x2b\xa0\x28\x44\x92\x5a\x1c\x01\xd6\x35\xb1\x4c\x45\x46\x44\x32\xb6\x1e\xa1\xc4\x4e\xb2\xae\xe5\xe3\xa7\x43\xab\xe0\x03\x87\x5e\x51\x3e\xa9\xb8\xe6\x11\xb9\xa2\xcb\xea\x2a\x70\xde\x1b\x87\x2f\x4d\x2b\xdb\xf1\xf5\xb4\x13\x99\xa7\x58\x49\x78\xda\x8a\x17\xc8\x3e\xa7\x93\x52\xec\x05\xb6\xcc\x06\xb2\xce\x05\x94\x4e\xb0\x51\xe8\x80\xd0\x88\x6d\x51\xd0\x43\x42\xe5\x2c\x4e\x35\x78\x4a\xa1\x03\x8e\xf8\xf7\x69\xff\x8b\x2f\xec\x3f\xcd\xd7\x52\x9b\xe4\x7f\x29\xd7\xa8\xf4\x75\x65\xab\x6f\x27\x94\x5b\x7b\xac\x45\x27\xad\x66\x83\xd9\x87\xf7\x7f\x34\xb9\xd9\xe1\x6e\x0d\xe9\xe1\x8d\x46\x19\x4f\xd6\x4d\xee\xf5\xd2\xc6\xcc\xfb\x54\xe2\x08\xc6\x96\x6a\x5a\x26\xa3\xab\x06\x65\x05\x96\x0c\x30\x60\xa1\xa4\xc2\x38\xe0\x98\xd0\xf6\x2c\x57\x87\xb2\xe4\x11\x3e\xad\x91\x91\x00\x49\x87\x25\xc4\xc4\x1f\xa7\xf1\x5b\x7d\xa6\xc3\x6b\x4c\xd3\xcb\x63\xa7\x75\x85\xef\x1e\x28\xb8\x79\x6e\x30\xe0\xcb\xa3\x03\x5b\xa1\xa2\xe5\x36\x0c\x7a\x69\x73\xe6\x95\xe3\x12\x7e\x9c\x00\x12\x80\xc3\xac\xc4\x4a\x12\x0c\x29\x53\x37\x05\x37\xa2\x38\xac\xf9\x56\xcc\xf8\xb4\xaf\xf1\x86\x2c\xb3\x90\x11\x79\x1f\x2a\xc0\x23\x7c\x1e\x18\x89\x43\xe1\x4c\xf6\xbe\xe7\xb7\xa4\xfd\xd9\x65\xfc\xd6\xb1\x23\x56\xde\xab\x74\x73\x63\x3c\x61\xe8\xe0\xf5\xf3\x89\xaf\xfb\x0e\x39\xd5\xa2\xe8\x95\xcc\x0b\xa5\x24\xbe\x50\x59\x91\x62\x08\x0a\xb0\xb4\x67\x78\xa6\x2f\x8b\xba\x2c\x9a\x26\x09\x41\x00\x1c\x15\x9a\xba\xeb\x2a\x4a\x08\x31\x67\x61\xc8\x38\x5a\x6c\x44\x8e\x9c\x38\xf1\x2c\x1c\xdc\xe1\xfd\xd7\x5c\x11\x94\x1f\x91\xfd\xf3\x62\x85\xdd\x1b\x05\x3f\x2a\xf1\xb4\xfa\xae\xdf\xe9\x4b\xab\xe6\x08\x1f\x7d\x37\x2f\xc9\xec\x6c\x94\x0f\x75\xca\xa2\xb1\x1f\xc7\x14\xcd\x23\xca\xa1\x45\x87\x45\x42\x64\x08\x91\xee\x8b\x7c\x08\x6d\xc1\x27\x05\x9f\xe0\x15\x99\x62\x29\x24\xa9\x9c\x97\xd8\xec\x03\x1b\x2e\x70\x9f\x57\x3d\xd5\xe1\xc1\x3b\x53\xfb\x9d\x22\x4a\xbd\x55\xfe\xd0\x8f\xd3\xee\xe4\x39\xb6\xfc\xdb\x55\xdb\x9b\x5d\x9e\x79\x28\xc9\xf8\x3f\xe8\x40\x53\xb7\x5c\x11\x48\xae\x86\x03\xdf\x16\x63\x56\xf5\x01\xe2\x69\xca\x44\xa2\xa3\x86\x86\x8f\x75\xc6\x33\x55\x8f\x32\x1d\x37\x16\x45\xef\x6f\x43\xa0\x9f\x1a\xfd\xd3\xe2\x81\xc3\x3f\x5a\x26\xee\x6a\xfc\xfe\xa5\x83\xdd\x83\x1d\x9b\xe9\x55\x0f\x1e\x5a\x9b\xe7\x0d\xf8\x78\xd4\xc6\x5b\x73\x8f\xfe\x70\xe8\xfa\xb4\xd4\x26\xcf\xff\x7a\x7e\x3a\xad\x64\xfa\xb9\x7a\x9e\x72\xb8\xee\xcd\xef\xea\x5c\x5a\x24\xbf\x3d\xe4\x68\xa5\xdc\x55\x52\x52\xd4\x9a\xd5\xab\x2c\x9e\x92\xe5\xf2\x4f\xf9\xfa\x5d\xd9\x30\x24\xdd\xa1\x94\x38\xfb\x20\x55\x2c\x72\xd9\x38\xba\x77\xd2\x97\x5f\xac\x58\xe5\x4e\xfa\xf6\xab\xdc\x1f\x9e\x59\x10\x15\x19\xfd\x24\x97\xdf\xe4\xaf\xcc\xaf\x73\x25\xe6\x18\x51\x4c\x95\x61\x2c\x46\x09\xcc\x20\x0c\x31\xaf\xb0\xba\xa0\x06\x14\xe5\x7a\xb2\x8f\x24\x89\xd0\x68\x81\xf6\x25\x25\xc6\x2e\x84\xb2\x1d\xe8\x6e\x7a\x46\xd2\xbf\x01\x62\xe6\x35\xb8\xd8\xe2\xed\xfb\x05\xe7\x17\xea\x3d\xe9\x61\xcd\xfd\xd7\x97\x2d\xab\xff\xeb\xb0\xb1\xb7\x5a\xdc\x4c\x29\xbb\xb7\x48\x8b\xc6\x2b\x93\xfb\x2d\x23\xc6\x60\x34\x3d\x52\x09\x0a\x0a\xae\xe5\x09\xb2\x85\x2c\x16\x87\xaa\x40\x46\x00\x0b\x9a\x10\x28\x24\x4f\xeb\x9c\xec\x18\x91\x28\x9b\xb4\x6e\x3a\x09\xc8\xdb\xed\x25\xdb\x98\xad\x9d\x37\xce\xbe\x56\x2b\xe5\xdd\x69\xed\x0b\xe6\xfd\xf3\xc9\xb6\xd1\x27\xa6\xe6\xfb\xa3\xd9\xfa\x0b\xbf\x0c\x99\x3b\x28\xf3\xd5\x73\x62\x72\x40\x1f\x32\x8c\xab\xc5\x50\xe7\x48\xd5\xe4\x7d\x91\xb0\x95\x10\x12\x62\x88\xf5\x80\x43\xb2\x27\x32\x44\xe4\x1b\x30\xd0\x35\x4d\xa6\xd5\xd0\x57\x78\x90\x01\x4c\xe3\xd1\x06\x92\x29\x20\xf6\x6d\x76\x6d\xf7\x48\xbe\x5a\xe1\x9f\xc7\xb4\xa3\x52\x57\x4e\x3e\xdd\x6a\x5c\xca\xac\x82\xa5\xfd\xdf\xb3\x76\x4c\xf7\x5d\x5e\xd7\x07\xcc\xb1\x77\x16\xed\x56\x6e\x6f\x97\x7a\x9c\xee\x9f\x79\x67\xb7\x79\xf9\x5c\x9b\xa5\xc6\x0e\xea\xb3\x39\x67\x5a\x64\x4f\xae\x40\x08\xc7\x0a\x8e\x40\x3a\x32\x11\x6b\x50\xb4\x08\x0e\x7b\xb4\xac\x12\x94\xcc\x0a\x51\x60\x84\xb2\xa9\xb2\x9e\x8d\x29\x04\x2c\x4f\xb7\x42\x25\x60\x15\x13\xb8\x2f\x7e\x17\xb2\xc6\xce\x6c\x43\xd6\xf1\xa3\xc8\x2e\xd7\x6f\xde\xdb\x30\x7c\xd3\xc8\x73\xf9\xdf\xcf\x91\x7b\xad\xb5\x6f\x55\xdb\xae\xd4\xba\xdb\x99\xd7\x94\x4e\xdc\xe6\x92\x69\x68\x19\x96\x07\x42\xca\x25\x14\x5b\x76\xdd\x18\xd3\x08\x90\x82\xea\x53\xa4\xcf\x45\x4c\x08\x10\x45\xcb\x96\x19\xb0\x06\x1d\xc9\x76\x18\xb3\x19\x7c\x97\xa2\x23\x2b\x1d\xad\x7a\xa5\xc2\xe1\xfb\xf7\x96\x8c\x58\xb6\x26\xfe\x69\xdd\x98\x27\xad\x9e\x96\x7f\x69\x7a\x8e\x99\xa3\xd6\xb5\x48\xeb\xfc\x52\xba\xb1\xec\xb4\x57\x6b\x4b\xa5\x59\x7f\xc3\xb9\xa6\x0f\x06\x86\x2d\x94\x6a\xdb\xae\xcf\xf8\xd0\x33\x1f\xd9\xfb\x96\x4f\xde\x0c\xdc\xb0\x4a\x72\x4b\x5c\x8f\x74\x35\x82\x86\x12\xd0\x34\x0f\xb1\x98\xb0\x25\x11\x91\x50\x26\x28\x43\x65\x29\x53\x16\xb1\x49\x06\x24\x6d\xe8\x81\x2b\x48\x1e\xa6\x5c\xd1\x49\xf0\x74\xdb\x51\xf4\x6e\x3e\x77\x22\x79\x6a\x58\xef\x67\x87\x87\x95\xba\x61\xcd\x4f\x05\x90\x09\x27\x56\x1d\x67\xb7\x9f\xd1\xa5\xc4\xdc\x24\x77\x4c\x39\xec\xc6\x21\x8c\x00\x2b\x89\x96\x1c\xf9\xae\x2f\x88\x80\xd6\x04\x26\xd2\x43\xdf\xb4\xb0\xcb\x19\x11\xcf\x84\x1c\xe4\x0c\x1f\x29\x86\xc2\x86\x8e\xfb\x62\xf7\xe2\xce\x95\xd5\xa3\x89\x11\xf5\xb6\x8f\x7a\x7e\xbe\x5f\xc9\x22\xd7\x72\x1f\xdd\x7a\x70\xfe\x23\xaf\xe4\xf6\xef\xdb\x6d\x3a\x98\x7d\xdd\x84\xcc\x73\x56\x24\x5e\x51\x37\xa0\x2b\x68\x58\x89\x79\x28\x39\x82\x02\x39\x0b\xd9\x4e\x24\x41\x06\x59\x96\x40\x87\xc8\x24\x19\x8f\xb2\xe8\xd8\xa7\x0d\x93\x82\x31\xa5\x41\x98\x18\x87\xa2\xcc\x5d\xb1\xf3\x38\xcc\xd2\x9b\xcd\x3a\x2e\x0f\x5d\xba\xd7\x07\x0d\xa3\xf2\xeb\x2b\x0e\x36\x9e\x2c\xfd\xa6\xe4\x80\x6b\x2d\x62\x33\xd9\x1b\x9b\x9c\xcd\x23\x91\xc4\x36\x50\x65\x9f\x89\x79\x8a\xb5\x5c\x57\x31\x75\x5f\xf6\x2c\xc8\x8b\x3a\x07\x19\xd3\xe7\x0d\x0c\x78\x1e\x08\xba\xa5\x80\x04\x40\xa5\xc9\xc7\xd8\xbd\x20\xed\xec\x92\x57\x3a\x4e\x5c\xb8\xfd\xc1\xac\xf3\xaf\x2f\x1f\x4c\x5c\xb6\x07\x6b\x83\xa3\x70\x52\xd5\xb7\x57\xe5\x4b\xee\x49\x7b\x50\x73\x2d\x4b\x17\x68\x99\x21\x23\x8b\xd4\x1d\x83\xd7\xc9\xc8\x24\x3c\x85\x8f\x42\x31\x08\x6d\xc5\xf2\x48\x8e\x8c\x6d\xd2\x66\x08\xc0\x13\xa4\x2e\x26\xde\xf7\x2e\xf5\x7d\xf3\x6b\x3b\x98\xc3\x63\xd9\x43\x9f\xec\xed\x91\xef\xe2\x96\x7e\x4d\xae\xb7\x7d\x35\x5f\xd1\x31\x1d\x66\x6e\x92\x38\xae\x5a\xab\x24\x37\x12\x65\x8f\x03\x21\x22\x1c\x43\x31\x9d\x50\x8f\x25\x11\xf8\x2e\x6d\x6b\x3e\xe9\x84\x12\x36\x69\x00\x44\xcd\x73\x6c\x64\xd0\x38\xa4\x09\xd9\xb5\x23\xf5\xc5\x93\xe6\x5a\x72\xf7\xf7\xf6\x78\xfc\xa4\xcd\xd7\xe7\x55\x3f\xdb\x88\xe3\x17\x0a\x2d\x6b\xbe\x04\x1e\xad\x4b\x0f\x00\x29\xb3\x5e\xab\x9a\x79\x9d\xb6\x84\xce\xa1\x71\xd0\x37\x44\x24\xb3\x08\xc3\x58\x82\x8e\x2f\x86\x9c\xa8\xf1\x92\xa3\x0b\x1a\x76\x65\xc6\x11\x2c\x51\x94\x04\x19\xe9\xb1\xe0\x9a\x01\xed\xc1\x04\x4d\xc4\x3f\x3f\x7d\x67\xda\x1d\xbc\xa6\x17\x3b\x99\xca\xf7\xf9\xd8\x7a\x60\x56\xf9\x41\xbd\x4f\x1e\x3c\x7e\xfa\xe7\x1d\x97\x86\xf5\xfb\x59\x4d\xae\xde\x29\xef\x51\xaa\x2e\x0b\x1a\x14\x4c\xd5\xb1\x02\x39\x8a\xa4\x38\xb4\x11\x13\xf1\xae\xc9\x63\xcd\x83\x40\x45\x9a\xcb\x1b\x6e\x40\xc8\xb1\x67\x0b\x01\x87\x33\x02\x44\x8e\xce\x8b\xaf\x0d\x17\x8a\xa7\xe4\xbb\xf5\x93\x97\xed\xf7\xf3\x6f\x74\xa9\x99\x7b\x70\xeb\x89\x8f\xb2\xce\x3c\xfb\xf1\x80\xf8\xf2\xcd\xf7\xd2\x15\x6e\x74\xfd\xa6\x43\x27\xa4\x1e\xdf\xfd\xed\xee\xce\x3d\xc6\x4f\xbc\x5a\x7a\x0d\xdc\xfc\x70\x9c\x5e\xe6\xde\xec\x8a\x69\x65\xf4\xdc\x33\x36\x24\x19\x65\xa0\x89\x02\x83\x3d\x4c\x9a\x21\x05\x7c\xc2\x36\x35\x8f\xf6\x24\xcf\x8d\x03\x0b\x30\x64\xc8\x48\xb4\x17\x10\x2e\x40\x82\xa7\x70\x3a\x6f\x03\x5b\xc8\x40\xd2\xb2\xdb\x86\xdd\xd3\x1a\x75\x3b\x30\xb0\xf8\xfd\x43\x23\xea\xf6\x3c\xb3\xbd\xc2\xb1\xd5\x5f\x66\x59\x7b\xae\x60\x95\x9a\xa3\x37\xee\xe9\x3a\x28\x7f\x92\xd9\x8b\x44\xd5\x34\x20\x21\x39\x34\x2f\xd1\x92\x6e\xa8\x6a\x84\x6d\xce\x34\x90\x49\xb2\xa6\xc0\x2a\xa1\x03\x2c\x28\x44\x98\x50\x98\x90\x71\x74\x27\x56\x51\xe2\x25\x1c\x6f\x7e\x93\xc2\x8b\xee\xfe\x51\xb8\x7f\x8b\xd3\x64\xb6\xb7\x8b\xad\xab\x5d\xa8\xd9\x4a\xf3\xb3\x37\xab\xf5\x5b\x74\x7c\x43\xee\xa9\xd7\x32\xcf\xcb\x9e\xf8\xf5\xef\x42\x39\xd0\x95\x88\x97\x02\x10\x99\x9e\x67\xf3\xa4\xa3\x1b\x9e\x62\x49\xb6\xff\x8f\x7a\x87\x50\x35\x19\xe9\x82\x8c\xb0\x12\x2a\x7c\xc8\x63\x98\xa0\xae\x59\x3b\x28\xeb\xd2\x56\x0b\x0e\x7e\x71\x74\x75\xe5\x77\xb6\xe6\x6d\x5b\x21\xcf\x90\x0e\x59\x5f\x6d\x5a\xc2\xc8\xb9\xe6\x69\xa3\x6c\x9b\x1e\x64\xfe\x29\x9f\x01\xd3\x1b\xe2\x38\x99\x8d\x90\xc6\xb0\x06\x40\xa4\x60\x99\x74\x20\xfb\x91\x4c\x22\x5a\x55\x04\xdb\x85\x2a\x70\x45\x0b\x40\x0b\xdb\xb2\x6d\xab\x88\xcc\x80\x95\x6b\xc9\x31\xb5\x84\x7d\xf0\xf8\xeb\x10\xb9\x47\x0b\x77\x36\x87\x3e\x77\xf5\x61\x97\x1a\xcc\x7c\xf7\xd1\x4f\x77\x3e\xef\x55\xac\xe8\xb8\xe4\x56\xf6\xa6\x1a\x31\xb1\xe5\x7a\xaa\xe4\x44\xaa\xeb\x32\xa6\x0e\x94\x00\x39\x8c\xa2\x69\xac\x16\x48\xc0\xf1\x3d\xcd\xb6\x58\x3d\xb6\xe4\x00\x12\x24\xcd\x39\x51\xe2\xa7\x7c\x96\x3e\x2f\xef\x3b\x9a\x9f\x9c\x74\x32\xa5\xcb\x91\x71\x2d\xf7\x44\x53\xab\x9c\x7d\xe7\xce\xcf\xdd\x7b\x37\xbf\xbf\x49\x5e\x4b\x3e\xc8\xfc\x8e\x67\x42\x07\xa1\x3c\x83\x61\xb1\x13\x79\x7c\x48\x45\x08\x39\x91\xe8\xb1\xc8\x57\x02\x32\x46\x1e\x2f\x02\x83\x87\xae\xcf\x41\x02\x98\xa6\x48\x62\xc4\x3a\x11\xe2\x12\xc3\xf5\x72\x34\xdb\x39\xa6\x78\x0e\x90\x7d\xc0\xd1\x67\xe3\x72\xd6\xde\x7b\xe6\xa7\xa5\x07\xcf\xcc\xfc\xfe\xc7\x7b\x79\xe5\xa9\x3d\x3a\x4c\x21\xea\x25\x37\xbb\x0b\x3e\x2d\xb0\x94\x23\x53\xaa\x1d\xaa\xa2\xa1\xd8\x02\x44\xb1\x87\x08\x97\x94\x22\x53\x30\x2c\x87\x76\x08\x42\x07\x2a\xc9\xb0\x2e\x0e\x74\x45\x04\x09\x36\xc4\xdd\xca\xe3\x2e\xde\xb9\x96\xfa\xfa\xa2\x94\x95\x1f\xa5\x34\x7f\x7f\x8b\x5d\x75\xc9\xa2\x7d\x03\x9e\x0c\x2e\xb7\xec\xce\xd2\xfd\xe7\x4a\x65\x7e\x43\x3c\x31\x96\x13\x1a\x32\x45\xfa\x92\x24\x06\x34\x83\x39\x81\xa1\x80\x85\x3c\x46\x96\x7c\x5a\x0d\x42\x47\xf2\x64\xdd\x60\x08\x4f\x24\x62\xc3\xb0\xc5\x28\x84\x89\x9e\x7e\x43\x2e\x79\x1d\xe5\x1d\x6e\xd6\x62\xf7\x6f\x1d\x55\x0a\x8f\x6e\xd3\x73\xd5\xa8\xf6\x85\xa5\x77\xcb\x37\xbb\x30\x6f\xcc\x9b\x3f\x0d\x1a\x9c\xe4\xba\xd0\x15\x09\x33\xa2\x54\x21\x08\x2d\xcd\x8b\x34\xc8\x59\x00\x11\xb4\x6f\x4a\x58\xa7\x1d\xc8\x00\x95\x8b\xb5\x58\x47\x28\x42\x86\x0e\x1d\xf1\x7f\x95\x65\x13\xf0\x33\xe1\x93\x75\xdf\xe9\x79\x7c\x5e\xdb\x95\xaf\xe4\xce\xf3\xdd\xb1\x1e\xcd\x5b\xd7\x6f\xbb\x40\x3a\x2c\xf5\xfc\xb3\xe0\xc8\xfe\x64\xbf\x31\x74\xba\x14\x99\xeb\xb3\x0f\xa6\x2f\x7d\x65\xc2\xab\xee\xc9\xb2\x17\x36\x95\x4c\xa9\x70\x88\xce\x73\x86\xdc\x7a\xf5\xad\xb4\x8e\xf0\xcc\xed\x4b\x35\x93\x0c\x58\x95\x19\xd1\x8c\x5d\x68\xc7\x02\xcb\x06\xd0\x8f\xcd\x90\x56\x8d\x90\x0e\x05\x9d\x77\xa9\x00\xb3\xaa\xc9\x46\x10\xf9\x9e\x43\x80\x50\x75\x00\x88\x62\xf9\xc5\xef\xe2\xdc\x9d\xf1\xd2\x45\xf5\x24\xb7\x70\xdf\x6b\x95\x86\x69\xb7\xba\xfd\x34\xa9\x53\xf3\x9c\xf9\xaf\xd0\xbd\xa6\xe9\xd3\x2f\xce\x38\x9f\x79\x9d\xbb\x84\x85\x82\x68\xc9\x96\x66\x53\x84\x2b\x85\x9a\x47\x9b\x0c\x69\xe0\x98\x57\x65\xd9\xa2\x08\x9a\xe0\xc2\x58\x71\xf5\x58\xa2\x44\x08\x58\xa4\x33\x24\x8f\x3c\x2e\x03\xea\xd1\x51\x45\x97\xd5\xae\x59\xaa\x6c\x7c\xb4\x42\xa5\xce\x6a\xa1\x0a\x87\x56\x0f\xab\x22\x1d\x58\xb5\xf3\xc7\x69\x9b\x3b\x37\x99\xb5\x3d\xe5\xfb\x24\x43\xde\x7c\x17\xb2\x3c\xf2\x14\xd1\xa1\x10\x0f\x78\xd5\x47\xa2\x1f\x52\xb1\xcd\xaa\xa4\xcd\x88\xb4\x41\x93\x22\x61\xa0\xd0\xb6\x65\x43\x66\x23\x9e\xd6\x33\x78\x66\x34\x7c\xd0\xe0\x8b\xb3\x6d\x57\x9c\x1e\x93\xa7\xdd\xac\x0d\x8f\xb6\xec\xbd\xf9\x57\x2d\xbd\x6a\xae\xf0\xe0\xd8\x02\xe5\x36\xbf\xf9\xe3\xaa\x2b\xc9\x75\x10\x1d\x59\x3a\xe9\x70\x14\xed\xba\xc8\xd4\x22\x3e\x56\xcc\x20\x02\xac\x0b\x7c\x25\x74\x5d\xcb\xd6\x39\x59\x01\x8c\xc8\xdb\x61\x18\x44\x84\xef\x32\x28\x01\x08\x7b\x46\x9f\x9c\x53\x6f\x34\x98\x98\xbf\xeb\x47\x33\x46\x6c\x3b\x35\x99\xe3\xbf\x6b\x7c\x69\xf2\xf4\x3e\xb3\x8b\x74\x7e\xe9\xc4\x07\x3b\xfc\xca\xc9\x26\x79\x35\xd9\x58\x21\xa1\x85\x03\xc6\xc7\x22\xa1\xb3\x1a\xed\xca\x8e\x29\x71\x2c\xc7\x73\x02\x14\x08\x85\x88\x49\x3b\x60\xf9\xc0\xc5\x2e\xf4\xd5\x28\x4e\xfc\xcc\x90\xdf\x3c\xd8\xd4\x7f\xbb\x79\xbe\xde\xbf\x72\xbb\x8c\x56\x5f\x17\xbf\x71\xcc\xbb\x41\x1e\xaf\x98\xe5\xf5\xe5\xe7\x7f\x1b\x3c\xa7\xc4\xbe\x24\xa3\x43\x10\xe7\x08\x91\xa3\x4a\x8e\xa7\xc9\xa6\xcd\x70\x3c\x6d\x33\x6e\xe0\x90\x84\xa4\x92\x5c\x2c\x2a\xac\xab\xd0\x18\x7b\xa2\xc8\xc0\xd8\x62\x39\x87\x48\x20\x05\x37\x65\xef\xbe\x2a\xfa\xb3\xc1\x05\x4f\x76\x78\x69\xd7\x98\x85\xbb\xef\x3f\xfa\x74\x43\xde\xe3\x8f\x6b\x8d\xec\x0f\xf6\x6f\x9f\xfd\xeb\x17\xc9\x65\x95\xe6\x35\xc9\x62\x1c\x8e\x35\x08\x2e\x70\xb0\x6f\x71\x81\x4e\x04\xa4\x6a\x7a\x6c\x60\x19\x12\xe5\x08\x41\x40\xd1\x11\x2d\x3a\x26\x13\x86\x12\xcf\x47\x02\x81\x5f\x74\x8e\xc3\x33\xfd\xd7\xe7\xa0\x21\xdf\xb4\xd9\xd5\xe5\xba\x7c\xb3\xb5\x5f\xa6\x56\xdf\xaa\x1d\x52\xf6\x94\xe9\xff\x6e\x5a\x85\x4d\x0d\xe7\x67\x3e\x0c\x13\xcb\x66\x31\x16\x41\x51\x90\x52\x70\x4c\x42\xc6\x23\x80\xa3\xc9\x40\xb2\x00\x30\x82\x48\x71\x28\xdd\x97\x81\x64\x82\x58\x52\x69\x85\x8b\x23\x18\x04\x0e\x97\xb8\x94\xad\x57\x75\xa6\xb6\x4a\x1f\x7d\x44\xef\xf2\xfe\xcc\x0f\x23\xc7\x7a\xd4\xa5\xc1\xfb\xb5\x9e\x56\xdf\xf5\xc7\x8f\x6f\x8f\x6c\xb4\x85\xcd\xbc\x5e\x78\x42\xb3\x99\xc0\x88\x18\xe4\xdb\x80\x12\x04\x19\x05\x4e\xc4\x61\xc6\x8c\xed\x08\xa8\x8a\x24\x99\x22\x96\x65\x08\x3c\x29\xe2\x48\xd6\xd4\x34\x82\xa1\xb0\x96\x80\x08\xfb\xce\xb8\xea\xf9\x0b\x5d\xb2\xdf\x6f\xf8\xdd\xe8\x57\xba\x32\x3d\x52\xb6\x36\x7d\x7c\x7b\xe7\xec\xb4\x1d\xbb\x0e\xbc\xb4\xa2\xa7\xd8\xfc\xb7\x24\xb3\xbb\x21\xd5\x03\x81\x17\x9b\x26\x1b\x71\x81\x0e\xd8\xd0\x10\x2c\xc5\x34\x74\x2b\x14\x10\x2f\xb0\x8e\xe7\x01\x23\x70\xa0\x4a\x3b\x16\x0e\x74\xd1\xd5\xb8\x0c\xee\xcf\x0d\x69\x5b\x1f\xaf\xd7\x7b\x4c\x5f\x52\xbf\xf8\xb4\x97\x66\x16\xdd\x79\x70\x85\xd7\xbd\xd0\x0f\x3f\xbf\xcc\xf5\x24\xd0\x2b\x45\x77\xc4\xe9\x7f\x5d\xbd\x51\xef\x2b\xe3\x17\xcc\xbb\xbe\xbf\xc2\x96\xaa\x39\xd1\xc0\x3e\x29\x54\xef\x3a\xa5\x9c\x31\x5b\x5a\xed\xbf\xdf\x7e\x55\x0a\xd1\x2d\x7d\x27\x21\x5c\xdf\xc4\x79\xd2\xb7\x7d\xdb\x32\xeb\xbf\x2d\xd8\x6d\xf9\x4b\xf9\x14\x75\x40\x07\xd8\xfc\xe3\x66\xd3\xd7\xa0\x93\xe3\x2f\xef\x4d\x6e\xe1\x46\xf8\x8a\xa8\xf2\x2c\x62\x35\x39\xf0\x14\x2f\xa2\x35\x25\xe0\x19\x97\x0b\x02\x33\xd2\x15\x23\x64\x35\x93\x30\x05\x07\xc8\xa4\x29\x46\x1e\x54\x00\x9f\xa0\x3b\xd6\xf1\x7c\xb1\x31\x5b\x16\x7d\xff\xa4\x8d\x5b\xe6\xc6\xf2\x53\xe0\xd5\x2d\xbf\x54\x88\x7b\x7f\xf6\x56\xab\xb1\x93\x9e\x94\xda\x56\x22\xd9\xd8\x1e\x9a\x24\x6d\x10\x8b\xb4\xac\x42\x22\x0c\x0c\x41\x22\x2c\x57\x88\x29\x0d\x52\x3c\x47\x4a\x0c\x67\xaa\x02\x26\x28\x2f\xd6\xb0\x6f\xc4\x9e\x1f\x93\x30\x7e\xd1\xf1\x8e\x1c\x69\xbd\xfd\xcf\x21\x2d\xda\x0d\x5a\x27\x57\x68\x7e\x62\x64\x9f\x6e\x1f\x75\xb8\x51\x70\xde\xb8\xec\xaf\xaf\xa8\x24\x14\xfa\xd8\x6b\x9a\xdc\x58\x71\x90\x85\x09\xd6\xa3\x65\x09\x53\x91\xa7\x13\x0c\x4f\x78\x9e\x42\x0a\xa4\xee\xab\xa1\x42\xd2\x82\xe6\x38\x1a\xe7\xb1\x3e\x04\x18\x48\x86\xac\xa0\x20\x71\x55\xdf\x68\x02\xf3\x55\xe5\xe2\x51\xcb\x8f\x2b\x9f\x5f\xdf\xb6\xf1\x90\x5d\xd7\xa5\x3f\x87\xdf\xf8\xa2\x45\xc3\x5c\xfb\x66\xce\x9b\x9b\x4f\x78\x9a\xe4\x75\x61\x44\x48\x6c\xa8\xb2\x48\x80\xaa\x25\x8a\x9e\xee\x91\x81\xc4\x10\xd0\x0e\x1d\x36\x92\x81\xac\x98\x24\xc5\x19\x86\xa9\xaa\x24\x70\x69\x16\x11\x4e\x82\x93\x1e\x47\x7c\xb0\x97\x99\x7f\x2e\x75\xe3\xe0\x67\x45\xb6\x7f\x30\x9a\x49\x39\x34\x71\xd5\x3b\x7b\x57\xb4\xdf\xf8\x53\xcf\x56\xfd\xea\x4e\x78\x92\x5c\x93\x65\xcc\x21\x91\x60\x58\x4c\x73\x2e\x26\x6c\x8b\x8f\x62\x33\x52\x23\x45\x57\x2d\x49\x57\x54\xc5\xa2\x55\x01\x03\xcf\x09\x79\x5b\xd0\x50\x00\x02\x22\x7a\xd1\xe4\x79\x27\x6b\xf7\xed\x5e\xba\x96\xd1\x29\x27\xef\x2e\xc7\xbf\x16\xd9\x58\x76\x76\x8e\xea\x0d\x86\xcc\xdc\xb8\xbf\x46\x9d\xd1\xb7\x84\xcc\x2b\x7f\x27\x56\x2f\xb1\x69\x4b\xf5\x78\xc2\x66\x62\x9a\x8d\xf4\xc8\x92\x19\x36\xb2\x50\x4c\x04\x24\x60\x58\xd5\xb7\x38\x41\x0c\x14\xc2\x05\x3c\x25\xd2\xc8\x32\x00\xb2\x13\x57\x8f\xd3\x2e\xa5\x2c\x28\xf2\xbc\xab\x3b\x60\xfa\x9e\xa2\x27\x57\xfa\x3f\x1c\x99\x5d\x45\x5b\xf9\x7e\x4b\x7c\xe2\xe3\x6b\x4b\xbe\x93\x0b\x64\xbe\x38\x48\x68\x36\x89\x15\x92\x8b\x59\xcd\xe6\x24\x48\x43\xce\x30\xec\x28\x8c\x42\x95\x27\x43\x26\xa2\x91\xab\xfa\x94\x6e\xa8\x3a\x70\x0c\x5f\xd0\x79\x49\x23\x19\x12\x26\x9e\xf8\xe5\x29\x3c\x28\xed\xb7\x56\xd5\xc7\xef\xbe\x7a\xb0\x62\x81\x65\x6f\xb4\x9d\xad\xe4\x9a\x7d\x77\x49\x50\xb1\x66\x8e\x86\x5f\x5c\xab\x3e\x29\xf3\x1c\x7d\x89\x59\xb6\x68\x10\x84\x40\x8a\x0c\x8a\xd5\x4c\x5b\x8c\x78\x18\xcb\x66\x40\x53\x06\x6f\x50\xbc\xc1\x2b\xd8\x32\xe3\x10\x71\x98\xe6\xa1\xcd\x4a\x10\xe2\x7f\x72\xf4\xa5\xaf\x69\xe4\x35\xef\x8d\xea\x52\x75\x31\x7c\x75\x7d\xfd\xf7\xae\xc3\x81\x8b\x7e\xfb\x58\x0f\xa4\x2f\xd6\xcd\x49\xd5\xaf\x15\xdf\xf5\x5a\x95\x23\xc9\x35\x59\x20\x01\x61\x4a\x48\x43\x94\xe8\x69\x0c\xe5\x20\x43\x24\x44\x64\x86\x6e\x1c\x50\xae\x43\x9b\x3e\xe3\xc9\x3e\x63\x18\x1e\xc4\x3a\xf0\x03\x21\x74\x8d\xc4\x75\x7a\xa5\x26\xb7\xd8\x82\x37\x3f\x6b\x34\xec\x5a\xb3\xb7\x6b\x7c\xde\x7d\x2a\x9c\x79\x64\xf7\xa8\xa2\xf5\x37\xee\x18\x84\xb8\x6f\x51\xdf\xcc\x03\x74\x12\x26\x3d\xcf\xb5\xb0\x4f\x85\xa4\x2d\x1b\x86\xcd\x01\x89\xd7\x0d\xd2\xa7\x25\x42\x95\x21\x45\x2a\x82\xc4\x7a\x4e\xc0\x21\xca\x51\x1d\x1a\xaa\x36\x6f\x3a\x20\x41\x9d\xce\x75\x5d\x78\xeb\xa7\xd7\x0a\x46\x65\x5e\x96\xa6\xb7\x7e\xd8\xbc\x44\xff\x1c\x5d\x3e\x5c\xfd\xca\xd1\xa6\xa8\x41\xbe\x63\x53\xf3\x15\x9c\x94\x64\xd8\x28\x6f\x06\x8e\x15\x58\x94\xa4\x50\xac\xc8\xf3\x81\x2b\xc3\x80\xd4\x0c\xc7\xe3\x3c\x14\x70\x0a\x47\x00\x55\x60\xb5\x40\x25\x08\xdf\x91\x24\xd1\x26\xa5\xc4\xa5\xd8\xe1\xd3\xf1\x96\xf5\x5b\xc1\xdc\x46\xb5\xe3\x3a\xcf\xca\x77\x78\xd7\xff\x59\x3a\x78\xf8\x4e\x7f\x5c\x2d\xcf\x88\x5d\x39\x3b\x3f\x49\x2e\xe1\x0c\x1f\xdb\x14\xa0\xa1\xab\x2a\xaa\x09\x59\x52\xb1\x68\x5a\xa6\x4d\x60\x63\x0c\x24\x53\xd5\x15\xda\xe3\xa2\xc8\x42\xa1\xe2\x61\x27\xd4\x00\x17\x69\x89\xea\xf4\xbf\x2e\x6c\x3f\x39\x6f\x70\x5a\xc5\xd1\xaf\x71\x8b\xfb\xb6\xca\xd2\xee\xe7\xa2\x1f\xb6\xee\x50\xee\x4a\xc7\x57\xed\x99\xdb\x5e\x7e\x63\xe1\xc6\x24\xd7\x1d\x3a\xc3\x5b\xb4\xa9\xf1\x88\x72\xf5\x58\xb1\x2d\x2a\x66\xf5\xc0\x10\x78\xde\x0f\x03\xc2\x0b\x7c\x85\x82\x26\xb0\x78\xca\x75\x11\x30\x3c\xc3\xe5\xa9\xff\x9f\x3d\x1e\xe4\xfa\xef\xe0\x10\xa9\x4d\x9a\xe4\x6f\xb0\x31\xbd\xe8\x5a\xe3\x3e\x13\x7f\x53\x0f\x2e\x3b\x91\x77\xe1\x81\xab\x69\xbf\x8e\xc9\xf7\xe5\xa8\x89\x05\x4b\xf7\xa8\xf3\x2a\x71\x71\xf2\xe6\x0e\x07\xce\xcd\x49\x6e\x63\x80\x55\xc2\xc0\xb0\xa3\x28\x8a\x28\x89\x91\xfd\x88\x95\x1d\xcf\xe7\x21\x12\x5d\x9b\x51\x2c\x9a\x73\x4d\x52\xb2\x24\x14\x8a\x88\xb4\x62\x56\x25\x29\x2d\x03\x9d\xd6\x06\xb5\xc6\x0a\xf0\xfc\xbd\x58\x79\xb3\xe4\xfe\x9d\x29\x9b\x46\x1d\xcb\xd3\x6d\x5a\xd7\x97\xa9\x8d\x43\x1b\x89\x53\xba\x9c\x59\x95\xe4\xf1\x52\x88\x6c\x9a\x02\xbc\xa8\x23\x47\x86\x58\x8b\x28\x99\x64\xb4\x58\x43\x34\x25\x89\x2a\x14\xf4\xd8\xc4\x96\x18\x73\x8a\x0b\x80\xec\x11\x4a\x14\x40\x2a\xb1\xd9\x79\x73\xcf\x78\xdc\xaa\xd7\x55\x3c\xe0\xcf\x31\xed\xd6\xb6\xbc\x86\xbe\x9f\x38\xff\x88\x7e\x51\xbf\x7f\xb9\xd9\xc7\xaf\x35\x15\x7a\x5d\x4c\x72\x63\x40\x76\xa1\x1a\xa8\x9a\x06\x45\x60\xd3\x71\x10\x63\x55\x36\x0c\x99\x01\x34\xe6\x4d\xd5\x61\x28\x4e\x08\x48\x36\x76\x34\x12\x41\x12\x91\xb2\x84\x40\xe2\x96\x6f\xbf\xdf\x3a\xf7\x39\xda\x7d\x70\x47\x7e\xf2\x84\x5b\x35\x0e\x7d\xbb\xbe\xc8\xbc\x6d\x1d\x7a\x2e\xe8\xb4\x3d\xdb\xcf\xee\xfb\x6f\x15\xb8\x55\x21\xb9\xd1\x2b\x33\x2e\xc5\xc6\xb4\x16\x48\x52\xac\xf3\xa6\xca\xf0\x9e\x03\x23\xde\x16\x08\x9d\xe7\x48\x43\x77\x79\x47\x37\x74\xcf\xd7\x8c\x80\x63\x55\x2c\x04\x7a\x06\x3b\x18\x5d\xb3\xdf\x1a\x7e\xe1\xf2\xbe\xd6\x0b\x5f\xda\x6b\xac\x7d\xf0\x97\xa3\xfc\x51\xa7\xfd\x9c\x86\xab\x6a\x72\x0b\xef\xe4\xfb\x6d\xcb\x8a\xcc\xab\x14\x24\x96\xb6\xb7\x91\xe2\x9a\xba\xc7\x09\xae\x46\x01\x99\xb6\x80\x1a\x03\xc0\x50\xbc\x20\x68\x91\x23\x11\x12\xcf\x12\x26\x56\x05\x53\xb6\x23\x31\x8a\xb1\x2c\xc0\xc4\x66\xdf\xab\x78\xea\xc8\xba\x32\xcb\x6a\xac\xe9\xba\xbc\xc3\xb9\x3c\x4f\x87\xf7\xe9\xec\x7d\x74\x6b\x85\xab\xe6\xf7\xf2\x55\x4c\x1d\xdf\xa1\x7c\x72\x7d\x9b\x74\x3c\x95\x95\x04\x68\xb1\x3c\x61\xbb\x40\xa5\xa0\x28\xf3\xa1\x13\xf8\x0e\x30\x75\xcc\x58\x10\x13\x1c\x52\x63\x3d\x86\x0c\x05\x75\x49\xb0\x88\x7f\x6f\x23\xdd\xcf\xf5\xdf\x01\x67\x52\x1b\xf7\x6a\xd0\x31\x7d\xde\x19\x5a\x79\xc1\x0d\xfd\xe9\x83\x55\xe0\xf1\xb5\x02\xe7\xdc\xdb\x4f\xad\x33\x83\x4b\x56\x5f\xdc\x15\x8e\x17\x0e\x17\xee\x39\x7d\x07\x4a\x32\xff\x86\x4f\x58\x00\xc6\xac\x1f\x9b\xd0\x81\xa4\x44\x5b\x98\x31\x20\x45\x61\xc4\x29\xb1\x48\x9a\x94\xca\x85\x46\x04\x91\x17\x47\x1e\x45\x8a\xb6\xac\x66\xc0\xbf\xb1\xa0\x6f\x9e\x37\x5a\xae\xa9\x13\xcc\xf8\xf6\xd2\x9e\xd5\xf1\xd0\xbf\xb2\xf6\x5e\x39\xb5\x4e\x9f\x93\x23\x40\xcd\x01\x63\xea\xf6\x35\x66\x26\x99\x34\x9e\x94\x0d\x12\xe9\xba\x48\x6a\x2e\xa3\xa8\x22\xe3\xe8\x24\xa5\x6a\xa6\xa6\xfb\x94\xa0\x03\x56\xd4\x44\x44\x6a\x1a\xad\xc0\x58\x50\x03\x1d\x07\x42\x06\x01\xbc\xa4\xf6\xfe\x0e\x07\x97\xcc\xcf\xaf\xdf\xc8\xf2\x6b\xc3\x37\xcf\x1c\xbe\x71\xa1\xdd\x96\x8f\x9b\x35\x3e\xb6\xef\x8f\x26\x25\x57\xde\x7a\xfd\xbd\x24\x6f\x3c\x03\xc7\x8a\xb0\x2c\xf2\x2e\x76\x0c\xc9\x13\x09\x21\x8c\x01\x67\x7b\x8e\x2b\x85\x22\x69\x73\xc8\x37\x20\x4b\xb3\xd0\x35\x23\xcd\x74\x3c\xc1\xf9\x67\x96\x7f\xd1\xec\xef\x87\xce\x69\x65\x7e\x79\xf3\x68\x8b\x2a\x55\xdf\x3f\xbd\x3d\xae\xda\xef\xe8\x3d\xbd\xed\xee\x0f\x37\x79\x85\xce\x97\x6d\x7f\xb9\x62\xed\xe4\xa6\xcb\x90\x20\x55\x89\xd2\xb9\x40\x40\x31\xc9\x0a\x1c\x11\x21\x43\x10\x63\x9e\x94\x74\x8b\x94\x20\xe9\x39\x00\x71\xba\x43\xb1\x0a\x29\x21\x85\x10\x10\x90\x13\x9b\xdd\x2d\xcf\xc4\xfd\x0b\xb7\xae\x44\x9f\x09\x3f\xbe\xb4\x51\x6e\xb0\xad\x4c\xd5\xb9\x85\x9a\x97\x6e\x7a\x6d\x9d\xc0\xda\x93\x4a\x3e\x4b\x32\xb3\xaf\xa5\x98\xb1\x66\x5a\xa1\x68\x2a\xac\xc9\xf2\xb4\xcd\x31\x0e\x25\xda\x8e\x47\x31\x96\x62\xf8\x94\x43\x31\x96\x25\x86\xc8\xf0\x91\xee\x1b\x8a\xa0\xb8\x76\xe2\xbc\xc3\x35\x8c\x5e\xef\xbd\xa4\x53\xc3\x62\x4d\xa7\x56\x2b\x5f\xe6\xc3\x7d\x63\x52\x5e\x1d\xb6\x65\xcb\xdd\x22\xf9\xde\x98\x53\xba\xe4\x9e\x6e\x97\x93\x6b\xb6\xea\xc9\x9a\x62\x31\xa6\x43\xf8\x30\x0a\x39\x3a\x40\x1e\x6d\x04\xa2\x1b\x1b\x8a\x16\x2b\x51\x1c\x2b\x12\xc4\x14\xcd\x06\x9c\x4d\x62\x56\xc4\xff\x2b\xd9\xfe\x3f\x66\xff\x0b\xf7\xfd\x9f\x80\x61\xa9\x4d\xb2\x97\x2e\x90\x3f\x3d\xee\xbb\x45\xb7\x72\xa9\x5b\x1e\x55\x39\xfa\xec\xc2\x9d\x16\x73\xcd\x78\xed\x4b\x57\x97\x5e\x4f\x29\xf4\x52\xb6\xad\xb3\x2f\xda\x67\x66\x55\xec\x96\xe4\x55\x31\x87\x23\x0d\xc1\xc2\x18\x12\x96\xe2\xc8\x5e\x64\x6b\xa2\x46\xf2\x8a\xe3\x22\x8a\xb4\x3d\xcb\xc4\x96\x6e\x93\x0e\xe9\xc8\xd8\x26\x28\xdf\x23\xfe\xa9\x66\xf6\x62\xe2\xa9\xa2\x7f\x52\xb3\xf6\x90\x92\x53\xae\x5d\xac\x7d\x59\x58\xf1\x72\xa9\xb5\x77\x27\xec\xbd\xfe\x56\xea\x8c\xc2\x97\x97\xb4\xdd\x18\x6f\x3a\x98\x64\xec\x1e\x65\x49\x26\x81\x15\x2d\x8c\x39\x4b\x60\xb1\x42\x22\x18\x03\xd6\xf3\x8c\x50\x8d\x35\x0d\x73\x1c\x61\x21\xc1\x07\x1c\x72\x18\xd3\x02\x76\x00\x33\xd8\x25\x28\x6b\xd5\xa9\xfc\x73\xe9\x1d\x5d\x37\xab\xb7\x3f\x5a\x4e\xbc\xdf\xe9\xe4\x90\x09\x31\x55\xb7\x50\xf6\x3f\xf7\x11\x33\xda\x96\xca\x79\x38\xc9\x23\x4c\x46\xa2\x25\x41\x30\x6d\x40\x48\x3c\x0e\x69\x2f\x24\x74\x2e\x8a\x4d\x4b\x09\x15\x1c\x71\x94\x60\x1a\xb2\xc1\x33\xba\x21\x43\x17\xf8\x8c\x4b\x45\x19\x6c\x6e\x34\xe9\xbd\xa5\xd5\xc2\xca\x23\x26\x3d\xdd\x37\xe2\xd2\x73\xa2\xc5\xd2\xb7\xb5\xeb\xc4\xbd\xe2\xb3\x7f\xdf\xbc\x3d\xb5\xca\x2f\x55\x26\x6c\x49\x32\xe7\xab\xcf\x5a\xba\x6d\x31\xae\x07\x4d\x9e\x54\x78\x37\xe0\x24\x8a\xf2\x6d\x35\x88\x3c\x4a\xb3\x79\xc8\x0a\x38\x52\x29\xc7\xc7\x28\xe6\x62\x5b\xd0\x63\x3d\xb1\xd9\xa3\x86\xb4\xf9\x36\x6d\xa0\xd1\xbc\xd5\x9a\xf1\x55\xab\x4f\x6e\xd3\xf3\xcc\xe8\x2e\x3f\x37\xb7\xee\x37\x4e\xf9\xae\xc3\xc8\x4d\xb7\x3f\x2a\x9e\xdc\x3a\xcd\x14\x45\x01\xba\x2c\x4d\x7b\x94\x21\x50\x98\xf1\x19\x51\x51\x1c\x8a\x81\x84\x2b\x09\x12\xe3\x1b\x86\x21\x62\x13\x46\x34\x82\x96\x4a\xf3\x2c\x40\xff\xa6\x40\x1c\x98\xf3\xbf\x03\x02\xa5\x36\xc9\x9e\x25\x4b\x81\xcf\xd3\xbd\x25\x3f\xce\x53\xb7\x42\x96\xc9\xcb\x9b\x66\x6f\x7d\x73\xb3\xba\xbc\x79\xee\xdc\x45\xb6\x7c\xf5\x08\x7d\xb2\x01\xff\xda\xed\xf6\x29\x69\x54\xa1\x24\xaf\x3d\x7b\x22\xcd\x44\x88\x64\x5c\x46\xf7\x75\x00\x62\x21\x52\xb1\x61\x5b\x10\x72\x02\xe9\x5b\x98\x51\x18\x9e\x40\x7e\xc0\xcb\x51\x48\x30\x98\x52\x49\xe7\xc5\x86\xf0\xf0\xd5\xed\xec\xee\x71\xb3\x9a\x67\xdf\x39\x62\xff\x70\x79\x97\xf6\xd6\x8f\x27\x5e\x7a\x84\x8a\x56\x9e\x51\x53\xaa\xe9\x4f\x1e\xb4\x20\xc9\x60\x61\xa4\x0a\x9a\xa9\x8b\x91\xe3\xd3\x3c\x45\xa3\x18\xc9\x92\x2c\xf9\xae\xea\x22\x49\x82\x34\x32\x7c\xc7\xb0\x2c\xcf\x51\x22\x81\x27\x02\x96\xf3\xd2\x53\x1c\xfd\xdb\x9f\xea\x14\xaf\xac\xfb\x05\xae\xe4\xbe\x35\x7e\x43\xbf\x62\xef\x3c\x3c\x82\xee\x55\x1f\x75\xa6\x49\x8e\x8a\xd3\x89\x15\xfd\x5e\xfb\xb4\xd9\xfd\xe4\x86\x01\x4d\xb0\x9e\x62\x53\x0a\xf0\xa0\x17\xf9\xd0\x17\x20\x63\x04\xb1\xae\xc4\x2e\x81\x54\x3f\xfc\xc7\x95\x66\xaa\x24\x17\x30\xae\xef\x50\x1a\x6d\x85\x19\x99\x5d\xa2\xc0\xd1\xc6\x03\x26\x52\x9f\x6e\x39\x3c\xff\x8b\xf2\x3b\x17\x5d\x69\x77\x21\xf7\x77\x07\xdb\x1d\xac\xfc\xcb\xd5\x31\x65\x86\xba\xfb\x33\x2f\x06\x90\x58\xda\x9a\x52\x44\xdf\xc3\x06\xf6\xcc\x50\xa2\x49\x95\x65\x6d\x93\x08\x3c\x08\x44\x93\x43\x3e\x65\x30\xb4\x47\xba\x1e\xa4\x00\x45\xe9\xb4\x46\xd3\xf1\xdf\x54\xfa\xfe\x75\x91\xfd\x27\xf8\x41\x6a\x13\x2a\x5b\x96\x2c\xe9\x2f\xb2\x06\x8d\x7b\x65\x3b\x73\xa3\xce\xfb\x42\xbf\xad\x97\xc4\x6c\xa3\xa8\x91\xf7\x8b\x1d\x39\xfe\x25\xdf\xfe\xe1\xe6\xb4\xa9\xf7\xef\xa5\x24\x79\x81\x89\x23\x54\xc3\x35\x14\x06\x62\x9f\xb6\x30\x29\xba\xae\x2c\xf2\x81\x47\xb0\x9a\xc1\xb3\xa1\x19\x20\xd3\x89\xe4\xd0\x72\x0c\xf1\x1f\xaf\x4d\xc0\x03\x27\x83\x1b\xc1\x7e\xa7\x54\x85\xc1\xf1\xd6\xf0\xbb\x70\x8c\xdb\xad\x6c\x2a\xc8\x7e\xea\xa7\x7b\x4d\xc7\x15\x5b\x5b\xe2\xd7\x4d\xbf\x0e\x9c\x38\xa1\x74\x72\x73\x94\xef\x7a\x14\x47\x22\x9d\x70\x43\x0e\xeb\xd6\x3f\xca\x50\xda\xf6\x3d\x44\xba\x0c\x47\x85\xac\x65\x72\xbc\x03\x45\xc2\x76\x38\xdd\xa3\x5d\xd9\xc0\x44\x06\x8f\xb2\xbc\xc3\xee\x0d\xbf\x9f\xa3\xde\x95\x6c\xfb\x9b\x55\xe8\x59\xe3\x9d\x2b\x33\x87\x39\xb9\x47\xef\xec\x93\xab\xfb\xc4\x7d\x39\x0b\x37\x63\x86\x27\x19\xd8\x22\xa2\x98\x15\x0d\x14\x84\xbc\xcf\xab\x94\xa4\x86\x16\xe7\x3b\xa6\x48\xb0\x9c\x4c\x03\x4a\xe5\x55\xd6\xa4\x75\x40\x6b\x86\x40\x91\xb2\x2e\x84\xff\x6c\x38\xbc\x68\xf6\x74\x23\xfc\xec\xbd\x6c\x45\xd6\xb5\xcf\xf2\x45\xeb\x9b\x0d\x9e\x8f\x5f\xc8\xd6\x5b\x55\xf2\xb7\x43\x6f\xa5\x7e\x58\xec\xc3\x73\xd4\x98\xcc\x8f\x75\x32\x20\xe3\xf0\x64\x0b\xc4\x86\x2f\x2a\xa1\xc9\x9b\x72\x8c\x0d\x18\xcb\x0a\x63\xf1\x8a\x42\xf1\xba\x4c\x46\x3e\x41\xb3\x2e\x81\xbd\x80\xa5\x3c\x22\x54\xf4\x0c\xaa\x9d\x6a\xe3\xcb\x15\x1c\xb3\xfc\x4c\xa5\x3e\x97\x16\x5c\xba\x53\xee\x9d\xdd\xde\xae\x81\xa4\x26\x2c\xdc\xdf\xef\xd9\xe3\x5c\xaf\xf5\x75\x32\xbf\xcf\x9f\x98\x09\x5c\x0d\x08\x55\x95\x90\x18\x4a\x8a\xc7\xb1\x50\x24\x05\xc5\x22\xfd\xd0\x11\x80\x2a\xc6\x0c\xd0\x65\x64\x69\xbc\x22\x32\x04\x84\x2c\x94\x28\x89\x67\x5e\x88\xe0\xff\x34\x00\x4d\x6d\x52\xfa\xa5\xc1\xfd\xd3\x47\x70\xdb\x99\xe7\x96\x9c\x39\xfc\xf3\x2f\x43\x73\x46\x57\x6f\x15\x3e\x51\xe7\x71\x83\x31\xed\xb3\x76\x98\xf2\x39\xfb\x46\xa3\xcf\xca\xbf\x51\x3f\xc9\xf4\x59\xd8\x97\x55\x5b\x95\x3d\x9e\xd7\x4c\x55\x46\xa1\x1d\x03\x52\x51\x49\xc5\x70\x5c\x9d\xa0\x34\x97\x86\x7a\x68\x89\x92\x82\x4d\x46\x24\x22\xcd\x36\xb8\x0c\x42\xe1\xc8\xb1\x22\xb7\xae\x0e\xbb\xae\xa6\xad\x7f\xff\xde\x1a\xf4\x68\xd6\x93\x0e\x95\xae\xde\x7d\x23\x77\xb1\x3c\x1f\x3b\x8b\xb7\xec\x17\x33\x5f\x1c\x25\x46\xa4\x13\x88\x22\x64\x5d\x54\x7c\xa0\xf1\xd8\x89\x74\x05\x5a\xa1\x44\x48\xb2\xa3\xa8\x4c\x0c\x35\xd2\x90\x42\x57\x62\x2d\xd6\x82\xbe\x6a\x98\x76\x88\x32\x90\xe0\xff\xa9\xf1\xa0\x82\x9f\x1d\xca\x79\x78\x75\x96\x4b\xf5\x73\xee\xfb\xee\xc2\xc8\x86\x87\xa6\x9d\x3f\xb6\xa7\xee\x98\x19\x69\x5f\x0d\x02\xa9\xc9\x95\x0e\xe4\x45\x92\x72\x65\x07\x0b\x74\xc8\xc6\xa1\x15\x9a\xa4\x48\x5b\x42\x80\x65\x19\x7b\x9c\x1e\xd2\x30\x90\x30\x21\x07\xf8\x1f\xa9\xd2\x46\x9e\xea\x31\x90\x48\x6c\xf6\xe8\xbc\x47\x47\xb6\xdf\x3f\x79\x7c\xf3\xf3\x8b\xfe\xec\x60\x8a\xed\xcb\xee\x7f\x54\xfc\x37\xfd\xdb\xf5\xec\xf6\xc6\x1b\x37\xb5\xa0\x32\xaf\x04\x92\x98\xea\x48\x0b\xa8\x08\xc8\x01\x14\x02\x46\xb4\x44\x08\x10\x56\x30\x92\x6d\x48\xd2\x28\x70\x7d\x1d\xd8\x21\xcb\x9a\x20\x20\x58\x6c\x9a\xa1\x62\x79\x4e\x06\x77\xf0\xb8\x29\x3d\xf2\x76\x8c\x2b\x96\xbe\xa1\xbf\x96\xed\x95\xec\xaf\x4e\x29\x57\x69\x4b\xfe\x2d\xa3\xaa\xbd\xd1\xb0\xec\x88\x3d\xb5\x8b\x3b\x49\xd6\x5c\x09\x42\xdd\x10\x59\x0f\x1a\x81\x27\x22\xcd\xb1\x39\x95\x0e\x0d\xce\x89\x60\x00\x05\x36\x0e\x4d\x23\xb6\x62\x46\x77\x94\xc8\x42\x0a\xe6\x01\x45\xfd\x6d\x4e\xb1\xfe\xe5\xff\x0e\x94\x90\xda\x24\xeb\xab\x0d\xfe\x0f\x59\xd9\x72\x58\xa6\xfa\xd2\x2f\xea\x29\xa7\xa7\x57\x9f\x5c\xfd\xf0\xaf\x0d\xc2\x3f\xab\x8d\x1e\xd7\xa2\xd0\x3b\xc3\x4c\x38\x77\x8f\xb8\x67\x50\x72\x23\x98\x91\x23\x5e\x0b\x08\x3b\xa0\x29\x16\xd8\xb1\xc7\x43\x8d\x45\x8e\xe4\xda\xbc\x29\x51\xbc\xe0\x53\xae\xe1\x92\x1c\xed\x30\xac\x1a\x89\x00\x3a\x04\x8c\x12\xfb\x14\xd3\xa8\x61\xca\x27\x7e\xf7\x6c\x75\x9f\xae\x6b\xbc\xff\x74\xa9\x4a\x07\x87\x32\x0b\x6f\x2d\xf8\x65\x56\x97\x6d\x5f\xbd\x56\xaa\xdd\x62\x2f\xb9\xa5\x43\x4c\x9a\x12\xd0\xe5\x88\x56\x15\x1c\x3a\x9a\xea\x89\x66\x10\x60\x45\xf6\x75\x96\x17\x2c\x1c\x06\xa1\xa9\x78\x21\x4b\x32\x2c\x21\xc6\x30\x64\x75\x87\x4d\x7c\x2b\xa0\xaa\xbf\xba\xf3\x6f\x3e\xfb\xea\xf4\xf6\x82\x13\x97\xf8\xf3\x1a\xe4\x68\x9e\xd7\x6d\xff\xd3\x9a\x5f\xa7\x75\x1a\x54\x50\x9c\xb8\xef\x74\x72\xcd\xb6\x63\xd5\x52\x04\x43\x08\xb5\x50\xf2\x7c\x25\x08\x7d\xc2\x27\x48\xe0\x58\x40\x8e\x61\x20\x62\xdd\xc0\x2a\x11\x48\x2e\xe9\x08\xb1\x26\x84\x3c\x83\xfc\xc4\xf3\xdc\x4a\xf7\x8b\x3d\x0b\x5b\x76\x8d\xf1\xb4\x7e\xc7\x0a\xfc\x5e\x62\x5d\x14\xf6\xed\x54\x69\xf7\x57\xf9\x02\x0f\xa5\xec\x13\x3b\x27\x17\x9e\xce\xfb\x5a\xc0\x5a\x46\xc8\x29\xb4\xcb\x38\x96\x48\x98\xba\x28\x86\x96\x21\xc7\x2e\xa6\x22\x9e\x32\x19\x5f\x90\x49\xcd\xb7\x90\xce\x73\x82\x6f\x85\x84\xab\xbc\x38\xfb\xfa\x64\x59\x8d\x70\x43\xbd\x12\x0b\xbe\xef\x76\xb5\xc9\x82\xf6\x93\xa2\x1b\x13\x9b\xe4\xee\x37\xa9\x63\x91\x09\xd3\x9a\xd6\x3c\xf3\xf2\x97\x49\x56\xe2\xb0\x88\x40\x14\x79\x15\x33\x40\xa5\xa1\xac\x63\x92\x08\x1d\x5b\x90\xbd\x40\x09\xf9\xc0\xd1\x23\x5b\x13\x0c\x82\x65\x19\x41\xc3\xd0\x0d\x44\xc7\xff\xa7\x5a\xe3\xff\x98\xbc\xa8\xd6\xff\x2e\x89\xf4\xe8\xf3\xf0\xda\xf8\x37\xb6\xaf\xcb\x39\xe3\x74\xbc\x7e\x62\xc9\xaa\xe5\x5a\x1c\x1e\xbb\x61\xcc\xdd\x5e\xa5\xc9\x3a\x39\x06\x4e\x38\x92\xda\xe4\xf9\x93\xe7\x7b\xd2\x4a\xa4\x73\xa8\xaf\x3f\xc9\x91\x46\x1e\x3f\xff\xd3\xc1\xc2\x69\xb9\x1f\x16\x9b\x77\x33\xe7\x92\x37\x2f\xe0\xa6\xc7\x6a\xbe\xbe\xb0\x4a\xd6\x03\xc5\x36\x8e\x49\xf2\x92\x92\x42\x86\x86\x0b\x9c\x58\x43\x2e\xed\x44\x04\x44\x48\xb6\x55\x82\xb6\x0d\xd6\xf5\x15\x35\x52\x18\xcf\xe2\x3d\xc3\x75\x5d\x86\x20\x7c\xa8\xf8\x6a\x90\xd8\xa1\x94\x33\x7f\x2d\xd6\xeb\x94\xc9\xdf\x7e\xe6\xd3\xdf\x77\xe5\x42\xe3\xf6\x8e\x2d\x34\xe7\x70\xb5\x55\xb9\xe8\xed\xad\x6a\x7a\x7f\x74\x1d\x9d\xdc\x2b\x81\xa7\x63\x45\xb3\xe4\xc0\x95\x74\x6c\xfb\x30\x66\x23\xc2\x8c\x01\xd2\x68\x8a\x26\x49\x41\x31\x74\x26\x92\x90\x85\x22\xc2\xc4\xc0\xb6\x68\x48\x93\x09\x10\x84\xd7\x36\x4e\xee\xfa\x69\xfd\x77\x7b\xcb\x63\x0a\xdc\x99\x47\xde\x5a\xf5\x68\x68\x9d\x5d\x5b\x6b\xdd\xfa\x50\x5b\x2c\xde\xff\x7e\x75\x87\x1f\x92\x1b\xba\x2a\x25\x05\x0a\xf4\x22\x5e\x0a\x95\xc8\x8d\x15\x32\xfc\xc7\xd3\x8c\xa7\x0d\x86\x67\x10\xcb\x8b\x8e\x24\x44\xa6\xc7\xb8\x3e\x17\xd8\x96\xa9\x02\x9b\x70\x12\x9f\xf4\x46\xf2\xdb\x6d\x9b\xae\x7d\xd8\xa0\x64\xda\x07\x17\x5b\xbd\xdf\x78\xeb\xe9\x56\xd7\x4a\x5c\xd0\x8f\x3c\xf9\xfd\x87\xdd\xb5\x6b\x36\xb9\x9b\xf9\x93\x4e\x4c\x98\x8b\x22\x46\x76\xf4\xc0\x40\x1a\x0d\x5c\x83\x0e\x3d\x46\x0a\x18\xcb\x21\x29\xa4\xea\xac\x16\x0b\x6e\x44\xeb\x41\x88\x29\x2f\x42\x1e\x54\x05\x02\x25\x20\xcc\xbd\xa2\x4f\x6c\x39\xa9\xdf\xaf\x5e\xbd\x6a\xe3\xe7\x0e\x70\x37\x8e\x98\xd1\x7d\xdd\x99\x1f\xbb\xee\x5c\xc7\x3d\xed\x56\xa3\x44\x8e\xfb\xc9\x25\x36\xe7\x25\x59\x17\x34\x03\x3b\x0e\xcf\xd8\x9c\x2c\x5a\x41\x60\x2b\x48\x66\xa0\x2b\x46\x16\x25\xba\x26\x65\x44\x9e\x01\x5d\x9a\xd4\x64\x07\x6b\x42\x4c\xfe\x53\x21\x39\xc1\x4a\xd8\xaf\xab\xbd\x3e\x3b\xba\x8d\xc8\x26\x29\x8d\x88\x8b\xc2\xb7\x0f\x2a\xde\xb9\x79\xea\x69\xc9\x09\x0b\xc7\x5e\xd8\xd1\xe2\x74\xfd\xf9\x17\xd2\x05\x6e\x99\x62\x03\x73\xbf\xe1\xe7\xff\xaa\xda\x86\x2d\x5e\xce\x39\xa7\x8b\x54\x72\x2d\xb2\xcd\x7b\xc3\x82\x71\xcf\x17\x76\x78\x65\xfd\x47\xb7\x93\x1b\x01\x9e\x2e\x44\x22\xa4\x6c\xcc\x52\x36\x09\x2c\xd5\x52\x9d\x48\x09\xe9\x28\xa2\x4c\x2f\xf6\x30\x69\xd9\xae\x44\x52\x24\x8e\x58\xd9\x04\x7a\x4c\x02\x81\x4f\x8c\x82\x18\xfc\xa8\xf9\x81\x62\x5f\x67\x3d\xd8\xfe\x60\xaf\x0f\xce\x8e\xea\x55\x70\xe5\xd6\x32\xdb\xee\x55\x2e\x42\xe5\x99\x90\x75\xf7\x47\x29\x5a\xb2\x69\xd0\x05\xd3\x61\x03\x9e\x75\x22\xd2\xd7\x30\x29\x32\x5a\xec\x00\xcf\xb1\x38\x9e\x95\x68\xa4\xea\xa1\x65\x11\x76\x20\xf3\x36\x00\x86\xe2\x06\x3e\xf9\x4f\x9a\xb2\xf4\xee\x34\x6a\xff\x24\xef\xca\xeb\xbb\x67\x0f\xbc\xb0\xf4\x5c\x99\x2d\xd3\x8e\xa5\xf6\x7b\x73\x19\x39\xbb\xe5\xf9\xf0\x6e\xfd\x63\xda\x0f\xf5\xea\x26\xd7\x9d\xa0\x82\x91\xc6\x91\x86\x1c\xd8\x42\xa8\xdb\x94\xc2\x6a\x64\x80\xf8\xc8\x50\x18\x01\x4a\x06\xe3\xf2\x96\x22\x45\x4c\x20\x49\x36\x24\x42\xc3\xd1\x22\x32\x71\xe0\x16\x3f\x96\xca\x2d\xde\x53\xfa\xc8\x57\xe5\x06\xb6\x3b\x9a\x3a\xa2\xed\xdd\x26\xdf\xe4\x14\xdb\x6e\xed\xf6\xb9\xb5\xb0\x70\xb1\x47\x1b\x1a\x27\xf7\x02\xc3\xae\x27\x73\x06\x1f\x20\x3e\x60\x6c\xc5\x96\x78\x45\x52\x05\xca\x0a\x88\x18\x46\x31\x26\x6d\xc7\x65\x34\x5d\x01\x48\x0d\x90\x61\x88\x2c\x0b\x54\xef\xc5\x93\xee\x64\x97\xb9\x3b\xd6\x97\x4e\xa4\x9d\x1a\xd5\x71\x47\x2f\x62\x08\xb8\x32\xad\x13\x3b\xe6\xf6\xeb\xfb\xed\xc6\xc5\xae\x4c\xc9\x19\x27\x99\x59\x2d\xf0\xb0\xe2\xa9\x58\x65\x25\xd7\xe7\x14\xc1\x36\x65\x86\xe6\x25\xcf\xf6\x25\x60\xd9\x62\x14\x10\xa1\x65\xb8\xb4\xeb\x12\xb1\xc1\xeb\x1a\x6b\x43\x35\x71\x2d\x79\xaa\x52\xe5\xbb\x6f\xb4\xa4\x99\x36\x5d\x5f\x31\x6e\x74\x5a\x92\xf6\xf6\x95\x16\x69\x87\xfa\x7c\xbb\xdc\xea\xd9\x31\x6b\xe9\xd5\xa5\x32\xaf\x48\x90\x78\x05\x55\x0a\x55\x81\x36\x42\x80\x0c\x5a\x0f\x19\x56\xe2\x58\xdd\x27\x55\x4a\x47\x8c\xea\x42\xc6\x90\x59\x53\x96\x75\x2e\x32\x5c\xdb\xb3\x68\xd6\x70\xb0\x92\x41\xbe\x19\xbc\xbb\x52\x9b\x23\x6d\x7e\x6b\x51\xee\x42\x3f\xf5\xec\x2f\x1d\xeb\x96\x7d\xf4\xc5\x94\xeb\xa9\x12\xbf\xad\x59\x8d\xf7\x06\xf7\x2f\xb8\x33\x9d\x3b\xa5\xa9\x0d\xf2\xfe\xfa\xfd\xb4\xae\x4f\xa7\x14\x5b\x80\xf0\x8a\x0b\x6e\x9f\x41\xdd\xdb\x49\x95\x8b\x22\xa9\xe1\xae\xa6\x23\x53\x32\x8f\x24\x4c\xbc\xf1\x03\x6d\xc4\x20\xc5\xa2\x18\x91\x92\x45\xde\x33\xa3\x48\x8f\xb1\x69\x32\x14\x67\x50\x22\x61\x39\x1c\xc2\xb1\x2c\xdb\x44\x88\xb9\xd8\x55\xd8\xff\x5d\x6b\x4a\x7f\xe3\x7e\x1f\x66\xe9\x37\xbd\x55\xed\x07\xe7\x3e\x32\x4b\xed\x3c\xd0\x6a\xbb\xf6\xc3\xec\xed\xfd\xba\x88\xcb\x86\x89\xb7\x67\x6f\xfa\x84\x2e\x96\x5c\x77\x32\x24\xc7\xa3\x35\x11\x06\x8a\x1f\x30\xb2\xa9\x20\x9b\x11\x0d\x80\x19\xdb\x20\x0d\x5a\xe7\x31\xc9\x18\x06\x41\xd3\x91\x0a\x1c\xd3\x63\x29\x0b\xf0\x54\x06\x48\xf2\x7b\x64\xf9\xb2\x95\x1e\x0e\xbc\x78\xe3\xed\x3d\xdc\xdc\xe2\xd9\x97\x8f\x9d\x35\xb4\xe4\xbd\xcb\xdd\x1a\x4c\xcd\xb7\x78\x47\xa3\x0e\xbd\x76\xa5\x07\xa6\x8c\x28\xdb\x7c\x4e\xf1\xef\x1b\x0e\x3d\x62\x3c\x69\x59\xeb\xdb\x67\x1d\xd7\x2e\x39\x56\x70\x5e\xe7\x5d\x74\xa3\xbf\x06\x4c\x35\xa4\xcc\xa3\xe1\x12\x26\xd4\xc0\x09\x21\x72\x75\x82\xe7\x78\xd9\xf7\x54\x23\x20\x25\xdf\x35\x6d\x07\x71\x21\xef\x01\x3d\x08\x11\x49\x29\x31\xe3\xb3\x48\xd7\x55\x9e\x14\xc9\x28\x83\x49\xeb\xdc\xd7\xff\x38\xb5\x7a\xe4\xdb\x7d\xbb\xcd\x3e\xbe\xe0\x9d\xea\xde\xaf\x51\xfb\x5e\x77\xd4\x35\xf9\x86\x74\x3f\x3d\x63\x17\xd1\xb5\xf2\xa1\xe4\xba\x93\x11\xf1\x04\xcd\x85\x1e\xc3\xeb\xaa\xa9\xb0\x26\x89\x69\x89\xd6\x54\x11\x78\x40\x82\x1a\xaf\x92\x40\x10\xc8\xc8\x97\x8c\x40\xe4\x08\x01\x01\x21\xfa\xbb\xf4\xfc\xdf\xbf\xcd\xe6\x1a\x59\xe7\xd4\xbb\xd4\xfc\xf2\xf4\xfa\x3d\x9e\xac\x27\x26\xec\xdc\xd6\x49\x9e\x78\xf9\xd4\xce\xa3\x53\xc7\x15\x5f\x30\xe8\xc4\xa1\xff\xa3\xfb\x74\xa0\xa1\xcf\x3e\xf8\x73\x51\xca\x97\xad\xd4\xf3\x79\x4a\x0f\xea\x98\x77\xe3\x47\xdf\x7d\xbd\x7a\xd7\xad\x3f\x76\x52\x43\x1f\x65\x6b\xba\x30\xdd\x91\x64\x23\x0b\x5e\xed\x64\x5c\x70\x96\xb6\x3e\x50\xb2\x41\xa7\x4b\xaf\xdd\x2e\x7b\xb0\xf2\x50\xb2\x5a\xf3\xaf\xcf\xff\xc8\xdd\xa8\x62\x64\x5e\x02\x3c\xe1\x97\xd4\x48\x8e\xd2\x40\xc0\x63\x10\xdb\x0e\x13\xd8\xa4\x1f\xb3\x71\x60\x03\xd6\x15\x35\xc4\xd0\x14\x85\x80\x8d\xa1\x6a\x9b\x08\xb9\x9c\x24\x11\x94\xa3\x24\xde\x3f\x6a\x3b\xed\xee\x37\x07\xd7\xe3\xdb\xa8\xff\xe5\xb2\xbf\x3b\xc3\xbf\x2e\xf1\xc5\x3d\x73\x41\x2b\x78\xac\xb1\xff\x67\xae\xca\x7d\x37\x64\x7e\xc9\x3b\xf1\x82\x9a\x86\x22\xdb\xd7\x6d\xdd\x77\x24\x91\xf3\x14\x91\x50\x68\x99\x21\x62\x53\xb1\x03\x01\x18\xba\xa4\x2b\xb1\x2c\x69\x26\x6b\x31\x2a\xe2\x30\x69\xfc\x93\xba\x23\xfd\x3d\x83\xf7\x2d\xc8\xd6\x72\xf4\xc7\x83\xb7\xba\x59\x6e\x3c\x5b\xb4\xf7\xd5\x53\x9d\xfb\xb2\xce\xf0\xca\x0f\xd5\x49\xd9\xf0\xa8\x82\xd7\x7a\x27\x19\x0b\x12\x51\x21\xc3\xc8\x0e\x83\x23\x97\x30\x6d\x2d\x46\xa2\xc5\x70\x94\xe2\x73\x01\x4b\x43\xc6\x17\x6c\x9a\xa7\x75\x4a\xb4\xb5\x30\xa2\x6d\xa4\x5a\x38\xc1\xf6\xe2\x88\x19\x37\xdf\x4a\x9b\x30\x7d\xe3\x46\xa6\xe1\x84\xa3\xb7\x17\x7d\x5d\x96\xfa\x42\x16\x16\xbf\xdb\x67\x76\xe5\x85\x6f\x7d\xfa\x5b\xf3\x9c\xc9\x35\x19\xa3\x18\x9a\x9c\x1d\xbb\x4e\x2c\x39\xa1\xae\x43\xdb\x60\x05\x5f\xa2\x3d\x35\x42\x02\x4d\x72\x80\x95\x55\x5d\xf1\xa3\x58\xd6\x5c\xda\x91\x64\x90\x1e\x75\xf3\xef\x5b\xa3\xef\xc9\x87\x56\xec\x0d\x5a\x33\xac\xbc\x32\x04\xbd\xf9\xa4\xd9\x05\xe1\x36\xbf\xbb\x72\x6a\xde\xd5\xdb\x6f\xe5\xee\xef\x3e\x2f\x99\x64\x8c\x93\x19\xd0\xac\x68\x6b\x92\x68\x0b\x80\x35\x64\x93\x0c\xa2\x30\x30\x25\xdb\x89\x55\xd6\x10\x65\x2c\x0a\x38\x52\x43\x46\xe5\x54\xcd\xa6\xdd\x30\xe0\xfd\x17\x07\x95\x69\x9f\x57\x7e\x65\xe7\xa2\xae\x79\x06\x17\x5c\x3b\xc3\xa3\x5e\xef\xf7\xd9\xfa\x32\xaf\xb7\x9d\xf3\xac\xcf\xb4\x3c\x0f\x1b\xfe\xf9\xe1\xdc\x4f\x92\x5c\x84\x78\xd0\x20\x7d\x4a\xf2\x03\x97\x63\x63\x13\xea\x1e\xd6\x25\xd7\x34\x7d\xcf\xd2\x24\x49\x21\x0c\x81\x02\x96\x2e\x05\x88\x86\x01\x54\x59\xc3\x55\xd9\x0c\x6e\x8d\x37\xc4\xb7\xbb\x90\xa3\xab\xf6\x2e\xd7\x6d\x6d\xdf\xa9\x7f\xa8\xe1\xef\x9d\x97\xd4\xdc\xe0\x6c\xe9\xd1\x21\x4b\xbe\x55\x6f\xe5\xdf\x7b\x37\xdd\x77\xa9\xb8\x2c\x28\xd9\xde\xed\x70\xb3\x3e\xfa\x79\x71\xd5\x45\xb5\xcd\x5e\x4f\xce\xb6\x3c\xe2\xac\x6c\xc6\x1c\xef\x9f\xb3\x6f\x95\xd9\xc9\xc5\xe7\xf0\x0e\xf6\x22\xd5\xb1\x55\x5f\xa2\x40\x14\x59\x52\x10\xc7\x1a\xb0\x45\xc3\x50\x81\xc7\xa0\x98\x21\x4c\x9a\x64\x09\x20\x43\x29\x94\x78\x0d\x28\x96\x93\x40\x79\x7b\xda\xab\x9b\xdd\x47\xd5\xfa\x59\x63\x97\x8c\xce\xcd\xb6\x25\x7f\x1e\x97\x6d\x6b\x96\x9f\x4f\x75\xfc\xeb\x66\xf6\x3c\xb9\x16\x6e\x1d\x9c\x64\x9a\x54\x45\x74\x03\x07\x0a\x9c\xe2\x8b\xbe\xe0\x8b\x6a\x44\xe2\x28\x92\xa2\x58\x24\x78\x25\x66\xad\x08\xcb\xa6\x4e\x47\x22\xc7\x00\x00\x6d\x2e\xa2\x69\x9c\x01\x4d\xea\x5f\x4b\x67\x2d\x1c\x3b\x73\xc8\xa3\x92\xdb\x07\x0d\xda\xdd\x65\xf8\x97\x2b\x2b\x1c\xef\xfc\xd6\x40\x94\xfb\x69\xae\x02\x97\xb8\x14\xbf\x7b\x92\x01\xf6\x8e\xa7\xba\x36\x49\x63\x6c\xf1\x26\x80\xd0\x53\x24\x3f\x16\x6c\x47\x52\x78\x3b\xb0\x02\x31\x94\x35\xd9\x51\x05\x5d\xa0\x2c\x8a\x76\x91\xc9\xa0\x0c\x00\x5c\xc6\xc6\xc7\x43\xef\x3a\x83\x0e\x17\x7d\xf7\xcc\xfb\x2e\x63\xd4\xeb\x57\x7b\x41\x87\xd7\x96\x82\xf9\xdf\x9c\x2a\xdc\xf3\xa7\xd9\x8f\x57\x27\x37\xab\x87\x4a\xc4\x7b\x1a\xc5\xd8\xa4\xa9\xca\x0c\x15\x91\x9c\x02\x3c\x27\x84\x3e\x16\x30\xe5\x60\x26\x30\x62\xc7\x21\x4d\x96\xf0\x74\xda\x34\x44\x59\xe6\xf4\xc4\x65\xc5\xc9\xab\x9f\xdc\x96\xc3\xaa\xc5\xde\xdd\x48\xf6\xed\xd9\xf6\xec\x64\xab\x8d\x6b\x5d\x7d\xd2\x4b\xef\xd8\x6d\xd5\xc3\xfd\x83\xeb\x7e\x90\xdc\x34\x19\x86\x12\x0e\x58\xc6\xd3\x7d\x4c\x99\x0a\x88\x64\x4b\xc7\x9c\x60\xaa\x1e\x13\x02\x3e\x16\xff\xf1\x12\xc6\x11\x15\x51\x7e\xc8\xdb\x06\x49\x12\x8e\x9b\x01\x33\xc3\x70\xf3\x9d\xbe\x3d\x36\x57\xf9\xb0\xc4\xcb\xdf\x54\xfc\xec\xb3\x2d\xd5\x0a\x9d\x2e\x70\xd3\xbe\xba\xb3\xde\xf0\x82\xcf\xce\x74\xba\xd1\xa1\x7e\x92\x3b\x16\x0e\xaf\xfa\x9e\x6c\x86\xa2\xa1\x88\xa6\x60\x49\x4c\x1c\x02\xd9\x04\x04\x1d\x06\x9a\x69\x1b\x51\xa8\x33\x16\x6d\x4b\x52\x4c\x73\x88\xc3\x5c\xa8\x25\x58\xf0\x9b\x3f\x64\x48\xb5\x5e\x6f\x8e\x88\x46\x6e\xaa\x97\x25\x47\xa1\xaf\x4b\x3c\x26\x95\x45\xdc\x77\x3b\x97\xaf\x29\x91\xf2\x56\xc1\x6c\x6b\x92\x4c\x73\xc0\x63\x0b\x9a\x9c\xa9\x20\x4e\x33\x38\x31\xc4\x91\xce\xda\x54\xc4\xfa\x21\x8b\x75\x8d\x57\x74\xce\x94\x18\x6c\x09\x88\x0c\x03\xa0\x41\x89\x42\x64\x02\xad\xd1\x2b\xe5\x7b\xdd\x5e\xc7\x77\x9c\x5a\xfd\x6c\xd3\x31\xfd\x0f\xf6\x69\x7e\xa6\xd3\xc3\xb6\x2d\x5b\xe7\xb8\x76\x72\xf7\xcb\x0b\x1b\xdc\x6f\x98\x9a\x5c\x9f\x36\x09\xd6\x0a\x23\x4c\x70\x12\x8e\x00\x64\x39\xcf\xe6\x71\xcc\xaa\xc8\xf2\x75\x9e\x64\x78\x09\x44\x26\xcd\x51\xba\xe9\x46\x24\xe9\x8a\x81\xc8\x22\x98\xb8\xc0\x2a\xff\xc9\xfa\x3b\xf7\xab\xe5\x28\x29\xb5\x61\xba\xb6\x78\x52\xa1\x7b\x96\x4d\x74\xc1\xba\x15\x9b\x0e\x9c\x30\xbe\x78\x6d\xc9\xe8\x9a\x3d\xc9\xab\xc7\x3c\xa1\xc8\xa2\x44\xea\x02\x76\x94\x00\x1a\x18\x70\xa2\x2b\xda\x96\xc3\x69\xb1\x69\xf8\x8e\xae\x04\x01\xc2\xac\xea\x0b\x9a\x0f\x1c\x68\xc4\xae\xf6\x62\xb5\x32\xa1\xa3\xbb\xb1\x45\xb1\xea\x5b\x95\xbf\xf2\xe4\x9f\x7f\xe2\xe2\x1f\x13\x2b\x77\xe9\x33\xf6\xfa\x17\xf9\x46\x74\x7f\xe5\x35\x66\xea\xb0\xcc\xc3\x4f\x12\x8f\x29\x54\x41\x16\x4d\x4a\xd5\x38\x5b\x61\x30\x21\x1a\xbe\x1d\x79\x18\x7b\xba\xcc\x08\xb6\x2d\xf0\x3e\x2d\x69\xbc\x2f\x45\x1a\xa6\x0c\x99\x65\xf4\x10\x26\x10\xd6\x3c\xf1\x74\x40\xfb\xca\xc3\x0e\x4f\xbc\x3e\x65\x45\xf3\xb1\x25\x7e\x29\x3e\x7a\xd8\x8c\x29\x79\x7b\x8c\xeb\xf7\xe6\x7b\x6f\xce\x1d\xfd\x34\x4f\xe6\xb9\x31\x13\xa3\x1b\x14\xd6\xb5\x31\x69\x8b\x5c\x40\x85\xa1\xc5\x31\x21\x70\x34\xd1\xe0\x7d\x20\x6b\x22\xd6\x7c\x2a\xc0\x16\xe2\x19\xc9\xe4\x69\x36\x94\x48\x13\xe2\x0c\xde\x51\x5f\xda\x33\x9e\x8c\x9c\xda\xa2\xd1\x57\x8b\xba\x0f\x5c\x3b\x73\x11\x9e\xf4\xb5\xf2\x51\x8e\xc2\xb7\x7e\xec\xf2\xeb\x87\xf7\xcd\x9e\x33\x93\xab\xbe\xcd\xb9\xc8\x91\x24\x91\xf0\x9d\x58\xf7\x09\x02\x72\xd8\xe1\x45\xac\x52\x1e\x8e\x2c\x5d\x8e\x54\xd3\x62\x80\xae\x60\xde\xa5\xc5\x48\x53\x24\x47\x07\x9a\x98\x38\xe1\x65\x1b\xe8\x7c\x3a\xa9\xd9\xd1\x0b\x8d\xae\xcc\xfc\xe4\xa5\xd1\xed\xba\x2e\xdb\x53\x34\xc7\xd8\xa6\x7f\xb6\x5c\xd7\xb8\x78\xf9\x27\xd6\x37\x97\x92\x4c\xe9\x89\x58\x1f\x11\x34\x2b\xcb\x8a\x1a\xe9\x1a\x87\x65\x5e\x61\x25\x8f\x11\x6d\x8a\x13\xdd\x48\x26\x55\xdd\xf5\x59\xde\x8b\x24\x91\x13\x03\x09\x23\x57\x7a\xd1\xa7\x73\xdd\x19\x25\x4f\xce\x0d\x76\xf6\x28\x5d\x31\x9c\x0e\xde\x59\x30\xab\xf9\xc9\x6a\xb3\x73\xb6\xa9\x31\xa1\x49\x95\xcf\xcf\x0c\x1f\x69\x25\x79\x19\x4a\x91\x44\x3f\x08\x88\x58\xb3\x4c\x5e\x64\xa0\x6c\xc9\x1c\x8e\xa1\xe4\xc4\x58\xe4\x14\x40\x79\x16\x82\x38\x10\x28\xda\x66\x79\x36\x22\x2d\x18\x25\x60\xcf\xb9\x78\x61\x42\xd6\xfb\xd5\xb7\xff\xd0\x69\x7c\xd6\xf8\xca\xfd\x69\xc7\xf5\xc6\x1b\xde\xab\xf3\x65\xff\xcf\xba\x74\x67\xea\xba\x7b\xca\x1c\x48\xf6\xca\x99\x14\x5b\xb2\xe6\x0a\x11\x34\x01\x72\x68\xdb\x56\xb5\x48\x25\xed\x58\xb2\x65\xa4\x63\xca\x95\x23\xc2\x54\x34\x3f\x20\x4d\x3a\xa2\xd9\x90\xfe\x9b\x1e\x74\xba\xe2\xb4\x57\x81\xda\xf7\xda\x1d\xde\xfa\xec\xf8\xe1\x55\x1f\x5c\x1b\x72\xee\x9b\x43\x6d\x1b\x4e\xf8\x74\x65\xdd\xdb\x1f\x0a\x57\xdf\xeb\x6f\x6c\x78\x96\x64\x5e\x6a\x8f\x12\x44\xc4\x42\x39\xb4\x25\xe8\x92\x2a\x8a\x58\xc8\x13\x81\xcd\xab\x90\x31\x55\x27\x08\xa0\xc4\xb3\x1a\x1b\xf1\x36\xc1\x70\xae\x83\x79\x35\x81\xac\x60\xda\x25\xe1\x53\xbf\xce\x29\x58\xdc\x6b\x35\xeb\x81\x48\xf7\xfa\x99\x3b\x52\xd4\x2d\xd9\xab\xf4\xf0\xe3\x35\xcc\x06\x63\xba\x67\x7e\x19\x2b\x31\x4c\x9f\xf1\x23\x89\x51\x30\xed\x42\xca\x33\x31\xa0\x09\x2e\x14\x0c\xd3\x09\x74\x09\x13\x3e\x15\x46\x24\xcd\xfc\x8f\xae\x85\xc2\xcb\x1c\xa7\x23\xf2\x6f\xdb\x05\x83\x73\xfe\x77\xc3\x86\xd4\xc6\x2d\xb2\x8c\x4a\x3f\xea\x4f\xcb\x57\xf0\x83\x2f\x0b\x95\x08\xf7\xf2\x7b\x7a\xe5\xe9\x59\x68\x03\xf9\xb0\x57\xa9\x0f\xfa\xb6\xfa\xf4\x95\xef\xae\xdc\x3c\x51\x96\xcc\x3c\xaf\x68\xe2\xa1\x1b\xab\xea\xd8\xe1\x79\x0a\xea\xff\xc3\x54\xed\x93\xae\x13\x7a\x32\x1b\x73\x3a\x4b\x2b\xaa\xeb\x8a\xb4\xee\x39\x1a\xa6\x58\x84\xfc\x40\xa1\xe8\xf4\x0b\xf2\x7f\x93\x53\x2b\xda\x78\xf3\xd4\xcf\xb6\xcf\xfd\xa5\xfc\xdd\x03\x9f\x9d\xda\xda\x6b\x58\xa9\xc9\xd1\x20\xb2\xc6\x92\x96\xcf\x06\xe4\x5a\x7b\xf6\xf8\xbb\xc9\x2d\xae\x78\x24\x85\x9a\xc2\x52\x50\x22\x7c\x5a\x76\x64\xd7\x12\x2c\x99\x90\x2c\x4a\x23\x09\xc0\x5a\x71\x2c\x05\x81\x4f\x69\x90\xa3\xa0\x28\x5b\xb2\x48\x0b\x30\xf1\xc3\xe1\xe5\x97\x1e\x34\x5d\xfc\x67\x3c\xe8\x8d\xab\x0f\x6b\x8e\x2f\x34\x71\xca\x94\xa3\xb9\x3f\x6d\xb9\x76\xf9\xb8\x79\xdd\xaf\xce\x1c\x53\xf7\xdd\x3d\x49\x86\xbb\x8b\x71\xa0\x1a\x0c\x72\x69\x48\x1b\x28\x40\x80\x82\xc0\xe2\x58\x10\xaa\xc8\x13\x10\x86\xa6\x88\x6c\x5d\x00\x0a\xc1\x8a\x4c\x20\x98\xb2\x12\x83\x0c\xe0\xee\x83\x6b\x55\x28\x33\x3c\xfb\xc3\xba\xc2\x73\xdc\xac\x7a\x9b\x9b\xc2\xb2\xad\x93\x66\x1e\xca\xfb\x6b\x8f\xb3\x7c\x9e\xf8\xd8\xa2\xcc\xaf\x6e\x27\xe6\x98\xf6\xad\x98\xe1\x23\x86\x20\x79\xd9\x71\x5d\x8a\x76\x03\x2b\x70\x49\xc5\x31\x83\xd0\x91\x20\x85\x23\x85\x46\x1c\x2b\x13\x90\xd2\x7d\xde\x35\x2c\xee\xdf\x66\xa7\xe5\xfd\xef\xda\xe0\xa9\x4d\x06\xa4\xda\xf9\x07\xa7\x47\xc7\x8f\x9e\x53\x6a\xd0\xf2\xe6\x39\xd5\xbc\x85\xd3\x9e\xf1\xa9\x15\xb3\x67\x3d\x3e\xa3\xc8\xde\x89\xcf\xf8\xf5\xd3\x67\xa5\xfd\xf2\x20\xf3\x1a\xb3\x09\xff\x25\x25\x81\x58\x54\x5d\xd7\xa7\x63\x15\x4b\x92\x0a\x39\xcf\x94\x39\x42\x96\x69\x3d\x0e\x24\xc1\xa6\x7c\x09\x50\x88\xf2\x08\xce\x54\x5d\x06\x93\x3c\xce\x40\xa2\xef\xfc\x89\x73\xf9\x5b\xb3\x9d\x2a\x58\x33\x96\xb6\x3a\xea\xcc\xa7\x67\x74\xf9\xb2\xe4\x27\xb3\x2e\xcf\x3a\x56\x3d\x77\x8e\x82\xeb\xa6\x95\x4d\x36\x2d\x35\x4d\x92\x01\xc1\xda\x11\xe3\x0b\xb2\x23\x13\x1a\x6f\x29\x82\xaf\x99\x32\xc0\xae\x12\x4b\x26\x46\x96\x45\x28\xb6\x6e\xe9\xa6\x41\xe8\x5e\x04\xa8\xc4\xa3\xac\x2a\x59\x53\x60\x65\x5c\x64\x73\x89\x83\x9b\x5a\xe3\x77\xc8\x97\x4b\x2d\x68\x12\x7f\x57\xcf\xfe\x71\x5e\xaf\xf7\x0a\xac\x2b\x5d\x63\x6b\x72\x13\x8f\x25\xd3\x34\x2d\x13\xff\x28\x67\x08\x0e\xff\xcf\x8a\x56\x80\xa0\xa2\x45\x3e\xc9\x22\xc1\x89\x3c\xd7\x40\xb1\xad\x05\x1e\xf6\x09\x80\x84\x08\xc2\x04\x7c\x11\xe2\x2a\xde\x6a\x3b\x18\xac\xfa\x6d\xd2\x82\x4a\xbf\xee\x8c\x7a\x81\x75\x03\x8a\x3a\x4d\xfe\xa8\x72\x6c\xf6\xcd\x57\xe4\x9b\x67\x33\x0f\xdf\x4c\x68\x32\x07\xb0\x47\x68\x3c\x89\x54\x87\x77\x4c\x5a\x60\x59\x31\x92\x0c\x51\x00\x22\x8d\x1c\x16\x8b\x22\xc1\xda\xba\x18\xca\x8e\xc3\xd2\xae\x1a\x60\x33\xca\x40\xa4\xa0\xdc\xe6\xd7\xee\xfc\xd5\xef\xec\x80\x07\x73\x2b\xe6\xd9\xed\x2e\xea\xae\x7f\xb2\xf6\x56\x77\x6d\xe1\xc1\xda\x9d\x3b\xe4\xdb\x56\xf8\x76\x92\xe1\x20\x96\xed\x12\x3e\xb2\xa9\x80\x70\x29\x44\x98\x16\x01\xe5\x80\x34\x05\x93\x52\x25\x12\xca\xb4\xcd\xea\x24\xb2\x69\x8d\xd0\x1c\x85\x70\x62\xd7\x03\x7a\x06\x12\x3a\x5b\x76\x77\xfd\x23\x5f\xd6\x2d\xd7\x9a\x76\x3e\xd1\xe0\xcc\xe3\xf3\x13\x2f\x0e\xda\xff\xe6\xae\x3f\xe1\x9e\xd6\x35\x6e\x34\xfa\xf1\xa2\x94\x79\x2e\xe6\xc4\xcf\x7e\xec\x2a\x9a\x6f\x1b\x76\x60\x71\x4a\xe0\x6b\x24\xc0\x92\xa8\xc9\x8e\x1b\x19\x3c\x6b\xaa\x82\x4f\x19\x1e\xcd\xd3\x9c\x23\x33\x92\x4f\x09\x48\x70\x32\x58\x56\x79\xb6\x13\x8b\x7b\x06\xdc\xbb\x77\x27\xcb\x07\x3b\x0f\xdc\x7f\xbb\x6b\xeb\x8f\x5a\xb1\x95\x86\xca\xe5\x8e\xf6\x55\xf6\xde\xa9\x7a\x33\xf3\x55\x43\xc2\xfa\x4c\xb1\x00\xa6\x79\x53\x51\x28\x8f\x53\x1d\x1e\x86\x34\x42\x3c\x47\xd9\x88\x16\x62\xd6\x26\x0c\x5e\x55\x5d\xdf\x93\x5d\x82\x75\x02\xd7\x67\x3d\xe2\x6f\x5d\xb8\x74\x66\xd7\xf8\xe2\x97\x8b\xf5\xbb\x1c\xd9\xc9\xae\x05\xeb\x8e\x2f\x38\x32\xba\x7f\xa3\x7d\x0f\x0f\xbf\xb2\xeb\xe6\xe1\xfe\x52\xd6\xf1\x7b\x2f\xf6\x4d\x6e\xb1\x13\x43\x57\xd3\x54\x87\x91\x34\xa4\x5a\x4c\xa8\x9b\x8e\x26\x07\x6c\x24\x99\x3e\x23\x9a\x42\x84\x7c\x4e\xc4\xd0\x22\x4d\x97\x92\x91\x41\x39\x91\x06\x32\x10\xfa\xac\x51\xff\xf6\xd8\x19\x4d\xfa\xa6\x6c\x9e\x57\xea\xaf\xfa\x8f\x5a\x14\x68\xf8\xcb\xb6\x03\x8f\xbb\x35\x9e\x50\x2b\x98\xbb\xc1\xef\x55\x2b\xf3\x65\x65\xc2\xe7\x3f\x1d\xd8\x40\x32\x94\x50\x83\xae\x41\x44\xd8\xa2\x28\xd1\xa6\xed\x90\x01\x91\x6d\x7b\x04\xb2\x44\x2e\xb6\x18\x83\xb2\xcd\x98\x90\x30\x8c\x9d\x08\xeb\x2f\x20\xaa\xff\xd3\x20\x30\xb5\x49\xae\x3c\xfd\xb3\xa6\x47\x54\x7f\xbd\xf4\xe4\x97\x4f\xea\x9d\xa0\x0f\xaf\x5e\xf8\x4e\x8b\xad\x39\x53\x8d\xdf\xef\xb4\x4e\x1d\xdd\x3c\x45\xeb\x38\xe7\xec\xe9\x1f\xca\x97\x49\x6e\x28\xc4\x5e\x2c\x10\xb2\x4e\xaa\xa6\x8f\x19\x84\x29\xd5\x36\x1c\x41\xc5\x9e\xc4\x22\x31\xc2\x40\xc2\x81\x66\x21\xce\xf2\x25\x89\x17\x75\x59\xf6\xbc\x8c\xf6\xb6\x80\x92\xe3\x97\xd7\x9e\x5c\xcb\xb3\xe4\x95\x63\xe7\xee\x57\xaa\xdf\x63\xc5\xd0\x75\x83\x52\x9f\x4d\xaf\xf8\x6e\xb7\x6f\x4b\x5e\xa0\x6a\x9d\x4b\xae\xd9\x30\xd6\x42\x13\x05\x22\xe2\x25\x97\x97\x4d\xc3\xf4\xbd\xc8\x22\x60\x68\x69\x9c\x44\x90\xaa\x22\xd2\xb6\x29\xb2\x94\x47\x90\x1a\x21\xfa\x14\x19\x12\x30\xb1\xd9\x93\xf3\x7d\x70\x9f\x1a\x76\xb6\x75\xae\x4f\xee\x7e\x71\xf9\x83\xeb\x8d\xdb\x35\xae\x55\x3b\xc7\x94\x42\xd7\xaf\x1e\x24\x6f\x16\xbe\xac\x65\xbe\x8f\x9e\x18\xd4\xe5\xf9\x66\x1c\x01\xe8\xca\x94\x19\x88\xc8\x94\x78\x1d\xc4\x04\x34\x1d\x4b\x33\x44\xc0\x09\x18\x45\xac\x10\xf8\x18\x41\x5e\x8a\x7c\x2e\x54\x9c\x0c\x44\xb0\x6e\x3e\xad\xbb\xa1\xdb\xcf\x3b\xb7\x7e\x23\x9e\x7f\xef\xc4\xfc\xd7\x9e\xd5\x5e\xb5\x6c\xd2\xb0\xab\x6d\x8e\xf9\xfd\x2b\xbd\x86\x1f\x1f\x95\x93\xcc\xbb\x1b\x0b\x30\x8c\x28\x27\xd6\x75\x14\xd3\x9e\x1b\xeb\x5c\x44\xf1\x2e\x65\xd2\x2a\xeb\x07\x92\xc5\xa0\x28\xb0\x48\x89\x10\x8d\xc0\x17\x03\x2f\xe2\x1c\x3e\x03\x27\xf9\xf4\x29\xb5\x66\x61\xc1\x59\x5b\xdf\x19\xd8\xa4\xd5\xf3\x6c\xa7\xc8\xd9\xb3\x4e\x37\xfc\xb8\xf1\xc0\xb5\xbb\x7f\xa8\x7b\xec\xc7\xdb\x99\xe7\x8d\x4a\x18\xc1\xa4\x62\x89\x5c\xa4\xc7\x8a\x46\x20\xd2\xb6\x99\x10\xd3\xd0\x76\x69\x4f\xd2\xfd\x58\x21\x65\x82\x8d\x62\x85\x77\xa3\xff\xc7\xda\x5b\x78\x5b\x55\x75\xef\xe3\x17\x04\xbc\x94\xa4\x41\x77\x23\xb1\x93\xee\x94\xee\x92\x58\xbb\x63\xed\x5e\x3b\xd6\x06\x04\x2e\x88\x02\xd2\x8d\xb4\x80\x82\xa4\x84\x94\x34\xd2\x20\x02\x92\xa2\x20\x29\x21\xad\x48\xfd\xc6\x67\x7c\xe2\x7d\x79\x39\x0c\x7f\xe3\x7e\xcf\x7f\x30\xcf\x3e\xb3\xd6\x9c\xcf\x7c\x1e\x82\x60\x48\x24\x61\x9e\x23\x54\x27\xe5\x3f\xe5\x9f\xff\x69\x5d\x9c\xd6\xe4\x8d\x94\x37\xfe\x03\x51\x5d\x31\xf3\xf6\xd1\x7d\x61\x9e\x17\xd3\xda\xba\x45\x4f\xa5\x74\x3a\xfb\xfd\x97\x33\x8c\xc3\xd9\xba\x8e\xbe\xd9\x74\xde\x92\xea\xbd\x4a\xfc\x98\xdc\x1a\xac\x02\x93\x10\x22\x4e\xe5\x44\x5f\xe2\x6d\xcb\x77\x14\x9e\xb2\x63\x47\x15\x68\xc7\x8c\x2c\x96\x26\xec\x28\x8a\xcc\x58\x14\x84\xc8\x15\x45\xc8\x9a\xae\x94\xd8\xa7\x4e\xe6\xac\xb0\x3b\xd5\x6f\x3a\x6b\x67\xd0\xb4\x78\x69\x91\xaa\xb7\xa9\x08\xff\x35\x7f\x7b\x5e\x67\xb6\x4c\xfd\xef\xb2\xcf\x98\x59\x3e\xb9\x11\x1c\x10\x31\xa3\x46\x9c\x12\xda\xba\xc5\x39\xb6\x8d\x3c\xc8\x30\xae\xa4\x06\xba\x81\x22\x53\x08\x43\x3a\x74\x01\xe2\x01\x13\xd2\x90\xb7\x35\xd2\xd4\xfc\xc4\x3e\xc5\x1d\x5d\xab\x16\x8e\xf1\xd1\x0e\x57\xc6\xbf\x33\xa2\x40\xea\xe1\x19\x7d\xee\x8f\xce\xbd\xd1\xf2\xef\x3e\xde\x7f\xe3\x5c\x81\xf2\xc9\xc5\xaf\x73\x62\x8c\xb1\x0e\x58\x33\xf6\x5d\x9b\x87\x82\x4e\x87\x82\x10\x2b\x41\x20\x39\x4c\xa4\x6a\xaa\x11\x90\xa2\x27\xb2\x91\x43\x68\x36\x4b\xd8\xb2\x2c\x61\x94\xb8\x06\x77\x6d\x3f\xf9\x83\xcc\xb3\x9f\x74\xbe\xfc\x4e\xa3\xda\xa7\x07\x0e\x1e\x36\xf1\xc6\xa7\x55\xb2\x14\xfd\xad\x55\xbb\xb1\xf1\xb8\xe3\x23\xdf\xee\x93\xe4\xad\xbb\xc5\x4a\x11\x1d\xb0\x2e\xeb\x32\x9a\xc0\xf8\x00\x11\xbc\x64\x41\x51\xe4\xa4\x48\x8c\x54\xcf\x53\x44\x3f\x32\xb1\x44\x69\x62\x60\x70\x1a\x64\xdc\x7f\x31\xc2\xff\xef\xc0\xe1\x9f\xb0\x10\x69\x8d\x4b\x37\x18\xfc\x72\x24\x4c\x38\xd3\xe0\xd4\xa8\x0b\xa7\xa5\xf2\x29\x8b\x47\x57\x2f\xd0\x71\x73\xf5\xc6\x8d\xaf\x17\xac\x3a\xa9\xd4\xa4\x21\xf0\x43\x71\x65\xfd\xf4\x03\xab\x12\xb3\x97\x98\x30\x54\x29\x3b\xd2\x38\x3a\xd2\x6d\x92\x06\x92\x66\xc8\x2e\x45\x60\x91\x86\x92\xc5\x3b\xa6\x6f\x92\x0a\xb4\x44\x6c\x60\xd3\xd3\x1d\x68\xc6\x4e\xe2\xff\xe6\xe4\x7c\x7e\x7f\x6d\xa6\x52\xb6\x6e\x0d\x85\xba\xdb\xb2\x1d\x7e\x42\x10\xdf\x8d\xad\xc5\xa7\xed\x3e\x17\xbe\xbf\x78\x54\xa9\x15\x5f\x24\xf9\x3a\x97\x60\x58\x11\x10\x80\xd0\xc8\x18\x85\x64\xcc\x06\x82\x02\x0d\x2a\xb4\x62\x31\xd2\x75\x11\x90\x86\xed\xab\x1c\x12\x81\x4e\x01\xd1\x0d\x42\x0b\xbd\x66\xe0\x70\xea\xf7\xe9\xcf\x27\x95\xbe\x77\x64\xcb\xe0\xa8\xfe\xc6\x9f\x27\xcc\x9c\x5b\xea\xf0\x84\x77\x9b\xb7\x5c\x39\xbd\x71\xb5\x0c\x17\xc6\x4d\xe9\x92\xe4\xde\xdf\x0f\x0d\xc6\xd1\x29\x53\x37\xb0\xed\x22\xd1\xd1\x05\x88\x20\x22\x49\x53\x14\xfc\x28\x44\x2c\x6f\x60\x47\x35\x2c\xda\xc3\x1c\x2d\x7a\x04\xe3\x2a\x89\xcd\x5e\xb0\x62\xe8\xd2\xfd\xb3\x7f\x69\x78\xa6\x54\xa6\x14\xf8\x64\x95\xf5\xce\xc7\x4d\x36\x0c\xe9\xb6\x4a\xc8\x52\x73\xd6\xef\x4a\xe6\xda\x49\x3e\x40\xb1\x69\x81\x54\x0d\x25\x8c\x45\x06\x7b\x0e\xeb\x4a\xb4\x80\x82\x38\x72\x75\x9f\x36\x38\x2b\xf4\x5c\x81\xb7\x5d\x48\x43\xe0\x39\x88\xf4\x19\x0b\x40\xeb\x95\xa2\xf0\x4f\x9b\xfa\xb4\x26\xe5\x53\x1a\xe4\x7e\x39\x14\x46\xd5\xae\x3d\xee\xdb\xbf\x4e\x36\x19\x36\x2e\xdf\xf5\x7e\xdd\x77\x97\xfa\xe2\xcd\x94\x9f\x9f\x1a\x45\x07\xba\xf3\x2e\x3e\xfd\xe0\xeb\x26\xc9\x25\xf2\xe3\xc4\x40\x65\x2d\x83\x00\x32\xe2\x79\x84\x64\xe0\xca\x72\xe0\x4a\x7a\x64\x04\x42\x08\x00\xe6\x48\x4f\xd6\x48\xdf\xb0\x2c\x91\x02\x0a\x8a\x91\x02\x70\xe2\x3f\x67\x5f\xb9\xa3\x55\x2f\xaf\x19\x78\xef\xa3\x06\xe5\x0e\x5c\x5a\xe2\xb8\xdd\xef\x9e\x6d\x35\xa3\x4b\xd1\x45\xf3\x2b\x65\x9f\xb9\xe0\x9b\xba\xe9\x2f\x0a\x09\xb3\x2b\xe4\x74\x99\x01\x8c\xac\x99\xbc\x68\xa2\x90\xe2\x4c\x57\x25\x23\x24\xeb\x34\xa1\xf8\xa4\xe8\x0b\x14\x21\x8b\x01\x0f\x48\x5a\xe4\x5d\x28\xfb\xe2\xeb\x68\x93\x7e\x24\xd0\x94\x85\xef\xa0\xe1\xd5\x3f\x7f\xb7\x49\xbb\x9e\xbf\x1e\xd8\xb1\x60\x6a\x87\x2f\x2f\xed\x18\xf3\xb4\xe0\x46\x76\xe4\xa6\xd9\x49\x86\xad\x04\x36\x62\x2d\x4f\xb0\x64\x64\xc8\x80\x33\x2c\x23\xb4\x7c\xa4\x58\xc8\x87\x24\x2b\xe9\xb4\x0a\xf9\x20\x0a\x42\x59\x15\x10\x96\x15\x17\x04\xc2\xbf\x89\xe4\xbc\x64\xf6\xc2\x94\xde\x63\x16\xe0\xcf\xda\x7c\xdf\xe5\xf1\x73\xc3\x1e\xff\xfd\xc0\x0f\xe7\x6e\xdc\x5e\xa6\xb1\xfa\x56\xc3\x8d\x7e\xea\xdb\x39\xb2\x27\x37\x14\xa0\xef\xca\x8c\x63\x48\x80\x64\x54\x53\xf2\x29\x00\x2c\xda\xa5\x30\xa9\x04\x0a\xf2\x2d\x5e\xd5\x58\xc9\x66\x24\x97\x91\x44\x9f\x10\x28\x07\xbb\xfa\xbf\x8a\xc2\x8b\x96\xff\x73\x91\x38\xf2\xce\xe7\x60\x68\xb1\xec\x79\xbf\x92\x7e\x68\xb6\x78\xf5\x5c\xae\x7e\xdb\x62\xe2\x47\xa5\x1a\x3c\x99\xfe\xd5\x9c\x23\xf5\x40\x83\xb4\x26\x2f\x5e\xbc\x78\x31\xad\xf8\xcb\x50\x97\x46\x3b\x4b\x9d\x79\x91\xbb\x50\x46\xe3\xc8\xa8\x53\xa3\x32\x3e\x1f\xfc\xfe\x99\x22\xdf\xd0\x7d\x47\x1f\xd8\xbb\x2b\xf7\x9d\xe3\x5e\xcd\x4b\x2f\xad\x9a\x2a\xfd\x90\x56\xf1\x8f\x2c\x4b\x7e\x29\x5b\xb6\x3e\x71\x7a\xee\xc3\x02\xd9\xd8\xd6\xb5\x6e\x5f\xfd\xfb\xac\x51\xe5\xe9\x5d\x7b\xe0\xaf\xe9\xd7\x4e\x49\xbc\x21\x83\x94\xc2\x18\x86\x22\x03\xd3\x50\x45\x4d\x92\x1c\xd5\x80\x21\x66\x43\x89\x70\xcc\x38\x34\x59\xd1\x12\x2c\x2a\x16\x34\x8f\x8f\x2d\xe8\xb8\x06\x97\x60\xd5\xf4\xed\xdd\x49\xf5\x2e\x9d\x4e\x9d\x5e\x5a\x7a\xf1\x5e\xd6\xab\x7d\x36\xe4\xfc\xfe\xd2\xd2\xcc\xd3\xee\xad\x02\x2d\x0a\xdc\xcc\xbc\xb3\x4a\x72\xd5\xb0\x00\xe5\xb2\x1a\xaf\xb3\x1c\x69\x10\x92\x1d\x52\xb1\xca\x91\x14\x13\x5a\x64\xc0\x29\xb6\x82\xc4\x00\xb8\xb6\xe3\x51\x91\x17\x79\x8c\x87\x22\x82\x0f\x39\xfa\xd5\x05\xc8\x8d\x61\x5f\x3f\xfa\x23\xaf\x98\x52\xa1\x65\xf9\x1d\x63\x2a\xac\xec\xb5\x66\xed\xc0\x82\x05\x66\x04\x63\x06\x9f\x5a\x58\x82\xda\xf8\x28\xfd\xae\x97\xf0\x45\x01\x84\xc0\xf4\xc2\x58\x22\x02\x14\xb3\x7e\xec\xc5\x02\xd0\x94\x48\x44\x48\xe4\x03\x87\x00\xd8\x54\xc2\xc0\xa2\x43\xc1\x15\x58\x5a\xe0\x24\x2c\xc0\xd7\xdc\x68\x56\xac\xfe\xae\x0b\xe4\xd1\x94\xfd\xfe\x56\xd4\xbe\xcb\x98\x91\xa9\x65\x57\x96\x2d\x71\x6a\xca\xd1\xb4\x2a\xa5\x32\x75\x3c\xf8\xee\x80\x24\x07\xba\x67\xe8\xac\x4f\x53\xba\x6a\x61\x8f\xd4\x1c\x9f\x50\x14\x91\xf3\xdd\x08\x32\x91\xe8\xa8\x46\xec\x85\xbe\xa5\x5b\xba\x27\x73\x98\x8e\x60\x14\x42\x35\xf1\x40\xb4\x4e\x41\x7f\xdb\xf9\xf7\x1a\xe5\x2e\xbf\xe4\x48\x96\xec\x83\xe6\xb5\x9c\xb5\xbe\xc0\x96\xbd\x79\xcf\x49\xa5\x17\x6d\x9f\xb4\xa4\xe9\xb5\x8f\x92\x0c\xc6\x76\xf5\x58\xe2\x08\x3f\xa2\x5d\x97\x64\x7c\xde\x0b\x11\xd6\x0d\x59\x08\x0c\x10\xb0\xa4\x1b\x02\x49\x89\x2d\x84\x45\x0e\x1a\x82\xed\x92\x9a\xea\xd0\xaf\xfa\xf4\xa3\x29\x79\x16\x76\xaa\x73\xaa\xc0\xcd\x7e\x55\xbe\xa9\x78\x24\xdf\xe9\x0a\x53\xcb\x16\x9d\x4e\x55\x7c\xf4\xf7\x92\x17\x19\xd4\xb4\xcf\x92\xab\xda\xca\x99\x2e\xe4\xa2\x90\x0a\x6d\x4c\xb9\x90\xa5\x50\x6c\xfb\x3e\xc6\x9e\x19\x45\x4e\x80\x65\x83\x25\x24\xcd\xe4\xc3\x00\xe9\x92\x1e\xd0\x12\xc7\x88\x2f\xf3\x6f\xfd\x2b\x7b\x7c\x72\xad\x4c\xd6\xa0\x7d\x8e\x4b\x4c\x99\xfa\x6b\x5a\x94\xaf\xf4\x43\xeb\xae\xd4\xc7\xd9\xde\x35\x53\xa6\xf4\x39\xbf\x2a\x2d\xf7\xc0\x24\xd7\x5d\xcb\xc5\x34\x1f\x85\x0e\x23\xf3\x10\x18\xae\x63\x2b\x6a\x1c\x48\x0c\xa3\xc9\x52\xe0\x59\xba\x8a\x69\xac\x6a\x81\xef\x92\x12\xe4\x5c\x17\x4b\xe0\xdf\xee\xe3\xfe\xcf\xe4\x8b\x17\x3e\x3e\x59\x2a\xf5\xd9\xae\x5d\x3f\x97\xdb\x9b\xb6\x79\xf0\xc0\xed\x6f\xfb\xa3\x99\xa3\xbb\xae\xfe\x70\xee\xf3\x73\x37\xe6\x0c\x3d\x9d\xdc\x84\xc7\x44\x84\x47\x44\x0c\xef\x86\x06\xc9\xea\x38\x90\x2c\x51\x53\x01\x4f\x59\x16\x10\x42\x21\x92\x69\x21\x36\x09\x4c\x6a\x3c\x81\x44\x52\x87\xa4\xee\xb1\xaf\x3a\xc7\x9f\x83\x3a\x7c\xdd\xb9\x00\x53\xe5\xf6\xda\x3b\x96\x7e\x63\x4d\xd1\x2c\x7f\x7d\xd3\xf2\x4f\x54\xe7\xc1\xcc\xb4\x91\x15\x88\x9a\xef\xde\x48\x32\x48\x8e\x71\x2c\x9e\x13\x24\xc5\x09\x08\x2a\xc0\x31\x2d\x87\xae\x85\xb0\xa4\xab\x9e\x4d\x52\xaa\xa5\xd3\x50\x33\x64\x81\x74\x34\x93\x26\xb9\x80\x90\x5e\x37\x8f\x78\x23\x73\xb9\x11\x03\xfe\x64\xba\x0d\xba\xbc\xab\xe1\xef\xe7\x96\x3d\xff\x62\xd0\xc5\xbd\xd9\x9b\x96\x39\x76\x20\x28\xcf\x8f\xf5\x66\x5f\x48\x32\x7b\x01\x05\x75\xda\x25\xa0\xee\x92\x16\x16\x63\x9a\x52\x6d\x5d\x0f\xec\x88\x96\x6c\x5a\x08\x22\x5a\x24\x09\xa0\x40\x2e\xe6\x1c\x99\x02\x80\x52\x15\x1c\x24\xde\xaf\xef\x78\xcb\x1a\xa7\x2e\xf8\x24\x52\x0e\x12\x0d\x52\x0b\x4f\x52\xf6\x75\xfa\xad\x52\x99\xd1\x17\xeb\x85\xd5\x46\xcc\x3f\x53\xa1\x66\xfa\xe5\x8b\x12\x26\xbd\x28\xa4\x4d\x05\xfb\x2a\x10\x34\x81\x87\x9c\x04\x28\xda\x96\xa4\xd0\x34\x44\xd3\x44\x36\x6b\x08\x1c\xa1\xe8\xc8\xf0\x1c\xd7\x54\xe2\x38\xb2\xe8\x44\xc2\x74\xbf\x8e\xea\xb4\x7f\xc2\xe5\x8a\x7b\xdb\xe4\xfa\x60\xc1\x07\x13\x36\x95\xde\x74\xdb\x4e\xc9\x30\x29\x57\xc5\x13\xe3\x9f\xfc\xd9\xe4\xfd\x5a\x49\xa6\x29\xe6\x44\x00\x68\x5d\xf2\x49\xc3\x35\x42\x99\x08\x28\xd2\x16\x64\xc6\xb7\x44\xde\x20\x45\x86\xd1\x63\xde\x76\x1d\x99\xe4\x3c\x9e\xe4\x15\x87\x72\x68\xc0\x26\x86\x3f\xe7\xdd\xbd\xa4\xdc\x1e\x30\x32\xe8\xd5\xa9\xdb\x24\x9b\x63\x3b\x0e\xe8\x36\xfe\xa3\x69\x64\xf1\x3d\x6e\x8f\x66\xef\x5f\xae\x9a\x96\x7e\xf1\xe4\x84\xa1\x28\x46\xae\x42\x8a\x26\x0c\x6d\x47\xd5\x22\x04\x38\x56\x93\xd4\x00\xaa\xbe\x63\x52\x36\xc3\xbb\x8c\x44\x42\xc1\x75\xb0\xcd\x02\xce\xc0\x82\x47\x10\x09\x80\xe6\x55\xe6\x65\xcc\x34\xb6\xc4\xfd\x5f\x07\x1e\xed\x5e\x54\x9d\x64\x96\xbf\xd1\xe9\x39\xca\xd9\xf9\x4b\xeb\xe2\x06\x7f\x61\x85\xf7\x70\xa3\xe4\x3a\x87\x6e\xba\x80\x26\x6d\x9d\x31\x78\x80\x79\x1b\x78\x5c\xe0\x4b\x28\x30\x23\x41\x51\x74\x6c\xc8\xd8\xb3\x22\x4a\x06\x48\x10\x45\x18\x01\x4f\xb5\xc0\xbf\xeb\xe9\xfd\x5b\x9e\xce\x33\x67\xfd\xe1\x1c\x2b\x07\xce\xc7\x5f\xb4\x3e\x31\x09\xe4\x38\xd0\xbb\x5f\x89\x62\x45\xa7\xb7\x5b\x9c\xe5\x37\x79\xb1\xf7\xd7\x94\xa5\x49\xc6\xab\x02\xc5\x04\x0a\xa2\x23\x86\x51\x01\xc2\x52\x4c\x32\x58\xf6\x62\x29\xe6\x74\xc1\x50\x7c\x06\x9b\xaa\x86\x5c\x83\x24\x2d\x83\x26\x69\x6c\xea\x7a\xf0\x2a\x1c\x71\xf1\xda\x36\x13\x1a\xff\x61\x8c\xfa\xb2\xca\x85\xe3\xd7\x8b\xdf\xaf\xd6\x75\xfa\xdb\x45\x37\x36\xfa\x71\xc8\x27\x52\x3c\xae\xfe\xed\x2b\x83\x93\xeb\xd3\x92\x67\xb9\x4e\xac\x41\x0b\x92\x18\x20\xd5\xb5\x54\x5e\x8b\xb0\x44\xd1\xb2\xad\xf8\x36\x34\x0d\x14\xca\x8c\xea\x09\x86\xa8\x6b\x8a\xe4\x28\x52\x22\x6d\x8e\xb3\xfb\x46\xce\xb5\x33\x35\xfe\x62\x41\x8e\x7e\xbd\x4e\x15\x6e\xbc\xb6\x48\x0d\xf3\x4a\xcf\x89\xa3\x0e\x74\xcf\x37\x20\x5f\xce\x12\xa3\xd3\xdf\x2e\x25\x26\x7b\x90\x34\x55\x10\x31\x4d\xbb\xaa\x8c\x6d\x47\xd2\x23\xd3\xd0\x3d\xd7\x8b\x09\x4d\x03\x22\x2f\xf8\xd0\xb7\x20\x49\x11\x96\x64\xf8\x9a\xc9\x9b\x31\xf7\x1a\x99\xb9\x9a\xdf\x65\x6b\x8a\x77\x97\xea\x02\x84\x6e\x99\xe9\x89\xd5\x2f\x1e\xde\x86\xbe\x40\x73\x4e\x97\xec\x3d\xa2\xc8\xdc\x32\x9d\x2e\x0c\x4f\xae\x4f\xd3\x58\x24\x4c\x2f\x16\x08\x5d\x77\xb0\x67\x05\x9c\x0a\x25\x5b\x8f\x2d\x4b\x56\x14\x9a\xa4\x49\x52\xa7\x89\xc8\x33\xa1\x19\xf1\x96\xc8\x40\x25\xc0\x5c\xe2\x2e\x4f\x94\xba\x65\xf8\x99\xca\x5a\xb0\xd7\x7a\xbb\x61\xea\xe1\x11\xab\xf2\x8d\x5b\x35\x6a\x70\xcf\x61\x83\x33\x76\xf1\x3a\x44\xee\x99\x2f\x93\xdb\x7b\xd0\xa4\xa3\x0b\xb6\xe2\x2a\x9e\xa9\x88\x0c\xc9\xe8\x1c\x25\xf1\x8a\x04\x04\x51\xa5\x7c\x40\x03\x35\x66\xe5\x88\xb2\x5d\xd5\xd7\x11\xe5\xf9\x38\x04\x09\xd4\x38\x17\x7f\xd1\x30\x4b\xdd\xdc\x57\xc5\x69\xe7\x6e\x31\xf6\xdc\xcf\x2f\xdf\x19\x9c\xf1\x78\x83\x2f\x52\xf7\xec\x3e\x56\x5f\xef\xbc\x2e\x25\xfd\xb7\xb2\x89\x59\xf0\xf9\xd0\x12\x24\x48\x44\x8a\xc7\xf9\x9a\x0f\xad\xc8\xb4\x74\x89\xb5\x29\xc9\x0a\x64\x59\xa2\x15\xd6\x22\x14\x5b\x0f\x43\xce\x95\x03\x2f\x14\x7d\xe4\x26\xae\x88\x5d\x76\xb7\x98\x35\xea\x76\xae\xac\xfc\xc1\x53\x25\x4b\x2f\x8e\xbb\x6c\x7e\xba\xa7\x72\xe3\x5e\x77\xe7\xde\xb8\x78\xef\xb4\xf2\x31\x97\xe4\x89\x9d\x2e\xc6\xa1\xae\x78\x3c\x20\xa8\x58\x97\x2c\x56\xf5\x69\x93\xe0\x04\x16\x50\x48\x74\xe4\x48\x33\x22\x4e\x53\x29\xc7\x74\x83\x28\xa0\xb0\x2a\x6b\x4e\x02\xc4\xd9\xf6\xb6\xf5\xde\x2b\x5e\x63\xc9\x87\xf5\x98\xf2\x75\x5a\x8b\x3f\x55\xeb\xdb\xb5\xff\xa0\x9f\xb3\x50\xf6\xa2\x37\xf4\x4d\x53\xb3\x5a\xc9\x15\x24\x02\xc0\xf7\x04\xc3\xb7\x20\xc1\x73\x10\x10\xb1\x64\x89\xac\x41\xf3\x96\x15\xd8\x61\x20\xf3\x1c\x65\xfa\x86\xe8\x86\x26\x70\x59\x15\xb0\x86\xc6\x78\x58\x4b\xdc\x32\x3d\x5e\x7a\x67\x61\xb1\x49\xcf\xcf\xed\x7f\x78\xfe\xe3\xd1\xb0\x49\x93\x96\x46\xf5\x31\x0d\x36\x1f\x3a\x70\xee\xe9\xf0\x60\xf1\xba\x36\xc9\xc5\x60\x73\x96\x26\x11\x82\xaf\x49\xb6\xe6\x9a\x8e\xe4\x8a\x8c\xe4\x33\xb6\x0b\x7d\x32\xf6\x68\xdd\xa6\xb1\x1c\x89\x28\x46\x9e\x1d\x99\xa1\x2c\x79\x54\xfc\x3f\xa4\x38\x09\xe8\x62\x7e\x58\x44\x16\xd8\x92\xab\xb2\x5e\x62\xe1\xe4\x81\x86\x7d\xa1\xf5\xec\x22\xa3\x9b\x4e\x6c\xfc\xc6\x81\x56\x6f\x8f\xbb\x64\xe6\x4c\xff\x65\x72\x62\x8e\xf8\x90\x17\x35\x01\xc8\x88\x74\xad\x58\x72\x7c\x35\x94\x43\xc1\x57\x48\x57\x33\x70\x40\x45\x91\x67\xab\x6e\x28\xa8\x84\x61\x79\x21\xcf\xb8\x3a\x8b\xa5\xc4\x55\xb1\xe6\xfa\xdb\x63\xfa\x1d\x78\xe3\x83\x99\xcb\xb7\x9e\xdd\x78\xbd\xef\xc6\xac\xfb\x26\x99\x0b\x0f\x76\x6c\x5c\x35\x57\xbf\x63\xe7\xd2\xa6\x97\x4e\xf2\x53\x00\x11\x9a\x6a\x1a\x88\x21\x38\xdd\x8f\x1d\x2c\x68\x58\xe7\x1c\xd6\x17\x49\x4e\x93\x7c\x11\x39\xbe\xaf\x04\x92\xcc\x29\x76\x24\x3a\x2c\x44\x11\x52\x5f\x2d\x31\x7b\xc7\xdf\xbe\x58\xed\x6c\x93\x0f\xe7\xfa\x9f\xf6\xed\xbe\xab\xf6\x47\xbd\xab\x3d\x2e\xda\xad\xd3\xa6\x79\xa7\xd7\xf5\xaf\xb7\xb8\xe3\x81\xf4\x6f\xe9\x13\x56\x45\x22\x86\x9a\x83\x25\x3d\x22\x3d\x04\x15\x8d\xd1\xc8\x10\x50\x96\xea\x48\xbc\xab\xb1\x5a\xec\x71\x32\x34\x05\xcf\x84\xc8\x71\x80\xc2\x89\x7e\x94\x48\x54\xfe\x97\x31\xdf\xd6\x61\x3b\xcb\x97\xb0\x5f\xdb\x2d\x56\xb3\x45\xde\x55\x6f\xcd\xab\x55\x67\xed\xda\x05\x67\x37\x1a\xd4\xae\x65\xf3\x83\xe4\x56\x45\x59\x65\x60\xc0\x05\xa4\x62\x92\x01\x83\x11\x0d\x59\x9f\x63\x4d\xdf\x31\x6c\x35\x82\xbe\x63\x91\xa4\xc4\xd1\x8e\xc0\x73\xc8\x32\x0d\x44\x38\xd0\xc5\x89\xef\x0a\xaa\x36\xfa\x9d\xdb\x02\xac\x61\xa5\xd2\x1a\x76\x6f\x79\xa0\x93\xdb\xfe\xdb\xf7\x7b\x85\xec\x67\xdd\xeb\xbe\xb9\x72\xa7\x3a\xe4\xcd\x24\x0b\x6d\x19\x5e\xe4\x22\xc8\x07\x32\x49\xb9\x80\x16\x18\xa4\x1a\xba\x4b\x8a\x8e\xce\xf8\xbe\xc3\x85\x54\x14\x5b\x96\x21\x53\x9a\x6e\xea\x18\xa9\xaa\x4c\xaa\xe0\xd5\x96\x69\xd4\xba\xa5\x9d\x5b\x54\x58\x54\x63\xf2\xbd\x1b\x83\x8f\x5e\x9c\xf4\x47\x5f\xb2\xe1\xa4\xf7\xd7\x65\x2b\xff\x51\xf1\x76\xdb\xee\x75\x1b\x91\xfe\xd5\x68\x62\x2e\x5d\x16\x78\x26\x90\x44\x9f\x63\x24\x49\xf6\x69\xd2\x0f\xf9\xd8\x74\x69\x13\x69\x9a\x46\xc8\x2c\x4f\x32\x9a\x6a\x01\x91\xf4\x4d\x8f\x33\x63\x4f\x48\x74\x0a\xb1\xf6\x37\x3b\xc7\xcd\x7c\xdf\x75\x3a\x1b\x5f\x18\x32\xf3\x61\x9f\x9a\x47\x4f\x3a\x05\x88\xe2\x42\xbf\x07\x69\x93\x5f\x3c\x5c\xb9\xcf\x4e\xee\x57\xa6\xa1\x87\x4d\x19\x88\x8e\x4f\xe9\x82\x40\x32\xae\xce\x48\x82\xaf\x04\x71\xc4\x13\x8e\xcd\x00\xc8\x2a\xc8\xf3\x0d\xc5\xe6\x02\x55\x74\x18\x59\xe4\x99\xc4\x15\x31\x4b\xb5\xe0\x63\xf3\xfc\xa7\x35\x72\x17\xab\x3b\xe2\xea\x58\x26\xcf\xc7\x59\x1b\x6d\x1b\x3f\xad\xcc\x8c\x1f\x8f\x5c\x7a\xb8\xf9\xef\xdf\xc6\x25\x37\xe1\xc9\xa4\x69\xf8\xa4\x26\x6b\x11\x85\x48\x2a\x56\x3d\x9b\x67\x59\x9d\x20\x63\x9d\x8e\x45\x93\xd1\x68\x99\x12\xc4\xd8\x77\x08\xc1\x37\x39\x4a\xb0\x58\x27\x01\xda\x7d\x66\xc3\xf6\x23\x9b\xed\x6f\xd5\x6d\x52\x27\xaf\xdd\x8c\x39\x9b\xce\xad\x81\x6f\xad\x7b\x3c\xbd\xeb\xed\x2e\x9d\x6b\x5c\x5e\x9a\x6d\x48\x72\x4f\x64\xb9\xd8\x14\x25\x21\xe0\x38\x8e\x03\xa4\x48\xa0\x50\xa3\x81\x1b\x8b\x24\x4f\xd1\x58\x26\xa2\xc8\x71\x31\x11\xbb\x1a\xa3\x38\x8a\xe5\x03\xcd\x00\x5a\xcc\x26\xae\x88\x32\xd6\x0e\x4c\xd9\xe7\xce\xe9\xbc\x3e\xa5\x63\xb1\x52\xa5\xb2\xde\x39\xb4\xec\xfd\x83\x19\xc5\x42\xfd\xba\x5f\x98\xba\xa4\xcb\x93\x1c\xc9\x1e\x8c\x05\x1e\x2d\x92\x12\x8e\x63\xdd\x88\x35\x89\xd3\x49\x5d\x27\x68\x5d\x26\x41\x84\x75\x4b\xa0\x59\x51\x71\x31\xa4\x2c\x06\xf9\x72\x10\xe9\xf6\xcb\xfc\xd0\xff\xca\x1e\xd5\x4f\xb7\xc4\xc5\x4a\xae\x1a\xd7\xae\x16\xda\x9f\xeb\xd0\x05\xe5\x82\xf2\x63\x7c\xb1\xe9\x85\xee\x7f\x37\x9f\x5c\x78\xfd\xa6\x25\x7f\x25\xb7\x65\x72\x28\x09\xf3\x91\x13\xb9\x64\x10\xc1\xd0\xe5\x82\x50\x76\x5d\x83\xa5\x10\xc7\x28\x52\x84\x58\x37\x26\x39\x5f\x15\x4c\x06\xd1\x22\xd2\x05\x97\xd4\x13\x0c\xc6\x5a\xd2\xdb\xae\xb2\xef\xcd\xd9\xdd\x23\xe7\xc9\x35\x9f\x15\x6a\xae\xd4\x7b\xbe\x70\x56\xe1\xc2\x4a\x93\x26\xf7\x5a\xf4\x74\x66\x2d\x79\x96\xe4\x07\x97\xac\xd3\x9c\x1f\x89\xbe\xc8\xb2\x9e\xef\x31\xba\xc0\x69\x8a\xe6\xbb\xb1\xec\xc9\x2c\x4d\x91\x11\x81\x25\x9e\x09\x44\x15\x29\x42\x68\x10\x1a\xfc\x6f\x55\x89\x97\xb3\x47\x87\xbc\xc3\xc7\x2f\x1b\x72\xb9\x8e\xd0\xd5\x98\x97\xaf\xd7\x93\x80\xee\x73\x69\xcc\x57\x5b\xff\x1c\xf3\x70\xe4\x98\x21\xfb\x06\x3d\x28\x99\xdc\x30\x24\x18\x52\x93\x49\x4f\x26\x10\x65\x78\x2e\x70\x91\x45\x9b\xb6\xad\x7a\x9e\xe7\x62\x97\xe7\x3c\xa8\xe8\x4c\xa8\x88\x36\x8a\x22\x8f\x14\x05\x5b\x70\xcd\xc4\x2f\x97\xbc\x53\x76\x6e\xb4\x32\x65\x8a\x5f\xcc\x5a\xdb\x78\xdf\xa8\xa9\x69\xc7\x7f\x8a\xf7\x34\x29\x51\xf5\x93\x94\xfa\x95\x76\x0f\xea\x37\xbc\x5d\x72\xfb\x8e\x50\x30\x02\x2c\x46\x9c\x45\x84\x86\xa6\xdb\x9e\x16\x46\x24\x1b\xc6\xa6\x4d\x8a\x04\xe1\xb2\x9a\x28\x86\x96\x40\x60\x68\x0b\xb4\x64\x05\xbc\x6e\x02\xf2\xd5\x2f\xdd\x26\xf3\xfd\x4d\xad\xff\xf8\x69\xc3\xc0\x1b\x7d\xf6\x7c\x34\x7a\xb5\xb2\x7f\xc2\xa2\x1f\xde\x8a\x9e\x6f\x2d\x5f\xfd\xd1\xde\x99\xb5\x97\xf7\x4b\xf2\x48\x5d\xf5\x55\xac\x1a\xb2\x49\x28\xae\x24\xe0\x40\xd6\xf4\xc8\xc2\x82\xa9\x9b\x8a\x68\x59\x7e\x14\xdb\x3c\x8d\x7c\x6c\x07\x6e\xa4\xca\xb2\x2f\x7a\xfa\x6b\x70\x73\xd5\x86\x6c\x90\xb7\x7d\xd8\xa6\xde\x95\x8c\x25\x42\x75\x7b\xa7\x1e\x97\xe6\x14\x26\xce\xff\xf4\x71\xa3\x52\xb5\x6e\x0e\x60\x16\x17\x4a\x2e\x10\x1d\xd8\xae\xa6\x18\xb2\x4c\x9a\x32\x45\x38\x04\x42\x31\xe6\x38\x0a\xf0\x3c\x27\x8b\x08\x1b\x9c\x27\x13\x40\x57\x03\xc2\x0c\x04\x4d\x09\x25\x43\xa0\x39\xef\x35\xdc\x33\xbb\x4d\xae\xf2\xb4\x82\x17\x7a\xb6\xf8\xbb\xd5\x8b\xda\x8f\xd8\x7b\x45\xcf\x5e\x5d\xf3\x53\xe6\x45\xd3\xab\x2d\x68\x18\x69\x2d\x5a\x9d\x7e\xc9\x9d\xde\x9c\xfa\xfe\xb5\x5e\x0f\xc6\xe6\x7c\x6b\xd1\x98\x75\x27\xcb\xdd\x2c\xf7\xd7\xc3\xf3\x4d\x1f\x7d\xf2\x49\xa1\x9e\xdf\xf4\x24\x9b\xac\xad\x9f\xe4\x39\xab\xec\xf1\x51\xe8\x43\x03\x70\xae\x1b\xf8\x46\x84\x18\x05\x38\xbe\xc0\xb1\x8a\xa5\xca\x06\xe9\x8b\xaa\xcf\x30\x11\x49\xe8\x08\xc8\x7a\xe4\x50\x26\x67\xbe\xda\xa9\x2c\xfa\x7d\xc0\x4d\x23\xdb\x30\x6a\x65\xfe\x2f\x46\x6d\xae\xcb\x9e\xed\x3d\xf2\xe7\x75\xd5\x7e\xaf\xc4\x64\xc9\xd6\x3d\xfb\xd3\xc7\x5f\x0a\x49\x9e\x94\xa8\x96\x6c\xca\x1e\x25\x52\x91\xe0\x20\x15\x31\x24\x26\xa0\xaf\x87\x8c\x1d\x8a\xbe\xce\x52\x91\xeb\x04\x5e\x1c\xd0\x7a\xe0\x78\x06\x6b\x3b\x10\x53\x89\x7b\x42\xdf\xbd\x72\xff\xbb\x7b\x43\x1f\x4f\xf8\x2e\xd3\xd6\x62\x99\x1f\x74\xab\x3c\xff\xea\xa6\xb5\x25\x9f\xcb\xfb\xaf\xf6\x68\xb6\x61\x5f\x9b\xf4\x2f\xbe\x13\x23\xed\x11\x1b\x84\x04\x13\x20\x12\xab\x1e\xcd\x69\x31\xab\x4b\xa2\x6f\x10\x0c\x12\x79\x42\xb4\x58\x4f\xd2\x5c\x10\xfa\xa4\x21\xb0\x08\x00\x5d\xc1\xaa\xf3\x6a\xe0\x8e\xcc\xd8\xb6\xc8\xc4\x2b\xe3\x56\xe7\x2a\x58\xff\xc7\x9a\x5f\xb7\x5c\xdd\xa6\x7c\xe6\xd5\xdb\x1b\x6c\x2e\x75\xa9\xeb\xc1\xd3\x79\xc7\xf6\xc6\xc9\x35\x99\x96\x7d\xc8\xc3\x80\xc1\x04\xaf\x21\xa4\x59\x8a\x2f\x23\xc1\x0f\x31\xaf\xb1\xa6\xa5\x51\xba\x00\x63\x47\xc6\x2c\xb0\x2d\x8a\xe6\x15\x55\xb0\x3d\xf1\x55\x93\x17\xce\x2f\x8a\x36\xe7\x6d\x4d\x36\x2c\x3c\xb4\xd9\xa6\x5a\x6d\x57\xee\xf9\xc0\xec\x5c\x74\xff\x80\x54\xfd\xd3\x0d\xeb\x7a\xcd\x2d\x3d\x2a\xc9\xe3\x06\x02\xeb\x2c\x6b\x46\x32\x11\xd2\x00\x9a\xa2\x0e\x6c\x2e\x16\xb0\xef\xd8\x18\x06\x3e\xa7\x9b\x24\x83\x05\x18\x71\x80\x61\x23\x59\x97\xe2\x80\x53\x12\x67\xf5\x2a\xf9\x3e\xd8\xc4\xfb\xfb\xb2\x07\x7b\x3b\xcd\x99\x56\xbd\x55\x17\x6e\x18\xf7\x5e\x91\xad\xf5\x96\x2f\xea\x1f\x4f\x59\x9a\xb9\x9b\x94\xdc\x56\x16\xdb\x9e\xa9\xf9\x50\x74\x55\xc8\x29\x00\xcb\x46\xa8\x13\x3c\x2b\x86\x3a\x1b\xba\x51\x20\x07\x11\x2d\x5a\x86\x4a\x04\x0a\xad\x0a\x28\x14\x3d\x2a\x4e\x40\x1a\xb1\x7d\x65\xd1\xd2\xcd\x6f\xb4\x9d\xf8\xeb\xba\xd9\x5f\x55\xe0\xfa\xd5\x88\x9e\xb6\x13\xeb\xdd\xfd\x6c\xc4\xae\x6a\x64\xb1\x0a\xe6\xbd\x28\xb9\x59\x9d\x24\xb0\xce\x93\xb6\x8a\x38\xe8\xc4\x1c\x4d\x29\x2a\x92\x29\x48\x12\x11\x23\x69\x2a\x24\x7d\x4e\x71\x38\xc8\xc8\x8c\x63\x8a\xa6\xac\xf1\xa6\xe2\x44\xaf\xa1\x19\x3a\x57\xe2\x6a\xd9\x23\xf7\x16\xdc\xca\xbd\x79\x4a\xa5\xa6\x0b\xab\xfd\x32\x37\x73\xb5\x56\x75\x1e\x4c\xf1\xeb\x6e\x2a\x30\x66\xfa\xcd\xad\x45\x5e\xaa\x01\x03\x6b\x14\x2d\xd1\xec\x49\x3c\xf5\xcd\x1a\x7b\x7f\x2b\x76\xb7\x51\x8e\x17\x3d\xcb\x76\xa8\xf2\x61\xfd\xb4\x2f\x3f\x4d\x69\x53\x7a\xd8\x9b\xc9\x65\x0f\x00\x91\x86\x4c\x87\xe0\x15\xa8\x8a\x34\xc1\xd0\x8a\xa6\x23\x2c\x78\x1a\xa1\xd9\x06\x6d\xb3\x86\xc6\x2a\xa4\xaa\x22\xd1\x94\x68\x15\xf1\x31\x13\x50\xfa\x6b\x04\xec\x3e\x7f\xb0\xa1\x67\x17\x6d\x59\xeb\x9f\xef\x2c\xaf\x52\xa0\xf7\xce\xec\x33\x1f\xf6\xac\x57\x7b\xfd\xb6\xbf\x1f\x75\x0b\x46\xe5\xce\xb0\xe1\x45\x92\x99\xab\x58\x53\x42\x82\x1a\xf1\x21\xe7\xb1\x84\x83\x55\x5d\x90\x6d\xd6\xa5\x34\xdf\x8a\x23\x36\x08\x4d\xcd\xf5\x1d\xd5\x08\x58\x4f\x91\x28\x4a\xa7\x29\x5d\x4b\x3c\x0a\x12\x0e\x9f\x9c\x7f\xba\x40\xc5\x27\xf5\x8a\x7c\xf3\x51\xbf\xf6\x0b\xbf\xf3\x86\x3d\x72\x72\xfc\x7c\xa6\x4a\xc7\xe6\xa9\x25\x0f\x68\x9b\xd3\xff\x6c\x4e\x98\x6f\x6c\x44\x5a\x04\xe6\x19\x1a\xc8\x6c\xec\x6a\x8a\xcb\x29\xa1\xe9\xd9\xba\x48\xcb\x98\x77\x18\xdb\xd4\x7d\x43\xe4\x78\xc6\xe6\x19\x2c\x31\x2e\x8c\x62\xed\x35\x2e\x15\x55\xad\x79\x61\xcb\xf9\x0b\xc3\x0b\x3c\x6d\x59\xeb\xfc\xe9\x85\xc7\x0a\xbe\x3b\x65\xd0\xcf\xb9\x9a\x7c\x57\xef\xf7\x4e\xb7\xda\x07\x79\xff\x78\xe9\x47\xf6\xdb\xdf\xa7\x4b\xcd\xcc\x1b\xab\xb5\xc8\x53\x5f\xa8\xb5\xfa\x72\x8e\x4e\xa7\x97\xed\xab\x36\xe5\x69\x46\x62\xf4\x3b\xeb\x47\x4e\x58\x95\xfe\xb7\x54\x62\x0c\x32\x0f\xb5\x58\x0a\x00\x63\x11\x5a\x88\x8c\x80\x20\x3d\x9e\xd1\x4c\x8e\x0e\x35\x2a\x00\x82\x23\x79\x02\x61\x70\x62\xe8\xdb\x9a\x07\x29\xde\x27\x31\x4a\xec\x52\x5f\xdf\x5a\x59\x74\xfc\x20\x6b\xc9\x94\x1e\x2d\x4e\x94\x5b\x50\x5b\xdb\xd1\x3c\x43\x9d\x93\xa0\x9a\xc4\x1c\xcf\xfd\x41\xe5\xb3\xed\x0e\x24\x99\xd6\x86\x30\x45\xe4\x92\x4a\x64\x0a\x1e\x10\x38\x8a\x50\xd8\xc0\xa7\x54\xcc\x01\xc4\x1a\x02\xaf\xc6\x82\x69\x69\x58\x32\x43\xc0\x73\x98\x92\x55\xcb\x81\xaf\x60\x01\xff\x09\xca\x94\xd6\xe4\xd3\x06\xc5\xff\x03\x20\xde\xd0\xf9\xa2\xd0\xdf\x42\x93\x46\x5f\xdc\x9e\x5b\x64\xf5\x81\xd6\x37\x86\x9d\xe9\x7d\xe8\x93\x37\x7a\xff\xb8\x79\x4d\xd5\xc7\x4d\x3b\x5e\x4e\x3f\x8d\x7b\x62\x51\x77\x96\xe5\x63\x0d\x58\xb2\x23\xf8\xbc\xab\x7b\x48\x71\x02\xc3\xc5\x36\x4b\xf9\x34\x65\x86\x02\xa3\x6a\xb6\xc7\x6a\xb2\x68\x62\x43\x64\x28\x53\x17\x5e\x33\xfa\x4d\x3d\x75\x27\xa5\xfc\xfb\xc3\xc0\xad\xd9\xc7\x7a\x7c\x38\x5f\x3d\xbd\x79\xfd\xb3\x67\xe5\x72\x0d\x9f\xaa\x7c\xb4\x58\xde\x3f\x76\x77\x72\x45\x7d\x81\x17\x51\x8a\x2f\x5a\x98\x0d\x22\xde\x80\x96\x47\xd1\x4c\x08\x08\x24\xbb\xc8\x34\xb0\x19\x89\x50\xa6\x0d\x9b\xe5\x79\x3b\x76\x69\x4b\x77\x6d\x20\xbc\x06\x0b\xf8\xe4\x2d\xaf\xf8\x0f\x47\x53\x51\x85\x82\x6d\xbb\x1f\xce\xdf\xe1\xd7\xfe\xc2\xf6\x5a\xad\x7f\xf9\xb4\x7f\xf1\xa6\x4d\xbb\x0e\x29\x3c\x20\xc9\xf8\x31\xc0\x44\x94\xad\x99\xae\x8b\x7c\x4b\xa3\x04\xe4\x99\x1a\x1f\xe9\x84\x67\x99\x84\xa3\xb8\x84\x41\xc5\x91\x2d\x29\x2a\x27\x6a\x0a\x83\x49\x1b\x44\x3a\x4a\xfc\xb5\x4f\x57\xb2\xeb\x6f\x1b\x77\xa5\xa1\x9b\x75\x1a\x3a\xf7\x57\xf9\x29\x5f\xe7\x24\x8a\x0e\x1d\xb3\x76\xe5\x4f\x0d\x8f\xd3\x73\x9f\x4f\x4b\xf2\xf9\xb0\x26\x9b\x22\x0b\x34\xa0\xcb\x90\x07\x8e\x4a\x98\x92\x4f\x51\x20\xf6\x18\x82\xf0\x55\x1a\x20\x9b\x91\x6d\x26\x0c\xa3\x50\x53\x28\x91\xf0\x75\x81\xfb\xd7\x92\x7f\xeb\x9b\xff\xff\x9e\x04\x69\x8d\x33\xee\xf8\x0f\xf9\x88\xd4\xbc\xbf\x4f\xdb\x9a\xb2\x25\x77\x99\x31\x8f\xe7\x77\x9f\xd0\xc8\x5b\xbe\xd6\xea\x35\x74\xbb\xda\xee\xe0\x78\xf5\xce\xc7\x6f\xf4\x4c\xf2\x69\x37\xe6\x59\x56\x86\x0c\x8d\xd5\x90\xf3\x14\x87\xc7\xae\x04\x54\xca\xd3\x2d\x11\x09\x51\x08\x58\x92\xe5\x20\xe5\x20\x43\xa5\x25\xc3\xf6\x68\xc2\x7a\x99\xbd\xfa\xdf\xb8\x7b\x37\x32\x17\xdb\x0c\xfe\x6a\x79\xa5\xb7\xab\xbe\xd5\x62\xd3\xb1\x76\x53\x48\xf3\xd6\xa7\x63\xbd\xab\xed\x2f\x74\xc9\xfd\x64\xe1\xdf\xc9\x55\x9a\x07\x86\xcd\x29\x12\x96\xb8\x90\x70\x65\x32\x56\x65\x5b\x72\x39\x8b\xe7\x2d\x59\x8e\x80\x4c\x98\x71\xac\x53\xb1\x62\xe8\x24\xa3\xc8\x9a\x6b\x6a\x51\xa4\xbd\xe6\x90\x7e\xc6\xc1\x85\xa7\x5a\x6d\xe2\xc6\xa6\xb6\x5a\xf3\xe6\xc7\xdd\x5b\xd5\xcf\x93\x9a\x63\x6d\xa3\x47\xc1\x8c\x75\xb3\x1a\xed\xa8\x30\xed\xcf\xf4\x07\x70\xc2\xbc\xc3\x4a\x44\x20\x50\x92\xe2\xf1\x9a\x44\x2a\xac\xe5\x4a\x61\x80\xc8\x40\xf6\xb0\x46\x87\xae\x1e\x72\x86\xad\xda\xbc\x26\xb2\x0e\x36\x79\x47\x82\x20\x16\x13\x9b\x5d\xb2\x75\xb3\x9a\xf7\xae\x67\xcd\xf7\xed\xe4\xaa\xbd\xdf\x2a\x7e\x72\x7e\xf3\x33\xd5\x9e\xd1\x07\xef\x8e\x9e\x7d\xe5\x9b\xde\xbb\x6c\xe1\x61\x92\xa9\x26\x59\x88\x38\x13\x42\xce\x21\x68\x10\x58\xac\x68\x52\x0e\xb2\x00\xa5\x60\xd7\x27\x1d\x35\x62\x6c\xc8\xa9\xae\xca\x06\xb6\x48\x58\x8a\xed\x45\x5a\x9c\xd8\xec\xf9\xbf\xdf\x3f\xa9\xac\x6d\xfe\xd6\xc0\x9a\x99\x6e\xbc\x93\xe7\xf6\xc9\xc7\x0d\xfc\xfe\x52\xbd\xb6\x4b\xb3\xd9\x61\x47\xe2\xc8\xed\xf4\xf3\xd0\x25\x96\x8f\x10\x23\x68\xda\x66\x1c\x06\xaa\xce\x22\x1c\xd0\x14\xc9\x05\xac\x10\xc5\x02\xb0\x65\x10\x05\x81\xc4\x87\x8a\x1a\xd1\xca\x7f\x3d\x18\x6c\x99\xd1\xb8\x7f\x7d\xed\xff\x95\x8f\xf8\xa7\xa6\x35\xad\x49\xfb\x94\xe2\x19\x5e\xae\x65\x7f\x15\x9c\x1b\x5e\xfb\x11\x1f\x28\xfd\x71\x44\x33\x6b\x6a\x15\x9d\xd0\xf7\xcd\x43\xb9\xaa\x55\xcc\x54\x7b\x6c\xd5\x03\xc3\xe7\x36\x59\x97\xdc\x5f\x89\x14\x87\xb7\x4d\x9e\x46\xb6\xcf\xd9\xb2\x19\x02\x06\xe9\x9a\x13\xf2\x5c\xac\xcb\x02\xed\x04\x06\x6f\x10\xba\x6f\xc8\xae\x11\x0a\x58\xf2\x55\x82\xa7\x13\x03\x7b\x72\xc4\x07\xe3\xeb\xef\x14\x6d\x4f\x3e\xdd\xb2\xba\xb9\xf3\x01\xd7\x83\x7c\xd0\xad\xd6\xe3\xcc\xc3\xb3\x7a\x0d\x72\x37\x79\x98\x9a\xfe\xa1\x6d\xe2\xf3\x9b\xd8\x89\x90\x2f\x05\x84\x0a\x43\x2d\x10\x65\x05\xb1\x91\x20\x30\xa2\xcc\xd2\x51\xac\xc5\xd8\xf5\x15\x43\x03\xbe\x22\xbb\x14\xa4\x80\xe8\x9b\x31\x9d\xe0\x29\x34\xa1\xd2\xfb\x23\xf3\x6e\xfe\xe3\xde\x55\xfb\xce\x7b\x69\x7f\x5d\x6b\x33\xaf\xfe\xd1\x36\xdf\x3c\x9b\xb8\xb2\x89\x97\x75\x52\x8d\x33\x5d\x93\xcc\xaa\x12\xc5\xa4\x2a\xc7\x94\xa4\xb2\x9e\x4c\x90\xa6\x69\x30\x50\x87\x9c\x8f\x29\x95\xa6\x39\x5a\xe5\x43\x02\x84\x02\x1b\x31\x21\x13\x21\xcf\x0a\x48\xfe\x35\x94\x05\x60\x59\xf9\x92\xc6\xb8\xd9\xd3\x1f\x95\x3b\xf5\x07\x0e\x8e\xfe\x5c\xb4\x7a\xa7\x95\x4d\xab\x94\x5c\xb9\xeb\x6c\xbe\x6c\xe7\x3b\xed\x7f\x90\x64\x72\x65\x2e\xa6\x42\xc5\xa7\x79\x9d\xa4\x34\x96\x41\x38\x32\xc3\x38\x70\x19\x47\x73\x42\xd9\xe7\xb8\x10\x85\xb6\x40\xaa\x86\xfe\x5f\xf9\x1f\xf2\x11\x88\x5f\x93\xe2\x6b\xf5\x9b\x3f\xe1\xf0\xac\xcf\x1e\xd4\x59\x74\xb0\xef\xcd\x4e\xfc\xd4\xe9\x57\xba\x75\x1b\xb8\x6a\x47\xc1\x1a\x19\xbb\xcd\x84\x3d\xd6\x6c\x4e\x32\x69\x97\x44\x45\x91\x21\x08\x9e\x4d\x9b\x24\x85\x6d\x2d\xb4\x45\x4d\x42\xac\xc4\x02\x85\xb4\x35\x43\x8e\xd8\x08\xa8\x82\xae\x89\x34\x07\x4d\x57\x50\x78\xe1\x95\xe8\xfd\xa7\xf7\x41\x5a\x93\x4c\x29\xf3\xfe\xa3\x13\x5d\xfb\xee\x5f\xbd\xf2\x1d\x39\x52\xf1\xcc\xc3\x15\xa7\x6e\xf5\x6d\xd9\x74\xd7\xea\x69\x6d\x53\x9b\xb7\x7f\x50\xab\x4c\xcd\x3a\xf2\x05\x36\xb9\x4f\x38\x2e\x76\x68\xc3\xb7\x61\x1c\x59\xba\x4f\xba\x8e\x13\xc9\x32\x13\x9b\x44\x44\x28\x2a\x81\x35\x9b\x8e\x42\x59\x13\x10\xad\x29\x7e\x60\x33\x34\x43\x6b\x1e\x95\x78\xb9\xf5\x63\x9b\xef\xbf\x59\xd4\x69\xca\xe5\x70\xdd\xb2\xef\xc4\xee\x03\xab\x55\xce\x7f\xfc\xab\xa3\x45\x1f\x52\x5d\xee\xec\xcb\x3a\xaf\xe9\xfe\xf4\xab\xa8\x24\x2e\x64\x48\x73\x08\x47\x15\x04\x91\x33\x04\xda\xd7\x20\x4d\x31\x9e\x80\x74\x3b\x96\xb4\x18\xf9\x21\x65\x92\x44\xc4\xb3\x8e\xe0\x2b\x26\x12\x7d\x53\x57\x13\x20\xaf\x1e\x77\xcf\x32\x6b\xc7\x6f\xf1\x80\xcb\x07\x06\x77\x9b\xde\xef\x6f\x7d\xc5\x88\x1f\xbe\x98\x5b\xb5\xc1\x77\x2b\x0e\x7d\xf0\xd1\xca\x43\x74\x92\xc3\x80\x33\x21\x0b\x05\x85\x0d\x74\x85\xa7\x28\xc7\xc0\xa6\x89\x90\xe4\x20\xc6\xd5\x09\xce\x0a\x5d\xc2\x31\x04\xcb\x88\x15\xc1\xc5\x4c\xa4\x85\x1a\xc3\x07\x89\xc3\xe0\xcf\x8f\xcb\x6e\xbe\x63\xe7\xbc\xf6\x75\xf9\x78\x4a\x2d\xf4\xeb\xb6\xe7\x3f\xe6\x9c\xd9\xaa\xca\x82\xd5\x3f\x52\xb7\x53\x2a\xf6\x3c\x97\xe4\xf1\x34\x4d\x41\x49\x74\xa4\xd0\xc2\x14\x26\x58\xdf\xb5\x15\x9b\x35\xdd\xd0\x82\x80\x25\x19\x91\x25\x04\x8e\xf3\x3d\x37\xf0\x2c\x8d\xd5\x84\x48\x15\x6c\xed\x35\x32\x3b\x1b\x2a\x3c\x7a\x2b\x12\x5a\x5c\xaf\x57\xab\xea\x88\x37\x1e\x67\xc8\xd4\xea\xe2\x5f\x63\x1f\xbc\xb3\x7d\x46\xe5\x3b\x1f\x5e\x7a\x36\xee\xff\x01\x37\x91\xd0\xaf\x35\x44\x1a\x2c\x47\x5b\xb1\x6a\x9a\xb1\xc7\x40\x8d\x25\x2c\x27\x16\x75\xd6\x0b\x64\xca\x10\x03\x45\xfa\xaf\x9c\xc3\xf1\x88\x64\x81\xa7\xdb\xd0\xe6\xe4\xff\xf3\xeb\x61\xcd\xfe\xe7\x78\xaf\x5d\xf7\x7d\xfa\x89\x4b\x75\xfa\xae\xd9\x9d\xaf\xed\x29\x7c\xf6\xbb\x71\xeb\x6f\x55\x58\x00\x97\xee\x9e\xd0\x62\xd6\xa1\x25\xa3\x8f\xa7\x35\xb9\xf1\xe2\xc5\x1f\xd3\x8a\xbc\x34\xed\x2d\x70\xe9\x07\xb2\xc7\x84\x01\x5b\x86\xd6\x2a\xb1\xbc\xc7\x5c\xf7\xc9\xc3\x4f\x36\x1d\x98\x50\xfb\xfb\x4f\xee\xcd\x3b\xdc\xba\xff\xdd\x47\xa9\x49\x66\x44\x88\x00\x11\xd8\x8e\x18\xd0\x3a\x1d\x48\xbc\x69\x42\xe0\x04\xa6\x8b\x6c\x23\x14\x14\x9a\xb5\x7c\x9e\xa0\x6d\x56\x0f\x09\x0e\x69\x08\x06\x8c\xa3\x27\xe0\x70\x6c\x77\x73\x8f\x35\xd0\x1c\x5d\x7a\xde\xce\x39\x93\x2f\x2f\xdb\x32\x30\xd7\x81\xfa\xb9\xdf\xfb\xa1\x67\x8b\x0c\xd5\xf2\xb7\x5f\x70\xe8\x5a\xcf\x24\xf3\x04\xb0\xb4\x42\xdb\x92\x6c\x8b\x38\x80\x02\x12\x21\x4d\x9b\xb2\xcf\xa8\x16\xad\xf3\x81\xa3\x73\x8a\x08\x43\x36\x90\xb1\xa3\xcb\x14\xed\xa9\xb1\xa9\x9a\xaf\x86\x6e\xf8\xfd\xb8\x33\xb7\x56\xad\x5d\x53\xbb\xf0\x79\xcc\x4b\x19\x46\x5e\x9f\x92\x73\x6c\xa5\x6d\x4b\xba\x6f\xdd\x53\xb9\x4f\x6a\x9b\xbf\xd2\x0f\x4d\x4d\x68\xb2\xe4\xc9\x98\x15\x4d\x00\x19\xc2\xf1\x54\x26\x0c\x18\x5e\x89\x24\xdf\xa7\x90\xc5\xcb\xaa\xaf\xf9\xa2\x16\x5b\x96\xa3\x91\x42\x68\xf8\x92\x1d\x38\xff\xb6\x76\x7c\x19\x34\xd9\xa1\xef\xd4\x15\x46\x46\x7f\x55\x3d\xac\x66\x3e\x36\xb3\x6b\xb5\xdc\xc7\x16\x77\xe9\x37\x36\x43\xdb\x41\x34\xdc\xf1\x2c\xeb\xa2\xe4\x3a\x07\x01\x35\xc0\x4a\x61\xc0\x32\x82\xc8\xea\xa1\x2f\x60\xd6\x01\xa4\x4e\x79\x92\xca\x6a\x14\x6f\x73\xba\xcf\x88\xa2\xeb\xa8\x22\x2f\xda\x04\xa1\x90\x1a\x9d\x38\xb7\x0b\x4f\xd2\x0e\x95\x98\x94\xa7\x73\xbb\x27\x6b\xe0\x9e\xaf\x77\xaf\xff\xa9\xea\x75\xf8\x4e\x87\x3e\xc1\x3b\x9d\xd8\xd9\xe4\xc5\x29\xf3\x92\x9b\x71\x62\x11\x71\x10\xd1\x2e\xd0\x25\xce\xa0\x45\xc9\xe1\x02\xc0\xc6\x5e\x4c\xfa\x2a\xa6\x75\xa8\xb1\x81\x1d\xb9\x00\x7b\xa1\xc5\x4a\x58\xb2\x15\x59\x00\xaf\xee\xa5\xe7\x7f\xcc\x4c\x5d\xb9\xe2\xe6\xae\x03\xd5\xa6\x9e\x0f\xa5\x01\x6f\x7c\x7a\x6d\xed\xd9\x2b\xeb\xfe\x84\xf7\x16\xa5\xd0\x0f\x0a\xf6\xba\x9f\xdc\x72\x64\x07\x94\xcc\x19\x0e\x0b\xcd\x50\x26\x09\x0b\x28\x2c\x8a\x90\x11\xda\x0a\x63\x7b\x24\x67\xdb\x86\x4d\x20\xce\xe7\x45\x87\xe5\x08\xdd\x26\x42\x55\x7d\x0d\x57\x90\x53\xb2\x4c\xbd\x33\x0b\xaa\xe4\x28\x47\xd8\xcf\x97\x97\xb8\xd5\x5f\xfd\xed\x6c\x93\x9a\xde\x77\xd5\x2f\x5e\xae\x55\x74\xf8\x02\x29\xfd\xac\x4c\x09\xbf\xb4\x65\x90\x0a\x8c\x03\x2d\xf4\xd4\x40\xd4\x3d\xe8\x63\xd9\x60\x2d\x49\xc1\xba\x6f\x61\x2d\x22\x18\x41\x0b\x38\xca\x50\x35\x45\x8c\x00\x62\x43\x4f\x78\xcd\x8c\xb0\xc5\x2f\x5d\xaf\xe5\x39\x54\xb7\x6a\xf8\xfd\x82\x96\x8f\x0e\x2d\xcd\xb7\x2a\xa7\xd3\xf1\x58\xc9\x65\xe8\xc6\xca\x0e\x1d\x4d\xfd\xb7\xe4\xce\x08\x81\xe1\x49\x92\x24\x45\xaa\xc1\xfa\x8e\xe5\xa9\x48\x00\x24\x16\xb1\x24\x4a\xaa\xe0\x63\xca\x8d\x6d\x9d\x24\x3c\x25\xe0\x31\x4f\x93\x8a\xc4\x21\xf9\xa5\xa3\xf2\x7f\x9f\xdf\xa6\x6d\xda\xea\xf5\x2c\xb7\x62\x2c\xfb\x74\x47\xc3\x6b\xb3\xc7\x56\x2e\x4a\xfa\x9d\x0b\x8d\x2c\xbb\x6e\xdd\xa5\x5f\xeb\xe5\x6f\xb6\x7d\xd3\x4b\x3f\xd2\x9b\xfe\xeb\xd6\x51\xbd\x27\xb4\x4c\x5d\x58\x23\x6d\xdc\xba\xcf\x6f\xde\x1f\xb6\xaa\xa5\x7a\xb0\xc5\x92\xb1\xc5\x67\x2d\xee\x49\xdd\x4b\x3f\x59\x65\xc2\x9c\x23\xf8\x4a\xc0\x1a\xa1\xab\xda\x88\xa1\x22\x21\x14\xbd\x48\xa7\x2c\x13\xc2\x58\xd4\xd4\xc8\x96\x91\x68\x79\xac\xae\x58\x81\xe9\x44\x26\xd6\x63\x83\xe3\x13\xbb\x54\xa3\x72\x33\xce\xe4\x2f\x53\xed\x52\xdd\x2c\x87\x53\xce\xbc\x51\xfb\xe2\xb9\x6b\x9f\xcd\x1d\xff\xe9\xb1\x0b\x19\x71\x5d\x76\xd6\xf8\xdf\x7b\x24\xf7\xbf\x91\x58\x59\xe7\x70\xc8\x98\x01\x8a\x31\x20\x6c\x4b\xb1\x3c\x56\xc4\xae\x41\x41\x96\x13\x21\x56\x35\xac\xa1\x98\x08\x31\x67\x3a\x98\xd3\x02\x0a\xf0\x89\xb7\xa6\xd5\xe7\xa7\x39\xed\xd6\x54\x2c\x35\x69\xc9\xc8\x8a\x5d\x9a\x58\x23\x0a\xff\x39\xa7\x61\xe7\x3f\x4f\x06\xc7\xeb\x94\x1b\x36\x61\xfa\xdb\x20\xc9\x5f\x5b\x24\x09\x93\x56\x14\x86\xf4\x69\x60\x0b\x0c\xa3\x53\x02\x23\x87\x81\x68\xf8\x8e\x2c\xe9\x36\x4b\xf8\x9a\xc0\xb8\x52\x40\xd8\xae\x48\x22\x57\x26\xdd\x57\x8b\x52\xd7\x73\x53\x57\xce\xcc\x5c\xf3\xee\xc9\xf6\x93\x72\xdd\xf5\x73\x4f\xd0\x3f\x1d\xb1\x6e\x78\xe5\x92\x95\xc9\x41\x6b\x1e\x7d\xb4\xbc\x5a\x72\x27\x67\x80\x8d\x39\x33\x86\x2a\x8c\x81\x46\x31\x91\x07\xf8\x40\x0e\x65\x56\x21\x6d\x32\x36\x45\x57\x8a\x88\xc8\x86\xb4\xeb\x63\xc7\x80\x31\x0e\x78\x40\xf3\xf2\xab\x69\xf2\x79\x59\xcd\xdd\xc7\x75\x6a\xd0\x59\x22\x0e\x4c\x9f\x19\xbf\xb3\xe5\xf9\x94\xb6\x99\xfb\x64\xff\x6d\x77\x1d\xc6\xb9\x99\x6f\x5c\x8b\x24\xdf\x92\x4b\x36\x94\x69\xc4\xcb\x3c\xc9\x29\x71\x1c\x47\xae\x86\x05\x40\xbb\xa4\x28\xda\x84\x40\x13\x8a\x12\x04\x1e\xcd\x28\x24\xaf\x52\x44\x14\x90\x58\xf7\x13\x3b\x07\xfe\x7d\xdb\xf8\x47\xfd\x1f\x2b\xfd\xda\x4f\xc3\x05\x9e\x3a\x67\xda\x5c\xbb\xef\x7c\xf6\xcb\x96\x0b\x95\x3b\xf7\xbd\xf1\xf8\xb7\x94\xf4\x2b\x4d\x26\x86\xa5\x31\x3e\x72\x39\xc4\x33\x00\x07\x22\x40\x14\x11\xc6\xb1\x60\x42\x4e\xc0\x40\x26\x65\x45\x27\x45\x12\xd2\x36\x74\x68\x01\x68\xbe\xc1\x10\x11\x56\x5e\x75\x8e\xa1\x87\x5a\x1a\x0b\xa7\x7f\x56\x3f\x95\x50\x8f\x45\x60\x61\x87\xbd\xd6\x08\xe3\x93\x1b\x7d\x0f\xdd\xfb\xb6\x68\xe5\xb2\xa3\x07\xa7\x5f\x44\x3f\x31\x7c\x87\x16\x29\x0f\x79\x48\xe1\x6d\x0b\x10\x36\x45\xd9\x5e\x6c\xd3\x01\x36\x49\x46\xd1\x54\xe4\x3a\x1a\x2f\x0a\xaa\xef\x49\x14\x13\xb9\xbe\x14\x85\x6e\x02\x7f\x5e\xb8\xad\x96\xff\x57\xff\xe9\x7d\x0e\x8e\xd3\x9d\xce\xef\x9e\xfd\xae\x41\x8b\x0e\x9d\xaa\x66\xbd\x32\x7d\x48\xdf\x0c\x05\x3b\x9b\xdb\x16\x24\x79\x99\xe8\xc9\x36\xf6\xb1\xe3\xfb\x0c\xa7\xbb\xd8\x70\x34\x8c\x75\x3d\x34\x58\xc3\x15\x14\x41\xd1\x55\x00\x22\x16\xb2\x8e\x0a\xe4\x08\xfa\x3e\xcd\x00\x90\xd8\x39\xfa\x9d\xfe\x2e\xdf\xc8\xed\xdf\x74\xdb\x59\x6b\xfc\xb7\x05\x52\xc7\xe7\xa9\x4c\xe5\x9c\x9a\xe5\xbb\x37\x6b\x7a\xdd\x95\xef\x2f\x36\x5d\x53\x27\xb9\x3e\x6d\x4a\x1e\x49\x53\x16\x0c\xc4\x08\x87\x1c\x0a\x31\x40\xbc\x0b\x65\xc6\x91\x05\x17\x8b\x82\x26\xb8\xd0\x35\x68\x3d\x62\x29\x1f\xc6\x8e\xc4\xb1\x64\x02\x75\xbd\xc9\x9d\x7e\xd9\xf2\xc1\x9c\xb1\x05\x0a\x79\xe6\x8b\xad\x07\x6a\xd7\x14\xde\xd9\x53\xb0\x50\xce\x73\x0f\x72\x6e\x5c\x5b\xab\x44\x93\x5b\x3f\x27\x99\x45\x9d\xa1\x0d\x86\xf6\x7d\xd2\xa4\x79\x2e\xd6\x71\xac\x8a\x3e\x45\xf3\xb1\xe2\xb8\x16\x2f\x5a\x21\xe1\x79\x3e\x17\xc7\x6a\x68\x58\x58\x8c\x1d\x95\x23\x13\xe8\xbd\x2c\x3e\xad\x8c\x18\xb8\xa9\x40\xf7\x0e\xab\x3a\xaf\xec\x34\xb1\x2a\x3f\xec\xe8\x9f\xe5\xde\xed\x01\x6b\xcf\xc7\xcd\xce\xb5\x0c\xfb\xa4\x9f\x5c\x2c\x31\xde\x82\xd2\x14\xcd\xd2\x84\x40\x85\x12\x25\xe9\x82\x60\x59\x44\x1c\x5a\x50\x01\x94\xa2\x41\x97\x84\x4a\x48\x43\x3a\xf6\x23\xe4\xca\xa1\x60\x90\xd8\x7b\x0d\xab\x61\x34\xb3\xda\xe1\x8a\xa9\xe0\xcb\xcf\x3b\x17\xb9\xbe\x69\x98\x7a\x75\x54\x7e\x6d\xf2\x63\x7b\x44\x43\xbe\xc8\xde\xd9\xa9\x87\x32\xac\x4a\xae\x73\xa8\x18\xd2\x91\x1a\x0a\xd0\x90\x48\x27\x84\xd0\x8f\x35\x43\x8b\x28\x20\xfb\x3a\x0c\x34\x82\x08\x09\x51\x90\x54\x82\x8a\x54\x95\xb4\x79\x60\x40\x8d\x78\x4d\xa7\xd2\x6c\x51\xbb\xfb\x1d\x87\xe4\x6a\xd3\xaf\x7f\xbb\xe2\xdb\x2f\x77\xcf\xfb\x59\x6f\xe3\xd6\xcd\xc2\x13\xfb\x7c\x77\x36\xcf\xc4\x41\x1b\xbe\xcd\xf4\x52\x04\xbc\xd9\xf2\xcb\x17\x45\xca\xd4\x7d\xf6\xa0\xd3\x8d\xae\x13\xbb\x9c\x46\xb9\xc6\xfe\x7c\x6b\x7e\xe3\x2b\x53\x3a\x8f\xf8\xa8\x0a\x99\x3a\x34\x63\x92\x0b\x91\xaf\x10\x98\x84\xba\x6c\xc6\x0c\xed\xc5\xa6\xe1\x86\xac\xab\x23\x9b\x70\x21\x4f\x5b\x9e\xcc\x01\x36\x50\x68\xdb\x32\xb5\x50\x27\x0c\x4d\x08\x81\xf4\x6a\x21\x2a\x33\xa5\x4c\xb9\x9a\xeb\xbb\x15\x2e\xbf\xa3\xe0\x82\xbc\x39\x2f\xfa\x25\x6b\x2d\x79\xa0\xa4\xb6\xe9\xfc\x64\x01\xd7\x65\x49\xd5\x83\xe9\x27\xc9\x4c\x9c\x6b\x48\x3f\xa0\x14\x4a\x35\x2c\x40\x9a\x32\x8e\x18\x1b\x44\x34\x15\x9b\xa6\x20\x58\x2c\xc6\x2a\x14\x5d\x60\x2b\x18\xd1\x42\xc0\x1a\x2e\x19\xb3\x3c\xf5\x6a\x04\x38\x8f\x4f\xe4\xed\x31\xaf\x55\x49\xb7\xe8\xf4\xa7\x76\xc6\x05\xcf\xa7\x2d\x9a\xb8\xab\xc5\xba\xf5\xcb\x53\x96\x6f\x44\x2b\xe2\xb5\x27\x92\x0c\x32\x96\xb0\x0b\x58\x8f\xf3\x68\x40\xf3\xac\xe7\x41\xac\x22\xe4\x04\x11\xe7\x84\xba\x03\x4d\xc3\x15\x15\x35\x60\x2d\x26\xb2\x34\xa4\xbb\x8e\x14\xe9\x62\xe2\x31\xfb\xc4\xe2\x35\x72\x2e\x3a\xb5\xfa\x7d\x79\xd6\xb4\x22\xdd\x8a\x14\xdc\x7c\x5e\x7d\x38\xbe\x6a\x81\x53\x93\x2b\x2f\x78\x5c\x73\xfb\x1f\x7f\xaf\x49\xf2\xa6\xdb\xa5\x49\x05\x03\x49\xd4\x28\x31\xd6\x19\x48\x87\x2e\x67\x02\x8d\x09\x43\xc1\x12\x7d\xdb\x27\x55\x04\x0d\xca\x89\x45\x4b\x47\x06\x44\x34\x95\x08\x47\x7a\xb3\x64\x50\x71\x4b\xd1\x5d\x2b\xb2\x0f\x18\xa6\x6f\x39\xd2\xe5\x87\x1f\xde\x95\xa6\x0f\xeb\x30\xb2\x07\xf1\xfc\xb3\x7a\x35\x9e\x9e\x49\x32\x70\x1e\x07\x98\x8f\x00\x43\xab\xa2\x17\x48\x91\x17\xbb\x3e\x4b\x39\xb6\xce\x05\x41\xe0\x85\x3c\x34\x15\x5e\x60\x62\x2d\x16\x69\x84\x75\x53\x0e\x15\xf0\xdf\x83\xdf\x57\x2f\x85\x52\x71\xe5\xa9\x9d\x88\x2f\x5b\x1f\xf8\xec\xe8\xc8\xc2\xe3\x9f\x95\x5f\xdb\x63\x63\xe7\x02\x5d\x72\x6f\xff\x51\x58\x8b\xb3\x77\x3c\x95\x7e\x19\xb9\xc4\x97\x15\x51\xe4\xf0\x1c\x0b\x10\xb0\x80\xc5\xf0\xc0\xfc\x2f\xd3\x5d\x48\xc3\xc0\xb0\x4c\x22\x76\x00\x66\x31\x0c\x59\x47\x46\x3e\xe9\x47\x12\xf2\x50\x02\xe0\x5f\x93\xa6\xf5\xf7\xcd\x1a\x7a\xa8\xe0\xc5\x06\x23\xcf\x8e\x5a\x74\xdc\xaf\x7c\xb4\xc1\xb3\x9a\xa0\x79\x3e\x33\x97\xbd\x77\xd6\xba\xcb\x49\x56\x68\x66\x63\x22\x8a\x2c\xa8\x86\x1e\x6b\x47\x80\xd6\x54\x96\x41\x02\xe5\xe9\xd8\x56\x71\x24\xd0\x04\xc3\x33\xbc\x67\x49\x9c\x6a\xd3\x81\x0d\xb8\x28\x46\x09\xee\x57\xe6\xcf\x6a\x3a\xac\xc5\x57\x9f\xe6\x98\x60\x6f\x9e\x7e\xa9\x14\xdf\xeb\xde\xb8\x53\xf6\xc2\x60\xc4\x85\xe6\xec\xa7\x9f\x4c\x59\x61\x51\x49\x06\x19\x3b\x84\x67\x8a\x51\x40\x1a\x7a\xa4\x06\x6c\x14\x20\x48\x07\x92\x8b\x19\x0f\xca\x18\x58\x50\x51\x0c\x15\x02\xc1\x83\x8a\xc1\x53\x31\x4d\xf1\xf8\x75\x70\xb4\x1a\xd1\xbe\x69\xfb\xac\xad\xed\xee\xcf\xa8\x7a\xc1\x4b\x39\xfd\x6c\xe4\x93\x42\xbd\x33\x8c\xae\xda\xbd\x44\xeb\xfa\x05\xe3\x59\xef\x8e\x7c\x39\xa3\x4b\x83\x86\x96\x3b\xbe\x28\xfb\x07\xe5\x4f\x7a\xed\x57\x7e\x3b\x2a\xff\x86\x46\xf5\xde\x2f\x78\x7f\xfe\xb9\x93\xc4\xf7\xdd\xfa\x54\x49\xff\x54\x31\xf1\x04\x46\xc2\x9a\x05\xbd\x80\xb1\x25\x9b\xa4\x22\x28\x98\x18\x1a\x71\x00\x1c\x86\xf2\x7c\x46\xa7\x3d\x96\xa1\xb1\xe3\x03\xc5\x0f\x24\x51\x96\x43\x16\x8a\xaf\x66\xf4\x95\xab\x57\xe5\x68\x0d\x9d\xb1\x76\x99\xe8\xc5\x97\xe3\xf6\xe5\x1c\x77\xe2\xb3\x06\x45\xea\x34\xac\xf1\xf1\xe5\x1c\xf7\x4f\xf6\x1d\x53\x33\xb9\xff\x8b\xc8\x44\x24\x6d\x8b\x02\xad\xf0\x94\x81\x19\x83\x27\x21\xd6\x00\x23\x05\x4a\x48\xd1\x8c\x4a\x29\x9a\x63\x28\x1c\xf0\x6c\xac\x4a\x96\x28\xb0\x24\x69\xbf\xea\xfd\xe7\x9f\x37\xfb\xb4\xcc\xf1\xb4\xdc\x5b\x7a\x4c\x4f\xfb\x3d\xe7\xa7\xfe\xa0\x77\xee\xaf\xa9\x77\x77\x6c\xb9\xec\x8d\x95\xb5\x3b\xa4\xfa\xab\x93\x3c\x9e\x8b\x45\xca\xe5\x48\xcb\xd2\x08\xa4\x2b\x08\x9b\x8c\x11\x92\x61\x6c\x4a\x32\xa9\x86\x24\xad\x61\x01\xaa\x18\xfa\x24\x27\xb3\x0c\x2b\xe9\x31\xe1\xbe\x4e\xa6\x6c\x6e\x8d\xc2\x73\xb7\x96\x7a\xd1\xe4\xe4\xf5\x03\x17\xd8\x1e\xe0\x50\xce\xec\xd5\xee\xee\xba\x30\xed\xed\x32\xf3\xd9\x81\xf8\x7c\x8b\xbd\x2f\x75\x40\x85\x8b\x4b\x23\xa6\x07\xfb\x37\x9c\xd8\x94\x1d\xb2\x9f\xf5\xef\x51\xa4\xd9\xb1\xee\xef\x67\xae\xda\x74\x77\xe9\x8a\x51\xcd\x69\xb5\xd2\xff\xb0\x4e\x4c\x00\x88\x63\x07\x40\x49\xa0\x22\xd3\x92\x23\x8e\xb1\x08\x48\x6a\x1e\x11\x43\x82\x26\x29\xd3\x8c\xa0\xe5\x7b\xae\x10\xfb\x32\xaf\xea\xa4\x25\x1a\x1a\x32\x12\xcf\x20\xab\x2c\x9d\xb0\xea\x5a\xa6\xdc\x1b\xda\x5e\xff\xf0\xbd\xcc\x4b\xba\x74\xd8\xbd\xf3\xa7\xba\xf7\xab\xa8\xb5\x6d\xf2\xcf\x0a\xd2\xe7\xc7\x93\x3b\xd0\x03\x82\x04\x10\x25\x4b\x91\x66\x48\x94\xa3\x02\xa8\x39\xd0\xe2\x59\xd6\xd3\xc2\x30\x90\x04\x2c\x59\xbc\x1f\x4b\x98\x17\x28\xc9\xe6\x6c\x9a\xa5\x01\x4a\xa0\x4e\x3e\x62\x5c\x83\x21\xdb\xea\x97\xf1\xc3\x89\xe7\xea\x1e\x7e\x4f\xaf\x99\x63\xca\xc2\x62\xa7\x87\x7d\xd2\x6a\x7b\xad\xf7\x27\x15\xfc\xbb\x7a\xfa\xb5\x52\x13\x06\xad\x24\x0a\x86\x6f\xc5\x51\x1c\x2b\x9c\xe8\x89\x11\xd4\x4d\x24\xb8\x06\xc5\xd1\x6a\x28\xb2\x14\xc0\x31\xab\xb0\x64\x0c\xf4\x40\xb2\x0c\x37\xa0\x48\xe7\x35\x87\x26\x55\xd9\x2e\xd7\x4e\x8c\xab\xb5\xf0\x97\xa1\x85\x06\x3d\xc1\xf1\x3e\xb4\xb9\x71\x3b\x79\xc6\xfa\x4d\x87\x2b\xf7\x6d\x36\x7b\xd1\xd2\x2b\x49\x86\x0f\x48\x8a\xc1\x13\x31\x67\x6a\xaa\x2e\x72\x88\xf6\xb1\x2a\xe9\xb6\x46\x4a\xb2\xc4\x69\xba\xc9\x06\x31\x1f\xb9\x8e\xac\x1a\x94\x20\x61\xdf\xd3\x69\x94\xe0\xa5\x0a\x5a\x15\x45\xe7\x26\x11\xef\xcf\x6d\xcb\xdf\x69\x70\x68\xd0\xdb\x7d\x3f\xfc\x50\xec\x12\xf5\x2a\x56\x63\x4d\x9d\x7a\x37\x73\xde\x99\x99\x5c\x9f\x06\x8e\xc2\xfa\xac\x42\xaa\x38\xb6\x29\x5f\xf1\x81\xc2\x48\x8a\xe4\x5b\x20\xb4\x18\x0b\xc3\x18\x33\x8a\x62\xab\x22\xaf\xc8\x24\x21\x41\x97\x64\x09\x21\x31\x0c\x8e\xff\x6d\xd3\x5b\x97\x47\x5c\x2d\x9c\x2a\xdf\x58\x52\xb9\xba\x37\x6c\xf4\xcd\x1d\x68\x31\x3b\x21\xeb\xd3\xdf\x56\x1d\x1b\x78\xfc\xe4\xad\xe4\xf6\x35\x81\x6b\xd2\x9e\x08\x34\x44\xd3\xb2\x6c\x44\x3e\x8b\x19\xc8\xab\x3a\xe7\x50\x81\x02\x18\x59\x0a\x55\x95\x00\x1c\xe5\xd1\x14\x92\x5d\x86\x0b\x35\xe1\x35\x1c\x0a\xb7\x32\xbe\x9b\xbd\xff\xde\x94\xef\xaa\x7d\x7f\xbe\x48\xcb\xa9\xf5\x36\x1e\xe8\xb7\xad\xd9\xf8\x9d\x8b\x27\xe7\xbe\x00\x27\xc2\x33\xea\x9c\x24\x83\x7f\x78\xc7\xf1\x6d\x8c\x63\xdf\x77\x01\x24\x1c\x92\xf3\x43\x42\xb5\x05\x46\x66\x4d\xc3\xd0\x21\x6d\xb3\x0a\x43\xc6\x72\x2c\x32\x81\x2e\x62\x0b\xb9\xd1\xab\x0e\xf2\xb0\xe2\x86\x42\x05\xfe\x1c\xbc\xa8\xd2\xb7\xfb\x7f\x58\x5d\xb8\xe0\xf7\x05\xf2\x7c\x7d\xcb\xe8\x51\xa1\xf4\x0e\x76\x7c\xaf\x9d\x39\x3e\x4c\x3f\x66\x3d\x61\x5f\x23\xe1\x20\x52\x09\xc1\x91\x69\x0a\x7a\x0a\x69\xb8\x02\x82\x3a\x15\xa8\x0e\xa5\xd3\xaa\xcb\x8a\xa2\x20\x51\xa1\xa5\xea\x2e\x81\x25\x96\xc5\x8c\x82\x5e\x83\x93\x2c\x32\x63\xf9\x9d\xda\xcb\xeb\xff\x34\x2c\xf3\xed\x36\x13\x1a\xda\x17\x8a\x14\xba\x37\x7d\x49\xe7\x8e\xbd\xb3\x7c\x78\x91\x7b\xf6\xe3\x69\x35\xc9\xab\x5e\x5e\x95\x58\x80\x54\x9f\xc1\xd8\x15\xa1\x11\x30\x7a\x18\xba\x04\x87\x39\x49\xa7\x29\x11\x3b\x0e\xf2\x0c\xc4\x78\xb2\x06\x45\x9f\x25\x68\xcd\x15\x12\x3b\x08\x5d\xec\xda\xbc\x61\x7f\x39\x8d\x77\xfd\x34\xf9\x8f\xfb\x76\x97\x1f\x9e\xac\x3a\x70\x38\xf7\xe0\xae\x19\xbd\xb1\x23\xbe\xfc\x78\x54\x85\x3f\x92\xeb\xd7\x66\x44\xf3\x36\xa5\x04\x3e\x23\xf1\xbc\x0b\x38\xc5\x62\x7c\x8f\x12\x43\x35\x88\x04\x0a\x31\x44\x44\x92\x50\xb2\xa0\x87\x75\x60\xeb\xa4\xc1\x38\xa4\xf6\x6a\xb7\x72\x2e\x5f\xc9\x92\x64\xe1\x87\x5b\xea\x65\x39\x3c\xea\xab\xb2\xb3\xf6\x76\xcb\xbf\xb5\xe4\x9e\x75\xe3\xea\x8f\x67\x5a\x75\x3a\x7d\xe4\xe0\xb9\xe4\xfa\x34\xe4\x08\x4d\x74\x78\x41\x63\x42\x4b\x31\x83\x40\xd0\x81\xe7\x69\xae\xaf\xb3\x4e\x10\xb3\x1c\x83\x3d\x5f\xa3\x4c\x8a\x89\x09\x9e\x56\x02\x9d\x13\x1c\xe2\x35\x5d\x64\xab\xaa\x1d\x8e\x0f\xb9\xb6\x7a\xcb\xac\xd9\xf9\x16\x94\xca\xd2\xaa\x67\xc5\x77\x77\x75\xf8\x66\xf1\xca\x46\x28\xa5\x81\x3d\x22\xcf\x9d\x23\x2f\x75\x91\x26\xff\xfc\xc0\xfe\xf7\xa6\xdc\x38\x77\x61\xf0\xc7\x19\x57\xe6\xe9\xb1\xe0\x97\x1a\x7d\x6f\x9c\x58\xb6\xce\xea\x5b\xc7\xfe\x7d\xc1\x8e\xf4\x17\xa4\xc4\x62\x43\x26\x45\xb3\xae\x63\x0b\x06\x67\x51\x14\x94\x02\x5d\x22\x1c\x1c\xcb\x22\xd6\x18\xe8\xd1\xa4\x22\x02\x9a\x32\x1c\x1b\x39\xac\x6f\xd1\x14\x52\x71\x82\x45\xef\xb0\x6f\xb2\x3f\xad\x99\xe7\xc3\x51\x6b\x1f\x15\xce\x97\xaf\x70\xc5\x9c\xf7\xca\xf4\xfb\xb8\x4a\xed\xd2\xd9\x3f\x7a\x5c\xb9\x77\xbf\x2a\x05\xcf\x27\xf7\x7f\x11\x22\x99\x56\x80\x6b\xeb\xa4\xc7\xd2\x14\xab\x79\x74\xc4\x43\x41\x27\x58\xda\x27\x01\xe7\x06\x12\x14\x11\x2f\xd2\xa1\x44\x61\xde\xe7\xa9\xd8\xd1\x84\x57\x4d\x1e\xd7\x7b\x66\xc5\x2a\xdb\x3e\xcf\x38\xe3\xbd\xca\xc1\x78\x35\x7f\x86\x85\xcb\x36\xec\xfa\x69\xec\xf7\xe5\x73\xf7\x5b\x7d\xf7\xfc\xba\x43\xcd\x93\x0c\x6e\x0e\x0c\xcc\x01\x0f\xc5\x81\x40\xeb\x06\xab\xaa\xb1\x14\x89\x9a\x27\x42\x89\x11\x34\x4b\xf6\x02\xa4\xb8\x16\xb2\x42\x13\x48\x11\x02\x84\xa2\xbd\x2c\x9c\xf1\x2f\xe7\xc8\x54\xdf\xff\x73\xe4\x84\x6c\x29\x19\xe4\x65\x51\xbe\x4f\x36\xee\x7c\xb4\xf3\xf1\x57\xf5\x9e\xed\x36\x7e\x2a\x5b\xd8\x38\x36\xba\x5c\xfa\x55\xef\x12\x8b\x4f\xd2\x2c\x46\x11\xa5\xc5\x11\x63\x29\x80\x76\x6d\x07\x61\xce\x55\x08\xdd\xc1\x1c\x29\x51\x8c\x27\x70\x76\x44\x41\x8f\x77\xbd\x98\x06\x7a\x00\x1d\xe9\xd5\xa7\x5f\x93\xd0\xf9\xa5\x4d\xed\x51\x97\x2e\xae\x5d\x74\xe2\xc6\xa3\x0e\x7b\x06\x67\x5c\x3c\xee\xd6\x46\x62\xca\x99\x33\x07\x78\x98\xe1\x7a\xfa\x75\x60\x13\x9f\x26\x58\x90\x00\xba\x89\x4c\xd6\x66\xc2\xd8\x90\x45\x5b\x27\x5d\xcd\x42\x8c\x1b\xeb\xc0\x08\x58\x5d\x89\x22\x2b\x36\x54\x18\x11\x9a\x6f\xfa\x42\xe0\x71\xaf\x9a\xbc\x77\x52\xa1\x07\xa7\x76\xcc\xbb\xf8\x53\xf3\xbc\xdf\x54\x68\x56\xeb\xf6\xd6\xb3\x6d\x2f\x8f\x78\x7e\xf6\xa7\x0d\x7b\x3e\xeb\x31\x6f\x64\xe6\xf4\x8b\xf4\x25\xcc\xe8\x42\xc0\xf2\x2c\xc6\x44\x60\xc4\x8a\x0c\x6d\x48\x68\xa1\x05\x49\x48\x72\x01\x01\x7c\x1f\xc4\x06\x17\x45\x8c\x6d\x41\xd2\x0a\x35\x42\x73\x59\xc9\x73\xff\x2f\x35\xfe\xaf\x60\xc6\x3f\xed\x48\xd3\x9a\x0c\xee\x97\xd2\xe8\x65\x0c\xb9\xb1\xf2\x50\xe9\xbf\x97\x4a\x79\xbf\x84\x65\x1b\x7c\x98\x8d\xdd\xdb\xaf\xdd\xdb\xdd\xc6\xe4\x2e\xd8\xbe\xf3\xb3\xc3\x69\x8f\xa7\x36\x4f\x2e\xb5\x1c\x88\xb8\x30\x74\x14\x96\xe1\x14\xd5\x67\x64\x95\xe1\x83\x88\x43\x92\x4d\x19\x01\xa6\xbd\x98\xb2\x63\xde\x55\x7c\x2d\x62\x78\x2d\x16\x29\x4a\x13\x2d\x07\x24\x5e\x95\xda\x0b\x7f\xe8\x47\x16\x6b\xf1\x48\x31\x7f\x1e\xe1\x57\x9d\x32\xb3\xf1\x94\xcf\xeb\x56\xcb\x3c\x7b\x60\xf3\x12\x7f\xad\xbb\x3a\xe4\x70\xdf\x24\x8f\xc6\x1c\xcd\x35\x04\x36\xb2\x10\x27\xb3\x26\x41\x59\x8a\x88\x29\xc2\x80\x08\xba\x16\x65\xb2\x5e\x18\x58\xb4\x03\xe8\x18\x1b\x7c\x1c\x84\x6e\x24\xbf\x8e\xff\xe7\x9b\x8b\x9d\xd1\x05\xff\xeb\xe5\x01\x33\x24\x43\xc6\x93\xcf\x4a\x82\x32\x77\xb2\xdf\xee\x91\x69\x28\x09\xca\xb7\xba\x17\xb4\x4e\x3f\xa5\x7b\x42\x9f\xd2\x94\x88\x36\x39\x8f\x11\x23\x5a\xb4\x58\x4a\x22\x85\xd0\xb0\xa9\x88\xe5\x08\x45\xa4\x30\xa7\xa2\x08\xfb\xc0\x50\x01\x94\xd8\xd8\xa6\x1d\x48\x7b\xaf\xe1\xb1\xbe\xdf\xb0\x88\xe3\x3f\xd9\xaf\x16\x3f\xfd\xe9\xcd\x41\x43\xae\xa4\xdc\xfd\xb9\xcd\x47\x27\xba\x7f\x40\x57\x3a\x76\x71\x4d\xeb\x6e\xd5\xa7\x24\xf7\x6b\x53\x86\xa2\x05\x21\x1d\x9a\x80\x61\xb0\x24\xa8\x50\xb2\x42\x8c\xf5\x80\xb0\x78\x16\xf1\x06\x24\x2d\xce\x75\x78\x96\x8d\xa5\x00\x10\x28\xd0\x0c\xf5\x35\x5f\x7b\xfd\xbe\x07\x4b\xa6\x2c\x3d\xb2\xaa\x8e\x7d\x6c\xc0\x1b\x07\x7e\xc9\x9f\x36\xf9\xcc\xdc\x6f\xc7\xd7\xd8\xdf\xf4\x19\xb7\xc0\xff\x79\x6e\xad\x24\x93\xe9\x00\xd5\x27\xa1\x23\xa9\x96\xcc\x2a\x94\x00\x55\xca\xf7\xb5\x48\x8c\x55\x9f\x10\x18\x3d\x0c\x5c\x4a\x36\x28\x48\xab\x1e\x69\x31\x34\xa9\x99\x3a\xf8\x57\x11\xfd\xdf\x7b\xa8\x7f\xda\x1d\xa4\x35\x29\x91\x2d\xe5\x3f\x50\xa8\xf5\xbf\x1d\x2e\x17\xad\xac\xa2\xd1\xd7\x77\xb7\x7f\xfc\x63\xfe\xcb\x75\xa6\x0d\x28\x75\xe3\xb9\xde\x72\xe6\xe2\xfc\x47\xc6\x9f\x7e\x7e\x37\xb9\x3e\xe5\x93\x2a\xef\xc5\xa2\x46\xd9\x31\x05\x68\x9a\x53\x74\x37\x96\x48\xc6\xd3\x42\x1e\x1a\x8e\xaf\xf8\x92\x27\x42\x01\xf8\x9e\x41\x87\x92\x8f\x15\xf3\x75\x10\xe1\xf6\x6e\xaf\x61\x6b\x33\xab\x59\x7a\xf2\x5b\xf2\x0f\x3d\xba\x60\xf1\xe5\x1f\xca\x96\xcb\xb2\xbc\xcc\xb5\x3b\x7b\x1b\x7c\x71\x73\xd3\xba\xf9\xc9\x4d\x3c\x0a\x6f\x20\xcd\xe1\x19\x96\x40\xb1\xc8\xb8\x58\x89\xd5\x58\x34\x03\xcc\xd3\x1c\xa1\x9a\x61\x4c\xba\x81\x6d\x68\x6a\x1c\x4a\x90\xe1\x14\x05\xc0\x97\x89\x3f\xfe\x65\xf6\xee\xfc\xed\x56\xb7\xbb\x9f\xb5\xad\xfe\x55\xce\xc5\x1d\xe9\x42\x6f\xa5\xae\x39\x79\xb1\x75\xd5\xbf\x36\xca\xd9\xfd\xcb\x33\xea\x0e\x2a\x93\xdc\x42\x16\xaa\x32\xeb\x52\x02\xc3\xb1\x1e\x17\xe0\x40\x0f\x30\x81\x14\x27\x96\x54\x9e\x26\x18\x19\x22\xa8\xb1\xae\xe7\x91\x82\x1d\x1b\x7c\x68\x22\x85\xc2\xaf\x11\xad\xea\xf4\xc5\xa4\xcb\xcd\x67\x9f\x25\xce\xe7\x19\xa4\x66\xbc\x5d\x70\x55\xf7\x1e\x5e\xf9\xd9\x83\xc7\xc9\xe8\x97\xcb\x1d\xe6\x7f\x1d\xa4\xbf\xcf\x4f\x68\x36\x83\x34\x9a\x0e\x62\x85\x54\x79\x89\x07\xac\x42\xab\x08\xc4\x1e\x23\x05\x9c\x1e\xf1\x3e\x6d\x85\x7c\x18\x03\x28\x72\x16\xa5\x89\x84\xe2\x84\xca\xbf\x89\x3f\xff\x6f\x28\xfc\xd3\xd0\x35\xad\x49\x6a\x86\x4c\xc5\x5f\x0e\x05\xd8\xfc\xfb\x99\x27\x8b\xcc\x59\xf7\x58\xc8\xf3\xf8\xab\x6f\xb2\x2c\x5c\xfb\x5d\x95\x89\x73\xda\xe0\xbb\xb3\x27\xe7\x5d\x3f\x14\x5d\x4b\x3f\x46\x22\x61\x28\x18\xba\x12\x23\x40\x00\x29\x60\x82\x20\x10\x64\x0b\x09\x62\x8c\x39\x46\x52\x62\x4e\xd6\x74\xd6\xd7\x03\x9a\x17\x1d\x02\x5b\x11\xd0\x35\xdb\xd7\xf0\x6b\x44\xf2\xbb\x4e\xad\x75\xf8\x93\xbf\xcd\xce\x35\x27\x9e\x9c\x51\x62\x44\x96\xec\x1f\xe5\xcd\xc9\x17\x5f\xbd\xf6\xda\x5f\x7f\x94\xba\x51\xe6\xd7\x99\x6d\x93\xcd\xd1\x1e\x89\xbc\x12\x72\x36\xab\x6b\xb6\x26\xfb\x26\x60\x5c\xc6\x61\x45\xcd\x55\x44\xc6\x10\x6c\x12\x4a\x24\x65\x1b\x5e\x68\x12\xac\xad\xeb\xaa\xa8\xbf\xe6\x44\x47\xc9\x3b\xea\xe0\xef\xfb\xab\x2c\xfd\xb6\x1d\xb5\xaf\x43\x8f\x56\x87\xa7\x0b\x0b\x3b\x14\x2a\x34\xe2\x51\xf5\x61\xeb\x9a\x4f\x1c\xdd\x75\x64\x72\x47\x39\xc8\x22\x69\x49\x21\xb8\x00\xb8\xae\xc6\x48\x8c\x08\x38\x46\x90\x08\x1a\x33\x54\x04\x49\x83\xe1\x25\x8a\x88\x23\x85\xb4\x00\x1f\x20\x46\x72\x0c\xc0\x25\x0e\x85\xdb\xbd\x1f\x96\xf8\xa2\x6a\xa1\xf3\x07\x53\x86\xec\x95\x87\x3f\x9f\x33\x21\x9e\xdb\xb1\x7e\xd7\x2f\x8f\x37\xc8\x32\xea\xbc\x77\xb5\x4f\xfa\x91\x9d\x09\x9f\xbc\xb1\xe6\x5a\xa1\x85\x4d\x86\xa6\x6c\x82\x54\xa0\xcf\x20\x1d\x2b\x2a\x23\xc6\x84\xa6\xc9\x32\x0c\x6d\x92\x20\x00\x07\x20\x63\x7b\x36\x12\x80\xac\x2a\xaf\xf4\x75\xff\x34\x34\x4e\x6b\x92\x31\x25\xc3\x8e\x97\xfb\xba\xda\xa5\xf7\x4e\xbd\x50\x73\xfc\x8e\x3d\x9f\x7f\x38\xfe\xc8\xe9\x3d\xa5\x73\x0c\x20\x4e\x64\x18\xb3\xe6\xac\x7c\x66\xcd\x37\x87\x33\xbd\x9d\xdc\x45\x1c\x88\x65\xdb\x80\x46\x00\x59\x83\x93\xbc\xd0\xf1\xa1\xcf\x8a\x1a\xe5\x48\x82\xef\x84\x1e\xef\x30\x86\xc8\x80\x80\x60\x30\x81\x05\x16\x85\xac\x86\x39\x26\x71\x28\x04\xe4\x89\x61\x83\xeb\x54\x28\xc9\x55\xbb\x5a\x2b\x04\x6d\x52\x87\xba\x77\x9d\xa5\x0b\xb6\xa5\xc2\xad\xa9\x59\x4a\x3f\x5d\x96\xfe\xa5\x7f\x42\xb3\x65\x04\x01\x61\xc8\x24\x07\x80\xa1\x42\x1c\xb0\x12\x16\x5d\x41\x67\xa1\xc5\xf1\x61\x8c\x62\x96\x26\x3c\xac\xf8\xa6\x00\x75\x83\x35\x15\xca\x21\x61\x62\xb3\x5b\x97\x1e\x59\xbd\xe1\xf0\x34\x86\xef\xbf\x7d\x6e\xa3\x5a\x4b\xf9\x23\xdf\x2e\xef\xb5\x6d\xf7\xa0\x03\x99\xb6\xfd\x50\xd6\x5e\x99\x29\xc9\x74\x94\xa2\x08\xb5\x48\x27\xec\x80\x0c\xc9\x30\x66\x19\x68\xd9\x51\x44\x02\x56\x63\x44\xcb\x34\x1c\xd2\x0e\x38\x83\x40\x71\x24\x71\x8a\xe3\xca\xba\x22\x09\xaf\xb9\x0d\x74\x0b\x1d\x1d\x98\x57\x0a\x95\x8a\xf3\xde\xf8\xb8\x6c\xca\x97\x53\xed\xeb\x57\x57\x1c\xee\xfa\xd1\xf2\xc7\x8b\x6e\xb5\x6f\xd3\xa3\x7b\x92\x29\x2d\x00\x30\x69\xc2\x0f\x28\xe4\x2b\x3a\x8c\x2c\x31\x86\xa4\x69\x23\x22\x8a\x25\x11\x73\x48\xe6\xec\x98\xe2\x02\xde\x02\x14\x29\xd3\x50\xd7\x42\xc8\xd3\x89\x23\xb8\xe8\xe5\xe3\x3f\xcf\xca\x55\xeb\xbd\xaa\x15\x72\xbe\x73\x6b\xe3\x8c\xf6\x2d\x1a\x7e\x70\x28\x7c\xe3\xa9\xdf\xa5\xdd\x96\x15\xf5\x5e\x88\xe9\x17\x88\x48\xf8\xb5\x71\x68\x72\x91\xce\xb8\x9e\xc8\xba\x9c\x22\x85\x32\x02\xb4\x08\x18\xcf\x95\x69\x9e\xa0\x3d\x96\x45\x7c\x14\x29\x82\x14\x8b\x4a\x48\x38\x3a\x21\x20\xfd\x95\xbe\xee\x9f\x66\x3f\x69\x4d\xf2\xb4\xff\xcf\xbe\xae\xec\x92\x4a\x9d\x9e\x55\x38\x9c\xf9\x6e\x99\x37\x8e\x2e\x4a\xdb\xa7\xde\x18\xba\xe1\x58\x6a\xdd\x15\xc7\xd3\x06\x6f\xaa\x38\xe2\xc2\x99\xf4\x37\xdd\x89\xc5\xf5\x22\x53\xa5\x55\x11\x41\xda\xc2\x38\xa6\x44\x43\xe6\x44\x91\x30\x11\xc5\xe1\x48\x88\xfd\x88\x06\x40\x32\xed\x50\x66\x48\x29\x96\x55\xe8\x70\xae\x9b\x38\x14\xee\x3d\xe8\xdb\x3a\xef\x9d\xa5\xe2\x9e\x9d\xb3\xff\xf2\x16\xfc\xda\xb9\xc9\xbb\x93\x32\xdc\xea\x98\x52\x63\xe2\x82\x89\xeb\xde\x58\xf5\x75\x72\xd3\x2b\x20\x43\x89\xd4\x0c\x4f\x14\x03\xd3\xd0\xd9\x50\x53\x75\xcd\x60\xbd\x50\x07\x74\xa8\x1b\xb1\x1e\x62\x83\x32\x4c\x49\x15\x44\x55\x36\x43\x18\xcb\xba\x2a\x26\x36\x9b\x1d\x62\x85\x13\xae\xb9\xc5\x4f\x1d\x58\xfe\xcb\xf3\xfd\x7d\x69\xb9\xc5\x39\xff\x3b\x7f\xd7\x90\xd3\x7b\x57\x57\xd8\x94\x32\x75\x47\x92\x37\x40\x2a\xa0\x34\x3f\x84\x94\x2d\x93\xaa\x60\xc5\x8a\x23\x53\x18\xda\xae\xca\x53\x2a\x25\x3b\x1a\x1f\x71\x8c\xc8\x8a\x92\x64\xb0\xba\xcd\xb9\x31\xeb\xbc\xe6\x65\xb6\x73\xc5\xec\x4d\x19\xa3\x1e\x65\x97\x16\x5c\x90\xbf\x47\x86\x11\x79\x9f\x96\xff\xf2\xf3\x9a\xfe\x62\x65\xf9\xe9\x5f\x1b\xff\xfc\x0e\x68\x96\x5c\xb3\x45\x5a\x88\x15\x43\x30\x08\xc6\x97\x75\xcc\x3a\x8c\x2e\x33\x9a\xc7\xcb\xd8\x60\x90\xc0\x39\xbe\x6b\x93\x84\x23\xab\xbe\x1c\x79\x31\xf4\x81\xc8\xf3\xe4\xff\x99\x7d\xbd\xf6\x7f\x5b\x9c\xb1\xdb\x4f\x1f\xee\xad\x74\xf1\xa3\x32\x23\x0a\xfe\xfd\xe1\x1e\xae\xd9\xc3\x75\x35\x53\x5a\xdc\x39\x90\x73\x4a\xe9\xc9\xf7\x37\x50\x27\x8b\xa4\x35\x09\x9f\x9f\x7f\x32\xad\xe0\x7f\xd0\x77\x2c\x1e\xd9\xb1\x61\x9e\xb1\xe3\x0b\x94\x78\xf3\x8a\xe1\x96\x6c\xcf\x78\xd3\x3e\xfa\x64\x42\xb1\x1e\x61\xc5\xb5\xfa\x95\x81\x87\x36\xbc\x2c\x4f\x7d\x6c\xaa\xb5\x86\x9a\xe5\x5d\x1d\xb3\x32\x43\xa5\xb1\x9d\x5b\x14\x58\xd4\x25\x53\x9e\x65\xdb\x6b\x0e\xee\x98\xf3\xab\x52\xb3\xfb\x24\xf9\xfa\x50\x32\x23\xec\x0a\x01\xe4\x41\xa8\x99\x16\xd0\x5d\x5a\x0b\x7c\xcd\x46\x04\x1d\x11\x1c\x41\x32\x1c\x8c\x38\x99\x97\x28\x17\x93\x94\x22\x6b\x92\xe2\xd9\x89\xe1\x3e\x6f\xe7\xfb\x79\x2b\x37\x7b\x40\xbf\x62\x7b\xe7\xe7\xcf\xe6\x0b\x5f\xcc\xf8\x6a\x96\x29\xf7\x9f\x95\x16\x1c\xfc\x3c\x77\x96\x6d\xcd\x93\x2c\x21\x18\x39\x22\x06\x36\x43\xc0\x98\x74\x04\x85\x33\x5d\x5b\xf0\x0c\x46\xa1\x05\x23\x88\x4d\x52\x27\x69\xc4\xc7\x6c\x28\x07\x04\xf4\xcc\x08\x91\x08\x02\xee\xd5\x01\x6a\xd1\x9b\x07\xde\x06\xfe\x86\xea\xd9\x9a\x9d\xd2\x76\x8e\x7d\xa3\xc2\xc2\xc3\xa5\x6f\x66\x6b\x3c\xb6\x7b\x8d\x43\x31\x39\xe4\x41\xc5\xf4\x53\x8b\x27\x2c\x20\x2e\x19\x0b\x8a\x44\x8b\x84\xe3\xd3\x0c\x0f\x29\xcb\x46\xa2\x16\x7b\x8e\x84\x7c\x43\x43\xac\x6a\x89\x9c\xcb\xfa\x82\xcf\xdb\x01\xd0\x24\x4e\x35\x9c\xd7\xad\xe1\xc7\x6e\x57\x6b\xc5\x25\xce\xa7\x96\x6e\xf4\xbc\xfa\x8b\x5a\x93\x77\xfd\xf0\xdb\xf8\xf3\xcf\xb6\x1f\x9d\x51\xab\xf2\xa1\xeb\x3b\xbb\xfc\x39\xe3\xe5\x3b\xb1\x9a\x85\x0f\xb7\x18\xf1\x95\xdf\x32\xd3\x35\x77\x4c\xb5\xa6\x6b\xe6\x34\xa9\xda\xbc\x44\xce\x2e\x7b\xc9\x2a\x6f\x66\x5e\xb7\x88\x4c\xae\xa6\x2c\x67\xda\xaa\xec\x1a\x8e\x6e\xc6\x3a\xa3\x22\xcf\x0c\x10\xb2\x0c\x8a\x24\x80\xc6\x47\xa1\x63\x79\x2c\x2d\x89\x80\xb0\xbd\x00\x6b\x04\x1f\x46\x9a\x8a\x12\xc0\x23\xe8\xdd\x03\xb6\x65\x9d\xdf\x79\xdf\xe2\xfe\x8d\xbe\xef\xd3\xad\xff\xb5\xf9\x7d\x9e\x6e\x4e\x1d\xd8\xf8\xeb\x2a\x2f\x0a\x57\x1b\x5a\x6f\x54\xc7\xe4\x9a\xac\x61\x5b\x8b\x28\x01\xb2\x08\x42\x87\xe4\x6d\x5a\x8b\x11\x10\x44\x4e\x81\xa4\xc2\x68\x24\xc9\xb9\xb2\xee\xb1\x36\x08\x45\xc2\x08\x34\x60\xb3\x89\x44\x50\xb6\x9e\xd9\xb1\xfc\x4c\xdd\x35\xd7\x9b\xd4\xd9\x91\x7f\x44\xbf\x4f\x6a\xbd\x55\x7f\xd0\x31\x7a\xe5\xbe\xe3\xdd\x7b\x57\x6a\xf5\xf1\xf2\xd6\xdd\x93\x9b\xc9\x5c\x07\x85\x06\x52\x23\x15\x98\x92\x6f\xda\x50\x66\x58\x1e\x12\xa1\x66\xd8\x91\x2f\x89\x18\x13\x61\x80\xdd\x58\x0a\x51\xa4\x03\x2e\x08\x6d\xf7\x65\xed\xed\x7f\x05\x6d\x99\x0a\x93\xaf\xb1\x7d\x8b\xbd\xe7\xd5\xa5\x5b\x74\xcd\x2d\xee\x6a\x8c\xd1\xed\x5b\xa8\x19\xf1\xee\xd9\xd4\xb4\xe7\xad\xa7\xa5\xff\x92\x20\x31\x99\x05\x22\x15\xcc\x30\xba\xa9\xaa\xb1\xe1\x39\x9e\xa2\xc7\xbe\x4d\xab\x96\xee\x11\xa2\xa0\xaa\xb2\xab\x9a\x1a\x70\x5d\xc9\x62\x28\x89\x92\x4d\x16\xba\x09\x82\xf6\x8f\xe3\x9d\xe7\xf7\xbe\x90\xb5\xd2\xf5\x1f\xff\x64\xc6\x1e\x7a\xce\xd6\x3b\xf1\xf8\xc0\x80\xb9\xc5\x56\xb4\xee\x71\x70\x27\x97\x79\x4c\x92\xa9\x15\x1c\xc1\x15\x28\x95\x27\x09\x1a\x3b\x0a\x22\x1c\xd9\xa2\x65\x53\xd7\x45\x53\x8c\xf4\x00\x92\x06\x8a\x24\xc9\xa4\x6c\x13\x50\x06\xb4\xf9\x48\x77\xb0\x93\x38\x3d\x7a\x70\xd0\xc9\x2b\xbd\x2a\x1f\xf2\x77\xb7\xeb\xf6\x61\xcf\xf3\x8f\xc6\x6f\xab\x9d\x32\x6b\x4e\x9d\x9a\x6f\xbd\x39\xf6\x8f\xcd\x9f\x2f\x2d\x9b\xdc\xe7\x26\x0e\x34\xcb\x96\x49\xda\xb1\xa0\x1c\xca\x26\x07\x7d\x5e\x0e\x7c\x5a\xf4\x58\x5a\xa5\x99\x10\x9b\xb6\xe0\xaa\x8c\xaf\x40\x95\x0b\xd9\x38\x76\x09\x98\x00\x2c\x9e\x56\xb7\x56\xae\x15\xf3\xfa\x9f\xcd\x78\xfe\xc1\xf1\xb7\xc7\x77\x00\x73\x7f\x6c\xdd\x2f\x63\xf5\x7e\x3f\xfe\x59\x6d\x73\xfd\x66\xc3\xab\x7c\x9e\xdc\xf4\x48\x92\x2e\xa7\x1b\x31\x85\x64\x09\x28\x52\x4c\x13\xac\x60\x09\x66\xec\x0a\xa4\x61\x52\x82\x4d\x6a\x6a\x10\x31\x1a\xef\x92\x21\xa5\xc2\xd8\x41\x0a\xe4\x13\x03\x78\xb2\x3f\xae\x56\xe5\xc6\x89\x11\x9f\x42\x6f\xfd\xdc\x36\xf5\xd6\x35\x6a\xb5\xea\xef\x2a\x6f\xd5\xab\x7c\xb4\xbf\xb3\x60\xd2\x4f\xe7\x33\x26\x17\xe1\xcb\x05\x7c\xe0\xba\x8c\x2e\x4b\x1c\x34\x14\x52\xd5\x02\x99\xc3\x08\x69\x86\x18\xda\x1e\x09\x02\x49\x67\x0d\x01\x85\x81\x11\xa9\x66\x68\x68\x90\xb7\xfe\x5b\x21\xe7\xe5\x2f\xdd\x20\x6d\xc0\xcc\x43\xd9\xe6\xad\x87\xf9\x68\x32\x5f\xa9\xd5\x29\xb9\x87\xe5\xfc\xec\xdb\xdf\x2f\xd7\xf8\xc8\xfa\xe2\xf2\xdc\xe5\x7d\x2b\x24\x19\x2a\xa5\xda\x21\x6f\x08\xa4\xec\x72\x1e\x42\x24\xc5\xe8\x2e\x36\x25\x1e\xb2\x1e\x82\x6e\x2c\x07\x31\x61\xc8\x16\x1d\x45\xba\x4e\x29\x90\x06\xc4\xbf\x83\x92\x5f\x2e\x44\xfe\xcd\xee\x59\x77\x9e\xdd\x76\x62\xf0\xe0\xf1\xb5\x87\x9f\x8f\x32\xfe\xf4\x68\x5d\xf3\x35\xdb\xb6\x2e\x7c\x34\xe5\x56\xcd\xdb\x3d\xca\x73\x2f\xfd\x2f\x05\x2c\xb6\xc6\x45\xb8\xa6\xe4\xca\x42\xd5\x56\x22\xfb\xef\x4f\x17\xf4\xae\x79\x7b\x8d\xbd\xab\xe3\xa1\x41\xd7\x5f\xfc\x50\xe6\x62\x86\xe4\x06\xae\x6b\xaa\x2e\xb2\x19\xcf\xc2\x5e\x48\x22\x3d\xa4\x4c\x3f\xe2\x5c\x53\x0a\x62\x13\x3b\x9e\xc5\x47\x0a\x4b\xfb\x3e\x29\x29\x00\xc3\x98\x26\x05\x9d\x4f\x70\x4b\x53\xf4\xca\x9c\x2c\x4c\x9f\xe9\x47\x3a\x1f\x3f\xbf\x7f\x1b\xf7\xf5\x89\x37\x3b\x7c\xef\xe4\xf3\xb2\xbe\x11\x4c\xe9\x30\xfa\xd7\x05\xe3\x92\xac\xc7\xce\x68\x8c\x4a\x05\x3e\x88\x05\x83\x8d\x41\x2c\xb3\x94\x22\x88\x14\xc3\xb2\x12\x23\x20\x01\xb8\x16\x21\xf8\xae\xa4\x30\xaa\xae\x21\x96\xb4\x6d\x29\x76\x13\xe7\x9a\x86\x05\xe7\x7e\x52\x0f\x7e\x71\xff\xce\x4f\x93\xcf\x4f\xef\xb7\xbd\x52\x8f\xef\xaf\x0e\x38\xa9\x7f\x93\xd6\x20\xc7\xbe\x72\x6d\x97\x50\xcb\x92\xeb\x4e\x90\xa4\xa0\x29\xc8\x64\xc0\x49\x2c\xc7\xe8\x44\x18\x86\x1e\x32\xc9\x80\x62\x90\x08\x09\x82\x53\x5d\x4c\x18\x94\xca\x58\x52\x18\x2b\x32\x8c\x41\x22\xca\xd5\xb3\xe5\xdf\xf9\x4c\xc9\xf5\x7e\x89\x71\xf3\x7a\x8f\xe9\xf2\xd3\x5c\x58\x61\x90\x77\x77\x4c\xa3\x1c\xa9\x8b\x7a\x75\x7d\x91\x6d\xcf\xa3\xf4\x83\x6b\x13\xab\x26\x6a\x5e\xc0\x68\x31\x2b\x58\x2c\x32\x82\x50\x10\x15\xd6\x90\x64\x53\x95\x42\xd3\x51\x04\x4f\xb3\x79\x3e\x66\x38\x91\x21\x69\x5d\x90\xdd\x08\x92\xf8\x35\x57\x1e\x9d\x73\xf4\xcb\x99\x4d\xf9\xc3\xfe\xf3\xee\xda\xa7\x2f\x2a\x7e\xdc\x45\x6c\x5a\xb1\xd3\x9f\xf0\xdb\x9c\x71\x9e\xc2\x46\xd1\xd6\xfb\xd3\x2f\xd7\x96\x30\xd7\x78\x2c\xef\xc8\x98\x41\xa2\x18\x88\x1e\x0b\x34\x03\xc5\x44\x04\xb5\x58\xd0\x43\x41\x25\x6d\x55\x16\x22\x1c\xaa\xb1\xe4\x18\x41\x14\x1b\x58\x09\x30\x93\x78\x04\x51\xf3\xef\x15\xb3\xcb\x77\x3b\xf1\x2d\x5f\xf4\xdb\x19\x7f\x5e\x3c\xfc\x49\xf9\xd4\xc1\x8f\x2e\x55\x1d\x90\xd2\xb3\xb2\x7f\x7f\x59\x8b\xb2\xd3\x93\xeb\xd7\x14\x41\x50\x90\xa2\x34\x91\xf7\x63\xc9\x72\xec\xd8\xa5\x10\xcf\xea\x94\x1c\x11\x2a\xd2\x49\xdb\x04\x02\xc5\xc8\x24\x36\x03\x4e\x0b\x9d\x40\x0d\xa0\xf9\x1a\x10\x4a\xff\xc5\x4d\xbb\x29\xa7\x7a\x66\xfd\x76\xf5\xb2\x71\x5e\xd9\xaa\xbb\x8a\x90\xf5\xbe\xf7\x8f\x5c\xfd\xea\x67\x66\xc9\xa0\x37\xfe\x28\x34\xf6\xa5\xc6\xb7\xc4\x5b\x8f\x47\x8c\xc9\x74\x62\xcf\x95\x3f\xe6\x5f\x9e\x9c\xff\xd9\xf1\x3b\x7b\x76\xae\xad\xfd\x24\xf3\xa0\x31\x1f\x3c\x3d\xb0\x3e\xdf\xc2\xeb\xc9\x75\x29\xd3\x09\x64\xc9\xb4\x23\xc7\xa7\x2d\x8f\x0d\x65\x55\x54\x79\x8f\x17\x54\x93\x8d\x7c\x93\xa0\x1d\x06\x93\xd8\x86\x8e\x6a\x9a\x9a\xc9\xd8\xd0\x89\xb9\xe8\x55\x70\x50\x97\xdc\xa5\x5a\xd4\xff\x2b\xf5\x78\xd7\x3e\xbb\xd7\xae\x78\xbe\xa5\x73\xe5\x55\x83\xda\x34\xf7\x0b\xcd\x3e\x5a\x67\x75\x95\xcf\xdb\x54\x9c\x9b\xdc\x14\xc9\x91\x56\x44\xa8\xa4\x4b\x20\xcf\x54\x2d\x10\xb1\x92\x19\x41\x18\x21\x4f\x31\x45\x88\xf5\x80\x72\x45\x4e\xd6\x54\xa8\x18\x8a\x81\x0d\x82\xd4\xe3\x04\x20\x94\x9e\xeb\x87\xcf\x0b\x32\x8c\xb8\xf0\x3b\x5a\x53\xbf\xcb\xf8\xc3\xa3\xb2\xe1\x92\xc7\xd2\x9a\x7e\xf0\x30\xbb\x5e\xf6\xeb\x38\x65\x59\xfa\x35\x16\x13\x37\x09\x91\x18\x31\xa6\x15\xd1\x34\x32\x8c\x28\xe6\x5d\x41\xe5\xb1\x28\x45\x16\x23\xd3\x8c\xe9\x98\xbc\x64\x6a\x0a\x69\x9a\x71\x08\x45\x28\x38\x81\x00\x5e\x23\x1a\x94\x77\xfa\xb0\xb6\xec\xa5\xbf\xc7\x9f\x4f\xb9\xf1\xa6\xfe\x2c\xf8\xeb\x61\x9b\xc7\xc3\x71\xf6\xbe\xe7\x26\xf5\xd6\x0e\xbd\x59\xea\x83\xe4\x72\xcb\x02\x19\x8a\x1c\x65\x04\x84\x24\x19\x34\xe3\xeb\x36\x32\x81\xca\x28\x0c\x94\x48\xc7\xe4\x44\xd6\xb4\x10\x2f\x0b\xa1\xe9\x7a\xbe\x1b\x92\x14\x15\x3a\x38\x01\xf1\xf0\xa9\x87\xa5\x8b\x34\xee\xd8\x9f\x6f\x7b\x73\xc5\xf3\xc3\xf7\x7a\xff\x31\xf8\xa8\x3e\xbc\xc1\x8e\x62\x2d\x7f\xfb\xc5\x98\xb8\xb8\x54\x58\x3c\xc9\xb9\x46\xd7\x0c\x5a\xd5\x44\x89\xf1\x24\x06\x00\x53\xd2\xdc\x18\x78\x11\xe9\x0b\x91\x69\x3b\x88\x92\x22\x6c\xb8\x22\x13\xf1\x0c\x0c\x45\x46\x95\xff\x47\x22\xe1\xd5\x5c\x33\x64\xc7\xba\x53\x73\x56\x4e\x6d\x93\x77\x63\xad\x0f\xe6\xa7\x1c\x7c\x72\x67\x7d\xde\x49\x63\x7e\x21\x7f\x29\x59\xa3\xe7\xd8\x39\xfb\x86\xa7\x5f\x6b\x20\xf1\xa6\x54\x92\x14\x4c\x02\x52\x03\x54\x24\xd0\x0e\xa9\x44\xb6\xae\x13\x32\x15\xf8\x3c\x15\x7b\x08\x20\x07\x59\xb4\xca\xf8\x24\x63\x45\xa6\xa6\x83\x28\xe6\x12\xa3\x94\x32\x50\xa7\x9e\xb5\xf9\x75\xff\xfd\x65\x6d\x8b\x5f\x2f\xb3\xec\xb3\x33\xc6\x95\xf7\x9b\xb2\x61\x3f\xe3\xc5\xd3\x2b\x85\x2e\x9e\xfc\x39\x57\xb2\x89\x3f\x42\xd9\x0e\xb8\x30\x88\x68\xcb\xf6\x38\x3b\x22\x25\x57\x82\x96\xe9\x00\xc3\x97\x00\x22\x4c\x5a\xa5\x4c\x20\xb8\x30\x54\x64\x36\xb0\x43\x31\x91\x94\x4d\x97\x67\x88\xc8\x15\xb5\x7a\xe7\xad\x9e\xe5\xbf\x0d\x7a\xd7\x3b\x58\x67\xe0\x6c\x35\x7f\xd3\xce\xfb\xbe\x1b\x75\x3e\xe7\xe1\xf5\x85\x46\x27\x79\x4b\xea\x98\x32\x69\xda\x5e\x84\x25\x4f\x25\x01\xcd\x63\x96\x64\x19\xc6\x23\xbc\x50\xe3\x6d\x93\x42\x64\x14\x09\x9e\x13\x12\x11\xeb\x00\x2d\xa4\xc9\x38\x7a\xb5\xec\xcf\x6e\x39\xfa\xc8\xd9\x2b\x83\x84\x6c\x55\x8b\xbf\xc8\xa6\x31\x9b\x37\x55\x3f\xd6\xb4\xe8\xd8\x91\x13\xf5\x13\x13\x73\x6d\xcb\xd8\xbf\x7f\x72\xb7\x59\x76\x60\x50\x31\x1f\x08\x74\x48\xc8\x9a\xce\x39\xbc\xea\x84\x6a\x8c\x74\xd7\xa4\x35\x1b\x71\x84\xa3\x78\xd8\xa7\x45\x6c\xb9\x02\xa5\xdb\xb4\xa5\x83\xd7\x1c\x5c\x15\x0b\xa2\x3e\x17\xad\xb6\xa5\xa4\x2c\x0b\x4b\xa9\x59\xf6\x7d\x79\xfe\x40\xca\x91\xf7\xaf\x06\x5b\xf2\xdc\xf1\xdf\x9e\xfe\xb0\x63\xbd\x24\x3f\x31\x28\x2a\xa4\x28\x1e\x22\x5f\x42\x6e\x24\x5b\x4c\x48\xeb\x58\x32\x5c\x24\x38\x31\x83\x23\x02\x84\xa6\x1e\x72\xbe\x6d\x6a\xbe\x4a\x3b\x04\x52\x13\x41\xd8\x98\xed\x05\xd1\xf4\x9d\x2b\x53\x9a\xdd\xc9\x50\x77\x85\x76\xbf\xcb\x9a\xa8\xc8\xfa\xc9\xf4\xd6\x35\x5b\xf7\x2d\xd2\xf0\x74\xdf\x49\xb2\x3f\x1b\x91\x0f\x94\xc0\xb4\x79\xe0\xb9\x3e\xed\x50\x1e\x84\x04\x4b\xc9\xd0\x8c\x25\x3e\xd2\x25\x89\x32\x5d\x1d\x60\x93\x53\x80\x86\x28\xd3\x89\x35\xe2\x55\x7f\xfe\xca\x78\x52\x7a\x37\xb7\x69\x4e\xd5\x5d\xdc\xf4\xed\x25\xe5\xac\xbb\x53\x53\x98\xb0\x8e\x36\xe1\xad\x49\xbf\xb4\xa3\x87\x5f\x4a\xbf\x50\x72\xc2\x36\xd6\x8d\x28\x2d\x00\xae\x64\x7a\xae\xea\x19\x86\x2a\x63\x4a\xc6\x76\xc0\x23\x92\x76\x43\x57\x57\x1c\x8b\x81\x81\xcc\x1b\x8a\xe4\x87\x61\xa8\xdb\xc2\x7f\x73\x3f\xbe\x9a\xf0\x8a\x8b\x8f\xec\x1f\x2b\xe4\xdf\x59\x27\xe7\x8b\x31\x03\x88\xc6\xc2\xef\xd3\x5a\xd6\x99\xb8\xa8\xd1\xce\x4b\x9d\x73\xfd\x3a\x66\x59\x53\x37\xc9\xd7\x78\x84\xe1\xd0\x02\x15\xdb\x20\x88\x39\x3a\x52\x05\x4b\x0a\x15\xac\x51\xa6\x8a\xa0\xaf\x70\x9c\x63\x8b\x0c\x8e\x04\x6c\xeb\x4e\x2c\x3a\x8e\x6f\xbc\xcc\xf0\xfb\xaf\x8a\xd8\xb2\xb7\xd5\x59\x1a\xba\x8f\x72\x0a\x95\x5e\x33\x6d\x6b\x9d\x87\xd7\xba\x66\xfc\xe9\xc7\x1e\xe3\x6a\x7e\x7d\x72\x75\xab\x3d\xdf\xdc\xd8\x9e\xe4\xb5\x14\x2d\xc7\x54\x18\x45\x2a\xe9\x1a\x86\xe5\xf9\xaa\x18\xea\x90\x32\x78\x9f\x71\x44\x5f\xe5\x09\xd2\x51\xff\xab\xd7\x95\x10\x82\xd8\x89\x1d\x29\x20\x13\xc8\x8d\xf5\x1a\xdf\xed\x2f\xf6\x74\xe6\x87\xd9\xde\x69\xb5\x17\x56\x78\xe7\xdd\x3e\x7d\x1e\x4e\xb4\xf6\x35\x28\x5a\xff\xd3\x3b\x4d\xae\x3d\x54\x97\x24\xf7\x4b\xeb\xba\x0b\x1d\x03\xb3\x14\xab\x9a\x8e\x2a\x70\x9a\x65\x3a\x04\x8e\x78\x51\x30\xc5\x90\xb3\x59\x4e\xe5\x25\x86\xa1\xf5\x98\x66\x58\x07\x72\x9c\xe0\xbe\x86\x9c\x29\xe5\xeb\x36\x7d\x0a\x9c\x27\x96\x1c\xbc\x57\xa1\xcd\xd7\xe3\x0a\x7e\xb4\x72\x6c\xaf\x56\x8d\xea\x0f\x5c\xe7\x4d\x1b\xbb\xe0\xf3\xb6\x25\xde\x48\x72\x45\xd4\x54\x9e\x12\x6d\x23\x88\x18\x05\x85\x48\x53\x42\xd1\x67\x44\x21\x52\x2c\x9a\xe4\x65\x0d\x29\xc8\x0f\x02\x5b\x8d\x2c\x47\x56\x68\xc7\x66\x55\x95\x4c\xec\x20\xee\xda\xbd\x7b\x67\xf5\x5e\x35\xea\xe1\xe4\x53\x4b\xdb\x96\x6e\x44\x4c\xea\xff\x46\x96\xbd\x3d\x1b\xd5\xcd\x35\xf4\xfe\x01\xfc\x76\xdb\x56\x49\xde\x12\xfb\xa2\x18\x04\x62\x18\x47\x8e\x68\xfa\xaa\x28\x92\x0e\x49\xc4\xb6\x4f\x29\xb6\x69\x05\x3e\x8f\x2d\x8d\x16\x58\xcf\x33\x39\x1a\x33\x86\x24\x23\x2f\x7c\xd5\x41\xe6\x2e\xdc\xdb\xea\xd4\xd3\x81\x8b\x87\xd2\xef\x0d\xee\x5b\x69\xeb\xb4\xf3\x53\x9a\x35\x6f\x42\xdf\x5e\xf2\x6c\xf6\x8b\xcf\x9a\xef\x9a\xbf\x25\xc9\x43\x37\x27\xb6\x59\xdd\x56\x28\x49\x83\xc8\x52\x69\x4f\x20\x58\xe8\xfc\x7f\xac\x5d\x77\x54\x13\xd9\xf7\x07\x04\x05\x2b\xea\xda\x5d\xc5\xde\xdb\x24\x93\xd8\x85\x10\xbb\x6b\xd7\x75\xed\x99\xcc\x24\xd3\x33\x33\x99\x4c\x26\x63\xc3\x60\xc3\x8e\x58\x70\x6d\xac\xbd\xf7\x82\xbd\xac\x1d\x7b\x5b\x0b\x36\x14\xbb\x22\xa2\x51\x6c\xfc\xce\x48\x1e\xdf\x1f\x88\x07\x8f\x87\x7f\x34\x09\x6f\xde\xbb\xef\xbe\xcf\xfd\xdc\xfb\xee\x2b\xa3\xa0\x02\xce\xc2\x36\x8c\x44\x38\x0e\x36\xb3\x16\x98\xa5\x68\xc5\x86\x58\x39\x97\x0d\x91\x73\x67\x90\x17\x27\x4b\x36\xbe\x36\x6c\x59\x6a\x82\x35\xb9\x57\x48\x42\x17\xdf\xc5\x47\xcf\x26\x7b\xc2\xbf\x3c\xe3\xe6\xa3\xd1\xed\xd0\x7a\x83\xf3\xd9\xbd\x38\x11\x0b\x65\xe6\x79\xd1\xce\x6a\x09\x89\x74\xc8\x8a\x89\x10\x25\x99\xb6\xf0\x1a\x85\xb6\x9a\x6c\x3c\xc3\x88\x1a\x0d\x8a\x29\x9c\x53\xd6\xd1\x26\x89\x26\x7f\xf0\x6a\x6a\x71\x7e\xe7\x3f\x2c\x77\x8c\x4b\xa6\x97\xd7\x6c\xc0\x87\x31\xc5\x27\x2e\x7e\x9b\x3a\x60\x92\xb6\xbd\x6f\x4c\x42\xc1\x0f\x91\x69\xbf\x7e\x01\x50\xee\xef\x6b\xa0\x04\x2d\x67\x37\xf3\x16\xa7\x5d\x23\xa3\x10\xa5\x13\x20\x81\x43\x79\x2b\xc7\x31\x76\x5c\x27\x88\xa2\xc9\xce\x92\x66\x4e\x60\x71\xbd\xdd\x2c\x5b\x5c\x36\x42\xf9\x1e\x20\x4b\x57\x8d\xbf\xb4\x3f\x65\xdf\xe7\x3a\xc7\xcf\x5f\x1e\xfb\xb2\xf5\xd7\xe8\xe6\xbd\xde\x1c\x6b\xe3\x69\x32\xad\x64\xa3\x61\x51\xbb\x7e\x2b\x9c\xcf\xb7\x77\xa1\x7a\x48\x03\x59\x20\xce\xec\x70\x3a\x10\x52\x24\x9c\x3a\x87\x45\x6b\xc1\x18\x9d\x89\xb7\x91\x22\xea\x80\x29\x44\xd4\x9b\x65\xd2\x4e\x93\x84\x86\xc3\x78\xe5\x07\x6b\x6d\x1b\xda\x15\x7d\x39\xfa\xca\x81\xaf\x5f\xea\x16\x1f\x60\xbf\x93\xc4\x16\x38\x67\x9a\x34\x76\xe6\xab\xa4\x69\x93\x13\x62\x13\x8d\xf9\x7c\x67\x11\x82\x4b\x32\x63\x32\x5b\x49\xad\x8d\xc0\x48\x45\xc1\x1c\x12\x29\xb9\x18\x87\x88\xc2\x2e\x8e\xe3\x51\x46\x4b\xdb\x08\x59\xaf\xd7\xd1\xa4\x09\xc1\x75\xb8\x80\x53\xf0\xf7\x9a\x4e\x0d\xec\x19\xd4\x6e\xdc\x0a\xe6\xfd\x6a\xe6\xd1\xd0\x5e\xa9\xf7\x3a\xae\xa7\x9e\x9e\x21\x88\x6d\x89\x6d\x9b\x75\x5e\x78\xc8\xff\xd7\xbd\x62\xee\x17\x8e\x61\x7a\x86\xc4\x49\x41\x72\x68\x60\x98\xd7\xd9\x79\x5e\x8b\x68\x48\x0c\x97\xb4\xa8\x43\x6b\x61\x21\x4e\x16\x28\x9d\x43\x22\x30\x33\x61\x76\x52\xb2\x99\xce\xbc\xd4\xea\x5b\xa4\x37\xa9\xe0\xcf\x2d\xda\xba\xc3\x0f\xf9\x07\x67\xdf\xf4\xd0\x63\x65\x81\x0d\xaf\x46\x36\x5a\xf2\x9b\x36\x83\xe5\xce\x8c\xe0\x02\x2b\x54\xad\xa7\x3f\x7e\x7a\xe6\x24\xe7\xdb\x45\xe1\x81\xa7\xf2\xf7\xda\x3d\x04\xb3\x90\xb8\x4e\x94\x19\xbd\xc8\x0a\x94\x20\xa2\x26\x4a\xd2\xda\x4d\x7a\x58\x12\x19\x49\xcf\xb8\xac\x1c\xe6\x90\xac\x4e\xb3\xd5\x4e\x5b\x35\x66\x93\xc0\x3b\xed\x6c\xee\x7c\x63\xad\xf0\x68\x9c\xdf\xd7\xca\x17\x9a\x4e\x88\x49\x3f\xd9\xa7\xf9\xeb\x13\xb7\x83\x6e\x74\x4f\x2d\xbd\x2f\x71\x56\x6a\xd7\x63\x9f\xba\xff\xfa\x6b\xc3\x73\xbf\x97\xd1\x49\x28\x3a\x59\x11\x05\x1a\x17\x4d\x5a\x05\x56\x04\xbd\x2c\x50\x12\x6b\x25\x44\xbb\xa8\x93\x4c\xac\xe2\x10\x1c\x4e\x59\x91\xcd\x16\x1e\x82\xf5\x4e\x0a\xa5\x72\xf7\xa3\x25\x2e\xd5\x39\x57\xfe\xe3\xa2\x31\xe3\xa2\x97\xb6\xbd\x69\xca\x38\xba\xde\xee\xee\x9b\xd6\xb7\xe5\xf3\xb8\xe8\xd5\xe8\xa1\xbd\x93\xfb\xe5\xaf\xb6\x61\x44\xb4\x3b\x48\x44\xc0\xb5\x4e\x45\x26\x39\x33\x65\xe1\x50\x1a\x45\x68\x1d\xe2\xc4\x28\x4a\xcf\x63\x1c\x63\xb5\x71\x2e\x92\xe3\x60\x97\x45\x81\x34\x82\x5d\xc8\x5d\xdb\x4a\xc7\xff\xd6\x4c\xec\x54\xbf\x71\x1b\x25\xa4\x53\x5a\xc2\x68\xdf\x65\xc9\x8d\xb7\x0d\x7a\x61\xdc\xb5\x4d\xd9\x55\x67\xc3\x59\xe1\x4c\xfe\x3a\x25\xab\xc6\xa2\x95\xed\x22\xae\x63\x18\xc4\x4a\xc9\x3a\x51\x94\x1d\x9c\x8e\xb7\xf3\xb2\x20\x99\x51\xc6\xc4\xcb\x4e\x1d\x46\x5b\x08\x87\x82\xb3\x7a\x88\xa6\x04\x88\xf8\x6e\x33\x6b\x5e\xeb\xcd\x6e\x63\x48\xc4\xf0\x1c\xfb\x7f\x22\x7c\xc8\x4b\x47\xf8\x61\xc5\x3d\x27\xd7\x46\xcf\x0b\xaa\x53\x23\x12\xbf\xb9\xff\xd1\xdc\x81\xa5\xdb\x7d\xe9\x74\x96\xbd\x52\xf8\xd7\xaf\x86\xc9\x7d\x7b\x25\x2f\xe8\xf4\x7a\xc2\xc2\xa3\xb2\x9e\xa3\x49\xd9\x6c\x11\x2d\x94\x5d\xa3\x95\xb4\x8c\xa2\x47\x30\x42\xef\x70\xa0\x0e\xca\x25\x70\x94\x64\xb7\xb8\x70\x81\xc9\xbc\xfd\xe3\xfb\xc1\xc1\x5a\x9d\x3e\x3a\x2e\x12\xea\x3b\xf7\xed\x9e\xe4\x8b\x3e\xa9\x47\x36\x5e\xb6\xae\xd9\xa3\xab\xa7\x04\x4d\x34\xd4\xbe\xd0\xe7\xf1\xc1\x7c\xbe\x01\x04\xd6\x93\x9c\x96\x20\x9c\xbc\x64\xd5\x39\x58\xd4\x82\x38\x78\x42\x6b\x92\x68\xa7\x24\x2b\x88\xcc\xe0\x92\xd5\x65\x85\x45\x9e\x91\x39\x1d\x0e\x21\x8a\x68\xb7\xe5\x9e\x87\x1e\x72\xb2\xee\x26\xb6\xf9\x4b\xcf\xe9\x48\x1b\xb6\xf7\x58\xda\x01\xfe\xaf\xb6\xdd\xa3\x3c\x01\xff\xbd\xdc\xde\x75\xde\x96\xe4\x49\xbb\xf3\xd7\x14\xcc\x84\xd3\x64\x16\x14\x84\x65\x69\x42\x27\xda\x48\x45\x22\x69\x1d\x6b\x93\x10\x9a\xc2\x38\x93\x46\x43\xd3\x0c\xec\x74\xea\x51\x0d\xa2\x75\x3a\x61\x3b\xcb\x51\x74\xee\xda\xf6\xd9\xc7\x73\x11\x37\x6f\x53\x53\xaa\xbe\x58\xfe\xf2\xf5\xae\x1a\xb7\xee\x95\x15\xa3\x1e\xcd\x2a\xf2\xec\x6d\xff\x4e\x96\xce\x2f\x1a\xe4\x2f\x48\x30\x8d\xc6\x22\xd9\x19\x97\x8b\x40\x34\xb8\x45\x27\x90\x26\x9b\x0e\xe7\x05\x44\x8f\x72\x8a\x4c\xe9\x21\x9d\x59\x43\xf3\x7a\xd9\x81\x5a\x15\xc4\xa6\xe3\x9c\x0a\x2a\x7e\x67\x0a\x79\xad\x78\xb9\x8d\xfe\xfe\x3e\x05\xb2\x9b\x42\xc7\x3b\x92\x7b\xf3\xe3\x8d\xc7\x3f\xd6\x98\x57\xef\x9f\xe9\xda\xa8\x42\x5f\xa6\xef\xd8\xf5\xb6\xd6\x5e\xc3\xdc\x44\xab\xb5\xc5\xd6\xe9\xf9\xbc\xb6\xe1\x84\x34\x66\x8e\x16\x25\x0b\x27\xc0\x7a\x92\x81\x30\x01\x37\xc3\x5a\xab\x60\x81\x4d\x82\x8e\xd7\x6a\x9d\x14\x24\xeb\x1c\x1a\x2d\x67\x77\x68\x59\x9b\x2c\xfc\xe8\x45\x17\x25\x87\x6d\xba\x4b\xbe\x6d\xba\x96\xb8\xd1\x3f\x29\x6e\x55\xfd\xba\x2b\x62\xb0\x69\x5f\xcd\x6d\x37\xe1\xa9\x55\x1a\xbd\xbe\x74\x2c\x3e\x9f\x07\x87\xe7\x19\x5e\xb6\x8a\x34\x0a\x29\x2c\xe5\x30\x3b\x5d\x2c\xc6\xe9\x34\x1a\x58\x90\x9c\x14\x8f\xc8\x3a\x02\x85\x78\xb3\xa8\xe8\x71\x97\x59\x51\x10\x9b\xc3\x8e\xe7\x8e\xa9\x13\x21\x25\x2d\xf1\xd3\x8e\x2f\x23\xfa\x7c\x7c\x70\x7a\xac\x75\xcc\x85\x96\x15\xff\x2e\xd3\xa2\x79\x4c\xe8\xaa\x29\xe3\xa3\x16\xdf\xff\xf5\x03\xb6\xb9\x6a\x5b\x12\x24\xbd\x09\x87\x59\xc8\x8e\x91\x98\x80\x22\xb0\x62\xd3\xa2\x2e\x46\x83\x51\x2e\xca\x61\x41\x79\x54\x60\xed\x02\x6b\x93\xed\xb2\x4e\x71\x58\x51\x94\xa1\x7f\x60\xc1\x13\x67\xdd\xdb\x55\xf3\x6f\xae\xd8\xe4\xe8\x8b\x65\x6d\x1d\x02\x97\x1c\x98\x57\xe4\x4d\xd1\x4f\xa5\xcf\xac\x59\xb7\x73\x59\xf1\xa7\xce\x5f\xdf\x8b\x94\x7b\x7c\xa4\x47\x4d\x3a\x3b\x26\xe1\xa4\xd5\x81\x11\x76\x33\xe3\x72\x3a\x44\x5e\x83\x20\x5a\xdc\x22\xa0\x4e\x05\xb2\xa0\x0e\x97\xe2\x32\xeb\xec\x5a\xd1\x22\xe9\x4d\x98\xfd\x7f\x17\xb2\x02\x53\xc8\x6b\x31\xc6\x6d\x0c\x0c\x09\xc9\x71\xc4\x81\xab\x52\x64\x82\x7c\x82\xad\xde\x7f\x4d\x59\x26\x96\x2f\xb9\xb1\x13\x89\x6d\x68\xe4\xbe\x98\x7e\xce\x33\xf6\xc1\x0b\xf3\xa6\xfc\x3d\x65\x6b\x72\x69\x34\x2c\xa1\xe1\xb5\x2e\x1d\x63\xb2\x59\x08\x56\x94\x35\x1a\x98\x45\x49\xab\x64\xc3\x75\x4e\x98\xe6\xad\x3a\x18\x26\x21\x2b\xc5\x40\x92\x04\xd1\x88\xe2\x12\x72\x8f\x34\x52\x0b\x54\xf3\x0c\x9f\x5c\xb9\x89\x43\x9c\xa6\xd9\xbb\xb3\x6a\xe0\xe4\xdd\xfd\x4a\x5d\xe8\x74\xba\xd9\xb1\x20\xbf\x4a\x65\x2f\x8c\xbf\x9e\xdf\xc7\x0c\xf5\x5a\x27\xc3\x9b\x29\x81\x83\x39\x44\x91\xf5\x24\x21\x68\x78\x1e\x92\x2c\x04\x65\xd2\xdb\x21\x33\xa9\x23\x64\x17\x64\xb5\x61\xa8\x56\xc3\x22\x2e\x48\xf9\xc1\x69\x9f\xb7\x9f\x43\x92\x86\xdd\x0f\x15\xfb\x7e\xdc\x50\xa7\x79\xe9\xd4\x12\xc7\x9e\x87\x6c\xb6\xf7\xdf\xb7\xe3\xf0\xc1\x01\x4f\x36\x8d\x9f\xdd\x38\x7f\xa7\x09\x66\x11\x55\x68\x54\xd2\xf3\x08\x87\xc3\x56\x11\x95\x20\x8e\xc2\xac\x04\x49\x72\x12\x0c\x53\x82\xc9\x29\xf3\x3a\x1e\x66\x69\x1b\x87\x9a\x68\x33\x42\x39\x88\x1f\x88\x6d\xfb\x03\x49\x7f\x72\x6a\xe8\x1e\x68\xac\xf0\x4f\x2f\xd7\x3f\x45\x43\x98\xf1\xc6\x0f\x49\x13\xdf\x9d\x59\xde\x61\x63\xb5\xed\x03\x9e\xe5\x2f\xf1\xe8\x31\xc4\xae\x11\xac\x36\x41\x83\xe0\x90\x59\x70\xb1\x76\x3d\x84\xe8\x38\xcc\x84\x21\x0e\x8d\xdd\x29\xeb\xb4\xbc\xc3\x0a\xb1\x18\x63\xd5\x20\x18\x0d\xeb\x28\xf1\x7f\x01\xd2\xec\xce\xde\x2d\x9b\x65\x87\xfd\xee\x5b\x7d\xd0\xa9\xbb\xa7\x6b\xbe\xcd\x88\xd8\x14\xd5\x8c\x0b\xef\x5e\xff\x59\xbb\xb6\x81\xc3\x27\x5f\x68\xbf\xb7\x5e\x5b\xb7\x31\x23\xe3\x60\x5a\x8e\x0b\xdc\x5b\x32\x3d\x46\xee\xc2\x1a\xf4\xfe\x50\x75\xca\x91\x59\x2d\xf6\x57\x3f\xbf\xc5\xb8\xb5\xc1\xe2\xcf\x41\x77\xd8\xb8\xe0\x7d\xc5\x56\x8f\xca\xe7\x2b\xb0\x48\xd8\x24\xd2\x92\x03\x85\x28\x3d\xe2\x84\xed\xb2\xd5\x2e\xb8\x28\xab\x20\xd2\x88\xa2\x83\x1d\xb4\xd5\xcc\xb2\xb2\x8e\xa3\x14\x8b\x8c\x68\x44\x01\xb1\x21\xfc\xf7\x49\x64\x7a\x47\x93\xda\x69\x2f\xc6\x8e\x88\xef\xfc\xa8\x5d\x42\xfd\xba\xc9\x96\x8f\x1f\x9e\xff\x16\x5c\xb0\x9a\xf1\x5f\x72\x6f\x4b\x53\x8f\xfc\xdd\x58\x80\x10\x18\x46\xb2\x1a\x0d\xaa\xb5\x10\x82\xcc\x99\x9d\x24\xcf\x10\x5a\x09\x23\x69\xbb\x86\xd6\x42\x04\x67\x77\x99\xf4\xa8\x62\x46\x1d\x7a\x87\x22\x73\x7a\x58\x4f\xe6\x92\xf7\x3e\x74\x72\xf0\x84\x27\x33\xfb\x2d\xb2\xda\x35\x25\x5e\xac\x2f\xd2\x70\x56\xa1\x75\x1d\xa8\xda\x5f\xa2\x5a\xae\x4b\xf8\x47\x5b\xea\xdf\x3a\xf9\xbc\x0f\x5d\x61\x04\x84\x86\x74\x76\xc2\x25\xbb\x08\x94\x36\x71\x84\x4e\x4f\x0b\x8a\x8d\x63\xf4\x92\x13\xb6\xa2\x90\x8e\x96\x50\x2d\x67\x36\x6b\x58\x41\xc6\x4d\x3c\x01\xe5\xbe\xc2\x50\xf8\x77\xc1\x39\xf0\x70\xd9\x69\x8d\x4e\xd6\x2d\xc6\xcb\x8e\x31\x51\x75\x8a\xb6\xfc\x62\x2d\xdc\x65\x80\x9c\x01\xad\xfa\x42\x46\xe6\xaf\x0d\xf0\x1a\x54\xd6\xb1\xb2\x64\x42\x69\x41\xc2\xb4\x26\x3b\x89\x6b\x31\xc1\x24\x61\x1a\xc9\xce\xe9\xcd\x4e\xbd\x04\x99\x68\x4c\x91\x68\xbd\xd5\x21\x99\x65\x5e\xa2\x72\x01\x07\x67\x4b\x29\xe1\xef\x1b\x5e\x25\xb6\x60\xad\xf9\xaf\x03\xea\xb4\x3c\x19\x54\x2b\xe1\xfc\x31\xb9\x66\xb7\x82\x93\x5a\xa6\xff\x37\x6e\x55\xfe\x82\x83\xb2\x93\x84\x28\x6b\x49\x42\xa2\x14\x89\xe3\xad\x4e\x86\x96\xf5\x66\x98\x46\x71\x54\xeb\x92\xec\x88\x8b\x33\x33\x88\x95\x77\x68\x78\x1e\x75\xc0\xac\xcc\xf3\xf6\xef\x45\x9e\x99\x78\x73\xbc\xee\xd4\xd4\x0f\x27\xae\xed\x2f\x71\x65\xed\xa6\x43\x4f\xda\xee\x1c\xa7\xdd\x55\x64\xc2\x9b\x2b\xd0\xc8\x9b\xed\x8b\xfd\xfa\xf5\xbe\xb9\xbf\xa1\x5b\x74\x68\x68\x04\x73\xd2\x84\xcc\xc9\x12\xca\x72\x16\x91\x54\x5c\x0e\x46\x34\x99\x28\x0d\x85\x40\x56\xbb\x83\x56\x50\xc2\x02\x9b\x51\x9b\x8d\x71\x71\x90\x89\xc8\x1d\x1c\xad\xc2\x6e\x1e\x87\x97\xfb\xf9\x45\x05\xcd\x47\x17\xbf\xe9\xf8\xef\xc2\x65\xb3\x8f\x5e\x7b\x6a\x8c\xbb\x72\xd8\x3d\xbf\x72\xe3\x89\xbf\x9e\xb5\xca\xfd\x0c\x18\xa4\xc0\xa2\x53\xc4\x4d\x92\x06\xe3\x14\x3d\xc5\xd1\x0e\x07\x61\xa6\x58\x81\xb3\xa1\x88\x4d\xb2\xb9\x4c\x94\x16\xa3\x31\x01\xd5\x29\x12\x41\x69\x21\xad\x49\xf9\x7e\x67\xc3\x49\x78\x52\x33\x69\x4b\xd2\x7f\xeb\x0e\x5f\xd9\x5e\xbc\xe2\x85\x62\x83\x42\x0b\x2e\xed\xe9\x8a\x13\x7c\xb6\xf7\xfb\x92\xbc\x43\x0c\xce\xe7\xdc\xa0\x86\xe0\x38\xd1\x45\xe0\x56\xc6\xa5\x85\x1d\x24\x8d\x39\x21\xca\x45\x23\x36\x07\xe5\xb2\x53\x7a\x14\xb7\x59\x39\x1e\xb1\x71\x5a\xd9\x64\x33\xcb\x14\x22\x2a\xb9\xe4\x06\xcf\xf4\x3c\x09\x63\x9b\x87\x4f\x1a\x51\xbe\x4d\xf4\x82\xe8\xde\xb5\x4a\x08\x0f\x93\xc9\x84\x03\x8f\x05\xdd\xa7\x16\xc8\x94\x00\x36\x9f\x2f\x97\x31\x0b\x92\x4d\x47\x20\x10\xa1\x47\x79\x04\x41\xf4\x1c\xcd\xdb\x78\x08\x76\xb0\x2e\x98\x44\x14\x4a\x74\xc9\x26\x51\x32\x59\x35\xac\x08\xf3\x38\x07\xb1\x90\x2e\xf7\x2d\xbd\x85\x07\x1d\x1c\x35\x08\xfb\xad\xca\xe7\xf7\x35\xb7\x1d\xf7\x7b\x57\xe7\x55\x8c\xff\xb1\x81\x9b\xae\x8f\x5e\x74\xe8\x81\xf0\xa9\x64\x7c\x40\xfe\x8a\x4d\x6a\x74\xbc\xd3\xaa\x97\x08\x94\x77\xb1\x08\x43\xea\x34\x4e\x33\x62\xd3\x9b\xf4\x0e\x84\xc6\x70\x94\xc1\x4d\x24\xa4\x90\x56\x48\x2f\x68\x04\x3d\x87\x61\x34\xc1\x7f\x0f\x8e\x0f\x31\xa9\xf3\x56\xd4\x2c\xd8\x7d\x6f\xb1\xbe\x9d\xdf\x54\xfe\xe3\xde\xd6\xbe\xdd\xde\x3c\xa3\x0b\x6f\xab\x7e\x88\xd6\xc5\x77\xd0\xff\xfa\x2d\x0e\xb9\x8a\x6c\x45\x44\x2b\xe3\x90\x51\xda\x82\x92\x92\xc9\xea\xa2\xf4\x1c\x44\x3b\x30\xc1\x64\xd5\x43\x24\x26\x29\x1a\xa7\x4e\x8b\x72\x8c\xcc\x6a\x10\x1c\xd6\x8a\x04\x61\xb7\xe4\x1e\xb2\xef\x1a\x70\xf9\xee\xb4\x01\x3d\x4d\xdd\x3b\x3e\x31\xcf\xc7\xdb\x25\x0d\xfd\x63\xe0\x93\x45\x1d\x8a\x4d\xf0\x4d\x2e\x58\x3f\x2d\xf8\xe9\xfb\x7c\xbe\xc5\xcf\x81\x8b\x66\x99\x87\x29\x2d\xc2\x90\x56\x9c\x91\x11\x46\x70\xe1\x76\x93\xa4\xd3\x43\x4e\xad\x19\x13\x2c\xa2\x4c\x6b\x35\x4e\x45\xb0\xb3\x36\xc2\x84\xe3\x66\x6b\xee\xd7\x56\xcf\xf8\xa3\xeb\x5a\x34\xd4\xf7\xd3\xd5\xea\xe3\xa4\xdf\x93\xf4\x07\x5e\x3b\x92\x6a\x48\x91\x04\xf6\xb2\xcd\x2d\xa6\x75\xc7\xf4\x5f\x3f\xaf\x9b\xfb\x21\x45\x85\x42\x48\x8d\x59\x4b\x52\x2e\x0b\x2a\x6b\x10\xd6\x82\x69\x2d\x4e\x3d\x23\x3a\x15\x86\xd7\x5a\xcd\xb4\x60\xa1\xec\x3a\x93\xc2\x68\x31\xa7\x89\xc6\xb4\x24\x92\xcb\x4b\x36\xce\x2c\x2e\x5a\xb6\x6e\xe1\xa3\x95\x8e\x07\x2c\xf3\x94\x4e\x3b\x1e\xbb\xe3\x51\x15\xed\x33\xf6\x77\xdd\xa9\x0d\x71\x52\xd9\x31\x7d\x7f\xfd\x4d\x44\xb9\xc6\xdf\x0a\xcf\x58\x51\x8b\xa8\xb3\x31\xa4\xd6\xa4\x35\xd9\x30\xc6\x2c\xea\x45\xc8\xc2\x0a\xa4\x8c\x38\x1c\xb0\x16\x15\x38\x0b\x6b\x77\x41\x8c\x85\x91\x2d\xb2\x99\x21\x5c\xdf\xb3\x47\x46\x8f\x93\xbb\x67\x27\x2d\xe0\xd2\x12\x76\xbe\x59\x99\xac\x1d\x79\x75\x5b\xbb\xd6\x57\xd7\x9d\x27\x17\xed\x4b\x9d\x53\x63\x38\x93\xbf\xb7\xdc\x98\x38\xbb\x56\x24\x39\x08\xb1\x9b\x39\xbb\x2c\x12\x0c\x4f\x21\x1c\x23\x88\x82\x22\x89\x76\x96\x24\x34\x92\x8d\x75\xe0\x3a\x4c\x70\xf0\x04\x4e\x43\x5a\xbb\x28\xfc\x20\xff\xc5\x7e\xea\x45\x18\x0a\xe3\xa9\x3b\xa7\x94\xdc\xec\xd7\xa5\x5d\xd9\xba\x6b\x7b\x04\x1c\xed\xfd\x71\x4a\xc8\xa4\x03\xdb\x66\x06\x3e\x0d\xca\x5f\x4d\xeb\x35\xb8\x95\xd1\x8b\xb2\x59\x64\xed\x56\x14\x16\x59\xad\xce\x05\x39\xb4\xb8\x56\x90\x69\x9d\xde\x4e\xb3\x2e\x58\x70\x90\x1a\x1a\xd6\xc1\x16\xda\x8a\x32\x92\xc2\xe7\xbe\x5b\xc7\xd1\xb0\x64\xad\xe9\xe5\x06\x55\xb5\xee\x60\xc2\x5b\x3e\x0d\xdf\xfe\xe4\x74\x9d\x45\xcd\x12\xdb\xc5\x97\x1b\x58\x7c\xeb\x95\xfd\x7c\xf3\xfc\xd5\x36\x69\xc5\x24\x99\x57\xcc\x34\x6e\xb5\xd3\x94\xfa\x1f\x2e\x58\x65\x3d\x26\x10\x56\x9b\x0b\x82\x39\x0d\x06\xc1\x14\x25\x3b\x04\xb3\x42\x28\x8c\x9d\xa2\x48\xfa\xfb\xd8\x63\x47\x8f\x9b\x9a\xad\x1d\x8a\x06\x75\x2b\xf3\xa6\xe5\x7b\x24\x71\xac\xc9\xf5\x34\xf0\x52\xc8\xed\x7a\x11\x55\x3e\x05\xf7\x58\xd7\x39\x9f\xdf\xae\x25\xb2\x0e\xd6\x65\x37\x59\x48\x2b\x4e\xb0\x56\xb3\xa2\x31\xdb\x20\x8b\xd6\x69\x75\x29\xb8\x8b\x37\xd9\x10\xb3\x1d\xc1\x65\x97\x49\x44\x9c\x1a\xd9\xca\x23\x84\x8e\x46\xbf\x37\xc3\x63\x29\x4e\xb9\xfc\x86\xfe\xb6\x22\x7e\x37\x2f\x9c\xad\xfd\xd7\xe5\xde\xa9\xee\x6a\x0b\x02\xa6\xae\xdc\xfc\xb2\x86\xdf\xdd\xbd\x1f\x8b\xe7\xaf\x13\x77\x99\x2c\x2e\x33\x61\xe2\x6d\x5a\x04\x16\xad\x16\x56\x90\x64\x98\x85\x68\xbb\xd6\xae\x75\xd0\x0a\xa9\x73\x3a\x2d\x3a\x46\xef\xd2\x93\x2e\x0d\x8b\xd1\x7a\x58\xcc\x76\x32\xed\xff\x6f\x1b\x1d\x50\x6a\xfb\xad\x02\x2d\x18\x3c\xbc\xf4\xa1\x32\x44\x62\x91\xe8\x19\x65\x25\x34\x31\x71\x87\x30\xed\xdc\x28\x72\x4b\x35\xaa\x5c\xf6\xd2\xb7\xef\x45\x5e\x43\xd7\x34\xa8\xe7\x6e\x77\x20\x74\xf8\xc8\xa3\xb1\x6b\x3f\xfd\xb6\x76\xff\x96\x1a\x05\x84\x67\xc9\xaf\x6e\x34\x68\x5e\x28\x9b\xbd\xd4\x78\xe1\xdf\xc1\xff\xed\xb3\x5d\xdd\x5e\x77\x9e\xd3\x58\x36\xae\x9a\xdb\x75\x46\xeb\xe6\xb6\x3e\x57\x1e\x22\xdd\xfd\x1a\xa6\x7f\x9e\x91\xcf\xa3\xe8\xa4\x58\x59\x12\x59\xc2\x45\x4b\xa2\x45\xc0\xb5\xb0\xde\x0a\x0b\x88\x4b\xd0\x32\xb2\x9e\xb4\x92\x38\x84\x4b\x88\x85\x82\x25\xd9\x45\x60\xa8\xcc\x4a\x66\x28\xf7\x20\xc1\x35\x76\x72\x29\x09\x29\xbf\xb3\xc7\xa7\x2f\x87\xa3\xb9\xa3\xd5\xc5\xa9\x77\xfb\x97\xa9\xb1\xf8\x42\xa9\x96\x63\xae\xdd\xaf\xf8\xd6\x93\xbf\x1e\xd7\x84\xd0\x1a\x1d\x6a\x85\xcc\x76\x99\xd2\x68\x2c\x12\xe1\xa2\x30\x4e\xd0\x69\xec\x56\xce\xe2\xb4\x9a\x39\x17\x2b\xba\x30\xc6\x29\x38\x69\xd4\xe5\x84\xbe\xbd\x72\xfb\x7b\xf0\x8d\x4b\x3d\x57\x78\xf8\x99\xcd\xf5\x3d\x55\xa1\x08\xe2\xbf\x29\xb7\x7f\xbf\x5d\xa3\x64\xa1\x95\x8b\xca\xa4\xb7\xe8\xf0\x6e\xea\x6f\xc2\xaf\xbf\xb1\x28\xf7\xb5\x7c\x4e\xe3\x40\x48\xc8\xa1\x61\x38\x0b\x22\x21\x0a\xca\x40\x14\x44\xe0\x66\xc5\x85\xf1\x7a\x92\xa4\xb5\x2e\x97\x16\x72\xd9\x59\xd8\x4e\xb3\x10\xc2\x5a\x2d\xe6\x1f\x2c\x8a\x17\x96\x99\x66\xb1\xef\xaf\xb7\xdf\x7b\x7a\x4f\xc1\xd9\x63\xd2\x7d\x1e\x52\xb7\xd7\x35\xfa\x80\x8f\x0e\xa9\xd9\xf4\x6d\xcd\x17\x3d\x62\xf3\x79\x2d\xdf\x24\x23\x1c\x06\xd9\xcc\x26\x45\x67\xc7\xf4\x04\x0f\x11\x16\x8d\x95\x92\x35\xbc\x43\xb1\x31\x8c\x03\xa2\x45\x91\x74\x90\x28\x44\x32\x10\xe2\xd0\xb3\x08\x91\xcb\x94\x39\xa6\xd9\xf6\xdf\x7a\x5c\xad\xf0\xfe\x62\xd7\x27\xdc\xe3\x4d\xa3\xdb\xf7\xac\xfb\xfe\x48\x8f\x4d\x7d\xf1\xc9\x1f\xef\x56\xab\x7a\x21\x21\x7f\x97\x6e\x10\x8d\x15\xe2\x39\x9d\x19\x21\x44\xda\x66\x35\xc1\xa2\xc6\x81\xeb\x1c\x56\x0b\x0b\xe1\x66\x33\xa2\xd5\x58\x31\xa7\x80\xe9\x61\x1b\xed\xc0\x70\x1d\x63\x71\x68\x71\xde\xfc\x83\xd3\x28\x3b\x5b\x09\xc1\x37\x62\xc6\x0f\x1f\xd4\x27\xb6\xef\xae\x01\xba\x19\xbd\x0f\x5f\x18\x39\x32\x72\x76\xa1\xd2\x5c\x74\xd2\x87\xe1\x8b\xdb\x65\x33\xdc\x51\x7d\xc9\xee\xa5\x7a\x60\xae\xf3\x8f\xfa\x84\xc7\xad\xa9\x98\xf8\xe8\x49\x9f\x69\xad\x57\x75\x5b\x3a\x7e\xca\x9e\xe2\xb7\x56\x96\xf9\xf5\xf3\x58\xb9\x3a\x3a\xc2\xc4\x4b\x34\xa1\x15\x35\xb0\x59\xc2\x04\x1b\xa2\xb3\x3b\x79\x82\xb5\x12\x16\xd4\x6e\x57\x08\xc6\xe1\x30\x4b\xa2\x9d\xb6\x68\x34\x56\x4e\xb6\xea\x29\x44\xa1\x88\xdc\x73\x63\xe3\x8b\x2f\xb8\xe6\x0a\x28\x55\x79\xe5\xb0\x8c\xc0\xf3\x0b\xc3\xea\xaf\x48\xc0\xf7\x34\x39\xb2\x28\x6d\x62\x06\x35\xe2\x52\xbf\x53\x55\xf3\x97\x82\x65\x82\x30\xb3\x34\x27\xd2\x5a\x8d\x9e\xd5\xeb\x08\x8e\x25\x70\x52\xd0\x48\x1a\x93\xd5\xe6\x30\xe9\x79\x9c\xb2\xe9\x2d\xa4\xa2\x77\x71\x4e\x97\x83\x63\xac\xa6\x1f\xf9\xe7\x6b\x53\x63\xc4\xa6\x41\x6b\xe6\x3f\xe8\xd9\xb5\x5e\x17\x9f\x09\x1f\x2b\x8d\x14\xca\x8d\x8a\xdd\xda\x73\x0f\xfe\xde\x53\xaf\xd7\xb5\x7c\x3e\x4a\x66\xe1\x61\x48\x94\x29\x54\x16\x21\x17\x0a\xc9\x24\xca\x3a\x34\x88\x09\xb6\x63\x10\x87\x9a\xec\xb0\x85\x26\xec\x1a\x94\xb3\x53\x66\x19\x35\x31\x18\x27\x20\x64\x2e\x17\xe8\xdd\x96\xfd\xeb\xbe\x5c\xdf\xde\x78\xa3\x78\x3d\x43\x74\x9d\x57\xdd\x03\x27\xf6\x40\xca\xd9\xe3\xf7\x9c\xb9\x74\xbc\x50\x97\xad\x63\x7f\xfd\xaa\xdf\xdc\xcf\xcd\x2a\x32\xa3\xa3\x19\x27\xcf\x73\x3a\x19\x12\x60\x5a\xeb\xd4\x58\x09\xdc\x66\x86\x48\x11\x63\x74\xb8\x93\xc2\x4d\x36\xc8\x41\xc0\x16\x54\xb6\x9b\x6d\x22\x6d\xcf\xe5\x0e\xcb\x3b\xb1\x7f\x75\xde\xb3\xab\xbf\x4f\xe4\x8b\xb4\x4b\x33\xd3\xa6\x4c\xaa\xdf\x67\x45\xd5\x2a\x77\x4b\x4c\x1d\x50\x9a\xfe\xbd\xdd\xb5\xa1\xf9\xfb\x76\x34\x84\xc1\x4c\x66\x98\xa5\xb4\x08\xc1\x29\x56\x94\x70\x3a\x64\x4c\x84\x10\x93\x56\x31\x71\x9c\x6c\x36\x91\xbc\x44\x9b\xb5\x26\x17\xcb\x09\x8a\x96\x85\x08\xd4\xe6\xc2\x73\xa7\xc8\x36\x54\xd4\x3e\x7b\xf7\xa3\xef\x76\x49\xf3\x62\x8d\x5b\xca\x4a\xe3\xdc\x2f\x23\x4f\x7f\x0a\xaf\xdd\xfe\xe1\xa2\xe2\x3d\xee\x44\xce\xc9\xe7\xab\x37\xed\x34\x0e\x29\x3a\x16\xc6\x60\x84\xd7\xe2\x76\x3b\x6d\x71\x58\x4c\x0e\x06\xa2\x35\xb4\x4e\x11\x59\x17\x8c\x99\x29\x01\x86\x70\xdc\xac\xc5\x28\xdc\x46\x99\x73\xd1\xf4\xbc\xe8\xdf\x53\x4f\x3f\x3a\x3d\xa0\x44\xb1\xb0\xfb\x6f\x9b\x8f\x89\x3d\xb1\x7b\x5e\xd1\x6a\x15\xe0\xcf\xb5\x6f\x8d\x4e\xe9\x1b\x1b\x9d\xcf\xb7\x2b\xea\xec\x36\x98\xb2\x5b\x49\x4a\xd2\xd3\xa8\x82\xc8\xa2\x28\xb1\x3c\x49\x6a\x9d\xb0\x24\x43\x12\x2e\x5b\xac\x24\x4e\xf1\xb0\xac\x77\x9a\x44\xab\x1e\xb6\xa1\x1a\x2c\xf7\xc4\x51\xeb\x7a\x77\xfa\x24\x46\xf9\x15\xde\xbd\x78\xee\xf4\x09\x87\xcb\xa6\x1c\xc4\x6a\x6e\x7d\x90\xaa\x39\x89\x0f\x3f\x32\x63\x40\xff\xe6\x51\xf9\x2b\xb6\x99\x45\x5c\x24\xae\xd8\xad\x0e\x1c\x87\xb4\xa4\x2c\x72\x32\x42\x0b\xbc\x1e\xa2\x61\x81\x37\x11\x1c\x27\xf3\x5a\xb3\x5d\x24\x2d\x56\x9a\xa6\x38\x14\x22\x5c\x9a\xef\xdd\xfe\xa3\x19\x91\xf5\x56\x9f\x6e\x3e\xa8\x6d\xad\x9b\xff\xd6\x84\x76\x19\x93\x9a\xbd\xfb\x23\x6e\xbc\x67\xf0\x69\x39\x29\xa4\x55\x86\xe7\xd7\xf7\xa6\xe4\x9e\x25\x97\x30\xd8\x69\xa1\x74\x66\x13\xab\x28\xb4\x53\x0f\x43\xbc\xc9\xc6\xb8\x68\xde\xc9\x92\x88\xc6\x66\xe3\xf4\x56\x9b\x1e\x12\x24\x5a\xcf\xa2\x18\xac\x37\x89\x90\xf4\x3d\x73\xa4\x3f\xdc\x1b\xc1\x37\x08\x5c\x5b\xba\x3a\xef\x73\xc4\xf0\x26\x24\xa3\xfa\xe7\xc7\xef\xe6\xf9\x2f\x59\xe0\x1b\xdc\x67\xe0\x57\xd7\xa1\x7c\x4e\xcf\x49\x10\xc9\x43\x36\xbd\x82\x52\x08\xaa\xd5\x92\x08\x8a\xd0\x18\xe1\x14\xed\x4e\x1d\x65\x31\x99\x61\x49\xc3\x2b\x1a\xb3\x03\xd7\x89\xa8\x5e\x63\x95\x30\x1b\xff\x83\xac\x62\x8d\x1d\x35\x8f\x75\x7d\x12\xfa\x35\x71\xd1\xa8\x67\x21\xe6\xe8\xc1\x43\xfb\xbc\xa8\x39\xee\xbf\x27\xd3\xa3\x1d\x05\xfe\xbd\xb0\x76\xdc\xaf\xe7\xbb\x72\xbf\x4e\x96\xd1\xb9\x24\x44\xd6\x48\xb0\x8d\xb6\x30\x56\x8a\xc4\x28\x91\x80\x69\x98\x35\xe9\x50\x82\xe7\x2c\x02\x6d\x16\x75\x04\xe2\x40\x6c\x30\x06\x2b\x1c\x69\x25\xe8\xef\xcd\xf0\x2f\x73\xd3\xe5\x71\x55\x57\xbf\x88\x3c\xfe\x11\x21\xb4\xfb\xde\xdd\x2e\xdd\x60\xd3\x9f\x3b\x36\xc6\xaf\xed\xd5\x73\x74\xbd\x93\xa9\xbf\x7e\xed\x49\xae\x31\xa1\x8c\xd9\x18\x93\x03\x21\x71\xa7\xec\x10\xb5\x36\x93\xc2\x43\x1a\x3d\xe3\x54\xac\x22\x29\xb8\xec\x22\x07\x89\x32\xce\x6b\x50\x2d\x26\x39\x21\x9d\x2c\x68\x2d\xff\xef\xad\x72\x59\x22\x3f\x78\xf0\x62\xf6\xa2\x8f\x0b\x1f\x98\xfd\xf7\x3a\x13\x16\xfb\x77\x08\x5c\x71\x46\x4a\x6f\xf8\xd7\x6e\x08\xda\x7c\xb9\xf5\xa2\x21\xe3\xf3\x57\xcb\x76\xd6\x4a\xd8\x20\x0b\xc7\x90\x8c\x85\x71\x5a\x08\xb3\xd5\xa4\xc0\xa8\x99\xb6\xb0\x34\x29\x33\x9c\x16\x43\x6d\xbc\x99\xd3\xd9\x4d\x3a\x54\x6b\x75\x32\xac\x40\xfe\x68\x0e\xb5\xeb\xfe\x8a\x88\x93\x0d\xff\x18\x5b\x1d\xeb\xda\xbe\x15\xa5\xab\x33\xf2\x96\xa1\xf3\xa2\x83\x95\x2b\x1e\x46\xaf\x2e\x5d\x5c\x94\xbf\x97\xbd\xf4\xd2\x3a\x5b\x83\x74\x9e\x2e\x23\x27\x6d\xdd\xbe\xa5\x56\xad\x47\x6f\xfb\x19\xba\xef\xe8\x9b\xf4\x4f\x87\x92\x05\xca\xad\x69\x52\x3a\x34\x24\x1b\xf0\xfa\xae\xae\x31\xb8\xff\x96\x36\x95\x1a\x5f\x5d\x20\x46\x37\xea\xd5\x18\x29\x75\x02\xfe\xf3\xe2\xad\x80\x13\xc7\x2b\xd9\x5f\x56\xd6\xff\xfa\xfb\x2e\x73\x5f\xa2\xa1\x48\x1c\xb7\xba\xcc\x98\x9e\xc0\x48\x1d\x2c\xb1\x14\x64\x72\xca\x1c\xe2\x52\x38\x54\x36\x2b\x3a\x56\x42\x30\xda\x0c\xc1\x90\xdd\x6e\xb1\x60\x82\xc0\xf0\xb9\x1c\xd4\x8b\xd8\xbc\xff\xdc\xe3\x6b\x87\xfb\x3e\xeb\x7b\x4e\x78\x8f\x14\x5b\xdb\xea\x8d\xaf\x67\x7c\x75\xfb\x85\xd2\x75\xde\x94\xaf\x14\x31\x25\x7f\x57\x95\x10\xb3\xcb\xe5\x50\x38\x87\xd9\x66\x67\x2d\x5a\x07\x2b\x5a\x79\x5a\xd0\x29\x26\x17\x2f\x5a\x74\x34\x6b\xb2\x69\x1c\xac\x68\x16\x60\xd2\xc5\x9b\x60\xad\x20\x89\x3c\xa9\xfb\x5e\xe4\xf3\xc5\x82\x1f\xfd\xf5\x04\xd1\xa2\xb3\x9a\x0f\x2c\x38\xf4\x42\xbf\x0d\x29\x4b\x67\xf7\x8c\xfb\xc8\x2d\xad\x30\x76\x15\xf1\x3a\x1c\xcf\x5f\xe0\x39\xed\x76\xd6\x8c\x31\x10\x82\x32\x5a\x59\xb0\xda\x58\x9b\x8b\xc2\xb4\x56\xad\x4d\x10\x10\xc6\x8a\xc1\x0c\x87\x40\x5a\x9d\x8b\xc1\x09\x8d\xc0\xe9\xb5\x9c\x95\x77\xe4\xbe\xd5\x75\xf2\xa6\xda\x67\x4b\x46\x96\x2e\x9a\xe2\xb7\xfa\x56\x52\x9f\xcf\x3b\x4b\x0a\x2d\x5c\xda\xa0\x8f\xa3\xea\x6d\xaf\x66\x18\xd3\xea\xaf\x5f\xbf\x7a\x39\x57\x4d\xa3\x22\x49\x2a\x30\x63\x46\x5c\x66\x0b\xed\xb2\x29\x76\x3d\x2f\x29\xb4\x1d\xb5\x99\x6c\x30\x67\xd2\x9a\x18\x2d\x2a\xb1\x3a\x27\x49\x9a\x45\xad\xd9\x65\x73\xe2\x0a\xfd\xbd\xa6\xd7\xad\xde\x4b\xb0\x07\x8a\x6d\x18\x35\x21\xf8\x48\xd7\xb8\xa2\xb3\xe6\xb7\xf9\xfc\xbe\xec\x84\x62\x0f\xff\xc6\xa8\xcb\xad\xcf\x1f\xfb\xf5\xbb\x41\x73\x15\x99\x72\x09\x32\x2f\xbb\x5c\x66\x27\xc1\x38\xf5\x88\x59\x80\x09\xa7\xc8\xe0\xa2\x6c\x31\xdb\x2c\x14\x64\x32\x89\x16\x81\x71\x12\x90\xc0\x90\xa2\x5d\xe0\x05\x3c\x73\xd9\xfd\xfb\x74\xf6\xad\xc7\xe5\x5a\x37\x7c\x60\xac\xb9\x21\x76\xce\x94\x37\xe3\xfe\x1a\xf6\xea\x6b\xef\xb1\x7f\xd6\x6f\x31\x0a\x7f\xba\xe7\xe6\x07\xa8\x42\xf5\xfc\x25\x53\xc5\xc6\x3b\x10\xab\xc8\xd9\x4c\x3a\xc1\x82\x71\xa4\xd6\x66\xe7\x74\x84\x06\x17\x60\x08\xa6\x49\x97\x2c\x93\x16\x9c\xd6\xd2\xa4\xdd\x6c\xc2\x50\x1a\xb3\x42\xe4\x8f\xde\xad\xdb\x60\x53\xbb\x56\xf5\xa5\x51\xf1\x53\xc9\xf0\xcf\x93\x9f\xdc\x78\x13\xb5\x05\xb6\xef\x6c\x3f\x49\x38\xf3\xd9\x18\xf2\xaa\xe2\xa4\x8e\xd9\xb8\x46\xd7\xf2\xf2\x09\xba\xdf\xb6\xf9\x25\x0b\x1d\x4e\xf6\xbf\x54\xbb\xe4\xc3\x6e\x6d\xae\xaf\x8f\xa9\xf8\x20\xa5\xeb\x6f\x89\xf3\x1c\x9b\xab\xe4\x73\xce\x1e\x77\xb2\x3c\x47\x71\x2c\x8e\x33\xb0\x64\xa3\x19\x81\x22\x5c\x56\xde\x64\xa1\xf5\x04\x8c\x99\x45\xb3\x05\xc5\x09\x98\x22\x48\x8b\x24\x41\x36\x17\xa3\x85\xf0\xef\x3d\x86\xe0\xda\xd5\x66\x70\xa5\xf8\xcd\xb7\x8f\x16\xaa\x5b\xb1\x6e\x9f\xc2\x8b\x57\x36\x7a\xb0\xe1\xe0\xa1\x91\x1a\xba\xd2\x8d\xe5\xee\x2b\xbf\x3e\xe5\xcb\x55\x64\x1c\xb1\x92\x12\x07\xa1\x26\x4c\xb2\x40\x7a\x56\x10\x61\x8a\x30\x29\x2e\x18\xd1\x8a\x66\xde\x89\x13\x0e\x89\xc6\x34\x16\x5a\x47\x3a\x45\xb3\x24\xe9\xed\x32\x9d\xcb\x52\xf0\x97\xbd\x47\x46\x07\x9b\x63\xae\x35\xd3\x3f\xdb\x75\x67\xd3\xdb\xc0\x0a\x25\x4e\x9e\xbf\xb2\xfd\xd6\xa8\x09\x89\xad\xf9\xf9\xfd\xbb\xe7\xf3\x09\x17\xd2\x66\x52\x9c\x66\x56\x27\xc1\x1a\x3d\x85\x3a\x20\x94\xa1\x39\x2b\xac\x61\x5c\x18\x8e\x20\x2e\x8b\x44\xba\x9c\xac\x84\x8b\x76\xb3\x0d\x27\xf4\x3a\x3d\xab\xd0\x44\xee\x5c\xd3\x12\x5f\x32\x61\x44\x42\xd5\x53\x01\x7f\x27\x36\x1d\x34\x4f\xd7\xe7\x9f\x72\xcd\x3a\x9f\x7d\xbc\xa1\x5a\xa7\x93\xed\x66\x2c\x68\x72\xe6\xd7\x77\x51\xfe\x60\xca\xa7\x77\xd2\x76\x07\x61\xd1\x28\xa4\xa0\x63\x1d\x0c\x2c\xc1\x2e\x56\xe4\x31\x01\x91\x51\x84\xb2\xf2\x5a\x02\x16\x21\x87\x15\x11\x14\xc6\xc4\x92\x66\x9a\x27\xbf\x8f\x80\xa6\x45\x28\x6b\xef\xfb\xdc\x8c\x13\x7a\xd5\x3a\x98\x3a\xfe\x7d\xd5\x0d\x2b\x1e\x0e\x98\xd0\xd6\xb0\xf9\xcc\xe2\x87\xe5\x2d\x23\xda\x3f\xcf\x5f\x70\x38\x28\xca\xce\x0a\x36\x98\x40\x9c\x18\xec\xb4\xba\x70\xda\xe1\x72\xb9\x20\xd8\x0a\xa1\x5a\x8a\xb3\x12\x88\xde\x46\xd9\x50\x98\x42\x39\x8d\x0c\x13\x16\x0b\x9b\xf9\xf2\xab\xef\xa7\x7c\x1b\xaa\x8e\xf8\x6d\xcb\xba\xf6\xc7\x2b\x4d\xde\xf5\xb1\xc0\xed\xf2\xae\xe7\xd5\x9f\xeb\x6b\x32\x41\xee\x74\x9f\xbe\x89\x83\xba\x39\x7e\x7d\xe3\x67\xee\x3b\x93\x74\x10\x49\xdb\x35\x3c\x27\xeb\x4d\x16\xa7\x49\xa3\xc5\x09\x4e\x21\x35\xb8\x24\x8a\x56\x86\x13\x4c\xa4\xac\xb1\xa1\x98\xc8\x8b\x16\x8b\x44\x40\x10\x8a\x98\x4d\xdf\x6b\xfa\xec\xee\x7b\x75\x6e\x57\x28\x33\xba\x52\xeb\x3e\x6b\x76\x84\xb4\x2e\x5b\xf4\xc9\x98\x59\xb7\xe7\xcf\xb8\x78\xfe\x5c\xfc\xc4\xc3\x61\xd1\x0f\xf2\x57\x64\x85\xe0\x28\x51\x16\x2d\xb4\xde\xce\xf1\x76\x13\xcc\x5a\x70\xda\xc5\xcb\x10\x8c\xea\x65\x9d\x0e\x33\x93\x0e\x17\xac\x57\x1c\x3a\x9e\xb4\x2a\x0e\x1c\x46\x71\x13\xf4\xdd\xb5\x8d\x79\xa5\xbd\xdd\xc6\x10\x5f\x3f\xff\xec\x1b\xf4\x3a\xad\x8f\xa8\x36\xed\xc8\x87\xa0\xd7\x6b\x88\xb8\xd1\x29\xab\xc3\x27\xb7\xea\x76\xd3\x01\x6d\xd6\x14\x5f\x57\xa6\x60\x8f\xf8\xee\x43\xf3\xd7\x77\xe9\x58\x5e\x41\x70\x86\x97\x65\x0d\x23\xf3\x1c\x2b\x51\x26\x46\xcf\x2a\x16\x1d\xe1\x40\x51\x3b\xc7\x71\x56\x1d\xe1\xb0\xd0\xb8\xdd\x89\xe0\x30\x46\xd0\x8c\xe9\x07\xf7\x70\xd4\x1e\xfe\xb0\xdc\xbe\xbf\xea\x92\x01\x67\xfd\x4b\x8e\xae\xdb\x7b\xe8\xcb\xee\x37\x1d\xd6\xf6\xe6\xf9\x57\xf7\x4b\x1f\x38\x7b\xd3\x7c\x4e\x8b\xe9\x1d\x66\xd6\x4a\x21\x98\xe0\x10\x5d\x32\x83\x99\x2c\x12\xa7\x28\xb8\x13\xd2\xdb\xb5\x9c\x9e\x90\x78\x87\x6c\xd2\x51\xac\x20\x5b\x38\x8e\x87\x58\x48\x23\x11\x3f\xc8\xe6\x89\xbf\x37\x4c\x3b\x19\x74\x69\x7f\xb1\x06\xc5\x2a\x41\x7d\x7b\xd7\x6e\x5b\xf5\x54\xe2\xca\x9b\x3e\x5b\xa3\x02\x9c\xd6\xe1\x93\x8c\xcb\xf2\x77\x72\x0b\x09\x9c\x1e\x75\x91\x1a\x33\xa2\xc0\x7a\x05\xd3\xe2\xb2\x4b\xe1\x19\x82\xe7\x11\x4e\xe7\xd4\x99\xf4\x0a\x45\xa3\x26\x9c\xb7\x93\x38\xa5\x11\xf4\x8c\x05\x22\x7e\x70\x7d\xc8\x88\xed\xc9\x87\x7d\x57\x1e\xc4\x25\xf9\x52\x6b\xff\x20\x06\x4e\x3d\x5c\xb1\x7a\x2b\x71\xaa\xdf\xa0\xd7\x0f\xeb\x24\x64\xbc\xfe\xf5\x6d\x33\xb9\x93\x0e\x2c\x3a\x51\xd4\x69\xc3\x35\x04\x2f\xea\xb5\x4e\x94\x81\x49\x2b\x8a\xe0\x02\xab\x91\x20\x5e\x87\x38\xec\x0e\x12\xd6\x91\x10\x8c\x50\x7a\x3d\x4f\x0a\xe4\xff\x3b\xc1\x00\xce\xf2\xe4\xb5\xa6\xe3\x0e\x2f\x1c\xea\x97\xdd\x12\xaa\x6c\xab\x33\xb1\x6d\xc9\x75\xbe\xb6\x99\x87\x60\xf3\xda\x97\x91\x2f\x9a\xb6\x69\xf4\xc4\xf0\xac\x8f\x58\x72\xf3\xa3\x76\x95\x2f\x6b\xf2\xd7\x12\x68\xab\x43\x87\xb1\xac\x4b\x63\x91\xed\x98\x13\xd1\x6b\x50\x94\xe7\x14\xad\xa8\x27\xac\x36\x1c\xd3\x5a\x11\x46\xe3\xe2\x1d\x02\xe3\x80\x39\xce\xcc\x20\xb2\x16\x42\x73\xb7\x04\xff\xd8\xf0\x43\xff\xf9\x2d\x68\x7e\xc4\x38\xa6\xda\xd9\xaf\x5b\x4f\x56\x1b\x56\x39\xea\x75\xb5\x60\x76\x59\xfc\xae\xf0\xf5\xf5\xdf\x35\xcd\xe7\x1b\xdd\x14\x07\x67\x77\xe2\x92\xde\x8e\xe9\x79\x91\xd5\xd0\x5a\x0b\x63\xd1\x6b\xf4\x3c\x4d\x53\x4e\xce\x66\xd2\x40\x18\xe5\xb4\xa3\xac\x60\x86\x21\x96\xb0\x39\x1d\x76\x38\x77\x4b\x38\x7e\xac\x58\x83\x4e\x95\x27\x2a\xcd\x0b\xbf\xd5\xce\x7c\x9c\x56\xd2\x2f\x38\x34\x65\x69\xa5\xe3\xc1\xc5\x3a\xd5\xdb\x3d\xe2\x4c\xbb\x5f\xbf\xac\x25\xf7\x77\xc1\x09\xac\xde\xca\x32\x2e\x89\x23\x60\x5e\x36\xeb\x6c\x84\x6c\xb7\x72\xa8\xe8\x20\x9d\xb0\xc5\x46\x21\x30\x83\x42\x0e\x44\xc4\x34\x56\x0c\x72\x11\x3a\x9d\x3e\xf3\xc2\xe7\xef\xc5\x5e\xb6\x3f\x1d\x2a\xb8\x45\x81\xdf\x8d\x21\x3f\x8f\x9b\x59\xdb\xed\x8a\xba\xbe\xf1\xd8\xa9\x43\x86\x7e\x35\xda\x3f\xdb\x10\x55\x4e\xcc\x5f\x6d\x9b\xb5\x8a\xdd\x2e\xc0\xbc\xd6\x49\x20\x76\xb3\x15\xd6\x72\x1a\xc2\x49\x88\x26\x98\x22\x20\xa7\xc5\x84\xa3\x76\x93\x59\xa3\x45\x44\xd4\x49\x9a\x31\x9e\xd4\xa1\x84\x94\x25\x36\xb8\x8d\x3b\xaf\x45\x12\xb7\xf1\x50\x27\x9f\xd0\xec\xb7\x71\x2f\x6e\x03\xa5\xf7\xd2\x8e\x7e\xd6\xa5\xfd\x90\x57\x5f\x4f\xfd\xb3\x79\x69\x4b\xaa\x41\xbd\x16\x9d\x9b\x74\xc6\x36\x9c\x2c\xd8\xfb\x6c\xfe\xba\x3e\x93\x45\xeb\xd4\x99\x34\x16\xc4\xaa\xb0\x08\xc2\xb1\x04\x61\xd6\x90\x3a\x84\xd7\x31\xbc\x86\x73\xa2\x90\x4e\xb2\xa1\x56\x5e\x41\x14\xa7\x40\x98\x14\xab\x15\x67\xb2\x9f\x92\xfc\x7f\x37\x8f\x4c\xc4\xca\xd1\x47\x17\xf4\x9d\x1a\x5e\x2c\xd5\x70\xf9\xe6\x79\xdd\xab\x8d\x41\xe9\xe2\xf2\xdf\x22\xae\xee\xb3\x5f\x7f\x9e\x92\xcf\xef\x32\xb5\x5b\x08\x51\xc3\x30\x7a\x0b\xee\x94\x65\x5a\xc7\xd8\x6d\x88\x46\x66\x50\x3d\x4e\x13\x8a\x82\xeb\x58\x97\xcd\xe6\xb2\x49\x94\xac\x47\x58\x5e\x6f\x63\x9c\x1c\xf2\x83\x79\xd8\x80\x3d\x2f\x4d\x8b\xfc\x5b\xc7\x7c\x19\x2c\x0e\xda\xba\x7b\x59\xd7\xa5\xbd\xbb\x6a\xf7\x97\xda\xd4\xe5\xfd\xa6\x83\x9b\x1e\x5d\x2a\xf6\xeb\x97\xc1\xe5\xbe\x29\x91\xe0\x48\x05\x22\x68\x42\xc0\xad\xa8\x55\x74\x59\x1d\x2c\x29\xd8\x2c\x8c\xc9\xaa\x43\x04\x27\xcb\xf2\x1a\x9b\x86\xb2\xd8\x11\xc1\x65\x17\xec\xbc\x59\x92\x79\x6b\xee\x62\xd3\xd2\x86\xa5\xaf\xd3\x2c\x41\x8e\x90\xc8\x4e\x69\xa9\x6b\xb7\x0e\xb9\xc3\xb4\x79\xb4\xd0\x1a\xf2\x94\x39\x3e\x76\x52\x81\xe5\x9f\xf2\x79\x87\x1f\xaa\x68\x61\x8a\x51\x64\xc9\xc2\xc8\x2e\x54\x43\xb2\x1c\xc1\x61\x8c\x03\xc3\x69\x86\x70\x88\x18\xaa\x11\x49\xd9\x6a\xd7\xeb\x4c\x66\xc1\x65\x76\xd1\x3a\xca\x9c\x3b\x48\xd6\xac\xa9\x27\x8e\xc1\xa7\x6c\xba\x3e\x2f\xf4\x6d\xeb\x46\x8d\x1b\x17\x49\x59\x3d\xb1\xe5\xe0\x3d\xa6\xa4\x65\x55\x0d\x9f\x43\x27\x6d\xcc\x5f\xb1\x21\xbd\x56\xa1\xb4\x4e\x1d\xca\x10\x56\xd4\x2a\x39\x9c\x10\x03\x91\x10\x87\x22\x3a\x5a\xab\x25\x58\x44\xa4\x4d\x28\x4d\xf0\x32\x8c\x38\x19\xca\x44\xd2\x66\xe4\x7f\xd7\xd3\xa4\x05\xfe\x5c\x26\xce\x6d\xf4\x0d\xf5\x37\x66\xb7\xe0\x3d\x44\x89\x1b\x97\xe6\x9a\x26\xcd\x71\x85\x26\x16\x18\x7a\x04\xdf\x58\x6e\xc4\xb3\x7d\x97\xbb\xb6\x3e\x2b\xa2\x4f\x47\x6d\xfd\xe3\xd7\x8f\xb5\xe5\x7e\x53\x02\xa3\xb8\x1c\xa2\x8d\x64\x61\x1c\xa3\x60\x14\xd3\xb9\x5c\x7a\x0d\x4c\x63\x8c\x16\x43\x70\x41\x2b\xea\x4c\x66\x99\xe5\x2c\x98\x49\x71\x3a\x51\xbb\xc4\x6a\x34\x3f\x18\x9c\x6b\x41\xc4\xad\xca\x17\x92\x16\x45\x89\x23\x48\x34\x2e\x2a\xb8\x78\xd8\x7b\xd6\xff\x81\x7f\xf1\x06\xaf\x0a\x2c\xbb\xa0\xbf\xbb\x3f\x7f\x2d\x18\xe6\x28\x4a\xa1\x61\x1d\xcf\x3b\x38\x8a\x11\x4d\x36\x13\x89\x39\x6d\xb0\x55\x56\xec\x8a\x93\xd2\x3b\x24\x1c\xb6\x63\x82\xa8\xd7\x20\x3a\x33\x85\xe3\x30\x65\xfe\xc1\xb5\xd6\x3b\x7c\x4e\x52\x9b\xb6\x2e\x98\xb5\xbd\x57\xaf\xe4\xba\x6d\x82\x5c\xfd\xba\x4e\x29\x5d\x15\x3f\xf7\x68\xc5\xd4\x06\x73\x52\xf0\xa9\xf9\x2b\x36\xe2\xb4\x13\xbc\x45\x87\xa1\x56\x18\x51\x08\xdc\x45\x99\x60\xde\xa1\x70\x84\x8d\x70\x08\x12\xab\x95\xed\x66\x5e\x12\x45\x09\xd3\x28\x5a\x59\xa4\xac\x16\x18\x32\xfd\x60\xe7\x68\xc9\x64\x57\x9d\x97\x96\xf6\x2b\xa7\xcb\x6d\xa0\x7a\x85\x43\xce\xff\xb3\xb0\xd9\xb5\x65\x95\xe3\x3f\x05\x8a\x0f\x2b\x8d\x59\xf1\x7b\x3e\x6f\x95\xa7\x70\xab\x83\xa6\x68\x2d\x4b\x71\x5a\x11\x45\x4c\x12\x25\x73\x4e\x8b\x60\xd6\x40\x30\xaf\x53\xcc\xa8\x8b\xd2\xb3\xbc\x19\xc3\x35\x2e\xd8\x29\x09\x76\x2d\x92\x19\x3a\xe4\x48\xb5\x6d\xb9\x08\x5d\x9e\xbb\x6f\xe8\xe2\x87\xcf\xfc\xae\x55\xee\xfc\x75\xe1\x98\xe8\x12\x25\x36\xea\xa9\x67\x27\xe9\xb1\x5d\xe3\xe7\xe6\xf3\x9b\xcf\x35\xb8\x4b\xc6\x19\x2d\xa5\xc1\x6c\x1a\x94\x12\xcd\x18\x67\x77\x8a\x8a\x95\x27\xcc\x3a\x13\xac\xb7\x0a\x88\x80\x93\x02\x2b\xb1\x14\x29\xea\x79\x0b\xaa\x15\x10\x57\xee\xb8\xfe\x3b\x60\x74\x99\x0e\x57\x63\xb0\x33\x03\xea\x95\x1d\x92\xb8\xd0\xb3\xeb\xf3\xfb\x25\x11\x15\x97\x8f\x39\xdb\x7d\x46\x81\xdb\xd7\x83\x3b\xe7\xaf\x43\x85\x30\xab\x8e\x47\xf5\x76\x0d\x87\x2b\x5a\x0b\x6d\x36\x13\xa8\x86\xb6\x38\x60\x46\x6f\xb6\xd8\x39\xbb\x4d\x10\x50\x16\x42\x58\x9b\x40\x53\xb0\x85\xa2\x19\x56\xfc\xdf\x3d\x6f\xc9\x45\x7e\x2e\xa1\xef\x36\x6e\xf1\xf7\x6d\x3a\x29\x5b\x2f\xc7\x1d\x6d\xb1\x69\x59\x05\xc7\x43\xf8\xc4\xb2\x46\x33\x13\xc6\x9c\x7d\xf2\xa9\xb2\xf2\xf4\x64\x58\xff\x51\xf5\xc6\x85\x56\xed\x69\xcf\xe7\x2b\x6f\x49\xa7\xd3\xc4\x58\x28\x59\x11\x5c\x2e\xa7\x4d\xc2\x50\x1c\x52\x60\x81\xd0\x9a\x21\xbb\xe4\x40\x14\xd6\xaa\x98\x50\xa7\x68\xe1\x11\xda\x66\x62\x4d\x2e\xce\xce\x4b\xb9\xcf\x6e\x8e\x6d\x9f\xb1\xe6\xd3\x52\xac\x45\x49\xa8\xcc\xd2\x86\x3e\x35\x5a\xfc\x99\x38\xf1\x4a\x03\xa8\x6c\xd4\xf2\x37\x21\x1f\xe2\x17\x56\xc9\xc8\xe7\xfb\x7b\x38\x42\x63\x26\x25\x87\x1e\xd5\xf1\x34\x63\x37\x71\x0c\x82\xeb\x50\x33\xca\xda\x61\x05\xb7\x89\xac\x5e\xd6\x72\x92\xc3\x26\x71\x2e\xc8\x2a\x23\x18\x66\xca\xfe\x5a\xc5\xff\x89\xdd\x7d\xf1\xe2\x88\x61\x03\x1e\x6f\x7c\xdd\x67\xdc\xf4\xf2\x57\xeb\x17\x6c\x32\xa4\x39\x69\xd8\x3e\x7a\x8a\x01\xfe\xac\x7d\x19\x07\xb7\xcb\x5f\xd2\x61\x08\xa7\x96\x77\x39\xed\x88\x56\xa0\x18\x8b\x22\x9a\x10\xc8\x22\x38\x20\x2d\x82\xd3\x0e\x84\xc2\x05\xc5\x82\x5b\x68\x3d\xa9\x38\x19\xc4\xc2\x30\x32\x26\xd1\x3f\x78\x73\xc1\xc0\xc0\xf2\xc3\x5e\x4d\xd9\xdd\x75\xc2\xb9\xa5\x11\xb5\xdf\x8d\x79\x9e\xb6\xab\x31\xfe\xd7\xe6\x7f\xaa\x1d\x6d\xd2\x7f\x7e\xdf\xd8\x86\xbf\xbe\x2c\x91\xfb\x1b\xa9\xac\xbc\x8e\x60\x65\x8e\xd0\x49\x1c\xc4\xd2\xb8\x55\x96\x48\xa7\x56\x14\x15\x82\x35\x69\xcc\xb8\x02\x9b\x9c\x9c\xc8\x0a\x1c\xad\x61\x38\xcc\x4e\x60\x3a\x9a\xc8\x1d\x24\xe9\x15\xea\xcd\x9e\x43\xa6\x5f\x59\x67\xd9\x3d\xd7\xb2\x71\x41\x4c\x64\x83\xe9\xba\x0b\xa8\xab\xe0\xd3\x92\xef\x5c\xae\x7e\xa5\x7f\x3d\xc7\x9f\xfb\xcc\x5d\x42\x58\x3b\x84\x6a\x49\x13\x6d\x93\x38\x44\xd2\x5a\x69\x82\xd5\x38\x39\x3b\x8f\x0b\x16\xd6\xa2\x75\x3a\x69\x19\x81\xed\x8a\x9d\x40\x11\x48\x84\x15\xa7\xf9\x07\x6f\x0f\x9a\xf7\xee\xc3\x62\x7a\xfa\xc8\x41\x0f\xb6\x0d\x6d\x65\x3a\xbc\xa9\xfe\x63\xf3\x9e\x52\xcb\x86\x2d\xec\x16\xf9\xa2\x4f\xef\xd6\x5d\x1b\xff\xfa\xa6\x96\x5c\x41\x82\x5b\x20\xd1\x64\x26\x64\xc4\x8a\x69\x20\x54\x2f\xa1\x4e\xc4\x45\xb8\x08\x0b\x6a\x65\x18\x5c\xb1\x60\x24\xeb\xd2\x11\x2e\x2b\x81\x92\x3c\x4f\x63\x24\x6a\x13\xcc\xb9\x83\x64\x63\xf8\x9d\xd5\xfe\x9a\xd8\x7b\xdc\x87\xed\x6c\xbf\x36\xb5\xeb\x33\x4d\xae\xb5\x19\x5f\xa9\xe9\xdd\x47\xc8\xe0\x0d\x11\x17\xea\xfc\xfa\x85\xf0\xb9\xcf\xc5\x25\x8b\xcd\x81\x32\xb4\x53\xd6\x38\x1c\x3a\x4a\xc1\x45\x3b\x67\xd5\x72\x2e\x42\xe3\xd2\x11\x02\x61\x42\xac\x2e\x5e\x90\x34\xbc\x1d\xe1\xb4\x66\x8a\x77\xea\xed\x3f\x08\x89\xe7\x1f\xaf\x25\xae\x3c\xcd\x5e\xb6\x6e\x29\x73\x62\x7d\x99\xd1\x35\x66\x37\x7c\x43\xd6\xf3\x6b\x74\xae\x49\xcc\xe9\x98\x37\xd1\xe9\xbf\x7e\x29\x7c\xee\xd8\xd6\x39\x34\x14\x6e\x72\x69\xad\x24\x6b\x36\x33\x16\x4e\x84\x20\x9e\x76\x71\x0c\xae\x75\xe0\x7a\x46\x64\x34\xb2\x8e\x77\x8a\x90\x6c\x65\x08\x14\xc3\x74\x36\x91\xfc\x2e\x4f\x92\xd7\x5a\x8a\x3b\xdc\xbf\x60\x44\xf6\x3c\x09\x92\x1e\x3d\xe4\xe1\xa9\x45\xd3\xff\x6d\xdf\x5f\xd7\xe1\x03\x31\x7b\x88\xa1\x55\x57\xd3\xb2\x5b\x4b\x76\x6f\xb0\x1c\xdf\xda\xfb\x7c\xfe\x1e\xfb\x32\xc1\x1a\x04\x73\x49\x82\x43\xc2\xac\x0a\x4e\xf1\xb4\x8e\x93\xac\x3c\xae\x41\x2c\x66\x51\xe2\xac\x32\x21\xd2\x90\xc6\x2e\x48\x2e\x8b\x5d\x6f\xb7\x98\x5c\x88\xd7\x97\xe5\xf2\x4a\xf4\xdf\xa6\xae\x0b\x7a\x5e\xb7\x97\xbe\xe3\x9b\x83\x77\x4f\x34\x2c\x7f\x37\xc4\xf2\xac\x8c\xff\xb3\x7f\x87\xec\x7c\xba\xa9\x4a\xbb\xe2\x9b\xf3\x79\xa3\x3b\x2d\xc3\xac\x0d\x32\x6b\x2d\x98\x0b\xb3\x69\xcd\x98\x43\x15\x90\x75\x10\xa8\xce\x45\x59\xcc\x16\xc2\xec\xc0\x4c\x5a\xa7\x13\x91\x10\x0d\xa6\x67\x9c\x7c\xe6\x2c\xeb\x7b\x96\xef\x5c\x85\xf6\xf3\x1d\x92\xb8\xaa\xc2\xa9\xae\xdc\x94\xe5\x7d\x76\x47\x4f\x14\xba\x1d\xdc\xf2\x57\xf0\x85\x4e\x9b\x2f\xdc\xe8\x38\xfe\xd7\xf7\xe7\xe7\x0e\x29\xbb\x20\x2b\x9c\x56\x20\x08\xce\x8a\xc2\xa8\x03\x22\x59\x87\x59\x8b\x12\x90\x0c\x21\x98\xe2\xd2\x38\x24\x1b\xac\xc1\x4d\x8a\x48\x93\x4e\x3d\x6f\xd5\x5b\x45\x4b\xee\xda\x5e\xf5\x2a\xb8\xc2\x92\x3e\x0d\xa6\xcf\x1c\x79\xa8\x17\x7b\xfd\x7e\xb1\xf0\x9d\x83\xbb\x15\xaf\xc7\x75\x7c\xb0\xf4\xd9\xea\xf8\x75\x86\x9b\xf9\x6b\xc0\x82\x49\xb2\xe1\x5a\xad\xcd\xe2\x22\x61\xcc\xc1\x68\x35\xa8\x45\xe1\x69\x0a\x31\xd3\x08\x69\xc2\x24\xc9\xce\x58\x51\x54\x91\x39\x51\x6f\x26\x14\xc5\xc5\xe1\xd0\xff\x02\x79\x4b\xa6\xc0\x57\x07\xb6\x2d\x3b\xb4\xd0\xf9\x66\x1f\x1b\xb9\x36\xee\x5e\xf8\x61\xf4\xde\xd1\xc5\x13\x9f\x59\x5a\x9d\x28\xfe\xae\x41\xa1\x56\x12\x51\xdf\x6d\x3c\xea\xeb\x53\x6d\xc2\xb7\x4e\xaa\x22\x64\x76\xd7\xe0\x83\x85\x7a\x7f\x7a\x92\xf5\x13\x0a\x3e\x58\xc0\xdf\x9e\x16\x0a\x1d\xe2\x3d\x25\x12\x9b\x56\x69\x80\xe4\x99\xf3\xa2\xd6\xe1\x46\x45\x5e\x4b\x4b\xfe\x7a\xfa\xee\x5d\xff\xb6\x31\x77\x8b\xa4\x5e\x5a\x57\xd9\x17\x4d\x77\x1b\x82\x7d\xc6\x7e\x7b\x2a\xcc\xf6\xff\x96\x3c\x8f\xd5\xac\x36\xff\xf1\xf4\x66\x8f\xbf\x86\xc4\xf5\xec\xb3\xad\xd7\xbc\x14\x91\x9d\xd4\x62\xfe\xb0\xf5\x67\x76\x3d\x36\x47\xfd\x39\xaf\xfc\xab\x22\x3f\x57\xce\x6d\xcc\xc8\xc8\xc8\x88\x0d\xc9\xbe\xa0\xea\x4c\x3c\x78\xe9\xe2\x16\xe5\x13\xb6\x70\xf4\xfb\x35\xb3\xe3\x36\x7b\xda\xc2\x77\x87\xb3\x3b\xfe\x19\x43\x35\x74\xb7\xd0\x84\x63\x39\xb6\xcb\x1f\x48\xea\xeb\x1a\xdf\xe4\x64\x29\xc5\xc7\xe6\x9f\x51\xe2\x62\xda\x8b\x3a\x7b\x8e\x96\x5a\xe0\x9c\x51\xc2\xfc\xb5\xdc\xc8\xc3\x39\xde\x84\x63\x5f\x39\xb2\x2d\x39\x25\x09\xed\x97\x1c\xbf\xb7\x46\xd9\x71\x0d\xe3\x46\xa7\xfe\x59\x08\xfd\x5c\xb5\x70\xe7\x0e\xdb\x17\x07\xa6\xa7\x65\x2f\xfd\x6a\xef\x91\xf4\xf4\xdd\x54\x72\x9c\x4f\x23\xe7\x91\xd5\x33\x6b\x84\x3e\x99\x19\x54\x7d\x62\xcc\x87\x1d\x5f\x17\x2e\xed\xb1\x3b\xfa\x7c\xf6\xd2\xcd\x97\x8e\x7f\xd7\x36\x6a\x5b\x2d\x27\x5c\x27\xf6\x15\x16\x17\xfa\x68\xf7\xb2\x8d\xb0\x87\xbd\xbd\xfd\x48\xdf\xdd\x61\xf5\xac\x0f\xb3\x97\x36\x7c\x3e\x2c\xf2\x67\x46\xbd\xba\xd2\x7f\xe8\xc5\x2b\x15\x53\xba\xd6\x2d\xb4\xbf\xe3\xae\x23\xa6\xea\xad\xdb\x0e\xa5\xda\x4c\xfd\xef\x70\xf6\xd2\xd7\xdf\x9f\xa5\xde\xac\x2c\xcd\xbf\x8b\x74\xd6\x6d\x7d\xbc\xd7\xbf\x37\x9a\x15\xdd\x1f\x76\xc0\x3e\xa1\xf8\xfc\x22\xc2\xba\x84\x36\x75\xb3\x97\xa6\x4b\xda\xc3\xfd\xfc\x5a\x27\x5e\x6c\xd0\xa7\x81\x3b\xf6\xae\x23\xc1\xb4\x0d\xdb\xb6\x66\x68\x1b\xba\xea\xca\x3a\xc1\x9f\xc2\x2d\xd9\x4b\xff\x87\x75\x3e\xb0\xb4\x5a\xcc\xd7\x72\xe3\x47\xc2\xd7\xce\x6e\xf4\x14\x0c\xa8\x70\xd2\xd1\x39\x62\x90\xff\xfc\x16\x13\xc6\x0e\x88\x7e\x93\xbd\xf4\x21\xc9\xac\xb4\x9d\xf9\xc7\xf4\xb5\x1b\x47\x44\xcd\x49\x7d\xdd\x6b\x40\x3d\xe9\xc0\xa2\xd2\xf7\x0f\xdf\xdd\xe1\xff\x7c\x4f\x48\x9f\x7a\xd9\x4b\x4f\xfa\xfb\xc4\x9a\xdf\x36\x76\x7e\xe0\x9f\x3a\x65\x5e\x9f\xa1\xb3\x67\x3b\x0a\x7d\xac\x1d\xd3\xbc\x35\x33\xb5\xec\x84\x70\xa8\x15\x9d\x9c\xa3\x74\x85\x57\x62\xb8\x81\x2b\xf6\xbb\x67\xeb\xd6\xf7\x87\x76\x73\xff\x54\xbe\x3d\x70\xd1\x9b\xc1\xd2\x8c\x59\x3b\x9f\xdc\x5b\x9b\xf4\x2c\x7b\x69\x9f\x0a\xa7\xe7\xfe\x6e\xec\x1c\x52\xed\xc9\xca\x56\xdb\x37\x57\xaf\xbf\xe5\xa2\xb3\x5c\x54\xad\x09\xe6\x89\xaf\x7a\x55\x59\xb7\xc1\x93\x63\x99\x3e\xf9\xcc\xc4\x2d\xdb\x9c\x91\x6b\x1f\xaf\xed\x38\x62\x4a\xf9\x5a\x93\xc7\xa6\x6f\x49\x13\x94\xca\xb5\x0e\xbd\x9b\x10\xbe\xe1\x44\xbd\x3d\xd9\x4b\xbf\x85\xc7\x26\x15\x25\x0f\x76\x97\xc6\xd4\x62\x53\x07\x36\x7d\x1b\xdb\x74\x40\xb9\xbe\xe3\x6c\x8b\xaf\x97\x6d\x74\x67\x29\x7e\xbd\x4e\x8e\xb1\x34\xff\xbb\x65\xe6\xea\x7d\x0d\x0b\x3c\x1e\xda\x7d\xd9\xf1\xf4\xb8\x17\xf3\x26\xcf\x39\xb5\x5e\x8e\x2f\x5e\xe6\x6e\xc0\x68\x62\x6f\xfb\xec\xa5\x1f\x3a\x34\x01\x73\x8e\xa6\x11\x77\x7a\x57\xc3\x26\xf7\x49\xaa\xdb\x3e\xda\xf7\x51\xfb\x95\xbb\x4a\x37\x6c\xf8\x61\x68\xbf\xa4\x4d\x48\xf6\xd2\x7b\x87\x7e\xd6\x6f\x19\x14\x6a\x19\xf2\x35\xd9\xd8\x71\xcf\x60\xb9\xc2\x7d\xcf\xb8\xf2\xe1\x63\xda\x97\x3a\x13\x3f\x89\x9b\x5a\xb5\x53\xf6\xd2\x77\xaf\x2c\x8d\x49\x5c\x45\xd3\x17\x47\x96\x0d\x08\xfc\xdc\x32\x70\xc3\xf5\xce\x15\x07\x4f\xa9\xde\x6d\x50\x85\x8e\x9d\x23\x3b\x1d\x1b\x96\xbd\xf4\xf8\x31\x0b\xeb\x12\xc9\x33\xaa\x6f\x4e\xab\x33\x78\xea\xe0\xb6\x71\x23\x22\xae\xcf\x7c\xfd\x78\x73\xf5\x1b\x17\xd2\xaa\x6e\x48\x70\x9b\xb2\x97\x1e\x76\xbd\x7f\x1f\x53\xef\x32\x9f\x3d\x51\x83\xab\x48\xd5\x37\x76\xb6\xc9\x69\x4f\x3f\x86\x07\x60\xf1\xab\x26\x85\x9e\xde\x30\x79\x7c\xf6\xd2\xeb\xf6\xd6\x80\x8f\xec\xda\xfb\x47\xf2\x93\xfe\x0f\x47\x98\x4c\x6f\x6e\x4f\x8f\xab\xb5\xa3\xeb\x68\xf7\xcb\xb4\x50\x22\xe2\xd1\xb1\xb9\xd9\x4b\x07\xcf\xbb\xdb\xae\xa7\x2b\xfa\xd0\xf5\x11\x0a\x7c\x21\xe4\x4b\x3f\xea\xb9\xeb\xbe\x21\xa6\x54\x85\x6a\xe5\x2a\xae\x18\xf7\x69\xde\xc0\xec\xa5\x5b\xee\xad\xbf\x35\xb0\x65\x6b\x37\x77\x9b\x76\x47\x9d\x2d\xb7\xaf\xfe\xcb\xd1\x61\x3d\x76\xf8\xcd\xf8\xb3\xf0\xdc\xd0\x1d\x1f\x1f\x8d\xcb\x5e\x7a\xf8\x17\xe8\xdc\x90\x35\xd6\x89\xfb\x5f\x9d\xdf\xfe\x30\xf2\xe3\xa2\x25\x53\xba\xce\x38\xf7\xdf\xfc\x5b\x75\x4c\xd1\xcd\x6b\xbd\x9e\x62\xcb\x5e\xfa\xf2\x93\x4b\xf5\x9a\xb6\x0f\x38\xfe\xc6\x70\xfe\xb7\x76\xd7\x98\x11\x9b\x1e\x7c\x4e\xdc\x7a\x67\xcc\x95\x25\x0d\x1a\xed\xfd\x87\xd8\x7f\x22\x7b\xe9\xb8\xb6\x23\x3b\x45\x59\x97\x0f\xf3\x2d\x55\xf7\xf5\x99\x7d\xed\x53\x3e\x57\xe3\x33\xfa\xac\x2b\xcf\x2d\x38\x38\xfb\x92\xff\x83\x00\x3e\x7b\xe9\xe3\xb1\x0b\x88\x91\x81\x15\xab\x3f\xf4\x5b\xd9\xb6\xca\xc7\xe9\x9d\xba\xce\x59\x75\xac\xce\xd4\xad\x27\x8b\xc3\xa1\x2d\x5c\x8f\x3a\xac\xcf\x5e\xba\xe9\xe5\x12\xb1\x37\xcf\x6e\x13\x5a\xb6\x9c\x31\xeb\xde\xa3\xbf\xff\x8d\x47\x5a\xb6\xed\x35\x2a\x3c\x2e\xfa\x4c\x85\xf3\xd3\xfe\x09\x5d\x97\xbd\xf4\xb2\xe7\xe7\xa2\x5e\x86\xb9\xf7\x8e\x9a\x36\xba\x31\x15\x52\x34\xf1\x41\xe4\x3f\x0b\x67\xce\x9e\x36\x3c\xbd\xc8\x99\xbf\xfe\xa8\xbd\x3b\x87\x35\xc8\x8b\x3a\x25\x0e\xae\x59\xf0\x8c\xa6\x44\xcc\xf5\xe3\xa5\x91\xd9\x8d\x1a\x76\x8a\x4f\xaf\x51\xaa\x54\xa1\x63\x72\xff\x47\x19\x13\xfd\x73\x6c\xbe\x5b\xbd\x3b\xb9\x5a\xdf\xf0\x8d\x1d\xdc\xa9\xb8\xfe\xa6\x12\x58\x60\xdf\xf5\x95\x72\x99\x2b\x7e\xef\x02\x22\xd6\xbf\x69\xdb\xbd\xc7\x45\xff\x9f\x63\x6e\xb7\xf1\xd3\x97\x83\x9e\xd8\x4a\xd9\x6b\x77\x95\x98\xf3\xa2\x58\xef\x2e\x75\x07\xcf\xec\x1e\xd5\x69\x45\x2b\xf4\xc1\xcd\xb7\xa9\xc3\xd3\xb6\x55\xa4\xd2\x96\xa6\x0f\x32\x5c\x9e\xf9\x2d\x49\x64\xd8\x54\xdc\xe3\x36\xec\xf2\xf3\x64\x3a\xb3\x25\x85\x3d\x99\x3f\xcf\x2c\xe6\x71\x1b\xa2\x8b\x67\x7e\x0b\x2b\xec\x71\x1b\x66\x06\x78\xbe\x6d\xb9\x31\x4c\x2b\xe9\x71\x1b\x16\xfa\x7a\xdc\x86\xaf\x81\x9e\xec\x4d\x76\x4b\x29\x5e\xb5\x64\xe8\xdd\xf1\xb3\x0b\x17\xfa\x74\x3b\xe5\x03\xdc\xf2\xb2\xfb\x9f\xa9\x7e\x7b\x37\xc4\xef\x1b\x17\x7b\xeb\xea\xc6\xfb\x99\x8d\x24\x95\xf4\x36\x72\x5e\xad\x24\xad\xa8\xb7\xed\x9d\x01\xde\x9f\x77\xfb\x7b\xdc\x86\x23\x81\xde\x6f\xa7\x55\x49\x1e\x14\xca\xd1\xd2\xe3\x39\x4f\xfb\x46\xcf\xa2\xdf\x9c\xb8\xfc\x4a\x33\xf1\x66\x87\x02\xe5\x06\xa7\x9d\x6f\x31\xda\x54\x36\x72\xe0\x92\xa2\x8e\xfb\x55\x7b\x66\x2f\x1d\x3d\xa6\x8b\x4e\x33\xf9\x0f\xbe\xd3\x9b\x60\x5d\x71\xff\xfb\x5d\xda\xec\x6d\x35\xbf\xef\x90\xe9\xc3\x3e\x77\x70\x7e\x2a\x38\xaf\x2a\x9b\xd9\xd2\x21\x55\x9c\xbb\x40\xb8\xe3\xaa\x62\xde\x07\x7a\x85\xfb\x3b\x28\x87\x00\xa7\x9e\x41\x2b\x06\xa7\x5d\xae\x3d\xf1\xd6\x81\x3b\x86\xca\x8f\x5b\xbe\xaf\x91\xd4\x11\x1d\x21\x76\xe9\x3f\x92\x6f\x72\xb9\xe4\x84\x75\x99\x95\x44\x17\xf4\xb8\x0d\xd7\x8b\x7b\x35\x97\x50\xc2\xe3\x36\xa4\xaa\xfd\xc9\x28\xe6\xfd\x69\xad\xaa\xcc\x75\x7e\x1e\xb7\x61\x7b\x11\xef\x4f\x7b\x0b\xa9\x62\xa8\x0f\xde\x2d\xea\xfd\x69\xb5\x5a\xea\x4a\xb0\xc7\x6d\x78\x5e\xcc\x2b\xde\x4a\x55\xd8\x63\x7e\xde\x6f\x33\x0a\x78\xdc\x86\xfb\x41\xde\x6f\x47\xd4\xf1\xba\xe6\xef\x7d\x78\xc1\xb7\x26\xd4\xa6\xaf\x04\x7a\x06\xfe\x1c\x36\xdc\xc6\xe1\x3e\x93\x22\x32\x93\xcd\x86\x19\x85\xbc\x4a\xf8\x5c\xd8\xfb\xe1\xaa\xaf\xf7\x43\x72\x31\xef\x87\xb9\xc5\x3d\x3d\x7e\x0e\x03\xee\xf0\x90\x88\x52\x99\x73\x0d\xc3\xc7\x20\xef\xe3\x93\x0a\x66\x7e\x08\x1b\xe1\xfd\xe1\x54\x11\x4f\xaf\x9f\x1b\x69\xb7\xd1\xbf\xae\xaf\xf7\x96\x3a\x43\x2c\x18\xaf\x38\x7f\xef\x87\xe5\xa0\x89\x4f\x25\x3c\x7f\xfd\x1c\x1a\xdc\xc6\x2d\x3e\x3e\xfe\xde\xce\xef\x05\x7d\xde\x09\x70\x7a\x3e\xd8\x2b\xab\xdd\xfb\xc3\x8c\x12\x9e\x3f\x7e\x0e\x14\x6e\xa3\x21\xd8\xc7\x27\x32\xf3\xb1\x95\xde\x7a\x0c\xdb\x4a\x78\xc7\x2d\x42\x05\xfe\xcd\x00\xcf\x3c\xff\x9f\x8b\xc1\xdc\xc6\x31\x19\x5f\xef\xc4\x56\xce\x14\xa7\x80\xb7\xba\xdd\x5e\x50\x84\xfd\xe1\x71\x1b\xde\x04\x7b\xeb\x1e\xab\xc2\x6e\x3f\xc0\xd8\xac\x40\xf5\x9b\x8a\xf0\x77\xde\xc7\xc2\x6a\x7a\xff\xb4\x25\xc0\xe3\x36\xdc\x52\x11\xf4\xa6\x80\xf7\xd9\xb8\x20\x8f\xdb\xf0\xb4\x70\x0e\x0b\x68\xdb\xfe\xdd\x96\x07\x8d\x8b\xdc\x60\xbe\x0e\xde\x5f\x75\xd3\xed\x49\x57\x36\xb4\x6f\x30\xd6\x77\x78\xbb\x3b\x4f\xff\xf8\xd8\x6c\x60\xdd\x41\x99\xcf\xfe\xab\xa2\xcf\x03\x7a\xb8\x58\xed\xe1\x69\x7f\xef\xb7\xd5\x2a\xd2\x4f\x02\x92\x71\x78\xdc\x86\x05\x40\xdc\x48\x55\x8a\x79\x45\x73\x34\x39\xaa\xcf\x9a\x36\x09\x21\x71\xbb\xc2\x57\xaf\x1a\x87\x71\x9b\xfd\x46\x52\x11\x9d\xc7\x87\xd4\x95\xf7\xb4\x68\x32\xe7\x63\xa3\xce\x77\xb2\x97\xae\x74\xaa\xdd\xc4\x7f\x87\xac\x3f\xa0\x1f\xb8\x2d\x91\xda\x55\xa9\x7c\x9b\x61\xbb\xa7\xed\x77\xbd\xfc\x52\x35\x75\x63\x6f\x4c\xd8\x10\xee\x35\x0f\x55\x0b\x8b\x8b\x78\xdc\x86\x17\x40\x83\xc7\x01\x78\xb6\x16\xf2\x2a\x65\xb9\xda\x8b\xc3\xaa\x4c\x8f\xfc\xbc\x3f\xcd\xff\x46\x83\xaa\x1e\x0f\x00\xfb\x98\x07\x4c\x6e\xbc\x5a\x67\xb4\xda\xd7\x3b\x40\xe3\xeb\xd5\x87\x6f\xaa\x8a\x7c\x0e\x94\xb1\xab\xa8\xc7\x6d\xf8\x08\x58\x6f\xa1\x6a\xa1\x6f\x01\x5a\xef\x80\xaa\x0e\xaa\x3a\xfa\xef\x1b\x51\x06\x7b\xa8\x9f\xd3\xbc\x3b\x7c\x70\x5d\xdf\x89\x99\x15\x45\x78\x2d\xcb\xf0\x1e\x74\xea\x2c\x10\x77\x22\xf8\xe5\x33\x30\xe7\xa7\xe0\xc3\x1a\x5f\xcf\xb0\x9f\x53\xb9\xdb\x18\x7a\xd2\x27\xd0\x6b\x2c\xc9\xc0\x7d\x24\xa8\x68\x7b\x51\xd2\x5b\xdb\x5d\xd0\xab\x04\x60\x43\x27\x0b\x02\xf3\xce\x6b\x90\xdc\x46\x77\x88\x8f\x77\x37\x93\x61\x4b\x71\x60\x83\x25\xbc\x1f\xbe\x04\x78\x3f\x6c\x2e\xe6\x39\x18\xf0\x73\x93\x11\xb7\xf1\x93\x3a\x3d\xaa\x9a\xf9\xe0\x82\x40\xaf\xa6\x27\xa8\xfc\xba\x59\x55\xf7\x8e\x9c\x7e\xed\xfc\xbf\x4f\x5a\x0e\x3f\x3e\x2e\xe2\xe1\x46\x6a\xdb\xb1\x9a\xb7\xe3\x96\xa5\x7e\x6c\x14\xb1\x96\x36\xae\xa8\xd3\x47\xa9\xf8\xb8\xda\x86\xcc\x4e\x1f\x53\x39\xfb\x25\x60\xa0\x18\x40\xde\x6b\xd5\x61\x3e\xaf\x2a\xe4\x1e\x00\xfe\x36\x15\x1a\x17\x8b\x02\xf3\x52\xe9\xff\x35\xf0\x3b\xab\x55\x8c\xac\x2b\xe9\x7d\x78\xa9\x0a\x9b\x2b\xdf\xbc\x88\xaf\xb7\xc0\x2c\x55\xce\xeb\xc1\x39\x44\x64\x06\x37\x1d\xf7\xf1\x5a\xb5\x16\xfa\xd1\xd3\xac\xcd\x46\xd7\xab\xf7\xe9\x64\xad\xf6\xb5\x9b\xc6\x25\x9d\xec\x95\x54\x87\x28\xd5\x79\x4a\x66\x75\x1b\xd4\xca\xcf\xa8\xad\x9f\x29\xe2\xad\x2e\x55\xc5\x71\x7a\x10\x40\xb5\x8a\xb4\xc3\x6a\x0b\x29\x40\xc5\x6b\xfd\x72\x34\xb5\xd7\x1a\x74\xb4\x24\xfd\xdb\x90\x9e\x93\x5f\x26\x36\x6a\xb7\xc5\x39\xec\x76\x7a\xab\xc6\xda\x51\xc7\xea\x10\xad\xc7\x1d\x73\x6e\x1c\x99\x59\xef\x3c\x55\x93\x17\xbc\x3d\x0e\xe3\x54\x4b\x07\x30\x38\x0c\x1c\xe2\x76\xb5\x63\x89\x2a\xd7\x78\x72\xf6\x27\xb1\x6d\xad\xa7\x91\xb6\xc8\x35\x29\x29\x83\xb8\x1e\x5b\xb7\xdc\xab\x33\xb8\xef\x9e\x6e\xb5\x0f\x3f\xed\xba\x38\x38\x61\xde\xf8\x21\x27\xb3\x97\xc6\x47\xb7\x4b\x39\x7f\xde\xb5\x71\x61\xc5\x0b\x43\xda\x3f\x99\x18\xb4\x6e\x15\xfd\xfa\xfc\xd2\xe0\xdb\x6d\x4b\x86\x7c\x60\x03\x30\x28\x7b\xe9\xa2\x43\xd7\x35\x1c\x58\x4f\x5a\x39\xaa\xf8\xb8\x85\xbd\xe3\x9b\x04\xb4\x0b\x2a\x1d\xe7\x6b\x5e\x7a\x84\xb2\x2c\x89\x98\x30\xc3\xff\x63\xa6\x94\x2b\xfc\x73\x88\xe4\x9c\xf7\xd1\xb3\xff\xab\x94\x91\xe8\x33\x77\x7b\xf8\x9f\xe4\x9f\x4b\x3b\x87\x43\x6d\x9b\x35\xc1\x77\xee\xbe\xb2\x51\x9e\x5f\x7a\x47\x66\x9f\x26\xa9\xca\x9b\xa5\xaa\xf8\x1d\x08\x61\xfe\x55\x07\xff\x35\x60\x97\x13\xc0\xe2\x63\xd5\x8e\x2f\x04\x3f\x3f\xf6\x03\x26\x91\x17\xda\xdc\x46\x7f\x5f\x3f\x6f\xba\xce\x70\x01\x0c\xd3\x4c\x00\xbc\x59\x40\xcd\x37\x0b\x81\x1a\xf3\x02\x87\xdb\xe8\xe7\x57\x0a\xf8\xd0\x3b\x80\x1f\x2e\x02\x7e\xf8\x02\xcc\xf6\xad\x9f\xa7\xe7\xcf\x61\xc0\x1d\xee\x5b\x18\x88\xb8\xa7\x88\xf7\xf1\x03\x40\xd6\x08\xd0\xc4\x99\xa2\x20\x22\xc9\x6b\xbc\xdd\x46\xbf\x90\xdf\x7c\xbd\x3c\xf3\x04\xf4\x75\x2c\xa0\x98\x4d\xa0\xd3\xab\x00\x21\x6c\x0c\xf0\xf4\xff\x39\x70\xb8\x8d\xbe\xa1\x3e\x86\x71\x5e\xf3\x53\xc7\xea\x2d\xa8\xf6\x25\x08\x8c\x17\x02\xe6\x79\xe5\xe7\xc1\x7f\x0e\x45\x6e\x63\x81\x92\x05\x7d\x32\x73\x49\x86\x1d\x40\x85\x63\x41\x45\x93\x80\xa0\x07\x40\x67\xd6\x01\x93\x5c\xab\x9a\xc5\xba\xa2\x80\x82\xf3\xc2\x9d\xdb\x38\xd6\x3f\x38\x4b\x35\xa0\xa1\x24\xa0\xec\x67\x60\x18\xe7\x03\x3c\xce\x56\x09\xe7\x62\xa0\x27\xde\xff\xe7\xf2\x31\x6e\x63\xbb\x03\x63\x32\xd4\xf9\x85\x0a\xf0\xc9\xaa\xa3\x4a\x54\x79\xe2\x09\x08\x3f\xdd\x6a\xf8\xb9\x2b\x67\x8c\x3e\x25\x36\x68\x49\xff\x17\x05\x4e\xc9\xf2\x8c\xc3\xf7\x5f\x1d\x4f\xcd\x58\xfa\x38\x65\xe3\xb4\xf1\x37\xfa\x8b\x7f\xf9\xef\x1b\x84\xc8\xdf\xaa\x0b\xfb\xcb\xe3\x36\xec\x53\x2d\xe1\x26\xf0\xac\x09\xaa\x78\x97\x54\x17\x9a\xe1\xf5\xbf\x61\x2d\x3c\x6e\xc3\x5c\x95\xbb\x3e\x03\xea\x88\x52\xff\xfe\x9f\x5a\xf2\x0e\x18\xa3\x19\x40\x91\x47\x41\x47\x67\xaa\x6e\x7d\x0d\x50\xeb\x74\xd5\x32\xdf\x01\xeb\x3b\xad\x3e\xfb\xd5\xfb\xb7\x30\xd6\xe3\x36\x2c\xcb\x49\x74\xb6\x43\x37\x5b\xaf\xfe\xe7\xe2\xf6\x67\x5d\x3e\x4f\xe9\xa7\x71\x1d\x5a\xd2\x61\x48\x8f\xa6\xb5\x7e\x5b\x76\x76\x57\x74\xad\x53\xb3\xb7\xcf\xf2\x1a\xbc\xda\xc8\x3d\x75\xc8\x3c\x00\xd6\x47\x72\xce\x16\x94\x5d\x16\xfa\xf3\xad\x37\x83\x5a\x05\x1e\x38\x52\x22\x60\x4b\xa7\x0d\xe5\x4e\xff\x1e\x3f\xe6\xe4\x16\x2e\x6a\xf3\xcd\x47\x7f\x3d\xec\x92\x29\xd2\x17\x55\xa9\x19\x40\xa9\xcb\x55\x71\x13\x01\x5c\xae\x06\x7b\x3b\x3e\x4e\x55\xc3\x72\xb5\xf7\x8f\x80\x87\x39\xa4\x8e\xc8\x31\xb5\xf8\xb5\x80\x1c\x0d\x0f\xfa\xa3\xf2\x5d\x47\xec\x1f\x53\xea\x6e\x1d\x7a\x24\xac\xd2\xe1\x69\x7f\xbe\x94\x22\x6b\x17\x09\x6d\xf7\xf7\xf9\xe4\x9b\xcf\x3a\x44\x7d\xce\xac\x7c\x1f\x98\xdb\xed\x52\x07\xf2\xa1\xda\xa1\x57\x05\xbd\x9a\xf9\xdd\xe3\x36\xac\x07\x21\xcb\x02\xb5\xf1\xfb\x05\x3c\xdd\x7f\x6e\x84\xdd\xe1\x87\x66\x02\x5a\xf1\x78\x7b\x12\x46\x7a\xff\x47\xc1\xb0\x95\x04\xa4\x92\x97\xbe\xdd\xe1\xa5\x22\x02\xbd\xd5\x2d\x05\x71\xcd\x25\x60\x47\x73\x01\xce\xa7\x15\x01\x15\xe6\xa5\x76\x77\x78\xf0\x70\x10\x5b\x4c\x04\x15\x3e\x05\x2a\xdf\x01\x7e\x59\x91\x45\xcd\x79\xa9\xd3\x6d\x34\xf8\x84\x84\x7a\x6b\x3c\x03\x2c\x70\x3f\x88\xf4\x17\x81\x5f\xb6\x96\xf0\xdc\xf4\xff\xb9\xf4\xa6\xdb\xb8\xe9\x53\x4a\xc6\xb7\x20\xdf\xed\x36\x4c\x56\xe9\x69\x13\x98\x75\xed\x07\x26\x73\x5a\x1d\xfc\x04\x75\xdc\x3e\x01\x23\xb8\x05\x22\xcf\x6d\x2a\x56\x0e\xa8\x71\xc4\x0d\x30\x97\x39\x53\xc0\xfb\xb7\xfb\xaa\x9f\xba\xff\x2d\xf2\x04\x36\xb3\x5c\x0d\x57\x3e\xe5\x04\x70\xdb\x23\x5b\x9b\xb7\x3a\xd7\x63\xfc\xbc\x3a\xdd\xa4\x32\x23\x52\x8d\x03\x47\x4d\xeb\xbc\xa9\x72\x1c\xde\xb2\xbc\xc6\xaf\x5f\x85\x63\x31\x99\xd5\xdd\x56\xa5\x7b\xa8\xc6\xc4\x29\x20\x9c\x99\xa4\xfe\xf4\x4f\xc9\x1c\xd5\xf5\xd2\x15\x65\xfd\x62\x1e\xe9\xaf\x16\xea\x88\x7c\x7e\x51\x7d\x77\xb9\xf9\xf8\xe4\x9d\x27\x37\x0b\xa1\xc7\x46\xcd\x75\x74\xe9\x92\x9a\x59\xdd\x74\x55\xe8\x03\x6a\x05\x1e\xc0\x6a\x9f\xc1\x87\xa5\xbe\x20\x42\x52\xbb\xbe\x5f\x2d\x99\x92\xd3\x61\xbb\x4e\x71\xe8\xfd\x4e\x5b\xf6\x36\xf3\x94\x7c\x73\xe1\x7d\x42\xbc\xc5\x3f\xf2\x48\xc3\x6b\x71\xc7\x46\x37\x5b\xdf\x29\x1e\x6a\x7f\x2b\x53\xc2\x45\x2a\xf9\x5c\x02\x44\x60\xf1\xb8\x0d\x31\x60\xbc\xce\x7b\x8d\xc0\xb0\x53\x35\xef\x3d\x40\xdb\x13\x55\x91\x96\xa9\x8f\xed\x00\x03\x7a\x2d\xa7\xc2\x36\x47\x2d\x6f\x1b\x3f\x6b\xc9\xd7\x0b\xbb\x12\xfd\xfc\x1b\xfd\xdb\x69\xb7\xd6\xe5\xdc\x91\x74\x1f\xb7\x4f\xd9\x4f\x36\x29\x52\x2f\xd1\x9b\x4b\x51\x83\xa4\x68\x35\x02\xdb\x00\x62\xc3\x29\xea\x4f\x73\x41\xc3\x7f\xab\x63\xba\xaf\x78\x8e\xca\x47\x74\xed\x7b\xef\x1c\xbc\x68\xff\x80\xbd\xf8\xe9\xc6\x65\xa5\x41\xce\xa6\xbb\xf6\x1d\x9e\x19\x3f\x33\x72\xf6\xe5\x82\x49\xad\x02\x36\xfd\xf5\x73\x83\xe6\x0e\x3f\x14\xda\xd3\xeb\x37\xf6\x81\x3e\x27\x00\x90\xbc\x05\x6c\x76\x16\x18\xd6\x02\x5f\x60\x58\x79\x8d\x9f\x3b\xdc\xb7\xbc\x77\xe3\xb5\xe1\x19\xa8\x39\x12\xd8\xd3\x2c\xd0\xc4\xb1\x20\x50\x61\x5e\x43\xe5\x36\x96\xf4\x29\x09\xa8\xe4\x98\xd7\xe4\xc3\x06\x79\xeb\x59\x09\x86\x21\xa1\x90\x07\xf9\x39\xfd\xbb\x8d\xc3\x7d\xc7\x86\x78\xbd\xf3\x0b\x20\xe2\x33\x90\x87\xa8\xe3\xfd\xe1\x10\x88\x2b\xce\x81\x26\x96\x16\x07\x64\x90\xd7\x28\xb8\x8d\x81\x46\x9f\x10\xa0\x05\xd0\xe7\x6b\x20\xe0\x9b\x06\xd4\x7a\xd1\xcf\xb3\xc9\xff\xe7\x56\x2f\xdc\xc6\x31\x63\x32\x46\x00\x32\xd8\xa0\x5a\xb6\x07\xd4\x97\x56\xd0\x0b\xcf\xb3\xdf\xfc\xa7\x6a\xd4\x37\x41\xb6\x68\xb2\x0a\xa3\x34\x90\x74\x5a\xa0\x42\x6c\x9f\x0a\xe9\xa3\x40\xaa\x45\x60\x32\x72\x49\xf5\x00\x29\xa0\xaa\x1b\x2a\xdf\xbf\x54\x7f\x4a\x07\x9c\xb3\x13\xe8\x6a\x2b\xe0\xc9\x7b\x60\x06\xaf\x16\xbe\x05\xc4\xb9\x01\xe6\x2b\x9b\x54\xdb\xdc\x0b\x00\x7d\x4b\x95\xeb\x71\xce\x68\x7f\x4d\xdc\xca\xaf\xb3\x2b\xd4\x5f\x3d\xae\x47\xed\x12\xcf\x67\x57\x7e\xb4\x33\xc1\xe3\xa9\xbc\x98\xf2\x1b\x56\xf6\x50\x99\x56\x85\x6b\x07\x65\x2f\xdd\xfb\xe2\x4d\x7b\xca\x99\x7f\x0c\xdd\x0a\xc2\xd7\x8a\xb1\xb5\x66\x6e\x0e\xde\x7a\x94\xdb\x73\xcf\x7f\x5f\xd5\x0f\x8d\xcf\x9d\x98\x4e\x7a\xe7\xec\x6a\xbb\x77\x54\x32\x7a\x06\xdc\xd7\x32\xb5\xe3\x29\x39\x7d\x64\x7a\x86\x73\xef\x04\xcf\xdd\xe3\xc5\x27\xce\x36\x38\x5b\x07\xfe\x39\xa3\x61\x37\x4b\xb3\xe8\x0d\xb5\xe6\x04\x3d\xe9\x5f\x64\xfd\xd5\xf1\xde\x54\x9e\xaa\xd5\x04\x30\x4f\xfa\x57\xad\xf7\x91\xea\xaf\xdf\x7b\x2b\x0f\x33\x7b\xdc\x86\x83\x20\x05\xb7\x4b\xed\xe6\x29\xd0\xe9\x4d\xea\xb7\xd3\xbe\x39\xdb\x7d\xfb\xd0\xaa\x5d\xd8\x57\x17\x60\xef\xfc\x24\xf5\xd0\x56\xc3\xe0\x97\x42\x62\x74\x8f\xe0\xcd\x8d\x97\xfd\xfe\xee\x06\x7e\x61\x64\xa6\x1e\xc7\x83\x4c\xc0\xbc\x6f\x79\x3c\xb5\xdd\x87\xfe\x9e\x8e\x3f\xa7\x37\x77\x78\x41\x1f\x1f\x77\xa6\x7c\xcd\x55\x22\x06\x2c\xb3\x53\xad\xe7\x46\x21\x90\xb4\xcb\x4b\xa3\x6e\x43\xcf\x49\x5e\x20\x47\x03\x20\x6c\x03\x9e\x66\x3e\x88\xef\xef\x15\x05\xe6\x9c\x97\x4a\xdd\x46\xdf\xc0\x82\xc0\x9c\x13\x80\x21\x2c\x04\x04\xb1\xd4\x6b\x75\x61\xb2\xa7\xef\xcf\xe9\xca\x1d\x1e\x18\x32\xd3\x5b\xdf\x5a\x6f\x7d\x61\x65\xbc\x9d\x9d\xa1\x42\x7d\x0e\x00\xe6\xb9\x92\x9e\xad\xfe\x3f\xb7\xfc\xe7\x36\xbe\xff\x94\x71\xd7\x7b\xc1\xb3\x61\x87\x6a\x44\x37\x54\x54\xdd\x05\x6a\x3c\xa7\x22\x20\x11\xc4\x61\x37\x54\xbf\x90\xf6\x2d\x6f\x0c\xb8\xf3\x1d\xe8\xd2\xc1\xac\x28\x3c\xcb\x0a\x55\x50\x9c\x50\x11\xf9\x09\xe0\x24\x4e\x15\x74\x75\xce\xac\x57\x57\x65\xe8\x0d\xb2\x56\x8d\x51\x09\xb5\xab\x37\x3b\xc5\x46\xa5\xed\x8b\x0c\xec\x52\x66\xde\xbe\x99\x0f\x82\x17\xf6\xae\xda\xee\xe2\x0b\xef\x7c\x07\xe8\xac\xae\x37\x66\xee\xa8\xfa\x27\xd5\xbf\x67\xe4\xf4\x4d\x78\xd8\xec\xb2\x03\xdb\x16\xde\x3c\xb7\xf2\xbe\xb2\x41\xc7\x1d\x63\xba\x5f\x2a\x01\xa7\x0d\x3b\x6b\x18\x54\x7a\xa7\x5f\x06\xf2\xf9\x44\xa6\x7c\x8b\x55\xb3\xdf\xa4\x4a\xf4\x1a\x44\xd8\xaf\x0a\x01\x3e\x51\x4d\x3d\x19\x84\xd2\x5b\x55\xd3\xd8\x07\x70\xe1\x06\x70\x78\x03\x8c\x61\x87\xaa\xb3\x7f\x81\x11\x4e\xf8\x96\xda\x06\x11\x67\xa4\x5a\xd3\x6a\xd5\x97\xfe\x97\xd3\x7d\x0f\xe9\x9d\xfc\xc9\x1a\xbe\xb3\xfe\xb6\x55\x15\x9a\xb5\x20\x1f\x7c\x5c\xbd\xaf\xcf\xe9\x2b\x25\xdb\x25\x5b\x1f\xde\x5a\x1d\x18\x52\x2b\xc7\x52\xee\x82\x4e\xcd\x9e\x76\xd9\x3c\xb9\x63\x97\xab\xa6\xfb\x3e\x83\x2e\xd4\xf8\x3a\x37\x75\x38\x7c\x04\x99\x7b\x3a\x30\x79\x52\xd2\x31\x76\x5f\xa6\x52\x42\x54\x49\x54\x01\x6e\x02\x9d\x2f\x50\x55\xb4\x01\x4c\xf8\x1e\x82\x81\x8b\x02\x01\xcc\x44\xd5\xec\x16\xf8\x79\xe8\x9f\x1b\x0c\xb7\x31\x64\x73\x68\x75\x6f\xf2\xed\x5f\x50\xdb\x78\x60\x2b\x8b\x41\x86\x6d\x29\xf0\x27\x57\x00\x05\x4f\x00\xbf\x2c\x0b\x02\x4e\x2c\xaf\x81\x72\x1b\x8d\x35\x7d\x0c\x99\x4e\x2c\xac\x86\xf7\xf1\x54\x80\xb4\x89\xa0\xd1\x5d\x80\xa9\xe7\x82\x58\xf9\x6a\x20\xb0\xd4\xbc\x94\xec\x0e\x0f\x2e\x0a\x3c\xf9\x51\x40\xfd\x29\x40\xe6\x5d\xa0\xc2\xd7\x59\xa6\x9f\xd7\x38\xb8\xc3\x43\x42\x00\x97\xcc\x05\x50\x59\x06\xd4\xb2\x05\x34\xb1\xbf\xa4\x67\x8b\xff\xcf\x2d\xbb\xbb\x8d\x19\x77\x53\x32\x62\xab\x64\xc7\x43\xf9\xdf\x3c\xbd\x02\x78\xaa\x55\x65\xb9\xdd\xa5\x7a\x9d\xf4\xd8\xe7\x39\x45\x92\x0b\xdd\x3d\xd3\xcc\xb2\x3c\x72\xc8\xb3\x9b\x15\x03\xbd\xc9\x34\x35\xda\x7d\x92\xa5\x79\xa0\xa8\x9d\x80\x74\xe3\x55\x9e\x3c\xa7\x1a\xe9\x75\x2f\x9a\xc3\x1a\xa9\x4f\x80\x7e\x5f\x07\xca\x7e\x0d\xe6\x67\x2b\x54\x96\x78\xa6\x92\xc0\x0b\xc0\x12\x6b\xd5\x10\x75\x0b\x30\xa2\x73\x39\xa7\x99\xae\xe6\x61\xad\xd7\xa7\x1f\x69\x68\x2d\xb4\x78\xc1\x96\xc2\x86\x1b\x37\x37\x76\x7d\x51\x36\x20\x6a\xdb\xec\x3f\x36\xa4\xf4\xd5\x0f\xd6\x64\x56\x72\x58\x35\xc7\x0f\x39\x4d\x39\x7d\x72\xf0\xb2\x99\xfa\xed\xcf\xd3\x77\x05\xda\xf9\x9a\xa9\x2f\xc6\xdc\x19\x3e\xbe\xf7\xbb\x0d\xd5\x0f\x3a\x52\xc8\xa2\x96\xa3\x4f\x32\x9f\x7d\xa9\x22\x3e\x15\x84\xce\x87\x40\x1c\x3b\x45\x15\x75\xa6\xfa\xb7\x7b\x40\xed\x7b\xc1\xec\xf3\xc4\x37\xdf\x06\x1e\x89\x00\x1f\xee\x81\xc4\xe4\x06\xd5\xe6\x6f\xa8\xdd\xbc\x53\x2c\x87\x4c\x97\x77\xb7\x9b\x1d\x84\xdb\x87\x4c\x7f\xd1\xbc\xed\xfe\x41\xef\x06\x2d\xff\x7b\xb7\x32\x74\x73\x4b\x9d\xd2\xf7\x6d\x7a\xf8\xe0\x0e\xba\xcc\x06\x6e\xab\x15\xa4\x67\x11\xa9\x2a\xca\x03\x90\xfd\x7f\xa9\x12\xc6\x7b\xef\xb7\x30\xa3\xc7\x6d\x18\xe7\x8d\x26\xc2\x30\x35\xb6\x01\xb6\x1b\xaf\xb6\x7f\x1f\x50\xec\xf6\x02\x20\x32\xcb\x6b\xec\xdd\xc6\x82\x3e\x3e\xc1\x91\x99\x35\xb6\xf1\xb8\x0d\x8b\x01\xb1\xcd\x56\x29\xfc\x2a\xe8\xed\x26\x5f\x50\x63\x5e\x63\xe4\x36\x46\xf8\xf9\x80\x65\xad\xc9\xe0\xf9\x73\x40\xb4\x34\x00\x93\xed\xfe\x60\xad\x28\xaf\x91\x73\x1b\x43\x22\x7c\xc1\x5a\xd1\x42\x40\xb5\xa7\x54\xba\x7c\x00\xea\x5f\x1c\x08\xd6\xb4\xf2\xd2\xb9\xdb\xe8\xbf\xd4\xdf\xc7\x1b\xeb\x1f\xf1\x9a\x5d\x18\x02\x02\x72\x60\x87\x7b\x40\xb8\xbb\xae\x98\x67\x9b\xff\xcf\xed\x63\x71\x1b\x33\xc6\x7c\xfd\x66\x7e\xea\x83\x17\x40\x20\x79\x46\xe5\xf4\x17\xc0\xd9\x2d\x51\x47\x3b\x4e\x1d\xe4\x3d\x59\x81\x30\xf8\xb0\xb7\x38\xf0\x23\xaa\x31\x5e\x00\x33\xb1\x56\xaa\xeb\x2a\xe1\x7d\x3e\x56\x45\x7f\xdc\x37\x8f\x04\x26\xaa\xab\x54\xd3\xfc\x17\x40\x66\x89\x0a\x99\x37\x40\x4d\xcb\xd5\xc6\xdf\xe7\x0c\xf4\x02\xef\xef\x39\x1d\xe0\xf0\x71\x1c\xb8\xfd\xfb\x3b\x24\xfe\x77\xec\xf7\xd3\xa1\x26\x21\xea\x7e\x54\xc5\x41\x65\x8f\x08\x33\xfa\x5d\xf1\xce\xee\xd4\x67\x77\xab\xce\x39\x03\xb0\xd2\x3c\x10\x3b\xac\x07\x2e\x6d\x89\xda\xf8\x13\x30\x07\xdd\xf9\x6d\xc9\x56\x95\xee\x8b\x37\xe2\x0e\xeb\xa4\xfe\x02\x96\x8f\x36\xaa\x7f\xdf\xad\x42\x2b\xd1\x3b\xf3\x0e\x2b\xef\x71\x1b\x2e\xab\xae\x27\x11\x44\x2b\x82\xb7\x8d\x78\x10\xb4\x6f\x56\xd5\x75\x19\x2c\xa9\xb8\x55\x12\xd9\x9d\x33\x86\x0c\xbf\xe2\x99\xf3\xf0\x45\x62\xc6\x98\x01\x37\x43\xca\x7b\xca\xd5\x59\x2b\xb5\x30\x9c\x9d\x52\x66\x68\x87\xf8\x31\xa3\x97\x96\xbe\x53\xd3\x1b\x6a\xa8\xca\x79\xa9\x5a\x74\x3a\xa8\x2e\x51\x75\x6b\x29\xc0\xda\x23\xbf\xe5\x08\x72\x12\xd3\x2e\xe9\xe0\xed\x75\xf1\xa1\xfa\xa1\x0d\x05\xb6\xf4\x9e\x61\x0d\xba\x27\x9c\x8e\x1c\x77\x74\x69\xb1\xbe\xf5\xfb\xce\x22\xf6\xe8\xf5\x99\x95\x1f\x53\x3b\xf7\x40\xd5\x47\x72\xd6\xaa\x4e\x5e\x9a\x76\x1b\x43\xfc\x82\x41\x2a\xe7\x09\xd0\xee\x6d\x40\xbf\x6b\x80\xb9\x6c\xf1\xf5\x98\x7f\xae\xa3\x6e\x63\x80\x6f\x4f\x30\x9f\x5b\x9a\xb5\xd6\x05\x5c\xe0\x66\x60\x32\xaf\x40\x1b\x5b\x41\xab\x4f\xb2\x96\x9a\xf3\xea\xef\x37\x23\x2f\xe8\x95\x7a\x33\xa8\x7a\x32\x68\x2c\x15\x58\x51\x7c\x90\x67\x69\xc0\xcf\x6d\xeb\x72\x1b\x33\xbe\x7a\xd7\xa2\xd4\x99\x9b\x3a\xe2\xe7\x54\x54\x3c\x07\x31\xe5\x11\xd5\x70\xae\xa8\x2a\x7e\x0a\xaa\xbf\x03\x72\xa0\x93\x55\xea\xde\xa4\xfe\xed\x3c\xe0\xaf\x95\xea\x40\xde\x06\x61\xc7\xc2\x9c\x6b\xb6\x85\xc9\x72\xbd\x6a\xf6\x3d\xff\xe5\xf9\xfc\xcf\xed\x52\xde\xce\x89\x9e\x78\xb9\xfc\xe6\xaa\x0b\x5c\xc3\xff\x99\xf9\xd6\xd0\xb5\x5d\x93\x7d\xd9\x4b\x87\x0c\x6b\xff\xac\x5c\xdb\xaa\x89\xe1\x9e\x72\xed\x91\x33\xeb\xb0\x97\x4b\x22\x6e\x4d\xbc\xd5\x39\xfd\xce\xce\x91\xff\x35\xeb\x32\xeb\x75\x66\x23\xff\xe5\x5c\x2d\x2b\x7b\xb0\xa3\x6f\xc9\x63\x11\xf4\xd7\x25\x07\x87\x38\x1f\x76\xb3\xdd\xba\xa3\x8d\xec\x58\x75\x7d\x6c\xdc\x04\xb9\xd9\x83\x1e\xa9\x83\xbd\x94\xe8\x5d\x77\x0b\xeb\xe5\x71\x1b\xdc\xaa\xcd\x3d\xc8\xe9\x48\x16\x4e\xdb\x2a\xbc\xe8\xb3\xd9\xdc\xf3\x62\x05\x93\x6e\x4f\x81\xb3\x57\xd3\x2b\x3b\x0e\x8f\xee\xf7\xcf\x53\x68\xd8\x11\xea\x54\x77\x43\xa6\xa5\x0d\x50\x91\x07\x26\x9b\x91\xaa\xf2\xae\x00\x57\xad\x22\x7e\x06\xf8\xd3\x21\x55\xb9\xe9\x5e\x45\x85\x49\xaa\xe9\x01\xbf\xbf\x02\x58\xc5\x6c\xd5\x86\xb7\x03\x5f\xa3\xea\x72\x4a\x56\x9e\x31\xa7\x74\x0f\x57\x55\x28\x35\x71\xc6\x88\x84\x66\xb5\x7d\x34\x25\x1a\xb7\x1b\x14\x3d\xa9\x61\x3a\x81\xce\xea\x9b\x30\xee\x09\x7c\xf0\x7e\xf8\xb6\xec\xa5\xb7\xcf\x8f\x8e\x69\xba\xcc\xb3\xb2\x4a\x42\x2a\x27\xac\xbc\x31\xc9\xff\x51\x86\xf3\x51\x07\xb2\x76\xed\x5b\xd8\xfa\x5e\x9b\x67\x77\xcf\x1c\xd1\xa7\x2a\xed\x3c\x57\xad\xf5\x6b\xd6\x0c\x22\xe7\x18\xbe\x1a\xfc\xfc\xc4\xad\x09\x37\x3a\x79\xd6\xd7\x98\x3b\xf8\x4b\x4a\xaf\x2d\xa7\x1b\x7d\x3c\x73\x39\xa6\xd1\xeb\x83\x05\xd2\x9f\x0c\x0c\x6b\xe9\xf5\xd8\xa0\xdb\xeb\xd4\x5e\x5c\x06\xc1\xf9\x15\x40\x69\xee\x12\xc0\xb2\xf2\xc2\x84\xdb\x18\x18\x50\x1a\xac\x63\x6c\x05\x15\x1d\x02\xf0\xbf\x06\x6a\xdc\x05\xfe\xb4\x1d\x04\x13\x71\x01\xc0\xb2\xf2\x42\x92\xdb\x18\x11\xe1\x53\xd8\x6b\x59\x2f\x81\x41\xbd\x07\xba\x9f\x0f\x6a\x1c\x5f\x02\x84\x99\x79\x81\xcc\x6d\x0c\xf6\x1f\x07\x66\x98\x2b\x81\xb0\x73\x40\x7e\x07\xc4\xfb\x6b\x0a\x80\x0a\xf3\x02\x9b\xdb\xe8\xd7\xc1\xc7\x5b\x61\x98\xd6\xfb\xf8\x57\xd0\xf9\x18\x50\xe1\x8b\x00\xe0\x92\xf3\xc2\x87\x3b\x3c\xb4\xe8\x4c\xaf\x47\x5e\x0c\x3a\x98\x0a\x02\xcb\xfd\x40\x9b\x7b\x01\x48\x27\x17\xf6\x74\xf9\x39\x2c\xb9\x0d\x81\x93\xbc\xc1\x8d\x46\x9d\xf9\x02\x7d\xa6\x00\x06\x99\x53\x18\x4c\x67\xf2\x02\x93\xdb\xf8\x5b\xb0\x21\xcc\x3b\x9d\xd9\x0a\x84\x5b\x0c\x06\x66\x23\xe8\xff\x0c\xc0\xaf\x33\x41\x63\x5f\x41\xbc\x3b\x36\xd0\x13\xeb\xff\x73\xdb\x56\xdd\xc6\x0c\xa9\x49\x46\x6c\x45\x6f\x6c\xae\x52\xdf\x0e\x40\x76\x91\xdf\x96\x59\x54\xfb\x78\x00\x82\xc6\x8d\x6a\x81\xff\xbc\x13\xb5\x30\xa7\xea\xc2\x40\x14\xbe\x44\xe5\x81\x63\x6a\x3c\xf1\x14\x38\xe1\x68\x95\x28\x97\xa9\x4e\x38\x19\xc4\x28\xbb\x54\x82\x78\x06\xc0\x31\x23\x67\x9a\x75\xef\xb8\xfe\xb5\x97\xdd\xde\xd7\x23\xcd\xff\x74\xf7\x1e\x1b\xfb\x5f\x78\xfa\xe8\xe8\xdd\xf0\x8d\xcf\xe0\x36\x65\x92\x75\x1d\xe8\x37\xb1\xde\x99\x22\x50\xc6\xa4\x02\x39\x9e\x7f\xda\xf2\xcc\x83\xf7\xcc\x9f\xfd\x82\xa3\xcb\x5e\x3c\xfe\x62\xfb\xac\xa9\xd3\x67\x36\x8a\x32\x2c\x8b\x4a\x98\x4f\xdf\x5c\xd0\x0f\x5f\x99\xbd\x74\x21\xea\x64\x89\x89\x65\x57\xfd\xf9\xdf\x8d\xaa\xad\x47\x9f\xec\xf1\xbc\x49\x07\x74\xc3\xde\x88\xf5\x4b\x5b\xd4\x39\xb6\xec\xe8\xc8\x9d\x25\xbc\x73\x30\x20\x7b\x8c\xda\x93\xe7\xc0\x81\x47\xab\x71\xe1\xc7\x82\x39\x04\x08\x7a\xb7\xa5\xde\xe8\xce\x55\x5b\x8e\x1e\x73\xfd\xc1\xa7\xa8\xfe\xc5\x87\x9d\xe9\x97\x30\xe0\x71\xd2\xa2\xd9\x23\xe8\x83\xef\xde\x2f\x38\x9f\x49\xc0\x61\x2a\xe7\xa9\xfe\xfb\x30\x08\xee\x77\xab\xdf\x0e\xa9\x01\xc7\x51\x90\x09\x9c\xae\x6a\xef\x84\xaa\xd5\xcf\x00\xea\x6b\x41\xb0\xf8\x02\xc4\xe3\x93\x54\x85\xbf\xc9\x5a\xee\x05\x93\xa8\x99\xea\xa8\x5d\x54\xa9\x35\x11\xac\xc5\xfd\xa7\xba\xae\x94\x20\xc0\x0f\x79\x69\xda\x6d\x0c\xf4\x8b\x00\xd3\xd0\x38\x60\x2c\x63\xc1\x87\x73\x59\x9b\xbc\x02\x00\xb0\xf3\xd2\xbd\xdb\x38\x27\x24\x22\xd0\x0b\xec\x4b\x00\x02\x2f\xb2\x76\xc2\x80\xe8\x20\x1e\x8c\xee\x65\x80\xe7\xbd\xa0\xb0\x27\x2b\x70\xc8\x6b\xe8\xdc\xc6\xa6\x3e\x6e\x40\x46\x47\x40\x1b\x93\x00\xc5\x27\x03\x8d\x5d\x2f\x0c\xd8\x28\xaf\x91\x73\x87\xfb\x17\x06\xf1\xd3\x3e\xc0\x10\xdb\xc1\xc8\x6c\x04\x42\x2f\x09\xf2\x4c\xf1\x9e\x01\xca\x6b\x13\xf8\xff\x0e\x0d\x7c\x5b\x5e\x55\xad\x6d\xb6\x3a\xdc\xb3\x81\x49\x45\xa9\x3e\xfa\xbe\xea\x4d\x92\xb2\xd8\xca\x8b\x8e\xb0\x8a\xea\x14\x4d\xc5\xcb\x4d\xa0\xb7\x8b\x5e\xa1\xc2\x14\xef\x88\x4f\x54\xbd\xda\x1e\xb0\xa5\x6c\x8f\x8a\xde\x43\x39\xf1\x3a\x64\x7f\xaf\xea\x63\xe7\xad\x7f\x1b\x1b\x3d\xb0\x08\x73\x76\xf9\x9e\x17\xc6\x7d\x69\x43\xbe\xac\xac\x39\x7d\xdf\xb5\x0f\xdd\xaa\xfe\x39\x34\xb3\xea\xc8\x9c\x0b\xcd\xcd\xe2\x07\xf7\x8b\x8e\x18\xb0\x73\xd9\xb1\x25\xe1\x7c\xd3\x0f\xe7\x7c\x96\x6d\x2b\x8d\x8d\x40\x5e\x1c\xee\xbd\xf9\x46\xb9\xf8\x90\x86\x99\x4d\x9e\x55\x51\xe8\x01\x93\x8e\x03\x39\x67\xd2\x28\xd9\xe6\xbf\x4d\x7f\x7e\xa5\x22\x66\x56\x7f\x9b\x3c\x42\xb3\x6a\xcc\x8d\x21\x57\x42\x6b\x46\xda\x3f\x8c\x97\x1e\x45\x45\x97\x9a\x97\xa9\x84\x2b\x6a\x2f\xde\xa9\xb1\x73\x06\x58\x43\xdb\xa2\x82\xfe\xa4\x8a\xee\x67\x60\xb6\x13\xab\x5a\xe3\x12\x55\x1f\xcf\xbc\x09\xe3\xb0\x9e\x1e\xb7\xe1\xa0\xaa\xd4\x6b\x59\x39\x86\x9c\xe1\xf6\xda\x46\xcb\xfb\x4e\x63\x27\x91\x92\xc0\x4c\x2f\xde\xed\xfc\xa7\x7b\xf2\xfb\xb7\x85\xf7\x0c\x78\xab\x8d\xd1\x71\xef\x5b\x1a\xd7\x64\x2f\xfd\x77\xf7\x56\x35\x63\x4b\xef\xe1\xbb\x3f\x5f\xd4\x7c\xde\xe2\x57\x87\x36\x1e\x5d\xb1\x3f\xdc\x35\x3c\xa3\x65\xda\x95\x07\xec\x80\xa4\x1c\x9b\xe3\x4b\x0d\x4f\xb8\x23\x2f\x70\xb8\x8d\x35\xaf\xd5\xaa\x18\xd1\xb3\x6d\xe7\x8b\xd7\x42\xda\x94\x1c\xb4\xd0\x3a\xce\x5d\x7d\x7e\x50\xd5\x52\x5e\xd4\x83\xf4\xf6\x34\x95\x18\x4f\xa8\x7d\xba\x0a\x26\x67\x5b\x54\x8b\xfd\x02\xe6\x3f\x33\xbe\xcd\x93\xbf\x9b\xf9\xbf\x1a\xda\x74\xe5\xa6\xaa\x2b\x0a\xbf\x9b\x7b\xb8\x61\xc0\xb0\x3e\xe1\x48\xf5\x63\x2d\xc3\xf6\xcd\x6c\x30\xeb\xa3\x99\xae\xfc\xa8\x78\x66\xe5\x7f\xab\x40\x7a\xae\x62\x2b\x2d\x67\x6c\xe3\x7b\x86\x33\xbf\x79\x7d\xab\x6a\xca\xef\x05\xde\x35\x2f\xfb\xbc\x7c\x0b\xcb\xec\x8d\x01\x2d\xb9\xd3\xb8\xed\x4b\x95\xd8\x71\xdb\xde\x7b\xc3\x35\x60\x38\x09\x39\xd7\x15\x35\x0d\x6e\x15\x0f\xbf\xdf\x72\xdf\x9c\x45\xd6\xe7\xc9\x5d\x42\x9b\xdd\xfe\xbc\xff\x66\x99\x76\x8b\x7b\x50\xf4\x9e\x42\xcb\x5a\xdd\x10\x7b\xfe\x1c\xce\xdc\xe1\x63\x83\xc1\x2a\x6e\x12\x30\xd7\xd9\xc0\xc5\xbd\xc8\xc2\x50\x61\x40\x00\x79\x21\x50\x9d\xcc\xfb\x54\xf7\xd6\x18\x03\x5c\xe4\x0d\x60\xb8\xb3\x00\x26\x6e\x67\xad\x85\xe7\x05\x47\x77\x78\x70\x41\x20\x62\x02\x60\xa4\xbb\x20\x68\x58\x02\x64\x3d\x9d\xb5\x07\x28\x2f\x74\xb9\x8d\x01\xfe\x3e\xde\x17\x9f\x1b\x36\x66\x05\x5c\xa0\xc6\x13\xe0\xc3\xc6\x92\x60\xcb\x4e\x5e\x08\x74\x1b\x43\xfc\x7d\x8a\x78\x23\x9c\x5d\x80\x92\xee\x82\x4e\xaf\x06\xac\x77\x0a\xe8\xf3\x66\x30\x10\x36\x2f\xb8\xba\x8d\xc1\x3e\xbe\x25\xbd\xc2\xa6\x03\xda\x3b\x05\x28\x7a\x2d\x18\xb3\x17\x59\x2b\xf7\x79\x41\xd3\x6d\x0c\xad\xeb\x07\x28\x7a\x12\x18\xa1\xc5\xa0\xc6\x48\x50\xe3\xc7\xa2\xa0\xc6\xbc\xb0\xea\x36\xfa\xf9\xfa\xc4\x79\x6b\x5c\x0d\x42\xa7\x7b\xa0\xb3\xe7\x01\x53\x5e\x2d\x08\x16\x39\xf2\x42\xaf\x3b\xbc\xa7\x1f\x18\xf3\xf1\xa0\xd3\x7f\x83\xa1\xfe\xe4\x9d\xc4\x84\x35\xf5\xb8\x0d\xd3\x7d\x3d\xf1\xde\x29\x68\x5e\xe7\x79\xdc\xc6\x8c\x83\x5f\x32\xf3\x37\xea\x2c\x49\xf5\xf3\x0f\x81\x90\x49\x20\xbe\x98\xae\xda\xfb\xa7\x9c\xcb\x76\x7e\x6b\x0a\xdd\xde\xb5\xa1\xb0\x5d\xd7\x69\xab\xae\xe7\xbc\xfb\x84\xc4\x9f\xba\xd5\xf8\x69\x9d\x14\x7a\x5a\xd8\x87\xe3\xf7\x5f\x77\xf2\xee\x30\x54\x79\x24\x03\xc8\xfb\x0e\x54\x19\xa1\x06\x19\x2b\x40\x82\x67\xd7\xb7\x90\x43\x6d\xe5\x44\x4e\xaf\x50\xc5\xff\xd9\x33\xdf\x53\x4d\x5f\x46\x9d\x5f\x58\x70\x4b\xe7\xe7\x7f\xf7\xaf\x2d\x25\x04\xf6\xf8\x7b\x76\xcc\x1f\xab\x6a\x9c\x6b\xd1\xba\x45\xa6\x9f\x69\xeb\x25\x5a\x46\x25\x26\x95\x7f\x5f\x01\x95\x27\xe7\x9c\xa0\x6a\x98\xe4\x15\xd1\x68\x51\xe7\x90\x88\x09\x3d\x0f\x16\xde\xb9\xb7\x6a\xd7\x4a\xec\x64\xdb\x95\xe2\xce\x31\xbf\x27\xcc\xad\x3d\x78\x91\xf7\x74\x82\xca\xd6\xb7\xc1\xee\xd0\xbf\x55\xd1\x1e\x7f\xdb\xc0\x0f\x12\x50\x11\xea\xb7\xf5\xc0\x2e\x6e\xe7\x5c\xb6\x39\xe8\x63\xd9\x68\x6f\x92\x9c\x58\x4c\x9e\xda\x4a\xd8\x39\xef\xca\xdb\xf9\x03\x5e\x3f\x3e\xf8\x7c\x00\x5e\xca\xa6\xc1\xde\xc7\xbe\xf0\x6e\xe7\x51\x1d\xca\x7a\xb5\xa9\xab\x20\xac\x8d\x54\xdd\xcb\xa7\x9c\xd4\xd6\xed\x50\xb5\x19\x41\xd7\x22\x8b\x94\x10\xde\x4d\x28\xf0\xa0\xe5\xdb\x1e\x95\xdb\x75\xbf\xd4\xf2\xf0\x6c\xe3\xf5\xc2\x8f\x52\x23\xe0\x19\x99\xbd\xb7\x79\xdc\x86\x58\x35\x2c\x5e\x5b\x24\xc7\xf3\x55\x75\x03\x87\x84\x60\xd2\x72\x67\x3f\xe7\x5f\x35\x7e\x0f\x7b\xcf\xad\x9c\x59\xa3\x73\x57\x67\xeb\xf4\x84\x29\x93\xa3\x53\x07\x9f\xcf\x6c\x3b\x59\x1d\xab\x34\x90\x46\x7b\xac\x82\xe1\x0b\x70\x74\x11\x2a\x6f\x4f\x51\xff\x59\x0c\x3a\x9d\x04\x36\x68\xa9\xce\xe1\x88\xea\xf0\xbe\xe4\x5c\xc5\x19\x7f\x29\xe8\xdf\x56\xe1\xd1\xeb\x17\x94\xdf\x26\xdd\x8b\xb7\xdd\xdb\xff\xf5\xed\x61\x6b\xa7\xb7\x7f\xac\x5d\x2e\xde\xa8\x7f\x05\x09\xcb\xac\x7b\x8e\xda\xd2\xfc\x6f\xdb\xa3\x0b\x7b\xfa\xfd\x1c\xba\xdc\xe1\x11\x11\x60\x25\x61\x03\x70\x09\x0f\xc0\xa8\x9f\x03\xa1\xc6\x2d\x55\xc3\x1f\x8a\x03\x62\xcd\x0b\x4d\x6e\x63\x50\x30\x58\xb5\x0f\x1b\x03\xa2\x40\x60\xac\x4f\x01\x31\x1e\x2e\x02\xb6\x17\xe6\x85\x26\xb7\x31\xc4\x27\x78\xac\x57\xce\xbb\x80\xf4\x8e\x03\xf1\xf6\xab\x8e\xd0\x03\xac\xe3\x6c\x51\xb0\x24\x9b\x17\x7c\xdc\x86\xe1\x01\xde\x4a\x0f\x03\x73\x5d\x0c\xaa\xf9\x17\x38\x94\x6d\x25\x01\x5d\xe5\x85\x1f\x35\x46\x0d\x05\xbb\x15\x66\x80\x6e\x3e\x01\x15\x6d\x00\x6d\xc4\x64\xed\x7f\xc8\x0b\x51\xea\x14\xdc\x07\x2c\xca\x2e\x05\x34\x95\x0e\x6a\x7c\x00\x28\xf5\x58\x09\xd0\xe7\xbc\xb0\xe2\x36\xf8\xcf\x06\x3e\x0f\x3c\x9d\x90\xb5\xa1\x12\x38\x96\xbb\xc5\x3d\xb1\xde\xa0\x37\xaf\xd3\x89\x6e\xe3\x5d\xef\x56\xf0\xff\x0f\xd9\xc1\xa5\x37\x9c\xac\x39\x30\x90\x1e\x50\x7b\xfc\xb6\x85\xdd\xdf\xa1\x1a\x83\x5d\xe8\x52\xfd\xd1\x7f\x23\x6a\x2d\x6e\x58\xbf\xb2\xef\xa1\x1c\xa5\xcf\xac\x9d\x7d\x74\xdd\xb8\x0f\x77\xdb\x96\x9f\xf8\xd6\x79\xe5\xe6\xe0\xf9\x31\xdb\xd6\xa5\x44\xa7\x50\x01\x73\x3b\x56\x6d\xee\x6e\x9d\x49\xca\x15\x54\x68\xe7\x24\xa2\x4e\x23\xdd\xc3\x95\x90\xf8\xe3\x2f\x17\x1f\x9f\x7b\xba\x76\x65\x7b\x89\x4a\xb5\xc7\xbc\x6c\xba\x86\x98\xd3\x66\x1d\x9c\x0a\xc7\xc6\x79\x73\xfe\xaa\x4d\xde\xc9\xc9\xbd\xdd\xaa\x4e\x18\xd5\xab\x65\x4f\xfe\xee\xb3\xb0\x41\x07\xc6\x72\x4d\x28\xa5\xe8\xb6\xa8\x0f\xb1\xbc\xa3\xc7\x7c\x9d\x6d\x55\xa1\xd9\xde\x61\x03\xc0\xdd\x96\xf3\x79\x6b\xf4\xca\x1e\xda\x3b\xe8\xea\x91\x66\xea\xe1\xba\x5e\xed\x22\xeb\xbf\xdb\x79\xfb\xf7\x7b\xf7\x2a\x1d\x5e\x5a\xb1\xce\xf4\xf1\xbd\xde\x78\x33\x27\x20\x22\x5c\xaa\x0a\xb1\x46\x25\xe9\xf5\xc0\x27\x4e\xf7\x0e\x69\x58\xb8\xb7\xcc\x44\xd5\x88\x8f\xab\x46\x7c\xdb\xbb\xbc\x1b\xd6\xcc\xe3\x36\x44\xa9\xbc\xf0\x1a\xd8\x65\x2c\xb0\x80\x4d\x20\xc5\x19\xa7\x06\xd0\xe7\xd4\x89\xc5\x57\x30\xdb\x8c\x52\x6b\xda\xa3\xfe\xb4\x2f\x67\xc6\x7b\x95\xb9\x32\xf9\xaa\x7a\xe7\xfb\x97\x37\x2f\xdc\xec\x96\xde\xae\x9d\xfe\x6a\xe2\x87\xf3\xf5\xff\x7c\x17\x3f\x49\xbf\x74\x6f\xa3\x32\xaf\xbc\xd9\x72\x95\x03\xff\x01\xc2\xcf\xfe\x76\x9a\x44\x15\x63\x69\x4e\x5a\x0c\x6c\xb6\xa4\xcb\x64\x3c\xfc\x04\xb5\xd2\x3c\xb1\xe6\xf5\x57\xd3\x74\x52\xf9\x33\x43\x47\x2c\xaa\xf0\xee\xb7\xa7\x93\x5b\x6c\x2b\xdb\x3a\x53\xd6\xf5\x39\xa7\xf6\xef\x1e\xac\x6e\xbf\xfa\xc3\xa1\x4a\x1d\x89\x32\xbf\xf7\xfa\x63\x67\xc3\x09\x1d\xee\x6d\x8b\x4b\xa8\x72\xbe\x88\xbc\xe0\xa5\xec\xd3\x33\xd8\xcb\x98\xaa\xd2\xa6\xa8\x8d\x67\x80\x75\x8a\x15\x6a\x64\x7d\x23\x27\xb9\xef\xed\xf9\x4a\x77\x1f\x9d\x55\x6b\x9b\x7b\xec\x39\x77\xb7\x73\xec\x93\xeb\x69\xd3\x2b\xbf\x33\x84\x44\xed\xab\x12\x12\x11\x5d\x6c\x7b\x8e\x28\x79\xad\x90\x70\x1d\x0b\xbb\xd5\xbb\xd5\xdf\x49\x7b\x6b\x47\xbb\x92\x92\xd8\x7e\x29\xab\xd8\x03\x65\xa0\xc8\x24\x6d\xb9\x73\x9d\xbc\xdc\x5c\xd8\xdb\xfb\x35\xaa\x9f\xfa\xf4\x6d\x27\x40\x56\x82\x3e\x2f\x88\xbb\x8d\xa1\x3e\xc1\xbf\x79\x6d\x6d\x15\xa0\x95\x69\x60\xe8\xbf\x82\xd1\x3c\xe4\x0f\x6c\x37\x2f\x33\x70\x87\x87\xfa\x54\xf6\x56\x78\x10\x3c\x3e\xd5\xeb\x48\xc2\xea\x83\x1c\x4c\x61\xb0\x3e\x96\x97\x6d\xb8\x8d\x35\x7d\x82\xc1\xfa\xd8\x23\x10\x5d\x6e\x03\x8b\x27\x09\xaa\x47\xfa\x9c\x15\x50\xe6\x65\x2d\x2a\x57\x75\x02\xe1\xdf\xc9\x2c\xf1\x00\xa5\x78\xc0\x2f\x7f\x97\x04\xbb\xb2\xf3\xb2\x1f\xb7\x31\xb0\x66\x53\xb0\xe2\x16\x0f\xd8\x73\x16\x48\x95\xac\x57\xc7\xe3\x11\xc8\x5b\x24\x03\x0d\x4f\x2d\xea\xe9\xf6\x73\x38\x77\x87\x87\x16\xf0\xc9\xcc\xf2\x19\xa6\x7d\x3b\x33\x02\x38\xfb\x3a\x50\xc6\xca\xac\x74\x42\x5e\x28\x77\x1b\x23\x02\x7c\x40\x7e\x65\x2e\xa0\xea\x29\xe0\xa4\x5b\x17\xef\x0f\x33\x8b\x82\xe4\x66\x5e\xf8\x77\x1b\x6b\xfa\x06\x83\x03\x84\x5f\x41\xb8\x30\x1e\xa8\x71\x0a\x18\x77\x1f\xc0\xd9\x59\x2b\xad\x79\x99\x82\xdb\x18\x16\x91\x25\xaa\x07\xcc\x7c\x36\x80\x26\x92\x81\x16\xe6\x66\x25\xb8\xf3\x32\x17\xb7\x31\xd4\xe8\x57\xca\x9b\xe0\xbe\x09\x42\xff\xc3\x59\x2b\x46\x60\x6c\x62\x80\xcb\x49\x05\xc3\x76\xdf\xcf\xb3\xd0\x9b\xda\xcc\xeb\x64\xbb\xdb\x98\xf8\x35\xe3\x60\xce\x33\xba\xb3\xf4\x33\xe0\x9d\x11\x89\xbd\xbb\x5e\x92\xcf\x15\xea\x54\x34\xc6\xb4\x78\xc9\xa4\x98\x94\x42\xff\xf0\x77\x1a\x26\x5f\x9a\x53\xab\x71\xf6\xd2\x31\xe7\x47\xad\x64\xdf\x37\x6e\x79\x6f\xd4\xda\xc9\x87\xce\xf5\x7c\xf1\x04\x1a\xbe\xa5\xd4\xaa\x8e\x69\xbb\x9b\x11\x53\x1f\x3c\x9a\xfd\xc5\x9b\xfa\x54\xcd\xfd\x82\x1a\x43\xbe\x05\xba\x58\x0b\x02\xba\x38\x95\x52\xcf\x02\x7c\x7c\x01\xa8\x9c\x0d\x3e\x1c\x05\x9b\x74\x62\x54\xe6\xba\x0e\x7a\xfe\xde\x9b\x84\x0d\xeb\xe6\x71\x1b\xf6\xaa\xc1\xea\x9b\xac\x54\x87\x1a\x17\xaf\x52\x8d\x6d\x3f\x60\xdb\xe9\xea\xb3\x87\xbe\x45\x5d\x20\x7a\x5e\xa4\x3a\x8e\x55\x6a\xd1\x57\x60\xa0\x3e\x83\xa6\x66\xab\xe0\xf5\x00\xdd\x1e\xcf\xe9\xa7\x8e\x3c\x6c\x84\xc5\xd0\xc7\x2a\x7f\xa9\x25\x9a\x6e\xae\xbd\x3c\x4d\x63\xe8\x3b\x2f\xb0\x8c\x78\xbe\x77\xb3\x4d\x07\xf6\x0f\xa2\x46\x7b\xa7\xa7\x20\x0a\xb8\x9c\x33\x89\x7b\x5f\xc3\xf7\x6e\x31\xf9\x42\xe5\xc4\xbd\xff\x6e\x27\x62\x16\x24\x96\xfe\xfb\xe4\x6f\x9b\xa6\x77\xc8\xb8\x5c\xf3\x72\x6c\x7c\xe0\x7f\xb7\xbc\x14\x07\xd2\xcc\x13\xd4\xde\xed\x56\x83\xdc\x93\x20\xd3\x3a\x56\xf5\x4f\x51\x20\x3a\x9f\xa6\x76\xe5\xb2\xd7\x77\x85\x55\xf2\xb8\x0d\xe3\xd5\xde\x4f\x05\xb9\xd3\x99\xaa\xe7\x39\xa1\xfe\x93\x96\x85\xe9\xbc\x86\xd9\x6d\x0c\xf5\xcb\x5a\xac\xb8\x0e\x8c\x24\x0e\xb0\xcf\x53\x80\xc9\x6d\x59\xfc\x9d\x17\x14\xdc\x46\xdf\x88\x43\xa0\xc6\x38\x10\x1c\xcf\x05\xca\x9f\x90\x95\x29\x0c\xf4\x74\xfd\x39\x3d\xab\xfc\x6d\xf4\xf2\xcd\xad\x6f\x67\x27\x40\x86\x6f\x28\x98\x01\x15\x06\x16\x97\x97\xce\xdd\xc6\x90\xc9\x41\x60\x49\xe9\x0a\xe8\xdd\x5c\x20\xd4\x2b\x10\xb4\xb8\x81\x2a\xa2\xc1\x87\xf4\x02\x9e\x08\xb0\x57\x36\x8f\xdb\x21\xd4\xd8\x6e\xc4\xe8\x9c\x16\x77\x51\x53\xeb\xf5\x1f\x1d\x87\xf7\x5f\xf6\xf8\xf9\xb6\x17\xfa\x59\x27\x52\x8e\x98\x94\x8a\xe5\xff\x74\x3e\x78\x76\x1a\xff\xa7\xe6\x55\xc4\xeb\xb8\x55\xa8\x4e\x56\x7b\x79\x1e\x98\xce\x4d\xd5\x71\x27\x79\xbf\x85\xe9\xd5\xf8\x04\xd8\xd1\x7e\x30\x50\x69\x60\x19\x76\xb9\xfa\xe8\x43\xe0\xf3\xaf\xa8\xdf\x3e\x83\x5c\xe9\x68\x8f\xdb\xb0\x59\x35\x91\xad\x20\x99\x36\x47\x6d\x6d\x3b\x78\x36\x5e\x8d\x53\x3e\x03\x3f\xb6\xfd\x5b\xd6\x15\xec\x96\x9b\xa1\x5a\x55\xac\xfa\xcf\x2e\x90\x96\x9d\xf0\x2d\x26\x53\x4b\x5d\x07\x07\x7f\xcb\xaa\x73\x29\x30\xbf\x88\x55\x4d\x7e\x37\x08\xba\xe6\x01\x0f\x7e\x23\xeb\xac\xaa\xda\xaf\x18\x35\xde\x5a\x09\x0a\x8d\xcd\x3a\xa8\x07\x4a\x3f\xca\x99\x72\x3d\x38\x74\x54\x85\xca\x4d\xb6\x5d\x4c\x7e\x55\x6c\xe3\x6e\xd1\xe7\xdd\xac\x79\x5d\x67\xc4\x55\x79\x7f\xf5\xf8\xbc\x94\xe3\x23\x5e\x0d\x88\xce\x5e\xfa\xc2\x85\xd9\xf7\xe9\x88\x46\xbb\xef\xec\x7b\x33\xe9\xba\x63\xe9\x8b\x40\xfc\xf8\xe6\x0e\xe5\x8a\xfc\x15\x82\x3c\xbd\xf2\x26\x62\x48\x5f\xaf\xa4\x2a\x71\xad\x00\x51\xe1\x94\x6f\x94\xa1\xea\x62\x1d\x58\x9d\xdd\xf2\x6d\xf3\x6b\x31\x30\xf1\xca\x6b\x28\xdd\xc6\x52\xff\x9b\xd1\x24\x01\x4f\xb1\x13\xa0\x2c\x15\x28\x7c\x9f\xda\xf9\xb7\x59\x79\x9d\xbc\xba\xe6\x36\x46\x54\xcf\xca\x14\x45\x00\x60\x5e\x04\x5c\x7b\x05\xd8\xd8\x6b\x7f\x50\x63\x5e\xdd\x77\x1b\xfd\xfd\x7a\x82\x1a\xdf\x00\x2e\xfe\x1b\x28\x3f\x06\x0c\xc7\xf2\x42\x9e\x55\x5e\xf0\xe7\x75\xd9\x89\xdb\x78\xf7\xda\xdd\x94\xd8\x1c\xd7\xf4\xf4\xdc\x1e\x3d\xa5\x50\x38\x15\x17\x3a\x6e\x68\xbf\x8a\x8d\xeb\x7d\x1e\xd4\xec\x50\x95\x62\x93\x2e\xd4\x71\xf9\x2e\x0e\x0b\xb5\x05\x3e\xce\xd4\xfc\xa6\x6f\xfb\xc7\xbf\xed\x42\x00\x1b\x5c\xa2\x55\xbc\xfe\xad\xaa\x7f\x09\x08\xd1\x77\xaa\x3f\x1d\x57\x71\xf7\x0c\x68\x74\x1c\xe0\x99\x94\xac\xfd\x32\x80\x43\xa7\xa9\x10\x8f\x01\x00\xa5\x3c\x6e\xc3\x58\x30\xaa\x17\x54\x00\xde\x04\x0b\x43\x0b\xbf\x9d\x7a\x02\xe8\x9f\xab\x7e\x5b\x9c\x33\x55\x9f\x31\xa4\x39\x93\x6c\x8d\x59\xd3\xe9\xdd\x68\xdd\xa6\x96\x95\x3f\x6f\xdd\xe6\x99\xbd\xbb\x49\x97\x95\xb5\x3f\xa7\xae\x29\x37\x4b\xf8\x9a\xf9\xec\x65\x95\x96\xef\x03\xbf\x32\x1d\x24\x9a\x26\xa8\x1d\x7b\xa0\xfe\xed\x59\xce\xb9\x80\xa6\xd4\x10\x67\xfd\x76\xc5\x8b\x20\x49\x45\x4a\x54\x9b\x57\xbf\x56\x25\x5a\x5b\xfd\x3c\x3d\x68\x94\x75\xbe\x3e\x46\xdc\x78\xa5\x8d\x77\xef\xab\x6a\x50\x37\x4b\xe4\x78\x76\x6b\xd3\x77\x03\x6f\x87\xb5\x7a\x1c\x8a\x8d\xd4\x86\xaf\xec\x39\x78\x6a\x63\xe7\xfa\x56\xba\x16\x91\xc5\xce\xee\x18\x11\x84\x4f\xc6\x32\x1b\x1f\xab\x42\x7c\x9d\x6a\xbf\x4f\x80\x3f\x99\xa8\x76\x71\xad\xd7\x9d\x86\x75\x55\xfd\xc6\xb7\xbd\x47\xc0\x21\x45\x7c\x73\x48\xaa\xb2\xcf\x81\xc4\x53\xbc\x3a\x40\x9f\x80\xa1\x44\xa9\xc5\xe3\xbf\x6d\x1c\x00\x40\x99\x9a\x35\x47\xcf\x6b\xc4\xdd\xc6\xa0\xc0\xac\x33\x0a\x47\x00\x74\x9f\x64\x1d\xd0\x00\x1f\x2e\xf8\x81\x38\x3f\x2f\xe5\xbb\xc3\x43\xca\x7b\xd3\xc8\x61\xbf\x79\x9f\xbe\x05\xbc\xf3\x7f\x59\x1b\xcd\x8a\x02\x5f\x91\x97\xd2\xdd\x46\xdc\xdf\x27\xc0\xeb\x2b\x26\x02\xa6\x9d\x02\xc6\xf5\x04\xb0\xbb\x07\x40\xd4\x65\x59\xb3\x95\xac\xb5\xfd\xbc\x06\xc7\x1d\x3e\x33\x18\x84\x94\xfb\x00\x51\x3c\x04\x01\xa0\x1b\x38\xa8\x78\x7f\xcf\x44\x6f\x62\x21\xaf\xeb\x83\xbe\xad\xa6\xdd\x05\x67\xcc\xd7\x82\xa9\x58\x8c\x3a\x98\xdb\x54\xbe\xb9\xf7\xdd\x22\x56\xd2\x84\x22\x9b\x5e\xc0\x33\xdf\xee\xde\xbb\xe5\xd6\xc9\x2a\xf3\xd0\xb0\x36\x2d\x2e\x3c\x15\x7c\xe6\x3f\x6f\x3c\xfe\xc6\xbd\x3f\x37\x67\x0e\xfd\x6a\x15\x2d\x6f\x40\x58\xb5\x4a\x35\xbf\xc3\x6a\xfc\x94\x04\x0c\x6d\xa2\x6a\x4d\x97\xc1\xd9\xaf\xbf\xd5\xa6\x0e\xab\x60\xbf\x98\x73\x1e\xdd\xaf\xd4\xc5\xa8\x6d\xf5\x3f\xf4\xdf\x5b\x21\x29\xa0\x4d\xba\xfe\x8f\x33\xed\xef\xc4\x96\x4e\x78\xd7\xab\xc2\xff\x71\xf6\xe5\xe1\x50\x7e\xef\xff\xc3\x43\xd9\x49\x94\xa7\x84\x48\x11\x25\xca\x56\x29\xcb\x28\xb4\x50\x22\x4b\x84\x92\x24\xa9\x44\x0a\xe5\x19\xfb\xbe\x84\x4a\x88\x48\xa8\x64\xcb\x5e\xf6\x9d\x64\xcf\x16\x29\xfb\x92\x64\xcd\xf6\xbb\x1e\xcd\x99\xaf\x99\xcf\xef\xba\xe6\x3d\xbd\xff\x78\x5f\x63\x7a\xe6\xbc\xce\xb9\xcf\xbd\x9f\xfb\xdc\x0f\xbb\xdd\xf1\xc2\x8a\xaf\x66\x7f\x25\x55\x6c\x06\xa7\x58\x02\xca\x05\x8f\x92\x0c\xb1\x7b\x70\x6f\xb3\xe5\xa6\x23\xb3\xde\x4b\xc9\x9d\x0a\x0d\x36\x6e\x0c\xa9\x5e\x59\x07\x17\xe4\x21\xe7\x60\x1f\xdd\x10\xf1\x99\x3c\xfc\x8d\x12\x74\x7e\x93\xa4\xd9\x51\xab\xa7\xe2\x56\x92\x55\xef\x6f\xd3\xd7\x5f\x2f\xf8\x31\xd5\x95\x75\x6e\xda\xfb\x05\x4b\x3a\x4d\xa9\xf4\x03\xd6\x4c\xdd\x07\xd9\xfb\xfe\x12\x6e\x84\x34\x17\x3c\x28\xfc\xe3\x7c\x6b\x6e\xf2\xf8\xb3\xc8\x96\xfb\x92\xbf\x0f\xd5\x48\x18\xb0\xa8\x0a\x32\x8d\xae\x8b\x7c\x7f\x51\x36\xf3\xf7\xc6\x9c\xbf\x52\x74\x76\x06\xa7\x98\x8f\x6a\xab\x12\xc0\x26\x31\xc0\x1c\x26\xa3\xb3\x19\x05\x77\x36\x4e\xcf\xe0\x14\x3b\x80\x61\x36\x42\xcd\x3d\x4a\xd1\xaf\xa4\xe1\xf9\xeb\xd7\x16\xdb\x1e\xf6\x4b\x6a\x16\x6c\x4f\xda\xf4\x6b\xd1\xc4\xf5\xeb\x9c\xe8\xe5\x2b\x35\xa5\x87\xe4\x96\x39\x43\xb6\xbb\x40\xcf\xfe\x0e\xfd\x63\x35\xce\x26\x3d\x13\xa3\xb6\x38\x5b\x1c\x34\x98\xea\x65\x74\xc2\x30\x3c\xd0\x6f\x31\x4d\x6b\xfd\x86\x77\xdf\xe3\xa6\xac\x1f\x5f\xf3\x2d\xe2\xdd\x9d\x4e\xd2\xde\x69\xe0\xd5\x56\xb3\x25\xea\x72\xc6\xab\x0e\x2d\xbf\x0a\x3c\x5e\xb8\x2a\x70\x28\x16\x6a\x1e\xaa\xf0\xf8\xb4\x7b\x7b\x32\x73\x2e\xfb\xdf\x56\x1f\x8a\xb5\x40\x9e\x42\x08\x97\x88\x49\xe9\x6b\xb9\xee\x5d\x10\xed\xe9\x1a\xe5\x03\x25\x22\x66\x3c\x4f\xd2\x2a\x9c\x72\x9f\x89\x7d\xba\x2a\xd9\xdf\xec\x77\xf6\x8a\x71\x8d\x6d\x26\xde\x0f\x04\x3c\xde\x40\xfa\xfb\xf0\x3e\x06\x5e\x26\xe7\x45\x9f\x93\xed\xcb\x22\xaa\xec\x25\x07\x5d\x18\x75\x45\xb4\x56\xdc\x6f\x7d\xe0\xa6\x1d\xfe\xfd\x45\x07\xa3\xf7\xdf\xb8\x16\x87\x95\xc7\xd0\x14\xe1\xe3\xc0\x05\x20\xfd\xf1\x84\xfa\x11\x42\x64\x08\x26\xf2\x94\x15\x9c\xe0\x93\x63\x50\x1c\x96\x9a\x86\xdd\x08\xaf\x18\x7a\x81\x3a\x7d\x89\xee\xef\x34\x00\xaa\x03\x36\xf4\x15\x90\x8f\xa2\xd5\x52\x4d\xbc\xae\x50\xe0\x07\x7a\x92\x1c\x2b\xe3\x94\xe4\xa9\xe8\xf0\xc9\x86\x49\xa0\x0f\x16\x40\x69\x49\x18\x2a\x74\xf1\xa8\x56\x2e\x26\x1c\x38\x91\x63\x70\x1c\xd6\x04\xc3\x06\x8c\x3e\x02\x2c\x67\x06\x50\xe1\x7f\x00\xe7\x46\x12\x32\x02\xe4\x78\x1f\xa7\xc4\x87\xd9\x00\x0a\x86\x09\x07\x37\x68\x20\xd8\x08\x86\xff\xc3\x0c\xa6\x47\x8e\xa5\x71\x58\x1a\x2a\x3e\x2a\xfc\xf4\x3e\x12\x42\x60\xb0\x71\x79\x80\xb0\x29\xeb\x41\x4a\x80\x1c\xa3\xe3\xb0\x34\x08\x1b\x1b\x9e\x15\x12\xc0\x3a\x43\xf0\x43\x2b\x68\xe2\xbf\xf8\x02\x38\xe1\x2b\xa1\x3a\x84\x9c\x50\xa0\xfe\x13\x86\xc6\x19\x7f\x4d\x0a\x95\xe0\x18\x54\xe5\x8d\x03\x8c\x15\xa0\xc0\x6e\x81\xb9\x92\x93\x0e\x1c\x96\x0b\x83\x80\x2b\xf5\x2e\xa0\x42\x77\x33\xf0\x9d\x09\x35\x81\xc0\xf8\xb8\x40\xc0\x9c\x91\x93\x1b\x1c\x96\x4d\x85\x1a\xc2\x73\xad\x2b\xd8\x97\x2a\x60\x74\x82\xc1\x37\x4b\x80\xc0\x19\x80\x97\x53\x36\xcc\x78\xe0\x8f\xf4\xc8\xb5\xa3\xfb\xff\x37\x80\xf4\x16\xe0\xbd\x76\x4a\xef\x7d\xfa\xd6\x33\xe5\x23\x47\x07\x7c\x24\x3c\x37\x39\x0c\xff\xba\x17\x5a\xdd\x4b\xa7\xa2\x16\x3a\x6b\xaf\xfe\x97\x7e\x38\xd4\x53\x7b\xbb\x7a\x37\x09\xc4\x27\xd1\xa8\xc3\xd2\x08\x02\x8e\x64\x94\xd9\x33\x50\x2a\x0f\x01\xa1\xaa\x40\xbf\x6a\x00\x11\xb0\x33\x3a\x42\xee\x6a\xcb\x1a\xa0\x75\xc3\x57\x0f\x92\xc0\xda\x0a\x81\x23\xf3\x01\x75\x6b\x0a\x81\xb3\xf7\x79\xb5\x45\x0e\xe1\x96\x02\x28\x3c\x48\x58\xed\xc8\x00\xf2\x66\xc1\xa8\x05\xed\x27\xf5\xbe\x5e\x06\x86\xc7\xcd\x05\x0b\xad\xdf\xeb\xfd\xe3\x17\x95\x19\xaf\x57\xd5\xd2\xb1\xbb\x5e\xda\x8a\x42\x27\x27\xb7\xbb\x1a\x26\x97\x6f\xc6\xb3\x31\x18\x32\x7d\xd5\x85\x03\xb3\x70\x43\x55\x86\x0f\xc8\x5e\xc4\xa1\xfe\x61\x32\x2a\xcb\x1d\x60\x2a\xef\x49\xb3\xbf\xc2\x97\x27\x47\x73\x6e\x66\xf0\x49\x26\xb3\x0e\x78\xc0\x4f\x78\x94\x25\xaf\x9c\x38\x67\xf1\xa5\x62\xbd\xad\xf6\x6c\x0a\x4f\x4d\x08\x49\x72\x37\x70\x0f\x86\x3f\x4b\xf5\xae\xbb\xac\xd0\xb7\x26\xfd\xf9\x18\x8e\xad\xf6\x3b\x7f\x18\x69\x56\xf2\x7a\xbd\xbe\x9a\xcc\xa3\xf6\x05\x9f\xa5\x45\x57\x5f\xba\x9a\xb6\x01\x04\x71\x47\xd7\x3a\x04\xc8\x9a\x8e\x4e\x33\x0f\x7d\x60\x18\x10\x32\x1e\xcf\x36\x0a\x3c\xf8\x67\xd2\x56\x1d\x82\xd5\x76\x00\x80\x6d\x3e\x03\x1e\xfd\x06\xb4\x95\x0b\x4a\xd0\xfe\xd5\xeb\x24\xa4\x86\xee\xde\x26\x31\x48\xcc\x38\x36\x49\xa2\xad\xe7\x23\xcd\xfc\xd6\x07\x0c\x0c\xe6\xe2\x5b\xc2\xce\x64\xbe\xd6\xb8\xf4\x62\x8a\xd7\xa6\x14\x6f\x4c\x69\x41\x92\x96\x1c\x4b\xa1\xea\x9f\xce\x09\xaf\x93\x12\x00\xf9\x9f\xaf\x86\x0e\x60\x11\xa3\x74\x40\xce\xc9\xed\x22\xaa\xf1\xe9\x40\x89\xc2\x1c\xa1\x0a\x83\x10\xdb\x02\xab\xe8\x4d\x68\x53\x42\x6e\xa3\x70\x4a\x0a\x98\x02\x30\x20\x20\x54\x02\x18\xb9\x1b\x48\x65\x1e\x0d\x50\x1c\xe4\xf6\x12\x87\x95\xa0\x91\xc7\x67\x7d\x15\x76\x82\xf9\x00\x83\x91\x03\x20\x4a\xc1\xc8\x83\x84\xfa\x0c\x72\xa4\xc7\x61\xe9\xe4\x9d\xc0\xe2\x3d\x81\xdd\x0c\x00\x54\x7c\x0f\x86\x9e\x66\x9b\x99\xc7\x07\x89\xe4\xfa\x50\xa2\x6a\x62\xa9\x1b\x9c\xfc\xbb\xa0\xac\xe5\x4b\x2a\x59\xcc\x3d\xf1\x02\x16\xd1\x82\xef\x92\x36\x4c\xfa\x67\x6d\x0c\x68\x0e\xdc\xad\x33\x35\x4f\x7d\xab\x94\x3e\xf0\xfd\xc0\x45\xcb\xa3\xaf\xf0\x41\x15\xca\x52\x01\xa8\xc8\x3f\x01\x49\x8f\x48\x54\xc6\x86\x49\x6b\x9c\x4a\xed\xd2\xa7\x97\xb2\xdc\x7a\x07\x3b\xcd\x0e\xc9\x0c\x4c\xb9\xfd\x7a\x22\x31\xcc\xb0\x92\x71\x39\xf9\xb8\x98\x58\xd8\x72\x48\x17\x3e\x74\x06\xb1\xa1\xd7\xea\x9d\x57\xa0\xc7\xfb\x49\x73\x7b\x2d\x7b\xd6\x8f\xbd\x15\x7d\x77\x48\xcb\x31\x2b\xc2\xe0\xab\xe1\xf1\xa0\x37\x8c\x91\xfb\x9e\xd1\xfc\x49\xdf\x7f\x72\x23\xa7\xc5\x96\x39\x3c\x8d\x00\x69\x1e\x83\x81\x5a\x40\xb4\xe9\xb5\x7a\x67\x03\xfc\xf5\x12\xb5\x1a\xf9\x20\xb3\x19\x8c\x3a\x90\x91\xa8\x40\x55\x01\xf3\xf7\x84\xd0\xb2\x09\x5d\xef\x67\x52\xb5\xf0\xc2\xe4\x94\x4b\xbd\x49\xab\xc1\x8d\xb8\x64\xe4\x48\xac\xdc\x40\xe0\x4d\xfe\x18\x9b\xcc\x3c\x5b\xaf\xe2\xf6\x6f\xeb\xa6\xb8\xd5\x49\x0e\xf0\x4a\xc4\xa9\xb6\x07\x0c\x3f\xa8\xda\xa5\x2f\x22\xc4\x66\x85\x65\x1d\x3b\x4d\xfb\xb9\xf0\x40\x1b\xbb\xd3\x97\xeb\x65\x92\xfb\xf1\x17\xd4\x1e\xa3\x44\x2d\x01\x97\x11\xa3\xd1\x39\x55\x92\x92\x61\xcf\xa6\x87\x87\x60\x0e\xea\x74\xdf\xcf\x6a\x17\x7a\xda\x83\x38\xe5\xbe\x9a\xd5\x4e\x53\x99\x75\x85\xb9\x78\x51\x85\xa8\xf6\xc6\xe0\x8d\x0d\x50\xc6\x99\xab\x95\xb4\x84\xbe\x63\x28\x89\x3f\x82\x7f\xcb\x45\xb5\x5f\x17\x88\x95\x8b\x50\x82\x94\xa1\xba\xf0\x0f\x88\x28\xb2\x51\x2d\x54\x86\x2e\x7f\x1a\xf0\x60\x3e\x90\xbb\x7a\x42\xf5\x12\x39\xae\xc1\x29\xb1\x61\x24\xf0\xbc\x3c\x02\xa8\x5b\x08\xc4\xa4\x1c\x44\x79\x11\x84\xa8\x93\x1c\xdf\xe0\x14\x37\x82\x72\xc8\x97\x60\x3a\x7f\x40\x16\x22\x82\xd0\x11\x89\x70\x1a\x4e\x8e\x73\x70\xd8\x7d\xfb\x40\xb5\xb7\x62\x33\xf0\xb2\xdf\x10\xfa\x0e\x81\xa1\x9d\x09\x25\x60\xe4\x36\x1f\x87\x65\x73\x22\x5c\x79\xce\x05\x2c\x59\x0f\x88\xf8\x14\x60\xf8\x51\xcf\xe8\xfc\x37\x06\xc1\x29\x39\x79\x82\x23\x96\x01\xa0\xb3\x12\x01\xed\x9e\x81\x52\x77\xc2\x36\x11\x5c\x53\x72\xfc\x82\xc3\x26\x60\x08\x8b\x5f\x26\x44\xbf\x84\x13\x5c\xb0\x61\x83\x6c\x33\xb1\x78\x8f\x84\x5c\x13\x5b\x1c\x76\x65\xb6\xfb\x6f\x91\x91\x33\x4e\x31\x08\x75\x07\x92\x57\x43\x2d\xc0\x6a\x29\x28\x5f\xa5\xa2\xfc\xd6\x0a\x78\xb1\x06\xe5\xb2\x9f\x20\xd6\x75\x41\x59\xdf\x7f\xb5\xc5\x00\xf0\xf5\x5f\xaf\xb6\x1d\x02\xb2\xe1\xc2\x84\x3e\x40\x9a\xd3\xf9\xaa\x68\x7b\xac\xe5\xf6\xd7\xb3\x2f\x6b\x83\xbb\x26\x6c\xcd\xa6\x30\xa6\x86\x47\x22\xd5\xab\xeb\x1a\xf7\xfa\x69\xc9\xee\xb6\xfb\xfb\xaa\x1c\x85\x7b\x33\x38\xc5\x1a\x70\x2d\xd2\x19\x8d\xb1\xdd\xd0\x29\xb6\xfc\x4f\xda\xf3\x7e\xac\x68\x77\xcf\x95\xa8\x8b\x4c\x3b\xf7\x08\x16\xb8\x4f\x9b\x4b\xcc\xed\x7a\xa5\x7e\xa7\xec\xee\xad\xf0\xf2\xa1\x33\x27\xe9\xf1\xa4\x07\x16\xa9\x1f\x6f\xbb\x15\x44\x50\x9f\x0a\x1d\x76\x06\xb8\x19\x38\x74\xa9\x41\xa8\xec\x95\x03\x37\x63\x02\xec\xd4\x7b\xd2\x84\x97\x55\xbd\xb9\xfe\xe5\xd8\xf5\x95\x89\x0a\x8e\x2f\x7b\x47\xa2\x76\xda\x28\x36\x35\xa6\xbd\x3e\xe6\xba\xde\x36\xaa\xdc\xfb\xb9\xc8\x1f\xe2\xa7\xa3\xf9\x5f\xce\x14\xa4\x09\x1c\xd3\x0f\x8c\x48\x2d\xfc\x62\x91\x25\x30\xcb\x66\x66\x31\x6b\xaf\xf3\xb3\xfe\xea\xe1\xfe\x71\xc5\x51\x12\xd7\x89\x8f\x41\x87\x6a\x5e\x99\xfb\xa7\x97\xa6\xb1\xdc\xd3\xd3\xa3\xcc\xa5\x4a\x37\x34\xbe\x5f\xa5\x81\x1e\x9d\x78\x0f\x45\xd4\x63\xf1\x8a\x12\xa5\x7e\x1d\x48\x39\x85\xa0\x4b\x79\x82\xaa\x8a\x6a\x90\x99\x4e\x42\xf7\x22\x05\xf5\x3c\x52\xc1\x86\xbc\x46\x55\x57\x3e\xf8\xab\x11\x5d\x6b\x17\xd8\xba\xae\xd5\x43\x1f\x90\x83\xf6\x41\x47\x1f\x40\x1f\x9f\x03\xd7\x56\x3a\x57\xaf\x80\x92\x6a\x58\xaa\x7d\xa3\x8a\xf2\x73\x15\xdc\x0e\x49\x8e\xd6\xba\x13\x6a\xc9\xa7\x5a\x85\x52\x5e\x84\x9b\xa4\x08\x38\xb2\x97\x45\x1e\x92\xc4\xd7\xc8\xb7\x03\x47\xc3\x0d\xb5\x41\x49\x84\x76\x40\xe4\x78\x01\xa7\xe4\x42\x28\xfb\x9c\x02\x12\x1e\x0d\x04\x2a\x0c\xf0\x7f\xec\x3a\x42\x8d\x0e\x19\x76\xc0\x29\xb1\x61\x41\x17\xb4\x27\x78\x4b\xad\xa0\x85\x1f\xa6\x06\x88\x51\x39\x41\x87\x90\xdb\x67\x1c\x96\x8e\x86\x0e\x24\xaa\x5c\x00\x97\x95\x80\x50\xc1\x05\x7c\x70\x23\x5c\xbc\x21\xc7\x0b\x38\x2c\x03\x1d\x06\x84\x79\xb3\x40\x89\x8c\x01\x85\x19\x0c\x22\x9d\xaa\x75\x33\xf7\xff\x1b\xbf\xe0\xb0\x2a\xc6\xec\x6c\x1e\x78\xc7\x09\x50\xb1\x13\x4c\x2d\x01\xac\xda\x13\x04\xb8\x3f\x81\x51\xad\x44\xb9\xa7\x05\x68\x46\x2f\xc2\x4d\x7c\x08\x14\x9c\x92\xdb\x7d\x1c\x96\x19\x43\x03\x34\xe2\x57\x42\x33\x09\x30\xd0\x0f\xc2\xb1\x3e\xa1\xa1\x2d\xe3\x8c\x2b\x5e\x81\x91\xeb\xab\x8d\xc3\x4e\xff\x5c\x59\xc1\xb7\x82\x50\x50\x45\x8d\x32\xca\x5c\xa5\x80\xa1\x3b\x51\x79\xfe\x41\x2a\xb8\x15\x3b\xa7\xa7\xcc\xa2\x2f\x27\x44\x67\xb5\x87\xd3\x3f\x8f\xe4\xd9\xdc\xad\xb8\xd3\xe4\x8c\xdc\xaf\x90\xc2\xe7\x75\x56\xfb\xcf\x93\x14\x69\xef\x79\xec\x21\xd7\x70\x6e\x9f\xfa\x1e\x46\xeb\x8c\xef\x31\x2c\x6f\x0f\xf4\x2a\x71\x4e\x65\xe8\x5f\x1d\xe1\xe3\xfb\x94\x1c\x9f\x96\xfa\x97\x7f\x2e\xe0\x11\x63\x51\xf5\x18\x4f\x9a\xd6\x5b\xe6\x2d\x8c\x5b\x47\x15\xf8\x4b\xdc\x9d\xfa\xc8\x35\xe5\xcf\xd7\x6e\xfe\x1c\xa1\xda\xff\xe0\xcb\xae\xb8\xc1\x21\xa6\x75\xc5\x5d\x89\x7f\xf5\x9d\xf2\x0c\x4e\xd1\x15\x6c\x49\x24\xa9\xcf\xb7\x49\xe0\xe5\x15\xbe\x33\x12\x98\x3e\xaa\x8c\x87\x1b\x2a\xbc\x4e\x68\x2b\x1f\x0e\xeb\x93\xb7\x11\x94\x0c\x38\x15\x36\x73\xa9\xb4\xfa\x2f\x0d\xae\xce\xe0\x14\x1f\xad\x9e\xc8\x80\x9d\x6c\x20\xb4\x7c\x59\xed\xc9\x04\xf6\xd5\x03\x95\xf5\x17\xa4\xa1\x86\xdc\x11\x9f\x1f\xaf\xb7\x9c\xe8\xe7\x10\x5d\xb1\x87\x70\xb5\x47\x72\xb9\x32\x6b\x35\xb9\x2e\x44\xb1\xcd\x33\x05\x09\xf9\x2b\xe2\x43\x8d\x3e\x20\xca\x08\xaa\x1d\x16\x81\x31\xf8\xbc\x1a\xc0\xa1\x06\x64\x9a\xd4\x19\x9a\x3a\xa4\x7e\x79\x4b\xa1\xa7\x5c\xc6\x99\x6f\xde\xd6\x0e\x7a\x16\x27\xef\xf2\x1e\xce\xf9\xf3\xc1\xaa\x7a\x2f\xd7\x96\x16\xb3\x6c\x7c\xc7\xb3\x65\x10\xcd\x3a\xa3\x7a\xeb\x05\x3a\x52\x2a\x88\x07\x3d\xd0\xbf\xc6\x40\xfe\xfd\x0d\xba\xb1\x43\xab\x6d\x64\x40\x21\xa4\xeb\x6a\x23\x39\x94\x5b\xff\x80\xe9\xc5\xa2\x0f\xcc\x11\xfc\x16\x42\x5c\x0f\x46\x89\x40\x27\x9c\xb6\xda\x1a\x00\x68\x4c\x17\xf4\xab\x11\xf4\x7f\x93\xd4\x20\xc5\x43\x8e\x5f\x70\x4a\xf2\x7c\x74\xf8\x43\xd8\x5c\xd4\xde\x55\x01\x25\x90\x00\x20\xdb\x98\x40\x70\x46\x8e\x9d\x70\x58\x67\x0c\x06\x94\x90\x14\xa1\x13\xe9\x04\x83\x44\x11\xca\x9d\x09\x25\x24\xe4\x18\x0b\xa7\x24\x4f\x2d\x84\x57\x24\x31\x80\x10\xef\x01\x8f\x0d\x81\x0f\xb5\x04\x69\x26\xc7\x65\x38\x2c\x3f\x86\x81\xd0\x59\x16\xcc\x2c\x96\x10\xed\x01\x5f\xac\x8c\xd0\x9b\x80\xa0\xe8\xc9\xf1\x16\x4e\x89\x8d\x1a\x5c\xff\xdf\x88\x7a\x14\x40\xe9\xf4\x83\xe8\xa5\x15\xe5\x81\x2e\x36\xd0\x88\x83\x1c\x53\xe1\xb0\xd4\x05\x8a\x4e\xf8\xac\xce\x1b\xa0\xe2\x06\xc0\x87\x5e\x90\x80\xba\x8e\xff\x22\x09\x68\x5a\x6f\x96\x19\x17\x7c\xb4\x46\xae\x57\x3f\x0e\xbb\xfc\xf3\x62\x2e\xb8\x1c\x97\x82\x4e\x70\x80\xd4\x3e\x6a\x4e\x8e\x56\xe8\x2a\xc8\x22\xc3\xc5\x7d\x5f\x63\x8a\x17\x76\xd2\xca\x7b\xec\xbd\xf8\xf6\xae\x6d\x82\x39\x86\x45\x81\xee\x1d\x30\xb7\x28\x4b\x87\xa1\xe6\xbb\x18\xb8\xf5\x2e\xe8\x57\xcf\x50\x8d\x92\x06\x8c\x7c\x38\x2a\xb6\xd9\x28\x5b\xb4\x00\x55\x1a\x01\xb4\x5d\x0c\xfa\xe3\x5c\xe0\xcb\xa4\xa2\x7c\x5d\xbf\x9a\xe2\x01\xbe\xf7\x3c\xd8\xef\xcf\x40\xaa\x1e\xa3\x0f\x95\x82\x7f\x7f\x0e\x48\xf3\x9a\xd4\xc5\x8a\xd5\x76\xf0\x65\xb8\x99\xec\x8d\x89\x0f\x3f\xc6\xca\x55\x2f\x61\xf3\xc5\xda\x26\x70\x62\x49\x83\x6e\x26\x5c\xf6\xd4\x9b\xdb\x45\xf8\xbb\x81\xa8\x7b\x50\x0b\x1c\x26\x6f\x90\x23\x29\x5a\xed\x20\x80\x92\xa6\x07\x4c\xee\x19\xfa\x57\xc7\xea\xe1\x3d\xf8\xaa\x11\xfd\x6b\x1c\x95\xd8\x19\x90\x6a\x79\x85\xce\x7e\x11\xc4\x44\x81\xa8\x80\xd7\x03\xda\xd4\xa0\x84\xa8\x5f\xbd\x42\x0f\x70\x92\x57\x8f\x54\xd0\xef\xbf\x02\xa3\x32\x0e\x94\x5f\x28\x3a\xf0\xd7\xff\x29\x5b\xac\x9c\xf9\xd9\xae\xef\xf2\x33\xb5\x38\xc0\x2c\x29\x0c\x89\x8f\xd7\xad\x68\x14\x5d\xd9\xc5\xec\x98\x52\x49\x8b\x0c\x96\x2b\x9e\xf9\x6f\x1b\x88\xc3\x52\xf3\xd1\x81\x96\x85\x15\x04\x99\x27\x14\x4c\x10\xce\xbe\xd8\x80\x16\x20\x47\x4f\x1c\x56\x1e\xe3\x04\x52\xdb\x3f\x08\x97\xe2\x01\x61\x3a\x50\xb7\x6d\x9a\x50\xf7\x45\x6e\x19\x38\x25\x3a\x2f\xd0\x3a\xdd\x0d\x28\x91\x57\xe0\x43\x3f\x10\xde\x34\x80\x33\x45\x35\xd3\x8a\xb7\xc0\xe4\xde\x3e\x81\xc3\xae\xe4\x2f\xff\x4f\x9b\x17\x71\xdf\x1e\xa1\x5b\x87\x36\x97\x1c\xf8\x22\x38\x17\x37\x34\x7e\xe8\x40\x4d\x52\xbb\xed\x39\x07\x5f\x41\x16\xcc\x79\x8e\x83\xae\x43\xf8\x50\x02\xdd\xd0\x29\xc0\xbd\x08\xba\x97\xf9\x20\xc7\x30\x80\xb2\xf8\x18\x30\x56\xf1\x28\x67\xe7\x93\x1e\x3b\x31\xe8\x95\xf3\xd3\x06\xf0\xc7\xec\xbe\xfb\x63\x74\x9c\x5f\x29\xc8\xde\xdc\x65\x6f\x51\x77\x95\x9a\xaa\x78\xb3\xed\x98\xb9\x98\x36\x3e\xf5\x02\x58\x20\x6e\xf5\x82\x18\x69\xfb\x89\x6a\xf9\x23\xc7\xdc\x07\x9e\xd3\xd4\x5e\x15\x1d\xea\xa6\x79\xac\x79\x49\x99\x6f\x5c\xbf\x74\xb9\xb5\xf5\xbb\xe5\x83\xba\x7e\xbd\x59\x92\xfb\x68\x12\x2d\x29\x4e\x85\x91\xf7\x07\x43\x03\x16\x5b\x85\xc5\x90\xfd\xeb\xaf\x88\xad\x9c\xc7\x26\xe8\x57\xea\x0b\x55\xd2\xee\x0d\x23\x7e\x7a\xa9\x5b\xb5\xf4\xdc\x2e\xf7\xb0\xed\xd0\xe1\x37\x5c\xcb\x42\xd2\xbf\xcf\x6e\xcb\x8a\xf4\x93\xe1\xa9\x7b\x98\x97\xfe\x55\x55\x48\x02\x1f\x61\x80\xdb\x68\xdb\x51\xfb\x8f\x0a\xc6\x1c\xe9\x71\x95\xf3\x98\xf1\xd3\x90\xde\xb6\xba\xc6\xd6\x9f\x4c\x9b\xa2\xa6\x9b\x22\x1f\x33\x45\x1e\xd3\x66\xfe\xed\x9d\x2a\x5f\x7d\xe1\xb7\x54\xf4\xdf\xdf\x0b\xce\xe0\x14\xf4\x66\x70\x8a\x81\xe0\x60\x33\x02\x15\xa9\x01\x54\xfa\x86\x01\x11\x5e\xa2\x34\xcf\x03\x42\xe4\x85\xd2\xfc\xfd\x6a\x23\x1d\x52\x77\x63\xf1\xc9\x49\x15\xb5\x27\xf4\xbc\x3a\x6e\x16\xbf\x20\xef\x2a\x86\xc9\x08\x9e\x73\xe9\x1e\xd8\xfa\x26\x57\x11\xa5\x4e\xb9\x3f\xdd\xc4\x4f\xab\x8e\x07\x0c\x36\xc7\xef\x7a\xfb\x6c\x42\x8f\x8f\x5a\x82\x46\x56\x63\x92\x97\x43\xb8\x87\x66\xd9\x69\xcb\xad\x11\xba\x22\xf1\xab\x7f\x15\x2d\x37\x1e\x36\x0f\x95\xd1\x59\x54\xf5\x2c\x03\xeb\x5d\xb0\xda\xcb\x1d\x9d\x49\x03\x60\x81\xec\xd5\x46\xf4\x84\xfb\x17\xd4\x33\x38\xc5\x4f\xe0\x36\x0d\x2a\xcd\xbd\x40\x01\x16\x03\x4e\xce\x06\xf9\xe8\x3a\x94\x5f\x66\x41\x9d\x44\x1a\x0a\xd7\xb8\xda\x4f\x93\x95\x70\x37\x8c\x0c\x87\xe2\xb0\x74\x7c\x84\xcb\xa1\xad\x40\x41\xc6\x03\x09\x89\x07\xdf\xcc\x52\x03\x91\x26\xc7\x8d\x38\x2c\x1f\x06\x23\x84\x17\xe9\x08\xa0\xa0\xea\x40\x24\xf6\x16\x55\x5e\x53\x8c\xc0\xb6\x91\x63\x4b\x74\xb4\x00\x67\xbc\x6d\x0b\x20\x5c\xfe\x25\xf4\x27\x20\xdc\xbd\x05\x0d\x5e\x85\x81\x07\x4f\x68\x17\x49\x8e\x97\x71\x4a\x05\x7c\x40\xa9\x05\x02\xdf\x21\x84\xd0\x5f\x0e\x18\xcb\x7a\x16\x70\xca\x42\x8e\xdd\x71\x58\x05\x0c\xad\x02\x98\x33\xf8\x7d\x34\xa1\x05\x37\x18\xba\x0d\x7c\x18\x01\x1e\x40\x12\x2b\x28\xf0\x25\x27\x09\x38\x2c\x0d\x2d\x15\x88\x36\xe2\xc0\xd0\xee\x84\x8a\x97\xd5\x57\x28\x00\x72\x35\x81\x5d\x2c\xdb\x00\x76\x91\x1c\xdb\xe3\xb0\x1b\x68\x08\x2f\x8b\x98\x07\x13\x4d\x20\x34\xbc\x59\x2d\x25\x20\x04\x7a\xe4\xc4\x62\x55\xcd\x2b\x80\xe0\x16\xf0\xc4\x5b\xe0\x3b\xc5\x80\xf1\x87\x98\x67\x16\xf1\x0e\x09\xb9\x17\xfc\xe0\xb0\x4b\x2b\x4b\xf9\xab\x21\x11\x1a\x54\x81\xb4\x4d\x25\x2a\x4c\xbf\xc1\xd9\xd1\x8b\x55\x6b\x08\x64\xef\xcd\x6a\xc3\x26\x74\xe6\x63\xa4\x8a\x27\xad\x1c\x23\x5e\x42\x7f\xd0\xa9\x92\xbf\xed\xf6\x69\xeb\x5b\xf6\x95\x2f\x9a\xf6\x2b\xd6\x94\x19\xd1\xe4\x1c\xe2\xf6\x6d\xc4\x91\xbc\x8a\x6b\x4a\x91\x8a\xcb\x92\x2a\x6c\xb1\xe5\x8b\x87\xad\x74\x88\xe3\x7d\xb6\x24\x97\x8b\x49\x27\x35\x14\xab\x2f\x9f\x1f\x4e\xb8\x31\x1c\x45\xfc\xf4\x7b\x3f\x87\xdb\x67\x8c\xfd\xbf\x7f\xfa\x89\x5c\xe0\x32\xcd\x5e\x78\x60\x40\x95\xbe\x03\xc9\x0d\x0e\xbb\x71\x53\x9b\x9f\x53\x8b\x91\xe4\x9c\xcc\x2c\xed\x54\x33\xe3\x2e\xe3\xdf\x4e\x45\x92\xe5\xdc\xbe\xa5\x3c\xa6\x7b\x35\x76\x98\xed\x50\xed\xcb\xec\xb2\xca\x72\x2f\x49\xfc\xbb\x5e\x57\xd2\x4c\x93\x7a\x16\x2f\xae\xe2\x77\x80\x30\x6c\x5f\xf7\xcc\x9e\xcb\xed\x78\x7d\xfe\x76\x89\xd0\x31\xdd\xd1\x51\x33\xd7\x47\x49\x87\x45\x36\xe3\xbb\xea\xad\x5e\x83\x5e\xd5\x96\xa0\x37\xbe\xfc\x0c\x4e\x71\x1e\x68\xcd\x24\x94\x42\x43\x84\xfe\x9b\xa8\x2a\x1a\x41\x43\x94\x49\x20\x16\x5f\xf1\x0c\xa6\xa0\x8e\xba\xff\x60\xff\xfa\xc0\x3f\xe7\x80\xb2\xda\x27\x28\x46\x3a\x3e\xbd\xa6\x80\xea\x62\x4f\x74\x2b\x5a\x81\xcf\xe4\x0f\x4e\x88\x9f\xa3\x88\x73\xe0\xaf\xc7\xa8\x0f\xd8\x0b\xc2\x96\xf7\xa8\xae\xfc\x85\xfe\xf8\x0f\xd0\x1e\x71\xa8\xf6\x48\x25\xf4\x0d\x05\x1e\x91\x37\xaa\xfb\x5f\xad\xc6\x44\xc0\xe3\x7b\x84\xfe\x55\x4c\x7a\x1f\xec\x53\xab\xae\xd3\x89\xa4\x1f\xc9\xea\xb8\x92\xee\xf2\x2b\xba\x86\x5d\xee\xe5\xf6\x81\x66\x95\x5b\x25\x30\x54\xc7\x02\xe1\x48\xed\xcb\xff\x8d\x1d\x70\x58\xf9\x7d\x18\xd0\xbc\x36\x1e\x2c\xba\x0f\xa5\xd7\x4f\x20\x22\x6e\xab\x97\x40\x80\x27\x1a\x0b\x74\x77\x0b\x35\x08\x41\xc8\x71\x11\x0e\xcb\xc1\x8e\x21\x88\x38\x18\xc8\x1b\xd0\x7a\x1c\xa4\x46\xa7\x81\x32\xc4\x11\xda\xe0\x91\x63\x39\x9c\x12\x96\x0d\xd4\x5d\x95\x00\x71\x6c\x00\x10\xf3\x40\x1d\x7d\x5e\x07\xe6\x4a\x8e\x2b\x51\x01\x87\xb8\xf0\x73\x7d\x0c\x0c\x56\x0d\xd0\x3b\x13\xc0\xf5\xca\x20\xdc\xe8\x25\x68\x22\x72\x9c\x8b\xc3\x52\xe1\x4f\xf1\x70\x38\xc5\xac\x55\x4f\x99\x50\xe0\x07\x88\x5a\xc4\x0a\x62\x58\x72\x1b\x8c\x53\xa2\x62\xa3\xc1\xab\xb5\x62\xa0\x34\x42\xd1\x51\x07\x08\x5d\x6a\xa0\x99\x2f\x78\xaf\x90\xdc\x7b\xc3\x56\x1b\x28\x75\x83\xc4\x72\x05\xca\xe2\xbf\x50\xcd\xbb\x42\x38\xbc\x25\xb8\xf8\xa8\xa5\x4e\x02\xea\xb9\x18\xe5\xd7\x39\x52\xe6\xf4\xf2\xbe\xbc\x3d\x8b\x57\xe8\x54\x79\xb3\xee\xeb\xbc\xb3\x93\x42\xed\x1f\x1e\x7d\x34\xaa\x1b\xdd\xaa\x29\x71\xe2\xc0\xa3\x1b\xde\x39\x7f\x7f\x3b\x8f\x2a\xb0\x25\xd2\x84\x86\xe5\xb5\xb7\xa2\x2a\x51\x85\xb6\x03\xbd\xb6\x0c\xd5\x7d\xdb\xc5\xc5\x8c\xe4\xad\x9e\x8a\x8e\xfc\xb6\x56\xec\x1a\xc1\xd8\xd2\x35\xfd\x35\x8e\xa0\xe8\x34\x6c\xb5\x4a\x1f\x94\xfd\x19\xcf\xe0\x14\x7d\xd1\x19\x75\x03\x39\xac\x40\x17\xd1\x04\x38\xcd\x99\xd4\x67\x72\x15\x1c\x08\xbc\xaf\x65\xcc\x71\xa5\x53\xe5\xb8\x59\xe7\x81\x4c\xb3\xe0\x1b\xb9\x5c\x4e\xbe\xc6\xb5\xdd\xa7\x56\xe0\x56\xcb\x76\xfc\x01\x32\x2a\x00\x63\xa4\x15\xf5\x75\xaf\x7f\xde\x3b\xa4\xf0\xb8\x9a\xd6\x81\xfe\x70\xd4\x76\xb9\xce\x04\xcb\xcf\x4e\x8a\xac\x89\xc9\x5c\xc6\xde\xa2\x0b\x22\x7f\x26\x88\x9f\xbe\x31\xad\xf8\x30\x34\x22\xeb\xeb\x19\xb5\xf7\xfb\xb5\x32\x8c\x4b\xa2\x77\x8c\xc8\x05\x3f\x48\xe5\x7b\x2a\x7e\x36\x30\x61\x76\xb6\x02\x9f\x33\x59\x0d\xa9\x40\x32\x3f\x0f\x5d\x4a\xcf\x6a\x27\x61\xd2\xf0\xae\xdc\xee\xf0\x9d\x85\xc7\x3c\x8f\x7a\xc3\x8c\x67\x4d\x4c\xdc\x4f\xcf\x9f\x38\xd3\xbc\xfd\xdd\x07\x96\xcb\x0c\xca\x1f\xbf\xf6\x27\x17\xfc\x5d\x6f\x10\xd0\x5b\x7b\x51\x23\x87\xae\xa2\x97\x34\xd4\x3d\x74\xc9\x73\xfd\x07\x59\x5a\x73\xe9\x4b\x17\xde\x1a\xde\xfc\xd2\x56\xb6\x51\x20\x5b\xa5\xe5\xaa\xb8\xd1\x37\xba\x63\xb3\x19\x8f\x2e\xfe\x9d\x49\x25\x3a\xaf\x3a\x54\xc3\x8d\x03\x67\xaf\x18\xf5\xd1\x4a\x01\xe3\x15\xa1\x1a\xae\x95\x94\xbc\x3b\xdc\x32\x1c\x19\xae\x16\xc7\x5a\x5f\x31\xe0\xde\x3d\xa1\x5b\x21\xd8\x95\xfd\x41\x42\xb6\x51\x4b\xcf\xbf\xf8\xce\x15\x1e\x53\x08\x9f\xc3\x47\x99\xf6\x03\xca\x72\x4d\x84\xf6\x37\xa0\xbf\x9b\xc1\x0c\x4e\x71\x02\xc5\x9d\x02\xb8\x6f\x57\x73\x65\x84\xa3\x69\x72\xac\x86\x53\xe2\x92\x07\xa9\xde\x77\xc0\x8d\xf8\x02\x14\xcd\x0a\xb0\xd7\x15\x84\x26\x24\xe4\xf8\x0f\xf5\x33\x21\xc2\x8b\xb2\x80\x82\xa8\x20\xdc\x3c\x05\x2a\x67\x89\xe0\xb9\x92\x63\x32\x1c\x96\x0d\x83\x71\xc3\x8f\x58\x0f\x4c\x82\x1f\xd0\x34\x7e\x84\xf6\x4d\xd4\x20\x7c\x24\xc7\x7a\x38\x6c\x00\x0d\x1d\x35\xb8\x36\x04\x88\x9a\x0d\xfa\x7d\x3b\x00\x99\x06\x58\x5d\x84\x96\x8f\xe4\xd8\x74\xb5\xbd\x01\xc8\xc5\xb7\x82\x91\x43\x81\xc2\xed\x01\xaa\xe7\x25\x33\x48\xee\x93\xe3\x54\x9c\x92\x11\x15\xb8\x27\x6c\x86\xff\x75\x33\xa1\x05\x1c\xf8\xf0\x61\x3d\x50\xe0\xe4\x18\x16\x87\x65\xe3\xc3\xec\x04\xd9\x6b\xb0\xc2\xdf\x60\x86\x81\x40\xd3\xe6\x12\x5c\x4d\x42\x95\x2f\x39\x76\xc5\x61\x9d\x30\x3b\x80\xb5\x19\x04\xdb\x12\x0e\xa8\xf0\x87\xd0\x9b\x78\xfd\xcc\x12\xf4\x77\x48\x72\x6f\x60\xc4\x61\x7f\xfe\x5c\x59\x42\x9d\xbf\xb5\x72\x83\x29\x7d\x84\x5c\x0b\xe4\xd9\x63\x67\x70\x07\xee\x58\x48\xb0\x4e\x50\x1f\x6c\x37\x3c\xc4\x3e\x32\xb1\x7b\x32\x48\xca\x81\x09\x5f\x99\x9d\x80\xaa\x87\x71\xc0\x6f\xc5\xe0\x4e\x85\xe3\x0c\x4e\x31\x04\xac\xb2\x19\xf8\x1b\x3e\xa8\xf4\x07\x83\x3c\x6b\x1c\x2a\x72\x7d\xc0\xb9\x2c\x59\xed\x86\x09\x02\x90\x1f\xe0\x27\xf9\xa8\xc3\xd2\x87\x3f\x5c\x52\xb8\x38\x83\x53\x8c\x5d\xbd\xce\x04\xb2\xc7\x4f\x51\xfc\x88\xd5\xf7\x0a\x82\x71\x3d\x57\x5f\x8c\x04\x9c\x30\x77\xf4\xf1\x45\x70\x1e\x58\xb6\xfa\x46\xb4\xd5\xd7\x10\x80\xaf\x9c\xd0\x49\xd5\xa2\xbf\x69\x23\xd5\xae\xad\xa6\x46\x89\xef\x98\x36\xb2\x66\xe8\xd3\xde\x5c\x76\xb8\x6b\x21\x7c\x79\xff\x8b\x29\xa1\xed\x81\x4b\xbb\x71\xa7\xa9\x7a\xb2\xe0\xbf\x03\x54\xad\x4e\x08\xfd\xdf\x04\x10\xe9\x7c\x80\x1e\x82\x8e\x9b\x0c\xd2\xc4\xde\xe8\x43\x25\x28\x7a\x07\x78\xb2\x05\x08\x7f\x3d\x88\x42\x1f\xa1\x53\xfc\x43\x48\x07\x81\xa0\xdb\x1d\x1d\xe9\x11\x6a\x49\x7e\x03\x31\x1f\x06\x06\xf0\x35\x6a\x0e\x7f\x80\xf5\xbf\x5d\x7d\x81\x02\x15\x88\x09\xc9\xed\x23\x0e\x4b\x43\x27\x9f\x8c\x8f\xaf\x9e\x83\x3d\x2b\x01\x7c\x14\x42\x90\x2f\xf0\x4f\xad\xe0\x2a\xa1\x28\xd0\x7f\xe4\xe8\x84\xc3\x52\x7b\x10\x2a\xd3\xc3\x00\xb3\x8c\x83\x91\x7f\x82\x1b\x84\x12\x33\x25\xf8\x78\x85\xdc\x6b\x40\x71\xd8\x9f\x1d\xb3\x03\xa4\x77\x22\xee\x8e\x4c\x08\xbf\x39\x9f\x96\xe9\x75\x4b\xc5\x92\x89\x97\x65\x0f\x6b\xeb\x5d\xbe\x72\x0b\x47\xf1\x73\x0c\xb6\x75\x03\x12\x43\x11\x78\x96\x59\xad\x0a\x43\x6d\x45\x36\xe0\xb2\x12\x94\x15\x6b\x40\xca\xf0\x39\xba\x43\x45\x84\x37\xe6\xa1\x4f\x16\x11\xde\x9f\x04\x66\x5f\x01\x4e\x1d\xde\xa1\xc3\xa5\xa3\x34\x6f\x01\x47\xc4\x87\x67\x70\x8a\x9f\xd0\x41\x96\x81\x4b\x5d\x89\x1a\x8c\x51\x94\x57\xc7\x80\x1f\x30\x47\x9a\x53\x5a\xba\xd4\x5d\xe8\x70\x72\x7b\x0c\xf6\x42\xd8\xfd\x2e\x5f\x7b\xbe\x68\xa7\xe4\x97\x42\xac\x8f\x20\xf7\x15\xdf\xc9\x53\x87\x66\x05\xff\xd2\x08\xcf\xb6\x0a\xa8\xcf\xe1\xb6\x9a\xf6\x01\xb5\x60\x9e\xab\x37\xa3\x57\xbb\xaa\x91\xda\xc0\x9c\x5f\xbd\x65\x1f\x1e\xbf\xba\xfa\xf2\x54\x89\xe3\xd2\xf4\xa7\x90\x2c\x9e\x44\x4e\xfb\x47\x2f\x07\xf8\xb6\x2d\x38\x05\x0c\x6a\x56\xe3\x23\x3a\x94\x0a\x69\xa8\x95\xfd\x46\xe8\x19\x43\x38\xe3\x46\x17\xf0\x18\x45\xf8\x4c\x38\x71\x03\x41\x8f\xf6\x0c\x4e\xc1\x1c\x4f\xad\x67\xe8\x1a\x9b\xc0\xb2\x0b\x50\x86\x1f\x58\x75\xe4\x48\xab\x87\x54\x3b\xb1\x05\x5e\xa1\xf6\x90\x78\x53\x8c\xc1\x64\x2c\xf3\x46\x24\xe0\xb9\x3b\x92\x9d\xd7\xff\xca\x7f\x93\xc9\xcb\xbd\x43\xf8\x46\x4f\x21\xab\x41\x13\x69\x78\x96\x3f\x58\x77\xaa\xa8\xbd\xf0\x3a\xc3\x40\x71\x1e\xc3\x94\xdd\xd9\x6f\x63\x9b\xdf\x8d\xc3\xc1\xd9\x72\xd6\x22\x32\xd1\x82\x4f\x46\x35\xfe\x1b\x3b\xe0\x94\xa2\xa8\xc0\x19\x71\x29\x30\x1a\xa9\x60\xa7\xdf\x11\x8c\x20\x0b\x30\x79\xe4\x76\x08\xa7\xb4\x8f\xcf\x08\xaf\xf5\xc3\x09\x85\x03\x20\x22\xa8\x05\x03\x66\x13\xde\xeb\xc4\x0c\x24\x88\xdc\x06\xe1\x94\x24\x9c\x80\xbd\x0f\x02\x82\x38\x4e\x28\x27\x05\x73\xf6\x26\xbc\x84\x83\x1c\x79\x71\xd8\x28\x8c\x02\x18\x71\x09\x28\xa1\x39\x60\x8f\x72\x40\x29\xaf\x22\x18\x90\x1c\xcd\x71\x4a\x34\x54\xa0\x9f\xea\x0b\x60\xe8\x9e\x02\xfb\xf4\x07\x30\xd4\x3c\x13\xa1\xa4\x8d\xdc\xcb\x7b\xd7\x74\x31\x43\x70\x8a\xdf\x01\x4f\x85\xa1\x41\xeb\x00\xfa\xbf\x65\x60\x2d\x22\x80\x92\xcc\x59\x7d\x27\x25\xaa\x29\x3b\x01\x60\x32\x70\x64\x5f\xa1\x5f\x57\xa1\x1c\x5c\x07\x7e\xb7\x08\x44\x27\x60\xf5\xad\x98\xe8\xbf\xfd\x26\xe5\xb5\xb4\x31\xaf\xb8\x5b\x9e\x39\x6e\x8c\x81\x62\xfa\xdf\x36\xf4\x33\x06\x21\x4c\xa2\x74\x59\x97\xee\x77\x1a\x35\x0b\xa4\xfb\xaf\x63\xc4\x1f\xa2\xa0\x6c\x5f\x08\x52\x87\xdf\x57\xdf\xb2\x81\x0e\x37\x4f\x78\xeb\xcc\x6a\x45\x04\xf8\x0b\x41\xd9\x1a\x47\xe8\xd0\x85\xfa\x96\x2f\x50\x7d\x11\x47\xaa\x13\xfa\x2a\x7b\x06\x8f\xd7\xee\xe7\xe8\x37\x12\x9e\xfd\xb3\xed\x7d\x8a\x4a\xea\x87\x57\x2b\x73\xcd\x46\x19\xb4\xda\x2c\x0c\x3b\xfb\xeb\xf1\x52\x82\x06\x31\x2f\x09\xf7\xce\x41\xcc\x9c\x83\xca\xf3\x0a\x69\x5f\xae\xe1\x0d\xc9\x4f\x16\x2e\x36\x89\x5b\x33\xa9\xb9\x36\x57\x71\xf5\x47\x3c\x92\xbd\x56\x7d\xdc\x69\x71\x9b\x15\xb6\xfd\xa3\xad\x46\x34\xbe\x9c\x17\x55\x2d\x4b\xe0\xc5\x51\x28\x59\x9d\x08\xba\x0c\x55\x88\x1d\xab\x37\x41\xc0\x7a\x6a\x56\x1b\x8f\x03\x9b\x9c\x8a\xda\xec\xcf\xe8\x03\x5f\x40\x03\xe8\x73\x33\x38\xc5\x28\xe0\x3d\x2f\xa2\xff\xb4\x02\x78\xb6\x86\xd0\x96\x67\xf5\xc5\xb7\xab\x2f\xd2\x04\x39\x80\x68\x74\xdc\x74\x90\x25\x41\x09\xda\x0a\x9a\xbe\x1e\x44\x37\x92\xb4\x09\xc7\x77\xc6\x34\x91\x1d\xd3\x26\xd7\x6d\xb0\x05\x3a\x8f\xb8\x3d\x94\x6f\x8f\xbf\xfe\x5d\x77\xde\xf0\x15\xed\x1b\xdf\xab\x89\xf0\x1e\x56\xdd\xff\xb6\xa7\x38\x25\xda\x58\x70\xdd\x7f\x01\x88\x84\x07\x10\x92\x4f\x40\x7c\xb3\x08\xd7\x0f\x09\x1a\x82\xdc\x7e\xe1\xb0\x5b\x9c\xa8\xc1\xd0\x81\x40\x7e\x5f\x81\x0f\x81\x84\xd8\x03\x24\x60\xef\x00\x33\x4e\x6e\xdb\x70\x4a\xf0\x19\x70\x0d\x77\x16\x28\xb3\x4a\x20\x05\xa3\x80\xe5\xe3\x08\xaf\x68\x26\xbc\x8d\x8c\x01\x78\xc9\xe4\xa8\x87\xc3\x72\x61\x08\x25\xb6\xad\xc0\x91\x07\xe7\xa1\x52\xc0\xa1\xa7\x9a\xe9\xc2\x4b\x38\xb9\x17\x6e\xe3\xb0\x2b\xf9\x2b\xf9\xa0\xdd\xf8\x28\xa1\xfb\x0b\xe1\xd0\x15\x38\x4e\x11\xab\xef\xf3\x44\xb9\xb0\x8c\x20\x42\x28\xcf\x7b\x80\xe4\xd6\xa7\xd5\x77\x6b\xae\xb6\x5e\x02\xba\xe7\x0f\x08\xbf\x93\x51\xf1\xca\x00\x2c\x35\x83\xb2\xd4\x02\xa9\x35\xca\xc7\x9a\xe2\x30\x61\x5c\xb1\x17\x87\xec\x13\x38\x6f\xbc\x5a\xcc\x79\x3c\xab\xd6\x7f\xfa\x2d\x1d\x3f\xe3\xb7\xfd\x7a\xd4\x8f\x65\xfe\x0e\x59\x06\x34\x6f\x1c\x48\x44\x44\xa3\xec\xfa\x91\xd0\x36\x17\x14\x41\x85\xa2\xac\xfc\x12\xfd\x5f\x11\x70\x2a\x52\x56\x8b\xdd\xc1\xc6\x64\x81\x9f\x7c\x22\xdc\xeb\x07\xa9\x36\x4f\x54\x37\xf4\x03\x59\xf1\x43\xe5\xb0\x1a\x48\xb4\x13\xba\x94\x79\xa0\xd1\x9c\x50\x39\x8a\x46\xf5\xc6\x37\x52\x41\xc8\x0a\x7e\xd2\xd5\x64\x2f\xfe\x10\x67\xf0\xa4\xf4\x68\xd0\xc5\x07\x55\xb4\x89\x05\x7f\x74\x9a\x5b\x24\xa6\x9a\xb6\xb7\x27\xaa\x19\xff\x1d\xee\xe3\x6a\xa1\x0b\xe9\x01\xd9\xc1\x41\xbf\x1a\x19\x47\xbb\x69\x83\xf8\xf2\xeb\x5f\x2a\x3f\xfd\x98\xa9\x78\xfb\xa2\x7c\xf9\x83\x7e\x68\xe9\x39\xab\x1e\x16\x16\x27\xe2\xa7\x99\xce\xca\x5f\x1a\xd8\x77\xa4\xae\xff\x54\xcb\xf2\xf7\xa3\xb2\xfe\x01\x91\x34\x71\x6d\xef\x5f\xef\x34\x10\x7b\xcc\x19\x90\x26\xfe\xf7\x05\x3e\x0a\x28\x99\xa2\x51\x0a\x7c\x00\xe9\xd0\x0f\xa8\x42\xac\x45\xb7\xad\x8b\xf4\x7c\xf5\xa1\xf5\x53\x06\xd7\xcf\x0f\x1f\x9f\xbd\x18\xa1\xcd\x61\x68\x7e\x50\x60\x46\xd9\x26\x58\xaa\xfd\x9b\xef\xa4\xf4\xb7\xb0\xf6\xe1\x28\xbd\xff\xb6\x67\x38\x2c\xbf\x87\x13\x90\xb5\x16\x40\xf9\x60\x40\xf9\x46\xc2\x6b\x26\x09\xa5\x56\x84\x7a\x06\x72\xe4\xc3\x61\x35\x14\xe9\xc0\xd0\x65\xc0\xa3\xfb\x06\x30\xa6\x00\x27\xf7\x03\x9d\xd1\x49\x78\x5d\x37\x39\xea\xe2\xb0\x74\x6c\x04\xe5\x53\x46\x78\xed\x07\xf0\x1d\xaa\x81\x3a\xaa\x02\xdf\x54\x12\x9c\x08\x72\x5b\x81\x53\x92\xc7\x82\x1a\x91\x68\x94\xfc\x89\xc0\xc7\x8d\x59\xed\x66\x09\x9a\x00\x48\x82\x58\x94\xdc\x46\xe0\xb0\xfb\x30\x18\x17\xf0\xaa\x1e\xb0\xe8\x20\x42\xf3\x68\xf0\xc1\x83\x7a\xc6\x09\x9f\x03\x24\xf7\x56\x7d\x1c\x76\x76\xc5\x71\x01\xbc\x15\xab\x0c\x9d\xd7\x20\xb0\x93\x5e\xa8\x16\x78\x8e\x1a\xb5\x65\x52\xa3\x76\xa2\x25\x24\xdc\x7c\xdf\xe7\xeb\xf3\x47\x0f\x0b\x8d\x9e\xe8\xbd\xe6\x17\x6b\xae\x59\xce\xd8\xbe\x7e\x21\xc5\x6b\x5e\x77\xb8\x61\xfc\xef\x00\xc5\xa8\x30\xd5\xa2\xe6\x6b\x16\xa8\x98\x1c\x20\x9f\xdf\x51\xb1\xfb\x05\xb6\xb2\x13\x30\x47\x38\x88\x4d\xd8\xf1\x5f\x44\x01\x39\x0d\x43\x65\x31\x9f\x50\x5a\x48\x68\x0a\x84\xb2\x74\x25\x38\x7f\x74\x41\xdd\x71\x4f\x50\x86\x11\xba\x5a\xe8\x81\x4a\xed\x04\x50\x63\x2f\x51\xe7\xb8\x99\x34\xb3\x56\x24\xa8\xfd\xa9\xc4\xed\xc0\xf1\xf6\x67\xd3\x42\xb5\xec\xe1\xcf\x35\x7f\x98\xee\x3e\x69\x4c\x13\xc2\x67\x2e\xc2\x76\xe8\xbe\x35\x9e\xe2\x8d\x84\x6e\x6e\x28\x61\x70\xe8\x8e\x3e\x23\x4d\xad\xb5\x85\x9a\x98\x0b\x9f\x2d\x7c\xb2\x9c\xd3\x5f\xc6\x7a\x67\x98\xd3\x69\xfb\xa9\xe5\x58\xd1\x9e\xbe\xa1\x85\x24\xfb\x5d\x21\x0f\x62\x49\x9a\xb6\x22\xb1\xce\xfa\x96\x16\xf7\x73\x1f\xaa\xcb\x76\x1e\x09\xa4\x1f\x2c\x4d\xdc\x2d\x97\xd4\x2f\xf6\x92\xf7\x49\xcd\x88\x1f\xfb\x55\xe2\xa7\x65\x68\x98\x14\x0f\xdd\xfa\x1e\xb1\x29\xc7\x72\x5d\x6d\x8e\x68\xb4\x92\x65\xcb\x83\x1a\xc6\x1a\x89\x87\xa1\xd9\xe6\xac\xbd\x99\xe6\x7f\x0d\xf5\x31\x54\x3f\x91\x26\x58\x7b\x9d\xf6\x5a\x75\x39\x64\x05\xda\x8f\xde\x5d\xb7\xcc\x3c\x8d\x58\x5b\x84\xb3\xdc\xdb\x74\xdb\xff\xf4\x1b\xf1\x8c\x63\x4d\x2f\xa4\xff\x2e\xf0\x0d\x50\x8e\xcd\xa4\x01\x8d\x8a\xe1\x3c\xf5\x09\xc6\x16\x29\xe8\x89\x24\xbf\xa8\x37\xef\xf6\xe8\x5b\xdd\x7c\x5c\x89\x55\xe7\x9d\x93\x2d\x84\x7c\x4e\x9c\xbb\xf0\x97\x2e\x31\x28\x5d\x1a\x50\x86\x99\x23\xa4\xd6\xc8\x71\x0a\x0e\x4b\x45\x27\x44\xb8\xc0\x0f\x78\xda\x07\x78\x2b\xc1\x80\x43\x1a\x09\xaf\xdd\x21\xb7\x59\x38\x25\x01\x42\x59\x66\x0e\x10\xe8\x09\xa0\x86\x16\x08\xc7\xd0\x84\x32\x0f\x72\x7b\x86\xc3\xb2\x61\xe8\xd8\xf0\x69\xf7\x41\x42\xb7\x72\x90\x8e\xf6\x47\xed\x64\x2d\xe1\xc0\x96\xdc\x9e\xe2\x94\xa8\xe8\xc1\xf4\x2a\x41\xac\xf2\x0d\x68\x97\x2a\xb0\xde\x1e\x2a\xa0\xc1\xc8\x6d\x3b\x0e\xcb\x5f\x40\xf0\x71\x26\xc0\x82\xdf\x01\x49\x29\x01\x1f\x12\x80\xde\x8d\x80\x80\x07\x42\x8e\x2d\x70\x8a\x90\x06\x7e\xaa\x3e\x80\x6e\xdd\x04\x4f\x1f\x7c\x08\x26\xb4\x35\x25\xc7\x26\x38\x2c\x5b\x81\x3c\x38\x14\x0a\x02\x13\x0b\x01\xbb\xee\x47\x68\x80\x0e\xbe\xc9\x62\x9a\x49\xc4\x6b\xb2\xcc\xf8\xec\xbe\xed\xe7\x94\x92\x8e\xe1\x7e\x5d\x95\x6e\xbf\x4f\x07\xe5\x7d\x89\xb3\xe3\x6c\xa2\x9e\xa6\x75\x7a\x33\x79\xe4\xb4\x3a\x1a\xbe\x2c\xff\x7d\x1d\x04\x0e\xa7\xe8\x83\xaa\x85\x24\xd2\x33\x0a\x23\xcb\xf0\x59\xa7\x0c\xff\x1b\xb3\x1d\x37\x99\xa4\x2e\x1d\xde\xa0\x97\x73\xac\x2d\xd3\x98\xe3\xec\xac\xdc\x74\xe1\x01\xf9\x61\xe4\xef\x6f\x7f\xa1\x92\x3d\x09\x52\x4a\x38\x54\xef\xfc\x24\x2d\x95\x74\xcf\xbf\xef\x1c\x77\x18\x11\x2a\x67\x35\x4a\x96\x0e\x2c\xe7\x16\xeb\x7e\x5c\x1c\xbd\x49\xd6\xe6\xbb\x63\xfe\x88\x7e\xa8\x66\x10\xfe\x20\x1b\x35\xf8\xd3\xc0\x4b\x71\x46\xad\x72\x3e\xaa\xa1\xba\x40\x9c\x96\x00\x3e\x8c\x00\x6e\x42\xd0\x9f\xf4\x03\x42\x38\x83\xed\xcc\x27\xbd\x64\x6c\xfa\x64\x78\xc2\x28\xe5\x7d\xd4\xd3\x9d\x2f\x99\x78\x93\x0a\xf6\x66\xb8\x22\xeb\x67\x34\xb9\xf5\xeb\x5b\x6f\xdb\x48\xad\x68\x7d\x21\xa9\x13\x29\x51\x1c\x8b\x1d\x6e\x61\x19\xe2\x8b\xdb\x1c\xcc\x65\xab\xea\x2c\xa6\x9b\x97\x3e\xfa\x5c\xb9\xd9\x85\xda\x6d\x5b\x97\xfb\x2e\x7c\x6a\x05\x55\xff\xad\xa8\xbe\x1c\x20\xb4\xbb\x07\xfc\x38\x01\xee\x7d\x9f\x47\x89\x03\x66\xfb\x14\x25\x4e\x25\xc8\x8b\xa5\xa0\x1e\x58\x23\x70\x22\x0b\x56\x3b\x01\xa1\xee\xd2\x18\x28\x75\xf1\x43\xb5\x6f\x0d\xaa\x20\x9a\xc1\xe6\xfb\x11\x3a\x74\x90\x6e\x56\x9b\xcf\xad\x72\xcf\xc7\xeb\xb4\x18\xd3\x5a\x2b\x37\x1e\xe4\xf7\x39\x55\x66\x66\xe1\x53\x69\x1d\x54\x76\x9a\xce\x50\xb8\x33\x2f\x09\x1f\xa7\x82\x1b\x48\xaf\x50\xf0\x5c\x60\x5e\x5e\xa3\x64\x2c\x20\x25\x9a\xe3\xe4\x8e\xb7\x2f\x6e\x3c\x96\xde\x2d\x73\x52\xca\x50\xf8\xf7\x68\xcc\x93\xab\xad\xef\xda\x15\x22\xae\x5c\xdf\xf5\xae\x7b\x73\xfe\x26\x12\xbf\x68\xce\x33\xfd\xb9\xdf\x8f\x0e\x5e\x45\x23\x7d\xce\x43\xcf\x7a\xf8\xaf\x09\xf3\x36\x53\x89\xc8\x9a\x9b\x1c\x35\xda\x3c\x27\x93\xff\xd7\xd5\xe2\x9d\xc1\x29\xa6\xa0\xab\x6c\x21\x1c\x60\x92\x63\x33\x9c\x12\x3f\x35\x48\xcf\xa5\x13\x92\xd4\x60\xab\xa3\x41\xc2\xa7\x82\x70\x9a\x40\x8e\xdb\x70\x58\x3a\x6a\x2a\x70\xc1\x6d\x0c\xec\x5d\x39\xf8\x10\x01\xb8\x6c\x94\x71\xe6\xd6\x7f\x63\x1f\x1c\xb6\x80\x2d\x8a\x16\xdf\xe3\xbd\x14\xc8\x7e\x34\x90\xcb\x68\xa0\xaf\xde\x82\x7f\x7a\x0b\xc0\xc2\x09\xb6\x18\xdd\xff\x5c\xc2\xad\x69\x72\x2c\x88\x1a\x02\x42\x81\xbe\x2f\x50\x8c\x08\x90\x04\x1f\x30\xfe\x18\xe1\xda\x1f\x39\x06\xc1\x61\x55\xa8\x09\xdd\x66\x72\x81\xde\xee\x00\x74\x4e\x05\x53\xff\x42\xf0\xe8\xc8\xf1\x07\x4e\x89\x1a\x07\xee\x4a\xf9\x00\x12\xcc\x02\x0e\xee\x02\x53\x9c\x63\x02\x9d\xa1\xc8\xb1\x10\x4e\x91\x1f\x18\x96\x4c\x82\x20\x80\xd0\xa9\x02\x75\x91\x7a\xa8\x67\xf8\xa8\xb4\x30\x2c\x57\xcc\xaf\x8b\x89\x8b\x59\xda\x5c\xbf\x63\x6e\x6d\x6e\x46\xfc\x97\xfe\x5f\x30\x8d\x1c\xb1\x8e\x13\xd7\xd3\x27\xa3\x9b\xbf\xbd\xbb\x2c\x75\x80\xf3\x94\xa3\xa2\xe6\xf7\x4a\xcd\xc5\xb3\x1f\xf7\x56\x33\x32\x36\x9c\x76\x47\x14\x31\x66\x54\x18\x79\x0c\x66\x0d\x93\x73\x2d\x5f\xab\x31\x8e\x89\xb1\x60\x92\x3e\xac\x76\xd0\x2f\xee\x04\x22\x32\x59\xf5\xec\xac\x93\x46\x40\xb8\x5d\x13\x9d\x96\x17\x13\x17\x95\x16\x86\xe1\x2f\x9c\xf9\x0d\xf3\x3b\xff\xf7\x09\x5f\x6c\x50\xc1\xb2\x45\x8f\xaa\x83\xf1\xfd\x4e\x83\xc6\x71\x9e\xbd\x9f\xc4\x24\x77\x59\x17\x14\xeb\x8d\x0e\x25\x7e\x8d\xb6\x67\x1b\x99\xe8\x75\x5e\x83\x95\x6d\x38\xe5\xdd\x13\x7a\xb9\xe1\xcf\xce\xf5\xd9\x92\x51\xd5\x47\xd3\xcc\x54\xbf\xf2\xf3\x0e\xd1\x2b\x3c\xa8\x3e\xcf\xdf\xf5\x68\x23\x0c\x8d\xdc\xb8\x64\x7c\xdd\xdc\xe4\xb6\xf1\x1d\x73\xab\x1b\x37\x4c\xef\x0c\x50\xff\xb7\x5f\xe2\xb0\x51\x26\x34\xf8\x70\x5c\x47\x1c\x8a\xfe\xc2\x66\xa3\x06\xa5\xd7\x4c\x44\x7c\x67\xf2\xf0\xb2\xdf\xb3\xa1\x40\xf2\x06\x44\xe5\xfd\xd6\x22\xc8\x6b\xcf\x9b\x15\x16\x3e\x79\x95\x53\xfc\x45\xe7\x91\xe1\x4c\x01\xae\x33\xbe\x03\x8f\xc3\xb9\xae\xac\x52\x5c\x8b\x9a\x49\x9a\xf3\x9b\x73\x96\x95\x20\x9b\xc0\x8e\xf4\x4f\x31\xf3\x36\xf1\x4c\x86\x23\x30\x34\x88\xd3\xa2\xbe\xd7\xb4\x7e\x33\xd6\xfc\xa5\x5c\x01\xa7\x0f\xb6\xf2\xe3\x6c\xfc\xf0\x9e\x5d\x06\x30\x34\xbc\x8a\xa8\x45\xc5\x3d\xd4\x21\x69\xce\x17\xa0\xfd\x0b\xc3\xb7\xb3\xac\x22\x25\x3e\x57\x10\x56\xe1\xfa\xdb\x07\x44\x8b\xca\xeb\x92\x92\xa1\xbb\x1e\xc7\xe9\x9d\xbf\x8a\x06\x8b\x1d\x36\x6b\xcf\x4d\x6e\xae\xe0\xd2\xc3\x69\x51\xc7\x89\x6f\x28\x8e\x69\xa7\xcf\x63\x63\x0a\x0d\x32\x55\xa4\xf6\x12\xb4\x31\xe7\x82\xa1\x21\xb0\x8a\xd7\x22\xd3\xb2\x27\x2e\xb6\x2d\x67\x1f\x7f\x6b\xb6\xad\xdf\x7c\x4f\xe0\xf4\x4d\x13\x05\x18\xc7\xb6\xe1\xa9\x49\xe7\xcf\xdf\x0e\x45\x95\x92\xd8\x7d\xa6\x0d\x3f\x23\x7a\xf2\x16\x9f\x07\x1e\x5d\x0c\xe3\x32\x05\xbf\xcc\xc8\xb5\x6c\x34\xd4\x51\xba\x69\xcc\x3b\x79\x4f\x48\x28\xa6\x9a\xde\xcd\x2e\x35\x3e\x7b\x5c\xda\x3d\xee\x8d\xb7\x96\xf9\x8f\x3c\xc5\x4c\x89\x3a\x6b\xcc\xef\x07\x01\x1a\x5c\x5a\x9c\xdf\x4f\x7a\x72\x5d\xc6\x1b\x70\x25\xb7\x5b\xd7\xb3\x35\xd2\xb3\xb7\xb9\x07\xe2\x9e\x9d\xf6\xde\xdc\x25\x9d\x19\xff\x7c\x22\x51\xc7\xfb\xe4\x3a\x4e\xd9\x69\x5f\x6f\xe4\x1f\x06\xc7\x0f\x1d\x41\xf7\xf0\x79\xcc\xa5\xc6\x7a\x9a\xf7\xae\x29\x4f\x54\x9e\xd1\x7b\x36\x29\x36\x4f\x9a\x57\x3f\x4f\xbc\xed\xfb\xbd\x3b\xb5\x70\x19\x1d\xda\xb9\xba\xdb\x54\xc5\x57\x3a\x6e\xe2\x96\xb2\xc0\x05\x21\xbe\xc2\x95\xd4\xe9\x23\x17\x65\xc5\x9b\x95\x58\x84\x69\x16\x97\x53\x85\x22\x52\xa4\x1b\x1f\x37\xcc\xb9\x9f\x66\xb3\xaf\xaf\xa0\x3f\x26\x81\x1f\x9a\x23\xdc\xce\xc6\x7f\xe2\xad\x1c\xb3\x7e\x60\x32\x8f\x67\x9a\xcc\xf3\xa9\x9d\xb7\x42\x85\x06\x0a\x3b\xef\x24\xb4\x9c\x49\x5c\xcc\x40\xfe\x81\x25\xb8\xa9\xb4\x30\x4c\x7f\xb9\xfd\xb6\xe9\x5d\xe3\xdb\x97\xd7\x7e\x0e\xa0\xfa\x0b\x7c\xfe\x81\x12\xf2\x85\xe6\xfe\xc6\x3e\xfb\xc9\x4d\x21\x55\x2c\x96\xd4\x1b\x0a\x43\xf6\x54\x1a\xb8\x9e\xe7\x4e\xd8\x38\x59\x54\xcc\xe5\xa9\x8a\x61\xc3\x50\x71\x79\xcd\x29\x5b\xaa\x60\xa8\x3f\x63\xd0\xff\xa8\xfe\xef\x3b\x35\x0c\xd5\xdc\x16\xce\xfd\x3b\xe9\x38\xa8\x71\x3a\x5b\x30\x54\xb3\x27\x62\xc2\xee\x7d\x4d\x56\xc6\x90\xfc\xa7\x4d\x05\x87\x5e\xcb\xdc\x43\xfa\xb5\x2a\x86\x75\xe5\xef\x7f\x18\xf9\x7e\xbc\xa0\x48\xdb\x76\x7f\xea\xb0\xc8\xa0\xb2\x31\x6d\xff\x48\x05\x99\x74\x36\x63\xfb\x92\x7e\xd9\x8d\xef\x48\x6c\xa4\x61\xeb\xcf\x67\x2f\xf1\x5d\x7b\xbf\xcf\xfa\xc5\xcd\xb0\x23\xcf\xdd\x44\x9f\x5e\x2b\xa7\x9f\xc1\xfa\xff\xb1\xec\x2e\xbf\xef\x83\xb9\x29\xe1\xfb\x52\xe6\x27\xbd\x89\xb7\xbc\xfc\xda\x8b\x2d\x5c\xf7\x2f\x3a\x94\x2b\xcc\x35\xdb\xbd\xf7\x9a\xf5\x73\x8c\x90\xf2\x14\xc1\xdd\xa8\x71\xd7\x68\xd2\x7b\xd6\xba\xd4\x79\x5d\xfc\x04\x86\x2a\x4a\xeb\x6a\xd4\xea\xc4\x28\x50\x2f\x6b\x1e\xbd\x24\x69\x9b\xd5\xa2\x9c\x30\x8b\x74\xa7\xc1\x15\x71\x34\x9d\x1d\xe6\x46\x27\xfa\x33\x66\x02\x66\xa1\x9a\xf0\xab\xd4\x1a\xdb\xd7\x3c\x3a\x71\xa1\x20\xa7\x38\xf6\x80\x2b\x8f\x8a\xdd\xeb\xee\x33\x49\x4f\x46\x26\x90\x76\xf1\x2f\x4a\xe5\x92\x97\xb7\x08\x4d\xef\xee\x6d\x5b\xf3\xe8\xb8\xff\xbb\x9d\x4c\x91\xe7\xd2\x26\x52\x93\xea\x26\x0c\x95\xd4\xb6\xa7\x0b\x8c\xb1\xdb\xce\xb9\x5a\x98\x39\x87\x6d\xdf\xf7\x85\x9f\x2b\x6c\xed\x74\x73\xcb\x0e\x3c\x28\x16\x58\xec\xb8\xdd\xc8\x1b\x46\xcd\x6d\x71\x6b\xab\x84\x97\x78\x15\x93\x96\xf2\x79\x96\x3a\xce\x02\x0d\x25\x69\x79\xd3\xff\x46\x3a\x4f\x45\x8c\xa9\x22\xc6\xd4\x69\x46\x67\x27\x66\x07\x1d\x15\x3b\xdf\x03\xc6\x53\x8f\x5f\x40\x5c\x3a\x37\xf3\x39\xd6\x77\xd9\xd2\x6e\xb8\x54\xd5\xae\xab\x75\x3c\xa0\x32\x21\xcb\x76\x64\x42\xa3\xd2\xc6\x09\xda\x8a\xc1\x60\xe8\x50\xea\xc1\xf4\x7b\x74\xff\x1b\x45\x9c\x69\xa8\x9c\x15\x68\x90\x35\xf3\xdf\x6c\xb8\x64\xbe\x5b\xff\xfc\x9e\xd2\x63\x43\x26\x32\xbf\x6e\xf7\xed\x0b\x11\xbd\x7e\x66\xfb\x2b\x93\x03\x4f\x83\xbe\x7f\xea\xdb\xba\xde\x49\xfb\xbf\x3d\xe7\xac\x40\xb7\x76\x58\xa6\x07\xfb\x1d\xf4\x92\x79\xa3\xb3\xb1\x3d\xc3\x85\xac\x1e\x37\x35\xee\xf6\xdd\xfc\xe5\x6c\x7f\x5c\x40\xfe\xf2\xab\xf1\xe2\xce\x65\x30\x2c\xb9\xe7\x9c\x15\xf8\xd6\x0e\xfb\x5c\xe8\xf9\x82\xc9\x29\xcd\xe7\x1b\x26\x55\x17\xc5\x9a\xf9\xa9\x3a\x5c\xea\xcc\x0d\xb2\x27\x33\xbc\x7a\x5e\xa5\xfb\x19\xe5\x69\x83\x61\xc9\x3d\xe7\xac\x40\xb5\x76\xd8\x33\xd3\x46\xcb\x2e\x79\xe2\xfe\xea\x9b\xaa\x97\x93\x2d\x53\x67\x7e\xb7\x75\xf9\x3c\x10\x61\x92\x7b\x50\xf4\xf2\xae\xc8\xec\xd1\xe7\x4e\x7b\xff\xdb\x73\xce\x0a\xf2\x4e\x88\x22\xcd\x67\x37\xaa\xff\xc6\x4a\xce\x10\x0c\x61\x9c\x15\x20\xdc\x9a\xb9\x3c\xbd\x8a\x79\x36\xa5\x51\x5f\x9e\x19\xee\x2e\xfc\x3b\xf2\x98\xd2\x0d\xdb\x07\xb4\xa7\x45\xaf\x9f\x4a\x75\xb5\x79\x24\xb2\x11\xc9\x5a\x7b\x42\xb7\xa7\xb1\xff\x56\x58\x48\xec\x9b\x19\x9e\x9c\xf9\xbd\xfb\xc7\x38\x70\xc9\x6d\x99\xec\x2c\x33\xf6\xa3\x57\x19\x0f\xeb\x60\x42\x9d\x9c\xa1\xff\x36\xa6\xb3\xc2\x8a\xc7\xda\x9a\x25\xe9\x6a\xaa\x3f\x49\xc8\xb5\x7a\x56\xb9\xb6\x91\x3b\xb1\xec\x56\x3f\x6c\xc3\x0f\x75\xe7\x9b\x7b\x39\xb4\xed\x3c\xa9\x29\xa6\xb0\xe6\xd1\x53\x81\xd7\x24\xfc\xdf\x86\x7b\x14\xd3\xec\xa7\x35\xb1\x7d\x64\xfe\x63\x3a\x59\xea\xbe\x8a\x14\xec\xb5\x47\x7c\x5f\x39\x5f\xa2\xcc\xda\xfe\x01\xda\x22\x1b\x9b\x0e\x4b\x77\xcf\x3d\x63\x6a\x61\xcd\x2a\x38\xad\x27\xb1\x37\x7f\x61\xf3\xe3\x9f\xfb\x8f\x17\xe4\x74\x49\x1c\xde\xb1\xf6\x6e\xff\xb1\x0a\x97\xbb\xeb\xbb\x2e\x8f\xf2\x2b\x36\x14\xce\xdd\x12\x71\x6d\xf1\xad\xf2\xe2\xb9\x30\xfe\x5d\x56\xca\xd1\x41\xf8\xa0\xf2\x9a\x47\xd9\x77\x39\x1d\x3d\x20\xb4\xf8\x3b\xb5\x58\x59\xc2\xaa\x92\x4b\xf2\xca\xdb\x43\x23\xee\x8b\x8f\xbe\xf6\x08\xd8\x52\xd9\x77\xdc\xd8\xbc\xe6\xd1\x3b\x4d\x02\xf9\x79\x77\x13\x4e\x39\x3a\x59\x8c\x67\x4e\x3e\xff\xf5\x50\xa0\x36\x46\xce\xe4\xe3\x29\xc5\xdb\x1b\x54\x6d\x1a\xd6\x87\xaf\x75\xfb\x6f\xf3\x6c\xb0\xac\xe8\x9a\xef\x60\xf1\xeb\x5a\x6a\xff\xe1\xb2\x22\x7b\xe2\x82\xa7\xdd\x43\xef\x43\x07\xe8\x26\x03\x8f\x2d\x25\xac\xbd\x3a\xc0\xb2\xb5\xac\xd5\x98\x76\x44\x8d\x5a\xad\x75\x8b\xba\x9a\x97\xf2\xce\xf8\x4d\xbf\x2a\xb6\x1e\x78\xb5\xfe\x2c\xc3\x9e\xac\x44\x06\xc2\x26\x90\xa3\x2a\xc9\x26\x5c\x13\xa4\xbd\x3f\x1b\x31\x16\x78\x21\xb7\x48\x8c\x6a\x41\xc8\xaf\xa6\xcf\x07\xa3\xb5\xf8\xa4\x93\xbb\x36\x4c\x42\x61\x81\x6b\xad\x0e\x4a\xc9\xbd\xd5\x24\x96\x93\x7b\xaa\xf8\xf1\x60\xaf\x95\xd5\x6b\x37\x41\x01\xb5\x93\x47\x5f\x35\x9b\x1d\x98\x5c\xd1\xf3\x3b\xfe\x7a\xed\x6c\x8b\x52\x6d\xef\xcd\xc4\xd3\x6e\xb1\xff\x69\x49\x77\x20\x49\xf3\x5e\x6b\xc4\x74\xc4\x51\x1e\x1a\x83\xa2\x15\xc3\x1d\x81\xa3\x06\x6b\xc9\x15\xee\x49\x67\xe3\xbd\xe8\x16\x77\xfd\xb8\xa1\x6d\xa6\xf4\x09\x17\xdd\x58\xc5\x47\x52\x96\xbc\x87\xe5\xc7\xb3\x33\xee\x3f\x74\x6e\x58\xf3\xe8\x95\xf0\x2b\x58\x91\xe3\xac\x5d\x57\x9f\x45\xf0\xca\xb5\x26\xf5\x56\xd9\x07\xa7\x97\x9d\x2e\x3c\x7b\x32\x05\xb9\x68\xe9\x5a\x7d\x7f\xcd\xa3\x30\xbb\xa9\xf4\xbd\x08\x77\xf9\xab\x77\x31\x52\x19\x5a\x2c\xd4\xf6\x11\xc5\xfd\xd7\x67\x12\x6b\xca\x7e\xd9\x85\x71\x3c\xda\xb7\x96\xbd\x19\x1b\xe7\xc2\x3c\xf7\x76\xef\x83\x7e\x2a\xe9\x97\x7c\x6b\x8e\xe1\xda\xdb\xa0\xb7\x4d\x39\xfd\x9c\xe3\xf3\xf6\x94\x2f\x1f\x5b\x4c\xd7\x3c\x2a\x25\xc8\x2e\xd6\x3b\x2a\xe8\xf7\x2d\x3a\xb3\xdc\x48\x5d\x8f\xe6\xf1\x8e\x77\x0c\xa6\xdf\x9d\xb7\x78\xde\xe9\x0c\x3f\xc9\xff\xfd\x84\x53\xee\xba\xff\x46\x55\x67\x85\x15\x27\x0f\x6f\x0c\xf4\x65\xb7\x8e\x30\x86\x0a\xd7\x0b\x21\x83\xd4\x7c\x9b\x04\x03\xd7\x77\xcd\x9d\x57\x5d\x61\x6d\x7e\x24\x6f\x1b\xb4\x64\xfc\x5d\xd7\xf6\x0e\xd5\x87\x77\x93\x3c\x4a\xc6\x8a\xcd\x57\xf7\x21\x30\x84\xc1\x6c\xc1\x6c\x4e\xd6\x95\x57\xc1\x7c\xc0\x55\xfc\x35\xb5\x5e\xe5\xfc\x3d\x7f\x3f\x59\x47\xd0\xef\x0f\xbb\x59\xba\x43\x15\x33\x1e\xbb\x8f\x73\x72\x36\x3c\xd5\x9b\x8a\x18\x21\x77\x87\x57\x71\xcc\x4d\x95\x1d\x56\xc3\xe3\x3b\xb6\x7e\x33\xfe\x3e\x1a\xb4\x5e\x26\x62\xcb\xf0\x86\xd1\xc2\x63\xb1\xf2\xeb\x8b\x2f\x23\x30\x44\x45\x21\x02\x35\x31\x02\x5d\x8c\x5a\x71\x74\x70\x5b\xf5\xa6\x3e\xdd\xba\x47\xdc\xbd\xc7\xc6\xb9\xc6\x86\x0b\x0d\xb4\xf6\x98\x5a\x7a\x9d\x60\x13\x90\x3f\x8f\xc0\x10\x35\x85\x08\x10\x31\x02\xfd\xaf\xc3\xed\x39\x18\x6b\x75\x9a\x1b\x59\x2a\x15\xae\xe3\x34\x97\x4e\xf3\x19\x70\x1c\x6d\xbc\x8c\xa4\xd7\x15\x8a\x3f\xe5\xba\x86\xc0\x10\x44\x21\x02\x0d\x31\x02\xbf\x55\xdf\xd2\x21\xe5\x33\x23\xba\xf4\x45\xed\x17\x6e\x3f\x8b\x55\xb1\x8c\x7d\xb0\x18\xcf\xfc\xea\x18\x13\xbc\xc3\x3e\xd4\x84\x1b\x81\x21\x1a\x0a\x11\x68\x89\x11\x36\xda\xef\xb9\x5c\x63\x4c\xd5\x56\x3d\x18\xcb\xf2\xeb\x1b\xdb\xa2\x55\x6d\xf3\x92\x9d\xfe\x85\xa3\xf7\x99\xda\x18\xf3\x16\x2e\x5b\x23\x30\x44\x4b\x21\xc2\x3a\x62\x84\xe7\x31\x70\x64\xd1\x90\xf1\xe3\x48\xe7\xa2\x9e\x29\xba\x91\xed\x4d\x3f\x30\x3e\x1c\xd1\x7e\x21\xea\x8a\xcc\x5a\x39\xbb\x4e\x6b\x23\x30\xb4\x8e\x42\x84\xf5\xc4\x08\x3b\xb2\x67\x8d\x0d\x4b\x9f\x39\xea\x2a\xbb\x14\xef\x10\x2c\x9f\x67\xff\xe2\x7c\xb8\xe9\x5d\x2f\xf5\xcd\x32\x1d\xdf\xd2\x47\x1e\x92\x08\x0c\xad\xa7\x0c\x01\x08\x0f\x39\x3d\xf3\x57\x78\xe8\x88\xa7\x53\x95\x50\x2e\x79\x53\xed\xc4\x39\xef\x74\xbb\x83\xef\xa5\xbf\xcc\xed\xec\xb9\x58\xf4\x74\x77\x78\xd2\x16\xe6\xf6\xe3\xb1\x10\xee\x22\x02\x43\x74\x14\x2e\x98\x9e\x18\x41\xdd\x5d\xd0\x7c\xa7\x9a\x6f\xb6\x7d\xfa\xc3\x9f\x37\xde\x2a\xd3\xf9\xd2\x58\x94\xd9\xa7\x77\x0e\x26\x31\x86\x5f\xd4\xfc\xda\x27\x81\xc0\x10\x3d\x85\x08\x0c\xc4\x08\x4d\x9b\x19\x2b\x5f\xd1\xc1\x53\x9e\x53\x4a\x2a\x7b\x6b\x5e\x8f\x73\x54\x3f\xa9\x32\xb7\x0e\xbb\x1a\x38\x24\xfa\xd9\x7c\xc6\x95\x16\x81\x21\x06\x0a\x11\x18\x89\x11\xb6\x69\xa7\x73\x87\x6e\xe0\xb1\x3f\xcd\xed\x9e\x35\xe1\xcf\x9d\x27\xeb\xf2\xdc\x23\x81\xee\x41\xbe\x96\x7e\xc4\xd8\x99\xd7\x87\x34\x11\x18\x62\xa4\x10\x81\x89\x18\x61\x5a\xea\xf1\x99\x3f\x3f\x55\x9e\x77\x4c\xd5\x3c\xf6\x84\xf5\x5f\xd5\x8b\xc6\x8d\x8e\xb0\x0a\x3f\x28\x3e\xf7\xcb\x9a\x4a\x72\x8b\x16\x02\x43\x4c\x14\x22\x30\x13\x23\xe8\x69\xc5\x5a\x96\x15\x5d\xe2\xbd\x2f\x47\x1d\xb5\x4d\x90\xe9\xcc\xb3\x9d\xfa\xb8\x31\x5d\x16\x6e\x3b\xf6\x13\xb7\xed\xda\xb9\xe9\x11\x18\x62\xa6\x10\x81\x85\x18\xe1\xe8\xc7\xa2\x20\xee\xf6\xaa\x65\x63\xbb\x4f\xf3\xbb\x21\x3f\xb1\xea\x0b\x86\xc6\x8b\x6a\x09\x37\x06\x57\x46\x03\x0e\xdc\xfe\x60\x80\xc0\x10\x0b\x85\x08\xac\x24\x6b\x78\x29\x67\x78\x81\xdd\x2d\x68\x71\x2b\x03\xcd\x1b\xd9\xd3\x82\x8d\x4f\x2b\x33\x64\x03\xbc\x1a\xbc\xc5\xa3\x7b\xa7\x36\x8e\x5e\x42\x60\x88\xf5\xdf\x84\x87\x9c\xe5\xfd\x2b\x3c\x6c\xc4\xd3\x99\xec\x8d\x4a\x97\xbb\x93\xbb\x79\xcf\x5d\x25\xfa\x86\x50\x56\x76\x2e\x5f\xa6\x5c\x33\x73\xfe\xf8\xb3\x7c\x1d\xce\xb3\xdd\xf5\x28\x6b\xb3\x51\xb8\xe0\x0d\xc4\x08\x1e\x77\xd3\x4e\x4d\x1b\x17\x30\x27\x86\x88\x79\x3a\x3b\xde\x79\x7f\x97\x8b\x7b\xae\x27\x58\x6e\x20\xdc\xf8\xe8\x86\x7b\x34\xba\x34\x08\x0c\x6d\xa0\x10\x81\x9d\x18\xe1\x93\x63\xe3\x45\x8f\x4e\xf3\xde\x1a\x63\xcf\xb0\x84\x7e\xe3\xaf\x93\xd7\x8c\x36\x6d\x39\x5f\x73\xef\x66\x57\xd3\x54\xd5\x57\x0d\x5e\x04\x86\xd8\x29\x44\xd8\x48\x8c\x90\xb1\xe3\x93\xee\x44\x6f\xe6\xfa\x7b\xfd\x17\xb1\x69\xca\x46\xdd\x46\x4f\x0a\xef\xa9\xd0\x6b\xbf\xda\xd0\x2c\xe7\x22\x96\x56\xbf\x11\x81\xa1\x8d\x14\x22\x70\x10\x23\xcc\x38\x4d\xfa\xa6\xbf\xd2\x4c\x11\xd9\x94\xb7\xd7\xa0\x6a\xeb\x87\x36\x83\xd9\x48\xdd\xd0\x23\x1f\xf9\x1b\x9e\x97\x2c\x97\xad\xa0\x08\x1c\x14\x22\x70\x12\x23\x38\x31\x8f\x27\x18\x9e\x76\x3f\x3b\xde\x6b\x6a\x6f\x31\xf0\xfa\x47\x6c\xc1\x15\xa3\xfc\xc3\xcc\xd8\x1e\xeb\x2b\xc3\x4d\xcf\x44\x51\xd6\xe6\xa4\x10\x61\x13\x31\x82\x29\x9c\xef\xb2\xad\xb5\xf8\xf4\xbd\x6f\x8d\xc1\x15\xfe\x70\xd6\x82\x9a\x77\x9c\xb0\x89\xce\x21\xcb\x3c\x91\x93\x29\xfe\x9f\x4d\x11\x18\xda\x44\x21\xc2\x66\x62\x84\x28\x1d\x8e\x0c\xa7\xfd\x7d\xc2\x0d\x3c\x63\xe5\xe9\x5d\xfb\xc2\xf8\x19\x1c\xab\x87\xce\xee\xb6\x19\xbc\xc4\x79\xaa\x5b\x78\xfd\x69\x04\x86\x36\x53\x86\x50\xbc\xee\xbf\xf9\xa2\x7f\x85\x87\x8b\x8b\x78\x3e\x76\x89\xc9\x9f\x0d\x9c\xfe\xbc\x7a\x5e\x3f\xd2\x27\x5f\x3b\xb6\x53\xed\xd0\x73\x59\xdc\x96\xae\x88\xce\x8f\x01\xd9\x8f\x12\x74\x64\x11\x18\xe2\xa2\x70\xc5\x5c\x30\x31\x44\xf7\x16\xf1\x89\x1b\x33\x4b\x27\xbe\x68\x5a\xd6\xaa\x49\x8d\x2c\xc9\x4f\xd2\x0e\xf0\xf3\x08\xb1\x1d\xea\xce\xa8\x16\xd3\x98\x14\x41\x60\x08\xa6\x14\x62\x0b\x31\x44\x72\xf2\xab\xb3\xca\x3a\xd3\x99\x3e\x8d\xa5\xcb\x02\xb4\x62\x72\xcf\xcc\xb4\x61\xab\x9a\x2b\xb9\x9d\x7c\x1a\x96\x47\xcb\xe9\x0e\x23\x30\xb4\x85\x52\x88\xad\xc4\x10\x4f\xa4\x77\xee\xb2\xac\x7a\x3b\xc6\xfd\x4c\x18\xb6\x38\xb1\x9d\x97\x37\xfa\xa5\x3a\xd2\xbd\xbd\x57\xb3\x80\xce\x7f\xab\x79\x26\xea\x58\x6d\xa5\x14\x82\x9b\x18\xe2\x31\x67\xce\x01\x99\xad\x79\x17\xfc\x33\xb0\xd6\x7a\xd9\xe7\x94\xbc\x86\x05\x26\xd9\x4c\xfb\xc2\x5d\x8f\xeb\x88\xad\xf8\xf3\x5c\x47\x60\x88\x9b\x52\x88\x6d\xc4\x10\x4b\x5e\x4f\x1a\x05\x7e\xec\x16\x5d\x67\x43\x55\xef\xb0\x4f\xeb\xfe\xde\x9b\x0b\x76\x99\x0f\x5e\x6d\xeb\x6c\x7d\x63\xc5\x19\x29\xa8\x86\xc0\xd0\x36\x4a\x21\x78\x88\x21\x2e\xce\x60\x13\x9f\x67\x0b\xe6\xca\x15\xec\xe0\x94\xa0\xef\x8b\x50\x5d\x6f\x4a\x17\x11\xe0\x19\x38\xf7\xf3\x6a\x8c\x31\x6d\x1e\x1d\x02\x43\x3c\x94\x42\xf0\x12\x43\x4c\x79\x16\x5a\xcc\x17\x1d\xba\x58\xad\x67\x2f\x98\x71\x41\x36\x58\x28\x2f\x8c\x63\xde\x45\x57\x9d\xd5\x2e\x7a\xc1\x4d\x54\x82\x0a\x81\x21\xde\x7f\x13\x22\x72\x51\x1a\x5e\x88\xf8\x88\xe7\x73\xc7\x88\xf6\xa4\xfa\xd1\x52\xd1\xbb\x3d\x6f\x37\x27\xd4\x49\x6a\x18\x0f\xee\xdd\x53\xe7\x6c\x3b\xde\xdc\xb9\xa7\x5e\xff\xeb\xfb\x03\x08\x0c\xf1\x51\xba\xe4\xed\x24\x1e\xab\xb3\x27\xd7\x4d\xc1\x99\x39\x5f\xed\x65\xda\xb1\x5b\x53\x3f\x55\xe6\xd8\xf9\xac\x73\xc3\x2b\x95\x93\x74\x4d\x84\xda\x19\x6f\x20\x30\xb4\x9d\x52\x08\x7e\x62\x88\xdd\x34\xd6\xd9\x2a\x47\xce\xb9\x07\x30\x71\x24\x5e\xb1\xdd\x70\x10\x0e\x4a\xca\x2b\xbd\xa1\x6a\x63\xbf\xb2\x82\x71\x5c\x51\x46\xfd\x2b\x7e\x4a\x21\x04\x48\xa2\x13\x37\xd5\xae\xfe\x62\x2d\xed\xbd\x2c\xed\x07\x46\x44\x55\xfb\xdc\x4f\xab\xfb\xfc\xe8\x3b\x97\xdd\xfd\x85\xb5\xf3\xa3\xaa\xe4\x66\x04\x86\x04\x28\x85\xd8\x41\x0c\xa1\x29\xd5\xe8\xec\x11\x92\x50\xd2\xec\x73\x02\xf7\x8e\xb1\x38\xbc\x35\x40\xcb\x02\x17\xcc\xaa\x15\xf1\x67\x5d\x7b\xcb\x2f\x43\x94\xfd\x76\x50\x0a\x21\x48\x0c\x31\xda\xee\xbc\xc8\xf7\xc2\xe2\x16\xd2\x36\xee\x3e\xcd\xa4\x3d\xd8\xcb\x76\x2f\x8d\xbd\x7e\xd7\x9f\xbe\xcf\xee\xbf\x19\x4f\xf3\x50\x23\x30\x24\x48\x29\xc4\x4e\x62\x88\x84\xfc\xd7\xa1\x47\x44\x71\x47\x33\xf7\xd1\xfa\x31\x32\x2b\xc4\x63\x71\x5f\x5a\xce\x18\x32\xc4\x6a\x28\xba\xf9\xce\xa6\x74\xa3\xaa\x60\x27\xa5\x10\xbb\x88\x21\x98\x4b\xc6\x0e\x64\x4d\xa5\x7a\x46\x4a\xb9\xb3\x2d\xab\x9c\xa1\x9f\xdc\x5a\x7f\x5a\xcf\x3a\x05\xd1\x38\xab\x24\x2a\x3a\x52\xbe\x13\x81\xa1\x5d\xff\x26\x44\xe4\xf2\x17\x78\x21\x12\x22\x9e\x8f\xff\x1e\x7d\xd9\xa0\xd8\x72\xf7\xf7\x0f\xf9\x05\xca\xa6\x6b\x2f\x3d\x1d\xa8\x37\x6b\x89\x7f\xdf\xe2\x71\x54\x36\xcb\x42\x44\xd5\x02\x81\x21\x21\x4a\x97\x2c\x4c\x0c\x51\xdd\x8b\xa4\x0c\x05\x84\xec\xf8\x48\x93\x7a\xaf\xb9\x25\xdc\x57\x7b\x8b\xd4\x14\xd7\xdd\xd2\xc0\xa0\xc2\x90\x8f\xba\xce\xad\x3c\x08\x0c\x09\x53\x0a\xb1\x9b\x18\x22\x62\xbd\xde\x2d\xaf\x3c\xe6\x8f\x72\x7d\xbd\xb5\x3d\x29\x8f\xea\x22\xda\x4d\x42\x38\x77\x97\x22\xe3\xf7\xd8\x32\x9f\x29\x7d\x54\x41\x60\x68\x37\xa5\x10\x22\xc4\x10\xb7\x34\x9a\xe2\x83\x7f\xca\x2a\x38\x38\x77\xfc\x4a\x09\x29\x36\xd1\xe4\x4f\x4c\x0f\x7b\xd7\x37\x45\x5d\x9f\x6d\xe5\x52\xd7\xad\x8f\xc0\x90\x08\xa5\x10\xa2\xc4\x10\xc3\x62\x73\x13\x11\x1e\xb2\x3f\x27\x4f\xf3\xcc\xd5\x70\x79\xc8\x8b\x4d\xe7\xb1\xf6\x9d\xe0\x62\xa5\xdf\x31\xdc\xf9\xa0\x68\x08\x25\x94\x28\xa5\x10\x7b\x88\x21\x72\xb0\xcd\xf6\x2e\x43\x7f\x9c\x5e\xaf\x8f\xd6\xb9\xfd\xa9\x50\xf7\x3b\xe3\xd7\x77\x7f\xae\x46\x08\xa6\xde\xbc\x1c\x62\xd0\x28\x88\x9a\xec\x3d\x94\x42\xec\x25\x86\x90\x19\xab\xd2\x1b\x09\x7c\xb5\xf0\x80\x27\x8f\xc7\x9d\x6e\x4e\x33\xf2\x56\x9b\xa1\x52\xa4\xb5\xa7\x5d\x6a\x8a\x81\xce\xad\x48\x2b\x04\x86\xf6\x52\x0a\x21\x46\x0c\x61\xb1\x8b\x4b\x81\xbe\xef\x99\xfd\xd2\x47\x09\x5b\xa8\x9b\xd3\x49\x62\xf0\x48\xbf\x81\x07\x63\x71\x7a\x7f\x7c\xed\x9e\x8e\x5b\x26\x08\x0c\x89\xfd\x9b\x10\x91\xcb\xec\xe1\x85\x68\x1f\xf1\x7c\x62\x18\xc7\xea\x8d\xdf\xba\x76\x8a\xbe\x6f\x14\x36\xb1\x2a\xd8\xe2\x65\xa0\xf9\x56\x1f\x0b\x9f\x49\x32\xa0\xeb\x28\x59\xb7\xe7\x20\x02\x43\xfb\x28\x5d\xb2\x38\x09\x6f\x34\x05\x3d\xff\x14\x8c\x31\xa9\x2b\x3d\x46\x4d\xff\xa4\x10\x17\x2b\xb3\xeb\xa7\x56\xfc\xac\x62\x2c\x2b\xb2\xf3\x66\xf6\x08\xaa\x37\xc4\x29\x85\x90\x20\xb1\xa7\x69\x21\x09\x37\x91\x85\x8b\x51\x96\xf5\xbb\x0e\x1a\x58\xb5\xa8\x1b\xa5\xb6\x15\xda\x9e\xdc\xda\x1d\xb1\xb5\x32\xb1\x6f\x40\x03\x81\x21\x09\x4a\x21\xf6\x13\x43\x98\x17\xc8\xde\x2e\xf8\x24\xb0\x72\xbf\xd7\x7d\xe0\xea\x1c\x53\x51\x22\x94\x32\x7a\xad\x36\xb3\xf6\x8c\xf5\x27\xa9\xe1\xaf\x4b\x62\x08\x0c\xed\xa7\x14\xe2\x00\x31\x84\xcb\x63\xc1\x86\xd3\x3c\x27\xaf\x5c\x59\x32\xcf\xfd\xe4\xa1\x55\x26\x28\x2c\xa8\x32\xda\x23\x16\xbd\xe4\x72\x42\x4a\xe6\x5a\x1c\x2d\x02\x43\x07\x28\x85\x90\x24\x89\xea\x0c\x63\x24\x66\xdb\xf7\x1a\x7a\xe8\x6d\x6a\xce\x0a\xdd\xa7\x7b\xdc\xda\x72\xd2\x4d\x78\xf9\xc9\x5c\x46\xd4\x65\xea\x64\x5e\x4e\x04\x86\x24\x29\x85\x90\x22\xe1\x28\x6b\xe7\xab\x3e\x6c\x43\xcf\x5a\x86\xb8\xce\x49\x72\x89\x19\xe5\x9e\xac\x3e\xd0\x5a\xf0\xf1\xfb\x72\xeb\x78\x4f\x37\x9f\x14\x6a\xb2\xa5\x28\x85\x90\x26\x86\x10\x8e\xba\x11\xbd\x30\x4e\x6f\x3a\xbf\x49\x90\x37\x87\xff\xe1\xcf\xf9\x01\x99\x8a\xd7\x2d\x49\xfb\x19\x3b\x33\xaf\x25\x4f\x96\xa3\xf6\x54\xfa\xdf\x84\x88\x5c\xce\x1b\x2f\x44\x32\xc4\xf3\x49\x0c\x7f\xfc\xf6\xc6\x60\xb5\xf4\xa6\xd6\x2a\x29\xd7\xc6\x0b\x63\xac\x06\xea\xbc\x9c\x12\xcc\x81\x2b\x0e\xb1\xe7\xb1\x1f\x4f\x08\x23\x30\x24\x43\xe9\x92\x65\x49\x52\x9c\xec\x8b\x95\x9b\x14\xbd\xaa\xa3\x78\x7c\x76\xa8\x76\x65\xff\x8a\x29\x94\xd9\x79\x94\xa1\xff\x23\xa4\xd9\x62\x88\x4c\x5f\xba\x89\xc0\x90\x2c\xa5\x10\x07\x89\x21\x2e\xf8\x19\x09\x71\x44\xb6\xc6\xce\xf5\x5c\xd9\xd2\xdd\x76\x3d\xcc\xdc\x4f\x50\x7a\xf8\xee\x61\xa9\x23\xec\x19\xad\xef\x78\x38\xcf\x21\x30\x74\x90\x52\x88\x43\xc4\x10\xe2\xfd\x74\xd2\x81\xd7\xdc\x9e\x7c\x53\x9b\xe8\xe1\x68\x9f\xa2\xd1\x1a\x54\x55\x6f\x57\xf0\x74\x93\x7b\xee\xa7\x73\x82\x6f\x48\x11\x81\xa1\x43\x94\x42\x1c\x26\x86\xa8\x3b\xbf\x8d\x67\xbb\x7f\xc0\xc7\xbe\xaf\xa9\x8e\x17\x9f\x9f\x4a\x19\x97\x1c\xd9\xaf\xf6\x5b\x52\x8a\x36\xc3\xb4\xea\x96\xbd\xa9\x1c\x02\x43\x87\x29\x85\x90\x23\x86\x88\x7f\x3a\x3c\xbf\x45\x2f\x62\xa7\x26\x8f\xeb\xbb\xfe\x11\x1e\x9a\x40\xe1\x3f\x39\xb1\xf6\x55\x1c\x43\x27\xb7\x4e\x20\x0a\xbe\x0c\x08\x0c\xc9\x51\x0a\x71\x84\x18\xe2\xdb\x8e\xc5\xa8\xca\xac\x10\x35\x79\xe1\xfd\x12\xc9\x99\xc2\xda\x73\x8c\x9f\x3f\x65\x7f\x79\xf9\xc5\x6f\x9d\xcc\xc8\xe6\x37\x1b\xe9\x11\x18\x3a\x42\x29\xc4\x51\x62\x08\xeb\xcc\x23\x2c\x07\x38\x9e\xb5\x71\x2e\xc6\xeb\x1c\x15\xd1\xec\x9b\x7b\xab\xed\x3e\xa1\xd2\x6b\x2a\x4c\xdf\x74\x17\x61\x53\xdc\x82\xc0\xd0\x51\xca\x20\xc0\xa1\x1c\xb9\xf3\x4b\xd2\x93\xd1\x5b\xbc\x34\xde\xb5\x6d\xbf\x57\xae\xb9\xf5\x1b\x6c\x1c\xdf\x75\x8d\x4e\xae\xa6\x27\xd7\xe7\xd5\x1e\x0f\x01\x1b\x19\x15\x77\xe9\x35\x8f\xee\xfd\xe8\xc2\xed\xae\x1f\x16\xc7\x3f\x55\x39\xe4\xf2\xb8\xcd\xe5\xe4\xd1\xf3\x37\x9c\xbf\xcd\xa5\x08\xb3\x70\x64\xfa\x75\x67\xdd\x5a\x7b\xaa\x7d\x68\xb0\x57\xa6\x7f\xf2\x41\xc0\x61\xa6\x07\x5f\xaf\xa6\xdf\x2c\x8b\x3e\x64\x71\xe3\xfa\xce\x1f\xb5\xb2\x98\xc3\xad\xc9\x87\x8c\xd6\x3c\x2a\x5f\x1a\x7c\x2a\x2e\xa8\x6e\x70\xcb\xc8\x62\xa9\xc0\x2d\xa7\x3e\x83\x9f\x55\xc9\xd4\xfe\x7b\xea\x82\x79\x4b\xe4\xab\xbf\x06\xb3\xad\xed\xf9\xd9\xc9\xe8\x10\x6c\xa2\xe6\x82\xf9\x3a\x9a\x67\x9e\xd6\x32\x7d\xaa\xd5\xa8\x68\xdd\x83\x19\xa5\x9f\x0c\x23\x59\x8a\xd2\x8d\x6b\x4b\x35\x36\x9c\x19\xe1\x70\x95\xf9\xf8\x44\x6a\xdd\xc6\x17\x9a\x87\xc6\xcb\x97\x12\x18\x2c\x0d\x58\x8e\x85\x0c\x66\x1b\x39\xbc\x72\x4c\xcb\x58\xfb\x76\x9e\xda\xb3\xb5\x3f\x32\xdf\xb3\x04\x4b\x1f\xaf\x56\xb0\x1e\xcf\x3b\xe2\xd5\x7f\x71\x70\xab\xf8\x52\xe2\x59\xb7\xb7\x49\x0d\x09\xcc\x6b\x1e\x4d\xaa\xde\x28\xcd\x22\x34\x74\xec\x81\xa7\xbb\xdd\x97\xd4\x7d\x56\xde\xd2\x54\xbc\x45\xd5\x69\x22\x2b\x2f\xf6\xff\x19\xd2\x8e\x5f\x70\x02\x9a\x8c\x1c\x55\xf1\x9a\x4c\x9e\x98\x29\x2a\x55\xcd\x34\x82\x36\x37\x88\x39\xad\x0b\x11\xaf\x10\x74\xfc\x7c\xd7\xe2\xdb\x91\x4d\x73\x97\x55\x47\xbc\xab\x53\x0e\x3b\xef\x3a\x8a\xc0\x90\x3c\xa5\x7c\xa7\x40\x0c\x51\xd1\xdd\x76\x6f\xcb\xe0\xd6\xd4\x4e\x23\xb1\x6c\x65\x45\xae\x27\x32\x55\x11\x46\xdf\x6c\xfc\x13\x6f\xd2\x6d\xbb\x18\x3a\x79\xdb\x12\x81\x21\x05\x4a\x21\x14\x89\x21\x14\xaf\x1e\x4f\x3d\xab\x10\x4b\xfb\x26\x73\xc9\x20\x65\xe7\xa4\x7e\x2f\x5c\x90\xc4\x78\xf3\xbb\xfe\xc5\xbe\xe3\xef\x9b\xe2\x98\x55\x11\x18\x52\xa4\x14\x42\x89\x18\x82\xcb\x66\x4c\x9b\x5b\xf2\x88\xbf\xfa\xe7\x6f\x1d\x23\xb9\x8a\xa7\xa3\xea\x74\x36\xdf\x5e\x88\x69\x7b\x73\xc6\x2f\x57\xbd\x62\x2b\x0a\xa1\x44\x29\x04\x96\x18\x42\x59\xfc\xbc\xcc\x87\xf7\x5d\x3c\x5e\xbf\xde\x38\xc6\xa9\x39\x54\x5a\xd3\x5c\xb0\x2b\xdb\xde\xe8\xa5\x1c\xea\x9f\x35\x16\xb6\x4b\x0b\x81\x21\x2c\xa5\x10\xca\xc4\x10\x5f\xaa\x8e\xe3\x68\x85\x3f\xa8\x5c\x39\x53\xd2\xc7\xa4\x79\x33\x3f\x7b\x1b\x63\x64\x32\x83\xeb\x89\x3d\x07\x8f\x4a\x64\xc7\x3b\xdc\x46\x60\x48\x99\x52\x88\x63\x24\xa7\x7f\x97\x65\xd4\xad\x45\x70\x8e\x05\x2b\x77\x8f\x1d\xfb\xec\x70\xfc\xac\xef\xa5\x12\xfb\xcd\x0a\xdf\x30\x49\xcd\x65\x12\xcb\xb3\x02\x08\x0c\x1d\xa3\x14\xe2\x38\x31\x44\xd9\xdb\x65\xf5\xf7\x07\xb5\xa7\x2f\x9f\x12\x1b\x1a\xad\x5d\x17\xcc\x8b\x91\x97\x64\x3d\xde\x62\xbb\xe0\x20\x15\x1e\x97\x18\x03\x23\x30\x74\xfc\xdf\xdc\x01\x72\xfa\x06\x2f\x44\x2a\xc4\xf3\x39\xf2\x89\xbb\xaf\x5a\x64\x2e\x35\xd0\x69\x67\xd2\x81\x87\x75\x55\x2f\x91\x2f\x7f\x64\x1e\xcb\x09\x67\x89\x3e\x7b\xbf\x7c\x59\x40\x1c\x81\x21\x15\x4a\x97\xac\x4a\x0c\xd1\x6a\x36\x38\xe7\x4b\xcd\xc0\xaf\x60\x19\xc8\x70\xd4\x9f\xd1\x69\xe5\xb1\xfd\x54\x00\xed\xf5\x86\x9a\xaa\xfb\x92\x12\x62\x4e\xe8\xc6\xa9\x52\x0a\xa1\x46\x0c\xc1\x8a\xfd\xcd\x9f\x74\x4c\x72\x66\x5f\x1e\x07\xf5\xd7\xa6\xf0\x8c\x12\x01\x2f\xd5\x67\x55\x57\xe7\x94\x4b\x99\x8a\x3f\xfc\xf2\xd9\x83\xc0\x90\x1a\xa5\x10\x27\x88\x21\x84\x14\x6b\xcf\xf5\x42\x3d\x87\x63\xdf\xef\xec\x65\x3c\xbf\x39\x70\xe4\x5c\x97\x1d\x56\xd2\x9d\xdb\x45\xb8\x2d\xf7\x4f\x75\xd9\x75\x04\x86\x4e\x50\x0a\x71\x92\x24\xf5\xc2\x63\x6a\xc9\x21\x1d\x3d\x24\xc0\x76\x7d\xae\xaf\x40\x50\xd1\x4a\xdc\xdb\x59\x7a\x65\x6e\x8b\xc0\x4a\xbb\x98\x81\x04\xd7\x45\x04\x86\x4e\x52\x0a\x71\x8a\xc4\x6f\x9a\xdd\xfa\x56\xc9\x74\xc6\x77\x36\x73\x7b\x88\xef\xba\xee\x39\x7a\x98\x9b\xdd\x4e\xf9\x79\xe9\x2d\x03\x75\x99\xae\x92\x6e\xd4\xe1\x3d\x45\x29\xc4\x69\x62\x88\x03\x27\x1b\xec\x76\x26\x35\xc4\x75\x0a\x8b\x7d\x0d\xe4\xaa\x12\x65\x57\x69\x5d\x61\xd2\x6a\x2b\xa7\x51\x2d\x53\x1d\xfe\xed\xcc\x85\xc0\xd0\x69\x4a\x21\xd4\x89\x21\x42\x3b\xb8\x98\xb0\x1b\x8f\xdb\x54\xbd\x50\xdd\x65\xb4\x01\x7b\x2e\xde\x68\x4b\x7a\xcf\x53\xa6\xf8\x97\x5d\x9b\xb9\xcf\x0b\xcf\x9f\x45\x60\x48\xfd\xdf\x84\x88\x9c\x25\xc6\x0b\x91\x06\xf1\x7c\x16\x03\xeb\x2a\x2a\xda\xbf\xc5\x9f\x29\x7a\x31\x4e\x6b\xd4\x60\xd1\x23\xad\x5c\x42\xcb\x6b\xa5\xbd\xf7\xa5\x73\x7f\x4d\x4a\xd7\x05\x04\x86\x34\x28\x5d\xf2\x19\x62\x88\xc0\xa8\xaf\x9c\x09\x41\x2e\x71\x35\x6f\x16\x87\x5c\xdc\x6c\xf8\x98\x36\x94\xed\x9d\x46\xda\x22\x70\x0c\xe7\x96\xaa\xfe\xd0\xab\x21\x30\x74\x86\x52\x88\xb3\x24\xaa\x29\xca\x86\xc9\xd5\xb9\xc5\xd3\xc3\xf5\xc8\xb5\x0e\x61\x3e\xf9\x4b\xc5\xbe\x0f\xe5\x0f\x29\xb7\x1f\xba\x74\xff\xe8\xef\x3d\x25\xa8\x9c\x9e\xa5\x14\x42\x93\x18\xa2\x5f\x15\xb7\x21\xae\xbd\x8d\x9e\x25\x70\x32\xa1\x3d\x4c\x9b\x3f\x36\xa7\xe4\xc3\x4d\x79\x93\x03\x1e\xe5\x67\xd3\xea\xbd\x7f\x9b\x20\x30\xa4\x49\x29\xc4\x39\x62\x08\xd7\x4f\x6d\x16\x7f\xb8\x7b\xc5\xba\xd4\x39\x9f\x49\x9a\x5f\x70\xe0\x30\x1f\xbd\x97\xf0\x8b\xd5\x31\xf3\xc5\x80\xdf\x04\x63\x8e\x36\x02\x43\xe7\x28\x85\xd0\x22\xb1\xa7\xd3\x0d\xb5\x86\x46\x77\x9a\x2e\x72\x46\x53\x1d\xd9\xfe\x90\xc6\xec\x1d\xd5\xb2\xe3\x8f\xec\x94\x06\xc8\x5c\xae\xf7\xfc\x20\xaa\xc3\xb5\x28\x85\xd0\x26\x86\x80\x82\x20\x2d\x99\x08\x16\x23\x77\x0f\xc5\x18\xdf\x73\x6f\x32\xcd\xce\x2c\x08\x3f\xed\x4d\xb4\xf4\x6a\x0d\xeb\x78\xec\x3d\x81\x86\xd7\xda\x94\x42\x9c\x27\x86\x58\x28\x66\x35\x2b\xb6\xcd\x0f\xc1\x3d\x61\x17\x65\x9c\x18\x4b\x94\xaf\x39\x72\xba\xf4\xea\xae\x84\x6b\x1c\x59\x8c\xf9\x89\x65\x57\x10\x18\x3a\xff\x6f\x42\x44\xce\x47\xc5\x0b\x91\x0e\xf1\x7c\xf6\x07\x6c\xf6\xa3\x8a\x3b\x88\x35\x8b\x45\xb2\x23\xa9\xf3\xcd\x4d\xd4\xf7\x0b\x48\xce\x3b\x32\xdd\x54\xdc\xb2\xd9\xee\x81\x00\xea\xce\xe9\x50\xba\x64\x5d\x12\xd5\x74\x51\x45\xf6\xea\x0e\x91\xbb\x42\x1b\xe7\xe7\x0d\xbb\xbf\x6d\x72\x7d\x3b\x26\xf4\x32\x61\x4e\x8d\x47\x50\xad\xf3\x9a\x2d\x16\x42\x60\x48\x97\x52\x08\x3d\x62\x88\xe2\x22\x0f\xa3\xa9\xd3\x73\x4f\x1f\x08\xb2\x60\x5a\x87\xa8\x11\x98\x45\x5b\x77\x52\x5b\xf7\xe2\xd3\x70\xe9\x59\x2a\xb6\xc1\x4d\x08\x0c\xe9\x51\x0a\xa1\x4f\x0c\x11\xf0\xd9\xf3\x4d\xc9\xde\xe4\xeb\x81\x16\x3e\x51\x3e\x4d\x10\xdf\xfa\x77\x27\xd2\x4e\x14\xf5\x6c\x57\x7e\xd3\xe6\xc0\x4d\x1b\xb1\x03\x81\x21\x7d\x4a\x21\x2e\x10\x43\x9c\xfb\x73\xfa\xbb\x8f\x60\x57\xf5\xc7\x63\xcf\xc3\x8a\xd5\xe6\x9f\x94\xe0\xa2\x64\x22\xf6\xec\x77\x60\x89\xad\x80\x3a\x64\xd9\xd0\xc0\xf4\x02\xa5\x10\x06\xc4\x10\x70\xbe\x7a\x97\x60\xb8\x75\xd5\xf1\x08\x83\xb8\xac\xbd\xc8\x47\x07\xff\xb9\x57\xb9\x52\x4f\x3a\x94\xeb\xa5\x9b\x72\xaa\x7f\x4b\x23\x30\x64\x40\x29\x84\x21\x31\xc4\x23\x99\x22\x64\xa6\x3f\xd0\x2e\x54\xd2\xb6\x98\x47\x5d\x2f\x94\x27\x87\xdd\xed\xfc\xe5\xc0\xa3\x76\xe6\x62\xcb\x91\x97\x36\x6f\x44\x60\xc8\x90\x52\x88\x8b\x24\x69\x30\x29\x03\xe5\x4b\xeb\x38\x84\xbc\x87\x4f\x6e\x7c\xa7\xeb\xc5\xd1\xf6\xe9\x93\x5a\xa6\x40\xb9\x7c\x12\xae\xb4\x7b\x78\xf0\x89\x3e\x02\x43\x17\xff\x4d\x88\xc8\x45\x6f\x78\x21\x32\x22\x9e\x4f\x5b\x0a\xef\xe0\x9d\x89\x6c\x0b\x57\xed\x06\x31\xc5\xf0\x2f\xcc\xeb\xa5\x46\xd6\x73\x86\xd7\x6a\xb6\x8f\x9d\x7a\xcc\x6a\xa6\x2b\x83\xc0\x90\x11\xa5\x4b\x36\x26\xe1\x70\x23\x75\xaa\x40\x8e\x1a\xfd\xe4\x4b\x0a\x91\x3b\x2b\x72\xaf\x5b\xa5\x72\xe5\x6d\xfd\x55\x27\x76\x80\x87\xc1\x5a\xaf\xa0\x0d\xd5\x7e\xc6\x94\x42\x98\x10\x43\x74\xbd\x1c\x62\xb3\x54\xab\xce\xea\x64\xd9\x9b\x1a\x1e\x2f\x9b\x62\x6e\x5c\x54\xb2\x69\xf3\xce\xae\x5d\x6f\xdf\xdd\xe4\x9a\xd4\x41\xfd\x70\x13\x4a\x21\x2e\x91\x54\x43\xdd\x2e\x3e\x49\xad\x18\xae\x51\x9e\xaf\x6c\x28\x34\x78\xbf\xbf\xb7\x89\xb7\x47\x6c\x20\x3c\xbe\x38\x4f\x52\x61\xfb\x77\x36\x43\x04\x86\x2e\x51\x0a\x71\x99\x18\x42\xd6\xf1\x4d\x9a\xa9\x41\xd5\xd7\x16\xa9\x77\x3d\x11\x6d\x51\x74\x5d\x48\x90\xff\xe9\x89\x8b\x83\x9f\x9f\xd1\x2a\xf5\x7e\x58\xd4\x41\x60\xe8\x32\xa5\x10\xa6\x24\x5e\x41\x4e\x8e\x82\xd0\xa5\xfb\x91\x8f\x6f\x55\x2d\xf1\x35\xf1\x74\x30\xab\xf2\x6f\xc7\xa9\xde\xa7\xfe\xfc\x27\xc8\x9d\x7b\xdf\x3e\x1e\x04\x86\x4c\x29\x85\xb8\x42\x0c\x71\x7d\x9c\x6f\x5f\x5e\xc4\x41\xbf\xaf\x2b\x86\x06\x9a\x03\xed\x9c\x36\x95\x33\x96\x0f\x61\x19\x33\x5f\x8b\x8e\xa7\x37\xf9\x86\xd8\x10\x18\xba\x42\x29\x84\x19\x31\xc4\x4a\xe8\x07\x47\x6f\xd3\xaa\xb6\xb2\x1b\x22\xd9\x6c\x0c\x49\x9d\x5d\xd1\xed\x32\x53\x8b\x3b\x22\xd9\x4c\xa8\xb6\x05\x26\x7d\xb8\x86\xc0\x90\xd9\xbf\x09\x11\xb9\xbc\x06\x5e\x88\xae\x12\xcf\xa7\xb0\x94\x7d\x46\xf1\x97\xc3\x6d\x99\xbe\xaf\x34\x59\xfb\x4f\xba\xdc\x65\xfe\xf8\xe6\x98\x9a\xe8\x3d\xf7\xa4\x83\x57\xee\xa4\xff\x42\x97\x7c\x95\xd2\x25\x9b\x13\x43\xe4\xbd\x8c\x99\x38\x30\xf9\x46\x8a\xf6\x84\xdb\x9d\x0c\xb6\x7b\x5c\xef\xe3\xb3\xa3\xc7\xa9\xa4\x2a\x12\x0b\xe3\x2b\x1d\xe7\x52\xd0\x25\x9b\x53\x0a\x71\x8d\xe4\x28\x63\xb2\xf1\x46\xcd\x83\xe3\x02\x12\x7a\x71\x13\x26\x3b\x19\x6d\xbc\x4e\xa6\xcd\x68\xc9\x49\x72\x73\x88\xc8\x2e\xd8\x64\xae\xc8\x23\x30\x74\x8d\x52\x08\x0b\x92\x78\x19\x07\x2f\xbf\x36\xf4\x79\xfd\x9b\xe5\x55\x77\xcb\xbb\xfa\x73\xaf\x13\x8d\x85\x3f\x1a\xa7\x2d\x9d\x2c\xd0\xde\x6a\x77\xe7\x89\x1e\x02\x43\x16\x94\x42\x5c\x27\x29\xbd\x2e\xf9\xb6\xec\xb6\xbe\x67\x39\x74\xd4\xc3\x43\xf0\x91\x51\x78\xcd\x0b\xd7\xd1\xfb\xaf\xf6\x98\x5d\x11\xba\xfa\x4d\x5d\x7f\x99\x0e\x81\xa1\xeb\x94\x42\x58\x92\x38\x42\xb3\x01\xdb\xec\x54\x95\x14\x1c\x55\x65\xf2\x4b\x55\x62\xfc\xb2\x5b\x4a\x99\xcb\x11\x66\x2a\x09\x79\xde\x13\x82\xca\x67\xb7\x23\x30\x64\x49\x29\xc4\x0d\x62\x08\x9b\x61\x6f\xeb\x60\x2b\xf7\x9e\x93\xbb\x74\x3e\xaa\xc6\xbe\xee\x38\x34\xd7\x71\x66\xf6\xd3\xf8\xb8\x00\xc3\x81\xb1\x05\xc1\x22\x41\x04\x86\x6e\x50\x0a\x61\x45\x0c\x91\x95\x3c\x5a\xfd\xb8\xda\xb1\x66\xf9\x30\xa7\x43\x9b\xfd\xad\x67\x3e\xc8\x2d\x3f\xb3\x0f\x5c\xb3\xe7\x69\x35\x2c\x4a\xad\x53\x39\x11\x18\xb2\xfa\x37\x21\x22\x97\xf1\xc3\x0b\xd1\x4d\xe2\xf9\xb0\x9b\x77\x49\x78\xa7\x4b\x79\x72\x44\x9e\x18\x5a\x77\xef\x32\xd7\x27\x01\x41\xe7\xa3\xfa\x2c\x03\xaf\xe7\xf4\x5e\x17\x8e\x9e\x43\x5d\x88\x9b\x94\x2e\xf9\x16\x31\x44\xfd\xed\x85\x96\x63\x8c\x0e\xfa\x8e\x16\xb4\xac\x2b\xaf\x2d\x2c\xab\x1d\x27\x5c\x35\x5b\xd3\xaf\x75\x7e\x7b\xb3\x57\xf6\x8c\xc1\x31\x04\x86\x6e\x51\x0a\x71\x9b\x18\x22\xb8\x4c\xc0\xd8\xbf\x01\x13\xe2\xc5\x91\x7c\xac\x5b\xd2\x60\xe9\x82\xa0\xd4\x5c\xc6\xeb\xb3\xba\x2d\x8c\x1a\xd2\x85\x23\x8f\x34\x10\x18\xba\x4d\x29\x84\x35\x31\x44\xfa\xa3\x83\x62\x92\x6c\xbe\x3b\x27\x32\x3e\x9f\xf6\x89\x4c\xcd\xbf\x63\x68\xf8\x23\x43\xe2\x77\x88\x63\x53\x21\xe7\xce\x2f\x2f\x0f\x20\x30\x64\x4d\x29\xc4\x1d\x12\x63\x57\x73\x2d\xb6\x62\xf0\x8d\x6e\x1a\xf6\xa0\xd6\x9e\x9f\xfa\x1f\xef\xb8\xd9\x59\x8a\xab\x7c\x57\xaa\xf4\x1c\x7a\x6f\x5f\xd8\x83\x86\x5d\x77\x28\x85\xb0\x21\xa9\xc1\xae\x5b\x27\xa0\xdd\xb3\x45\xdc\xeb\xd4\x87\x54\xc1\x3f\xd0\xe7\x72\x65\x1e\xad\x10\x15\x53\xe5\x06\x16\x33\x59\xe6\x3d\x25\x28\xfb\xd9\x50\x0a\x61\x4b\x0c\xb1\x01\x09\x3f\x83\x19\xf9\xa0\x6d\xf4\xba\x65\x61\xd7\x0f\x6f\x3e\x99\x8f\x3f\x5f\xff\xc8\xaf\xd1\x79\xd7\x5d\x7e\xc5\xcd\x4f\x88\x1f\x81\x21\x5b\x4a\x21\xee\x92\x54\x09\x15\x07\xd7\xb2\x26\xc7\xa9\x0d\x6c\xdf\xb7\xec\x83\x1c\x81\xfd\x77\x7e\xa9\xd5\xb0\x3b\x12\xad\xad\x45\xf5\xe2\xea\x09\x45\x34\xec\xba\xfb\x6f\x42\x44\x2e\x17\x8e\x17\x22\x3b\xe2\xf9\x9c\xd9\x98\xf9\x54\xfd\x2d\x66\xd3\xd1\xd4\xe1\xc0\xb3\xf5\xcc\x9c\xbe\xf4\x95\x8a\xb6\xb1\x31\xf3\xd2\x5f\xee\xd9\xb1\xfb\xd6\x73\x20\x30\x64\x47\xe9\x92\xef\x91\x44\xfd\xb3\x3b\x1f\x50\x39\x5d\x1e\xbb\x5c\x7f\x4f\xe3\x61\xed\x8a\x9c\xfb\x3b\x39\x56\xf9\x28\xcf\xdb\x3c\x3b\x68\xcb\x4e\x36\x2a\x49\x22\x30\x74\x8f\x52\x88\xfb\xc4\x10\x45\xb9\xf9\x8b\xd9\x2b\xfd\x8f\xae\xdd\xf5\x1c\x92\x7c\xe8\x31\x67\xbb\x49\xfc\x13\xf7\x8d\xc0\xbd\x9b\x34\x99\x5c\xcd\xd2\x59\x51\x2f\xe5\x3e\xa5\x10\xf6\xc4\x10\xa2\xb5\x6d\x1b\x36\x4c\x9f\xfa\xc2\x9c\x40\x57\x3e\x56\xf0\xd6\xdc\xa4\xd7\xa4\xc2\xb7\xe3\x95\xc9\xba\xab\xcb\xd7\xaf\xf5\x8c\x51\x23\x30\x64\x4f\x29\x84\x03\xc9\x1d\x00\x2d\x1f\x87\x18\x0e\x11\xe3\x19\x97\xa6\xc2\x92\xfe\x50\xf6\xba\xd0\xc2\xb3\xaf\x47\xb9\xc7\xb4\x0d\x98\xd3\xd8\x53\x0e\xa1\x96\xc8\x81\x52\x08\x47\x62\x08\xaa\xb1\x07\x98\xfb\x4c\x2d\x5b\x53\xfb\xc4\xaf\x0e\x62\x5f\x44\xb1\x79\xf9\xab\xf6\x6c\xb8\xec\xe7\xaa\x9b\xab\x7f\xa4\x70\x93\x22\x02\x43\x8e\x94\x42\x3c\x20\x86\x90\x1a\x30\xcb\x52\x9a\x4e\x1d\xd7\xb3\x2d\x64\xd1\x4d\x8f\xf2\xed\xdc\x7c\xf8\x94\x91\xbb\xb0\x00\xaf\x09\x73\xd0\x83\x86\x1a\x54\x88\x1e\x50\x0a\xf1\x90\x24\x40\x38\xb5\xe3\x7b\x5a\x57\x4c\xc0\x3a\x9e\xab\x2b\x6f\x65\x7c\x68\x36\x2e\xac\xdb\x71\xd9\xf2\xf6\x4d\xed\x2f\xd4\x2c\x32\x97\x0f\x32\x22\x30\xf4\xf0\xdf\x0e\xeb\xc8\xdd\x20\x24\x39\xac\x4b\xe0\x8a\x28\x3c\x96\x1e\xc2\x9c\x75\x81\xef\x0a\x97\xc2\x56\x4c\x11\xdb\xe0\x67\x55\xad\x17\x88\x8c\xc1\xc5\xa3\x96\x2f\x22\xa1\xb5\xaf\x93\x70\x3a\x36\xf7\x28\x9b\x76\x9c\xb5\xbd\x2d\x23\xd4\xb8\x30\xb7\x58\x72\xdd\xb2\xb6\xd0\xb5\x62\x9d\xf4\x43\xc2\xd1\x42\xdd\x36\x6b\x1e\x0d\x56\xae\xf2\x18\xcc\xd8\x35\xfe\xc4\x05\x93\xa4\xba\x31\xce\x52\x6a\xf8\xc9\x54\x68\xdf\xb1\xeb\x0e\xdf\x75\x9c\x3e\xf9\xb1\xcd\xad\x6d\xbf\x3e\x39\x32\x1f\x97\xbd\x40\xaf\xfc\x8d\xc3\x2f\x84\x1a\x13\x2a\x7a\xbe\x2f\x7b\x28\xc7\xea\x52\x07\xcd\xb9\xa6\xe7\xf6\xbb\xd6\x9e\xeb\x79\xdc\x15\xa8\xe8\x98\xa8\xfa\xbc\xc7\x81\x8b\x73\x7f\xc2\x16\xb6\x78\xb3\x0e\x86\x7d\x8c\x33\xa2\x0d\x8a\xdb\x62\x0c\xe9\xec\xe1\xb5\xed\xd2\xbf\xf9\x1d\xb5\x5c\x5f\x93\xa5\x6a\xe5\xd3\xa8\xd4\x71\xf1\xbb\xf7\x66\xe9\xa0\x84\xf6\xcd\x54\xce\x8d\x95\x27\xd9\x4b\xfb\xd7\xce\xb5\xf5\xc8\xd4\xdd\x28\xe3\xb3\xbe\x37\xbf\x8a\xec\x31\xea\x1e\xe3\xde\x3c\xdc\x77\xf9\x78\x80\x98\xc8\xba\xa2\xbd\x45\x45\xf3\x0f\xdf\xad\xbd\x9d\x99\x66\x91\xe4\x18\xc3\xa6\x29\x6f\x32\xfe\xc7\x5f\x48\x9a\x85\x49\xee\xe0\x16\xb5\xfa\x84\x61\x97\xc5\x89\x63\xfc\x55\x6a\xda\x84\xc3\x3a\x72\x54\xc5\x6b\x32\x27\x92\x58\xfc\xc7\xc0\xfb\xc2\x87\xe9\xa6\x5b\x35\x37\x5c\x11\xd0\x7f\xcf\x50\x84\xe3\x68\xfe\x64\x26\xd7\xcc\x77\x50\x6d\x6a\x63\xa8\xc9\x3a\x04\x86\x9c\x28\xe5\x3b\x84\xc4\x6d\xcf\x63\x78\x7c\x2c\x51\xbb\x2b\x83\x77\xe5\xf2\xfa\x95\x6d\x93\x1b\x70\xdb\xf7\x3e\xc2\x48\x57\x0a\xe6\x8c\x7e\x4e\xdc\xea\xc2\x87\xc0\x10\x42\x29\x04\x8e\xa4\x84\x7e\xb3\x52\xed\x5e\x17\xac\x6f\x6b\x59\xff\xa5\x99\x72\xfb\x8f\xec\x39\xec\x38\x57\xcd\xae\x62\xef\xa2\xc7\x19\xfe\xa5\x25\x10\x02\x43\x38\x4a\x21\x9c\x49\x94\xe5\xd5\xe0\xef\x5a\xb8\xf1\x8f\xea\x1b\x53\x64\x8f\x89\x47\xca\x6b\x6e\x38\xda\x5c\xa0\x9d\x65\xf1\xfe\xbd\x4e\x05\xdb\x8a\x15\xaa\x66\x9c\x29\x85\x70\x21\x86\xc8\xd4\x8c\xd0\xcb\xbc\x7f\xe3\x69\xf3\xc8\xd8\xfd\x83\x87\x27\x5f\x7d\x7a\x38\xd9\x11\x60\xb1\x3e\xf3\x83\x03\x4f\xce\x0d\xa1\x59\x6d\x04\x86\x5c\x28\x85\x70\x25\x86\xb8\x56\xbc\x29\x62\xe9\x87\xc0\x45\x7e\xae\xf4\x4b\xae\x6e\x12\x8d\x66\x8e\xfd\x1d\xc2\xb6\x06\x49\x76\xb5\x57\x1e\xf8\x67\xb7\x19\x23\x30\xe4\x4a\x29\x84\x1b\x31\xc4\xa9\x8e\x21\xf5\xa8\xa6\x0d\x5e\x0e\x17\xd9\xa8\x26\xaa\x93\xbe\x77\xe6\xcc\xd4\xd1\xe5\xb5\xdc\x70\xcc\xa2\x7e\xb3\xa8\xb3\x8f\x0a\x81\x21\x37\x4a\x21\xdc\x49\x8a\xfb\xb3\x05\xfd\x70\x1c\x11\x25\xfb\x85\x94\xf3\x2d\xdd\x83\x93\xd9\x1e\xca\xc5\x0d\x6f\xe8\x35\x97\x5a\x4c\xbd\xb0\x79\xbe\x1d\x75\xcd\xdc\xff\xcd\x1d\x20\xa7\x6f\xf0\x42\xe4\x41\x52\x11\x75\xed\xde\x7b\xbb\x57\x63\xb7\x21\xec\x53\x4e\xbf\x00\xa3\x57\x6e\x87\x0c\x22\x7c\x73\xbe\xda\x1e\xf7\x3f\x7a\x29\xa5\xd7\xe7\x02\x02\x43\x1e\x94\x2e\xd9\x93\x18\x82\x6f\xa5\x9a\xb5\x3a\xa4\x4c\x70\x59\xd7\xfe\x9e\x4f\xf4\x42\xee\xbc\x9c\xf2\xad\x72\xd7\x62\xf9\x85\x5f\x1f\xc7\x02\x04\x73\x0f\x23\x30\xe4\x49\x29\x84\x17\x31\xc4\xe0\xe5\xf0\xc9\xcc\xfa\xa7\xdb\xe9\x2b\x99\x8a\xc5\x69\x26\x7b\xc6\xb6\x2c\x0d\x70\x37\x41\x4b\xaa\x4b\xcb\x2a\xb9\x65\xe2\xa8\x4f\xed\x45\x29\x84\x37\x31\xc4\xac\x52\x90\x9a\xcf\x84\x23\xeb\xfe\xe7\x8b\x46\x86\x63\xfb\x7e\xfb\xad\x73\x58\xea\x4b\x36\x8d\xc6\x64\xb3\xb4\xc9\x5e\xbf\xb1\x0d\x81\x21\x6f\x4a\x21\x7c\x48\xaa\x0f\xc2\x63\x83\x23\x1d\xff\xac\xdb\x77\xba\x92\x75\xaf\x73\x59\x9e\xd7\xc9\xfd\xa9\x62\x3b\x19\xaf\x15\x3d\x98\x65\x0e\xbb\x24\x82\x7a\x1c\x3e\x94\x42\xf8\x92\xdc\x04\x28\x2a\xf1\xb6\x8c\x7b\xd0\xc0\x5c\x47\x17\x24\xa9\x3e\xbe\xb9\x5a\xab\x23\xb6\xf6\x97\x48\xea\x4c\xca\x4c\xec\x06\xd3\x12\x51\x04\x86\x7c\x29\x85\xf0\x23\x86\xb8\xf7\x3d\x61\x20\xc8\xc2\x87\x7f\x47\x68\xd6\x2e\x35\x6b\x9f\xb9\xde\x68\x2a\xcd\x17\x29\xaf\xaf\xa9\xaa\x9c\xe9\x5d\xaf\x17\xb9\x0f\x81\x21\x3f\x4a\x21\xfc\x89\x21\xfa\x16\x37\x6b\x1d\xd8\xc6\x7c\x7e\xe6\xee\xdd\xb8\x11\xec\xbc\x8a\xf2\xb5\x4d\x0f\x3e\x73\x15\xc7\x58\x37\x68\xe4\x60\x99\x76\x9d\x40\x60\xc8\xff\xdf\x84\x88\x9c\x25\xc6\x0b\x51\x00\xf1\x7c\x96\x39\xd5\xf2\x26\xd3\x9e\x9a\x7c\x9a\x8f\x73\xd0\xe2\x79\x80\x4b\xb0\x48\x3c\x5b\xf4\x4d\xd9\xa3\x72\xe5\x7b\xd9\xd0\x41\x5b\x94\xc3\x03\x28\x5d\x72\x20\xc9\x31\x57\xd3\x83\xed\xb7\xa2\xac\x5e\x68\x96\x58\x09\xbb\xf6\xc5\x07\xff\x72\xfa\x32\x1d\xe4\xa4\xb3\xff\x06\x53\x42\xa5\x37\x53\x81\x04\x02\x43\x81\x94\x42\x04\x91\xd4\xd0\xef\x2a\xa2\x33\x15\xb9\x52\x2c\x74\x9c\x36\xae\xf1\x8c\x52\xc2\x32\x9d\xde\xf5\xb2\xbe\x86\xa4\x4d\x37\x0e\xdb\x8d\xe5\x2c\xb1\x23\x30\x14\x44\x29\xc4\x23\x62\x08\xbd\xcd\xe7\xae\x7c\xa0\xa1\x92\xbc\xea\xa6\x6f\xfa\xa6\x7d\x0e\xbb\x99\x99\x26\xd7\xf0\xd0\xb7\xdf\xc3\xcb\x22\x7a\x50\xaa\x15\x2b\x02\x43\x8f\x28\x85\x08\x26\x86\xb0\x1c\xe4\xe2\x29\xfc\x72\xb3\xc6\xf3\x70\x44\xd4\xf3\xf7\xdf\x4f\x87\xf2\x3f\xbc\xbc\xae\x6f\xf6\x71\x6b\x29\x7b\x38\x8e\x6f\xff\x11\x04\x86\x82\x29\x85\x08\x21\x86\xd8\x65\xd4\xab\x6c\x54\xa1\xeb\x20\x67\x36\x9e\xbd\x7c\xfd\xd7\x83\xcb\x27\x1d\xbf\xde\xe6\x77\x08\x76\xcf\x10\x7f\xc2\x60\x70\x7b\x3d\x02\x43\x21\x94\x42\x84\x92\x44\xf0\x13\x9f\xf4\x07\xd9\x47\x43\x87\x1e\xfa\xff\x09\xbb\x5c\x6d\xf8\x46\xc1\xce\x6e\x94\xc6\xd2\x3b\x70\xcc\x55\x56\x49\x62\xd3\x46\x04\x86\x42\x29\x85\x78\x4c\x0c\xf1\x61\x53\x03\x9b\x4e\x50\x9f\x1c\xd5\xf4\xc6\x4b\x87\x32\xf5\x0b\x4c\x14\xf6\x7f\x13\xad\xbf\xad\x78\xdb\x5e\xed\x7c\x93\x21\x07\x4a\xa8\xc7\xff\x26\x44\xe4\x7c\x54\xbc\x10\x3d\x21\x9e\xcf\x33\xc6\x97\xcd\xfb\x5c\x55\x1d\xe3\x4e\x5d\x5f\xaf\x63\x87\x1d\x7f\x77\x5d\x52\xf1\x91\x09\x6b\x62\x52\xd3\xf7\x08\xfd\x73\x01\x06\x08\x0c\x3d\xa1\x74\xc9\x4f\x89\x21\x1a\x55\xb5\xc5\x18\x94\x33\x7c\x0f\x54\x42\xb7\xef\x4a\x47\x84\x6e\x6f\x52\x6f\x1f\xd5\x96\x13\x0d\x7a\x90\x10\xef\xdb\x5f\x80\x45\x60\xe8\x29\xa5\x10\x61\x24\xb7\xb9\xa0\xe3\xaf\x3a\x3f\xb7\xa4\x3e\xea\x78\xd2\xee\xc5\x00\x8d\x9e\xc3\x54\x29\x7d\xb6\x58\x96\x14\xda\xc5\x38\xa8\x13\xe4\x87\x6e\x5c\x18\xa5\x10\xcf\x88\x21\x98\xd4\xe2\x6d\xd6\x09\xcf\x0a\x2b\xba\x28\xbc\xfd\x73\xd8\x2b\x51\xc7\xf0\xe9\x76\xac\xe0\xfd\xae\xa2\x99\xa7\x2f\x2e\x94\xb2\x08\x21\x30\xf4\x8c\x52\x88\x70\x62\x88\xad\xee\x76\x56\xe2\xfe\xaf\x0f\x1c\x94\xdd\x3b\xf7\xf6\x66\x5e\x89\x03\xd3\x3a\x63\x85\x32\xd7\x89\x6f\x3e\x47\xef\x08\x39\xee\x40\xa3\xc6\x70\x4a\x21\x22\x88\x21\xc4\x54\xef\xc9\x78\x7d\x95\x48\x32\xa4\x39\xe3\x17\x29\x14\x34\xc1\x34\x93\x97\xe1\xfb\x2e\x31\xb4\x25\xdd\xce\x14\x3b\x7e\x91\x09\x81\xa1\x08\x4a\x21\x22\x49\x8a\x5f\x72\x03\x13\xcd\x69\x92\x5f\xc8\x58\xdf\xf9\xfa\x90\x77\x4e\xb6\xdb\xeb\x18\xf7\x85\xf3\x4b\x0f\x37\x64\xa7\xbc\x63\x59\x28\x91\x43\x60\x28\x92\x52\x88\xe7\xc4\x10\x82\x1b\x65\x9e\x0c\x9e\xb9\x2f\xa0\xa6\x43\x77\xa0\xe6\xcd\x72\x9a\xd0\x75\x0b\x05\x5f\x97\x3b\xf2\x89\xdd\xc7\xf8\x53\xbd\x43\x0e\x22\x30\xf4\xfc\xdf\x84\x88\x5c\xf4\x86\x17\xa2\x28\xe2\xf9\xb4\x9f\xf9\x78\xb1\x22\x9a\x75\xdf\x9f\x83\xe6\x7b\xa2\xb2\x0e\x5c\xfb\x43\xbf\xdf\xb7\x21\x69\xfc\x13\x53\xad\x79\x66\x8f\x55\x98\x29\x02\x43\x51\x94\x2e\x39\x9a\x18\xc2\x7e\xa3\xa3\xc2\x0d\x96\x29\x5a\xaf\xd3\xd1\x13\xdc\xf4\x56\x03\x59\xb1\x8a\x92\x1a\xdd\xc7\xb9\x25\x12\x05\x4d\x45\xda\x14\x4f\x21\x30\x14\x4d\x29\xc4\x0b\x62\x08\x84\x5a\xfa\xfd\x62\x86\x83\x16\x7d\xdb\xc0\x06\xbb\xe0\x9d\x0a\x57\x78\x33\x85\xf2\x83\x0f\x21\x65\xf3\x13\x8f\x74\xfb\x05\x8f\x23\x30\xf4\x82\x52\x88\x18\x12\xa7\x14\x63\xa7\x2e\x96\x40\xc5\xc9\xd0\x70\xdd\xe2\x35\xa3\x4d\xef\xb9\x77\x6c\xaa\xae\xc5\x9a\x73\xf6\x83\x5e\xbf\x0e\x7e\x56\xd3\x42\x60\x28\x86\x52\x88\x58\x92\xc2\xa8\x39\xe6\x8d\x75\x47\x2d\x15\x3e\xd4\x5c\x5f\xcf\xb9\xdd\x46\x5b\xe9\xf1\x76\x31\xdd\xa7\x2e\x52\xdd\xc3\xde\x23\x3a\x4a\x5c\x8c\x08\x0c\xc5\x52\x0a\xf1\x92\x18\xc2\x63\x50\x81\x6b\xc4\xa4\x8c\xe6\x64\xd9\xcb\x60\xe5\xad\xfc\xbf\x4f\x9e\x8f\x34\x56\x5e\x87\xa5\x2f\xee\x9a\xd8\xb7\xb0\x4b\xe4\x10\x02\x43\x2f\x29\x85\x88\x23\x86\x98\xe1\x73\xfa\x45\xb3\x89\x43\x35\x6c\x05\x23\xf7\xf0\xd5\x55\x2b\xe5\x63\x85\x41\xbc\xbf\x8f\x9a\xee\x66\x8b\xd4\x36\x98\x50\x42\x7d\xad\x38\x4a\x21\x5e\x11\x43\x18\x65\x66\xa5\x2f\x9a\x99\x30\xc9\x1c\x7b\xbb\xef\x3a\xe7\x24\x5d\xb0\xf2\xfe\x66\x6c\x4f\x01\x73\xcf\xc4\x43\x57\x89\x2f\xb1\x9a\x08\x0c\xbd\xfa\x37\x21\x22\x97\xd7\xc0\x0b\x51\x3c\xc9\xb5\xb7\xda\x38\xfb\xfd\xc2\x1f\x5c\xf3\x32\xdb\x35\xbf\x97\x33\x6d\x98\x1f\xc4\x5d\x38\x72\xd8\xf2\xe6\xd4\x13\x4f\x31\xfd\xd6\xd3\xcc\x08\x0c\xc5\x53\xba\xe4\x04\x62\x88\x1d\xf3\xbe\xee\x83\x57\x8c\xde\x56\x68\xcd\x9d\x4d\x63\x2d\x0e\xf5\x49\x10\xcf\x90\xd0\xf2\x15\xc9\xa7\xab\xae\xd2\xfa\xfd\x48\x0f\x81\xa1\x04\x4a\x21\x12\x49\xa8\xaa\xa7\x3f\xfb\x9e\xbe\x22\x60\x50\xe2\xcf\x6d\x97\xa9\x56\xdd\x0f\x1a\x8d\x8b\x1d\x8c\xe7\x59\x0e\x2d\x2e\xcd\xdd\x2b\x74\x32\x47\x60\x28\x91\x52\x88\xd7\x24\x7e\x6f\xec\x98\xd7\x3b\x3a\xe6\x4f\xe7\xad\x66\x35\xa0\xa7\xae\x45\xb5\x2a\xb6\x03\x47\xfb\xef\x4e\x6f\x79\x37\x06\x1f\x9a\x50\x47\x85\xe8\x35\xa5\x10\x6f\x88\x21\x98\x4f\x5e\x4a\xf9\xf6\x6e\xfc\x09\x67\x07\xdd\x42\x77\x92\xe8\xef\x56\x95\x1f\x96\x32\xf7\xb4\xf7\xf9\x84\xcf\x84\x5a\x5c\x98\x53\x40\x60\xe8\x0d\xa5\x10\x6f\x89\x21\x6e\xec\xbc\xe2\xc4\x35\xfa\xa3\x96\xeb\xc7\x3c\xc3\x1b\x1e\xd5\x7a\x25\x51\x37\x61\xc5\xae\xec\x2f\x56\x95\xe1\xb3\x2f\x62\x1d\x76\x21\x30\xf4\x96\x52\x88\x24\x12\x85\x56\x77\x3c\xfb\xda\xee\xd4\x2f\xb4\x1e\xb4\xa9\xc2\x9b\x9e\xc0\x0f\x83\x1a\x8e\x8f\xd0\xf7\xe8\x14\x1d\x5a\xd7\x6c\x24\x66\x8d\x1a\xbb\x24\x4a\x21\xde\x91\x5c\xfc\xd0\xb4\xbc\x32\x77\x86\x21\x48\x2f\xf6\x0a\x5d\x84\x2e\xff\x51\x86\x70\x1d\x26\xf6\x67\x41\x4b\x53\xc5\x46\x50\xf7\xec\x63\x5e\x04\x86\xde\xfd\x9b\x10\x91\xcb\xf8\xe1\x85\x28\x99\x78\x3e\x6c\x3b\x0d\x6b\x8a\x27\xbf\x65\x3d\x2d\x15\x67\xb1\x51\x77\x2c\x72\xf8\xda\xbf\x2b\xae\x4e\x4d\x8f\xc7\x3c\xba\xd7\xfb\x84\x96\x3a\x02\x43\xc9\x94\x2e\x39\x85\xe4\x0a\xc7\x3d\x5d\x85\x65\xcf\xb9\x2b\x82\xac\x8d\x6e\x7a\xcf\xce\x0a\x3d\xfa\x59\xad\x19\x1a\xda\xe7\x1f\x70\x7e\xe3\xd4\x3d\xd9\x00\x15\x04\x86\x52\x28\x85\x48\x25\xa9\x65\xbe\xfc\x38\x63\xec\xfc\x0f\xab\xc2\xfb\xe7\x6a\xde\x8b\x0a\xdd\x8e\xe1\x65\xfa\xc4\x51\xdc\x30\xec\xf9\xfd\xd9\xb4\x67\x5c\xeb\x39\x04\x86\x52\x29\x85\x48\x23\x86\xb8\x8f\xc9\xa2\x7a\xcd\xe7\x44\x1b\x6a\x78\xd3\xfa\xfd\xc0\xb2\x68\xfa\x84\xe2\xa6\xe1\x3d\xca\xc8\xf7\xe9\x3d\x5b\xd6\x71\xb8\x28\x21\x30\x94\x46\x29\x44\x3a\x31\x44\x4b\x56\x72\xd9\xa4\x49\xd6\x5c\x73\x4b\xb5\xcc\xae\x8a\xd0\x19\xe1\x2b\x7b\x7d\xcf\xbf\x2b\xd9\xfd\x87\xf7\xa9\x34\xf5\x46\x31\x35\x04\x86\xd2\x29\x85\x78\x4f\x92\x3a\xbb\x8e\xb5\xbb\x6f\xaa\x76\x32\x45\x31\x20\x4e\xbd\x43\xa0\xf7\x9c\xc9\x27\x7d\x5e\xf5\x20\xee\xe1\x6b\xc1\xbb\x5b\xad\x05\xb6\x23\x30\xf4\x9e\x52\x88\x0c\x62\x88\x9f\xb7\x18\x9e\x46\x9e\x2c\xa5\xaa\x8e\x1c\xf9\x7e\xb3\xe3\x89\xff\x75\xab\x75\x4b\x2f\x39\xf3\x83\x84\xc6\x3b\x15\x7f\xd3\x47\x98\x20\x30\x94\x41\x29\x44\x26\x31\xc4\x96\x72\x88\xe3\x42\x97\x61\x8b\xc8\x8e\x03\xa5\x8f\xf3\x27\xaa\xf7\x0c\x06\x97\xbf\xf3\x17\x56\xb8\x9a\x1d\xe4\x5f\xfc\xee\xbb\x2a\x02\x43\x99\xff\x26\x44\xe4\x72\xe1\x78\x21\xca\x22\x9e\x8f\xa4\x43\x2c\x8f\xeb\x89\xb8\x3a\x9e\xa3\x9b\x16\x87\xd3\x8a\x85\x9f\x1b\x3a\x0f\x98\x1c\x91\xa8\x9e\x2f\x79\xf6\x2c\x4a\xa3\x0d\x65\xbf\x2c\x4a\x97\x9c\x4d\x0c\x91\xfc\xda\xf3\xa3\x54\x92\x67\x62\xa4\xd4\x0b\x05\x7d\xb1\xed\x7d\x2a\x61\x37\x4f\x6f\x7d\x57\x7e\x70\xd3\x92\xba\x68\xe8\x66\x15\x7d\x04\x86\xb2\x29\x85\xc8\x21\x31\x13\x97\x1b\x6f\x95\xb0\xb4\xde\x36\x77\x89\x67\xe1\xb0\x69\x4f\x4f\xbd\x68\xf4\x8e\x1e\x53\x75\x3b\xab\x7c\x83\x49\x33\xf5\x16\x5d\x04\x86\x72\x28\x85\xc8\x25\x86\xa0\x86\x5d\x47\xae\xbc\x72\x9b\x6f\x1c\x7c\xc8\xa5\xf0\xc5\xf9\xe0\xc9\x2b\x0f\x1d\x16\x9d\x5d\x78\x54\xb7\x0f\x7c\xdf\xbb\xd4\x26\x81\xc0\x50\x2e\xa5\x10\x79\x24\x07\xa7\x6a\x8f\x4c\xc6\xa3\xa4\x76\x5d\xbf\xbe\xed\x4e\x99\x78\xd2\x33\xa5\xde\xc8\xcb\xeb\xc7\x35\xdd\x9b\x99\x17\xf2\x35\xce\x66\x5a\x21\x30\x94\x47\x29\xc4\x07\x62\x88\xc9\x44\x5a\xf9\x78\xa9\xc1\x0c\x66\x98\x46\x18\x82\x2d\x4e\xbc\x35\x0f\x61\xf1\x3d\x56\xd3\x59\xc4\x3a\xb5\xfd\x4e\x93\x17\x37\x02\x43\x1f\x28\x85\xf8\x48\x52\xaf\xca\x16\x73\xa0\xc3\xe7\x2d\xcd\xe8\x75\xb3\xe3\x15\xf9\x9d\x12\x9f\xe4\x5b\xd8\x87\x38\x97\xef\x7f\xfc\x9c\xe8\x70\xf6\x80\x2e\x1a\xd9\x7d\xa4\x14\x22\x9f\x18\xa2\xe7\x23\xb5\xb6\xe8\xed\xdd\xe7\x9c\xcf\x1e\xd4\xef\xd3\xfb\x24\xbe\xa3\xcd\xbf\x5b\x67\x5d\x9f\xe5\x68\x06\x83\x32\x4f\xe9\x90\x36\x02\x43\xf9\xff\x76\x58\x47\xae\x87\x27\xc9\x61\x9d\x65\x81\xe1\x8d\x20\xc7\x33\xaf\x8f\xaa\xcb\x62\x75\x7f\x46\xba\xbd\xa4\x62\x36\x70\xd0\x6a\x6f\x34\x78\x00\x6d\xbc\x6b\xc3\x3e\xb1\xe6\xd1\x39\x0d\x33\xeb\x51\x6b\x9f\x0f\x8b\xed\x8c\x47\x77\xd3\xd5\xec\x09\x3d\xd1\xcc\x15\x30\x9b\xa6\x76\xdf\x9a\x53\x2b\x2c\x27\xfe\xda\x9a\x47\xb7\xf5\xe8\x56\x4c\x07\xb5\xc8\xdc\xe0\xd5\x29\xb4\xf9\xca\x64\x5b\x30\x5f\x31\x91\x85\x48\x7f\xbf\xb7\x14\x12\xbe\x28\x57\xb7\xf6\x04\xae\x73\x61\x69\x38\xdc\xcd\x23\xa9\x47\xa9\x48\x2c\xea\x52\xf6\x8b\xa8\xae\xe2\x6d\x1a\x4d\xf2\xe7\x15\x6c\xfe\xb4\xdc\xfe\x31\x42\xbd\xb6\x99\x70\x13\xce\xf0\x11\xdd\xcb\x67\x07\x0e\x5b\xef\xff\x6a\x1e\x72\x7b\x9a\x99\xda\x86\xc1\x57\x3d\x8c\x3d\x83\xa3\xa4\xf1\xd3\xc7\xef\x6b\x1e\x3d\x96\x2f\x6b\xf3\xd0\xe8\xe0\x23\x9c\x12\xfd\x51\xbf\xf7\x3f\xec\x19\x1b\xa8\x19\x58\xf6\x8f\x65\x69\x9e\xb7\x64\xff\xce\xc4\xb5\xb6\x95\x2a\x6f\xe5\xb5\xc3\x05\xa2\xfb\xd7\x89\x7c\xdc\xfe\x32\x63\x83\x4d\xff\x91\xf1\xdc\xad\xe2\xcf\xdb\x96\x95\x7f\x72\x68\xf8\xde\xb0\x38\xb2\xb6\x5f\x6d\x24\x8d\x52\x91\xfd\x4d\xef\xda\x72\xa9\x73\xc3\x3a\x31\xa7\x8f\x2f\xb1\x28\xd7\x6d\x11\x1e\x2b\x3c\xed\xe9\x63\xad\xb9\xfb\x04\xe1\xb0\x8e\x1c\x55\xf1\x9a\xac\x80\xe4\x1c\x7a\x43\x44\x74\x75\x6b\xf1\xd6\xdc\xb8\xbb\xf4\xdb\x06\x23\x36\x5c\x1e\xc8\x6f\x17\x16\x18\x3d\x7c\x66\xd6\xfb\xa7\xa1\x60\x9e\x21\x02\x43\x05\x94\xf2\x5d\x21\x89\x0e\x68\x4d\xfd\x19\xc6\x09\xb7\xee\x64\xd5\xb8\x10\x76\xe3\x4e\x68\x0a\xad\x64\x45\x2b\xa3\xa8\xd8\xad\x59\x91\xf5\xbd\x85\xdf\x51\x43\x5a\x48\x29\x44\x11\x49\x6e\x3b\x29\xfb\xb0\x44\x1c\x9c\x8c\x0d\xf3\x51\xa5\x72\x09\x29\x62\x0f\x64\x6c\x37\x35\x29\x16\xd4\x52\x9f\x39\x9b\x3d\xdf\x4d\x85\xc0\x50\x11\xa5\x10\xc5\xc4\x10\x26\xf5\x18\xe6\x45\xe5\x23\x0b\xb4\xdb\x7c\x6b\xc7\x7c\x2f\x6c\xbd\x35\xcc\x22\x5d\xab\xc2\x51\xf1\x4d\xb8\xe1\x5e\xe4\xd4\xf1\xdb\x08\x0c\x15\x53\x0a\x51\x42\x72\xe4\xf8\x39\xea\x94\x74\x16\x8f\xa7\xca\xd4\xaf\x86\x87\x81\x69\xe5\x39\xc3\x8d\xde\x5d\x82\x07\xe7\xd2\x2b\xe4\xf9\x5a\x94\xcc\xf7\x21\x30\x54\x42\x29\x44\x29\x31\x84\x93\x94\x32\x0f\x6f\x79\xb1\x53\x55\xc7\x82\xfe\x7d\x73\xd8\x33\xae\xbe\xd8\xab\xcb\x86\x5b\xf0\x83\xb4\xf3\xed\x8a\xda\x3a\x69\x04\x86\x4a\x29\x85\x28\x23\xb9\xcf\x90\xb9\x7e\xf8\xf0\x49\xb8\x81\x49\x37\xe3\xc5\x68\x8a\x98\xc1\xb3\xa5\xdd\xb2\x5e\xe7\x11\xcb\xfa\x77\x1c\xc5\xdb\xa4\x84\x58\x11\x18\x2a\xa3\x14\xa2\x9c\x18\x22\xc9\x5a\x7f\xee\x77\xdc\x9b\xde\x5f\x6c\x8c\xd7\x31\x4f\xd9\x5c\xfb\xe7\xe7\x59\x07\xc6\x78\x7a\x5c\xb8\x82\x54\x25\xdb\x20\x34\x4a\x2b\xff\x37\x77\x80\x9c\xbe\xc1\x0b\x51\x05\xf1\x7c\x4e\xcb\x45\x1a\x86\xf8\x5c\xdb\x7e\x72\x63\xb7\xe0\x41\xa4\x6c\xd8\xb0\x70\xdf\xb9\x0b\x61\x75\x0c\xdd\xeb\x0f\xe0\x04\x0b\x8e\x58\x22\x30\x54\x41\xe9\x92\x2b\x89\x21\x06\x6e\x28\xfc\x4c\xb1\x65\x1a\xe3\xd0\xdc\xca\x72\xa4\xed\xf8\xb8\x61\xc9\xd0\x3e\x3d\x81\xea\x34\xde\x3c\xdd\x50\x39\x73\xa3\x9b\x08\x0c\x55\x52\x0a\x51\x45\x0c\x31\x91\x6c\x7c\x82\x56\x84\x35\xe0\xb0\xe7\xdb\x66\xba\x3c\xb7\x1d\x5f\xdf\xf2\x9c\x2a\x0d\xdd\xa1\x73\xf8\x90\x85\xc9\xb7\x7b\x83\xa8\x09\xaa\xa2\x14\xa2\x9a\x18\x42\xf7\xaa\x0f\xd5\x6f\xcb\x6f\xbb\x52\x03\x59\x95\x4e\x6b\x2a\x2e\xdd\x8f\x67\x09\x7b\x6e\x92\xed\xf5\x89\x5f\x5a\x63\x52\x67\xe9\x38\x02\x43\xd5\x94\x42\xd4\x10\x43\xc8\x5d\xa4\x9a\xe8\xdd\xf6\x74\xb0\xc2\x35\x8d\xcb\xc9\xdf\xc3\xd5\x8f\x8a\x9b\x6e\xe5\x9c\x6a\xeb\xc2\x0e\x8d\x2d\x6d\x43\xa2\xd6\x08\x0c\xd5\x50\x0a\x51\x4b\x0c\xf1\x3c\x3e\xb8\xf9\xfe\xe6\x1d\xc1\x42\xb5\x0d\x17\x1d\xfb\x2f\x3f\x39\xfc\x9c\x6b\x04\xc3\x71\xff\xa3\x10\xce\x2e\xd8\x5c\x51\xc5\x0c\x81\xa1\x5a\x4a\x21\x3e\x11\x43\xfc\xb0\x5f\xb7\x85\x37\xef\x61\x0d\xec\x75\xbe\x5e\x51\x61\xef\x8f\x73\x57\x82\x7a\x78\xd5\x43\x7a\xc5\x04\x2c\xff\x58\x6e\x4d\xe1\x41\x60\xe8\x13\xa5\x10\x75\xc4\x10\x42\xbe\xa9\x31\xf6\x47\xb6\x64\xce\x7d\xe6\x98\x52\x39\x22\x7d\x4a\x65\xbc\x5b\x21\xd3\x7a\x63\x8b\xb8\xc2\xfe\xe4\x21\x1e\xe4\x00\x02\x43\x75\xff\x26\x44\xe4\x2c\x31\x5e\x88\x3e\x13\xcf\xe7\xf3\xd7\xbd\x5e\x67\xaf\x2a\xcc\xe4\xd9\xdb\x06\xbf\x66\xec\x9d\x1e\xde\x22\x5c\x94\xb3\x39\x7a\x3e\xb7\xd3\x10\xae\x9f\xee\x40\xe7\xf3\x99\xd2\x25\xd7\x93\x08\x11\x15\x6e\xef\xcc\x49\xa9\xb3\x71\x61\x71\x0c\xe3\x37\xbd\x37\xc5\xf1\xc5\x2d\xc4\x18\x6f\xd3\xde\x5a\xb5\xcb\xea\x27\xbb\x28\x6a\xec\xea\x29\x85\x68\x20\x86\x88\xff\x9e\xfa\xc7\xa7\xba\x4e\x21\x7b\x45\x59\xb6\x88\xfb\x8c\xfe\x51\xb7\xb3\x0c\xce\x2e\x9d\x5b\xb5\xd3\xf9\x45\x4e\x55\x0d\xd0\x23\x30\xd4\x40\x29\x44\x23\x31\xc4\x1f\xf3\x9f\x16\x8f\xc6\xa8\x85\x90\xdf\xd3\x1b\xd7\x99\xf6\x36\xed\xce\x4a\x68\xd5\xd1\xae\xd8\x24\x9f\xeb\xf9\xff\x38\xfb\xeb\xb0\x28\xbe\xff\x7f\xfc\x67\x96\x59\x4a\xa4\xa4\x0e\x21\xd2\x21\xa8\x74\xa8\x20\x4a\x49\x2a\xad\x34\x52\x12\x52\xa2\xa0\x22\x8c\x22\x20\x8d\x08\x28\xa0\xd2\xdd\x22\x28\x2d\x08\x82\x48\x48\x2a\xd2\x25\x12\x22\x21\x82\xd4\xef\xe2\xf3\x7d\xf3\xba\x74\xfe\xe1\x37\xcf\xff\xcf\x75\x3d\x76\x67\xf7\x7e\xe6\x71\xce\x99\xdd\x1b\x4f\xf8\x81\xc3\x02\x08\x20\xec\xc2\x5a\xa2\xfb\xdf\x12\x2e\xe5\x22\xaa\xe9\x16\xdb\xd7\x1e\xd6\xe4\x7e\x1c\xc2\x1f\x76\xdb\xb1\xb5\x61\xf2\xf6\xa4\x8c\x3d\x33\xcf\x4a\x59\x94\x3d\x7a\x11\x01\x84\xdd\x58\x4b\xf4\xa0\x7e\xcf\x10\xfd\x44\x1b\xf7\xb8\x67\x71\xe6\x65\xed\xa7\xb4\x73\x29\x6f\x2d\xf0\x7a\xc3\xcc\xcb\x01\x94\x09\x23\x8c\x79\x92\x4a\x34\x12\x08\x20\xec\xc1\x5a\xa2\xf7\xdf\x12\xf2\x25\xb5\x69\xa2\x14\xf8\x2b\x8c\xa5\x99\xef\xf9\xcf\xbc\x4c\x7c\x64\x57\xd0\xe2\x2c\x78\x2e\xc0\xcd\xab\x03\xaf\x30\x11\x23\x87\x00\xc2\x5e\xac\x25\xfa\xfe\x2d\x31\x5b\xe8\xda\x78\x82\xf5\x63\x7b\x76\xd2\xbc\xa5\x6f\x1d\x31\xc3\xb2\x4b\x69\xe8\xe3\x8a\x07\x1d\x4a\xb9\xcc\x0e\x47\x9c\x82\x84\x11\x40\xd8\xf7\xdf\x42\xb4\x5f\x8f\xfa\x7f\x21\xfa\xfc\xef\xeb\xb9\x20\x30\xa6\xce\x35\x42\x4e\x3f\xdb\x5f\xab\x16\x35\xfc\xad\xbd\x8a\x31\x28\x7a\xe1\x1b\xe9\xfc\xab\x96\x82\x28\x02\xf7\x0b\x24\x08\x20\xfc\x8c\xf5\x2d\x7f\xf9\xb7\x44\x45\x66\xcf\x40\xa0\x40\x69\xac\xea\x27\xcb\xb9\x73\xab\x3e\x23\x02\x9e\xf9\xdf\x2a\x64\x91\x28\xe9\xfb\x7e\xe3\x3e\xae\x55\xbb\x8d\xd0\x17\xac\x25\xfa\xff\x2d\x41\x56\x10\x4e\x32\xd4\x5e\xa3\xb8\x28\x68\x75\x9a\xa4\x28\xc4\xf0\x8a\x61\x51\xdc\xb5\x13\xba\xc4\x99\xf1\x1e\x3a\x4a\x82\x76\xbb\xdf\xf0\x7e\xac\x25\xbe\xfe\x5b\x22\x57\x40\x12\x19\xe7\x4e\xe6\xb4\xbd\x86\x2f\x52\x5a\x10\x3d\x5a\x7e\x5a\x42\x95\x32\x4e\x58\xe0\x88\x73\x2a\xad\xbe\x3d\xb5\x23\x02\x08\xbf\x62\x2d\x31\x80\x3a\xb7\xcf\xb3\x7b\xe9\x33\xf9\x2b\x2a\xe3\xe3\x95\x4b\x0d\x94\x62\x95\x3d\xf6\x8b\xac\x24\x5b\x37\x3f\x29\xce\x36\xcf\xb2\x12\x35\x68\x23\x80\x70\x00\x6b\x89\x41\x54\xaf\x25\x3a\x75\x5e\xa2\x49\x5b\x83\x4b\xf7\xdd\xb0\x9d\x37\x37\x8f\x96\xa2\x71\xa8\xcf\xf3\xf0\xba\x0c\xb1\xaf\x11\xf5\x03\x4f\x77\xd7\xbe\x83\x58\x4b\x0c\xfd\x5b\xa2\x47\x62\xe3\xa9\x0b\xdb\xcb\x15\x16\x0d\x71\x2b\xee\x81\x7a\x1b\xb7\x29\xc2\xc6\x3f\x29\x12\x5d\x06\x8a\x16\x04\x33\xb3\x33\xbb\x37\xbb\x21\xac\x25\x86\x51\x8f\xdb\x72\x23\x75\xb9\xe9\xb2\x1b\xc6\x27\x6b\x6b\xaa\x7f\xf5\xeb\xd5\xd4\xeb\x35\x88\x1d\xfe\x50\xa2\x47\x10\x8c\xab\xa7\xf5\x56\x44\x00\xe1\xf0\x7f\x0b\xd1\x7e\xab\xb7\xff\x0b\xd1\x08\xea\xf7\x0c\xb3\x09\xbd\x1b\x5c\xc2\x8f\x38\xce\x32\x4f\x11\x84\x46\x5d\x8f\x17\xe4\x95\x2d\xfa\xc0\xc0\x5a\x5a\xe0\x69\x67\x92\xff\xff\xfe\x1b\x62\x04\xeb\x5b\x1e\xfd\xb7\x04\xeb\xc4\xad\xd9\xc7\x6a\x76\x5e\x38\xcf\x85\x65\x89\x46\x39\x68\x59\x62\x00\xa7\x71\x3b\xd9\x7d\xc6\xeb\xf3\x3c\x7e\x2e\x4f\x05\x01\x84\xa3\x58\x4b\x8c\xa1\x36\x17\xdf\x0a\x3c\x20\xd1\xd4\x18\x13\x88\x33\x3b\xa2\x30\xeb\x11\xc3\xfc\xe1\x23\xb1\x7c\xc8\xf3\x55\x11\xeb\xd5\x9a\x18\xb2\x3c\x71\x04\x10\x8e\x61\x2d\x31\x8e\x5a\x13\x01\x9f\xee\xe5\x9f\x59\xc6\x03\x61\x4d\xb7\xfe\x8c\x46\xbe\x9b\x9f\x0d\x8c\xa8\xda\x3a\xa4\xd6\x9b\xe5\xe5\xa2\xbe\x29\xb5\xbb\x9a\x18\xc7\x5a\x62\x02\x75\xa8\x7e\xeb\xea\xf6\x12\xfc\x28\xfb\x91\xc4\xcf\x55\x37\x2d\xc5\x9b\x47\xe2\x15\xb4\x75\xba\xae\xed\x24\xe9\xd9\x85\xb7\xa5\xa9\x9e\x41\x00\xe1\x04\xd6\x12\x93\xff\x96\x68\xa2\x22\x17\x14\x8c\xad\xbd\xa6\x5c\x52\x79\xb7\xd3\xc3\x3e\xe6\xe2\x34\x4b\x0c\xe2\x1e\x22\x77\xe5\x41\xee\x11\x9b\x9f\xda\x1c\x08\x20\x9c\xc4\x5a\x62\xea\xdf\x12\x46\xf3\x82\x8d\xc1\x41\x6f\x63\x7f\x91\xb3\x9f\x13\xdd\x39\xcc\x13\xd6\xba\x63\x24\x2e\x9c\x4a\xf5\x61\x5b\xf9\xb8\x54\xfe\xe2\x79\x04\x10\x4e\x61\x2d\xf1\xed\xdf\x12\x8b\x29\xca\xd6\xe3\x85\x97\x2e\xef\x50\x0b\x3e\x8c\x52\x33\xe7\x2c\xc2\x8f\xd9\x16\x88\x9b\xd6\x29\x17\x3e\xc8\xfd\x44\x1f\xc7\x83\x00\xc2\x6f\xff\x2d\x44\xfb\xed\x6b\xfc\x5f\x88\xa6\xff\x7d\x3d\x67\x1a\x67\xa4\xf8\xeb\x44\x3b\xef\xba\xf4\x2e\x4e\xb9\xdd\x3f\xf4\xa0\x43\xf2\x71\x80\x50\x33\xdd\x63\x6d\x6d\xb5\xd0\x86\x52\x05\x04\x10\x4e\x63\x7d\xcb\xdf\x51\xcf\x5e\x81\x1e\xf7\x60\xeb\xd0\x9d\x29\x1c\xad\x01\x67\xd4\x23\xf9\xea\x87\x67\xde\x79\x38\xa8\x9d\x1a\x76\x78\xc5\x11\xd5\x77\x8d\x01\x01\x84\xdf\xb1\x96\x98\x41\x3d\x52\x44\x79\x1b\xff\x2c\x2b\x7b\xad\xdb\xcf\x53\xe4\xfe\xa7\xb3\x86\xd7\xca\x4f\x8d\x71\x73\x2e\xaf\x79\xb1\xc9\xc4\xbc\x60\x26\xde\xed\x18\x67\xb0\x96\x98\xfd\xb7\xc4\x1d\x24\x66\xcc\x56\xd9\x42\xf6\x01\x8b\x84\x59\xc7\x9d\x25\x02\x24\x7d\xd2\x61\x23\x22\xa9\xa4\xf3\xc4\x57\x52\x86\x61\x01\x3b\x04\x10\xce\x62\x2d\x31\x87\x3a\x2d\x31\x8e\x33\x4b\x6c\xd2\x8a\x9e\xf2\x97\x97\xbf\xcd\x29\x35\xf5\x32\x4a\x3b\xb4\xa7\x35\x69\x53\xa5\x93\x44\xe6\x57\xb3\xe6\x49\x04\x10\xce\x61\x2d\x31\xff\x6f\x09\x39\x56\xae\x60\xca\x57\xef\xb4\x6a\xfd\x2d\x20\x93\xe3\x4b\xf5\x63\x1f\x74\xb9\xcb\x2b\xc8\x63\x09\x4b\x8e\x77\x1e\xff\x15\x4f\x8b\x00\xc2\x79\xac\x25\x7e\xfc\x5b\x22\xbd\xfd\x4b\x4f\x3c\x83\x48\xc9\x82\xe0\x19\xe6\xef\xa1\xe7\xe6\xdc\x5c\xf1\x94\xc9\xc5\x06\xab\x3f\xb2\x8c\x26\x98\x26\xfc\xa5\x11\x40\xf8\x03\x6b\x89\x05\xd4\x3e\xd2\xaf\x6e\x5d\xaf\x5f\x3f\x66\x94\x05\x87\x38\xa5\x3d\x23\xd8\x8f\xbe\xe1\xa0\x57\x2f\xa7\xfa\xc0\x4a\xa5\x25\xf4\x60\x25\x8c\x1d\x01\x84\x0b\xff\x2d\x44\xfb\xed\xf8\xfd\x5f\x88\x7e\xfe\xfb\x7a\x3c\x7d\x47\x92\xa7\xa4\x8f\xc8\x73\xbf\x69\x6c\x2a\x6b\x99\x70\x4c\x29\x63\x2e\x88\xad\xb2\x4e\xf4\x40\x24\x1a\xc8\x43\x78\xac\x10\x40\xf8\x13\xeb\x5b\x5e\x44\x5d\xd5\x6a\x3e\x87\x54\xae\x88\x77\x63\x3b\xb4\x9e\x09\xce\x6a\x94\x69\x86\x1a\x34\x77\x06\x20\x2a\xcd\x13\x8a\xbd\x07\xd4\x66\x9d\x10\x40\xb8\x88\xb5\xc4\x12\xea\xc8\x51\xe5\xdc\xa2\x1b\xf1\xb6\xe7\x81\xca\xa4\x2f\x94\x71\x91\x5b\x04\x52\xbf\x86\x56\x0b\xe2\x3a\x97\xe2\xc5\xc3\x2a\x72\xd5\xe8\x11\x40\xb8\x84\xb5\xc4\x32\xea\xf1\x6d\x95\xb4\xb7\xca\x7c\x2a\x3d\x6a\x5c\x1d\xa5\xab\xee\x44\xee\xc1\x91\x87\x93\xde\x9d\x17\xd5\x8c\x3a\x05\x95\x2a\xce\x7a\x1f\x44\x00\xe1\x32\xd6\x12\x2b\xff\x96\x78\x52\xa0\x52\xa8\xfe\x62\xeb\x4c\x30\x9f\xd4\xab\xdb\xee\xaf\xbe\xd0\x7c\x5b\xa2\x15\x57\x7a\xc8\x65\x59\x9f\x3a\x6c\x46\xec\xb1\x7b\xcb\x5e\xc1\x5a\xe2\xd7\xbf\x25\xde\x70\x77\x4c\x3f\xaa\x12\x76\x3c\x40\xe3\x59\xb2\x3c\x56\xee\x2c\x32\xf3\x62\x80\x69\xe2\xb9\x2d\xef\x60\xa9\xb0\xf5\xc7\x65\x6b\x04\x10\xfe\xc2\x5a\x62\x15\xf5\xa4\xa7\xd2\x5d\xfe\x40\xed\xe7\x64\x29\xfe\xf2\x52\x75\xd1\x36\xde\x91\xa0\xd1\xe3\x08\x41\x4d\xdf\xda\x11\xa2\xf2\xef\x9a\x6b\x04\x08\x20\x5c\xc5\x5a\xe2\xf7\xbf\x25\x9e\x7d\x3a\x3e\xc5\x15\x2d\xa6\x69\xf3\xa3\x63\xe0\xcb\xc5\x20\x15\xfc\x7a\xb0\xf3\x18\xb1\xb7\x33\x72\xa7\xd7\xf6\x12\x11\xfb\xee\x1a\xe4\xf7\x7f\x0b\xd1\x7e\x7b\xe1\xff\x17\xa2\xb5\x7f\x5f\xcf\x4c\x92\x63\x89\x2c\xd7\x01\x0f\x53\xa6\x9f\x2d\xe7\x6e\xda\x7e\x20\x7e\x78\xd9\xf4\x72\xcb\xeb\xdb\x82\xcd\x84\x14\x19\x03\x9f\xe5\x11\x40\xb8\x86\xf5\x2d\xaf\xff\x5b\x22\xfb\xb7\xda\x9b\xaf\xe4\x05\x22\x47\xbb\x23\x7e\xe2\xc5\xb4\x96\xbe\x7e\xcc\x37\x0f\x3e\x5e\xf5\x4d\xee\xaa\xfb\xbc\x40\xd6\xf9\x4b\x08\x20\x5c\xc7\x5a\xe2\xcf\xbf\x25\xfc\x68\xba\xb5\x88\xcb\x5e\x20\xb3\x6f\xdd\x36\x09\x2e\xa4\xc7\x5d\xd4\x35\x1b\x2e\xbe\xf7\xfd\x7c\x7d\xe4\xf2\xef\xad\xd6\x2f\xbc\x08\x20\xfc\x83\xb5\xc4\xc6\xbf\x25\x52\x87\x78\x26\x72\x17\xce\x8d\xf7\xdf\x0d\x9f\xf0\x6b\xbb\xf2\xc9\x2b\xee\x5a\xb1\x51\xd0\x3a\x6b\x14\x6f\x9b\x54\x41\x81\x16\x3f\x02\x08\x37\xb0\x96\xd8\x44\x75\x05\x91\xf2\x2b\xc5\xa5\xd2\xb1\xdc\x55\x62\xb4\x09\xa6\x97\x4d\xb9\xde\x12\x48\xb7\xb2\xcc\x0e\xc1\x9c\xcf\xbc\xe5\xdb\xff\xdf\x73\xee\x9b\x58\x4b\x6c\xa1\x9e\x57\xed\xfa\xb6\xdc\xfd\x39\xed\x43\x5d\xb7\xa7\xd8\xbd\x42\x86\x70\x35\x12\x89\x86\x8f\x27\x8c\x18\x54\xd3\x62\x88\x3f\xb1\x7f\xd9\x5d\xd9\x6d\x61\x2d\xb1\x8d\x3a\x49\xa3\xa8\x96\xb2\x95\x11\x5f\x78\x3e\xe1\x51\x0d\x5b\xed\x0c\xa7\x9c\xf5\x4a\xbe\x2a\x35\xac\x70\x39\xca\xdb\x8e\xce\xcb\x6c\xf7\x1b\xb5\x8d\xb5\xc4\xce\xbf\x25\x04\x1f\xfd\xb2\xad\xd6\xcf\x17\x0b\x82\x32\xc4\xae\x5c\xcb\xb3\x52\x36\x78\xe0\x35\xef\xf3\xa5\x5b\xe4\xd0\x7a\x84\xc5\xa5\x4a\x5d\x04\x10\xee\xfc\xb7\xc3\xba\xfd\x14\x3d\xd4\x61\x5d\xfa\xca\x76\x19\x11\x7d\x9a\x90\x22\x9d\xad\x90\xa6\x46\x21\xf9\xc8\xcd\x0c\x7f\x86\x99\x2d\x96\x0c\x76\x21\x07\x83\xfe\xd5\xb2\xbf\x86\xea\x38\x41\x9b\x45\x94\x8a\x57\x32\xae\x94\x50\x1b\x32\x5f\x36\x78\x98\xd9\x52\x15\x95\x6a\x6f\xd2\x9c\xa1\x0a\xfd\x9c\xb8\xbc\xfd\xd7\xd0\x3b\xea\x33\x33\xe6\x53\x8f\x29\xd5\x18\x59\x9d\x7d\xcb\x12\xb8\x6b\x33\x2f\xe7\x18\x49\xc7\x58\xcd\xb7\x7d\xa6\x73\xac\xbc\xf9\x37\x38\x57\xbf\xa1\x2d\xe3\xf3\xa9\xdb\xa1\xac\xb4\x89\x79\x2d\x05\x67\xb1\x73\xb7\x9d\x84\xe6\x31\x57\xa2\x53\xee\x86\x5a\xc0\x1a\xfc\x37\x12\xaa\x71\x46\xe7\x43\xc2\x96\xc9\xcb\x75\x55\x52\x12\xd1\xbc\x90\x17\xc7\xe2\x9c\xa4\x0f\x3e\x29\xb2\x0a\xf5\xa3\x3d\xfd\x94\xed\x5e\xfb\x5f\x43\x63\xae\x36\x2d\xfb\xde\x7b\x45\xc2\xc8\xd9\xc6\xc1\xc9\x9b\x7b\xe1\x35\xbf\xd4\x15\xda\xc0\x0f\x1e\xf0\x83\xcd\x9c\xb1\x6a\x30\xf0\xf7\x8f\xf0\x58\x6a\xae\x4c\x74\x55\x96\xcf\x58\x37\xbd\x50\x39\x48\xdc\x22\xee\x38\x71\x4d\x4b\x9a\x47\xd9\xa6\x5e\xe9\x48\xc7\xd4\xfc\xfb\xbf\x19\xbb\xcb\x43\x67\x37\xfa\x36\x25\x19\xf2\x5b\x9b\xe3\x94\x0e\x6a\x46\x71\xaa\x03\xb2\xe9\xbb\x3c\x77\xee\x3f\x7d\x3d\x6c\x46\x1b\xe0\xdb\x42\xf4\xff\xdf\x55\xfd\xff\x66\x32\x00\xa1\x74\xba\xc9\xc9\x96\x90\xa7\xe1\x64\x76\x29\x14\x55\xd3\x9a\xd4\x65\x13\x05\x62\x06\xc7\xd4\x3f\x77\x69\xc6\x7d\x75\xfa\x71\x72\x63\x85\x14\x01\x30\x56\x9d\x0e\x40\x28\x9f\x4e\x7e\xf6\x65\x0b\x9b\xc4\x7c\x46\xfa\xb3\x5e\x9e\x29\x5b\xae\x51\xa3\xd9\xc0\x1b\x85\x1e\x0a\x81\x71\x97\x3f\xc8\x9d\xb3\x56\xe7\x45\x00\x8c\xd5\xa7\x03\x10\x4a\xa8\xf3\x3d\xaa\x46\x4f\x7e\xc6\xc6\xf2\x60\xb4\x5a\x0b\x4b\x66\x49\x48\xf3\xb9\xb3\xe2\xa3\x2f\x9d\x20\x87\x12\xf8\x67\x80\xe2\x8c\x31\x02\x60\xac\x42\x1d\x80\x50\x46\x9d\xb3\xc1\xbc\xe3\x13\x8e\x23\xd7\x8d\x4c\xa9\x2b\x4c\x23\x9a\x3f\xd5\xff\x22\xf1\x4f\x8e\xee\xd3\x33\xa0\x60\xb0\x7a\x15\x73\x47\x1b\x01\x30\x56\xa3\x0e\x40\x28\xa5\xee\x6a\xe6\xcf\x2b\x62\x42\x05\xd0\xd1\x34\x46\xca\x58\x11\xa6\xfc\xd7\x05\x37\x04\x41\x88\x2a\xfe\x61\xae\x18\xbf\x82\xe8\x17\x56\x04\xc0\x58\x95\x3a\x00\xa1\x9c\x3a\x96\x8b\xd4\xf1\x45\x87\x43\xdf\x37\x2c\xdc\x4a\x2b\x19\xf1\xc6\x31\x7d\x32\x8c\x16\x8c\xa6\x8c\xef\x6a\xcb\x18\xeb\x92\xfd\x65\x80\x00\x18\xab\x53\x07\x20\x94\x54\x57\xa7\x5b\x77\x64\x45\xb7\x92\xfe\xc4\xd8\x57\x69\x95\xe7\x4a\xc2\xb8\x8c\x94\x17\x57\xab\x86\x57\x38\xf9\xca\xf8\xb4\x39\xcb\x71\x08\x80\xb1\x4a\x75\x00\x42\x59\x75\x43\xdd\x91\xd3\x0f\x39\x27\x9f\x9d\x71\xad\x4a\xff\x7d\xf6\xb2\x6c\xda\xa1\xe7\xea\x46\x06\xee\xbc\x5f\xda\x2f\x99\xeb\xbf\xa8\x52\x41\x00\x8c\xd1\xaa\xdb\x0b\xd3\x7e\xf3\xce\x5e\x98\x50\x5a\xdd\x50\x90\xcd\x6c\x5d\x6f\x17\xf1\x52\xcf\xb1\x47\x97\x6c\x7a\x7b\xc3\xce\xab\x7a\x9f\xb8\x73\x28\xc6\x48\x39\xbb\x38\x72\x55\x83\x0d\x01\x30\x56\xad\x0e\x40\x28\xaf\xee\x5d\x24\x2f\x39\x8f\x83\xf4\xf2\x8a\xde\x11\x65\xe7\x71\x7a\x9e\xc7\x26\xc9\xae\x87\xe6\x75\x9f\x3a\xab\x7a\xfc\x98\x1a\x33\xe7\x46\x00\x8c\xd5\xab\x03\x10\x4a\xac\x8b\x3c\x36\xbe\xbe\xc8\x7e\xad\xee\x4b\xe7\x23\xe2\x7c\x9b\xe1\xdc\xf5\xb0\x15\xd7\x9c\x5a\xa4\x0d\xe6\x7b\x95\x95\x79\xd1\x91\x04\x01\x30\x56\xb1\x0e\x40\x28\xb3\x2e\xbf\xe9\xf6\x79\x0f\x87\x3e\x2d\xe2\x6d\x59\xfb\xdb\x25\x7a\x83\xcb\x73\x17\x75\xe7\x1b\xb9\x82\x95\x08\xe3\x24\x35\xe8\x73\xed\x11\x00\x63\x35\xeb\x00\x84\x52\xeb\x08\x3e\x9f\x7d\xfc\x44\x4b\x5b\x7a\x2c\xa2\x76\xc8\xc5\x33\xb6\xc9\x85\xaf\xd4\xe8\x97\x66\x8c\xe1\xd2\x61\x1b\xce\x1d\x91\x0b\x74\x08\x80\xb1\xaa\x75\x00\x42\xb9\x75\xf9\x54\x07\x18\xdb\x27\x99\x78\x2f\x30\xf6\x05\x2a\x2f\x8d\xe9\xa4\x5d\xd5\xb6\x59\x48\x20\xbe\xed\x48\x30\x39\x22\x45\x5f\x25\x81\x00\x18\xab\x5b\x07\x20\x94\x5c\xc7\xaf\x1e\x9d\x21\x71\xf9\xfa\x2b\xf2\x4c\x29\x35\xd1\xd7\xb3\x4e\x63\xc3\x05\x89\xb6\xf5\xd5\xd1\xb9\x1e\x0d\x92\x6e\xef\x9e\xee\x5e\x2b\xac\x72\x1d\x80\x50\x76\xdd\x2f\xbe\x21\x87\x7b\xfd\x59\x82\x12\xe3\x66\x65\x21\x92\x95\xa3\xad\xa0\xa1\x24\xdd\xf4\xf4\xeb\xe8\x63\xbe\x4e\xc7\x29\x57\x15\x11\x00\x63\xb4\xeb\xf6\xc2\xb4\xdf\x9d\x79\x2f\x4c\x28\xbd\x4e\xf2\xcf\x40\xed\xb5\x4e\x72\x2d\xca\xea\xea\x44\x66\x4a\x11\xd7\x27\xb4\x7e\x93\x0f\x03\x82\xe8\xc4\x63\xd4\x88\x8f\x0d\x1b\x5a\x20\x00\xc6\xaa\xd7\x01\x08\xe5\xd7\x9d\x20\x98\x8f\xac\x3b\x74\xe0\x0b\xfd\x98\x66\xb4\xe6\x61\xc3\x05\x46\xa3\x2b\x7a\x9a\x74\x53\xf6\x1e\x27\x25\xbe\x77\x0d\x70\x19\x22\x00\xc6\xea\xd7\x01\x08\x25\xd8\xf5\x4f\xe5\x17\x1e\xbe\x1b\xcc\x77\xd0\x48\xec\xe4\x53\xce\x11\x16\x8f\xfc\x52\x87\x72\xd6\xca\x60\xeb\x1b\xb8\x02\xb6\xf9\xf7\xb4\x08\x80\xb1\x0a\x76\x00\x42\x19\x76\x86\x8f\xe3\xbb\x93\x0b\xc9\xf2\xda\x32\x42\x96\xf1\x46\x0d\x89\xdf\xdd\xda\x5b\x3d\xf3\x04\xa3\xe6\x55\x0b\x83\x5b\x99\xf5\x69\x10\x00\x63\x35\xec\x00\x84\x52\xec\x98\x54\x1b\x2e\x6b\xde\x77\xd3\xda\xba\x1f\x74\x5c\x5b\x75\xb1\xf1\x2a\xa1\xdd\x37\xb2\xe7\x77\x3b\xb5\x98\x2e\xa4\x6f\x7a\x75\x31\x22\x00\xc6\xaa\xd8\x01\x08\xe5\xd8\xb1\xf0\x68\x98\x25\xf9\x46\x1f\xab\xfe\xdc\x9e\x7d\x46\x34\x2c\x20\x8a\x56\xf0\xba\x76\x0e\xcf\x87\x1a\x9e\x2e\x3a\x87\x75\x13\x17\x04\xc0\x58\x1d\x3b\x00\xa1\x24\xbb\x4c\x6a\xef\x34\x59\x4a\xe1\x83\x5f\x07\xc7\x8a\xae\x4b\xaf\x7e\xe3\xf9\x50\x48\x52\xe5\x18\x2b\x08\x51\xfe\xca\x5a\xf6\x11\x86\x11\x00\x63\x95\xec\x00\x84\xb2\xec\x8c\xae\x17\x50\xbe\x13\xae\xfd\xaa\x11\xbc\x3e\x52\xe3\x15\x53\x72\xe5\xe6\xa2\x9f\x60\x24\x61\xfb\xc3\x15\x8f\x0d\xce\xca\xcd\xdd\x6e\x04\xa3\x65\xb7\x17\xa6\xfd\x7a\xd7\xbd\x30\xa1\x30\xbb\xa8\x3b\x4f\x93\xd8\x57\x77\x5a\x07\x6f\xcc\x3d\x73\x99\xe7\x64\xd2\xc5\x2d\xf4\x18\x16\x7f\xca\xe3\x20\x91\xbf\x63\x17\xe4\x75\x19\x01\x30\x56\xcc\x0e\x40\x28\xcd\x8e\xef\x52\x80\x80\x6f\x6c\x6a\xd1\x84\x7d\x4f\xc6\xf1\xa5\xfb\x56\x0d\xf7\xe4\x68\x96\x3d\x02\xc7\x5f\x8a\x14\xae\x46\x15\x25\xed\xce\x84\x58\x35\x3b\x00\xa1\x38\x3b\x27\xdf\xc0\xcb\x49\x2a\xe2\xbe\xb9\x5b\xd9\x35\x17\x73\x8a\x08\xd5\x79\x5e\x78\x8c\xe6\x34\x0e\x16\x1d\x1e\xf2\xb4\x37\xd6\xda\xbd\xc3\x62\xe5\xec\x00\x84\xf2\xec\x12\x9f\x1c\xcd\xd0\x22\x9a\x2c\xd0\xae\x2c\x1d\x16\xfc\x3d\xf3\xf2\x48\x9a\x98\x82\x8a\xe2\x4c\x8a\xcd\xe4\xf5\xad\x73\x23\x6c\x67\x11\x00\x63\xf5\xec\x00\x84\x02\xed\x58\x6f\xa9\x39\xb7\x50\x08\x36\x33\xbc\x2b\xf5\x12\xe0\xde\xc2\xbf\x3d\x65\x5f\x26\x77\xc9\x87\x27\xad\x50\x6f\xd6\xcb\xf3\xce\x45\x04\xc0\x58\x41\x3b\x00\xa1\x44\xbb\x42\x5f\x86\xcb\xf9\x78\xca\x66\xff\x60\xed\x89\xe7\xf7\x28\xac\x28\xbd\xdf\xc1\x75\x39\x0c\x90\x7f\xb5\xf4\xf8\x75\xa4\x82\x18\x01\x30\x56\xd1\x0e\x40\x28\xd2\x8e\x28\xe2\xc7\x66\x59\xb1\xb5\xcd\x74\xcf\x65\xd5\x15\xfb\x3f\x47\x46\x79\xd4\x0a\x46\xaf\xd0\xe0\xef\x6d\xb8\x7e\xa8\x8f\x73\x3a\x89\x00\x18\x2b\x69\x07\x20\x94\x69\x97\xa1\x79\x4c\x36\x34\x94\xaa\x5d\x9a\xaf\x12\xc4\xea\x30\xd8\xbc\xb7\x33\x1c\xa8\x62\x57\xaf\xfa\x6d\x65\xa3\xe8\xc6\x73\x77\xf7\xee\x87\xd1\xb4\xdb\x0b\xd3\x7e\xab\xbb\xbd\x30\xa1\x50\x3b\x99\xed\xec\xa1\x6d\xe9\x92\x81\xd4\x8b\xf2\x94\xa9\x62\x6c\xa5\xa9\x44\xef\x09\xa9\xac\xad\x67\x29\x9f\x75\xd8\xe5\xde\x24\xd8\xed\x3b\xb1\xa2\x76\x00\x42\xa9\x76\x43\x07\x37\x0e\x73\x3f\x38\xac\xcc\x2a\xb2\xec\x7f\x06\xcf\x74\x59\xeb\x20\x5b\x80\xbb\x56\x04\xdb\x45\x7d\xc2\x31\xff\x44\xb1\x43\x08\x80\xb1\xaa\x76\x00\x42\xb1\x76\x6b\x6f\x6e\x89\x1e\xb7\x23\xb9\x11\x7b\x2d\x4c\x3e\xa9\x3c\x29\x3f\xc3\xf5\x01\xcb\xed\x27\xf3\x92\xf4\x48\x9c\x94\xb4\xc0\x05\x37\x04\xc0\x58\x59\x3b\x00\xa1\x5c\xbb\xa0\x2e\xea\xb8\xa9\xb0\x9f\x43\xf1\xd5\x54\x62\x17\xf2\xe5\xa8\x4f\x3d\x4a\x73\xec\xeb\xb8\x68\x2a\xfb\xec\xa5\x72\x4a\xe0\xa6\x06\x02\x60\xac\xae\x1d\x80\x50\xb0\x9d\x88\x22\xbf\xda\x75\xd1\x95\xfb\xa9\x0f\x43\x98\xdf\x9e\xd0\xa6\x23\x4c\x97\x66\xa9\x32\xea\x0e\xbf\x68\x6e\xf2\xe5\x03\x88\x3f\x81\x00\x18\x2b\x6c\x07\x20\x94\x6c\xd7\x38\xd9\xb1\xe2\x65\x94\x2b\xfa\x5d\x60\xad\x2d\xe7\x7b\x1d\xdc\xb6\xd9\x6e\xca\x9a\x52\x7a\xb1\xf4\xc4\x8e\x6e\xf0\x27\x46\x3b\x04\xc0\x58\x65\x3b\x00\xa1\x68\xbb\xe6\x64\xca\x87\xdf\x75\xcb\x27\x8b\x25\xef\x90\x47\x85\x08\x4a\x72\x34\x24\xaf\xbc\x9a\x87\xb7\x14\xd5\x9a\x37\x75\x11\x3e\x0e\x04\xc0\x58\x69\x3b\x00\xa1\x6c\xbb\x4b\xe2\x22\x6f\xe9\x94\x23\xe9\x3d\xca\xd8\x76\x7c\xe1\xfa\xf9\x33\xef\x14\xd7\x35\xaf\x8a\xad\x9e\x99\xb1\x2a\x20\x5e\x9f\x64\x40\x00\x8c\xd1\xb6\xdb\x0b\xd3\x7e\xfb\x1f\x7b\x61\x42\xe1\x76\x7f\x0e\x4a\xf4\xaf\x9b\xe1\x1f\x49\x50\x04\xb3\x0d\x6f\x7d\xb7\xd7\x57\x79\x3e\xa4\x75\xf3\xf5\xe4\x01\xfb\x1d\xdf\x43\xd7\x16\x24\x11\x00\x63\xc5\xed\x00\x84\xd2\xed\x3e\x46\x01\xb5\xd1\x81\x8b\x2d\xf4\x57\x89\x4f\x1f\x3d\x60\xf1\xee\x5c\xec\x1d\x81\x64\xb1\x5b\x8c\x3e\xee\x79\xa2\xfa\xe5\xd4\xbb\x0b\x77\xac\xba\x1d\x80\x50\xbc\x9d\x7d\xc0\x93\x02\x8a\x1c\xc4\x52\xfd\x86\xb1\x60\x18\xe5\x11\x83\xe1\x9e\xd7\x1c\x0a\x2f\xcb\xd7\x2b\x6c\x44\x1c\x22\x08\x13\x94\x10\x00\x63\xe5\xed\x00\x84\xf2\xed\x98\x08\x14\x4f\x1e\xbf\xa4\x77\xa1\xa4\x56\xd5\xeb\xe4\x8f\x02\xee\xed\xf3\x01\x15\x47\x3b\x73\x6f\x55\xa4\x77\x3e\x8f\x78\xe5\x4f\x8d\x00\x18\xab\x6f\x07\x20\x14\x70\x37\x21\x48\x20\x1c\xbe\xd4\x39\x17\xef\x1b\x74\xd0\x99\x27\x79\xcc\xc9\xbb\x02\x77\x7b\xea\xf7\x86\x9a\x94\x56\x1e\x27\xff\x87\xdd\x2f\x08\x56\xe0\x0e\x40\x28\xe1\x8e\x57\xb1\xa3\x9f\x1b\xc7\xe2\xd4\xdf\x7f\xfa\x62\xe2\x95\x17\x96\x7e\x4e\x45\x0f\xe5\x7e\x3a\x9d\x2c\x3a\x3a\x7c\xff\xb1\x3e\xb7\x3e\x02\x60\xac\xc2\x1d\x80\x50\xc4\x1d\xd3\xd9\xaa\xcc\x52\x02\xe1\x50\xbb\x96\xf6\xf7\x30\xdf\x89\xcd\x1f\xf2\x4f\xcb\xa9\x69\x7f\x17\x54\x09\x98\x8b\x14\x50\x88\x09\x21\x00\xc6\x4a\xdc\x01\x08\x65\xdc\x35\x0f\xde\xb6\x8f\x51\x0c\x23\xef\xe5\xd5\xaf\x79\x1a\x62\x43\x11\xc7\x2c\xdf\xcb\x13\x41\x9f\x3e\x5f\xee\x35\x94\x6c\xde\xb6\xdb\x29\x60\x34\xee\xf6\xc2\xb4\xdf\x0e\xe1\x5e\x98\x50\xc8\xdd\xd1\x94\x58\x3d\x1d\xc8\xcd\xb0\x49\x21\x19\x59\x4e\x0d\x67\xbb\x76\xf4\xc6\x93\x50\x5d\xcb\x5b\x54\x99\x6d\xc0\x83\xd6\x41\x0b\x01\x30\x56\xe4\x0e\x40\x28\xe5\x8e\x63\xac\x26\x81\x3b\x9a\xca\xf4\xc1\xc7\x09\x46\x55\x32\xb2\x07\xcc\xf3\x0c\x19\x94\x1f\x0c\x09\x5c\xd4\xf8\x5a\x77\x88\x77\x76\xdf\x34\x56\xe5\x0e\x40\x28\xe6\x2e\xb2\x53\x1b\xf7\x64\x81\xcd\x55\xc8\x28\xd5\x9e\x9a\xa7\xe4\xda\x24\xdf\x43\x5c\xaa\xa5\x4a\xff\x33\x6b\x95\xeb\xa2\xef\xfb\x76\xdb\x23\xac\xcc\x1d\x80\x50\xce\x9d\x58\xd9\x12\x59\xe6\xf5\xc3\xe9\xa6\xb1\x62\xaa\x0b\xca\x51\xae\xe5\x8f\x25\x9c\x2f\x12\x4b\xfb\x31\x66\x7d\xf6\x70\x7a\x44\x40\x8a\x00\x18\xab\x73\x07\x20\x14\x74\xd7\x21\x7f\xef\xdd\x77\xb1\x7c\x38\xbc\xe1\x51\x08\x23\xa7\x95\xfd\xda\xab\x1c\xd1\xd7\x6d\xd7\x87\x2e\x3d\x4b\x1b\x37\x7a\x61\x4e\x8e\x00\x18\x2b\x74\x07\x20\x94\x74\xa7\x42\xf8\x2d\xeb\xf7\x20\xe2\x5e\xc2\xd0\x23\x2b\xa8\xde\x16\x20\xfb\xb6\x87\x20\xfc\x9d\x68\xff\x8d\x68\x3f\xb7\x7a\xd5\xb8\xd3\x08\x80\xb1\x4a\x77\x00\x42\x51\x77\x15\xd7\xa6\xdb\xde\x93\x2d\x06\xf1\xa9\x59\x2b\xad\x08\x3c\x20\x73\xd7\xab\xba\x61\xbe\x16\xc3\x78\xaf\x98\x2b\x57\x47\xbf\xd7\x04\x01\x30\x56\xea\x0e\x40\x28\xeb\xee\xf1\x6b\xd9\x95\x74\x5e\x9a\x2d\x43\xdf\x57\x2a\xb2\x33\x3d\x9d\xd3\xf1\x5d\xc6\xab\xeb\xbf\xdf\xe3\xd5\x12\x62\x4b\xe1\x6d\x07\x04\xc0\x18\xad\xbb\xbd\x30\xed\xb7\x87\xbe\x17\x26\x14\x76\x27\xc0\x54\x23\x76\xf4\xed\x8b\xf4\x75\xa5\x13\xf5\x7d\x79\xbd\xac\x1f\xee\xb2\x73\x05\xa9\x9a\x49\x37\xd7\x44\x53\x8a\x2b\x5f\xdb\xed\x9f\xb1\x62\x77\x00\x42\x69\x77\x33\x6f\xd9\xba\xac\x09\xde\x7a\x47\xfa\xb7\x3b\x67\x7f\xbd\x9f\xf3\x48\x36\xef\xdd\xd9\xf3\x67\x3b\xef\xd3\x2e\x37\xbe\x54\xf6\xe1\x46\x00\x8c\x55\xbb\x03\x10\x8a\xbb\xab\x09\x0a\xbf\x50\xc7\x33\x8f\x17\x26\x89\xbb\x5b\xf5\x11\x12\xf8\x64\xd3\xb5\xae\x65\x54\xac\x39\xb4\x30\x43\xfc\xe2\xfe\x9a\x20\x02\x60\xac\xdc\x1d\x80\x50\xde\x9d\x8f\xd7\xb7\xee\xf5\x09\x75\x35\xc6\xfc\x63\xa2\x1d\x4a\xf2\x37\xa3\xac\xc2\x5b\xf2\xcd\x03\x16\xc5\x4f\x1f\x92\xca\x33\xad\xdb\x6d\xc1\xb0\x7a\x77\x00\x42\x81\x77\x74\x7e\xf6\x54\x4c\x24\xdf\xaf\xb1\x86\xda\x1e\x63\x66\x9d\x55\x6f\x37\x5a\x53\xae\x4f\x3f\xca\x9b\x1e\xf1\x69\x80\xf5\xfe\x88\x3c\x02\x60\xac\xe0\x1d\x80\x50\xe2\xdd\x91\xec\xfc\x3f\x49\x96\x25\x1b\x29\xca\x1c\x67\x0c\x1a\x8a\xf0\xae\x14\x50\x03\xd3\x90\x5f\x14\x4f\x2e\x91\x44\x8f\xcb\xe6\x55\x04\xc0\x58\xc5\x3b\x00\xa1\xc8\x3b\x4d\xea\xdf\xdb\xf7\x6a\x6f\x6e\xf4\xc6\x07\xbe\x14\x48\xab\x36\x08\x69\xaf\x53\xb8\xfb\x98\x95\x2e\xb0\x4a\x2f\xd2\xc5\xb3\x90\x19\x01\x30\x56\xf2\x0e\x40\x28\xf3\xce\x85\xfe\xed\x19\xde\xab\xd3\xe6\x07\x2a\x8d\x0b\x3e\x0a\xd6\xf4\xae\xaa\xcc\xeb\xe7\xbc\x51\xf9\xda\xef\x41\x21\x5b\xe1\x67\xba\xbb\x16\xff\x8f\xe6\xdd\xf5\x6e\xce\x9a\xca\x9b\x59\x1a\xde\xbe\x0e\x3f\xca\x96\x5e\x2c\xfa\x70\xb6\xa6\x9c\xb6\xac\xd6\x38\xeb\x46\x7d\xde\xa3\x93\x38\x01\x75\xd8\xb7\xba\x40\x26\xf3\x8a\xf3\xe6\x5b\x02\x3a\x7e\x29\xb9\x9f\xa5\xae\xb7\x4f\x46\xb7\xd6\x14\x54\x31\x0c\xff\xd9\x1e\x2a\xa1\x3e\xf2\x37\x64\x77\xfc\x74\x60\xac\xc9\x6f\xda\xdb\x9e\xcf\x98\x1d\x94\x96\xda\x23\xc4\xe3\xbe\xdd\x0c\xcd\x8d\x72\x54\x2d\x6e\x8d\x27\x32\x6c\x92\xfb\x6b\x28\xcd\x3d\xc2\xe7\x1d\x74\xb9\xc7\xd2\x25\x6d\xdc\xca\x0a\x4e\x3a\xc6\x7c\x6a\x8b\x71\x79\x2e\x95\x72\xe1\x8d\x5e\xa4\xf6\x94\xd8\xb3\xbf\x86\x0a\x34\xac\xe9\x20\xaf\xaf\xcc\xce\x33\xd5\x19\xb3\x3f\x73\x72\x5a\xdf\x89\x11\x8a\xa7\xc9\x8a\xa1\x73\xb5\x3a\xb1\x31\xcc\xb9\xf9\xd7\x50\x5f\x09\xc1\xa0\xd3\x90\x05\x22\xaa\xe7\x19\x55\x3b\xd6\x65\xc5\x33\xdb\x98\x13\x46\x92\x81\xb7\x75\x7c\x3d\x9e\xac\x27\xfe\xf9\xaf\xa1\xcb\xc2\x45\x13\xa4\x23\x37\x4f\xeb\xd8\x77\x97\x5f\xbe\x49\xdb\xf5\x59\x99\xf9\xf5\xce\x5b\xe7\x73\xd9\x52\x4b\x36\xed\x44\x7e\x62\x7f\x0d\xf5\x1c\xed\x88\xce\xcc\xa6\xcd\xde\x09\x6d\x9a\xf5\xca\x4e\x70\x08\xe0\xd1\x5b\xf3\x7f\xdf\xbb\xe9\xeb\xf4\xb9\xfa\x1e\x69\x8b\xe9\x5f\x43\x5b\x0f\x70\x1a\xb5\xe9\x67\x50\xba\xaa\xce\x28\xb6\xf5\xb5\xda\x28\xb7\x1f\xaa\xf4\xb1\xaa\xcc\x61\x50\xf3\x62\x58\x1f\xfd\x73\xe5\x7f\x87\x7d\xfb\x5d\xd5\xbd\x19\x0d\x85\xde\xb9\x75\xeb\x2f\x5a\xb0\xa8\x1b\x9a\xdf\x9d\xf1\x0d\xb1\x50\xf6\x2b\x19\xbc\x20\x69\x26\x14\xf4\x7a\x19\x77\xa5\xc2\xdc\xf7\x80\x39\x02\x60\xac\xe8\x1d\x80\x50\xea\x1d\x1f\x02\xa9\x27\x38\x2c\x65\xd3\xb7\x27\xdc\xb3\x36\xa0\x0f\x99\x5d\xda\x8e\x62\x89\xfa\x13\x96\xe7\xd6\xc7\x21\xc4\xc9\xe2\x8c\x00\x18\xab\x7a\x07\x20\x14\x7b\x27\x37\x92\x61\x21\x58\x77\xb6\x7c\xa1\xeb\xe9\x83\x88\xee\x12\xce\x4a\xe6\x21\x71\xa3\x88\x89\xfc\xec\xa7\x61\x54\x0b\xc7\xa0\x33\x08\x80\xb1\xb2\x77\x00\x42\xb9\x77\x97\xe3\x1e\x27\x2c\xdb\x78\xe8\xd1\xe0\xf2\xfd\x5f\xd1\x46\x5e\xee\xe3\x33\x2b\x60\x2d\x58\xf8\x96\xaa\xd4\x31\x69\xdf\x67\x6b\x8d\x00\x18\xab\x7b\x07\x20\x14\x7c\xb7\x2c\x94\xd8\xa7\x70\xea\x13\x11\x01\x85\xb1\x90\xe1\x2f\x05\xda\x6c\x0a\x37\x9d\xf5\xbc\x1a\xab\xad\x00\x07\x0f\xbc\x05\xf1\x6e\xbb\x86\x15\xbe\x03\x10\x4a\xbe\xb3\x9a\xd1\xed\x79\x47\xdb\x67\x73\xcb\xb1\xc0\xbe\x5a\x42\x74\x9e\xb9\x46\x7c\x92\x7e\x7d\x20\x78\x45\xec\x57\x06\x11\x9d\xb8\x13\x02\x60\xac\xf2\x1d\x80\x50\xf4\x5d\xbf\xe9\x0b\x52\xf9\xaf\xa1\x0f\x6f\xf4\x12\xcd\x1f\xa4\xd6\x3d\xbe\x78\x4f\x95\x9f\x24\x6c\xd5\xe1\x97\x65\xaf\xbe\x74\xdc\x4b\x18\x01\x30\x56\xfa\x0e\x40\x28\xfb\xee\xa5\xd6\x00\x1b\xbf\xe3\x4d\x89\xc9\x58\x23\xeb\xae\x05\xbb\x4e\x6f\x77\xe5\x2c\x93\x37\xa3\x8a\x1e\xed\xa1\x43\x87\xd4\xb5\x77\xd7\x3e\x18\xed\xbb\xbd\x30\xed\x37\xef\xec\x85\x09\x85\xdf\xc9\xb9\xc4\x4a\x7b\x36\xf5\x38\xd1\xbd\xd7\x1b\xbc\x77\xd9\xe6\xf7\xaf\xe8\x44\xc6\x13\xaf\x55\x1d\x25\x42\x63\x43\x9f\x13\xbc\xe0\x44\x00\x8c\x15\xbf\x03\x10\x4a\xbf\xbb\x69\xc1\x73\x94\x49\xd7\xbf\xb9\x07\xbf\xfe\x4b\x8c\xb2\xf0\xb1\x4e\x4e\xeb\x75\x8d\x5b\x03\x29\xc6\xf4\x66\x91\xf2\xbe\xa5\x57\x10\x00\x63\xd5\xef\x00\x84\xe2\xef\xc8\x2b\x2f\xf9\x5f\xe6\x3d\xfc\x18\x6e\x25\xd3\xdc\x68\x01\xde\x07\xc4\x9a\xaa\x08\x92\xf3\x65\x38\xeb\xe5\x95\xda\x55\xf5\xa8\x10\x00\x63\xe5\xef\x00\x84\xf2\xef\x8e\xbc\xf6\x91\xd1\x79\x7c\xac\xcf\xd8\xbb\x61\xee\xfb\x5a\x0f\x49\x91\xf5\xa5\x3c\x0e\xcb\x22\xf5\x14\xb1\x4e\xc9\xf1\x0f\x77\x76\x3f\x3c\xac\xfe\x1d\x80\x50\x00\xde\x70\xc6\x54\x37\x81\x57\x50\x24\x8f\x58\x98\xf8\x1b\xe1\x7a\x47\x97\xc1\x58\x27\x79\xe6\x32\x65\xef\x62\x9c\x18\xcc\xa8\x01\x21\x00\xc6\x0a\xe0\x01\x08\x25\xe0\x69\x65\xfa\x5e\x79\x5f\x70\x4b\x17\x22\x38\x69\xc7\xef\x99\x75\x85\x78\x44\x55\xad\x2c\x97\x5b\x69\xfb\x59\x93\x73\x08\xc0\x91\x21\x00\xc6\x2a\xe0\x01\x08\x45\xe0\x55\x15\xcd\x1b\xdc\x29\x09\xe8\x99\x92\xfd\x3c\xe9\xb2\xf6\xf5\xde\xc1\x26\xb3\x6f\xb1\xa4\x6c\x21\x87\xb2\x09\x19\x5c\xee\x4c\xec\x2e\x8e\xb1\x12\x78\x00\x42\x19\x78\xd1\xac\x95\x79\x42\xa7\x0f\x5b\x74\xfe\xd4\xaf\xa9\x6e\xeb\x7e\x34\xd4\x7a\x88\x9c\x99\x7f\x2b\xcd\xf3\x66\x6c\x2b\x19\x23\xce\x14\x01\x30\x46\x03\x6f\x2f\x4c\xfb\xdd\x99\xf7\xc2\x84\x42\xf0\x16\xda\x5c\x01\x99\x9b\xec\x33\xde\x2a\x86\x10\xce\xcc\xab\x55\xf5\x66\xc3\x44\x64\x5f\xee\x3a\x20\xa7\x7b\xed\x84\xd6\x79\x98\x10\x00\x63\x45\xf0\x00\x84\x52\xf0\x5e\x4e\xd2\xf7\x1c\xfe\x73\x8f\x4f\xd4\x67\x3b\xe2\xd6\x1b\x81\xd3\x1c\x6a\x8c\x6f\xa4\x2b\x65\xde\x74\x48\x59\xfd\x09\x79\x6d\xb2\xdb\xa3\x62\x55\xf0\x00\x84\x62\xf0\x24\xd8\x5f\x84\x6b\x9f\xd4\xc5\xd7\x06\x5c\x7b\x44\x97\xf8\x5d\x56\x65\xbb\x3c\x24\x94\xf6\xd4\xc3\x10\xf7\x54\x77\x72\xb9\xba\xe3\x08\x80\xb1\x32\x78\x00\x42\x39\x78\x6b\x7c\xd2\xb7\xeb\x27\x7f\x9a\xe7\x9e\x93\xcf\x10\x38\xeb\x24\xfe\xb9\x0f\x88\xbc\x84\x5a\xfd\x59\xb4\x93\x2f\xe6\xb9\x78\xa8\x21\x00\xc6\xea\xe0\x01\x08\x05\xe1\xa5\x12\x26\x7c\x0f\xfa\xcd\xfd\xc0\xda\xe0\x2c\x92\x9a\xe1\xa7\x27\xb1\x32\x43\x53\xef\xea\xdc\x34\x4c\x76\x6b\xe8\xa9\x63\xff\x79\x04\xc0\x58\x21\x3c\x00\xa1\x24\xbc\x86\x22\xd1\xda\xe7\x07\x98\x98\xc9\xd2\xed\x70\xda\x7f\x84\x8c\x4f\xe9\x0a\x9f\x7f\x97\x15\xfb\x3b\xcc\xdc\xc0\xcb\x46\xed\xf8\xee\xa4\x80\x55\xc2\x03\x10\x8a\xc2\x23\xcd\x29\x96\xda\x48\x3d\x5d\xfe\xa2\xda\x37\xcb\x22\xa5\xd5\xfc\xd9\x25\x63\x3e\x89\xd0\x2f\xbd\x63\x16\x4f\x1c\xa3\xf1\x65\xbb\x9f\x39\x56\x0a\x0f\x40\x28\x0b\x8f\x30\x6c\xac\xfd\xa4\xeb\x22\x7d\x42\x4e\xf5\x25\xfb\x16\x07\x49\x01\x9b\x57\x5b\x23\x61\x5b\xe7\x12\x59\xda\xa8\x5f\x7c\x6d\x3d\x80\x00\x18\xa3\x85\xb7\x17\xa6\xfd\x7a\xd7\xbd\x30\xa1\x30\xbc\x81\x2e\x7a\xfb\x73\xec\x7e\x0b\x26\x86\x5d\x76\xdb\xa4\xbf\x4f\xd7\x37\xf7\x0c\x79\x8b\xf9\x97\x99\xa8\x94\x7c\xcb\xe2\x9e\xd8\x9d\xa5\xb0\x62\x78\x00\x42\x69\x78\x82\x37\xab\x1f\x0a\xb7\x5f\xb3\xd9\x7c\x3b\xe9\xe5\xaa\xac\xa1\x75\xa0\xf9\x1c\xb1\x35\xdd\x29\xae\x99\x27\x5f\x18\x59\xd8\xc3\x4e\x22\x00\xc6\xaa\xe1\x01\x08\xc5\xe1\x65\x7f\xff\xe4\x24\x94\x22\xf1\xfe\x14\x49\xd2\x09\xe3\x56\xee\xa2\x41\x21\x5f\x83\x2a\xc9\x4f\x4f\xb4\x8f\x6c\xaf\x2c\x5b\x4b\x98\x21\x00\xc6\xca\xe1\x01\x08\xe5\xe1\x4d\xba\xc8\x31\x53\xf8\x44\xd9\xd4\xc5\x89\xd7\xd4\x59\x1f\x32\xf4\x78\xae\xcb\x1f\x9b\x7f\xb7\xe6\xc4\x41\x2f\x9c\xe7\x4d\x26\x1b\x04\xc0\x58\x3d\x3c\x00\xa1\x40\xbc\x36\x6e\xbb\xeb\xa5\x6b\x06\x83\xfe\x42\x5e\x51\xc5\xf7\x37\x86\xfa\x22\x13\x37\x92\x5f\x49\x29\x31\x93\x6a\x4b\xb1\xe6\xb4\xef\x06\x16\x2b\x88\x07\x20\x94\x88\x97\xe8\xa7\x76\xb3\xe8\x67\x66\xe8\xd0\x51\x1e\x72\x65\x01\x85\x7c\x23\x33\xb1\x80\x16\x82\xb5\x25\xf6\xae\x95\xd6\xe1\xed\x2d\x6e\x04\xc0\x58\x45\x3c\x00\xa1\x48\x3c\xb6\xed\xa9\x49\x7c\xd7\x24\xd3\x54\x3c\xa1\xd8\x50\x61\xed\x4a\x7d\x97\x80\x8e\xa8\x55\xf0\x96\xce\x90\xee\x99\x37\x14\x17\x77\x5b\x49\xac\x24\x1e\x80\x50\x26\x5e\x1d\x5f\x62\x9e\xfa\xab\x9a\x5a\xc1\xa2\xbb\x73\xcc\x61\xbd\x42\x7d\x2c\x67\xe5\xea\x1e\x1f\x12\xc2\x73\x16\x5e\xcf\x2d\xd6\x38\x82\x00\x18\xa3\x89\xb7\x17\xa6\xfd\x56\x77\x7b\x61\x42\xa1\x78\x5f\x8b\xd9\xb4\x13\xe8\x3f\x69\x19\xfe\x36\xf3\x5e\xfc\x34\x65\xf3\x6e\x75\x5b\xf9\x02\xd1\x34\x85\x24\x21\x12\x3b\x93\x4e\xbd\xfb\xe1\x61\x45\xf1\x00\x84\x52\xf1\x7c\xa3\x2f\xdd\x38\x4a\x1a\xf4\xeb\x38\xee\x33\x81\x9e\x14\xef\xe7\x89\x35\x7f\x13\x71\xef\xc2\x47\x21\xfa\x3f\xca\x93\x6d\x47\xe8\x11\x00\x63\x55\xf1\x00\x84\x62\xf1\x8a\x0d\x42\x7a\x05\xe2\xef\x04\xca\xc8\x69\x90\xeb\xde\x50\x39\xda\x9d\x4a\x78\xcd\xec\x98\xfb\xc1\x77\x59\xd9\xef\x3a\xee\x3b\x11\x20\x00\xc6\xca\xe2\x01\x08\xe5\xe2\x29\xa5\x1b\x9d\x9a\xe7\xe7\x09\x70\xea\x48\x32\x4b\x64\xd7\x28\xed\x96\xe6\x24\xaf\x2b\x3c\xb4\xd3\x19\xff\xba\x1c\xd2\x4d\x55\x41\x00\x8c\xd5\xc5\x03\x10\x0a\xc6\x0b\xa7\xf1\x10\x57\xea\xb8\xa2\x37\x99\x5b\xb5\xf6\x6b\x68\x3a\xc3\xa5\x99\xbe\xed\x27\x7c\x2b\xa7\x5a\xb2\x37\x9e\x9f\x82\xd9\x0e\x01\x30\x56\x18\x0f\x40\x28\x19\xef\xe5\xab\x40\x5d\x99\x79\x85\x21\x0d\x77\xbb\xed\xe5\x0e\xb8\xb1\xf8\xd9\x89\xd4\xbb\x03\x1d\x9b\xaf\xa8\x28\xce\xd2\xfb\xbe\x3c\x8d\x00\x18\xab\x8c\x07\x20\x14\x8d\x77\xd4\xf4\xf7\x6c\xab\xed\xa5\xc0\x8c\x0e\x0f\xd6\x70\x65\x8a\xac\xdf\x65\xdd\x90\xfd\xe9\x1d\xd5\x47\x6a\x4c\x61\x14\x63\xad\x17\x11\x00\x63\xa5\xf1\x00\x84\xb2\xf1\x34\x75\x6c\xda\x0b\x4c\xb5\xc9\x5d\x58\x64\x3f\xbd\x5f\x1d\xee\xad\x98\x25\xd7\xd3\x8b\x76\xa1\x6e\x7e\x64\x44\xef\xc8\x53\xbd\xdb\x55\x61\xb4\xf1\xf6\xc2\xb4\xdf\xfe\xc7\x5e\x98\x50\x38\x5e\xd7\xc5\xa9\x90\xe2\xc3\xc9\x2a\xd6\xe4\x82\x33\x1e\x2d\xc9\x71\xc4\xca\xc5\xa9\xf3\x0f\x2a\x5b\x7e\x7b\x7f\xc8\x66\xec\x1b\x92\x44\x00\x8c\x15\xc7\x03\x10\x4a\xc7\x3b\x00\x7c\xe9\x2f\x2e\xcd\xbb\xe6\xb3\x9d\x54\xeb\xb7\xce\x2d\x30\x19\x66\xfa\x9a\xd7\xfd\x58\x39\x8e\x51\x45\x7f\x40\x89\xc7\x11\x01\x30\x56\x1d\x0f\x40\x28\x1e\xaf\x34\x02\x9c\x5e\xfc\xe0\x16\xaf\xc0\xb3\xd3\x14\x2e\x2b\xa8\x6d\xcf\x3a\x2a\x7b\x4b\xeb\x5e\x50\x56\x1c\xa7\x13\xa7\xd4\xe7\xdd\xf6\x08\x2b\x8f\x07\x20\x94\x8f\x47\xaa\xc8\x5e\x64\x78\x27\x81\x3c\x33\x16\x11\x48\x0b\x33\x23\x2b\xbd\x7a\x95\x67\x73\xe3\xd9\x9d\xdc\x14\x9a\x44\xde\x25\x21\x76\x04\xc0\x58\x7d\x3c\x00\xa1\x80\xbc\xe8\xa5\x11\x59\x53\xe2\x07\x5b\x02\x13\x46\xb7\x9b\x0e\x18\x4c\x9c\xe6\x6d\x31\x91\xaf\x90\x5b\x9d\x7e\x56\x1d\x43\x7e\xe6\x04\x31\x02\x60\xac\x40\x1e\x80\x50\x42\x9e\xa4\xc8\xad\xe5\x04\xe3\x26\x67\x7f\x0b\xbf\x99\x6f\x04\x8d\x27\x43\xb9\xf9\xbe\xb0\x06\x33\xa9\x5a\x37\x56\x30\x8a\xe8\x1d\xe7\x41\x00\x8c\x55\xc8\x03\x10\x8a\xc8\x8b\xb6\x34\xb2\xba\x2a\x2d\xbb\x2c\x76\x3c\x3e\x84\xdd\x88\x92\x1e\xef\xaf\x61\xd6\x1f\x95\x38\xb0\xfd\x55\x44\xea\x66\xc8\x75\x18\x01\x30\x56\x22\x0f\x40\x28\x23\xaf\x33\x48\x38\xa1\x8e\xe0\xd9\xdd\xb0\x97\x77\x5f\x9b\x59\x91\x7f\xff\xf5\x41\x70\xdd\xf8\x71\x8c\xa3\x2d\x59\xc5\x9f\x9f\x09\xf5\x26\x08\x80\x31\x1a\x79\x7b\x61\xda\x6f\x87\x70\x2f\x4c\x28\x24\x6f\x2e\xde\xac\x6d\x70\xbe\xbc\xa5\xaf\xc0\xd4\x66\x58\x14\xe7\x23\x29\xd3\xbd\x5c\xee\x71\xac\x83\x13\x3e\xe7\x77\xd5\x97\x99\x06\x01\x30\x56\x24\x0f\x40\x28\x25\xcf\xb0\xc3\xea\x7b\x99\x57\x76\x9c\x52\x67\x5f\xf5\x64\x40\x4b\x0b\x59\x20\xf5\xfb\x89\x8b\x37\x26\xf3\x3c\x8b\x71\x0b\x69\xd5\xbb\x8b\x51\xac\x4a\x1e\x80\x50\x4c\x9e\x8a\x90\xfc\xb3\x3e\xb6\xf3\x14\x37\x3f\xda\x06\xd7\xd9\x7d\xe9\x67\x2e\xd2\x3a\xf9\x5b\x2e\xae\x73\xb2\x77\x96\xbc\xef\xe7\xba\x38\x02\x60\xac\x4c\x1e\x80\x50\x4e\xde\x0b\xa9\x12\x93\x18\x66\x9d\x48\x57\xcb\x93\x59\x95\x15\x53\x41\x1a\xc5\x37\x2e\x50\x65\xdd\xb4\xac\x5b\xb7\x19\xa2\xbe\x1f\x65\x81\x00\x18\xab\x93\x07\x20\x14\x94\x97\x07\xd7\x33\xaa\x96\x04\x2f\xf7\x29\x58\x2f\x13\x46\x19\x25\x9d\x5c\x57\xf3\xff\x7d\x51\xc0\xbe\x5f\xe4\xf0\x77\x9e\xd4\x2d\x63\x04\xc0\x58\xa1\x3c\x00\xa1\xa4\x3c\x3e\x09\xe2\xdb\x47\xcb\x94\x4f\x6c\xe7\x1c\x34\xaa\x1a\x3b\xb2\x6a\x76\x66\x86\x2a\xcb\xea\xdb\x4f\x05\xe7\x1a\x4b\xca\x05\x5b\x5a\x04\xc0\x58\xa5\x3c\x00\xa1\xa8\xbc\x7c\x25\xfd\x2c\x3f\xe1\x57\xb6\x7c\xe4\x0f\x3d\xcf\xa7\xd8\xad\x33\x85\x5f\x6d\xb5\xe1\x08\xff\x95\x78\xcf\xe2\x50\x96\xa4\xc8\xee\xf2\x01\x2b\x95\x07\x20\x94\x95\x37\x5b\xc4\xc0\x9a\x38\x45\xa2\x12\x77\xac\xb0\xcc\xe5\xe8\x53\xa6\x39\x53\x12\x8a\x2f\xf1\xd0\x41\x5f\xba\x0f\xaa\x41\x2d\x02\xaa\x08\x80\x31\x5a\x79\x7b\x61\xda\x6f\x0f\x7d\x2f\x4c\x28\x2c\x6f\x76\xf3\x69\x05\xff\x07\x27\x1c\x5d\x1c\xcb\x89\x28\xef\x03\x67\x0e\x04\xca\x89\x95\x92\xdc\x16\x18\xa4\x2f\x75\x98\x8f\xfd\xb5\xfb\x82\xb0\x62\x79\x00\x42\x69\x79\xf6\x24\xac\xd4\x06\x55\x3c\x14\x96\x7e\x0e\x5b\xf7\x3e\xa7\x4c\x12\xc5\x0c\x2b\xdd\xe1\xae\x0f\x27\x5e\xda\x39\x26\xd9\xb8\xc2\x87\x00\x18\xab\x96\x07\x20\x34\x97\x57\x1e\x97\x3e\xf8\xa1\x2b\xe8\x03\x4b\x8f\xe7\xb7\x6c\xc6\x25\xad\xe3\xed\xb1\x07\xba\x49\xc5\x04\x1c\xec\x99\x45\xef\xdb\xed\xb6\x47\x58\xb9\x3c\x00\xa1\xbc\xbc\x88\x2c\xb9\x8c\x1b\x77\x9d\x82\x52\x84\x11\xbd\x09\x64\xbb\xd7\xb1\xe0\xcb\xfd\x53\x8f\xb3\x72\x39\xcf\xdb\x7c\x46\x18\x2f\x6b\x20\x00\xc6\xea\xe5\x01\x08\x05\xe6\x09\x33\xc7\xc9\x7b\x4b\xc6\x52\x01\x37\x25\xc2\x23\xea\x63\xbd\x22\xd3\x27\x43\xa2\x7e\x1a\x2b\x9b\xe5\x90\x26\x51\x25\xdd\x61\x43\x00\x8c\x15\xcc\x03\x10\x4a\xcc\xb3\x33\x49\x4d\x8c\x02\xf7\x47\xdc\x1d\x03\x10\x6a\x69\x19\x97\x81\x9b\xf8\xf3\xa3\xa5\x7d\x3e\xf2\x34\xae\x7f\x84\xed\x2d\x77\xbb\x11\xac\x62\x1e\x80\x50\x64\x5e\x8c\x52\xbd\x71\x02\xf9\xdc\xeb\xeb\x73\x72\x61\x39\x2b\x86\x9a\x8f\x54\x4d\xdf\x99\x37\xfc\x29\x33\x90\x16\x24\x26\x67\xd2\xdd\xfd\x5e\x61\x25\xf3\x00\x84\x32\xf3\x2c\x36\x12\x75\xb2\x9d\xc2\xf9\xec\x59\x42\xe3\xf4\x23\x5c\x6d\xe1\x80\xce\xe8\x65\xc6\xa9\x22\x9e\x55\xb5\x6b\xf7\xba\x68\xf5\x10\x00\xff\x47\x33\xcf\xdb\xed\x30\xb5\x53\xd3\xe0\xfa\x57\x8a\xb0\xc1\xad\xfe\x09\xbf\x1d\x69\x35\xe3\x87\x9e\x3e\xc1\x27\xc5\x48\x96\x22\x95\xb6\xb2\x50\x87\x7d\x96\x75\x43\x95\xe9\xb7\x7e\xd2\xf6\x59\xda\xa6\xca\x34\x25\x7e\x7f\x48\x23\xa7\xd8\x55\xf2\xe5\xf5\xc1\x9f\x57\x59\x59\x23\x82\x89\xfe\x1a\x1a\xee\x5c\xcd\xe0\x19\x9a\xc0\xfe\xfa\x19\x29\x11\x8b\xbb\xa3\xb3\xe1\x70\xea\xb5\x16\x63\x33\xa2\x89\x9d\x1b\x36\x45\xd9\x26\xea\x7f\x0d\x4d\x8d\x12\xbd\x28\x1b\x31\xc1\x79\xa0\x8f\x83\xf4\xf7\xa3\xdb\x9a\xb2\xfa\xa4\x9f\x0f\x8b\xfc\x2e\x9f\x43\x8a\xf2\x0e\x15\xc7\xfe\xfd\xdf\x9a\xe9\xb6\x8a\x3c\x25\xb6\xbd\xcf\x57\x48\xc9\x9b\xee\x1e\xd3\x89\x70\x52\x96\x63\xdf\x51\x2c\xe9\xec\x37\xc9\x8b\x25\x86\xf5\xff\xfe\x65\x9f\xd2\x54\x35\x98\xf2\xb5\xb5\x2a\x8e\x6e\x4d\x8e\x3d\x53\xda\xdb\xad\x7a\x89\x6a\x41\x24\xd9\x8b\x3a\x78\x1b\xf6\x10\x49\x78\xf1\xf7\x19\xe6\x65\x98\x66\x75\x01\xc9\x17\x7c\xe0\xd1\xf7\x94\x3f\xeb\xb6\x44\x88\xfc\x59\x8a\x3b\x44\x76\xf1\x77\x92\xec\x7b\x2e\xb0\x29\xfc\x35\x34\x71\x2e\xff\x6e\x58\x9a\x47\xa0\x4c\xb0\xec\xdb\x0f\x16\x59\x1e\x0a\x2a\xe7\x64\x9f\x3c\xef\x29\xb2\xe1\x66\xd4\xb4\xbb\xe1\x72\xf8\xef\x5f\xf6\x91\x04\x82\xaa\x13\xef\x0e\x9e\x6e\xfa\xe1\x3c\xc4\x3a\xf7\xe6\x2d\x3d\xdf\x89\x82\x75\xf2\x8c\xa4\xbc\xe1\x94\xa9\x7e\x73\x97\xff\x1d\xf6\xed\x77\x55\xf7\x66\x34\x14\x9a\x67\xeb\x6c\x92\xd3\xab\x35\x1c\xf5\x51\x90\x9f\xa8\x54\xaa\x67\x62\xec\x84\x6d\xd4\x5a\x05\x4f\x72\xac\x31\x3e\x8e\x75\x99\x44\x0e\x01\x30\x56\x34\x0f\x40\x28\x35\xef\x86\x2b\x39\xc3\x43\x16\xe8\xc8\xf1\x95\x5a\xaf\x21\x70\xb5\xc8\x3b\xa2\x70\xf0\x36\xcc\xac\xf1\x8a\x77\x23\x25\x47\x5f\xd5\x10\x01\x30\x56\x35\x0f\x40\x28\x36\x4f\x9f\xe2\xf6\x9a\x99\x74\x3e\xad\xe9\x72\xf7\xbd\x1f\xf2\x0e\xdb\x7e\x3f\xaf\x2b\x4e\x96\x9c\xff\xbd\x41\x69\xa6\xaa\xfa\xe2\xbb\x3b\x02\x60\xac\x6c\x1e\x80\x50\x6e\xde\x45\x7a\xc6\xf6\xeb\xbc\x45\x97\xf9\xdd\x78\xaa\x6b\x22\xd4\x8f\xfb\xd6\x46\xe0\xe9\x17\x8e\x89\x5d\x49\x3f\x14\x46\x94\xf2\xc5\x05\x01\x30\x56\x37\x0f\x40\x28\x38\x2f\x8d\xa5\x03\x6f\x68\xa5\x98\x42\x96\xf7\xdd\xe2\x45\xbc\x59\xa0\xed\x95\x72\xc6\xd4\xcc\x2d\xef\x7c\x3d\x30\xb8\xf6\xe8\x88\x36\x02\x60\xac\x70\x1e\x80\x50\x72\x9e\xd4\x93\xf2\x36\x76\xc5\xb7\x6d\x57\x78\xda\x5b\x9e\xb5\x45\xe0\xdb\x7e\xcc\x30\xa6\x15\xea\xd2\x20\xdf\x92\x1d\xb4\xae\xcb\xd9\x20\x00\xc6\x2a\xe7\x01\x08\x45\xe7\x55\x53\x9f\x3a\xb2\xd1\x50\x37\x7f\x8a\x42\x75\x9e\xe4\x1a\xd7\x40\x58\x37\x1c\xc0\xb9\x52\xec\x5e\xce\xcb\x2e\x13\x44\xf3\x67\xf7\x33\xc7\x4a\xe7\x01\x08\x65\xe7\x29\x98\x0a\x58\x1b\x39\x8e\xcc\x4d\xb2\x3b\x35\x66\xf4\xa9\x8d\xdc\x1e\x13\x35\x50\x2a\x21\xc9\xcf\x2d\x48\xe1\x4f\xfe\x73\x95\x01\x01\x30\x46\x3b\x6f\x2f\x4c\xfb\xcd\x3b\x7b\x61\x42\xe1\x79\x43\x38\x31\x64\x87\x9b\xe6\x4d\xe7\xbd\x0c\xc2\xda\x5b\xad\x7e\x83\x0d\xb9\x8d\x56\xad\x8b\xb4\xa4\x97\xce\xb5\x14\x71\x7f\x74\x40\x00\x8c\x15\xcf\x03\x10\x4a\xcf\x7b\xef\x05\x5a\x3a\xed\x69\x17\xfc\xaa\xa5\x97\x39\xdc\xf9\xe8\xaf\x5b\xda\xae\x48\x21\xe1\xd3\x32\xa4\xbf\x70\xaa\xb4\x22\xbb\xb7\x3c\xac\x7a\x1e\x80\x50\x7c\x1e\x89\x13\xa1\x75\x69\x83\x18\x8b\xd1\x29\xa2\xad\xaf\x5c\xa6\x0d\x6c\x63\xf2\x3e\x87\xbd\x6e\x45\xde\xad\x8a\x5c\x2a\xe7\xf6\xd2\x41\x00\x8c\x95\xcf\x03\x10\xca\xcf\xcb\x2d\xb8\x54\x21\xcc\x68\x44\xba\x9c\x30\xc4\x5f\xfb\xf6\xf3\x9c\xdf\xdd\x80\x41\x96\x5f\xb9\x15\xe3\x73\x2a\x53\x05\x26\xa3\xba\x08\x80\xb1\xfa\x79\x00\x42\x01\x7a\x0e\x5c\x13\xe7\xca\xa4\x65\xe2\xc2\x4f\x49\x7e\x2c\x9d\x8f\x79\xfc\x55\xb1\xac\x7b\xc4\x41\x89\x41\xc3\x6f\xf8\xf7\x87\xdc\x99\xdd\xc9\x0d\x2b\xa0\x07\x20\x94\xa0\xf7\x3a\x93\x29\x82\xf0\xdd\xed\x5b\xaf\x0e\x1d\xa6\xee\x7a\xaa\xdb\x53\xff\x38\xd7\x31\xc0\xf1\xb3\x5d\x82\xe6\x64\x8d\xfe\xd4\xca\x09\x04\xc0\x58\x05\x3d\x00\xa1\x09\x3d\xde\xb4\xaf\x55\x6f\x49\x82\x59\xc0\x05\x39\x8b\x8f\xcf\xa9\x5c\x6b\xe5\x28\xbc\x6e\x69\xb0\x99\x56\x3e\x33\x65\x4e\x7c\x46\x84\x00\x18\x2b\xa1\x07\x20\x94\xa1\x27\xe4\x74\xed\xb5\x98\xc3\x85\x9e\x9c\x64\x26\x8d\x99\x56\xae\xf4\xe2\xb2\xb2\xd0\x6f\x2b\x7e\xee\x5b\xe3\xa2\x49\x0a\x35\x3c\x1c\x08\x80\x31\x1a\x7a\x7b\x61\xda\xef\xce\xbc\x17\x26\x14\xa2\x27\x3d\x3e\x74\x69\x2c\xed\xa3\x46\x25\xa7\x47\xc6\x42\x7a\xa8\x62\x0c\x43\x20\xd5\xb0\xed\xe0\xed\x4f\xa5\x35\xb6\xde\x57\xcf\x11\x23\x00\xc6\x8a\xe8\x01\x08\xa5\xe8\x31\x7d\x3d\x00\xc8\x6b\x2c\x6e\x89\xf5\x10\x35\x7b\xb7\x6f\xba\xc6\x69\x76\xaa\xdf\x3e\x32\xfc\x9e\x6d\x4a\xf5\x4a\x13\x4b\x1e\x01\x02\x60\xac\x8a\x1e\x80\x50\x8c\x9e\x30\x44\x48\x63\x24\x93\x97\x19\x14\x7c\x50\xe9\xec\x6a\x4a\x84\xba\xe6\xc1\x0d\x23\x45\xba\xbe\x8e\x07\x5a\xe7\x86\x85\xa9\x09\x11\x00\x63\x65\xf4\x00\x84\x72\xf4\x6c\xed\x5f\xf9\x3a\x5e\x70\xd5\xb9\xd4\xf8\x35\xb9\xb8\xe0\xf3\x91\x63\xb8\xa3\x0d\x3c\xd7\x3f\xc4\x10\xb3\xab\x74\xde\xfc\xd9\xb2\xdb\x6b\x63\x75\xf4\x00\x84\x82\xf4\x62\x6e\x50\x3b\xc4\xb8\xce\x31\x5b\x2e\x3a\xf2\x54\x0a\x24\x17\x1c\xa7\x5f\x6a\x4d\x8f\xb8\x74\xaa\x38\xda\xe5\x71\xd0\x59\x7b\x67\x04\xc0\x58\x21\x3d\x00\xa1\x24\x3d\x1c\xf1\x96\xac\x77\x0a\xf0\xe1\xbb\x45\xb0\xcd\xdf\xa2\x8c\x6b\x5b\x2e\xac\x1c\x7f\x7f\xb2\x43\x9e\xe5\xeb\x27\x03\xd6\x9d\x73\x08\x80\xb1\x4a\x7a\x00\x42\x51\x7a\xdb\x2b\x36\x13\xe7\xe7\xa0\x31\x84\xe3\x3d\x21\xbc\xd9\x69\x36\x9e\x73\xeb\x57\xe2\xfd\x9b\x37\xa7\xa6\x86\xa2\xf3\x57\x0e\x3b\x21\x00\xc6\x4a\xe9\x01\x08\x65\xe9\x91\x52\x16\x3e\x39\x1d\xc7\xfe\xf8\x5b\xb5\xd7\xc5\x7a\x55\xee\x6d\x1d\x63\x37\xfb\x6f\xea\xa2\x15\xb7\xb3\x8c\x65\xfe\x1c\xbc\xb3\xbb\xc8\xc7\x68\xe9\xfd\xef\x0f\x1c\xf6\xe9\x5d\xf7\xc2\x84\xc2\xf4\x56\x44\xa3\x69\x18\x5f\xc4\xb4\x76\x2e\xf2\x15\x30\x35\xd2\xad\x49\x70\x44\xaf\x51\xcf\x89\xbe\xf0\xab\xda\x7a\xeb\x9e\xd7\x78\x11\x01\x30\x56\x4c\x0f\x40\x28\x4d\xaf\x2f\xa1\x4c\x8a\xbb\xed\x41\xc2\x35\xdb\x5b\x83\xfa\x64\x4d\x1f\x5d\xda\x8b\xbc\x71\xad\x7a\xf7\x95\x5f\x89\x29\x5b\x64\x25\xe3\x11\x00\x63\xd5\xf4\x00\x84\xe2\xf4\x46\x97\xec\xed\x8a\x15\x0f\x90\xbe\xbd\x2f\xf2\xa1\xa3\x5a\xed\xe8\x6a\xe8\x8c\xfd\x70\xaa\x3b\x75\xf6\x8b\x4c\x96\xb9\xf3\xee\xbb\xb3\x14\x56\x4e\x0f\x40\x28\x4f\x2f\xe9\xa3\x1f\xd7\x8f\x90\x16\x51\xa7\x69\xb3\x82\x21\xbf\xfa\xb9\xaa\xda\xab\xcf\xe3\xa5\x8b\x64\x4e\x9e\x19\xbc\x19\xe6\xfe\x4d\x16\x01\x30\x56\x4f\x0f\x40\x28\x50\xef\xc9\x97\x47\xeb\x9b\x3e\xcf\x63\x12\xc1\x6b\x31\xb7\xa3\xa5\x2c\xcc\xd2\x75\x0f\x1c\xbb\x4c\x93\xfa\x7c\xa6\xcb\xbd\x83\x8f\x53\x21\x00\xc6\x0a\xea\x01\x08\x25\xea\xa9\xec\x74\xfb\x73\x28\xf1\x88\xdc\x99\x7e\x72\x71\xe2\xfd\x74\x3c\x6f\xad\x0e\x0f\xcf\x99\x6f\x02\x8c\x47\xa2\x88\x0f\xb3\x46\xd1\x20\x00\xc6\x2a\xea\x01\x08\x45\xea\x6d\x33\x44\x0c\xdc\xa4\xed\x7b\x18\x99\x6b\x73\xf3\xa7\xdb\x79\xe1\x58\xfd\xe3\x85\xe6\x4f\x32\x4d\xf8\xa2\x5b\x8a\x13\xce\x39\x69\x21\x00\xc6\x4a\xea\x01\x08\x65\xea\xad\x0c\x7b\x92\x08\xeb\x2c\xb4\xf3\xb5\xba\x6b\x1b\x86\xff\x6e\x6c\xcc\x7e\xfe\xd4\x4a\x35\x84\xff\xd1\xd3\x5f\xb8\x42\xa9\x1d\x5b\x04\xc0\x18\x4d\xbd\xbd\x30\xed\xb7\xba\xdb\x0b\x13\x0a\xd5\x93\xc9\xbf\x14\x38\x1f\x40\x6d\x90\xde\x32\xb5\xd4\x52\xcc\xbe\x1e\x21\xfa\xa9\x20\x5e\x87\xad\x8f\x49\xcd\xc7\xe9\xdc\x71\x81\xdd\x99\x10\x2b\xaa\x07\x20\x94\xaa\x77\xb5\x75\x7d\xb5\xf6\x89\x83\xc8\xcb\x75\x4d\x7d\x62\xdc\xb7\x37\xa7\x48\x3e\xd6\xbd\x0b\x1e\x3b\x90\x6d\x9e\xe4\x60\xf8\x69\x71\xb7\x05\xc3\xaa\xea\x01\x08\xc5\xea\xdd\x6b\x8f\xad\x9b\xa6\x72\xb3\x14\x52\xd2\x95\xd9\xd1\xfb\x73\xe3\x8e\x42\xff\x83\xa5\x39\xe6\x9a\x42\xcb\x24\xbd\x82\xc2\x30\x4b\x04\xc0\x58\x59\x3d\x00\xa1\x5c\x3d\xa2\x03\x13\x5a\x8a\x44\xa6\x02\x67\x66\xcb\x2f\x1c\x7c\x3d\x92\x55\x7f\x9e\xec\x90\xe5\x8d\x8f\xf4\x8a\xbc\x52\xd3\x8b\xb0\xbb\x24\x02\x60\xac\xae\x1e\x80\x50\xb0\x9e\xc0\x4b\x83\x7a\x26\x96\x88\x89\xb3\x47\x92\x8b\xb8\x9d\x3f\xd6\x4c\x7f\xdd\xd4\x7c\x59\xc1\xf3\x94\xb9\x6a\xca\xa2\xc6\xf7\x97\x3d\x02\x60\xac\xb0\x1e\x80\x50\xb2\x9e\x30\x87\xfc\x1a\x34\xaf\x3f\x6c\xf0\x53\xb0\xa3\xe2\xcb\x82\x4c\x21\x3b\xbf\x22\x7b\x69\x0e\xf2\x89\xad\xda\x6e\x2e\xf4\xe8\x29\x04\xc0\x58\x65\x3d\x00\xa1\x68\xbd\x10\x7d\x97\x0f\x55\xc6\x4b\x07\x0f\x29\x96\xcf\xbb\x05\xff\xfe\x99\x9f\x15\x62\xfa\xe2\xc7\xa7\xa1\x1c\x43\x61\x71\x6b\x4b\x6d\x57\x04\xc0\x58\x69\x3d\x00\xa1\x6c\xbd\x0e\x0d\x6e\x51\x6a\x61\x2f\x79\xc7\x93\x14\x6a\x5c\x3e\xe6\xf5\x8c\x5e\xe6\xdd\x1b\x97\x4f\xf7\x7f\x3e\xd5\xd5\xe5\x9e\x84\x23\x45\x00\x8c\xd1\xd6\xfb\xdf\xd3\xc6\xfb\xec\x7f\xec\x85\x09\x85\xeb\x05\xb5\x9c\xd4\xcb\x86\x0f\x31\x84\x0d\x92\x0b\x9d\x30\x33\xf4\xe2\x6a\x3f\x7e\x7a\xc0\xea\x4f\x15\x95\x57\x64\xe1\x27\xc8\x44\x1c\x01\x30\x56\x5c\x0f\x40\x28\x5d\xef\xd3\xf9\xf8\x84\xa2\x95\xa1\x21\xd6\x57\x6f\x11\xd3\x9f\x83\x17\x46\x1b\x9a\x1d\x2a\x7f\xa4\xbf\xad\xac\x71\x5e\xf5\x63\x75\xb2\x42\x00\x8c\x55\xd7\x03\x10\x8a\xd7\x33\x38\xe1\xf5\xca\xb0\xfd\xf6\xd5\xea\xa5\x4a\x99\x96\xe0\x5b\x04\xcd\x05\xef\xab\x47\x76\xae\x95\x5d\x97\x48\xbf\x1c\x97\xf8\x13\x87\x00\x18\x2b\xaf\x07\x20\x94\xaf\xe7\xcc\xab\xc0\x99\x5c\xf1\xc2\xc2\xc2\xea\xae\x9a\xf8\x9b\xde\xd0\x4e\x16\x27\xee\x81\xaa\xd0\x7c\xa5\x0e\x22\x4f\xe5\xaa\x12\x61\x04\xc0\x58\x7d\x3d\x00\xa1\x80\xbd\xbb\x06\x6b\x74\x83\x1c\x4d\x37\x34\xa5\xc6\x47\xd2\x44\x9f\x64\x5a\xa6\x59\x04\xc4\x1d\xbe\x75\xb1\x53\xf7\xea\x78\x25\xfb\xf3\xc3\x08\x80\xb1\x02\x7b\x00\x42\x09\x7b\x0b\x62\xf6\x0d\x49\x03\x0d\x67\x28\xc5\xac\x4c\x0b\xcc\xbe\xb4\x8d\x54\x8f\xfa\x6f\x9a\x50\x12\xdf\x7d\xde\xc3\x48\xad\xea\xc0\x8a\x00\x18\xab\xb0\x07\x20\x14\xb1\xf7\xca\x64\x48\x88\xc2\x82\x4f\x55\xab\x4a\x4e\x6c\xde\xa5\x6e\x72\x22\xf1\x56\xfb\x83\x8e\x1b\x95\x4c\x7e\x1d\xaa\xcb\xd3\x2a\xec\x08\x80\xb1\x12\x7b\x00\x42\x19\x7b\xa4\xbd\x06\x5a\xc1\xe3\x5e\xbd\x05\xad\xd4\x4a\x0c\x6e\x1f\x96\xf5\x9b\x95\xeb\x04\x8f\x3d\x92\x55\xe0\x3d\x1a\x0e\xaf\x7a\xb2\x20\x00\xc6\x68\xec\xed\x85\x69\xbf\x1d\xc2\xbd\x30\xa1\x90\xbd\x1d\xf1\x2f\x62\xed\xc9\x8f\x95\xef\x1a\xb7\xa4\x44\x9c\x6b\xde\xb9\xdd\x94\x3c\x59\x6c\x21\x98\xc2\xa6\x6b\x20\xff\x81\xbb\x61\xf7\x8b\x8e\x15\xd9\x03\x10\x4a\xd9\xf3\xae\x65\xc1\x5f\xb4\x64\xd4\xfe\x19\x48\xb1\xf9\xfc\x1e\xa4\x5c\xd3\x70\xad\xd6\x43\xb2\xf6\xb7\x60\x27\xd2\x4c\x90\x31\xbf\x3b\x4b\x61\x55\xf6\x00\x84\x62\xf6\xd4\x1b\x0f\xb3\xcd\x20\x44\xed\xa1\x26\x9e\x27\x25\x84\xc2\x27\x18\xb4\x44\xda\x22\x2b\x3e\x3e\x7f\x27\xf7\x38\x25\xd1\xe8\x9a\x3c\x02\x60\xac\xcc\x1e\x80\x50\xce\xde\x17\xfb\x1e\x01\xba\xf9\x12\xc3\xe5\xca\xe1\xb1\xd8\x06\x84\x7c\xd2\xee\x1b\x27\x7f\x15\x01\xe2\x59\x79\xc1\x32\x3e\xfa\x1a\x35\x02\x60\xac\xce\x1e\x80\x50\xd0\xde\x27\x19\x2e\xc0\x77\xe9\xf4\x76\x8a\x4f\xe2\xf5\xc3\x59\x0e\xfe\xb7\xcf\x55\x3f\xbe\xa6\xf0\xd3\xa3\x8a\xf7\x70\xf9\xbd\xcf\x6d\x76\x08\x80\xb1\x42\x7b\x00\x42\x49\x7b\x95\x2c\x53\x5b\x3e\xc3\xcd\x0e\xe4\xcc\x7c\x43\x1f\xdf\x0e\x86\xd4\xf9\xba\xb3\xbc\x6e\xea\xa7\x33\x78\x6c\x26\x78\x16\x3f\xb1\xdb\x8d\x60\x95\xf6\x00\x84\xa2\xf6\xec\x07\x47\xf2\xe7\x58\xe3\x2e\x3f\x43\x6a\x17\xcc\xf8\x25\x57\x47\x6b\x5b\xdc\xb4\xa2\x7a\x75\x42\x7e\xc8\x5d\xd5\x6d\x4a\xdb\xbd\x8b\x63\xa5\xf6\x00\x84\xb2\xf6\xb4\x7e\x12\xd4\xec\x10\x76\x46\x78\x58\x31\xcb\xdd\x9e\x3b\xad\xe0\xfe\xd3\x6d\xc3\xe5\x4f\xca\xf7\x94\x9d\xa9\xd5\x44\x0b\x07\x72\x04\xc0\x18\xad\xbd\xff\xfd\xb2\x6f\x9f\x3d\xf4\xbd\x30\xa1\xb0\xbd\xc3\x3d\xf9\x2b\x5b\xb7\xd7\x14\xdb\x94\xf2\x4e\xf8\x1f\x7e\x4c\x29\xa5\xc6\x9b\x44\x97\x62\x4e\x93\xe3\x41\x18\x5b\x7c\x55\x64\x77\xcd\x84\x15\xdb\x03\x10\x4a\xdb\x9b\x54\x08\x78\xfe\x5d\x4c\x23\x46\xe6\x2b\xd0\xf0\xfc\x53\x19\xa2\xc2\x32\x77\x58\x5c\xe8\x93\xd7\xa7\x6e\x8b\x49\xe2\x2c\x16\x4e\x04\xc0\x58\xb5\x3d\x00\xa1\xb8\x3d\x9a\xe0\xea\xf8\xba\xdb\xef\xd8\x6c\x7e\xdd\x57\x93\x31\xf2\x5d\x50\xac\x3a\xf2\x8b\x3d\x34\xef\xd7\x0b\x02\x72\x95\xf7\xd7\x6e\x02\x04\xc0\x58\xb9\x3d\x00\xa1\xbc\xbd\x45\x2d\x7b\xaa\x0c\xb6\xca\x91\xdc\xb3\x81\x8e\xea\x1f\x34\xf9\x23\x5b\xd7\x43\x03\x93\x26\x12\x23\xce\xb5\x9c\x16\x37\xb5\x3d\x8f\x00\x18\xab\xb7\x07\x20\x14\xb8\xf7\x63\xa2\x26\x6e\xf6\xf7\xcb\x2b\xc7\x23\x15\xec\xe8\x49\x8c\x2a\x1a\x17\xe2\x89\x02\xf3\xce\xaf\xf6\x4e\xb5\x70\xbc\x27\x0b\xd9\x0d\x2c\x56\x70\x0f\x40\x28\x71\x6f\x76\xba\x63\xb0\x33\xea\xd6\x24\xe9\xe9\x7e\x66\xde\x3f\x72\x69\x3f\x9a\x3d\x07\xf1\x01\x54\x29\x3d\x36\x85\x35\x9f\x7d\x67\x77\x27\x1e\xac\xe2\x1e\x80\x50\xe4\xde\x17\xa2\x4d\x4f\x39\xe2\xa5\x83\xae\x7a\x06\x4c\x4f\x47\x1f\x25\x9a\xf4\x85\xbc\xc9\x93\x0b\x49\x2b\xaa\x11\xa4\x8b\x17\x5d\xde\xed\x14\xb0\x92\x7b\x00\x42\x99\x7b\x3b\x03\x7a\xea\x67\xa5\xbf\xe8\xd4\x7e\xcc\x51\x3a\xe0\x99\xcc\x58\xca\xd6\x66\x1b\xbe\x71\x1c\x72\xb6\xbf\x22\x15\xae\x4e\x6e\x8c\x00\xf8\x3f\x9a\x7b\x56\x14\xcc\x8d\x7d\x16\xf8\x59\x55\x9c\x6a\x1f\x93\x96\x6a\x90\x22\x4f\x26\xfd\x62\x13\xb3\x58\x06\xb1\x36\x99\xd0\xeb\x6c\x32\xd4\x61\xdf\x11\x61\x9b\xeb\xf3\x9d\xf6\xc7\x20\xbe\x91\x2b\x41\x81\x35\x42\x02\xb3\xca\xfc\x61\x42\x3d\x55\x24\x17\xa2\x3e\x12\xbd\x20\xe6\xff\x6b\xa8\x2b\x13\xdf\xcb\xa4\x93\x1d\x8d\x1a\xf5\x41\x41\x1f\x48\x32\x78\xbc\x1d\x97\x93\x3f\xd0\x7d\xef\x4a\x01\x04\xa5\x12\x22\xd5\x7f\xff\x8b\x26\x42\x9c\xaf\xa8\x3b\xd8\x39\x40\x68\xff\xdd\xf5\x8c\xa4\xf6\xcb\x8f\xe3\x1f\x84\x67\xb8\x88\xa5\x65\xdd\x83\x0b\x2c\x9f\xac\x4b\xfc\x35\x54\x6e\x31\x22\x5f\x78\x9e\x62\xb2\xd6\x73\xd4\xb4\x54\x66\x72\x31\x85\x72\x2d\xcf\xf7\x94\xd0\x95\xcb\x45\x2e\xb4\xeb\x4f\xe8\x92\xff\x1a\x5a\x7e\x56\xf6\x31\xe7\xce\x82\x0c\x4b\xcf\xf8\xd7\x1d\xc9\x8a\xc6\xba\xb9\x95\xc4\x2a\xee\x4b\xb7\x05\x8f\xf8\x19\xb3\xfb\x7f\x32\xfe\x6b\x28\x13\x3d\x2f\xf3\xf6\xa7\xd4\x96\xae\x70\x81\x05\x6b\x05\x97\x06\x7a\xa1\xb4\x80\xa3\x95\xb3\x86\x34\x74\xf9\x17\xe8\xec\x12\x63\xff\x1a\x7a\xd4\x32\x84\x77\xb4\xe2\x9e\x7f\x47\xfe\xf4\xb6\x20\x57\xfb\x1f\xc5\x97\xd9\x02\x59\xc7\xc7\xba\xe2\xd9\xeb\x2f\x77\xd9\xf7\xfc\xf8\x6b\x28\xf7\xa3\x9d\x87\x9b\x83\xc1\x39\x3f\xeb\x6a\x79\x7c\x2e\xf8\x19\x3f\xd8\xa1\x0c\x08\x3c\xc1\x7f\xe2\x48\xae\x6e\xe5\x01\x1a\x05\xe9\xff\x1d\xf6\xed\x77\x55\xf7\x66\x34\x14\xba\x77\x2a\xa5\xc3\x3b\x6c\x54\x24\xf8\x8c\x8d\x42\x44\x3f\xf1\x4a\xc9\xca\xc3\xbb\x13\xb7\x7f\xb5\x68\x95\xcb\xbf\xb2\x28\x3c\x16\x2f\x8d\x00\x18\x2b\xba\x07\x20\x94\xba\x77\x5c\x29\x97\xe6\x3b\x24\x76\x48\xea\x86\x79\x12\x33\x95\xe7\xf6\x9c\xa5\xcb\x17\x0d\x76\xda\x58\xf6\x58\x7b\xde\xce\x77\xfe\x8a\x08\x80\xb1\xaa\x7b\x00\x42\xb1\x7b\xe1\x96\x5d\x6a\xb4\xef\xfd\x92\xbd\x9b\x14\xfd\x3e\x71\x7c\x6d\x97\x98\x18\xed\xed\xeb\x16\xbf\xd3\x78\x51\xdb\x30\xc7\x62\xc8\x11\x01\x30\x56\x76\x0f\x40\x28\x77\xef\x5a\x18\x3b\xaf\xfc\x09\x6f\xaa\xca\xf6\xd3\x7d\xf7\xdd\x84\x23\x56\x0d\x02\x3a\xe3\x58\xf8\x57\x35\xd3\x8b\x69\x69\x6a\xfc\xd9\x10\x00\x63\x75\xf7\x00\x84\x82\xf7\x4a\x5e\x0e\x2e\xbc\xff\x22\x56\x53\xd8\x4d\xa5\xfc\x63\xd3\xcc\x45\xdd\x8c\x31\xd8\x9d\x83\x69\xba\x48\x67\xa9\x83\xea\xe6\xdc\x01\x04\xc0\x58\xe1\x3d\x00\xa1\xe4\xbd\xfc\x93\x52\x6c\xd6\xcd\xa1\x19\xaa\x04\x5c\x8e\x4c\xe5\x85\x9e\xfd\x3d\xc7\xc6\xd7\xee\x69\x04\xb3\x27\xdb\x5d\x3d\x07\x1e\xc8\x21\x00\xc6\x2a\xef\x01\x08\x45\xef\x69\x6f\x69\x18\x9f\xcb\x7d\x45\xdc\x7f\xe4\xa1\xc9\x37\x29\x26\xda\xb0\xc4\xb9\x83\xbc\xe6\x94\xe3\xee\x89\xa1\xd6\x85\x76\xc1\x2e\x08\x80\xb1\xd2\x7b\x00\x42\xd9\x7b\xf7\x45\xa5\x9f\x4e\xa5\xa8\x88\x31\xd1\xda\x1a\xdd\xfd\xc4\xec\xbc\xad\xdf\x63\x4b\x7f\x23\x6c\xf3\xb9\x18\xab\x3a\x2b\xbd\xc8\x6e\x7b\x80\xd1\xde\xdb\x0b\xd3\x7e\xf3\xce\x5e\x98\x50\xf8\xde\xc0\x32\xce\xdf\xf9\x36\xf5\x8f\xe4\x24\xb6\x99\x4b\xeb\x1c\x6e\x31\x7d\x4d\x75\xfc\x1b\x8c\x95\x41\xa4\x2d\x97\x0f\xf0\xb2\xd2\x20\x00\xc6\x8a\xef\x01\x08\xa5\xef\xc5\x27\xeb\xa9\x50\x05\x30\xec\x4c\x6b\x3a\x2f\xd9\xfa\x14\x5a\x0b\xb4\x2d\x99\x64\x57\x0c\x3b\x77\x0d\x8d\x9e\x76\x33\xf7\x92\x41\x00\x8c\x55\xdf\x03\x10\x8a\xdf\x53\x69\x79\xd9\xbc\xe5\x35\x1c\x33\xe6\xfc\xf0\x12\xbb\xcb\xe7\x5a\xba\x28\x8a\xcf\x15\x3f\x38\xb4\x9a\x29\x5f\x2c\x06\x7e\x1e\xe7\x42\x00\x8c\x95\xdf\x03\x10\xca\xdf\xeb\x8c\x87\xcf\x29\x66\x3c\x08\xae\xb5\xfe\xfa\x52\x2f\x98\xef\x94\xfe\x65\xcf\x10\x22\x7b\x1f\x0a\x5f\xb6\x81\x6f\x52\x1f\x0f\x50\x21\x00\xc6\xea\xef\x01\x08\x05\xf0\xc5\x4d\x6e\x6f\x88\x3f\x94\x5a\x18\xd5\xd4\xa7\xea\x2f\x3b\xad\x1b\xf9\x31\x50\x5c\xd9\xfd\xd3\x6b\x51\x97\xa3\xa9\x82\x15\x7f\x78\x10\x00\x63\x05\xf8\x00\x84\x12\xf8\x2c\x5f\xac\x52\x5b\x8a\x37\x52\x4b\xfc\x54\x4f\xd1\xa0\x20\x4c\xa6\x48\xb9\x52\x6f\xa8\xff\x74\x44\x33\x94\x2c\xe0\x67\x0b\xbc\x1b\x58\xac\x02\x1f\x80\x50\x04\x1f\x0d\x25\xa3\xd5\xb1\x46\x6e\xae\x31\xa6\x6f\xd7\x34\xd5\x7e\x5e\x2d\x6e\x3c\xb8\xe9\x30\x7e\xea\xee\xa3\x22\xa7\xe2\xc9\x4c\x71\x5d\x04\xc0\x58\x09\x3e\x00\xa1\x0c\x3e\xc7\xfa\xf0\x88\xb5\x92\xdf\x8f\x16\xdf\xd5\x14\x57\xc8\xe5\x09\xfe\x1e\x66\xe5\x7c\x53\x75\x20\xa1\x7b\x44\x26\xe0\x81\xda\x2b\x59\x04\xc0\x18\x0d\xbe\xbd\x30\xed\x77\x67\xde\x0b\x13\x0a\xe1\xf3\xa2\x10\xd5\x38\x76\x28\x96\x85\xe7\xe1\x86\x67\xe7\x74\x8e\xd7\x2a\x37\xdd\xb6\xe9\x89\xdc\x97\xa6\xd9\x85\x51\xb2\x6b\xc7\x77\x57\xd2\x58\x11\x3e\x00\xa1\x14\x3e\xe4\xbb\x0f\x49\x86\xaa\x13\xed\x62\x4f\x98\xb7\xb8\x6c\xed\x48\x49\xd5\x70\x38\x01\xed\x98\x69\x72\x3d\x9b\x00\xce\x64\x6a\x77\xa1\x84\x55\xe1\x03\x10\x8a\xe1\xcb\x1b\x7f\x70\x47\x30\xec\x75\xd9\x0f\x2e\x37\xc1\x88\x63\x05\x39\xf8\x99\x32\x43\xb9\xa2\xcc\x75\x0f\xf5\x3c\xf1\xa3\x83\x5c\xbb\xbd\x1d\x56\x86\x0f\x40\x28\x87\x2f\x80\x41\x7f\x04\x72\xa7\x91\x97\xec\x37\x1e\x20\x3a\x11\x34\xcc\xf8\xf4\x36\x7d\xe6\x95\x1b\xc6\x79\x45\xd3\x01\xbf\x21\x64\x77\x52\xc0\xea\xf0\x01\x08\x05\xf1\x5d\x68\x19\xa2\x12\xc8\x7c\xd3\x97\x75\xed\x3d\x79\xfa\x15\x9d\x5f\xe7\xdb\x4c\x83\x73\x6f\xa7\x74\x24\xcb\xdd\xff\x3c\xfd\x93\x86\x0e\x01\x30\x56\x88\x0f\x40\x28\x89\xcf\xaa\xe9\x11\xad\xac\x3e\x57\x97\x94\xca\x6a\x52\x5c\x1e\x91\x8f\x88\x0b\x94\x9e\x54\xb0\x52\x16\x71\xa6\xe8\xa9\xfd\xe4\xb6\x09\x02\x60\xac\x12\x1f\x80\x50\x14\x9f\xe9\x74\xeb\xef\xc3\x43\xee\x41\x24\x7e\x82\x3e\x9b\x1a\x6c\x13\x61\xe2\x67\x6f\xdd\x48\xde\x08\xab\x13\xa9\x3d\x92\x76\xcb\x9b\x02\x01\x30\x56\x8a\x0f\x40\x28\x8b\x8f\x7c\x26\x50\x97\x86\xf9\x79\xd8\x43\xa9\xf7\x47\x9d\x4e\x86\x5c\xb8\xfa\xc1\xe0\xe4\x91\x86\x47\xd5\x46\xc9\x1a\x4e\x37\xde\xb7\xc0\x08\x80\x31\x5a\x7c\x7b\x61\xda\xaf\x77\xdd\x0b\x13\x0a\xe3\xbb\xd2\x41\x7e\x57\xe6\x50\x36\xe3\xa3\x80\x9b\xa1\x1b\x77\x13\xd2\x98\x46\x74\x87\xba\x6a\x99\xa3\xcd\xb7\xcc\xd3\xdb\xbe\x7c\x62\x42\x00\x8c\x15\xe3\x03\x10\x4a\xe3\x0b\xbc\xe7\xbc\x3c\x4b\x56\x5b\x11\x10\x58\x84\xd3\x63\x52\x76\xbe\xc3\x9a\xc7\x6e\x62\xf0\x28\x86\xaf\x74\x70\x78\x21\x93\x7b\x77\xa1\x84\x55\xe3\x03\x10\x8a\xe3\x23\xff\x21\x4b\x27\x99\xaa\x95\x90\xdf\x0e\x46\x73\x9e\x74\x52\x1e\x88\x74\x79\x42\x7f\xe5\xe2\xa9\x7a\xa6\x07\x3f\x7e\x9b\x70\x1a\x21\x00\xc6\xca\xf1\x01\x08\xe5\xf1\xe5\x8d\x9e\xbb\x44\x42\x10\x31\x38\xe2\xcb\x01\xa2\x75\x3a\xd8\x4f\x87\xd3\x5f\x51\xbd\xdf\x6b\xc4\x56\xa3\x6d\xc9\xf5\x35\x41\x10\x01\x30\x56\x8f\x0f\x40\x28\x90\x8f\x30\x03\x7f\x63\xde\x73\x25\xd9\x8d\xaa\x62\x6b\x90\x41\x47\x42\x7a\xdc\x7d\x38\x9f\xe1\xec\xd5\x40\xc4\x2a\x4d\xbc\xbc\x44\x0c\x01\x30\x56\x90\x0f\x40\x28\x91\xcf\xbe\x90\xf6\x4e\x34\x6b\xcc\x4a\x82\xca\xd1\x6b\x86\xd7\x14\x02\x9f\x5e\x80\x94\xaa\xce\x10\xf0\x9e\x79\xbb\xed\xea\x6f\x70\xd3\x1c\x01\x30\x56\x91\x0f\x40\x28\x92\x2f\x00\xc7\xf8\x88\x53\x32\xeb\x2c\x2d\x07\xb5\xf5\x79\x28\x82\x2b\x32\x46\x80\x72\xfd\x2b\xb3\xb1\xc1\xb3\x9b\x27\xd6\xa9\x2d\xad\x10\x00\x63\x25\xf9\x00\x84\x32\xf9\x54\x04\xb7\x05\x84\xa6\x84\x1c\x1b\x93\x7f\xdc\x3f\x2d\x67\x55\x73\x43\x66\xe5\xf3\x0b\x6e\x6b\x6b\xc2\x90\x67\x34\xa3\xb4\x76\x06\x08\x80\x31\x9a\x7c\x7b\x61\xda\x6f\x75\xb7\x17\x26\x14\xca\x67\xee\xfd\xc8\xc5\x04\x07\xaf\x70\xba\x46\x5a\xbe\x7f\xa3\xa7\xf0\x30\xd7\xc1\x42\x95\x2f\x87\x8c\x23\xea\x29\xd3\x51\xeb\x4f\x86\x08\x80\xb1\xa2\x7c\x00\x42\xa9\x7c\x4c\x0b\xb9\xbd\xdf\xbb\x45\xf5\x97\x82\x8a\x3f\x9a\x77\x2c\x4b\x0b\x9e\x75\x9c\x96\x7d\x7a\x2f\xc4\x77\x3b\x2a\x3b\xdc\x50\x77\xf7\x76\x8c\x55\xe5\x03\x10\x8a\xe5\xcb\x37\xee\xc8\xec\x70\xa5\x7c\xff\x21\xfd\xe6\x12\x77\x90\xea\x77\x01\x2b\x77\x5c\x6d\x75\x6e\x67\x26\x53\x44\x45\xc3\xe0\xf4\x11\x04\xc0\x58\x59\x3e\x00\xa1\x5c\xbe\x8d\x07\x1b\x5f\x5b\x19\x0e\x66\x86\xd2\x98\xd5\x55\x0b\x6b\x9c\xbc\x46\x30\x79\x32\x33\x5d\x3d\x40\x4b\x73\x6c\x42\x5d\x22\x83\x01\x01\x30\x56\x97\x0f\x40\x28\x98\x6f\x74\xf1\xa1\x8c\xff\x25\xa3\x10\x4e\xd1\xc2\x0c\xc5\xa7\x16\x1c\xad\xca\x4e\xef\x83\x1c\x98\x99\x8c\xfe\xe4\x4b\x4e\x34\xf5\xbb\x21\x00\xc6\x0a\xf3\x01\x08\x25\xf3\x09\x9d\x24\xe5\xd8\x8a\x1b\xf2\x78\x09\x4f\xa9\xc8\xce\x44\x0a\x59\xb2\xbc\x1d\x4f\xc9\xa9\xc8\x63\x77\x5d\x35\x78\x32\xa9\xb2\xfb\x79\x60\x95\xf9\x00\x84\xa2\xf9\xde\xfa\x7c\x98\xa6\x71\x59\xb8\xe1\xef\xd3\x18\x1f\xcc\x75\x23\x81\x6d\x5b\x43\xca\xf1\x4d\xdd\xea\xc7\xc2\xcf\x1e\x3b\xa4\xe2\xca\x08\x80\xb1\xd2\x7c\x00\x42\xd9\x7c\x76\xab\x8e\x87\x33\x4a\xbe\xd9\xda\x4f\x16\x0b\x28\x1d\x24\xa0\xf3\x51\x56\xe1\x0f\x4c\x91\x91\x49\xe5\x7a\x95\xff\xcc\xdf\x7d\xb7\x06\x46\x9b\x6f\x2f\x4c\xfb\xed\x7f\xec\x85\x09\x85\xf3\x31\x5b\x4f\x4e\x8a\xae\x87\x90\x46\xfb\x68\xde\x4c\xd9\x22\x3d\xbb\x98\xe9\x5f\x7b\x76\x75\x91\x5e\x57\x87\xd7\x79\xe5\x95\xb2\x0a\x02\x60\xac\x38\x1f\x80\x50\x3a\x1f\x93\x96\x85\x7b\x58\x0a\xcf\x32\xcf\xfb\xef\xbd\x87\xef\x8a\x87\xdf\x7a\x7c\xa0\x67\x32\xf7\xc0\x0b\x5d\x4a\x96\xba\xa4\xbe\xff\xf7\x03\x1b\xac\x3a\x1f\x80\x50\x3c\x5f\x63\xdf\x17\x63\xae\xee\xea\xf2\x99\x4b\xa1\x3d\x09\xdb\x1c\x0f\x09\xcc\x2c\xd5\x48\x46\x63\xeb\xbb\x85\x2f\xbc\x54\x71\xbb\xaf\x89\x00\x18\x2b\xcf\x07\x20\x94\xcf\x17\xab\xcf\x4b\x30\x18\x73\x2f\x97\x60\xa7\xa2\x7f\x58\x2f\x4b\xa2\x9b\x93\xe7\x98\xeb\x40\xc2\x39\x07\x36\xa6\x55\xb6\x05\xad\xdd\x45\x35\x56\x9f\x0f\x40\x28\xa0\x4f\x62\x9b\x32\xc3\x0a\x5f\x78\x87\x24\x47\xb3\x41\x42\x52\x7d\xcd\xf9\x48\x80\xf0\x13\x1a\xff\xc3\x9b\x7c\x0f\x42\xb5\x0f\x8b\x9f\x46\x00\x8c\x15\xe8\x03\x10\x4a\xe8\x2b\xf1\x63\xca\xd8\x5e\x4d\x30\x5f\x3f\x6e\xf0\x4e\x7a\xb4\xfd\xa8\x0e\x5f\xcb\x4c\x51\x08\x57\x5c\xee\x0d\x01\x37\x19\xb6\x20\x7e\x04\xc0\x58\x85\x3e\x00\xa1\x88\xbe\xe3\x0a\x3e\x5b\xe3\x7c\xb9\xda\x2a\x3f\x7d\x5b\x44\x0e\x9d\x98\xfa\xa9\x95\x46\x59\x94\x6f\x5a\xec\xd1\xe2\xd0\x79\xdb\x17\xd9\xbd\x8b\x63\x25\xfa\x00\x84\x32\xfa\xc8\x9d\x02\xe6\xd8\xea\x99\xb3\xad\x8b\xbd\xa4\x7d\xb3\x88\x09\xe4\x8e\x5b\x3e\x18\x6c\xeb\x9a\x33\xaf\x3c\x6b\xf1\xcd\x7e\x81\x0d\x01\x30\x46\xa3\x6f\x2f\x4c\xfb\xed\x10\xee\x85\x09\x85\xf4\x31\x09\x6a\x36\x49\xab\xfd\xb9\xc2\x39\xfe\x5a\xcf\xb4\x30\x4c\x72\x27\x75\x25\x6e\xd5\x41\x97\x6f\x39\x29\x47\x66\x96\xf7\x12\x1f\x02\x60\xac\x48\x1f\x80\x50\x4a\x5f\xc7\x74\xeb\xb9\x3f\x1c\x2e\x9e\xdd\xfa\x97\xf8\x06\xf0\x7e\xa4\x3e\xce\x5a\x66\x6f\x44\x6f\xe0\x1b\x07\xe8\x0a\xc2\x78\x1e\x5f\x40\x00\x8c\x55\xe9\x03\x10\x8a\xe9\x9b\x19\x7d\xd7\x5d\x54\x78\xed\x90\x36\xc5\x0e\x69\x8a\x78\x72\x64\x06\x97\xb4\x20\xb2\xec\x25\x1f\x7e\x2a\xf4\xd8\xcc\x48\xb9\x05\x02\x60\xac\x4c\x1f\x80\x50\x4e\x1f\x6c\xb5\xc1\xa1\xf8\xd8\x58\x93\xf3\xc6\xb0\x99\xfa\xf3\x63\x0e\xda\xcf\x9e\x4f\x9d\x61\x7d\xcb\x63\x18\x1d\xd7\xac\x62\x6f\x4b\x8a\x00\x18\xab\xd3\x07\x20\x14\xd4\x47\x2c\x4b\x63\x7c\x95\x66\xbe\xdd\xab\x41\xaa\x65\x35\x20\xe6\x98\x92\x74\xd2\x9b\xfb\x31\xf7\xb2\x94\xaf\xd2\xa4\xda\x8d\x98\xed\xb6\xab\x58\xa1\x3e\x00\xa1\xa4\xbe\x3b\x16\xb2\xe1\xbd\x2a\xfd\x55\xfa\xac\xb6\x51\x21\x54\xdf\xdc\x4f\x3e\xcb\x1e\xe6\x80\x1b\x8b\x4e\xf0\x0e\xb4\xb8\x1d\xa4\xa1\x42\x00\x8c\x55\xea\x03\x10\x8a\xea\x53\xc2\xe5\x8e\xbf\xf0\x4c\xde\xe2\x61\x10\xa3\x46\xa6\xe6\x5a\x71\xc4\x1f\xcb\x02\x83\x5d\x9c\x85\x24\xc7\xc7\xdc\xeb\xeb\x77\x27\x05\xac\x54\x1f\x80\x50\x56\xdf\x85\x35\x07\xb3\x29\x31\xc2\x98\x40\x49\xf6\x58\x52\x27\xa9\x84\xb7\xfe\xe7\xef\x7d\xa7\x4f\x5c\x58\xbf\xf7\x59\x5e\x93\xdb\x6d\xb7\xcd\xc3\x68\xf5\xed\x85\x69\xbf\x3d\xf4\xbd\x30\xa1\xb0\xbe\xec\xf3\x0a\x0b\xef\x92\xb3\x5b\xcd\x08\x2f\x05\xd7\x34\xf4\x84\x8c\x4f\x1d\x3d\x32\x3a\x66\xae\x41\x76\x8d\x8a\x55\xe6\x6b\x1d\x0d\x02\x60\xac\x58\x1f\x80\x50\x5a\x5f\x0c\x6b\xf7\x8f\xa4\xa1\x5b\xb5\xbf\xae\x87\x96\x7c\x96\xff\x72\x48\x8b\x91\xbb\x33\x8f\xe6\xf3\x30\x37\xd9\x38\x21\xc9\xda\x03\x76\x04\xc0\x58\xb5\x3e\x00\xa1\xb8\x3e\x56\x25\xfb\xac\x54\xea\xab\x4f\x0f\x31\x3d\x72\xb0\x6d\x26\xf6\xc4\xd3\xb5\xa6\xba\x95\x3e\x3d\x61\x25\x63\x72\x8e\x30\xa6\x9e\x10\x01\x30\x56\xae\x0f\x40\x28\xaf\xef\xf2\x38\xb5\xa0\xc5\x38\x1f\x97\x97\x45\x33\xb5\xa0\x3a\xa1\x81\x7f\x24\x91\x2a\xf9\x79\xf6\x93\x1b\x92\xfd\xe1\x57\xea\xeb\xed\x10\x00\x63\xf5\xfa\x00\x84\x02\xfb\x46\x89\x4d\x26\x93\x1b\xcf\x42\x2a\x67\xea\xd7\x25\x2d\xb6\x4f\x36\xab\x7e\x89\x91\xa7\x99\x3b\xd2\x20\xe3\x19\x0b\x3f\x95\xb0\x47\x00\x8c\x15\xec\x03\x10\x4a\xec\x23\xe4\x66\xa6\xb6\x7b\x2d\xb7\xf4\xb5\xa4\xa2\x7b\x4b\x56\x67\x34\x90\xb0\xe7\x8a\x3e\x89\xb9\x05\x89\xd5\xa7\x6b\xfd\x02\x0c\x27\x11\x00\x63\x15\xfb\x00\x84\x22\xfb\xe8\x85\x1f\xcd\xd3\xc8\x33\x8d\x36\xde\x3e\x99\xc3\x0b\xfa\x7d\x1b\x4c\x3e\xeb\x30\xfb\xa8\xa9\xd4\x0b\xcb\xd2\x1c\x3a\x32\xb5\xdb\xf1\x60\x25\xfb\x00\x84\x32\xfb\x66\xc3\xa3\x82\xbe\xaa\x1e\xba\x65\x31\xf7\xfc\x6b\x5b\x83\x05\x29\x73\x4b\x72\xce\xd9\x99\x3a\x21\xed\x5b\x19\x0f\x2e\x58\xcb\xaa\x23\x00\xc6\x68\xf6\xf5\x41\xff\x5f\x98\xce\x0b\x75\x4d\xb9\xc6\x45\xa7\xe6\xae\x1e\x2e\x5f\x3f\x26\x3a\x4f\x7b\xaf\xf0\x4b\x19\x0d\xc5\xea\xed\x39\xbb\x03\xa7\x0c\x09\x62\xee\xcb\x53\xfa\xfd\x75\x7e\xf5\x58\xe7\xe2\xb3\x63\x46\xbf\x1d\xd5\x2a\x1b\x49\xad\xf4\x08\x5c\xd7\xb4\x76\x54\x7e\x9c\x4c\xa4\x6c\x3a\x68\x7c\xb5\xf7\x0a\x79\xf7\x5f\x43\xff\x68\xc9\x4f\x58\x84\x88\xc4\x8b\x15\xe3\xc7\x43\x5a\xc7\x45\x2c\xf5\xfa\x69\xd2\xb2\xe9\xc7\xce\x58\x55\x98\x87\x1e\x25\xd6\xfb\x6b\x68\xcd\xa3\xab\xc7\xff\x14\x16\xbf\x6c\x35\x1b\x9c\x9d\xe8\x9c\x09\xff\x65\xba\x40\x18\x23\xd6\xf3\x98\xa3\xf2\x52\xe0\xad\x49\xcd\xe3\x7f\x0d\x65\xf4\x20\xb6\xca\x7d\x76\xfe\x40\x43\xdc\xf5\x0a\x32\xbd\x61\xc1\x27\x19\x9d\xeb\x73\x1c\xb6\x69\x5b\x59\x3f\x70\xa9\xaf\x8e\xe8\xf9\xee\x9d\x62\xee\xf7\x4a\x51\xa7\x98\x7a\x31\x37\x3b\x26\x74\xeb\xc5\x3d\x48\xa8\x5a\xb6\x06\x02\x18\xae\x54\x1a\x5b\x09\xc7\xda\x92\xfb\x7d\xff\x26\x24\xf6\x36\xc7\xe0\xaf\xa1\x01\x05\xb2\xca\xc3\xe1\x96\xe3\xd7\xac\x68\xe6\x3f\x09\x13\x38\x3d\x4f\x1a\xe7\xdb\xb1\x79\x9c\xaf\xb0\xf8\x98\xb3\x6b\xd3\xf2\xeb\x5f\x43\xaf\x6f\x51\xec\xc8\xb7\x94\x57\x1f\x2c\xf5\x32\x6b\x1d\xa7\x94\xef\x94\xb8\xa2\xe5\xda\xfb\x41\x9c\xb9\xce\x79\x32\x95\x49\x7c\xfc\xaf\xa1\x64\xbe\x91\xbe\xdb\x23\x63\xd7\xdc\x62\xf8\x9a\x66\xed\x1e\x2b\x08\x16\x3d\x0b\x3e\x2e\x4c\x65\x6d\xd8\xfc\x65\xf4\xdc\xbc\xba\xf2\x5f\x43\x33\x42\x44\xda\x12\x38\xb7\xb7\x62\xc4\x14\xfc\x9e\xfa\x3b\xda\x09\x4b\xcf\xcd\xe6\x80\xda\x1b\x0b\xcc\xc6\x8e\x37\xbf\xd3\xf4\xfd\x35\xf4\x0d\xff\xdb\xae\x8e\xf8\x03\x3b\x2f\xc9\x66\xe4\x7f\x50\x1c\x92\x58\xd6\xad\x79\x10\x43\x73\xcf\x28\xfd\xea\x5c\x61\x7a\x77\xea\xa7\xbf\x86\x6a\x07\x93\xde\x51\xad\xf3\x20\x97\x5c\x3c\x64\xaa\x23\x6b\x26\x6b\xaa\xcd\x42\xab\x94\xe6\xd7\x4e\x21\xa7\x0e\x7c\xbf\xc9\xbc\xfd\x6b\x68\xfb\xfa\xda\xe7\xb8\xa5\xb3\x5f\xa7\xf3\x12\x27\xad\xae\x98\xa8\x9f\x58\x2b\xf9\x33\xf4\xfc\x28\x8e\xfa\xec\x89\x8f\x35\x5c\x61\xed\xff\x3b\xc5\xdc\xef\xaa\xfe\xdf\x54\x8d\x43\x61\x84\x7d\x2f\x46\x0f\xa5\x24\x2c\x97\xbb\x92\xd7\xcd\x9b\xf5\x34\x8e\xcd\x7c\x9d\xba\x6b\x39\x36\x2d\x73\xf6\x35\xf7\x39\x3d\x96\x89\xf3\x08\xc0\x63\xc6\x08\x71\x28\x8c\x50\x2d\xd8\xe0\x4a\x5a\xf6\xc9\x1b\xa4\xcf\x17\x29\xb5\xb3\x37\x56\x0a\xa6\x67\xef\x46\xdd\x82\x7a\x59\xfc\x89\x46\xa0\x77\x6c\x74\x08\xc0\x63\xc6\x08\x71\x28\x8c\xf0\x72\x8e\x07\x39\x5b\x6c\xc8\x85\x9f\x02\x2e\x86\x5c\xeb\xba\xae\xbf\x6d\x52\x8d\xae\x8f\xbe\x18\x54\x48\x39\xee\xf5\xfb\x71\xd8\x51\x04\xe0\x31\x63\x84\x38\x14\x46\xd8\x23\x5f\x36\x65\x4f\xe6\x40\x1c\xa0\xdf\x5c\xd8\x7f\xcf\xf4\x5e\x6b\x13\x57\xad\x2f\x1f\xd5\xcb\x35\x31\x37\x79\x12\xad\x40\x73\x04\xe0\x31\x63\x84\x38\x14\x46\xc8\xbb\x71\xd6\x22\x7e\xeb\x28\x47\x76\x75\x68\x65\x78\x75\x95\xcf\x82\xee\xc1\x37\x5b\x5c\x83\x4f\x6a\x9e\xe5\x0e\xda\x4e\x37\xaa\x23\x00\x8f\x19\x23\xc4\xa1\x30\xc2\x19\x62\x63\x96\xeb\x46\x77\x88\xd6\x9f\xd1\xb9\x77\x25\xec\xe0\x9d\xbb\x8f\x4f\x1c\xbf\x3c\x9c\xd8\x3d\x22\xe0\x64\xdd\xdf\xce\x87\x00\x3c\x66\x8c\x10\x87\xc2\x08\xbd\x3f\xa7\xc7\x8a\x1d\x7a\x69\x1c\xcd\x3c\x72\x36\x26\x46\xfb\x3a\xf0\x14\xbe\x1e\x1c\x78\xad\x5d\x23\xe9\x69\xe3\xb4\x45\x25\x40\x00\x1e\x33\x46\x88\x43\x61\x84\x4f\xb8\xbf\xaa\xa6\x8a\x8f\x14\xb6\x91\x08\xb7\x5e\xde\xe1\x6f\xca\xbc\xea\xd9\xfb\xb0\x63\x48\x4b\x2e\xaf\x83\x33\xdf\x58\x91\x10\x01\xf8\xff\x88\x11\xee\x37\xef\xec\x85\x09\x85\x11\xce\x37\x14\x9d\xbd\x50\x3d\xaf\x17\x45\x53\xed\x4b\xd0\xfc\xe7\x52\xdc\x13\xde\xb3\x85\x81\x74\x4c\x26\xae\x41\x54\xe5\xfa\xee\xc7\x10\x80\xc7\x8c\x11\xe2\x50\x18\x61\x82\xc4\xb0\x21\x69\x0e\x6f\x16\x75\x30\x65\x8c\x84\xbc\x68\xc7\xe0\xf0\x52\x7b\xef\xf7\xa4\xc6\xe6\xee\xa4\xc0\x27\x96\xb5\x1c\x08\xc0\x63\xc6\x08\x71\x28\x8c\xf0\x58\xa4\x64\x62\xdd\xfd\xbb\xe7\xd4\x34\x09\x28\xe6\xbc\x42\x9f\x67\x3c\x63\xe1\xe2\x9d\xf4\x09\x66\xa3\x7d\xdc\xb1\x4e\xae\xa8\x80\x00\x3c\x66\x8c\x10\x87\xc2\x08\xdf\xf9\x15\xc6\x95\xe1\x57\xae\xf8\x1f\x17\x73\xc4\xf5\x85\x4c\xfc\xd2\xe8\xe7\x50\x3a\x42\x53\x75\xac\xb7\x4a\x8c\x42\x9b\x4e\x07\x01\x78\xcc\x18\x21\x0e\x85\x11\x6e\xee\xc4\x4f\x96\x45\xd0\x4f\xfe\x18\xb9\x35\x76\x4f\xa5\xb6\x5b\xe9\x3c\x57\xdc\x52\xe7\xf5\x73\x63\x25\xa7\xb7\x5a\x4a\xb3\xb5\x10\x80\xc7\x8c\x11\xe2\x50\x18\x21\xbf\x70\xfd\x4c\x59\x7e\x21\x3f\x74\x2e\x4a\xf9\x7b\x55\x6e\xc9\x42\xe1\xbb\x86\x68\xdb\xe6\xa0\x98\xad\x21\x05\x79\xa1\xe2\x43\x08\xc0\x63\xc6\x08\x71\x28\x8c\xf0\x80\x7e\x85\xd6\xa9\xaa\x17\x37\x8a\x7f\xbd\x54\x96\xaf\x7b\xfc\x87\xbc\x3b\xbf\x23\x82\x14\x4f\x77\xc3\xed\x18\xa5\xb5\xa6\x8f\x1d\x02\xf0\x98\x31\x42\x1c\x0a\x23\xd4\x5c\xbc\x48\x40\x7a\x2c\x5c\xbd\xd4\xe0\x75\x52\xd7\xa8\xea\x25\x2e\xab\xd1\x57\x0e\x53\xb5\x21\x33\x2f\x75\x4c\x1a\xc3\x3e\x5f\x44\x00\xfe\x3f\x62\x84\xfb\xdd\x99\xf7\xc2\x84\xc2\x08\x6f\xe4\xbf\x76\xcb\x0d\xfa\xde\x4c\x40\xf7\x5a\x37\x3f\xa6\xce\xef\x48\xf4\x57\x67\xa9\xc2\xa0\x40\xbf\xf2\x48\xef\x9b\x72\xa2\x72\x08\xc0\x63\xc6\x08\x71\x28\x8c\xd0\x9f\xf5\x69\xda\xb8\xdb\xda\x13\x86\xb1\xcb\x4c\xcf\x89\xad\x26\x36\x32\x22\x72\x82\x06\x70\x55\x3c\xd3\x7d\x07\x7e\x9d\x16\x65\x44\x00\x1e\x33\x46\x88\x43\x61\x84\x03\x03\xcc\xf7\x70\xc5\xaa\x36\x8d\x32\x81\xaf\x66\x47\x8e\xf0\x8e\xde\x9b\xfc\xd3\xf9\xee\xd5\x5b\x89\x60\x35\x85\xc5\xe2\x74\x0d\x04\xe0\x31\x63\x84\x38\x14\x46\xf8\x7d\x92\x8e\xb7\x3b\xef\xa1\xa3\x03\xe8\x6c\xe0\x69\x71\xb1\x8c\x42\x58\x2e\x49\xc2\x4d\x7a\x44\x37\x3d\x73\xde\xb9\x5e\xd8\xfd\xa2\x63\xc6\x08\x71\x28\x8c\xd0\xfe\xad\x47\x97\xf6\x09\x33\xd1\xa6\x0b\xaf\x56\x3f\x2c\xab\xc6\xf3\xff\xba\xf3\xe4\xf5\xb0\x62\xa0\x80\x82\xd5\xb6\x8c\x92\x99\x2c\x02\xf0\x98\x31\x42\x1c\x0a\x23\xf4\xfc\x4c\xe6\x94\xf1\xb5\x72\xed\x45\x1c\xfe\xfc\xa6\xf9\xa5\x4a\xa1\xe3\x38\x99\x25\xc7\xe7\x6f\x3f\xdf\x9e\x7e\x0b\x67\x5e\x35\x44\x00\x1e\x33\x46\x88\x43\x61\x84\xa5\xc7\x20\xd7\x53\xab\xc7\x75\x7f\xff\x89\x1e\xb6\x78\x25\x79\x9e\x6c\x3d\xf7\x2a\xdf\x72\xc2\xac\xdf\x14\x85\x79\x41\xc3\x38\x2f\x02\xf0\x98\x31\x42\x1c\x0a\x23\x94\xdd\xbe\x7a\x63\x51\x94\xf7\x29\x83\xb0\xbb\xfa\x9f\x29\xfd\x95\x98\x25\x29\x9a\x7a\x2b\x5d\x2e\xfc\xac\x88\xdb\x29\xc3\xca\x13\x08\xc0\xff\x47\x8c\x70\xbf\xde\x75\x2f\x4c\x28\x8c\xb0\xf9\xb4\x92\xe4\x89\x84\x5b\x11\x6f\xd2\x29\xd4\xfd\x49\x86\xeb\xf1\x56\xc3\xa9\x3a\xe9\x55\x1c\x16\x0e\xdc\x52\x11\x8f\xe8\x2d\x11\x80\xc7\x8c\x11\xe2\x50\x18\xa1\xe7\x79\xf2\xca\x33\x79\x96\xf9\x9f\xea\x2e\x6b\x06\x19\xf0\xd6\xe4\xda\x56\x6d\x1a\x52\x35\xf7\x1d\x7e\x7d\x78\xbd\x3b\x60\x10\x42\x00\x1e\x33\x46\x88\x43\x61\x84\x4b\xe7\xfb\x6a\xfc\x37\x33\x5d\x60\x38\xba\x38\xdd\x9c\xc8\xbf\x6c\x63\x8c\xdf\x72\xfb\xe9\xdd\x41\x93\xac\x0f\x3d\x2e\xc9\x16\x08\xc0\x63\xc6\x08\x71\x28\x8c\xd0\x7d\xde\x83\xd2\xd4\xa0\xc7\x31\xe4\x88\x3f\xff\x2d\x87\x4d\xf9\x73\xa2\x80\x88\xf4\x15\x5e\xc9\x3f\x8f\xfb\x50\xcb\xa1\xcd\xdd\xbb\x1f\x66\x8c\x10\x87\xc2\x08\x6b\xde\xf5\x6e\x3e\x3d\xcd\xc8\xc7\x59\xd4\xa7\x92\xf6\x61\xe1\xd8\xf7\x93\x9c\x3e\x07\x45\xd7\x22\x33\xfe\x30\x3c\x4b\xf7\xcf\xdb\xfd\x82\x60\xc6\x08\x71\x28\x8c\x50\xea\x5e\xec\x55\x91\x10\x5d\x4a\x3e\x1e\xe1\x80\x47\x5d\xe7\xa4\xbe\x8c\x30\xc5\x79\x4e\xdf\x5e\x5d\x2b\xdf\x10\xb2\x8f\x4d\xdc\xad\x81\x19\x23\xc4\xa1\x30\xc2\xb9\x22\x3f\x57\x57\xd5\x0c\x04\x47\xfe\x8c\xd6\x97\x62\x93\xe8\xf1\xcb\xa8\xb9\x6f\xc3\x9e\x4e\x75\x93\xe6\xe1\xe9\xbe\xc1\x62\x08\xc0\x63\xc6\x08\x71\x28\x8c\x50\x69\x53\x43\x9e\xa6\xf4\xa2\xc2\x93\x77\xcc\x2c\x12\x6c\x17\xb5\xbc\x43\x93\x53\xde\x0e\x99\xa8\xf3\xb0\x94\xbc\xca\xcd\x08\x95\x46\x00\xfe\x3f\x62\x84\xfb\xad\xee\xf6\xc2\x84\xc2\x08\xb7\x56\x68\x03\x59\x54\x6d\x95\x6c\x4a\xdf\x26\x3a\xf3\xfa\x99\x5f\x9f\x70\xf6\x0a\x7e\x9a\xea\x49\x2d\xaa\xb5\xbd\xb5\x20\xc6\x89\x00\x3c\x66\x8c\x10\x87\xc2\x08\x89\xae\xcf\x10\x09\x56\xbf\x7b\x3f\xbd\x46\x61\x93\xe1\x60\x17\x9a\x1b\x21\xc9\xa4\x29\xbf\xd1\xc5\x9b\x7a\xd7\x23\x7c\x49\x93\x12\x01\x78\xcc\x18\x21\x0e\x85\x11\x7a\x86\x44\x38\xc0\xf1\x34\x99\x3d\x0a\xab\x6a\xa9\x3f\x5b\x03\x5c\x4f\x92\xc3\x1e\x1c\xaf\xad\x0e\x30\xb1\xc9\xd5\xeb\xbb\x1e\x40\x00\x1e\x33\x46\x88\x43\x61\x84\x0a\x7a\xd9\x2e\xcf\x7b\xa3\x0d\xe4\x4a\x9f\x20\xaf\x29\xb7\xd3\xfd\x9f\x7b\x53\x16\x25\x7d\x08\x9e\x0b\xaf\xf9\x92\x65\x3f\x76\x01\x01\x78\xcc\x18\x21\x0e\x85\x11\xf2\x1a\xdc\x3e\x24\xbf\xbd\xdd\x46\xa4\x70\x33\xb2\x37\x40\xe6\xde\x00\x99\xd5\x5d\x47\x8a\xa1\x97\x5f\x38\x35\x6f\x2b\xa7\x0a\x0b\x23\x00\x8f\x19\x23\xc4\xa1\x30\x42\x1d\x45\xca\x66\x32\x5f\x45\xe9\xf3\xa7\x8d\x5a\x2f\x31\xd8\x8f\x0e\xdb\xd4\x78\x74\xbb\x99\x24\x0a\xeb\xdc\xe6\x74\xa4\x7a\x4e\x8b\x00\x3c\x66\x8c\x10\x87\xc2\x08\x25\x07\x6d\x2b\x54\x9d\xaa\xa8\xdc\x72\xad\xe1\x0c\x19\xc1\xe7\xd4\x2e\x81\xb3\xf6\xda\x89\xee\x8f\x2f\x85\xbd\x15\x85\x89\xdd\x11\x80\xc7\x8c\x11\xe2\x50\x18\xe1\xf0\x4b\x2e\xbd\x66\xb2\x8d\xdf\x99\x66\x93\xfc\x8f\x8f\x1d\x7b\xec\x9f\xf4\x9b\x6d\x29\x92\xa2\x69\xa3\xbf\x4e\xdd\x42\x7e\xc3\x09\x01\xf8\xff\x88\x11\xee\xb7\xff\xb1\x17\x26\x14\x46\x38\xf5\x92\x89\x10\xaf\x42\xc7\xcc\x69\x39\xfe\x0d\xdf\xcc\x4b\x69\x2a\x40\x66\xfe\x82\x95\x72\xe8\x94\xa8\x3a\x7d\x01\x6d\x10\x39\x02\xf0\x98\x31\x42\x1c\x0a\x23\x54\x92\x5a\x4c\xac\x10\xe1\x9f\x4e\x6f\x1b\x7a\x2e\x54\x39\xed\x1c\x79\x76\x3b\x21\xcc\x73\x66\xde\xcb\xed\x49\x28\x2d\x32\x23\x88\x00\x3c\x66\x8c\x10\x87\xc2\x08\x1f\x2a\x97\xbc\xa7\x9d\x69\x53\x8a\x90\xbb\xbb\xf2\x28\xa2\xed\x7a\xab\xbd\x8e\x6b\xd4\xc0\xb3\x27\xc3\x0f\xc6\x1b\x7c\x4c\x4c\x94\x10\x80\xc7\x8c\x11\xe2\x50\x18\x61\x85\x3e\x3b\xee\xa1\xa7\xca\x4c\xc8\x1b\x67\x83\xfb\x8d\xf6\x86\xbf\x0f\x26\x56\x9e\xe6\xb4\xa9\xd9\x39\x28\xa2\x3b\xa7\x62\xb0\xdb\xa3\x63\xc6\x08\x71\x28\x8c\x30\xb7\x45\x95\xdc\xa0\xf9\x4f\xd6\x77\xea\xdf\x9d\x86\x29\xde\x73\x0f\x47\x4f\x39\x0c\x28\xdb\x7c\x2d\x96\xc9\x3c\x54\xac\xf5\xe3\x1c\x02\xf0\x98\x31\x42\x1c\x0a\x23\x34\x1e\x13\x18\xe9\x7a\x41\x4b\xc8\x9e\x79\x2c\x83\xdd\x9b\x79\xac\xed\x63\x91\x6d\x44\xe5\xa9\x69\x6b\x7c\xdb\x9b\x88\xa9\xb3\x87\x11\x80\xc7\x8c\x11\xe2\x50\x18\x61\x2b\xcb\xd5\xc9\xbe\x99\xfe\x50\x01\x1f\x66\x9d\xdb\xae\x9d\x3a\xb7\xcf\x5e\x5e\x26\xb6\x7b\x6a\x30\x42\x44\x3d\x28\xef\xf7\x8a\x0a\x01\x78\xcc\x18\x21\x0e\x85\x11\x9a\x3d\xd6\x27\x80\xfb\x25\xf5\x8b\x07\x87\xdc\x1d\xb5\x2f\x7f\xf0\xe4\xd0\x8e\xe2\x30\x6c\xed\x13\xf9\xc8\x9e\xcf\x7c\x34\x8c\x0b\x01\xf8\xff\x88\x11\xee\xb7\x43\xb8\x17\x26\x14\x46\x78\xee\x4a\x4d\xfc\x2d\x5f\x87\xd0\xf3\xb5\xe7\x79\x47\x39\xc8\xa2\x3c\xa2\xb6\x8f\xde\x2d\xc7\x35\xc7\x15\x4c\xa5\x29\x7a\xea\xed\xce\xb6\x98\x31\x42\x1c\x0a\x23\x74\x39\xf8\xec\x8b\x64\x9a\xc8\x55\xbd\xa1\xdf\x7d\xde\xed\xd9\xc9\xfa\xa4\x35\x2f\xaa\xa5\xa3\x88\x43\xe8\x94\x75\xb2\x6c\xef\xec\xbe\x69\xcc\x18\x21\x0e\x85\x11\x66\xf1\x98\xc9\x7e\x1f\x4f\xf5\x67\x39\x4e\x55\xee\xb3\x63\xaf\xa9\xa6\xe5\x18\x87\xd7\xea\x97\x9f\x67\x48\x73\xb9\xf0\xb6\x7e\x77\x1d\x80\x19\x23\xc4\xa1\x30\xc2\x72\x05\x43\xee\xf4\xee\x42\xca\x82\xb0\xd9\x1f\x95\x57\xaf\x8e\x3b\x7d\xf9\x5e\xa6\xe1\xaa\xb1\x4d\x68\x5b\xfb\x67\x0b\xb9\xc0\x8d\x00\x3c\x66\x8c\x10\x87\xc2\x08\x45\x7c\xbb\xbe\x0d\x4d\x44\x89\x6a\x6b\xd1\xbe\xbc\xf5\xc0\x92\xae\x7c\x26\x67\x20\xc7\xe4\xe4\x42\xf1\x57\x76\x12\x9b\x1f\x1d\xbb\x0b\x77\xcc\x18\x21\x0e\x85\x11\x9a\x33\x35\x85\x67\xee\x28\x7e\x12\xa9\x57\xf8\x51\x59\x0d\xde\x30\x33\x98\x2a\xc8\xf1\x33\x3d\xed\xcd\x72\x9b\x35\x78\xe6\x7d\x04\x01\x78\xcc\x18\x21\x0e\x85\x11\x1e\x77\x67\x75\xe3\x2a\xf7\x3c\xc3\x1b\xf6\x6e\xe4\xe7\x8b\xb6\xd3\xda\x8b\x77\x34\xad\x6a\xe7\xc8\xda\x08\x73\x25\xe2\xee\x4a\x99\x20\x00\x8f\x19\x23\xc4\xa1\x30\x42\xfc\x3b\x9b\xd0\x9c\xe1\xd6\x16\x67\xef\x37\x14\x5f\xbe\x9e\x56\x38\x9d\x49\xbb\xea\x38\xec\xc1\x2f\xa2\xf9\x4e\x63\xca\xe0\xe1\x71\x04\xe0\xff\x23\x46\xb8\xdf\x1e\xfa\x5e\x98\x50\x18\xe1\xe5\x81\x5a\x9a\x63\xdf\xae\x8d\x67\xee\x18\xee\x54\x5c\x2a\xf5\x76\x7d\x12\x73\x58\x88\xf7\x32\xab\xfe\x15\xdb\xc9\xb7\x0d\x55\xcc\x08\xc0\x63\xc6\x08\x71\x28\x8c\xb0\xc2\x0c\xcf\xd7\x44\x54\xff\xb6\xf2\xfe\x1f\xe7\xd0\x79\x53\x5a\x59\x19\x59\x83\x4b\xe7\xa9\x08\xc8\xcc\xcb\x5f\x5d\xd9\xf8\xb6\x1b\x58\xcc\x18\x21\x0e\x85\x11\x52\x48\xe7\xe6\xd0\x4e\x9f\x6d\xa0\xf5\x3d\xe9\x1b\x51\xc6\xc9\x30\x7b\x34\xdd\xd4\xfe\x56\xd5\x5c\x66\xbc\x97\x76\xa4\xac\xf5\x6e\x98\x30\x63\x84\x38\x14\x46\x68\x33\x43\x05\x3e\xba\x36\x2e\xdd\x24\x14\x47\xec\x28\x17\x4a\x76\x2e\x71\x0e\x91\xff\xec\x48\xfc\xa8\xc1\xcd\x4e\x1a\x1d\x7e\x05\x01\x78\xcc\x18\x21\x0e\x85\x11\xde\x4b\xec\x01\x9e\x09\x64\xef\xe5\xc9\x6c\x2e\x55\x3b\x9b\xff\xc2\x91\x71\x7e\xd2\x11\x3e\x4c\xb2\x94\xcc\xb4\x6e\x9a\x5a\xaf\x8a\x00\x3c\x66\x8c\x10\x87\xc2\x08\x1f\x9c\xbe\x78\xd1\xf2\x0d\xa9\x61\x58\x89\x0e\xf9\x1d\x11\xd7\x45\xa6\x45\x89\xa7\x4f\xde\x6e\x32\x6d\x9c\xd4\x12\xc8\x8e\x4f\x20\x42\x00\x1e\x33\x46\x88\x43\x61\x84\x76\xfc\x7c\x13\x5b\xdd\x7e\x94\x3d\x01\x6b\xf3\xf5\xd0\xe8\x46\x3f\x9b\x76\xdf\x90\xb1\xd1\xfc\x53\xce\x94\xe3\xd5\xe3\xce\xbb\x9f\x39\x66\x8c\x10\x87\xc2\x08\xe5\x7f\x9f\xbf\xdc\x54\x6e\xad\x7c\x7c\x8c\x28\xf0\x96\x60\x0b\xa7\xa7\x6b\x86\x5f\x73\xda\xb2\xf0\x06\xa9\xec\x54\x68\xe4\xb6\x19\x02\xf0\xff\x11\x23\xdc\xef\xac\x11\x75\xd8\xa7\x71\xbd\xdb\x5c\xf9\x5c\x5a\xc9\xf3\x1f\x2f\x3e\x3e\x1d\x5b\x27\x67\xfa\x4e\x49\x3d\x3f\x62\xb1\x8c\x3c\x1b\x72\x76\x4e\x72\x40\xfe\x1a\x3a\xd8\xec\x76\x3e\xd7\x57\xc5\xfa\xfc\xbb\x07\x07\x49\xde\x4c\x9c\x7e\x2a\xbe\x16\x62\x90\x0a\xee\x34\xaf\xe8\xcb\xf6\xdf\xf5\x7d\xf4\xd7\xd0\x57\xcf\x04\xce\xf9\x4a\x6f\x30\x0d\x1f\xa6\x8e\x0d\x6b\x4c\xf0\xf5\xb4\x99\x4c\xd5\x7c\xb9\xae\xdf\x64\xfa\x2a\x2b\xad\x54\xe5\xcf\x5f\x43\xed\x1e\x48\x15\x88\xfa\xcd\xa9\x91\x99\x2d\x92\xb8\x1f\x2a\xde\xf8\xd8\xaa\xb2\xf3\xa1\xfb\x62\x27\xc4\x4f\x35\x74\x11\xef\x17\xfd\xd7\xd0\x9f\xd2\x13\x2b\x8b\x86\x3e\xae\x8e\xa3\x49\x14\x74\xe7\x39\x74\xf3\xbb\xca\x8a\xe7\x88\x2a\xd3\x46\x0b\x94\x45\xfd\x61\x57\xaa\xbf\x86\xf2\x5e\x78\x8f\x27\x28\x7f\x26\x7d\xb9\x29\x37\xf4\x55\xae\x81\xec\x9b\x7c\xa9\x50\x57\xc8\xc6\x26\x65\xfd\x68\x1c\x55\xff\xf0\x81\xbf\x86\x1a\xb9\xde\x2e\x2d\x73\xc0\x29\xad\x5f\x62\x86\x08\x83\xbe\xf2\xce\xe0\x46\x86\xbd\xa1\x56\xcb\xf7\x89\x2e\x2e\xd6\xb7\xb3\x37\xfe\x1a\x7a\x95\xfd\xe5\x54\x3d\x27\x9c\xca\xbb\x10\xa4\x2f\xb4\x83\xab\x47\x4c\x34\x32\x1b\x9c\x15\xa1\x42\xb6\x55\x56\x9d\x15\x72\xc7\xff\x1d\xf6\xed\x77\x55\xf7\x66\x34\x14\x46\x78\xc2\x21\x49\xf8\x17\x5b\xe0\x8b\xe1\x2e\x47\x1d\xb2\x4b\x9b\xaf\x0d\x14\x37\x1f\x87\x27\x0c\x64\xbc\x2e\x5e\xfe\xae\x5c\x78\x77\x77\x1a\xc7\x8c\x11\xe2\x50\x18\xe1\x14\xab\xf5\xe1\xca\xc1\x0f\xe9\xe3\x24\xc6\x8d\xab\x46\x39\xd3\xd3\xbd\x34\xdb\x43\x8d\x2a\xdf\xba\x9f\x47\xfb\x54\xfc\x48\x37\x46\x00\x1e\x33\x46\x88\x43\x61\x84\x01\x35\xef\x16\xde\x4d\x6d\xbb\xbe\xfd\x5c\x7d\xa8\xd6\xd2\x5b\x80\x91\xa2\xa5\x5d\xc5\xc2\x7b\xed\x0d\x99\x48\xfb\x99\xec\x7c\x3c\x02\xf0\x98\x31\x42\x1c\x0a\x23\x5c\x6d\xab\xf4\x88\xe4\x7b\x90\x6b\x9a\xa5\x76\xe6\x5c\xaa\x8c\x8f\xd2\x8c\x48\x46\xb0\xb6\x76\x99\x89\xe4\xab\xc8\x37\x65\x1a\x34\x08\xc0\x63\xc6\x08\x71\x28\x8c\x70\xc5\x55\x94\xc9\xd6\x9a\x62\x71\x5e\x67\xa9\xb0\x89\xba\xe4\xe5\xb6\xc2\xa5\x92\xc2\x5f\x21\xe6\x61\xec\xaf\x2d\x22\xa3\x77\x76\x7b\x6d\xcc\x18\x21\x0e\x85\x11\x8e\x5b\x3f\xc2\x3f\x95\xe2\x70\x39\xc3\xed\xca\xff\xc5\xee\x40\x5a\x56\x64\x62\x9d\x68\x74\xea\x0a\xb1\x6b\xed\x85\xf3\xa2\x37\x77\xdb\x35\xcc\x18\x21\x0e\x85\x11\x52\xcb\x6f\x8f\x09\x66\xb1\x3c\x68\xa9\x74\x8d\x2d\xa9\xe6\x30\xbe\xf8\xfe\x63\x4f\xcf\x67\x24\x99\x45\xea\x5e\x7c\x39\xbb\x3a\x29\x02\xf0\x98\x31\x42\x1c\x0a\x23\xf4\x96\xf4\x55\x66\x8e\xec\x32\xd2\x92\x2b\xc2\x49\xfa\xf8\xb3\x10\x7a\x9d\xa8\x8f\x8b\x89\xaa\x5a\x0d\x1d\x8e\xb9\xa0\xbd\x23\x89\x00\xfc\x7f\xc4\x08\xf7\x9b\x77\xf6\xc2\x84\xc2\x08\x33\x8f\x46\x34\x0d\x1b\x44\xdc\xa0\x1d\x7c\x1d\xec\xfa\x82\x5f\x91\xa9\x9a\x96\x5e\x36\x2b\x8f\xa1\xff\xde\xc5\x8b\xda\xf5\x96\x42\x08\xc0\x63\xc6\x08\x71\x28\x8c\x90\x7f\x58\x68\xc3\xec\xfd\xe2\x92\xf2\x0c\xee\x16\xb5\x71\x31\x15\xf7\x9b\x63\x0f\x55\x26\xd2\xbe\xde\x5b\xe4\xca\xc1\x45\xff\xd9\xfd\xf0\x30\x63\x84\x38\x14\x46\xb8\x39\x4f\x3d\x55\xdc\xbf\x18\x68\x6a\x88\x1b\x99\x0d\x4e\x78\x52\xf6\xbc\x22\xfb\x7b\xd9\x5d\x49\x1a\xcb\xd8\x43\x78\x59\xd5\xdd\xfe\x11\x33\x46\x88\x43\x61\x84\x8c\xc8\xd0\x2d\x21\x15\xb3\x21\x9a\x67\xa1\xef\xeb\xb7\x58\x6c\x92\x2f\xd0\xb1\x8e\xd0\xa6\x49\x22\xf2\xc5\x94\x52\x87\x67\x2d\x11\x80\xc7\x8c\x11\xe2\x50\x18\xe1\x8e\xe2\xca\x5c\x5c\x70\x1b\xcd\xe8\x9f\x9c\x76\x31\x03\x03\x36\x86\x3e\xcb\xac\xb0\x67\x9c\x07\x9b\x08\xee\xeb\xd5\x54\xdd\xe3\x41\x00\x1e\x33\x46\x88\x43\x61\x84\x3f\x8e\x6b\x4f\xcb\x35\x91\xa9\x27\x2e\xdc\x89\xd8\x56\xf5\x58\x26\x36\x7d\x6e\x17\xa5\xe7\x3a\xed\xc3\x33\x5b\x57\xcd\x39\x05\x21\x00\x8f\x19\x23\xc4\xa1\x30\xc2\x70\x3e\xa4\x70\xdb\x62\x25\x9c\xfe\xbc\x0a\x27\x99\xd4\x84\xd9\xb3\xd5\xc1\x9e\x16\xe9\x52\x59\x7a\xca\x87\x9a\x1c\x1b\xda\x7a\x08\xc0\x63\xc6\x08\x71\x28\x8c\x70\x54\x64\xe2\x94\x45\xed\xb6\x1b\x8f\x31\xee\xbb\x8f\xa0\x6d\xe4\xb5\x4c\xeb\x5b\x0f\xcc\x13\x8d\xe8\xcf\xae\x34\x8e\x57\xd2\xd8\x22\x00\xff\x1f\x31\xc2\xfd\xee\xcc\x7b\x61\x42\x61\x84\x35\xd9\xcb\x54\xda\x8d\x91\xf4\x3d\x16\x0f\x26\xb5\xfa\xc6\xdf\x24\x58\x20\x16\xd1\x65\x59\x04\x56\x75\xd1\x0d\x72\x47\x3a\x4e\x20\x00\xff\xff\x63\xef\x3e\xc3\xb9\x7c\xe3\xff\xf1\x73\x72\x89\xec\xed\xca\x2a\x33\x5a\xf6\xfa\x90\x55\xb6\xec\x42\x76\x64\x8f\x8c\x8a\x84\x0b\x59\x49\xb2\x67\x36\x95\xec\x59\x4a\x32\x92\x54\x64\x84\x94\x19\xb2\x47\x28\x2b\xff\xe3\xfd\xfd\xff\x7c\x0f\xc7\xf5\xbb\xe1\x73\x75\xef\x77\x1c\x9f\x5b\xdd\x79\x1e\xaf\x77\x74\xbe\xce\xeb\x75\x9e\xd7\xd1\xfb\x81\x19\x23\x04\x28\x8c\xb0\xb0\x89\xe8\x11\xed\x6d\x33\x5a\x92\xa1\xeb\xcb\x02\xf3\xdb\x29\x5e\x89\x75\x20\xc7\xe9\x91\x0f\x57\x9d\x6c\xc2\x50\x92\x0c\x6e\x81\x60\xc6\x08\x01\x0a\x23\x7c\x9a\xf8\xf8\xb6\xf7\x5c\xa8\xd0\x78\xc1\x78\x9c\xb5\x81\xe3\x9f\x06\xcf\x84\x91\x29\x8e\x76\x7c\x0e\x27\xb3\x4b\xe7\x67\xb3\x71\xf3\x23\x66\x8c\x10\xa0\x30\xc2\x8f\xe9\xb9\xa7\xab\x06\xb5\x8d\x7a\x1a\x94\xcf\x7c\x33\x5b\x3e\x7f\x8b\x3b\xe8\xb8\xce\xe1\xbc\xb5\xdb\x6c\x42\x4a\x62\xf7\xe8\xf9\x11\x18\xc2\x8c\x11\x02\x14\x46\xa8\x3a\xe1\xf7\xb3\x53\x47\x6a\xa2\x6a\xfe\xde\x62\x3d\x47\x8e\x8a\x4f\x4a\x88\x56\xfe\x95\xc7\x5e\xda\x77\x1f\x55\x14\x3e\xe1\xb0\x41\x60\x08\x33\x46\x08\x50\x18\x21\x6b\xe4\xfd\x18\xb2\x9c\xf7\x84\x73\x1a\x6a\xbf\x06\x23\x34\xdd\x85\x88\x6b\x1d\x6c\x82\xdc\x7a\x42\xa5\xe8\xc2\xd2\x03\x15\x2f\x23\x30\x84\x19\x23\x04\x28\x8c\xd0\xc3\x6d\x3c\xd7\x54\x2b\x2c\x51\xe6\xe1\x58\x9f\x6d\x63\x13\xa9\x20\x10\x17\x28\x71\x17\x9f\x77\xb0\x62\x5c\x6a\x73\xe4\xc6\x35\x2c\x66\x8c\x10\xa0\x30\x42\x98\xcd\x54\xd1\x34\xbd\xae\xa4\xec\x6c\xc9\x2a\xe5\xa0\x8a\xe0\x8f\xe7\xd3\x87\x5c\x6d\x28\x2d\x04\x89\x5c\x1c\x79\x1f\x9d\x96\x40\x60\xe8\x2f\x31\xc2\x83\x66\xd7\xbd\x66\x42\x61\x84\x2a\x0c\x8b\x3c\xc2\xcf\x18\xe1\x66\x71\x0a\x81\x9d\x84\xf1\x14\xaa\xc5\x4a\x73\x15\x8b\x1b\xe5\xe3\xbc\x09\x6d\xe7\xce\xa4\x9c\x47\x60\x08\x33\x46\x08\x50\x18\xa1\x0d\x17\x7b\x9e\xaa\x73\xcd\x48\x61\x41\x95\xc8\x3c\xa9\xea\xe4\x47\xc6\x1a\x7f\xc6\xca\xea\xfc\xe3\x51\xa1\xa0\x71\x59\xda\x1a\x81\x21\xcc\x18\x21\x40\x61\x84\xaa\x74\x59\x94\x1f\xbc\x6e\xe4\xa8\xad\xbf\x64\x09\x3c\xf2\xd9\x89\xaa\xff\x7a\xe5\xb8\x8b\x62\xad\x3e\x6b\xd2\x44\xd5\x19\x7d\x56\x04\x86\x30\x63\x84\x00\x85\x11\xaa\x37\xff\x78\x40\x4a\xf3\x1d\x1c\x9d\x78\xd4\x3b\x6c\x15\x14\x3c\x92\x24\x6a\x18\xeb\x94\x6b\x2c\x98\x23\x2c\x7d\x28\x9a\x5e\x1d\x81\x21\xcc\x18\x21\x40\x61\x84\x51\x78\x5f\xa9\x53\xf5\x1c\x09\x63\x52\xbd\xef\xeb\xd2\xc9\x47\xd1\xcf\x97\xad\x78\xeb\xd6\xa4\x9c\xae\x51\xea\xfa\xcc\x29\x80\x1b\x89\x31\x63\x84\x00\x85\x11\x16\x8f\xf8\x32\xeb\x35\xe2\xb5\x47\x38\x36\xeb\xfc\xe6\xa3\xa8\x91\xe6\x8b\x61\x22\x3f\x96\xc0\x34\x7f\xa3\x1b\xe6\xa7\xcf\xc4\xfd\x1c\x98\x31\x42\x80\xc2\x08\x55\xe6\x88\x82\xa9\xc5\x7e\xeb\x08\x33\xc8\x2c\xb0\x9b\x93\xc7\x9b\x12\xac\x28\x88\x71\xc9\xaf\x17\xb4\xf2\xf2\x2e\x71\x50\xe3\xc6\x6e\xcc\x18\x21\x40\x61\x84\x41\x51\xaf\x78\xad\x1f\x99\x93\x89\x27\x2d\xd5\x9e\xd1\x8a\x08\xf6\xec\x18\xef\xb3\x50\xbe\x4d\xe5\xfd\xc1\xa9\xf0\xd2\xa0\xd9\x49\x04\x86\xfe\x12\x23\x3c\xe8\x74\xb7\xd7\x4c\x28\x8c\x50\x2d\x5f\xb1\xd3\x81\x90\xcf\x81\x9c\xf9\x15\xc7\xc0\xa7\x8a\x72\x5a\xb3\xda\xe4\x35\xf5\xba\x30\xbd\xb6\x7a\x9e\xd2\xc4\xd2\xc3\x08\x0c\x61\xc6\x08\x01\x0a\x23\x7c\xda\xba\x32\xb1\x5b\xfb\xc9\x3e\x86\xf9\x91\x59\x79\x2e\x34\x48\xe6\xd0\xf7\xe6\x72\x8d\x69\xf4\xc2\xd5\xfa\x53\x33\x92\x64\xf4\x08\x0c\x61\xc6\x08\x01\x0a\x23\xd4\x73\xbb\x11\x9d\xfd\x6b\x3a\xb8\x8b\xfb\xb0\x4b\x97\x1c\xeb\xe3\x70\xb6\x8f\x4c\xd2\x01\x9c\x51\x97\x1f\x77\x3e\xbe\xf4\x33\x17\x37\xa3\x63\xc6\x08\x01\x0a\x23\x14\xb2\x04\x5c\x3f\xc6\x8a\xff\x98\xb9\xed\xb0\x2d\x1b\x19\xf5\xc6\x3b\xfb\x2d\x2c\x06\x66\xdb\xc6\x87\x95\x5f\x65\x67\xc9\xa0\x43\x60\x08\x33\x46\x08\x50\x18\x21\x33\x2f\xcc\xfb\x9c\xbd\x7e\xe2\x8f\x69\xe5\xd1\xcf\x6a\xf7\x8b\xda\xb3\x78\xac\x64\x8e\xfa\x94\x4c\x99\xb7\x08\xda\x73\xa7\xe2\x9e\x1a\x98\x31\x42\x80\xc2\x08\x0f\x09\xf0\xd9\xb6\x93\x37\x48\x7d\x3e\x2e\x7b\xf6\xf7\x4e\xe3\x18\x29\xad\xf6\xcf\x96\xc3\x29\xd4\xe1\x8c\x2e\xcf\x92\x25\xfd\x5c\x11\x18\xc2\x8c\x11\x02\x14\x46\x78\x6a\xd2\x52\xd3\x5b\x27\xf7\x5c\x44\x84\x8c\x7c\x3d\xc1\xa9\x53\x94\x4f\x45\x0a\xdf\xfc\x28\x8a\xd7\xb2\x8d\xb5\x3a\x79\x4e\x92\x0a\x81\x21\xcc\x18\x21\x40\x61\x84\x5d\xbb\xb9\x8e\xc5\xb1\x1d\x59\x0b\x3b\xec\x6d\xc7\x98\xc3\xa7\x3c\x1a\x2e\xe9\xbd\xc0\x63\xae\x3b\xea\xb1\x73\xfd\xcb\x1c\x33\x6e\xec\xfe\x4b\x8c\xf0\xa0\xfb\x8f\xbd\x66\x42\x61\x84\x37\x84\xc4\x65\x7e\xf4\x77\x04\x6b\x89\xf8\x5f\xcd\xe8\x6b\x09\x17\x7d\x95\x62\xd8\xf9\xd5\x47\xe5\x67\x28\x43\x8d\x98\xf8\x06\x6e\x81\x60\xc6\x08\x01\x0a\x23\xcc\xbf\x65\xdb\xd4\x67\x43\xee\x62\x33\x51\xb0\xe9\x29\x74\xde\xcf\x40\x9c\x49\x2d\xad\x84\xad\x93\x5a\xcb\x9f\x30\x6e\xed\x05\x6e\xcc\xc3\x8c\x11\x02\x14\x46\xd8\x5c\xa2\x1d\xed\x82\xdf\x68\xa9\x8e\x17\x33\xa3\xf7\x35\xf3\xd9\x74\xa6\xfb\x05\xc1\x7e\x8b\x1f\xce\xbc\x11\xf8\x6d\x6a\xda\x94\x08\x0c\x61\xc6\x08\x01\x0a\x23\xa4\xa0\x24\x3a\x3a\x48\x2a\xad\xbb\xf3\xa4\x23\x78\x8b\xea\x59\x4e\x62\x28\xdb\x43\xd7\xfc\xf1\xe3\xcd\x8a\xd4\xeb\x7e\x2b\xf7\x70\xe7\x4b\xcc\x18\x21\x40\x61\x84\x1b\x6f\x3e\xed\x34\x51\xe6\x86\x3d\x8b\xf3\x31\x2a\x7b\x6b\x22\xf6\xda\xf4\x67\xe8\x42\xa8\x81\x6a\xe2\xdb\x82\x61\x63\x99\xfb\xc7\x11\x18\xc2\x8c\x11\x02\x14\x46\x78\x37\xa3\xa2\xf2\xcd\x21\xb7\xc4\x28\xd3\x56\x7f\xbe\x78\xd9\x35\x1f\x71\xbd\x41\x60\x7f\x8c\xf7\xd0\x6d\x73\x31\xa9\x56\x16\x47\x04\x86\x30\x63\x84\x00\x85\x11\xe6\xf6\x1b\x8c\x3e\xaf\xf4\xee\xf1\x7e\x68\xec\x56\x52\x30\x5f\x28\x43\x93\x51\xcf\xa7\xfd\xfd\x4e\x81\xbd\x99\xd5\x05\xcd\xa7\xfa\x08\x0c\x61\xc6\x08\x01\x0a\x23\x34\x4a\x3f\x39\x5e\xc2\xea\xa3\x56\xa4\xb4\xeb\x68\xcc\xd2\xa5\x6f\xea\xc6\x48\x33\xec\x9a\xc2\xf0\x2c\x36\xb5\x7b\x4d\xe4\xbd\x10\x02\x43\x7f\x89\x11\x1e\x74\x43\xb8\xd7\x4c\x28\x8c\xd0\x9c\x8d\x8a\x3c\xaa\xd9\x32\x6c\x50\xee\xe9\x46\xb9\x12\x01\xf5\xd4\x14\x55\xbe\xd4\x16\x9b\xea\x39\x13\xaa\x27\xc6\x4c\x9e\xf2\x08\x0c\x61\xc6\x08\x01\x0a\x23\x6c\x28\xd8\x52\xde\x68\x0b\x82\x34\x5e\x2b\x5d\xcc\x5c\x70\xb8\xff\x40\xca\x45\xac\xfa\x2d\x9b\x46\xa2\x31\xa3\x67\xa5\xfe\x5b\x5c\xc3\x62\xc6\x08\x01\x0a\x23\x9c\x9f\xd4\x9f\xcb\xf3\xe2\x3e\xb4\x15\x99\x38\xd3\xcf\x6f\x44\x7b\x47\xfd\x79\xd2\xd9\x1e\x9e\x99\x56\xbe\xf3\xb6\xc4\x72\xe1\xc7\x10\x18\xc2\x8c\x11\x02\x14\x46\x78\x67\x37\xc8\x50\x24\xea\x89\xf7\xcf\xeb\x4f\xac\x26\x84\x02\x57\x4c\xef\xb3\xfa\xfa\x97\xcd\x2f\xaf\x31\x37\x7e\xe5\xe4\xab\x57\x44\x60\x08\x33\x46\x08\x50\x18\xa1\x60\xc1\x99\x98\xce\x4f\xbe\x3a\x5e\x30\x51\x49\x27\xb5\x83\x9b\xa6\x66\x9d\x6a\x03\x63\x57\x73\xc9\x16\x2d\xe3\x97\xd6\x59\x25\x04\x86\x30\x63\x84\x00\x85\x11\x2a\x70\xf2\x6b\xfb\x7a\x48\xd8\xf9\xe4\x8f\xb4\x68\x16\x16\xac\x4c\x85\x04\xb0\x1f\x75\xa1\xb3\xea\x5f\x30\x95\x13\xef\x7a\x85\xdb\xdc\x30\x63\x84\x00\x85\x11\x96\xfc\x22\x5d\x10\x7f\xd3\xc6\x3d\xa1\x69\x6b\xc6\xa7\x05\xcd\x35\x5e\x2b\xe4\x5e\x2d\x5b\x14\x2a\xfb\xe3\x31\xea\x45\x24\xa2\x8a\xc0\x10\x66\x8c\x10\xa0\x30\x42\x8a\xba\xc4\x8c\x57\xda\x86\xc7\x12\xdb\x1f\x47\x7e\xc8\x39\x46\x2b\x2b\x07\x62\x4b\x89\x49\x0a\x6b\xde\xcd\x8c\xde\x64\xae\x96\x42\x60\xe8\x2f\x31\xc2\x83\xee\xd0\xf7\x9a\x09\x85\x11\x4e\x3f\x75\xfd\x2e\x7e\x31\x85\x6c\xe9\xa3\x2d\x7b\x18\xeb\x27\x11\x02\x6f\x48\xf3\xc4\xdb\x38\x59\xb2\x07\x6f\xe2\xf1\xb5\xda\x65\x10\x18\xc2\x8c\x11\x02\x14\x46\x38\x7c\x81\xf7\xb3\x2b\xfb\xb2\xbf\x7d\x34\x57\x5a\xc5\xae\xbe\xc2\x05\x89\x67\xde\x35\x77\x9f\x71\x10\x08\xf9\xac\x3b\xfe\xbc\xa9\x87\xc0\x10\x66\x8c\x10\xa0\x30\xc2\x3c\xbd\x2e\x15\xc7\x49\xa6\x9f\x5f\x93\xa2\xee\x9b\x87\xce\x88\xd3\xb9\xe8\x8f\x04\x79\x9f\x07\xcb\x67\xb6\x35\x85\xc7\xbc\x85\x11\x18\xc2\x8c\x11\x02\x14\x46\x08\xbd\x5a\x1d\x7f\x50\xae\x37\x50\xd2\x36\x96\xbe\x13\x3a\x79\x24\xf8\x9e\xfc\xdd\x3e\x9f\x9c\xc1\xd4\x1f\x77\x2b\xf8\x45\x42\x71\x8b\x10\x33\x46\x08\x50\x18\x21\x15\x23\xbe\x7f\xdc\x89\xf6\xf5\x5b\xdd\xeb\xab\x37\x99\xd3\x1e\x68\xde\xe6\x8a\x95\xab\x3b\xd9\xd9\x44\x74\xe1\x1a\x55\x7e\x0d\x07\x02\x43\x98\x31\x42\x80\xc2\x08\x1f\x29\x6f\x5f\x0b\x21\x48\xf3\x66\x27\x8c\xc9\x66\x5c\x60\xec\x24\x92\xac\x0b\x1d\xf1\xa6\x1b\x67\xd8\x6c\xd1\xe6\x50\xea\xc1\x7d\x06\x66\x8c\x10\xa0\x30\x42\x55\x8d\xd7\xcd\xbe\x6a\xf5\x57\xb3\x1e\x42\x47\xec\x7c\x0b\x64\xcc\xae\x4c\x1b\x92\x47\xca\x72\x5f\x8f\xca\x0d\xbf\x7d\xfe\x2e\x37\x02\x43\x98\x31\x42\x80\xc2\x08\x89\xc3\xef\xd6\xae\xd3\xdf\x71\xcc\x8b\xa5\x82\x4f\x9d\x62\x2d\xa4\x59\x6a\x23\xb8\xc9\x48\x7e\x8e\xa4\x62\xca\x38\x55\x87\x40\x01\x81\xa1\xbf\xc4\x08\x0f\xfa\xdf\x82\xa8\x97\x7d\xeb\xbf\x96\xcd\x33\x06\x6c\xb6\xc7\xfe\xb9\xeb\xe6\x3b\xf8\x7c\xf0\x4a\x24\x41\x98\xa7\xf0\xee\x83\x44\xa3\x89\xd5\x87\xca\x49\xbf\xf6\x45\xcb\xae\xf4\x72\x2f\xc9\x4b\x5d\x92\xd1\x99\x0f\xe5\x49\x37\x34\x0d\xb3\xde\x48\x91\x70\x9b\xcf\x8b\x29\x61\xe3\xa9\xa3\x4f\xb0\xda\x17\xbd\xb5\x6c\xe1\xdc\x9b\x62\x75\x8b\x91\xe5\xb6\xbb\x5c\x95\x76\x08\x77\x03\x01\xc5\xa7\x8b\xe9\x0c\xb5\xb9\xc3\x45\xb5\x71\x1c\x0a\xfb\xa2\x1c\xea\x17\x4d\x56\x62\xd6\xcd\x27\x3d\x3f\x68\xf8\xbc\x19\x48\x9c\xad\x60\x12\x66\x17\xdf\x55\x55\xd2\x2e\x97\x5d\xfe\xf2\x43\x7d\x5f\x74\x30\xb5\x3b\x45\x6b\xb1\xfa\xd0\x9b\x2e\x79\x81\xd8\x5b\xfa\x7f\x34\x38\xc4\x27\x8c\x7a\x33\xbf\x07\x2d\x2a\x8e\x8b\x58\xbb\xbd\xdc\x17\x15\x3c\x9e\x3c\x7c\xd8\xe1\x8a\x56\xcf\x54\x7f\xce\x92\xfc\xd1\xf6\xd0\x28\xfd\xda\xa5\x76\x7e\x57\xc2\x8e\xe4\xf6\xea\x10\xcb\xf6\x7d\xd1\xa1\x41\xe3\xa6\xd8\x60\xd5\x20\xe8\xbe\xfd\xa0\x6f\xee\xf7\xb9\x9b\x2b\xa7\x9e\x4f\x9b\x28\xae\x8f\x4e\xfd\xa6\x9a\x42\xb4\xdf\xee\x8b\xd6\xb3\x13\x5d\x89\xfb\xb2\x99\x50\x1a\xd5\x63\x38\xb8\x61\x56\x6d\x61\x59\x56\x17\x3e\x92\x47\x59\x50\x97\x9c\x54\xb8\xa3\x71\xfa\x7f\x5f\xf6\x1d\xf4\x5b\xdd\xdb\xd1\x50\x18\xe1\x4c\x86\x69\xbb\xce\xd3\xd8\x91\x8e\x9f\xcd\x25\xdf\xba\x17\x1c\xa1\xe9\xb7\x5e\xd9\xb2\x20\xf8\x8c\x0f\x51\xb0\xad\xc7\x6b\x23\x04\x86\x30\x63\x84\x00\x85\x11\xaa\x8a\x9a\xae\xee\x7a\xe1\x49\x4e\x3b\x5f\xe6\x1e\xc8\xdd\x48\x13\x5c\xe7\xe4\x97\x1b\xf9\xec\xb7\xd5\x33\x44\xa0\xcf\x51\x6d\x83\xc0\x10\x66\x8c\x10\xa0\x30\xc2\x78\xa5\x86\x67\x4b\x24\x91\x7d\xdf\x68\x73\x6f\xd5\x5a\xfc\x94\xe3\x6c\xa8\x0a\xbe\x92\x36\xf0\x8f\xd2\xa7\x54\x11\xd6\xc3\xaf\xc8\x10\x18\xc2\x8c\x11\x02\x14\x46\x18\x19\xc2\x5b\x17\x9b\xb7\xd9\x1d\x12\x43\x39\xba\xa3\x50\x3a\xb8\x50\x28\x61\x79\x91\xd8\x6a\xcd\xfa\x8c\xb7\xa8\x55\x56\xdc\x09\x04\x86\x30\x63\x84\x00\x85\x11\x16\xe1\x6f\x79\xc4\x19\xd2\xea\x7f\x63\x28\x6f\x1b\x25\x7a\x53\x06\xec\xa8\x86\x15\xad\xab\xac\xe4\xbe\x86\xbc\x1c\x15\x0f\x3e\x84\xc0\x10\x66\x8c\x10\xa0\x30\x42\x92\xb3\x97\x85\x17\xdc\x64\x8c\x9a\x4a\xdd\x8d\xd6\x38\x72\xf3\x8e\xf0\x5e\x4e\x11\x06\xf1\x6a\x59\x8a\x5f\x63\xcb\x53\xfe\xe7\x50\x89\x19\x23\x04\x28\x8c\xd0\x57\x45\x8e\xb1\x5e\xc7\xaf\xc8\x20\x9b\x9a\x2c\x56\x6b\x35\x9a\xd3\xe6\x6e\xa6\x6e\x72\xbd\x6f\xb7\x56\xb6\x38\x99\x67\x0b\x6e\xd6\xc6\x8c\x11\x02\x14\x46\xc8\xf2\xca\xa3\xf1\xf7\xfa\x40\xcc\xf8\x09\xb3\x72\x7b\x56\x35\x81\x85\x99\x91\xfa\xf8\xa1\x34\xbd\x87\xd4\x2d\xb1\x63\x7d\xca\xe2\x08\x0c\xfd\x25\x46\x78\xd0\xbe\xb3\xd7\x4c\x28\x8c\x30\xa0\xc2\x96\xf4\xec\x43\x19\x82\x81\x1a\x31\x1a\x9b\xde\x1b\xee\xa5\xfe\x15\x76\xc2\xaf\x3e\x3e\xbd\x3f\x64\xba\x2d\xc2\xce\x2b\x82\xc0\x10\x66\x8c\x10\xa0\x30\x42\x0e\xbc\xf9\xb5\x9f\x91\xb7\x3b\x17\x3c\xf3\xc4\xa2\xcf\x5f\x88\xba\x52\xe2\x11\xcc\xaa\x61\x77\xa3\xe1\x46\xce\xab\xfc\x16\xcb\xc3\x08\x0c\x61\xc6\x08\x01\x0a\x23\xa4\x4c\x98\xac\x71\xd3\x56\x53\x0c\xb8\x77\x77\x38\xb7\x5d\xab\xd9\xe6\xc4\x9c\xbe\xee\xd0\x98\xdf\x5b\x03\x57\xe9\xd6\xda\x46\x67\x04\x86\x30\x63\x84\x00\x85\x11\xca\xb1\x26\x72\x70\xcb\x6c\x1c\x6f\x7d\x26\xd1\x3d\xa2\xb3\x14\x64\x1a\xe7\xf5\xe0\xdb\x82\x52\x16\x89\xd9\x1d\x41\x7d\x06\x1d\xdc\x63\x15\x33\x46\x08\x50\x18\x21\xe3\xa4\xf6\x35\x57\xb1\x8a\x8f\xf8\x05\xb5\x0b\x89\x6d\x61\x15\x77\x7f\xab\xbc\x38\x26\xa1\xf1\xb3\xd0\xe2\x54\x08\x48\x59\x02\x08\x0c\x61\xc6\x08\x01\x0a\x23\xb4\x68\x66\xe8\xcb\x0a\x0d\xf5\x5d\x7f\xa7\x74\xda\x56\xec\xf3\xa7\x77\x2f\x04\x37\x4c\x73\xd5\xea\xcb\x9e\x1f\x7d\x18\xe8\x62\x80\xdb\x40\x31\x63\x84\x00\x85\x11\xa6\x46\x72\x1d\x77\x91\x08\xd4\x1c\x1f\xd0\x33\x30\x65\xb5\xf5\xb5\x2e\x48\x59\x15\xbc\x36\xed\x44\x63\x61\xca\xc9\x91\xc4\x85\x3b\xc3\x61\xc6\x08\x01\x0a\x23\x1c\x93\x3d\x64\x44\xef\x28\x51\x3f\xa3\xee\xb1\x72\xf6\x5b\xe3\x2c\x81\x96\x6d\x48\x88\xa6\x5b\x23\x14\xf8\x7d\xe4\x3b\x9e\xad\x32\x02\x43\x7f\x89\x11\x1e\xf4\x64\xde\x6b\x26\x14\x46\x78\xc6\xf7\xb2\x92\x73\x0f\xf7\x6f\xdf\x22\xe3\xcf\x71\x83\xcf\x7f\x76\x73\xac\x65\x66\x4b\x74\x4b\xdc\x97\xa8\x6e\x7b\xff\x22\xe0\x14\x02\x43\x98\x31\x42\x80\xc2\x08\xf5\x2a\x4a\x5b\x6d\xd9\xed\x82\x77\xdb\xc9\xd3\x55\x43\x68\x5b\xea\x8a\xb3\x46\xba\xf4\xb5\x7c\xd3\x3d\xf9\x77\x47\x92\x0a\x54\x10\x18\xc2\x8c\x11\x02\x14\x46\x28\x11\xf9\x28\x43\x61\x55\x87\xc3\x4c\xf1\xa1\x6e\xea\xc8\x07\xe6\x1b\x3c\xa9\x1d\xcb\x3f\x14\xa4\x4f\xdf\x6f\xf9\x9c\x52\xf3\x81\x15\x81\x21\xcc\x18\x21\x40\x61\x84\x84\x21\xea\x9f\x6a\x07\x2e\x3b\xd2\x4e\x78\xbd\x23\x78\xfd\x27\xf7\xf9\xfb\x98\xdb\xb6\xd7\xed\x7a\xf3\xb4\x36\xb3\x69\xfc\x9c\x70\xbb\x2d\x66\x8c\x10\xa0\x30\x42\xeb\xcd\xc0\x1f\xcd\xdf\x9a\x5e\x7e\xe8\xe6\x3a\xbf\x21\x71\x29\xeb\x89\xaf\xc6\x83\x99\xb8\xa1\x80\xb5\x6c\x12\xf5\xe8\x3b\xef\xe9\x11\x18\xc2\x8c\x11\x02\x14\x46\x18\xce\x80\x97\x13\x5d\x55\xa8\x9c\xff\x7d\xf2\xb1\x79\xca\xcc\x1d\x07\xce\xd7\x2f\x8b\x9c\xe6\x8b\x96\xe7\xa4\xab\xea\x78\x5e\xaa\x23\x30\x84\x19\x23\x04\x28\x8c\x50\x89\xb2\x41\xfd\x74\x4c\x18\x6d\x4d\xc1\x95\xea\x5b\xcb\x2c\xf7\x9d\x15\xd8\xb2\x65\x19\x74\xab\xba\xc9\xa2\xcb\xb2\xd6\xa7\x65\x11\x18\xc2\x8c\x11\x02\x14\x46\xd8\x9b\x4e\x65\x77\x5b\x4c\x77\xa8\x13\x66\xdf\xed\xf8\xfe\x63\xd4\x33\xb9\xa4\x82\xcb\xba\xed\x9e\xc0\x0f\x45\xfb\xf0\xb0\x7b\x4c\x08\x0c\xfd\x25\x46\x78\xd0\xec\xba\xd7\x4c\x28\x8c\xb0\x97\xb9\x72\x69\xd8\x99\x20\xd0\x9c\x38\xbb\x60\x46\xb6\x61\x38\xb5\x85\x73\xa2\x9d\x2b\x43\xaf\xf8\xf3\x21\x51\x99\xa9\x36\xdc\x49\x1a\x33\x46\x08\x50\x18\x61\x65\xf9\xf0\xcd\x89\x9e\xc4\x96\xa0\x7f\x2c\x68\xe9\x2e\xba\xca\x35\x45\x11\x8b\x44\x9d\xb8\x2b\x55\xb8\x1b\x67\x66\xa1\xbd\xeb\x84\xc0\x10\x66\x8c\x10\xa0\x30\xc2\xa7\x14\x7f\xfe\x79\x88\x44\xff\x61\xea\x0f\x3d\xe3\x58\x7b\x27\x3d\xad\x9a\x25\xf3\x64\xbc\xa1\xa2\xce\xdc\x8a\x49\x37\x49\xe5\x65\x04\x86\x30\x63\x84\x00\x85\x11\x5e\x28\x92\x9c\x8d\xf0\x8a\x54\xa0\xd6\x36\xd6\xda\xf2\xe8\xa7\xce\x10\xb8\xbd\x21\xbb\x65\x2d\xb8\xb6\x3e\x19\xbe\x68\x61\x89\xdb\x78\x30\x63\x84\x00\x85\x11\xee\x4a\xbd\xfc\x5a\x69\x6c\x7e\xfb\x75\x4f\xce\x9f\xa4\x0d\x6e\xcb\x1f\x2d\xad\xdf\x6e\x9a\xd1\xa5\x69\x67\xed\x14\x36\x30\x4f\x5a\x20\x30\x84\x19\x23\x04\x28\x8c\x90\x78\x61\xd7\xb8\x10\x2f\xa7\xa9\x2f\x83\xd8\x9a\x3c\xd9\x7c\x5c\x79\x74\x29\xa4\xa1\xb8\x58\xa8\x23\x6a\x68\xb7\xb9\x2c\x0f\xf7\x19\x98\x31\x42\x80\xc2\x08\xe3\x2c\x98\x42\x28\x57\x19\x9b\x86\x57\x14\xc3\x8f\xba\xcb\xbc\xee\x1f\x3d\x99\xbc\x4d\x34\x42\x73\xa9\xce\x60\x98\x94\x81\x12\x46\x60\x08\x33\x46\x08\x50\x18\xa1\xd5\x63\x8f\x0f\xf5\xaf\xdb\x45\x23\x3b\x8b\x03\x45\xed\xbb\xd4\x77\x94\x6f\x3b\x89\x8e\x47\xc8\x28\x16\xe1\xd7\xfc\x4c\x9a\xc6\xad\xab\xbf\xc4\x08\x0f\x3a\xdd\xed\x35\x13\x0a\x23\xfc\x2e\x30\x90\xbf\xe5\xc0\xde\xe6\x35\x54\x56\xaf\x69\x33\x53\x7d\x89\x59\x27\x95\x6a\x23\xac\x71\x74\x81\x27\xa8\x68\xf4\x2a\x1e\x02\x43\x98\x31\x42\x80\xc2\x08\x6f\x22\x3c\x82\x69\x85\x05\xa7\x47\xad\x23\x0c\x6b\x54\x6a\x4c\x0c\x6b\x09\x0c\x47\x2f\x9d\xb5\x8f\x74\xf8\xa0\x0a\x09\xa6\xe2\xc6\x0a\xcc\x18\x21\x40\x61\x84\xb2\x15\xf3\xed\x67\x7b\xf2\xcc\xa7\xa6\x28\x72\xb5\xaf\xe9\x75\x4a\xd5\x5e\x2c\x3e\x67\xff\xf3\x66\x08\x63\x2b\x59\x7f\x94\x23\x6e\x47\xc7\x8c\x11\x02\x14\x46\x78\x84\x7c\x64\x99\x60\xed\xac\xea\x08\x61\x97\x99\xa1\xe8\xe5\x16\x56\x79\xf3\x4d\xef\x87\xde\x57\x84\x34\x5b\x6f\x39\x8c\xb3\x32\x20\x30\x84\x19\x23\x04\x28\x8c\x70\x5c\xda\x8b\xa2\x3d\x48\x59\x28\x8e\xe4\xcc\xef\x4d\xbf\x14\xa3\xc4\x87\x0b\xbd\xb1\x13\x8c\x54\x2a\x1a\x75\x6e\xcc\x9a\xfe\x02\x08\x0c\x61\xc6\x08\x01\x0a\x23\x14\x56\xbb\xe5\xc5\xd8\xd1\xcb\xd3\xf3\xec\x6e\x90\x26\x87\x8d\xf1\xd3\x0d\xa6\xd4\x2d\xdf\xce\x81\x20\x93\x33\xdd\x8c\xee\xb7\x70\x67\x26\xcc\x18\x21\x40\x61\x84\x4a\x32\x23\x65\x82\xb7\x0c\xd3\x33\x96\xd4\x38\x46\x67\x5d\x89\x92\x3f\x0e\xa6\xa6\xa7\x88\x90\xac\x31\x1a\x72\xb5\xb7\x64\x1a\x22\x30\x84\x19\x23\x04\x28\x8c\xb0\xd9\xec\xb6\xa2\x46\xe9\x91\x49\x82\x91\x21\x77\xc7\xac\x4d\x26\xcd\x68\xf5\x8f\xce\xd1\x16\xf1\x8c\x22\x57\xa3\x13\x83\x9f\x5f\x42\x60\xe8\x2f\x31\xc2\x83\xee\x3f\xf6\x9a\x09\x85\x11\xaa\x6d\xcb\x10\xcf\xf9\xd5\xd0\x32\x4c\x7b\xd4\x97\x8a\x0a\x2b\x39\x5f\x65\x76\x3f\xf9\xed\xca\x9f\x63\xb2\x82\xb3\xf1\x8c\x01\xb8\xee\xc6\x8c\x11\x02\x14\x46\x78\xdd\x86\xeb\x32\xc1\x2c\x83\xbc\x71\x50\x1a\x1b\x41\xdc\x55\xfb\xa0\x1c\x6e\xcf\x45\x4f\xc8\x01\x7a\x35\xb0\x13\xdf\x9a\x76\x05\x81\x21\xcc\x18\x21\x40\x61\x84\xd1\x6e\xa5\xde\x95\x2c\x87\x37\xa8\x9b\xe5\x78\x6c\x07\xe4\x6a\xf2\x86\x9e\x72\xeb\x93\x75\xcf\x08\x09\x5a\xad\x92\x04\xaa\x73\x22\x30\x84\x19\x23\x04\x28\x8c\xf0\x75\x7b\x27\xdd\x40\xcd\xe2\x5a\x79\x13\xf5\xcc\x57\xdd\xe9\x4d\x49\x6d\xd8\xfc\xd1\xaf\xba\xf2\xe6\xd3\x9b\x9a\xcc\xf2\x9f\x71\xe7\x00\xcc\x18\x21\x40\x61\x84\xd4\xcc\xde\x0f\x1c\x0e\x77\xfa\x1b\x9d\x72\x6d\x39\x26\xa1\x10\x45\x45\xea\x59\xff\x7c\x45\x50\xbf\x3b\xe2\x74\xe2\x3f\x6a\xb5\x27\x11\x18\xc2\x8c\x11\x02\x14\x46\x18\x72\x41\x4f\xae\xbb\x99\xc4\x82\xc4\xdb\xd2\xdf\x5f\x70\x73\x78\xc5\x58\xc1\x0b\xc9\x5b\x4d\x93\x58\x58\xa7\xd1\x37\x53\xb6\x47\x60\x08\x33\x46\x08\x50\x18\x61\xb8\xec\x3c\x7f\xb8\xa0\xe2\xc3\xab\x1d\x4a\x11\xde\x03\xc7\x15\xed\x62\x5a\x7a\x4b\x5e\xfe\x3e\x8c\xf7\x69\x93\xf2\xfb\x50\xe9\x59\x04\x86\x30\x63\x84\x00\x85\x11\x72\x35\x17\x8d\x3e\x38\x39\x19\xd3\xc3\x9d\xd6\x1a\x5e\xb2\x72\x9e\xe8\xba\x68\xdf\x5c\xca\x4c\xbc\xcf\x39\x23\x25\x23\x6e\xbe\x13\x08\x0c\xfd\x25\x46\x78\xd0\x0d\xe1\x5e\x33\xa1\x30\x42\x97\x61\xd8\x3b\x99\xb5\x87\x84\xf7\xc3\xb4\x9a\xc7\xa3\xe9\x47\xc9\x17\xf4\x9d\x15\x49\xe6\x1d\x8a\x4e\xaa\x11\x90\xbc\x6f\x52\x42\x60\x08\x33\x46\x08\x50\x18\xe1\x3f\x94\xef\xd2\x4a\xcd\xde\xb1\x4b\x67\x07\x34\xc6\x0d\x2e\xc6\x1b\x98\x24\xde\x08\xf9\x7c\x55\x9a\x93\x99\xc5\x21\xb3\xe3\x84\x2e\x02\x43\x98\x31\x42\x80\xc2\x08\x2d\x9f\x08\x8b\xbd\x78\x2e\x35\x96\x4d\x53\x2c\x3d\xa3\xcc\x6a\xc5\x1d\xb7\x75\x34\xe9\xfd\xe1\x4a\x0a\xc6\x67\xbe\xe6\x7c\x86\x44\x08\x0c\x61\xc6\x08\x01\x0a\x23\xfc\x11\x40\xb6\x46\x2c\x5a\x93\xf8\xc4\xf5\x1d\xc5\x5b\x39\x71\x9b\x25\x86\x38\xd1\xbe\xf4\x87\xa5\x6f\xd4\x8e\x3a\x64\x05\x69\xe2\x7e\x0e\xcc\x18\x21\x40\x61\x84\x4f\xfd\xc9\xcb\x86\x15\x40\x24\xbf\xf2\xcc\x84\x2a\xdc\xa6\xef\x32\x7e\xa8\x35\x9d\x5e\xc3\xc6\xbf\xc7\x63\x38\x9e\x3e\x5c\x1a\x81\x21\xcc\x18\x21\x40\x61\x84\xc1\xe7\x6f\xfc\xa0\xf0\xd6\x08\x0b\x91\x95\x17\xf8\x4d\x59\x94\x42\xee\x1a\x6d\xe4\xcd\xca\x94\x1f\xf6\x56\xcb\xef\x0f\x9e\x18\x1d\x02\x43\x98\x31\x42\x80\xc2\x08\x13\x4c\x4e\xdb\x8e\x31\x6d\xe1\x5b\x53\x16\x95\xa7\x3f\xe4\xec\x09\xb6\x74\x2f\xe9\x6a\xe1\xe1\x55\xd0\x15\x61\x5a\x8e\x90\xc1\x8d\xdd\x98\x31\x42\x80\xc2\x08\x19\x4c\x52\xaa\x8a\x9b\x85\xa3\x68\x56\x27\xb4\xe5\x4e\xc7\x4c\x5e\x90\x89\xa8\x28\x8d\x1d\x17\xe0\x56\xc9\x0a\xbf\xa4\x5e\x88\x3b\xa2\xfc\x25\x46\x78\xd0\x1d\xfa\x5e\x33\xa1\x30\xc2\xc2\x84\xe3\x64\xc8\x44\xdb\x26\x21\xcd\xf2\x19\xf5\x71\xb1\x74\xf9\xa6\xc4\xed\x7c\x2a\x1b\x1b\xe4\xd5\x8e\x84\xaa\xd4\xbb\x63\x08\x0c\x61\xc6\x08\x01\x0a\x23\x3c\xfb\xb0\xba\xb6\xdd\xe3\x28\xe1\x1a\xd1\xd1\xcd\x25\xb7\xef\x81\x7d\xe3\x51\x1a\x46\xb3\xb6\x19\x12\x17\x25\x06\xa0\x26\x5d\x3b\x04\x86\x30\x63\x84\x00\x8d\x11\x4e\x7d\x3b\x94\xcc\xea\xc8\x5e\x19\xd7\x23\xc6\x65\xdb\x41\xbb\xfd\xca\x13\xbe\x72\xc1\xa3\x7f\xe1\xfe\x8d\x21\x31\x27\x57\xdc\x23\x1f\x33\x46\x08\x50\x18\xa1\x7f\x85\xf9\xf3\x3a\x2b\xa5\xd3\x78\x4e\x84\x97\xaa\x0a\x98\x10\xbd\x85\xd5\x86\x92\xf7\x67\xc9\xc2\x18\xbe\xaf\x72\x1d\x22\xf5\x40\x60\x08\x33\x46\x08\x50\x18\x21\x29\xcf\xb1\xef\xab\xe9\x53\x8f\xce\xec\x30\x1f\x6f\xa7\xa0\xb6\xb0\xa3\xcc\x89\xa1\xfe\xce\x19\xc9\xd6\x7b\x95\x37\xfd\x38\x09\x29\x02\x43\x98\x31\x42\x80\xc2\x08\x5b\xaf\x2e\x33\x17\x9d\xa6\x9e\xf9\xfe\x5b\x95\xb2\xd7\xcb\xc5\xd2\x87\x93\x1e\x0c\x2e\xcc\xdf\xb0\xf0\x79\xf7\x67\x40\x8f\x45\x08\x81\x21\xcc\x18\x21\x40\x61\x84\x75\xd9\x55\xcd\x26\xc2\x19\xea\x66\x1a\x90\x91\xb0\xf3\x90\xc0\xc9\x11\x43\xda\xb6\x0f\x1f\xc6\x48\x3c\xf9\xfd\xdf\xe5\xa9\x1c\x41\x60\x08\x33\x46\x08\x50\x18\xa1\xb8\xb9\xd7\xf2\x29\xbc\xf2\x86\xf8\x25\x9d\xd1\x04\xbf\xb0\xe7\x85\x14\xdb\x34\x77\xc9\x7f\x48\x54\x77\x30\x7f\x6d\xb3\xf2\xe3\x47\x60\xe8\x2f\x31\xc2\x83\xbe\xef\x13\xf5\xb2\xef\x64\xe1\xf8\x65\xf9\x23\xbc\x35\x2f\x2a\x99\xa3\xc7\x73\x6b\x6c\x17\x4f\x57\x8f\xfb\x70\x68\x11\xe7\x06\x5c\xbb\x58\xd5\x95\x2a\xb9\x2f\xda\x35\xc3\xd6\x29\xed\x4d\x9c\xec\x3a\x3b\xf9\x47\xf1\xe3\x8b\xb7\x06\x78\xfe\x94\xfa\x27\x1e\x1d\xbb\x40\x39\x29\xf4\x89\x4b\x5d\x6b\x5f\x94\x90\xf1\x31\x8f\x79\x7e\x9a\x2a\x77\xe1\xaf\x98\x31\xcb\x23\x88\x69\xe7\x6b\x42\x31\x57\x9e\x82\x3b\x1e\x67\xff\x89\x7d\x26\xe0\xb2\x2f\x8a\x3f\x41\xb3\x76\x3d\xba\x13\xf1\xeb\x14\xea\xf1\x5b\xea\x9e\xbc\xfe\xa2\x4f\xee\x3c\xe7\xe9\x95\x4a\xc6\xa6\x7e\x6a\x2b\x3a\x81\x7d\xd1\xf3\x8f\xf5\x2a\x03\xd3\xab\xaf\x04\xe6\xd5\xdb\x4f\x10\x3c\x1b\x2b\x7b\x7f\x88\xef\xd4\x6d\xc9\x91\x16\xc1\x61\xe1\x2f\xe2\x61\xec\xfb\xa2\x14\xcf\xee\x94\x68\xc1\xf1\x95\xdb\xcf\x38\xee\xfd\x6e\x61\xbc\xd9\x4b\xb0\x79\xb9\x77\xf6\x7d\x81\xfb\x0b\x5a\x13\x16\x3d\xe9\xee\x7d\xd1\x18\xab\x52\x8f\x22\x24\xe8\xdb\x57\xbf\x3e\xdf\x0c\x5f\x16\x13\x61\xff\xcf\x27\x8c\xe4\x26\xc4\xf5\x08\x57\x4b\x34\x3f\x4c\xa8\xec\x8b\xf2\xcf\x2a\x48\x2a\x12\x1f\x27\xfc\x40\x5a\x4a\x41\xa0\xfe\xe1\x2d\x11\x91\x8e\x92\x6b\x0f\xd1\x9d\xa8\xee\x66\xad\xc8\x40\x96\x9e\xff\x7d\xd9\x77\xd0\x6f\x75\x6f\x47\x43\x61\x84\xd7\x47\x7a\xcd\xc1\xa5\x27\xf3\x6a\x3c\x55\x16\x77\x2e\xc3\x2f\x13\xe0\xad\x5f\xda\xc6\xb3\x7f\x0a\xed\x84\x35\xfa\xcc\xe5\x55\x11\x18\xc2\x8c\x11\x02\x14\x46\x68\xd5\x7b\xaa\x8f\x27\x75\x76\x5b\xbe\x9a\x43\x59\x54\x42\x90\x9c\x2d\xa7\xca\x97\xf4\x6e\xa2\xbf\x66\x67\xc8\xf0\x66\xdc\x4b\x5c\x07\x61\xc6\x08\x01\x0a\x23\x24\xd7\xfb\xe3\x9c\xc4\x28\xd8\x96\xef\xdb\x73\x62\xc7\xd2\xed\x42\xcf\x97\x6a\xa9\xf0\xb4\xb6\xd0\xc1\xec\xca\x94\xe6\x0f\xfe\xc6\x08\x0c\x61\xc6\x08\x01\x0a\x23\xb4\xf0\xa9\xb0\x95\xb0\xae\x3b\x99\x61\xc3\x46\x71\x25\xe5\xa9\x15\x24\xb5\x9a\xc2\x6d\x32\x68\xc0\x6e\xdb\xf3\x3b\x85\xf0\x2c\xee\xc0\x87\x19\x23\x04\x28\x8c\xf0\x7a\x07\xb5\xe1\xad\x3c\xbd\xab\x65\xbc\x1e\xc1\xfe\xe6\xfe\xa4\x94\xb7\x45\x19\xa9\xe0\x1b\xc9\xad\x35\x52\x27\xe3\x93\xac\xd4\x11\x18\xc2\x8c\x11\x02\x14\x46\x78\x76\x86\x55\x28\x2b\xd5\xb9\xc8\x85\xc5\x43\xe6\x6d\xd9\x6d\x7a\x5a\x3c\x02\x1f\xa5\xaf\xc7\xb9\xba\xac\x94\x8e\x7b\xb5\xd8\x42\x08\x0c\x61\xc6\x08\x01\x0a\x23\xd4\xf9\x11\x81\x17\x99\xc7\xe0\x64\x6d\xe9\x59\x83\x08\x89\x38\x3d\xa9\x92\x3d\xf4\x85\xff\x93\x73\x40\xcf\x97\x4a\x55\x3d\xad\xf3\x08\x0c\x61\xc6\x08\x01\x0a\x23\xec\xd7\x0e\x44\xb4\x17\xea\xb2\x23\x3c\x7a\x1d\x33\x5d\x40\x66\x41\xb7\xc7\x49\x51\x79\xe6\xd7\x1d\x7c\x78\x89\xef\xec\x86\x28\x10\x18\xfa\x4b\x8c\xf0\xa0\x7d\x67\xaf\x99\x50\x18\xe1\xb2\x21\xc1\x21\xf6\xac\xd5\xe6\xf7\x05\x31\x69\xc5\x53\xeb\x6f\x66\x0b\x0f\x31\xdd\xa1\x7c\xeb\x1c\x41\xec\xc2\x29\xf7\x8a\x8a\x19\x81\x21\xcc\x18\x21\x40\x61\x84\x5d\xaf\xbe\x88\x87\xd1\xaf\x52\x68\x33\x1a\x2f\xe9\x52\x9a\xd3\x0f\x5a\x54\xf0\xad\x59\x9e\x1a\x09\x5a\xe7\x78\xd2\xb6\xa0\x07\x10\x18\xc2\x8c\x11\x02\x14\x46\xe8\x4b\x7b\x6b\x87\x67\x64\xfa\xe2\x4b\xd1\xa1\xea\x39\x29\xea\xde\x39\x50\x6c\xf0\x6d\x22\xc7\x2f\x72\x24\x45\xd6\x2b\x51\x86\x11\x81\x21\xcc\x18\x21\x40\x61\x84\xdf\x82\x6e\x51\x09\x0f\x11\xd2\x24\x54\x04\x14\x11\x64\xef\x3e\x43\xb8\x5a\x65\xee\x48\x9b\xf5\x92\x90\xd2\x59\x57\x95\xce\x59\x21\x30\x84\x19\x23\x04\x28\x8c\xd0\x8f\xbb\x48\x3c\x88\xa7\xd0\xfa\x72\xd8\x87\x8e\xa6\x4e\x0b\xe5\xa3\x6d\x83\x2d\x01\xc2\xb5\x4f\x4e\xe0\x8f\xdd\x6e\x39\x6b\x45\x8e\xc0\x10\x66\x8c\x10\xa0\x30\x42\x85\x88\xe0\xf4\x74\xd7\xf2\x63\xba\xda\xad\x43\x33\x05\x5b\xd1\x27\x3c\x5a\xc3\xfe\xe4\x39\x95\x53\x6b\x9b\xf0\x30\x7e\xbe\xcf\x8d\xc0\x10\x66\x8c\x10\xa0\x30\xc2\x13\x02\x2f\x7e\x18\x4f\x93\x96\x3b\x28\xb2\xf9\xd7\xb6\x8e\x31\xef\xd4\xeb\xa5\x29\x85\x5a\xc9\x2b\xa6\x48\x9b\xe3\xa9\x89\xcb\x20\x30\x84\x19\x23\x04\x28\x8c\x50\xd3\x4a\x92\x45\xe0\x93\x9d\x0d\xc7\x9f\x35\x31\xae\x12\x22\xfe\x38\x12\x76\xda\xdb\xb1\x3b\x11\x74\x04\x3d\x2c\x57\xa5\x0e\xb1\x21\x30\xf4\x97\x18\xe1\x41\x4f\xe6\xbd\x66\x42\x61\x84\xf1\xe0\x65\xa7\x4c\xbe\xc3\x23\x3e\xfb\x26\x52\x2a\xca\x9f\x1c\x7a\x44\x29\x22\xf5\x9e\x6d\xa7\xfa\xce\x8d\xd8\xd5\x7f\xea\x71\x42\x60\x08\x33\x46\x08\x50\x18\x61\x57\x46\x05\x15\x5e\xc9\x91\xa4\x0b\x7c\x7f\x9a\x83\x05\x13\xe2\x04\x2a\xd5\x12\x9d\xdc\xae\x72\x89\x86\xda\xc1\xef\x3d\x56\x44\x10\x18\xc2\x8c\x11\x02\x14\x46\x38\x7a\x9c\x9e\xe6\x41\x9f\x8a\x37\x25\x9d\x71\xd7\x97\x54\xfa\x1a\x3c\x77\x7a\x8e\xb5\x3a\x23\xf7\xb9\x44\xe3\xda\xe0\x5b\x51\xae\x08\x0c\x61\xc6\x08\x01\x0a\x23\xb4\xb7\x3f\xd4\xee\xb0\xdb\xc4\xdb\xeb\x40\xc9\x1e\x20\x56\xac\xf2\x68\xf3\x26\xef\x1d\xfd\x65\x12\xa6\xa3\x81\x9c\x6b\x39\xf3\xb8\x05\x82\x19\x23\x04\x28\x8c\x50\xf3\xb4\x20\xd7\x8f\x8d\xf4\x93\x8c\x44\x3e\x78\x7d\xd5\x93\x2a\xae\x56\x76\x22\x03\x6c\x0c\x52\x47\xab\xbc\x75\x53\x37\xea\x64\x11\x18\xc2\x8c\x11\x02\x14\x46\x68\xc3\x74\x44\xb9\xa5\x57\xa3\x75\x48\xf4\x15\xc5\x13\x7c\x2f\xa6\x3e\x4a\xf7\x24\xa9\xa8\x81\x43\xf0\xbd\x30\x1f\xed\xad\x06\x42\x04\x86\x30\x63\x84\x00\x85\x11\xc6\xc1\xbf\xd8\x62\x8a\xfe\xb1\x0e\x9f\xec\x53\x88\xd7\x78\x27\x23\x69\x3c\xb0\xfa\x9a\x92\x7b\xe5\x85\x6b\xda\xd7\xf3\xa6\x8f\x71\x0b\x1d\x33\x46\x08\x50\x18\xa1\xc9\x21\x3b\xca\xb3\xc3\x43\x72\xbc\x81\x53\x7e\xaf\xf3\x62\xbe\xf3\x33\x53\x6a\x59\x3e\xd2\x18\xfb\x30\xff\x7e\x61\x2b\xe4\xb1\x01\x02\x43\x7f\x89\x11\x1e\x34\xbb\xee\x35\x13\x0a\x23\xa4\x6e\xfc\x58\x1f\xd1\xff\xf1\xed\xa2\xb0\x4d\xfe\x0b\xda\xb9\xab\x35\x6c\xb3\x75\xd5\x9a\x7d\x56\x53\x9a\x6a\x25\xd9\x84\x2a\xb8\x11\x0c\x33\x46\x08\x50\x18\x21\xcf\x67\x82\xc3\x85\x93\x12\x2d\xe9\xba\x64\x9b\x1d\x56\x51\xa4\xba\x45\x04\x09\xa9\x47\x59\xf3\x0d\x21\x17\x02\xf9\xd0\x77\xf4\x08\x0c\x61\xc6\x08\x01\x0a\x23\x4c\x6f\x4c\x54\xe8\xce\x88\x03\x47\xe9\xcd\xcb\xc2\xe4\x5b\x5b\x73\x3a\x86\xf3\x21\xe2\x74\x3b\xfb\xd9\xa5\xca\xd9\x4d\x07\xdc\xd3\x0f\x33\x46\x08\x50\x18\xe1\x8e\x0c\x61\x9f\x31\xa5\xda\x6f\xe7\x01\x93\xae\x28\x3a\xbb\x0f\x96\x1d\x75\xe7\x93\x34\x9d\xb7\xd7\xac\x6b\x28\xa6\xa8\x6a\x05\x10\x18\xc2\x8c\x11\x02\x14\x46\x58\x57\x4d\x6c\x1d\x3b\x4f\xac\x9e\xe2\x2b\xb9\xac\xaa\xbf\x78\xac\xa8\x61\x7e\x52\x8c\xe6\xa9\x41\x6e\x40\x38\xe9\xa7\x12\x36\xdc\xd8\x8d\x19\x23\x04\x28\x8c\xf0\x88\xf5\x98\x87\x8e\x8f\xcd\xf0\xc0\xdd\x59\x97\x11\xd5\x8e\xeb\xad\x5f\xb6\xec\xba\x4f\xb8\x4e\x47\x2e\x8a\x71\x73\xd5\xfb\xf3\x20\x30\x84\x19\x23\x04\x28\x8c\x30\x33\xcd\x9a\xeb\xb1\xad\x4b\xf5\xd7\x79\x7e\xcf\x17\x2e\xe1\x4b\xac\x1c\xb1\x5f\x93\xd7\x84\x5b\xf5\x37\xae\xb9\xaa\x0c\x24\x11\x21\x30\x84\x19\x23\x04\x28\x8c\xb0\xbf\x73\x85\xf9\x46\x4e\xaf\x5f\x4a\x45\xca\x9a\xe6\x33\xc9\x09\x72\xa2\x66\xdf\x55\x06\xdf\x41\xc6\x12\x27\x6f\xae\x40\x6f\x3b\x04\x86\xfe\x12\x23\x3c\xe8\x74\xb7\xd7\x4c\x28\x8c\x30\xda\x43\x61\xfe\xf8\x99\x72\x0b\xa7\x0c\x61\xe9\xaf\x2e\xdc\xc8\xbd\x84\x15\x9d\xc9\xc5\x2b\x99\xca\x01\xa6\xf7\xab\x91\x34\x25\x04\x86\x30\x63\x84\x00\x85\x11\xca\xe6\x7c\x61\xba\x65\xfd\xb0\x39\xeb\x77\x62\x4e\xba\xc7\xcd\x27\xe9\x16\xa6\xf6\xe7\xac\x7c\x2f\xf5\x06\x6a\x3f\x9c\x9e\xc2\x77\x41\x60\x08\x33\x46\x08\x50\x18\xe1\xcd\xc7\x72\x6d\x51\xeb\xc7\xc5\xd8\xc1\x93\x79\xab\x3c\xd8\x56\x55\x85\xf8\xd8\x27\x4f\xf7\x5f\x1f\x24\x9e\x66\x1b\xf3\x7c\xc7\x6d\x0a\x98\x31\x42\x80\xc2\x08\xf5\x3c\x2e\x3c\xcf\x0e\xe7\xcb\xf5\x3f\x25\x9d\x1b\xd5\xe3\x7c\x2d\x6c\xf7\x88\x95\x6a\x5d\xf5\x66\xcb\x97\x2b\xa7\xb8\xdb\x62\x70\x3b\x3a\x66\x8c\x10\xa0\x30\x42\x7e\x5d\x6f\xf1\x12\x81\x70\xe6\x62\xb2\x4c\xea\x34\xb2\xf7\x1e\x3f\xd4\xca\xea\x46\x89\x9d\xe4\x66\xf2\xa4\xf0\xf9\xef\xf1\xe3\xc6\x6e\xcc\x18\x21\x40\x61\x84\x9f\xd5\xde\x28\x87\x78\xbf\xb7\xe2\x4f\xe4\x3c\x1d\x2b\x2f\xae\xa7\x60\x93\xde\x5e\x3d\x18\x22\xb7\xe3\x9f\xbc\x91\x72\xe6\x27\x3f\x02\x43\x98\x31\x42\x80\xc2\x08\xf3\x2e\x5d\x44\x9a\x82\xe7\xe9\x25\xd7\xc7\x6f\xcd\x98\xfb\x4d\xa8\x26\xe2\xbf\xac\x91\xf4\xfc\x44\xde\x38\xb6\x55\xf0\x64\xe8\x1a\x02\x43\x98\x31\x42\x80\xc2\x08\x27\x6f\xcc\xbf\x5c\xe6\x6d\xe9\xb7\x17\x9d\xd8\xde\xcc\x64\xa7\x08\xeb\x7b\x6a\x35\x66\x19\xff\xed\xf1\xd2\xad\x00\x1b\x95\x36\x6d\x04\x86\xfe\x12\x23\x3c\xe8\xfe\x63\xaf\x99\x50\x18\xa1\xd1\xd4\xe2\x2d\xbd\xcf\x87\x99\x8b\x55\x69\xb3\xd3\x12\xd6\x6e\x88\x7d\x4e\x9a\x9f\x1f\x9c\x70\x26\xce\x7a\xbd\x49\x67\x79\x4f\x07\x81\x21\xcc\x18\x21\x40\x61\x84\xaf\x75\x25\x85\x79\xa6\xc4\x73\x88\x5f\xab\x1a\x5f\xc4\xdb\x6e\x6c\x19\xba\xf3\x8e\x5f\x5e\x7a\x42\xc5\x8a\xbd\x9f\x4d\x8d\xfa\x1f\x04\x86\x30\x63\x84\x00\x85\x11\xf2\x0a\x76\x85\x4d\x07\x68\x14\x93\xe5\x5e\x12\x5c\x64\xf7\x6d\x61\x1b\xdf\xd4\x2d\x7d\x1b\x96\x46\xec\xb5\xc8\x62\x7e\xdd\x50\x1a\x81\x21\xcc\x18\x21\x40\x61\x84\xe6\xc1\xbb\x4f\x43\xe8\xa3\xac\x8b\xd8\xb2\x2a\xbe\x9b\x52\xa4\x0e\x6c\xa8\xf8\x82\xc8\x49\x63\xfc\xfe\xe2\x18\xd6\x50\x2a\x13\x04\x86\x30\x63\x84\x00\x85\x11\x42\xc9\xb7\x56\x18\xc2\xd8\x94\xe1\x94\xf9\xdc\x2b\xc1\x15\x62\xac\x93\xf2\x7c\x8f\x12\xe8\x44\x2b\x1f\xf1\xdc\xf1\xa4\x32\xa0\x45\x60\x08\x33\x46\x08\x50\x18\xe1\xca\x13\x73\xd6\x81\x4b\x92\x53\x8a\x6c\x8a\xb9\xa1\x63\xd2\x02\x37\x4d\x55\x98\x1f\x8f\x17\xb7\x9a\x12\x4e\x4e\x6d\xd0\x64\xd2\x21\x30\x84\x19\x23\x04\x28\x8c\x90\x71\xd1\x4b\xda\x47\xf5\x77\xcb\xb7\xdc\xeb\xf5\x0d\xf6\x35\x95\x57\xbf\xf6\xe7\x7d\xfb\xb6\xbb\x65\x61\xc9\x15\x34\xf9\x91\xd3\x08\x81\x21\xcc\x18\x21\x40\x61\x84\x5a\xa5\x66\x8c\x97\x3e\x9d\x31\x12\x22\xfb\xdd\x28\x3f\x23\xf2\xc0\xd7\x61\x89\xdf\x3e\x99\x7f\x21\x74\x27\xf9\xed\xd2\x5b\x65\x12\x04\x86\xfe\x12\x23\x3c\xe8\x86\x70\xaf\x99\x50\x18\xe1\x39\x96\xc6\x71\xbe\x91\xea\xf3\xb3\xf7\x88\xb5\x07\xaa\x94\xf8\x66\x66\x23\x2f\x7a\x64\xf7\x4b\x11\x0a\x91\x3f\xed\x7b\x5c\xa3\x81\xc0\x10\x66\x8c\x10\xa0\x30\xc2\x2f\x0b\xe0\x55\x20\xe7\xb9\x4c\xb3\xcc\x37\x56\xa7\xc6\xfa\x8b\xfa\xb7\x62\x54\x79\x42\xee\xbd\xbe\xc3\xb9\x5d\xb1\x4d\xd7\x8e\xdb\x6d\x31\x63\x84\x00\x85\x11\xca\xc7\x86\xbd\xf8\xb5\xec\xfb\x34\x6a\x33\x7e\x61\x55\x9a\xf3\xb7\xa2\x99\x75\xfe\xad\xd6\x99\x82\x7f\x6e\xcf\x3a\x26\xdb\x54\x5b\x21\x30\x84\x19\x23\x04\x28\x8c\x30\xec\x2c\xbe\xd3\xb6\xa5\x54\xad\x29\x23\x9e\x33\x7f\x96\xaa\x73\x4f\x32\x31\x63\x9e\x06\x83\x69\xe4\xf0\x96\x97\xd9\xb8\x23\x6e\x94\xc4\x8c\x11\x02\x14\x46\xe8\xa0\xfb\x5a\xbd\xfd\xb0\xb2\xb3\x60\xd0\xf9\x75\xd2\x9b\xa2\xf8\xee\x0a\xc0\x04\x34\xbd\x3e\xe2\x6c\xeb\x37\xa8\x11\x15\x70\x0e\x81\x21\xcc\x18\x21\x40\x61\x84\xf9\xd5\x5c\x96\xf9\x5f\xed\x0c\x84\x2c\xf3\xd3\x9f\x07\xdc\x54\x03\xaf\x58\x7f\x92\xea\xe9\x12\x48\x99\xd0\xd5\x9e\x3f\x7e\x81\x00\x81\x21\xcc\x18\x21\x40\x61\x84\x5f\xee\x5f\xd5\x7d\xfc\xdb\xe4\x61\x98\x72\x7f\x1b\x4c\x5c\xb2\xc1\x73\x6e\x2d\x41\xc1\x20\x6a\x58\xce\xda\x20\x53\x98\x87\x12\xb7\xae\x30\x63\x84\x00\x85\x11\xbe\xf3\x14\x60\x62\x3e\x27\xf6\xf3\xe3\x4a\xf0\x84\xdc\xef\x59\x47\xfe\x37\x36\x35\x8d\x7e\x6a\x1f\x8f\x67\x7f\xba\x42\xb2\x1b\x8e\xdb\x14\xfe\x12\x23\x3c\xe8\x0e\x7d\xaf\x99\x50\x18\xe1\x60\xcf\x97\x28\x32\xb7\x36\xbb\xe0\xc6\x7a\x9f\x1e\xc6\xd0\xd2\xed\xac\x3f\x6d\x15\x37\x56\x4f\xc9\x98\xbc\x97\x7b\xab\x25\x65\x8f\xc0\x10\x66\x8c\x10\xa0\x30\xc2\x94\x4d\xbe\xa0\x01\x8b\x38\x17\xfe\x72\xef\x81\x68\xf6\xa2\xcc\x0e\xda\xd7\xdf\xe4\x37\x39\x1d\x95\x4c\xaa\x2e\x4e\xbc\x17\x20\x43\x60\x08\x33\x46\x08\x50\x18\xe1\x44\xa8\x4d\x39\x29\x7f\xaf\x46\xa5\x56\x8b\x68\x85\xda\x65\x1e\x61\x49\xbb\xa8\x47\x27\xd7\xa2\xb6\xab\x83\x27\xe8\xb8\x88\x14\x11\x18\xc2\x8c\x11\x02\x14\x46\x28\x29\xe6\x23\x4e\xfb\x54\x6c\xac\x85\x84\x4a\x74\x49\x42\x38\x35\xb7\xaf\x4d\x4c\xcc\xeb\x02\x6f\xc0\xcd\xa5\x57\xd0\xc2\x53\xdc\x02\xc1\x8c\x11\x02\x14\x46\x48\x7b\x3f\x88\xec\x9f\x66\xd5\x4e\xbc\x3b\xe0\x81\xe9\x5d\x13\x1a\x19\x85\xe0\xd6\x8f\x9f\x1b\xce\xaa\xe6\xb3\xff\x94\x3c\x49\xa0\x87\xc0\x10\x66\x8c\x10\xa0\x30\xc2\x63\x78\x6c\x6f\x78\x36\xa8\x8c\x27\x9d\x75\xde\x94\x55\x9c\xae\x69\xe5\x98\x2a\x50\xe1\x70\x2f\xfa\x28\x5c\xa3\xbe\xf2\x40\x0c\x42\x60\x08\x33\x46\x08\x50\x18\x21\x0d\x95\xf5\x69\xfb\xa7\x3e\xed\x06\xf2\x97\xc9\x39\x77\x5e\xae\x8b\x96\x67\x32\x6f\x10\xf4\x40\xd2\xdb\xbf\x19\xdc\x19\x75\x95\x11\x18\xc2\x8c\x11\x02\x14\x46\xf8\xd9\x73\x44\x9c\x7e\xe6\x06\x61\xc2\x5c\x18\xe5\xec\xac\xca\x82\xdf\xa1\x33\xbf\x44\xf0\x03\xc3\x0b\x1a\x48\x0b\xae\x5e\x55\x57\x43\x60\x08\x23\x46\xf8\x8c\xea\xff\x6f\xa6\xba\x37\x22\x7e\x4d\x9c\xdb\x83\xee\xdd\xec\x29\x80\xc5\xf1\x1a\xb3\x50\x84\xe0\x3b\x32\x83\xf3\x97\x28\x3a\xe8\x1b\xb4\x15\xc5\x91\xa4\xfd\xef\xcf\x14\x28\x2a\xdc\x87\x68\x72\x2d\xca\x4c\x8e\x53\x2e\xf5\x48\x96\x18\x58\x48\x74\x6e\x3b\xdc\x1e\x48\xd3\x12\x5e\xdb\x3a\x3a\x37\xbd\x2f\xba\x2a\xdb\x44\xdb\xf7\x30\x41\x04\xff\x85\x7f\x64\xbd\x37\x63\xe2\x05\x8b\xe2\xbb\xf7\x13\x4e\x56\xf0\x51\x71\x9a\x0a\xdb\xe7\x94\xfc\x17\xfd\x2f\xfa\x5f\xf4\xbf\xe8\x7f\xd1\xff\xa2\xff\x45\xff\x5f\x8a\x86\xe1\xff\xbb\x61\x20\x74\x5f\xcd\x13\xac\x1b\x33\x91\xb2\xb5\x39\xb3\x0c\x6a\x41\x83\xdc\x9b\x1e\x0b\xa7\x5a\xae\x50\xbd\xcc\xba\x60\xe6\xf0\x2d\x57\x64\xc6\xb0\x6a\x5f\xf4\x5a\xfb\x0b\x4a\x52\x1f\xef\x69\x4a\x8e\xe2\xf3\x50\x50\x6c\x32\xa8\x4e\x1c\x83\x9a\x8f\xa8\xca\x97\x77\xba\xd5\xb9\xf5\x38\xca\xc9\xc1\x04\x78\x30\x01\x5e\xa0\x9c\x5c\x36\xfe\xbf\xab\x1e\x84\x87\x1f\x24\x8f\x1f\x80\x84\x2b\x10\x76\xca\xc9\xc9\xed\xfb\xb0\x71\x7d\xca\x5d\x3c\xf2\x4e\xba\x4a\xf8\x25\xef\x83\x49\x38\xe6\x5b\x94\xe0\xb6\x9c\x11\xc5\x47\xef\x7a\x37\xbe\x73\x8a\x73\xe1\xfb\xa2\x13\x36\x77\x65\x98\x3e\x10\x8d\x0e\x46\xd3\x57\x96\xce\x19\xbc\xe6\xcc\xd6\xbc\x3c\x3a\xc3\xd5\x2f\x29\xd1\x52\x2b\x79\x4b\xeb\x4c\xa0\x32\x1e\x13\x6e\xda\xc2\x53\xc6\x5b\xfa\x9f\x3f\x03\xe5\xe4\x02\xe5\xe4\x8c\xfe\xdd\x07\x05\x11\xe1\x07\xc9\x1f\xdd\xff\x35\xe8\x34\x21\xab\x43\xf3\x27\x1f\x70\x0d\x10\x80\x91\xb8\xa0\x2f\xe7\x34\x1e\xae\xde\x5c\xb7\x9d\x0f\xfd\x95\xa3\x36\xd1\xec\xb6\xf8\x36\xe0\xe2\xbf\xcb\x05\xc9\x07\xec\x2f\xeb\xef\x53\x4f\x90\xba\xe3\xe5\x59\xad\x39\x52\xcc\xd8\x6a\x13\x73\x59\xf9\x71\x66\x6c\xdc\xbb\xbe\xc7\xef\x32\x68\xaa\x47\xbd\x95\xf6\xca\x1e\x94\x0b\x92\x27\xde\x5f\xd6\x69\x34\xcb\xd4\xd2\x81\x9f\x3d\x9f\xb9\xe7\xf7\xbd\x63\x6c\x31\x8d\x2d\xa5\x97\x4b\xc2\x7c\xa9\xcf\xe2\xb3\x9e\xea\xb8\x68\xb4\xb5\x57\xf6\xa0\x5c\x90\x3c\xfe\xfe\xb2\x52\x11\x41\xf2\x73\x01\x8a\xf1\xc7\x4e\x1d\xf6\x72\x1e\x2b\x79\xc2\xf2\x75\x49\xff\x73\x45\xe6\x13\x22\xb9\xc8\xe1\xf0\x1c\xb9\xb2\xbd\xb2\x07\xe5\x82\xe4\x09\xf7\x97\xbd\xe1\xd1\x73\x5c\xb9\x9b\x90\x82\x3a\x56\xd8\xbc\x99\x09\xbf\x68\x45\x8b\xa5\x50\xef\x4d\xa1\xeb\x37\xbe\xf7\x3e\x57\x14\x1e\x95\xec\x95\x3d\x28\x87\x2a\x9b\x24\xe6\xd8\x25\x77\xc3\xbd\xe1\x93\x05\x9d\x7a\x23\xc5\xb1\x42\x36\x9d\xb3\xab\xc3\x5d\x9b\x97\x8f\xdf\xa1\x3a\x19\x2e\xbb\xdb\x14\x60\xf4\xef\x96\xf8\xff\xbd\x18\x1a\x61\x2b\x7e\x16\x52\x21\xa7\x13\x2c\x1a\x06\x8c\xc8\xc3\x0c\xef\xf7\x3a\x45\xe7\xef\x88\x09\x04\x26\x26\xd5\x29\x49\x65\x1e\xd9\xfb\x0b\x1f\x94\x43\x2d\x86\x88\x57\x82\x1a\xa7\xe7\x3a\x32\xee\xd1\x51\x8c\xe0\x65\x0b\x9c\x12\x2a\xe5\xa7\x7c\x71\x17\xaf\xdb\xe5\x18\x9d\xaf\xf8\xd1\x80\x43\x7b\x65\x0f\xca\xa1\x16\xc3\x0b\xe9\x2e\x33\xab\x3b\xdb\x1d\x17\xab\xe3\xa2\x3d\x8c\x2e\x93\x52\x3f\xb8\x31\xcd\xe1\x9a\x97\x95\x1c\xf1\x3d\xf0\xdc\x4b\xdd\xe9\xbd\xb2\x07\xe5\x50\x8b\x81\xc3\xd0\x8c\xf1\x64\xeb\x62\x52\xd0\x31\xe6\x4d\xe2\x60\x16\x53\x15\xa7\x8b\xbc\xe3\xe0\x63\x75\xef\xab\xc5\x65\x1a\x9a\xd3\xa4\x7b\x65\x0f\xca\xa1\xfe\xd5\x58\x3f\xab\xd8\x36\x12\x3d\xd6\x76\x97\x83\x7b\x7c\xdf\xb4\xfc\xac\x72\xc7\x93\x1a\x48\x75\xe9\x1c\xf1\x33\x70\xe4\x0b\x24\x6a\xd9\x2b\x7b\x50\x0e\x55\x96\x32\x43\x7f\x79\x3b\x72\x92\x3a\xdd\xe5\x30\x69\x99\xd4\xdd\x76\x6d\x8f\x3a\x7b\xb2\x59\x3d\x22\x9f\xd5\x58\x45\x4f\x72\xc9\x97\x01\xb7\xff\xcf\xa2\x11\xf0\x2f\x2e\xfc\x76\x34\x92\xf6\x58\xbd\x06\xdb\x5b\xad\xba\xf8\x93\xfd\x0a\x1a\x5c\x83\xe4\xc6\x09\x6f\x09\xce\x94\x7f\xa4\x0a\xc4\xb0\x07\x61\x88\xfe\x7f\x01\x00\x00\xff\xff\x9b\x77\x2a\x4f\x14\xcd\x10\x00") + +func fixtures_assetsCarCalibnetCarBytes() ([]byte, error) { + return bindataRead( + _fixtures_assetsCarCalibnetCar, + "fixtures/_assets/car/calibnet.car", + ) +} + +func fixtures_assetsCarCalibnetCar() (*asset, error) { + bytes, err := fixtures_assetsCarCalibnetCarBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "fixtures/_assets/car/calibnet.car", size: 1101076, mode: os.FileMode(420), modTime: time.Unix(1626679099, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _fixtures_assetsCarDevnetCar = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\xfd\x09\x34\x55\xed\xff\xff\x8f\x9f\x63\xd8\x47\xe6\x99\x2d\xa4\x10\xc9\x9c\x79\xca\x3c\x93\xb1\x8c\x99\x43\xe6\x59\xe6\x6d\x28\x43\x48\x21\x15\x99\x55\x66\x4a\x92\x32\xcf\x45\x08\x89\x8c\xa1\x0c\x19\x93\x39\xff\x75\xde\xef\xee\xcf\xc7\x39\xff\xef\x5a\xee\xdd\xfa\x7d\xee\xb5\xee\xb5\xca\x7a\xf5\x7a\x5c\xd7\xb5\xaf\xe7\xb5\xaf\x69\x7b\x4a\xe5\xd8\x79\xba\xb9\x79\x7b\x41\xc3\x5c\x46\x1c\x08\xa4\x47\xd6\x0c\x0e\xcb\x43\x40\xb6\xd7\x9a\x70\xb3\xaf\xc5\x68\x65\x7f\xe6\xdd\xab\xd4\xfb\x37\x3a\x51\xe7\x69\xb5\x2e\xce\x6d\xd2\x65\xd8\xf8\x0f\x77\xdb\xfb\xda\x79\x7a\x39\xba\xb9\x22\x2b\x70\xfe\xdd\x3f\xb8\x23\x8f\x40\x40\x46\x2c\x16\xb1\xb8\xe2\x4e\xfc\x0f\x2d\xf7\x82\xa5\x2f\x8c\x51\xa9\x4a\xe3\x2b\x6b\xf4\x58\x7c\xee\xb5\xf2\xf8\xf6\xb4\x29\x6c\x5a\x9e\x36\x1c\x21\x0b\x85\x23\x8c\x58\x10\xc7\xfc\x17\x86\x2e\x2c\x3b\x02\xe9\x41\xc9\x42\x1e\x1c\xce\xc8\xfe\x05\x25\xcc\x82\xa3\x36\x91\xfc\xb4\xee\x4d\x7a\x82\xea\x7d\xc5\xed\xeb\x9a\x4f\x93\x1e\x43\x6b\x19\xdd\x9e\xb2\x88\x23\xf5\x4a\x7c\x83\xda\x32\x0a\xe1\xfd\xfd\xba\xe6\x90\xa1\x32\xe8\x6e\x34\x54\xb4\xd3\x57\x3d\x5b\xa2\x07\xf8\x53\xd3\x58\x19\xd9\x97\x1e\x09\x9d\xb5\x8b\x93\xa6\xef\x06\xa6\x46\xef\xd0\xbc\x28\x5f\x32\x6c\x64\xcd\xd1\x32\x9d\x5a\x60\x1b\x16\x17\x6b\x7d\x25\x1e\x78\x89\xef\x48\x68\x1a\x7f\x68\x69\xd1\x18\xcb\x6d\xaa\xd3\x75\x9a\xcc\x1d\x97\x6a\x53\xb8\x87\xe5\x35\xd9\x46\x49\x4c\x52\x3b\x70\xf9\x2a\x7b\xc8\x7f\x31\x58\x28\x8a\x59\xfe\x42\x28\x21\xf0\x37\xa7\x10\x6d\x38\xff\xa6\xd8\xf9\x0e\x8a\x56\xde\x76\xde\x8e\x2e\x76\x5e\x82\xfc\x02\xa2\x3c\xfc\xc2\x3c\xfc\xc2\x2c\xfc\x02\x12\x82\xa2\x12\xc2\x02\xf6\xda\x76\xde\x7e\x6e\x9e\x4e\x0e\xca\x8e\xce\x76\x36\x6e\x8e\xae\x76\x06\x6e\x4e\x76\xae\xff\xf3\x57\xe7\xff\xfc\x55\xce\xc5\xcd\xc7\xd5\xdb\x2b\xd7\xc9\xc0\xcd\xdb\xca\x59\xdf\xc7\xdd\xdd\xf9\x86\x8b\x20\x37\x3f\x3f\xff\x3f\xff\x5f\xd3\x72\x74\xb5\xf3\xf4\x72\x11\xe0\x16\xfa\xdf\x1f\x3a\xeb\x78\xba\x79\xbb\xd9\xb8\x39\x6b\x5a\x59\x7b\xe5\x3a\x29\xda\xf9\xda\x39\xbb\xb9\xbb\xd8\xb9\x7a\x3b\x5d\xf8\xdf\x28\x27\x65\x1f\x57\x5b\x4f\x2b\x47\x2f\x47\x57\x7b\x27\xc1\xff\xfd\xf9\x75\x65\x37\x1f\x57\x5b\x2b\x6f\x47\x37\x57\x27\x81\xff\xfd\xb1\xbd\x96\x9d\x97\x97\x95\xbd\x9d\xbf\xaa\x81\x83\xa3\x17\x8b\xa3\x17\x8b\xb7\x83\x1d\x8b\x8a\x9d\xab\x9d\x97\xa3\x17\x8b\xbc\xb3\x9b\x8d\x13\x8b\xdb\xb5\xff\xfc\xf0\x9f\x4a\xb0\x28\xda\xd9\xd8\xb9\x7a\x7b\x5a\x39\x3b\x06\xd8\xd9\xb2\xe8\x7b\xbb\x79\x5a\xd9\xdb\xb1\xfc\xa9\x3a\xef\x16\xcd\xbf\x7b\xa6\xe1\x8a\xfb\x97\xce\x6f\xa5\x66\x5b\x09\x40\xe1\x0a\x88\x05\x54\xe4\x30\xd7\x15\x04\xd2\x10\x41\x79\xcd\xd1\x99\x4f\x80\xcf\xeb\xbf\x69\x5d\xd0\x0d\x71\xe4\x99\x96\xa5\x5c\x3c\x7f\x7a\xbf\x78\xe3\xf6\xb9\x31\x71\xd7\x47\xdf\xd6\x05\xde\x90\xa2\x34\x88\xfa\xac\x9a\xc5\x9b\x7e\xbe\x91\xb0\x0c\x42\x68\x20\xf0\x9c\xe5\xb6\xa7\x86\xe7\x86\x68\x11\xd9\x56\x02\x11\xe1\xf2\x08\xc7\xc8\x61\x2e\x3d\x74\x6a\x92\xff\xa6\xb6\xb2\xb1\x41\x3f\x80\x23\x59\xe5\xd4\x2f\x66\xac\x4a\x96\x19\xc4\x59\x76\x39\x2f\xe0\xe8\xc7\x9f\x11\xbc\x2a\x56\xf9\xd0\x13\xc5\x44\x48\x98\x93\xa9\x13\x60\x8d\x90\x0d\x97\x47\xb8\x1e\x9b\xe6\x07\x93\x84\xdc\x92\xf8\xa7\x09\x8b\x9e\x56\xc2\x7a\x99\x82\xdd\x03\xe3\x93\xd9\x57\x16\x3a\xa3\xbf\xb4\x98\xd3\xea\xea\x87\x3c\x47\x68\x22\x08\x94\x52\x68\xa9\x91\xaa\xea\x08\x04\x22\x5c\x1e\xe1\x71\x6c\xca\x18\xe1\x1e\x0a\x81\x80\x2f\x8c\xd3\xcd\x55\x09\x5c\x6f\x88\x47\x8a\x1c\xf2\xc9\x54\xf5\x4f\x91\x66\x95\xaa\x65\x67\x7f\xb0\xc8\x46\x68\x20\xb8\x4c\xf0\x13\x9b\x52\x7e\x20\x10\x88\xff\xb4\xa5\x3c\xc2\x24\x72\x98\x4b\x1f\x9d\x95\xf4\xbf\x59\x5d\x7c\x9c\xbd\x1d\xbd\x1c\xed\x8f\xa4\x2d\x3c\xff\x4e\x6b\x32\x67\xf7\x7b\x24\xb3\x19\xa5\x0e\x0d\xf7\x4f\x46\x32\xce\x10\x22\xae\x09\xb3\x62\xdc\xc8\xbb\xeb\x4a\x04\xbb\x08\x4d\xc4\x4c\xf6\x2e\x40\xed\x63\xee\xfa\xbf\x79\x7d\x8e\xcf\xdb\xd5\xe5\xf0\x8c\x9b\xfb\xad\xe5\x72\x96\xc6\xbb\xfb\x24\x31\xd5\x4d\x1a\xd1\xfb\x11\x76\xbc\x17\x76\x29\x24\x84\xcb\xdf\x28\xfd\x42\x68\x22\xce\x99\xce\xbb\xda\x02\x8e\x9e\xff\x9b\xd7\xee\xd8\x56\x90\x52\xda\xda\xf3\xf3\xa4\x40\xa4\x0f\x65\x9f\xd4\x18\x73\x3e\x41\x6b\x1f\xb5\x6a\x8e\x52\xbf\x99\x9a\xbf\x9e\x64\x6d\xcd\xc4\x8e\xd0\x40\x7c\x30\xfc\x3c\xb8\x48\xfd\xfa\xdc\xc2\x3f\x59\x6f\x1c\x5f\xda\x9a\x50\xd7\xb6\xb4\xb1\x75\xc4\xc9\x3a\xaa\x8a\xe9\x92\x08\x9c\x6f\x2f\xb4\xd4\xc9\x4a\x51\x32\xb7\x18\x6a\x48\x9e\xfb\x3d\x6a\x40\x68\x22\xf4\xaa\xfb\xbf\x74\x10\xf7\xcf\xfc\xb7\xb4\xe1\xe1\xf2\x08\xdf\xff\xaf\x5b\x21\x5c\x1e\xe1\xff\x7f\xd0\xb2\xe8\xb2\x02\x91\xc3\x5c\x46\x27\xd1\x89\x69\xff\x9b\xd8\xd7\xce\xd3\xf1\x9a\xa3\x9d\xad\xa7\x9d\xbd\xa3\x97\xb7\xe7\x8d\x23\x00\x5f\xee\xaa\x71\xf5\xcd\xd0\x4b\x03\xb8\xf2\xb4\x44\x0a\x19\xbe\x3a\xc1\xf7\x80\xea\xb3\x3e\xfd\xa9\x8b\x5d\x8c\x1b\x82\xe7\x6f\xfe\x47\x03\x01\xc7\x17\xf4\x0c\xc7\x15\xb5\xed\xc2\x80\x1e\xb6\x6b\x46\x8e\xca\x71\x0b\x2d\x88\xcf\x3f\x27\x62\x98\x4d\x38\x3a\x16\x7f\x16\x25\xc9\x9f\xbc\x8f\xd0\x44\xe4\xbb\xe5\xd7\xdc\x01\xf3\x3b\xfe\x5b\x50\xb4\x44\xf1\xfe\xdf\xea\x77\x77\xf3\xc3\x50\xbf\x7c\xdb\xef\xa5\x65\x6b\x2d\xf7\x69\x61\xd2\x70\xd7\x68\x75\x77\x5d\xe6\xed\xc6\x96\x81\xde\x8e\x5b\x0c\x20\x49\x48\x8f\xb4\xd5\x7f\xca\x78\xfd\xd8\xee\x54\xf7\xe4\xd7\x37\xd1\x09\x8e\x4b\xe1\xf2\x0d\x56\x78\x71\xc9\x29\xc9\xde\xa3\x73\xf9\xc2\x8a\xbc\xe5\x1b\x34\xaa\x84\xac\xb9\x93\xff\x49\xe3\x7e\x6c\x9a\x72\xc2\xfc\xcb\xd4\xd4\x52\x55\xb8\xd7\x2f\x6d\x24\x12\x66\x5d\x6b\x91\x98\xbf\x4d\xb5\x18\xef\xf3\xe9\xbd\x22\xa9\xa7\xe2\xe9\x49\x2c\x6d\xf2\x1f\xf9\xa7\x4f\x16\x5e\xd3\xdb\x28\xaa\xc6\xe6\x45\x67\xaa\xd3\x5e\x39\x11\xe8\x1c\xbc\x64\x85\xaf\x3c\xeb\xc2\x90\xf2\x95\x25\xce\x70\x9a\xed\xcf\xf3\xf3\x3c\xb6\x0c\x46\xdf\x32\xe7\x39\x26\x4f\xab\xfa\xe5\xab\xda\x3b\xdf\xb4\xec\x3b\x78\x95\x65\xc0\xa1\xc4\xcd\xad\xd7\x19\xa6\x48\x6b\x08\xec\x61\x94\x21\x5c\x1e\xe1\xfd\x7f\xa2\x61\x05\xc4\xf7\x7f\x39\x7e\xff\xde\x30\x6f\x4a\xe1\x55\x0d\x38\x15\xbe\x65\xf3\x26\x5f\x70\xdd\xab\x3e\x40\x64\x73\x2b\x2b\x52\xe6\x73\xd8\x39\xe7\x74\xb9\x2d\xec\xf1\x1b\xad\x64\x97\x63\x5b\x41\xdb\x36\xc9\x2d\xe9\xe3\xc3\xeb\xed\x77\xd6\xf0\xee\x69\xf5\x8d\x21\x67\xc0\xe4\x10\x80\x83\x31\xf0\x81\xa7\xc1\xac\x0d\x53\x05\x42\xf6\x4f\x2a\x44\xe4\x30\x97\x2e\x3a\x15\xf1\x9f\x52\xde\xf0\xf2\xb6\x73\x39\x92\x49\xa9\xfc\x43\x13\x4b\xcf\x92\x69\x10\xa3\x75\xcb\x00\x28\x2d\x36\xb3\x98\x97\x10\x4d\xe3\x99\xfe\xcd\x22\x9d\xb0\x7c\xa6\xb1\xe1\x3f\x99\xd0\x8f\x06\x1f\x2d\x2d\x7a\x74\x2a\x2a\xcc\x0a\x5b\x79\x3a\xd9\x1d\x2d\xdb\xbc\xc9\x97\xd7\x2f\x5e\x97\xa7\xbd\x16\x8e\xd6\x70\xfb\xf8\xd1\xdf\x8e\x7e\x3a\xe4\x69\x61\x12\x6b\x5f\xc1\x6b\xe0\xeb\x8f\x44\xcd\xff\x74\x36\x9d\xe3\x1f\x4b\x94\x0a\x0f\x85\xd9\x39\xc9\x96\x2b\xef\x67\x1a\x63\x88\x5c\x64\x4e\xf2\x24\x5b\x89\xfa\x6b\x2f\x4e\x7e\x6e\x12\x4b\x1f\xa6\x7d\xfd\x3f\x75\x44\x46\x0e\x73\x5d\x42\xe7\x22\xfc\x6f\x2e\x47\x57\xc7\xa3\xe5\x99\x48\x9d\xfb\x44\xc0\x22\x11\x51\x5a\x72\xe9\x1e\x4e\x0a\x0d\xb7\xa6\x55\x03\x6b\xd0\x8f\x0f\x06\x1a\xd2\x57\x62\x2c\xd2\x26\xf2\xfe\x27\x8f\xed\xb1\xcd\x9e\xe5\xb4\x79\xce\x9a\x88\xb8\x8c\xb0\xef\xc2\x6e\x42\x20\xb5\x99\x37\xea\x5c\x9d\x48\x75\x62\x46\x29\x72\xc7\xb8\x23\xa2\xb3\x12\x7b\x58\x46\xb7\x9b\xd7\xff\xc1\xf0\xe9\xf7\x7f\xf4\x62\x72\x38\xb6\x05\x16\x1a\x3e\x64\xd8\x0a\xb6\xb2\xd6\x4a\x0a\xad\xa8\x98\xf5\x12\xa4\xcd\x4d\x71\x22\x2d\xc1\x4f\x9f\x9d\x71\x72\x9c\x73\xeb\x1b\xff\xa7\x31\x75\x8f\x4d\xa5\xf7\xe1\xdd\xc9\xb5\x7d\xfe\x25\x47\x69\x0f\xfc\x55\xed\x45\xb6\x94\x6b\xa1\x2e\x27\xbd\x9f\xe1\x54\x35\x5f\xb7\x97\x79\xf2\x4e\xec\x3f\xa9\xd0\x63\xe5\xb5\x63\x53\xad\x0f\x8d\xd3\xf8\x9c\x85\x42\xc4\xc2\x1e\x11\x70\x9a\x69\xc9\x07\x5e\x08\x90\xbb\xc3\x9f\x3c\xcc\xcc\x2f\x6d\xfa\x74\xc6\x2e\x0c\xe3\xb9\x84\xcb\x23\x9c\x8e\xcd\xc8\x58\x1b\x66\x32\xfd\x78\x9a\xeb\x44\xe6\xfd\x00\x9e\xbb\x99\x27\x46\x8b\x23\xad\x89\x3e\xa9\x2a\xe9\x75\xae\xde\x93\x89\x57\xce\xf9\x4f\x27\x76\x3b\x36\x4d\x82\xa2\x51\x64\xf2\x8d\xb8\xfe\x24\x1c\x4f\x11\x6f\x82\x79\x67\x05\x3f\xfa\x0d\xc1\xd6\xe1\xe7\x9f\x6d\xe5\x3a\xab\xe9\xa1\x4f\x98\x13\xa4\x3f\x3d\x06\x07\x4b\xb3\x9e\x76\x7e\x56\x9e\xb6\x47\xb2\xd2\x9f\xbd\xcc\xbc\x6e\x50\x40\x4a\xb1\xde\xb9\x4e\x32\x4d\x33\x84\x58\x00\x68\x3f\x7b\x9b\x78\xcf\xed\x4c\x53\xb9\x5f\xe9\xb6\x41\x68\x21\x70\xe3\xe7\xc8\x82\xd2\xe2\xc9\xde\xa3\x3b\x8c\x02\x62\xfe\x5f\x8e\x56\xa2\xbe\x13\x3d\xa3\x4e\x2f\x91\x3e\x76\x23\x75\x48\x5c\xeb\x2f\x83\x8a\xb3\xa5\x6b\xfe\xcb\x6c\x85\x1f\xf1\xc8\xe7\xea\x29\x5b\x30\x46\x2b\xce\xff\x77\xba\xff\xff\x9f\x7c\xc3\xf9\x77\x73\xd9\xf8\x23\x25\xa1\xe3\xff\x3d\x69\x36\xaf\xe1\xcb\x96\x3f\x6b\x95\xfc\x6a\xed\xdd\xd6\xea\xb9\xa4\xa0\x96\x86\x08\xdb\xa2\x14\x2d\x9b\x27\xfb\xeb\xb2\xb2\x47\x82\x69\xe9\x03\x2c\x82\xda\xe5\xb6\x07\xfd\xab\x62\xb7\x12\x82\x33\x44\x62\xce\x87\xbb\xbe\xbf\xa5\x33\x60\xf2\xe8\xd3\xc1\x17\x67\x01\x0d\x04\x32\xcb\xd0\x21\xeb\x3f\x4b\xb6\xa3\xed\xf8\xfb\xfa\x7b\xab\xdc\x5c\x27\x62\x51\x29\x75\x89\x84\x02\x0d\xe8\xfc\x7a\xd7\x23\xbd\x30\x9d\x3b\xe9\xfe\x03\x04\x86\xb1\xc4\x47\x42\xef\xff\xf2\x5c\xbd\x1e\x85\x13\xf1\xde\x6d\x27\xea\xc2\xd0\x44\xf8\x9b\x67\x53\x31\x5e\x9f\xb7\xa0\xc7\x46\x02\x48\x93\x03\x83\x37\x47\x42\x57\xcd\x1a\x5e\x37\xe7\x09\x45\x31\xab\xfa\x17\x4d\xe8\x96\xa6\x2d\xae\x42\x23\x02\xc3\x0a\xed\xc2\xb6\x0c\x9c\x9b\x5c\xd3\x9f\x8f\x84\x8a\x5b\xd0\x45\x7f\x52\x7b\x4e\x97\xd4\x61\x87\x7b\x3b\xec\xd1\xe8\x54\xd1\xcd\xaf\xa4\xbf\x57\x66\x89\xfb\x22\x9e\x3f\x09\x25\x25\x06\xf1\x75\x8e\x96\xf7\x62\x8b\xe0\xe0\xa3\xc9\xe7\xea\x61\x25\xd1\x5a\xda\xe3\xfa\x86\x61\x38\x67\xef\xc7\x4c\x7d\xd0\xcc\xc8\xea\x6a\x6f\x1c\xfe\x5d\x25\x6b\xf7\xef\xda\x2e\x46\x1e\x71\x4d\x1e\x71\x2d\xec\x97\xd1\x59\x04\x1b\x01\x92\x92\xe5\x2b\xff\xa1\xe7\x48\x14\x53\xc6\x29\x73\xa1\x7c\x8a\xa0\xbb\xc3\xc5\x0e\x87\xd4\xfc\xa6\xe6\x39\xe2\xea\xdb\xf8\xab\x4c\x56\x69\x61\xb8\x27\x11\x08\x04\x01\xba\xf9\xc0\x13\x3c\x9c\xff\xae\xd1\xa1\xb0\x73\xff\xae\x99\xc3\x65\xc3\x8c\xff\x5d\x2b\x47\xe0\x21\x23\xe4\xf0\x8e\x6e\x10\x58\x29\xd2\xe5\x07\xae\xb5\x0f\xcd\x15\x26\x6d\x76\x7c\xdd\x9f\xec\xdd\x4e\x6d\x98\x12\xa0\x6f\x2b\xb4\xb1\xb1\x0e\x18\x4e\xbb\x1e\x76\xf9\xdf\xc5\x45\xc8\x11\x1c\x4d\x2b\xd5\xdd\xbe\x3f\x7d\xf5\x5b\x4f\xa9\x1c\xe1\xe0\x8f\x62\xd5\x4f\x79\xbd\xd9\x72\xfd\xac\x2f\x67\x56\x1d\x78\x2f\xbf\x18\x97\x9a\xf9\x27\xed\x71\x71\x11\x72\x2c\x47\xd3\x4a\x0f\x92\x12\xb9\x7a\x7c\x9b\x27\x56\x33\x51\x9b\xc8\x0e\x5b\xe5\x7a\xf1\x94\x2e\xac\x37\x53\x64\x6a\xc5\xee\x22\x8f\xaa\x97\xeb\x3f\x69\x8f\x8b\x8b\x90\xc3\x39\x9a\xf6\x4b\xc2\xca\x20\x7f\x7b\xf2\xf6\x10\xd0\x7e\xce\x20\x92\x51\xc6\xb6\x9e\x53\xf8\x2a\xb7\x8f\xa2\xce\x2f\x21\x5b\xf7\x76\xae\xa9\x30\xde\x7f\x17\x17\x21\x47\x1e\x06\xc9\xe3\xf5\x9e\xfb\x77\x1d\x59\x1e\xaf\xf7\x26\xf2\xdf\x75\xe4\x08\x5c\x10\x17\x11\x21\x87\x1b\x7e\xa4\xd4\x71\x15\xa4\xcd\xef\xf3\xa6\x71\x1e\x32\x94\x4a\xd6\x94\x19\x4a\x7f\x63\x78\x8e\x37\x8b\xa4\x54\xbc\xa9\x9c\xf8\x02\x31\xea\x59\x7c\x54\x7d\x3a\x76\x7c\x81\x93\x5b\x4b\x29\xca\x81\xcf\x67\x13\xf7\xe2\xb9\x36\x94\x3e\x68\x17\x09\x5d\x98\x5f\x34\x1f\x33\xb8\xa9\x70\x22\x2c\x02\xf7\xdf\xe5\x8c\x90\x3b\x8c\x3e\x92\xb7\x9e\x7a\x55\x2b\xd7\xef\x22\xbf\xad\x5e\x87\xa5\x99\x65\xa8\xc4\xb4\xa0\xfa\xd5\xdf\xfb\x79\xc3\xc1\xce\xdf\x2f\x6b\xa7\xb8\x50\x1c\x09\xdd\x53\x15\x89\xa9\x3c\x65\x42\xa4\xad\x83\xe7\x4f\xbc\xe8\x27\xb1\x2e\x4a\x24\xa2\x7f\x7e\xe5\xc1\xb2\x5d\x20\x59\xd9\x65\xea\x2b\x47\x27\x2e\x1e\x17\xbf\xdf\x52\x09\xc7\xbf\xfe\x8a\xe4\xba\x3c\xb3\x6d\xfa\x52\x7a\x43\xf2\x60\x0e\xaf\xac\xe6\xa8\x4f\xd2\xc3\x67\xd9\xd7\x8e\xae\xc3\xfd\xf9\xab\xfd\x07\x4e\x2a\xcf\x51\x7f\xa7\xcf\x98\xe5\xd4\x11\xa8\x16\x2f\x7e\xe2\xce\xf0\x72\x0b\xf7\x19\x91\x0d\xab\x2a\xde\x91\xd0\xc1\xda\x24\xdd\x9e\x90\xf2\x28\x4a\xd3\xf7\x2f\xa6\x73\xda\x03\xe9\xf3\x62\x3e\xf3\x73\x75\x5f\x4d\x55\xc9\x63\x1d\xa1\xb8\x6a\x70\x24\x54\xa3\x62\xe1\x30\xe1\xf0\x36\x13\x87\xfa\x44\x36\x21\x34\xbd\x1d\x5b\x3f\xb1\x21\x94\x3d\x27\xa6\x65\x61\x32\xd3\x70\x67\x23\xec\x48\xe8\xa1\x56\x3d\x79\xaf\x27\xcd\xd8\x81\x44\xa6\x86\x6b\x5c\x7b\xa5\xe1\x74\x4e\xec\xf8\xbe\x10\x65\xac\x7f\x2e\xd5\xe3\x5b\xbf\x04\x8e\x84\x7a\x16\x8d\x7b\xc5\xbd\x37\x7e\xd8\x70\x8e\xf4\xc0\xc6\x55\xec\xbd\x49\xc6\x68\x77\xfb\x00\xc5\x15\xe1\x8a\xdd\x18\xeb\x9c\x6b\x63\xff\xf3\x10\x8e\x6b\x55\xac\x87\xa0\xf8\x70\x37\x88\xc9\x40\xf1\x42\xd8\x93\x0b\x81\x22\x3f\x22\x02\x56\x98\x9a\x88\x1b\x6d\xfd\xc8\xa3\xcf\x0d\xb7\xc8\xaf\x35\x92\x1e\x09\xfd\x2e\xdc\x57\x63\xec\x62\x2d\x6b\xb3\xf9\x6e\x29\x3d\x3f\x27\xa2\xa4\xbb\x9a\xe8\xea\xb3\x36\xd1\x0a\x31\x2e\x0f\xe7\x99\xea\xa3\xa1\x63\xce\x33\xc6\x3f\xa6\xa5\x9e\x46\x6f\xf8\x76\x36\x68\x4b\x94\xdb\x31\x53\xb7\x5f\x4a\x89\xf2\x0a\x9d\x76\xfb\x98\x7a\xf3\x5d\xf7\x91\xd0\xa9\x6f\x0f\x72\x7a\x96\x77\xe3\x3d\x47\x1c\x71\x6f\x5f\x59\xb7\x30\x7c\x3c\x80\xf8\xfc\x75\xb2\x84\xba\x3e\x4f\x8c\xf6\xe1\x6d\xad\xa3\x0b\x68\x83\x9f\x07\xdf\x42\x84\x20\x94\xe5\xb8\xe9\x59\x9a\xdb\xc4\x56\x65\xbc\xc2\x0e\xbf\x55\xbf\x73\x3f\xbe\xc8\xb5\x82\xa8\x3c\x7b\x24\x94\x99\xbd\x6b\x58\xb8\xa4\x31\xf9\x2a\x89\x43\xd2\x53\x07\x57\x71\x13\xc7\x41\x7e\xb7\x02\x09\x85\xbc\xab\x8d\x89\x4e\xc8\xbc\x33\x47\x42\x1b\xa7\x12\x33\x29\x68\x39\x7c\x58\x5d\xdf\xf3\x69\xd5\x0e\x05\x5e\xe8\xf5\xd1\x30\xfe\xf8\xec\x2c\x99\x34\x79\x79\x0e\xc0\x79\x70\x24\xf4\xf4\x2b\x72\x7f\x56\xef\xf0\x39\x6b\x9d\x38\x9b\x64\xbe\xdc\x0f\x0e\x41\x8e\x5e\x41\xab\xa2\x8f\x28\x67\xf4\xca\x4f\x0b\x91\x76\x85\xd5\x02\xff\xae\x55\x23\xe4\x0e\xc3\xa2\xe3\x10\xb8\xc3\x5c\x46\xe7\x10\xc8\xf0\x69\x5c\xe8\x3b\x0e\x8b\x42\x54\x43\x19\x51\xbb\xcf\xeb\x1f\xe4\x43\x6d\xb7\x8d\x7f\x6b\xca\x88\xbb\x5d\x6c\x97\x24\x21\x17\xd9\x0d\x66\x1b\x10\xfb\x71\x19\x02\x01\x04\x82\x01\x41\x57\x45\x26\xab\x8a\x78\xfb\xd4\x1f\xfd\x42\x50\x43\xc4\xb6\x9f\x99\xfc\xef\x9f\xbc\x32\x4e\x5c\x78\xe8\xde\xca\xa6\x86\x58\xce\xe3\xa7\x59\xdf\x4a\xaf\x8c\x43\x62\x12\xaa\x99\x4e\x7d\x5b\xd0\xe0\x09\x9f\xea\xbb\x92\x3b\x6f\xb7\x6a\xde\x32\xd5\xf6\x54\xec\xcb\x4f\xb5\xd9\xc7\x81\x04\xe2\xe7\x23\xec\x20\x10\x40\xc2\x24\xe0\x60\x12\xae\x0d\x92\x15\x84\xd5\x14\x4c\xeb\x56\x4d\x8c\xef\x29\x64\x19\x3e\xe1\x7c\x9d\x12\xbd\xf5\x9e\xf9\xe4\xce\x7d\x3a\x19\x95\xb7\x72\x10\x08\xe0\xc0\x24\xe0\x62\x12\x78\xef\xf7\x51\xda\x2e\x32\x4a\x66\x58\x7a\x75\xbe\x22\xaf\x50\x64\x3e\xfb\xb1\x77\x67\x37\x3d\x4a\x70\x4a\x61\xd8\x0d\xf1\xce\x1d\x02\x01\x5c\x98\x04\x3c\x4c\x82\x57\xf3\x20\xed\x03\x6b\xdf\x5e\x03\x1d\xb6\xdb\x44\x8d\xb7\xdf\xc5\x0f\x78\x21\x3d\xaf\xe7\x4e\xaf\x6d\x0f\xac\x3c\x4b\x5d\x44\x3f\x07\x3c\x98\x04\x7c\x4c\x02\x03\xab\x98\xc9\xb3\xef\x78\x76\xcb\x6d\xee\x36\x9c\xb9\x8f\x79\xcc\xe2\xb3\x14\xe8\x10\x81\xab\x06\x72\x8f\x24\xab\x73\xc6\xf1\x20\x10\xc0\x87\x49\x00\x30\x09\xae\xad\x23\xc6\x67\x28\x4b\xac\xeb\x6d\xb3\xd5\xec\x67\xed\x70\x5f\xea\x0b\x16\x59\xa5\xdb\xa8\x43\x49\x80\xcb\xfd\x7b\xe7\xd0\x04\x00\x26\x01\x85\x49\xc8\x77\x73\xa4\x79\x3b\xe0\x96\x46\x6f\x0e\x89\x65\x15\x12\xdf\x30\xbd\x7d\x23\xb4\xa1\xfc\xea\x86\xef\x17\x07\xff\x79\x69\x42\x2b\x08\x04\x50\xf0\x08\xff\x88\xe7\xb8\x71\xe6\xbf\xe2\x21\xc0\x2c\x4e\x6a\x57\x78\x49\xcd\x17\xbf\x7e\x16\xed\xd4\x82\xef\xf1\x93\xb8\xe9\xb2\xa7\x65\x1b\xd4\x71\xd6\x23\x0d\xf4\xb6\xaf\x9e\x0b\x33\x80\x40\x80\x00\x66\x85\x4f\x60\x12\xa8\x3e\x31\x72\x3b\x8c\x87\x8c\x78\x3b\xac\x1a\xab\x0c\xde\xf4\x7b\xbf\xe1\x42\x68\xe8\x1b\x7a\x71\x43\xee\xb5\xbb\xef\xfe\x0a\x5a\x3c\x27\x60\x12\x08\x31\x09\xc6\x1c\x57\x57\x48\xbb\xd4\xaf\x5d\x5a\x84\x4e\x4e\xb5\xa9\xe7\xed\x3e\xa4\x42\xbd\x37\xb8\xe3\x12\xc9\xae\xbd\x30\xd6\x11\x27\x0b\x81\x00\x21\x4c\x02\x11\x26\xa1\x82\x76\x46\xc0\x11\x95\xa4\x4f\xf4\x20\x4c\x82\xdb\xb1\x14\x6f\x31\xcb\xc0\x7f\xe6\x09\xd7\xef\xf4\xcf\xd0\x79\xd0\xd3\xd0\x16\x02\x01\x22\x98\x04\x62\x4c\x82\x1a\xc1\xfb\xd0\x60\xf5\xab\xa6\x99\xaf\xf4\x32\x33\x82\xfa\x28\xf5\x68\xae\x2d\x77\x6e\x37\x87\x39\x36\xcf\x13\x7b\x30\xd1\x72\x43\x20\x40\x0c\x93\x40\x82\x49\xb8\x54\x40\x46\x4b\xc3\x98\xde\xa0\xab\x7e\x5a\xde\xe4\x06\x83\xbd\x2f\x6f\x15\xc5\xaa\x9d\xf9\xa1\x9c\xb0\x07\x63\x38\x9f\xd5\x35\x08\x04\x48\x60\x12\x48\x31\x09\x2d\x34\x1e\x3b\xed\x74\x27\xe6\x39\x7b\x9c\xed\xde\xd3\x66\xc5\x58\xa9\x9e\x30\xe9\xbc\x49\xbf\xe1\xf7\x61\x5a\xd9\xeb\x56\xa6\x11\x04\x02\xa4\x30\x09\x64\x98\x84\x58\xd6\x4b\x77\x4e\x5d\x8f\x60\x20\x9f\x12\x76\x50\xc0\x05\x7b\x6b\x83\x2e\xec\xe7\x00\xcc\x52\x8b\x6e\x5b\x6f\xe7\xe3\x7e\x11\x43\x20\x40\xf6\x77\xe2\x39\xee\xcd\xfb\x5f\xf1\x90\x63\x16\x87\xf3\x41\x65\xe2\x69\x5c\xb3\xae\xd8\x95\x9c\x0c\xd7\xf0\x8b\x11\xf7\xd8\x48\xbc\x2b\xa7\xd4\xc5\x81\xb6\xea\x32\xfe\x88\xb3\x84\x10\x08\x90\xc3\xac\x30\x05\x26\x81\xfb\x32\xea\xed\x81\x94\x59\x48\x6f\xc9\x0b\xeb\x49\x28\x75\x76\xba\x47\xc7\xdb\x26\xa5\xa9\x2f\x2a\x30\x24\x77\x4e\xa7\x51\x17\x02\x01\x0a\x98\x04\x4a\x4c\xc2\x33\xf9\x74\x15\x5d\xd5\x77\x0f\x70\x9d\xea\x53\x97\x39\xc2\x17\xd7\xfc\x72\x1d\x0d\x58\xeb\xad\x88\x90\x67\x2a\xf8\x24\xd3\x9d\x21\x10\xa0\x84\x49\xa0\xc2\x24\x28\xa9\x7a\x84\xee\xe0\xeb\x14\xaa\x88\x7a\xea\xef\x17\x5f\xc1\x89\xaa\x84\x98\xee\xa4\x20\xb6\x1c\x44\x7f\x90\x0d\xb3\x6e\xb2\x43\x20\x40\x05\x93\x40\x8d\x49\xd0\xe4\xd8\xcf\xfa\xf5\x55\xef\x3d\x0e\xf2\xb7\xd1\xd0\xea\x60\x6b\x09\xd3\xa8\xd0\x28\x95\x30\x4a\xbc\xf5\xf7\xc7\x88\xc2\x50\x2e\x08\x04\xa8\x61\x12\x68\x30\x09\xbf\xc9\x35\xa3\x3d\xf3\xe9\x89\x5f\xf8\x34\xb8\xda\x7d\x79\xc3\x4e\x48\x5e\xd2\x2a\xf2\xcb\x5f\x51\x8a\x68\x4f\x60\x82\xfa\x16\x2f\x04\x02\x34\x30\x09\xb4\x98\x04\x6b\x57\xfe\x26\x04\xb7\xad\x48\xa5\x85\x5c\x01\x29\xae\x69\xdc\x01\xaf\x3d\x2e\x59\x83\x25\x70\x3e\x0e\x21\xa2\x73\x75\x55\x0f\x02\x01\x5a\x98\x04\x3a\x4c\xc2\xb4\xdb\xfb\xf5\xb3\x06\x67\xce\xba\xf7\xeb\xd5\x41\xe4\x76\x45\x5a\x2c\x5b\x0c\x12\xf4\x7e\xec\xaf\x06\x4d\xf7\x2a\x54\x29\x49\x21\x10\xa0\x83\x47\x68\x06\xfe\xdd\x5c\xf4\xbf\xe2\xa1\xa7\xc7\x2c\x0f\xe1\x6e\x22\x2b\x4d\x54\x51\x4b\xc1\x62\xb9\xbe\x2c\xd3\xaa\x92\x51\x3c\xfd\x14\x6f\xe8\x4f\x39\x6e\x63\x8f\x91\x96\x8a\xeb\xcc\x10\x08\xd0\xc3\xac\x31\x3d\x88\x89\xd8\x72\xd7\x19\xf7\x7f\xac\x25\x2e\x5d\xcf\x29\xc5\x99\xa0\x43\x1c\x3d\x8b\xec\x65\xbd\x28\xbc\xbd\x9d\x13\x9b\xc9\xae\x69\x74\x0a\x02\x01\x10\x2e\x82\x01\x13\xe1\x39\x32\xfc\xb8\x66\xa0\x2c\x31\x24\xd5\x21\x49\xac\xb6\x59\xf1\x2d\x5e\x30\xa9\x67\xd7\xe0\x81\xd6\xda\xfa\x13\x86\xc5\x56\x5a\x08\x04\x18\xe0\x22\x4e\x62\x22\x4a\x0b\xb7\x0a\xd2\x9f\x59\x8e\x30\x30\xdc\xbb\x24\x3d\x98\x73\x55\xa3\xfc\xcc\x75\xaa\x91\x56\xa3\x22\x9e\x73\xa2\xba\x01\xe9\x67\x20\x10\x38\x09\x17\xc1\x88\x89\x38\xad\x26\xde\x0d\x51\x7d\x3f\x13\x3c\x52\x65\x82\x5f\xba\xfa\x95\x8f\xa9\x35\x53\x24\xfb\x4c\x6b\xe9\x82\xde\x39\x35\xfa\x4a\x3a\x08\x04\x18\xe1\x22\x98\x30\x11\xe2\x8f\x24\x36\x0c\x46\x54\x9f\xd1\xb0\x7f\x04\xec\xbf\xe8\x4f\x19\xf8\x52\x05\xfb\x3b\x3e\xf5\x6f\x61\x9b\x79\xc5\xb1\xa7\xea\x05\x81\x00\x13\x5c\x04\x33\x26\x42\xf8\xe9\x8b\x95\x5e\x4b\xa2\xd7\x21\xaa\x1e\xfa\x87\xc1\xb6\xf1\x77\x73\x5b\x1a\x2b\xde\x86\x50\x39\x0d\x0e\xa8\x30\xcc\xd1\xa3\x5f\x40\xcc\x70\x11\xa7\x30\x11\x32\xcb\xfc\xfb\x8b\xd2\x48\xa1\x00\xab\x7c\x09\x39\x0a\xdf\x6a\x5f\xca\x9a\xa0\xc6\xa9\xf8\xfb\xea\x7b\xd9\x3b\x16\x0f\xe3\xaf\x43\x20\x70\xea\xef\x44\x74\xdc\x2a\xed\x8f\x88\x58\x30\xcb\x33\x1c\x73\xf7\x5e\x1b\x6a\xb8\x3f\x31\x7b\xa0\x3a\x69\x93\x0a\x3f\x64\x3b\x4d\x47\xf3\xd1\x6b\x66\xc1\xcd\x83\xb3\xc1\x97\x16\x51\x10\x08\xb0\xc0\xad\xf2\x69\x4c\x44\x25\x61\x1d\x30\x69\x21\x69\xfd\x81\x2a\x57\xd1\x83\xf0\x49\x90\x5a\x93\x05\xff\xda\x5e\x15\x7f\x86\xe0\x29\x5e\xfd\xdf\x02\xe8\xd1\xf5\x34\x5c\xc4\x19\xac\x17\xe9\x5c\xce\x40\x9d\xf0\xa5\x99\x36\x72\xc3\x2b\xc1\x71\x14\x6e\xe6\xb7\x2a\x4f\x4f\x59\x38\xe3\x29\xac\x30\x55\xd9\xf0\x02\xe6\x10\x08\x9c\x81\x8b\x60\xc5\x44\x00\x15\x5f\x3c\xbf\x38\x24\x06\xcd\xa3\xb4\xee\x94\x1b\xdf\xcd\x93\x34\x96\xab\x98\x98\xd2\x95\xd2\x98\xa3\xb6\x78\x27\x7f\x1b\x3d\x49\x64\x85\x8b\x60\xc3\x44\x64\xee\xb6\x56\xa7\x9e\xc1\x19\xbb\xaa\x6a\xc9\x23\x17\x3a\xc9\xfd\x66\x13\xc8\xc2\xb9\xd9\x36\xb0\xa9\x5f\x4b\x5a\xe4\x96\xa5\x04\x81\x00\x1b\x5c\x04\x3b\x26\x62\x71\x54\xad\x9a\xf5\x7a\x90\x6d\x0e\x41\xf7\x98\xd3\x78\x8c\xba\x6e\x8b\x22\xc8\xbd\xb0\x99\xa0\xd2\xb3\x95\xda\x21\x9a\xc0\x03\x81\x00\x3b\x5c\xc4\x59\x4c\x44\xef\x1b\x02\x70\x4c\xcb\x61\xac\x8b\x2e\x42\xce\x69\xaf\xdf\x73\xb1\x52\x77\x5d\x4c\x5a\x31\x30\xa0\xc0\xad\xde\x9f\xc1\x1c\xad\xd3\xb3\x70\x11\x1c\x98\x08\x21\x5c\x13\x8b\x9b\xb1\xbe\xfe\xba\x83\xd4\x09\xe6\xb8\xe3\x09\x2b\x64\x2e\xc2\xa7\x90\x04\x6a\xf5\x19\x14\x2a\x0e\x4c\xee\xe8\xc7\xcd\xf1\x77\x22\x3a\x6e\xff\xe2\x8f\x88\x38\x31\xcb\x43\xfa\xf6\xd4\x0e\xae\x07\xd9\x6b\x82\xe6\x37\xd7\x13\x1c\x99\x2e\xd9\x35\x2b\xb7\x2b\x94\x0f\xa5\xb2\xb9\x4d\xa4\x17\x3f\xbf\xa3\x01\x81\x00\x27\xdc\x2a\x9f\xc3\x9a\x40\x3c\x4b\x14\x8c\xbb\x3a\x24\x9e\xb8\x64\x52\x77\xc3\x22\xfc\xd3\x54\xd4\x4f\x9b\x8e\xbd\xc8\x0b\xc8\x5e\xab\xad\x47\x1d\xa5\x92\x10\x08\x9c\x83\x8b\xe0\xc2\x44\x6c\x04\xc7\x06\xd6\x85\xb4\xf7\xb3\x92\xbd\x82\xd6\xc8\x89\x57\x23\x66\x55\xc7\x05\xc4\x5d\x59\x7c\x9b\x9d\xef\xba\x6b\x05\xa2\x11\x5c\x70\x11\xe7\x31\x11\xaf\xe6\xd2\x54\x90\xcf\x13\x96\x8d\xe2\xb9\xb2\xaa\x03\x4d\x70\x29\x38\xc5\x46\x5c\x86\x48\xac\xb2\x7c\x9f\x1e\x08\xea\x3e\x66\x80\x40\xe0\x3c\x5c\x04\x37\x26\xc2\xe4\xb4\x3a\xdb\x9c\xb7\x46\xb2\xed\xb9\x7e\xdd\xd6\x78\x52\x2a\xcf\x67\xbb\x88\x7b\x07\xe4\xa9\x3c\x23\x93\x59\x56\x04\x2f\xc4\x20\x10\xe0\x86\x8b\xe0\xc1\x44\xf8\xa6\xbd\xbc\x4f\x5b\x56\x5e\x5f\x99\xb8\x25\xcc\xa5\xd4\xf0\x30\x82\x80\x95\x43\xcd\xd4\x04\xd5\xbe\x4d\xb9\x1c\x7d\x5b\x0f\x84\x40\x80\x07\x2e\x82\x17\x13\x31\x7a\xb6\x9e\x85\xb1\xb5\x56\x5d\xed\x5e\xc4\x45\xa2\x67\xfc\x5e\x84\x93\xb9\x97\x5e\xfd\x88\x35\x56\xf0\x5c\xd1\x1b\x28\x94\x97\x83\x40\x80\x17\x2e\x82\x0f\x13\x61\x7b\x8f\xf0\xdb\x30\xa4\x44\x24\x21\xdf\x20\x8c\xda\xe0\x5e\x8e\x6e\x37\x78\xf1\xbb\xec\x8d\x5c\x8c\xf1\x04\x2f\xe1\x46\x9a\x25\x04\x02\x7c\x7f\x27\xa2\xe3\x76\xf6\xfe\x88\x88\x1f\xb3\x3c\xea\x74\x99\x63\xf3\xb9\x31\x34\xc2\xe1\xb8\x6c\xe9\x17\xef\xd0\x9d\x5f\xec\xa7\xe2\x06\xf4\xa8\x0a\x89\x6e\xa3\x0c\xaf\xcd\xab\x41\x20\xc0\x0f\xb7\xca\x02\x98\x88\xdb\x6c\xac\xac\x55\xd7\x51\x4e\x06\xbf\xd2\xcf\xf2\x05\x83\x43\xcf\x95\x7b\x06\x3f\x2c\x17\x0c\xd4\x18\x90\x2e\x50\xe4\xfe\x22\x80\x40\x40\x00\x2e\x42\x10\x13\xb1\xc9\x66\xe5\x75\xff\xf3\x0a\x6b\x19\x61\xa5\x7c\x72\x80\xf9\x80\xe6\x8d\xb9\x0c\x0a\x33\x2b\xfe\xf8\xb0\xbc\x86\xf8\xae\x6f\x6c\x10\x08\x08\xc2\x45\x5c\xc0\x44\x34\x3e\xcf\x96\x71\x6f\xe4\xe9\x7a\x1f\xab\x00\x56\x3e\x31\x37\x08\x30\x46\xe9\xe1\xe9\xce\x3a\x7e\x69\x2e\xb8\x91\x03\xcc\xa1\x5f\xd9\x17\xe0\x22\x84\x30\x11\x86\x1b\x7b\x79\xa2\x0c\xce\xfc\x38\xed\x82\x3d\x79\x3d\xf3\x7d\x81\x3b\x86\x03\xdc\x86\x6f\x9d\x6d\x49\xfd\x05\xa6\x09\x6f\x1b\x43\x20\x20\x04\x17\x21\x8c\x89\xb8\xa8\xd1\x9e\x46\x51\x3e\xc2\x96\x88\xa4\x7f\x58\x91\x1d\x35\x45\xe9\xfb\xb1\x61\x37\x79\x8b\x4c\xde\x3c\xf5\xe4\x33\xd5\x56\x43\x08\x04\x84\xe1\x22\x44\x30\x11\x41\xe1\x25\x39\x52\xdf\x7f\x71\x68\x70\x9d\x56\x4b\x1b\xbc\x00\x86\x0a\x5f\x69\x2e\xcd\x3f\xf9\xde\x61\x48\x51\xbf\x8d\x09\xe1\x0e\x81\x80\x08\x5c\x84\x28\x26\x22\xda\xa3\xce\x05\x7a\xa6\x19\x79\xb2\x13\xaf\xb3\xcd\x24\x65\x01\xcf\xaa\x72\xe9\xe5\xd0\x06\x9b\x73\xfa\x29\x87\xa9\xd0\x32\x2b\x08\x04\x44\xff\x4e\x44\xc7\xed\x79\xff\x11\x91\x18\x66\x79\xf0\x5e\x8c\x84\xba\x10\x85\x04\x04\xb9\x71\x7f\xd4\x0b\xfe\x59\xce\x50\xdd\x8a\x3c\x4f\xd4\xa9\x3d\x47\xa3\xd3\xc8\x58\xdf\x27\x0a\x81\x80\x18\xdc\x2a\x8b\x63\xed\xf8\xbd\xe7\xc1\x07\x84\x52\x5a\xd8\xab\x26\x91\x39\xfb\xab\xe9\xc3\x83\xe4\x94\xde\x69\x65\x35\x64\x62\x97\x86\x0e\xfa\xe4\xa5\x21\x10\x10\x87\x8b\x90\xc0\x44\x38\xec\x3a\xb5\xa9\xbe\x64\x79\xa2\xb3\x16\x43\x12\xa9\xa9\xbf\xf2\x8a\xe4\xfc\xed\x88\x5b\xb7\x23\x2f\x96\x53\x2b\x0a\x8d\xae\xe2\x41\x20\x20\x01\x17\x21\x89\x89\x70\xfb\x61\xc3\x2a\x75\xe8\x2f\xaa\xf9\xed\x9b\xf1\x9e\xf5\x9b\x1f\x0f\x9f\x44\x2c\x12\x59\xc8\x6b\x7f\x26\xef\x77\xb5\x6f\xb9\x83\x9e\xce\x49\xc2\x45\x48\x61\x22\x6e\xf1\x3e\xae\xfc\xba\xf0\x20\x49\x7c\xc0\x88\x29\x8f\x66\x1e\x79\xb9\xe0\x32\x83\x4e\xea\xc8\xc4\x3e\x3d\x65\x57\x31\x81\x09\x7a\x40\x93\x82\x8b\x90\xc6\x44\xd4\xb3\xd9\xbe\x26\xa4\x34\xa5\x2c\x72\x70\xbd\x7f\x46\x89\x50\x99\x81\xd2\x48\xe0\x7d\x00\xbf\x6d\x60\x87\x96\xf0\x62\x48\x06\x3d\x04\x02\xd2\x70\x11\x32\x98\x08\xb2\xa0\xde\x5b\x43\x27\x72\x79\xe9\x2a\xbe\x6e\x47\xe3\xc4\xda\x3d\x4d\xa5\x89\xca\xb3\x9e\x50\xe6\xd0\x78\x1b\x26\xe6\x3f\x84\x7e\x16\x32\x70\x11\x17\x31\x11\x9f\x29\xf7\xbe\xd4\x0b\x7f\xaf\x78\x6d\xb5\xd4\xf9\x82\xf8\x5d\x1b\x6b\x95\xdc\x5a\x0f\x47\xdd\xe5\x40\x82\x45\x06\x9e\x2f\x55\x9a\x10\x08\x5c\x84\x87\xf8\xe7\x50\xee\xb8\xf3\x4b\xac\x43\xb9\x2b\x71\xfc\xf9\x14\x2c\xfc\x1f\xd9\x2e\x4e\x14\x28\x05\x57\x91\x3a\xd6\x3f\xb2\x4b\xf4\x6e\xd0\xd3\x66\xe8\x49\xc8\xcc\xa8\x9e\x3e\x12\xaa\x3a\xed\xdf\x17\xf1\xdc\xaf\x4e\xd9\xf8\x7c\xe1\x23\xf1\x7a\xc5\xf3\xae\x4d\xb5\x12\x86\x7c\x0f\xf4\xf2\x79\x4e\x28\x3d\x4c\x5b\x3e\x12\x1a\xb8\x19\x0a\xdc\x90\xcb\x81\xee\xa9\x3c\x66\xb9\x67\xbf\xee\x39\x92\xe5\xab\xec\xcc\xbc\x6d\x40\xb1\x53\x88\xb7\x1a\x93\xcb\x7d\x24\x74\xbf\x6d\x42\xce\x98\xb3\x4d\x30\xf5\x82\xf2\xc4\x77\x65\x6b\xad\xed\xfb\x0c\x67\x07\x07\x73\x10\x04\x94\x45\x5f\xe5\x2a\x7d\x3a\x8f\x84\x0a\x91\xf8\x87\xe5\x0b\x9f\x50\x47\x50\xd3\xa4\xe1\x90\x9d\xcb\xc2\x93\x9c\xbb\x95\x66\x6a\x1a\xf8\x7e\x28\x71\x5e\xa4\x4a\x9a\xfc\x48\xa8\x53\x07\x7b\xc9\x67\x8f\x90\xeb\x6e\x39\xcb\xbc\xda\xf2\xb4\x55\xa7\x9c\xfc\xad\x98\x17\xaf\x4e\xf2\xb6\x25\x7b\x51\xb9\x3f\x3d\x7a\x34\x5b\x14\x78\xeb\x6d\xc1\xb7\xe5\x10\x4e\x7f\x22\x06\x6d\x77\x6b\x39\x46\xab\xd7\x76\xf5\xa5\x6b\x97\x7e\xa6\x31\x7e\xa0\x4b\x70\xaf\x3f\x12\xca\x6f\x7c\xad\xda\x55\x1a\xd7\xc5\xbb\x61\xf4\x66\xbd\x21\x07\xd9\xed\xb4\x68\x53\xd3\xfa\x62\x3e\x23\x0a\xe2\xdd\x93\x21\x09\x8d\x61\xff\x8c\x64\xc7\xb5\xea\x9f\x91\x4c\x16\xb3\x53\x74\x04\x99\x87\xe6\x55\xf4\x2c\x25\xf6\xb6\xb8\x94\xd4\x8a\x8c\x65\x5c\x6a\x2e\x61\x6d\xe1\x4f\xbc\xb7\x1d\xfb\xfe\xb9\x90\x0a\x35\x04\x02\xb2\x70\xfb\x9d\x1c\x26\xe2\xfd\x8b\x0b\x51\xa9\x06\xb7\x6a\xe5\x3f\x5e\xd3\xbc\xac\x19\x2a\xc6\x71\x11\xe7\xb9\x1b\xcd\xa7\x50\x69\xf5\xd4\xc3\x73\x45\x19\x9e\x10\x08\xc8\xc1\x45\xc8\x63\x22\x02\x9e\xc8\xc5\x67\x35\x4e\x9b\xb5\xcc\x58\xdf\x66\x4e\x1f\x5b\x3a\x40\x95\x6b\x9d\x2a\x8b\xbf\x35\x5a\xc2\x36\x2a\x74\x6d\x46\x04\x02\x01\x79\xb8\x08\x05\xac\x3d\xaa\x3a\xcf\x4f\x9a\x43\xe2\x4e\x71\x2f\x46\x93\xba\xdd\x0b\x57\xe8\x94\x35\x26\x7a\x34\xef\x12\x76\x37\x5a\xbe\x26\x15\xb7\xd2\x86\x40\x40\x01\x2e\x42\x11\x13\x41\x9f\xce\xef\xa2\xed\x55\xb7\x40\x7a\xd7\x6f\xf3\x54\x84\xc4\x94\xcf\x40\x17\xcf\x12\xaf\x99\xd0\x5c\xcf\x45\xcf\x10\xe2\x50\x24\x04\x02\x8a\x70\x11\x4a\x98\x88\x48\x19\xc2\xc4\x89\xcb\xef\xf2\xa1\x2f\x06\x84\x17\x87\xc3\xca\xa4\x9c\x90\x3b\x8c\x59\x12\x3a\x07\x74\xc9\xf5\x1c\x42\xd7\xa4\x20\x10\x50\x82\x8b\x50\xc6\x44\xac\x5a\x3f\x64\xa5\x36\xdc\xd7\x7d\x7f\x2a\xc6\x88\xdc\xa5\xd4\x78\x36\x23\xe9\x5e\x65\x21\x47\x32\xc5\x1b\x16\x51\xa5\xa5\x24\x5b\x08\x04\x94\xe1\x22\x54\x30\x11\xaf\x29\x5f\xe3\xe6\xe5\xcc\xd5\xbe\x5d\xbe\x89\x4f\x6c\x34\xf1\xbb\xf9\x7e\xa0\xa9\x88\xf4\x66\xdc\xd8\x9b\x88\x75\x87\x7a\x1d\x47\x08\x04\x54\xfe\x6e\x3a\x70\xdc\x78\xf3\x47\x44\xaa\x98\xe5\x91\x1a\x38\x27\x74\xd5\xff\xdc\x3d\xc4\xbe\xc3\xab\x41\xf6\x46\x31\x62\xc8\xf0\xa0\xd0\xb4\x4d\x24\xd8\xc1\xb4\x85\x94\xfc\x0e\xba\xfb\xa9\xc2\xad\xb2\x1a\x26\x42\x6f\xed\xee\x33\x7f\xb9\x6c\x87\xe9\x68\x76\x5c\x8a\xf4\xf5\x10\xc8\xb8\x8b\x7b\x18\x94\xd2\x61\xf1\x4a\x3a\x58\x18\x8f\x57\x85\x40\x40\x0d\x2e\x42\x1d\x13\xd1\xb3\x96\x60\x86\x3c\xd9\xf2\xfe\x52\x0d\xaa\xef\x0e\xfb\x92\x1e\x75\xed\xac\xff\x61\xab\xde\x73\x57\xee\xda\x14\xb1\xf0\x30\x42\x08\x04\xd4\xe1\x22\x34\xb0\x96\xd7\x4d\x67\x94\x71\x2f\x79\xf8\x6a\x10\x9e\x69\x2b\xff\x1e\xdc\xca\xdd\x7a\x23\xb0\xf3\x7b\xfc\xcd\x78\x81\xfe\xf2\xb7\x34\xa1\xf8\x10\x08\x68\xc0\x45\x68\x62\x22\x9a\x32\x98\xfa\xf7\x3a\x86\x09\x77\x6d\x8b\x28\x83\x59\x96\x71\x7a\xd4\xf5\xea\x3f\xf9\x26\x84\xc8\x0c\x27\xba\x33\x51\x0e\x6b\x41\x20\xa0\x09\x17\xa1\x85\xd5\xfd\xc4\xbe\x97\x39\xf8\x37\x19\x81\xf4\x52\xdf\xbb\x35\x56\xd8\x5a\x8b\xd3\xf3\x6c\x5e\xc9\x3b\xa9\x2e\x15\x11\xdb\x84\x43\xb4\x10\x08\x68\xc1\x45\x68\x63\x22\x1e\x7f\xb6\x42\x36\x89\xd3\xf3\x46\xfa\xae\x78\xcf\x1c\xe6\x47\xa5\xcb\x7d\x72\xe7\xc1\xdb\x8c\x8a\x4d\xad\xd0\xe5\x49\x60\xb9\x06\x81\x80\x36\x5c\xc4\x25\x4c\xc4\xfa\x69\xb3\x88\x15\xc7\xf9\xe7\x15\x3f\xae\x14\x4f\x5c\x4c\x40\x29\x8d\xea\xb5\xcc\x32\x0e\x9c\xa1\x19\xfc\x78\xb5\x46\x21\x46\x10\x02\x81\x4b\x7f\x27\xa2\xe3\xde\xc4\x7f\x44\xa4\x83\x59\x9e\xaa\x53\x5e\xed\x78\xac\xf3\xef\xe2\x6e\x69\xaa\xf0\xdf\x14\xc9\x52\x5e\xaa\x57\x63\xc8\x89\xe0\x41\x59\x3d\xaf\x66\x5d\x89\xd3\x80\x40\x40\x07\x6e\x95\x75\x31\x11\x27\xbe\x64\xc8\x2d\xd4\xb6\x8b\xdb\x33\xca\xa5\x75\x76\x7b\xb3\x46\x3d\x68\xc4\x91\x67\xa3\x7a\x81\x20\xba\x5d\xb1\xdf\x6a\x2c\x0c\x81\x80\x2e\x5c\x84\x1e\x26\xa2\x15\xc9\x7a\x32\x8f\xb4\xda\x23\x34\xce\x58\xcf\xc2\xe2\xf4\x42\xc2\xb2\xdb\x4d\xcf\xc8\x15\x86\xa2\xf0\x2f\x38\xa2\xec\xbd\x27\x20\x10\xd0\x83\x8b\xd0\xc7\xba\xc0\xd1\xe0\x6f\xad\xd5\x39\x2d\x57\xb4\x74\x2b\xd3\x7b\xce\xb7\xb4\x20\x37\x99\x92\x9b\x70\xe3\x3a\xad\xaa\x1c\xc1\xcd\x6a\x46\xf4\xaa\x51\x1f\x2e\xc2\x00\x13\x81\x5a\x4d\xa9\x78\xa5\xe7\xb1\xd3\xd6\xb9\x24\x45\x99\x61\x47\x95\xc6\x60\xf3\x8a\x41\x85\xef\x62\xf0\x19\x12\x0a\x51\x3e\x3f\x65\x08\x04\x0c\xe0\x22\x0c\xb1\x0e\xd2\xb2\x36\xfa\x62\x41\xa3\xbd\xfe\x91\x1e\x69\x26\xaa\x0f\x1a\x27\x94\xef\x32\x9a\xfd\xa8\xdf\xe6\x70\xc8\x96\x0e\x71\x28\x3c\x0f\x81\x80\x21\x5c\xc4\x65\x4c\xc4\x5e\xe7\xa5\xba\x21\x9e\x2f\xc3\x5d\x06\x67\x74\xd7\xe4\xca\xb3\xf9\x37\x93\x23\x05\xca\xcb\x2e\xd6\xb0\xfd\x8e\x99\x0c\x7a\x83\xee\xe1\x97\xe1\x22\xae\x60\x22\x0a\xde\x2c\xfd\xf0\x96\xb2\x7a\x63\x88\xf3\x6b\x01\x11\xf2\x44\xd5\xe6\x5a\x81\x5a\x90\x23\x22\xb4\xce\x2b\xe8\x36\xb3\x45\x9e\x2e\x04\x02\x57\xfe\x4e\x44\xc7\xcd\x51\xff\x88\xc8\x08\xb3\x3c\x77\xa9\x79\x19\x9b\x5a\xfb\x24\x57\x4e\xd1\x08\x72\x1b\xe7\xbb\x2d\x91\x88\x0f\xf1\xa4\x74\xf7\x8b\xfb\x7d\xf5\xe7\xa1\xf7\x21\x80\x40\xc0\x08\x6e\x95\x8d\x31\x11\x65\x9b\xc9\x66\x29\x07\x23\x31\x4c\x13\xe5\x56\x14\xbd\x3f\x4e\xbb\xbd\x5f\x64\x79\x74\x9a\xef\x37\xdb\x6d\x92\xbc\x8e\x9d\xd7\x76\x10\x08\x18\xc3\x45\x98\x60\x0d\xb0\xa9\xf6\x59\xa5\xc2\x9a\xcd\x5f\x05\xe5\x14\xcc\x3e\x49\xff\xc8\x63\xe2\x73\xdc\xd7\x6c\x21\x6f\xf7\x35\x22\x53\xe3\x09\xe0\x80\x40\xc0\x04\x2e\xc2\x14\x13\xf1\xe2\x87\xca\x9b\x15\xe6\xee\xaa\x15\x96\xcc\x45\x06\x9e\x1e\xed\x9b\xc5\xea\xe6\x1c\xb9\x3f\xd4\x83\xba\xae\xeb\x66\xda\x75\xd3\x41\x20\x60\x0a\x17\x61\x86\x89\xc0\x0d\x71\xeb\xac\x16\x55\x98\x22\x0e\x9a\xa9\x5a\x4d\x34\x89\x65\x56\x50\x2c\x0d\x3d\xc4\x75\x6a\xd1\xef\xe5\xf9\xe1\x18\xc6\x05\x81\x80\x19\x5c\x84\x39\x26\x22\xa7\x33\xb6\x92\x20\x66\x42\x30\x7c\xa5\x90\x6a\xb4\x8c\x20\x66\x12\xd7\xf5\xce\xe7\x36\xa3\x9f\xe3\x0d\x6c\x7a\xfb\x0e\xec\x0a\x10\x08\x98\xc3\x45\x5c\xc5\x44\xc8\x7f\x78\xa5\x3f\x5f\x79\x99\xfe\xf0\x8a\xd3\xf7\xcd\x03\xad\x6c\xaa\x87\xdc\x75\x16\xa1\x62\xb9\x4f\x32\x09\xaa\xb5\x09\x75\x88\x21\x10\xb8\x0a\x17\x61\x81\x89\xb8\xf9\x56\x2d\x16\xbf\xba\x20\x98\x5f\x6c\xe2\x73\x53\xda\x29\xb5\x2a\x95\x49\xd9\xab\xc3\x05\x15\x13\x53\x37\xcf\xc4\x0d\x66\x5f\x84\x40\xc0\xe2\xef\x44\x74\xdc\xea\xed\x8f\x88\x2c\x31\xcb\x13\xb2\xe8\x92\x46\xca\x6b\x91\x15\xc8\x90\x00\xae\xff\x6e\x0e\x88\xe5\xbf\xcd\x5f\x45\xcb\x5e\x99\x6b\x10\xf9\x93\x8e\x44\x0d\x3d\x9d\xb3\x84\x5b\x65\x2b\xac\x5b\x3e\x9d\xb7\xf3\x11\x33\xf8\xf7\xb7\xc6\xce\xcb\xde\x92\x7b\x10\xfa\xb4\x79\x8d\x6b\x46\xdb\x9f\x30\x21\xf1\xab\xc5\xac\x91\x82\x28\x04\x02\x56\x70\x11\xd6\x98\x08\x3a\x0b\xf6\x5f\xfd\xa1\x11\x57\x06\xbe\x68\xdc\x31\xce\x99\x95\x38\x7c\xcf\x12\x79\x63\x3d\xf9\xf2\x5b\x35\x54\xd7\xaf\x82\x16\xf4\x14\xc2\x1a\x2e\xc2\x06\x13\xc1\xb6\xb5\xa8\xc0\x47\x79\xc0\x5a\xdf\xb4\xe4\x6b\xb3\x13\x7a\x4b\x85\x83\x9f\x5a\x7b\x3b\x8b\x3e\x8c\xbb\xfe\xdd\x1e\xfe\x2f\x23\x08\x04\x6c\xe0\x22\x6c\xb1\xd6\x44\xab\xfe\xcb\x02\xbc\xd7\x2a\xce\x5d\x91\x33\x4c\x70\xfd\x30\x73\x52\x7d\xef\x10\xdf\x81\x95\xae\x33\xfb\x67\x11\x42\xbd\xd3\x02\x02\x01\x5b\xb8\x08\x3b\xac\xcb\x3b\xea\x69\xa9\xc2\xca\x86\x2b\xb3\x41\x8f\x1f\x9d\xf6\x54\x79\x3c\x4c\xf8\xd5\x91\x67\xf7\xf2\x05\xcd\xb7\xa4\xb3\xf7\x36\x74\x40\x08\x04\xec\xe0\x22\xae\x61\xcd\x0a\x0c\xe6\xba\xa6\x1f\x3c\x7b\x7c\x38\xdd\xbe\x90\x52\x25\x13\xfe\x01\x27\x2e\xc9\xed\x14\x8b\x60\x40\xcd\x43\xc2\x2a\x64\xa4\x0e\x04\x02\xd7\xe0\x22\xec\xb1\x4e\x4b\x04\xb8\x14\x45\xe3\x9e\x18\x97\xbb\xa8\x7a\x64\xa7\x3c\xfb\x98\x2f\x7c\x4f\x73\xeb\x42\xa3\x81\x0c\x71\xf8\x60\x6a\x7d\x2d\x2b\x04\x02\xf6\x7f\x27\xa2\xe3\xf6\x35\xfe\x88\xc8\x01\xeb\x90\xff\xe0\x15\x40\xef\x30\xe1\x38\xb7\xf9\x40\xad\xe6\xdb\xd9\x73\x17\xdc\x48\x24\x03\x16\x75\xb8\x09\xa2\x17\x1d\xad\x02\x74\x69\x20\x10\x70\x80\x5b\x65\x47\xac\xa1\xc9\x2c\xee\xd1\xfc\x6f\x6d\xbe\x4d\xf6\x6a\x69\xa3\xc9\xc0\x3b\xaf\xd9\x7f\x17\x64\x54\x54\x59\x7a\x54\x64\xe4\xee\xea\xdf\x43\x8f\x1b\x8e\x70\x11\xd7\xb1\x5a\x35\x9d\x2f\x22\xf5\xa3\xe2\x04\xe9\xf3\x2f\x2d\x3b\x26\x25\x0c\x7c\x8f\x7f\x16\x9d\x64\x79\xf6\x8a\xac\x05\xb7\x8f\x58\xfb\x19\xfa\x35\x71\x1d\x2e\xc2\x09\x13\x91\xfc\x8e\xc1\x98\x53\x56\xc6\x9f\x58\xc5\xe4\x83\x94\xd6\xac\x66\x9a\xdf\x09\x91\xb5\xb4\x5c\x1a\x99\x1f\x67\x23\xef\x4a\x2d\xa1\x45\xe4\x04\x17\xe1\x8c\xb5\xf3\x17\x99\xd3\x22\x4d\x7e\x9e\x59\xe4\xde\x8d\xdd\x13\x08\x39\xbe\x88\xb7\x73\x4b\xb4\xc8\xd3\xbd\x37\xe2\xfb\x6f\xf2\x53\x12\x31\x41\x20\xe0\x0c\x17\xe1\x82\x89\xb8\xfe\xe4\x0c\xee\xf6\xc1\xd9\x2a\x32\x4d\x1f\x8e\xf2\x60\x7e\x93\xee\xa6\x9e\x77\x07\x3c\x1f\x55\x90\x27\x5d\xce\x72\xe6\x46\x5f\x80\x40\xc0\x05\x2e\xc2\x15\x13\x21\x57\xea\xb5\x26\xa6\x7a\x75\xe4\x46\x8c\x35\x57\xf2\x83\xb8\x0b\xcd\xfc\x8d\x54\x3a\xba\x93\x2f\xa6\xe2\xe5\x98\xc9\xc6\x07\xcf\x40\x20\xe0\x0a\x17\xe1\x86\x89\xe0\x22\xbf\x8b\x7b\x69\x6e\xa5\xd9\x98\x6f\xdc\x49\x9d\xbe\xc2\xf0\x79\x69\x90\xae\x41\xdf\xf8\x8b\x94\xe4\x0b\x43\xad\x17\xd3\xed\x21\x10\x70\xfb\x3b\x11\x1d\xb7\xe3\xf7\x47\x44\xee\x58\x3b\xf4\x2f\x45\xcf\xea\xdc\x4d\x61\x59\x68\x5d\xf6\x71\x5f\x11\x31\x69\x72\xeb\x7e\xff\xf5\x43\x90\xd5\xfe\xc9\x2f\x8a\x35\xf6\x48\x21\x08\x04\xdc\xe1\x56\xd9\x03\x6b\x92\x1c\xba\x27\xcf\xe1\x4a\x33\xcd\x4e\xe5\xff\xf8\x61\x81\x74\xb1\xdf\x58\xd1\x23\x5e\xb5\xd6\xf2\x93\x4d\x1f\x21\xf1\xf4\x27\xe8\x35\x91\x07\x5c\x84\x27\x26\x22\x46\xb8\xe5\xd4\xb8\x49\x52\x49\xff\xf2\x07\x56\x41\x82\x7b\x78\x2f\x56\xb2\xdc\x05\x0e\x06\xdc\xeb\xa8\x82\x16\x44\xf5\x99\xd1\xab\x7e\x4f\xb8\x08\x2f\x4c\x84\x23\x50\x8a\xca\x05\x4c\xcd\xc4\xc8\x7e\x8a\x94\xfc\xc4\xf7\x79\x61\x31\xb1\xe6\x9a\x89\x22\xca\x1c\xe1\x2f\xe2\xf7\xa0\x63\x83\x40\xc0\x0b\x2e\xc2\x1b\x13\xf1\x20\x05\xc7\xaf\x4d\xf9\xbc\x8a\xd0\x87\xfd\xe1\xf8\x30\x43\x8f\xbe\x30\x47\x1e\xf1\x73\xba\x53\xa6\x59\xd7\xdc\x87\xb4\x87\xd1\x6b\x22\x6f\xb8\x08\x1f\xac\xcb\x2f\xaf\xdd\x53\x32\x3f\xf1\x18\xd0\x54\x6e\xf6\x6f\xd0\xf4\xa8\xb3\xc8\xa8\xbd\x5c\x43\xd4\xf2\x3f\xfd\x28\xf6\x44\x44\xe5\x01\x12\x02\x01\x1f\xb8\x08\x5f\x4c\x44\xdf\x7d\x31\xdc\x64\x23\x2f\x03\x3c\xd1\xed\xf5\xd4\x60\x31\x0d\x67\xb1\x77\x25\xa7\x4f\xde\x23\x96\xbd\x64\x97\xbd\xcd\xf5\x02\x2d\x22\x5f\xb8\x08\x3f\xac\x83\x53\x41\xc2\xe5\xb2\x41\x75\xed\xcf\x95\x27\x38\x15\x77\x9b\xe6\x24\x4c\x26\xf0\x8b\x4c\x38\x3e\x55\xda\x4d\xe1\x9b\x7d\x6c\x47\x2f\x10\xfc\xfe\x4e\x44\xc7\xed\x85\xff\x11\x91\x3f\x66\x79\xf2\x9e\x14\xc7\x7b\x20\x5b\x0b\x67\x78\x1e\xc6\x5b\xf2\xf4\x97\xab\xbc\x2d\x20\x48\x23\xa4\x31\x24\x55\x1e\xda\xd6\xae\x8b\x42\xf7\x70\x7f\xb8\x55\xbe\x81\x75\x31\x8a\xde\x79\x74\x2f\x47\x8f\xca\x92\xf4\x4a\xc6\x4b\x87\x95\x87\x74\x36\x55\xe7\xbe\x07\xd2\xfb\xe6\x4f\x01\x8a\xea\x4e\x6d\xfc\x10\x08\xdc\x80\x8b\x08\xc0\x44\x20\x66\x6b\xc2\x8b\xa9\xae\xee\x98\x9c\x6e\xce\x78\x88\x9a\xcc\xc6\x6f\x2a\xbc\xd7\xea\x13\x2d\x52\xe5\x51\x40\x48\x18\x85\x94\x85\x40\x20\x00\x2e\x22\x10\x13\x31\xd8\xbb\x90\x71\x25\x32\x1e\x9f\x99\x2e\xc0\x10\xf7\xc4\x3c\x39\x34\x6f\x3a\xb0\x98\x68\xf6\xdc\xe7\x50\x8c\x77\xcb\xe9\x2d\xba\x87\x07\xc2\x45\x04\x61\x22\x1e\x4a\xd2\x2b\x21\xea\x70\x0d\x82\xc8\x9e\xd4\x54\x75\x0d\xdc\x28\xfa\xe9\x45\xb7\xce\x54\x5b\xd5\x71\xb5\x6c\xfe\x71\x00\x1b\xba\xfb\x05\xc1\x45\x04\x63\x22\x72\x13\x7e\xca\xbe\x9e\x11\x2c\x09\x9e\xd9\x29\xfb\x58\x6e\x91\xd6\xd9\xa1\x21\x5c\xe3\xcf\xfa\xf8\x87\xbe\x4e\xf3\x0e\x01\x11\x09\x04\x02\xc1\x70\x11\x21\x58\xab\xec\xa7\x7b\x0f\xb2\x18\xac\xa9\xe7\x2c\x15\xdb\x8a\xd5\x8b\x2a\x73\xcb\x91\x61\xcb\xca\xda\xdf\xdb\xc5\xd2\x91\xdf\x1e\xa4\xd3\x43\x20\x10\x02\x17\x11\x8a\x75\xbf\x26\x6c\x2a\x5f\x3a\xaf\xeb\xc3\x61\x83\x52\x83\x71\x46\x07\x43\x19\x0e\x77\xd5\x7c\xe1\x7b\xd2\x13\x59\x4b\x2d\x8d\x26\x9c\xe8\x67\x11\xfa\x77\x87\x75\xc7\x7d\x41\x88\x75\x58\xc7\x94\xfb\xd9\x5c\xb5\x77\x17\x7f\xe4\xac\xd6\x62\xe2\xc3\x9c\x62\xc2\x0a\xa0\x8f\xf3\x4a\xda\xd7\xa8\x56\xcf\x83\xa5\x1c\xa4\xf5\x91\xd0\x9f\x32\xc4\xbb\xd9\x0f\x7b\x5c\x6e\x79\xe8\x36\x0c\x90\x84\xcc\x99\x6f\x76\x37\xb5\xcb\x09\x6a\x8a\x3e\xe2\xa5\x67\xe0\xa6\x8b\x3b\xfa\xfb\x51\xa8\x06\x3a\x8d\x5f\x71\xec\x4f\x3a\x72\x24\x47\xc9\x44\x14\x6c\xc8\xbc\x58\xbe\xe7\x11\xd3\xae\x5a\x90\xa8\x11\xfc\x76\x11\x38\x12\x6a\xf3\xed\xf6\x8f\x8c\x6f\xbe\xcf\x7f\x54\xd0\x50\x36\xbf\x45\x65\x9e\x9d\x09\x95\x7c\x1a\x57\xde\xe4\xd3\x4f\xc4\xd2\xa0\xae\xcf\x78\x24\xf4\x45\xd2\xbb\x85\x77\x16\x63\x54\x37\x86\x3c\xef\x35\xe2\x5c\xe8\x3a\x9b\xb1\xe5\x5d\x47\x98\xd9\xfa\xf2\x57\x1a\x01\x2a\x7f\x07\x3c\x12\xfa\x7c\x4f\x9c\x89\x97\xc8\xef\xd6\x2b\xdd\x81\x60\xc5\x83\xe1\xa0\xf0\x7c\x69\xc9\xcf\x96\x14\x89\x54\x6a\x0d\xda\xd3\x93\xa6\x57\x8f\x84\x8e\xf3\x10\x11\xc5\xa9\x86\x82\x44\x56\x5e\x9c\xd7\x5e\x13\xd6\xdf\x5e\xd0\x4f\x8e\xa4\x7c\x7c\xdf\x79\xf3\x97\x7e\x30\x4f\xe0\xd1\xb2\x8e\x45\xfd\x5c\x4e\x5a\xbc\xb2\xc3\x30\x93\x54\x61\x35\x18\x66\x20\x25\x2e\x12\x71\xe7\xeb\x07\x32\xd3\x27\xbc\x80\xcf\xda\xa7\x85\xff\x39\xac\x3b\xae\x55\xff\x8c\x64\x61\xd8\xf3\xb8\x1d\xeb\xda\x69\xbb\x97\x56\x7a\x2d\x92\xfd\xf5\xe5\x79\x38\x86\x8c\x0a\xa9\xfc\x11\x3b\xd9\x53\x96\x5b\x0c\x76\x69\x86\x10\x08\x84\xc1\xed\x77\x10\x26\x22\x4a\x55\xdf\x4e\xe2\x7d\x90\x7a\x51\x75\x26\x8f\x0d\x7b\x9e\xc9\x41\x1d\xdb\xdb\xee\xa7\x52\xa9\x26\x3a\x5c\x9c\xa4\xbb\x1f\x3c\x21\x10\x80\xe0\x22\xc2\xb1\xce\x03\x73\x7b\x69\xde\xde\x94\x7a\xb6\x1c\xc4\x27\x7f\xbe\xe9\x45\x52\x65\xe8\xe2\x5b\xa6\xba\xe2\x67\x77\x6a\x59\x7c\x06\x85\x39\xad\x21\x10\x08\x87\x8b\x88\xc0\x44\x58\x6c\xf7\x41\xfd\x46\xf8\x4c\x24\x59\x54\x63\xfa\x7e\x65\x27\x74\xc2\x70\x33\x84\x77\x57\xcb\x8b\x28\xb9\x72\x15\xf4\x19\xf1\x20\x10\x88\x80\x8b\x88\xc4\x44\x48\x7c\x48\x4b\x5b\xbf\x5c\xc8\x14\x13\xa7\x6b\x99\x35\xe7\x70\xf8\x2b\x99\x49\x93\xb9\x29\xb3\x97\xf6\x70\x87\xe1\x55\x61\x81\x39\x04\x02\x91\x70\x11\x51\x98\x08\x8e\x0e\x93\x53\x09\xcc\xfb\x45\x55\x34\xce\xa8\x4c\x13\xfa\x2a\x81\x0c\x41\x36\x85\x6a\x8b\x12\xad\x84\xe9\xde\x5b\x29\xa2\xe8\x49\x4d\x14\x5c\xc4\x4d\xac\xbb\xb0\x81\x84\xb8\x8f\x10\x83\xb7\x72\x6e\x79\x1d\x36\xdc\xf4\x62\x58\x1b\xa5\x7b\x18\x15\xe7\x61\xa4\x36\x90\x4b\x1a\xef\x3f\x41\x0c\x81\xc0\x4d\xb8\x88\x5b\x98\x88\x97\xa5\x1f\x22\x12\x9d\xac\x84\x38\x64\x7c\x7d\x7d\x9e\x3c\x6f\x7c\xf9\x86\xb0\x54\x03\xb5\x24\xb7\xe1\x68\x66\xae\x20\x22\x86\x03\x81\xc0\xad\xbf\x9b\x0e\x1c\x37\xde\xfc\x11\x51\x34\x66\x79\x4e\x3e\x5a\x89\x24\xd2\xbf\x7a\xf1\x0a\x8f\xc6\x19\x09\x28\x4b\x7d\xbb\xf1\xcb\x46\xd9\x6e\xc4\x95\x97\x3d\x21\x88\x69\xe3\x74\x06\x08\x04\xa2\xe1\x56\x39\x06\xeb\x5a\x21\xf4\x51\x60\x68\x1c\xa0\x17\x78\x30\xca\x00\x92\xe7\x6b\x6d\x8b\xc9\x0a\x74\xd7\x96\x1a\xd6\x68\xb8\x1e\x94\x91\xd2\x49\x40\x20\x10\x03\x17\x11\x8b\x75\xaf\x8b\xe6\xb1\x93\xca\xd4\xfd\x78\xef\x03\x63\x1e\x97\x03\xf7\xf5\x7e\xba\x15\x1c\xdd\xd8\x0a\xe2\xc2\x7d\xa1\x33\xc5\x65\x36\x4e\x10\x08\xc4\xc2\x45\xc4\x61\xf5\xf0\x7a\xef\x7a\xa6\xb4\xbc\xfb\xfa\xb7\x8b\x1e\x7b\xaa\xf5\xf4\x85\x4c\x31\x9e\x1a\x65\xd7\x35\xb8\x78\x9b\xfa\x86\x57\x18\x1b\x7a\x52\x13\x07\x17\x71\x1b\xeb\x93\x89\x7c\x1f\xa0\x75\x64\x2f\x5f\xaa\xf8\xb1\xe7\x8d\x57\xfb\xac\xfe\xeb\x67\xc2\xf0\x86\x23\x9d\x5e\xa9\xf2\x4d\xa6\x10\x85\xa0\xdf\x72\xb7\xe1\x22\xe2\xb1\x66\x7f\x2f\xfb\x3a\x56\x98\x84\xfa\x95\xd8\x28\x11\x2b\x11\xb7\xf6\x05\xa6\xcf\x46\x0e\x99\x69\x96\x3f\xe2\xef\xce\xe6\x48\x20\x92\x81\x40\x20\x1e\x2e\x22\x01\x6b\x09\x35\x84\xcf\x50\x2d\x12\xd6\x3f\x40\xee\x70\x82\xa0\xd6\xf8\xf6\x45\x56\x3d\x0b\xf5\xf8\xc1\x75\xeb\xc6\xc0\x97\x0f\xeb\x29\xb8\x20\x10\x48\x80\x8b\x48\xc4\xda\xe8\x6d\x7a\xf6\xbb\x35\x34\x43\x56\x83\x86\x66\xc8\xd2\x48\x61\x00\x34\x6f\x2b\xbe\xbb\x62\xd8\xba\x29\xe8\xb0\xfe\x8e\xb3\xcb\x11\x02\x81\xc4\xbf\x13\xd1\x71\x6f\xe2\x3f\x22\xba\x83\xf5\x95\x08\x43\xbf\x29\x32\xd1\x65\x9c\x3d\x79\x74\x43\xc2\xc9\x47\x3e\xfa\x67\xf0\xe8\xfb\xab\xfd\x3f\xcb\xe8\x1b\x98\xea\x54\x87\xd1\xad\x7a\x07\x6e\x95\x93\xb0\xbe\x16\x4b\x49\xcf\xee\x78\xa8\xd1\xf7\xab\x8a\x56\x93\x41\x9a\xf1\xc1\x59\x1f\x12\x97\x8b\xd2\xac\x82\x29\x57\xbf\x6b\x49\xe5\xe4\xd0\x41\x20\x90\x04\x17\x71\x17\x6b\x17\xd6\x20\xf2\x55\xb6\x03\x75\x92\xd0\xf7\xcb\xb8\xcb\x1b\x87\x4e\xc0\xa9\x49\xfe\x84\x84\x25\xdb\xc4\x1c\x59\xb1\x66\x6b\x47\x6a\x08\x04\xee\xc2\x45\xdc\xc3\xba\x1c\xc9\x9f\x33\x11\x1f\x28\xcb\xe1\x69\xe9\xc7\x65\xe5\x9d\x77\x46\x3f\xb6\xb1\x5a\x6a\xd2\x4e\xc8\x7c\xc6\x33\xbf\x65\xba\x89\x03\x02\x81\x7b\x70\x11\xc9\x98\x08\x91\xfe\x6e\xf3\xd7\xaf\x65\x3b\xab\x03\x1b\x52\xb5\xe9\x5f\xe3\xbe\x94\xde\xeb\xb4\xf8\x58\x48\xaa\xf9\xa4\x70\x1a\x11\xf0\x9f\xcf\xea\x92\xe1\x22\x52\x30\x11\x3b\x56\x96\x86\xaf\x48\x67\x8c\xe5\xaf\x9f\x13\x24\xe5\x02\xee\xfb\x15\x35\x64\x28\x5e\x2e\x4e\x22\x38\x93\x3b\x32\xe8\x6e\x7c\x01\x02\x81\x14\xb8\x88\x54\x4c\x84\x41\x12\x61\x7b\x52\xa6\xf8\x23\x3b\xea\x36\xeb\x80\x84\x07\x5d\x7c\x2a\x44\x48\x1e\x0b\x99\x9d\x87\x9c\x0b\x3a\x99\x2f\x2f\xaa\x40\x20\x90\x0a\x17\x71\x1f\x13\xa1\xfc\xe6\x89\x8d\x77\xe4\xcc\xe0\x98\x64\xad\x08\xed\x80\xfb\x0f\x9a\x41\x8e\xdf\x89\xef\x26\x49\x09\x88\xee\xfc\x1c\xf1\xb8\xac\x0d\x81\xc0\xfd\xbf\x13\xd1\x71\x73\xd4\x3f\x22\x4a\xc3\xfa\x9a\x0b\xca\x4a\x6a\xe9\x7e\x9d\xea\x31\x1a\xa3\x59\xdb\x54\x10\x56\x25\xb2\x3e\xb7\x60\xd8\x94\x55\x8b\x7f\x23\x0d\xc9\x4b\x67\x01\x81\x40\x1a\xdc\x2a\x3f\xc0\x44\xdc\x07\xdb\x46\x75\xf9\xec\x2e\xd2\x79\xda\x2f\x49\x39\x4c\x9d\x9d\xd2\x8e\x54\x67\x65\xd8\xc3\x2f\x70\xce\x11\xe1\x19\x65\x45\xaf\xc5\x1f\xc0\x45\x3c\xc4\x7a\x4d\x38\xf3\xf0\x5d\x4a\x42\x96\x1d\x56\xad\xf6\x9b\x89\xd6\xac\xd8\x24\x85\xe6\x52\x17\xce\xf7\x4a\xe2\x5a\x45\x5a\x2a\xd4\xd9\x43\x20\xf0\x10\x2e\xe2\x11\x26\xe2\x03\xc3\x32\x91\xf7\x08\x9b\x9f\x7a\x18\x9b\x02\x83\x4f\x24\x42\x76\xea\xf7\xf9\x7c\xc8\x66\x0b\x2f\xe0\x62\x38\xbb\x8d\xfc\x59\x08\x04\x1e\xc1\x45\xa4\x63\x89\xa8\x9b\xac\xee\xf4\xb3\x3c\xbe\x28\x70\xeb\x2c\x43\xb9\x31\x3b\x02\xb5\x73\x27\xc0\xc0\xd5\x74\x98\xb0\xd0\xf5\xe1\x89\x6d\x74\xdf\x48\x87\x8b\xc8\xc0\xfa\x9c\xa6\x5b\x65\xb0\xbd\x6d\xe3\xa3\x50\xe5\x99\x4c\x56\xc3\xb5\x1a\x5e\xce\x47\x1f\x03\x0b\xed\x18\xe3\xb4\xd8\x47\xdf\xea\x72\xe9\x42\x20\x90\x01\x17\xf1\x18\x6b\x05\x5f\xce\x38\x56\x1b\xce\xb8\x73\x2b\xc5\x65\xad\x67\x47\xcb\xc6\xfe\xf0\x4d\xa4\xcc\x81\x24\x3f\x39\x77\x2c\x74\xe2\x41\xb3\x1c\x04\x02\x8f\xe1\x22\x32\xb1\x0e\xc7\x6e\x0d\x89\x54\x81\x35\x5b\x76\xa9\x95\x22\xfb\x86\xa2\x0b\xe7\xe9\xcc\x59\xf1\x4e\x3d\xdb\xdd\x12\x16\xb9\x9c\x96\x34\x8c\x0f\x81\x40\xe6\xdf\x89\xe8\xb8\xd5\xdb\x1f\x11\x65\x61\xdd\x68\xeb\x9a\xf6\x62\x5f\xfa\x1a\xaa\x61\x23\x22\x6d\x26\x26\x3a\xd7\xe3\x75\xbe\x40\x93\xf1\x21\xd1\xe8\xe3\xe4\xa0\xa5\xa5\x12\xf4\xe8\x97\x05\xb7\xca\xd9\x58\xd7\xbb\xec\xc5\x79\xd8\x85\xf6\x43\x1e\xdb\x7c\xbf\xaf\xec\x76\xa3\xcd\x52\xc4\xe2\x81\x4c\xa2\x96\xe7\xf2\xb5\x9a\xe9\x20\xaf\x32\x1e\x08\x04\xb2\xe1\x22\x72\x30\x11\x62\xb3\x66\x91\x9d\xe6\x72\x1b\x91\x61\x51\xe3\x1a\xf3\x5e\x99\x7e\x21\x78\x99\x0f\xaa\x1d\x12\x51\x62\x61\x83\x77\x6e\xc6\xa1\x47\xbf\x1c\xb8\x88\x5c\x4c\x44\xe1\x80\x4e\x79\x97\x48\xb4\xd1\x77\xb3\x15\x9d\x71\xa9\xcf\xe1\x1a\x93\xf6\xa6\xbf\x03\x9c\xf4\xf9\x88\xd6\xc8\x1f\x96\xd4\x5c\x85\x40\x20\x17\x2e\x22\x0f\x13\x31\x44\x3f\xce\x33\xc4\x90\x7e\x2e\xee\xdd\x74\xf3\x72\x6c\x23\xbd\x62\x89\xe3\xc9\x6f\xa5\x27\xe8\xd7\xbf\x08\xd1\xae\x25\x27\x0a\x43\x20\x90\x07\x17\x91\x8f\x75\x08\x10\xd8\xcd\x7b\x1d\x07\xca\x31\x1e\x0a\xb9\xd5\xf3\x40\x6c\xb8\xcd\x75\x35\x7e\xd6\x62\xa8\xc2\x6c\x44\x89\x43\xb6\x2d\xd9\x03\x02\x81\x7c\xb8\x88\x02\x4c\x44\xd2\x56\xdf\x4d\x29\xf2\xfa\x2d\x7a\xd5\xab\xab\xd7\x44\xfc\x2a\x4c\x0f\x9f\x79\x84\xe4\x37\x22\x72\x38\xf2\x2a\x2e\x7e\x79\x83\x1e\x96\x0b\xe0\x22\x9e\x60\x22\x58\xe4\x5d\xf9\xb4\x5d\xf9\xf8\xd7\x5a\xe5\x0e\x7a\xa6\xf9\x7f\xeb\x6b\xd8\x2e\xea\x96\x46\x88\x5d\x32\xd5\xed\x99\x17\xbe\x8b\x7e\x16\x4f\xfe\x4e\x44\xc7\xed\x6b\xfc\x11\xd1\x53\xcc\xf2\xf0\x65\xb1\x90\x35\xac\x15\x29\xfa\x9c\x2f\xae\x0e\xba\xe9\x7e\x23\xf2\xfc\x93\x7d\x6a\xb1\x5b\x66\xc4\x0f\x39\x06\x3b\x3f\x35\x28\x40\x20\xf0\x14\x6e\x95\x9f\x61\x22\x44\xaf\xee\x20\xb3\x1c\x25\xdf\xff\x78\xf3\x3b\x57\xe2\xf3\x3b\x49\xb6\xd7\xc9\xb2\x2e\x89\x39\xb8\x82\x48\x33\x24\xab\xa9\xc4\x75\x08\x04\x9e\xc1\x45\x14\x62\x22\xde\x7d\xe2\x08\xf7\xfe\xf2\xda\x1a\xf7\xa9\x45\xb5\xd3\xe5\xd1\xbc\xd6\x77\xf7\xc2\x5e\xd7\x3f\x99\xa1\x92\x61\x6a\xca\x4c\x2e\x12\x81\x40\xa0\x10\x2e\xa2\x08\xeb\x50\x3d\xa5\x65\xf8\x66\x67\x26\xc4\xf4\x0c\x2f\x3f\xaf\xd4\xe7\xd1\xd8\x28\x99\x09\xcb\x0e\x07\xa3\xba\xfb\xf4\x94\x58\x7d\x98\x21\x04\x02\x45\x70\x11\xc5\x98\x88\x5f\xd3\x42\x53\x5e\x32\x07\x2c\xb4\x48\xd5\xbb\x0c\x7e\x2e\x11\xc2\x94\xe3\x9b\x2a\xd5\x8d\x0d\x7d\x5c\x17\x23\xc1\x2b\xaa\xe8\x35\x51\x31\x5c\x44\x09\x26\x42\x97\x0b\xba\x55\xdd\x7b\xfa\x87\xdd\xa0\x84\xc2\x10\xc1\xfa\x0a\xe5\xfe\x99\xbb\xcc\x2d\xcd\xe7\xc3\x54\x00\xcb\xc7\xe9\x97\x08\x21\x10\x28\x81\x8b\x28\xc5\x44\x7c\x59\x7b\x73\xa6\x82\x74\xce\xa5\x39\x9f\x0f\x5f\xb3\x9f\x2b\xfd\x4c\x00\xdf\x65\xc1\xca\x92\x02\x11\x91\xdd\xfb\x3b\x27\x85\xad\x20\x10\x28\x85\x8b\x28\xc3\x5a\x13\x9d\x4b\x29\xb0\x73\x3e\xac\xa3\x71\x89\x41\x8e\xc9\x9f\x68\xb4\x2a\x5a\xe2\xa9\xeb\x37\x15\xb0\x09\x94\xe7\x8e\x26\xfb\xcf\xef\x93\x29\xfb\x3b\x11\x1d\xb7\xe3\xf7\x47\x44\xe5\x58\xf7\x7d\x54\x6d\x87\x43\xb9\x0c\x17\xf3\x2b\xb5\xaf\xb1\xb8\x68\x05\x73\x93\x2d\x8f\x2a\x95\x37\x96\x7e\xe7\x8f\xd1\xc5\x63\x89\xa5\x80\x40\xa0\x1c\x6e\x95\x2b\xb0\x2e\x46\x31\x66\xdd\x76\xf7\x3e\xeb\x41\x80\x67\x68\xca\x92\x57\x9d\x70\x6a\x22\x27\x5f\xc1\xec\x81\xac\xfb\xad\xaf\x03\x5f\x2e\x67\x88\x41\x20\x50\x01\x17\x51\x89\x89\xd8\x1f\x9e\x33\x8d\xed\x88\x48\xc5\x27\x5e\xbc\x66\x61\xe9\x8d\xac\xa2\x76\x98\xe7\x66\xd8\xce\xbb\x7c\x3b\xa5\x6e\x7c\x84\x1e\x07\x02\x81\x4a\xb8\x88\xe7\x98\x08\x52\xc0\xe1\x60\xd6\xf4\x5d\xc1\x09\x9e\xf5\x3d\x21\x9b\x48\xb5\xc7\xf8\x16\x4f\xd5\x9e\xbd\x23\x7b\x60\x27\x5c\x7a\x5e\x93\xc3\x00\x02\x81\xe7\x70\x11\x2f\x30\x11\x2b\x60\x69\x3a\x37\x44\xdd\x8a\xcf\x52\x6b\x28\x23\xbe\xf8\x09\xb9\xd4\xcb\xe1\x29\x58\x90\x84\xb2\x95\xe9\xa7\x7d\xf5\x83\x13\x02\x81\x17\x70\x11\x55\x98\x08\x73\xf9\xb3\x91\x48\xcf\x64\x7f\x91\x4d\x4d\x12\xa9\x9a\xfa\x8c\xbb\xc0\xc8\xda\xbc\xef\xa9\x20\x2d\xdf\xc0\x15\xc3\x88\xa7\xe8\x01\xad\x0a\x2e\xe2\x25\x26\xc2\xe5\xaa\x54\x55\x30\x59\xb1\x92\xb8\x2f\x6f\x4c\x03\x8b\x89\xc2\x3d\xfc\xa4\x1c\xbe\xbc\xde\x86\x96\xe2\xd6\x38\x0d\x2e\x69\xf4\xb0\xfc\x12\x2e\xa2\x1a\x13\xe1\x8a\xf2\x74\xfa\x71\xba\xb7\x6e\xbc\x2c\xfa\xcc\x97\x93\x43\x11\x2d\x21\xfb\xb3\x1e\x17\x77\x5b\x4c\x0f\x3c\x93\x83\xa4\xde\xf0\x41\x20\x50\xfd\x77\x22\x3a\x6e\x2f\xfc\x8f\x88\x5e\x61\x96\x27\xfa\x41\x25\xf8\xfd\x43\xe1\x22\xab\x43\x5c\x2c\x15\xb4\x66\x4e\x91\xf5\x95\x5d\x28\x29\xa0\x8d\x75\x71\x66\xf3\xe6\xc7\x53\x67\x20\x10\x78\x05\xb7\xca\x35\x58\x8b\xd9\xb1\xdf\xbe\x52\x91\xfd\x83\x65\x1f\x56\xbf\x00\x91\xf7\x23\xc4\x65\x19\x7d\x14\x0a\xcc\x0b\x63\x9a\x1c\x68\xc9\x5a\xae\xa8\x41\x20\x50\x03\x17\xf1\x1a\xeb\x08\xb4\x70\x88\xc9\xb7\xee\x2d\x45\xd7\xad\x73\x4a\x5c\x21\x9d\x97\xb8\xef\x70\x2c\xbb\x8d\x49\x68\x7e\x6c\xd3\x71\x40\xdd\xa0\x91\x81\x40\xe0\x35\x5c\x44\x2d\x26\xc2\x6f\x5e\x7c\x9e\x82\x8d\xd7\xbe\x21\x4b\xc4\x5f\xe4\xa3\x86\xbd\x0c\x30\x30\xfe\xb4\xe0\xab\xcb\x21\x8d\xf0\x06\xaf\x82\x0b\x11\x04\x02\xb5\x70\x11\x6f\x30\x11\x3e\xa6\x04\x75\xd6\x26\x3f\x37\x06\x5f\x4c\x72\xe3\x20\xd2\xf2\xf5\x83\xb6\xa5\xaf\x5f\xed\xe5\x9b\xaa\x91\xe3\x6e\x32\x52\x43\x8f\xe1\x6f\xe0\x22\xde\x62\x5d\x8c\xba\x33\xf9\x9b\xae\x2b\xf9\x84\x95\x8a\x3c\x1d\xff\x36\x7b\xd8\x7a\x74\x76\x05\x75\xa4\x82\x49\x48\x74\xa4\x00\xd3\xe7\x1d\x1a\x08\x04\xde\xc2\x45\xd4\x61\x5d\x97\x9e\x4a\x8f\x04\xc9\x73\xbb\xe5\x85\x24\x62\x57\xce\x0e\x78\xa4\xab\x4a\x51\x0a\xbd\x82\x18\x9c\x64\x72\x90\xe2\x5d\xc5\xd6\x10\x08\xd4\xc1\x45\xd4\x63\x6d\x29\xa7\x3c\x1a\xa9\x51\xba\x20\x1d\x51\xc6\x89\xec\xe1\x9c\x8c\x7c\x62\x57\x72\x48\x37\xe4\x70\x63\xfc\x97\x71\x9f\xee\x14\x0a\x3d\xa0\xd5\xff\xdd\x61\xdd\x71\xbf\xc3\x13\xeb\xb0\x2e\xaf\x4d\x4d\xe4\x09\xc5\x92\x55\x36\x4f\x9a\xf2\x01\x75\x6a\x2a\xfb\xb5\x6b\x8d\x86\x36\xcf\xd8\xb9\xd3\x4c\x6e\x12\xd7\x89\x1c\xb5\x7e\xd9\x1c\x15\x4f\xd4\x3f\xa1\x1e\x62\x38\x3a\x43\xed\x67\xd1\xdd\xd5\x7c\x87\xd5\xba\x4c\xcc\x24\xd7\x7c\xef\xc4\xa5\xd9\xcc\xd3\x94\x47\x42\x7f\x3d\xe5\x2a\xde\xa8\x11\x5d\x0d\xb8\x9f\x6d\xc6\x04\xd6\x85\x54\x77\x10\x7c\x93\x1b\x5f\xa1\x8a\xc4\x8b\xf7\xd5\x98\xf7\xef\x3a\x12\x1a\xa4\xd7\x58\xe3\x60\x47\xd6\xbe\x40\x25\x2d\x23\x29\x79\x30\x93\x37\xdd\x5e\xdc\xf8\x88\xbc\xee\x15\xd3\xbb\xae\x4d\xff\x42\xb6\xa3\x5f\xd6\xa9\x6a\x34\xbc\x7c\x6a\x09\xc8\x94\x77\xb3\x4e\xb5\x00\x36\x21\x9b\x57\xb2\x49\x56\x3f\xcc\x4e\xb1\x8b\xe5\x77\x58\xdc\x73\x38\x12\x8a\x43\xd1\x71\xda\x4b\x4f\xeb\x63\xf7\x1e\xae\xdd\xda\x01\xdd\xa4\x74\x87\xa5\xc6\x39\xaa\x1e\xf7\xb2\xdf\x62\x0b\x81\x32\xa7\xa8\x8e\x84\xb6\xdf\xac\xd7\x20\x71\xd1\xbe\x77\x85\x99\x31\xc0\x66\x77\xff\x1c\x5f\xb4\x98\x93\x58\x8a\x44\xe6\x6b\x41\x96\x65\xbc\x33\x4e\x1e\x47\x42\xcf\x5d\xda\xb5\xd6\xe2\xae\xe6\xb0\xf5\x60\x2b\xc8\xcf\x8a\xa2\x11\xfb\xba\x70\xa8\x7e\x52\x95\xeb\x63\xc3\xc2\xe0\x2a\x7f\xc4\xe5\xff\x39\xac\x3b\xae\x55\xff\x8c\x64\x0d\x58\x37\x8c\x75\x8b\xde\x84\xcd\x9f\x62\xc4\x21\x3f\x58\x8c\xc8\x2e\xed\x7b\xb5\xa0\x90\x72\x89\x0e\x6f\x01\xd7\xe5\xf9\x12\xe9\x81\x28\x7a\x8e\xdf\x00\xb7\xdf\x35\x62\x22\x06\x7e\x46\xbd\xb2\x71\x5e\x76\x4d\xdf\x4a\xb5\x10\xe1\xb2\x7a\x96\x55\x0d\xdd\xaf\xab\xb9\x4c\xd9\xb8\x8a\xea\x73\x50\xd3\x74\x85\x40\xa0\x11\x2e\xa2\x09\x13\x81\x5f\x1b\x73\x3a\x29\xab\x88\x43\x41\xc6\xf2\x15\x07\xca\x75\x9f\x2e\xcd\x5a\xe2\xde\x3d\x15\xce\x27\x7b\xd4\xcd\x8f\x32\x87\x15\x21\x10\x68\x82\x8b\x68\xc6\x44\xe4\xab\x3c\x54\xf7\xfc\xdc\xed\x2a\xa3\x70\xaf\xc9\xc1\x25\x1c\x78\x64\xac\xb0\x2c\xe0\x9e\xc6\x70\x7d\xc0\x95\x8b\xe0\xc7\x83\x53\x10\x08\x34\xc3\x45\xb4\x60\x22\x52\x43\xe3\xa9\xa9\x6c\xef\xe0\x51\x5c\x48\x4f\x1e\xbc\xd0\x01\xac\x9d\xe8\x57\xe3\x1f\xfe\xee\x4d\x70\x35\xce\x23\x37\x35\x15\xbd\x82\x6f\x81\x8b\x68\xc5\x44\x7c\x3c\x49\x66\xbb\x40\xb5\x28\x68\x3f\x22\xda\x38\x65\x52\xaf\x3f\x7b\xb0\x40\xbc\x98\xbf\x7f\x27\xf5\xb9\xf9\x40\x5b\xca\x23\x7e\x08\x04\x5a\xe1\x22\xda\x30\x11\x13\x63\x77\x11\xc2\xd2\xe2\x3e\xb8\xe1\x1e\xa6\x26\xb1\xcd\x0f\x46\x3c\xf8\xd6\x9f\x5d\x86\x38\x2a\x2e\x2f\xce\xda\x32\x8f\xa2\x6b\xd1\x06\x17\xd1\x8e\x89\x58\x73\x35\xf7\x4f\x07\xab\x57\x5a\x4c\x49\x82\x4a\xb8\x3e\x7b\x5b\xa5\x5f\x52\x7c\x41\xe8\xf4\x1c\x89\x67\x3c\xed\xe7\xec\x86\x7e\xfd\xb6\xff\xdd\x74\xe0\xb8\xf1\xe6\x8f\x88\x3a\xb0\x8e\x56\x16\x27\xac\xe8\xa5\xfc\x55\x4f\x9f\x88\xa3\xe3\x9f\x38\x7c\xe3\x48\x15\xc9\x62\xf0\xaa\x36\xd4\x89\xfd\x55\x3b\x99\x45\x15\xfa\xfd\xd0\x01\xb7\xca\x9d\x98\x88\xdd\xd0\xb2\x94\xed\x53\x67\x4d\xd8\x66\x44\x8d\xc0\x00\x39\x2e\x1b\xb2\xad\x47\x46\x95\x3d\x5a\x22\x63\xda\x63\x7e\xf3\x36\xf6\x10\x08\x74\xc2\x45\x74\x61\x22\xf0\xc6\x0d\x04\x73\xdc\xfb\xc1\x91\x27\xb9\x4c\x7a\x2a\xa6\xf4\xfd\xd5\xb8\x29\x49\x61\x28\x9f\xb6\x89\x4b\xe6\x9f\x89\x7c\x6d\x20\x10\xe8\x82\x8b\x78\x87\x89\x80\xf2\xca\xf6\x6b\x7e\xd2\x81\xdc\xbc\xb7\xdd\xbf\x75\x3c\x27\x16\x26\xd9\xc4\xef\xba\x2a\x15\xf1\x96\x43\x6d\x6d\x27\xde\x1d\x3d\x1d\x78\x07\x17\xf1\x1e\x4b\xa7\xec\xa7\xd7\x9a\x9b\xf3\xb4\xf2\xf8\x6b\xdd\x7e\x91\xa6\x30\xf8\xf2\xd6\x2e\x68\x8e\xe9\x58\x20\xd9\x5f\x35\xa7\x10\x68\xd2\x43\x20\xf0\x1e\x2e\xa2\x1b\xeb\x58\x49\x9a\xa9\xb6\xe1\x6e\x40\xab\xe2\x02\xc5\x85\x26\x99\x8b\xe7\xcb\x69\x05\x38\xac\xf7\xea\x56\xc5\x9a\x84\x18\xce\x85\xcf\xa1\x9f\x45\x37\x5c\x44\x0f\x26\x22\x40\x7e\x41\x9b\x30\xfd\xcd\x93\x1e\x2b\x2e\xd1\x2d\x6b\x7e\xb2\x55\xd5\xe5\xca\xb4\x05\xbc\x88\x3a\xc9\xc8\x29\x4e\x23\x3f\x41\x08\x04\x7a\xe0\x22\x3e\x60\x5d\xd5\x8a\x3d\xff\xcd\x9a\x3c\xa0\xba\xe7\x30\xc8\xe9\x7b\x6e\x3f\xdd\x0b\x7c\x9b\xaf\x84\x56\x6b\x23\xf4\xbd\x6e\xca\xab\x57\x6a\xd0\x33\x8e\x0f\x7f\x27\xa2\xe3\xde\xc4\x7f\x44\xd4\x8b\x59\x9e\xe9\x57\x34\x8d\xcb\x59\x77\x9f\xb9\x71\xb7\x65\xce\x30\x67\x0d\x55\xa5\x44\xbe\x4c\x57\xf8\xa5\x7f\xd7\xd7\x5f\x5f\xcb\x26\x0c\xbd\x8c\xe8\x85\x5b\xe5\x3e\x4c\x84\x1e\x62\x14\x98\x57\x33\xf1\x98\xbc\x6e\x35\x7f\xc6\x97\xaa\xc9\x63\x6e\x42\x45\x44\xdb\x74\x8b\xa4\xa1\x3f\xa4\xc6\xc4\xc1\x13\x02\x81\x3e\xb8\x88\x7e\xac\x1d\xfa\xc8\x95\x0a\xa6\xdd\x10\xf3\xcb\xa7\x6d\xfd\x15\xd3\xb6\xce\xc9\x32\x2f\xcc\xfb\xff\x26\xcd\x35\xc5\x1b\xae\x7b\xcb\xcb\xea\x0e\x81\x40\x3f\x5c\xc4\x47\x4c\x84\xff\xf6\x21\x5b\xd0\xde\x36\xde\xb0\x63\x83\x64\x7b\x01\xd9\x79\x11\x54\xf5\xc9\xb1\x5a\x2d\xeb\x12\xc6\x9a\xe6\x15\xd1\x47\x1a\x10\x08\x7c\x84\x8b\x18\xc0\xba\xd1\x3b\xcb\xee\xe2\x62\xc7\xeb\xa0\x36\x0b\xb6\xe1\x55\xe6\x34\x0b\xb2\x90\xf2\xea\xf6\x19\x14\xcb\xf8\x1c\x92\xad\x55\x9f\x47\xeb\x74\x00\x2e\x62\x10\x13\x61\xfb\xc1\xfa\xb3\xe1\x01\xc4\x5d\x42\xc8\x9b\x79\xe6\x06\x4e\xc2\x9d\x17\x51\x64\xfc\x8f\xf1\x7d\x96\x9c\x70\xf7\x7f\xfc\x9c\x44\x2f\x3e\x06\xe1\x22\x86\x30\x11\x6d\x3e\x0a\x05\x55\x25\xc1\x8a\x0c\xb1\xf6\xa7\x73\x07\x9c\x4f\x7b\x14\x0f\x3c\x6a\xd6\x7b\x57\xfe\xeb\x65\xf3\x5b\xcd\xa4\xbb\xdc\x10\x08\x0c\xc1\x45\x7c\xc2\x44\x9c\x32\xdb\xe9\xbd\x03\xec\xc8\x78\xd7\x72\x2a\xe9\x7c\xf3\x8f\xe1\xde\xd4\x9f\xf1\x8c\x3a\xfb\x53\x72\x8a\x97\xe4\x4d\x92\xc3\x35\x08\x04\x3e\xfd\x9d\x88\x8e\x9b\xa3\xfe\x11\xd1\x30\x66\x79\xea\x8a\xe7\x94\x74\x7f\x8d\x08\x1a\xd0\x9f\x20\xaf\xbc\x20\xac\xf4\x56\x63\x8e\x49\x76\xbd\x55\x42\x53\x82\x75\x3a\xf3\x13\x27\x2e\x04\x02\xc3\x70\xab\xfc\x19\x13\xf1\xcd\x78\xe9\xc7\x85\xf0\x5a\xd6\x8d\x4d\x69\xef\x1c\xbc\x82\xd6\x65\x7a\xf3\x2b\x96\x84\x53\xb4\xaa\x89\x9f\x0b\x69\xba\xdd\x41\x08\x04\x3e\xc3\x45\x8c\x60\x22\xda\x95\x86\xe9\x27\xf8\x9f\x7c\xe4\x7e\x99\x44\xbf\xaa\x99\x99\x49\x9c\xd3\x3f\x19\xd1\xc1\x6c\x90\x18\x2e\x70\x82\x17\x18\x71\x82\x40\x60\x04\x2e\x62\x14\x13\x21\x99\x7d\xa0\xb8\x59\x74\xe7\x3c\xc7\x96\xec\xdd\x33\x26\xbf\xd4\xec\xb6\xac\x28\x69\x62\xab\x6f\xfe\xde\x5b\xa2\x86\x7e\x5c\x16\x86\x40\x60\x14\x2e\xe2\x0b\x26\x22\xf8\xb7\x9d\xab\xfb\xf4\xb9\x3b\x0c\x6e\x26\x08\x0b\x61\xed\x31\x1e\xcd\xfa\xc3\xaf\x73\x4b\x2f\xe2\x9e\x64\x2b\x90\x04\x3f\x47\x8b\xe8\x0b\x5c\xc4\x18\x26\x62\x4a\xb9\x9a\xaf\x55\xac\xdc\xfa\xc0\xe5\x94\xa5\x53\x47\x46\xd9\xe8\x8b\xca\x3e\x03\xee\xb1\xee\xc3\xb5\xbe\x89\x81\x4f\x1f\xd0\x53\xeb\x31\xb8\x88\x71\x4c\xc4\xd3\xf5\x58\xb9\x97\x0c\x1f\x98\x86\x7e\x9f\x9a\x1f\xcb\x61\xe4\xff\xcd\x10\xfb\x41\x93\x57\xdc\x63\x91\xba\xec\x72\x69\x07\xc7\x49\x08\x04\xc6\xe1\x22\x26\x30\x11\xe1\x57\x92\x9b\x62\x9b\x1a\x76\xac\x6a\x7d\x6f\xaa\x7f\x08\xe8\x0e\x7f\x21\x69\xd3\x1c\x7d\x1a\x8c\x8d\xd8\x69\xc7\x1b\x88\x26\x81\x40\x60\xe2\x2f\xbf\xac\x3b\x66\xf5\xf6\x47\x44\x93\x58\xc7\x5c\x99\xd6\xda\x69\x43\x8f\x56\xac\xe6\xe5\x19\x49\xfb\x15\x3e\x45\x3c\x21\x1c\x93\x59\xbb\xf2\xcc\x80\x5c\x95\x26\xc5\x83\x1b\x3d\xbd\x9c\x84\x5b\xe5\x29\xac\x0b\xee\xe0\xa5\x8e\xa6\xc8\x04\xe6\x81\x3a\xcd\xd3\xa5\x77\x72\xef\xcb\xb2\xc4\x26\x6e\x7e\x99\xf6\xd2\xcb\xfa\x19\xce\xc4\x1a\x63\x0c\x81\xc0\x14\x5c\xc4\x34\x26\x42\x5b\x5b\xc1\x6c\x82\x87\xf8\x6b\xf1\x57\x42\xf9\xdd\xd8\xa8\x6b\x0d\x9b\x13\x2a\x5a\xd7\x05\x1c\x0b\x37\x25\x1b\x06\x5f\x85\xa2\xd7\x44\xd3\x70\x11\x5f\x31\x11\x66\xd4\xd4\x42\x6e\x55\x1d\xfe\x39\xde\x33\x28\xa2\xba\xdf\x03\x7d\x5f\x84\x8c\xf2\x74\x52\x6d\x37\xcd\xcd\x1d\xd6\x13\xf7\x58\x21\x10\xf8\x0a\x17\x31\x83\x89\x58\x3e\x7c\x4e\xd9\x11\xd1\x6b\xc5\xfc\xf4\x84\xf8\x19\xaa\xd7\x22\x92\xf4\xa1\x5e\x63\x84\xca\xe2\x01\xbe\xa7\xc2\xbc\x43\xa7\x74\x20\x10\x98\x81\x8b\x98\xc5\x44\xc8\x5c\xba\xb1\xf0\x64\x24\x87\xeb\x2b\xc5\x3b\xee\xb6\xe8\xc4\xa9\xe7\x1f\x49\x1f\xf2\xd5\x4c\xd7\x7e\xde\x44\x31\xa4\xd1\xad\xa0\x5f\x13\xb3\x70\x11\x73\x58\xb7\x84\x92\x63\x8b\xc3\x91\xf3\x1a\x73\x53\x1a\xd3\xe3\x42\x3f\x03\x11\x23\xc2\x06\x72\xeb\x91\xfe\xb7\xf1\x35\x6c\x4f\x6c\x02\x92\x10\x08\xcc\xc1\x45\x7c\xc3\x44\x2c\xac\x92\xf1\x86\xef\xee\x13\x72\x7d\xf7\x11\xe4\x35\xaa\xfc\xc0\xb9\x5c\x59\xce\x65\x21\x22\x15\x48\xe5\x7f\x42\x40\x6d\x1b\x3d\xf2\x7f\xfb\x3b\x11\x1d\xb7\xaf\xf1\x47\x44\xdf\xb1\x6e\xca\x2c\x27\x44\x91\x16\x17\x4a\xd4\x31\x31\x6a\xd4\x65\xca\xb3\xf8\x39\xcc\x2a\xd6\x8f\xb6\xf3\x9c\x40\xbe\x93\xde\x2c\xb8\x41\x07\x81\xc0\x77\xb8\x55\x9e\xc7\x44\x64\x69\x68\x6b\xe8\xdc\x18\xd1\x2a\xe8\x5a\xf4\xa4\xbb\xdb\xfb\xab\x73\x56\x56\x8c\x56\xe1\x23\x8e\x86\xee\xfc\xdd\x6d\x2e\x37\x2a\x08\x04\xe6\xe1\x22\x16\x30\x11\x02\x39\xd2\x15\xd4\x34\xc3\x87\x4c\x35\x3e\xdb\xbc\x15\xfe\x67\x2c\x2e\xfb\x2d\xf4\x93\xe4\xcb\x53\x6c\x3c\x65\xbf\xf2\x85\x8d\x13\x02\x81\x05\xb8\x88\x45\xac\xef\x8e\x68\x59\xfb\x82\x2e\x0a\x3f\x69\x5f\xa4\xb4\xae\xfe\xd0\x66\xc2\xdf\x74\x27\xd6\x1b\xbc\xf3\x9a\x47\xb9\x5d\xe9\x80\xd0\x59\x00\x02\x81\x45\xb8\x88\x25\xac\xed\x91\x97\x2b\x1d\x3f\x93\x13\xe9\xeb\x9a\x45\x7d\x5b\x97\xfa\xeb\x40\x95\x61\x05\xd5\x88\x54\x8a\x50\x16\x02\x8d\x3d\xc9\x61\xf4\xcb\x6e\x09\x2e\xe2\x07\xd6\x82\x25\x40\xf2\x04\x4e\x1a\x9f\xb1\x19\x25\x73\x25\xc2\x7a\xc1\xa0\x7b\xa3\x65\x9d\x66\xff\xfd\x22\xf9\x10\xb1\x53\x7d\xc7\x47\x33\x08\x04\x7e\xc0\x45\x2c\x63\x22\x98\x04\xde\xfd\x80\x6a\x78\xbd\xef\xe5\x70\x66\xeb\xdb\xeb\x46\xd7\x49\x7c\x4b\xbc\x2a\xe8\x9a\x7a\x58\x73\x5f\xec\xb2\xb4\xc1\x59\x08\x04\x96\xe1\x22\x56\xb0\x10\xb4\x2c\xd3\xb6\x28\xdf\xf9\xef\xb9\x5e\x9c\x42\x1b\x77\x25\xcd\x62\x27\xce\xf8\xf4\x32\xd7\xbc\x90\xf2\xb6\x4b\x47\x54\xa0\x87\x82\x95\xbf\x13\xd1\x71\x3b\x7e\x7f\x44\xb4\x8a\x59\x1e\x8f\x8f\xe5\x3f\x33\x6e\xbd\xec\xb3\x78\xe2\x95\xaf\x7d\x61\xc3\x89\xae\xa6\x51\x67\xe9\x9e\xf5\x8b\x57\x9f\x3c\x45\xef\x87\xad\xa2\xd7\x44\xab\x70\xab\xbc\x86\x89\xa0\x2d\x27\x29\xcc\xa2\x64\xfe\x7a\x45\x9f\xb1\xab\xec\xd5\x20\x4b\x20\xfd\x76\x13\x67\xf4\x4c\x47\x82\x56\x28\x8e\xe8\xa6\x39\xba\xca\x6b\x70\x11\xeb\x98\x08\x42\xb5\xdd\xfa\x0c\xc5\xae\x7b\x9c\x67\x45\xa5\x5b\x2c\x27\x70\x39\xb6\x03\x1e\x8a\xf6\x4e\xdd\x0f\xea\xbb\x1c\x07\x7e\xbf\xca\x0b\x81\xc0\x3a\x5c\xc4\x06\xd6\x6a\x42\x46\x8c\x25\x3a\x82\xec\x7e\xee\xce\xc5\x38\xe9\xbe\x91\xc7\x04\x2a\xb9\xd9\x39\x39\xb4\x77\x23\xd6\xae\xfb\xef\xc7\xdd\xa3\x84\x40\x60\x03\x2e\xe2\x27\x26\xa2\x88\xe2\x0d\xdf\x6d\xc2\x0e\xbb\x3a\x0a\x95\xa7\x2f\x86\x6f\x7c\xc9\xf1\x30\xcc\xc2\xb1\x8b\xe3\x8e\x57\x8a\x49\xcf\x25\xc8\x60\x84\x40\xe0\x27\x5c\xc4\x26\x26\xa2\x00\x2f\x36\x4a\xf6\x26\xae\x40\x61\xaf\x3e\x8f\x70\x6c\xa5\x70\x31\x4a\x88\x3a\x30\xbb\x81\x7b\x90\x75\xcd\xd1\xd3\xe0\x9d\x2e\x04\x02\x9b\x70\x11\xbf\x30\x11\x6f\xc8\xea\x6e\xd8\x47\x31\xf6\xb1\x18\x93\x7c\xd0\x15\x7c\xb2\x44\x4b\x42\xa0\xcd\x2a\x27\x70\x9e\xae\x78\x4c\xdd\xc4\x7e\xc6\x04\x02\x81\x5f\x70\x11\x5b\x58\x77\xaf\xca\x5d\x45\xb8\xb9\xf3\x07\x72\xa8\x6a\x17\x5d\xab\xad\x1f\x2a\x6e\xbc\x56\xf2\xa2\x10\xee\x92\xbc\x19\xb3\xab\xec\xd7\xc9\x00\x81\xc0\xd6\xdf\x89\xe8\xb8\xbd\xf0\x3f\x22\xda\xc6\xda\x90\xb4\xff\x25\x20\x32\xa9\x3c\xbf\xfa\x2b\x7c\xec\xd2\x62\xdc\x2d\x44\xc1\xfb\x1c\xae\xef\x07\x38\xa5\x6c\x94\x2e\xe2\x54\x28\xf4\x82\x65\x1b\x6e\x95\x77\x30\x11\xe4\x43\x4e\xc0\x5d\x59\xa1\x59\xcd\xe5\xa2\xde\x50\xd9\xa4\x96\xef\x94\x95\x19\x26\x9e\xae\x2f\x15\xc4\x3e\x67\x23\x18\x72\xa9\x21\x10\xd8\x81\x8b\xd8\xc5\x44\xc8\xb6\x10\xac\xda\x86\x15\x0f\x31\xad\x6d\x37\x51\xca\xfc\xbc\x47\x3b\xc5\x6b\xfc\xe3\x8b\xb5\xd8\x32\xa2\xea\xda\xd3\x10\x0d\x39\x08\x04\x76\xe1\x22\xf6\x30\x11\xe7\x8d\xae\xb6\x56\x08\xe2\xbf\x39\xc9\x07\x32\xde\xd1\x8c\xca\xd1\x09\x82\x6e\xbd\xa7\xa4\xa5\x6b\xff\xd9\x7c\xa9\x83\x9c\x5e\x19\x02\x81\x3d\xb8\x88\x7d\x4c\x04\x0d\x62\xda\xd1\x6e\x6d\x6e\x04\x58\x7a\x0c\xcc\xd1\x6e\x67\x99\xa9\x90\xe0\xc5\x4e\xad\xc9\xc8\xa7\x64\xea\x37\x33\xfe\xa6\x87\x40\x60\x1f\x2e\xe2\x00\x13\xf1\xa0\x2d\xf8\x82\x4b\x54\x8a\x7c\xec\xa3\xd2\x7b\xca\xcf\x5f\xe9\x93\x74\x48\x42\x4c\x9e\x7e\x45\x88\x68\x85\xf3\xc8\x5f\x79\x96\x10\x08\x1c\xc0\x45\xfc\xc6\x44\x38\x86\x10\xbd\x1e\xb8\x29\xf5\x70\xdd\xaf\xf6\xc1\xee\x52\x63\xa4\xf0\xdb\x2a\x0d\x83\x7d\x7d\xc5\xc9\x75\xaf\xe8\x07\xca\x9a\x52\x10\x08\xfc\x86\x8b\x38\xc4\x44\xac\xe6\x74\x52\x88\x7f\xaa\x51\x8c\x35\xe0\xa4\x76\x84\x72\x4f\x16\x75\xc7\x8a\xae\xe7\xd3\xb1\x76\x39\x90\x28\x1e\xf0\xdc\x34\x87\x40\xe0\xf0\xef\x0e\xeb\x8e\x73\xd1\xc3\x3a\xac\x73\xe0\x4b\x5a\xcd\xb8\xcd\xbb\x6a\xec\xeb\xce\xeb\xf4\x91\x36\xb4\x12\xdc\xab\xdf\x2b\x1b\xb4\xb9\x48\xb3\x92\x35\xb1\xba\x71\xd4\xea\x15\x2f\x31\xb9\x2c\x30\x72\x71\x3c\x46\x30\xf0\x13\x50\x82\xd3\x9d\xa9\x9f\xb9\xfa\xdb\x1b\xe0\xc7\x1d\xd6\x36\xb3\x42\xd0\xb3\x1e\x09\x95\x18\xbf\xfd\x59\x75\x95\xc5\xe4\x45\xc7\x7a\xc3\x7a\xdb\x57\x05\xee\x40\x93\xb7\x6b\x9f\x5b\xd3\x7a\xf9\xab\x65\x0f\x4e\xf5\xf5\x1d\x09\x3d\xcb\x98\x9c\xd0\xfd\xee\x4a\x89\x3c\x39\xb9\xb2\x65\xcb\x0e\xce\xef\xc4\x68\x25\x2a\xa8\xee\x2b\xfb\xc2\x7b\xd7\xa8\x7d\xa6\xd6\x23\xa1\x4b\x81\x33\x8e\x62\x07\x60\x0b\xe3\x78\xca\x7c\xf2\x75\xea\x11\x12\x97\x04\xf3\x85\xf6\x83\x15\x86\x69\xd1\xc0\x56\x56\x36\xb7\x23\xa1\x27\xcd\x91\x21\xf1\x9a\x2d\x52\x4f\xad\x7f\x1d\x46\xbb\x82\xb7\xf3\x08\xbc\x0e\x3e\x86\xd2\x7f\xda\x27\x0d\x44\x46\x33\xeb\xb3\x1f\xb5\x3c\xae\xe3\x75\x67\xbe\x10\x08\xfd\x34\x9f\x9f\x8b\x0f\xcc\x5d\xfc\x26\xd6\x76\xc5\xc6\xd3\x76\x5f\x61\x67\x17\x2f\x40\x70\x8c\xf3\x48\xa8\x8a\xc3\x85\xf8\xba\x3c\x19\xdd\x49\xd5\xc3\xec\x5b\xa5\x5b\x84\x32\xcc\x97\x34\x1b\x82\x1b\xa5\x69\x37\x4a\x76\xa2\xb6\x78\x6e\x85\xbd\x03\xfe\x5d\xab\xfe\x77\x24\x03\x91\x58\xee\x74\xe1\xf1\x5b\x88\xc7\x06\x27\xcb\x5a\xbc\x28\x57\xc3\xab\xad\xf0\xdc\x3b\x89\x2d\x9b\x4d\xa5\xb5\x84\x92\xfd\xca\xa9\x05\xda\x8d\x21\x10\x05\xd7\x9d\x0e\x44\x62\xf9\xd3\x1d\x94\x57\x50\xbc\x34\x5e\xad\xad\xf7\xef\xc9\xa1\x11\xaa\xed\xac\x28\x79\xf3\xf0\xd9\x76\xe3\xaf\xbc\xd8\x57\xcf\xaf\x19\xd0\x9b\x41\x20\x0a\xae\x3f\x1d\x88\xc4\x72\xa8\xbb\xac\x79\x65\x7e\xfc\x1c\x69\xcb\xcb\x34\x7d\x15\x71\x5c\xd5\xb1\x90\x1a\x96\x9b\xd7\x2e\xe7\x26\xcf\xaa\x36\xb6\xbb\xd6\x7e\x76\x80\x40\x14\x5c\x87\x3a\x10\x89\xe5\x51\x67\x99\x18\xa4\xfd\xa2\x6c\xa4\x38\x6d\x82\x6c\xf5\xd6\x4c\x2f\x7e\x5b\x51\xf0\xae\xfd\xd7\xd7\x7b\x36\x17\xca\x34\x75\x69\x8d\x74\x21\x10\x05\xd7\xa3\x0e\x44\x62\xb9\xd4\xd5\xcb\x04\xbb\x52\xf7\xb4\x30\x70\x28\x91\xe3\xf9\x1c\xcc\xb6\x04\xb1\x6c\xfc\xb2\xf8\xe6\x2d\xe5\x47\xea\x24\x9c\xcf\xee\xaf\x00\x81\x28\xb8\x2e\x75\x20\x12\xcb\xa7\xae\xce\x1e\x7f\xb8\x2a\x3e\xe5\xc2\x37\xfd\x15\x5d\x4f\xfd\x3a\x6e\xbb\x5b\x73\x1b\xea\x38\x33\x64\x55\xc6\x2f\x39\x6d\xe2\x2e\x90\x42\x20\x0a\xae\x4f\x1d\x88\xc4\x72\xaa\xdb\x64\x7e\x74\x8d\xed\x41\x4e\x01\x07\x4f\x70\xcb\x9c\xde\x22\xc1\x72\x07\x51\x67\x84\x9e\xea\xb4\x12\x9f\x36\xb5\x64\x52\x88\x34\x04\xa2\xe0\x3a\xd5\x81\x48\x2c\xaf\xba\xdb\x27\x5d\x94\x7e\x75\x37\xcc\xcf\x2a\xb7\xe9\xad\x65\x6c\x9e\x6e\x35\xcc\x4a\x63\x19\x55\x4c\x3f\x17\x53\x37\xf4\x8e\xd9\x0f\xdd\x56\x30\xbd\xea\xfe\x11\xd3\x71\xe3\xce\x3f\x62\xc2\x72\xab\xbb\x97\xf0\x58\xe3\x0d\x18\xd8\x5b\xd1\xdc\x99\xf2\x34\xfc\xb1\x26\x8d\x74\x13\x97\x1c\x6e\x88\xf3\xdb\xae\x8c\xc9\x35\xbf\xcf\x16\x10\x88\x82\xeb\x56\x07\x22\xb1\xfc\xea\x82\xb6\x7d\x45\x3f\x7c\x1e\xe7\x35\x19\xb3\xe6\xf4\x72\x99\x77\x0c\x9b\xf7\x4e\x92\x35\x62\x35\x28\x3e\xe5\xef\xa6\x7e\x51\x9a\x07\x02\x51\x70\xfd\xea\x40\x24\x96\x63\xdd\x5e\xa0\xe4\xb5\x3a\x46\xa8\x94\xe0\xd1\xaf\xc5\xe7\xb2\x62\x79\x49\xd3\x8c\x2b\x0d\x4f\x3b\xfb\x09\x9e\x99\x46\x45\x31\x9c\x77\x83\x40\x14\x5c\xc7\x3a\x10\x89\xe5\x59\x57\xed\x76\xa5\x4d\xa3\x8c\xc5\x5d\x81\x37\x42\xad\x66\x03\x67\x6a\xb5\x3a\xa8\x17\xac\x35\x52\x2a\xfd\x12\x33\xcd\x15\xba\x70\x06\x02\x51\x70\x3d\xeb\x40\x24\x96\x6b\x9d\xe4\x57\x54\x9e\x7a\xc6\xd9\x6c\x8a\xd3\x17\x68\xf3\xa6\xca\x6f\xdd\xe2\x56\x71\xfe\x9e\x5b\x70\x01\x0a\x30\x7b\xe0\xb4\x4a\xa9\x0f\x81\x28\xb8\xae\x75\x20\x12\xcb\xb7\xce\x30\xef\x83\x57\x7f\x8a\x0c\xe9\x2b\x1e\x70\x50\xb7\x35\xb4\x60\x64\xe8\xad\xdb\x82\x8b\x97\x7d\x94\xe7\x4a\x8c\x32\xdf\xc6\x15\x08\x44\xc1\xf5\xad\x03\x91\x58\xce\x75\x89\xf4\x6e\x1f\xf0\xa0\x97\x55\x59\x1d\xfe\x26\x81\xbe\xad\x5a\xe0\xf3\x09\xd4\xa5\x51\x93\xd9\xdb\xae\xa7\x79\x3e\x4d\x3b\xb0\x40\x20\x0a\xae\x73\x1d\x88\xc4\xf2\xae\x9b\x15\xf0\xc9\xb8\xb9\xf7\x26\xe4\xa5\xcf\xc7\x8f\x97\x49\x13\xa9\x24\xd4\x35\xed\x3e\xef\x0d\x85\x91\xf3\x7d\xb8\x37\xc7\x0f\xa2\x20\x10\x05\xd3\xbb\xee\x1f\x31\x1d\xf7\x66\xfe\x47\x4c\x58\xee\x75\x9f\xd5\x3f\x73\xa2\x98\x5b\x44\xc8\x52\x1e\xb0\x6e\x54\x1a\x71\x84\x29\xc6\x3c\xac\xd3\xe6\x7d\x51\xb5\xb8\x24\x29\xc6\x55\x6f\x03\x81\x28\xb8\xee\x75\x20\x12\xcb\xbf\xee\x49\x43\xba\x5a\x73\xe1\x06\xa2\x56\x9f\x43\x92\xef\xd4\xb7\x87\x45\xb2\x7d\xad\xc6\x31\xa1\x5f\x3b\xcd\x0c\x82\x83\x79\xb3\x5d\x20\x10\x05\xd7\xbf\x0e\x44\x62\x39\xd8\x41\xf1\x4f\x59\x15\x92\x74\xef\x8c\xde\x35\xa8\x77\xbe\x35\xb6\x19\x1c\x30\xea\x2b\x20\x85\x27\x7b\x31\x3b\xc5\xbd\xa4\xcb\xfa\x2c\x04\xa2\xe0\x3a\xd8\x81\x48\x2c\x0f\xbb\x4e\x3e\xf1\xbd\x0e\x6a\x5e\xfc\x1c\xb3\x5c\x32\xc6\x4b\x44\x4a\xdc\x27\xa5\xf4\x3e\xe1\x44\x35\xec\x51\xe0\xaf\x38\xf2\x38\xa1\x47\x5b\xb8\x1e\x76\x20\x12\xcb\xc5\x2e\xf4\x6a\xa1\x45\x89\xe1\x3c\xb1\x1f\x5e\xfe\xfd\xea\x98\xbe\x75\x7b\x25\x7f\x13\x76\x5d\x4e\xe1\x3b\x3f\x0c\x22\x75\xfb\xcf\x03\x10\x88\x82\xeb\x62\x07\x22\xb1\x7c\xec\xa0\x16\x95\xeb\xa7\xb5\x67\x12\x07\x37\x7f\x9f\x81\xfc\xf5\x64\x09\x26\x4f\xd6\x09\xd2\x26\xdb\x8f\x6d\x58\xec\x29\x73\x20\x4e\x42\x20\x0a\xae\x8f\x1d\x88\xc4\x72\xb2\x23\x8d\x23\x5d\x9a\x1d\x35\x35\x5c\x7f\x46\x92\xf8\xe1\x94\x4b\x6d\x7a\x0d\xa3\x61\xda\xad\x8a\xb4\x13\xeb\x34\xe6\x45\x65\x4f\x44\x20\x10\x05\xd7\xc9\x0e\x44\x62\x79\xd9\xed\x94\x77\x68\x77\x5c\xdd\xb3\x9b\xfc\x35\x28\x6b\x3f\x7a\x77\x87\x9a\x7e\x66\xeb\xcd\xb8\x12\xe1\xf3\xae\xc6\x8b\xaa\x51\xe5\xe4\x10\x88\x82\xe9\x65\xf7\x8f\x98\x8e\x9b\xbb\xfe\x23\x26\x2c\x33\x3b\xa9\xcf\x24\x8b\xc5\x7a\xc4\x25\x66\x65\x5b\xf6\x45\x67\xeb\xad\x79\xde\x4a\x47\x1f\xe4\x09\x9f\x8d\xc5\xa3\x7e\x78\xcd\x56\xd7\x08\x02\x51\x70\xcd\xec\x40\x24\x96\x9b\x5d\x8e\x0e\xea\xdc\xa4\xd7\xce\x59\xda\x2b\x85\xf8\xa9\xb2\xd6\x76\x04\xaf\xc5\x5c\x73\x5b\x09\x71\x48\x19\xee\xe2\x46\x82\xe7\xa8\x20\x10\x05\xd7\xcd\x0e\x44\x62\xd9\xd9\xd5\x6c\x0c\x5a\xff\x36\xd5\x9f\xf1\xfe\xe4\xa8\xfc\x72\x44\x64\x0d\x7f\x24\xfe\xd3\x41\x60\xdc\x6e\xc6\x59\xd4\xc0\x05\x89\x13\xee\x10\x88\x82\x6b\x67\x07\x22\xb1\xfc\xec\x6a\xe2\xa5\x7a\x06\x5c\x73\x56\xf1\xee\x64\xbc\x2c\x8a\xc3\x7d\xd7\xf0\xe9\xab\x7d\x49\xda\x52\xf1\xb7\x0b\xa1\xce\x21\x09\x6d\xe8\x69\x1e\x5c\x3f\x3b\x10\x89\x65\x68\x47\x76\xf2\x52\x1d\x5d\x7c\xfe\xe0\x8b\xb7\xbc\x34\x2c\x1f\x1f\x3c\x6a\x23\xeb\x0d\xfc\xfe\x73\xab\xa4\x89\x0d\xb5\xcd\xbd\x7e\xe1\x3c\x04\xa2\xe0\x1a\xda\x81\x48\x2c\x47\x3b\x6f\x55\xbe\x46\x21\xfd\xe1\x16\xd5\x97\x57\xba\xaa\x72\xb3\x26\xd9\xaf\xf8\x6b\xca\x53\xdd\xe3\x98\x07\xcf\xb3\x5f\x2c\x2d\x60\x85\x40\x14\x5c\x47\x3b\x10\x89\x65\x69\x27\xa8\xab\x65\x38\x40\x87\xd0\x5d\xae\xd5\x91\xf0\x10\xa6\x32\xbd\x5c\xf9\x80\x1b\xdf\xeb\xbb\x16\x91\x8f\x92\x86\x1a\xc9\x65\xf4\xf2\x01\xae\xa5\x1d\x88\xc4\xf2\xb4\x23\x6f\x2c\x3a\x9d\xec\xa6\xdf\x67\x5e\x9f\x7b\xca\xac\x33\xb8\xa8\x60\xb5\x0a\x59\xae\xce\xbd\x21\x1f\xb9\x44\xb1\xc4\xc9\xc7\x00\x81\x28\x98\x9e\x76\xff\x88\xe9\xb8\xd5\xdd\x3f\x62\xc2\x32\xb5\xbb\x3a\xe6\xb8\xa6\x88\x70\xa4\x4f\xa5\x8c\xc8\xb8\xa1\x71\xad\x3c\xde\x79\xe2\x17\xb1\x84\x44\x41\xa7\x3c\x8f\x8c\x97\x9f\x1f\x01\x04\xa2\xe0\x9a\xda\x81\x48\x2c\x57\xbb\x53\xf8\x4f\x32\x5b\x0a\x69\xeb\x7b\xbe\x4a\xda\x9e\xae\x09\xe1\xc8\x7e\x97\x69\x66\xee\x73\xf6\x54\x3e\xdd\x83\x89\xc5\xbe\x4e\x45\x08\x44\xc1\x75\xb5\x03\x91\x58\xb6\x76\xcc\x87\xdb\x7a\x22\x52\x34\x9f\x9a\xd8\x04\x78\xbd\xaf\x13\xfe\xfc\xad\xb3\xd3\xe0\xf7\x66\x7a\x99\x66\xc7\x39\xb1\xc6\x5a\xfb\x04\x04\xa2\xe0\xda\xda\x81\x48\x2c\x5f\x3b\xa7\x08\x73\x7c\x0b\x2a\xeb\x33\xf3\x56\xb2\x8f\xbe\x1d\x14\x1f\x28\xe3\x1e\xf8\xe7\x7d\x33\x8c\x48\x55\x34\x9a\x6a\xdd\xbf\x2e\x0c\x81\x28\xb8\xbe\x76\x20\x12\xcb\xd8\x6e\xd2\x62\xe7\xfe\xf2\x14\x2d\x71\x22\xd2\x9a\x1d\x47\x9c\x5d\xec\x1e\xd3\x12\xd9\xca\x94\xc5\x69\x11\xd6\x7c\x9b\xd9\x31\x71\x5a\x08\x44\xc1\x35\xb6\x03\x91\x58\xce\x76\x9d\xd9\x96\x91\xb7\xa5\x15\x5e\x02\xeb\xe6\x25\xb1\x36\x55\xf8\x9a\xd4\x67\xbd\x5e\x0a\xbc\xd1\x6c\xf8\x38\xa7\x4c\x40\xdb\x6f\x0d\x81\x28\xb8\xce\x76\x20\x12\xcb\xda\x2e\xa1\xee\xd9\x1b\x8b\xcd\x6a\x25\x80\xa8\x40\xf7\x4a\x7c\x9b\x50\x84\xe5\x53\x51\x8b\x31\x95\x67\x95\x71\x2c\x99\xf2\x23\xa2\x8c\x10\x88\x82\x6b\x6d\x07\x22\xb1\xbc\xed\xaa\x5d\xd3\xb7\xc3\x3a\xbd\x08\xa3\x93\x2f\xdb\xd8\x97\xbe\xc9\xb7\xb4\x30\x91\xfe\x7e\x41\x62\x85\xdf\xfe\xd3\xc3\x8a\x1c\x3b\xf4\xdb\x0f\xa6\xb7\xdd\x3f\x62\x3a\x6e\xff\xe3\x1f\x31\x61\x99\xdb\x69\xcc\x6a\x08\x0a\x9e\x79\x7c\x32\x37\x3c\xe2\xee\x85\x9d\x26\xdf\x54\xc2\xc1\x67\xdb\xf1\xd3\x23\x9a\xe5\xbb\x8b\x1f\xa7\x4f\x33\x41\x20\x0a\xae\xb9\x1d\x88\xc4\x72\xb7\x9b\x7b\xad\x29\xb4\x32\x73\x9d\x60\xa7\x25\xd2\xca\x98\xc2\xb1\x6b\x5c\x57\x96\xf7\x93\x7b\x4f\xab\xc2\xae\xcd\xef\x6e\x3d\x09\xb4\x60\xe1\xba\xdb\x81\x48\x2c\x7b\xbb\x38\x7f\xe3\xb9\x5c\x26\xe3\xb6\x13\xe9\xbb\x88\xc0\x97\xa1\xd1\x37\x1f\xfc\x90\x19\x39\xd0\xd5\xf8\x46\x7d\x3b\xe9\x9c\x05\x19\x1f\x04\xa2\xe0\xda\xdb\x81\x48\x2c\x7f\x3b\x69\x27\x96\x8a\xb8\x35\xa6\xe8\x3a\xfb\x82\x81\xb5\x73\xea\x5f\x85\xf8\x72\xdf\xbe\xbd\xb8\x94\xc0\x20\xfb\xfb\xa5\xde\x6c\x05\x7a\x7a\x04\xd7\xdf\x0e\x44\x62\x19\xdc\x91\x34\x3e\x78\xa7\x3f\x1e\x42\xf3\x95\xce\x52\xa5\xf9\xa5\xf3\x0f\xad\x55\xf6\x4f\x74\x45\x8f\xf7\x44\xb2\xbe\xdc\xe9\xb4\xf4\xe7\x82\x40\x14\x5c\x83\x3b\x10\x89\xe5\x70\x77\xbb\xa4\x72\x42\xde\x1c\x50\x8c\xcb\xe6\x0b\x8b\x14\xe7\x5d\x1d\x65\xb2\x95\xe4\xbb\x28\x66\x5d\xf8\xec\x73\xe8\x98\xb1\x03\x9a\x01\xd7\xe1\x0e\x44\x62\x59\xdc\x85\xeb\x77\x0f\x42\x41\x79\x1e\x15\xc6\x03\xb6\x74\x7a\x17\xad\xfc\x8a\xcc\xcf\x41\x69\x64\xa5\xf8\xc8\x94\x98\xe1\xd0\x71\xf4\x6c\x04\xae\xc5\x1d\x88\xc4\xf2\xb8\xbb\xc6\xb8\xed\x97\x18\x6c\x74\xe6\xf1\x8a\xe4\xc7\xcb\x7a\x31\x22\xb7\x43\x07\xb9\xaf\x5d\xc6\xff\x79\xaa\xa7\x2f\x57\x5f\x3a\x07\xbd\x7c\x80\xe9\x71\xf7\x8f\x98\x8e\xdb\x21\xfc\x47\x4c\x58\x26\x77\x9d\xac\x9a\xa4\xb9\xc1\x63\x5e\x04\x67\x2e\xdb\x92\x10\xad\x2d\xab\x16\x55\xfb\x9a\x1d\x04\x35\x4e\xa6\x31\xe3\x33\xd6\xef\x5d\x85\x40\x14\x5c\x93\x3b\x10\x89\xe5\x72\xb7\xb2\x6a\xad\xf2\x99\xd7\x35\x96\x79\xc5\xb0\xc4\xe7\x3d\x4d\xb2\xde\x3d\x63\xf5\x68\x97\x94\x80\x77\x0e\x1e\xfb\x67\xdf\x8f\xa2\xd7\x1a\x70\x5d\xee\x40\x24\x96\xcd\x9d\x80\xca\xfb\xc6\x2c\xda\xba\x92\xeb\x17\x24\x6c\xce\xba\x9f\xa2\xde\x39\x71\xb7\xac\xcf\xf0\x7b\x0c\x89\xd5\x27\x9c\xbb\xbb\x1c\xe8\x37\x13\x5c\x9b\x3b\x10\x89\xe5\x73\x27\x8c\x32\x2a\x1f\x16\x63\x0d\xfb\x49\xdc\x79\x4e\x4c\x40\x6d\xfe\xe4\xd3\x71\x25\xbd\xf1\x36\xdb\xfb\xe1\x63\xeb\x16\x83\x5f\xac\x20\x10\x05\xd7\xe7\x0e\x44\x62\x19\xdd\x95\xbe\x1d\xff\x51\x56\xcf\xfc\xb4\x1b\xd7\xf1\xb4\x47\xbb\xc1\x8b\xa6\xe4\x0f\x77\x5f\xea\x7a\xbd\xf0\x2b\x79\xe7\x24\xf4\xda\xd2\x0c\x02\x51\x70\x8d\xee\x40\x24\x96\xd3\x1d\xfe\x79\x16\x43\x1a\xb6\x10\x7f\x72\x47\x25\xc9\x85\x70\x4a\xca\x12\x31\xda\xbb\x57\x47\x6f\x8c\xbe\x55\xef\x86\x54\x6c\xa8\x4e\x43\x20\x0a\xae\xd3\x1d\x88\xc4\xb2\xba\x7b\xff\xe2\x41\x27\x99\x8a\xb4\x3e\x51\x32\xea\x43\x0f\xef\x57\x09\x2b\xb9\xb9\x3e\xba\x82\x45\x24\x33\x30\xff\x7c\xe7\x45\x13\xba\x5f\xc1\xb5\xba\x03\x91\xd8\x5e\x77\xcc\x27\xeb\xed\x23\x26\x25\x76\x0c\x83\xa9\x38\xf9\xf3\xb7\xf8\x03\x9f\xd7\xae\x19\x3d\xe0\xc1\x59\xac\xe8\xeb\xf2\xa6\xd0\x86\x40\x14\x4c\xaf\xbb\x7f\xc4\x74\xdc\x1e\xfa\x3f\x62\xc2\x32\xbb\x2b\xf2\x0a\x4a\x78\xff\xd2\xf9\x32\x22\xc4\x7f\xd4\xf9\x2d\xdd\x48\x35\x3d\xca\x9b\xf4\xeb\x37\xfe\x8b\x1f\x25\x47\x28\x79\x26\x4d\x20\x10\x05\xd7\xec\x0e\x44\x62\xb9\xdd\xf9\x6f\xa5\x04\xa5\x67\x37\xbf\x0a\x78\xf4\x95\x9b\x93\x35\x6d\x80\xb7\xd8\x7b\x8e\x3c\xc4\xca\xf3\x1e\x93\x3e\xd7\x78\xfa\x55\x05\x08\x44\xc1\x75\xbb\x03\x91\x58\x76\x77\x22\x34\x02\x26\x7b\x4d\x19\xde\xf5\x36\x2c\xd1\xd4\x91\x42\xa2\x5b\xb9\x3e\xc3\x81\x27\x9b\x3f\xe1\x09\x3f\x73\x7b\xfc\xca\x56\x14\x02\x51\x70\xed\xee\x40\x24\x96\xdf\x9d\x7d\x6e\xcb\x81\x76\xb2\xea\x15\xdf\xe6\x0f\xbe\x1d\x1e\x2a\x17\xf6\x9c\xc9\x14\xef\x7b\x84\x79\x6c\x10\x75\x03\x4a\x11\xcd\x9c\x10\x88\x82\xeb\x77\x07\x22\xb1\x0d\xef\x82\x71\xdf\x46\x05\xdd\xf3\x2b\x0c\xfb\x46\xdb\x44\xfd\x5e\xae\x8b\x61\x91\xbb\xcd\x47\xec\x94\xbb\x0d\xa9\x3f\x7e\xa8\x38\x0e\x04\xa2\xe0\x1a\xde\x81\x48\x2c\xc7\xbb\xce\xa7\xf1\x94\x03\x54\xb1\x86\x15\x4e\x32\x7c\x8f\x4a\xe3\x08\xdd\xd2\xba\x4a\xc5\x58\x5f\xb4\x11\x0f\x7a\x95\xaf\x3a\x74\xca\x43\x20\x0a\xae\xe3\x1d\x88\xc4\xb2\xbc\x23\xe0\x6e\x95\x5a\x1d\x61\xd0\x44\x1a\xcc\x5a\x08\x18\x35\x84\xec\x98\xb0\x02\xcc\xef\xe5\x7d\x2e\x4c\xa8\x70\x9d\xea\x4f\x17\x83\x40\x14\x5c\xcb\x3b\x10\x89\xe5\x79\x97\xa8\x5d\xac\x48\x19\x7c\x70\x72\x59\x76\x91\x9e\x44\xe4\x47\xf8\x3b\x21\xd7\x67\x3f\x10\x4e\xd3\xc6\x90\x90\xe7\x67\xf3\x3c\x01\x08\x44\xfd\xa5\xe7\x9d\x46\xc5\xc2\x61\xc2\xe1\x6d\x26\x0e\xf5\x89\x6c\x42\x68\x7a\x3b\xb6\x7e\x62\x43\x28\x7b\x4e\x4c\xcb\xc2\x64\xa6\xe1\xce\x46\x18\xd6\x61\xdf\xc9\x53\x91\x2f\xca\x28\x62\xaa\x82\x82\x6f\xee\x90\x58\xa0\xf8\x83\x83\xb2\x1b\xeb\xd2\xe4\x0a\x0b\x32\xcd\x8c\x22\xdf\xd4\x1d\xfd\xda\x2d\xa3\xbe\x95\x4a\x40\x06\xb1\xd6\xf3\xbb\xd8\x60\xdf\x16\x8f\x80\x4f\x91\xb6\xab\xe3\x79\x0c\x5e\xd7\xcd\xbe\xe9\xbc\xf1\x08\x9d\x23\xa1\x54\x90\x5d\x8e\xe7\xbb\xfa\xc2\xe8\xc3\x35\x9b\x15\xb5\x96\x27\x85\x97\xfa\x95\xda\xde\xdb\x3a\x68\x3e\x37\x7f\x5b\x71\x03\xf7\xf4\x91\xd0\x98\xeb\x7e\x86\x72\xff\x3f\xce\xee\x3b\x1e\xcb\xf7\xff\x1f\xbf\xf3\x34\xce\xcb\x08\x59\x75\x20\x7b\xcb\xde\x09\xc9\xce\x68\xd9\x99\x51\x56\x56\x24\xd2\x3a\x95\x90\x51\x46\x21\xd2\x30\x52\xc9\xce\xde\x9b\x88\xec\x88\x44\x51\xb2\x49\x46\xf2\xbb\x5d\x9f\xdf\xd7\xfb\xd6\xed\xfc\xc7\xed\x7c\xfd\xff\xfc\xc3\x75\x5e\xd7\xe3\x79\x3c\x8f\xe3\xb8\x39\xef\x29\xc9\xd0\xd5\xcc\xb4\xeb\x8a\x26\xc3\xfd\x4d\x53\xcc\xdd\xbe\xf1\x61\x6a\x22\x7b\xff\x3a\x19\x1c\xec\xd5\xfc\xa7\x94\x93\xc9\x63\xef\x69\x5f\x3d\x20\xc7\x3d\x7b\x51\x49\x5c\xeb\xb1\x69\x5d\x9c\x81\xc2\x59\xc4\x3d\xcb\xf2\x6c\x47\xbf\xa7\xdb\x8b\x7f\x4a\x8f\x9e\xe8\xa8\xd3\x13\x69\x9b\x61\x99\xde\xf7\xd9\x6f\xb8\xe8\xa5\xb3\x29\x59\x7a\xcb\x3d\x21\x25\xfa\x3f\xdd\xe8\x45\xdf\x71\xdb\x7f\x4a\x6d\x17\xe7\x16\x67\x3c\x42\xab\x67\x7e\x88\x4e\x78\x4e\xa4\x8d\x5a\xef\xf3\xcd\x8f\xe7\xea\x62\x4e\xc9\x69\xb1\x79\x5a\x82\x54\xfe\xfb\xce\x51\x8b\xa2\xd7\x33\x52\x12\x2e\x2c\x6f\x7e\x2a\xda\xbc\x48\xe6\x5c\x91\x9f\x17\xb1\x19\x6f\xe7\x1a\xfe\x14\x79\x4f\xea\x02\xd7\xea\xff\x2e\xfb\x76\x7b\xaa\x3b\x1d\x0d\x83\xde\x55\x48\x3f\xe1\x2f\x1a\xd7\xd3\x4a\x7b\x9d\x6a\x64\xc5\x10\x92\xf1\x83\x5b\xd5\x32\xd8\xe2\x86\x88\xa8\xf0\x8d\x42\x95\x62\x51\x59\x14\x20\x78\xd1\x3b\x00\x61\xd4\x3b\xf6\xd8\x42\x26\x49\x8e\xb4\xcc\x69\x4d\x87\x8b\x4d\xd4\x11\xb1\xea\xaa\xd7\x67\x74\x3b\x6c\xbd\x8e\xf8\x1f\x3d\x5d\x1b\xb5\xaa\x87\x02\x04\xaf\x7a\x07\x20\x0c\x7b\x77\xaf\xc8\xe2\x9e\x1d\x77\x7b\xc3\xd9\xd4\x74\x86\x72\x2f\xc1\x53\xf2\x84\x65\xd3\x9a\x25\x28\x2e\x24\xfd\xee\xaf\x83\x3e\x85\x5a\x28\x40\xf0\xb2\x77\x00\xc2\xb8\x77\x1c\x99\xf3\x79\xfe\x79\x04\x77\xea\x81\x2b\x8c\x9f\xb6\xe4\x46\xaa\xc4\xed\x68\xad\x79\x50\xc1\x49\x72\xa5\xaf\x43\xf7\x8d\x6c\x51\x80\xe0\x75\xef\x00\x84\x81\xef\xb4\xfb\xff\xcc\xf8\xfc\xbe\x39\xb2\x19\x2b\x77\x30\xa4\x53\x09\x42\x04\x5f\x4b\xf9\xf3\xb7\x6a\x7d\x7f\xff\xce\xa9\xc5\xb0\x8c\xb8\xe4\xe1\x85\xef\x00\x84\x91\xef\xae\x68\x59\x2c\x3a\x5d\xbd\x7f\xee\x85\xed\x90\x20\x45\xb7\xb6\xea\xd2\xc9\x73\xed\x8d\x97\x26\xe7\xa2\xf2\xd8\x6a\x44\x7c\x9d\x88\x1d\x0d\xaf\x7c\x07\x20\x0c\x7d\x97\x1f\x3d\xdb\x70\xff\xe8\xf8\x10\x64\x33\x6d\x5c\xf7\xd4\x79\x90\xb7\x7b\x48\xe0\x91\x4a\x9d\xe9\x57\xce\x2d\x52\xba\x24\x03\x6b\x14\x20\x78\xe9\x3b\x00\x61\xec\xbb\xde\x94\xcf\x5d\xea\x9f\xbf\x89\x9d\x0a\xe9\xe4\xa2\x19\x73\x31\xdc\x88\x98\x56\xcf\xa5\x0e\xdf\x0e\xf8\x59\x9c\xb8\x1a\x2b\x7e\x02\x05\x08\x4e\xfb\x6e\x27\x4c\xbb\xf5\x9d\x9d\x30\x61\xf0\x3b\xc7\x12\xfd\x78\x91\xf5\x6f\xd7\xd7\x2f\x45\x96\x9c\x91\x39\xa1\xf1\xe9\xc1\xe1\xec\x77\x7f\xe7\xb8\x8f\x70\x3c\x10\xa6\x71\xbb\xe6\x88\x02\x04\x2f\x7e\x07\x20\x8c\x7e\x67\x5c\xb0\x65\xb6\x90\x67\x93\x67\xb6\xf0\x78\xbf\x96\xc8\xb7\xce\xe6\xa2\xed\xbe\x57\xef\xea\x29\xd2\x2b\xe7\xab\xa9\xcf\x29\x12\xc3\x84\x57\xbf\x03\x10\x86\xbf\x63\x75\xa3\x48\x70\xbf\x4d\x72\x76\xdf\xdd\x3f\x25\x7c\xda\x39\x6f\x6a\x99\x0b\x0e\x6f\x97\x3d\xa4\xd3\x8e\x74\x75\x1a\xba\xae\xe1\x86\x02\x04\x2f\x7f\x07\x20\x8c\x7f\x77\x63\x5c\x7a\x3e\x32\x37\xe2\xac\xf4\xfb\x78\xee\xbf\xbe\x29\xba\x9c\x17\x7c\x03\xa8\xb7\xd8\x84\x45\x0a\x22\xca\xbc\x94\x0e\xca\xa1\x00\xc1\xeb\xdf\x01\x08\x03\xe0\x9d\x83\xed\xb3\xf7\xb8\x36\x1b\xbf\x94\x05\x95\x23\x7a\xfc\x3a\x37\x7a\x9f\x3e\xb7\x35\x13\x8a\x4e\xd8\xae\xe1\xd3\x3d\x9c\x02\xa1\x00\xc1\x0b\xe0\x01\x08\x23\xe0\x15\xf9\x32\x70\x64\x3c\x4d\xe7\x13\xf2\xfa\x34\xd3\xe8\x5a\x57\xf7\xe5\xd7\xb8\x64\x85\xf1\xd8\xb9\x0b\xe7\xe6\x53\xe5\x51\x5b\x43\x14\x20\x78\x05\x3c\x00\x61\x08\xbc\xee\xc8\x23\x5b\x86\xd6\xdf\x63\x99\xbd\xe6\x2a\xa4\x06\xba\x04\x03\xd2\xee\xa6\x35\x4f\x66\xcf\x90\xe9\x3d\x9e\xda\xb4\xfd\x46\x1c\xd7\xf0\x12\x78\x00\xc2\x18\x78\x8b\x57\xe4\x16\x3e\x99\x8a\xc5\xb3\xcc\xd3\xe5\x75\xf0\x5c\x1c\xf2\xe5\xb7\xca\x49\x3e\x30\xca\x73\xc9\xe4\x62\x99\xfe\x8f\xab\x27\x51\x80\xe0\x34\xf0\x76\xc2\xb4\xdb\xca\xbc\x13\x26\x0c\x82\x77\xfd\xe9\xac\x9e\x30\x53\x61\xea\x6d\x1e\x4a\xcb\x33\xa7\xa4\x6e\x09\x89\x97\xbc\xd7\xe7\x72\xa4\x8d\x8a\x11\xd6\x66\xb4\xee\xd2\x45\x01\x82\x17\xc1\x03\x10\x46\xc1\x3b\x79\x2c\x64\xd5\xee\x1e\xac\xf1\xc7\x3e\x52\x25\xe6\xd2\x70\x70\x57\x3f\x08\x53\x61\x68\xce\x5b\x57\x73\xaf\x96\x4e\x44\x88\x9b\x4a\xbc\x0a\x1e\x80\x30\x0c\xde\x11\xa6\x80\xf3\xca\xd9\xfe\x27\xcb\xbb\xe4\xc7\x69\x2d\x68\xaa\x0e\x99\x69\xcc\xce\xdf\xad\xbf\x32\x5b\xd8\xc7\xe5\xb0\x37\x52\x0d\x05\x08\x5e\x06\x0f\x40\x18\x07\x6f\x9d\xe5\xad\x43\x90\x21\xd9\xa7\x97\xdd\x5e\xfb\x26\x45\x75\x9d\x7c\x6e\x30\xbc\xbf\x51\xe9\xb1\xb9\x5a\xca\xeb\x1f\xcc\xf5\xe8\x30\x0a\x10\xbc\x0e\x1e\x80\x30\x10\xde\xe5\x70\x61\xae\x33\xca\xec\x4d\xd5\xba\x15\xf3\x9b\x0e\x4e\x07\x39\x3f\x87\x6d\xd1\x70\xa7\xa5\x5a\x28\xa9\xe9\xce\xa1\x95\xc4\xcf\x81\x17\xc2\x03\x10\x46\xc2\xb3\xe5\xf1\x6f\x69\xa6\x96\x3d\x22\xb8\x28\x9a\xf2\xea\xc1\xf5\x83\xd6\xfb\xca\x5b\x65\x69\xe8\xb6\xa3\x44\xfb\xa8\x39\xe6\xdb\xdd\x51\x80\xe0\x95\xf0\x00\x84\xa1\xf0\xe2\xf9\x35\x45\xa5\x5a\xfc\xc2\xb4\x7e\x91\xa4\xc9\x1c\x20\x8c\x76\xe7\xef\x17\xb1\xaa\x54\xf8\x75\xdb\xff\xf7\x2f\x76\xd6\x28\x62\x03\xc5\x4b\xe1\x01\x08\x63\xe1\x89\xdb\x6a\x5b\x85\x2f\x4f\x48\x84\x5e\x9e\xac\xee\x1e\x3b\xc3\x2c\x9a\x43\x1b\x48\x63\x68\x63\x6d\xbc\x1d\xcc\x16\x34\xf8\x80\x38\x29\xe0\xb4\xf0\x76\xc2\xb4\xdb\xec\xba\x13\x26\x0c\x86\xc7\xd4\x23\xe5\xed\xb9\x27\x5b\xcd\x5d\x7c\x33\x8e\x2a\x00\x1c\xed\x0f\x19\x74\x9e\x39\xfc\x7e\x5c\xd0\xf3\xcf\x26\x43\x97\x84\x0e\x0a\x10\xbc\x18\x1e\x80\x30\x1a\xde\x13\x4a\xd2\xda\x39\xa1\x30\x37\xa9\x19\x69\xce\xbd\xa9\x7d\x7b\x2a\xd5\xfb\x8b\x1e\x8f\x4a\xbf\xac\x3f\x51\xca\x9f\xdd\xfd\x76\x1f\x0a\x10\xbc\x1a\x1e\x80\x30\x1c\xde\x63\x43\x7a\x0a\x53\x8a\x11\x0e\x55\x55\x10\x74\x25\x3b\xfa\x73\xef\x9e\x51\x71\x3e\xdf\xe2\xaf\x9a\xcf\xcd\x2d\x7f\x7b\xfc\xdf\x29\x10\x5e\x0e\x0f\x40\x18\x0f\xef\x48\xf8\xfc\xcf\xce\x39\x73\xde\xd1\xa0\xfc\x6b\x51\x37\xcc\x73\xc6\xbe\xf1\x5d\x7b\x28\xdf\xf6\xa5\x41\xb6\xd2\xec\xca\xf9\x33\xf6\x28\x40\xf0\x7a\x78\x00\xc2\x80\x78\x9a\xcc\xd6\x6d\x74\xd9\xa4\x55\xcb\x2e\x5a\x4e\xba\x8e\x4e\x21\x6a\x15\xec\x82\x5b\x35\xcd\xe8\x5e\x9f\x83\xdb\x52\xaa\xc7\xcd\x51\x80\xe0\x05\xf1\x00\x84\x11\xf1\xfe\xfc\x2e\xe0\x8c\x70\x60\x97\x88\xb4\xba\xda\x95\x7e\x34\x33\xc6\x73\x71\xa4\xcb\xb0\x5c\x34\x9c\x2d\x46\xd9\xef\x7a\xe4\x22\x71\xd5\xc0\x2b\xe2\x01\x08\x43\xe2\xf5\xa8\xfc\xb2\x54\xeb\x12\x10\xa7\xaa\x21\xaf\x5d\x7e\xe4\xe8\x5a\x15\x41\x9f\xdc\xd2\xbf\x11\x47\xbf\x5f\xe3\xa2\xf2\xd7\xe3\x5c\x28\x40\xf0\x92\x78\x00\xc2\x98\x78\xba\x46\x9b\xf9\x9b\xa1\x75\xc5\x32\xd1\xfe\x3f\xd6\xa4\x0e\x3c\x75\x20\xa5\x6b\x6e\xf6\x95\x55\x71\x74\x30\x70\xb3\xb0\x85\xa4\x51\x80\xe0\x34\xf1\x76\xc2\xb4\xdb\xee\x6e\x27\x4c\x18\x14\xaf\x68\x8b\x71\xed\x4a\x4f\x23\xfd\x73\x92\xc7\xa3\x69\x25\xfa\x3c\xc5\x9c\x82\xb3\xb6\x81\x16\x56\xa5\xf6\x47\xae\x14\x75\x6a\xb8\xa0\x00\xc1\x8b\xe2\x01\x08\xa3\xe2\xad\x21\x41\xfe\xf2\x24\xf3\x0d\x6a\x5d\x2e\x3c\xcc\x07\x0d\xf6\xfa\x20\x66\x5e\x01\x94\xb9\x76\x1e\x6b\xdf\x87\x3e\x15\xfb\x9e\x46\x01\x82\x57\xc5\x03\x10\x86\xc5\x9b\x2f\x8d\xee\x63\x70\xe7\xd6\xaf\x88\x62\xf9\x58\x66\x64\x6d\x79\x3d\xed\x61\xda\xd6\x0f\xaf\x6e\x99\xba\xa1\xa1\x83\x7a\x7a\x9e\x28\x40\xf0\xb2\x78\x00\xc2\xb8\x78\x14\xdd\x88\xd7\x27\xdd\x8a\x63\xb5\x2b\x07\x24\xcf\x5e\x4a\x3d\x57\xc3\xff\x44\xdd\xae\xaa\xab\x6e\x60\xd9\x8d\xec\x5a\xe5\x18\x71\xd5\xc0\xeb\xe2\x01\x08\x03\xe3\x15\x9f\xd4\x72\x8f\x30\xde\xd3\xe6\x52\x4e\x9d\xf1\x5b\xda\x44\x54\xce\x2f\xf0\x25\xef\xf9\x74\xc7\xd9\x4e\x7e\xf2\xb4\x13\x14\x62\x28\x40\xf0\xc2\x78\x00\xc2\xc8\x78\x0f\x08\x3e\x56\x0f\xb7\xce\x8b\xab\xd8\x9e\xbe\xa8\x63\x74\x64\xab\xc4\xe6\xd1\x1c\xf4\x90\x4c\xb0\xa4\x36\x31\xd7\x2d\xbf\x5b\x1d\x05\x08\x5e\x19\x0f\x40\x18\x1a\x8f\x47\xcf\xdb\xce\x9a\x37\x62\xfb\x4a\xde\x3e\x4b\x51\xd6\xd1\xa8\x35\x9d\xd0\xf0\xab\xe4\x3a\x32\x19\x0c\x3d\xec\x85\xfd\x8b\x4c\x28\x40\xf0\xd2\x78\x00\xc2\xd8\x78\x5f\xb7\x69\x73\x5d\xec\x38\x96\xaf\xfa\x48\x52\x69\xc1\xab\x4d\x67\xbe\x31\xa0\xb5\xd3\xc9\x65\x3f\x49\x64\x2e\xca\xaf\x69\x9b\xa1\x00\xc1\x69\xe3\xed\x84\x69\xb7\xf3\x8f\x9d\x30\x61\x70\x3c\x99\xb4\x66\xd0\xb9\x5d\x7d\x6c\xd0\xcd\x83\x43\x9d\x7e\x2b\xc4\x0e\xe2\x92\x57\xa2\x3d\x3d\x09\xdf\x99\x0b\x98\xa5\x83\x2f\xa0\x00\xc1\x8b\xe3\x01\x08\xa3\xe3\x1d\x74\xab\xda\x97\x9e\x0d\x2d\xce\x6d\x14\xe6\x53\x99\x7c\x7c\xfa\x79\xfa\x70\xca\x17\x9e\xb0\x26\x7f\x3d\x71\xae\xcf\x02\x72\x14\x28\x40\xf0\xea\x78\x00\xc2\xf0\x78\x9c\xc5\xfd\x6b\xa2\xdd\x2d\x77\x1c\x5d\xde\xae\xa9\xbc\x98\x7e\xf9\x25\x23\xea\xe6\x1a\x6c\x9c\x33\xa7\xc6\x38\xd3\x73\xea\x15\x71\xc9\xc7\xcb\xe3\x01\x08\xe3\xe3\x15\x0f\x3c\xa1\x3f\x62\xae\xd8\x69\xa6\xaa\x70\xca\x48\x78\x8b\x9f\x5b\x98\xad\xc8\xd2\xe4\x28\xb7\xdf\x50\x7f\x34\x79\x58\xaa\x01\x0a\x10\xbc\x3e\x1e\x80\x30\x40\x9e\xaa\xb0\x32\x8d\x7b\xe1\xa7\x5e\x39\xa5\x29\x88\x8e\x84\x9b\xac\x21\x65\x3f\x60\x3b\x72\x4a\x34\xa3\xd7\x45\xe5\x6e\xed\x0a\xb1\xdb\xe2\x05\xf2\x00\x84\x11\xf2\xde\xbf\x9d\xb3\x95\xd4\x3f\x93\x91\xc3\x7f\x7c\x26\xfa\xa8\xf6\xcf\x5a\xda\xbf\x52\xfb\x9b\x94\xfa\x03\xe0\x24\x2d\xce\xa0\x23\xfb\x51\x80\xe0\x15\xf2\x00\x84\x21\xf2\xde\xb2\x9b\x26\x7e\x70\x7e\x92\x77\xa5\x90\x9f\x55\x6c\x52\xff\x78\xd5\x13\xbe\x27\x33\xf2\x1e\x70\x55\xf0\x8a\x5b\x97\x4c\x32\xb1\x49\xe3\x25\xf2\x00\x84\x31\xf2\x32\x3d\x1a\x9e\x65\xa8\x79\x99\x30\x3b\x05\xd3\x2a\xba\x35\x7e\x27\xcd\xca\xb0\x2c\x3a\x78\xf7\xa9\x18\x53\xaa\xd0\x0d\x23\x73\x56\x14\x20\x38\x8d\xbc\x9d\x30\xed\x76\x42\xb8\x13\x26\x0c\x92\xf7\x81\xc5\xfa\xd8\x98\x7f\x85\x9a\xcb\x7d\xe7\x20\xc5\xc3\x1a\x75\xee\x36\x2b\xbf\x10\xda\xb9\xe3\xbd\x96\x93\xc5\xc2\xd6\xda\xc4\x8e\x8e\x17\xc9\x03\x10\x46\xc9\xe3\x79\xe0\xe1\xc5\x6f\xf0\xc9\x3d\x8c\x25\x4e\x94\xc5\x37\xa3\xb6\xd5\x9e\x0c\x6a\x53\x5c\x9b\xb5\xd0\x52\x17\x17\xa1\x4e\x21\x76\x29\xbc\x4a\x1e\x80\x30\x4c\x9e\xb7\x74\x4e\xec\x93\xc8\xcf\x49\xa2\xf6\xf7\xb7\xed\x0d\x7a\x59\x3a\xd0\x66\xbe\x8a\xa3\x9d\x41\xc7\x3d\x5f\x81\xd4\x4b\xf3\xf4\x28\x40\xf0\x32\x79\x00\xc2\x38\x79\xcb\xc9\xc7\xd5\xde\x70\x08\xb9\x02\xed\x8c\x57\xd6\x3f\x35\x6c\xd8\x2f\x07\x84\xbe\x69\x8f\x48\x60\x48\x4c\xce\x19\xdb\x3a\x48\x82\x02\x04\xaf\x93\x07\x20\x0c\x94\x17\x1e\x25\x7a\x89\x37\x63\x9d\x34\x64\x9d\xd3\xdb\x54\x6b\xe3\x64\xbc\xf6\xa9\x44\x12\x56\x5f\x9d\x93\xb0\xe4\xb2\x95\xe0\x47\xe2\xa6\x1a\x2f\x94\x07\x20\x8c\x94\x37\xd8\x4b\x92\x73\x40\x3d\xe4\x82\x78\x45\x5c\x50\xd6\xc6\xca\x80\x57\xa9\xe3\x68\xa8\xa6\x21\xd7\x5a\x41\x7e\xb5\xaf\x4b\x35\x01\x05\x08\x5e\x29\x0f\x40\x18\x2a\xcf\x97\x46\xea\x8b\xec\xb0\xdd\xb2\xa0\xf5\x5a\xc7\xb5\x7a\x81\xbf\x6d\xbf\xa2\x0a\x6f\xd1\x87\xb5\x34\xb0\xa6\x4b\x1a\x45\x65\x1c\x43\x01\x82\x97\xca\x03\x10\xc6\xca\x9b\x80\xc8\xda\x45\x5e\xfd\x75\xfa\x15\x61\xab\xfb\xf0\x3d\x13\xc3\x03\xf7\x9f\x0f\x0c\x82\x91\x8b\xaa\x97\x8c\xab\x45\x43\x1e\x1f\x44\x01\x82\xd3\xca\xdb\x09\xd3\x6e\x67\xe8\x3b\x61\xc2\x60\x79\xd2\x34\xfb\x87\x4b\xe6\xc3\xca\x07\x1f\xaa\x48\xf5\x8f\x9a\x72\xf1\x92\x55\x3d\xa4\xda\x73\x49\x47\x63\xdf\xf7\x96\xdb\x1f\x09\xc4\x0f\x8d\x17\xcb\x03\x10\x46\xcb\x4b\xeb\x10\xac\xb9\x2f\xf4\x8e\x9e\x2b\x52\xb6\x70\x0a\x4a\x0c\xb4\x7c\x7e\x88\xb2\xba\xe9\xc6\x1b\xb7\x8f\x82\x5f\xe4\xb4\x68\x84\x50\x80\xe0\xd5\xf2\x00\x84\xe1\xf2\x78\x74\x95\xd0\x4b\xae\xab\x2d\x6d\xdc\xd2\xa3\xa5\xcb\x15\xd3\x52\x72\xa1\x51\x97\xa9\x65\x56\x86\x19\xf6\x54\xe5\x87\x07\xf1\xa3\x00\xc1\xcb\xe5\x01\x08\xe3\xe5\x19\xe8\xbd\xae\xba\xdf\x97\x69\x26\xba\x71\xe4\x05\xd4\xcb\x7f\x9c\xc2\xa1\xe6\xd9\x91\xe9\xa3\x7d\x90\xca\xda\x71\xae\x85\x7c\xe2\xaa\x81\xd7\xcb\x03\x10\x06\xcc\xa3\x6e\xea\xd3\xa4\x22\xb9\x91\x52\xfa\x37\xfb\xe9\x9d\x67\xd1\xad\xd7\xdb\xe6\x48\x5c\xa2\xf4\x72\x18\x8c\xce\x1d\x9c\xef\x77\x23\x8e\x79\x78\xc1\x3c\x00\x61\xc4\x3c\xf2\xb4\x1f\xcf\x8a\x72\xb8\x5c\x12\x79\x03\xbe\xc9\x57\xfa\xe9\xae\x53\x2e\x5c\xfa\xb0\x6c\x96\x26\x77\x7d\x96\xbc\xab\xd1\x50\x0e\x05\x08\x5e\x31\x0f\x40\x18\x32\x4f\x42\x5c\xa6\x31\xdb\x66\x54\xfa\x74\x93\x86\x79\xdf\xed\x8e\xa1\xa7\x4a\x4f\xf4\xee\xbe\x6e\x38\xec\xf1\x25\xf2\x6e\x25\x92\x22\x85\x02\x04\x2f\x99\x07\x20\x8c\x99\x57\x4b\xc7\x92\xd0\x76\x06\x79\x3f\x49\xb7\x71\x61\x44\xa8\xbe\x97\x8d\xf7\xa3\x91\x5e\xfd\xaf\x5b\xc2\xce\xf4\x81\xed\x5d\xb0\x20\x0a\x90\xff\x68\xe6\x6d\x1b\x56\xd3\x77\x5d\x64\x1e\xd9\x3a\xf4\x44\xdf\x23\xbc\x39\xdf\x64\xfc\xf9\xdd\xd1\x3f\xb2\x0c\x77\xfd\x53\x19\x53\x42\x56\xa5\x30\x97\x7d\xe2\x74\xee\xe4\x65\x08\xf5\x90\x7d\x50\x86\xa5\x78\x10\x2b\x5f\xe8\x2b\xb3\x8e\x47\x7e\x25\x15\xbf\x7f\x36\x75\x4e\xd9\x58\x16\xfd\x53\x9a\xe8\xde\x32\x3d\x78\xe1\xf2\x23\x5e\x79\xcd\x19\x7d\x97\x24\x95\x2f\x86\xe4\x33\x65\xf0\xb9\xba\x99\xf7\xdf\xa6\x7a\xe0\xd6\xa3\xff\x94\x26\xbd\xd1\x48\x19\xff\x7b\x33\x4e\x7c\xfd\xf8\x7d\xb7\xef\x87\xcf\x0a\x14\x99\x9c\x6c\x34\xaa\x62\xbe\xc6\x37\xab\x5a\x75\x58\x81\xe5\x5f\x08\xaf\xef\x4f\x01\x61\xe3\xdc\x84\xe2\x42\x7d\x0f\x8b\x79\x13\xcb\x80\xb5\xab\x64\x11\xf9\xa0\x84\xfb\x61\xeb\xae\xaf\x33\xf4\xae\xff\x94\x7e\xf5\x6a\xe9\x32\xe9\xd6\x7f\x7e\xe7\xc9\xa1\xaa\x74\x93\x50\x92\xb0\xc1\xce\x97\x54\xfc\xcf\x6c\xe6\x75\xee\x44\xbd\xbf\x3b\x18\xf1\x4f\x69\x9b\x90\xde\xab\xae\xe9\x97\x9f\x6e\xca\x72\x8e\x9c\x3a\xf6\xad\xfa\x09\x09\x53\x8e\xe3\xb7\x49\xe7\xbf\xec\x03\x8c\xe6\x7d\xaf\x4e\xfd\xfb\x22\xd2\x96\x54\x73\x91\x6d\x29\x3d\x6f\xa1\xc5\xcf\x19\xcc\x75\x67\x96\x86\xe6\x2b\xae\x28\x4c\x9f\x15\x9d\xf2\x16\x1b\x0f\xff\xf3\xef\x7f\x21\xc6\xfe\x8c\x5d\xf0\xd3\xbb\x2e\xc5\xdf\x59\xa8\xe9\xf0\x81\x62\x4e\xf4\x40\xdc\x81\x83\xfd\x2e\xc5\xfd\x69\x73\x25\x84\xbd\x14\xb4\xff\xbb\xec\xdb\xed\xa9\xee\x74\x34\x0c\x9a\x37\xc4\xe9\xff\x3e\xcc\xbb\x6a\x44\x4b\xe1\xea\xf7\x37\x8d\x8a\xd7\xd4\x3f\xf9\x0f\x13\x6a\x0e\x10\xba\x16\x1d\x8e\xd0\xab\x93\x71\xa3\x00\xc1\x8b\xe6\x01\x08\xa3\xe6\xad\x7f\x7d\x72\xed\xc3\xe4\xaa\x73\xf1\xca\xe9\xbd\xde\x8b\x7d\xa3\xf0\xa7\xc3\x96\x06\x03\x26\xa3\xbd\x6e\xfd\xf4\x5e\xa4\xb1\x86\x28\x40\xf0\xaa\x79\x00\xc2\xb0\x79\x1a\x62\x96\x4a\xc7\xe7\x93\x0e\xf2\x56\x5d\xf4\x90\xd6\x88\x4b\xec\x51\xd1\x27\x75\x3d\x6b\xf5\xd5\xf2\xb0\xfb\xda\xc5\xf3\x0b\xc4\x31\x07\x2f\x9b\x07\x20\x8c\x9b\xc7\xdd\x77\xc7\x68\x2a\x83\x8e\xe5\x9e\x98\x99\x03\x4b\xdb\xd1\x31\x53\xb5\x62\xce\xe2\x43\x3f\x4c\xe6\x0d\x10\x2d\x95\xaf\x17\x9d\x50\x80\xe0\x75\xf3\x00\x84\x81\xf3\xa0\xce\x9b\xc2\x4a\x95\xef\x4e\xd3\xfc\xd6\xfd\xfb\xf0\xed\xb1\x1b\x0c\x10\x9c\x29\xf6\x17\x0a\x3e\xf3\xc9\xcd\xb8\x70\x2d\xd7\x1d\x05\x08\x5e\x38\x0f\x40\x18\x39\xef\xe3\xeb\x51\xe1\x00\x49\x1a\xea\xc6\xf7\x9d\xf7\x09\x3f\x6c\xc4\xa6\xe3\x2e\x44\x93\x7f\xb1\x5a\xf8\xca\xb9\x27\x9b\xc7\x38\x46\x04\x05\x08\x5e\x39\x0f\x40\x18\x3a\x4f\xc1\xef\xb0\xce\xb1\x08\xc1\x47\xcb\x8a\xdf\xfd\x24\x26\x95\x79\x2d\xd8\xc9\xa5\x0f\x54\xf1\x5c\xb3\x3b\xa1\x9a\x2f\xc4\xc2\x74\x02\x05\x08\x5e\x3a\x0f\x40\x18\x3b\xef\xa8\x6c\x24\xb5\xfe\xca\xa1\xd5\xfd\x4d\x9c\x7c\xd6\x4f\x28\x6f\x58\x32\xea\xca\xfe\xbc\x15\x79\xab\xe9\xb1\xc3\xc4\xab\xb3\x5e\xb2\x28\x40\x70\xda\x79\x3b\x61\xda\xad\xef\xec\x84\x09\x83\xe7\xc9\xfc\x6d\x14\xff\x99\x7f\xea\xde\xfe\x6b\x52\x3c\xaf\xac\xb2\x4e\x9c\x52\x70\x60\x65\xa0\xaa\xbb\x23\x57\xcd\xc9\x62\xf7\xb1\x91\x12\x05\x08\x5e\x3c\x0f\x40\x18\x3d\x8f\xcf\xeb\x41\x5f\xad\x30\x99\x9f\xb0\x58\x00\xba\x3f\x72\x62\xac\x5a\xab\x83\xaf\x97\xb1\xa9\x89\xe2\x76\x55\x80\xaa\xab\xbf\x07\x0a\x10\xbc\x7a\x1e\x80\x30\x7c\xde\xe0\x66\xb9\x80\xd0\x39\xa9\x27\xf6\x91\x22\x52\x32\x1f\xb2\x2b\x9f\x3c\x36\x8a\xe0\xec\xf5\x72\x6e\x7d\x7f\xbd\xff\x55\x6a\x1f\x0b\x0a\x10\xbc\x7c\x1e\x80\x30\x7e\x1e\xe3\xa3\x41\x82\x00\xef\x32\x7f\xb4\x42\x8f\x99\xef\x68\x78\x04\x57\x95\x63\xf4\xf7\xde\x41\xf2\x86\xa6\xe1\xb8\x80\x07\x7a\x7c\x28\x40\xf0\xfa\x79\x00\xc2\x00\x7a\xd6\x7e\xc2\x9b\x63\x96\xc7\x7f\x0b\x51\xec\x67\x57\x7a\xfb\xa6\x4c\x92\xb6\xa1\x51\xec\x25\xe5\xc1\x13\xed\xc2\x5e\xaf\x12\x4f\x13\xc7\x03\xbc\x80\x1e\x80\x30\x82\xde\x25\x3a\x81\xe8\xe3\xfd\x6e\x3d\x85\x71\xca\xdf\xac\x37\x1b\x05\x7f\x77\x9c\xf0\xf2\xaf\x6c\xf5\x23\x1d\x60\xe6\x7e\x3e\x21\x48\x0c\x2c\x5e\x41\x0f\x40\x18\x42\x6f\x98\xea\xbb\x91\x9b\x72\xa2\x85\xdf\x8d\x33\x12\xcd\x17\x3f\xb1\x55\x8a\x1b\xae\xa7\x58\x5f\x95\x10\x4b\x78\xf2\x3a\xbe\xa2\xc1\x02\x05\x08\x5e\x42\x0f\x40\x18\x43\x2f\x33\xaf\x47\x4c\xff\xbc\x00\x65\xe6\xd4\x99\x63\x05\xd2\x4f\xed\x6f\xdc\xa3\xe6\x7d\xd0\x1e\x99\x14\xa6\x59\x25\x35\x50\x7c\x42\x1b\x05\x08\x4e\x43\x6f\x27\x4c\xbb\xad\xcc\x3b\x61\xc2\x20\x7a\xa5\x8f\xe0\x18\x09\xf3\x7b\x96\x15\x9f\xf8\x91\xdf\x87\xd1\xf1\x45\x7d\xc1\xab\xef\x14\x07\xce\x67\x9f\x99\x5a\x27\x0f\x1f\x14\x46\x01\x82\x17\xd1\x03\x10\x46\xd1\x73\xe9\x6f\x5e\x9e\xf9\x38\xcc\x51\xb8\xf5\xd3\x57\x8f\xbb\xb9\x2f\x45\x7d\x3e\xc0\xe8\x9a\x93\xbd\xfa\xf9\xaa\x3c\x3f\x0d\xa6\x53\x28\x40\xf0\x2a\x7a\x00\xc2\x30\x7a\x31\xd4\x29\x04\xb5\x9b\x14\x7d\x6f\x2a\x86\xe2\x5d\xa8\x57\xd5\x13\x2c\x48\xbd\xca\xb2\x7d\x7d\xa3\xf4\x56\xca\x0f\x55\x51\xc3\x28\x40\xf0\x32\x7a\x00\xc2\x38\x7a\x27\x84\x1b\x9d\x4d\xc3\xa7\x33\xaf\xbf\xad\x3d\xc2\x68\x18\x60\x39\x7a\xd7\xa4\x8f\xf3\xf1\x0d\x7a\x93\xbf\x9c\xb5\xc8\x13\x99\x03\x28\x40\xf0\x3a\x7a\x00\xc2\x40\x7a\x6c\x22\x54\x7e\xe2\xfc\xe6\x42\xf3\xb9\x85\x69\x5f\xdc\x57\x8d\x3e\x3a\x2a\xda\x8b\xf3\x1b\x57\xd0\x14\xdc\xce\x65\x31\xe2\xe3\x42\x01\x82\x17\xd2\x03\x10\x46\xd2\x2b\xfd\xc9\x28\x69\x75\xe2\x49\x39\x89\x6a\xf0\x25\x9f\x00\x76\xb5\x9c\x69\xbf\x16\x6b\xb2\xa2\xfb\x5a\x9f\x74\xe9\xde\x7a\xd4\xb3\xa3\x00\xc1\x2b\xe9\x01\x08\x43\xe9\x89\x9c\x7d\xf1\xc1\x9f\x93\x23\x38\x8a\xaa\xec\xb9\xd1\x98\x13\x9d\x31\x5f\x89\xd3\x0c\x92\x81\xc6\x44\x3d\xb5\x51\xd7\x6d\xdc\x8f\x02\x04\x2f\xa5\x07\x20\x8c\xa5\x67\x2a\xb7\x46\xd7\x3f\xad\xa9\xc7\x23\xf9\x5b\x7c\x6c\xa1\x23\xda\xdc\x84\x4a\x91\x56\x2c\xce\xf2\x67\xdb\xdf\x0e\x1a\xa9\x3c\x62\x93\xc6\x69\xe9\xed\x84\x69\xb7\xd9\x75\x27\x4c\x18\x4c\x2f\xf8\xf5\x46\xd3\x8d\x3e\x9d\x7d\x4a\x14\xf6\x6f\x92\xdf\x51\x6e\x88\x74\x59\x3b\x4f\xd3\xb0\x25\xc6\x46\x29\xfe\xea\x71\x5c\x33\x41\x01\x82\x17\xd3\x03\x10\x46\xd3\xfb\xf0\xa3\x7d\x56\xba\x7c\xdd\xa7\x95\xee\x9e\x7c\x63\x69\x8f\x60\x4d\x1a\x9b\xa5\xb7\x5f\x62\xa9\xa1\x43\xfc\xf2\x4a\x58\x8d\x0e\x0a\x10\xbc\x9a\x1e\x80\x30\x9c\x9e\x7d\x11\xbb\x96\x90\xdc\x09\xa5\xd4\x8b\x22\x9a\x49\xef\xe7\xa4\xa6\x3a\x0c\x1c\x4c\x6c\x26\x0e\x2c\xf5\xb2\x3f\xca\x76\x1b\x01\x28\x40\xf0\x72\x7a\x00\xc2\x78\x7a\x75\x77\x87\x9e\x74\xb1\x81\x67\x7c\xdd\x37\x19\x92\x1a\x0b\x37\x39\xc9\xe8\x4b\x83\xa9\x0e\xdd\x71\x0e\x2d\x5a\xf2\xbd\xbb\xc5\x8b\x02\x04\xaf\xa7\x07\x20\x0c\xa8\x67\x94\xa9\xd5\x40\xc9\x63\x75\x19\xcc\x05\x1b\xe9\x49\x57\x12\x54\xd9\xf7\xc6\xdf\xbd\x42\x53\xb8\xea\x17\x61\x6c\x47\x4f\x77\x14\x05\x08\x5e\x50\x0f\x40\x18\x51\x2f\x5f\x6f\x7b\x7f\xc3\xf4\xd7\x4f\xad\xa1\xda\xb4\xdc\x7f\x7a\x5b\xa8\x1e\xa8\x58\x6e\xb0\x19\x29\x35\xca\xd1\x25\xa5\x08\xc1\xe2\x28\x40\xf0\x8a\x7a\x00\xc2\x90\x7a\xba\x99\x29\x83\x9d\x71\xab\x95\x03\x93\x7a\xb5\x23\x83\x6a\x8f\x9d\xdf\x1f\x9f\xfc\xf2\xbe\xfe\xd5\xeb\x3f\x62\x21\x9f\xde\x1d\x3e\x8c\x02\x04\x2f\xa9\x07\x20\x8c\xa9\x77\x83\xdb\xc3\x34\xf8\x2b\xe5\x54\x0e\x17\x55\x46\x5e\xd5\xb5\xea\x00\x17\x9e\x33\xd3\xf3\xb6\x0e\x06\xea\xe1\xef\x45\xb8\x7c\x89\x2b\x13\x4e\x53\x6f\x27\x4c\xbb\xed\xee\x76\xc2\x84\x41\xf5\x0e\x36\x7f\x24\x2d\xe0\x39\xd5\x33\xab\x7e\x4e\x2d\x0b\x14\x7f\xb5\xdf\xc7\x74\xde\xee\xdd\x70\xf3\x4d\x1b\x5b\x03\xf5\x0f\x07\x89\x1d\x1d\x2f\xaa\x07\x20\x8c\xaa\x67\x76\x9c\x29\xfc\x15\x5f\x52\x8d\x9d\x71\x7b\x43\x16\x59\xc7\x67\xce\x76\xdb\x98\xb5\xaf\xbf\x6f\x8c\x7d\xfe\x2c\x64\xde\x31\x68\x85\x02\x04\xaf\xaa\x07\x20\x0c\xab\xf7\x10\xd2\x72\x3e\xff\x29\x42\x89\x55\x61\xdf\xc7\x92\x88\x0f\x6e\xc5\xf9\x96\xab\x67\x7f\x2e\x97\x2d\xc5\xab\x90\xa9\x73\x59\xcb\xa0\x00\xc1\xcb\xea\x01\x08\xe3\xea\xd9\xdc\x61\x3f\xe6\xd3\xe1\x63\xc5\xab\x97\xf7\xe5\x6e\xe4\x09\x85\x04\xad\xab\x01\x37\x5a\xab\xd6\x9f\xf9\xd8\xfb\x55\xf7\x8c\xea\xa2\x00\xc1\xeb\xea\x01\x08\x03\xeb\xfd\x49\x8e\xdd\x1e\xb1\xbe\x45\xc6\xbb\xe7\x66\xf4\x70\xf2\x01\x7d\x15\x41\xa9\x12\x4d\xd1\x6a\xef\xbc\x9b\x2f\xd2\xef\x16\xea\x12\x3b\x3a\x5e\x58\x0f\x40\x18\x59\xaf\x65\x38\xf2\x43\xd4\xa7\x03\x8f\xf8\x86\xcd\x83\x17\x82\x60\x23\xeb\xb0\xbb\x3c\x03\x79\x94\x67\xb5\xb3\x82\xf6\x5a\x1c\xbd\x4c\xfc\x1c\x78\x65\x3d\x00\x61\x68\xbd\xf7\xd5\x94\xd0\x25\x82\xc6\x52\xc0\xaa\xc4\x60\xd3\x81\x10\xdb\x30\xfb\x7b\xae\x9b\x69\x75\xfd\x19\x72\x1e\x73\xcb\xcd\x67\x6d\x51\x80\xe0\xa5\xf5\x00\x84\xb1\xf5\x6a\xb7\x92\x9d\x98\x0e\xd3\x78\x5d\xf6\x0b\xa6\x3a\x96\x7c\xcc\xa6\x52\xf7\x43\x6e\x17\x97\x9e\x95\xbc\x8c\x61\x98\x72\xfc\x65\x51\x14\x20\x38\x6d\xbd\x9d\x30\xed\x76\xfe\xb1\x13\x26\x0c\xae\x97\x73\xbe\x9e\x9a\xad\x57\xb5\xf2\x47\xd2\xfa\xfa\xc3\xb7\x3f\xb2\x25\x1a\x43\x26\xdd\x66\xf6\x8a\xb0\x67\xd7\x64\x16\x87\xb6\x11\xff\x20\xbc\xb8\x1e\x80\x30\xba\xde\x38\x43\xd2\x43\x8f\x23\x65\x2b\xef\xf8\x34\xc4\x58\x0e\x3d\x4c\x14\xde\x67\x7c\xf0\x2b\xaa\x17\x94\x92\x2e\x71\x5e\xd0\xd0\xfd\x02\x0a\x10\xbc\xba\x1e\x80\x30\xbc\xde\x1c\xec\xfa\xf1\xef\xb4\xad\xd9\xa2\x86\xb4\x74\xc0\xfe\xf1\xc7\x91\x87\x23\x57\xdc\x5a\x8c\x53\xad\x3c\x9f\x46\x85\xc4\xdb\x48\xa2\x00\xc1\xcb\xeb\x01\x08\xe3\xeb\x95\x65\x7c\xec\xd8\x3e\x9e\xf2\x60\x2b\x77\xdd\xf6\x68\xe6\xf3\x47\x5e\x52\x46\x8f\x2f\x09\x1c\xbc\x31\x14\xb0\x70\xe9\xb1\xe1\x63\xe2\x7e\x06\xaf\xaf\x07\x20\x0c\xb0\xd7\x70\xd1\x90\x61\xcd\x43\xad\x93\x6a\xf8\x52\x12\xfb\x4b\xd8\x93\xe7\x5a\x15\xf9\x8b\xe1\x9b\xf4\xf1\xee\xe0\xcb\x9b\xb2\x10\x41\x14\x20\x78\x81\x3d\x00\x61\x84\xbd\x06\x1a\x77\x71\xca\x3f\x4b\x9e\xbe\x7d\xe1\xa9\xf7\x81\xcc\xcd\x41\xba\x4e\xbb\x61\xf7\x75\xf3\x6f\x1f\xae\x5c\xa8\xab\x70\x27\x8e\x79\x78\x85\x3d\x00\x61\x88\x3d\xee\x87\x7f\xf6\x4d\x88\xdb\x3b\x84\x8d\xe8\x97\x58\xde\xda\x4c\x99\xe9\x59\xdd\x78\xc7\x72\xa6\x20\xee\x5c\xc8\xc5\x3c\xd7\x0f\xc4\x26\x8d\x97\xd8\x03\x10\xc6\xd8\x23\x7b\xfa\x53\xa9\xd1\x35\xba\x70\x42\x85\x59\xf8\xd7\x15\x7f\xcb\xfc\x8c\xc7\xb1\x96\x91\xf7\x95\xfb\x5b\x52\x29\x9f\x4d\x6c\xee\x45\x01\x82\xd3\xd8\xdb\x09\xd3\x6e\x27\x84\x3b\x61\xc2\x20\x7b\x1f\xfb\x54\x12\x7e\x35\xf2\x15\x87\xb5\x56\xff\x89\x0c\x36\x67\xe2\xee\xb4\xb7\x4c\x89\xce\x7c\x60\xfd\x87\xad\xd7\xe6\xbc\x1a\x71\xee\xc4\x8b\xec\x01\x08\xa3\xec\xb5\x34\xd4\x56\x3b\xe7\xc8\xbf\xee\xaa\x10\xb5\x2e\xd8\xaa\xcd\xe5\x3b\x54\xae\x45\xc7\xf7\x45\x32\x89\xe5\xf8\x9d\x84\xcf\x66\x36\x28\x40\xf0\x2a\x7b\x00\xc2\x30\x7b\x45\xba\xbd\x49\x6c\xc7\x34\xdf\x51\x8a\x34\x3f\x14\xe9\x3f\x24\x6a\x1b\x1f\x3b\xf5\x95\xc4\xe9\x65\x4f\x11\x37\x6d\x20\x07\x05\x84\x02\x04\x2f\xb3\x07\x20\x8c\xb3\x37\x71\x81\xe6\x6a\x98\x24\xff\xd8\xcf\x96\xec\x21\xe1\xb3\x3f\xb3\x82\x08\xb3\xf1\xd3\x15\x1d\xcf\xa5\x5e\x0a\xde\x3b\xe8\xc1\xc8\x81\x02\x04\xaf\xb3\x07\x20\x0c\xb4\x77\xd5\xe7\x6a\x6c\x6e\xe1\xa1\xcc\xcf\x03\x5f\x7a\xc6\x06\x14\xa4\x72\xd9\x2b\x1e\xf1\xb5\xf3\x84\xce\x2a\x6c\x0d\xe7\x45\xfd\xdf\x7b\xba\xf0\x42\x7b\x00\xc2\x48\x7b\x50\xe9\xaf\xbb\xb7\x9c\x78\xdd\x93\x0b\x06\x8c\x18\xd5\x3d\x9c\x6c\x57\xc6\xed\x54\x48\x96\x4c\xf9\xf4\x18\xf8\xbf\x0d\x51\x11\x03\x8b\x57\xda\x03\x10\x86\xda\x63\x4c\x6d\x1d\x94\x77\xeb\x95\xce\x5b\x0b\xd0\x5e\x72\xe4\xb5\x4f\x49\xa8\xa7\xd2\xda\xec\xa5\xb9\xcb\xba\xd4\xf6\x1d\x26\x9c\x41\x01\x82\x97\xda\x03\x10\xc6\xda\xe3\xe9\x2d\x9b\x68\xcf\x39\xcb\x5b\xce\x69\x5c\x68\x62\x8f\x1a\x12\x94\x38\xf9\x57\x1e\x56\x9e\x14\x93\x43\xa2\xdf\x3e\xed\x36\x42\x01\x82\xd3\xda\xdb\x09\xd3\x6e\x67\xe8\x3b\x61\xc2\x60\x7b\x0e\x25\x23\xc5\x9d\xaa\x16\xe6\x3a\xad\x3d\x61\x82\x68\x29\x01\x5d\x88\x4e\x52\xaa\x7d\xfe\xcb\x22\xa2\xbe\x97\x36\x24\xfd\x3c\x0a\x10\xbc\xd8\x1e\x80\x30\xda\x5e\x21\xf7\x53\x93\xb2\xb4\xbe\x7e\x2d\xc2\x39\x72\x71\xde\xa7\xc3\x05\x4a\xae\xd5\x64\xe9\xd4\x61\xe5\x1b\x37\x82\x03\x9a\xdd\x18\x51\x80\xe0\xd5\xf6\x00\x84\xe1\xf6\x12\x64\x64\x84\xbd\xb3\x52\x0d\x8f\x5c\x10\x9d\xef\xfe\xae\x7b\xf3\x73\xb7\x9e\xd5\xdc\xe8\xd8\xe8\xbb\x62\x7b\xb5\x00\x59\x1e\x2d\x14\x20\x78\xb9\x3d\x00\x61\xbc\xbd\xf3\x89\xc9\xee\x75\x0e\x95\xce\x27\x93\xbf\x6e\x0a\x16\x9e\x29\x6d\x08\x78\x47\x75\xe0\x1a\x65\x98\x85\x39\x22\x3a\xa2\x90\x4d\x1c\xc1\xf0\x7a\x7b\x00\xc2\x80\x7b\x42\xc6\xee\xfa\x1d\x62\x1d\xc3\x17\x7f\xdf\x75\x4e\x52\xf3\xe3\xef\x16\xbe\x43\x53\xde\x02\xf1\x0f\xd0\x08\x35\x2a\x96\x9a\x19\xa2\x00\xc1\x0b\xee\x01\x08\x23\xee\x59\x31\x1d\xaf\xe4\x93\x1a\x5d\x16\x9f\x20\x51\xf9\xf9\xd3\xab\xdb\xf7\x85\x7f\xc5\x1e\xff\x2d\x2f\xf9\x10\x89\x8c\x80\x00\xb9\x93\x28\x40\xf0\x8a\x7b\x00\xc2\x90\x7b\xc5\x3a\xf4\x0e\xa3\xd2\x26\x03\xee\xdb\xf2\x33\xb3\x6e\x2f\xdf\x4c\xab\x5c\xd4\x38\x3f\x14\xf5\xbb\xfa\x42\x7c\xf5\xc0\xe2\x92\x29\x0a\x10\xbc\xe4\x1e\x80\x30\xe6\x1e\xcf\xac\xce\x09\xbd\x9c\xec\x26\x99\x3a\xc9\x5a\x6e\xd9\x8f\x0b\x8a\x25\xcb\xfa\x2b\x24\xa2\xb6\x0e\x81\xe7\x5a\xef\x97\x50\x48\xa1\x00\xf9\x8f\xe6\xde\xc5\xd7\xa3\x3e\xe1\xed\x16\x8f\x6a\x84\x69\xb7\x1c\x3c\x14\xdb\x2d\x1f\x0f\x77\x34\xf7\xee\x35\x93\xcb\xdb\x08\x3b\xfb\xfc\xfc\x08\xe6\xb2\x2f\xf6\x95\x9d\x04\x79\x8c\xe4\x25\x0f\xb7\x9b\x89\xaa\x54\x97\x47\xff\x94\xf3\xf6\x7d\x3c\xba\x4a\xde\xeb\x26\xe0\xb6\xf4\xa4\x4d\xfb\x9f\xd2\xbd\xa7\x48\xb4\x32\x47\x6c\x85\x9e\x53\x0b\x7d\x79\x39\x7f\xb7\xcd\x4a\x3f\xc2\x9d\xc4\xcc\xe9\x70\xa3\xf2\x06\x0d\xc3\xfd\xdf\xb5\xff\x94\xda\x4c\x1f\x73\x4b\xbe\xa6\xd4\xff\x45\x13\xa6\x38\x7d\x2e\x2d\xee\x4e\xfb\x32\xc5\x9c\x6f\x79\xaa\x78\xbe\xef\x6a\xd5\x8d\xdc\x7f\xdf\xcd\x19\x91\x75\x2e\xb4\x5e\xef\x3b\x37\xb3\x69\x91\x32\x93\x54\xe8\xd8\xfd\xcb\x5b\x5c\x87\x5b\x59\x1d\xe3\x1e\x1c\x4a\x19\x68\xa7\x14\xf9\xf7\x2d\x9a\x1b\x1f\xa5\xaf\x6f\x57\xdf\xe5\xf0\x7e\xe6\xb9\x18\x6b\xf0\xbc\x4e\x41\xfc\x52\xf7\xad\x54\x15\x32\x76\x8f\x47\x83\x85\xb7\x47\xff\x29\xd5\xdc\x7e\xd0\x5e\x4d\xc1\xa6\xf0\xe3\x4a\xea\x1e\xd6\x9e\x0e\xf1\xd2\x48\x8f\xe2\xa5\x98\x17\x3a\x3a\x21\x3c\x0d\xca\x73\xd7\xca\xff\x29\x6d\x8a\xe9\xcd\xbc\x23\xe8\x7b\x66\xe1\xb6\x8c\x72\xc5\x1b\xd3\xb6\xae\xe3\xe9\x49\x85\xe7\x33\x72\x9b\xac\xfa\xdc\xd9\xdd\x47\xf5\xfe\x29\x3d\x6e\xba\x70\xb0\x92\xfb\x0b\xdf\x14\x5c\x6e\x4c\x22\x12\x73\xe2\x20\x77\xd4\x68\x72\x94\x7f\x4a\xdf\xd2\xf3\x46\xfe\x27\xb7\x85\xfe\x77\xd9\xb7\xdb\x53\xdd\xe9\x68\x18\x74\x2f\x7c\x7f\x86\xad\xfa\x21\x43\x09\xa1\x8f\x8f\xa8\xef\xe5\xd3\x1c\x3d\xb7\x34\x84\x78\x44\x26\xa4\xf6\x8e\x93\xcc\xf3\x5a\xd4\xaa\xa2\x00\xc1\x8b\xee\x01\x08\xa3\xee\xcd\x31\xe9\xb4\xc9\x29\x7f\xe9\x99\xe4\xf3\xd6\x94\xf4\xa4\x36\x85\x5d\xbf\x4d\x89\x58\x92\x9d\x7c\xf0\xcd\x66\xfc\xe1\xc9\x72\x62\x1b\xc7\xab\xee\x01\x08\xc3\xee\x85\x59\xf2\x4a\xf2\xfb\x39\xe9\x3c\x92\xef\xca\x21\xd1\x4d\x3a\x78\x74\xa2\xb3\xfd\xea\x13\x4f\x9a\xaa\xe6\xc2\x88\x58\x12\x32\x61\x14\x20\x78\xd9\x3d\x00\x61\xdc\xbd\xbf\x89\xf7\xaf\x2d\x4e\xde\xe2\x3b\x20\x7c\xa7\xa3\xfd\xc7\xad\x25\x2b\xe4\xf1\x5b\xa8\x8e\x95\xe3\x54\xb6\xca\xc2\xf9\xe9\x00\x1f\x14\x20\x78\xdd\x3d\x00\x61\xe0\x3d\xb9\x87\x76\x76\x7d\xad\x47\x6e\x75\x3a\xb5\x3d\x2e\x0f\x42\x3a\xe7\xde\x7e\x7e\xa9\x91\xd5\xfa\xcd\x8f\x39\xb2\x59\x18\x9c\x17\x42\x01\x82\x17\xde\x03\x10\x46\xde\xf3\xc9\xf6\x69\xaf\x19\x92\x50\xdc\xa3\xc7\x7a\x80\xf2\x31\x2c\xf3\x89\xda\x9c\x31\xed\x1d\x2b\xda\x40\xc8\x13\x3c\x94\xac\x43\x87\x02\x04\xaf\xbc\x07\x20\x0c\xbd\x97\xb6\x2c\x4b\x1d\xfa\xbd\x22\xfe\xed\xe3\xd0\x36\x56\x52\xd6\x02\x5f\xb2\xd8\xbd\xc7\xb7\x15\xba\xe9\xe1\xfc\xb6\xb8\xcf\x47\x0f\xa0\x00\xc1\x4b\xef\x01\x08\x63\xef\x19\x44\x69\xdd\x88\xa5\xef\x3e\x54\xd8\x2d\xed\x2b\x15\x20\xca\x65\x71\xc8\x7b\x9f\x84\xa7\x39\x72\xa4\x98\xf1\x25\xa3\xc9\x1c\x71\xef\x83\xd3\xde\xdb\x09\xd3\x6e\x7d\x67\x27\x4c\x18\x7c\x4f\x77\xf4\x12\x8b\x90\x96\x6f\xe6\x17\xcb\xe7\x84\xbd\x2a\x47\xc3\x97\xa5\x90\xcc\x83\x8d\x81\xd7\xa8\x6f\x8f\x8d\x8e\x72\x65\x11\x37\x7c\x78\xf1\x3d\x00\x61\xf4\xbd\xac\xde\x45\xd6\x4f\x17\x8a\xa3\x0f\x72\xce\x38\xdc\x5a\x6e\xdd\xa2\xf0\x6e\xad\x27\x4f\x6a\x10\x66\x39\x9d\xe3\x9f\xc0\xb6\x4c\x9c\x1f\xf1\xea\x7b\x00\xc2\xf0\x7b\x29\x8a\xdc\xae\xcf\xee\xf5\x07\x2a\xac\x48\xcc\x88\xbd\x8c\x5a\xbd\xff\xf5\x44\xdb\x8c\xff\x7b\xa7\xf4\xd3\xb6\xe5\xa5\x07\x94\x28\x51\x80\xe0\xe5\xf7\x00\x84\xf1\xf7\x96\x39\xc6\x47\xca\x93\xbe\x86\xe7\xf5\x7d\x62\x27\x11\xd4\xc8\xad\x9c\x20\x9c\xce\x5d\x33\x08\x6c\xb9\x36\xe8\xfc\xb9\x82\x9b\x1b\x05\x08\x5e\x7f\x0f\x40\x18\x80\x6f\x7d\xb5\x8d\xda\x30\x75\x8f\x38\xd9\x4a\x74\xa6\xd7\x17\x3a\x8a\x93\xcb\x3f\x7f\x7e\x3a\x98\x2f\xf5\x52\xe7\xad\x37\x99\xfe\x17\x12\x14\x20\x78\x01\x3e\x00\x61\x04\xbe\x6c\xb3\x85\x93\xd3\x4b\x29\x9f\xe3\xde\x5c\x2f\x69\x64\x3d\x39\x31\xf8\x61\x2c\x40\xa7\x95\xbd\x2b\xb9\xe4\xfe\xa7\xb3\xb4\x0f\x89\x3f\x42\xbc\x02\x1f\x80\x30\x04\x9f\xfa\xd6\x45\xa1\x03\x6a\x1f\xe7\x17\x2a\x14\x47\xff\x1e\x60\x9f\x1e\xde\x57\x75\xb7\x84\x94\xff\xde\xcb\xd0\xc3\x82\x67\x27\xa9\x24\x50\x80\xe0\x25\xf8\x00\x84\x31\xf8\x74\xbf\x34\xc8\x24\xbc\xf0\xe9\x0f\x3a\xcd\x3c\xac\x9b\xf0\x4a\x6d\xdf\x00\x87\xc5\x2d\x9f\xa7\x97\x7b\xfe\x9a\x44\x74\x65\xcc\x73\xa1\x00\xc1\x69\xf0\xed\x84\x69\xb7\x95\x79\x27\x4c\x18\x84\x8f\xc9\x5d\xbe\xb4\x6d\x42\x86\xb2\x6e\x2f\xd9\x44\x09\x29\xb3\x7e\xf2\x8c\xab\x12\x25\xb7\xb9\x7e\x8f\x3b\xbf\xa7\x55\xc1\x5d\x62\x98\xf0\x22\x7c\x00\xc2\x28\x7c\xcd\x4d\xd1\x87\x6f\x49\xbf\xca\xf7\x23\x37\x78\xfc\x76\xd1\x63\x73\xec\xfd\x1d\xcd\xa7\x9f\x87\x79\x8d\x66\x36\x2e\x0f\x04\xa4\x9a\xa3\x00\xc1\xab\xf0\x01\x08\xc3\xf0\x3d\x98\xae\x91\x48\x92\xf0\x94\xf7\xaf\xe8\xf7\x09\x0a\x1f\x78\x13\xf6\xde\x3b\x7b\xc5\x5b\x55\xfe\xce\xa9\xe0\x08\xbe\x7e\x1b\x11\x14\x20\x78\x19\x3e\x00\x61\x1c\x3e\xde\xe0\xbc\x3e\x03\xb2\x62\x55\xc1\xd8\xb9\xd9\xd2\x2b\x1c\x05\xb5\x2b\xd7\x19\x8e\xa4\xd6\xbb\xfc\xe8\x65\x09\x7c\x84\xaa\x9d\x40\x01\x82\xd7\xe1\x03\x10\x06\xe2\xab\xd9\x7a\xab\x47\x53\x49\x53\x90\xdc\x79\x46\x7b\xf1\xc4\xb7\x36\xbb\xd1\x37\xf6\xe6\xad\xfe\x45\x2a\xfa\xe5\xd4\x1b\x26\xf7\x9d\x50\x80\xe0\x85\xf8\x00\x84\x91\xf8\x4a\x61\x7e\xe5\x75\x05\x5d\xf7\x9a\xd8\x47\xa7\x3f\x84\x1d\x2e\xd3\xa5\xcc\x69\x2a\x0a\xb6\x56\x7d\x5c\x91\x9b\x98\x59\x22\xc2\x8f\x02\x04\xaf\xc4\x07\x20\x0c\xc5\xf7\x77\xef\xfd\x31\x06\xf5\x95\xab\xd0\x4a\x1f\x75\x62\x89\xc4\xde\xf1\xaf\x1a\x9f\xaf\xf3\x1e\x65\xf8\x81\xe6\x0f\xe6\x77\x85\xea\xa1\x00\xc1\x4b\xf1\x01\x08\x63\xf1\xc5\x1d\xb9\x2f\xab\x4f\x4b\x7a\x52\xbc\x3a\x65\x86\xf1\xf4\x0c\x5f\x15\x5d\xe2\x73\xe6\xcc\xdc\x97\x9d\x4d\x0e\x6f\x1f\x19\xfd\x66\x43\x01\x82\xd3\xe2\xdb\x09\xd3\x6e\xb3\xeb\x4e\x98\x30\x18\x5f\xc9\x60\x42\xb8\xea\x88\x93\x88\xae\x7b\x4f\xf6\xf6\x52\xe9\x49\xd5\x9b\x73\xca\xa6\x6b\x99\x1c\x01\x66\xda\x29\xe5\x95\xc7\x89\x63\x05\x5e\x8c\x0f\x40\x18\x8d\xaf\x60\x59\x9f\xe1\x5d\xc8\xd6\x47\x92\xea\xd8\x82\xe2\xba\x13\x37\x53\xef\xba\x9a\x86\xc6\x33\x1c\x49\x87\x65\x74\xce\xd8\x6e\x9c\x45\x01\x82\x57\xe3\x03\x10\x86\xe3\xa3\x7c\x56\x77\x3c\x91\x35\x44\xb5\x24\xa9\xe3\x37\xd5\x04\xdd\x8f\x6b\x11\x24\x21\x55\x0b\x63\xe9\xb2\x71\xef\x2c\x53\x54\x78\x89\x0f\x16\x2f\xc7\x07\x20\x8c\xc7\x77\xc5\x68\x3a\xcd\xf1\x55\xb5\xf9\x12\xdb\xfb\x4b\x17\x18\x52\xce\xbc\xad\x7a\x15\x18\xd7\x7a\xe8\xd9\xf0\xdf\x9a\xc4\xea\x01\x3a\x47\x14\x20\x78\x3d\x3e\x00\x61\x40\x3e\x87\x27\xef\x55\x86\x98\xf6\x8f\x8b\x3f\x0c\x1b\xf1\xf2\xb3\x49\xa9\x6e\x8d\x37\xef\x5a\x1d\xf7\xff\x9c\xa5\xb7\xfe\x9e\x86\x93\x0f\x05\x08\x5e\x90\x0f\x40\x18\x91\x8f\x2c\xda\x91\xcb\x52\xe9\xaf\xa4\xc8\xad\xd5\x97\x8d\x3c\x69\xce\x87\x14\xbb\x7c\xd4\xcb\xa5\x4e\x14\xb4\x68\x25\xdd\xa1\xab\x00\x28\x40\xf0\x8a\x7c\x00\xc2\x90\x7c\xde\xb6\x62\x8a\x4b\x0a\xb2\xcb\x9b\x56\x73\x3e\x34\x9e\xc7\x86\x22\xdd\x38\xa6\xc1\xd7\xbe\xe2\xad\x92\xc3\x9a\xf5\xc7\x9d\x89\x63\x1e\x5e\x92\x0f\x40\x18\x93\x4f\xda\xe7\xf5\x53\x81\xf7\x57\xfd\x07\x37\x5b\x6e\x51\x8c\x08\x48\x2a\xcb\x1d\xb2\x37\xd1\x2c\xba\x22\xc8\x9d\xff\x73\x6a\xae\xce\x0e\x05\x08\x4e\x93\xef\x7f\xef\x77\xda\x65\x77\xb7\x13\x26\x0c\xca\x57\x1d\x56\xf8\x50\x47\x88\xe9\xe9\xc2\x33\xa7\x38\x9f\x60\xf1\x40\xbd\x49\xe5\x84\x5a\xf2\x97\x99\x6d\x63\x61\x8d\x1c\x46\x45\x26\x28\x40\xf0\xa2\x7c\x00\xc2\xa8\x7c\x07\xe4\xff\xf8\xcb\xa2\x5d\x97\x3f\x38\xdc\x0b\x86\x6e\xc6\xea\xb9\x4e\xfb\x8a\xea\x6e\x44\x36\xe6\xa8\x76\x3e\x17\xbe\x62\x7b\x08\x05\x08\x5e\x95\x0f\x40\x18\x96\x4f\xee\xcb\x93\x8c\x67\x0b\x0d\x23\xb4\xc5\xfc\x17\x6c\x6d\x5b\x1f\xc5\x78\x28\x7c\xd1\xab\x0d\xa6\x1b\xd0\x20\xbd\xaf\x55\xa5\x4a\x1c\xf3\xf0\xb2\x7c\x00\xc2\xb8\x7c\x1a\x56\x1f\x2c\x85\x12\xd6\x17\xe1\x13\xac\xf2\x1b\x9d\x9d\xd0\x49\xb5\x2b\x16\x85\xfc\x74\xf1\x06\xa4\x95\xf1\x31\x51\x5c\xb2\x28\x40\xf0\xba\x7c\x00\xc2\xc0\x7c\x7e\xf2\x12\x03\x7e\x31\xe3\x6e\xa5\x33\xe1\xdd\x17\x53\x97\x05\x1d\x73\x32\x1e\x98\x87\xfd\xfe\x3d\x77\x7c\x6b\x14\x24\x4c\xb9\xa2\x00\xc1\x0b\xf3\x01\x08\x23\xf3\x89\x51\xa9\xa9\xdd\x1d\x92\xa4\x9a\x38\xdd\xf0\x51\xc8\xea\x45\xe2\xad\x39\x83\x7d\xf2\x8c\xf6\x64\x1c\x81\x7a\x0a\x39\x6f\x93\x89\xfb\x64\xbc\x32\x1f\x80\x30\x34\x5f\x5a\xea\xfb\xde\x59\x33\xc4\x53\x4a\x2a\x58\x17\xfe\x71\xf9\x9d\x23\x63\x6e\xb8\x9b\x9b\x94\x27\x22\xcf\xc0\x7f\x36\x5d\xc2\x12\x05\x08\x5e\x9a\x0f\x40\x18\x9b\x2f\xc9\xfd\x9c\x7c\xac\xc0\x9f\x94\xf5\x38\xbd\xf1\xed\xbe\x37\xdf\xac\x5b\xd9\xbe\xae\x7c\x02\x32\xba\xce\xbe\xce\xfe\x0a\xd7\xa9\x51\x80\xe0\xb4\xf9\x76\xc2\xb4\xdb\xf9\xc7\x4e\x98\x30\x38\x5f\xf0\x9f\x4d\xa6\xe4\x3d\xf3\x0c\xdc\x63\xab\x61\x37\xac\xe4\xa5\xdb\x39\x36\x0e\x9d\x9f\x67\xb7\xe0\x88\x93\xa7\xfe\x40\x52\x7c\x10\x05\x08\x5e\x9c\x0f\x40\x18\x9d\xef\xf2\x5c\x30\x5f\x9a\x9d\x2d\x4d\xf8\xa3\xd9\xd9\x04\x09\xd6\xae\x50\x15\x85\x89\xa2\xab\xe5\x7e\xdc\x32\x8e\x6a\x07\x96\x32\x38\x50\x80\xe0\xd5\xf9\x00\x84\xe1\xf9\x9c\x5b\x4f\x9e\xe4\x09\xe2\xbf\x7d\xa1\xf8\x40\xdf\xa1\x98\xc1\x16\x52\x75\x49\x0d\xc9\x77\xb6\x09\xe5\x1f\x5b\xe8\xf4\xd4\x20\x5a\x14\x20\x78\x79\x3e\x00\x61\x7c\xbe\x91\xef\x5c\x16\x0a\x56\xe6\xb7\xf8\xf4\x1f\x86\xd3\xa3\x6e\x9c\x8f\x96\x14\x93\xba\xa1\xf9\xaa\x34\x06\x33\xc5\xbb\xef\xf8\x89\x3f\x42\xbc\x3e\x1f\x80\x30\x40\x9f\x84\xe1\xc5\x02\xbe\xbd\xfc\xfa\x22\xcf\x24\x13\xdf\xd4\x0d\xaa\x22\xa9\x70\x48\x8c\x0f\xe2\x33\x3b\x93\x68\x3e\xb4\xea\x44\x1c\xc1\xf0\x02\x7d\x00\xc2\x08\x7d\xc3\xbc\xfb\xe7\x5c\x24\x27\x04\x4d\x68\xb4\x04\x93\xe5\xc1\x79\xa9\x63\xe1\xda\x3d\xea\x2b\x7f\x87\x75\x2f\x4a\xbb\x4b\xde\x64\x40\x01\x82\x57\xe8\x03\x10\x86\xe8\x13\x55\xcc\xbf\xe2\xe6\x12\x7d\xc6\xda\xa7\x6d\xf4\x4a\xdc\x5c\xc1\xd8\x6f\xa1\x7d\x33\x7c\x43\x61\xb6\x29\xcd\x91\xeb\x47\x8e\x1c\x46\x01\x82\x97\xe8\x03\x10\xc6\xe8\x63\x3c\x15\xb3\x55\xe9\xb6\x19\x93\xf4\x73\xe9\x22\xa5\x7e\x71\x91\x98\x83\xae\x77\x92\x84\xc5\xcd\x57\x02\x6b\x53\x96\x19\x8c\xfa\x28\x40\x70\x1a\x7d\x3b\x61\xda\xed\x84\x70\x27\x4c\x18\xa4\xcf\x58\x55\xdd\x5e\xcf\xee\x16\xf5\x90\xe7\xb5\x27\x6a\xa6\xd9\xfb\xbc\x24\xc5\x43\x15\xe7\x82\x6c\x8e\xf5\x09\xa3\x91\x42\xfc\xc4\x1f\x21\x5e\xa4\x0f\x40\x18\xa5\x4f\x88\xef\x3a\xa4\xd8\x7a\x21\xf4\xf6\xa5\x43\x5c\x7f\x45\x1c\x2d\xbf\x8f\x1e\x38\xec\xce\xeb\x4f\xeb\x3d\x26\xfc\xfc\xeb\xe5\x3d\x08\x0a\x10\xbc\x4a\x1f\x80\x30\x4c\x9f\xd1\xfa\xd0\x9e\x14\x66\xce\xe8\xb7\x45\x6f\x53\x2c\x1f\xb2\x3a\x84\xce\x6b\xf4\x52\x0d\x91\x87\x6c\x6e\x8c\x56\x7c\x9d\x9e\xb1\x46\x01\x82\x97\xe9\x03\x10\xc6\xe9\xbb\xf2\xe0\xa9\x71\x87\xe1\xeb\xd3\xf7\x72\x5e\x3c\x31\x09\x6a\x28\xa4\xd4\x55\x30\x12\x56\x8c\x0e\xb5\xba\x99\xd1\xe4\x03\x25\x12\x3f\x07\x5e\xa7\x0f\x40\x18\xa8\xaf\xff\x99\x1c\xe1\x4f\xa2\x07\x75\xf5\xc8\x7b\xfa\x29\xd1\xb8\x90\x8a\x1a\xe7\xbb\x85\x47\xb9\xe4\x63\x5e\x16\x09\x5b\x7c\x08\x3f\x8a\x02\x04\x2f\xd4\x07\x20\x8c\xd4\xb7\x3e\xf4\x4d\x60\x5f\xfe\x97\x3b\x3f\x23\x1f\xbd\x91\xf7\x3e\x2c\x71\x60\xaf\xfa\x9d\x6b\xcf\x19\x22\x4b\xb9\x86\xe6\x69\xac\x3f\x29\xa0\x00\xc1\x2b\xf5\x01\x08\x43\xf5\xc5\x9c\xb9\xf6\xe4\x89\xd7\x29\x45\x59\x7f\x09\xdf\x2f\x8d\x1e\x53\xb5\x09\x53\x7f\x25\x4c\xba\x66\x1a\x0b\xd7\xde\x7a\xb9\x16\x9e\x42\x01\x82\x97\xea\x03\x10\xc6\xea\xa3\xf2\xfe\x99\x07\x8f\x35\x2b\xb5\x6d\xaf\x71\x25\x69\x3e\x90\xbc\x4b\x75\x5a\xf6\x17\xc9\xef\xc9\xf0\x5a\x8d\xee\xc1\x73\x6c\xc4\xa9\x0a\xa7\xd5\xb7\x13\xa6\xdd\xce\xd0\x77\xc2\x84\xc1\xfa\x86\x4f\x1d\x8c\x9a\xb9\x62\x90\x64\x3f\xee\xed\xaa\x62\x7c\xfb\xc1\xb6\x4f\x27\x7c\x6f\xec\x4e\xe0\x78\xc8\xd0\x03\x11\x12\x0d\x29\x14\x20\x78\xb1\x3e\x00\x61\xb4\xbe\xe7\x7f\x7e\x68\x39\xba\xcd\x4f\x96\x4f\xdf\x17\xad\x99\xf6\xd7\x3b\xa0\x11\xe9\xeb\x97\xeb\x4a\x23\xef\xff\xca\x6f\x49\xed\x90\x38\x0a\x10\xbc\x5a\x1f\x80\x30\x5c\xdf\x66\xa3\x02\x3c\x9c\xc6\xfa\xb9\xe2\x4a\xb8\xd8\x13\xc7\x4e\xbd\xf6\x3f\xd5\x8f\x0f\x98\x74\xaa\x0c\x64\x69\x90\x08\x49\xbd\x21\x8e\x60\x78\xb9\x3e\x00\x61\xbc\xbe\x13\x70\xc1\x9d\x82\xf8\x22\x0b\x69\x95\x3b\xdf\x67\xe6\x2c\xde\x1b\xf6\x48\xb3\x2c\x1f\xdd\xb4\x34\x08\x35\x27\x2f\xfa\xf2\x4c\x13\x05\x08\x5e\xaf\x0f\x40\x18\xb0\x4f\x6e\xf1\x5c\xdd\x15\xb9\xb4\x6d\xd7\xbe\x89\x97\xc8\xaa\x58\x90\xfc\xfd\x6b\x67\x6e\xbe\x13\xb4\xed\x79\xdb\x6e\x23\x35\xc3\x68\x86\x02\x04\x2f\xd8\x07\x20\x8c\xd8\xa7\xf0\x61\x82\x40\x1f\x54\x78\xa6\xcc\x88\xe0\xf7\x77\x6c\xbc\x54\xf1\x10\xe3\xe6\x09\xd4\xd1\x98\xde\xe2\x0a\x9b\x9a\xc4\x2f\x4f\x14\x20\x78\xc5\x3e\x00\x61\xc8\xbe\x4b\xd3\xa6\x66\x9f\x8f\x32\x5d\x49\x94\x54\xa4\xe4\x7f\xdc\x63\x2b\xdd\xf1\x60\xc3\x78\x2b\x9a\x57\x6d\x46\x95\x21\xea\x7a\xa6\x39\x0a\x10\xbc\x64\x1f\x80\x30\x66\x9f\x49\x9c\xc9\xfa\x22\xb3\x4a\x08\x99\x93\x3e\x7f\xc7\xd8\x6f\xfe\xa1\x84\xc8\x9c\x6f\xd2\xe2\x4d\xb4\xd2\x4e\x63\xdc\x8d\x54\xc4\x91\x18\xa7\xd9\x37\x00\xfd\xff\x61\x8a\x3f\x71\x4e\x22\x70\xec\xf7\xcc\x03\xed\xc0\x82\x6f\xf7\x36\x23\x45\x96\xb5\x3a\x8d\x5e\xcb\xca\xfc\xf8\x69\x3d\x62\x7c\x47\x83\xf2\x96\x3a\xdd\xed\x7f\xee\xaf\xcc\xaf\xf8\xd1\x56\xba\x65\xd7\x49\x88\x8c\xb0\x92\x38\x2b\xeb\xd6\x5e\x88\x99\x7f\x6c\xe8\x36\xa7\xe2\xd4\x6c\x9c\x5a\xef\x0b\xfe\x29\x6d\x7d\x6e\x77\xe8\xb6\xb8\xf3\x49\xdb\x78\x96\x44\xa7\x84\x17\x3c\xe4\x12\x9c\x0e\xe9\x13\xee\x53\x49\x5d\xfb\xd7\xf6\xf5\x73\x2c\xfd\x53\x9a\xba\xc5\xac\xc5\x7f\x2b\xa8\x34\x58\x47\x5a\x4b\xff\xf2\xe0\x23\x4d\x64\xfe\x68\x71\xe6\xd1\x77\xe6\xa4\x33\x19\x1f\xe7\x95\x8b\xff\x29\xed\x62\x61\x5b\x84\x62\xeb\xb7\x03\xcd\xbc\x7a\xfc\x26\xa9\xe7\x82\x24\x22\xe4\xe6\x17\xda\xc9\x18\xd9\x7e\xa5\xf3\xc1\xf2\xc9\x37\x77\x6e\x31\x77\xfb\x4b\x31\xb7\x98\x2e\x8a\xcc\x67\x8c\x45\xb3\xfb\xec\x7d\x39\x55\x2e\xb8\x68\xf8\x69\x6b\x8c\x53\x54\x95\x29\x2b\xe9\xfc\x19\x34\xe7\x52\xac\xcd\xfa\xa7\xf4\x8f\xac\xcf\xb7\xe1\x9a\x9b\xb5\x3c\x96\x3e\xbf\xa8\x49\xb5\x93\x18\x87\xab\x03\xc9\xde\x4e\xbb\xd5\x04\x1b\x91\xc1\x09\x93\x15\xff\x94\xa6\xd7\xff\xe4\x0d\x7b\x61\xa6\x18\xe6\x9a\x17\xf8\x74\x84\x69\x3e\xcd\x7b\xc2\x64\xb3\x65\xb9\xc3\xb5\xf8\xa7\xb5\xfd\x9f\xe3\x86\xff\x94\xa2\x0f\xb6\xdb\x25\x12\x46\xcd\xa3\x4c\x49\x27\x23\xe4\xd4\x5b\x86\xff\xde\xb1\xf2\x4c\xe9\x75\xb1\x1e\x5b\x3c\xf5\x59\xa5\xb5\xee\x9f\xd2\xa8\x2b\xcc\x85\x22\xb7\x27\x2d\xed\x84\x3a\x05\xec\x3f\x2f\x6c\xb2\xc9\xaa\xfe\x79\x18\xb7\xaf\x4b\x83\xde\xcf\x50\x58\xa1\xf9\xc0\x3f\xa5\xf4\x49\x1f\xd7\x23\x17\xd0\x49\xd0\x26\x54\x19\xeb\x6f\x61\x5c\x2b\xb5\x27\xe4\x2d\xef\x35\xed\xca\x85\xa4\xbc\xfb\xb7\x3b\xa6\xff\x29\xad\x3c\x4d\xe7\x6a\x69\x37\x38\x35\x6c\x17\xfe\xb9\x5f\xdb\xcb\xf7\xf4\x73\xb1\x5f\x81\xbf\x5e\x20\x66\xda\x1f\x2f\x1f\x5c\x78\x9c\xf4\x4f\x69\xb4\xf8\xde\x78\x8d\xef\x76\x91\xcd\xec\x61\x67\x06\x6f\xea\x8c\x7b\xf1\x28\x93\x49\xea\x74\x51\x8d\x39\x71\x33\x17\xad\x09\x19\xfe\xef\x16\x73\xb7\xa7\xfa\xff\x5a\x35\x8c\xc1\x08\x73\xd1\x77\xcb\xaa\xfd\x6d\x5c\x5d\x96\x9d\xa5\x59\xf0\xfd\x4f\x07\xaa\x55\x4e\xac\xc1\x3c\xd2\x7b\xc8\xce\xcd\x5a\x11\x98\x84\x50\x40\xc0\x8d\x11\xc2\x18\x8c\xf0\x98\x8d\x0d\x7a\x66\x94\x55\x41\x35\xe0\x97\x4a\xe8\xb9\x29\x3f\x91\x68\x9a\x6f\x2b\xa3\x4c\x7c\x59\x07\xf2\x6a\xf7\x4b\x0a\x90\xa0\x80\x80\x1b\x23\x84\x31\x18\xe1\xbe\xaf\xea\xe7\x25\xb8\xff\x3c\x7f\x98\x3d\xf8\x59\x22\x80\x64\xff\x95\xc9\x36\xd2\x57\xa1\x06\x36\x2f\xd4\xb8\xbf\x92\xfe\x42\x0f\xa2\x80\x80\x1b\x23\x84\x31\x18\xa1\xee\xd7\xeb\xde\x3a\x4f\xf7\x26\x1e\x42\x72\x37\x14\x0c\x06\x28\xa8\x2a\x16\x6f\x13\x5c\x22\xb2\x32\x83\xd6\x74\x04\xc8\xca\xad\x50\x40\xc0\x8d\x11\xc2\x18\x8c\xd0\xa8\xee\xca\xe7\x40\x72\x52\xc7\x42\xcf\xc5\x20\xf2\xe6\x23\xd2\xf9\xb7\x9e\xbc\x7d\x41\xf2\x81\x51\x9a\x3c\xa4\xd3\x63\xf1\x03\x2d\x0a\x08\xb8\x31\x42\x18\x83\x11\xbe\xff\x4d\x7a\xc7\x46\xbf\x72\xea\x69\x5a\xe4\xac\x77\x5f\xfe\x2b\x3e\x47\x70\xf7\xb7\xbb\x16\x49\x78\xd6\xa5\x6b\x94\x11\xe7\x8f\xa3\x80\x80\x1b\x23\x84\x31\x18\x21\x95\xd0\x4f\xee\x91\xcc\xb2\xe9\xe5\x49\x54\xe9\xa0\xe4\x81\x42\xa3\x4f\xb7\x14\xb4\x52\x9c\x4c\x03\x85\x63\xcc\x58\x7f\xef\xb5\x45\x01\x01\x37\x46\x08\x63\x30\xc2\x33\x22\xc9\x71\xc6\x94\xf9\x9d\x1f\xdf\x53\x3d\x21\xeb\xbd\x57\xaf\x16\x3c\xd1\xaf\xac\x68\x2a\xa5\x59\x54\x78\x7c\x63\x8a\xd9\x13\x05\x84\xff\x88\x11\xee\xd6\x77\x76\xc2\x84\xc1\x08\xef\x89\x7c\x69\x7f\x68\xdd\x36\xa0\x97\xd9\xb5\x78\xba\x20\x8b\x23\xe3\x62\x39\x47\x0c\x12\xf2\xb5\x82\x8e\xe4\xdb\xe7\xd5\x55\x2e\x14\x10\x70\x63\x84\x30\x06\x23\xd4\xf6\xbb\x58\xe9\x6a\x58\xed\xb3\x19\xfa\x49\x98\xb7\x23\xca\xaf\xca\xa0\xb1\x2b\x6f\x29\x87\x97\xa9\xf9\xd6\x82\xec\x7a\x96\x1e\x0a\x08\xb8\x31\x42\x18\x83\x11\x26\x6f\xff\xf5\x38\x99\x31\x25\x4d\xf1\x63\x6f\x5e\xfa\xd1\xb0\x86\xaa\xc7\x1b\xf3\xf2\xa9\xf3\x6c\xcb\x3d\xf3\xc6\x8b\xab\xa3\xae\x28\x20\xe0\xc6\x08\x61\x0c\x46\x78\x39\x3e\x9a\xef\x88\xc2\x62\x90\xab\xe9\xbd\xf8\x3b\x2b\xe2\x9a\xb7\x1e\x44\x43\x3e\xa2\xbf\x43\x39\x66\x2b\x2b\x3e\xbf\x7e\xc6\x86\x02\x02\x6e\x8c\x10\xc6\x60\x84\x11\x81\x86\x6d\x7f\x9d\xb3\xcc\x32\x8d\x95\x4a\x62\x5b\xdb\xfd\x9b\xc8\xae\x92\xf8\x65\x8f\x97\x36\x6c\xab\x1c\x34\xb9\xd7\x4a\xfc\xa1\xe3\xc6\x08\x61\x0c\x46\x38\x50\xaf\x66\x29\x44\xde\x78\xab\xeb\xc8\x40\x20\x81\x4a\x78\xb2\x76\xb9\x7e\x5c\xf3\xac\x35\x63\xcf\x90\x44\xb6\xa4\x99\x95\x2c\x0a\x08\xb8\x31\x42\x18\x83\x11\x5a\x17\x0f\x47\x5c\xed\x44\xc9\x1a\xf9\x23\x7f\x76\xdf\xfa\x45\x1f\x3d\xd9\x63\x6a\xae\xb5\x6d\xdc\xb0\x96\xf9\x96\xdd\xa2\x87\xf8\x9d\xe3\xc6\x08\x61\x0c\x46\xd8\x7e\x8b\x3f\x9c\xbe\x21\x3d\x8b\xf9\x5e\x6d\x92\x6b\x7c\x37\xa5\xe4\xac\xf2\x97\x6b\x11\xe9\x6b\x05\x35\x79\x1f\x58\xdc\x2d\x8c\x50\x40\xf8\x8f\x18\xe1\x6e\x2b\xf3\x4e\x98\x30\x18\xa1\x93\xbb\xd0\xc3\x0b\x97\x90\x07\x63\x71\x27\x22\xdf\xa6\xf9\x98\xdc\x20\x8c\x88\x0e\xcd\xaa\x48\x6c\x6d\x6e\x08\x98\xdc\xc8\xe6\x44\x01\x01\x37\x46\x08\x63\x30\x42\xbb\x04\x92\xd7\x8e\x33\xf4\x37\xc9\xfc\x9e\xc3\xaa\x3d\xeb\x7f\x67\xdb\xbf\xbf\xb6\xcc\xfd\xc3\x9a\xbb\x9d\xfc\xfa\x95\x87\x3b\x03\x0a\x08\xb8\x31\x42\x18\x8b\x11\xf2\x90\x1a\x4a\x2f\xd6\x8b\x25\x7e\x35\xe0\x55\xb9\xbb\x4e\x2b\xfe\x85\xea\xb4\xe0\x82\x73\x56\x70\xa8\xf1\xc6\xdd\xad\x91\x53\x28\x20\xe0\xc6\x08\x61\x0c\x46\xc8\x3d\xc6\x95\x73\x44\xf9\x45\x71\xeb\x76\xad\xd1\xcd\x9a\xfc\x7d\xa4\x39\x67\x22\x8f\x25\xcb\xc5\xbc\xaa\xdf\x1c\x4d\xf6\x6c\x20\xae\x7e\xb8\x31\x42\x18\x83\x11\x56\x9d\xe2\xda\xa4\x9f\xf7\xb0\x97\xbb\xf6\xc1\x24\x02\x25\x1c\x4a\x33\xed\x3e\xfc\xfa\x7c\xa5\x86\x62\x61\xd6\x16\x57\x51\x32\x71\x65\xc2\x8d\x11\xc2\x18\x8c\xf0\x2f\xe5\xb0\xb2\x7b\xa4\x8a\xee\xa1\x47\x05\x49\xcf\x39\x07\xb8\xef\x31\xb4\xff\x35\x9b\x67\x15\x7c\x5f\xc7\x7b\x51\xd8\x94\xd2\x06\x05\x04\xdc\x18\x21\x8c\xc1\x08\x7f\xe4\xec\xd1\x38\x3d\x4e\xde\xca\x41\xfa\x70\xcb\xc4\x3b\xcd\x3d\x45\x3e\x4f\xe2\x60\xfd\x9c\x66\xb7\x68\xc8\xf3\xfd\x2b\x95\x67\x50\x40\xc0\x8d\x11\xc2\x18\x8c\x50\xb5\x62\x34\x5f\xa2\x4d\xfc\xa7\x51\xf3\x49\x57\xf8\x42\xf6\x77\xe6\x32\xbd\x6f\x28\x21\xdb\xd6\x8a\x53\xf3\x7d\x14\x65\x81\x35\x0a\x08\xff\x11\x23\xdc\x6d\x76\xdd\x09\x13\x06\x23\x8c\x30\x80\xfa\x63\xbc\x46\x1d\x3a\x1f\x59\xf6\x3c\x3f\x73\x76\xda\xef\x40\x5a\x4e\xe6\xad\xc5\x3c\xf2\x30\x4b\x93\x53\x57\xb5\x89\x7f\x10\x6e\x8c\x10\xc6\x60\x84\x8a\x4d\x3e\x01\xdb\xbc\x63\x6d\x75\xfa\x59\x53\xc3\xc7\x02\x8b\x99\xa8\xca\x45\x6b\xac\x26\x12\x2d\x7e\xeb\x7e\x6b\x2c\x75\xd0\x41\x01\x01\x37\x46\x08\x63\x30\x42\x5e\x82\x95\xce\xcd\xaa\xfe\xaf\xc7\xbd\x62\x98\x54\x48\xa2\x4e\xf5\x2a\xb2\x94\x53\x69\xe5\x2b\x7b\xaa\x6c\xcf\x05\xcd\x17\xa8\xa3\x80\x80\x1b\x23\x84\x31\x18\xe1\xb6\xd3\x85\x9c\xa9\x89\xee\x3f\xd0\xd0\x3b\x7d\xa3\x11\x92\x87\x31\x8e\x6c\x66\x72\xde\x27\xdf\x08\xb7\x4c\xb0\x97\xa4\x9f\x15\x40\x01\x01\x37\x46\x08\x63\x30\x42\x0f\x9d\x41\x99\x95\x0a\x72\x33\x63\x0a\xa9\xb5\x2a\xf1\x9b\x73\x7f\x9b\x1d\x64\xcd\xc2\xcf\xb2\x08\x49\xa7\x9a\x1f\x7b\xbc\x49\x5c\x61\x71\x63\x84\x30\x06\x23\xcc\x52\xd7\x2d\xec\x56\x47\x7e\xae\x07\xdc\xfe\x11\xb4\x5c\x35\xd4\x56\xaf\xff\x86\xf7\x99\xf7\x59\xe9\x90\x6f\xd4\x12\x59\xf9\x96\x28\x20\xe0\xc6\x08\x61\x0c\x46\x38\x51\xad\xbf\x76\xdb\x92\x59\x21\xf3\x43\x9c\x6c\x90\x22\x55\x76\x5f\x95\x86\x1f\x47\x46\x6d\xb9\xa2\xf4\xfc\xe2\x0a\xfb\x7b\xe2\xaa\x81\x1b\x23\x84\x31\x18\xa1\x38\xb7\xfb\x39\xa9\xd5\x14\x9f\x84\xb1\xaa\x0f\x0d\x0e\x7a\x11\xb6\x99\x27\xde\xe4\x8a\x5d\x3b\x56\xcb\x96\xf7\x5d\xd0\xd6\x50\x1c\x05\x84\xff\x88\x11\xee\xb6\xbb\xdb\x09\x13\x06\x23\x3c\xe4\x15\x65\x9a\x68\x4c\x4e\xae\xf1\x2e\xd0\x19\x92\x43\x03\x25\x35\x1d\x94\x38\x10\x54\xf9\x76\xaf\x1b\xdf\xd7\x33\x9e\x64\x28\x20\xe0\xc6\x08\x61\x0c\x46\xf8\x69\xbf\x7c\xcd\x21\x53\xa5\xdc\xfe\xbc\x13\xcf\xef\x40\x66\x3c\xed\x54\xc9\x51\x5c\xb1\xb7\x42\xf6\x67\x4e\xfa\xd3\xe8\xf2\xf3\xa3\x80\x80\x1b\x23\x84\x31\x18\x21\xaf\x4b\xfd\x1d\x8a\xf4\x3d\xf5\xee\xcb\x39\xfa\x77\xbc\xe8\xcf\x45\x5c\xa1\x7a\xe5\xec\xdb\xea\x70\xc3\x3a\x76\x3f\xe9\xb2\xb8\x34\x0a\x08\xb8\x31\x42\x18\x83\x11\x36\x6c\xba\xd4\x38\xd5\x5d\xbe\x35\xa7\xb0\xd7\xe4\x05\x53\x66\xd4\x5d\x8e\xa7\x0a\xd1\x65\x9a\x9f\xdd\x68\x68\x2e\x3f\x7b\xf9\x5d\x03\x05\x04\xdc\x18\x21\x8c\xc1\x08\x13\xea\xdb\x0b\x6f\x6a\x85\x90\x28\x26\x9f\x7c\x35\x58\xe5\xc6\xd0\x4f\x62\x49\xdf\xd9\xe0\x63\xa3\x1a\xf5\x7c\x4a\xf0\x85\xf0\x39\x14\x10\x70\x63\x84\x30\x06\x23\xbc\xc3\x5f\x76\xfc\xaf\x50\x59\x8e\x21\xa9\x61\xbd\x77\xa1\x99\xb7\x72\x57\xd5\xcc\xd7\xa2\xb7\xfe\x0f\x48\xef\x72\x27\x9f\xf5\x25\x06\x16\x37\x46\x08\x63\x30\x42\x06\x76\xb7\x6b\x52\xee\xd6\x63\x41\x1b\xb3\x74\x0e\x62\x9d\x45\xae\xaa\xb6\xdf\xaf\xf0\xaf\xbb\x34\xf0\x77\x06\x6d\x96\x15\x02\x14\x10\x70\x63\x84\x30\x06\x23\xa4\xad\xde\xb7\x18\x69\x92\xa8\xf4\xf0\xd7\x0f\xf9\x8b\xab\x95\x77\xca\xc8\x85\x68\x72\x15\xaa\x53\xbe\xcd\xf6\x1b\xc5\x72\x3e\x3c\x89\x02\xc2\x7f\xc4\x08\x77\x3b\xff\xd8\x09\x13\x06\x23\x4c\x35\xb4\x39\xfb\xd2\x28\xf4\x76\xc2\x58\x53\x57\x54\x78\xf9\xc7\xd3\x8f\x5c\x9f\x4b\x1c\xbb\xa6\x6b\x12\xa9\x5f\x57\xec\x94\x4b\x1c\x2b\x70\x63\x84\x30\x06\x23\xa4\x67\xcd\xb1\x25\xa3\x38\x36\xf6\xc4\xa3\xd4\xf0\x91\x4d\x66\xac\xdc\xdb\xfb\x9c\x45\x3d\x89\x55\x2e\x9f\x84\x8b\x63\x7a\xbe\x9f\x47\x01\x01\x37\x46\x08\x63\x30\x42\x97\xae\xed\x9f\x2f\xc2\x6a\x18\xeb\x97\x2c\x3e\xe4\xbf\x2b\xcd\xd8\xc8\xf9\xc4\x23\xe0\x2e\x99\x73\xbd\xd8\x8e\x62\x6e\xed\x1e\xb1\x29\xe0\xc6\x08\x61\x0c\x46\xf8\xf1\x31\x9b\xe3\xcb\x46\x83\x75\x87\x8a\xfe\xc8\xbb\x4d\x2f\xaa\x26\xb3\x9f\xc7\x1e\x31\xef\x43\xc4\xbb\x8b\x15\xaf\x8f\x06\x09\xa1\x80\x80\x1b\x23\x84\x31\x18\x21\xf4\x39\x48\x13\x5a\xbb\xf3\xfb\x70\xd5\x87\x9b\xab\x24\x7e\x02\x2c\x1a\x29\xcd\xf5\x5f\x58\x4d\x28\xf8\xde\x91\x3f\x66\xd4\xa2\x42\x01\x01\x37\x46\x08\x63\x30\xc2\x17\xd7\x83\x23\x37\x9e\x7a\xd5\x1f\x6d\xd8\xf4\xa3\xb7\x5e\xb8\x8e\x5a\xd0\xca\xb3\x53\xf6\x9f\x72\xbf\xae\x7c\x6f\xf4\xa8\x18\x3d\x0a\x08\xb8\x31\x42\x18\x83\x11\x1e\xff\x61\x71\xfe\x4a\x84\x94\x76\xc4\x57\x7e\x88\x51\x41\xdf\x41\xbc\x4e\x15\xea\xf6\x96\x76\xf9\x24\xe3\x9f\x5d\xfe\xf5\x0a\x05\x0a\x08\xb8\x31\x42\x18\x83\x11\x5e\xe2\xfc\x10\x3b\x3d\xf0\xf4\x85\xe8\x56\xee\xaf\x34\x06\x46\xb6\x37\xa2\xc9\x2f\x1d\x28\x32\xdd\x97\x7e\x17\xd9\x1b\xc8\xb5\x12\xbf\x8f\xff\x88\x11\xee\x76\x42\xb8\x13\x26\x0c\x46\x58\xbd\xcd\x26\x91\x96\x12\x9c\xfb\xa0\x36\x65\x01\x65\xe0\x20\x75\x77\x5e\x75\xdf\x18\x23\x2d\xef\x66\xfc\x28\xf7\x28\x56\x97\xd8\x6d\x71\x63\x84\x30\x06\x23\xfc\xd1\x29\xf1\xf0\xc1\xe6\x2d\x8a\x77\xf4\x54\xd7\x03\x8f\x3c\xcd\xa9\xbd\x64\xd9\xfe\xf4\x6a\xf5\xc8\xcb\x32\x9a\xba\xbe\x91\x13\x4a\x28\x20\xe0\xc6\x08\x61\x0c\x46\x78\xa1\xc6\x31\x91\xeb\x76\xcc\x52\xc3\xd6\xa3\x67\xe9\x05\xea\xdc\x33\x37\xaf\x24\x3f\xd7\xbc\xa6\x4f\xde\x17\xd0\xe3\x5a\x37\xbb\x0f\x05\x04\xdc\x18\x21\x8c\xc1\x08\xd9\x50\xfd\x4d\x24\xc4\xf7\x6b\xfe\xd6\xb1\xd1\x1b\x12\xc9\x43\xf9\xda\x49\xc3\x25\x4d\x24\x5b\x73\x5f\x8d\xe2\x8b\x0f\x98\x28\xa0\x80\x80\x1b\x23\x84\x31\x18\xe1\xa8\xc4\x3c\x19\x83\xb8\xa4\x74\x5a\xb2\xd7\xf0\xd2\xc5\x84\xdf\xc1\x3c\x4c\x72\xdf\xf2\xbd\xa5\x49\xdb\x8f\xca\xc9\x5e\xb5\xb0\x42\x01\x01\x37\x46\x08\x63\x30\x42\xd1\xb0\x43\x56\xd1\x7d\xd4\x12\x54\xcf\x22\xdf\xf7\x5f\xf8\x96\xcc\x7e\xc8\xec\x40\xd6\xea\xf4\xe6\x23\x1b\x6f\xb9\x3b\x1d\xe3\x27\x50\x40\xc0\x8d\x11\xc2\x18\x8c\xd0\xd9\x2e\xf7\xda\x73\x5d\xdd\xa2\x60\xd5\x1c\xb2\x87\x56\xeb\x56\xc2\xa4\xd6\xbd\xa7\x94\x4e\xf8\xa2\xa1\x84\x43\x32\x9d\x5f\xf7\xa3\x80\x80\x1b\x23\x84\x31\x18\x61\x5d\xc2\x51\x81\x7d\x0b\xbf\x5e\xc4\x36\x86\x64\x88\x9e\x29\xb2\x1c\xbc\x78\x6e\xf8\x92\xcd\xd4\x72\x5b\xb7\x3f\xe3\x13\xdf\x03\xf6\x28\x20\xfc\x47\x8c\x70\xb7\x33\xf4\x9d\x30\x61\x30\xc2\xf2\x0d\x51\x12\x09\x7d\x67\xcd\x33\xb1\x39\xc3\x75\xfa\x4d\x05\xdd\x45\xae\x0f\x74\x38\x57\x26\x24\x5e\xc6\x21\xe9\x57\xb7\x89\xb3\x2d\x6e\x8c\x10\xc6\x60\x84\xe9\xcf\x4b\xe3\x9f\x72\x07\xbd\x05\x9b\xe4\xf9\x2f\x06\xe2\xdc\xd7\x6e\x7f\x17\x12\xe8\x2d\x18\x9c\xa6\x7d\x54\xe9\xf3\x3a\x5a\x04\x05\x04\xdc\x18\x21\x8c\xc1\x08\x13\xa4\x57\x1c\xde\xcb\x67\xc5\x0b\xd3\x0a\x75\x9c\xf8\xd4\x98\xc1\x72\xfe\xc8\x9b\xb1\xab\x82\xc1\xe4\xbe\x4f\x73\x8c\x9b\x43\xb4\x51\x40\xc0\x8d\x11\xc2\x18\x8c\xd0\x28\x19\xf0\xfe\x62\x9d\x17\x79\x51\xa8\xc3\x79\xe2\x92\x53\x30\xd5\xf2\x49\x6a\x0b\x2d\xba\x9e\x3f\xe4\x1b\x0b\x82\x94\xe4\xc4\x55\x03\x37\x46\x08\x63\x30\xc2\x28\x17\xa3\x2b\xb5\x08\x2c\xb2\x30\xf3\x6e\x21\xdb\x8c\xbb\x84\xf6\x67\x6d\x8d\xcc\xad\xd7\xd7\x1c\xd3\x4e\x8f\xe5\xfe\xe4\x14\x45\x01\x01\x37\x46\x08\x63\x30\xc2\x97\xed\x11\x6e\x1b\x56\xa7\x86\x47\x5f\x89\x7e\x78\xe0\x77\xa9\xa7\xa2\xde\x55\x6b\xf0\x37\xc5\xcb\x35\x72\xb9\x30\xde\xf3\x4e\x9a\x28\x20\xe0\xc6\x08\x61\x0c\x46\xb8\x25\xbc\x4a\x97\x5c\xfd\x57\xeb\xd3\x64\x5d\x93\xba\xa7\x4c\x90\x6b\xf2\x55\x83\xab\xb2\x85\x0f\x99\x29\x44\x6e\x77\x4c\x8d\x1c\x42\x01\x01\x37\x46\x08\x63\x30\xc2\x75\x93\xc8\xb0\xfb\x6f\x83\xce\xa9\x74\x96\xd9\x3c\x70\x66\x1b\x17\x72\x90\x7b\x58\x02\x7d\x8f\x3f\x14\xb4\xf7\xa3\xc5\x4d\x3e\x35\x14\x10\xfe\x23\x46\xb8\xdb\x5d\x23\xe6\xb2\x8f\x3d\xb8\xec\x7d\x4a\x85\x69\xe0\xde\xe6\x9c\x05\xf3\x94\x3f\xb1\x0e\xe5\x56\xe2\x1d\xcb\xa7\xe2\x1d\xea\x4e\x98\xc5\x71\x6f\xff\x7b\xd5\x95\xf3\xd3\x73\x2b\xe0\xc6\xe6\x0a\xdb\xef\x51\x96\xb3\x95\xb2\xb7\xa6\x3f\x9c\x53\xb7\x71\x94\xd3\x09\xb2\x14\x0a\x95\xad\x78\xf5\xef\xb5\xdc\x0f\x35\x03\x76\xeb\xcd\xda\xc9\x3f\x9b\xdf\x18\x2e\xba\x47\xf9\xb3\x35\x1d\xac\x20\x97\xd0\x5a\x05\x22\x22\x71\x2c\x97\xc8\x4f\xff\x53\x3a\xfe\x29\xeb\x46\x48\xe3\x55\x1b\x3b\x7a\x89\x33\x35\x4e\xca\xc7\x13\x72\xac\xc4\x6f\x8b\xd5\xe8\xe4\x7f\xb3\x73\xde\xf6\xaa\xe8\xfb\xa7\x74\x96\xdd\x32\x63\xfa\xe0\xf7\xf0\xbb\x6c\xd7\xb2\x2f\xb9\x4f\xfc\x48\x3f\x7c\xac\x70\xb8\xca\xed\xf7\x93\xb9\x6f\xd7\x04\x9c\x4e\x30\xfd\x53\x7a\xd6\x44\x59\xbe\xcd\x7a\x5e\xa5\x76\x4f\x90\x5d\x98\xe2\x52\x9e\x82\x80\x6a\xa7\x94\x5c\x53\xb5\x82\x77\x8a\x94\x08\x9d\xd6\xbf\xd7\xa8\xb5\xaf\xaf\x46\x13\x06\xa8\xc5\xbe\x3f\x4a\x51\xa8\xcf\x51\x72\xd5\x19\xda\xff\xeb\x22\xd3\xc7\x7d\xc1\xb2\x61\x05\x6d\x88\xca\xbf\x17\x93\xbe\x39\x55\x7f\xcb\xa5\x15\x68\x87\x5e\x64\xf5\x93\x97\x9d\x77\x6d\x56\xc9\xa6\x1a\xea\xbe\xdf\x3f\xf4\x40\xcb\xd8\x4c\xb2\x69\xff\xff\x2e\xfb\x76\x7b\xaa\x3b\x1d\x0d\x83\x11\xf2\x90\x3c\x83\xdc\x2a\xae\x3f\x6c\x10\x74\x6a\x28\xf1\x47\x82\x3c\xde\x29\x9b\xb4\x26\xdd\x51\x7f\x60\x1f\xb8\x78\xa7\xe0\x2d\x71\xa9\xc0\x8d\x11\xc2\x18\x8c\xf0\x70\x74\x2e\xe5\xbe\xc6\x8d\x72\x3e\x5b\xe5\xc2\xad\xe4\x25\x8b\x49\x33\x61\xcf\x78\x4d\xce\xae\x6b\xb6\x25\x0c\xe2\x17\x34\x89\x9d\x00\x37\x46\x08\x63\x30\xc2\xd1\x20\x44\x26\xdd\x81\xe7\x48\xbf\xee\x23\x19\x39\x31\xd2\xe7\xf2\x3e\x67\x2d\xae\x6f\x65\x2f\xd5\x97\xc5\x06\x08\x95\xf6\x13\x3f\x07\x6e\x8c\x10\xc6\x60\x84\xb2\x54\xfd\xde\x5e\xad\x7d\x66\x2d\x7b\xe5\xdd\x95\x52\x9e\xdb\xbc\x74\xf7\x7c\xfa\xe7\xeb\xc8\x6f\x7b\x32\xb4\x32\x5c\x68\x0e\x42\x01\x01\x37\x46\x08\x63\x30\x42\xaf\x1f\x09\x85\xde\xb9\x17\x3f\x44\xf3\xde\x3e\xdf\xe0\xd1\x9e\x0b\x93\x50\xf2\xaf\xbe\x7c\x76\xb6\xf3\x31\xa9\x6d\xfb\x78\xa7\x22\x0a\x08\xb8\x31\x42\x18\x83\x11\x5e\x37\xe6\x62\xee\x80\xfc\x4e\x53\xa6\x5d\xeb\xfe\x78\xe6\xfe\x69\xd7\x17\xbf\xa8\x39\xa3\x8e\x27\x8b\x32\xb7\x0c\x47\x2b\x75\x7b\xa3\x80\x80\x1b\x23\x84\x31\x18\x21\x87\x8f\xa7\x8c\x9e\x87\x3f\xa3\xf0\x29\x43\xe6\x60\x50\x29\x38\x13\xb1\xa8\x37\x68\x62\x7a\x9e\x83\xe6\xec\x09\x0b\x28\xd6\x10\x05\x04\xdc\x18\x21\x8c\xc1\x08\xa9\x1e\xb4\x33\x09\xea\x77\xb1\x4c\xa7\xdb\x37\x9d\x3f\x21\x15\x76\x39\x5d\xb4\xf1\x3b\xa7\xec\x43\xd9\xd1\x34\x2d\x4e\xe7\xf7\x8c\x28\x20\xfc\x47\x8c\x70\xb7\xbe\xb3\x13\x26\x0c\x46\x58\x7a\xeb\xf5\xc8\xe6\x51\xf9\x9f\xb2\x94\x32\xfd\x75\x81\x69\x4a\xad\x5e\x5e\xd7\x8c\xdf\x71\xdf\x1c\xf8\xac\x33\x94\xb4\xcf\x5a\x10\x05\x04\xdc\x18\x21\x8c\xc5\x08\xa3\x8e\x1b\x05\x70\x32\xbc\xa6\xf7\xbe\x65\x7c\xa7\xe4\x85\x89\xb8\x57\x54\x1a\x47\x87\x24\xfd\x54\x04\xa3\x51\x79\xc4\x86\x07\x0a\x08\xb8\x31\x42\x18\x83\x11\x5e\x54\xd3\x7d\xb0\x30\xfb\x48\x74\xb6\xfd\xa9\xf2\x54\xd6\x6c\xaf\x60\xc0\xe4\xb1\x20\x89\xdb\xa5\x01\x36\x36\x71\xf3\xcf\xcc\x55\x50\x40\xc0\x8d\x11\xc2\x18\x8c\x90\x55\xf1\x9e\xca\x98\x99\xb2\xae\xda\x6f\xc6\x38\xfd\x07\x6b\x5b\x83\x8f\xc8\xdb\x49\xa2\xf7\x31\xf2\xa6\x19\x38\xe8\x9e\x6e\x14\x46\x01\x01\x37\x46\x08\x63\x30\x42\x2f\xff\x4e\xe9\xb8\x22\xd6\xe9\x5b\xa2\x4a\xe9\xe3\xaf\x5f\x42\x5b\x66\x6d\xde\x45\xbd\xe5\x06\x9c\x31\x7b\x59\xae\xb3\x89\x70\xa3\x80\x80\x1b\x23\x84\x31\x18\xe1\x0b\x29\x28\x38\x43\x83\xbc\xea\xa6\x3f\xbd\xf5\x33\x4f\xe9\xe5\xeb\x5e\xef\xd6\x8e\xd0\x4d\x4d\x7d\x8b\x5b\x20\x77\xac\xf4\x54\x45\x01\x01\x37\x46\x08\x63\x30\x42\xdb\xf4\xe5\x27\x01\xa4\xb5\xba\x36\xc1\x57\x4f\x87\x3d\x64\xff\xfc\xd9\xdc\xf3\x92\xcb\x85\xa8\x63\x7c\x01\x66\x11\xec\xa7\x9c\x88\x7b\x1f\xdc\x18\x21\x8c\xc1\x08\x0b\x2a\x14\xd9\xe3\xf9\xb7\x2c\xe3\x98\x34\xd4\xe6\x8d\x68\x02\x26\x2f\x7e\xe8\x39\x66\x34\x26\xe6\x23\xe0\xba\xbe\x72\x34\xe7\x30\x0a\x08\xff\x11\x23\xdc\x6d\x65\xde\x09\x13\x06\x23\xac\x9e\x35\x0e\x5b\xa5\xa5\x4c\x2a\xf2\x8b\x3c\xce\x78\x6c\x3f\x64\xa2\xe2\x6d\xc1\x5f\xe4\x61\x92\x6d\xff\x6a\xe0\xd4\xe6\x83\x83\x28\x20\xe0\xc6\x08\x61\x0c\x46\xe8\xb2\xf6\x3a\xa1\x80\x69\xc6\xea\x4e\xf5\xa7\xe3\x27\xcb\x34\x53\xa9\x46\xc7\x6e\xd6\x73\x44\x06\x71\x91\xc6\xfc\x4c\xf8\x08\xf9\xa0\x80\x80\x1b\x23\x84\x31\x18\xa1\xcb\xb2\x5c\x80\xca\xe7\xfa\x97\x72\xea\x41\xcf\xec\x18\x95\xee\xb3\x5f\x30\xda\x94\xee\x68\xf6\xb3\xff\xb9\xff\xc5\x21\xea\x26\x01\x14\x10\x70\x63\x84\x30\x06\x23\x44\x92\xed\x8b\x25\x9a\xf3\x16\xaf\x48\x72\xed\x71\x4b\x14\xf4\x38\xcf\x51\xf4\xdb\xf3\x6b\x3e\x85\x80\x63\xdf\xfd\xa2\x2b\x47\x88\x8d\x07\x37\x46\x08\x63\x30\xc2\xbc\xf6\x04\xcf\x3e\x56\xd4\x5c\x43\xdd\x43\x69\x69\xba\xa2\x1e\xf4\x64\x52\x1e\xae\xbb\x29\x70\xcf\x61\x58\xa8\xe9\xdc\xc3\x73\x28\x20\xe0\xc6\x08\x61\x0c\x46\x18\x93\x50\xc9\xbe\x07\x11\x98\x86\x07\x23\xff\x4a\x5d\x48\xe4\xb8\x63\x98\x7f\xbd\x24\x73\x7b\x58\x61\x68\x32\x92\x5a\x9a\xd1\x0d\x05\x04\xdc\x18\x21\x8c\xc1\x08\x23\xf4\x06\x0e\x67\xe6\xd3\xa9\x31\x4f\x7c\xbc\xc9\x2c\xe2\x5c\xe6\x73\x84\x7f\xea\x35\xac\xf6\x47\xf3\x77\xb9\xda\x11\xab\x4a\xe2\xea\x87\x1b\x23\x84\x31\x18\xe1\xb4\xef\x50\x9d\xbe\xd8\xbe\x6b\xd3\xf2\x15\x05\x46\xde\xda\x06\x24\xa6\xbd\x07\x58\x8d\x6d\xb4\x83\x56\x34\x7c\x12\x43\xbe\x13\x50\x40\xf8\x8f\x18\xe1\x6e\xb3\xeb\x4e\x98\x30\x18\xa1\x0a\xa9\x14\x5b\x03\x1f\x9d\x5a\xfa\x73\xe9\x9c\x46\x7e\x91\x83\xa3\x6c\xa3\x92\x03\xe9\xba\xae\x56\x02\x56\xf6\xd5\xdf\x46\x0c\x50\x40\xc0\x8d\x11\xc2\x18\x8c\xd0\x98\x5d\x52\xb6\xd7\xc7\xb7\xc9\x77\x2b\xd0\xf9\xb4\x76\xd7\x4d\x6b\x83\x7c\xf2\xe2\x56\x65\xf1\x63\x1f\x67\x3a\x47\x1c\x42\x89\x1f\x1a\x37\x46\x08\x63\x30\xc2\x7b\x09\x83\xb9\xdd\xc7\xef\xcb\x5e\x3d\xd0\xb9\xa7\x30\x48\x9d\xc2\x87\xa4\xc0\xed\xa4\x51\xbd\xb7\xed\xe1\x33\xf4\x9e\x96\xb7\x89\xa3\x24\x6e\x8c\x10\xc6\x60\x84\x43\xba\xe8\x55\xf5\xa4\x67\x6d\x74\xc1\xa4\xb9\x19\x36\x21\x3c\xd1\xaf\x03\x02\xa8\x98\x93\xa7\x0d\xa7\xe2\x1f\x45\xd8\x7c\xe7\x40\x01\x01\x37\x46\x08\x63\x30\xc2\xb7\x43\x59\xb2\x97\x4a\xad\x83\x1e\x2a\x6b\x9a\x51\x9d\xe0\x94\x9b\xf7\x0c\xb4\xe4\x4d\x64\x8b\xe1\x25\xa9\xce\x8f\x0e\x6d\xf1\x42\x01\x01\x37\x46\x08\x63\x30\xc2\xcb\x8a\x6f\x02\x02\x0f\xbe\x7a\x54\xab\x4b\x7f\x9f\xe1\xf4\x5d\x15\x4f\x0e\xa1\xbf\x8e\x99\xb2\x4e\xaa\x4b\x4f\x3b\x3a\x57\x13\x69\x50\x40\xc0\x8d\x11\xc2\x18\x8c\x90\xef\xe7\x73\x9a\x07\x6d\x6d\xf1\x7b\x08\x1d\x37\x2e\x31\xfb\xb4\xeb\x36\x5d\xd6\xa7\xec\xb6\xba\x37\xfa\xeb\xea\x93\xe3\xce\x7b\x8e\xa1\x80\x80\x1b\x23\x84\x31\x18\xa1\xc1\xc8\x41\x71\xb6\xad\xdc\x7b\x05\x95\xfa\xa1\x0b\xf9\xdc\xaa\x4c\x91\x1b\x3d\x0d\x07\x67\xd7\xa2\x1f\xdb\xdf\x97\xb6\x9b\x10\x42\x01\xe1\x3f\x62\x84\xbb\xed\xee\x76\xc2\x84\xc1\x08\x29\xf6\x65\x90\xed\xe9\x48\x3d\x66\xee\xc6\x6b\x31\x64\x7d\xff\xe5\xaf\x9a\x88\x69\xf2\x42\x92\x2f\x87\xbe\x1e\x64\x13\x68\xa3\x20\xee\xd6\x71\x63\x84\x30\x06\x23\x24\x99\xbd\xdd\x67\xf6\x51\xcf\x37\x28\x7b\xa0\xec\xd5\xe3\xf1\xd7\xf9\xdf\x47\xb3\x6e\x85\xd3\xe6\x31\x93\x32\xec\x49\xf9\xda\xcd\x87\x02\x02\x6e\x8c\x10\xc6\x60\x84\xef\x45\x1c\x3b\x39\xa5\xf6\x99\x1e\x2f\x74\xf5\x89\x13\x6b\x3f\x61\xab\x9e\xbb\x95\xfd\xf6\x66\xfa\x29\xbd\x4f\xb3\xed\xe1\x5c\xe2\x28\x20\xe0\xc6\x08\x61\x0c\x46\x18\xba\xee\xb0\x46\x49\xc9\x3f\x5a\x51\xfb\x5b\x22\xb6\xd5\x6d\xce\x0a\xd1\xe3\x94\x2a\x2c\xe3\x27\x78\x9d\x33\x9b\x9f\x7e\x43\xfc\xa1\xe3\xc6\x08\x61\x0c\x46\x48\x3b\xed\xfe\xee\xde\x49\x95\x85\x56\x54\xb6\xe1\x59\x90\x6c\xe6\x15\x89\x32\xc3\xd3\xaf\x85\x4b\xf2\xe8\x6e\xe5\xaa\xe7\xf2\x13\x9f\x15\x6e\x8c\x10\xc6\x60\x84\xaa\x01\x41\xa1\x4b\x2c\x4f\x9f\x2c\xe9\x93\x9f\x6a\xa5\x95\x0d\x34\xdd\x54\xbf\xf3\x90\x2b\xf9\xf1\x0a\xff\x8a\xb6\x60\x66\x92\x1d\x0a\x08\xb8\x31\x42\x18\x83\x11\x32\x96\x84\xea\x95\xcb\xf0\x37\x36\xaa\xde\x7b\xdd\xe9\x98\x77\xbb\x5d\x3d\xf5\xce\xc5\x63\xe8\x59\x96\x0f\xe3\xfe\xbc\x3f\xd6\xd8\x50\x40\xc0\x8d\x11\xc2\x18\x8c\x50\x20\xdd\xfb\xfd\xb2\x42\x8c\x0f\x47\xc9\xf8\xe1\xd2\x33\x8f\x14\xae\xde\xad\x4d\x2f\xa3\x0d\x74\xd0\x12\xf8\xf4\xca\x54\xa1\xd0\x04\x05\x84\xff\x88\x11\xee\x76\xfe\xb1\x13\x26\x0c\x46\x18\xdd\x74\xd1\xb6\xc3\xa0\xd8\xf0\xd0\x67\xf7\x98\x96\x13\x0e\xca\x8f\xe6\xd0\xab\x29\x6e\xad\xfe\x5a\xd4\x8b\xb6\x45\xfb\xbb\x88\xab\x06\x6e\x8c\x10\xc6\x60\x84\x76\x6b\x0a\xef\x2c\x96\x0c\x5a\x9e\x51\x1f\x25\xcd\x7f\xbc\x74\xb1\xb1\x53\xfa\x4f\x0a\xa9\x53\x42\x2c\x77\x96\x32\x8b\xf7\xb8\x27\x0a\x08\xb8\x31\x42\x18\x83\x11\xb2\x40\x93\x12\x4e\x73\x9b\x06\x72\x7b\x69\xc4\x46\x2f\xc7\x54\xf2\x3a\xfd\x70\x3e\x77\xdf\x86\x2a\xfd\x7d\x59\xe2\x45\xdd\x6e\xe2\xc6\x1d\x37\x46\x08\x63\x30\x42\x9e\xf0\xe8\x23\x02\x5c\xa7\x15\xb9\x38\x5a\xbf\xa7\x75\x0d\xbc\xe2\x92\xa5\xd0\x5b\x9b\xef\x28\xca\x4d\xa9\xce\x14\x70\x4e\xb2\x45\x01\x01\x37\x46\x08\x63\x30\x42\xeb\xbd\x59\xbf\x27\xcb\x25\x6d\xe8\x8e\x50\x98\x78\xbd\x19\xf2\x33\x32\x22\x28\xc6\x25\xff\x08\x32\x69\x57\x65\x08\x4c\x75\x24\x6e\xdc\x71\x63\x84\x30\x06\x23\x94\x77\xe4\x66\x88\x5d\xb9\x3e\x2b\xe1\xbe\xa6\xed\xf8\x9b\x32\x47\x76\x7f\x9d\xf6\xc2\xe7\xe0\x0a\x8f\x76\x3d\x7d\xea\xe1\x36\x05\x14\x10\x70\x63\x84\x30\x06\x23\x6c\xd0\x36\x2a\xca\xef\x3f\x5a\x2b\xf6\x39\x74\x32\xa4\xd3\xbc\x8a\x2a\x28\xb5\xf3\x47\xc0\x77\x9a\x37\x3d\x95\x11\xe7\x96\x38\x89\x4d\x01\x37\x46\x08\x63\x30\x42\x3e\xaa\xd7\x94\x8c\xd7\xa5\x4d\x8f\x65\x1a\xc7\x43\x0c\x0c\xb5\x0e\x06\x19\x9e\x47\x3c\xb8\xa9\x64\xb4\x02\xd8\x87\x3d\x3e\x10\xbf\x8f\xff\x88\x11\xee\x76\x42\xb8\x13\x26\x0c\x46\x18\x3a\xb0\x75\xbe\x2a\x93\x75\x54\xc6\xb2\x5c\x5e\x61\x9d\x33\xcf\xd1\x43\x4a\xa4\x42\xc0\xea\x88\x14\x21\xf3\xd6\xd1\xe4\x3c\x5a\x14\x10\x70\x63\x84\x30\x06\x23\x8c\xcf\x8f\x69\xe8\xa3\x21\x97\x78\xd3\xcc\xa2\xb0\x7a\xf5\x34\x2f\x85\x98\x05\x79\x57\x62\x54\xc5\xd1\xa3\xfb\x15\x0d\xb5\xde\x10\xbf\x3c\xdc\x18\x21\x8c\xc1\x08\xdd\xf7\x8d\x2f\x73\x72\x94\x08\xdf\xad\xb3\x88\x56\x6c\x7e\x58\x9b\x6e\x37\xb1\xde\x5c\x06\x5f\xb6\x7f\x3c\x33\xca\x55\x47\x49\x82\x02\x02\x6e\x8c\x10\xc6\x60\x84\x3f\x62\x56\x08\xe6\x93\x39\xfc\xb2\xaa\x5d\xfb\xb4\x4a\x2a\x62\x2e\x1c\xd7\x97\xf4\x25\xb7\x21\xb1\xff\x9c\x78\xd8\x91\x51\xd3\x0c\x05\x04\xdc\x18\x21\x8c\xc1\x08\x57\x6d\x1d\x42\x0f\xe8\x7b\x18\x3c\xbb\x38\xb0\x9d\x22\x0a\xb2\x42\x97\x42\x12\xa2\xee\xc7\x26\x8e\xbf\xe3\x59\x01\x11\xd4\xc4\xcf\x81\x1b\x23\x84\x31\x18\x61\x64\x54\x09\x85\x19\x28\xf1\xf9\x4e\x86\xb8\x44\x5e\x21\x25\x21\xbf\x25\x05\xb4\x1c\x59\x93\xb5\x24\x43\xc9\xd2\x86\xf7\x6a\xa1\x80\x80\x1b\x23\x84\x31\x18\x61\xcc\x31\x7f\x81\x6f\x9c\x51\x5a\x1d\x47\x03\x38\x86\x6c\xd2\xb3\x34\xb8\xc8\xeb\x5e\x3f\x8a\xea\xaf\x52\x8e\x1a\x91\x21\xab\xa2\x44\x01\x01\x37\x46\x08\x63\x30\xc2\x8c\xf9\x22\x81\x5f\xe3\x45\x3c\x94\x71\xad\xdc\x23\x4f\x44\xe5\xb9\xe2\xac\x6f\xff\xbc\xb1\xd0\x1b\x92\x5d\x11\xbd\x52\x73\xf1\x14\x0a\x08\xff\x11\x23\xdc\xed\x0c\x7d\x27\x4c\x18\x8c\xb0\x32\x70\x7f\xdc\x1d\xab\x3a\x61\x24\x8c\x91\xe1\x75\x71\x85\xf6\xf6\x3c\x73\xd3\x38\x42\x79\x83\xc4\xc7\x81\x7b\xce\x85\x15\x41\x01\x01\x37\x46\x08\x63\x30\x42\xab\x7b\x0b\xb6\x1b\x1e\x22\x2e\x46\x23\x16\xdf\xf5\x06\xdf\x89\x0c\xd8\x31\xc4\x94\xd1\xb2\x5c\xde\x38\x5f\xed\x7b\x2a\xba\x42\x02\x05\x04\xdc\x18\x21\x8c\xc1\x08\x47\xdf\x38\x5e\x8d\xe6\x14\xab\x59\xbf\x40\x1a\xd8\x35\xe0\x9b\x49\x69\x5a\xf6\xe1\x15\xa7\xee\x71\x87\x9b\x76\x4f\x3f\x2e\x16\xd1\xa3\x80\x80\x1b\x23\x84\x31\x18\xe1\x09\x92\x17\x57\x96\x14\xce\x2d\xb1\xb6\x3c\x0a\x69\xf3\xa3\x3d\x2e\xe1\x43\x4f\x98\xae\x8b\x7b\x5c\xa4\xe5\xbd\x3a\x6c\x6c\x47\x8d\x02\x02\x6e\x8c\x10\xc6\x60\x84\xed\xf1\x37\xfa\x61\xaa\x6c\xe3\x9a\xc3\xa1\x81\xd9\xa5\x7e\x2f\x5b\xe9\x79\x5a\xb2\xfe\x2a\x79\x07\x6e\xdc\xbc\x5f\xe8\xcd\xc4\x8c\x02\x02\x6e\x8c\x10\xc6\x60\x84\x9f\xa3\xbf\xe4\x09\x46\xf7\xac\xee\x19\x2a\xf9\xa6\xc4\x3e\x37\xea\x4d\x56\x66\xe5\x26\xa3\xa7\x5e\xf0\x46\xf0\xa4\xc9\xe8\x1d\x52\x14\x10\x70\x63\x84\x30\x06\x23\x3c\xed\xcc\x94\xaf\xb9\xb8\x3e\xa6\xdc\xf5\xf8\x64\xeb\xe5\x1f\x02\x75\x67\xb8\x35\xba\xf2\x79\x9a\xa8\xf4\x1e\xe7\xb9\xdc\x2a\x96\x47\x01\x01\x37\x46\x08\x63\x30\xc2\xe3\xe1\xb4\x3c\x25\x16\x7b\xbf\x45\x72\x25\x06\x29\xcc\xa8\x47\xac\x6d\x7c\xd5\x4c\xb6\x3b\x9f\xa2\xf8\xb8\x40\xe9\x9c\xf2\x61\x62\x60\xff\x23\x46\xb8\xdb\x7f\x0b\x62\x2e\xfb\xb4\x52\x24\xec\x49\x2c\xb5\xe9\x0c\x82\x7e\xcc\xba\x77\x64\xb8\x94\x3c\xc8\xfb\x38\xe3\xe9\xf3\x50\x80\xf9\xc7\xfc\x06\xed\xf5\x94\x7f\x4a\xdb\x6f\xd7\xdc\xaf\xbe\xfe\xfe\x08\xf5\x23\x31\x05\x74\x14\x16\x35\x5a\x5c\x6b\xa4\xda\xb4\x0e\x94\x99\x72\x13\x66\xbc\x7c\xec\x5f\xb7\x90\x7e\x54\xf8\x56\x8f\x66\xf0\xdf\xc3\x46\xd7\xde\x05\xcb\x1d\x70\xfe\xfb\xf1\xfd\x95\xcb\x2b\x56\x91\x46\xc5\x99\x59\xf5\x03\xdf\x6d\xfe\x29\xe5\x64\xf9\xf6\xf6\x59\x50\xef\x0b\x92\xd9\xc2\x30\x75\xaa\xb8\x7a\xb4\xd8\xa4\x7c\x5d\xcf\x27\xcb\xb8\xbb\xe1\x89\x3f\x13\xe5\xc0\x3f\xa5\xcf\x7d\x17\x60\xcf\x18\xdb\xd2\x37\x62\xca\x52\x52\x06\x32\xdb\x0a\x71\x53\xcf\x9e\x3e\xe9\x1c\x4b\x12\x6e\x55\xa1\x11\x11\xe4\xff\xa7\x34\xd7\x16\xbe\x15\xb2\xb4\xaa\x44\xc9\xa0\xae\x58\xe7\x1a\x5a\xa6\xfb\xf7\xca\xb5\x3a\xd1\xd6\x9a\xf9\x47\xda\x1a\x6d\x41\x4e\x4f\xfe\x29\x3d\xe4\xb2\x3c\x9d\x7a\xce\x11\x35\x60\xbc\x3a\x5e\xb0\x98\x27\xaa\xab\xf9\x95\xc1\xb0\x7a\x62\x4b\xd7\x05\x56\x50\x6e\xbe\xf8\xee\x9f\x52\x6a\x83\xde\x6f\x7b\xee\x98\xda\x47\xea\x9c\xaa\x9c\xd7\xa9\x9c\x23\xb4\x7c\x49\x68\x0e\x6f\x4e\x6e\x8b\x71\xce\x49\x6d\x90\x59\xfc\xdf\x65\xdf\x6e\x4f\x75\xa7\xa3\x61\x30\xc2\xa8\x3f\x2f\xf5\xf6\xde\x27\x0b\x3d\x6a\x44\x91\x10\xed\x40\x19\x5d\x1a\x4b\x26\x7f\xc6\x0c\x3c\xce\xce\x10\xf8\x18\x1c\x73\x48\x16\x05\x04\xdc\x18\x21\x8c\xc1\x08\x0b\x8c\x25\x6e\x5c\x57\x7b\xac\xf5\xd7\xbc\xe9\xb6\x3b\xdf\x55\x1d\xbb\x4e\xea\x25\x21\x56\x72\xc2\x22\xf3\xb1\x7b\xa6\x09\xb3\x1c\x28\x20\xe0\xc6\x08\x61\x0c\x46\x68\x7c\x37\xf7\xdc\x0f\x4b\xa3\x8b\xce\x7b\xa6\x26\x2f\x2d\xc3\x4a\x3d\xfb\x63\x5a\x26\x79\x62\x68\x4e\x76\x6d\xc9\x5a\x33\x1b\xab\xa0\x80\x80\x1b\x23\x84\x31\x18\xa1\xa8\xb9\xd9\xdf\xe1\x24\xd3\xef\x2c\xdd\x42\x74\xb4\x3a\x77\xd5\xd7\xac\x9d\x99\x15\xae\xd7\x0c\x78\xdd\xfa\x5c\x1a\x67\xd5\x2b\x88\x02\x02\x6e\x8c\x10\xc6\x60\x84\x6f\xd3\x7a\x4e\xb1\xb3\xae\xf1\x10\x12\xdd\x4c\xe2\xf8\x82\x32\x1d\xca\x93\x43\x3b\xa4\xe5\x5a\x95\xbf\x9f\x18\xe4\x30\x8a\x25\x76\x4d\xdc\x18\x21\x8c\xc1\x08\x2b\xbe\x3a\xb8\x91\x5b\x76\xde\xc9\x17\xe9\x1d\x2c\x8b\x94\x43\x3b\x2f\x94\x1f\xf2\x79\x6a\x9b\x46\x5e\xef\x35\x2e\x96\x93\xc5\x8a\x02\x02\x6e\x8c\x10\xc6\x60\x84\x86\xea\x83\x83\xc5\xf5\xc7\x7f\x0b\x76\x14\xdc\x6b\x25\x5b\x69\x68\xf1\x6d\xcf\xc9\x29\xfd\xb0\x96\x47\x2e\x67\x66\x9b\xd0\xa3\x83\x02\x02\x6e\x8c\x10\xc6\x60\x84\xfb\x1e\x4f\xe5\xc9\xbf\x26\xb5\x0d\x22\xa1\x8a\x4c\x9b\xc8\x2a\x64\x78\xd8\x79\x93\x92\x31\x56\x66\x34\x66\x92\x40\xfb\xc2\x9e\x17\x05\x84\xff\x88\x11\xee\xd6\x77\x76\xc2\x84\xc1\x08\x7f\xb7\x57\x41\x9e\x81\x62\xd0\x9b\xf8\xad\x7a\x06\xb8\x23\x92\xa4\x24\x95\xe9\x70\x30\xdd\xe1\xcb\x04\x5d\x57\x8b\x53\x16\x00\x05\x04\xdc\x18\x21\x8c\xc1\x08\x97\xe6\x8b\x85\x2f\x79\x5b\x5f\x32\xb3\xe1\x67\x79\x24\x44\x3d\x75\x97\x27\xb4\x60\xe3\x9d\x6f\xc4\xcc\xcf\x05\x23\x0f\x2f\x73\x51\x14\x10\x70\x63\x84\x30\x06\x23\x24\xd1\xdf\xc7\x82\xd2\xce\x5f\x4a\xc9\xe7\x8b\x17\x24\xf9\x20\x9d\xec\xf4\xcb\xbd\x70\xc4\xe4\xde\x3d\x02\xc5\xda\x26\x7b\xc5\x45\x14\x10\x70\x63\x84\x30\x06\x23\x34\x6a\x73\xff\x29\x9f\x4a\x9d\xf5\x8e\x71\xb9\x5a\xe1\x2c\xbb\x4e\x44\x75\xb7\xe3\x13\x9d\xcc\x63\xd9\xfd\x6b\xea\x88\x5f\xaf\x25\x0a\x08\xb8\x31\x42\x18\x83\x11\xbe\x4e\x57\xa9\xfb\xf2\x65\xc5\x38\x86\xe0\xbe\xdf\x99\x3e\x64\xff\xc9\xbd\xce\x0e\xe4\x83\x76\xb3\x87\x03\x0d\x9c\x97\x3d\xc4\x20\x14\x10\x70\x63\x84\x30\x06\x23\xfc\x41\x67\xe4\x1b\xfc\x5c\x50\xb2\xe3\x30\x6b\xa4\x81\x95\x29\xc9\x28\xcd\x85\xfe\x7a\x8f\xa1\x70\xae\x66\x86\x88\xa7\x22\xa3\x14\x28\x20\xe0\xc6\x08\x61\x0c\x46\xd8\xc2\x96\xac\xc0\x3d\x13\x4e\x2d\xa9\xe6\xdb\xd0\x72\x2d\x76\x22\x2a\x48\x59\xc2\xe3\x21\x35\xf2\x46\x98\x2a\xec\x11\xed\x03\xe2\xd8\x89\x1b\x23\x84\x31\x18\xa1\x7a\x23\x59\x83\x7e\xd4\x89\x70\x5b\xdf\x35\xae\x32\x6f\xcd\x45\x9b\x9a\xba\xbd\xde\xaf\x36\x48\x48\xaf\x5d\x1a\xf1\xdb\xdf\xc3\x8d\x02\xc2\x7f\xc4\x08\x77\x5b\x99\x77\xc2\x84\xc1\x08\x8f\x19\x9d\xbf\xbf\xde\xa5\xa4\x3b\xaa\x23\xf5\x98\xec\xe5\xb3\xa4\x4f\xb7\x5c\x64\x4a\x3c\x1d\xe2\x0a\x69\xed\x9e\x93\x4c\x47\x79\xa3\x80\x80\x1b\x23\x84\x31\x18\x61\xf6\xf7\xe5\xae\x4d\x99\xc9\x2f\xb4\xe9\xd5\x14\x0f\xce\xe6\xa0\x92\xe7\x39\x6e\xd3\x4c\x05\x6c\x47\x1c\x4c\xb0\x51\xb6\x37\x26\x86\x09\x37\x46\x08\x63\x30\xc2\x11\x43\x4d\x3f\xf5\xa9\x12\x9e\x84\xcc\x03\x1c\x1c\xd3\xc1\xad\x89\x55\x0c\x09\xd7\x0f\x9d\xf6\x2b\x0f\x61\xf8\x60\x4a\x73\x4c\x12\x05\x04\xdc\x18\x21\x8c\xc1\x08\x75\xc5\xd4\x28\x3c\xf9\x0a\xcb\xda\x74\x25\x36\xbe\x91\x56\xa5\xf5\xde\x3c\x14\xee\xf2\x6c\xf6\x5d\x19\x89\xa0\x5a\x53\xee\x0d\x62\xe3\xc1\x8d\x11\xc2\x58\x8c\x70\x31\xf0\xde\xfb\x84\xdc\xeb\x63\x6f\x07\x3b\x35\xe6\x5c\xfa\x98\x54\x54\x8e\x68\x6c\x8d\xce\xbe\x41\xe4\x2a\x0f\x8f\xc8\x12\xf7\x25\xb8\x31\x42\x18\x83\x11\xda\xbd\x37\x35\xf4\x89\x5d\x13\x57\xdb\x2e\x33\x5c\xb5\x32\xf3\x95\x08\xa1\xe7\xd8\xeb\x15\x6b\x1c\x31\x91\xad\x23\xdd\xec\x42\x5c\xfd\x70\x63\x84\x30\x06\x23\x3c\x5e\xb6\xdf\x71\x15\xda\x50\xcb\x8e\xdb\x54\x52\x31\x94\xd5\xec\x93\x4c\x4a\x65\x72\xdb\xb8\x9b\x21\xaf\xd7\xe2\x94\x15\x6e\x81\x02\x02\x6e\x8c\x10\xc6\x60\x84\x3f\xf6\x4e\x3b\xbe\xaa\x4d\xbd\xf1\x58\xa3\xcc\x9a\x83\xc6\x32\xd5\xe2\xde\x1b\x72\xc1\x57\x4c\x7f\x46\x86\xcf\xca\x96\xed\xe9\xb2\x42\x01\xe1\x3f\x62\x84\xbb\xcd\xae\x3b\x61\xc2\x60\x84\x8e\xda\x53\x45\xdf\x9e\x85\x93\x9b\x47\xe8\xd0\x6c\xa2\xc6\xb6\x61\x71\x86\xfa\x84\xd3\x42\x09\xaf\xfe\x3e\x31\xa6\x2f\x3f\xa6\x81\x02\x02\x6e\x8c\x10\xc6\x60\x84\x95\xcd\x61\x56\xf4\xaa\x71\xeb\x1f\xc7\x7e\x48\xf9\xad\x1c\xad\x6c\x9e\xfd\x28\x5d\x7f\x56\xc0\x4a\x4d\x35\xcc\xd0\x8d\xcb\xfe\x08\x0a\x08\xb8\x31\x42\x18\x83\x11\x7e\xbe\x64\xf5\xe9\x66\xdf\xfd\x26\x14\xd2\x7c\xf1\x60\xec\x57\xaa\x57\xdf\xf1\x17\x1d\x99\xe6\xc6\x72\x3d\x76\xae\x77\xa5\x94\xb8\x50\x40\xc0\x8d\x11\xc2\x18\x8c\x90\xa7\x6c\xbf\xf9\x9e\x8f\x05\x32\xc7\x4e\x16\x49\x1c\x0d\x92\x20\xa1\x39\xd6\xe3\x2c\xb3\x20\x34\x71\x80\xaa\xa4\x7c\x46\x5d\xdb\x10\x05\x04\xdc\x18\x21\x8c\xc1\x08\x7b\x8f\x90\xd1\x05\xdc\xb6\x8f\xe6\x7b\xfe\x63\x80\xcd\xf4\x3a\xe5\xcb\xb5\x03\x33\x8f\x3c\x6a\x5a\x52\x0e\x9c\x1a\x59\x2d\x2d\x26\xa0\x80\x80\x1b\x23\x84\x31\x18\x61\xed\x91\x96\xbb\x96\x7e\x7e\x7e\xb2\x9d\x09\x9e\xae\x65\xe7\x3a\x6b\x5a\x52\x9c\x5a\x2e\xec\x49\xb8\xf5\x81\xd5\x9d\xaa\x36\x95\x07\x05\x04\xdc\x18\x21\x8c\xc1\x08\x33\x56\x2a\x5f\xf9\x18\x5c\x45\xcd\x7e\xbf\x6f\x5a\xe6\x3c\xdf\x7d\xef\xf2\x53\x92\xa7\xa2\xfe\x74\xdf\x6f\x43\x95\x86\x5a\x6f\x88\xa3\x24\x6e\x8c\x10\xc6\x60\x84\xd7\xbf\xd3\x67\x3e\x99\x50\x9d\x61\xe6\xa7\x3e\x2a\xd3\xc0\xdd\x71\xf3\x59\xfd\xfa\x62\xcb\xb5\xa7\xa3\x37\x87\x2f\x7d\x33\x21\x9c\x42\x01\xe1\x3f\x62\x84\xbb\xed\xee\x76\xc2\x84\xc1\x08\xa3\x3c\x05\xbf\x1a\x15\xaa\x6d\xd1\xd0\xa8\x5b\x1e\xdb\xd0\xf7\xd7\x1f\x8f\xeb\xa7\x7d\x67\x16\xf5\x7b\xbf\x67\x3c\x9b\xd0\x30\x71\xcf\x84\x1b\x23\x84\x31\x18\x61\x36\xed\x57\x9f\x92\x0c\x8d\x81\x1c\x6f\xb3\x99\x73\xee\x3c\x01\x3f\x0c\x2a\xf9\x5f\x08\xbe\xb9\xbe\x39\x1b\xf6\xfc\x49\xc5\x0c\x71\xc9\xc7\x8d\x11\xc2\x18\x8c\xf0\x93\xed\xf8\x3e\x1d\xb2\x0f\x2b\xa5\xc8\xa4\x06\xdc\xcf\xb0\x40\x12\x5c\x61\x34\x1d\x93\x51\xd4\x58\x39\x5c\xb0\x29\xf7\xc6\x11\x05\x04\xdc\x18\x21\x8c\xc1\x08\xbb\xe3\x4d\x2f\x65\x4c\x3d\x8b\xac\x43\x0a\x24\x49\x6f\xd7\x14\x18\x3b\x9a\x35\x77\x25\x75\x0a\xf4\x7e\x89\x5b\xb7\xf7\xca\x25\x76\x42\xdc\x18\x21\x8c\xc1\x08\xc9\x79\x1e\x74\xbe\xbb\x4d\xc2\x56\x7a\xf3\x0a\xb3\x67\xd4\xfd\x79\x48\x06\x94\x7a\xbf\xfc\xb6\x3e\x99\x77\xee\x87\xb5\x1c\x93\x3c\x0a\x08\xb8\x31\x42\x18\x83\x11\x92\x15\xe5\x46\x0c\x59\xf4\x0f\x35\x0c\xba\x8e\xad\xd9\x77\xfa\x14\x46\x7a\x7c\x77\x97\x5d\x7d\xb7\x50\xb7\xad\x58\x51\x90\x42\x5c\x61\x71\x63\x84\x30\x06\x23\x7c\xa2\x43\x7e\xc7\xfc\x22\xcf\xde\x8b\x3f\xef\xad\xe6\xfa\xe7\xb2\x7f\x81\xee\x6c\xcb\xf9\x33\x5f\x45\xc4\xd8\x5d\x2c\xee\x25\x1e\x46\x01\x01\x37\x46\x08\x63\x30\x42\xba\xdf\xa2\xd4\xe9\x8b\xc5\x59\xb3\xe5\x69\x36\x91\x5e\x9f\x1a\x26\xc4\xfa\xf6\x5e\x95\x0a\x66\x4a\x91\xd5\xa0\x5a\xf3\x0a\xe6\x43\x01\xe1\x3f\x62\x84\xbb\x9d\x7f\xec\x84\x09\x83\x11\x52\x0f\x6d\x2f\xd3\x7d\xb8\x5a\xbd\xd5\xcb\x3e\xc1\x7b\x3a\x1f\x79\xba\xe0\x3f\xd8\x14\x53\xff\x7a\xb2\xa1\x85\x49\xef\xdb\x55\x66\x14\x10\x70\x63\x84\x30\x06\x23\x6c\xb0\x0b\x0b\x73\x09\xbc\x44\xd3\x78\x94\x2a\x60\x70\x4a\xfb\x77\xa6\x72\x0b\xaf\xd3\xb8\xc7\xe7\x4d\xe5\x14\xe1\x4a\x49\x37\x19\x14\x10\x70\x63\x84\x30\x06\x23\x5c\xfd\xb6\xb7\x54\x28\x8a\x36\x7e\x35\xfe\xc3\x72\x24\x38\xaf\x37\xea\x99\xe5\xf1\xe5\x93\x59\x67\x77\x4e\xdb\xa5\x0e\x86\x6d\x26\x14\x10\x70\x63\x84\x30\x06\x23\x9c\xa9\xb5\xf1\x9b\xd1\xa5\x2f\xef\x16\xf1\x60\x6c\x69\x6b\xa4\xbc\x7c\x8e\x77\x84\x53\x8c\xad\x4f\x21\xef\xc0\xa7\x4d\xbf\xc7\xf6\x28\x20\xe0\xc6\x08\x61\x0c\x46\x78\x26\xb1\xb5\xb8\x52\xc0\xe6\x03\x53\x58\xfa\x65\x9b\xd9\xeb\x04\x35\x66\x9f\x98\x84\x04\x13\xe9\x20\xfa\xea\xec\x84\x6b\xb9\xa7\x51\x40\xc0\x8d\x11\xc2\x18\x8c\x30\x58\x67\x4e\x83\x2b\x61\x4a\x10\xa5\x2c\x56\x76\x0d\x12\x63\xed\xce\xad\xf0\x27\xed\x92\xb9\xd0\xc3\x75\x9b\x3e\x5e\xfb\x12\x71\x65\xc2\x8d\x11\xc2\x18\x8c\x50\x29\x93\xa3\x34\x61\xac\x46\x54\x62\x60\x30\x9c\x67\xcf\x67\xc5\x89\x2d\x7f\xa6\xd3\x4c\xa4\xf3\x3d\xa7\x93\xc6\x15\xf9\x0f\xf2\xa2\x80\x80\x1b\x23\x84\x31\x18\x61\xd7\x74\x6e\xcd\x9f\x7d\x9b\x6c\x1c\x67\xbd\xf4\xcf\xaa\x8a\x7c\xeb\x9f\xe2\xad\x7c\xa1\xb8\x6f\xf2\x23\x5b\xc2\x79\x85\xa9\x9c\xbd\x28\x20\xfc\x47\x8c\x70\xb7\x13\xc2\x9d\x30\x61\x30\xc2\xcf\xb3\xc9\xda\x0a\x74\xe2\xa6\xea\xe5\x72\xda\x96\x45\x1a\x2a\x34\x4d\x6a\x8c\xec\x09\x35\x1c\x82\xe6\x32\xaf\x93\x5d\xaf\x12\xe7\x67\xdc\x18\x21\x8c\xc1\x08\xfb\xa9\xcd\xf7\x2e\x0c\xa6\x74\x94\xbc\xfb\xf3\x2d\xb6\xb1\x38\xe0\xe6\xcc\x0b\x45\x81\x71\x83\xb7\x41\x26\x85\x2c\x35\xef\x83\x8f\xa2\x80\x80\x1b\x23\x84\x31\x18\xa1\x61\xa1\x07\x1f\x9c\xd6\xac\x61\x70\x70\xc6\xe8\x43\x80\x83\x83\x60\x03\xc9\xd8\x5d\x75\x95\x05\xca\x3b\xc3\xa5\x4f\x99\x02\x1c\x50\x40\xc0\x8d\x11\xc2\x18\x8c\x50\x4d\xc8\xbb\xa9\x76\x44\x41\x4c\x24\xd0\xa6\x2c\xbb\x48\x48\x51\xbb\x2d\x4b\x4f\x2c\x46\x3b\xcb\x62\x8e\xb4\x4d\xc7\x6b\x43\x0e\x05\x04\xdc\x18\x21\x8c\xc1\x08\x29\x5c\x0d\x62\x42\xca\xe8\xa2\xcf\x5a\x14\x73\xf4\x08\x36\x3d\xdc\x9b\x38\x1a\x95\x3a\x99\xa4\xf7\xfd\xb4\xf5\xe5\xb8\xb9\xbf\xc4\x30\xe1\xc6\x08\x61\x0c\x46\x28\x9c\x87\xf8\xfd\x0a\x08\xa2\x20\x5b\xd0\x95\x7b\xe6\x64\xfa\xc9\xe9\x50\x6e\xfd\x59\xa3\x6a\x1a\xca\x88\xdb\xd6\xb5\x7c\x8a\x7b\x50\x40\xc0\x8d\x11\xc2\x18\x8c\xf0\xe9\xc1\x58\xdd\xae\xa3\xb5\x9c\xd6\x13\x3c\xfe\xf3\xce\x06\x37\xf2\x2d\x5e\x49\xd2\xd4\xfc\x88\xef\x91\x41\xe2\xdf\x1d\x4b\xe0\x40\x01\x01\x37\x46\x08\x63\x30\xc2\xa2\xde\x06\xb1\x1c\xe1\x85\x4f\xcf\xa9\xfc\x9f\xab\xae\xce\x31\x33\x0e\x05\x26\xcf\xdd\xb9\x0d\x77\x7e\x6d\xe7\x17\x0b\xd9\x36\x40\x01\xe1\x3f\x62\x84\xbb\x9d\xa1\xef\x84\x09\x83\x11\x66\x2c\x35\x95\x87\xdf\xa5\x1d\x2a\x6e\x49\x4d\xe6\xd7\x7a\x9c\x7a\x5d\x64\xbd\xce\xc1\x2b\x3c\xcb\xab\xf0\x61\xc7\xd9\xce\x4e\x62\x98\x70\x63\x84\x30\x06\x23\xd4\xfc\x2a\x1c\x58\xcb\xf5\xfe\xed\x1f\x4d\xc4\xe6\x87\x9a\x25\xeb\xd5\x87\x6f\x2e\x54\x50\x66\x96\x9e\xfd\xe5\x52\x70\xf1\x9c\x06\x71\x5f\x86\x1b\x23\x84\x31\x18\x61\x8e\xbc\xf5\x9f\x2b\x7a\xbe\x67\xb9\xea\x9e\xb6\x6d\xcb\x1c\x34\x17\xde\x57\x6d\x34\x71\x29\x26\x36\xc6\x6f\x8b\x4f\x69\xb2\x87\x0a\x05\x04\xdc\x18\x21\x8c\xc1\x08\x83\x6d\xc5\xe4\x96\x59\xaf\xfe\x19\x92\x2b\x1c\xc8\x54\xe5\x66\x4e\xb1\xea\x7c\x74\xa7\x86\x55\x2a\x6b\xd3\xb7\x76\x7a\x43\xcd\x18\x05\x04\xdc\x18\x21\x8c\xc1\x08\x9f\x97\x9e\xdf\x5c\x24\xf9\x5c\x3d\xd5\x6b\xd1\xe2\x94\xb1\xe7\xc0\x55\xfa\xe8\x86\x5f\x4a\x5e\x2a\x67\x58\xc6\x6d\x9d\xf4\x73\xc8\x51\x40\xc0\x8d\x11\xc2\x18\x8c\x50\x75\x2c\x9a\xad\x82\x72\xcf\xd6\xc0\xc7\x93\x92\xe3\x5c\x19\x57\x96\x52\x4a\xa4\xbb\x25\x8d\xae\xc5\x73\x78\x7d\x3c\xd1\x2b\xa2\x87\x02\x02\x6e\x8c\x10\xc6\x60\x84\x6e\xc6\x7f\xf6\xc5\xef\x3f\xeb\xe6\x7e\xef\xa9\xdd\x5c\x6c\xd8\xea\xd2\xab\x35\xf3\xcb\xef\x3f\x1e\x15\x59\xd2\xb8\x75\xc8\x5d\x8a\x0c\x05\x04\xdc\x18\x21\x8c\xc1\x08\xbb\x5d\xb6\xab\x0b\xff\xde\x36\x5b\x91\xfc\xbe\xb7\xbb\x22\xcb\x87\xf3\xde\x58\xdb\xeb\x82\x51\x19\xa6\x9c\x7b\xcb\x6e\xf4\x7f\x89\x61\xfa\x8f\x18\xe1\x6e\xef\xfb\xc4\x5c\xf6\x49\x50\x69\x73\x50\x25\xcf\x1f\xbe\x2b\x60\xf4\x85\x21\xa7\xf8\x3a\xbf\x0b\x7f\x3a\x2b\x5d\x02\xe7\x8a\xc3\xf9\x4d\x96\x2b\x14\xff\x5e\xa0\x3d\x59\xa5\xa8\xe3\x49\xf5\x72\x3c\x3f\xfa\x22\x24\xb6\x36\x41\x51\xab\x99\xc2\x68\xe1\x17\x89\xf6\x49\x3a\x8a\x26\x6e\x3b\x61\xaa\x7f\x4a\xb9\x62\xfa\x1a\x29\x4d\x1d\x75\x42\x26\x04\xee\x6f\x1e\x34\x94\x2a\xcf\x4a\xdd\x57\x9b\xdf\x1e\xb6\xbd\x67\x25\xfd\xa7\x87\x2e\xd7\xbf\xaf\xf1\x44\xb7\xd7\xbb\x97\xed\xaf\x7e\x49\x3b\xdc\x90\xb3\xb1\x50\x22\xa2\x27\x90\x93\xc0\x34\xbc\xd5\xf8\x3c\x3a\x52\x43\xe5\x43\xf6\x3f\xa5\xe2\x75\xb1\x5b\x0a\xb2\xda\xf7\xc8\x8e\xf3\xb1\x2c\xc8\x0a\xc9\x53\x55\x87\x30\xa1\x50\xb0\x45\xe9\xff\xc7\xde\x5f\x87\x55\xf1\xbd\xfd\x1f\xe8\x66\x53\x1b\x49\xc9\xd9\x80\x84\xa0\x94\x48\xb7\x74\x4a\x49\x48\x8a\x74\x77\x2a\x82\xc4\x00\xd2\x88\x74\x09\x22\x08\x88\x08\x2a\x88\x84\xa4\x84\x74\x48\x4a\x08\x48\x49\x23\x20\x21\x28\xe7\xfa\x3c\x1f\xfd\x1e\xf6\x7e\x9e\xf3\xc3\xf1\xbf\x73\x5d\x5f\xff\x51\xe1\x9e\xfb\xb5\xee\x35\xeb\x9e\x59\x35\xeb\xcd\xb6\xc8\xd5\xfb\x89\xf1\xf1\x09\x53\x0c\xac\x71\x3f\x8f\x5e\x7c\x21\x7f\xcd\xfd\xef\xc3\x59\xcd\xfe\xd8\x1c\x58\x83\x16\x63\xb3\x4f\x2e\x09\x4d\x2a\x0e\xb9\x0c\x25\x9f\x30\x7d\xbb\x26\xce\xe8\x31\xad\x72\xd9\x84\x8c\x44\xb3\x6b\x0f\x7b\x4c\xee\xe0\x71\xb0\x6b\x7e\x1f\xd3\x59\x61\x5c\x05\x0a\xb9\x8d\x8e\x93\xeb\x82\x54\xa1\x4d\x6e\x03\xe7\x08\x29\x75\xd4\x29\x25\x34\x2f\x05\x54\xb0\xe9\x95\xad\x04\x3a\x4d\x15\x2a\x5f\x0d\x0d\x5c\x5c\xb5\xfa\xcf\x62\xdf\x69\xb5\xfa\xfb\x89\x86\x26\x46\xa8\xb2\x70\x90\x76\xf8\x50\xc7\x24\x6a\x89\x75\xe5\x0b\x6e\x37\xd7\x59\x7f\xc9\x5b\xed\x9d\x72\xea\xb5\x99\x0e\x3f\xe5\x0e\xba\x59\x40\x24\x02\xb2\x18\x21\x1c\x4d\x8c\xb0\xaf\x42\xea\x7b\x67\xe4\xa5\xe5\x8d\x8d\x44\xfa\x9b\xb7\xee\x5f\x96\x90\x1b\x5a\xa0\x59\xe3\x49\x26\xe0\x75\xc9\x7d\xbb\x2b\xa3\x08\x22\x11\x90\xc5\x08\xe1\x68\x62\x84\xfe\x72\xe7\x70\x9a\x7f\x60\xcb\x18\xce\xd7\x8c\x37\x05\xcd\x58\x4c\xa4\xd9\x78\x93\xb3\x97\xf5\x84\x3d\xa1\x7d\xe1\xe0\x26\xfc\x4f\x17\x04\xb2\x18\x21\x1c\x4d\x8c\x90\xa4\xd9\xe5\xb8\xe3\x8a\xdb\xf5\x4f\x7c\x9d\x1e\xd3\xb3\x04\xe1\x5f\xc9\x84\x32\x88\xc7\xbe\x08\x5f\x9e\x93\xf5\x02\x58\x9a\x74\x41\x24\x02\xb2\x18\x21\x1c\x4d\x8c\x30\x22\x9e\x96\x9d\x9f\x62\xc2\x7e\x15\xd9\xbf\x67\x8f\xc8\x0f\xf2\x38\x1a\xbb\xe5\xdb\x1a\x16\xb0\x90\xe6\x8e\x4c\xec\x9f\xe0\x05\x91\x08\xc8\x62\x84\x70\x34\x31\xc2\x9f\xd6\x41\x98\xee\x7a\xf9\x4d\xc1\x1d\xed\x24\xc8\xd1\x61\xef\x33\x05\x75\xe5\x83\x0d\x96\x0e\x06\x0d\x75\x13\x49\x72\xa2\xac\x20\x12\x01\x59\x8c\x10\x8e\x26\x46\x08\x37\xee\xf6\x5d\x7d\x5d\xa1\x7b\xe9\x82\xf7\x47\x43\x27\xfe\xa3\x0f\xd1\x62\xc4\xa6\xec\x49\x82\xb5\x77\x25\x53\x83\xaf\x77\xbb\x80\x48\x04\x64\x31\x42\x38\x9a\x18\x61\x20\xc7\x54\xa8\xd3\x19\x3d\xdd\x5d\xc3\xdc\x33\x4c\xb3\x6b\x6d\xbd\x9c\xd1\x2c\x33\x65\x8d\x48\xdb\x8f\x16\x2d\xaf\xc7\x61\xd2\x20\x12\xf1\x97\x62\x84\xa7\x3d\x77\x7e\x27\x13\x9a\x18\xe1\x39\x02\x9c\xd9\xf5\xdb\x06\x53\x79\xa3\xb8\x45\xeb\xc7\x92\x65\x1e\x79\xcf\x67\x6c\xca\xef\x1e\x1f\x3f\x1f\xf3\x35\xbe\x7b\x5f\x14\x44\x22\x20\x8b\x11\xc2\xd1\xc4\x08\x7d\x92\x1a\x10\x0c\x17\x9f\x52\xf9\xd9\x47\x5e\x2b\x86\x45\x5a\xda\x74\xfc\xb4\x94\x89\x19\x4a\x59\xb7\xd0\x0e\xdd\xc4\x7f\x80\x00\x91\x08\xc8\x62\x84\x70\x34\x31\xc2\x90\xd6\xfb\x4b\x25\x71\x87\xcf\x47\xa4\x12\x05\xb3\x92\x5c\xb7\x45\x5a\x55\x17\xc9\x54\x2b\xad\x76\xd8\xa3\xd5\x57\x8a\x0f\x88\x41\x24\x02\xb2\x18\x21\x1c\x4d\x8c\x90\x81\xd3\x8d\xd4\x86\x74\xe9\x8e\x75\xf4\x71\xea\xe1\x57\x95\x12\x7b\x07\xe2\x44\xce\x4a\x6a\x7c\x66\xfc\x30\x0b\x19\xe1\xb5\x1b\x20\x12\x01\x59\x8c\x10\x8e\x26\x46\x38\xcc\xb9\x1a\x8e\xd5\x5b\xcb\x93\xe6\x13\x40\xa7\xff\x20\xbb\x29\x49\xf8\x8a\xf9\x47\x44\x1f\x66\xfb\xed\x04\xfe\xbb\x34\xcc\xff\x0c\x8e\x21\x8b\x11\xc2\xd1\xc4\x08\xcb\x24\x42\x83\xd4\xee\xbc\xd7\xa3\x61\x79\xed\x48\x47\x20\xbe\xf7\xf5\x48\x26\xd6\x64\xdc\x8d\xcd\xc1\xd7\x32\x96\x69\xd0\xff\x9f\xee\x01\x64\x31\x42\x38\x9a\x18\x61\xa8\x98\x61\xec\x01\xdb\xa3\xcc\xac\xfa\x81\x36\x9a\x6f\x6c\x17\xdb\xe9\x24\x35\xa2\x05\x52\x0b\x48\xbb\x12\x13\x0d\x2f\x5d\xd7\x00\x91\x08\xc8\x62\x84\x70\x34\x31\xc2\x9b\x7c\x8e\xfc\x4c\xc5\x58\xeb\xb5\x03\x79\xda\x0d\x73\x99\x17\x56\x57\x7e\x36\x1f\x1d\xca\x5c\x54\x48\x79\x9a\x5a\xb6\xfc\x55\x0f\x44\x22\xfe\x52\x8c\xf0\xb4\x37\xf3\xef\x64\x42\x13\x23\x7c\x58\x9d\x8a\x15\x15\xd2\xfc\x29\xec\xfb\xfd\xc6\x77\xdc\x41\xd1\x5d\x66\x5b\x5a\x17\x2a\xb7\xb8\x2d\x09\xb9\x83\xda\xe2\xaa\xcf\x83\x48\x04\x64\x31\x42\x38\x9a\x18\xa1\xbc\xd8\x97\x75\x9d\x63\xc1\xb1\xc2\x0f\x99\x88\x6b\xbd\x77\xe1\x60\x9e\x0b\xf1\xa7\x3b\xb5\x81\xef\xdb\x1b\xb5\xb5\xa8\x18\x68\x41\x24\x02\xb2\x18\x21\x1c\x4d\x8c\x90\xeb\x70\x89\x65\x65\x45\xfe\x52\x35\x43\x20\x5f\x7e\x2b\x70\xce\x76\x01\x5b\x78\xc4\x7b\x46\x1c\xf7\x76\x4a\xc4\x81\x3b\xd1\x3f\x6f\x58\xc8\x62\x84\x70\x34\x31\x42\xbf\xbb\xaf\xdd\x4c\xad\x35\xdf\x76\xd3\x33\x84\x45\x51\xee\xa4\xbb\x35\x55\xbf\x14\xdd\x79\x50\xdb\xba\x3d\x38\x87\x30\x6b\xa1\x02\x91\x08\xc8\x62\x84\x70\x34\x31\xc2\xf7\x37\x73\x8d\x34\x6d\x29\xf1\xb1\x25\x87\xf0\xad\xf7\x2e\xdf\x1a\x2b\x41\xfa\x32\xc9\x5b\x3e\x2c\x00\x69\x02\xdc\xef\xf1\x31\x80\x48\x04\x64\x31\x42\x38\x9a\x18\xe1\xda\x74\x9d\x38\xb7\x40\x71\xec\xd8\x2b\x3f\x5a\xbb\x25\xf2\x1d\x83\x7a\xa9\x6b\xb9\x6d\x4f\x2b\x54\xec\xcf\x8d\x88\xda\xe8\x93\x80\x48\x04\x64\x31\x42\x38\x9a\x18\xe1\x2c\x75\x83\x29\x1e\x61\x3e\xd7\x19\xfd\x8b\x7d\x19\x2e\xfd\x94\xc7\x91\xd3\xa5\x26\x6e\x7b\x36\xf0\xc6\x83\x7c\x69\x81\xbe\x7f\x1a\x3a\x64\x31\x42\x38\x9a\x18\xe1\x33\x45\xf8\x57\x5e\xa6\x4c\x8e\xea\x27\xb7\x68\x1f\xbe\x5a\xa5\xa2\x7c\x1a\x45\xb7\x58\x3c\x6a\x1c\xa1\xbb\x34\x48\x68\x5b\x8a\x0b\x22\x11\x7f\x29\x46\x78\x5a\xdf\xf5\x77\x32\xa1\x89\x11\x9a\x3c\xe3\x5f\x8c\x75\x31\xfa\xde\xc7\xce\xff\x70\x45\x34\xd7\x3b\xe2\xf8\xd5\x35\xc2\xa0\xf5\x63\xa6\x0c\x8d\x67\x9c\x89\x96\x4c\x20\x12\x01\x59\x8c\x10\x8e\x26\x46\x78\x1b\x6b\xc0\x2a\x6e\x49\x39\x94\x79\xf9\x1e\x3e\xc7\x50\x8a\xf0\x7b\xc9\xdb\x93\x6b\x37\x87\xe6\x86\xde\x7c\x76\xbb\x52\x36\x82\x01\x22\x11\x90\xc5\x08\xe1\x68\x62\x84\xe4\xc1\x56\xe7\x32\x16\x59\xf0\x98\x55\x8a\xd5\x52\x3f\xf7\xe0\x3e\x7d\x25\xd9\x60\x21\x29\xb9\xf7\x80\x3d\xcf\x83\xc9\xd8\x99\x10\x44\x22\x20\x8b\x11\xc2\xd1\xc4\x08\xbf\xec\x51\x1b\x5f\xb0\x64\x5d\x84\xe1\x0f\xda\x33\x3b\x5e\xbf\x91\x91\x65\x32\x55\xaf\xb7\xfb\xbe\x72\xe3\xa9\xd3\x19\xd9\x56\x09\x10\x89\x80\x2c\x46\x08\x47\x13\x23\x7c\x38\xa7\x63\x36\x75\xed\x7a\xa8\x1b\x4e\x4a\xf8\x23\xf2\x5a\xf5\x2c\x35\x09\xdb\x5b\xa6\x44\xd2\x5a\x7d\x4c\x2c\x2f\x96\x47\xfe\x19\x1c\x43\x16\x23\x84\xa3\x89\x11\x9e\xbb\x47\x42\xb1\x5f\x2a\xdd\x3d\x98\x33\x5c\x4a\xa5\x1f\x52\x9c\x52\x22\x27\xf5\x3c\xb9\x60\xf8\x0d\xd3\x8f\x66\xab\x42\x76\x79\x10\x89\x80\x2c\x46\x08\x47\x13\x23\x24\x5d\xac\x6b\x7d\xc3\x2f\xbe\x55\xa6\x71\xb4\x25\x61\xc7\x8a\xbb\x24\x42\x2f\x54\x2c\xf5\xb4\x57\x34\x2b\xb6\xd6\xfd\xec\x7b\x7d\x10\x89\x80\x2c\x46\x08\x47\x13\x23\xec\x13\x99\x8f\x55\x8f\xb8\xf1\x39\x60\xe9\xf3\xda\x1b\x07\x7a\x69\xee\x57\x4f\x49\xc6\x6e\x79\xef\x86\xb2\x2b\x06\x26\x73\x04\x0b\x82\x48\xc4\x5f\x8a\x11\x9e\x36\xba\xfb\x9d\x4c\x68\x62\x84\x26\x75\x59\xda\xa2\xda\xac\xd5\xbe\x5b\x8a\x48\x82\x43\x0e\x16\xad\xd9\x6f\xec\xf8\x45\xc3\xb1\x33\x15\x3f\xef\x82\xf4\x6f\xff\x19\x07\x40\x16\x23\x84\xa3\x89\x11\xda\x4f\x10\xfe\xfc\x84\x79\xae\xbf\xe5\x70\x70\xef\x9e\xdd\x83\x09\x8f\x10\xfd\xb8\xa7\xef\x8e\xaf\x8b\xb9\xec\x74\x9f\xef\xdf\x52\x02\x91\x08\xc8\x62\x84\x70\x34\x31\xc2\xb0\xcc\x3b\x67\xa4\x17\x57\x9f\x5d\x58\xa5\xd3\x4f\xda\x3d\xaa\x36\x3f\xcb\x1f\xc4\xa2\x4e\xda\xc3\x29\x8d\x43\x1b\x43\x73\x59\x15\x44\x22\x20\x8b\x11\xc2\xd1\xc4\x08\xaf\xbf\xda\xe9\x2d\x14\xb0\xb3\x6d\x0d\x11\xc0\xe2\x67\xe9\x77\x50\xa3\x76\x52\x38\xac\x46\xe6\x28\xf8\x56\xa9\x7f\x5d\x0b\x17\x07\x91\x08\xc8\x62\x84\x70\x34\x31\xc2\x9f\x73\x5c\x4a\x71\x07\xa0\xeb\x5c\x27\xc7\x50\xd1\x39\x89\x77\x29\x94\x6a\x35\x53\xcf\xe9\x6e\x19\xc7\xf5\x55\x6a\x7c\xc5\xa6\x07\x91\x08\xc8\x62\x84\x70\x34\x31\x42\x5e\xe9\xd8\x25\xcb\x1a\x78\xe3\xba\xb1\x71\xe4\xcc\xd1\xbb\x65\x86\xeb\x94\x4c\xdf\x6d\x6b\x98\x69\x49\x3c\xdf\xbe\xc1\x24\xbd\x04\x22\x11\x90\xc5\x08\xe1\x68\x62\x84\xf5\xc5\xdc\x11\xeb\xdf\x1c\x22\x9f\xc4\xe2\x21\xa6\xa5\xbc\x37\x92\x87\x33\xa8\x8f\x2d\x72\xe8\xc0\xac\x7e\x5e\xaf\x96\x28\x72\x10\x89\x80\x2c\x46\x08\x47\x13\x23\x54\x20\x2b\xbb\x18\x95\x4d\xc8\x49\xfd\x2d\x63\x8a\xf4\x9b\xe5\xab\xbd\xc7\x57\xa3\xed\x87\x9a\xdd\x6f\xa8\x2f\xc3\x1c\x6c\x5a\x5c\x41\x24\xe2\x2f\xc5\x08\x4f\x9b\xff\xf8\x9d\x4c\x68\x62\x84\x6b\x1c\xf3\x63\x5f\xd9\x4a\x33\x49\x05\xa6\xe3\x95\x2d\x5d\x42\x84\x39\x7d\x76\x95\x1f\x3f\xe9\x7b\x6c\xb5\x70\x09\x71\x9e\xd7\x12\x44\x22\x20\x8b\x11\xc2\xd1\xc4\x08\x2b\xde\x2c\x49\x81\xd8\x5c\x15\x22\x5b\x3a\x3f\xfa\xe6\x09\xee\xbe\xc4\x37\xde\x6d\xf9\x92\x35\x2a\xf0\xb6\x65\x56\x54\xf5\xf6\x3f\x5d\x30\xc8\x62\x84\x70\x34\x31\xc2\xf0\x49\xed\xd4\xe5\x33\x47\x59\xf7\xb7\xd5\xef\xa4\x98\x73\xc6\x50\x2c\x2c\x13\xf8\x7c\x8e\x15\xb5\x11\x9c\xb2\x71\xb5\x99\x92\x04\x91\x08\xc8\x62\x84\x70\x34\x31\xc2\xb2\xcc\xcc\x3a\x5c\x72\xc5\x5b\xce\xe3\x57\x3a\xbf\x33\x0c\xff\xa8\x65\x1b\xd7\x6d\x68\xca\xd4\x20\x2a\x85\x85\x2d\x68\x85\x3a\x82\x48\x04\x64\x31\x42\x38\x9a\x18\xa1\x0e\xcf\x67\x8b\xce\xeb\x96\x1e\x1f\x88\x38\x46\x64\x9f\xc0\xf7\xca\xde\x6d\xb7\x6d\xed\x48\x2c\xbb\x99\x14\x70\xe8\x51\x4e\x63\x81\x48\x04\x64\x31\x42\x38\x9a\x18\xa1\x98\x67\x57\x72\x64\xb9\xf5\x68\x1a\x85\x12\xc9\x9e\xdb\x34\xff\xbd\xb6\x7d\x31\x89\x4b\x7e\xa3\x11\x80\x04\x3f\xad\xc9\xac\x2c\x88\x44\x40\x16\x23\x84\xa3\x89\x11\xde\xa8\x62\x2c\x64\xbc\x55\xf7\xa3\x87\xa7\x8d\xf5\x63\xfb\xb2\x48\x7e\xb4\x87\x63\x34\x7c\xb9\x83\x6c\xe2\xa3\xf9\x45\x09\x66\x7e\x10\x89\x80\x2c\x46\x08\x47\x13\x23\x5c\xf5\x8e\xba\xb5\xc5\xfb\xc4\x9b\xfc\xf8\xee\x11\x9f\x56\xd3\x37\x32\x86\x0d\x4b\x72\x9b\x00\x83\xe7\x01\x71\x88\xa8\xad\x1d\x36\x10\x89\xf8\x4b\x31\xc2\xd3\x66\x08\x7f\x27\x13\x9a\x18\xe1\x40\xb8\x41\x68\x12\xe1\xd3\xe0\xe7\x8e\xa6\x55\x6f\x67\x57\x71\x9c\x08\x12\xe4\xf1\xce\xaa\xbe\x6b\x1f\x57\xe8\xa6\x13\x83\xab\x81\x48\x04\x64\x31\x42\x38\x9a\x18\x61\x9b\xa2\x97\x72\x9e\x4b\xfa\xfb\xac\x8b\x3c\x6d\x02\x9b\x59\x42\x9d\x79\x9d\x72\xba\x61\x43\x18\xb2\xdf\xa8\x3a\x34\x58\x87\xfe\x19\x97\x41\x16\x23\x84\xa3\x89\x11\xa6\x67\xbb\x6c\x1a\xdd\xa7\x66\x7b\x93\x94\x84\xdd\xa9\x75\xed\x33\x29\x88\xa5\x6c\xe1\xf7\x33\x69\x35\x48\x5b\x6f\x8d\x32\x8e\x18\x44\x22\x20\x8b\x11\xc2\xd1\xc4\x08\xf3\x1b\x03\xf0\xad\x5e\x8b\x7d\x6c\x3e\x3b\x46\x91\x99\x69\x76\xb5\x9a\xab\xfa\x9b\xcc\x3e\x96\x19\x9f\x30\x3e\xb9\x4a\x45\xe0\x3f\x6f\x0d\xc8\x62\x84\x70\x34\x31\xc2\x88\x92\xa7\x87\x7e\x29\xb0\x0c\xf6\x8f\x71\x57\xce\xfb\x7b\x15\x66\x4b\x8b\x9a\xab\x9d\x99\x7c\x8e\x05\x5b\xf3\xb8\xfb\xd8\xc0\x19\x44\x22\x20\x8b\x11\xc2\xd1\xc4\x08\xf7\x2d\x6e\x2d\xce\xd7\x08\xe1\xe3\x3a\x88\xfd\x50\xc6\x7c\xe8\xfe\x43\xc2\xfc\x99\x74\xf4\x45\x64\x5a\xaa\xa4\xaa\x66\x18\xaf\x00\x88\x44\x40\x16\x23\x84\xa3\x89\x11\x6a\x86\xad\x1f\x51\x8c\xb0\xe8\x50\xe1\x76\x7e\xa1\xe9\x7f\xdf\xad\x36\xd2\x69\xdc\xa0\x20\xad\x3b\x83\xc1\x7a\x3e\xdd\x2f\xfd\x1a\x88\x44\x40\x16\x23\x84\xa3\x89\x11\x76\x0a\x78\x7e\xb7\x36\x89\x26\x43\x3c\xb3\xc0\xf1\x98\xd2\x21\x4d\x8f\x97\x2e\xd7\x52\xaa\xb7\x5d\xda\x36\x2d\xff\xd8\x96\xc6\x0b\x22\x11\x7f\x29\x46\x78\xda\x1c\xfa\xef\x64\x42\x13\x23\x5c\xa8\x1f\x63\x30\xba\xcd\x4b\xb3\xbd\xb5\x88\x05\x72\x22\x01\xc1\xa3\xa7\x25\xb8\x99\xce\x63\x93\x62\x5c\xdd\xe1\x14\x83\xff\x0c\x14\x21\x8b\x11\xc2\xd1\xc4\x08\xaf\x9b\x17\x95\x67\x6c\x68\x79\xd8\xb8\x8e\x08\x2e\x31\x6d\x99\x93\x74\x70\x18\xd3\x11\x90\x24\xd9\x12\x07\x1b\xe8\xc7\x6c\xdb\x83\x48\x04\x64\x31\x42\x38\x9a\x18\x21\xd3\xa5\x70\xbd\x17\x57\x81\x3a\x12\x01\xf0\xcb\xde\x08\x6d\xd5\xea\x0f\xa7\x01\x62\xe3\x9b\x8a\xef\xc3\x6f\x38\x3a\xbb\x4a\x53\x83\x48\x04\x64\x31\x42\x38\xba\x18\xa1\x4a\x3a\x9d\xae\x58\x1f\x46\xd9\xe8\x02\x76\x1a\x4b\x57\xca\xdb\xe1\xce\x1f\xac\xe7\x6c\xab\xc6\xb7\x71\x2d\x53\xf1\xcb\xfe\x49\x26\xc8\x62\x84\x70\x34\x31\x42\x35\x3c\xec\x35\x02\xc2\x78\x72\x6f\x7d\xc2\xb9\x90\xe2\x39\xf7\x19\x7f\x93\xab\x2a\x7b\xe4\x7b\xc1\x34\x2c\x38\x83\x3b\x76\xcc\x20\x12\x01\x59\x8c\x10\x8e\x26\x46\xf8\x81\x6d\xe2\xd2\xfb\x40\xb5\x3b\x8e\x0e\x87\xf8\xda\xe3\x80\xac\xe2\xa3\x81\x59\xdf\x83\x82\xbd\xcf\x5b\x1c\x6c\x57\x4a\x39\x79\x40\x24\x02\xb2\x18\x21\x1c\x4d\x8c\x30\x9b\xb0\x6f\x9d\x1c\x2b\x91\x35\x6b\x59\xea\xf3\xec\x36\x16\xf1\x4b\xa7\xc9\x9f\x4b\x7b\xb5\xe3\xf1\x04\xb7\x23\x10\xf5\x6f\x2e\x80\x48\x04\x64\x31\x42\x38\x9a\x18\xa1\xdc\x57\x6e\x0d\xd1\x49\x5f\x80\x11\x41\xea\xcd\xd2\xfa\x79\x7b\x82\x15\x2e\x47\x5f\x6c\xca\xb8\xf0\xc6\xf5\x82\x47\x54\x18\x0c\x44\x22\x20\x8a\x11\x56\x91\xfc\x9b\x4c\x92\xcd\xbc\x43\x19\xd3\x65\xca\x81\xc5\xe1\x6a\xea\x9f\xb4\x75\x02\xe1\x17\x53\x22\x66\x7a\x55\x33\xb3\x3b\xde\x37\x8e\xfe\x2c\x07\x53\xb9\x4f\x4a\x01\x36\x63\x4e\x7f\xf2\x6d\x31\x7a\x78\x61\x49\x3a\x67\xa3\xc7\xeb\x02\x97\x05\x47\xda\xbe\xd0\xcd\x89\xbe\xd2\x88\xc0\xce\xff\x91\x2e\xf8\x6d\xba\x23\xd9\x44\x36\x92\x95\xcc\x8f\x51\x13\x10\x5d\x77\x87\x2a\x45\xdd\xb4\x24\x2a\x36\xf9\x52\x19\x1b\x09\xd3\x4d\x3e\xbb\xdc\x17\xff\x35\xfd\xaf\xe9\x7f\x4d\xff\x6b\xfa\x5f\xd3\xff\x9a\xfe\xd7\xf4\xff\x9f\x4c\xc3\x31\xfe\xac\x33\x10\x76\xc2\x67\x67\x35\x58\xac\xcc\x70\x3f\xa7\xdc\xdd\x63\x27\x2e\x59\xbc\x26\x89\x75\x6a\x8d\xdd\x8f\x9c\x03\x4b\x6a\x3f\xf8\x5e\x09\xfb\xc0\x09\xd3\xc9\x77\xe4\x0b\x75\xdd\xbb\x6f\xf5\x48\xfc\x5f\xd7\xc7\xd7\x50\x4e\xe2\x53\xca\xc7\xf4\xa9\xbc\x2e\xbb\xfd\x56\x1b\xe1\xcb\xd0\x2a\x25\x85\xc4\x84\x21\x31\x61\x41\x52\x52\x39\x18\x7f\xe6\x3d\x18\x86\x11\x2c\x8d\x11\x08\x46\xc8\x60\xf5\x49\x49\x49\x9d\x80\xbd\xb6\xf5\xbc\x3d\x3a\xf1\x44\xb8\xc4\x25\xdb\x55\x5a\xba\xd9\xf6\x8a\x72\xd2\x45\x51\xfb\x36\xe1\x01\x53\x53\xff\x8c\xcf\x9c\x8d\x27\x4c\xe7\xad\xa2\xc4\x81\x6e\x9c\x99\xf1\x07\x14\xaf\x5f\xae\xea\x34\x32\xe5\xa8\xdd\x98\x59\x66\x1e\x15\x11\x6e\xa9\x14\xf1\xbd\xc6\x15\xa4\x08\x03\xfe\xe9\x6d\xc1\x14\x61\x9b\xff\xf3\x77\x90\x94\x54\x90\x94\x94\xc1\x9f\x81\x82\x71\x30\x82\xa5\x19\xc0\x13\xbc\x56\x21\x0d\x61\xf5\xac\x6d\xc1\x17\xfb\xb2\x15\x66\x2a\xac\xca\xde\xd9\x1c\xe7\x1a\x5e\xf6\x9c\x57\x5c\x89\x8d\xff\xb9\x84\xeb\x16\xa8\xfb\x67\x76\xc1\xd2\x81\x27\xdd\x4a\xc1\x3e\x89\x56\xb1\xb9\x39\x11\x3f\x7e\x78\x47\x9b\xaa\x4c\x2c\x78\xec\x76\xf8\xcc\xeb\x2b\xeb\x19\x96\x14\xab\x51\xdf\xb9\x84\x7f\xbb\x3d\xcd\x2e\x58\x1a\x71\xd2\xed\x72\x5c\xc5\xea\x50\x8e\x86\xb8\x89\x48\xb2\x04\xf2\x60\x3d\x93\xc7\x7c\x96\x23\xe8\xbd\x94\x44\x4d\x36\xcf\x40\x53\x7c\xab\xff\x6f\xb7\xa7\xd9\x05\x4b\x63\x9d\x74\xbb\xe8\x6c\x5b\x1d\x6f\x0f\xcf\x1a\x78\x41\xdb\xe4\x27\x75\xf4\x72\x5c\x38\xe4\xa5\x88\x33\x06\x69\x81\x6f\xe9\x8f\x15\x59\xee\xa4\xdf\x6e\x4f\xb3\x43\xab\xdb\x7e\xbf\x0a\xc3\x07\x23\x7e\xd5\xee\xcb\xfa\xfa\x97\x3b\xa6\x16\x94\xcb\xc8\x9d\xb3\x97\x13\x1f\xeb\xac\x15\xdf\xaa\xe6\xca\x64\xfe\xed\xf6\x34\xbb\x60\x69\x38\x4a\x69\xcb\x7f\x72\xa8\x3c\xd4\xcd\x6f\x3c\x28\xe6\xd4\xb7\x93\x9b\x93\x25\x4c\xf2\x19\x6d\x07\x0d\x48\x79\xf1\x27\xde\xca\x5a\x5b\x05\x6a\xfc\x99\x5d\xb0\x34\x22\x10\xbc\xf7\x4f\x63\x55\x81\x61\x64\xeb\xd8\x66\xff\xdb\x9e\xfe\x8f\x06\x76\xf9\xcf\xda\x66\x30\x0c\x16\x2c\x0d\x0b\x0c\x34\xf8\xb3\x14\xfb\xdf\x8d\x11\xde\x65\x96\x28\x58\xe9\x1e\xf6\x33\xfd\x43\xce\xc5\xe3\x17\x8f\x48\x45\x77\xcd\x1d\xd4\xef\x37\xaa\x7d\x7b\x93\xf9\x89\x7d\xd5\xee\x77\x85\x9d\x66\x87\xd6\x18\x75\xf0\xaa\x59\x9f\x50\x27\xeb\x2c\x31\x7d\x7e\xaa\x2e\x45\xf1\xd8\x6f\x5a\xf7\x58\x55\xe9\x99\x6a\xca\xc5\xe6\xa8\xa8\x82\xe7\x67\x7e\xbb\x3d\xcd\x0e\xad\x31\x26\xb1\x57\x8f\x00\x9f\x2e\xe6\xe5\xb7\x3b\x2a\xdc\x35\xf5\x39\xdc\x61\xf3\x11\xa2\x31\xc0\xe9\x3f\xf6\xfa\xe9\xed\x41\xbf\x37\xf0\xdb\xed\x69\x76\x68\x8d\x71\x21\xd2\x40\xa3\x71\x37\x87\xb2\xd8\xa0\x9b\x8c\xd2\xce\x33\xfb\x9b\xff\xa3\xdc\xab\x49\x2f\x0b\xa2\x58\x70\x4a\x1f\xde\xc7\xbc\xf8\xdb\xed\x69\x76\x68\x75\x5b\x10\xf3\xb3\x4e\x78\xed\xf2\xaa\x34\x47\x61\xed\x3b\x26\xdb\xb3\xc4\x6f\x32\xae\xa9\x3c\x5a\x51\xd0\xc4\xcf\x2d\xd1\x1d\x88\x72\xfc\xed\xf6\x34\x3b\xb4\xc6\xd8\x6a\x4a\xac\xbe\x64\xe1\xf1\xd4\x9a\xb9\xea\x3d\xe5\xf2\xf6\xbb\x81\xc8\x82\x18\x86\xe9\x88\x1c\x93\x74\x96\xc1\x50\xd9\x47\x37\x03\x39\xff\xcc\xee\x7f\x1a\xa3\x34\x41\x08\xc6\x9f\xbd\x1d\xc2\x20\x3c\x32\x21\x98\x4a\x49\xfd\x4f\x7b\xa7\xc3\xd0\x81\x11\x5a\xdb\x39\x72\xf1\x70\x99\x59\x58\xb8\x78\x39\x7b\xa2\xfc\x47\xfc\x5f\x67\xd2\xca\x92\x99\x9b\x62\x2f\xae\x47\x99\x76\x38\x2e\xc3\xb5\x63\xce\xf3\x1a\x0b\x97\xa6\xbb\xe3\x9e\x3b\x73\x26\xe7\x91\x86\x8f\x39\xa8\x83\xe1\x65\xdf\x2b\x82\x8f\x98\xd7\x18\x37\xb9\xda\x57\x5b\xa3\xff\x5a\x5b\xe5\x7c\xed\xaf\xab\xd7\xce\x89\x4a\xaf\x8a\x8c\x4c\x99\xf4\xb4\x9c\xa9\x97\xc8\xff\xfe\xc3\x80\xe6\xb1\xde\x72\x7b\xf8\x44\xf3\x4d\x4a\x4d\x6d\xff\x32\x50\x07\xc3\xdd\x55\xd7\x93\x2f\x9a\x71\x6d\x81\xfc\x42\x84\xf7\xe6\x1c\x25\x8d\xbe\x2f\xde\xaf\xab\x23\x04\x7a\xce\xf2\xf8\x4c\xd0\x7e\x6e\x2a\xbf\xcf\x5e\x43\x30\x56\x64\x9b\x47\xac\xa4\x4d\x4f\x94\x5d\x72\xf5\xf1\xe3\x5e\x93\xc7\xa0\x0e\x46\x62\x97\xef\x43\x97\xa1\xb7\xaf\x66\xd2\x9d\x3d\xd3\xee\x2d\x6f\x86\x48\x70\xa9\x30\x60\xe8\xc0\x88\xfe\x8d\xc5\xc9\xcb\xd1\xd3\xce\xc3\xce\x06\xf5\x7f\x36\xff\xba\x7f\xc6\xd1\xa9\x36\x9d\xf3\xfd\x4b\x08\x9d\x11\xa9\x06\xc5\xa5\x1d\x5a\x62\x56\x7f\x7c\xf6\x29\xa3\xe7\x98\x21\xf1\x5b\xf2\x88\xef\x61\xa0\x0c\xcc\x06\x03\xa6\x0a\x9b\x7b\xfc\x1d\x87\xdc\xeb\xa6\xf3\xff\x3c\x29\x4e\x54\x34\xf0\xd3\xbe\xcb\x2c\x37\xd7\x81\x40\xe8\x8a\xb2\xe8\xfd\x7c\x15\x90\x63\xab\x23\x43\x2b\x50\xe3\xc1\x43\xef\x41\x84\x4e\x24\x81\xdf\xbf\x66\x1d\x1d\xb6\x85\x97\x2e\xd5\x9a\xae\x67\xab\x74\xa6\x10\x46\x54\xbc\x53\x09\x3f\x0a\xb6\xba\xcc\xf7\xfd\xac\xa8\xc0\xcb\x1a\xf9\xdd\xb0\x30\x19\x98\x8d\x0c\xcc\x56\x06\x66\x27\x03\xb3\x97\x81\x39\xc8\xc0\x1c\x65\x60\x4e\x98\x30\x55\x18\xdb\x8d\x25\x67\x4b\x1c\x3b\xf7\x7f\xc0\xd4\x30\x53\xf1\x40\x08\x74\xc3\x7f\xcd\xae\xc8\xef\x1d\xde\x76\x3f\x0b\x7b\x38\xfc\x98\x46\x65\xd2\x11\x8f\xd2\xe6\xde\xe6\x4d\x5c\xe5\xd0\xe4\xbc\xad\x38\x73\xf3\x73\x17\x40\x7d\x1e\xcc\x2a\xdf\xe6\xce\xea\xba\x80\xf6\x1b\xb5\x77\xe0\x5b\xef\x5d\xd7\x48\x66\x05\xad\xcb\x28\x06\x65\x97\xfc\xae\x35\xf8\x76\x10\x27\x2f\x19\xd2\xb1\x53\x09\x6a\x1a\x12\x7f\xb3\xf2\x0b\xe3\x18\x6d\xff\x15\x58\x55\x80\x73\x6b\xea\xe4\x16\x8c\xa6\x8e\xec\xd5\xe7\xe2\x60\xf8\xe2\x6b\x35\x65\xe2\x12\x5c\x89\x30\xea\x2a\xc2\xb2\xdb\x19\x0d\xff\x8f\xc0\xb4\x2a\x3e\x4c\xb4\x11\x7c\x98\xfb\x9b\xc0\xb8\x31\x74\x60\x94\xff\xde\xd1\x5b\x56\xee\x76\xd6\x76\x56\x96\xee\x56\x36\x76\x1e\x9e\xee\x77\xfe\xef\x9f\x06\xfe\xca\xb7\x5b\x97\xca\x3f\x29\x7f\x0b\xb8\x36\x88\x29\x43\x89\x2f\x9b\x79\x4b\xc3\x2f\x01\xa7\xe2\xa2\xd7\x87\xe4\x95\x0e\xda\x6d\x5e\x8e\xd0\x60\x19\x98\xc6\x89\x72\x34\x60\xc8\x84\xb0\xe4\xbd\x39\x8b\x60\x36\x2b\xd8\x9b\x0c\x5c\x59\xf6\x9e\x6f\x76\x6a\xa8\xc5\xe8\x4c\x08\x99\xd7\xbf\xbe\xa8\x0f\xa1\xc8\x82\x7f\xe6\x31\x48\x8e\x01\x06\x83\x81\x8f\xcd\x78\xc0\x20\x19\x98\xa6\xd4\x9d\x7f\x2f\x3b\xcf\xa2\x77\x75\xff\x99\x4f\x0f\xb3\xb5\xbe\x9d\x42\xd4\x72\x33\xec\xe3\xce\x54\x04\x9d\x21\x4b\xdb\xca\x4e\x51\x9c\x0c\x4d\xca\xff\xa3\x9e\xf3\x5c\xf2\xaa\x1e\x20\xf3\xda\xa0\x36\x5d\x56\x0c\x1d\x18\xe9\xbf\xb5\xe9\xe1\xe9\xe2\x6e\x66\x63\xe5\xea\x72\xdb\xca\xfd\x7f\xff\xe4\xdb\xaf\xba\x95\x69\xfd\xb9\xba\x6e\xae\xe6\xfa\x59\x80\x28\xc8\x39\x5c\xd9\x55\x93\x6e\xbf\xb1\x79\xb0\xaf\x2d\x8c\x1a\x49\xe8\xdf\x23\x6e\xf6\x40\x11\xa6\xf4\xeb\x8d\xfb\xef\xdf\x4a\x30\x78\x1f\xea\x3f\x54\x60\x58\x33\x30\x91\xe9\xff\xdb\x4a\x2a\x48\x1f\x80\xc1\x27\x1c\x61\xff\xc7\x1f\x3d\x18\x66\xc3\xff\xf5\x73\xcc\x93\x93\x68\xd6\x2f\x68\xfd\x6e\xdf\xf7\x8f\x16\xe6\x33\xe7\x0c\x56\xe4\x3f\xa7\xfa\xec\xbd\x8f\x21\xff\xd5\xe9\x04\x0e\x47\xf6\x97\x04\x3e\x83\xb0\x93\xfb\xe0\x93\x13\x66\x33\x9c\xfa\x1f\x3c\x38\x60\x32\xbe\x97\xa9\xd9\xa4\xf4\x2a\x87\x5b\x85\x2f\xb4\x48\x34\x03\x7b\x3b\x7a\xe0\x30\x47\x6e\xb7\x05\xe3\xcf\xbc\x06\xc9\x32\xc0\xe4\x82\xff\xbd\xa1\x59\x14\x27\x7b\xf1\x21\xb9\xbc\x81\xce\x9c\x76\x2b\x4f\x3a\xe3\x3e\x29\xa6\x56\xa4\xdc\x14\x5f\x0d\xde\x5a\x2c\x8e\xdf\xdc\x7e\xb4\xb0\x2a\x41\xf2\xef\x25\xa5\xf0\x13\x97\x90\xb9\xeb\x79\xf1\x4c\x0f\xe1\xef\x33\xcf\x10\x3c\xd6\x5d\x8f\xf0\xb7\x1a\x7c\x14\x57\x75\x90\x13\xb8\x8f\xdc\xbc\xa8\x35\x84\xfc\xf7\x92\x9c\x93\x5b\xff\x43\x56\xbc\x3b\x22\x7d\xab\x8f\x53\x46\xad\x0e\x60\x3e\xcc\x2e\xd6\x1f\xaa\x82\xbe\x49\xdc\x3b\x66\x35\x7f\x27\xab\xd6\xb9\x4d\x2a\xf8\x67\x85\xf9\xdd\xe9\x0f\x92\x85\x2d\xe3\xca\x80\x18\x82\x7f\x56\xa0\x13\x97\x2d\x9d\xb8\xec\xb4\x42\x9d\xb8\xec\xcb\x3f\x97\xf9\xfe\xd9\x3d\x09\x92\x0b\xc4\x80\x61\xfc\x5b\xd7\xff\x94\xf3\x7f\xf5\xf1\x7e\xfd\xe6\xcb\xff\xcf\xdf\x2c\xfd\xef\xdf\xfc\x7a\x13\xd5\x15\xec\x2e\x0a\x4d\xb1\x5c\x0b\x92\x69\x30\xc3\x8a\x4a\x4c\x4a\xf4\x1c\x5f\xc8\x13\x90\xbb\xfc\x72\x9b\x42\xe9\x0c\x53\xee\x34\xa8\x83\x41\x82\xeb\xe5\x01\xbc\x94\x70\x07\x91\x13\x56\xc5\xbd\xb7\xac\x69\xbe\x32\xcb\xfe\xba\xfa\xe5\x99\x3c\x5d\x72\xf2\x2b\xe5\x98\xf6\xd7\xb6\x63\xcf\x64\x5b\x37\x8b\x2e\x45\x93\xad\xc4\x78\x8d\x74\xc9\x11\xb9\xcb\x31\xfe\x73\xb5\x63\x8a\x37\x57\x2c\x69\xf5\xfe\xdd\x59\xea\xed\x50\xa7\xfe\xea\x8d\xba\x8f\x72\x83\xf0\x5f\x9d\x95\xe5\x6a\xc0\x42\x4e\x29\xf2\x49\xf8\x23\x65\x4a\x3d\x3c\x5f\x47\xbf\x55\x33\x6c\x85\x79\x27\xea\xa4\x59\x86\x28\x9d\xcf\xcc\x41\x32\x08\xb6\x90\x5f\xcf\x0c\xcc\x90\x51\xf6\x6b\x30\x0c\x1d\xd8\x99\x7f\x53\xd5\xc2\xdd\xc5\xf9\x44\x7b\xb0\xea\x1f\x1b\xb1\x8c\xef\x1a\xea\x23\x41\xfa\xbd\x73\x18\x3a\xc4\x6d\xe8\xbd\xd7\x35\xf1\x62\x8b\x24\xa4\x61\xd0\xf7\x07\x95\x01\x4c\xea\x97\x1f\xc7\x90\x51\x76\x2d\xd8\xff\xea\x21\x9c\xfc\xfe\xe3\xaa\x1d\x33\x0e\x27\x73\x39\xbe\xbb\x52\xda\x17\x4f\x82\x9e\xd8\x78\xa2\x8a\x36\xf7\x2b\xb5\xea\x6e\xce\x35\xcf\x4b\xfc\xe0\xff\x71\x65\x71\xaa\xab\x29\x79\xcf\xd6\xb2\xc7\x55\xf6\x6d\x35\x2f\x13\x5f\xa7\xdc\x4d\x60\x8b\xf1\x76\xec\xdb\xf8\x5e\xfa\x61\xf1\xc9\x08\xcd\xed\xd4\x33\xff\x71\x65\x73\xaa\xab\xfe\xa8\xab\x39\x4e\xf7\x2b\xde\x0f\x5d\xc0\x61\x5d\x54\xf0\x1e\x6d\xbd\x77\x6b\x58\xc0\x45\x04\x48\xff\x09\x32\x25\xa8\x8f\x59\xc3\xa4\x00\xd4\xca\xf9\xff\xfe\x8b\xf7\xcf\xaa\x08\x0c\x0a\x92\x81\x61\x61\x07\xc9\xc0\xb0\xf1\x0c\xff\xac\x2a\xfe\x79\xc5\xa6\x0d\xec\xf7\x28\xb7\x72\xe0\xdb\xd1\xbe\x28\x71\x31\xf1\x89\x08\x34\xae\x23\xd6\x2c\x65\x6c\x4e\xc4\xec\xa8\x93\x4b\xb2\xe3\x5b\x03\x12\x67\x68\x38\x61\x67\x31\xbf\xec\xb5\xdf\xd7\x93\xba\xc9\xfe\x67\x55\x03\xca\xc0\x2c\xc4\xff\x2c\x74\x50\x07\xe3\x2c\x66\x1d\xb2\x94\x2a\xbb\xe4\xbe\xbf\xcb\xba\x8b\xa9\x6e\x1b\x73\x42\xe8\xea\xaf\xab\xf5\x17\x1f\x2d\xb1\x4c\x33\x2a\xdd\xce\x53\xb2\x71\x0c\x35\xed\xff\x51\x99\x7d\x9d\x45\xfe\xd2\x25\xad\xf6\x40\x39\x4a\x1d\x9c\x43\x50\x07\xc3\x34\x77\xfc\xe9\xd0\x67\x85\xda\x96\xaa\xe3\xc9\xab\x15\x23\xf8\xdc\xa6\x7b\xe5\x8b\xbf\xda\xe8\xcf\xed\x9b\xef\x92\x2e\x2b\xf9\xd0\x07\xed\x59\xd4\xe4\xf1\x6e\x79\xd4\xfb\x08\x7e\xdb\xcb\x0e\x91\xf8\x18\xc8\xe6\xf8\x50\x7a\x2f\xe6\xc4\x3d\x7a\x55\x49\x5c\xff\xe3\xb2\x8b\x16\x7f\x20\x5f\xb7\x89\xbb\x4b\x16\x82\x5a\xca\x84\xad\x91\x96\x4e\x36\xb8\x4e\x23\x68\xc2\x37\x00\x65\x56\x81\x12\xf0\x31\xb9\xfb\x5e\x7a\x7f\xc8\xbb\x3c\x72\xef\xbe\x5f\xa6\x60\x04\x47\x90\x73\x57\x98\xc6\xa0\x61\xc6\xc8\x8f\x09\x47\x9e\x93\xa3\x3a\x08\xef\xb7\x13\xa6\xef\xb4\xa3\xc7\x7b\x64\x6d\x7b\xfb\xc7\x43\x28\xe1\xe1\x3a\xe6\x53\x55\x32\xbc\x80\x91\x8c\xc8\x72\x62\x17\x91\x2e\xb3\xf6\xc9\xf4\xd9\x34\x6a\xa8\x6e\x7a\xc2\x7f\x8f\x4e\xc9\xbb\x68\x4a\xb3\x24\x75\x65\x13\x1c\xe3\x19\x95\x7d\x2f\x60\x49\xcd\xfa\x8d\xfd\xf3\xc7\x13\xa6\x62\x5e\xaf\x5e\x90\xb2\xab\x6e\xc0\x2f\xfb\x1a\x78\xeb\x25\x6a\x33\x2e\xf0\x85\x4e\xb1\x56\xb3\xce\x47\x70\x60\xb1\x1f\x2d\x1d\x21\xe1\xf1\x27\xcb\x9b\xf6\x78\x9f\x42\x4f\xb9\xd3\x24\xc4\x5b\x99\x7c\xe6\x4c\x8c\x45\xbe\x50\xa6\x46\x30\x10\x85\xc8\x99\xcd\xdc\x4d\xb2\xd8\x89\x94\xb2\xfa\xb3\xba\x8b\x90\x81\x59\xca\xc0\x2c\x03\x77\xf5\x2f\xc2\x98\x11\x18\xa4\x0c\x6e\x6f\xb0\x24\x24\xfb\x6f\xbc\x23\x23\x4c\x3b\x27\x48\x86\x35\xb8\xb6\x40\x13\xad\xe0\x7c\xd6\x92\x9a\xea\x12\x97\xcf\x55\xba\xbb\x81\x98\x34\x30\x18\x0c\xf1\x4f\xf5\x21\xf1\x38\x0d\xfe\xac\x4a\x82\xb1\x30\xd0\xc6\x73\x92\x46\xee\xa9\x17\xf2\x03\x3e\xa7\x32\x38\xbe\x0d\xd8\x3a\x6f\xda\x42\xe7\xed\xbf\xa4\xfb\x44\x73\xa9\x36\x73\x3e\x27\xe9\x2d\xd9\xef\x81\xd7\x69\x76\x68\xa3\x4f\xcf\xc8\x9e\x5a\xfe\x4c\x9c\x86\x76\x7e\x56\xbf\xeb\x22\xde\xc5\xad\xf7\x6e\x1b\x50\x5a\x9b\xe1\xb4\x30\x53\xec\x1e\x34\xb5\x3f\xfc\xed\xf6\x34\xbb\x60\x69\x92\x93\x6e\xd7\x1e\xef\xd0\x44\x99\x98\x2c\x74\xf6\x5d\x2e\xc9\x2b\x55\xb8\x22\xa4\x68\x17\xbc\x74\x51\x47\x5c\x9c\x80\x6d\xdb\xfb\x8e\xe2\xfc\x6f\xb7\xa7\xd9\xa1\xb9\xa5\xc8\x68\x31\x0e\xd8\x2f\xb4\xc4\xd5\x24\xd9\x35\xcb\x27\x56\x14\x87\xed\xf0\x29\xd3\x05\x5c\x78\x2c\xae\xd6\x74\x14\x40\x81\x19\x78\xf9\xcf\xec\x82\xa5\xb1\x02\x41\x19\xac\xbe\x50\x8c\x3f\x6b\x4b\xc1\x98\x48\x4c\x58\xb0\x34\x66\xd0\x89\xb2\x8c\x4b\x93\xbc\xad\x3b\x96\x1c\xf9\x4e\x6d\xc9\xa0\x02\x13\xe4\xff\xae\xc4\xc8\x10\xf3\x24\x31\x4e\xdb\x6f\x80\x82\x46\x2a\xc7\xe5\x84\xa9\xf1\x08\xe3\xd8\xdd\x75\xa9\x8d\xea\x9d\x80\x94\x3c\x9d\x88\xcd\x7c\x50\x9d\xbf\x07\x4e\x98\x43\x8f\x78\x64\x4a\x67\x77\xb4\x19\xf8\xfb\x6b\xc6\xd3\x7c\xa2\x7d\xcd\xb8\x36\x0a\x53\xea\x5e\xc9\x5f\x8b\xfb\xc9\x2b\x8d\x2c\xed\xb6\xdb\xd8\x23\xa1\x22\x20\x16\xe9\x0e\xc8\xf5\xa3\x2c\x37\x34\x38\x3a\x61\x4a\xf8\x5a\x9a\x0f\x7e\xf9\x29\xb3\xd9\xd9\x9b\x9b\x5f\x66\xf5\x92\x53\x92\xea\x55\xe5\xc8\x46\x74\xe4\x95\xf8\x24\x02\x9f\x5f\x3a\xd9\xa5\xe1\x19\x78\xdc\xa4\x2e\xa4\x4c\x8f\xff\xfd\xcc\x86\xd5\x62\xd2\xd2\xcb\xfd\x8f\xcd\xf5\x9e\xc4\xd1\x4f\x5f\xf5\x78\x35\x6f\xd7\xb1\x9d\x30\x2d\x2c\xb6\x97\x58\x27\xa4\x66\x24\x1d\x2e\x4b\xce\x8d\xbe\xf5\xe1\x20\xbc\x42\xc9\x7a\xf2\xf0\x29\x50\x72\x54\xb0\xa5\x31\x72\xf2\x73\xca\x8d\x8c\x95\x99\x18\x43\xdc\x9e\xb1\x2f\x77\x6c\xbb\x18\x3f\x85\x83\x1f\xfb\x65\x76\xaa\x2a\x58\x8a\xf6\xee\x7d\xb2\x1e\xa8\xc7\x38\x61\x7a\x3f\xd8\xb9\xa4\x3e\x34\x8a\x9a\x41\xbd\x80\xd5\x70\x3d\x34\x34\x38\x8f\xf0\x7c\xf5\x73\x1e\x8a\x79\x87\x86\x90\x75\x57\x41\xd1\x13\xa6\xf7\x2a\x5b\x26\xaf\x2b\x08\x4f\x2a\x8d\xa8\xd0\x61\x5d\x2f\x43\x82\x9e\xcb\x4e\x4e\xc8\x2b\x26\xc6\x03\xbe\x1a\xf4\x91\xf5\xbd\x27\x4d\xb1\x28\xd7\xbf\xb0\x89\xfe\x5c\x63\x8d\x98\xe1\xc3\x62\xc9\x1c\x20\x20\xfb\xe0\xf8\xd3\x37\x73\x6a\x4f\x51\x45\x4c\x35\xde\xf9\x3f\x37\xe1\xb4\x5a\x45\xbb\x09\xaf\x52\xa8\x97\xc6\x9d\xc7\xb4\x9b\x63\x0b\x33\x57\xf2\x46\x9e\xeb\xd3\x57\x06\x74\x64\xe2\x6a\xa7\x7a\x4c\xde\xe8\x29\xc5\xf8\x76\xf2\x51\xfb\x0c\x36\xae\x8b\x4f\x73\x9e\x80\x4c\xcb\xad\xc3\xbd\x74\xfe\xc0\x14\xeb\x95\x09\x75\x08\x0b\xff\x76\x0a\xad\xe8\x2e\xcf\x49\x05\x48\x01\x84\xa0\x28\x6c\x35\xab\xca\xf2\x80\xdf\x59\x5e\xde\x18\xa7\xc9\x39\xd6\x84\xf8\xe0\x55\xdd\x77\xf9\x99\x3d\xeb\xde\x33\x79\x27\x4c\x25\x8c\x57\xf6\x69\x07\x1b\x0c\x2b\xcf\x71\xa7\x97\xdb\xbf\xe2\xfb\x50\xc7\x4b\x53\x70\xfb\xd3\x63\x5d\x9e\x9c\x9f\xbb\x57\xf2\x19\x4f\x98\xca\xdd\x7b\xd8\xff\x81\x73\x49\xb9\xb2\x3a\xbb\x6e\xf0\xe2\xea\xeb\xb0\xec\x6f\x54\x9b\x1a\x78\x6c\x64\x9f\xed\x77\xdf\xf9\xba\x1f\x9c\x30\x15\x74\xff\xec\xc7\x47\xb9\xd9\xec\x1e\xf0\x9e\x9c\xc7\xe1\x36\x51\x4c\x6e\x63\x45\x4a\x7c\x8a\xa6\x4b\xe6\x94\x31\xf2\x7d\x44\xf1\x09\x53\x59\x3e\xe6\xfb\xf7\x22\x31\x74\xe5\x63\x19\x56\x1e\x56\xec\x5d\x5e\x49\xb0\xc1\x1b\x1c\xda\xad\x39\xfc\xe0\xee\x58\x9e\x0e\x77\x3a\x61\xea\xb3\xf3\x82\x1b\x24\xe3\xaa\xad\x51\x72\x08\xe2\x62\x0a\x02\xf9\xee\x49\x51\x04\x15\x78\x0b\xbc\x20\x2a\xbf\x42\x55\x1e\x1e\x13\x58\x84\xf3\x67\xb5\xfa\xef\xbe\x19\x18\xda\x2e\x8d\xdb\x0c\xb1\xa6\xf5\xcb\x2a\x1f\xec\xf9\xe9\x62\x1f\x6f\x5d\x64\x61\x49\x15\x5a\xb3\x9a\xa2\x6b\x37\xa8\x3e\x1c\x7c\x72\xd6\x00\xfc\x67\x28\x4c\x55\xaa\x29\xa5\x04\xab\x8d\x0f\xff\x83\xbd\x0d\x18\xa8\xfe\xe9\x61\xc4\xa5\xf3\x79\xdc\xe9\x06\xc9\x75\x56\x14\x37\x02\x5a\x5f\x1c\x5e\x67\x7f\x71\x36\x54\xe4\x72\xc9\xb3\x10\x5d\x39\x36\x39\x10\x03\xa2\x7f\x38\xaa\xff\x3c\x33\x21\x72\x87\x8a\xfa\x61\x2b\x8f\xb8\x6d\x9f\xf1\x6c\x84\x6b\x8d\x7d\x8c\xd5\x95\xb7\xb1\x9c\x5b\x63\xfd\x91\x0b\x94\x34\x20\x1c\xa2\x7f\x4c\x54\xff\xfa\xeb\x14\xac\xe0\x37\x44\x61\xbb\xbc\xc0\xe7\xc0\xa0\x6f\x07\x86\x53\xd7\x19\x38\x13\x70\x22\x19\xc4\x06\xba\xba\x83\xed\x71\x40\x4c\x88\xfe\xb1\x50\xfd\x3f\xbf\xbf\xa4\xc0\x9a\x13\xe3\x37\xa2\x3a\x6c\xa0\x9b\x76\x2e\x68\x59\x1b\x0b\x41\xac\xf2\x19\x47\x4b\x5f\x41\x5a\xf5\x92\xb1\x1b\x88\x05\xd1\x3f\x36\xda\x99\x0c\xfa\xc9\x2b\x15\x36\x44\xb9\x81\x67\x03\x67\x72\xce\x55\xb8\xef\xda\x85\x6e\xbc\x0f\xaf\x18\x25\x73\xb2\xde\xb7\xb0\x7e\x22\x0c\x62\x43\xf4\x8f\x83\xea\x5f\xd0\x04\xa0\xf0\x22\xca\xc8\x37\x4f\x0b\xc4\xcd\x7f\x6e\xb9\xdc\xd3\x6b\xf5\x38\x48\x66\xa2\xa5\xef\x56\xec\x6d\xbe\xc4\x0e\x53\x10\x07\xa2\x7f\x5c\x54\xff\x18\x18\xe9\xb6\x30\xba\x6f\xac\x5f\x25\x53\xbc\x69\x3d\x4d\xe3\x45\x0a\x47\x74\x43\xef\xdc\x3b\xa2\xdd\x26\x04\x45\xd2\x29\x8d\x41\x5c\x68\xfe\x7f\x27\xcb\x69\xcf\x95\x7f\x93\x05\x81\x76\xd2\x11\xdf\x81\xb0\xe8\x41\x54\x96\x36\xfb\x5d\x53\xb9\x28\xff\xa9\xa7\xfc\x2f\x09\x08\xe9\x02\xbe\xfc\xd4\x55\x5c\x0b\x75\x8f\x54\x01\x11\x10\x83\xc5\x43\x0b\x36\xab\x45\xd6\x6f\xa4\xc4\x40\xdf\x8a\x39\x32\x5d\xb4\xee\x35\x1d\x35\xc3\x56\x8b\xf9\xa3\x07\xd4\xd8\x93\x2c\xee\x3b\x69\xf8\x20\x1e\x44\xff\x67\xd0\xf6\x9b\xf6\xb9\x06\xf1\x66\x51\x8c\x70\x44\xef\x0c\x47\x15\x04\x15\x92\xfa\xef\x87\x71\x14\xa9\x10\x88\x37\x72\xae\x37\xdd\xa4\xc4\x00\xcf\x40\xf4\x8f\x8f\xf6\xe9\x87\x5c\xc2\x1b\x65\x76\x5d\x49\xa5\x0e\x59\x6b\xf9\x8d\x1d\xab\xc8\x88\xfb\xd9\x91\x97\x42\x04\x48\xec\xbe\x69\x64\x31\x5d\x36\x02\xf1\x21\xfa\x27\x40\x3b\x8c\x65\xd9\xab\x59\xfc\x11\x71\x75\x8b\x97\x88\xc6\xec\xab\x9a\xa5\xcf\x65\x63\x93\x8b\x24\x2e\xfc\x88\x87\x7a\xf4\x7d\xef\x09\xf5\x40\x02\x88\xfe\x09\x51\xfd\x17\x24\x59\xfd\x78\x10\xd7\xbe\x56\x3e\x22\xb6\xcd\xac\x58\x10\x5b\x3e\xb2\xee\x68\xd0\xdf\xca\xda\x46\x9c\xee\x87\x90\x99\x36\x03\x09\x21\xfa\x27\x42\xf5\x9f\xc5\xe9\x26\xdd\x7e\x65\xfc\x6a\xa3\xcb\x9b\xf1\xa3\xd5\xe0\x5b\x7b\xc9\x4c\x38\x25\x1f\x71\x96\xdf\x96\x2a\xe1\x3e\x32\xf2\xd1\x07\x89\x20\xfa\x27\x46\xf5\xdf\x7f\x4f\x56\x8a\x0c\x4f\x93\xb1\x62\x4f\xd3\x3c\x24\x6a\xa8\xa4\xde\xcd\x93\xc2\x60\x35\x93\x9c\x40\xad\xbe\xa6\xaa\x63\xed\x3c\x48\xfc\x77\xc9\x72\xda\x9b\xf5\xdf\x64\x21\x41\x2d\x8c\xba\xb9\x2f\x7b\x8b\xb3\xab\x79\x0e\xf8\xce\xf1\x22\x63\x93\x7f\x9c\xe4\x64\xa4\xed\x9b\xc5\x87\xda\x7e\xf8\x92\xea\xe3\x35\xa4\x20\x09\xc4\x60\xcf\xa2\x1d\x8e\xa8\xff\x94\x69\xa9\xe2\x09\x2b\x8f\x2f\xdd\x9d\xe3\xa0\x6c\x42\xbd\xa1\xa4\x65\xa5\xc5\xfd\x2d\x6a\x00\x81\x98\x9f\xb8\x2d\x04\x9e\x85\xe8\x9f\x14\xed\x33\x15\xbb\xd0\x6c\x30\x1a\x34\x3d\x94\x7b\x51\xb3\x13\x26\x20\x79\x41\xdd\x46\xc5\xed\xed\x50\xcb\x3e\x51\x98\x63\xbb\x42\x21\x1d\x48\x0a\xd1\x3f\x19\xaa\xff\xcb\x24\xa3\x1c\x71\xef\xfc\x55\x44\xf3\x32\x97\xe8\xd8\xa7\x8f\xf3\xba\x16\x8a\x63\xc5\x14\x0e\x53\xe9\x65\xb4\x1d\xcf\xf1\x31\x83\x64\x10\xfd\x93\xa3\xfa\x27\xfa\x66\xb8\x50\xb5\xda\x6d\x7c\xf7\x2d\x28\x44\xf1\x70\x3f\xaf\x1d\xeb\xb6\x6a\xe9\xde\x0e\x02\xb1\xcb\xfe\xd5\x46\xfe\x1b\x02\x24\x87\xe8\x9f\x02\xd5\xff\xb1\x8b\xc9\xf7\x77\x9c\x75\xf7\x5e\xe4\x68\x70\xc7\x76\x02\x01\x7d\xeb\x6f\xab\x44\xf3\x95\x95\x8f\xdd\xe4\xea\xdd\x28\x49\x9d\x40\x0a\x88\xfe\x29\xd1\xf6\x76\x92\xcb\x4d\xd5\x75\xa8\xe3\xcb\xe5\x69\xcc\x97\x28\xec\x93\xcf\xf8\x65\x9a\x1b\xb5\xf3\x93\x08\xc4\xde\x5f\xb4\xa1\xfc\x7e\x11\xa4\x84\xe8\x9f\x0a\xd5\x7f\x52\x45\xb3\xa2\x4e\x38\xa5\x8a\x11\xb6\x62\x61\x31\xe9\xc1\x4a\x45\x9f\x57\x3d\xf6\x6d\xbc\x10\x63\x45\x9a\x99\xae\xf8\xac\x6b\x20\x15\x34\xff\x6f\x71\xfe\xac\x6f\xf9\x6f\xb2\x00\x00\x6a\x69\xae\xa6\x1f\x1f\x1c\x47\x8f\x6d\xb4\xaf\xb7\xa4\x34\x72\xa5\xd7\x9a\x8b\x5a\x54\xb0\x7a\xa4\x27\xea\x2c\xf1\x26\x89\xe3\xc9\xb3\x80\x00\x00\x31\x5c\x00\x89\xf6\xf1\xb4\x63\x21\x93\x90\xba\xd8\x6b\x89\x27\xb5\xdc\xd5\x0a\xc4\x9a\x18\x65\xe5\xe1\x7e\xad\x3b\xc3\x8b\x16\x4e\x18\x69\x35\xb5\x8e\x20\x80\x84\x4a\xa0\x46\xeb\x4b\x92\x8e\x8d\xd8\x7c\x73\xc0\x19\x95\xc6\xf1\x9a\x4c\x28\x17\xd6\x5f\x94\x18\xe1\x6c\x6c\x9f\x7f\x4e\xfe\x4c\x49\x71\x20\x5a\x0e\x04\xa8\xa1\x12\x68\xd0\xce\x3e\xb4\xb6\xfe\x5c\x9e\x60\xf7\xe8\x7e\x90\x0f\xfe\x14\x49\x72\x9e\xd7\xf4\x30\x57\x1c\xf3\xfd\x0f\x59\x99\x06\xd4\x97\xaa\xf4\xcd\x41\x80\x06\x2a\x81\x16\x2d\xeb\x83\xec\x12\x49\x15\x12\x5a\x46\xa5\x28\x5f\xf4\x5c\x73\xf2\x37\x0a\xe8\xd7\xd7\x9a\xde\xca\xa0\x49\xda\x08\xcd\x28\x1e\x42\x80\x00\x2d\x54\xc2\x39\x54\x42\x93\xd2\x0d\xfe\xbc\x9a\xa4\xd2\x5b\x2f\x4c\xe3\x0b\x06\xb5\x08\x1b\xe8\xfb\xf1\x0d\x0b\xeb\x84\x00\xac\x72\x8a\xe7\xd6\xe6\xac\x20\x70\x0e\x2a\x81\x0e\xed\x30\x8f\xe7\x0d\xd2\x6c\x0b\xb9\xcb\x69\x3b\x4c\x17\xaa\xc8\xce\x5f\xaa\xa3\x36\xb2\xd3\xb5\x89\xca\x5f\xe1\xc7\xae\x69\xcc\xcd\xc7\x07\x01\x3a\xa8\x04\x7a\x54\x42\x80\xf6\x1b\xa7\x3b\xf2\x43\xd5\x6f\x68\x70\x7e\x08\xbc\x71\xf3\xa5\x2f\x30\x70\xcc\xb8\x1b\x25\xf4\xbd\xe3\x60\x54\xc0\xdb\x5d\x08\x04\xe8\xff\x2e\x79\x4e\x1b\x6d\xfd\x4a\x1e\x06\xd4\xe2\xcc\x8d\xa8\x5a\x34\xd6\x78\xe5\xc3\xdc\xc0\x1b\x16\xeb\x1e\x30\x8a\x89\x8a\xc0\x60\x4f\x79\x23\x96\x65\xaa\xca\x37\x77\xb1\xa8\x41\x80\x01\x6a\xc0\x8c\xa8\x84\x31\x8e\x5b\x22\x18\xe6\x89\xbc\x5e\xa2\x77\x8d\x86\xb5\x8c\x1e\x12\x8a\x38\x1f\x79\x3c\xcf\x39\x50\xb7\xea\x36\x8d\x64\xe6\xc3\x06\x01\x46\xa8\x84\xf3\x68\x67\x7c\x25\xa8\x6b\xfa\x7d\x17\x70\xc9\x66\xf6\xc0\x28\xff\xa4\x9e\xde\xf7\xbd\xca\x1a\x53\x31\xa0\xf9\x56\x7b\x96\xc7\xee\xac\x9f\x0c\x08\x9c\x87\x4a\x60\x42\x25\x44\xf5\x8c\x08\x97\xd0\x19\x8c\xd5\xaa\x9d\xc1\xe3\x8e\x9c\xc1\x4b\x6e\x9c\x69\x19\x7c\xc7\x21\x1f\x9f\x5b\x80\xe3\x5a\x64\x08\x03\x01\x26\xa8\x04\x66\x54\x82\x15\xf3\xd3\x95\xcf\x65\xde\xe4\x45\x12\xe1\xa5\xeb\xfa\x56\x5a\x9e\xeb\x3a\xd2\x8a\xf4\x51\x92\xac\xa2\x47\x5d\x01\xb5\x51\xf6\x20\xc0\x0c\x95\x70\x01\x95\x30\xc1\xfc\x26\x9c\xf8\x6c\xca\x74\xd1\xc6\x44\x71\x9b\x53\xf1\x28\x51\xbd\x90\xdf\x47\x0a\x98\xb2\x45\x7c\x51\x5a\xe1\xa7\x44\x65\x10\xb8\x00\x95\x70\x11\x95\xd0\xd3\x96\x26\x9b\x66\x91\x0d\x98\x29\xf0\x9e\x77\x1e\x7a\x54\x55\xe3\x11\xfd\xa1\xfd\xe8\x95\xa6\xc2\x0d\x33\xaf\x46\xe2\xa7\xf8\x20\x70\x11\x2a\x81\x05\xad\xe3\xe2\x1a\x4a\x72\xf4\xa0\xd1\xc2\xca\x3e\x2e\x9c\x65\xc9\x59\x06\x56\xea\x94\xfb\x58\x23\x26\xed\xee\xf2\x35\x8b\x29\x01\x7f\x7e\x10\x60\xf9\xbb\xe4\x39\x6d\xfe\xe1\x57\xf2\xb0\xa2\x16\xe7\x3c\x6c\x98\x9a\x68\x67\x72\xac\x1a\xf7\xd0\xe7\xc6\x4c\xbf\xef\x0a\xed\x22\xd6\xfc\x4b\x13\x93\x96\x27\xcb\xaa\xab\x0a\x48\x66\x10\x60\x85\x1a\x30\x1b\x2a\x41\xd9\x9b\x8c\x93\xa6\xc5\xe2\xbe\xc6\x24\x79\xcd\xba\x95\x90\xd6\x9d\x27\x5f\xa7\x02\xed\x98\xec\x47\x8a\xb4\x56\x13\x3f\xf6\x68\x81\x00\x1b\x54\x02\x3b\x2a\x21\x3a\xa1\xa6\xe8\xd1\x33\x69\x5e\x07\x72\xae\x97\xc2\x92\x1b\x4d\x9e\xcd\xdc\x98\xe9\x5d\x45\xdf\xe3\x95\xfb\x89\x83\x62\x30\xe5\x40\x80\x1d\x2a\x81\x03\xed\x73\x27\x17\xec\x96\x2b\xc4\x3c\x34\x7c\x94\xcf\xc8\x64\x5a\x5f\xa8\x2c\xd2\x3a\xbc\x77\x69\xd2\x15\x6f\x69\xdf\x12\x4d\x9f\x5e\xa3\x02\x01\x0e\xa8\x84\x4b\x68\x9f\x2c\x53\x4d\x01\x1e\xe9\x97\x84\x4a\xec\x62\xa2\xc8\x34\x09\xe5\x1e\x0a\x66\xca\x63\x86\x36\xb5\x7b\x52\x3c\xfd\xe6\xc5\x7f\x49\x15\x04\x2e\x41\x25\x70\xa2\x12\x2a\x1b\x2f\x69\x06\x58\xdd\xb5\xc0\x2f\x62\x24\xbe\x18\x10\x45\xa0\x44\x16\xde\xfd\x4e\x89\x60\x3a\x82\x53\xe6\xe3\xfd\xca\xdb\xec\x20\xc0\x09\x95\x70\x19\x95\xd0\x5e\x13\x55\xb6\x3a\xbc\xec\xb2\xf7\xa3\xcd\x62\xca\x52\x35\x17\xfb\x49\x4d\x36\xcf\xc1\xec\xe0\x82\x44\x62\x99\xb0\x3c\x9f\x2a\x08\x5c\x86\x4a\xe0\x42\x6b\x4b\x71\xda\x5c\x9a\xe7\xe0\xfd\x7c\x13\x0f\xe6\xc1\x12\x4a\xc9\x22\xd1\xb3\x93\x9f\x56\x2c\xc4\x79\x9e\x19\xc9\xdb\x2d\x25\x91\x81\x00\xd7\xdf\x25\xcf\x69\x33\x72\xbf\x92\x87\x1b\xb5\x38\xd5\x7b\x81\xc1\x9b\xaa\x44\x98\x35\x0c\x82\x5b\x5d\xe6\x75\x25\xcf\x3d\xbc\x52\x31\xe9\xdf\xad\xed\x53\x7b\x4e\x5e\x36\xe8\x70\x05\x01\x6e\xa8\x01\xf3\xa0\x4d\x70\xf9\x71\xd5\x37\xca\x7f\xa5\x41\x54\x47\x2a\x24\x8f\x3d\xfa\x26\x11\xf2\xc5\x3e\xa2\xf5\xac\x9c\xe4\x70\xec\x0d\x46\xd2\x41\x24\x08\xf0\x40\x25\xf0\xa2\x12\x2c\x38\x49\x03\x17\x9e\x76\x79\xc7\x52\x24\xd1\x94\x31\x76\xf4\xb4\xab\xb7\xb2\xf8\x0e\x6a\x63\xc0\x37\xb3\xa8\x94\xa8\x22\x09\x41\x80\x17\x2a\x81\x0f\x95\x70\x34\x85\x35\x7b\x7e\x4a\xfc\xb1\xe5\x27\x8b\xd8\xb6\x59\x61\x0f\x9e\x0e\x87\x82\x3c\xa6\x8c\x58\x3d\xf5\xa5\xc7\x2f\xdd\xce\x7b\x80\x00\x1f\x54\x02\x3f\x2a\x81\xe2\x7b\x91\xa9\x7c\x50\x8f\x12\x46\xa8\x9f\x96\x76\x4d\x16\x07\xfe\xa5\x91\xaf\x45\x29\x69\x9f\xbf\xd4\xcb\xdc\xc8\x2b\xb5\x95\x00\x01\x7e\xa8\x04\x01\x54\xc2\x99\x68\x01\x3f\xf6\xb8\x9d\x85\x2d\xea\x1c\x7c\x41\x24\x16\x45\x91\xd7\x43\xac\x3b\xc3\xb9\x1b\x47\x66\x38\xf9\xd4\x5f\xa3\xaf\x81\x80\x00\x54\x82\x20\xda\x21\x23\x4f\xce\x86\x60\x05\xe6\xa5\x0e\xa6\x96\x6d\x7e\x30\xde\x1b\x72\x66\x26\x7e\x7b\x21\x49\x07\x5b\x5a\xae\xe7\xe2\x59\x69\x5b\x02\x10\x10\x84\x4a\x10\x42\x3b\x7f\xf3\xb9\x2d\x05\xf5\x98\x47\x9d\xa8\x56\x03\xfd\xf0\x68\x3c\xfe\x46\x8f\x10\x7e\x29\xde\xaa\x96\x5d\x12\x31\xfc\xde\xfc\x45\x23\x10\x10\xfa\xbb\xe4\x39\x6d\x8e\xfa\x57\xf2\x08\xa3\x9d\x46\x12\x72\xc1\x5e\xc5\x7a\x93\xc9\x36\x88\xcc\xf5\x53\xe9\x77\xd7\x0d\x87\x22\x69\xb3\xf6\x2f\xc7\x6c\xfc\xe2\xef\x53\xb5\xd5\x75\x41\x40\x18\x6a\xc0\x22\xa8\x84\x5b\x48\x09\xaf\xcc\xd1\x98\xaa\x1c\x2f\x65\x8e\xe8\x9b\x36\xa4\x16\x08\xb1\x7c\x6e\x43\xc3\xe7\x49\x93\x44\x17\x78\x9e\x78\x5f\x06\x01\x11\xa8\x04\x51\xb4\x73\xd1\x36\x3a\x4a\x0e\x70\xce\xe6\x6c\x0a\x10\xc6\xee\x8e\xa9\xda\x96\xfc\x94\x59\xc4\x14\xfd\x16\x62\xb7\x05\x7c\x70\x99\x55\x95\x05\x01\x51\xa8\x04\x31\xb4\x71\x6a\x61\x7f\x6a\xc2\x43\x12\xa5\xa5\x21\xa3\x2a\xa3\x16\x1a\xef\x07\x03\x49\xbc\xf2\xb7\x94\x0e\x96\xed\x19\x94\x39\xe9\x2c\x6f\x80\x80\x18\x54\xc2\x15\xb4\xc3\x18\x59\xa9\x0d\x4b\xcd\x29\xbe\xdc\x19\x5d\xb8\xc8\x16\x65\x90\xe3\xc6\xa6\x33\x5a\xfa\xd2\x22\x53\x89\x1e\x93\xa8\x78\x53\xdb\x02\x04\xae\x40\x25\x88\xa3\x12\x5e\x4b\x6d\x5d\x19\x9d\xf6\x27\xe5\x0b\x19\x9c\xf9\x14\x62\xcb\x41\xdb\x52\x1f\xed\xd3\xfa\x81\xf0\xfd\xe4\x8c\xe7\x22\x71\x2f\x0e\x08\x88\x43\x25\x48\xa0\x12\xde\x5a\xc7\x5e\x55\xb6\x4c\x57\x4f\xf5\xd3\x39\x62\x2e\xf0\xc7\x21\xab\x5f\x60\x5b\x23\xbd\xf0\x39\xb7\x28\xaa\xc7\xcb\x86\x47\x01\x04\x24\xa0\x12\x24\xd1\xba\xcf\xf7\xd2\xc9\xb8\xcd\x84\x96\xc9\x87\x96\x5f\x08\x04\xa4\x27\xa5\xfb\x79\x7f\xe3\xc0\x4a\x4a\xbd\xf6\x9e\xd7\xdf\x8d\xbb\xd5\x10\x04\x24\xa1\x11\x7e\x2f\x9e\x9d\xb6\xce\x88\xb6\x78\x06\xbc\xce\x14\x4d\x4b\x7f\x61\xe2\xe1\x65\x6e\x76\x57\x33\xeb\x95\x3a\xff\x05\x36\x8e\xf1\xf2\x92\x2b\x4e\xee\x48\x92\x3c\xdb\x93\x9b\x6e\x27\xfd\xe3\x45\x9f\x15\xd6\x7e\x0b\x94\x60\xba\x13\x12\x86\x0b\x7b\x12\x65\x71\x81\x0d\xd9\x72\x4d\xa6\x0a\x87\xa0\x7a\xd3\xe2\xa4\x4a\xa1\xbc\xdf\xf7\x2f\x2f\xdf\x95\xcb\x98\x3b\x6a\x5b\xbb\x88\x5b\xba\x3c\xdb\x11\xfc\xd2\xd5\x7e\x28\x27\xfb\x48\xc7\x39\xb9\x52\xf3\xf0\x84\xa9\x72\xeb\x8f\xdc\xe1\x35\xdd\x27\x89\xde\x09\xfa\x95\xb8\xf7\xc3\x9e\x73\x9a\x30\x52\xf6\xb3\x3d\x72\x49\xa9\x2a\xa8\xaa\xca\x28\x3a\x61\xaa\xea\xf7\xcc\x15\xce\x61\xbe\x74\x05\xc9\xfe\xf1\xd2\xe7\x78\x6e\x69\x8a\x97\x53\x71\xce\xde\x32\xb9\x55\xc2\xfe\x4c\x62\x85\x97\x4f\x98\xfa\xb7\xb2\xd4\x9e\x39\x4b\x53\x8e\xe3\xac\x02\x46\xf3\x3a\xce\x48\x5d\x74\xba\xa6\x46\x3a\x3b\xda\x78\xfe\x63\xf4\xf3\x8e\xf7\x27\xf7\xd3\xb4\xa6\xd6\x44\x47\x3b\xb2\x89\x3b\x87\xc7\xaf\xde\xe5\x6d\xa0\xba\x3f\x10\xc4\xa8\xbd\xa3\x39\xe7\xf5\x59\xe4\xdb\xa8\xc4\x6c\xf3\x09\xd3\x8a\xa6\x07\xbb\x19\x1c\xc9\xc9\x47\xad\x30\xc5\x8f\xfd\x0a\x22\xd7\xb8\xc7\x6b\x92\x27\x4a\x0b\xb6\x34\xdc\xab\xef\x14\x6b\xf8\x04\xfe\x7e\x82\x9d\x56\xab\xbf\x9e\x60\x52\x68\xc7\xfe\x90\x5c\xc2\x4b\x08\x3b\x73\x30\x71\xfd\x93\x90\x43\x60\xb7\xfe\x54\x9c\x2d\x97\xce\xdc\x73\x9e\xec\x23\x30\xa3\x6d\x73\xdf\x15\x04\xa4\xa0\xb6\x3a\x69\x54\xc2\xf7\x23\x1f\xb3\xa7\x3a\x46\x3f\x3b\x8f\x99\x69\x1b\x98\xbf\xbf\x4e\x10\x78\x71\x01\xf6\xf9\x70\xfc\x56\xd2\x21\xd7\xc7\x89\x36\x6e\x10\x90\x86\x4a\x90\x41\x25\xf0\xcc\x88\xb8\x6a\x8c\x6b\x0a\x6e\x05\x5f\x79\x85\x1f\xc2\x02\x8c\x60\xbc\x9e\x98\x37\x6a\x1f\x2d\xde\x5f\x50\x35\xcc\x98\x14\x04\x01\x19\xa8\x04\x59\x54\x82\x87\x04\xbb\xf4\x6e\xe7\x8f\x33\xc6\x17\xc9\xb5\xa5\x00\x7c\x7b\x5d\x72\x5c\x9d\x72\x51\x62\xc2\xb2\x83\x16\xd7\x0d\xea\x00\x38\x08\xc8\x42\x25\xc8\xa1\x12\x86\x9c\x26\xe7\xae\x1f\xba\x64\x77\x49\x5d\xb9\x3d\x97\xba\x2d\xec\x5a\xdd\x61\xc1\x13\xb7\x17\xd6\x5f\xec\x13\x51\xed\xc9\xc3\x01\x02\x72\x50\x09\xf2\x68\xe7\xac\xbc\xd3\x3f\x43\x10\x35\x06\x14\x2d\xb5\xa9\xa4\x55\x29\x3b\x5e\xc9\x6f\xf6\xcf\x7e\xee\x8f\xf5\x2e\xf4\x3b\xfd\xc1\xf7\x63\x7e\x10\x90\x87\x4a\x50\x40\x25\x3c\x62\xff\x51\x7a\xd0\xc1\x5e\x49\x01\xe0\x9c\xe9\x24\xbb\xb2\xfa\x3e\x5e\xf5\x09\xa6\x2d\x15\x31\xce\xbd\x1b\x4c\x6a\xb2\xba\x44\x20\xa0\x00\x95\xa0\x88\x4a\xa0\x4b\x16\x90\xaa\x4d\xe1\x2f\xeb\x3e\x44\x9a\x56\x50\xbd\xf8\xbc\x49\xf1\x31\xe5\x81\x43\xdd\x03\x5c\x0c\x02\x62\xe2\x71\x4c\x23\x10\x50\xfc\xbb\xd7\xff\x69\xcf\x99\x5f\xc9\xa3\x84\x96\x3c\xd6\x67\x47\x12\xe8\x56\xcf\xed\x33\x07\xd7\x4a\x8b\x4b\xdd\x22\xbd\xc3\x5c\x62\x8c\x2d\x67\xf7\xa5\x0f\x5b\x40\xd6\x8b\x43\x0c\x04\x94\xa0\x06\x7c\x15\x95\x30\x4f\xd1\x13\x01\x3f\xbc\xa1\x2a\x40\xc4\x9a\x38\xd2\x5b\x3a\xbe\xc3\x91\xc3\xf7\xf2\x79\xa8\xf2\x2a\x5c\x82\xe1\x9b\x46\xca\x55\x10\xb8\x0a\x95\xa0\x8c\x76\xf2\x89\xd1\xa8\x4e\xd5\x1d\x69\xd3\x0f\xaf\x16\x78\x85\x11\x53\x8b\xbd\x91\x56\x37\x14\x19\x9b\x73\x87\x79\x67\xc3\x9f\x4c\x88\xe1\x82\x80\x32\x54\x82\x0a\x2a\x81\x35\x66\x52\xeb\xe2\xa3\xdb\xfd\x97\x76\x6a\x65\x69\x0f\x8c\x3f\xde\xab\x3b\x24\xf3\x19\x8f\x7e\x91\x69\x70\x35\xd3\x31\x14\x8f\x0d\x04\x54\xa0\x12\x54\x51\x09\x2b\x1c\xaa\xdc\x3a\x26\xee\xe9\x3d\x8f\x58\x6e\xe1\xd2\x86\x93\x6b\x5e\x1b\x48\xc3\xea\xb4\x9d\x1b\xea\x21\xc1\x78\xa7\x6c\xa4\x0d\x02\xaa\x50\x09\x6a\xa8\x84\xb8\xec\xaa\xf8\x2f\x33\x9e\x4f\x30\x84\x9e\x47\xa6\xb4\x3f\xb4\x93\xeb\x4e\x70\x34\x7a\x67\x1f\xc5\x30\x3c\x55\x4f\xe1\x38\xa2\x0b\x02\x6a\x50\x09\xea\xa8\x84\x1f\xe1\x34\x5a\x5f\x8c\x5a\x13\x3f\xee\xda\x7d\xfd\x1a\x98\xfc\xa1\x2f\xf9\x1d\x51\x26\xe7\xdd\x39\xea\x26\x38\xb3\xb2\x61\x81\x2c\x08\xa8\x43\x25\x5c\x43\x25\x1c\xe8\xd3\x87\x50\xd5\xfb\xe2\x59\x69\x08\xce\x44\xcb\xcf\xc8\xb8\xb0\x17\x11\xcc\x98\x0b\xab\xae\xd6\x5e\x23\xe0\xfb\xdc\xc0\x05\x02\xd7\xfe\x2e\x79\x4e\x7b\xf3\xfe\x4a\x1e\x0d\xb4\x1e\xd5\x42\xa4\x9a\x78\x64\x40\xdb\x6d\xc2\xe4\xaa\x09\x66\x69\xde\xbb\x76\xd2\xcf\x9f\x9e\xd3\xbe\x76\xc6\xc6\x60\x9d\x63\xf6\x0c\x2e\x08\x68\x40\x0d\x58\x13\xed\xb8\x39\xe7\xba\xb8\xca\x65\x77\x7b\x5a\xfc\xa3\xe2\xea\x91\x3b\x6d\x6b\xe7\x37\x9f\x6d\x31\xe3\xc5\xdf\xcb\x0c\xb3\x46\x16\x17\x31\x81\x80\x26\x54\x82\x16\x2a\xa1\x59\x8f\x63\xe8\x72\x96\x87\xe6\xab\x9b\x3d\xb5\x4c\x54\x3b\xb2\xd9\x36\xb4\x8f\x78\x1a\xef\xe0\x66\x8b\x4f\x3d\xec\xd8\xd1\x3c\x0f\x02\x5a\x50\x09\xda\xa8\x04\xb2\x10\xd8\xb9\x04\xfc\x51\x41\x57\x0e\xa3\x01\x46\x63\xd6\x90\x5e\x07\xa5\xa6\x97\xd8\xaf\xbf\xc5\x84\x79\xd1\x95\x5d\x3b\xd4\x03\x01\x6d\xa8\x84\xeb\xa8\x04\xd1\x80\xe2\xf2\xe5\x5e\x6f\xb9\x6a\xf2\xc5\x65\x36\xd6\x6e\x1f\x4b\xca\xf0\x8d\xb6\xc2\x70\x4e\xb5\x97\x01\xa9\xb0\xdc\x19\x12\x10\xb8\x0e\x95\xa0\x83\x4a\x60\x9b\x1f\xae\x21\x44\xec\x67\x8b\x3c\x85\x4f\x3f\x6a\xef\x25\xdf\xaf\xcb\xc0\x1d\xdf\xea\xa0\x55\x9f\x7e\xa0\xe6\x16\x20\x4f\x05\x02\x3a\x50\x09\xba\x68\xa7\x74\x3a\x10\x17\x16\x3e\xe7\xa2\x19\x7a\x26\x5e\x4d\x40\x79\x3d\xf7\x07\xce\x5b\x78\xcf\xd9\x9c\xeb\x2e\x6f\x28\x3b\x66\x17\x0f\xac\x41\x40\x17\x2a\x41\x0f\x95\xb0\xf5\xcc\x76\xff\xe6\x75\xdf\x89\x5e\xbd\x6f\x14\xa1\x94\x0f\x7f\xaa\xff\x2c\xc4\x8b\x46\xf8\xa4\x08\xac\x8f\x5c\x21\xbc\x6b\x29\x07\x02\x7a\x7f\x97\x3c\xa7\xf5\x45\x7f\x25\x8f\x3e\x6a\x71\x52\x84\x76\x44\x28\x49\xda\x98\x52\xe3\x7a\x35\x81\x6d\xf8\x40\x3f\x5e\xa3\x56\x13\x29\xeb\x8f\xef\x85\x91\x57\x37\x9d\x82\x1c\x41\x40\x1f\x6a\xc0\x06\xa8\x04\x4c\x96\x2c\xbb\xbd\xd7\x99\x5e\xe2\xe7\xfd\x98\xfc\x36\xd7\x29\x9c\x80\x96\x6c\x9b\x98\x37\x67\x77\x56\x7c\x61\x7c\x6a\xef\xa9\x41\xc0\x00\x2a\xc1\x10\x6d\xc0\x73\xc1\x86\x31\x32\xc2\x94\xb4\xa4\xa7\xfa\xc2\xa6\x53\xda\xb6\x5d\x46\x88\x76\x79\xe5\x63\x31\xc1\x6b\x54\x4d\xa0\x5c\x8b\x3b\x08\x18\x42\x25\xdc\x40\x25\x38\xbb\xd1\x79\x56\x5c\xbf\x84\xf5\xc0\xbb\xe6\xc1\xce\x16\xed\x5a\x7d\xfa\x84\x19\x41\x45\x78\x53\xa5\xc4\x3d\x0a\xe5\xa7\x49\x57\x41\xe0\x06\x54\x82\x11\x7a\xd7\xf3\x42\x38\xdd\xdd\xba\xdb\x57\x75\x17\xcf\xc4\xb2\xf2\x2d\x93\xce\x22\xae\xc6\xe4\x48\xb4\x7c\x66\xa9\x9a\x4b\x3c\x54\x93\x03\x01\x23\xa8\x84\x9b\xa8\x04\x6b\xed\x15\x62\xce\x25\x5f\xb2\xcf\x22\xef\x2e\xb8\xce\xd4\xd8\x3d\x1e\x8c\x1e\xa8\x24\xe7\x4b\xf7\x09\xda\x71\xac\x64\xeb\x90\x01\x81\x9b\x50\x09\xc6\x68\x83\xe7\xeb\x63\x38\x83\x8b\x63\x0f\xa7\x60\x47\xed\xed\x1b\xe5\xca\x18\x08\x8a\x27\xaa\x5f\xb6\x76\x15\x3f\x17\xca\xb6\xd2\x5a\x08\x83\x80\x31\x54\x82\x09\x2a\x01\xa6\x95\x1f\x7f\xae\x85\x84\x80\xa6\xff\x78\xae\x51\x5f\x3a\x3c\x33\x5a\xf2\x3c\x99\x89\x4f\xbb\x87\x0c\xfd\x6a\xbf\x9d\x10\x01\x08\x98\xfc\x5d\xf2\x9c\x36\x3a\xfb\x95\x3c\xa6\x68\x7d\xed\x2b\xd5\x1b\x31\xd3\x62\x9b\x03\xdc\xc9\x6a\x85\x0f\x7c\x7c\xdb\xce\xd1\x8b\x7e\x2c\xef\xb8\x37\x6b\x1e\x2e\x36\xa3\x9a\xaa\x0a\x02\xa6\x50\x03\x36\x43\x5b\x5d\xb4\xe1\x93\x14\x8b\x74\x8a\x0b\xfb\x58\x91\xd5\x5a\xd8\xb4\x25\x64\x52\x7f\xa1\xe2\x5c\x0c\x59\xf9\xde\x24\x7b\x97\xa0\x1e\x37\x08\x98\x41\x25\x98\xa3\x12\xbe\x86\xa9\x39\x8d\xf3\xd3\xed\x9e\xe1\xbf\x54\xf2\x86\xfb\xd9\xd2\xbb\xa3\xe6\x96\xb5\xc6\x68\xec\xe3\xb9\x72\x9c\x82\xeb\xaf\xf0\x40\xc0\x1c\x2a\xc1\x02\x6d\x9e\xfa\xa7\xde\x52\x32\x3f\x76\x17\xfb\x93\xf7\x71\x29\x3f\x2c\x14\x32\x3f\x35\xf0\x22\x33\x9c\x3f\xb3\x28\x11\x17\xbd\x4d\x67\x26\x07\x01\x0b\xa8\x04\x4b\xb4\x66\x41\xcf\xa0\xb8\xc9\xe0\x1d\xea\x5c\x58\xec\xe7\x66\x81\x9c\xf2\x70\x7d\x93\xbe\x15\x92\x9e\xfb\x58\xfa\x86\xcc\x9a\x38\x9b\x2b\x08\x58\x42\x25\x58\xa1\x12\x5c\x65\x43\xcc\x55\xe7\xf2\xef\x22\x4c\x65\x96\x3d\xaa\x10\x82\x97\xb5\x70\xa2\x8e\x44\x9e\x9e\xe9\xce\xe4\x5f\xb7\x5a\xc2\x50\x01\x01\x2b\xa8\x04\x6b\xb4\xf9\xb9\x67\x18\x31\x15\x21\xda\x4b\x21\xdf\x5e\x1e\xe7\xe6\xd1\x47\xda\x59\xb2\x6b\x81\x2a\x73\x1a\x1f\x75\xb7\xb3\xaa\xec\x64\x89\x41\xc0\x1a\x2a\xc1\x06\x95\xb0\xf6\x2a\x7f\xd2\xeb\x81\xa6\xf4\x71\xd8\xb8\x1d\xa1\x34\xfc\x13\x79\x43\xd8\xd0\x05\x8e\xc8\x12\x49\xf2\xd4\xf2\x01\x89\xcf\x76\x20\x60\xf3\x77\xc9\x73\xda\x7c\xc5\xaf\xe4\xb1\x45\x2d\x0e\x25\x91\x09\xfe\xdc\xb9\xcd\xd0\x33\x51\x5d\x97\xab\x27\x95\x0b\xd8\x8b\xb3\x23\x11\xed\x26\xa1\x11\x15\x9a\xe1\x43\x4c\xcd\x9c\x20\x60\x0b\x35\x60\x3b\xb4\x15\x89\x2e\x39\xdd\x39\x61\xf1\xfc\x1b\x35\xf4\xbe\x38\x86\xb8\x7a\xe6\x8e\x57\x82\xf3\x3e\xdd\x7a\xab\xfa\x6d\xd5\x2b\xb7\x40\x43\x0c\x04\xec\xa0\x12\xec\x51\x09\x0e\xc7\x53\x0b\xef\x04\x85\xc8\x9c\x22\xb6\x5f\x7d\x59\x34\xcd\x9b\xb6\x63\x0c\x0b\x7a\x9a\x3d\xf5\x5a\xd8\x2b\xff\x92\x63\x22\x12\x04\xec\xa1\x12\x1c\xd0\x06\xaa\x99\x11\x2f\xb0\xe2\x4c\xbf\x5e\x0d\x49\x7e\x96\x32\xf1\xc0\x67\xec\x7d\x6e\x3a\x6d\x7c\xf7\xeb\xad\xfd\x69\x72\x83\x3c\x6a\x71\x10\x70\x80\x4a\x70\x44\x25\x1c\x1e\x53\x6a\xe1\x52\x63\x66\xe7\x14\xaa\x6e\x16\x31\x85\x1d\x27\x6e\xd0\x98\x1d\xe0\xdd\xad\x4b\x38\x5b\x69\x26\xde\xfa\xd4\x0e\x04\x1c\xa1\x12\x9c\xd0\x86\xf3\xc4\x35\xcd\x76\xb4\x22\x5e\xb6\xf8\xb7\xe8\x97\xa6\xc4\x6a\x53\x22\x7e\x08\xe8\xe6\x9d\xfd\x36\xe2\x6e\x3d\xf0\x1e\x99\xa1\x0a\x02\x4e\x50\x09\xce\xa8\x84\x91\x23\x35\xf5\xcb\x56\x26\x22\xc3\x9a\x70\x67\x8d\x57\x77\xf1\x53\xba\x28\x7d\x07\x7b\x5a\x2d\x2f\x50\x5e\xbb\xb4\x76\x71\xdb\x0e\x04\x9c\xa1\x12\x5c\x50\x09\x17\xce\x6c\xd2\xd5\xe6\x8f\xc9\xf9\x20\x3e\x25\x68\x23\xf7\x6e\xc8\x45\xbd\x72\x38\xb3\xa0\x4c\x14\x16\x22\xe7\x1d\x49\x27\x60\x0e\x02\x2e\x7f\x97\x3c\xa7\xcd\xe0\xfd\x4a\x1e\x57\xd4\xe2\x3c\x41\x60\xf7\x55\xc8\x32\xa8\x0c\x91\x3a\x71\x12\x60\xd8\x6b\x8c\xc5\xec\x6e\x3b\xc9\x7c\x34\x21\x12\x71\x20\xc1\xdb\x6a\xd0\x02\x01\x57\xa8\x01\xbb\xa1\x12\xee\x48\x28\x72\x48\x59\x3a\xfe\x94\x4e\x08\x08\x43\x8a\x6c\x1c\xd5\xd1\xb6\x22\xde\xca\x3e\x51\x0e\x60\xbc\xfa\x68\x77\x2f\x85\x07\x04\xdc\xa0\x12\xdc\xd1\xc6\x0b\x05\x79\xdd\x4c\x1d\x8d\xba\x0f\xc2\x31\x26\xfb\xa6\xbc\x9a\x6e\xd2\x0e\x08\x8c\xd8\x58\xf5\x70\x78\x74\xb9\x37\xf4\x54\x13\x80\x80\x3b\x54\x82\x07\x2a\x81\xbd\xad\xf7\x45\x5a\x8b\x4d\xaa\x48\xd6\x82\x64\x8d\x8e\x6e\x1a\x59\xe2\x0f\x0d\x21\xfe\x18\xce\xbb\x13\xf2\xa1\x6f\x0f\x59\xed\x41\xc0\x03\x2a\xc1\x13\x95\x70\x7f\x61\xa9\x91\xaa\xc8\xfd\xf8\xce\x4e\x67\x05\x69\x6b\x71\xc0\xeb\x51\x4c\xea\x24\xcb\xd4\x88\x71\xaa\x54\x0a\xec\xae\x46\x26\x10\xf0\x84\x4a\xf0\x42\x25\x50\x19\x1b\x4e\x1e\x51\x6c\x1e\x71\x19\x06\x08\x91\xea\x61\x35\x66\x18\x47\xb7\xcc\x6a\x10\xa5\x0f\x0f\x0b\x54\x71\x8c\x50\xea\x81\x80\x17\x54\xc2\x2d\x54\xc2\x52\xd0\xd3\xb6\x7b\x97\xbd\xfc\x6c\x76\xc7\x7f\x1e\x3b\xe1\x5f\xe6\x97\xc3\xbe\x3e\x4b\xb7\xf2\xc0\xfd\x8b\x61\x53\x4b\x69\x91\x1d\x08\xdc\x82\x4a\xb8\x8d\x56\x4b\x53\x8a\x30\xdf\xb7\xd7\xdb\x9d\x37\x18\xb1\xae\x1c\xa7\x0e\xd2\x58\x38\xfd\x60\xd4\x17\x71\x64\x10\xd3\xde\x96\x76\x7a\x64\x00\x02\xb7\xff\x2e\x79\x4e\x9b\xd3\xfe\x95\x3c\xde\x68\xcb\x17\x8c\x2d\xae\x22\x7d\x5c\x5a\x5a\xda\x22\xf6\x16\xee\x94\x4d\x64\x3f\xf8\xe1\xf8\xfd\x1f\x3a\xa9\x76\x25\xe6\x22\x8f\xc9\x99\x40\xc0\x1b\x6a\xc0\x77\xd0\x36\xb4\x06\xbd\xb8\xd0\x8f\x20\x13\x4b\xb8\xd6\xde\x92\xdb\xd6\x33\x15\x20\x8a\xf9\xf3\xca\x4e\x4d\xb4\x12\x41\x67\xc2\x8d\xbb\x1e\x34\x20\x70\x07\x2a\xc1\x07\x95\x60\xb2\x4c\xa4\x35\x80\xbb\xae\x9c\xb6\xd7\xe4\x15\x55\x14\xbb\x7d\xbe\x64\xc5\xc7\x73\x12\x19\xd3\x55\x70\xf7\x96\xcf\x91\x94\x12\x08\xf8\x40\x25\xf8\xa2\x12\x3e\x8a\x3d\x37\x34\x24\x9e\x1f\x9c\x21\x8d\x5a\xbb\xe0\xd1\x26\x2a\x77\xce\x7a\x21\xfa\xf2\x78\xf6\x6a\xfa\xc8\xb5\xb6\x9f\x43\xce\x20\xe0\x0b\x95\x70\x17\x95\xf0\xf9\xbc\x94\x8d\x08\xc6\xc1\x26\x7d\x63\xd5\x6e\x9a\x78\x76\x9d\x9d\x5a\x31\x35\x3c\x61\x19\x6e\x70\x01\xc9\x18\x49\xdd\x64\x0f\x02\x77\xa1\x12\xfc\xd0\x46\xb7\xb6\xb5\x7d\x3f\x9b\x2d\xc8\x2d\x2e\x0d\x8d\x7a\xdc\x14\x93\x79\x4c\xe0\x67\x8f\x70\x0c\x8b\x30\x50\x0d\xed\x5a\xf3\xef\x63\x06\x01\x3f\xa8\x04\x7f\x54\x82\x4d\x6b\xff\x1d\x7b\x49\x56\xca\x95\x7d\x02\xf9\xc2\x4f\x43\x9b\x1c\x0b\x0a\x99\x66\xcb\xe2\xe7\xba\x93\x02\x8c\x9f\xd0\x69\x1a\x83\x80\x3f\x54\x42\x00\x2a\xc1\xb2\x96\x5f\xa4\xb6\xaf\xb3\x40\xef\xa5\xee\xb2\xe2\xec\xf0\x87\x9d\xd2\xdd\x83\x75\x7e\xa4\xcb\xa1\x8b\xe4\xd9\x9d\x9c\x14\x4b\x10\x08\xf8\xbb\xc5\xb6\xd3\xbe\xd4\x43\x5b\x6c\x5b\x2c\x2c\xc1\x89\xc9\xb9\x47\xc4\xf2\xc0\x65\x98\xe5\xe2\xd1\x73\x71\x9e\x9a\x50\x1a\xbc\xcc\x32\xb8\x2b\x5f\x14\xc7\x3c\xbc\xe5\x84\x69\x7e\xac\xb8\x6a\x85\x1e\xf3\xd0\x7e\x90\xfd\x6c\x10\xaf\xa4\x94\x4f\xa3\xb7\x73\x2b\xe9\x3e\x81\x1c\x61\x5b\x43\x1a\x5b\x33\xd3\x09\xd3\x52\xc6\x29\x85\x67\x37\x78\x1f\x6f\x12\x44\xbe\xf0\xae\xe7\x98\xcf\x0a\x6d\x2f\x9b\x78\xeb\x85\xb9\x6b\x86\xaf\x67\x5a\xce\xad\x76\xc2\x74\x34\xc4\xa9\x50\x6f\x28\xa9\x21\xf9\xfc\xd7\x59\xa3\x6a\x8a\x63\x9b\xde\x88\xbb\xf6\x63\x23\x57\x6b\x2a\x5f\xc2\x6f\x52\x49\x9d\xfc\x66\xb8\xef\x2e\xee\x10\x95\xbe\x49\x76\x31\x9f\xdc\xcd\xed\x1d\xa6\x4a\x3d\xba\xbe\x8a\x18\xf5\xf0\xe6\xab\xb7\xe4\xc7\xfc\x13\xd2\x10\x27\x4c\xa5\x1d\x9e\x54\xd6\x2d\x70\xdd\x75\xa6\xd4\xfe\xa2\x4a\x86\x1d\xd6\xdf\x36\x37\x13\xb9\xca\x65\x8d\x27\xf4\x98\xe8\x3d\x15\xec\xfd\x09\xd3\xe2\xc0\xe0\xf0\x62\xf9\xee\xe9\x40\x0d\x72\xd3\xd2\x16\x7e\x4f\x99\xb4\x7e\x99\x1f\xa9\xaf\x3f\xe3\xf2\x4c\xef\xbe\x42\x58\x19\x9e\x3c\x96\xc9\xb8\x59\x7e\xe1\xe5\xd9\xef\x36\xaa\x61\x2b\x9e\xa6\xb7\x3f\xfc\xe0\xe6\x09\x19\x11\xa4\x5c\xec\xe1\xa0\x6e\x1a\x31\x95\xcf\xfe\xcf\x62\xdb\x69\xb5\xfa\xeb\x09\x16\x88\xda\x26\xee\xb6\xb0\x6b\xdf\x74\xcc\x9f\x1f\x4a\xed\xac\x7f\x0e\xaf\x7f\xae\xe0\xb9\xd5\xde\x6a\xda\x8b\x15\x72\x96\x32\x92\x9a\xa7\x89\x04\x04\x02\xa1\xb6\x3a\x10\x95\xe0\x2d\xc8\x30\x59\x7f\xe6\x0d\x77\x8f\xd5\xb6\x93\x98\x03\x23\x7f\x70\x54\xe9\x2d\xc7\xef\x06\x0a\x0c\x0e\x7b\x8b\xdd\x49\x7d\x98\x20\x00\x42\x25\x04\xa1\x75\x30\x28\x3a\x1d\xe6\x5b\xe3\xe2\xf5\x16\x68\x2b\x1d\x70\x9e\x37\xb9\xa5\x21\x69\xce\x08\x81\xf9\x2f\x91\xb8\x09\xea\x23\xf6\x1e\x20\x10\x04\x95\x10\x8c\x4a\x20\xc8\x18\xf0\xf1\x38\xf4\xfc\x42\x27\x79\xc7\x88\x3e\xc6\x3e\x2e\x11\x8c\x2c\x38\xbe\xae\xf4\x83\x74\xe4\x5a\x84\x90\x70\x86\x1b\x08\x04\x43\x25\x84\xa0\x12\xd6\xb1\x5d\xc2\x75\xc8\x43\x38\x38\x5b\x76\x6e\xdd\x1b\xa7\x89\x1d\x34\x21\xf1\xc8\xbf\x25\xfa\x74\xb9\x4e\x26\x66\xca\xe5\x81\x3e\x08\x84\x40\x25\xdc\x43\x9b\xb6\x15\xbc\x90\xd6\xcf\xdf\x62\xf3\xb1\x82\x6d\x9f\x03\xb7\x57\x98\xf4\xe1\x88\x56\x84\xda\x41\xb9\x93\x94\x8d\x84\x95\xaf\x0a\x2f\x08\xdc\x83\x4a\x08\x45\x25\xdc\xb8\xbf\xe0\x51\xe6\x36\x19\x30\x9b\x5b\x72\x5d\xb6\xa4\x8d\x4c\x57\x12\xe3\x75\x67\x7c\xab\x8b\x0c\x67\x58\xa1\x8b\x91\x81\x07\x08\x84\x42\x25\x84\xa1\x12\x98\x65\x88\x9f\x17\x01\x7c\xac\xab\x4f\x42\xd5\xa3\xd6\x7d\xf3\xc9\x3a\x72\x1e\xf7\x8e\x38\xd4\xde\x2f\x3c\x3f\xd1\xc8\xef\x78\x0e\x04\xc2\xfe\xee\xf5\x7f\xda\x73\xe6\x57\xf2\x84\xa3\x16\xa7\x97\x99\xa7\xaf\x8b\xf3\xed\x65\x25\xe7\xaf\x09\xc4\x09\x6f\xf7\x3f\xc4\x08\x27\x13\x56\x8f\x3b\xd7\xb8\xbe\xee\x7f\xc6\x12\xe9\x00\x02\xe1\x50\x03\x8e\x40\x25\x54\x08\xd9\x24\x77\xca\x10\x7f\xfb\x46\xf7\x22\xf9\xe3\x83\xdb\xf8\x57\xd3\x90\xb3\x1f\x15\x31\xcb\xe5\x3c\x73\x6b\x42\x96\x4a\xd4\x40\x20\x02\x2a\x21\x12\x6d\x2d\x1c\x2f\x0a\xf7\xb0\xda\x4c\x68\xbc\x44\x78\xee\x3d\x7f\x4b\xb7\xdb\x6d\x9a\x03\xc3\x92\x55\x8c\x89\x99\xa0\x6e\x27\x9a\x0c\x3c\x10\x88\x84\x4a\x88\x42\xfb\x82\xc1\x95\x33\xb6\x2b\x99\xed\x05\xd7\x50\xd7\xa1\x22\x05\x51\x5a\x35\xbd\xde\xf6\x0f\xfa\x31\x4c\xdd\x2f\x37\xa9\x9f\x29\x7b\xf2\x83\x40\x14\x54\x42\x34\x2a\xc1\xae\x38\xca\xcf\x86\xde\xf6\xbb\xd2\x1b\xa2\xaf\xb7\x29\x9e\x4d\xcc\x09\x06\xe6\x5e\xc5\x1b\x65\xb3\xa1\xb5\x1c\xbc\xaf\x9a\x4f\x0a\x02\xd1\x50\x09\x31\xa8\x84\x77\x6c\x48\x75\x8f\x90\xc5\xd8\x37\x3b\xb1\x41\x71\x1b\x37\xfd\xb6\x18\x1a\xec\xdc\x73\x1e\x5b\xa9\x6a\xce\xf4\x8d\xb7\xa4\x1b\x80\x40\x0c\x54\xc2\x7d\x54\x82\x2f\x5c\x75\xf6\xca\xb8\x83\xd3\x6d\x55\x9a\xc5\x06\xea\x8f\xf5\x02\x74\xfc\x09\xdc\x8c\x46\xed\x8d\xf6\x49\xfc\x55\x6f\x36\xd8\x40\xe0\x3e\x54\x42\x2c\x5a\xf2\xec\xcf\x7c\xbd\xba\xad\x4b\x2d\x36\xb2\xc1\x28\xb4\x0f\x7b\xf3\x6c\x79\xdd\x79\xa6\x49\xc0\x4e\x6a\x02\xe1\x23\x4f\xd6\x8e\x05\x02\xb1\x7f\x97\x3c\xa7\xbd\x79\x7f\x25\xcf\x03\xd4\xe2\x14\xf0\x58\xbe\xe7\x9a\x52\xaf\x55\xf5\xee\x2b\x34\xbd\xc1\xa9\x47\xf7\x65\x2f\x81\x87\xbc\x12\x77\x7c\xa2\x2b\xb9\xd7\xf2\x1c\x1f\x08\x3c\x80\x1a\x70\x1c\x2a\xc1\x73\x50\x3f\xc5\xc4\x42\x46\x75\x21\x85\x2e\x34\x75\xc9\x11\x4f\xd2\x21\xa1\x85\xf0\x0e\xf8\x6a\x53\x7c\xe2\xcb\x7d\xb0\x4e\x0e\x04\xe2\xa0\x12\xe2\x51\x09\x83\xfe\x04\x2e\xd4\x88\x8e\xaf\x0e\xaa\x16\x0a\x3d\x9e\x33\x2f\xf1\xd6\x70\x3c\x44\xfd\x7a\x31\xd8\x5c\xe3\xd7\x3e\xe2\x46\x29\x82\x40\x3c\x54\x42\x02\x2a\x21\xad\xa8\xbb\xa2\x92\xe7\xfb\x78\xaa\x4f\x30\x5b\xba\xc1\xc3\xc7\x2e\x72\x63\xd9\xc4\x84\x96\x72\x9e\x3c\xa0\x24\x66\xf1\xae\x11\x08\x24\x40\x25\x24\xa2\x12\xca\x56\x52\x0d\xcb\x43\xa9\xbf\xb0\x6f\xc4\xd5\x84\x4c\x10\xd1\x9f\xcd\x9f\x8e\x3a\x58\x39\x73\x3e\x76\x68\x6e\xe0\xfe\xc1\x4d\x11\x10\x48\x84\x4a\x48\x42\x25\x64\x97\x64\xc7\x0e\x7c\xf2\x8a\xdd\xd2\x48\x62\x37\x21\x89\xe0\x5c\xff\x99\x2e\x2f\xde\x36\xc2\x67\xba\xfc\xa9\x8f\x35\x9e\x8e\x03\x04\x92\xa0\x12\x92\x51\x09\xe2\xb8\xb8\xec\x98\xec\x1f\x0a\x6f\x6a\x3a\x32\x34\x6b\xec\xb9\x5e\x81\x3d\xe4\x4a\x56\x94\xfd\xf4\xd9\x85\xc4\xac\x89\x70\x1e\x0b\x04\x92\xa1\x12\x52\xd0\xd6\x3c\x08\xb8\x3b\x25\x45\x22\xa6\x85\x71\xcf\x06\x3d\x5a\xcc\x79\xc3\x56\x69\xa7\xbe\xe9\x76\xe7\xc6\x25\xbb\x7b\x56\x9d\x6e\x3c\x00\x08\xa4\xfc\x5d\xf2\x9c\xd6\x17\xfd\x95\x3c\xa9\xa8\xc5\xc9\xc5\xab\xe6\x2c\x9d\x91\x26\x8d\x7e\x27\xcb\x98\x38\x6e\x53\x3d\xc6\xa4\x9f\x68\xf4\x46\x95\xfc\xdd\xf2\xbd\xc8\x55\x09\x0b\x0a\x10\x48\x85\x1a\x70\x1a\xda\x26\x0c\xf6\x76\xd9\x67\x26\xaf\xee\xff\x90\x56\x1e\x78\x97\x6a\x36\x14\xf8\x62\x8f\x06\x56\xd0\x59\x10\x84\xed\x48\x33\xfb\x3a\xe7\x1c\x08\xa4\x41\x25\xa4\xa3\x4d\xe6\x79\x3c\xc9\x6a\xe4\x99\x68\x7f\x28\x69\xd1\x83\x7c\x96\xf4\x03\x4b\x36\x92\xce\xaf\x0a\xbe\xff\xaa\x25\x33\x77\x15\x87\x5e\x08\x04\xd2\xa1\x12\x32\x50\x09\x85\xd6\xc6\x38\x98\x19\x14\x65\xbb\x78\x98\xb6\x1b\xf4\xfb\x1e\xda\x2c\xe4\x6b\x34\xef\x75\x8e\xde\x6f\xc8\xa6\xda\x0e\xa9\xf0\x81\x40\x06\x54\xc2\x43\xb4\x21\x15\xc0\x7f\xcc\xb4\xcf\x3f\x13\x3f\x46\xa3\x7c\xb7\x15\x2f\x65\x27\x79\x9f\x0d\x3f\xb7\x37\x84\x2d\xb6\x68\x21\xcc\xcb\x9e\x12\x04\x1e\x42\x25\x64\xa2\x12\x8a\xb0\xaa\x69\xde\xf8\x1f\xc6\xbd\x5c\x55\x64\x63\xa9\x30\x3d\xa4\x0a\xf7\x50\x18\x3b\xf8\x96\x4d\x3b\xbd\x75\x9e\xd1\xbe\x0f\x1f\x04\x32\xa1\x12\xb2\x50\x09\x58\xf2\x92\x1c\x9b\x7c\x0f\x93\xe7\x1f\x4f\xd4\xe1\x57\x38\xdc\x30\xb5\x69\x85\xab\xdd\x2c\x8d\x18\x0b\xab\xe9\x78\x35\x04\xa3\x03\x81\x2c\xa8\x84\x47\x68\x9d\xdb\x21\xad\x46\x21\xc1\x4b\xd1\xf5\xe1\x3a\x66\x2d\xdf\x03\xe7\x2f\x5e\x76\x9d\xe1\x33\x7c\xd1\x07\x93\xa8\x9b\xea\xb4\x5c\xe5\x03\x81\x47\x7f\x97\x3c\xa7\x8d\xce\x7e\x25\x4f\x36\x6a\x71\x88\x2f\x12\xb0\x3f\x0d\xd1\xe7\xe8\x30\xe2\x34\x36\x9b\x25\xf7\x4d\xb1\xb8\x33\xaf\xba\x19\xe0\x46\x3a\xba\x9d\xab\x98\x5d\x4f\x0f\x02\xd9\x50\x03\x7e\x8c\x4a\x08\xb9\x60\x8a\xd0\xf6\x27\x90\xb9\x2d\xd0\x1b\x95\xc1\x48\xa4\x17\x80\x8c\xed\x91\x1a\x3f\xf0\x5a\xbd\xf6\xd3\xb6\xf5\xb2\x07\x1f\x08\x3c\x86\x4a\xc8\x41\x25\xd8\x3a\x5d\xbc\xc8\x6a\x2e\xcc\xb3\x05\xde\xe0\xf6\xfa\x38\xbe\xda\x53\x79\xc1\xf5\x40\x8d\xca\x07\x93\xd0\x15\x94\xfb\x64\xc1\x0b\x02\x39\x50\x09\xb9\xa8\x04\xe1\xc9\x0d\xb5\xe7\x8c\x25\x7d\xcc\x85\x15\x78\xaf\xaf\x7b\x7e\x7e\x7b\xa4\x48\xa0\xe5\x78\xdf\x38\x43\x4b\xa7\x2f\xe7\x0a\x9b\x3e\x08\xe4\x42\x25\x3c\x41\x25\xc8\x4e\x16\xdd\x26\x34\xca\xba\x75\xe8\xa6\x58\x76\xc9\xb6\xb4\xe9\xa5\xf9\x7c\xd2\x94\xf7\xdb\x72\xa1\x65\x4f\xdb\xb9\xbe\x6b\x16\x20\xf0\x04\x2a\x21\x0f\x95\xe0\x53\x5a\x94\x5d\xd3\xb5\xc0\xf0\x7a\x2c\xfa\x55\x08\xbf\xe2\xc0\xdb\x7e\xa2\x8d\xdd\xfa\x7d\x37\xda\x5c\xc4\x38\xcb\x59\x0b\x6e\x10\xc8\x83\x4a\xc8\x47\x25\x20\x2d\x89\x91\x37\xc9\x9f\x6f\x3c\x2d\xe8\xce\x56\x8c\x9d\x4f\x71\xb5\xbd\xba\x5b\x6d\xce\xbd\x3a\xda\x11\xf7\xe6\xa0\x53\x16\x0b\x04\xf2\xa1\x12\x0a\x50\x09\xc6\x58\x0d\xf4\x6b\x5c\x62\x81\x3d\x94\x2d\xb3\x09\x57\xfc\x63\x92\x3a\x6f\x15\xef\x9a\xf7\xae\xda\x2f\xb9\x3b\x2d\x56\x3d\xc7\x00\x81\x82\xbf\x4b\x9e\xd3\xe6\x2b\x7e\x25\xcf\x53\xb4\x2f\xaa\x68\xb8\x5b\x1f\x9a\xc0\x27\xa9\xa6\xb5\x5e\x0f\xb7\x4f\x0f\x1f\xb8\xe5\xbd\xb6\x89\x9a\x20\xf7\xce\x28\x06\xf8\x65\x58\x59\x40\xe0\x29\xd4\x80\x0b\x51\x09\xd8\x35\x1b\xb3\xb8\x31\xe0\x6d\xe1\xd2\x21\xf9\x41\x9e\x04\x32\xbc\xad\xf9\xc9\x87\x81\x1b\x48\xdc\x1e\xfa\xdc\xb7\xed\xb9\x84\x20\x50\x08\x95\xf0\x0c\x95\x10\xe8\xe5\x58\x1c\xbf\x5c\xd6\xbb\x94\x66\x69\x7a\x75\xfd\x6a\x57\xd0\x73\x7e\x02\xfe\xdd\xa2\xb7\x66\xcd\x01\x5f\xde\x19\x11\x5a\x80\xc0\x33\xa8\x84\x22\xb4\xc5\xb6\x61\xbb\xe0\x5d\xff\x8d\x2a\x05\xe9\xf7\xc1\x9a\xcf\xbf\xe4\x3f\xea\x8e\x1f\xc8\xbd\xd7\xd6\x29\x34\x44\xa8\x95\xb7\x0a\x78\x80\x40\x11\x54\xc2\x73\x54\x02\xfc\x47\xd5\x11\xd3\xa3\x01\x2f\x53\x3a\xfc\x1e\x79\x99\x86\xe0\x33\x0e\x66\x0f\x2c\x12\x81\xbd\xe1\x3b\xd1\x24\x64\x89\xda\xca\x20\xf0\x1c\x2a\xa1\x18\x95\x20\x73\x6f\xd4\x3b\x83\xfa\x92\xec\xa3\x55\xff\x37\x64\xed\x5c\xec\x87\x5f\x5e\xe0\x3a\xb1\x51\xfb\x54\x24\x7f\xdd\xa1\xd7\x5a\xbb\x04\x02\xc5\x50\x09\x25\xa8\x84\x9b\x9f\x97\x8e\x3d\x17\x16\x9a\xa7\x6a\x5e\xe2\x8c\x78\x36\x8d\xe9\x4e\x89\xed\xdd\x89\x34\x7e\x14\xea\x47\x76\x81\xe1\x07\x1e\x12\x04\x4a\xa0\x12\x5e\xa0\xed\xc2\xca\xe0\xdd\xb3\x34\x34\xb0\xdd\x5a\x4b\xb3\x19\xa4\xfc\xfa\x48\xff\xfe\xe8\xcb\xda\xb9\xd0\xb3\x6b\xd1\x9a\xe7\xeb\x1f\x45\x68\x81\xc0\x8b\xbf\x4b\x9e\xd3\x66\xf0\x7e\x25\xcf\x4b\xb4\xde\xfc\xf7\x50\x1a\x02\xbf\xa7\x55\x81\x9e\x2d\x36\x92\xf9\x2d\x9f\x46\xac\xe3\x5b\xf3\x34\x33\x26\xad\xa7\x2b\x46\x6f\x3f\x3e\xa7\x04\x02\x2f\xa1\x06\xfc\x0a\x95\x80\x43\xd3\x33\x58\xb9\x41\xbd\xcc\x72\xaf\xee\xcb\xaa\xaf\x90\xb2\xd3\x8d\x0d\x2c\x78\xad\x90\x1f\xdb\xec\xf3\x65\xa0\xcd\xe6\x06\x08\xbc\x82\x4a\x28\x45\xdb\xc1\xf4\xc2\xc9\x2e\x86\xdf\x3a\x4d\xd5\xee\x28\xaa\xa4\x62\xa8\x9c\xb7\x5f\x9d\x9d\x7d\x44\xe3\xc8\x53\x4d\x74\xdb\x82\x96\xe8\x0a\x08\x94\x42\x25\x94\xa1\x12\x4a\x6f\xa7\xc5\x64\x39\x71\x26\x3c\xb9\xbd\x58\x67\xb2\xf4\x73\x6f\x27\x5c\x21\x65\xad\x67\x1b\x8e\xc9\x98\x3a\xf4\xe8\x8d\xd4\x25\x10\x28\x83\x4a\x78\x8d\x36\x25\x11\xb4\x2d\xdf\xd3\x2b\x4d\x9c\x58\x73\xfb\x4a\x3e\x77\x56\x8d\xa6\xe1\xc6\x7d\x31\x6f\x3a\x63\xcb\x6e\x79\x82\x3a\xb7\x32\x16\x10\x78\x0d\x95\x50\x8e\x4a\x58\x85\x11\xd2\xfa\x71\xbb\xbc\xf9\x20\x54\x58\x6c\xf8\x48\x7a\x5e\x3b\x76\x9c\xc2\xa7\x5c\x17\xfc\xd9\xa9\xe3\xe6\xcc\x31\xac\x07\x02\xe5\x50\x09\x6f\xd0\x36\xcf\x8b\x98\x24\x75\x5d\x6e\xba\x35\x8a\xbd\x8b\x91\x53\x7e\x77\x7e\xea\x59\x55\x0b\x82\x33\xc5\xc5\x5d\xcb\x38\xa0\xb0\x40\x92\x13\x04\xde\x40\x25\x54\xa0\x12\xf6\x4c\x1e\x4f\x35\x45\x46\xe6\xb3\x3f\x8b\x31\xb6\x2a\x2d\x5b\xf0\x89\xe4\x70\x97\x20\xb7\x17\xc4\xf7\xf1\x0a\x23\x1b\x31\xb1\x00\x81\x8a\xbf\x4b\x9e\xd3\xe6\xb4\x7f\x25\x4f\x25\xda\x24\x6c\xf6\x23\x82\x1b\x79\xf7\xe6\x48\xb0\xf3\xf1\x5d\xeb\x0f\x2e\x0e\x17\x2a\x06\x55\x5e\x6f\x77\x65\xdc\x7c\x81\x7f\xf8\x33\xc8\x1d\x04\x2a\xa1\x06\x5c\x85\x4a\xd8\x7c\x10\xde\x54\x5a\x2f\x29\x74\x53\x35\xea\xe8\xc2\xf0\x6b\xca\x8c\xfb\xcd\x30\x02\x95\xf7\xb9\xd7\x3f\x71\xbe\xe0\x0d\x4b\xb0\x03\x81\x2a\xa8\x84\x6a\xb4\xc5\xff\x59\xc1\x1a\xd6\x55\xc5\x16\x03\x75\x25\x2d\x86\x42\xae\x64\x5a\x8c\xc0\x4c\x39\xb6\xa4\x44\x4a\xa2\xc0\x85\x73\x79\x06\x22\x20\x50\x0d\x95\xf0\x16\x95\x90\x55\x61\x8a\x65\xf9\xb5\xed\xbc\x47\xbc\x56\x61\x09\xf2\x6a\x6c\xa5\xef\xb4\xa0\x9b\xb3\xfc\xf1\x31\x27\x03\xde\x91\x77\xe6\x4d\x10\x78\x0b\x95\x50\x83\x4a\x10\x8c\xf8\x30\x82\xed\xf4\xa3\xbf\xff\x0e\xc1\xec\x3e\xc6\x4c\x9a\xe3\x22\xf3\x82\xd2\x2b\x5f\x59\x2d\xfc\xec\xad\x47\x6b\x09\x4e\x20\x50\x03\x95\x50\x8b\xf6\x5e\xf0\xc9\x5a\xd1\x57\x62\x8f\x1a\xc0\x0b\x9c\xe8\xd7\x70\xef\x4b\xfd\x3c\xc6\x58\xa1\x61\xc8\x2f\xb1\x25\x59\xdc\x59\xc4\xa9\x03\x02\xb5\x50\x09\x75\x68\x33\xb7\x65\x32\x61\x6a\xa6\xee\x35\x57\x76\x04\x10\xf9\x5b\xde\x99\xde\x92\x57\x9d\xc5\x7a\x4a\x1c\xd5\xfc\x5c\xef\x15\xfa\xf4\x3a\x82\x40\x1d\x54\x42\x3d\x2a\xe1\x52\x6d\xd7\xa3\xd1\xa3\xaa\x73\x2c\x46\x0d\x13\x14\x2f\x16\xe6\x43\xe3\x9c\xf2\xaa\x9e\x3c\x34\x9f\x12\xcd\xcc\xf0\x79\xd1\x43\x0f\x02\xf5\x7f\xb7\xd8\x76\xda\x59\x97\x68\x8b\x6d\x73\x98\x85\x1b\xcf\x85\x0e\x76\x09\x5b\xf8\x3f\x4d\xb2\xb6\xcd\x36\x2c\xbd\xf8\x3e\xf1\x4c\xe9\x0a\xf0\xd8\x79\xa1\x6b\xee\x8b\xd8\xc9\x63\xc7\xe1\x05\xad\x77\xeb\x82\xa6\x5e\x1f\xb4\x20\x03\x48\xd3\x98\x1e\x4c\xdf\xaf\xe7\xf4\x28\x32\x1a\x56\x9d\x17\x16\x53\x62\x4b\x38\x79\x6c\x7a\x88\xa6\xb7\x81\x98\xf0\x28\xf5\x28\x3c\x5a\x27\xb2\xce\x86\x6a\xaf\x30\x72\x02\xe9\x75\xf8\x56\xc1\x81\x32\xbc\x9d\x6d\xf3\x84\xa9\x7a\xd5\xb4\xb4\x25\xdf\xbb\xb1\x96\x9c\x3e\x36\xc7\x57\x81\x9d\x7b\x1c\x92\xb3\x66\xc9\xe4\x84\x31\x82\x84\x64\x9c\x5b\x5f\x4f\x4a\x5f\x44\x8f\x55\xda\xb2\xe8\x74\xc7\xf6\x3a\x30\x6e\x38\xb1\xf7\x5f\x5e\x29\xa1\x97\x5a\x88\x54\xd9\x18\x68\x95\xce\xc7\xe2\x98\x1b\x39\x61\x6a\x83\x49\x12\x70\x9e\xe1\xcd\x94\x28\xe7\x82\x3b\x55\x3a\xde\x55\x2e\xc1\x48\x1f\x24\xaf\x3e\xd5\xe5\x40\xf3\xa5\x04\x49\xaf\xc9\x93\xc7\x78\x76\x8b\xfc\x1c\x7f\xf7\x2a\x67\xb0\x72\xba\x03\x5e\xa8\x28\x6a\xab\xbc\xb1\xf9\xf5\xa9\x82\xcd\x8a\xdb\x58\x9d\x44\x62\xc6\xd8\x09\x53\x8d\x0f\xb3\x8f\x55\x15\xef\x65\xad\x51\x70\x80\x42\x51\x66\xe6\x35\x86\x7e\x59\x0e\xac\x08\x89\x32\xf5\x4e\xda\xc6\x56\x97\x80\xff\x2c\xb6\x9d\x56\xab\xbf\x9e\x60\x0d\x68\xdb\x05\xc6\xcd\x18\x56\xf2\xba\xdd\x42\x4d\x93\x5f\xe2\xa5\xb0\xdb\x3a\x58\xdf\xc8\xaf\x10\x55\xa2\xe7\xe9\x3c\x1b\x14\xac\x84\x8f\x0d\x02\x0d\x50\x5b\x5d\x23\x2a\x21\xa6\x88\x89\xba\x20\x69\x48\x79\x80\xed\xc5\xb5\x6d\xab\x8b\x21\xb4\x9c\x55\x98\xb7\x57\x76\xdc\xee\x4b\x05\xd3\xe0\x7f\x4b\xe0\x03\x81\x46\xa8\x84\x77\xa8\x04\xea\x87\xe6\xc2\xef\xee\x5e\x6a\x6f\xae\x94\xfa\xe6\x93\xd9\xa9\x6f\xa8\x41\x56\xd6\xa2\xbf\xae\x1e\xa7\x2d\xe0\x34\x3c\x1a\x27\x00\x02\xef\xa0\x12\x9a\xd0\xb6\x60\x7d\xc9\xf9\x76\x96\x65\x7f\xd2\x8f\x24\xc7\x49\x68\x98\x35\x74\xed\xce\x95\x1b\x1e\xba\x8f\x2f\x75\x3b\x26\x63\x96\x7f\x6f\xbd\x0e\x02\x4d\x50\x09\xcd\xa8\x04\x4d\x8b\x46\x8a\xf7\x9d\x47\xfe\xcd\x73\x22\x24\x8d\x1b\x13\x16\x31\xf9\x76\x9c\x55\xdb\x97\x0f\xaa\x2c\x16\x6c\x53\x32\xc3\xcd\x40\xa0\x19\x2a\xa1\x05\x95\x40\x91\x92\x4d\xac\x5b\x23\x95\x68\x37\xea\xae\x62\x5c\xdf\xc4\x59\xc5\x5a\x92\x93\x12\x13\x09\x86\x86\x4c\xab\xee\x8f\x5a\x89\x82\x40\x0b\x54\x42\x2b\x2a\xc1\x2a\x7f\x8b\xf9\x05\xf6\x54\x9c\xc2\x32\x2e\x4f\x2b\xfe\xe5\x24\xc9\x98\x0f\x01\x62\x4a\x47\xac\x75\x9e\xb9\xb1\xf2\x62\xb3\x58\x20\xd0\x0a\x95\xf0\x1e\x95\x60\xe1\x6b\x2f\x44\x64\xd1\x85\x19\x19\xda\x73\x38\x65\xc8\x9f\x5e\x22\x59\x3c\xd4\xf0\x69\x43\x3b\x97\x2d\xbd\xd8\xf3\xe5\xe2\x59\x10\x78\xff\x77\xaf\xff\xd3\x9e\x33\xbf\x92\xa7\x0d\xb5\x38\xe5\x5f\xf8\x0d\xb0\x85\xd8\xb7\x58\x2e\x0e\x7b\x78\x88\xd4\x62\x9c\xaf\xcd\x5e\x0a\xc8\x63\xe0\x3f\xd0\xc3\xeb\x2b\xf6\xcc\x71\x01\x81\x36\xa8\x01\xb7\xa3\x12\x6a\x79\xac\x4d\x29\xfd\x5e\xdd\x94\x61\xf0\x30\xcc\x7e\x97\xa6\x9c\xf7\xec\x1a\x4d\xf5\x7b\x1d\xbc\x9c\x45\x1e\xd7\xb1\xaf\xfc\x1c\x20\xd0\x0e\x95\xd0\x81\x4a\xe8\xc6\x7c\xc4\xdd\xd0\x1e\xaf\x83\x20\xfa\xa0\xec\x1b\xf9\xa8\x34\x8e\xe6\xce\x99\x2d\x12\xd7\xf2\x21\x00\x37\x8c\x85\x89\x97\x0a\x04\x3a\xa0\x12\x3a\xd1\xfa\x9d\xfb\x55\x1f\x5b\x1c\xef\x8f\x0e\xf1\x9c\xdd\x7a\xbd\x65\xcb\x60\x8c\xeb\x6f\x1b\xca\xa2\x7a\x43\xb7\x90\xef\xe8\x8c\x84\x9c\x30\x08\x74\x42\x25\x74\xa1\x4d\xaa\x16\xb9\x53\x47\x84\xd4\x7f\xb0\xbf\x65\x11\x48\xf4\xd0\x74\x67\xdc\x2c\x1e\xdf\x5e\xed\x93\x84\xe9\x6a\xce\x94\x63\x03\x93\x1a\x08\x74\x41\x25\x74\xa3\x6d\xe7\x6b\x1b\x0e\xe8\x0d\x53\xa5\xd5\x5c\x16\xeb\x31\xa9\x20\x2d\x6a\x39\x97\x4c\x60\x39\x64\xbd\x74\x25\x37\xa8\x92\x65\xde\xd9\x1e\x04\xba\xa1\x12\x7a\x50\x09\xb3\x43\x9d\x94\x3a\xaf\x1e\x3c\xbc\x2e\x0c\x4e\xdd\x3c\x4b\xec\x8b\xf9\xe1\xd9\xac\xfd\xc0\xb1\xf0\xf8\x7b\xf1\x65\x4b\x27\x37\x67\x10\xe8\x81\x4a\xe8\x45\xfb\xd0\x4b\x78\xb1\xe3\x5e\x7b\x80\x43\xfb\x99\xae\xb4\x15\x77\xdf\xae\x86\xa1\xfc\x70\x3f\xec\x8b\x7c\xed\x9b\x6f\x1c\x06\xf3\x72\xc5\x41\xa0\xf7\xef\x92\xe7\xb4\x37\xef\xaf\xe4\xe9\x43\x2d\x4e\x65\xa9\xf3\x25\xd6\xeb\x38\x4c\x9a\x8f\xb9\xfa\x07\xfb\xde\xc5\x77\xd9\x4e\x19\xd8\x72\x11\x72\x77\x96\x99\xda\xe5\x9b\xd7\x93\x83\x40\x1f\xd4\x80\xfb\xd1\x76\xce\x1b\xef\x63\x16\xb1\xa4\x5f\xe5\xaf\xeb\x30\x42\x06\x90\xd4\xa4\xc8\x46\x15\x1c\x1e\x86\x55\x0d\x3e\x73\x7f\x22\x14\x2d\xa2\x09\x02\xfd\x50\x09\x1f\x50\x09\xd2\xc7\xef\xc6\xdf\x50\x36\x31\xb6\x9c\xcf\x43\x6c\x61\x0c\xd8\x5d\xa1\xea\xb2\x24\xc6\x62\x5e\x08\x4e\xe2\xa8\x72\xbb\x6e\x20\x00\x02\x1f\xa0\x12\x06\x50\x09\x2a\x35\x39\xdc\x84\x70\x45\xe1\xee\x86\x38\xa3\x11\x22\xad\x01\xd5\xf9\x8d\x9d\x62\xe2\x1c\x96\x9b\xbb\x19\x21\xd9\x82\xc1\xc4\x20\x30\x00\x95\x30\x88\x4a\x90\xef\x08\x0d\x0e\xf9\xc4\x16\xb2\xa2\x20\x4f\x85\xf9\x48\x4a\xf0\xeb\x35\xe0\xe0\x59\xe9\xd2\xb2\x5e\x4c\x05\x1d\xa3\xc3\x3e\x21\x08\x0c\x42\x25\x0c\xa1\xad\xdb\xb4\xeb\x78\x85\x54\x6e\x30\xf2\x32\x19\x99\x96\x46\xdb\x53\x84\x31\xcd\x19\xd2\x04\x04\xc9\x7e\x13\xed\xb4\x7c\xf3\x29\xc2\x15\x04\x86\xa0\x12\x86\xd1\x7a\x00\x58\x41\x79\x9d\xdf\xe9\x1f\xcc\x28\x61\x93\xd8\x82\x4f\xd7\xb9\xf4\xbf\x3e\xb4\x9a\x92\xd7\x3d\xce\x80\x6f\xe2\x18\x8d\xd9\x81\xc0\x30\x54\xc2\x08\x2a\x21\xd2\xa2\xe3\xbd\x49\x03\x97\xa4\x1a\xcf\xc8\x35\x4d\x82\x90\xbc\x6f\x1b\x3a\x24\x86\x9b\x3b\xa2\x43\x55\xb3\xf0\x66\x0a\x4d\x5a\x10\x18\xf9\xbb\xe4\x39\xad\x2f\xfa\x2b\x79\x46\x51\x8b\x13\xee\xb7\xb5\x47\xea\xdd\x5d\x53\x1f\x48\xd3\x4f\xed\x82\x1f\x25\xbb\x85\x27\xcd\xfa\x31\x74\x9e\x22\x8d\xf2\x53\xd3\xd1\x9c\x3a\x08\x8c\x42\x0d\xf8\x23\xda\x7a\x41\x83\x48\x0b\x82\xfe\x86\x6c\xb2\x9d\xd3\x07\x40\xe7\x81\xe1\x98\xe7\x05\x56\x82\xbc\xb9\x1c\x26\x95\xa5\x88\x5b\x73\xe7\x4c\x41\xe0\x23\x54\xc2\x18\x2a\xe1\xb9\xe8\x55\x06\xc6\x82\x61\xb7\x71\xc3\x18\xa9\xc4\x04\x6a\x8e\xcd\x12\x7f\x7a\xf3\xeb\xd7\x68\x7a\x6d\x64\x96\x96\xb3\xef\x53\x83\xc0\x18\x54\xc2\x38\x2a\x41\x6e\xad\xad\x50\xa8\x5f\xb9\xb6\x70\xb1\xa8\x92\x75\x57\xed\x4b\x0b\x12\xdb\x5f\x4d\xbc\xd9\xfe\xf8\xd3\xab\x27\xe7\x92\x38\xc9\x41\x60\x1c\x2a\x61\x02\x95\xd0\xe3\x2e\x5c\x85\x38\xbe\xf0\x59\xbf\x59\x28\xeb\xe9\xb8\xa3\xac\x93\x1a\x41\x6a\x41\xdb\xf5\x05\xde\x71\x71\xdb\x1f\x44\xfa\x1c\x20\x30\x01\x95\x30\x89\xf6\x91\x54\x1e\x98\x18\x3b\xc7\x0a\x63\x98\x65\x78\xd1\x96\x3e\x47\xc1\x76\xe1\xd0\xc6\x88\x48\xbd\xcc\xdc\x4d\x6a\x34\x1e\x8b\x83\x1d\x04\x26\xa1\x12\x3e\xa1\x6d\xc2\xee\xc1\x55\xea\xa2\xbe\xfe\x22\xe3\x50\x95\x87\x18\x26\xc8\x4e\x32\xd0\xc1\xf8\x15\xef\xce\x9e\x41\x3c\x77\x1d\xb3\x3d\x86\x07\x08\x7c\x82\x4a\x98\x42\x25\xbc\xac\xcd\x90\x33\x62\x84\xcf\x6c\xf1\x6d\x72\x0e\x7c\x8c\xe5\xed\xad\xff\xc9\x30\xc8\x9f\xcc\x5c\xf2\x72\x04\x94\xe1\x62\x15\x01\x81\xa9\xbf\x4b\x9e\xd3\x46\x67\xbf\x92\x67\x1a\xed\xa6\x65\xb4\x29\xf0\xd7\xc1\x8b\xfc\xde\x32\xe0\x6f\xf2\xa9\x60\x04\xac\xb7\x74\xf2\x5b\xb9\xf7\x27\x5f\xaa\xcc\x95\x24\x2e\x3a\x07\x02\xd3\x50\x03\x9e\x41\x25\x38\xba\xfd\x7c\x56\x7b\xc8\xa4\x9f\x41\x25\xfd\x5d\x53\xb6\xfa\x49\xa7\xd0\xed\x67\x21\x0c\x83\x2e\x78\xb4\x4c\xcb\x19\xf1\x45\xee\x20\x30\x03\x95\xf0\x19\x95\x90\x88\xb5\x6a\x34\x52\x0c\x6f\xdf\x74\x66\x7d\xb2\xf4\x15\x9e\x3c\xda\xb3\x91\xba\x32\xd7\x24\x4a\xc3\x1c\xd1\xd1\x47\x75\x9d\x03\x04\x3e\x43\x25\xcc\xa2\x12\x8e\xaa\x9f\xee\x6b\xb7\x5d\xbd\xdc\xbb\x27\xf7\xe6\xf9\x9e\xb6\x0a\xde\x5a\x4e\x11\x76\xac\x6c\x73\xbc\x3f\x60\x9b\xad\x13\xcc\x0c\x02\xb3\x50\x09\x73\x68\xab\xed\x6b\xfc\x08\x42\x4f\x8c\xa7\xb6\x53\x02\x17\x32\x5d\x93\x8a\x99\x27\xc8\x57\xb3\xf9\x23\x7c\x48\xd2\x76\x8a\x01\x40\x52\x00\x04\xe6\xa0\x12\xe6\x51\x09\x73\x43\xb9\x98\xbb\x95\x1e\xf9\x4d\x26\xd1\x5c\xfd\x8b\xb5\xd7\xe1\x6f\xfc\xee\x18\x6d\xb0\xc4\x4b\x44\xb1\x54\x5b\x7d\xb1\x17\x01\x81\x79\xa8\x84\x05\x54\x02\xed\xcd\x27\x5f\xad\x5d\x68\xb1\x8e\x97\xba\x25\xfd\x2f\x12\xec\x5b\x77\x11\xce\x99\xb2\xbc\xb9\xeb\x7c\x61\xf3\x5a\xd1\xad\x75\x7b\x10\x58\x80\x4a\x58\x44\x25\x18\x49\xce\xa7\x61\xb0\x73\xad\x34\x65\xfc\x60\xbd\x3f\x43\x78\xfd\xa9\x86\x24\x27\x9e\x84\xfc\xd7\x5c\xe1\xe0\x85\x31\x5a\x87\x2b\x20\xb0\xf8\x77\xc9\x73\xda\x7c\xc5\xaf\xe4\xf9\x82\xb6\x50\x75\x7f\x01\x19\xc2\xc5\x1d\xc0\x90\xcf\xe3\x71\xd6\xbe\x3d\xbf\xf0\x47\x0f\x91\xe3\x4d\xc3\xb7\x67\xf7\x9d\x17\x64\xbb\xb8\x2c\x40\xe0\x0b\xd4\x80\x97\x50\x09\xcd\xa9\xe4\xb8\x6d\x6e\x2f\x87\xfd\x0d\x2f\x4a\x0f\x7d\xc3\x6b\xd4\xc5\xc4\x32\xeb\x65\xa4\xbf\xd0\xfc\xee\xe9\xdd\xfb\x61\xbd\x44\x20\xb0\x04\x95\xb0\x8c\xd6\x13\x7e\x53\x8a\x2d\xab\x5e\x34\x87\x3c\xc3\x6e\x32\xa7\x21\x5a\xce\xb9\x97\x93\x3e\x78\x83\x9e\x4a\x4f\x88\x95\x02\x93\xa7\xdc\x0a\x04\x96\xa1\x12\x56\xd0\x36\x61\xbc\xe8\x73\x3e\x43\x5b\x16\x60\x73\x39\x4d\xcd\x83\x2b\x93\x71\x38\xd1\xe7\xfe\x24\xa2\xa5\x49\x91\x89\x5e\x35\x5b\xc7\x4c\x0a\x04\x56\xa0\x12\x56\x51\x09\x39\x43\xe6\xaf\x6e\xea\x36\x99\x95\x6d\xcc\x5c\x77\xdf\x4b\x48\x12\x1a\xe4\xe9\xde\xdb\x5f\x26\x1a\xb4\x4b\xde\x15\x8c\x90\xa3\x04\x81\x55\xa8\x84\x35\x54\xc2\xc3\xa7\x72\x75\x52\xb8\x23\xc7\x8a\x3e\x0f\x28\xe2\x28\x0b\x05\x74\x3d\x09\xaa\xd6\x09\x4c\xb6\xbb\xc8\x6d\xb6\xab\xe2\x7a\xd9\x41\x60\x0d\x2a\x61\x1d\x95\xc0\x7d\x5c\x10\x78\xe8\xfc\xb1\x9b\x09\xdb\x7f\x8d\x5d\xc6\xa7\x4a\x5c\xfd\x81\x8a\xe1\xd7\x59\xcc\xaf\x3c\xb9\x0f\xb9\xfc\x99\x58\x40\x60\x1d\x2a\x61\x03\xad\x17\x43\x32\xbc\xa8\x5d\x68\x85\x85\x19\x96\xf3\xa9\x26\x7e\xfd\x42\xf7\x62\xc6\x43\x9d\xfd\x35\x7f\xa2\x1e\xb2\x01\xe7\x04\x61\x06\x10\xd8\xf8\xbb\xe4\x39\x6d\x06\xef\x57\xf2\x6c\xa2\x0d\x54\xd3\x5a\x2e\xce\x55\x14\x9c\xaf\xe6\xf5\x05\x7e\x7e\x2f\xe5\x0b\xc1\x9b\x6d\xdf\x87\xbf\x35\xd6\xc2\x14\x7c\x39\xaf\xbb\x61\x0e\x02\x9b\x50\x03\xfe\x8a\x4a\x30\xef\x26\x1c\xfa\xd2\xf6\x28\x5c\xfd\x06\xb5\xe9\x12\xc6\x92\xdc\x24\xe5\x5b\xae\x9f\xe6\xb5\x3d\xbc\x73\x61\x6f\xb2\x8b\x89\xec\x41\xe0\x2b\x54\xc2\x16\x2a\x61\x78\x5c\xe5\xa6\x41\x71\x56\x84\xf2\x5b\x0a\x7c\x9e\xd0\xb1\x3c\xe2\xcd\x71\xfe\x97\xd3\xb7\xdb\xb7\xdf\xae\xa8\x7f\x75\x11\xe4\x02\x81\x2d\xa8\x84\x6d\x54\xc2\xf2\x55\xb2\x62\xd9\x86\x48\x87\x9b\xe7\x55\xfb\x9d\xdf\x2a\xc4\xf5\x1b\x1e\xfb\x52\x78\x6d\x6e\xef\x54\xd2\xdc\xa8\xff\x18\x82\x00\x81\x6d\xa8\x84\x1d\x54\x02\x9b\x80\x10\xe5\xfb\x5b\xf3\x53\xe0\x3c\xa1\x96\xf6\x05\x3f\xfb\x9f\x5a\x84\x83\x61\x42\xc4\xac\x95\xc4\xb2\x7c\x5f\xb2\x5a\x0d\x41\x60\x07\x2a\xe1\x1b\x5a\xa7\x6a\x01\xf9\xa0\x50\xd2\xb3\xbf\xc1\xcb\xde\xb4\xb0\x2c\x9f\xb6\x26\x33\x00\xb8\x99\xf5\xca\x78\x52\xdd\xb0\x31\x66\x9a\x9e\x1a\x04\xbe\x41\x25\xec\xa2\x4d\xab\x7c\xd2\xd8\xfc\xf8\x64\x68\x83\xf2\x58\x66\x98\x4d\x90\x89\x3f\x96\x9e\xcc\xae\xed\x43\xf6\xfb\xc3\x72\xa7\x0f\xe7\x22\x55\x39\x40\x60\x17\x2a\x61\x0f\x6d\x75\xcb\x32\x42\x8b\x07\x49\x9f\x31\x13\x2b\xb8\x5f\xca\xa5\x0b\xa7\x4c\xb2\xca\xe1\x5e\xe0\xd5\x24\xfa\xf6\x4e\xf9\xe3\xae\x33\x3e\x08\xec\xfd\x5d\xf2\x9c\x36\xa7\xfd\x2b\x79\xf6\x51\x8b\x23\xe1\x26\xd0\x7d\x11\xcf\xe0\xf2\x07\xa9\x20\xf6\xe0\xe9\xc7\x6f\x5b\x0c\x4c\xcd\x8b\x13\xf9\x83\x9c\x69\x74\x7a\xc9\x4a\xdc\xad\x41\x60\x1f\x6a\xc0\x07\xa8\x04\xed\x4b\xca\xae\x6e\xb7\x76\xe1\x52\x35\x4a\x08\x21\xd3\xb4\xb8\xb3\x1d\x97\x2b\x02\xbd\x12\x7b\x71\x56\x6a\x99\x0c\x7f\xb6\x2a\x80\xc0\x01\x54\xc2\x77\xb4\x55\xde\x3a\x3e\x57\x97\x07\x24\x0d\x19\x5f\x5f\x45\x6f\x24\x24\x89\xdb\x32\x9d\x4d\xc6\x75\x8c\xac\xf4\xd3\xd1\xca\xb0\x62\x50\xbc\x0c\x02\xdf\xa1\x12\x0e\x51\x09\xa9\xf2\xc2\x0e\xab\xab\x02\xbd\x6c\xe2\xfb\x0a\x5e\x57\xc5\xda\x46\x18\x88\x83\xd5\x78\x71\xe9\x97\x60\xdd\x38\xaa\xee\xa1\xe4\x20\x70\x08\x95\x70\x84\xf6\x7e\x7e\x3b\x10\xb2\x9f\x6e\x7d\x33\x95\x8c\x52\xef\xfb\xa3\x1b\xbb\x92\x58\x37\x7b\x8f\x94\x95\x0e\xf5\x56\xb4\x3c\x4a\x68\x6d\x30\x40\xe0\x08\x2a\xe1\x07\xda\xe8\xd6\xfe\x95\x70\xc1\xe7\x06\x4a\x23\x31\xd5\x08\xc9\x97\x67\x7e\x54\x33\x5a\x68\x87\xa9\x28\x04\x98\x64\x4e\xea\x31\x62\xdd\x90\x01\x81\x1f\x50\x09\x3f\x51\x09\xf7\x10\x56\x4f\xd6\xf4\x46\xdc\x0c\x63\xb0\xcf\x4d\x87\x66\x84\x61\xef\x44\xcf\x5f\x63\x94\x7d\x1e\x01\xbf\x71\xf5\x83\xc1\x4b\x7b\x10\xf8\x09\x95\x70\x8c\x4a\xe0\xd2\xd6\x5e\xd5\xe2\x38\x97\x8a\xcd\xc6\x1a\x7d\xe7\x0e\x75\xb3\x67\xb1\x99\x50\x34\x6d\x63\x6e\xc8\x26\x2b\x69\x08\xf5\x3b\x6b\x10\x38\xfe\xbb\xc5\xb6\xd3\xd4\xe2\xd0\x16\xdb\x6e\xaa\x4f\x75\x73\x36\x66\x7f\x7c\xbc\xf7\xca\xad\xa8\x70\xfc\x02\xe2\x06\xbf\x75\x65\x8c\x90\x69\xae\xd8\xa6\xbb\xa0\x23\x70\x52\x5c\x4e\xa4\x43\x61\xd6\x8b\x58\x8b\xed\x93\x93\xc3\xb3\xa6\x2f\x5d\x35\x05\x2b\x01\x95\x46\xb8\xeb\x54\x56\x88\x65\xc6\x04\xe1\x8a\xd6\x13\xa6\x45\x2b\xd1\x48\x11\x9d\xeb\x7e\x71\xea\x34\x83\x2d\x01\x2e\xc9\x1f\x3e\x14\xdf\xb4\x3e\xae\x13\x7e\x17\x65\x70\x9d\x9b\xfc\xd6\xf9\x13\xa6\x51\x95\x8f\x32\x0c\xa5\x1d\xc9\x32\xf3\xe2\x06\xc6\xdf\x94\x6d\xf4\xdd\xba\x7a\x5e\xee\xf8\xa9\xbd\xbf\x53\x62\x02\xe1\x32\xf7\xc9\x02\x44\xe5\xcf\x95\xbe\xfc\xff\x70\x76\xdf\xe1\x5c\xbe\xff\x1f\xf0\x3b\x2f\x5b\x44\x32\x3a\x6d\x65\xef\x6c\x32\xb2\x4b\xa8\x8c\x8c\x90\x11\xd9\x19\x21\x14\x2e\xca\xa8\x28\x99\x11\x92\x32\xa2\x10\x99\x19\xc9\x48\x56\x56\x46\x09\x59\x21\x92\x99\x84\xfb\x70\xff\x6e\xdf\xa3\xe3\xfa\xc7\x7d\x7d\xfe\x7f\x1d\x87\xcf\xfb\x7a\x5f\xcf\xd7\xf9\x3a\xcf\xf3\xf3\xee\x51\x90\x9f\x73\xb6\xdc\x70\x44\x91\xb5\xe9\xf0\xc9\xfa\x93\x1f\xff\xf4\xcd\xfb\x93\x24\xc5\xf8\xc8\x8a\x56\x6a\xff\x7b\x31\xe8\x7c\xeb\x2d\x74\x38\x78\xbf\x87\xd0\x20\x4e\x50\xd9\x3d\xd8\x50\x8c\x7d\x7c\xfb\xc3\x18\xa7\x53\xbe\x59\x8e\x62\xf9\xf5\x7f\xe1\x4c\x5d\x9a\xea\x5f\xd5\xa7\x49\xd9\x6e\x1a\x5b\x32\x8a\xbc\xf8\x3c\xd8\x2f\x88\x76\x44\x0b\xdf\x53\xae\x9e\xbd\xf1\x40\xaa\x8d\x6c\xed\x9f\xd2\x1e\xdf\x6e\x4b\xdf\x9b\xfc\x99\xf2\x27\xe8\xd5\xed\x9d\x43\x1f\x7f\xa8\x23\x95\x3d\x72\x41\x66\x94\xee\x7e\xaa\x6f\xf3\xaa\x67\x7f\x50\x0b\xf1\xff\xbf\xa7\xfa\x7f\x1d\x0c\x02\x8c\xc2\xf6\x32\x7e\xfc\xb1\x8c\x2e\xa1\xeb\xc7\x2b\xb9\x13\x9a\x9f\xd7\x40\x63\x5c\x97\xbb\xd8\x60\x5c\xd0\x86\xd8\x6d\xbe\xa3\x47\xdd\x39\x51\x08\xf0\x3a\x6c\x10\x60\x24\xb6\xd6\xfc\xa0\xb5\x6f\xeb\x6c\x95\x6e\x8d\xef\x75\xf6\x4b\x17\xb6\x75\xf9\x3f\x54\xf6\xa0\x83\x46\x4a\x8a\xbf\x2e\x65\xf0\x6c\x5a\xa1\x10\xe0\xb5\xd8\x20\xc0\x68\x6c\xdf\xfd\xe4\x42\x99\xfd\x02\x3e\x29\xbd\xd4\x1c\x94\x78\x59\xad\x19\x6b\xac\xa9\x42\x26\xe2\x44\xce\x30\x76\x89\xa6\xb1\xf7\x31\x3b\x0a\x01\x5e\x8f\x0d\x02\xac\xc8\x36\x9d\x78\xe5\xf4\x31\xe1\x0b\x2c\x54\x24\x06\x4b\xf7\x6f\xae\xd8\xf0\xca\x35\xeb\x87\xbc\x60\x7a\xc1\xc7\x29\x1e\xda\x4b\xc4\x8f\x42\x80\xd7\x64\x83\x00\xa3\xb2\x41\x10\x38\xc1\x66\xb1\xfa\xe5\x7d\x73\x04\x9c\x2e\xf5\x16\xba\x50\xa9\x2c\x94\xa9\xdf\xdb\x22\xc0\x99\xb9\x54\xbb\xb9\x9f\x10\x85\x00\xaf\xcb\x06\x01\x46\x66\x23\xe8\x18\x3a\xad\xd5\xbb\xff\xde\x6d\xba\xb3\x6f\x06\x7f\x33\x48\xd7\xd8\x6f\xd6\xdd\xf7\x0f\xbe\xe3\x1f\x0f\xff\xc4\xdf\x49\x3c\x8d\x42\x80\xd7\x66\x83\x00\xa3\xb3\x31\x9e\x88\x90\xfc\xd9\xf2\xf8\x51\xf1\x1a\x09\x74\x3d\x18\xf2\xe2\x00\x7f\x7b\x48\x65\x36\xf3\xad\x93\x66\x22\x8c\x36\x56\x17\x8c\x51\x08\xf0\xfa\x6c\x10\x60\x84\xb6\xe4\x7a\x57\xbb\xac\xf1\xc0\xcd\x38\xb3\x92\x4d\x55\x91\xcf\x91\x56\x69\x42\x22\xe9\x35\x75\x19\xa6\xaa\x2a\x15\xec\x1c\x36\xdc\x28\x04\x38\x8d\xb6\xdd\x30\xed\xd5\x77\x76\xc3\x84\x51\xda\x6a\x78\xb4\xc5\x0e\x35\x5c\x7f\x10\xe3\xa9\xab\x73\x98\xae\xc9\xde\xdc\xea\x7b\x31\xb7\x21\xaf\x3d\xf5\x70\x68\x28\xef\x18\x13\x35\x0a\x01\x5e\xa7\x0d\x02\x8c\xd4\x26\x54\x7e\xf6\x80\xea\x40\xfc\x5f\xcb\xc9\xb0\xfb\xf1\x01\x22\x5d\x67\x81\xfc\x6a\x54\x19\x75\x88\x35\xed\x6c\x60\x7e\xde\xc8\x3e\x14\x02\xbc\x56\x1b\x04\x18\xad\xad\x27\x5c\xad\x60\x90\x86\x3c\x25\xef\x6c\xea\x94\x1b\xfd\x75\xe2\xe3\x8b\x8c\x82\xb1\x85\x13\x3e\xc6\x47\x2f\x0d\x87\xa6\x95\x38\xa2\x10\xe0\xf5\xda\x20\xc0\x88\x6d\x81\x69\xda\xf0\x78\x67\x55\xc5\xb1\xe5\x95\x73\x7c\x62\x47\x7a\xd8\x28\x64\x17\x79\xf6\x0b\xcd\x4d\x24\x0d\x7c\x92\x50\x91\xb8\x80\x42\x80\xd7\x6c\x83\x00\xa3\xb6\x29\xdf\x15\x08\x5c\x4d\x3d\x93\x44\x78\xf3\x8d\x2d\x30\x91\xa7\xb9\x7b\x29\x6f\x3a\xda\xca\x31\xbe\x36\x83\xea\x2a\xa3\xde\xad\x73\x28\x04\x78\xdd\x36\x08\x30\x72\x5b\xc0\xcb\x12\x33\x64\x2d\x8e\xb8\xec\xc6\xa3\x13\x9b\x32\x5f\x5e\x92\xfa\x25\x1c\x25\xe1\xfc\x6a\x77\x9e\xe0\x8c\x58\x6d\x77\x85\x29\x0a\x01\x5e\xbb\x0d\x02\x8c\xde\xe6\xe7\xa7\xc5\xd8\xbc\xa1\x6c\x28\x4e\x41\x29\x73\xd6\xea\xcf\x21\xab\x53\xf6\xa7\xea\x62\x15\xb4\x2c\x53\xd6\x38\x15\xcb\xbf\xda\xa3\x10\xe0\xf5\xdb\x20\xc0\x08\x6e\x6a\xbd\xe1\x34\xaf\x52\x5f\x26\x50\x8d\xf4\xa1\x41\xa5\x2d\xb1\x34\x4c\xe7\x6d\x15\xdd\xd2\xb2\xc3\x58\xf8\x7b\x93\x5f\x17\x99\xa1\x10\xe0\x34\xdc\x76\xc3\xb4\xd7\xca\xbc\x1b\x26\x8c\xe2\xf6\xf9\xe9\x2a\xb3\x06\xb5\x8a\x30\x85\x59\xcc\xf3\x3f\x87\xf9\xa6\xd3\x37\x6c\x89\x1e\x6a\xbe\x38\x38\x4c\x7d\xd1\xf3\x4f\xe8\x21\x27\x14\x02\xbc\x8e\x1b\x04\x18\xc9\x2d\x5c\x7b\xe6\x97\xe1\xdc\xa4\xbb\x9c\x8d\x0a\x53\x92\xfb\xec\x8c\x64\xf9\x53\x85\xf0\xa0\x51\x45\x76\xd3\xf7\x47\x6b\xaa\x0d\x79\x51\x08\xf0\x5a\x6e\x10\x60\x34\x37\x96\xfd\x67\x04\xd5\xe0\xf1\x09\x49\x67\xb9\xd8\x3f\x76\x57\xca\x2a\xac\xf4\xf8\x7b\xad\x5f\xd3\x7e\x91\x30\x3c\xc6\xf6\xe5\x1b\x01\x0a\x01\x5e\xcf\x0d\x02\x8c\xe8\x66\x64\xb2\x28\x7c\x68\x60\xc6\xcd\x72\xad\xfd\xf4\xda\x13\x03\x43\xed\x94\xc1\xe3\x17\x4a\xc2\xb9\xd9\xfd\x86\x8c\x53\x53\x5e\x4b\xa0\x10\xe0\x35\xdd\x20\xc0\xa8\x6e\x8e\x0b\xb7\xdf\xb3\x32\x4a\xeb\x72\x16\xe8\xc5\x53\xd0\x57\x3f\x96\x71\xae\xb3\x09\x96\xb0\x3a\x58\xc8\x26\xfa\x5b\x23\xe5\xe2\xce\x2a\x8e\xd7\x75\x83\x00\x23\xbb\x59\xe8\xcb\x39\xae\x2a\xb6\x83\x39\x83\x1f\x7a\x7c\x34\xf6\x67\x28\xa8\x06\xd1\xbe\xbb\x59\xaa\x1f\x4f\x7c\x15\xba\x26\x13\xb5\x1f\x85\x00\xaf\xed\x06\x01\x46\x77\x73\xd5\x6d\x74\xbc\x56\x82\x48\xdd\x9b\x96\xe5\xf2\x3d\xd0\x5c\x18\x55\x23\x50\x75\x90\x9e\x35\xef\xd1\x16\xfd\x22\xdf\x40\x29\x44\x21\xc0\xeb\xbb\x41\x80\x11\xde\xc8\x44\x52\x2e\x5e\x24\x15\x4b\x95\x6e\x08\xb8\x19\xfe\x66\x2b\xbb\xd5\xe4\xcc\x74\x01\x61\x83\x5b\x43\x66\x7e\xba\x22\xc9\x65\x69\x14\x02\x9c\xc6\xdb\x6e\x98\xf6\x9a\x5d\x77\xc3\x84\x41\xde\x0c\x7c\x07\xb7\xb4\xa3\xa6\x5f\xb0\xd8\x19\x5c\x25\x1a\x9d\xe4\x15\xb0\xb2\x10\x89\x6d\x61\xa9\x69\xe9\xa6\x0e\x65\x3e\x53\xcf\x80\x42\x80\x57\x79\x83\x00\xc3\xbc\x1d\xd1\x22\x39\x67\xc4\x1e\xcf\x22\xa3\x0c\xcc\x92\x4c\x4f\x30\x5a\xbe\x30\xb9\x9e\x4b\x9b\x4d\xcb\x6b\x51\x7f\xee\x5e\xe3\x51\x77\x14\x02\xbc\xce\x1b\x04\x18\xe8\x8d\xdf\xdc\x62\x43\x5b\x7d\xd6\xf8\xc6\xf5\x4e\xc5\x73\x95\x07\x66\x7d\xe8\xa7\x3b\x97\x27\xfc\x63\x55\x5a\xce\x7d\xef\xb4\x25\x56\x46\x21\xc0\x2b\xbd\x41\x80\xa1\xde\x0e\x89\x14\x9d\x0a\x29\xe9\x13\xfb\x78\x9e\x66\xc6\xee\xa5\xcb\xa7\x71\xd9\xb5\x8d\x19\x9e\x47\x5f\x49\x02\x1a\x65\xc7\xd4\x9d\x6c\x50\x08\xf0\x5a\x6f\x10\x60\xb0\xb7\x6a\x9b\x00\xbe\xde\x5e\x54\xc7\x74\x58\x42\xd1\xef\x95\x90\x52\xb0\xf8\x83\x98\x03\x1d\x71\x89\xf5\xd4\xb6\xab\xba\x35\xf6\x22\x28\x04\x78\xb5\x37\x08\x30\xdc\xdb\x96\xea\x41\xca\xb0\x15\xd6\x6f\x5b\x25\x5f\x88\x8e\x6b\x69\x75\x9e\x7d\x6b\x94\xe8\x59\x95\x40\xfb\xbb\x58\x7b\x31\x28\xb9\x77\x67\xd5\xc0\xeb\xbd\x41\x80\x01\xdf\x4a\x2f\x07\xd8\xf8\x98\x3e\xbe\xaf\xa2\xf0\xa5\x3d\xf6\xba\x4c\x3a\x25\x91\x23\x0c\x7a\x46\x45\xaa\x72\x32\x90\x5d\xe0\x94\x91\x38\x0a\x01\x5e\xf1\x0d\x02\x0c\xf9\xb6\x79\x6e\x51\x90\x47\xa0\x69\x89\xad\x65\xda\x26\x84\xc5\xb2\x94\x8c\xc3\xd9\x16\xd5\xce\xbc\x56\xe9\xf4\xc2\x92\x55\x60\x49\x0c\x85\x00\xa7\xf9\xf6\xbf\x30\xed\xb1\xbb\xdb\x0d\x13\x06\x7d\x33\xa0\x65\x8e\x49\xfa\x2d\x67\xcc\x25\x50\x47\xb8\x49\xa2\xd3\x31\xf1\x57\x94\xb5\xa9\xf8\xb5\x6d\xe9\xf5\x90\xe3\xd5\x46\xef\xc8\x50\x08\xf0\xaa\x6f\x10\x60\xd8\xb7\x0b\xab\x07\x8a\x18\x41\x51\x90\x99\xdb\xcd\xa3\xfd\xbf\xeb\x0e\x1f\x63\x6c\x72\x5c\x34\x11\xb6\x2c\x34\x1d\xb5\xa2\xe6\x3a\xb4\x33\x4a\xe2\x75\xdf\x20\xc0\xc0\x6f\x04\xaa\xf2\x13\x97\x29\x60\x02\xdb\xb4\xab\xff\x81\x27\xd1\xfd\xd3\x99\xba\x4e\xe9\xcb\xcc\x9c\xb3\x17\x7e\xe5\xfa\xdc\xd2\xd1\x44\x21\xc0\x2b\xbf\x41\x80\xa1\xdf\x8a\xcb\xc2\x95\xd8\x5b\x1e\x7f\xaf\xe1\x13\x21\x7d\x34\x7a\x21\x94\xde\x80\xfe\x93\x5a\x98\x7a\xc0\x4f\xf3\xe6\xa4\x0c\x64\x48\x0d\x85\x00\xaf\xfd\x06\x01\x06\x7f\x6b\x67\xa3\x4e\xa6\x55\x88\x3d\xdc\x7e\xd1\xc7\xfe\x94\x01\xef\xa4\x16\xff\x1f\x8f\x25\x61\xb9\x2c\x42\x63\xd9\xa5\x18\xa2\x7e\x1a\x14\x02\xbc\xfa\x1b\x04\x18\xfe\x8d\x25\xa7\x39\xf3\xfa\x56\xe9\xfc\xef\xb7\xf3\x8e\x4f\x05\x6d\xaa\xb2\x26\xfc\xff\x9c\x09\x52\xaa\x0f\x11\xdd\x9e\x74\xb6\x3a\x6c\x82\x42\x80\xd7\x7f\x83\x00\x03\xc0\x35\x13\xa6\x6d\xba\x49\x28\x2a\x0d\x9c\x19\x99\xb6\x7f\xb5\xac\xd1\x75\xe3\x12\xcb\x7c\xde\xa1\x9e\x08\xab\x88\xfe\xdc\x46\x07\x22\x14\x02\xbc\x02\x1c\x04\x18\x02\x4e\x3c\xc1\x5d\xae\xc5\xda\xc2\xdc\x3a\x23\xfd\x33\xe1\x8c\x82\xf0\xf1\x5e\xaa\x25\x55\xa9\xa1\xeb\x1f\x3f\x64\xd4\x90\xf1\xfb\x29\xa2\x10\xe0\x34\xe0\x76\xc3\xb4\xd7\xf9\xc7\x6e\x98\x30\x08\x5c\xed\x4a\xfd\xfd\xc7\xb4\xf4\x8c\xdb\xc9\x1d\xd3\x2b\x4f\xaa\xd3\x6b\xb3\x82\xb2\x94\x0b\x9f\x3c\x76\xa2\xb7\x7c\xca\x99\xc5\xae\x82\x42\x80\x57\x81\x83\x00\xc3\xc0\x85\xb2\x5f\xa9\xba\x17\x19\x60\x58\x41\xb1\x66\x28\x92\x05\x9e\x44\xa6\xf7\x58\xca\x6b\x2d\x87\x5b\x49\x3f\x7a\x68\xc8\x4c\xa0\x85\x42\x80\xd7\x81\x83\x00\x03\xc1\x79\x9a\x7e\x5b\xaf\xbf\x6f\xd0\x6c\x4e\x32\x29\x9f\x58\xfd\x92\xf1\x8f\x5a\x6f\x69\x31\xc1\x54\xe4\x1b\xa9\x74\x9d\x74\x03\x43\x17\x14\x02\xbc\x12\x1c\x04\x18\x0a\x6e\x96\x4a\x51\x21\x27\x93\x72\x6a\xb4\x66\x2d\xb2\xf9\xc9\xa1\xe5\xf3\xb5\x6f\x39\xef\xc4\xaf\x9e\x25\x7d\xe8\xb5\xbf\xeb\xaa\xb1\x07\x0a\x01\x5e\x0b\x0e\x02\x0c\x06\x67\x59\x34\x28\xbe\xf2\x44\xb1\xf8\x6d\x3b\x6b\x3c\x2b\xf1\x3c\xeb\xaa\xb5\xb8\x6f\x16\xaa\x45\x39\x17\x74\xb4\x89\xb5\x64\xdf\xce\x48\x8c\x57\x83\x83\x00\xc3\xc1\x09\x08\xad\x76\x9c\x4b\x3c\x5a\x5f\xfa\x8c\x21\x99\x2b\xfb\x31\x87\x2d\x29\x5d\x13\x69\xc6\x03\x85\x98\x33\x7e\x36\x06\xef\xaa\x49\x50\x08\xf0\x7a\x70\x10\x60\x40\xb8\x0b\x4f\xc7\xb3\xf8\x1e\x9d\x71\x93\xd8\x72\x5f\x6c\xd9\x30\x93\x0e\x90\x3b\x27\xf3\xf6\x08\x7b\xe7\x29\x86\xd4\x37\xf6\x17\x06\x8f\xa1\x10\xe0\x15\xe1\x20\xc0\x90\x70\xb1\x96\xbc\x7e\xf4\x09\x37\x05\xd7\xcc\x0e\xde\xab\xa6\x58\x69\x8f\x64\x55\x0e\xb9\x6e\x2f\x96\xdf\x35\x72\xf8\xbd\xf2\x6d\x56\x4e\x14\x02\x9c\x26\xdc\x6e\x98\xf6\x3a\x21\xdc\x0d\x13\x06\x85\x63\x79\x3e\xda\x34\xfc\x4a\x44\xe5\x5b\x97\x6f\xfc\xf3\x84\x07\x08\x43\x9f\xab\xb5\x62\xab\x78\x87\x4a\x64\x9e\xf7\xf7\x3e\x5a\x26\x14\x02\xbc\x2a\x1c\x04\x18\x16\x4e\x1a\x29\xb9\x2e\xfd\xae\xe1\x21\x9a\x7d\xe7\xc8\xcd\x3b\x3d\x16\x79\x41\xb7\x88\xb4\xab\xe2\x1e\xd0\x58\x9c\xd1\xd3\xb9\x48\xc1\x88\x42\x80\xd7\x85\x83\x00\x03\xc3\x31\x7a\x09\x68\x79\xcb\x0e\x44\x08\x2b\x90\x3e\x77\xbf\xeb\xf2\xd9\x99\xf5\xf7\x94\x4a\xe7\xe7\xdc\x7b\x92\xf7\xdc\xf9\x88\xcb\x76\x1e\x2c\x5e\x19\x0e\x02\x0c\x0d\xb7\xbe\x7c\xe9\x62\x6b\x2c\xad\x20\xb9\x55\x1b\x41\x96\x08\xff\x95\xb2\xe0\x59\xd9\xfe\x69\xff\xce\x55\x99\xc0\x6c\x0e\xa2\x51\x4b\x14\x02\xbc\x36\x1c\x04\x18\x1c\xae\x79\x4b\xce\x23\x59\x73\xe6\x3b\xfb\xd7\xdb\x79\x25\x03\x6d\xd1\x94\x40\x14\xe1\xa7\x52\xb9\x64\x7e\xbe\x91\x51\xd5\xbb\x59\x16\x85\x00\xaf\x0e\x07\x01\x86\x87\xf3\x60\x6c\x3e\xf1\x9e\x78\x4c\xb8\x65\x3b\x97\x18\x16\x58\xba\xce\x54\xa9\x1b\x9c\x3f\x68\xc0\xbe\x18\x60\x65\x66\x5d\x41\x40\x85\x42\x80\xd7\x87\x83\x00\x03\xc4\xe5\x8f\xdf\x21\xf1\xf8\xfd\xe0\x4f\xab\xcf\xcb\xb0\xd8\xcc\x13\xd7\xcd\x7f\xfc\x6e\x7a\x55\xc3\x24\xde\xb1\x42\xe1\x42\xf5\x73\x60\x1f\x0a\x01\x5e\x21\x0e\x02\x0c\x11\x17\x00\x4f\x7a\x49\xa3\xb1\xaa\xcc\x71\x74\xb7\x56\xe4\xa6\x0a\xdc\x48\x8f\xb6\xc4\x86\x8e\x15\x91\xfc\x6a\xba\x1b\x19\xfd\x7c\x67\x5c\xc5\x69\xc4\xed\x86\x69\xaf\x33\xf4\xdd\x30\x61\x90\xb8\xe1\x10\xea\x7a\x41\x97\xcf\xaa\x77\x4f\x53\xdd\x7b\x45\x7d\xa0\xb2\xb1\x49\xa5\x89\xcb\x35\x3b\xf7\xcf\x16\x6d\x9f\xd7\x40\x1c\x3d\x0a\x01\x5e\x25\x0e\x02\x0c\x13\x37\xb3\x7f\x58\x8c\x32\x80\x4b\xa9\x37\x24\xb7\x72\xe8\xe7\x81\x45\xf4\x2a\x43\xc2\x0b\x89\x0a\xce\x99\xf5\xb1\xf3\x7d\xf1\x53\xcc\x28\x04\x78\x9d\x38\x08\x30\x50\xdc\x78\x1a\xe9\x72\x54\xdc\x7d\xf4\xe8\x61\xa2\x84\xc8\x33\xfa\x7f\x52\xdd\x6f\xea\x25\x2e\x30\x45\x12\xad\x8f\x7c\x5e\x22\xb1\xd8\x19\x2b\xf0\x4a\x71\x10\x60\xa8\xb8\x7b\x2a\xbf\xab\x48\xb9\xef\x4c\x87\x87\xd3\x13\x99\xf3\x0a\x44\xf0\xcb\x25\x6e\x91\x7f\x90\x7a\xf3\xab\x63\x73\xc3\xe3\x72\xa7\x05\x0a\x01\x5e\x2b\x0e\x02\x0c\x16\xf7\x52\xd8\x62\xe4\x80\xb7\xe7\x1d\xfd\xa0\xf1\xb9\x12\xa2\xf5\xdb\x59\x6f\x26\xa7\xf2\x88\x65\xde\x9c\xa8\x5e\x2b\x91\x34\xf9\x23\x81\x42\x80\x57\x8b\x83\x00\xc3\xc5\x71\x55\x3a\xfe\x7d\x74\x5a\xdc\xe0\x6d\x85\x41\x26\xb1\x5a\xc3\xa9\x2b\x72\x5d\x63\xc5\x42\x7d\x96\x3e\x37\xac\x0f\xcd\xb2\x32\x7b\xa2\x10\xe0\xf5\xe2\x20\xc0\x80\x71\xcf\xdf\x11\xcb\xc5\xad\x06\xe8\x55\x19\x5d\xd1\xf5\x49\xe1\xb9\x54\x75\x97\x45\xb3\xa1\xd2\x0f\x2d\x72\xbd\x7d\x02\x64\x5c\x32\x45\x21\xc0\x2b\xc6\x41\x80\x21\xe3\x58\x1d\x25\xe3\xaf\x13\x96\xd0\x33\x69\xc9\x1f\x0f\x1e\x50\x2d\xcb\x7f\x39\xe2\xe2\x40\x26\x71\x5e\x5c\x43\xb3\xfc\x9d\x5b\xb3\x3e\x0a\xc1\x7f\x34\xe3\xa2\x42\x5c\x5f\xd6\x84\xde\x61\x64\xd7\xcd\xe2\x35\x9d\x0f\x0d\x0d\x79\x46\x79\xa4\x22\xef\x18\xdd\x84\x53\xed\xcd\x79\x37\x29\x39\xcc\x65\xdf\x52\xa3\xd7\x2a\xd3\x8c\x50\x52\xf8\x66\xee\x98\xe3\x55\x21\xda\x50\x6f\xf5\xc2\x4b\x5c\x7d\x0d\x77\x1c\x7f\xe5\x6c\x42\xcb\x47\xff\x94\xfe\x92\x69\x1e\x7c\xea\x99\xbc\x1c\xb8\xe5\xf5\x78\xc1\xac\xa1\x9f\xb4\x70\xf4\x91\xd2\x6d\xbf\x46\xa6\xa6\x18\xde\xdb\x5c\x7f\xe3\xff\x29\xad\x79\x7c\xa5\x64\xfb\xe6\xcd\xe3\x2b\x17\xcf\x7f\xb0\xf0\x51\x3a\x2c\x20\x8f\xf8\xd9\xb7\x71\xdf\x14\xfb\xc0\x59\xf4\xe6\x54\xb2\xcd\x3f\xa5\xc3\x97\x42\x09\xc4\x7e\xfd\x50\xd1\xfe\x10\x29\x9c\x5d\xe1\x92\xff\x6c\xe6\xa1\xff\xac\x39\xed\xfa\xb2\xda\xc4\xb5\x03\x8d\xc8\xb1\x7f\x4a\xcd\x7a\x2f\x27\x74\x54\x1c\x26\x38\x21\xc3\x67\x4e\x54\xf4\xfd\x57\xb4\xea\xc9\x57\xea\x7d\xdb\xe5\xb7\x3a\xc9\x07\x57\xbd\x7f\xdc\xfe\xa7\x74\x86\xbb\x71\x96\x97\xd2\xd2\x49\x8e\x2d\xfc\x1b\x55\x35\x57\xdf\xd1\x33\x8b\x8f\xb6\x6e\x3d\xf1\xb5\x4c\xd3\x6d\x13\xbf\x91\x21\xf6\x4f\xa9\xc4\x0b\x72\x55\x92\x81\xfc\x84\x29\xce\xdf\xaa\x92\x1c\xbc\x1b\xa6\x1f\x56\xec\x1a\x5a\xd8\x1e\x88\x7f\x17\xba\x51\xdf\x15\xf6\xef\x6d\xa3\xe1\x1f\xf5\xc0\x9b\x34\xf1\xb7\xe5\xf5\x3c\xd8\x43\xea\x89\x55\xa8\x57\xda\xc7\x49\xba\x02\xd4\x4a\x07\x59\x78\x37\x0f\x51\x79\xfd\xef\xb2\x6f\xaf\xa7\xba\xdb\xd1\x30\x68\x5c\xe2\xb7\xd0\x09\x86\xe7\x21\x1f\xec\x69\x3a\x2f\x45\xd2\x5c\xf6\x4f\x39\x76\xe7\xee\xf4\xc7\xa2\x8c\x80\x2b\x4c\x17\x49\x0f\x77\x6b\xa3\x10\xe0\x55\xe3\x20\xc0\xb0\x71\x81\xa6\x6a\x7f\x9a\x54\x25\x37\xd8\x0e\x87\x05\x6b\x19\x75\x67\x6f\x5c\xfb\xde\xcf\x6f\x4d\x70\xab\xd4\xf3\xd4\xb8\x20\x51\xb2\x06\x0a\x01\x5e\x37\x0e\x02\x0c\x1c\x57\xb3\xd8\x47\x18\xe4\xd8\xfa\xda\x33\xdd\xc0\xa7\xeb\x27\xf8\x82\x08\x22\xb0\x8e\x38\x68\x51\xa3\xb9\xe1\x44\xf4\x28\x14\x45\x21\xc0\x2b\xc7\x41\x80\xa1\xe3\xc6\x7e\x9a\x33\xc8\x8f\x68\x10\xbc\xac\x62\xe5\xb0\xbe\xfa\xda\xe5\x95\xf2\x8d\xe3\x22\xb6\xfa\xed\xb6\x9a\xc8\xd6\xd7\xb4\xa9\x9d\x4e\x80\xd7\x8e\x83\x00\x83\xc7\xcd\xfe\xfd\x50\x7e\x85\x32\x5c\xb4\xcd\xf4\x82\x76\xd7\xd5\x5f\x61\x2d\x53\xd4\x1f\xdb\x2c\x19\x3b\xf7\x2f\x4b\x59\x07\xc5\x85\x73\xa0\x10\xe0\xd5\xe3\x20\xc0\xf0\x71\x55\xc3\xdf\xbc\x9c\x68\x0e\xb0\x59\xd3\x97\x1a\x4c\x55\xbb\x12\x95\xce\xbe\x38\x53\x03\xc3\x19\x4b\x1a\x4b\x7a\xc6\x49\xaf\xee\xec\x4b\xf0\xfa\x71\x10\x60\x00\xb9\xab\x55\xfe\xf9\x2f\x02\x97\x29\x8e\x14\x5f\xfb\xa9\xf6\x23\xb1\x4f\x28\xa8\xcf\xa7\x24\xb0\xeb\xeb\xb3\xd6\xad\xc4\x95\xec\xd6\x9d\x7d\x09\x5e\x41\x0e\x02\x0c\x21\xe7\x28\xdd\xfe\xb4\xa0\xa6\xc8\x4b\xe0\x53\x43\xa9\xc3\xbd\x30\x31\xff\x34\x85\xd9\x17\x4b\x34\x4f\x92\xcc\x94\x4e\x39\xde\x2c\x17\x44\x21\xc0\x69\xc8\xed\x86\x69\xaf\xbe\xb3\x1b\x26\x0c\x22\xf7\xfa\xf0\xaa\xb9\x1c\x7b\x41\x1d\x8f\x92\xa4\xb5\x42\x06\x15\x0b\xdf\x1f\xe7\x73\x2a\xc5\xa7\x87\x56\x26\x1a\x5f\xbd\xae\x0e\x3e\x8c\x42\x80\x57\x91\x83\x00\xc3\xc8\x55\x9d\xa3\xa3\x6d\xec\x2a\xd6\xbd\x13\xe2\xbb\x78\x29\x70\x76\xe6\x71\x33\x99\x88\xab\xee\xf7\xca\x0f\x92\xd3\x69\xcf\xad\x09\xcf\xa2\x10\xe0\x75\xe4\x20\xc0\x40\x72\x83\xb3\x56\x4a\xea\x62\x3d\x9c\xfa\x24\x28\x4b\x25\xa0\xe0\xff\xc0\xb6\xe4\x5d\x24\xdc\x91\x40\x30\xda\x29\x1f\x2c\xec\x69\x8b\x42\x80\x57\x92\x83\x00\x43\xc9\x9d\x9d\xda\x24\x61\x44\xbd\x49\xdf\x12\x7c\x89\x4c\x8e\x79\x2a\x3a\x02\x56\x4c\xac\xbd\x99\xb8\x5a\xaf\x92\xc5\xf9\x8c\x1f\x27\x45\x21\xc0\x6b\xc9\x41\x80\xc1\xe4\x02\x72\x4f\x29\xbe\x54\x3e\x39\x18\x10\x5c\xa1\xc0\x32\xc0\x36\x84\xdc\xf9\xe4\x34\x42\xa8\xa2\xef\x6f\x1c\x3b\xef\x19\xe1\x00\x50\x08\xf0\x6a\x72\x10\x60\x38\xb9\xcb\xa4\x84\xb0\x27\xb9\xbf\xc7\xef\x9c\xbf\x7d\x89\xb0\x8a\x31\xef\xb0\x04\x8f\x8c\x49\x44\x51\x82\x7a\xae\x7f\x6f\x7b\xfb\xce\xdf\xc0\xeb\xc9\x41\x80\x01\xe5\xe6\x83\x6a\x8a\xb4\x21\xdb\x42\xb2\xab\xe4\x8d\x4b\x02\xfa\x37\x8e\xb3\x7f\xab\xda\xd6\x1e\x1a\x3b\x51\x3f\xdb\x3c\x92\x2d\xb2\x33\x1e\xe0\x15\xe5\x20\xc0\x92\x72\x62\xfb\xdd\x8c\xaf\x4b\xd9\xc9\xa2\x81\x5e\xdf\x93\xee\xb6\xad\x8f\x15\xbe\x12\xbc\xf1\xc8\x4a\x8b\x26\xf8\x6c\x1c\x21\x03\x3f\x0a\x01\x4e\x53\x6e\x37\x4c\x7b\xad\xcc\xbb\x61\xc2\xa0\x72\xab\xdc\xe5\xe4\x9f\xaa\x2d\x38\x79\x85\xa3\x08\x2c\x67\x2e\x37\xf3\xf3\x76\xe7\x4a\x7c\x8d\x5c\x33\x89\xe7\xd4\xe0\x3f\x12\x2f\x8c\x42\x80\x57\x95\x83\x00\xc3\xca\x95\x6b\x1d\x7d\x72\x9a\xaf\xb9\x3e\x8f\x3c\xde\x29\xc5\xbe\x47\x25\x20\xc8\x3d\x7a\x51\x2f\xf5\x06\xd2\xa7\x73\xc4\xdd\x72\x60\x67\xf5\xc3\xeb\xca\x41\x80\x81\xe5\xd0\x85\x0a\xef\x07\xd4\x0e\x7c\xf3\x0a\xf4\xa9\xe7\x32\x26\xfd\xb7\x7a\x0c\xda\xec\xba\xd2\x1f\x1f\x20\x92\x6e\xaf\x4b\x3e\x70\x10\x85\x00\xaf\x2c\x07\x01\x86\x96\xeb\xb6\x1b\x94\x61\x64\xad\x20\x7e\x17\x1f\xa9\xf5\x24\xfc\x11\x91\x47\xb9\x50\xce\x17\x41\xb3\x98\xac\xb3\x7d\xdf\x53\xde\xa6\x50\xa2\x10\xe0\xb5\xe5\x20\xc0\xe0\x72\x91\x1e\x95\x0e\x95\x17\xbe\xa6\x0f\x37\x5b\x0d\x3f\x3d\x37\x64\x1e\xef\xb6\xd2\xac\x9d\xd4\x36\xff\x98\xcc\xe1\xde\x99\x67\xcf\x0c\x51\x08\xf0\xea\x72\x10\x60\x78\x39\xfb\xfc\xe9\xf3\x0e\x29\xd6\xf7\x55\x3f\xc4\x53\x4d\xd3\xb7\x0e\x6a\x86\xc5\x42\x39\xc3\x69\x8e\x8a\x82\xf0\x64\xcb\x49\x7f\x67\x14\x02\xbc\xbe\x1c\x04\x18\x60\x6e\x42\xa8\xb1\xe4\xf5\xf6\xd0\xe6\xc9\x95\x27\x9b\xdf\xd7\xe7\xb9\x72\x68\x49\x25\xce\xae\x79\x8e\x90\x47\xa8\x57\x1c\x6c\x1a\xb3\x46\x21\xc0\x2b\xcc\x41\x80\x21\xe6\x08\x02\xc3\xdc\xed\x0f\xf7\x35\x39\x9e\x67\x0e\xe4\x18\x94\x22\x88\xbc\xfc\x78\x23\x41\x76\x75\xf8\x0a\x63\x70\x07\x73\xe3\xd6\xce\x0a\x8b\xd3\x98\xdb\x0d\xd3\x5e\xb3\xeb\x6e\x98\x30\xc8\x1c\x49\xb9\x9c\x99\x93\x76\x6e\xcc\x4c\xde\x36\xa3\xab\x3a\xed\x5a\xca\xd7\x46\x6f\x91\x7e\x41\x73\x66\x87\x57\x87\x86\x7a\x7d\x76\x96\x63\xbc\xca\x1c\x04\x18\x66\xae\xa9\x95\xfe\x19\x6d\x33\x83\x9f\xcb\xf9\xd5\x4a\x75\x9f\x3b\x97\x3f\x05\xa7\x8a\xbb\x4a\x7c\xc9\xd4\x20\x3f\xfc\x93\x86\xe3\xff\xfd\x5f\x44\xf0\x3a\x73\x10\x60\xa0\xb9\x14\x76\x9e\x57\xa6\xfc\x6a\x17\x38\x94\x12\x1d\xab\x04\x16\x88\xbc\x7a\x5c\xaa\xd6\xa2\xca\x7d\x96\x8e\x19\xab\xb7\x3c\x3f\xa5\x82\x42\x80\x57\x9a\x83\x00\x43\xcd\x59\x92\x0d\xd1\xc7\xd4\xe4\x1a\xce\x1b\xe5\xdb\x1d\x87\x5b\xeb\xde\xfb\x6d\xfa\x62\x19\xa2\xc7\x79\x6e\x3f\x50\x98\x7e\xe7\xc5\x80\x42\x80\xd7\x9a\x83\x00\x83\xcd\xcd\x76\x51\x93\x55\x87\xdb\xcf\xf9\x55\x4d\x58\xeb\xb0\xdd\x38\x23\xf1\xc6\x63\x53\x2c\xf6\xd9\x18\x73\x90\x26\xc5\x08\xdb\xa3\x9d\xcf\x81\x57\x9b\x83\x00\xc3\xcd\x0d\x91\x1e\x3a\xbf\x9e\x9f\xbc\x11\x38\xae\x90\x2d\x67\x53\xf1\x83\xd8\x0b\xfc\x66\xd1\x5d\xd7\x4f\x1b\x5d\x6d\x60\x7d\x47\xb0\x33\x12\xe3\xf5\xe6\x20\xc0\x80\x73\x5b\xc9\x2c\x13\xdd\xb3\x87\x94\x3c\x12\x03\x0e\x13\x35\xd0\xd5\x04\x56\x49\x04\x7e\x65\xfa\xa3\x63\xad\x10\x18\xd9\x6d\x52\xcc\x8b\x42\x80\x57\x9c\x83\x00\x43\xce\x89\x4b\x5c\xcf\xf3\xdb\x52\xfb\xcb\x3d\x94\x7f\xcb\x2a\xb0\xe6\xad\x93\x61\xea\xc8\x15\x35\xc3\xa7\x52\xf5\xe6\xdd\x67\x67\xf5\xcc\x51\x08\x70\x9a\x73\xbb\x61\xda\x6b\x77\xb7\x1b\x26\x0c\x3a\xe7\x60\x51\xc8\xba\x95\xc2\xc6\xef\x26\x72\x49\xc7\x85\xa9\x30\xdd\x78\x58\xf6\x82\xa6\xd0\x42\xdb\x3e\x31\x77\x31\x13\xdb\xe7\x97\x51\x08\xf0\xaa\x73\x10\x60\xd8\x39\xe1\x7e\x4a\x57\xe5\xab\xf3\x8d\xe7\x33\xd7\x0f\x15\x8a\x5e\x7a\x73\x86\x23\x4f\xed\xaa\xec\xfe\x0e\x47\xaa\x74\x9e\x97\xce\x70\x27\x4c\x78\xdd\x39\x08\x30\xf0\xdc\x5f\xbe\x24\xca\x38\x9b\xd1\x96\xb6\xe9\xc7\xe1\x27\x85\x66\x1c\x94\x6d\x7f\xcf\x19\xaa\x55\xac\xbe\x59\xf6\x71\x35\x19\x7c\xac\x8b\x42\x80\x57\x9e\x83\x00\x43\xcf\xbd\x77\x38\x9a\x74\xba\xdb\xeb\xde\xdb\xed\xab\xfb\xc2\xa2\xab\x96\xa2\xb3\x39\xc2\xc1\x86\x3f\xb1\xd8\xec\x87\x5b\xaa\xcc\x49\xa7\x51\x08\xf0\xda\x73\x10\x60\xf0\xb9\xfd\xb3\xf9\x67\x6b\x4e\x75\x54\x3b\xde\x55\xcf\xb6\x35\xf3\xbb\xe8\xc9\x52\xda\x75\xf5\x68\x84\x71\xdf\x9a\x40\xad\xce\xd5\x38\x77\x14\x02\xbc\xfa\x1c\x04\x18\x7e\x4e\x2a\xfa\x31\x1d\x43\x03\x52\x99\x31\xb2\x15\xf7\xe9\xc0\xf6\xe8\x6d\xdb\xef\x85\xdc\xda\xdf\x69\xba\xb4\x4f\xa5\xd5\xf0\x2c\xef\x8c\xc4\x78\xfd\x39\x08\x30\x00\xdd\xb7\xa1\xf4\xde\x6a\x3f\xff\xcf\xae\x3a\x8f\x53\xae\xeb\x56\x26\xbf\xf2\x54\x5b\x5b\x92\x76\xf7\x85\x19\x1c\x56\x0e\x45\xab\x3b\xcf\x0a\xaf\x40\x07\x01\x86\xa0\xcb\x9e\xcc\x0a\x12\x52\xa1\x79\x5f\xd4\x02\x14\x39\xed\x13\xc1\xf0\x8c\x4a\x33\x41\x5a\x4e\xd7\x40\xfd\xfc\xac\x4e\xd6\xc6\x05\x14\x02\x9c\x06\xdd\x6e\x98\xf6\x3a\xff\xd8\x0d\x13\x06\xa1\x13\xf3\x57\x54\x98\x90\x24\x6d\xe1\x22\x63\x31\xc9\xf8\x13\xc6\x6f\xca\xfe\x31\x44\x9d\xf2\xe4\x51\x9a\xca\x2f\x22\x14\xc3\x2f\x77\x36\xbc\x78\x15\x3a\x08\x30\x0c\xdd\x00\x67\xcf\xe2\xd6\x79\x55\x36\x23\x71\xc3\x95\x22\xed\xbf\x03\xad\x7e\x33\x2e\x20\xae\x54\xe1\xf8\x29\x52\xba\x67\x15\x85\x32\x28\x04\x78\x1d\x3a\x08\x30\x10\x5d\xa1\x3c\xa9\x60\xea\xd5\x79\xb7\x58\x4d\xf5\x37\xc6\xf1\x8a\x02\xaa\x8d\xf6\x14\x73\x37\x2e\xde\x9d\x34\xf4\x12\xe1\xe0\x28\xde\x99\xd1\xf1\x4a\x74\x10\x60\x28\x3a\xb2\x35\x41\x5a\x44\xfe\x9b\x86\x44\xf7\x7c\xd9\x8d\x98\xbc\x0e\xa7\x45\xce\xc3\x86\xc4\xb3\xaf\xce\x10\x52\xda\xaf\xf5\x77\xef\xcc\xe8\x78\x2d\x3a\x08\x30\x18\x5d\x7c\x82\x72\x9d\x2c\xe9\xc7\x3f\x43\x15\x1a\x9d\xb9\xce\xe7\x7d\x94\xee\x34\xa8\xad\x6e\x9d\xa0\x0e\xea\x20\xbe\xc6\xfb\xfe\xea\x25\x14\x02\xbc\x1a\x1d\x04\x18\x8e\xce\x3c\x88\x14\x55\xd2\x8d\xbc\x2a\x63\xeb\x54\x4c\xcd\x7b\xff\xd2\xfc\x7d\x12\x97\xb4\x58\xc6\x3c\xd4\xd6\x37\xc3\xf0\x45\x2e\x05\x0a\x01\x5e\x8f\x0e\x02\x0c\x48\x77\x3e\xd9\x7d\x9c\xb2\x8c\x81\xa7\x64\xd5\x6a\x5c\x8b\xa8\x73\x6e\x75\xd9\xdb\xc5\xc9\xd4\x49\xce\x98\xe3\x9b\xa7\x81\x5a\xd0\x31\x14\x02\xbc\x22\x1d\x04\x18\x92\xee\x4d\xe0\xa7\x65\x73\x79\x83\xd7\xc8\xc3\x27\x5f\xd3\xaf\xe9\x89\xd7\x86\xc4\x1c\xeb\x7e\x4e\xb1\x25\x90\x79\x5a\x4b\x6a\x51\x55\x04\x85\x00\xa7\x49\xb7\x1b\xa6\xbd\x4e\x08\x77\xc3\x84\x41\xe9\xec\x1e\xb2\xde\xad\x4a\x7f\x9d\x90\x21\xcc\xf1\x23\xa8\x93\x9f\xe1\x17\x37\xe7\x91\x0f\xcd\x57\x4f\xcc\xc4\xa6\x1f\x69\x75\xd4\x17\x40\x21\xc0\xab\xd2\x41\x80\x61\xe9\x56\xd3\x7a\x7d\xdf\x88\x36\x16\xef\x57\x39\xfd\xc7\x67\x42\xdb\x21\x41\xb1\xa7\x25\xf6\xe1\x29\xdb\xb1\x38\x12\x55\x8d\xa7\xb3\x3b\xfb\x32\xbc\x2e\x1d\x04\x18\x98\xae\x6a\xa0\x74\xdc\x63\x12\x44\xc4\x98\x06\x89\x52\xeb\x30\xf5\xa7\xd7\x3d\x4d\x88\xdc\xb8\xbb\xc4\xb6\xef\xa5\x89\xcc\x91\xd0\x9d\x17\x1d\xaf\x4c\x07\x01\x86\xa6\x53\x2d\xca\x1c\x6e\x21\xb9\x3b\x1a\x3f\x61\x70\x45\xe0\x97\xef\x61\x7f\xe5\x77\x5e\x4a\x88\x06\x1b\x17\x99\xa8\xbe\xce\xe5\x88\x9d\x6e\x8b\xd7\xa6\x83\x00\x83\xd3\x8d\x59\x71\x78\xac\x21\x85\xc5\xbd\xdf\x1e\x5f\xac\x34\x37\xd3\xbb\x47\x7c\x3f\xdd\xf7\x5b\xe0\xc8\xf1\x78\xfb\x58\x7f\x75\x02\x59\x14\x02\xbc\x3a\x1d\x04\x18\x9e\x4e\x3e\xee\x1e\x45\xcc\x41\xce\x3c\x89\x1c\xc6\x19\xf8\xc5\x8c\x81\x94\x4c\xe3\xc7\xa0\x79\xb7\x5e\x8a\xa2\x3d\xdb\x85\xe0\xa7\xfb\x50\x08\xf0\xfa\x74\x10\x60\x80\xba\x5f\x8e\xcd\xdf\x99\x5f\x8e\x4e\xd3\x92\xaf\x26\x1f\x65\x0a\x3f\x7b\xd9\x29\x37\x99\x6f\x54\xda\x39\x28\x39\xb1\x68\xf9\xa2\xe7\x21\x14\x02\xbc\x42\x1d\x04\x18\xa2\x2e\xaf\x5b\x4f\xf0\xe6\x33\xb5\x43\x1b\xc9\x76\x27\xc5\x0f\x5f\xd9\xff\x6a\xff\x39\x2a\x37\x82\x92\xed\x44\x1e\xf7\xf3\x63\x45\xf4\x47\x50\x08\x70\x1a\x75\xbb\x61\xda\xeb\x0c\x7d\x37\x4c\x18\xa4\x6e\x95\x2e\x58\xa9\xb6\x3b\x43\x4d\xfa\x43\xd7\x82\xaf\xd3\xbe\x87\xf1\xde\x74\x79\x2d\x5c\xda\x36\x74\x93\x8f\xf5\x0b\x26\x26\x9d\x50\x08\xf0\x2a\x75\x10\x60\x98\xba\xaf\x8d\x9e\xc6\x4a\xaf\x7f\x0f\xc7\x67\x3c\x30\x9c\x50\xa8\x39\x97\xd8\xf7\xf1\x5c\xd4\xab\x33\x71\x75\x42\xad\x79\x1a\x8c\x65\x67\x51\x08\xf0\x3a\x75\x10\x60\xa0\x3a\xbb\x0f\x59\xf2\xf1\xbf\xa8\x43\x3f\xd8\x8c\xc5\xd9\x1f\x9c\xeb\x85\x35\x76\x2b\x4c\x9e\x0b\xe5\x92\xd5\x5c\x7f\xc3\x32\x6e\xd0\xa1\x10\xe0\x95\xea\x20\xc0\x50\x75\x02\x9b\x4a\x16\xfa\xf2\x89\xcf\x9b\xc4\x44\xaa\x1c\x72\xc6\x8f\x3f\xa7\xb3\x7c\xfc\xe8\x4e\xe9\x8c\xb3\xb2\xc6\xd4\xa5\xbb\xaf\x29\x51\x08\xf0\x5a\x75\x10\x60\xb0\xba\x47\x76\xe3\x46\x0f\xb5\xcf\x9b\xc8\xd1\xa2\xb1\x96\x05\x21\x5e\x4f\x12\x08\xe1\xcf\x8d\xb5\x2b\x17\xe6\xa2\xfb\xee\x74\xb6\x09\xa2\x10\xe0\xd5\xea\x20\xc0\x70\x75\x57\x7b\x6b\xa8\xb4\xfe\xf4\x5c\x6c\x37\xba\xf0\xa9\xf3\x98\xcb\xdc\x00\x51\x6f\x99\xc4\x64\x4c\xb7\x90\x52\x85\x34\x18\x7f\x63\x8f\x42\x80\xd7\xab\x83\x00\x03\xd6\x95\xcb\x88\xd3\x34\x3b\xaf\x3c\x7a\xa8\x30\x45\xff\xd3\x1c\xf4\x0a\x7e\x31\xfd\xe5\x69\xaa\xaa\xef\xbf\x70\x5f\x6e\xc2\x6b\x76\x67\xcf\x84\x57\xac\x83\x00\x43\xd6\x55\x1b\x04\x5c\xae\x9c\x72\xb8\x11\xc9\xaa\xc9\xc2\x69\x96\xf2\xf2\x4b\x83\xf0\x52\x0d\x4b\xc7\x0b\xf3\xd6\x64\xf9\xda\x82\x55\x04\x85\xe0\x3f\x9a\x75\xb7\xca\x1a\x86\x0c\x34\x64\x86\x4e\xf6\x9d\x66\x25\x34\x28\x82\xe8\xd5\x19\x17\x17\x28\x7f\xd1\xa2\xdb\xff\x2c\xdb\xed\x9a\x0e\xcc\x65\x9f\x8e\x74\x75\xe2\xab\x06\xae\xdc\x21\xe9\x0e\xa6\x77\xab\x57\x9c\x22\xdd\x5c\xf5\xb6\x3b\xa6\x1d\xd5\x49\x9a\x29\x45\xfb\xb4\xca\xff\x29\xdd\xe6\xa4\xca\xbd\x71\x85\x96\xf1\x6e\x12\x89\xad\xa3\x71\xae\x51\x55\x77\xb4\x51\xf2\x25\x4e\x5a\x13\x69\x1b\xaf\x36\xd3\x6a\xb2\x7f\x4a\x8b\x36\x3e\xf5\x4b\xb2\x1d\x5c\x39\x4a\x3f\x4b\xcf\x93\xda\x32\xab\x66\xfe\x6d\xe5\xaf\x4a\x0f\x53\xf5\xe0\x9d\x9c\x32\x67\x99\xeb\xff\x94\x96\x8e\x5d\xf0\xb5\xf7\xb3\x91\x3f\xd1\x60\xf4\x61\xac\x90\xa7\x3a\xf1\x64\xd9\x5a\xfe\x6a\x6d\xc2\xa8\xf9\x5f\x5f\xed\x4f\x51\xd9\xff\x94\x6e\x7e\xcd\x2a\xeb\x91\x0e\x67\x38\xcd\x2f\x73\xf3\xec\xaa\xa4\xd4\xe3\x5b\x37\x52\x78\x18\x8a\xc9\x29\xcc\xd7\x7c\xe6\xda\x98\x9e\xfd\x53\xaa\x5d\xe4\x31\x40\x97\x40\x92\x1b\xab\x83\xc4\x7c\x9b\xe5\x03\xbf\x6b\x34\xa2\x8d\xc3\x5c\x37\xd5\x0e\x7c\x1c\x6c\x57\xf8\xde\xfb\x4f\xe9\xcb\x9e\x81\x57\xb9\x36\x21\xd5\x3c\xfb\x14\x6f\x70\x18\x0b\x9d\xf9\x2d\xff\xc7\xfe\x3d\x54\xb0\x2f\x0a\xde\xb0\xdb\x2f\xf6\xeb\xf4\x3f\xa5\x55\xf5\xb4\xf7\xf7\x75\x9e\x61\x59\x13\x59\x16\x64\x8c\x95\xbd\x12\xf6\x88\x46\xe6\xcb\x72\xd9\xfc\x96\x69\x0f\x43\x11\x55\x06\xf1\xff\x2e\xfb\xf6\x7a\xaa\xbb\x1d\x0d\x83\xd6\x4d\xf5\x3c\x52\x3d\x76\xed\x70\x0e\x50\x74\x1c\x78\x3f\x58\x70\x6f\x9f\x54\xab\x97\x73\xf2\x45\x8b\xb2\xab\x96\x3a\x70\xee\x22\x09\x0a\x01\x5e\xb5\x0e\x02\x0c\x5b\x57\xaa\xf4\x6a\x42\x8d\xc1\x57\xfb\xfa\xa0\xf8\xeb\x79\x26\x19\x1a\x8e\xb2\xba\x0c\xd5\xf0\x1f\x2b\xaa\xc4\xb2\x96\x8c\xd1\xc2\x64\x28\x04\x78\xdd\x3a\x08\x30\x70\x5d\x16\x95\xce\x6f\xc9\x2d\x27\x33\x29\x9e\x15\xd9\x44\xe2\x13\x29\xfe\x4a\x31\x55\xa1\xdc\x06\xd5\x0b\xc6\x49\xb6\x7a\x24\x5b\x17\x51\x08\xf0\xca\x75\x10\x60\xe8\x3a\xfe\xf0\x2e\xf1\xdc\x62\xee\x27\x03\x41\x91\xa9\x48\xda\xb4\xc6\x5b\xfa\x37\x13\x56\x3e\xf4\xf0\x98\xb0\xca\xd6\xe5\xa5\x63\xc7\x51\x08\xf0\xda\x75\x10\x60\xf0\xba\xe1\xde\xb7\xd7\x7d\xbd\x1d\x27\x98\x38\x7c\x4e\x94\xf5\xf7\x9b\xd8\xc6\xe7\xb6\x8c\xdd\x58\x6e\xb9\x4a\x3d\x2a\xba\xaf\x6c\x4e\x1a\x85\x00\xaf\x5e\x07\x01\x86\xaf\xe3\x4f\xba\x27\x58\xfd\x8c\x31\x3d\xa6\xff\x4e\xb5\xc8\x37\x6e\xc7\x8e\xbb\x94\xd2\x94\xab\x73\xf6\x3c\xa0\x45\xbb\x5c\x07\x21\x45\x21\xc0\xeb\xd7\x41\x80\x01\xec\x04\xf8\x2a\x6d\xac\xd5\xb8\x12\xb5\x3f\x49\x15\xbf\x2b\xce\x2d\x67\x17\x2e\x09\x89\xc9\x77\x50\xfa\xe0\xe4\xd0\x29\xd0\x36\xac\x85\x42\x80\x57\xb0\x83\x00\x43\xd8\xc5\x9c\x2c\xb9\x20\x7a\x32\x67\x24\x3c\x2d\xba\x80\xf3\x1a\xa1\xdd\xd6\x1c\x47\x1d\x35\x37\xa1\x76\xfd\x03\x53\x3e\x01\xf3\x71\x05\x14\x02\x9c\x86\xdd\x6e\x98\xf6\xea\x3b\xbb\x61\xc2\x20\x76\x05\x67\x6f\xb1\xdd\xb5\x8b\x0d\x67\xc8\x76\x96\x28\xb9\xff\xeb\xf7\xb0\xd3\xe1\x67\x2b\xdb\x4a\xa5\x31\x97\x52\x9f\x47\x84\xe9\xee\x7c\x79\x78\x15\x3b\x08\x30\x8c\x5d\xa5\x76\x98\x66\xeb\x1b\xba\xf7\xfe\x57\x29\x1b\x0a\x17\x52\x25\x0f\x99\x1f\xa0\x7e\x3b\xbe\x2a\x2c\xaf\x70\xb6\x99\x83\x5c\xd4\x01\x85\x00\xaf\x63\x07\x01\x06\xb2\x5b\xed\xfa\xc2\x22\x39\x98\x40\xfd\xe9\x95\x9b\x17\xcc\x5b\x9a\x8f\x8d\xbf\xce\xe4\xb6\x76\xb6\xdb\x38\xc7\x41\xf7\x72\x96\x1d\x0d\x0a\x01\x5e\xc9\x0e\x02\x0c\x65\x47\x79\xd1\x37\xa4\x3d\xee\xf1\x48\xc9\xa1\x9b\xe5\x21\x33\xab\x65\x4c\xa3\x8e\x65\x7d\x2b\xa5\x95\x86\x6d\x31\xc7\xc4\x3e\xeb\xed\x8c\x39\x78\x2d\x3b\x08\x30\x98\x9d\x48\xe1\xd1\xbb\x53\x51\xee\x5b\x4f\xe4\x18\xfc\xad\x4d\x8e\xbe\x84\x15\xb1\xf4\x6f\x9b\x05\x2b\xde\x10\xe9\xa4\x06\x10\xda\x31\xa3\x10\xe0\xd5\xec\x20\xc0\x70\x76\x93\xd1\x29\xf9\x42\x37\x3d\x7d\xe9\xf2\x03\xde\x77\x0e\xa7\x77\xc7\x1d\x2c\xb5\x3b\x78\xea\x84\x35\x47\x89\xdd\x43\x63\xa3\x6f\x3b\x23\x08\x5e\xcf\x0e\x02\x0c\x68\x27\x5c\x7f\xea\x9a\xc9\xa9\xfb\xbd\x1a\x2f\x1f\x14\xfc\x5a\x4c\xfa\xf1\x7a\x74\x86\x75\xe1\x01\x61\xaf\x8a\x6f\x7a\xf9\x13\x09\xcf\x0b\x28\x04\x78\x45\x3b\x08\x30\xa4\x9d\x80\xb8\xd3\x01\x83\x97\xba\x1e\x40\x27\x16\x25\x5a\x0f\x50\x29\x78\x42\xad\x31\x2d\x66\x69\xee\x9f\x4a\xd3\xeb\xb7\xfe\xdd\x05\x85\x00\xa7\x69\xb7\x1b\xa6\xbd\x56\xe6\xdd\x30\x61\x50\x3b\xd5\xbb\xf3\x6d\xc2\xb3\x66\xde\xd5\x2f\x1f\x38\xd3\x33\x98\xdd\xb2\xd3\x79\xae\x53\xce\x93\x2b\x3a\x32\x47\xab\x66\xb7\x70\x64\x67\x7e\xc4\xab\xda\x41\x80\x61\xed\x9a\xc3\xbf\x98\x4d\x07\x9b\x9c\xea\x88\x7d\x13\xa0\x41\x4d\x5b\x76\x64\x21\x33\x2b\x0a\xd2\x45\x94\xfc\x4a\xf6\x5b\xd9\xe2\xdd\xe9\x20\x78\x5d\x3b\x08\x30\xb0\xdd\x04\x95\xc1\x4f\xb1\xfc\xc5\xeb\x9c\x07\x8a\xb3\x2c\x38\x6e\x5c\x0d\xac\x79\xa3\xcc\x9d\xf8\x73\xe9\x8c\x32\x77\x1b\x55\xe7\x23\x46\x14\x02\xbc\xb2\x1d\x04\x18\xda\xee\xfd\x3b\xe6\xb3\xd5\x07\x33\x11\x11\x11\x8e\x0c\x6e\x1b\xdb\x9a\x85\xc2\x64\xf9\xab\x57\x6c\x3f\x9d\x16\x91\xaf\xe9\x9b\xe1\x12\x47\x21\xc0\x6b\xdb\x41\x80\xc1\xed\x4e\x4b\x69\xfc\x25\xcd\x61\xa1\xf9\xa9\xe3\xac\x29\x77\xc8\x3e\xe9\x51\x21\x79\x5d\xaa\xa6\x9d\xcb\x6b\x23\xcd\xdb\x9b\xcf\xfd\xcd\x51\x08\xf0\xea\x76\x10\x60\x78\x3b\xf5\x20\xc7\xdf\x7d\x3f\x49\x5d\x5d\x8b\xf5\xb5\x7e\x4a\x28\x1d\xa0\x21\x7d\x4e\x6a\x2c\x79\xe7\x18\xa2\xa5\x60\x30\x7c\x56\xc3\x04\x85\x00\xaf\x6f\x07\x01\x06\xb8\x0b\x97\x93\x0d\x37\xcf\xf3\x40\x7f\x64\x9e\x3c\xc1\xf9\x7e\xed\x04\x59\x8b\x89\xb1\xe0\x6a\xb1\xed\xb2\x81\x43\xf6\xe3\x4c\xbb\x9d\x06\x8a\x57\xb8\x83\x00\x43\xdc\xb5\xdc\x20\x3c\xd1\x3e\xcd\x7b\x59\x63\x68\x7c\xf4\xdb\xbb\x8f\x22\x0b\xde\xf6\x4f\x18\x9b\x5d\xf6\x11\x9d\xba\x41\xf9\x3a\xff\xef\x15\x14\x02\x9c\xc6\xdd\x6e\x98\xf6\x9a\x5d\x77\xc3\x84\x41\xee\x46\x2f\x9b\xd4\xee\x93\xaa\x45\x74\xc7\x7f\xbd\x20\xb7\xd3\xb8\x7f\x6f\x98\x39\xfd\xb8\x7f\xc3\xb9\x95\x1c\xe5\xcd\xba\x0e\xca\x9d\x8e\x8e\x57\xb9\x83\x00\xc3\xdc\x65\xca\xaa\xbd\x3d\xf7\xc5\xb3\x40\x48\xe6\x4c\x99\xd1\x98\xcc\x6a\xd5\x2c\xf5\x81\xce\xf5\x51\x3e\x6e\xfd\x79\x17\x59\x87\xfb\x87\x51\x08\xf0\x3a\x77\x10\x60\xa0\xbb\x78\xdd\xbb\x62\x71\xe5\xfe\xb5\xdc\xe1\xe5\x88\xce\x82\xc5\xd5\x0e\x05\xd6\x92\x57\xde\xd2\xd1\x1c\x05\xb7\x4f\xb5\x10\xc4\x29\xa2\x10\xe0\x95\xee\x20\xc0\x50\x77\x34\xbf\x14\xdf\xf7\x0e\x2c\xa8\x5c\x11\x25\x99\xe6\xe7\x2f\xd6\xa3\x1c\xfb\xcb\xfb\xbb\xd2\x78\x8c\x42\x69\x64\xbf\xa8\xac\x93\x06\x0a\x01\x5e\xeb\x0e\x02\x0c\x76\xf7\x6d\x9c\xf5\x04\x9f\x60\x0c\x07\x88\x98\x9e\xc9\xfc\x4e\xf6\xd3\x8a\xa2\x90\xdf\xb3\xe7\xe8\x4f\x5e\x95\x12\x6a\x11\x87\x2a\x2e\x14\x02\xbc\xda\x1d\x04\x18\xee\x4e\x55\xea\x7c\x8a\xbe\xc2\x23\x7f\x8f\x20\x5e\xd2\x7b\x22\x41\x8a\xb7\x9f\x88\x7d\x90\x5d\x65\x3a\x36\xcc\x2e\xeb\xe9\xfe\x98\x7d\xa7\xb9\xe1\xf5\xee\x20\xc0\x80\x77\x6a\x26\xc5\xf4\x0a\x12\x5d\xe2\x68\x91\x82\x84\x51\x82\xbc\xdb\x18\xb9\x47\x4f\xf4\x43\x19\x02\x0f\x62\x85\xe5\xe4\x9e\x2c\x0f\x14\x02\xbc\xe2\x1d\x04\x18\xf2\xae\x44\x32\xe1\xd4\xab\x31\x59\x7d\xb1\x07\xb7\x2e\xe8\xbd\xee\x65\xb2\xac\xa6\x1d\x5d\x1b\x97\x77\xab\x3e\xde\x9d\x9e\xeb\xa5\xb4\xb3\x8a\xe3\x34\xef\x76\xc3\xb4\xd7\xee\x6e\x37\x4c\x18\xf4\xae\x3f\xe1\x82\xc5\x97\xc1\x6c\xa3\xa9\xdb\x6b\xc9\x94\x01\xc7\xc7\x2d\x7d\x51\xbf\x9e\x27\x85\x9d\x01\xa9\xa8\xbe\xc5\x15\x4e\x4e\x14\x02\xbc\xea\x1d\x04\x18\xf6\x8e\x59\x3b\xc9\x52\x24\x50\xbf\x59\x81\x99\x8d\xb7\x99\xc9\x6c\x7f\x7a\x17\x93\xf3\xbc\xa4\x3f\xcd\xdd\xfe\xdc\x05\x5d\x37\x91\x9d\x0f\x8d\xd7\xbd\x83\x00\x03\xdf\xf9\xad\x1e\xe0\x3b\x74\x70\xe8\x88\xc0\xb5\xa0\x50\xf6\xac\xf0\x4b\xdf\xe3\x1c\xaf\x51\x78\x67\xe5\x7b\xb2\xb1\xcf\xa7\x3e\xb5\x38\x8f\x42\x80\x57\xbe\x83\x00\x43\xdf\x4d\x0f\x6b\xa9\x29\x1b\x14\xb2\xae\x48\xea\xd2\x4f\x59\xc8\xdc\x38\x56\xf9\x34\xa9\x9e\xf0\xc1\xbc\x1e\xb1\xc9\xfb\x2b\x08\xfb\x4e\xe3\xc1\x6b\xdf\x41\x80\xc1\xef\x3a\x6e\x1f\x3c\xf8\x2c\xf8\x74\x5a\x1e\x6b\x42\xc5\xf6\x77\x8d\x56\x57\x3f\x3e\x02\x33\x53\x85\x90\x0b\x1a\x9a\x8a\xfe\x87\xc5\xdc\x50\x08\xf0\xea\x77\x10\x60\xf8\xbb\x60\x96\x0b\x7f\x9e\x91\x29\x4a\xbe\xb3\xea\x28\xbd\xf2\x36\x27\xf0\x18\x89\xcb\xfa\xdd\x85\xce\xf3\xb4\x1c\x5c\x95\x4d\xd1\xfb\x0f\xa2\x10\xe0\xf5\xef\x20\xc0\x00\x78\xa5\x1c\x7a\xe9\x27\xe8\xae\x99\xa8\xcf\xd5\xdd\x6c\x0d\x4e\x52\x95\xda\x77\xb4\xdf\xac\x9c\x77\x51\x38\x2e\x48\x3d\x75\x2d\x70\x67\x24\xc6\x2b\xe0\x41\x80\x21\xf0\xd8\xc3\x9d\xe8\x9e\xbc\x4b\x17\xd1\x2a\xe1\x38\x1c\x53\xfb\x49\xbd\x72\x43\x73\xe9\x2b\xe2\x11\x16\x61\xbf\x55\xf3\xb8\xcc\x76\xe7\x73\xe0\x34\xf0\x76\xc3\xb4\xd7\xf9\xc7\x6e\x98\x30\x08\x1e\x60\x66\x1d\x6a\xf8\xd9\xde\xf1\x77\xff\xe0\xe7\xe7\xfc\xc6\xfd\xfe\x15\xc3\x93\x6f\x5e\x78\x96\xee\x9b\x39\x4a\x47\x9f\x18\xb3\x1f\x85\x00\xaf\x82\x07\x01\x86\xc1\x7b\xba\x98\xba\xfa\xb0\x8d\x85\x76\xc3\xad\x21\xe6\xc4\x05\x06\x2a\xbd\xdc\xe2\x4f\xf3\x66\x5f\x2c\xa3\xd6\xda\xac\x96\x2c\xa7\x2d\x50\x08\xf0\x3a\x78\x10\x60\x20\xbc\xae\xd8\xfa\xcb\x7e\x21\x7e\xae\xc9\x0b\x9f\xb9\xda\x8f\x5b\x7a\xbb\x42\xf2\x58\x1a\x44\x86\x96\x65\x74\xdf\x90\x09\xbd\xd9\xce\xdf\xc0\x2b\xe1\x41\x80\xa1\xf0\x5e\xc4\x5b\x8b\x4a\x84\x6c\xd1\xd7\x9f\x7e\x2a\x9e\xc4\x6f\x51\xdb\x58\xbd\xc8\x51\xb7\xef\x64\xc6\xf8\x41\x41\x73\xf2\x10\xdd\x9d\xa6\x80\xd7\xc2\x83\x00\x83\xe1\x75\xb9\xc6\xf9\xde\x78\xd3\x6a\x53\x7b\xe4\x96\xf3\x90\x9f\x39\xfb\x87\xc9\x76\xb1\xad\xfb\x05\x47\xdf\x1f\x61\xd1\x63\xa5\xaf\x35\x40\x21\xc0\xab\xe1\x41\x80\xe1\xf0\xc4\x22\xdc\x73\x48\x15\x1f\xfe\x45\xec\xd6\x1b\x17\xb3\x9c\xc6\xd7\x73\x38\xaf\xbc\x0b\x7a\xdf\x15\x15\xf0\x89\xdb\x89\x2b\x9a\x1d\x85\x00\xaf\x87\x07\x01\x06\xc4\xdb\xc7\xda\x6a\x95\x44\xff\xbe\xc3\xf8\x57\xe3\x5b\xd5\xa9\x48\x4e\xef\xfc\x37\x42\x7c\xa3\x0d\x95\x9e\x49\xf5\x19\x47\x9c\x7a\x77\x9a\x1b\x5e\x11\x0f\x02\x0c\x89\xe7\xd9\xee\xfc\x4b\xef\xfb\xef\xc1\xbe\xee\x90\xab\x83\x91\x6c\x96\xc6\xf3\x87\x24\xef\x4e\x6f\xa7\x3b\x49\xfc\x5e\x29\x52\x09\xda\xd9\x33\xe1\x34\xf1\x76\xc3\xb4\xd7\x09\xe1\x6e\x98\x30\x28\x5e\x89\x00\xe5\x5c\x8b\x12\xf3\xed\xed\xe6\x89\xe5\xcc\x63\xdc\x5f\x17\x5e\x52\x74\x7c\xcf\xb1\x7f\x61\x92\xfd\x3c\x5f\x8b\xed\xa0\x34\x0a\x01\x5e\x15\x0f\x02\x0c\x8b\xe7\xd2\x38\x20\xce\xf8\xab\xea\x62\x5c\xda\x50\x68\xd8\xf1\x74\xf1\xb7\x1f\x66\x7f\x87\xa9\x12\x5c\x1e\xf1\xe1\x58\x2a\x6f\x2b\x17\x41\x21\xc0\xeb\xe2\x41\x80\x81\xf1\xca\x8e\xec\x6b\xf3\x9c\x11\xfd\x99\xd6\xfa\x9b\xe4\x58\xc1\xd1\x4d\xe7\xea\x58\x4d\xf3\x4e\x6f\xa8\xfa\x95\xeb\xfc\x9c\x89\x38\x44\x21\xc0\x2b\xe3\x41\x80\xa1\xf1\x8c\x9d\x5f\x92\xb9\x55\x9e\xb7\x36\x58\xe7\xee\x1b\x9e\x8b\xaf\xb9\xf4\x29\x63\xf9\x7e\xbc\xdb\xca\xad\x37\x37\x04\x9e\x73\x49\x30\xa1\x10\xe0\xb5\xf1\x20\xc0\xe0\x78\x47\x69\x6a\x0d\x8a\xb2\xba\x03\x05\x66\x75\x32\xf6\x0d\xac\x75\x2c\x9f\x53\x71\x27\x80\xa3\x79\xdc\x75\xd6\x72\x0e\x96\x9d\xb6\x28\x04\x78\x75\x3c\x08\x30\x3c\xde\xc3\x33\xf7\x9e\xf8\x78\xd6\x8f\x86\x33\x4a\x1f\xb6\xb8\xf4\x69\x23\xe8\x32\x59\xd6\x89\x83\xf1\xda\x97\x67\x16\x89\xed\x02\x93\x76\xf6\x4c\x78\x7d\x3c\x08\x30\x40\x9e\x7b\xed\xf9\x8c\x0e\x86\x73\xfb\xd7\x15\x25\x4f\x3e\x3c\xce\xf6\x28\xd2\xd1\x54\xc0\x73\xdc\x7a\x8c\x36\xf1\xdb\xd0\xf1\xd2\x58\x29\x14\x02\xbc\x42\x1e\x04\x18\x22\xef\xba\x98\x36\xb3\x66\x3b\x31\xb5\x28\x79\x9e\xac\x7f\x60\x75\xff\xa1\x3b\x15\xa1\xc9\x2f\x9a\xee\x4e\x3c\xe6\xaa\xc9\xbf\x62\x62\x88\x42\x80\xd3\xc8\xdb\x0d\xd3\x5e\x67\xe8\xbb\x61\xc2\x20\x79\xb1\x1f\xbe\x3b\x78\x9c\x4d\xfb\x9b\x23\xc2\x6b\x75\xaa\xfb\xe4\x78\x97\xf4\x46\xdb\xb0\x31\x6f\x95\xde\x91\xcb\x2c\x0f\x9f\xe6\xeb\xa2\x10\xe0\x55\xf2\x20\xc0\x30\x79\xe1\x2a\xca\x49\x42\x1c\x77\x73\x9c\x9d\x0a\xde\x29\x70\xe7\x1d\x1c\xaa\x7e\x5c\xbc\xb1\xee\x7a\x3c\x47\xd2\x69\x26\x37\xce\x68\x67\x3f\x83\xd7\xc9\x83\x00\x03\xe5\x39\xc4\xd1\x9c\xfc\x61\x92\x63\xba\xdc\xe0\x18\x76\xee\xec\x9c\x31\x65\xcd\x2d\x9b\x78\x2d\xab\x4c\xce\x7d\x66\xdf\xd3\xb3\x4a\x77\xba\x14\x5e\x29\x0f\x02\x0c\x95\x77\xf5\xd4\x2d\xda\x88\x4a\x23\x66\x6a\x13\xf1\x10\x57\xc6\xe5\x20\xd2\x30\x42\x43\xf5\xab\x0b\x67\xf5\x9e\xe4\x11\x49\x0a\x79\x1f\x47\x21\xc0\x6b\xe5\x41\x80\xc1\xf2\x18\x22\xd7\xd6\x39\xdb\xf5\x33\x8c\x1f\x54\xa5\x77\x96\x8a\x34\xbe\x08\xe5\xea\x26\xf9\x2d\x47\x9d\xe4\xf6\xc5\x39\x71\xf2\xc4\xce\xaa\x81\x57\xcb\x83\x00\xc3\xe5\x19\xe7\x0c\xbb\x0c\x93\x10\xdd\xd5\xe3\x6f\xeb\x93\x90\xa8\x13\x43\xcd\x08\xff\x2e\xf1\x3a\x2b\x47\xbe\x77\xed\x0e\x9b\x4f\xf2\x44\x21\xc0\xeb\xe5\x41\x80\x01\xf3\x28\x82\x56\xf2\xe2\x68\x8f\x13\x4f\x96\xbf\x24\x37\x18\x0d\x20\xe7\x7a\x4b\x3c\x98\xf5\x94\xe4\x51\xf8\x2d\xbf\x2f\xd5\xfd\xd2\xc2\x28\x04\x78\xc5\x3c\x08\x30\x64\xde\xa9\x4c\xd5\x62\xa3\x42\x41\x01\x41\x03\xd2\xda\x0e\x0d\xae\xb8\x5c\x9d\xfe\x2d\x6a\xd7\xa0\xb4\x69\x82\x77\xa3\x79\x8d\x0d\x3b\x4d\xfa\x3f\x9a\x79\xb7\x08\xe9\xe7\xbf\xf3\xc9\x6d\xcd\xf1\x46\x8c\x8a\x13\xf2\xa4\x74\x53\x1c\xea\x72\xde\xf2\x4f\x19\x5e\xd3\x3c\x7d\x5c\xfb\x81\x2b\xe6\xb2\xef\x6e\xef\xa5\xe2\x8f\xbe\x8c\x2f\xa9\xf9\xf4\xb9\x5f\x90\xdf\xe8\xfb\xe6\xad\xfe\x20\xe3\xd0\x9a\xda\xcc\x7b\x85\x2d\xda\xfc\xb0\x7f\x7f\x58\xa7\x77\x10\xde\x96\x5e\x27\x6f\x1b\xa4\x60\x61\x9c\xff\xc5\xca\x5a\x3f\xcb\x7e\x8b\x90\x32\x95\x34\x39\xd8\x43\xa1\x31\x63\xb5\xe2\x9f\x52\x2b\xd9\x86\x94\xdf\x4d\xbf\x0f\x1c\x0e\x21\x0a\x29\xb8\x17\xea\xc0\xa3\x3f\x9f\xa2\x55\xfe\x8e\x85\x9c\xbb\x45\x40\x2d\x74\x91\xfc\x9f\x52\xfe\xa3\xa4\x56\xdd\x84\x92\x66\x45\x8b\x02\xc4\x27\xb9\x3d\x9b\x94\x2f\x27\x7d\xff\x36\xb0\xaf\xf9\x45\xe4\x74\xe5\x6c\x08\xe5\xa9\x7f\x4a\x8b\xe3\xbb\x5b\xef\x96\x4e\x1a\xd6\x31\xa5\x56\x2d\xc4\x10\x34\x51\x0e\xde\x66\xaf\xad\x60\x5d\x2c\x77\x5a\x63\x70\x98\x94\x26\xfa\xa7\xb4\xdb\xe2\x9d\x82\x8e\x6d\x54\x72\x9f\xdd\x54\x92\x87\x7a\x05\xe7\x23\xa6\xb6\xf0\x24\xc9\xdb\x54\xaa\xf3\xcc\x6b\x4d\x12\x97\x57\xff\x29\xa5\xbd\xfd\xe0\xe1\xb9\xc8\xdf\xa7\x5f\x3f\x2d\x1e\xe8\x99\xb6\x1f\x9d\x99\x9e\xbc\x78\x7c\xb0\x44\x3e\x4d\xb4\xe1\x76\x0a\x13\xc2\xfb\x4f\xe9\xb1\xcd\x61\x8f\x98\x6e\x1f\x24\xfa\xc1\xea\x8b\x3b\x0c\xa2\x1f\x9e\x10\xb6\x68\x26\x0d\xd2\x17\x9b\xac\x11\xf0\xd1\xcc\x6f\xbf\xfb\xdf\x65\xdf\x5e\x4f\x75\xb7\xa3\x61\xd0\x3c\x8b\x89\xb8\x9a\x19\xe1\x57\x63\xba\x82\xb0\xe5\x3e\x71\x8f\x7e\x1f\xb5\x87\x46\x84\x6f\xbc\x6c\xd4\xf9\x51\x7f\xe9\x2a\x15\x4b\x14\x02\xbc\x6a\x1e\x04\x18\x36\x8f\x85\x97\x81\x74\xf5\xfc\x96\xfc\x9c\x44\x6a\x7d\x56\xf8\xf1\x94\xa1\xfe\xbb\x0f\x53\xaf\xbe\xb0\xb8\x53\x41\xac\x64\xb9\x9d\xbe\xb3\xac\xe2\x75\xf3\x20\xc0\xc0\x79\x9c\x33\x13\x42\x65\x0b\x39\x36\x6c\x0b\x12\x67\xaf\xcc\xd2\xbb\xa5\xbd\xca\x25\xa8\xa1\xea\x38\xc4\xe5\xce\xa7\x91\xfa\x92\x9f\x18\x85\x00\xaf\x9c\x07\x01\x86\xce\xbb\x63\xfb\xe8\x9a\x56\xb7\x0c\xdf\x35\x3e\x35\xa5\x77\xfc\x44\xc6\xcc\x0c\xdd\x34\x31\xc2\xbe\xd3\xb1\x9e\x2a\xb2\xf1\x9f\xeb\x48\x51\x08\xf0\xda\x79\x10\x60\xf0\x3c\xbe\x89\x9a\x1f\x34\xb4\x19\x0c\x13\xbc\xd3\x79\xdd\x2c\x89\xab\x89\xb2\xe4\x79\x85\x43\x41\x20\xda\xb6\x30\x7a\x6c\x23\xdd\x1a\x85\x00\xaf\x9e\x07\x01\x86\xcf\xeb\x8a\xaa\x23\x1f\xff\x39\x24\x3f\x7d\xbe\xf8\x49\xff\x81\xb3\x95\xc2\xce\x37\xdb\xd8\xcb\x02\x98\x7b\x82\xbd\x95\x5a\x9c\xde\x51\xa1\x10\xe0\xf5\xf3\x20\xc0\x00\x7a\x2d\x9e\xf1\x97\x62\xb4\x07\x19\x8b\x68\x4d\x2e\xd6\x75\xf9\xd8\x04\xa2\xdb\xad\x47\x90\x17\x8a\x26\x5f\x3e\xfd\x38\x97\xed\x70\x0a\x85\x00\xaf\xa0\x07\x01\x86\xd0\x23\xc9\xe4\x4c\x24\xe9\x2d\x41\xb7\x1f\xf3\xf9\x27\x46\x71\x3d\x52\xba\xa9\xde\xde\xa6\xfe\x64\x5f\x89\x43\xd1\x12\x49\x44\x8b\x3b\x0a\x01\x4e\x43\x6f\x37\x4c\x7b\xf5\x9d\xdd\x30\x61\x10\x3d\x2a\x2e\x3b\xc1\xc7\xaf\xd3\x66\x78\x4d\x6e\xf9\xb2\x14\x51\x19\x44\xb7\x93\xff\xb2\x7a\x44\x76\xb3\x62\xed\xeb\xa2\x75\x10\x10\x43\x21\xc0\xab\xe8\x41\x80\x61\xf4\x46\x96\x1c\x4d\xcd\xff\xaa\x26\xdb\xaf\xc3\x74\xb3\x19\x39\x0f\xe6\x39\x6d\x95\x19\xbf\xeb\x2e\xdb\x42\xa2\xd5\xae\x2b\x3d\x56\x28\x04\x78\x1d\x3d\x08\x30\x90\x9e\xaf\x81\x2d\x89\x72\x69\xa7\xa9\xfb\x4d\x93\xd7\x1f\xc7\x7d\x9c\xc7\x8f\x27\x7c\xae\xb2\xed\x9f\x37\x76\x19\xa4\xd0\x78\x14\x7c\x16\x85\x00\xaf\xa4\x07\x01\x86\xd2\x7b\xc5\xed\x2d\x69\xf1\xb0\xf2\x55\x95\x40\x2e\xff\x5f\xbb\xbc\xf3\x6b\x0b\x9d\xf7\x22\x9a\x9b\x5c\x03\x5b\x3d\x4f\x9e\x72\x5f\x3c\x81\x42\x80\xd7\xd2\x83\x00\x83\xe9\x05\xd6\x09\x4c\x6f\x16\xbe\x3f\xde\x62\xfa\xe0\x5b\x28\x71\xf1\xc8\xed\x14\xe2\x2d\x6d\x5d\xbb\xe0\xdf\x26\xc7\xea\x33\x99\x4f\x21\x28\x04\x78\x35\x3d\x08\x30\x9c\x5e\xf7\x67\x8b\xb9\x30\xca\xb3\x72\x5f\xa5\xa7\xd8\x05\xd6\x1d\x27\x1a\x93\xd7\xe4\xc3\x29\x7c\x0b\x22\x9f\x11\xc4\x88\xb7\xfd\xdc\x69\xa0\x78\x3d\x3d\x08\x30\xa0\x9e\x13\x73\xcd\x1b\x7b\x3f\xe3\xd4\xa4\xe5\x49\x4e\x1f\xf4\x5d\x0f\xfd\xb6\xe1\x4c\xe4\x26\x95\x51\x9d\x82\x74\xd3\x45\x5a\x39\x0d\x14\x02\xbc\xa2\x1e\x04\x18\x52\x0f\x79\x5e\x28\x70\x58\x2a\xf1\x53\xec\xc3\xc2\x47\xe5\x0a\x6a\x2f\x7e\x24\x1d\x99\x3f\x18\xed\xc9\x6f\x38\x4b\x40\xd6\x55\xa4\xb1\xf3\x37\x70\x9a\x7a\xbb\x61\xda\x6b\x65\xde\x0d\x13\x06\xd5\xdb\xff\x30\x36\xa3\xdf\xe3\x3d\xc5\x4d\xd7\x5f\x1b\xea\xd1\xa2\x5e\x27\x7b\x6f\x13\x44\x9d\xa0\xff\x0d\xa3\x9a\x0f\xb2\xa7\x51\xd2\xa1\x10\xe0\x55\xf5\x20\xc0\xb0\x7a\xd4\x77\x74\x7a\xb3\xfa\xbc\x87\x8a\xb6\x85\x3a\xaa\x56\xa9\xb2\xea\x3d\x4d\x28\xab\xd3\xed\xb2\x92\x63\x79\x6e\x6a\x67\xc4\x5e\x42\x21\xc0\xeb\xea\x41\x80\x81\xf5\xe8\xab\x37\x32\xb4\xb8\xf2\xb5\x74\xef\x99\x94\xeb\x5e\x54\xef\x5a\x73\x51\x18\x73\x11\xfb\x59\xa7\x66\x39\xfc\x68\x91\xc3\x76\x67\xcf\x80\x57\xd6\x83\x00\x43\xeb\x49\x70\x1c\xe5\x16\xbc\xf7\xd2\xe4\xa5\xe6\xd3\x53\x9a\x21\xfb\x75\x19\x22\x9a\x9e\x95\x47\x91\x11\xb5\x09\x4d\xbb\xd1\x2d\x38\xf3\xa0\x10\xe0\xb5\xf5\x20\xc0\xe0\x7a\xc7\xc7\x9e\x4a\x3f\xba\x7e\xd7\xb9\xde\xd7\x41\x73\x55\xaf\x8c\x53\x7e\xdf\x6a\xdd\x4f\xc5\xe8\xaf\xbf\x1f\xb4\x35\xe6\x06\x7d\x22\x42\x21\xc0\xab\xeb\x41\x80\xe1\xf5\x34\x8e\x45\xc5\x26\x13\x26\x55\x88\x67\x8a\x82\x1b\x9f\x5d\x3f\x0d\x95\xbd\x9e\xf2\xfa\x7a\x32\x41\xeb\x71\xd8\xb1\x3c\xbd\x3a\x1b\x14\x02\xbc\xbe\x1e\x04\x18\x60\x8f\xa5\x36\x88\x97\xa2\x8a\xb8\x2b\x27\x51\xbd\xdb\xd3\xcf\x0f\x3d\x65\xff\x3e\xff\x24\x4a\xa5\x66\xd8\x41\x7b\xad\xf5\x88\x00\x2b\x0a\x01\x5e\x61\x0f\x02\x0c\xb1\x27\x25\xa6\xb1\xef\xf2\xcc\xfc\x37\x2d\x2b\xe1\x2b\x9a\x02\x39\xf1\xdf\xd9\x5b\x8a\xf9\xde\x46\x93\xd0\x2e\x5f\x08\x31\xe9\x98\xd8\x79\x77\x71\x1a\x7b\xbb\x61\xda\x6b\x76\xdd\x0d\x13\x06\xd9\x7b\xfa\x62\xb3\x80\x4a\xc0\x7d\xff\x35\x2f\xee\x6a\xe5\xe7\xcb\xdc\xcc\x0a\x6f\x85\xcb\xaa\x56\xd4\x52\x9d\x8d\xbf\x38\x7d\xf7\x32\x43\x21\xc0\xab\xec\x41\x80\x61\xf6\xbe\x5c\x1b\xee\xba\x1b\xc6\xc5\xfb\x43\x2f\x66\xfd\x61\x98\xb1\xb1\x6a\xd4\xa5\x0f\x03\xbf\xf6\x53\x22\x6d\x7e\x7f\xfe\xda\x2d\xef\xbc\x84\x78\x9d\x3d\x08\x30\xd0\x5e\x30\x4d\x97\xd5\x37\x46\x51\x40\x66\x20\x3a\x47\x15\x51\x63\x3b\xf3\x22\xbd\xce\x6d\x1f\xdd\x5b\x57\xd2\x01\x7b\x01\xc5\xaf\x3b\xe3\x11\x5e\x69\x0f\x02\x0c\xb5\x17\xce\x7d\x3a\x94\x53\x32\xe5\x7d\x04\x85\x35\x1b\xeb\xbd\x94\x40\x79\xc3\xfb\x22\xcf\x93\x09\x4d\x6c\xb8\x6f\x74\x6a\x33\xe7\x3a\xa1\x10\xe0\xb5\xf6\x20\xc0\x60\x7b\xc9\x4c\x14\x9c\xca\x4d\xd7\x4f\x5d\xd4\xff\x11\x99\xa2\xb9\x7d\xfe\x19\xe0\x7c\x17\xb7\xb0\x79\xd5\x3b\x54\xc0\x23\xd5\xff\x3e\x25\x0a\x01\x5e\x6d\x0f\x02\x0c\xb7\x77\x2a\x9e\xd7\x8d\x9b\x51\xe7\xda\xc1\xcd\xaa\x6b\x1c\x84\x81\x6f\xaf\xed\x2b\x59\xee\x3b\xb3\x2a\x72\x8a\xc0\x29\xb4\xf5\xaa\xe1\xce\x98\x87\xd7\xdb\x83\x00\x03\xee\x95\x6b\x4b\x4b\xeb\xc5\xc6\xff\x7c\x0a\x36\x82\xaf\x3a\x8c\xd1\x57\xa9\xe7\x23\x1f\x5b\x2e\xbf\x56\x71\x12\xb4\x69\xbe\xf3\x9c\x1e\x85\x00\xaf\xb8\x07\x01\x86\xdc\x43\x96\x8d\x5f\xff\x19\xd9\x1c\x0c\xdf\x30\xad\x8f\x3c\x2c\x33\xea\xe6\xcc\x66\x1c\x9b\xc5\x9c\x21\x99\xf0\xb4\x21\x79\xf4\x8e\x31\x0a\x01\x4e\x73\x6f\x37\x4c\x7b\xed\xee\x76\xc3\x84\x41\xf7\xf8\x45\x8b\x88\x94\xac\x6c\x52\xd7\xb4\xcc\xfb\x4b\x6e\xda\x96\xa5\xbd\xa0\x99\x4c\x9a\x8a\xd6\x6a\xe3\xd5\x8a\x1a\xa2\x79\xef\x8a\x42\x80\x57\xdd\x83\x00\xc3\xee\x5d\x4b\xba\x5f\xa3\xb4\x72\xf1\x49\xe0\x68\xdc\x10\x97\x78\xf9\xe3\x4b\xd3\x44\x4d\xbf\x65\x2b\x0a\x32\x87\xe8\xcf\x56\xf5\x0b\x78\xa2\x10\xe0\x75\xf7\x20\xc0\xc0\x7b\x64\x45\xd3\xa1\xaf\x03\xfd\xb3\x18\x9e\x49\xf4\x9c\x24\xfa\x5a\x61\x48\x99\xc1\xcb\x9b\xed\xcb\xea\xb8\x19\xe6\x41\xed\x75\xf2\x0c\x0a\x01\x5e\x79\x0f\x02\x0c\xbd\x17\xbe\x8f\x87\x71\xd6\x30\x45\x4b\x7b\xf5\xb9\x3e\x4d\xfb\xb5\x26\xde\xc2\xe8\xee\xf7\x4f\x8e\x70\x7d\xac\x59\x60\x5d\xe3\x39\x25\x8a\x42\x80\xd7\xde\x83\x00\x83\xef\x19\x1e\x36\xbc\x3e\xf2\x3c\xa6\x69\xe6\x5d\x22\x63\xa0\x9d\x97\xc5\xb5\xba\x6a\xc9\xa3\x19\x07\xb3\xf6\xa9\xb5\x73\x39\x93\xe7\xc8\xa0\x10\xe0\xd5\xf7\x20\xc0\xf0\x7b\x52\x4f\xfc\xa3\xea\x2a\x6d\xa8\xa2\x07\x01\xe3\xb4\xd5\xb7\xd0\x33\x62\x5f\xeb\x99\x4f\x6f\xbc\x31\x7d\xd1\xf0\xf1\xc1\x9a\xc9\x49\x14\x02\xbc\xfe\x1e\x04\x18\x80\x6f\xf8\x82\xf2\xb5\x02\x63\xf7\xf6\x2d\x51\xa7\x83\x96\xcd\xf7\x7f\xe4\x7a\x7f\x78\xd1\x85\x84\x33\x1c\xb8\xbe\x21\x78\x26\xbd\x7e\x67\x04\xc3\x2b\xf0\x41\x80\x21\xf8\x74\x2c\x7c\x9a\x5e\x87\x5d\xb6\x6b\xb9\xa4\xfa\x42\xcf\xd5\x3a\xb3\x76\x49\xbd\xf1\x8c\xdc\x5f\xb5\x89\x9c\x1f\xe7\xa7\x9e\xb8\xed\xbc\x57\x38\x0d\xbe\xdd\x30\xed\x75\xfe\xb1\x1b\x26\x0c\xc2\x67\xc7\xe2\xdc\xe0\x1d\x29\x57\x2e\xf4\x2a\xeb\xbc\xde\xf2\xfe\x8b\x3e\x71\x84\x7f\x43\x82\x2a\x5e\x8e\x76\x86\x92\x3a\x2e\xa7\x32\xa3\x10\xe0\x55\xf8\x20\xc0\x30\x7c\x1f\x08\x38\x78\x4b\xaf\xa4\x45\x1e\x43\xe3\x07\x0d\x3e\x91\x4f\x1e\x1a\x4a\xb3\xe0\x74\x68\x7c\x99\x12\xf6\x2e\xb4\x7d\xb8\x6f\x67\x1f\x80\xd7\xe1\x83\x00\x03\xf1\x7d\x41\x4e\xc4\x04\x64\x5a\x22\x53\x16\x3c\x46\x9e\xdc\x3f\x6f\xa9\x9e\x31\x13\x8a\xda\xba\x6c\x27\xfd\x6e\xa3\xf8\x78\xcc\xd3\x9d\x17\x04\xaf\xc4\x07\x01\x86\xe2\x7b\x46\xfb\x8e\x7e\xca\x8e\x7f\x60\xff\x2d\x55\x2e\x15\xee\x1b\x7a\xfa\x17\x27\xe4\xc4\xdd\xf4\x3c\xcb\x5f\x6b\xc6\xb7\xa5\x1b\x2b\xa2\x10\xe0\xb5\xf8\x20\xc0\x60\x7c\xab\xe4\x44\x9c\x53\x1d\xe5\xc5\x31\xc6\x0c\xee\xeb\x53\x11\x87\x7e\xb4\xb8\x87\x91\x8d\x67\x11\xe8\xbb\x5c\xd7\xa7\x1f\xbf\xc2\x8e\x42\x80\x57\xe3\x83\x00\xc3\xf1\xcd\xd3\x7e\x61\x8b\x25\x93\x0f\xb8\xd4\xf0\x53\x2c\xf6\xf9\x3d\x06\x4e\xc6\x54\xc7\x87\x45\x24\x07\x5b\xc4\xd6\xd6\x7e\xd0\xfb\xf3\xa1\x10\xe0\xf5\xf8\x20\xc0\x80\x7c\x1f\x5b\x4b\x4a\x4e\x5a\x55\x92\x2e\x52\x59\x31\x44\x71\xe9\x7a\x5c\xde\xee\xf6\xbf\x60\x2d\x73\xc3\x2d\x4c\x39\xaa\xcf\xd7\xc0\x01\x85\x00\xaf\xc8\x07\x01\x86\xe4\xf3\xfb\x13\x9f\x3f\xaa\xd1\x3a\xdc\x7b\x3b\xae\x5e\x6b\x9f\xb0\x6c\x2d\x4b\x98\xe7\x55\x5f\xd7\xc2\xe2\x3b\xfa\xdc\x3d\x55\xcf\x2f\xa2\x10\xe0\x34\xf9\x76\xc3\xb4\xd7\x09\xe1\x6e\x98\x30\x28\xdf\x0d\x9f\x59\xf3\x74\xb7\xa7\x6f\x59\xde\xd2\xdc\x4a\x18\x1f\x64\x0f\xa8\xbb\x7d\xe4\xb1\x01\xbb\xac\x13\x71\xfa\x80\x62\x8b\x0a\x31\x0a\x01\x5e\x95\x0f\x02\x0c\xcb\x37\x32\x1e\xc2\x5b\xf7\x40\x68\x7e\x9d\xb6\xd6\xf2\x6b\xf0\x86\xc0\x85\xa3\x4e\x7d\xa3\x2c\x1a\xc1\x22\x19\x33\x66\x15\x5f\xfb\x48\x51\x08\xf0\xba\x7c\x10\x60\x60\x3e\x6a\x02\x4d\xd3\x60\xa7\xc9\xbb\xa2\x4b\x12\x1e\xd3\xf4\xe9\xed\xac\x5c\x76\xfb\xd4\x28\xfc\x0e\x26\x17\x7c\x8e\xd7\xae\x66\xdf\xf9\xf2\xf0\xca\x7c\x10\x60\x68\xbe\xbf\x23\xb2\xfb\xe5\x4f\xbe\xa0\x30\x53\x56\x0d\x26\x5c\x69\x45\xcf\xc7\x59\xbb\x77\x16\xb6\x67\x2f\x0a\x27\x20\x16\xb2\x8f\x65\x51\x08\xf0\xda\x7c\x10\x60\x70\xbe\x03\x61\xf9\x03\xf6\xe9\x4b\x6b\xc2\xc7\x69\x8c\x8c\x98\x7b\xf3\x39\xb5\x84\x97\xb4\xa3\x12\x7a\x7c\x0c\x0b\x2a\xdd\xf2\x0a\x8e\xa0\x10\xe0\xd5\xf9\x20\xc0\xf0\x7c\xbe\xf4\xb7\xa2\x7c\x02\x7b\x1b\x3e\x3d\x32\xeb\xab\x69\x8d\x72\xff\x3c\xe3\x10\xc9\xf6\x0d\x8c\xd4\x65\x73\xe6\x20\x6d\x6b\x16\x28\x04\x78\x7d\x3e\x08\x30\x40\x1f\xc1\x60\x06\x6d\x91\xe0\x69\x19\xe7\x82\x00\x9d\x4b\xf5\x3d\xd5\x4e\x92\xcf\xa3\x88\xe4\xfd\x72\xb2\xed\x9d\xbd\xb3\xd3\x4f\x51\xa0\x10\xe0\x15\xfa\x20\xc0\x10\x7d\x71\x49\x7c\x59\x3e\x22\x2f\x8e\x12\x10\xf6\xce\x74\x0b\xf9\x56\x67\x72\xd4\xb8\xc4\xb3\x1f\xb8\x11\xbb\x5f\xe8\x47\x99\x90\x87\x09\x0a\x01\x4e\xa3\x6f\x37\x4c\x7b\x9d\xa1\xef\x86\x09\x83\xf4\xd1\xef\xa3\xd4\xef\x69\x26\xef\xaa\xa9\x42\x05\x6e\x5e\xa3\x10\x30\x9a\xba\xcd\xf1\xed\xa1\xe7\x88\x6f\x5a\xf1\xc8\x27\x52\x78\x00\x85\x00\xaf\xd2\x07\x01\x86\xe9\x6b\xc8\xbe\x3b\x3c\x7d\x9c\xa6\x64\x32\xd7\xbd\xb8\xcc\xba\xab\x4f\xa8\x9e\x73\xd4\x6c\x7b\x8e\xef\xd5\xa3\xc3\x16\xfe\x85\xd9\x9a\x28\x04\x78\x9d\x3e\x08\x30\x50\xdf\xa2\xfc\xe1\xa5\xce\x51\x22\xd3\x64\xc6\x4c\xd8\xcc\x62\x3e\xf4\xc8\x26\x46\x68\xe2\x70\x68\x5d\x3e\xd5\xe0\xe0\x5b\x27\x8a\x9d\x0d\x2f\x5e\xa9\x0f\x02\x0c\xd5\x27\xdc\x54\xd2\x94\x71\xa9\x9f\x7b\x9a\xc0\xd0\x71\x7c\xfb\x34\x01\xd9\x6c\x7b\x89\xf1\x55\x59\x05\xee\xd2\x66\xd6\x4d\x82\x48\x7d\x14\x02\xbc\x56\x1f\x04\x18\xac\xef\x8f\xc2\xc0\x02\x12\x2d\xcf\x6d\x38\xb1\xda\xb9\xff\x44\x9a\xe9\x3b\x77\xde\x3f\x2e\x87\x2e\xc8\x52\x44\x7f\x48\x66\x50\x5c\x60\x42\x21\xc0\xab\xf5\x41\x80\xe1\xfa\x3a\x87\x1c\x9c\x9a\xdc\xe4\x8c\x68\x6a\xdc\x26\xd6\x24\x0d\x88\x09\x05\x67\xae\xc8\x43\x47\x3b\xe3\xae\xee\x2b\x19\x24\x8f\x69\x51\x08\xf0\x7a\x7d\x10\x60\xc0\x3e\x52\x89\x3b\x77\x0c\x3a\x04\x6f\xbc\x88\x9b\xa6\x88\x5c\x13\xfd\xf2\xec\x92\x6d\xc5\x05\x11\x1a\xdb\xd0\x7b\xea\x72\x67\x6e\x1f\xd8\x19\xc1\xf0\x8a\x7d\x10\x60\xc8\x3e\xfe\x8d\x7a\x8b\x9f\xcc\x8d\x7f\xc7\x3f\xda\x1e\x5e\xaa\x9f\x4a\xeb\x1c\x88\xaa\x3b\xf7\x9e\x4e\x73\xec\x8b\x9c\xd9\xf5\xf8\xb7\x3b\xfb\x4b\x9c\x66\x5f\x1f\xf8\xbf\x30\x59\xf4\x71\x0c\x5e\x9f\x3f\xf1\xb3\x62\x39\x30\xe1\x99\x61\xc4\x42\x26\xaa\x2b\xd1\x8e\x50\x3e\x61\x23\x4d\xb3\x64\x75\xf8\xbb\x10\xa2\x4c\x75\xf3\x9f\xfb\xab\x81\x0c\x05\x3a\x06\x39\xf5\xa7\xe4\xbe\xc2\x1b\x3d\xe1\xaf\x3b\x87\xfd\xcc\xae\xb7\x17\x89\x6f\xf8\x24\x5c\x79\xc4\xe5\x5f\x99\xf3\x4f\x69\x56\x79\x3e\x59\xf4\x1a\x77\xe6\xd0\xc6\x90\xaa\xf6\x15\x2b\xf6\x63\xa1\x54\xfb\x4d\xbf\x70\x4e\x9e\x67\x7c\x7f\xf5\x71\x41\xec\xbf\x3f\xac\xb3\x52\x57\xe6\x53\x92\xdc\x5c\x8d\x0f\xb0\x11\x96\xaf\x1b\xbe\xb7\x4c\x10\xa9\x1e\xfd\xca\xb0\xd7\xb4\xf0\x00\xef\x9b\xce\xca\x7f\xaf\xe5\xae\x69\x9c\xb7\x08\x94\xf5\x91\xb1\x94\x22\xa2\x52\x79\xa5\x21\xfa\xf3\x33\xeb\xc1\x27\x36\x81\x03\x47\x72\xdb\x6a\xaa\x1d\xfe\xd8\x04\xed\xde\x62\xee\xf5\x5f\x8a\xb9\xc5\x0c\x56\xbd\xd2\x5b\x78\xd2\xbc\xe0\xa2\xb9\xce\xf2\xb8\x25\xaf\xb7\xd0\xbe\x13\x6f\x2d\x1e\x79\x7d\x8e\x78\x66\xd5\xe1\x48\x77\xf0\xdf\x7f\xc8\xd3\xe3\xe5\x64\xd8\x35\xa5\x13\xdd\x75\x84\x7f\xb3\x26\x6a\x59\x1f\xea\xd2\x3f\xe3\xb9\xd2\x38\x7c\xca\x74\x51\x94\x88\xad\x23\xfa\xdf\x9f\x2c\x5e\xf2\xbe\xe3\x9f\x65\x4a\x7f\xb2\x5f\x71\xf3\xfe\x5a\xdc\x63\xb5\x37\xca\x71\xca\x6f\xb7\x3a\x09\xce\x8c\xf7\xdb\x68\x24\x04\x17\xfd\x53\xaa\x4e\x10\xa0\x93\x36\xdc\xb7\x68\x7c\x99\x9d\xad\x52\x56\x85\x2a\xdc\xf0\x31\xc1\xb5\x53\x6f\x4e\x5f\xd0\x52\xa8\x4a\xfa\x94\x85\xfe\x53\x5a\x1b\xc7\xdd\x7b\x95\x6c\xec\xf2\xd0\xeb\x96\x4e\x41\xc9\xfe\xe7\xe4\x46\x6a\x1f\x9f\x2a\x8b\x7c\x56\x7a\x24\x7e\x8a\xf8\xd5\xb6\xcf\x3f\xa5\x9f\xf4\xd0\xe3\x07\xd9\x7c\x0c\xae\x4c\x7a\xee\x7f\xfa\xeb\x95\xce\x4a\xc2\x1c\x21\xfb\x0f\x15\x83\x6c\xc6\xe8\x7e\xb3\x59\x66\xd1\x7f\x4a\xf3\x8a\x74\xdc\xbb\x6b\x8d\x36\x6c\x17\x56\x05\xc9\x6e\xed\x8b\xf3\x3e\x34\x3a\x47\xd3\x1a\xae\x68\xb6\xfa\xe9\xd3\x80\xf7\x49\xf8\x6f\xa9\xae\x71\xe9\xbe\x0d\xeb\x2f\xcc\xd3\x47\xd2\x94\x94\xe7\xb2\x2a\x99\x0e\x09\x06\x84\xb2\xed\x17\x08\x73\xf3\x2b\x77\xa6\x92\xfc\xdf\x2d\xe6\x5e\x4f\xf5\xff\x6b\xd5\x08\x06\x23\x1c\x6b\x5d\x34\xba\xe9\x74\x9b\x79\x48\xf9\x61\xa7\xcf\xc4\x55\xaa\x6b\xb4\xa1\xd1\xfd\x1b\x54\xe7\x09\x94\x13\x39\x92\x7b\x4b\xe8\x51\x88\xe0\xc6\x08\x11\x0c\x46\xe8\xb9\x16\x9f\xc7\xdc\xb3\xc4\xa7\xc1\x2e\xe7\xc5\x13\xe0\x26\x13\xc0\x62\x63\xca\xe7\x56\xf9\x57\xdc\xe3\xb6\x7e\x3b\xff\xa2\x3a\x0a\x11\xdc\x18\x21\x82\xc1\x08\x69\xe5\x89\xb2\xf8\x49\xed\x1c\xce\xdd\x12\x19\xad\x27\xf8\x9a\xf9\xf5\x69\x70\x0a\x8b\xf6\x23\xfb\xa9\x83\x5d\xad\xf1\x94\x9b\x07\x51\x88\xe0\xc6\x08\x11\x0c\x46\x68\xe9\xf0\x73\xc0\x7e\x94\x2d\x2d\x85\x44\x20\x95\x9e\x7e\x45\x37\x91\xe5\xc7\xe0\x64\x7d\xbe\x75\xff\x7a\xb3\x2c\xb0\xbe\xe8\x86\x42\x04\x37\x46\x88\x60\x30\xc2\xca\x86\x69\x0d\xa9\x37\xa6\xbc\xb6\x01\x5d\x7f\x8c\x8f\xc5\x97\xad\xc9\x17\x1c\xa0\xcc\x13\x27\x98\x28\xf8\x90\x98\x3b\xbd\xc4\x8c\x42\x04\x37\x46\x88\x60\x30\x42\x59\xc7\xc0\x0d\xf6\xcb\x9f\xc6\x3d\xec\xa0\x4f\xfc\x82\x2d\x6f\xfb\x03\x97\x86\x92\x9f\x9a\xa5\xe3\x6d\xce\x55\xb1\xab\xe8\x21\x14\x22\xb8\x31\x42\x04\x83\x11\xd2\x9f\x17\x9f\x61\x3a\xbf\xe9\x39\xce\x30\x6c\x1b\x71\x7e\xb2\x96\x22\x5d\x59\x41\x3a\x7b\xec\x84\xcc\xcb\x26\xe9\x99\x0d\x6a\x7d\x14\x22\xb8\x31\x42\x04\x83\x11\x7e\x59\x71\x88\x69\x39\x77\x95\xa3\xea\x02\xf3\xea\x9d\x3e\x69\x83\xfa\xfa\xb3\xea\x56\x2b\x89\xef\x22\x5a\xca\xb2\x5a\xff\xb6\xda\xa1\x10\xf9\x8f\x18\xe1\x5e\x7d\x67\x37\x4c\x18\x8c\x30\x3a\xf0\xb6\xd5\xdd\x27\x79\x14\xcb\x0e\x1a\x2e\x3e\xc2\x3f\x46\x22\xc6\x19\x6d\xae\xc8\xc8\xfb\xe7\xb6\xdf\x7a\xb6\xaa\x18\x63\x89\x42\x04\x37\x46\x88\x60\x30\xc2\x1f\xbe\x53\x06\xad\x5f\x9f\xd9\x2e\x28\x3c\xcb\x57\x7d\xff\x81\x7a\xd6\x9a\x4f\x8c\xca\x53\xa7\x4d\xe4\x37\x12\x45\x74\x6b\x5d\x05\x85\x08\x6e\x8c\x10\xc1\x60\x84\xd9\x0b\x14\x01\x93\x82\x5f\x9f\xc9\x73\xbd\x1f\x70\x1b\x7f\xa1\x75\x33\x5d\x74\x6a\x46\x62\x4a\x7c\xbc\x74\xb9\xab\xf6\xb6\x82\x23\x0a\x11\xdc\x18\x21\x82\xc1\x08\x35\xe3\x7e\x1c\x13\x26\x36\xea\x3e\xc2\x28\x9a\x7e\x6a\xe9\xfb\xd0\x46\x97\x0c\x65\xe4\xaa\x59\xac\xc1\x31\x3d\x7f\xeb\x45\x76\x6a\x14\x22\xb8\x31\x42\x04\x83\x11\x96\x1e\x35\xfc\xf5\xde\xd6\x29\xca\xff\xd4\x84\x65\x13\x81\xa2\x74\xf6\xa6\xb3\x91\x9f\x4c\x51\x89\xf9\xc1\xf8\x1c\x21\x6d\x04\xa0\x10\xc1\x8d\x11\x22\x18\x8c\x50\xec\x73\xd9\x78\xf2\x5b\x02\xa9\xdb\x37\x94\x9d\xcf\x33\x52\xdd\x59\x2d\xf0\x9d\x25\xe0\x33\x9a\x23\xd5\xde\x2e\x13\x84\xb2\x3c\x28\x44\x70\x63\x84\x08\x06\x23\xec\x2b\x53\x76\xd5\xb3\x2c\xcd\x2d\xf4\x48\xe4\xaf\xba\x67\xa7\x3b\x2c\xb7\xf5\x5c\xe2\x76\xb3\x45\x29\xa2\x3c\x17\x7e\xbf\xd7\x04\x85\x08\x6e\x8c\x10\xc1\x60\x84\x31\x7d\xc3\x16\xca\xcb\xdf\xc6\x8e\x4d\xee\x77\xaa\x53\xfe\xd6\xb3\x3a\x75\x3d\x8a\x45\xd4\xaa\x8e\x4c\x89\x54\x20\x5c\xe9\xe7\x15\x14\x22\xff\x11\x23\xdc\x6b\x65\xde\x0d\x13\x06\x23\x0c\x2c\x46\xd6\xef\xc8\xda\x3e\xf3\xb3\x93\x17\xb9\x2f\xa3\xc5\x96\x81\xb4\x4c\x0f\x30\x19\x49\x5f\x7f\x77\xab\x8d\xcf\x09\x39\x8d\x42\x04\x37\x46\x88\x60\x30\xc2\x4d\xfb\x4b\xc8\x3d\xf9\x44\xa2\xf9\xe2\xbb\xc5\x57\xed\x0c\x53\x73\x58\xc9\x62\x3c\x5a\x06\xfb\x53\x9f\xdc\x9e\x4b\xa6\x2a\x37\x45\x21\x82\x1b\x23\x44\x30\x18\xe1\x34\x63\x69\xca\xe5\x97\x2b\x73\x1b\x3e\xa2\x01\x5f\x2c\x39\x88\xab\xd9\x9d\x06\xd0\x89\xaa\x9c\x67\x8e\xd4\xf7\x8f\xd0\x18\xee\x74\x74\xdc\x18\x21\x82\xc1\x08\xa7\x1a\x46\x98\x56\x5f\xaa\x44\x5c\xd3\xd6\x5d\x9e\x53\x63\x08\x3f\x91\xad\x5f\xf7\x6a\x3d\x80\x91\x61\xdf\xe6\xb7\x77\x5f\x45\x14\x50\x88\xe0\xc6\x08\x11\x0c\x46\x78\x3e\xb4\x60\x6e\xfb\x9c\x6d\xaf\xaa\xfe\x1b\xaa\xeb\x4b\x2e\xd9\xe7\x58\x4a\x79\xac\x94\x14\x2f\xf5\x39\x2e\x29\x98\xe8\x05\x5d\x44\x21\x82\x1b\x23\x44\x30\x18\x61\x7d\xa3\x08\x61\x74\x22\x3c\x1c\x7b\xee\x4f\x70\x63\x5a\x64\x59\x84\x3a\xaf\x4f\x51\x92\x8d\xcf\x9a\xe7\xeb\xcd\x13\x99\xca\x56\x28\x44\x70\x63\x84\x08\x06\x23\x64\xb6\xd2\x8d\xa0\xa4\xd5\x91\x76\x72\x6d\x5a\x3a\xf1\xd5\x51\x97\x89\xf7\xe5\x38\xcd\xb5\xb2\xfa\x03\xc6\xf4\xeb\x8a\x1d\x72\xca\x28\x44\x70\x63\x84\x08\x06\x23\x8c\x29\xe0\xe2\xb8\xab\x3e\x82\x54\x46\x53\xfd\xf0\x7c\xcd\xae\xbc\xe9\x22\x9b\xdf\x3a\xc4\x21\xad\xb9\xa1\x4b\x56\xd5\x91\xbf\x33\x55\xfd\x47\x8c\x70\xaf\xd9\x75\x37\x4c\x18\x8c\x30\xf6\x9c\x73\x90\xee\xd2\xdd\x14\xd2\x21\x73\x6a\xe6\xf3\x51\x32\x5c\x07\xc2\x17\xbd\x5d\xbc\x4f\x17\x48\x54\x50\x0e\xd2\xca\xb8\xa3\x10\xc1\x8d\x11\x22\x18\x8c\x70\x49\x67\x9f\x97\xaa\xdb\x18\xdd\xa4\xca\xed\xf6\xcb\xc1\xd7\x0f\x15\x2f\xdf\x21\xd7\xdd\x62\xcd\x25\xe8\xde\x97\x6c\x5d\x25\xb1\xb3\x32\xe1\xc6\x08\x11\x0c\x46\x98\x73\xce\x0c\xde\x5b\xfa\xee\x4c\x2d\xfa\xac\x2d\xb4\xd0\x9d\xda\x85\x2b\x78\xfb\x16\x22\x52\xd5\x7b\xb9\xfa\x2f\x3d\x75\x94\x30\x0a\x11\xdc\x18\x21\x82\xc1\x08\x4d\x4c\xa9\xb9\x16\xff\x3e\x33\xfc\xdd\x5b\xec\xd9\x04\x38\x7b\x07\x56\xfc\x0d\x6e\x85\x4a\xf7\x7e\x23\x7e\x2e\x93\xf3\xfc\xa6\x36\x0a\x11\xdc\x18\x21\x82\xc1\x08\xb5\x64\xf5\x4f\xfc\x6d\x87\x82\xc2\xaf\x73\x7e\xfc\x9e\xb1\xe8\x3c\x1c\xbe\x51\xb0\x7f\x52\xa5\xc3\xec\x52\x73\x9a\xa5\x3e\xa9\x35\x0a\x11\xdc\x18\x21\x82\xc1\x08\x3d\x0e\x19\x94\xb4\xda\x05\x9e\xe5\x38\x12\xb1\x5c\x94\x32\x1e\x7a\x93\x5b\x97\x3e\x3c\xe6\xb7\x97\xa2\xda\xcf\x33\xdb\x1f\x88\x76\xc6\x3c\xdc\x18\x21\x82\xc1\x08\xef\xd4\x5f\xe5\x48\x18\xec\x9d\x9f\x8a\x91\xb5\xa9\x6a\x44\x10\xf7\x63\x2d\x6b\x34\xd3\x9b\x62\xcf\xde\x3a\xb0\x0f\x4b\xbb\x33\xa2\x10\xc1\x8d\x11\x22\x18\x8c\xd0\x4b\x34\x68\x98\xc7\xe1\xc9\xfd\xc6\x15\xb5\x02\x31\x8b\x79\x9b\xf2\x91\x7e\x64\xbb\x5d\xf3\x44\xb5\x92\xe1\x57\xe9\x1b\x8a\x9e\x28\x44\xfe\x23\x46\xb8\xd7\xee\x6e\x37\x4c\x18\x8c\xb0\x5c\x30\xdf\x93\xe5\xe2\x87\xca\xe3\x01\x72\xd7\x55\xe3\x82\x3b\xfa\x54\x2a\x17\xc2\xd2\xde\x25\x78\xbd\xf0\x33\xb7\xd7\x7a\x25\x89\x42\x04\x37\x46\x88\x60\x30\x42\xd3\x4f\x76\x95\xa4\x3f\xf2\x99\x35\xdd\x2c\x69\xcc\x99\xc8\xc2\x1c\xe3\x23\xbe\x9c\x96\x22\x09\xb8\x73\x6b\xaa\x46\x9a\xf7\xe8\x4e\x97\xc2\x8d\x11\x22\x18\x8c\x30\xe7\xcd\x69\x48\x41\x68\xfb\xc1\x27\xaf\x66\xd1\xaa\x48\x50\x39\x88\x96\x4a\x7a\x43\xbc\x9a\xbd\x86\xb9\x5f\x55\x4e\xc1\x7e\xa7\x4b\xe1\xc6\x08\x11\x0c\x46\xa8\x31\xc6\xe7\x7f\xb7\x29\x2b\x3a\xf6\x8c\x65\xb9\x74\xf6\x1f\x7a\x3b\x83\x01\xb2\x47\xfa\x8c\x14\x72\xf7\xa1\xfe\xc6\xd4\x99\x73\x28\x44\x70\x63\x84\x08\x06\x23\x54\xbf\xfe\x83\x43\x6b\xca\x62\xc5\x9f\x75\xda\x7f\x80\x97\xc8\x6e\x00\x5d\x58\x5c\x29\xf7\x23\x72\xfa\xa2\xb2\x22\xb3\x7d\x8e\x12\x85\x08\x6e\x8c\x10\xc1\x60\x84\x51\xa7\x15\x8b\x26\x97\x53\x28\x64\x7c\x4f\xd9\xa6\x2b\x6b\x38\xf8\x5f\x2c\x92\x1a\x7b\x4a\x93\x31\xc4\xfc\x6d\x94\xd6\x87\x57\x07\x85\x08\x6e\x8c\x10\xc1\x60\x84\xaf\x0d\x1d\x8d\xd6\xa1\xb6\xa4\x69\x30\x7b\x78\x0b\x62\x4a\x28\xfa\x62\x98\xb2\x69\xd8\xe0\x8e\xc5\xc1\xd4\xb3\x7f\xe9\x7a\x38\x50\x88\xe0\xc6\x08\x11\x0c\x46\x18\xb5\xb6\x35\x4a\x1c\xbc\x3f\x5a\xef\x90\xb3\x20\x41\xbc\xcc\x58\xca\x52\xb4\x00\x57\xe5\xe8\x7a\xe8\xc1\xb3\x57\xaa\x09\x3d\x76\x1a\xe8\x7f\xc4\x08\xf7\x3a\xff\xd8\x0d\x13\x06\x23\xd4\xb9\xae\x94\xf8\x2e\x91\xd2\x9a\xf4\x41\x3c\xa9\xf5\xdc\xbd\xfe\x8a\x10\x4f\xbb\xbf\x51\x4c\xe5\xd1\x99\x2a\x2d\x09\xa4\x05\x5c\x28\x44\x70\x63\x84\x08\x06\x23\xcc\xf2\x64\xe4\xd4\x63\xec\xcd\x76\xf9\xd5\x70\xea\x84\x8e\xce\x30\xba\x22\x4d\x5d\xec\xe7\xaa\x2f\x39\x51\x6b\xc9\x71\xed\x29\x1b\x0a\x11\xdc\x18\x21\x82\xc1\x08\xdd\xae\xeb\xf4\x29\x3f\x3c\x4c\xa6\x3b\xfc\x5a\xa7\x54\x29\xb6\x29\xe1\x81\xb3\x87\x78\xa5\xe5\xcf\x92\x6f\x13\xc8\x4a\x48\xd5\x19\x14\x22\xb8\x31\x42\x04\x83\x11\x96\x5f\x5f\x9c\x23\x39\x3c\xa4\xf5\xde\x3f\x7f\x69\x7f\x0c\xa5\x0b\x45\xcd\xf2\x12\x67\x67\xcf\xdf\x88\x26\x7e\xbb\x6c\x26\x5a\x7e\x14\x22\xb8\x31\x42\x04\x83\x11\x6a\xf3\xa7\x7a\x8e\x08\x08\x1c\xfb\x18\xe7\xfc\xbb\x42\xf6\xde\xcf\xb5\x23\xcd\x7d\xe5\x86\xaa\xb4\x5d\xa7\x39\x8b\x18\x43\xe8\x0e\xa3\x10\xc1\x8d\x11\x22\x18\x8c\x70\x42\x5f\xeb\x1c\x15\xdd\x31\xd5\x2a\xaf\x12\x32\xc9\x9a\xe0\x92\xea\xa3\x9a\xe1\x3d\x84\x0f\x52\x4a\x3a\x42\xef\xc8\x52\x70\x9e\x45\x21\x82\x1b\x23\x44\x30\x18\x61\x08\xe7\x49\xd3\x6f\x87\x2e\x8f\x11\x0d\x52\xac\x59\x9d\xdc\x3c\x27\xec\x16\xf4\xac\x8d\xf3\x21\x8b\x66\x1c\x67\xad\xec\x30\xad\x2b\x0a\x11\xdc\x18\x21\x82\xc1\x08\x9f\xaf\x25\xbf\x9b\x9d\xba\x1b\xc2\xa7\x63\x58\x1f\x66\xe2\xc0\xfc\x52\xd8\x5e\xec\x88\x54\x50\x8f\xbd\xb1\x65\xe5\x85\xe1\x3e\x4e\x14\x22\xff\x11\x23\xdc\xeb\x84\x70\x37\x4c\x18\x8c\x70\x5d\x8f\x4f\xd1\x6f\xe1\x7b\x65\xa7\x33\xe7\x45\xbf\x9b\x92\x59\xb5\x07\x2a\xbe\x0d\x51\xfe\xbc\x17\x9a\xdd\x66\x9d\x76\xd7\xcc\x00\x85\x08\x6e\x8c\x10\xc1\x60\x84\x66\x52\xc5\x54\xdb\x84\xdf\xb3\xee\xde\x23\x2f\xa5\xf8\xb0\x25\x56\xf6\xa3\xa8\x69\xfc\x9c\xc2\xa1\x40\x32\x59\x1e\x99\x07\x72\xfb\x50\x88\xe0\xc6\x08\x11\x0c\x46\xc8\x9b\x68\x50\xc4\x52\x21\x5a\xf7\x6b\x9e\xae\x68\x8b\x3c\x22\xb5\x64\x4b\xda\x51\xcd\x99\x41\xe5\xd5\x47\x91\x78\x0b\x72\x7d\x37\x14\x22\xb8\x31\x42\x04\x83\x11\x7a\x08\xbd\xa9\x2e\x20\x3e\x16\x95\xda\xf7\xc9\xe1\x99\xcd\x27\x2f\x1e\xea\xcc\x4d\xe9\x47\xd2\x97\x68\xa9\xaf\xb0\x2b\x91\x6d\xe8\xa1\x10\xc1\x8d\x11\x22\x18\x8c\x50\xa3\xa7\xc6\xc4\xe3\xe8\x93\xbc\xf4\xb6\xe8\x81\xb3\x14\x2c\x43\x4d\x9f\x42\x42\x1f\x92\x99\x3a\x2e\xd4\x72\xfd\xfa\x33\x14\x7d\x04\x85\x08\x6e\x8c\x10\xc1\x60\x84\x02\x33\x79\xba\x14\xb7\x39\xfb\xf3\xb8\x6c\x59\x02\x09\x06\xd7\x2f\xf8\x77\xf5\xf6\x09\xb5\xd2\xe6\x11\xbe\x66\xde\x0e\x8b\xda\x79\xd1\x71\x63\x84\x08\x06\x23\x4c\x36\xa4\x30\xec\x4c\xfc\xbb\xe9\xd4\x99\xf1\xa3\xaa\xb8\xd7\xa4\x77\xf9\xfb\xb2\x09\x71\xc6\x53\x0b\x77\xca\x6c\xf1\x1a\x27\x56\x14\x22\xb8\x31\x42\x04\x83\x11\x72\x99\xf2\x88\x5f\x4d\xbf\x7f\x6d\x5c\xf4\x31\x3a\xa1\xb8\x32\xd7\xc2\x1c\xad\xf4\x61\x43\x80\xca\xa8\xce\x88\x2f\x46\xc3\xd1\x10\x85\xc8\x7f\xc4\x08\xf7\x3a\x43\xdf\x0d\x13\x06\x23\x0c\x0e\x90\x4a\x54\xbd\x60\xde\xaf\xf8\x77\x9e\xf3\xa5\x75\x41\x8e\x6b\xea\x27\x1e\x65\x23\x75\x92\x8b\x6f\x6b\x2f\x25\x0f\x85\xd2\xa1\x10\xc1\x8d\x11\x22\x18\x8c\xf0\x95\xa8\x81\x52\x6e\x52\xb2\xa4\xd2\xd1\xc6\xa1\x21\x06\xf2\x27\x42\x01\x9f\x3a\xdf\xfc\x69\x64\x31\x4f\xc8\x33\x09\xad\x6d\x67\x40\x21\x82\x1b\x23\x44\x30\x18\xa1\xfd\x59\x6f\x4e\x6b\x62\x8f\x90\xfd\x2a\xf6\x3e\xef\x83\xfe\xa8\xd8\x96\x4b\x2d\x68\xe4\x19\x6d\xac\xe8\x94\x9d\xb6\x52\x7e\x2b\x8d\x42\x04\x37\x46\x88\x60\x30\x42\x19\xca\x26\xae\xb5\x8e\x2e\x4f\xeb\xbb\x37\x97\x7f\x1f\xa3\x48\xeb\x1f\xe9\x8c\xa8\x7a\x90\x9c\xa6\x47\xa1\x25\xb5\x18\x99\xc6\x84\x42\x04\x37\x46\x88\x60\x30\xc2\x56\x12\x01\x76\x22\x41\x27\x6f\xb7\x02\x12\x82\x1b\x34\x9b\xd4\x94\xb1\x61\xf6\x0d\xf7\xac\xd4\xf5\x6f\xff\x70\x9f\x97\x72\xdd\x59\x35\x70\x63\x84\x08\x06\x23\xe4\x8e\xe4\xf3\x59\xec\x05\xe9\x9f\x68\xff\xe4\x9e\x2e\x2f\x6d\xea\x73\x58\x37\x75\x16\x24\x18\x1d\x22\x14\xba\x7c\x7d\x82\x68\x67\x0f\x8b\x1b\x23\x44\x30\x18\xa1\x7d\xe8\x32\xc9\xba\xcb\x54\x07\x79\x21\x19\xc1\x60\x8b\x6e\xd1\x37\xc1\x34\x1e\x8d\xa3\xae\xc1\x7d\xea\x8e\xd3\x06\x25\x52\x36\x28\x44\x70\x63\x84\x08\x06\x23\xac\x57\xa8\xed\x0b\xde\xd4\x72\xcc\x38\x22\xed\x9a\x34\x5a\xe9\xf7\x8e\x7e\xea\x6b\x69\xb5\x88\x48\x97\x5c\x26\x12\xba\x6e\x0f\x50\x88\xfc\x47\x8c\x70\xaf\xbb\x46\xcc\x65\xdf\x82\x0b\x5f\x50\xe4\x9d\x6d\xad\x14\x2a\xe1\x37\xf1\xeb\x17\x07\x1f\x48\xdb\x9e\x54\xd1\xfc\x4b\x64\x4b\xbb\x7d\x9f\xe2\x75\x69\xe9\x3f\xa5\xed\xf3\x57\x82\xb6\x6d\x0f\xbc\xd0\x90\x22\x10\xab\x65\x1c\x53\xa0\x66\xa6\xf9\x4d\xd2\x60\xc2\x32\x70\x45\xf3\x82\x8c\x8d\x59\xd7\x3f\xa5\x17\x78\xf4\xf3\xcf\x3f\xfc\x39\x94\xc6\xb3\x74\x8b\x7e\x8d\x64\xc1\x6c\xe6\xbe\xca\x05\xaa\x91\x89\x66\xbf\x52\x2d\x01\xea\x60\xa3\x7f\x4a\x99\xc8\xc9\x42\x9a\x2d\x24\x4e\x7f\x7f\xe2\xea\x7c\xaa\x40\x94\x6b\x64\xa8\x47\x4f\x8b\xae\x82\xed\x5d\x4d\x92\x8e\xef\x46\x2b\xe3\x3f\xa5\x89\xe4\xdf\xfd\x0c\xc2\xbf\x4d\xb2\x1b\xf8\x0c\xcb\xcd\x3a\x1b\xfb\xa6\xdd\x9b\x54\x10\x5a\xac\xf2\x4f\x08\xa4\xeb\xbc\x64\x32\xf9\x4f\xa9\x62\x0f\xa7\x57\x3e\xc2\xcf\xea\xf1\x9d\xbf\x9b\xd8\xcb\xc3\x56\xf1\x0e\x7f\x23\xe1\xa0\x33\x7a\x6e\x2e\xbf\xf9\x25\x22\x1a\xf1\x4f\x69\x45\x05\x6f\x49\x8c\xe2\xed\x8e\xf6\x84\xa7\x7a\x5e\x84\x46\x9d\x5e\x29\xb2\x7a\xd3\x74\xf7\x09\xab\xe6\xfd\xf8\x16\xa2\xe4\x3f\xff\x53\x1a\x14\x79\xa3\xd8\x45\xa1\xfd\x4e\xeb\xe2\x7d\x2e\x6e\xdd\x90\xcd\xb9\xd1\x1f\xc4\xfc\x9e\x16\xc4\x1d\x96\x04\x79\x56\x91\xde\x21\xff\xbb\xec\xdb\xeb\xa9\xee\x76\x34\x0c\x46\xb8\x3d\x2e\xcb\xf6\xe0\x99\x9f\xfc\x52\xe5\xd9\x3a\xe3\xaa\xe8\xb5\xc7\x85\xca\x47\x9e\x96\xdc\x98\xbb\x35\x69\xe3\x35\x15\x6a\x69\x8b\x42\x04\x37\x46\x88\x60\x30\x42\xf3\xb3\xba\xea\x53\x39\x62\xd3\xc4\x13\x0f\xb4\x9b\xfa\xe9\x72\x19\xb4\xe2\x3d\xee\xb8\x79\x73\x9e\x71\xb5\x5d\xa4\xa5\xbc\xb5\xb3\x54\xe0\xc6\x08\x11\x0c\x46\x68\x77\xbd\x6a\xf3\x13\x79\xf7\xc7\x64\xdf\x23\x2f\xde\xe9\x0b\x77\x7e\x33\xbd\xfc\x43\xd3\x4b\x54\xfd\xe7\x8f\xcd\x09\x5f\x7e\xe7\x4b\x28\x44\x70\x63\x84\x08\x06\x23\x5c\xba\xbb\xcc\xf7\xfc\x5d\xba\xf3\xdf\xcf\x17\x46\x47\xfd\x86\x6c\x17\x7b\xee\x66\xb6\xa5\x1f\xe7\xa8\x7b\xa8\xa7\x69\x4b\x47\xe0\x89\x42\x04\x37\x46\x88\x60\x30\x42\xfe\xda\xcc\x83\x9f\xbf\x0d\x0a\xbe\x5f\x8e\x33\xfc\x6b\xfc\xec\xa3\x0f\x54\x61\x4a\x7f\xee\xf1\xb5\x77\xe5\x51\x0c\xf7\x48\x94\x20\x0a\x11\xdc\x18\x21\x82\xc1\x08\xab\xdf\x88\x9a\x50\xbd\x28\x91\x5a\x1e\x61\x5b\x7a\x33\x70\x39\xad\x23\xbe\x6e\xad\xf0\x4f\xa2\xfd\x11\xd5\xd1\xae\xb4\x5c\x0e\x0a\x14\x22\xb8\x31\x42\x04\x83\x11\xae\x17\xb6\x48\x59\xb9\x8c\x06\x77\xa6\x84\x71\xfb\x4b\x5c\x9c\x87\x77\x3a\xcc\x58\x6e\xb2\xf7\x70\xbc\x60\x7a\xce\xcc\xf8\x56\x13\x85\x08\x6e\x8c\x10\xc1\x60\x84\xaa\xca\x6a\x04\x42\xb9\xc2\x13\x12\x3d\x7c\xe1\x51\x48\xc1\x9b\x67\x3f\x2a\x78\xcb\xfd\x5e\x99\xdf\xba\x60\x6a\xf4\x94\x4c\xe7\x00\x0a\x91\xff\x88\x11\xee\xd5\x77\x76\xc3\x84\xc1\x08\x29\x25\x74\x28\x90\x6a\x1a\x82\x42\xeb\xbe\xd2\xa6\x97\xab\xd4\x51\x49\xd3\xa1\x53\xcb\x16\x56\x14\x5d\x55\xa9\x39\xa9\x91\xe4\x28\x44\x70\x63\x84\x08\x06\x23\x0c\x8a\xe4\x0e\x1d\x0a\x7c\xaa\xf1\x35\x41\xd7\x2a\xda\xf8\x88\x47\x58\xf3\xa8\x50\x70\x98\xbc\x74\xf6\x1f\xb4\x2f\x35\x99\xea\x24\x0a\x11\xdc\x18\x21\x82\xc1\x08\x7d\xa7\x23\xf9\xbd\x78\x2c\x5e\x9e\x1e\x49\x56\x3b\x68\x2f\x17\x9b\xfc\x52\x6a\xf2\x74\x92\xf6\x19\xa7\xc8\x8f\xa1\x82\xca\x52\x3c\x28\x44\x70\x63\x84\x08\x06\x23\xec\x8c\x2b\xe4\xdf\x80\xaa\x54\xad\x37\x64\xbc\x7c\xdf\x05\xb8\xd0\x81\x8b\x66\xfe\x0e\xda\x74\xc1\xa4\x47\x8c\x97\x0e\x10\x9c\x40\x21\x82\x1b\x23\x44\x30\x18\x21\xb1\x57\x0d\xc5\x94\xfb\xb1\x86\x8b\x52\x51\x2f\xaf\xe5\x4b\x88\xad\xd8\xf3\xd1\x1b\x93\x58\xde\x97\xd9\xd7\x55\xd0\x98\xe6\xb9\xf3\x37\x70\x63\x84\x08\x06\x23\x6c\x0d\xa3\x0e\x6f\xc9\xc9\xe6\x24\xbf\x42\x71\xad\x4d\xe4\xbe\xe8\xf6\xb3\xd3\x1c\xde\x37\xfe\xbc\x37\x2a\xa2\xb9\x49\x28\x62\xb0\xb3\xe1\xc3\x8d\x11\x22\x18\x8c\x90\xdd\x58\xca\x7b\x5a\x9b\x22\xaa\x9d\xd3\x8d\x74\xab\x86\xd4\xde\x23\x9e\x3c\xc2\x7b\xf4\x4f\x6e\x7d\x66\x10\x6f\x4c\xa0\x0a\x0d\x0a\x11\xdc\x18\x21\x82\xc1\x08\x5b\x17\x0e\x0d\x0a\xb7\x2d\xef\x6f\xfd\x4c\xd0\xad\x67\x65\x45\xc2\x2f\xba\x41\x5e\xa0\xdd\x95\xfd\x4e\x3d\x9e\x75\xbf\x9a\xbd\x39\x0a\x91\xff\x88\x11\xee\xb5\x32\xef\x86\x09\x83\x11\x36\xd6\x78\x7c\xfd\xa9\x7b\xdb\xde\xdb\xad\xbd\x56\x44\xd6\xe8\x49\x7f\x16\xcd\x42\xee\x58\xfc\xc1\xf7\xe7\xcf\xbd\x17\xfb\x95\x2f\x80\x42\x04\x37\x46\x88\x60\x30\xc2\x35\xee\x82\xaa\xd4\x9b\x12\x7a\xfc\x54\xab\xa1\x87\x32\x1f\x4e\x87\xa8\x49\x45\xbe\x59\x8c\xf0\x36\xa8\xbd\x40\x31\x65\x6a\xb1\xd3\xd1\x71\x63\x84\x08\x06\x23\xfc\x38\xac\x63\x4d\x57\x7f\xdd\x1f\x91\xf8\xbe\xcc\x9d\x77\x8c\xfe\x96\xbe\x9a\x7f\x29\xfd\x42\xdd\xa2\xca\x78\xd5\xc7\x19\x99\x9d\x4d\x25\x6e\x8c\x10\xc1\x60\x84\xd7\xac\xd7\x07\x2e\xa6\x15\x64\xdf\x50\xe3\xfc\xc8\x9c\xf5\x7b\xed\x61\x05\x49\x87\xe1\x12\x31\x53\xb4\x15\x1b\xdd\x39\x99\x14\x66\x14\x22\xb8\x31\x42\x04\x83\x11\x92\x12\x66\x0e\x7f\x61\x98\x20\xe3\x30\x1c\x69\x2b\x1d\x1b\xa4\x39\xfe\x76\xe0\xc0\xbc\xbd\xcb\x6f\xef\x50\xca\xde\xfc\xea\x30\x12\x14\x22\xb8\x31\x42\x04\x83\x11\xa2\xa9\xdf\xb9\x82\x69\xbc\x64\x3b\x9b\x0b\xcf\xbe\x24\xee\xd8\xbf\x81\x16\x70\x7b\xbe\x3d\xb3\x8f\xd1\xf7\x76\x95\x73\xa7\x8e\x15\x0a\x11\xdc\x18\x21\x82\xc1\x08\x6b\xdd\xd9\xa8\x85\x66\xcb\xd0\xa9\x6c\x38\x24\x6e\xf0\x44\x22\xc1\xd0\xa8\x44\x77\x42\xe0\xda\x6a\xc8\xdd\x0b\x0d\x5e\xaa\xd4\x28\x44\x70\x63\x84\x08\x06\x23\x9c\x6a\x0c\xbd\x7c\x33\x9c\x5d\x9f\x22\x84\x3f\xd6\xfe\x8d\xf4\xe4\x96\x28\x9a\xa8\xb9\x19\xcb\x68\xf0\xe3\xef\x9f\xd8\xcf\xd9\x57\x50\x88\xfc\x47\x8c\x70\xaf\xd9\x75\x37\x4c\x18\x8c\x50\x34\xba\xf6\x96\x59\xf6\xf0\x8f\xc9\xa6\x15\xbe\x99\x82\x0f\xb7\x2d\x1e\x3a\xc6\x64\x79\x5d\x3c\x79\xec\xf0\xd9\x73\xc0\xbc\x89\x10\x85\x08\x6e\x8c\x10\xc1\x60\x84\x23\xe2\x54\x89\xf7\xed\x1d\x0a\x65\x7e\x84\xcb\x47\xb6\xbe\x65\x3d\x98\xb0\xc5\xd1\xe6\xdc\x67\xdd\xf0\x3b\xb8\x14\xbe\x8c\xd8\x19\x5d\x70\x63\x84\x08\x06\x23\xec\xa2\xa8\xc9\x65\x5c\x92\xea\x57\x9c\x3e\xc3\xf0\x25\xe3\xa1\x22\xbd\x99\x90\xcf\x4d\x03\xc2\xb7\x16\xee\x11\x41\x11\x87\xcf\xd1\xa3\x10\xc1\x8d\x11\x22\x18\x8c\xf0\x3b\x69\x66\x1f\x92\xde\xb8\xfe\x5b\x32\x23\xf6\x89\xab\xf6\x93\x24\xb6\x38\xc7\xa6\xd0\xcb\x0c\x3d\xa7\x5d\xd7\xbc\xe3\xb3\x29\x51\x88\xe0\xc6\x08\x11\x0c\x46\xe8\xa2\x1f\xb6\x8f\xce\xf4\x77\xdc\xc7\x94\x01\xc2\x93\xb7\xf2\x6e\x5e\xca\x7a\x56\xf5\x37\x68\x70\xc6\x23\xae\x3c\x3e\xa7\x23\xd9\x0d\x85\x08\x6e\x8c\x10\xc1\x60\x84\xdf\x94\xf2\xbc\x86\x13\x9b\x34\xe8\xef\x9f\x7c\xab\xd4\x72\xe6\xe0\x5f\xc0\x13\xe2\xb2\x3f\x25\x80\xd1\xf2\x29\x10\x34\xd1\xd8\x19\xed\x71\x63\x84\x08\x06\x23\x1c\x61\x52\xec\x4f\x68\x18\xbe\xf5\xe9\xe9\xe8\xd4\xa4\x70\x90\xd3\x94\xb8\x7e\x80\xc7\xbb\xb9\x7c\xcb\x5a\x29\x9b\x20\x1b\x72\x46\x14\x22\xb8\x31\x42\x04\x83\x11\x3e\x27\x77\x1c\x12\x23\x2d\xd2\x7e\x61\x14\xa3\xa4\xae\x4e\xbd\x16\x19\xc1\x7e\xe7\xd5\xab\x8b\xd9\x3d\xfa\x91\x37\x17\x55\xf4\x69\x51\x88\xfc\x47\x8c\x70\xaf\xdd\xdd\x6e\x98\x30\x18\xe1\xad\x1f\xa9\xe1\xc6\x2e\xd9\x72\xdf\x43\xfc\x3f\x57\x07\x0e\x2b\x27\x84\x56\x50\xef\xef\x99\xbe\x27\xa0\x4e\xd1\x37\x85\x16\xed\x7c\x79\xb8\x31\x42\x04\x83\x11\x3e\xa4\xd5\xa0\x7e\x27\xad\x19\xa1\x79\xfb\x21\x7f\x65\x81\x54\x4e\xd6\xd1\x94\xd3\x13\xdf\x7e\x4c\x87\x7d\x92\x56\x8e\x54\x39\x75\x1a\x85\x08\x6e\x8c\x10\xc1\x60\x84\xb1\xa8\xce\x9d\x81\x28\x70\xea\xfb\x30\x72\x97\x75\xfb\xa5\xa4\x53\x92\x52\x79\x0d\x75\xc5\x60\x84\x91\xc3\x76\xda\x7b\x06\x7b\x14\x22\xb8\x31\x42\x04\x83\x11\x3a\x71\x5e\xea\x63\x1c\xa9\x72\x0f\x2d\xfb\x31\xf4\xce\xe7\xc0\x5c\x65\xc5\x72\xca\x89\xee\xa3\x97\xd0\xcc\x4f\x6a\xc3\xad\x34\x3b\x5f\x1e\x6e\x8c\x10\xc1\x60\x84\xaa\xfb\x46\xd7\xcc\xb4\x5e\x5c\x4e\x29\x0d\x6a\xb8\xf6\xbd\x8d\x61\x89\xe7\x66\xc2\xa5\x08\xcf\x55\xf4\x23\x9d\xa0\xef\xb5\x82\x33\x28\x44\x70\x63\x84\x08\x06\x23\x64\x93\x29\x70\x96\x26\x72\x1e\x61\x45\x1d\x0e\xde\x9b\x7d\x7d\xcb\xcb\xbc\x8c\x50\xf1\xa8\x69\x10\xf7\xd6\x11\x63\xf7\x5e\xb3\x9d\x49\x01\x37\x46\x88\x60\x30\x42\x7a\x8d\xa6\xf7\x1f\x45\x06\x6f\x46\xcf\x1a\xd5\x29\xb4\x68\x79\xb8\x1e\x8c\x56\xfb\x18\xd1\x92\x42\xf8\xc3\xdb\x96\xfc\xcf\x3b\x5d\x14\x22\xb8\x31\x42\x04\x83\x11\x5e\xe4\x4b\x2c\xeb\x68\x38\x72\xa3\x6b\xf8\x34\xf3\x6b\xba\xbb\x56\xd5\xda\x46\x17\xb8\x9e\x59\x6e\x25\x57\xbe\x78\xe0\x3b\xd6\xe2\x8e\x42\xe4\x3f\x62\x84\x7b\x9d\x7f\xec\x86\x09\x83\x11\x16\x48\xbd\x4f\x19\x3f\x57\xe8\x1c\xb5\x64\x50\x95\x75\xec\x4f\xb4\xf2\xf1\xcc\xe6\x10\xfb\x48\xa9\xc5\xa7\x7a\x2c\x40\x36\xf5\x28\x0a\x11\xdc\x18\x21\x82\xc1\x08\x4f\x33\x39\x5d\xb0\xd7\xce\x1d\x10\x6d\xe7\xa7\x22\x11\xfd\x2d\x62\x4b\x57\x64\x9f\x98\xc5\xff\xfa\x57\xe2\xaf\x38\x96\x16\x4f\x2e\x14\x22\xb8\x31\x42\x04\x83\x11\x9a\x4b\x86\xb0\x75\xf3\x18\x2d\xab\xcc\xfd\x54\x09\xe5\x7b\xab\xb0\xf2\xe2\xe2\xed\xa2\xe9\xeb\x6f\x4c\xaf\xa4\x3e\x0a\xba\xc0\xb3\xb3\x32\xe1\xc6\x08\x11\x0c\x46\xb8\xd5\x20\xde\x2b\x39\x6a\xdd\xf2\xe1\xca\xc1\xcf\x8b\xe1\x46\xaf\xbb\x45\xdc\xf5\x8d\x52\x7e\xb2\x6f\x6a\x94\xd7\xb6\x9d\x3a\xb0\xf3\x39\x70\x63\x84\x08\x06\x23\x1c\xa6\x3b\xfa\x21\x97\x44\xe2\xb2\x53\x90\x57\x8e\xf0\x11\x92\x16\x9b\x38\x13\x62\x1f\xb7\xf2\xed\x55\x92\x9c\x5a\xb2\x2b\xbc\x4a\x28\x44\x70\x63\x84\x08\x06\x23\xbc\xb7\x56\xa1\x66\xea\xee\x99\x58\xc0\xf6\xe0\x5e\x2c\x17\x6b\x85\xfc\xf6\x6b\xaa\xb7\xf5\xa1\x43\x31\xd1\x01\xae\x6d\xe4\x5b\xdc\x28\x44\x70\x63\x84\x08\x06\x23\x3c\xb9\xc8\x45\xff\x42\xf6\x1d\x57\x2e\xe3\x13\xb5\x17\x33\x01\xa3\xde\xae\x56\x3f\xc8\x57\x17\x6a\xce\x5d\x3d\x56\x2a\xea\xae\xa0\x82\x42\x04\x37\x46\x88\x60\x30\xc2\x0b\x6e\xef\xd7\x9f\xb6\x6a\x3d\x7e\xee\x42\x76\xda\x2e\xde\xce\x64\x5d\x7b\x58\x57\x04\x49\xba\xf5\xf7\x90\xb6\x15\xf8\xaa\xbe\x33\x12\xff\x47\x8c\x70\xaf\x13\xc2\xdd\x30\x61\x30\x42\xa4\xaa\x7b\x6d\x7a\x54\xff\x77\xf9\x08\x5d\x97\xd3\x61\xb9\x27\x33\x07\xca\xa9\x83\xec\x17\xee\xfa\x67\xe6\x4a\x5c\xa6\x08\x95\x43\x21\x82\x1b\x23\x44\x30\x18\xa1\x3b\xed\x6c\xbc\x7d\x17\x59\x9e\x8f\x74\x96\xef\xc4\xab\xa7\x9b\x23\x62\x4f\x39\xbd\xab\x0e\x35\xc1\xeb\xa1\x6e\x3c\x41\x53\xa6\x28\x44\x70\x63\x84\x08\x06\x23\xdc\xc7\x3a\x3c\x02\xa7\x3f\xe4\x9a\xb9\xf9\xaf\x2d\xa9\xcf\xad\x8f\x51\x5f\x4a\x6f\x91\x30\x9e\x74\x28\xbb\xf3\x9a\xc1\x44\xcb\x06\x85\x08\x6e\x8c\x10\xc1\x60\x84\x06\x4a\xe2\x61\x21\x15\x74\xc6\xeb\x4c\x81\x4d\x47\xeb\xa4\xaf\x87\x86\x2b\x35\x59\xd8\x29\xe4\x59\xfe\xac\x96\x56\xfb\x43\xb5\x33\xba\xe0\xc6\x08\x11\x0c\x46\x98\xde\xc0\x42\x96\xa6\xc3\xdc\xa8\x3b\x7a\xee\xfc\xe0\x6c\x59\x3d\xfc\x2a\x43\x3d\xf5\x4b\xb0\xb4\x4f\xa4\x6f\x64\xdf\x81\x11\x71\x14\x22\xb8\x31\x42\x04\x83\x11\x9e\x61\xee\x66\xcc\x78\x9e\x41\x1b\xfb\xd5\xc0\xbb\x2e\xb1\x80\xe7\x78\x3b\x7d\xf1\x2f\xba\xb9\xba\x1b\x05\x4d\xbc\x36\x41\x2f\x77\x46\x7b\xdc\x18\x21\x82\xc1\x08\x6d\x32\x3b\x84\xfc\x33\xdc\x6d\x58\xf8\xd9\xe3\xf5\x7e\xbf\xd5\xff\xc8\x45\x2d\xe4\x4a\x4a\x4b\x19\xdc\xee\x54\x2f\x8e\xf4\xed\x4c\x0a\xb8\x31\x42\x04\x83\x11\x12\xf4\x8d\x75\xf5\x37\x5e\xf5\xb8\x26\xdb\x9c\x43\xd7\x9b\x23\x5b\x81\x8e\x65\x7a\x4a\xfb\xea\x06\x45\xf3\xac\x4a\x2d\x98\xeb\xa3\x10\xf9\x8f\x18\xe1\x5e\x67\xe8\xbb\x61\xc2\x60\x84\xca\x52\x93\x84\x4e\xbc\xde\xbf\x98\xd5\xc9\xc5\xe4\x9f\x5c\xce\xbd\x11\x99\x65\x18\xb1\xb6\x3d\x28\xe0\xb4\xe8\xe4\xea\xa3\x47\x80\x42\x04\x37\x46\x88\x60\x30\x42\xc6\xf4\xa7\xd4\x93\x01\xbc\x0b\xe3\x1b\x5b\xb6\x1b\x51\xa2\xfe\x3a\x0d\xd7\x83\xf3\xe7\xd5\xce\xdd\x24\x3f\x22\x2c\x6c\xd1\xb5\x33\x1e\xe1\xc6\x08\x11\x0c\x46\xf8\xc0\x66\x7f\xaa\xee\xc0\xe0\x59\x0d\x3b\x2e\x6a\x7a\xd7\x7e\xee\xc2\x47\xac\x2e\x83\xba\xa9\x6b\xdb\x97\x6b\xe8\x5d\xbf\x6a\xec\x34\x05\xdc\x18\x21\x82\xc1\x08\xc5\xa7\xff\x88\x75\xdc\x6f\x94\xf2\x32\x31\xf5\x2f\x94\xc9\xd2\xfd\x1e\x28\xf2\xeb\x0f\x59\x68\x8f\x51\x27\x1d\x91\x89\xff\xa8\x10\x0a\x11\xdc\x18\x21\x82\xc1\x08\x21\x69\xaf\x93\xc0\x37\x38\xce\x97\xfe\x51\xe4\xad\xaa\xf7\xe1\xda\x4d\x45\x03\x8b\x2f\x7d\x54\x5c\x8b\xa5\x0b\x3c\x8f\xef\x30\xa3\x10\xc1\x8d\x11\x22\x18\x8c\x50\xe3\x21\x81\xba\x88\xa6\x26\xb7\x6c\x45\x98\xd3\x87\xbc\x1b\x89\x24\x76\x8a\xa9\x30\xf6\x7c\xb1\xf8\x07\x37\x3d\xb2\x0e\xd9\x9d\x8e\x8e\x1b\x23\x44\x30\x18\xa1\x8f\xff\xb5\x57\xba\x0f\xc9\x7b\x7f\xbc\x4d\xd0\x4d\x5c\xaa\xcf\x45\x89\x5b\x46\x24\x09\xe2\xcb\xb5\x33\x0d\xed\x1c\xcc\xe6\x4c\x50\x88\xe0\xc6\x08\x11\x0c\x46\x68\xaa\x67\x1f\xde\x46\xe8\x3c\xf1\xed\xb2\x64\xff\x39\x19\x57\xb9\x63\xfb\x29\x74\x0b\x47\xfb\x14\x42\x59\x98\xee\x6c\x37\x25\xed\xbc\x57\xff\x11\x23\xdc\xeb\xd7\x82\x98\xcb\xbe\x6e\x0d\x17\x9d\x41\x8a\x20\xf4\x54\xcc\x6b\xad\xa7\xf9\xb6\x99\x6b\xcc\xb6\xc0\xcc\x30\x8a\x7d\xfa\xf8\xdf\x79\xfa\x20\xca\xbc\x7f\x4a\x55\xdd\x26\x23\x78\x6f\xe7\xf2\x86\x1e\x2d\xb6\x3f\xd6\x1c\x97\x98\x25\x78\xb1\x32\x54\x55\x3a\xe5\xc8\x40\x94\x41\xc8\xff\xc3\xde\x7d\x47\xeb\x70\xb5\x0f\xe3\x77\x86\x70\xa2\x77\x6e\x44\x8d\x16\x7d\x2a\xa2\x93\xe8\x9d\x20\x08\xd3\x7b\xdf\x53\x09\x6e\x25\x7a\xf4\x96\x88\x12\xa2\x47\x88\x10\xbd\x45\x0b\xa2\xb7\x20\x4a\x44\x27\x7a\x89\xfa\x5b\xe7\xfb\xfc\x3c\xef\x59\x77\xde\xb5\xce\x73\x67\x7d\xe7\x8f\x77\xad\xe7\x2f\x96\x75\x99\x33\x67\x66\xef\x6b\xf6\xbe\xf6\x9e\xf9\xbc\x37\xf8\x49\xba\xd0\x78\xd9\x7e\x59\xf3\x3c\xdd\x57\x6a\x77\xae\xd4\x7a\xcf\x16\xce\x6d\x09\xda\x1c\xe8\xf8\xe7\xa7\x15\x73\x74\xba\x15\xe4\x0c\x6f\x1f\xfb\x23\x5d\x68\xe1\xba\x60\x4f\xb5\xfa\xfb\x16\xae\x7e\xb1\xf3\xe0\x6d\x22\xfb\xbd\x6a\x65\xdf\xca\xd4\x7d\xd9\xcf\x2f\xbf\xe8\x7b\x4d\xad\xfb\xe3\xbc\xda\xe9\x3f\x90\x7a\x78\x48\xbe\x4c\xb1\x0e\x7b\x89\x94\xf3\xbf\x62\xf2\xe7\x3f\x37\xf2\x5e\xed\xbe\x73\xe5\xe4\xd0\xd2\x79\x17\x63\xfd\x2c\x3b\xfd\x51\x53\xcf\xcd\xfc\xb0\x88\x36\xd6\xbd\xbf\x31\xf5\xb8\xb3\x85\xbf\xb9\xbe\x7d\x5b\xad\xed\x84\xdf\xc7\x6f\xbd\x47\xf5\x0b\x04\x02\x4a\x17\xda\xac\x66\x93\x1f\x83\xf6\xd9\x7e\x7a\xf8\xa4\xc9\xef\x53\xb0\x2f\x4f\x0d\x09\x4e\x54\xcb\x3c\xe7\xab\xe2\x1f\x17\x7f\xd4\xf0\x55\xc9\xaf\xef\xa4\x0b\xad\x4d\x5e\xff\x7e\x1d\x71\xb7\x5a\xb6\xd3\x5d\xc4\xdc\xa3\x52\xce\x3d\x3b\x3c\x7c\xf2\xcd\x23\x4c\xf7\xdd\xcb\x73\x90\x97\xab\x0d\x1e\xf0\xef\xc5\xbe\x8c\xae\xea\x9b\x8c\x96\x80\x11\x0e\xfc\xbc\x70\xe1\x76\x07\xbb\xd3\xf5\x67\x15\xf9\x61\xcb\xd5\xd3\xce\x4b\x66\x74\xfe\xec\xd5\xeb\x94\xcd\xdd\x66\xec\xe5\xaf\x47\xcc\x6b\x1b\x8f\x41\x49\x63\x84\x50\x02\x46\x58\xb3\xe8\xdb\x97\x3b\xbe\xdd\x86\x9e\x4a\xbc\xfe\x05\xbe\x2d\xa9\xb3\xb2\xd6\x1b\x82\x2e\x6b\xfa\xa5\xdf\x78\xd7\xa3\x2b\x83\x1b\xa5\xc4\x63\x50\xd2\x18\x21\x94\x80\x11\x3e\x3b\x58\xef\xcb\x8b\x6b\xaa\x77\xee\x24\x20\x25\xed\x85\xbb\x6e\xaa\x83\x37\xed\xc8\xde\xa9\xe1\x93\xc7\xa3\x9b\x2e\xee\xbd\xc4\x2b\x15\x8f\x41\x49\x63\x84\x50\x02\x46\x38\xfa\x74\xab\xcb\x6b\x1b\xbc\x4e\x51\x72\xdd\xbd\x36\xa0\xf3\xaa\x13\x36\x52\x2a\x6f\x85\xe7\xc6\xcf\xb5\xdb\x7c\xb3\x04\x9b\x3b\xb4\x51\x3c\x06\x25\x8d\x11\x42\x09\x18\xe1\x93\xa7\x7f\x1d\x3c\x37\x3a\xfe\xcd\xe3\xb1\x0d\x9d\x02\x97\x26\x4f\xfc\x60\xc5\x9d\xd9\x31\xf3\x39\x1f\xe4\x1a\x75\xb1\x58\xdf\x77\xdf\x8d\xc7\xa0\xa4\x31\x42\x28\x01\x23\x2c\x35\xdd\xdd\x68\x96\xbe\x52\xa4\xfb\xde\x1a\x7f\x75\xeb\xbe\xa0\xde\xc9\x92\x73\x24\x43\x9d\xf3\xdb\xcf\x87\xba\x94\x5e\xbd\xbb\x4a\x81\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\xda\xf3\x2f\xf5\x9c\xbd\xe6\x8b\xbf\x7e\x7f\x16\x9f\x8e\x7c\xfc\xd7\x8e\xf6\x3f\x48\x2b\xaf\x75\x6c\x59\x6e\xbe\x59\xf4\x9b\x5e\xd5\x6a\xe5\x88\xc7\xa0\xa4\x31\x42\x28\x01\x23\x3c\x75\xf7\xd0\x6a\xa7\x6a\x6a\xee\xd7\x03\x32\xd7\x29\xbf\x6d\xc9\xaa\x85\xee\x93\x76\x18\x7c\xa0\xf0\xc9\xb0\xe0\x25\xae\x75\xbc\x72\x3c\x06\xfd\x43\x8c\x30\xa3\xbc\xf3\xa6\x33\x25\x60\x84\xd9\xae\xf5\x9a\x93\xf7\x5e\xeb\xfa\xc7\x4b\x77\xb3\x87\x5d\xd3\xff\xc8\xf1\xba\xdd\xc8\xfd\x5f\xf5\x2e\x3d\xc3\xbe\x37\x56\x19\xe0\xe2\xf1\x18\x94\x34\x46\x08\x25\x60\x84\xf8\x07\x27\x26\x57\x9a\x8e\x5b\xdd\x17\x7c\xbc\x0b\xae\xc1\xdf\xca\x97\xfb\x88\xce\xcd\x4c\xfd\x74\x49\x9f\xd2\x53\x0b\x1d\x59\x90\x36\x0e\x4e\x1a\x23\x84\x12\x30\xc2\x89\x5d\xe2\x35\xba\x14\xc9\x04\x9b\xf3\x8e\x4d\x5c\x71\x2e\xa5\xc5\xa1\x7d\xe3\x2e\x3f\xdc\x6b\xfb\x87\x9b\xa6\x2c\x09\x86\xac\x2c\x1b\x8f\x41\x49\x63\x84\x50\x02\x46\xb8\xe1\xc2\xa4\x46\x9d\x3a\x34\xa8\xdc\xb6\xdd\x9f\x53\x0b\xf7\x2c\xb9\x46\x6c\x05\xf4\xd1\x03\x5a\x95\x80\xb4\xb1\xe3\x7b\xce\xc8\x2d\xc6\x63\x50\xd2\x18\x21\x94\x80\x11\xde\x11\xfa\x5d\x1d\x5a\x62\xff\xee\xf7\x9b\x2d\x9b\x7a\x64\xc5\x8a\xf5\xa3\x76\x4c\xb9\xf7\xd5\xae\xfe\xd0\xd5\xfb\x17\x8c\xe5\x73\x0e\xd6\x89\xc7\xa0\xa4\x31\x42\x28\x01\x23\xdc\xd2\x3e\x4f\xe7\xe1\xe4\xd5\xf5\x5b\x7a\x7c\x5e\xf2\xc1\x86\x0a\xc4\xa4\xbd\xbf\xdf\x64\xd7\x9f\x3e\xb1\x73\x71\x1f\x93\x1f\x3a\x3a\xad\x11\x26\x8d\x11\x42\x09\x18\xe1\xfa\xf6\x97\x67\xff\x64\x6f\x5f\x71\x9b\x9c\x7e\xa3\x7c\xd5\xb9\xf2\xb0\x0f\xf6\x8d\x2f\x71\xf1\xf4\x82\x63\x4b\x7e\x59\x99\x7b\x5e\x9d\xb4\x61\x67\xd2\x18\x21\x94\x80\x11\xf2\xf8\xb3\x2f\x67\x75\x1b\xdb\xe0\xed\x06\x6d\xf8\xb9\x59\x1f\xce\x1d\xfc\x62\x78\xa3\xac\x1f\x14\xc8\x3e\x7d\x55\xf1\x3f\x8b\x37\xf2\xd2\x86\x52\xff\x10\x23\xcc\xe8\xc9\xfc\xa6\x33\x25\x60\x84\xed\x6a\x56\x6e\xb9\xe4\xa7\x2a\xcb\x7f\x98\xd3\x2a\xe5\xdd\x09\x7b\x5b\xe7\xee\xb1\xe2\xb3\x0d\xdb\x7b\xfc\x11\x7b\x38\xbd\xe5\xbe\xb7\x46\xa6\x65\xc2\xa4\x31\x42\x28\x01\x23\xbc\xb1\xc1\xd8\x51\xbd\x7f\x8f\xbb\x44\xcd\xdd\xe8\xfe\x5e\x53\x2a\x6f\x4b\x69\x2a\xb6\x1e\x5a\xfd\x58\xe9\xed\x5f\xf5\xba\xd8\x71\x57\xb9\x78\x0c\x4a\x1a\x23\x84\x12\x30\x42\x39\xd7\x9f\x97\xcb\x38\x55\x3e\x7b\x3b\x7b\xec\xe2\xb9\x5e\xd4\x29\xb2\x40\x0b\xac\x2f\xda\xa5\x4d\x76\xf1\xc1\x97\x2b\x9b\x7f\x94\x36\x19\x4b\x1a\x23\x84\x12\x30\xc2\xb6\x2d\x3b\xa4\xf6\x78\xf7\x83\x4f\x7e\xca\x59\x61\xde\xf3\x0b\x07\x0a\xdc\xb9\x5e\xad\xdd\x2f\xd0\x6f\xdd\x7c\x99\xfa\x73\xe6\x49\x9e\x8b\xc7\xa0\xa4\x31\x42\x28\x01\x23\xfc\xa2\xd8\xa4\x96\xe1\xed\x51\xeb\xab\x3c\x3f\x21\xdf\x6e\x5d\x22\x6c\x8d\x67\xba\x3c\xf3\x56\x93\xad\x75\xaa\xde\x2a\x82\x9c\xcb\x51\x24\x1e\x83\x92\xc6\x08\xa1\x04\x8c\xf0\x49\xcd\x5a\x75\xa6\xe7\xed\xbe\xab\x47\xfe\x7e\xdb\xb6\xed\x1b\x6a\x3e\x68\x57\x28\xf7\xda\xe3\x76\xb6\xf9\xb9\xe2\xcc\xb4\xaf\xdf\x2b\x1f\x8f\x41\x49\x63\x84\x50\x02\x46\x78\xbb\xe3\xa5\x3f\x2a\x15\x3e\xf2\xdb\xee\x6f\xc2\xba\xa3\x77\x67\xae\x7f\x6b\xc2\xcb\xd8\xfe\xfc\x52\xb3\xa7\x3f\xbc\x1e\xbf\xbc\x57\x9d\x58\x3c\x06\x25\x8d\x11\x42\x09\x18\x61\x9e\xac\xc7\xda\xaf\xd4\x96\x67\xbe\xb9\x62\x62\xf6\xf7\x1a\xe6\x5a\x3a\xf3\x23\x74\xce\xf4\xf6\xbf\xc2\x63\xdb\xf4\x28\x25\xd8\xe3\xba\xc4\x63\xd0\x3f\xc4\x08\x33\x1a\xbb\xbe\xe9\x4c\x09\x18\xe1\xf2\x01\x99\x27\xfd\x28\x2d\x1a\xd5\x2a\x7f\xf6\x0a\x95\x47\x64\x9e\x59\xb2\x27\x3b\xac\x24\x99\xba\x7d\x05\xf4\x53\xc1\xc2\xa3\x6e\xbf\x1f\x8f\x41\x49\x63\x84\x50\x02\x46\x48\x7d\x9e\xed\x6d\xf2\xf5\x9e\x0e\x85\x2e\x9e\xca\x34\xef\xa4\xbc\xb2\xb0\xf9\x35\xbf\x8d\xab\xd5\xb9\xe0\xcd\xa6\xa9\xa7\x36\x60\x4d\xe3\x31\x28\x69\x8c\x10\x4a\xc0\x08\xef\xf5\xd6\x56\xe5\xff\x12\x5d\x55\x3e\xd7\x96\xd5\xb9\x7b\xbc\x7f\xfe\x1b\x91\x9d\x82\x3f\x2e\xdd\xf7\xf8\xe4\x82\xf3\x27\x84\x27\xd3\xb2\x54\xd2\x18\x21\x94\x80\x11\xea\xf5\x47\xe6\x61\xda\xaf\xb1\xcd\xea\x0d\x58\x03\x59\xd6\xf2\x87\xcf\x49\xee\x5c\xb5\x31\x45\xce\xe7\x78\xd1\xf6\xe2\xf5\xfe\xdd\xe3\x31\x28\x69\x8c\x10\x4a\xc0\x08\x8b\x77\xcd\x7f\xef\xe4\xbd\xec\xe7\x47\xf5\x3f\x77\x61\x6e\x05\xb1\x6b\xde\x91\xd5\xe6\x77\xfd\x31\xd7\x9a\xc1\x5b\x9b\x0d\x7c\xfe\x9e\x9d\xd6\x61\x93\xc6\x08\xa1\x04\x8c\x70\xde\xb1\x83\x2b\x1f\xaf\xfc\x7e\x5b\x91\x03\xea\x9c\xe0\xd2\xa0\xf7\xb6\xfc\xd4\x51\xb8\x55\xa8\xec\x68\xa8\x4e\xf3\x2f\x52\xee\x4f\xe7\xe3\x31\x28\x69\x8c\x10\x4a\xc0\x08\x5b\xaf\xde\xd7\xfc\xf9\xf9\x8f\x26\x0d\x85\xea\x0c\xf9\x33\xef\xed\x92\x2f\xdb\xd4\x9b\x92\xb5\x40\x8d\x11\x15\x9a\x4c\x98\x34\xde\xfe\xab\x67\x3c\x06\x25\x8d\x11\x42\x09\x18\x21\x5a\xed\x87\x77\x78\x63\xe1\xd5\x3d\x79\x4f\x73\x5d\xd7\x4c\x6d\x32\x68\xbe\x92\x79\x48\x93\x46\xaf\xbe\x2c\xf7\xf1\xb2\xec\x9d\x1a\xb2\xf1\x18\xf4\x0f\x31\xc2\x8c\x66\x77\x6f\x3a\x53\x02\x46\xd8\x62\xef\xcd\xb2\x95\xbe\xfb\x36\x6b\x4d\xf6\xf2\x99\x43\x7d\xaf\xfd\xbc\x9c\xd9\xda\xeb\xdb\x1d\x75\x57\x2e\xaf\xb6\x06\xaf\x77\xe8\x50\xd5\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\x22\x53\xef\xe2\x1d\xbe\xac\x96\xfa\xc9\xb1\xd2\x3d\xdb\x0f\xc9\x03\x17\xff\x74\xf8\x77\x5d\x7f\x42\xe1\x12\xa7\x2b\x65\x6d\x43\xaf\xaa\x11\x8f\x41\x49\x63\x84\x50\x02\x46\x78\xa0\xda\x5f\x5f\xec\xef\x7a\xed\x56\xf5\x1a\x75\x8a\x4c\x98\x55\xe7\x30\x7e\xbd\xd7\x9c\x47\x43\x8e\x67\x86\x95\x1d\x27\xf2\xdd\xe9\xdf\x20\x1e\x83\x92\xc6\x08\xa1\x04\x8c\xb0\x29\xd6\xb2\x8f\xd8\x00\x7c\xf2\xce\xfa\x8d\x25\xd7\x35\xcb\x37\xb1\x6e\xec\xc2\xc8\x22\x59\x5f\x0c\x2d\xd7\xae\xd6\x5c\x68\x5d\xdb\x5e\xf1\x18\x94\x34\x46\x08\x25\x60\x84\x2f\x8e\x96\x5e\x35\xeb\xcc\x67\x9d\x26\x4c\x5b\xf4\x78\x61\x6a\xe7\x65\x27\x46\x74\x6a\x85\x8d\x2d\x44\x6e\x43\x6f\x17\xda\xd4\x7c\x5c\x5a\x52\x48\x1a\x23\x84\x12\x30\x42\x68\x62\xf1\x4a\x97\xaf\x35\xee\x8e\x4d\x5c\x3b\x9b\x6f\x76\xb5\xeb\xe3\xc5\x43\x4b\xe2\x63\xde\x55\x0e\x35\xbf\x96\xed\xd4\xec\xd6\x6f\xc7\x63\x50\xd2\x18\x21\x94\x80\x11\x7e\xcc\x1c\x7a\x5e\xa9\x70\xf5\x67\x3d\xaa\x40\x79\x9b\xd5\xeb\xfb\xe2\xc1\xdd\x5f\xbf\x98\x39\x49\x9d\x91\x79\xff\xb8\xfe\x47\x16\xbf\x30\xe3\x31\x28\x69\x8c\x10\x4a\xc0\x08\x53\x0f\xf4\xa6\x9f\xdf\xff\xfc\x79\x91\xbd\x9f\x3a\xfe\x4f\xe0\xe7\x59\xd5\xca\xff\x52\x36\xd3\xdc\xdb\xf5\xa7\xf2\x77\x8f\x4d\x6c\x50\x37\x1e\x83\xfe\x21\x46\x98\x51\xfd\xe3\x4d\x67\x4a\xc0\x08\xef\x31\x6f\x17\x3c\xa3\x51\x27\xae\x4e\x6b\xb0\x74\x63\xd5\x43\x0b\xdf\xd1\xfa\x1d\x6e\x11\xec\x2f\xf9\xed\x8e\x1f\xab\xff\xd4\x6e\x64\x6a\x3c\x06\x25\x8d\x11\x42\x09\x18\x21\xe8\x56\x74\x56\x6b\xf9\x5e\xc1\x52\x83\xde\xad\xb0\xea\x4e\xad\xd4\xdf\x1b\xf4\xae\xf9\xf5\x97\x35\xd7\x57\x98\xff\xb0\xc8\x98\x05\x5e\xfe\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\xe6\xd6\x82\xdd\x53\xf7\x2f\x1d\xef\xd5\x39\xbb\xef\x93\xba\x4c\xb5\xde\xd5\xef\x61\x99\xab\xed\x3c\x30\x18\xff\xb4\xf5\xe4\x86\xe3\xb3\xc6\x63\x50\xd2\x18\x21\x94\x80\x11\xd6\xab\xde\x7d\x7d\xa9\xd5\x03\xa4\xa7\xbf\x8c\xef\x7a\x6f\xd9\xe1\x82\xed\xbf\xdf\x9e\x85\x69\xfc\xc3\x9f\x65\x91\xd4\xea\x05\x66\xcc\xb6\xe2\x31\x28\x69\x8c\x10\x4a\xc0\x08\xb3\x6d\x1d\xbc\x6c\x3f\xf3\x70\xc2\x5e\xab\x68\x81\x71\xf3\x36\x7d\xb4\xf9\xca\xb0\x36\x2b\x57\x1f\xcc\x5f\xff\x2f\x71\xe1\x99\xcd\x43\x99\x78\x0c\x4a\x1a\x23\x84\x12\x30\x42\x75\xee\x94\xc6\x83\xde\x6f\xb5\x7b\x6c\xf9\xcb\xf2\xf9\xa7\xcb\x6f\x5c\xfd\x7e\xc6\xe6\x63\x7f\xcd\x59\x0a\x2a\xef\xb8\xdc\x77\x72\xbf\xea\xf1\x18\x94\x34\x46\x08\x25\x60\x84\x27\xb2\x3e\xaf\xab\x9a\xd7\xd4\x79\x4f\x17\xdd\x38\x5b\x6c\xff\x85\x91\x9d\x73\xa7\x74\xfb\x71\x6f\x8d\x8e\x3d\x9a\xbc\x7a\xb1\x7a\x41\xf6\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\xae\x5b\x77\x69\xd9\xea\x5f\x3d\xd3\xa8\xd6\x53\xae\xde\x72\x38\x96\x69\xe5\x3d\xfc\xf9\x01\xa4\x6d\xe5\xc5\xc3\x3e\xd9\xf3\x6b\xce\xae\xf1\x18\xf4\x0f\x31\xc2\x8c\x2a\x84\x6f\x3a\x53\x02\x46\xf8\xfc\x87\xc2\xe3\x96\x2b\x07\x6f\x0c\xf2\x36\xcf\x6d\xba\x35\x97\x37\xcb\xfe\xed\xc1\x1a\xb6\xd7\x1c\xa4\xea\xc3\x4d\xe3\x8e\x66\xeb\x1b\x8f\x41\x49\x63\x84\x50\x02\x46\x38\x74\x50\xb6\x2e\x1f\xab\x13\xd8\xb1\x4b\x1e\xe8\xb1\x4d\xcd\xf3\xb6\xf9\xb5\xfe\x65\xa6\xfd\x98\x5c\x2b\xf6\xf4\xcc\x77\x71\x0f\x28\x15\x8f\x41\x49\x63\x84\x50\x02\x46\xb8\xab\xfa\xdd\xcd\xee\xc0\xb1\xfc\xa1\x62\xdb\xb7\x84\x15\x4a\x6c\xcc\x82\x14\x38\x79\xe8\xe4\xd8\x32\xed\xd7\x1f\xd9\xbf\xb6\xe7\xdc\x6c\xf1\x18\x94\x34\x46\x08\x25\x60\x84\x93\x6f\xbe\x9a\xf9\xfb\xc8\x85\x17\x15\xff\x18\x19\x0e\x2e\xf4\xdb\xec\x71\xf3\x27\xba\xa5\xbb\xa1\xc3\x37\x6c\x1c\xd3\xb7\x51\x26\x29\x1e\x83\x92\xc6\x08\xa1\x04\x8c\xb0\x3b\xf3\xbd\xbc\x55\xca\x72\xb6\xc6\xfb\xe2\xee\xcf\x1a\x0f\x5e\xd5\x75\xf3\x16\xa1\x60\x99\xf7\x67\xf5\x7a\xd4\x71\x66\x0a\xdb\x87\x8a\xc7\xa0\xa4\x31\x42\x28\x01\x23\x4c\x2d\x83\x9c\x3d\x57\x9f\xba\x9c\xe5\xeb\x3e\xdd\x1b\x7f\x9b\x75\xfc\x14\xe3\x48\x95\xcc\xfb\xd7\x95\x17\x8f\x2f\xdc\xb4\x42\xbd\x46\xc6\x63\x50\xd2\x18\x21\x94\x80\x11\xb6\x79\x38\xf7\x97\x58\x83\x3e\x4b\x6f\xb4\x1e\x73\x7d\x41\xa5\x8b\x93\xbb\xb5\x3b\xb6\xfa\xc4\xc0\xf3\x70\xf7\xa9\x13\xa7\x5c\xbd\xd7\x28\x2d\xf1\x24\x8d\x11\x42\x09\x18\x61\x29\xae\x6d\x99\xb6\x87\xfa\xbf\xee\x93\xed\x48\x89\x81\x7f\xee\x9f\x9b\x6b\xdf\x6f\x99\x77\x86\xab\x7a\xcd\xab\x3d\xe5\x50\xdc\x18\x9f\x76\x3f\xfe\x21\x46\x98\x51\x0d\xfd\x4d\x67\x4a\xc0\x08\x87\xe7\x2d\xb2\x31\x57\x83\x27\x99\x17\xe8\x77\xef\x8f\xef\x84\x64\xed\x57\xb5\x64\x96\x5a\xf7\xc8\x12\xda\xbd\x59\x7d\x8e\xac\xe9\xf1\x6e\x3c\x06\x25\x8d\x11\x42\x09\x18\xe1\xef\x71\x96\x79\x75\x8a\xfe\xfd\x64\x96\xd6\x25\xf2\xb6\x5d\xfb\xd6\x3e\xf1\xfe\x3a\xb1\xc9\x8e\x5c\x65\x3b\x57\xda\x5e\xf3\xf4\x8b\x86\xf1\x18\x94\x34\x46\x08\x25\x60\x84\xf1\x9b\x79\x46\x16\xbe\x74\xaa\x70\xd9\xe2\xf5\x4e\xeb\x8d\x1f\x57\xd9\x78\x77\x07\xc9\xf6\x9f\x99\xbf\x46\x7d\xea\xe1\x81\x26\xa4\x10\x8f\x41\x49\x63\x84\x50\x02\x46\x78\xb8\x68\x99\xaf\x9f\x74\xec\xd8\x82\xb9\xf4\xfe\xb7\x6f\xdd\xf9\x79\xfa\x2c\x7f\xd7\xe8\x61\x23\xbe\xb9\x3f\xe4\x50\xaf\x07\x1b\x7e\xed\x5e\x29\x1e\x83\x92\xc6\x08\xa1\x04\x8c\xb0\xf1\xb8\xa6\x77\x66\x3e\xdd\x54\x6a\xd4\x89\x16\xbb\xc2\xdc\x6d\x2e\xf6\x58\xfc\x5e\xe9\xdb\x67\x2b\x15\x2c\xb8\xf0\xe1\xa9\x53\xbf\x1c\x6d\x12\x8f\x41\x49\x63\x84\x50\x02\x46\xb8\x55\x3f\x7f\x6d\xfc\x41\xe4\xad\x2e\xf5\xc7\x7d\xb3\x63\xd9\xdb\x33\xf7\x97\x9c\x71\x35\xd7\xed\xa3\x9f\x9e\x3b\x38\xf1\x8b\x32\x39\xaf\x14\x8c\xc7\xa0\xa4\x31\x42\x28\x01\x23\xec\x4a\x75\xa8\x3c\x0a\xdd\xf9\x7d\x8f\x3d\x7d\xb1\x09\xb9\x7f\x64\x2a\x0a\x33\xbf\x1a\x5b\xed\x42\xf5\xdd\x6b\xac\xaa\x97\x16\x15\x68\x16\x8f\x41\x49\x63\x84\x50\x02\x46\xd8\xdf\x28\x79\x41\x65\xdf\x2b\xf7\xc3\xdb\x9d\x17\x7c\xb8\x56\x1f\x57\x98\xdd\x7f\x6c\xc0\xb8\x69\x65\x2b\x76\xd4\xd6\xdd\x7e\xf0\x43\xe7\x78\x0c\xfa\x87\x18\x61\x46\xdf\xfb\x4c\x58\xec\xcb\xda\xad\xfa\xd5\xbf\x1e\x3c\x2f\x54\xba\xd5\xbd\x91\x83\x73\x15\x5f\x3d\x24\x57\xb7\xdf\x2a\xf4\xb9\xf8\x50\x9c\xb5\xe0\xe4\xc1\x20\xef\x6f\xe9\x42\x5f\x77\xbb\x3e\x6f\xdb\xdc\x22\xdb\x77\xcf\x9a\x70\xac\xb9\x25\x36\x1c\x7b\xe7\x70\xff\x9c\xd3\xfa\x97\xcc\xff\xd9\x14\x66\xe2\x9f\x4b\xf2\xa5\x0b\xcd\xb5\xdb\xec\x51\x79\x4b\xdf\x6b\x5f\xf7\x18\x61\x0c\x5a\xf1\x3d\x68\x7c\xb8\xc2\xc8\x7c\xd7\xfe\xa8\xf8\xec\x5c\xae\xf2\xaf\x0e\x34\x9a\x94\x7e\x59\x6e\x52\x97\xf2\x5f\xbc\xfe\xec\x48\xeb\x0a\x79\x1d\xa1\x65\xe6\xdf\xbf\x6b\xdf\xf0\xa3\x73\xad\x5b\x17\x95\xbf\xd9\x75\x52\x52\xee\xff\x92\x2e\xd4\xc8\x2c\x41\xeb\x0b\xcc\xd8\x3c\xfb\xee\xf1\xb5\x7b\x8b\xef\xbb\x7e\x67\xed\xcf\x9d\xa6\x39\xdf\x16\xab\xf4\x73\xcd\x69\x7f\x5a\x4f\x66\xa7\xff\xb5\x46\x7e\x35\xf6\x70\xdb\x97\x13\xf3\x93\x15\x8f\xcd\xff\xbc\x63\x1f\x6d\x7e\x4e\x79\xf7\xe8\x72\x3f\xb8\x05\x1a\xfd\x36\xb5\x48\xe1\x19\xe9\x57\x1b\xd7\x9d\x3d\x3f\xba\xa5\x21\x1e\x6d\x1b\xfe\x51\x74\xf6\xcc\x01\x60\xf6\xc8\x1c\x8d\xd7\xe4\x6c\x76\xb9\x57\x4b\x64\xe4\x99\xe5\x87\xd3\x85\xce\xcd\xdd\xe1\x93\xd7\x65\xf3\x9c\xbe\xd6\x38\xe5\xd7\xe3\x83\xf2\x56\x2e\xfd\x61\xdd\xc1\x4f\x6b\x4f\xcf\x73\xa5\xd8\xbd\xb6\x4b\x9f\x66\xff\x3f\x18\x61\x46\x57\xf5\x4d\x46\x4b\xc0\x08\xef\x74\xef\xb0\xe6\x61\x9b\x2a\x9f\x35\x3d\xf7\x4e\x01\xa2\xc8\xa6\x3e\x3b\x5b\x15\x59\x9f\xe5\x6e\xf6\x17\x7a\xe3\xf9\xe2\xc4\x0a\xb3\x8a\xc4\x63\x50\xd2\x18\x21\x94\x80\x11\x2e\x4a\xcd\xfb\xa4\xf2\x29\xa4\xca\xde\xba\x53\xd6\x8f\x6a\x93\x47\x98\x56\x75\xef\xc1\x54\xf9\xf0\x4c\xbe\xf4\x84\xcd\xec\x9d\x62\xcd\xe3\x31\x28\x69\x8c\x10\x4a\xc0\x08\x2f\xbc\xb5\x75\x7c\xea\xfb\xf1\x5b\xfb\x3f\xda\xf5\xe3\x4d\xb0\xce\xea\xf5\xf5\xfd\xd9\x1f\xef\x7c\xd0\x70\xdc\xc2\xe2\x62\x91\x57\x07\xda\xc7\x63\x50\xd2\x18\x21\x94\x80\x11\x4e\xdc\x12\xdc\x3f\x50\x77\x40\xd5\x9a\x67\xeb\x95\x1b\xf2\xdd\x37\x9c\xbf\x35\x5f\xdf\x86\x4b\x3f\x7c\xf6\xdd\xf8\x36\xbd\xdb\xf4\xfb\x32\xad\x97\x26\x8d\x11\x42\x09\x18\x61\x49\x5f\x7c\x92\x32\xa1\x7f\xa6\x89\x1f\xee\x2c\x90\x2f\x0f\xd5\x85\x78\xe7\x41\xd7\x5f\x9e\x7e\x3b\x2b\x6b\xdb\x09\x9f\x71\xb7\x1e\xc4\xe2\x31\x28\x69\x8c\x10\x4a\xc0\x08\x67\xb4\xaf\x79\x48\xa9\x2c\x70\x2f\x8f\xfb\x9a\xde\xfd\xf0\x8b\x59\xcd\x5f\xfb\x75\xd7\xac\xfa\xed\xaf\x7c\x62\x9e\xf7\x86\xd5\x48\xcb\x04\x49\x63\x84\x50\x02\x46\x38\xf4\xc1\xb5\xd3\x6b\x0b\xdf\xee\x44\x7e\x97\xbf\xcf\x9e\x3d\x77\x6a\xee\xdf\x0d\x0f\xab\x7a\x49\xfd\xe2\x76\xd3\x1b\xbb\x8f\x8c\x18\x9d\x96\x35\x93\xc6\x08\xa1\x04\x8c\x70\x77\x2b\x32\x53\xbd\x7d\xab\x29\xaf\xc8\xfe\xce\x59\xc4\x15\x7b\x7b\xee\xfd\xee\xe3\xf3\x4d\x98\xf9\x87\x86\xae\x29\x78\xbd\x6e\x91\x32\xf1\x18\xf4\x0f\x31\xc2\x8c\xf2\xce\x9b\xce\x94\x80\x11\xae\xba\xd8\x7d\x51\xc7\xfc\x93\x4d\xbc\x65\xde\x0d\x33\x7a\x8f\xb9\xf8\xf4\x10\x9b\x43\x5b\x7a\xf1\xe6\xc0\x1f\xc1\xbe\xc5\x39\x1b\x37\x8a\xc7\xa0\xa4\x31\x42\x28\x01\x23\xdc\x3d\x74\x58\xc3\xef\x87\xed\x66\xdf\x1d\xf1\x49\x81\xc7\x0d\x2b\xbc\x37\xac\xaf\x7d\x1a\x2e\xb9\x3c\x3f\xd4\x35\xdc\x9f\xab\xf7\x89\x2a\xf1\x18\x94\x34\x46\x08\x25\x60\x84\x0d\xfa\xb9\x2b\x6a\x80\xac\xaf\xa8\x49\x3b\x2a\xae\x62\x1e\x15\x58\xb0\x75\xee\xd5\xd5\x5d\x48\xa8\x46\xbd\x4f\xb6\x7d\x5a\xe8\x7c\xe5\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\x75\xd7\x4e\x4d\xfa\xb8\xff\x80\xc1\xbf\x96\xae\x1f\x6f\xf8\x59\x99\x35\xbd\x7f\xfe\x0d\x7f\xf5\xe2\x53\xe1\xc6\x96\x62\xd8\xf6\x26\x50\x8e\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\x05\x3b\xba\xf5\x99\x9a\xa7\x48\x8d\x3a\xa0\xfa\x8d\x7d\x99\xb3\xf6\x7a\x6b\x89\xa4\x7e\xb2\x6e\xce\x9d\xf6\xd6\xa6\x2a\x35\x90\xb2\x6d\xe3\x31\x28\x69\x8c\x10\x4a\xc0\x08\x6b\xcc\xab\xbe\xe4\x66\xea\xa5\xf1\x07\xbb\x65\x19\xbf\xfe\x4a\xed\x17\x68\x8f\x49\x65\x7e\x9d\x06\x36\xe0\x83\xb1\x2d\x43\x8d\xda\xbd\xe3\x31\x28\x69\x8c\x10\x4a\xc0\x08\x7f\xec\xb0\xe5\xe0\xd7\xcf\xd6\xd4\x6b\xb1\xa0\xc5\x49\x09\x79\x71\xdc\xde\x55\xba\x14\xd1\xac\xfd\xbb\xa5\xe4\x19\x5f\x54\x2e\x4c\x22\xf1\x18\x94\x34\x46\x08\x25\x60\x84\xef\x52\x07\x6a\xcd\x59\x57\xe3\x38\x73\xfd\xbd\x94\xfd\x43\x57\x7e\xfd\xe1\x99\x87\x4b\x8a\x1d\x5f\xfa\xe2\xd4\x91\xb7\xb6\xb7\xdc\xa5\xf5\x8a\xc7\xa0\x7f\x88\x11\x66\xf4\x64\x7e\xd3\x99\x12\x30\xc2\x67\xfb\x77\xcf\xeb\x36\x7a\x48\x6c\x9e\xd0\x37\xff\x03\xeb\xc5\xdb\xd9\x2a\x7f\xdc\xb2\xe8\xde\x42\x39\x06\xe9\xb7\x5b\x39\x7f\xb6\x6c\x10\x8f\x41\x49\x63\x84\x50\x02\x46\x78\xad\xfe\x9e\x6b\x87\x3f\x18\xfd\x64\x62\xc3\xf7\xaa\xab\xdd\x6b\x2e\x3f\xf7\xfb\xcd\x13\xb9\xe3\xcd\x8f\x4e\x14\xa7\x09\xf9\xed\x78\xc5\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\xfd\x0b\xfb\xae\x1e\xbf\xba\x52\xc7\xcc\x0d\x8e\xa6\xbe\x37\xeb\xab\xc9\x3b\xb3\x77\x39\x7f\xb2\xec\xc6\xbe\x0c\x32\xa4\x7a\xe5\xf2\xae\x19\x8f\x41\x49\x63\x84\x50\x02\x46\xf8\x11\xf9\xa0\xf0\xc1\x6d\x55\x3b\x6d\x7d\x02\x35\xcd\x39\x71\xd4\x87\x27\x4e\xec\xc9\x71\x6a\x8f\x33\xa5\xcf\x15\x63\x4a\xb9\x2e\xf3\xd3\xae\x55\xd2\x18\x21\x94\x80\x11\x1e\x2e\x41\x4e\x58\x7e\xb2\x82\x0b\xb7\x78\x5a\xae\x8e\x8e\xd4\xec\xf0\xfa\xcb\xe5\x93\xb2\xad\xda\x34\xc7\x32\x96\xd4\xa8\x0c\x6a\xc7\x63\x50\xd2\x18\x21\x94\x80\x11\xde\x9e\xdc\xb7\xb2\x50\xea\xdb\xf7\x0f\x3c\x3d\x41\x4d\x49\x3d\xfc\x2e\x3b\x6e\x7f\x65\x71\xce\xb7\x1d\xae\xf4\xfe\x79\xc0\xd6\x0e\x03\xbb\xc7\x63\x50\xd2\x18\x21\x94\x80\x11\x8e\xad\x77\xaa\x60\x45\x66\xd9\x03\xe8\x68\xe5\x55\xbb\x3b\xfc\xb6\xf7\x7e\x2f\xe6\xd6\xb9\x2c\xc5\x99\x77\x98\x81\x4f\xae\xf5\xfb\x39\x35\x1e\x83\x92\xc6\x08\xa1\x04\x8c\x30\xb5\xf9\xfe\x4b\x33\x1a\x8f\x18\x17\x5c\x19\x34\xac\xf4\x57\x47\xaa\x2c\x99\x3f\x26\xfb\xc8\xf1\x77\xba\xae\x9c\xd2\xea\xd0\xd3\x45\xdf\x16\x8a\xc7\xa0\x7f\x88\x11\x66\x34\x76\x7d\xd3\x99\x12\x30\xc2\x9d\x17\x0a\x5c\x39\xf8\x63\x8f\x31\xdb\x6f\x20\x39\xde\x3f\xfd\xac\xf3\xde\x12\x1b\xce\x35\xe8\xf8\x76\xf5\x7a\xb5\x3a\x2d\xea\x32\xe0\xb3\x5a\xf1\x18\x94\x34\x46\x08\x25\x60\x84\x25\xbe\x69\x80\xe7\x9a\x5f\x62\xed\xf3\x5c\xb3\xee\x74\xfa\x41\xfb\x68\xf0\x15\xb6\x66\xbb\x02\x5e\xc7\x1b\xfa\x81\x0d\x9d\xe6\xf4\x49\x7b\x1c\x27\x8d\x11\x42\x09\x18\xe1\xe8\x0a\xcc\xfd\xa7\xa5\xce\xae\x5e\x45\x54\xab\xb5\x8d\x1b\xa2\x40\x37\x7f\x1d\xf1\xde\xd0\x25\xfc\xaf\xcd\xac\x8e\x44\x4e\xeb\xed\x78\x0c\x4a\x1a\x23\x84\x12\x30\x42\x43\xbe\x34\xa6\xd6\xe8\x2e\x83\x7b\x5d\x29\xf8\xde\x4f\xdd\xfb\x1d\x2d\xfe\xd7\x8e\x1d\x4f\x73\x30\xc3\x36\xfd\xc5\xe4\x9a\x70\x34\x96\x96\x09\x93\xc6\x08\xa1\x04\x8c\x70\xce\xe3\x86\x64\xcf\x92\x25\xdb\xc7\xde\x7d\x78\xf4\xf1\xd2\x9e\x79\x9a\xf1\x97\xb4\x96\xfd\xce\x7f\x38\xe4\xd3\x8a\xf5\xae\x0d\x9c\x62\xc4\x63\x50\xd2\x18\x21\x94\x80\x11\x96\xce\xbb\xe4\xf0\xcf\x77\xbe\x5e\x5c\xf6\xc2\xb3\x8f\x06\x17\x63\x0a\x5a\x53\x3b\xec\xed\xd0\x75\xe6\xd4\xde\xb7\x0e\xae\xdb\x3c\xe7\x72\x8b\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\x6c\x4f\xd7\xf6\x5f\x3b\x25\x53\xff\x81\xf7\xba\xb7\xf9\x28\xf7\xa2\x83\xcf\xf2\x5c\x6b\xaa\xb5\xfa\xee\xf1\x5f\xcf\x07\x57\xcb\x75\xf7\x87\x92\xf1\x18\x94\x34\x46\x08\x25\x60\x84\x4d\xa0\xe2\xf6\x63\x6f\xf0\xcd\x43\xfd\xcc\x75\x4f\x87\xcf\xde\xbc\x66\x4b\x8b\x69\xb9\x63\xd7\xab\x17\x3a\x3d\xb0\xf8\xe6\xe6\x25\x72\xc6\x63\xd0\x3f\xc4\x08\x33\x9a\xdd\xbd\xe9\x4c\x09\x18\x61\xfd\x7a\x87\x1e\x75\x58\xf8\xd9\x88\x5e\x4a\xeb\x54\x75\xbe\x57\xd1\x5f\x78\xa2\xe4\xee\x6d\x0d\x72\xec\x76\xba\xcc\x3e\x31\x4d\xca\x12\x8f\x41\x49\x63\x84\x50\x02\x46\xb8\x60\x72\xee\x5d\x7d\xeb\xb4\x74\x85\xa6\x0b\xfb\xa6\x56\xbb\x36\xbd\xed\x9d\xb7\x72\x8f\xcb\xc7\x4f\xcf\x39\xea\xa3\xe5\x0f\xee\x0d\x4d\x6b\x20\x49\x63\x84\x50\x02\x46\x58\xab\xdf\xf2\x91\x3f\x6c\xfc\x5e\xfc\xfa\xe7\xf1\x5b\xb2\x17\xc0\x57\x48\x83\x2b\x57\x3f\x68\x35\xed\x70\x7f\x49\xf5\xbb\x5f\x6d\xaa\xf2\x51\x3c\x06\x25\x8d\x11\x42\x09\x18\x61\xd6\xaf\xf6\x2e\x2b\xbb\xbc\xb7\x7a\xa7\xfe\xd9\xad\xcf\xf7\x74\x6b\xd8\x72\xd9\xe2\xae\xc3\x86\x9c\x38\xbb\xa1\xd3\x3b\x6d\x0e\xac\xfb\xb4\x53\x3c\x06\x25\x8d\x11\x42\x09\x18\xe1\x88\x8d\x9b\x4e\xd5\xfa\xf9\xa5\xf6\xd7\xf0\x05\x07\xcb\xb6\x6e\x38\xed\x42\x83\x73\x53\x8b\xbd\x5e\x9b\x17\x7b\xf7\xab\xec\x67\xf2\xcd\x6c\x1a\x8f\x41\x49\x63\x84\x50\x02\x46\x58\x7e\xeb\x2f\x43\xcf\x77\xdb\xf0\x6c\x78\xdb\x5c\xa3\x83\x0d\x6b\xfa\x0e\x4f\x35\x3e\x5e\x58\x58\x6d\x5f\xe7\xed\xdd\xcd\x5f\x3e\xbe\x2c\xc4\x63\x50\xd2\x18\x21\x94\x80\x11\x0e\x5b\x38\x74\xe0\xc4\x5a\x2b\x5a\xaa\xb9\xf8\xdd\x75\x4f\x7f\xb1\xe7\xfb\x4f\x72\x76\x3b\xff\x51\xf9\x39\x59\x3c\x6b\xc7\x88\xa9\xd5\x89\x78\x0c\x4a\x1a\x23\x84\x12\x30\x42\xaa\x6e\x8d\x3f\xc7\xed\x90\x9a\x8e\x68\x55\xfd\xcb\x95\x9f\x7e\xd3\xe0\xee\xab\x9c\xe5\xde\xd9\x70\xa1\xe8\xae\xb9\xc5\x0b\x3e\x7f\x7a\x23\x6d\x7e\xf9\x0f\x31\xc2\x8c\xea\x1f\x6f\x3a\x53\x02\x46\x58\x69\x63\xc3\x26\xf4\x44\x2d\x75\xce\x98\x83\xf3\x47\x16\xa9\x32\xe0\xdd\x05\xe1\xb0\xea\x8b\x6a\xd7\x64\x77\xd7\x5e\xcc\xce\xab\x57\x21\x1e\x83\x92\xc6\x08\xa1\x04\x8c\xf0\x43\x79\x5a\xd5\xad\xc5\xca\x9c\xfa\xb6\xdf\xbd\x2c\xd7\x36\x76\x3e\xf7\xe5\xc6\x2c\x1f\x72\x2b\xfa\x7c\x91\xe9\x59\xc5\x21\x97\xed\xde\x29\xf1\x18\x94\x34\x46\x08\x25\x60\x84\xad\xae\x13\x35\x6e\xad\x9e\xd2\xb1\x63\xa5\x51\xdf\x8e\xe3\x53\xef\xde\x3e\x71\x2b\x57\x1d\x74\x31\xfb\x47\x07\x7e\xc4\x8d\x91\xe3\x98\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\xb2\xaf\xf6\x35\xd8\x59\x28\xef\xf2\x52\xa7\x1b\x97\x54\xfa\x8e\xc8\xd2\xbf\xf5\x8c\x2e\x15\xaa\x97\x7a\x3d\x7f\x52\x07\xd0\xa1\xee\xae\xb4\x79\x40\xd2\x18\x21\x94\x80\x11\xae\x08\x6a\x77\x6d\x6e\x48\x90\xb0\xb9\xf7\x88\x93\xeb\x2b\x88\x15\xae\xae\x6e\xbb\x1e\xdb\x7e\x2c\xbe\x6e\xe8\xe5\xf5\xd7\x0b\x17\x8f\xc7\xa0\xa4\x31\x42\x28\x01\x23\xdc\x5e\x7d\xea\x96\x76\xd3\xbf\xbf\x52\x69\x93\x5f\xf7\x9b\x3c\x2b\x6f\x3b\x1f\x1c\xdc\x3c\xb6\xe6\xe0\xc6\xed\x8f\x37\x19\x3f\xea\xa7\x92\x78\x3c\x06\x25\x8d\x11\x42\x09\x18\xa1\xf8\xf8\xda\xa7\xc5\xdf\x66\x0f\x73\xbf\xcf\x3c\x52\x74\xee\x00\xab\xfb\xc1\xb7\x72\xcd\x5e\x53\xa0\xd2\xbc\x39\x1b\x8d\xf2\xdb\x88\x1e\xf1\x18\x94\x34\x46\x08\x25\x60\x84\x59\x2f\x75\x9f\xdf\x2d\xf6\xc1\x98\x2e\x57\x8e\x97\xdd\x73\xbd\xdd\xce\x85\x25\x3a\x7e\x7c\xf1\x46\xed\x3a\x05\xfa\x3c\x9a\xc9\x94\xa9\xdc\x2d\x1e\x83\xfe\x21\x46\x98\x51\x85\xf0\x4d\x67\x4a\xc0\x08\xcf\xbf\xdf\xf8\xfb\xd4\x53\xbf\x3c\x1b\x72\x2f\x86\xac\xd4\x6b\x1d\x1b\xff\xd5\xcb\xab\x0b\x0f\xfd\x7a\xaf\xea\x37\xbd\xdf\x2d\xda\x70\x0b\x19\x8f\x41\x49\x63\x84\x50\x02\x46\x78\xba\xfc\x58\x79\xe4\xe4\x6f\x89\x9b\x33\xa0\x41\x4b\x8f\xa7\xa4\x64\x1a\x75\x30\x47\x2d\xe9\xf3\x97\x03\x76\xb6\x3a\xd8\xa4\x76\xc9\x26\xf1\x18\x94\x34\x46\x08\x25\x60\x84\xed\xeb\x8e\x69\xbe\xd1\x2b\xc3\xa7\xac\xdf\x40\x0e\xf8\xbc\x5a\xa7\x05\x3f\x7f\x78\xed\xfa\xfa\x2a\x27\x2e\x6c\xbd\x7a\x6c\xec\x85\xf6\x69\xbf\x47\xd2\x18\x21\x94\x80\x11\xd6\xdf\xb6\xd7\xef\xd6\xaf\xfb\x1a\xed\xfe\x9e\xdb\xca\xf4\xc9\xfe\x3b\xd9\x5f\xdf\x82\xe9\x29\x87\x9e\x8c\xdb\xda\xe8\x3c\xba\xb1\x4f\x3c\x06\x25\x8d\x11\x42\x09\x18\x61\xb1\x14\xa5\xf2\xbc\x2d\x9f\x86\xb7\xb7\xac\xcf\x0f\x3f\xfd\xbc\xe6\x94\x2d\xdf\xfd\xd0\x45\x9e\x5d\x24\x97\xd2\x61\x1e\x57\xe5\x7a\xa9\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\x47\x6e\xbf\xb1\x25\x0a\x04\xcf\x4e\x0e\xfb\x63\xed\xc7\x39\x4f\xb2\x50\xb6\x46\xbd\x3f\xea\x59\x7b\xcd\x91\x58\xe6\xe3\xb3\x8f\xf7\x53\xe2\x31\x28\x69\x8c\x10\x4a\xc0\x08\xe7\x2f\x7f\x98\xf2\x58\x28\x3c\x74\xc9\x85\x1e\xe1\x9a\x43\xa7\x07\x1c\x20\x83\x94\xd3\x67\xff\xac\xdb\x82\x38\xb9\xae\x49\x89\x3c\x69\x4f\xf1\xa4\x31\x42\x28\x01\x23\xfc\xc4\xde\x62\xf1\x7d\x9b\x3e\xd4\x95\x56\xef\x37\x87\x4b\xd3\x95\xea\xdc\x3e\x9c\xb5\x44\x83\x42\x3b\x1a\x74\x5a\xf8\xea\x7c\xff\xb4\x39\xd3\x3f\xc4\x08\x33\xaa\xa1\xbf\xe9\x4c\x09\x18\xe1\xaa\x94\x93\x8d\x43\xbf\x4a\xd3\xf6\x8f\xff\xec\x5d\xa3\xd3\xe0\xec\x83\xdf\x9b\x58\x50\x69\x5a\xf2\x5e\xa7\xef\x77\x64\x1d\x9e\x2f\x4f\xf6\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\xd5\x4b\x16\x97\xdb\xaf\xbc\x73\xe4\xd5\xed\x3e\x28\xda\x6a\x4d\x7e\xff\xab\x46\xa5\x72\x2f\x7e\xd8\xf2\x3c\xf4\x69\x2c\xe7\xf5\xcf\xd2\xc6\xcf\x49\x63\x84\x50\x02\x46\xb8\x81\x9d\x7e\xd6\x9e\xff\xe1\xfa\x51\xc3\x6f\xde\x7f\x57\xfc\xe5\x9d\xd3\x55\x66\xcd\x6a\xbc\x2c\x53\xdd\x27\x83\x3b\xdd\xbd\xd2\xbd\x49\x5a\x26\x4c\x1a\x23\x84\x12\x30\x42\x6b\xcc\x93\xcb\x39\x3b\x10\x57\xca\x15\xed\x3b\xf9\x85\xd4\x4f\xaf\x35\xa7\x45\x85\xb7\x3a\x2f\x2a\x34\x17\x9b\x7f\x76\xde\x53\xaa\x74\x3c\x06\x25\x8d\x11\x42\x09\x18\xe1\xe5\xf9\x95\x6e\xe4\x1d\x5a\xfa\x57\xec\xfd\x8a\x73\x3e\x6f\xb9\xd2\x5e\x8b\x7f\xe7\x37\x2f\xb6\xbf\xf3\xa5\xad\x7f\xce\xc9\xbf\xb5\x62\xc3\x78\x0c\x4a\x1a\x23\x84\x12\x30\xc2\xb3\x2d\x7a\x9c\x5f\xdc\xf9\x49\xb5\x9f\xa9\xbc\xf9\x9d\xc5\x1d\xc3\xdf\x15\xe9\x70\xd3\x71\xfd\x17\x55\x5a\xb0\x67\xf2\x81\xfb\x5a\xda\x1c\x36\x69\x8c\x10\x4a\xc0\x08\xe7\x4f\xb8\x74\x6c\x74\x5f\xfc\x8e\x0a\xd0\x16\xeb\x7e\x9f\x3d\x6a\xe2\xad\x2d\xb1\xed\xcb\x7a\xd6\x29\xf7\xc5\x43\xf2\xf4\xec\xb7\xd3\xee\x79\xd2\x18\x21\x94\x80\x11\xe6\xcc\x93\x69\x41\x19\x72\x7f\xaf\x13\x0f\xe4\xb6\xdc\x4d\xb9\x6d\xc3\xca\xfb\xc4\x33\xc7\xce\x4f\xfa\x6a\x69\x66\xe8\xdb\xb6\xa5\xb0\x78\x0c\x4a\x12\x23\x5c\x97\xf7\x5f\x9d\x69\xc6\xdc\xa7\x85\xba\xb5\xda\xd7\x67\xa8\xdf\xaa\xe0\xc5\xec\x63\xe9\x05\xc4\x57\x1d\x86\x14\x1d\x9d\xfa\xf5\xa5\xaf\x1e\x4f\xa1\x1f\x8e\x8a\x4f\x4f\x0f\xd6\x65\xeb\x31\xb5\x63\x25\xf4\x4b\xfd\x62\x9f\x9d\x41\xef\x99\x2b\x37\xba\x6b\x2a\xfd\x38\xac\xcd\x8d\xfb\xb9\x77\x56\xba\x11\x1f\xd4\xa3\x45\xba\xd0\x87\x0d\x7f\x2a\x70\x72\xd6\x54\x34\x65\xe3\xc0\x31\x9b\x83\x22\xd3\xda\xf5\x5d\x3e\x7a\xdc\xd4\xaa\xab\x2a\xe7\x2d\xd7\x1b\x11\xe7\x7d\xf7\xdf\xd0\xff\x86\xfe\x37\xf4\xbf\xa1\xff\x0d\xfd\x6f\xe8\x7f\x43\xff\x5f\x0a\x1d\x91\xf2\x9f\x0d\x06\x86\xa7\x3b\x66\x8b\x91\x17\x94\xa9\x8f\x3f\xa8\xb1\xbf\xd7\xa3\x19\xd3\x46\xc8\x55\xde\x46\x26\x99\x8d\xca\x95\xf9\xa9\xe2\xf7\xcf\xbb\x4c\xbe\xf3\x67\xdd\xf4\x1f\xea\x6e\x33\xb5\xda\xe1\x6d\xa5\x3b\x7f\x8a\xb5\x58\xbb\xe7\x36\xb4\x6a\xee\xb5\x8e\x4b\xda\x9b\x3f\x67\xed\xdf\x32\xfb\xb7\x7b\xba\x81\x67\x8d\x1a\xc5\x32\x67\x8a\x65\xce\x34\xb8\x51\xa3\xaf\x53\xfe\xb3\xa3\x0f\xc9\x94\x32\xa4\x71\xca\xa0\xf8\xc8\x26\x59\x0e\x35\x6a\xd4\x28\xdd\x0f\xcb\x02\x95\x69\x75\xaf\xe2\x6f\x67\x6f\x2d\x90\xcb\xd4\x14\x06\xf2\x6d\xae\x6e\x5d\xb4\xe5\x75\xf7\x81\x4f\x76\xe5\xb8\x32\x70\xd1\x1d\x21\x5d\xe8\x65\x76\x74\xfd\xa2\xbf\x64\xbd\x78\x66\x7c\xa1\x1f\x56\xdc\xea\xba\xad\xdc\xd7\x6d\x7b\x5e\xbc\xf1\xee\xa9\x3a\xb5\x77\xae\xad\xd3\xaf\x7d\x8d\xc1\xcd\x33\x15\x4d\x1b\x6d\x65\x6a\x9e\xe9\xee\xff\xfc\x39\xb8\x51\xa3\xc1\x8d\x1a\xf5\xf8\xcf\x7e\xd0\x90\xac\x29\x43\x1a\x97\x4e\x4f\x0e\xab\x85\x5b\x36\xde\x75\xa1\xe6\x9c\xd7\x63\xf6\x55\x9b\xd3\xe4\xb3\x1a\xd5\x8a\x32\x35\xa6\xce\x7b\xf9\x65\x91\x4f\xd7\x55\x5a\xf2\xe2\xbb\x31\x83\x3e\xfa\xcf\xe2\x86\x34\x1e\x94\xfe\xb0\x2d\x57\xb7\xfe\xa1\x68\xbe\x6c\x4b\xcb\x42\x6f\xe5\x9d\x3f\xf9\x87\x16\xed\x85\xa9\x41\xa6\xd4\x7d\xab\xaa\x57\xe9\x50\xfc\x87\xf6\x77\x16\xbd\x39\x6c\x46\x71\x43\x1a\xa7\xa6\x3f\x6c\x91\x6f\x4b\x7b\x9f\x96\xf5\x0e\xb7\xca\xf4\x81\xe4\xda\xe7\x6e\x2a\x5f\x5b\x97\xee\x0e\x29\x75\x96\xa8\x9a\xb2\xe4\xf4\x06\xf9\xf8\x9b\xc3\x66\x14\x37\xa4\x31\x94\xfe\xb0\xa0\xc2\xf2\xcf\x7a\x97\xa1\xae\x29\x8b\x97\xad\xba\x89\x74\x18\x70\x2d\x7f\xf5\x1f\x8f\x1d\x72\x9a\x9d\x72\x7c\xcf\xff\xf8\xe0\xb2\x37\x87\xcd\x28\x6e\x48\xe3\x2c\xe9\x0f\x4b\x0c\x9e\xd4\x63\x5a\x9f\xf2\xbf\x4e\xe8\x7b\x72\xed\x8c\x9c\xfe\x5f\x55\xbf\xbe\xfc\xfb\x27\xd7\x67\x64\x5d\x9b\x32\x76\xef\xd1\x73\x07\xfe\x7d\xb6\x19\xc5\x25\x9c\xed\x74\x5c\x3e\xd2\xc8\xb3\xb6\x1e\xee\x5b\xb0\xf5\xf6\xdc\x65\x96\x96\xec\xd8\xe0\xe1\xf9\x23\xcf\x7a\x56\x1a\x96\xb7\xea\xc8\x86\xaf\x7f\x1a\xd4\xe1\x3f\x8b\x1b\xd2\xb8\xf4\xa0\xf8\xb0\xb4\xc6\xda\x3a\x53\xca\x9c\xae\xc2\x9c\x7f\xb5\xa7\xff\x4b\x03\xeb\xf1\x9f\xf5\x99\xbf\xb7\xae\x92\x3f\xb5\x98\x7d\xbf\xdf\xc4\xb7\xb2\x6d\x1e\x5b\x7c\xf7\x8b\xd2\x5d\x66\x5f\xd8\xf0\x8d\xa8\xcc\x2f\x71\x86\x2d\x74\xa5\xb9\xf5\xa8\xf7\x9b\x2b\x90\x51\x5c\x42\xeb\x3a\x7a\x06\x1a\xf8\xd9\x8d\x5b\x8b\x5f\xd5\x3d\x7d\xef\xed\xc2\xe6\x17\xef\xd6\xa9\xaf\xef\xc9\xa1\xbc\x6e\xb4\xfb\xb7\xef\xb7\xf5\xcb\x5d\xf1\xcd\x61\x33\x8a\x4b\x68\x5d\x37\xc3\x65\xd7\xff\x38\x3a\xf7\xd7\x79\x43\xca\x2c\x5f\x54\xfb\x35\x71\x76\xe3\xac\x39\xed\x46\x6e\x3f\x92\x59\xbb\x9a\x7d\x63\xa5\x92\x75\xde\x1c\x36\xa3\xb8\x84\xfb\xb5\xe6\xd8\xc6\x2a\xd3\x3e\xfc\x7c\xf2\x55\x75\xd3\x29\xba\xf2\xdd\x73\x2b\x16\x78\xb7\x3f\x7c\x3a\xf3\x65\xf1\x2d\xbb\xe7\x37\x1a\x4b\x6d\x7c\x73\xd8\x8c\xe2\x12\x5a\xd7\xc7\x6b\xcf\x7f\x04\x0e\x9f\x4a\x79\xeb\x45\xde\x3d\x59\x07\xd6\xad\x5c\xaf\x5f\x07\xe7\x41\xc5\x3f\x17\x7c\xfa\xe1\xf5\x62\xa7\xbe\x2f\xbd\xf4\xcd\x61\x33\x8a\x4b\x38\xdb\x3c\xb3\xbb\xdc\x7b\x31\xe6\x4a\xbe\xaf\xb4\xec\x39\x56\xd6\x1d\xbd\xaf\x83\xbd\x41\xcc\x79\xb3\x73\xd6\xf0\xe1\xa4\xa6\x20\x57\x9d\x4d\x83\xaa\xfd\x67\x71\xff\xd3\xba\x1a\xe7\xac\xff\xaf\xe8\x76\xcc\x04\x7d\xc2\xd1\x2f\xa4\xdd\xe3\xef\x65\x99\xd4\xf6\xf0\x6f\x29\x7f\xc4\x26\x0f\xc8\x5a\xb1\x44\xbf\x19\x56\x97\xcb\xf4\x3b\x2b\xe3\x5d\x53\x66\x6d\x83\x0f\x7f\x16\xb6\x1b\x59\xab\x61\xbf\x27\x03\x95\x83\xe5\xf5\x18\x3f\xbd\x44\x4a\xd7\x4c\x39\x39\x51\xa9\x51\xab\x86\x1d\xd8\x80\x55\xd3\xff\xbd\xe2\xbf\x0e\xfd\xc1\x8a\x83\xdb\x4b\x1f\xb8\xd5\xb3\x7f\x09\x6a\xc7\xb1\x58\xfd\xda\x7f\xdc\x9c\xff\xf9\x88\x42\xd6\xcc\xab\x7d\x66\x66\x5f\xf1\xc7\xb6\xad\x83\xde\x4b\xe9\x9a\xa9\xc0\xff\xff\x1f\x81\x6e\x91\x3c\xab\x92\x96\xcc\x82\xff\xcb\x3f\xad\x80\xfe\x75\xcc\xeb\x1f\x9f\x5d\xff\xc3\xfa\x15\xd3\xd7\x63\x23\x5a\xeb\x47\x8f\xfa\x6c\xd1\xdf\x07\x2c\x5a\x32\xa1\xdc\xe1\x05\xeb\xb3\x5e\xba\x3d\xae\xcd\xe8\x74\x17\xec\xca\xc3\x75\xc4\x9d\x36\x8d\x56\x83\xde\x27\xb3\x35\x6c\x5f\x82\xfb\xe4\xd4\x91\x62\xd4\x88\xc7\x5a\xe7\xcd\xb9\x1a\x56\x45\x7b\x55\x4b\xbf\x2f\xd3\x7b\x35\x48\x2c\x94\xb9\xd0\xba\x8b\xa5\x5f\xd5\x3c\xf3\x47\x78\xa8\x42\xff\xcd\x43\xaa\x35\x9f\xf5\xac\xd2\xf0\xd9\x75\x26\x16\xbb\x95\x2e\xb4\x56\xb5\x3c\x40\xda\xf9\x6d\xa1\x1f\xe0\x3c\x1d\x77\x9e\xef\xf2\x28\xd7\xf8\xef\x7f\x6d\x57\x6e\xc9\x90\x4b\xe3\xa6\xad\xdb\x5e\x18\x3f\x97\x2e\xb4\xe8\x2b\x69\x3f\x39\x6f\x9e\x9c\x93\xa8\xd7\xaa\xee\xe7\x0b\x5a\xc7\xab\xdc\xdf\xfb\x65\xa7\x41\x1d\xc6\xcf\xf4\x8f\xa5\x76\x1d\x95\x33\x5d\xe8\xf1\x8f\x1b\x14\xfe\x24\xdb\xc1\x5a\xcf\xaa\x05\xcb\xd7\xcd\x7c\x3a\x60\xc3\x80\xdc\x67\x6f\x70\xef\xef\xce\xfd\xa8\x4a\xb6\xf7\x5d\xf1\xbd\xd8\xdb\x99\xd2\x6f\xa4\x9d\xfe\xa0\x78\x77\xf7\xf1\x94\x5b\xe5\xb7\x55\xcb\x71\xd7\x9d\xdd\xe3\xfa\xa3\x47\x1f\x35\x98\x74\x3e\xc7\xbd\x23\x4b\x4b\xa4\x30\x7f\x95\x6e\xd4\xa8\xd1\x70\xe8\x3f\xbb\x0a\x43\x32\xc7\xde\xce\x34\xa4\x71\xa9\x61\xe9\x8e\x8f\x97\x2c\x5f\xf6\x0f\x79\xdf\xb3\x1a\xcd\x4e\xb7\x6f\xbb\x26\xf6\x53\xf9\x0d\x4f\x6e\xf7\xbf\x51\xaa\x25\x7d\xaa\x69\x91\x94\x92\xf7\xd2\x5f\xb9\xa6\x20\xff\xf2\xc3\xcd\x16\x64\xdb\x59\xac\xcd\xd2\xcd\x67\xcf\x6c\x98\x56\x7a\xe3\x9d\x26\xf3\x5f\x66\x5b\x31\x5c\x51\xf7\x5f\xe2\x0b\xa5\x0b\x9d\x51\xf8\xf8\xc8\x66\x02\xf3\x5e\xb1\x73\x59\xb7\x57\x6c\xba\xfd\xca\xcb\xde\xad\xd7\x3e\xca\xef\x1c\xbf\x97\x75\xcb\x85\xc9\xf3\x0a\xa5\x7f\x2e\x53\x87\xbe\x7d\x17\xbb\xff\xa8\xdf\xfa\xdc\x43\xaa\xf6\x5f\xbd\x93\x78\x3e\x2a\xb5\xc3\xbd\xf2\xba\x38\x5c\x45\x2b\x5f\xc8\x7b\xae\x48\xba\xd0\xe5\x1d\xb7\xe6\xbf\xd3\xe7\x49\xf6\x0d\x0f\x17\xcd\x34\xd8\xed\xb5\xec\x76\x59\xaf\xc2\x53\xf7\x8d\xba\xf4\x09\x9c\x6f\xeb\xfa\x19\xf6\xa0\x37\xfb\x9a\x33\xfa\xa5\x12\xf6\x35\x4f\x59\xfa\x9d\x9c\xcd\x6e\x9d\x37\xf5\xd6\xc3\x8e\xce\x2e\xf3\x8b\xd6\x67\x3b\x6f\x9d\xb9\xf9\xf3\x4c\xc4\xbc\x66\x75\x8a\xfe\x49\x3c\x48\x17\x3a\x1f\x2a\xf0\x6c\xf8\xec\xf7\xcf\x8e\xf9\x8b\xba\x71\x7c\xde\x37\x37\x6e\x92\xe1\xd0\xe0\x0c\xbf\x1b\x5a\x24\xa6\x6c\x29\x89\xae\x4b\x17\x7a\xae\xe1\xa4\x33\x0d\xaf\x5d\x17\x9b\xde\x7b\x94\xb9\xc5\x4b\x6d\xf2\x98\xe3\x53\x72\xff\x72\x2a\xb5\xc2\xf6\x6d\x7b\x9f\x35\xab\x71\x6e\x48\xba\xd0\xc5\x4b\xa5\x03\x1f\xf4\x68\xb8\x29\x6b\x83\x0f\x9f\x7f\xf0\xcd\xe4\x03\xdf\x91\x95\xc7\xe7\x39\xbc\x34\xf5\x65\xd6\xfe\xdf\x3e\x3c\xf5\xb2\x77\xba\xd0\x3f\xfb\x1d\x9e\x5f\xed\x61\xa1\x5b\xa5\xce\xe5\x19\x97\xaf\xc9\xe9\x66\x1d\xdb\xcc\x10\x07\x0c\xff\xc9\x5f\xd8\xb7\xce\x77\xa9\x53\x6b\xa7\xd7\x55\x8e\x8e\xdd\x30\xb8\xfd\x7b\xa5\x6a\x3d\x1f\x58\x65\xd0\x80\xae\xfe\xe6\x95\xca\x8e\x5f\x89\x26\x9b\x56\xb6\x51\xd8\x22\x29\xc3\xd4\x5e\xe9\x07\x6d\x0f\xea\x1c\xed\x5a\xbf\xcd\xb3\x8d\x15\xc7\xb2\x07\x7f\xd7\x4e\x2e\xbd\xb1\xbd\xfa\x2f\xd9\x0f\x6f\xfd\x50\x7a\x5c\xa9\xc2\xd8\x2a\x13\xd2\x85\xe6\xf8\xb1\x7f\xb7\x73\xc3\x7b\x4c\x3d\x37\xbc\xec\xa8\x65\x9d\xb4\x42\x9f\x3e\xf9\xa8\xf2\x9a\x73\xcf\xaf\x65\x89\x65\xea\x49\xea\x63\xce\xfc\xfb\x26\x64\x74\x55\x13\x6e\xc2\xb2\xde\x63\xb7\x85\x9f\xe6\x4c\x09\xe8\xa3\xe5\xb7\x57\x5f\x78\x62\x56\x4d\xa6\xeb\xa4\xdd\xdf\xfd\xfe\xf2\xf9\xa6\x91\x5b\x2e\x9e\x7a\x27\x5d\x68\xb9\xe7\xeb\x8f\x8f\x18\x5f\x70\xdb\xa8\xfd\x95\x1b\xce\x9e\x77\xa6\x8d\xb1\xa2\x67\xcd\x5c\x3d\x4f\x6f\x7c\xeb\xcf\xa6\x3d\x1e\xc1\x4d\x0a\xa6\x0b\x25\xaf\x5e\x19\xb6\xb0\xfe\xab\xf6\xab\xda\x2f\xcc\x79\xa3\xdf\xe6\xa2\x9f\xdd\x90\x0b\x3e\xca\x36\x6f\xc3\xee\x6c\x8f\xca\xcd\xbf\x78\x3c\x7f\xba\xd0\xd6\x4b\x3f\x6f\xc6\x17\xc8\x3a\x22\xdf\xa2\xa3\x99\x7a\x5e\x50\xcd\x45\x83\xb3\x55\x69\xb9\xa7\x86\x36\xed\xc2\x8b\x36\xf3\xfa\x42\xe9\x6f\x42\x81\xc2\x1b\xce\x0d\x10\xc6\x7d\x31\x6c\x19\xa8\xfd\x4d\xa5\x72\x9b\x83\x5e\xa5\x0b\xd6\x3b\xb7\xfc\x40\x4a\x91\x4f\x8b\x77\x50\x5b\xdf\x4f\x17\xfa\xaa\xe3\x4b\x84\xc4\xea\xe6\x3f\xff\xf8\x52\xeb\x2c\x6b\x7b\x7f\x5b\x4c\x49\xdd\x35\x7b\x79\xa3\xd1\x6e\xb6\x47\xe3\x52\x6a\x79\xe9\x5b\xc1\xb0\xe1\xa7\xc6\x4e\xbd\xd6\xe8\xfd\xa6\xaf\x27\xef\xbf\x80\x9e\xfd\xa4\x7b\xc9\xaa\x25\xcf\xb7\xea\xff\x57\xe5\x17\x52\xc5\x22\x2d\xaa\xac\x48\x17\x9a\x77\x7a\xfd\x2c\x63\x7a\xde\xa9\xf2\x51\xe1\x1c\x57\x5e\x1c\x3c\xdd\x5a\xdb\x8e\xdd\x1a\x32\xa3\xfb\x03\x63\x69\xd1\xfe\xbf\x95\xeb\x3f\x77\xd0\xf3\xd4\xff\xec\xaa\xfe\xab\x82\x7e\xea\xbd\xee\x95\x32\xa5\xc4\x7f\xcf\x3c\xb1\x74\xe9\x6c\x03\xfa\x9c\xc3\x76\x66\x9f\x94\xf9\x9b\x0e\x6f\x5f\x6a\x39\xaa\xdd\xe6\xf3\x0f\x66\x36\xf9\x31\xef\x8f\x35\x4f\xdd\x0a\x77\x7f\xb7\xa0\x41\xf1\x4c\x99\x32\xa5\xa6\x8d\x49\x1e\x35\xc9\xc4\x34\xcd\x74\x2d\x9b\xdf\x98\x22\x79\x4a\x67\x49\x94\xc2\x48\x8a\x26\x81\xe2\xb3\xb4\xe0\x51\x06\x21\x4b\x86\xc4\x3b\x1a\x89\x5b\xb8\x49\xb0\x92\x25\xb0\xb8\xca\x18\x88\xc2\x21\xa8\xa1\xda\x9e\x06\x13\x86\x2c\x8b\xac\xfc\xe6\xf3\x74\x8d\x1a\xfd\xef\x9e\x89\x10\x90\x14\x1e\xea\x8a\x24\x99\x40\x52\x43\xcd\x00\x1c\xed\x6a\x3e\x61\xb9\x06\xa1\xc9\xb4\xab\x04\x96\x19\xa0\x36\xa6\xb8\xb2\x69\x29\xac\x28\xcb\x6c\x34\x67\x42\x49\x0a\xc5\xa3\x32\xef\x6b\x18\x01\x87\xb6\x2f\xb0\x06\x30\x14\x0d\x26\x69\xc6\xf4\x2d\x57\x84\x43\x09\xf5\x75\xc1\x46\x50\x0f\x86\x79\x4e\x57\x39\x13\x89\xe8\x9a\x78\x82\x4e\x3b\x8e\xc8\x60\xa2\xe8\x0a\xac\x23\x6b\x06\x6d\xd2\x94\xa1\xe0\x32\x8c\x60\x32\x4d\x2a\x2a\x20\x61\x8e\x26\x75\x1c\x84\x80\x0f\x78\xd8\xe4\x23\xba\x26\x0a\xab\x63\x1c\x43\x5b\xa2\xa3\x19\xbe\xe2\x84\xae\x1d\xca\xb0\x6a\x21\xa4\x2f\xcb\x2a\x4d\x9a\x0c\xac\xa0\x22\xc3\xb1\x1e\xcd\x8b\x1c\x4f\x07\x3e\xb0\x22\x3a\x13\xcd\x0e\x6c\xc4\x45\xf4\x30\xd0\x1d\x9d\xa4\x18\x52\xa0\x1c\x51\x47\x74\xd4\xf7\x34\x9e\xd1\x09\x0b\x15\x3d\x42\xa5\x78\x44\xe1\x09\xca\xf2\x34\x89\x0a\x22\xba\x3b\x9a\x4d\x30\xa4\xec\xcb\x8c\x83\x38\xa1\x25\x01\x92\x14\x1c\xd8\xe3\x25\xd8\xd3\x43\xcc\x86\x19\xd2\xa6\x11\x40\x63\x24\xe6\x18\x3a\x1a\x86\x92\x0d\xc8\x88\xce\x84\x14\x29\x20\x39\x24\x29\xf8\x2e\xc7\x04\x80\xe0\x90\x80\xb1\x60\x9e\x62\xad\xd0\x15\x14\x57\xa3\x40\x68\xfa\x38\x15\xa2\x81\x66\xb2\x68\xe8\x70\x36\xfe\xef\x33\x79\x93\x7c\x32\xca\xd3\x11\x24\x1f\x3a\x04\x04\x8b\x32\x2e\xae\x2a\x20\x94\x6c\x87\x60\x48\xd1\xe6\x7c\xcc\xc7\x44\xde\x0e\xc8\x80\x11\x71\x83\x70\x0c\xd4\xb5\x05\xcc\x63\x04\x8e\xb6\x95\xa8\x2e\xa0\x8a\x07\x2e\xe5\x23\x2e\xa6\x2b\x9c\xca\xcb\x12\x2b\x03\x11\x53\x30\x8d\xc4\x19\xd1\x34\x38\x4b\xa1\x01\x2e\x52\x0e\xa5\x63\x2c\x16\x1a\x12\x2f\x46\x74\x26\x94\x83\x9b\x3a\x4d\x31\x9c\x60\xba\x30\xea\x06\x21\xc6\x7b\x96\x0e\x02\x4e\x16\x6d\x03\x41\x45\x5d\xc6\x14\x49\xe5\x19\xc4\x94\x34\x0c\xa1\x5c\x98\x33\xa9\xa8\xce\x84\x66\x6d\x1d\x61\x1d\xd9\xf6\x04\x8c\x55\x1d\x13\xe1\x45\xdf\x27\xc4\x50\x95\x2d\x5e\x90\x29\xda\x52\x4d\x13\xb6\x48\xd8\x70\x65\xda\xa0\x79\xc5\x46\x23\xba\x3b\x94\x2f\xeb\x3e\xcd\x20\x42\x60\xf8\x0a\xed\xcb\xba\x6c\xa2\x7a\x80\x84\xb0\x41\x7b\x86\xa6\x21\x61\x60\x6a\x28\x4c\x5a\x02\xed\x33\x84\xa8\xea\x8c\xec\x47\xf5\x68\x40\x5d\xd5\xc7\x43\x8a\xd5\x25\xcc\x83\x31\x5d\x27\x00\x6b\x31\xb0\xc1\x60\x2e\x4c\xf8\x7c\xe0\xe9\x56\x10\x38\xaa\xc9\xa0\xb0\xe1\xb0\x2c\x17\x30\x51\xdd\x1d\xc1\xd2\x74\x8e\x44\x6d\x83\x47\x24\x81\xf4\x08\xcd\x43\x08\xe0\x89\x3c\xe6\xfb\x76\x60\x99\x9a\xe2\x85\x24\xe2\x2a\xbe\x6a\x8b\x24\x6e\xb8\x01\x6e\x47\x94\x06\x29\x47\xe5\x44\x8d\xa4\x78\x5a\xb6\x58\x1e\x21\x74\x47\xa1\x4d\x9b\xc3\x14\xc5\x25\x74\x0e\xa6\x64\xcf\x50\x81\x23\x93\x01\xd0\x08\xdf\x46\x51\x17\x91\xe8\xbf\x25\x9f\x8c\x46\x7e\x51\x8c\x7c\x00\x6d\xa8\xae\x2a\x23\xc0\x54\x65\x4b\x64\x4c\xa0\xb2\x81\x89\xf2\x84\x63\x09\x84\x1e\x38\x30\xe7\xa1\xb8\xce\xf1\x84\xa8\x08\x98\xa0\xf9\x06\x69\x47\x74\x01\x4d\x39\x70\x49\x0b\x07\x1a\xc6\x72\x64\xe0\x7b\x02\x08\x09\x9c\x92\x49\x46\xf6\x61\x4f\xc6\x1d\x5b\x10\x08\x26\xa4\x1c\x9e\x14\x29\xc6\xc6\x02\x2c\x8c\xaa\x79\x13\x40\x32\x61\x53\x64\x18\x96\x52\x19\xcc\x91\x14\x0c\xc5\x6d\x06\xc8\x46\xc8\x49\x21\x70\x3c\x54\x43\x60\x9f\x26\x4c\xc6\x11\x34\xc0\x3a\x9a\x2c\xe2\x11\x75\x79\xc5\x34\x11\xd2\x0d\x19\x13\xe0\x92\x8a\xc9\x8a\x60\x48\x4c\xe0\xea\x14\x81\x71\x21\x00\x32\xc2\x84\x88\x88\x60\xa1\x29\xc0\xb4\xac\x79\x14\xac\x86\x11\x8d\x06\x49\xc6\x77\x15\x05\x28\x00\xe1\x35\x25\xc4\x15\x9f\x94\x7c\xda\xd3\x0d\x4b\xd2\x25\xd2\x42\x9c\x50\xf5\x7d\xdc\x64\x49\x0b\xb3\x64\x9c\x03\x8e\x82\x89\x62\x54\x77\x07\x31\x14\x02\x53\x59\x45\xc3\x4d\xcf\x87\x59\x87\x32\x2d\x82\xb3\x4c\x02\x37\x31\x18\x43\x6c\xdd\xe5\x25\x89\x33\x70\x54\x66\x7d\x2c\xb0\x54\x16\x68\x51\x75\x79\xd3\x11\x81\x81\x60\xb6\xad\x53\x1a\x2d\xcb\x8e\xc0\xb9\x21\x63\x98\x9c\x40\x19\x9e\xee\xb1\x3e\x2f\xf1\xa6\xc8\x28\x0c\xaa\xa3\x18\xb0\x34\xdc\x8a\x6a\x5c\xca\x69\x7e\x60\x31\xae\x42\x93\x9e\xa4\xe9\xa4\x6c\x61\x92\xeb\x48\x06\x80\x31\x1f\xa6\x60\x04\xa7\x14\x9f\xe2\x69\x0e\xb5\x02\x04\x15\x78\x89\x13\x6c\xe3\x6f\xc9\x27\xa3\xb9\x64\x04\xc9\xc7\x56\x61\x82\x40\x09\x82\xe1\x61\x8c\x60\x71\xcc\x52\xfd\x80\xf5\x43\xd7\x50\x68\x41\xb2\x10\x5d\x66\x00\x90\x65\x4e\x81\x25\xdb\x76\x70\xd3\xb6\x24\x21\xa2\xe6\x6d\x29\xaa\xcb\x5a\x40\x07\x16\xe2\x99\xff\x33\x09\x34\x7d\x89\x21\x71\x47\xa4\x3c\x1d\x0e\x4c\x42\xe7\x71\xa0\xe8\x7a\x80\x68\x24\xaf\x22\xa1\xa1\xa8\x11\x9d\x09\x10\x6d\x44\x51\x3c\x03\x53\x14\x12\x51\x59\x9a\x02\x2e\xe2\x49\x88\xac\xd3\x01\x8a\x12\x9a\xae\xe8\x54\x28\xd8\x70\xc0\x71\xb2\x44\x31\x98\xc0\xd0\x91\x75\x79\x84\x57\x11\x4b\x51\x58\x44\x02\xb8\x20\xb2\xb8\xa9\x20\xa8\x28\x69\x92\xe2\xa2\x8c\x42\x13\xac\xc4\x5a\x88\x24\x61\x82\x1c\x32\xa2\xa7\xd8\x1e\x43\x47\xd5\xe5\x1d\x5a\xe3\x65\x8a\xb5\x1c\x10\xf8\x2a\x4b\x72\xae\x11\x86\x82\x07\x13\x36\x6a\x10\xa2\x6b\x3a\x3e\x89\xcb\x9a\xe5\x73\x86\x61\xc2\x1a\x8c\xb8\x91\x25\x1f\x13\x16\x15\x15\x96\x15\x83\x75\xd3\x6e\x0a\x1e\xb0\xb6\x43\xc8\x1c\xcb\xe8\x24\x43\x88\xa6\xe7\xb9\x92\x1f\x20\x96\x49\x71\x2e\xed\x79\xbc\x1a\x58\x11\x9d\x09\x49\xba\x6a\x40\x91\x36\x08\x5d\x06\x93\x55\x42\x14\x43\xce\x67\x25\x9b\x55\x38\x9c\x91\x74\xde\x76\x81\x60\xe9\x40\xf7\x34\x92\xf3\x01\x09\x0b\x92\x19\xd5\xac\x81\x80\x81\x17\x7a\xbe\x6d\xe9\xae\x2f\x23\x94\x47\xf9\x18\xef\x21\x02\x8d\x07\x84\x83\xa9\x5e\xc8\x23\xa8\xa5\x22\x84\x6b\xfb\x21\x42\xc2\xbe\x89\x5a\xfe\xdf\x92\x4f\x46\xd5\xa9\xff\xfd\xe4\x43\x85\xbc\x2f\x59\x16\xca\x18\x8c\xeb\x04\xa4\xc0\x90\x32\xa2\x1a\xbe\xc0\x93\xa4\x8b\xd8\x48\x40\x91\x88\x23\xba\x3a\x6d\xc0\xa6\xef\xd3\x88\x10\x50\x24\x1c\x51\xa3\xf2\x2c\x45\x0f\x50\x93\x0e\x1c\x87\x97\x60\xe0\x10\x34\x0a\x87\x12\x17\x0a\xa4\x26\x70\xbe\x11\xa0\x98\xea\x28\xa8\x83\x86\xba\xa6\xd2\x1c\x2d\xaa\x01\x17\x55\x7d\x03\x05\x52\x28\xfa\x08\x6e\xb9\x1a\x6e\xd2\x22\x1a\x50\x9e\x6f\xb0\x18\x9f\x96\x14\x51\x4f\x25\x61\xc1\x20\x68\x41\xb3\x55\x5c\x37\x10\x9d\x27\xe4\xa8\xba\x3c\x8d\xeb\x30\x8a\xca\xa8\x60\x87\x88\x8c\x3b\x30\x6d\x4a\x3c\xcd\xe9\x34\xad\x7a\x81\x60\xa2\x8a\xcb\xd3\x9c\x46\x87\x9c\x88\x09\x64\x18\xc8\x9e\x67\x46\x55\x55\x08\x25\xd6\x65\x5c\x9c\x53\x91\x80\xb6\x5d\x80\xd1\x9c\x8d\x85\x2a\x2f\x3b\xc0\xc1\x42\xd9\xa1\xad\x80\xb0\x54\xc2\x36\x75\x1f\x0d\x2d\x02\x41\x68\x44\x8e\xe8\x9a\xf8\x14\xeb\xc1\x2c\x89\xb3\xaa\x8f\xd2\x2e\x4e\xf8\x9c\x16\x52\x1e\x8c\x78\xa4\xee\xa3\x88\x8f\x78\xa2\x4b\x52\x1c\x2f\xb0\xae\x02\x78\x07\xc3\x38\x3a\xaa\x33\x01\x9e\x08\x38\x2a\xb4\x03\x8c\x64\x28\xd3\x51\x55\x8b\xd6\x10\x39\x24\x74\x0d\xd5\x75\x5e\xe3\x6c\x03\xf5\x38\xd1\x51\x3d\x84\xd2\x7d\xd2\x24\x64\x32\xaa\x42\x81\xa9\x98\x66\x20\x1a\x21\xcb\x53\xaa\x66\x7b\x2e\xab\x8a\x2c\xe1\x78\xa8\x69\x92\x9e\xe4\xc1\x82\x28\x9b\x96\xa7\xfa\x21\x6c\x1b\xaa\x61\x00\x99\xb0\x9c\xbf\x25\x9f\x8c\xea\xdd\x11\x8c\x7c\x44\x93\x84\x03\x8d\xc4\x30\x1e\x43\x64\x8c\x34\x70\x04\x56\x0c\x13\xa3\x71\x42\x61\x00\x30\xa5\x50\x33\x15\xcc\x40\x15\x49\x90\x25\xe0\xb1\x2a\x2f\x45\xf5\x94\xb7\x41\x40\xab\x9e\xe5\x5b\x0a\x63\x85\xa2\x06\x73\x1c\x8a\x85\x36\xd0\x1d\x10\x3a\x20\xc0\x08\x92\x91\x58\xcd\xd5\x0c\x19\xb6\x31\x5b\xd6\x00\xb0\xa3\x9a\x00\x32\x2c\xf0\x6d\x37\x24\x64\x9b\xe2\x25\xd7\x12\x15\xcc\x14\x48\x02\x27\x4c\xc4\x09\xcc\x80\x14\x78\x4f\x75\x0d\x4c\x62\x6d\xcf\xa2\x70\x4a\x84\x49\x38\xaa\xd2\xb7\x8d\x18\xa4\x4f\x83\x80\x09\x2d\x46\x0d\x2d\x4d\x36\x81\xa8\x30\x32\x6e\x13\x02\x63\xb9\xa8\x8e\xe0\x8c\x1c\xe0\xa8\x62\x1b\xb6\x20\x6b\x3a\x85\x88\x11\x4d\x45\x49\xd5\xf4\x11\x54\x15\x04\xde\x52\x79\xdc\xe7\x01\xa3\x2a\xb4\x26\x9a\xb0\xc5\xa2\x3c\xac\x3b\x32\x89\xf2\x81\xc1\xfa\x22\xa7\x89\xb8\x0b\x03\x51\xa1\x23\x1a\x97\x52\x3a\x4f\x71\x96\xe8\xe3\xa1\x82\xaa\x2a\x07\x7b\xa2\x68\xb0\x21\x11\x78\x0c\x2d\xd2\x3a\xab\x22\xa6\x2d\x52\xc0\x14\x6d\x45\xa6\x11\x5e\x50\x4c\x2c\x8c\x2a\xf9\xd8\x1a\x6a\xe9\x21\x1e\xba\xbe\xac\x11\x08\x81\xd8\x0c\x83\x60\x36\x1b\x8a\x01\xe7\xd8\xb8\x4c\xaa\x46\x88\x1a\xb2\xae\x1a\x8e\xe3\xa9\x28\x2b\xab\x70\x54\x63\x75\xdb\xb1\x64\xd5\x77\x69\x41\xa4\x61\x36\xc4\x42\x56\xe0\x4c\xde\xa7\x54\x03\x53\x04\x51\xc4\x10\xdf\x57\x54\x15\x07\x8c\x6c\xa3\xa2\xeb\xe0\x80\x13\xc1\xdf\x92\x4f\x46\x2b\x68\x11\x8c\x7c\x74\xdf\x37\x69\x8a\x20\x01\xa9\x93\x3a\x4e\x93\x9a\x6f\x87\x96\xa5\x60\x8a\xab\xea\x1a\x1c\x9a\x64\x40\x04\x8a\x47\x98\x3c\x70\x10\xc7\xe7\x80\x0d\xcc\xc8\xd6\x98\x30\x0e\x27\x50\xda\x32\x2c\x46\x65\x15\x97\xb6\x79\x1b\xd1\x24\x02\x93\x70\x13\x38\xbc\x4b\xeb\x3c\xcd\xd1\x0c\xe1\x3a\x86\xa2\x9a\x16\xe7\x92\x51\xad\xbb\x05\xa1\x46\xcb\xa4\xae\xc9\xbc\x6a\xd0\x82\xa5\x70\x22\xe2\xa9\x26\xea\x02\x4f\x92\x10\x86\xd6\x71\xdc\x91\x55\xd2\xe4\x50\x16\xa7\x31\x96\x32\x68\x33\xaa\xaa\x02\xc1\x13\x24\xb0\x6c\xce\x0f\x31\x87\xb3\x35\x34\x40\x8d\x90\xb1\x80\x89\x86\x56\x28\xb9\xb0\x21\x49\x0c\xd0\x05\x57\x07\xbe\xe4\xf0\x81\x40\x8b\x00\x44\x74\x4d\x38\x03\x76\x35\x93\x55\x48\x4f\x97\x48\x32\x50\x09\xd9\x96\x75\x5c\x42\xe5\x40\xe1\x80\x42\x30\x32\xea\xa7\x4d\x32\x2c\x03\xa6\x15\xdd\x46\x58\x98\x8a\xaa\x0e\x46\x3b\x2a\xef\xe2\xb6\xcb\x1a\x0e\x8a\x84\x94\x2b\x9a\x0a\x1f\xa8\xa6\xc8\x69\x8a\xee\xe9\xa4\x88\xeb\x9e\x63\xf8\x44\x10\x88\xbc\x13\x68\x06\xc3\xd0\x46\x54\x05\x67\x8e\xa5\x79\x9a\x94\x48\x8e\x03\x8c\x2c\x59\x2a\x61\xc2\x92\x61\x18\xae\xa2\xb3\xa6\x80\x78\x92\xea\xca\x0e\xed\xd0\x16\xaf\xb3\x81\xe8\xd0\x30\x19\x55\x42\x16\x5d\x55\x23\x65\xcb\xf5\x00\xf0\x03\x8c\xe3\x4c\x92\x80\x11\x55\x62\x69\xc2\x08\x03\xc4\xf4\x55\x53\xc2\x2c\x89\x07\x9c\x68\x90\x32\x8d\xcb\x52\xba\x85\x89\x37\xc9\x27\xa3\x35\xf9\x08\x46\x3e\xac\xc3\xb2\xae\xcb\x7a\xa1\x6f\xb2\x9a\x23\xb2\x2c\x62\x22\x70\x68\x38\xa8\x60\x68\xba\xeb\xd0\x81\x2e\x61\x0c\x61\xdb\x1a\x85\x05\xb8\xca\xf1\xc0\xf6\x22\x6a\x54\x98\x19\x0a\x21\x1c\x22\x1e\xab\xf9\xbc\x25\xc8\xb6\xa5\x58\x96\xee\xe9\x2c\x60\x28\x12\x83\x55\x95\x86\x15\xd9\x93\x14\x5f\xd4\x59\x27\x80\x45\x9c\xd2\x23\x3a\x13\x51\x30\x42\xd9\x37\x6c\xca\xb4\x1c\x25\x60\x64\x46\x35\x70\x44\x63\x03\x98\xd3\x89\x90\xd2\x75\x32\x84\x71\x8f\xe6\x01\x6a\x06\xb0\xe4\xe3\x3c\xa0\x99\xc8\x0a\x89\x12\xcc\xab\x92\x20\x90\xa6\xc4\x38\x98\xec\x73\xa1\x02\x68\xcb\xc3\x59\x13\xd6\x65\xc0\x5a\x8a\x27\x31\x28\xee\xc0\x16\x29\x89\x9e\x85\x86\x74\x54\x8b\xfe\x84\x25\x32\x92\xa6\xb0\x81\xe9\x62\x14\x8a\x59\xa1\xc5\x73\x3c\xe7\x02\x11\x58\x1c\x27\x63\x96\xea\x9a\xaa\xae\x3b\xa6\x10\x30\x14\xec\x11\xa4\x83\x44\x75\x4d\x34\x9a\xc4\x45\x5c\xb3\x02\x06\xa7\xc5\x30\x90\x5c\x81\x42\x60\x9a\x37\xe5\x00\x0d\x3c\x22\x08\x70\x8f\x87\x45\x1e\x35\x7c\x83\xd2\x01\x30\x09\x10\x44\x55\xe6\xd5\x11\xde\xc2\x58\xc7\x09\x59\x58\x82\x55\x01\x76\x0d\x94\xb5\x81\x8f\x52\x26\xf0\x09\x40\x03\x44\xb4\x59\xdf\x92\x05\x19\x55\xc2\x10\xf6\x74\x55\x8e\xea\x4c\x68\x94\x03\xa2\x04\xc8\x40\xf2\x31\x51\xd6\x14\xd8\x35\x78\x97\x08\x5d\x4e\x85\x0d\x17\x35\x64\x39\x60\x6d\x4f\x65\x09\x2b\xb4\x8d\x30\x00\x94\x65\xff\x9f\xe2\xc9\x9b\xcd\x56\x19\xed\x4b\x4b\xd8\x6c\xd5\x61\x6e\x9f\x96\x21\xb2\xaa\xef\xb5\x9d\x97\xba\x3e\xdd\x34\x68\xc4\x3c\x4a\x99\x7c\xf6\xe6\xae\x43\x1b\xab\xae\x9e\x95\x82\x65\x6d\x93\x2e\x34\x56\xa5\x82\xdb\x33\xdf\xdd\x12\x27\x8e\x84\x7f\x98\x13\x7e\x6b\xf3\x4d\xdd\x4e\x0f\xeb\x8c\xa9\x70\xb6\xb4\x37\xb3\x6c\x8f\x4e\x3b\xd2\xbf\x08\x98\xab\xdc\x4b\x62\x51\xc9\x1d\x57\x9e\x54\x6a\xf2\xde\x1f\x55\x83\x75\x57\xb9\x89\x2a\x91\xa3\x87\xcf\xaf\xbe\xdb\x20\xeb\x17\x27\xd2\x6f\x60\x3a\xd4\xe1\x45\xbe\xfd\x05\x57\x0f\xdf\xbf\xf2\x12\xd4\xb9\xf2\xf6\x4b\xf5\xc9\xb7\xbf\x9e\xb9\xe7\xeb\x02\xe3\x8c\xba\xd5\x7b\xf4\x1a\x58\x22\x5d\x68\xff\x91\xf7\xda\x34\xdb\xdf\x6b\x78\xe5\x15\xd5\x2b\x7f\xc6\xac\x2c\xd0\xb4\x92\x78\x7c\x03\x3b\xb9\xc9\xa6\xe1\x6f\x2d\x12\xde\x6a\x96\x7e\x6f\xda\xa6\xf3\x6b\x9b\x98\x58\xb7\xf1\xeb\xd7\x5d\x1e\x52\x3d\x73\xc1\xf2\x5f\x0e\xdf\xdf\x61\xc0\xae\xb2\x15\xda\x41\x85\x7f\x9d\x35\x61\x71\xe9\xf4\xdb\x40\x9d\x9a\xf5\xde\x49\x7d\xd8\xaf\x71\xfd\x6d\xd3\x9a\x7e\x57\x79\x55\x75\xe6\x23\x2d\xae\x66\xbd\x94\x2f\x75\x71\x9e\x7a\x8d\xff\x1c\x9f\x2e\x74\xdb\x8d\xf5\x59\x36\xbe\xd5\xa0\x10\xd7\x45\x6b\xfa\xc9\xbe\xdd\x67\x1e\x2c\xaf\x7d\xe7\x78\xce\x63\x05\x3e\xa8\x75\xe2\x65\x3e\xf0\x6c\xc6\xbf\x37\x5b\x65\x74\x55\x23\x78\x02\xc0\xa6\xc9\x99\x6c\x28\x50\x81\x4c\x08\x3a\x27\xf9\x96\xaf\xe9\xa4\x0a\x7b\x3c\x61\x73\x0e\x8d\xbb\x06\xeb\x9a\x01\x4c\x11\x2c\x05\x0c\xd6\xa0\x70\x26\xaa\xe1\x27\xee\xa3\x86\x64\xc2\xa6\x2b\xa3\x04\xc2\x11\xb8\x44\xa2\x01\x69\x1b\xae\xc6\x02\xde\xf3\x6d\x99\x14\x68\xc2\xd0\x7c\x8d\x33\x10\x8e\x50\xb1\xd0\xa6\x22\x3a\x13\x52\x35\x28\x81\x0b\x38\xca\x83\x2d\x1e\x09\x45\xde\xe0\x2c\x4a\xa7\x69\x9d\xe7\x7d\x92\x87\xb5\x30\x94\xd1\x50\x50\x65\x04\x17\x78\xc9\xd2\x24\xdf\x97\xa2\x7a\x2a\xa2\x21\xce\x49\x24\xa1\xd9\x04\x46\x49\x06\xad\x72\x34\x10\x49\x95\xf4\x60\xdb\xa3\x4d\xc6\x55\x34\x09\xa6\x50\x1e\x11\x70\x9d\xd3\x19\xdf\x72\x88\x20\xaa\x12\xa0\xab\x68\x88\x6f\x73\x12\x8e\x18\x0e\xc3\xb3\xa4\xc1\xf8\xa8\xad\x1a\xbc\xce\x98\xbe\xc2\xf1\xbc\xaa\x5a\x38\xce\x60\x8c\xa2\xc0\x16\x8f\x09\xa2\x2a\x45\x55\xe1\x76\x75\x5a\x21\x39\x32\xa4\x71\x98\xa1\x5d\x1c\xd8\xb4\x02\x78\xd4\x71\x10\x0a\x75\x10\x5a\xc0\x44\x4e\x35\x02\x5a\xe5\x28\x1f\x66\x08\x94\x70\x89\xd0\x89\x6a\xf8\x19\xca\x84\x17\x1a\xc0\xb6\x64\x9f\x94\x2d\x93\x32\xe5\x50\x95\x40\x88\xf0\x82\x2d\xf1\xb2\x48\x22\x22\x8d\x0a\xa6\x46\xc9\x08\xab\xf1\x0e\xef\x9a\x51\x8d\x59\x04\xc7\xe3\x5d\x52\x41\xb8\xd0\xf1\x0c\x9e\xf0\x78\x85\xf4\x50\x05\x26\x02\xdf\xa4\x7d\x35\x34\x58\x46\xf1\x61\x91\xd4\x49\x51\xa5\x50\x01\xf3\x48\xf8\xef\xc3\xcf\x8c\xf2\x74\x14\xc9\x07\xf0\xb4\xa0\x84\xbc\xe0\xab\x8c\x8f\xd2\x12\x89\x61\x22\x8b\x3b\x24\x66\xda\x06\x6b\xcb\xa8\x6f\x72\xa2\xe5\xe0\x96\x43\x72\xbc\x4b\xf9\xb2\x1c\x46\x34\xc0\xa1\x42\xd1\x0d\x61\xd6\xe4\x70\x18\x49\xcb\x41\xa8\xcc\x3a\x30\x21\x20\x9c\x47\x38\x9c\x6e\x31\x82\xca\xa9\x66\xc8\xe9\x01\x69\xe1\x2c\x03\xbb\x14\x07\x4b\x11\x9d\x09\x6f\xa3\x08\x25\x23\x36\x2e\x53\x2a\x23\x29\x4c\x68\xd9\x02\xc9\x6a\x44\x88\x1b\x96\x64\xbb\x9e\x15\x52\x81\x6d\x61\xaa\xea\x33\x16\x6d\x6b\x81\x1e\x44\xb5\x0c\x2b\xb3\x1a\xe2\x4a\xb4\x26\x20\x3e\xcc\x7a\x86\x64\xc8\x0c\x03\x50\x17\xf3\x54\xce\x47\x30\x8b\xc7\x3d\xc4\xb2\xfd\x10\xf6\x64\x09\xb8\x9e\xa8\xd2\x52\x54\xd7\x04\x0e\x15\xc9\x0c\x38\xd9\x47\x6c\xa0\x08\x12\x2e\x21\x1e\x89\xea\xa2\xc9\xd1\x96\x44\x48\xa1\x4d\xf1\x8a\xc6\xd8\x9a\x02\x4c\x93\x14\x28\xd6\xf1\xe9\x88\x66\xe1\x14\xab\x91\x3e\x2f\xe9\x56\xa0\x38\x8e\x49\x02\x43\x61\x65\x9b\x60\xc3\x00\x96\xd9\xd0\x93\xbc\xc0\xe7\x69\x4d\xe6\x6c\xca\xf5\x08\x1f\x95\xbd\xd0\x85\x23\x7a\x34\x50\x84\x2a\x32\x9a\xa4\x9b\x3e\xcf\xdb\x40\x25\x54\xd8\xb0\x70\x9e\x94\x34\xc7\x33\x6d\x84\x22\x31\x41\xd2\x0c\x60\x53\xae\x19\xd0\xac\xc5\x71\xae\x04\x47\x35\x24\xc7\xe5\xb4\xc1\x38\x65\x18\x08\x42\x71\xb6\x4b\x6a\x3e\x65\x59\x34\x4e\x9b\xc0\xe0\x64\xd7\x0c\x03\x85\x16\x28\x5e\x0f\x0d\xd9\xa0\xcc\x10\xe7\x4c\xea\xef\xfb\x1d\x32\x1a\xf9\x45\x50\x78\xd3\x04\x3e\x6d\x46\x8e\xd0\x80\x08\x29\xc4\x44\x38\x37\x44\x4c\x9b\xa5\x55\x80\x6a\x1c\x09\x87\x32\x89\xc9\x9a\x60\x3a\x21\x1c\x62\x81\x8b\xf3\xb4\x19\x51\x47\xa3\x28\x44\xf7\x61\x11\xb1\x60\x60\x6b\xa2\x4e\xfa\x04\xa7\xf9\x8a\xe2\x03\x5b\xd0\x58\x25\x90\x5d\xd4\x62\x29\x5e\x12\x15\x41\x15\xd4\x40\x85\x11\x39\x8c\xea\x56\x5a\xb4\xcf\x19\xb2\x8d\x09\x00\xc8\x7c\xe0\x22\xc0\xc5\x58\x55\x21\x44\x13\x23\x55\x54\x97\x70\x55\xa7\x0c\x96\x81\x49\x43\x27\x00\xe0\x0c\xd1\x91\x22\x1a\x6f\x90\x2c\xca\x92\xa4\x1e\xf2\x34\x1e\xf0\x61\x40\x7b\x3e\x0f\x58\xce\xa0\x2d\x8a\x37\x34\x8d\x55\x05\x95\xe4\x3c\x00\x07\x08\x85\xb8\x0c\x1c\x3a\x04\x0e\x47\x55\xf5\xd7\x01\xe1\x7a\x30\xee\x02\x24\x10\x6d\x8c\x92\x42\x42\xe6\x58\x47\x85\x71\xc0\xd2\x30\xab\x13\x36\x27\x59\xa4\xe7\x20\x2a\x43\x00\x92\x94\x85\x40\x8c\x6a\x5c\x2a\x1b\x1c\x0c\xe3\x24\x4c\x0b\x81\x43\xa2\xb0\x49\xfa\x24\x20\x58\x14\xe7\x84\xc0\x87\x35\xd3\xf0\x08\x3b\x14\x75\x16\x0b\x58\x53\x72\x03\x1f\xb7\x22\x5b\x09\xe1\x18\x85\xc2\x1d\x18\x28\x94\xc1\x18\x32\xec\x18\x1a\x4c\x99\x0a\x27\x89\x04\x46\xc2\x98\xc9\x01\xd3\x72\x24\x99\x27\x34\xd3\x0b\x15\x0b\x37\x70\x25\xaa\xb9\x2f\xea\xca\x1a\x83\x72\xb0\xcb\x20\x08\x10\x5c\x03\x13\x5d\x33\x50\xa4\x90\xb0\x75\x02\x76\x4c\xc0\x90\xa2\x21\x2b\x40\x41\x3c\x5f\x30\x79\x3f\x08\xd3\xed\xd0\x79\x93\x7c\x32\x9a\x4b\x46\x90\x7c\xb8\xd0\xc7\x4d\xd4\x52\x59\x5e\x64\x75\x55\x62\x00\x6c\x31\x4c\x68\x72\x0e\x6e\x51\x02\xe9\x72\x66\x60\x73\x0c\x4e\xb8\xb2\x2a\x4b\x42\xc0\x23\x24\x88\x6a\xd9\x84\x0c\x05\x10\x3a\x84\xa1\xb1\x98\xee\xe0\x36\x4b\x48\x8c\xe1\x07\x3a\xca\x29\x1a\xc3\xd0\x30\x19\xa2\x9a\x17\x88\x84\x04\x23\x08\x49\x86\x0e\x62\x05\x51\xed\xbc\xd0\x43\x4e\x45\xcd\xc0\xa5\x15\x92\x96\x7d\x15\xd3\x2d\x0e\xa7\xbc\x10\xa0\x88\x04\x74\x9a\x13\x34\x2d\x70\x58\x0c\xa8\x20\xf0\x03\x9d\x74\x24\x4b\x89\x68\xf1\x93\x44\x80\xc5\x84\xb0\xa2\xbb\x94\x4a\xda\xa2\x60\x19\xac\x89\x83\x90\x0a\x11\x8d\x00\x8a\xce\xd3\x0c\xe7\x5b\x0c\x85\x98\x86\xc3\xd1\x2e\x27\x5b\x9c\x1c\xd1\xc8\x27\x6d\x2a\xca\x7a\x2c\x85\x12\x1c\xae\x63\xac\xab\x85\x81\x6c\xa1\x0e\x23\xc0\xa6\x8d\xaa\x2c\x0b\x18\x8d\x16\x10\x1a\x67\x25\x2c\x44\x6d\xd9\xf0\x40\x54\x6f\x20\x91\xa1\x0d\x30\x55\xb0\x11\x58\x41\x68\xc3\x62\x80\x69\x71\x3a\x63\x22\x01\xac\x51\xb0\xcd\x6b\x82\x4e\x3a\xbc\xae\x09\x2e\xe9\x3b\x9a\x8d\xd2\xc0\xb6\xa3\x7a\x34\x10\xb6\x83\xa4\x8d\x7d\x42\x1c\x06\xc0\x30\x29\x82\x97\x42\xc1\x47\x64\xdb\xa4\x28\x52\x86\x45\x20\x88\xb8\x82\xb0\x46\xe0\x4a\xa2\xc1\x50\x41\x10\x46\xf5\xb6\x0d\x49\xdb\x0e\x2c\x51\x88\x25\x9a\x94\xa9\x61\x0c\x41\xb0\x01\xa7\xb2\x0c\xcd\x62\x96\x49\xd8\x2c\x0b\x13\x86\xc2\xfa\xbc\x69\x12\x18\x10\x3d\x5b\x0b\xd4\xbf\x25\x9f\x8c\xaa\x53\x11\x24\x1f\x57\x42\x7d\xc5\x0f\x90\x80\x42\x70\x46\x02\x14\x67\x6b\x2e\x2f\x0a\x0e\x8e\x8b\x8c\x63\x00\xd7\xd3\xdc\x50\xa6\x71\x3e\x70\x44\xc1\x30\x9d\x90\x8f\x6a\x1d\x9b\x24\x10\x81\x57\x09\xe0\xd3\x40\xb3\x79\x06\x03\x1a\x8a\x07\xb0\x83\x0a\xa8\xe5\x2b\x38\x61\x2b\x5a\x80\x59\x8e\x84\x28\x18\x8e\x71\x0a\xcf\xa8\x6e\x18\x55\xf5\x09\x55\x05\xc9\xf5\x30\x4f\x23\x71\x3c\xe0\x18\x51\xe1\x74\x2f\x08\x64\x17\xd6\x69\x02\xd0\xaa\x82\xe8\x94\x65\xd2\x04\x11\x72\x2e\x09\x03\x57\x52\xc5\xa8\xba\xbc\xed\xe3\x32\xe1\x84\xaa\x46\x72\xa1\xe9\xca\x92\x85\x5a\x36\x81\x7b\xbc\xe5\x60\x08\x42\x32\x2c\xaf\x22\x1a\x62\xd1\xba\x4d\x1a\xae\x8e\x85\x8e\x44\x46\x54\xdf\x20\x49\x92\x60\x29\x86\x20\x45\x26\x30\x43\x5f\x06\x8a\x82\xe9\x9c\x65\x01\x1f\x01\x3a\x8d\x48\x2e\xea\xb0\x40\xb6\x60\xda\x94\x11\x51\xf1\x00\x2c\x2b\x51\x8d\x7c\x50\x9a\x31\x2d\x8b\x0d\x43\x8e\x37\x4c\x96\x27\x4d\x5f\xd6\x75\xd4\x34\x35\x4b\x97\x45\x46\xf4\x09\x2a\x74\x49\x4e\x45\x04\xc9\xc1\x42\x1b\xb7\x49\x39\xaa\xea\x13\xe6\xca\x24\xcf\x23\x06\x45\x03\x8c\xa7\x0d\x45\x15\x08\x47\xb7\x2d\x82\x06\x92\x6a\xba\x1c\x47\xca\x0a\x6a\x89\x9a\xed\xfa\x00\xc0\xa8\x67\x9b\x41\x54\x8b\x9f\x88\x66\x39\x88\xee\x2b\x2c\x6d\x89\x02\x11\x18\x1e\x22\x51\x2e\x69\x72\xbe\xe9\x04\x34\x83\xc9\x92\xa4\x58\xb2\xcf\xe0\x1c\x1b\x78\xbe\x04\xb0\x00\x48\x7f\x4b\x3e\x19\xd5\xbb\x23\xa8\xf9\x70\xa6\xae\xa0\x1c\x9e\x96\x59\xcc\x80\x13\x7d\x40\xe9\xbe\xa2\x3b\xae\x14\xca\xae\x67\x8a\x0e\xcd\x4b\x0a\xce\x88\x40\x83\x2d\x8b\x91\x6d\xc1\xa2\xa2\x5a\xdb\xd7\x3d\x55\xb4\x14\x5d\xd4\x29\xcc\x09\x35\x24\x10\x10\x84\x0c\x35\x52\x77\x11\x5a\x33\x71\x51\x90\x74\x5c\x87\x31\x27\xc4\x0c\x55\xf7\x2c\x58\x77\xa8\xa8\x96\xd7\x60\x82\x40\x08\xa0\xb2\x9a\xe5\xd3\x9a\x17\x00\x14\xb3\x30\x06\x78\x94\x64\x90\x1a\x6b\x06\x06\xe9\x8a\x0e\x63\x20\xa2\xce\xb8\x4e\xe0\xf1\x21\x17\xd9\xce\x0b\xc1\xc1\x2c\xde\x37\x25\x56\x21\xd3\x1a\x8e\xc4\xb9\xb2\x4d\xe8\x12\x89\x7b\x70\x80\x5b\xa1\x23\xb0\x76\xe8\xc1\x06\x87\x0b\x24\x6d\xa9\xb0\xcc\x5b\x58\x54\x55\x05\x82\xa0\x43\x89\xd4\x79\x93\x71\x68\x4b\xb6\x81\x60\xba\xaa\x15\x18\x04\xea\x60\xa8\xe6\x31\xb8\x28\x19\x36\x21\xf1\xac\x16\xa8\x2c\x8e\x6a\x32\x13\x55\xf5\x49\x08\x0c\x1f\xd0\xbc\x2d\x50\xa1\xee\x3a\xa4\x87\x99\x04\x26\x18\xc0\x37\x54\xdf\x12\x70\x20\xbb\x2e\x47\x0b\x30\xa6\xa3\x80\x87\x0d\xc6\x02\x7c\x54\x5b\x9c\x28\x97\x40\x25\x57\xa0\xd1\x50\x26\x04\x41\xe1\x68\x12\xe8\x32\x1d\xf8\x01\x8d\xfa\xa1\xa9\x08\xbe\xcb\xeb\x41\x68\xd3\x32\x67\x1b\x1c\xf0\x6c\x0d\x45\xa2\x7a\x48\x49\xa2\x8c\x93\x86\x82\x48\x1e\x2c\x5a\x18\x69\xf9\x0e\x90\x55\x95\xd0\x3d\x98\xb5\xf4\xc0\xf3\x68\x9f\x97\x44\x41\x34\x28\x9a\x35\x68\x8e\x42\x35\xe5\xef\x2f\xd8\x65\xb4\x82\x16\xc1\xc8\x47\x22\x45\xd2\x17\x15\xdd\x0c\x49\xc9\x90\x2d\x16\x91\x34\xca\x24\x3d\xc7\xe1\x61\xcb\x47\x0c\x1e\x91\x69\x84\x33\x4c\x54\x57\x14\x9a\x64\x09\xce\xa4\xa3\x9a\x62\xe0\x12\x2e\xa2\xae\x43\x86\x8c\x4a\x84\x64\xc8\x13\xa8\xc0\xb0\x28\x4e\x10\x1c\xce\x00\x86\xb4\x74\x98\x71\x2c\x4e\xc0\x45\x59\x02\x04\x62\x18\x5c\x18\xd1\xcb\xeb\xa4\xee\x0a\x8e\xcf\xdb\x82\xed\x51\x32\x2c\x8a\x26\xa9\x63\x30\x63\xf8\x8a\x09\x63\x0c\x90\x80\xe2\x22\x82\xea\x0b\xb4\x87\xe2\xaa\xae\x90\x2a\xa6\x9b\x51\x8d\x06\x65\x4f\x0c\x71\x3f\x04\x96\x22\x00\x12\x0d\xb1\xd0\x22\x7c\x4b\x76\x35\x5e\x04\x36\xc0\x5d\x52\x0b\x1d\xcb\xf1\xfc\xd0\xa7\x39\x13\xc6\x08\x4f\x66\xa2\xda\xd5\xc8\xf8\x3c\x26\x90\x96\x21\x23\x36\x81\xa1\x84\x64\x63\x3e\xad\x30\x32\x4c\x60\x0e\x42\x52\x96\xcb\x29\x2c\xa0\x59\xcc\xe3\xd0\x80\x76\x68\x34\x34\xa5\x88\x2a\x72\x24\x07\xe3\x8a\xa2\x13\x01\x67\x98\x84\xe9\xbb\x0e\x11\xfa\xb4\xa4\x98\x92\xa9\x22\x0a\xcc\xab\x4a\x00\x9b\x14\xac\x69\x9a\x6b\xb9\x3e\xeb\x62\x3a\x67\x47\xf5\x22\x26\xac\xd2\x2e\xc3\x8a\xb2\x02\x5c\xc3\x05\x84\xe6\x11\x38\x81\x79\xa6\xa7\x58\x8e\x68\xd2\xae\x14\x04\x38\xa6\x8b\x02\x07\xd3\x70\x60\xd0\x08\x27\x47\x95\x7c\x28\xc6\x23\x44\x94\x14\x7c\x1d\x76\x42\xce\xd7\x71\x51\x64\x05\x40\x84\x96\x4b\x22\xaa\xe6\x11\xb0\x28\x07\x02\xe7\xd1\xa4\x0e\x03\x5c\x23\x3d\x44\x80\xc3\xbf\x25\x9f\x8c\xd6\xe4\x23\x48\x3e\x74\x48\x05\x6e\xc0\x00\x87\x32\x64\x49\xe2\x78\x5d\x91\x55\x2d\xa4\x34\x33\x00\x84\x03\x93\x2c\x8d\x5b\xb0\xc2\x59\x06\x66\xe1\xa8\xcd\x19\x38\x47\x45\xd5\xa8\x14\x87\x76\x51\x1b\xa3\x69\x12\x08\xba\xe4\x10\xb6\xce\x39\x06\xab\x62\x3e\x42\x08\x22\x45\xa0\x86\xe0\xf8\x36\xcf\x9a\x0c\xaf\xd8\x9a\xe6\x07\x68\x10\xd5\xc8\xc7\x27\x64\x2a\x94\x34\x9e\x22\x74\x49\x56\x09\xc3\x44\x5c\x4b\x77\x03\x02\x0d\x69\x17\x71\x7d\x07\xe3\x31\x86\xe7\xd1\x50\x42\x50\x3d\xc4\x8c\xc0\xa4\xa3\x7a\x99\xcc\x93\x10\xd7\xd2\x38\x87\x21\x38\x18\x98\x16\x47\x13\x1a\xeb\x86\xa8\xa9\xdb\x2c\xe3\x02\x5d\x63\x28\x1d\xd1\x4d\x3d\xe4\x3d\x5f\x22\x58\x03\x73\x95\x88\x16\x73\xa9\xc0\xa2\x45\x0a\x00\x9b\x34\x42\x9c\x34\x50\x46\x37\x3c\xc0\xe2\x30\x65\x00\x49\xf2\x3c\xcb\x21\x1d\x80\x89\x14\x67\x4b\x62\xc8\xf2\x1c\xe5\x9a\x91\xbd\xe3\xc2\x21\xa2\xef\x8b\x06\x66\x31\x0c\x6d\x59\x76\xe8\xea\x81\xae\xe9\xc0\x33\x5d\x8a\xb2\x70\xcf\xa1\x19\xd5\xc4\x59\xd7\x06\x2c\x1f\x02\xcf\xc7\x1c\x2a\xb2\xea\x13\xce\xc3\x1c\xea\x39\x46\x28\xd2\x88\x4b\x98\x0c\xcd\xb9\x82\xa1\x29\x28\xa5\xa0\x21\x23\xc1\x81\x21\x0b\x8e\x8e\x22\x9c\x42\x28\xb0\x4d\xa1\x8e\x1c\xd5\xee\xd7\x90\xc3\x78\x13\x45\x10\x87\x57\x1c\x4c\x41\x48\xd7\x97\x45\xc2\xc2\x34\xc7\x77\x3c\x05\x31\x00\x62\x39\x0c\xe7\x13\x1e\x12\x12\xb4\x00\xcb\x1c\x87\xb0\x7f\xdb\x6c\x95\xd1\x97\xbd\x12\x36\x5b\xd5\x9e\xfe\xa8\xeb\x07\x5d\xa9\x1c\x8d\xaf\x67\x41\x3b\x96\x8d\xbf\xee\x4e\xce\xfd\x3c\x57\xff\x45\xcb\x5e\x2d\xfa\xe0\xcb\xcc\xd7\x46\xa4\xff\xc2\xd9\xc4\x62\x7d\xba\xdb\xc5\x0b\x33\x93\x0b\xb5\x9e\x98\xa9\x73\xbb\x22\xd7\xcf\xb4\xb3\xcf\x1e\x7f\x4a\xbd\x48\x15\x8c\x7e\x3f\x6e\xee\x97\x2e\xb4\xc2\x99\x7a\x1f\x8f\x3f\x73\x74\x4b\x99\x26\xaf\x14\x45\xff\xe5\xee\xfa\xc6\x8f\x68\xb6\xf0\xcf\x87\xff\xca\xd4\xf7\xf1\x00\xf5\x40\xfa\x6f\x50\xd5\x2b\x29\x6b\xc7\xdf\x69\xb5\xe6\xd7\xc3\xcf\x17\x36\xdd\xb3\xae\x48\xdb\x1a\x55\xbf\xfd\x29\xf3\xe6\xaa\xed\xbe\x68\xb7\xe8\xc2\x7e\x2d\xfd\x0e\xaa\x6e\xe5\xfb\x1d\xeb\xb4\x73\xbd\x66\xa8\x7b\xc7\x0e\x5a\x5e\x6c\x53\xaf\x0b\xad\x9b\x8d\x7d\xde\xfe\x72\xfb\x79\x27\x0f\xb6\xbf\x75\x26\xfd\xb9\x2e\xc6\x72\xf6\x69\x79\x65\x0c\xd5\x90\x3d\x7b\xf4\x59\xc5\xf3\x7f\x30\x3b\x5b\xe6\xe7\xdf\x95\x3e\xd6\x9f\x8c\x1f\x38\x7f\x1d\xbf\x26\x5d\x68\x7b\xb2\xec\xb2\x4f\x82\x1d\xf7\xc7\xb9\x3f\xbd\xfd\xeb\xce\x53\x65\x36\xef\x3c\x38\xf1\x65\xbd\x73\x62\x9d\x75\x57\xfa\x1d\x9f\x75\x74\x47\xba\xd0\xb1\xdf\xdb\xec\xd0\xb1\x0f\xa0\x3a\x9d\x7f\xfe\xf1\x83\x8a\xc3\x96\xc1\xd9\x07\x95\xbb\x57\xa1\x79\x58\xae\x51\xbd\x9c\x1d\x37\x3d\xac\xf2\xef\xcd\x56\x19\x5d\xd5\x08\xe6\xbe\x04\xcf\x71\x92\xe4\xc2\x08\xc7\xa3\xbe\x1c\x5a\x36\x46\xb8\x26\xa5\x10\x0a\xcd\xeb\x20\x54\x81\x05\xc8\x10\xa5\x45\x91\x15\x3d\x4b\xd4\x18\xc6\x0c\xa2\x2a\xa8\xe0\x94\xc7\x32\x3a\x82\xd3\xae\xc7\x33\x02\xaf\xa0\x88\x26\x68\xae\x4d\x6b\x2c\x63\xe9\xa1\xa0\x22\x02\xac\x70\x4c\xda\xcc\xd4\x47\x09\x3e\x54\x1c\x32\xaa\x67\x11\x2e\xba\xa1\xe6\xe2\x8a\xe5\x58\xb6\xa4\xe0\xaa\xc0\x05\x9a\xca\xc8\xa1\x89\x58\x80\x55\x2d\x8f\xb6\x7c\x93\x07\x0a\xc9\x8b\x82\xad\x09\x9a\x0e\x47\xb6\xc3\x9e\x61\x11\x58\xc3\x04\x01\x47\x1c\x8c\x34\x18\x1c\x97\x51\x06\xe7\x3d\x97\x55\x1d\x93\xe7\x64\x83\x80\x1d\x89\xc1\x2d\xce\x85\x0d\x8b\x45\x80\xc5\x23\x51\x7d\x4f\x0a\x31\x39\x0d\x67\x39\x99\x63\x59\x4e\xf5\x50\x05\x63\x3c\xd3\xd7\x2c\x9f\xc1\x1d\x05\x15\x05\x41\x02\x9e\x20\x3b\xba\x6b\xd8\xb4\xe5\x1b\x1e\xc1\xd2\x51\x55\xb8\xd9\xd0\x63\x3d\x15\xa3\x35\x9e\x53\x09\x15\xd1\x65\x23\xe0\x54\x06\xc5\x75\xd2\x06\x40\x71\x39\x5a\xd6\x08\x1e\xf6\x60\x93\x11\x84\xd0\xf6\x3d\x3b\x8c\x6a\xc2\xe4\xa1\x3a\x1a\x86\x08\x8f\xea\x98\x41\x58\xb0\xa0\xd8\x8e\xa8\xfb\xaa\xc9\xc2\x9e\x80\x92\x88\x64\xa3\x76\x10\xfa\x0e\xab\xa8\x82\xcb\xf9\x6e\xe0\x29\x51\xb5\x13\x89\xa6\x29\xdc\x93\x3d\x9e\x02\x1c\xe3\xc9\x12\x65\xeb\x96\xe1\x0b\xbe\x64\x82\x50\xb6\x64\x06\xe0\xbe\xa6\xe3\x01\x26\x4b\x34\x02\x48\x20\x22\x24\xf6\xb7\xe1\x67\x46\x79\x3a\x82\xe1\x27\x08\x59\x5e\x10\xd5\x40\xd1\x10\x2e\x64\x79\x0c\x55\x01\x85\x4b\x88\x8f\xf3\xb6\xe5\xa0\x92\xca\x68\x30\xa2\xf9\x4a\x80\x72\x0e\xcc\xbb\xb4\x41\x83\xa8\x5e\x13\xd5\x42\x5f\xc5\x15\xd5\x33\x4d\x03\xf7\x61\x0b\x53\x50\x0f\xe1\x45\x41\xa7\x61\x09\xb0\x2a\x2e\x78\xb2\x40\xea\xb0\x23\x62\x1c\xe3\xdb\xb4\x0e\x14\x3b\xaa\x12\x20\x6e\x4a\x96\xca\x10\xbe\x0e\x28\x9e\xd0\x60\x54\x17\xd8\x00\x85\x55\x05\x28\x96\x8e\x6a\x84\xed\xb9\x3a\x66\x92\x58\x18\xa8\x74\xe8\x7a\x96\xcf\x07\x51\x15\x54\x80\x62\x72\x9e\x80\x86\x9c\x25\xb9\xa8\x8f\x29\x40\x40\x44\x54\x36\x31\x5e\x83\x19\x4c\x21\x04\x42\x24\x10\x91\x72\x35\x98\xc6\x18\xd9\x65\x1d\x8c\x8a\xaa\xea\x0f\x6b\x9a\xa5\xe1\x9e\x2e\x20\x22\x21\xb1\x8a\xca\xf8\x96\x8e\xca\xb0\xeb\x0b\x2c\x0f\x93\x32\x6f\x8b\x12\x42\x3a\x9e\x2e\x30\x2c\x6c\x0b\x6c\x28\x99\x91\x7d\x84\xc8\x92\x18\x4e\x10\x04\x4a\x10\x2c\x1c\x31\x24\x06\xa5\x6d\xc1\x77\x61\xc2\xb0\x59\x86\xe4\x6d\xd4\xa5\x1d\xce\x76\x02\xc7\xa0\x60\x46\x43\x15\xde\x8e\xaa\x2c\x8a\x07\xb4\x04\x2c\x10\x7a\x88\xa2\xb9\x88\x13\xf0\x84\x10\x90\x9a\x06\x8c\xd0\x65\x02\x58\xe2\x55\x8a\x52\x00\x8b\xd2\xb0\xe3\xf2\x36\x8a\x68\x48\x18\x59\xe1\x4d\x08\x50\x21\x70\x00\x0a\x7b\x8c\x88\x61\x06\x12\x52\x3c\x81\x92\x94\xe6\xca\x98\xe2\xf3\x58\xa0\x33\xbc\xeb\x38\x94\x4f\x8a\x86\x44\x5b\x82\x2d\xfe\x7d\xbf\x43\x46\x23\xbf\x28\x0a\x6f\xa1\xa5\x02\xc6\x26\x7c\x58\xf7\x5d\x5e\xb0\x1c\x4e\x52\x29\xcd\x86\xdd\x00\xc7\x18\x24\xe4\x55\xd1\xf1\x49\x06\xf3\x7d\x5e\xb5\x11\xc1\x13\x05\x29\xaa\xec\x8d\xf1\x8e\x42\x2b\x2e\x1e\xc0\xb4\x04\x80\xa4\x0b\x0e\x0f\x18\xc7\x0b\x68\x89\xd0\x74\x09\x95\x19\x25\x34\xf9\x80\x20\x0d\x1d\xc5\x68\x41\x64\x0c\x3b\xaa\x17\x9b\x5d\x06\xa7\x2c\xdf\x72\x68\x5e\xc6\x39\xd7\x09\x02\x98\x0f\x43\x58\x67\x54\x52\xc2\x1c\x46\xe0\x75\x80\x85\x28\x69\xdb\x28\x6b\x63\xbe\x6a\x1a\x34\x1c\xd5\x06\x34\x5e\x53\x42\x0f\x41\x4c\xd5\x80\x11\x5d\x15\x5c\x32\x94\x80\xa4\x86\xa1\xa8\x18\x22\xd0\x64\x92\x09\x34\xd5\xa2\x05\x51\x55\x29\x01\xa5\x60\x04\x8b\xea\xb3\x7a\x94\x4a\x28\x80\xd2\x14\x85\x32\x61\x8c\x74\x75\x82\xd5\x50\x13\xe8\x24\x2a\x04\x96\x83\x98\xa2\x8f\x1b\x0a\x25\x5a\x22\xe1\x1a\x2c\xac\x0b\x86\xed\x4b\x11\x75\x79\x4a\xe4\x74\x87\x16\x30\xc1\x07\xae\x45\x84\x1c\xc5\x49\xb2\x82\x8a\xa2\xad\x18\x3a\x01\x6b\xac\x6c\xe8\x22\x8c\x86\x1e\x05\x7b\x38\x4c\x3a\x12\x2b\x58\x51\x2d\x39\x1a\xa2\x40\xa2\x2e\xc9\xcb\x9e\xed\x72\xba\x4b\x23\x14\x19\x58\xa2\xa1\xa3\x14\x4a\xd2\x3a\x4d\x70\xb6\x20\x1a\x86\xce\x22\x81\xa9\x0a\x94\x89\x84\x62\x64\xb3\x70\x53\xe5\x19\x0e\xe0\xba\x2a\xa1\x24\x4a\xea\xac\x4a\x03\x02\xc0\x9c\x66\x49\x3e\xe5\x38\x18\xca\x58\x06\xa7\xd9\x01\xac\x72\xaa\xcf\xf9\xb4\x2a\x06\x7f\x4b\x3e\x19\xcd\x25\x23\x48\x3e\x62\x20\xf9\xa2\x87\x70\x81\x4c\xd1\x32\xaf\xb2\x66\x48\xd9\x40\xf3\x0c\xdd\x83\x59\x4d\x95\x44\x9f\xf3\x24\x53\x56\x39\xd8\xe1\x2c\xc5\x63\xd0\x20\x70\xa3\xea\x68\x96\x1c\x72\x14\xec\xf8\x98\x65\x21\xb8\x43\xdb\x1e\x08\x64\x95\x67\x5c\x95\x74\x09\xc4\xf2\x48\x4e\x08\x75\x10\xb0\x94\xa2\x32\x86\x85\x48\xa2\x19\xd5\xf2\x9a\x80\x00\xc7\x36\x54\x5a\xd5\xd1\x90\xd7\x19\x3c\xc0\xd3\x1e\x1c\x92\x42\x88\xac\xa8\x73\x14\x4a\x68\x21\xa9\xa0\x0a\x63\xa9\x98\x63\x78\xa4\x2a\x44\xf6\x81\x3f\x59\xe1\x95\x80\x21\x05\x3e\x70\x3d\x03\x21\x6d\x12\x11\x31\xd4\x20\x4c\x14\x06\x2c\x2a\xeb\x30\x8f\x0b\xb2\x8f\xab\x06\x02\x33\x80\x72\x34\xd9\x0e\xa3\x7a\x34\x84\x64\xc0\x03\xc2\x16\x70\xca\x41\x79\x49\x73\x78\x58\x36\x00\x43\x02\x8e\x70\x6c\x04\xa5\x6d\x1a\x63\x42\x9c\xa6\x01\x83\x29\x28\xcc\xf8\x32\x6c\x46\xb5\xb9\x5b\x0e\x58\x5f\xd4\x10\x95\xf0\x11\x9b\x0f\xf4\xc0\x0a\x25\x16\x47\x3c\x0a\x0f\x7c\x8b\x0a\x1d\xcd\xf3\x43\xdc\x33\xa9\x30\x10\x6c\x56\x34\x3d\xd7\x89\xea\x93\x2e\x24\x45\x73\x02\xea\x12\xa4\x8a\xa2\x36\x62\xc3\x8c\xcf\xe1\x94\x8e\x78\x9e\x87\x90\x2a\xc1\x90\x2c\x90\x31\x4f\x66\x31\x97\xc2\xd0\x50\x0e\x30\x99\x24\x23\x2a\xbc\x51\x88\xe7\xca\x0a\x09\x74\xcd\x52\x2d\x9b\x08\x4c\x57\xa1\x02\x1f\x13\xa9\x50\xe2\xb9\x30\xd0\x69\x15\x86\x5d\x42\x24\x49\xc3\xc5\x11\x82\xf3\x24\x84\xfa\xfb\xf7\x1d\x32\xaa\x4e\x45\x50\xf3\x61\x42\x9e\x32\x5d\xd9\xa2\xe8\x80\x33\x38\x2e\x50\x64\x5c\x15\x2c\x4b\xc4\x51\x5f\xd5\x50\x5c\x06\x82\x69\x60\x81\xc5\x79\x02\x70\x34\x06\xa6\x8c\x80\x88\x6a\x9b\x39\xc5\xa9\x24\xcb\xf1\x84\xa9\x8a\x12\x02\x14\x80\x2a\x40\x35\x4d\xd4\x45\x08\x86\x17\x50\xd4\xe4\x11\x82\x83\xf1\x00\x10\xb8\xc6\x30\x34\x8a\x46\xd6\xd1\x60\x46\x63\x03\x40\x9b\x81\x15\xf0\x42\x28\xd2\x5e\x68\xea\xbe\x8a\xf9\x08\xaf\xfb\xa4\xed\x53\xb8\xac\xd1\x18\x46\xf2\x8c\x62\x9a\x1c\xad\xa1\x41\x64\x55\x05\x9d\xc7\x30\x8c\x87\x03\x51\xd3\x61\xd2\x96\x81\x16\x48\x9e\x25\x0b\x52\xe0\x22\x84\xc5\x98\x81\x03\x54\x2b\x34\x24\xcf\xb1\x5d\x98\xb6\x98\x40\x96\xa3\xaa\xb4\x98\x38\xe6\x6a\x88\x09\xfb\x2c\xae\x23\x98\x4f\x5b\x18\xe0\x2c\x47\xe1\x4c\xcc\x54\x15\x3b\x54\x7c\x24\xf0\x75\x18\x18\x70\x5a\x33\xb1\x35\x12\x44\xf5\x8a\x35\x89\xbb\xb6\xab\x9b\x4a\x08\x04\x9e\xa5\x61\xcd\x65\x38\xcb\x34\x61\xd6\x70\x30\x04\x66\x05\x9d\xc0\x5c\x82\xa0\x02\x2b\x14\x03\x11\x51\x81\x45\x07\x51\x6d\xca\x23\x79\x85\xa5\x50\xd5\x85\x39\x4e\xc5\x70\x47\x36\x80\x46\x8a\xb8\x80\x2b\x1c\x62\x6a\x14\x4b\x68\x3a\xa0\x79\xc6\xd3\x2c\xdb\xb1\x3c\x04\x45\x3d\x33\x88\x6a\xe4\xe3\x9b\x6c\x40\x1a\x38\xac\x84\x88\xc9\x08\x94\x66\x19\x8c\xad\xe2\x02\xc6\xa8\x6e\xa8\x21\x32\x82\x01\x3a\x24\x3c\xde\x85\x15\x5b\xf3\x01\x02\x14\x92\xfa\x5b\xf2\xc9\xa8\xde\x1d\x41\xf2\x51\x4d\x84\x67\x18\x29\xf0\x03\x1a\x71\x14\x9c\x74\x5c\x07\x46\x58\x9c\x72\xfd\x50\xe7\x6d\x44\x0c\x51\x05\x31\x65\xc1\xe2\x31\x8d\x21\x61\x96\x95\xa9\xa8\x5e\x26\xa3\x34\x14\x23\x2c\xd3\x60\x54\x4a\x47\x51\x85\x73\x65\x0e\x36\x83\x90\x67\x03\x09\x57\x6c\x0c\x11\x58\x12\x43\xff\x3f\xda\xfe\x3c\xf8\x9f\xa7\x2a\x0f\xc5\x5d\x12\x02\x6a\x5c\x7e\x46\x05\x0d\xa0\x82\x80\x5b\xfc\xd9\xdb\x88\x88\x41\xd9\x04\x51\x5c\x82\x60\x54\xb4\x7b\x7a\xba\xa7\xd7\xe9\xee\xe9\x1d\xc4\x3d\x06\x15\x0c\x46\x11\x42\x90\x5c\x20\x91\x1b\xb8\x80\x80\x40\x14\x50\x22\x90\x28\x22\x02\x0a\x91\x18\x4c\x8c\x31\xa2\x20\x1a\x45\x04\x8c\xb9\xf5\x4d\x15\xd6\xa7\xfc\xa4\xea\xf3\xcf\x9d\xff\x4f\xbd\xdf\xaf\x9a\x99\x7e\xfa\x9c\xe7\x3c\xe7\x39\x2e\x86\x1c\x97\x72\x60\x94\xd5\xb8\x8a\xf3\xa1\xbc\xfa\xb3\x4d\x01\x6a\x9e\x4b\x99\xe7\xe4\x54\xef\x7d\xcb\x79\x5b\x6b\x04\x74\xf8\xbd\xd5\x03\x37\x9e\xf8\x82\x39\x13\x83\xdb\xab\x0e\xda\xde\x9a\x97\x6c\x71\x4b\x0f\x5d\xf0\x8d\x27\xc4\x8d\x6c\x47\xd2\x65\x99\x4d\xfb\x5d\x21\x31\xb9\xc8\xa1\x2a\x6f\xcc\x49\x86\xe4\x57\x01\x32\xed\xb8\xef\x64\xdd\x77\x92\x8f\x1a\x19\x5a\xc9\xa1\x2a\x73\x8c\x0e\xe3\x7d\x9c\x74\xa0\xc2\x39\xc4\x8e\x38\xb7\x52\x3d\x55\x01\x17\xb5\x1c\x69\x2c\x02\x32\xa4\x9b\x4c\x4e\x1d\x81\x8c\xa5\xb6\x35\x6c\x27\x31\x1d\xe2\xb5\xc7\x03\x6a\xcd\x35\xb6\x41\xf4\x44\x62\xa8\x02\xea\xab\xd4\x28\x3d\xac\x78\x5f\xba\x9e\x5d\x8e\x1c\xe0\x74\x54\x02\x0c\xdc\xde\xce\x06\x11\x5e\x0e\xe2\x8c\x05\x61\xb8\x45\xe5\xad\xc4\x00\x56\x75\x15\xfb\x24\x36\x28\x2d\x6c\xaa\x9d\xd3\xf3\x79\x40\x69\x77\x10\x6d\xe0\x3b\x18\x09\x3a\xcb\x42\xd8\xe2\x50\x04\xf2\x35\x6d\x66\x99\xcb\x6a\xce\x9b\xc0\xe7\x56\x1d\xb4\x0b\xca\x2e\x19\x40\x1c\x3e\x8e\xc5\xab\x2e\xe9\xae\x93\xbd\xed\xfb\x72\xb6\xb7\xee\x80\x76\x5e\x9b\x94\xc3\xd1\xfc\x10\x1d\x32\x08\xd6\xdd\x5c\x65\xcf\x7a\x5b\x51\x0c\x8d\x4d\x70\x00\xac\xf2\xb0\xa1\x2b\x9c\x70\x3e\xce\xec\x6d\xe8\x51\xd1\x8a\x25\x26\x67\x1e\xd8\x61\xe5\x5c\x9c\xe0\x2a\xbd\x03\xac\xc1\xd7\x32\x80\xe7\x32\x0b\x29\xf3\xb2\xd9\x0a\x20\xb6\x5e\x9f\x40\xec\x6b\x31\xad\x1b\x4e\x76\x95\x35\x20\x3e\xa5\xc1\xd3\x65\x4c\x4b\xee\x59\xca\x89\xa0\xf6\xe7\x71\xee\x61\x62\x62\x97\xb2\x60\xbc\x94\xc4\xb8\x0e\xf0\x38\x88\x63\x54\x2a\x37\x40\x0b\xd0\x45\x76\x99\xc9\xb2\x5b\x89\x5f\x11\xce\x80\x31\x62\xec\xc0\x13\x95\x31\x34\x0e\x6b\xb2\xb6\x0f\x74\xc0\xc1\x67\x90\x3a\x1b\xc1\xce\x65\xe7\x6e\x5e\xc5\x83\x41\x4a\x59\x39\x76\xe0\x78\x68\x50\xf3\x60\xbc\xb7\x26\x14\x3e\x4d\x4e\x8b\x4f\x86\xd4\x6a\x00\x5d\xf0\x09\xea\x21\xfa\xda\xeb\x55\x62\x2b\x5a\xf5\xb4\xc4\xa0\x61\x1b\x3f\xa0\xa3\x16\x47\x56\x0c\xe8\x73\x1e\x4b\x35\x08\x99\x95\xf9\x13\xf7\xbe\x95\x93\x04\x52\xc0\x11\xe6\x55\xd7\x25\x06\x4b\xd9\x03\xba\xed\xdb\x2c\xa3\x9a\xca\x0d\x71\x6d\xda\x7d\x66\x90\x54\xed\x5b\x88\xc5\x2b\x48\x1b\xc9\x35\x22\x8d\x8f\x7e\x43\x5e\xfa\x21\xf0\xb9\x55\x4f\xfe\x8a\xb2\x4b\xd0\x8c\xa4\xe8\xda\x09\x14\x15\xb5\x3a\xda\x63\x5d\x96\x53\xb7\x56\x05\x1f\xe2\x58\xcb\x14\x63\xe5\x48\x04\x16\xf0\x82\x69\xbe\xaa\x8b\x81\xb6\x98\x38\x83\x22\xcc\x45\xe2\xa3\xcc\x75\x41\x5b\xb7\x56\x89\x02\x13\x5c\x29\xe5\xab\x1d\x24\x55\xdd\x93\xaf\x68\xaa\xb0\x5d\x27\xda\x0d\x5c\x02\xb2\x26\xb8\xee\xa3\xba\x82\xce\xf5\xdc\xd6\x72\x2e\x22\x22\x2a\xa9\x06\x89\xe9\xb3\x19\xe6\x78\xa1\x68\x1c\xc0\xb4\xcb\xc8\xd5\xbd\x76\x47\x57\xa9\xd1\xa1\x36\x3d\xe7\x56\xaa\xae\xc3\x95\xcc\xf1\x08\x21\x72\x87\xec\xa1\xfa\xb2\x10\xab\x29\xdb\xc9\x9e\x76\x73\x11\x0f\x46\x7d\xd1\xc0\xda\x68\x60\xc0\x60\x57\xfd\xe4\x3b\x5f\x28\x25\x5c\x5a\x87\xd0\x79\xb8\x53\xa4\xe0\x59\xdd\x56\x4c\x89\x09\x04\x6e\xf0\xa2\x83\x46\xbb\x05\x19\xd6\x1a\x4f\x66\x52\xd0\x31\x53\x89\x80\x50\xbb\x28\xdb\x40\xd6\xaf\xdc\x83\x68\x15\xe0\x18\xa5\xa5\x76\x01\x9a\x35\x57\xb1\x94\x19\x67\x65\x78\x01\x83\x9f\x3d\x92\xa0\xbc\x52\x05\xce\x3d\xed\x76\xec\x78\x6b\xe8\x20\x47\x9d\x6d\x03\x8b\x8d\xb1\x95\x5e\x33\xbc\xea\x6a\xb0\x02\xcf\x33\xe0\xb4\x88\xc9\x4b\xae\x33\x4a\xb4\xb6\x4e\xfc\x74\xf2\x14\x0d\xd8\xc3\x6f\x39\x25\x4f\x8e\x82\xb3\xc7\x66\xc9\x71\xb9\x49\x6c\x75\xab\xdd\x88\x7f\x4d\x6c\xf5\x2d\x4f\x78\xe5\x6b\xde\x74\xb7\xa7\xbe\xe9\xe3\xfe\xef\x97\x3f\x85\xfc\xbb\x7b\xfd\xab\xd7\xdf\xf1\x5f\x7d\xfc\x7f\x7d\x1b\x7a\x0f\xfb\xf4\xaf\xfe\xf8\xdb\xdf\xff\xbf\xff\xfe\x0d\xa1\x1f\xf1\xe4\xa7\xfa\x07\x7e\xf9\x77\xde\xe9\xb3\x9f\xfa\x81\x2f\x7d\xd7\x13\x7e\xf2\x9e\x9f\xf1\xa7\x77\xfb\xa9\xf0\xab\x2f\x79\xda\x17\x3c\xf8\x97\xfe\xc6\x0f\x7d\xe4\xc7\xde\x18\xfa\x2f\x7e\xe4\x6f\xbc\xeb\x33\x7e\xe8\x01\xbf\xfb\x79\xf8\x57\xff\xec\xef\x3d\xff\x1d\xef\x56\x2f\x7a\xd9\x7f\x7e\xfe\x83\x7f\x95\xfc\xa3\xcf\x7f\xe5\xbf\xb8\xcb\x17\xbd\xe4\xc6\x85\x9d\xb7\xbb\xcb\xf1\x29\x4f\x78\xd3\x13\xe6\xcf\x7d\xd2\x73\x3f\xfa\x9f\x7d\xfa\x1d\x5e\xf7\xc0\x47\xfd\xf9\x07\xfe\xd7\x1b\x3e\xe7\x53\xef\xf7\xf4\x2f\xfe\xb8\x8f\xf9\xfb\x2f\x7a\xfb\x0d\xa1\xcf\x14\xff\xed\x3e\xef\xfd\xe9\xf2\x56\xfd\xb7\x1f\xfa\xd4\xf1\xd8\x37\x3c\xcf\x3d\xfb\x37\x1f\x12\xc0\xa3\xbf\x39\xfe\xf0\xcb\x5f\xf4\xcf\x7f\xf6\x61\x6f\xbd\x21\xf4\x93\x1e\x76\xf7\x8f\xfa\xdc\xfa\x65\x5f\xfc\xb4\x27\x7d\x31\xfe\xed\xc7\xff\x97\xbf\xfb\xfe\x3f\x78\xfc\xe3\xbf\xb8\xfe\xd1\xb7\x3c\xd7\xfd\xdb\xd7\x3f\xea\xa5\x8f\xfc\x2f\x37\x84\xbe\xfc\x67\x7e\xeb\x47\x7f\xe0\x39\x8f\x7b\x3b\x79\x0b\x7c\xf2\xb7\x8a\x7f\xf9\x98\xfb\xbd\xfa\xbf\x3f\xe5\x99\xff\xe3\x01\xdf\x74\xfb\x1f\xfe\xdc\xf7\x3c\xf6\x6e\xf7\x7a\xdd\x0d\xa1\xff\xea\xa1\x9f\xbf\xfe\x9b\x97\x7c\xe2\xbb\xbf\x87\xed\x3f\xf0\x1f\x1f\xf2\xea\xff\x76\xfc\xaf\xdf\xfd\x0a\xfc\xe6\x67\x3f\xe3\xd1\xaf\xb8\xe7\x8f\x3c\xfb\x27\x3f\xf7\x4f\xfe\x4a\x6c\x75\xab\xa7\x7a\x85\xdc\x96\x40\xb7\xc5\xa3\xeb\xc3\x1f\x92\x4b\x26\x6a\x64\xd2\x9e\x05\x70\xeb\xa6\x07\xde\x4f\xa0\x69\xc8\xfc\x1c\x29\x1a\x56\xe2\x7a\x99\x91\x3b\xf7\x76\x73\xde\x04\x71\x54\x6d\xf5\x99\x2d\x08\xc4\x9f\xa7\x67\x14\x89\x86\xa2\xc4\x8b\x25\x69\x0c\x14\x37\xce\x9d\x58\xec\x76\x19\xf1\x26\x0b\x72\x0a\xb9\x6d\x61\x6e\xee\xab\x8d\x71\xaf\xc1\x1c\xa8\xb5\x15\x18\xaa\xe1\x9e\xcc\xc0\x73\xd7\x6b\x99\xd5\x77\xeb\xd3\xa6\xaf\xc2\x98\xba\xa8\x62\x41\x5a\xf5\x32\x60\x25\x89\xa9\xec\xe5\x62\xd7\xc4\xba\x0f\x1b\x11\x0d\x81\x56\xb6\xe6\x00\xdc\x1a\x3d\xc0\x52\xd3\x79\x95\xde\xa1\x58\x3e\x36\x83\xc2\xb9\xa0\x00\xd7\x43\x1d\x2a\x8e\xbd\xe3\x31\x90\x2f\xb3\x9c\xf0\x08\x59\x40\x04\xcf\xb1\x48\xbf\xda\x09\xd7\xab\xf6\x67\x51\xe1\x7a\xa1\x7b\xf5\x61\xa5\x67\x2a\x38\xa2\xd3\x5a\xb0\x20\x69\xfd\x14\x6b\x37\x42\x20\x9f\x0c\x1d\x9e\xed\x54\x67\xe4\xe3\xd4\x17\x8d\xe2\xd3\xe9\x25\x51\xa7\x21\xec\x58\x4e\xc1\x8f\xc2\x66\x1a\x43\x9c\x58\xe8\x25\x75\xbd\x93\x03\xa8\x25\x16\x8b\xb0\xe0\x09\xaf\xb9\x8f\xcb\x88\xb7\x01\xa1\x57\x30\xa2\x41\x1c\x3d\x84\xf2\xb9\x43\x88\x3d\xd7\xb2\x1e\x3b\x69\xd8\x46\x49\x30\xd6\x40\x1a\x07\x6a\x05\x96\xcd\x91\x6e\x4a\x3f\x6f\x85\xd3\x57\x98\xcb\x04\x25\x93\x8b\xc6\x4f\x43\x54\x3e\x7d\xcd\xf9\x70\x08\x02\xaa\xd7\xde\xe2\x71\x2e\x58\x6c\x14\x84\xb3\x0e\x0d\xd6\xd6\xb5\xca\x57\x8d\x89\x06\x9d\xdc\x8c\xcc\x2d\x3e\xd9\xca\x56\x8a\x00\x28\x9c\xe9\xf3\xac\xa2\xea\x3d\xf5\xa3\xed\xa6\x6c\x40\xcc\x99\x0e\xee\xc3\xea\xd9\x55\xb2\xaf\xac\x78\x46\xc3\xb1\xd3\x9d\xa6\x6c\x14\x97\xd3\x84\x43\xe8\xc5\x95\xc4\x3d\x8a\x15\xc5\x78\xac\x00\x1b\x49\xf7\x88\xf2\x29\x5d\xbc\xaa\xe5\x08\xf7\xd1\x77\x87\x0c\xdc\x0e\xc8\x4d\x5e\xb7\x70\xb6\x3c\x65\x54\x2b\xa1\x78\x91\x89\xa5\x5d\x27\x5f\xbd\xd1\x79\x89\x82\xa3\x74\xd5\xbe\x4e\x66\xbc\x3d\x94\x57\x99\x89\x05\xe8\xba\xbb\x81\x28\x03\x87\x64\x58\x42\x27\x35\x6d\xe0\xf4\x70\x2c\x92\x41\xb1\x42\xdc\x1c\x55\xe0\xaa\xf4\xf3\x68\x0a\xcc\x05\x2d\x0c\x38\x9e\x14\x29\x07\x39\x2c\x81\x49\x18\x22\x78\xb3\x74\x4c\x59\x1d\x2c\x79\x2a\xb4\x76\x9a\x89\x81\xf9\xaa\xa9\x83\x41\xea\x74\x56\x58\xe7\x62\x4e\x86\x27\x7a\x2c\xb6\xa8\x48\xc8\xe0\xc0\xd4\x43\x82\x96\x17\x84\x7c\x4f\x13\x63\x7d\x4a\x80\x2e\x9b\xc4\x60\x73\xa0\x45\x28\x7b\xda\xc5\x87\x2d\xd6\xbc\x4d\xec\xe7\xde\xb3\xa4\xa0\x65\x15\x17\x25\xb6\x31\x51\x46\xa2\xf9\x60\x8c\x55\xf3\x66\xa5\xe7\xad\x32\xbf\x2b\x2c\xe5\xc5\xe9\x47\x5b\x63\xa5\x72\xf3\x0a\xac\x96\x24\x90\x95\x13\x5b\x73\x9e\x87\x7a\x02\x16\x58\x19\xae\x3b\x48\xbd\xcc\x52\x84\x71\x99\x83\xc0\x4a\x16\xca\x40\xd3\x08\xe8\x0d\x58\x7c\x9e\x88\x8b\x25\xb1\xb0\x75\x75\x08\x10\xc8\x02\x23\x41\x58\x9b\x7c\x96\x08\xc7\x38\xcc\x55\x53\x8e\x31\x2c\xc3\x7a\xe8\x44\xe3\xdb\xbe\x9e\x42\x2b\x45\x14\xc5\x12\x68\xb4\x2e\x52\x2a\x3e\xb6\x2d\x67\xb5\x0b\x6d\xbb\x18\x55\xb5\xab\x32\x1f\x7a\x62\x54\xd4\xa0\x80\x9e\xfb\xce\x25\x62\x9b\x41\x00\xed\x42\x14\xe0\x50\xef\x8b\xb6\x2a\x14\x95\x2b\xc4\x05\xc6\x33\x72\x4f\xaf\x72\x10\xa0\xe9\x30\x11\xb0\xa1\x7b\xd2\x31\xd7\xe2\x92\xea\xf4\x08\x85\xfa\x9e\x34\x72\x21\x9b\x7a\xe2\xbd\x8a\xc0\x7d\xe7\x23\xb6\x4e\xe8\x55\x24\x93\x6c\xda\x54\x30\xf4\xb1\x87\x6d\x9b\xab\xec\x9c\x36\x23\x65\x11\x6e\xdf\xc2\x29\x8a\x84\x4b\xd4\x6c\x31\x47\xb3\xee\x84\x1e\xaf\x97\x39\x4d\xc8\xb8\x45\x73\xa2\x4e\xe2\x72\xf2\x58\x22\x53\xd1\xaf\x14\x24\x98\x82\xe5\x63\x8e\x79\x2c\xaa\xda\xb0\xc8\xb1\x12\xca\xc5\x6c\xf9\xaa\x29\xc7\x35\xf3\x69\x79\x5d\x22\x0b\x3b\x96\x99\x57\x10\xcc\x26\x95\xd6\xa1\x62\x6c\x12\x6d\x3d\x92\x88\xbd\x3d\x02\xa7\x76\x65\xa6\xa8\x9b\x3d\x3d\x6f\x55\x4b\x5e\x51\x76\x71\x4c\x2c\x4c\x1b\x91\xbe\x9f\xcb\xa0\x92\x24\xae\x7b\xec\x2b\xe0\x44\x6d\x65\x35\x72\x46\x78\x26\x2b\x55\x83\x90\x2d\x73\xae\x97\xa1\xb7\xa4\xfb\xbe\xc6\xb8\x03\xa8\x0e\x2b\x4f\x78\x9c\x9c\x99\x49\x5b\x03\x47\x3c\xcf\xc8\x85\x40\x67\x5a\xe5\xb9\xe8\x24\xe0\xa1\x76\x7b\xd1\xd6\x2a\x66\x19\xd0\x5b\x5c\xb9\x26\xed\xd8\x7d\xad\xdc\xd0\xf3\xd4\xa9\x98\x25\xd6\xb9\x30\x32\xce\xa2\x91\x47\x64\x82\x15\xef\xd5\x30\x1e\xaf\x4a\xec\xd3\xee\xe7\x5a\x72\x28\xc6\xf4\x56\x48\x30\x78\x08\x0e\x37\x08\xa4\xe0\xdb\xda\x51\xd6\x78\xa4\x1a\x96\x5e\x53\x89\xc7\x34\x56\x5d\x65\x9e\x9b\xf3\xb9\xaf\x28\xa6\x65\x0a\xa4\x9d\x53\x1e\x91\xca\x7d\x1b\x11\x7a\x5d\xa4\x4e\x9a\x28\x93\x33\x17\x6d\x62\xcf\x49\x44\xed\xaa\xbc\x94\x2e\x58\x44\x69\xd4\x32\x99\xa2\x34\x1e\x52\x89\x30\x57\x7f\x28\xa1\xf5\xd6\x71\x3b\x3a\x3d\x34\x98\x6d\x43\x86\xc2\x55\x53\x65\xae\x5a\xa6\x43\x05\x39\x28\xde\xdc\x90\x67\xa9\xc4\x2f\x2d\xb3\xc4\x10\xe5\xce\xc4\x08\x82\x58\x39\x52\x3a\xec\xb0\xe6\x2d\xc5\x3e\x4e\x59\xe8\x55\x33\x2e\xcc\x09\x9c\xfd\x2a\x86\x52\x2b\xda\x27\xdf\x11\xf3\x20\xb8\x41\x5c\x0b\x7d\x59\x56\x56\x59\x39\xc7\x69\xb0\x93\x3d\x0a\xb6\x12\xc3\x6e\x1e\xb1\xbe\x15\x3b\x75\xc5\x8c\x4b\x81\x93\x71\xae\x43\x5c\xab\x27\xb0\x29\x6a\x09\x9d\xa5\x51\xbb\x60\xb8\xa2\xe6\xb9\x38\xac\xba\x2d\xbb\x1c\xc5\x2d\x71\x31\xe3\x2a\x5e\x19\xf2\xb4\x80\x6a\x21\x99\xdc\xae\x3e\x1d\x31\x00\x23\x18\xac\x5a\x5a\x89\x21\xa8\x8c\x51\x90\x7a\x3c\x77\xc6\xb1\xf1\x53\x18\x78\x55\xff\x41\xd0\x0d\xa7\xc3\x07\xab\xd6\xb9\x0f\x89\x8c\xd8\xf0\x3e\xa2\x10\x6d\x4c\xd8\x67\x02\xcb\x36\x1c\x66\x4d\x6f\x7a\x5a\xc5\x8e\x7a\x59\x01\xb8\x08\x50\x39\x12\xfb\xb9\x6a\x01\xf7\xe5\x48\xa2\xd5\x0c\xab\x3c\x87\xc6\x2d\x99\xc6\x5c\x50\x61\xd5\xdb\x12\x87\x5f\xa3\xb0\xf4\xaa\x05\xca\x6c\x5f\xbc\x8c\x1b\x05\x98\xde\xf6\x25\x7b\xe2\xb5\xc8\x75\x68\x6b\xf5\x06\xa3\x39\xa6\x62\x25\x09\xcc\x98\x0c\xa5\x16\xc7\x62\x98\x57\xf1\x60\x53\xde\xf6\x0f\x16\x7f\xf0\x5c\x20\xab\x0b\x67\x01\xec\x19\x82\x4a\xd7\x36\x49\x3f\xfb\x1e\x36\xa2\x39\x5e\xe7\xde\xf5\x49\x22\x48\x97\x59\xff\xac\xb8\xe4\xd1\x1c\x1c\x88\xe6\x85\xe4\xac\x97\x30\x32\x9d\x84\xcb\x19\x25\x51\x83\xed\x6d\x12\x89\x74\x88\x9a\xd4\xee\x2f\x2b\x00\x69\x67\x0b\x6a\x2e\xae\x26\x05\x1c\xd8\xec\x8b\x56\x09\xc6\x08\xaa\x50\x86\x2e\x27\x58\x35\x51\x7d\x00\x79\x6c\x1c\x41\xcf\x06\x98\x37\x67\x3e\xb7\xe2\xbb\x2f\x00\x1f\xba\x1d\x68\xb8\xa1\xec\x8c\x01\x45\xe3\x9c\xcd\xab\xa8\x2e\xeb\xaa\x97\xbe\x53\x04\x57\x6c\x0d\x4e\x9c\xf0\x03\x4d\x86\x86\xbd\x6c\x49\x4a\xda\xc6\x1a\x39\x8a\xc8\x47\x30\x17\x51\xf4\xc9\x40\x07\x31\x47\xd3\xa8\x5b\x25\xcf\x93\x71\x74\x22\x1d\xab\x0a\xe7\xae\x42\x1e\x97\xe5\x60\xb8\x35\xb5\x16\x99\xab\x45\xd1\xc5\x62\xce\x05\x25\xc5\xab\xd7\x9e\x90\xa4\x6b\x5d\x21\x47\xb6\x1e\x7e\xaa\xb5\xb0\xcc\xbd\xbd\x88\x84\xa7\x53\x04\xc0\x3a\x2d\xbb\xc8\x01\xe7\x13\x4b\xe3\x0f\xd7\x27\x50\x47\x3b\x13\x56\xb8\x2b\x35\x3a\x2b\x87\x1a\x8b\x3e\xa3\x30\xc3\x5c\x95\x0d\xaa\x56\x9d\x19\x15\xd4\xc6\x9d\x9c\x64\x19\xa6\x1c\x16\xce\x5d\xe8\x0e\xe2\x40\x10\x2f\x03\xab\xdd\x2b\xe0\x1a\x19\x50\x9d\x89\x5e\x25\x33\xdf\x85\x52\xe7\xb2\x51\x46\xfa\x82\x79\xaf\x1b\xad\xe7\x66\xcd\xe9\x4d\x3b\xa2\xb4\x19\x46\x67\x97\x89\x86\xe0\x3b\x39\xd0\xe4\xf9\xb2\xcc\xc7\xed\x4b\x21\x34\x34\xd8\xe6\x2c\x29\x9a\xa5\x7b\xa1\xd9\x5e\x0f\x8d\x35\x50\x5b\x6b\x3d\x21\xc7\x96\xd5\x79\x9e\x63\xef\x48\x5d\xa6\x01\x61\x34\x02\x98\xeb\x6e\xac\xa0\x91\x8d\xa0\x1a\xe9\xa7\x3e\x90\x3e\x3c\x22\x7e\x8e\x1a\x06\xae\x0b\xc5\x39\x66\xe0\xbb\x96\x07\xa3\x37\x81\xcf\xad\x3a\x68\x17\x80\x8f\x71\x73\x94\x7c\x68\x8f\xf7\xcd\x60\xbe\x91\x31\x16\x88\xed\xe6\xd0\xc6\xf6\x84\x32\xa1\x6b\xf7\x41\x6c\x74\xb6\xc6\xcf\xea\x21\xbc\xca\x9e\x75\x34\xcf\xba\x21\xe9\xdc\x96\xc4\x76\xd1\x64\xa6\x78\xa3\xe4\x4c\x12\xaf\x00\x9f\xcb\x92\xd7\xde\x77\x2e\xe6\xb6\x37\x10\x0d\xe0\x97\x11\x89\xb5\x41\xed\x8f\x9a\xad\x23\x49\x08\xdb\x84\xb2\x52\x72\x5f\xb5\x0a\x84\xfb\xac\xdd\x4e\x8f\x65\x5b\xf6\x63\xb1\x1a\x8e\x46\x7c\xba\x8a\x84\x07\xa7\x5e\x8f\x56\xf6\xb8\x19\xef\x8f\x73\xcb\x32\x79\x80\x8b\xdf\x8e\x64\xed\xd2\x9b\xb0\x95\xf0\xb9\xe8\x83\x42\x7b\x2c\x38\x33\x7a\x95\x14\xce\xe8\x2a\x91\x75\x07\xee\x02\x12\x4a\x0c\x37\xa7\x71\x67\x07\xa0\x13\xa3\x24\xd6\x6c\x76\x86\x8a\x8d\x1c\x70\x19\x8a\xc6\x37\xee\x8a\xfa\xff\xb8\xd8\x59\x24\x97\xca\x9c\x01\x16\xb0\xd3\xdd\x80\x4c\xab\x9c\xc0\xed\x02\xe5\xba\xa4\xd8\x1d\x69\x22\x78\x90\x4f\x30\xa4\x24\x74\xbf\xcc\x78\x1a\x4a\x62\xf8\xf0\x59\xcb\x8a\x91\x0d\x24\xb6\x26\x36\xb8\x4a\xbf\x05\x8e\x74\xcb\xa7\x3c\x0b\xe7\x4b\xf7\xd6\x03\x75\x8c\x92\x2f\x2b\x45\x39\xdf\x92\xd0\x7c\x95\x6a\xc9\x21\x0e\xe2\xfb\x68\xaa\x57\x47\x63\x3b\xeb\x09\x36\xb7\x4b\xa9\x55\xc4\xf8\x58\xb5\x75\x8b\x83\x37\xec\x91\xff\x10\xf8\xdc\xaa\x27\x7f\x81\xd8\x2a\xe4\x24\xbb\x3c\xdd\x6a\xa6\x80\x7a\x63\x34\x99\x18\xa2\xe1\x07\x11\x56\x44\x29\xac\x2b\xf2\x64\x12\x49\x50\x27\xd2\x00\xa1\x7c\x91\x1d\x3c\x2d\xd3\x69\x3d\xf6\x15\xf7\x46\x35\xb5\xe3\xa4\x4a\xe2\xa8\xf3\xa6\xd2\x54\xdd\x06\xca\xeb\x99\xf7\xe8\x01\xc6\x9b\xf7\x01\xa7\xf3\xaa\x5f\x92\x3d\x91\x7e\xc8\x65\xa3\x71\xac\x7e\xe1\xce\x39\x4c\xf4\x34\xc1\xaa\xcd\xa9\xe9\x18\x74\xc9\xa0\x1d\x54\x73\x66\x7f\x9e\x34\xcd\xab\x72\x30\xb9\x8a\x9d\x55\x32\x21\xab\x13\x95\x0c\xc9\x2a\x8f\xba\xe5\x7e\xca\xbe\xd1\x7d\xc8\xac\x4f\x8a\x02\x39\xa9\xf4\x74\xca\x5d\xb0\x78\x15\xe7\x93\x04\x04\xc7\x1a\x92\xcc\xd2\x36\xc7\xa4\x38\xfb\x62\x42\xed\x38\x2d\x34\x1d\x68\x59\x56\xa3\x39\xae\x01\x80\xf3\x38\x3a\x1b\x73\x5c\xd4\x6a\x67\x2b\x37\x6d\x43\x26\x8c\x46\xd7\x79\xf0\x96\x37\xbd\x93\x41\xeb\xe2\xc1\x26\x52\xdd\x19\xb0\x6a\x2e\x75\xd9\x0f\x6c\x50\x8c\xaa\x81\xab\x16\x6b\x31\xa5\x5c\x3b\x0f\x50\x49\x3f\x84\x57\x80\x29\x8c\x56\xae\x3b\x1b\x82\x9c\xf2\x30\x79\x32\x75\x34\x75\xd2\x13\xea\x5d\x8b\xec\xae\x32\x3d\xa4\x16\x64\x13\x9a\xd8\xcc\xc0\x99\xae\xe7\x69\x36\x17\x04\x4a\x35\xf1\x52\x6b\xcc\x81\x53\x34\x64\x1a\x1a\x31\xb5\x9a\x95\xd5\x78\xc3\x29\xfe\x90\xd8\xea\x0f\x1f\xf3\xa6\x67\x7f\xfe\x9f\x7e\xd2\xbb\xee\xfa\x8e\x8f\xfb\xe1\x4f\xf8\xf2\xb7\x3f\xe0\x6b\x1f\xf6\x54\xf5\xb8\xef\xff\x85\xfe\x93\xdf\x76\xef\x17\xdc\xfe\xc9\x5f\xf4\xb2\xbf\x26\xb6\x7a\xdd\x9b\x7e\xe9\x79\x8f\xb9\xef\x3f\x7c\xc0\xbb\xbe\xe0\xf5\x4f\xfc\xc7\x6f\x6e\x4f\x7c\xd7\x2f\xdd\x93\xdd\xe7\xd1\xdf\xf8\xbe\xdf\xf8\x89\xef\xfa\x47\xb7\xbf\xdb\x47\xc3\x1b\x42\x3f\xe6\x1e\xf7\x59\x1f\xf2\xd0\xdf\xfb\x8b\x2f\x59\xd7\x8f\xfe\x8c\x4f\x7b\xce\x4f\xbd\xf0\xc7\x3e\xe5\x45\x6f\xb8\xef\x47\xc3\x37\x3c\xeb\x25\xaf\xbb\xeb\xa7\xdf\xef\x46\xb1\xd5\xb3\x1e\xf7\xda\xbb\xbc\xfb\xa9\x77\xbe\xe7\x53\xbf\xec\x0e\xcf\xf9\x9d\xbf\xf9\xa2\x27\x82\x37\xbe\xfe\xfd\x8f\xf8\x5b\xf8\x0e\xf5\x31\x5f\xf4\xe9\xf3\x09\x5f\xf3\x8c\x1b\x42\x1f\xfc\x0b\x7f\x49\x5e\xff\x5b\xfd\x9f\xbf\xf1\x67\x9f\xfe\xe2\xdf\x7c\xdc\x57\xfc\xcd\xdf\x7d\xd2\x4b\xbf\xe3\xf1\xbf\xf3\xa3\x7f\xf8\xd0\x07\x7e\x41\xf8\x8a\xf7\xfc\xe9\xbb\x6f\x08\x7d\xd0\x7b\x1e\xf5\xeb\x2f\xfa\xe5\x1f\x7b\xc5\x47\x3f\x1f\xdd\xe1\xb7\x1e\xfb\x46\x6e\x5f\x79\xbf\x27\xfe\xce\xd7\x3d\xef\xc9\xee\x05\x8f\x7e\xef\x5d\xdf\xf3\xe0\xaf\xbf\x21\xf4\x45\xcf\x7a\xff\x5d\x9f\xd8\xff\xf4\x3d\x0f\xbc\xc7\x43\xbe\xec\xcf\xfe\xf2\x53\xef\xf4\x17\x1f\xf3\x55\x3f\xf4\x69\xdf\xfe\xc2\x7b\x7f\xd4\x8f\xfc\xe2\x0f\x3c\xff\xf3\xbf\xec\x65\x37\x84\xbe\xe3\x11\x5f\xfb\x59\x7f\x74\xcf\x7b\xbc\x7c\x7b\xd2\x6b\xbf\xf2\xbb\xbe\xe5\x8b\x3e\xe2\xee\xe5\xfb\x7e\xf9\x97\xed\xef\x3c\xe8\x6f\xbf\xea\xd1\x7f\x72\xbb\x8f\xf8\x3b\xdf\x70\x43\xe8\x87\xdd\xee\xd7\xee\xf8\xec\x6f\xfe\xcd\xbb\x7e\xf8\x03\x9e\xf3\x05\xff\x60\xdc\xeb\x7b\x5e\xf8\x64\xf3\x91\xaf\x7d\xd3\x7d\xe6\x27\xbc\xe7\x97\xbe\xf0\x3b\x5e\xf7\x4d\xea\xaf\xc4\x56\xb7\x7a\xaa\x17\xa4\x9f\xb6\x34\x74\x46\x1e\x73\xdc\x3c\x54\x72\x31\x8b\x50\x8b\x5f\x0e\x7a\xc8\xb3\xeb\x7d\x75\x0d\x9c\x8d\x86\xe6\x8a\x11\x5b\x3a\x25\xba\x6a\x85\x3e\xcb\x22\x44\x0e\x89\x20\x6a\xe9\x7e\x38\x7f\xae\x9e\x39\x08\x79\x3e\xce\x70\xb8\xb2\xa2\x58\xb9\xb0\x99\x84\x9e\xdc\x99\xce\xb0\xd8\xab\x30\x06\x70\xb0\x1b\xce\x06\xc9\x04\x8c\x05\xa0\x44\x80\x3c\xbb\x45\x09\x15\xcb\x78\xd9\x56\x1d\xbc\x13\x2c\x0c\xb8\xad\x96\x7b\xab\xd8\x45\x15\x27\x6d\xbb\xce\xac\x97\xe6\xf4\x61\xdd\x11\x09\x03\x85\x1c\x4a\x69\x6c\xb9\xa0\xd8\x9d\x05\xf1\x5a\x3c\x00\x46\x6f\xf2\xe0\xde\x30\x7d\x15\xc6\x48\xc5\xc2\x72\x26\xd2\x7b\x83\x79\x73\x79\x55\x13\x4b\xd8\x9d\x35\xb0\xfb\xdb\x20\xee\xcc\xa0\x8b\xb3\x69\x21\x49\xa0\x01\xac\x97\x09\x8b\x28\x09\xb0\x8a\x52\xab\xb2\x89\x08\x66\x8a\x40\xd0\x22\x76\x78\xbc\x78\x4e\x90\xd8\x38\x8c\x46\xf4\x2e\xe2\x5c\x8c\x55\x5d\xae\x57\x25\x7d\xf2\xa4\x69\x03\x64\x39\x31\xcd\x27\x08\x07\x1b\xd3\x0f\x35\x76\xab\x0e\x61\x77\xb5\x1f\x58\xf1\x73\x2d\xb1\xb3\xc0\x75\x6a\x6b\x03\x57\xa9\x51\x24\xd9\xfc\xcc\x26\x4c\xbe\x2c\xcd\xd4\xe9\x3b\x56\xae\xe3\xce\x2d\xcb\xa8\x9d\x8b\xf2\xcb\x30\xa9\x96\x08\xd6\xae\xe2\xba\x8e\x29\x6f\x4a\x3f\x6f\x85\xd3\x17\x80\x4f\x98\xbb\x8e\x93\xed\xc9\xa2\xd3\xe8\x2e\xf3\xe9\x39\x35\xe8\x00\x2b\x76\x7b\xb1\x4a\x9f\x55\xb0\xc2\x58\x47\x32\x8e\x72\x48\x79\x99\xad\x9e\xf5\xd3\xd0\x7d\xdb\x9b\x6b\x4b\x8a\x87\x67\x28\x9e\x73\x59\x97\x72\x46\xba\x91\xe0\x79\x1d\xeb\xca\xda\x26\x76\x1b\x48\x07\x73\xd0\xab\x48\xa6\xba\x29\x75\x0e\x5f\xb6\x68\x72\x6b\x82\xed\x7d\x3f\xa8\xdd\x07\x4b\x90\x28\xbf\x4e\x21\x12\xaa\xb0\x46\x05\x37\x48\xb8\x5e\xfc\x65\x6c\xee\x82\x16\x1d\x5d\xee\xc5\xe3\xae\xc6\xa2\xb1\x49\x62\x9b\xab\xa8\x74\x61\x11\x2d\x9b\x1e\x56\xf4\x46\xac\x6c\x13\x0c\xb0\x6d\xfe\xb2\x2d\xd6\xd1\x39\xe1\x97\xc5\xef\x67\xc8\x6a\x55\x3a\x70\x41\x85\xcb\x63\x2b\xce\x9d\xed\xc8\x9b\x65\xde\x58\xc7\xd4\x08\x47\xf4\x42\xb0\xcb\xd4\x28\x4b\x3d\xda\x3c\xa8\xc0\xa8\x52\x80\x76\xb8\xaf\x74\x29\xc8\x4f\x1b\x55\x30\xf6\x94\x6c\x6e\x70\x66\xe1\x28\x08\xd2\x52\xbf\x1f\x97\x55\xe1\x24\x03\xad\xbc\xcb\x04\x30\x53\x66\x1c\x5c\x0f\xc3\xe2\x52\x36\xc8\xb4\x28\x5b\x8e\xa5\xec\x55\x48\xb6\x87\xbe\xc5\xc5\xe6\x9e\xaf\x62\x26\x92\xac\x89\x6a\x2b\xf6\x7a\x9c\x68\x27\xac\x22\x16\x57\x88\xba\xa0\x27\xf7\x56\x9a\x90\x63\x26\x45\x1d\xbb\x36\xa0\x79\x68\xdd\xff\x61\x87\xe9\xad\x32\xbf\x0b\xc0\xa7\xe1\x8d\x8c\x63\x73\xdb\xba\x8a\x21\xc5\xdc\xb0\x59\x94\x5b\x33\xf0\x6c\xf1\x67\xb4\xd2\xec\xb5\x28\x4c\xb6\x75\x39\x02\x56\x6e\x83\x57\xb5\xd7\xd6\xd5\x61\x3b\xaa\x85\x41\x1e\x1b\x96\x32\x46\x98\xf5\x20\x1d\xa4\xda\xe5\xc9\xe1\xba\x51\xb4\x2d\x2b\x6d\x4d\x6d\xc7\x02\x51\xd5\x57\xbd\xca\x5d\x59\x8d\xda\xa6\xa4\x86\xa8\x80\x36\x8e\x52\x16\x9d\xe5\x72\x08\xe0\x84\x5e\x6b\xb5\x6b\x2b\xc6\x0f\xbf\x56\xb9\x05\x3c\x47\xbc\x6a\xc4\xba\x82\x49\x54\x67\x7b\x0b\xe6\x60\x31\x84\x7c\x5a\x42\x92\x50\xd5\xb8\xdc\x3d\x6f\x0d\xb7\x44\xf3\x4a\x49\xc3\x76\x0d\x1a\x7a\x7d\x99\xad\x5e\x8f\xc9\x6e\x0c\xc9\xd4\xf5\x38\x2d\x2d\xa5\xb1\x68\x2d\x56\x6c\xf8\xcc\xe4\x4e\x53\x71\x9b\x82\xeb\x3e\xe3\xc2\xb8\x06\x1d\x5e\x25\x33\xef\x67\xde\x75\x0d\x2e\xb4\x83\xee\xad\x6a\xb8\x9e\x62\xd3\x32\xe6\xe1\xd8\xe2\x15\xaf\xc8\x15\xcc\x30\x8d\x92\x88\x8a\x78\xe2\xf1\xaa\xcc\x07\x9e\xc7\x98\x75\x4f\x3e\xae\x12\xec\xe4\x3c\xb4\x08\xdb\xee\xb2\x73\x47\x47\x15\x82\x4d\x35\x0e\x9a\x9e\x4b\x6c\x44\x15\x9c\xfd\xb8\xaa\xf9\xb9\xea\x90\x6b\xa8\x64\x65\x67\x1e\x10\x99\xa5\x6c\x69\x25\x01\x1b\xe9\xac\xd8\x49\x76\x74\x1b\x75\x38\xab\x6b\x28\xdb\x42\x8f\x79\x83\x1d\xd2\x87\xc0\xe7\x56\xb5\xe4\x05\xc4\x5b\xe5\x13\xda\x65\x9b\xbc\xeb\x5a\x8e\xe6\x2a\x2f\xb4\x47\xe2\x0c\xb3\x4e\x84\x75\x11\xd2\xf2\xb6\xa0\x5e\x46\x8c\xe3\xd8\x96\x44\xaf\x1a\x58\x55\xa7\xa1\x58\xd5\x43\x6d\x8d\x17\xb4\xad\xd4\xa0\xac\xfd\x46\x65\xa6\xb5\xba\x3e\xcd\x28\x95\x9a\x35\xf6\xb6\x19\xb9\x23\xa7\xae\x32\xcf\xa5\xe6\xc4\x16\xe2\x32\x52\xb0\x96\x91\x3e\x8b\x26\x46\xe2\x88\x01\xec\x2b\x2c\x98\xe3\x5d\x84\xc3\x6c\xe2\x04\x09\x73\xd5\x0c\x3b\xaf\x3a\x68\xdb\x0c\xcd\x6f\x63\xf7\xad\x4b\xab\x84\xdb\xba\x71\xa0\x4b\x58\xfb\xb6\xef\x70\xe9\x20\xed\x39\x07\x7a\x2c\x4d\xee\x7b\x2a\x06\x5c\xd6\x10\x0e\x99\x87\x51\xb0\xad\x8e\xe9\xea\x3d\xf1\x8c\x04\x33\x57\x10\xd0\x2a\x0f\xad\x25\x6f\xe1\x6c\xce\xa9\x8d\x0b\x32\x77\x4b\x00\xbb\xaa\x13\xb2\x9c\x7c\xdd\xe4\x08\x58\x11\x64\x17\xeb\x3b\x15\xbb\x17\x5b\x2d\x26\x0e\x61\x67\x44\x18\x9f\xc8\x84\xe4\x57\x47\x0c\xd5\xbd\xda\xab\x0c\xff\x3d\xdc\xc3\x4c\xfd\x68\x95\x9e\x8c\x71\xd8\xe5\x71\x26\xc2\x93\x52\x9e\xd6\xca\x32\x15\x82\xa1\x6d\xdb\x4e\xbe\x6c\xb4\x96\xb3\x5e\x35\x95\xc5\x16\x93\x88\x6a\xeb\x61\xc8\x4e\x5c\x40\x1d\x58\x1e\xdd\xd1\x98\x1f\x7a\x13\x4d\x5a\x6a\x5c\x99\xc8\x36\x80\xbd\xa3\x61\xed\x68\xde\xec\xef\x70\x2b\x76\xea\x0a\xf0\xa1\x85\x9f\x7a\x56\xc2\x80\xa5\xe7\xd9\x63\xdc\x96\xc2\x0b\xcc\x8b\x58\xe2\x60\x38\xe1\xd2\xea\x09\x8f\x65\xe3\xfb\xb1\x88\x10\x2f\x33\xcf\x6d\x4b\x63\x60\xa6\x42\x7d\x8e\xec\xd8\xd9\x6d\xaf\x93\x23\xb7\x49\x96\xb8\xe5\xad\xa2\x73\x8a\x19\xed\xda\x3a\x73\x9b\x5a\xcd\x76\x59\x01\x48\x01\xdf\xf3\xd9\x0e\x4e\xe7\x89\x02\x39\x61\x86\x0c\x24\xcd\xdb\xae\xcb\xdc\x65\x57\xa1\xf0\x78\x1e\xad\x2d\xa9\x7a\x38\x4c\x36\x57\xf5\xb1\xbd\x18\x89\x2e\x27\x3b\x31\xc5\xeb\x72\x9e\x76\xa8\x9c\x63\xed\x2c\x36\x13\xad\x77\x69\xdb\x55\x5d\x0e\xd2\x0f\x9d\x4d\x8a\xa2\x5f\xb5\x39\x94\xe5\xb8\xac\xab\x4f\x2a\xb8\xc2\xf9\x2e\x08\x86\x4a\x0b\xb3\xa6\x79\x1a\x61\xf1\x2e\xd0\x3c\x76\x93\xa3\x6a\x6c\x92\x43\x47\xdb\xe8\x55\x6e\x5f\xbb\xd7\x53\xe6\x7d\x2e\xb5\x63\x88\x1c\x87\xd9\x94\xd8\xe4\x1e\xfc\x8e\x2a\x5e\x4a\x46\x74\x5f\x56\x25\xdd\xbe\xa0\xd9\xe4\x2a\xd7\xab\x06\xe0\x4f\xb5\xe5\x85\x74\xea\x19\xd9\x17\x57\x96\xb1\x6b\xbf\xce\xa0\x52\x3b\x43\x3d\x19\x84\xd5\xad\xc1\xa8\x73\x38\x0d\xd7\x8a\x1c\x50\x57\xe9\x62\x1c\xea\xc7\x86\x5d\x1b\x27\xb1\x35\x99\x5d\x1d\x90\xe6\xca\x81\x4d\x10\x94\x7d\x91\x71\x36\x58\x89\x67\x67\xe5\x1d\x6d\x67\x21\x89\xdc\x04\x3e\xb7\xe2\xbb\x2f\x28\xbb\xe2\x5e\xc7\xa9\x0c\x15\xb4\x71\xbb\xcc\x9e\x17\x4d\x5a\xb2\x58\x1d\xb4\x10\x6a\x8e\xe8\x53\x31\x51\x36\x91\x69\x89\xa7\x39\xd4\x7a\x59\x03\x27\x51\x4f\xc8\x58\xb8\x25\xa6\x61\x3a\x31\xa8\x82\xe4\xc8\x55\xf1\x65\x37\x92\x86\xd5\x90\x73\x93\xab\x47\x28\x0b\x93\x06\xbd\xcc\x3b\x09\x01\x80\x2c\x42\x7a\x5b\xcb\x14\x47\x0c\x33\xa1\xbc\x2e\x06\xc9\x0e\x54\x36\x30\x78\xca\x11\x91\x70\xf8\xca\x74\x8b\x55\x55\x7b\xd5\x3c\x07\x18\x61\x1f\x04\x64\x1d\x3d\x5a\x22\x5c\x30\xf2\x53\x26\xb6\xe3\xb5\x0d\x4e\x4f\xbd\xa2\x46\xa6\xa2\x49\xda\xca\x82\xde\x55\xe3\x57\x1d\xf9\x21\x32\x54\x73\xb1\x2a\x91\x96\x29\x42\x7b\x69\x7c\xf0\x03\xed\xbd\x39\x35\x7b\xd6\x88\x69\x25\x09\xa4\x8c\x0f\x14\xac\xa3\xec\x32\xe5\xc5\xf4\x04\xee\x95\x4b\xc6\xc7\x09\x81\x11\x08\x6e\xad\x18\xaa\xac\x60\xd4\xa0\x63\x15\xfc\x54\x64\xca\x0c\x81\xf3\xc6\xed\x21\x5e\xe5\xc5\xd6\xf0\x86\xce\x7c\xe6\x7d\x0d\x07\x05\x01\xa1\x70\xce\x80\xeb\xf0\x90\xec\x5a\xe5\x14\xf5\xba\x71\x55\x4e\x81\x48\x4f\x45\xf4\x96\xae\x5a\x74\x21\x38\x15\x0c\x33\x2f\xd0\x26\x32\xac\x63\x73\xa1\x0f\x19\x6c\x2e\x9e\x4f\x3a\xe4\xc2\x95\x34\x1d\x8b\x41\xc7\x64\x74\x94\x3d\xdd\xec\x66\x7e\xab\x0e\xda\x05\x99\xcf\xee\x0d\xda\x39\x5e\x5c\x0a\xca\x26\xbf\x11\xd7\xaa\xb1\x73\xa3\xb1\x03\xdc\xe5\x16\x9a\x93\x61\x2f\x82\x7b\x77\xc0\xe2\x0f\x41\xaf\xa2\x34\xfd\x58\xdb\x24\x3c\x44\x22\xb2\xa4\x20\xad\x73\x8d\xa7\xc0\xaa\x57\x17\xd7\x35\x9a\x2c\xf0\xd9\x34\xdb\xfa\x19\x8c\x96\x95\x70\x7a\x15\x91\x28\x73\x15\x5e\xec\xee\x38\x66\xda\x3a\x07\xab\x30\x87\x94\x12\x36\xe8\x38\x44\xc7\x11\x5b\x82\x47\x1d\xc4\xbb\x70\x6c\x25\xfa\xe3\xaa\x5d\x51\x8c\x84\xe2\x52\x40\x53\xd0\x22\xa2\x90\x3c\x2b\x5e\x50\x3f\x0b\xc4\x23\xda\x9a\x73\xdb\x75\x08\x6a\x71\x07\x5f\x2a\x8d\xd1\x8e\xcb\xe6\x7e\xce\x40\x76\x3d\x75\x4b\x8b\xc1\x34\x7a\xbc\x56\xd7\xa0\x43\x70\x53\x9e\x6e\x83\x6e\x26\x06\xa5\x4f\x01\x6a\x93\x5c\xb3\xee\xcf\xab\x0c\x77\x28\x8a\x60\x0a\xea\x22\xeb\x5c\x40\xb1\x2c\x66\x48\x2e\x87\xa4\xb0\x9b\x5e\xd7\xaa\x6a\x4c\x26\xc6\xb0\x2d\x99\xd9\x94\x6c\xb9\x6c\xe8\x90\xd9\x65\x4b\x8e\x77\x41\xb6\x73\xb1\x72\x0f\xb6\xec\xe7\x99\x37\xba\xac\x18\x67\xe4\x82\xab\x0b\x77\x13\x2d\x58\x39\x5f\x76\xb2\x34\x75\x55\x57\x74\x89\x53\x33\x90\x03\x75\x45\xb9\x43\x1b\xe1\x04\x29\xf8\x08\x8e\x47\x46\x13\xea\x62\x93\xe8\x98\x31\xa0\x63\x4f\xa7\x9c\xdc\xdc\x40\x7d\x7f\x08\x7c\x6e\xd5\x93\xbf\x20\xf3\xe9\x88\xaf\x7c\x5d\x07\x3c\xa0\x3a\xe4\xd6\x38\x0a\x4d\x29\x8a\x0f\x22\x07\x66\xee\xd0\xf6\xa8\x6b\x5d\xea\x12\x0b\xc0\x00\x67\xa1\xae\x92\x0f\x83\x68\x21\x9a\x14\x2c\x49\xec\x8b\x19\xbb\xc1\x10\xf6\x1e\x31\x2a\xec\x88\x76\x06\xab\x4b\x57\xe7\x51\x49\xe0\x06\xda\xe9\xe7\xb8\xca\xcc\x6e\x6e\x0b\xe3\x40\x61\xe1\x62\xdc\x52\x8a\xcc\xf5\x54\xf7\xba\x93\x42\x0e\xb9\x0a\x21\xf7\xc8\x0f\x19\x2d\x09\x14\x86\x19\x8f\x1e\x2f\xf3\x7a\x01\xeb\xb2\x92\x18\x75\xb1\x58\x6e\x2a\x8a\x28\x6c\x29\x6b\x5f\xb5\xd9\x8d\x0b\x68\x6d\x46\x02\x12\x78\x5e\xf0\xe2\xa7\x0c\x97\x2d\xaa\x63\x36\x1d\x16\x46\x8a\x70\xce\xc9\xeb\xc1\xe6\xee\xdb\x58\x97\xbc\xd6\xbd\xe7\x7c\x04\x4b\xe5\xbe\x92\x8d\x85\xde\xdb\x00\x35\x93\x74\x15\xf5\xad\x3d\xf4\x96\xe8\x71\xce\x6c\x32\x85\xa5\x0a\x49\xe7\xea\xcc\x69\xc3\x6e\xf5\xb1\x7b\xe6\x01\x8e\xfb\xb1\xd8\x75\x0d\x35\xa1\xfd\x2a\x9f\x53\x66\x1a\xa7\x03\x6b\x8b\x33\x31\x86\xd4\x03\x82\xe3\x20\xc7\x79\x4c\x81\x53\x3c\x4a\x48\x1e\x06\x43\xa1\x84\xc5\x28\x4a\x81\x9c\xeb\x55\xd7\xe5\x9e\x8d\x6c\x76\x1f\x4c\xb4\x75\xf8\x52\x02\x83\xd1\xba\xb2\x1f\x22\x54\x18\x25\x00\x4a\xcb\x64\xb9\x4c\xe7\xde\x77\xd6\xd9\x69\xf2\x4d\x62\xab\xb7\x3c\xe1\x67\xbf\xfb\xe1\x9f\x73\xd7\x2f\xfc\xe0\x77\x7c\xee\x77\x3e\xee\x11\xfd\x55\x3f\x65\x5f\xf3\x1b\xcb\x97\xbf\xf2\xa7\x1e\x66\xb7\x4f\xf9\xf0\xef\x73\xdf\xfc\xd7\xc4\x56\x0f\xf9\xa8\x47\xfc\xfb\x2f\x7e\xc8\x2a\x7f\xec\xe3\xdf\xfb\x91\xf7\xb8\xeb\x67\xbc\xe6\xee\xf0\x27\xee\xf4\xe5\xef\xfd\xda\x1f\x7c\xd3\xed\x7e\xe6\x47\xd1\x7b\xbe\xee\x8f\x6e\x08\x7d\xfd\x3f\xf9\x6d\xff\x99\x9f\xfc\xb0\xef\xfe\xba\x07\x7c\xf0\xf1\x3b\xac\xff\xe8\x19\xbf\x72\xc7\x67\xdc\xe9\x6d\x8f\xfb\xb6\xa7\x3c\xe3\xb7\xbe\xe4\xad\xff\x74\x3c\xe2\x86\xd0\x4f\xfc\xe0\xdd\xe8\xc3\x5f\xbe\xde\xfb\xed\xfe\x9f\x7e\x87\xfd\x2a\xf2\xa5\xdf\xf2\xfb\xe3\xab\xbf\xfa\x69\xef\x78\xed\x57\x1c\xff\xec\x2d\x9f\xf7\xf0\xcf\x7c\xe8\x0d\xa1\x0f\x78\xf8\xeb\x9e\xfe\x86\xef\xfa\x8c\x97\x7e\xc1\xbf\xbf\xcb\x8b\x9f\xd2\x7f\xfa\xde\xca\xfd\xc1\x3f\xf9\xb0\x9f\xfd\x89\xef\x7a\xf9\x97\x7f\x6f\xfa\xd4\x6f\xbf\xef\x8d\x5a\xa7\x7f\xf0\x8e\xbf\xf3\x39\xcf\x78\xd0\xab\x1e\xf4\x0f\x7f\xe8\xc7\xfe\x93\xfe\x9a\xb7\xcd\x17\xfe\xf9\x8f\xff\xf8\xdd\x3f\xed\x7e\x7f\xfc\xae\xff\xf1\xee\xef\x78\x89\xff\xc8\xaf\xba\x21\xf4\xae\xee\xb7\xff\xf0\xc1\x77\x79\xef\xed\xef\x74\x8f\xa7\xe1\xaf\x7a\xe7\xed\xe4\xe3\x7f\xd0\xbe\x29\xfd\xca\xfb\xbe\xff\x6f\xde\xe7\xdb\xfe\xf1\x43\xff\xa5\x7b\xd8\x0d\xa1\x4f\x79\xda\x1d\xfe\x9f\x8f\xa3\x9f\xf9\xca\x7b\x7d\xcc\xf3\x9e\x7f\x2f\xf0\xe2\x6f\xfb\x86\x7b\xae\x9f\xf8\xe1\x2f\xfb\xfd\xdf\xff\xc2\xfb\x7f\xe0\x63\x3f\xf1\x63\x9f\xfd\xea\x1b\x42\x9f\xf6\x2b\x4f\x7a\xc5\xfb\x7f\x98\xbc\xfc\x4f\xbe\xe1\x9f\x7c\xc7\xf7\x7e\x04\x7e\xde\xd3\xee\xae\xdf\xf5\x95\x9f\x79\x8f\x3f\x7b\xf3\x3f\x33\xef\xfc\xd6\x0f\xae\x5f\xf1\x57\x62\xab\x5b\x3d\xd5\x2b\x8c\x55\xf7\x35\xc2\x33\x05\x53\xf8\xd4\x85\x89\x62\xb7\x54\xb4\x3c\x08\xc2\x52\x8a\x31\xc1\x11\xdb\x91\x3a\x82\x03\x5a\xb4\xb1\x54\xae\x5a\x48\x4e\x17\x00\x54\xc6\xee\x88\xb3\x2e\x2e\xa4\xc4\xd0\xaa\xb5\xc5\xbb\xd9\x61\xe0\xc5\x47\x93\x57\x7a\xac\xf0\x40\x40\xa3\xd8\xa8\x95\xe0\x22\xb9\x2d\x0b\xcb\x09\xd0\xaa\x28\x68\xae\xd5\x09\xd6\xca\x3b\xb0\x3d\xf2\x4e\x57\x11\x19\xcb\x31\xca\xc8\xe7\xe6\xcf\x43\xa8\x55\x91\x55\xea\x8b\x28\x40\x36\x96\x60\x8b\xcd\x73\xac\x92\x1e\xdd\x82\x3d\x31\xa7\x81\x35\xd0\x9f\x4a\x90\xdc\x2c\x14\x26\xec\xd2\xa4\xb1\x2e\x30\xe8\x65\xc2\xab\xd0\x0e\x2c\x68\x1a\xd4\x08\x77\x4a\x72\x59\x4b\x03\x0e\x68\x10\x38\x23\x16\x21\xe5\x59\xb6\x94\x5b\x15\x3b\x66\xcd\x19\xaa\xed\xca\xae\x92\xc2\x85\x63\x41\x1a\xb4\xb6\xc5\x83\xe3\xc4\xbc\x07\x05\x91\x45\x22\xe6\x3b\x3e\x5a\x59\xc2\x98\x89\x7a\xeb\x53\x6d\x20\x9f\x34\x62\x7e\x95\xcd\x0d\x16\x38\x1c\x1d\x80\x65\x29\x2c\x26\xab\xc8\x1e\x54\x6e\x3a\xd5\xe9\x23\xb7\x3d\xf8\xbc\x00\x1b\x8c\xcd\x3b\xc9\x1c\x80\x94\x2f\x63\x26\x40\xea\x13\x9c\x96\x05\x9c\x8f\x52\xb1\x4f\xbe\x7b\xb9\x8f\xc3\x65\x98\x11\x21\xdd\x86\xbc\x9a\xa4\x4b\x67\x8b\x16\x55\xe9\xe3\x06\xa7\xeb\x0f\x81\xcf\xad\x70\xfa\x0a\x67\x2b\x35\xc8\x3c\x72\x51\x22\x0e\x95\x33\xf1\x76\xdd\x5b\x8a\x64\xd7\x7a\xd1\x4d\xac\xb1\x16\x1d\x8e\xc5\xce\x43\x36\x03\x20\xa6\xf1\x2a\xb5\x5a\x30\x69\x2d\xc6\xf9\x52\x8b\x06\x62\x48\x12\x4e\x97\x16\xd2\x41\xa5\x73\xdb\x4e\x02\xcf\x03\xaf\x18\x15\x1f\x74\x26\x55\x6e\x6c\xbd\xea\xc8\xb7\x6e\xdd\xb6\x14\xe3\x5a\xd9\x92\x8e\x81\x2a\xdc\x1d\x8d\xc3\x34\xc3\x97\xd9\xbd\x9b\xc7\x24\x36\xee\xe3\x48\xfb\xc9\x56\x84\xe0\x55\x6c\x6e\xd9\xf7\xa5\xf0\x54\xa9\x6d\x8c\xd3\xb8\xf7\xcd\xe7\x43\x03\xe5\x76\x4a\x77\x50\xcf\x91\x1b\x77\x27\x1a\x98\xea\xb3\x42\xa2\x8e\x71\x15\xdd\xb5\x54\xab\xb7\xc5\xa0\x68\x14\xd4\x8b\x12\x47\xc2\xbc\xbb\xb4\x74\xb5\xa6\x60\x65\x1f\x74\x53\x5a\xf7\xd6\xb6\x82\xe7\x1c\x27\x50\x57\xb5\x61\xe7\x50\x34\x3a\xac\x25\x19\x20\x61\xb1\x12\xa8\xda\xe8\xdb\xd6\x98\x82\x08\xac\xc7\xb1\xce\x24\xe7\x3c\x92\xb7\x21\x18\x84\x73\xbc\x0a\x06\x61\xa1\x9d\xcc\x32\xa4\x5a\xc8\xea\x1b\xf2\x16\xbb\x58\xab\x5c\x34\xdc\x78\xb2\x70\x01\x0e\xf6\x54\x58\xda\xed\xdc\xa3\x89\x16\x5c\x35\xf2\x44\xf4\xc9\xfc\x10\x71\x61\xcd\x0d\x74\xdb\x4d\x54\xf1\xea\xd5\xcc\x61\xa2\x63\xc0\xcd\x72\x9c\x53\x2c\x65\x2b\xab\x59\x4d\x54\xe2\x86\xc9\xcf\x0f\x81\xcf\xad\x32\xbf\x0b\xc0\x07\x27\xd9\x37\xe1\x7d\x38\xc9\x16\xcb\x8a\x79\xe4\x8e\x57\x19\x4e\x6d\x04\xd7\xa0\x79\x49\x52\x87\x35\x8b\xb4\xa9\x51\x57\x21\xd2\x55\x43\x35\x87\x31\xdb\x91\xb6\x66\x0e\x3d\xce\x46\xab\xc8\x36\xd7\xe2\x55\xcc\x24\xb2\x31\x39\x3a\xcf\x3c\x49\x14\x15\xf8\x4d\x8f\xc6\x9a\xb9\x28\x07\x63\x34\xc4\xae\xa1\xde\x36\xae\xc5\xde\x39\x10\x85\x18\x99\x88\x23\x0b\x01\xc9\x38\x30\xdb\x59\x64\xa4\x88\xe9\x3e\x21\xd3\x8d\xc7\xab\xd8\xdc\x02\x25\x54\x88\x95\xbd\x02\x0a\xd9\xf4\xdc\x98\x62\x36\x3d\x98\x3d\xfb\xd6\x40\xee\xcc\xd9\x53\x83\xa3\xc8\x8e\xd7\x03\xf1\x5d\x5d\xd5\x7f\xe0\xf6\xec\xbe\xc0\xd6\x08\x29\x7b\x40\xe7\x38\x96\x92\x14\x06\xdd\xb5\x83\x03\x74\xe6\x0d\xcc\xde\x0d\x5d\xad\x4e\x78\x07\x56\x5f\xe5\xa5\x4c\x81\x08\x58\x58\x99\x77\xbb\x9e\x8c\xa1\x2a\x62\xc0\x9b\x75\xb3\x9d\x7b\x24\x86\x9d\xc7\x59\xf1\x16\x61\x75\x9b\xca\x3e\x1e\x8e\x5c\xe5\xa5\xcc\xa6\xf6\x03\x40\x6b\x17\x82\x97\xba\x05\xab\x3a\xc6\x1c\x11\xa4\xbd\x5e\xe3\xc6\x55\xd9\xfb\x11\x22\xad\xab\x11\x5d\x29\x14\xc6\x65\x13\xc2\x14\x2e\x11\x8f\x16\xa5\xec\x03\x57\xe1\x76\xbe\x6c\xbb\xe7\x8e\x22\xef\x48\x0c\x5d\xcc\x49\x60\x68\x44\x96\x75\xa2\xc3\xf9\x25\xfb\x9b\xc0\xe7\x56\xb5\xe4\x05\xac\x3f\xc3\x73\xd7\x87\x6c\x59\xd8\x33\x54\x33\x97\x01\xfc\x5c\x93\xc6\x08\x43\xc8\x77\x67\xc9\x10\xe9\x48\x03\xf8\x73\x0d\x07\x36\xf8\x32\x4b\x97\x44\xdc\x0a\xce\xa4\x4f\xd5\x83\x6e\xd5\xe3\x0a\x55\x85\xa3\x4d\xd2\xa2\x09\x5c\xc2\x54\xe0\x99\x37\xb7\xc6\x81\x91\x5e\xf9\x65\xe2\x6e\xb6\x6b\xba\x91\x29\x8a\x39\x37\xeb\x62\x5e\x24\x37\xbd\xd4\x85\x32\x5b\x41\x6a\x10\x62\x74\x74\x01\x17\xe9\xcc\x50\x5d\x80\x72\x9a\xcb\xc6\xce\xa9\x86\xc5\xea\x3d\x60\x6b\x7a\x17\xc1\x42\xb9\x3b\xb7\x60\x62\x1b\xf3\x09\x07\x41\xfb\xb9\x9f\x6b\x58\xcb\xb9\xf7\x82\x24\x56\x57\xb9\x8b\x02\x72\xae\x74\x83\x78\xe5\x0a\x57\x6c\xe1\xb4\xab\x2e\xa1\x83\x3c\x4b\x4f\x33\x00\x57\x4a\xe9\x29\x4d\xba\xee\x2c\x47\xb6\xec\x97\xb5\xa6\xbb\x52\xab\xb7\x21\x5b\x04\x17\xbf\x10\x15\xbc\xda\x75\x82\x15\x52\x79\x14\xba\xc4\xdd\x1c\x8b\xd0\x73\x19\xa1\x8d\x12\x9c\xa4\x57\x6d\xf2\x62\x4b\x81\xbc\x9f\x78\x07\x23\xef\x78\xea\xb8\xc4\x41\xfb\x9a\x6c\x80\x4b\x2f\x60\x5f\x7a\x84\x8b\x96\x6d\x0b\x76\x49\x5d\xd7\xec\x2f\x6b\xc3\xba\x59\xc2\xd9\xf6\xba\x9c\xdb\x12\xb3\x87\x16\x09\x27\x16\xb8\x44\x6b\x4d\x0b\x07\x85\x60\x33\xed\xe4\x3e\xad\x18\x78\x75\xb4\x72\xde\xec\xe9\x79\x2b\x76\xea\x02\xf0\x01\x86\xb4\x2d\x04\xbc\xab\x45\xe8\xb1\x92\xb9\x7a\x5f\x3c\xe4\xca\x0c\x88\x50\x6d\x69\x7a\xc2\x65\xa4\x2e\x27\xa9\x5d\xb3\x26\x5f\xd5\x3d\xb6\x6d\xb0\xda\xb7\x15\xef\xc7\x98\xd6\x78\xa2\x72\xdb\x86\xd4\x61\x0d\x9b\x6c\x9b\xc2\x6c\xb2\xb0\xb7\xc2\x31\xdb\x48\x97\x43\xda\xab\xc0\x67\x61\x3a\x2b\x39\xcd\x58\xd8\x0c\x92\x64\xb5\x29\x4d\x1b\x29\xc0\x30\xd7\xd1\x01\xaa\xd9\xba\x85\x76\x62\xde\xfd\x74\xb8\xaa\xcb\xac\x06\x4f\xae\xb7\xc3\x6f\xbd\xc0\x9a\x16\xba\x10\x4c\x69\x24\x0a\x42\x84\x52\xa5\x71\x44\x1a\x60\x70\x9c\x0b\x40\x4c\xac\x2c\x4d\x79\x5e\x25\xa9\x5e\x17\x5b\xb1\xb2\xe4\x3c\x42\x9f\x55\x8d\xe4\x95\xab\xc7\x5e\x3a\xcc\xbc\x41\xbc\x61\xc6\x93\x70\x3e\xe0\x69\x07\x93\x5d\x0b\x7b\x95\x0e\xd7\x97\x54\xa8\x49\x21\xa9\xb5\x1f\x89\xb0\xa5\x54\x30\xf6\xb0\x0c\x67\x5c\x2f\x76\xd5\xa7\xc3\x54\xfb\x2d\xaf\x3a\x93\xe5\x0c\x98\x5f\xd5\x93\x19\x0d\x97\xdd\x40\x44\x32\x84\xbe\x6f\x50\x6d\x38\xa4\xdd\x76\x89\xcf\xc3\xaf\x21\xa0\xd9\x0f\x81\x52\x56\x93\x39\x51\xe0\x8e\xaf\x7a\x3b\xcc\xec\xb2\x10\xba\x82\x18\xcf\xb9\x4e\xd4\xa8\x26\x5b\x2a\x3a\xd2\x63\xc1\x9a\xb9\x93\xa2\xa5\xee\xda\xe7\xb4\x1f\xd8\x4b\x10\xc8\x0d\x8b\xa8\x3e\x04\x3e\xb7\xe2\xbb\xaf\x58\x23\x98\xe1\x3e\x08\x31\x5e\xa9\xe9\xce\x78\xee\x66\x96\x80\xd5\x61\x4e\xb0\x71\xa5\x64\x52\x5e\xd3\x94\xc4\x41\x90\x40\xd2\x2f\x36\x5d\x55\x41\x37\xbd\x81\x3c\x03\xaa\x27\xe7\xd8\x66\x59\x43\x6d\x5e\x86\xd9\x0e\x17\x6c\x95\x80\xba\xda\x10\xc9\xed\x54\x6a\x6d\x27\xac\x4e\x5f\xc5\x3e\x39\x8d\x18\x6d\x1a\xe1\xfd\x38\xd6\xdb\x6a\x41\x8f\xec\x6a\x39\x32\x80\x8f\x59\xe8\x84\x16\x5b\x22\x0f\x57\x6d\x15\x28\x9e\xdc\x5f\xd6\x4a\x5a\x43\x17\xd1\xd0\x2d\xec\xab\x1a\xc0\xef\xb0\x8e\xd0\x34\x98\x19\x5a\xa2\x4e\x16\xab\x92\xf8\x98\x1b\x61\xd4\x7b\x0e\x71\x2a\x57\xb9\x38\x31\x51\xba\xda\x19\x3f\x57\x19\x17\x7b\xc0\x92\x5a\xaa\xbe\x09\x87\xe7\x92\xc2\x5a\x34\xee\x44\x51\xa5\x58\x1e\x32\xd0\xe2\x22\xe6\x97\xed\xeb\x74\xff\xdb\x83\x83\xe4\xe2\x8f\x88\xa4\x01\xb8\xac\xb4\x68\x3a\xf7\xe3\xa4\xbc\xc1\x1d\x15\x6e\x9a\x5a\xa7\x9d\xc5\x1b\x00\xcd\xb8\xaa\x45\x52\x0b\x3c\xf6\x93\xc2\x83\xf6\x8d\xc0\xe0\x46\xd8\xb4\x5a\x31\xbf\xad\xc0\x49\x50\x02\x00\x80\x77\x58\x44\x15\xd6\xc3\x9b\x4d\x53\x76\x55\x79\x1e\xf8\x02\x20\x10\x20\xac\xa5\x95\xdb\xae\xce\x46\x8a\x40\x62\x73\x84\xc6\x43\x67\x5e\xb0\x61\x79\x59\xbb\x3e\xad\x56\x30\x6c\x71\x86\x9b\xc0\xe7\x56\x1d\xb4\x0b\xc0\x67\x96\xc9\x81\xb4\x50\xf9\x7a\x92\x74\x22\x15\x5c\xe4\xea\x2c\x62\x49\xdb\x38\x57\x71\x36\x7d\x24\x7a\x54\x21\xd8\x66\xa5\x2c\x65\x5e\x85\xde\xb8\x2c\xa0\x22\x38\x9c\x94\x2d\x8a\xb2\x9d\x0b\x38\x96\xb3\x0c\xe0\xfa\x0e\x8d\xeb\x62\x9b\x5a\x9c\x64\x17\x6a\x57\x9e\x1b\x0d\x2e\xb3\x74\x09\xc7\x6c\xcb\xb9\x8b\x19\x59\x92\xba\x56\xca\xe2\xca\x64\xea\x4d\xb0\x61\x4e\x1d\x78\x80\x29\xcf\x44\xa8\x38\xec\x86\x56\xc1\xd2\x65\xfb\x3a\x71\x2e\x30\xa0\xc6\x90\x43\xd2\x1e\xa6\xf2\x20\xc2\xe8\xa7\xe4\x50\xed\xac\x9b\x30\x56\x35\xc2\x69\x56\x1d\x8d\x97\x2d\xac\xe6\xaa\xb7\x33\x20\xdb\xc4\x0c\x07\xad\xa9\x65\x43\x84\x5a\x97\xee\x8f\x3a\x4a\x09\x14\x28\xb3\x92\xb0\x86\x25\xf2\x2e\xb2\x3a\x13\x2e\x86\xce\xab\xc4\x56\x61\xab\x09\x49\x2d\x37\xbd\xd5\x08\xcc\x29\xbb\xe1\xfb\x21\x86\x18\x8a\x09\x7e\xcc\x76\x62\xe0\xb5\x06\x21\x2b\x8e\xfd\x10\xfa\xb2\x29\x70\x64\xcd\xdc\x0b\x9b\xb6\x33\xbc\x19\x5a\x71\x81\x9b\xf3\x23\x16\xbe\xfb\xa3\xce\x66\x02\x93\xb8\x29\x26\xd1\x68\x01\x08\x82\xc6\x55\xbd\x48\x2b\xb3\x51\x4d\x69\x6d\xb6\x35\xe0\xd9\xe6\xa9\xa4\x73\x92\xac\xf8\x64\x5e\x45\x82\x6e\x43\xe5\x65\x46\x0d\x93\x81\x09\x4a\x91\xd6\x9b\xc0\xe7\x56\x3d\xf9\x2b\x08\xe7\x58\xa3\x5a\x10\x2b\x98\xab\x08\x51\x2d\x3d\x86\xff\xbd\x48\xca\xb5\x63\x18\x30\xcf\x29\x74\x4a\xc9\xce\x4a\xcd\x31\x0e\x3b\xf3\x55\x9f\x77\x6f\xf2\xf0\x8e\x2f\x3e\x0c\x48\xac\xd9\xb7\xb3\xa2\x42\x20\x29\x6e\x80\x45\x09\xce\xeb\xa9\x89\x41\x9b\x3d\x5c\x4d\x9c\xd5\xe3\xaa\x6e\x17\x9d\xcd\x14\x44\xb4\x47\x2a\x46\x28\xe4\x3e\x50\xf5\x54\x11\x58\xd5\xec\x38\x07\x23\x61\x26\x2b\xca\x36\x24\xb1\x9c\x1c\xc8\x45\x5d\x45\xae\x9a\x05\xef\x38\x08\x19\xb6\x51\x2d\xcf\x9b\xc5\xd8\xcb\x42\xd4\x81\xcd\x5a\xa3\x61\xfb\x66\xdb\x52\xe5\x88\x46\x22\x7c\xaa\xe9\x2f\x23\x9c\x77\x2e\x51\xb2\xf3\xcc\x6b\xb3\x1b\x66\x9a\xba\xe2\xd6\xa1\x24\xf6\xeb\x89\x56\x96\xe1\x02\x09\xee\xb5\x43\x97\x00\x11\x98\xe7\xcb\xd6\x16\x63\x59\x3b\xda\x4b\x25\xad\xd8\x65\x17\x47\x23\x0d\x6c\xa3\x41\x78\x4c\xda\x0d\x8c\x7e\x97\x67\xd0\x27\x08\x18\x48\x44\x89\x0e\xfc\xaa\x01\xbb\x43\x0f\xe9\xb4\x3b\xe1\x5e\xf3\xe9\x32\x9c\xa3\x61\x7c\x44\x5e\xb5\x83\xc9\x87\x15\x01\xa0\xbc\xee\x1d\x6d\x71\xb7\x67\xb7\x60\x5e\xf5\x4b\xc2\x59\xc2\xcc\xb0\x4f\xa8\x43\x93\x09\xa5\x81\xb7\x74\x68\x68\x1b\x1a\xa5\x87\x3d\x0c\x3c\x49\xab\x30\x6f\x70\xcf\xd4\x32\x1c\xd7\x9b\xc4\x56\x5f\xf1\x27\xf7\x7e\xcb\x23\xee\xfb\xb0\x0f\xbc\xe2\x9e\x4f\xd8\xde\xf8\xdb\xfe\x6d\xcf\xfd\xfd\x7f\xfb\xf7\xde\xf0\x51\x6f\xfa\xf9\x07\xe9\x3f\xbb\xd7\x3d\x9e\xf0\xb9\x4f\xfa\x6b\x62\xab\xbf\xf5\x90\xf7\xff\xe5\x13\x7f\xf5\x59\x5f\x7b\xa7\x77\x7f\xe5\x3b\x1f\x7b\xc7\x3f\xbb\xdb\xef\xfc\xe0\xd7\xfd\xc5\x1b\x1e\xfd\xbe\x2f\x7d\xe7\xe3\xc9\xbd\xee\xfc\xc0\x87\x7d\xc2\x8d\xba\xac\x7b\x7e\xc2\x17\xfe\xec\x1f\xff\xf1\x73\x7e\xf3\x8b\x5e\xf2\xf7\x5f\xf7\xe3\x9f\xf4\xff\xff\xa2\x77\x3d\xf4\xc9\x9f\x7e\xbf\x9f\x7b\xc6\x37\x3e\xc0\xdd\xf1\x7d\xe0\x6d\xf7\xbe\x21\xf4\x2b\x7f\xfc\xff\xfa\xbc\xc7\xbc\xe0\xce\xff\xf9\x4e\x9f\xfb\xbd\x7f\xf7\xcd\x1f\xf6\xfa\xa7\xbd\xeb\xdf\x7e\xd6\x3d\xd2\xc3\x3f\xfb\xfc\xaa\xc7\x7c\xfc\x73\x1f\xf8\xd6\x3b\xaa\x1b\x42\x9f\xfa\xfc\x1f\xf9\xb1\xf7\x7c\xf0\xe1\xe9\xd5\x3f\xf0\x73\xf7\xba\xe3\x3d\xe1\x4b\xff\xf5\xcf\xfc\x84\xfd\xd2\x57\xdc\xf9\xbb\x3f\xf8\x69\x5f\xf6\xfe\xaf\xfb\xc0\xa7\xfc\x9b\x1b\x42\xef\xfd\x8a\xbb\x3c\xf3\xb3\x1f\xf1\xc3\x5f\xfd\x13\x8f\x79\xe3\xb7\xfe\xf1\xd7\x7f\xea\x5b\x3f\xfb\xdf\xe1\xfb\x3f\xf8\x89\x9f\x9c\xef\xf7\x97\x2f\x7a\xdf\xab\x1f\xf8\xcd\x2f\xbf\x21\xf4\xbf\x3e\xf3\x4b\x3e\xe5\x7b\xd9\x71\xef\x47\xde\xfb\xfe\x0f\xf9\xf0\x57\xbf\xf2\x7b\xfe\xf9\x97\xbc\xf8\xd7\xbf\xef\x9b\x1e\xf4\x51\xbf\xf4\x7b\x6f\x7f\xd5\x3b\x7f\xed\x4b\x6f\xfc\xab\x04\xfc\xfd\xcf\xdc\x7e\xe3\xbe\xf0\x91\xaf\x17\xf7\xff\x05\xf8\x80\x87\x2e\xbf\xf6\x9d\xf7\xfa\xa8\xfc\xf4\x0f\xdc\x49\xbf\xf5\x51\x9f\xf0\x7d\xff\xed\x76\x37\x84\x7e\xd6\xe7\x7c\xf5\x1d\xc9\x23\x9e\xfc\xac\x4f\x78\xd9\x0b\x7e\xee\xde\x8f\x7e\xf7\x4f\xbe\xf6\x69\x4f\xbc\xe3\xaf\xdc\xff\x79\xdf\xf6\x91\x3f\xfd\x8b\xaf\x78\x15\xfc\x8b\xf7\xfe\x95\xd8\xea\x56\x4f\xf5\x82\x1b\x60\x92\x92\x13\xcb\x2b\xa1\xa3\x6e\x34\x23\xd0\xe6\xe4\xde\x32\x3e\xa8\x84\x72\x37\x70\x83\x16\x07\x1b\x31\xa7\xba\x38\x02\xfa\xb8\x6c\xa2\x6f\x2e\xcd\x9e\x45\x09\x38\x75\x22\xbe\x38\x5c\xf1\xf0\x39\x6e\x89\x75\xce\x8c\x8c\x48\xe1\x0c\x8a\x64\x69\x3a\xea\xf5\x6a\xe3\x55\xab\x49\xf4\x08\xba\x23\x6e\x97\x6c\x6d\x84\x6b\xc0\x7a\x66\xca\x37\xb6\x5b\xb8\x13\x0d\x21\x4b\xd2\x9c\x4b\xa0\x6d\x03\xae\x6a\x1a\x96\x73\xb9\xea\x06\x28\x0a\xa8\x09\xba\x67\xb2\x58\x37\x18\x77\x84\x9a\x40\xce\xd4\xd8\x0a\xc8\x61\x86\xed\xeb\x70\x79\xb5\xe7\xba\xcc\xbc\x48\xa7\x2f\x9a\xc4\x60\x9d\xd4\x21\xc8\x7e\xe2\x6c\x50\xf1\xe7\x8a\x01\xed\xdc\xf9\xd8\xac\x38\x41\x45\x7d\x40\x4c\xb2\xe8\x6a\xdb\x99\xa4\xd4\x26\xa8\xaf\x1a\xc5\x37\x05\x24\xd4\x2c\xd6\x0a\x14\xa9\x71\x5a\x31\x11\x4b\x5a\x1d\x68\x21\x45\x99\x0f\x1e\x1a\xae\x65\x3d\xe8\x61\xf5\x89\x0a\xa0\xf1\xba\x91\x27\xdd\x7d\x6a\x5b\x62\x22\x33\xe9\x9d\xaf\x65\x1c\xc0\xf4\x43\x53\x01\xa0\xda\x37\x1c\xfc\xb6\xa0\x02\xa0\x06\x5b\x45\xb0\x5f\x35\x1a\xc7\x36\xa0\xda\xf4\x99\x9e\x42\xa3\x75\xd3\xcb\xe6\xe3\x96\x10\x55\xb3\x13\x5c\x22\xda\x36\x26\x69\x92\x4e\x6f\x27\x10\x5b\xad\x70\xb2\x9b\x59\xff\x5b\xe1\xf4\x05\xe0\xe3\xd6\x18\x4b\x18\x63\x96\x92\xa8\x05\x11\xb2\xd2\x80\x0a\x9c\xc8\xc5\x3b\x67\x2c\x0e\xcb\x4e\xe0\x94\x73\x23\xd5\x6c\xe3\xc8\xe9\xaa\xa6\xd6\x01\x5c\xc4\x1c\xcd\x40\xeb\x64\xb8\x2b\x7e\x88\xb6\x0f\x8d\xbc\xca\xb6\xec\x8c\xc5\xb0\x91\xd1\xf9\x08\x26\xce\x2d\xc6\xe2\xf8\x55\xe0\x83\xdb\x09\xe3\x91\x6d\x2b\x7d\xe5\xd6\x6e\x88\x57\x2e\x5b\xd8\x61\x29\xe7\x24\xac\xa1\xbd\x1b\xae\x6b\x32\x56\xeb\x99\xc1\x31\xe3\x55\x0a\x3e\x6e\x96\x20\x19\xc2\xc2\x53\xb4\x42\xb6\x33\x31\x63\xa8\xc1\x1f\x14\x22\x51\x6d\xaa\x4b\x6d\x04\x57\x9b\x5d\x96\xdb\xf4\xad\x9c\x97\xf9\x8e\xe1\xb4\x1d\xf2\x08\x3c\xa7\x05\x24\x5e\x04\x84\xb7\x65\x5e\xbb\x8d\xb3\x1b\xc3\x7c\x3c\xb4\x38\xb1\x1d\xcc\xf8\x3c\x17\xaa\x66\xbc\x6c\x12\xa3\xa4\xdc\xfa\x09\x19\xcf\x61\x33\x80\x2c\x4d\x81\x3d\x00\x5e\x50\x5d\x25\x6c\x6e\x33\x5a\xb1\xb4\x72\x9f\x65\x16\x4e\x84\x91\x2e\xdb\x1d\xdd\x36\x2d\x90\x38\x4f\x17\x41\xe5\x06\x6f\x35\x92\x7d\xea\x0a\x45\x45\x7b\x65\x18\x6d\x27\xcd\xa6\x6c\xc4\xb3\x2e\x13\x57\x08\x5c\x35\xa4\x67\x66\xf6\x6e\x17\xda\x9e\xc7\xa1\x68\x81\x62\x63\xb4\xa3\x8e\x62\x8d\x45\xa9\xcd\x03\x7d\x3a\x76\xf4\xbe\xc7\x13\x54\x1c\x32\xe0\x37\xeb\x1d\x6e\x95\xf9\x5d\x40\xbc\x45\xe4\x30\x94\x27\x06\x00\x1d\x60\x31\x78\xcb\x6e\x1d\xb6\x4e\x66\xa5\x6e\x75\x83\x87\xde\xab\x1b\x07\x83\xaa\xa8\x94\x03\x55\xf1\xaa\xea\xea\x74\x0a\xa6\xe3\xc8\xf4\x9c\x7a\xdf\xa7\x0e\x9c\xa8\xa1\x98\x3e\xd8\x4a\xd6\x6c\x02\x8f\x73\x6d\x1b\xf4\xc8\xc1\x60\xc1\x82\x0c\xbb\x68\xad\x0f\x9b\x2a\x98\xdc\xb3\xb0\xcb\x19\xe2\x49\xb1\x17\xbb\x1d\xb1\x03\xcc\x97\x4e\xc8\xb6\xea\x32\xf0\x32\x0b\x89\x5a\xce\xb2\x63\xbe\x5f\x35\x6f\xc9\x4e\xc9\x79\x52\x16\x6d\x5e\x52\xd5\x4f\xa2\x3c\xdf\x66\x6a\x36\x2c\xb1\x49\x9f\x07\xe6\xc1\x75\xbb\x35\x3b\x51\x5f\x2c\x29\x5a\x5f\xb5\x54\xfa\x9c\x4d\x41\x42\x93\x51\x78\xb5\xbd\x00\xb8\xee\xbb\xd2\x2d\xc9\x82\xda\x26\x9c\xd8\xcf\xdd\xcd\x06\x4d\x05\x7b\xb2\x04\x14\x02\xae\x5a\xba\x94\x1c\xf5\x16\xf9\x00\x87\xf2\xb3\x5b\x55\x80\xc1\x08\x70\xc2\xe3\xc9\xd6\x4a\x63\x63\x35\xb9\x11\xb7\x33\x61\x93\x43\xa5\xe9\xbc\xca\xdf\x61\x65\x60\x97\x9b\x80\x96\x9f\x71\x6f\xc6\x9d\x2b\xdd\xf2\x16\x8e\x48\xf5\xf4\xae\x46\xbb\xb7\x96\xce\x45\x55\xae\xeb\x1a\x8d\x9b\x97\xad\x11\x3c\x21\xa6\x89\x3a\x0c\xb4\x72\x98\x7b\x38\x77\x86\x2c\xc3\xd4\x2e\xf1\x98\xc5\x6c\xb2\x69\x5f\x28\x35\xa7\xc5\xac\x01\xb0\x2c\xfc\x66\xd6\xff\x56\xb5\xe4\x05\x99\xcf\xb0\xbb\xdd\x29\xa5\xbe\x51\xaa\xf7\x43\x23\xef\x99\xce\x9b\xdf\xb6\x00\xd1\x61\xd6\x03\xc2\x51\xd5\x62\x8d\x61\x4b\x67\x8e\x70\x75\x95\xd8\x4a\xa7\xa9\x32\xad\xbc\xf3\xdc\x68\xcb\x31\xe3\x61\x96\x94\x13\xae\x18\x3b\x45\x71\x09\x13\x6d\xe5\x74\x65\x39\x7c\x41\x2d\x6f\xf4\xaa\x96\xa3\x38\x8f\x14\xa7\xb6\x87\x85\x83\x66\x95\x0e\xb5\xea\x3e\x04\xc2\x32\xec\x25\x58\xef\x72\x93\x44\x9d\xfc\xb6\x4b\x76\x17\x71\x17\xfa\xa2\xd9\x42\xba\xf5\xb4\xc3\xcd\xdb\x16\xa2\xd2\x3d\x53\xb6\x68\xa1\xaa\x55\x25\x7a\x14\xc8\x9a\xc8\x6d\x5f\x7e\x8a\x23\x2c\x94\xb9\xc1\x4f\x70\xd9\xdc\xcf\xe8\x1b\x9f\x74\x3d\xed\x96\xb7\x8d\x8e\x0c\x82\x29\xb0\xd0\x0c\x21\x63\xe7\x38\x0b\x22\x65\x0b\xfd\x8c\xb1\xb6\x95\xf6\x96\x83\xbe\x4a\x7a\x1f\x67\x33\xe0\xa8\x32\x38\x14\xfc\x54\xd4\x50\x95\x50\x1f\x34\x14\x53\xd4\x74\xe5\x08\x8d\xbb\x81\x89\x62\xf3\xf0\x03\x50\x75\xd5\x25\x45\xd3\x3a\x5b\xb4\x1c\x78\x79\xca\x83\x42\x19\x74\x31\xc4\xe6\x81\x76\xce\xf4\xf4\x7a\x73\x73\xa7\xac\x6f\x2c\x61\x72\x7a\xac\xf5\x65\x42\x45\x9f\xea\x89\x37\x28\xc6\x9c\xc6\x4d\x2d\x98\x81\xc6\x00\x6c\x24\xa4\x7d\x98\x83\xe3\x65\xdb\xd3\xb0\xe8\x20\xb9\xc8\xda\x4d\x18\x37\x7b\x7a\xde\x8a\x9d\xba\xc2\xd3\x73\xeb\xd6\x07\x3f\x5b\x55\x66\xc9\xa3\x62\xf4\xbf\x57\xb3\xf5\xc9\x69\x90\xb4\xd7\x2a\xd6\xb6\xab\x8e\xf7\xc2\x8c\x0f\x92\xe8\xab\xbc\x0c\xe8\xbe\xba\xac\xe3\x4a\x16\x90\xe7\x46\xd2\xd8\xa7\x9a\x9b\xaf\x63\xc5\x0c\x28\xdf\x26\x4c\x35\x38\xad\x66\x13\x96\xb0\x7d\xa7\xf6\xaa\x11\x6b\x4a\x7a\x63\xa3\x24\xb9\x1d\x78\x53\xb5\x27\xba\xc9\x6d\xcd\x23\xce\x5d\x9d\xb5\xee\x91\xf3\x56\x48\xef\x72\x9f\x14\x83\x60\x54\x3f\x2f\x1b\x3b\x3f\x16\xad\xd7\x6d\xad\x22\x71\x08\xb2\xc9\xb1\x21\x1c\x78\x5c\x74\xea\xc7\xa9\x6b\xa2\xdb\x69\xbb\xd8\xd8\x39\x27\xeb\x71\x53\x57\xf9\x49\xb1\x8c\xcc\xba\x29\x60\xe9\x69\x33\x69\x0c\x0b\x0c\x96\xa5\x6c\x3e\xf3\x23\xa8\x12\x65\x5f\xc1\xde\x58\x6d\xe9\xdc\xf7\x89\x53\x74\xf9\x2a\x7d\x25\x8d\xd8\x06\x6c\xcc\xaa\x89\xec\xac\xf1\x8c\xbb\x5f\x28\x38\x97\x99\x28\x6e\x4b\xe6\x7b\x04\xc2\x32\xa5\xb4\xe8\x81\xcf\x75\x1d\x57\xa9\x0c\xfc\x64\xc6\xc4\x42\x85\x1d\x56\xac\x04\xc6\xb2\xcd\x93\xe9\x12\x67\xa3\x34\xe1\xd8\xc5\x14\x7c\xae\x58\x38\xaa\x5a\x08\xc7\x02\xae\x2a\x8a\xd5\xa6\xbc\x33\x40\x44\xcc\x04\x16\xd6\x29\x35\xce\x40\xbd\x4b\x1e\x2e\x9e\x2f\x7b\x8f\xeb\x61\xf8\x38\xc1\x4e\x3a\x89\x36\x4e\x95\x6e\x02\x9f\x5b\xf1\xdd\x17\x94\x5d\x54\x21\x0e\x0f\x64\x21\x39\xe6\x42\x68\x6f\x0d\x56\x55\x45\x6a\x1c\x76\x1b\x88\x0f\xc2\x1f\x07\x8c\x0c\x24\xbe\x16\xab\xd3\x36\xae\x6a\x39\xea\xfd\xcc\x10\xea\x9c\x15\x5e\x33\xee\x2c\xb9\xac\x98\x4f\x07\x07\x67\x3d\x80\xf7\xf0\x44\x30\x45\x85\x31\xf1\x6e\x9f\x8d\x81\xcb\xbc\x0c\x4a\x29\x23\xe5\x5e\x29\x04\x1e\xf8\x85\xb5\x29\xe6\xc0\x8d\xe2\x7c\xf0\x4d\x68\xb5\xc5\x75\xa7\x86\xc1\xa1\x28\xac\x2e\xb9\xbe\x5e\xe6\xaa\xe0\x9a\x53\x83\x6b\xba\x90\x15\xae\x5b\xd7\x2c\x67\x55\x05\x8e\x52\x76\x38\x57\x1e\x23\xd5\x6b\x22\x6a\xd3\xce\x16\xa1\x64\xbe\x8c\x69\x29\xf9\x38\x2b\xea\x30\x48\xe7\x02\x5d\x05\xb3\x0e\x56\x2c\x80\x92\x06\xc1\x9d\x8b\xa5\xc4\x46\x13\x8a\x2a\x62\xa3\x02\xf3\x71\xbd\xca\xdf\xc1\x15\x7d\xc8\x12\x63\x28\x73\x89\x4c\x7a\x72\x48\x62\x72\xeb\x73\x9f\x75\x3b\xe5\x12\x11\x9d\x5c\x2b\xb4\xb4\xb6\xcd\x7a\xda\x4d\x5f\x65\xe9\x42\x29\x99\x29\xce\x22\x9a\x9a\xd8\x05\x9e\x1a\x53\x21\x0f\xa0\x79\xab\x84\xac\xc0\x04\x36\x1a\xee\xbb\x6c\x5b\x71\x49\xf6\x6a\x2e\xba\xa4\x28\x22\x87\xcf\xa3\x0a\xb0\x0f\x68\x2d\xde\x29\x2c\xd0\xc8\x44\xc6\x3a\xf0\xd0\xd9\xf2\x5d\x2f\x24\xb6\xe6\xf7\x41\xda\x2c\x82\xfe\x1f\x38\x9f\x5b\x75\xd0\xae\x98\xee\x4d\x96\xf5\x86\x5a\x18\x28\xd9\x05\xe5\x19\x4a\x19\xe3\xf4\xbd\xc7\x3a\xa4\x5b\x80\xd0\x7e\x6d\x35\x1b\x61\x2a\x16\x8c\x6c\x97\x75\x31\xe0\x21\xe1\x36\x53\x45\x1e\x5b\x62\xe6\xd2\x9d\x8c\x08\x83\xd5\x11\x36\x6d\x5d\x12\x03\x9c\xfa\x4c\x28\x9e\x8c\x1c\x08\xc1\x43\x5f\xe5\x58\x74\xb0\x95\x72\xd9\x77\x90\x22\x26\x01\x4d\x42\x77\x29\xc7\xba\x2f\xd6\x75\x60\xb6\xa3\x1f\xe9\x18\xae\xec\x3d\x09\x03\x5b\x3d\xdd\x65\x2e\xd5\x8d\xbb\x3a\xb6\xce\x0e\xd0\x9c\x36\xe1\xd4\xad\xc3\xa5\x4d\x1f\xe0\x06\x40\x5a\xf4\xb6\xb5\x83\x83\x61\x03\xc7\xe2\xa8\xab\xf1\x97\xf9\x8e\xa9\x71\x0e\x66\xec\xae\x49\x0e\xa8\x92\x96\x3d\xa7\xdc\x2d\x21\x2f\xc5\x08\xb6\xaf\x74\x4c\x24\xdb\xea\x63\x5e\x77\x5d\x1a\x2b\x57\xed\x75\x65\xd2\x84\x44\xd2\x7e\x20\xb2\x21\xb9\xb1\xe2\xc7\xb0\xf3\xf4\x9e\x20\xea\xd0\x06\x8e\x48\xd3\x39\xa5\x0c\xa0\x9f\x74\xe6\x7d\x91\x57\x71\x3e\x14\x1d\xd4\x80\x84\x88\x00\x89\x05\x94\x91\x37\x2a\x6f\x38\x2d\xfb\xe6\xfd\x6d\xa7\x06\x2d\x9b\xb3\x29\x69\xb9\xaf\xb0\x60\x18\x04\xbb\x0a\x7c\x16\x76\xea\x78\x6c\x21\x47\xb9\xd2\x41\xab\x65\x33\xf8\x05\xe2\x46\x73\x3a\xb0\xf2\x12\xfb\x41\xe4\x61\x15\x13\x9d\xf4\x46\xda\x0d\xe3\x8f\x1f\x02\x9f\x5b\xf5\xe4\x2f\x00\x1f\x21\x0d\x66\xa5\x6f\x65\x5b\x96\xb3\x9c\xc4\x70\xa6\x77\x5d\xd2\x94\xa7\x5c\x30\x82\x1d\x0c\xb1\x92\xba\xa9\xbc\xf3\xe6\x80\xb6\xe0\x2a\x7d\xe5\xba\xae\x4a\xfa\x15\x28\xe7\xaa\x68\xb2\x3b\xc9\xf7\x92\xcd\xd8\x0e\xdc\x41\xb4\x9a\x2c\xd3\x0f\x0c\x4e\x6f\x2d\x36\x75\x9a\x3a\xaf\x62\x5a\x80\xab\xab\xde\x8e\xd1\xbc\xb6\x16\x38\x03\xca\x6e\x84\x3a\x40\xa3\xbe\x93\xb5\xed\xe2\x34\x4e\xe6\x55\xd1\x15\xe1\x35\x82\xe0\xe1\x65\xce\x19\xab\x8e\xc5\xa8\x7c\x80\xce\xa3\x12\xa7\x43\xdc\x0f\x1f\x34\xa5\x2a\xa2\x55\x98\x64\x0b\x61\x4a\x08\x55\x1d\x2d\xe0\x04\x38\x5d\x05\x3e\x02\x79\xb2\xa0\x53\xe7\x33\x17\xef\xb4\x08\x9e\x01\x09\xcf\x25\x55\x1f\xc7\x89\x25\x5b\xc6\xae\x94\x2e\x48\x22\x7f\xba\xc3\xc5\xeb\x16\x6b\x09\x0d\x71\xc3\x84\x0d\x91\x92\x5e\x6b\x3e\xba\x8c\xc0\x6d\xae\x30\x1b\xd7\x30\xd1\x54\x3e\xd1\x01\x4f\x7e\x80\x83\x13\x2c\xf3\x55\x24\x3c\xdf\x28\x69\x4d\x1b\xc1\x20\x85\xd9\x66\x1b\x8d\xc9\xb1\xa3\x35\x89\xb1\x71\x5f\x35\xde\x28\x39\x54\x62\x16\xc0\x73\xf1\xd1\x5f\xa5\x4d\xa6\xa7\x97\xea\x00\x22\x38\xed\x84\x6b\x42\xad\x92\x4e\xcc\x57\x2b\xbc\xd5\xdd\x05\xb4\xf1\x23\xae\x81\x9c\x94\x70\x24\x9b\xf3\xe9\x86\x8b\xfb\x43\x62\xab\x8f\x7e\xd9\x63\x1f\xf9\x8e\xef\xff\xc6\x27\xbf\xe3\xfb\x3f\xf3\x07\x9e\xf7\x75\xfe\x93\xbe\xfd\x7d\xdf\xf0\xd9\x2f\x7d\xc7\x07\x7f\xef\x6f\xdc\xe9\xc3\xbe\x89\x1e\x3f\xf4\x1f\xff\x9a\xd8\x6a\xfc\x87\xff\xf0\x9c\x9f\xfe\xd5\x5f\x7c\xe3\x87\x7d\xcd\x37\xbf\xe4\xb1\x9f\xf3\x0b\xfe\x51\xf7\xfd\x4f\x2f\xfc\xc3\x67\x7e\xe4\x8b\x1f\xfa\xbc\xed\x2e\xcf\x7a\xc9\x9f\xdf\xfd\x86\xd0\x57\xfc\xeb\x6f\xff\x34\x7d\x2f\xfc\xc3\x07\xfb\xa6\x75\xc3\x77\xf8\x99\xf4\xbb\xaf\xb9\x53\x7c\xfd\x1d\xe6\xbd\x5f\xfd\xd4\x8f\xbd\xfd\xed\x7e\xf1\x35\x37\x84\x7e\xe7\xdb\xbe\xec\x6e\x3f\x75\xe7\xef\xfe\xb8\x7f\xf7\xe3\x9f\xf6\x82\xbf\xfd\x7b\xff\xf4\xad\xff\xe0\x55\x4f\xff\x83\xfa\xf0\xa7\x7f\xde\xdb\xc1\x27\x63\xf1\xc8\x0f\x8b\x37\x84\xde\xff\xcf\xfb\xcb\x9f\xf7\x1f\x5e\xf5\xa6\xbb\xc3\x17\xfd\xd0\x4b\x1f\xf7\xd5\x5f\xff\x80\x3f\x78\x44\xbd\xc7\xd7\xdf\x5d\xdc\xe7\x5f\x7f\xf7\x73\x7f\xfd\x9d\x8f\x78\xda\x0d\xa1\xbf\xf1\xf4\x5f\x7e\xd0\x9b\x5f\xfb\xda\xf1\xdd\x1f\xa3\x9f\xfb\xe6\x3b\x7f\xe5\xa7\xfe\xda\x73\x5e\x1c\xdf\x02\xbe\xe7\x0b\xbf\xf1\x0e\x9f\xef\x5e\xf9\x82\xef\xfc\xd4\x1b\x42\x3f\xe5\x8f\x9e\xf9\x9a\x77\xfe\xe3\xff\xdf\xcf\xbd\xf3\x07\x5f\xfe\xa8\x87\x7f\xcd\x7d\x7e\xfe\xc7\xee\xfb\xde\x47\x2e\xe9\x51\x77\x78\xf7\x5d\xec\x0b\x1e\xf6\x71\x3f\xff\xfc\x1b\x42\xff\xc5\x33\x3f\xb9\xff\xf4\xf8\xf5\xbb\xfd\xcf\x47\x3e\x78\xf9\x81\xd7\x7e\xfa\x77\xdd\xee\x7b\xef\xff\x9b\x8f\xfd\xf9\xd7\xfe\x9d\xdf\x7d\xfa\xb7\xde\xef\x21\xaf\x28\x37\xfe\xd5\x1f\xbd\xdf\x5b\xda\x17\xfc\xcf\x3b\x7f\x2b\xba\xfd\xe3\xbe\xe7\xc3\xbf\xfc\xdd\xff\xf5\x5d\xf5\xcf\x3f\x5b\x3e\xe9\xef\x7e\xf2\xb7\x3c\xff\xb3\x9e\xf2\xa4\x37\xbc\xf0\x9b\xfe\x4a\x6c\x75\xab\xa7\x7a\x41\xed\xdb\xbb\x38\xdb\x42\x8a\xad\x27\xf2\xfb\x3a\xe4\x61\x4f\xca\xbd\x2a\xa4\xaf\x6c\x6e\x7e\xb5\xf3\x1c\x68\xa0\xda\x59\x70\x10\x82\x98\xaf\x3a\xd9\xbb\x56\x2b\xda\x82\xab\x9d\xec\xb9\x65\xbd\xb7\xad\x90\x8d\xf7\xfd\xc0\x70\x95\x3a\xef\xb9\xd4\x1a\x54\x3f\xa2\xdc\x71\x0c\x8b\x52\x57\xa1\x9d\xde\x0d\x2a\x0d\x26\x24\xb4\x73\x61\xa1\x7e\x8d\x7e\xa9\xc9\xa1\x6d\x69\xa6\xc6\x3d\x8c\x30\x91\x3e\x0d\xd2\x5a\x81\x60\x90\x89\x57\x71\xed\x2b\x14\x39\xa1\xad\x96\x39\x84\x40\xeb\x99\xd8\x32\x5c\xa5\xa6\x51\xb4\x2e\x3a\x89\x6d\x1e\x61\x2f\x53\x21\xb0\xee\xd2\xfa\x1e\xaf\x13\x16\x05\xd1\x97\xc6\x36\x21\xf8\xba\x9c\x67\x02\xde\x01\x77\xcc\x84\xcb\xd8\x37\x61\xa6\x3b\x70\xa4\x74\xae\xd3\xa7\x73\x4f\x4b\x57\xf6\xaa\x11\xeb\x52\x8e\xa1\xc4\xa1\x21\xc1\xb7\x7d\x12\xde\x8b\x15\xd2\x5d\xb0\x63\x1e\xfe\x5c\x1d\x50\x62\x84\x71\x78\x4d\x73\xdb\x17\xd1\x7a\xbc\xcc\x58\xf5\x84\xf9\x9c\xa7\x96\x59\x02\x6e\x66\x52\xcd\x2c\xc3\xea\xfd\x18\x70\x89\xfb\x82\x86\x8a\x6b\x2d\x8b\xc8\x5d\x36\x9c\x14\x88\xc0\x5c\xb5\x8e\x81\x61\xb9\x9d\x8e\x86\xea\x5b\xdc\x17\x40\x8d\x85\x79\xdd\x57\xbb\xb3\x25\xa6\x15\xe1\x6c\x44\x51\xd4\x3a\xe0\x33\x71\x7c\xe4\x13\xde\x4c\xbc\xdd\x0a\xa7\x2f\x00\x1f\x3e\x85\x1b\xcd\x30\xef\x16\xac\x8a\xc8\xcc\x4e\xde\x66\x24\x75\x4b\x73\x88\xb0\x0e\x87\x98\x5c\x6d\xc5\x84\x10\x9d\x14\xa5\xfa\x2a\x5e\x79\xec\xd9\x6b\x2f\xe0\xb2\xf2\xec\x4b\x38\xa5\x67\x36\x57\x5e\x50\x44\xb8\xca\x4d\x80\x0c\x42\x6a\x0b\xb1\x3a\xf6\xd9\x83\xad\xfc\x2a\xef\x24\x62\x8a\x2b\xbc\x70\x4f\x92\xd5\x63\xa8\xe6\x2b\xe0\xe7\x7e\xc0\x7d\xdb\x0f\x8b\x7b\xb0\x02\xf2\x2e\x22\x3c\x00\x4b\x5c\x4f\x7a\x95\xc4\x89\xb9\x24\x8f\x01\x2a\x96\x1e\x36\x43\xce\x6e\xa6\x59\x52\x36\xa3\xf6\x4e\xb8\x1a\xcb\x7a\xe8\x81\xfb\xbe\x64\x9e\x35\xdb\x3a\x47\xe7\x65\xbe\xc1\x64\x15\xa1\x2c\xd0\x1d\x6a\x0f\xa2\xd6\xad\xaf\x71\x70\xab\xc7\x66\x72\xe1\x01\xe5\xf5\x70\x80\x85\xd8\x74\x1a\x67\x66\xe3\x54\x97\x81\x0f\x81\x16\xb6\x71\x70\x13\x77\x1b\x78\x98\x93\x8a\x80\x5a\x9d\x87\xcc\x01\xe6\xb9\x52\x17\xe4\x50\x50\x2b\x7e\xba\x89\x20\x84\x57\x3d\x13\x30\x50\x27\x44\x46\x72\x8e\x0c\x7c\xd0\x33\x6d\x07\xa1\x68\xaf\xb4\x2d\xd8\x90\xca\x03\x66\xd8\xa2\x2d\xe8\x3e\x70\x48\xea\xb8\x6c\xef\x3a\xad\xa6\x6d\x35\x45\x5f\x06\x00\x46\x67\xe7\x50\xdf\x48\xd1\x36\xb8\xac\xd2\x81\x36\x97\x0e\x57\x85\x05\xe3\xff\xa5\xed\x4f\x83\xf8\xfb\xea\xf2\x40\x10\x15\x22\x26\xd1\x8e\x24\x64\xd0\xa4\x15\x75\x12\x95\xa8\xad\xf7\x2c\x57\xed\x36\x38\x12\x20\xe2\x32\x82\x0b\xa6\x51\xe3\xd9\xcf\xb9\x67\xbf\x67\xbf\xae\x68\xa6\x55\x04\x17\xd0\xb8\x8c\x0b\x66\xc4\x24\xa8\x71\x6b\x77\xb1\xda\x5d\xd0\x44\x8d\x8d\x4e\xc6\x2d\x69\x44\x8d\x3b\x2e\x68\xdb\x42\x4f\xfd\xad\xc2\xfa\x95\xff\xae\xfa\xbd\xba\x6f\xbf\xf5\x79\x71\xeb\x7e\xcf\x7d\xce\x67\x79\x3e\xcf\xc3\xa9\x3e\x9c\x7a\xd0\x01\xfe\x4d\xe0\xf3\xb0\xcc\xef\x06\xf0\x61\xf0\x2a\xe5\x44\x19\x0e\x43\x0b\x53\x08\x26\x60\x86\xa9\x04\x59\xb3\x0d\x49\x34\x2f\x84\x01\x48\x2b\x1f\x07\x13\xf9\xc0\xfc\xb6\xa5\x1a\x21\xdc\x31\xed\x96\x3a\x18\x60\x5c\x3b\x76\x31\xcd\x09\xc8\x7e\x60\x11\x83\xcf\x20\x75\xea\xb7\x7a\x4d\x49\x75\x3e\x95\xd5\xf2\xb6\x25\x5e\xd9\xf1\x1e\xcf\xd6\x8e\x90\x8e\x43\x1b\x3c\xc2\x75\x5c\xa9\xb9\x36\x67\x68\x18\x2b\x70\x14\xb4\x53\x61\x96\xda\x6b\xbd\x18\xbb\xec\x5d\x35\x4d\xa0\x54\xf8\xca\x2e\x8e\xa2\x53\x53\xa4\x83\x1d\x06\xd3\x3c\x6a\x9e\xa7\xe6\x9b\x8b\x3e\x52\xc1\xe0\xe6\xd2\x11\x89\xdd\x09\xa0\x77\xa9\x6f\xc4\x9d\xb7\x0c\xae\xb5\x0b\x1f\x2a\xd3\x65\xb3\x1a\x5f\x87\xcb\x07\x85\x84\x03\x2f\xc1\x85\x8b\x4e\xe9\x14\x23\xac\xad\x2f\xda\xef\x52\xba\x26\xe7\x79\x9e\x9b\x3d\x06\x15\xdb\x34\xd7\xe6\x3d\xa1\x69\x86\x81\xfa\x40\x93\x6d\x38\xa2\x88\x0f\xe6\x5a\x37\x42\x2b\x35\xa4\xcc\xf5\x2e\x93\x47\x1d\x49\x26\x8d\x5c\xc9\xa8\xcd\xb6\x2b\x9f\xb1\xc6\x80\x74\x27\xf6\x08\x5c\x58\x5c\x04\xa5\x88\x49\x57\x57\x4b\x5c\x31\x61\xd7\x5d\xdd\x9a\x70\x16\xb3\x88\x4a\xdb\x8c\xf0\x90\x8a\xb9\x9a\x0c\xec\xdb\x5f\xf0\xfe\xb9\x04\xc6\x46\x5a\x04\x3f\x0f\xc4\x40\x0e\x1e\xee\x97\x79\x74\xe3\xed\x61\xb5\xe4\x0d\x8d\xb7\x43\x86\x7d\x2c\x82\x2d\x38\x69\x80\xda\x1e\x1d\x1b\xd5\x93\x39\x32\xd4\x93\x14\x14\x25\xc2\x9d\x1d\x10\xb0\x05\xce\x8e\x33\xb2\x77\x0d\xb5\x26\x5f\x60\x3f\xcc\x45\x2f\x29\xf9\x90\x52\xec\x57\x55\xbc\xe7\xc1\xf8\x79\x15\xdf\x47\x3a\xa9\x57\x59\x56\xb7\xed\x0e\xab\x80\xee\xfa\xd0\x28\xc9\x65\x3b\x32\x16\xea\xcc\x44\x88\x6e\xbc\x0e\x14\x0b\x80\xaf\x64\xfb\xc8\x50\x40\x42\xd8\x24\x03\x32\x75\x05\xd2\x2b\x9a\xf5\xae\x5b\x9e\x51\x75\x44\xce\x4c\xf0\xe8\x62\x22\xaf\x95\x77\xbe\xe9\x6b\xdb\x2f\x68\x87\x61\xbb\x6d\x80\x9c\x7e\xa8\xa3\xa2\x4d\x2a\x7a\xd9\xdb\x1c\x66\xd5\x02\x34\x3f\x72\x80\x01\x3c\x64\xea\x1a\x88\x50\x3b\xdf\x71\xef\x92\x88\xe2\xb5\x4c\x79\xef\x9b\x0e\xf4\x74\xd1\x26\x3d\x05\xb9\xab\x19\x59\xfc\x90\x74\x31\xaf\x4a\x48\xc4\xec\x20\xb9\x25\x04\xd3\x7b\x76\x8b\x30\x90\x8e\xbe\x25\xbc\x66\x2b\x04\xb8\x0c\x94\x36\xdd\xdc\x36\x1d\xb2\x5e\x41\xd0\xa5\x14\x03\xe1\x42\x38\x86\x2c\x9e\x0d\x2b\xd9\x91\x19\x33\xcb\xa6\x9c\xc7\x5b\x13\xdb\xe5\x7d\x12\x6b\xda\x7c\x57\xd7\x9f\xcc\xe6\xd8\xb6\xf7\xa5\x11\xb0\x22\x8d\x31\xc4\xd9\x3c\x3f\x97\xcb\x21\xa7\x7e\x4a\xa9\x79\x39\xab\x93\x48\xac\x11\x30\x67\x0f\xf8\xc8\xbf\x09\x7c\x1e\xd6\x9d\xba\x21\xf3\xb1\x67\x1e\x9e\x55\xbc\x1c\xaf\x00\xb4\x36\xe3\x1a\x1b\x53\x2e\x8a\xbd\xb7\x23\x06\x35\x75\x91\xd2\x6f\x96\xd9\x13\xc4\x53\x16\x7e\xd7\x2d\x8f\xc5\x56\xd8\x5e\x77\x64\xf7\x76\xec\x98\xcb\x88\x44\xbb\x40\x35\x5c\x20\xc1\x60\xc2\xf4\x9a\x76\xd9\x30\xcd\xb0\x0c\xa3\x6c\xef\x52\xee\x26\x2c\x54\xa4\xb8\xb3\x3b\x00\x0d\xba\xcd\x06\xd5\x0e\xc2\x10\x8a\xa5\xd3\x71\x96\x6c\xa5\x49\x22\xa9\xbe\x7b\x1d\x8d\xd1\xb6\xb0\xbb\x8e\x37\x23\x44\xc0\x10\x47\xf7\xe8\x38\x54\x0a\xb6\x54\xe6\xb4\x3e\xcf\xcb\x0c\x65\x90\x2e\x92\x09\x53\x10\x4d\x7b\xe6\x00\x94\x58\xee\xd2\x55\x27\xdd\x2c\xdb\x71\xa4\xb6\xd5\xb5\x77\xaf\x15\xd9\x12\xaa\xda\xce\xba\x96\xdd\xb9\x35\x88\x33\x55\x33\x39\x55\x14\x7d\x90\x6e\xef\x92\xfe\x21\xa1\xb3\x14\xb5\x97\x11\x70\x8a\x0d\x6a\xc4\x6c\x48\x66\x2c\x69\x49\xca\x25\x6f\x34\x73\x7b\xc4\xb2\xbb\x28\x37\x76\xa4\x38\xec\x5d\x8b\xcd\x73\x03\x46\x42\x47\x06\x3f\x2f\xb0\x73\xb2\xad\xd3\x73\x71\x51\x20\x5d\x04\xd2\x82\x96\xd9\x49\x5c\x86\xbb\x06\xf2\xd4\x1b\x3f\xd9\x5d\x65\x57\xb5\x38\xee\x1c\x38\x0a\xb4\x07\x72\x98\x8c\x82\x3d\xa6\x92\xc7\x20\x38\x30\xe8\xeb\xb5\xed\x27\x8b\xce\x26\x6f\x41\xdd\x04\x7c\xc0\xe3\xe3\x4d\xe0\xf3\xb0\x7e\xf7\x1d\xe2\x32\x19\x85\xca\x66\xe0\xc7\x36\xc5\x00\xf2\xd8\x86\x75\x1b\x19\x13\xcc\xd2\x58\xba\x08\x24\xd3\xce\xc8\x9b\x57\x94\xf6\x74\xe8\xdb\xe8\x3c\x25\x73\x21\x9a\x8b\x00\xee\x67\x5b\x8b\xcb\xb1\xd9\xea\x48\xbf\x72\x05\x23\x75\x78\xf0\x63\x6d\xf3\x00\x14\xf3\x0c\x74\xd8\xfb\xba\x4d\x35\x92\x30\xc3\x8e\x89\x8e\x4a\x88\xab\x1d\x1e\xdb\x8c\xbe\xc6\x9d\x5a\x7e\xa0\xc8\x00\x9f\xd8\xa3\xca\x53\xde\xc1\xc8\xe8\xd2\x07\xbb\xeb\x78\x1f\xa6\x2d\xef\x62\xbc\x4e\x0b\x84\x5c\x36\x5f\xd2\x98\xaa\xb7\x56\xaa\xdb\x4b\x6d\x1e\x64\x7b\x5c\xa0\x06\xab\x0b\x50\x1b\x1b\xf4\x2e\xda\x17\xca\x96\xb4\x12\x53\x45\xd7\x28\x47\xcf\x12\x9c\xbb\xae\xab\x88\xdd\x5f\x61\xad\xc8\x92\x68\x90\x76\x05\x1c\xb4\xde\x45\x03\xae\xbb\x24\x5d\x40\x6e\x20\xa7\xcb\xb0\x03\xa6\xab\x78\x07\xae\x52\x4a\x37\x58\x5e\x82\xdb\xa4\xba\x0a\x95\x40\x03\x87\x9f\x13\xef\x83\x7a\x7c\xdd\xb5\x59\xd2\x94\x1f\x1b\x10\x79\x05\x40\xf9\x45\xf0\x32\xf3\x5c\xa5\x41\x58\xf5\xbe\x1f\x73\x0c\xc0\x34\xc5\x93\xd2\x8d\x9e\xc0\xcd\xd2\xef\x5a\x09\x25\x78\x6e\x65\x9b\x98\x9d\xc3\x83\xdd\xae\x2e\xa3\x38\x0c\x61\x30\x46\xc2\x07\x9f\x0a\xf1\x2b\x6c\x0b\x1c\x6c\xab\x02\x58\x07\xec\x03\xfb\xe8\x6f\x02\x9f\x87\x4d\xd0\x6e\x00\x9f\xdd\x4d\x14\xe2\xc6\xa0\x14\x4b\x44\xc8\x44\x93\x65\x2f\xa1\x19\x8e\x97\x95\x4c\x1a\xd6\x04\x81\x63\xd0\x4e\x81\xd8\xfd\xc8\xb7\x4d\x76\x96\x16\xd9\x37\x2f\xc5\x19\x10\x80\xe7\x91\x39\x01\x1b\x4d\xc3\x6e\x40\x84\x8e\xd2\x32\xc8\x6c\x94\xed\x66\xb7\xae\xa0\x80\xfa\x6d\xb6\x01\x82\x70\x83\x82\x11\xdb\xae\xce\xbc\x92\x0a\xbc\x20\xe1\x2c\xaf\x19\x8b\x5e\x09\x39\x89\x4f\xc6\x5c\xd3\x2b\x50\x2e\xe5\xa0\xb9\x6d\xcf\x78\xd7\x44\x0b\x59\x57\x91\x81\x9e\x51\xb0\x0c\x19\xa9\x1b\xbc\x88\x1d\xa5\x9f\x9a\xb7\x70\x5e\x5b\x4b\xc2\xb5\x49\x8e\xc4\xab\xa1\x77\x11\x8b\x78\xd3\x7d\xf7\xe3\x34\xa9\x62\x38\xf9\x10\x65\x5a\x18\x83\x73\x97\x38\xcc\x4c\xaa\x8a\x58\x76\xab\x63\x0f\x79\x86\x65\x2f\x4f\xef\x12\x59\xc6\x66\xe4\xa1\x75\xdc\x71\x5f\xd3\x1d\x6b\xaa\x39\x77\x65\x20\x8c\x00\x1d\x6d\x6d\x7a\x67\x44\x67\x2f\x2d\x15\x5d\x50\x0f\xd0\x76\x57\xa7\x85\xe0\xad\x79\xeb\x94\x63\x4e\xd3\xe1\xc8\x5e\x82\xaf\x2c\x1c\xa9\x3a\x35\xba\x81\xf4\x80\xc9\xb6\x2d\x6f\xdc\xc7\xad\x59\x56\xcc\x5d\xba\xea\xd2\x6f\x52\xd5\x19\x1d\x0a\xc2\xd3\x7c\xf4\x64\x37\x3f\x66\x4d\x5d\x09\xb5\x0f\x20\x4f\x42\x2f\x7c\x19\x76\x05\x54\x20\xdb\xe0\x03\x04\xb4\x37\x81\xcf\xc3\x66\xf2\x37\x80\x8f\xcc\x84\xf6\x03\x1d\xc5\xd8\xed\x91\x3a\x83\x1c\x2e\x9f\x90\x2c\xbb\x4d\x88\x25\xe3\xab\x5d\x31\x65\x5d\x35\x6a\x90\x3b\x92\x95\xb9\x8b\x6c\x75\x06\x73\xd6\x84\x4b\x5c\x65\x80\x6a\x07\x0c\x6d\xd2\x33\xc8\x7e\x85\x95\x4b\x64\x53\xef\xa8\x35\x20\x35\x59\xee\x42\x80\x5b\x76\x57\xcf\x07\x9e\x90\xf3\x0b\xf1\x65\xa4\xb3\xe1\xec\x47\xbe\x2e\x11\x3b\x98\x1e\xfa\x78\x14\x70\x99\x95\x01\xb5\x98\xe3\x0d\x38\x32\x06\x27\x77\x1d\x6f\x37\xf4\x00\x7c\x53\x97\x5a\x02\xb4\xac\xba\xb3\xb0\xee\x6d\x90\x75\xa0\xa4\x9d\x1f\xbc\x69\x81\x4b\x08\xf8\xe0\x00\x67\xcd\xed\x5d\xc2\x6d\xf8\x44\x40\x2f\x22\xc5\x01\xc5\x65\xb1\x43\xe3\xa4\x81\x1c\x78\x0c\x1e\x45\x4b\x0d\x98\xea\x3c\xcc\x97\x88\xb6\x7a\x57\x11\xbc\x8b\x73\x4a\x5b\x44\x41\x76\x18\x21\xdd\x2c\x3c\x1c\x86\x5a\x62\xb8\x75\x43\xb3\x90\xb5\x2b\x9c\xc8\x15\x8e\x2a\xcf\x36\x6a\xc0\x67\x4e\x86\xdc\x45\x78\x67\xb4\x9d\x51\xf6\xa3\x5e\x3e\x8d\x71\xb9\xcd\xf8\x73\x82\x4a\xa7\x94\xfe\x2c\xa0\x8d\x2b\xb1\xa3\xac\xc0\x37\xa9\x0f\xbd\x1a\xbf\x8d\xf6\x65\x27\x58\x67\x8a\x58\x2b\xb5\xd7\x12\xc8\x65\x16\x4e\x2c\x26\x8d\x4f\xa0\xb4\x17\x2d\x1a\xd6\x39\xd6\x93\x6e\xee\xc4\x47\xc8\x0f\x28\xa0\xbd\x89\x6c\xf5\xb4\xfa\x84\x7f\xf7\x33\xff\xe4\xeb\xde\xf2\x47\xde\xfe\x43\xbf\xfe\xfb\x7f\xf1\x17\xbe\xf7\x4b\x9e\xfc\x7d\xbf\xf7\x41\x5f\xfb\x86\xb7\xfc\xe6\xcf\x72\xfe\x27\x5f\xa3\x9e\xf8\x57\xc8\x56\xf2\x53\x3f\xb4\x7d\xe9\xf3\x5f\xf3\x33\xcf\x7d\xcc\xf9\x76\x8f\x13\xbf\xf5\x56\x5f\xf5\x09\x2f\x79\xc7\xa7\x3f\xfe\x78\xfd\xab\x9f\xf8\xc4\xb7\xfb\xd9\x6f\xfc\xdb\x7f\xf0\x40\xe8\xf3\xbe\xe9\xd7\xbf\xfc\x53\xde\xfa\x55\x1f\xfc\x85\x8f\xf9\xfe\x3f\xfe\x85\x17\xbe\xd5\xef\xff\xce\x8f\x7c\xf6\x7f\xf7\xbb\x6f\x21\xbf\xe2\xdf\x7f\xee\xcf\xbe\xd7\x37\xbc\xf2\x7d\xbe\xe8\x81\xd0\xaf\xd7\xef\xf9\xe2\xdf\xfe\x40\xf5\xe5\x5f\xf0\xfb\x7f\xef\xcf\x5f\xfe\x58\xf8\xdc\xcf\xf8\xef\x3e\xfb\xf9\xdf\xfa\xd4\xdf\xfd\x89\x0f\xf9\xa9\xb7\xa4\x3f\xf8\x67\x8f\xfd\xa7\x0f\x84\x3e\xfd\x7f\x7b\xe3\xfb\xbf\x01\x44\x35\xde\xf5\xb9\xbf\xf8\xee\xf0\x69\x2f\xfe\x82\x7f\xf1\x19\x6f\xfb\xf3\xff\xf3\xe7\x3f\xf9\xfd\x5e\xfa\x0e\x8f\xff\xe0\x57\x7c\xc8\xe3\x1e\x08\xfd\x82\xa7\xfd\xc8\x6b\x9f\x04\x9f\x27\x9f\xfa\xa4\x7f\xf0\x51\x1f\xf2\x16\xc7\xf5\x9f\x3e\xf4\x71\xdf\xf8\x56\x1f\xf6\xf2\xf2\x4d\x2f\xf9\x86\xdf\xf8\x3b\xff\xe2\xb7\xbe\xf6\x81\xd0\x8f\xf8\x8e\x1f\xfe\xf0\x17\xfe\xe8\xeb\xfe\xdd\xfa\xc0\x67\x7f\xd8\x87\xbe\xe3\x97\x3d\xee\xdb\xbe\xe1\x29\x6f\xfb\xc6\x9f\xfe\xc8\x0f\x7f\xd6\x27\xfd\xad\x19\xde\xa7\xbe\xdd\x03\xa1\x3f\xfa\xa2\x9f\xf9\xe5\xff\xfd\x0b\x5f\xf0\x6e\x5f\xf9\x89\xff\xb7\x9f\x79\xfd\xe3\x7f\xfc\x43\xbe\xfe\x79\xe9\xa7\x5e\xfa\xdd\xef\xf3\xe7\xbf\xf3\x4e\xaf\xfb\xb3\xbf\xfb\x86\xd7\xbe\xf4\x81\xd0\x5f\xfb\x3b\xcf\xfe\x83\xfd\x5f\xbe\x8f\xfc\xd2\x67\xbc\xf0\xd7\x1e\xf3\x9c\x6f\xe2\xdf\xf9\xf6\xdf\xfe\xc7\x3f\xf5\x5d\xaf\xfb\xf1\x0f\x78\xb7\x1f\x7e\x2b\xfa\x8c\xaf\xf8\xfa\x4f\x7f\xd3\x9f\xf0\xb0\xb7\xfa\x57\xfe\x04\xf5\xff\xf9\x91\xef\xfd\xcf\x9f\xfb\x7d\x4f\xf8\x6b\x6f\xff\xf4\x5f\xfd\xcf\x4f\xfd\xaf\xbf\xf8\xf7\xdf\xfd\xd3\xc5\x37\xbf\xd7\x7b\xfd\xc2\xb4\x3f\xf6\xaf\xfc\x77\xfd\xf6\xdf\x78\x20\xf4\x67\xff\xe1\x7b\xff\xf8\xb7\x7f\xdd\x3f\x7c\xd6\x7b\x7e\xd8\x2f\x91\x77\xfa\xd3\xef\xf9\xb4\xff\xf4\xee\x4f\xfb\xb9\x57\xbc\xff\x2b\x7e\xf2\x25\xff\x7d\xff\xd5\xd7\x7c\xf9\xa7\xfc\xd1\x03\xa1\xbf\xfc\x11\xaf\xfe\xaa\xa7\x7e\xbf\xfe\x8f\xef\xf3\x6d\x3f\xf8\x36\xbf\xfc\xd8\xe7\xbe\xfa\x5b\xff\xc7\xaf\x78\xdc\x7b\x3d\xe1\x6b\xae\xef\x78\xf5\xb7\x7e\xd7\x3b\x3d\xe6\x47\x1e\xb4\x7d\x2c\x1f\xef\x3f\xe7\xc5\x5f\x87\xde\x46\xbe\xf6\x4b\x7e\xe5\x49\x3f\xf2\xeb\xbf\xf8\x01\xdf\xf5\xe4\x57\x7e\xeb\x53\xff\xec\x59\xf0\xad\xb7\xf1\xff\x7e\xc5\xf7\xbe\xea\x81\xd0\xa7\xfe\xa3\x8f\x7f\xcc\x13\xff\x97\x4f\xfd\xd6\x1f\x7a\x5f\xfc\x13\x4f\xf8\xa2\x6f\xf8\xb2\x7f\xfd\xd7\x5f\xf2\x82\x27\x7d\xf9\x8b\xbf\xf9\x15\xed\xb5\x4f\x7c\x8b\xaf\x7b\xe6\x73\x1e\x08\xfd\x1b\xff\xeb\x73\x3f\xe7\xc5\x1f\xf9\x5f\x1f\xff\xed\xe7\xfb\xfd\xc6\x9f\xfc\xd8\xb3\x5e\xfa\xd8\x2f\xf9\xca\xdf\x7c\xc7\xa7\xfc\xfd\xcf\x7c\xe6\xdf\x7f\xea\x73\x88\xfa\xad\xff\xf0\xe0\x9f\xf0\x0b\x4f\xf9\xa6\xff\xe6\x2d\x3f\xf5\x67\xde\xe9\xc5\xf9\x03\x7e\xfd\xdd\x7e\xf7\xbf\x7d\xfe\xc7\xca\xf7\x78\xd7\x9f\xf8\xdb\x7f\xe3\x1d\xfe\xf3\x7b\xbe\xeb\x4b\x3f\xfa\x3b\xfe\xfa\x03\xa1\xbf\xfa\xa7\xee\x59\xcf\xfd\x95\x17\x7c\xff\x2f\xfd\xda\x3b\x3e\xed\xb1\x6f\xf8\xad\x2f\x5f\x7f\xf4\x31\xcf\x78\xcd\xa7\x7c\xd2\x1c\x5f\xf2\xb9\xfb\xb3\x7f\xe9\xbd\x3f\xff\x2f\x19\x6f\x0f\x7b\xab\x77\xec\xb9\x63\x8f\x0f\xb7\xcc\x06\x2d\xaf\xb1\x71\x15\xcf\xb8\x97\x69\x38\x58\xac\xf0\x83\x0f\x0d\x28\x72\x44\x65\xbf\x84\x0a\xc8\x85\xdb\xda\xc7\x70\x9f\x65\x1b\xf4\xea\xba\x4a\xc9\x19\x89\xb5\x0b\xb4\x6b\x12\x39\xe6\xfd\xec\xcd\xba\x3c\x13\xe6\x0a\x36\x6b\x93\x66\x1d\x96\xbb\x26\x8b\x92\x42\x32\x6a\x69\x8c\xab\x20\xcd\xb2\x6e\xa7\x2b\x53\x84\x8e\x81\x5b\xa1\xc7\xa6\xad\xaf\x67\x8b\x51\xc4\x72\x15\x47\xc0\x6e\xee\xd2\xb0\x5f\xfc\x40\x8f\x64\xde\xcb\xec\x15\xc7\x1c\x2d\xc4\x6c\xb9\x64\x6b\x5b\x7c\x8e\xd0\xaf\x21\x3a\x3a\xc3\x89\xe3\xa1\x05\x19\x62\x82\xbb\xe8\x2f\x11\x4b\x24\x39\x0f\x89\x6d\x92\x96\x89\xda\xdc\x1c\x59\x57\x88\x7a\xea\xb2\x08\xe4\xc1\x2b\x4f\xb1\xf3\xca\x56\xd6\x71\x85\xb7\x2d\x02\x47\x67\xd3\x8e\x0a\xb9\xf0\x80\xe7\xa5\xbc\x72\xb3\x80\xa5\xac\x55\xb1\x1c\x03\xba\x30\x93\xc1\x00\x1f\xd5\xf9\x39\x6c\x0a\xc4\xdc\x75\xf9\xc9\x32\x54\xea\x74\xf4\x89\x62\x2a\x34\x4d\x20\x4f\xe9\x62\xc8\xc4\x37\x49\xea\x16\x90\x81\x81\xf0\xd3\x0d\xad\xf6\x9e\x86\x60\x77\x25\x49\x53\xf7\xa0\x0e\x38\x9a\x6b\x42\xe1\x3e\xb4\x1e\x67\x72\x35\x76\x25\xd6\x69\x84\x5d\xa9\x57\x4e\x57\x2d\x68\xb5\x5d\xa5\xab\xf2\x47\x93\x4e\x1e\x86\xd3\x37\x80\x8f\x70\xfb\x79\xe4\x75\x99\xee\x69\xdd\x54\x39\x6b\x88\x70\xc6\x6b\x89\x03\xe6\xa0\x14\xb8\x96\x3e\xd1\x36\x6b\x93\x6d\x02\x8e\xc4\x5d\xfc\x21\x0a\xf8\x05\x91\xf5\xd7\xec\xd2\xcf\xc5\xc1\x11\x92\x49\xc2\x37\xa1\x9d\x37\xad\x0a\x0e\xea\x31\x55\xd9\x31\x61\xe7\x62\xcb\xe1\xbb\x7c\x84\xa8\xd5\x99\x9e\x7b\xf4\x4e\xe1\xd6\x30\x73\x45\x5d\x91\x17\xbb\x95\x26\x9a\x58\x31\x6d\x67\x83\xf0\xc2\x47\xd8\xdb\xe6\x88\x69\xe9\x2e\x7b\x13\x72\xc2\x8e\xf2\x2a\x90\x96\xb9\xf9\x93\x36\x2f\xe9\xa1\x2f\x7c\xce\x04\x36\x03\x09\xe0\x69\xb8\x62\xa5\xf1\xb6\xa4\x70\x26\x61\xc8\x5d\xe0\x13\x2e\x6e\xe7\x82\xf9\x72\xee\xbc\x50\xab\x97\x23\x0b\xd2\x0a\x03\x32\x7b\x1f\x32\xe2\x73\x8d\x08\xe4\x26\xfc\xe8\x62\xb4\x45\xee\x72\x50\x24\x7e\x80\xc9\xcb\x31\xb3\xe1\x6a\x93\x7a\xcb\xce\xdb\x15\xc8\xce\xf6\x31\x28\xc4\x83\x5c\x87\xdd\x47\xce\x55\xef\x93\x0c\x5a\xe2\x71\x57\xad\xd8\xd1\x32\x72\x4a\xb1\xe4\xec\x71\x4d\xa9\xa8\x9d\x43\x0f\x5f\xc7\xae\xdd\x6e\x5b\x10\xf6\x92\xc9\x45\x52\x28\x1a\xe2\xa0\xdd\xde\xa5\x35\x24\xf0\x04\x28\x09\x8e\x34\x83\x7e\x61\xcf\x80\x5b\x07\xc1\xb2\xeb\x01\x11\x36\x50\x1f\xd9\x6b\x4a\x4a\x5a\x46\x46\xc1\x77\x00\x1e\xad\xf0\xf3\xb0\xcc\xef\x8e\xee\x27\x6a\xc4\xc1\x35\xa2\x93\xad\x23\xe5\x13\x4d\x85\x40\xd1\x34\xe2\xc4\x49\x5c\x87\x01\x16\x82\x79\x65\x28\xaf\xd6\xc6\x20\xb7\xb9\xb2\xec\xce\xf8\x4c\x0d\x4e\x62\x91\x39\xdd\xc1\x65\x8b\x67\x95\x4e\xf7\x83\x2f\x71\x29\x38\x1c\x70\xfe\x40\xa6\x59\x34\x42\xde\xa3\xbd\x4b\xd4\x6b\x33\xdb\xc0\x71\x24\x37\x3b\x9a\x68\x46\xcf\x31\x38\x33\x63\xb4\x63\x41\x3b\xaa\x24\xc9\x39\xda\x66\xb7\x9c\x0b\x39\xa9\xe8\xe6\x36\x1d\x3f\x2c\x21\x09\x7b\x70\x85\x9d\x12\x8a\x55\x67\x43\x9d\xd1\xc4\x18\xe9\xf4\x80\xd2\xcf\x2b\xad\x40\x23\xd1\x08\x3a\x8a\xa0\xbb\xee\x52\xb3\xe9\x4d\x0d\xfe\x17\x4b\x21\x72\xeb\xb4\xeb\x44\x52\xaa\xd7\x00\x96\x9d\x7c\x80\x12\xd7\xb1\xeb\xab\x84\xb8\xcd\xaa\xbb\xef\x92\xb0\x9b\xc4\x66\xe9\xa9\x94\x84\xec\xe0\x8a\x5c\x9c\x59\xc9\x71\x63\x6b\x4b\x0b\x44\x71\x98\xd6\x74\xf2\x70\xf3\x01\xec\x11\xa2\xbe\x77\x62\x7d\x76\x77\xc1\xa0\xe6\xf4\xd8\x44\xde\x24\x0b\x0a\xf5\x81\xce\xbd\x1a\x9e\x54\xab\x19\x48\x36\xa3\x11\x75\x4d\xce\x08\x1c\x64\xec\x62\xf7\x38\x96\xbb\x0c\x79\x04\xca\xa2\xe5\xb5\xce\x44\x88\x45\x17\xe3\xbb\x8f\x71\x2b\x24\x27\x14\x1a\xdc\xf6\xaa\x90\x10\xa0\x25\xbc\x45\xaa\x30\xdc\xdd\x1a\x8f\x02\x9f\x87\xd5\x92\x77\xac\x9a\xb2\x33\x14\x22\x10\x84\xbe\x36\x11\xb6\x69\x32\x3f\x9d\x81\x91\x4a\xba\x89\x24\x50\x0d\xf1\x92\x80\x04\xb9\xd1\x19\xa8\x89\xfc\x2e\xbd\x14\xb8\x05\x42\xb7\xa6\xa0\xe6\x6c\x56\x21\xd9\x88\x1e\x53\xbd\x04\x6a\xb8\xc8\xdc\xea\xc4\x7c\xeb\x59\xb7\x45\x6a\x38\xdd\x16\x6e\x73\x0b\xb4\xf6\x74\xd9\xaf\x1d\xee\x26\x64\xc3\xe9\x11\x43\xde\xd6\x64\x82\x07\x31\x68\xda\xa9\x61\x12\x63\x64\x2f\x84\xf7\xec\x28\xe5\x77\x99\xeb\x92\x61\x37\x46\xca\x2e\x77\x29\xed\x84\xc1\x05\x5e\x17\x24\xe5\xe8\xf1\xc2\x1d\xf5\x83\x7a\xa5\x76\xfb\x08\x24\x5a\xcd\xda\xd6\x29\xbb\x4b\x44\xb4\x9c\x97\x0d\x24\x5d\x35\x5f\x32\x4f\xe7\x6c\xf2\x3b\xef\x12\x35\xb3\x4e\x8e\x00\x61\xbb\x32\x4e\xf7\x75\xa9\xa3\xa2\x2c\x15\xe3\x77\x8d\x5e\x60\xae\xb6\x00\xbf\xae\xba\x5b\x92\x8b\x64\xa9\x8d\x18\xf1\x41\x9b\x10\x97\xa6\x81\x89\xba\xd3\xad\xc2\x53\xa7\x63\xdf\x61\xa3\x77\x95\x5d\x94\x61\x11\x73\xbe\xd2\x18\x1d\x81\x7a\xa9\xe8\xf8\x9c\x9c\x08\x52\x4f\xa5\xe5\x1e\xc5\x3c\xf6\x76\x59\x97\xdd\x21\x78\xaa\x11\x9a\xbb\x9c\xaf\xd0\x91\x33\x4f\x25\x6e\x81\x15\xce\x93\x3d\x65\x56\x47\x8a\x70\xa1\x0b\x72\x4f\xe4\x8e\xa3\x41\xc4\xc1\xb4\x75\xb0\xc0\xdc\x52\x7d\x34\xe9\xe4\x61\xdd\xa9\x1b\xc0\x27\x1e\xbe\xa3\xeb\xdc\x26\xb6\xd3\xa3\x09\x63\x85\x26\xda\x25\x2b\x9e\xc6\xa2\x9d\x52\xb8\xaf\xe8\xa6\x73\x6e\x73\xbd\x89\xee\xcf\xbb\xb8\xfe\x63\x0c\xbf\xa1\x7c\x02\x99\xf8\xc9\x27\x59\xa4\xb8\x16\x72\xa5\xc0\x96\x4d\xa0\x55\xae\x41\xd0\x6e\x26\x4d\x7a\x42\x50\xb2\xd9\xee\xba\x47\x6c\x80\x87\xf7\x79\x51\x2e\xaf\x03\x6c\x57\xda\x8b\x57\x57\x59\xd9\x13\x96\x75\x4d\xf8\xaa\x73\x65\x87\xb5\x5a\xc6\x23\xbe\x6d\xe4\xae\x3e\xd8\x39\xb9\x94\x68\x5d\x27\xd2\x45\x59\x81\x97\xbc\x14\x6e\xa9\xc9\xaa\x6c\xf5\xb9\x6a\x56\xb9\x51\xbc\x0b\x72\xd9\x84\x70\xac\xdb\x5d\xdd\xa7\xd3\x41\x94\x73\xeb\xd7\x86\x71\x47\x27\xda\x1c\x00\xa2\x11\x7b\x8d\x2b\xeb\x95\x24\x0a\x57\x32\x6c\xcc\xc9\x18\x6e\x30\xe1\x76\x9f\x9f\x76\x71\x7a\xbb\x70\x40\x02\xd1\x0c\x75\x29\x4e\x36\x49\x9a\xdf\x1c\x70\xf8\xaa\x61\x21\xc1\xec\x89\x36\xad\x19\x14\x56\x47\xcb\xee\x7a\x92\x60\x7b\x38\xdc\x5e\x94\xf5\xaa\x07\x23\x8c\x30\x97\xa7\xb2\x51\x9a\xfb\x4c\x19\x9c\x78\xb7\x45\x76\x28\x3c\xb6\x1c\x53\xd7\xe9\x5d\x27\x96\xcf\xb9\x83\x9c\x03\xc9\xae\xc8\x83\x2a\x40\x3d\x89\x8e\x9f\x0b\x22\x1c\x4d\x19\x47\x00\x50\xc3\xe5\x85\xcd\x01\xef\xc4\xc0\x07\xae\xcb\x37\x81\xcf\xc3\xfa\xdd\x37\x94\x5d\xd5\x41\x8d\xbd\xd7\x8a\x04\x6f\xc4\x21\x65\x36\xde\x8d\xb5\x0f\xb9\xe5\x70\x8d\xb0\x8b\xc8\x23\xbc\xf8\x51\xd8\x15\x5d\x3e\x3d\xbd\x4b\xb9\xe5\x00\x95\x9b\x22\x85\x1a\xbd\xd3\xb1\xf3\xd3\x1e\x86\xaa\x06\x26\xa4\xb8\x81\x93\x06\xbe\x85\xeb\xa8\xee\x8a\xc4\x93\x3c\xcf\x83\xdc\xe5\x22\x01\x39\x3c\xa6\x6b\x5c\x99\x45\xa5\x0e\x7b\xb0\x61\xc0\xfd\x3a\x4e\x38\xcb\x31\xb4\xf0\x08\x78\x3e\x41\x58\x53\x12\xb7\x2d\x9d\xec\x6d\x6c\x72\x07\xb1\x1b\x39\x2a\x85\x0e\x27\xf4\x74\x7b\xa5\xf1\xc8\x1b\x30\x7e\xee\x5b\x52\x87\x3a\xb7\x8a\x4d\x3d\x2f\xeb\xb7\x46\x87\xa4\x77\x75\x9f\x2a\xb5\xf5\xba\x30\xb1\x97\x53\xda\x1c\x16\xe8\x35\x0d\x5c\x3b\xd8\xa7\x70\x02\xa5\x68\xbb\xf1\x36\x88\x72\x89\xe1\x83\x51\xd2\xdc\x25\x7b\x7b\xd9\x7a\x1c\x26\x63\x79\x9c\x26\xe2\xe9\x42\x3e\xd4\xd8\x97\x0c\x1d\x8b\xc0\xd7\xd9\x89\x28\x36\x82\x50\xa1\x3a\x3d\xcc\xeb\xb8\xcb\xf9\x8a\x92\x4b\x1c\x34\x44\x21\x80\x86\x9e\xa1\xc6\xf5\xf4\x52\xa4\xad\x1d\x31\x32\x62\x5d\x3d\x44\x15\xb1\x25\x79\x88\x45\x20\xc2\xf2\x2e\xaa\x3a\xb5\x73\xd6\x44\xf1\xbc\xa0\xcf\xbe\xb5\xad\x47\x91\x91\x1f\x45\xcb\x28\xaf\xc6\x85\x39\x47\xe6\x56\xe5\xc1\xc9\x0c\x01\xed\xfd\x12\x8f\x02\x9f\x87\x4d\xd0\x6e\xc8\x7c\xb0\x2d\x52\xec\xba\x43\x6d\x66\x32\x63\x1d\x6c\x4f\x96\x71\x77\x60\x42\x37\x14\xe5\x34\x01\x61\xbd\x82\x55\xc1\xdb\xb4\xd6\xbc\x4d\xb3\x6e\xd2\x31\xb2\xde\x31\xd5\xa6\x61\x65\x30\xeb\x93\x56\x99\xa0\xef\x0b\x95\x0b\xa6\x8b\x9d\xba\x1d\x13\xb3\xe3\x12\x10\x1e\x22\xe6\xbb\x56\x67\xad\x58\xb6\x5c\x27\x88\x67\x5e\x6e\x61\x28\x43\xdd\x97\x34\x55\xf7\xb1\x2f\x30\xda\xc9\x3d\x43\xd4\xc9\x46\x53\xb9\x12\x69\xed\xae\x19\x13\x81\x67\x98\x65\x77\x84\x9e\xe7\xb9\xa5\x90\x7a\x3d\x5a\x3f\x91\x47\x87\x66\xac\xa6\x2d\x40\xa8\x50\xa1\x46\xf0\x24\xc8\x9e\x2b\xde\xee\x72\xd6\x38\x47\x9b\xc8\x4f\x61\x10\xeb\x25\x43\x20\xe2\x65\x89\xa2\x60\x46\xbd\x6d\x74\x05\x65\x0e\x77\xf4\x44\x33\x95\x58\xa3\x00\xc4\x71\x57\xd9\x65\x77\xdb\x4f\x4d\x2e\x76\x0a\xc0\x06\xb3\x97\x41\x09\x52\xd4\xb1\x05\x29\x1d\xc1\xf5\x2b\x5c\xd9\xda\x45\x65\xe7\x75\x5f\x89\xd7\xbb\x3e\x79\xb5\x75\x7a\x5a\xc4\x95\x86\x7b\xef\x88\x9b\xdd\xcf\xb1\x05\x3b\x62\xc7\xb5\x25\x33\x8c\x6a\xb1\x48\x08\x4d\xe8\xe4\x02\x78\xbb\x6d\xcb\xf1\xb0\x9b\x80\xd7\x3c\x8c\xcf\x89\x17\x4e\x8d\xa0\xb0\xed\xc9\x81\xe8\x78\x31\x75\x2f\x13\x48\xaf\x7b\xca\x65\x4a\x75\x34\xbf\x95\x47\x6f\x39\x3e\x6c\x26\x7f\x03\xf8\x90\x8a\xd5\xe6\x85\x1a\x1b\x02\x64\x4f\x17\x38\x45\xbf\x4e\x47\xad\x8b\x15\x38\x16\xb3\x9d\xa6\xf1\xbe\xe7\x48\x7c\x09\x08\xd0\x7c\x53\xd9\x45\xfd\x99\x6d\xde\xb7\xa9\x1a\x50\x6d\x2f\xfa\x1c\x08\x34\x97\xbb\x39\x43\x02\x2e\xf0\xa4\xb7\xb5\x62\x07\x12\x79\xa7\xb8\xa7\x35\xdf\xa5\xb2\xb8\xb1\x1c\x57\x51\x82\xd6\x92\xbd\x6c\x62\xe3\xf3\x62\x24\xb5\x5c\xe5\x14\x20\x91\xb3\x7b\xbb\xa3\xdd\xd6\xb0\x8e\x90\x1b\xcf\xb7\xe9\x3d\x46\x12\x16\x2c\x7b\xaa\xb8\xc4\x70\x9a\x8b\xea\xb6\x93\x95\x2f\x8d\x17\xe4\x66\xd5\xe4\x4b\x8d\xa9\x0b\xce\xac\x02\x97\x01\x7a\xdd\xc5\x33\xab\x44\x4b\x9f\x89\x75\xdc\xc5\x6b\x39\x42\x17\x4f\xed\x48\x9b\x20\xa1\x14\x3e\xce\xd3\x27\x2f\x59\xd7\x6c\xfa\xa8\x27\xf7\xe0\x36\x5b\x9f\xa3\x05\x29\xc1\x2e\xbb\xa1\x4d\x3b\x7a\xe0\xee\x8e\x08\x41\x3a\xf1\x0c\x1a\xf6\xf6\x48\xc9\x91\x32\xda\x28\x0d\x1e\xe1\x68\xe9\x5d\x53\x51\xb2\x09\x85\x33\xdf\x0b\x48\xfa\x82\xd2\x31\x66\x38\x70\xb2\x21\xbf\x33\x59\x52\x89\xe7\xc9\xc3\x46\x43\x3c\x9d\x45\xd2\x3a\x1f\xee\x5a\xf6\xa6\x27\x45\x8b\xbb\x25\x77\x6b\x83\x3d\x8b\x08\x20\x56\x97\xc1\xc0\x83\x33\x50\x11\x0a\x08\x4b\x38\x91\x88\x5d\x11\xcb\x53\xd9\x08\x7d\x14\xe3\xed\x61\xbc\xb4\xbf\x42\xb6\x7a\xcd\xdb\xbd\xeb\x57\x7c\xe3\xef\x3f\x4e\x3d\xd9\xe1\xef\x79\xeb\x2f\xfb\x67\x5f\xfb\x0b\x6f\xc7\xf7\x37\xff\xe8\xe7\xfc\xc2\x87\x91\xa7\xfd\xed\xe7\xbf\xf9\x17\x3e\xeb\x81\xd0\xcf\xbb\xbe\xe3\x3d\xd7\xcb\x5e\xfa\xf4\x17\xbd\xfc\xff\xfc\xd8\x7f\xe3\x7f\xf8\x4f\xc6\xcf\x7d\xd2\x1f\x3f\xe9\xd7\x5e\xf7\xaa\xd7\xc8\x67\xbe\xe3\xfb\xfd\xe6\x4f\xfd\xf2\x03\xa1\x8f\x85\x4f\x7a\xf1\xbf\xfa\xb8\xc7\xff\xc9\xf6\x0f\xc2\x27\x7d\xe4\xfb\xbf\xf3\xf5\xec\xdf\xfd\x8f\x6f\xf3\xdf\x7e\xfa\xd3\xff\xe8\x89\x2f\x4d\x5f\xfc\xea\x57\x7d\xf0\x2f\x3e\x10\x6a\xbf\xef\x7d\x7e\xe8\x3f\xbd\xe8\xe3\x7e\xf7\x23\x3e\xf2\x13\xbf\xe7\x47\x7f\xe5\x7f\xfa\xac\x2f\x7a\xfd\xc7\x7d\xef\x13\xde\x59\xfd\xdc\x2b\x5f\xf4\x03\xcf\xfe\xff\x3e\xe7\xdf\x7c\xff\x83\xc4\xb0\xff\xf3\x13\x3f\xe1\x31\x8f\x7f\xdc\xc7\xfd\xcd\xfa\xe7\x1f\xfa\x8a\xd7\xbf\x2c\xfd\x6f\xef\xf1\x07\xcf\xf9\xae\xef\x7d\xf6\x77\xfc\xc0\x0b\xbf\xe5\xcd\x9e\xfc\xbd\x4f\xfe\x92\x07\x42\x7f\xe9\x8d\xcf\xfc\xd5\x7f\x96\x7e\xf2\xab\x5f\xf8\x09\xaf\xf8\x8c\xaf\x7d\x87\x5f\xf8\x89\x4f\x7e\xf5\x63\xde\xcf\xfc\x2f\xef\xfb\x66\x1f\xfc\xcc\x6f\xf9\x5b\x6f\xff\x41\xff\xbf\x07\x1f\xe0\x3d\x3f\xb0\xb5\x9f\x7e\x9f\x67\x3f\xe6\x03\x7f\xf2\xbd\xff\xe9\xeb\x3e\xef\xe5\xbf\xf9\xba\xb7\xf8\x84\xeb\xb3\xe7\xfa\x96\xfe\x3b\xff\xf3\x5f\xff\xe7\xbf\xfa\xa4\x0f\x7e\x20\xf4\x53\xbe\xfa\x45\xbf\xfb\xcf\x3f\xef\x2b\xf1\x3b\x3e\xe6\x4f\xdf\x6c\xeb\xbf\xfe\x98\x17\xb0\x17\xfe\x93\xdf\x7a\xde\xe3\xbf\xe5\x7d\xdf\xfa\x2d\xc7\x67\x7c\x32\x7a\xc2\x5f\x92\xad\x1e\xf6\x56\x6f\xb8\x01\xf6\x5d\x68\x91\x2e\x79\xb8\x4d\xd7\x0b\x8c\xa6\x98\x63\xf8\xe2\x08\x91\x21\x49\x91\x87\x1c\x69\x8e\xe5\xae\xca\xe3\xac\xcb\x2f\x7e\x17\xc5\x69\xda\x7c\x5c\x0c\x27\x7b\x14\x24\x78\x74\xa2\xf8\xb5\x7b\xea\xec\x9a\x87\x75\x5a\x32\xf0\x08\x2e\x0b\x0c\xaa\xc4\xc6\x12\x40\xcd\x5d\x97\xf9\x55\xe1\x9c\x18\x79\x36\xea\xc6\xc2\x2c\xa6\x87\x15\x8e\x82\x5a\x62\xee\xa8\x78\x9d\xa0\x2b\xca\xf0\x0e\x34\x82\x1d\x96\x06\xee\x92\xfb\xa0\x10\x7a\x9c\xdb\xd6\x33\xa2\xa1\xe2\x30\xc6\x4e\xa1\x44\x61\xbb\x52\xd9\x8a\xb2\xa1\x06\xaa\x7d\x86\x52\xd9\x62\x50\x39\x2d\xb9\x6d\xfd\xd6\x0e\xd2\x96\x41\x73\x8d\x4d\x56\x91\x0e\x69\xfb\x7e\x7a\xeb\x1a\x9f\x5c\x52\x3a\x4d\xb0\xd1\xa5\xe0\x90\x87\xc5\xd7\x48\xf9\x5d\x26\x66\x34\x75\xa8\xa8\xcf\xbb\x0b\x43\x81\x2d\x12\xbd\xd7\x59\xfd\x48\x1a\xa7\x02\x68\x4a\x3e\x6d\x95\x36\x26\xf2\x4e\x37\x9b\xb6\x61\x6e\x5b\x73\xc0\xe1\xbc\x3c\x50\x0c\x24\x9a\x9d\xb9\x00\xbd\x54\xf2\x9b\xdc\x41\xbe\xce\xa4\xfb\xd2\x5e\x08\xfe\x48\x2d\x67\x40\x37\x91\xf6\x6c\xef\x92\x40\xc9\x1b\x35\x99\x16\x60\xaf\x08\xdb\x16\x8c\xf5\xe6\x5c\xd4\xd1\x24\x25\x2a\x88\x9d\xd1\x6d\xe3\x88\xcb\x8e\x6d\xb3\xb8\x90\x52\xcd\xa3\x1b\x6f\x0f\xc3\xe9\x3b\xe4\xc5\x8e\x76\x34\x45\x64\xca\x85\xc4\x35\x64\x47\x73\xe1\x99\xbc\x10\xb1\xba\xb6\xc2\xb5\x37\x77\xe5\x7c\xb5\x8e\xea\xd6\x2e\xc4\xcd\x5d\x66\x98\x44\x04\xb1\xf1\xb0\xed\x48\x18\x90\x8e\x58\x2b\x2d\xd2\x33\x01\x9b\xbe\x74\x2e\x80\x34\xad\x33\xd8\x4e\xdc\xe8\x86\xd3\x31\xf8\x76\xd7\xb6\x17\x4e\xc7\xd9\xba\xb6\xc7\x86\xfb\x25\x31\x55\x9b\x60\xb2\xf1\x2e\x05\xe8\x0b\x44\x5f\xe0\x76\x9c\x7a\x4c\x1e\x73\x5e\x43\xb0\x70\xde\x45\xe7\x69\xbe\x0f\xd1\xd3\x50\x96\xd3\x5d\xe9\x2d\xf2\x9e\x34\x9d\x10\x98\x4e\x64\xea\x0b\x83\xe3\xc8\x76\x09\x46\x99\xe3\x57\x86\x64\xbb\xab\x1f\x40\x6b\x9f\x50\xc5\x08\x8f\x73\xf5\x54\x03\xef\x31\xb1\x59\x8d\x9f\x3d\x90\x76\xfa\x41\xb4\x67\x86\x67\xa2\xca\xe0\xfc\xc0\xf0\xae\x27\xa1\x55\x68\xc6\x84\x9f\x36\x18\x91\xa5\xc2\x9c\xaf\xab\xcd\x8b\x78\xbd\xb7\x2e\x0b\x43\x15\xed\x4e\xc8\xe4\x57\xc9\x99\x31\xdc\x6f\xb3\xc1\x31\x6c\xa9\x0b\xc4\x52\x89\x3f\x81\x66\x06\x12\xb3\x6f\x7b\xce\x1b\x2f\x65\x49\x53\xd0\xa4\xbb\xed\xf0\x38\x1a\x91\xec\x98\x38\xdf\xe5\xf9\x49\xab\xce\x2c\x05\x86\x6a\x6a\x34\xa9\x30\x08\xae\xf6\xc8\x83\xd1\xcb\x2a\x8e\x72\xf7\xcc\x6f\xb6\x79\x75\xfa\xc1\x97\x6c\x66\x63\x8f\x36\x92\x7d\x58\xe6\x77\x43\xe6\x73\xf6\x3d\xba\x14\x71\x6d\x36\x50\xa0\x69\x1d\x44\x42\xd8\x93\x19\xab\xc1\x23\x51\xbb\xf3\xb2\x0c\xcc\xbd\x9c\x17\xb9\x12\x77\xd7\x5d\x64\x2b\x74\xa9\xc1\xf0\x85\x28\x6d\xd6\x74\xb2\xa3\xa6\x58\xac\x47\xdd\x3c\x37\x19\x18\x90\x74\x39\x25\x90\x47\x66\x80\xd6\xda\xdb\xbc\x6b\x77\x86\x36\xb5\x1f\xfd\xa4\xee\xe4\x30\x79\xca\x8f\x4d\x37\xb1\x0d\xce\x64\x93\x36\x30\x3d\xc3\x1a\x98\xd3\x24\xf2\x14\x73\x9a\xd8\x22\xbb\xab\xdd\x85\x39\xdb\xb5\xef\xbb\x46\xb9\x53\xdc\xcc\xa1\x32\x2f\x75\x3f\x11\xbc\xa6\xe1\x10\xf7\x54\xc9\x0a\x17\x5b\x66\x67\xdd\xd4\x53\xdf\x45\xfb\x22\x8c\x88\x06\x12\x5a\x72\x97\x54\xe4\xee\x96\x0a\x63\x3f\x51\x13\x27\x58\xda\x67\x04\xaa\x09\x13\xea\x40\x73\xd8\xc6\x04\x88\xde\xe6\x76\x4e\x3c\x46\xa4\x2c\x21\x6a\xd7\xda\xc0\xea\x6d\xee\x8b\x7b\xcc\x76\x90\xd5\x62\x1e\x62\x7a\x40\x42\x1b\xf6\x76\xf6\x11\x58\xbd\x8b\x6c\x45\x33\x3f\x39\x34\x0c\x6c\x68\x65\x5d\xb7\xac\x22\x52\xc1\x5a\x11\xc4\xb4\xdd\x01\x5f\xa7\x94\x01\xa6\x40\xa0\x77\x89\x4d\x9b\xd7\x5d\xf3\x87\x0b\xab\x7c\xd5\x75\x30\x4a\xac\x57\x46\xd9\xd6\x02\xc3\x3c\x5d\x13\x2b\x46\xae\x7c\xee\xa8\xe4\x20\x0f\xa0\xe1\x23\xe5\xf1\xb4\xff\x17\x5e\x8e\x0f\xab\x25\x6f\xc8\x7c\xbc\x38\x17\x63\xfd\xb2\x6a\x47\xb5\xfa\x84\x8e\x03\xd9\xe5\x3b\x2b\xb8\xca\x7e\xe8\x03\x74\x87\x04\x67\x8a\x65\x2b\x48\x07\xe7\xba\xab\xc4\x58\xb4\x52\xec\x0f\xb2\xf1\x63\x08\x18\x2f\x46\xe1\x39\x95\x67\x3a\x9f\x65\xdf\x19\xaf\xce\x6f\xe8\xf4\x0e\x0b\x36\xa0\xdf\x10\x3b\xee\x4a\xa7\x5b\xf6\x13\xf7\xb3\xc3\x6b\x00\xb2\xc7\x52\xd7\x04\xe5\xbc\x4a\xca\xc3\xe5\x31\x13\x65\x8d\x54\xd2\x21\xf4\x47\x66\xe2\xcc\xcd\xdc\x66\xa7\x46\x4c\x03\x2e\x4b\x13\xd5\xae\x21\x77\x06\xb6\x76\x4c\x71\x99\xb6\x71\x6c\x47\x3f\xa1\xf2\xd0\x21\x53\x40\xc4\x08\x1c\xc1\xde\x26\xea\x05\x6c\xcd\x90\x50\x3b\xe6\x2a\xd3\x1c\x60\x18\x71\x30\xb6\x5d\x94\x8b\x86\x0b\x00\xbb\x20\xc0\x75\x2d\x65\xb8\xca\xd6\xe0\xae\x6e\xdb\xb6\x59\xe7\xde\xcf\x0d\xed\x4a\x69\xb3\xdc\x41\x8a\xa2\x7a\x97\x0d\x8b\x04\x89\xa8\x4b\x01\xe3\x6a\xdf\x69\x5b\x52\x10\x31\x64\x39\xeb\x5d\x43\xf2\x45\x80\x06\xfe\x48\x67\xdc\xf3\x74\xf6\x58\x49\xc3\x35\x0d\xd9\x76\xad\xc2\x31\x21\x1c\x1c\x8d\x39\x68\xa6\xc3\x47\xa2\x14\xcb\x77\x71\x93\x6d\xb6\xc1\xc5\x2a\x98\xac\x47\x19\x3d\x89\x6b\x37\x9d\x9d\x14\xc1\x70\x8a\x6c\xa6\xef\xc5\xe1\x16\x4c\x83\x21\xd7\x4b\x88\xb6\xda\xa3\xc0\xe7\x61\xdd\xa9\x1b\x32\x1f\x9a\x7c\xdd\x84\xcc\x20\x18\xed\x9a\x51\x18\x83\x79\xed\x08\x67\x3f\xf3\x86\x28\x61\xb8\x21\xa5\xcb\x38\x8d\xdf\xf6\xba\xb8\xbf\xed\x50\x29\xd3\xcc\x32\x5e\x85\x4d\x9f\x92\xaf\xae\x0e\x3b\xe3\xe2\xc1\x06\x2d\x62\x6c\xf3\x4a\x0c\xd5\xb6\x52\x3f\xa7\x51\xaa\x89\x62\xef\xca\xc1\xa4\xa0\xc7\x90\xa8\xf2\x4c\x0f\xdd\x02\x26\xcd\x73\xb0\x6f\x30\x38\x57\xcd\x0e\x6a\x5a\x79\xba\x60\x4a\x07\xc7\x8e\x13\xcc\x12\xdc\x55\x00\x6e\x97\xf0\xd5\x9d\x7d\x49\x14\x15\x77\x27\x50\x68\x05\x90\x11\x08\x60\xba\xed\xd8\xb2\xaa\x22\x14\xc3\x8f\x31\x4c\x4d\x70\x89\x7c\xd7\x40\x38\x2f\x02\x35\xe8\xab\xf4\xe0\x71\x04\x89\x28\x99\x78\xf3\x9b\xdc\xab\xc0\xec\x88\x97\x38\x62\x02\x86\x37\xd2\xe5\x09\xe7\xe9\xef\x92\x5c\x23\xfa\x5a\x83\x0e\x1e\xa9\xf3\x90\x24\xc3\x36\x73\x9e\x7b\x07\x8e\xba\xee\x06\x24\x26\x9d\xdc\x59\xc2\xc2\x7e\x32\x47\x17\xb2\x93\xdf\xb7\x60\xa7\xd6\x2e\x02\x71\x78\xcb\xc5\xe0\xd1\x31\xd3\x53\xb6\x06\x6b\x64\xca\xb4\xa3\x89\xe3\x8a\x31\x1f\x80\x0f\xdf\x64\xea\xf9\x2e\x43\x1e\x32\xaf\xa3\x32\xe8\xf7\xf3\x60\x69\x1e\x01\x97\x05\x47\xb3\x6b\xad\x80\x8f\xd3\xf5\x71\x04\xe9\xf9\x7e\xcc\x88\x42\x39\x20\xd6\xff\x57\x92\xf2\x0f\xeb\x77\xdf\x00\x3e\x9e\x8e\x8b\x45\x6c\x5a\x38\x43\xd1\x49\x75\x89\x1a\x5c\x7b\x17\x96\xea\x58\x7d\x25\xc0\x9c\x0d\x24\x79\xb0\xc2\x1b\xa9\x55\x9f\x77\x69\xe4\x96\x05\x42\x08\x23\x57\xe9\x80\x58\x1e\xda\x9c\x08\x5c\x29\x3b\x20\xd9\xb8\xc6\xa9\xa4\x96\x76\xdb\xb9\xd2\x67\x69\x11\x0e\x78\xdd\xd6\xfa\x3e\x7a\xf6\x09\xa9\x63\x9b\xf8\xa4\x11\x80\x8d\xe5\xd5\x20\x4b\xa9\xf7\x9e\x56\xf7\xfb\x91\x0a\x96\x0d\x40\x5c\x0b\x91\xe3\x58\x77\x65\x3e\xfb\x90\x2a\xd9\xea\x96\x63\x57\x92\x0a\x8b\x08\xb0\x15\x32\x85\x58\x25\x5a\x5d\x75\x88\x10\xcc\x69\x3b\xfb\xb5\xb8\x6a\x85\x9f\x77\xdd\xf2\x73\x75\x91\xa4\x1d\xf4\x6a\x1e\xf5\x45\x50\x38\xe4\x3a\x49\x2a\x80\x97\xee\xb3\x47\x20\x4f\xbd\xef\x9e\xa2\x63\x11\x31\xb0\xa5\x77\xed\xb8\xf0\x7d\xce\x83\xc9\x06\x5d\xad\x6c\xd1\x5d\xb4\x54\x72\x39\x51\x3c\xe1\x8e\xb7\xbc\xe7\x28\x32\x88\x97\x16\x0e\x07\xa0\x72\xdf\xcf\xbb\x14\x05\x8b\x2e\xa2\x39\xbb\xc5\xc8\xc5\xe8\x67\x37\x45\xf4\xd9\x35\x5a\x6e\x84\x2b\xe3\xc5\xe6\xc0\x6c\xef\x0c\xd1\x73\xc0\xa5\x59\xba\x6d\xf8\x39\x40\xbe\x38\xdc\x8e\xca\x6c\x63\x5d\x6d\xcc\x3a\xbf\x39\xe5\x47\xba\x8e\x9a\x1a\x74\x8b\x55\xcb\xf6\x25\x36\xef\x05\x41\xf0\x34\xfa\x51\xe0\xf3\xb0\x09\xda\x1d\x46\xb2\x1d\x6d\x09\xe0\xba\x6c\xdd\x19\xc4\x44\xc6\x12\xbc\xe7\xdd\x4c\x4b\x37\x78\x52\xc2\x0d\x66\x4a\xcf\xa3\x3b\x75\xd6\x7c\xd1\xf3\x2e\x9e\x3e\x34\x0d\x45\xa7\xce\x96\x8f\x7e\x82\x9a\x0e\x70\xc1\x71\xd9\x63\x4f\x44\xd9\xc2\x0c\xea\x88\x25\x7e\x96\x5d\xa8\x48\xea\xa2\xd7\x76\xd7\x93\x10\x82\xc1\x9e\x69\xdd\xa2\xed\x21\x6a\x82\xf7\x89\x03\xc3\x00\x27\xce\x68\xb1\xbc\x5c\xcd\xf1\xaa\x6a\x14\x6e\x34\xd7\x4b\xb9\x4d\xb4\xbc\xd3\x5d\x45\xbe\x74\xcc\xdd\x71\x78\x8e\x1d\x6b\x91\x28\x8f\xbb\x50\x27\xd9\x61\x9c\x55\xe9\x31\x14\x05\x08\x2b\xc4\x52\xe3\xeb\xae\xc4\xde\x44\xc9\x9b\xb8\x70\x35\x70\x5d\x3a\xb2\x66\x07\x70\x1d\x9c\x27\xb9\xc0\x82\x94\x5e\xfb\x29\x0b\x40\xd1\xe1\x09\x09\x21\x68\xd1\xbb\xf2\x8d\xba\xe0\xe6\x83\xd5\xb6\x73\x56\x6c\x80\x9d\x8f\x65\xbd\x23\xc7\x05\xae\xe5\xdc\x01\x4d\x47\x93\x6a\xe0\x95\x96\xf4\x5c\xd4\xe5\xbb\x1a\xce\x0b\xa9\x0b\x8e\x39\x0d\x38\xbd\x8f\xa5\x19\x31\xac\x83\x9e\x35\x9c\x45\x33\x6c\x03\xd9\xb0\xac\x96\xac\xd5\xad\x7c\x65\xd9\x6f\xcb\x90\x09\x9e\x30\x1d\xe1\x3c\x6b\x8b\x07\xe4\xb5\x84\x83\x4d\xbb\x95\x18\xb6\xac\xcf\xcd\xc3\x6b\x26\xa9\x0d\x15\x87\xc6\x0b\x24\x32\xed\xa3\x77\x5c\x1e\x36\x93\xbf\x01\x7c\xf2\x31\xe0\x62\x6a\x58\x3e\xb0\x88\xc2\xb2\xb3\xe8\x72\xaa\x64\x01\x3a\x47\xed\x8e\xa5\xb9\xef\x81\x8d\x6d\x2f\x21\x4c\x1d\x5b\xbe\xeb\x43\x53\x9d\xb6\x6c\xa2\xdf\x4f\x83\x79\x49\x73\xaf\x72\x8f\x9a\x13\xbc\x85\xd5\xb1\x91\x6e\x8f\xe6\x34\xcb\xb0\x93\xc9\x35\x25\x6a\x77\x95\x18\x54\x54\x4e\x63\x12\x68\xc4\xcd\x52\xae\xfc\x61\x32\xbb\x66\x78\x04\x14\x6b\x4e\x0a\x8c\x12\x2b\x00\x3b\xbe\xd0\xfe\xc8\xef\xf0\xbc\x0d\x90\xfd\x7e\xec\xe6\xf2\xbb\x50\x4a\x5d\x5b\x2f\xa3\x82\x21\xa0\x8d\x75\x9a\x04\xe7\xce\x71\x3e\x32\xb0\x32\x35\xd3\x49\xf7\x73\xae\xe3\xae\x9e\x8f\x32\x66\xeb\xbd\xcc\x95\x2f\x98\xdb\xc6\x1b\x4d\x4b\xd2\xe9\x95\x22\x7b\xdb\xa5\x99\x03\x6e\x50\x17\x07\xfb\xc4\xa4\x6e\x94\xdd\xa6\x6b\x72\xb6\x8b\x04\x56\xf0\xb9\x69\xb1\x20\xe8\x14\xb8\xcb\x0e\x0d\x14\xd1\x7e\xed\x07\x54\xbe\xd9\x6d\xe3\xba\xd4\x6c\x8d\x80\x38\x9a\xbb\x06\xdc\x08\x80\xc4\x2e\x81\x94\xb1\xdb\x1c\x9e\xcb\x2d\x56\x7e\xc1\xc3\x42\x4a\x80\xc4\x24\x18\x5e\x36\xd8\xae\xa3\x74\x7f\xb5\x7e\x81\xbb\xa4\x05\xc8\x28\x25\x30\xe1\x37\xca\x3d\x9c\xa7\x8a\x21\x2e\x2b\xa0\x82\xf1\x3c\xa9\x57\x02\xf9\x44\x37\x88\x97\xd7\x06\x9c\x69\x87\x49\x3d\xf0\xed\xbc\x89\x6c\xf5\x30\x65\xaf\xbf\x42\xb6\x7a\xed\x27\x3c\xf9\x0f\x3f\xfb\xcf\x3e\xed\x3b\x3f\xf3\xd5\x3f\xe0\x7e\xf3\xa3\xdf\xe3\x45\xcf\xf8\x1f\xbe\xea\x37\xde\xe3\x87\x5e\xf8\xca\xa7\x7c\xd6\x1f\xbf\xd9\x4b\xe0\xdf\x7c\xc6\x03\xa1\x9f\xff\xaa\x3f\xeb\x4f\x7f\xda\xf7\x7f\xf5\x3b\xbf\xf6\x1f\xb1\xdf\xf8\xa0\x37\x3e\x89\xfe\xb5\x17\xfc\xc9\x0f\xff\xfd\x6f\xfc\x89\xf0\xf4\xbf\xf5\x11\xcf\x7e\xe5\xcf\xbf\xf8\x81\xd0\x4f\x7e\x23\xf1\x6f\xfd\xc3\xff\x36\xfc\xfb\xe7\xbc\xeb\x1b\xbe\xec\x47\xbe\xe1\x59\x4f\xfb\xb1\xa7\x7d\xf7\xbf\xfc\x37\xf8\x9f\x7e\xf8\xc7\xbd\xfe\x6b\xf9\x63\x3f\xed\xe7\x1f\xa4\x45\xbd\xe2\x47\xc9\xc7\x7e\x05\xf9\x9b\xff\xf2\x43\x3f\xea\x67\xbf\xef\x9d\xd9\x17\x7c\xf7\x57\xb7\x4f\x7d\x17\xf6\xf7\x3e\xf6\x45\xbf\xf7\xf6\x7f\xf6\xc9\xef\x6b\xbf\xea\x81\x50\xf7\x0e\x4f\x78\xe5\x7f\x79\xff\x17\x7f\xc8\x1b\x1e\xf7\xcc\x8f\x78\x8b\x1f\x7e\x63\x7e\xdb\x37\xa4\xd7\x3c\xf3\xad\xfe\xf4\xe9\x3f\xf6\xda\xff\xfa\x6e\x4f\xfd\xfd\x9f\x7c\xfc\x03\xa1\xff\xe2\xdb\x5e\xff\x1d\x1f\xf6\x5f\x7e\xf1\xf7\x9f\xf8\x7d\x5f\xfb\xef\x7e\xed\xa3\x3e\xea\xc7\xbf\xe7\xef\xfe\x1f\xbf\xff\xd2\x3f\x78\xd9\x3f\x7e\xf1\x17\xbf\xe3\x8f\x7f\xce\x1b\x7f\xfe\x4f\x1f\x08\xfd\xbd\x9f\x78\x6a\x7e\xcf\xcf\x7a\x8f\x37\x7e\xd9\x47\x7f\xe9\xa7\x7d\xcd\x7f\xff\xb6\x1f\xf2\x82\xe7\xb7\xcf\x7b\x17\xf8\x3b\x8f\xf9\xf0\x37\x98\xb7\xfd\x86\x9f\xfc\x6f\xde\xfd\x81\xd0\x5f\xf9\xc4\x67\x3d\xef\xff\xf1\x36\x1f\xf3\x2e\x6f\x17\x5e\x8d\x9e\xfd\x76\xef\xf5\xeb\xff\xcf\x7f\xfb\x01\x9f\xff\xe6\xf0\x97\xc4\xef\xff\x8d\xfe\x89\xff\xeb\x1f\xbe\xfb\xff\xf4\x97\x64\xab\x87\xbd\xd5\x3b\xf4\x1d\x60\x64\xcb\x09\x54\xb7\xe5\x3d\xbe\xa0\x44\x6d\xee\x15\x35\x94\x90\x2f\xf2\x14\xec\x8c\x5a\x9c\x04\x56\x11\xe0\x38\xcd\x69\xb6\xbb\x30\xc6\x93\x45\x75\xe9\x8c\x59\xef\xa3\xe3\x69\xc7\x41\xb9\x31\x1a\xf0\x98\x2c\x6c\x54\x90\xde\xc4\x30\x73\x8e\x0a\xcf\x6a\x44\x26\x77\x8d\x92\xf0\x48\xba\x04\xcc\xc3\x19\x6d\x38\x54\xf6\x0b\xc7\x58\x61\xd8\x40\xc8\x16\x43\xc3\x4a\xd1\x3b\xd8\x03\xdb\x78\x97\x71\x6b\x68\xdd\x55\xe7\x31\xbc\x1d\xae\x80\x9c\xe6\x4e\xe4\x20\x00\x6a\x93\xae\x03\xe8\x5e\xab\xf2\xe9\x24\xc7\x04\x91\x8b\x9a\xab\x94\xdd\x6c\x1b\xa7\xec\x2e\x96\x01\xda\xd7\xae\x35\x42\x0c\xd2\x36\x81\xd9\x12\xe8\x2c\x9d\xd7\x21\x8a\x1c\x7c\x5e\x58\xb9\x73\x0f\x75\x16\xee\x2d\x14\x41\x91\xe3\x36\x96\x81\x86\x2b\x6e\x58\x33\xa3\x15\x43\xde\x37\xb7\x5f\x16\x79\xeb\x93\x9a\x7c\xcb\xaa\x41\x1e\x1a\x8f\xb0\x36\xd6\x04\xdb\x60\xb4\xeb\xae\x44\x38\x4a\x01\x43\xb8\xf6\xd0\xb6\x5d\x9f\xa9\x13\xbf\x54\x08\xa9\x9e\x2c\x8d\xb3\x3b\xbe\xb1\xf3\x10\xe7\x66\xa0\x59\xad\x47\xb6\x79\x73\x57\xab\x78\xe8\xbc\xb1\x6d\x5a\x47\x0c\x05\xfb\x84\xe4\xba\xc4\x24\x5b\xf7\x48\x47\x00\x1a\x0c\x47\xb9\x96\x0b\x11\xe7\x06\x43\x15\x93\x1c\xc7\xa3\xd2\xcf\x87\xe1\xf4\x0d\xe0\x43\x77\xe3\x4a\xa6\x14\x5a\xa7\xa7\x2d\xa4\x83\x9a\x67\x53\xfb\x45\xdc\x8e\xb4\xa9\x55\x20\xd7\xf2\x51\xe0\x7e\x9e\x7d\x68\x88\xce\xbb\xd6\x89\x43\x91\xdb\x66\xd9\xa9\xe8\x88\x87\xb7\x7e\x0c\xa5\xcc\x1c\x09\x90\x93\x82\x43\xe1\xab\x41\x4a\xf1\xd6\xe6\x45\xca\xb2\x48\x1e\xb7\x31\xa7\x45\x69\x59\xcc\x6e\xe4\x22\xea\x58\x9b\xee\xa2\x0c\x9e\x08\x2b\x2a\x5f\x51\x63\x87\x94\x8d\x01\x06\x96\x17\xed\x07\x5c\xda\xdf\xb5\x54\x43\xe3\x4e\x4a\x20\x52\x34\x8a\xa5\x54\x0d\x81\x36\xd8\x15\x4e\x14\xea\x71\x1c\x9b\xda\x19\xc0\x87\x89\x44\x80\x16\x0a\x0d\x57\xe1\xf5\x2e\x91\x6f\x00\x4c\x4a\x75\x19\xad\xfc\x82\xa8\x1d\x4e\x8c\xcd\x2e\x47\x63\xb3\xab\xd8\x9d\xeb\xa8\x52\xa6\x31\xc1\x49\x22\x9b\x96\xd6\xeb\x2e\x15\xa7\xb4\x25\x8a\x8e\x15\x57\xd2\xd3\xee\xbd\xf2\x8c\x71\x44\xc5\x07\x58\x2f\x77\xc6\x71\x85\x0d\x38\xe7\x9d\xb5\x7b\x94\x75\x1d\xec\x36\x5d\xff\x58\x12\x1c\x09\x2a\x88\xd9\xe0\x63\x70\xa5\xad\x68\xc3\xb2\x0d\x4a\x33\xe5\x45\xb4\xa6\xc0\xd6\x70\xd8\x11\x86\xd0\x56\x45\x73\x57\xe9\x76\x5d\x63\xb7\xe1\x82\x1d\x06\xbd\x44\x85\x95\xeb\x26\x78\x3a\x8c\x67\x7b\xe1\x8d\xd0\x22\x99\x97\xc7\xe9\x17\x40\x2b\x34\x82\x1e\x28\x0e\xde\x04\x3e\x0f\xcb\xfc\xee\x58\xb1\x3e\xb3\x94\x62\xeb\xf9\x72\x7d\xdb\x2c\x29\x99\x8a\x62\x60\x2b\x2b\x3a\xb5\x4c\x88\x98\x39\x5d\x68\x45\x62\x1d\x5a\x66\xc7\x8e\xbb\xf8\x0e\x5b\x07\x91\x33\x06\x77\x76\x61\x02\x2a\x3d\xaf\x76\x9d\xf1\xb0\x36\x52\x22\xe9\x28\x05\x0a\x09\x2c\xa3\xb9\x21\x57\x73\xe7\xe7\x6d\xf3\x87\x6d\x05\x04\x4a\x61\xe8\x70\x79\x89\xdc\x54\xa2\xe0\x8a\x4a\x0e\x4e\x59\x10\xdc\x2e\xda\xec\xa9\x48\xdb\x52\xad\x71\xb5\xd8\x6f\x6b\xed\x54\x7b\x58\x22\x64\x39\x98\x74\x80\xe6\x75\x74\xbe\xa7\xec\xa1\xd8\x13\x12\xa3\xa1\x6a\x18\xe8\x6e\xe6\x0d\x30\xb4\xc5\x10\x2f\x70\x97\xeb\x82\xca\x5b\x09\x62\x76\xe0\xed\x34\x7d\x9f\xbd\x3a\xd4\xe5\xb9\x70\x71\x6a\x91\xe8\xb4\xf6\xc6\x11\x5e\x9c\xf6\x0c\x5e\x08\xb2\x75\xd3\xf2\x15\x45\x57\x56\x02\x5e\x59\xb0\xb5\x2e\x7f\x0a\x8c\xe9\xd2\x72\x19\x98\xea\xb1\x6c\x46\x51\xf5\xe8\xf9\x66\xb8\xa7\xbe\xb8\x4d\xd8\xdb\x26\x21\xc0\x9e\x30\x15\x96\xe5\x28\x60\xf2\xcd\xe2\x73\x3b\x13\xcf\x2a\x25\x5f\x34\x3e\x6b\x25\x25\x1c\x2c\x9d\x41\xef\x85\x4d\xb9\xa2\xb9\xcd\x75\x61\xa9\xed\xd4\x80\x81\x1e\x49\xea\x80\x8a\x6c\xa5\xd9\x33\xb0\x10\xda\xb5\x59\xaa\x58\x02\xe2\x32\xdb\x5f\xd8\x82\x36\xad\xf9\xf6\x68\xbe\xc3\xc3\x6a\xc9\x1b\x46\x8e\xae\x62\x12\x0f\x10\xb7\x6e\xce\x43\x52\xc1\x4e\x25\x95\x20\x5a\x13\xec\x42\x59\x56\x57\x4a\x39\x75\x84\x0c\xce\xb2\x33\x1d\x1c\x77\x19\xd7\xaf\x16\x09\x14\x83\xef\xd8\x58\x62\x31\x1f\x84\xb4\xe4\xc6\xf4\x66\x44\x75\xaa\x94\x9d\x52\xf2\x38\x8f\x47\xaa\x0b\xee\xdd\x08\xf6\xae\xcc\x07\x5a\x14\xb6\xeb\x94\xea\x6a\xc3\x97\x0c\x12\xea\xf4\xf2\x75\x4e\x24\x83\x2c\x97\x0d\x73\x08\x9a\x83\x93\xa4\xb5\x62\x66\xef\xb7\x35\x99\xc0\x85\x4e\xa1\x87\xa9\x68\xc4\xb0\x0a\x4c\x55\x46\x72\x6d\xab\x84\x76\x5e\x79\x84\x79\x86\x33\x3b\x84\xd9\x0e\x8f\x99\x71\xd9\xd9\x5d\x26\x66\x6a\xeb\xcc\x2d\x94\xa0\xb1\x00\x4b\x7d\xcd\x49\x9a\xa8\xaa\x74\x93\x4f\x31\x36\xd3\xc3\xa4\x03\x18\x99\x99\x48\x3b\x2a\x0d\xde\x06\x83\x06\xb7\x0b\xaf\x3d\xf8\x50\x96\x70\x10\x82\x40\x92\x3e\x17\xb1\x7d\x5f\xc1\x8c\x13\x90\x2e\xac\xcc\x22\x5a\x5d\x0d\xd9\xa5\xe2\x77\x35\xde\x0a\xea\x57\xe0\xfb\x9c\xdb\x28\x91\x11\x11\x3d\x47\xcb\xc4\x4d\x4f\x74\x64\x7c\x58\x9a\xab\xc4\x82\xf9\xdc\xce\x12\x8d\xd6\xd8\xde\xf5\xed\x04\x1a\x46\x8e\x23\x42\xa9\xe1\x2e\x28\x1d\x55\xd9\x01\x0e\x9f\x1b\x69\xe7\x20\x9a\x6c\xcc\xf0\xfd\x18\x66\xdb\xfa\x23\xc9\x46\x02\xf2\x51\xe0\xf3\xb0\xee\xd4\x0d\x99\x4f\x51\x16\xf9\x93\x9d\x0e\x05\xb2\x96\x72\x57\x04\x1b\xcd\xf1\x2c\x21\xfa\x4a\xe4\xe5\xa2\xd0\x76\x6d\xd0\x85\xa1\x16\x0e\xb4\xd1\xbb\x84\xdb\x24\x1c\x98\x00\x49\xd5\x15\x28\x4d\xc1\x18\x06\x0e\x4c\x33\xf6\x19\xa4\xc1\x37\xdc\x23\x57\xf9\xa2\xd7\x38\x0d\xb9\x94\xd2\xfe\xba\x4b\xd2\xa5\x9e\x61\x57\xc1\xaf\x9e\x0c\xca\x93\xe1\x68\x66\x51\x89\xd7\x76\x0c\x24\xa3\xa5\xc8\xf3\xad\xd1\x2a\x80\x12\xdb\x32\x18\xef\x77\x99\x98\x91\x7c\xf5\x43\xa6\x51\x52\x6d\x6e\x45\xd0\x13\xc1\x53\x32\xca\xc5\xb9\x71\x9d\x4d\x91\x4b\xed\x85\x31\x55\xcf\xb3\x09\xea\x4a\xbd\xcd\xe6\x77\x57\x55\xb0\xeb\x42\x03\x2a\x6b\xcd\x95\xac\x1e\x0d\x0a\xa9\x9d\x1a\x27\x3d\x44\x0b\x3e\xb0\x9e\x21\x0b\x3a\xb0\x81\x5b\xe2\xb7\x01\x32\x69\x85\xfb\x16\xdd\xc6\xa8\x23\xdb\x25\xa3\xd8\x3d\x62\x31\xf6\x34\xba\x62\x14\x86\xe6\xc5\x39\x02\x39\x77\x43\x76\x7f\xe0\xb2\xee\x32\x31\x1b\x55\x6c\x1c\x95\x2c\xcf\xb8\x1f\xbe\x0c\x92\xb3\xc9\x58\xd1\x5d\x57\xcc\xfd\xd5\xb5\xa8\x61\xf8\xac\xab\x48\xa9\x1e\xb6\xee\x77\x49\x52\x12\xa6\xa2\xeb\xe7\x3e\x61\x8b\xbb\x77\xb0\xed\xae\x27\x4e\xe7\x51\x3c\x96\xad\xc0\xcd\x64\xd2\xf4\xa8\x40\x56\x8d\xb9\x3d\x44\x7a\x60\x4e\xf5\x26\xf0\x79\x58\xbf\xfb\x86\xcc\x07\x3a\x41\x85\x0d\x03\x54\xb6\x81\x7a\xc5\xf4\x48\x16\x3f\x02\x3d\x16\x0a\x17\x42\xac\xf0\xeb\xca\xc9\x82\x53\x4e\x09\x68\x43\xcc\xdc\x35\xb3\x45\x6c\x72\x96\xc4\xd8\xf6\x93\xe5\xb4\xc8\x41\xd5\x48\xb3\x32\xa6\x99\xbe\x62\xa5\xa6\x01\xc5\x10\x0b\x87\x6e\x0c\x2b\xeb\xd1\xba\x4d\x48\x05\x94\x06\xf8\x15\xaa\x74\x85\x82\x5a\xa7\x72\x6e\x21\x65\x9c\x45\x12\xac\x6a\xc9\x15\xd6\xd4\x46\x84\x8a\x8e\x68\xf9\x2e\xc8\x5d\x74\x9e\x44\xa3\x63\x88\xee\xc1\xe1\xe0\xa0\x07\x82\x75\xac\x46\x60\x92\xa5\xe1\x28\x31\x17\xa3\xa3\x4e\x26\xfc\x32\x72\x1d\x57\xd5\xe0\xae\x77\x42\x31\xc9\x76\xf8\x75\xe9\x56\xb4\xd4\x42\x91\x7a\xe2\x13\x6c\xbd\x63\xb8\xb1\x76\xf9\xd0\x2f\x78\x70\x80\xdd\xd1\xf6\x00\x10\xbd\x6b\xe3\x99\x80\x40\x4b\x27\x8b\xc4\xcd\x2e\xac\x8a\xbb\x9c\x03\x3b\xb4\x68\x9b\x7a\x58\x0f\x50\xd7\x57\x63\x7d\x1a\x1b\x05\xec\xf9\x30\xf8\xba\x4b\x5c\xa6\x67\xb5\x7b\xa4\x36\x98\x4c\x18\xe7\x7e\x5a\x6d\x41\x0e\xfe\x5a\xe2\xb0\x5e\x13\xd6\xd1\xbc\xcc\xec\x6c\x58\xb6\x03\xec\xdc\x91\xef\xd2\x1d\xeb\x91\xac\x6b\x92\x98\x92\x06\x81\x70\x8e\xb9\xd2\x65\x72\xa1\x0c\x19\x7a\xd5\x80\x71\x54\x41\x95\x6a\xbd\x74\x40\x84\xc2\xd9\xa3\xc5\x65\x1e\x36\x41\xbb\x43\xd9\x0a\x35\xb6\xe9\x0d\x02\x95\x90\x25\x3a\xa5\x4e\x4d\x22\x64\x43\x10\xc7\x14\x77\xfd\x17\x5f\x60\xe6\xca\xe9\x36\x87\x46\x8a\xde\x66\xa5\x40\x05\x21\xc8\xca\x06\xfc\xe9\x87\xda\x3a\x04\x89\x2b\xdc\xa2\x60\x1e\x08\x8c\xed\xc5\xd2\x99\x15\xa0\x85\x01\xa6\x33\xcc\xe8\x2e\x59\x3d\x7a\x9e\x11\xb3\x5d\xfb\x1d\x06\xbf\x1b\xda\x73\xdf\x93\xa9\xf4\x4a\x44\x28\x7f\xa0\xd4\xd4\x3c\x5b\x6e\x7b\x1c\xe5\x2a\x50\x4e\x73\xd7\x44\x9d\x4a\xed\xf6\x2d\x46\xc9\x82\x86\x72\xe8\xb3\x73\x9a\x2c\xa5\x6e\xfa\xfd\xc4\xe5\x10\xe8\x24\x16\x6e\x26\x45\x04\xcf\x33\x0b\x42\xf8\x5d\xc7\x7b\x70\x31\x8e\x0e\xc9\x96\x05\xc8\xb3\x8e\x2d\xea\x7c\x91\x25\xfd\xd6\xe7\xb6\x8f\x2c\x29\xd5\x31\xc9\x0b\xd9\xb3\x66\x32\xec\x04\x77\xb1\x1a\x19\xa5\x2a\xc5\x00\x93\x63\xb0\x31\x2b\xe6\xb6\x8c\x1a\x39\x08\xd1\x23\x3f\xd8\x20\xd8\x4f\x51\x46\xed\x41\xcf\xb1\x14\xd8\xf8\x5d\x6a\xe6\x55\xb7\xa6\xd5\x59\x52\xd9\x7b\xea\x62\x72\x7d\xb4\xd5\x22\x97\x6c\x1e\xc0\x3a\xd7\xeb\x0e\xe0\x25\x4f\xd9\x4a\x99\x75\x67\x99\xdf\x75\x35\x68\xa0\x8e\x96\x1b\x68\x1c\xee\x28\xe5\xd4\x32\x4c\xfb\xf4\x97\x31\xe1\x4a\x31\xeb\xd3\x6d\x23\x44\xab\xa2\xe8\x1b\x23\x93\x8a\x07\xce\xc9\x9b\xc0\xe7\x61\x33\xf9\x3b\x76\x5c\x56\x66\x18\x93\x2d\xcd\x49\x62\x55\x3b\xd4\xa5\xd0\x83\x2b\x5a\x81\xcc\x89\x18\x9f\x4e\x2f\xa2\x42\xd0\x63\xb7\x1f\xce\x8f\xdb\x1a\xce\xab\x51\xdf\x4b\x42\x83\x73\xe8\x5c\x36\x65\x41\x46\x15\xc8\x34\xba\xa0\x2f\x57\x36\xcb\x56\x56\x45\xb4\xcb\x2c\xb3\x42\xdf\x6f\x23\x32\x93\xe4\x28\x16\x67\x58\x78\xb1\x75\xd2\x91\xd4\x16\x10\xd9\xbd\x45\x10\x73\xa6\xd8\xe5\x60\xcd\x07\xc3\xc9\x31\x5c\xb5\x10\xcb\xdd\xe5\x62\xdd\xcc\x12\xea\x4c\xb1\xd9\xf3\xa0\x25\xaa\x88\x02\x99\x13\x56\x25\x70\xe2\xdc\x4c\xea\x4d\x9b\x97\xd1\x8d\x41\x1c\x11\x2a\x83\xde\x95\x97\x66\x9f\x4c\x9a\xd7\x85\x25\xe2\x58\x06\x5f\x94\x4a\x46\x8b\x6b\xd9\xab\x8b\xce\x28\x88\x50\x12\x4b\x8f\x63\x6f\x80\x7b\x0f\xda\x76\xd7\x04\x30\xf3\x04\xf6\x76\xd0\x7a\x55\xd2\x2d\x07\x1c\xc9\x55\x06\xa9\x5a\x79\xbe\x79\x1c\x79\x0a\x5b\xc0\x08\x55\x58\xaa\xc9\xf9\xba\x6e\xdb\xfb\xe9\x8e\x59\xd2\x56\x0b\x4a\x8e\xc3\xc3\xbc\x68\x2f\x42\xbb\x78\x51\x1d\x58\x3c\x00\x3f\x02\x24\xd3\xa7\x50\x8b\xac\xe7\x96\xc5\x76\x57\x36\xb8\xf3\xcc\x41\x56\xdb\x75\x58\x11\x37\x52\x1a\x52\x66\x83\x6a\xe7\x6b\xf8\xa9\x82\xd9\x5b\x2a\xf0\x64\xb1\xb9\x38\xf5\xd8\x75\x78\xc0\xce\xea\x4d\x64\xab\x87\x79\x23\xfe\x15\xb2\xd5\x4f\x3f\xfb\xe5\x2f\xf8\xe9\xa7\xe8\xf7\xfe\xd0\xe7\xbc\xee\xaf\x7f\xe5\xcb\x7f\xea\x59\xec\xf5\xff\xc7\x8f\xbf\xcb\x67\xbe\xcd\x0f\x7c\xed\x3f\xfc\xa5\xff\xfd\xb1\xdf\xf9\x19\x0f\x32\xa8\x7e\xee\x29\xcf\x7b\xf5\xc7\xbc\xd5\x17\x7f\x6f\xf9\x36\xf5\xb2\x8f\x7f\x99\xff\xfa\x77\x7a\xce\x27\x7f\xf0\xdb\xfc\xad\x7f\xfd\xf3\x7f\xfe\xf1\x3f\xf4\xf6\xbf\xf7\x94\x2f\x7a\xde\x03\xa1\x3f\xf0\xcc\xf5\xd3\x7f\xf0\x11\x5f\xf2\x12\xf9\xca\x6f\xfe\xa0\xd7\xfc\xe1\x77\xfe\x8f\x6f\xfb\x03\xbf\x09\x7e\xe7\x8f\x7e\xe7\xf7\x5e\xfb\x0d\xe0\x55\x1f\x64\x9f\xf9\x94\x07\x42\x3f\xfe\xcd\x9f\xfc\x27\xff\xda\xbe\xfb\x33\x7f\xf9\x7f\xf8\xa6\xff\xf0\x77\x5f\xf0\xea\x57\x3d\xf9\x45\x3f\xfd\xe6\xff\xfe\x15\xdf\xfd\x59\xba\xca\xe7\xfd\x83\xc7\x3c\xe1\x3d\x1e\x08\xfd\xbb\x5f\xf3\x94\xaf\x7f\xf9\xb7\xbf\xf1\x63\x7e\xe8\xd7\xbf\xe4\xc7\x5e\xf0\xa4\xcf\xff\x96\x0f\xfa\xc3\xc7\xfd\xe0\x7b\xbf\xfe\x1d\xbe\xe6\x9b\xfa\xc7\xfe\xfa\x63\xde\xe2\xcd\x3e\xfd\x81\xd0\xe7\x7f\xdc\x3f\xfa\xb2\xa7\xc1\xa7\x7c\xd8\x27\x3c\xf7\x4b\x9f\xf1\x92\xf7\xfc\xe7\x9f\xef\x9f\xf8\x9d\xff\x0a\xff\xee\x53\x9e\xfb\x9c\x1f\x7f\xc9\x5f\xfb\x8f\x2f\xfe\x42\xfa\x40\xe8\x3f\xfe\xd4\xbf\xf7\xd2\x3f\xf9\x0f\x5f\xf0\xff\xfa\xc7\x7f\xe7\x95\x9f\xff\xb2\x67\x98\xff\xf2\x94\xfe\x05\xff\xec\x73\xdf\xf2\x19\x4f\x7d\xfe\x9b\xfd\x93\xfa\x86\x5f\xfb\xd3\x17\x3e\x10\x4a\xbe\xe8\x8b\x7f\xf4\x35\xff\xf6\xe5\xc7\x8b\x5f\xf6\xb2\xcf\x7c\xd5\xf3\xe7\x0f\xbe\xcb\xa7\xfd\xdf\x9f\xf4\x39\xbf\x8d\xbe\xe0\x0d\xd7\xeb\xbe\xe9\x93\xd9\x6f\xbf\xe4\x2f\xc9\x56\x0f\x7b\xab\x37\xdc\x00\x60\x5b\x96\x81\x47\xb2\x2b\x97\x2f\x8a\xa0\x36\x55\x41\x07\xb6\x89\xe5\x61\x1c\x68\x54\x67\xea\xb0\xc2\x39\x88\xa0\x0e\x16\xf4\x5d\x8a\x82\xd4\x12\xc3\x38\x28\x75\xd0\x2a\x93\xe4\x5d\x86\xed\x3c\x14\xc1\x9b\x98\xb2\x4a\x8f\x19\x77\x9b\x8a\x2a\x1a\x71\xce\xab\x60\xac\xca\x5d\x49\xdf\x22\x72\x31\x43\x72\x84\x14\x55\x25\xc3\xd9\x27\x0a\x9b\x2b\xb0\xc0\xe6\xae\x03\x8f\x21\xb1\xdf\xd7\x7e\x2c\x10\x84\xdb\x51\x2d\x77\xb5\x00\x45\xdf\x93\xbe\x3c\x8c\x15\xcb\xbc\xc2\x4a\x94\xe7\x38\x37\x7b\xd5\xb5\x88\x19\x24\x21\x67\x00\xb2\xbb\x60\xde\x75\xa5\xa7\xba\x0d\x63\x74\x5d\x41\x83\xcc\x85\x83\x84\x1d\x22\x9c\xa6\x32\xa1\x87\xe8\x74\xf2\x79\x75\x57\xd3\xea\x23\x11\x5f\xfd\x99\xaf\x1a\x2f\xb8\xee\xe2\x3b\x28\x9b\x14\x37\x6a\x59\x67\x3c\xc0\xc8\x62\x1e\x03\xf2\x81\xef\x02\x9b\x7d\x9f\x39\xf6\x31\x52\xdc\x8b\x70\x07\x85\xdd\x58\xb7\xdd\xa5\x03\x42\x75\x45\x3c\xb8\x2c\x67\xb0\x47\xde\xb0\x28\xfb\xc5\x45\xc4\x5e\xf9\x05\x2f\x63\x9d\xe6\x61\x84\xb8\xe5\xdd\xae\xfd\x30\x27\x5b\x77\x11\xc4\xcf\xcd\x7a\x41\xf8\x55\x50\xf7\x07\x38\x53\x65\x95\x9c\x0d\xd0\x52\xc0\x65\x67\xef\x73\x63\xbe\x94\x40\xa9\x1c\xac\xb6\xda\xe4\x45\x1f\x95\x7e\x3e\x0c\xa7\xef\xd8\x72\xdc\xa9\x63\x4d\x32\xd1\x5a\x14\x40\x14\x21\x41\x95\x71\x5d\x2b\xad\x8d\x96\x3c\x40\x77\x50\xf7\xb9\x07\xd0\xae\xd8\xf2\xca\xf6\xae\xda\xf7\x84\x22\xb7\x1d\x48\x1a\xb5\x6f\xc5\xe4\x99\x2b\x5e\x7b\xf1\xb6\x49\x4f\x2f\xd4\x7c\xc6\x7d\x1d\x44\x74\xb7\x5d\x59\x75\xd0\xcf\x9b\x78\x73\x24\x55\x10\xb7\xc5\x30\x22\x6a\xbf\xce\x43\x9f\x54\x8f\x50\x92\x15\x48\x2d\x96\x71\x0a\xb6\x79\x41\x19\x4e\x0c\x2f\x89\x4f\x37\xef\xa3\xf3\x24\x03\xd8\xd1\xdb\xce\x71\x76\xbe\x90\xe4\xa9\xc6\x9c\xf1\x50\xd0\xa5\x63\x0d\xfb\x84\xa9\xb7\xd8\xd3\xda\xd4\xa4\x42\x90\x7c\x17\x97\xf0\x18\xc2\xa2\x74\x79\xbe\xa6\x84\x70\x1a\x37\xed\xe5\x69\xf6\x93\xc8\x7e\x74\xb5\xcd\x7e\x35\x3e\x1b\x86\x1d\x49\x3f\xab\x32\xe5\x2e\x46\xb0\x43\x5c\x6e\x3d\x0e\xa6\x79\xe1\xba\x47\x2a\xf2\x74\x95\x9f\x3b\x6d\x4e\x1d\x85\x0f\x3f\x63\x41\x35\x90\xb3\x4f\xcc\x34\x89\xec\x26\x77\x33\x1a\xb6\x3c\x77\xbd\x49\xdc\x87\x3e\x85\xf5\x45\xcd\x60\xae\xfd\x11\x28\x5e\x2b\x53\x1c\x36\x71\xc0\x42\xf1\x06\xaf\x6a\xda\xe9\xd7\x71\x17\xe7\xf4\xe0\xec\x5a\x6b\xa3\xf1\x48\x5b\x2f\xb1\xd8\x4c\xaf\xc2\x1c\x37\x45\x81\xb4\xd9\xa6\x46\xef\x09\x87\xb3\x65\xb9\x0e\x01\x3d\x28\x8f\x26\x5b\x3d\x2c\xf3\xbb\xa3\xf1\x36\xfc\xc2\x67\x4f\x0c\x72\xae\xce\x91\x17\x29\x38\x5c\x69\x31\xa3\xa5\x0c\xa2\x28\x65\x59\x93\x8b\x80\x3d\x1c\xc7\x86\x61\x39\x6e\x1a\xaf\xd1\x8d\xa2\x8b\xb7\xc0\x4e\xef\x30\x3e\x38\xb6\x67\x0c\xdd\x73\xea\x06\x86\xae\x23\xcf\x1b\x35\xfb\x71\x89\xcd\xcf\x40\x0e\xad\xc9\x6d\xde\x94\x55\x6a\xcf\xb6\x8b\x86\xc3\x58\x41\x2b\x6a\xcb\x48\x9b\x0e\x20\x95\xa4\x87\x0d\x7b\xbf\xd8\x3c\xb3\x32\x1e\x72\xb9\x5a\xb1\xa8\xde\x35\x4a\xea\x95\x62\xef\xfc\x9e\x0f\x6f\x1d\x49\x91\x14\x4e\xcb\x61\xda\x39\xc6\x06\x04\x99\x43\x99\x38\x6c\xdf\xaf\x9a\x4b\x3b\xfb\x71\xdc\x35\xfc\xa4\xcd\x40\xaf\xcc\x86\xfa\xa5\xe2\xba\xc4\x89\x29\xd7\x72\x56\xe5\x59\xde\x71\xd8\x90\x58\x7a\x44\xbc\x11\x58\x73\x37\xb3\x14\x44\xef\xf2\xb3\x00\xbe\x79\xd2\x46\xd6\x28\xe8\xa4\xd3\xd9\x2b\x2b\x4d\x04\x76\x70\x79\xee\x8a\x95\x2d\x90\xde\x4d\xf4\x33\x1e\x09\x10\x49\xf6\xed\xae\x27\xe1\x07\x04\xc4\xb2\x78\x49\x8f\x3d\x0d\xca\x86\xba\x90\x09\xa0\xcc\xe2\xce\x12\xaf\x99\x05\x0f\x85\x6e\x17\xdf\xf1\xde\xf4\x2c\xb7\x4d\xcc\x18\xd3\x57\x3d\xaf\x92\xbd\x39\x11\xc4\x81\x08\x29\x58\x44\xc2\x22\xdb\x8a\x22\x9d\xf9\x8c\x90\x05\x5c\x5a\xbb\x71\x68\x4f\x67\x1e\xdd\xf5\x7f\x58\x2d\x79\x87\xac\x5e\x22\x2c\x55\xbf\x87\xed\x3a\x2b\x8d\xcd\x2f\xa7\x53\x48\xad\x61\xcb\x0b\x42\x30\x95\x93\x8a\xc9\x97\xb7\xa5\x53\xab\x11\x3d\xef\xfa\xd0\xb4\x94\x7a\x01\x02\x0e\x02\x27\x47\x19\xe8\x99\xac\xdd\x14\xec\x8d\xc1\xab\x54\x52\x73\x8d\xc8\xe0\x06\x70\x9c\xe1\xb0\x64\x5e\x77\xed\xb8\xb0\x4b\xf9\x7a\xa5\xac\x31\x1c\xe3\xaa\xd1\x1d\xe7\x92\xd5\x28\x40\x18\x4a\x7e\x65\xdb\x44\x3f\x2a\x2a\x27\x2f\x56\x80\xbc\x60\xbe\x6b\xa2\x0e\xb9\x83\x51\x71\xce\xb6\x96\x8f\x18\xbd\xa4\x76\x05\xaf\x67\x5b\x60\xd7\xcc\x1f\x98\x38\x5f\x18\x00\xd8\x09\x3a\x0c\x52\xea\x36\xbe\x83\xd1\x43\xa3\xdc\x87\xce\xf8\x80\xbe\x1c\x48\x55\xbc\xf5\x3e\xf8\x26\xfc\x7e\x0e\x58\x1c\x00\x88\x1b\xb5\x1f\x5a\xd7\xa6\x77\xe9\xee\x92\x94\x37\x24\x77\x67\x60\x05\x88\x75\x71\x46\x8a\xcb\xc8\x26\x28\x23\x79\x29\x97\xf1\xad\xb1\x5e\x8b\x93\x00\xa8\x34\xd5\x6e\xe9\x65\xef\xfa\xe4\xe9\xbe\x26\xc5\xee\x94\x86\xa4\x73\xdf\xd9\x60\xde\x2e\x6d\xcf\xba\x6f\x74\x6f\x42\x81\x62\xfb\x0e\x52\xc5\x90\xc9\xa6\x76\x1a\xc8\x6d\xbc\x98\xcc\x78\xb8\x76\x8f\x20\x43\xc9\xe8\x01\xc3\xb5\x33\x7e\xed\xa9\x8f\x89\xc4\x11\x79\xbe\x90\x98\xd4\x8d\xba\xf3\xb8\x8b\xa8\x89\x7f\x14\xf8\x3c\xac\x3b\x75\x03\xd9\x2a\x1d\x70\xe3\x5b\xa7\x07\x54\x27\x8d\x6a\x95\x65\xc2\x28\x3a\x1e\x60\xb5\xdd\x51\x74\x62\xaa\x97\x84\x11\xd9\x56\x77\x77\xc4\xed\x2e\x4a\x35\x3d\x5a\xa3\x80\x2b\x12\xed\x11\xaf\x26\xf4\x01\x08\x25\x03\x9f\x8a\x05\x04\x59\x46\x7c\x9d\x1e\x7b\x72\xb1\x32\x3a\xb8\x76\x4e\xf9\x5d\xc7\xdb\x3b\xd0\x37\x01\x8e\x24\x4b\x50\xa7\xaf\x42\xee\xd4\x1c\x35\x78\x6e\xb3\x69\x05\x55\x50\x4c\x30\x49\xda\x33\x62\x16\xc1\x66\xb7\xbb\xf6\x7e\x68\x43\x97\x1d\x4c\xba\x82\xc2\x9c\x15\x4c\x45\xf6\x24\x64\x4c\xdb\xd1\x4b\xeb\x8e\x7a\xbe\x81\xe8\x46\xcb\xe8\xa8\xda\x95\xdd\xde\x25\x59\xcb\x24\x9c\xd3\x73\x5e\x12\x0a\x00\xae\x74\x8c\x24\x0e\x59\x77\xb9\x13\x0d\xd2\xe1\xd5\xdc\x27\x31\xdc\x1e\x02\x51\x17\x4e\xae\xd9\x5d\x4b\x00\x47\x24\xd7\x60\x01\x77\x04\x76\xcb\xdb\xc6\xbd\x4b\x0a\x01\xbf\x84\xa6\x74\xc9\x7e\xac\x11\xba\xae\x85\x45\x6d\x76\xbc\x87\xeb\xb6\x99\x0c\x0d\x3a\x9f\xfb\x25\x7c\xc8\x87\x1c\x79\xbb\xb0\xd6\x2e\x1c\xbd\xc8\xe2\x96\x92\x69\x6e\x43\x8c\x4c\x0c\x02\x65\x15\x71\x78\x77\xde\xe5\x7b\xb2\xce\x4d\xee\xd3\xec\x27\xb7\x26\x0a\xd1\x5c\x03\x43\xe2\xcd\xa6\x99\xf7\xa5\x98\xd2\x01\x40\xe2\x7d\x30\x06\xb0\x8a\xf6\x73\xcb\xd7\xa3\xc0\xe7\x61\xfd\xee\x1b\xc0\xc7\x4a\xa8\x11\x55\x5a\xd4\x48\x59\x36\x57\x45\xe2\x14\xae\x8c\xfd\x14\xed\x42\xc6\xba\x6e\x34\x59\xca\x9d\xd7\xea\xb2\x6c\x2a\xd1\xbb\x88\x45\x67\x75\x05\x0e\x4f\xd4\x49\x01\x1b\x73\x42\x23\x10\xc3\x52\xcf\x06\x66\x66\xc2\x5f\x3d\x3b\x1c\x08\xc5\xa7\xce\xa9\x4c\x35\xcd\x5d\x73\xec\x32\x0f\x05\x27\xbe\x82\xef\x56\x9a\x72\xb2\x1e\x4e\x54\xf3\x09\x75\xd8\xc0\x20\x5b\x3c\x5a\x97\x05\x9b\xc6\xf5\xc9\xbb\xa9\x1c\xdc\xa6\x97\x3d\xf1\xe5\x77\x6f\xa5\xc9\x7d\x25\xd4\xb2\xc1\xe1\xcc\x26\x53\x0e\x8f\xe8\xbb\x39\xce\xc8\xf7\x7d\x3b\xc4\x96\xe3\x69\x78\x3f\xcf\xbb\x9a\xab\x9e\x5f\x9a\xda\x16\x21\xb7\xe4\x68\x0e\x4e\x6f\x36\x8c\x98\xdf\x0e\x05\xf1\xd6\x40\x3c\xfb\x72\xd6\xf0\xe8\x05\x1c\x28\x16\x99\xef\xb2\xf5\xc9\x67\x2c\xdb\xde\x90\x92\x05\xae\xe6\x36\x4c\xb7\xd6\x34\xe0\xc0\x75\x33\x35\x40\xfc\xc8\xf9\x20\x6d\xef\x96\x15\x26\xbd\xd2\xb7\xad\x84\x6e\x69\x20\x8a\xcf\xc1\x9c\xdc\x64\x8d\x52\xab\xc2\x59\x9e\x10\x96\x75\x41\x96\x81\x46\x83\xf9\x66\xb5\x91\x30\x92\x02\x59\xd8\xee\xda\x71\xa1\x93\x3b\x56\x64\x54\x56\x9e\xa7\x8d\xa1\x1f\xec\xe2\xad\xa1\x33\x68\x7e\x9a\xde\x57\xb2\x9a\xc0\x53\xcd\xbd\xd7\xb3\x30\x66\xed\x7c\x14\xf8\x3c\x6c\x82\x76\x43\xd9\x35\x2f\x60\xd4\x45\xce\xa1\xc2\x6e\xe9\xce\xd4\x51\x87\x9c\x95\x77\x91\xeb\xc4\x38\x1d\x38\x03\xbd\xca\x75\x58\x24\xb2\xe7\x7b\x02\x77\x15\x3b\xe3\x94\x67\xef\xab\x4a\x19\xd4\xde\xaf\x42\x1a\xe9\xc9\xe6\x47\xf2\xec\xd3\xe9\x3c\xbc\xb3\x27\xc0\x13\x9d\xd6\x5e\x88\xf2\xac\xcb\x5d\x74\x9e\x7a\x6d\xe7\xc9\xc1\x42\x17\xf5\x90\x80\x1e\x01\x4d\x9b\x66\x5b\xeb\xea\x92\x3c\x9e\x5b\xd8\x64\x72\x91\x66\xad\xb7\xa2\x30\xa9\x77\xbd\x13\x92\x22\xbd\x0e\x28\x23\xde\xd6\xb8\x66\x92\x45\x87\x50\xfc\x61\x30\x41\xd4\xed\x78\xf9\xca\xcb\x34\x29\x71\x4c\x0c\x4f\xf5\x48\xec\x2e\x5f\x57\x95\x69\xc8\x6d\xd3\x09\xa0\xe4\x06\xd8\x63\x2e\xca\x41\x03\xbd\xe8\x13\x4f\x60\x3a\x77\x15\xba\xbc\x01\x96\x5b\xa8\x6c\x6e\xe6\x2e\x36\x0a\x72\x23\x45\x75\x2e\x01\xae\xdd\xb9\xe5\x2e\xb9\x9c\x51\x21\x5e\x86\x11\x44\xe4\xd6\x0b\xd0\x0c\x04\xa1\x0c\xdf\x46\x42\x16\x83\xbb\x84\xa7\x0f\x19\x71\x26\xbb\xdf\xc8\xc8\xa5\x47\x32\xdc\x36\x80\x09\x6d\x1f\xd1\x4b\x98\xf9\x18\x10\x2d\x24\x72\xc0\x73\x4a\x4a\x17\xbf\xcd\xe4\x71\xd6\x3a\xd1\xa5\xe2\x62\x1c\x9f\x73\xac\x72\x02\x03\x2f\x46\xd6\x65\xb4\xfe\xff\xd3\xf6\xaf\xd1\xff\xfd\x64\x79\x20\x4c\xdb\x81\x82\xda\x56\x10\x44\x05\xc1\x69\x45\xd0\xb6\x02\x3b\xc9\x8e\x54\x7d\x4a\xd1\x52\xe4\x58\xf0\x38\x62\x1f\x4c\x76\x92\x9d\xf3\xce\x79\x27\xe1\xe0\xb1\x2a\x82\x15\x07\xad\x8a\xa8\x14\x50\x14\x15\xc4\x13\x60\x15\x8b\x58\xa8\xa8\x80\x28\xf5\x0c\x53\x15\xa4\x8e\x0a\xc8\x03\xa8\x9c\x9e\xf5\xc7\xd1\xf9\x8d\xff\x59\xeb\xf7\xa2\xdd\xaf\xbe\x6f\xee\xf5\x5d\x59\xf9\xec\x5c\xb9\xae\xfb\xbe\xee\x3b\x27\xda\x68\x84\x72\x18\xa8\x42\xce\x15\x63\xbf\x62\x72\xeb\x9c\xcf\xcd\x6a\xf2\x57\x54\xbb\x06\x5d\x10\xe9\x75\xa5\x56\x79\x89\x3d\xc8\x48\x20\xad\xf8\x56\x37\x61\x34\x55\x60\x63\x0c\x8c\x26\xdc\xc9\xc9\xc2\xd2\xc6\xc6\x55\xef\xb8\x78\x6f\x1a\x4f\x70\x00\x82\x16\x8b\x8f\xa5\xcf\xba\x27\x61\x1d\x2f\xa3\x34\x42\x57\xd6\xf4\x9a\x38\x5a\x49\x41\x8c\xef\x47\xa1\xf1\xaa\xe4\xea\x01\x44\x61\x87\x94\x7a\xdb\xbb\x11\x2a\x2c\x38\xf3\x54\xe1\x22\x8f\x45\x1c\x41\xc3\xe8\x1d\x21\x28\x04\x92\xf3\xca\x8a\x88\x31\x5f\x75\xa3\xc1\xea\x56\x9c\xe3\xa8\xb4\xc3\x91\x52\x1c\xbc\xe2\xd4\xe4\x09\x66\xaa\x94\x6f\x8e\x9a\xd2\x88\x59\x36\xef\x39\xc8\x09\xc7\x91\xae\xaa\x45\x4e\xcf\x05\x6b\x94\x52\x4a\x00\x5f\xca\xa9\x11\x49\x93\x83\x0d\xa2\xb1\x2f\xbd\xc7\x34\x96\x99\xf4\x2a\xa3\x3c\x2a\xd1\x8e\xe8\x79\x15\xf8\xf4\x4d\x59\x19\x96\x5c\x71\x17\x9d\x9f\x9c\x93\x7c\x9c\xb5\x6d\x6b\xdf\x7c\x6a\x7e\x8b\x30\x84\x5c\xb7\xa4\x4f\x95\x8b\x0c\x1c\xa4\xab\xae\x4b\xcd\x13\x0c\x46\x9d\x83\x9e\x08\x9d\x5d\xf9\x4d\x75\x99\x34\xde\x6a\x46\x19\xa7\x12\x9b\xb3\x0e\x66\xb9\xf7\xea\xa4\xd7\xeb\x76\xd9\xb3\x67\x8c\x04\xb2\x95\x6d\x1b\x87\xb3\xc5\x86\x7d\x59\xbc\x03\xed\x3c\x8b\xc6\x42\x8a\xb3\x9c\x6b\x05\xab\x9e\xc0\x0c\x46\xcc\x59\x17\x39\xdb\xad\xcc\x56\x4f\xfb\xac\xff\xfc\xe6\x8f\x81\x8f\x15\xff\xfc\x63\xee\xf5\x79\x0f\xfb\x3b\x7a\xfe\xc6\xc3\x6f\xfb\x43\x77\x78\xc4\xf3\xf3\x0b\x9f\xfe\x83\x6f\xbd\xf3\x57\xff\x9f\xcf\xfd\x1b\x66\x2b\xf4\xa4\x3f\xff\xb0\x37\xdc\xff\xc5\xb7\x79\xf0\xbf\xfc\xfa\xcf\xbb\xfd\xa3\xdf\xf7\xc6\x87\x7c\xe3\x13\x9e\xfb\xf3\xf6\x01\x3b\x7f\xce\x17\x3c\xea\x5d\x9f\xf0\xee\x79\x43\xe8\xcf\x3c\xf4\x59\xaf\xf8\xb1\xb7\xdf\xf7\x7b\x5e\xf7\xa9\xe9\x6b\xde\xf3\x5d\xbf\xf1\x9b\xb7\x79\xc6\xf3\x9e\x77\xbf\x77\x3e\x89\x3d\xca\xfc\xc6\xb3\x5f\xa1\xff\xde\x77\xde\x10\xfa\xfd\xf4\x9b\x5e\xf5\xc0\xef\xb9\xdb\xef\xfc\xfe\x77\xfc\xe2\xf3\xbf\xf2\x75\xbf\xf5\xe9\x3f\xfa\x75\x1f\xf7\xe5\xf7\xbb\xef\xeb\xee\xf9\xca\xf5\x75\xf9\xce\xdf\xf9\xdc\x57\xdc\x10\xfa\xbf\xbf\xe3\x1e\x1f\xb8\xe7\xc7\xbe\xe1\x99\xff\xfa\x63\xfc\xd7\xbc\xed\xcf\x5f\x76\x8f\xfe\x9c\x1f\xfb\x9d\x57\xfc\x57\x30\xbf\xfb\x27\xdf\xfb\xec\xb7\x7f\xef\xb7\x3c\xff\x86\xd0\xb7\x3c\xe9\xd7\x7e\xe6\xef\x7e\xc5\x31\xfe\xdd\xdf\xfe\x8f\x8f\xfc\xf5\xbb\x3c\xe5\x87\x9f\xbf\xfe\xa7\x27\x7e\xe0\x87\x3e\xfe\xa1\xcf\xfd\xc8\x27\x7d\xfa\x73\x3f\xf8\xf2\xf7\xdf\x10\xfa\x8a\x2f\xfa\xbd\x1f\xfd\xd6\x87\xbe\xf9\x93\xbe\xe1\x39\x9f\xfd\x7b\x7f\xf8\x8e\xf7\xf5\x3b\xfe\xd2\x7f\xfb\xf7\x3f\xfb\xb8\x2f\x7b\xef\xbd\x1f\xf7\xa2\x7f\xfa\xc7\xef\x7e\xcc\xab\x6f\x08\x1d\x1f\xf6\x5d\x2f\x7b\xc2\xd3\x7f\xea\x59\xdf\xf5\x2f\x3e\xde\x7f\xfe\x6b\xc4\xe3\x7e\xe3\x87\xee\x79\x77\xf6\xe4\x6f\xbc\xeb\x9d\xee\xf1\x87\xdf\xf8\x53\xef\x7f\xda\x7f\xbc\x21\xf4\xee\x8f\x7c\xf0\x6b\x7e\xe4\x6e\xb7\x79\xf2\x7f\xfd\xaa\x5f\xfe\xb8\xef\x78\xcf\xab\x1f\xf8\xee\xef\xfd\xed\x7f\xf2\xc9\xdf\xf3\x7b\x8f\xbc\xfb\xe7\xde\xee\x85\x2f\xfe\xc4\x7b\xde\xfd\xaf\xcd\x56\x37\xdb\xd5\xff\xb1\x1b\x80\x7f\xd6\x6d\xfe\xfb\xad\x7b\x0b\x93\xc8\x9c\x21\xb0\x6e\x5d\x4b\x1c\x71\x73\x45\x51\xa0\x05\xb6\x14\x7a\xd7\x1d\x22\xb4\x9f\x1d\x73\x99\x99\x13\xd4\x9b\x85\x7e\x28\xdd\xf5\xc3\xff\xdb\xff\xc8\x57\xfc\xff\xb6\x12\x7a\x4c\x9e\x2c\x5d\x76\xb8\x29\x9e\xfa\xda\x40\xe2\x2c\xc4\x93\x0d\xec\xb2\x62\x25\x49\xb5\x20\xa5\xd6\x19\xcd\x5e\x13\x21\x21\xfe\xa5\xe2\xfc\x9f\xbf\x12\xb2\x09\xa6\x2d\x5d\x98\xd8\xe7\x74\xf6\x30\xe7\x11\xb2\x3b\x0e\x9e\xfa\xc1\xd8\xb9\xb6\x68\x90\xa9\xe7\x69\x80\x33\xda\xa9\x6d\x8f\x5b\xbf\x6a\x25\x21\xc9\xe2\x6d\x25\xac\x68\xb8\xed\xe8\xd8\xd4\xdc\xb6\x15\x52\xc6\xf4\x88\x62\x11\x14\x2f\x3e\x2b\xe6\xf7\x30\xf8\x98\x79\xff\x4b\x0f\xf7\x05\x2b\x51\x25\xc0\xbe\x96\x33\x99\x84\xbc\x8b\x25\x9e\x8b\x4d\x53\x77\xbd\x7d\x28\x51\x8b\xb0\x50\xf4\x2c\xd5\x31\x32\x79\x42\xd3\x8d\x08\x2f\x5a\x09\x07\x40\xb4\xec\xc6\x50\x14\x48\xb1\x26\x4d\x8e\x55\xc6\x44\x31\x0b\xb3\x1b\xbc\xac\x1b\xb0\x11\xf7\xca\xf6\x49\x8f\x35\x9c\xf3\x2f\x47\xca\x5f\xf0\xc5\x4a\xc4\xd8\x1e\x9c\x58\x2c\xcd\x6b\x50\x32\x76\xb2\x46\x7e\x9c\xea\xa8\x30\x12\x35\x84\xa0\x69\x31\x75\x8d\xd1\x9b\x13\x6d\x47\xc9\xe7\x45\x7b\xa2\xc5\x5c\x51\x6c\x28\x39\x10\x9a\xab\x96\xee\x8c\xc7\x0c\xc3\xaa\x32\xd8\x68\x99\x4d\x04\xa8\xa8\xa4\x29\x8f\xd4\xb7\x29\x37\xda\xfe\x7a\x25\x7f\x05\x3e\x37\xc3\xe9\xff\xf9\xe0\x43\x73\xd3\x03\x2e\x9d\xe4\x6c\x4d\x16\x40\xad\x74\x39\x2b\x40\x69\xa5\x3b\xa4\x01\x8a\x5d\x9b\x92\x3b\xad\xec\x58\xd4\x9a\x89\x24\x19\x5f\xb4\x81\x05\x4a\xde\x6a\x76\xb9\xfa\x2e\x10\x50\x18\x07\xbf\x9c\xd5\x6c\xdc\x93\xd4\xa0\x5b\x51\x05\xa5\x1a\xb8\x41\x68\x91\x46\x68\xea\x7c\xd1\x47\xd5\x48\xa7\x81\x2f\xc7\x46\xe6\x9a\x39\x56\x71\x51\x02\xec\xa6\x83\x58\xe7\xe1\x5c\x5d\x6c\x29\xba\x6a\xb6\x68\xb7\xd0\x8a\x3d\x55\xe2\xa2\x3d\x91\xe6\x3c\xe3\xa1\x1d\x57\x6b\xf0\x92\x4e\x8a\xc6\xba\xc9\x34\x03\x9d\x31\x87\x91\x8c\xba\x85\x1c\x37\x73\x42\x84\x9a\x5a\xce\x63\xb9\xea\xa0\x21\x7d\x66\xa4\x70\x03\x8b\x2a\xd8\x63\x5d\x78\x4f\xdc\xb5\xae\xd7\x24\x72\x39\xe6\x32\x82\x10\xd8\xed\x4d\xa6\xc3\x91\x62\xf6\xdc\x2e\xda\x93\x33\xb7\x9a\x4e\xe8\x63\x61\x0c\x21\xb6\x90\x46\x58\xbd\x85\xa2\x3b\xc0\xa7\x1f\x02\x98\x49\xc7\x21\x23\xcf\xf6\xd0\xd0\x57\x49\xf4\x45\x2b\x09\x68\x1d\x46\xd3\x79\x9e\x06\xcf\xd8\x53\xe9\x53\x28\x3a\xa0\x5d\xad\x4d\x61\x67\x78\x33\x4d\xf4\x23\x61\xec\x32\x59\xa4\x08\x06\x5d\xb5\x27\x4d\xc8\x16\xc4\xe0\x75\xcf\x76\xa5\xe7\x16\x79\x8b\xb0\x42\x7d\x94\x22\x39\x70\x87\x8b\xc9\x6a\x75\x3a\x4f\xa1\x5d\xa8\x04\x8c\xdd\x0a\x7c\x6e\xc6\xfc\x2e\x00\x1f\xd8\xb7\xba\x2d\x6c\x41\x02\x6c\xf0\xec\x47\x1c\x7a\x31\x96\xac\x3c\x8e\x54\x77\x7b\x4e\xa0\xb9\xa9\x82\xab\x1d\xc4\x00\x10\xae\x97\x1d\xf9\x8d\xf5\xd3\xef\xd8\x8c\x83\xd0\xb3\x69\x63\xa1\x8e\x7e\xed\xda\xdb\xce\xc8\x11\xd2\xe0\x55\xf6\x32\xc7\xd0\x78\x13\x30\xaa\x53\x5d\xc4\x7c\x68\x29\x68\xf1\x61\xa4\xce\x34\xb4\xfb\xce\x36\xb7\x34\x59\x76\xd6\x7b\xf6\x3a\x52\xb7\xe7\x3e\x13\xec\xb4\x1f\x75\x2d\xc2\xc3\x4a\x2e\x02\x64\xea\x13\x9f\xd3\x61\x3a\x5a\x27\x08\xae\xae\x2f\xfc\xf4\xdb\x49\x3b\x20\x85\x91\x9e\x33\xd1\x66\x29\x89\x35\x8d\x62\xec\x40\x56\x75\x19\xf8\x54\xb2\x9a\x1d\x68\xbd\x94\x93\xb7\xe4\x03\x3d\x6c\x17\xb4\x87\x63\xda\x0e\x26\x3c\xdd\x29\x17\xbc\x89\x5a\xf1\x28\xd8\x79\x3c\xae\x5a\x09\x21\x1e\x2d\xb5\xc1\x52\xa5\xb1\xfd\xe0\xd3\x02\x1f\xca\xd2\xa7\xe0\x83\x96\x9d\x86\x09\x69\xdb\x0e\x02\xc1\x8e\xac\xd1\xa7\xdd\xae\x3a\xf2\x53\xcd\xbe\x6e\x14\xb4\x95\xe9\x09\x57\x56\x61\x9d\x9b\x4c\xe5\x90\x40\x1b\xb1\x38\x63\x37\x4b\xd0\x09\x02\xb5\x3a\x8f\x81\x2b\xbb\xe8\x92\xa2\x6a\x1b\x5b\x06\x8a\x38\x2c\x84\xd4\x14\x81\x43\x9e\xe5\x28\x74\x4f\x1b\xd5\x2b\xec\x8b\xc9\x42\x2f\x6b\x1c\xa3\xe9\x1e\x72\xa6\x7f\xf9\xac\xcf\xff\x03\x7c\x6e\xa6\x25\x2f\x90\x5d\xab\x30\x27\x53\x02\x10\xb9\xd4\x35\x20\xb6\x60\xa1\xd8\xbe\x2e\x3a\x1b\x79\x84\x52\x48\x5c\xc0\x79\xa0\x19\x6a\xec\xbb\x5e\xf2\x49\xe7\x45\x1b\xd8\xc7\xb2\xcb\xb1\x23\xd4\x91\x0e\x4e\xec\xe0\xf0\x5a\x81\xa3\x63\x43\x56\xb5\xad\x87\x8a\xab\x20\x8a\xf5\x8e\xce\xe9\x7a\xa3\xf0\x2f\x6d\xe6\x17\xac\xc4\x89\x58\x91\xe6\xe6\x94\xed\x5c\x77\x2f\x53\x58\xb9\xdb\xf2\x1a\x1c\x70\xc8\xd2\x0c\x56\xe7\x16\x84\x86\xda\xa2\xaf\x18\x1e\x1b\xbd\x48\x62\xd0\x9d\x76\x3e\xca\x09\x72\xf3\xa8\x1e\xfa\x34\x6a\x7a\x2f\xf2\x26\x07\xae\x7b\xae\x98\x1c\x98\xcb\x24\x64\x24\x2a\x41\x7f\x16\x3f\xae\x5a\x89\x18\xad\xab\x85\xc5\x1d\x41\x9b\x25\x70\x89\x15\x6b\x60\x53\x11\x1a\xa4\x12\xe6\x9c\x09\x78\x1e\xca\xa4\x65\x08\x8c\xc7\x2a\x8b\xbb\x68\x25\xd8\x99\xc2\x74\x96\x93\x1a\x11\x99\x34\xe4\x48\x21\x0e\x61\xd6\x74\x1c\x0c\xf5\xe4\xc1\x5a\xe1\x81\x66\x43\xce\x43\x33\xa1\x36\x57\x49\xd1\x8e\x4f\x95\x9b\xc6\x87\x16\xdd\xad\x90\x68\xd2\x76\xc5\x57\x2b\x8d\x26\x28\xc7\x24\x5d\x4c\xbb\xc2\x09\x00\x55\x7d\x8c\x36\x10\x75\xd5\xd5\xc0\xf5\x10\x0d\x97\x98\x80\xc5\xa2\xd5\x75\x8a\x73\x1e\xac\x08\xaa\x7a\xf6\x54\xaf\x8e\x5b\x21\xe3\xba\x0a\x8a\x0f\xb6\x0d\x17\xe9\xad\xc0\xe7\x66\xd9\xa9\x0b\xc0\x07\x31\x42\xda\xce\xd7\xb0\x0a\x91\xc0\x4a\xad\xea\x4d\xca\x62\x2a\xa3\x88\xf4\x0d\x14\xc8\x0e\xd0\xbd\xed\xd4\x2f\xc2\x23\xe4\x75\xbd\x4a\xb7\x72\x96\xb8\x93\x44\x87\x13\x6f\x7b\xf3\x38\x0a\xd4\x06\xd6\x60\x51\x98\xe8\x8d\x40\x04\x4a\xe1\xd5\xda\x3c\x9d\xaa\xbe\x6e\xe0\xb8\x68\x25\x26\xf2\xe3\x80\x35\x86\x5c\xe3\xaa\xc8\x10\xc2\xb8\x09\xe8\x76\xc4\x99\x4d\xb7\x33\xd9\x43\x8b\xa5\x77\x8c\x31\xa1\x2b\x5e\x93\xb9\xe8\x96\x27\xaa\xee\x5a\x1e\xab\x8f\x4b\x33\xa3\x13\x74\xa6\x8a\xdc\xc9\xcb\x74\x52\x4f\x39\xe6\x94\xc2\x64\x88\xf0\x49\x02\xc8\x98\x67\xaf\xae\xca\x3e\xd5\x79\x2e\x07\x1d\x49\x78\x3d\x8a\x19\x23\xc3\xad\x41\x01\xa5\xdc\x7b\xa6\xe6\xec\xa4\x56\x8a\xcc\x04\x6b\xdc\x81\xb5\x61\xeb\xf1\xaa\x83\x06\xf6\x25\x86\x75\xa3\xaa\xd8\x63\x27\xa8\x80\x2a\xd7\xba\x0b\xbf\xc8\x6d\xa3\x10\xec\xfc\x4c\x1c\xa3\xc3\x56\x2e\x57\x27\x2a\x94\x71\xbb\x68\x25\xc6\xe3\x76\x58\x06\x2d\xdf\xe4\x0a\x0a\xa1\xee\xa0\x6e\xaf\xcc\x6c\x3c\x5a\xe7\x5d\x35\x2b\x35\x59\x90\x58\xf7\xd4\x01\x60\x1d\x5c\x04\xc8\x84\x1d\x1c\xd5\xc5\x26\x24\x72\xda\x03\xf3\x74\x44\x3c\xb9\xd8\xb6\x90\x59\x50\x15\x9e\xa5\x9c\x3b\x69\xa4\x66\x26\xe2\x79\xf4\x34\xf7\x5b\x81\xcf\xcd\xf2\xdd\x17\xc8\x2e\x36\xbd\x75\x70\x0a\xbd\xcb\xb8\x2e\x7d\x55\x89\x0d\xb0\xc0\x65\xc0\x09\xb1\x3a\x43\x6b\xea\xec\x56\xc5\x30\x67\xa7\x2d\x9f\xd9\x5e\xc5\x37\x32\xde\xe2\x3e\xd6\xc2\x79\xe3\x19\x13\xed\xca\x5c\xba\xd5\x93\xdd\x42\xcd\x40\x50\x3b\xeb\xe3\x54\x53\x44\xd7\xfa\x74\x43\xb6\xb1\x5e\x95\x48\x54\xd2\xea\x31\x5a\x20\xbe\x8f\x75\xb5\xe3\xf4\x70\x1b\x53\x16\x88\x80\x4e\xda\x08\x6d\xc6\x49\x56\xb8\xaa\x78\xae\xbe\xca\x90\x2f\x3a\x68\x04\x9a\xb8\xe4\xaa\x35\x98\x53\x89\x55\xc9\x13\xa7\x73\x37\x70\x1f\xb9\x70\xd3\xac\xde\x5b\x80\x7d\x21\xa2\xfa\xe9\xd7\xcd\xe1\xbe\x80\x8b\xf6\x64\x49\x01\xb3\xa1\xc1\x46\x27\xc2\x93\x43\xd9\xc7\x8c\x4e\xc5\x48\xc3\x7a\xae\x04\x4f\x63\x19\x91\x31\x6b\x69\x40\xc2\x4e\x2c\xea\xaa\x5f\xe7\xc8\x7c\x69\x68\xe8\x25\x2c\x71\x6b\x31\x28\x33\x0e\x2b\xdd\x76\x06\x46\x43\x30\x78\x2d\xaa\xd4\x0c\x38\x64\x3c\xb7\x03\xed\x5a\x5f\x95\xfa\x3e\xa4\x9f\xda\x1f\x9d\x7b\x89\x3d\xa6\x28\x90\x35\x42\x1e\x62\x85\xeb\x21\x5d\x83\x11\xae\xc7\xc1\x7b\x72\x2d\xd9\xe6\x24\x93\x25\x5c\xb4\x92\x65\x4a\x46\x49\x2c\xd3\x81\x10\x56\x00\x5d\x39\x49\x08\xc9\x12\x9a\x11\xc1\x87\xeb\x4e\xd1\x40\x81\x9e\x4d\xcd\x7a\xa2\x13\xda\xed\x56\xe0\x73\xb3\x0a\xda\x05\xe0\xa3\x86\x45\x5d\x9d\xcc\x3a\x01\xe2\x69\x6d\x9d\xda\xe9\x0e\xc9\x5e\x8d\x6d\x7a\x59\xce\x85\x33\xa1\x16\xd8\x95\x02\x61\x23\xce\xea\xe5\xaa\xcf\xfb\xac\xd9\x04\x88\x04\x21\xce\x4a\x68\x52\xdc\xe8\xee\x1c\x23\x8d\x4b\x52\xd6\xb5\x79\xb5\x22\x6a\x14\x83\x94\xcf\x61\xcb\x72\x03\x7a\xff\x4f\x66\x83\xa2\xe4\xb3\x76\x4a\x02\xb0\xb7\xdc\xe4\x55\x4b\xa9\x8f\x13\xb7\x1c\xdc\x36\x7d\x89\xf6\xd4\xd1\x23\x2c\x15\x98\x7b\x3b\xec\x5c\x2e\xaa\x00\x92\xe5\x20\x52\x4c\x47\x4b\x62\x18\xa1\x43\x50\x2c\x3d\x83\x64\xc6\x66\xc8\x31\xd6\xb1\x9c\xfe\xc4\x7b\xdb\xe0\x7a\xec\xa0\x79\x84\xf5\x45\x9f\x37\xa5\xbc\xf3\xae\x39\x94\xd9\xb9\x59\xc2\xb2\x78\x30\x17\x2e\x6c\x4a\x42\xf0\x5c\x13\x90\x44\xac\x11\x03\xba\xd9\x7d\xc0\xbd\xe9\x78\x55\x7e\xc3\xe7\xb5\xba\x19\xc2\x99\x0e\xbb\x70\x51\xc5\xd9\xfa\x66\x19\x39\x8d\x3c\xfc\x89\x05\x4d\x1a\x2f\x2e\x24\xdf\x88\x8b\xd4\x12\x39\x2e\x4a\x7d\x53\x05\x4a\xf4\x55\x0d\x2e\x75\x09\xf6\xc8\xfb\x56\xf7\xea\xb6\x75\x08\xa0\x8b\x28\xba\xad\xa4\x83\x84\x51\xc3\x07\x64\x21\x13\x1f\xaf\xe2\xa5\xc6\x13\xbf\x44\xdc\x41\xd4\xae\xc3\xe4\xb4\xc2\x5d\x25\x89\x01\x9e\x10\x42\x97\xcc\x7a\xb6\x31\x63\xef\xa2\x7b\x33\x82\x48\xe3\xd6\xe0\x73\xb3\x9a\xfc\x05\xe0\x63\x2a\xcc\xeb\x79\xa2\x65\xb7\x3b\xb4\x3e\xe4\x74\xc6\xae\xdb\x04\x2a\xd8\x26\xd3\x2a\x74\xa6\xa7\xc2\x2b\x16\xdc\xa0\xcd\xc2\x3c\x2f\xaa\x1d\x50\x39\x32\x2e\x3c\xb9\x58\xcd\x3c\x22\x45\x8c\x72\x2d\x0f\x50\xa0\x67\x83\xc3\xcd\x85\x61\xe0\x82\xc9\x5e\xd7\xd3\x2e\x04\x9b\x01\xae\x3a\xf2\x9d\x1f\x8e\x54\xaa\xe5\xd9\x6b\x81\x07\x99\x71\x01\xd8\x9d\x73\x2f\x3a\x8d\x5c\xc2\x52\xba\x8c\x80\x41\xde\xce\x65\xed\x09\x0a\x73\x95\x14\x75\x61\xa7\x04\xcc\x6d\xa9\x7b\x61\xb1\x36\x28\xc9\x56\x7c\x50\x74\x6b\x88\xf2\x8a\xcf\x4c\xd3\xce\x18\x90\xf0\xb0\x54\x64\xba\x98\xab\x24\x46\x59\x3a\xab\x61\x63\x0c\xc6\x0e\x32\x42\xae\x20\xbb\x86\x0a\x5c\x38\xf6\xde\xca\x9e\x7b\xd9\x2b\x20\xd6\x17\x31\xf5\xe8\xe7\xd4\x17\xa5\x79\xa9\xe1\x13\x59\x98\xea\x59\x11\x9f\x3a\x21\xea\x03\x04\x2d\x41\xca\x93\x90\xc8\x36\xcd\xc0\x54\xe6\xc8\x85\x80\x75\x23\x95\x31\x75\x51\xce\x87\x0e\xcd\x71\x8e\xae\x1c\xbc\x69\x4d\xb6\xec\x66\x3e\x37\x90\x73\xeb\x83\x06\xe5\xd0\x71\x8c\xda\x9d\x82\x34\x0d\xe4\xec\x32\xf8\xb8\xaa\xee\x06\x51\x97\x43\x32\x25\x38\x00\xdc\xe0\x69\xb6\x21\x61\x6b\x72\x86\xd1\x9a\x55\x01\x6e\x0a\xea\x9c\xf3\x76\xd4\x63\x25\x89\xc4\xf8\x7f\x53\x88\xbf\x32\x5b\xfd\xeb\x9f\xf8\xb9\x47\x3e\xf5\x95\xef\x78\xc1\x78\xe0\xa3\x1f\xf1\xf0\x7b\x7e\xfb\x6d\x7f\xf4\x07\x3f\xe5\x8e\x1f\x78\xdd\xe7\x3e\xf2\xa1\x8f\xff\xc8\xee\xef\x5f\x3e\xf6\x6f\x98\xad\xee\xec\x3f\xe5\x73\x5e\xf6\xf8\xaf\x7e\xe0\x27\x3c\xf4\xdb\x7f\xe1\xd3\x3e\xf2\x2b\x59\x37\xef\x62\xb7\xff\xd5\xaf\xbc\xd7\x43\xde\x24\x7e\xe2\x5f\xbd\xfc\x05\x8f\xbe\x21\xf4\x6b\xcb\x43\x1f\xfb\xf2\xf7\xac\x6f\x7f\xf8\x13\x7f\xf7\xab\x7f\xfb\x9d\xcf\xbd\xdf\xf1\xec\xbf\xff\xda\x17\x7e\xda\x63\xe1\x2f\xbe\x26\x3c\xee\x87\xbe\x94\x3e\xf7\xc6\x57\xfc\xce\x72\x87\x4f\x78\xcc\xeb\x7e\xf7\x4f\x3e\xf7\xf1\xcb\xdd\x1e\xf8\x4b\x77\xff\xc4\xbf\xb8\xf7\xb7\xa1\x57\x3d\xc8\x7e\x76\x7a\xd8\x7b\xee\xfe\xf4\x2f\xff\x85\x1b\x42\xef\xf7\xa8\xa7\x7d\xc6\xa7\xfd\x2f\x9f\xf4\x63\x4f\xfb\xef\xff\xfc\x6f\xfd\x93\xbf\xe5\xff\xf0\xb1\xff\xe0\xb7\x96\xef\xbe\xdb\x17\xff\xea\x6d\xe5\xbd\xee\xf5\x72\xf6\xc2\xe7\xdc\x10\xda\xbf\xe8\xa5\xf4\x76\x2f\xff\xdc\x6f\xf9\x89\x47\xbd\x7d\xff\xd8\xf7\x7e\xff\xfb\xfe\xec\x4b\x1e\xf6\xdc\x87\x7c\xc9\x43\x7e\xe4\x7e\x7f\xf4\x02\xff\xd2\x7f\xf5\xe6\xd7\xde\x10\xfa\x8c\x77\x3c\xe8\x8b\xee\xff\x5b\xff\xf0\xab\xff\xe0\x6b\xe3\x67\x3e\xe9\xe3\x1e\xf6\x1f\x7e\xf8\x73\x7f\xfb\x97\x5f\xfd\xbc\xf7\xff\xff\xbe\xee\x5b\x5f\x72\xff\x8f\xf9\xe9\x57\xfd\xe7\x1b\x42\xbf\xfd\xe7\xfe\xcf\x7b\x70\xf0\x0b\x77\x54\x1f\xfe\x2f\x9f\xfc\x63\x5f\xf5\x92\xfb\x7c\xf1\x97\x7d\xf1\xd7\xdf\xbd\xbc\xfa\xcf\xde\xfe\x03\x1f\xf8\xf3\x37\xfd\xe6\xef\x99\x1b\x42\x0b\xf9\xc9\x5f\x7c\xe2\x1b\x1e\xfd\xf7\xd6\x47\x7c\xc6\x9d\xbf\xfa\x45\xbf\xff\xd4\x1f\x05\x1f\x2f\x9f\x7e\xcf\x07\xfc\xe8\x43\x5e\xf5\x17\xe2\xe3\xbf\xe2\xc1\xef\xfc\x6b\xb3\xd5\xcd\x76\xf5\x0a\xbf\x83\xd1\x0e\x29\xcd\xc5\x9a\xc5\x4a\x88\x17\x3a\x4d\x92\x3b\xa8\xac\xfb\x10\x0b\x14\x7d\xb8\xc4\xd7\xbe\xad\xf6\xe4\xab\xda\xff\x2f\x1b\xe5\x15\xda\x77\xc7\x40\xc0\xd4\x16\x02\x4e\x7b\xec\xc4\xa2\xa9\x1a\xa5\x69\xa7\x63\x9a\xe3\xa4\xc3\xb6\xb4\x36\x49\x36\x82\xec\x6a\x03\x87\xc5\x5f\x74\x9e\x62\x51\x6a\x9d\x82\x47\xcf\xc9\x79\xda\x80\x0d\x3a\x79\x09\xfc\xc4\x1b\x93\xc4\xc0\x0d\x44\xe8\x7d\xc3\xd3\xc8\xb3\x1b\xe3\x98\xb9\xea\x64\xef\xac\xa1\x66\xe9\xf0\x7a\x4d\x48\x22\x3a\x0e\x80\x0e\x54\x79\x69\x64\x22\x47\x0f\xd8\x41\x0d\x6e\x19\xd5\x1d\xdd\x4b\x18\xf7\xe5\xaa\x95\x24\x9d\x0c\x84\x16\xf8\x03\xb1\x45\x04\x66\x19\xaa\x53\xc8\x99\x6d\x21\xe9\x90\x29\x25\xba\x1c\x82\x5b\x51\x43\x67\xe7\xac\x7a\xb9\x8a\xf4\x9d\xbb\x51\x2b\x25\xc6\x78\xa4\x69\x11\x2c\xc9\x5b\x18\x67\xa7\x01\x4d\x56\xc5\x44\x8e\x98\xd8\x44\x5e\x8e\x84\x77\x03\x97\x88\xd9\x45\x45\x72\xc2\x01\x97\x54\xf6\xdd\xc0\x2d\x74\x12\x56\xb4\xec\x0a\x28\x39\xd2\x92\x53\x4b\x50\xad\xa3\x2b\x19\x23\xb5\x67\x1b\x63\x06\x84\x26\xbb\x68\x4f\x52\xf3\x78\x4a\x60\x8e\x7c\xae\x2d\xf3\xc5\x62\x8d\xca\x1e\xbd\x20\x98\x50\xc2\x0c\x5b\xe4\x32\x41\x38\x31\x3d\x4b\x2e\xa6\xa9\x31\x6f\x45\x3f\x6f\x86\xd3\x17\x64\xfd\xc3\x79\xb0\x92\xe1\x69\xf0\x38\x8d\x1a\x44\xb7\x63\x4f\x18\xe2\xdc\x44\x94\x2e\xd4\x83\x77\x59\x2b\x88\x96\x83\xb3\xe3\x5d\xa9\x99\xae\xb2\x38\x01\x89\x18\x54\x0b\x89\x86\x6b\x72\x02\xae\x8c\x5c\x65\xec\x44\xe2\x8c\x10\xd6\x9c\x08\x5f\xb4\x9b\xb9\x2c\x7b\x9d\x1b\x26\x97\x7d\x54\x6c\xe1\xab\x4b\x06\xa6\xd4\xd6\x31\xec\x10\x64\x03\xc0\xe8\xe9\x4f\xce\x0f\xc1\xcb\xbe\x1a\xcf\x20\xb7\x49\xb9\x71\xac\x98\x31\x7a\x15\x0c\x9a\x6d\x9b\xcd\x1c\x9c\x60\x22\x73\xb6\x46\xf7\x8d\x7a\x9b\x02\x0f\xd6\x94\xa3\xc7\x44\x5b\x84\x87\x52\xe6\x98\x3d\x20\xd7\xd3\x65\x85\x3e\x40\x56\xd7\xce\xa4\x3c\xa2\x88\xa7\x44\x80\x1c\xb0\x93\xcd\xc4\x12\xf6\x5d\x8c\xdd\x63\x8c\x89\xdf\x24\x5e\x17\x81\x8e\xc2\xf7\xed\x2a\x53\x5e\x97\x9d\x1d\x67\xdd\x67\x38\x53\x07\xe0\x50\xae\xa5\xca\x3c\x5e\x89\x66\xfc\xa0\x7c\xdd\x44\xc1\x5b\xdf\xba\x09\x92\x1d\x50\xf7\x71\x95\xe2\xf4\x9b\x5b\x34\xdc\xbc\x3d\x73\x05\xc7\x96\xed\xba\x66\xee\x5c\xb5\x24\x6b\x66\xf1\xca\xb6\x06\x24\x8b\x2a\x1f\xbb\x96\x2d\x48\x32\xc6\x55\x05\xe1\x13\x30\xb2\x73\xc5\x17\x79\x74\x61\x78\xd6\xd2\x11\x55\x55\x13\xca\x11\x6f\xf5\xe0\x93\xe6\x6a\x6c\x57\x9d\x25\x9b\xcb\x6a\xf2\xad\xc0\xe7\x66\xcc\xef\x02\xe6\x83\x79\x9a\x98\xbb\x74\x76\xda\xa8\x82\x42\xf5\x83\xb4\xe8\xf9\x2d\x2a\x13\x6d\x50\x51\x85\x3d\xb2\x1b\xd2\x8e\x41\xb0\x5b\xd6\xcd\x55\x15\x75\xee\x09\x18\x66\x29\xbc\xf2\x0a\x76\x33\xb1\xd4\x31\x33\x69\x14\x71\x9b\x64\x1b\x42\x8e\x82\xfd\x18\x7c\xfb\x50\x8b\x49\xa8\xdb\x55\x75\x6c\x9a\x1a\x39\xea\xae\x2c\x59\xcf\xb4\x73\x65\x42\x31\xc0\xd5\x4c\x22\x63\xe3\xd8\xfb\x1a\x29\x50\xdd\xb3\x73\x80\x45\xe2\x99\x41\xba\x0a\x06\xe9\xcc\x3a\x2a\xb5\xf8\xf3\x9c\x94\x4b\xcd\x60\xd3\xc0\x78\xe1\x54\xe3\xdd\x6e\x76\x81\x1b\x71\x6a\x51\x29\x2d\xf9\x0c\x6a\x74\x08\xae\xd2\xbe\xf4\x38\x80\x68\xb8\x4a\xb9\x09\x7c\xd4\x55\x38\xb0\xb7\xda\x06\x26\xd5\xcb\x53\x16\x13\x12\x45\x2b\x08\xaa\xcb\x04\x06\xe9\xc7\x65\x96\xea\x5d\xb6\xc5\xee\x0d\x0e\x56\x97\x14\x92\x55\x8a\xca\x11\xfb\x4a\x99\x6c\x90\x60\x88\x03\xef\xfb\x40\x9c\x00\x2d\x7b\x12\x61\x21\x17\x39\x74\x08\x81\x99\x78\x53\x92\x54\x87\xdb\xd8\x88\xb1\xb1\xd4\x8c\x99\x1e\x48\x23\x51\x2e\x7b\xd8\x9a\x3e\x47\x6b\x70\x01\x87\x1d\x1d\x92\xab\x92\x91\xeb\xca\x28\x2a\x70\x47\x0d\xe7\x93\xea\xc8\x93\xa3\x61\x1c\xc0\x64\x32\x23\xe6\x28\x59\xc5\xd7\x7a\x56\x21\x06\x3d\xf0\xd2\x52\xb9\x75\xc9\xf1\x66\x5a\xf2\x02\xe6\xe3\x60\xdc\x56\x49\x98\x4e\x8b\x4a\x65\xd1\xc4\xcf\x32\xa8\x5d\x17\xbb\x69\x38\xf3\xee\xc3\x0c\x75\x97\xb7\x48\xf5\x0d\x41\x09\xd5\x55\xb2\x8b\xf8\x0d\x6b\x02\xcf\xa8\xa9\x3d\x60\xa5\x72\x0d\xd3\x82\xb0\x6e\xa2\x8a\xd6\xcf\x9c\xb4\xd7\x98\x0a\x0a\xb5\x31\x20\x35\xe9\x12\xb9\x8a\xc4\xc6\x75\x4b\x34\x06\x55\xfa\x28\x02\x6f\x86\x45\xb2\xe0\x1a\x05\x51\x93\x4e\x2b\x0a\xcc\xa7\x15\x61\x16\x49\xfb\x0a\x49\xa2\x0b\xb9\xe8\xa0\x51\xbe\xc7\xb4\x9f\x4e\xd9\x16\x7d\x56\x67\x67\x82\xa4\x62\xc8\xae\x88\x6c\x48\x80\x3d\xaf\x1b\x24\xb1\x5a\xbb\xcf\x10\x0f\x62\xa5\xbe\xaa\xef\xa7\xc9\x45\x83\x34\x86\x3e\xd0\x3c\x30\xf7\x12\x2e\xc3\x8b\x50\xf6\x9d\x47\x13\x59\x92\xda\xef\x7e\x25\x48\xef\x8a\x04\x5f\x32\xa7\x57\xf9\x2b\x77\x8f\x35\x3e\xb2\x95\xac\x4c\xcd\xe6\xd2\xfd\xde\x49\x57\x2c\x14\x98\x30\x34\xe1\x98\x67\x61\xbe\xda\xaa\xfb\x92\x91\xeb\x70\x5e\xc4\x7c\x28\x9f\x63\x18\x82\xfd\xac\x29\x6c\x96\x19\x74\x32\x36\x65\x6b\x22\xae\x5d\x69\xe5\x1a\xe0\x99\xe3\x1e\x17\x1d\xf0\xf2\x21\x82\x78\x95\xfb\x95\xd2\xd3\xb6\xed\xdc\x69\xac\x62\x13\x6b\x2d\xa4\x34\xe4\x46\x15\xfb\x9c\x40\xf2\xe6\x27\x1b\x88\x18\x44\x4e\x01\x70\x3b\xd2\xbe\x81\x5b\x81\xcf\xcd\xb2\x53\x17\x30\x9f\xd3\x27\x86\xab\xd4\x50\x4c\x7f\x6c\xcd\xd7\x14\x94\x39\x7c\x64\x4a\xee\xa0\xc5\x43\x38\x38\x9b\x46\x0d\x18\x9f\xa1\x3c\x8f\x53\x5f\x45\x1d\x23\x20\x1a\x92\xb9\x89\xdd\xd9\x63\xec\x7b\x74\x2b\x07\xdc\x9e\x80\x85\x53\x39\x3b\x76\x9c\x26\xec\x45\xc9\x68\x0e\xef\x1d\x3d\xd5\x65\x9e\x53\x2f\x10\x57\xfb\x92\x4f\xdb\xd9\x41\xa0\x6d\xb9\xe4\xca\x8a\xb3\xda\x49\xea\x94\x88\x9d\x83\x23\x07\xeb\xc3\x41\x5c\xe0\x27\xbd\x0a\x06\x91\xcd\xc3\xef\x84\xc7\x0a\x0d\x63\x60\x4d\x66\x15\xac\xca\x36\xfb\xb6\xc4\xb0\x12\x8b\x65\xc9\xd5\xc9\x40\x9b\xe2\x71\xdd\xf9\x76\x91\xcb\x80\x1c\x16\xb5\x3c\x4f\xd3\x0f\x03\x80\x65\xde\x62\x52\xba\x5b\xc8\xb6\xa3\xb8\x6b\xb5\x96\x1e\x2d\xae\x9e\xee\x43\xa8\x90\x2c\xf8\xbf\x5e\x53\xbd\x84\x21\x2f\x5d\x93\x1c\x07\x58\xca\x62\x3b\xcb\x1d\x71\x66\x28\x3a\x87\xd7\x3c\x6d\x8c\x64\x1d\x14\xf5\x74\xad\x39\xc2\x83\x11\x47\xae\xda\x13\x20\x0f\x4e\x86\x9d\x52\x2f\x09\x84\xb0\xf6\x8c\x4c\x28\xa8\x0a\xdb\xa6\x04\xfb\x82\xc7\x94\xb4\x8c\x65\x59\x41\x11\x63\xa3\x8b\xba\xaa\x39\x15\xc3\xb3\xb7\x75\x9c\xf3\x30\x40\xb2\x1d\x1a\x34\x37\x22\x0c\xea\x3b\xaa\xd2\xb3\x84\x24\xe4\x39\x50\x32\x22\x65\xa7\x5a\x50\xb0\xe6\x56\xe0\x73\xb3\x7c\xf7\x05\xe0\x13\x0f\xb1\x59\xc0\x05\xb4\xf0\x50\xf0\xb0\x3d\xf2\x4e\x66\x9d\x94\x75\x7a\x62\x33\x52\x36\x22\xc1\x11\x6c\x5a\xdc\x5c\xac\x86\x97\x6d\x60\x10\xa2\x86\xc1\x34\x6c\x6e\x1f\x5b\xed\xb4\xd4\x73\x28\x99\x77\xd1\xda\x06\x17\x06\x22\xdd\x01\x37\x2d\x7a\x35\xc5\x8a\x93\xb3\x57\xc9\xae\xa5\xe7\xc5\x77\x37\x70\x96\xdc\x4d\xd1\x74\x8f\x4e\x15\x72\x22\x67\x74\x9e\xd8\x35\x8d\xf6\x7a\x50\x65\xe6\xc4\x7e\x01\x01\x2f\xe4\xaa\x94\x26\xdc\x98\xc4\xe6\xec\xd5\xb5\x30\x23\xd2\x2b\x5e\x96\x8e\xb6\x26\x6c\xd3\x31\x97\x50\xe8\x19\xd6\x3a\xe3\x76\x32\x0f\xa5\xde\xb7\x8b\xdc\x28\x44\x9c\x1c\x4a\xac\x1c\xc5\x04\x2f\xf6\x98\x1b\x57\xfc\xd4\x27\x95\xbb\xab\x66\x5b\xc7\xda\xa4\x68\xe5\x74\x86\x29\x28\x64\xeb\xf8\x32\xa7\xe7\x8a\x7b\x26\x47\x8f\xd9\x30\x25\xd6\x9a\x0f\x81\x47\xe3\x46\xb2\x36\x17\xb0\x45\x90\x20\xa5\x95\x14\x1e\x09\xd6\x2e\x57\x53\x13\xbd\xca\x17\x13\x4c\xf2\x73\x2a\x00\x25\xa4\xfb\x76\x9c\x62\xd5\x7b\x36\xfd\x9c\x00\x33\xdf\x18\x5a\x0f\x04\xfa\xb6\x6f\xa9\xa2\x8e\xb2\x8d\xe9\x2a\xd9\x75\x88\x88\x8a\x98\x21\x03\x34\x0b\x66\x43\x58\x08\x04\xea\x6c\x87\x2e\x8a\x31\xe0\x44\x88\x31\xd0\x0e\x6a\xa2\x0f\x5b\x97\x2e\xde\xba\xbb\xf7\x66\x15\xb4\x0b\x64\x17\x2f\x1a\xd4\xa9\xba\xa7\x67\xe2\x46\xc3\x8c\x35\x99\xf0\x54\xfb\x7e\x70\x97\xc7\x1e\x16\x40\x41\x59\xfa\xba\x2d\x2d\x90\x75\xb4\xab\xe8\x34\xad\x36\xe3\x60\xb9\xdb\x00\xb4\x7e\x3d\x4f\xaa\x02\x5e\xdb\x79\x82\xc3\x86\x3e\x94\xa9\x6b\x3f\x53\xf3\x73\x78\x27\x06\x6c\x5b\x37\x17\x99\xad\xa8\xd8\x77\xee\xe3\xc0\x35\x92\x7c\x0a\xaa\xdd\xb6\x03\xb8\x34\x80\x0d\xe4\x15\x84\xe4\x9b\x35\xda\x21\xb7\x2d\x71\xc7\x64\xed\xfc\x2a\xb3\x15\xf5\xbc\x48\xd5\x8b\xe1\xdc\x73\x30\xac\xaf\xdb\x91\x72\xb0\x22\x80\x6a\x67\x38\xb4\x4f\x79\x3d\x4c\x07\x6d\xa7\x5b\x2d\x3e\xe9\xab\x9a\x00\x28\x3a\x9c\x37\xd9\xa5\x45\x38\xbb\xcf\xaa\x8e\xdc\x44\xef\xad\x87\x52\xe3\x84\xfb\xe2\x8c\x82\x9e\xc2\xb2\x05\x7d\x36\x04\xd9\x60\x17\x65\x9f\x48\x59\x03\x19\xa9\xf9\x41\x96\x7d\x17\x1c\x04\x9f\x79\x47\x44\xd6\x5d\xaa\x1a\x84\x15\x46\xb9\xb6\x21\xce\x8a\x94\x7c\xcf\x20\x91\xab\xfa\x8c\xb9\xa3\x25\xa9\x48\x17\x84\xcc\x8c\xa6\xb7\x0e\x38\xce\xea\x54\x74\x74\xd0\x97\x3e\x05\x9e\xc9\x19\xdc\x57\xe9\x16\xa6\xa0\xa1\x57\xed\x89\x39\x59\x2e\x7b\xc4\x4e\xec\xda\x96\xbc\x39\xb9\xa6\x4c\x0a\xdc\x5d\xe0\xc0\xb9\xa5\xb2\x21\x97\xd8\x5c\x53\xb4\xea\xca\xcf\x78\x83\x15\xee\xaf\xc0\xe7\x66\x35\xf9\x0b\xc0\xa7\xaa\x72\xae\xae\x62\xab\xc8\x36\x30\x10\x4b\x4d\xc6\xaa\xb8\x08\xe7\xa9\xe4\x95\xa3\xc6\x6b\x80\x25\x9c\x6c\x06\xa2\x15\xa8\xea\xaa\xcf\x3b\xf5\xce\x27\x26\x8c\x30\x8e\x5a\xf6\xdb\x6a\x62\xc0\x3b\x5e\x83\x93\x0d\xae\x71\x8d\x82\x24\x31\x29\xd4\x44\x8c\xb9\xfb\x3d\xce\xab\x8a\xb9\xb1\x81\x8e\x57\x5b\x30\xde\xb3\x6f\x32\x6c\x41\xef\x0d\x8f\xb4\xb2\x73\x1b\x03\x42\xc9\x8e\xcc\x3b\x75\x75\xb8\xd8\x0a\x50\xec\x2a\xc3\x3b\xb1\xbb\x07\x5c\x25\x86\x8c\x07\x64\x5f\xf2\xb6\x4b\xd4\x89\x59\x16\xbb\x41\x9d\x5c\x62\x07\xa8\x28\x11\xb7\xc8\xd5\xa7\x76\x50\xa0\xae\x4a\x38\xb7\xad\xa5\xb4\x9a\x5d\x50\xeb\x24\x50\xba\xed\x74\x94\xa2\x1d\x3f\x43\x06\xa4\x09\x83\x1d\x2b\x67\x73\x5d\xf9\xd3\x69\xbb\x1d\xe3\x2a\xeb\x3d\x09\x3e\x0c\x22\x2b\xdb\x4f\x76\xcc\xc3\x38\xab\x10\xdd\x8c\x50\x24\x26\x23\x6b\x19\x24\xb9\x2c\x95\x39\x3d\xb0\x0e\xbb\x4d\xe4\xab\x8e\xbc\xef\xd2\xad\x90\x4b\xe4\x33\x9a\x5e\xfa\xa8\x0e\xbb\x2f\x86\xb2\x03\x6e\x70\xe5\xcb\xe0\x52\xf0\x94\xd6\x11\x7d\xd6\xd8\x8b\x72\x15\xf8\xd0\xb8\x78\x5e\x12\x90\xdd\xb3\x4c\x18\x85\x8b\xc4\xad\x42\x35\x28\x29\xd8\xb1\x4d\x4d\xe6\x0f\x3d\x84\x3f\xc9\x46\x07\xdc\xd5\x11\xed\xad\xcc\x56\xaf\xfc\x86\x5f\x7e\xe3\x9f\x7f\xd3\xd7\xdf\xe7\x3b\xbf\xf4\xae\xbf\xfc\xee\xdb\xff\x97\x87\xfd\xc0\x63\xc3\x6b\x9f\xf5\xd2\xfb\xbf\xef\x8f\xff\xd7\x77\xfc\xc5\x47\xbf\xff\xcd\xcf\xfa\x1b\x66\xab\xbf\xfb\x9e\x6f\x7b\xc0\xd7\xbe\xfe\x31\xbf\xfd\x59\xdf\x10\x3e\x9d\x7c\xc4\xef\xde\xf3\x36\xfa\x47\xde\x9e\xff\xe4\x19\xdf\xfb\xe2\x17\x3f\xee\x75\xe1\x11\x77\xbc\x71\xb2\xd5\xc7\x3e\x78\x79\xec\x7b\xbe\xf4\xcd\x9f\xfa\xb5\xdf\xf3\x4a\xf5\xcc\x97\xfc\xcc\xdd\x5e\xff\x31\x77\xce\xef\x7b\xc9\xfc\xfd\x3f\xfa\x8b\xbb\x3e\xfa\x4b\x3e\xf8\xde\x1b\x6d\x51\xfc\x57\x1e\xe4\x5e\xff\xad\xea\x3b\xff\xd7\x2f\xbb\xcd\x9b\xdf\x4b\xfe\xc5\x77\xbb\x07\x7e\xe6\x4f\x7e\xc4\xd7\x7c\xc6\x2f\xbe\xe7\x9b\xde\x36\xfe\xe0\x6d\x5f\xf3\x25\x37\x84\xbe\xf6\xe5\xdf\xfb\xcd\xef\x79\xf7\x4f\xfd\xe3\xef\x0e\xef\x7c\xf1\x93\x5e\xf3\xc2\x1f\x7c\xee\x13\xbe\xf9\x9f\xbd\x01\x7c\xca\x7d\xca\x3f\x79\xe2\x33\x7e\xeb\x0b\x1e\xf4\xbb\x37\x84\x7e\xa0\xdf\xfb\x8b\xbe\x73\x7d\xe6\x1b\x9f\xfb\xd9\x3f\xf5\x80\xf2\x11\xaf\xfe\xfe\x3b\xf0\x87\xde\xeb\xe5\x4f\xde\xee\xf4\xd1\x0f\x7e\xc4\xfb\xfe\xe2\x89\x3f\xfe\xfb\x37\x84\x7e\xc2\x3d\x5e\xf4\xf7\xef\xf4\x99\xaf\x7d\xeb\xcf\x7f\xcf\x27\xfe\xd9\xab\x9e\xf5\xea\xcf\x7b\xe0\x5d\xcb\x5b\xfe\xc5\x5b\x4e\xf3\x94\x27\xfe\xf8\x63\xbf\xf4\xcf\x7e\xea\x0e\x37\x84\xba\x67\xfd\xd1\xa7\xfd\xeb\xdb\x3e\xe0\xb9\xff\xee\x07\x1e\xf8\xa7\xf7\x7e\xc5\x5b\x5f\xf1\xc9\xff\x9f\xf7\xfe\xdc\xaf\xbc\xec\x11\x3f\xf4\x82\x17\xbd\xf0\xfb\x3e\xfd\xdf\xbc\xf1\x46\x63\xd8\x0f\xdd\xf3\x41\xff\xe8\x37\x9f\xf9\xe2\xf4\x70\xf3\x6b\x1f\x38\x05\xfc\xdf\xfe\xe9\x27\xbf\xed\x73\x9f\x7a\xc7\x7b\x7d\xc3\xb7\xff\xdb\xaf\xf8\xb5\xaf\xbc\xe7\xf9\x49\x7f\x6d\xb6\xba\xd9\xae\x5e\xa0\x7d\x39\xe6\x70\x5d\xe0\x86\x51\x75\xd5\xb7\x9d\xdb\x9d\x7b\x0f\xcc\x76\x6e\x51\x19\x6f\x4b\x91\xb2\x9b\x4c\x8e\x6c\xd6\xa8\xa7\x1b\xf1\x2a\xd2\x17\x3d\xa4\xc6\x56\x6f\xf2\x09\x4e\x40\x31\x06\x9c\x60\x9c\x00\x8c\x29\xaa\x98\x11\x1f\x64\xc7\x3c\xdb\xa3\xbb\x65\x6b\xb4\x53\x7a\x95\xe2\x9c\xaa\xab\xb0\x67\x44\x37\x9e\xba\x85\x7e\x16\xb6\x02\xd6\x7b\x88\xb9\x2b\xad\x04\x35\x05\x74\x3a\x7a\xac\xfd\x5c\x24\xb4\x17\xd6\x1f\x8a\xca\x25\x35\x4b\xfa\xd1\xa7\x4c\xd2\xe9\xa9\xc6\x98\x30\x6e\x65\xe3\x18\xd9\xb8\x9d\x9d\x36\x60\xbd\x19\x93\xa8\xb0\x82\xab\x70\x97\xfa\xa5\x94\xe6\xed\xb1\x96\xa3\x48\xb3\x76\x60\x17\xa9\xd6\x20\xf4\x7a\x04\x3c\x7d\xe7\xcc\x92\x15\x80\xe5\x16\x3a\xae\xfb\x96\xd0\x72\x55\xc9\x71\x39\xd9\xb6\x1c\x18\x4c\xca\x2c\x4c\x34\x79\xc6\xe2\xc9\x98\xa8\x40\x86\x5e\xfc\x69\xec\x69\xcf\x2e\x53\xb1\x7b\x58\x24\x28\xa7\xbd\x4a\xfb\x96\x03\x20\x21\x17\xda\x48\x4a\x7a\x15\x2b\x27\x74\x65\x62\x41\x63\x85\xdd\x02\xb7\x6e\x02\x2e\xb3\x4b\x70\x90\xad\x95\x55\x44\x47\x2e\x5a\x09\xed\x68\xf2\x53\x2a\x2e\x38\x1a\x71\xe6\x98\x3c\xf6\x27\x9b\xda\x91\x18\xe0\xba\xf8\x25\x26\xa8\x6b\xf1\x58\x64\x1b\x2d\x2e\x67\xaa\xb7\xa2\x9f\x37\xc3\xe9\x0b\xc0\xc7\x17\x13\xf6\xa5\x27\x8d\xfd\x71\x0b\x31\xde\x55\x4b\x8b\xda\xa9\x86\xbb\xf4\xc7\x04\xcc\x2f\x60\x02\x1e\xd8\xc4\xee\x18\xab\x60\xdb\x55\x3d\x63\x4a\xe2\xe9\x24\xec\xe2\xd8\x79\xc7\x22\xaf\x60\xa6\x1c\x71\x3f\xf0\x94\x6d\xeb\x2c\x41\x31\x3c\x09\x1d\xfa\x15\x9d\x6a\xb3\xc7\xbc\xca\x79\xb1\x30\x5e\xca\xb4\xa1\xba\xc9\x39\x87\x99\xed\x6c\xe7\x5b\x10\x43\x7a\x66\xd7\xf5\x90\x7b\x25\x61\xad\x05\x87\x55\x6f\x08\x3a\x67\xae\xd2\xbe\x68\x61\x59\x0b\x35\x21\x43\x14\xce\x89\x31\x23\x16\x9c\x85\x42\x78\x90\xb9\x06\x30\x7d\x74\x67\x8c\xf4\x50\x07\xe0\xf0\x1c\x20\x5e\x95\x99\xc8\x0e\xd6\x6c\x34\xc4\x61\x21\x63\x70\x94\x55\x10\x0b\x85\x3e\x70\xa3\xe3\x04\xdc\xce\x9d\xfa\xe6\x38\xee\x9d\x9e\x7e\xdf\xcd\xb8\x8a\x6a\xa1\x7d\x1b\x59\x9c\x40\x97\x75\x51\x3b\x5c\x37\x9e\xf7\x26\x57\x28\x56\x6b\xba\x5f\x74\x09\x49\x1c\x33\x78\x17\xce\x1a\xd5\x69\x13\xbd\xaa\xb1\x79\x0d\xac\xc9\x32\xf9\x02\x1d\x57\x59\xfb\x83\x4a\xad\xe7\x98\xab\xdc\x2a\x27\x4d\xaa\x96\x9a\x6f\x3c\xe7\x2d\x41\xc5\x5a\x93\xe9\xaa\xef\x64\x06\xb8\x21\x53\x94\x54\xde\x60\x20\x0f\x84\x76\xe4\xb7\x90\xf3\x26\xbc\xb2\x12\x55\x32\xc6\x91\xba\xac\x39\x76\xbd\x91\xa1\x17\x7b\x2b\xf0\xb9\x19\xf3\xbb\xc2\x6c\x15\x9b\x36\x6b\x10\x0e\x4e\x67\x65\x28\xba\x40\x53\x83\x44\xa4\x69\x7f\x34\x21\x62\xa7\xea\xe4\xae\x60\xcc\x06\xa8\xa5\xa2\x74\xd5\x91\x9f\x67\x0d\x23\x76\xa6\x58\xa8\x5a\x43\x05\xa6\x8e\x3d\x2f\x49\xc8\x14\x99\x0b\x96\x57\x62\xc9\x3c\x21\x13\x7a\xee\x22\xce\x48\xaf\xb2\x38\x19\x2d\x87\xe2\xbb\x31\x60\x1f\xae\xf2\x83\xfa\x7d\xf1\xaa\x4a\x13\x56\x4a\xfd\x3e\x53\x17\x8b\xe9\xd4\x81\x04\x03\x3b\x41\xc3\xea\x2a\xcf\xe9\x19\xbb\x49\xc5\x2e\x94\xd0\xbd\x55\xe5\x4e\x20\x5a\xf1\x21\x26\xd2\x69\xdd\xec\xd9\x13\x80\x72\xae\x0d\x27\x6b\x15\x05\x1c\x8c\xab\x9a\x78\x41\x50\x8c\x04\xc7\x4e\x16\x67\xe6\x65\x4a\x4f\xca\xba\xac\x7b\xa9\x27\xd7\xf8\x54\xb4\x8b\x75\xb5\x28\x24\x95\x4b\xa6\x1b\x71\xf3\xaa\x7c\x80\x06\x04\xea\xed\xa4\x79\x9b\x21\xae\x67\x00\x6d\xe2\x79\x86\x0d\x17\xae\xd3\x8a\x20\x4c\x5b\xc8\x46\x05\x9f\x52\x21\x42\x2c\x30\xca\xab\xd8\xa0\x8c\x73\xfa\x35\xf2\xee\x32\xa8\x1d\x33\xbc\x14\x9d\xdd\xd9\x9b\x53\x02\xca\x04\x08\xf7\xa7\x98\x0c\x38\x21\x05\x2d\x5c\xc4\xab\xfc\x0e\x41\x9d\x8b\x52\x22\xf1\x2e\x64\x25\xd8\x70\xc0\xe4\x01\x5a\x8f\x6c\x53\x7c\xae\x9b\xdd\xd3\xa1\xa9\xe4\xeb\x62\x0c\x36\x02\x0a\xba\xde\x0a\x7c\x6e\xa6\x25\x2f\x00\x9f\x7d\xd8\xda\x4d\xa1\xd4\xe8\x70\x16\xbe\x00\x22\x2d\x85\x5c\x83\x16\x7c\x5c\xaa\xe0\x60\xa3\x6b\x33\xa8\x49\x56\x9a\x6f\x9a\x5f\x35\xa4\x8c\xd6\x45\x9b\x5b\xa4\x4c\xf2\x67\xaa\x8b\xcb\x04\xe4\x03\x82\x09\x44\xa2\x4b\x92\xa8\x81\xed\x94\xf5\xd4\x1c\x37\xdd\xb6\x7d\xf5\x71\xbb\xca\x58\xd4\x07\x53\x6b\x41\xb3\xee\xe7\x69\x34\xea\xfb\xbe\x24\x25\x88\x04\x5b\x25\x4c\x70\x59\x99\xc5\x63\xc9\x51\x0f\x8b\xa8\xd3\x82\x5d\xf5\x51\x11\xb6\x99\x46\x97\xe8\x4c\xe8\x42\x50\xa5\xa2\xf7\x58\xad\xaa\x99\x3c\xec\xe2\xf2\x96\xa8\x08\xf6\x80\x02\xd5\x59\xf5\xe1\x0c\x4b\x57\xa5\xbb\x76\x28\x03\xed\x85\x31\x64\xf7\x88\x58\xb6\x7d\xb4\x36\xec\x4c\x0c\xd2\xc8\xf6\x2d\x1e\x7b\xec\xe3\x60\x8c\xe2\x23\x56\xb9\xe8\xed\xaa\x74\x97\x5d\x74\xe0\x50\xb5\x9e\x72\x9b\x81\xa8\xea\x8e\x32\xaa\x16\x90\xb8\x75\x59\xad\x67\x3e\x34\x63\xbd\xf7\x6c\xb8\xb6\x1d\xb0\x8f\xcb\xac\xf7\x02\xe4\xbd\xed\x99\x8a\x58\x15\x94\x3b\xda\xd7\x00\x03\x8e\xc7\x81\x93\x66\x74\xf4\xad\xe3\x86\x13\x3b\x7c\x6a\x50\x86\x9e\x2e\x33\xa0\x69\x55\xe4\xe6\x8e\x58\xed\xc2\xbd\x10\x71\xa3\x75\xe6\x33\x20\x37\x95\x4f\xad\x32\xe6\xf8\x91\x88\x69\x7d\xd9\xb9\x99\xaa\x8b\x1b\x06\x25\xfc\x15\xf8\xdc\x2c\x3b\x75\x85\xd9\x2a\xa7\x3e\x03\x4c\x4a\x85\x9d\x21\x56\x17\xed\xeb\x06\x99\x5a\xfa\x42\xf9\x1c\xa0\xb6\x03\x01\x49\x66\xb1\xfa\xc4\x71\xc7\x7b\xb9\x6a\x78\xee\x3a\x4a\x68\xe4\x84\xac\x57\x72\x0a\x8e\x54\x88\x2c\xf2\x13\x4f\x34\x6a\xa2\xcc\xd4\x1d\x2b\x78\x30\x61\x92\x70\xb5\xa1\x1c\xf3\x45\x9d\x25\x94\xa8\x6d\x5f\x17\x3c\xfd\x2d\x2c\x90\xa3\x32\x47\x0a\x9b\xd9\x5c\xb4\x3b\x5b\x41\x4e\x01\x56\x79\x10\xe8\xd7\x10\xb3\x77\xab\xd3\xe6\xa2\xbb\x95\x28\x42\x02\x95\x19\x1b\x45\xb7\x2a\x3c\x07\xcc\x36\x27\xba\x1d\xb9\x36\xa8\x78\xa1\x07\x33\x01\xca\xbe\x70\xb3\x72\xe4\x49\xbe\x6c\x8c\x6f\x97\x83\x56\x0d\xd7\x00\xbc\xda\x57\x38\x00\x91\x5b\x8d\xdd\xb4\xcc\x32\x8c\x79\x3d\xdd\x8c\x11\x78\xbc\x54\x8b\xbc\xe3\xfb\x4e\xae\x1a\x42\xb4\x49\xa5\xb8\x3b\xce\x71\xee\x24\xed\xce\x6b\x57\x55\xf5\x59\xc0\xc5\x99\x35\xec\x5b\x52\xbb\x8a\x1c\xca\x1e\xe2\xce\x50\x3e\xcc\xbc\x6a\xe0\x0e\x4a\x24\xb2\x11\x95\x88\x55\xef\x3e\xac\x84\xa2\xb0\x96\x33\x82\x45\x28\x40\x26\x97\xb8\x48\x94\x73\xe5\x7c\x35\xf3\xc0\x24\x2e\x17\xed\x09\x19\xa2\xf7\x6d\x09\x63\x82\x8d\x46\xc8\xbd\xd5\xd1\x47\x83\xf9\xc6\xab\xaa\x13\x99\x24\xc9\x20\xfb\x4a\x21\xc3\xb1\x4e\x9f\xf4\x56\x6e\x05\x3e\x37\xcb\x77\x5f\xd1\xdd\xbb\xfa\x3a\x51\xd9\x8d\x47\xf1\x5c\x6d\x38\x73\x81\x81\xc5\xc1\xc3\x44\x1b\x15\x23\x24\xe8\xdb\x08\x7a\xe7\x5a\x20\x8f\x8e\x12\xaf\x6a\x26\xd3\x72\xa6\x93\xad\x71\x16\xd2\x3a\x17\x76\xdd\xf2\xe9\x24\x94\xa2\xba\xc6\x07\x70\x2e\xb7\x54\x1b\x58\xb7\xdd\x4e\x6d\xb0\xe4\xcb\x55\xc6\xa2\xb1\x2d\x36\x00\x60\xb6\x43\x65\x56\x99\x58\x4b\x8e\x65\xf1\xc7\xe9\x91\x61\x1a\xcf\x73\x58\x03\x25\xeb\x58\x22\x4c\x21\x64\x84\x5d\x35\xf3\x02\x37\x8e\x4e\x61\xd6\x8d\xf8\x39\xed\x89\xd1\x12\xc9\xe1\x86\x8d\xa7\xd7\x14\x1c\x47\xc0\xfb\x81\x97\xd4\x2c\xf6\x8c\x23\x4c\xca\x55\x3d\xb5\x84\x19\xe7\x8e\xb1\x32\x8b\x8f\x42\x0c\x3a\x37\x09\xc0\xda\xb7\x09\xd7\xae\x59\xde\x97\x83\x4d\x33\x86\x9a\x52\x9e\x79\xb6\x36\xd7\xed\xaa\x34\x2f\x48\xbb\x5b\x08\x4d\x40\xf2\x59\xdd\xa1\x57\x65\x5a\x0c\xbc\x54\xc3\x44\x66\x5b\x8e\x27\xea\xd2\xed\x38\x3b\xb8\xae\xc9\x28\x4c\xaf\x92\x5d\xe4\x08\x6a\x85\x67\x35\x2d\x03\xb2\x8d\x48\x7d\x16\xdc\xea\xb8\x5b\x9c\xad\xe6\x61\x19\x1a\x52\xe7\xf8\x31\xf6\xa5\xc5\x6d\x85\x97\x71\xb0\xb2\x14\xdf\x4a\x88\x55\x99\xac\xbd\x51\x33\xaa\xd2\x5c\xe6\x61\x98\x92\x1c\x19\xbc\x82\x6c\x57\xac\x23\x20\x24\x04\x1c\xc4\xc0\xb7\x02\x9f\x9b\x55\xd0\xae\x30\x5b\xd1\xdd\x82\xdd\x49\xd8\x69\xdf\x1c\x34\x4e\x1d\x47\x93\x1d\xc4\x02\x01\xf8\x90\x75\x26\x68\xed\x29\x5c\x3c\x85\x46\xd4\xb3\x99\xab\xb2\x0a\x10\x4c\x2b\x08\x46\x5b\x18\x6e\xe4\x88\x2b\xdc\xad\xf1\x8d\x1b\x5e\x10\x16\x4d\x8a\x7a\xc2\x53\x4e\xd2\x46\x59\x13\x2c\x85\x6f\x57\x49\x8c\x50\x78\x5e\xc1\xb1\x34\xcc\x3d\x26\xbd\xb6\xdd\x9d\xf5\xdc\x22\x6c\x8c\xc1\xdd\x41\xb1\xb3\xc5\x36\x55\x06\x04\xeb\xc9\x17\xdf\x96\xab\x86\xcb\xac\x91\x74\x42\x96\x53\x71\x42\x4e\x2b\x20\x64\xe5\xec\x05\x43\x2b\xea\x4a\x29\xf5\x4b\xf2\xea\x24\xab\x44\xda\x33\xc5\xa8\xa6\xdb\x55\x75\xb7\xd6\xc6\xc9\x58\xe0\xa3\x0d\xcc\x0c\xf2\x79\x0e\x8e\xb9\xf6\x28\x69\x37\xba\x5a\x1a\x0a\x23\xb6\x50\x25\x9c\x3b\xa4\x74\xb7\xcb\x55\x63\x7c\x8b\x75\x2a\x41\x59\xa7\x31\x3a\x8f\x2a\xb8\xd8\x35\xf6\x59\x8e\x5c\x9d\x95\xe2\x94\x4b\xc8\xea\x38\xea\x52\xab\xb0\xb6\xef\x6a\x5e\x55\x63\x02\x20\x51\xe3\x26\x2c\xbb\x20\x52\x4c\xb4\x60\x76\x30\x3f\x13\x03\xce\x43\x16\x80\x56\xad\xaf\x7a\x4b\xe0\x84\xca\xce\x58\xa4\xbd\x4a\x8a\xee\xa7\x24\xce\x88\xd9\xcd\xba\x8c\x96\x95\xdf\x45\x5e\x31\xa6\x79\x7a\xb4\x19\x17\x2c\x0c\x42\x90\x33\x1d\x2e\x27\x4c\x17\x3c\x6e\x18\x41\xf1\x57\xe0\x73\xb3\x9a\xfc\x05\xe0\xe3\x2d\xac\x31\x28\x93\xd1\x3e\x61\x60\xab\xe8\x10\x99\x09\x77\xe3\xb0\x5d\xe8\x7a\x8c\xb4\xee\x56\xe0\x92\x38\x28\x47\x14\xf4\xbc\x6a\x8a\x13\x75\xc2\xa6\x1d\x33\x6f\xab\x6e\x26\x30\xaf\x32\xb5\xae\x67\x36\x8d\x2a\x7a\x70\xb8\xa3\x30\x20\xa2\x1e\x9b\x20\xb2\xa5\x47\xde\xae\xa2\xd3\xb8\xf0\xc5\x0f\xa8\xd8\xd9\x0f\x5d\x87\x36\xe4\xd8\xd2\x82\x9a\x17\xd9\xa2\x68\xd6\x4d\x91\xa9\xa7\x4d\x69\x24\x67\x4d\xe4\x7b\xbe\xac\x7f\x34\xce\xd8\xdb\xe9\x35\xdc\xb1\xd4\x6b\xc4\x63\x28\xe9\xd4\x7e\x64\xe7\x26\xee\x13\x73\x16\x63\xe0\x59\x05\x09\x5d\x0f\xe0\xbc\xea\xa1\x0b\x52\x8d\xc9\x3e\x1d\x48\xd1\x93\xa3\x73\x1f\xd2\xd6\x31\xc6\x82\xf6\x85\x41\x13\x76\x45\xf1\x61\x0e\x86\x0c\x0b\xa0\x23\x25\x84\x07\x57\x0d\xf8\x83\xcd\x90\x46\x4c\xf4\x5d\x9d\x63\x4f\x99\x52\x4d\x9c\x3b\xcf\x8c\xbc\xdf\x4d\x44\xcc\xec\xb3\x1c\x8e\x33\x5c\xb9\x58\xbc\xde\x2e\x7b\xce\xca\x93\x58\xdd\xe2\x3b\x13\x9e\x94\x73\x1f\x73\x91\x73\xc3\x68\xb8\xf3\x50\xcc\x52\xb1\xa8\x86\x27\xb2\xa8\x0a\x13\x92\x66\xea\xbc\x6c\xee\xd8\x10\x2b\xd1\x76\x1b\x30\x19\x93\x69\xe3\x47\x06\xb0\x79\x07\x9d\xe6\x60\x97\x68\x3d\xc9\x0e\xdb\xb9\x4e\x1f\x8d\xaa\xc1\xd9\xc5\x9c\xb7\x32\x5b\xbd\xe5\xce\x8f\xfe\x53\xfc\xef\xef\x2f\xbe\xed\xc1\x4f\x7d\xcb\x6d\x1e\xf3\x42\xf6\xe2\x8f\xfb\xf1\x77\xbd\xf6\x25\xef\xf8\x2f\x9f\x79\x9f\x9f\xbb\x03\x7d\xf0\x33\x7f\xe0\x6f\x3e\x23\xf8\x61\x4f\x3d\x1e\xff\x51\xdf\xf8\x1f\xec\x1b\x5f\xff\xa9\xbf\xf4\xaa\x3b\x7c\xec\xa3\xfe\xf1\x8f\x3c\xe2\x1f\x3f\x6d\x79\xe2\x87\xff\xd9\x83\x7f\xed\x79\xff\xf1\x99\xff\x8f\x67\x04\x1f\xf0\xaf\x3e\xfe\x93\xbf\x6c\xbe\xe9\x41\xb7\xf9\x98\xf7\x3c\xec\x37\x5f\xfd\x7b\x77\xff\xc8\x6f\x78\xc6\x07\x9e\xfd\x8f\x3e\x0c\x7f\xc6\x1d\x1f\xf3\xd1\xf8\x23\xce\x1b\x42\x9f\xff\xc4\x3f\xfc\x5f\xbe\xf8\xd9\xef\x7c\xf5\x47\xfc\xc0\x33\xde\x72\x97\x57\x7e\xd6\x8f\x3d\xf2\x0d\xbf\xf3\xb9\x5f\x6b\x5f\xf2\xd4\x47\x92\x3f\xfa\xf5\xdf\xfb\xca\xe7\xdf\x38\x2d\xea\x21\xed\x23\x5f\xf0\x13\xbf\xf8\xf0\xef\xfd\xe0\x4f\x7c\xfc\x37\xff\xe3\xfb\xf9\x67\xfc\xfa\x47\x3d\xe6\x57\x7e\xf7\x15\x2f\x7f\xdc\x57\xfd\xf8\xbd\x9f\xfe\xf6\x97\x7e\xf2\x7d\x6e\x08\xfd\xe9\xa7\x8d\xdb\xa0\xbb\xcc\xdf\xba\xf7\xbc\xef\x87\xdd\xe3\x8e\x77\xfd\xfb\x7f\xf4\xb2\xfb\x3e\xfe\xcb\xc6\x87\xa3\xf7\x3f\xe3\x25\xb7\xfd\xd3\x7b\x7c\xf6\xc3\x6f\x08\x7d\xf0\x37\x3d\xfb\x29\x4f\xf8\xef\x3f\xf8\xb1\x4f\x7d\xd1\x06\xfb\xeb\x3e\x7a\x7d\xd9\xaf\x7f\x9f\x7c\xc1\x87\x3d\xef\xf9\xaf\xfc\xc9\xdb\xfe\xea\x9d\xbe\xed\xc9\xaf\xbb\x21\xf4\xb7\xdf\xf6\xe7\xef\xba\xdd\xeb\xef\xfe\xec\x87\x7f\xce\xfd\xbe\xef\x8d\xcf\x83\xdf\xf1\xfe\xfe\x5d\x77\xbe\x6f\x78\xf9\xb7\xbf\xe7\x83\xff\xe1\x7e\xff\xfe\x07\xeb\x8d\xff\xf5\x1f\xfc\xd6\x43\x5f\xf1\xb6\x3b\x7e\xd2\x9f\xfe\xdb\xf5\xb8\xe7\x9f\x3c\xf3\x41\x0f\xff\x80\xfa\x83\xbb\x3e\xf7\xa3\xde\x11\xfe\xe0\x6e\xf7\xff\xa5\xff\xe3\x6d\x7f\xf4\x0f\xff\xef\x67\x04\x6f\xb2\xab\x17\xdc\x00\x44\xa5\x72\x46\xd8\xdb\xca\xd8\x81\x16\x87\x86\x66\xbd\xea\x85\x5b\x0e\x57\x8c\xaa\xd1\x0c\xc5\x55\x30\x04\x2d\x42\x61\xb3\xe1\xb2\x3e\x3a\x72\xf6\xd3\xf6\x59\x85\x9a\x0b\x2c\x64\xad\x1b\x2c\xba\x4b\x2d\x5a\x22\x75\x81\xa9\x0d\x2b\x62\xef\x0c\x4d\x4b\x70\x72\x6c\x2c\x17\x51\x2d\xb2\xfa\xa3\xf3\x95\x09\x1d\xe7\x49\x37\xdd\xd8\xa6\xc9\xbe\x69\x1b\x63\xce\x5c\xa0\x3a\xed\x36\x5c\x6e\xa6\xe0\xd3\x18\x88\x4b\x1f\x57\xe9\xbc\x71\x26\x42\x76\x3c\x92\x5e\xb1\xdb\x12\x60\x87\x47\xe7\xde\xc6\x0e\x12\x52\x92\x85\x62\xd4\x56\xf8\xb1\x99\x23\x87\x3d\x04\x95\xc0\x55\x37\xc0\x3c\x62\xa5\x7b\x09\x07\x59\x93\xe0\x41\xc3\x23\x87\x55\x01\x99\xd0\x82\xac\x1e\xbd\x6b\x21\x2d\xb4\x3a\x6f\x84\x33\xcb\xf7\x45\x5f\x55\xdb\x27\xf4\x54\x35\x50\x9c\x56\x16\x99\xf0\x7d\x5d\x40\xd0\x35\x95\xcd\xef\x8b\xa4\xa3\x75\xdb\x58\xcc\x60\xf1\x90\x1d\x96\x3b\x50\xae\x6a\xb1\x26\x04\x75\x82\x1b\x1b\x85\xcc\x45\xed\xa2\xf8\xb6\xa1\x3c\xf2\xda\x1d\xc0\xb5\xb1\xb2\xe5\x1e\xc5\x89\x98\x1d\x75\xb8\xa3\x38\x43\xae\xba\x15\x6d\x29\x36\xc0\x20\x75\x73\xd0\x8e\x44\x36\xe0\xc8\xe6\x12\xa5\x61\xc7\x12\x46\x3c\xb1\x67\x20\x2a\xb5\xf3\xac\xf9\x82\x32\x59\x6e\x9d\xf5\xbf\x19\x4e\x5f\x00\x3e\x25\xa1\x32\x83\xb6\x8c\x19\x2e\x76\x2a\xfb\x14\xd2\x10\xe8\x97\xbc\x0e\x3e\x84\xea\x7c\x99\x50\xf8\x95\xce\x1a\x55\x86\x24\x5c\x35\xcc\x8e\x4e\x70\x28\xd9\xc1\x86\xa2\x43\xd5\x88\x7d\x1f\x87\x04\xae\x06\x90\xd7\x51\x6a\x21\x67\x62\xf3\x98\x09\x87\x6d\xe6\xb1\x9e\x79\xb0\xab\x3e\x6f\x28\xa2\x13\x22\x1a\x33\x42\x26\xab\x2a\xf6\x68\x74\x5b\x95\xd3\xfb\xda\x6a\xe0\x20\xb9\x93\xdf\x82\x7e\x07\xb0\xce\xc6\x5e\x96\xcb\xca\x6b\xa7\x55\x29\x12\xbc\x83\x40\xf9\x3a\xf5\xc6\x16\xa6\xa7\xae\x02\xdb\xa5\x11\xa9\x9b\x04\x5b\xdf\x85\x83\x2a\x75\xc3\xa6\x48\xf8\xb2\xfa\x43\x30\x98\xc8\x71\x70\xe9\x26\x62\x5c\x59\x37\x46\xdc\xe4\x48\xd4\x1d\x84\x1f\x24\xe1\xa5\x6a\x69\xf1\xa9\xb7\xc8\xac\x5b\xb3\xbd\xf0\xe5\x50\x95\x8b\xe9\x55\x4c\x9e\x63\x75\xa0\x66\x1c\x7a\xd9\xf5\x4e\x61\x81\xee\x38\x09\xa9\xc1\xe0\x2d\x91\x32\x72\xaa\x95\x67\x76\x55\xe2\x6d\x32\x40\x86\xa7\x38\x30\x3c\xa3\x1b\xb5\xad\x49\x69\x92\xd1\xdc\xaa\x5b\xf4\x41\x6e\x51\xe1\x3d\x6d\xab\x02\x1e\xeb\x33\x75\x77\xd5\x98\x7d\x62\xb8\x3f\x4d\xea\x67\x88\xcb\x89\xa1\x27\x42\x56\x4d\x30\x3b\x8a\x51\x08\x84\xca\x3c\x28\x5b\xb0\x6c\x8b\xba\x9c\xac\x26\x44\xf4\xad\x9d\x9e\x37\x63\x7e\x17\x64\xfd\xeb\xbe\x8a\x45\x08\xbe\x6c\x74\x5d\x56\x79\xa2\x5a\x9b\x13\xab\x40\xc1\x30\x55\xa1\x38\x62\xaf\x12\x82\xde\xb7\x95\x49\x85\xed\x39\xaf\xd2\xbe\x73\xd0\xa8\x7a\x70\x85\x9e\xc6\x14\xdd\x74\x34\x68\x0e\x75\x8a\xb6\xf3\xad\x84\xae\x00\x65\xcd\xd2\x9e\x93\xf4\xb8\x27\x6e\xaf\xe2\x60\xd4\x48\x76\x5a\xa4\x66\x5e\x83\xda\x21\x5e\x93\x9e\x43\x1d\x62\x3b\x27\x8e\x53\x93\x46\x20\x07\xd1\x37\xef\xe9\x26\xfc\x0e\xdb\xbc\x6a\x5a\x2f\x5d\x8b\x46\xa8\x4d\x09\xd4\x26\x36\x82\x25\x52\x85\xcc\xbc\x8a\x46\x4d\xdf\x2a\x3a\xce\xed\x9c\xc4\x72\x7a\x40\xcd\x17\x19\x4f\x99\xae\x4a\x77\x41\xb1\xec\x5a\x18\x37\xc2\xea\x17\x0e\xb0\xdd\x1d\x18\x5b\x82\xb0\x63\x87\x0a\xad\xd8\x0e\xba\xda\x4a\x81\x42\x74\x1d\x4b\x1b\xe6\xaa\xf1\x8b\xdc\xb5\x42\x35\x11\x62\x6f\xab\x6c\x56\xc6\x3d\xd5\x46\x17\x19\x2d\x25\xcd\xa0\x75\xc7\x25\x42\x39\xe7\x20\xa3\x55\x50\x1d\x4f\x57\x19\xde\xa3\xaf\x63\xcb\x65\x67\x51\x38\xe7\xac\x37\xbb\x14\x82\x58\xa9\x78\xf6\x5b\x87\x27\x98\x4e\x1d\xac\xf3\xf5\x88\xa4\x6d\x87\x16\xe9\xaa\x79\xb8\x0b\x8a\x87\x64\x8c\xc8\xc3\xcd\xb5\x19\x06\xec\x16\x19\x25\x87\xc0\xe5\xd8\x80\x02\x42\x80\xd8\x15\xf7\x96\x00\xef\xe2\x0e\xb6\x94\x6e\x05\x3e\x37\xd3\x92\x57\x74\x39\x52\x03\xf5\xbe\xe9\x41\xdc\x06\x1a\x6a\x71\xb3\x39\x84\x35\x14\x84\xd8\x26\xb4\x05\x58\x52\x79\x02\x9b\x51\xc8\x8e\xc8\xbd\x5e\xf6\x14\xda\x81\xd4\xd2\x0f\x15\x4d\x3b\x33\x12\x7e\x1b\xdd\xa9\x00\x24\x1e\xd4\x84\xad\x1f\xe1\x98\x6b\xdc\x75\x29\x04\x72\xe8\x71\x67\xc1\x5e\x25\x31\xb6\x16\x12\xe4\x1e\x15\x84\x55\x1f\x79\x4c\x8a\xe8\x36\xc6\x38\x19\xb3\xdb\x98\x15\xa4\x68\x22\x5b\xd2\x0e\x9a\xf1\x6c\x1b\x0b\xbd\x6a\xd2\x84\xa5\x66\x5f\xc9\xba\x6b\xbf\x71\x5f\x4e\x48\x7d\x52\xa0\x97\xdd\xa0\x45\x56\xc0\x2b\x83\xcb\xce\xdb\x46\x00\xe2\x5b\xb2\x7b\xe5\xf6\xaa\xa2\x96\xf1\xde\x6f\xb3\xe3\x19\x5a\x3e\x0a\x1c\x63\x99\xa3\xca\xa2\xc3\xde\xbc\x1d\x69\xd9\x24\x3a\xb0\xaa\x76\x59\x35\x72\x47\xf4\xc9\x5c\xf5\xeb\x90\x59\xe0\xe4\xc5\xe7\x2d\xeb\x9a\x85\x4e\x3b\xf6\x74\xcd\x46\xe7\xa0\xda\xa1\x16\x0c\xd7\x84\xa9\x39\xfc\x0e\x32\xa3\x68\xee\xf6\x2a\xb1\xd3\xf4\x89\x0f\xd7\x89\x44\x65\x8d\x07\x5f\xbc\xe5\xbc\x1f\x6e\x9f\x25\xc3\x41\xa1\x5f\x1b\xdb\x81\x6e\x47\xb2\x94\xb0\x76\xf4\xa5\x5c\xc5\xc1\x1a\x15\x51\x52\x33\x75\x5a\xb1\x3f\x58\x8f\x02\x77\xb0\xa0\xda\x3c\x1e\xde\x40\xe3\xc9\x3a\xcd\x22\x0c\xe1\x96\x58\x9a\x14\x36\xb7\x6e\xb1\xbe\x59\x76\xea\x8a\x92\x63\xff\x90\x5e\x3c\x35\x4d\x59\x25\xce\x77\xbc\x93\x6d\x9f\x3b\xe2\x40\xc4\x52\x90\x3b\xcc\x06\x0f\xe0\x2d\x18\x9e\x1e\xcb\x75\x13\x99\x89\x0c\x3c\xd8\x36\x55\x06\x2a\x70\x2a\x13\xc0\x65\x07\x8c\xad\x24\x94\x1d\x1c\x84\x17\x0b\xaa\x9e\x6b\x5d\x8f\x81\xea\xb6\x4e\x6b\xae\x82\xc1\x76\x52\x61\xb6\x18\x4b\xf6\x50\x35\x5d\xfb\x24\xaa\xb4\x6e\x45\x04\xd3\xee\xe4\x88\xce\x15\x00\x18\x9f\xe1\xec\xab\x25\xcd\xea\xab\x5c\x06\x23\xce\x80\x4d\x90\x50\x68\x5b\x0e\x85\x32\x5b\xb0\x8d\x93\x25\xe9\xd1\xc1\x35\x0d\x01\x6d\x5e\x20\x6f\xec\x3c\xe8\x1e\xc6\x41\xaf\xca\x6f\x30\xb6\x78\x89\x03\xa7\x3c\x37\xa3\x99\x87\xf2\x3c\xb4\xac\x06\x4d\x52\xfc\x26\x78\x5d\x8b\x07\x78\xd9\x9a\x55\x09\x4b\x63\x72\xbe\xa8\xfd\x91\x66\x12\x69\x3c\xb7\x29\x56\xe2\x27\x03\x3a\xb0\x75\xd1\xcb\xd9\x44\x4e\x88\x1c\xda\x13\x5b\x52\xc4\xa7\xa4\xde\x71\x5a\x02\xa9\xe9\x32\x51\x8c\xbd\x28\x4c\xf5\xed\xa4\x19\x2f\x71\x28\xc3\xf6\x80\x13\xd4\xf5\x98\x1d\xb7\xd3\xeb\x54\xa3\x72\x0d\x67\x29\x20\x34\x08\x5e\x35\xf5\x9e\x42\xcf\x14\xca\xab\x74\xdb\xb4\x16\xa7\xcd\x72\x9d\xbd\x38\x89\x42\x89\xf4\xb4\x07\x3b\x9b\x05\x94\x07\xc7\x45\x2b\x2a\xf9\x3d\xdd\x7a\xa6\xe7\xcd\xf2\xdd\x17\x80\x4f\xdc\x77\xa4\xe0\x56\x62\x2a\x8b\xc6\x92\xb6\x9e\xe0\x9c\x6a\xe7\x50\x2c\x04\x4c\x4d\xa7\x9f\xdc\x4c\x55\x73\xd6\xc7\x0e\xad\xcf\x57\xbd\x99\x3e\xe3\x5c\xda\x1c\xe7\x74\x1e\xe3\x42\xb8\xd8\x3a\x3f\xf4\xe4\xd1\xaf\x49\x10\xa7\x90\xb5\xda\xad\x7e\x5d\x50\xe3\x46\xa3\x03\x5c\xf6\x2e\x92\x1e\x21\xb8\x6d\x02\xe3\x0d\x66\x46\xa9\x95\xe6\x18\x54\xe5\x27\x3b\xba\x5a\x0f\xae\x35\x5b\x03\x94\x59\xce\x25\x2f\x21\x9d\x74\xb9\x4a\xcb\x63\x4e\x33\x48\xfb\x91\x00\x95\xcb\x96\x86\xcf\x78\xa1\x6b\xe0\x84\xd3\x0a\xf2\xd9\x57\x18\xeb\xbe\x78\xee\x76\x40\xb9\x45\xab\x29\x97\x79\x40\x32\x2c\x3a\x2c\x34\x6f\x21\xf7\xa2\x5c\x34\x34\xb8\x54\xd2\x6c\x25\x7b\xad\x40\x3b\x7c\x95\x2b\xbf\xe5\xb4\x49\xbb\xc0\x5c\xd2\x45\x05\x61\x12\x06\xe2\x59\x44\xec\x0f\xae\x31\x51\x6e\x28\x6a\x6b\xc7\x22\xe2\x6d\x6a\xb3\xd9\xa3\x01\x9a\x6d\x94\x9e\x86\x45\x75\x6c\xf7\x71\x55\xa2\x40\x9f\x01\x48\x33\x4f\x31\xf3\x59\x7a\x1e\x91\x00\xb4\xef\x55\x02\x96\x0f\xbe\x45\xac\x5a\x36\x18\x1c\xc8\x18\x00\xa3\x3f\x34\x4d\x57\x95\xa6\xd7\xd0\x96\x64\x64\x41\xe1\x40\x9a\xe5\xd9\x13\x93\x02\x6a\xa2\xb4\xed\x3c\x51\x57\xc4\xb2\x31\x41\x17\xbe\x05\x71\x6e\x58\xb3\x74\xeb\x07\x94\x6f\x56\x41\xbb\xe2\xf5\x76\x4e\xe0\x96\x0e\x77\x68\xa2\x78\x06\x25\x9d\xea\xc4\x62\x55\x40\xb0\x13\xfa\x05\x0b\x84\xdc\x19\xa5\x25\xfa\x1c\x75\x57\x43\x97\xab\xc0\x47\xb7\x55\xd0\xb6\x28\xcd\xe3\x28\x29\xac\x82\x8d\x92\x7a\x3d\x19\x12\x96\xee\x89\xe3\x1d\x12\xae\x38\x74\x9b\x58\x86\xa8\x7d\x01\x57\x79\x4e\xf9\xa6\x54\x18\x9d\x53\xbc\x06\x22\xc0\x54\xc7\xa4\xab\xd7\x0c\x2b\x22\xd9\x82\x10\x6a\xa1\x58\x1d\xc4\x3e\x5b\x5a\xd0\x32\xf2\xb8\x6a\xa0\x70\x5f\x54\xed\xa4\x1e\x66\x53\x4b\x13\x59\x57\x71\xae\x73\x46\x07\xa1\xcd\x3c\x18\x96\x36\xbd\x7b\xa9\xf7\x40\xe8\x39\xb7\xf5\xc4\xea\xaa\x72\xc0\x2e\x82\xde\x06\x9f\x12\x23\xb5\x89\x1c\x0f\xd1\x82\x9f\xc0\x9e\x2a\x43\x3c\xa9\xf2\x66\x4f\x3c\xef\x22\x22\x0e\x50\x88\x07\xba\x8c\x97\x1e\x5a\x2c\xac\x6a\x11\x74\xf2\x51\x24\xbe\x8a\xba\x86\x64\x2b\x98\x19\x99\x80\xc6\xde\x79\x99\x25\x87\xee\xcf\x5d\x64\x38\x21\xb8\xaa\x31\xe2\xcc\x7b\x18\x75\xc4\x5a\x57\x6a\xd2\x70\x51\x8f\x61\xcc\xe9\xb0\x4b\x4c\x7e\x68\x0e\x3f\xe9\xd8\xe2\xa8\xc8\xde\x6d\xad\x68\x25\x57\xb1\x41\x79\x24\x81\xcb\xa6\x85\xae\x7a\x96\x03\xd5\x1d\x02\xa1\x46\xcd\x44\xe0\x5d\x9c\x78\x44\x19\x5a\x1f\x1b\xde\x4f\x87\x5c\x74\x4a\xa9\x5b\x81\xcf\xcd\x6a\xf2\x17\x24\x9c\x97\x46\x7d\x5e\x18\xd4\xc4\x1e\x2d\xd0\x06\x77\xab\x3c\x38\x43\x8e\x32\x09\x2f\xe0\x79\xda\x4e\x51\x9e\x59\x31\xba\x14\x34\xcf\xab\xec\xc3\xd4\xf4\xae\x0f\x88\x4e\x26\xc2\xae\x1a\xd2\x5c\x46\x52\x17\x8e\xe1\x09\x66\xee\x3b\xdd\x66\xe8\xbd\x94\x75\xb1\x05\xd5\x66\x72\x36\x57\x0d\x14\xa6\x24\x2f\x49\xc6\xe0\x21\x8e\xb2\xc1\x0d\x76\x48\xa8\x32\x7e\xcf\xc9\xa4\x80\xb0\xab\x1b\x12\x1c\x4a\x1e\xca\x8a\x57\x08\x4e\x7d\x95\x96\xd7\xfb\xca\x41\x36\x13\x2c\x0c\x06\x2f\x11\xc3\x3c\x16\xb9\xcb\x6a\x67\xd1\xdd\xf2\x13\x1a\xcc\x8f\xb9\xeb\xf5\x90\x5b\x5f\xd6\x72\xd5\x23\x8f\x24\xf2\xa4\xe4\x62\x85\x4f\x33\xc3\x0c\x16\x4f\x6a\x49\x41\xd4\x9e\xf8\xe0\x84\x95\xa2\x20\x0a\x81\xa8\x5b\xfe\x34\x02\xf1\x65\x0d\xfd\x74\x5f\x0b\xc4\x13\xe9\x53\x88\x69\xa9\x57\x2b\xad\xd1\x0c\x1a\xd8\x62\x29\x01\xce\x16\x1a\xad\xb3\xb5\x69\x77\x12\xac\x32\x3b\x2f\xcb\x83\x0d\x72\xf4\x01\xf7\xe3\x48\x0d\xad\xe1\x50\xc8\xaf\x24\xe5\x80\x3b\x62\x4a\xc3\x85\x2f\x7a\x00\xb4\x89\xc6\x01\xf2\xc4\xf4\xdc\x97\xab\x2c\x19\x96\xe7\xb5\x15\x00\x5b\x3b\xf6\x2c\x08\xd3\xb3\x3a\xdf\xcd\x32\x37\x69\xd6\xad\x17\x60\x31\x90\x86\x71\x8e\x67\xa6\xb1\x95\xb0\xd5\x5b\x99\xad\xbe\xfd\xa3\xdf\xf0\xe4\xcf\x96\xec\x53\x3e\xee\x8d\xb7\xfb\xd9\x7b\x7f\xd6\xcf\xbe\xe5\xfd\xff\xe6\x61\x2f\x79\xd7\x9d\xea\x1b\xde\x71\xbb\x9f\xf9\x3f\xbe\xf9\x39\x77\x79\xe0\xdf\x30\x5b\x3d\xe8\xf5\xaf\x8d\xdf\xff\xad\x1f\x23\x1e\xb5\x3d\xe9\xe3\xff\xe0\x0b\xef\xf0\x39\x6f\xb9\xe3\x17\xdc\xfe\x57\x5e\xf5\x7a\xf5\xbf\xff\xfc\x63\x3e\xf3\x7d\x4f\xff\xc0\x3b\x6e\x08\xdd\xbe\x3f\x3c\xf3\x2e\xff\xf6\xa1\x9f\xf1\xc7\xbf\xf7\x65\x6f\xfe\x2e\xf8\x94\x9f\xf9\x4c\x94\x9f\xf3\xb2\xdf\xfd\xf2\xef\xfb\x95\xa7\xbc\xee\xfb\x1e\xfb\xa6\x97\xfe\xc3\x1b\x42\x7f\xb3\xbf\xf3\x35\x5f\xf7\xb6\xf7\xfe\xe2\x7d\xfe\xc1\xeb\x6f\xff\x84\xfb\x3c\xf9\xd9\x3f\xfb\xba\xdb\x7f\xca\xdd\xfa\x93\x9e\xf2\xde\x97\xe4\xb7\x98\xaf\xfa\xac\xa7\xdd\x10\xfa\x8e\x37\xff\xf8\xbd\x7e\xf2\x19\xf7\xf8\xc2\xd7\xfe\xed\x6f\xbe\xc3\x43\xdf\xfa\xb8\x1f\x7a\xf9\x37\x7d\xd2\xef\xfe\xd2\xa7\xdd\xeb\x19\xcf\x63\x3f\x7b\x5b\xf4\x73\xff\xe5\xf6\x37\xce\xcb\xfa\xbb\x7f\xfc\x9a\xc7\x7e\xc5\x37\x3f\xe7\xbf\xc6\xcf\x7b\xd4\xf2\xc4\x4f\x78\xca\x9d\xbe\xff\x97\xbe\xf6\x67\x5f\xff\x80\xe7\x3d\xe1\xf3\x9f\xfe\xdb\x9f\xf6\xca\x27\x8f\x1b\x42\xff\xf8\x36\xff\xec\x0d\x8f\xfc\x99\xa7\xbd\xfb\x31\xb7\x7b\xe3\xef\xff\xfa\xfc\xc8\x7f\xf6\xdc\xdb\x7e\xea\xdf\xb9\xef\x47\xbf\xe8\x7c\xd5\x1d\x1e\xfb\xf4\xdf\xb9\xeb\xcf\xa9\x1b\x42\x9f\x52\xee\xfc\xac\xf3\x7d\x1f\xbe\x7e\xe0\x37\x01\xbf\xdb\xf3\xc9\x17\x3e\xe5\x2e\x7f\xf7\xeb\x3e\xe3\x19\x1f\x7c\xd6\x17\xff\xc9\xdd\xf4\xdf\xf9\xcc\x6f\xf9\xc9\x1b\x42\x7f\xe1\x2b\x7f\xe3\x5d\x4f\x79\xfa\x37\xbd\xe1\xed\xff\xee\x8f\xef\x7b\xfe\xb7\xef\xf8\xc4\x97\x98\x17\x3c\xfe\x05\x5f\xf1\x27\x9f\xff\xb6\x00\xfe\xe9\x47\xbd\xba\x7e\xd4\x97\xff\xd5\x8f\x70\xb3\x5d\xfd\x1b\x3f\xc2\xbf\xfc\x9c\xa7\xcb\x67\xbe\xf4\x65\xef\x7c\xc4\x77\x3c\xe3\xe3\x7e\xea\xde\x2f\xfa\xfc\x0f\xbe\xf9\x0b\x3e\xf8\xd3\x0f\xfd\xe5\x17\x3c\xfa\x95\x6f\x7b\x47\xfd\xd5\x77\xbd\xf1\x86\xd0\xd7\x3c\xf9\xe7\x5e\x8b\xbe\xff\x91\xef\x7f\x93\x7f\xd8\x3b\x7f\xe2\x11\xcf\xfc\xe2\xaf\xd7\x1f\x24\x2f\x78\x71\x7a\xe9\x13\x39\xb9\xfd\xaf\x3d\xe1\x2e\xaf\xbc\x21\xf4\xa5\x8f\x3b\x7e\xe5\x25\x8f\x7d\xc7\x9b\x1e\xf1\x51\x5f\xff\x9d\x7f\xeb\xc7\x7e\xe4\xef\x7d\xf8\x5d\x1e\xff\xc2\x9f\x79\xc0\x4b\xdc\xff\xf7\x45\xdf\xf6\x64\xf5\x9c\xff\x74\x63\xe8\xcb\x9f\xf6\xdd\x5f\xf7\x84\xb7\xfc\xc4\x47\xfe\xb7\xef\xf9\xfd\x87\xdc\xef\xb5\xaf\xf9\xd8\xd7\xff\xf8\x4f\xff\xe9\x6d\xdf\xf3\x96\x1f\xfe\xde\x3f\x7f\x9c\xfb\x88\xaf\xab\x6f\xbf\x21\xf4\xed\xcf\xff\x9e\x1f\xff\x91\xa7\x7e\xcb\x07\xde\xf7\xa4\x5f\xbe\xf7\x47\x7d\xe1\x3f\xff\x93\xfb\xfe\xc9\x53\x1f\xf6\x32\xf1\x0f\xef\x37\xdf\xfb\xd4\xe3\xd5\x6f\x4a\xbf\x71\x43\xe8\xeb\xff\xe2\xe7\x1f\xf6\x2d\x7f\xfb\x87\xff\xf4\x1d\x9f\xf7\xc6\x2f\xb9\xdd\x17\x93\xfb\x3f\xfd\x4e\xff\xe6\x97\xef\x7c\xa7\x7b\xbc\xf5\x7c\xc6\x63\xbe\xe0\xab\x5e\xf9\xa5\xef\xba\x21\xf4\x55\xea\x17\x1e\xff\x98\xf9\xc6\x1f\xfc\xa6\x4f\xfc\xae\x3f\xc2\x8f\xf9\x69\x73\xd7\xff\xf4\xbc\x17\x3e\x48\xc2\xd7\xbf\xfb\xad\x0f\x79\x46\xfc\xa4\x17\xdc\xee\xc6\xcd\xba\xcf\xcf\xbf\xf5\xd1\xff\xc8\xff\x13\xf0\x98\x3f\x7d\xc0\x5b\xff\xe9\xe7\xfd\xce\xd7\x1c\x7f\x3e\x9e\xf2\xa8\x4f\x7a\xf7\xd3\xe9\x9b\xf1\x7f\x7e\xd3\xaf\x7c\xf9\x5f\x3b\xde\x6e\xb6\xab\x17\x5c\xc3\x33\x88\x79\xec\xba\xb0\x61\xfc\x96\x22\x0a\x41\xe9\xa1\x40\x98\x22\xec\xc9\x66\x58\xf6\xb1\x78\xa9\xdb\x09\x3c\x1a\x08\x77\x44\x2e\x03\xfa\x60\xcf\x20\xd2\xea\xbb\xaf\x6b\xd1\xa0\xa5\x1d\xce\x92\xf5\x30\x00\x1d\x5c\x7a\xc7\x9a\xca\x5c\xd7\xf3\x34\x12\xd1\xd3\x94\xeb\xba\x78\xa8\xd5\xce\x92\x11\xd9\xee\xd4\x3e\x4d\x5e\x2d\xcb\xd5\x6a\xb6\x6b\xe5\x29\xb3\xc3\x17\x5f\xc9\xd9\x3d\xe1\xeb\xc6\xaa\x5d\xf2\x55\xae\x5a\xb0\x74\xd4\x4e\x1d\x55\x22\x47\xf2\x0d\x72\x0f\xec\xa2\x5c\xa9\x07\x5b\x2b\x57\x5e\xd5\xb6\x20\xd3\x0e\x16\xbb\xcb\xcb\x74\x78\xbb\xaa\xe0\xb1\xdc\x72\xdf\xa5\xa2\xac\x0f\x84\xb7\xc5\xec\x24\x64\x38\x69\xb3\x6d\x34\x04\xb6\xb1\x3b\xa7\xd5\x36\x8a\xa5\x55\x88\x8d\xc9\x53\x5d\xd5\xd3\x2d\xb7\xb4\xed\x1e\x6c\xb2\xfa\x81\xb7\x75\x5d\x9b\x38\x4b\x94\x0b\x89\xcb\x22\x9c\x36\x96\x37\xba\x7a\x24\x4b\x93\xd0\xea\x82\x90\xb9\xea\x51\x91\x98\xeb\x50\x31\xa8\x26\xe0\x36\xc6\x21\xce\x39\xf5\x16\xb8\x73\x6a\xab\x6b\x9a\xeb\xe2\x11\xc0\xcb\xb6\x1b\xd1\x05\xd5\x9b\x3c\xe2\x55\x9e\xe7\x7e\xd6\x2c\xab\xca\x0a\x8b\xd2\x88\x64\xc1\xef\x2b\xa2\xa2\x86\x26\xb6\x23\xf0\x71\x2e\xfd\x70\x05\x95\xb2\x4c\x47\xad\xc6\xc1\xdc\x5a\x03\xdc\x0c\xa7\x2f\x00\x9f\x5e\x8d\x03\x0d\x8a\x76\x16\x82\xa7\x37\xb6\x66\x2b\x8a\xf7\xad\x1e\x5a\x08\xb9\x38\x06\xb7\xc3\x8a\x33\x21\x73\x1a\x85\x5d\x51\x57\x15\xce\x13\x4f\x1c\xee\x9b\x5b\xe6\x5c\xc3\x22\x8c\xda\xa4\xc7\x29\x39\x5d\xab\x3d\x93\xdc\x38\xf6\x26\xbb\x73\xcd\xa5\x21\x50\x0e\x3e\xe8\x55\x53\xd2\xb9\x3e\x60\x80\x78\x53\xf6\x18\xd6\x21\xc1\xa3\x6c\xb3\x78\x6c\xe5\x4c\x60\x91\xcc\xac\x24\x4a\x49\x94\x11\xad\xed\x55\x6c\xe0\xb2\x5a\xb8\x3d\x55\xf0\xbc\x9b\x65\xed\x1a\x32\x0c\x43\x31\xe1\x58\x84\xed\xa1\xa0\xa4\x9a\x06\xc7\xce\xb3\xa8\x8e\xc0\x65\x47\x7b\xf2\x96\x5d\x65\x3a\x21\xfb\x50\xc6\xe8\x58\x96\x2c\x65\xd2\x34\xee\xeb\x41\xa1\x0e\x99\x45\xb1\x01\xd1\x91\x39\xf2\x74\x81\xcb\xb2\xf3\x80\x0b\xaf\x57\x0d\xb4\xa6\x36\x46\xea\x9c\xc3\x53\x2d\x1c\x29\x9a\x1a\x54\x0a\xcf\x83\x57\x24\xbc\xd0\xbb\x07\x10\x12\x84\xce\x41\xa4\x80\x04\x52\x1f\xf4\x55\xa6\x13\x63\x5c\x3e\x4b\x71\x67\xa9\x67\xdd\x4d\x3c\x36\xbb\x1f\xf0\x38\x41\xd8\xc0\xda\x17\x32\x57\xd6\x17\xb3\x0c\x74\x88\x1d\x4d\xa7\xf7\xcb\x5e\xa2\x40\x5a\x81\xd9\x86\x38\x9b\x16\x11\x1c\x7b\x47\x3d\x45\x00\xe6\x38\x3c\x93\x1b\xd0\x3a\xaf\xf2\x84\xda\xd8\x4a\x7c\xed\x11\xa3\x7c\xeb\xba\xef\xcd\x98\xdf\x15\xdd\x5e\x78\x01\x85\xec\xa8\x46\xa7\xa1\x04\xb7\xa8\x47\xe6\x64\xe1\xd0\x8d\x2d\x6f\x87\xdd\x9c\x4c\xca\x14\x2b\xb2\x25\xb0\xfb\xf5\x64\x57\x89\x28\x47\x08\x3a\x15\xe4\x7c\x58\xc0\xed\xc1\x4b\x6d\x7a\x04\x91\xc0\x18\xd6\xa7\x66\x4a\x6c\x70\x36\x69\x8e\x79\x22\xa9\xd1\xd0\x97\xbd\x99\x73\xf6\xbd\x2d\x83\x42\x5c\xad\x20\x7b\x3b\x3d\x05\x85\xa7\x95\x48\xd6\xda\x02\xf6\x7e\x44\xd4\xb3\x38\x0d\x8a\x5b\x83\x61\x05\xe9\xaa\xe4\x3e\x39\x79\x2d\xc1\x18\xe1\x88\x69\x5d\x9a\xc0\x64\x21\xcd\x43\xab\xa4\x3e\xac\x84\xcb\x2a\xbc\xc8\x7a\x5d\x72\x8b\x29\xec\xe9\x6c\xf1\x2a\xe6\xb3\x67\x33\x9a\xe7\x88\x80\xac\xf1\x3a\xe4\x96\x82\xd1\x22\xb0\x54\x34\xf1\xf5\x38\xb6\xba\x06\xa0\xf9\xba\xe7\x58\xc1\x2a\x4b\xbd\xea\xd1\x54\x22\xe9\xae\x5b\x58\x18\xe1\x4d\x2c\xd8\xa7\x82\x8c\x22\x73\x20\x0a\xcb\x16\x4f\xa9\x6a\xb3\x1c\x08\xbb\xea\xb3\x6c\xad\xe1\xdc\xed\x55\xb6\x6c\x43\xd2\x87\xe6\x42\xb0\x99\x68\xf7\x08\x8c\x96\x8e\x08\xf1\xff\x9f\xb6\x7f\x8f\xe2\xef\x39\xe7\x43\x71\xda\x46\xa8\x52\xd4\x25\x0d\xbf\xfc\xea\x38\x3d\xc7\x71\x49\x63\x66\xf6\x1e\x55\x3d\x8e\x08\x29\x22\x25\x68\xab\x24\xcc\x75\xef\x99\xd9\x73\xbf\x8f\x4b\x23\x25\xaa\xad\x43\x51\x7a\x51\x55\xa4\x45\xdc\xa9\x36\x91\x38\x68\x91\x12\xc4\xa5\x48\x44\x5a\x97\xa0\x82\x22\x29\x4b\x7b\x70\xd6\xd7\x5a\xac\xcf\xf2\xe9\x5a\x9f\xbf\xf6\xff\xcf\x1f\x7b\xbd\xdf\x7b\x3f\xf3\xcc\xf3\xba\xb9\xb5\x8e\x65\x26\x49\xe1\xb2\x19\x75\xc2\x38\x6e\xed\x5c\x63\xb7\xea\x2e\x4f\xaa\x0e\x6b\x43\x27\x52\xd6\x13\xe8\x8e\x39\xf6\x40\xc6\x86\x96\x73\x9c\x7b\x3c\xa7\xba\x44\x22\xe1\x9c\x65\xe3\x0d\xdb\x04\x17\x7e\xc0\xa1\xf4\x0f\x9a\xcf\xa3\xee\x92\x77\xb8\x3a\x43\x54\x8e\x98\xf9\x36\xf0\x1a\x7e\x38\x28\x36\xcf\x7b\x3e\x8e\x5c\xc9\x35\x36\xd3\x65\x06\x47\xcf\x82\x31\x1a\x52\x55\x75\x37\x77\x59\x5b\x18\xb6\x22\x6a\x8a\xca\x4d\xf4\x33\x1f\xad\xb9\x53\xe2\xa5\x8e\x75\xc8\xa8\x70\x92\x08\xb6\xc4\x13\x3c\x6c\x8b\x3b\xd0\x90\xab\xdb\x4e\x34\x68\x49\xa2\xce\xb0\x4c\x5b\x64\x3d\x40\xd3\xb0\x39\x1a\x64\x04\x58\x01\xc2\xb8\xa6\xbb\x26\xf4\x90\x9d\x7d\x0f\xb4\xc9\x59\xe6\x5d\xd3\xa0\x12\x53\xfa\x52\x77\x3a\x64\xdb\xf4\xb5\x5c\xc7\xb2\xc0\xbd\xd9\x45\x6a\x05\x42\x65\x26\x37\x93\xba\x5b\x57\xc5\x8d\xee\xe4\x04\x77\x11\x2c\xce\x0b\x68\x37\x50\xe7\xc9\x2e\x71\x21\xed\xca\x92\x2a\x63\x40\x3d\x3d\x53\xbb\x7c\x00\x2b\xa0\x62\x2e\xcb\xda\xe6\xd0\x88\x98\xdd\x45\xb7\xb5\x82\xb0\xcd\x19\x44\x55\x58\x07\x57\xbd\x0e\x51\x00\x25\x68\x91\x10\x06\x23\x3a\xb6\x8b\x21\x32\x5d\x48\x0b\x39\xa0\xb8\x9f\x77\xe9\x1f\x68\x8d\x1b\xdc\xaf\x60\x8b\xb4\xb0\x3a\xd3\xb3\xd9\x53\x0b\x55\x9d\x54\x2c\x09\xf0\xbc\x38\x53\x6c\xca\x1d\xa6\x75\xd1\x55\xa1\xbe\x4b\x1c\xad\x81\x97\x13\x2b\xc8\x55\x5c\x08\xe5\x14\xc8\xca\x9b\x4e\x7e\xf5\xd3\x51\xeb\x56\xd0\x54\xe7\x1d\xfb\xc5\x0f\xd5\x16\xb3\xb8\x3c\x1c\xa7\xf6\xa8\xed\xd4\x0d\x93\x8f\x1f\x7b\xbb\x42\x40\xde\x55\x98\xb3\x64\x51\x85\x1a\x01\xc5\xae\x09\x02\x79\x3c\x04\x97\x76\xb4\x88\x4f\x1f\x1d\xeb\xa7\x27\x77\x59\x5b\xd0\x11\x1d\xb6\x81\x5d\x54\xed\x0a\xf9\x22\x11\x3a\x14\x61\xa9\xf6\x1c\x68\x0d\xd3\x23\x10\x32\x09\x8d\xb5\xc8\x91\xe1\x86\x38\x72\x97\x94\x65\x97\x2b\xa8\x95\x77\x40\x94\x07\x57\xdf\x78\xa6\xf5\xd8\x0c\xbf\xda\xe9\x0f\x96\xe6\x8e\xe6\x56\x61\x72\xc4\x82\x93\xa0\x5c\xeb\x6d\x29\xd6\xac\x17\x76\x38\xef\xf8\x88\x10\x38\x88\x04\xad\x86\x0d\xbe\x0b\x8d\xb2\xc9\x7d\xb5\x3d\x1a\x19\xf8\x76\xba\xa2\xf6\x34\x13\x66\x77\x61\xe1\x36\x4b\x29\xe5\x50\x16\xd7\xe8\xb3\x2a\x9c\xc0\x29\xa6\x14\x52\xf1\x3a\x51\x5a\xc1\x40\x90\xcf\xc6\x26\xdb\xe0\x29\x69\x39\xd6\x5d\xf3\x46\x1a\x12\x70\x70\xe6\xbe\xd9\x23\xd4\xdc\xf6\xc3\xb7\x50\x91\xa0\x87\xc7\xe5\x6c\xe8\x74\xbc\x2f\x05\xad\x3d\xb1\xc9\x72\x63\x07\xbf\xeb\x8d\xcd\x8e\xd1\x5d\xec\xb9\x49\x80\xfa\xe2\x1e\x13\x9b\xfd\xc1\xa6\x5b\x6c\xf6\x14\xb4\x0b\x8e\x94\xbd\x9a\xbc\x6b\x9c\x8c\x62\xf7\x25\x1a\x75\xdd\x8e\x8b\x24\x93\x50\x62\x0b\x40\x7f\x62\x1c\x09\xb3\x27\x34\x64\x26\x86\x73\x29\xfa\x28\x50\x50\x50\x44\x43\x1c\x97\xa5\xc6\x43\xcd\xe7\x51\xfb\xee\x1b\x26\x9f\x3d\xba\x03\xba\x90\xc7\x94\x59\x41\xb2\xb1\x89\x21\xde\xf7\x0c\x72\xd7\x2c\x38\x54\xe0\x18\x3c\xc7\x0e\x06\x8e\x44\xf7\x0d\xde\x96\x09\x5c\x44\xe1\x52\xee\x7c\xb0\xb4\xec\x75\x64\xba\x36\x69\x65\xe7\x89\xf1\xbc\xed\xac\xa9\x54\x83\xb2\xe7\x8e\x36\x77\xb8\xeb\xaa\xe2\x36\x36\x39\xa8\x67\x61\x23\x6e\x06\x51\xab\x8f\xd3\x0e\x6a\xd3\x3c\x33\x69\x3b\x06\x1d\x31\x91\x64\x19\x17\x82\x7d\xa5\xec\xbc\x22\xe7\xc9\x6e\xca\xf8\x20\x47\x24\xaa\x6e\x79\xef\xa6\x19\x06\x2c\xc9\x65\x9d\x61\x98\x5d\x87\x5d\x1f\x1c\x76\xb3\xe7\x96\xb6\x6b\xe8\x9e\x0b\x50\xd7\x45\xe3\x5d\xf3\xc6\xa2\x96\x90\x39\x31\xea\x79\xcb\x6e\x52\x16\x9d\x43\xc5\xc8\x59\x5c\xe8\x5b\x14\x3b\x3e\x76\xbc\xd5\xee\x59\x68\x35\xe5\x92\xef\xe3\x23\x02\x09\xb8\x63\x86\x44\xe4\x86\x73\x35\x98\x54\x69\x5a\xfb\xac\xc2\xf5\x39\x73\xc0\xd1\xd5\x0d\x32\xb3\xe3\xe8\x8d\xb4\xda\xdc\x16\xe6\x9f\xd9\xe8\xf5\xb2\x84\xa6\xd4\xaa\x1d\x65\x3f\x49\xac\x9c\xe2\xd3\xab\xc3\xc2\x2a\x54\xdd\xf7\x01\x81\x29\xe4\x30\x23\x22\x47\xef\xa2\x04\x65\xbf\x05\xd7\xb4\x4d\xd6\xd3\x72\x31\xdf\x1a\x2e\xc7\x71\x58\x5e\x01\x77\x64\xb3\xba\x46\x06\x8a\x87\xbe\x2c\x08\xd2\x41\xcb\x03\x29\x4f\x7f\xd0\x7c\x1e\x85\xa0\xdd\x30\xf9\x98\x8d\xe7\xcd\xb4\x83\x5c\xf9\xe2\x42\x68\x55\xe9\xee\xb3\xda\x4f\xe8\xa5\x83\x3a\x71\x53\xad\xde\x28\x35\x87\xe7\x12\x24\x05\xc0\x5d\xf6\x62\x6a\xb0\xb1\x7b\x76\x49\x15\x2f\xc0\xd0\x5a\x64\x6a\x25\x49\xa3\x0a\x6e\xf5\x02\x9e\xef\xe6\x22\xe4\x24\x79\xa9\x35\x70\x0c\xf8\xae\x2b\x06\x15\x3e\x1b\x45\x75\x82\x13\x7b\xd1\xdb\xd0\xdc\x30\x51\x2e\x05\x87\x94\x4c\x44\xa9\x39\xd3\xdc\x69\xb0\x8c\xf2\x71\xa1\xd0\xc0\x4d\x9f\x3c\x71\x72\xec\x4a\x9a\xb8\x91\xbd\xae\xa0\xbd\x63\x66\xdb\xf8\x3a\x90\x03\x39\xc2\x63\xaf\xea\x3c\x0f\x46\x93\xf1\xd3\xb7\xbe\x04\xb9\x0b\x8b\xa4\x95\xd1\x78\x31\x9f\x9d\xf4\x24\x9f\xe8\x12\xd5\x72\x92\xba\x02\x63\xf6\xde\xca\xe9\x0f\xef\x4b\x90\xe5\x74\x12\x39\xb7\xf6\x49\xee\x4a\x91\xc8\x84\xa3\xbd\xe2\x30\x2c\xf5\x1e\xd0\xd0\xf4\x2e\xd3\x61\x37\xba\xf6\x79\x9a\x48\xf9\x2e\x8e\xe0\x4e\x27\xad\xf0\x17\xad\xed\x48\x77\xf9\x90\x7b\xe8\x37\x7e\x5a\xcf\x46\x4a\xaa\x8a\xbe\xcc\xb1\xc7\xa6\x0c\x2b\xc5\xf4\x7d\xd8\x79\xce\x3c\xad\x92\x36\x89\x96\x74\x73\x2d\xdf\xf5\x24\x52\xce\x13\x02\x63\xf5\xcc\xb8\x59\x45\x9d\x51\x27\x6c\xee\xaa\x43\x95\xa0\xdb\xda\xc6\xda\x31\x8f\x26\x23\x94\x77\x48\x34\x2e\x0f\xe7\x59\x3c\x0a\x93\xbf\xa3\xf9\x44\x30\x10\x60\x23\x5a\x5c\x21\xaa\xd6\x1e\x1c\xec\x7d\xb3\xa7\x37\x61\xc6\xac\x59\x36\x17\x42\xa8\x04\xd4\x28\x02\xd5\xc3\xdb\xd2\x01\x40\xa7\x1c\xeb\x6e\xc8\x41\x43\x57\xd3\x15\x18\xda\xe5\xe6\x69\x50\x3e\x41\x47\x2a\x66\xad\x2e\xad\x0e\x79\x96\x09\x56\xf5\x78\xdd\x85\x76\x05\x64\xd2\xa6\xac\xd0\xc3\x91\x3a\x63\x3a\xca\x3e\xc6\x41\x98\xe9\xc9\x42\x8d\x73\x01\xb0\xeb\xd3\x6d\x10\x1b\xb2\x87\x79\xee\xb7\xc5\xb5\x60\xb8\x10\x36\xa1\x2c\x66\xb5\xb5\x06\x5d\xa9\x00\xca\x05\xdb\x50\xb1\xf9\x44\xe3\x2a\x24\xe2\x59\x4c\x50\xe5\x64\xbd\x6d\xf1\xae\xb8\x16\x22\xad\x70\x4a\xd1\xca\x4e\xed\xa6\x9f\x60\x2d\xcf\xad\xdf\x7b\x39\xc2\x15\x90\x08\x71\x3b\xa4\x2d\xc0\x89\x23\xc1\xe8\xe7\x39\x6f\x33\x56\x55\xd2\x34\xb8\x19\x36\x5b\xc5\x3e\x55\xaf\x32\x31\x98\x41\x46\xaf\x44\x27\x41\xe6\xe8\x7b\xcc\x3a\xbb\x8b\x1c\x07\x34\x83\xe2\xbb\x6c\x6f\x49\x89\x69\xc7\x58\xc9\xc8\x07\x0e\x97\x1e\x4c\x16\x69\x32\x44\x0d\xd9\x85\xa9\x50\xb8\x56\x5e\xcd\x4c\xc1\xb4\x2c\xe7\x99\x2c\xb9\x4b\xff\x80\x48\x9f\x92\x30\x0f\x82\xb2\x44\xc2\x39\x64\x58\xb1\x5f\xb8\x8d\xae\x79\x6f\xce\x6c\x4b\x73\xb7\xd5\x4d\xf9\x13\x6c\x53\x8d\xf4\xb0\xbd\xd8\xa3\x78\x69\x7f\x84\x6c\xf5\xec\x97\x7e\xd0\x7b\x7d\xd4\xdf\xf9\x34\xfe\x46\x5f\xf0\x45\xff\xf4\x29\x1f\xf3\x3d\xaf\x0a\xaf\xf8\x98\x8f\xfd\x40\xf3\x3b\x1f\xfa\xd2\xe3\x0b\xd5\xd3\x3f\xfb\x95\x0f\xb2\xc8\xde\xe2\xe9\x4f\x7c\xf2\xfe\x9f\x3e\xfc\xc7\xfe\xcd\x4f\x7e\xd5\x13\x7e\xe2\x71\x5f\xfb\x0e\xef\xfc\xef\xde\xe2\xbf\xfd\xa9\x97\x7f\xd6\x0b\x7f\xfa\xbb\x3e\xe8\x3f\xf6\x9f\xfa\x27\x3f\xf8\x20\xe1\xec\xb9\x3f\xf7\x9c\x6f\x28\xbf\xf7\xf4\x8f\xa1\xf9\xed\xff\xef\x5f\x78\xe6\xf3\x9e\xfe\xe6\x1f\xf9\xf1\xbf\xf5\x8e\xe1\xd5\x2f\x79\x1d\x79\xdd\x7b\x94\x1f\xfd\x53\x0f\x94\x7e\xdd\xff\xf9\x09\xef\xfb\x6f\xe1\x87\x1d\x5f\xf6\x8f\xbf\xfd\x2b\x39\x7a\xd6\xef\x7e\xef\xf1\x6e\xdf\xfd\xa4\x5f\xfd\xac\xbf\xfa\xed\xaf\x7d\x8f\x9f\x7e\xf5\x97\xbe\x98\x3f\x50\xfa\xb8\x77\x7d\xd7\xcf\xfc\xb0\x3f\xf7\xcf\x3e\x4e\xbc\xd1\x77\xbe\xfe\x49\xef\xfc\xdb\xe3\x35\x5f\xda\x9f\xf6\x2b\x3f\xfd\x94\xbf\xfe\xe5\xaf\x7f\xfb\xcf\x78\xd2\x4f\x8d\xc7\x3d\xc8\x4d\xfb\xb5\x1f\xfb\xe3\xff\xee\x6d\x5f\xf1\xda\x77\x7a\xd2\x8b\xf7\xc7\xbd\xea\x17\x3e\xf0\x67\xbe\xe0\xfd\x7e\xfc\xa9\x2f\xfa\xfb\x6f\xfa\xf7\xff\xc3\xab\x7e\xe8\xdf\x7c\xc5\x47\xfc\x89\x07\x4a\xc3\x47\x7c\xd9\x57\x7f\xf4\x3f\xfd\x73\xff\xe9\x89\xff\xfd\x25\x8f\x07\x1f\xf7\x56\xaf\xfd\xf9\x0f\x7d\xf1\x93\xff\xfb\xaf\xfc\xc5\x3f\xff\x4e\xcf\x7f\xef\x2f\x79\xf5\xdf\xfe\xae\x3f\xff\x40\xe9\x9b\x3f\xe3\xeb\x3f\xf8\x53\x7f\xe0\xb7\xbf\xf9\x5d\x3f\xe0\xd9\x5f\x02\xe2\x0f\xff\xd6\xbb\xbf\xc9\x7a\xf2\xf6\xfe\xfc\xef\xbe\xe6\xf8\x1f\x3f\xfa\xf9\x7f\xf9\x37\x3f\xf9\x0f\xc9\x56\x8f\xfa\x55\x6f\x38\x01\x50\xaf\x06\xce\xce\x4e\x66\x2f\x1a\xcf\x0d\x54\x92\x52\xac\x81\xca\x0a\x9b\xe2\x7e\x2c\x97\x0c\x0a\x07\x29\x7c\xb8\xa8\x08\x83\x77\x25\x28\x1a\x41\x89\x3c\xf4\x04\x38\x37\x75\x59\x7c\x0a\x66\xdb\x95\x1c\x3f\xaf\xfd\xc2\xfa\x38\x45\xc1\xe6\x34\x00\xf5\x21\x54\xcf\xc7\xc9\xef\x1a\x84\x03\x26\x75\x8b\x79\xc5\xcc\xc6\x35\xb6\xf3\xb0\x32\x73\x73\x29\xb5\x21\x1e\x02\x37\x1d\x45\x94\x87\x69\x87\xf5\x8c\x8f\x8c\x88\xb9\xeb\x37\xe9\x15\xe4\xec\xc3\xb1\x4a\x33\x55\x13\x79\xd5\xa3\x57\xa3\x59\xef\x43\xd2\x00\xf6\xd3\x85\x0d\x17\xa0\x52\x8f\xa8\x35\xe7\xd7\x5d\xe2\x02\x8a\x96\xab\xfc\xaa\x2a\x1c\x89\x4c\x42\xd0\xa0\xee\xe2\xa0\x2a\x29\x0d\x5d\x4b\x9e\xbb\x73\x63\xcb\x01\x52\x78\xf9\xca\x3a\xa3\xb7\x5d\x53\xd6\x69\x4c\x31\x48\xc9\x63\xd8\xb5\x1d\xeb\x82\x66\x4c\xc8\x4f\xa8\xe0\x40\x60\x37\x72\x2c\x98\x25\x56\xee\x6c\x15\x71\x6a\xdc\x75\xd7\x8d\xb3\xe7\xbd\x20\x51\x79\x47\x2e\x49\xe8\x2c\x1d\x8e\x56\xd5\xd4\x85\x53\xd4\x92\x65\x26\xfc\xbe\x1a\x36\xb3\x77\x33\xd1\x6a\x76\xde\x25\x56\xb2\x20\xc0\x18\x72\x86\x7c\x1c\x30\x2f\xdf\xa1\x04\x61\xf4\x54\xcb\xe6\x1d\x07\x79\xb8\x85\x24\x1b\x57\x41\x0e\x4e\x5d\x67\x8d\x0f\x9b\x6c\x3c\xaa\x4f\xdf\xd0\x7c\x02\x8c\x19\xa1\x91\xf2\xd1\x5c\x35\xc8\x37\xbf\x45\xed\x0e\xb7\xe1\x96\x7b\xa4\xd1\xca\xa9\x75\xe7\x8e\xdb\x91\x7a\x20\xf4\xbc\x4d\xe7\xbe\x41\x2a\x66\x4b\xb5\x89\x63\x9d\x26\x5e\x7b\x68\x47\x3c\x21\x95\xac\xb4\x70\x0c\x55\x2e\x00\x73\x6a\x53\x66\x9c\x25\x99\xd4\x95\xbb\x9e\x84\x4b\x74\x1d\x5c\x56\x3d\xf7\x1c\x99\x05\x2c\x7b\x1c\x64\xca\x58\x5d\x47\x11\x17\x20\x92\xb5\xb9\xb1\x33\x02\xaa\xe0\x59\x6b\x53\x77\x0d\x7d\x4a\xce\x80\x36\x79\x4a\xea\xc1\xe6\x4f\x98\x82\xdd\x4e\xe4\x0c\x93\xc9\x36\x0b\x80\x2a\xac\xcb\xc3\x1c\xee\xc8\x07\x4e\xa8\x62\x72\xd7\xe2\x6d\x6c\x27\x82\x86\x90\xdd\x9a\x2c\x0a\xd7\x3c\xb5\x21\x26\x3a\x20\x8f\xb0\x5f\x1d\x44\x05\xfb\xc6\x07\xb4\x91\x1d\xf1\xf7\x13\x70\x6f\x8b\x6f\xdd\x54\xa4\x09\x85\x0b\x02\x13\x49\x24\x1e\x2a\x29\x91\xc9\x73\x9e\x88\x4a\x31\xdc\x66\x45\xe3\x61\x3b\xbd\x72\xfb\x41\x33\x89\x77\x51\x9c\x82\x4b\x5b\xbb\xc6\x72\xe2\x04\xa3\xf0\xad\x9f\xd2\x73\xe4\x06\x89\x6e\xd1\xb0\x07\x39\x35\xdf\x0f\x7a\x9a\xc8\xd9\x36\xcf\xb5\xd8\x5d\xaa\x40\xa9\xb6\x91\x7b\x06\x41\xed\xf6\xd4\x81\xb4\x86\x07\x3c\x9d\x16\x7d\x5f\x55\xc7\x79\x2c\x8d\x7b\x1e\x71\x43\x63\x55\x49\x23\xc9\x0f\xc7\xa9\x3d\x6a\xf2\xbb\x61\xeb\x0f\x77\xef\x85\x8d\x15\xa5\xbd\xd4\x02\x81\x44\x56\xf8\x7a\x94\xe0\xf9\x85\x43\xb4\xac\xaf\xb0\xda\x64\xc1\x77\x47\x3a\xce\x3a\xde\xc4\x77\xa0\x16\x4b\x06\x4d\xda\xf6\xca\x24\x59\x03\xe3\x1a\x83\x41\xb9\x06\xcd\xb4\xb5\x57\xf6\x0e\x9d\x06\x6d\xc4\x73\x81\xcd\x71\xc5\x71\x97\x75\x27\x71\x89\x96\xfd\x6c\xc2\x83\x4a\x06\x51\x1e\xd6\xcc\x7a\xf4\x39\x64\x85\xc1\xa6\x16\x57\xf5\xcc\x62\x4e\xb4\x09\x6f\x0f\x8e\x63\xba\xcb\x43\x66\xa7\xea\x94\x1b\x3a\xd7\xef\xff\x13\xe2\x88\xee\x94\x9a\x1e\xc0\xf9\x09\x90\x2d\xd2\x4e\xba\x3a\xa7\xb3\x36\x66\x8e\x3e\xc8\x66\xee\xca\x11\xd2\x84\x97\x52\x67\xdb\x96\x8c\x2d\x37\x1f\x2b\xad\xb9\x4c\xd5\x74\xdf\x4b\xa3\x32\xc2\xe4\xb0\x70\x3b\x2b\x00\x02\xdb\x57\xcf\x77\xad\x00\x93\x4b\x47\x20\x1a\xb1\x09\xb8\x95\xc6\x02\xc2\xcc\xb5\x31\x30\x28\x32\x71\xd6\x92\xa4\xce\x18\x4e\x34\xd9\x08\xb2\x88\x7e\xcd\xbb\xd6\xa2\xcc\x5d\x5d\xa1\x30\x34\xdd\x86\x09\x70\x23\x52\xdb\x23\x21\x30\xc5\x76\x49\xcf\xa2\xab\x0e\x9e\x97\x17\xd3\x4e\x97\x4d\xbc\xdc\x5d\x30\x2c\x21\xc8\xa3\xeb\x2c\x1d\x85\xc4\x80\x37\x23\xe4\xe5\x2e\xd9\xbb\x5b\xc6\x02\x80\xe1\x14\x1e\x37\x0a\xc8\x79\x78\x76\x84\x6d\x14\xf5\xf0\xe2\xed\x51\x77\xc9\x3b\x68\xe6\x47\x61\xab\x89\x43\x59\xb1\x6d\xbe\xa5\x0a\x15\x9e\x02\xfb\xe0\xf9\x3a\xcd\x86\xb0\xae\x11\xc0\x06\xb2\xac\x68\xaf\xf9\x5a\xe4\x2e\x22\xf3\xc5\xc7\x00\xa2\xf0\x02\xbd\x85\xbb\xe5\xeb\x5a\x5e\xf2\x0a\xca\xbc\x96\xa4\xd1\x2f\xd5\xce\x98\x7d\x3b\x8e\xc5\x89\x67\x9c\xdf\x65\xe3\x40\xcd\xd0\x40\xf6\x0c\xd5\xea\x13\xed\x24\x29\x1d\xaf\x72\xe4\xcb\xfa\x4d\x76\x22\x43\xd0\x03\x1c\x56\x0a\x75\xee\x7b\x59\xdd\xb8\x7c\x17\xd9\x6a\x5d\xf1\x44\x2e\x22\x8c\x8a\x85\x54\x57\xe7\xf0\xd4\x39\x1d\x9d\xb7\xb2\x0c\x2b\x72\xf3\x01\xe0\x42\xf8\xb5\x88\x46\xa7\x3f\xca\x4d\xe0\x27\x2d\x49\x3a\x0a\x2e\xb7\xb3\x01\x3b\x67\x60\xb7\xa5\x1b\x8a\xc7\xe8\x23\x1f\x31\x0c\xd5\xda\x49\x39\xed\xcc\xe4\x93\x78\x30\xca\x5d\xd1\x61\x54\x09\xa1\x1d\x84\x1c\x49\x95\x46\x60\x5d\x47\xab\x50\x13\xfa\xca\xf0\x42\x40\x85\x3c\x09\xe6\x8b\xf1\x8a\xeb\x1a\x01\x6f\x58\xdf\xa5\x73\x3f\xf1\x8e\x60\x8e\x57\xc5\x92\x5f\x45\x77\xb2\x2a\x04\xd3\xd2\xed\xe0\xc0\x36\x79\x58\x28\x52\xd8\xdb\x39\x72\x55\x0c\x45\x54\x6f\xbb\x00\xc6\xa4\x2a\xeb\x75\x3d\xf6\x7e\x90\x7e\x31\x3c\x2c\xf7\xa7\xb3\x97\x1f\x3c\x51\x8e\x63\xad\xcc\xf6\x68\xd4\x16\x7d\xee\x97\x28\x9a\x3c\xd4\x7c\x1e\xb5\x9d\xba\x23\xcb\x71\xcb\x7c\xd3\x7a\xca\x9e\xf4\x66\x83\x1f\x70\xdb\x4f\xb5\xdb\xd5\xc5\x0e\xb1\xf0\x95\x1c\x1b\x39\xb9\x27\x88\x66\xdc\x8c\x15\xb7\x9d\xad\x44\xb4\x4b\x42\xd6\x99\x35\x7b\x1d\x51\x76\x42\x4c\x45\x2c\xf4\x53\x60\xc6\x25\x70\xd7\xd6\x99\x56\xb3\x0d\x3f\x4c\x3a\xc2\x24\x77\x0d\xb1\x36\x8f\x54\x2e\xd6\x0e\x88\x12\xd9\xf8\x5e\x94\x35\x09\x8a\x68\xf6\x5a\x23\xed\x68\x2c\xef\xed\x81\xb4\x71\x66\x16\xa5\x0e\xa8\xee\xda\xf9\xa4\x76\x5c\x76\xf7\xc0\xe8\x23\x6e\x7d\xa3\xca\xe0\x4a\x62\x85\xae\xd7\x53\xa4\xb8\x62\x8b\x2c\xe0\x4d\x1e\xdb\x1c\x8a\x34\xad\x6f\xa3\xc2\xf1\x99\x7d\x05\xd5\x55\xce\xcd\xc8\x60\x85\x30\xf7\x11\x7c\xd2\x30\x2e\x71\xd9\x0d\x11\x11\x4c\x83\xc8\xed\xbd\xd8\x1a\xd1\x01\xef\x7a\x12\xbb\xb5\x44\x0d\x6f\xd0\x08\xb8\x8e\x71\x80\x73\xdf\x83\x22\x3a\xb5\x5c\xea\x34\x0a\x77\x04\xf8\x7e\x19\x41\xbc\x52\x97\xa2\x76\xdd\x25\xf5\x33\x60\xdf\x71\x43\x60\x81\x95\x58\xd9\xc8\xa6\xb6\xb4\xf1\xb8\x99\x30\x3a\x36\x84\x81\xb4\xe1\x4d\x6a\x91\x27\x48\xf3\xf4\xb2\xdc\x65\x36\x4b\x4a\x2e\x16\x9e\x60\x1f\x39\xd3\x34\xe9\x0c\x3d\x4d\x0c\x1d\x6e\x0d\x6e\xf6\x90\xa6\xd9\xe6\x89\x42\x45\x64\xc8\x56\x67\x2e\xc4\x87\x2d\xe5\x1f\xb5\xef\xbe\xc3\xd5\x19\x24\x04\x8e\x4b\x9c\x8d\x69\x9a\xe3\xbc\x4e\xe3\x87\x04\xf2\x88\xa7\xda\x97\xd1\xd0\xca\x51\x24\xf6\xd8\x9b\xa6\xac\x0b\x23\xdd\x45\xa2\x61\x73\x45\x72\x49\x8e\x86\xf3\xc7\xa0\xbb\x07\x17\xd4\x19\xac\x0b\x6c\x10\x39\x37\x2e\x5f\x73\xe2\xab\x1e\x4c\x19\xe8\x85\xd5\xe5\x2e\xf3\x04\x57\x23\x17\x3b\xe6\xb9\xe4\xe2\x18\x73\x78\x57\x09\x61\x36\x6b\x31\x7c\xc4\x82\xf6\x1c\xa2\x91\xa6\x1c\x89\xbb\x9a\x4a\xea\xec\x2e\x50\x8b\x19\x29\x8e\xd9\x22\x16\x88\xe6\xaa\x03\xd1\xa6\xf6\x53\xee\xac\x75\x27\x6b\x76\xf8\x84\xa5\xed\x66\xa9\x99\x2b\x29\x58\x5c\xfa\x2e\x0b\x14\x19\x32\x22\x58\x22\x8a\x24\xae\xcd\xab\x0e\xe1\x22\xb2\x85\x45\x37\x81\x65\x03\xd1\xc1\x13\x43\x9f\x4e\xb7\xe7\x79\x08\x62\xc9\x5d\xe4\x6e\xb7\x72\xb8\xd6\x9a\xe3\x50\x6e\xe7\x07\xa7\xa7\x41\x88\x58\xeb\x91\x13\xb5\xba\x7c\xda\x8b\x6b\x79\x5c\xa9\x41\x4e\x96\x34\xd7\xba\x6b\x1a\x94\x17\xbb\x5c\x3e\xb2\xd7\xfb\x6e\x01\xc3\x07\xb2\x42\xba\xb8\xcb\x28\xe3\x3a\x1a\xee\xb5\x54\xee\xc3\xd6\x57\x3e\x29\x9c\x73\x23\x77\x2d\x9c\x6b\x35\xc7\xe1\xad\x20\x62\x0b\xe0\xbc\x0e\xdc\xe6\xb5\x65\xb2\x40\x68\x4b\xf5\x90\x87\xa8\x79\xf5\xc3\xb3\x06\xf1\x35\xf5\x8a\x60\x7b\xa8\xf9\x3c\x0a\x41\xbb\x63\xe7\x23\xe0\x85\x4f\x07\xa1\x03\x2b\x5c\x60\x1f\xe5\x80\x68\x45\x81\xd7\x38\x2f\x13\x4e\x5f\x9a\x84\x8a\x1d\x94\xf1\x98\xea\x24\xc7\xbc\x8b\x5f\xd9\x8f\x68\x4b\x85\x7e\x77\xa6\x68\xee\x64\xdb\x76\xd4\x39\x1a\x79\x9a\x44\x14\x0a\x8b\x25\x0f\x33\x00\xbb\xcc\xe4\x1a\xe0\x0a\xf9\x2e\x06\x5f\xa6\x4e\x1d\x7e\xf3\x27\xd0\x74\x41\x34\x17\xba\xa6\xae\xae\xf4\x08\xbb\x3c\xcb\xd8\x16\x2e\x97\xf6\x57\x1b\x17\x2d\x17\xa6\xfb\x5d\xc6\xaa\xf4\x5c\xb3\x27\xbf\xec\x01\x4a\x96\xb3\x0b\xbf\xe9\x91\xb7\xdd\xb1\xec\xba\x86\x92\x08\xa9\xfd\x96\xac\xdc\xaf\x03\x4e\x35\x4f\x01\xef\x6a\x3e\x97\x12\xd3\x5a\xd1\x9c\xb8\xf6\x70\x55\xb5\x42\x21\x5e\xb7\xa1\x34\xc4\x52\x4e\xb7\x81\x24\x75\x73\xd5\xc6\x7d\x13\xc5\x68\x6c\xee\xb2\x5b\x30\xb4\x93\x6d\xcb\xc3\x81\xf3\xe0\xd8\x74\x6e\xe0\x18\x89\xd1\x2d\x63\xc5\x1b\xa5\xe6\x12\x08\x4f\xa1\xe0\x86\xed\x63\x17\xe3\x75\x9b\xb7\xe1\x95\x0f\x03\xea\x54\xd6\x35\x8b\x2a\x59\xec\x9a\xfa\x48\x3d\xed\x0a\xa4\xad\xa2\xc7\xe6\xa1\x84\x01\xa0\xa4\x50\xe6\x6b\xf1\xf6\xb6\xd5\x37\xd8\x12\x43\x1e\xd0\x15\x95\x66\x8e\x6d\x56\x0e\x4f\xda\xca\xc7\xb0\xd7\x14\x64\xeb\x16\x12\x71\x4c\x22\xbd\xd1\x46\xda\x6e\xf2\xc3\x1a\x97\x47\x61\xf2\x77\xd8\x8b\x61\x54\x8e\xed\xf7\xcf\x78\xa2\xcc\xaa\x27\x8d\xd9\xed\xb1\x47\x72\x25\x82\x8b\x76\x51\x05\xdb\x1c\x90\xad\xbb\xd0\x57\xd8\xcc\x5d\x3b\x1f\x10\x15\xaf\xaa\x85\xa0\x0f\xba\x92\x52\x00\x6f\xf1\xb2\xe6\x5c\xea\xc8\x30\x54\x8b\xa9\x9c\xfe\x8c\x01\x0d\x2c\x27\x44\x6e\xa3\x77\x0d\xf6\xb1\x81\x62\x8a\x83\xb9\x97\x74\x49\xba\xda\x35\xd1\xde\x68\x42\x39\x48\x7c\x2e\xcf\xf6\x4a\x05\x60\x15\x40\xc3\xed\x9a\x07\xb8\x4d\x45\x21\xa4\x3e\xf7\x32\x2c\x2e\x2e\x99\x54\x38\x31\x0d\x65\x82\xb7\x56\x6c\xc3\x76\x1e\x41\xd4\x76\x74\x76\xe4\xeb\x80\x8c\xa4\xd8\xf3\x6d\x1a\x17\x05\x8b\x26\x03\x38\x34\x18\xb1\x43\xa4\xc8\x05\x3d\xbc\x6c\x29\x6f\x64\x9b\x4b\xe0\x78\x25\xde\xb0\x99\xba\x0a\x65\x18\x26\x37\xed\xc1\x08\x60\x5b\xcd\x51\x1f\x87\xe5\x88\xae\xbe\x28\xa2\x4c\xa0\x52\xd1\x81\x3c\x62\xb5\x4c\xd7\xc1\x86\x2b\x13\x25\x61\x35\x7b\x9d\x77\xcd\xea\x54\xe6\x63\x3a\xaf\x27\x3f\xed\xa0\xc0\xcf\x80\x7c\x0b\x40\xc6\x52\xb3\xd6\xc1\xaa\x79\x48\x6c\x60\xf3\x5e\x5b\x82\x0e\x5a\x1b\xbb\xeb\xdb\x99\x01\x56\xaa\x41\x85\x36\x48\xda\xe8\xe2\x16\x18\xa0\x4e\xb6\xa6\x88\x58\xeb\x0b\xcd\x89\xc0\xcc\x6e\xcb\x97\x03\xd4\x1d\x92\xb5\x87\xc8\x56\x8f\x72\xf6\xfa\x23\x64\xab\x37\x79\xc2\x93\xd1\xbb\xff\xd7\xf8\xd6\xdf\xf8\x55\xaf\x7b\x81\x79\xd1\x3b\x7c\xe1\x7b\x7f\xf0\x6f\x3c\xe5\xe9\xef\xf4\xff\xfb\xc9\x5f\x7a\xca\xf7\x6c\xfa\x0d\xfd\x1d\x1f\x28\xfd\xa6\xfc\xd4\x77\x7f\xe1\x7b\xbe\xf9\xaf\x7f\xe5\xdf\x78\xc3\xbf\xfa\x2b\x1f\xf5\xf3\x9f\xf6\xed\xf3\x99\xaf\x7c\xff\x17\x7d\xe5\x73\xff\xec\xfe\xeb\xff\xe2\x59\xeb\x7b\x9f\xfd\x40\xe9\x13\xdf\xfc\x03\x3e\xf8\x53\x3e\xf9\x87\xbe\xe2\xc7\x5f\xf7\x1b\x4f\x33\xbf\xfa\x6d\xf9\x3b\x9e\xfb\xf2\x9f\x3f\xff\xc6\x5f\xff\xd6\xd7\x7e\xdf\xd3\x5e\xf4\x27\xff\x2c\x7c\xd0\xae\xea\x75\x9f\x2e\xdf\xe3\x03\x7e\xed\x3b\x7e\xf7\x1b\xbf\xfd\x5b\x9e\xf1\xc4\x37\xbc\xdf\xd7\xfd\x83\xef\xfc\xc8\xcf\xf9\xac\xbf\xfc\x0f\x7e\xf8\x95\xef\xf2\x89\x4f\x7d\xe7\x37\xf9\xd8\x6f\x79\xa0\xf4\xbd\xbe\xee\xb3\x3e\xf3\xab\x5e\xf2\x23\x1f\xf6\x0f\xc8\x87\xcc\xaf\xb5\xff\xf0\xd9\xed\x29\x9f\xf2\xdc\x77\x79\xc5\x6f\xfe\xc8\x2b\xdf\xf4\x75\x7f\xeb\xf1\x3f\xf9\xc9\xe1\x81\xd2\x7f\xfd\x93\x2f\xff\xd2\xe7\xbc\xfa\x49\x5f\xfa\xda\xe7\x7f\xe2\xc7\xf7\x3f\xf6\x33\x1f\x1e\x3e\xf8\x77\xf5\xdf\xf8\xc0\x0f\xfc\x77\x1f\xc5\x5f\xfc\xbf\xe5\x6f\x7c\x8b\x07\x4d\xb0\x7e\xfd\x97\xfe\xde\xfb\xfe\xe6\x47\xbc\xfc\x13\x9e\xfa\xb6\xbf\xb3\xbe\xf8\x23\x7e\xf8\x7b\xbe\xfc\xc3\x5f\xfb\x9e\xe0\xb3\x3e\xe3\x2d\x3e\xfe\xc5\xf8\x07\x5f\xf0\xc6\xf4\x93\x1e\xf4\x62\xfb\x6b\x5f\xf3\xfc\xef\xfd\xa1\x3f\xfd\x85\x2f\xfd\xed\xed\xc9\xff\xf9\x9d\x3e\xe3\xbb\xc2\xcb\x3e\xe1\x73\xbf\xf7\x17\x7f\xfc\x77\xbe\xfb\x77\x3e\xf8\xb9\x9f\xfb\xf1\xff\xe3\xcd\xff\x90\x6c\xf5\xa8\x5f\xf5\x06\xbe\xc3\x82\xe1\xea\x6d\xb3\x65\xc7\x39\x1c\x6c\x1a\x75\xf4\x89\xdc\xb5\x4e\x76\xd0\xb2\xce\x5d\x42\x01\x92\xf6\x83\xc8\xa2\x3c\x3e\x18\xbd\xeb\xcb\xde\x4a\xa2\xf1\x9a\xf9\x24\x54\x90\x81\x75\xe4\x0b\x4e\xdb\x8b\xbd\xb6\xcc\xa6\x03\xfb\x14\xdc\x1d\xd0\x68\x0c\xab\x6f\xcd\xe6\x7c\x97\x83\x40\x8b\x3e\x04\x24\x77\xef\x3c\x4b\x21\x9c\x4d\xb0\x6d\x91\x3e\x70\x15\x3b\x05\xe2\x5a\xae\xea\x13\xe2\xce\x01\xd6\x5a\x6a\x0c\xae\x9b\xf4\x96\xa4\xaa\xce\xf9\x39\x94\xde\xd2\xa5\xea\x10\xba\xed\x63\x57\x62\x5e\x88\x4c\xa6\x88\x91\x23\xc8\x09\x8e\x53\xc7\x92\x26\x37\x67\xbf\xcd\xcb\x40\x2b\x04\x08\x6b\x71\x31\x59\xad\x34\x10\x5c\xb4\xec\xae\x61\xc6\x4f\xeb\x37\x9a\xb4\x54\xb8\xed\x00\x35\xb5\xe0\x40\x5a\xa8\xdb\x3c\xb6\xbc\x98\xe3\x3a\x19\x4b\x9e\xae\x95\xb2\x2b\xfb\x55\xc6\xa9\x09\xf5\x7e\x83\x8d\x26\xed\xa2\x89\x5a\xf1\xb5\x31\xe7\xce\xa1\x02\xbc\xeb\xee\x1b\x62\x3a\x63\x0c\x23\x79\xb6\xd5\x9d\xa0\x3c\x1c\xa5\x83\xe9\x21\x3c\x88\x4c\x79\x85\x6b\xd7\x0b\x56\xbd\xe8\x69\x24\x95\xfb\x6d\x6f\x6c\x62\xbb\xd4\xb9\x75\x78\x92\xad\xe4\xcc\xa0\x3f\x2a\xbe\xea\x98\x1c\x22\xb5\x9a\x4f\xad\x52\x36\xcc\xba\x36\x2e\x8f\x14\x2a\xf8\x9f\xa8\x1c\x1f\xd5\xa7\xef\x80\x1c\x23\x3b\x32\xc1\xbb\x56\x79\x9c\x5a\x49\x3d\xf9\xa4\x9b\x85\xf4\xd8\x66\xef\xd6\xae\xc3\xed\xc2\x90\xdc\x0d\x5f\x7e\xe6\xab\xf0\xbb\xb6\xfe\x09\x2e\x7e\xca\x4d\x80\x58\xb7\x9d\x5d\xc8\x87\x22\xf4\xca\x51\x96\x6a\x75\xc1\xca\x0b\x9a\x70\xe5\x95\x85\x46\xb4\xa4\xca\xc6\xbb\xda\x20\xe3\x8e\xb8\x0c\x5d\xd2\x95\x27\x57\x26\x1d\x1b\xb4\x59\x6e\x49\x61\xa4\xc9\xd8\xcf\xb2\x82\x51\x63\x0b\x36\xed\x66\x63\x66\x37\x77\x89\xbd\x2f\x19\xae\x63\x2b\xec\x60\x90\x9e\x6b\xad\x91\xf4\xe4\x64\x4b\x50\x88\x00\xf8\x06\xce\xb3\xb5\xbc\xed\x27\x64\x0a\x81\xd1\xe0\xbc\x2b\xe8\x9d\x80\x25\x50\xa2\xd0\x7b\x0d\x8a\x39\xcb\x74\xbb\xed\xb0\x2f\x27\x0f\xa8\x3a\xdc\xf4\xe4\x97\x9a\x57\x85\xf4\xc0\x3b\x96\x66\x81\xdb\xa2\xc3\xbc\x54\xdc\x28\x72\x26\x0e\x83\x01\xe9\x38\x63\x02\xde\x36\xdd\x3c\xcf\xb9\x1f\x8b\x42\x0b\x69\xd5\xb3\x0c\x39\xb6\xcb\xbb\x8d\xde\xc5\x32\xd8\xf5\x59\x87\x83\x30\x2a\x95\xac\xa7\xb9\x52\x6c\xcf\x43\x23\xc1\xd3\x24\x38\xa2\xfd\x02\xba\x86\xb6\x05\xb1\x5d\xd3\x01\x7a\xaa\xbb\xd4\xb0\xd7\xe5\x1c\x40\x5c\x01\x10\x41\x6f\x40\x1c\xd9\x6d\xd7\x91\xb5\x6e\xb9\xef\x70\xc2\x85\x6b\x4c\x0b\xc3\xb9\x4a\x95\xec\xda\x75\x7a\x58\xe5\xf8\xa8\xc9\xef\x0e\x7f\x87\xc0\xe1\xb2\xbb\xd4\xde\xea\xbe\xb3\x63\x73\xe7\xb6\x17\x05\x92\xed\x6c\x17\x94\x0e\x78\xc2\xb6\x6d\xdc\x35\x6c\xb7\xbd\xe7\x78\x9b\x55\xc7\xd1\x21\xb5\x36\xae\x00\x69\x50\xc0\x19\xda\x75\x18\x27\x9e\xc8\x02\x0d\xb5\x98\xfb\x22\x10\xf3\x84\x57\x36\x36\x08\xba\xae\xdb\x80\x3e\xab\x28\xb1\x5a\x76\xdf\x5c\x63\x52\x75\x6e\x0e\x75\x41\x73\x0a\x66\xf5\x3c\x70\xef\x40\xb2\x71\x6d\x94\x9a\xa0\x42\x28\x4c\xa8\xbb\x38\xa7\x0b\x9a\xde\xc9\x31\x2b\x4f\xc6\x59\xe4\xfa\xc6\xba\x19\x5b\x54\xd4\x13\xd5\x90\xd1\xa5\x2e\x73\x11\xaf\x8c\x02\x1a\x62\x9a\xc1\x5d\x88\xba\x2c\x9d\xc9\xb6\x2c\x0a\x96\xbb\x14\x18\xa4\xc7\x88\xcd\xc8\x6b\x05\x06\x97\x85\xba\xc6\x4b\xec\x97\x94\x57\xcc\x59\x0a\x01\xca\x5d\x34\x73\x12\x4f\x5c\xf1\x09\xd5\x5c\x01\xd5\xb3\x92\x73\x97\xa7\xac\x9e\x74\xbf\xfb\x79\xad\xb9\x9f\x67\x50\x82\x9d\x07\x04\xf2\x4a\x10\xdf\x95\x76\x4e\xf1\xa8\x16\x66\x51\x20\xa1\xc8\x90\x2c\xd3\xe4\xa4\xec\x4e\x0c\xcc\x9b\xdb\xc2\xa5\x04\xf7\x1b\xdc\xdd\xea\x7b\xee\x23\xa8\xf3\xae\x10\x66\xc2\x54\xe8\xcc\x72\x78\x24\x9a\x4b\x81\x68\x37\x69\x3a\xc9\x2e\x9c\xcb\x95\xd6\xd1\x16\xb0\x87\xdf\xc6\x30\x06\x9d\xd7\x46\xc0\xff\xcc\xd9\xea\x51\x77\xc9\x1b\x26\x9f\x8d\x96\x5c\x35\x4d\x27\xea\x6b\xe8\xc0\x8c\x0c\xfc\xe2\xf4\xda\x69\x17\xc6\xe0\x28\x82\x3d\x7c\x98\x3a\x84\x6d\xca\x05\x60\xca\x77\x11\x99\x1b\x42\x1d\x21\x76\x95\x2a\x4b\x1a\x87\xdf\xfb\x66\xa6\xb4\xa9\xf0\xb8\xf6\x39\x00\xe9\xce\x74\x5a\x83\xd3\x55\x6d\x11\x14\x15\xef\xd2\x73\xcc\x90\x9d\xae\x97\x48\xea\xa2\x27\x99\x87\xed\x06\x30\x2c\xba\xc1\x3d\x8d\x76\xb4\xb1\x09\x6f\x15\x68\xe7\xa6\x78\xe9\x22\xa3\x75\x97\xd8\x5b\x79\x1b\x63\xf6\x1b\x3f\xae\xc3\xf5\x3d\x8e\x2d\x40\xc0\xec\x09\xe5\x36\x69\x5d\xdb\xb1\x56\x17\x1b\xef\xf1\xd8\xfc\x7e\x9e\xe7\x5a\x77\x85\xeb\x1e\xc7\xca\x17\xc2\x13\xa3\x3d\x83\x48\x8b\xa7\xd5\xab\x06\xed\x49\xe0\x79\x52\x65\xe0\x51\x2e\x10\x37\x8f\xb1\x1a\x7a\x9f\xfd\x9a\x77\xcd\x1b\xf9\xc4\x20\x73\x26\x52\x3a\x0e\xbd\xfb\x74\xb0\x84\x0a\xdf\xd3\xb1\xce\x49\x75\xb6\x3a\x13\x84\x1a\x8d\x4a\x14\x82\x02\x85\xe2\x2e\x9c\x8a\xe2\x38\x32\xf7\xa7\x97\xc7\x48\x87\x02\x73\x95\xb1\xd3\x25\xb2\xb5\xc3\xcc\x01\xc9\x14\xb3\x51\x9f\x93\xf4\x57\x37\x5e\x1c\xd0\xdc\xc5\x08\xde\x0e\x1c\x88\xe0\xac\xe2\xb0\x50\xb5\x00\x81\x7c\xb1\x13\x87\xd4\x8f\x66\x82\xce\x8b\x99\x14\xeb\x92\x47\x68\xc4\x4c\x9e\x30\x3c\x1f\x6a\x3e\x8f\xda\x4e\xdd\x31\xf9\x34\x7f\x1d\xc2\x43\x3a\x93\xd9\x8b\x1d\x6b\xe4\xe5\x17\xe3\xbb\x8d\x47\x50\x00\x1f\xa0\x70\x7c\xa5\x9a\x21\x76\x8d\xe6\xdd\xdc\x76\xa2\x01\xef\xf0\x09\x2d\x3d\xf8\x75\x98\x85\x73\xc9\x9d\x20\xea\x83\xd7\x88\xf2\xc3\xca\x24\x2e\xa4\x24\xa8\x53\x52\xe7\xac\xe3\xe8\xb6\xcb\x0e\xe9\x21\x63\xea\xa3\xe0\xd9\xaa\x5e\x6d\xa3\x00\x6f\x06\xd7\xad\x20\x55\x9c\xba\xd0\xb0\xdc\x63\x48\x66\xa3\xa6\x0f\x48\x79\xb9\xcb\xb1\x88\xc6\x0b\xa5\xb3\x1a\x9a\x77\xa9\x89\x1f\x3e\x47\xda\x91\xa7\xc6\x73\x2d\x24\x3d\x66\xe9\x2b\x5e\xc2\xe8\x35\x37\x3e\xa3\x42\x77\x59\xff\x10\xd3\x8a\xc1\x34\xd5\x53\x44\x94\x1e\x6b\x8b\x2d\x89\x36\xd0\x0a\x58\xc1\xb0\x8b\xcd\x6e\x50\x00\x9b\x46\x08\x87\x3d\xf0\xa4\xdb\x5d\xe6\xb9\xc4\x6a\xa6\x4e\x44\x38\x34\x1d\x6e\x17\x26\xd7\x11\x47\xb0\xfb\xee\x5b\x14\xa2\x56\xa3\x5c\x6f\x9e\x6c\xec\xdc\x76\xc7\xbb\x02\x66\xdd\x04\x7e\x52\xce\xba\xe7\xf2\x02\xe3\xcc\xb4\xea\x7a\xf9\xe1\xbc\x91\x38\x20\xe9\xdb\x71\xc8\xed\xc4\x1e\x9c\xc1\xf4\x4e\xd3\xd1\x72\x17\xb5\xdc\x75\x70\x57\xe6\x44\x5d\x89\xd9\x6b\x29\xd9\x79\xe7\xf9\x12\x09\x77\x1a\xe7\x0c\x32\x3a\xbd\x03\x70\x0e\xe7\x62\x38\x0a\x70\x0b\x30\x12\xf5\x43\xcd\xe7\x51\xfb\xee\x1b\x26\x1f\xd6\xaf\xd3\x19\x50\x29\x29\x6c\x3f\x1d\xe0\xd4\x1d\x34\xb4\xb8\x6b\xb1\xd0\x28\x70\x70\x81\xcd\x9e\xc8\x6e\x53\xe7\x2a\xb2\x71\x1b\xb6\x5f\x8d\x2e\xde\x5f\x7c\x3b\x76\x38\x3d\xbc\xa2\xa5\x17\x9c\x0e\xd4\x93\xce\x21\xfa\x08\xa7\xaf\x90\xc0\x15\x60\xd8\x01\xa3\x00\x5e\x77\xd9\xb3\xb6\x15\xc3\x01\x5a\x2a\x10\xba\x03\x07\x19\x28\x58\x5e\x8e\x4a\x0e\xdd\x30\x87\xdb\x3c\xb1\x03\x70\x28\xd7\x8e\xcb\x38\x43\x11\xb9\xab\xf9\xc0\x75\xaa\x98\x80\xf4\x08\x5b\x19\xbb\xc2\xf9\x3a\x3a\xda\x1c\xf7\x99\xa7\x9e\xaf\x21\xb7\xd4\x87\x70\x95\x1c\x81\x72\x08\x1d\xbd\x8b\x4b\x88\xf3\xc0\xc4\x6c\x40\x75\xe5\xd7\xc9\xd3\xc4\xa4\xd6\xb5\x92\xe1\xac\xb6\x38\xc3\x11\xf7\xa0\xd5\x26\x1a\xd7\xc8\xef\x8c\x9f\xf1\xae\x19\x0c\xae\xea\x2e\x06\xf8\x38\xa4\x22\x67\x51\x8b\xed\x6d\x0b\x5b\x29\x83\x0c\x18\xa7\xc3\x6c\xa3\x88\x8f\xed\xec\x8d\x13\x55\x2b\x98\x77\x59\xba\x38\xb3\xc1\xd9\x23\x9a\x5a\x69\x7d\x42\x10\x56\xdd\xda\xb4\x72\x05\x51\xe9\x66\x1f\x3b\xbf\x3c\xd8\x69\xa3\x47\xd4\xd7\xda\x63\xa6\x77\x89\x0e\x99\xef\x66\x3b\xe7\x98\x70\x01\x30\x10\x10\xe6\x60\xdb\xb2\x0d\x81\xbe\x24\x47\xe2\xa2\x3e\x2b\x2c\x94\x5e\x57\x42\x2c\xd8\x9d\x3c\x7c\xed\x7a\x14\x82\x76\x43\xf3\xc1\xab\x3d\x76\x64\x61\x55\xab\xda\xb0\x5c\x79\xe3\x99\x52\x54\x30\x84\x8b\x25\x7f\xd9\x42\x65\x4e\x69\x6f\x6c\xa8\x53\xb2\x2b\xdd\xf6\xc9\x63\x4f\x78\x64\x8d\xcd\x38\xcd\x35\x55\xe4\x03\x15\x40\x09\x4b\x1b\x9e\x6d\x58\xb2\xe9\x31\x39\xcc\xab\x56\xba\x04\x31\x01\x5e\xb7\x91\x76\x8f\x83\xcf\xb0\x37\xa2\x8e\xb5\x1f\x0d\xec\x14\x1e\xb3\x4f\xbc\xc8\xd0\x68\xd9\x4d\x38\xb8\x72\xb0\x2a\xa0\x5a\x7d\x94\x1d\xe6\xbb\x28\x4e\xfd\x32\xa0\x36\x7a\x41\x57\x2f\xbe\xe0\x1a\x98\x65\xcc\x26\xe3\xa7\x74\xbc\xe4\xc3\xb8\x8d\x30\x32\x52\x60\xd1\x1a\xb7\x0c\xbc\xcd\x56\xaf\x6a\x20\xa2\xcd\xb1\xeb\x0d\x83\x34\xb0\xe2\x95\x83\xda\x07\x2d\x50\x79\xac\x15\xcc\x62\xa7\x00\x02\x3d\xf7\x61\xa8\x4b\xe5\xae\x48\x5b\x1a\x08\x42\x70\x1f\x78\xec\xda\xd9\x83\x76\x73\xec\xab\x90\x0d\xf2\x83\x45\xba\xd2\xf2\x87\x82\xca\xb4\x20\x19\x96\x89\x92\x6b\xdd\x66\x41\x01\xfa\x86\xd8\xf0\xf3\xb4\xe0\x32\x7e\xf2\x78\x86\x0b\xd5\x12\xb6\x41\x27\x97\x43\x14\x54\xc0\xd2\x73\xc1\x84\x9d\x34\x36\x69\x7d\xd7\x5c\x5a\x70\x24\x0c\xe3\x9d\xec\x39\x53\xd0\xd5\xb1\x70\x08\x9d\x83\xc4\xcb\x4e\x57\xe8\xe8\x04\x35\x54\x70\x62\x7c\xec\x20\x1e\x0c\x4c\xfb\x50\xf3\x79\x14\x26\x7f\xc3\xb5\xeb\xec\xad\x41\x10\xc0\x8e\xa7\x1a\xa7\x70\x97\x8e\x71\x06\xad\xf8\x9a\xda\x16\xc0\xa4\xe3\x96\x68\xd3\x37\xc5\xf3\xbe\x8e\x6c\x6f\xdb\xf9\x2c\x23\xe2\x1e\x7c\x76\xcc\xe5\xb9\xb9\x7e\x18\x17\xf8\x76\x2d\xce\x14\x2f\x9d\x22\xa7\x1d\x90\x68\xe3\x8d\x53\x54\x39\xc8\x27\xbd\x6b\xcd\x2b\xea\x35\x80\x43\x62\xdf\x05\xdf\x4a\xb8\x08\xb8\x4e\xed\x26\x85\x40\x8e\x1a\x83\x51\xd6\xb5\x01\xd6\x4e\x88\xd5\x9c\x77\xb4\xcd\xbb\x52\x25\x91\x09\x4e\x29\xe3\xcf\x0d\x21\xd6\x85\x64\xdc\xea\x22\x05\x32\x36\xad\x81\x26\x64\x92\xa2\x1c\x35\x89\xfb\x75\x56\xd0\xd0\x02\x77\x69\x6a\xe1\x10\x63\x77\x7e\x6c\x5b\xb1\x76\x2c\x96\xb8\x62\x53\xc8\xe1\xf7\x63\xdb\x5d\x74\x4c\x3a\x7d\x42\xe7\x56\xbf\xc4\xc5\x63\xe3\xb7\x99\x1c\x00\xac\x00\xf7\x9b\x14\x10\xa0\x2a\x0a\xec\x11\x0a\xbc\x71\xac\x83\x5f\x12\x39\x40\xed\xc9\x58\xda\xcc\x6a\x71\x60\xab\x28\xb8\x2b\x41\x91\x76\x75\xe0\x84\xf8\x4e\x71\xa6\x6d\x36\xd3\x26\x28\x67\x5c\x52\xb1\x0d\xec\xc7\x55\x2e\x8d\x53\xce\x90\x87\x65\x59\x77\xe5\x44\xf3\xae\xdd\x20\xde\x91\x69\x87\x10\xde\x2f\x13\x88\x5d\x06\x1c\xd4\x21\x23\x0e\xd9\x39\x3e\x8f\xc0\x31\x94\x88\xf4\x1d\x14\x7e\xb2\xb3\x4e\xfe\xc0\xc2\xf9\x0f\xc8\x56\x8f\xca\x46\xfc\x23\x64\xab\x9f\xfb\xd9\x67\x7d\xf1\xaf\x7c\xe1\x87\xf7\x0f\xf9\xfa\xf7\x74\xcf\x78\xe5\xbf\x9c\x2f\xf9\x86\x67\xfc\x23\xf6\xbc\x5f\x7e\xc6\x5f\xf9\xbe\x77\x7c\xd3\x2f\xf8\xb6\x27\x7d\xc1\x03\xa5\xfe\x7b\xdf\xe5\x3d\xff\xf9\xe7\xff\xa3\x67\x3c\xe3\x1b\x9f\x65\xde\xe8\xed\xfe\x71\x78\x81\xff\xa6\x8f\x7e\xdc\x33\x7f\x7c\x7c\xec\xd3\x5f\xf3\xfc\x1f\xfc\xf5\x1f\xf9\xd9\x07\x4a\x3f\xec\x8d\xbe\x1e\x3f\xfb\x29\xf4\xa9\x9f\xf4\x99\xaf\xff\x6b\x3f\x6b\x9f\x43\x7f\xf5\x57\xff\xf7\xf9\xd1\xff\x07\xfd\xf4\x37\xbc\xfb\x5b\x7f\x61\x7a\xe9\xeb\x7e\xef\x81\xd2\xf7\xfd\x9d\x37\xfb\xcf\x4f\x7e\x87\x37\xfb\xc4\x4f\x7f\xe9\xbb\x3d\xfe\xe5\xcf\x7c\xe7\xff\x76\xfc\xf4\x77\xfd\x97\x4f\xfa\xe7\x2f\x7f\x5e\x78\xfe\x0b\x5f\xfd\x67\x7f\xf6\x79\x0f\x3e\xc0\x73\x3e\xe6\xcb\x3f\x0f\x8c\xcf\xff\x98\xf1\x86\xa7\xfc\xc6\x8f\x3c\xf1\xed\xcc\x13\xc8\x4b\xf5\xeb\x5e\xf1\x8f\xfe\xc9\x7f\xf8\xa5\x37\xfb\xd4\x3f\xf5\x8b\xaf\xfa\xd0\x07\x4a\x7f\xf2\x25\x6f\xf7\x79\xbf\xf8\x7d\xff\xf9\x9b\xbf\xf6\xab\x5f\xf5\x5c\xf9\xb2\xaf\xfe\xf1\xc7\xff\xc6\xdb\xfe\xc9\x9f\xfa\x81\x6f\x75\x5f\xf2\x13\xaf\xf8\xad\xcf\x79\xd3\xf1\x69\x0f\x66\x39\xfe\xad\xf9\xf8\x3f\xfe\x71\xbf\xf5\xea\x97\xff\xea\xcf\xfd\x93\xa7\xc3\xaf\xf9\xd4\x0f\x7a\xc9\x9b\xbc\xdd\x07\x7e\x22\xf9\x0a\xf9\xa1\xdf\xf9\xdf\xbf\xec\x2b\x9e\xf5\x20\xd9\xea\xd7\xbf\x6f\x7e\xe1\xdf\xfe\x88\x0f\xfa\xcb\xbf\xfd\xf6\x4f\x2b\xcf\xff\xe6\xb7\x7e\xe3\x7c\xbd\xe6\x67\xdf\xe6\xd7\x3e\xfb\xbd\x5f\xf7\x15\xdf\xfc\x11\x1f\x22\xbe\xfa\xd3\xfe\x90\x6c\xf5\xa8\x5f\xf5\x0e\x73\x19\xc9\x01\xdd\xe7\x36\x75\x4e\x8e\x1c\x36\x89\x08\x15\xc7\xda\x9d\x35\x49\xec\xd5\x8e\xdb\x72\x27\xac\xd1\x35\x7b\x4c\xb6\x1d\xeb\xae\x2c\xf6\x0b\x1c\x2d\x6a\x9f\x89\xae\xcc\xa2\xd3\x4e\x49\xb9\x55\x67\xc2\xc3\x5a\x3d\x5d\x2e\x9a\xb2\x7c\x65\x2e\xa1\x11\x58\x5b\x4d\xf3\x5d\x5b\x7f\x0e\x19\x70\x32\xe9\x84\x44\xd5\x3b\x8a\xc9\x0a\x20\x92\x1b\x65\x75\x54\xe2\xe6\xda\x5e\x8f\xb6\x5b\x5b\x4d\xbe\x58\xeb\x7c\xdc\x25\x79\x22\xb0\x7a\x21\x4a\x65\x96\x6f\x8c\xed\x76\x0f\x7e\x44\xb7\x38\x17\x67\x37\x3b\xdf\xe4\x11\x91\x3c\xa1\xd8\x74\xcb\x2c\xea\x0b\xd3\xbb\x38\x20\xd4\xc9\x02\xc7\x40\xa1\xeb\x3a\xf6\xe9\x94\x60\xe7\x06\x77\xb9\x23\x66\x2f\x64\x55\x47\x8b\xf1\xab\x5e\xac\xe2\x0c\x88\x3a\x03\x24\x77\xf1\x62\xae\x04\x4f\x12\xfa\x95\xad\xab\x9b\x24\x44\x73\xcb\xcd\x76\x91\xfd\x00\xa0\x0e\x7f\xee\x82\xe9\x2e\x33\x57\x45\x39\x49\x53\xa1\xfa\x2e\x5e\x4c\x1d\x9b\x6e\x5e\x9c\x97\x6c\x04\x3b\x46\x99\xd9\x10\x42\xb4\x4a\xe1\x2b\xef\x04\x68\x48\x28\x4e\xe3\x54\xc2\xd9\x3e\x8f\xc4\xe0\x5d\x54\x38\xb2\xca\x79\xd8\xdd\x29\xa0\x8e\xe8\xa8\x5a\x00\x06\xa8\x52\x87\x78\x37\xd0\x74\x2f\x4b\x4f\x70\xd7\xc8\x91\x4d\x47\x9f\xac\x8d\x0f\x8f\x9f\x8f\xea\xd3\x77\x90\xad\xce\x42\x0c\x3f\xf6\x7d\xa6\x0d\x24\xc3\x4e\x6c\xae\x13\x65\x81\x6a\x07\x58\x58\x61\x02\xe4\x6c\x57\x95\xf9\xeb\x52\x32\xfb\x53\xdd\x05\xe0\x1c\x1b\x33\x4d\x50\x4a\xe7\xc0\xb8\x0a\x04\x71\xb6\x1b\x86\x64\x69\xb3\xe0\x92\xd0\x34\x08\xb7\xb1\x9d\x63\xd0\xb3\xad\x83\xec\xfa\xae\x58\x9f\x7c\x5c\x3d\x08\x0c\x76\x8f\x33\x4c\x07\x66\x66\x09\x39\x5d\x8a\xa4\x65\x7b\xba\xe4\xb1\x17\xfa\x44\x99\x23\xbc\x1f\xc2\xa5\xb9\xee\x53\xaf\x41\x92\x68\xbd\x34\x92\x29\x90\xe3\xea\x5b\x31\x5d\xe6\x18\x58\xbf\x34\x52\x93\x16\x13\xd0\xa9\xc8\xb9\x23\x84\x90\x9d\xec\x2e\xa0\x8f\x1e\x43\x62\xb8\x95\x8b\xe9\xb9\xe1\x58\x51\x8b\x11\x1a\x58\x40\x13\x69\x65\xc1\x4d\x82\x05\x1c\x88\x1f\x88\x5e\x35\xf6\x6b\xec\xe9\x2e\x62\xd1\xac\x78\x9f\xaa\x0b\xe7\x0f\x26\x60\x20\x45\x72\x5d\x4f\x72\xaa\xe8\xab\x4b\xe8\xe8\xac\x97\x33\x8a\x8d\x2b\x13\xf1\xb4\x9d\xde\xd5\x06\x89\x88\x81\xd3\xcc\xb6\x94\xa4\x28\x89\xb6\x05\xbd\x5e\x12\x13\xe0\xf2\x9c\x07\x9e\x00\xf3\x33\x61\x2d\xed\xe5\xfa\x95\x41\x74\xb7\x51\xe1\xe0\xc1\xd3\xae\x42\x72\xe7\xc8\xd7\x44\x3a\x6c\x79\x58\x0c\xc0\x75\x0e\x88\x7c\x3e\xbd\xdb\xa8\xf7\x4e\x4f\x0a\xe2\xce\xea\x70\xfa\x61\x67\xab\x47\x4d\x7e\x37\x4c\x3e\xbb\xf2\x87\x3b\x32\x12\x68\xf0\x58\x54\xd9\xe1\x04\x57\x35\x7d\x0f\x5d\x54\x83\xd1\x48\xb1\xe5\xd5\x36\xd3\x62\xb6\x38\xc4\x6b\xde\x05\xe0\x90\xa0\x03\x12\xc6\xe7\xe2\x58\x99\xdb\xc5\xcb\x76\x54\x6c\xe9\x94\x75\x8c\x30\x77\x42\x2a\xd2\xc1\xc8\x38\xb1\x54\x54\xc2\x75\x17\xf8\x49\xaf\xc0\x63\xdb\xd9\xe2\x6d\x76\x3c\x98\x42\xc9\x66\x32\x0c\x36\x53\x6e\x06\xb6\x18\xb6\xd4\x38\x1a\xa6\x48\x77\xd4\xb6\x01\x7d\xd7\xd6\xff\xb1\x46\x6c\x60\x24\x0c\xcd\xac\x04\xdc\xea\x38\x10\x99\x53\xb5\x31\x67\x91\x5b\x72\x86\x73\xbf\xbc\x81\x36\xa8\x88\x61\xe4\xe4\xb6\x86\x5c\x8f\x0b\x4e\xc5\x9a\x91\x0b\xec\xb5\x6f\x69\xda\xba\x52\x3b\x37\xa3\xd7\x0a\x6a\x5c\x1c\xd6\xa0\x8c\x08\x88\x43\x5e\x03\x11\xf1\x26\x74\x88\xac\x43\x65\x65\x38\x6a\x49\x00\x8b\x44\xda\x1a\x2d\xa6\x47\x8b\x57\xf6\x84\x00\xa7\x5c\xd8\x33\x5c\x24\xca\x54\x64\xf3\x17\xbe\xcb\xc8\x9d\x8c\xa1\xd6\x80\x69\x1b\xa5\x24\x25\x94\xba\x38\xc6\xe9\x48\x78\x09\x7f\x34\x7a\xd6\xad\x31\xec\x4f\x2b\x6c\x27\x82\xe5\x51\xb1\xf2\x37\x3d\x09\x3f\x4d\xa2\x86\x8a\x03\xed\x09\x88\x92\xd2\xba\x5c\xdd\xe6\xac\x5c\x2f\x7d\x95\xae\x0e\x99\x0d\x96\x43\x65\xe7\x1a\xb4\x21\x3f\xe0\x2e\xfa\x07\xcd\xe7\x51\x77\xc9\x1b\x9a\xcf\xdc\x23\x4d\x98\x57\xb1\x19\xce\xb4\xf2\x1b\x72\xd8\x61\xbd\xb4\x02\x88\x1a\xb7\xd5\x9d\x70\x6f\x3a\xc5\x17\xa9\xf0\x74\xa5\xaa\xbb\x6c\xf5\x98\x60\x0e\xaf\xbd\xb3\x4e\x86\xe7\x33\x59\xc5\x4c\x75\xc2\x43\x88\x78\xef\x99\x0d\x33\xb2\xb9\x58\x72\x7d\x83\x78\x80\xa8\xcd\x5d\x00\x0e\x3f\xfd\x39\x4d\x09\x9a\x85\x92\x87\xdd\x8f\x40\x9b\xb7\x4e\xf0\x79\x65\x39\x75\x94\x85\x1b\xb1\xdb\xe3\xa8\x72\x83\xb0\x01\x05\xee\xf2\xd8\xba\x02\x55\xce\xc6\x48\x44\x84\x23\x2a\xa2\xe2\xca\x4d\x6f\x44\xe9\x2d\xa1\xeb\x38\x72\xe5\x60\xb9\x84\x03\xc8\x56\x65\x37\xce\xdb\xcc\xed\xc9\x76\x92\x06\x3d\xd8\xcf\x5a\xf5\xa2\xd4\xe3\x0d\xd6\xab\x1d\x2e\x2d\xe4\xd6\x86\xaf\x38\x94\xae\x33\x91\x4b\xd4\x0a\x60\x73\xf4\x36\xc2\x7b\x8b\x2c\xed\xda\x9c\xb6\xef\xd9\x8b\x68\xa0\xbf\xe8\x10\x9a\x89\x65\x08\xa9\x2e\x18\x42\x48\xa9\x34\x86\xdd\x1f\x5c\xfa\xed\x2e\x0b\x6c\x4a\x27\xe3\x4c\xb3\xc3\x6d\x5a\x29\xc3\x84\xb8\xa4\x16\x64\x11\x2d\x52\x9e\x8d\xe0\xdd\x43\xee\xbc\x0c\xe7\x35\x0e\x8e\x12\x9b\xe5\x2e\xc4\x2c\x53\x8b\x67\x63\x70\x25\xe7\x0a\x37\x12\x56\x7e\x56\xdc\x75\x80\xfd\xbc\x80\x4b\xe7\x92\xb6\xe5\x78\x72\xb1\xb1\x2b\x26\x05\xd8\xc3\x1a\x97\x47\x6d\xa7\xee\x68\x3e\x7c\xcb\x7a\x4a\x40\xa2\xd8\x63\x1a\x5c\x5c\x6c\xee\xa8\x99\x24\x74\x4b\xad\xb3\x9c\x54\xb3\x92\x49\x81\x16\x57\xad\x5f\xd5\xdc\x25\x12\x3a\x46\x68\xe5\xf2\xe5\xb1\x83\x0c\x2e\xd5\x6c\xb7\x96\xab\x70\x78\x6d\x95\xee\x3e\x86\xba\xa2\x39\x14\xc5\xb5\x34\x73\xb6\xd8\xe8\x5d\x88\xfa\x95\x11\x60\xd5\x11\xa4\xc2\xc4\xd2\xd8\x0d\x67\xd1\xa5\x68\x40\x1b\x9b\x56\x94\x51\xee\xad\x68\x13\x8f\x1a\x47\x60\x1b\x04\xf4\xae\xd7\x7b\x47\x12\x07\x87\x80\x9c\xae\xb1\x23\x89\xb1\xb3\x31\x67\x05\x1e\x7a\xc2\x73\x19\x46\x1e\x3a\xf3\xba\x97\xc1\x50\x3a\xb8\xd3\xf3\x2e\x39\xf1\x0c\x29\x89\x4d\xd9\x6e\x60\x8a\xa9\x9c\x56\x9e\xaa\xdb\xce\x54\x77\x6a\xeb\x28\xb0\x72\x71\xeb\xe4\xd8\x9b\x3f\x70\xb6\xa9\x97\xbb\x04\x76\x97\x86\x54\xa4\x00\x8f\xbe\xfb\xbe\xa2\x5e\x59\x9d\xb0\x69\x76\x5d\x8c\x17\xb2\x9f\x6a\xbb\x86\xef\x99\xa1\xd0\xcd\x6e\xbd\xc9\xb7\xbd\x27\xf1\xc2\xeb\xaa\x54\xa0\x33\x78\xc0\x4f\x9c\x2a\x4c\x36\x9f\xee\x24\x18\xaf\xa3\x44\x28\xd7\xbc\xa0\x5d\xf6\x98\x7e\xe0\x98\x9d\xb9\x4b\xa2\x01\xce\xee\x62\x30\xc1\x9d\xa7\xdd\x9a\xbf\x6c\x32\x6a\x1e\x91\xc8\x0b\xab\x4d\xb0\xc2\x24\x3f\xd5\x66\x94\x96\xad\x01\x3f\x2d\x02\x0f\x33\x3d\x1f\xb5\xef\xbe\xa1\xf9\x1c\x50\xa2\x91\xcb\xb9\x5b\x4b\x0f\x33\xf6\x52\x46\x0d\x7b\xcc\x71\xa4\xc6\xb8\x25\x71\xf4\x5d\x5c\x52\xd5\x75\x3a\x0c\x2e\x93\xc0\x4d\x38\x36\x39\x72\xb0\x72\xcd\x4d\xad\x63\xb7\xc5\x06\xe0\x3b\x5f\x98\x5f\x1c\x82\x1c\xe5\x76\x2d\x67\xa9\x0f\x4d\xf1\x89\xa6\x89\x5b\xb8\xcd\xbe\x84\xa6\x3e\xa0\xf4\x4c\x37\xb9\x8f\xab\xc9\xc2\x7d\x2b\x05\x33\xc9\x14\xb9\xb6\x24\x3a\x3b\x69\xc6\x74\x53\xd6\xc4\xee\xc4\x29\x09\xb8\x69\x9c\xa6\x12\x74\x81\x88\x83\xb2\xb2\x16\x49\xc0\x7e\x07\x70\x33\x20\xbb\x5e\x85\x2d\x0c\x21\x8f\x4a\xa2\xbd\x9f\x13\xec\x33\xec\x7b\xb9\x6b\xa5\x49\xdc\xd8\xe9\x5e\xba\xa2\x2e\x86\x28\x4c\x2f\x5d\x1e\x13\xd6\xb5\xf3\x20\x18\x2f\xfc\x20\x39\xce\x10\xa6\x11\x32\x35\x4d\x91\xd3\xb7\x51\x9c\x84\xe0\xa6\xe0\x6d\xab\xc8\x72\x94\xf7\xb6\x8b\xf3\x8c\x68\x37\xa0\x48\x2e\xf7\x66\xad\x15\xd9\x99\xb9\x25\xe3\xd5\x46\x31\x4b\x77\xf9\x8e\x5d\x40\x04\xbc\xef\x87\x91\xd6\x68\x11\x28\x39\xae\x43\xe9\x42\xd7\x88\x7a\xcf\x11\x5b\xe7\x2f\xb0\xce\x2b\xc3\x0b\xe8\x6d\x52\xa2\xef\x9a\x4b\x39\x77\x11\x77\x8a\xe3\x84\x4d\x67\x28\x76\xbd\x22\xab\xd1\x13\x8a\xe5\x96\xd4\x35\xbc\x07\xa1\x1f\x34\x30\x66\xcf\xd2\x1b\x7c\x20\xf2\xfb\x0f\x9a\xcf\xa3\x10\xb4\x3b\x9a\x4f\xb2\x1a\x0a\x9e\x33\x06\xd6\xa6\xfd\xf4\xac\x5d\x60\x2a\xe4\x30\xae\x05\xe8\xb6\x95\xcb\xc4\x1a\x4e\xe5\xae\xf3\x6a\xd9\x77\x7d\x17\x89\xa6\x9e\x6a\x35\x8a\xab\x2a\x31\x70\x23\x6d\xd7\x0a\x46\x36\x15\xbb\xb0\xdb\xce\x86\xbd\x2e\x7e\x32\xe4\x06\x69\x6d\x3f\x99\x93\xec\xae\xe5\x2a\x18\x74\x16\x73\x71\xcb\x3d\x73\x9a\x6c\x78\xea\x6a\x01\x90\xc2\x9d\x22\xa2\xbc\x48\x28\x41\x92\xb9\x07\xe1\x24\x6c\x9e\xfa\x72\xd7\x05\x90\x72\x81\x6d\x12\x97\x64\x48\xcf\x34\xdc\x00\x58\xe7\xc0\x10\x00\xb9\xf4\xe0\x6d\x24\xdb\x14\x45\x26\x69\xc1\x92\xe2\xa8\x6b\xde\xf5\xa1\xd1\xb5\x33\xed\x8f\x2c\x86\x5b\x1b\x42\xc6\x1f\xd7\x0e\xf8\xb2\x57\x3e\xce\x23\xc2\x42\x50\x8f\xa6\x56\x0f\x54\xae\xa9\x7a\x32\xee\xba\x8a\x12\xcc\xe9\x09\xce\xcd\xe6\x03\x8c\x76\x51\xb0\x50\x49\x51\x79\x8f\x16\x2c\xbd\xb9\x5d\x45\x31\xc1\x2c\x44\xef\x68\xb9\x45\x80\x88\x77\x35\xe4\x14\x59\x2b\x69\xed\xbb\x64\xb8\x16\xea\x1d\x49\xf1\x2c\x7e\x15\xc5\x08\x3e\xae\xc0\xc4\xe5\xe9\xc8\xc0\x61\x8e\xf4\x42\x67\xbc\xcd\x5d\xb4\x9e\xd3\xb9\xb0\x5b\x47\x78\x06\x82\x7b\x65\x07\x95\xbd\xa4\xf3\xa0\x71\x89\x29\x81\xea\x95\x0f\x5c\x48\x9f\x4a\x9e\xcc\xa0\xfc\xf0\xb5\xeb\x51\x98\xfc\x0d\x68\x97\xc9\x5a\x95\x81\xb4\x6a\x66\xb5\x10\x8f\x6e\xaf\x81\xd9\x76\xf1\x93\xa3\xd9\x32\x9d\x81\x59\x7a\xc4\x0a\x63\xe4\x75\x73\x23\xc6\xbb\xd0\x2e\x19\x37\x50\x86\xe1\xa3\x80\xc9\xc1\xd0\xdc\x55\x48\xc9\x96\x05\x08\x9c\xe4\x4d\x5e\x2a\x43\x1e\xb2\x61\x83\x13\x2b\x42\xa2\x77\xf9\x57\x92\xd3\x1c\xce\x54\xa0\xc4\xa5\x8b\xd0\xa9\x89\x72\x59\x2c\xa2\xdf\x89\x64\xe3\x00\x0a\xb5\x5e\xc4\x3c\x94\xcf\x9b\xb2\x74\xb9\x38\xef\xa2\x7d\xf5\xc1\x99\xe8\x07\x9f\x4b\x89\x84\x3a\xcf\x2a\xc9\x74\x90\xa3\xa1\x23\x0b\x2e\x2a\x67\x5a\x88\x0d\x77\xb7\x83\xb4\x25\x74\xc6\xdb\x6c\x7c\xa7\x3a\xaf\x91\x81\x4c\x99\x11\x29\x04\x8d\x78\x1d\x5b\xc4\xc8\xef\x5a\x5f\x76\xd9\xa8\xf2\x16\xa3\x35\xbe\xcc\x8c\x98\xce\xae\xdc\xa5\x71\x21\x4b\x72\xab\x7a\xf2\x14\xef\x97\x83\xda\xef\x15\x57\x2c\xcf\x69\x15\x09\xa6\x1f\x2d\x2a\x4b\x63\x8c\xeb\x48\x0e\x3a\x56\xe5\xba\xab\x0d\xca\x94\xf2\xd5\x93\x88\x0a\xa0\x93\x9f\xdd\x6f\x97\x40\x76\x6b\xe4\x90\xd7\xb0\xf2\x38\x20\xd6\x4e\xd8\xc3\xea\x9d\x29\x9d\xe9\xca\x77\xfd\x3b\x00\x85\xec\xa5\xeb\x39\x96\xa0\xe3\xbe\xce\x0e\x17\x64\x9d\x31\x05\x97\x4f\xa6\xc7\x61\xa6\xea\x4d\xec\xed\x8c\x4d\x1d\x26\x64\xfb\x10\xd9\x4a\x3c\xfe\x57\x7e\xe0\x63\x3f\xf5\xf3\xbf\xec\xc7\xe2\x47\xfd\x55\xf0\xc9\x7f\xee\xef\xbd\xcd\x57\x7e\xff\x67\x7c\xe7\x0f\xff\xc5\x7f\xf5\x49\x1f\xfd\x79\xaf\x7e\xef\xef\xfe\xcc\xf9\x47\xc8\x56\x5f\xf7\x84\x4f\x7f\xcb\x37\x7c\xd8\xdb\x7e\xdb\xb3\xbe\xec\x39\x2f\x7c\xcb\xf7\xfb\xce\xff\xf6\xc9\xdf\xf5\x33\xfd\xc7\x3e\xfb\x7f\x79\xe2\xf7\xfe\xdb\x2f\x7a\x9f\xaf\xf9\x4f\x3f\xfa\x8a\x07\x4a\xff\xe9\x37\xfe\x85\x0f\x7f\xf9\x77\x7c\xe4\xaf\xfc\xe2\x37\xbf\xe5\x53\x9f\xfa\xef\xdf\xe6\xab\x3f\xe4\x55\xdf\xf3\x8f\x7f\xe1\x6f\xbe\xec\x4d\xbf\xe6\x13\x3f\xfb\x85\x7f\xe2\x97\xf1\x87\x3d\x58\xfa\x3e\xe6\xe7\xc9\x73\xbf\xf8\x99\xaf\x79\xdb\x4f\xf9\xfa\x9d\x7f\xeb\x17\xfd\xd2\x9f\xfe\x80\x1f\xfc\x3b\x4f\x47\xaf\xff\xbc\xf7\x3f\xfe\xaf\x67\xff\x98\xfb\xf5\x07\x09\x4c\xff\xe3\x7d\x7e\x6d\x3e\xeb\xc5\xaf\x7c\x6a\xff\xaf\xaf\xf9\x99\x5f\xf8\xb1\xb7\x7a\xd5\xa7\xbc\xac\xbe\xe5\xf3\xbe\xed\x2d\x7f\xe4\xe7\xdf\xae\xfd\xa5\x17\xbe\xe3\xf3\x1e\x28\x7d\xcf\xe7\xbd\xe8\x4b\x5f\xf0\xa3\x2f\xfe\xdc\xef\xff\x7b\xdf\xfe\x78\xf6\xb4\xaf\xfc\x87\xea\x97\xff\xd9\x2b\xdd\xf3\xbf\xb6\xbc\xe9\x97\xbc\xc5\xdf\x7d\x97\xf4\x17\x5e\xf2\x40\xe9\x37\xbf\xd1\x93\x3f\xe9\x23\x9f\xf1\x7b\x3f\xf1\xe4\x27\xfc\xc0\xdb\xbd\xec\x4b\xbe\xed\x5b\x5e\xf7\x45\xaf\xff\xbc\xbf\xf8\xdb\xff\xe2\xd9\xc7\x8b\x5e\xfa\x6f\x7e\xfe\xbf\xfc\xf6\xd3\x1e\x28\x7d\xf2\x5f\x7b\xdf\xff\x97\x7f\x68\x7f\xfc\xef\xaa\xc7\x7d\xe8\x77\xfd\xcd\x1f\x7c\xc1\x1b\x7f\xcd\x37\x7d\x32\x78\x6a\xfc\xc1\xaf\x7d\xed\xc7\x3c\xe9\xf7\xfe\xd8\xb7\xfd\xe4\x03\xa5\x9f\xfa\xf8\x0f\xff\xa1\x97\xbc\xc8\xbe\xfd\x67\xfc\x99\x97\x3f\xe1\x2b\xde\x02\x7c\xf1\x0b\x9f\xf3\x7e\x7f\x05\x7c\xc0\x2f\xbc\xcb\xeb\xff\xc3\xdb\xfe\xc0\xbf\xfd\x48\xf3\xcf\xfe\x90\x6c\xf5\xa8\x5f\xf5\x86\x13\xa0\x21\x8c\x84\x06\xe7\x79\x96\xa1\x67\x5c\x71\xb8\x0b\x1b\xe4\xe6\x30\x30\x94\x13\xcd\xc1\x36\xb2\x09\xe9\xa9\x54\xce\xa4\xb5\x6e\x73\x30\xce\xe8\x32\x5b\x7a\xec\x7a\x0d\xfd\x14\x6b\x43\x2a\x18\xd3\xc2\xd8\x64\xd8\x78\x1b\x9b\x80\x80\x9c\x17\x5d\x34\x1e\x88\x10\xa4\xce\x79\x17\xa8\xd5\xdb\xe5\xeb\x41\xb1\x44\xd6\xf0\xc9\x2a\x62\x53\x14\xd4\x14\x0a\xc3\x82\x2c\xfb\x76\xd2\x82\x7d\xd5\x6a\x85\x70\xc2\xa5\x79\xba\x8b\x58\xd4\x0c\xed\xb8\x1c\x95\x95\x8b\xec\xbc\xb9\xec\x22\x34\x54\x6e\xa4\xbb\x45\xb2\xa5\x84\x2a\xc6\x16\x8e\x8e\x67\x25\x84\xc0\x8c\xdf\xe5\x79\xa1\x31\x54\x3a\xae\x81\xf5\x25\x4c\xbb\x36\xee\x50\xda\xf1\x05\x30\x0e\x26\x1e\xb0\x60\x2d\x60\xb7\x17\x3e\x9d\x85\xad\xec\x29\xe5\xbb\x3c\xb7\x41\x3c\xaf\xe8\x4f\xd5\x21\x22\x10\x2d\x20\xaf\x02\xbc\x0f\x3b\xbd\x02\x88\x63\x57\x17\x00\x70\x8f\x4e\x4f\x6a\x5c\xcb\x5b\x2b\xeb\xae\x6d\x0d\xf6\xb3\x82\xab\x28\xb1\x95\x2b\x9b\x34\x26\x63\x19\x5c\x52\x6c\x64\x05\x32\x87\x66\x48\x39\x78\x56\xa8\xec\x9a\xb0\x1e\x3c\x90\xbb\x68\xd9\x07\x95\xd0\x49\xa3\x5c\x20\x9d\x9f\x24\x5a\xef\xae\x0b\xe7\x92\xa5\xfa\xfd\x54\x71\xe6\x23\x5c\x67\xc1\x97\x8f\xc2\x0f\x39\xd3\x03\x8e\x24\x7f\xd0\x7c\x1e\xd5\xa7\xef\x70\x75\xf6\xb2\x4b\x2a\x69\x18\xce\x74\x9d\x64\xa8\x84\x70\x81\x6b\xb7\xa0\x90\x52\xa5\x15\x8a\x55\x27\x01\xb2\x86\xb1\x4d\x5a\xb4\xee\x5a\x32\x9d\xb4\xc3\xcd\x92\x62\xd6\xd9\x84\x9a\x9d\xa3\x7e\x2c\x52\xce\x7a\x6c\x10\x2f\x8b\xdb\xd0\xf5\xe4\xb6\x34\x49\x13\xb3\x87\x8c\xf4\x2e\x6d\xe1\x55\xd3\xb1\x47\x2b\x09\xdc\x95\x93\x15\x11\xe2\xb7\x84\x26\x3c\xdb\x59\xaa\x67\x4a\x63\x19\x76\x99\x76\x29\x2a\xe0\x28\xce\x64\xee\x22\x5b\x25\x21\x3a\x73\x97\xa7\xa1\x5a\xcf\xd9\xee\xb8\x25\xd7\x35\xd7\x3a\x9b\x1e\x8e\x89\x94\x08\x33\x7b\xde\x5a\xdb\x8e\x78\x4a\x21\x6f\x93\x9d\xe3\x13\x97\x90\x61\x10\xa4\xa3\x31\x3c\xd9\x07\x8b\x5a\x58\xda\xd8\xa1\x45\xd6\x0d\xf5\xec\x13\xdd\xa5\xa3\x1b\x1e\x12\x3a\x93\xef\x92\xf7\x18\x9d\x66\x68\x57\xb8\x5a\x94\x82\xd4\x53\x80\x73\x3b\x76\xb0\xdc\x19\x3a\x67\xf6\x92\xd7\xb9\x0e\xa9\x1d\xf6\xbb\x4a\x24\x43\x1b\xef\x32\x3d\x64\xa0\x0f\x77\x96\x15\x2c\xf6\x60\x85\xcb\x82\x53\x9d\x54\xeb\x3d\x5a\x90\x87\xa3\x82\x68\x52\xcd\xb0\x28\x79\xba\xe5\x8a\xf0\x5d\x97\x03\x52\x46\x32\x82\x90\x7c\xd5\xa0\x33\x94\xc1\x4b\x0a\x42\xac\xb5\x6b\x61\x4b\x84\x06\xe0\x63\xb2\xc3\x37\x0b\xca\x35\xb8\xda\x3a\x7b\x38\xc3\xf4\x51\x93\xdf\x0d\x8b\xb7\xad\xf9\x41\x97\x59\x6c\xe8\x25\x08\xbd\x3c\xab\x0d\x5c\x56\x52\x4a\xf2\x70\x7d\xf7\x32\x26\x23\x94\xf6\x35\x85\x06\xcb\x6e\xd7\x5d\x44\x66\x1a\xb7\x72\xe4\xfd\x40\x63\x16\x72\xed\xa2\x47\x50\x26\xef\x7a\x9d\xb0\xee\xca\x0c\xd6\x11\x31\x7b\x76\xe0\x18\x34\x80\x02\xec\xbc\x09\xfc\xa4\xe3\x40\xdc\x53\x22\x6d\x36\x16\x72\xde\x98\x6c\x5b\x88\x8f\x9d\xfe\x34\x5e\x19\xb7\xda\x45\x1f\xa4\x38\x06\x2e\x55\x26\x94\xfa\x2e\x2f\x65\x0a\x82\x64\xb5\x6c\xfa\xb2\xda\xa5\x96\x4a\xed\x52\x40\x39\xc8\xac\x25\x0a\x2f\xb3\x9b\x62\x51\x13\xed\x06\x67\x0b\xec\x64\x95\xdd\xa7\xe8\xa3\x7e\xe8\x26\x2c\xc3\x47\x10\x92\xba\xd0\xd7\xb5\x6a\x3b\x96\xde\xdb\xae\x93\x3f\xb0\xea\x82\xd5\xc4\x05\x9e\x9b\xb0\xe3\x2e\x9b\x1b\xb2\x1f\x93\xea\x0e\x42\xdf\x10\x66\x61\x55\x6a\x34\x4e\x51\x96\x40\x9d\x44\x94\x37\x54\x6c\x81\x64\x8b\x3b\x56\x53\x30\x13\xc1\x5d\x20\x39\x75\xc9\x13\x39\xcb\xda\x52\x30\x05\xe2\x26\x3d\xb6\x07\x28\x3e\x2b\x83\x8f\x7e\x64\x73\x96\x52\xda\xd4\x2b\x7a\xcb\x06\xba\xe6\xba\x0b\x72\x0c\x63\x77\x12\x06\x66\xd7\x59\xc4\x55\x18\x02\x16\x5f\x45\xba\x4d\xf4\x5d\x21\x2a\x23\x14\x26\x66\x72\x81\x95\xbd\xda\x65\x0a\x0f\x58\x0d\xfe\xe1\xe2\xed\x11\x77\xc9\x1b\x26\x9f\xac\x37\x35\x61\xa1\x27\x07\xf9\xb1\x67\xe6\xd9\xc6\x29\x1c\x8e\x53\xda\x12\x80\xaa\xdb\x31\x6a\x3a\x18\x58\xf2\x64\x4a\x0b\x79\x9b\x91\xca\xce\x34\xcd\xbb\xa0\xd7\xc5\x1a\x54\x48\x3c\x76\x94\xea\x2b\x87\xb0\x59\xbb\xef\x78\x76\x12\xd7\x79\xa5\xcd\x93\x1d\x9f\x46\x85\x71\x57\x44\x2f\x45\x59\x83\x1d\x4f\x87\xa5\xf2\x84\x11\x2d\x5d\xae\x2b\x12\x47\xdb\xc0\x21\xb1\x3c\xc7\x5e\x24\x76\x60\x38\xbd\x2e\x33\xa8\xba\x6d\xeb\x8f\xb0\xf3\xf5\x6c\xa8\xed\xcd\xe5\x83\x51\x9a\x74\xd0\x0d\xcf\x68\xf8\x61\x6d\xb4\xcc\x35\xd2\xb8\x72\x97\x96\x2c\xc8\x74\x62\x76\xd7\x0c\x16\x76\x01\xe0\xae\x73\x50\x53\x92\x04\x79\x03\xaa\x0e\xe9\xf7\x6b\xe8\xd3\xa6\xb1\x73\x5d\x30\x53\x20\xec\x71\x94\x5e\x1e\x7b\xa2\xbb\x76\xed\x5e\xb0\xbc\xd5\x22\x39\xab\x14\x55\x66\xad\x3d\xf3\xa5\xeb\xe1\x8f\x85\x88\xd3\x75\x3f\x55\x08\x30\x24\x3f\xa0\x6c\x4d\x07\x75\x97\xa7\x27\x85\x32\xc5\x34\x07\xcb\xed\x8c\x82\x92\x75\xaa\x1a\xc9\x19\x26\xad\xb5\x7b\xbd\xaf\xb5\xe3\x40\x3b\x92\xeb\x22\x69\x2f\x8a\xb2\x75\x17\x01\x2d\x0d\xa4\x1b\x49\xd2\xe5\xa4\xb2\xb5\xea\x98\xe8\x98\xa1\xb1\x02\xb7\xd4\x93\x39\xa3\xdf\xaf\x76\x30\x7b\xca\xda\x7b\x37\x81\xeb\xf5\x50\xf3\x79\xd4\x76\xea\x0e\x7f\x87\x50\x59\x16\x74\xe6\x72\xaa\x55\x2e\x17\x1d\x71\xa8\x4c\x35\x79\x45\x69\x8c\xc2\xd0\xaa\x09\x51\x66\x41\xc0\x70\xdf\x77\x77\x9b\xb0\x99\x96\xba\x29\xce\x56\xe8\x62\xe2\x1a\x22\x2f\x47\xdd\x5a\x4f\xdc\xd9\x4c\x60\xaa\x25\x53\x1c\x74\x0e\x9a\xef\xbe\x9f\x58\x94\x78\xd7\x29\xbf\x0b\x9b\x69\x8b\xfa\x98\xb9\x71\x53\xf5\x96\xaf\x5a\xa6\x85\x14\xa6\xd3\x1e\x44\x6d\x9a\x0d\x9a\x49\x3f\x22\x3e\x31\x6d\x16\xa9\xbb\x54\x14\x89\xb5\xa6\xa7\xde\x5a\x6d\x06\x61\xe8\x0e\x41\x07\x39\xf1\xa6\xeb\x51\xd6\x1e\xb1\x75\x74\x19\xb9\x2f\xbe\x61\x78\xd4\xde\x66\xbe\xeb\x93\xd7\x60\x04\xab\x2b\xc7\x63\x5f\x93\x0b\xb5\xa1\x04\x00\x2f\x8d\x74\x44\x75\x3e\x11\x24\x1e\x82\xb5\x65\x05\x7c\x70\x1c\x28\xab\xef\x72\xdf\xa8\x40\x52\x2c\x62\x23\x4c\x9e\x52\x14\xd0\x77\x77\x89\xab\xb7\xe9\xb1\x05\x78\x5c\x8d\xe7\xab\x47\xce\x2a\x84\xc2\x75\x4a\xcf\x78\xd7\x27\xef\xf6\xcd\xee\x5b\xad\xd0\x6d\x8c\x2e\x33\x97\x12\x15\x6d\x6c\x9d\x31\x79\x26\x7c\x07\x39\x57\xba\x96\xea\xd6\x4f\xb1\xa2\xa2\xf0\xae\x4b\xf1\xd8\x8a\x48\x06\x65\x36\xe0\xbe\x57\x89\x97\xd6\x39\x0e\xb6\x49\x71\xd4\x13\x26\x8c\x6a\xa2\x50\x84\xd1\x3b\xd3\x29\x56\xbe\x43\xf7\x50\xf3\x79\xd4\xbe\xfb\x86\xe6\xb3\x5a\xe1\x8a\x46\x93\x49\xe3\x36\x75\x39\xf1\x49\x86\xc8\x9e\x83\x5d\x2a\x79\xd0\x73\x6e\x14\x07\x3e\x2d\xb0\x0c\x8c\xa4\x59\xbc\x8b\x30\x92\xd2\xdc\x8f\x78\x75\x9b\xf4\xc6\x8a\xdd\x46\xdd\x65\xdf\x7d\x84\x28\xa9\x0b\xeb\xc5\xcb\xdc\xae\x3e\x32\xaa\x33\x55\xa3\x38\x48\x77\xad\x34\x99\x39\x7b\xe1\x49\x83\xee\x15\x50\x7c\xc7\xa3\x66\xa3\x2c\xda\x0e\xe7\xb4\x1e\x5c\xec\xa8\x74\xeb\x30\x0d\x7c\x36\xdc\xc0\x30\x77\x99\xf5\x7b\xd0\x85\xa0\x2a\xef\x4c\x6d\xe6\xb8\x32\x04\x23\x06\x7e\xd4\x7e\x0e\xda\xe3\x35\x83\xe6\x16\x60\xbc\x73\x9d\x4d\xe9\x22\x36\x70\x97\xab\xc2\x75\x5c\x5a\x1d\x32\xe4\x00\xda\x59\x13\xdf\xf6\x7c\xb1\x34\x20\x14\x1a\x89\xfd\x18\x83\x9d\x16\x3a\x28\x7c\x53\xcc\x2f\x81\x61\xbe\xeb\x90\x1a\x27\x93\x57\x74\xe7\x39\x2b\xb1\x11\xc4\xab\x9d\x42\xee\x69\xcc\xee\x57\x9e\x3d\x08\x89\xce\x52\x0f\x43\xbd\x1f\xc7\xef\x9b\xa2\xde\xc5\xf4\x2c\x0a\xb9\x33\x6f\x01\x74\x90\x6a\x3b\xf7\x03\x94\xe0\xe6\x26\x2a\x84\x4a\xbb\x70\x50\xa8\x8a\xbc\x76\x42\x63\x82\x8d\x4c\xed\xd4\x5d\x47\xc3\x40\xd5\x4c\x42\x74\x4f\xc3\x80\xe5\xe0\x28\xc5\x25\x2d\x5b\x2e\x53\x68\xad\x0f\x95\xe7\x1a\x57\x91\x85\xd2\x36\x5d\x1e\x3c\x3d\xac\x71\x79\x14\x82\x76\xc3\xce\x27\x42\x3e\x76\x37\x1a\xe1\x57\x6a\x02\x91\xac\x4f\x24\x12\x69\x02\xb6\x1c\x30\xeb\xb8\x01\x72\x89\xd5\x2e\x7c\xd4\xc6\x46\x6c\xe6\xae\x1f\x10\x11\x57\x86\x2d\x41\xeb\xec\xa4\xd9\xb6\x6d\x1f\x61\x9c\xa0\xa9\xdc\xe9\x81\x17\x0e\x69\x65\xcb\xe7\x94\xe6\x34\xbe\x76\x8f\xe9\x5d\x57\x0c\xa3\x8f\x0b\x61\x5f\xe6\x26\xe2\xf4\x6c\x17\x12\x04\x8c\x7b\x2d\xf9\xd2\x5b\xd7\x95\x9a\x00\x35\xd9\x81\xdc\xa4\xa7\xca\xf2\x08\xee\xda\x2a\xf8\x2c\x2e\x92\x81\x6b\x32\xd2\x7d\xcc\x0d\x60\x3f\x52\xed\x65\xc2\xdf\x87\x51\x7c\xb9\x92\x1e\x98\x1c\x6b\x27\xf8\xda\x27\xab\xf4\xae\xa4\x72\x5b\x09\x08\x65\xdb\x96\x28\x87\xd3\x62\x97\xb2\x04\xc3\xba\x90\x0e\x6c\xa6\x6d\xcb\x80\xed\x0c\x03\xca\xbe\x28\xa5\xc5\x6f\xf5\xae\x74\x33\x32\x09\x58\xec\x04\x09\x03\x09\xc4\xb2\x47\x3a\xfd\xc8\x98\x16\xaf\x20\xdb\x82\x50\x61\x69\x6e\xec\xe6\xcc\x95\x37\x77\x2d\x80\xf5\x5d\x08\xe0\x05\x0b\x6f\x8b\x69\x5f\xa6\x22\x65\x6e\xe9\x24\x3b\x0b\x08\x05\x93\x77\xb9\x0b\xb4\x0e\xb2\x45\x69\x11\xd9\xec\x01\xdc\x89\x3c\xbb\x8b\x6c\x45\xbd\xb0\xe0\x00\x63\xec\x6e\xb9\x31\xa0\x57\x1e\x9e\xae\x80\x44\xb7\x46\x4c\xb0\xf0\xc0\xbe\xd6\x22\x4a\x17\x7a\x14\x19\x98\x0e\x0f\x35\x9f\x47\x61\xf2\x37\x34\x9f\xde\xd1\x24\x9a\x6d\x0b\x7a\xe4\x6b\xd8\xfb\x89\x87\xb3\xd0\xe2\x2b\x15\x76\x51\x74\xe9\xf3\x52\xbe\xd9\x09\x4f\x34\x08\xba\x82\xba\x4b\x4c\xe6\x01\x26\xb5\xda\x48\x3b\x9f\xc7\xae\xce\xbd\x84\x34\x7a\x43\x92\xee\xa7\xc2\xd2\x77\xa3\x19\x21\xa4\x4e\x09\x7a\x4b\x78\x2c\x70\x57\x1b\xe4\x69\xb5\xdc\x92\x06\x8c\xcd\x6a\x14\xf1\x88\x64\x06\xf3\x21\xf1\x25\x7d\x91\x08\x14\x30\x46\x37\xe9\x80\xcb\x18\x55\xd0\xba\x4d\xf7\xb3\x86\x61\xc4\xa2\x89\xfc\xb1\x6b\x18\x0f\x67\xa9\x23\xe7\x8e\xdd\x89\x2f\x91\x36\xc4\xcf\x08\x58\xb4\xb3\x68\x29\x84\x58\x17\x87\x77\xc5\x06\x90\x46\x40\xb5\x23\x9d\xc4\xcc\x8d\xc4\xba\xf2\x1a\x6b\x74\xba\x29\x46\x55\xda\x58\x5d\x89\x4f\x11\xa4\x8a\x00\xcb\x60\x74\x04\x77\xe5\x75\x52\xbd\x19\xa9\xba\xf4\x4a\x5f\xec\xbc\x54\x9d\x36\xc4\x75\x72\xa4\xc0\x2e\xa0\x2e\xc7\x41\x71\x74\xa1\x7b\x10\xa4\x69\x7a\x9c\xe4\x2e\x93\x03\x40\xb5\xe4\x39\xc0\x26\x04\xc5\x66\x86\xfd\x74\xd3\x92\x9d\xef\x3b\xe0\x9b\x76\x61\x64\x74\x85\xbe\xb2\xda\xb8\xdc\xb1\x3f\xe0\x6d\x6f\x6c\x0c\x43\x4b\x67\x93\x2f\x52\xa1\xb1\x0b\x5a\x55\x50\xdd\x76\x05\xa7\x3f\xca\x7c\xec\x38\xdf\xed\xc4\x9d\xe9\x1d\x81\x63\x71\x9c\xf1\x43\x64\xab\x5f\x79\xa3\xf7\xf9\x8f\xcf\xfc\x7f\x3e\xe7\x37\x9f\xf5\x26\xaf\xf9\xb9\x9f\x58\x6f\xf5\x3e\x5f\xfe\xb8\x27\xff\xf1\xbf\xf0\xf6\xdf\xd0\xbf\xe7\xcd\x3e\xf6\xf3\x7e\xea\x1d\xfe\xbd\xfa\x23\x64\xab\x4f\xfa\xd8\xff\x3f\xfd\xf1\xb7\xff\xe8\xdf\x7b\xdd\x2b\x3f\xe7\x5b\xde\xe3\x5b\x5e\xfd\x77\xff\xd7\xcf\xff\x99\xd7\xbd\xe1\xc9\xef\xf9\x77\x7e\xe6\xb7\xde\xed\x83\xbe\xff\xdd\x5e\xf1\x86\x07\x4a\x3f\xff\x6d\xfe\xe5\xd7\xbd\xff\x2f\x3f\xf9\x2f\xbd\x8a\xd1\x6f\xfd\x9a\xf6\x2c\xf1\x1f\x9f\xf8\xb8\x57\xf1\x9f\x7b\xfd\x27\xbc\xeb\x67\xbd\xf5\x77\x9f\x6f\xec\xc6\x03\xa5\xff\xfc\x1d\xc9\xf1\x4e\x4f\x7b\xcd\x5b\xbc\xe0\x2b\xb7\x3f\xf1\x26\xbf\xf5\x97\xde\xef\xbd\xde\xf5\x13\x3e\xfb\xf9\xdf\xfa\x8a\x0f\x7a\xc2\x77\x7f\xdc\x9b\x7c\xee\x73\x5e\xf1\x5e\x0f\x94\xfe\xd4\x33\x5f\xf6\xa3\x7f\xe6\x37\x1e\xff\xf8\xaf\xfa\xa6\xef\x7f\xf5\xdf\xfa\x91\xef\xf8\xd7\xaf\xfb\xa2\x97\xbd\xd2\x7c\xc3\xdb\x3d\xfb\x67\xdf\xea\x97\x9f\xf2\x96\x7f\xfb\x53\x5e\xf0\x40\xe9\xa7\xbc\xed\xbf\xf8\xe5\xff\x8f\xb6\x3f\x8b\xe2\xe6\x29\xcb\x43\x51\x85\x18\x11\x0f\x4e\xc8\x24\x83\x91\xa0\x48\x44\x85\x1a\xd5\x10\x51\x51\xcc\x11\x70\x3a\x91\x28\x60\x62\x4d\xdd\x5d\x5d\x55\x5d\x73\xd7\x20\x78\x40\xc0\x28\x20\x01\x94\x10\x44\xa2\xa2\xc4\x11\x70\x88\x40\x90\x64\x23\x8a\x21\x62\x50\xdc\xa8\x5b\x8d\x41\x11\xa3\x10\x41\x24\x3b\x51\x09\xe8\x5e\x7f\x58\x31\xdf\xf2\x73\xad\xef\x22\xbb\xaf\x7e\x37\xef\x45\xfd\xaa\xab\x9e\x7a\x87\xe7\x7d\xde\x27\xdc\xfb\xcd\x9f\xf3\x9c\xbf\xa3\x7f\xf1\xad\x9f\xf5\xaa\x0f\xcf\x5f\xfe\xc5\x9f\x7a\x27\xfb\x13\xdf\xff\xb0\x8f\x7d\x24\x7a\xd4\x17\x3f\xef\x93\x6e\x30\xbd\xc7\x9f\x3f\xe2\xbf\xbe\xfb\x11\x5f\xf0\x2d\x22\xbd\xf3\x77\xde\xf8\xe4\x2f\x64\xcf\xfa\xfd\xcf\xfb\x55\xf3\x03\x8f\x7b\xdc\x5d\xd7\x17\xbd\xfc\xfc\x59\x71\xe3\x5a\x7f\xeb\x75\x7f\xfe\x88\x3b\x7e\xc8\xf9\x9d\x3f\xf7\xff\xfd\xc4\x9f\x7f\xe6\x77\x7e\xe2\x0f\x3c\xfc\xdb\x1e\xf3\xda\xdb\x3f\xeb\x31\xf9\x3b\x5f\x73\xc7\xdf\xfb\x0a\xf7\x61\xdf\x7b\x83\xe9\xef\xbf\xeb\x19\x1f\xf3\xe5\xed\x65\xdf\x83\x3f\xfe\xed\x1f\xfe\xca\x27\xfe\xd1\xe3\xbf\xfd\x57\xca\x8b\x9f\xdd\x5e\xfe\xe3\xbf\x7b\x87\xff\xcf\x37\xbc\xee\xbe\x0f\xfe\xa8\xbf\x24\x5b\xdd\x6a\x57\x2f\x78\x01\x9c\xb4\x55\x0d\x6a\x36\xa4\x0b\x0d\x78\x85\xa2\xf0\xdd\xd1\xe9\x45\xd7\x9d\xec\xbb\x44\x08\xe6\x02\x93\xeb\x05\x2f\x12\xb2\xcb\xba\xe5\xf9\x8c\xd8\xd5\x60\x67\xf7\xa6\xc2\x14\x63\x5f\x57\x32\x0f\xd0\xc1\xa6\xc1\xd8\x03\xee\x6d\xdd\x65\xc1\xfb\x56\xcf\x40\x30\xc1\x7b\xbe\xaa\xd1\x88\x63\x3a\x4a\x47\xfb\xec\xc4\x6f\x0c\xa7\x10\xcb\xe0\x69\x03\x26\x0e\x0e\x17\x44\xb2\xe4\xa1\x23\x9b\x45\xca\x13\x33\x73\xda\xcb\x26\x6b\xe0\xe6\x7b\x02\x53\x18\xb5\x9c\x29\x98\x9c\x01\xd3\x3e\xcb\x4a\xc1\x8a\xf5\x34\x41\x80\x6c\x0c\x3c\xc1\x81\xcf\xbc\x22\xe8\xcb\x65\xd2\x3f\x58\xa6\xd5\x1d\xab\x9f\xda\x93\xad\x9d\x1b\x3a\xe3\x64\x1a\xee\x8e\x12\x9d\x1c\xdc\xdd\x76\xa6\x14\x35\xd2\xc7\x70\xab\x9e\xf6\xba\x11\x36\x03\x2e\x59\x8b\x99\x3d\x17\x9e\x33\x61\xd0\xbe\xc3\xa5\xb2\xbe\x1f\x7b\x5e\xa3\x53\x0e\x9d\xb5\x00\xe6\x91\x67\x86\xab\xb2\xe2\xab\xa4\x7f\x98\x32\x9c\xc2\x24\xa6\xd1\x28\xf6\x05\x0e\xe4\x7a\xcb\x54\xa8\x2e\xd2\xa0\xeb\x61\x4f\x3f\xe2\x9a\xf8\xf0\x4a\x14\x8f\x85\x28\xec\x2a\xa2\x22\xdd\x7b\xe4\x32\x75\xe5\x8b\x3d\xb6\x42\x9d\x16\x2b\xa6\xc3\x6d\x4c\x06\x35\xdc\xb6\xd6\x96\x3d\xa1\x87\xf4\x34\x4f\xbd\x2c\x74\xde\xcc\xf5\xbf\x15\x4e\x5f\xc1\xf5\xe7\x36\x4b\x75\x90\x13\x45\x3f\xcc\x01\xbd\xb2\x7e\x0d\x39\x27\x0d\xfa\x30\xdc\x85\x73\x3f\xab\xc5\x27\xcb\xc9\x2c\xbb\x5b\x47\xba\x6a\x1a\x91\xf1\x74\xe9\xf8\xa4\x89\x26\xb2\x4b\x52\x59\x01\x62\xf1\x56\x29\xbe\x74\xd5\x75\xce\x9b\xaa\xfd\x18\x0b\xda\xd5\xe9\xf8\x6e\x49\xba\x2a\xf6\xa5\xdb\x21\xb6\x62\x97\xd6\x53\xe2\x61\x89\xac\x33\xec\x97\x39\xd7\xa5\x17\x80\xc1\x09\x8e\x1e\x06\x4c\x6a\xd4\x2e\x9c\x28\x28\xa7\xab\xa2\xab\x55\x71\x38\xb1\x00\x59\x50\x38\xf6\x1d\x4a\xbf\x8d\x40\xd2\x98\xa7\x30\xcc\x24\x38\x58\xad\x15\x0e\x11\x8f\xcc\x11\xe2\x18\xc0\xcb\xa4\x3b\xc1\x42\x4a\xdb\x4f\x41\xbc\xb0\x91\x9e\x86\x84\x35\xd9\xd3\x6f\xa3\x03\x9c\x4c\x91\x15\x2b\xb7\xa2\xc8\x94\x34\x8d\x42\xc8\xae\x52\xb6\xe2\x30\x05\x63\xab\xa4\x99\x99\x3d\x47\x4f\xa8\x8a\x74\x2e\x9b\x45\x63\xb3\x20\xac\x49\x81\xd3\x6f\x75\x23\x7b\xb7\xc3\x50\xb1\xcd\x78\x55\x69\x5a\x4e\x1d\xd7\x11\xd0\x08\x35\x21\xab\x72\xe6\x92\x6b\xe4\x75\x47\x98\x40\x8f\x6d\x9e\xb3\x0d\xca\x9d\x44\xfb\x3e\x52\x68\x35\x5f\x35\x8e\x61\xec\x19\x45\xb2\xca\xb8\x11\xaf\xcb\x32\x58\xdf\x03\x6a\x6b\x50\xd6\x9f\x3c\xf7\x93\x5b\x56\xf9\x91\x5c\xec\x75\xc0\x04\x87\x2a\x37\xb7\x58\xdf\xca\xf3\xbb\x00\x7c\x02\x36\xc4\xe9\x65\x49\x35\x09\x68\x9a\xe4\x61\xd9\xa9\x25\x9b\x77\xc8\xad\xac\xc9\xe5\xe8\xa7\x62\xeb\x1e\xeb\x39\x2a\xcd\xbc\x5e\x56\x3d\x36\x44\x32\x50\xf9\x4a\x0d\x11\x4e\x61\x84\x7b\x5a\x65\xa3\x73\x2d\x67\x26\x38\x2e\x1a\xba\x93\x63\xb1\xfb\x49\x33\x0c\x7b\x0c\xfb\x55\xc7\xdb\xaa\x7e\x2e\xa4\x17\xa8\xb6\xd5\x26\x10\x06\xaa\x2e\x99\xd6\x69\x63\x3e\x5b\xcf\xe7\x14\xd3\xb1\xac\xa0\x20\x06\x0b\xd2\x75\xbc\x6a\x25\xa5\xe2\x1a\xbb\xb5\x0d\x44\xbb\x19\xc7\xd2\x0c\xf0\x0c\x41\x24\x0b\x55\xe3\x39\x56\x6d\x6a\xbf\xcd\x39\x4c\x59\x0f\xa8\xc1\xb2\x5f\xd5\xde\x93\xc3\x12\xe0\xc4\xac\xee\x00\x35\x40\xa0\x0c\xa1\x8f\x64\xd6\x2c\x41\x31\x52\xd1\xbd\xc8\x73\x01\x27\x17\x58\x37\x7f\x82\xaa\xcb\x55\x29\xc0\xcd\xb9\x44\x76\x36\x35\x71\xac\x34\x35\x72\xef\xd0\x2f\x0a\xa0\x94\xb9\x40\x6b\x9d\x4e\x7a\x69\xb4\xf7\xb1\x26\xe1\x87\x8a\x97\xf5\x5b\x22\x18\x91\xcf\x0b\x28\x48\x67\x44\x26\x1e\xad\x3b\xca\xdd\x2a\x66\x62\x1a\x16\x6e\x61\x5e\x69\x6b\x75\xc4\x4e\xa4\x6a\x6d\xbf\x8a\xa1\xc3\x56\x4d\xec\xc9\x4f\xb8\x1d\xf0\x24\xa3\x60\x4b\x2b\xa7\x47\x8d\x2e\xe8\x6e\x6b\xf4\x10\x2e\x1c\x47\x29\x78\xf1\x87\x2b\x20\xda\x34\x6e\x02\x9f\x5b\xc5\x92\x17\x84\x5d\x99\x35\x8c\x8a\xdc\xbc\xee\x72\x13\xd2\xcb\x14\x69\xb3\x7e\x5b\x63\xc4\x04\x2c\x24\x4b\xe6\xc9\xf4\xeb\x8e\xda\x5c\x84\xa0\xeb\x55\x32\xbe\x6c\xee\x4a\x92\x5c\x33\x3c\x3a\x12\x27\x08\xc7\x5e\x71\x5d\x6a\x99\xcd\x0b\x02\x3b\x59\x70\x6d\xa0\x88\x24\xeb\xc6\x2c\x0f\x22\xc8\xcb\x74\x82\x74\xad\x6a\x43\x00\xdb\x5e\x8f\x25\x1c\x41\xa3\xa8\x8f\xc3\x41\x16\x21\x87\x76\x1f\xd0\x6b\x8f\x16\xbd\xb9\x81\x1a\xc8\xe4\x64\x57\x65\x73\x33\x51\x58\xe8\xd8\x54\x57\x4c\x47\x6f\xcd\x7a\x42\x9c\xf4\xc6\x37\x56\x18\x38\x93\x82\xae\xa6\x43\x4a\x3d\xcb\x16\xe5\x64\x8b\xb9\xaa\xdb\x46\x46\x06\xa3\x9e\xad\x42\xcb\xf2\xbe\x37\xe2\x82\xd1\x46\x49\x19\x4f\xdc\x06\x55\xc4\xe4\x46\x0e\x81\x0f\xb0\x02\x6b\xc5\xea\xc4\x55\x41\xb1\xed\x2c\xc4\xe3\xdc\x62\x64\xf3\x03\x13\xfc\x44\xa2\xac\x46\x7c\x4c\xb4\xac\x3b\x8f\x72\xe7\x79\x38\x0f\x30\x29\x52\x9d\xdc\x6a\x71\x15\x1b\x25\x6f\x8e\x01\xc1\xc5\xd1\x87\x51\x33\xb9\x10\xbc\xc4\x21\xc2\xc5\x60\x16\xa6\x52\x47\x52\x7a\x83\x26\xa4\xb9\x29\x3a\x84\x52\xfa\xaa\xf0\x9c\x21\xdf\x51\x69\xbb\x11\x94\x47\x38\x13\x5a\xc6\x82\xb7\x71\x72\x59\x27\x4d\xd8\x0f\xb1\x85\xaa\xb7\x52\xac\x3b\x0f\x8b\x5b\x4f\x37\x0b\x0a\xdf\x2a\x3b\x75\x05\xf8\x9c\xab\x0e\x7a\xad\x9c\xef\x87\x5e\x53\x0f\x53\xc0\x4d\xc3\xcd\xc5\x62\x01\xda\x0b\x36\xb6\x7b\xb5\x6c\xf9\x20\x0a\x8c\x3d\x38\x76\x55\x36\xd7\xae\x1b\xb1\x99\x52\xbf\xa6\x63\xdd\x79\x37\x82\x34\x93\x99\x6d\xc3\x1d\xd6\x22\xd7\x70\xb7\x4d\x7b\x34\x4f\xb2\xf4\x53\x66\xc9\xae\x6a\xb0\xab\x30\x7a\xa2\xcd\x82\xe9\x1e\xcb\x2e\x8c\x28\x1e\xec\x8c\x43\xe3\x76\x09\x37\x1e\x83\x62\xca\x6f\x4b\x37\x3e\x9e\x8b\xa5\xdb\x7e\x59\x2c\xef\x0a\x67\x3a\xfb\x34\x4e\x4f\x67\xd8\x38\xd5\x84\x2c\xee\x2c\xa7\x3b\x8f\x93\x7a\x0c\x91\xa8\x7b\x99\x56\x2c\xd9\x8d\xdb\x0e\xf9\xb8\x8a\x58\xb4\xce\x4d\xaa\x02\xeb\x86\x09\xea\x74\x81\x07\x67\x60\x2e\x9a\x5a\x6f\xab\x2a\xab\x0a\x3b\x0b\xa6\x13\xdf\xc9\xb2\x2e\x35\xdb\xf5\x32\x7f\x83\xcf\xb8\x2c\x05\x35\xe9\xd9\x66\xad\x88\x61\x12\x2a\x09\x5a\x46\xb4\xe2\xd0\x61\x4b\xda\x14\xad\x47\x5e\xa0\xef\xab\x2b\x99\x5e\x36\xf8\xd2\x86\xd5\x2d\x6b\xcf\xf5\x50\x3a\x2f\xba\x06\xc3\xfb\xe0\x19\x58\x1d\xce\x08\x4c\x4f\x5d\x9f\xcd\x54\x32\x51\x71\xba\x29\xed\xaf\xe2\x3b\xf0\xda\x69\x4d\x27\xc0\x8a\x84\xba\xf5\x00\x36\xb2\x2b\x75\x8c\x32\x61\x19\xdc\x9e\x5b\x60\x4c\x7a\x9c\x19\xa2\xd8\xc3\xc3\x8f\x15\xde\x3c\xbd\xfd\x56\xf9\xee\x2b\x7a\x5c\x66\x5e\x11\x21\xa9\xad\x21\xa6\xad\x68\x0a\xd7\x42\x2d\xb2\x62\x3f\x3b\x39\x96\x54\x57\x14\x76\x15\x36\x3e\x5a\x43\x50\x06\xa2\x2f\x3a\xde\x7c\x2f\xd0\x51\x8e\xfd\xd4\xc7\x31\x33\xb1\x3b\x05\x3e\x4e\x65\x68\x3e\x57\xe4\xd4\xb9\x2d\x41\x42\xcd\x45\x81\x94\x65\x13\x6c\xe0\x57\x05\x3b\x69\x09\x46\xe8\x15\x31\x2f\xdc\xb2\x44\xae\xba\x31\xc1\x1b\xee\xc3\x5e\xf9\x54\xc8\xf9\xe1\x64\x5d\xc1\x8e\x0c\xdb\x54\xad\x95\x5d\x75\xbc\x65\x0c\x6c\xc4\xa3\x89\x89\x8c\x25\xe0\x2c\x48\x51\xa7\x6d\xd1\xa8\x47\x14\x76\x04\xf1\x8a\x5c\x75\x3a\x8e\x44\x26\x0d\x8b\xdc\xaf\xea\xb6\x21\x7e\x05\x1b\x41\xab\xc4\x2a\x09\x34\x35\xc9\xb3\x6d\x6a\x19\x47\xe3\xb6\xcf\x11\x60\xdd\xcc\xa9\x66\xc8\xcb\x06\xf1\x21\xa1\xbc\xaa\xa7\x96\x0b\x44\x9b\x07\xce\x71\x18\x33\xd9\x16\x98\x20\x5d\x56\x53\x28\xb6\x60\xc5\x3b\x6e\xac\xec\x4a\x95\xe8\xa9\xa1\xeb\xc0\xce\x6f\xf2\x2a\x6f\x70\x5f\x87\xe9\x11\x9e\x87\x9c\x20\xa1\x89\x5a\x89\x27\x29\x04\x9a\x89\x85\x09\x10\x19\x13\x51\x16\xc0\x03\x43\xdc\xbe\x29\x68\xc5\x55\x4f\x43\x73\x78\x29\x09\x90\xcd\x82\xdd\xb4\x7a\x50\x68\xad\xf6\x87\x3a\x05\xf6\xcc\xa6\xa5\xc3\x50\xb4\xb5\x45\x21\x08\x02\x28\x7b\xe1\xf9\xe6\xb0\xeb\x16\x15\xb4\x0b\xc0\xa7\x0f\x22\xd8\x3a\x70\x92\x3c\xc9\xa3\x72\xbb\xcd\xb6\x4b\xb6\xaa\xb0\x21\xa4\x8d\xf3\x1d\xca\xa9\xaa\xee\x2c\x9e\xfb\xc1\x23\x16\x57\xa5\xef\xe2\xb2\xd1\x43\xd2\x92\x9d\x64\xe7\xea\x44\xca\xad\xca\xbe\x9e\x12\xa5\x6d\xef\xf2\x38\x9a\x96\x73\xdd\x7d\x8b\xdd\x67\xb0\xec\x99\x5d\x05\x83\x30\xac\xa6\x34\x63\xf0\xbe\x30\x8a\xc7\x5c\xa8\x81\xec\x5c\xb2\x42\xcb\xee\xf1\x1e\x43\xab\x0a\x9e\xce\x1b\xb3\x38\xa4\x14\x17\x57\xc9\xdc\x70\x1e\x68\x3c\x9c\xdc\xe5\x69\xc2\x36\xfb\x61\x8a\x40\x75\xea\x05\x65\x9c\x90\xef\x83\xe2\x84\xfb\xa0\x66\x25\x02\xc6\x94\x4b\xb8\x8c\x5f\xe9\x8e\x6d\x21\xfb\xc1\xab\x45\x66\x01\x29\xf3\x33\x00\xa6\x5b\x45\xe2\xd8\x1b\xae\x25\xb2\x0e\xac\x30\x94\x8c\x22\xe8\xe1\x02\x00\x57\xb1\x0c\x62\x92\xcb\xae\xb7\x81\xe6\x38\x38\x36\xc7\x58\x97\xbd\x9d\x20\xa0\xbe\x45\xc0\x38\xd1\xd2\x8b\x94\x8e\x04\x33\xd6\x0c\xe2\x25\xcc\xcb\x72\x83\xb4\xf3\xd0\x65\x48\x6d\x57\x3d\x57\x30\x01\x59\x96\x2d\x5a\xb8\x0a\xbf\x9e\xd9\xe2\x25\x61\x34\xad\xa4\xa5\xa0\x05\x44\x77\x5c\x26\xcb\x21\x4f\x98\x49\x80\xa4\x8a\xa1\x56\x8b\xba\x71\x6e\xb6\x94\x85\x9a\x54\x33\xbe\x6f\x8e\x69\xbe\x9e\x30\xe4\x6e\xd0\x82\x78\x3f\x12\xb8\x09\x7c\x6e\x55\x93\xbf\x20\xe1\x0c\x0e\x77\xd0\x2c\xfd\x59\x01\x2f\xc3\xa1\x39\x68\x62\x1e\x8b\x83\xc9\xa0\x44\x05\x86\xe8\x1c\x69\x9c\xca\xaf\xb9\xb2\x4a\xf3\x55\xd2\x60\xbc\x03\xaf\xa8\x5d\xc9\x46\x53\xc0\x75\xb2\x5d\xa1\x16\xe8\xa9\x63\xf6\x9b\x40\xbd\x1c\xc8\x76\x95\xd8\xea\x0a\x20\xf3\xa4\x2b\x11\x57\x75\x0c\xec\xa6\x80\x5d\xad\x7d\xc6\x41\x82\xdf\x93\xac\xc1\x12\x49\xea\x31\xea\x31\x8d\xe7\x0c\x4e\x5d\x79\x10\x96\xa2\xbd\x4e\xa2\xc8\x7e\x55\xf3\x3a\x3f\x28\x29\x69\x4a\x97\x0b\x5c\x3b\x2a\xa3\x62\xda\x24\x71\x6b\x55\xe9\x64\xa3\x9f\x10\xd4\x70\xcc\x0e\x94\x6d\xee\x94\x3b\xbf\xea\xa2\x31\xc5\x3a\x5b\xe8\xd4\x86\x58\x32\x31\xde\x70\xaf\x81\x1d\x73\x2a\x73\x84\x9a\xf7\x35\x2e\x70\x29\xda\xad\x3c\x7b\xaf\xb4\x39\x8e\x79\x55\xdd\xcd\x88\x8d\xa6\x31\x1c\x43\x28\xa8\x10\x77\x75\x0a\x71\x1b\x0a\x54\xb6\x6e\x2b\x1e\x61\xc8\x29\x4a\x4a\x07\x69\x8b\x61\x49\x1d\xe7\x65\x12\x14\xd9\xb8\xb1\x89\x6d\xe4\x93\x38\x10\x27\xe2\x1a\x1c\x9c\x18\x1f\x0c\x71\xa1\x9e\x51\x3a\xb7\xa1\xdc\x0f\x79\xaa\xb4\x90\x6a\xc5\xbc\x2a\x5f\x2a\xd4\x9e\x3c\x0a\x6e\x71\xcb\xe1\xf3\x5c\x15\x9b\x4b\x6d\x09\x9a\x91\x89\x54\x71\x25\xac\xf3\x53\xb0\xe2\xe8\x66\xcd\x71\x0a\x06\xc4\x4d\x64\xab\xa7\x97\x8f\xff\xee\xf6\xbe\x8f\x24\x7f\xfe\x1b\x50\xdd\xf3\x87\xd8\x3f\x7c\xfa\x5d\x3e\xfc\x9b\x1f\xf2\x1d\x7f\xf1\xdd\x8f\x79\xd7\x3d\xf7\xdb\xff\xbd\xe7\xbe\xea\xaf\x90\xad\xc2\x3d\xef\xf4\x43\xff\xe5\x99\xfc\x9b\x9e\xf1\xe0\x1f\x7a\xe4\xc3\x5f\xa1\x9e\xf2\x07\x9f\xfd\xa4\x1f\x38\x5f\xf1\xad\xaf\x78\xc3\xa3\xee\xff\xd4\x37\x7c\xc2\x5d\xf8\x0d\xa6\x6f\x7c\xd9\x1d\xff\xf3\x1d\xea\xf7\xdd\xee\x5e\x3f\xf5\xe6\x9f\xfb\xe3\xe7\xbf\x63\xff\xfc\xfb\xfe\xc0\xbf\x9d\x5f\xfc\x95\x1f\xdb\xde\xf6\x75\xdf\xfa\x1f\x9e\xf9\xa5\x7f\x78\x83\xe9\x37\x7d\xc3\x8f\xfe\xce\x6b\x9e\xf4\x27\xbf\xf1\x23\xf7\xb9\xff\xcf\xfc\x56\xfd\x8a\x0f\xdd\xf1\x7f\xb9\xc7\x97\x3e\x3b\xd4\x7b\xff\xf4\x17\xbc\xf2\x1b\xef\xf2\xa6\x8f\xbe\xc1\xf4\x6f\x3e\xee\xfd\xe6\x55\x77\xff\xbd\x77\xbd\xcb\xdc\xff\x59\xbf\x70\xfb\x6f\x7d\xfc\x8b\x7f\xf4\xfb\x3e\xbd\xdf\xfb\x3e\xbf\xfd\x2b\x1f\x71\xaf\xf3\x2d\x77\x79\xce\x57\xde\x60\xfa\xee\xa7\xfd\xd3\xf7\xbe\xfe\xf9\x1f\x0a\xde\x7b\xd7\xcf\xfa\xb5\x87\xbf\xfc\xb1\x6f\xfc\x88\xbf\xf1\xa8\x57\x3f\xf8\x2b\xde\x7a\xfe\x8d\xdf\x80\x4f\xfa\xf1\x4f\x7b\xcb\x87\xdd\x60\xfa\xe0\xa7\x3f\xf7\x5b\xf7\x7f\xfa\x31\x6f\x7f\xc5\x17\xdc\xef\x1d\x0f\x7c\xe9\x17\xde\xfd\x41\xaf\xff\xd9\xe5\x8f\xdf\xf5\x7b\x7f\xf6\x55\xc7\x37\x1c\xbf\xfa\x25\xfe\xd1\x37\x98\xde\xe5\xa3\xde\xfa\x0d\xbf\xfb\xa8\x67\xff\xad\x37\x7d\x56\x7a\xcc\xf3\xbf\xf1\x05\xe7\x0b\x1e\x7e\xc7\xa7\xfe\xfd\xf7\xbe\xe7\x1b\x1e\xf9\x35\x0f\xf8\xec\xfb\xee\xdf\xf2\x6f\x6e\x30\x7d\xc4\xb7\xd4\x37\x3e\xe6\xf7\xbf\xe8\xb3\xf7\x2f\x7d\xfd\x8f\xdf\xe7\x23\x3f\xe9\x17\x1f\xf7\xbd\xff\xfa\xa9\xef\xff\xd9\x3f\x7c\xd5\xbf\x79\xd2\x67\xbf\xfe\x07\x6f\xf7\xd9\x6f\xf9\x4b\xb2\xd5\xad\x76\xf5\x8a\x17\xa0\x52\xdb\x97\x53\x5a\x55\x90\xdc\xe8\x96\x96\x00\xfb\x4e\x10\x18\x0b\xde\xd4\x66\x75\xa2\xcc\x08\x41\x48\x5c\x63\x2a\x7d\x8b\xe6\xaa\x31\x82\x79\x3f\x6d\x07\x81\x60\xcd\xb6\xad\x36\xd0\xe6\x02\xd7\x1c\xca\xc6\x13\x19\x29\xd7\xb8\x31\x30\x69\xe8\xe7\x4a\xd8\x61\xc4\x72\x5c\x55\xd4\xe2\x8b\x59\x87\x40\x94\x09\xe7\x00\xf5\x69\xdb\x25\xec\x3c\x86\x35\x72\x39\x04\x18\x7a\x20\x04\x15\xae\x47\x75\x70\x8d\x3e\x9e\x61\x5c\xd5\xf2\x24\xd5\xaa\x08\x9e\xdb\x1e\x00\xf0\x72\x57\x92\x72\x7a\x72\xcb\x1b\xf5\xa7\x43\xab\x38\xa3\x76\x16\x34\x6d\xe1\x5c\xcf\x64\xe4\xc2\x2f\x1b\xde\xa7\x39\x3d\xe6\xd4\x8d\x15\x53\x7c\x3a\x5c\xdb\x91\x92\xee\x70\x5a\x1c\x4c\x1f\x24\x42\xd5\xce\xa4\x78\x57\x6b\xef\xb1\x04\xce\xae\xd2\x32\x10\x3b\xb1\x6e\x12\x84\x38\xb6\x1b\x87\x0c\xe5\x49\x6a\x32\xfb\xae\x81\xc2\xc7\xac\x6e\x88\x7c\x2e\x46\x44\x82\xb2\x9f\x7b\xbd\x2c\xdd\xc5\xa8\xd0\x9a\x59\x88\xaa\x25\xe7\x69\x80\x52\xda\xe5\x63\xa3\xbb\xe2\xd2\xb5\x05\xb0\x5a\x67\x9f\xe4\x58\x0b\x16\x2b\x5a\xb7\x3d\x5d\x36\xc9\x6b\x5b\xa8\x0f\x3c\x24\xdc\x66\xb6\x29\xb7\x7e\xe6\x43\xf9\x5a\xdd\xe6\xb1\x8d\x16\x2f\x9e\x94\xb4\x4f\xa4\xfc\x92\x43\x3a\x7c\xfa\x6b\xc8\x56\xb7\xc2\xe9\x0b\xc0\x87\x2d\xc5\xa1\xa5\xe0\x2d\x61\x16\x1c\xf4\x47\xcc\xae\x9b\xee\xd1\x19\x03\x99\x2d\x3a\x4c\x27\x68\x9a\xf6\x8c\x69\x04\x9c\xec\x97\xf5\xa8\xeb\xc8\x70\x07\x74\x93\x12\x03\xd9\xb7\x7d\xdf\x5b\xe6\xa2\x62\x59\xe4\x89\xe7\xd0\x9b\x71\x07\x87\x88\x61\x2c\x3b\x29\xce\x0c\x7d\x55\x6d\x5f\xa2\x86\x00\xec\xac\x0a\xa3\x3d\xd3\x50\x10\x5a\xcb\x52\x69\x92\xcb\x12\xda\xa2\x6b\x23\x68\xa7\x2e\x9e\x36\x6c\x45\xc2\x14\xcb\x55\x04\xb4\xc8\x70\x46\x49\x98\x10\xe6\x22\x25\xcc\x7e\x2d\x88\x6b\xca\x19\xc0\x39\x81\x29\x7b\xf0\x1a\xc4\x98\x7b\x5d\xd6\xc5\x70\x57\xf7\xab\x5c\xad\x85\xae\x86\x8f\x46\x8e\xb3\xcc\xc1\x40\xf0\x9b\xcf\x54\x8d\xe4\x90\xa5\x5c\xd9\xa1\xf7\xb1\x97\x09\xda\xe0\x47\x1c\x7c\x3f\xd1\x55\xd3\xcd\xd8\x58\x95\x80\x16\x48\x8e\xb6\x50\xa0\xab\x29\x79\x87\xe0\x71\x54\x6f\x7a\x1c\x34\xf7\x43\xed\x86\x5a\xe9\x13\x2b\x80\xaf\xe8\xbc\xea\xb9\xe4\x2b\x72\x2a\xd6\x15\x79\x25\xf6\x9e\x70\xae\xe0\xb4\xd5\x37\x4f\xa5\xaa\xe4\x08\xda\xd9\x84\x97\xc6\xd5\x10\x58\xb9\xb4\xc7\xfd\xb2\xbc\xd1\x48\x94\x61\x97\x0c\x98\xa3\xc3\x53\x35\x44\xf3\x06\x3d\x5a\xc0\x90\x3b\x2e\xe3\xe0\xf9\xf0\x92\x33\xcb\xba\x42\x32\x33\x36\xff\x9a\x79\x16\xb7\xf2\xfc\x2e\x48\xbc\x59\x88\xec\x21\x57\x78\xf2\x85\x72\x62\x40\x6b\x2d\x97\x03\x9e\x88\x14\x65\x01\xe0\x3a\x0d\xe0\x90\x26\x7e\x69\x73\x5b\xed\x64\xfc\xaa\x8b\x56\x71\x69\x52\x36\xbf\x41\x1d\x0b\x45\x4d\x3a\xbc\xaf\x92\x6f\xe9\x80\x27\x88\x84\xd7\x5c\x77\x4c\x76\x80\xb9\xa1\x34\xee\x69\xbf\x6c\xb2\x86\x57\xee\x14\xa1\x2e\x58\x24\xb5\x07\xb5\x6d\x39\x97\x10\x1d\x58\x61\x57\xe0\x40\x14\x05\xad\x35\x11\x58\x92\x05\x80\xc3\x86\xa2\x2f\xeb\x5e\x53\xeb\x1e\x34\x4c\xcd\xc0\xc3\xed\xc4\x60\x6f\x58\x60\x14\xef\x0b\x98\x79\xdf\xc0\x84\xed\x90\x06\x98\x42\x41\xd5\xfb\x86\xe0\x65\x79\xe5\xb9\x81\x68\xab\xdb\xbb\x97\xbd\xaf\x78\xdd\xc5\x42\x15\x5a\x82\x3e\x4c\x48\xeb\x2e\x41\xad\x10\xb0\x60\x75\xdc\x77\xaf\xb5\x2d\x57\x15\x84\xb9\xd0\x8d\x89\x34\xf9\x71\x58\x4d\x8a\xdf\xe7\xb9\x5b\x72\xf8\x93\x5b\xa3\x02\x83\xd0\x5a\x87\x5b\xa3\x12\x72\xd4\x1a\xce\x47\xb8\x8a\x03\xc2\x52\x0c\x83\x2f\x19\xab\xaa\x85\x87\xc0\x0f\xdc\x42\x18\x69\x4a\x78\x68\x1d\x8c\x0a\xa3\x19\x03\xf0\x2a\x55\x6c\x6b\xa4\x07\xb8\x6a\x94\x33\x3f\x1d\x16\xbc\x6e\xe0\xc8\x19\x42\xcd\xf3\x46\xe9\xa4\xd9\xa7\x61\x6b\x59\x3b\x5c\x77\xa9\xe6\xba\x16\x0e\x84\x3c\x56\x35\x92\xd4\x37\x93\xad\x6e\x15\x4b\x5e\x21\x28\xac\x61\x2b\xe3\x20\x50\xcb\xb8\x87\x98\xf4\xb9\x61\x4d\x11\xef\x08\x8e\x9a\x88\xcd\x53\x15\xbc\x03\x7c\xc6\x6d\xad\x84\x84\x7c\xd5\x94\x4c\x7e\x2c\x19\x62\xe4\xed\xa9\xfa\x68\xbc\xb4\xc1\x8a\x48\x76\x25\x71\x95\x69\x28\xb9\xcb\x64\x93\xc3\xa6\x53\x54\xed\x8c\x0b\xa7\xf0\xaa\x60\xc7\x32\x4f\x07\x9e\x98\xb9\x48\x87\x3b\x12\x9f\xe1\xf0\x48\xdb\xcd\xa1\x36\xbc\x61\x56\x9d\x96\xf3\x53\xc2\x2d\xdb\xb2\xc7\x72\x88\xab\x6a\xfb\xe5\x3c\xb6\xed\x1c\x15\x3b\xa7\xb5\x3e\x59\xcb\x81\x1e\x13\x47\xe5\xe8\xca\x09\xcd\x81\x42\x17\x07\xb5\xb8\xaf\x69\xeb\x8d\x8d\xcb\x4a\x8e\x74\x82\xde\xbd\xd5\x2d\xd3\xd0\x19\xde\x35\x25\x45\xa2\x6c\x46\xd0\xa3\x4b\x0c\x88\x20\x22\xfb\x85\xeb\x80\xcf\xc0\x78\x9f\xe5\x2a\xea\xbd\xd8\x3c\xc5\x87\x69\x6c\x91\x23\xd8\x49\x84\x54\xbc\xb9\x93\x0e\xb0\xa1\x6d\xe8\x23\x2e\xfe\x1c\xd3\x51\xd9\x08\xa5\xc2\xca\xdd\x5e\x35\x67\x6d\x91\x4c\x0a\xc9\x28\x66\x7d\x84\x40\x55\x44\xbb\xe2\x53\xc2\xe8\x07\x52\x6d\x2f\x94\xad\x88\xed\x4b\xf0\xe0\x84\x68\x49\x4e\x8e\xab\x52\x16\xe3\xdc\x7d\x58\x21\x8e\xde\xae\x6d\x3d\xb8\xad\x62\x3d\x2b\x56\x99\x62\x8d\x49\x1b\x47\x90\x49\x93\xba\x59\xcd\x1b\x9d\x33\x01\x7b\x33\xd9\xea\x56\xd9\xa9\x2b\xc4\x65\x78\x84\x6b\x09\x0d\x44\x3a\x17\x80\xb1\x3b\xc8\x7e\x66\x72\x1e\xb9\xcb\x43\xcf\xa6\xb6\x99\x24\xf7\x12\xa6\x35\xfa\x46\xc4\x8c\x57\x1d\x2a\xa2\xb8\x1a\x63\x4e\x83\xb7\x05\xc6\xb6\x8b\x3c\x1a\x56\xd6\x77\x31\x3a\xe3\x67\x1a\xa6\x6f\xb3\x8e\x01\xda\xb1\x2b\x51\xe4\x0a\xae\xfa\x94\x01\x17\xdc\x97\x82\xcf\x65\xb1\xb4\x10\x2f\x4f\x65\xf8\x38\xb7\xca\x41\xe7\xd6\xa0\x24\x77\x72\x20\xed\x16\xb2\xf1\xe2\x34\x02\x97\xe9\xaa\xaf\xf1\x40\x72\xc4\x0d\xef\x64\xdf\x22\xdb\x6b\x26\x96\x81\xb3\x27\x8d\xf5\x12\x68\x25\x8e\x84\x25\x15\x55\xfc\x16\x8e\xd3\xaf\x9b\x6e\x57\x39\xf6\x13\xf9\xba\xb9\xce\xc0\xb6\x1a\xc3\xb2\xa5\x83\xee\x74\xaf\xcd\xf5\x02\xfb\x61\x15\x5d\x04\xd2\x2a\x96\x05\x7a\x76\x54\x40\xe7\x55\x99\x16\x07\x4c\x38\x40\x0a\x85\x9c\x0a\x1a\x5b\x04\x92\x7b\x4d\xab\x69\xa7\xa3\xca\xed\x9d\x40\x04\xa4\x1b\x1f\x50\x7e\x75\xb6\x2b\x72\xd5\x44\x7b\x96\x12\x46\x62\x14\x41\xc0\x28\x2d\x50\x96\x93\x40\xdb\xd9\x08\xaf\x73\xc2\x63\xf6\xcd\x81\x35\x2a\x6a\x16\x30\x54\x59\x90\xd5\xe2\x2a\x1d\x90\x24\x48\x38\x79\x9d\x8e\x01\x34\x38\xe1\xbd\xe4\xc3\x47\x5a\x57\x71\x64\xbe\x20\x04\x5d\x74\xc2\x24\x7f\xc8\x35\x0b\x3b\x76\xff\xd7\x0c\xd3\xb9\x55\xbe\xfb\x0a\xa6\x67\x47\x5b\x55\x7e\xd0\xb3\x0b\x67\x7d\x46\x98\x34\x06\xca\x9a\xca\xe1\xc6\xd1\x95\x5d\xb1\x0b\x54\x88\x30\x13\xf6\x26\x05\x26\xaf\x52\xb6\xc2\x65\x51\xe9\x88\x1b\x18\x4d\x2f\x87\xde\x36\x46\x98\x37\xab\x03\x4e\x56\x97\xfb\x0e\x61\x65\xe7\xc9\x6c\x20\x93\x36\x83\xc2\x26\xaf\xea\x1f\x55\x32\x36\x8e\xa0\xde\x98\xa1\x4a\x23\x1d\xf9\xea\xa8\xab\xfc\xc0\x0b\x04\x4d\x98\x93\x39\x10\x4e\xa9\x9c\x15\x24\xaa\xa1\xf2\xbc\x6a\x25\xd1\x5b\xc0\xcc\x51\x0e\x1a\x48\x9b\x6e\x55\xc1\xc0\xb4\xfb\x42\xd2\x34\xcc\x9d\xd4\x6c\xbd\xfb\xe9\xb4\xed\x60\xaf\x47\x95\x67\xbe\xaa\x8b\x42\x69\x18\x56\xdd\xaa\x68\x31\x60\x97\x01\x24\x8b\x52\x48\x2d\x32\x46\x7e\x00\x8b\x7d\xcf\xeb\x62\x8e\x4d\xa4\xdb\xce\x50\x3d\xfd\x55\xa3\x9c\x39\xcf\xde\x1c\xec\xd8\x12\xdb\x1d\x53\x3d\x0f\x4b\x03\xba\xed\xfc\xd2\x6c\x77\xbe\x59\x76\x2c\x24\x7b\x99\x60\x6f\x62\x37\x0b\x4a\xf0\x22\x96\x01\x17\x3b\xc5\xf5\xd4\xd9\x19\x59\x66\x71\x24\x55\x13\x36\x97\x63\x84\x3a\x5b\x81\xad\xc5\x98\xb2\x85\xf1\x1a\x00\xa7\xf9\xc0\xee\xaa\x69\xaa\x6c\x5f\xd5\xd9\xe3\x14\x76\x5b\xb3\x35\xb7\xfd\x6c\x69\xed\x54\x25\xbd\xfa\x01\x70\x80\x0a\x60\x63\x7a\x4d\x62\xea\xe9\xb2\x31\xbb\xbd\x09\x7c\x6e\x55\x41\xbb\x00\x7c\x60\xa3\x72\x41\x33\x6f\xbe\x72\x55\x10\x04\xc6\x78\x5f\x7d\x31\x6a\xee\xd3\xac\x20\x8e\x1d\x9f\xa7\x01\x56\x18\xe6\x14\x9a\xf1\x32\x12\x8d\x1f\x61\x1a\x6f\x59\x6f\x46\x22\x62\x16\xb6\x8a\x5c\x0e\x42\x17\x73\xda\x6c\x7b\xe0\xad\xb9\x41\xc4\xba\x0e\x74\x98\xe8\x88\x01\x57\x8d\xe8\x1d\x87\x59\x1d\xb4\xd3\x27\x80\x4c\xe2\x8b\x4d\x08\xef\x32\x81\x91\x96\x5c\x70\xe6\xeb\xea\xb8\x01\x0c\x2d\x78\x86\x14\x72\x6e\x57\xc9\x97\x70\xa0\x18\x2f\x20\xc6\xe3\xe8\x99\x9c\x2b\xcd\xd1\x4f\xce\xa4\x9f\x21\x0a\x60\xa4\x3d\x11\x2e\x60\x38\x97\x13\x3b\x4c\x1c\x6b\x31\x57\x49\x0b\x58\x49\x79\x1b\x98\xc4\x28\x52\x3c\x55\x00\x7d\xd9\x95\x43\xf9\x94\x1e\x39\x89\xc2\xa6\xcf\x3d\xe5\x4e\x4f\x59\x20\x31\xc9\x8a\xfd\x32\xe1\x07\xb1\x78\x5a\x19\x22\xc6\x25\x21\x25\x89\x7b\xa4\x6c\x03\x70\x8d\xc7\x41\xf4\x92\x89\xc6\x52\x14\x9d\xb2\x08\x01\x52\xc6\x8e\xab\x34\x3d\xf9\x92\xd1\x32\x0b\x51\xeb\x06\xd9\x92\x19\xb5\x47\x2e\x2d\x88\xed\x54\xca\x2d\xd3\xd0\xda\x16\x35\x4a\x55\x35\x55\x29\xc7\xa8\xc1\x5c\x36\x53\x2c\xa3\x62\x00\xc0\x89\x97\x34\xf6\xb0\x4f\x13\x35\xeb\xfb\x32\xb3\xdf\xda\x62\x37\xa7\x0a\x72\x43\x98\xbc\xf0\xb4\xd8\xda\xcd\xbc\x99\x6c\x75\xab\x9a\xfc\x15\xd2\x02\xa8\x2d\x6c\xd5\x72\xfa\x9d\x6a\xc1\x17\xb4\x87\x3d\xa4\x72\x6c\x86\x0f\x6f\xe9\xdc\x63\x74\x67\x1e\x32\x50\xbc\x71\x55\xce\x9c\xae\x7a\x5b\x43\x25\x0d\x20\xd7\xd0\x64\xac\x80\xe8\xf4\x06\x08\x1f\x7e\x67\xad\x23\xbf\xa9\xd1\x82\x75\x24\x94\x78\xa6\x01\x95\x40\x6b\x2d\x57\x25\x9c\x55\xdf\x60\x95\x33\x6f\xd6\x4a\x02\xf6\xfd\xe4\x4d\xa5\x82\x88\xa2\xa8\x63\xc0\xf3\x00\xde\x07\xe7\xb1\x84\x1d\x0e\xb8\x0e\x08\x2e\x9a\x99\xce\x28\x2e\x96\x60\xdb\x46\x5e\x97\xc1\xd6\xc1\x45\x6f\xad\xa4\xc4\x4c\xc1\x10\x38\x6e\x89\xdb\xc6\xaa\xe3\xd2\x15\x89\x99\x79\x71\x95\x64\x2d\x13\x73\x55\x5b\x0e\xfb\x16\xb6\x93\x75\x0a\xd6\xdb\x9e\xd0\x8d\x8b\x21\x35\x27\x69\x2a\x15\x94\xf2\x2b\xc7\xa7\x5d\x15\xf1\x39\x8a\xab\x44\x96\x79\x82\x2b\x51\x07\x00\x36\x26\x6c\x73\x88\x59\x07\x70\x82\x86\x86\x05\xca\x99\xb8\x34\xea\xf1\x09\x1b\x23\xcd\x50\xe8\xce\x75\xe3\x57\x01\xb2\xc7\xa2\x75\xb1\x0c\x87\xe8\x7e\x04\x35\xb8\x99\xeb\xd1\x30\x72\xdc\x21\xee\xf8\x96\xfd\x31\x7b\x62\x19\x73\x13\xe8\x62\x4c\x66\x17\xe5\x4b\xd9\x01\xa8\xef\x23\x03\xb6\xe4\x21\x0c\x65\x35\xf0\x3c\xa9\x4e\xfe\xb4\x1c\x12\xbe\x88\x71\x60\x86\xec\x51\x06\x84\x45\x35\x45\x93\xb9\x89\x6c\xf5\x86\x6f\xfc\xf5\xff\xf6\xf4\x6f\x7b\xf6\xaf\xbc\xfb\x99\xef\xfc\xcc\xf6\x3b\x2f\xb8\xdf\x2b\xcd\x4b\xbf\xfe\xa5\x4f\x7a\xd7\x57\xfd\x51\x80\x9f\x7e\xe7\x9f\xaf\x77\xfe\x2b\x64\xab\x17\x7c\xf3\xf7\xdd\xee\xd1\xdf\x94\xfe\xeb\x77\xbc\x71\xfb\xdd\x57\xfe\xc7\x47\xe5\xe7\x3d\xfc\x7b\xfe\xd9\xa7\xfc\xe0\xa3\x1f\x76\xe7\xd7\x3f\xfe\x6f\xff\xab\x37\x7c\xf4\x9f\xdc\x60\x7a\xb7\x27\xbc\x3d\xfc\xde\xb7\x3c\xe9\x23\xdf\xfd\xce\x4f\xe5\x77\xf9\x99\x7b\xde\xe3\x61\xaf\x7d\xfe\xeb\xef\x1b\x9f\xfb\xfb\xe7\xf3\xbe\xea\x7f\xc4\x3b\xff\x8f\xbf\xb8\xc1\xf4\x41\xff\xfd\x61\x3f\xf1\x84\x37\xe1\xff\xf6\x39\x0f\xfa\xd4\x7f\xfc\xf6\x9f\xfc\xd9\x17\x7c\xf3\x9f\x7f\x3c\xfa\x1e\xf3\x4d\x5f\xf3\x27\xf8\x0d\x0f\xed\x3f\x73\xf7\x1f\xbc\xc1\x54\xff\x83\x0f\x7b\xdd\xc7\x1d\x9f\xd6\x9e\xfc\x07\xec\xc1\x5f\xff\x39\xf7\xbe\xc7\xf3\xde\xf4\x6b\x77\xf8\xea\x9f\x78\xd5\x33\x5e\xfc\xe2\x3f\xff\xe8\x17\x3d\xe7\xb5\xf3\x06\xd3\xe7\x7f\xf5\xc7\xbc\xe0\xf6\x9f\x71\xaf\xf3\x63\x1f\xf2\xe0\x4f\xbd\xc3\x8f\xdc\x65\xfb\xdc\xa7\xee\xf9\x21\x6f\x7b\xff\xfb\xee\x70\xbb\xa7\xfd\xd9\x7d\xee\xf5\x8d\x0f\xbc\xc1\xf4\x8e\xff\xf6\x93\xbe\xe7\xa5\xff\x28\x89\xff\x7e\x9f\xe7\xfe\xfa\xeb\x3e\xe6\xb3\x7e\xf9\x9b\x7f\xed\x05\xfc\xa3\xdf\x73\xa7\xf9\xd5\x5f\xf4\xe4\x57\x3e\xe5\x6b\xde\xf9\xec\x1b\x4c\xff\xe5\x93\xef\xf4\xb6\x93\xd5\xb7\xdc\xee\x19\xbf\xf0\xed\x0f\xb9\xc3\x2f\xbc\xf0\xe1\xe9\xc7\xee\x7f\xdc\xe9\x23\x5e\xf8\xef\xcb\x1f\xdf\xef\xe1\xbf\xfd\x53\xed\x46\x5e\xd6\x57\x3e\xf8\xb1\x8f\x7f\xff\xbd\x7f\xf8\x29\x6f\x78\xcf\xcb\x7e\xee\xa9\x3f\x73\xff\xfb\x3c\xed\x75\xf7\xfe\xa8\x3f\x25\x9f\xf2\x8b\x3f\xfd\xea\xf2\x87\xef\xfb\xfc\xff\xfc\x97\x64\xab\x5b\xed\xea\x15\x8d\x46\x9d\x81\x33\x44\x75\x62\x83\xcf\x45\x1c\x87\x65\xf1\x3c\x52\x09\xae\xc9\x0d\x53\x5f\x05\xc0\x81\x9a\x06\x78\xd9\x8b\x3d\x49\x34\x57\xf1\x95\x47\x3b\x97\x6e\xf3\xb1\x52\x4b\x13\x83\x4e\xe7\x6d\xad\x48\x0a\xa9\x49\xf5\xa0\x0f\x81\x6c\xc6\xb4\xc2\xaa\x56\x48\xf1\xbe\x87\xfd\x2a\xf7\x53\x9a\x42\x67\x9b\x71\x99\x69\xae\x65\x9b\x27\xb7\xf4\x8c\x9d\x95\x56\xa1\x81\xf2\x14\x0e\xcd\x55\xe2\xae\xcf\x5a\xac\x70\x80\x82\xab\x6e\xf6\x90\xa0\x1d\xa5\xc4\xb9\xc0\x25\x87\x66\xb6\xe8\x9d\x3f\xcc\x18\x71\xd9\x2c\xd8\xeb\x6e\x10\x3c\x4c\x22\x93\x54\x2a\x0e\xa6\xc3\x65\x13\x9b\x71\x0b\x62\x71\x5b\xdf\x4d\x71\x60\x64\x8f\x90\x0a\x38\x74\x22\x46\x08\x15\x24\xaf\xd8\xf4\xc4\xa1\x70\x4c\xb0\x64\x33\xe3\xc8\x57\x15\xfa\x42\x37\xb2\x4e\x23\x57\x78\x9c\x67\xe7\x03\x4d\x3c\xc5\xe8\x60\xd1\x85\x31\xde\x6b\x6a\x68\x61\xf9\x50\xb7\xbd\x9a\x1c\x20\x33\xc7\x55\x24\xd7\x1a\x74\xd2\x4c\xcf\x5d\xb7\x23\xe5\x55\xe0\xa5\x47\x35\xa5\x86\x8b\x69\x95\xc6\xd0\x92\x01\x4b\x1b\xfc\x5c\x41\x4b\xea\x5c\x0b\xb8\x8a\x1e\xd8\x44\x8c\x86\x9d\x1c\x9e\xb0\x9a\x65\xdb\x4e\x6b\x2b\xef\x6c\xd1\xcb\x06\x8e\x99\xc7\x61\xb8\x0c\xb7\x79\xec\x9a\x65\xba\xac\xa9\x47\x7f\x93\xfb\x79\x2b\x9c\xbe\xc0\xfd\x44\x66\x30\x27\x13\xd5\xa1\x8e\xb2\x9a\xa0\x2a\x3a\x61\xa1\x47\xea\xf6\x74\x32\x25\xae\xc3\xe4\x6d\x54\x21\xbd\x3a\x98\x25\x8a\x5d\x25\xac\x5a\x4f\x0a\x35\x1c\x71\x09\x95\x4f\xcd\x7d\xeb\xd1\xe8\xed\x24\x8b\x87\x4e\xcc\x5c\xb0\xe5\x4b\x8f\x7a\xc3\x49\x9c\x56\x11\x54\xc7\x55\x74\x1e\xca\x4a\x08\x24\x1f\x63\xdb\x0d\x20\xc5\xf6\xb3\xe1\x88\xb9\x3c\x83\x63\xa6\x2f\xb6\x87\xa5\x1e\x54\xcf\xa1\xc0\x86\xc1\xf4\x41\x5f\xe4\x7e\xf2\xee\x64\x70\x5a\x6e\x3d\x2a\x61\xac\xdd\xd8\x72\x30\x9f\x02\xf5\x8e\xab\x22\x0b\xe4\x3b\xb2\xd0\xc4\x2c\x46\x75\x19\x40\x0e\xe5\x65\x7b\x92\x96\xb3\xc2\xb1\xee\xa7\x75\xe9\x18\xa9\xf8\x30\x82\x5e\x59\x9a\x6c\x6e\x07\xb2\x8c\x97\x2e\x4e\xd1\x58\x10\xa1\x8b\x82\x46\xbc\x8c\x80\x56\x4d\xcc\x7e\x02\x88\xb3\x5a\xf6\x85\x27\x42\xb0\x29\xb4\x2b\x6e\x7d\x90\x23\xd1\x73\x39\xf2\xe4\xa2\x0a\xa4\x86\xc5\x87\xbc\x8c\x61\x6f\x66\xec\xa5\x2e\x27\xd0\xb6\xed\xa7\x5a\xb7\x42\xbb\x94\x44\xad\x14\xf7\xb9\xcf\x91\xea\xe6\x76\x56\xb7\x35\x21\x8b\x98\xaa\xc7\x65\x23\xf4\x8b\x15\x9b\xf2\x92\x57\xab\x5d\x4d\x01\xe3\xbd\xa9\xdc\xa3\x33\xb5\x72\x15\xd2\x4a\x5d\xa1\x6d\xe1\x9a\x91\x2a\x53\x91\x95\x0f\x72\x13\xf8\xdc\xca\xf3\xbb\x00\x7c\x16\x2d\x7a\xd7\x12\xee\xc5\x9c\xac\xb6\x12\x87\x15\x6c\xa3\xab\xce\x85\x81\x43\xee\xa1\xd4\xa9\x1a\xf6\x69\x63\x87\xa0\x87\x3c\xaf\xca\xfa\xf3\x5a\x69\x73\x9a\x71\x3b\x40\xe1\x9b\x28\xb4\xa9\x18\xc7\x3c\x16\x1e\x5b\x5a\x76\x0f\x65\x74\x23\x4b\xcb\xa1\x96\xdb\xba\x6d\x28\x5d\x95\x50\x19\xbb\x16\x75\xdf\xe5\x09\x74\x50\x5b\xd2\xad\x65\x68\x8e\x64\x8f\xc1\xbc\x36\x79\xc1\x07\xb4\xcb\xf4\x73\x01\xa0\x0b\xb1\x75\x79\x99\x82\x00\xb0\x3b\xa3\x4b\x3b\x29\x91\x8a\x9a\x56\xe5\xa0\x91\x41\x83\xf2\xa2\xe9\x8e\x44\xe0\xa6\x12\xa5\x52\xd4\x4a\xa8\x00\xc0\x06\xf7\xcb\x8e\xf7\xee\x57\x95\x7d\x22\x0e\x2f\xd1\x46\x47\x22\x03\x04\x7a\x97\xe5\x07\x66\xec\xec\x4d\x13\x31\xb0\xe0\x87\x9d\xc6\x1c\xb4\xf8\xab\xc6\x4d\xb2\xa9\x87\xdc\x25\xb2\xa7\x71\x83\x06\x69\xc3\xf0\xa7\x66\xdd\xac\x6b\xe7\x78\xee\xd1\x57\x0f\xd5\x6d\x57\xcc\xe9\xb0\xeb\xd0\x23\xbb\x4a\x7e\x71\x61\x93\xa0\xb0\x2f\x76\x87\x2e\x2b\x72\x9c\x40\xe4\x73\x75\x35\xec\xd3\x5a\x47\xf7\xa8\x83\xea\xd3\x0e\x88\x10\x4c\xe2\x84\x46\x5f\x95\xf5\xef\x6c\x3b\xd8\x56\x70\x27\x44\xb3\x32\x96\x09\xc9\x58\xf3\x5c\x26\x37\xd2\x6d\x95\x8c\x43\xef\x25\x39\x08\xbd\xc3\x10\x8f\xc3\x98\xf3\x26\xf0\xb9\x55\x2c\x79\x41\xd8\xa5\xbc\x98\x80\xea\xb3\xad\x7e\xca\x5e\xd6\x79\xac\x3d\xee\x64\xcc\xb3\x4b\x78\xc2\x7e\xe4\x03\xe0\xe4\x7d\x31\xe6\x24\x89\xe9\x7c\x55\x1a\x83\xed\xad\x31\xb7\x98\x3e\xd3\x18\xcd\x9f\x4a\x6e\x60\xe2\xa4\x91\x00\xf9\xac\x7c\x1e\xeb\x64\xb2\x95\x25\x72\xeb\xd9\xc1\x46\xc8\xf1\x2a\x2e\xe1\xe6\x45\xc6\xfc\xd8\x36\x54\x99\x8e\xdc\x74\x9c\x12\x67\x28\x24\x2c\x27\x0d\xc0\x71\xad\xcb\x59\xd7\x02\x68\x6c\xe5\xa4\x15\xc4\xcb\x94\x34\x77\xcc\x8a\x3d\xab\x04\x86\xf2\x86\x73\x5f\x73\x1a\x66\x4d\xc5\xf2\x49\x70\xb5\xab\x38\x8e\x4e\x82\x99\x4b\xe7\xb0\x24\xee\x2f\x13\x3d\xf4\xb8\x71\x9e\xf7\x0d\x6a\xbd\xfb\x63\x1b\x3e\xa4\x7d\x31\x9e\xe8\xe3\x18\xb2\x11\x77\xc4\x7c\x26\x03\x76\xa6\x76\x1e\x34\x20\x5b\xbe\x2a\x3c\x5f\x8b\x42\xfb\x3c\x05\x29\x0b\xa4\x6e\x74\x00\x3d\xe2\x0a\x11\xdc\x36\x68\x71\x4b\x75\xda\x83\xd6\x31\xe1\x6c\xaa\x66\x8b\xe8\x65\x2d\xd6\x5a\x21\x17\xb3\xc9\x13\xfa\x06\xbd\x07\xa6\xd4\x9e\xba\x2e\x88\x61\x65\x76\x3c\xd7\x70\xae\x41\x9e\x3b\xb1\xe9\xc0\xea\x28\xeb\x65\xd5\xa1\xb6\x46\xa2\x8f\x1e\x34\x39\x03\x38\xec\xb6\xf6\x73\x6f\xa8\x94\xa9\x0f\x06\xc5\x36\x31\x6b\xa1\x1c\x29\x58\xe8\x82\xca\x5a\x11\xab\x6f\x02\x9f\x5b\x65\xa7\x2e\xf0\x7c\x94\x2c\xda\xb6\x1c\x2d\xce\x8e\xb7\x9d\xb8\x89\x60\xea\xc2\x32\x77\x64\x38\x17\x39\x7b\x70\x3e\xaa\xc0\x04\x4e\xe4\x36\x9f\x43\x5c\x55\x72\x0c\x58\x42\xed\xb6\x36\x15\x19\x39\xd2\xb4\x60\x59\xce\xd9\x93\xa9\xd8\x71\xdf\x72\x92\x22\x24\x8b\x2d\xcb\xb1\xc0\x4a\x3c\xb3\x17\xcd\x91\x67\x64\xd9\xb5\x54\x03\xe3\xa4\xd7\x11\xe2\x62\xfa\xe1\x4c\x4e\x79\x82\x7d\x67\x4a\xc8\x6a\xab\xb7\x10\x01\xbf\xb8\xba\x1f\xe2\x98\x97\x01\x72\x85\x65\x07\xd8\x2c\x62\xdf\x6b\xa2\x19\x84\x45\x25\x68\x56\x80\x9c\xa6\xe8\x58\x55\x3e\x60\x83\xd8\xd9\x56\xe4\x52\x33\x2a\x2a\x5e\x25\x35\x68\x72\x0e\x0a\x02\xe2\xd4\x2e\x7d\x67\x53\xb3\x54\xe2\xea\x06\xa2\x7a\x37\x03\xf6\xa1\xf5\x91\x98\x3f\xf7\x1d\x30\x75\x6a\x60\xe2\x55\xe1\xf9\x99\xcd\x98\x72\x38\xe2\x9d\xd3\xe7\xee\xf5\xf4\xf9\x60\xc5\x57\x20\x5c\xf3\xa8\x1f\x0d\xc6\xc9\x02\xa0\x68\xd2\xf5\x10\x14\xcd\xab\xb4\xd8\x76\xd3\x0d\x60\x68\xe3\xdb\x21\x2a\xa2\xc7\x80\x10\xef\xa1\xe3\x69\xf6\x8c\x18\x84\xc7\x9c\xbe\xe8\x08\x63\x17\xd4\x17\x70\xf6\x72\xd5\x9c\xb5\x59\x3a\x6e\x84\x8a\x9d\x2c\x90\xd7\x62\x67\x40\xd4\x44\x4e\x64\xd5\x80\xb4\x75\x19\x85\xe7\xee\x41\x41\x12\x46\x9e\x6b\xca\xe6\xe6\x01\xca\xb7\xca\x77\x5f\x31\x4c\x27\x6c\x18\xe3\x73\x3b\xa3\x91\xbe\xab\xac\xb0\x28\xd9\x06\x83\x67\x03\xc0\x79\x08\x3d\x44\x67\x8b\x49\x7b\x4e\xb5\x59\xa5\x34\x57\x6d\x60\x34\x79\x53\x33\x1f\x73\xf6\xea\x94\x13\xd9\x00\x33\x58\x98\xb1\x2d\x10\x08\x54\x4d\xe6\x5b\xc9\x35\x8e\x48\x21\x0b\xaa\xaa\xfd\xaa\xea\xf1\x3e\x13\x30\xca\x17\x26\xdc\x39\x56\xa3\xcf\x99\x30\x0a\x7d\x26\x4d\x50\xc0\xcb\xe2\x56\x9d\x84\x67\x11\x87\x20\x53\xe8\xae\xf1\x8b\x6a\xfb\xac\x23\x45\x49\xd3\x6e\x71\xde\xe5\x96\xb0\x3e\x0a\x4a\x3e\xe2\x95\x4c\xba\xa8\x6d\xb0\xea\xd0\x3c\x98\x6c\x8b\xcf\xda\x0f\xaf\xae\x52\xd2\x64\xdc\xcd\x10\x26\x3f\x04\x23\x1a\xb9\x79\xc2\x43\x39\x2f\xec\x7a\x44\x8c\x26\xcb\xc5\xa8\x26\x22\x80\xbb\xe1\x6b\x3c\x01\x67\xa7\xbe\x4a\x7d\x03\x9d\xc6\x22\x8f\xf3\x39\x27\xc2\x3c\xa1\x88\x55\xa4\x49\x0e\x27\x87\x3d\x15\xef\x26\xc8\x13\xca\x13\xf0\x6d\x45\x14\xa5\x45\x5f\x25\x42\xc4\x16\x1a\x7c\x25\x5b\xcd\x61\x8c\xee\x81\xc6\x27\x19\xbc\xc2\x70\xc8\x15\x16\x67\x6c\xf7\x98\x52\xdc\xd8\xd8\x55\x0c\xc5\x21\x7d\x19\x37\xb9\xe0\x68\x87\x3d\x43\xdd\x83\x55\x93\x4d\xb2\x0a\xbd\x9d\x72\x57\x16\x1d\x76\x88\x0a\xdc\x5c\x6c\xd7\x81\xba\x79\x1b\x6e\xc7\x34\xf6\x9b\xc0\xe7\x56\x15\xb4\x0b\xc0\x27\x31\x34\x6c\xca\x65\x2c\x4d\xf7\x73\x00\x21\x22\x5c\x41\x75\x26\x18\xec\xd7\xc5\x21\x2c\x20\xc3\x4c\xbb\x78\x9c\xc5\x82\x72\x80\xab\x72\x3e\xad\x7b\x66\xe8\x50\x1a\xa8\xca\x83\xe1\xa9\x88\xa5\xa7\x23\x59\x3f\xa8\xdf\x55\xde\xeb\x9a\x3a\x1b\x46\x53\xd4\x02\xe1\x7b\x1e\x57\x81\x4f\x74\x25\x09\x12\x02\xb2\xe8\xcc\x5b\x38\x97\xe0\x49\x24\x62\x23\x42\xda\x99\x8d\x23\x64\xc3\xa6\x94\x46\x83\x3d\xbc\x6b\xf6\xb8\x6a\xa2\x3d\x17\x9c\xb0\xa5\x85\x31\x76\xd0\xb9\x4f\x9e\xc9\x63\x31\xb1\x66\xe8\x6b\x51\x8a\x87\xdd\x38\x31\xfd\x98\x9d\x42\x7f\x06\xbf\x82\xcb\x92\xf0\x20\xe7\xb1\x2c\xa8\x89\xbc\x1d\x75\x8c\x35\x85\xc6\x0f\x24\x0d\xb3\x59\x6b\xbe\x0c\xd6\xe4\x50\xc7\x0a\x26\x24\xf0\x58\x35\x66\x97\xcd\x91\xdf\xcf\xa6\x52\x04\x47\x97\xda\xd4\xb9\xca\xbd\xe2\x6e\xd8\x16\x73\x14\x1d\x79\xba\x0a\x50\x8c\xe6\xa5\x76\x56\x3b\x17\x39\x96\x78\x15\x0f\xb7\xd5\xe0\xe6\x6e\x0a\x11\xa8\x00\xa5\x42\x5b\x77\xa9\x94\xa1\x64\x5f\x75\x01\xd3\xdd\x16\x89\xc2\x50\xd9\x14\x67\x65\x33\x3b\x79\xd9\xdd\xc9\xa5\xae\xcc\xf1\x96\x78\x23\x61\x0b\x0b\xdf\x16\x2d\x91\x6f\x60\x9a\x31\x33\x0c\xb1\x90\xdd\x6e\x22\xe9\x96\x9c\x53\x94\x8a\x1b\xc4\x31\xff\x92\xe9\x79\x8b\x9a\xfc\x05\x61\x57\x23\x15\x9a\x8d\x0d\xb4\xee\x87\x10\x6e\x09\x05\x80\x68\x47\x70\x1b\xaa\x1b\x75\xc5\xc1\x4e\x62\x2b\xa0\xaf\x4e\x4b\xa5\x88\x2f\x57\x91\x76\xd7\x0e\x96\x95\xe3\x3c\x54\x3d\xc6\x69\x15\xf1\x33\xb3\x00\xa0\x5e\x83\x08\x0c\x83\x18\x80\x3a\xce\xea\xfa\x72\x1a\x98\xd1\x70\xec\xaa\x4f\x39\xdd\xe6\xda\x64\xcd\xb4\x73\xcf\x40\xd1\xb4\x9f\xed\x58\x96\xb6\xa7\xb2\x2d\x55\x63\xc3\x1d\x69\x5b\x98\x47\x55\xa8\x1a\xa1\xf9\x65\x62\x76\x7e\x6f\x41\xc3\xb4\x59\xde\x90\x15\x31\x2b\x7e\x12\x86\xe4\xb6\x62\x05\xa8\x2a\xee\x28\xe7\x3e\xca\x60\x64\x8b\x1d\x09\x82\xad\xb8\xaa\x09\x40\xa1\x10\xdd\x2a\x7b\x12\x3b\x60\x4c\x1b\x56\x93\x6d\xcb\x39\x54\xc2\xda\x08\x17\x4a\x6b\x83\x51\x55\xf6\x48\x89\x43\x79\x30\x70\x15\xed\x4b\x6b\x26\xa1\x14\x07\xd1\xd1\xda\xb2\x82\xea\xd7\xb6\xce\x8c\x0f\xb2\x29\x5b\x80\xcf\x5c\x78\xd3\x10\x72\xb8\xef\x61\xee\xe2\xb8\x6a\xc4\x17\x53\x31\xba\xd8\xd7\x62\x25\x98\x87\xa9\xa2\x8d\x43\x05\x02\x21\x4e\x67\x33\x91\x77\xa2\x25\x88\xa2\x4c\xba\x0d\x31\x27\xf7\x35\x5f\xa4\xf5\xc2\xcf\x52\x11\x83\xc9\x82\xd2\x59\xb6\x7e\x0a\x16\x70\x38\x6b\x82\x85\x30\xd4\xa9\x3f\x18\x8f\x46\x81\x10\x99\xad\xb8\xac\x2e\x83\x9b\xc9\x56\xfc\x97\x5e\x72\x3f\xfc\x9e\xff\xf6\xf5\xaf\xfa\xa8\x27\x3f\xf0\xf1\x3f\xf9\x3a\xfa\x3f\x9e\x76\x87\x2f\xff\xe3\x4f\xf6\xfa\x9f\x38\xf4\x80\xdf\xfe\x98\xff\x74\xb7\xbf\x4a\xb6\x7a\xc0\xc7\xfe\x9f\xec\xcd\x8f\x78\xc2\x97\x3d\x58\x7d\xdb\x0f\x3f\xf6\xfb\xbe\xbb\xbf\xf8\xae\x6f\x79\xed\x1f\xfd\xc9\xaf\x7f\xd7\x47\x3c\xe1\xdd\xef\xfb\x85\x77\xfc\xff\x6f\x30\xfd\xbf\x1f\xf1\xe6\x47\xb3\xbb\x7c\xeb\xdf\xb5\xaf\xfc\x96\x2f\x78\xeb\x27\xfc\x93\x7b\xbd\xed\x4f\xbf\xfc\x9f\x3d\xf4\x29\xe2\x25\xef\xdc\x9a\xf8\xbf\xde\xf0\xe0\xf7\xdc\x60\xfa\x8f\x5f\xf4\xef\x3e\xe2\x4e\x7f\xf6\x79\x0f\x7d\xcf\x17\xbd\xe3\x8e\xbf\xf1\x35\x77\x8d\x5f\xf2\xa0\x47\xbf\xed\x8b\x5f\xfc\xeb\xf2\x09\x7f\xf4\x98\x7f\xfe\x15\xf1\x1e\x8f\xbc\xc1\xf4\x87\xbf\xf8\x9b\x7e\xf7\x0f\xee\x7b\xb7\x4f\x7f\xed\x53\xbe\xfd\x15\x9f\xfe\x90\xfe\x9c\x7b\xfe\x53\xf1\xcb\x4f\xf8\xc9\xaf\xfb\x8a\x87\xfe\xce\xf7\x7c\xd3\x17\x7e\xf5\x5d\x7f\xf1\x06\xd3\xf7\xff\xd1\x93\x9e\xfe\xea\xfb\xfd\xe6\xcb\xbf\xff\xb5\xef\x7f\xfb\xed\xff\xd1\x3d\x5f\x76\xfb\xbb\x3d\xe4\xeb\x5e\xf9\x94\x2f\xfa\xf8\xc7\x3d\xf0\x3f\x7c\xee\x7b\x3f\xf3\x3e\x5f\x7d\x83\xe9\xfd\xde\xfc\xe7\x6f\xb8\xf3\x13\xbe\xee\xf3\xff\x0f\xf0\x77\x9e\xfc\x69\x3f\xfc\xaa\x37\xff\x8b\xdb\x7f\xdb\x87\xbf\xff\xfb\x1f\xb0\xdc\xfb\x49\x4f\x78\xe2\xdf\x7a\xfc\x87\xdf\xb8\x80\xcf\x7f\xf4\x03\xc8\x9f\xfd\xc3\xd7\xff\xea\x57\x7e\xf2\x57\xa5\xef\xfc\x2e\xf7\x5b\x3f\xf6\x77\xdf\xf4\xb9\x2f\xbc\xd3\x37\x8f\xa7\xde\xf5\xbb\x1e\xf6\xee\xe7\x3e\xf7\xb1\x37\x98\xbe\xf5\x1f\x7f\xba\xba\xd7\x13\xcb\x97\xbe\x78\xfc\xe1\xed\x7e\xed\x33\x5e\xf0\x8c\x9f\xfd\x17\x9f\xf6\xd2\xe7\x3e\x9e\x2c\xaf\x7c\xd8\xeb\xbe\xfd\x6b\xef\x47\x9e\xf4\xc4\xff\xf9\x11\x6e\xb5\xab\x7f\xe5\x23\xc0\x97\xfc\xcc\x9f\xbd\xec\x0f\x5e\xff\xb1\xcf\xbe\xcf\xf7\xff\xfb\x8f\xfb\x9d\x7f\x4d\xdf\xfe\x2c\xff\x95\x77\x7b\x80\xbd\x37\x79\xcf\x3b\x7f\xe7\xfc\xfe\x8f\xd9\x6e\x30\x7d\xe8\x1d\x9e\xf7\xdc\x2f\x7b\xfb\x7d\xbf\xed\xa9\x5f\xfa\xf4\xdf\x6c\x2f\x7c\xf6\x13\xde\xf4\x43\x6f\xf9\x04\xa8\xff\xe3\x0b\xef\xfe\xd2\xb7\xdc\xf5\x8d\x1f\xf6\x7d\x3f\x7d\x83\xe9\xbd\x3f\xe2\x69\x4f\x7f\x0e\x9f\x1f\x79\xb7\x57\x3f\x72\xfd\xad\xf7\x3e\xe9\xe3\xdf\xff\xf7\x5e\xf4\x0f\x5e\xfd\x11\xcf\xfe\xd1\xf7\x3e\xff\x71\x1f\xf2\x88\x1f\x7c\xca\x33\x6e\x30\xbd\xf3\x97\x3c\xf3\x93\xbf\xee\xe3\xfe\xc6\xab\xdd\xcb\x3f\xf7\x11\xef\xf8\x02\x47\xef\x70\xd7\xcf\x88\x5f\xf6\x98\x77\x9d\x9f\x68\x7f\x90\xfe\xee\xa7\xbc\xe7\xfd\x37\x98\xfe\xf1\xed\x1e\xf9\x9e\xbb\xbf\xee\x7e\x5f\xf3\xac\x0f\xfd\xe9\xf2\xb1\x2f\xfd\xec\xc7\xde\xee\x01\xf6\xed\xef\xf9\x94\x6f\xfe\x32\xf4\xa8\x7f\xf5\xca\xbf\xc8\x9f\x73\xa3\x12\xd9\x8f\x7e\xff\xf7\x3e\xff\x23\xdf\xa6\x1f\xf8\xf5\xaf\xfa\xa1\xa7\x3f\xf3\x41\x0f\x7c\xff\x2b\xbe\xea\x85\x6f\x7a\xf0\x4f\xbd\xf9\xf7\x71\xf9\xe4\xff\xf0\xd8\x1f\x79\xde\xed\x6f\x30\xbd\xef\xfd\xef\x7e\xfb\x7b\x67\xfa\xc7\xfe\x25\xf7\xf8\xde\x77\xbd\x3a\xfd\xdc\x97\xa3\xcf\xfc\xd5\x1f\xfb\x19\xae\x5f\x7a\xbf\xff\xfa\xd4\x37\x7e\xd6\x13\x6f\xfc\x5b\xf7\xff\xc9\x27\xbe\xe0\x6d\x5f\xfe\xee\xb7\xfd\xfb\x87\xd3\x27\xbf\xe6\x5b\xbe\xf6\x1d\xbf\xf9\x71\xf8\xff\xf7\x31\x0f\x36\xbf\xf7\xd0\x67\xff\xbb\x7f\xf9\x69\x3f\xf0\xdc\xd7\xff\x25\xe3\xed\x56\xbb\xfa\xbf\xf7\x0c\x2f\x0f\xfb\x90\x77\xdc\xec\xef\xa2\x65\x88\x1e\x7b\x82\x67\xb7\x2d\xf1\xb3\xad\x29\x39\x8a\x0a\x27\xdb\xd2\x0b\x4d\x13\xf2\xaa\xe5\x41\x0a\x56\xc5\xc8\x04\xcd\x07\x9a\x19\x7f\xf2\xa3\xff\x77\xa0\xe4\xaf\x5b\x09\x3f\x06\x96\xb4\x90\x9a\xe7\x11\x6d\xc4\xe2\xc4\x12\x2f\x99\xb2\xee\x15\xda\xa4\x89\x7e\x45\x24\x29\x62\xb7\x02\x39\x43\xb9\x33\xb8\x5c\xb3\x12\x36\xdb\xc9\x49\xd1\xdc\x1f\x2b\xda\x35\xb4\x9d\x10\x7a\x70\xc0\xce\x63\x5b\x04\xde\xad\xd8\xfa\x8c\x81\x77\xe2\xba\x40\x54\x85\x60\xf8\x45\x2b\xb1\xb5\x03\xb5\xaf\x3b\x18\x68\xf3\xbe\x31\x44\xf6\xce\xb4\x15\x89\x11\x05\x77\xcc\x49\x00\x25\x8b\xb2\x0c\x23\x21\xef\x91\x67\x18\x2f\x5a\x09\x22\x12\x54\xbb\xe7\x51\x1a\xe0\x66\x61\xbb\x72\x3c\xb0\x31\x33\x3a\x40\x9a\x51\xa0\x62\x6a\x48\x41\x92\xb5\x62\x52\xe7\x01\xc0\x45\xe7\x84\xad\x49\x6e\xfc\x30\x05\x30\xe5\x7a\x77\x0e\x49\xb9\x88\x34\x91\x35\x28\xb5\xa8\xd6\x65\xb0\x10\xc6\xa2\xa3\x83\x9b\x87\x60\xe9\x1f\xcc\x08\x5f\xb0\x12\xd8\x16\xb8\xbb\xac\xd4\x79\x38\x43\xdb\xae\xcd\xee\x68\x6e\x86\xe1\x66\xdc\x34\x6d\x38\xe4\x8e\x45\x4b\xa5\xd7\xa3\xd9\xb9\x1a\x7d\xd1\x4a\xf8\x6e\xc3\xa1\x0c\x84\xa7\x0c\x85\xb9\x05\xb2\x7d\x54\x71\xb2\x41\x0c\x4c\x09\x75\x1a\x97\x68\xe1\xec\xb7\xc5\x4d\x41\xd6\x02\x44\xf9\x5f\x27\xf6\x7f\x82\xcf\xad\x70\xfa\xff\x7d\xf0\xe1\x4b\x33\xd1\x34\x58\xba\xec\x40\x47\x85\x97\x73\xc5\x62\x25\x8c\x21\xa4\x59\xac\x3c\x0a\xc3\xec\xd4\xfa\x14\x99\xf2\x20\x0a\xfb\xa0\x86\xcc\x05\x9f\x52\x91\x2e\x63\x5b\x53\x2f\x04\xee\x60\x4d\x48\x4c\x4d\xcd\x70\x98\x38\x72\xb4\x58\x4f\xdb\x02\xa2\x74\x8d\x07\xf0\x1c\x86\x09\x2f\x03\x9f\xb6\x6f\x16\xf6\x88\x73\x36\x6e\x6e\xa4\x33\x0d\xd1\x26\xd5\xb9\x6f\xa0\xe8\x3d\x86\x22\x6a\xe6\x6d\xe8\xdd\x78\x6c\x3d\x4a\x02\xb0\x8b\x0e\x95\xd3\x0d\xc5\xd1\x32\x47\xc9\xb8\x65\x16\xc6\xc1\x92\x2a\x40\x7c\xb3\x95\x9b\x2d\xcd\x65\x5b\x2c\xdd\x67\x73\x7c\x71\xae\xab\xd3\x5e\x75\xd1\xb2\xd6\x33\xd1\x0e\x72\x26\xd6\x07\x18\x6b\xa5\xe5\x24\x87\x50\x39\x8b\xb3\x78\x9c\xc3\x18\x9e\xad\x25\xd2\x9d\xa7\x91\xc0\xf2\xc1\x99\x39\x17\xac\xa4\xe0\x95\x23\xcb\xcd\xa6\xd0\xe0\xba\x56\x6d\x84\xdd\x51\xaa\x13\xb6\x05\x80\x24\x91\x5c\x6c\xa7\x55\x1c\x36\xc9\xcc\x05\x19\x76\xbd\xe8\xeb\x24\x76\xfa\x0d\x21\xbf\x8c\x1d\xab\xea\x10\x94\xcb\x8c\xd6\x70\x61\xf9\xce\xd4\x79\x66\xb7\x4a\x39\x7b\x28\x54\xe8\x39\x47\xd8\xc0\xb8\x68\x25\x22\xc9\x9d\x68\x4e\x40\x95\x52\x6b\x2f\x0e\xab\xb5\xe3\xa9\xd4\x05\x86\x38\xe9\xd4\x71\x95\x83\xf8\x06\x69\xef\xbd\x8e\x8e\xa3\xbb\x09\x7c\x6e\xe5\xf9\x5d\xe0\xf9\x18\x35\x9b\xd9\xb2\x60\x00\x4d\xb3\x78\xaa\x2b\x3e\x00\x97\x94\xa1\xa2\xe2\xda\x77\xd7\xf9\xae\x51\x3c\xd2\xd9\x4f\x34\xf4\xba\x47\x73\xd5\x2b\x2f\x1a\x23\x84\x82\x20\x50\x80\xda\xc0\x43\x0a\x24\xd8\x3c\x66\x10\x73\xea\x4d\x0f\x74\x0e\xab\x87\x21\x90\xd4\x50\x16\x1e\x3f\x58\x04\xba\xe0\x53\x1a\x23\x4a\x92\xa7\xc8\xab\x2d\x8a\xb7\x1e\x50\xc3\xa3\x8c\x05\xd0\xe4\x49\x6a\xf9\xe4\xb2\xe3\x18\x1b\xdb\x45\x53\xbd\xf4\x4d\x5e\x75\xd1\x92\xd1\x7e\xa1\x34\x73\x13\xcf\x5d\x16\x8f\x72\xa1\xb9\x2d\x9e\xd5\xa5\x19\x96\xa0\x52\x27\x93\xb0\xc5\x83\x1e\x9c\x3a\xb1\xe1\xfd\x2a\x40\x2e\x7c\xa3\x39\x86\x63\x80\x3c\x23\x67\x92\xe6\x01\xe0\x38\x6c\x3a\x0e\xd9\x8f\xb2\xb7\x51\xd6\x2a\x4b\x49\x81\x00\xcf\x41\xa5\xf3\xa2\x73\xc2\x69\x8c\x7b\x56\xdb\xb2\xeb\xc1\x33\xd8\x6c\x94\xde\x75\x6f\xc7\xae\x8d\x10\x0d\x99\xa3\xb7\xc0\x85\x1c\x82\xc2\x75\x0b\x69\xe7\xd3\x5f\xb4\x27\xa3\xf8\x55\x72\xc6\xac\x54\x2b\x98\x0b\x89\xc7\xca\x07\x3f\xbb\xa0\x78\x99\x25\xae\x92\x30\xc7\xa4\xe8\x62\xb0\x75\xea\x05\x23\x91\x2f\xda\x93\x51\xc2\x2c\x53\xb8\x93\x0b\x35\xc7\xa1\xea\x49\xa2\xd2\xab\x35\xe0\x50\x12\xa6\xea\xe3\xf0\x28\xc3\x74\x1a\x48\xfd\xa8\x51\x45\x7f\x13\xf8\xdc\x2a\x96\xbc\x00\x7c\x44\x07\x09\xa5\x64\xf9\x61\x47\x2e\xbe\x3b\x51\x34\xf3\x94\x25\x33\x52\x75\x5e\xd8\x42\x49\x62\x79\x34\x9b\xa0\x15\x56\x80\x48\x2e\xda\x40\x0c\xa3\x91\x61\x4b\x5b\x3e\x36\x45\x20\x31\x1c\x2d\x62\x5b\x98\x54\x1a\x55\x86\x99\x9e\x74\xed\x28\x24\x5d\x4d\x41\xb9\x8e\xc6\xe8\x55\x21\x46\x03\x50\x04\x5b\xce\x25\x24\x4c\x77\x07\x54\xda\x04\x46\x6b\x5a\x30\x4b\x24\x22\xd4\x0c\xe8\xa4\x42\x14\x72\x45\x87\xef\x49\x5f\x15\x8a\xda\xd3\x10\x52\xf6\x69\x2c\x83\xfa\xe0\xa7\x02\x61\xeb\x06\xa8\x9e\x6d\x63\x69\xad\x8a\x80\x71\x3a\xd3\xec\xbe\xaf\x58\xf7\x73\xfb\xa0\x86\xfd\x05\x7b\xa2\xcd\xbe\x6d\xeb\x10\x8a\x6a\xb5\x13\x7c\x1e\x06\xb0\xd6\x03\x1f\x33\xc8\x2e\x26\x39\x4e\xae\xac\x00\x18\xe4\xbc\x2c\x2a\x25\x17\xfb\x45\x2b\xf1\x0e\x6e\x76\x9e\x7b\xcb\xfa\x54\x26\xdb\x3a\x56\x47\xfd\xb2\x0d\x53\xfd\xd8\x3b\x20\x72\x3f\x39\x72\x7a\xdf\x54\x67\x85\xb6\x2c\xcb\x45\x2b\x39\x0e\xdd\x4a\xc7\x6c\x30\xdb\x77\xaa\x22\x32\x85\x62\xd2\x76\xe9\x72\x0d\xc2\x49\x77\xe0\x30\xf6\xd6\x4f\x5f\x35\x3a\xbc\x5b\xc5\x45\x9e\x0f\x0b\xdd\xaf\x92\xf8\x16\x34\x5f\x13\x5e\xe5\xbe\x03\xad\x74\x3f\x0e\xd8\x84\x41\x1f\x48\x12\xa4\x66\xeb\x49\x30\xa7\x4b\x98\xa7\xb4\xe6\x26\xf0\xb9\x55\x76\xea\x82\xb0\xab\xa9\x3d\x9b\x1d\x39\x4e\x06\x30\x1b\x90\xe7\xd2\xf3\x06\xd2\xca\x2d\xa1\xc2\x2d\xac\x28\xd8\x75\x90\x0b\x0e\x58\x4d\x52\x29\x18\xdb\x55\x21\x46\x34\x7d\x48\xcf\xfa\x84\xce\x6e\x69\xd3\x40\x79\xb5\x18\x4f\xc5\x3e\xf6\x50\x38\x0a\xb0\xd5\xb1\x03\x17\xe9\x32\x77\x8a\xdc\x7e\x95\x0f\x66\xb6\xb5\x5a\x63\xd1\x61\x02\x2a\x92\xb3\xd3\xf4\xd0\x96\x24\x20\xc0\x91\x4c\x21\x87\xa1\x47\x14\x6a\x83\x03\xb7\x33\x65\xc4\x33\xbe\x68\x25\xfc\x4c\x30\xcd\x63\x00\x15\x42\xa9\xd1\x17\x17\x1b\x77\x73\xd9\x39\xb4\x0b\x83\xb2\x53\x6e\x14\x51\x7d\xc6\x6a\xe9\x52\x17\x29\xae\x0a\x00\x37\x0a\x46\x83\xd3\xe9\x28\xe0\x19\x54\x1c\xfc\xd0\x0b\x25\xcc\x2e\x88\x54\x69\x18\xab\xeb\x80\x26\x98\x8a\x21\x07\x67\xa3\x5a\x5c\xe4\x83\x71\x40\xe0\xbe\xc2\xbc\x82\x82\x5c\x4e\x2c\x15\x8f\x8f\x10\x74\xce\x39\x8d\x24\x78\xb6\x9b\x21\x6d\x53\xa1\xf4\x9e\xa1\x92\x41\xa6\xe3\xa2\x95\xd4\x05\x71\xe6\x30\x28\x56\xc3\xbe\xf0\xc0\x00\x3f\x02\xc6\x0a\x75\xdb\x76\x4d\x95\xe7\x58\x27\xdc\xcf\xbd\x84\x8e\x11\xaf\xdd\x5e\x06\x83\x4c\xda\x3d\x8c\x43\x94\x16\xb8\xc6\x66\x51\xde\x56\x8e\xb1\xec\x81\xe3\x56\xcc\x36\x38\xe7\x0a\xd2\x4d\x27\x8d\x2b\x07\x48\xe0\x9b\xc0\xe7\x56\xf9\xee\x0b\x3c\x1f\x79\x62\x49\x51\x5c\x91\x0e\x5d\x2b\xb7\x05\x69\xd2\xac\x09\x14\xb8\x8c\x43\x3a\x1f\x71\x04\xc0\x0a\x0d\x09\x2d\xb9\xd9\x4d\x7d\x70\x26\xf0\x15\xee\xf4\xb9\x27\x34\x75\xeb\xad\x6d\xeb\x46\x46\x3b\x49\x58\xc2\x58\x4e\xca\x63\x07\xeb\x96\x37\x18\xe3\x8c\xb2\x4a\x4e\xc8\x81\x92\x4d\xf0\xa2\x95\x20\x88\xd3\x8e\x21\xa2\x6d\x03\x3a\x45\xea\x15\x27\x4a\xb3\x89\x94\x44\xa7\x3a\x90\xdb\xe7\x31\xe2\x76\x44\xe8\xf2\x3e\x14\x20\xf3\xaa\x95\xf8\x6d\x2d\x5c\x46\xe9\x90\xc7\xd3\x69\x60\x4e\xd6\x30\x3e\x2b\x1b\x69\x61\xe8\xa8\xd0\x37\x7e\x46\xc0\xf0\xa9\x69\x9d\x8b\xdc\x22\xb8\x2a\x0f\x96\xf8\xae\xb3\x77\x58\xd8\x9c\xb2\x28\x35\xa7\xd1\xd6\x88\x14\xcc\xe7\x86\x19\x57\x14\x0b\x61\x05\x6c\x9d\x55\x1e\x63\x3a\xf8\x55\xaf\x3c\xae\xa3\x01\x9b\x0e\x8b\x63\x27\x53\x53\x3c\xcf\x65\x17\x88\xaf\x55\x72\x96\xb2\xcf\x06\x5a\x2d\x51\x20\x2c\x63\xa0\xf4\xa8\x71\x5e\xf4\x75\xda\x5c\x3b\x8a\x7c\xa6\x03\xee\xbb\x9a\x1b\x9b\x94\xfb\x5a\x18\x1a\x06\x89\x54\xa9\xdf\x8e\xb4\xbb\xba\xa2\x1e\x8c\x35\xa6\xc6\x7c\x55\x61\x62\xaa\xc2\x6d\xc1\x89\x99\x85\x3b\xac\x96\xc8\x4f\x46\x67\x9e\xb0\xea\x81\x8d\xdd\xe9\x19\x7a\x62\x23\x37\x4f\x97\xb1\x84\x6d\x95\xec\x26\xf0\xb9\x55\x05\xed\x02\xf0\xc9\xb1\x17\xea\x49\xd1\x68\x17\x15\x0c\x75\xdb\xff\x88\x74\xb2\x65\x5a\x1c\x76\xbe\x5a\xb6\x1a\xbd\x83\x2a\x90\x63\xd8\xb4\x03\x7c\x50\xdf\xe1\x82\x4f\x29\xb9\x52\x2e\x41\x03\xe2\x76\x1c\x26\x1c\x1b\x5f\x17\x4c\x52\x39\xcf\xa2\xe1\x76\xd8\x42\x7d\x85\xc6\xe6\x93\x79\xac\x35\xd8\x70\xd4\x57\x05\x80\xbb\x72\xcb\x9c\xa1\x85\xa0\x7c\x8f\xa7\xcb\x22\x27\xbc\xc0\x53\xb8\xb0\x95\x1d\x28\x83\x9c\x1a\x1a\xb2\x45\x0d\xb1\xa2\x73\xce\xab\xaa\x18\xf1\x28\x55\xd1\x8d\xc7\xfd\x98\x76\xd5\x35\x8e\xd9\x4c\x39\xc1\x29\x81\x55\xf2\x54\x5c\x24\x74\x56\x3c\x23\x5e\xc3\x9a\xd8\x31\xe3\x45\x7e\x29\x3b\x43\xa1\x3e\x4b\xbf\x16\xb7\x32\xee\xbc\x6b\xbe\x96\xcd\x97\x6a\x21\x5d\x0c\xd6\x56\x9c\xfd\x6c\xab\x96\x65\xac\x5b\x62\xa7\x14\x17\x5d\x79\x16\x80\x1d\xc4\x71\xe9\x56\xa0\xf2\x16\xc5\xaa\x40\x5b\xe3\xb0\x43\x67\x0f\x77\xc4\x49\xad\x04\x6d\x55\x75\xd7\xa4\xaf\x35\xa5\x0f\x76\xf4\x5d\xb0\x12\xaa\xc4\xd9\x92\x9c\x60\x6b\x0a\x2f\xb9\x6a\xb3\x17\x69\xca\xba\x5a\xba\x9e\x16\x6d\xf6\x5c\x64\x58\xd7\x74\x66\x65\x82\xe4\x80\xc9\x8b\x6a\x91\x5c\xc8\xd4\x67\x1b\xd2\x18\x17\xe3\x81\x32\x5f\xf7\x31\x8f\xdd\x82\xa8\xdc\x3a\xfd\x3c\x5a\x23\x2e\xaf\x73\x63\xf4\x90\xb1\x53\x0b\x6f\xae\x76\xdd\xaa\x26\x7f\x01\xf8\xf0\xa5\xc2\x9d\x36\x20\x20\x09\x3b\x59\x89\x5d\x8b\xd9\x09\xdd\x1d\x03\x8d\x8a\x28\xcc\xb0\x73\xd9\xbc\x5b\x4c\x1c\xca\x5b\x5a\xf7\x8b\x62\x79\xbe\x34\xb7\x54\x11\xdd\xa1\xce\x11\x33\xb4\x83\xf1\x6a\x49\xe0\xdb\x3a\x40\xd5\x5c\x61\x35\x4e\x82\x22\xf1\x22\x00\x48\xb0\x88\xe9\xaa\x60\x07\x6c\xe0\x08\x52\xa5\x23\xb1\x8a\x75\x90\x42\x1f\x31\xad\xcb\x06\xf1\xe0\xf5\x1c\x93\xa1\x2d\x65\x21\xa9\x63\x55\x47\x70\x74\xc4\x2e\x2b\xe6\xd2\xc3\xb9\x54\x26\x85\x63\xc5\xab\x0f\x13\x4c\x7a\x24\x3b\xa1\x03\x95\x70\xd2\x04\xa0\x7a\xdf\x8e\xac\xd6\x7c\xcc\x82\x76\x75\x59\xd8\xc5\xa7\x2f\x60\xfa\x0d\xd4\x99\x15\xc2\xba\x31\x5c\xa3\x21\x99\x99\x56\xa7\xe5\xb5\xaa\x06\x6d\xa0\x63\x65\x79\x9a\xc6\x62\xcb\x57\x3d\x52\x61\x2a\x97\x31\xab\x2a\x43\x61\xce\x16\x61\xed\x6a\x17\xb1\xa6\x08\xc4\xee\xa4\x2c\x12\xac\x3c\x6f\x3d\x8b\x63\xed\x67\xc7\x9b\xbe\xca\x07\x93\x10\x01\x21\xb1\x13\x87\x5c\x86\x85\x72\xd0\x91\x18\xd7\x75\x1e\x3a\x0f\x33\xec\x2e\x05\xc4\x52\xf8\x8c\x71\xbc\xed\xcc\x9c\x57\x15\xfd\x79\xd3\x99\x06\x6f\xc9\x11\x74\x5b\xf1\x2a\xe1\xba\xb7\xb8\xba\x9e\x92\x6c\x27\xa3\xb2\xa4\xad\x4f\xbb\x35\xb1\x59\xa9\x1b\x9e\x87\xf9\x5f\x25\x92\xff\x49\xb6\xba\x15\x2f\xed\xaf\x90\xad\x5e\xfb\xf5\xf7\xfd\xcd\x47\x7d\xca\xd3\xdf\xfd\x6d\x5f\xf0\x15\xcf\xfe\x8b\x71\xa7\x0f\x7d\xcc\x0f\xc6\xe7\xbc\xe8\x6d\x7f\xf8\xf3\xbf\xc1\xee\xf9\x5b\xeb\xfd\x3f\xf1\x41\x37\x98\xbe\xed\x8f\x5e\xf2\x0b\x0f\xfe\xdc\x07\xe5\xbf\xff\xb4\x0f\x0b\x8f\x7c\xf3\xab\xbf\xe4\x71\xbf\xfd\x79\x3f\xf1\xcc\x5f\x79\xdb\xc7\xbe\xe6\x19\x3f\x72\xb7\x07\xbd\xf2\x9f\xbf\xef\x46\x56\xd2\x1d\xff\xd3\x47\xff\xf2\xfd\xee\xf5\xdd\xdf\xf1\x9c\x27\x7e\xf7\x6b\x7e\x72\x79\xcd\x7b\x9f\xf4\x27\xcf\x81\x9f\xfb\x6b\x3f\xf4\xd5\x77\xff\xf9\x77\x7c\xc7\x0b\x9f\xf3\xa8\x1b\x4c\x3f\xfe\x7d\x0f\x7b\xc8\x5b\xce\x17\xf9\x4f\x7d\xf0\x1d\x9f\xff\x21\xed\xed\xbf\xfc\x89\xcf\x7a\xee\xbf\x79\xef\x63\xad\xfd\xda\xcf\xfa\xb1\x4f\x7c\xfa\xcf\xfe\xa1\xbe\xc1\x14\xdc\x09\x7c\xe1\x2f\xfd\xe9\xdd\x9f\xfa\xf9\xf1\xeb\xbf\xec\xe5\xaf\x38\x9e\xff\xbe\x1f\xf9\x27\xcf\x78\x56\xfa\xae\x67\x3f\xed\x57\x3f\xea\xbd\x6f\xfd\xed\xa7\xfc\xeb\x1b\x4c\x3f\xea\x6f\xbd\x75\xf9\xba\x87\xdd\x65\x79\xc9\x2b\x1e\xf0\x27\x8f\xfd\x8d\x27\xfd\xf8\x3b\x9f\xf7\x99\xaf\x7f\xdd\xb7\xff\xca\x47\xbd\xa1\xdf\xff\x35\x6f\xfb\x17\xdf\x75\xe3\xd8\xc7\x17\xfd\xd4\x2f\x7c\xde\x4f\xff\xcd\x17\x7f\xf4\xeb\x1e\x7e\x8f\x97\x7c\xea\xa3\x7d\xf9\xb0\x2f\xfe\x8e\x17\xfd\xf7\x97\xd5\xbf\xf7\xc9\xe9\xbe\x1f\xf2\x49\xf1\xc3\xdd\x0d\xa6\x2f\xbd\xf7\xd3\x8f\x97\x7f\x46\xf8\x3b\xdf\xf1\x09\x0f\x79\xe0\x2f\xfd\xc7\x97\x3d\xe8\x47\xff\xe5\x71\xa7\x3f\xb8\xf3\xe7\xfc\xd2\xd7\xfe\xe9\x0b\xff\xf6\x3b\x1e\xfa\xde\xfb\xff\x25\xd9\xea\x56\xbb\x7a\x41\xe2\x2d\x4b\x64\x4f\x0a\x76\xe7\x3d\xce\x1b\xe6\x49\x1e\x67\xc3\xe5\xe8\x0e\xef\x94\x03\xa0\x89\x5a\xc5\x36\x37\xa2\xcc\xcc\xb3\xe8\x34\x2e\xe2\x3b\xf0\xb2\xd4\xd5\x8b\xe9\x4e\xb5\xf5\x83\x1f\xeb\xcc\xce\xcc\x75\x23\x9e\x6f\x1b\xe2\x76\x85\xe3\x04\x98\x16\x90\x6b\xa3\xa8\x82\xbe\xd9\x8b\x0a\x38\x8c\x9c\x9b\x5e\x57\xc0\x63\x10\xb6\x08\xaf\x47\x75\x12\xf8\x03\xc2\x0d\x33\xf2\x01\x59\x9f\x90\x9a\xc4\xdd\xee\x0a\x3a\xb0\x1e\x93\x5f\x95\xf5\xc7\x98\x78\x6b\xeb\x3c\xd3\x3c\xfc\x02\xf7\x86\xd2\x3c\x87\x39\xe1\xe8\x7a\x2e\x98\x96\xec\xb2\x5e\x1c\x8c\x96\x75\xbd\xc9\x3c\xcc\x55\xe5\xb5\x55\xa1\x95\xb7\x8a\x10\x26\x58\x6f\xbb\xc2\xf4\x94\x84\x97\x73\xd8\x13\x94\x45\x40\xc8\xbd\x8d\xc0\x1f\x25\x51\xbf\x53\x36\xe8\xb8\x28\xce\xe3\x9c\x13\x6e\x36\x4c\xce\x66\x6b\x63\x78\x9c\xcc\x6c\xd4\x69\x6e\x27\x3a\x1c\xa3\x79\x5b\xd8\xb6\xeb\x00\x16\x54\x3b\x2a\x45\xcf\x84\xae\xca\x91\x7c\x40\x45\x37\xe9\x33\x20\xb3\xad\x9c\x0a\x33\x04\x6f\x00\xb5\xb0\x94\xa6\xe7\xe6\x4e\xa3\x88\xe1\x32\x70\xb6\x62\x41\xa6\xba\x8a\x8d\xc2\x7d\xcc\x5d\x73\xb0\xeb\xbe\x76\x4f\x08\xe6\x71\xe1\xc9\x1d\x94\x36\x99\x31\x3e\xdb\x91\x30\x69\x0b\x86\x41\x49\xb2\x57\x4b\xaa\xdc\x6f\x72\x3f\x6f\x85\xd3\x17\xb8\x9f\x61\xad\x8b\x02\x0b\x22\x7c\xcf\x8e\x85\x01\x96\x01\x6a\x46\xc2\x33\x17\x17\x43\xa1\xc9\x70\x0c\xb8\x01\x20\xe0\x88\x1b\xe7\xea\xaa\x8b\xc6\x6a\x4f\xd9\xd4\x1e\xe3\xc1\x0f\x99\x74\xdc\xb5\x14\xab\x0f\x8a\x56\x6e\xb7\x45\xcc\xc6\xe6\x96\xb4\x60\x08\x25\xda\xcf\x03\x4b\x73\x55\xec\x5b\x7a\x4a\xd3\x33\xb1\x12\x35\xd3\x06\x33\x27\x29\xb3\x4c\x46\x8d\xb5\x87\xdc\x13\x25\x8b\x31\xb3\x21\xbb\xc0\x5c\x91\x5e\x18\xbb\xac\xb6\xdf\x84\xda\x25\x5b\x0b\x4c\x7e\x2e\xb1\xea\xb6\x36\x59\x37\x98\x76\x37\x4e\xd4\x7b\x0e\x3a\x35\xa9\x81\xf3\xb9\x09\x92\x0c\x1d\x57\xe5\xda\x63\xc5\xb2\xef\xa1\xe7\x75\x70\x8b\xd7\xdd\x8c\x1c\x6a\xf4\x88\x35\xbf\xef\xbb\xa5\x27\x6c\x69\x52\x89\x9b\x0a\x9e\xf9\xb4\x34\x71\x55\xae\xdd\xa7\x81\x45\x6f\x91\xac\xc2\x32\x97\x62\xd8\xf4\x3c\x17\x42\xf6\x75\x39\xb3\x37\x7a\xe0\xa1\xf7\xb3\x26\xb8\x58\x9e\xd2\x58\xd8\x65\x05\xe1\xad\x4d\xa7\x18\x52\x5e\x8f\x05\x88\xed\x80\xb0\xa2\x42\x81\xe5\x0e\xe9\xcd\x76\x66\xb5\x22\x4d\x8c\x73\x39\x93\x51\x6d\x20\x2d\xaf\xa2\x7d\xa1\xc4\x6d\xe6\x84\x80\xb0\x37\x3f\x08\x38\xb1\x83\x88\x0e\xc4\xc1\x02\x8f\xdd\xed\x53\x23\x10\x13\xb7\xa7\x2f\x16\xa0\xba\x89\x3d\xdf\x1c\xfb\xde\xc2\xf3\xbb\xc0\xf3\x39\x34\xf5\x41\x46\xad\xe9\x3e\xfd\x32\x7c\x11\xdb\x2a\xa4\x3c\xb4\x58\x71\xa6\x35\xaf\xa7\x88\xae\x45\x3f\x8e\xd2\x50\x22\x54\x80\x8b\xb2\xfe\x4c\x78\x54\x4e\x46\x4e\x4f\xb6\x6d\x29\x69\x44\x37\xe6\xb6\x76\xad\xd1\x52\x36\x16\x55\x4c\x4a\x78\xc0\x98\x40\xae\x6d\xc4\x99\xb6\x5f\x94\x50\xe1\x49\x73\xe5\x0e\xa0\xe5\xd9\xfd\x42\x47\x6b\x26\x5b\x1c\xb2\x04\xd5\xe3\xd9\x87\x43\x55\x61\x74\x98\xce\x1a\x62\x1a\x66\x5b\xd9\x45\x71\x1e\x43\x84\x05\x9e\x14\xcc\x41\xe8\xf5\x24\x93\x23\xea\x4b\xd9\x0e\x7b\xae\xd5\x1b\xae\x2c\x33\xe4\x38\xb9\xcb\x82\x73\x21\xad\xdf\x2e\x4b\x77\x71\x1a\x73\x1b\x30\xd6\x92\xe8\x26\x5d\x81\x1c\x09\xe3\x9b\x51\x68\xc8\x3d\xc1\xb8\xe6\x6d\x41\xb4\x03\x1d\x0f\xa1\x60\x26\x18\x5c\x74\xd1\xd8\x38\x19\x09\x7a\xd4\xd5\x0c\x1a\xf6\xe3\x2c\x09\xcb\xba\x23\x92\xc7\xae\xc1\xce\x47\xdf\x8e\x4e\x91\xf0\x60\xe1\xdb\x49\xd7\x64\xd2\x55\x75\x2a\x42\xf6\x9d\xd0\xc3\x59\x8f\xa0\x5c\x16\xad\x73\x22\x0b\x83\x5c\xef\x91\x34\xa3\xb5\x3b\xe2\x89\x28\xcc\xfb\x46\xd2\x16\xb7\x19\xf8\x55\x64\xab\xfd\x44\xb8\xb4\xae\x83\xe4\x3d\x99\xb8\xe0\x6e\x18\xa7\xc6\x67\x29\x1d\x28\x2a\x53\xb9\x33\x4e\x21\x42\x10\xa5\x18\x16\xba\x8b\x74\x13\xf8\xdc\x2a\x96\xbc\x00\x7c\x54\xac\xcb\xf0\x6e\x49\x3e\x6d\xa1\x27\xb2\xec\x79\x49\x0e\x18\x48\x1d\xaf\x08\x3b\xeb\xce\xd9\x77\x99\x31\x95\x81\xb5\x14\xb1\xbe\xca\xdf\xb0\xf4\xcc\xc9\xef\x96\x7a\x90\x94\xc7\xd4\x49\x2e\x36\xed\x81\xb6\x61\x96\x33\xf3\x75\xf2\x85\x52\xb1\x4b\x76\xd4\xa2\x42\xf1\xe5\xaa\x57\xde\xd7\xe6\x48\x34\xe8\x30\x6e\x84\x54\x54\x34\xd2\x16\x5b\x20\x3c\x94\xac\xbd\x15\x2a\xdc\x88\xda\x79\x9c\x07\xc7\x2a\x03\x92\xae\xe2\x80\x1c\xdb\xa1\x09\xf1\x64\x6b\x47\xeb\x3d\xf3\x8d\x5a\xa9\x1b\x42\xa5\xae\x67\x5a\x16\xb0\x63\x89\xcf\x65\x9b\xb9\x18\xb3\x86\x66\x8b\xbe\x8a\xe2\xc4\x20\x39\xa8\x82\xfe\x00\x12\xa9\x75\x9b\x73\x39\x89\xd8\xce\x53\x44\xa2\x0f\x61\x10\xa5\x94\x1d\x27\xd2\x95\xc4\xa5\xb7\x56\x18\xbf\xca\x1b\xd4\x6d\x4f\x66\xb2\x24\x3c\x5d\x0d\xf7\xd4\xc4\x02\x7d\x8f\x49\x04\xc6\x8e\xbe\xf3\xe6\x57\x2b\xc1\x81\x23\x57\xc6\x92\x35\xee\x46\x5e\xb4\x27\xb1\x85\xce\x77\x52\x5c\x6e\x52\xd2\xd3\x03\xaa\x49\x27\x15\x6a\x5d\x8a\x6e\x16\x75\x48\x37\x91\x40\xd8\x86\x6e\x78\x63\xb5\xb2\x8b\x18\xc1\x9c\x9f\x78\x5f\x17\x66\x0f\xbc\x86\x3a\x64\xea\x64\x0e\xe3\x38\xc9\xc7\xa9\x69\x54\xac\xb7\x51\xc1\xc0\x74\xb8\x55\x99\x05\x5b\xbd\xd3\x9b\xc0\xe7\x56\xd9\xa9\x0b\xc2\x2e\xda\xed\xd1\x1c\x43\x36\xd3\xca\x71\x3a\x65\x9c\xc4\x52\xb7\x92\x6a\x56\xb1\x4a\x7e\xe8\xa6\xda\x34\xeb\xa9\x14\x89\x36\x82\xbc\x5f\x15\x76\x15\xb2\xa7\x9c\x23\x9f\x6c\xc9\x14\x62\x60\x00\x8b\x98\xcd\x4c\xb1\x1e\x61\xe4\x73\x0a\x1f\xd8\xa2\xb1\xa4\xd2\xd2\x7c\xc6\x38\xaf\xba\x68\x0b\xa0\xaa\xc3\x43\x51\x24\x0d\x35\xc7\xc8\x28\xda\x35\x79\xe3\x3b\x9d\x31\x6a\x4d\x42\xce\xc9\x5a\x90\xff\x1f\xda\xfe\x3c\xfa\xbb\xe7\x2a\x0b\x44\x3b\x04\x88\x10\x43\x94\x41\x84\x88\x40\x83\x0a\x41\x48\x5b\x55\xa7\x2a\x0c\x17\x8c\x4c\xdd\xa0\x2d\xa4\x9b\xc1\x00\x69\x6a\x3c\x35\x9f\xaa\x53\x75\x6a\xc2\xa0\x91\x40\x00\x65\x36\xcd\x18\x46\x05\x19\x95\x29\x20\x84\x6b\x93\x74\x16\x44\xc2\x3c\xc8\x25\x0c\x37\x40\x88\x81\xa0\x41\x02\x51\xe4\x07\x77\x85\xbb\xc2\x7a\x17\xbf\x5e\xeb\xfd\xeb\xfc\xf1\xfe\xb7\xd7\xbb\xce\x3a\x9f\xf3\x7d\xf6\xde\xcf\x7e\xf6\xb3\x8d\x5e\x1e\xba\x78\xde\x55\x4e\x53\xab\xc7\x16\x59\xc1\x72\x6c\xf2\x20\x48\x41\xd1\x43\x42\x83\x30\xf0\xff\xdf\xf0\xa8\x63\x5e\x34\x18\xea\x15\x59\x69\xcb\x7e\x2b\x77\x31\xdc\xbb\xce\x49\x0c\xc1\x7d\xdd\xbb\xbc\xda\x91\x5d\x3b\xd7\x08\x64\x51\x68\xfd\x46\x30\xf3\x46\x06\x8f\xaa\x49\x57\x0b\x54\xb6\xe2\xee\xd2\xe1\x7a\xee\x2a\xf7\xc2\x9d\xa5\x6d\xa4\x8c\xa5\x2f\x28\xd5\x92\x49\xf7\xc9\xfc\xd9\x8b\x4f\xc0\xcd\x75\xad\x64\x0e\xd4\x2d\xd9\x2f\x7a\x97\xde\xe1\x74\x17\x82\xea\x50\x7b\xb4\x15\x12\xac\x4e\xe2\x4a\x07\x75\xa3\x3d\x51\xa7\x16\x87\x93\x48\xba\x74\x3b\x02\x60\x0e\x64\xc1\xf8\x5d\xeb\x8f\xdb\x79\x2a\xcb\x45\xe2\x9b\xf6\xfb\xdc\x41\x11\xe7\xb5\x3b\x50\xaf\x4d\xed\xdd\x5e\x6b\x5b\x75\x2a\x27\x90\x90\x1c\x74\xef\xc9\xb1\xc4\xa3\xc0\xe7\x61\x7c\xf7\x0d\xe0\x13\xd3\x36\xa8\x60\x19\xec\x24\xea\x9a\xfc\xee\xec\xd0\xb5\x04\x67\x6b\x44\x7b\xed\x78\x78\x47\x3b\x3d\xb9\xf6\x51\xe5\x71\x5d\xe6\xae\xe9\x71\x2e\xe8\x3c\x22\xae\xa4\x1c\x8a\x80\xe2\xe3\xda\xbc\xc8\x7a\x48\x05\xe4\x20\x2e\xea\x78\xf6\x96\xb5\x08\x61\xbb\xd2\xa6\xb4\x5c\x77\x7d\xde\xdb\x85\x14\x66\x2b\x5e\x40\x42\xa4\xbd\x1e\xbb\x24\x2a\x3a\xb0\x9f\xa9\x42\xe0\xfa\xbe\x68\xdb\x11\x25\x27\x15\x40\xee\x72\x73\x77\xd5\x1b\x4c\xed\x5e\xd8\x50\x72\x66\x38\xd1\x5d\x1e\xbd\x27\x7d\xee\xd8\x55\x39\x0f\x24\x6b\x44\x61\x5e\xc1\xd5\x0d\xda\x3d\x17\x2b\x16\xbc\x4b\xc8\xcc\x7a\x90\x97\xe7\x02\x48\xe6\xc5\x84\x76\xc7\x09\x30\x49\x25\xf7\x48\x8c\x51\x8f\xa9\x32\x93\xda\xe8\x2a\x8e\x92\xe7\x64\x92\xcf\xdb\x06\xc2\x4d\x4b\xc3\xc8\x49\xec\xde\x2f\x7d\xcd\xcd\xea\xce\x70\xa5\xbd\xc7\xe9\x75\x18\xc4\x46\x10\x45\xe6\x3b\x8c\x72\x5e\x4e\x73\x76\x97\xbe\x32\xc7\xe3\x48\xb3\xe6\xc2\x31\xb4\x68\x96\x79\xba\x52\xc2\xec\x01\x8b\x5d\xd0\x73\xbf\xf8\x89\x38\x38\x84\x70\x4c\x4c\xbd\x6d\xcd\xde\xb5\x04\xe0\x72\x2e\x86\x5d\x64\x8d\x34\x63\x28\x64\x54\x6f\x4d\xf0\xbc\xc5\xda\x16\x56\xbc\xed\x27\x04\xc0\x7a\xc5\x2a\x80\xbc\x12\x2d\xf4\xa3\xc0\xe7\x61\x13\xb4\x1b\xc0\x07\xa8\xbe\xa3\xaa\x98\xbc\x9a\x14\x2d\x78\x58\xdb\x21\x46\x0d\xbd\xf3\x48\x76\xb4\x26\x4e\xe9\xcc\x64\xee\x18\x99\x82\xfa\x41\xed\x5d\xd3\x2e\x0c\x09\x89\x8c\x1f\x30\x37\x64\xca\xb9\x63\x89\xab\xab\x02\x7a\x31\x60\x6f\xab\xfb\x62\x67\x9f\x6c\xe4\x5e\xb3\x44\x6b\xd9\x75\x17\xe7\xc3\x6d\x9b\x39\x6d\xa8\x5f\x67\x1b\xf6\xd8\xea\x12\xbb\x91\x76\x67\xea\xda\x70\xd6\x34\xa4\x0d\x9c\xd3\x23\x09\xd1\x66\x60\xdb\x75\xbe\x6b\xad\x0d\x98\xbd\xcd\x3f\x99\xdf\x43\x9f\x11\x25\x1b\xeb\x6d\x00\xea\xb6\x78\x79\x92\x08\x87\x17\xa1\x48\x2d\xd2\xcf\xdc\xc2\xd4\x5c\xdd\x26\xfb\xda\x43\xa3\x16\xa2\x70\x9e\xde\x20\x10\x08\xd9\xe7\xd9\xa9\x72\xe8\x38\x33\xbb\x0a\x38\xac\x75\x3a\xb7\x61\xc4\x7e\x08\x2f\xb7\xce\xef\xaa\x06\x59\x03\x07\x77\x8b\xb4\x15\x5d\x76\x50\x6d\x47\xc1\xc1\x21\x54\x4e\xaa\x97\x84\x11\x19\x3a\xc2\x74\xe7\xb5\xe6\x85\xa0\x4c\xbb\xb9\x6b\xee\x76\x85\xa1\x29\x5b\xa6\x8b\xea\x32\x17\x09\xeb\x52\x16\xae\xb9\xc0\xa0\x85\x02\xc0\x18\x58\xc2\x2e\x69\x85\xea\xd2\x88\xb7\x78\xd7\x06\x12\xcb\xb6\x30\x3f\x1c\x69\xce\x59\x18\xa0\xe4\xd6\x98\xba\x05\xb5\x4e\xe0\x7d\xca\xde\x01\x20\x89\x87\x72\x25\x46\xdb\x11\xf5\xf9\xc0\x66\xfc\x1b\xc1\xe7\x61\x33\xf9\x1b\x38\x1f\xab\x74\x2b\xfb\xe0\xf4\x50\xcd\x17\x0e\xf7\x2b\x06\xda\x37\x15\xb8\x1e\xbd\xd2\x73\xa7\x8e\x37\x97\xd1\xd9\x3b\x61\xda\x6f\xec\x2e\x9a\x97\x3a\x3a\x63\x8d\x64\x98\x52\x78\xcc\x14\x35\xb4\xf5\x75\x1d\x64\xcf\x23\x1c\xa0\x54\x20\xa0\x60\xd0\xf9\x69\x76\x73\xaa\x7d\x9c\xe7\x5d\x45\x2c\xd5\x6a\xec\xcc\x4d\x09\x30\x51\x91\x8b\x8c\xb6\x6a\x04\x66\xc6\xa8\xe9\x9a\xd5\xa7\x6f\x27\x85\xde\xa1\xb8\x33\xa3\x8c\xa3\xee\x2e\x89\x53\x3b\xf2\xe6\x8e\x96\x98\x8c\xf4\x4a\xec\xc0\xa5\xd1\x20\x71\x91\x92\x6d\x2a\x6e\x16\xa0\xe4\xcb\x1a\x9e\xac\xa9\x20\xec\x23\xb9\xbb\xe6\x29\xfb\x09\xdf\xd0\x36\xb0\x94\x85\x3b\x31\x25\x76\x5b\x7d\xa8\x68\x70\xf4\xf8\x5c\x67\x42\x79\x1b\x07\x40\x79\xb4\xb4\xed\x49\x5f\xf6\xb6\x3f\x34\x83\x0e\x7c\x52\xdf\x16\x2b\xad\x61\x6c\x71\x4c\xe0\x98\x8a\xec\xbb\x5d\x4c\x55\x7f\xf8\x29\x8f\x74\x80\x0b\xe4\x99\x50\xce\x7c\xde\x35\x77\x93\xcd\x90\x23\x00\xba\x57\xce\x6b\xdd\xe9\xb9\xef\xed\x54\x6e\x84\x26\x3a\xa5\x93\xc1\xb2\x5b\x78\x85\xe3\x90\x88\xea\xba\xaa\xa6\x77\x35\xc5\xfd\xa2\x68\x2f\x15\xda\xdd\x2d\x42\x10\x3d\x0f\xea\xf7\x03\xe5\xbd\x25\x6a\xba\xf7\x20\xba\x95\x35\xad\x46\x87\x59\x69\xbb\xdc\x03\xa9\xe1\x8d\x62\xab\x87\x39\x7b\xfd\x19\xb1\xd5\x4b\x3f\xee\x2f\x7d\xcd\x4f\x7f\xce\x8f\xfc\xd0\xf5\xc8\xd7\x9b\x4f\x7a\xff\xff\xef\xcb\x3e\xe3\x9f\x7d\xef\x5f\xfb\x98\xa7\x7f\x71\x78\xea\x7f\xfa\xf2\x4f\x7a\x21\x79\xbf\xc7\x3f\x10\xfa\x31\xcf\xf8\xc9\x4f\xff\xee\x27\x7e\x67\x39\x1f\xff\x22\xf9\xc1\x1f\xf9\x83\x5f\xf1\x15\xdf\xf8\x23\x4f\x7d\xcd\xe7\xbc\xf8\xe9\x5f\xfe\xda\x7f\xff\xc3\x9f\xf7\xb8\xbf\xf8\xbf\x3d\x10\x3a\xbf\xee\x63\x9e\xf2\xd8\x9f\x7d\xbf\x67\xfa\x4f\xfe\xc6\xc7\xfe\x85\x7f\xf9\x16\x2f\x7e\xfd\x4f\xfc\xe1\x33\xdf\xeb\x29\x5f\xfc\x11\xff\xdb\x3b\xff\x97\x27\x7f\xf6\x6f\x7e\xe5\x5f\x7d\x20\xf4\xef\xfc\xcd\x3f\x78\x82\x91\x3f\xfa\xf9\x2f\x13\x8f\xf9\xaa\xc7\xbe\xd9\xcb\x1e\x79\xe2\x57\xa8\xbf\xf3\xda\xff\xfd\x95\xff\xf2\xfc\xeb\xff\x9f\x37\x7b\xfc\x1f\x7d\xe6\xfe\x40\xe8\x3b\x88\x2f\x7d\xd7\x67\xbd\xf2\xcb\x1e\xfb\x6e\xff\xf0\xdf\xf9\x97\x7c\xca\x0b\xff\x07\xfa\x47\x4f\xfc\xe8\x3f\xfc\x75\xf7\xd6\xaf\x7d\x4e\x79\xfb\x1f\xa4\x7f\xfe\x67\x1f\x08\xfd\xef\x7f\xf9\x67\x3f\xee\xe7\xaf\xd7\xbc\xe8\x15\x4f\xfa\xb0\xbf\xf5\x01\xdf\xfe\x16\xff\xef\x77\xfc\x8d\x3f\x7e\xfe\xa7\x3e\x1b\xfc\xfa\xff\xf5\xbc\xe7\x3e\xf3\xed\x1e\xf3\x05\x4f\x7c\x20\xf4\x1f\x3f\xff\x5f\x7c\xd1\xaf\x7d\xe3\xbb\xbd\xe6\x89\xbf\xf8\xda\xf7\x7f\xb3\xf4\xd2\xf1\x66\xfa\x19\x1f\xf2\x77\xdf\xe2\x55\xbf\xff\x36\x7f\xee\x5d\xbe\xf4\x9f\x7d\xca\x8f\xfe\x85\x07\x42\xd3\x5f\xfe\xc5\xd7\x7e\xd6\xd3\xdc\x07\x3e\xf3\x9f\x7d\xc2\x87\xbf\xc9\x6b\xbe\xe0\x93\x5e\xfa\xeb\x5f\xf7\x55\xff\xfc\x19\xef\xf3\x3e\x6f\xf5\xdc\x1f\x7c\xe4\xd7\xf4\x27\xfd\xf4\x9f\x8a\xad\x1e\xf6\x56\xef\xd8\x72\x0c\x92\xa8\xd3\x8f\x59\x55\x5f\xb9\xa9\x93\x41\xe0\x08\x64\x96\x72\x77\x1d\x52\xab\x33\xe7\x84\x80\x98\x9e\x62\x14\x77\xbf\xf3\xbb\x8a\x3e\xe6\x8c\x8b\xa5\xb6\x2a\x90\x75\x0d\x26\xbd\x62\x08\x05\x98\x3e\xb6\x31\x8b\x87\x35\x1a\x5d\xbc\xba\x2e\xe6\x14\xd5\xa9\x55\x78\xd7\x00\xa7\x2a\x01\xa8\x83\x90\x9d\xa8\xe9\xa1\xa7\x07\x5c\x25\xe6\xad\x8c\x25\x91\x06\x81\x8e\xb8\x95\x6b\xb1\x63\xd1\x63\xb8\xea\x9c\xb8\xab\xa7\x19\x64\x82\x9d\x6e\xb2\x53\x25\xae\x1d\x50\x89\x37\x17\x21\xc0\xdc\xe5\x4c\xd9\x02\x31\x01\xcc\xa7\xeb\xf2\x74\x57\x64\x6d\xd7\xb7\x09\x7f\x8f\x9e\x2a\x0f\x49\xb6\xe6\x44\x97\xb3\x5f\x9e\x5e\xa2\xee\x27\x21\xbd\xe4\xe3\x9a\xba\xf3\x4a\x0c\x8b\x84\x2c\xe1\x90\x6b\xf6\xb6\xcd\x4f\x8b\x8d\x37\x69\x22\x3d\x50\x3b\xc0\xe9\x20\xd5\x75\x8b\xec\x8c\xf6\xac\xd7\xe2\x26\x6f\xc3\xe3\x7e\x41\x31\x38\xe0\x62\xb9\x78\x5b\x49\xae\x21\x64\x86\xad\x4e\xf7\x96\xf1\x69\x0e\x44\xc8\xe4\x42\xef\xfb\x38\x61\xf0\xab\xb1\xe0\x0f\x15\x64\x6d\x4a\x30\xb0\x8f\x73\xcc\xbb\x58\xff\xd8\x8e\x85\xd9\xc4\x00\xb2\x3d\xd7\x8a\xb6\xda\x8f\x5e\xa1\xce\xb1\x8f\xac\x1c\x2a\x53\x6f\x27\x25\x3b\x70\xc8\x37\x56\xc3\x41\xf9\xa3\xca\xcf\x87\xe1\xf4\x0d\xbd\xef\x8e\xe0\x86\xdf\x90\xbf\x00\xd6\x9b\x2f\xa0\x2c\xae\x1d\x05\xb4\x8c\x39\xf5\x91\xb4\x27\x20\x47\x0f\x63\xad\x98\x8a\x53\x55\x4d\x6f\xda\xa3\x63\x1d\x31\x10\xe6\x16\x47\xde\x05\x9d\xab\xf6\x09\x84\x34\xce\xd5\x34\x35\xa3\x42\xd4\x08\xdb\x72\xb0\x14\x78\x90\x3e\x32\x52\xeb\xae\x8d\xbe\x34\x5b\x5d\xed\x4a\x33\x8c\xb3\x81\x04\xba\x8d\x71\xe0\xc1\x50\x2f\x9c\x8c\x2c\xaf\xe0\xba\xdc\x5d\x23\xec\x92\xae\x3b\x3c\xe1\x5d\x1a\x90\xa3\x91\xa3\x90\x13\xee\x4a\x96\xcd\xce\xe5\x10\x3e\xac\x44\xdb\xe5\x31\x92\x07\x23\x7d\x29\xa7\x9c\x20\x82\x5e\x49\xad\x49\x2d\xbb\x6b\x95\xc5\x37\x75\x5c\x22\xf8\x3e\xe0\x75\x61\xb7\x74\x2d\x69\x47\x69\x1a\x38\xb1\x39\x0d\x65\xfb\xcc\x67\x83\xb9\xb0\x84\xb8\xcb\x9d\x94\xbb\x0a\x61\xab\x3a\xd0\xf2\xc0\xda\x5e\xc0\xf2\x62\x64\xa6\x1b\x66\x33\x11\x76\x22\x53\x8d\x6d\x05\xd9\x32\x6d\x0f\x7b\xbc\x64\x9d\x88\xaf\xbb\x1c\x49\x30\xee\xf4\x8a\xfe\x88\x17\x05\xde\x31\x0a\xa8\x65\x7c\x6b\x55\x30\x22\xa3\x55\xb8\x5c\x11\x8c\xb5\xab\xec\x61\x07\xd1\x63\x79\x97\x29\x00\x33\x9d\x37\x4d\x82\x23\x68\x33\x4c\x9d\x4e\x1d\x3d\xb0\x20\x75\xa3\xcb\x0f\xe1\x96\x1c\xc9\x0d\x4e\x5c\xa8\x06\x7b\x55\xce\x52\x1f\xad\xf4\x7c\x58\xe5\x77\x03\xf8\x1c\x06\x00\x1b\xb3\x10\x30\xc2\x59\x96\xed\xa4\x6a\xdb\x86\xcb\x97\xc1\x27\xde\x46\xe5\x18\x78\xe0\xf0\xbe\x53\xd1\x89\x3c\x3b\xbb\xe9\xa7\xa4\x55\xb6\x5a\x32\x3a\xf7\xe2\x81\x86\xde\xa9\x12\x84\xc1\xe7\xda\xed\x7e\x5c\x7b\x07\x69\x6d\x32\x2c\xeb\xc6\x30\xf6\xc2\x4e\x99\xdb\xec\x4b\x2a\xb8\x72\x41\x8e\x03\x7a\x15\x09\x8e\xdc\xb2\xd8\xe0\x22\x18\xcc\x5d\x90\x2c\x98\xb8\x8e\xed\x2c\x86\x98\x42\xb5\x60\x5d\x02\x73\x97\xd5\x20\x61\xf9\xf2\x69\x02\x0c\xa8\xdc\xd6\x4e\xb7\xe5\x82\x02\xce\x98\x52\x4f\x4f\xe1\x91\x34\x0d\x17\x50\x70\x89\x72\x0d\x7e\xa8\x7c\x97\xf2\x82\xc6\x5e\x56\x3b\x60\x3b\x0a\x5d\x3b\x1c\x23\xcb\x6e\x67\xf0\x17\xdd\xba\x1e\x1b\x2a\x03\xd7\x66\xb4\x5c\x76\x73\xc8\x50\x7d\xa3\xb3\x15\xf6\x2c\x30\x07\xb3\x18\xd2\x2b\xb6\x5f\xce\x16\x36\x1b\x8d\x0a\x8e\x96\xa8\x05\x27\xef\xad\x98\x9c\x4d\x13\xd0\xbb\x41\xbb\xbd\x8b\xf5\x6f\xf2\x64\x5e\x2c\xa1\xd7\xaa\xb1\x9c\xf6\xac\x3c\x39\x6d\x6b\x39\x93\x41\x2a\x73\xef\x88\x86\x68\x5d\x4e\x3b\xc7\x13\x0c\x09\xdc\xf5\xeb\x9c\x0d\x5d\xdb\x39\x2c\xd3\x12\x8c\xa3\x8e\x63\x75\x0e\x9d\x66\xd0\x34\x70\x55\xb2\x09\xec\x11\xd5\x34\x73\x94\x71\x8d\x9a\xb7\xf2\x68\x67\xab\x87\xf5\x92\x37\x80\x8f\x09\xec\xe2\x06\xd9\x1a\x41\x59\x73\x1b\xdc\x85\x91\x98\x8b\x54\xb5\x1d\xae\x23\x82\xd2\xa6\xcb\xbe\x33\xbf\x2a\xa5\x05\x29\x70\xd3\xa0\x8f\xa9\xb9\x26\x8c\x8d\x7b\xa8\x34\xf2\x43\x2e\x12\xf4\x79\x1d\xdc\x0e\x66\x01\x97\x97\x99\x80\x04\x0e\x02\x54\x7c\x9f\x7d\xeb\xe6\x36\x4f\xcf\xa3\x06\x75\x8d\x8b\x48\xc3\x1a\x21\xd0\xa3\xbd\xf8\x0c\x61\x85\x50\x14\x45\xc0\xae\x94\xdb\xb4\x11\x9d\x42\x96\xcf\x2c\x75\xaa\x77\x89\xad\xea\x04\xdb\x54\xc3\xf6\x53\x1e\x9b\x32\xd4\x72\x21\x2c\x98\x86\x72\x8a\x34\xe1\xc3\x06\x16\x12\xcc\x06\x9f\x24\x9b\xd2\xf7\x7c\xde\xc5\xb5\xc7\x1e\x19\x26\x5c\xb8\x28\x15\xe6\x67\xdd\xd6\x2e\xdc\x54\xc5\x1a\x4a\x09\x5a\xf4\x0d\x69\x7e\xc5\x2d\xf3\xe6\x22\x88\xb4\x62\x7e\xd7\xb6\x4d\xdc\xa3\x21\x0e\xa5\x73\x54\x10\x80\x97\xe6\x22\x32\x3a\x22\x0e\x7b\x28\x1e\xb7\x1d\x6f\x2e\x5c\x87\xe9\xd5\x2a\x78\xe0\xc6\x5d\xb9\xcb\x7e\xb1\xc5\x2c\xea\x01\x07\xcd\x88\xec\x62\x39\x98\xce\x05\xd1\x05\x26\xd4\x04\x63\x63\xd2\xd8\x74\x98\x8c\x7a\xe9\xb2\x94\xab\x66\x70\x97\xbf\x03\xb9\x34\x98\xd0\xbb\x3d\x2e\xbc\x95\x15\xc3\xd9\xc9\xe9\x6a\x02\xa7\xe7\xdb\x51\x76\x46\x49\xd3\x5b\x3a\xa2\xed\x0e\x04\x2b\x3a\x7d\x34\xeb\xff\x30\x76\xea\x06\xce\x87\xed\x0e\xd9\x55\x3c\xd4\x22\x6d\xaa\xef\xf1\xdc\x7c\x46\x22\xad\x7e\x1c\xa1\x81\x50\x29\xaa\x46\x6d\x43\x5f\x57\xaa\xfd\x58\xfe\x36\x3f\xa9\x24\xb4\x96\xbd\xb8\xa8\x51\x02\x69\xd7\x40\x0e\xb3\xc6\xa8\x67\xa5\xfb\x4a\xab\xa4\x2b\xd9\xb6\x0e\xb4\xda\x42\x16\x6b\xed\xd7\x4d\x6c\x2e\x3d\xb4\xf2\x85\x87\x32\x1c\xc3\x07\x37\x8c\x1d\xd8\xa6\x6b\x68\x0d\x47\x9a\xdc\x92\x3d\x8e\xc8\x75\x3e\x0e\x49\x41\x37\x26\xf2\xbb\x32\x1a\x73\xfd\x72\x7c\x86\x2b\x5e\xc6\x8b\x4b\x2d\x08\x32\x9c\x38\x56\x5a\x3c\x62\xb5\x0d\x52\x41\x8c\xb6\x60\x4e\x4e\xce\xa3\x83\x87\xbb\xab\xc5\x68\x79\xc2\xd9\xb7\xb0\x5f\x48\xed\x0a\x8d\xd9\xc5\x06\x54\xe0\x3b\x97\xad\x5d\xe7\x58\xdb\xc1\x64\x48\x6a\xb0\x8b\xc3\xb9\xac\xb8\x6b\x20\x4c\xb3\x87\xeb\x1a\xfb\x45\x2f\x76\xd9\xb0\x05\x72\xe9\x05\x42\x3d\xfb\xbe\x47\x38\x0d\x5c\x8e\x00\x30\xdb\xea\x45\xc9\x8d\x86\xa8\xc4\x5d\xe0\x23\xd3\x00\xbb\x10\x53\x2a\x82\x51\x90\x79\x8c\x1c\x26\xd4\x29\x38\x48\xf0\x35\x38\x69\x6a\x4a\xea\xa4\xdd\x64\x97\x64\x5b\x89\xdf\xa5\xd0\x31\x9c\xc7\x39\x2e\x04\xcf\xb4\x8b\x89\x5c\x4e\xdb\x82\xa7\x60\xa4\x54\x1b\xcb\xd1\xaf\x78\xe4\x80\x24\xee\xe0\x5c\xf0\xaa\x5e\x16\xfc\x28\xf0\x79\x18\xdf\x7d\x43\xe5\xe3\x37\x2a\xa9\x46\x0c\x45\x6f\x4e\x50\x86\x57\x23\x15\xa1\x29\x0e\x52\x1d\x95\x4c\xc5\x66\xde\x0e\xba\xf6\x53\x83\x21\xb7\x94\xf9\x5d\xa2\xdd\x08\x30\x91\x14\x50\x60\xe1\xaa\x1d\x2e\xd2\x84\xf6\x01\xf5\x63\xc9\xe1\x9c\xa4\x30\xa4\xcb\xb0\x2a\xa9\x43\x54\x9e\xad\x1f\xf5\xae\xc2\xbe\xe0\x21\x31\xd3\x76\x28\x10\x0c\x03\x79\x6c\x23\x46\x1f\x87\xdd\xd5\x3a\xec\x64\x47\x23\x17\x29\x6c\x4f\x79\x9b\x2e\x2d\xeb\xd6\x5d\xea\x57\x85\xda\xac\xc1\xc4\x12\x48\x96\x07\x28\x4c\xa9\xab\x0c\xed\x77\xbc\xc1\xa0\xdb\x65\xf4\x92\xe8\x90\x17\xd2\x1c\x49\xe4\x09\xbd\x6d\x1c\xb0\x0d\xbe\xd7\x3c\xf6\x34\x36\x49\x3d\xe5\x45\x16\x61\x61\x87\x74\x35\xee\x53\x72\xe7\x36\xa6\xa6\x91\xbb\x93\xe4\x1c\xda\x51\x6e\xd3\x3b\x5c\xd6\xe5\x5d\xc0\x74\x31\xb6\xb5\xb2\xb9\xa3\x08\x30\x65\x52\x70\x16\x92\x4f\x2b\x75\x97\x33\xb4\x49\xcf\xb9\x07\x9e\xec\xac\xf3\xae\xef\x64\xe8\x73\xe4\xd3\x73\x31\xf6\x38\x18\x70\x7e\x2a\x5b\x2d\x6f\x9a\xf1\x64\x46\x0b\xa1\x95\xd6\xab\x08\x71\x80\x42\xd0\xd9\xa3\xbf\x4b\x79\x61\x4e\x5b\x7a\xdd\x1d\xd4\x64\x4c\xd7\x21\x37\x0c\x36\x46\x6b\xf6\xac\xa5\xce\x61\xea\xc5\x87\xd9\x77\x0c\xb8\x2a\x92\x92\x07\xfd\xf7\xdf\x08\x3e\x0f\x9b\xa0\xdd\x00\x3e\x14\x98\x50\x83\xc6\xae\xb4\xed\x28\x50\xd6\xba\x4b\xd6\x2f\x40\x6c\x60\x64\xc4\x7e\xc6\x3c\xf7\x71\xe4\x20\xad\x93\x9c\x33\x9e\xef\xca\x23\x47\x46\x17\xdf\x35\xdd\xd8\x7e\x48\x49\x4d\x73\x50\xf2\xe2\x93\xc8\x04\xe2\xd3\xb9\x0c\x50\x55\x54\x33\x46\x04\xa8\x87\x8a\xda\xde\xa5\x6a\x24\xfb\x44\x2b\xce\x56\xa4\x28\x93\xe7\x05\xe0\xee\xb7\xac\x0d\x8d\x8d\x9f\xd7\x51\x3c\x05\x84\x17\x15\x85\x6c\x03\xa6\x78\xed\xf4\xae\x69\x97\xc8\x7b\x14\x18\xbb\x8e\xfd\x35\x65\x81\x68\xc0\xfd\x3c\xa7\x29\x01\xd3\x96\x40\x2e\xd1\xae\xa0\x57\x59\xb6\xb5\xd9\xae\x69\xc1\x5d\x52\x38\x38\x57\x03\x07\x5f\xd4\x5c\xf3\xe2\x85\x1d\xa0\xe9\x89\xf0\x68\x93\x6d\xd5\xf0\x03\x9d\xe5\x02\x26\x1f\x8b\x61\x60\xbc\x3f\xa1\xbd\x69\x17\x8a\x0e\xc7\x25\xe0\x94\xa3\xeb\x4a\x14\x26\x57\x69\xd4\x05\x41\xa2\x43\xa1\x30\x26\x01\x7c\x17\x1b\x96\x60\xab\x70\xdb\xdc\xd4\x4e\xdc\x55\xab\x43\x87\x75\x01\x03\x88\x2d\x98\x0b\x8d\xe0\x2f\x3b\x69\x56\x57\x46\x95\x76\x03\xa4\xdf\x24\x10\x34\x58\xbf\xab\x33\xaa\x72\xa5\xdb\xb6\x6d\x60\xd6\x87\x6d\x18\x98\x23\x0f\x98\x1c\xe1\x8c\xc3\x1c\xb7\x48\xb1\x4c\x10\x1f\x0e\x59\x42\x3c\x57\x83\xf8\x52\x4e\x2c\x56\x62\xe9\x51\xe0\xf3\xb0\x99\xfc\x0d\x6d\x17\x97\xab\x9b\x80\xcf\xba\xb9\x2d\x9c\xfd\xe4\xc8\xf1\x83\x12\x3e\xcc\x79\x89\xb3\xb8\x28\xcf\xe4\x05\xd7\x80\x48\xdc\x45\xdc\xf5\xba\x4b\x44\x83\x8f\x8d\x2c\x28\x16\xdb\x0b\xe8\x03\x11\xb4\x23\x0a\xb8\x4d\x74\x2d\x43\x0f\xed\xf2\xb6\xfb\xde\x4c\xcd\xd5\xf0\xa9\x91\x69\xe0\x2e\xef\xa4\x1c\x1d\x98\xc7\x88\xa9\x6d\x5c\x2b\x73\x38\xa7\x94\x25\xa1\xd4\x15\x0a\xad\x18\x41\xbc\x69\xbb\x47\x7d\x96\x1c\xa9\x18\x45\xd9\xbb\x48\xf8\x8d\x58\xad\xaf\x93\x5b\x76\x04\x42\x1d\x8d\x75\xee\xd0\x5e\x7d\x2d\x4c\xa1\x8b\x9b\x53\x3b\x8a\x9d\x60\x65\x1b\x0e\x43\xee\xd0\xdc\x35\x77\xdb\x1c\x64\x9c\xec\xb2\x8f\x0b\x27\x07\xed\x64\x81\x1a\x6a\x4f\xeb\x6a\xaa\x48\x00\x50\x30\xa0\x03\x8b\xc3\x31\x55\x99\xca\xe5\xb6\x2c\x7f\x86\x8c\x04\x61\xa9\x5c\x17\x53\xf9\x3a\x72\x1e\xbb\x40\xdc\x53\x5d\x4e\x9e\x21\x57\x52\x9a\x18\xf5\xc6\xa5\xdc\xe5\xb1\x55\x7c\xdb\x62\x04\x22\xac\x16\xce\x8a\x54\x62\x35\x26\xcc\x71\xb9\x0d\xd5\x68\x50\x40\x96\x62\x26\xa3\x9a\x59\xc6\xbd\xa7\xc6\xa9\x44\xa8\xf9\xdb\x24\x19\x3b\x6a\x35\x45\x5f\x4e\x5b\x75\x67\x00\x3b\xca\xd6\xbc\x0e\xc6\x94\x0e\xfd\x0d\xdf\x07\xee\x91\xa1\x6d\xdb\xca\x02\xca\x60\xce\x1e\x48\x52\x6f\x14\x5b\x3d\xec\x36\xe2\x9f\x11\x5b\xbd\xc7\xd7\xe1\xb7\xfb\xa9\x4f\x7f\xe9\x67\xff\xcd\x0f\x7e\xce\x4f\xff\xbd\x37\xfd\x88\xcf\xfb\x8c\xed\x91\xff\xfe\xef\xde\x19\x7c\xe7\x2b\xde\xf1\xdb\x7f\xf7\xb1\x2f\x7b\xdd\xff\xf9\x40\xe8\xef\x7f\xe7\xf3\x7e\x43\xbd\xf6\x97\x5f\x3c\x5e\xf7\xe3\x3f\xfa\xf1\xef\xf6\xdc\x0f\xff\xac\x4f\x20\x5f\x7c\x7e\xf6\x07\xb7\xf5\x33\xaf\xf8\xa6\x57\x89\xf1\xad\x0f\x9e\x7d\x7c\xdc\x8f\x3d\xeb\xc5\x3f\xf6\xfa\x9f\x7b\xc7\xfd\xfb\x7e\xf2\x3d\xbf\x4d\xfd\xf2\xff\xfa\x85\x5f\xf2\xa1\xcf\xfb\x86\x2f\x7c\x9b\xe7\xfe\xe1\xf9\xd1\x6f\xf7\x17\xbf\xeb\x17\x1f\x08\x7d\xdf\xff\xf9\x4d\xde\xff\x63\x3e\xf5\xdb\x9f\xfd\xf2\x7f\xf4\xf1\x5f\xff\x23\xf3\xf7\xff\xe3\xbb\x3e\xef\xd7\x9f\xf0\x6b\x6f\xf1\x31\xbf\xf7\xcb\xe1\xaf\xbc\xef\x23\xcf\x7a\xd3\xf7\x7e\x20\xf4\x1f\x7d\xec\x5f\xfb\xd2\x8f\xda\x5f\xfe\x65\x7f\xe3\x79\xaf\xff\x89\xdf\xfb\xaa\x9f\x30\xbf\xf2\x03\xff\xe6\x9f\xd0\xc7\x7c\xc2\xdb\xfc\xfc\xb3\xde\xe1\xa7\xdf\x32\x3f\xe6\x83\x1f\x08\x7d\xe7\x7f\xf8\xb5\x6f\xfb\xb3\xbf\xf2\xc1\xbf\xf9\x9b\xef\x21\x7e\xe5\x8b\xec\xdf\x7b\xce\x9b\xff\xe0\x37\x82\x17\x7f\xe5\x7f\xdc\xbf\xf7\xfb\x7e\xe1\xe7\xde\xf5\x43\x1e\xf7\x1d\x0f\x84\x7e\x57\x7d\xdc\x87\x3f\xb9\xbf\xe4\x2d\x7f\xfb\xbf\xbc\xf8\xa3\xcf\xcf\xf9\xa4\x17\x7c\xc1\x87\x6d\x7f\xeb\x3b\xfe\xc1\x6f\xbf\xe5\xbf\xfc\xcf\x8f\xff\x92\xe7\x7c\xf0\x7f\x7b\xeb\x07\x42\xff\xd5\x0b\x3e\xe1\x25\x3f\xf1\x77\x71\xfd\xca\x7f\xf2\x0d\xcf\xef\x6f\xff\x43\x1f\xf4\xfc\xf7\xfa\x49\xf8\x91\x3f\xef\xde\xe1\x1d\xff\xf6\x07\x7c\xe5\xff\xf1\x13\xdf\xfd\x8a\x3f\x15\x5b\x3d\xec\xad\xde\xe1\xef\xc0\xcf\x76\x60\xc3\x80\x21\x22\x33\xc6\x48\xf2\xf9\xc8\x60\xbb\xe2\xdc\x2c\x5b\xae\xce\x41\x6b\xa3\x3b\x8c\x75\xcb\x3a\x81\x08\x6e\xa3\x76\xf4\x95\x3b\xda\x77\xa8\x8f\x08\x8e\x94\x54\x21\xfb\x6c\xbb\x70\x91\x76\x4c\x57\x4a\x6d\xb9\x69\x83\x40\x54\x03\x75\xc9\x52\xc5\x5d\xbc\x32\x8b\xf0\x94\x79\x09\xa3\xbc\xdc\x58\x45\x53\x4d\x89\x44\xdf\x08\x1d\x95\x9d\xa2\x49\x54\x0d\xba\x5c\xc2\xf3\x9a\x47\x5c\xa4\xf3\xdb\xce\xc3\x39\x5d\xad\xd2\xaa\x1f\x31\x4e\x22\xb5\xc4\x3c\xb2\x3e\x25\xbb\xa0\x57\x0c\xa3\xe0\x73\xa5\x71\x6f\x4d\x1c\xca\xc8\x03\xee\xe6\xb6\x99\x4c\x25\xe7\xe5\xd8\xbe\x64\xa6\xd9\x54\xad\xe5\x05\xae\x85\x32\x1b\x27\xd3\x56\x96\xb0\xcf\x8d\x01\x9a\xc7\xe5\x8f\xfd\x5c\x51\xdd\x67\xe4\x3e\x21\xdb\xca\x71\x49\xe2\x77\x5b\xb7\x2b\x62\x86\x54\xf4\xf8\x22\x8a\x8c\x46\x17\xd8\x14\x29\xc6\xc6\x00\x36\x50\x85\xf5\xfb\xba\x4b\x03\x32\xf0\x56\x0c\x15\x2e\xd9\x75\x5c\x6c\x4a\xe4\xa0\x77\x2a\xe8\xfd\x00\x87\x1c\x44\x39\xd7\xb3\xac\x90\xb7\xe1\x51\x2b\x6c\xeb\x77\x51\xc5\x0c\xf9\xc3\x37\x64\xe7\x1e\xc7\x46\xb8\xea\xc2\xa3\x76\xb5\x58\x36\xc1\xea\xa9\x2f\x1b\xa9\x8b\xc7\xca\x9c\xf1\x85\x2c\xec\x13\xae\x47\x8b\xad\x1e\x86\xd3\x37\x80\x0f\x26\x1e\x6e\xf9\xcc\x49\x4c\x4b\x73\xae\x7c\x8e\x5d\x24\x42\x92\xb0\xfc\xe0\x9c\x36\x35\x47\x24\xbd\xdb\x38\x27\xd2\x8d\xc4\xbb\x92\x39\xc3\x95\x34\xec\x48\xd6\x6b\xf7\xa6\x1c\x26\x82\x29\xd4\x26\xb9\xab\x82\x11\xb8\x7a\x57\x65\xad\xbd\xc6\xe1\x0e\xd8\x20\x2e\x13\xde\x35\x3d\x66\x3b\x76\x79\x39\x89\xf6\x22\x74\x74\xc9\xcc\xcd\x59\xd1\xfa\xbe\x97\x8e\xd8\xf2\x32\x50\xba\x01\x14\x07\x48\x7e\x84\xdc\xb7\x7a\x53\x4f\xc3\x68\x94\x8d\x60\x5f\x37\x3a\x84\xec\x7c\x13\x22\x23\x22\xfd\x2e\x58\x63\x03\x64\x5f\x0a\xd6\x85\x41\x60\x81\xc5\x1a\x4d\x80\xe8\x5d\x46\x2a\xd6\x2a\xa9\x27\xd2\x79\x93\xb6\x17\xc1\x0e\x98\xf0\xd4\xd6\xed\xb5\x2b\xb0\xe1\xab\xee\x9b\x63\x29\xf3\x37\x7c\x27\x87\xcb\xb9\xde\xa6\x6b\x3f\xec\x26\xfa\x86\x98\xac\x60\x36\x7e\x5c\xd2\xd6\x69\x88\xc0\x6e\xcb\x7c\xce\x72\xcc\x01\x07\x9c\xe2\xcc\xe7\x25\xcc\x35\xd5\xba\x6b\x20\x4c\x71\xe1\x9b\xd5\xb4\x69\x85\x2e\xa2\x77\xee\xce\x81\xb7\x53\x50\x41\xb2\x15\xc3\xab\x5d\x3b\x5a\x18\x44\x07\x92\x48\x5e\x2a\x6f\xeb\x2e\x23\x48\x2a\x9d\x4a\xb5\x4b\x29\x40\x27\x3a\x61\x22\xfc\xc6\xcf\x4d\xaa\xed\xa2\xed\xc4\x3b\xaf\x0c\xeb\xc8\xce\x4b\x24\x03\xa7\x4a\x87\x7f\x34\xf8\x3c\xac\xf2\xbb\x01\x7c\x66\x9b\x7c\x50\xbc\x19\x59\x9a\x1a\x65\x9d\x17\x41\x39\x39\xd6\x5a\x2b\x9d\xfb\xa8\xb9\xc0\xcb\x2e\xb9\xd5\xe9\xe2\xde\x35\xbd\x8d\xf5\xbf\x32\x85\x41\x1c\xa5\x38\x70\xe8\xbc\x5f\x33\x59\x69\x21\xd3\xb9\x9e\x08\xa6\xeb\x88\xe5\xf0\x09\x66\x98\xf7\x92\x00\x6a\x17\x10\x77\xfd\x94\xf1\x92\x1b\x9e\x27\xc4\x15\xfb\xe6\x39\x5f\x62\x9a\x12\xd2\xe1\x1c\x15\xb0\x1d\x05\x6b\xcc\xc0\xd9\x3a\xdb\xe7\x00\xb8\x20\x73\xdb\xd9\x62\xac\x27\x41\x45\x2f\x4c\x26\xad\x61\xaf\x99\xc1\x89\x2b\xc5\x6e\x75\x8a\xe1\x39\x46\x84\xb6\x9d\x0e\x68\xb5\x66\x1a\x35\xed\xb7\xf9\x8e\x01\xad\x64\xeb\x1d\x2c\x7b\x44\x26\xb1\xdb\x8f\x3f\xf1\x6f\x56\x79\x15\x49\x35\x47\xd7\x71\xba\xd2\x05\xda\x12\x61\x64\xc2\xc3\xcd\xbb\x9e\x64\xed\x29\xf8\xd0\x3c\x09\x4c\x95\x9e\x2f\x7f\x11\x69\x51\x56\xe2\xca\xbd\xf0\x8c\x83\xc4\xb4\x01\x3c\xc1\x14\xa4\x76\x62\xe7\x5d\xf2\x40\x76\xd6\x66\x8e\xea\xbd\xf7\x9b\xc9\xd1\x5c\x6b\xb1\x2b\xb9\x7d\x1a\x7f\xb6\xea\xec\xc8\xa0\xac\x63\xa6\x18\xbb\x18\x6d\xb7\x42\xde\x76\xd7\x55\x03\x44\xb4\xb1\x94\x8d\xa5\x17\xf0\xdd\x71\xe5\x44\x1d\x27\xb7\x01\x37\x8b\x0d\xba\x94\x84\x40\x8c\x69\x0f\xd6\xb1\xe5\xe0\x01\x47\x92\x37\x82\xcf\xc3\x7a\xc9\x1b\xc0\x27\xb5\x80\x16\x6f\x62\xeb\x60\xb7\x8e\x65\x6e\x72\x37\xab\xba\x33\x6e\x36\x55\x06\xb2\x2e\xf3\xda\xe4\x3c\x4e\x81\x5c\xda\x0e\x47\xef\xca\xf2\x0b\xac\xad\xf6\xaa\x69\x83\x32\x2d\xe2\x92\xbf\x2e\xc3\x5d\x3c\xd3\x21\xd8\xd1\x8e\x49\x1d\x92\x5e\x9e\x02\xaf\x66\x1c\x02\xe8\x3e\xd3\x10\xa0\x20\x0d\x11\x07\xa5\x41\xe8\x3e\x4a\x33\x31\xdb\x2d\xd1\x33\x5c\xde\x1e\x8c\x62\x23\x96\x33\x84\x9e\x27\x93\x83\xc6\x5e\x6f\x93\x99\x6f\x8c\x34\x9e\xbc\x43\x59\x85\x4a\x8e\x2c\x8b\xb4\x31\x85\xe2\x15\xde\xf2\x29\x55\x70\x1d\x8b\xb4\x61\x12\x78\xa1\x18\xb4\xf3\xb6\xdb\x0d\x09\x87\x36\x34\x9b\xa7\x2d\x34\xee\xb8\x67\xea\x11\xb8\xb6\x61\xa3\x2d\x84\x90\x49\xf6\xad\x00\x33\xec\xc6\x4c\xd8\x07\x0c\x77\x81\x0f\x9b\x6e\xef\x68\x20\x77\xa8\x1c\x3c\xee\x40\x43\x1a\x93\xb4\xd0\x63\xd8\xcb\x8a\xbc\xb1\x00\xc7\x4e\x08\x3a\x4e\x48\x5c\x4c\x15\xde\xd4\x9e\x33\xa7\xcb\x69\x29\x0c\x7b\x4f\x62\xf8\x84\x34\xb1\xb0\x9f\x6c\x06\x8d\x85\x53\x01\x57\x76\x68\x35\x71\x57\x2a\x39\x30\x42\xb6\xf3\xae\xa3\x4b\xb4\x8c\x52\x99\x69\xb9\x53\xa2\x32\xec\xdb\xb5\x5b\xaf\x47\xab\x81\xf7\xbc\x75\x9d\x91\x91\x32\xcc\x46\xc9\x9a\x88\x47\xcb\x69\x7c\x14\xf8\x3c\x8c\x9d\xba\x43\x66\x2e\x49\xb0\xda\x9e\xed\x82\xdb\x96\x71\xc9\x19\x31\x68\xa5\x6e\x48\x5c\x48\x45\x90\xc6\xe9\xf0\xd5\x8c\xe4\x86\x77\x37\xb8\xbf\x6d\x75\xf6\x32\xcb\x12\x19\x14\x93\x87\x80\xce\xa3\xca\x58\x03\xc6\x69\x05\xa8\xe4\xca\x90\xed\x40\xc8\xae\xa6\x8c\xbe\xb2\x39\x8a\xe6\xee\x2e\xff\xca\xfa\x86\xa6\xef\x88\xd8\x9b\x80\x8e\x7e\xec\xbc\x70\xe2\x94\xf9\x93\x72\x63\xa4\xeb\xa8\xde\xed\xea\x02\x6d\xb3\x70\x0a\x07\x33\x01\x77\xad\xb5\x0d\x7a\xf1\x3f\xf1\xfd\x39\x4c\xe2\xa7\xb6\x8b\x6a\x76\x90\xb4\xb5\xfd\x84\x19\xa8\xd3\xf2\x5c\x56\x49\x6e\xb8\x2d\x8a\x65\x08\x5e\x77\xa5\x06\x38\x48\x0f\x36\x9c\x14\xe7\x20\x93\xcb\xdc\x2e\x69\x2c\xbc\xe2\x09\x05\x23\x43\x0f\xe3\xcc\x44\xe3\xda\x32\xc9\x0c\x68\x32\xdd\x5d\xd5\x60\x2a\x29\xe9\xe6\x52\x6f\x5c\xf9\xf3\x14\x65\x85\x09\xa4\x21\x33\x56\x10\xb4\xbd\xfc\xb6\x90\xdb\xb6\xba\x19\x2d\x5c\x60\x09\xae\xdb\xee\xc8\xcb\xeb\x74\xdd\x48\x9a\xac\x4d\xf5\xe0\x85\x70\x38\x41\x32\x78\x52\x68\x40\x33\x39\x95\x7c\x22\x33\x99\xf3\x21\x4b\xe2\xd8\x6d\xb7\xe7\xc0\xc8\x0c\x0d\xa3\xf0\x40\xcc\xb4\x23\x6f\xb6\xa8\x15\xbc\xaa\xcb\x6c\x60\x79\xea\x0a\xd9\x27\xd6\x5d\xc2\xc9\xe4\xbc\x2a\xa6\x8f\x76\xb6\x7a\x18\xdf\x7d\x03\xf8\x34\x7d\x9c\x80\xe7\xcd\x2b\xa7\x1d\x61\x40\x73\x3f\x40\xba\xa4\x11\x23\x8a\x72\xd9\x84\xe1\x44\x3d\x17\x7a\x78\x3d\x00\x08\xf8\x36\x17\x27\xc3\xbd\x5d\xaa\x51\x7c\x00\xdb\x6b\x68\x00\x16\x8e\x6d\x64\x5b\xb7\xa8\x51\x91\x55\x11\x20\x30\xd9\xaf\x64\x8b\x47\xfc\x82\xf3\xae\xdd\x85\x10\xb9\xee\xf3\x34\xea\x98\x04\x1d\xb0\x6c\x69\x2a\x30\x47\x36\x85\xb8\x05\x71\xbb\x72\xbc\x1a\x63\x02\x6d\x46\x36\xbf\x4d\xcb\xee\xf2\x39\xe5\xa6\xcb\x64\xc6\x4c\xab\x5d\x44\xe0\x2e\x2b\xef\x44\xa3\xd0\xcf\x3c\x9d\x31\xd7\x46\x57\xe1\x1b\x07\x67\xd7\x66\xe0\x7c\x41\x76\x93\x1a\x85\xb2\xd8\x37\x22\x93\x55\x32\x09\x4e\xc2\x1e\x61\x9f\xa3\x47\x95\xf2\x32\x24\xc8\xfd\x4f\xb4\x21\x66\x60\x43\x8d\x4d\x5b\x1d\x9d\xdd\x55\x83\xe1\x0a\x74\x90\x59\xed\x2c\x79\x75\x30\xa9\x5b\xa1\xec\x3c\xae\xb6\x47\x9c\x78\x92\x2a\xa1\x55\xdb\xc9\x5a\x0e\xf1\x20\xe8\xbc\xc0\x4d\xa7\x14\xa8\xb6\xe7\x4a\x7d\x8a\xc3\x1e\x47\xb1\x40\x3a\xc5\x5c\xac\x4d\x70\x85\xb5\xaf\x13\x8f\xb3\x44\xe0\x13\x39\xc2\xd0\xcc\x0b\xd0\xd8\x5d\x02\x34\x6d\xba\x14\xe7\x6e\x18\xec\x9b\xbe\xdc\x8e\x96\xd9\xeb\x5a\xf2\x00\xe8\xf4\xa9\xc8\xed\xc8\x02\x20\x68\x92\xb8\x42\x3f\x28\x0b\x36\x3c\x0a\x7c\x1e\x36\x41\xbb\x01\x7c\xd0\x51\xbb\x00\x16\xb2\xad\x03\x95\xc0\x81\x36\x65\xe7\x22\x3b\x98\x63\x68\xda\x18\x94\x35\x38\xe0\xcf\x06\xcb\x8e\xfd\x64\xe8\x36\xce\x47\xb5\xcc\x7a\x73\x54\x66\x8c\xa2\x6f\xbb\xde\x5d\xc3\x28\x3a\x23\xa0\x10\x28\x48\x27\x0d\xaa\x6f\xf8\xe7\x09\x35\x90\xb8\x61\xef\xca\x68\xbc\x58\xe2\xc8\x02\xe7\xee\x4a\xb8\x78\x88\x6b\x9b\x67\x8e\x98\x2e\x4d\xd8\x66\xaf\x88\x33\xda\xfd\x58\x97\xeb\x67\x08\x38\x8f\xf3\xae\xb9\xdb\x62\x58\xd3\x6c\x4e\x3a\x53\xc1\x27\x29\x09\x79\x3d\xcc\xd6\x74\x36\x06\x9f\x40\x98\xc6\x39\xb0\x46\x23\xef\x92\xc0\x66\xc8\x79\x97\xdd\x82\x9b\xe7\xc8\x63\x4e\xde\x4d\xe8\x84\xf1\x73\x33\xbd\x06\x5d\x87\xe2\x87\x72\x80\xd2\xaa\xce\xd0\x0d\x38\x83\xad\xe5\xcc\xa7\x36\x77\x5d\x4f\xb1\x59\x9e\x8e\x5f\x8c\x65\xb1\xef\x2d\xd2\x6b\xc5\xbd\x2b\x2f\x63\x0c\x14\x01\x66\xf0\xc6\x26\xed\xd1\x19\x72\x46\xb5\x94\x2d\xe0\x2e\x79\x60\xa2\x69\x2c\xd4\x13\x33\x08\xc8\x37\x24\xc7\x23\x39\xb9\x5c\x82\xb4\xb3\x4b\x4a\x64\x00\xdb\x65\x3b\x93\xdf\x37\x6b\xe3\x9e\x16\xbf\x6b\x1f\x9d\xb4\x1c\x27\xe4\xd3\x2b\x05\xca\xc9\xf4\x41\x7c\x04\xb0\xab\xbd\x48\x7c\x6c\xd2\xa1\x79\xee\x43\x89\xc1\x2e\x4b\xac\xd0\xa9\x18\xf0\x28\xf0\x79\xd8\x4c\xfe\x06\xce\x67\x40\x8d\xe7\xac\x71\xf2\x7d\xd3\x33\x45\xda\x37\x4b\xda\x1c\x6c\xd2\x0b\xee\x4e\xba\x61\xc8\xc5\x1c\xb2\xb4\xc4\x0b\x9d\x3b\x9b\x77\x35\x3b\x72\xef\x31\x08\x2b\x33\xbb\x50\xdb\x8f\xcd\xe1\x9c\x36\x6a\xc5\xa9\x0d\x77\xcb\x82\x5e\x4b\x04\x50\xee\xc7\xbe\x2e\x49\x59\x33\x77\x9d\xb3\xa2\x79\x97\x4c\xcc\xdd\x52\x15\xc0\x3c\x88\xc0\x3b\xe7\x86\x24\x2b\x67\x47\x72\xa8\x0a\x0f\x14\x0c\x3a\x10\x55\x2d\x80\x4b\xa3\x72\xdb\xe2\x94\x03\xd3\x43\x0e\x79\xc8\x6a\xe4\x58\xf0\x6e\x50\x61\xbb\xf1\xa6\xe4\x54\xe8\x4c\x95\x16\x3e\x3d\x4a\xdb\x2e\x2c\x91\x8c\xee\xb7\x89\xbb\x95\xa1\xc8\x5e\xdd\xa3\xb4\x43\x23\x8e\xa5\xf3\x8e\xa6\x4f\xa7\xe1\xc8\xa0\x3d\x5b\x3e\x18\x96\x44\x2a\x15\x88\x4b\xec\x5c\x24\xdf\xa5\xc3\xdd\x8f\x3d\x5d\xab\x43\x16\x9a\x71\xca\x0e\x7f\x55\x03\x16\xcc\xd7\x8c\x8b\x6e\x93\x6b\x5f\x0e\xdc\x32\xe3\x5c\xa8\x40\x49\xb4\xe2\x26\xdf\x31\x0a\x3c\x66\xc7\x16\x2d\x3b\x51\xf5\x4b\xa7\x03\x2d\xe2\x7b\x10\x8c\xb5\xd1\xc1\xd5\x9b\x46\x2e\xf2\x83\xa1\x5a\x4f\x1e\xae\x50\xd9\x6d\xe7\xac\x14\x5f\xd2\xd4\xda\xb6\x65\x8a\x52\xc6\xd1\x2b\xee\x14\xec\xfb\xe6\x57\x57\x22\xa1\xa6\x38\x3a\xd1\x05\x68\x34\x15\x17\xc8\x1e\x70\x9d\x79\xa3\xd8\xea\x91\xff\xfc\xec\x7f\xfa\xc2\x77\x7f\xf9\x0b\xbe\xe1\x45\x8f\xbc\xfa\xb1\xcf\x7c\xd2\xbf\x7e\xec\xdb\x7f\xc0\x27\x7f\xef\x73\x3e\xf4\x6d\x3f\xf1\x6f\xfe\xe8\x07\xfe\xc1\x53\xfe\xea\xc7\xff\x19\xb1\xd5\xcb\xde\xe4\x23\xff\xf9\x37\x7d\xce\xe7\x3d\xe5\x35\x5f\xf1\x11\xcf\x7d\x8f\xf2\x9f\xbe\xff\x7c\xf5\xbb\x3e\xf1\x19\x5f\xfb\x75\x8f\xf9\xc3\xf7\xfd\xad\x3f\x78\xf3\xff\xd7\xb7\xbc\xe8\x81\xd0\x3f\xf7\x66\x4f\xf8\xe5\x8f\x7c\x5a\xf9\xbf\x5e\xf2\xea\x2f\x21\xdf\xfe\xde\xff\xe7\x5b\xf1\xf7\xfc\xaf\x9f\xf8\xf4\x2f\xf4\xef\x30\xff\x97\xf4\xb6\x9f\xf2\x26\xdf\xfc\x01\x0f\x84\x3e\xf9\xf7\x7f\xe3\xad\xdf\xfb\xdb\x7f\xec\x9b\x3f\xe7\x57\x3e\xf4\x47\x9f\x91\xed\x87\xbe\xf6\xa3\xbf\xe8\x65\x1f\xfb\x61\x9f\xf8\xda\x57\x7f\xed\xb3\x3e\xe2\xa7\xbf\xeb\x03\xb7\x07\x42\x3f\xf5\x6f\xbf\x0d\x7d\xe4\x35\xf8\x8f\xde\xf7\x33\xfa\xf5\x6e\x6f\xfd\x65\x4f\xf8\xee\x8f\xfb\x3f\x3e\xfd\x77\xbe\xe7\xa7\x3e\xe8\x75\x2f\xf9\xdc\x4f\x7e\xf5\xdf\x38\x9e\xf4\x40\xe8\xff\xf0\x0c\xfd\xd5\x7f\xfb\xf7\x9e\xf9\xb9\xcf\xfa\xbf\x5f\xc7\x3e\xfb\xab\x9f\xfc\xdc\x0f\xfa\xa3\xbf\xbf\x3e\xf1\x83\x7e\xfd\x3d\x5e\xa2\xbf\xe4\xa5\x6f\x47\xbe\xe8\x41\x0f\xaa\xf7\x7b\xbf\x67\x1c\xcf\x7f\xec\x97\xf5\xe7\xbe\xea\x75\xdf\xf2\x82\xaf\xfe\xf9\x97\x7c\xd5\x63\xbe\xfa\xfb\xff\xd5\x2f\xbd\xd9\x0b\x1f\x7b\xbd\xe6\x49\xaf\xfd\xc9\xcf\x7a\xf0\x01\xde\xfb\xa7\x9e\xf8\x3d\xff\xf4\x19\xaf\xf8\xb9\xb7\x79\x9f\xf7\x7c\x1a\x1b\xff\xe8\x75\x2f\xfb\xd1\xaf\x4c\x3f\xf6\x19\xbf\xf4\x9f\xbf\xf5\xa3\x9e\xcd\xd0\x8f\xbd\xf6\xed\x1f\xfc\x5f\x9f\xf9\x94\xbf\xf6\xf4\xaf\xfc\xeb\xdf\xf8\x37\xff\xcb\xc7\x3e\xe7\x4d\xde\xfd\xdf\xbe\xea\x85\x2f\x7d\xc5\x3b\x3f\xe9\x15\xc7\x37\xfe\xf2\x1f\x3f\xf5\x5d\x3e\xef\x5d\x7e\xe9\xe5\x7f\x2a\xb6\x7a\xd8\x5b\xbd\x21\x03\xd0\x2b\x62\x44\xdf\xd0\x5d\xc2\x46\xb8\xde\xe5\xc8\xd9\xc1\xce\x99\xc8\x4b\xee\x3b\xcb\x00\xea\xb6\x57\xab\xc4\xe8\xd4\x09\x71\x82\xbb\xb8\x76\x12\x73\x97\x06\x86\x9e\xf2\x38\xc8\x38\x6b\xe3\xfc\x02\x7e\x94\x78\xb6\x8e\x6d\x73\x69\x4e\x0d\x9d\xe5\x6d\xf6\x58\x95\xd9\xf9\x5d\x3d\x4d\x2b\xc1\x91\x6b\x43\xce\x1c\xb3\x40\x9b\x2f\xa0\xb5\x64\xd7\x39\x3c\x1e\x32\x9b\xb0\x4a\xbf\x0e\x77\xb8\xb2\xb3\xb9\x0d\x3f\xba\xbf\x4b\xd7\x3e\x65\x4a\xa7\xf6\xd6\x63\xd0\x4a\x88\x58\x90\x9c\x49\x89\x94\x1d\x7b\x8b\x98\x5c\x8b\x88\xe1\xb7\xbe\x87\x2d\xd9\xd3\x9c\xa1\xf3\xdb\x4a\xad\x85\x53\x1b\xcc\xd6\x2e\x85\xa9\x97\x93\x54\x1e\x03\x63\x7f\x0a\x24\xc5\x22\x61\x10\x7d\x64\xac\x0f\x51\xfd\xde\x4b\x71\xf8\xae\x36\x85\xa5\xaa\xe9\x08\xde\x8b\xd0\xf6\x54\x9b\x86\xe0\x3c\xac\x85\xc8\x0b\x95\x49\x4d\x7b\xc9\x1c\x65\x0d\x5d\x8f\x5d\xb1\x73\xf6\x30\xef\x62\xfd\x37\x83\x6b\xac\xdc\xee\x91\x5f\xb3\x16\x40\x0e\x89\x96\x3d\x3a\xd7\xc7\xa2\x0a\x55\x0a\x8a\x15\xa7\x74\x1e\x1c\x3c\x6f\x8b\x93\xbb\x4e\x1f\x33\x41\x61\x6c\x9c\xc4\x7a\xd0\x4d\x97\x2b\x9e\xa5\xe0\xfd\x20\xce\x1c\xca\xf5\x6c\xb3\xd9\xa1\x29\x07\xaf\x3c\x62\x00\xd5\x89\x36\xf0\x68\xe2\xed\x61\x38\x7d\xc7\x31\x1d\x74\xd4\xa5\xe0\xdc\x3d\x04\x7c\x22\x5d\x42\x6b\x9c\x59\x54\x69\xd3\x83\xf1\x2b\x1b\x91\x56\xf7\xb0\x5c\x1b\x12\x73\xa4\x7e\xdb\x9d\x02\xa2\xe7\x31\x21\x22\xfd\xc0\x6a\xc5\x08\xe6\x69\x8e\xd8\x71\x01\x81\x6e\x0a\x58\x9e\xf9\x94\xd1\xb9\xa9\xe1\x8c\x9b\x12\x38\xd9\xbb\x74\x73\x18\x42\x1d\xab\x47\x5a\xb2\x36\xa5\x1d\xdb\xf0\x3d\x52\x71\x5a\x79\x22\x73\x1c\x24\x2b\xb3\xb4\xa5\xa7\x73\x30\x77\x7e\x5e\x0e\xa6\x9b\x9e\x24\xc2\xe4\x88\x90\xc3\x2f\x7a\x30\x56\x36\x0a\xec\xd0\x2b\xab\x99\x72\xdf\x70\xa4\x7b\x84\x9e\x71\xb0\x0d\x69\x91\x69\x9a\x80\xf3\x2e\x35\xf9\x41\x04\xc5\x45\x36\x6d\xf7\x4b\x9a\xc2\xc3\xec\x57\xcd\x90\x31\xa4\xd5\x29\xfa\x02\x4a\x5c\x73\x4d\x8e\x0b\xaa\xaa\x11\x2a\xcb\x6d\x96\x2e\x51\xae\x6d\x6d\x4a\x59\xcc\x00\xe2\x60\x3f\x9a\xd3\x7c\x10\xdb\x01\x00\xb8\x13\x50\xe3\x11\xeb\x74\x68\xa4\x53\x09\x4e\x10\xb8\x8b\x2a\x16\x73\x46\xa2\xb3\xa5\xb1\xf7\x9e\x43\xc6\x1c\xa4\x08\x83\xab\x66\xf5\x94\xf2\x51\x31\xf4\xbe\xcc\x09\x4f\xa6\x86\xc7\x12\xb0\xbb\x0c\x78\x97\x3d\x8f\x7e\xcc\x88\x37\x94\x00\xd4\xfe\xc2\xd5\x4d\x6d\xb0\x5c\xc0\xda\x7d\xf7\x3d\x41\x00\x28\xa3\x1e\xa7\x92\xaa\xa0\xbb\x79\xb4\xa5\xfc\xc3\x2a\xbf\x3b\x3c\x3d\x9d\x83\xf2\xa2\x87\xee\x72\x9f\x7a\xf9\xdd\x0a\x7c\x2c\x95\x2d\xa2\xa6\xc8\xd5\x52\x39\x14\x00\xde\x03\x12\x74\x40\xbc\x25\x78\x57\x46\xb3\x98\xd6\x53\x22\xed\x46\xa5\x7c\x6b\xbb\x5d\x50\xa1\x84\xd3\xde\xbc\x11\x06\xb9\x1e\x6c\x22\x27\x2a\x83\x5f\xa9\xe1\xb2\x19\x7f\x17\xf8\xd0\x10\x1b\x3d\x2f\x2d\xdd\x59\x44\x5c\xb2\x29\x12\x8b\xd8\xe0\xe6\xb7\xe4\xe3\x08\xc1\x22\x7a\x52\x41\x4c\x68\x07\xef\xe8\x9a\x77\x59\xba\xb0\x62\x93\xd6\x1b\xca\x8a\x1d\xb4\x9f\x6a\x99\x99\xc4\xa9\x73\x3f\x6d\x10\x01\x2b\xd5\x26\xcf\x83\xa6\x2e\x8d\xda\xb6\xab\x00\xb0\xee\x72\xd2\x24\x00\x37\x9b\x00\x68\xc9\xb2\x13\x66\x6b\xc3\xe8\x58\x6e\x02\x55\x6d\x1a\x52\x97\x75\xa7\xa2\x60\x31\xe8\xae\x7c\x9a\x4d\xba\x79\xd7\x3b\xa1\x87\x34\x5b\xe3\xbc\x0e\x79\x12\x47\x3c\x39\x79\x56\x48\xc9\x4c\x0d\xa2\x11\xa2\x90\x7b\x39\xeb\x06\x11\x20\x24\x0a\x7e\x50\x7a\xd3\xa0\x8f\x8a\xcb\x33\xd8\x0f\xdf\x01\x74\x63\xb9\x22\x42\x5a\x28\x75\x78\x20\x34\xe4\xa1\xfc\x2e\x75\xdf\x03\xad\x28\x37\xdf\x1b\x20\xf6\xae\x55\x7c\x86\x63\x5e\x4c\x87\x3c\x06\x0c\x23\xa7\xd8\x1c\x0d\x24\x2e\x85\xcd\x25\x44\x49\x29\xed\xd8\x5c\xca\xeb\xd2\x99\xde\xa4\xf1\x81\xe6\x47\x81\xcf\xc3\x7a\xc9\x5b\x0e\x28\x2f\x36\x1a\x98\x57\x0e\xad\x1d\x8e\x6c\x50\xb7\x50\x3d\x9e\x67\x1c\x17\x9e\x27\x89\x72\xbf\xaa\xb9\x18\xbd\xaa\xad\xbb\xb9\xdc\x5d\x84\x8a\x29\x99\xa2\x0b\x53\x44\x96\x9c\x5e\x25\x97\x55\x59\x74\x97\xcb\x98\x61\xd0\xbe\x19\xac\x98\x61\x14\xed\x57\xa1\x07\x67\xc5\x99\x9b\x72\x2b\x3b\x52\x05\xed\x4c\xa8\x83\x8a\x4e\x10\x0f\xe0\xf6\x0e\xa3\x88\xc8\x28\xe8\xf6\x2d\x11\x0f\xcf\xb4\x59\x60\xb3\x06\x79\xd5\x8b\xfb\xbb\xb6\x28\x8e\x10\x75\xd5\xd1\xc0\xc6\x31\xe5\x96\xe9\xd8\xdb\xa1\xb2\x2e\x98\x02\x72\xf6\xe4\xc3\xdc\x4a\x3f\x8e\x00\x49\x3c\x89\xd9\xce\xbb\x5c\x9c\xa8\x98\xd0\x62\xc2\x92\x88\x0a\x74\xe0\x81\xcf\x4d\x0a\xbb\xea\x8e\x77\x46\x8c\x1e\x40\x5f\x18\x77\x24\x2d\xd5\x84\xf6\x24\xc3\xba\x6d\xdf\x92\x1b\x45\x68\x35\x17\x9e\xf3\x94\x3e\x34\xec\x7a\x3f\x01\x9b\x4c\xb9\x0d\xc9\x99\x73\x2d\xa1\xe2\xb2\x5b\x2f\x2f\x02\x36\x7b\xde\x35\xa7\x0a\xe5\xb4\xcd\x6d\x46\x4d\xea\xf4\xf0\xfd\x62\xe0\x90\xe0\xdc\x3b\xe8\xdd\x85\x32\x99\xaf\x1b\xdb\x73\xdf\x9c\xb2\x51\x66\xd0\xca\x7d\xa4\x35\x6b\x21\x2f\x03\x41\x05\xea\x80\xc4\x4c\xe2\xab\x1c\xd0\x6d\x3b\xe6\x20\x8b\xc0\x9d\xaa\xeb\x52\x4c\x07\xae\x3b\xcf\x7e\x3e\x9a\xf5\x7f\x18\x3b\x75\x03\xf8\x8c\xbe\x45\x3d\x2f\x43\x85\x15\xdc\x33\x45\xd1\x96\x94\xea\x31\xc8\x18\x6b\x22\x41\x30\xa0\x5d\x0d\x25\x9f\x51\xaf\x35\x8e\x6d\xde\xc5\x6f\xe8\xa9\x2e\x9c\x90\x75\xb9\x0f\xa2\x8f\xfd\x80\x52\xee\x68\x20\xbb\xb1\x75\xa4\x36\x87\x6f\x72\x26\xe0\x14\x5a\x90\xb4\x4d\x14\x77\x97\xc4\x49\x0f\x42\x98\x15\x21\xd1\x06\x08\xe3\x26\xd8\xe3\x38\x1b\x6d\x9b\xc6\x4e\x20\x44\xb7\x0d\x21\x3f\x98\xc7\x3e\x9c\x18\x75\x59\xf3\x5d\x07\x94\x01\x12\xfe\xe2\x0d\x4b\xc8\xa5\xbf\x3a\xcf\x12\x22\x82\xc1\x22\x6e\xa7\x09\x8f\xd3\x6a\xed\x3a\x5b\xe1\x7c\x43\xc7\xcc\xc9\x04\x77\x29\x3d\xd9\xe4\x84\xec\x1e\x6f\xd3\x74\x56\x74\xe6\xf3\x54\xd4\xa0\xe2\x0e\x59\xc5\xe8\x94\x40\xc2\x3c\xca\x35\x98\x4d\x85\x54\x36\x70\xdc\x76\x33\xbd\x44\x16\x38\x37\x33\x39\xd1\xa7\x48\x72\xc4\x78\xda\x13\x3a\xe6\x02\xcf\x55\xeb\x78\x9e\xe3\xdc\x03\xbb\xc8\x6e\xa6\x64\xf1\xaa\x77\xc9\x03\x45\xc3\x6d\xc7\x8a\x6c\x71\x98\x4b\xd0\x61\xcb\xe9\xf0\x8e\x42\x94\x22\xf0\x4b\x1c\x03\x6f\x06\x5f\x50\xf1\x45\xeb\xc6\xe2\x15\xe7\x5d\xac\x7f\x84\x47\xad\xc8\xb0\xe2\x2b\x73\xd2\x9a\x56\x45\xc0\xc3\x2f\xeb\xa9\xdf\xa2\x80\x80\x55\xed\x47\xa5\x0b\x8f\xea\x26\x90\xeb\x81\x63\xa0\x6f\x04\x9f\x87\xf1\xdd\x37\x80\x4f\x21\xca\x86\x25\xa4\xb9\xb0\x38\xce\xa9\x28\x2a\x7b\x42\x48\x6e\x57\x67\xde\x81\x8a\x65\x44\x3e\xca\x15\x34\xd8\x92\xc5\xd2\x98\xbb\x48\xb3\xd5\x80\xcd\xe0\x20\x4b\x38\x26\x10\xb2\x4c\x30\x2f\x4d\xaf\xa5\x63\xa7\xde\xd0\x88\xc1\xbc\x20\xbf\x34\xae\x82\xc0\xbd\xc9\x23\xdf\x26\x71\x82\xd3\xeb\xea\x76\xed\xd6\x9c\x72\x2d\x9c\x69\x3a\xa0\x26\x5c\xee\x55\xf7\xba\xf5\xb1\x39\xa5\xf0\xa1\x64\x28\xf2\x6a\x58\xac\x9b\x38\x1f\x9a\xbc\x97\x7c\xce\x81\xcc\x76\x72\xb2\x27\xdb\x2f\x2c\xaf\xab\xcd\x75\x29\x7c\x42\x98\x2c\xd9\x8a\x66\x57\xd6\xb8\x2f\x7b\xf8\x60\x6e\x6b\x31\x0e\x56\xb5\x6a\x7a\x54\xcc\xc7\x79\x1e\x93\xeb\x79\xc0\x7d\x41\x17\x31\x2d\xdb\xa1\x36\x5f\xe1\x56\xa3\xd9\x51\x11\xb2\x53\x7c\xdb\x01\x65\xa1\x62\xf7\xe9\x92\xc3\xec\xa6\x28\xc0\x3d\xa2\x39\xa3\xb2\xa1\x1d\x8a\x56\x44\xf7\x8b\x68\x76\xba\xe6\x8e\x95\xc8\xd1\x0a\xb8\xed\x49\x68\xa9\x6b\xb8\xc9\x89\x92\xc7\x3e\x5b\x6d\x42\xf2\xcd\x0a\x3c\xfd\x68\xf1\x28\x95\x86\xc9\xf0\xa0\x8e\x86\x76\xea\xa0\xc9\xc8\x77\xf1\x60\x2b\x23\xc2\xe0\xc4\xc4\x4d\xe9\xd2\x81\x0f\x5c\xdd\xb2\xa6\xc4\x2b\x24\xe2\xca\x5c\xa5\xd3\x01\x18\xa9\xfd\xbc\xa2\xad\xd0\xd4\x47\xcb\xcc\x1f\x36\x41\xbb\x81\xf3\x29\x56\xd8\xac\xdd\x4e\x8e\xed\x08\x92\xcb\x56\x25\xbb\x14\x11\xb0\x98\x76\xc0\x11\x86\xde\x52\xa5\x98\xed\x14\xd3\xeb\xf0\x04\xdf\x66\x2d\x00\x49\x0e\x56\x6c\xc5\xd7\xe3\x34\xe9\xc0\x2d\xc6\x63\xec\xcc\x2b\x5e\x4a\x0c\x57\xe3\x22\x96\xb6\x85\x0e\xc4\x49\x72\x0d\xab\xdf\xc6\x6f\x04\xa7\x57\xa5\x80\xaa\x86\x5b\x6b\x62\x3f\xaa\x90\x6b\x32\xac\xf4\x62\xbb\x75\xe4\x72\x6d\xe3\x32\x83\x79\x0c\xea\x6c\xba\xec\xbc\xab\xf2\x89\x46\x7b\x3e\x63\x3e\x98\xc8\x02\xd0\x55\xac\xd5\x74\x5e\x15\x18\xd8\x44\x92\xee\xea\x78\xae\x62\x13\xed\x1b\xb6\x69\xf3\x43\xdc\x65\xe9\xe2\xdb\x06\x61\x07\x24\x4d\xdc\xc4\x9e\x77\x60\xd9\xa1\x45\xb3\x71\xe7\xa5\xea\xa5\x62\x39\x8f\x03\xe8\xe4\x0f\x1f\x03\xf0\xd7\xbc\x6d\x16\xc9\xac\x97\xcc\x9d\xce\x0a\x9c\xa8\xd9\xcb\x69\xe1\xe6\x18\x93\xb2\x45\x4d\xbd\x95\xa3\xc3\xa4\x23\x04\xa5\xc7\xac\x44\xdf\xe5\xba\xeb\x9d\x54\x75\x55\x2d\x33\x3e\xd7\xe6\x82\x5a\x86\xe1\xb4\xe6\x38\xf6\xa3\x32\xa3\x6b\xe4\x6a\xdb\xb7\x40\x4f\xc4\x86\xed\x09\x41\x9b\xcb\x5d\x7f\x3b\x9c\x62\x71\x90\x9e\x28\xa1\xda\xa3\xe6\x88\xa9\x8a\x4e\xe7\xb7\x95\xd3\xb1\xe0\x40\x6e\x56\xd9\xb3\x02\xdb\x09\xb4\xd2\x46\xba\x47\xbb\x99\x3f\x6c\x26\x7f\x03\xf8\x38\x58\x53\xd1\x61\xc5\x1a\xdc\xa4\x1a\xe1\x1d\xc6\x82\xcf\xd4\xdb\x10\x54\x0c\x23\x86\x40\x68\x0a\x72\x2d\x08\x8d\xe5\x70\xde\xa6\x56\xc3\x7a\x94\x86\xed\x32\x87\x18\x6c\xb3\x63\xae\xa0\xe8\xb9\xce\xc6\x8e\x76\x82\x23\x48\x81\x83\x5a\x76\xd7\xae\x2a\x9f\xec\x1c\xe5\x36\x77\xd1\xdc\x76\x15\xd3\xc8\xd7\x76\x14\xd2\x77\x23\x0d\x2f\x5c\x98\x48\xc6\x15\xc1\x96\xf1\x84\x33\xf9\x6c\x62\xb4\x11\x27\x9f\x17\xbb\xeb\xa8\xc3\xda\xc4\xac\xf8\xda\x14\x37\x6e\x83\x41\x57\xd8\x17\x9b\xd7\x11\x08\x8c\x59\x5f\x56\xc1\x33\xb3\x49\x76\x8e\x23\x5d\x7c\xea\xbc\xee\xaa\x06\x19\xdc\xe8\x81\xa7\x23\xb2\x1e\xb8\x19\xb6\x66\x9f\xc6\x85\x99\x0f\x27\x7c\x2b\xeb\xac\x4d\xd3\x34\xe8\x9c\x47\xa2\x7c\xe0\xc3\xdc\xd5\xec\x94\x68\xce\xcb\x46\x23\x91\x73\x7d\xf6\x9e\xce\x54\x8f\x61\x3a\xaf\xa9\x0a\xe5\xd0\xc1\x44\xaf\x82\xae\xe6\x6b\x17\x73\x3f\x8b\xbb\x6b\x02\xc8\x59\x98\x17\x4e\xac\x67\x60\x33\x6d\x76\x39\xb2\xab\x10\x28\x19\xcb\x9b\x33\x07\xdd\x83\xb1\xa0\xea\x01\xb4\x32\x69\x53\x9a\xdd\xc5\x97\x0a\x70\xb4\x93\x33\x49\xd2\x26\xd2\x90\x0c\xcc\xc9\x2e\x78\x40\xda\xfd\x7e\x0e\x57\xa1\xa1\x31\x9d\xaa\x52\x7b\x1d\x3e\x34\x68\x1f\x58\x47\x78\xa3\xd8\xea\xdd\x7f\xe6\x8f\x7e\xe4\x6d\x9e\xf5\xc9\x4f\xfb\x77\xe0\xc9\x9f\xf6\x5e\xdf\xfc\x7d\x3f\xf3\x95\x8f\xfd\xa2\xc7\x3d\xf2\x0d\xef\xa9\xde\xe9\xd9\xcf\xfa\xc7\xef\xf2\x0f\x1f\xf7\x67\xcf\x08\x7e\xdf\x47\xe2\x9f\x79\xd6\xc7\x7d\xd3\x0f\xbc\xe2\xb3\x7e\xeb\xe3\xfe\xfe\x93\xff\xe0\x5f\x7f\xd4\x87\xff\x87\xc7\xbf\xef\xd7\xf9\x97\xbe\xe9\xf3\x5f\xf0\xe7\x9f\xf9\x25\x9f\xf2\x82\x07\x42\xff\xe0\x59\xff\xfe\x8f\xdf\xeb\x75\x3f\xf8\x57\xd5\x3f\x78\xf5\xa7\x3c\xd2\x3f\xe4\xa9\x6f\xfe\xde\xdf\xf2\x4d\xf3\x79\x2f\xfa\xa8\xef\xfb\xed\x77\xf9\xcc\xb7\xfa\xa1\x7f\xf3\xa0\xd6\xe9\xd7\xff\x97\xbf\x11\x3e\xfc\x9b\x9e\x1e\xff\xf2\x3b\xfd\xad\x57\x3e\xff\x9d\xbf\xed\x7f\xfa\x88\xe7\x7f\xeb\x93\xbe\xf8\x43\xdf\xe3\xdb\xc4\x7f\x78\xfa\xbb\xff\xc5\xa7\x3c\xef\x9b\x1e\x08\xfd\x81\x5f\x7a\xd1\x27\x7c\xee\x9b\xfd\xee\xfb\xbe\xed\x78\xcf\xe7\x7c\xee\xf7\xfc\xf8\x9b\xbb\x17\xb6\x3f\x84\x2f\xf9\x86\xff\xf1\xcd\x3f\xf9\xc9\xdf\xf5\xfe\xcf\xfd\x6f\xbf\xf7\x40\xe8\x7f\x7a\xe4\x29\x4f\xfc\xee\xc7\x7f\xed\xf7\x7e\xd4\x2b\x5f\xf5\xe4\x47\xfe\xae\xff\xb4\xd7\xbc\xad\xfa\xfe\x8f\x7a\xd6\xf5\xd3\x4f\x7a\xc1\xff\xfa\xb8\xc7\x7c\xf9\xff\xf8\xaf\x1e\x08\x7d\xf6\xef\xc2\xfd\xab\x7f\xe7\xd9\x1f\xfe\xf8\xe7\x3c\xfe\xf9\x7f\xee\xf3\xff\xfe\x13\xbf\xec\x89\x3f\xff\xe3\x6f\xf3\x92\x1f\xff\xdd\xaf\xfe\xc2\x27\xbc\xf8\xdf\x7e\xc6\x07\x3d\xf8\xac\xbf\xf3\xec\x97\xff\xce\xaf\xfe\xca\x2b\x9f\xf6\xee\x4f\xfa\xc8\x8f\x68\xbf\xf7\x8b\xc8\xbd\xd3\x33\x7e\xf3\x85\x3f\xf4\x4d\xaf\x7a\xb9\x7e\xd3\xb7\xff\x0b\xdf\xf7\xed\x0f\xaa\xbd\x1e\xf9\xd5\x17\xfd\xf0\xbb\x7c\xfe\x77\xfc\x8d\xa7\xfe\xa3\xef\x79\xfe\xd3\x3e\xff\x2d\x9f\xfd\xd4\x2f\x78\xf1\xaf\x3e\xf6\x49\xf2\xcf\xff\x83\x4f\xfd\x9f\xdf\xdd\x7d\xd8\x8b\x3f\xf6\x4f\xc5\x56\x0f\x7b\xab\x77\xac\x58\xb3\x52\x51\x81\x71\x16\x6b\x7a\x71\xc3\x80\xc3\x67\x6b\x92\x1d\x56\x4a\xa2\x1a\x73\x2b\xa1\xc6\xbb\xf3\xa4\x67\x0c\x0f\xb7\xee\x12\xb9\x6a\x59\x7b\x76\x82\xea\x26\x9b\x68\xd2\x4c\x58\xe6\x54\x73\x49\xc0\xf4\x22\xc7\x2c\x7b\xf4\xdb\x94\x14\x73\xee\x12\x9d\xdb\x56\xee\xf2\x36\x14\x5b\xf7\xbb\xee\xd4\x1c\x61\x9e\xa7\xd3\xd6\x94\x11\x27\x3f\xae\xb3\x33\xb1\x5a\xcc\xba\xd0\xdd\x99\x64\x83\xc3\x57\xd7\x3a\xf2\xbb\x2e\x6b\xe8\x66\x36\x3c\xc7\x19\x8c\x89\x97\xda\x0e\x9c\x2b\xac\xb8\xfa\x11\xb1\x5a\x99\xa2\x61\x79\x96\x15\x07\x66\x17\xaa\xd1\xd2\x5a\xee\x52\xa3\x9c\xbd\x93\xda\xb5\xde\x10\x85\x63\x5b\x7b\xb4\x21\x13\x5d\x0b\x35\x5a\xe2\x56\x39\x66\x6a\x29\x8e\xcf\xda\x7d\x20\x52\xc2\xa3\xdc\xb5\xff\x80\x8b\xf2\x7a\xf6\x83\xc8\x1c\x7a\x6d\xa4\x9f\x9a\x42\x2b\x43\x1a\xc5\xa9\x82\xd6\xe9\x1b\x82\xc3\x6c\xc1\xc0\x49\x9b\x36\x0b\xdc\x95\x8b\xc2\x75\x6e\x83\x5b\x9a\x07\x87\x86\xb6\x0d\x94\x6b\xba\xbc\xbf\xe1\x2b\x01\x3e\xf2\xb8\x9f\xdb\xb4\xfe\x30\x9a\x6c\x34\xe8\xd5\x2b\xbf\x8b\x37\x6a\x12\x43\x62\xa4\x18\x44\xa9\x66\x4d\xaa\x8b\xb2\x9a\xf7\x52\x13\x38\x6b\x93\x22\x50\x7f\x26\x32\x2a\xd8\x46\xd5\xd0\xee\xbe\x3c\x7a\xe4\xf8\x30\x9c\xbe\x81\x78\x5b\x6a\xda\xc3\x97\x86\x93\x4a\x10\x0d\x2f\xe2\xf4\x61\x35\x9a\x31\x2a\x17\x76\x5b\x21\x78\x9b\xf9\xa2\xfa\x6a\x4a\xee\x7b\x27\xfe\x2e\xae\xbd\xa9\x4a\x9a\x27\x2c\x38\xdc\x95\x27\x4c\x9b\x69\xae\x76\xf8\x8a\x75\x87\x64\xf3\xae\xfb\x19\x84\xf3\x29\xa5\x81\x54\x77\x07\xbf\xab\xe3\xdc\xab\xa7\x20\xec\x90\x51\x1a\x8c\x9f\x8d\xa8\x29\x4f\xe1\x88\x3f\x18\xef\xab\x2e\xb2\x81\x32\xf5\x15\x85\x77\x81\x44\x8d\xf2\x6d\x67\x04\x09\xe1\xbb\x1f\x13\x06\x19\x82\x59\x61\x53\x8b\x91\x05\x2c\x2a\x94\xc4\x13\xe8\xc2\xc9\x26\xc2\x55\x5a\x40\x61\xd8\x29\x8a\xbf\x6d\xb7\x70\x19\x1e\xf6\x41\x01\xe8\xda\x95\xab\x9a\x3d\x6e\xb0\xc9\xe2\x4e\x48\x40\xc9\x4e\x0e\x30\x14\x37\xeb\x24\x98\xca\x53\x8a\xa5\xf3\x5d\x1d\x67\xac\x17\x37\xc9\x45\xa3\x94\xcc\x97\x66\x43\x87\xd9\x5a\x50\x79\x30\x3c\x4e\xc1\x12\xbf\x10\x2b\x7d\xae\x94\xae\x00\x0d\x1f\xe0\x36\x83\xbf\x2b\x1a\x81\x2f\x30\x92\x29\xc1\x0d\x06\x1b\xda\xb5\xdf\xa8\x85\xeb\x2a\xca\xd9\x93\xec\x0d\x76\x6a\x4a\xd8\x10\xd9\x1a\x59\xf6\x2e\xd9\x17\xf2\x60\x1f\x33\xce\x76\xc6\x82\xfc\x81\xc5\x76\xae\xeb\xd4\xaa\xd7\x4b\xb6\xc3\x11\x4d\x37\x38\x4f\xed\x9a\x2f\xc3\x2a\x5c\xc8\x03\x8a\xe0\x37\x82\xcf\xc3\x2a\xbf\x1b\xc0\x87\x34\xba\x35\x59\x8a\x52\xd7\x75\x70\x2e\xb9\x03\x3e\x5a\x21\xe8\x32\x0a\xa0\x80\xca\xa2\x21\x6b\xb3\xc9\xd3\x9a\x69\x1b\xbc\xf8\x5d\x23\xc7\xcb\xb9\x4c\xe0\xce\xc4\xe4\x26\xe1\x5d\x08\xbb\x15\x0b\xb6\xc1\x8e\x0c\x66\x98\x25\x99\x32\xf1\x24\x25\xc1\x38\xd0\xb2\x85\xdd\x46\x77\x65\x7a\x25\x55\xc5\xf0\x75\xba\x7d\xdb\x68\x1c\x9c\xad\x90\x57\x3a\x81\xdb\x18\x86\x10\xb9\x19\xb7\x03\xc6\xbd\x49\x76\x9e\x42\xd8\xbb\x9c\x34\xb1\xe9\xbd\x9d\x53\x56\x23\x61\xb9\x36\x89\xe8\x40\xb3\x5d\x79\xc1\x9a\x90\x0d\x88\x6c\x5b\x84\x1b\x89\x87\x15\x89\xf3\xc2\xf6\xf3\x2e\xba\x6b\x43\x5e\xc9\xac\xfa\x31\xd1\x04\xe4\x3a\x93\x4e\x24\x9e\xfd\xf0\x94\x40\x2c\x09\x10\x8c\x5d\xe5\x6c\xe5\xb0\xc4\x8a\x61\x44\xba\xeb\x9d\xd0\xb1\x78\x12\x32\x1c\x7c\x5d\x86\x56\xc2\x1d\xc2\xcd\xb9\x81\x3c\xdf\x38\xde\x50\x89\x34\x30\x42\x26\x72\xb8\xb1\x90\x0e\x52\xc5\x5d\xe0\xa3\x96\x32\xb9\x55\x51\x44\x3f\x15\x27\x8e\x2a\xb9\x87\x23\x9f\xa3\x97\x6e\x02\xbf\x86\xda\x76\x02\xa6\xc1\x7a\xe0\xeb\x60\x4d\xdc\x55\xab\x53\x5f\x88\x59\x87\x19\x88\x08\x85\xa5\x4e\xab\x11\xe0\xb3\xea\xca\xfa\x86\xb4\xee\x82\x47\xbf\x8e\x66\x09\x52\xe2\x60\xf1\x54\x0f\xe8\xb5\xdf\x08\x3e\x0f\xeb\x25\x6f\x00\x1f\xb5\xd7\x5d\xcd\x8e\x45\x3c\xf4\xd6\xcb\x86\xd1\xc5\x2c\x3a\x4b\xee\x3d\x93\xb0\x9f\x90\xa1\x05\x4f\x7e\x40\x82\x48\xb0\x91\xfa\xdb\xae\x56\xe9\x69\x69\xa2\x18\x39\x69\x63\x98\x78\x86\x4c\xf8\x7e\x6e\x4e\xc4\xcd\x68\xef\xa3\x3e\xf0\xee\x2e\xb4\x5f\x6a\xc9\x3e\xa2\x8a\xb7\x39\x4d\x68\x17\x39\x15\x2a\xb0\xbe\x89\x49\x04\xda\x03\x4f\x6e\x58\x31\xf0\xc5\x46\xe2\xc8\x8a\xab\x93\x22\xad\x29\xd3\x7b\xd8\xd1\x7d\xac\x7f\x96\x7e\x23\x0d\x11\x58\xa6\x4c\xc9\xa8\x50\xb7\x73\x91\x76\x7a\x42\xd1\x55\x34\x54\x67\x5f\x3e\x23\x13\xd5\xe6\xb6\x6d\x0f\x1d\xde\xb5\x6f\x79\xd2\xe6\x87\xa2\xc4\x67\x31\xe0\xea\xe5\xf4\xda\xb2\xb2\x27\xb6\xc8\xc8\x07\x4f\xe4\xa0\x13\xd3\x93\xa3\x15\x08\x9a\x15\x55\x70\xdb\xb5\x11\x3d\x7a\x48\x73\xce\x89\x14\xde\xdb\x24\x7b\xbe\x1a\x73\xa7\xac\x09\xeb\x63\xa3\x35\x42\x75\xa8\x73\xc8\x13\x1e\x8b\x18\x88\x6e\xab\x37\xae\xb5\xe1\x16\x05\xb9\xd8\xae\xa6\x0a\x94\x1d\x0c\x1f\x71\x37\xa0\xe1\x33\x1b\xbb\xca\xde\x89\x73\x8c\xee\x5c\x1c\x66\xc3\xa6\xae\xbb\xf6\x2d\x0b\x3f\xc8\xb1\xd2\xe0\x3b\xef\x68\x2d\x8e\xb5\x25\x74\x9e\xd0\x08\x41\x83\x46\xe9\x84\xd7\x9e\x71\x37\x13\x84\x18\x43\xc3\xd4\x96\x47\x81\xcf\xc3\xd8\xa9\x3b\xdc\xcc\xc7\xc6\x13\xd2\xed\xc2\x8a\xf3\x93\x32\x7d\xe0\xab\x20\xd9\x4d\x1b\x02\x55\x0c\x06\x84\x5e\x1d\xbe\x4c\x47\x93\x83\x01\x67\x78\x17\xd3\x82\xa9\xce\x16\x89\x40\x75\x9a\x99\x6c\x14\x58\xce\xaf\x2e\xa7\xf4\x95\x6e\x7e\x50\x6c\x6c\x67\x79\xdf\xb0\x36\xd0\x1f\xfe\xd8\xf8\x5d\x4a\x4f\xb8\xad\xa2\xdd\x29\xa1\x65\xf6\xc0\x06\xa9\xbe\x86\xd5\x0a\xf4\x8a\xaf\xe2\x9d\x25\xc9\x1e\xc2\x0a\x9d\x3b\x80\xa6\xcb\x52\xfc\x5d\x7a\x07\xd6\x0b\xdd\x66\x9c\x45\x21\xeb\x29\x31\xda\xe6\x60\x01\xd8\xd7\x41\x65\x4f\x17\x9f\x0a\x03\xc1\x62\x42\xd0\xd3\x13\x43\x38\xd9\x5d\x35\x58\x04\xa7\x69\x7d\xce\x46\xe3\xb2\x17\xec\x7c\xdb\x31\x5a\xca\xb9\xd5\x8e\xb5\x81\x62\xe0\x7e\xb5\x72\xc0\xba\x14\xed\x45\x51\x76\x9b\x9b\xb9\x32\xe6\x88\x87\x8d\xc4\xef\x6a\xe2\x86\x2f\x58\xcc\xa6\x25\x23\x71\x7a\x10\x0f\x44\x43\xa7\xb9\xc2\x33\x87\xd5\x59\x83\xea\x2a\x77\x01\xb2\x29\xf6\x50\x59\x01\x83\x02\xd9\x36\xcf\x15\x00\x2a\xc4\xb8\x89\x31\x0d\x96\xa6\x13\xaa\x0c\x5a\x20\xc8\x5e\x45\x01\x31\xa2\xbb\x0e\x6d\xb3\xa5\x09\x03\x73\x2f\x93\x62\x1c\xb1\xde\x03\x75\xe6\x62\x29\x9e\x05\xa2\xcb\x1a\x91\x93\xab\x65\x3b\x3a\x65\xf5\x30\x30\xe5\xb3\x8c\x47\x81\xcf\xc3\xf8\xee\x1b\x2a\x9f\xb0\xc9\x89\x02\x22\x64\x23\xd6\x87\xbd\xc3\x8c\x8d\x34\x09\x32\x48\xa9\xcc\x22\x1c\xe6\x70\xa9\x52\xc5\xc6\x91\x74\xcf\x98\xd6\xbb\x2c\x5d\xbc\xf0\x63\x7a\xe0\x7d\x66\x58\x8f\xd4\xa2\x2a\xcc\xba\xad\x9a\x9d\x6c\x06\xdb\x6d\x5a\x7e\x6a\xa1\x73\xb1\x87\x14\xa9\x84\x68\x6e\xf3\x09\xda\x06\x80\x88\x8f\xab\x9b\xbc\xca\x5e\x63\x9a\xba\x57\xdc\x5c\x62\x17\xd0\x86\x61\xca\x5d\x19\x18\xa5\x59\xb7\x6a\x9b\x72\x77\xd1\xbc\x2c\xe2\x51\x91\x91\xb4\xb3\xb9\x36\x5f\x51\x04\xc5\xce\x8b\x00\x6b\x99\x92\x11\x86\x5e\x9a\x31\x79\xc4\xde\x7b\x91\x7c\x56\x03\xee\xfa\x75\xd2\x69\x75\xd8\x77\x18\x77\x04\x32\xa8\x75\x4d\xc6\x10\xe5\x9c\xed\xb2\xce\xc0\xca\x0e\xa8\x33\x0d\xc4\x26\xac\xee\x2a\x88\x8d\xdd\x65\x73\x53\x5b\xdb\x56\xaa\xb4\x00\x78\x81\x51\x5c\x25\xa1\x28\x26\x23\xc0\x8c\x41\x22\xf8\xbe\xef\x5a\x7b\x5d\xe8\x05\xcd\x95\xa6\xcc\x77\xf9\xaa\xb3\x68\x90\x03\x61\xe3\x40\x92\xae\x36\x6f\xac\x01\x6a\x54\xd9\xeb\x86\x2b\x2a\x96\x40\xd6\xe3\x64\x7e\x63\xe9\x8a\xc9\x08\xad\xc5\x5d\x89\xdb\x89\x63\x96\x0c\x42\x82\xd9\x5d\xae\x27\x66\x0e\xcd\x1a\xf2\x80\x8a\x56\xaa\x6a\xf1\x0c\xa7\xcb\x1c\x28\x25\x14\x23\x17\xea\xf4\xd1\x32\xf3\x87\x4d\xd0\x6e\xa8\x7c\x2e\xd3\x7d\x53\x07\xc5\x0a\xe9\xed\x5a\x14\x48\xae\x29\x96\x3a\xd7\xe8\x21\x48\x8e\xcd\x63\x5b\x7a\x33\x7d\xec\x1d\x5d\x0d\x9c\xf5\xae\x2c\x6f\xae\x16\xd7\xe4\xae\xee\x28\x76\x79\x46\xc5\x3c\x5f\xc0\xc5\x7c\xd8\x20\x39\x15\xe5\x9c\x44\xf4\x56\x4e\xc7\xd4\x6c\x74\xe8\x7c\xd7\xdc\x0d\xd9\x3f\x11\x5e\x10\x71\x90\x1a\x5a\x17\x52\x93\xa0\xf6\x68\x54\x8f\x59\x8b\x62\x13\xe7\x0b\x33\x89\xe1\xe6\xc4\x7e\x0e\x0f\xe7\x5d\x3b\x2e\x08\x21\x8b\x08\x00\xfa\x34\xd1\x84\x2b\xda\xe6\xfc\x68\xd7\x3e\x32\x3a\x36\x34\x4f\x7f\x84\xb3\x04\xa6\xf6\x80\x1a\xc9\x09\x78\x7a\xd7\xfe\x28\x47\x87\x8a\xa0\x68\x3b\x16\x3d\x04\x29\x1a\x9e\x6e\x71\x72\x5d\x61\x98\x65\x6d\xa1\x14\x1c\xa7\x68\x9c\x9e\x19\xc7\x83\xa7\xee\xee\x32\x39\xe8\xfb\x45\xf9\x38\x41\x0e\x3a\xe6\xe1\x97\x92\xbc\xd5\x2d\xd9\x06\xf3\x50\x25\x6e\x9c\x4b\x7b\xe5\x74\x86\xad\x8c\x0d\xec\x35\xdd\xb6\x18\xb1\xd1\xb0\xeb\x5c\x6d\x87\x14\x87\xda\x20\xde\x63\x1a\xac\x44\xd2\x1d\xee\xda\x5b\x3a\xf3\xa9\x65\x30\x7b\x53\x3b\xd3\x66\xb3\xe5\x2e\xcd\xe9\x9c\x8c\xd6\x9d\x37\x37\x70\x20\x60\xce\x01\x4c\x81\x9a\x19\x79\xb5\x38\xda\x72\x55\x2a\xba\x2d\x81\x36\x77\x0d\xd4\x66\xd2\xff\x0f\xb6\x7a\x0f\x9b\xc9\xdf\x51\xf9\xe4\x20\x44\x84\xe7\x1b\x5a\xe3\x14\x6c\x48\xf6\x04\x30\xa9\x60\x98\xa0\x85\xd8\xc0\x73\x3c\x9a\xb8\x76\x45\xcc\xe2\x3c\x16\xce\xef\x7a\x81\x76\x8f\x92\x50\x4b\xdd\xee\x39\xcd\x06\x44\x75\x21\x44\x57\xc1\x00\x5c\x66\xa3\x35\xe1\x3d\xe1\xde\x47\xb7\x1a\x49\x70\x39\x71\x97\x93\x26\x35\xc5\xe8\x9d\x0e\x07\x46\x5f\x42\x71\x1e\x3a\x1e\x7a\xc1\x05\xce\x73\xef\xd2\xa0\x6d\xfa\x3d\x81\xd8\x65\x8e\x03\x2c\x33\xe8\x79\xd7\xa8\xbd\x72\xdb\x0e\x62\x59\x8b\xc6\xa1\x46\xae\xac\x34\xd5\x8e\xbb\x3a\xf7\x90\xa8\xe3\x59\x3b\xe3\x5d\xe6\x29\x4d\x8b\x72\x62\xe1\xbc\xeb\xbc\x04\xc7\x3b\x68\x9c\x5e\x54\x90\x0a\x10\xd9\x7c\xa3\x19\xe4\x25\x8a\xc7\xcb\x0f\x4a\x41\x38\xec\x3e\x4e\x59\xab\x52\x75\x6c\x01\xdc\x76\x5b\x9f\x45\xb9\xed\x19\x46\xbf\x68\xdc\x43\xd9\x71\x52\x3b\xc0\x23\x14\xbd\x98\x9e\xda\x5f\xa9\x3a\x5c\x84\x23\x23\xd2\x61\x82\xab\xf6\xae\x09\xa0\x5f\xc7\x9e\x38\x40\xa3\xe3\xdd\x5a\x14\x32\x98\xa0\xf3\x00\x7b\xa3\x7a\x4f\x57\xe5\xcd\xcf\x8c\xf7\x6d\x86\x78\x3a\x9c\x93\x3e\xef\x02\xe4\x6c\x12\x07\x21\x5c\x7d\xea\x05\x2b\x25\xb8\x06\x78\x5d\x41\x37\x0a\x65\x0a\x17\x2a\x87\xc0\x9d\x95\x02\x68\x4e\x69\x8f\x94\x9e\xfa\x51\x62\xab\xa7\x7d\xec\x7b\xe2\xff\xf6\x71\x3f\xfc\x73\x4f\xff\x6b\x1f\x73\x7e\xc5\x57\x85\x5f\xfa\xf6\xf7\xff\xc9\x0f\x7c\xfe\x13\x3e\x73\x7e\xfa\x5f\xfa\xaa\x0f\x7e\xed\xf3\x9e\xf7\x09\x7f\x46\x6c\xf5\xcd\x4f\x79\xcd\x97\x7e\xef\xff\xfe\x2b\xdf\xf9\x76\xef\xf4\x8f\xff\xc5\x13\x5e\xff\xac\x7f\xff\xf6\xbf\xf0\x0b\xe7\xb7\x3d\xf5\xff\x3e\x7f\xe6\x9f\xbc\xf7\x5b\x63\xfd\x5b\x1f\xfa\x40\xe8\xf5\xbb\x4f\x7a\xf3\xef\x0f\xcf\xfa\xb5\x9f\xfa\x8e\xb7\x7a\xd7\x7f\xf3\x7e\xaf\x7b\xc2\x7b\x7f\xe0\x3f\x3e\xde\xe9\xd3\xfe\xca\xcf\x3d\xb2\xbd\xdf\x8b\x5e\xf9\xd7\x7f\xf7\x89\x0f\x84\xbe\xc3\xe3\xfe\x9e\x26\xe8\xe9\xff\xfd\xe3\xbf\xeb\x2d\xde\xef\x7c\xd2\x23\x3f\xf6\x9b\xff\xf1\xd5\xdf\xf9\x69\x3f\xb4\x5e\xef\x9f\xf0\xd2\x5f\xfd\x2b\xff\x7c\xfe\xca\x83\x76\x55\x9f\x7e\xbc\xec\xcb\x7f\xe7\xe5\x4f\xad\xff\xf5\x8f\x7f\xf8\xf5\x4f\xfb\xad\xaf\xfa\x30\x16\x7e\xe0\xbb\xdf\xeb\x55\xaf\x7c\x9f\xc7\x7d\xcb\x3f\xf8\xac\xe7\x3f\xf2\xb2\x07\x42\xf5\x37\x7f\xff\xbf\x7d\xab\x17\xfe\x66\x7d\xe7\x57\xbe\xe3\x5f\xfa\xd1\x17\xff\xf9\x3f\xf8\xd7\xfd\xf7\xdd\x07\xd4\x1f\xfa\xe8\x77\xfe\xd6\x77\xfa\xa2\xaf\x19\x9f\xfc\xdb\x0f\x84\x7e\xd1\xaf\x7f\xcd\x17\xff\xf5\x7f\xfa\x21\xef\xf5\xfa\xef\x78\xb7\xdf\x7b\xd7\xdf\x79\xfa\x87\xbc\xea\x71\x5f\xf2\x3f\x7d\xcd\xf8\xba\xd7\x3f\xf2\x82\x97\x3f\xe6\x1b\x3f\xef\xbb\x3f\xfb\x81\xd0\x0f\x7b\xd9\xa7\x7d\xbc\xfe\xe1\x27\xff\xb9\x8f\xf5\x3f\xff\x0b\xec\x55\x7f\xac\xd5\x67\x7d\xde\x17\xfc\xfc\x37\xff\x55\xf4\x9d\xbf\xff\x17\xbf\xad\xff\x8b\xe7\xfe\xec\x03\xa1\x5f\xff\x17\xfe\xce\x8b\xde\xf4\xd5\x9f\xf8\x71\xdf\x2b\xbf\xf3\xdb\xfe\xeb\x67\x82\xb7\xfc\x91\xdf\xf8\xd5\xf7\xf9\xc1\xbf\xf3\x01\x7f\xf9\xf9\xaf\x7e\xd7\xe7\x7c\xc6\xa7\xbe\xe9\xd7\xff\xa9\xd8\xea\x61\x6f\xf5\x0e\x7f\x87\x4c\x92\xd0\xa6\xa0\x88\x61\xe3\xf5\x20\xda\xb4\xc1\x6b\x26\x8e\xc1\x13\xc5\xce\x77\x2a\x2e\x19\x19\xf2\xc2\x50\x23\x39\x63\x77\xcd\xb1\x71\x92\x75\xc3\x9b\x58\xa3\x47\x0e\x89\xb9\xe6\x79\xe8\xb9\xf9\x91\x39\xcc\x58\x5d\x75\x1f\x6e\xa4\x68\x00\xee\x9c\x4d\xaa\xe5\x5d\x73\x6c\x9a\x57\xf4\x06\x5d\x04\x22\xa8\xf2\x09\x11\xaa\xc7\x6e\xd9\xb2\xfb\x51\x75\x53\x79\x07\x95\xfb\x5a\xd4\x95\x44\x24\x6c\xed\x11\x89\xdb\x4a\xf2\xa3\xe5\xa5\x8f\x64\x73\xe2\x40\x17\xd0\xa0\xe0\x50\x49\x35\x79\xd7\x18\x9e\x24\x2e\xb0\x29\x87\x71\xa5\xda\x5c\x18\x1b\x74\xdb\xd5\x2a\x7a\xa4\x4c\xaf\x5a\xd3\xe1\x5d\xd8\xd3\x51\x34\x2e\x00\x5c\x17\x99\x85\x4a\xe6\xb2\x4f\x98\xee\xbc\x8d\x21\xbc\x2b\x20\x9d\xe1\xb6\x41\x5f\x8f\x1e\xce\x6b\x94\x40\x03\x4b\x1c\x6d\x15\x65\x26\xae\x86\x7c\x72\xe5\xec\x96\xb3\xc4\x7c\x9d\x87\xd1\x33\xb6\x79\x2a\x2b\xcf\xbb\xae\x58\x47\xd8\xf5\x29\xae\x26\x98\xae\x7e\xd5\x13\x88\xae\x48\x15\xdd\x80\x25\x32\xaf\x52\x47\x2c\x2d\xee\xf4\x62\xb8\x9b\x8b\x05\xc5\xef\xb2\xd9\xcf\xe7\x75\x5e\xea\x1a\x1b\x03\x78\x86\x10\xf4\x92\xbe\xa7\x5c\x08\x00\x3c\x4a\x61\x01\x12\x67\x67\x28\x6a\x2f\xd0\xd1\x76\x89\xd8\xf5\xa8\xf2\xf3\x61\x38\x7d\x47\xf9\x49\xf0\xbc\xc6\x31\x42\x29\x27\x0a\x1a\x04\xcb\x9b\x3d\xdc\xbc\x78\xd9\xb7\xf3\xbc\x64\x76\xd3\x09\xe1\xd3\x24\x7c\xe5\x58\x4f\x73\xd7\x78\xcd\x8a\x5c\x86\x43\xdc\x19\x79\xcc\xab\x00\x1c\x98\xf8\xff\xd1\xf6\xe7\xc1\xff\x3d\x57\x59\x20\x0e\x54\xfd\x30\x20\x31\x80\x22\x18\xc3\x16\x59\x04\x64\xbb\xbd\x5c\x05\xb1\x04\x84\x80\x86\x28\x9b\x2c\xc1\x84\xde\x6f\xef\xfb\xed\xdb\x1d\xc5\x40\x14\xcd\xcf\x00\x06\x09\x8b\x26\x48\xa0\x90\x90\xb1\x30\x46\xc4\x2c\x22\x81\x31\x44\x90\x65\x26\xd1\x21\x61\x91\x5d\x24\x20\x10\x44\x40\x16\x9d\xfa\x6a\xc1\x7c\x8a\xcf\x54\x7d\xfe\x99\xfb\xff\xa9\x77\xbd\xab\x5f\x7d\x4f\x9f\xf3\x9c\xe7\x3c\x0f\x53\xf8\x98\x72\xd7\x97\xaa\xe6\x24\x6d\x02\x4e\x02\x95\x38\x89\x5d\x75\x7c\x97\x87\x29\x1d\x07\xb8\x7c\x63\x79\x99\xd2\x50\x9e\x9b\x2d\x45\x25\xbd\xa1\xe4\xf7\x76\x1e\x7a\x1e\xb8\x47\xda\x7d\x6b\x0d\x6f\xdb\x69\x8f\xf3\xae\x75\x62\x22\xe0\x06\x88\x60\x5e\xef\x4d\x0c\xdd\x52\xdf\xae\xd8\x92\xbe\x38\x25\xd7\xaa\x86\x6f\xaa\x03\xc2\xa0\x29\x03\xd4\x02\x97\xad\xe6\x36\x67\x0d\x37\xe4\x81\x30\x19\x35\x61\xd8\x89\x57\x04\x1e\x6a\xdb\x40\x2c\x99\x02\xe6\xad\x0b\x86\x8a\x21\x69\xa3\x26\xb2\xd3\xd4\x7e\x5b\xf9\x89\x74\x12\x9b\xee\xfb\xd9\xdc\x16\x37\xa3\xe3\x2e\xdd\x85\xa0\x35\xfb\xb5\x4e\x7d\x10\x2c\xd1\x92\x80\x1c\xe7\x3c\x85\x2a\x51\x19\x70\x5b\x1a\x9c\x16\xd1\x43\x8d\x08\x97\x93\xe0\xc0\x63\xa5\x89\x56\x98\x0a\x21\xb9\xd4\xde\x8e\x8a\x52\xbe\x2a\x50\x62\x3f\xa3\x03\xab\xb0\xbb\x24\x29\xad\x2c\x9b\x1f\x7d\xac\xa2\xa8\xea\x31\x8e\xcd\x0e\xbf\x2c\x99\x6e\x2f\x50\xd6\x43\x46\x5f\x46\x98\xb5\x48\xac\x0e\x07\x62\x67\x0f\x3b\x79\x3d\xaa\xf2\xbb\xa1\xf2\x89\x7e\x23\xd6\x30\x3c\x44\x72\x16\x87\x69\xf4\x81\x21\xd6\x7c\x5e\xc5\xf8\x76\xad\xba\xe6\x86\x9a\x85\x63\x3f\x76\xc1\xe6\x35\xe8\x6d\x5a\x06\x71\xcc\x7d\xe1\x35\x22\xe0\xdb\x96\xc0\x06\xba\x11\x19\xa6\xd3\x63\x7d\x5c\x57\x6d\x0d\x79\x94\x3b\x5b\x27\x1e\x12\x08\x25\xd9\x5d\xb8\xb2\xc8\xae\x4d\xc1\x77\x42\xd4\x36\x06\x58\xa3\x5f\x41\xc8\xdd\x67\x3f\x9d\xa0\x17\x8d\x67\x8c\x65\xd3\xb0\xa6\x7e\x79\xe4\x20\x9b\x77\xad\xb2\x74\x6a\xe6\xd9\x65\x60\xbb\x3d\xe9\xee\x5c\xb6\x84\x05\x75\xd5\x31\x70\x31\x16\xd9\x03\xa2\x04\xb5\x74\x7b\xde\xa7\xe0\x0b\xfb\x79\xd7\xe6\xa7\x5a\x96\x1a\xc0\xa0\xb1\x53\xf2\x0b\xd0\x20\x05\x94\x63\xf7\x6d\x2c\x9f\xa1\x62\xae\x48\x5b\x31\x59\x1e\x8a\x41\x9c\x80\xe6\x36\x09\xb9\x98\x1c\xf3\x53\xce\x2e\xf6\xcb\x13\x8e\xa8\x3b\x63\x80\x65\x26\x94\x90\x01\x3e\x5f\x5a\x8c\x4d\x0b\x77\x31\x4d\xf1\x36\x50\xbe\x4b\x55\x81\xd8\xc6\xfa\xae\xaf\x7c\x4c\x9c\xc7\x41\xce\x78\x32\x03\xb2\x8a\x7c\xeb\xa2\x42\x95\x00\x39\xfa\x46\x96\xe4\x27\x71\x8b\xf4\x52\xf4\x5d\xbe\xae\x67\x39\x77\x72\xa0\xb0\x55\x61\x44\xe1\x14\xad\x08\xf9\xf4\x40\xd8\x69\xbb\xe4\x99\x97\x50\x4b\x88\x57\xbd\xf0\xea\x8a\x73\xef\x1e\xde\x72\x7c\x54\x2f\x79\x43\xf2\xa1\xc1\xed\x8e\x1f\xfb\x69\x0f\x06\x61\xf6\x33\x84\xd6\x64\x6e\xb8\xd8\x8d\xc6\x51\xb6\xec\x79\xf4\xeb\xe0\x65\xe2\xcb\x0c\x83\xd9\x5d\xf2\x25\x3d\x99\xd5\x46\x93\x71\x5f\x31\x89\xbc\xf3\x35\xe6\x80\x48\x19\x4c\x7a\x0e\x67\x87\x6e\x34\x05\xfb\x36\xe1\x85\xd3\xa6\x5b\x66\x77\xb5\x18\x33\x0c\x5e\x58\xcd\xc1\xe6\x43\x95\x4b\xd8\x2a\x5a\x3a\x22\xf4\xe9\x58\xa7\x52\xea\xb4\x18\xfa\xb8\xcb\x93\xc0\x66\x2f\x75\x5d\xfa\xae\x17\x2d\x77\x0b\x6c\x42\x44\xcd\xd5\x45\x0d\x92\x90\xda\x12\x03\x06\xcf\x9d\x64\xed\x1a\xd5\xf6\xb0\x5c\x15\x26\x07\x36\x9b\x3e\x77\x73\xd7\xe6\x67\x3b\xb5\xbe\x18\xa9\xba\xc2\x08\x3d\x46\xd4\x46\x23\x96\xdb\x18\xc5\x3c\xeb\x95\x58\xdb\x68\xdd\x92\x47\xdd\xdb\x92\x29\xe1\xf7\x6d\x96\x54\xb3\x43\xef\xcd\x76\x09\xd0\xc4\xcc\x25\x47\x71\xe0\x60\x2a\xb1\xb5\xe3\xf3\xc4\x19\x98\x09\xa1\x0d\x3a\xb5\x98\x58\x26\xb7\xb9\x8d\x54\xa9\x1b\xf0\x7e\x97\xc7\xb8\x2e\x87\x7d\x8d\x14\x5c\x9e\xef\x87\xd3\x6b\x1d\x38\xcc\x18\x67\x3c\xed\xb5\xd3\x90\xf7\xe8\x47\xba\x4b\x52\x9e\xec\x8b\x86\xe5\xb4\x5b\xc4\x40\x7c\x55\xc2\x4e\x35\xd4\x7e\x80\x04\x56\x10\x45\x5e\xdb\x95\x1c\x2a\x7d\x66\xef\xd6\x3c\x19\x41\xff\x2f\x95\xcf\xa3\xd0\xa9\x1b\xda\x2e\xa7\x0e\x20\x28\x50\xba\xd6\x2d\x8d\xce\x96\xd9\xcf\xec\x41\x5a\x9c\x32\x68\x95\x9f\xca\x81\xc4\x27\xb9\xea\x6e\x0a\x41\xcc\x91\xbb\x5e\xf9\x73\x4b\xac\xca\xad\x1b\x01\x26\xcd\xd2\x34\x25\xce\xcc\x3c\xb8\xe6\xbe\x4a\x5a\x12\x1f\x02\xa3\x1d\xd3\x0b\xef\x92\x7a\x0f\xc6\x5d\x0a\x02\x54\x66\xaa\xcf\xae\xc2\x25\xfc\x21\x02\x8f\x12\xaf\x8b\xa9\xc0\x36\x74\x0d\x13\x92\x9f\x97\xc3\x11\x25\x29\x17\x22\x85\x54\x72\x99\xbb\x44\x43\xae\xae\x78\x91\xc7\xd1\x5c\x73\xb9\xf4\xe6\x13\x2d\x56\x9d\x24\xc0\xa9\x4f\x7c\xd4\x1d\x9b\x0b\xc0\x8d\x41\x40\xe3\xb6\xa3\xe3\xaa\x77\xad\x58\xef\x02\xd6\xb4\xa3\xed\xf2\x9c\xe4\x92\x01\x11\x05\xc4\x48\xb7\xba\x90\x80\x13\xe4\x42\xdd\x85\x1e\x6b\x8b\xe5\xd1\x87\x74\xba\xde\xc6\x32\xa8\x0a\x94\x4b\x4f\x74\x11\xd4\x74\x0d\x63\x08\x89\x19\x25\xa2\x55\x54\x94\x64\xf2\x44\x85\xca\x22\x82\x13\x8c\x49\xdf\x05\xda\xee\x3a\x93\x76\xee\x54\x90\xcb\x32\xc6\xb1\x81\xbb\x77\x78\xce\x19\x67\xbc\xa0\xf1\xea\x18\x27\x46\x62\x3a\x67\x7d\x70\x11\x81\x05\xe3\xbc\x8d\x17\x93\x13\x6a\xa5\x15\x9d\x88\x7f\x2c\x01\x06\xaa\xad\xb1\x51\xf4\xeb\x44\x86\x6b\x40\x3b\x25\x46\x46\xee\xfd\x16\x8a\x40\x2b\xa2\x07\x44\x0f\x7f\x27\xf9\x3c\x0a\xef\xbe\xa1\xf2\x71\x40\x4d\x2f\xcb\x75\x52\x7c\x5d\x7d\x5d\x38\xad\xba\x6d\xb8\xb9\x92\xe6\xe0\xd8\x6f\xbb\x67\xe2\xa4\xcb\x0d\x72\x32\x30\x4b\x2d\xb7\x19\xe3\xe6\xda\xa2\x53\x30\xcb\x0d\x37\x59\x75\x5e\x81\x4d\x64\x82\x32\x86\x21\xcb\xd6\x12\xd4\x28\x6a\x90\x31\xc9\xcf\xd6\x37\xe0\x6e\x22\x16\x51\x90\x59\x70\x7e\x47\x5b\xdd\xed\x3e\xbb\xf2\xa5\x26\xe1\xa3\x3c\x7c\x38\xaa\xda\xf5\x86\xb5\xad\xe5\x9c\x00\x91\xb2\xf1\x15\xaf\x72\x9b\xa6\xe7\xa9\xc0\xa1\x76\xdc\x20\xae\x17\x06\x14\xdb\x5d\xdb\x6e\xa5\x6a\x59\xc9\xc3\x6c\xc8\x28\x59\x76\xd4\x71\xca\x71\xc4\x0e\x8e\xdb\x14\xde\x0b\xaf\xa6\x9b\x94\x41\xd9\x17\x94\x61\x20\x0f\x78\xed\x59\x80\xc5\xd2\xd8\x89\x33\x18\x64\xa2\x4d\x04\x7a\x41\x35\xc0\x49\xd7\x5d\xeb\x08\x85\xf8\xd0\x2f\xd2\xf6\xa3\x06\xb4\x05\xc7\x10\xaf\xc4\xb7\x83\xa8\x49\xf7\x63\xd0\x01\xc2\x2e\x7d\x74\xdd\x6d\xa1\x51\x37\xc1\x5d\x9e\x62\x44\xfb\xb1\x67\x87\x95\x6b\xd4\x47\x81\xb6\x8a\xa6\xb3\xff\xd3\xd0\xd5\x6f\x09\xa4\xb3\xce\xe1\xe2\x5a\x7a\xf9\x23\xda\x39\xce\x7e\x97\xe6\x05\xa1\x92\x20\x0f\xa1\xdd\x7a\x19\xad\xb4\x4d\x1a\x83\x4f\x74\xe4\x71\xd6\xbe\xc5\xa5\x46\x0f\x95\x20\x14\xaa\xe4\x54\x65\x7c\xe0\xf9\xf0\x82\xdd\xa3\x26\x68\x77\x4c\xbb\xe2\x79\x0c\x9f\x5c\x31\x62\x60\x01\x5b\xda\x61\x19\xec\xcc\x92\xd2\x85\xf2\x79\x1e\xbd\x9c\xcc\x9e\x60\x27\x60\x2b\x49\xf9\x74\x9b\x17\x76\x55\x62\xaa\x7d\x14\xb7\xc6\x99\xb4\x9b\x76\x43\x23\x61\xc8\x3d\x15\x87\x45\xdd\xf2\x25\xa0\x98\x66\xc8\x9a\xf2\xe6\x03\x3e\x6f\xd3\xd8\x0a\x55\x6f\x35\x94\x51\xab\x58\x5e\xd4\xb3\xc0\x21\x9d\xe3\xdd\x6e\x7b\xc5\x06\xa7\x45\x88\xc7\x1d\x1d\xa1\x3c\x76\x48\x05\xd2\xdb\x36\x59\x27\xf0\xb4\x60\x5d\x3d\x95\x90\x9f\xb0\xb8\xb1\x49\x59\xe2\xe5\x04\xa3\x7c\xac\xb4\x9d\x70\x8d\xc2\xb9\x35\x47\x81\x43\x41\x31\x6f\x3a\x13\xb2\xf3\x96\xaa\x01\x34\xd0\xed\xe4\x09\xa5\x19\x1b\xe4\xae\x45\x1f\x32\xaf\xd8\x74\xa3\xbc\xb0\x22\x6e\x61\x47\x20\xce\x09\x6f\xf3\x71\x21\x24\x2c\x3c\xa4\x56\x6b\xf1\x30\xa2\x3b\xce\x2d\xb2\x40\x06\x5c\xdb\x8e\x5b\x51\x24\x69\x82\x8d\x63\xba\xea\x2a\xae\x8a\x3a\x2b\x77\xb5\xe7\x02\xf1\x75\x78\xee\x37\xdc\x95\x9d\x7b\xc6\x56\x61\x53\x99\x9a\x1e\x37\x4e\x73\x2f\x09\x6c\x59\xe9\xae\xae\xba\x5c\x27\x82\xb1\xbb\x44\x0f\xf5\xe8\x97\x2b\x70\x39\xc0\x44\x44\x05\x9f\xb2\xdb\x33\x4f\xd6\xb4\x3e\x44\xaa\x0e\x89\x71\x9d\xba\x6e\x41\x1f\x55\x6d\x1b\xed\xf5\x61\xcc\xe7\x51\x33\xf9\x1b\xda\xae\x89\x26\x18\x00\xe2\x54\x97\xa3\x1c\xb6\x0e\x8d\xc0\x04\x54\x26\x28\x66\x7a\x8d\x18\x69\x77\xdb\xd9\xb8\xe2\x5b\x3e\x74\x32\xee\x2e\x89\xfc\x40\x69\xa7\x16\x9c\x46\x9d\xdb\x62\x39\x2f\x2d\xe5\x2c\x1b\x1d\xa8\x1d\xf2\x74\x98\x4a\x49\xa3\x00\x17\x6e\x7b\x3e\x21\x8c\xdb\x5d\x06\xca\x54\xd1\xa6\x7c\xbf\xb8\x93\xdc\x9c\x44\x4d\xbb\xa7\xcd\x75\x51\x88\xda\x37\x23\xce\x05\x06\x86\x3c\xf9\x2b\x00\x7a\x20\xd8\xb4\xae\x77\x91\xad\x56\x5f\xad\x0c\x28\x26\x42\x81\xea\xb5\xd6\x01\x04\xde\xe4\x15\xa3\x48\x87\xcc\xfd\x70\x88\x2a\x71\xd6\x41\x0e\x99\x62\x4b\xee\x2e\xf3\x3e\x62\x59\x0f\xa7\x84\x9b\x8b\x01\x84\x95\x12\x6b\xba\xf9\xfd\xf2\x26\x56\xa9\x38\x59\x11\x6b\x22\x2a\x8a\x9c\xea\xd9\xa1\xab\xe7\x6d\x44\x88\x8b\x74\x83\x71\xd5\x3e\x62\xec\xaf\xa8\x08\x45\x28\x9d\x17\xed\xad\x77\x04\xdd\xe4\x6e\xee\xe7\xe4\x81\xae\xd4\x17\xbc\x6a\xb8\x8d\x73\x1a\xb6\x83\xd1\x82\xa0\xaf\xe7\x86\xc6\x8e\xc3\xe5\xd1\x79\x6e\xcd\x25\x7b\x9c\x4b\xa8\x35\xb6\x02\x00\xc0\x40\x5c\xd7\xee\x76\x0e\xeb\x5d\x53\x51\x7d\x05\x8d\xb4\x68\x0e\xc5\x39\x17\x14\x5e\x51\x21\xb6\xd0\x20\x9d\x17\x5f\xfd\x42\x84\xc8\x90\x86\xc2\x40\x2e\xa5\x5d\xa6\xe5\x61\x65\xab\x9f\x78\xe6\x07\x8b\x27\x3d\xbb\x3d\xed\xeb\xe7\xcf\xbf\xcd\x0f\x7c\xc8\x3f\x78\xde\xbf\xfe\xea\x0f\xfa\xa6\x17\xfc\x55\x2c\x5f\xf1\xb1\xaf\xfd\xb2\xbf\xf2\x3e\xf8\xf3\x7f\x0f\xd9\xaa\xfe\xab\xb7\xf9\xfe\xa7\x3d\xf5\x09\xdf\xfb\xe7\x5f\xfd\x77\xd3\x37\xfd\xe1\x17\xaf\x77\x7c\xe3\x2f\xbe\xfa\x57\x3e\xf1\x9b\xbf\xf1\x4d\xbf\xf1\xc3\xdf\xfe\xc6\x6f\xfe\x9a\xe7\x3f\x10\xfa\xab\x1f\xfa\x7d\x9f\x01\x7f\xfe\xb9\x2f\xfb\xca\xf7\xfd\xe9\x8f\xdd\xce\x8f\xfc\xba\x3f\xfc\xed\x6f\xf9\x6b\x5f\xf8\x2f\xbf\xac\x7e\xf1\x73\xdf\xf0\x81\x3f\xf5\xdc\x3f\xf6\x20\x83\xea\x1b\xde\xfe\x59\xaf\xfd\xbe\x7f\xf0\x2d\x6f\xf8\xa2\xaf\xa5\x7f\xf1\x57\x7e\xfd\x43\xf1\xb7\x3e\xf9\x23\x5e\xfe\x91\xfc\xcf\xc2\x27\xfd\x8b\x17\xfd\xea\x7b\x3d\xfe\x37\x3e\xed\x81\xd0\xf4\x73\x2f\xe2\x6f\xf3\xca\xef\x7a\xda\xfc\xd9\xef\xf9\xc4\xd7\xbf\xf1\x03\x5f\xfb\xc6\x57\xbd\xe1\xfa\x7b\x5f\xf2\x99\xef\xf0\x1d\xdf\xf3\x35\x2f\xf8\x43\x3f\xfd\x94\x07\xe5\xaa\x3e\xe9\xe5\x7f\xf7\xf8\xd3\x5f\xf3\x57\x9e\xfa\x6e\xdf\xf4\xb8\x8f\xff\xf8\xdf\xf7\x5f\xfe\xf3\x27\x3f\xeb\xcb\xde\xf0\xc1\xff\xd7\x3b\xbf\xf7\xd7\xbd\xe5\x57\xff\xe4\x97\x7f\xc0\x13\x5e\xfe\x40\xe8\x4f\x7e\xfc\x5b\xff\xcc\xbb\xbc\xe2\xef\x7c\xfc\xd3\xbf\xf2\x93\xde\xe3\x33\xfe\xfd\x9b\xbf\xfb\x03\x3e\xea\x15\x4f\x7d\xd9\x1f\xfe\xbc\x97\x3e\xef\x4d\x9f\xf2\x67\x3f\xe2\x67\x9e\xf6\x13\x0f\x84\x86\x9f\x78\xff\xc7\x7d\xcb\x87\x3c\xd9\xbc\xf8\x7d\xf7\xcf\xfe\xc8\x4f\xfa\xfa\x97\x7e\xf5\x7b\x7f\x5a\x7b\xfa\x73\xbe\xfa\xc9\xec\x8f\xff\xa1\x3f\xfd\xa6\xf1\xca\x37\x3d\x10\x9a\xdf\xf8\xda\x5f\x7f\x29\x67\x7f\xf5\x0b\x7f\xe8\xb3\xbe\xe7\x65\xef\xfe\x53\xaf\x53\x8f\x7f\xc6\xa7\xbd\xf8\x13\xcd\xab\x3e\xd8\xbe\xf4\x0b\xcc\x9f\xfb\x0f\x3f\xf2\xbb\x64\xab\x47\x9d\xea\x0d\xe5\x27\x9b\xb3\xaf\xd4\x59\xac\x41\xc2\x1e\x9a\xca\xae\xe0\x45\x66\x6e\x12\xbb\x40\x22\xe8\xa1\xb1\x82\xcc\xcc\x04\xc1\x72\xb6\x6c\x6e\x13\x56\xcd\x5d\xef\x92\xdb\xb8\xd3\x2d\x35\xa6\xa1\x15\x8a\x5e\x79\x9c\x8f\x75\xa2\x15\x47\x5b\x37\x52\xf4\x72\xcb\x62\x68\x9d\xe4\x71\xbb\xab\x10\x66\x76\x13\x7e\x32\x8b\xda\xa1\x71\xe0\xa1\xcb\x44\xa8\x30\xc3\x31\x06\xd3\x01\xe7\x2e\xf6\x00\x95\x43\x05\xf5\x52\x4d\x26\xf4\xae\x31\x2c\xdd\xfb\xaa\x14\xef\x7c\x75\x2e\x72\xac\x8d\x8e\xb0\x5a\x9f\x07\xac\x90\xe0\x08\x2c\x89\x8c\xeb\x24\xa5\x2b\x08\xd3\x16\x3b\x76\x77\x41\x80\xc1\x0f\x4f\x73\x70\xd5\x92\x9c\x8e\x91\x6a\x47\x57\xa4\x24\xb5\x3d\x8e\x2b\x6d\x35\x23\xbf\x8e\x7a\x79\xe9\xc3\x84\xbd\xd4\x55\xee\x22\x43\x43\x14\x63\x52\x9e\x8e\x92\x0e\xa2\x7a\x55\x19\x51\x15\xb3\xf0\x18\xd2\xe0\xe9\x61\x94\xe3\x96\x40\xcd\x64\x11\x10\x99\x59\xe6\x5d\x3e\x6b\xe6\x68\x2a\x3f\x56\xa5\x48\x58\xf1\xb6\x00\x53\x96\x6b\x5a\x4e\x0f\x3a\xa9\xa6\xb0\xb6\xef\x6a\x37\x94\x90\xb3\x2e\x6b\x03\xce\xf9\xae\x81\x70\x13\x51\x9f\xfb\x52\x42\xd5\xc3\x6e\x41\xf8\xd6\x95\x84\x75\x68\xb6\x0e\x33\x4b\x74\x20\x39\xc2\x3b\x0d\xb3\x9d\xc2\x9c\x0e\x94\x87\x55\x9d\x1f\x95\xa7\xef\x90\x94\x57\x38\x76\xc7\x72\x71\xfd\xe4\xf9\x3c\x75\xd6\x4c\xe0\x2e\xd9\xde\x94\xe0\x5b\x76\x4a\xa6\x80\xf3\x45\x0f\x02\x40\x62\xd4\xd1\xbb\x40\x26\xa7\x3a\x16\x21\x4c\x20\xaf\x2a\x06\xdd\x01\xe7\x39\x2d\xd8\x76\xad\xe2\x21\xa0\xa2\x1e\xcc\xdc\x8b\xef\x28\x25\xe6\xe9\x05\xb7\xbb\x3c\xc5\x8e\x32\x85\x3c\x2d\xe7\x78\x24\x0f\x76\xed\x76\x2f\x47\x9f\x08\xf5\x0c\x8b\xf6\x27\xe0\x73\xad\xb6\xd9\xbe\xed\x57\x84\x65\x8b\x77\x11\xd0\x28\x9c\x18\xba\x08\x2e\xb5\x8b\x12\x27\x72\x17\x81\x84\xb4\x7e\x78\x89\xa0\x17\xf2\xf0\xc7\x34\x05\xc1\xbc\xc7\x19\x78\x02\x53\x9b\xfb\x78\xb8\x63\x69\xd9\x81\x9e\x41\x4e\x96\x8c\x08\x3a\xf2\x9c\x31\xad\x05\xa7\x13\x5f\x17\xf5\x43\xcf\xad\x16\x74\x46\xc1\xc4\x35\xf5\x5d\x7c\x07\x57\x2f\x4c\x35\x3e\x61\xc7\x00\x5b\xbb\xed\xe7\x9c\x3d\x48\x3e\xf1\xdc\x8e\x7c\xd4\x82\x0d\x6f\xda\xac\x28\x32\x28\x85\x20\x79\xd7\xb2\x37\xc9\x09\x45\xdd\xe9\x96\xf0\x42\xfb\x74\x33\x2a\xbc\xcf\x58\xd6\x36\x00\xc3\xbb\x3e\x23\xe1\x62\x1c\x5b\x63\x14\x0a\x54\xa2\x67\xe5\x2e\x46\x70\x3d\xe8\xcc\x6b\x15\x03\xda\xb6\x51\xa9\x64\x04\x86\x79\xdb\xd3\xbc\x36\x98\x64\x23\xa0\x75\x0a\xd0\xb1\xd7\xb3\x34\x6d\x03\x78\x40\x69\xe2\x77\x92\xcf\xa3\x2a\xbf\x3b\xc4\x65\x78\x50\x1b\x84\xe7\x5c\x8d\x1e\xf4\xb1\x2f\x8f\x5f\x84\x16\x5b\x21\x44\xe5\xe4\x95\x19\xea\xa8\x44\x0a\x18\x19\x50\x74\x07\xbb\x0d\xe1\x2e\x58\x55\x81\xb5\xf2\xa7\x1d\x06\x10\xdb\x04\x1a\xd7\x1c\x08\xef\x64\x6d\x5c\x18\xad\x76\xe0\x4b\x47\xe0\xd8\xe2\xee\xae\xa6\x6f\x93\x2f\x91\xc9\x4e\x72\xad\xe1\x40\x52\x0b\xba\x75\xb6\x96\xad\x44\xc9\x79\xb3\xd6\xdc\x10\xe2\xe5\x98\x40\xfb\xde\x65\xc9\x35\xf8\xeb\x36\x22\xb3\x86\x72\x1c\xb6\x4f\x2a\xaf\x63\xb6\x75\x80\x2b\x5c\x12\x51\xe4\x31\xc5\x65\xa7\x22\x4b\x3e\x43\xc7\xed\x24\x23\xc5\xa0\x59\xda\xee\xfa\x75\xf2\x81\xc6\x29\xf2\x4a\xda\x8f\x18\x3d\x1e\x9b\xc2\x52\x47\x57\x1b\x01\xdb\x18\x6c\x28\x93\x18\xe0\x5b\x45\x80\x26\x24\x9d\xe0\x77\xa1\xfe\x51\x33\xd1\xd1\x5e\xc3\xa6\xc3\x45\xcc\xa1\x6a\xdb\x94\x68\x2b\x56\x4d\xd5\x05\x43\xe8\xd2\xf5\xdd\x80\x24\x73\x53\xdd\x65\x7b\xd7\x1a\x18\xdd\x73\xa9\x3c\x53\x91\x53\x4f\x99\xec\xe6\xd4\xae\x29\xc8\xb0\x48\x0c\x16\x8a\xf0\x5e\xb8\xd6\x26\x36\x12\x2a\x60\x2b\x50\x76\x97\x10\x24\x95\x8c\x54\xb2\x89\xc1\x33\xb7\xe2\x72\xfb\x71\x79\x16\x0c\x9e\x46\x62\x8a\xfd\x26\x64\xd0\x83\x75\xb8\x97\xc6\xc7\x08\x02\xa1\x09\x1e\x4a\x3e\x8f\xea\x25\xef\x60\x7a\xaa\xd9\x98\x6c\xe8\x72\x87\x34\x42\x81\x8e\xe2\xbe\x2f\x57\xbb\xc1\x99\x5f\x7c\x9c\xd7\x3c\x49\x3a\xea\xb9\xa9\xb6\x21\xb0\xb5\xdb\x44\xcb\xfd\xde\x8c\x37\xfe\xa2\x3b\x02\x82\xb8\x5d\xa0\x36\x76\x2a\x29\x91\xbc\x98\x53\x06\x26\x2e\x66\x88\xb5\xa4\x34\x8d\xc2\xb9\xe3\xbb\x1c\x9a\x08\x0b\x74\x9a\x63\x55\xd5\x8f\x63\x83\xe6\x6a\xe9\xa2\xae\xe4\x7d\x73\xa8\x64\xa2\x53\xba\x32\x64\xb5\x19\xa9\x9c\xb3\x89\x6f\x7a\xde\x85\xe6\xe2\x1a\x91\xad\xca\xd8\x73\x77\x7c\xd1\xab\xb5\x33\x64\x63\xe0\x40\xe7\xb5\x9d\xc7\x25\x95\x39\x6c\x46\xd7\x3e\x48\x53\x3b\x8a\x1c\xdc\x45\x33\x9f\x70\x5f\x13\xa3\x2e\xc9\x84\xfa\x32\x81\x45\x14\x29\x90\xe8\x78\xac\xda\x77\x67\xe9\xc7\x80\x06\x86\xdd\x31\xb3\x1f\x07\x99\xc7\xba\xeb\x3f\xa1\xa2\xf8\x9c\x65\x8f\x09\x2b\x72\xea\x03\x9d\x66\xf6\x62\xf5\x46\xb7\x83\xeb\x43\xe5\x00\x94\xd4\xee\xa8\x4c\xb6\xc8\xc9\x9e\xc8\x5d\xe6\x7d\xd0\xee\xb2\xc3\x24\xc2\xea\x38\xa1\x73\x81\xd6\x68\xb9\xfa\x39\x7a\x08\x3e\xc5\xae\x92\xd8\x06\xd8\x41\xa4\x50\x37\xda\xf1\x46\x6e\x73\x60\x69\xed\x8c\x99\x85\xd6\x60\xe2\x3e\x5d\x55\x70\x02\x62\xf5\x9e\x02\xd5\x91\x62\xa7\x15\x63\x21\x16\x75\xa8\x28\x35\x8c\x72\x7b\xb8\xf2\x79\x14\x3a\x75\x87\x9a\x39\x34\xa3\x3a\x11\x2d\xe9\x9d\x4f\xcb\x16\xec\x31\xb2\x0a\xf1\x66\xe0\x44\xab\x64\x2d\x4f\xd5\xfd\x39\x85\x99\x3d\x09\x14\xea\x5d\x0b\xab\x87\x19\x7b\x81\xdc\x90\x98\xe3\xae\xc7\xc1\xa1\x24\x8a\x18\x55\x9d\x45\x66\x63\xa3\x1e\x5b\xb9\xd8\x86\xd3\x48\x5d\xf7\xab\x5f\xeb\x2e\x67\x8d\x90\x68\xc3\xcd\x72\xa8\x04\xe8\x87\x8b\xc6\x79\x87\x12\x6c\xaa\xd7\x30\x01\x66\x35\xd2\xdc\x0f\x14\xf3\xe4\x95\x32\x00\xd3\x6d\x36\x82\x79\x83\x9b\x0c\xac\xa8\x63\x61\x41\x25\x51\x65\xec\xee\x80\x98\xd8\x72\x20\x24\x5b\xa0\x92\x62\xd7\x27\x41\xa8\x62\xa3\xa1\xa6\x77\x69\x5e\xa0\x32\xe4\xee\xae\x20\x2e\x16\x22\xc4\x8b\xe1\x1a\x6d\xd9\x95\x01\xe2\xc4\xcd\xd8\x21\x0c\xde\x01\x86\x6d\x47\x60\xfa\x55\x16\xb8\xab\x1a\x74\xda\x1e\x70\x9f\xe7\x28\x99\xba\x72\x1e\x45\x2d\x49\xa3\x4d\xca\x73\xb4\x14\x8d\x21\x37\x2f\x18\x7d\xec\x06\x2b\x7c\x01\x77\xd0\xbb\x50\x4a\x23\xf9\x02\x36\x6e\xe7\x3c\x02\x9c\x8d\x53\xab\x89\xeb\x57\xaa\x40\xb0\x38\xf5\xd8\x80\x53\xf2\xca\x31\xe4\x2a\xce\x62\xad\xdb\x6e\xba\xb1\x54\x81\xe0\x3b\x30\xca\x5c\xb0\x01\xb8\x74\x4d\x6c\xdf\xed\x06\x96\x45\x4b\x04\x6c\x90\x82\x5c\xac\x9e\x37\xde\x03\x85\x3c\xee\xf9\x61\xb2\xd5\xa3\xf0\xee\x3b\x68\xe6\x09\xee\xde\x9a\xc9\x53\x62\x3a\x63\x8a\xba\x49\x28\x72\xef\x87\xe7\x00\xf1\xbe\xae\xc4\x8b\x2f\x48\xd2\x41\x93\xce\x34\xac\xbb\xb4\x93\xd0\x1e\x73\xaf\x56\x4f\xb6\xd3\x2a\xd7\x09\x52\x68\xe4\x2a\x67\x17\xfa\xe8\x00\x1f\xa1\xc1\x2b\x00\xc6\x3c\x10\x07\x8c\xbb\x34\xf9\xae\xd9\xfe\xa6\x8c\x95\xba\x4a\x52\x64\x2e\xc3\xc5\x23\x9e\x87\x35\xa1\x54\xc2\xb5\x98\x42\x79\xe5\x1c\xf6\xee\x1a\x51\x53\x24\x1a\x26\xfa\x2e\xe8\xfb\x4a\x5a\x50\xdf\xe2\xc5\x66\xf6\x55\x5c\xb2\x3b\xc6\xc8\x18\x07\xdc\xb0\x86\xe6\xea\xf9\xb1\xea\xde\x6a\x51\xaf\x83\x49\x3f\xcc\x5d\xe3\x00\xe2\xb6\x10\xed\xaa\x5a\x18\x69\xfc\x69\x99\x17\xeb\xbc\x68\xc8\x29\x1f\xdd\x53\x9d\x44\x6b\x04\x2d\x0c\x80\x58\x8e\x87\xe4\xd7\xba\xab\xd9\x19\x8b\x73\x7e\xa9\xea\x0f\x2e\x90\xcd\xb3\x98\xa3\x65\x40\xeb\x2a\xc5\x58\xd9\x43\xdf\x28\x6e\x7b\x18\x95\x57\x65\x46\xa3\x84\xdc\xa5\x79\x61\xd7\x1c\x06\xa9\xb1\xf9\xe2\x42\xbc\x8e\x3a\x70\xb2\x36\x22\xbf\x13\x0c\x3b\x4d\x80\x0a\x60\xc5\xb9\x1f\xe3\x28\x17\xec\x24\xdf\x46\x33\x17\x5b\xad\x0e\x83\x6d\xdb\x41\xb5\x01\x5f\xb0\x55\x2a\x25\x48\xa1\x04\x1f\xc4\xc1\xd5\x4a\x4e\x11\xdb\xcd\x35\x21\x0a\xd6\x8b\xed\xe1\xe4\xf3\xa8\x09\xda\x0d\x98\xcf\x49\xb1\x96\xb9\xd7\x29\x38\x4d\x41\xe1\xdd\xef\x07\x72\x16\x4a\x90\x15\xb9\x74\x8e\x47\xcc\x26\x89\xf3\x34\x26\x2b\x55\xb3\xb9\xeb\x43\x23\x96\x8a\x34\x49\x2b\xd5\xf9\xc2\xd8\x61\x63\x21\xfb\x3c\x95\x1e\x97\x06\x33\xb6\x09\x0c\x4f\xe4\x38\xf8\xa4\xa6\xbb\x7a\x44\xae\xef\x22\xd1\xb4\x6b\x01\xad\x16\x94\x7a\xaf\x6a\x03\x21\x78\xec\xac\xa3\x7d\x42\x8d\x10\x45\x9a\x8d\x8d\x0c\xbe\x5f\x78\xe0\xab\xd5\x78\x82\xbb\xfc\x39\x08\xee\x67\xa7\xd6\x6f\x2d\x38\x1b\x8f\x6d\x37\x70\xb7\x83\x7a\x13\x88\x31\x04\x74\x68\xcd\xac\x4a\xc8\x45\xa4\x9a\x6b\x65\xae\xee\x3a\x13\x7a\x9e\x54\x75\x91\x96\x72\x91\xc6\x1d\x81\x96\x33\x84\xe7\x32\x14\xc1\x49\xbb\x3e\x03\x63\x82\x00\x23\x6d\x18\x52\x7a\xc4\xd9\x6d\x3b\x2e\x38\x6e\xb0\x37\x9a\xfc\x45\x33\x38\x27\x50\x67\x50\x6b\xb6\xe9\x26\x62\x92\x4c\xbf\x07\xc6\xac\x02\x55\xab\x0d\x41\x25\xc1\x75\x97\xcf\x1a\x15\x15\xa4\x91\x16\x86\xac\x1e\x64\x3b\xb2\x03\x1d\x1e\x6c\xa0\x85\x69\xe3\x6d\x87\x6e\x3b\x37\x3e\xbc\x0b\xc7\x1c\xe7\x54\x67\xb8\x6b\x25\x94\xb0\x56\x50\x9c\x59\x4e\x75\x1c\x87\x4c\x3b\xa6\xa4\x05\x66\xac\x17\x96\x1a\xd3\x0c\xd2\x04\xef\x4d\x5f\xd9\xf2\xcd\x79\x65\xd5\x76\x3e\x94\x7c\x1e\x35\x93\xbf\x83\xe9\xb9\x55\x59\x8f\x38\x71\xf5\x2d\x64\x2c\xa0\xb3\xc7\x69\xb5\x91\x69\x8f\xe9\xc8\x92\xef\x24\x2f\x84\x25\xc5\x5b\xed\x27\x21\x79\xdd\x45\x5d\xd1\x17\x44\x92\x0d\xbd\xed\x09\x6e\x08\x9f\x82\xba\xc9\xcf\x23\x57\x8d\x74\x54\x97\x46\x67\x0e\x5a\x71\x8f\xa5\x8d\x60\x71\x1c\xef\x5a\x9c\xa2\x18\x4b\x05\x69\xb8\x0c\xd9\x00\xc6\xc7\xc9\x56\x68\xa8\x7a\x5c\xa3\xdf\xeb\xbe\xb6\xc3\x9e\x0b\x62\x94\x1c\xe3\x84\x74\xce\x9d\xb9\xab\xd9\xe9\x84\x8d\xc8\xdd\x21\xd1\x70\x62\x71\x40\x2f\x8d\xda\x25\x5b\xab\x61\xf3\x8b\x06\xb8\xb1\x3d\x04\xb1\x18\x9b\x64\x80\xc8\xf5\x6d\x8e\xf6\x21\x15\x7f\xd1\xa3\x87\x20\x76\x74\x06\x37\x91\x21\x3b\x60\x80\x94\x51\x29\x3e\x2f\xa2\x9c\x40\x09\x1d\x21\x7a\x37\x27\x9e\x62\xbb\xcb\x5a\x31\xe0\x02\xbd\xa0\x94\x9c\xdd\x45\x24\x20\xe3\x63\x07\x39\xca\x68\xe6\xa1\xcd\x3e\xba\xa0\xbe\x58\x4a\x86\xdb\xf8\x63\xbf\x17\xba\x4d\xee\x19\x25\x6b\x97\x43\x38\xe7\x9e\xac\x6f\x24\x12\x23\x46\x44\xea\x5a\x75\x0d\xbb\xf7\xf3\x40\x55\x94\xb6\x03\x8a\x99\x3d\x0e\x64\xd9\x6d\xdb\xbd\xbe\xdb\x0b\xee\x4c\x1a\x94\x21\x53\xb1\x2e\xb9\xae\x9c\xa2\x89\x5b\x63\x6a\xdb\x97\xa9\x12\x70\x02\x7d\x3b\x20\xc9\xd0\xb2\xf6\xff\x34\xc5\x3f\xf0\xd6\xff\x2b\xf9\x7c\xd3\x27\xbf\xe6\x9d\x7f\xf1\x99\xbf\xf6\xf6\xaf\xfe\x95\x97\xbc\x30\x89\xef\xf8\xf0\xfa\xb4\xb7\xfd\x99\xed\xcb\xff\xed\xff\xff\x27\x9f\xb1\xbd\xd3\x6b\x5e\xf5\x55\xf5\x39\x1f\xfd\x84\xbf\xf1\x00\x7f\xe8\x87\x7e\xfb\x4d\x6f\x88\x7f\xe8\x73\x7f\xf1\xb9\xf9\xc7\xbe\xe0\x5f\x7e\xea\x4b\x3e\xfd\x13\xd4\x77\xfd\xe4\x67\x7c\xeb\x7b\xbd\xe9\x37\x9f\xfa\x4f\xfa\x9b\x5f\xff\x94\x0f\x7e\x20\xf4\xfb\xff\xcd\xbf\xf9\xf0\x2f\xfe\x88\xe7\x3f\xfe\x49\x7f\xfd\x1f\xff\xc3\x67\x3f\xe1\x97\xdf\xe7\x67\xbf\xf4\x0d\x5f\xfb\xe4\x7f\xf1\xb2\xf9\x9b\x4f\xff\xf6\x1f\xf9\x94\xbf\xfa\xfa\xcf\x78\x20\xf4\x7b\xfe\x1b\xff\xd9\x1f\x7c\xe9\x3f\xff\x11\xfb\x25\xcf\xf9\x53\x3f\xf8\xd2\x4f\xfc\xcc\x4f\x7f\xea\x33\xde\xe7\x7b\xe2\x97\xbd\xe4\xeb\xbe\xf3\x09\xff\xec\x03\x26\x7f\xfd\x03\xa1\xef\xf9\xb5\x4f\x3b\xbe\xeb\xd9\xdb\xd3\x3f\xef\x1d\xf8\x4f\x3f\xe1\x37\x5e\xfe\x94\xc7\xbf\xee\x89\x1f\xf4\xdb\xdf\xf4\x47\x5f\xf9\x36\xe4\x07\xbf\xf0\xc7\xfe\xf3\x2f\x7d\xd6\xb3\x7f\x87\x45\xf6\xa8\xff\xf4\xf7\xb0\xc8\xfe\xd4\x73\x5f\xfe\xf6\xaf\x7a\xd2\x87\x3c\xfd\x55\xf0\x87\xfe\xda\xe3\xdf\xf4\x8a\xb7\xfe\x9a\x6f\x7b\x66\x7e\xfa\xb3\xd6\x4b\x7e\xf1\xa3\xbe\xe1\xcd\x6f\x7e\xde\xf7\xbf\xe2\x81\xd0\xbf\xfb\xff\xfb\x4f\x7f\xe6\xdd\xff\xfd\xe7\xd8\xcf\xfc\xa7\x1f\xfb\xca\xed\x0d\xaf\x7d\xe3\x1b\xfe\xf6\x87\x7d\xc6\xcf\xfe\xf7\x17\x89\xd7\xe8\xff\xf6\x7d\x2f\x78\xe2\x37\x7e\xe1\x03\xa1\xe6\x1b\x3f\xe1\x6f\xbc\xdf\x7f\xfd\xf0\xc7\x85\x67\xbf\xd7\xe3\xde\xff\x87\xbe\x71\xfb\xca\xe3\xa7\x3f\xe6\x33\x7e\xf9\x5d\xbf\xef\x3d\xbf\xea\xa5\xe9\x03\x7f\xe9\x29\xe2\x81\xd0\x4f\xfe\xa2\xe3\x8f\x7c\xe1\xdb\xfe\xa5\xcf\x7b\xf7\xcf\xf9\x86\x27\x7e\xf6\x1b\xde\xf1\xfc\xfc\x0f\xf9\xe8\xf7\x7f\xb7\x77\xff\xd5\xb7\x55\xdf\xfc\x05\xff\xe5\x6b\x9e\x1c\x9e\xfa\x40\xa8\x7e\x8f\xd7\x8c\xe7\xa3\xbf\xfe\x1d\xbf\xfd\xc6\x1f\xfd\x0b\x2f\xfc\xd7\x4f\xca\x3f\xba\xfd\xa5\xe3\xd9\x7f\xeb\xeb\xdf\x45\xab\xf0\x27\x7f\xfa\xe7\x7e\xe9\xdb\x1e\x08\x7d\xf6\x0b\x9f\xff\x45\x2f\xf9\xb0\xf6\x54\xf6\xd4\xff\xf8\x73\x9f\xfb\x0f\x9f\xf3\x9e\xcf\xfd\x86\x17\xbe\xe5\x5b\xde\xef\x65\xef\xf3\x83\xcf\xfc\xec\x27\x7e\xe7\x3f\xfe\xaa\x4f\x7f\x20\xf4\x9b\xeb\x0f\x7f\xcb\xf9\x97\x5f\xf2\xf5\x8f\x7f\x07\xf6\x59\x1f\xfb\x6b\xcf\x7c\x87\x97\xbe\xe5\x8b\xdf\xe1\xf9\x5f\xfe\x71\xff\xf8\x49\xf1\xef\x7c\xc4\x93\x9f\xf5\x56\x3f\xf5\x40\xa8\xff\x3f\x9f\x81\xfe\xde\xf7\x7e\xdd\x4b\x3e\x0c\xfc\xf8\xf9\x94\xef\x7c\xab\xcf\x7a\xdc\x27\xbe\xf9\xdd\x9e\xf9\xb7\x7f\xe4\x3f\x3d\x39\x7e\xd5\x33\xed\x47\xfc\xe4\x7b\xfc\x2e\x8b\xec\x51\xa7\x7a\xc3\xd3\xe6\x05\x5d\x69\x35\x74\x0e\x2b\xb8\x96\x67\x43\xeb\xcc\xd4\xd0\x8b\xa0\x0b\xe2\x93\x62\xc2\x84\x5e\x64\xa3\x5c\xa2\x33\x92\x2c\x6f\x93\x4a\xac\x15\xbb\x8d\x9c\xd7\x95\x37\x05\xf7\xa3\x21\x83\x0a\xad\x38\xa2\x62\xab\x50\xd1\x21\x85\x59\xae\x76\x1e\xa1\x4c\xe1\x39\x31\xf9\x2e\xdb\x03\xb9\x0b\x2d\x1b\xc3\x3a\xc1\x6e\x9d\x45\x43\xed\x12\xc1\x4c\x14\xdf\x20\x90\xe4\xb0\x5d\x9b\x92\x6c\x4c\x8b\xc2\x4c\x77\x47\xcc\x5d\x40\x47\x3d\x44\x5a\xb3\x27\x4d\x4a\x13\x88\x24\x7f\x6c\x0a\xa9\x10\x69\xb6\x57\x9b\x53\x33\x6e\x4a\x1d\xb6\x90\x6b\x6a\xd8\x88\x89\xdb\x5d\x6d\x63\x1b\x2c\xb9\x74\x0d\xaa\xb9\xaf\x9b\xda\xa1\x67\xe4\xe2\x9d\xf8\xb3\xe6\x98\x80\x33\x93\x6c\xc2\x34\x41\xfd\xb1\xd0\x95\x78\xbf\x0d\xe8\x68\xd7\x45\x22\x97\xb0\x22\x04\x71\xb6\x86\xa7\x10\x0f\x0b\xa4\x2d\xc2\x67\x3f\x4f\x04\x82\xee\x44\x5f\x8e\x9f\xa9\x8b\x39\x57\xbd\xeb\x69\x63\x45\x23\x9f\x11\xb0\x72\x43\x6e\xe1\x40\xcc\x92\x79\x52\x10\x58\x04\x95\xb6\x58\x3c\xf6\xc8\x1d\xc3\xfa\x6a\x61\x48\x51\xd8\xbb\x9c\x93\xc6\xb2\xad\x5a\xa9\x59\xa8\x6b\xf7\x10\xb2\xbe\x93\x66\xf5\x9e\xd7\x9e\xaf\x82\x7c\x5c\xd3\xce\xd9\x4d\x38\xbb\xd9\x51\x8c\xf2\x81\xe7\xfe\x77\x92\xcf\xa3\xf2\xf4\x0d\xc9\x87\x2f\x0b\x0f\x65\xfc\x15\xed\x86\xc4\x56\xfa\x51\x6c\x5c\xdb\x3c\x4e\x15\x2d\x2a\x48\xe4\x23\xef\xd5\x4d\x3e\x09\xbc\xd2\x1e\x50\xb9\xeb\x93\x2f\x6d\x44\x8b\x47\x6f\x61\x8f\x09\xcd\x72\x51\x23\x92\x9a\x10\x9d\xd8\x34\x86\xa8\x4f\xf5\x84\xa5\x98\x02\x39\x26\x5b\x6a\xee\xb6\xb1\xf8\x71\xec\xfb\xba\x24\x37\xd7\xa1\x34\x8f\x55\x84\xd2\x4f\xaa\x5b\x91\xb8\x5d\x28\xe2\x70\x72\x04\xc3\x7e\xf4\x3d\xd9\x36\xf7\x70\xb5\xbb\xa0\x7b\x04\xaf\x2a\xaa\x20\x61\x2f\xd9\x9c\x32\x70\x78\x65\xb0\x31\x58\x04\xaf\x43\x67\x06\x97\xc3\x58\x50\x04\x02\xba\x5a\xda\x2e\xad\x6f\x9a\xea\x52\xce\x81\xb9\x64\x82\x9b\xf4\x16\x77\xa9\x63\x98\x35\x09\x38\xb1\x52\xa4\x60\x42\xd0\x19\xa1\x85\xd0\xec\x0b\xc9\x62\xe7\x5e\xed\x5d\xc4\xd1\x13\xf3\x03\x05\x96\x69\x94\x39\x69\x41\x4f\x00\x28\x91\xac\xad\x41\x71\xa2\x58\x14\xce\x5c\x37\xe8\x18\x25\x9d\x73\xca\x78\xdd\x36\xe2\xb9\xc2\x05\xa2\x3a\x56\x83\x94\x34\x56\x1d\x4f\x6e\xb3\x74\xb7\x42\x14\x08\xcc\xe9\x07\x93\x3b\xb2\xde\x60\xa9\x47\x8f\xb2\xf5\xed\xae\x1b\xdb\x04\x17\x43\x16\x5a\xa4\x3c\xb3\x9d\x7b\xf6\x20\x58\x87\x04\x33\x19\x75\x84\xd9\xee\x7d\xbf\xa0\x3b\xb2\x2c\x9b\x70\x6a\x1b\xf6\xe1\x0d\xaa\x47\x55\x7e\x77\x98\xb3\x82\x20\x99\x53\x13\xe9\xa3\x5e\xd9\xe8\x2e\xc2\x18\xf5\x50\xa7\xdb\x29\x8f\xf5\x1a\x57\x38\xfa\xb5\x03\xbc\x6f\x62\xd9\x6b\x77\xf9\xae\xec\x3d\xc5\x24\xec\x1c\x06\x90\x9c\x09\x3b\x82\xce\xec\x00\x66\x6f\xfb\x15\x56\xeb\x76\x8c\x33\xef\x39\x38\xba\x43\x78\xc6\x53\x41\xa0\xef\x92\xec\x22\x86\x91\xa0\x9a\x84\x91\xcb\xe1\xb1\x6e\x94\x1f\x43\xa6\xca\x4b\x84\x42\x4a\x65\xf6\x1c\xd8\xd0\x8e\xb1\xbe\x5b\x99\xc0\x65\xef\x42\x8a\x74\x22\x82\x5d\x9d\x44\x74\x8c\x5d\xec\x7b\xb6\x31\x73\xe2\x84\x9c\xfc\x44\x61\x6e\xb5\x43\x35\x8c\x3d\xf3\x0e\xc0\x16\xd5\x5e\xe8\x5d\xfb\xf4\xa9\x56\xc1\x51\xa1\x00\x44\x2f\xb6\x0b\x74\x7b\x96\x4a\x72\x8e\xa7\xb0\xc0\xf0\x65\x81\xba\x4e\xda\x4a\x90\x7e\xef\xd9\x85\x83\xdc\x55\xf9\xec\xd9\x00\x8f\x06\xe0\x06\x19\x82\xcc\xe9\x21\xe8\x3a\xa1\xa8\x7d\x62\x4e\x25\x78\xee\x89\xeb\x06\x51\x2e\x3c\xea\x7e\x7a\x66\xef\x9a\xa5\x6e\x21\xd1\x93\x9e\xc7\xcc\x72\x89\x44\x0e\x79\x21\x7b\xce\x4d\x03\x8f\xd5\x36\x2b\x76\x8a\xa3\xc5\x82\xb0\xf0\xe8\xda\x27\x93\xec\x5d\x84\x9f\x74\x42\xb0\x2d\xb6\xd7\x12\x51\x38\x7c\xec\xce\x12\x33\x2c\x7a\xac\x93\x30\x02\x3b\xa2\xf5\xb9\xd2\x39\x8f\x4d\xac\xed\x20\xcd\x6f\xe8\xa1\xe4\xf3\xa8\x5e\xf2\x8e\xca\x87\x79\x72\x38\x23\xa0\xc2\x3e\x1d\xab\x8f\xd1\xba\x09\x43\x6e\x6d\xf0\x51\xed\x6e\x05\xc7\x6a\x66\xc7\xec\x66\x4f\x73\xcc\x52\xef\x82\xee\xa3\x52\x31\xc0\x1d\xeb\x9d\x2c\x47\xc5\xe5\x8e\x03\x04\x79\x5c\x61\x76\x6a\x51\xbd\x32\x83\x30\xfa\xb3\xa1\x4d\xc3\x8b\x81\x3a\xef\x72\x6a\x24\x7a\x6a\x57\xf8\xa4\x69\x0c\x58\x8e\x8b\x8a\xdc\x8f\x4e\x34\xec\xa3\x1f\xc4\xb9\xc1\xaa\x1c\x1a\x0d\x9c\xd2\x8e\x36\x1a\x77\xbf\xdd\xc5\x5a\xdf\xc1\x11\xea\x85\xd3\xc4\x75\xcf\x04\x9d\x75\x73\x06\xc4\x4c\x65\xaf\x3e\x87\x33\x06\x57\xac\x1a\xb5\xd5\x83\xf3\x0a\xad\x9d\xe5\x2e\xe7\x24\x50\x0f\x40\xd6\x6e\x12\x91\x16\x59\xe2\x7d\x9a\xd7\xbc\x34\x05\x17\x9e\xa8\x34\x7d\x42\xe7\xb5\x63\xd9\x9f\xdc\x51\x69\x00\xbe\x8b\xc8\x41\x1d\xa3\x86\x6d\x41\x64\x7d\xa0\x04\xaf\x46\x0f\x93\xdd\x02\x68\x0c\x3b\x83\xdc\x36\x8d\x68\x94\x85\x4b\xba\x4b\xea\xaf\x6d\xf9\x7a\x17\x7d\x62\xa2\xdd\x24\xa8\xf5\xc8\xa7\xc2\x3d\x70\x49\x7b\xd6\x90\x9c\x6e\x9c\xd7\xa2\x97\x3f\x4e\x35\x15\x6a\xd9\x5f\x09\x1f\x1b\x5d\xed\x36\xab\x7e\x57\x68\x38\x6b\xe3\xa8\xe3\x18\x7d\xa4\x69\x94\x59\x4a\x6f\x9c\xed\x27\xd5\x16\x78\x1a\xd2\x29\x3d\x53\xa8\x20\xd2\x4e\xdc\xcc\xc3\x95\xcf\xa3\xd0\xa9\x1b\x2a\x9f\xd8\x72\x59\xce\xd4\x93\x48\x72\x52\x38\x30\xd0\x44\x6c\x93\xe1\x95\x75\x29\xad\x1e\xf9\xc8\x02\x4d\x73\x72\x27\x5a\x95\x03\xcc\x9b\x00\x73\x7a\x91\xa9\x00\xe1\xfd\x2c\x6b\x70\xe7\x58\x97\x2c\x4f\x72\x46\x3d\x3c\xb5\x51\x43\x2d\x5a\x8e\xbc\x14\x7b\xa8\x44\x94\xc8\xc6\xdc\xb5\xb1\xad\x81\x99\x91\x93\x60\x74\x98\x61\xec\x87\xdb\x5c\x5e\x93\x92\xe5\x7d\xd2\xd2\xf6\x8d\xf7\x25\xcb\x85\x2f\xdf\x38\xa1\xbb\x72\x77\xd9\x63\xd0\x72\x80\x70\x10\x95\x72\xbb\x72\xba\x78\x14\xf6\xec\xd0\xda\xc2\xbb\xe5\x5b\xe6\x49\x84\x4d\xb7\x34\x06\x27\x3e\xe2\xbc\xb5\xed\x2e\xb9\x08\xaa\x14\x5f\x75\xd3\xa4\xf8\x83\x10\x68\x66\x0f\x16\xb0\x5d\x0d\x31\x06\xa1\x81\xd2\x86\x45\x0c\x89\x23\x7e\x32\x08\xdb\x16\xad\xbb\x8b\xc8\x41\x8b\xbc\xcc\xb1\x43\x2b\xb7\x13\xa9\xac\x5a\xe4\x51\x6d\x32\x42\x03\x36\xb6\xc7\xb5\xe4\x18\x27\x34\x96\x40\x2b\x54\x54\x02\xf1\xbb\x9a\x62\x91\x61\x08\xb8\x31\x60\x11\x64\x34\x9d\x40\x27\xef\x07\xdc\x43\xb3\xc7\x4a\x38\xe3\x22\x77\xd9\xa1\x36\x31\x65\x87\xc0\x19\x6e\x23\xd3\xf2\x73\x67\xfb\x9c\xdb\xe9\xd7\xa1\x5c\x72\x9b\x19\xd1\x01\x07\xe8\xb9\x91\xde\xc9\xf2\xf4\xba\x70\x8a\x0e\xc4\x61\x36\x53\x76\x59\x1f\x56\xcd\x79\x14\xde\x7d\x43\xe5\xa3\xb7\xe0\x56\xb1\xb5\x75\x9d\xab\x8f\xb4\x8c\x5c\x36\x09\xae\x61\x5b\x33\xa7\x15\x6e\xb3\xe9\x14\xd2\x71\xeb\xa6\x05\x23\xf9\xbb\xca\x69\x22\xc8\x76\xa2\x94\x35\xad\x16\xb2\x34\x50\xb4\xa1\x99\x64\x8b\x58\xe7\x18\x9a\xee\x61\xb4\xa6\x76\xd5\x2e\x6a\x06\x36\xe1\xd8\xf8\x5d\xaf\xfc\x16\xf3\xbe\x9f\x5b\x62\x91\xb0\x44\x77\x31\x62\x19\x4e\x82\x66\xae\xed\xdc\x23\x13\xa6\x05\xc5\xae\x0b\x05\x40\x08\xb8\x52\xe1\xb7\x25\xe4\xe1\x11\x0f\xd5\xb6\x62\xfd\x2e\x0b\x58\x67\x0f\xc5\x71\x9b\xd2\xa5\xce\xad\x18\x95\xd9\xdc\x3a\xaf\xa8\x9f\xd7\x41\xf7\x80\xc8\x6d\xcb\xc2\x24\xee\xd9\x30\xc2\xb1\x50\x18\x62\x87\xba\x27\x78\x92\xc3\x9b\x3c\x74\x4c\x3e\xe5\x9d\x72\x63\xb3\x37\xca\x91\x11\x8b\x2a\xfa\x36\x37\x29\x80\xf3\x50\xfb\xa9\x79\x9e\x81\x7a\x83\xc1\x60\x34\xee\x64\xef\xd4\x89\x83\xfb\x83\x98\x6d\x19\xb5\xed\x05\x94\x3d\x09\xe1\xf4\x5d\xce\x0c\x6d\x37\x4e\xb6\xe3\xe4\xb4\xe8\x4d\x45\x6d\x34\x65\x1e\xf4\x31\x57\x9c\x7a\x27\xbc\xb7\xa2\x4c\x47\xd3\x83\x79\x6e\x08\x6b\x9c\xef\xba\xb1\x48\xef\x9b\x32\xf8\x3c\x11\xe9\xf0\xdc\x81\x3f\xce\x9e\x0d\x55\x0a\x05\x19\xa3\xad\x73\xaa\x93\x8e\x5d\x22\x34\xbc\x54\xdc\x55\xa3\x1f\x4a\x3e\x8f\x9a\xa0\xdd\xc1\x9f\xdf\x77\xee\xaf\xcd\x1c\x5d\x0e\x66\x21\x3f\xae\x9c\x85\xa1\x90\x80\x10\x38\x50\x00\x5f\x84\x44\x84\x84\xc0\x4b\x8d\x60\x54\xbd\xed\x6d\xdd\x62\x92\xd8\x19\x87\x21\x27\x40\x16\xc2\x1a\x4e\x81\x58\xea\x30\x8d\x67\xf0\x4b\x73\x78\xed\x71\x6b\x31\xfb\xe9\x2c\xda\x3a\xbd\xeb\x1d\x01\x8a\xf8\xea\x2b\xa5\xa2\x62\xc7\x12\x50\x27\xed\x63\x75\xa6\x93\xcf\x14\x99\xa5\xab\x48\xa7\xcc\xee\x74\x6b\x0b\xa7\x97\xe0\x2e\x83\x7c\xa2\x20\x35\x09\xe5\x44\x41\x87\x75\xa5\xad\x0e\x9c\xe0\xb5\xd6\x38\xab\xde\x02\xba\xa2\x52\x84\x63\x8c\x16\x8b\x15\x83\xb2\x9d\xb7\x59\xb0\x5f\x25\x3d\xf6\xbc\x0b\x57\xb2\xb2\xd5\x4c\xa8\x00\x36\xcb\x14\x04\xa5\xd0\x96\xbb\x15\x6a\x14\x8b\x1c\x8d\x31\xd5\xb7\x63\x0e\x7b\x9b\x38\x3a\x34\x87\x89\x86\x9f\xda\x49\x28\x2d\xe7\x31\x6e\x6b\x44\x77\x10\x78\x18\x57\x80\x3b\x06\x72\x68\xf5\xab\x15\x35\xb8\x07\xb3\xde\x95\x7c\x36\x4e\x06\xc5\x9b\xa8\x4c\x8f\x8d\x35\xe4\xa6\xa8\x2b\xa6\x7a\x51\x43\x42\x44\xba\x97\x65\xe9\xa6\x39\x23\xfa\xd0\x0b\xee\xeb\x36\x01\xd7\xdc\xa7\xd6\x8d\xfe\x2f\x8b\x77\x03\x1d\x45\x4a\x86\x00\xfc\x18\x33\x9a\x8a\x06\xb2\x18\xee\x0b\x9e\xbd\x4d\x16\xd3\xa5\x0f\x47\x1f\x4a\x3e\x8f\x9a\xc9\xdf\xb1\x39\xb8\x6f\xd2\x13\x86\x2b\xd0\xba\x84\x75\x38\x0c\xa6\x91\x30\x78\x5c\xc7\x3a\x8d\x2d\x73\xc7\xad\xd4\xdd\xfa\x4e\x70\xbd\xd6\x7e\x9b\x4c\x8a\x09\xec\x52\x6e\x23\xda\xb3\xd1\xfd\x3e\x68\xa8\x7d\x77\x4b\x83\x34\x73\xeb\x2c\x9b\xd1\x47\xf2\xb1\xf3\xbe\x5d\xe7\xda\x2e\x61\xee\x7a\x5b\x15\xad\xb8\x14\x08\xc3\xe9\x2b\xec\x19\x5a\x15\x2c\x8f\xde\x99\x3c\xfc\x22\x16\x4c\x0e\x05\x66\xd9\x22\x49\x4e\x64\x7d\xa2\xdb\x5d\x2f\x5a\xeb\x90\x8b\xb2\x5b\x75\x25\x69\x1b\xd0\x65\xee\x96\x6e\x23\x51\x6d\x71\xd0\x79\x0c\x2b\xe9\x6e\xf6\x49\xd3\x86\x49\xcb\x95\xde\x56\x6f\xf0\x66\xcc\x42\x9e\xd1\xc9\xa4\x9b\x71\xd5\x3d\x9f\xcb\x55\x1e\x49\x44\x89\x40\xe2\x21\x3f\x03\x1e\xc6\xb0\x06\xd9\x8c\xe3\x58\x77\x89\xda\xda\xe8\x4b\x39\xf7\x7e\xb1\x0a\x52\xb2\xdd\xe2\x52\x4f\x70\xb8\x8e\xe0\x0c\xa7\x70\xe3\xb8\xc8\xd6\xf7\x4c\xcd\x59\x44\x19\x7e\x6d\x77\xd5\xa5\xbb\x31\x78\x1e\x6b\xa5\x1d\xeb\x2b\xc6\x90\x87\xd2\xf2\x6a\x07\x69\xb6\x15\x2c\xe6\x4e\xfb\xa8\x8e\x5a\x5a\x6c\x6e\x0a\xa7\xcb\xdc\x85\x3e\x61\x7b\x96\x21\x16\x0d\x9e\xf9\x8e\xe1\x1e\x2b\xae\x67\xa7\xd7\x2c\xda\xfb\x6d\x85\x48\x28\x62\xae\x9d\x24\x17\x20\xfd\x24\x86\xee\x0f\x49\x76\x3d\x8a\xeb\xf5\x7b\xc8\x56\x6f\xf5\xb7\x3f\xef\xad\x9f\xf5\x8a\xff\xf1\xc4\x7f\xfa\xa9\x2f\x7c\xea\x3b\xbc\xed\xbb\xfd\x54\xf8\xa3\x6f\x29\xef\x0f\xc0\xf7\xbf\xcd\x7b\x7d\xef\x3b\xfd\xbe\x7f\xf9\xc2\xa7\x3f\x10\xfa\xda\xff\xfa\x63\x1f\xf9\x9b\xef\xf8\x4f\x7e\xe0\xcb\xff\xb7\xef\x7d\xdf\x57\x3e\xed\x39\x5f\xf7\xb7\x5e\xfe\xc4\xb7\xfa\x8d\x67\xbd\xd7\xcf\xfd\x9d\x2f\xf8\xad\xa7\x3e\xe5\xc9\x3f\xfa\x09\x0f\x84\xbe\xe8\xb9\x7f\x46\xfd\x95\x4f\xf9\x1b\xe0\x3b\x3e\xfd\x65\x1f\xf8\x1e\xef\xf7\x1e\xaf\x2e\xc4\xbc\xd3\x47\x7c\xe0\x87\xbc\xe8\xbf\x7f\xf2\xdf\xfa\xad\x0f\x7f\xfc\x2f\x7f\xd9\x03\xa1\x4f\x7f\xf3\x93\xbf\xe2\x13\x7e\xfb\x95\x5f\xfa\x6d\x5f\x8e\xdf\xf5\x35\x1f\xe8\xf2\xcf\xff\xe5\x7f\xf5\xdd\x1f\xf4\xf2\xff\x43\xbe\xe8\x2d\x1f\xf3\x2f\x9e\xf8\x13\xdf\xf8\xf7\x1f\x08\xfd\xc0\xdf\xb2\x9f\xf3\xc7\xde\xe9\x43\xdf\xe7\x1d\xbf\xe4\x35\x5f\xf6\x17\xdf\xfb\xfb\x4a\x7c\xe3\xab\xfe\xc4\x4b\x7f\xf2\x17\x3e\xed\xd9\x2f\xa6\x6f\xfa\xd2\xa7\xbf\xcb\x83\x7f\xf5\xf7\xff\x81\x5f\xff\xf7\xdf\xf2\xa2\xf6\x41\xea\xab\xfe\xc2\xd7\xbe\xf8\x03\x7e\xf6\x0b\x3e\xee\x47\x7e\xfc\xe7\xff\xc8\x07\x3f\xeb\x25\x7f\xed\x85\x5f\xf5\xdb\xf0\xeb\x5f\xff\xa0\x10\xd8\xfc\x98\x0f\xfd\xb8\x3f\xf7\xf5\xfe\xb7\xde\xf4\x9b\x5f\xff\x67\xff\xc3\x3b\x3c\xef\x0d\xef\xfc\x94\x8f\xff\xee\x7f\xf8\x6e\xfe\x5b\x9f\xf8\x6d\x2f\xe8\x4f\x7f\xfa\x87\x3d\xef\x81\xd0\xb7\x7d\xc6\xb7\x7f\xc5\xbb\xbe\xf2\x1f\xbc\xfa\x1d\x3f\xf6\x8b\xbf\xf3\xf3\xff\xf9\xbf\x7b\xc2\x6f\xfd\xc0\xe7\x3d\xef\xf5\xef\xf5\x7e\xff\xe6\x29\x7f\xea\xd5\x6f\xf7\xed\xff\xe8\x5d\x5f\xfe\xbb\x64\xab\x47\x9d\xea\x0d\xc0\x9b\xce\xa4\x0b\x32\xae\xc4\x71\x05\x8c\xc5\x85\xc5\x45\x21\x49\xa4\xc5\xe5\xd1\xe9\xaa\x07\x79\x91\x65\xa7\x03\x58\x71\x77\x04\x7b\xd7\x63\x9e\x44\x19\x44\x94\x54\xd2\x76\xf9\x2a\x71\x44\x7d\x1f\x31\x89\x91\x94\x85\x7d\xec\x72\x13\x7c\xd7\xc7\x76\xa1\xc9\xf4\xa5\x66\x21\x77\x65\xbb\xab\x33\x02\xd7\x66\xe7\x62\x9a\x3b\x51\x54\x69\xaa\x8f\x7c\xe8\x32\x62\x28\xb2\xee\x17\x3a\xc1\xf2\x47\xec\x2d\x89\xee\xda\x79\x5b\x81\x13\x88\xdd\xd6\xbc\x68\x8d\xa7\xdd\x05\x65\xa1\x85\x43\x25\x2b\xae\xd3\x84\xf3\xda\xe8\x7e\x08\x70\x3d\xd6\xfb\x09\x7a\x0d\x59\x0b\xb8\x4b\xbb\xf6\xb1\xd2\xae\xb1\xed\xe0\x9e\xd7\x4d\xe9\x7a\x50\xae\x66\xb9\xfc\xf2\x84\x11\x22\xaa\x43\xa7\xe9\xb2\xf8\xfd\xd0\xdc\xed\x2a\xca\xb6\xee\xe2\xcc\xee\xb5\x0b\x62\xe1\x46\xdc\xb0\x5e\x6c\x7a\x8f\x15\xc8\xb0\x48\x07\xb6\xef\x5b\x1e\x07\x8c\x06\x47\x36\x64\xd4\x20\xea\xd6\x7a\xbb\x89\xf9\x4e\x8e\xd6\x02\x5c\xbd\x82\x36\x99\xef\xa7\x68\xfa\xcc\xdd\x83\xcd\xec\xbe\xb4\xd9\xdb\x60\xa7\x5d\x8d\x42\xce\x99\xa5\x3e\xf3\xfb\x1c\x3d\x59\x3f\x57\xb6\x8f\xf5\x20\x99\x81\xd3\xda\x19\xd5\x63\xfd\x1a\x67\xee\xea\xfd\x84\x6e\x23\xbb\xaa\x8e\x9b\xeb\x14\xba\xa7\x51\x5a\x6e\x0f\x95\x9f\x8f\xca\xd3\xb7\x58\x94\xf1\x33\xc5\x7d\xe4\x32\x90\xdf\x48\xf5\x78\x4c\x83\x36\x1d\xa3\x89\x74\x1e\xdb\xa9\x9c\x50\x24\xa4\x6b\x3b\x80\x0d\x25\x5e\xe6\xae\x41\xdf\x29\xa2\x41\xc7\x51\x8f\x59\x4f\xaf\x0f\x4e\xb6\x9e\x37\x68\xe3\x69\x62\x64\x87\xd5\xc7\x08\x8a\xe8\x98\x38\x69\x66\x43\x73\xe1\x76\x17\x04\x08\xcb\x6e\x98\xdd\x29\xf0\x9b\x4c\x03\x2e\x4d\x01\xc4\x23\x82\x93\x1e\xe9\x68\xe2\x24\x25\xe5\x0a\xaf\x7a\x55\x5c\xdb\xb5\xb1\x41\x6f\x33\x06\x2b\xb3\x40\x8c\xc9\xb9\x80\x21\xfb\x1e\x05\xec\x26\xda\xbd\xec\x71\x36\xcd\xe0\x24\xa2\x30\x68\xea\x61\x98\xf7\x41\xc8\xa3\x98\xbb\xb6\xd8\x21\x9f\x0b\x2e\x63\x42\xde\x90\xa5\x75\xc4\x20\xa1\x3d\xb7\x4a\x12\xb2\xbb\x3c\x78\x18\xfd\x0a\x8a\xee\x22\x17\xb6\x76\x3a\x6c\xb9\x6b\x0c\x6b\x56\x21\x8a\x6d\x3e\x4f\x79\x6d\xe4\xc8\x82\xa1\x2e\xaf\x26\x21\xc0\x91\xcb\x3d\x67\x92\xe0\xde\xb0\x93\x47\x26\x67\x75\x1b\x58\x77\xad\xb4\x5e\x48\xe2\x98\xae\x4a\x30\x35\x34\x69\xbb\xb3\x56\x94\xa3\xeb\xc2\xbb\xa3\xd7\x65\x37\xe7\xcb\x92\x4c\x63\x7b\x95\x1c\xa5\x58\xf3\x2e\x64\xc2\x23\x78\x90\x68\xa2\x49\xc8\x59\x4b\x75\x5e\x3b\x42\x07\x99\x38\xa9\xe8\x34\x52\xb5\x46\x48\xc6\xa5\x4c\xb3\xfb\xb1\x09\xe9\x16\x7c\x28\xf9\x3c\xaa\xf2\xbb\x05\x78\x0b\xb6\x8a\xdd\xf3\x6c\x5a\x04\x47\xe0\x36\xb1\x20\x69\x26\xf6\x3c\xce\x79\x56\x13\x46\x58\x76\x83\x33\xd8\x0d\x99\x74\xc9\xdb\x28\xd5\x5b\x9a\x67\xf4\x4e\xc9\xc3\xbb\xca\xdd\x7e\xb1\x64\x15\x12\x46\x4f\x0b\x40\xd6\x34\x4f\x5c\x06\x65\x84\xc0\x8a\xa2\x0f\x95\xdc\x26\xcc\xb9\xa5\xa6\x4e\xd8\xc0\x85\xf9\x29\xb6\xce\xc9\x49\x3d\x31\xad\x09\x02\x43\x39\xd2\xf0\x23\x4c\x04\x14\xdf\xe6\xec\x10\x91\xab\xdc\xc6\x32\xa0\x10\x7a\x05\xea\x5e\x50\xc1\x12\x71\xa2\x49\x08\xd1\xd7\x08\x9a\xe2\x1b\x48\x11\xec\x62\x68\xce\xfc\x52\x67\x65\xe0\xe8\x99\xde\xb5\xbe\xe9\xa3\x6f\xf4\x42\x56\x75\xea\x28\xed\x0c\x94\x85\xdd\xe9\x56\x9e\x6b\x8b\x9d\xd4\xa4\x58\x26\x4d\xe3\x89\x81\xe4\x5c\x39\xd9\xee\x1a\x39\x8a\x3e\xaf\x1e\xc9\x46\x97\x42\x9a\x86\xc2\x13\x56\x72\x98\x7a\x74\x65\xc6\x3a\x50\x94\x7a\xdf\x43\x4b\xe3\x52\xa5\xcb\x26\x04\xb8\xab\x0b\xe7\xcc\x6c\x10\xdb\xe2\x73\x3a\xa0\xc5\xc7\xf0\x8f\x95\x20\xaa\xc4\xd6\x34\xa9\x38\xd9\xc9\x8e\x1d\x0b\x83\x10\x38\x10\x91\x2b\xb9\xbb\xb6\x0f\xb7\xd6\x81\xa3\x62\x38\x7d\xa5\xeb\xe4\x21\xc9\x66\xd6\xec\xbe\x11\x62\x81\xa5\x9b\xaa\xdd\x2d\xae\x25\x62\x3c\x46\x3f\xd3\x46\x1e\x46\xfd\x1f\xd5\x4b\xde\xd0\x76\x25\xcd\x95\x08\x50\x1b\x92\x0e\x5c\x37\xe1\xcf\x34\x7b\xad\xdd\x29\xcc\x53\xe2\xf4\x44\xd2\xd0\x53\x4e\x53\xa1\x57\x3b\x76\x97\xbd\x2b\xf9\x9c\x04\x2a\xb2\x05\x0d\x41\x9f\x6b\x4b\x1b\x06\xda\x06\x1e\x28\x61\xc8\xd4\x45\x5c\xc0\xe6\xf0\x97\x38\x47\xf2\x6b\x8f\xe3\x60\xe4\x2e\xf1\x30\x0e\x27\x60\x33\x88\x06\xb3\x2a\x98\x82\x36\xc3\xa8\x54\x30\xda\x1a\x61\x6b\x8c\x6e\xe3\x0c\xf3\xc4\x89\x01\x46\xaf\xf3\xa4\xb7\x35\x80\xa3\xea\x2c\xb1\xe0\x0a\xd1\xa5\x8f\x69\x09\xca\x7d\x25\x1d\x75\x2f\x67\x80\x57\x65\xf9\x6c\xed\x14\x60\xc1\xab\x59\x25\xd1\x46\x6e\x33\x2f\x89\xdb\x99\xb7\xc3\x45\x8b\xb2\x75\x7c\x14\x76\x51\xa3\x29\x0e\x29\x05\x84\xce\xae\xe1\xe2\xd1\x30\x45\xe4\x3e\xac\x9e\xa5\xf2\xbb\x5a\x51\xb4\xe6\x79\xc2\x6b\x38\x69\x9b\x23\x3d\x0b\x91\x99\x31\xb3\x27\x97\xf8\xec\x09\x2e\xa9\x55\x69\x0d\xc1\x93\xac\xeb\xd8\x83\xd2\x77\xdd\x58\x73\xb8\xae\x95\x71\x75\xd8\x0a\x55\x2e\xcd\xed\xb1\xdb\xeb\x68\x4c\xcf\x05\xfa\x60\xb1\xba\x7a\x20\x84\x1c\x6c\xe8\x18\x99\xdb\xbb\x98\x17\x4d\x21\x99\x2f\x7a\xed\x21\x17\xbc\xc0\x56\xa1\xc6\x6c\x31\x96\x72\x2f\x17\x0a\x47\xa1\x1e\x5d\xd0\xf0\xc3\xd1\x4a\x96\xa2\x73\x3d\x9c\x7c\x1e\x85\x4e\xdd\x90\x7c\x68\xbe\xfa\x64\x04\xb4\xc0\x8d\xf1\x6a\xe8\x6d\x01\x13\x17\xb5\xe9\x9c\x4c\xc5\x4e\x43\x27\x3c\xb7\x73\x51\xcf\x7d\xf3\x9d\x96\xbb\x84\xb2\xc8\x11\x72\xb3\x67\x1a\xd6\xc4\x4a\x2d\x3a\xd1\x76\xda\x88\xa5\x45\x15\xf1\x64\x17\x81\x8e\x6e\xb3\x58\x32\x2b\x1d\x29\x9a\x5e\xee\x42\x73\x5b\xb1\xbe\x1d\x05\x7b\x7d\xd9\x75\x00\xbd\xb5\x56\xf3\x80\xb3\xb3\x5d\xab\x99\x80\x3b\xcf\xcc\xea\x29\x6a\x84\xe8\x52\x7a\x68\x7a\x9b\x60\xfc\xb1\x7c\x82\xa4\x32\x23\xc1\x86\x3d\x47\x2b\xd5\x24\xc6\x05\x2a\x24\x48\x14\xec\x43\xbf\x74\xcd\x19\x72\x69\xf7\x0b\x9f\xce\xdd\xf5\xc9\xf3\xcb\x86\x4b\x4e\xdc\x0d\xc2\x5c\x4c\x16\x94\xe8\x8a\x72\x63\xf9\x26\x31\x12\x5b\x47\x4e\x2a\xe8\x18\x87\x7c\x50\x02\x88\xb9\xcd\x20\x3f\xb5\x95\xad\x48\x42\x9e\xa4\xed\x4b\x0c\x6a\xeb\x12\x07\xd7\x78\x1b\x7b\x20\x33\xc8\x42\x5a\x8d\xbb\x36\xa9\xeb\xd9\xb6\xa2\xc0\x5d\x5b\x59\x02\xcd\x42\x05\x18\x7e\xc9\x79\xb1\x86\x38\x72\x0b\x55\xc7\xa9\xf2\x5a\x95\xe9\x61\xb5\x59\x16\x1a\x7a\x62\x89\x14\xdc\x30\xb9\x8b\x66\x6e\x4e\x19\x8f\x23\xa9\x00\x6b\xf4\xc9\x3d\xd6\xac\x5f\x32\xac\x1e\x00\x2c\x8e\x6c\x2e\xe6\x98\x42\xe9\xd6\x0c\x78\x1a\xc7\x53\x60\x0f\x0b\x57\x3c\x0a\xef\xbe\xa1\xed\x12\x51\x45\x93\xe0\xd6\xe4\x65\x3a\x0a\x18\xf8\xba\xa8\x56\x2a\xc2\x0d\x6d\xe4\x5a\x47\x73\x4b\x42\x61\xd9\x5e\x1c\x06\xb4\xf4\xbb\xea\x0d\x32\x8f\xa9\x76\x79\x36\x58\xfd\x62\x39\x8f\x9c\xf9\xb0\x71\x17\x70\xc8\x05\x57\x5a\x47\xe6\x1e\x7b\xa3\x74\xf0\x87\x77\x07\x9f\xed\xae\xad\x4d\x99\x29\x9c\xd7\x48\xe0\x02\x26\x6f\x85\x71\x1a\xc0\x02\x4b\x26\xc3\xfd\xde\x47\x5e\x3e\xbb\x29\xad\x6b\xe7\xd6\xe4\x12\xa5\x97\xbb\xc0\x55\xdd\x5d\x95\x84\x79\xcd\xda\x41\x32\x45\x35\xe9\xde\x74\x48\xb6\x10\x95\xb9\x68\xf8\x48\x6b\x00\x47\x8f\x73\x3f\x49\x53\x45\x6d\x77\x6d\x20\x5d\xba\x9c\x0d\xe0\x10\x57\x76\xf3\xe8\x84\xd6\x33\xb2\x81\x3a\xaa\xd1\x4c\xc1\x8b\x14\x10\x29\x2a\x5d\xa3\x98\x19\xb4\xa9\xc5\xee\x02\x57\x43\x13\x42\x18\x73\x20\x8e\x51\xbf\x06\xc0\x4c\xf9\x06\x72\x73\xab\x73\x4e\x45\x80\x6a\xcf\x03\x2b\xd4\x98\x31\x5e\xa2\xab\x96\xbb\x90\x96\xc2\x94\xd9\x80\x93\x67\x65\x53\x0c\xb4\xb3\x43\xe5\xfd\x38\x4b\xca\x36\xdb\x02\xf7\xcd\x2d\x44\x94\x05\x1d\xa1\x52\xea\x2e\xee\x13\x70\x35\xc4\x9e\x5e\x14\xb5\x97\x6a\x97\xb4\xf9\x14\x17\x11\x86\xca\xec\xb8\xa9\x4d\xe1\xcc\xa3\x10\x92\xab\xe2\x16\x6f\x61\xa0\xfe\xc0\x9e\xf1\xef\x24\x9f\x47\x4d\xd0\xee\x30\xa8\x51\xd7\x7e\x36\x87\x2c\xd9\xc0\x5c\xe7\x19\xd7\x50\x3b\x2c\xbb\x77\x22\xcc\x59\xcf\x44\x95\x2b\x84\x33\x26\x75\x0e\xd4\x2c\x7f\xdb\xca\xb8\x44\xb5\x3a\x16\x2c\x27\x52\xe2\x01\xa3\x2c\x17\x5e\x58\x2a\x3d\x95\x3c\x7d\x76\x5d\xac\xb2\x61\x21\x72\x9e\x07\x55\xdd\xb9\xbb\x88\x45\x04\xe8\x0b\xba\x55\xf0\x71\x4e\xa9\xa4\x17\xc3\x97\x83\xf3\x15\x72\x90\x9e\x97\xbd\x15\xb4\x11\x03\x06\x3f\x92\x07\x33\x7b\xc1\x6e\xf3\x43\xd8\x7c\xc5\x59\xc8\xb2\xce\x24\xfa\xc6\x51\x27\x97\x1e\xd0\x2d\xd1\xbc\x41\xb2\x11\x44\xa4\x9b\x44\xf1\x0b\xae\xa3\x54\xaa\x0a\xbb\xeb\x43\x43\x75\xf7\x51\xd0\xad\x82\x68\x6a\xbe\xe4\xb9\xef\x6d\x9e\xa5\x39\xa1\xb1\xe5\xab\xf0\x9e\x6b\xf4\x58\xd6\xc5\x70\xf6\x73\xb2\x79\xd7\x99\x70\x1f\x2f\xc2\x65\x54\x61\xc6\xd4\x89\xa6\xc0\x94\x13\x11\x45\x88\xcc\xfe\x7f\xba\x07\x0b\x6e\xa3\xb0\x5e\x68\x52\x6b\x18\xc2\xde\x86\x3e\x55\x9b\x48\x8b\xf6\x80\x51\x5f\xaa\x0b\xac\x31\x30\xc9\x3a\xc7\xb8\x20\x0c\x4a\x0b\xb7\x02\x9c\x83\x11\x46\xd0\x57\x36\xb7\x89\xda\x52\x73\xa5\x31\x5b\x72\xf3\x1c\x42\x8b\x65\xaa\xa1\x60\xa4\x3a\x42\x21\xb5\xc4\x69\x36\xb0\x63\x6e\x75\x72\x27\xac\xc7\xe6\x09\xac\xf5\xa1\xe4\xf3\xa8\x99\xfc\x1d\x80\xb3\x03\x9c\x59\xed\x2f\xc5\xa4\xe0\xb3\x8a\x59\xcf\x08\xc0\x2c\xd7\x8e\xa0\x85\x61\xe6\x83\xca\x3d\x13\x08\xb8\x38\x2e\x55\x55\xbe\x6b\xda\x75\x89\x84\x69\xda\x3b\x28\x36\xc8\x23\x6c\x23\x69\x73\x78\x3f\xec\xb8\x3c\x31\x46\xc6\x1c\xd9\x02\x7b\x5f\xe7\x1e\x8b\x31\x3c\xd1\xbb\x96\xd7\xaf\x33\xf8\x82\x0d\x3b\x56\x98\x1c\x8e\x49\x00\xd8\xb8\xbb\x8c\x25\xc6\x6e\x28\x70\x9b\x77\x43\x8f\x71\x10\x4e\x3a\xf7\x3b\x0f\xf9\xae\x66\xa7\x13\xd2\x11\x4a\x22\x00\x89\x75\xf0\x45\xf5\x63\x19\x40\x60\x5b\x29\x7a\x4d\xca\x36\x58\xad\x11\xf8\xe2\x0a\x06\xe1\xd4\x93\xdc\x05\xae\x36\x71\xa5\xdd\x11\xc1\xce\x68\x1b\xe1\x8b\x71\x70\x6e\xf0\x0a\x36\x1a\x46\x8a\x2f\xee\xc0\x87\x9c\xd7\x85\x3b\xa9\x6c\x3b\x98\x24\x37\x29\x6a\xd3\x0b\x16\xa8\x66\x4d\x22\x36\x3c\x15\x3a\xe3\x21\x0f\x11\x23\xba\x5a\x21\x15\xc9\xb9\xad\x66\x24\x01\x87\x33\x87\x95\x16\x21\x9a\xef\xb2\x89\xed\x40\xb3\xba\x84\x81\x69\x41\x82\x10\x3d\x6c\x59\x12\xe0\x6a\x06\x73\x3e\xf7\xa3\xcb\x2a\x1c\x27\xbd\x7a\x34\x64\x9f\x47\x58\x77\xf9\x23\x36\xe8\xe8\x2c\x2e\x0f\x5d\xe0\x50\x95\x2a\xcf\xd4\x3e\x04\xe7\xc7\xdc\x5d\x15\xe6\xe0\xc4\x6f\x89\x97\x23\xb4\x43\xd6\x36\x12\x31\x0f\x91\xad\x1e\xa5\x96\xf5\x7b\xc8\x56\x6f\xf7\x9a\xf7\xfe\x0b\xcf\x2b\xef\xf7\xd1\x8f\x7b\xeb\x0f\x7a\xfe\xcf\xe0\x77\x7d\xf1\x37\xbe\x55\xfa\x8c\x3f\xff\x1f\x7f\xe9\x53\x5f\xf7\xb3\x7f\xf9\xbb\xfe\xfe\xe3\x9e\xf7\xca\x07\x42\xe5\x97\xbf\xea\x43\xcf\x37\x3f\xe9\x85\x3f\xfe\xb8\x57\x7f\xe5\xdb\x7f\xf3\xf3\xdb\x33\x9e\xf3\x27\xd0\xeb\xfe\xdc\x77\x7e\xd1\xa7\xf6\xef\xfc\x9b\xf4\x97\x3f\xe5\xe7\x1e\x08\xfd\xf1\xb7\xff\x7b\xaf\x7b\xfe\x9b\xdf\xf7\xe7\x9e\xf4\x69\xaf\xf8\xa5\xe7\xfc\xdb\xcf\x79\xfa\x0b\xbf\xeb\x8b\xf8\xeb\xca\x9f\xd4\x6f\xf7\xc3\x4f\x7b\xee\x6f\xff\xc2\xfb\x3f\x28\x57\xf5\xa6\x4f\x79\xfc\xdb\xfd\xa7\x8f\x7e\xc1\x8f\xfe\xef\x2f\xf8\xee\x5f\x78\xb7\xff\xf6\xc9\x7f\xf0\xd7\xde\xf3\x89\x3f\xf3\x01\x6f\xf5\xc6\xaf\xfc\xe9\xff\xf1\xc9\x3f\xf8\x78\x72\xbc\xe3\x03\xa1\xcf\xf8\xaa\x4f\x7a\x8f\xc7\x3f\x65\x7e\xee\x67\xff\xa5\x3f\xf0\x71\xef\xfc\x59\xcf\xfa\x68\xfd\xe2\xff\xfa\xfe\xff\xee\xc7\xde\xed\x8b\x7e\xe1\x2b\x9e\xf9\xe3\x1f\xf6\x96\x8f\x79\x30\x34\xbc\xe3\x3f\xfa\xd6\x8f\x7e\xdf\xf2\xe9\x2f\xf9\xd2\xf7\xb9\x3e\xea\xd7\xff\xe0\x77\xbc\xe0\xab\x3f\xfa\x93\x9e\xf1\x0b\x1f\xf3\x25\x7f\xfc\xe5\xff\xf1\x9f\x7d\xe4\xcf\x7f\xf9\x67\x3e\x10\xfa\x75\xcf\xff\xd7\xfd\x75\x7f\xf1\x6f\x86\x7f\xf6\x86\x5f\xf9\x86\x3f\xfe\xbe\x1f\xff\x4b\xcf\x7b\xc2\x7b\x7c\xdc\xeb\xff\xfa\xab\xdf\xf6\x49\xcf\x79\xd3\x0f\x7f\xeb\xcb\x88\x7f\x20\xf4\x85\xef\xf2\x15\xef\xfa\xf9\xcf\xdf\xdf\x97\xbf\xf8\x45\x9f\xf6\x49\x9f\xf5\x8b\x1f\xf4\x51\xaf\xfd\xb5\x3f\xbd\x3e\xef\xfb\xde\xfd\xf7\x7f\xee\x17\x7f\xc9\x0b\xf4\x27\xfe\xfa\xef\x92\xad\x1e\x75\xaa\x77\xac\x58\x5f\xf0\x94\xa2\x70\x41\x44\xa1\x54\x40\xda\x67\x95\x25\x37\x11\x56\xf5\x8c\xfb\xb1\x5d\x5c\xc5\x0d\x99\xa2\x80\x62\x4b\xc4\x72\x93\x54\x07\xf5\x5b\x97\x68\xbf\x60\x82\x48\x5f\xbb\x2c\xa5\x8b\xd0\xeb\x31\x0b\x20\x0b\xca\x5d\x58\xb2\x91\x2e\x12\x93\xd6\x16\xe4\x4c\x01\xfa\xae\x39\xf6\x29\xec\xa0\x15\xd7\x51\x63\x34\x9d\x80\xb5\xab\x78\xad\x2c\x62\x6c\x9c\x19\x5f\x56\x61\x55\x2b\xc9\xfb\x81\x54\x89\xc5\x9e\xb7\xf1\x1d\xec\x36\xed\xbe\x87\x4b\x6d\x03\x11\x17\x84\x25\x89\x2e\x3e\x7b\x4e\xd3\x9d\x9d\xda\x00\xf0\xe4\xee\xa2\x04\xef\x97\xb2\x72\x9d\xb7\x8d\x1c\x43\x10\x5b\x30\x74\xaa\x6b\x0a\x2d\x4c\xdd\xb6\xb3\xe6\xaa\xa5\xe5\xfc\x8a\x51\x97\x66\xaa\xba\x44\xbb\x36\x96\x01\x49\x02\x89\x79\xd7\x5b\x94\x0e\xe1\xc3\x99\xed\x18\x29\x6f\x8b\x9d\xa7\x9a\x97\x55\xcd\x91\x98\x42\x45\xad\x43\x44\x1c\xae\xc4\x65\x90\xa1\x1e\xdb\xee\xc8\x5d\x50\x71\xb3\x14\x70\xef\x52\xde\x12\x86\x0d\x02\x0f\xd3\x12\x2c\x99\xa2\x74\x6c\xca\xee\x0e\xad\xed\x80\x8e\x51\x73\x5a\x94\x56\xe9\xb7\x89\x02\x48\x88\x20\x9e\x2d\xd8\xc9\x1d\xa6\x84\xb0\x1e\x7a\x2b\xdb\x0a\xa4\x56\x70\x4c\xc2\x74\xab\x7e\x21\x24\x2e\x45\xc9\x61\xe3\x34\xfc\xa1\xf2\xf3\x51\x79\xfa\x86\xe4\x83\xb0\xbf\x26\x19\x18\xaf\x40\xd4\x58\x69\x8f\x9c\x69\xea\x01\xd7\xe4\x62\xa5\xe8\x24\x24\x85\xf8\x88\x8c\xe9\x60\xfc\x29\x86\xbe\x69\xbd\x87\xc2\x2b\x0d\xd8\x2f\x0b\x2d\x8a\xa7\x3b\xa1\xd1\xa3\xe9\x4e\xae\x05\xad\xb0\xc2\x1d\x78\xb8\x58\x55\x5c\xdb\x9e\xcd\xba\x0e\x32\xe8\x4d\xd7\x9b\x10\xe6\x18\x74\x9a\xf1\x2b\xc5\x91\x9c\x30\xe2\x12\x90\x04\xe6\x3b\xf4\xfb\x36\x40\x50\xc8\x8e\x63\x62\x46\xd4\xce\x51\x59\x89\xdf\x25\x2e\xd3\x86\x0d\xd7\xd9\x82\x9e\xee\x6c\xb2\x1c\x10\xed\x0a\x15\x3a\x0b\xf4\xd7\x6e\x94\x39\xb6\xe3\xa4\xd2\xa2\xf3\x9a\x5a\xf0\x2b\x9c\xec\x2e\x36\xb9\x45\xf2\xb8\x68\xe4\x33\x75\x5b\x0d\xc9\x40\xcf\x40\xb4\x8e\x8a\x15\x26\xbb\x52\x34\x4e\xcf\x47\x9b\x78\xf3\x81\xaf\x01\x9d\xbe\x8b\x6c\xb5\xe9\x64\xd6\xa6\x9d\x2e\x87\xe2\xaa\x4d\xd5\x83\x29\x51\x7a\xa2\x30\x2d\x23\x84\x0c\x22\xb0\xb2\xd2\x32\x6b\xa9\x99\x9d\xd7\x5d\xbb\x85\xb4\x12\xd0\x32\xa8\x1c\x08\x47\xfd\xe4\x18\x29\xb1\x28\x5e\xc7\x84\x31\x6b\x54\x31\xe8\x83\x7a\xbe\x6d\x56\xdb\xa2\x02\x41\xf2\x36\x81\xf5\x1c\x25\x69\x4c\x5c\xbc\xe6\x12\xd2\x65\x30\x25\x97\x99\xdd\x40\x8b\x27\xa7\x94\xc1\x60\x77\x4d\x88\xda\xdd\x09\x4e\x40\x4b\x5f\x0f\x2f\x1a\x3d\xaa\xf2\xbb\xc3\x9c\xb5\x46\xbf\xe9\xd4\x3a\x5d\x86\x27\x11\xbd\x47\xa4\xf6\x8d\x2b\x0c\x73\xe8\xed\x88\x3c\xf9\x68\x9d\xe6\x8d\x74\x4d\xe2\xc9\xef\x22\xed\x52\x77\x69\x9c\x74\x1a\x7e\x57\x50\x1c\xd6\xa5\xa9\xea\x59\xec\x4e\x4c\xf6\x33\x69\xcd\x8f\x23\x1d\xfb\x9c\x4e\x4c\x37\xd1\x60\xe7\x5d\xc9\x87\x5e\x36\xe8\x02\x04\x5f\x68\x0a\xeb\x6d\x3e\x34\xe6\xe0\xd4\xae\xfa\x75\x4d\x63\xf2\x5e\x36\x1b\x80\xbb\xe8\xac\x9b\x74\x64\xd6\xbb\x3c\x23\x49\xa5\xe1\x80\x5c\x61\x23\xfb\xe5\xa4\xc8\x6e\xdf\x60\xa7\x00\x19\xd5\x33\x41\x7a\x6c\x81\xa2\x4b\x82\x4e\xe8\x71\xec\xdc\x91\x7d\xde\xb5\xf9\xa9\xf6\x92\xe2\x01\x91\x92\x39\x81\xec\xdc\x50\x49\xa7\x4b\xb5\x53\xf7\xa3\xe3\x4e\xf2\x8e\x00\x18\xdb\x46\xd7\x79\x75\x1c\xb6\x70\x17\x32\x41\xa6\x8a\x76\xa9\xeb\x10\xfb\x94\x73\xdf\xf7\x58\x03\x5e\x51\x46\x44\x53\x86\x9a\x42\xe1\x72\x0d\x56\xaf\x89\xa2\x86\xcb\xc7\x4d\xdf\xf5\x48\x35\xb4\x71\x5a\x93\x27\x69\x3b\xf0\x65\x0c\x5e\xeb\x38\x55\xd3\x45\x9d\x8a\x85\x4d\x49\xee\x76\x2b\xad\x0f\xd5\x2c\xda\xb6\xc5\xb6\xbb\x1e\xee\x4d\x17\x64\xaa\x3d\x73\xe0\x09\xc7\x7e\xc4\x8a\xf8\x54\xf2\xd4\xdb\x2a\x78\x64\x6b\x90\x65\x0d\x07\x30\x00\x53\x15\x11\xd0\xd9\xc3\x4c\xcf\x47\xf5\x92\x77\xc8\xea\x31\x05\x31\x88\x4e\x7b\x47\x4e\xaf\x67\x99\x7e\x8f\xe4\xd4\x17\x34\xb5\xa8\x3e\x18\x6b\x92\x79\x7b\xee\x7d\xb7\x59\xbb\x51\xeb\x5d\x2b\xd6\x29\x1e\x45\x46\x4a\x52\xef\xfb\xe1\x31\xdd\x4c\x89\x60\x13\x32\xc5\x03\x5d\xbe\xc9\x0c\x98\x58\x91\xe3\xd4\x8d\x39\xcf\x4a\xa6\xbd\x0b\x57\xbe\xc0\xe9\x5a\xd4\xf4\xf4\x79\x6e\x24\xb3\x22\x8f\x7a\xe5\xe4\x34\xc8\xdb\x79\x6c\xa9\x05\xed\xa8\xe5\xae\x03\x12\xac\xe4\x2c\x9a\xbb\x26\xea\xfa\xdc\x38\xf5\x04\x8c\xd0\x54\x90\x92\x87\x92\xb4\xa5\x0c\x13\xe2\x8d\x33\x23\xfb\x3d\x4b\x5e\xca\xc6\xce\x79\xa5\x21\x58\xa9\x37\x0d\xfa\xe8\xc9\x08\xc9\xc7\xd5\x28\xa7\x55\x54\x2b\xb7\x78\xf1\xe0\x0e\xc8\x82\xd9\x49\xc4\x4b\xb5\x38\xb9\x30\xf0\xb0\x15\x5c\xc0\xb5\x30\xef\xa2\xc2\x65\x4b\x16\x93\xb2\xa3\x36\xe2\xdc\xfc\xae\x78\x0a\x16\x29\xd7\x30\x59\x2c\xa9\x54\xb9\xa7\xc3\xeb\xa3\xeb\x2d\x74\xe9\xb9\x5e\x77\x59\x86\x98\xab\x5f\xe3\x3c\x54\xe3\x30\x4b\xb7\xa7\x36\x14\xf6\x69\x84\xde\x53\xc4\x99\x50\x4d\x5d\x22\x07\x2e\x94\xd0\xeb\x54\xdd\x39\x7d\x57\x03\xb8\x5f\x9a\xb1\x6e\xf6\xb9\x30\xca\xb6\x5a\xb6\x31\x95\x18\xe3\xcd\x93\x7e\xd0\xbd\xc1\xa8\xd3\xc8\x01\x11\x05\xe2\x55\x4f\xcb\xd8\xc3\xa8\xff\xa3\xd0\xa9\x3b\x30\x9f\x96\xc4\x5e\x05\x0a\x74\xdf\xbb\x22\x33\xdb\xcd\x38\x24\x06\x66\x0e\x5a\x1b\x3c\x1f\xce\xe2\x23\x45\xc5\x53\x85\xa1\x96\xb1\xee\xc2\x7c\x5c\x8e\xb0\x2c\x50\x4c\xe5\x1b\xbe\x2e\x76\xee\xde\x9f\xa3\x0a\x9c\x8c\xa9\xb8\x3a\xb3\x8e\xf3\xdc\xd3\x05\xbc\xe9\x36\x81\x05\xc8\x5d\xf8\xc6\xc5\x76\xa8\x5d\x8f\x54\x15\x5c\x61\x4e\xab\x72\xe2\x1c\x95\x90\x90\x3c\xb0\x40\x5b\xaf\x7d\x03\xde\xa5\x08\x46\x42\xcd\x39\x77\x17\xed\xab\xf7\xcb\xae\x6d\x0b\x0b\xd1\x72\x51\x92\xfc\xca\x24\x32\x4f\xfd\xd6\x7d\x71\x30\x75\x01\x16\x6c\xc1\x4c\xdf\x77\x99\x2f\xea\xd9\x5d\xaa\x0a\xd4\xb0\x7a\x1d\xf0\xa2\x84\xf0\x08\x27\xc1\xf9\x0c\xf8\x30\x14\x4c\xaa\xbc\x07\x15\x06\x03\x2f\x88\x83\x77\x12\xc9\xd8\xac\xa4\x77\x21\xdc\x54\x8e\xc1\x54\xe8\x23\x0e\xe0\x58\xc8\xdb\x45\x76\x9a\x21\x86\xa8\x97\xf3\x8a\x19\x98\x8e\x81\xdc\x69\xbe\xf6\x83\x61\x77\x1c\xf9\xae\x7a\xe3\xd8\x0e\x32\xb8\xcc\xb0\x30\x26\x57\xbc\xf8\x3e\x06\x85\x8e\x1c\x07\x25\x8a\x27\x1c\xdc\x64\x27\x26\xd1\x69\x18\xa4\x9f\xbb\x32\x77\xfd\x3a\x7c\xbf\xa4\x97\x9b\x83\x8f\x35\xe9\x03\x5c\x86\xe1\x72\xce\xb0\xca\xc1\xe5\x65\x0b\xdb\x69\xc9\xdd\x1a\x18\x18\xa7\x0e\x1e\x94\x3e\x40\x85\xfb\x5d\x8b\xb2\x47\xe0\xdd\x37\x54\x3e\x0c\x6f\xfb\xbe\xf2\xde\x1d\xbc\x76\x8c\xf4\x71\x70\x11\x0c\x10\x14\x11\x4c\x61\x28\xa5\xd7\x19\x4f\x1c\x8a\xd2\xac\x08\x6c\xf7\xdb\x46\x49\x85\x93\xa2\xc4\xa8\x18\x9c\xb4\xb1\x2e\x58\x5b\x80\xb7\x1e\x10\xd2\x47\x12\x4c\xad\x9d\x05\x90\xf6\x11\x21\x96\x0a\x37\xb2\xad\x9b\x76\x5c\x1e\xeb\x64\x98\x82\xb5\xf0\x1c\xeb\x0e\x4c\xea\xa9\x95\xee\x87\xaf\x11\x07\x3c\x14\x9a\x11\xda\xfd\x40\xd2\x61\x1b\x2f\x55\xe4\x3e\xef\x4a\xc8\x40\x51\xb7\x40\x9c\x95\xe4\x2b\x19\xd6\x41\x6e\x8b\x4b\x6f\x99\xbb\x7c\x2f\x68\x3b\x56\xe0\xc9\xb6\xe4\x35\x02\x0d\x5d\xe1\x41\xd1\x90\xff\x6f\xef\xc9\x80\x6b\x29\x00\x36\x53\xf1\x26\xac\x6e\xc6\x5d\x0e\x8c\x0b\x32\xba\xb3\x73\x2d\xa9\xc4\xb4\x7d\x69\x21\xe4\x7e\x6e\xfe\x00\x9e\xdd\xf5\xeb\x50\x7b\xa0\x45\x2b\x55\xc7\x21\x30\xc9\x2d\x2c\x10\x2c\x65\x9b\x1a\x75\x30\x7c\x64\x82\xb3\x0a\x23\x28\x2d\x04\x63\xae\x7b\x64\xee\x72\x10\x8f\x41\xf3\x0d\xae\x32\x15\x91\xfe\x42\x69\x08\x27\xb4\x42\x38\x1e\x7c\x3f\x21\xd5\x7d\x76\x92\x2e\xa4\x3a\x04\x50\x43\x66\x1d\xbd\xab\x6b\xe8\x87\x1d\x9c\xa4\x29\x77\xc0\x7d\x52\x02\x32\xe7\xf5\x63\x3f\x4c\x1c\x10\x16\x00\xcc\x9a\x6c\x6f\xa1\x2a\x38\xfd\x04\x38\xb9\xf9\xb0\xac\xde\xa3\x26\x68\x37\x54\x3e\xd7\x1e\x5a\xe1\x3c\xf2\x15\xed\x7a\xac\xbe\xb7\xca\x59\x20\x54\xd2\x7e\xce\xbd\xa8\x43\xcc\x49\x12\x8b\x83\xb6\x33\x46\xd5\xf7\xdb\x26\xea\x67\x76\x8e\xe8\x9d\x0e\x81\xd7\x80\xfe\xda\x0f\x59\x13\x03\x11\x7b\x82\x6a\x6b\xd9\x5c\xcc\xd4\x6d\x8a\x33\x74\x06\x88\x47\xd4\xde\x75\xa9\x5a\xe8\x61\x56\x22\x8d\x3a\x74\x50\x6c\x01\x16\x37\x09\x87\x9a\xeb\x98\x99\x44\xca\x2a\x3d\xae\x49\x1a\x1d\xe0\x52\x99\x6a\xec\xee\x9a\xa8\xa7\xa5\xe3\xc1\x3d\xbf\xcc\x25\xfb\x79\x8c\xeb\xdc\xce\xff\x9b\xbd\x37\x8d\xfb\xa9\x5a\xe3\x87\x49\x52\xc9\x94\x79\x08\xc9\x10\x25\xec\xbd\xd7\xda\x99\x89\x22\x32\x35\x98\x42\xf6\xbc\xd7\x1e\xd6\x9e\xd6\x1e\xd6\x46\x19\x43\xa2\x28\x95\xc8\x90\x14\x51\x99\x67\x92\xa9\x09\x19\x12\x92\x22\xf3\x54\x19\x2a\xb3\xe7\xd3\xe9\x39\x1d\x77\xf7\xdd\x53\x7f\xe7\x77\x7f\x9e\xf3\xe2\xff\xc2\xbb\xcb\xfd\xf9\xfe\xd6\xbe\xae\xef\xba\xe6\xc5\xb0\x92\xe7\x48\x5a\x6a\xc6\x4a\x60\xd9\x01\x62\x62\x95\xb0\x9e\x9c\x1a\x72\x22\x42\x3f\xb7\xde\xed\x16\x89\x69\x04\x06\x72\x1d\xcf\x0d\x54\x5f\x25\x98\x42\xc6\x26\x1c\x56\x3d\x9f\xe8\x2e\x02\x88\xd7\x08\x56\xa0\x17\x32\xc0\x81\xa6\x03\xf8\x20\xb7\xc6\x1f\x4d\xec\x0b\x80\x75\x4d\x68\x4b\x02\x95\x5c\x21\x10\xa3\x50\x25\x11\x4e\x64\x5d\x37\xa9\xad\xd1\xc0\x49\x38\x4d\x20\xb2\xa2\x58\x89\x10\x20\x47\xc8\xad\x50\x14\x89\x76\x80\x15\x2c\x78\xb1\x28\x03\x07\x6a\x88\x50\x00\x42\x85\xf2\x20\xb0\xb4\x48\x16\x64\x4d\x00\x9a\x05\x34\x9b\xea\x01\xaf\x86\x91\x96\x7b\x13\x48\x71\x48\xbd\x98\x81\xa6\xeb\xb1\x81\x2f\x84\x50\x95\x74\x96\x75\x38\x15\x11\xd6\x00\x69\xca\x86\x9a\xe7\x89\x36\x9f\x6a\xb6\x12\xc6\xd4\xe5\x19\x3b\x1b\xf9\xfc\x5d\x4d\x3e\x17\xc8\xc7\x48\x02\xca\x00\x9a\x48\x9e\xc3\x9a\x2c\xe7\x23\x8e\x53\x22\x29\x65\x11\x0b\x55\x8b\xe3\x14\xca\x7a\xbe\x13\xeb\x22\x56\xe2\x34\xf2\x6d\x9e\xe4\x56\x09\x55\xf0\x75\x45\x55\x01\x27\x21\xcd\x89\x13\xa8\x20\x91\x81\x40\xe1\xa3\x50\x23\x5c\xc0\xc4\x71\xea\x0a\x46\x24\x71\xb1\x0a\x2c\x23\xc6\xa9\x66\x7a\x4c\x6e\xdd\x23\x56\x1a\x5b\x09\xd4\xc3\xc0\x0a\x6d\xe4\xd9\x2a\xd2\x4c\x9e\x4b\x03\x1a\x8b\x86\x04\xf9\x10\x50\x36\x0a\x4c\x23\x55\x40\x02\x14\x8f\x83\x38\xa4\xb9\x35\x60\x27\x9a\xbc\x1a\x32\xbc\xa6\x11\x8e\x27\x58\xb6\xb0\x96\x44\x02\x2f\x49\xaa\x0d\x2d\xa2\xa7\x91\x18\x0b\x32\xa2\x4c\x0a\xd9\x90\xea\x91\x1b\xba\x4c\x6e\xf9\x60\x28\x4a\x6d\x16\xf0\x92\xa0\xf1\x09\x4f\x00\x8a\x1d\x64\xff\xe6\x7e\xea\x16\x27\x49\x88\x33\x80\x91\x3a\x02\x8c\x62\x35\x91\x2c\x40\xc2\xc4\xa2\xb9\xb5\xee\xd9\x4d\x84\x40\xc1\x2c\x95\x10\xe6\x13\x0b\x04\xa1\xe1\x71\xc8\x33\x6d\x98\x04\x84\xe1\x64\x35\xf4\x3d\x23\x85\xa9\xa3\x13\x8f\x55\x11\x46\x66\x90\x5b\xeb\x16\x18\x26\xe4\x3d\x2b\x75\x34\x59\xc2\x38\xa6\x3c\x92\x05\xc0\x18\x94\x80\x24\x88\x2c\x4e\xf5\x00\x74\x58\x55\x94\x22\x2e\x90\x3d\x1b\x68\x8c\x8d\x72\x2d\x3c\x27\x06\x0f\x79\xd6\xe0\x43\xc5\xe4\x19\x59\x64\x04\x9f\x31\xa1\x49\x39\xca\xfb\xbc\x67\x47\x26\x20\x2c\x4d\x7d\xc3\xe2\x5c\x88\x23\x5f\xe4\x03\x3b\x5b\xb3\xd5\xdf\xbd\x37\xf8\xa7\x66\xab\x1d\x8b\x9a\xf5\x2d\x31\xe8\xc8\xf6\xdb\x66\xbc\x52\x68\xf4\xf7\x1f\xcc\x93\xb6\xae\xaa\x58\x56\xb3\x77\xe4\x99\xdb\x66\x73\xb3\x51\x6b\x6b\x5c\x23\xfa\xf5\x85\xa5\x1b\x07\x9d\xa9\xcd\x9e\x3b\xf3\xc9\xde\x7b\xd8\x5e\xdd\x36\xd6\xbe\xba\x6e\x66\xf9\x5b\xbf\xff\x59\xec\x7b\xf7\x9a\x5b\xdf\xf8\xf2\x1a\xd1\xb7\x93\x27\x8b\x0c\x68\xda\xb0\xd9\xb6\x56\x6b\xe6\xb7\x66\xab\xc4\x85\x46\x6d\x13\x5e\xed\xbe\xed\xc4\xdc\x8b\xea\x91\xa7\xea\x94\x5f\x7d\x8d\xe8\x3b\x76\x1f\x67\x5b\xdf\x7e\x07\xfa\x2c\x18\xfc\x83\x5e\xf2\xf4\xdb\x35\x1b\xef\x6a\xfc\xe3\xd4\x0e\xa5\xe7\xae\x1e\xf5\xed\x4f\x97\x37\x5d\xdb\x41\xb5\xa8\x7c\xe5\x0a\x0d\xef\x18\xfd\xf8\xee\xc7\x2a\x6e\xac\xb6\xe1\xdd\x5d\x15\x6e\xfa\xf2\xca\xad\x9f\xcc\xc8\xdf\xea\xad\x43\xb7\x7f\xa2\x74\x9f\x77\xed\x03\x8d\xed\xde\xf2\x47\x34\x90\xce\x9e\xfe\xf9\xfe\xcf\x16\xb4\x7e\x63\xcb\xf4\xc5\x03\xf6\xbd\x55\xfc\xb5\x87\x48\xf5\xe9\xd3\x60\xcd\x4b\xc6\x35\xa2\x79\x97\x9e\x39\x79\x6e\xd9\xe5\x77\xc7\x56\x6b\x71\x2c\x1e\x73\xb8\xe5\x83\xdf\x37\x28\xdb\x75\xe8\x13\x95\x0a\x75\x27\x97\x1a\x4d\x2a\xb4\xeb\x1a\xd1\x9a\x07\xfb\x4d\x29\xda\xeb\xf1\x37\x17\x5d\x2c\x3e\xa7\xfc\xea\x5f\xdf\xbe\xf3\xd8\xb9\x49\xda\x2d\x57\xe2\x31\xec\x7d\x0d\x77\x2c\x89\x4e\xfd\xd1\x6c\xf5\x77\xa7\x9a\x1b\x25\x47\x5e\xe3\x35\x9b\x4f\x74\x29\xb2\xa0\x0a\x03\x53\xb7\x80\x20\x73\x8c\x45\x7d\x97\xf2\x09\x0e\x1c\x0b\xf9\xba\xc5\xea\x96\xc5\xa7\x92\x4b\x48\x6e\x2d\x97\x11\x43\x35\x41\x32\xb0\x13\xc9\xb7\x81\x95\x40\x5e\x15\x78\x2b\x62\x11\x67\xf9\x10\x11\x13\xda\x1a\x8f\x35\xcd\x12\xa8\x4d\xdc\xd0\x01\xbc\xed\x05\xb9\x55\x3d\xe6\x03\x45\x0e\x65\xdb\xe0\x91\x8a\x0c\xec\x58\xae\xc6\x52\x47\x74\x24\x0a\x39\xa2\x92\xc4\x53\x45\x33\x76\x75\xe4\x1a\x02\x17\x81\x28\x91\x1c\x29\xb7\x1c\x61\x45\x53\x30\xcf\x73\xa1\x2b\xfb\x26\x71\x65\x3d\x60\x09\x27\xfb\x5e\x2a\xe9\xbe\x64\xb3\x69\x2c\x43\x06\x08\x9c\x04\x52\x49\x76\x42\x5b\x72\x3d\x26\x97\xd2\x5d\xa2\x64\x07\xb2\x17\xc9\x48\x75\x38\x6c\xc5\x22\x09\xdd\x04\x23\xc5\xc4\x02\x21\x3c\xc1\xba\x0d\xa1\xe6\x01\x1e\x62\xcd\x0a\x64\xcd\xc4\x72\x22\xe6\xd6\x9a\x7d\x9e\x68\x1e\x12\x13\x25\x02\x1a\x75\x44\x2e\x0a\x90\x27\xeb\x36\xb6\xa1\x60\x86\x90\xb7\xac\x48\x13\x6c\x3f\x8a\x88\xa7\x42\x36\x30\x43\xe4\xe4\xde\xa6\xeb\x00\xa6\x11\x80\x29\x56\x13\x93\xc6\x92\x09\xb5\xd4\x32\x62\x62\xf0\x5a\xe0\x7b\xc0\x83\x54\x34\x83\x90\xb5\x18\x5e\xe4\x89\x24\x46\x06\xc9\xad\xb7\x7a\x45\x41\xb4\x58\x28\x6b\x8c\x14\x24\x26\xcb\xaa\x11\xa2\xa6\xe2\xfa\x90\x0d\x34\x57\x8d\x35\xc9\xa5\x98\x50\xc5\x8e\xfd\xd8\x92\x69\xcc\xe0\x58\x90\xb2\xf7\x3b\xfc\x1d\x4f\xe7\x02\xf9\xe8\xc8\x16\x58\x1f\x72\x80\x49\x59\x18\x00\x4f\x04\x16\x60\x79\xc2\xdb\x2c\x09\xe3\xd8\x91\x52\x10\xb9\x84\xe7\x79\x4b\x63\x5c\xec\xea\xa9\x9c\x6b\x23\xd6\x30\x8c\xa8\xa0\x48\x82\x11\x21\x09\xc0\x38\x92\x02\x37\x0a\x05\x14\xa6\xb2\x9e\x5a\xbc\x86\xbc\x10\x33\xb1\x05\x39\xca\x10\x8f\xa5\x42\xa2\xe4\xda\x7e\x07\x51\xd3\x7c\x36\x64\x80\xe2\xb2\x11\xb1\x42\x51\x15\x63\xc2\x98\x89\xc8\xa5\x29\x4d\x35\xc7\x51\x18\x3b\x11\x03\x1e\x99\xa1\x6d\xb0\x11\xc3\x42\x94\x5b\xb5\x7d\x24\x62\x47\x31\x34\x47\x49\x0c\x57\x25\x28\xe5\x39\xca\xbb\x34\x4c\x2c\x62\x62\x5b\x4f\x91\x85\xa9\x8c\xd4\x00\x49\x9c\x6e\x63\x51\xf6\xd9\xdc\x7a\x2b\x4a\x8c\x7c\x0c\x02\x45\x30\x08\x00\x9a\x66\x27\x21\x4f\xa1\x25\x21\x53\xf4\xb8\x48\x17\xa0\xa6\xc6\x08\x31\x82\xc8\x05\x80\x23\x9a\x0f\xc5\xd8\x90\x73\xab\xd9\xca\x4e\xa1\xc7\x88\x0a\x03\x1d\xdd\xe4\x70\xe0\x62\xd9\x96\xa9\x26\xb3\x80\xf7\x79\x5f\x44\x30\x81\xac\xa3\x84\x71\x0c\x59\xc5\xe7\x7c\x80\xf8\xdc\x72\x3f\x45\xd1\x67\x2d\x53\xe7\x03\xd3\xe6\x49\xec\x5a\x7c\x08\x91\xec\x32\x41\x60\xc4\x86\x4c\xf9\x48\x94\xc5\x88\x48\xc4\x57\x89\x12\x06\x3e\x96\x68\x24\xe5\x56\x5f\x4c\x62\x10\xec\x31\x92\x6e\x21\x05\x30\x10\xe8\x86\x49\xa8\x1c\x18\x8c\xe1\xda\xc0\xe5\x6d\x83\xd7\x59\x84\x88\x82\x55\x80\x88\x94\xc2\x88\x33\x93\x6c\xe4\xf3\x77\x9e\x5f\x2e\xc4\xbe\xba\xca\x10\x41\x42\x89\xa8\x29\x2c\x23\xf3\x91\x1c\x8b\x14\x51\xa4\xca\x9a\x6d\xeb\xa9\xaa\x18\x98\x42\x44\x35\x24\x1b\x9e\x67\x29\x86\xec\xf8\xb9\x75\xcb\xfb\x06\x0b\xe4\x44\xb5\xf8\x34\x66\xcd\x10\xa8\x3a\x42\x06\xaf\x27\x54\x08\xc5\x30\x4a\x3c\x3e\x21\x69\x12\x0b\xb6\x1b\x38\xa2\x89\x0d\xd1\x41\x42\x6e\x15\x70\x2c\x9e\x05\x0a\x81\x09\xc3\xa8\x6a\x00\x7e\xbb\x57\x48\xc8\xca\xa2\xa7\x5b\x88\xa3\x12\xf1\x23\x96\x72\x0a\xf4\x1c\xc0\x25\xbe\xce\x25\x8a\xec\xe7\x9a\x0f\x66\x71\xb1\x4f\x63\x21\x0d\xfc\xc4\xd5\x7c\x88\x14\xdd\xb7\x2d\xd7\xd0\x88\x4f\x1d\x60\x09\x4e\x12\x06\x12\xe4\x30\x07\x43\xce\x53\x34\xd9\xcf\xad\xe5\xf6\xa2\xcf\x80\x10\x3b\xaa\xc4\x08\xb1\x68\x4b\x84\x8f\x90\x65\xb3\x6c\xc0\x81\x98\x89\xa8\x9d\xc4\x88\x51\xed\xc0\x31\x5d\x01\xb1\x2e\x48\x91\x69\xa7\xb9\xd5\x8d\xc2\xba\x42\x42\x21\x11\x30\xc6\x3e\x8f\x2d\x89\x47\x1c\xd6\x43\xdf\x00\x52\x9a\x00\x41\xe1\x11\x44\x91\xc4\x86\x31\xe3\x01\x86\x03\x9a\x13\x0b\xb9\x64\xf2\x22\xa5\x0c\x15\x3d\x21\x90\xb1\xa6\x72\xaa\xea\x19\xb1\x47\x70\x02\x24\x35\xe1\x7d\xcb\xb3\x94\x84\xf5\x21\x20\x9e\xea\xb9\x69\x98\x0a\xc4\x0a\x73\x6d\x06\xd5\x0c\x74\xc1\xa2\x44\x41\x1c\x50\x1d\x60\x22\xe0\x71\x24\xa0\x90\xaa\x34\x8e\x24\xd5\x07\x29\xc0\xac\xe8\xa2\x20\x4a\x0c\xc6\xd3\x62\xdf\xbe\x66\x5c\xf0\xdf\xe4\xf3\x77\xb1\x64\x2e\x78\x3e\x09\x30\x35\x42\x28\x64\x19\x8e\xb7\x90\x14\x62\x85\x03\x36\x30\x35\xa8\x18\x3c\xa4\x21\x94\x6d\x09\xb0\x7c\xa0\x6b\x8c\x17\xa1\x38\x45\x69\x6e\x95\x4d\x04\x40\x15\x06\x07\xa9\xcc\x98\xa6\x47\x03\x27\x12\x91\xa5\xba\x66\xea\x38\x9a\xae\x03\x16\xb0\xac\x09\x98\x24\xc0\x16\x4e\x24\x47\x81\x96\x1e\xd1\xdc\x2a\xaf\xa9\x8a\x6c\x87\x4e\x9a\xa4\xa9\x2e\x2a\x81\x92\x58\x26\x26\xb2\x6f\x73\x22\x40\xb1\xc2\x73\x02\x4d\x79\x9d\x67\x53\xc1\x8c\x54\xc7\xf6\x23\x8e\xf5\x72\x2b\xaf\xcc\xe8\x89\x6c\xb8\x92\x99\x8a\x88\xe3\x04\x21\x89\x64\x53\xf1\x63\x15\xc5\x1c\x4b\x52\x17\xf0\x2e\x93\x40\x56\x66\x7d\x16\x20\x1c\xaa\x8a\xee\xfb\xb9\x95\x57\xd6\x75\xc5\x8c\x3c\x00\x09\x13\x7a\x29\xf5\xb0\xca\x21\xc2\x99\x16\x43\x42\x68\x84\xbc\xe6\x01\x22\x88\xa9\x10\xa9\xa1\x28\x2b\x30\x81\x51\x94\x5b\x29\x40\x41\xb7\x55\x49\x30\x79\xdf\x0e\xc4\x34\x31\x4d\x35\x8a\x02\x09\xd8\xc8\xb0\xec\x24\x4a\x25\x45\xb4\x94\x38\xe4\x2d\xcb\x46\x3c\xa0\x7e\xc0\x04\x66\x90\x5b\x29\x40\x25\xd1\x13\x56\xb6\x6c\x2c\x02\x68\xa6\x91\xc8\xeb\x81\x9e\x86\x81\x27\xf2\x86\xae\xb8\xc4\xb5\x4c\x21\x92\x75\x12\xe9\xa1\x9b\x44\xa9\x28\xfb\x4c\x6e\xbd\x67\x11\x8a\x29\x17\xeb\x21\x90\x4c\x96\x33\x78\x48\x68\x82\xe3\x34\xf2\xa1\x67\x78\xb1\x16\x8a\x62\x4c\x62\x57\x66\x91\x6d\x06\xba\x27\x59\x52\x22\x5c\x33\x6f\xf9\x6f\xf2\xf9\xbb\xec\x54\xae\x90\x0f\x24\xa9\x41\xc2\x30\x45\x89\x01\x78\xc5\xa7\xa9\x48\x40\x10\x1b\x4c\xc0\xb9\x4c\x10\x4a\xc0\x62\x18\x1d\xca\x98\x87\x6e\x20\xf8\xbc\x93\x5b\x59\x05\x81\x89\x39\x31\xe1\x31\x27\x50\xc0\xe8\x12\x9f\x44\x7a\xe2\x45\x61\x2a\x26\x32\xf1\x7c\xdb\x90\x4d\x4d\xe2\x81\x29\xc7\x2c\x1f\xa6\xa1\x8f\x65\x2e\xc8\xb5\xb0\x8b\x03\xae\xa2\x2a\x72\xca\xdb\x11\x0a\x20\xd5\x03\x1a\x24\xac\x9b\x3a\x44\x92\x14\x06\x29\x06\xe3\x48\x96\x2e\x31\x1e\xd2\xe4\x40\xf3\x63\x2b\xc8\xb5\x55\x83\xaa\x0f\x89\xce\x04\xd8\x32\xb0\x2c\x23\x84\x91\xa2\x79\x04\x48\x0c\x83\x65\x23\x0e\x31\x04\x8c\xac\xf9\x8a\x0d\x41\x6a\xb0\x14\xb2\x52\x6e\x8d\xfa\x89\x7c\xa2\xa8\x40\x31\x64\x68\x8b\x8e\x1c\xd8\xb1\x09\xa3\xc8\x76\x08\xf0\xc2\x44\x4a\x35\x36\x4d\x80\x2d\xa7\xac\x0a\x14\xc7\x4b\x44\xe4\x4a\x22\xca\xad\x35\x37\x76\x20\xfa\x7c\x18\x1b\xae\x20\x51\x3d\x51\xb9\x24\x34\x39\x1d\xda\x2a\xe3\x0b\xa6\x67\x49\x3a\x24\x28\xf1\x02\x91\x2a\x72\x98\x38\xac\xa0\x29\x7e\xae\x3d\x2a\x0d\xb0\x26\x29\x10\x00\xcb\xf2\xcd\x00\x41\x09\x21\x4e\x14\x74\x9f\xe5\x62\x86\xc1\x7e\xc4\xb3\x72\x88\x5c\x24\xeb\xb1\xaf\x19\x0c\x67\x49\xb9\xd5\x17\x23\xf8\x1e\x89\x6d\x82\x12\x24\x60\x35\xc4\xae\xa5\x41\x5e\xb2\x98\xd8\xb0\xdd\x24\x54\x15\x4a\x99\x38\xa2\x7e\xaa\xc6\x24\x31\x05\x31\x8a\x5d\xff\x9a\x0d\x68\xff\x26\x9f\xbf\xcb\x77\xe7\x42\xd8\xc5\x1a\x16\x97\x60\x57\x32\x71\x40\x42\x43\xb6\xa8\x12\x18\x46\xa0\xf1\xa2\x48\xd5\x08\xb8\x76\x10\x89\x21\x41\xa6\x94\xba\x9a\xea\x29\x92\x62\x93\xdc\x2a\x9b\x60\x10\x03\x55\x40\x92\x68\xb8\x31\xc7\xf1\x4a\xe4\x02\x46\x0e\x3c\xca\xab\x9e\x88\x5d\x17\xfb\x2e\x22\xac\x2d\x5b\x0e\x54\x39\x1b\x28\x14\xa4\xb9\x95\xfa\x96\x34\x60\x3a\xb6\x13\x4a\x09\x47\x18\xdd\xd5\x08\x49\x03\xe0\x4b\xac\x8c\x22\x8e\x8d\x04\x0a\x13\xc9\xff\xcd\xa1\xc7\x31\x6f\x03\xaa\xb9\x49\x9a\x4b\x86\x26\xda\x1c\x20\x31\x2f\x38\xaa\xa4\x3b\x69\x82\x63\x57\xb3\x78\xe4\x61\xcc\x63\xa0\xea\x38\xc2\x9e\x26\x93\x08\x09\xc0\xf6\x04\x8f\x27\xaa\x2a\x92\x5c\xa3\x41\xc3\xe7\x0c\x9f\x8b\x23\x59\x71\x5c\x43\xe0\x4c\x98\x20\x27\x10\x54\x00\x08\xb5\x52\xce\xe7\x92\x50\x67\x23\x5d\x4a\x80\xae\x62\xcb\xc7\x54\xc8\xad\x2d\x4e\x0e\x1b\xa6\x81\x85\x22\x6c\x69\xac\x64\xfb\x66\x20\x78\x10\x50\x28\x60\x45\x4d\x65\x4e\x8e\x5d\xdf\x76\x13\x1b\x05\x9a\x08\x35\xcf\x51\x79\x9a\x5b\xa5\x69\x21\x06\xa9\xa2\x85\x81\x04\x22\xc8\x27\xba\x2c\x07\x22\x62\x75\x05\x86\x0e\xd6\x7c\x3f\x8d\x53\x59\x90\x80\xa5\x8a\x7a\xa2\xa5\x36\x22\x32\x67\x88\xb9\xd6\x94\x27\x53\x1f\xb3\xae\x62\x47\x8a\x2b\x98\x2e\xe4\x75\x4e\xc3\x86\xad\x03\x44\x14\x39\x89\x91\x2a\xeb\x2e\xb0\x19\xca\x73\xbe\x28\xa9\xbc\x0a\x44\x23\x1b\xf9\xfc\x5d\x05\x2d\x17\xc8\x27\xe4\x90\xa5\xc9\x86\x29\x63\xe4\x39\xb1\x46\xa9\x9a\x26\xae\x0f\xa9\x48\xb0\x18\x18\xa1\x29\x21\xdf\x20\xa2\x4d\x62\x46\x4b\x43\x57\x8e\x85\x5c\x9b\xa2\x08\x24\xdd\x89\x54\xd3\x64\x39\x86\x42\x57\xb2\x6d\x07\x69\x09\x35\x38\x0c\xad\x30\x51\x43\x14\x85\x3a\x13\x0a\xa1\x0e\x50\x92\x1a\x48\xf2\xa3\xdc\xea\xe0\x13\xb5\x48\xc0\x3c\x55\x53\xd9\x63\x54\x8d\x35\x2c\x15\xa9\x29\x36\x14\x9e\x7a\xc1\x6f\xfc\x1b\x52\x16\xf0\x8c\x09\x53\x21\x20\x26\x1f\xfb\x58\xc9\xad\x84\xb3\x68\xc4\xa2\xcb\xa9\xb1\x85\x45\x96\xd5\x25\x51\x8e\xbd\x88\xc4\x4e\x2c\x05\x98\x51\x21\x70\x4d\x2f\xa1\xbf\xdd\x7a\x9a\x23\x58\x92\xaf\xb2\xae\x20\xe4\x16\x0d\x4a\xd8\x89\x64\x90\xb0\x2a\x15\x88\x1d\x61\xa2\x18\x9c\x62\xf0\xba\x65\x62\x01\x29\x40\x53\x08\x32\xd9\x38\x16\x90\xa0\x63\x07\x43\x53\x8a\xad\xdc\xda\x80\x06\x65\xd9\x61\x09\xb4\x5c\x31\x11\x6d\x39\x8e\x1d\x1e\x18\x48\x4c\x29\x97\x00\x3d\xf5\xcd\xd0\xb3\x6d\x85\xda\x29\xd1\x44\xde\xf0\x11\xfd\x2d\x30\xce\xad\xe5\x32\xb6\x0e\x58\x28\x5a\x51\xaa\x9b\xa1\xe5\xb9\x01\x8f\x64\x17\x71\x2e\x31\x31\xc3\xab\x11\xf0\x24\x0d\xa9\x96\x23\x09\x06\x52\x4c\xac\xb3\x5a\x90\x5b\x7a\x12\xa4\x91\x43\x80\x66\x27\x9c\x2d\xd9\x8a\x19\x52\xaa\x39\xae\x1b\x99\x4a\xc8\x04\x86\xc0\x9a\x61\x80\x12\x10\x3a\x84\x63\x85\x38\xb1\x39\x5f\x33\xb2\xcf\xb8\xfc\x5d\x4d\x3e\x17\xc8\x27\x8d\x78\x16\x79\x2a\x05\x69\x20\xbb\x29\xaf\xa6\x54\xf1\x94\xd8\x0f\x34\x31\xe6\x83\xd0\xe4\x44\x0e\x60\x16\x63\xc6\x49\xdd\x34\x56\x44\x2b\xca\xad\xa4\x99\x10\xc9\x52\xe4\x30\x69\xc2\x32\x81\x83\x49\x22\x46\x69\x0c\x14\x9f\x57\xa8\xe7\xa5\x28\x8a\x38\xdd\xb3\x25\xc9\x8c\x3d\x99\x93\x2d\xd5\x46\x2c\xc7\xe6\xd6\x6e\x68\x94\xda\xbe\x68\x31\x30\x40\x34\xa1\x48\xb6\x04\x17\x41\xde\xf2\x53\xc7\xb5\xf9\x28\x06\x9a\xcc\x40\x2b\x92\x39\x57\x92\x58\xec\x27\xba\xe0\xe5\xda\xe0\x54\x28\x59\x04\xb9\xaa\xed\x40\x4f\xd0\x52\xe0\xa7\x9e\x4a\x14\xc2\xa5\x2a\x60\x19\x56\xe5\x19\x53\x00\x58\xe2\x40\xc2\x51\xdd\x0e\x6c\x21\xb1\x69\x6e\x05\x3b\x04\x19\x42\x12\x7b\x54\xb6\x03\xc9\xe7\x54\x4f\x76\x15\x2f\x88\x21\xe2\x12\xd1\x4d\xdd\x30\x08\xf8\x44\x22\x2c\xd5\xb4\x54\x17\x58\xd3\x45\x4c\x6e\x2d\x14\x16\x43\xdf\x60\xbd\xd8\x76\x05\x09\xbb\x6a\xac\x25\x90\x5a\xa6\x8b\x7d\xcf\x63\x74\xc2\x1b\x50\x83\x7c\x1a\xf2\x2c\x54\x39\xdf\x52\x15\x68\x29\x96\x91\x5b\xf3\xe8\x48\xc0\x8c\x9c\x88\x48\x54\x42\x55\x72\x9d\xd0\xd3\x25\xce\x4d\x3d\x24\x03\x0f\x27\x0e\x0f\x18\x37\x49\x12\x9c\x2a\xb2\x9c\xf8\x8a\x62\xf1\xd8\xcf\xad\xec\x93\xaf\xfb\x9a\x88\xe4\x28\xb1\x58\x59\xf0\x3c\x4f\x21\x54\xe1\x65\x47\xe5\x20\xa7\x0a\xa2\x82\x74\x80\x6d\xc1\x83\x18\x13\x4f\x89\x52\x9a\x88\xd7\x2c\x3d\x1c\x7a\xc3\xef\xe4\x33\x25\xbe\xd2\x1f\x95\xcc\x57\x72\xc9\xbe\xca\x57\xea\xee\x3e\x90\x6e\xae\xde\x77\xe5\xa0\xda\xad\x26\x5e\xb8\x7b\xe8\xa4\xfa\x63\xca\x9d\x18\x94\xaf\xec\x2d\x79\x06\x35\xaf\x34\xe4\x9a\x26\xa2\x6e\x5d\xe3\x95\x35\xd2\xe5\x6b\x07\x0f\x5b\x14\xf7\x5f\x5d\x7f\xe9\x8a\xa2\xbf\x14\x38\x30\x96\x76\xfc\xe5\xc4\xd9\x83\xe1\xf0\x3d\x1d\xfe\x97\x44\xf3\x2c\x6b\x3a\x68\x45\xef\x0f\x8f\xdf\xf4\xe9\x5d\xc3\x8f\x04\xa3\xe7\xcc\xea\xfb\xea\x8c\x3c\x05\xdf\x7a\xe4\xa6\xef\xf8\xbb\x0f\xbe\x77\xf3\xda\xfe\xff\xee\x3a\xfb\xbb\xbf\xf9\xa7\xae\x33\x63\xfe\xfc\xdd\xcb\xce\x4c\xb5\xf7\xee\xb8\xb1\xe1\x63\x07\xfa\x3c\xb8\xe4\xc0\x7b\xa5\x5b\xc5\xd5\x1f\x9a\xb2\xf6\xa5\x49\x47\xbb\x9d\x39\xfa\x7f\x45\xff\x0f\x44\xff\xf8\x08\x7f\x27\xf8\xa7\x8f\x30\xbf\xc0\x99\x13\x95\x9d\xf9\xb3\x9e\x98\xb1\x73\x64\xbd\x72\x3f\x6e\x3f\x08\x1f\x38\x92\x2f\x7e\xbd\xca\xc0\x4e\xf9\x87\x6e\xec\x5a\xf3\xe2\xff\x15\xfd\x3f\x10\xed\xdf\xf6\x9f\xc9\xfd\xcb\x1d\x19\x94\xa7\x72\xe5\xff\xaf\x7f\x3b\xf2\xfe\x33\xf3\x1b\xd4\xbc\xc8\xe0\xff\xdf\xd5\xef\xff\x44\x53\x7f\x28\xf8\xbb\x60\xbd\xda\x45\x88\xb1\xee\xbd\x92\xf3\x99\x22\x9d\xd6\x7d\xf7\xf8\xcf\x85\x5e\x9c\xbb\xab\xfd\x5d\xef\x0e\xda\xff\xc2\xab\x4b\x56\x97\x82\xdf\x0e\x6c\x79\xf5\xea\xd5\xab\xaf\x55\x9e\x22\xd4\xbd\xe6\xcf\xd7\xee\x37\x6b\x74\xf1\x4d\x23\xd6\x8f\x7b\x62\x62\x9d\xe6\x15\x3b\xc2\xe1\xf5\x86\x0b\x3f\x57\x11\x0f\xf5\x10\xcc\x09\x76\x19\xae\x78\x56\xe9\x7a\x37\x56\xed\xb7\x76\x49\x87\xfa\x73\xee\xba\xef\x87\x85\x45\x47\x4c\x6c\x32\x68\xf0\x4d\x73\x8e\xff\xf0\xe9\xc9\x3a\x8f\xde\x78\xca\x2e\xff\x44\x56\xe9\x3a\x8f\xf7\x7f\xaf\x17\xbb\x63\x7f\xb5\xe3\x15\xbb\x0d\x2f\xd7\x6d\xdf\xba\xd5\x13\xd0\x5c\xee\xe1\xe5\xaf\x2f\x1b\x3d\xd9\x9d\xb0\xe5\x7c\x56\xe9\x4d\x8d\x3f\xad\x6e\x0d\x2e\x5f\xbb\x63\xc1\xbd\xcf\x5d\x06\x77\xce\xfe\x6e\xf2\xc1\xcd\xe0\xb6\x89\xde\x80\x57\x17\x97\x39\x3d\xb5\x7b\xc1\xac\xd2\x07\x5f\x6a\x5e\x77\x4b\xb1\xa8\x56\xad\x9f\xeb\x75\xdb\xf9\xc9\xf4\xb1\x8f\x97\x7f\xa6\xc2\xd5\x73\x5d\xad\x36\xc6\xfa\xd7\x0a\xda\xb7\x3a\x59\xa5\xd7\x94\x57\x76\xb5\xb9\xab\x76\x6b\x7a\xf8\x4c\x93\x17\x7e\xea\x37\x66\xfa\x27\xb3\x56\x2f\x9c\x5b\xe4\xdb\xc2\x15\x16\x3c\x5f\x6d\xfe\x89\x72\x59\xa5\x07\x3c\x55\xa2\x65\x9d\xa4\xe1\x33\x77\x3f\x3e\x28\x9e\xbf\x78\xef\xc2\xe5\xed\xee\x2d\x50\x7c\x44\x89\x72\x2f\xce\x5f\x53\xf3\xad\xc5\xbf\xe8\x59\xa5\x8f\x74\x2a\x2d\x79\x0b\xef\xff\xf6\x99\xa7\xdf\xf9\xa8\xcb\xb2\x21\x1f\x36\x39\x73\xbc\xdf\xb7\x25\x3b\x94\xbc\xb9\x6d\xf1\xba\xeb\x96\x55\x2f\x93\x55\x9a\x2d\x01\x3a\x37\xdc\x5c\x71\xae\xfd\x69\xd1\xf7\xcc\x97\xf6\x3e\xdf\x17\xff\x50\x72\xe5\x88\x3d\x1f\x76\xba\xa5\x5b\xfb\x29\x83\xfb\xbc\x9e\x55\xfa\xe9\x8b\x6f\x09\x1f\x7d\x53\x6b\x7b\xb7\x33\xf3\xab\x1d\xfd\x6a\x57\x7e\xb8\xe0\xc6\xe6\xc7\xe5\x17\xbe\x2a\x6c\x15\x70\x7e\x0c\x26\x3c\x9b\x55\xba\xdd\xfe\x9d\x5f\xd6\xeb\x6e\xf7\xdf\xf7\xe0\x67\x5f\x18\x8f\x39\xe7\x8f\xfa\x15\xbb\xbd\xb3\xe9\x9c\xbe\xe7\xa6\x3c\xfd\x0b\xd0\xc9\x47\xb3\x4a\x37\x5c\x73\x73\xb9\x06\xbd\xc2\x5e\xfd\x2a\xf7\xbf\x63\x72\x91\xc1\xab\x46\xbe\x70\xa1\x5a\xbb\xf3\xbb\xdd\x43\x85\xe5\x22\xf2\xba\x9b\x47\x64\x95\x36\x6b\xb4\xb8\xa3\x58\x9b\x0a\xe4\x91\xc1\x7d\x2f\xcd\x1d\x5a\xfb\xe5\xfc\x5b\x4a\x54\x9c\xbb\xfe\x70\xbb\x09\x9f\x9c\xeb\xb6\xfd\xe9\x06\xc7\xb2\x4a\x4f\x5b\xb5\x6d\xd6\x5d\x2f\xec\xd8\x7c\x70\x5d\x8f\xbc\xab\x4a\xa1\x7b\x8e\x6d\x59\xdd\xab\xdd\x91\xd7\xa2\x62\xed\x0f\x1f\xbb\x5a\xb2\xc3\x2f\x59\xa5\xbd\x56\x2b\x6f\xeb\x94\x27\xea\x34\xb8\x71\x35\xed\x5d\x61\x71\xcb\xa5\x6d\x3f\x24\x93\x27\xf5\x19\xff\x03\xf3\x52\xc1\x7d\x97\x07\xa0\xac\xd2\xd5\xf9\x71\x5e\xb0\xa0\xe9\x46\x6d\x5b\xc5\x0f\x27\xf7\x6b\xfe\x54\xda\xa3\xf6\x5d\x8b\xde\xbf\xbd\xdd\x4c\xfe\x6c\xd9\xa2\xa3\xdb\x37\xcf\x2a\x7d\x43\xc7\xb4\xdf\xe1\x76\x7b\x59\xba\x68\xdb\xd0\xcb\x0f\x4f\x7c\xa6\xcd\x2d\x5b\x9a\xbd\x34\xbe\xd1\x34\x6e\xd3\x27\x05\x56\xb4\x5c\xb2\x24\xab\x74\x4b\x57\x7f\xb3\x60\xf7\xae\x05\x5b\xbd\x69\x8f\x6b\xe0\xdd\xfc\xcb\xb0\x89\x5b\x0b\xdf\x76\xb2\xd5\xe1\x22\xab\x4e\x54\x6b\x7e\xd7\xf8\x7a\x59\xa5\x3f\x18\xb7\xab\x4d\xbb\x99\xdb\xd6\xaf\x2e\xa8\xfc\x58\x73\xcf\xaf\xb5\x6f\x3d\x79\xfb\x37\x23\x9f\x8b\x8c\x1a\xcf\xdd\x3c\xb2\xc6\xd7\x35\x66\x64\x95\x5e\x71\x64\xe3\x4b\xb7\xaf\xab\x6f\xf7\x3a\xc1\x05\xdf\xac\x2c\xb0\xe8\xd2\x98\x5e\xd5\xdc\xa7\xd6\xee\x3d\x71\x5b\xa9\xfd\x47\xf7\x95\x2f\x90\x55\x3a\xb9\x73\xd6\xdb\x6d\x84\xc3\x03\x95\x79\x98\x9d\x57\xe1\xf4\xc3\xe3\x86\x35\xbf\xff\xeb\x2d\x1d\xca\x3f\x74\xef\x81\xb6\x05\xfa\xae\xa9\x95\x55\xba\x37\xa5\xdb\x57\x5c\xfe\xa9\x6e\xb7\xfb\xf3\xcf\x29\x5c\x61\x45\xab\x97\xd7\xad\x5f\xd0\xaf\xeb\xbc\x3c\x43\xfa\xf9\x1f\xc4\xde\xa1\xe1\x59\xa5\xf3\xaf\x1f\xfe\xf9\x89\xb1\x13\x66\x35\x6f\x3b\xaa\x50\xb5\x1d\xeb\xeb\x76\xe8\x34\xa2\x5a\xf5\x9b\xea\xc5\x1d\x06\xdf\xdd\x65\xd1\x32\x74\x77\x56\xe9\x0a\xd2\xd3\x5d\x3b\xd7\x1d\x30\xd8\x36\x9f\x7b\xfd\x8b\x92\x8f\xeb\xa3\xa4\x46\xe5\x0e\xbf\xb0\xb2\x7d\x35\x65\xd5\x99\xea\x4f\xdf\x74\x63\x56\xe9\x25\x23\xdb\xbd\xd1\xf8\xa7\x1e\x33\x9b\xf6\x7a\x50\x6a\xb0\xed\x83\x72\xf9\x2a\x7d\xf2\x49\x87\x77\x2e\xce\xee\x31\x76\xdb\xee\xb7\x7f\xdc\xb9\x23\xab\xf4\x72\xfd\xf5\xaf\xa6\x94\xe8\xba\xf2\xeb\x4b\xa9\x3a\xe9\xe7\x1e\x25\xd9\xfa\xad\x4e\x8d\x2d\x5d\xb4\xfe\x63\xb3\x3b\xce\xdd\x7f\xf6\x85\x3f\x59\xda\x90\x91\x5d\x66\x2b\x9f\xb7\x78\xf8\xf0\xf6\x9e\xf1\xa7\xab\xc1\xc2\x5f\xcf\x39\xab\xa7\x0f\xee\xf6\xe2\xaa\x9f\xde\xd9\xb5\xf2\xab\x93\x93\xb2\x4a\x83\x5e\x7d\xcf\x1d\x1f\x5b\xf6\x93\xa5\x37\x4d\xf9\x2e\x5d\x3e\xae\x62\xed\xaa\xad\x77\xbc\xb4\x62\xcc\x99\xde\x95\xd9\x06\xf9\x87\xbc\xba\xf3\x4f\x0c\xf1\xdc\x4f\xe3\x85\x41\x95\x0a\xde\x3e\x5d\xdd\xfc\xd0\x8c\x79\x93\xc5\xa6\xed\x2b\x29\x4f\xdf\xd5\xec\xe2\xb8\xe9\x93\xbe\x68\x22\x34\xcb\x2a\xbd\xb3\x43\xd7\x4f\xcd\xed\x07\x1a\x3d\x35\x7f\x5d\xf1\xf6\x3b\xe9\xee\x15\x2f\x2e\x3e\x59\xf3\x2d\x6b\xd6\xba\x31\xad\xdf\xd8\xf8\xee\xc8\x2f\xff\xa4\x83\x5d\xbe\xea\xf1\xc9\x3d\xdf\x3f\x5d\x6d\x78\xb9\x0b\x3d\x3e\x16\x1f\xfa\x79\x61\xfd\x3c\xad\x7f\xfa\xbc\xd0\x2b\x55\xc7\x9e\x59\xc2\xed\xb8\xe3\x4f\x3a\x58\xea\xa9\x3b\xf2\x56\x79\xf2\xd3\xef\x3e\xab\x7a\xf6\x6a\xff\x0f\x86\xd7\x73\x5b\xb4\xaf\x75\xac\x69\x93\x9b\x7b\x3f\xb7\xf9\xc1\x65\x35\x9b\xec\x6f\xfe\xcf\x98\x7b\x60\xcb\xab\x97\x8f\x3d\xf3\x5a\xf9\x29\x42\xbd\x01\x03\xbb\x56\xff\xfd\x3f\xcd\xa9\x7f\xae\xf3\xbd\xfb\x9e\xef\xde\xe5\x0c\x6a\x75\xf5\x3d\x6d\xe0\x2d\xeb\x4b\x4c\x3d\xb5\xbf\x73\x8f\x8a\xad\xcf\x5f\xe8\xbb\xaa\xf7\xee\xeb\x0e\x07\xe4\x16\x79\x8e\x64\xdf\x34\xe6\x49\x32\x4e\x79\x1b\x70\x12\x70\x91\x1e\x73\x38\xe5\x25\x39\xe5\xdd\x28\x4e\x80\x62\x38\xb2\x97\x02\x25\x11\xad\x98\xf0\xb2\xc3\x2b\x8e\x2e\xfc\x2b\x61\x3e\xb7\x53\xb3\x66\xcd\xb2\xc0\x5e\x3f\x66\xc7\x4b\xd1\xbe\x42\x3f\xf4\x68\x22\xce\xe6\xb6\xbc\x72\xe2\x99\x67\x82\xfe\xf5\x1e\x08\x9f\xb8\x7a\x69\xf9\xd4\xf9\x85\x83\x6e\x19\x4e\x2b\xa1\x38\x8e\x7c\xaa\x10\xa4\xb0\x41\x08\x14\x4e\x48\x38\x1a\x85\x5e\xca\x12\x97\x33\x6c\x8e\x07\x00\xb3\x80\xc7\x8e\x21\xbb\x92\x14\x88\x9a\xff\x9f\x96\xb3\x29\x42\xbd\x81\x7f\xc0\x2e\x6d\x56\xbd\xe3\xce\xa7\x1a\x6e\x19\x38\xf4\xe2\x7d\x43\xe6\x16\x7e\x7e\xfa\xe4\xd1\xe8\x11\xb8\x76\xd4\xac\x92\xab\xbf\x58\x30\xe0\xa9\x87\x32\x7b\xda\x54\x36\x00\x6f\xc7\x3e\x45\x3c\x81\x8e\xe7\x98\x1c\x94\xa8\xe5\x9a\x24\xa4\x72\x12\xe3\x28\x8d\x95\x08\xf8\xd8\x87\x8e\xa1\x2b\x42\xac\x24\xac\xf7\xc7\x69\xff\x01\xb9\xfc\x0d\xe3\x6b\x2d\x6c\xfd\xad\xdb\xef\xd3\x3d\x23\xef\x3b\xb0\xe6\xcc\xfa\xb7\xa6\xd5\x1a\xbb\x35\x5c\x76\xf6\xbe\x11\x33\x3e\xeb\xfb\xe5\x87\x99\x85\x2c\xa7\x9a\xe8\x45\xa6\x2f\x4a\x54\x75\x55\x95\x5a\x26\xb4\x75\xdf\x47\x90\x4b\x6c\xcc\x41\x93\xe8\x9e\x0b\xa8\xaf\xc6\x3a\x09\xb1\xcc\x88\xee\xef\x79\x85\xff\x57\x41\xae\xb5\x9a\xfd\x3f\x2f\x2e\xbd\xf3\xa9\x21\x5d\xce\x1d\x1a\xf2\x68\x55\xe5\xbd\x36\x6f\xc6\x27\x1b\x76\xac\x73\xb4\x35\x5f\xbb\x4f\x93\x6d\xa7\x2b\x96\xc9\xa2\x4e\xc3\x8b\x37\xac\x12\x6c\x2e\xf2\xdd\x0f\x1f\x9d\x90\x5e\x1f\x5b\xd7\x2e\x35\x60\xc2\xcc\x7b\x9e\x38\xff\x6b\x9b\xc7\xc3\x81\x4f\x80\x3c\x77\x66\x38\x73\xeb\x29\xbe\x29\x85\xa2\xe8\xc9\x9a\x16\x61\x21\x4c\xb1\x16\xab\x96\x82\xb1\x2d\x70\x8c\x88\x20\x10\xa9\x10\x63\x13\xf1\x3e\x56\x53\xd5\x08\x18\xff\x5a\x75\x1a\xf4\x07\x6c\x32\x6a\x6a\xd3\x67\x6a\x6d\x1c\x75\x61\xdc\x06\xf9\xfe\xcf\x46\xf6\x6a\xe6\xe6\x9f\xf9\x43\xd2\xfb\x58\xad\x51\x3b\x67\xf6\x7c\x83\xcd\x2c\xec\xff\xaa\x0b\xeb\x0f\xc8\x7b\x66\x4e\x9c\xbd\xbb\x6c\xef\xea\x17\xf6\x1f\xf8\x7a\xd5\xbd\x6f\x77\x68\xd8\xfc\xd5\xab\xf5\xb6\xb7\xfd\x65\x4e\xd1\x87\x46\xd5\x5e\xf4\xc8\x63\x19\x4e\x98\x49\x12\xa6\x49\xc8\xb1\xbe\xab\xc9\x94\x33\x3d\x17\xa4\xac\x2f\x8b\x7c\x40\x0c\x1c\x38\x71\x88\x1d\xcf\xe6\x14\x18\x33\x7e\xca\x86\xc4\x52\x02\x98\x1d\xf2\xf1\x01\xed\xde\xb0\xcc\x68\x30\xe9\x19\xbd\x38\xf5\xc5\x52\x1f\xf4\x19\xae\x68\xcf\xbd\xb8\xa5\x56\xfd\x22\x3f\x5d\x58\x77\x04\x1f\xc8\x70\x1b\x01\xab\xe3\x20\x81\x2e\x85\x01\xef\x09\x20\x0a\x18\xcb\x60\x1d\x4f\x54\xc3\xc0\xf6\x70\xe4\x60\xcb\x37\xb5\x38\x20\x81\x2e\xcb\x01\x67\x9a\xf4\x9a\xe7\x52\xb3\x70\x4d\xa7\x5b\x0b\x15\xad\xa3\xbf\x33\xec\xb3\x93\xfb\xdb\x94\xbb\xa1\x58\xad\xc7\x6a\x36\xbd\xff\xe4\x0f\x9f\x8c\xbc\x63\xfc\xd2\x42\xcd\xf6\xdc\x7b\x53\x46\x0d\x57\x4c\x38\x59\x92\x25\x89\xb2\x0e\x8b\x1c\x4d\x89\x65\xce\x8d\x11\x12\x80\x03\x35\x0a\x44\xdb\x31\x2c\x27\x92\x22\x3e\xe2\xbd\x90\x01\x0c\x20\x2a\x8a\xb3\x73\x0d\xda\x7b\xf1\xae\xed\x03\x67\xd7\x5b\xfb\x60\xf4\xfc\x92\xbe\x4f\x6d\x7d\xa7\x1c\xf7\x4b\x7d\x65\xc1\x27\x03\xd3\x45\xbd\x2a\x28\x7a\x8d\xeb\x86\xac\xb4\xc8\x73\x34\x3b\xd7\x98\x84\x4f\xe3\xd4\x53\x53\x3f\xd5\xfe\x35\x21\x6a\xf1\x91\x97\x08\x24\x0e\x59\x93\x95\x23\xc9\xe6\x52\x4d\x06\x09\x8a\x42\x62\x49\x36\xc3\x33\xff\xca\xa6\xce\xee\x96\x8d\x6b\x7a\xac\x68\x53\xe6\xa1\x53\x2f\x17\x7e\x95\x1d\x3d\x61\x56\xe1\x69\xde\x6b\x77\x7e\xd5\xad\x7d\x95\xd1\x87\xbe\x7a\xe7\x2d\xfc\xfd\xeb\xbb\x5f\xcf\x62\xb4\xf7\xcc\xdc\xd5\xe4\x85\xce\x2d\x76\xaf\x1e\x76\xf7\x87\x55\x0f\x59\x2b\x5f\x59\x99\x6f\xdc\x2b\x2b\xce\x92\x43\x2b\xdf\xdf\x53\xb3\xdf\xa1\x9f\x32\xdc\x8f\xab\xb3\x58\x17\x34\xd7\x23\x89\xe7\x26\xb2\xa3\x98\x51\xc8\x99\xa6\x2f\x87\xa6\xcc\x78\xb2\xab\x60\x06\x11\x37\x8e\x65\xc1\x76\xa0\xc7\x10\x46\xca\xc1\x68\x5f\x0a\x82\x26\x67\xa5\xc5\xbd\xba\x17\x2f\x71\xf5\xc6\x01\x8d\x51\xf1\x3b\x67\x5e\x28\x27\xad\x99\xab\x4c\xfe\x70\x21\x1f\xdc\xb0\x2e\xc3\x43\xab\x11\xc7\x32\xa9\xc4\x07\xbe\x03\xb0\x6e\x3b\xa1\x65\x0a\x46\x6c\x02\x46\x88\x12\x43\x81\x96\x80\x50\x94\xba\x11\xd5\x19\x25\x65\x74\x81\xd8\x0c\xc8\x0e\x79\x4d\xad\xfe\xe7\x1f\x5a\xde\x68\xd8\x8e\x55\x6c\xd4\x62\xf7\xe3\x1d\xc7\x86\xb3\x2f\x4e\xec\xf4\xfe\x47\x8d\x07\x74\xbf\x64\x4a\xcb\x77\x66\x54\x95\x44\x9b\x71\x59\xcf\x0d\x02\x56\x4e\x34\x36\x48\x9d\x98\x55\x19\x37\x89\xfd\x90\x00\x07\xcb\x4c\x90\xe0\x94\x53\xa5\xc4\x22\x1c\x66\xa9\x11\xd2\xd0\xf3\xaf\x51\xa5\x6b\x94\xa3\xfa\x63\xdf\x74\x5e\x50\xcc\xd0\x8f\x77\xbf\xe1\xf8\x8a\xf2\xc3\x3f\xd6\x3e\x29\xd8\xac\x74\xa9\xe5\x27\xad\x8b\x79\xcb\xb7\x7f\x7f\xf2\xaa\xff\x9d\x39\x9e\x3f\x20\xb3\xa3\x07\x37\x58\x78\xf7\xab\x4f\xfe\x3c\xe3\x74\xfe\xe1\x0b\x56\x57\xd8\xd4\x39\x28\xf0\x41\xab\x3d\x4b\x8a\xfe\xba\x7b\xc6\xe9\x55\x8d\xba\x66\xd6\x68\x39\xd3\x63\x82\xd0\x30\xd8\x34\x45\x2a\x44\x7a\xcc\xfb\xb1\x66\x72\x1a\x0d\x88\x62\x46\x96\xa1\x45\x2e\x97\x30\x82\x1a\xe2\x14\x43\xc9\xe6\x13\x86\xfd\xe3\xa4\xff\x80\xcc\xad\x45\x79\x56\x8a\xdc\xf9\xdd\x6d\x4e\x15\x69\x38\xff\xe3\x55\xc5\x2a\x5f\xbc\x5f\x1c\xbd\xbd\xfc\xec\x93\xcb\x7f\x3a\x72\x45\x2b\x95\x59\x13\x24\x8a\xac\xc4\xaa\x2f\xfa\xaa\x1a\x79\x26\xe5\x3d\x9b\xc5\xa6\x05\x14\xc9\xf0\x40\x08\xa0\xc4\xdb\x76\x98\x70\x96\xee\xa9\x3e\xa3\x58\x1a\x13\x9b\x4e\xce\x8c\x5e\x6c\x29\x53\x50\x18\x35\x6f\xbc\x7b\xc7\xcb\x97\x3f\xf6\xb7\x4e\x91\x3a\xbc\xfb\xde\x41\xd8\x61\xf1\x43\xa4\x64\x89\x73\x97\xc8\xf5\xbb\x62\x39\xaf\xa7\xf2\x34\x2c\x43\x68\xc6\xd0\x0a\xa9\x12\xb0\x5c\xc2\x6a\xbe\x4f\x51\x60\x43\x21\x72\x19\x2f\xc0\x46\x6a\xeb\x69\x90\x1a\x51\x44\xa3\x90\x1a\xd7\x34\xd3\xfe\x01\xb9\x1c\x2c\xd0\x7b\xc7\xba\xaf\xf6\x9a\x4b\xa6\x5c\xd9\x36\xaf\xfd\x96\xd6\x35\xf7\xb7\x6b\xda\xe4\xeb\xc2\xad\x6a\xbb\x57\xda\x1f\x9d\xf8\x70\x86\x19\xdd\x73\x05\xea\xe1\x58\x4a\x39\xd3\x82\x4c\x44\x38\x85\xb7\x91\x45\x10\x97\x78\x9c\x6b\x70\x2c\xd0\x38\x3b\xb4\x91\x47\x7d\x98\xf2\xae\x2a\x1b\xf8\x5a\x33\xfc\xcf\x49\x2f\x34\x96\x7d\x77\x7a\xc1\x90\xef\xfb\xe0\xc7\x83\x33\x79\x8a\xed\xa8\xff\xd6\xdc\xaf\x4f\xb6\x9e\xfd\x7d\xed\xe9\x97\xde\x6f\x74\x60\xc1\xac\xcc\xb2\x87\x99\x24\x86\xc3\x81\x58\x56\x5d\x0d\x45\xc0\x50\x74\x4f\x08\x19\x85\xe7\x62\x36\x0d\x12\x4d\x94\x52\x37\x49\x08\x81\x8c\x45\x40\x18\x99\x41\x60\xa6\xd9\x75\xfa\xc4\xb7\x77\x2c\x6a\x57\x7c\x61\xcd\x89\xbb\xac\x0f\x1b\xc1\xf7\x47\x57\xfe\x64\x94\x55\xe2\x4a\x61\x6d\x68\xdf\x87\x27\xd0\x8b\x1f\xf7\xc8\xf0\xda\x87\xff\x62\xe3\x71\x96\x93\xbe\x7f\x68\x47\xe1\xc8\xe2\xd7\xbf\x94\x66\x7e\xf9\xd6\x0b\x5d\x3f\x9e\xf4\x4d\xe3\xd5\x5a\xbd\xe2\xef\xcc\xba\x73\xf3\x60\x78\x6b\x99\x65\xf5\x32\xab\x20\x8e\x62\x47\x92\x1b\xaa\x40\xf2\x15\xc3\x55\x74\x3d\x08\x88\xeb\xd9\x8c\xc6\x26\x0a\x83\x39\x9e\x73\x11\x42\x50\x02\x32\x54\x19\x06\x5b\x2e\x41\x20\xfb\x49\xbf\x12\xac\x7b\x12\xc6\x3b\x9b\xfe\xb2\xb0\x66\xa5\xd9\x4d\x86\x2a\x63\xfa\x75\x1e\xb3\xb5\xe0\x3d\x27\x66\xed\x1a\x3e\xb1\xda\xcb\x0d\xfa\x66\xd6\xb1\xa2\x96\x6e\xe9\x82\x20\xe0\x58\x10\x0c\xdd\x31\x38\x8c\x45\x83\x28\x58\x51\x5c\x96\x73\x4c\xc9\x61\x59\x1a\x21\xde\x32\x4d\x91\x4f\x44\x1b\xca\x28\xb8\x36\x64\xbe\xe6\x6a\x29\x6c\x2d\x1b\x78\x75\x94\xd0\xf3\x50\xa5\x16\x4b\xdb\x1c\xbb\x7f\x52\xf3\xde\xc0\x7a\x6f\xd4\x8e\x91\x6f\x17\xdb\x5d\xe4\x39\xe6\xfa\xdd\xd8\x1c\x61\xfb\x9c\xe2\x85\x3c\xab\x8a\x8e\x6e\x87\x01\xf2\x12\x8f\x40\xca\x07\xb6\x19\xaa\xb6\x98\x82\xd0\xf6\x60\x44\x0d\x41\x89\x2c\x26\xf5\xb4\x88\x8d\x7c\x2b\xbb\x3f\xd8\x72\x95\x3a\xa9\x49\xe7\x19\x0f\xdd\x3c\xbb\xd1\x5e\xf1\x8e\xf5\x97\xc9\xda\x61\xaf\x9e\xb6\x4a\xde\xde\xe5\xb2\x77\x43\xc5\xd7\x1e\x3e\x97\x59\x33\x4c\x6d\xdd\x8e\x53\x21\x36\xe3\xc8\x08\x18\x85\xf7\x8d\x28\xc6\xaa\x1a\x1b\x3e\xd1\xd5\x10\x01\x53\xb4\x61\xac\xbb\x29\x0e\x15\x2e\x34\x25\x24\xfe\xbe\xd2\x37\xab\x72\x58\x23\x5f\xe8\x38\x6a\xe9\xe5\x60\xff\x96\x92\x6f\x7e\x95\xb6\xde\x7f\x6e\xcb\x84\xbb\xc7\xaf\xa8\xb3\xf7\xf8\xc0\x6a\x75\x1e\xac\x59\x66\x6a\x66\x21\x5b\x01\xc7\x48\x21\x16\x38\xe4\x52\x5e\x35\x6d\xc0\x07\x4a\xac\x2a\x11\x63\x98\xb6\x9f\x7a\xaa\xa7\xc2\x88\x18\xa6\xa7\x85\x5e\xe2\x4a\x80\x65\x44\xe1\x2f\x5c\xd8\x69\x83\x16\xb7\x59\xde\x84\xab\x5d\x61\xd7\xcb\xe3\xa6\x75\x5c\x7f\x36\x8f\x38\x70\xc7\xb4\xbb\x7e\xfd\xfe\x91\xda\xf9\xa7\xcc\xda\x5f\xfa\xc5\xac\xd2\x1b\x97\x6c\x9e\xbf\xa1\xf5\x9e\xdd\x2b\xe6\x2d\x6b\x78\x75\xf4\x98\xaf\xab\x6c\x5d\x2f\x6f\x79\xc4\xab\x3c\xb7\x4c\x95\x0e\xf5\xf7\xfb\xbd\xb2\x04\xd7\x1f\x1d\x7b\x7b\xd9\xae\x9e\xe5\xbb\x2c\xdf\x5c\xab\xe4\xc4\x5a\xfd\x4e\xd8\xd5\x0f\x1e\x29\xf0\xc3\xb7\x63\xfb\x97\x5b\x50\xf4\xd1\x92\xc1\xe6\x0c\x37\x68\xf9\xac\x2c\x4a\x9e\xe8\x7a\xb2\xe9\x43\x81\x37\x40\x1a\x27\x2a\x46\x10\x5b\xd0\x4f\x7d\x97\xf3\x40\xe2\x30\x9c\x97\x44\x2e\xd0\x5c\x3d\x34\x44\xe9\x1a\x66\xba\xf6\x47\x0e\x1c\x43\xe7\xd6\x7d\x6f\xff\xd2\x86\x0b\xee\xee\x54\x28\xef\x84\xea\x9d\xa6\x0e\x79\xf8\xf2\xb1\xf7\xb7\xcd\x3a\x4a\xda\x63\xe6\x44\x85\x2c\x3c\x86\xf2\xcf\xb0\x3f\xea\x3f\xf1\xb8\x56\xea\xf8\xaf\xcc\x83\xcf\x77\x2a\xff\x99\x7b\x8b\xff\x48\xfe\x1b\x17\x3c\x64\x8f\xa9\xd2\x75\x5d\xf5\xcc\xf2\x98\x1a\x70\xc4\x64\x18\xe0\x8b\xc4\xa7\x86\x6b\xa4\xa6\x87\x84\xc4\x50\xd3\xc0\xd1\x63\xd5\xd2\x6d\x85\x70\x36\x95\xcc\x40\x15\x7d\xd5\xfa\xd7\x3e\xd2\xec\xaa\xfa\xe1\x2b\x1f\x94\x5b\xb8\x76\xc7\xbb\xdc\xc5\x76\x1f\xf5\x7b\xa0\xf4\x72\x8f\x7e\x5b\x61\xc9\xec\x1e\x1b\x98\xaf\x5b\x3a\x25\x4d\xf3\x8d\x0c\x13\x82\x08\xa8\x6c\x51\x95\x37\x4d\x6c\xfa\x81\x82\x59\x87\x58\x1e\x1b\xc3\x58\x96\x58\x02\x00\x06\x50\xe5\x12\xa0\x38\x91\x26\x98\xb2\x1b\x30\x82\x78\x2d\x8f\xfd\xe7\xa4\xc5\x95\x9b\x1a\xb6\xde\xed\x7c\x3e\xac\xd2\x4d\xed\x9b\xf6\x2e\xd6\x79\xfc\xb4\xcb\x6d\x27\x1c\x2f\x3d\xb6\xee\xa2\xb5\xd3\xf2\x3f\xb5\xca\xcd\xf0\x30\xb5\x02\x59\x1e\x29\x72\xc2\xab\x6a\x64\x20\x97\xa4\x82\x48\x3c\x2d\x20\x2e\xe3\x93\x48\x91\x6d\xc1\xf2\x5d\x3e\x21\x0c\x48\x88\xce\x1a\x9a\x15\x78\xd9\xbd\xa0\xb5\x37\x97\x1f\xfc\xc3\x8b\x27\x9b\x3d\xf9\x0b\xb9\xbb\x54\xdb\xb2\x8d\xbe\xe9\x31\x6d\xdf\xd1\x69\xf5\x57\x4d\xaa\xd9\xa6\xd4\xf6\xee\xcf\x4e\xca\xec\x49\xf3\x36\x92\xb1\xe1\x78\x89\xa6\x05\xc4\xe6\x6d\xc6\xf5\xa1\x26\x18\x38\x8c\xbd\x80\x15\x05\xa0\x1b\xd8\x25\x81\x18\x79\x54\x52\x7e\xf3\x49\x8d\xdf\x3b\x70\xb3\x9f\xf4\x96\x37\xf9\x86\x1b\xfb\x6f\x28\xd1\xe9\xb6\xd6\xdb\xdf\x6f\xbf\xe4\x29\x67\xf4\xb4\x07\x5e\x68\xd4\x65\x67\xbb\x4a\x63\xab\x9c\x79\xa3\x05\xc9\xac\x4e\x43\x4a\xdc\x48\x88\x39\x39\x09\x85\x58\x55\x00\x72\x3d\xd9\x53\x62\x3e\x05\x34\xf4\x45\xd9\x0c\x35\x1e\x71\x8e\xac\x9a\xbe\x6a\x87\x11\x08\xbc\x00\x67\xd7\xe9\x2b\x05\xb9\xa2\x0f\xa0\x8f\x86\x2c\x55\x8a\xc5\xda\xfb\x03\xaa\xec\xe9\x38\x74\x59\x91\x66\x07\xee\xbb\xf1\xe7\x71\x67\x9e\x7c\x65\xaa\x9c\xd9\x6c\xa5\xa9\x60\x36\x32\x24\xac\xb3\x09\xa3\xc4\xae\xe1\x9a\xb2\x4c\xb8\x08\xc4\xb6\x9a\xb0\xc0\xd7\x60\xcc\xfa\x41\x92\x32\xb1\x69\x90\x28\x46\xb6\x64\x18\x39\xdf\xcd\xb7\xae\x5b\x5a\xa3\x64\x75\xb3\x20\x29\xba\xa3\x5a\x38\xc3\x3d\x54\x62\xeb\x8b\x4f\x7d\x8c\x0a\xac\xae\xd5\xf7\xfc\x93\x43\x02\xef\xfa\xd9\x23\xe7\x91\x30\x81\x89\x80\xeb\x21\x31\x30\x39\xc9\x8d\x81\x63\x62\x62\xb8\xa6\xaf\xa4\x51\x1c\x23\x91\xc7\x31\x21\x1a\xaf\x91\x44\x34\x62\x68\x60\x9d\x91\xb5\xec\x3a\x5d\xa8\x47\x91\x97\x6f\xd9\x36\x74\x0a\x73\x70\xde\xde\xb1\xac\x7b\xcf\x94\xab\x65\x22\x3c\x1f\x16\x8f\xb5\x9e\x53\xf3\x9f\x1a\x7c\xfd\x77\x73\xce\x93\x7d\x26\x96\x04\x59\xb5\xc5\x18\xc8\x94\x97\x39\xcd\x96\x5c\x33\x31\xe4\x04\x86\x62\xe2\x4a\x9c\x21\x87\x31\x1f\x28\x06\x0a\xa8\x65\xb1\x31\x67\x50\x23\x3b\xe4\x19\xfe\x1d\xbd\xcb\x7e\x5d\x63\xc0\xe5\xb4\xd9\x23\x8f\x37\x98\xba\xad\xe7\xfd\x47\xda\x74\x7c\xaa\x58\xb3\x7b\x16\x6d\x5c\xff\xc8\x2b\x10\x67\xf6\x94\xbd\xd8\x4d\x44\x03\x12\x3b\x88\x65\x99\x8f\x1c\x86\x47\x30\x81\x21\x8b\x10\x21\x28\xb6\xb8\x84\xe5\x75\xc9\x67\x5c\x9d\xa2\x18\xe8\x42\x18\x0a\x76\xce\x2e\xf2\x6b\xdf\x2c\x5f\xf7\xb1\xba\xe4\xa1\x2a\x07\x57\xf7\x79\xe7\xb1\x8f\xea\x08\x3b\xd6\x3c\xb7\xb6\xd0\xe1\x61\x37\x0f\xde\xb4\xb5\xc2\xda\x03\xcf\x66\x38\x5a\x8d\x22\x90\xba\x44\x08\x18\x36\x64\x92\xc0\x24\xbc\x1d\xa8\xa2\x82\x19\x28\x8a\x2c\x2f\x4b\x9a\xa6\xe9\xba\xa5\x07\x42\xc8\xa2\xd0\xa5\x8a\x27\xd0\xec\x27\x3d\xf1\xd2\xc3\x27\xe6\xe4\x6f\x78\xe5\xa6\xf2\xf6\x96\xf5\x55\x95\x0f\x1f\x3c\x00\xf7\x94\xa9\xd4\x28\xae\xce\x15\x2f\x70\x6e\x6a\xbf\x71\x19\xce\x71\xfd\x17\x4f\x58\x67\x31\xc3\x6f\xef\x6f\xd7\xa8\x4c\x99\xea\x45\x97\x3d\xdd\x7d\x60\x2d\x77\x6f\x85\xba\x53\x96\x2c\x6e\x34\xa2\xe4\x5b\x35\x9e\x30\x4f\x6c\xb8\xe5\xfb\xd3\x19\xf6\x54\x34\x39\x0d\x18\x24\xf8\xb6\x2e\x08\x9c\x41\x43\x6c\xb2\x12\xaf\xc5\x4a\x1c\x0b\x22\x16\x45\x02\x15\x07\xbb\x32\x90\x23\x89\xe3\x08\xe3\x98\x96\x9a\xfd\xa4\xcf\x96\x7a\xb9\x71\xfe\x6d\x65\xbe\xe9\x5c\xf4\xf4\xc0\x93\x77\x6c\x9b\x5e\xf7\xed\x03\xad\xe6\x3f\xb3\x4c\x6a\xbd\xbc\x42\xdf\xa9\x9f\x96\x3b\x9b\x59\x7f\x13\xfb\x4a\x9a\xda\xbc\x48\xa3\x44\x00\x1c\xb4\x7f\xa3\x3d\x2c\xc5\x62\xc2\x0a\x44\x16\x92\x20\x10\x0c\x93\x21\xbe\x1c\x19\xc0\xf3\x12\x56\x0f\x11\xc9\xce\xd1\x97\x3a\x79\x2b\xdb\x3c\x70\x75\xd0\xb4\x06\xa7\x36\x3f\xf0\x6c\xbf\xab\xe8\xdd\x19\x7d\x3f\x3e\x5d\xf6\xc9\x4d\x0d\x85\xdd\x75\xf7\xae\xdb\x94\x59\x8e\xd6\x09\xc5\x3a\xeb\xc9\x8a\xc5\x09\x92\xa1\x60\x1f\x11\x49\xd1\x63\x25\x12\x13\x39\x49\x23\x8b\xb8\x34\x8a\x5d\xc1\x26\xb6\xef\xa5\xc4\x49\xb9\xdf\xdf\xa1\xc9\x5e\x72\xbc\xf7\x42\x8f\xa1\xd5\xfb\x71\x4b\x36\x3d\x3f\xe3\x7c\x8f\xe7\xce\xb7\x2f\xf4\xc8\x86\x4e\xa4\xc6\x07\x2f\xbf\xbe\xb8\xcd\xd8\x21\x77\x3d\x24\x64\x16\x76\xcc\x7a\xa9\xcc\x31\x06\x91\xcc\x50\x8a\x34\x46\x32\x2d\x9b\xb1\x34\x3b\x76\x53\x83\xb8\x21\x67\x51\x89\x98\x12\x4f\x15\xc6\xb6\x15\x01\x70\xfe\xef\xaf\x43\x65\x87\x4d\xdb\xde\x3d\x62\xd3\xbe\xcf\xd5\x39\x4f\xb4\x70\xd7\x4f\x5e\xb0\xa9\xde\xb4\x8e\xef\x7f\x95\xe7\xfb\xc6\x4b\xba\xdc\xda\x39\xec\xbd\x76\x50\x86\x97\x3c\xb1\x10\xf3\x0a\xeb\x60\x46\xe6\x14\x4d\x4f\x53\x35\x82\x92\x1e\x45\x92\x07\x11\x96\x4c\x8e\xe7\x79\x01\x47\x1c\x0a\xa1\xa7\x26\x71\x4c\x04\xd1\xcc\xd9\x14\xdb\x9e\x1a\xf6\xc0\xb1\xbb\xfa\xfc\x7a\xf3\xac\xe8\xbe\x99\xad\x98\x4d\x95\x48\x7f\xa9\xff\xd8\xe2\x37\xa3\x6e\x9f\x3d\xd8\x90\x79\x75\x7d\x66\x5d\x26\x43\xc5\x7c\x4c\x05\x68\xb2\xbe\x88\x39\xdd\x34\x22\x88\xb4\xc8\x45\x86\xc7\xe9\x89\x10\x00\x47\x05\x30\x92\x0c\x8e\x95\x28\xeb\x47\xd0\x03\x26\x97\x3d\x5a\x9d\x2d\x9d\x81\xcb\x5f\x3b\x15\x6e\xa9\x7d\x35\x5d\xdd\xf4\x89\x47\x46\x17\x7f\xb3\xfc\xfb\x27\x36\xd7\xb9\xfb\xc6\x5e\x7d\xbf\xd9\xf5\xc8\xf0\xcc\x2a\x08\xcf\xf1\x86\x67\x93\x24\xc4\x20\x41\x94\x37\x80\xe9\xab\x4a\x2a\xa9\xd1\xbf\x16\xeb\xf3\x8a\x41\x2d\x35\x89\xa1\xa5\xc5\x29\x43\x19\x45\xc1\x12\x9b\x1d\xf2\xe6\xee\xaf\x9d\x9a\x56\xa9\xf2\x17\xcf\x56\x01\x78\x6d\xf5\xbb\x8b\x2c\x46\xfa\x08\xb4\xee\xb9\x79\x56\x7e\x94\x9f\x7b\xf9\xdb\x0c\x27\x8d\xfe\x9b\x37\xb6\x57\x16\xf8\x67\x65\xdd\x81\x0f\x80\xbc\x43\xb2\x18\xc0\xf9\x75\x0f\xd6\x79\x46\x5c\x34\x6c\xd7\x08\x5a\x7d\x5c\xd9\xc9\x6e\xe9\x53\xd5\xcf\x09\xa5\xf3\x8e\xd9\xf8\xf6\x8f\xa3\xb6\x97\xbe\x63\x7a\x66\x0d\x80\x72\x7c\x4a\x21\x08\x55\x81\x72\x28\x31\xb0\xe4\x00\x47\x64\x55\xa0\x47\x7c\xaa\x59\x91\x1f\xea\x31\x67\x70\x98\xb7\x24\x83\xd7\x75\x81\xfe\xe9\x2e\xfa\x0f\xec\x86\xf3\xd3\x4e\xb8\x33\xaa\x31\xb5\xd6\x17\x8b\xbe\x1d\xf1\x26\x5f\xb5\xcb\xab\x6f\x3d\xd4\xfa\xca\xe1\x4e\x93\x55\x92\x5e\xf8\x34\xcd\x30\xec\xff\xe2\x65\xaa\x2c\xb0\x3b\x6c\xfc\xa6\x5c\xf7\x9f\x6f\x5f\x3b\x71\x0a\xde\x5e\x6a\x43\xb9\xc5\x57\x2e\x6d\x6e\x5f\xa5\x93\x67\x7c\x56\xed\xcb\x9b\x3a\x17\x3e\x5e\x30\xc3\x6b\x16\x22\x04\x20\x4d\x7c\x1b\x21\x1c\xaa\xc0\x81\x1e\x61\x09\x24\x56\x82\xa1\x9a\x7a\x02\x97\x18\x92\xa7\x10\x68\x8b\xc6\xbf\x5e\xdc\x10\x48\xc0\xe7\x0c\x3b\xad\x7d\xee\xeb\x06\x3d\x3a\xdf\xb9\xf6\xa6\x79\x15\xc4\xf5\xf7\x78\x73\xa5\xb7\xe6\xd7\xee\xf3\x42\xf7\x9f\xf0\xbc\x4e\xef\xad\x3c\x36\x20\xc3\x35\xde\xc8\xf0\xb9\x14\xc5\x49\x1c\xeb\x9a\x0e\x69\x1c\x41\x57\x75\xa9\x1a\xf1\xa2\x97\x30\x9a\x1e\xe8\xac\xe7\xa5\x9e\x1c\xca\x22\x84\x98\xf3\x2d\x9f\xcd\x19\xf6\xd3\x5f\xe3\x62\xef\xde\xbb\xaa\x4a\x45\x66\xf3\xaf\x97\xf8\x4b\x35\xdf\x7d\xe1\xf9\x6e\x83\x1a\x2e\xff\x32\x30\xed\xa8\xdc\x60\xe7\x50\x66\x59\x92\x09\x0c\xc9\x89\x43\xdd\x53\x4c\x8c\x9d\x40\x21\x9a\x8f\x19\x10\x62\xc5\xf1\x2d\x8b\x4f\x62\xd5\x8a\xa0\x9c\xf2\x86\x23\xb0\x96\xc3\x03\x22\xfe\x5e\x2e\xfa\x17\xe5\x0c\xbe\xe9\x9f\x95\x4a\x07\xb6\xe8\x9f\xa7\xf5\xa0\x2c\x3f\x72\xd7\x9c\x93\x67\x9b\x16\x1b\xfe\x69\xcc\x37\x3a\x54\x7b\x43\x87\xcd\xfc\x98\xf1\x1b\x56\x2c\x2d\xd4\xfe\x96\x6a\x3d\xfb\xad\xda\x79\x74\x46\x86\x03\x7e\x8f\xb2\x34\x06\xb6\x16\x72\xaa\xa6\x72\x09\x8d\x65\xc0\xa8\xb6\xa4\x49\x4a\x14\x85\x7e\x92\x02\x47\x54\x6c\x57\x4d\xc4\x50\x62\x69\x6a\xc8\x69\x94\xf3\xb7\x29\xb1\x2d\x69\x7c\xd7\xfa\x4d\x0d\x0f\x8a\x57\xb6\xbf\xfe\xdd\x5c\xf8\xcc\x23\x97\xcf\x7d\xb3\xf8\x74\xed\x79\xe7\x66\xe2\xee\xbe\x0e\x33\xeb\x99\xf1\x5c\x9c\x44\x90\xc6\xa9\x63\xb2\xba\xac\x71\x26\x48\x25\x41\x35\x41\xa2\x81\x50\xc7\xb2\x0f\x74\x4e\x09\x5c\x51\xa0\x9e\x28\xc7\x88\x01\xae\x65\xe6\x5c\xfa\x28\x70\xea\x95\xd5\x4d\x5a\xdc\x76\x79\xea\x9d\xc3\x69\xfe\x6a\xfd\x97\x36\xdf\x73\x68\xca\xc3\xd5\x37\xf6\x5d\x57\xab\xff\x63\x46\x91\xe9\x1f\x65\x36\xe8\x37\x18\x95\x91\xb1\x64\x0a\x1e\x87\x13\x8c\x43\xd7\xf4\x43\xd1\x4f\x21\x0d\x15\x1c\x53\x1a\xb8\xbc\x87\x43\xc0\x4a\x26\xe4\x3d\xc7\x54\x6d\xc3\x8c\xb3\x3b\x94\xaf\x4f\xfe\xf8\xd0\xbb\xdf\xd7\x3a\xd0\xf3\x40\xc3\xc6\xea\xa6\x35\x23\xde\xb8\x34\x69\x76\x5b\xfe\x97\xad\x85\xb6\xe3\x37\xce\x2d\x3d\x5c\xe6\x7f\x67\xd4\x7a\x79\x81\x7f\x96\x6d\x1d\xd8\xb2\x44\xb3\x3c\xcd\x06\x67\xf9\x30\x95\x26\xe7\xad\xf4\x79\xc9\xa9\x8f\x0e\x78\xf6\xc4\x94\x6f\x77\x7f\xf5\xe8\xb0\x36\x0d\x66\x0e\x3a\xf1\x79\xa5\x5b\x47\xad\x3a\xd8\x61\x46\xdf\xd6\x99\xfd\x30\x3c\x20\x16\x04\x56\x4c\x03\x4d\xa5\x82\x46\x45\xe9\x37\x77\xcd\xf7\x05\x93\x00\x96\xb1\x45\x0b\xda\x3a\xd5\x90\xa7\x26\x0a\xf4\x02\xc1\x91\xd8\x1c\x3c\xfd\x16\xf6\xe7\xb7\xa4\x9f\xbd\xf3\xf3\x1d\xc7\x5a\xb5\x1a\xfa\xe9\xa7\x5f\xad\x6a\xb2\xf8\xc7\x01\x1d\xd6\xff\x3a\xb8\xf3\x3d\xb3\xdb\xdc\x5f\xf8\x8b\xcc\x42\xc6\x69\xe0\x5a\x69\x4a\x13\x0d\x61\x28\x6b\xb2\xa8\x9b\x1c\x27\xd8\xb6\xc3\x61\x25\x0c\x71\xa0\xdb\x96\x6c\xa8\x9a\xe5\x47\xac\x2c\xa4\xaa\x69\xa5\xda\xb5\x26\xf0\x1f\xcb\x35\x8f\xf7\xf8\x76\xff\xe2\x79\x1d\x46\x9c\xb2\x46\x1e\xbe\xa7\xc6\x57\x2b\x77\xbf\x7c\xbc\x90\xd0\xb4\xf6\xb2\x5a\x55\xfb\x2c\x1c\x0a\xaf\x7f\x44\x2a\x47\xcb\x4d\x34\x22\xa5\x91\xa2\x21\x5b\x01\xc0\x89\xfc\x90\x45\x3c\x55\x78\xc7\x75\xe4\x54\x37\x01\xc7\x1b\xa1\xc7\xb0\x11\x13\xa8\x21\x07\xc3\xc0\x4a\x05\x33\x67\xd8\xcb\xde\x76\xbe\x9d\xf3\xc6\xe7\x23\xfa\xe4\xbb\xda\xac\x7f\xdd\xbb\x5c\xbe\xe9\x14\xaf\xce\xca\x37\x3e\xae\xd3\x70\x76\xa5\x12\x45\x16\xef\xcf\x2c\x6c\x10\x3b\x89\xcf\xa4\x92\xa9\xa8\x91\xef\x9a\x41\xc0\x08\xc8\x09\xe4\x90\x67\x34\x80\x52\xd3\x95\x98\xc0\x34\xd9\x88\xc1\x20\x0a\x34\x8e\x75\xc8\xef\x75\xa9\xec\xb0\x4f\x57\xaf\x73\x61\xfd\x3c\xaf\x7c\x9d\x1b\x0b\xa9\x3f\xaf\xf9\xf4\xa3\xe7\xed\x0e\x0f\xb5\x1b\xdd\x3a\xef\x0d\xcb\x0f\x1f\x9a\xf5\xc4\x57\xf3\x33\x3c\xb8\x28\x48\xb1\x23\x5b\xba\x0a\x62\x4b\x49\x65\x56\x4c\x10\x20\x89\x4a\x48\x80\x19\x3b\x15\x31\xc7\x48\x3c\xc6\x4a\x2a\x49\x54\x88\x59\x47\x46\xe6\x7f\xac\xf7\xd7\x9b\xff\x59\xf5\x63\x60\xcb\xca\x83\x6f\xbf\xf9\xd9\xac\x1d\x86\x73\x4f\xae\x66\x8f\x74\x99\xb4\x2f\xfc\xe6\x85\xc7\xe6\x48\xf7\xbf\x59\xab\xf4\x43\xdb\xf3\x94\x6f\x35\xe0\xf0\xb6\x4f\x1a\x56\x3e\xf1\x5d\x66\x7f\xa5\xa8\x41\xd3\x4b\x4d\x85\xd3\x02\x59\xc7\xa6\x8b\x28\x30\x0d\x39\x8a\x35\x2d\x88\x39\x31\xb5\x14\x5b\x10\x00\xc3\xe1\x84\x71\xad\xc4\xf6\x62\x40\xe4\x9c\x2f\xb1\x2e\xa3\xe1\x37\x65\xbb\xdc\x5f\x0e\x3f\x7c\xac\xc2\xed\xf7\x35\x2f\x58\xe5\xbd\x73\xcd\x56\xee\x5d\x70\xb0\x51\x87\xb2\xed\xa4\xae\x93\x32\xdc\x29\x61\x98\x3a\x31\x54\x5d\x8d\x1d\x8c\x29\xaf\xe8\x0a\x94\xb0\x18\x53\x45\x0c\x59\x4b\x15\x21\x67\x5b\x1e\x11\xb0\x16\x45\xb2\xa3\x22\xc5\x61\x35\xf4\x17\xee\xdc\xd5\x72\x35\xde\x91\x4b\xb7\xba\xd4\x62\xfa\x03\x6f\x7b\x1b\xc7\x95\x9e\xf7\x28\xff\xf4\xd1\xe6\xd3\xae\x94\xfb\xf4\xc7\xfe\x2f\x55\xda\xf6\x5e\xa6\x2d\x98\x93\x1d\x51\x50\xed\xc0\xb4\x59\x59\x8e\x24\x35\x02\xae\x27\x09\x06\x2f\x7a\x56\xc0\x47\x61\xac\xc4\x89\x40\xb0\xc4\x58\x88\x50\x56\x35\x02\x9c\xb3\x29\x5c\x3e\x50\x7c\xd8\xcd\xb8\xec\xe2\x79\xf5\x97\x6f\xeb\xff\xfc\xcd\x0b\x3a\xdb\x97\xc6\xcc\x7e\x77\xca\xd7\xe3\x6f\x2c\xdb\xba\xfd\xae\x0f\xaf\xbf\x35\x2c\x47\xd8\x3a\xd2\x2d\x83\xd2\xc8\x15\x70\x42\x21\xb4\x68\x8c\x39\x89\xa6\x3a\xe1\x00\x6b\xf8\x86\xa9\x1a\x26\x8d\x05\xc8\x41\xe4\xc5\x10\x87\xba\xfb\xfb\x3a\xa9\xec\xb0\x1f\x4d\x96\xd4\x68\xd8\x7c\xd6\xf4\xad\xcf\x1f\xe9\xb6\xa5\xf3\x3c\x32\x6c\x50\xd3\x6d\x73\x9d\x64\xdc\x7b\xdb\x26\x15\xa8\x3b\xb5\x7e\x90\xe1\xc5\x77\x5c\x44\x89\x8d\x70\x60\xf3\x9e\xe2\x30\x81\xa8\xaa\x61\x90\xe8\x96\x06\x01\x6b\xeb\x51\x88\xf4\x54\xe1\x1c\x25\xe4\x74\x89\x53\x38\x8b\x17\xa4\xbf\x70\xd0\x4e\xfd\x38\x63\x79\x85\xcf\xab\xf7\xf9\x6c\x7b\xe9\xbc\xe7\x2e\x9f\xdd\xd7\xe0\xc9\x97\xcd\x6a\xc5\xf3\x9d\x4b\xa3\x77\xaa\x4e\xbe\x79\xd6\x93\x99\x8d\xd7\x25\xc3\x25\x91\x1b\x41\x49\x0c\x08\x65\x39\x93\x0f\x15\x5f\x82\x2e\x30\x35\xdb\x52\x75\x48\x6c\x41\xa1\x11\xb5\x2d\x23\x72\x43\x85\x17\x9c\x34\x4d\xfe\x70\x9e\x87\xdf\xf4\xcf\x2a\x92\x03\x5b\xde\x38\x20\x4f\xe5\xc1\x59\xd3\x56\xfa\xe3\x65\x26\x24\x2b\x2b\x76\x7c\x61\x55\xf3\xb6\xa3\x5a\xb6\xfa\x69\xf1\xd9\x91\x73\x07\xe7\x29\xd2\x6d\x7c\xc1\x36\x5f\x7c\xb1\xe5\xc1\xcc\xfe\xca\x24\x35\x88\xc4\xd9\xbc\x6f\x48\x6e\x62\x60\x18\x50\x2e\x0e\x4d\x4a\x29\x86\x86\x6f\x45\xb1\x81\x55\x5b\xe6\x8d\xc4\x01\x38\x30\x38\xa8\x07\xac\x9f\x73\xda\xea\xdd\x6d\x53\xba\x8d\xc8\xbb\x01\x34\xdc\xf4\x66\xdb\x55\xeb\x2a\x16\x9e\xfb\x3d\xf3\xdc\x97\xd2\xc0\xc6\xc1\x12\xfb\x9c\xdb\x72\xde\xf5\x37\x0e\xe5\x08\x5b\x84\x82\x67\xc6\x36\x4d\xf5\x30\xd0\x55\x5d\xd1\x04\xe2\x43\x9f\x65\xa2\x08\x72\x8c\x14\xa6\x36\x8e\x52\xce\x90\x59\x68\x19\x21\x8f\x59\x20\xca\x4a\xce\xb0\x87\x82\x2d\x4f\x37\xde\xd3\xe2\xe8\x94\x07\xb4\xe6\x8d\x07\x6d\x1c\x8f\x5a\x2e\x9b\x7d\xfc\x86\x7d\x9d\x46\xb7\xcd\xbf\xb8\xe8\xac\x8a\xd7\x9f\x8e\xcd\x79\xff\x90\x67\x26\x54\x76\x84\x24\x65\x6d\x4b\xf7\x75\xc4\x28\x8e\xa2\x9a\x0e\x2f\x19\xd4\x70\x89\xc8\xb9\x6c\x1c\x52\x83\xb1\x3d\x5e\x4d\x0d\x9e\xb3\x0d\x33\x67\x53\xd8\x1c\x3d\x9d\x6f\xc6\xf9\x4d\x6a\xd1\x3b\x4f\x6f\x9f\xb3\xe8\x95\xe6\x83\xde\x29\x74\xb0\x49\xcd\x9e\x55\x2b\x3d\xd2\x79\xe2\x7d\x95\x4e\x76\xcc\xac\x05\xa7\x22\xd4\x05\x0f\xf9\x02\x75\x03\xe8\xf3\x81\xcb\x59\x7a\x82\x40\xa4\x7b\x08\x41\x9f\x91\x51\x24\x49\x8c\x81\x74\xce\x32\x5d\x19\xa2\x44\xa1\xff\xc9\x03\x3d\xc7\xfe\xb3\xc1\xc3\x81\x2d\x2f\xf7\xbb\xfa\xe3\x6b\x15\xb2\xfc\x4c\xe7\xe5\x45\xfa\xb8\x0b\xe1\xcc\xf1\x9e\xbf\x60\x77\xb2\xf6\xae\xe2\x9f\x7f\xdf\xe1\xbb\x67\xc6\xcd\xaf\xfb\xd6\x3d\x93\x3f\x3b\x2d\x49\x99\x55\x2a\xdb\x4b\x58\xce\xd6\x75\xcd\xb7\x35\x98\x68\x44\xb6\x2d\x09\x23\x8f\xf1\x15\x4e\x63\x9c\xd0\x14\x38\x8d\xba\x4a\x82\x54\x8c\x60\xc4\x10\x64\x49\x76\xce\x75\xd8\x6a\x0f\x6c\x5f\xf6\x93\xdf\xa4\x6d\xa5\x49\xda\xa2\x2f\xf2\x2d\xa9\xd4\xf4\xd3\xf7\x77\x8c\x58\x54\x69\xdf\xf4\x11\x8d\x06\x16\xe8\x18\xd8\x19\xae\xa6\xfc\x17\xaf\x2a\xfe\x01\x59\xad\x7d\xb0\x74\x93\x27\x5f\xe0\x96\xf4\xb5\x2b\x4d\x8b\x6b\xb6\xeb\x55\xf5\x43\xe9\xca\xc5\x37\xf7\x5c\xee\xd4\xb7\x51\xcd\x81\xb7\x65\x78\x6a\xc4\x51\x15\x0e\xe3\x94\xc7\x21\xc3\xeb\xbe\x1b\x09\x36\xd5\x30\x76\x89\x2f\xb9\xb1\x1f\x59\x32\x23\xf9\x86\xe2\x33\x88\x43\x34\x8c\x1c\x89\xb1\x91\xf5\x17\x53\x23\x1f\xd6\x5b\x3b\xb1\xec\x02\x3c\x78\xf7\xc0\x8b\x26\x5c\x90\xf4\x8a\x16\x5f\x78\x9e\x67\xf3\x16\xbb\xa7\x85\x38\xec\xe7\x92\xd3\xfe\x34\x79\xb8\x7e\x4f\xb1\x82\xd3\xbb\x4c\xeb\x5b\xe5\xc7\x3c\xc7\xb6\xdf\x0b\xf7\x5c\x80\xf3\x6b\x6f\x00\x51\x8d\x02\xb4\xe4\xcc\x7e\x6f\x7e\x59\x3f\xcb\x57\xb4\xeb\x7c\xdf\xf4\xbd\xa6\x79\x1b\xdc\xda\xaa\xe1\xcd\x9f\x57\xbb\xf1\xd7\x7c\x67\xb6\x4d\x3e\xdd\xa1\xba\xf0\xcb\xed\x4f\x75\x6b\x77\x68\xfc\xdd\x99\xbd\xdc\x09\x43\x70\x44\x5c\x2f\x44\x66\x60\x60\x13\xa5\x1e\x22\x91\x1d\x28\x2e\x35\x89\x6f\x0b\x54\x09\xd9\xc0\x82\xbc\xe1\xb1\x82\xe0\xba\xbc\xab\xfe\x3e\x48\x93\x35\x7e\xdb\xb0\xa3\xcc\xb6\xd6\xc2\x8d\xf9\xf0\xc0\x4d\xb7\x8f\xaa\xf9\xda\x1b\xc6\xde\xd1\x15\xaa\x3e\xb1\xa2\xeb\x9b\xe3\x0a\xae\xc8\x17\x0e\xb9\xfe\xf8\x2d\xc7\xaf\x28\xb0\xbc\x07\x68\xec\x69\x5a\x42\x41\xa4\xda\xba\xcc\x2b\x3a\x96\x6d\x81\xc3\x36\xf4\xdc\x44\x4d\x53\xc8\xba\x31\xd4\x42\x29\xe5\x1c\x1b\xf3\x04\xff\xc5\x57\x7c\x3f\xcf\xd7\x75\x1f\xaa\x5e\xff\x86\xd2\x4f\x35\xe9\x72\xbf\xfc\xec\xd6\x8e\x4f\x1d\xb9\x71\x75\xb1\xd1\x7b\x97\x77\xf8\x00\x2f\x1e\xd4\xe2\x99\x2c\xdf\xe5\xfd\xa3\x3d\xb6\xbf\xd2\xe1\xc2\x85\x1d\x6f\x4f\xc8\x5b\xbd\xb1\x03\x36\xdd\x32\xfd\xd5\x7a\x6f\x29\x2b\x8b\x0c\xcb\xbb\xf5\xcd\xdb\xbb\xa8\x99\xfd\x2e\x2e\xf6\x41\x64\x25\x29\x56\x74\x26\x21\x32\x88\x75\xd5\x91\x39\x9c\x08\x1e\x4e\x45\x17\xba\x2a\x35\x64\xa8\x89\xba\xe9\xc9\x12\xa0\x7a\x9a\x4a\x39\x24\x3c\x4e\x6c\x6a\xf2\xc8\xd6\xb2\xfd\x9e\xec\xd2\xae\x52\x3f\xb1\x55\xc7\x63\x63\x4e\xf5\x2b\x51\xe8\xd6\x8e\xf5\x2f\x0d\xb9\x73\xcd\xfb\x2b\xe2\xeb\x4f\xb2\xe6\xfc\x5d\x04\xc8\xf2\x9e\x48\x18\xc7\x8c\xb0\xa3\x0b\x90\x4f\x20\x96\x20\x0b\x5d\x59\x12\x03\x53\x0e\xd2\xd0\x92\x89\x46\x1c\xc5\x8a\x43\x2b\x0a\x02\x22\xff\xc5\x77\x79\x71\x7b\xe5\x42\xb7\xd8\x6c\xb9\x83\xfb\x2a\x15\x7a\xf2\x10\x69\x58\xbb\xf0\xda\xb4\xf8\xae\x8d\x2f\xd5\x5d\xfb\xae\xb2\x48\x4e\xf2\x65\xa9\x00\xdd\x7e\xba\xe0\x88\x75\x9b\x8a\x56\x5c\x37\xe2\xec\x97\x33\x18\xe5\x07\xb8\xb1\xce\x08\x7c\xe6\xe9\x5b\xa7\x35\x98\xfc\x4d\x8b\xcd\x0d\x8a\x64\x38\x25\xab\x51\x2e\xc5\x34\x0a\x14\x39\xa0\x92\x97\x32\xac\x66\x01\x4f\x47\x02\x8e\x24\x3f\x74\x02\x4b\x60\x78\x29\x50\xb1\xac\x44\x09\xeb\xe2\x50\x13\xa4\xec\xac\x57\xaa\x54\xc5\x73\x3b\x8b\xa5\x37\x9e\xb8\xa7\x5f\xe1\x09\x15\x0b\x54\x94\xd7\x38\x85\x6e\x7a\x6b\x52\xd1\x77\x1b\x3f\xd1\xab\x65\x9e\xc3\xb7\x67\x78\xb9\xa6\xe0\x26\x29\x17\xbb\x22\xe2\x18\xc5\x53\x03\xd9\x71\x4d\x25\x35\x5d\x56\x88\xc5\x50\x51\x38\xc4\x88\x9a\x12\xf9\xae\xa5\x01\xc3\xc0\x9a\x9b\x4a\x4c\x76\xc8\x77\x0c\xbe\xef\xd4\xae\x2d\x3f\x7f\x7c\x70\x77\xf3\x19\xf9\x87\x1f\xff\xbc\xea\x95\x82\x6b\x3f\xbc\xb4\x6e\xf9\x85\x2f\x27\xbd\xb8\xf2\xec\x81\xcc\xb2\x92\x20\x68\x14\x99\xa6\xe1\x11\x26\xd0\x75\xdf\x10\x3d\x0d\x3a\x22\x67\xb8\x81\xec\xa9\x12\xab\x26\xc0\x74\x82\xd4\x76\x15\x9d\x68\x8a\xcb\x13\x25\xfc\xfd\xed\xe0\xec\x21\xc7\xe8\x07\x8a\x04\x73\xce\xb7\xe8\xd6\xed\xf4\xb6\x1b\x5f\x6b\x53\xbb\xd2\x90\x42\x27\xef\xfe\xe1\xfb\x35\x13\xca\x9c\x8b\xcf\xfe\x32\x62\xe0\xdc\x0c\x6f\xb8\xc6\xae\x18\x89\x91\x4e\x3d\x35\x55\x5c\x41\xff\x0d\x68\x44\x19\xc4\xda\x50\x63\x68\x00\x2d\x4d\x06\xa9\x84\x15\x93\xd3\x43\x64\xbb\x86\x6b\xfe\x45\xbe\xfe\xce\x71\xf3\x5a\xcf\xd0\x2b\x18\x07\xcf\x0f\x5f\xb9\xe1\xc1\xa6\x5f\x15\x99\x71\xdb\xea\x23\x2d\xef\xf0\xda\x5d\x98\xb9\x6c\xc1\xac\xb4\x44\x66\xb9\x46\xa6\x81\x13\x32\x21\x0e\x65\xd9\x4c\x02\x26\x75\x5d\x0a\x13\xd7\xf1\x0d\xd6\x4b\x15\xcb\x06\x9c\xa0\xb8\x66\xc4\x72\x18\xc6\xc4\x0e\x3d\x4e\x63\xff\x22\xc0\x5b\x37\xa5\xf4\xbe\xfa\x47\xfa\x77\xf8\xdc\xaf\x31\xe7\xd7\xa3\xb7\x18\x8b\x0a\x14\xab\xfd\xe4\x4b\x6b\x26\x3d\x58\xfe\x0d\xa6\x41\xf7\x73\x67\x32\xab\x24\x8c\x23\xe8\x6a\x6a\x8b\xc4\x97\x79\x00\x1c\x55\xe4\x75\x2c\x73\x42\xea\x45\xa6\xe0\x50\x48\x99\x18\xc7\xbc\x16\x49\x1c\x74\x34\x36\xc2\x80\x37\xdc\x9c\x53\xd9\x45\x9e\x07\x27\x27\xb4\xae\xfc\xb4\x99\xec\x2b\xd5\xf7\x52\xed\x99\x2f\xd7\x9a\xe4\x68\xf3\x2a\xbe\x5e\xe6\xe5\xb2\xd5\x62\xc1\x2e\x94\x61\xaf\x36\x4c\x89\x1f\x73\x0a\x05\x00\x8b\x28\x4d\x53\x9d\x55\x20\xa3\x26\x8e\xa3\xb8\xba\xea\x85\xba\x05\x7e\xb3\xc7\x20\x16\x74\xd5\x75\x88\x6b\x79\x39\x34\xce\x1c\xcd\x53\xa7\x24\x79\xe2\x35\xb3\x4b\xdf\x47\x97\x17\x3b\x74\xb8\xc8\x17\xf5\x97\x54\x79\xbf\xfb\xb2\x06\xc3\x76\xb7\xfe\xfc\xf1\x07\xd6\xef\xc8\xf0\x5e\x4a\x4f\xc2\x96\xcd\x03\x26\xe0\x4d\x9e\x86\x9a\xed\x07\xae\x62\x3b\xaa\x6e\x63\x3d\xd0\x78\xc4\x40\x64\x06\x7e\x44\x59\x20\xf8\x8c\x9c\x3a\x89\xef\xfd\x45\xaf\xec\xdb\x5b\x3e\xba\xb3\xce\x77\x9d\x96\x4e\x7c\xb0\xea\xf9\x2f\x37\xac\x6f\xf6\x4a\xf3\x6a\x1f\xd6\x98\xf4\xe6\xd0\x31\x3b\x6b\x0e\x1b\x35\xad\xfe\xb9\x2c\xea\xd4\x5b\xdc\xf5\x5d\xdf\x1f\x4b\x73\x9d\x86\x77\x79\xe6\xc7\x06\xe7\x0a\xb8\xb3\x27\xfc\x5a\xff\xc7\x2a\xab\x9f\x1d\xf3\xe3\x57\x75\x7f\xa8\x79\xfd\x25\x86\x8c\xaf\xe5\xca\x02\xbb\x6b\xdc\x79\xeb\xd9\x6f\x6f\x6a\xf6\x69\xdb\x33\xdf\xf5\x6e\x78\x71\x46\xc5\xa3\x23\xe7\xaf\x78\x4c\xba\xd4\xb5\xe3\x86\x75\x0d\x9c\x0d\xf9\x32\x5b\x6c\xd3\x55\x45\xd2\x24\xc1\x10\x54\x95\xc8\xa6\xe1\xdb\xbc\xc7\x18\xae\xeb\x46\x96\xa3\x78\x3a\x1b\x1b\x76\x64\x86\x52\x28\xf9\x9a\xa3\x50\x14\x4a\x8c\xf0\x17\xd1\x43\xb7\x31\xbd\xba\x7f\x7e\xdb\x87\xbd\x1a\x6d\xac\x38\xb5\xe8\x98\xc3\x93\xeb\x3d\xb8\xd0\x1e\xfd\x43\xf7\x6d\xc2\x23\x4f\xec\x9c\xfe\xd6\x37\xdb\x32\x6b\xbc\xb1\xe6\xd9\x24\x64\x1d\x88\x4d\x62\xc8\x58\x8d\x00\xe4\x62\x99\x4b\x02\x6a\xfa\x02\xe2\xdc\x54\xf2\x1d\x36\x60\x18\xa8\x06\x82\x95\x30\x96\x1b\xe4\xe0\xdf\xf4\xda\xb9\xe7\x64\xc7\xef\x2a\xae\x8d\x1e\xab\x1e\x96\x3d\xbf\x96\xa0\xba\x83\x7a\x1d\x9b\x7e\x43\x9d\xdb\xc6\xbe\xdf\xba\xf3\xa1\xb6\x97\x33\x0b\x39\x30\x22\x2b\x61\x5c\x08\x90\xa0\xeb\x61\xcc\xc4\xa9\xca\x6a\x81\x4b\x74\xd1\x87\xd4\x0f\x42\x4f\x17\x98\x94\x77\x93\x48\x83\x02\x36\x25\x15\x13\x35\x67\xbe\x19\x46\xcb\xf4\x4e\x17\x0e\xc7\x73\x9e\x68\xbb\x4b\x18\x5b\xb2\xf1\x1a\xbd\xd0\xb4\x41\x62\x8d\xc9\x83\xfd\x63\x13\x76\x44\x6b\xf3\x66\x96\x6f\x24\x87\x23\x91\x00\x23\x07\xea\xba\x4a\x7c\xea\xd9\x34\xd5\xb5\x04\x21\x4e\x25\xba\xe0\x29\x9e\xaf\x48\x0e\x23\x08\x12\x67\xc7\x3a\xb4\xcd\xd8\x88\xb2\xf3\xcd\xc9\xa2\x0d\xd7\x6e\xb8\x63\x9a\x63\x3d\xb1\xe0\xf8\xf1\x07\x6e\x59\x7c\xcf\xa1\x4a\xf3\x47\x1f\x1e\x37\xbd\xe0\xaa\xf1\xfb\x4a\x8d\x13\x33\xeb\xfc\x0a\x81\xab\xba\x6c\x0a\x84\xd0\x60\xb8\x98\x81\xac\xec\xba\x09\xf5\x4d\x2d\x90\x19\x62\xca\x0a\x6f\x10\x39\x52\x99\x48\x94\x00\x8a\x9d\x88\x09\x51\xd6\x93\xfe\x8f\x29\x56\xac\x3d\xbf\xf6\xc3\xef\xff\x30\x6f\x4a\x94\xff\x43\x7e\xdd\x96\x87\xab\x35\x9a\xa5\x3d\xf3\x74\x07\xe1\xa0\xfc\x11\xff\x6a\xc3\x57\x8b\x65\xd6\x01\x66\x4c\x18\x2b\xae\x0b\x74\xc4\xab\x06\x95\x60\x2a\x61\x1c\x62\x56\x46\x26\x65\x39\x2e\x8a\xfd\x14\x43\x59\xf3\x04\x9b\xf8\x9a\x61\xc7\x96\x49\xfe\xa2\x17\xab\xc4\xc8\xee\x5f\xcf\x78\xff\xbb\xc7\x3b\xbc\xb9\xe2\x8e\x67\xc5\x32\xcb\xf6\x3e\xfe\xe2\xc4\x91\x48\xda\x9f\xe7\x87\xbb\xab\xeb\x4b\xa6\x65\x36\xbf\x2b\x28\x42\x22\xa8\x7c\x8a\x4c\x68\xc1\x14\x00\x1d\x24\xa1\x2b\xe0\x34\x55\x4c\xec\x86\x81\xa1\x79\x2a\xab\x12\x64\x6b\x62\xe0\x38\x0a\x32\x31\x4e\xa5\x9c\xf5\xba\xe3\x15\xb5\xed\xb0\xc3\x57\x83\x46\xfb\xe9\xe4\x37\x4b\x7c\xd8\xb3\x55\xb2\xe3\xdd\x0b\x8b\xda\x3c\xdc\xfe\xd7\xfc\x8b\x87\xee\x9a\xfc\xea\xff\xce\xf6\xfa\x3f\x20\x3f\x66\x9e\xfb\xa8\xc6\x2f\x6f\x57\xfb\x69\x9d\xbb\xf2\x49\x58\x75\xa3\xfe\xe8\x8f\x4b\x7e\x7e\x37\xb9\x71\xd5\x8a\xcd\xa5\x8a\xab\xc1\xf5\xb7\xfa\xe6\xe8\x68\x31\x9c\x1b\x38\x2a\x8e\x03\x8f\xb8\x86\x07\x53\x3d\x66\x53\x56\x8a\x25\x09\xb1\xa9\xe3\x9b\xb1\x97\x98\x14\xc5\x91\x02\x23\xdd\x8b\x90\x66\xba\xbf\x3f\x87\x90\xfd\xa4\xbb\x6f\xde\xd4\xc2\x29\x72\xf0\x86\xa9\x67\x8f\xd6\xfb\x72\xcc\xcc\x3c\x6b\xe6\x4c\xeb\xbc\xe8\xdc\xb9\xf5\x47\x2f\x76\x16\x46\xce\x5c\xdc\x3d\xc3\xd3\x43\x32\x2f\xc6\x14\x40\xcf\x93\x7c\x2f\x52\x5c\x26\x51\x0d\xc5\xe6\x82\x48\x76\x38\x5b\xe6\x5c\x1d\x45\x86\x1f\x24\x7c\x24\x13\x16\x9a\xbe\x25\x19\x5c\x76\xae\x76\xfb\x95\x2f\xf8\xf0\xed\xc9\x8b\xfd\x87\x14\xba\xf5\xf9\x71\x5f\xdc\xc6\x0f\x09\x7a\xdf\xd2\x64\xc9\xd9\x62\xf8\xa5\xad\x4f\x0f\xad\x77\x43\xc6\x63\xd1\xd4\xf7\xd2\x50\x8d\x51\x0a\x6c\x57\xf6\x63\x11\xb9\x84\x32\x86\x1c\x47\x10\x4a\x8c\xe9\x8a\x34\x06\x89\xae\xc5\x4a\x68\xfb\x5a\x12\x99\x71\xce\x1d\xf7\x76\xcb\x46\x35\x2e\x35\x18\x1b\x37\x2a\x50\xaa\x5d\xd3\x77\x55\x72\x10\xed\x9f\xd7\xea\x62\xfc\xe6\xb2\x21\xeb\xdb\x9d\xdb\xf9\x65\x86\xa7\x96\x19\xd1\x50\xe5\xc0\x65\x23\x45\x11\x79\x93\xba\x50\xc7\xd4\x16\xa0\x0c\x21\x23\x03\x03\xbb\x49\xc0\x59\x6e\x9c\x06\x08\xc8\x2a\xe4\x1d\x8d\x65\xbc\xec\x27\x3d\x4e\x79\x74\xc9\x07\x78\xe2\xfd\xcf\xaf\xd9\xd6\x63\xf5\xd4\xcf\xeb\x7e\xf2\x50\xa7\x0b\x3d\xbb\x97\x2f\x79\xfe\x6c\x83\x57\x9b\x9d\x2b\xfd\x72\x86\x67\x69\x55\xce\xd2\x64\x35\x34\x28\x0c\x3c\xc9\x66\xa4\xc0\xe1\x5d\xd5\x0f\x78\x64\x69\x44\xb1\x18\x41\x95\x22\x0a\x24\xdd\x63\x44\xc4\xea\x61\x18\xa1\x1c\x20\x4f\xfe\x76\x61\xcd\x77\x5e\x7c\x26\x7f\xbb\x93\x03\x7a\xae\x3c\x5d\xf3\xab\xef\x2e\xbc\xbc\xeb\xc9\x47\xd3\xf3\x5f\xd6\xea\xf0\xae\x7d\xa1\xdc\x07\xff\x3b\x3b\x97\xb3\xf0\x74\xd9\x7c\x6d\x36\x1f\xcb\x1f\xe7\x1d\xf9\x98\x77\xdf\x5b\xb7\x8e\xea\xb9\xb0\x40\xcf\xc7\xa6\x36\x9f\x9c\xcf\xb8\xa5\x67\xf1\x87\xda\xa3\x6a\x19\xee\xe4\x8c\x2c\x43\xe1\x4d\xce\x33\x11\x6b\xf0\x48\x75\x7c\x20\x27\xb6\xcf\x27\x48\xfa\x2d\x78\x4f\xa8\xa0\x20\xc3\x48\xe2\x58\x09\x41\x9a\xd2\x80\x41\x62\xce\xd7\xcb\x4f\x8f\x8d\xc8\xb7\xf9\x64\xaf\xc5\xcd\xf4\xaa\xcf\x6d\x59\xe4\xb5\xb9\x6d\x2e\x9d\x19\x95\xdc\xb5\x72\x43\xff\x07\xa6\xac\x6a\x62\xcf\xcb\x70\x03\x80\xc6\xbb\x82\x22\x4b\x21\xef\xa6\x5c\x68\x33\x1c\x13\x58\x92\xce\xbb\x7e\xac\x45\xa6\x6b\x04\xa9\x64\xfa\x5e\x98\xaa\x9a\x1b\x09\x26\x95\x7d\x9e\xd5\x73\x26\xbd\xe5\xdd\x4b\x9e\xfc\x7a\x61\xb3\xad\xcd\xe7\xcc\xfc\xb0\xde\xd3\x8f\x2d\x3d\x42\xfb\x0c\xed\x95\xa7\xde\xaa\x3a\xe7\x17\xef\x58\x2e\x1e\xd9\x90\xd9\x70\x80\xb3\x18\x2d\xa1\x98\x46\x3e\x0e\x38\xcb\x81\x32\xf0\xd3\xd0\xd7\xd5\x98\x84\x4a\xe4\x98\xbc\x2e\x00\x96\xfa\xba\x19\x59\x41\x62\xa8\x30\xe0\x25\x3f\xfb\xf5\xb2\x6b\xfe\xa1\x1b\xfa\xbd\xd4\x42\x79\xe0\xd6\x03\xd5\xc6\x7f\xd3\xf1\x61\xf4\xc4\xd7\x7d\x07\x0e\x7a\xb0\x12\xd7\xe0\xfb\xcb\xa5\xa5\x0b\x23\x33\xab\x20\x0a\xa7\x08\x82\x93\x6a\x12\xa4\x5a\x4a\xa5\x38\xd1\x88\xa2\xba\x92\x2f\x6a\x2e\xc6\x8a\xad\xdb\x82\x1a\x13\x86\xb2\x22\x1b\xc9\x4c\x1a\xf2\x90\x49\xfe\x22\x01\xf7\x52\x3e\xab\x4b\x81\xda\x13\xf3\x70\x78\xd0\x86\x83\xab\x26\xde\xbb\xb5\x90\x3f\xf6\x4a\xd0\xfa\xe0\xb6\x23\x77\x2e\xaf\x70\x77\xa7\x5b\xb3\x4a\xbf\xc7\x54\xee\x36\x72\xf5\xed\xf7\xff\xd2\xfc\x38\x28\xd4\x6a\x61\xeb\x75\x3b\xef\xbc\xa1\xeb\x8e\xa7\x0e\x90\x0d\xcf\xee\x3d\x59\x75\x5e\xcf\x55\x05\xfe\x59\xd2\x7c\x60\xcb\xca\x95\x07\xfc\xa9\x2b\x77\xdb\x3b\xf5\x49\xb9\xc6\x4f\x94\x9b\xda\xab\x4c\xa7\x87\x9a\x5d\x29\xfd\x69\xfd\x43\xc3\xf2\xef\xab\xe6\x9c\x5b\xf9\x6c\x63\xbd\xeb\xb8\x0c\xbb\x42\x6e\x08\x63\x86\xb3\x63\x2e\x15\x04\xc2\x78\x36\xd2\x19\x28\x52\xc7\x10\xe2\x84\x73\x74\x85\xc6\xae\x65\x43\x97\x78\x91\x4f\x59\x45\xe2\xb4\x90\xfc\x45\x26\xe4\x4c\x9f\x15\xbb\x5e\x42\x73\x9e\x3d\x2a\x3c\x57\xf5\xe9\xba\x68\x6d\xb5\x6d\x62\x14\x37\x7a\x51\x99\x76\xb5\xf2\x30\xb5\xc8\xb1\xe7\x33\xfb\xe1\x55\x97\x89\xb0\xa7\x58\x42\xec\x18\x82\x40\x6d\xde\x0c\x4c\x07\x1a\x9c\x49\x2d\x95\x58\xbc\x6c\x72\x09\xd1\x7d\xc7\x77\x19\xc9\x72\x02\x56\x61\x44\x98\x33\x33\x18\x63\xa4\x9e\x8f\x9d\x9c\x79\xfe\x9b\xf7\x6d\xa7\xed\x47\xdf\x7c\xd1\x63\xe9\xf3\xab\x40\x59\xb1\xdc\x1c\xda\x4f\x6c\xd3\xb0\xca\x84\x0c\xaf\x4b\x83\xaa\xc6\x89\x38\x31\x04\x86\x85\x50\x8f\xa4\x14\x13\x10\xd8\x30\x70\x6c\x3e\xe0\x53\x46\x37\xa3\x94\x83\xc0\xb5\x24\x59\x10\x42\x59\xb6\x8c\x30\x67\x1e\x1e\xdd\x7f\x54\xe1\x59\xc3\x1e\x39\xb5\xb0\xf7\xf6\x53\x6b\x0a\x16\x78\xa5\xb0\xdf\xa7\xfc\x07\xf5\xde\x7b\xb6\xef\x77\xbb\xf7\x3f\x08\xa6\x5f\x7f\x02\x27\x47\x25\x91\x9c\xd8\x04\x3a\x4d\x28\x9b\x32\x4c\xc2\x31\x8a\xa9\x49\x20\xb5\x23\xee\xb7\x88\x50\xe6\x14\x4b\x74\x02\xc4\x2b\xc8\x48\x2d\x9f\x93\x5c\x1b\x0a\x5c\xce\x4a\x72\xff\xfa\xd3\xa5\xa7\xdd\x74\xf1\xa5\xd2\x8d\xa3\x95\x9d\x9d\x5e\xd2\x1d\xdf\x16\x1d\x58\x72\x73\xad\xdb\xef\xbf\xbb\xd3\xcf\x2f\xe5\x1d\x7f\x3e\xb3\xb0\x53\x9d\xf1\xac\xd0\x36\x12\x47\x4e\x12\x0d\x68\x86\xa4\xf2\x0a\xa7\xba\x08\x9b\xae\xaf\x19\x32\x13\x86\x2c\x23\xb8\x16\xf2\x0c\xc3\x41\xc8\x22\xd7\xe4\x54\x87\xdc\xf4\xcf\x0a\x59\x03\x5b\x56\xcd\x9b\x27\xcf\xa0\x2c\xb4\x5d\x68\x52\xbe\xc7\x06\xdd\x53\xb1\xc4\xd2\x99\x0f\x6e\xca\x77\xca\xea\x72\x2b\xfd\xf9\xbe\x0e\xdd\xfa\x75\xea\xdf\xd3\xda\x3b\xae\x52\xfd\xeb\x9f\xc3\xcd\xf1\xb6\x11\xa9\x24\x4b\x86\xa4\x61\x60\x20\x64\x4a\x8a\x62\xa9\x86\x22\xa4\x82\xa1\xf8\x01\x8d\x04\x1e\x3a\xac\x8c\x1d\xd5\xd5\xad\x44\x93\x39\x5f\xa2\xbf\x3f\x84\x94\xd5\x1d\x91\x7e\x39\x39\x10\xba\x57\x6e\x76\x9e\xfc\x54\xbf\xf4\xf4\x82\x51\x6d\x7f\x7a\xa9\xf0\xf9\x71\xef\x3f\xf5\x49\xe7\xd2\x6f\x3e\x96\x3c\xa0\x64\x78\xd9\x61\x1a\x19\xaa\x1b\x07\x2e\x09\x2d\xea\xb0\x91\x2b\xc0\x44\x95\x44\x59\xf1\x19\x59\xf7\x50\xa0\x52\x8d\x0f\x24\x49\x23\xbe\x1f\x2a\xa2\x15\x90\x6b\x86\x4a\xb2\xe8\xd3\xeb\x1b\x36\xb5\xe8\xb2\x74\xcf\xce\x13\x7b\xa6\x94\x3b\x32\xb2\x4e\xd3\x06\xcb\xb9\xe6\x45\x5e\x58\x9e\x77\xd1\xe0\xd7\x56\xbf\x54\x82\x5d\x91\xd9\x93\xd6\x80\x64\x46\x8a\x28\x8a\x34\xe1\xf9\x50\xe1\x58\x3e\xb0\x01\xcf\x0a\xa9\x61\xa6\x6c\xaa\xb2\x66\xc4\xb2\x20\x01\x7a\x92\x88\x7a\x94\x6a\x02\x34\x98\x9c\xcd\x60\xea\x81\x52\xbb\xb6\x9c\xe9\x38\xb6\xc0\xe2\x82\xa3\xbf\x9f\xc7\x7f\x49\xc6\xeb\x6b\xbe\xe9\xd6\xfd\x9b\x4a\x0f\x3c\x6b\xd6\xe8\xf2\x40\x92\x61\x17\xdb\x43\x72\x88\x22\xd7\x35\x34\x31\xf5\x11\x62\x78\xe0\x59\xb6\xa9\xa7\x48\x0b\x58\x37\xb4\x79\x51\xa5\x8e\xee\xb9\x5c\xc2\xab\x94\xe5\x30\x10\xff\x43\xf1\xff\xee\xaf\xf9\xbb\xba\xe1\xc0\x96\xcd\xf3\xdc\x90\x37\x6b\x7f\xcd\xe9\xad\x87\x3f\x7b\x65\x4f\xd9\x6d\xf7\x6e\x6c\x5f\xa9\x8a\x31\xf6\x97\xe0\x99\x95\xfb\x76\x5e\x7a\x65\x03\x5d\x56\xa7\xd6\xf9\x5f\x5e\xbc\x37\xc3\x65\xaa\x30\x0d\x44\xc8\xcb\x69\x28\x2b\x9e\x13\x10\x31\xc6\x29\x09\xa9\xce\x05\x9c\x00\x1d\xd6\x14\x1c\x49\x46\xae\xaa\x5a\x3e\x80\x22\x71\x42\x68\x91\x9c\xa9\x75\x97\x7d\xcb\xf7\x1d\x49\xe1\x3b\x7b\xef\x64\xba\xb9\xe6\xfc\xe9\x73\x61\xc9\x65\x2f\x0c\xea\xf1\xd1\x76\x70\x36\xef\x0d\x6d\x1f\xbc\xfe\x56\x88\x9c\xeb\x3e\x20\x11\xf8\x48\xa6\x44\x48\x19\xa4\xa9\x04\x47\x12\x08\x68\x00\x13\x9b\xe5\xc3\x48\x26\x52\x90\x78\x6a\x0c\x64\x8b\x86\xd4\x76\x88\x6d\x0a\x6e\xce\x3a\x35\xe9\x54\xe3\x89\xdb\x8f\x8d\xdc\x50\xfd\xf6\x29\xee\x88\x1e\xf7\xec\xd8\x7e\x69\xaf\x3a\x7b\xab\x34\xd1\x9c\x59\xf4\xb9\x15\x1f\xd0\x89\x99\xa6\x56\xd3\x24\x26\x87\x54\x2d\xb1\x53\xa0\xa5\x16\x6b\x26\x94\x95\x75\x16\xb1\x09\xc7\x40\x53\x4d\x52\x36\x50\x79\x84\xf5\x28\xe4\x64\xd1\xc4\xd6\x5f\x34\xf6\x95\x1a\xff\xcc\x27\x2f\xef\xde\xfd\xd8\xc0\xc1\xe3\x4e\xf0\x9f\x15\x68\x89\x0b\x35\x9e\x51\xa2\x1c\xdc\xd6\xe7\xec\x96\xd3\x2d\x9e\xba\xb2\x3a\xb3\xa9\xe3\x88\x47\xa1\xc5\xf8\x92\xc1\x53\x36\x82\xbe\x88\x08\xd6\x78\x4b\xf2\xc5\x04\xbb\x0a\x54\x63\x8e\x89\x43\x25\xb6\x19\x56\x89\x05\x87\xe1\x23\x3f\x08\xff\x20\x9e\x7f\xfb\x74\x7f\x57\xaa\x1d\xd8\xb2\xf5\xe4\x3c\xcd\xb2\xfa\x74\xaf\xdd\x5d\xbe\xea\xc9\x49\x78\xc5\x47\xf7\xaf\x1d\xf8\xa1\xd6\x7b\xf4\xd2\x52\xfb\xcb\x6c\xff\xf1\xb6\x23\xbf\x36\xd1\xd6\xbf\x87\x82\xeb\x6f\x16\xcd\x91\x5e\x39\x1f\x27\x01\x6f\x09\xa2\xef\xfb\x8c\x8b\xdd\x88\x18\x61\xe4\x03\x1b\x18\xba\x24\x11\x97\xc1\x1c\xa7\x81\x40\x44\x8a\xec\x2a\x02\xef\x11\xc8\x04\x39\xd3\xeb\xa0\x93\x1f\xf5\x8c\x7a\xfe\xa0\x5f\x6c\xd2\xaa\xc6\xc5\xdd\x13\x96\x08\xc2\xf0\x4a\x0d\xa7\x36\x19\xca\xed\x9d\x76\xf9\x7b\x63\xd7\x7d\x99\x0d\x52\x79\x06\x46\x86\xcb\x30\x91\x6b\x88\x3e\xeb\x19\x86\x9d\xc4\x50\x01\x32\x47\x74\x14\x71\x6a\x68\x98\xbe\x2a\x30\xa9\xc8\x9a\xa1\xe7\x23\xa0\x98\x54\xcb\xd9\x82\xbf\x7b\xf2\xc6\x7b\xfa\xb4\xe8\x5d\x6e\xcf\x9a\xab\x9d\xda\x56\x7a\xa6\xf6\xc3\xf7\xcf\x69\x36\x6b\xd0\x11\xf9\x01\xf6\x87\x0a\x6d\x7e\x78\x7a\x5f\x66\x61\x3b\x06\x90\x63\xc0\x89\x0a\x61\x68\x24\x39\xa1\x62\x10\x8a\x78\x19\x9a\xc0\x93\x28\x0d\x1c\x9a\xb0\x09\x4b\x65\xdf\xf3\x43\x19\x85\x54\x4d\x89\x9e\x33\xec\xf1\xd3\xdd\x01\xbd\x7b\xfe\xf2\xd3\x80\x7b\x9f\xdb\xff\xf8\xdc\x1f\x8b\x17\x6b\xb1\xf8\xc2\x9c\xf9\x61\xad\x9a\x63\x5e\x7f\xf7\x95\xdb\xa7\x5d\x7f\x73\x7d\xce\x9d\x41\x02\xa6\x5c\xc0\xbb\x04\x06\x0e\xf6\x51\x2a\xea\x21\x2f\x50\x2f\xd5\x21\xe5\x64\x44\x89\x6b\x07\xc4\x71\x23\x45\x96\x4c\x8d\x4d\x11\xab\x53\x36\x67\x25\x79\xea\xae\x26\xf7\x56\xdf\x57\xe4\x89\x97\x6f\x7f\x76\x5d\xdd\xef\xf5\xe3\x8f\xcc\x54\x6a\x74\x3b\xd1\x69\xf8\x9c\xdb\xdf\xfe\x66\xfe\xcf\x6f\xce\xcc\xac\x05\x93\x18\x11\x55\x4c\x03\x0a\x04\x59\xf4\x42\xdb\xf6\x25\xcc\x9a\x29\xef\x60\xce\x71\x34\xac\x06\x2e\x17\xab\x28\xb4\x63\x56\x74\x12\xc1\xe3\x4d\xc1\xca\x36\x69\xf5\x77\x25\xb9\x81\x2d\x9a\x15\x6d\x96\xd5\xa5\xbb\x67\xd4\x5c\x58\xa0\xef\x84\x05\xe3\x26\xf6\x3d\x79\xb4\xc6\xb2\x2b\xdf\x9d\x1f\xc2\x14\x5a\xb5\xae\xd9\xe0\x0e\x1b\x37\xad\xd2\x6e\xb9\x9a\xe1\xac\xa9\x22\x88\x84\xf1\x3c\x8c\x93\x00\x46\x1a\x1f\x78\x4e\x2a\x0a\xb2\x93\xba\x9e\xc4\x98\xb2\x15\x71\x80\x30\xd4\xb6\x03\x5f\xc0\xa6\x47\x35\x62\x06\xd9\x5d\xba\xa9\xf7\x94\x2d\x36\xf1\x40\x9f\xc1\xcf\xe6\xbd\xd8\xf8\xbb\xd9\x7b\xbb\x6e\x18\xfc\x7c\xcf\xfe\x9d\x8f\x2d\xaf\xfd\xe4\x11\xa3\xff\x67\x8b\x6e\xcd\xec\x77\x89\x0d\x36\xf2\xb1\x1a\xca\xbc\xca\x10\xcf\x57\x25\x1e\x2b\x51\xca\x79\x4e\xa0\xc8\x11\x71\xb0\x2c\x3a\xac\xe3\x39\xa9\x16\x27\x06\xaf\xb8\x20\xfa\xfd\xa5\xb3\xec\xea\x74\x63\xf5\x86\x45\x77\xdd\x77\xe3\xa2\x5f\xf7\x7e\xdd\x73\xe5\x80\xc2\xe5\xde\xf8\x52\x1f\xf3\xce\xe1\x6f\x95\xf6\x9f\x15\xff\x79\xe4\x81\x01\x99\xb5\x02\x11\xa4\x9e\xa6\x70\xa9\xa7\x48\x94\xa6\xb6\xaf\x40\x28\x52\x5d\xa5\x88\x73\x89\x41\x4d\x0f\x38\x5a\xe4\xd8\x32\x83\x64\x5b\xb4\x03\x8b\x51\xcc\xdf\xdf\x03\xca\x0e\xbb\x7f\x5a\xfb\xd6\xea\x6b\x4a\x45\x52\xd5\x8d\x15\x1e\xff\xf6\xc1\xbb\x7b\xe3\x47\x57\x14\x6d\xc2\xbf\xb5\xaa\xe8\xb6\x34\xbc\x5c\xf6\x4a\x66\x8d\x17\x49\x54\x4b\x59\x27\x20\x82\xed\xb3\xba\x84\x38\x01\xf1\x0c\xef\x79\x8c\x1c\x04\x54\x45\x01\x48\x44\xde\x8c\x38\xc3\x08\x05\x55\x32\x12\xe8\x79\x41\xb6\x7b\xec\xef\x32\x1e\x03\x5b\xde\x90\xe7\xde\x3f\xdd\x63\x77\x56\x19\x36\xfe\x8b\x7c\x63\xef\x9c\xd3\xf5\xe3\xfb\xe6\x36\xdf\xbc\x61\x2b\x87\x87\xe4\xd5\x3f\x99\xf4\x9a\xf0\x4b\x32\xfe\xd6\xa1\x8b\x32\xfb\x71\x2c\x02\x05\xc7\x60\x1d\x26\x42\xbe\xa1\x8a\x8a\xe4\x6b\xaa\xa6\x08\xba\x2e\x40\x0b\x07\xd4\xd4\x89\x28\xca\xa2\x25\x08\xb1\x2c\x79\x16\x8a\x58\xe3\x2f\x28\x6a\x6b\xfe\x6d\x6b\xcc\x52\xcb\x4e\x3f\x4e\xe3\x32\x2d\xeb\xbe\x47\x7e\xe9\x24\xbd\xf4\xc6\x6d\x1f\xac\xae\xdf\xab\x76\xe1\x53\xa8\xd9\xf5\xe7\x87\x73\xbc\x10\x34\x8e\x05\x50\x12\xe2\x90\x81\x3a\xb0\x02\x26\x48\x25\xdd\x14\x18\x21\x48\x28\xd5\x1d\x57\xb7\x78\xc6\xc3\x16\x8b\x09\x81\x82\xec\xab\x44\x17\x98\x9c\x2f\x84\x5a\xb7\x54\xce\x37\xfb\xca\xc7\x72\xb4\xc5\x3a\xfd\x6a\x89\x63\xed\x5e\x3f\x73\x7a\xd3\xb3\x63\x96\x6e\xd8\x5a\x68\xd3\xf0\x8f\xbe\x3f\x74\xfd\x33\xac\x39\x17\xc5\x6c\x91\xf8\xc8\x13\x19\x00\xcc\xd4\x33\x93\x28\x61\x15\x3e\x40\x31\x12\x7f\xbb\xc1\x98\x24\x55\xf9\xd4\xb7\x4d\x3e\x81\xba\xcd\xc8\x88\x33\x45\x29\x67\x97\xae\xe6\xd5\x41\x15\x7f\x9c\x7b\xcb\xc6\x73\xbb\x3e\xa8\x7e\xe0\x9d\x3e\x2d\x6f\x69\xf0\x6a\xd5\x95\xad\xe1\xa5\xcb\x1f\x6f\xef\x7d\x66\xcd\xba\xd9\x19\xce\x04\x41\x47\x00\x8a\x4d\xb5\x20\x8c\x20\xe6\x63\x22\xfa\x22\x27\xc8\xb6\xe9\x79\x8c\xab\x4a\x32\x87\x0c\x57\x67\x23\xa2\xf8\x5e\x42\x03\x2d\x14\x7e\xf7\xfb\xb3\x2b\x49\x93\x63\x97\x6e\xab\xfb\xd6\xf6\xe6\x03\x17\x76\xf5\xeb\x45\xaf\x17\x6f\xfb\x6e\xcd\x0a\xef\x15\x3a\xd2\xe7\xca\xac\xe4\xb3\xb3\x63\x5f\xbd\xfe\xae\xba\x1c\x75\xdb\x25\xb2\x4b\x43\x60\x45\xb6\x68\x44\x18\x43\x2c\x42\xd7\x4c\x25\xc6\xe5\x24\xcd\x31\x0c\x4d\x8e\xdd\x20\xb6\x6d\xa4\xc8\x2a\x4c\x75\x0b\x32\xa2\xfb\x07\xec\x7f\xcf\x4a\xfe\x5d\x16\x72\x60\xcb\x66\x79\x8a\xe6\xcb\x1a\x94\xfd\x3f\xac\xbd\x65\xd8\x55\x55\xb7\x3e\x4e\x09\x28\xfd\x00\x82\x82\x94\x74\x08\xac\xb5\xe6\x5a\x80\x84\xb4\x84\x74\x23\xc2\x5c\xdd\x39\x57\x4d\xba\x94\x0e\x91\x94\x06\x01\x29\x41\x01\xe9\x90\x16\x90\x06\x69\x50\x4a\xba\x44\x9a\xff\xe5\xef\x3d\xe7\xf8\x72\x9e\xcd\xf5\x9e\xeb\xf9\xef\xef\xfb\xc3\x58\x73\x8f\x31\x47\xcc\x71\xdf\x77\xd9\x9a\x47\x2f\x87\xfe\x8a\xe7\x6d\x0b\xb7\xf8\x5e\x99\xf0\x41\xbf\x77\x99\xb3\x5f\x71\xcf\x83\x3b\x8f\xf9\x0e\xfd\xc6\x6f\xb9\x97\x64\xec\xad\x2b\xb8\x02\x25\x71\x06\x81\x31\x6d\x13\xa2\xa6\x70\xb2\xc9\xb8\xae\xa1\xfa\xbe\x1e\xba\x32\x27\x30\xa6\xe6\x19\x21\xed\xa1\x00\x90\xc8\x12\x62\xf6\x35\xcf\xda\x3d\xfd\x6f\x5b\x7e\x52\x67\xf2\xa0\x55\xd1\x5b\x3d\xd6\x5f\x6e\x5a\xf6\x96\x37\x6c\x5a\xc1\x8e\xa0\xda\xb4\xb6\x0d\x73\x77\xc8\x76\xc8\x4d\x32\x39\xba\x0d\x05\x2e\xf2\xa1\x05\xe4\x90\x11\x18\xc6\xd1\x2c\x87\x87\xba\x20\xc6\x7c\x00\xcc\x98\xf0\x7c\x4a\x0a\x55\x2d\x70\x18\x92\x24\x2c\x89\x71\x59\x23\x71\x04\x37\x68\x7f\xea\xdc\xc2\x49\xa3\x3f\xcd\x28\x6d\x6b\x91\xa7\xc2\xb2\xae\xd9\x1e\x98\x83\x0b\xde\x7f\xfa\xe8\x87\x5f\x97\x3f\x7f\x50\xbe\xce\x5f\x49\x26\x74\x09\x43\x53\x62\x19\x83\x89\xec\x48\xe4\x05\xde\xa5\x78\x4d\x0a\x2d\x57\xf5\x19\x1c\xaa\xa6\xac\x50\x22\xe6\x45\x64\x07\x8a\xa9\x69\x1e\x1d\x4b\x3c\x4a\xbc\x18\x23\xf3\x47\x67\xff\xf2\xc1\xde\xdb\xda\xb7\x25\xd7\xd6\x9f\xdd\xa1\xdb\x17\x97\x3e\x3e\xb9\x3e\x63\x01\xbd\x4c\x9d\x94\xc5\xe9\xbf\x3f\x95\x76\xd0\x43\x42\xb3\x25\x22\xe0\xf4\x18\xd8\x94\xa2\x91\xb4\x28\xe3\x28\x82\xbe\x80\x24\x2f\x50\x1c\x57\x08\x09\x25\x30\x23\x36\x24\x15\xd1\xe1\x04\x9b\x01\x9e\x4f\x91\x52\x6a\xbe\x8e\x39\xab\xa6\x9e\x18\x3a\x2d\xd7\xd7\x29\xbf\x55\xfa\x7a\xc5\xd2\xa9\xcf\x82\xda\xed\x02\x66\xeb\xc3\x94\x47\xbf\xd5\x2d\xb0\xa9\xe6\x36\x35\xc9\x1d\x16\x6d\x99\x28\x0e\x44\x42\x8e\x49\x5d\x07\x32\x24\x7d\x52\x93\x5c\x3a\xe6\x62\x10\xab\x48\xe7\x65\x95\xa1\x9d\x30\x34\xe5\x98\x0e\xb1\x2f\x42\xfe\x9f\x85\xec\x45\x75\xfe\x65\xf1\x7f\x92\x7c\x1a\xd0\x60\xdd\xa6\x4d\x2f\xff\x17\x4e\x63\xd6\xb4\xe2\x87\x0e\x85\xc4\xb2\x1d\x3f\x5e\xb8\xdb\x64\x68\xa9\x3f\xde\x3f\x37\xef\xee\x2a\xf5\xc3\xec\x03\xbe\xa9\xbe\x7b\xc3\x98\x71\x1d\x93\x1b\x07\x2a\xad\xe8\x8a\x1d\x53\x72\x44\x05\x16\xe1\x6a\x24\x94\x11\x30\x59\xd7\x54\x5d\xe4\x63\x4e\x71\x40\xa4\xd3\xa1\x4f\xf2\x11\x47\x70\x3c\xd6\xcc\xd7\x51\x76\xbc\x93\xb2\xfa\x83\xc7\x87\x8f\x9e\xdc\xd1\xab\xe9\x9e\xbe\x59\xf3\x97\x38\x73\xfb\x6e\xe1\x19\x66\x43\x7d\xb8\x96\xf2\x38\xdd\xc0\xda\xa7\x93\x9b\xc9\x14\x64\x53\x11\x8d\x42\x57\x73\x81\x69\x38\xc8\x09\x09\xdd\xc5\x6a\xa4\x72\x8a\x19\x7a\x32\x60\x44\x85\x0d\x91\x6f\xf0\x10\x0b\x2e\xc0\x46\xec\x50\x89\x39\xc7\xdf\xad\xd3\xf2\xc7\x4f\x5e\xb2\x3b\xeb\x3e\x7d\x70\xbd\x4a\xbe\x9b\x03\xef\x3d\x1d\xf7\xe4\xce\xd7\x35\x0e\xe4\x6e\xf5\x71\xf5\x3d\x5f\xb7\x4d\x7b\xff\x9b\x98\x6a\x27\x14\x34\x60\x63\x83\x8f\x23\x91\xa2\x22\x45\x8f\x34\x6c\xb0\x8e\x11\x41\x31\x50\x03\x89\x88\x02\xec\xf3\x91\x4f\x53\x01\x10\x8d\x08\x49\x8a\x67\xa6\x8e\x83\xf5\xb5\xdf\x78\xb8\xb8\xf7\x57\x13\x16\x56\xe1\x4a\x36\x2b\x7d\xff\xc0\x65\xfd\x2c\xfe\x61\xd1\xf7\xf2\xbd\x3d\x8f\x4e\x66\x1a\xbf\x2e\x67\x72\x1d\x84\x94\xa0\xe1\x19\x1e\xcb\x0a\x1e\xad\x73\x36\x29\x05\xac\x1f\x62\x9f\x53\x6c\xc3\x61\x81\x8a\x15\x4f\xb0\x03\xd1\xd1\x03\x1d\x13\x66\x60\x88\xa4\x12\xa5\x7e\x32\xbc\xd4\x7a\xa4\xd8\xfd\x51\xf6\x1a\x5d\x2a\xb5\xf8\xa2\x47\xcd\x0b\x75\x7e\x68\xf9\xec\x9d\x0c\xe5\xe7\xdc\x1c\x54\x75\xfb\x45\xb2\x4e\x76\x26\xb9\x26\xeb\xbc\x1e\xc5\x3a\xa1\xeb\x0e\x4b\xcb\x91\x1d\x98\xa2\xc7\xaa\x1a\x40\x8a\xc4\x00\x85\x56\x41\xac\x72\xae\xcc\xcb\x8e\xa7\x5a\x02\x6f\x7b\x86\xa9\xbc\x46\x45\xa2\xf9\xa5\xe7\x05\xe7\x75\x9f\xf3\x64\xd6\x87\x90\x6a\xc8\x9d\x19\x00\x2b\xbe\x3c\x5c\xa0\xc2\xfe\xcc\x2f\xd7\x56\xce\x5f\xb0\xd0\xfc\x5a\xc9\xf5\xe9\x28\x52\x70\x44\xba\x20\x42\xc8\x55\x04\x45\xd1\x79\x86\x71\x25\x97\xc1\x82\x25\x05\xac\xec\x83\x80\x63\x2c\xd9\x10\x8c\x10\x0a\x9c\x17\xf9\x8c\x62\xa5\x6e\x09\x87\x4e\x3b\x90\x5d\x28\xba\xfd\xe4\xe6\x13\xb3\xbe\xcf\x30\xa0\xcf\xb1\x86\x97\x8b\xee\x1d\x3a\xa1\x4f\xa9\xb7\xb3\xe7\x9b\x70\x3f\x1c\x9f\xe4\x61\x9b\x4d\xd8\x2c\x50\x63\x2b\xb6\xe5\x48\x63\x02\xc4\x3b\x34\x6d\x01\xcf\x30\x29\x84\x75\xd7\x0a\xb1\x49\x90\xba\x6e\xe8\x9a\xc6\x58\x22\x8a\x55\x0e\xbf\x86\x03\xb2\x40\xbf\xd6\xed\x9a\x4d\xf9\x04\x95\xb9\x97\x7b\x67\xcf\x87\x2d\x96\xbe\x95\x67\x0e\xfc\xbc\xad\x77\x93\xaa\x35\xb5\x72\x93\xc9\xfa\xc1\xe4\xd6\x2c\x9c\x26\x87\x88\x77\x55\x22\xb4\x14\x42\xe1\x69\x26\xf2\x3d\x4d\x31\x28\x20\x99\xa6\xaa\x46\xbc\x40\x53\x28\x34\x4c\x86\xb5\xf9\x38\x60\x02\x22\xd2\xa4\xd4\x27\x5d\xe1\xca\xb5\x3f\x8b\x64\x58\x5b\x20\xcb\x89\x96\x27\x0e\x8c\x3f\x35\xfb\x56\xbe\x9c\x8b\x4a\x6f\xa8\xd5\xa9\xd6\x3e\xd7\xea\xbe\x6c\x65\xd3\xe4\xa6\x23\x55\x8e\x29\x39\xf6\x11\x45\x84\xbc\x02\x80\x4d\x62\x56\x62\x28\xc8\x9a\x81\x06\xf4\x48\x02\xb1\xc5\x4b\x81\xef\xb3\x11\x54\xec\xbf\xdd\xdb\x53\x84\xd4\x37\xc7\xb6\xd5\x73\x3a\x6f\x5d\x3d\x39\x6b\xb6\x9f\x3b\x7c\x3b\xf9\x97\x95\x33\x66\x3b\x0b\xa3\xea\xc7\x4f\x98\x58\xed\xb9\xf0\xe6\x5f\x42\xda\x21\x1a\x09\x4f\x39\x76\x19\x08\x0c\x57\x23\x70\x1c\x91\x81\x10\x52\x8c\x27\x93\x16\x25\x12\x31\xaf\x02\x14\x9b\xac\x67\x5a\x3c\x0b\x75\x18\x09\x14\xef\x41\x88\x09\xf9\x35\xfc\xcc\xf3\xd9\x9e\xb9\x0a\xfc\xd9\x70\xc2\x03\xb5\xfb\x5a\x8f\xec\xa2\xbc\x1c\xb8\x61\x6e\xe7\x1f\x9a\xc3\xfa\x2d\xa2\x43\x75\x87\x36\x7c\xfc\x4a\x22\x2a\xf1\xe8\xd8\xd5\x37\x3a\x2d\x2c\x9c\x69\xd2\xb2\xc6\x65\xbb\xc4\xb3\x73\x9d\x6f\xba\x6b\x6b\x87\x36\x13\x17\x96\x9a\xd4\x7f\x7b\xbc\x35\xb9\x53\x72\x56\xd5\x22\x8d\x80\x94\xcc\xca\x26\xe7\x53\x8c\x19\x93\x24\x50\xed\x08\x60\x4d\xf5\x28\x48\x92\x26\xc6\x16\x52\x1c\xd2\x89\x38\xc6\x42\x44\x10\xa1\xd7\x88\x5f\xa4\x4c\x3c\x7f\xa7\xf2\xd7\xe5\xdf\x3e\xd5\xea\xf9\xcc\xe1\xc6\x85\x46\x75\xbe\x3c\x93\x35\x1f\x9d\xef\xf7\x16\x4b\x6f\x3d\xa3\xf7\x54\xb3\x92\x3c\x5d\x90\x6d\xac\x45\xb6\xc7\x3a\xae\xaf\xc7\xbc\xc6\x1b\x36\x4d\x9a\x42\x4c\x88\x16\x83\x59\xcb\x82\x98\xa0\x43\x4e\x42\x94\x13\x13\x6a\x44\x4b\x88\xe3\x53\xbb\xd3\xdb\xdb\x26\x64\xfb\x6e\x7d\xba\x13\xc5\xa5\x4c\x0b\xeb\x7d\xf6\xf9\xe1\x92\xf9\xcf\xff\xa4\x5a\x35\x3a\xe7\x34\x6f\x65\x6b\xc5\xae\x9c\x9b\xe4\x44\xa4\x44\x94\x8e\x5d\x5a\x0e\x62\x51\x12\x0d\x21\x34\x5c\x99\xe7\xb1\xe9\x98\xa2\xc1\xbb\x0c\x72\x01\x01\x55\x32\xe4\x65\xdb\x20\x63\xc7\x10\x38\x05\xa6\x4e\x44\xf7\x46\xac\xc8\x33\xa3\x49\xb9\x85\x1b\xd2\xb5\xfa\xfe\xc3\x09\x43\x4a\x96\xad\xd4\x69\xc2\x69\x73\x4d\xbb\x39\x43\xb2\x76\xfd\x68\xe4\x7b\x5b\x93\x4c\x91\xeb\x01\x9d\x04\x7e\xec\xda\xba\xce\xd2\x11\xf6\x55\x5a\x93\x80\x03\x08\x32\xe2\x48\x1f\xf0\x40\x16\x6d\x4b\x13\x44\x8f\x70\x01\xaf\x84\x1a\xeb\xbd\x66\xb9\x09\xbf\x91\xfd\x8b\x6d\x8d\xd7\x56\x82\x57\x3f\x94\x3e\x16\xbf\xdc\xbb\xf7\xe5\xd3\xc1\xfc\xc3\xb1\x7b\x4f\xe3\xb7\x5a\x71\x1d\xaf\xa4\x1d\x19\x91\x58\x3a\xcd\xb7\x20\x25\x84\x3c\x43\x2b\x1a\xd4\x68\x3e\x84\xd0\xb7\xf5\x30\x32\x94\xd0\x92\x5c\xc9\x76\x74\x49\x12\x55\x57\x25\x08\x9e\xe5\x0d\x3d\x34\xb5\xd7\x70\x28\x4f\x7c\xb2\xbf\xd1\xd5\x91\xc2\x44\xfd\x83\xfa\xc2\xc1\x6d\x3f\xb4\xeb\x37\xc9\xcf\xfd\xce\x57\x99\x0e\x4e\x3a\x70\xff\xc8\xee\xc7\xd9\xb2\x26\x79\xcf\x85\x74\x3c\x8a\x8a\x5c\x4f\x0a\x4c\x5f\xa3\xac\xc0\x02\x8e\x6a\x4a\x26\x60\x02\x2f\x74\x58\xc7\x10\x63\x55\x0d\x79\x93\x37\x22\x37\xb4\x21\x2b\xe3\x04\x14\xf6\x67\xaf\x0c\x62\xa7\x5c\x1d\xfc\xfe\x9d\xf9\xb3\xed\x89\xc4\xe0\xcc\x75\x1f\x94\x6b\x5d\xb8\x62\x9b\x5f\xdf\x68\xfd\xde\x80\xb1\xdd\x47\x25\x19\xc3\xee\x2b\x58\x65\x04\x43\x64\x05\x8b\x27\x35\x9d\x42\x2c\x1b\x10\x8a\x26\x8b\x04\x14\x38\x51\x61\x80\x45\x51\x2a\x0e\x44\x45\xf6\x1d\xc5\xf2\x64\xee\x5f\xe2\x17\x09\x30\x28\x8e\xf4\xd1\x86\xc7\x29\xa5\xd2\x1f\xcc\x50\xb8\xe1\xa6\x06\xc3\x26\x67\xf2\xf3\x94\xef\x33\xf7\xcd\xe1\xc5\x33\xa7\xaf\xb8\xcc\xba\x7d\xfe\x15\x77\xca\x5c\x32\x5e\x3b\x3d\xfd\xd5\xb9\xef\xa6\x6c\x98\x35\xf4\xb7\x42\x9f\xd1\xdd\x3b\x7d\xb5\x4e\x21\xbb\xea\xb7\xd2\x97\xca\x57\x82\x4b\xfb\xdc\x38\x61\xe0\x9a\x48\x10\x04\x55\x95\x01\x4f\x03\x3f\x0a\x49\x9a\x93\x0c\x44\x3a\x48\xc7\x3e\xcf\xb3\x82\x49\x49\x8c\x13\xd2\x12\x40\x9c\xaa\x1a\x22\x88\x3c\x37\x4a\x5c\x8e\x15\xee\xd7\xfa\x7c\xb9\xd2\x1b\xca\xa5\xdc\xff\xb4\x57\x99\x0b\x73\x7e\x91\x97\xf4\x1f\xbb\x19\xee\xe8\xfe\x46\xaf\xb9\xf9\x87\x97\xfa\x29\xed\x83\x8d\xc4\x6f\x55\x9e\x2f\x40\x8d\x22\xa0\x1e\x6a\x86\x40\x28\x8c\xe5\x91\xa2\x89\xa1\x4f\x6a\x3e\x43\x38\xa1\x4c\x59\x2a\x6d\x71\xa1\x68\x29\xa4\xa5\x20\xe4\xa3\x04\xbb\x72\x5b\xce\xef\x7d\x36\xa1\x5e\xe5\xec\xe9\xb7\x4e\x3c\xb4\xe3\xe1\xae\x29\xdf\x4f\x38\xd6\x8e\xbb\xf2\xe2\xdb\x0d\x2f\x8d\x8c\x25\xfa\x04\x69\xa7\xd6\x4b\x0c\x31\x60\x4d\x45\xb2\x80\x25\x13\x2a\x8b\x49\x2a\xc6\x94\x1e\xab\xbe\x89\x42\x87\x0c\x45\x19\x45\x00\x33\x48\x57\x2d\x3d\x88\x74\x16\xe9\x0c\x4b\xab\x41\xe2\x64\xf4\xfe\xb6\x42\xdf\x8d\xbe\x28\xb6\x1b\x30\xd6\x98\x3d\xba\x53\xe3\xad\x5b\xe9\xee\x75\x66\xdc\xdf\x1d\xb6\x1c\x57\x6a\x7c\xe1\x29\x6f\xa4\x5d\x3e\x2d\xb1\x4e\xbe\x4a\x02\x3e\x12\x75\x06\x87\xa4\xe6\x03\x51\x56\x14\x95\x91\xa3\x18\xfa\xac\x1f\x44\x0e\x13\x21\x1c\x85\xd0\xb0\x3d\x8b\xd5\x4c\x95\xb5\x14\x48\xa5\x3e\xe9\xd9\x43\xbe\x2d\xf2\xeb\xb9\x7e\xa5\x56\x6f\xbb\x46\x9d\xbd\x5c\xec\xdd\x7c\xd9\x0b\xff\x76\x3a\xae\x7f\xee\xa3\x8a\xe7\x16\xb4\xda\xb1\x2f\xed\x81\x9b\xb0\xf0\xd5\x42\x1e\xc6\x40\xd5\x01\xa2\x35\x8d\x0e\x2c\x92\xb0\x2c\xda\xf2\x2c\x2c\x02\xd7\xb1\x7c\xdb\x35\x49\x5b\x83\xa4\x44\xfa\x9a\x02\x21\x21\xfd\x17\xfc\xf4\x7f\x0d\x34\xce\xfe\x51\x59\xaf\xd1\x81\x19\xb6\xa8\xff\xd7\xd3\x26\x2f\x59\xbf\x65\xef\x73\xb2\xcf\x85\x7e\x8f\x73\x9e\xed\x31\xee\xe5\x86\xad\x0d\x92\xdc\x7b\x42\x05\x46\x8a\x6e\x39\x18\xfe\x3f\xbe\x73\x52\x35\x59\x07\x86\xbe\x2f\x11\x6e\x44\xda\x12\xa9\x71\xa4\x68\x3b\x94\xa5\xeb\x1c\x14\x18\xd1\xe1\xbc\xc4\xb7\xba\xd4\x26\xdf\xc5\xdc\x5d\x27\xc7\x37\x46\xae\x38\x5e\xf5\xe0\x2c\xab\xe0\x93\xcd\x6f\xa6\x5b\x3b\xb6\xdb\xea\x66\x07\x2f\xfd\x50\x28\x5b\xda\xb9\x80\x13\x33\xce\xf1\x5c\x60\x11\x38\x22\x09\xcf\x32\x51\xc4\x06\x38\x04\x82\xcb\x08\xb1\xe3\x60\x25\x08\x28\xd9\x31\x38\x4e\x0b\x1d\x9e\xe2\x75\xd1\x50\x48\x8a\xd4\x52\x3b\xc7\xa8\x3d\xe3\xae\xd4\xeb\x0b\xce\x0e\x5e\x28\x1f\x2f\x79\xa5\xc6\xa8\x7b\xbf\x58\x9d\x33\x28\x67\x4e\xff\xf2\xbc\x9b\xe9\xa7\xaf\x56\x20\xb9\xb7\xba\x42\x98\x3a\x76\x35\x0f\xf9\x8a\xe3\x19\x16\xeb\x86\x8e\x4b\x88\x64\x14\x6a\x08\xa9\x81\x26\xe8\x84\x66\x07\x82\xa8\xf3\x9a\x1e\x6b\x64\x68\x1b\xd0\x4a\x3c\x53\xd9\x88\xee\x4d\xdc\x96\x9f\x7a\x54\xb1\x4f\xde\x23\x2b\xdf\xfd\xf0\x8b\x9f\xde\xdc\x3c\x6e\x60\xc5\xce\xa7\xeb\x8e\xda\xb5\xbe\xfd\xe1\x8b\x49\xe6\xbe\x08\x05\xd5\xd3\x54\xca\x60\xe9\x98\xd0\x64\x82\x0f\xc4\xc8\x93\x09\x57\x62\x75\x9a\xe1\x0c\x11\x22\x81\x8c\x14\x9b\x17\x81\x0d\x04\x4c\xfb\x0c\x11\xcb\x89\xe9\x8b\xd7\x5e\x99\xd9\xbc\xdb\xaf\xf7\xba\xf4\x55\x2f\x1e\xa4\x06\x64\x5c\xd3\xf4\xe2\x49\xb9\x72\xc6\xa2\x0f\xce\x0e\x1b\xeb\x36\xf9\x68\x6a\xda\x11\xb3\x09\xab\x15\xdd\xc4\x1a\x94\x05\x39\x34\x42\xc6\x75\x2c\x93\xa5\x1c\x0f\x33\x1c\xe3\x7b\x0e\x14\x68\xdb\xe4\x83\x98\xfb\xfb\xe3\x44\x59\xb7\xe9\x88\xc0\x31\x84\xa9\x43\xf1\x6c\x9f\x31\xb9\x97\x34\xdd\xbe\xe2\xf0\x9f\xf7\x96\xcc\xfc\xf4\x45\xdb\x8c\xf3\xb7\xb7\x4f\x49\x39\x98\x6f\xe6\x9f\x7f\xfd\x58\xe9\xdd\x12\x49\x66\x5c\x66\x6d\x03\x11\x82\xe8\x90\xa6\x22\xeb\xbe\x22\xd1\x34\x19\x61\x06\xd0\x8e\x11\x39\x04\x60\x21\x47\xfb\x40\x92\xbd\xd0\x55\x0c\x82\x41\x31\x6f\x24\xd2\xa6\xbd\x5d\x7b\xf2\x8f\x4d\x16\xcb\x59\x8f\x7d\x58\xb9\xc4\x91\x43\x27\xa6\x8e\xea\x3f\x06\x21\xda\x5f\x27\xed\x62\xfe\xfa\xaa\xea\x18\x36\xc9\x6f\x30\x8e\xa5\x53\x22\xad\xc8\xb6\xe3\xc4\xa2\x12\x21\xd6\x8a\x74\xcb\x0f\x54\xac\x05\xa1\xa3\xf8\x9c\xa4\xea\x34\xaf\x20\x93\x70\x5d\x5e\xf3\x64\x97\x35\x13\x97\xb2\x15\x26\x3d\xc8\x64\xb8\xa3\xc7\x17\xe0\x9c\x8e\x27\x5a\x7e\xd1\xe0\xf1\xa5\x9c\x53\xae\x8f\x97\xb7\x6d\xc8\xf9\xf3\x9c\x1b\xdd\x1a\x24\x97\x62\x93\xc5\x3c\x09\x63\x93\x65\x6c\x9e\xc1\x8e\x11\xfb\x01\xed\x2a\x2a\xf4\x00\xe6\x7c\x83\x50\x2d\x28\x13\xb6\x17\xb9\x1c\xad\x90\x26\xa3\x86\x6e\x64\x28\x74\xe2\xd7\x89\x31\x55\x7a\x65\x29\xdb\xac\x70\xce\x8b\xe4\x99\x6b\x99\x16\x2d\xa1\xa6\xee\xf9\xb0\x46\xb1\x1c\x1d\xb6\x0f\xb9\x73\x34\x67\x9e\x35\x43\xcf\x24\x19\x9c\x64\xb3\x8a\x69\x38\x0e\x14\x1c\x32\x72\x14\xa8\x38\xd8\x0b\x54\x00\x15\x15\xb8\x94\x2e\x49\x9e\xcf\x13\xd8\x74\x19\x9b\xf0\x0c\xc5\x33\x23\x99\x35\x5e\xd3\x3a\x0f\x8f\xcf\x8e\x46\xfb\xfa\xe7\x9c\x8d\x9a\xa1\x12\x7f\x94\x29\xb1\xab\xea\xe9\x9e\x6d\x98\x94\x7a\xa0\xcd\xa9\x83\xe1\xd2\x62\x9f\xbe\xfa\xeb\x9e\x9b\xa7\x5e\x2f\x9f\x27\xe7\x97\x59\x9a\x55\x3e\x9c\xf9\xd1\x5f\xef\x2d\x58\x3d\xf0\xa3\xe7\x8b\x8a\x1d\x27\x36\x0f\x34\xab\x6c\xee\xf9\xf8\xd5\x5f\x1f\x55\x47\x8f\xba\x76\xb2\xc2\xd3\xa6\x19\x72\xbe\x9d\x79\xe4\xc5\x6c\xed\xbe\xbb\x1d\x34\x08\x6a\x0f\x17\x3f\x99\xb9\xab\x58\xbb\x1d\x8f\x5e\xb9\x14\x1a\x05\x0f\xda\xb7\x2f\xf4\xe9\xed\x1a\xa7\x3a\xd5\xbf\x7d\xed\x8f\x22\x75\xdb\x34\x5b\xbf\x2d\xf7\xe4\x0b\x77\xde\x7c\x2f\xab\x97\x71\xd6\xa1\x24\x6f\xec\xc8\xa2\xee\x71\x86\x17\x69\x2c\x6d\x71\x0a\xcb\x5a\xb4\x6a\xfb\x91\x2c\x93\x91\x1d\x73\x2a\x23\x99\x91\xc9\xc9\x8e\x65\x09\x90\x08\x15\xc5\xe4\x08\x39\x75\xd6\x18\x96\xcb\x1c\xbe\x63\xc6\xee\x5a\xc5\xda\x05\x43\x33\xed\x49\x29\xb3\x7c\xf7\xde\xcb\xcd\xdf\x4e\x7f\x24\x6b\x35\x98\x73\xbe\x52\x76\x7c\x92\x17\xd7\x1c\x89\x31\x80\x44\x50\xb6\x62\x86\x2e\xe3\x6a\xb2\x46\x3a\xa6\x81\x63\x41\xd5\x0c\x19\x72\x01\x88\xb0\x12\x05\x5c\xa8\x71\x0c\x49\xeb\xba\xea\x68\xa9\x2f\x85\x53\xe2\x94\xa5\x65\x73\xad\x3f\xfe\x7d\xc9\x4d\x3d\xc9\x83\x1b\x8a\x5e\x5d\xfb\xae\x4e\x58\x79\x5a\x75\x18\x7f\x7f\x69\x86\x0e\xf5\x86\x24\xb7\xde\x24\xb1\xac\xfc\x9d\xda\x2c\x8a\x31\x44\x27\x54\x18\x4f\x97\x42\x0a\x98\xbc\xe5\xf1\x6e\xe8\xe9\x91\x08\xdc\x30\x12\x4c\x1f\x4a\x36\xcb\x93\xa4\xc9\xba\x89\xa3\xab\x42\x97\x6c\x39\x39\x76\xe1\x1b\x2d\x87\xa8\x77\xaf\x14\x9e\x36\x78\xff\x6f\x87\xaf\xad\x2c\x3a\xb8\xca\xd2\x26\x1f\xd3\x35\x4b\xde\x39\x92\x5c\xb3\x5d\x87\x0b\x90\x8b\x69\x5a\xe4\x18\x1f\xb1\x96\x09\x5d\x47\x46\x16\x46\x0a\x07\x19\x49\xb7\x39\x41\xb7\xd8\xc8\x23\x4c\x86\xa7\x54\x4c\xc9\x0e\x06\x89\xcb\x64\xd8\x7b\x7e\xbe\xc2\xd7\xda\xf5\x43\xed\xb2\x74\x1a\x36\x64\x56\xd7\x92\x9f\xed\xaf\x79\x3b\xee\xc0\xfe\x50\xf6\x63\xa2\xc4\xd5\xf4\x27\x93\x9c\x9f\x29\x96\x30\x62\x60\x46\x8e\xc4\xc3\x18\xa3\x30\x26\x78\x41\xd1\x34\x64\xc7\x32\x0b\x79\x1e\x99\x64\x80\x35\xd2\xf3\x48\x8b\x09\x23\x87\x12\x71\x02\xca\x93\x7e\xbf\xdd\x19\xbc\x27\x6f\xbd\x0d\x2b\xef\x74\x19\xb0\x31\xdb\x4a\xf6\xf9\xa3\x37\xb3\xac\x6e\x39\xef\xa7\x85\x05\x1b\x4f\x98\xf0\x6d\xa1\x24\xb3\x59\x30\x16\xe4\x1d\x2e\xe0\x62\x27\xd6\xf4\x58\x71\xf8\x88\x42\x04\x0b\x39\x17\x30\x71\x10\x19\x10\xa8\x51\xcc\x93\x1e\xf6\x7d\x16\x0b\x50\xb3\x49\xdd\x4d\xdd\x92\x9f\xe9\x77\xe8\xbd\x59\x37\x98\x0b\x4b\xf3\xef\xad\xbc\x62\xd3\xae\x86\xf9\xa6\xcf\xde\x3d\xe2\xf1\xd5\xcd\xee\xfb\xb8\xc4\xc6\x21\xfd\xd3\xae\x66\x9b\x30\xd1\x79\x46\x28\xb2\x31\x67\x48\x9e\x69\x43\x85\x21\x6d\x3d\x16\x04\x4e\x66\x1c\x3d\x86\x1c\x69\xab\x01\x61\xd3\x71\xe4\x7b\x90\xd4\x1d\x52\x92\x95\x40\xb1\x5f\x83\x37\x6a\xf5\xbc\xb7\x5d\x63\xd5\xcb\xbe\x76\x4b\x2a\xfd\x31\x69\xd6\x94\xc2\xe3\xdf\xbf\x79\x67\xd3\xfc\xc7\x17\x9f\xfe\xd9\x7a\x46\x9f\x22\x0b\x5f\x29\xaa\xd7\x54\x5a\xa1\x2d\x89\x8a\x1e\x6a\x5a\xff\xd9\xb4\x11\x1a\x36\xc7\x7c\x4b\xe9\x8d\x3a\x66\xd9\x98\xb2\x88\xcb\xda\x64\x1a\x6a\x9f\xdc\xfc\x02\x29\x2b\xa2\x50\xa8\x6a\x1c\xc3\x3a\x24\x76\x29\x31\x16\x81\x1c\x07\x2c\xef\x63\xc6\x05\x56\xcc\xc9\xb6\xaf\xc8\x08\xe9\x46\x60\xea\x20\x8c\x5c\x23\xf5\xff\xf2\xac\xeb\x9e\x2f\x0e\xfe\xda\x89\xfa\xf9\x60\xdf\xee\x93\xb7\xef\x1c\xde\x6b\xd1\x8d\x4e\x42\xae\xfc\xd3\xee\x1d\xea\xf3\xe9\x9b\x1f\xbe\x9d\x5c\xb9\x29\x96\x63\x25\xd5\xe2\x39\xc5\x34\x00\xe6\x04\x27\x8e\x1d\x86\x27\x64\x4c\x30\x98\xd2\x42\x85\x63\x34\x9f\x84\xae\x11\x4a\x2a\x02\x84\x28\xb1\x58\x23\xf5\xc4\x4f\x0d\x19\x46\x66\x63\x37\x6e\x9a\xfd\x6e\xbe\x6c\xcf\x1b\x1d\xbf\x3e\xfc\x4c\xca\xe8\x1d\xda\x60\xf8\xcd\x91\x45\x13\x26\xce\xca\x46\x86\xe3\x92\x1b\x01\xba\x2d\x19\xa2\x14\x79\xbe\x29\x28\x9e\xa8\xf8\xb6\xc6\x46\x31\xeb\x11\xba\x62\x07\x0e\xa1\x45\x6e\xa4\x04\xa1\xe6\xd3\x98\x42\x86\x12\x0a\x8a\x95\x08\x49\x8a\xce\x8a\x9f\x2d\xe8\x39\xf5\x33\xf1\xe6\x92\x39\xcb\x9b\x7f\xc5\x8d\x6e\xb9\xcb\x3d\xaf\x0e\xef\x31\x68\xdf\xf8\xbb\x4d\xc6\x2f\xec\x9d\x5c\xe7\xf0\x7d\x4d\x92\x2c\x43\x80\x02\xb0\x09\x59\x97\x98\x20\xd6\x81\x07\x31\x61\x07\x58\x09\x6d\x2f\x12\x7c\x0f\x87\x92\xc5\x05\x24\xa3\xc7\x2a\x76\x88\x04\x3a\xa1\xa3\xb2\x7d\x9b\xad\xef\xef\x0f\x67\x94\xd9\x5a\xe8\xfc\x9f\xb7\xe6\x8f\xd8\x70\x33\x5d\xbd\x12\xe7\x66\x1e\x6b\x51\x7d\xd5\xc7\x30\x6f\x8d\xfa\xc9\x0d\x5a\xe0\x60\x19\x13\x98\x0c\x05\x33\x92\x5c\x59\xf3\x5c\xdd\x75\xad\xd0\x12\x10\xcf\x42\x40\x18\x06\x47\xe8\x5a\xa8\xea\x91\x62\x09\x7e\x4c\x28\x34\xfb\xcf\x6a\xe2\xfd\xac\xff\xb7\x47\x86\x01\x0d\xfa\x15\x23\xd2\x0d\x7e\x25\x6a\x1b\x1f\xcb\x70\xea\xf6\x88\x99\xd9\x32\xfd\x79\xfc\xc5\xb0\xa2\xb7\xbe\x2b\xf8\xe8\xee\x0e\xed\x53\xba\xf7\x57\xf5\xfe\xea\x70\xb8\xce\x8c\xc2\xc9\x0d\x01\x25\x0c\x0c\x2d\x0e\x88\x20\xe4\x0d\x09\xd3\x4c\xac\xf9\x96\x4e\x62\x59\x54\x23\xc2\x89\x29\x12\x30\x31\x50\x64\x53\x21\x8c\x90\x8e\x49\xc5\x73\x61\x02\x99\xf9\x01\x55\x1f\x14\x12\x4c\x3b\xe3\x8f\xfd\xf8\x91\x4d\xd6\x6d\xd8\x3a\xda\x78\xaf\x1f\x71\xfd\xf3\x14\xa6\x76\xab\x2b\x4d\x27\x5d\xbd\x9b\xe4\x3a\x0c\x39\x2e\xd6\x55\x2f\x80\x22\x0c\x58\x2a\xa4\x49\x05\x0a\x44\xcc\xd1\xd8\x51\x5c\x17\x79\xb2\x23\x3b\x02\x88\xd5\x80\xd7\x05\xe4\x89\x21\x19\xbf\x66\xbd\x60\x04\xd7\x7e\xde\x39\xfd\x3c\x77\x60\x7d\xde\x0b\xb7\xba\xcc\x18\xf7\x67\x3b\x35\xdf\x7b\x23\x8f\x7d\xfa\xa0\xd7\xd2\xe3\x5e\x99\x0f\xd2\x6e\x76\xe2\xfb\x51\xe1\x24\x9a\x60\xb0\x89\x28\xcd\x17\x00\xc2\xb1\x6b\x73\x1a\x67\x38\xba\xc4\xd3\xa4\xe7\xda\x94\x2f\x5b\x90\x32\x69\xdb\xf1\x4c\x83\x36\x54\x4d\x4e\x5c\xd8\x5c\xd9\xb6\x7c\xfd\xd1\x33\xd2\xf2\xde\xf5\xc7\x37\xaf\x7c\x71\x5b\x25\x72\xde\xe3\x65\xec\xf2\x93\xf3\xbf\x03\xda\xbe\xc7\xe5\xed\xe4\xb2\x03\xb3\xac\xa4\x51\x2a\xf6\x74\x52\xe6\x6d\x20\x86\x92\xe9\x02\xdd\xa1\x78\x1b\x87\x96\x65\x04\x84\x81\x20\x85\x14\x11\x44\xb2\xef\xdb\x28\xb4\xb0\xfe\x3a\x4a\xd4\xe9\x7f\x2e\xc8\x98\x27\xaf\xd1\xe6\x0a\xbb\xb5\xfe\x9e\x8f\xfa\x0e\xee\x90\x4b\xbe\xbd\xf6\x4a\x93\xc5\xa7\xef\xd1\x35\x9f\x0f\xef\x53\x37\xb9\x77\xa4\x63\xfa\x31\xe7\x21\x89\x77\x44\xc3\x30\x74\x53\x93\x64\x51\x84\xba\xac\x08\x9e\xc9\x45\x54\x48\x62\x43\xb1\xf8\x48\xa0\x2d\x07\x06\x9c\xa5\x8a\x2e\x93\xf8\xb4\x9b\x0f\xc9\xb5\xae\x76\xdd\xcc\x6d\x66\xf6\xc3\x5d\xf4\xde\x6f\xfc\x76\x64\xa0\x74\xe3\xf9\xaf\x47\xef\x3d\x4d\xb9\xdd\x29\x1e\x98\xfd\xcd\xe4\x3a\x89\x22\xc4\xa2\x85\x7c\x9a\x8d\xc4\x00\xa8\x3a\x36\x43\x46\x44\x24\x1d\x18\x18\xfa\x3e\x21\x28\x1e\x27\x02\xcd\x0d\x4d\xac\xfb\x4c\xc0\xd2\x50\x26\xfe\xd9\xa6\x1c\x92\xf9\xff\x36\xb6\x1f\x50\xbf\x6c\xd6\xff\xc5\x69\xbc\x73\xc5\xc5\xc7\xe7\x8b\xa6\x6b\x7f\x65\x52\xa3\x3b\x0f\xa7\x16\x7d\xbe\xe4\xe1\x96\x05\x1d\x7e\x59\xf3\xd3\xa3\x5c\xd3\x1e\xaf\x3d\x3b\x3c\xed\xa4\x75\x09\xef\x1c\x8a\x32\x68\xc7\x27\x02\x07\xb0\x26\xa2\xcd\x30\x64\x58\x4a\x04\x26\x81\x6d\x8f\xf0\x24\xcd\x44\x26\x2b\x1b\x0e\x25\x4a\x9a\xa7\x00\xcf\xd5\x20\xf9\x9a\xdd\xcb\x9d\x13\xde\x0a\x46\x36\x9a\x9f\x3f\xfb\x92\x53\x7b\x67\x6c\x79\xdc\xe2\xdb\x65\xde\xb1\xaa\x17\x0a\xbf\xb4\xaf\xcc\xaf\xfd\xd1\xf0\xfd\x93\x92\xcc\x0f\x44\x4b\x44\xc0\x41\x1f\xf2\x0c\x22\x28\x06\xe8\x01\x74\x08\x07\xf3\x9e\x4e\x63\x3d\x82\x90\x30\x2c\x55\x8a\x5c\x01\x21\x51\x44\x11\x30\x08\x6c\x26\x8e\x84\xfd\x0b\xea\xbb\x29\xb7\x9f\x5d\xcd\x79\x62\x67\xab\xae\x97\x1f\x6e\x29\xbe\x6e\x06\xd5\xfa\xe2\x21\x43\x18\x73\xae\x9b\x50\x7a\x48\xbb\x24\xb3\x92\x5b\xae\xc8\x20\x4e\x15\x55\x5f\xc5\xc8\x02\xbe\x44\x91\xa2\x12\xfb\x1e\x14\x19\x49\x0c\x99\xd8\x91\xed\x20\x8a\x39\x46\x0a\x0d\x60\x38\x86\xa2\xbc\x06\xaa\xbd\xae\x44\xbd\xbc\xad\xf7\x6e\xe8\x57\xe3\xfb\x9d\xb3\x8b\x2d\x3a\x59\xc2\xd9\xd1\xe1\x9c\x54\xf9\xfa\x80\x5e\xed\xdf\x2c\x97\xe7\xb0\xf8\x24\xc9\x03\x7c\x18\xe8\x91\x08\x19\xdd\xe1\x23\x12\x87\x9e\xab\xcb\x2a\xeb\x49\x36\x8b\x99\xc8\xb1\x38\x9b\xb1\x60\x4c\x43\x97\xa3\xb0\xc1\x50\x31\xa2\x10\xf1\x0f\xfb\xdb\x7f\xc3\x0f\xff\xd3\xa0\x62\x40\x03\x32\x5d\xba\x74\xaf\x86\xc2\xfb\x7b\xc7\x0e\x48\xff\xcd\xe3\x50\x5a\x55\x9c\xb4\xea\x08\xb5\xee\xac\x98\xb6\x6c\x5e\xd6\xc3\x99\xf2\x6d\xe9\x72\x5b\x59\xb0\xe8\x66\x72\xbf\xd2\xf1\x28\xd7\x32\x69\xc4\x78\x96\xc8\x10\x9e\x6e\x62\xa0\xf3\x8e\x1c\x09\x22\x21\x44\x8c\x66\xca\xa6\x1b\x06\x8e\xcc\x1b\x06\xf0\x6d\x20\xca\x02\x7e\x0d\x41\xbf\xd8\xfa\x7c\x83\xef\x16\xde\x9f\x38\x41\xf9\xf4\xdc\x26\x6b\xe6\xa1\x2a\xb5\x07\xb1\x19\xb2\x6d\xfb\xea\xda\x8d\xbc\x0f\x50\xa9\x6a\x49\x5e\xe0\x82\xb2\x18\x49\xac\x16\x0b\x04\xcd\x88\x26\xc7\x3b\x14\x40\x0a\x4f\xb3\x8a\x22\xc6\x5a\xa0\xca\xae\x1e\xb8\x90\xd4\x35\xca\x94\x58\x45\x54\x34\xa8\xc1\xc4\x66\x1f\xff\x32\xff\x1f\xa3\x84\xaa\x23\x7b\xd6\xc8\xbf\xbc\xa6\x30\x77\xe0\xcc\x3f\xd6\x56\xb9\x30\x7f\xef\x57\xbb\x16\x83\xe3\xcd\xd0\x9f\xfd\x92\xbc\xab\xce\x4a\x3a\x29\x19\x32\x15\xb1\x11\x67\x50\x9a\xa1\x58\x56\x20\x47\xa4\x83\x28\x92\x44\x9c\xad\x86\xb6\xaa\x9a\x2c\x45\x98\x2c\xa5\x89\x7e\x18\x68\xaf\x41\x4d\xf6\xfb\xfc\x93\x26\xab\xb3\x39\x2f\x64\xf9\x8d\x75\x76\x7e\xaa\xac\x77\xfe\x68\xe9\x5b\x97\x5a\x6f\x58\x95\x32\xff\x14\x19\x15\xeb\x9b\x64\x5e\x52\x2c\x18\x1e\x80\xbe\xe0\x91\x9c\x16\x84\x0e\xe9\x47\x82\xca\x39\xbe\xeb\x10\x9c\x6a\xf0\x3c\xe2\x09\x89\xf5\xe4\xc8\xe3\x4c\x29\x0a\x22\x20\x2b\xff\x84\xc2\x7f\x4b\x6c\xfc\xa7\x29\xdc\x80\x06\xfd\xb3\xe6\x4b\xff\xaa\xc4\xc6\x57\x97\x7f\x1a\xf3\xee\x9a\xdf\x67\xf4\xde\xde\x6f\xb7\xb8\x78\x7a\xed\xb3\x42\xd1\x11\x73\xdc\x25\xbd\xf2\xcd\x3c\xb9\x79\xe9\xce\x4c\x57\x93\x9b\x15\x18\x46\x90\x05\x1b\x8b\xaa\x4e\xc8\x08\x93\xa1\x2f\x71\x3a\x47\x63\x1e\x00\x18\x8a\xd0\x13\x55\x31\xb4\xa3\x30\xd6\x31\xe2\xad\x08\xc5\x46\xcc\xbf\x06\x53\xd3\x61\xd9\xea\x7d\x73\x72\x37\xec\x94\xae\x75\xba\x1b\x99\x8f\x4e\x31\xea\x97\x1f\xb2\xf9\xe8\x84\xde\xd9\x86\xd6\x69\x5f\x22\xe3\xef\xd7\x93\xdc\x26\x60\x18\x4b\x88\xf1\x64\x9a\xf5\x29\x49\x35\x7d\x89\xd0\x6c\xc4\x43\x24\x32\xbe\x47\x52\x9c\xc7\x01\x1e\xd3\x1c\x87\x78\xa0\x53\x04\x1f\x69\x84\x13\x26\x36\x1b\x55\x79\x92\x47\xf4\xcb\xe9\xe6\xe5\xb3\x95\xa6\x54\xcc\x08\x2b\xf5\x5c\x73\xbd\x47\x83\x74\x35\x56\x8d\xfb\x90\x5a\xf9\x5d\xba\xb4\x77\xeb\x09\x23\xd8\x26\xf4\x98\x36\x58\xde\x90\x08\xc1\x93\x1d\x4e\x12\x88\x50\x72\x62\x3d\x56\x3c\x8b\x54\x29\x96\xf6\x7d\x9a\x92\x7d\x21\x32\x42\xde\xf2\x7d\xd7\xd5\x5e\x23\xfa\x30\xf9\xb7\x41\x45\x84\xce\xf3\x46\x7e\x54\xe2\xd8\x9d\x96\xab\xa3\x74\x8d\xe3\x46\x95\x9a\x56\x78\x36\xe4\xc5\xe1\x3c\xfd\x7e\x6c\xd4\x32\xed\xdb\x2f\x09\x93\x19\x69\x4b\x1a\x0a\x35\x0d\xa8\x22\x64\x40\x8c\x45\x46\x23\x61\x20\x7a\x02\x25\xaa\x16\x50\x1d\x3b\xf4\x05\x32\x30\x2c\x4d\x13\x0d\x4a\x10\x58\x4e\x65\x13\x47\xf0\xc4\xf8\x9d\xfe\x0b\x72\xe0\x52\x2f\x82\x42\xef\xb4\x38\xf1\x6d\x0d\x3b\xcb\x7a\xad\xe6\xa0\x0c\xab\x36\x11\xd5\x67\xd0\x45\x89\xe4\xf2\xa9\xb3\x94\x2e\xb0\x82\x66\x86\x24\xe2\x08\x12\x61\xcb\x0e\xf4\xc8\x09\x4d\x56\x8d\x81\x89\x01\xe0\x3c\x1e\x63\xc7\xd6\x48\x57\x8c\x44\x92\xf5\x01\xa7\x28\x89\x9d\xc4\xed\x91\xf1\xfe\x8a\x7b\xab\x1b\xdc\x1b\x53\xba\x5b\x95\x47\x7d\x77\x17\xaf\xfe\xe1\xb0\xf6\x5d\x9e\xa7\x94\xe8\xf5\xa8\xfe\xb0\x2a\xb5\xd2\x8e\x32\x4f\x0c\x68\xf0\x75\x4f\x84\x9c\xa1\x70\x48\x86\x0e\x0b\x3c\x5b\xf1\x91\x62\xda\x9a\x0b\x25\x87\x17\x10\x2d\xdb\x38\x24\x75\x56\x0e\x98\x00\x22\xc9\x95\x88\x7f\xb2\xd3\x17\x99\xff\x6f\x03\xfd\x01\xf5\xfa\x95\x7f\x35\x03\x97\xcb\x53\x72\xf0\xdd\xab\xde\x85\x77\xa8\x43\x6b\x3e\xfe\xfa\xac\xb3\x78\xfc\xd0\xf3\xd4\xb4\x4f\xca\x0f\x7b\x74\xb4\xd4\x8b\xd9\x4c\xbd\xe4\xfe\x35\xae\x6b\xd1\x1c\x23\x1b\x0c\x65\x1a\x8c\xc2\x06\x4e\xc0\xd8\x0a\x62\xb1\x0d\x05\xc9\x50\x81\xed\x4b\x91\xeb\x3b\x3e\x63\x85\x1e\xf6\x28\x31\x52\x5e\xa7\x0b\x3b\x7a\xef\x77\xc7\xff\x1a\xf8\xab\xf3\x61\x99\xbf\x76\xdf\xad\xb6\xab\x4e\xfd\xdf\x1e\xba\x01\x39\xa7\xf4\xec\x61\x95\x4e\x54\x5d\xbe\x25\xed\xf1\x9b\xf8\xe5\x9d\x44\xbc\xe2\x89\x82\x14\x06\x01\x1b\x32\xbc\xab\xa9\x0a\x2b\xf9\x64\xf4\x77\xe8\x92\x2e\x6b\xf2\x84\x89\x55\xa4\x63\x0b\x1a\xd0\x89\x5c\x15\x32\x89\xcd\x3e\xf0\xe5\x8e\xe8\x44\x2d\x79\xbc\xf4\xfb\x9c\x1f\x9b\x95\x5e\x71\xb6\xfc\xe2\xdf\x3f\x37\x33\x8f\xcf\xfb\x65\xa1\x31\xbd\x3a\x56\x39\x5f\x34\xc9\xa4\x12\x58\xe6\x59\xe8\x20\x6c\x90\xb6\x4d\x93\x94\x81\x42\x68\xdb\xae\x0e\x59\x0f\x40\xc6\x32\x22\x43\x61\x6d\x96\x54\x71\xa0\x60\x3f\x04\x21\xa5\xbf\x06\x2d\x56\xac\x44\xdb\x61\x61\xde\xb1\x55\x36\x35\xfe\xa5\xe5\xe0\xdf\xaf\xac\x3c\xdb\x31\x53\x71\xad\x7d\xee\x63\xd3\x8b\x4d\xc8\x54\xfb\xc2\xd3\x24\x6f\xca\x0a\x90\x57\x80\xa9\x08\x04\x23\xb9\x4e\x6c\x4b\x26\xef\x01\x41\xd7\x78\xe4\xd0\x42\x80\x20\x74\xa1\x61\x2b\x0a\x8e\x0c\x89\xf4\xb0\xa4\x53\x0a\xff\xcf\x4e\xf2\x7f\xb7\x65\xff\x69\x74\x3b\xa0\x7e\xd6\x8f\x36\xff\xaf\x48\x38\xdd\xa4\x79\x17\xfe\xe4\xf3\xf9\x9b\xbf\xfc\xf4\xaf\x6c\xcd\x1b\xd7\x7b\xb3\x46\xe7\x95\xf5\x33\xfc\x30\xaf\xcc\xe8\xda\x4d\xeb\x08\x7d\x92\x5c\x8b\x62\x53\x57\x28\x9f\x21\x29\x52\x74\x5c\x92\xa2\x90\x25\xa9\x2c\x56\x25\x0b\xc9\x81\xe8\x48\x04\xe2\x74\xe4\x89\xbe\xcd\x9b\x0c\x8b\x25\x93\xe2\x5f\xc3\xf6\x96\x32\xa1\x50\x34\x7e\x58\x13\x69\xc0\xec\x68\x7a\xa6\x27\x1d\x1f\xa4\x1f\x3c\xf7\x8d\x23\xeb\x33\x7e\xd1\xf5\xe2\x3a\x8c\xf7\xa5\x6c\x4c\x6e\x75\xa4\x73\xac\xca\x11\xa6\xe0\x28\x32\xb0\xa9\x08\xb1\xb2\xea\xe8\x98\x04\x61\xa8\xc5\xa6\x48\x10\x0a\x60\x2d\xd1\xe5\x45\x96\x11\x59\x23\x22\xb0\xe1\xbd\x06\x37\x59\x68\xc4\xb4\x6f\x8c\x66\x2b\x76\x6e\x9e\x52\x78\x6b\x6e\x3a\x9e\x5c\x61\xc9\xbe\x61\x93\x76\x34\x44\x13\x36\x97\x2d\xd4\x76\x46\x94\xf6\x57\xe4\x84\x01\x2c\x0a\xac\x1a\x8a\x00\xf1\x0e\xab\xca\xbe\x49\x43\xdf\xe0\x49\x86\xa0\x4c\x5d\x47\x0a\x43\x22\x3b\x76\x22\xdd\x54\xbc\x80\x54\x19\xda\xa6\x1c\x91\x7c\x4d\x4a\xf8\x22\x0f\xb8\xf2\xe0\x0c\x7b\x6d\xd8\x52\x4c\x4e\x1c\x5f\x24\x98\xb4\x33\x67\x65\xed\x5c\xfa\x5b\x7f\x54\xb8\x34\xf7\x49\xd5\x5b\x49\x5e\xc0\x86\x18\xc9\x92\x41\x9b\x0a\xa1\x48\x8e\xc9\x2a\x98\x20\x6d\x52\x71\x43\x92\xa1\x35\x52\x0b\x2d\x11\x85\x2e\x49\xab\x94\x09\x81\xea\x58\xae\x61\x38\xff\x4c\xf9\x7f\x6c\xfe\x2f\x8b\x7f\xa9\xb5\xbb\xb4\x3e\xa8\x50\xa5\x56\xd9\xce\x0f\x7b\x0e\x8a\x2f\x3b\x37\xf3\xd2\x01\x90\x7d\xba\xd3\x7f\xe2\xea\x82\xf7\xe6\x74\xc9\x36\xa0\xc1\xcb\x97\x2f\x9f\x4f\x2a\xfa\xca\x58\xb4\xd1\xb4\xfb\xc7\x36\xcc\x9b\x5c\xb4\xd8\xd2\x22\xf5\x3a\x15\x29\x9f\x67\x4b\xee\x6e\xfb\xe7\xbd\xf9\xe5\xfc\xdf\xdf\x48\x3f\x53\xba\x57\x3d\xed\xb2\xdb\x09\xff\x1d\x87\xb7\x49\xc6\x57\x59\x84\x11\x0c\x34\x9e\xe4\x81\x18\x7b\x21\xfc\xfb\xdb\x79\xc2\xa0\x2d\xde\x36\x09\x93\x06\x00\x51\x1e\x52\x1c\x07\x63\xc7\x4f\x3d\x16\x3d\xf9\xbc\xff\xfc\x27\x9f\xaf\x7b\x5e\x77\x37\x68\x30\xab\xf8\xe8\x4a\x7d\x3e\xbe\xad\x3a\xb7\x77\xd5\xba\x37\x76\xe8\x9b\x07\x76\x3c\x4a\x2e\xec\x19\x42\xc8\x08\x2c\xcf\x40\x85\x8f\x1d\x1c\x69\x48\xd7\x81\x25\xba\x2e\x8a\x48\x64\x71\xa4\x1a\x50\xbe\x80\x34\x97\xe0\x1c\x8d\x54\xf4\x10\x11\x9a\xee\x24\xde\xc5\x2a\x5b\xfe\x1c\x7a\x79\xfe\xd7\x72\x6d\x9e\x5e\x9b\xfd\x4b\xa6\xa8\x64\xee\x71\x7b\x07\x7c\x58\xcf\xba\x7e\x6d\xc0\xe9\x12\x0b\x46\xaf\x4b\x2e\xdc\x03\xd2\x4a\x80\xcd\x80\xd6\x5d\xdf\xf5\x54\x9d\x36\x64\x31\x36\x0d\x5e\xc3\x0e\xe9\x22\xc1\x70\x43\xce\x8d\x1c\x09\xe9\x50\x52\x64\xcf\x94\x4d\x8b\x40\x28\xf5\x49\x77\xcd\xfe\xd6\xd9\x3c\x0d\xdf\xb5\xcc\x0d\xda\xcb\x6b\x8d\x0f\xd4\xed\x92\xfd\x6e\xf7\x1b\xcb\xd6\x9e\xbb\xb5\x61\x98\xd2\xa2\x62\xfe\x5e\xc9\x4d\x62\x86\xc2\x42\x43\x15\x43\x2b\x30\x03\x4e\x54\x42\x5e\x93\x14\x9d\xd4\x64\x81\x33\xd4\x58\x62\xc2\x90\x10\xb9\x48\x07\x2c\xab\xd9\x8a\x6d\x23\x4e\x50\xf8\xc4\x44\x8d\xf9\xd7\x2d\xae\xf6\xbe\xdf\x48\xe9\xd8\x61\xca\x9c\x0f\xde\x7c\x21\x9b\x9f\x2e\xb8\xfd\xac\x4d\x91\x5a\x3b\xc7\x97\xae\x71\x7a\xda\x07\x54\x92\x2b\x1d\x1b\x72\x36\x32\x18\x93\xc0\x2e\x62\x2d\xdf\x88\x75\xd9\x36\x6d\xdf\xa7\x35\xde\x03\x80\xb2\x3d\x97\x15\x22\x3e\x36\x34\x2f\x60\x35\x19\xb0\xae\x9b\xfa\xa4\xfb\x4c\xab\x55\xe0\xd3\x3d\x2d\x51\xba\x1e\x87\x0b\x8e\x3e\xcd\x8c\x9a\xf5\xce\xfd\xcb\xcf\xb2\xe4\xb8\xd0\xf4\x4b\x2f\xce\xd9\x6d\x75\xa5\x24\xd3\x76\x50\x1a\x27\x28\x84\x0e\x3d\x1d\xd1\x21\x0b\x44\x40\x30\x8c\x2f\x98\x88\xb7\x6c\xc5\x77\xa4\x88\x23\xe4\x90\x0d\x42\xd7\x93\x65\x0c\x5c\xc7\x40\xaf\xf1\xe9\x25\xb5\xa7\x75\xef\xb6\x71\x53\xca\xdc\xcc\x53\x7b\xe6\x2e\x7a\xb6\xf0\x85\xf2\x6a\xae\xb2\x9d\x57\xac\x1e\x2b\x7f\xde\xb7\xee\xf8\xf9\x69\xef\x09\x13\x13\xdf\x09\xaa\x6b\x51\xb6\x21\x1a\xa2\x69\x79\x58\x12\x20\x16\xfd\xd0\x25\xb5\xd8\xa3\x79\xc1\x91\x68\x18\xb1\x01\x07\x91\xc1\xc8\xba\x66\x06\x1c\xfc\xb7\x29\xee\x3f\x53\x42\x36\xeb\x77\xa2\xfd\xee\x89\x7a\xb5\xf3\x95\x9a\xde\x6d\xc9\x2f\x8d\xf2\xd7\x2b\x31\xf7\x60\x96\xdd\xe3\x6f\x74\xbc\xfe\xe4\xd0\xa8\xec\xc9\xcd\xa2\x20\xe2\x24\xe4\x44\x92\x1d\x01\x01\xea\x90\xf3\x04\x8f\x57\xc9\x90\x84\x38\xe0\x74\xdb\xd6\x5c\x10\xc5\x32\x34\x39\xcd\x65\x1c\xc7\x08\x2c\x8f\x7b\x0d\x8b\xce\x91\xee\x75\x04\xee\xc0\x91\xef\xbb\x95\xfe\x7a\xe4\xc6\xef\x0b\xfc\xbe\x7d\xc4\xf9\xc1\x57\xab\x07\xa8\x68\xf5\x11\xbd\xf0\x83\x89\xc9\x5d\x40\x85\x30\xf2\x75\x8e\x60\x82\x58\x06\xa4\x26\xd8\x61\x18\x0a\xae\x6f\xf0\x6e\xac\x3b\xa6\x63\x07\xae\x28\xca\xbc\xe7\x22\x5d\x04\x42\x1c\x9a\x34\xcf\xfd\x6b\x4a\x98\x3a\x8b\x6e\xe8\x97\xbd\xb2\xbb\x75\xcd\xc1\x37\x67\x2d\xf8\xe0\xc7\x3f\x3a\xaf\x3e\xb7\x49\xa9\x52\xfc\x62\xed\x5b\xa3\x76\x2d\x89\xae\xbe\x7d\x33\x6f\x72\xfd\x3a\xe2\x14\x5d\xb6\x09\xcf\x67\x22\x31\x12\x42\x41\x80\x9e\x15\xfa\x01\x47\x47\x9c\xe9\x06\x26\xe7\x50\xb6\xed\xf9\x9c\xab\x86\x8a\x87\x64\x5b\x20\x5d\xf6\x35\x0b\x01\x45\x72\x5f\xee\x33\xa7\x10\xf5\xb2\xe3\xa9\xbd\x3d\x32\x6f\x8c\xd7\xbf\x85\x82\x76\x79\xb7\x5d\xc9\x56\xa4\xfb\xbc\x33\x7d\xd7\xef\xb9\xf7\xca\x47\x5e\x5f\x5b\xa1\x9b\x55\xe3\x7e\xcd\xb1\x3b\x26\x2d\xb9\xe7\xed\x29\x38\x2f\xd7\x1b\xb3\x5b\x5e\x39\xd9\x3e\xfb\x96\xf0\xdd\x47\xa3\xaa\x0d\x4b\x6e\x14\x84\xb6\x0c\x00\x08\xe4\xc0\xd1\x78\x2b\x12\x3c\x01\x70\xc8\xd3\x6d\x0d\xe0\x90\x20\x0c\x8b\x24\x2d\x92\x0a\x42\xc7\x55\x2c\x96\x51\x34\x89\xe7\xb5\xd7\x6c\xf2\x1c\xfe\xb9\x4b\xce\x26\xac\xf3\xe9\xc5\x2f\x2e\x75\xb9\x5d\xa1\x5e\xee\xbd\x07\x0a\x14\xee\x70\xe2\xee\xed\xf2\x7b\xaf\xdd\xef\xfc\x5d\x81\xb4\xeb\x44\x24\xac\x70\x9c\x80\x40\x1a\x32\x49\x2f\x44\xae\x2e\xb2\x38\xd0\x63\x8a\x0e\x58\x97\xf2\x6c\x91\x91\xb1\xc5\xd1\x3e\x2b\x10\x9c\x4f\x90\x1a\x6f\xe0\x58\x22\xf8\xd7\xcc\xcb\x07\xa5\x7f\x32\x66\xf6\xa3\xca\x4e\xcf\x49\x47\x37\xc0\x4d\x2d\xc6\x56\xa9\xa4\x13\xad\xca\x37\x7a\xfe\xf1\x82\x74\x0f\x56\x38\x5e\xda\x65\xd6\x13\x9a\x1d\x72\x8e\xa3\xc1\x80\x25\x03\xd2\xd7\x44\x59\x0e\x74\xdd\x67\x23\x28\x2a\xa2\x4c\x98\xd8\x8b\x4d\x8d\xe5\x6d\x48\xd1\x9a\x02\x3d\x46\x94\xdc\xc8\xb1\x12\x27\xa5\x03\xd9\x76\xdd\xfe\xf3\x93\xec\x1b\xbb\x5f\xeb\xfc\xfe\x8d\xb6\x8f\xdf\xa8\xdf\xad\xff\x47\xe3\x7e\xcb\xdf\x2b\xdd\x89\x51\x43\xa9\x73\x67\xe3\xe4\x36\x1d\x48\x63\x49\xde\xd0\x6d\x87\xb0\x69\x0a\x51\xa4\x41\xd9\x58\xe0\x6c\xd5\x95\x14\x0b\x49\x1a\xa3\x03\x4c\xc8\xd4\xdf\x35\x7e\xa0\x01\x1b\xbb\x7e\xa2\xa5\xba\xa3\xd3\xc7\x5d\xca\x31\x72\xc2\xa6\x7e\x57\x9e\x56\x3d\x9c\x6e\x7c\xc9\x1b\x65\xc9\x2c\x4f\x66\x15\xde\x09\x6a\x8c\x6c\xd6\xd4\xdd\x30\x2f\xc9\x53\x64\x5f\x8f\x08\x93\x12\x68\x5a\xe0\x01\xb2\x75\x48\xe8\xb2\x6a\xc6\x2c\x49\x88\x91\xef\xd8\x9a\x62\x98\x41\x44\x60\x1a\x42\x43\xe5\xf9\x90\x02\x31\x4e\xec\x20\xa5\xfe\xfa\x0c\x64\xea\xd3\x79\x46\x4a\xd9\xc7\xdf\x78\x2f\x9d\x59\x2b\xd6\x36\x5d\x74\x7f\xd0\x90\x49\x39\x9a\xdd\xec\x3e\x9a\xf8\x2d\xed\xbb\x80\x09\x6f\xf8\x28\x30\x0d\x97\x56\x39\x19\x9b\x31\x4f\x85\x31\x24\x49\x82\xd7\x23\x55\x83\xaa\x46\x00\x93\xd7\x1c\x46\x65\xe5\x50\x86\x3c\xf4\x79\x83\xe1\x4d\xc7\x49\xbc\x8a\x3d\xb8\x5a\xbf\xf6\x4b\xab\x3f\x68\x1a\x7f\xd8\xf9\xf4\xee\xec\x07\xdb\x8c\xf9\x62\x60\xbf\x16\x8d\x57\x52\x8d\xaa\xfc\xee\x1d\x1d\xfa\x5e\x72\x69\x71\x58\x68\x98\x01\x74\x7d\x59\xd0\x5c\x8f\x37\xb1\x10\x88\x8c\xe9\xf1\x80\x04\x3a\xb0\x75\x33\x32\x0c\x95\x82\x2e\xe4\x19\xc5\x08\x2c\x2e\xa4\xfc\xd8\x95\x52\x3b\xc8\x8f\xf3\x33\xdc\xfd\xf8\xce\xd4\xfb\xd9\xc7\xfe\x9a\x72\xe0\xc2\x90\x09\x79\x97\x9c\x6e\xb3\xf5\xdb\x5e\xcb\x3b\x16\x9f\x7b\x3e\x6b\x5c\xbb\x5b\x72\x93\x92\x19\x73\x21\xa6\x79\xdb\xa1\x45\x24\x41\xc2\xe5\x30\xe7\x78\x22\x50\xa2\xc0\x70\x38\xce\xd1\x90\x08\xbc\x50\x65\x85\xc8\xb3\x35\x55\x0a\x68\x1e\x26\x00\x72\x6c\x86\xe4\xd5\x0d\x2f\x47\x52\x70\xaf\x7e\xd7\x6e\x53\xaf\xcd\xbb\x2b\x98\xde\x13\xda\x8f\xab\xfc\xd6\xaf\xab\xc7\x3d\xa8\xf3\xf5\xba\x64\x53\xa6\x5b\x21\xb6\xa0\x08\xa8\x00\x12\x94\x4c\xca\x1c\x64\x7c\xca\xc4\xba\xa3\xd8\x9a\xee\x49\x2c\x16\x48\x8c\x44\x03\x12\xb6\xa4\x43\x53\xb6\x3c\x22\x71\x1e\xcd\x1f\xf5\x2c\xde\xea\xa3\x2a\x2f\x4f\x9c\x1a\x3f\xaa\x60\x85\xdb\x07\xc8\x92\x8f\x3b\xbd\xd3\xe5\xec\xec\x02\x3f\x7c\x7a\x62\x63\xa7\x36\x49\x7e\x92\x05\xae\x2b\xaa\x1c\x6f\x73\x40\xd6\xa5\x58\x22\x3c\xde\xf5\x25\x8d\x40\x3e\x10\xa5\x50\xf5\x31\xc0\x28\x16\x35\x9e\xe2\x05\x8e\x08\x75\x9d\xb1\x30\x9f\xd8\xa7\xcb\x75\x1c\x3e\xa9\x61\xc5\xf8\xe1\xcb\x46\x6b\xba\xcc\xab\xd8\xb5\xf4\x37\x27\x32\x56\x2d\x96\x6e\x54\x6d\xed\xdd\x9a\xf4\x26\xfd\x42\xda\x59\x7c\x5e\xb3\xc2\x18\xfb\x84\x8e\x14\x01\x20\xdd\xd3\xdc\x28\xe6\x38\x8f\xd0\x45\x01\x40\x6c\xc3\x38\x52\x39\x4a\x31\x49\xd9\x27\x15\x03\xc7\xa4\x2f\xf1\x36\xc4\xa9\xeb\xc3\xcf\xce\x96\xfe\xf4\x78\xcd\xf0\xad\x62\xf3\xc6\xa1\xfe\xe6\x9d\xb7\x33\x4d\x08\x8a\xae\xdc\x9e\x73\xd4\xd8\x19\x5f\x2d\xf9\xe5\xe3\x38\xed\x30\xb0\xc4\x8b\xa2\x84\x27\x7a\xb2\x15\xd3\x9e\x81\x4c\x87\x16\x28\x5d\x93\x03\x4d\x51\x45\x9b\xb1\x6c\xd9\x11\x79\x06\x3a\x18\xd0\x22\x4b\x13\x9e\x1f\x40\xe8\xe0\x04\xc8\xb5\xe9\xf4\x07\x74\x96\x2f\x1e\x0d\xcd\x36\xa2\xf8\xf1\x91\x1d\x0b\xad\xcc\xae\xcc\x3e\x76\x89\x56\x46\x95\x38\x32\x5b\xbb\x5d\xae\x7f\x72\x39\xff\xa0\x80\xed\xd0\x14\x62\xd9\x0c\x23\x49\x57\x44\x43\x88\x34\x83\x88\x24\x32\x88\x04\x59\x26\x99\x88\x70\x65\x84\x6c\x68\x31\xa1\x24\xcb\xae\xaf\x11\x24\x9f\xd8\xa7\x47\xcd\x2f\xb6\x38\xf8\x79\x6f\xf6\x53\xbb\xeb\xd5\x2b\xf2\x53\xf3\xfc\x75\xf7\xdd\x1f\x7a\xe3\xb7\x73\x3b\x37\xcd\x9d\xd7\x23\xaf\xdf\x21\xb9\x94\x0d\xac\xaa\x50\x04\xe4\x02\x07\x73\xa2\x6f\x88\x1a\x49\xe8\x2c\xa2\xcd\x80\xe1\x78\xd9\xb0\x00\xeb\xaa\xa2\xc2\x04\x34\x41\x05\x0a\x26\x23\x4a\x15\x14\xce\x4b\x9c\x5e\x4a\x5e\xca\xf1\x4e\xa6\x13\x05\x27\xe4\xe8\xd2\xba\xce\x0c\xb2\xdc\xee\x51\x6f\x9c\x9f\x92\x8e\x89\xb3\x08\x45\x47\xec\x7e\xfc\xe6\x95\x24\xab\xb5\xc5\x42\x0c\xb9\x20\x54\x49\xe8\x38\x90\x93\x4d\xc5\xe1\x64\x52\x65\x10\x13\x99\x18\xf9\x5a\x18\x06\x0e\xe3\x98\x3a\xcb\x50\x54\x60\x05\x12\x45\x2a\xde\x6b\x60\xa7\x5b\xe9\x37\x9f\x1e\x38\x35\xf7\xad\x2d\x4a\x3e\xbf\xc7\x9d\x16\xe5\xcf\x1c\xcd\xd4\xba\x0c\x46\xdb\x32\x11\x99\xb6\x77\xdd\xfc\xfe\x8e\x57\x3e\xb2\xee\xc8\x2d\x85\x2f\x16\xcc\xb7\xee\x7d\xbe\x56\x8f\xe5\x03\x4a\xcf\x78\x3a\x98\xbe\xfe\xfb\x83\xce\x6d\xb7\x3f\xcd\xf2\x6c\xff\xcb\xf1\x49\x96\xd2\xf1\x23\xd7\xd3\xfc\xc8\x71\x4c\xd6\xe4\x5d\xc5\x51\x15\x9e\x93\x2c\x5b\x60\x7c\x56\x97\x45\x0e\x87\x10\xcb\xae\xc2\x41\x8a\x72\x99\x28\x30\x01\xaf\x29\x89\xef\x9b\x52\xbf\xf9\x37\x73\x64\xdc\xd6\xe4\xe3\xa6\xba\x32\x5d\x9b\x59\xb4\xc9\xcd\x21\xdf\xbf\x97\x3b\xcf\xd7\x6b\x86\x7b\xcd\xb3\xc8\x3f\x7d\x99\x64\xe8\x87\xe3\xb0\x86\x61\x30\x58\x21\x04\xa0\xb0\x6e\x40\x29\x0a\x83\x2d\xc1\x07\xa2\x29\xaa\x92\x49\x52\x14\x04\x20\x8c\xa1\x2c\x52\x90\x62\x4d\x5b\x4d\xa0\x21\x46\x75\x1f\x7b\xf8\x7c\x9e\x11\xce\xc3\x7e\x35\x95\x3e\x99\x26\xe6\x15\xb2\x8c\x1c\x30\x75\xc2\xd6\x1e\x2b\x57\x79\x93\x1a\xb1\x1e\x91\x64\x30\x24\x54\x38\x9e\xf4\x50\xc8\x22\xd1\x16\xf9\x40\x34\x09\x57\x95\x20\x4d\x08\x91\x88\x44\x83\xe6\x78\x9d\x90\x2c\xc9\x52\x04\x37\xc2\x1e\x4d\x4b\x9e\x9c\x3a\x87\x3a\x9b\x6a\x54\x6f\x50\xd9\x3a\x2f\x37\x57\x56\xcf\xab\x3d\x66\x60\x8d\xb1\xfd\xbf\x8d\x0b\xa4\x6b\xf4\x73\xe3\xe3\x75\x72\x9f\x2c\x92\x76\xda\x86\xc4\xc9\xc8\xa7\x44\x9a\xc5\xa6\x4f\x08\x24\x25\xeb\x72\x24\x09\x8c\x68\x6a\x84\xe4\xda\x88\x24\xb4\x50\xc2\x30\x90\x28\xc8\xb8\x90\x27\x04\x49\x00\x9a\xf2\x1a\x4c\x72\xae\x6c\x5f\xae\x2d\x96\xbe\x5c\x9b\x06\x19\xdf\xfd\x68\xcd\xd8\x95\x2d\xea\x9f\x5c\xbe\xa8\x6a\xc3\xd9\x7e\x81\xb2\x47\xd6\xed\xdd\xf9\xd9\xa8\xe4\x5e\x93\x6e\xe8\x47\xc0\x88\x04\x05\x70\x81\xe7\x50\xa4\x60\x61\x0d\x4a\x2c\x19\x59\x32\x41\xb0\xb1\x29\x29\xaa\xae\x06\x36\xeb\xb0\x22\x2d\x03\x93\x14\x54\x2e\xf5\x49\xf7\x9f\x9d\xab\xd0\xef\x9d\x83\x3f\xa4\x2c\x73\xff\x28\xe1\x55\x3c\xf8\xd9\xe3\x0c\x25\xeb\xe9\x4f\x9b\xa4\x7f\xfa\xe4\x58\xfd\xfd\x33\x86\x26\x19\x0c\xc9\x1a\x9e\x29\x98\xd0\x09\x59\x1e\x58\xb4\xa4\xa0\x18\x00\x5f\x88\x19\xe0\xe9\x52\xc0\x43\x5e\x82\x40\xd2\x81\x64\xc4\xb2\xc7\x88\x7e\x20\x41\x3a\x71\x18\x92\x2f\x4e\xf6\xdd\xd8\x78\xdf\xa9\xc7\xcd\x27\x9e\xbc\xf2\xf8\x8d\x81\x33\xe6\x36\x7a\xf1\xfe\xc8\xe1\xc3\x2f\xd5\xbc\x5b\xec\xc2\xc6\x46\x7e\x92\xc9\x04\x00\x02\x91\x88\x40\x20\x8a\x3a\x83\x68\x8b\x0f\x04\x8d\x8d\x03\xd9\x67\x89\x88\xd5\x35\xca\xe5\x55\xda\xa4\x14\x43\xa4\x65\x16\x19\x0a\x45\xc4\x41\xea\x30\x6c\x57\x77\x7c\x8f\xba\x53\xd6\xff\x32\x58\xe9\xf3\x63\x28\x4e\x5d\x39\x7c\xf6\xc6\xee\x5d\x6a\x16\xaf\xd5\xfd\xfe\xb5\x94\xae\x15\xab\xae\x4d\xf2\x16\x96\x2c\x88\x22\xa0\x38\x45\xb2\xc2\x88\x16\x14\x96\xa0\x81\xc0\x04\xbe\x84\x28\x8f\x08\x43\x6c\x43\x35\xe0\xa8\x50\x04\xba\x1a\x9a\x58\xd2\x1c\x82\x4f\x9d\xf6\xcf\xd1\x39\x9e\xf4\xd6\xca\xdd\x9c\xfc\x78\xfc\x6f\x35\x84\xba\x4c\xcf\xfe\x2d\x05\x7d\x44\xbe\xec\x2d\xd6\xef\xeb\x5d\x3e\x3e\xba\x30\xc9\x24\x6b\x4c\xe4\x11\x21\x8b\x03\x19\x89\x22\xcf\x41\x0b\x05\x02\x60\x64\x68\xf1\x34\x1f\xb8\x81\xaf\xe9\x4e\x64\xd3\xbc\x44\xf9\x9a\x66\xcb\x5c\x40\x79\x62\xe2\x99\x61\xd1\x4c\xda\xd8\xbe\x1d\xc7\xb7\xea\x55\xeb\xed\x37\xf6\x35\xda\x95\x3e\xdf\xba\xde\x95\x5a\x94\x09\x7b\xaf\xdf\xd0\x70\xbf\xf6\xf5\xd5\x24\x4b\xf9\x59\x11\x1d\xe8\xb6\x4d\x59\xa6\x4f\x7a\x9e\xc8\x39\x8a\xed\x3b\x04\xcb\x98\x81\x00\x49\xde\x91\x04\x5e\x34\xa2\xc0\x61\x64\xcb\x31\xb9\x50\xb6\x20\xa7\xa4\x76\x8e\x3f\x1f\x1d\xcf\xbf\x6c\xc4\xc0\x73\x5f\xff\xfc\x43\xb5\x11\xad\x1c\xe2\xe5\x37\x67\x9b\xff\xbe\xe1\x3a\x71\xf4\x79\xfe\xbb\x65\x5a\xe4\x4e\xbb\x8e\x75\xe2\x46\xd8\xe2\x30\xc1\x28\x41\x28\x59\x98\x8f\x90\x84\x4d\x29\x72\x54\x3a\xc6\x41\xc4\x93\x01\x19\x99\x9e\x49\x00\xd7\xb2\x90\xa6\x05\xb4\x0b\x15\x8f\xf5\x12\x63\x9e\x2a\x4e\x13\xfe\x5c\x3c\x67\x19\x31\x70\xeb\xbe\xa2\x45\x96\x9d\xec\xd5\xe9\xcd\x16\x97\xdf\xd8\x34\x98\x52\xaf\x35\x69\xfb\x41\xf1\xff\x1f\x5b\x0d\x09\x1d\x84\x63\xf4\x00\x28\x3a\xed\x59\x76\x84\x03\x25\x76\xcd\xbf\x7b\x47\xd9\x8f\x48\xc4\x87\x24\x10\x00\xcb\xbb\xa2\x61\xda\x00\xeb\x31\x2b\x45\xaa\xa8\x27\x98\x83\xd7\xc8\x95\x3d\x57\x8d\xca\xd5\xce\x75\x74\xf6\xee\xef\x74\xbe\xeb\x9c\x5b\x3f\x36\x9c\x56\x7b\xe6\x32\xfe\x6e\xf9\xe5\x1b\x7f\x78\xd2\x36\xed\xcf\x51\x09\x2f\x3c\xc7\xd4\x88\xd8\x8a\x4c\x3b\x00\x9c\x2c\x2a\x96\xa6\x89\xa2\xca\x18\x1e\xc2\x86\x07\x11\x4d\x91\x34\x90\x55\xc9\x94\x5d\xcf\x31\x21\x1f\x79\xa2\x4a\xa7\x0e\xc3\xc5\x0b\xae\xe6\xbb\xb9\xf1\x39\x33\xf1\x4e\xfe\x63\xed\x8f\xe7\x3c\x90\x69\xf6\xd4\x9a\xed\x5a\x9c\xcb\x5a\x61\xf8\xde\x6b\xe1\xc9\xe5\xd5\x93\x5b\x73\x68\xac\xee\xf1\x82\x49\x07\x94\x63\xc5\x9a\x49\x5a\x82\x6e\x49\xb6\xe7\xb9\x0a\x11\xc5\x1a\x6b\xd8\x81\x1a\xf8\x3a\x08\xa0\xe7\x6a\xa2\x6a\x48\xb1\x6b\x26\x76\x8e\xaa\x3f\x8c\x1e\x57\xad\xe9\xf1\x7d\x5b\xdc\xd1\x57\x3f\xbf\x5a\xe7\x6c\xa5\xa2\x73\xba\x7d\x43\x1d\x7e\xf1\x76\xcf\xf2\x3f\x5d\x3c\x3e\x63\x42\x72\xcd\xa6\x59\x45\x16\x01\x25\x63\xdb\x31\xb8\x50\x90\x1c\x53\x16\x55\x56\x22\x4c\x2b\x26\x28\x03\x89\x46\xcc\xe2\x90\x67\x63\x3f\xe0\x34\x29\x8c\x20\xd0\xf4\xd4\x61\x38\x7f\x56\x97\xf4\x9b\x9f\x0e\x9c\x3e\xac\xca\x89\xa5\xfb\xfb\x0d\x5d\x7c\xa7\x25\xf8\x16\x7c\xb0\xe4\x6a\xcb\x3a\xf1\xae\xa7\x57\x27\xa5\xfd\x39\x2a\xe1\x1d\x2d\x32\x82\x22\x22\x8e\x56\x6c\xca\xd7\x74\x0d\x84\x12\x23\x02\xca\x81\x12\x4f\x50\xa4\x08\x65\xcd\x57\x54\xd7\xd6\x2c\x1b\xb3\x94\xc3\x32\x3a\x54\x13\xe8\x3b\x9e\xaa\x5f\xe1\x72\xed\x06\xad\xcf\xb6\x3f\xfc\xd5\xea\xc3\x2d\x07\x4e\x02\x0f\x0e\x6c\x7d\xe7\xb0\xb9\x6a\xa6\x79\x66\x92\xb3\xb5\xff\x94\x24\x73\xd4\x60\x40\x07\x26\xcf\xf8\xac\x24\xc6\xa2\x01\x59\x8b\xa5\x2d\x53\x52\x88\x80\x76\x1d\x45\xc5\x9e\x14\x32\x9a\xc6\x42\x89\xe3\x2d\x05\xd0\x0a\xc2\xf0\x35\x09\xbc\xf3\xfe\x22\x62\x81\x9e\xcc\x99\x6c\x93\x4f\xac\xba\xf0\xfb\xd1\x8e\x5d\xea\x54\xba\xbd\xf6\x7c\xdb\x1f\xf6\xde\x79\x79\x7a\x4a\x95\xcf\x93\x8c\x17\x23\x45\xe4\x52\x42\xe0\xe3\x58\x14\x29\xce\x73\x59\x26\x36\x02\xa8\x85\x90\xe2\x18\xd5\x15\x05\x6c\xd9\xb2\x8f\x15\x8a\xe0\x64\x49\x37\x23\xc7\x51\x52\xdf\x1c\x83\x72\x34\x7f\x5a\xdf\xdf\x78\xab\x46\x9d\x0f\x27\x3f\xca\xee\x36\x5d\xf6\xb0\xdb\x86\x96\xbb\xb7\x97\x6f\x36\x71\x51\xa9\xf2\xf9\xbe\x7c\x2f\xc9\x6b\x06\xa6\x4a\x48\x86\x2a\xcb\xd0\x51\x79\x1f\x68\x91\x88\x75\xc4\xb9\x21\x2d\x38\x84\xa5\x21\xc1\xd5\x43\x95\xa7\x68\x9f\x70\xa1\xaa\x84\x2e\x85\x39\x32\xb5\xc9\x3b\x4f\x2f\x6c\xf2\xde\x8e\xcc\xd7\x2f\x0d\xa9\xbf\xb8\x49\xfa\x8f\xb6\x9e\xb9\x3a\x62\xe1\x43\x7b\x64\x9e\x79\xa3\xc6\x2d\x2e\x3e\xbd\x69\xda\x11\x27\x09\xd3\x8a\xaa\x20\x99\x33\x2c\xc7\xd7\x09\xc1\x14\x45\xe7\x6f\x77\xf1\x42\x1b\x18\x58\x31\xdd\xc0\xe7\x79\x43\xb0\x5c\xa8\x05\x11\x21\x09\x1a\x56\x22\xf1\x55\xbd\x9c\x7f\x12\x78\xb6\xcd\xad\x67\x67\xfc\xec\xda\xa1\xe2\x13\x1f\x55\x9c\x9a\xf5\xde\xb2\xea\xe8\xee\xe3\xed\x27\x47\x1d\x9e\x98\xe5\x52\x8e\x0e\x15\x9f\x2f\x4f\xee\xcd\x21\x18\x01\x62\x55\x28\x8a\x52\x40\xcb\x81\x2e\x3b\x92\xeb\x07\x2c\x21\x3b\x3a\x0b\x03\x0d\xd0\x12\x83\x1c\x4a\xc6\x38\x86\x71\xe0\x93\xbe\x21\xb8\x09\x9a\xac\xae\xe7\x86\x6d\x09\x6f\xbc\x9b\xed\xa7\x81\xc5\x32\x2c\x98\x7f\xba\xc8\xf0\x72\xc3\x98\x6b\x7d\xff\xca\x34\x7a\x67\xa5\x7d\xe9\x3e\x6c\xb7\x27\xb9\x26\x33\xb2\xc9\xc9\x48\x17\xc3\xc8\x75\x59\x5b\x74\x60\x04\x81\x25\x62\x2c\x89\x11\x22\x00\x11\x10\x66\x64\xc7\xa4\x2b\xc4\x7e\xc4\x19\x1c\xa2\x3c\x17\x26\x1e\x35\xec\x9b\xd0\x4f\x2d\x75\xf8\x5a\x5e\x34\xea\xfc\x9c\x09\x97\x17\x0f\xac\xfc\xe7\x47\x4f\x9e\x6e\xa8\x30\xd8\x2b\x3f\x62\x52\x26\x10\xaf\x4e\xae\xd9\x9e\x05\x6c\x33\x50\x0d\xd7\xb0\x58\xa4\x73\x56\x10\x30\x48\x92\x24\x83\xf7\x09\xde\x84\xc0\x50\x7d\x87\x23\x90\x45\x5a\x08\x93\x84\x2b\xb1\xc8\xe3\x12\xa7\x96\xde\xbd\xea\xc5\x0d\x46\x70\xc6\xd1\x49\x03\xf6\xb9\x6b\xdf\x39\x53\xbd\xde\xd5\x97\x9b\x9e\x0d\x38\xef\x34\xd4\x0a\xff\x90\xae\xe8\xfe\xe4\xfa\x35\x6f\x09\xc0\x27\x74\x17\x88\x9e\x2b\xd9\xbc\xc9\xc6\x0e\x83\x05\x91\xe3\x6c\x8f\xb7\x15\x9f\x0a\x11\x0a\x25\x18\x40\xdf\xe3\x45\x27\xb4\x22\x17\x27\x60\x88\x5c\x77\x73\xc1\xbd\x91\xd5\x4f\x6d\x80\x7f\xfe\x5a\x6f\x0d\x21\xec\xff\xf9\xfd\xe2\x8f\xb2\xdc\xc9\xf1\xfb\xc4\x9f\x9e\x9c\x3b\xb6\xa8\x68\x72\xf7\xfc\x59\x9a\x0e\xa1\x6f\xea\x96\xe9\x43\x42\xd7\x58\x48\x40\x95\xe5\x40\x80\x78\x96\x11\x4c\x55\xa4\x3d\xdf\x24\x22\x2c\x89\x8e\x4e\x86\x84\xa9\xd3\x82\x9a\x80\x28\xe7\x40\x19\x66\x7e\xed\xed\x0f\x7f\xba\xd1\x0f\xb4\x9b\xf1\x73\xe6\xaf\xbf\xce\x57\x6f\xa4\x5a\x23\x4f\x9f\x8a\x6f\x7f\xb7\x2f\xfc\x7d\x6e\xe5\xe4\x9e\xb2\x1f\x01\x35\xb0\x04\x59\x17\x03\xc8\x98\x1c\xcb\x69\x80\xa2\x28\xd6\x17\x05\xcb\xe7\x43\x48\xa8\x24\x64\x19\x37\x92\x15\xc1\x34\xc2\x58\x72\x39\xd2\x49\x7c\x7b\xd4\x2b\x92\x61\x77\x33\x23\xcf\xd0\x21\x0d\x6f\x4f\x79\x5a\xb7\xc7\x85\xa5\xd3\xb8\xeb\x66\x99\xcd\xb9\x9e\xf6\x9d\x52\x61\x65\x89\xda\x49\x56\x3c\xe6\x28\x26\xb4\x08\xc3\x60\x49\xc7\xa3\x65\x91\x74\x49\x46\x94\x34\xc4\x00\x9d\x90\x80\x0a\x42\x88\x54\x41\x40\x8e\xc5\x68\x8c\x14\x03\xc3\x92\xf9\x04\x75\xc7\x67\x59\x56\xc6\x4a\x8d\x42\x05\x97\x7d\xdb\xa0\xf8\xb9\xfe\x2b\x17\xee\x18\xb8\xf3\xc6\xc9\x15\xb7\x66\x5c\x1c\x70\x6b\xea\x27\x47\x4a\xa7\x3d\x0c\x13\xf3\x86\x53\xb1\x45\xd0\x32\xa7\xc8\x12\x07\x0c\xc3\xd7\x19\xac\x01\x43\x33\x6c\x29\xe2\x09\x47\xf2\x29\xde\xf4\x79\x8b\x42\x3e\xe7\x0b\x1c\x41\x59\x5a\x8c\x5e\xf3\x88\x9d\x3e\xa3\xe6\xb6\xa8\xcf\x56\x6c\xd1\xe9\x50\xd1\x9d\xcb\x86\x35\x1d\x3c\x5b\xfc\xed\xf2\xaa\xa5\x53\xbf\xcf\x76\xa7\xfc\x9b\x55\x37\x14\xfd\x6f\x10\xc3\x7f\x7a\xec\x1e\xd0\x20\xf7\xdc\xdc\x19\x5e\x05\x31\x34\xf4\x16\x50\x2f\x0a\x6f\x9f\x35\xe5\xc0\x81\x78\x72\xef\x75\x1b\xed\x3e\x05\x7b\xd4\xff\xec\xfe\xc1\x83\x39\xdf\xd9\x5d\x3a\xbe\x9e\x64\x6e\x18\x89\x32\x04\xc7\x97\x28\x4b\xe0\xd4\xc8\x05\x9e\x4f\x04\xba\x6f\x85\x16\xc3\x0b\x3e\x6d\xda\x8a\xf1\x77\xf8\x87\xac\x10\x73\x40\x30\x5c\xd5\x51\xb9\xd7\xec\xa7\x37\x5b\x4a\x2e\x2c\xd8\xb8\xdd\xf8\xda\xf7\x3a\xce\x1b\x8f\x1a\x37\xfe\xbe\x23\xae\xf6\xf0\x41\xe3\x2f\xb3\xfc\x72\xed\x5c\x8b\x26\x27\x8a\x25\xbb\xbf\x40\xbe\xc0\xc8\xac\xa3\x9a\x58\x97\x14\xdf\x89\x71\xa8\xa1\x80\x08\x78\x42\x17\xf8\x40\x60\x39\x97\x0a\x7c\x80\x1d\x20\xd9\x92\x0b\x4d\xec\xbc\x46\x8c\x68\x27\xf5\xf9\xec\xdd\x6b\x56\xee\x9f\x5f\xf5\xf9\x0f\xcf\xbc\x89\xc3\xde\x4e\x97\xa9\xde\x8b\x7e\x2d\xc6\xe6\x2a\xe3\x8d\xbd\xf3\x4e\xe3\xb4\x33\xa6\x25\x6e\x40\x29\xdb\x31\x24\x3e\x72\x39\x95\x80\x50\xd1\xa0\xef\xea\xa1\x18\xc4\x82\x0b\x14\x8d\x33\x6c\x14\x86\x31\x64\x04\xa4\x3a\x0c\x6d\x50\x5e\x0c\x09\x94\xf8\xb4\x37\xb5\xd4\x3e\x19\xf1\xd7\xf4\x91\x79\xce\xbc\xc5\xb6\xcd\xfd\xe8\xcd\x46\x37\x2a\x3e\xee\x4c\x55\x6f\x39\xaa\x50\x7c\xfd\xf4\x89\x74\xc9\x15\x04\x84\x3a\x89\xf8\x00\x73\xaa\x85\x62\x05\xa2\x18\xb8\x32\xa4\x39\x9b\xa2\x6c\xcd\xa3\x45\x5a\xa0\xb0\x04\x81\x23\x1a\x14\x04\x86\x44\x98\x32\x65\x71\x20\xb1\xd9\xe7\xb7\x7f\xb3\xfe\x6c\xe6\xde\x18\x4d\xcf\xa1\xfe\xd8\xb9\xd6\xed\x9e\xb7\x46\xe6\x29\xd3\xeb\x59\x06\x26\xeb\x9f\xe5\xf2\x89\x13\xd3\x0e\xdb\x4c\xfc\x54\x2f\x01\xd1\x89\xd8\x88\x31\x1d\x97\xc6\x24\xe1\x51\x0a\xcd\x61\x8e\xb3\x1d\xdf\x8d\x80\x29\xbb\xac\x01\x22\x4a\xe5\x65\x9d\xf5\x20\x96\xd8\x18\x2b\x89\x9d\xe4\x54\xcd\x1a\x8b\x2b\x75\xbc\x52\x2a\xc7\xb2\xaf\x26\xed\x1f\xa3\x5c\xdd\x52\x0b\x76\x98\xec\xb5\x5e\xba\x31\xa5\xc2\xaa\x1c\x6b\xa7\xae\x4a\xf2\xcb\x95\x15\xc8\xa1\x61\xeb\xae\x2a\x84\xb4\x40\x21\x9b\xa1\xdc\x90\x0b\x1c\x91\x65\x31\x70\x82\x40\xf6\xdd\x80\xd3\x02\x92\x81\x24\xe1\xda\x92\x61\x93\xff\x30\xa7\xfd\xb7\x9c\xe7\x7f\x7a\x92\x18\xd0\x20\x6b\xff\x7f\xc9\x79\xfe\xf3\x95\x97\xf2\xad\x79\x34\xee\x54\x81\x05\x79\x6e\xac\x3c\xd1\x92\x9e\xbe\xbf\x45\xf3\x17\x99\xce\xcf\xca\x57\x45\x38\xfe\x39\x6a\x39\xa8\x55\x92\x89\x5c\x0c\x40\xc9\xd0\x52\x2d\xd5\x06\xba\xa6\xb1\x8a\x83\x19\x00\x64\x18\xd3\xb6\x64\xe9\x0a\x90\x3c\xcf\xa2\x60\x18\x49\x2a\xd2\x18\x99\x10\x44\x1d\x53\x89\xff\x9c\x77\x86\xfc\x7c\xaf\x5a\x83\x5f\x8a\x7d\x57\x68\xc0\xe8\xee\xd3\x0f\xbe\x51\xf2\xd7\x6b\x79\x8f\xe4\x2a\x30\xb9\x1a\x5a\xb8\xb1\x46\x9d\x8a\x69\x67\xfb\x49\xcc\xc4\x27\xba\x34\x92\x09\xcf\xd4\x55\x93\xe7\x15\xc5\x54\x04\xc9\x41\x80\x23\x08\x93\x57\x43\xdf\xa4\x01\xc1\x4b\xae\x60\xd0\x00\xab\x64\x4c\x93\x1c\x0b\x12\xcf\xcc\xdd\x9a\x57\x4e\x76\x6f\xbe\x7d\x50\x89\x9b\x9d\xb3\x66\xcf\xd9\x3c\xc7\x1c\xb3\xef\xa0\xbe\x0d\xae\xcd\xfa\xb4\x78\xd1\xcd\x63\x0a\x57\x4a\xae\x96\x3b\x2b\x45\x84\x28\xb1\xc0\x8b\x05\xdf\x8c\x03\x5d\xa0\x2d\xec\x41\x9b\x20\x15\xc9\xe6\x6c\x08\x08\xc7\x26\x04\x33\xf0\x8d\x48\x0c\x34\xd2\xa3\x62\x03\x26\xe0\x3a\x79\xfc\x72\x43\x86\x06\x0f\xaf\xdc\xcc\xff\xd5\xe0\x14\xb7\x62\x9e\x1e\xd7\x69\xe6\x83\xe2\xdb\x9e\x75\xfe\x70\x52\xbd\xde\x2b\x4a\x5f\x3b\x9a\x64\x3a\x0b\x11\xd8\x56\x44\x10\x0c\xe3\xb3\x8e\xab\x2b\xb4\x6c\x2b\x28\x54\xdd\x00\x9b\x0e\xaf\x47\xb6\x89\x18\x42\xb7\x35\x1d\xc9\x34\xe2\x09\xc2\x45\xbc\x97\x0a\xc2\xf0\x9f\xf2\xf4\x80\xfa\x29\xe9\x8a\xbf\x0a\x61\x18\x3e\xa0\xdb\xba\x1d\xfd\x0e\xb4\x9a\xb4\xa5\xf6\x98\x4d\x1f\x9e\x1c\xbc\x73\x51\x83\x61\x27\x72\xbd\x5b\xe4\xa7\x93\x4b\xf2\x6e\xdb\xd0\xae\x4d\x72\xff\x17\xd6\x01\x48\xf2\x68\x89\x8a\x62\x04\x75\x5a\x08\x1d\x02\xc5\x7c\xa8\x62\x99\xf4\x69\x45\x8b\xb8\x90\x82\x1a\xed\x99\x84\x14\xb1\x36\x81\x08\x23\x8e\x13\xdf\xac\x8d\x7b\x5e\x79\x84\xf0\xdc\x06\x65\x1e\x6a\x1d\x16\xf4\x3f\x5a\x36\xeb\x4f\xf9\x33\xd7\xfb\x38\xe3\x8c\xee\x3f\x8c\xec\xba\xaf\xc6\xb8\xe2\x49\x06\xf3\xe8\x40\xa4\x19\x8a\x73\x6d\x97\x37\x04\x3d\xe0\x3c\xc9\x23\x4d\x95\x01\x2a\xed\x20\x5f\x0a\x38\x4b\xe2\x44\x8e\x67\x02\xdf\xd6\x0d\xc7\x15\x83\x7f\xed\x03\xa4\x7e\xa9\xf6\xab\x2c\x1d\x79\x63\x77\xb1\x3a\xe5\x56\x96\xcf\xf6\xed\x9d\xb5\xfd\x07\x1c\xae\xd9\xe6\xb7\x97\x97\x17\x2e\xc9\x3a\xf4\xf9\xe7\x37\x57\xa7\x7d\x69\xe4\x35\x8a\x55\xac\x6a\x03\xc7\x66\x49\x9f\xf2\xb0\x4d\x78\x21\x6d\x53\x11\xc6\x61\xe0\x29\x84\x09\x22\x4b\x92\x20\x4f\xd3\x00\x73\x96\x47\x93\x2e\x11\xa8\x51\xe2\x3b\x67\xcf\x4f\xf7\x3f\x43\xcf\x7e\x1a\x35\xa6\x50\x5f\x3b\xd3\x85\xba\xa3\x96\xdc\x4f\x5f\xa8\x6d\xd7\x05\x8f\x0e\x74\x4c\x19\x9f\xef\x97\xeb\x19\x92\x6b\x36\xc5\xfc\xdd\x11\xb2\x9e\x20\xf2\x38\x60\x79\xc5\xf2\x35\x40\x21\x53\xa1\x0c\x4a\x85\x34\x2b\x98\x62\xec\x08\xa6\x14\xda\xc1\xdf\x15\x06\x15\xe8\x3c\xf7\x3f\x66\xef\x6f\xfa\x5f\x97\xfb\xb8\xba\x55\x0e\xe6\x09\xca\x97\xff\xb3\x6a\xe7\x5f\x77\x2d\x18\xdf\xae\x50\xdf\xc2\x2f\x1f\x75\xd2\x9b\xaa\x3b\x26\x65\x33\xde\xb2\x06\x34\xe8\xfb\xf2\xe5\xcb\xff\x05\x61\x28\xd6\x36\xfd\xad\x92\xef\x65\x5a\x79\x79\x68\x8e\x5e\x5b\x3f\xff\xa0\xcc\x86\x07\xd0\xd7\x47\x77\x3d\xf0\xed\x66\x7a\xd3\xc4\x7a\x6f\x77\x49\x32\x4d\xa1\xee\xc8\x94\xe9\x50\x0c\x85\x0c\x92\x55\x7d\xd3\x64\x62\xd5\x73\xa5\x90\x0f\x10\xd6\x38\x24\x02\xcb\x26\x18\x04\x79\x1d\x43\x95\x92\x2d\x09\x25\x68\x37\x57\x35\x0a\xf7\x96\x9f\xbd\xae\xef\x85\xec\x53\xeb\xbe\x51\x6d\x5d\xbd\xf6\x5b\xe6\x70\x85\xa3\x9e\xfb\x84\x91\xb5\x26\xcc\xef\x3b\x7f\x69\x72\xff\x19\xdd\x8f\x08\x41\x95\x54\x22\xa6\x64\xcb\x0a\x21\x45\xab\x11\x54\x74\xce\x85\xb4\x40\xaa\x80\xa5\x6d\x02\x79\x1c\x12\x63\x8d\x27\xd9\xc8\x61\x3d\xd2\x49\x9c\x0d\x46\x2e\x1f\x56\x62\x81\xfd\xd6\xef\x3d\xf3\xe4\xe9\xbd\x25\x5f\xe9\x7d\x5c\xbb\x0a\x4b\xb2\x7e\x56\xe7\xc2\x97\x39\x0b\x14\xaf\x28\x67\x4f\x7b\x97\x9c\x98\xb2\xce\xb7\x04\x01\xf9\x9c\xc1\x03\x8e\xa3\x0d\xda\xb6\x22\xc7\xc4\x3c\x2f\xc8\xa1\x46\xf3\x40\x94\x1c\x4a\x94\x49\x01\xa8\x81\xc7\x39\xaa\xce\xb0\x0e\x93\xfa\xa4\xbf\x1c\x37\xb1\xc9\x2f\x67\x4e\xa4\xcc\x99\x53\xb4\xc3\xe5\xa9\xb5\x33\xe4\x3a\x32\x64\xcf\xec\xd3\x5d\xcb\x5e\xdd\xd0\xcd\x1a\x38\xdf\x5e\x91\xdc\x6c\x10\xe9\x04\x22\x83\xc0\xf1\x58\xcd\xb5\x55\x07\x41\x89\x22\x44\x45\x16\x7d\x21\xa6\x74\x93\xe3\x4d\xc2\xd1\x15\x82\x07\x94\xcb\x04\x91\x48\x84\xfa\xbf\xe0\xbf\xa9\x1f\xc9\xcc\x6f\xc7\xef\xff\xec\xde\xa3\x7d\x99\x6b\x5c\x3f\xf4\x41\x8f\xba\x19\xc7\x74\x68\x54\xfb\xbb\x1d\x97\xc6\x54\x6f\x3e\x53\x02\x55\x47\xa5\x7d\x6e\x9c\x18\xfe\x6b\x89\xa1\xc8\x8a\xac\x1d\x99\x5a\xa8\xba\xa2\xed\x43\xc8\x0b\x8c\x1f\x1a\x04\x82\xc8\x17\x0d\x41\xe1\x7c\x53\x24\x28\x43\xe3\x38\x20\x1a\x14\x4e\x20\x67\x72\x27\x6b\xc7\xa2\x1d\xb6\x96\x3b\x32\x7e\xc2\x43\xee\xf3\x91\x2d\x6e\x6c\xb9\x5d\xe2\x60\xbe\x03\x6b\x87\x34\x5c\xff\x6c\xea\x9a\x13\x35\x9e\x25\x19\x55\x47\x50\x84\x68\x72\xae\x24\x63\x5a\x60\x45\x28\xb9\x21\xa3\xcb\x14\x0d\x35\x57\x06\x40\x44\x26\x2b\xb2\xb4\xee\xc7\x10\x00\x8f\x56\x15\x4a\x61\xfd\xc4\xa3\xee\xdc\xe9\xbf\x19\xdd\xbf\xda\xda\x31\x07\x06\x59\xe3\xc7\x5e\x9e\xd7\xf8\xb0\xf0\xc7\x8d\x5f\xab\x76\x1e\x7e\x65\x49\xb6\xaf\x8f\x6d\x8c\xb2\x24\x79\xed\xd2\x8b\x3c\xc4\x2a\x81\x13\x42\x46\x74\xc8\x10\xf8\x92\xaa\xcb\x51\x80\x0c\x2e\x74\x40\x28\x3b\x94\x22\x08\x46\x1c\x40\x06\xc7\x14\x67\xaa\x1c\x34\x53\x4f\x7e\x88\x33\x4f\x16\x8e\xa8\xf6\xf5\x9d\x69\xbc\x38\x6d\x5c\xc5\xac\xe5\xf3\x2e\x3e\x90\x2d\x7f\xee\xa5\xe7\xcf\xb4\xad\xde\xb0\xf9\xc4\x7e\x49\x96\x87\xf7\x50\xcc\x19\xa1\x1b\xb9\x3a\xef\x62\xc5\x24\x44\x91\x02\xd8\x43\x96\x8f\xb0\x8f\x62\xc0\x40\x5e\x15\xcc\xc0\xb4\x35\xc2\x03\x9e\x66\x22\xe4\x79\xa9\x47\xdd\x8d\x72\xb6\xed\x3c\x86\x2e\x5b\xb7\xc8\xe4\xef\x07\x06\x8d\x9f\x16\xcb\xd5\x77\x40\x33\xbe\xc4\x8b\xfd\x65\x0e\x55\x5d\x7c\xe6\xe4\x31\x2d\xc9\x9b\xa2\x1e\xc3\x43\x2d\xd2\x78\x9f\xf4\xb1\xab\x22\x08\x65\x9f\x08\x25\x95\x08\x2d\x0c\x3c\x82\x87\x1e\x47\x22\x0e\x40\xe0\xdb\x16\x85\xb1\xea\x21\xf8\x9a\x11\xca\xde\x42\x05\x1f\xec\xfc\xac\x7f\xcd\x6b\x5f\x75\xae\xb6\x7c\x51\xa1\x09\x5f\x2d\x7c\x38\x34\xeb\xf3\x07\x13\xf7\x3c\xd1\xe7\x65\xff\xe8\xde\xd0\x57\x7f\x9d\xbb\xe5\xac\xf8\x8f\x27\x0f\xb3\x75\xa9\xf8\xf3\xbe\xad\x33\xf5\x19\x87\xaa\x17\x4e\x19\x38\x67\x5a\xd7\x68\x51\xbf\xf7\xab\x3f\xbb\xfe\xe9\x2b\xd9\x39\xdf\xd0\x2e\x0b\x67\x2e\x98\x2e\x8d\xff\x62\xeb\xa5\x03\x95\x1a\xcd\xbd\x3f\x60\xec\x8d\x27\x0d\x26\xdc\xef\x62\x56\x9b\xdb\x58\xae\x96\x5c\x38\x27\x64\x22\x85\xe3\x7c\x95\x89\x31\x0d\x1c\xcd\xd3\x38\x82\x93\x6c\x8e\xe3\x91\x01\x7d\x99\x65\x10\x65\x29\x76\xe8\x98\x00\x4a\xa4\x15\x79\x81\xc6\x71\x5e\xe2\x1c\x90\xd2\x27\x4b\x89\xec\x75\x7b\xb7\x37\x7f\x6f\x51\x65\xf5\xf5\x52\xfc\x5f\x79\x0e\x0e\xb6\x8a\x8c\xfb\x63\x68\xd3\x0e\x8b\x59\x61\x42\xb9\xe4\xc6\x8b\xe0\x91\x76\x68\x63\x9a\xe2\x3c\x19\x12\xb2\xa3\x93\x3e\x25\x73\x21\xc0\x34\x8b\x78\xc4\x50\x3a\x11\x10\x7c\x68\xe8\xa6\x1c\x87\x41\x2c\x05\xe6\xbf\x99\xfd\xcf\x32\xdb\xc1\x16\x1c\xdf\xf4\x94\x91\x99\xdc\xfe\xdd\xa2\x77\x76\xd5\x5c\xab\xcf\xed\xda\xf4\x1c\x9d\xde\xec\xfa\x62\xd3\x3c\x3b\x53\xda\x8b\xe5\x84\x26\x5b\x52\x8c\x38\x11\x81\x48\x97\x45\x55\x90\x48\x1f\x58\x0c\x83\x75\xcf\x57\x69\x87\x8f\xf8\x30\x88\xe2\x00\xda\xb2\x17\x10\x12\x22\x00\x49\xa0\xd7\xf5\xf3\x95\xbb\x2f\x2e\x51\x6c\xf3\x93\x23\x76\xf6\xf5\x3d\x50\x96\xc1\x75\x9f\xce\x13\x66\xff\x04\x3f\xfc\xb3\xe2\xfd\x61\xe3\x06\xb5\xfd\xe3\x8d\x24\x2f\xb3\xb9\xa4\x0c\xed\x50\xf7\x0c\xd3\x07\x22\x84\x2a\x6f\xf0\x1a\xd0\x21\x2d\x11\x84\x1f\x59\x32\x2d\x70\x6a\x28\x7a\xbc\x82\x14\x53\x64\x5d\xc4\xaa\x4c\xe2\x01\x6f\x34\xe4\xeb\x02\x62\xab\x3b\x87\x9a\x1e\x1f\x94\x2b\x7b\x1f\x69\x0e\xa8\x98\x7e\x13\x3b\xb9\x81\x2a\x1a\x4e\xee\x3f\xf2\x6c\x49\x2e\x3f\x37\x54\x1c\x48\xc4\x26\x04\x40\x02\xa4\x06\xa0\x4d\x93\x84\x6e\x3b\x80\xa3\x19\x9d\x47\xc8\x51\xb1\xe9\xe8\xc0\xa6\x74\x55\xd6\x54\x14\x0a\x86\xa4\x26\x10\x5b\x9a\xbc\xf1\x77\x35\x4f\xae\x8d\x67\xf7\xdf\xdd\xc4\x8c\xea\x81\x52\xa4\xc9\x29\xa3\xa7\x77\x9b\x5c\x61\xd7\x19\x73\x54\xd5\x9a\x63\x92\x2c\xe8\x13\x8a\x2a\x09\x42\x40\xb3\xb1\xe8\xba\x2a\x17\x20\x2b\x92\x1c\xc2\x10\x0c\x9f\xd5\x1d\xce\xc6\x14\x56\x4c\x17\xc6\xa4\xc7\x5b\x84\xc5\xd3\x40\x42\x28\x31\x3d\x66\xfe\xaf\xc6\x71\xcb\xda\xec\xee\x7d\xea\xd2\xda\x48\x3e\x50\xac\xc4\xf2\xa5\x53\x9e\x0c\xa7\x05\xf8\xa4\xc7\xf2\xc5\x95\x1e\x15\xbc\x9d\x5c\x07\x11\x21\xa6\x29\x5b\x15\x75\x95\x34\x3c\x81\x36\x03\x82\xf3\x02\xc9\xf0\x6d\x15\xeb\xba\xc1\xa8\x8e\x62\x0b\x11\xd6\x63\x92\xa2\x48\x97\x0b\x48\xed\xdf\xf8\xb9\xff\xc7\xe4\x2a\x6f\x3e\x7e\x72\xf5\xe0\xf0\x2e\xa2\x74\x60\x2e\x33\xeb\xab\x1f\x6a\xf4\x1e\x84\x4b\xbc\x18\x7c\xfa\x59\xf4\x73\xfa\x26\x2b\x9e\x25\x57\x64\x83\xc5\x0e\x26\x02\x1c\x87\xd8\x30\x19\x06\x41\x41\xe4\x22\xc1\x52\xb1\xe0\x98\xb4\x2b\x42\x43\x01\xba\xae\x1a\xb4\x49\x13\x20\x10\x34\x15\x58\xa4\x13\xa5\x36\xb9\xd3\xfb\x9b\x16\xcc\x5f\xd4\x62\xfa\xc8\xcd\xf9\x1e\xfd\x41\x1d\xe9\x58\x81\x6f\x95\x7e\x81\x86\x3f\x9f\x7f\x72\xfd\x9e\x39\x73\xb9\x30\xc9\x88\x01\x20\x3a\x92\xa6\x30\x98\x55\x20\x74\x2c\x49\x11\x6d\xcc\x99\x96\x22\xaa\xaa\x10\x81\xd0\x8a\xa0\xa5\x12\x38\x14\x28\x0d\x92\x9c\x0a\x15\x0d\x6b\x89\x9d\x83\x99\x71\x24\xf3\x8a\x2e\xe9\x52\xb6\x3b\x2f\x1f\x30\xd7\x67\xdd\x9d\x53\x6a\xd1\x8d\xe9\xd2\xb3\x92\x87\x3a\x0f\xfb\x71\x41\xb9\xc9\x69\x5f\x85\x4d\x78\xe9\x91\x00\x7b\xf2\xff\x53\xaa\x60\x55\x8b\x56\x28\x31\xc4\x91\x2a\x8b\x44\x88\x68\xdf\xd3\x35\x95\xb1\x55\x8b\x57\x79\xd9\x09\x09\x52\x09\x05\xcf\xd3\xed\xd4\xf7\x74\xcd\x0f\x3e\x7f\x64\x56\x9d\x32\xf7\xdb\x32\x55\xf5\x87\x4b\x57\xb9\x79\xde\x9d\x77\xaa\x51\xd9\xf9\xb7\x0a\xb7\x1e\x55\xbc\xef\xb3\x0c\xf9\x93\x3c\x77\x15\x7c\x57\x0b\x15\x01\xda\xaa\x6a\x23\x8b\xf3\x18\x8e\x8c\x09\x5b\xa1\x63\x48\x2a\x44\xa0\x38\xb6\xe7\xb8\x94\x12\xb3\x9a\x6e\x38\x02\xa3\xb1\x2e\x99\xda\xe4\x4f\x96\x57\x6a\xba\xa9\x73\xc5\xe5\xb0\x67\x9f\x27\xf6\x1e\x25\xe5\xee\x1b\x79\x8e\x1e\x9d\x7e\xab\xf3\xef\xbf\x9d\xf8\xe8\xf3\x1f\x5f\x24\x99\x6b\x9e\x8d\x23\x8d\x74\x20\x47\xc5\x9e\x22\x90\xc0\x8f\x24\x0a\xc6\xb1\x12\x44\x71\x8c\x44\xe0\x9a\x1a\xcf\x5b\xd8\xd2\x48\xc3\x56\x1c\x86\x74\x78\xf8\xea\x13\xfe\x3f\xce\x51\xad\x68\x3b\xca\x73\xbf\xbd\xe7\x66\x0c\xe9\x7c\xc4\x7b\xd7\xc4\x3f\x67\xe6\x9d\xac\x7d\x99\x53\xde\x45\xa6\xbb\x39\x71\xdf\x67\xc9\x75\x0e\x35\xa0\x00\x0a\x23\xc5\xe6\xd9\xc8\xd5\x1c\x11\x44\x1a\x64\x19\xcd\xf2\x78\xde\x20\x90\xe0\x31\xbc\x0a\x59\xe6\xef\x7b\x83\x72\x1d\x5b\x64\x54\x2e\x01\xc8\x21\xde\x70\xb9\xda\x99\x06\xed\xd3\x5b\x0f\x7f\x2b\x5d\x7d\x6e\x2d\xa2\xf0\x9e\x69\xb3\xcb\x4f\xfa\xa0\xea\x9c\x7c\xcb\xb7\xb7\x30\x6e\x37\x4b\xae\xc9\x22\x07\x3d\x48\x08\x21\xef\xf0\x9a\x10\xe9\x8c\x1c\x19\x9c\xa9\xd2\xb1\x2a\xd2\x2c\x6d\x10\x82\x68\x2a\x21\xe7\x53\x8c\x8b\xf8\x30\x34\x05\x00\xe2\x04\xce\x71\x36\xd8\x3f\x79\xee\x8b\x27\x1b\xee\x75\xa8\x84\x00\x6e\xf3\xdd\xcd\x3e\x9a\x57\x7f\x72\xb0\xb6\x8c\x59\x7e\xf0\xee\xc5\x76\xda\x45\xd7\x12\x6f\xd1\x60\x36\x0e\x62\x1e\xf9\xac\xad\xa9\xaa\x28\x59\xba\x66\x98\x98\x35\x9d\x18\x31\x3e\x01\x05\x8e\x76\x09\x5d\x74\x6d\xe0\xd2\x94\x27\xda\xb4\xc8\xf2\xaf\x29\x7a\x7f\xc9\xba\xa3\xf5\xe4\x47\x6e\xf7\xf3\xe8\xca\xc1\x61\x5a\xb3\x22\xed\x3b\xa4\x9c\xfc\xba\x62\xae\x89\xb7\x72\xe7\xfe\xe2\xd8\x81\xaf\x7e\x7c\xa5\x4a\xf9\xb8\xe5\xaf\x67\x76\xc7\x63\xe7\x8e\xd9\xd9\xef\xc2\xde\xc6\x63\x96\x76\xb1\x66\x9c\x98\xdc\xe6\xcc\xde\xec\x83\x5b\x7c\x92\x99\x40\x49\xa6\x4d\x85\xbe\x49\x53\x50\xa5\x02\x48\x06\x0c\x27\x4b\x42\xe4\x38\x1a\x19\x72\x2c\xef\x60\x41\x92\x58\x87\x20\xe5\x40\x42\xaa\xc8\x47\x21\xd4\x78\xde\x25\x70\xe2\x32\xb6\xc6\x94\xcf\x5e\x4c\x1c\xf8\x73\x2d\x76\xeb\x99\x6b\xc5\x37\xfe\xfa\x7c\x56\xdd\x03\xed\x46\x64\x5c\x72\xe2\x72\x83\x89\xa7\xa7\x1c\x89\x92\xab\xab\xc5\xd2\x76\x88\x15\xd1\x27\x95\xd8\x14\x63\xce\x56\x05\x53\xb1\x78\xc7\xa1\x59\xcf\xa5\xed\x80\x8e\x22\xd6\x08\x95\x98\xf0\x5c\x10\x58\x02\x27\x44\x71\x22\x41\xbc\xf6\x1f\x1d\x79\xb6\x78\x44\xca\xf9\x2e\x63\xbe\x69\xf0\x7c\x82\x51\xb0\xb1\x5e\x6f\xf1\xf7\x67\x2f\x35\x1b\x39\x67\xd5\xfa\x41\x4b\x5a\xa6\x1d\x93\x91\x98\xe9\xd5\xd6\x43\x5b\x74\x69\x33\x32\x7d\x1a\xa9\x64\xe0\x4a\x14\x46\x9e\x1a\x6b\x24\xb0\x04\xd9\x34\xf8\x40\xf1\x04\xd5\x0f\x43\x4d\x06\x6c\xa8\x21\x56\x4e\x5c\x0f\x52\xb5\x32\x1e\x9a\xff\x4e\xa5\xe5\x5c\xe3\xc6\xed\x36\xf7\x07\x57\xc4\xbb\x8d\xf7\x8c\xcd\x92\x6e\x04\xf5\xcd\xf4\x01\xf5\xd2\x15\x6d\x9c\xdc\x28\x08\x55\x81\x40\xd8\xa6\x02\x8f\xe7\x81\x8e\xa4\xc0\x0e\x42\x53\xb2\x71\x68\x19\xb6\x1e\x48\x04\x34\x82\x90\xa2\x51\xe8\x29\x0a\x17\x7a\x64\x60\xa8\x71\xea\x7a\xf0\xd6\xaa\x8b\x2d\x84\x49\xef\x97\xcb\xc0\xbe\x55\x91\x1c\xbd\x36\xff\xd7\x99\x6a\xcf\x9f\xb7\xa8\x79\x95\xd6\xbf\xdc\x1f\xfb\x6c\xf6\xa5\xb4\xcf\x7b\x13\xaf\x56\x28\x28\xa4\x0d\x9f\xd1\x15\xc8\xc5\x0c\x29\x12\xbe\xab\xe9\x8a\x43\x88\x86\xc9\xca\x82\x2f\x80\x40\xf0\x6d\x0a\xd9\x21\x8f\x6d\xa8\x2a\xa4\xaf\xf8\x89\x6f\xf5\x6c\xad\x4a\x7f\xfa\xfd\x93\x23\x3d\x86\xe7\x2a\x31\x60\x70\x16\x63\x52\x9d\x2e\xdc\xd2\x52\xdc\xcf\x55\x07\x1f\xf5\x9a\xdc\x3c\x3b\x37\xed\xf3\xde\x84\x27\xed\x91\x36\x8c\x38\x14\xf3\xd8\xe5\x0d\xec\x9a\x9a\x83\x14\x9d\xd7\x68\x8f\x91\x79\x37\xa0\x2c\x92\xe6\xb5\x98\xa6\x74\xcf\xf6\x64\xcd\xb4\xd8\xff\x52\x1b\x7e\xf5\xa4\x53\x5a\xde\x6b\xdb\x2b\xdc\xd2\xa8\xe7\x69\xe7\x4c\xcd\x4f\xa4\x9a\x2d\x33\xbf\x93\xbf\xcb\x38\xb5\xde\xbb\x5b\x9e\xe6\xbe\xb9\x78\xfe\xf3\xe4\xa6\xfc\x90\xc2\x58\x22\x49\x42\xf5\x68\x42\xd0\x14\xa4\xea\x91\x4e\x86\x11\xc5\xb1\x0c\x17\x60\x2c\x4a\x42\xac\xf9\x58\x11\x04\x91\x09\x08\x43\x26\x0d\x0e\xa5\x0e\xc3\x4e\xea\x8d\x36\xcb\x3f\x21\xf7\xde\xc5\x35\xca\x2d\xa6\x1b\xdd\x7e\xd9\xf7\xe4\x5b\x4d\xc6\xee\x54\x4f\x9c\x58\x5f\x20\x77\xf5\xf2\x33\x92\x9b\xf2\x6d\xc7\x95\x1d\xc7\x8e\x5c\x8b\x03\x3e\x0d\x29\x2f\x32\x59\x36\xe2\xd4\x48\xb0\x08\x87\x53\x2c\x85\xf1\x43\x15\x93\xbe\x8a\x59\x59\x13\x59\x91\xf6\xe2\xc4\x61\xb8\x2d\xcb\xc3\x2e\x46\xfb\xf5\x45\x66\xae\xbc\x15\x7b\xc5\x6f\x12\xcc\xc9\x94\x5d\x85\x56\x36\xb9\xd6\x7a\xf5\x56\xfc\x45\x96\xcd\x49\x3e\xe9\x08\x73\x36\x2f\x18\x16\x87\x7d\x05\x22\x86\xd3\x28\x3a\xd0\xb4\x88\xd2\x39\xc0\xd1\x80\xf2\x4c\x68\xb0\x0c\x13\x53\x1a\x1d\xb0\x86\x6d\x31\x88\x4f\x30\xe7\x3a\x9e\x32\xf2\xfb\xe2\x63\xf6\xd7\xe8\xc5\xc6\xd3\x06\x35\xef\x82\x73\xfc\x75\x2d\x7f\xaf\xfd\x6f\x4e\x2c\x73\xea\xd8\x8e\x4e\x5f\xfa\xc9\x95\xa2\x66\x03\xcb\x01\x9a\x15\xd8\xac\x60\x42\xdf\x66\x2d\xda\x0b\xa0\x21\xd0\x9e\x20\xb0\x40\x34\x81\x4a\x50\xb6\xee\xe1\x48\x67\x70\x2c\x92\x64\x18\xd9\x9a\x94\x78\xa2\x58\x72\x7a\x8e\x21\x8f\xf7\xf0\x4d\xaf\x85\x1f\xd7\x4d\x7f\x24\xc7\x0f\x19\x4f\xb5\xca\x7c\x70\xae\x3f\x7c\x3b\x7b\xd2\xcf\x7b\x01\xca\x49\x66\xcd\x51\x39\x45\xa6\x20\x4f\x6a\x21\x09\x74\x06\xea\x92\x13\xd9\x06\x4d\x5b\x81\x23\x08\xbe\xaf\x29\x66\x18\x58\x10\x70\x32\xa0\x4d\x3e\x54\x08\x0d\x53\xa9\x7b\x9c\x0a\x0f\xbe\xfc\x6c\xeb\xba\xfb\xef\xfd\xd0\xff\x7e\xdb\xef\x4e\xe6\x38\x30\xf3\xab\x9f\x47\x96\x2d\xfa\x7d\x83\x2d\x0b\x66\x98\x6f\x1d\x22\xd2\x3e\x21\x49\xcc\x4d\x14\x73\x2a\x72\x11\x0e\x49\xdd\x0c\x48\x3f\x96\x18\x39\x86\xa6\x89\x6c\x1c\xf0\x31\xa1\x4a\x06\xcb\xea\x48\xa0\x38\xc2\x0f\x24\x8f\x22\x4d\xf2\xdf\xa4\xa8\xff\xc7\xe4\xe5\xad\xcb\xe7\x3c\xff\xf6\xf8\x1e\xbb\x26\x66\xfa\x82\x51\x4f\x96\x6c\xb6\xbe\x76\xf6\x1f\xef\x16\x58\x1e\x33\x77\x52\xea\xf7\xae\x95\x5c\xed\x60\xa8\x44\x5c\x44\x5b\x9c\x2e\x2a\x8e\x4e\x70\x14\xc6\x30\x56\x15\x11\x06\xac\x42\x02\x5f\xff\xbb\x4d\xd7\x74\x08\x65\xe8\x61\x05\x47\x8c\x63\x33\x04\x97\x38\x0c\x07\x7f\x36\xea\xfe\xf2\xd2\x1b\xb7\x6b\xd6\xbe\x8e\x87\x57\x7a\x6d\x32\x5e\x46\x0b\x2b\xe7\x5f\x93\xb3\xf7\x21\xf3\x28\xf3\xe9\xdb\x9b\x93\xdc\x96\xa9\x3a\x15\x99\x36\xa7\x99\x1e\xf2\x55\x5e\x8f\x05\x4f\x55\x3d\x89\x61\xd9\x58\x0c\x80\x6d\x78\x01\xeb\x23\x45\xe3\xb0\x2d\x89\x8e\xc0\x09\x06\x12\x52\x87\xe1\xb1\x3c\xd5\x2f\x6d\x81\x2f\x9e\x95\x1d\x7d\x12\xb6\xca\x89\x8e\xdf\xbc\x5b\xa6\x52\xab\x4e\x63\xcd\x16\x57\x97\xbe\x79\xb8\xfd\xfd\x35\xc9\x35\x99\xd3\x08\xc1\x88\x39\x0d\x20\x59\xa1\x4d\xde\xf4\x45\x1b\xb2\x82\x1a\xea\x1c\x47\xd9\x32\x15\x33\x02\x63\x52\x92\x0e\x5c\xe0\xbb\x9e\xea\x40\x96\x55\x13\x57\x78\xf1\xda\xa5\x4d\x99\xa3\x23\x83\xe2\xe3\x4b\x76\x7f\xfe\xb8\xd1\x9a\xbb\x2d\x4b\x15\x1f\xff\x4e\xc9\xe0\xe6\xc3\xfe\x47\x8c\x0c\x99\xd3\x8e\x33\x4a\xbc\x07\x10\x68\x50\x92\x48\x9b\xe5\x10\x90\x38\x5b\x37\x64\xc6\xb7\x3c\x97\xe1\x90\x6a\x38\x81\x28\x42\x4d\xa7\x5c\xc5\xf4\x82\x08\x21\x82\x0a\x3d\x27\xb6\x53\xfb\xf4\xd2\xdc\x5e\xae\x13\x5f\xe6\x9f\xfc\xec\xf4\xb9\xae\x5b\xe7\x13\x73\xf3\xce\xff\xb1\xe4\x7e\xb8\xe1\x44\x93\x66\x2f\xf2\xff\x72\xf1\xd9\x9d\xe4\x26\xf0\x40\xa5\x22\x3d\x8a\xc9\x98\x25\x69\x5e\x45\xac\xe8\x99\x81\xa4\xc8\x3e\x4d\x2b\xbc\x6f\xa3\x20\x34\x03\xac\x71\xb4\x14\xfb\x8a\x6c\x3b\x3e\x96\x38\xe3\x35\x0d\x43\x90\xc9\x1e\xf9\xfe\x68\xfc\x45\xe6\x01\xb8\x5c\xff\xa2\x55\x4b\xee\x7d\x67\xf4\xda\x7a\xdf\xec\x0b\xb2\x1e\x1a\x13\x77\xaf\xd8\xf1\xc6\x2b\x0d\x43\xc1\xef\x2f\x96\xf9\xf8\xfe\x8a\x0c\x7d\x9a\xad\x9d\x31\xee\xd9\xc0\x35\x99\x87\x8d\x98\x9a\xf5\x0f\x6b\x53\xe3\x1a\x8b\xea\x65\x55\x76\xa4\xbd\x65\x4e\x2c\xc6\xce\x71\x2c\x1d\x6a\xa1\xc4\x22\x91\x0f\x35\x95\xf5\x2c\xd7\x8e\xe4\x48\x75\x10\xd6\x5c\x8d\x47\x74\x64\x5a\x74\x0c\x34\x95\x23\x11\x44\x0a\x09\xc1\x6b\x3e\x12\x8e\x7e\xef\xc3\x6d\x93\x4f\x35\x6b\x7e\x7c\x7d\xb5\xb9\xce\xe5\xc5\x95\x9f\xbf\x75\x60\xe4\xea\x41\x85\x73\xcc\x2f\x7a\xa7\xd5\x9c\xd1\xcd\x5e\xa5\xef\xad\x51\x70\xf3\x97\x9f\x0e\xba\xba\xff\x83\x33\xf4\xc0\x0c\x87\xe7\xac\xf9\xf1\xed\x6f\x5a\x2d\x6c\x08\xf2\xb7\x3c\x64\x7c\xf8\x74\x56\xda\x53\x57\xc2\xdb\x29\x86\x04\xe6\x64\xc2\x65\x08\x91\x10\xb0\x21\xb9\xb2\x15\x79\x0c\x8b\x2c\x85\xe4\x80\x2d\x28\x36\x56\x79\xcd\x00\xa6\xa6\x7b\xc0\xd4\x31\xc1\xa8\xff\xbe\x70\xfe\xef\x1f\x59\x6c\xbe\xdc\x6d\xd3\xb6\x82\x65\xe7\x8e\xe9\x04\x62\xa7\x69\xd5\x11\xfb\xeb\x9b\xc7\x3a\xfe\x74\x41\x6d\xda\x73\x57\x84\x73\x1e\x7a\x25\xd1\x4d\xce\x95\x49\x9c\xd6\xbb\xec\x88\xbb\x85\x8f\xb7\xfc\x61\xc8\x47\x6b\xa9\x3c\x6d\xbd\x87\xab\xae\xae\x62\x0f\x48\x95\x7a\x66\x7e\xd1\x21\xc9\x44\xd6\x32\x94\x05\x11\xc5\x9e\x68\xb2\xae\x25\x70\x0e\xc5\x41\x44\x50\x18\x6a\xa1\x17\xb8\x32\xef\x9b\x2e\x26\x7c\x5b\xd0\xfd\x08\xaa\x36\x8f\x14\x16\xa7\x8e\xb0\xe9\x93\x4b\xf0\x1f\xf4\x5e\xfc\xf3\x3b\x73\x26\x1d\xad\x50\xb6\x7e\xc6\x85\x8d\xf6\x17\xc1\xbf\x1c\x9d\x76\x3b\x9b\xfc\x6d\xb9\xbe\xb3\xd7\x27\xd7\x64\x85\xf6\x31\x1d\x33\xa6\x61\x7a\xb1\xa0\x53\x14\x69\x42\x5b\x76\x63\xa8\x05\x4c\xfc\xff\xb1\xf6\x95\xe1\x5e\x54\x6b\xfb\x84\x84\x20\x20\x82\x22\x52\x4a\x83\x48\x4c\x02\x12\x02\x1b\xa4\x91\x96\x66\x62\xad\xe9\x58\x93\x6b\x06\xa9\x2d\xdd\x08\x28\x8d\x34\x4a\x6e\xba\x91\x52\x04\x04\x49\xa5\x41\x4a\x14\x49\x65\x83\xd4\xff\x7a\xdf\xf3\x9e\xbf\x72\xf8\xed\xcb\x73\xed\xeb\xf7\x7d\x3e\xac\x99\x79\x6a\x3d\xcf\xfd\xdc\xb7\xa9\x84\x0e\xc9\x05\x40\x83\x08\x58\x9a\xec\x29\x1c\x0b\x25\x31\xc1\xb6\xf5\x9e\xf4\x3c\x7d\x4f\x38\xcc\x84\x71\x73\xbf\x9d\xbf\xbb\x7b\x41\x6e\xc0\x29\xf2\x78\xbd\xa2\xc7\x3a\x11\x5f\x74\xed\x75\x77\xdb\x5a\x3b\xb9\x47\x36\x1c\xc9\x8a\x88\x80\x96\x4c\x32\xd4\x18\x17\x6b\xb1\xc6\x3a\x9e\x16\x05\x18\x33\xa2\x12\xb1\x82\xa5\x46\x34\x96\x59\x4f\xf4\x54\x1e\x60\x91\x72\xb9\xc4\x13\xec\xb6\x9b\x9b\x1b\x53\x76\xf5\xa8\x9e\x6f\xd9\x96\x99\x77\xfd\x93\x2b\x67\xdd\x28\x70\x68\xfc\x85\x39\x1f\x6c\xfc\xf6\x46\xb1\xf2\x9d\xeb\x17\x4d\x6e\x99\x6c\x02\x4f\x56\xb0\xa7\x01\x60\x02\x32\xd2\x4d\x5f\xb0\x1c\xd7\xd6\xa1\x4d\xfa\x7a\x6c\x5b\xaa\xe9\xb8\x8c\xa5\x61\x32\x90\x78\xc1\xf7\x4c\x47\x55\xfd\xe7\xab\xa0\x1b\x61\xb5\xfd\xfe\xa4\x94\xf4\x6e\xa7\x73\x4f\x6a\xf3\xb8\xe9\x58\xf8\x68\x7b\xdc\x21\xa5\x71\x9f\x3b\xc3\x56\x14\xea\x37\xdd\xb9\x94\xe4\x95\x38\x0a\xb2\xb6\x49\x11\x30\x32\x03\x41\x72\x00\x66\x04\x1c\x45\x3e\x61\x91\x16\x27\xba\x1e\xd6\xa0\xa4\xba\xa2\xcf\x78\x58\xa0\x1c\x49\x34\xd5\x08\x27\x06\x55\xed\xbe\xb0\xf1\xa0\xb7\x62\xec\xee\x33\x9d\xd6\xa6\x9e\x35\xfa\x1f\xd9\xff\xe0\x5e\x81\xc9\xef\xf7\x68\x7b\xd4\xfc\x70\x6a\xb1\x31\x2d\x33\x4f\x15\x9e\x18\x4c\x22\x84\x1c\xc3\xb0\x84\x2d\x50\x36\xa9\x68\xa4\x29\x0a\x94\xc0\xc5\x66\x6c\x0b\x71\xac\xc8\x4a\x44\x05\x91\xae\x44\x1a\x43\x32\xbe\xed\x41\x1e\x69\x4e\xe2\xfc\x3c\xb9\x44\xb6\xd7\xc8\x01\x27\x7e\x7e\x42\x7e\x58\xf0\xad\xb2\xdb\x46\xe4\x1c\x7d\xb3\xc1\x86\x7a\xec\x8c\xc3\x75\x4f\xb7\xfb\x75\x56\x94\xf9\xdd\xf6\xc4\x43\x17\xca\xa2\xe2\x98\x94\x28\x8b\xb6\x59\x87\x90\x75\xd7\x57\x2c\x6c\x20\x40\x84\x32\xc5\x91\xaa\x4b\xb9\x51\x8c\x7d\xa0\x1b\x72\x00\x71\x10\x85\x7a\x02\x3e\xcc\x2f\xaf\x4c\xb1\xa7\x6d\x98\x56\x41\xa9\x36\xbf\x33\x62\xd3\xe6\x16\x27\x8f\x0c\x3b\xb4\x8a\x2b\xbc\x95\x96\xce\xf5\x68\xd1\x23\xf3\xb2\x0a\x89\x37\xae\x45\x4a\xc5\xba\x2f\x4a\x4a\xc4\x43\xd9\x64\x4d\xcd\x0c\x29\x36\x56\x1d\x0a\xbb\x6a\x28\x03\x83\x26\x0d\x11\x93\x66\x84\x21\xa7\x13\x91\x6c\x6b\x7f\x95\x14\xff\x96\xea\xf8\xa7\xf9\x75\x6a\x4a\xb6\x2c\x15\x07\x3c\x8b\x2d\xac\xd1\x77\x38\xac\x3f\xee\x3c\xf8\xfa\xea\x8f\x0d\x9a\xa7\x0d\x2c\x21\x37\x1a\x5a\x64\xf6\xb2\xdc\xdf\xf0\xb5\x89\x8e\x65\x1f\x1f\xcf\x9d\x5c\x7b\xe2\x2c\x16\xa9\x02\x27\x32\x40\x62\x28\x46\xa7\x7d\x83\x63\x22\x4e\x36\x54\x14\x2a\x96\x6d\xd8\x88\xe5\x45\x55\x43\x86\x2a\xe9\x5c\x68\x39\x92\xa3\x64\x20\x84\x74\x67\xdb\xf6\x1a\xe9\xe5\x3f\x2c\xbb\xea\xe6\x1f\xd4\x99\xb6\x6d\x8f\x56\xe0\x16\x7d\x9f\x5e\x2f\x2f\xbb\xae\x42\xfd\xeb\x8d\xcc\xc2\x35\x93\x9b\x72\x65\x4d\x32\x35\x9f\x50\x80\xae\x7a\x40\x75\x02\xe0\xe9\x06\x0b\x90\xc5\x70\x50\xc0\x12\xa1\x50\x41\xe8\x81\x48\x52\x2c\x97\x56\x0c\x3e\x36\x51\x24\x66\xb0\x91\x50\xb2\xd7\xa9\x0a\x6f\x7e\xdd\xb9\xe1\xdc\x63\x79\xcd\x6f\x77\x6e\xa8\x25\x7e\xd8\x78\x92\xbf\xbb\x24\xf5\xc3\x07\xed\xce\xf6\x1d\x79\x27\xc9\x2c\x38\x01\x03\xf9\x80\x50\x54\x80\x22\xcf\xb1\x19\x28\x46\x9e\x83\xfd\x50\xa4\xa1\xce\x4b\x0e\x60\x25\x8a\x03\x0a\xa0\x0c\x01\x12\x11\xf4\x31\x41\x9a\x89\x8f\x5d\xff\xc0\x88\xfd\x25\x57\xbf\x73\xef\xec\xe2\x46\x27\xee\xec\x2c\x35\x75\xed\xc7\x35\x4a\xbd\x3a\xbc\x4f\xe1\xcf\xd6\x17\xff\x7d\x1d\xfc\x7e\x57\x72\x8d\x84\x47\xd8\x8f\x04\x8e\xf4\x4c\x51\x55\x0d\x29\x54\x88\x98\x54\xad\x98\xd7\xec\x20\x12\x24\xcb\xe7\x4d\x9f\x13\x91\x17\xc4\xbc\x21\x1a\x9e\xe1\xf3\xce\x5f\x64\xd4\x83\x72\xfe\x77\xe0\x8c\xd4\x46\x03\x72\xbf\xf7\xf1\x33\x21\x0a\x9e\x68\x75\x31\xdb\xb8\xce\x9d\x7f\x69\xdc\x51\x3e\x57\xa1\x57\xf3\x6f\xbf\x3b\x93\x67\x76\xf1\x57\xd6\x64\x69\x39\xf9\xe9\x11\x63\x7a\xe6\xd5\x0c\x12\x63\xcd\x5d\x95\xa5\x0c\x43\x25\x30\x20\x3d\x10\x21\x07\x59\x40\x66\x4c\xd5\xe5\x34\xd7\x67\x82\x80\x41\xa4\x1a\x51\x94\x66\x2a\xb6\x67\xd9\x02\xe2\x1c\xeb\xf9\xcb\x1a\x1e\x7a\x6b\xd2\x96\x36\xb9\x96\xed\x1b\x90\xeb\x9b\xa2\x65\x7f\xbb\xd0\x64\xbe\x59\xbf\xdf\xc7\xfd\x07\x95\xdd\x7b\x21\x37\x4c\x9b\x53\x21\xc9\x6b\xb0\x31\x66\x10\xe5\x18\x40\x52\x80\x65\xa8\xa2\x47\x38\xa2\x18\x23\xe8\x33\x0e\x2f\x73\x01\x44\x91\x0b\x45\x86\x0d\x34\x43\x53\xe5\x48\x22\x39\xcf\x48\x8c\xb0\x4d\x3b\x73\xa7\x5d\xb9\xf6\x3b\xaf\x08\xbf\xa1\x7e\x5d\x5f\x3d\x72\xef\xe6\xba\xbd\xc2\xc8\x0f\x4e\xa4\x54\xbe\xfa\xa8\xf0\xdd\x4a\x53\x33\xef\x05\x09\x23\xab\xc7\x6b\x5e\x1c\x33\x9c\x16\xeb\x92\xac\xa8\x1a\x29\x47\x58\xa1\x22\x96\x64\x31\xd0\x01\x6d\x5b\x5a\xa0\x18\x9a\x09\xdc\x18\x84\x86\xa9\x48\x50\xc9\x80\xde\xb4\xd5\x85\x5b\x4d\x9e\x34\x69\xdb\xed\xdd\xf9\xed\xd2\x26\x96\x16\x2f\xbd\xbc\x78\xed\xf1\x9b\x4b\x37\xff\x51\x85\x1d\x9f\x75\xc6\xf8\x27\x59\x93\xeb\xbc\x04\x8d\x2c\x59\x14\x39\xd9\x32\x62\x26\xd0\x44\x52\x17\x90\xc8\x73\x16\x64\x3d\x4b\x20\x15\x12\x42\x12\x61\x05\x98\x3a\x47\x9a\x06\x92\x48\xc1\xf9\x8b\xf9\xf3\xab\x5c\xff\xdd\x6c\x27\x35\x65\x60\xd6\xea\xff\x2b\x9d\xf8\xd7\x5b\x7e\xf2\xd0\xd9\xfc\x38\x3c\xbd\xf2\xf7\x26\x3f\x97\x7f\xa7\xe2\xa2\x8b\xaf\x15\xbf\xb7\x5b\xb0\xcb\xdd\x49\xbb\xd7\x6f\xd8\x17\x97\x8c\xcc\x8f\xde\x12\x03\x51\x58\xcc\xdb\x58\xb4\x9d\x50\x05\xd8\xf5\x89\x98\x60\x20\x94\x91\x4e\x4a\x82\x25\x05\xae\x4e\x43\x87\xa6\x62\x5d\x64\x3d\x8f\x82\x04\x32\x4c\x41\x4d\x1c\xa2\xba\x9d\x18\x52\xf2\xc0\xb4\x3e\x43\x7e\x17\x8f\x8e\x2c\xf2\xba\xab\x76\x1e\xd6\xf0\x93\xe6\x5d\x19\xee\x52\xf3\x06\x8b\x7f\xcf\xfd\x71\xe6\xf9\x4d\x13\xef\x7a\xd9\xb4\xe7\x78\x8e\x62\x73\x86\xc5\x93\xd8\xe4\x15\x4d\xd5\x2c\xe0\xe3\x80\x56\x45\x85\xe4\x7d\x9e\x53\xa1\x25\x1a\x06\x61\x3a\x80\x8e\x2d\x3a\xd6\x13\xe7\xb1\x85\x30\x97\x54\xbe\xdd\xd1\xcf\x9a\xdc\xef\x9a\x63\xd6\xcd\x56\x6d\xc6\x94\x28\xb6\xb5\x59\xfe\xee\x6d\xbb\xac\x1f\x64\x6c\x65\x7f\x38\x97\xe4\xae\xa7\xc0\x71\x48\xc6\x1e\x2f\xf2\x2e\x70\x35\x48\x58\x58\x34\x75\x99\x12\x4c\x95\xe5\x2c\x26\x96\x3c\x2b\x12\x81\x4a\xc9\x9a\x4b\x62\x52\xf7\xcc\x28\x03\xb4\x52\xd3\x55\x53\xaf\x16\xdd\xac\x81\x79\xd5\x7b\x57\x7b\xe3\x95\x80\x29\xd6\xa1\xf4\x9c\xc6\xcd\x1f\x2e\x7a\xb8\xe9\xed\xde\x53\x5a\xbd\x72\x22\xb9\xc7\xb6\x75\x52\x14\x34\xc5\xc0\x92\x00\x81\x18\xb9\x20\x72\x03\x8b\x24\x23\x07\xb3\x34\xa5\x51\x66\x84\x64\x1e\xb2\x88\xa3\x48\x11\xc8\x58\x72\xa5\x8c\x36\xeb\xae\x8a\x33\x8a\x54\x7a\x7a\xfc\x2b\x2b\xe5\x68\xe3\xb2\x43\x6f\x5e\x11\xdb\xa8\x29\x67\x86\x36\x76\xb2\x75\x6c\x5a\x67\x47\xe1\x13\x49\x56\xca\x8a\x44\x22\x34\x3d\x0f\xc5\x90\x84\xae\x1d\x6a\x32\xb2\x0c\xcb\xd4\xa2\x08\x41\x59\x27\x54\x5f\xd5\x28\xd2\xd4\x1c\x26\x66\x7c\x56\x30\x39\xc5\x46\x7f\x6d\xd1\xfe\x7b\x5b\xe4\x9f\x9a\x2d\xa9\x8d\xf6\x64\xfb\x0f\xf1\xb5\x23\x71\xab\x0e\xdd\x1b\x1f\xca\xbb\xbd\xe8\x2b\x29\xef\x1d\x1c\xf7\xf6\x93\xd7\x2e\x1e\x3d\x04\x96\x64\xab\x54\xf8\xd8\x8c\x3c\xf7\xb6\x64\x7e\xe7\x36\xf1\xb0\xd3\x22\x28\xdf\xe3\x6d\x03\xf3\x88\x0c\x22\x52\x0a\x4c\x29\x8e\xbc\x48\x8f\x68\x01\x72\x91\xc1\x9a\x82\xa0\x49\xa4\xab\x48\x04\x4d\x49\x90\xc4\x7c\x06\xfb\x0b\x8f\x6b\x3e\x6d\xdc\x54\x1f\xf8\x53\x56\x6b\x99\xfe\xb1\xc5\x95\xff\x89\x7a\x58\xdd\xde\xf0\x9b\x79\xed\xf3\xf4\x8a\x6d\x2f\x8c\xab\x9d\x64\x10\xb4\x63\x6b\xba\x2f\xb2\x2e\xa7\xa9\x2e\xb2\x18\x16\x20\x36\x86\xb2\x4e\x45\xb2\x4e\xd8\x92\x03\x88\xc0\x92\x7d\x99\x51\xb1\x1e\x69\xac\x20\xc7\x28\x83\x1d\xd3\xae\x4d\x1e\xa6\x1f\x1b\x94\xbb\xe4\xcf\x5f\x96\xff\xaa\xdf\xe2\xf1\x69\x2b\xd2\x7e\xde\x75\xfa\xdc\x17\xf7\xef\x15\x19\xb4\x69\xdb\x8f\x97\x93\x4b\x50\xcc\x39\xaa\xa3\x51\x94\x4e\x9a\x16\x2d\x12\xd0\x16\x75\x91\xf6\x63\x28\xc7\xae\xee\x71\x8e\x25\x3b\x8e\xc3\x13\x16\x04\x3a\xf4\x6d\x2c\x86\xb1\xaf\x12\x41\xe2\x63\x17\x4c\xb1\x5f\x9a\x9f\xad\xce\x77\xc2\xea\x42\x63\xf9\x13\x77\xd3\xaf\x94\x9f\xde\x7d\xeb\xf1\x75\x4e\xc1\xad\xf9\xa8\x2a\xe3\x47\x25\x97\xd6\x81\xb3\x59\xce\xa7\x91\x1b\x23\x57\xc0\x3a\xa6\x65\xc9\x80\xae\xa8\xe9\x8a\x42\x53\xa2\x6d\x8b\x5a\x48\x21\xca\xc5\x5a\x20\x19\x96\x20\x62\x97\xfa\x3f\xa9\xbb\xff\x3d\xf6\x9d\xdc\xff\x5d\x47\x2e\xb5\xd1\x80\x15\x2f\x3f\x9b\xca\xa6\x44\x27\x8f\xfc\xd2\xb7\xdf\x90\xfc\xb9\x56\x9d\xdc\xf7\xe3\xee\x85\x2b\xcb\x2c\xad\xd5\xe8\x48\xae\x07\xb9\x3e\x98\xff\xe9\x9c\xc7\xa5\xb2\x24\x19\xa4\xce\xf9\x36\xf4\x44\xac\x7b\x91\x26\xd1\x34\x67\x62\x81\x8f\x0d\x14\xdb\x0e\xa1\xd1\x3c\x43\x92\x94\x16\x99\xb4\x45\x9a\x52\x00\x78\xc7\x11\x45\x35\x03\x19\xc2\xfe\x0d\xf7\xf7\xc9\xbe\xb1\xe8\xec\x6e\xcb\x1f\x64\x9f\x73\x2c\x5d\x58\xd5\xbe\xcf\x89\xc7\xd6\xc8\xf2\x7b\x4b\x88\xc4\x2f\x13\x5b\x5c\x4f\xf2\x25\x41\x62\x00\xe9\x6a\x31\x49\x88\x94\x6d\xca\xb4\xc8\x02\xe4\xc9\x92\xec\xeb\xb1\xa7\x62\x1d\x84\x94\xc6\x02\x2b\x96\x54\xc6\x92\x05\x4c\x30\x5e\xac\x26\x1e\x76\x14\x7e\xff\x73\xb5\x78\x8d\x2d\x6f\x94\xe8\x3d\xad\xd7\x6f\xb5\xbf\xab\xa5\x07\xb3\xef\x96\xdf\x52\x1f\x4c\xbb\x15\x9f\x58\xfe\x62\xcd\xcc\x53\x23\x25\xac\xea\x10\x43\x07\x26\x89\x08\x0c\x18\x8b\xa4\xb1\xe0\xd0\x1e\x74\x7c\x1d\x22\x1a\x19\xba\x1b\xeb\x98\x8c\xb0\x45\x78\x36\xe1\xf9\xa6\xe8\x9a\x9c\xf7\x37\x62\xd2\xff\x7f\xe4\xba\x25\x66\xdc\x6c\x95\x9b\x94\xfa\x31\x39\x53\x3e\x28\x63\xcf\x98\xf7\x88\xbe\x7a\xa8\x80\x32\x77\xcb\xac\x01\x1f\x3c\x9a\xba\x30\xf3\x42\x0c\x89\x79\xe0\xc2\x90\xf5\x42\x59\xa6\x29\x8e\xc4\x74\x2c\x99\xaa\x81\x58\xd9\x73\x39\x45\x06\x4c\xe0\x09\x0c\x0f\x63\x28\x30\x8e\x17\xfe\xcf\xed\x12\x90\x96\x6b\x25\x36\x90\xa1\xbd\x0a\xcf\x6b\xdb\xb5\x6a\xbf\xaa\x3f\xac\xbf\xd0\x44\xce\xfe\x52\xd7\xcf\xd7\x7a\xbf\xe7\xad\xd7\xf5\xb5\xad\x79\xc6\x29\xc7\x16\xcf\x49\xae\xf3\x9a\x02\xab\x72\x54\x88\x54\x5e\xb7\x28\x9f\x97\x19\x3b\xd6\x49\x9b\x11\xa0\x0f\x03\x1c\xba\x8e\x6a\xaa\x2c\x0f\x79\x4a\xd5\x34\xd2\x09\x64\xc3\xe1\x32\xb8\xfc\x76\x1b\xbc\x6d\xe3\xfe\xd1\x27\xd7\x2c\xaf\x76\x73\xcb\x1e\xb9\xd1\xde\x37\x6e\xe5\xd9\xf6\xe6\xbe\x06\x97\x1f\x37\xee\xb5\x3c\x0f\xf1\x65\xe6\xd7\x02\x12\x6b\x2e\x6b\x32\x1d\xf3\x2e\x2f\xc9\x32\x60\x38\xe4\x99\x31\x69\x6a\xbc\x40\x48\xa1\x1b\x0a\x8c\x8c\x38\x06\x49\x66\x68\x4a\x0a\x00\x82\xa0\xfb\x06\xad\xfe\xb5\xa1\x36\x3f\xcf\x7f\xd7\x20\x4f\x6d\x34\xe9\xcd\xff\x28\x9f\xd7\xd4\x6d\x09\xa8\xd1\x46\x9e\xb2\x87\x16\x7a\xf7\x3f\x6f\x33\xdd\x78\x70\x90\x7f\xdc\xfb\x81\xd4\xe0\xd2\x86\x99\xb3\x4e\x6d\x3b\x94\x5c\xe7\x45\x16\x14\x74\x12\x40\x4a\xa7\x2c\x85\xb2\x74\x8c\x00\xe6\x62\x3f\xe6\x45\xcc\x87\xac\x16\x39\xae\x06\x1d\x2a\xb2\x75\x87\x30\x62\x42\x57\x29\x25\x03\xa2\x8e\xaf\xcb\xa6\xdd\x32\xd3\xae\x54\x7b\x31\xd6\xb7\xbd\xea\x9f\xb5\x2b\xec\x98\xbd\x73\xeb\xad\xa9\xf9\x66\x2c\xe8\x38\x77\xe3\x2b\xf3\x92\xdb\x2a\xe7\x02\x35\xd6\x19\x8d\x8a\xf4\x50\xb4\x48\x83\xd3\x69\xc4\xfb\x1a\x81\xe3\xd8\x62\x03\x8d\xa2\x34\x81\x37\x5d\x1a\x63\xe0\xbb\x8c\xcd\xf8\x84\x65\xff\x4b\x05\xf8\x59\xe7\x3d\xff\xe8\xc3\xe2\x7b\xee\x0c\xcd\xf1\xc9\xdc\x8f\xa6\x55\x9a\xd2\x34\x7f\xa5\x43\xbd\x7e\x1e\x35\x39\xfb\x84\x97\x36\xc2\xf7\x0b\x15\xf0\x93\x2c\x71\x87\x08\x45\x37\x08\x4d\xb7\x41\x10\xaa\xa4\xc6\x44\xc0\xf5\x59\x0d\x02\xd1\xe2\x44\x56\x41\x61\x18\xa8\x38\x22\x1d\xc4\xc3\x40\x08\x43\xc9\x88\x9c\x0c\xa4\xa6\x2e\x31\xdb\xdf\x55\xf0\xf9\xad\x97\x37\x2e\x29\xaf\x6c\x83\x17\xce\x0d\xe7\x2a\x14\xdb\x31\xa7\x7b\xa9\x22\xd3\x7a\xb2\xb5\xc7\xad\x49\x72\x87\x5f\x8c\x65\x5e\xf3\x2d\x4a\xd4\x38\xd5\xd7\x29\x6c\x28\x04\x43\x0b\x06\xa1\x4a\x14\x43\xf8\xa4\xe5\x04\x91\xae\x29\xa2\x65\x00\x2a\xa4\x2d\x17\x22\x32\xf1\xb1\xe5\x6c\x27\x57\xf5\x1f\x3e\xab\xc1\x6b\x5a\x8f\x4d\xef\x66\xa7\xb4\x59\xf9\x8a\x7d\xb3\xbf\xdd\xdd\x45\xd9\x2a\xe6\x3d\x71\xe3\x8f\xdb\x99\x97\x24\xc9\x40\xc2\x9b\x32\x90\xab\xb9\x31\x69\x85\xa4\x65\x11\x9a\xe7\x63\x07\x2b\x1e\xc5\xd1\x40\x53\xe9\x58\xb2\x03\xc9\x16\x03\x95\xd1\x1d\x93\x06\xa6\x27\x71\x52\x62\xbb\x5e\xb2\xf2\xc6\xc9\xbe\x15\x7b\x3f\xa8\xce\xed\xfb\xb3\x68\x23\xeb\xe1\xe0\x6e\x13\x6b\x54\xfb\x03\x5f\x5c\xba\xbe\xf3\x8e\x5e\xf5\xf7\x64\x1e\x9e\x91\xd8\xae\x39\x5f\x74\xd5\x38\x60\x78\x42\xe7\x5c\x17\x23\x04\x58\x5f\xf4\x49\x8f\x85\x2c\x8a\x78\xda\xa1\xfd\x30\x70\x49\x8b\x05\xa2\x6c\xb1\xd0\x46\x51\x02\xac\xc3\xf9\xc1\x6f\x3e\x59\x31\x20\x7d\x56\x5a\xb3\xfc\x0b\x66\x54\x2f\x34\xad\x3d\x2a\x91\x3d\x4b\xfe\x8f\xe6\xa4\x57\x6a\xdd\xaf\x4a\x1c\xb4\x4d\xee\x97\x8e\x38\x0b\x47\x94\x64\x59\x4e\x40\x33\xb6\xa5\xd0\x26\xc3\x39\xae\xcd\x62\x5a\x54\x54\x8a\x00\x84\x1a\x91\xb4\x00\x03\x40\xd2\x26\xa7\x61\x17\x13\x7f\x15\xc2\x8f\x6a\xfe\x1f\xb3\x43\x31\x70\xa2\x79\x99\x77\x9a\x46\x57\xef\xd6\x1b\x7b\xab\xef\x27\x8b\xf6\x2c\xd9\xb1\x76\x65\x81\xb3\xf9\x8b\xaf\x19\x55\x6e\xf5\xf5\x37\x52\x53\xd2\x83\xf4\xa7\x93\x8b\x3d\xf3\x67\x66\xf5\x5d\x9d\xb5\x9d\xff\xf1\xa6\x49\x8b\x1a\xcf\xfc\x6e\xc7\x82\x4f\x7a\xcd\x1b\xbe\xe1\x58\xae\x3e\x1d\xb2\x6f\x9a\xb9\xa6\xf7\x97\x25\x92\x4c\xd0\xcb\x31\x36\x19\x40\x3f\x08\x14\xdd\x61\x20\xaf\xf9\x90\x22\x75\x8a\xb7\x4c\x9a\x35\x45\x86\x82\x40\x24\x91\x06\x31\x86\x28\x66\x35\x5d\xc1\x92\xa0\x3f\xff\x67\x6e\xee\x5c\xf9\xdd\xf0\x0f\x27\x8c\xf4\xe8\x0b\xc5\x0f\x56\xcb\x91\xaf\xf8\xa8\x85\x5b\xec\x4f\x73\x75\xff\xad\xc6\xbd\x69\x4f\x77\x4c\xcf\xfc\x36\x54\x62\x36\x23\x95\xa5\xfd\x40\x71\x0d\x4d\xf4\x62\xcf\x60\x1c\x5f\xb3\x65\xc3\x45\x88\x54\x5c\x5d\xa0\x75\x9d\xa6\x59\x0e\x72\xbc\x6f\x13\x3c\xeb\x9a\xb4\xc1\x33\x19\xcc\x79\x0f\x34\xc9\x71\xab\xe1\xe5\x75\xf7\x7b\x2d\x3c\x73\x52\x5b\xd7\x39\x5f\x97\x89\x9d\xfd\xbd\x67\x88\x32\x63\xa6\xf7\x7e\xad\xf7\x82\xbe\xf2\x33\x8e\x3e\x2c\x77\xb3\x97\xe7\x1e\xec\xf8\xeb\x25\xe2\xc4\xe2\x1f\x0a\x0c\xdf\x3b\xf1\x68\x8f\x13\xbf\x78\x59\xab\xe4\xaf\xdc\xcf\x7d\xa1\x44\xf9\x91\xc9\xad\x89\x0c\xd7\x51\x03\x8d\x56\x60\xc4\x69\x32\xd6\x43\x9f\x27\x2c\x40\x38\x52\x48\x84\xa1\x66\xb8\x11\xaf\x7b\x34\x2f\xa1\x90\xd6\xa0\x6a\x02\x44\x04\x6e\x9c\x18\x87\x55\x23\xb6\xe9\x23\xc4\xc1\xcd\x1f\xcd\xbb\xf4\xc9\xea\x52\x29\xbb\x5f\xde\xff\xdb\x05\x5f\xce\x35\xaa\xdb\x0f\x15\x1a\xfa\xe4\xf8\x5e\xc9\x35\xa7\xd8\xa3\x30\x66\x68\x43\x08\x3d\x42\x30\xb1\xab\x04\x66\x64\xaa\x2e\xed\xdb\x82\xae\x7a\x4c\xe4\xfc\xef\xec\x91\x61\x49\x99\xa6\x02\xca\xf5\x49\x31\xc1\x22\x52\xeb\x49\x05\x1a\xcf\xfc\xf5\xbd\x31\x2b\xf4\x01\x65\x6f\x14\xb5\x1f\xd6\x2f\x2a\x49\xc3\x77\xaa\x72\xff\x37\xb6\x2f\xa9\x54\xb2\x93\x93\x64\xc2\x37\xc6\xf4\x63\xda\x93\x34\x93\x46\x21\xa3\xdb\xa1\xeb\x51\xb6\x88\x22\x60\xc7\xb4\xc0\xc3\xc8\x76\x28\x33\x88\x6c\x55\x02\x2a\xa4\x4d\xda\xf2\x90\xf9\xfc\xd0\x74\x59\x8e\xf6\x05\x6f\xce\x19\x3c\xfd\x28\xea\x1b\x4c\xb8\x5e\xa3\xd3\xae\x55\x8f\xd7\xce\xbb\xbc\xf3\x1b\xba\xd3\x9f\x7d\xe6\x35\x1f\x9c\x5c\x1c\x16\x6f\x42\x8f\xc4\x98\xb2\x43\xd5\xc7\x4c\x64\x2a\x40\x90\x69\x92\x81\x0c\x25\x18\x3a\x65\x28\x21\x15\x0b\xa2\xee\xeb\x82\xcf\xba\x04\xa7\xc8\x36\xc9\xe9\x89\x2b\xcf\x45\x39\xa7\xfd\xbc\x00\xb7\x2d\xb0\xf6\xcb\x0e\xab\xf3\x2c\x48\xbb\x7f\xe1\x8b\x2e\x0d\x7f\x1f\xe0\x7c\xb6\xe4\xe4\x88\x95\xa7\xb3\x4d\x5b\x9a\xdc\x9c\xcb\x21\x97\x50\x11\x03\x24\x07\x71\x00\x04\x8a\x21\x9b\x3c\x03\x48\x26\xb6\xb5\x20\x44\x14\xa0\x38\x4e\xc0\x5c\x48\x09\x52\x6c\x72\x81\x47\x63\x4f\xc8\x00\x85\x92\xe7\xf7\xa6\xf4\xa2\x56\x0d\x8f\xfd\x52\xe1\x9e\x64\xa7\xd7\x8b\x6b\x7c\x7d\xff\x83\x01\x29\x4e\xef\xb1\x55\x77\x54\xea\xb5\xa3\xf0\x8b\xcf\x3e\xfd\x41\xf7\x19\x69\x6a\x8e\x22\xbf\x7e\xb5\xab\xe8\xa6\x99\x2d\x3e\x5c\xd7\x9c\x3e\x7a\xb1\xc9\xb5\x17\x3b\xae\xac\x78\xed\xeb\x12\x8d\x5e\x06\xcf\x84\xdf\xfe\x07\x8e\xb6\x78\x5c\x55\x29\xb7\xa2\xc4\x83\x2b\xcb\x6b\x5a\x60\x65\xf9\x7a\x79\x7f\xe7\xfe\x3c\x23\xe6\xf9\xa6\xfa\xda\x3e\xb9\x33\xef\xe6\x09\xff\xa4\x83\x31\x88\x59\x4e\xe4\x44\x40\x07\xae\x29\x30\x1a\xb2\x59\x89\x65\x6c\x43\x0e\x28\x06\x31\x08\x72\x0e\x8c\x79\x4a\xe5\x60\x14\x4b\xa6\x84\xe2\x04\xac\xdd\x9f\xae\x2d\xb7\xf5\xd7\x0e\x95\x57\x2c\xee\x3a\xbc\x90\xf6\xb8\xda\xfd\x15\x27\x46\xcf\xee\xe3\x8d\x0b\x47\xff\xfe\xe2\x99\x26\x3d\x6f\x3c\x4c\xee\xfd\x41\x14\x54\x82\x62\x34\xc7\x40\xb6\x4c\x69\x8c\x1c\x1a\x9c\xe0\x07\x92\x63\x79\x9e\xc2\xb9\x8c\xad\x45\x82\xcc\x32\x40\xa5\x69\x52\xa6\x39\x18\xdb\xfa\xdf\x47\xdf\x7f\xff\x2f\x27\x70\x64\x6c\xcd\xf2\x9d\x50\xb2\xc8\x96\x12\x17\x0e\x0f\x1a\xbd\xe9\xc0\xc4\xcd\x23\xde\x68\xd8\xe0\x55\xe7\xfd\xd2\x33\xff\xbc\xd5\xee\xd9\xa7\x7f\xce\x7e\xae\x6c\xc3\x9c\xad\x2a\xbd\xd5\x6a\xe6\xa7\x8e\xff\xc1\x9a\x7d\xe5\xd3\x7f\x9d\x3c\xb5\x7b\xda\xaa\xb7\x4f\xf5\xdd\x51\xd6\x99\xf5\x8c\x61\xef\x2f\xb5\x22\xa5\xc0\xe5\x02\xbf\xda\xd5\x47\xe6\x39\x3d\xe0\xb3\x0f\xa7\x37\x3e\x2c\x9d\xff\xfa\x2e\x3f\x61\xcd\xb2\x6f\x06\xf5\xda\x34\x34\xb9\xc1\xda\x57\x35\x24\x89\xa4\xed\xf3\x3c\x1d\xb8\xb4\x66\xb9\x22\x11\x01\x1b\x92\x91\xcb\x22\x47\x05\x72\x08\x22\x23\x88\x38\x27\x92\x0c\xc1\x56\x23\x2f\xd2\x12\x07\xeb\x06\x2f\xac\xde\xf8\x43\xbe\x6e\x9d\xf7\xe9\x0d\xd6\x16\x39\x9e\xfb\xb7\xce\x79\x5e\x28\x50\xe3\xca\xf5\x8f\x5e\x3e\x72\xe5\x97\xce\xb3\x7b\x64\x5e\x0c\x24\x31\x88\x81\xe6\x00\x27\x53\x3c\x65\xea\x8a\x43\xb8\x58\x87\xd8\x76\x45\x99\x63\x0c\x00\x2d\x8f\x8d\x20\x1f\x21\xda\xe2\x62\xc9\x91\x09\x0c\x68\x1b\x09\x09\xf8\xd7\x3b\x6c\xec\xfe\x78\xe8\xe2\x29\xf3\x5a\xd4\x59\x7b\xe7\xcf\x0f\x3a\x9f\xeb\x31\x58\x1a\xd9\xec\x6b\x9f\x1f\x2b\x77\x38\x59\x3b\xd7\x17\xfb\x93\x9b\x5f\x44\xc0\x31\x61\xa8\x6a\x90\x27\x39\xd2\xd3\x3d\x1d\x69\x9a\x87\x30\x25\x38\x30\x02\xa2\x19\xa8\x34\xe0\x18\x4b\x71\x78\x9d\x20\x5d\xd6\x44\xe6\xbf\x38\x1a\x9e\xcd\x2f\x5d\xd2\xde\x7a\x7b\xee\xf8\x94\x81\x87\x2a\x35\x5d\xd5\xfc\xd1\x81\x83\x65\x9a\x0d\x6d\x91\x65\x6c\x77\xb2\xc1\x94\x5c\x2f\xde\x3f\x3f\xbf\x78\x92\x97\xa8\xa2\x38\x22\xcd\x40\xd0\x49\x28\x53\xfa\xff\xb8\xbb\x21\x3b\xbe\x25\xa8\x98\x57\x09\x01\xf8\x4a\x44\xb0\x86\x40\x18\x24\x14\xa4\x28\xa4\x43\x85\x84\x89\xbb\x1b\x2d\x16\xd8\x17\xde\x98\x30\x67\x6a\x9e\x39\x39\x7e\x69\x69\x0c\x9e\xf3\x4e\xb1\x1d\x57\x56\xb6\x9a\x3b\x77\xc7\xf6\x2e\x47\xe7\xa9\xa3\xf8\xe4\x06\x6b\x1c\x4a\x96\x69\x88\xac\x69\x47\x24\xa3\x6b\x32\x70\x03\xca\x67\x48\xc6\x37\x22\x82\x55\xa0\x28\x06\xae\xca\x68\x14\xd0\x2d\x23\x70\x44\x3e\xb0\x84\x0c\xd4\x31\x3b\x34\x3a\xfe\x72\xeb\xfa\xcd\xa6\x5f\xfe\x72\xc4\x55\x71\xde\x67\x6b\x1f\xe4\x9a\x8b\x86\x10\x63\x2f\xdc\x1b\xa1\xd9\xbf\x74\x79\x2f\xf3\x0c\x9d\x09\x0d\x84\xf7\xe9\x58\x0b\x05\xa8\xbb\xb4\x89\xb1\x47\x62\x89\x63\x6d\x00\x2d\x9b\x50\x03\xd7\x0f\x74\xde\x10\x09\xd2\xd2\x43\x1f\xd1\xaa\x27\xeb\x2e\xab\x25\xe0\x69\xe8\x72\xe8\xe2\xcc\x4f\x87\x34\xac\x4e\x95\x7a\x61\x61\xcd\xc5\x3b\xb2\xff\x78\xe6\xdd\x87\x1f\x36\x7f\xf7\xf2\xd9\x5d\x0f\x5a\xee\xdb\xd4\x23\xf3\x25\x78\x62\xac\xaf\x12\x02\x5b\xc1\x91\x1d\x07\x3e\x2b\x32\x21\xf0\x84\x90\x95\x29\x23\x74\x50\xa4\x29\x8a\x4f\x73\xb1\x2b\xd0\x02\xe1\x84\xb2\x82\x19\xe4\x93\x7c\x46\x01\x75\x06\x3c\x41\xf7\xed\xd5\xa9\xde\xde\xee\x93\x4b\xd6\x9e\x93\xeb\xd3\x3f\x4f\x1f\xa8\x1f\x55\xdd\x3a\xa6\xc0\xea\x1c\x05\x85\x82\x8f\x16\x3f\xf3\x5f\xaa\xb5\x38\x3f\x79\xc4\xbe\x0d\x87\xae\xbd\xb7\xb8\x61\xb3\xe5\x9f\x64\x3f\x4e\xb1\x65\x36\x0e\x6a\x79\x74\xe0\x8e\x6c\x27\x8f\xec\xbf\xce\x24\x19\xa0\x2f\xea\x3e\x88\x58\x4d\xa6\x14\x8f\xb5\x69\x89\x14\x3c\x5e\x35\xd8\xd8\x12\xb0\x82\x19\x55\x15\x29\x8a\x74\x3d\xd2\x31\xb0\x47\x43\x91\xe4\x58\x97\x7e\x3e\xd1\xd1\x1b\xf9\x77\xea\xb5\x6c\x00\x6e\xd4\x39\xb4\xac\xf5\xf6\x19\xb9\x2a\xae\x1c\x7d\xa8\xc6\x8d\xcd\xd3\x2b\xe6\x4c\x1b\xbf\xe4\x71\x87\x24\xab\x96\xb2\x08\xa9\x2e\x90\xa1\xaa\x44\xbc\x4b\xc8\x3a\x12\x2d\x03\x5b\x7a\xa4\x2a\x9a\x20\x84\x94\x66\xe2\xd0\xe6\x05\x31\x12\x58\x52\x92\x6d\x47\xe5\xe3\x0c\xda\x92\x13\x4f\x5f\x39\x35\x73\x5a\xf1\x4f\x9b\x3c\x69\xb3\xa8\x4b\x5d\xb7\xee\x0b\x43\x3a\xcc\xdc\x78\xf9\xe5\x73\xdf\x0d\x2e\xb9\xb2\x6f\xad\x85\x99\xef\x6c\x24\x9e\xae\x99\x9a\x64\x90\x7a\x6c\x39\x04\xa5\x39\x3c\xd4\x1d\x8a\x56\x45\x87\x88\x1c\xe8\x7a\xb4\xcb\x4b\x92\xc1\x6b\x04\x47\x41\x3a\xb6\x1d\xdb\x75\xc3\x67\x5a\x04\x7f\x37\xa7\xc7\xb9\x1e\x2f\x99\x76\xf6\x97\xba\x0b\x8e\x54\xb8\x16\xee\x94\x7a\x1e\x5e\x34\x69\x8b\xf3\xeb\xb5\x3e\x4f\xf1\x9d\xcf\xaa\xf6\x6d\x78\xed\x99\xd4\xd5\x7f\x51\xde\x9b\xdb\xfd\xb3\xf7\x0e\x5c\x99\x7d\xbb\xce\x83\x03\xdc\x9c\x63\x1f\x75\x9e\x5e\xa0\xd4\xb0\x45\xf5\x2f\x55\xdb\x3e\xde\xb8\x96\x64\xba\x63\xd9\x92\x23\xcd\xb3\x55\xc1\xf6\x5c\x6c\x30\x92\xcd\x07\x96\x61\x02\x31\xd2\x5d\x18\xa9\x08\x7a\xa2\x06\x18\x43\x92\x7c\x48\x93\x64\x40\x28\x04\x99\xa0\x6e\xfa\x74\x41\x19\x69\x53\x41\xf9\xcb\x8b\xb9\x5a\x7f\xb3\xfe\xa5\x9f\x16\x4c\x3e\x7e\xf0\xe6\xf9\xb9\x87\x67\x1f\xea\x1d\xbc\x37\x0a\x7d\x97\xdc\x23\x87\x58\x14\x40\x28\x89\x51\xac\x00\x87\x0a\x45\x57\x71\xa0\x23\x71\x52\x40\x49\x2e\x10\x81\x2f\x0a\x2a\x00\x34\x1b\x9a\x0c\xe1\xd0\x0e\x25\x23\x32\x81\x06\xc7\x8e\x9b\xb5\xd5\xed\x33\xb6\x7e\x7b\xd2\xd9\xdf\xa5\x7d\x91\x99\x17\x5f\xfd\xf0\x4d\xf3\x97\x6b\x6a\x05\x29\xc7\xd7\xa7\x07\x2f\x6c\x92\xe4\xc6\x3c\x1b\x70\x74\x00\x5c\x17\x42\xdf\xb7\x04\x01\x08\x1a\xa1\x9b\xaa\x28\x72\xb1\x02\x09\xca\xa0\xdc\x98\x33\x90\xac\xd0\xc0\x51\x95\x48\x0d\x48\x5f\xc8\x40\x91\xaa\xe8\x9b\x07\xeb\xbf\x7f\xfd\x40\xf5\x8a\xaf\x68\x85\x37\xf4\xda\x39\xa7\xce\xdd\xe3\xee\xee\xfb\x5f\x75\x7c\xb9\x56\xd1\x2a\x39\x2a\xed\x7e\x9a\xdc\x1c\xa0\x61\x32\x72\x6c\x8b\x91\x25\x89\xf5\x5c\x93\x8b\x95\x88\xb1\x05\xcb\x96\x19\x87\x94\x64\x03\xf8\x96\x22\x04\x22\x23\x63\x9e\xd0\x1d\x46\x35\x91\x92\xa0\x8b\xda\x72\x88\xf0\xf2\x02\xfb\xc3\xef\xf2\x5d\xfb\xe8\xc0\x84\x99\x68\x6e\xd6\x71\xd7\x3b\x1c\xcd\xf7\x7d\xd0\xb1\xfe\xb0\x47\x59\x7f\x28\x99\x79\xd9\x90\xc4\x4d\x79\x87\xd4\x35\x99\x75\x35\x83\xf5\x42\x5b\x67\x7d\x46\x11\x6d\xc2\x75\xd5\x50\x15\x23\x36\xe0\x45\x3e\xf0\x04\xcf\x81\x1e\xf0\x5d\xc7\x14\xa2\x40\x40\xcf\x97\x62\xdb\xef\xe3\x75\x3e\xc8\xd7\xe3\xdd\x3d\xe7\xf6\x34\x1c\x52\x2b\x67\xd5\x87\x37\xb7\xbd\x73\xaa\x4d\xad\x6f\x86\xce\xcf\xb7\xe6\xa3\xb4\xce\xc9\x2d\x10\x4c\x52\xb6\x63\x07\x5b\x61\xc0\xb9\x3c\x2f\x92\x58\xb2\x5c\x87\x11\x1d\x45\x31\xb9\x20\xe0\x3d\x0e\x42\x9e\x02\x00\xb8\x22\x0b\xb8\xc0\x77\x83\xd8\x4b\x5c\x20\xb8\x2d\x2a\xe7\xb1\xef\x14\x3f\x37\xad\x5d\x58\xad\x9e\x30\xbd\x65\x8b\x9c\x91\x5f\xab\xc9\xaa\xd2\x39\xbe\x1d\x3d\x6f\xcd\x72\x70\x34\xb9\x6e\x28\x85\x24\x6f\x18\x28\xb6\x49\xde\x56\x08\x53\xe3\x43\xd5\xc6\x32\x1b\x51\x06\xa1\x92\x2a\x88\x98\x98\x23\x59\xd1\x61\x63\x57\x33\x6c\xc0\xc7\xba\xc2\x3d\xef\x86\x5f\xbf\x94\xaf\xe0\xd5\x5f\xea\x33\x33\x72\xe7\xee\x31\x64\xf3\xc6\xaa\xbf\x9e\x19\x77\xab\x74\x7c\xc0\x88\xcf\x97\x3e\xd1\xb0\x4c\xf1\xb3\xc9\xb5\x67\x88\x38\x3e\x50\x69\xd5\x55\x34\x42\x63\x49\x92\x53\x75\xe4\x50\x5c\xa4\x11\x98\x62\xa0\x20\x46\x7e\x6c\xd9\x48\xf6\x64\xda\xa7\x44\x9d\x43\x92\x62\x25\xfe\xd2\x93\xbf\xdf\x50\xa4\x19\x5b\x79\x48\xf9\xb4\x77\xc6\x3e\x66\x3b\xe4\x8e\xb6\xcf\xcd\xf2\x56\xff\x96\x0b\xc9\xc2\x79\x9a\xec\x69\x74\xdd\x4b\x32\x4f\x03\xe7\x12\x8e\x8c\x6c\x93\x62\x91\x1c\x50\x02\x85\x29\x8e\x57\x34\x53\x72\x1d\xcd\xb1\x69\xd6\xf0\x05\x1a\x02\x4a\x06\xb6\xc7\xb0\x0c\x45\x86\xaa\x9c\x80\xc7\xb4\x5e\x2f\xfa\xe4\xdc\xbc\x1d\x0b\x5b\x14\xf3\xfb\xc1\x34\xfc\xd5\x7b\x37\xbe\xed\xd0\x31\x6b\x5a\xca\x81\x23\x77\x8e\x4d\x5e\x53\x3f\xc9\x36\xed\x46\x2e\x19\x90\x56\x1c\x59\xbe\xc5\xf1\x22\x27\xf3\xbe\x62\x91\x16\x85\x43\x53\x12\x2d\xd6\xa1\x94\x90\x35\x78\x89\xd4\x25\x96\x77\x42\x53\xe5\x33\x80\xc4\x7d\xf1\x7e\xf3\x82\x39\xc3\x5d\x65\x8b\x0c\xdb\x5e\x6c\xf0\x27\x4c\xb7\x9e\x75\xde\xa8\xd9\x65\x41\xd7\x33\x67\xf7\xad\x7f\xb3\xfe\xe0\x21\xa3\x93\x8d\x67\x0d\x81\x83\x08\x13\x8b\x8a\xe6\xc7\x92\xa8\xfa\x34\xd6\x38\x19\xb9\x48\xc0\x94\xc5\x4a\x02\xe1\x69\x0a\xef\xf9\x98\xf3\x31\x2f\xb8\xc8\x43\x62\x06\x29\xff\xcf\xb7\x57\x3e\xa9\x12\xcf\x4e\x4b\xeb\x91\xaf\xda\x6f\xc2\xec\x4b\xa3\x0e\x14\xb9\x7d\xa6\xcc\x44\xfc\xc5\xcf\x8d\xe8\x32\x75\x6f\x1c\x7f\x26\xaa\xcf\xae\xd6\xe3\xde\xde\xb2\xb7\x5b\x4c\x9d\x33\x31\xfb\xd5\xfb\x13\x7f\xcd\x33\xee\xec\xed\x8a\x17\xf6\x73\x79\x3f\xeb\x73\x75\x5f\xc9\xa1\x49\x56\xfc\x66\x00\x47\x09\x8e\x65\x58\x2a\xa7\x00\x97\xf4\x9c\x50\x09\x59\xc8\x28\x24\x14\x43\xca\x24\x58\x48\xd3\x46\x88\x64\x9d\x53\xc3\xc8\x97\x94\x48\xfd\xd7\x16\xdf\xb3\xe6\xb4\x28\xd7\xe8\x2a\xbd\x7b\x9d\x5e\x3a\x7b\xec\x89\x9a\x63\x8a\xcd\x3e\x7e\x31\xcd\xf1\xaa\x2b\xf3\x38\x6f\x0b\x3d\x78\x4c\xee\x37\xc6\x25\x99\xc3\x14\x50\x12\x1f\xfa\x14\x45\x33\xb4\x22\xab\x80\x66\x03\x91\xe1\xbd\x20\xd2\x03\xc2\x83\x02\x49\xf2\x96\x8e\x08\xcb\xf4\x1c\xd6\x52\x59\x2e\x62\x23\xfe\xf9\xa8\x7e\x8c\x18\x3a\xad\xd9\xc2\xe9\x6b\xf6\x6f\x6b\x75\x98\x15\xf7\xed\x47\x23\x3e\xca\x5a\x38\x6d\xe2\x17\xcb\xdc\x61\xad\xfa\xf7\x7f\x31\xb9\xfb\x18\x9c\xe9\xf0\x1e\x23\x07\xc0\x22\x7c\x0e\x73\x8a\x45\xfa\xae\x10\x22\xcb\xb5\x5d\x85\x25\x68\x25\x16\x15\x5f\x76\x41\x14\x51\x34\xb0\x0c\x49\x64\x91\x63\x27\x1e\x30\x75\xcc\xf1\x60\xd8\x1f\x13\xec\x42\x60\xc4\x9c\x15\xe3\xf3\xcf\x9d\xd3\xed\x95\x0e\xda\xb7\xb9\xb3\xfe\x7a\xf9\xe1\xcf\x67\xdf\xde\x37\xb5\x60\xb2\xc7\x18\x84\x6f\x68\xba\xa4\x0b\xba\xcc\x87\x3a\xc7\xba\xa6\xe1\x09\xa6\x6a\x7b\xba\x14\x06\x0a\xc5\xab\x94\xad\xf9\x04\x22\x44\xc3\x22\x7c\x4d\x70\x15\xe3\xf9\x94\xbf\x42\xec\xfb\x47\xd5\x4a\xc6\x0f\xe0\xf0\x18\x77\xfe\x8d\xb9\xbb\xdb\x4c\x38\xfa\xee\x80\x59\x39\xb2\x5e\x5d\x3a\x89\x6f\x10\xbd\xb9\x2a\xc9\x17\x6c\x39\x30\x25\x95\x0a\x7d\xdd\x07\x12\x13\x84\xb2\x1c\x3a\xb6\xee\x59\x81\x04\x22\x47\x01\x5a\x64\x07\x9e\xc8\x47\x9e\x4b\x47\x3e\x2b\xd9\xb1\x27\x4a\x89\x39\x8e\x2a\xbe\xf7\x6a\x03\x77\xd6\xe9\x1f\x0f\x5e\xba\xfe\xfd\xf4\xaf\x66\xdd\x5b\xf4\xea\x88\xaf\xc8\xac\xa7\x6a\x5f\xbe\xd4\xf8\x7a\xc7\xd6\x6f\xae\x4b\xae\x4d\x13\x84\xcf\x22\x3d\xb6\x24\x51\x30\xcd\x30\x62\x15\x91\xa3\x09\x35\xf2\x68\xec\x06\x3a\x05\x11\xcd\x58\x24\xe4\x85\x80\x72\x45\x64\xd0\x12\x61\x28\x09\x96\x69\xdb\x4e\x0a\xa4\x17\x8b\x36\x2f\xd3\x35\x5c\x9c\x35\xeb\xb6\x75\x15\x36\xcd\xed\x32\xb4\xe8\x94\xd3\xc5\xfb\xcf\xeb\x7a\x78\xce\xa6\x89\x77\x93\x6b\xd3\x54\xe8\x6b\x64\x14\x0a\xb2\x60\xe8\x3c\x92\x69\xc2\xe7\x1c\x07\xf9\x36\x0f\x7d\x32\x50\x44\x0b\xc7\xa6\xa3\x51\xb6\xc4\x79\x22\x36\x91\xc2\x09\x64\x82\x94\xbf\x38\x4f\xae\x0d\x1b\x36\x4c\xbb\x7d\xf9\xf6\xb2\x3f\xee\x9d\xeb\xde\xaa\x0b\xf9\xe5\x8e\xaa\xcb\x3e\x3f\x7b\x75\xcd\xda\x0f\xe6\xdc\x7e\xf7\x62\x72\xed\x59\x36\x35\x4a\x16\x69\xd6\x70\x6c\x45\x77\x4c\xc0\x18\x61\xa0\xe9\x31\xe0\x10\x26\x68\x2c\x01\x3b\x34\x24\x5b\xf6\xa1\x68\x1a\x16\xe9\x9b\x16\xe4\xfe\x1a\x4f\xff\x9b\x57\xfe\x9f\xa6\x5b\xa9\x29\x03\xb2\x64\xcf\xf2\x2c\xd6\xff\xfd\x02\xab\x6b\x0d\xac\xd6\x75\xd7\xb7\xc1\x8b\x71\xda\xa8\xb3\x9d\x5f\xf9\xa9\x2f\x5c\x50\x39\x25\xff\xc2\x93\x37\x7e\x2c\x2e\xd8\xc9\x1d\x0b\xf3\x22\x21\xb0\x02\x83\x90\xea\xeb\xb4\x04\x14\x04\x11\xd4\x7d\x5f\xc0\x82\xaa\xc9\x9a\x61\x53\x42\xa8\x49\x04\x63\x8b\x1e\x4b\xb3\x66\x2c\xd9\xbe\xc6\x3c\xef\xb5\x87\x2b\x9c\x7d\xd2\xa4\x71\xc7\x13\x66\xd5\x72\x3b\x97\x6c\x7c\x2b\x4b\xbd\xef\x67\xd6\x5a\x75\xa3\x53\xd6\x9b\x1f\x3a\xc7\xde\x29\x52\xbf\x75\x92\x2f\x9e\x82\x16\xf0\x04\x32\x34\x1b\x43\xc8\x2b\x0a\x32\x4d\x56\x61\x94\x40\x73\x23\x9d\x30\x5c\xc1\xe1\xa1\xad\x5b\x14\xa4\xfd\xd8\x57\x2d\x43\x13\x1d\x25\xf1\xe8\xc5\x7f\xfb\xc9\x99\x29\xdb\x7e\xb4\x17\x9c\x2d\xd5\x37\x47\xfb\xd7\x16\xb5\x38\x52\xa1\x4c\xbf\x20\xd7\xfe\x4e\xcd\x77\xe7\x8e\x4a\x6c\xcd\xbc\x4e\x41\xe2\x21\x97\x4a\x2b\x11\xe9\xf1\xb2\x48\xb8\x02\x45\x18\xa2\x6b\xa0\x08\x98\x2c\x8a\xa0\xe1\xd9\x84\xe2\xd3\x12\xf6\x1d\x49\x20\x62\x28\x0b\x8a\x0a\xa0\x27\x24\x3e\x76\xc3\x17\xb3\xbc\xf5\xd1\xe5\x7d\x4d\xab\x76\x18\x37\xb2\xc1\xeb\x97\x1b\xe5\x3a\x3d\xff\xd4\xa9\xa6\x7d\x73\xcd\xa1\x1f\x6f\xb0\x0b\xf6\x4f\xb2\x70\x8d\xc6\x88\x1c\xe1\xf3\x12\xab\x31\x82\x01\x68\x8a\xc6\x8e\x24\x86\x6c\x2c\x79\x81\xcb\xd0\x08\x2a\xa4\x11\xf0\xb4\xa0\x5a\x31\xeb\x92\xb6\x8a\x6c\xf5\xaf\x5e\xc6\x97\x79\xfe\xbb\x59\x51\x6a\x4a\x4a\x96\x1a\x2f\x3f\xab\xeb\xf2\x4a\xed\x05\xe5\xfa\xb5\xd6\xb6\x1b\x1b\x14\xf9\xfa\x88\xac\x03\x6a\x2d\x3d\xda\x7a\xc6\x9c\x16\xe7\x8c\x92\x65\xc6\x1a\x57\xe7\x67\x1e\x7d\x9e\xf0\x2d\x39\xe8\x19\x14\xf4\x68\xd9\xa1\x39\xdb\x20\x2d\x13\xb9\x06\xd6\xb0\x45\x05\xc8\x66\xe2\x10\x19\x34\x1b\x13\xa1\xc2\x62\x97\x66\x11\xc1\x33\x6a\xec\x27\xfe\x39\x69\xdf\xb5\x18\x5f\xf3\xcd\xb4\x75\x5b\x06\x09\xf9\xeb\xcc\xef\x74\xe6\xc2\xbc\x85\x0b\x6e\xde\x19\xd2\xfc\x76\xfb\xaa\x6f\x8d\x4a\x3f\x9e\x79\xcc\x6d\x62\x5a\x05\x31\x72\x4c\xd2\x06\x46\x00\x6c\x4e\xb3\x19\x56\xa6\x24\x53\x35\x64\x5a\xf1\x80\x88\x43\x05\x8a\xb2\x4d\x1b\x44\xc4\x52\x0e\x2f\x40\x16\xd2\x19\x71\x14\xbc\xd8\xf1\xa8\x70\xa0\x54\x2a\xea\xfc\x5d\x87\xf1\xc1\xdd\x1d\x1f\x14\xa6\x8b\x0d\xba\xb6\xe3\xc8\xc9\xa9\xf1\x61\xad\x41\xfa\xc8\xe4\x32\x9c\x70\xbc\x49\x3a\x00\xc5\xa2\x02\x75\x40\xf3\x1e\x15\xc1\x08\x50\x62\x48\xb3\x1c\xf6\x78\x47\x0c\x00\xe5\x29\x94\xaf\xd9\x4c\xe4\x47\x96\x19\xb3\xa1\x90\x20\x81\xbd\x91\x6d\xde\x71\xb9\x7b\x96\x01\x4a\xfe\xf5\x6d\xb3\x0f\xff\x64\x60\xfd\xbe\x41\x55\x74\x87\x3f\x5a\xa7\x01\x97\xd5\x18\xf4\x4e\xe6\x75\x23\x13\x63\xc9\x49\x52\x36\x3d\x9d\x92\x01\x1f\x44\x40\xc5\x34\xd6\x43\x93\x13\x1d\x15\x38\x94\x62\x59\x2c\x82\x4a\x2c\xab\x9c\xa3\x69\x24\x0a\x05\xc7\xd7\x48\x3b\x71\x27\xb2\xc6\x8e\xf5\x2f\x0f\xfa\xea\xbd\x65\x27\x37\x4f\xfe\x8a\x39\x35\x36\xcf\x8a\xb7\x85\x3f\xf0\xc5\x5b\x54\xf1\xbd\x5f\x7c\xb3\x76\x12\x9b\x64\x0c\x43\xc0\x33\x0a\x44\xbe\x1b\x01\x91\xb7\x4d\x89\x61\x0d\x56\xa6\x75\x8d\x82\x24\x92\x38\xac\x20\x4b\xb6\x90\x6a\x83\x20\x50\x55\x24\x49\x2e\x52\x95\x0c\x1a\xa8\x82\x76\xa8\xb3\xc7\xf7\xa9\x5b\x47\xc8\xdd\xf2\xcb\x7e\xab\xbf\xac\x63\x4f\xef\xbe\xb1\x5b\x93\x1a\xe5\x86\x8c\x98\xb7\xe3\xed\x16\x99\x27\x09\x4e\xbc\x62\xef\x8a\x02\x90\x22\x9b\x56\x18\x4a\x67\x75\x13\x73\x50\x36\x21\x08\x7c\x0d\x45\x50\x8f\x11\x45\xd3\x2e\xa5\xd9\x8e\x29\x18\x8c\xc6\xa9\x38\xd0\x33\x40\xb4\xe5\xb9\xdc\xf0\xfd\x41\x6f\x9c\xc8\x99\xbb\xf7\x30\x7d\xe3\xbe\xe1\xe3\x2a\x77\xbb\x7c\xe3\xfe\x8b\xe1\xe6\x0a\x8d\x8b\x31\xf2\xe1\x5f\x16\x27\xb7\x64\xd0\x69\x11\x12\x81\x15\x0a\xb2\xe8\x8a\x72\x60\xf1\x00\x61\xdd\x13\x1d\x96\xf7\x75\x49\x75\xc5\xd0\xc0\x96\x4b\x7b\x26\xe7\x04\x98\x11\x64\xee\xff\x84\x7f\x9e\xd1\xe0\xf8\xa7\x49\x79\x6a\xa3\x94\xdc\xff\xb1\x27\x0b\x3f\x1b\x68\xcf\x4e\x87\xc5\x94\xb4\x43\x5d\xce\x4c\xac\x62\xe7\x79\xb8\xb7\xe0\xb7\x5c\xaf\x31\x53\x52\x1b\xa1\x6c\x15\xe2\x19\x49\x66\x42\xb6\x31\x21\x89\x62\x04\x20\xcb\x50\x06\x40\x18\x23\x23\x22\x65\xdb\xd0\x48\x96\xf1\xb1\xc0\x06\x30\x02\x9c\x06\x54\x1a\x84\x80\xa5\x63\x5b\xc8\x00\x4b\x5e\x2a\x6b\xdd\xa7\x35\x6f\xa8\xa3\xd6\x55\x5c\x30\xe5\xea\xc4\x81\x7b\x5f\x0c\xfb\x2d\xc8\xff\xf0\xbb\xd3\x6b\x97\xb6\x26\xef\x4f\x74\xf7\x24\xb7\x6a\xa0\x03\x0b\xf3\xb1\x16\x0b\x58\x8d\x01\xc7\xeb\x96\xe0\x07\x84\x6e\x40\x9e\xe7\x5c\x6c\x86\x8c\x05\x91\xa3\x01\x45\xb5\x7c\xc7\x0e\x48\x8f\x31\x62\x36\x71\x84\xef\xb4\xed\x83\xed\xd3\xa9\x99\x1b\xab\xdd\x52\x9d\xda\xca\xaf\xc3\xce\x9f\x5b\x34\xe8\x7c\xde\xf2\x87\xf8\xdd\x97\xd6\x90\x45\xbf\x2a\x9d\x64\x07\x36\x7c\x0d\x53\xac\x00\x55\x1a\x51\x82\x64\xb9\x31\x8c\x31\xb2\x2d\xd5\x22\x3c\x41\x22\xd8\x58\x75\x21\x29\x72\x94\xe1\xc9\x14\x87\x28\x4d\xf0\x32\xd8\x4a\x66\x57\x1c\x4f\x7d\xe9\x5c\xe1\x46\x07\x16\xdc\xcb\x96\xeb\x90\xcc\xff\xde\x33\xff\xce\x1c\x85\x0e\x4f\xdc\xe1\x1d\xeb\xf4\xc7\xd0\xc3\x3f\x27\xf7\xd8\x62\x44\xaa\x0c\xcb\xdb\xa2\x09\x89\x90\xd0\x09\x1d\x05\x40\x54\x63\x4f\x62\x24\x9e\x55\x64\x4c\xc8\x3e\xc3\x84\x14\x50\x39\x99\xe5\x42\x1b\x18\x7f\x5b\x42\xfb\x77\xd5\xf0\x4f\xd8\x84\xd4\x94\xf7\xde\xcb\xda\x61\xc8\x33\x79\xac\xe7\x2b\xe3\x6e\x57\x2a\xdc\x66\x21\x53\xc9\xbd\xd7\xdd\x08\x7a\x77\x5b\x72\x60\x7e\xbd\x9c\xe3\x1e\x1c\x28\xb6\x7d\xc6\x84\xca\xcb\xba\x24\x99\x5c\x4c\x0f\xa1\x4c\x33\x5c\xe8\xda\x0c\xe5\x73\x86\xc4\x51\xb2\x44\x10\xa4\xe5\x20\x9e\x14\x0c\x4d\x37\x55\x1e\x84\x90\xf7\x78\xd5\x12\x02\xd5\xf5\xe3\x04\xe4\x62\xe7\xae\x6f\xc8\x33\x2b\x2d\xff\xda\x91\x93\x2e\x4e\x18\x58\x3a\x7f\x93\x1d\x8d\xee\x6d\x58\x98\x65\xf9\xe5\x6f\xfb\xd5\x5d\xb6\xf6\xa1\x9c\x79\x4d\xef\x84\x47\xd6\x88\x48\x27\x05\x52\x30\x10\xc4\xc8\x74\x19\x49\xa1\x5c\x5e\x52\x74\xc5\x45\xb6\xcb\x45\xb6\xc7\xb9\x42\xa4\x53\x36\x2d\x89\x2a\x0b\x78\x4e\x12\xa4\xc4\xf6\xc4\xcc\x3c\x33\xe4\xfe\xa9\x65\xdf\xa5\x34\x73\x4b\xbc\x78\x66\xea\xe7\x5d\x5e\xcb\x5b\xfa\xa5\x4d\xaf\x7f\xf4\xa7\x2e\x74\x5d\x5c\x6c\x6f\xe6\xb5\xc9\x12\x4b\x70\x18\x9c\xc3\x9b\x9a\xe0\xf2\x01\x12\x42\x9b\xd4\x02\x56\x93\x02\x52\xe0\x08\x03\x10\x36\xd6\x23\x53\x8f\x48\x8b\x14\xe4\x90\xb1\xf9\x00\x46\x5e\x94\x81\xf7\x56\x3f\x98\xb6\xe6\xc7\xb4\xee\xf7\x61\x99\xf6\x15\x77\x45\x4d\x1b\xd7\x9a\x33\x63\xe6\xa0\x32\xb7\x9f\x8e\x6d\x52\x3d\x4b\x01\x5d\xcf\xbc\x80\x5d\xe2\x42\x47\x15\x5c\x2c\x53\x98\xe7\x38\xd1\xa2\x22\x8e\x41\x81\xc9\xc8\x2a\x4f\x46\xbc\x64\x18\xa4\x4b\x99\x2a\x85\x29\xc6\x34\x74\x48\x43\xcb\xd3\x20\x1f\x26\xfe\xda\x3b\xb7\x0b\xe5\x72\xb5\x2e\xbd\x8e\x1e\x7f\x62\xf2\xf0\x51\x39\x86\x1d\x69\xf0\xd8\xa6\xd6\x4b\x56\xc3\x8a\x07\x47\x37\x28\xd2\xe9\xf3\xe4\x56\xc3\x16\xc1\x72\xbe\x6f\x20\x3e\x14\x23\x89\x51\x64\xc6\xb3\x1d\x1c\x06\x14\xe4\x19\x59\x61\xa1\x15\x6a\xaa\xc0\x71\x9c\x1f\x41\x22\x0c\x1c\x16\xc7\x04\x4a\xfc\xb5\x57\x7d\x99\x7d\x74\xb7\x61\xdb\x5b\x1c\x1c\xd5\xfd\x51\xe9\x63\xa7\x56\x6e\x87\x05\xe8\x6f\xa8\x1e\x75\x57\x80\xfb\x93\xb7\x76\x3f\x9e\xf9\x0e\x54\x62\x56\x45\x9f\xa3\x24\xd7\x23\x55\x49\x8b\x59\x96\xe2\x1c\x8b\xd3\x25\x8b\x42\x52\x60\x73\x4a\xa8\xeb\x84\xa9\xc5\x48\xe6\x3c\x45\x36\x22\x8f\x0b\x7c\x2d\x23\xdb\x3e\x73\x6b\x7e\xab\x03\x4f\x26\xee\xbe\xfe\xd9\x37\x73\xb2\x23\xfe\xed\xd1\xc4\x91\xb2\xd5\x9e\xbe\x54\xb6\xfd\xa5\x9a\x03\xb2\x14\x69\x98\x79\x4d\xc9\xc4\x2e\x29\xf8\x66\x00\x29\x42\xb7\x4c\xd2\x8c\x6d\x5b\xf0\x14\xcf\x60\xb1\xa1\x5a\x2e\x94\x44\x2e\xb6\x18\x85\x03\x2e\x6d\x89\xbc\x12\xf9\x94\xee\x06\xc4\x5f\x51\x64\x5b\xae\xff\x0e\x99\x95\xda\xe8\x85\x01\xf9\x9e\xdd\x06\xe9\x12\x4f\xef\xbd\x65\x69\xa3\x3c\xf7\x6f\x74\x2d\xdb\xfe\x08\x1c\x79\x14\xb7\xde\xfd\x65\xd9\xd9\xc5\xf2\xb3\xab\x9e\x54\x6a\x89\x92\x4b\x9c\xc0\xbb\x26\x6f\x08\x82\x12\xd9\x9a\x18\x46\xa2\x0d\xb0\x69\x3a\xaa\x43\x6a\xbc\x66\x08\xc8\x93\x65\xd3\x71\xb0\x23\x19\xbc\xcf\x4a\x4a\x04\x78\xd3\xf7\x84\xc4\xff\xe6\x52\x34\xbd\xec\xb6\x2e\xa5\x6e\xbc\x7e\x2e\xc7\x99\xd7\xf2\x48\x7b\x6b\x4f\x9e\x7b\xaf\xc9\x75\xe1\xc1\xdb\xc5\xf4\x94\x8e\xd5\xbb\xa0\xe4\x7a\x82\xcc\x87\x24\x6d\x70\x9e\x16\xcb\x01\x50\xa2\x50\xa4\x42\x29\xe6\x3c\xd9\x97\x68\x92\x8d\x0d\x36\xc0\xaa\x2f\x8b\x86\x17\x40\xde\x11\x0c\x09\x22\x3e\x83\x4b\xfb\xf5\x32\x93\xb6\x8f\x3f\x54\x6a\xd8\xa9\xf1\x9c\xbd\x3d\x2f\xfb\xf5\xdb\x45\xeb\xf4\xbe\x93\xfb\xad\x69\xcd\xeb\x3d\x69\x78\xf1\x74\xc7\x49\xc9\x2d\x44\x09\x07\xc7\x84\xab\xf3\x36\xed\x59\x7e\x40\x9b\x8e\x89\x4d\x49\x8e\x2c\xc3\x23\x3d\x8a\x61\xb0\x6e\x7b\x82\xe6\xa8\x3e\xe6\x59\x15\x06\x8a\x6a\xa9\x19\xd0\x21\x94\xea\x70\x92\x6c\x6c\xfe\xd2\xf3\xd0\xa2\x49\xed\x1a\xbd\x58\xa0\x96\xfa\x74\xdc\x6f\x29\x17\x67\x6d\xeb\xd1\x62\x4d\xe7\x94\x3a\x5d\x33\x3f\xcf\x4c\x18\xe5\x3d\x87\xf6\x62\x5b\xd5\x45\x51\x03\x50\xe2\x65\x1c\x43\x59\xe3\x28\x93\x70\x99\x08\x44\x50\xc1\x80\x88\x29\x68\x32\x7c\xec\x23\xc5\xa5\x38\xdb\xcb\x80\x14\x64\xc6\x7b\x9d\x3e\xdd\x79\xb2\xc5\xf9\x7a\x8f\xea\xdf\x2c\x30\x9e\x60\xae\x0d\xee\x3a\xb0\xcf\xa1\x93\x47\xfa\xf4\x58\x36\x6e\x58\xcf\x41\xe3\x93\x5c\xa3\x99\x20\xa6\x63\x1a\x42\x95\xe1\x09\x4a\x20\x24\x2b\xd0\x64\x01\xb3\x6a\x48\x10\x04\x13\xb2\x84\x67\x5a\xa6\x17\x69\x14\xb6\x1d\x28\x0a\x2c\x45\xfc\xb5\x67\xfc\xef\x4e\xe1\x3f\xe1\x86\x52\x53\xb2\xfd\x9f\x02\xe5\x5f\xc5\x4e\xdd\x16\x63\xfb\x17\x7a\xed\x4c\xfe\x7c\xe3\x5f\xed\xb2\x2d\x1a\xff\xc5\x6b\x25\x2b\xde\xce\x33\xbf\xe6\xe3\x37\xf5\x46\x56\xf1\x37\x46\x0d\x4e\x32\x4e\x56\x60\xec\x80\xf7\x63\x83\x23\xa8\x88\x67\x78\xec\xb9\xa6\x85\x58\x5f\x12\x4c\x97\x87\x14\x45\x1a\xc8\x10\x34\xc7\x32\x45\xc9\x15\xf4\x48\xb5\xdc\x04\x1a\x06\x37\xe3\xec\xf5\x3a\x97\x5a\xc2\xf4\x29\x69\x4e\x5a\xdc\xb0\xd4\xf7\xca\xe2\xb2\x59\xa6\x4c\x1e\xfb\x78\xd6\xdd\x2f\xca\x4d\x24\xb3\x67\x9e\x43\x2c\x61\xd0\xf1\x00\xb6\x59\x9d\x03\x42\x60\x69\x1e\x27\xc6\x82\x48\x06\x04\x85\x4d\xcd\x52\x05\xce\x31\x1c\x5d\x66\x64\x18\x61\xcc\xf8\x9c\x2b\x10\xb2\x00\xb9\x20\x71\xd0\xe9\x7b\xb8\xbd\xfd\xd9\x80\x11\xad\x7a\x37\x1c\x58\x7f\xca\xe7\x8b\x4f\xf4\x79\xaf\xca\x2f\x2f\x7d\xfe\xe1\x78\x2a\x5b\xa7\x53\x47\xdf\x78\x21\xf3\xfc\x2b\x89\xbd\xd7\x34\x1d\x93\x09\x2d\x99\x54\x58\x15\xe8\x86\x88\x1d\x8b\xd2\x88\x00\xcb\x40\x22\x38\x4d\x72\x15\x95\xe4\xfc\xd0\x92\x45\x40\xb8\x32\x88\x55\xe4\x26\xf6\xde\x9a\x4b\xe7\x3f\x2c\xfb\xfd\xd3\xa3\xb3\xbe\xc0\x46\xbe\x1a\x6a\xe3\xea\xf7\x1b\xbc\xc0\x56\x7a\xbb\x7d\xe1\xe5\xb3\xcb\x5d\xec\x53\x2d\xf3\x6e\x90\xf0\xd2\x1e\xfb\x8e\x17\x62\x97\xe4\x45\xcf\x06\x1a\xc1\xb0\xa1\x42\xc8\x36\x21\xfa\x54\x20\x48\x64\x68\x00\x4d\x55\x78\x47\x10\x4d\x4f\xf2\xa0\x01\xed\xc8\x31\x9e\xbb\xfd\xfe\x13\xde\x29\xb5\xd1\x9b\x8d\xff\x83\x53\xc0\x0c\x56\xb7\xaa\x30\xe8\xcd\x4a\x7f\xdc\xa7\xb9\x65\x67\x26\x77\x63\x5a\x4d\xc8\x93\x1b\x9f\xd8\xf2\xee\xee\x5e\x15\x9b\xd1\x8b\x3f\x4a\xee\x4b\xaa\x54\x60\x60\x26\xe6\x81\xa5\xd2\x21\x41\x5b\x16\xeb\x01\x47\x24\x6c\x91\x0e\x08\x16\x4b\x51\x68\x39\x51\xe4\x1b\x48\xa4\x08\xdb\x07\x00\x46\x22\x9f\xf8\xdf\xdc\x68\x54\x54\xb9\x58\x66\xe0\xe3\x07\xb9\xf4\xa1\x07\x60\x96\xe0\xb5\x3b\x77\x1f\x0e\x5a\x7c\xbf\x6d\xde\x66\xd2\xae\x12\x77\x4a\x64\x7e\x64\x94\x78\x19\x53\x67\x63\xdd\xe7\x01\x25\xdb\x16\x21\xca\xac\xe3\x93\x8e\xe1\xca\xa6\xcc\xb1\x6c\x2c\x79\x88\x84\x71\xa4\x93\x46\x6c\x48\x91\x85\x59\xe4\x9a\x9a\x9c\x38\xb2\x5e\x69\xb6\x58\x9e\xb2\x7b\x56\xa1\x12\xdd\xdb\x7e\xbf\x7f\xd6\xc2\xf4\xa1\x9f\xad\x9f\xd6\xc9\x6c\x9d\x63\xf8\x27\x37\x2d\x62\xd6\xeb\x54\x92\xc9\xad\x20\x6b\xd9\xbc\xed\xd0\x61\xec\xea\x8e\x1b\xe2\xc0\x35\x81\xe5\xfb\x86\x6c\xd1\x3a\xd2\x69\x68\x31\x9e\xa3\xc6\x14\xb0\xa0\x6b\x3b\xa6\xe5\xc4\x19\x50\xd3\x4d\xfb\x3e\x6f\xbd\xd9\xcb\xea\x7e\xd0\xf6\xe1\x9c\x0f\x5b\x0c\x99\x0f\xcd\xed\xe9\xc5\x2a\x4c\x6e\x6c\xa5\x7d\xb6\xa6\xdc\x08\x45\xce\x7c\xaf\x21\x03\x2a\x31\x1b\x71\xbe\xe7\xd9\x96\xae\x19\x92\x6d\xb9\x32\xe3\x12\x84\xef\xb3\x91\xcb\x01\x5e\x43\xba\xcd\x70\x92\x10\x60\x2c\xea\x9a\x4b\xd8\x8e\xf1\x37\xd2\xe9\x7f\x27\x84\x7f\x82\x01\xa4\xa6\xe4\xc8\x92\xf5\x3f\x24\x89\xc3\x36\x29\x5b\x53\xf4\xa6\x37\xde\xe2\xb8\x8b\xa3\x86\x0e\xb9\xf6\x7d\xe7\x6a\x47\x7e\x6b\xf2\x5e\xe9\x0b\xe5\x99\x69\xbb\x66\xc1\xd4\xe4\xbe\x25\x25\xab\x9e\x40\xc8\xa2\x21\xba\x84\xa4\xb8\x32\x2f\x4a\x91\x83\x8d\xd8\xe0\x04\x8e\x03\xae\x4e\x07\xaa\x0f\x1d\x83\x95\x15\x51\x67\x25\x0b\x7a\x71\x94\x38\xba\xbe\x71\xf5\xe3\x02\x73\xb4\x1d\x05\xff\x68\xfd\x70\x78\x5e\xf6\xf0\xe5\xb2\x9f\x2c\x99\x95\xbf\xb5\x5d\xd5\xdb\xb5\xa0\xca\xd7\x15\x6f\x24\xb9\xa4\xc3\xb4\x07\x1c\x8d\x72\x05\x4c\x32\x8c\x0f\xd9\x58\x55\x5d\x84\x05\x1a\x02\xc9\x97\x49\x87\xa5\x7c\x87\x27\x81\x8d\xc3\x50\x50\x1d\xe4\x8b\xcc\xb3\xcc\x63\x7f\xa5\xdf\xad\xbf\xec\xe9\x72\xb6\xe6\xe5\x31\x79\xb7\x3e\xfa\x70\xfd\xc6\x42\xe5\x86\xee\x3a\x3a\x27\x7d\xcd\xd4\x8f\xd6\xce\x9f\x73\xed\xa3\xd1\xaf\x26\x99\xab\x3a\xf4\x00\x21\xd2\x2e\x82\x8e\xc5\xaa\x86\x1b\x72\x08\x29\x88\x91\x78\x56\xf6\x18\xd1\x88\x03\x19\x78\x66\x68\x20\xd9\x03\xb6\xed\xa9\x9a\xc7\x8a\xce\xf3\x83\xba\x3b\x6f\xaf\xef\x03\x57\x58\xf5\x4b\xde\x6b\x47\xcd\xbe\xb3\xf8\xe0\xd5\xc3\x45\xfe\xec\x74\x9b\x7e\x65\xf1\xa0\x9d\x1b\xd6\x76\xaf\x7d\x2f\xb9\xde\xeb\x13\x90\x67\x01\x0a\x38\x01\xca\x10\x78\x44\xc8\x98\x3a\xd0\xc3\x20\xb2\x58\x83\x60\xb1\x1e\x88\xae\x1e\x22\x51\xf0\x49\x12\x98\x21\xcf\xcb\xe8\xaf\xa1\xca\xe6\x77\xff\x75\xe2\x81\xbd\x0a\xa7\x54\xc3\xef\xf6\xaf\xd8\xe1\xe3\x70\xf5\xfa\xf3\x6b\x37\xb7\xaa\x92\xab\xd0\xc8\xc2\x6f\x8c\x5b\xbd\xb3\xd2\xbc\xf5\xf7\xe4\xd4\x94\x47\x4f\x9f\x9c\x9b\x5c\xfc\x59\x0c\xcd\xdd\x0d\x9d\x9e\xa4\x3e\x96\xd7\x0f\xea\x39\x59\x85\xe3\xf5\x59\x55\x36\xdc\xde\x95\xe7\xda\xb8\x1f\xd7\xbd\xe1\xee\x91\x49\xff\xca\x33\xc3\xfb\x02\x55\x7f\x56\x5a\x5c\x79\x2c\x69\x73\xbe\x5c\x35\xbb\xbf\xe2\x9f\x3d\xb0\xb9\xfa\xe4\x94\x01\xd2\xb5\xa5\xc7\xe3\x6c\xbd\x1f\x66\x5e\xa7\x39\x71\x4b\x20\x70\x48\x27\x36\x23\xe2\x7f\xfe\x93\x8f\x2c\xcf\x40\x21\x6f\xc4\x50\xe5\x49\x1d\x72\xa4\x88\x59\x5e\x03\x0c\xc0\x31\xf2\x75\x16\xfa\x50\x14\x12\x28\x70\xbc\x31\x75\xd7\x17\xeb\xee\xd7\x1f\x81\xb7\x77\x55\x57\x64\xff\xe6\xc0\xdd\x41\x7f\xee\x0a\xeb\x9e\x2f\x5d\x8a\x5e\x90\x5e\xa0\xc6\x97\xf9\x92\x9b\xf3\x22\x8e\x94\x49\x43\xb5\x1d\x8b\x45\x58\xd7\xd4\xc8\x96\xa9\x08\x2b\x1c\xc1\xca\x92\xa9\x62\x8a\x0a\x45\x3a\xc4\x21\x8f\xf8\xd0\xb0\x38\x49\x12\x10\xf1\xbc\xe9\x0d\x55\x44\xe9\x68\xfe\xd7\xd3\xda\x4d\x37\xbb\x7c\x9d\x2e\x8d\xd9\x9f\x7e\xa5\xc5\xad\xf5\x7d\xce\xd6\x78\x75\xd1\x37\xd7\xcb\xa4\x26\x79\x41\x35\xe0\x21\x92\x79\x2d\x56\x1d\x86\x35\x2d\x11\x23\xc8\x62\x92\xa0\xfd\xc0\x64\x23\x53\xa3\x34\x93\x63\x62\x8d\x80\x1a\x07\x74\x4e\xe7\x1d\x85\xd5\x60\x62\x27\xcf\xff\xd3\x6b\xc3\x7a\xb7\x18\x30\xf5\xbc\x4d\x7e\xdc\xbc\xca\xd2\x95\xa7\xd6\x9e\x5a\x38\xf1\xf2\xe8\x97\xde\xff\x7d\xfc\xaa\x55\x97\xe5\xe4\xce\xf3\x38\x9d\x30\x2d\x2d\x76\x15\xa0\x42\xd5\x08\x34\xc1\x00\x71\x80\x79\x13\xd9\x48\xf6\x0d\x5e\xb1\x81\xe7\x71\x74\xcc\x90\x24\x88\x75\xd1\xb4\x8d\x38\x86\xcf\x1b\xc7\xac\x76\xcb\xde\x5c\xff\x79\xfe\xc1\x79\xaa\xaf\x29\xdf\xac\x60\x8e\xf1\xdb\xc8\x72\x2f\x3d\x29\x92\x5e\x7b\x72\xd8\x6a\xfc\xe1\x89\x79\x32\xaf\x28\x93\xd0\x38\x08\x8b\x55\x55\x01\x08\x01\x74\x44\x92\xf0\x34\x0f\x85\x14\x6d\x8b\x88\x55\x1d\x6c\xb9\x6a\xe0\xfc\x4f\x2a\xc0\x10\xf0\x6e\x1c\xf3\x18\x01\x85\x73\x13\x63\x68\xe2\xb2\xad\x3f\x9e\xdb\x37\x7d\xe6\xac\xdb\x55\x2b\xc6\xf6\xc4\xf9\x05\xaa\x31\xc5\x16\x34\xcf\xd5\x77\x6c\xdf\x3d\xb3\xcf\x9f\x19\x90\x5c\x1a\x56\x9e\x44\xd0\x64\x00\xd4\x20\x00\xd0\x08\x29\x9d\x16\x43\x84\x4d\x07\x8b\x8c\xaf\x53\x8a\x2c\xab\x5e\x28\x6b\xbe\x15\xd8\xae\xe0\x60\x3b\x64\x81\x90\x40\x9e\x65\xe8\xa7\x9b\x3a\xcc\x1d\x91\xad\x6b\xab\xf6\xd5\xea\x94\x6e\xf3\xdb\x8a\x77\x1f\xaf\x19\xf0\xee\xd0\xca\xaf\x57\x38\x74\xed\xd1\xc5\x6e\x65\x33\xbf\x78\x95\xd0\x38\x64\xcc\xb2\xbc\x2a\x1a\x36\x17\x10\x2c\x2f\x28\x86\x6a\x59\x4e\xc0\x05\xb4\xcc\x68\x22\x45\x71\x34\x4d\x51\x3a\xe6\x75\x46\x37\x1c\x86\x0a\x81\x87\xd4\xe7\x8d\x63\xf9\x92\x0b\x97\xe7\xaa\xdd\x3e\xbd\x3f\x31\xbd\xf0\x99\xe5\x8d\x5b\x8f\x6c\x3b\x0c\x5e\xef\x9f\x12\x57\xd8\xb7\xbf\xc8\xd0\x56\x83\x33\x0f\xfb\x49\xcc\x24\x49\xd1\x5e\xc8\x72\x16\x14\x64\x2b\xc6\x66\x68\x4b\x3a\xfb\xbf\x78\x0d\x93\x86\xb2\x19\x98\x48\x12\xbd\x40\xe1\x68\x03\x71\x88\xf5\x20\xe4\xff\x45\xcb\xf8\xfc\x7c\x7a\xe6\x8a\x0d\xa9\x6d\xdd\x37\x1b\x55\x1e\x77\xf5\xeb\x7a\xeb\x5e\xea\xb9\xf4\x95\xba\x0a\xa5\x3f\x3a\x3e\x78\xce\xdc\xb6\xa7\x77\xf4\x3d\x9f\x64\xae\x76\x51\x88\xa3\x88\xe0\x2d\xd5\x26\x02\xd7\x72\x35\xc4\xc7\xae\xa0\x8b\x8a\x2b\x91\x36\xa1\xf9\x52\x18\x04\x36\x63\x3a\x3e\x82\x91\x0a\x28\x83\x74\xa9\xe7\x8d\xe3\xcf\xbe\xc4\x86\x23\x39\x0a\x76\x98\xdb\x8f\x5c\xbd\x7b\x5e\x7a\x83\x57\xee\x97\xd9\xe1\x30\x4d\x77\x37\x0c\x57\x66\x6d\xd7\xb2\x40\xe6\x01\x0c\x09\xed\x99\x8f\x90\xc0\x30\x1c\x61\x63\xcc\x59\x9e\xc4\x52\xb2\xeb\xf2\xaa\x28\xf1\x1e\x09\x91\xcd\x29\x86\xed\x18\xc0\x92\x68\xca\x60\x74\x56\xd5\x8d\xf0\x6f\xf2\x93\xcf\x14\x63\x85\x66\xb6\x2b\x54\x63\x45\xdc\x78\xaf\xd3\xa6\xcf\xfe\x45\xc7\xee\x9c\x7d\xb0\x6e\xea\xda\x3f\xee\x9f\x7c\xf3\x49\xbe\x1f\x99\xd5\xcb\x93\xdb\x3a\xe1\xb1\x2f\x70\x54\x4c\x68\x51\x2c\x28\xa2\x0e\x1c\xc9\xf1\x24\x3f\x44\xb2\xe2\x84\x96\xe9\x40\x97\xc5\x74\x40\xc6\x86\x6c\xf9\x9e\x0d\x7c\xdd\x0b\x5c\x94\xc1\xe2\x55\xbf\x35\x79\x2a\xaf\xba\x7e\xf7\xf2\xed\x17\xbf\x33\xef\xef\xea\x54\xf4\xfc\xe7\x85\x8f\x7c\xfc\x83\x3f\xe7\xc9\xe0\xc5\xf5\x8f\xfe\x5e\x71\xfb\x33\x2f\xd9\xbd\xda\xd3\x0b\x4b\x8a\xf4\x2e\xf9\xb0\xf9\x27\xd0\x7e\xb5\xf5\xcf\x03\xaf\xec\x96\xde\xf9\xe6\xb0\x97\xfb\xdb\xcf\xea\xe5\x2b\xfa\xe8\x54\x72\x1d\x17\x60\x19\x93\xa2\x6e\x98\x3c\xcd\x68\x71\xc0\xb3\xb2\x2b\xc7\xbe\x8b\x78\x56\x95\x81\xed\xd9\xba\xc6\x05\xa2\xec\x05\xb2\x6f\xe3\x20\xe6\x45\x87\x88\x12\xef\x70\x64\xed\x3e\xb1\xe8\xfb\xfc\xd2\xa3\x13\x0a\xfd\xb4\xa8\xec\xaa\x3a\x33\xd3\xd2\xd9\x21\xdb\x96\x8f\x99\x6a\xf6\xdf\x0e\xce\xe6\x5b\x90\x79\xe4\x4f\x62\x1a\x2b\xc3\x56\x6c\x1c\xc7\x0c\xa4\x45\x06\x9a\x86\x2b\x49\xb6\x22\x83\x38\xd2\xe2\x00\x04\x02\x4f\x5a\x14\xe4\x34\x5e\x55\x59\x9f\x14\x0d\x83\xf4\x09\xe1\x79\x2f\x28\xf2\xeb\x6f\xec\xd2\xab\xd6\xef\xe7\x73\xee\x6e\x50\x71\xcb\xde\x0e\x5f\x70\xe3\xaf\x34\xa8\x32\xa3\xe1\x6b\x43\x52\x87\x93\x7e\x7a\x72\x77\x53\x79\x92\xe3\x78\xdf\x92\x09\x43\xb4\x43\x52\x15\x6d\xcd\x34\x75\xcd\xf6\xc5\x58\xf3\x1c\xd6\x74\x34\x26\x08\x34\x82\x63\x69\x97\x08\x2c\x88\x05\x1c\xb8\x09\xa4\xa0\xde\x5a\x57\xf2\xeb\xc1\xcb\x2a\xd5\xb2\x7f\xbe\xd4\x63\xdb\x93\xb6\x4b\x26\x6c\x5b\x53\x6c\x1c\xbf\xe6\xf3\x81\x05\x7f\x35\x2f\xbe\xbb\xa9\x69\x92\x1d\x97\x43\x04\xe9\x05\xb2\xa6\x43\x0e\xf1\x91\xad\x84\x0c\x76\x55\x8b\x52\x2d\x93\x62\xcc\x38\x0a\xec\x88\x0e\x58\x8e\xf6\x90\x47\x98\x58\x95\x2c\x3e\x03\x9e\xfb\x86\x23\x4f\x2c\xdb\xf4\xa0\x42\xf7\x57\x53\xda\xee\x9e\xd0\xb7\xcf\xf8\xd9\xed\xb5\x89\xc7\x2a\x2d\x6a\xb0\xfc\xee\xfb\x65\xc8\xb3\x63\xfa\x24\xd7\xa6\x2d\x53\x11\x09\x2a\x76\x22\x89\x83\x06\xa6\xed\x10\xe8\x40\x91\x68\xc6\x92\x45\x36\xa0\x78\xc5\x8f\x7c\xce\xc6\xb4\xe4\x53\x24\xa5\x50\x82\xa6\xf3\x09\x16\x97\x47\x66\xfd\x6c\xc5\xd0\x62\x9f\x57\xef\xdd\xa8\xb7\x70\x68\xee\x5b\x5d\x4a\x43\xaa\xcc\xbe\xd6\x17\x2b\x1f\xee\x32\x21\x9e\x75\xac\x68\x9b\x24\x47\x75\x8d\x00\x54\x8c\x55\xc5\x40\xb6\xe8\x8a\xbc\x02\x78\xca\x67\x6d\x9d\xb4\x74\xd1\x55\x3c\xd6\xc5\x24\x34\xe4\xc0\x46\x2e\x86\x92\xea\x1b\x84\x1b\x24\xae\x54\x4a\xfe\xfa\xcd\xeb\xdb\xcf\x65\x1f\xf6\xd9\xea\xc1\x35\xc8\x6a\x69\xf6\xfd\xbd\x69\xb3\x5e\xff\x51\x3c\xb5\xcd\x2d\x66\xcf\x6d\xd6\xe9\x78\x92\xa3\x07\x83\x45\x14\x4a\x0e\xf6\x18\x52\x25\x24\x87\x12\x62\x85\xd5\x22\x83\x66\x0c\xc6\x0c\x91\x1f\xe8\xa1\x4d\xb1\xac\x84\x4c\xc2\xe2\x49\x3b\x26\xc9\x04\x35\x61\x8f\x9b\x1d\x8f\xfd\x72\xa4\xa2\xf7\xa8\x44\xaf\xa6\x9b\xe6\xe7\x68\x72\xea\xa7\x2e\x74\xf9\xe6\xc1\xbe\x51\x29\xc5\x7b\xe6\x5e\x3d\xef\x46\x92\x41\xf7\x32\xb2\x45\x2c\x0a\xba\x27\x85\xc0\x0f\x2c\xa4\x05\x4e\x8c\x0d\x36\xe6\x48\x55\xa7\x59\x86\xd7\x15\x60\xe8\x94\xa7\xd8\x7e\x60\x70\x20\x70\x35\xf6\xf9\x23\x9f\x1c\xf5\x27\xf5\x67\x03\x6a\xe8\xe7\x95\xb8\x0d\x4e\x85\x9c\x1f\x1c\xcb\xc2\xf6\xee\xf7\xd3\xb5\xd5\x85\x99\x56\x0d\x1b\xb7\x6e\x7c\x24\xc9\xc1\xce\x66\x23\xdd\x24\x0d\x18\x8a\x40\x16\x5c\xa8\x2a\x0a\xa3\x70\xb4\x44\xa8\x94\xc0\x4a\x92\x22\x46\x00\x78\x9e\x22\x43\x55\xc7\x30\x0a\x94\x50\x0d\x12\xe7\xcf\xa9\x55\x7f\x58\x3e\x85\xff\xb4\x61\xd7\xd6\x20\xad\x69\xb3\xa2\x7f\xd6\x7b\x65\x54\xce\xf9\xe1\xba\xaa\x7d\xb7\x9f\x7d\xb9\x7a\xfa\x9f\x49\x16\x16\xf6\x14\xca\x94\x5d\xda\x26\x42\xc2\xf1\x03\x99\x91\x08\xcf\x36\x23\x1a\xf8\x24\xa9\xa8\xa6\x2d\xf1\xa4\xe2\x41\x9d\xe1\x78\xe4\x90\x01\x17\xa9\xa6\x92\xc1\xa4\xb6\xe0\x97\x55\x1a\x72\x0b\xdc\x6a\xbd\xcc\xa6\xf6\xd2\x17\x6e\x71\xd1\xc1\x7c\x1b\x5e\x3d\xd8\xb4\xcd\xe6\x1c\xaf\x7d\x96\xfd\xe4\xe0\xcc\x43\x78\x13\xa6\x7d\x47\xe1\x81\x61\x12\x8a\x18\x60\x0b\xb2\x51\x18\x6a\xae\x4e\xdb\xae\x48\xf8\x16\x1d\xe3\xc8\xa0\x7c\x40\x53\xa6\x86\xb9\x90\xe2\x14\xd2\xd5\x7d\x4e\xcd\x20\xed\x9f\x1f\xf4\xe1\x9b\xb5\x8f\xb4\xfc\xbd\xe0\xc2\x92\x88\x1c\xd7\xec\x48\xad\x26\x95\x7b\x17\x7a\x6d\xd7\xc7\xb0\x59\x9d\x4e\x1b\xe6\x0f\x98\xf0\xcc\x4b\xb6\x31\x5e\x9f\xfb\xc1\x4b\x4a\xb1\x0e\xdd\x46\xd5\x7d\x40\xd5\xfc\xee\x60\xd5\x49\x3f\x9b\x65\x37\x76\x50\x7f\x53\xa6\x0c\x7e\x20\xff\x99\xdc\xf6\x07\x2b\xf2\x32\x21\xd3\x86\x2b\x11\x38\xd0\x79\x22\xa6\x3c\x07\x29\x96\x45\xc5\xa4\x17\x06\x26\xa3\x20\x10\x11\x91\xc7\xa9\x0c\x15\x9b\x31\x47\x00\x94\xc1\xbf\xc9\x39\x71\x48\x9e\xfc\x2d\x72\xcc\x3f\x02\xaa\x5e\xeb\xf9\x54\x19\xb3\xf9\x78\xbb\x2a\xef\x77\xbd\x3f\x9a\xe9\xf0\x54\x3d\x90\x5f\x6b\x94\xe4\x8d\x53\x9b\x31\x02\x2c\xf3\x91\xa3\xba\x9c\x29\x31\x21\xe2\x74\x8a\xf0\x69\xac\x9a\xaa\xcb\xb2\x6c\xc4\x4a\xb4\x4b\x28\x58\xa5\x79\xc5\x90\x30\x69\x44\x19\xf0\x47\x5f\x59\xf3\xd1\xbe\xe1\xe7\xff\x68\xba\x85\x2b\xb4\xb2\x61\xa1\xa9\x57\xb6\x19\x9d\xaa\xff\x5e\xe5\xc4\xf5\x69\x3f\xd5\x1c\xd7\x65\xb2\xdb\x35\xc9\x00\x4d\x1b\x78\x34\x43\x8b\x31\x0e\x4d\x81\x64\x15\x3f\x72\x2c\x39\xa2\x75\x8c\x04\x12\x31\xd0\xf7\x24\xac\x61\xdb\x54\x08\x26\x14\xf8\x88\x93\xc1\xdf\xa6\xe8\xcf\x44\x77\xfc\x51\xd3\xf7\x36\x76\x7b\xb5\x44\x4a\xa7\x8f\x2f\xe7\x99\x32\xab\xc9\xa5\xd7\x07\xbf\x35\xa0\xf7\xcc\x1f\x2e\x54\xfc\xb8\xcf\x4a\x6f\x44\xe6\xdb\x41\x89\x17\x0b\x79\x8a\x0b\x3d\xd7\x17\x44\xc9\x84\x4a\xa4\xe9\x2c\x1f\x21\x9e\xa6\xd5\x90\xf1\x5d\x5e\x25\x64\xcd\xf0\x1c\xdf\xb2\x80\xe5\xc6\xae\xce\x91\xac\x92\xa0\xad\x37\x70\x96\x35\x72\xcc\x82\x0b\x2b\x0f\x67\x6b\x85\x4e\xd4\xfe\xed\xfe\x77\x85\x4a\x67\xef\xec\xff\xd8\x6c\xde\x91\x07\x23\xf8\x0d\x97\x32\x7f\x75\x4e\xdc\xdd\x76\x99\x38\xa0\x99\xd8\x84\x58\x8b\x42\x41\x63\xa4\x58\x57\x43\x4f\x65\x25\xd7\x41\x34\x62\x22\x5e\x73\x7d\x52\x27\x58\x9e\xf5\x04\x3e\x50\xbd\x44\x12\xdb\xb7\xba\xb4\xae\xd7\x79\xea\xe5\x69\x3f\xfb\x95\xa7\x5f\x1f\xf6\xe9\xb5\x65\x3f\xbc\xf3\x75\x5a\xbb\xd2\xd9\xdb\xcf\xcd\xe7\x3a\xdb\xef\x65\x9e\x27\x34\xf1\xa2\x0f\x0f\x42\x02\x70\x0c\x30\x30\x25\x04\x0c\x8b\xa1\x19\xf3\x21\x41\x86\x9c\x85\x29\x12\x93\xa1\x12\x70\x3c\x94\x64\x10\xe8\x9e\xe4\xd3\x34\x14\xb4\x0c\x68\x8f\x4e\x9f\xaf\x9c\x32\x5e\x68\x32\xf9\x4e\xff\x92\xd6\xdb\x75\x73\xbe\xb3\xbd\xf6\xd4\x0f\xb2\xb6\x3d\x79\x67\x8b\x7e\xf6\xda\x37\x33\xcb\x1b\xcf\x3e\x5d\xb8\x72\x43\x88\x57\x4c\xc9\x5e\xa4\xc0\xc6\x35\xde\xd3\x41\xa3\xf2\x50\xc7\xb7\x9c\xb7\x4e\x7c\xa0\x54\x88\xbf\x9f\xf2\xf0\xf3\x03\xcf\x3e\x3d\x79\xdd\xc5\xc2\x87\x66\xf5\xf8\xfc\x56\xad\x8f\xc7\x73\xfd\x2a\x66\x6d\x5a\xa4\xf5\xb6\xa6\x5f\x18\xe9\x1b\x1e\x39\x43\xd2\x4f\xd4\x11\x9f\x29\xf7\xb6\x34\x61\x4b\x83\x77\x1a\xfe\xf4\xbb\x3c\xff\xc3\xbd\x07\xba\x1e\x6f\xf7\xf2\x99\xdb\x65\x2e\xbd\x7e\x7e\xbc\x5d\xaf\x43\x8e\x2a\x4e\xe6\xf7\xb9\x13\x13\xbe\xc9\x8a\x02\x0c\x2b\x8c\x42\x89\x73\x24\xc3\x54\x0d\x5f\xf1\x4d\x17\x52\x84\xa1\x31\xb6\x24\x38\x8a\xa4\x20\x40\xc9\xd8\x46\x92\x48\xbb\x96\x16\x27\x58\xf6\x4f\x6f\x5d\xf6\xc9\xb2\xcf\xaa\xed\x18\xd4\xe3\xf4\x2f\xbb\x06\xfc\xbe\xab\xc7\xaa\xf1\xf9\xa5\x79\x5b\x1f\x2e\x7a\xa8\xde\xbd\xb3\xcb\xca\xfc\x25\x3e\xb1\x48\x01\x76\x09\x13\x1b\x11\xeb\xca\xc0\x88\x61\xa0\x62\x64\x28\x1e\x17\xd2\x86\xa6\xba\x31\x6b\x04\x2a\x2d\xf9\x16\xaf\x68\x71\xcc\x9a\x04\x69\xb3\xc4\xdf\xb5\xc8\xfe\x16\x10\x3e\xea\xd5\x66\xd0\x3b\x73\x7b\xef\xed\x71\xf5\xd5\x3a\xbd\x36\x75\xc5\xb5\x7a\xaf\xdb\x52\xce\xee\x71\xf3\xe4\x5b\x85\xf0\x98\x6b\x3b\x93\x2c\x09\x11\x88\x31\xa9\xb3\x20\x16\xb1\x1a\xf8\x56\x68\x04\xa2\xcf\x61\xc4\x18\x1a\xaf\x1b\xd0\x16\x58\x28\xe9\x62\xc8\x52\xd8\x8f\x10\x8a\x2c\xc0\x3a\x5c\x82\x2b\xcc\x95\x13\xd5\xc6\xbc\xff\xf5\xed\xed\x33\x56\x93\x63\xc7\x3b\xed\xa7\x4c\xec\x3c\x66\xfd\xcc\x82\xcb\x16\x0d\xa2\x1f\x47\x7d\x07\x0d\xbb\x92\xdc\x80\x10\x99\xa1\xe8\x08\x2e\x32\x35\x24\x4b\x0e\x06\x9a\x0b\x3c\x5b\xb6\x28\xc3\x96\xe3\x40\x92\xa4\x40\x63\x28\xc3\x62\x61\xc0\x51\x9e\x86\x25\x8c\x95\xf8\xf9\x80\xf0\xf3\x87\xd3\x2e\x78\xb5\xfb\xec\x2c\x57\x4b\x2a\xb1\x4f\xab\x33\x60\x58\xf7\xf6\xcd\x8e\x34\x1b\x5f\x68\xf4\xbe\xe1\x03\x6b\xaf\xfa\xe6\x8d\xe4\x7e\x65\x4a\x10\x91\xe3\x80\x38\x86\x92\x8d\x80\xc4\x21\xac\x59\x16\x85\x90\xe9\x58\x9a\x22\x2a\x98\xe5\xe3\x80\x83\x06\x29\xab\x3e\x1d\xbb\x8c\xcb\x69\x7a\xe2\xbb\x40\xa1\x72\xcb\x26\x15\x3a\x56\xeb\x93\x82\x4b\x5f\x2c\x5a\x62\x40\xd9\x1c\xf0\xcb\xcb\x3f\xec\x4a\x6f\xb9\xac\x5e\xf7\x4a\xbb\xc2\x32\x73\x97\x25\x99\xdb\xcf\xf5\x68\x43\x76\x49\x42\x27\x05\xdb\x11\x3d\xe4\x40\x4b\x44\x64\x44\x98\x3c\xe1\x4a\xa6\x6c\x71\xbe\x64\x99\x72\xc0\x61\xdf\x74\x29\xc1\x73\xdd\x04\x57\x72\xfc\xe3\x93\x46\x77\x9b\x6c\xbe\xbd\x55\x79\xe3\x14\xb3\x3f\x50\x66\x8e\x69\xd3\x73\xfb\xb9\xb1\x39\x50\xe1\x01\xe9\xd3\xfb\xf4\xc8\xfc\xce\x70\x42\xe3\x50\x5c\xd5\x82\x08\x12\x0a\x65\xb0\x34\xad\x0b\x90\x20\xa0\x61\x9a\xb4\x88\x23\x85\x01\x4a\xc8\x72\x50\xa1\x62\xc2\x00\xa1\x27\xba\x84\x69\x52\xff\x12\x95\x7e\xd6\x38\x8e\xba\x5d\x86\xe5\x6f\xde\xbe\xf0\xa4\x71\xb3\x3a\xbc\xb0\x7e\x5d\x9b\x9a\x1b\x73\x55\xee\xf6\xcd\xa3\x32\x65\x36\xae\x58\x57\xaa\xbd\x57\x2a\xc9\x3b\x71\xba\x8b\x4d\x9f\x0c\x43\x86\xf1\x65\x9b\x72\x23\x8b\xf5\x1d\x85\x26\xb0\x11\x5a\x22\x41\xb9\x1e\x20\x62\x8c\x35\x4e\xd0\x55\x87\x96\x09\x5d\xd5\x32\xb8\x0b\x34\xdf\xd1\x6e\x58\xf5\x6f\xaf\xde\x2a\x51\x60\x7b\xb6\xf7\x6a\x6a\xbf\xbd\xd5\xbc\xff\xf4\x68\x74\xcf\xdf\xb6\x75\x7c\xe0\xe6\xaa\xdd\x29\xb9\x5f\x9a\x07\xc8\x87\x91\x65\x40\xc7\x72\x64\x1b\x3b\x0c\x54\x5d\xe8\x18\x84\x46\xb2\x06\xef\x53\xb4\xa1\x1b\x41\x8c\x55\xd1\xa5\x59\xd1\xe6\x42\x07\xd1\x8a\x92\xb8\xd9\x5a\x6f\xe1\x7c\xd2\xfc\x11\x07\xf5\xe5\x55\x2d\xd3\x66\xdc\xe9\x9b\x73\xe7\xce\xe5\x05\x7e\x3c\xdb\xbd\xdf\xd3\xf4\x97\xaa\x77\x2c\x5a\x39\xc9\xab\x57\x96\xad\x30\x54\xe8\x6b\x81\x4b\x72\x42\x84\x78\xd3\x85\x40\x57\x91\xa4\xb3\xae\xae\x02\x9b\x88\x54\x8a\x37\x0c\x60\x45\x12\x11\x20\x81\xa1\x22\xe3\xf9\xd4\x32\xa4\xe9\xc7\xd7\xea\x36\x5a\xf2\xcd\xb2\x37\x6e\x7d\xbe\xe1\xc2\xfa\x7d\x55\x0f\xa5\x2f\x98\xd9\xe8\xe5\xdb\x5d\xd2\xdf\x2c\x9f\xda\xa2\x91\x9e\xdc\x2f\x4d\x60\xc4\x53\x58\x81\x0c\xa6\x78\x25\xb0\x10\xad\xba\x30\x36\x74\xe8\xc5\x0a\x4d\xc4\x3a\xa7\xb9\xac\x14\x31\x72\x08\xc8\x88\x07\x91\xef\x31\x9c\x98\xc1\xf5\x65\x69\xee\x56\xb4\x20\xbd\xf4\x21\x35\x17\x17\x8b\xa7\x77\x38\x3d\xf0\x51\xbb\x36\xad\x86\x75\x68\x79\xa7\x46\xfe\xe5\xa3\x87\x7f\xb7\xf3\x19\x73\x6a\x5c\x6d\x4f\xdf\xed\x3d\xc4\xb6\x6d\x7f\xaf\xd3\xba\xe1\xc0\xbe\x4b\xce\x0d\x5a\x19\x64\xe5\xf7\x4e\x89\xee\x97\xef\xd7\xfd\xc0\xd2\xe4\xd2\x33\x73\x02\xcf\x4b\xb6\x65\x52\xb6\x2e\x50\xbe\xa0\x01\x4c\x44\x8a\x14\x22\x13\x80\xc0\x12\x55\x21\xe4\x18\x03\x03\x37\xf4\x02\x53\xc6\x61\x24\x91\xc4\xdf\x90\x2e\xff\x96\xba\xfa\xa7\x39\x6c\x6a\xa3\x97\xb3\xa4\x3e\x8b\x61\x20\xca\x4c\xda\xdf\xdb\xa9\x03\x46\xe5\x2d\xac\x36\x3b\xf2\xc7\x99\x01\x03\x16\x35\xbe\xf1\x65\x83\x3b\x07\x8b\x36\x1f\x56\x7b\x4a\xd7\xcc\x97\xdf\x09\x8d\x0f\xea\x82\x6e\xba\x92\x6b\xa9\x0c\x63\x10\x02\x2b\x51\x06\x80\x26\x62\x20\x82\x28\x96\x02\x36\xf4\x3d\x5f\xb4\x6c\x3a\x8c\x5d\x99\x27\xa3\x88\xe6\x40\xe2\x3b\x5a\x87\x71\x75\x07\xce\x09\x3a\xdc\xcf\x33\xb7\x44\x35\x40\x10\x9f\x2e\x39\xa6\x7d\x11\xaf\xb9\x96\xa5\xcd\xb8\x2a\x05\x95\xda\x29\x99\x87\x5e\x24\x8c\x50\x9a\x8c\x78\x87\xb5\x0c\x5d\x62\x7c\x9f\x11\x74\x57\x8a\x2d\xd1\xd5\x08\xd7\x07\x3e\x88\x2c\x9b\x70\x7c\x8a\x8a\x19\xd5\x64\x7d\x42\xe7\x14\xdf\xd6\xb5\xc4\x4d\xc3\x2f\xb2\x7c\xbb\xea\x17\x2c\x56\x3c\xf2\xcb\xad\x13\xdd\xdf\x79\xb1\x19\x9d\xab\xf5\xa4\xf0\x2d\x6f\x4f\x04\x8e\xcc\x6f\x70\xaa\x49\x72\x51\xfc\x3c\xad\x2a\x64\x1c\x44\x30\x0c\x54\x88\x48\x4b\xc2\x34\x76\x10\x49\xc6\x91\x65\x8a\xb2\x40\xaa\xaa\xcb\xc8\x21\xa5\x6a\xba\xcf\x99\x3e\x46\x2c\xed\xc2\xe7\x5d\xfd\x8f\xb2\x45\x6e\x3d\x6e\x55\xe2\xfe\x5d\xa3\xce\xa2\xcb\x65\xc7\xad\xde\x74\xf2\xc3\x97\x73\x4d\x5a\xfa\x73\xc5\xa0\x43\x94\x57\xce\x93\xdc\xa6\x21\x4f\x01\xe4\x88\x3c\x09\xed\x98\x95\x68\xcb\x8f\x05\x96\x02\x58\xd7\x15\xe8\x93\x0e\x29\x70\x9c\x28\xe8\x11\xe3\x04\x2a\x76\xcc\x80\x8a\x15\x1b\x90\x7f\xd1\x66\xff\x5b\xfb\xf0\x9f\x46\x13\xa9\x29\x15\xb3\xbc\x97\xfb\x59\x54\xdb\x96\xdd\x5d\x53\xbf\xed\x94\x15\x7e\xbd\xe5\xe8\xfb\x0f\xac\xb2\x7d\x99\x0a\xee\xf4\x4f\xbf\x1a\x95\x6d\x1d\x7f\xfe\xda\xe2\xa6\x15\x32\xdf\x46\x4a\x0c\x4a\x08\x5d\x8e\x8e\xcc\xc8\x85\x94\xaa\x73\xac\x22\xab\xc8\x50\x09\x42\x8a\x2d\x0e\x84\xb6\x2f\x44\x90\x21\x44\xde\xb4\x29\x52\xe7\x1c\x86\x24\x23\x3e\x83\x9d\xae\xfc\x77\x57\x74\x3c\x38\x79\xc9\x81\x5c\x69\x59\x5b\xec\xb0\x17\x7e\xbb\xa8\x7d\xb9\x2d\x54\xf1\xc7\xd9\xd9\x5e\xfb\xd9\x4e\x56\xbe\x9e\xc9\xb5\xa7\xd0\x74\x44\xd6\x97\x55\x0a\xc6\xa6\x25\x04\xa6\xef\xd8\x8a\x66\x99\x48\x54\x64\x89\x0c\x90\x05\x0d\x2a\x0e\x54\x3a\x20\x35\xd3\xa5\xe4\xd0\x0a\xd5\x28\xb1\xf7\x1e\x1a\x74\x7b\xcd\xd1\xab\xb3\x2b\xcc\xcf\x37\xf6\xb5\x82\xa5\x2b\x8c\x2f\x52\xcf\xb9\x4f\x4f\xa9\x76\xf8\x4e\x87\x8d\x8d\x4a\x36\xf2\x33\xdf\xaa\x48\x3c\xa5\x30\x7c\x83\xf3\x43\x24\xd3\xa6\x6c\xcb\xb6\x13\x78\x82\xeb\x03\x53\x50\x45\xe8\xb0\x92\xe0\x12\x26\x17\x04\x8a\x65\x60\x4b\xb5\x49\x0e\x72\x2c\x91\x01\xc5\xcd\xee\x87\x93\xbb\x55\x6c\x9f\xe3\xf0\x21\xf6\x3a\x53\x59\xfd\xe1\xc1\x85\x11\xfd\x86\xa5\xa6\x9e\x27\x53\xea\x4c\xaf\x55\xe8\x7a\x88\x93\x4c\x92\x68\x5a\x81\x48\x63\x12\x46\x9c\x67\x04\xa6\x07\x54\x0a\xa8\xac\xac\x6b\x26\xa7\x00\x5a\x02\x9e\xa2\x91\x61\xc8\x29\x9c\x6c\x5a\x26\xa3\x09\xa1\xfe\xd7\x2e\xe9\xbf\x5d\xe1\x9f\xda\x75\xa9\x29\x59\x3f\xc9\xf2\x1f\x00\xcf\xe6\xaf\xae\x6a\xdb\xad\x7f\xcd\x9c\xce\xac\x7e\xdd\x27\x9d\x9c\xfa\xf3\x1f\xbb\xb2\x8e\xc9\xb9\xb4\xda\xdb\xaf\xb5\x9d\xf0\xd1\xe6\x6f\x9b\xdf\x4c\xae\x4d\xc5\xa1\x6f\x47\x08\x8b\x8a\x68\xfb\xaa\x4a\x29\x64\xac\x22\xec\x12\x0e\x94\x1d\x24\x1a\xb6\x0e\x7c\x4e\xe7\xe2\x90\x12\xa1\x1a\x4b\x10\xc5\x88\x77\x13\xdb\x54\xc7\x13\xd4\xee\x57\x77\xa5\x0e\xa8\x7a\x6c\xf3\xd8\xfc\x5c\xee\x8f\xe7\xd7\x3f\xf8\x6b\xa1\x8a\x6f\x3f\x9d\x90\xb3\x40\x2e\xcb\x8d\x33\x4f\x71\x9a\x30\x5b\x4b\x3e\x65\x28\x94\x01\x58\xde\x88\x65\x41\x47\x48\x0e\x6c\xcd\xa2\xc2\x50\x20\x34\x4e\x25\x65\x47\x8b\xe8\x58\x56\x05\x3f\x0e\x4c\xac\x9b\x0e\xc8\xa8\x7f\x5d\xad\x7c\xad\xe1\xd3\x87\xfc\xb0\x74\xff\x8e\x3e\x47\xae\xaf\x1b\x5a\xa1\x4c\x87\x3c\x7b\x1a\x14\x1f\xbc\xa4\x5c\xfe\xef\x72\xd4\x6f\x3b\x62\x63\x92\x7b\xa4\x2e\x66\x39\x8d\x26\x94\x50\xb1\x62\x59\x74\x22\x96\xf3\xfd\x38\x76\x34\x51\xf0\x03\x14\xd9\x12\x62\x6c\x55\xa1\x41\x20\xaa\x94\xc5\x08\xa2\x8c\x98\xc4\x5f\x7b\xee\xa3\x0e\x79\xaf\x1e\xf8\xba\x61\xbd\x5b\xc3\x2b\xc8\x27\x7e\xed\x50\x89\x3a\x5d\x78\xf2\xb7\xdb\x5b\xed\x4f\x5d\xfc\xd2\xeb\xc3\x2f\x67\x5e\xe1\x27\x71\x0b\x0c\x68\xd0\xf6\x42\x00\x44\x22\x64\x65\x9b\x61\x45\x9d\x16\x1c\x1a\x40\xda\xe7\x02\x87\x91\x04\x8f\x67\x64\x93\x77\x7c\xd1\x56\xc8\x08\xda\x96\xfe\xd7\x36\x4b\x7a\xee\xff\xae\x93\x94\x9a\xf2\xde\x4b\x2f\x14\x7c\x96\x14\xa1\xdf\xf8\x3f\xc1\x99\x6c\x0b\x2f\xd7\x72\xab\xb3\xfc\x86\x82\x2b\xb4\xe2\xdf\x2d\x22\x51\xc7\x96\x3b\x7f\xaf\x3b\xeb\xe0\xfc\xb7\xab\x24\xf7\x2d\x4d\x23\x34\x78\x64\xea\xae\xc6\x21\x5b\x0e\x6d\xd7\xa7\xb1\xc5\x73\xb6\xc7\x5a\x21\xb6\x09\x17\xd1\x46\x2c\xbb\xd8\x80\x86\x19\x51\xbe\xe3\xc6\x4e\x06\x92\x7c\x8f\x91\x65\x34\xd9\x7d\x7d\xc1\xd9\x7d\xa5\x4e\x7c\x58\x79\xc2\xa9\xb7\xd7\x96\xbc\x5d\xea\xe7\x69\x05\x1a\x7d\x20\xe8\xd3\x7a\x14\x1f\x94\x64\x2a\x68\x5e\x8d\x02\x1f\x9a\x02\xab\x05\x3c\xab\xeb\x48\xe3\x04\x53\xc2\x6e\x18\x32\x8e\xaa\xd1\x9a\x4c\xd1\x36\xa5\x40\x9d\x45\x6c\x04\xc4\x98\x31\x22\x3a\xf1\xb1\xd1\xce\x9e\xea\xb0\xaf\x9a\x64\x4f\xd9\xf7\xe8\x2d\x77\xc5\xa1\xe6\xeb\xde\xa9\x5b\xaf\xf6\xfc\x31\x0b\x0b\xd4\x3b\x67\x75\x02\x3b\x33\xbf\x5f\x91\xf0\xd8\x10\xf1\x54\x84\x43\x9b\xc4\xa4\x8a\x08\x47\x10\x79\x93\x8c\xc9\x18\xda\xaa\x68\xb0\x7e\x88\x62\x03\xe9\x11\xd4\x74\x2f\x20\x3c\x18\x03\xc7\x77\x32\x80\xd3\x6e\xea\xbe\xa9\xbc\x32\x27\x6f\x96\x57\x1e\xaf\xea\xda\xaa\xfa\xab\xfb\x47\x3e\x7e\xb8\xa6\xce\xad\xb0\xc3\xe4\x6a\x15\x7f\x9b\xf3\xc1\x8e\xf9\xc9\x0d\x3c\xa6\x0b\x09\x42\x13\x1c\x89\x0f\x2d\xd5\xd0\x8c\x30\x94\x24\xe5\x7f\x5e\x83\x73\x78\x52\x95\x98\xd8\xa7\x78\x9e\x21\x7c\x1c\x73\x6e\xa4\xd1\x50\xf5\xc4\xc4\x81\xa7\x00\xfd\xe6\x9e\x82\xa9\x77\xfa\x75\x79\x61\xfd\xf7\x45\x4b\xbf\xdf\x6c\xfa\xf6\x19\xb3\xd5\xcd\x27\x5b\x04\xab\xf6\x2f\xba\x55\xeb\x64\xe6\x79\x6f\x12\x5f\x96\x5d\xcd\xe6\x3c\x4b\x93\x29\x4b\xc1\x92\x0f\x18\x85\x21\x55\x5b\xd3\x75\x41\x04\x9c\x40\x41\x8d\x22\x1c\x52\xd7\x29\x8b\xb2\x48\x3f\x46\xaa\x8d\xd4\xc4\x5f\x7b\xcf\x9d\x3a\x29\x8f\x97\xec\x2f\x79\xdb\x8e\x72\xc2\xe5\x7f\xde\xad\x52\xe6\xa3\x95\x3b\x8b\xe5\x3a\xf3\x43\x8f\x5f\xab\xbe\x3e\x25\x14\x93\x6b\x24\x82\xa3\xd0\x06\xa2\x49\x0d\x12\xb4\x1e\x33\x26\xa7\xc6\x10\x45\x3c\x69\x0a\x16\xe9\xf2\x9e\xe5\x18\x8c\x41\xeb\x72\xa8\x19\xae\x46\x99\xb6\x05\xfe\x36\x59\xdd\x9c\xeb\xbf\x6b\x4a\xa7\xa6\x0c\x7c\x39\x4b\xd6\x67\x73\xf0\xf8\xf7\x6a\x1d\x3e\x52\xb6\xc5\x0f\x75\x3f\xb5\x56\x5c\x9f\x25\x7d\xfa\x5a\xca\xea\x5c\xdd\x06\x37\x7a\x6b\x43\xe5\xd2\x1b\x67\xd7\xa8\x94\x5c\x32\x77\x1e\xf9\x1a\xa9\xd9\x34\x27\x45\xb1\x0f\x5c\x13\x72\x9c\xeb\xd9\x02\xa9\x32\x11\xcb\x21\x45\xf7\x78\x45\x93\x35\x51\x72\x04\x18\x32\x2a\xa1\x04\xac\x2a\x26\xee\x64\xf4\xac\x52\xbb\x55\xad\xca\x3d\xd7\xf4\xb0\x7e\xcc\xba\x77\x77\xe5\x5a\xef\xc0\x16\xcd\x2e\xec\x4e\xff\xe0\x61\xcb\x0a\x9f\x14\xab\x50\x35\xc9\x6c\xc5\x34\x86\x82\x44\xb9\x8e\x88\x2c\x97\x25\x55\xdb\xb7\x3d\xc7\x37\x42\xc3\xb5\x18\x93\x09\x25\x3a\xb2\x28\x8d\x95\x69\xa8\x33\x9a\x85\x25\x07\xb2\x51\x82\x56\x57\xaf\x4f\x53\x78\x65\x4d\xaf\x57\xbb\xd0\x03\x6f\x7d\x3b\xac\xc1\xa8\x31\x05\xf3\x0b\xbf\x56\x29\xf6\x79\x9d\x4a\x95\x16\xd8\xaf\xbc\xd8\x37\xc9\xcd\x97\x80\x23\x7c\x03\x3b\x32\xa7\x45\x34\x87\xfc\xd8\x8d\x71\x8c\x43\x9e\x56\x04\x5e\x71\x68\xc1\x8f\x1d\x31\x02\x36\x54\x10\xc1\x42\x5b\x53\x11\xa1\x25\xce\xbf\x79\x9f\x3e\xd9\x30\xfa\x60\xfb\xc7\x67\xfd\x3d\x2f\x8e\x7b\x6b\xec\xae\xd4\x5a\x2f\x9d\x7a\xbd\x66\xa7\xd7\x1b\x7c\x7e\x74\xca\xcc\x65\x2d\x33\xff\xa5\x13\x06\x1d\x5a\x50\x91\xaf\x29\x9e\x45\x60\x11\x29\xd0\x35\x28\xd1\x8c\x4c\x5b\xe5\x38\x05\x51\x02\xd4\x1c\xdd\x67\x78\x05\x42\x25\x30\x38\x9f\x70\x09\xda\xc9\x40\x3a\xea\xd3\xb7\xce\x6c\xcf\x7b\xa8\xc5\x11\xe6\xbd\xc2\xdd\x6b\xe5\x5b\x19\x8f\x79\xe7\xcf\x68\xd9\x83\xef\x7b\xfe\xf4\xd6\xc9\xb2\xbd\xe6\x83\xcc\x83\x0c\x12\xef\x55\xd3\x21\xcf\xbb\xaa\x4c\x2a\x8a\x6a\x99\x72\x64\xd9\x8e\x0a\x35\x8b\x51\x4c\x33\x12\x43\xc6\x30\x91\x1b\x38\x1a\xa1\x72\x40\xe5\x6d\x85\x60\x64\xf7\x2f\x3d\xc3\x7f\xef\x85\xfc\xd3\x90\x28\x35\xe5\xbd\x2c\x59\xaa\x3f\xdb\x53\x39\x94\x35\xbb\x34\xf3\x71\xbd\x45\x7c\xc9\xeb\x9b\xd9\xb7\xa9\x15\x4d\xbc\x15\x2d\xaf\x9e\x1e\xfa\xd9\x5b\x29\x85\xe6\x6e\xfc\x28\xad\x6a\x72\xdf\x52\xb1\x0c\x84\x5c\x8b\x16\x25\x5d\x32\x43\x06\x61\xda\x26\x09\xc1\x90\x49\x48\x47\xbc\x1f\xd3\x52\x1c\x87\x80\x16\x43\x24\xd1\x16\x23\xcb\x72\x1c\x67\x50\xd3\x35\xcd\xb9\x75\x61\x6b\x70\x6d\x44\x9d\x4b\x03\xba\x0c\x64\xc7\xbd\xdf\xb5\x4f\xeb\x09\xc6\x79\xa3\x55\x7a\xc1\xdd\x4b\x4f\xb5\x1f\x9d\x79\xfd\xff\x84\xa5\xa8\x06\xcc\x50\x73\x70\x68\x23\x22\x64\x29\x93\x83\xb2\xaf\x72\xac\x68\x79\x9a\x42\x93\xb6\x2f\x9a\xa4\x27\xd8\xba\x28\x20\xd5\x0b\x45\xdf\xa1\x39\xd5\x4f\x0c\x19\x5f\x9e\xba\xe0\x62\x9a\xb9\xb7\xc5\xe8\xf2\x6f\xb4\x9f\x76\xa0\xe7\x4d\xf1\xdc\xea\x8f\xeb\x6f\x2f\xb5\x6d\x5f\xfd\x76\x15\x51\xf9\x11\x99\x97\x7b\x4e\xcc\x39\x13\xca\x21\x29\x12\x52\x2c\x45\x80\xf4\x91\x14\xe8\x1a\xe5\xb1\x7e\xc8\x45\x2a\x6d\xcb\xba\x11\x8a\xbe\x0c\x18\xd7\x34\x19\x55\x24\x19\x24\x8b\x9a\x97\x00\xab\xda\xec\xca\x9e\xf6\xcb\x38\x82\x2f\xb9\xa8\xd1\x4f\x37\xdf\xd9\x95\xfb\xb7\x9f\x9f\x0e\x2d\x77\x7e\x7c\x77\x7c\xdd\x99\x7f\xc3\x9a\x9c\xdc\xfb\xaf\xad\x3a\x46\x8c\x78\x83\x35\x1d\x3d\xe0\x05\x8e\x22\x08\x5f\xe4\x55\xd7\x0d\x60\xa0\xca\x0e\xb6\x42\x59\xf3\x01\x01\xe3\xd8\xb1\x44\xd3\x16\x4c\x5e\x7f\x6e\x51\xf0\x9f\x1a\xa7\xa9\x8d\xa8\x01\xff\x71\x8f\x2c\x32\x75\xe0\xa5\x61\xf4\x17\x35\xd7\x9c\x9b\x58\x60\xca\xe4\xb6\x37\xc6\xdf\x3d\x70\x6a\xdc\xe5\xa5\xc5\x47\x7e\xf4\xb4\xdd\x91\x22\x67\x93\xcb\xbc\xc4\xdb\xae\x0b\x44\xda\xe1\x49\xd2\x32\x00\x81\x49\x5f\x0b\x1c\x97\x43\xc8\x0a\x80\x46\xaa\x62\xac\x91\x12\x0e\x78\xcf\x31\xa1\xc1\xfa\x48\x37\x65\x2e\x03\xe6\xa5\xe5\xc1\xdb\x4b\x67\xd7\x99\xb2\xa2\xe2\x81\xcd\x45\xf8\xad\xe9\xe4\x9f\xd9\xbb\xaf\xcd\xd6\x62\xcc\x4f\x3b\x6f\xce\x2e\x7e\xfd\x97\x91\x1d\x93\xbd\xa7\xaf\x38\xbe\x6a\x2a\x80\xd2\xb4\x30\x0a\x43\xdb\xb1\x3d\x0b\x2b\xa1\xe0\xd9\x9e\x08\x35\xca\xe2\xc5\xd0\x13\xb9\x38\xd0\xbd\x50\x8c\x24\xc7\xd5\x32\xd8\xd3\xef\x52\xa3\xd0\xbc\x39\x4b\x46\x3a\x25\x8e\x56\xaa\x3d\x2b\x7b\xbe\xcf\x4e\x39\xe2\xa0\x09\x64\xbd\x2f\xa7\xe4\xb9\xda\x73\x78\x99\x9a\x99\xd7\x35\x4a\xdc\xc0\xf2\x34\xd5\x55\x15\xdb\x42\xb6\x0b\x1d\xe8\x99\x11\x43\x18\x1e\x65\x42\xe4\x78\xb2\xad\xd0\x0a\x2b\x79\x26\x60\x90\x4f\xd0\x16\xa3\x59\x34\xeb\x7a\x89\x8f\xad\x9b\xa5\x97\xe7\x68\x37\x6f\x28\xae\x7a\xee\xd3\x72\xbf\x55\x89\xf8\x05\x9b\xc6\xd5\x5b\x71\x64\x52\xef\xf1\x9f\x5f\x68\x53\xf8\xda\x6f\xc9\xf5\x04\x5f\x62\xd5\xc0\xe1\x75\x47\xa4\x6c\x83\x17\x55\x42\xf6\x01\x11\x8a\x02\xf4\xa1\x66\x0a\x32\x36\xa3\x90\x11\x79\x1b\x20\x0c\x30\x56\x2c\xdf\x12\xfe\x26\x95\xd1\xf2\xff\x06\xa7\x6d\x8b\x08\x68\x6d\xcd\xb3\xfd\xfb\x2d\xdc\xde\x79\xd3\xe0\x6d\xf5\xee\xfe\xda\xf7\xec\xab\x6d\x5e\xcd\xdd\xa2\x50\xf5\xdd\x9b\xca\xbf\x9e\x9a\xf2\xf4\xc9\xd3\xa7\x93\x4b\x3d\x13\xa3\x5a\x7f\x17\xef\x5e\x5f\xbc\x52\xe9\xaa\x46\xe7\x3c\x53\x26\xed\xae\xb5\x3b\x3e\x58\x26\x06\x4f\xe8\x92\x1d\xda\x54\xcc\x91\x6f\x6f\x92\x79\xca\x21\x07\x68\xc7\x32\x6d\x5d\x11\x62\x39\x92\x28\x0d\x02\x5a\x8e\x10\x84\x61\x14\x93\x38\x76\x08\x16\x44\x06\xcd\x87\x2a\x50\x63\x5d\xe1\xad\x80\x4f\xa0\x70\xb7\xe7\x8f\xc6\xbb\x57\xf3\xa3\x89\x43\x4d\xbb\xdd\xcc\x2d\xcf\xac\xd7\x61\x32\x5f\x6e\x27\xbf\xed\x6e\xb3\xeb\xaf\xb4\x5b\x93\xa7\x6c\x72\xdb\x40\x9c\xae\x9b\x26\x41\x89\x0a\x41\x20\x22\x0c\x08\x20\xb9\x26\xad\x4b\xae\xaa\x06\x6e\xc8\x90\x11\x19\xb3\x3e\x72\x62\xf6\xff\xb1\xf6\x97\xe1\x5b\x54\x6b\xfb\x38\x0e\x4a\xa9\x20\x48\x88\x74\xa7\x48\xcc\x9a\x00\x93\x92\x46\x69\x69\x98\x35\xb9\x66\x4d\xf7\x2c\xba\xbb\x4b\x4a\xa4\x05\x05\xe9\x12\x94\x12\x01\x45\x45\x3a\x45\xa4\x41\x42\x10\x10\x10\xfe\xc7\x7e\x7c\xf6\xdf\xcd\xc3\xcd\xb1\xbf\xc7\xe7\x77\xbf\xbf\x5f\xac\xfb\x9a\xb5\xae\x3c\xaf\xf3\x04\x09\xf1\x03\x59\xd0\x59\xcd\x15\x9e\xc2\xe7\x7c\x68\xcd\xe2\xac\x67\x4a\xc3\x6d\xd5\x5a\x64\x1f\x37\xea\xb7\x62\x0b\xa7\x7c\x54\x78\xed\x0b\x1b\x5f\xee\x38\xe0\xc4\x91\x76\xc0\xee\x3f\xf1\xf1\x3d\xd5\x99\x73\x9e\xed\x33\xe3\xfe\x8d\x02\x59\x86\x99\xc3\x9a\xbe\xdf\xbe\x58\xbe\x33\x54\xa9\xcc\xe6\x07\xfb\xa3\xa9\xaf\xcd\x1a\xfa\x66\xb6\x74\x5f\x3f\x23\xa2\x80\xe4\x24\x26\x80\x22\xe1\xd9\x04\xc5\x6e\xe2\x05\x34\xed\xab\x1c\xa7\xc5\x51\x04\x04\x15\xb2\x31\x84\x14\x74\x81\x1e\x7b\xa1\xa8\xa5\x4e\xa3\x0e\x1c\x61\xc6\x14\xc8\x3e\x62\xf1\x99\x2d\x05\x9c\x9f\xb2\x57\x5f\xdf\xb2\x4e\x4f\xcf\xe8\xd4\x47\xae\x30\x61\x45\x8e\xea\x3d\xdd\x55\x69\xc6\x1b\xa8\x89\xc2\xc9\xa1\x4f\x7b\x06\x11\x1c\x27\x72\x1c\x31\xc2\x16\x27\xd1\x91\x4c\x68\x62\x13\xd5\x11\x0d\xd6\xd0\x14\x64\x1a\xaa\xa1\xab\x62\xe2\x3f\x85\x8b\xef\x17\x50\x77\xe5\x0b\x57\x06\x5d\x5a\x3f\xbd\xcd\xc5\x3b\x6f\x15\x3a\xf8\xad\x7f\xa2\x52\xdf\x99\xa3\x7b\x15\xec\xbe\xf0\xc1\xd1\xf5\x79\xd2\xcc\x0e\xe7\x1a\xbc\xa9\xd3\xa6\x0d\x12\x64\x92\x58\x47\x01\x85\x19\x9a\x12\x59\xd1\xf1\xa0\x10\xf2\x4e\x04\x43\xd7\x48\x1c\xc9\x73\x19\xec\xdb\x21\xef\xfe\xad\x27\xf8\xe4\xd0\x46\xcb\xd9\x6e\x83\xfa\x4b\xa5\xd9\x67\x7f\xcf\xde\xac\xc2\xae\x13\x43\xfe\x5c\xb7\xe6\x06\x5f\x6f\x6c\xdb\x2f\xe4\xc6\xf3\x2b\xbd\x78\x3f\xe3\x97\x24\x35\xc7\xa4\xcd\xc7\x09\xeb\xf3\xa6\x69\xba\x9c\xa9\x0b\x1c\xa2\x4d\x35\x70\x35\x46\x20\x31\xc3\x4b\xff\x43\xbd\x2a\x80\x20\xa2\x1c\x86\xa2\x19\xc5\x8a\xf8\x14\xba\x08\x3f\x8f\xd8\xba\xb5\xda\x5e\xb1\xe3\xdd\xaf\xf8\x2e\x33\x3f\x3e\x57\xa8\xe2\x8e\x8a\x53\x47\x54\x7c\xf7\xcc\xcd\xe5\x53\xc7\x14\x9f\x52\x31\xcd\x12\xad\xba\x2d\x3a\x21\x2b\x10\x31\x4c\x22\x2e\x16\x10\xed\x1a\x1e\x1f\x63\x0e\x27\x32\x83\x41\xe8\xd8\x8c\x1b\x8a\x74\x8c\x7d\xd9\x54\x82\x90\xa1\x34\x5e\x48\x0d\xfd\x69\x46\x95\x7b\x29\x7b\x9b\x16\x4d\x83\xd9\x53\x0b\xbd\xb9\xa7\xde\x86\xb7\x36\x67\x2a\xdd\xe7\x42\x9e\x7e\xb7\xc6\x17\xc8\xf9\x66\xcd\x36\xe9\xe5\xe6\x82\x31\xed\xd2\x4a\xe2\xd9\x92\xe5\xb3\x89\xc2\x84\x96\x2a\xab\x92\x65\x31\xb1\xef\xf2\x1e\x23\x27\x14\xf1\x35\x99\x07\xaa\xae\xa9\x58\xc6\x0c\x03\x9d\x14\x98\xfa\xf3\x7f\x8e\x9b\xbb\x3a\xeb\xdb\xcf\xad\x79\xbf\x67\xf1\x9a\x07\xc0\xe0\x6b\xdd\xf2\xbd\x78\xec\xad\xeb\x85\x6f\x7c\xff\x62\xb7\xbd\x6b\x8a\xa5\x59\xe7\xc3\x55\x4d\x22\x04\xbe\x1d\x60\x1c\x47\x01\x6b\x63\x26\x91\x45\x20\x01\x4a\x91\x45\x49\x88\x69\x5f\x63\x12\x37\xb4\xb9\x38\x74\x03\xc7\x22\x58\xff\x1b\xdd\xf1\xb8\x67\xbf\xf3\x72\xe9\xaf\xc4\x41\x7f\x5c\x7e\x77\xef\xa2\xdc\x0b\xba\x8d\x59\x85\x77\x55\x2d\xbb\xcb\x7d\x15\x8d\x38\xfd\x4b\xf7\x49\xfa\xff\x87\xb5\x96\x94\x9e\x9d\xc4\x58\xe0\x0d\x3a\xa1\x2d\x85\xd5\x80\xa3\x98\x06\x34\x79\x95\xe5\x4c\x95\xd3\x25\x97\xa1\x45\xd5\xa1\x04\xc7\x48\x7c\x4d\x96\x24\x89\xe8\x22\x10\x53\x5f\x8e\x52\xfc\xad\x6f\xab\xf6\xad\x5b\x72\xd2\xbb\x23\xc6\x54\x7d\x79\x73\xcd\xe5\x59\xd7\x75\xec\x5c\x62\x7c\x81\x1c\x58\x9b\xd7\x65\x64\x31\x26\xcd\x10\x46\x31\x01\x9c\x86\x08\x24\xb2\x2c\x46\xb2\x2c\x71\xc4\x57\xc4\xd0\x89\x04\xd1\x25\x9e\x11\x46\xb6\x0b\x0d\xc5\x91\x7d\x9d\xe2\x74\x56\x31\x19\xa8\x3e\x69\xe9\x1a\xdf\x64\xd9\xdf\x7e\xda\xe1\x56\xe8\x93\xa2\x0f\xdb\x5d\xdd\x51\x8d\xa9\xb1\x11\x36\x78\x21\xcf\xb9\xad\xa7\x3f\xee\xfa\xba\xd7\xe0\x48\x7a\x2d\x2d\x47\x12\xad\x72\xc8\x80\x1c\xcf\x51\xba\x45\x04\x09\x49\x91\x16\x41\x55\x31\x02\x2c\xb0\x09\x1b\xaa\x72\xe8\x47\x06\x16\x11\x2d\xab\x61\xcc\x39\x29\xe4\x76\x6a\xc9\x2d\xcf\x9f\xcf\xdb\xff\x39\xd5\x18\x5f\xe4\xcd\x67\xbf\x3c\xd9\xf1\xd3\x9c\xe7\xc7\x6f\x19\x9f\xb3\xfe\xc1\x99\x41\x5e\xdd\x49\x2f\x9e\x9e\x67\x6c\xec\x9a\x84\x20\x40\xab\x34\x54\x04\x2b\x92\x59\x4d\xf1\x70\x1c\x11\xc0\x89\x66\x28\x32\xac\xc5\x80\x58\x50\x04\x37\x60\x62\xc6\xd3\x1d\x57\x4e\x5d\xbb\x2e\x36\x87\x35\xb9\xf0\xcd\xe2\x5f\x37\xb6\x5e\x7f\xa3\xea\x94\x67\xea\xac\xed\x3d\xd7\x81\x03\xf2\x16\x7a\x34\x6c\x5d\xcd\xe5\x39\xc2\xf4\x6e\x98\x41\x13\xd1\x98\x32\x18\x81\x92\xb8\x48\x66\x74\xa4\x21\x4a\x8e\x7d\x29\xf2\x19\xd6\xa7\x3d\x8d\x03\x30\x32\x13\xa8\x33\xd0\x0e\x4c\x1b\x89\xaa\x2a\x3e\x85\x07\x78\xb2\x57\x6b\xf8\xe1\x79\x6d\x25\xbb\xce\x99\x7a\x95\x2e\x39\x77\x7e\xd0\x4f\xec\xf8\xa2\xd0\xf2\x56\x0d\x0e\xee\x8f\x7b\xbe\x55\x29\xbd\xd0\x1f\xde\x71\x45\x59\x43\x6a\x42\x93\xc4\x84\x0c\x36\x13\x45\xd6\xa2\x90\xb2\xe9\x58\x75\x28\x1e\xb2\x48\xb4\x04\xd7\x35\x5d\xe0\x31\x88\x07\x8c\x6c\x13\xe5\xc9\x0b\x72\xa2\x44\xf1\x32\x05\x9f\x07\xfd\x27\x3c\x77\x27\xef\xcc\xb3\xe7\xee\x1e\xcd\x27\xbc\xd9\x70\xd8\x1f\xd9\x1a\x2d\x2f\x79\x7d\x49\xfb\x2f\xd3\x8c\x75\xe4\x05\x5d\xa0\x75\x24\x88\xb1\x6d\x45\xb6\x2e\x69\x52\x2c\xd1\xbc\x29\x18\x01\x6d\x70\x54\x04\x4c\x85\xc1\x91\x9a\xb0\x02\xaf\x70\x22\xe3\x12\x5b\xf4\x9e\x02\xfd\x29\x67\x6d\x3f\x58\xf0\xb9\x61\xf3\xe5\xbb\x05\xff\x1a\x3a\xab\xef\xbe\x9b\xd6\x85\xaf\xef\xcd\xbd\xb3\x6f\xf1\xb7\x0b\x86\xe4\x1e\xbd\xee\xfe\x63\xbe\xa6\xf0\xa4\x0a\x79\xff\xba\x78\xea\xdc\x4e\x61\xe9\x7c\xfb\x95\xd7\x26\x3e\x3b\x7d\x40\xb1\x25\x7f\x2c\x68\x51\x39\x4f\xb8\xad\xc0\xa9\xe2\x59\xd2\xeb\x6b\x90\x25\x8b\x81\x44\x58\x1f\xd1\x09\x51\x2d\x21\xc0\x11\xd0\x43\xe0\xba\x3c\x01\x09\x0d\x21\xe1\x5c\xd9\x03\x8c\xa5\xb3\x31\xcd\xf3\x3c\x93\xc0\x14\x3d\x85\x16\x1f\x9f\x00\x5e\xd9\x16\x17\x1e\x1c\xfe\xe3\xec\x92\xe3\xf4\xd8\x77\x72\x2c\x11\xa6\x9f\xb9\xd8\x61\x6a\xf7\x6c\xf3\xbf\x6b\x3d\x6c\x68\x9a\x61\x86\x46\xc4\x39\x3a\xab\xe8\x3e\x34\x2c\x89\xa1\x3c\x26\xd1\x31\xe4\x62\x35\x36\x28\x1b\xd8\xa1\x97\x44\xba\x45\x08\x22\x86\x6a\xe1\x24\x0a\x03\x24\x3c\x19\x3b\xe5\x96\x6c\xed\x37\xf7\xbf\xf1\x6a\xa6\x89\x15\xf7\xb7\xa9\x1d\x36\x5b\x5f\xf0\xc5\xd5\x0b\xf2\xb6\x9f\xa9\x8d\xec\x33\x64\xc2\xb6\x36\x69\x6e\x38\x39\x01\x76\x3c\x8b\x50\x80\xf1\x24\x59\x93\xa1\xcb\xb2\x0c\xf6\xb9\x58\x82\xba\x65\x8b\x89\xcb\x85\xb2\xe9\x11\x28\x04\x02\x2d\x25\x3a\x63\x8a\x44\x7e\x4a\x89\x51\x65\xcd\xe9\xcb\xb3\xbe\x1f\x10\xd5\xab\xbc\x72\x79\x1e\x37\xdb\x95\xd7\x1b\xfe\x35\x8d\x39\x55\x67\x71\xdc\xb2\xc8\xc0\xbf\xb2\x34\xef\xfa\xb8\xc0\xe9\xfc\xc1\x23\x27\x0d\x1d\x38\xff\xcc\xb3\x1f\xed\x28\x5c\xf0\xeb\x5e\xab\x16\xd4\x9e\x70\xbe\xf5\xee\xe3\x93\x3f\x5c\x5c\x7a\xd2\xb4\x28\xe3\x6c\x2b\xa9\xc3\x16\x01\x48\x21\xbc\x1b\x29\x26\x87\x21\x27\x28\x9a\x1f\xc9\xb1\x2f\x86\x92\xe3\xc7\x2c\x6b\x6b\xac\x03\xd4\xc4\x23\x1a\x66\x24\xc7\x10\x39\x1b\xc0\x27\xaf\x52\x83\x8b\xf7\x5b\xae\xfc\xfc\xf4\xe9\x13\xe3\xb3\xbe\xd3\x7d\x55\x35\xb4\xb4\x67\xdb\xc3\xc2\x2f\x5f\x2e\x77\xa5\x37\xdc\xfe\xc5\x7b\xcf\x4d\xf3\x9e\x60\x60\xca\x32\xe0\xe4\x10\xc1\x40\xd5\xa1\xc6\x86\xba\x66\xd1\xc0\x76\xd9\xd8\x54\xe9\x30\x00\xd0\xe0\x6d\x87\xa1\x20\x34\x0d\x86\xb5\x30\xc4\x29\x40\xb6\x4d\x2e\x8c\xae\xfd\xee\xc5\x3c\xef\xd8\x97\xde\x6c\x97\x6d\xe2\xdb\x75\x9b\xe6\xba\x43\xbf\x54\xa0\x4a\xc7\x6c\x5d\xae\xcd\x3a\x31\xaf\x44\x9a\x25\x63\x68\x3e\x4a\x64\x5e\xb0\x28\x1b\x19\xbc\x0c\x92\x58\xb6\x89\x13\xe9\x5c\x18\x47\x9a\x18\x85\x26\x66\x88\x26\x9a\x4c\xc0\x20\x4b\xa5\x98\x7f\x95\x79\x51\xea\xde\xe5\xdc\xb7\xdb\x7f\xdb\xcf\x2f\xd8\x61\xe9\x85\x67\xe3\x5d\x05\x8b\x2e\xfb\xf0\xf6\x99\x03\x99\xdb\xb4\xed\xde\xf6\x13\xfd\xc4\xa9\xdb\x55\xd6\xa7\xd7\xd2\x36\xb4\x74\x81\x81\x9c\xa9\xb3\xa6\x4e\x1b\x40\x12\x42\x56\x89\x4c\x41\x16\xec\x48\x87\x3c\x22\x02\x8c\xfc\x58\x90\x8c\x04\xc9\x89\x46\x7c\x15\xa4\x50\x0a\xfd\xe1\x40\x31\xf1\xc5\x3e\x35\x9f\x19\xba\x3d\x0e\x5a\xd4\x2c\xd0\xe4\x93\x4d\x45\x73\x4f\x5d\x3d\xb0\xf4\xbd\x36\xc7\x17\xed\x5b\xb5\x2c\xcd\x12\x82\x01\x70\x2c\x16\x61\x99\xe1\x34\xc7\xd7\x04\x2c\xf8\x16\xa5\xf1\x10\x60\x43\x13\x81\x0a\x1d\x5b\xe2\x25\x4b\x95\x63\x6c\x39\xa1\xac\x73\xaa\xc6\x6b\x4f\x79\xb4\x3d\x42\x6d\xca\xd8\xf6\x23\x37\x57\xbd\xfb\xdb\xf1\x9f\xdf\xf8\x28\xb9\xb1\x38\x5b\xe9\x36\xab\xe8\x9d\x03\x4f\x15\x97\xd7\xf1\x47\xda\x3d\xf6\x5d\xb2\x5a\x65\xb2\xb5\x9a\x72\xb2\xda\xe5\xa3\xf3\x0f\x8c\x7b\x69\x78\xfd\xaf\xcf\xad\x1d\xda\xb4\x38\x5f\xf9\xea\xbd\x57\x72\xb5\x2e\x55\x71\x6f\x7a\xff\x24\x0c\x1c\x06\xb0\xba\x6d\xf8\xb2\x01\x02\x13\x47\x1e\x66\xdd\xd0\x0e\x90\x0a\x25\x22\x53\x5c\xa2\x8b\x02\x12\x12\x99\x05\x2e\xd1\x21\x09\x80\x96\x62\xdb\xa3\xde\xb6\xf7\xef\x57\xfe\xa8\x1e\xa9\x31\x7f\x5c\x81\x3b\x1f\x76\x1f\x3d\x7a\x61\xb5\xfd\xfd\xee\x1f\x59\xda\xa9\x8a\xd0\xa1\x5b\xee\x39\xcb\xd3\x9b\x01\x25\x8e\xe7\x5b\xba\x42\x3b\x32\xc5\xfa\xb2\x87\x1c\x62\x0a\x09\xa3\x99\x8a\xa6\x09\x0c\x16\x08\x91\xa0\xa6\x40\x8d\xd1\x34\xdb\x48\xfc\x80\x02\xba\x91\x7a\xfd\x6b\x4a\xbb\x2f\xf7\x0f\xdb\xca\xf3\xf2\xda\xfd\x7e\xd5\x1a\x5f\xcc\x18\xff\xfd\xaf\xfb\xf7\x34\x61\xb7\x14\xec\x38\xe6\xb9\xc5\xbf\xcd\xcd\x38\x2d\x6a\x4a\x4b\x23\x9e\xb7\xa1\xea\x71\x18\x41\x21\x90\x4d\x09\x88\x7a\x68\xc8\xb1\x9e\x78\x41\x48\x23\xc9\x87\x96\x88\x6d\x5a\x8d\x29\x09\xb3\x12\x63\xf2\x9e\x97\x42\x7c\x7c\xda\x7b\x85\xba\x4d\xeb\x12\x16\x25\x23\x93\x7c\xe4\xe3\x6b\x1b\xa2\x2f\x0a\x47\x67\xe6\x0f\x2c\x58\xfb\x58\xb1\xe7\x30\x7a\x35\xe3\x32\xb2\xa9\x77\x37\x45\x4f\x0b\x34\xdb\x01\x2e\x47\x68\xd9\x8c\x18\x03\x88\x5e\xe0\x48\x80\x08\x76\xc4\xf1\xba\xc6\x02\x87\x47\x9a\x05\x10\xa1\x95\x08\x84\x90\xa8\x4f\x46\xda\x7b\x65\x41\x4d\xc7\x19\x79\xf3\xf2\xab\x77\x50\xd3\x11\x77\x97\xf1\xaf\x1c\xf8\x68\x65\xf6\x65\xd9\xde\x2b\xd2\x7e\xe3\x31\x98\xfd\x93\xf4\x5a\x39\x91\xe3\x58\xa0\xec\x84\x00\x01\x3a\xb4\x64\xea\x9a\x63\x3a\x98\x93\x04\x29\x40\x01\x61\xb0\xab\xf2\x09\xaf\xb0\x90\x16\x39\x27\x20\xa6\xab\x09\x7e\xea\x92\xef\x95\x19\xc3\x17\xcf\x22\xaf\x32\x9b\x1b\x6c\x3c\x14\x94\xbc\x97\x3b\xc7\xc4\xa6\xb9\x7e\xfa\x78\xce\xb1\xfe\xe5\x67\x99\xcb\x0a\xff\x90\x71\x85\xd5\x94\x96\x26\x2a\x07\xa9\x44\xf1\x12\x9e\x65\x4d\x56\x55\x0c\x1e\xa3\x00\xda\xa6\xeb\x01\x3a\xd0\x90\xe8\xd8\xd8\xf7\x18\x2b\xe2\xa1\x6f\x21\x60\x3b\xae\x17\x3f\x69\xe9\x31\xb7\xa6\x7b\xc9\xc8\xf1\xef\xb4\x2f\xd3\x3e\x53\xf3\x3a\xf8\xe6\xaf\x5f\x34\x7f\xc0\x77\xc0\xab\x3f\x78\x6b\xda\x8f\x3b\x9a\x5c\xc9\xb8\x4c\x46\x6a\x69\xc7\xd8\x0e\x7d\xdd\xf2\x43\xe8\x63\x40\x50\x68\x44\x86\x21\x22\x5b\xb1\x34\x03\x69\x91\xe5\xd8\x01\x71\xb0\x82\x20\x17\xf8\x21\x56\x43\x27\x84\xec\x93\xf7\xf9\xc7\x9a\xbd\x37\x7c\x9b\xff\x8f\x7b\x23\x7e\x69\x52\xe5\x5a\xb6\xdb\xdb\xf4\xc5\xad\x60\xee\x86\x97\xae\x65\xba\x5f\x32\xeb\xb6\x51\x3f\x2d\x4e\x6f\x86\x12\x72\xb4\x16\xaa\x02\x4d\x30\xa7\xaa\xba\x2c\xf0\xbe\x85\x85\x24\x4e\x04\x3a\x26\x8e\xae\xc6\xa1\x62\x25\xc4\x13\xb0\xec\xd9\xb2\x1f\x79\x26\x0d\x9e\xd2\x04\xbd\xf5\xdd\xc7\x53\x86\x5c\xdb\xb3\x7c\x44\x99\xfb\x65\xcf\x75\xb9\xf2\x49\x85\xf5\xb7\xd4\xdb\xf7\x7a\xb5\x5c\x10\x6c\xbb\xdf\x61\xd0\xfa\x15\xe9\xb5\x34\xe5\x79\x89\x2c\xd3\x91\xe0\xa9\x66\x90\x24\x8a\x6b\x47\xd0\xa4\x45\xcc\xeb\x1e\x42\x50\x4e\xf8\x48\x4c\x24\x53\xa1\x08\x60\x81\xa9\x20\x86\x17\xa4\xa7\x04\xa2\x5a\xb3\xe8\xfd\xee\x8a\xf9\x6d\xaf\x5d\xeb\x9c\xfb\xe0\xec\xc2\x2b\x3b\x45\xed\xeb\x65\x59\x37\x74\x46\xe7\x23\x1d\x7e\x6f\x5e\x7d\xdf\xc0\xc7\x5e\x40\x85\x7c\x28\x6c\x2e\xbe\x11\x4d\xad\x54\x79\xed\x17\x23\x27\x8c\xca\x3a\xb1\x67\xb6\x91\x9b\x87\x4c\x2f\x5b\xe6\x41\x81\x5f\x9e\x3f\xb3\x30\xcd\x75\x2d\x1b\xfb\x34\x92\xf8\x08\x26\x84\xd1\x7d\xda\xa4\x3c\x2d\x09\x38\x4a\xd3\xa0\x2c\x99\xc0\x88\xbc\x10\x21\x27\x36\xa3\x28\xf2\x24\x21\xf1\x11\x65\x3c\xf9\x02\xea\xce\xdc\xd0\x73\xe9\xf4\xda\xab\x3f\x39\x9c\xab\x59\xbb\xee\xd3\xee\x2e\x81\x35\x5b\x5f\x28\xe5\x95\x7b\x63\x4f\xeb\x6f\xcf\x05\x77\x8d\x34\x33\x8f\xd1\x1c\x2d\x69\x94\xaa\xaa\x7e\xac\x25\x0e\x71\x62\x53\xe7\x30\x6d\x26\x31\x06\xb6\xaf\xd2\x49\x2c\x30\x3c\x23\xc9\x16\x94\x91\x89\x5d\x42\x04\xed\xc9\x17\x30\xa6\xfc\xd9\x83\x63\x9a\x65\x6d\xf0\xde\xa1\x46\xb0\x57\xfd\x29\xa3\x36\x0e\x9e\xd7\x7d\xf0\xda\xb6\xad\xee\x57\xc8\x5e\x74\xf1\xee\xd7\x32\xde\x5a\x4a\xdd\x77\x04\xa1\xee\x5b\x08\x86\x86\x93\x50\xbc\x23\xb8\xb2\xea\xc5\x8e\xad\x23\xe0\x50\xa1\x4a\xd9\xbe\x89\x74\x88\x45\x3d\x00\xbc\x89\x65\x51\xb0\x34\x3e\x75\xec\xcc\x16\x74\x7f\x6f\xd4\xb6\x93\x0f\x7b\xe7\x79\xe6\xf9\x62\xbf\x5f\x3a\xfd\x6a\xed\x01\x56\xd5\x7c\xa3\xdf\xb8\xf0\xd6\x5b\x75\x5b\x3c\xcc\xbb\x29\xcd\xcc\x63\x86\x10\x8a\x12\xc2\xba\x1f\xda\xa1\xcf\x99\x11\xc7\x72\x4c\xe4\x44\xba\x1b\x20\x47\x08\xb5\x24\x61\x19\x0b\xa9\x32\x25\x50\x89\x2d\x00\x19\xff\xc7\xc3\xfd\x07\x75\x76\xe5\xd9\x09\x2d\xbf\xaf\xbd\xdd\xbb\x5a\xd6\xec\x59\x35\x4f\x8f\x67\x1f\xed\x80\x97\x67\xdd\x1d\xb3\xe1\x7c\xbe\xb5\xdb\xaa\xaf\xcd\x78\x47\x2c\x75\xc2\x8b\x54\x9e\x0e\x79\x05\x47\x5e\x28\x5b\xa1\x00\x20\x9f\xb8\xc8\xb6\x68\x48\xf3\x82\x25\x70\xb2\xa7\x22\xdb\xb6\x24\x90\x38\x86\x0a\x1d\x40\x90\xf4\xe4\x91\x17\x96\xec\x7b\xb0\xc2\xec\x8b\xaf\xf5\xce\xab\x4d\xbb\xd0\xf8\xe2\xf8\xf9\x47\x6a\x95\x5d\xfc\x9c\x74\xa8\xf5\x97\x2f\x99\x37\x1a\x2b\x20\xcd\x0b\x10\x98\x31\x29\xe2\xca\x0a\x09\x22\xc3\x73\x80\xcd\x84\x90\x18\x7e\x1c\x33\xb2\x29\x7b\x04\x9b\x71\x24\x41\xc7\xd4\x65\x3e\x08\x3c\x14\x87\x61\x42\x3f\x65\x75\xba\x3a\x85\xcd\xcb\xbf\x1d\xfd\x6a\xf7\x99\x15\x5d\x8b\x6d\xfb\xbc\x6d\xb3\xe7\x5f\xe9\x50\xea\x58\xa9\xd1\x4e\xf1\x77\x8b\x68\xdb\x5a\x9d\x7f\xcc\x99\xae\xc9\xdf\xe1\xd9\x87\x6a\xbf\x9f\x96\x37\x3b\x52\x08\x0d\x6a\x70\x79\x41\xd3\xf3\x33\xda\xcf\x2f\x2a\x8c\xcb\x54\x72\xc7\x92\x96\x6b\x32\xae\xb2\x9d\xf2\x4f\xea\xb4\xaf\x11\x14\x03\xd6\x0d\x4d\xd6\x11\x10\x9d\xc0\x28\xb6\x25\x46\x89\x1c\x0e\xd3\x91\xc1\x53\xaa\xcd\x09\xaa\xe9\x19\xac\x65\x03\x4b\xe1\xfe\xa3\xe4\x7b\x2c\x4f\xcf\x79\x7e\xc7\xd1\xdf\x0a\x6d\xac\x72\x63\xc7\xe6\xfe\xe7\x8a\x8d\xfa\x44\xcf\x3c\xb4\xe5\x9a\x01\xef\xd4\x3f\xfa\xd2\xcf\xcf\x93\x6a\x45\xd2\xcc\x25\x69\x98\x82\x1a\x25\x2e\x92\xad\x84\xa3\x2d\xe0\x31\x76\x22\x53\x49\xec\x20\x8f\xc3\x04\xb0\x61\xe0\x98\x41\x08\xa1\x48\x33\x48\x0a\x75\x26\xd1\x20\x7a\xd2\x3d\x92\xcc\x59\x7e\x9e\xbe\xfc\xda\xce\xdc\x37\x73\x6f\x3a\x1c\x37\x2a\x7b\x7a\xd2\xba\xcd\x07\xf2\x8f\xad\x7a\xdf\x19\xd7\x6c\xc1\xb5\x8a\x5a\x9a\x21\x50\x9e\x44\x85\x4c\xa2\x51\x36\xe5\x08\xa1\x63\x23\x9c\x58\xba\x6a\x08\x91\x2d\x42\xdb\xc6\x1c\xeb\x23\x3f\xf0\x80\x44\x8b\x92\x17\x5a\x8c\xa2\x69\x74\xea\x54\xac\x7a\x89\xa9\x42\x23\xfb\xcb\xfa\xbb\xd4\x22\x53\x26\x14\x92\x4a\x2e\x6d\xb2\xec\xad\x2e\x75\xda\x76\x2d\x36\xa8\x44\xd2\xf6\x83\x7b\x4d\xd3\x7b\x6c\x83\x93\x05\x80\x5d\x86\x0d\x04\x99\x27\x31\xc7\x05\x8e\x8d\x69\x2f\xb0\x35\x41\x33\x0c\xdd\xb3\x4c\x5a\xc5\x34\xc3\x5b\xa2\xc4\x61\x45\x77\x62\xcd\x79\xd2\xab\x6f\x79\x66\xf7\x67\xe3\x4e\xfd\x35\x17\x9d\x77\xba\x1e\xbb\xa7\xbd\x77\xfb\xcf\x79\x37\x1a\xdd\x47\xc7\xb2\x6e\x1f\xf9\xf1\xc4\x79\x51\xc6\x61\xd0\xa9\xf3\x9a\x08\x68\xa6\x15\xfa\xba\xc1\xba\xb2\xac\x47\x32\xd2\x15\x45\x34\x43\x0d\xd9\xac\x68\xfa\x9a\xa1\xf2\x16\x27\x71\xaa\xc5\xe9\x1a\x48\x22\xd6\xfc\x5b\x46\xf6\x71\x5f\xf3\xf0\x44\x5c\xd7\x37\xa7\x76\xbc\x93\x9f\xff\xac\x4e\x9f\xae\xc7\xda\xfe\xfa\x72\x5d\xb7\x94\x31\x71\x6e\xf4\x6e\xd3\x01\xab\x47\xcc\x48\x73\x1b\x43\xa6\x14\x4d\xc6\x46\x62\xb3\x26\x25\x01\x4e\x57\x0c\x90\x08\x2e\x4d\xc7\x9c\xc1\xf8\x30\xe0\xf4\x04\xb2\x7a\x00\x01\x62\x20\x9b\x50\x61\x82\xdd\xd4\x6d\x8c\xc6\x2f\x4c\x9f\xfe\xec\x8e\x6b\x47\xe7\xf5\xaa\x76\x33\xc7\xf5\x39\xd5\x0e\x4f\x6a\xf9\x75\xde\xdd\x2b\x32\x5d\x39\x03\x2e\x74\xbe\xda\x21\x73\x9a\xf9\xda\x65\x9b\x91\x75\xc5\x57\x75\xc1\x83\x90\x0e\x65\xc7\x66\x24\xdd\x20\x91\xa7\x3a\x2c\x86\x9e\xe5\x85\x8c\xe4\x80\xd0\x90\x90\x6f\x3a\x96\xc1\x82\x14\xca\xb7\x53\x5e\xcf\x3b\xf6\x95\x6c\x63\x5e\xf9\xb9\x5a\xeb\x6e\x13\x0e\xcc\xdb\xcb\xe6\xed\x94\x67\x7d\xef\xf9\x3b\xf2\xb4\x6e\x7b\x03\x50\x25\xbe\x4d\x33\xcb\x40\x00\x2c\xd5\xe3\x81\xc5\xc7\x12\x0b\x6c\x23\xb1\x25\x0d\x09\x8c\x08\xec\x88\x75\x81\x42\x51\x14\x65\x1a\x8c\xec\x20\x5b\xb0\x4c\x2c\x69\x3c\x74\x53\xef\xbf\xb3\x87\xee\x5d\x8a\x1e\x5c\x7d\x66\xf8\xa9\xa8\xff\xab\xc6\x8a\x76\xbd\x96\x6f\xde\xfe\xfc\x4b\xcf\x1a\xdb\x76\x0f\xfd\xec\x95\x21\xfb\xf3\xa6\x79\xcb\xc5\x91\x1c\xec\xd1\x31\xeb\x70\x9e\xe8\x04\x0e\x44\x8e\x29\xf0\x94\x0b\x5c\x5b\x17\x13\x92\x10\x8b\x43\xa1\x6e\x73\x4a\x22\xb0\xbc\x28\x93\xc8\x4f\x11\xf2\x7b\xbf\xdd\xa0\x5a\x8e\xc4\xf5\x3e\x7e\x75\x69\x89\x1e\x7d\xfb\x0d\x5a\xfe\xfd\x8a\x13\xee\xfd\xce\x0b\x7e\x6f\xdb\x9e\xde\x39\x50\x4a\xf3\xaa\x26\x30\xdd\x00\x58\xb1\x2e\x09\x2e\x52\xb9\xc4\x8e\x80\x06\x43\xde\x91\x63\x27\x48\x04\x91\xc1\x9a\xa6\xbb\x38\x16\x59\x59\x4a\xa2\x58\xf3\x99\x24\xd5\x91\x87\x7f\x33\x59\xda\xbd\x76\x70\xf3\xed\x47\x56\x95\x3b\xbe\x6c\x4c\x93\x02\x7e\xa7\x0a\xf6\xf8\xa6\xe4\xbd\xcf\xce\xbd\xdb\x25\xc8\x7f\x27\xcd\xe3\x73\x45\x65\x75\x8f\xe3\x2c\xc5\x35\x15\x0d\xc6\x58\x60\x23\xec\xf1\x7a\x94\x18\xa6\xae\xd3\x46\xc4\xc4\x7a\x84\x2c\x9a\x84\xac\x1c\x87\xa2\x27\xf2\x61\xea\x21\xd8\x44\xf6\xa3\x6f\x27\xd2\xad\x7f\xa8\xd6\xa8\xe2\x58\xa3\xe5\xb4\xa2\xad\xa7\xc6\x93\x7e\x58\xd8\x23\x9e\x5a\x48\x7c\xaf\xf2\x9a\x59\x7f\xa4\x99\x1f\xd5\x90\x05\x1e\x73\xae\xe1\x41\x12\x63\x2c\x87\xa1\x27\x30\x06\xd2\x74\x23\x0e\x89\x20\x41\x5d\x8a\x02\x4e\xd7\x0d\xc4\x31\x89\xeb\x51\x1e\xf6\xe4\xd4\xb0\x90\x0b\xf7\x3e\x1b\x59\xb6\xe4\xea\x3e\xb7\x0a\x85\x03\x56\x07\xdb\xd7\xcf\xaa\x3f\xa3\xc7\xd7\xd4\xe0\x2e\x4d\x17\x7b\x4d\xc6\x34\x29\x9e\x66\xe6\xce\x80\x05\x3a\x88\x12\x4b\xc4\x8e\xaa\xdb\xa2\x4d\x08\x2f\xdb\x74\x14\x12\x4b\xf1\x6d\xe0\x13\x81\x37\x6c\x25\x41\x40\x43\xa2\x67\x10\x1a\x00\xf0\x0f\x01\xe0\xbf\x21\xfd\xff\x0d\x63\xd4\xbf\x7e\x96\x4c\x25\xeb\x3e\x0e\x87\x7c\xb4\x70\xce\xc2\xaf\xde\xde\xba\xe7\xbe\x3f\x7a\x63\xbf\xef\xd6\xcc\xdd\xfb\xfa\xe2\xa9\x67\x57\x16\xae\x5c\xbd\xfc\x64\xa6\x6f\x97\xbe\xdd\xd3\x7c\xa7\x10\xe4\x4c\x42\x50\xc4\xfb\xd8\xb7\x5c\xd3\x88\x34\x5a\x12\x0d\xd3\x40\x82\xc9\x23\x93\x75\x80\x14\x85\xae\x04\x63\x49\x89\x63\xc7\xb7\x21\xaf\xa6\x76\xed\xf9\x87\xdd\x93\x4f\xdc\xdd\x97\x4b\x50\x8e\xee\x2d\xb9\x6c\xfe\x89\x7d\x79\x0f\x76\x3d\x5b\xa5\xdb\x79\xc7\x6d\x51\xe5\xf7\xe3\x3d\xd3\x3c\xbe\x60\xb8\x84\x53\x55\x86\x11\x68\x18\xc4\x00\x51\x36\x08\x05\xdb\x25\x9a\xe4\xc9\x91\x18\x13\x56\xd1\x5d\xce\xf4\x63\x4f\x34\x30\x2d\x99\x0a\xaf\xc1\x14\x09\xfb\xf4\xf2\x37\x96\x34\x1e\x79\x0a\x98\x7f\x2d\xdd\x7c\x94\xc9\xb3\x81\x13\x37\xb9\x7d\xbf\x3f\x9f\xa5\xf1\xea\x35\xf3\x7a\xcc\xf9\x2d\xe3\x65\x51\x6a\xfe\x2e\x9d\x8e\xdc\x24\xe2\x89\xe7\xc6\xb6\xe2\xb2\x48\x52\x5d\x43\xb7\x35\xc5\x77\x13\x8b\xd1\x79\x2b\x0e\x3c\x81\xa5\x4d\x9a\x0d\x68\x47\x52\x44\x17\xc5\xa9\x9f\x41\x9b\xf2\xd5\x8e\xed\xfa\xee\xeb\x19\xfd\xff\x3c\x7c\x2c\x19\xf7\xfe\x0b\x78\x65\xa5\xa2\xcc\x87\x5f\x34\xec\xf3\xe0\x87\x4d\xdc\xf8\xf6\xd3\xd2\x7b\x6c\xec\x38\x1e\x82\x01\x47\x62\x3b\x31\x0d\x8f\x8b\x7d\x5d\x43\x86\x2e\x84\xa6\x1f\x12\x56\x16\x42\xc5\x05\x14\xa5\xe9\x32\xf4\x29\x20\xf8\x9c\x2a\xaa\xa9\x8f\x3d\xab\xcc\x97\x1b\x67\x47\x5f\xaf\xac\x5b\xb2\x3e\x3e\xf6\x4d\x7f\xed\xb9\x39\xe3\xbd\x93\x63\xc7\x1f\x78\xb3\x76\xbf\xe1\x35\x67\xe4\x4a\x33\xd8\x9d\x40\x83\xe7\x93\x84\xa3\x23\x8f\xf1\xcc\x04\x0a\x8e\x69\xd2\x3e\x96\x13\xdf\xb4\x23\xc6\x91\x58\x4e\x61\x39\x26\x88\x2c\xc1\x0e\x03\xd7\xf3\x3d\xe7\x1f\x85\x8a\x7f\x8b\x77\xfd\xb7\x49\x70\xff\x7a\xd9\x32\xb5\x7f\x5c\xbc\xeb\xd5\x33\x7b\x4b\xf3\xbd\x76\xf7\x1c\x34\xf8\x9e\xfb\x49\xd1\xf2\xb5\x99\x57\xee\x6c\xfc\xc3\xf9\x74\xf7\xb5\x6a\x57\xb7\x4f\x6c\x35\x3e\xe3\xa9\x64\xca\x3f\x29\x99\x54\xac\xf1\x9e\x93\x00\xca\xa7\xf4\x58\xf4\x62\x46\x12\x31\x64\xa2\xc4\xd4\x24\x57\x10\x79\x4f\xb3\x11\x34\x21\x1b\x78\x0e\x6d\x89\xbc\xc1\x3f\x05\xd1\x9f\xef\xe4\xfe\xe6\xc2\x91\x7e\xed\xcf\x1e\xfc\xe6\x78\xd8\x7b\xde\xae\x31\x4d\xe7\xef\xd8\xf2\xd5\xe8\xab\x3d\x4a\xe5\xeb\xf2\xe8\xca\x05\x2b\xcd\xe4\x88\xae\x6c\x42\x4a\x37\x59\x21\x06\x91\x28\x50\xac\xe1\x47\x18\x72\x71\x1c\xc5\x9e\xe2\xd8\x31\x0a\x43\x15\x8a\x30\x12\xb0\xa7\xf2\x16\x15\xfb\x94\x9e\xfa\xd8\x25\xb3\xbd\x7d\xfc\x9b\xdf\xf7\x2c\xae\x21\xb4\xbd\xde\x8a\x79\xfd\x99\xb3\x07\xdc\x49\x65\xf6\xbd\x7f\xbf\x75\x19\x50\x3d\xf3\xcc\xf9\x19\x17\xbf\x4d\x2d\x63\x47\xb0\xef\x61\x19\x09\xa6\x47\x38\x83\xa6\x85\x80\xe3\x7d\x8c\x38\x87\x70\x4e\xec\x32\x86\x45\x12\x9c\x24\x81\x66\x86\x81\xc6\x31\x96\x25\xeb\x4f\x81\x37\xee\x6a\xb0\xdf\x2f\x5f\x1d\xee\x7d\xbe\xe2\xdb\x65\xee\xe3\x17\xe5\x62\x0b\x5f\xab\xb1\xa7\x6e\x89\xf8\x23\x58\xa5\x38\x39\xbc\x3f\xcd\x4c\x09\x89\x2a\x39\x46\x60\xc8\x92\x6b\x32\x80\x76\x35\x47\xe4\x01\x05\xed\x08\x53\x40\x32\x43\xc6\x4e\x10\x83\x28\x28\x70\x88\xc3\xba\xc7\x98\x4c\x98\x3c\x45\xb3\xb7\x8a\x5c\xba\x6c\x87\xcd\xe7\xdd\x5b\x5f\x1d\x8b\x87\xb4\x7b\xe7\xe3\x0d\xdb\xf0\xa0\xbc\xbf\x7e\xce\x97\xab\xd8\xf3\xa0\x35\x75\x6a\xc6\x57\x89\x52\xd6\x1c\x3c\xf1\x69\x22\xf9\xa6\x27\x78\x5a\xe0\xc9\x9a\xab\x70\x26\x64\x3d\xac\x79\x36\x0a\x2d\x44\x71\x34\xeb\x72\x10\x5b\xa6\x02\x3c\x11\x32\x44\xf9\xdb\xda\xff\x73\x49\xfe\xbd\xd5\xfe\xdf\xe6\xef\xfd\xeb\x3f\xf3\x52\xa6\xda\x8f\x87\xdf\x4a\xf7\x1e\x76\x1b\xf0\xc5\xa3\x0b\x83\x5e\xbc\x7f\xf1\xa3\xcf\x3e\xff\xc9\x59\xf7\xdb\x87\xfe\xa5\xf7\x47\x64\xbe\x91\xe9\x21\x3d\x7e\x2b\x95\xde\xa7\x10\x04\x80\x77\x61\xa0\x6b\xb4\xec\xda\xbc\xa2\x47\x8c\x8f\x23\xd9\x73\x6c\x21\xd2\x35\x1a\x25\xd0\xc7\x36\xad\x22\x5e\x65\x69\x9a\xa6\x8d\x44\x48\x9e\xc2\x45\xd9\x23\x6f\xd1\xf1\x03\x32\x07\x5f\x9c\xd9\x3b\xf4\x56\xbb\x9a\x79\x96\x95\xd1\xbf\x8b\xb6\x16\x9a\xb9\x76\x5b\xbb\xf6\x7b\xd7\x1c\xbd\x30\x3b\xcd\xb9\x51\x60\x25\x48\xb6\x34\xc0\x32\xaa\x1f\x84\xa6\x29\x0b\x80\x57\x65\x68\x11\xcb\xf4\x04\x83\x42\x72\x62\x27\x96\xa9\xf1\x7e\xa4\x72\x72\x14\x3b\x89\x9d\xfa\x4e\x0d\x2c\x73\xf7\x8b\xb8\x60\xc7\x91\xa8\x19\xd5\xe6\x5e\xe1\xc9\x33\x6b\x4c\xb9\x57\xe4\x52\xbd\x1c\x65\xfa\x0c\xfa\x6d\x55\x97\x0d\x0d\x9a\xa7\x99\x3a\xc7\x8e\x65\x07\xf3\x92\xad\x0a\x28\xa1\x4c\x15\x84\x89\x1d\x69\x14\xf1\x81\xce\x22\x0f\x3a\x21\x52\x18\x8b\x48\x2c\xe4\x4d\x53\x04\x8c\x1b\x10\x9c\xfa\xd8\xbf\xf4\xfd\x6d\xe4\xbe\x8f\xf7\xf5\x5e\xd6\xa3\x2a\x7c\xd4\xe8\xfa\x42\xb9\xca\x2a\x6b\xe9\xaa\xb2\x1d\x4f\x25\x13\xda\xec\x1a\x93\xbf\x4b\x7a\xfb\xc0\xa2\x61\xc5\xbc\x28\x5b\x8a\x99\x58\x76\xc0\x23\x08\x34\x37\x64\x78\x85\xe7\x65\xc7\x48\x5c\xcf\xd5\x25\x11\x5b\x12\x36\x24\xc4\x7b\x9e\x19\x49\xf8\x9f\x04\x7a\x73\xf6\xff\xb7\xa9\x76\xff\xfa\x03\x6b\x67\x7a\xe5\xf1\x60\x36\xfc\x6e\xf1\x9d\x74\xbd\xf7\x2d\x7f\x60\x97\xc2\x97\x1a\xdc\xcd\xec\xec\x2d\x39\xe5\xa6\xcf\xe7\x9e\x70\x50\x78\xfb\xd7\x69\x93\x83\xb4\x77\xa0\x74\xde\xa3\xcc\x50\x76\x20\x1b\x27\x0c\xc5\x59\xb1\x1b\x44\x7e\x02\x4c\xa0\x06\xc0\xf2\x75\x57\x8b\x39\x5e\x21\x2c\xcf\xe9\x6c\x22\x04\xf0\x29\x10\xbf\x05\x17\x42\x6f\x14\x3a\xb7\x7d\xc0\x42\xe9\xab\xfb\xcd\xe7\x3b\xb5\x4e\xd8\xd1\x82\xfb\xbb\x0a\x15\xc9\x51\x70\xcd\x99\x2d\xbf\xde\x4d\xef\xc7\xb1\x1c\x2f\x46\x90\xd2\x50\xac\xc4\x16\xcb\x32\xd0\x91\xa1\x6b\x98\x1c\x17\x89\x1e\xc3\x84\x91\xe9\x32\x6c\x24\x33\xc0\x96\x44\x56\x0b\x74\x36\x10\x9f\xb2\xb0\xbc\xbf\xd8\xdc\x0b\x65\xb3\xaf\xfe\x6d\xe8\xe1\x71\xc1\xad\x22\xaf\xec\x3b\x2d\x16\x7c\x75\xd8\xe9\xec\xdb\xe6\x2c\x6d\x54\x29\x7b\xe5\x6f\x32\xde\x1b\x49\xe9\x5e\x45\x91\x32\x55\xce\x96\xa0\xe4\x85\x58\x13\x4d\x5a\x8d\x2c\x4d\x0d\x30\x43\x78\xdf\x14\x64\x29\x60\x7d\x13\x70\x94\x10\xea\xc8\xe5\x54\x8c\x3d\x8f\x4f\x6d\xed\xc6\x95\x2e\xf7\xac\xf8\xd7\x4f\x1b\xc7\xdc\xcb\xf4\xdd\xa7\x45\x73\x65\x19\x95\xbd\xfd\x8b\xc7\x94\x4f\xe8\xd5\x43\x0a\x7e\x5b\xbe\xec\xb1\xd6\xe9\xb5\x36\x17\x4b\x32\x23\x69\x22\x6b\x40\x4b\xf4\x8c\x08\xb3\x61\x68\x58\x3e\xe3\x04\xb1\x40\x14\x40\x62\xc6\x10\x09\x90\x19\xc9\x72\x62\x88\x6c\x01\xa2\xa7\x10\xe2\x9c\x1b\xd4\xfd\xe4\x84\xcf\x16\xae\xbb\x92\xa7\x78\xf5\xf6\x75\x87\x3f\xfb\xf5\x57\xc7\x33\xed\xae\xa0\x35\xfc\x75\x8d\xd5\x40\xfd\x35\xd7\x1b\x69\x66\xb1\x66\xfc\x00\xd8\x74\x04\x69\x83\x56\x74\x0b\x87\xa2\x2d\xdb\x49\xec\x29\x22\x40\x2a\x8c\xb1\x9d\x08\x28\xb1\x3d\x2c\x68\x0e\x36\x95\xc8\x16\xfe\x83\xd6\xf0\xdf\x2f\xf8\xbf\x8d\x03\xfb\xd7\xcf\x5c\x3d\x47\xc9\xc7\x5f\x70\x91\x07\x67\xb7\x0d\xfd\xab\xcf\xc0\x57\x2a\x15\xee\xb0\x3e\xdb\xeb\xb7\xae\xd8\xfd\xba\xbd\x67\xbe\x5f\x8b\xf8\xe3\xb2\x5e\xc3\xf6\xa5\xf4\x26\x48\x94\xc8\x47\x90\xa5\x24\x4f\x40\x11\x25\xf8\x8c\x9e\x48\x1e\xb1\x6c\x2f\x86\x1a\x6f\x5a\x0c\x0a\x5c\x82\x21\x85\x44\x81\x47\x2a\x22\x34\x47\xf8\xa7\x30\x25\x3c\x7a\xdf\x9d\xd5\x02\x2e\xb7\x4e\x5d\xaf\x33\x57\x5a\x5a\x88\x6c\xdf\x55\xe0\xa7\xd1\x43\x1a\xf4\xad\x53\x7d\x61\x9f\x79\x45\x1a\xa5\x97\x6b\x8c\xc7\x9e\x67\x4b\x80\x62\x0d\x49\x13\xad\x98\x27\x88\x77\x7d\x47\x31\x12\x9a\x43\x1a\x4e\x40\x9c\x20\x64\xba\xbc\x15\x6a\x1a\xc5\x4b\x21\xa2\xb0\x03\x52\x3f\x85\x6a\xf5\x17\xfd\x5e\xe4\xd0\x8f\x2d\xab\xcd\xee\x1c\xac\x2e\xc1\xfc\xba\xf0\xd7\xe2\x7f\x8d\xe9\x65\x7e\xbf\xea\xf7\x69\xd2\xcb\x59\xa4\x8c\xd3\xfe\xa4\xbc\x53\x90\x4b\x62\xc8\xea\xae\x8c\x78\xdb\xe5\x38\x21\x12\x0c\x9c\xa8\xd8\xf5\x39\x0a\x72\x81\xa4\x00\x0f\x87\x1c\xb0\x7d\x96\x16\xe4\x40\xe1\xa0\xf9\x77\xf2\xff\x64\x30\x7b\xfe\xb3\xf1\x7d\xfb\x64\xfa\xe4\x3c\x37\x58\xff\xee\xfd\x11\x27\x8e\x9d\xfe\xe1\xbd\x4d\x13\xee\x55\x9e\x70\xa5\xf5\xd5\x37\x7b\x9d\xde\xdc\x3b\xbd\xd6\x96\x04\x84\xec\x24\x96\x20\xc7\xda\xbc\x0c\x08\xb2\x08\x64\x4d\x4d\xe4\x10\xaf\x8a\x14\xc3\x30\xa1\xed\xeb\x9a\x2d\x2b\x24\x74\x29\x86\x4a\xbc\x24\x4a\x6d\x6d\xf8\xcc\xcd\x03\x8b\x76\x72\x5e\xfd\xaa\xeb\xf4\x5d\x45\x76\xed\xf8\xbe\xd2\xca\x83\x2b\xde\xc6\xd9\x3e\xb9\xf6\x41\xde\xc5\x25\xd7\xbd\x9b\xde\xe8\x04\x24\xa0\x73\xaa\x09\x80\x49\x11\x5b\xa7\xd8\xd8\x57\x00\x4d\x1c\x89\x23\xb1\xaa\x63\x5b\xb5\xfc\x50\x06\x48\x50\xa0\x20\x3a\x6e\x90\xf0\x4a\xf2\x0f\xfd\xd0\xbf\x77\x63\xff\xdb\xa0\xad\x7f\xbd\x92\x39\xf2\x3e\x9e\x8d\x56\x5d\xd2\xb9\x6f\x9e\x4f\x4b\x5e\x5f\x93\xe9\xfc\xc3\x93\xd7\x46\x5c\xff\xeb\xe8\x6f\x3f\xad\xed\x93\x07\xf4\x3d\xb9\xb8\xc6\x91\x22\x99\x33\xde\x60\x4c\x99\xd6\x71\x01\x10\x63\x8f\x51\xa9\xc4\x57\x19\xa2\x39\x9c\x93\xf0\xb1\xe0\xea\x36\xe0\xe2\x80\x52\xb9\xd8\x01\x9c\xa6\x44\x92\xad\x73\x6e\xac\x85\xbe\x09\x9f\x52\x2a\xa8\x85\x1e\xf5\x65\x97\x7c\xf0\xe0\xf6\x8a\xf9\xde\xed\x5a\x3b\x87\x97\x6b\x2c\xd7\x1b\x35\x31\x57\xad\x9f\x66\x7f\xf1\x48\x0a\x86\xae\x4b\xef\xb7\x89\x29\x4b\xe2\x74\x85\x55\x39\xd7\x66\x02\xc2\x6b\x12\x1d\xd9\x5c\x88\x1c\xcf\x52\x05\x3a\xf6\x4d\x5a\x8f\x25\x97\x57\x0c\x9f\x62\x49\xc8\x29\xec\xe3\x30\xa2\xff\xcc\xfd\x27\xb7\x6b\x39\xf6\xe7\x4f\x3e\x9f\xd3\xe8\x46\x66\x66\xf5\xc9\xee\x99\xd7\x6f\xca\x4d\x57\xed\x3a\xb9\x77\x2e\x3c\x30\x27\x93\xf1\x55\xc6\x94\xb1\x0c\x12\xcb\xa7\x88\xa5\x52\x01\xf1\x24\x9a\x41\x11\xcf\x04\x0e\x66\x3d\x1e\x47\x01\xd1\x61\x10\x48\x11\xd0\x6d\x2e\x51\x78\x8f\xe0\x88\x77\x22\xef\x29\x99\xc3\xcb\xd7\x3f\x9f\xd0\xa9\xfb\x91\x7e\x3d\xde\xdc\xf7\x6b\xbb\x9d\x99\x4e\x5c\x7f\xa1\xf2\xc6\xcc\x97\x60\xe9\xe3\xf2\xd9\x06\x3f\x67\xbf\x5e\x28\xbd\x7e\x07\x78\x56\x42\x42\xd5\x35\x1d\x41\xa1\x54\xd6\xb3\x34\xd9\x96\x54\xc3\x37\x0c\x2b\xa6\x43\x40\x49\x28\x12\xa9\x48\x23\x9c\x13\xb1\x28\x60\x7c\x33\xf9\x67\x5d\x6e\x75\xad\xbf\x4f\x0c\xf2\x33\xed\xde\xf8\xb1\xf8\x0a\x63\x57\x9e\x25\x78\xc2\xa9\x91\x3d\xcd\xab\x05\xbe\x1c\x71\xe2\xab\x96\xcf\x75\x78\x6f\xf6\xc0\x1e\xd3\xfa\xd7\xff\xf9\xe1\xb5\x87\x1f\x16\x7d\xac\xc3\x88\x47\x67\x7d\x88\xc9\xf5\x93\xfc\xf7\xb7\xca\x4d\xcb\x77\xbb\x1c\xcf\xff\x54\xf7\x15\xe6\xc5\x0d\x56\xf5\xc3\x5d\x3e\x34\x5f\x2d\x99\x5e\x3f\x65\x0a\x06\xa5\xd1\x82\xa9\x47\x5e\x00\x2c\xc1\xd3\x59\xd6\x93\x0c\x23\xd0\x79\x4f\x13\x75\x8e\x15\x85\x10\xa8\xa2\x83\x3c\x4b\xd1\xd4\xd0\x56\xf9\x24\x79\x72\xb2\xb8\x56\x9b\x51\x6f\xd0\xa4\x7a\x17\x33\xd1\xf3\x2a\xec\xc9\x7f\xb9\xdc\xed\x55\x8d\x5b\x9c\x29\x7b\x65\xda\xe8\xc3\x0d\x66\x34\x2b\x52\x78\x5b\x7a\x8f\xcc\xda\x62\xa8\xfa\x44\xa2\x68\x43\x42\x9e\x66\x5a\x50\xd5\x34\x92\x10\x56\x15\x02\x89\x0f\x55\x14\xba\xa1\x19\x4a\x9e\x27\xb8\x34\x12\xc3\x50\x75\x9d\xd4\xbd\x5c\x10\x74\x5a\x5f\xff\x24\xb3\x63\x50\xb3\xac\x8b\xc7\xbe\x5d\x69\xf1\x5b\x37\xf2\xd4\xad\x73\xb0\xf6\xdc\x43\x5d\x66\x6b\xc3\xca\xbe\x98\x71\x66\xed\x94\xef\x40\x8d\x88\x21\xf1\xb4\x64\xa1\x44\xa6\x84\x7f\xf9\xd8\x80\xf6\x39\x4a\x87\x06\x8d\x54\x3d\xe6\x75\x24\xb1\x91\x90\x84\x72\xe8\x62\x29\x4a\x68\x24\x2a\x4f\x4e\xcb\x3f\x2a\xdf\xb1\x77\xf6\x4d\x0e\x85\x37\x5d\xad\x5a\xb0\x30\xe8\xf4\x80\x7d\xa1\xd1\xec\x26\x60\xcc\xdd\x17\x0e\xee\x59\x7b\x64\x5b\xdd\xf4\xbe\x01\x39\x64\x39\xcb\x0d\x02\xcd\xb4\x35\x4d\x45\x6c\x64\x12\x8d\xd8\x81\x1e\xc4\xb1\x19\xb0\xac\x02\x34\x8f\xe1\xa0\x84\x12\x85\xf3\x7d\x22\x08\x04\x5b\x4f\x01\x5f\x2c\xbf\x3a\xee\x76\x0d\x7d\xf5\xbe\x11\xd9\x5e\x0c\xa6\x9b\x17\x1b\xfe\x08\xb6\xfe\x75\xe9\x83\x86\xc5\x33\xdf\xfa\xa0\xf9\xa1\x2a\xe5\x26\x3f\xde\x42\x2d\x69\xc1\x62\xc3\xda\x4a\xed\xfa\x5b\x59\x66\xb0\x83\x7e\xb8\xd9\xe8\xfc\x5f\x6b\xff\x6c\xf6\x68\x60\x87\xf7\xa9\x56\xc5\xef\x4f\x48\xb3\x7f\xb2\x69\xce\xc0\x5a\x22\xda\xb6\x80\x1c\x16\x32\x81\x66\x33\x96\x68\x18\x91\x21\x02\x46\x0c\x48\x6c\x8b\xae\xe1\x32\x32\x8c\xa0\x8d\x1c\x68\x12\xe3\x29\x2b\x35\xeb\x96\x15\xdb\x5d\x69\x6a\x81\xb1\xbd\x6f\xac\xbc\x58\xaf\x48\xf3\x03\xe8\x86\x40\xbd\x47\x65\x9a\xd5\xa2\xd5\x23\xff\xf5\x21\x23\xf6\x3e\x76\xf9\x46\x76\x9d\xf6\xf2\x9d\x82\xe3\x86\xe5\x2a\xfd\xd1\x80\xb6\x53\xce\x1d\xb3\xdf\xd8\xf9\xe9\x17\xf7\x7b\xf4\x6e\xbe\x65\xf2\x84\x87\x6b\x9a\xa6\x79\x43\x4b\x14\x0c\x5e\xd5\x35\x89\x56\x58\xc3\x56\x49\x10\x45\x7e\xa0\x99\x91\x4c\xf9\x91\x18\x79\x98\xc3\x92\xc8\x2a\x89\xa3\x0b\x98\xc2\xa1\xa6\x26\xae\xc7\x3c\x79\xf9\xd6\x1e\x3d\x97\xf3\x35\x58\x75\xe4\xde\x2e\x9b\xae\x7e\xb9\xd0\x1c\xbc\xbf\xca\xc1\x62\x85\xac\xc6\x1f\x8f\xe4\xd6\xed\x7c\xe9\xb9\x9c\x19\x47\xcd\xa6\x96\xb5\xa7\x6c\xc1\x93\xa9\x40\x93\x40\x02\x1d\x59\xf3\x15\x29\x74\x04\x03\xc4\x09\x47\x5c\x9b\xc8\xac\x2a\xb1\x0c\xc7\xc2\x98\xe5\x64\x68\x18\x20\x12\xe8\xd4\x71\x63\xc9\xb0\x7b\x3b\x92\xe5\xcd\x5e\x7a\x65\xce\xe1\x0a\x65\x4f\xf6\xca\x39\xfc\xdb\x25\x2d\xcb\x58\x75\xea\xac\x5a\xdc\xb9\x66\x85\xc6\x45\x94\xf4\x46\xe9\x44\xf3\x68\x87\x55\x44\x47\x65\x2d\xe4\xcb\x09\x1f\x6b\x36\x1d\x29\xb6\xa4\x5b\x21\xf4\xe2\x10\xea\x7c\x00\x4d\xd7\x70\xe2\x20\x01\x2e\x48\x24\xff\x29\x93\xa6\x69\x47\x36\x01\xb5\xe8\xc5\x97\x6b\xef\xc9\xd9\x23\xff\xfb\x21\x39\xb7\x84\x7a\x73\x12\x9a\xfa\xc9\xa2\x3e\x2b\xaf\xf0\x5f\x8f\xca\xf8\x18\x30\xb5\x5c\x01\x47\xfb\x0a\xe3\xf9\x9e\x6f\xf2\x08\x93\x40\x85\x8e\x67\xb2\x4e\xe4\xf0\xba\xcb\x73\xbe\x66\x3a\xc8\x36\x42\x93\x92\xc3\xc8\xb4\x23\x62\x33\x18\x3f\x19\x07\xce\x1e\x2e\xcc\xb6\xbc\xbc\x41\x7e\x61\x75\xe6\xed\xef\xf4\xd8\x90\x35\x7b\xe1\xc2\x6f\xbf\x72\x2a\xe7\xec\xcd\x5e\x27\xa5\xf5\xb7\xe3\xd3\x2c\x49\xcc\x51\x7e\x44\xa2\xd8\x73\xad\x30\xc6\x00\x46\x30\x66\x94\x08\xa8\x02\x9b\x70\x01\x63\x44\x44\x01\xb4\x6b\x00\x2e\xf4\x62\x02\x78\x2a\x76\x68\x37\x4e\x9d\xc6\x8d\xaa\xf1\x42\xb2\xf2\xc1\xd1\xcf\xca\xec\x18\x5d\x8b\x78\xfc\xe2\x63\xe6\xe0\x4d\x2d\x1a\xcd\x5e\xd0\xe8\x60\xb9\xc5\x7f\x58\x83\x33\xde\xa8\x4e\xbd\x77\xa5\x28\x0c\xa2\x05\xdf\x71\x7d\x4a\xe3\x54\x18\xc6\x2e\x4d\x08\x52\x24\x5a\xa6\x78\x40\x34\x48\x4c\x22\x61\x82\x02\xcf\xd3\x2c\x85\xd6\x4d\x4f\x4a\x7d\x41\xa6\x5e\x29\x56\xaa\xd3\x97\xaf\xcf\x39\x5b\xfc\x83\x4c\xcd\x86\x37\x3a\xb6\x45\xbe\x31\x3c\xdf\xf0\x41\x1d\x0a\x97\x38\x9e\x4f\xfd\x69\x62\x9a\x59\x63\x03\x94\x48\x8a\x6b\x5b\x01\x76\x35\xe8\x59\x8a\xc5\x98\x7c\x1c\xd3\xbe\x22\xb1\xb6\x28\xa2\x18\x1a\x28\x88\x09\x52\x03\x81\x66\x2d\x86\xf1\xa2\xff\x48\x9a\xff\xff\x47\x9e\xd9\xef\xb9\xea\x1f\x96\xdb\x7a\xf2\xd3\xd1\xaf\x7f\xe2\xaf\x58\x79\x3d\x9e\xfb\xf3\xc9\xa1\xa0\x52\x83\x1b\x1b\xcf\x0f\xb9\x3c\xad\x7f\x7a\x59\x59\xa0\x02\x3d\xd6\x75\x69\xda\x0c\x0d\x8f\x0e\x1c\x1a\x2b\x26\x16\x2d\x43\xd7\x9c\xc8\x20\x3c\x06\x89\x48\x4b\xac\xe0\x60\x46\xe6\x43\x06\x1b\x36\xa4\x94\xd4\x6b\xa9\x15\x26\x54\xfb\x61\x5e\xf8\x9b\xf7\x79\xcf\x65\xcd\xcb\xd1\x72\x96\xa3\xc1\xb6\x23\x33\xd6\xfc\xb9\xb5\x6f\x9e\x83\x93\xca\x8f\xdf\x9d\x71\xbd\xe3\xd4\xa8\x63\x60\xf9\x3e\x8d\xa0\xa7\xfb\x10\x4b\x1a\x0a\x7d\xd1\x60\x63\x9d\x68\x3a\xaf\x33\xa6\x08\x28\xe8\xab\x7a\xec\xf3\x84\x8d\x7d\x9c\x50\x12\xd1\xa2\x27\x7d\xf5\xc3\x69\xef\xee\x7a\xf9\xf3\xe9\xc7\x3e\xac\xf5\xc9\x54\xf9\x72\x8e\x41\xfa\x90\x1e\x2f\xbc\xd0\x2b\x5f\x45\x58\x77\xdc\x2b\xa8\x15\xf7\x55\x7a\x7d\x75\x1c\x28\xa2\x2b\xab\xaa\xaf\xfb\xba\xe3\x06\xbe\x61\x43\x17\x2b\x21\x6f\xd2\x09\x0a\x59\xd5\xe3\x58\x2d\x06\x34\x25\xd0\x00\x5a\x14\xc7\xa8\xb1\xf7\x14\xee\xff\xda\x70\x68\x35\x21\x1c\x72\x68\x5f\x83\xe2\x39\x17\x35\xfb\xb3\xd8\xc5\x3b\x73\x2e\xe4\xff\xb9\x0e\x73\x70\xce\xe2\x3c\xc6\x77\xe3\x32\x7e\x41\x52\x4f\x4f\x81\x85\xd4\x18\x08\x8c\x63\x30\x01\x96\x15\x25\xb1\x54\x60\x04\x36\xf0\xd8\xc4\x0f\x7c\x3e\x72\x45\x62\x11\x97\xb3\x05\xe2\x25\x6c\xe4\x25\x62\x0a\x58\x5d\xdd\x5a\xc6\x0f\xdf\x30\xfc\xdd\x1c\xf9\x3b\x4f\xfa\x76\xfd\x6f\xcc\x6b\xfb\x07\x74\xbe\x7f\x7b\xfc\x87\xfd\x5a\xf4\x1c\xf2\x6b\xa9\xa6\x69\x5e\x00\x83\x06\xb1\x6d\x02\x4d\x81\x67\x11\x6d\x90\x10\x98\x92\x61\x09\xba\x62\x3a\x0c\x4d\x78\xcf\xc7\x52\x24\x38\x14\xd0\x30\x54\x9c\x90\x82\x7c\x88\x9e\x52\x04\x4e\x7f\x34\x39\x78\x7d\xed\x0b\xc5\xeb\x66\x7e\xb0\xe2\xe1\xc3\x7c\xf3\x17\xd2\x57\xdd\xce\x65\x2b\x15\x2a\xd2\xa7\x9d\xe1\x1c\xfb\x3d\xe3\x4c\x43\xa9\xd7\x05\x4c\xc4\x42\xd7\x47\xba\x69\xf3\x52\x48\x61\x85\xb7\x3d\x9a\xc0\x50\x0f\x93\x90\x01\x42\xa2\x18\x86\x86\x84\xc4\xd7\x61\x20\xcb\x82\xa8\x46\x88\x49\x7d\xec\xcc\xb2\xe5\xd6\x14\x4e\x35\xe8\x3e\xeb\xd1\xda\x6a\xef\x57\xba\x7b\xbc\xd7\x9b\x63\x87\x7e\xb3\x68\x68\xb6\xa1\x25\x57\x7e\x50\x3d\x6f\x85\x34\xf3\x3a\x99\x12\xa3\x38\xc0\xd4\x09\x6f\x2a\x86\xa7\xb0\xb6\xac\x50\x6c\x6c\x78\x2a\x81\x6a\xa2\xea\x81\xed\x63\xd6\x13\x31\x17\x9b\x7c\x8c\x0c\xec\xff\x4d\x6b\xfc\xe4\xbd\x5e\x94\x1c\xfa\x68\x66\xef\x8f\xca\x6e\xcd\x8e\xef\xef\x7b\x7e\xdb\xda\xd9\x53\xa6\xce\x9a\xfb\xe8\x74\x30\xa8\xd5\xbc\x16\x2b\x6a\x35\x3a\x9a\xe6\x2e\x0e\x6b\x59\x92\xe1\x04\xb4\xcb\xfa\x81\x0f\x28\x99\x36\x24\x2b\x50\x7c\xdb\x12\x75\xce\x76\x0c\x21\x22\x36\x09\x13\xc1\xb6\x22\x93\x8f\x38\x4f\xfb\x5b\x31\xfd\xf1\x7b\xbd\xbb\x83\x5f\x7d\x9b\xd8\x26\xf3\xe4\x09\x5a\xb2\x20\x37\x07\x9a\x1f\x5f\xb4\xa1\xe3\x5f\x74\xd8\xbd\x7c\x91\x8e\x7f\x7d\x80\xb3\xa6\xd7\xd2\xbe\x64\xa1\x90\x23\x8a\xa4\x78\x2a\xa6\x4c\xc9\xf0\x03\x45\xa6\xbd\x08\x09\x44\xd5\x12\xd7\xd2\x81\xad\xf3\x62\x00\xcd\xc4\x0f\x25\x2d\xd4\x81\x6b\xa6\xce\xf6\x2e\x1f\xef\x17\x7c\x3d\xa5\xc7\x3b\x7b\x0f\x4c\xb1\x6b\xd6\xb9\x75\xa8\xe5\xbd\xf0\xc7\x8e\xe5\x0f\x55\x98\x59\x23\xf7\xf1\x87\x66\xe3\x4c\xe9\x3d\x36\xe0\x4c\xc3\x70\x7d\xc2\x81\x44\x61\x14\xcb\x26\x14\xe1\x4c\x57\x27\xc0\xa0\x02\x16\xb2\x91\x40\x71\x48\x53\x4d\x4f\x52\x3c\x93\xf8\xb4\x26\x09\x4f\xd9\x5d\x78\x71\x49\xa9\x96\xaf\x2c\x2f\xfd\xe3\x26\xf0\xcc\xfb\x63\x2b\xad\xfd\x78\x4b\x19\xe2\x5f\x1d\xf0\x60\x7b\xc3\x49\x79\x0b\x75\x8a\x4f\x95\x49\x6f\x88\x09\x43\xa8\x04\x92\x4d\x14\xdd\x82\x16\xc7\x00\xdf\x71\x68\x3a\x24\x1a\x64\xe8\x04\x06\x28\x34\x05\x41\xe2\x81\x26\x63\x33\x92\x65\x83\x11\x05\x2a\xc5\xba\xfa\x6b\x1d\xf3\x4c\xe8\x90\x6d\x99\xda\x3d\xef\x47\xdf\x74\xdc\xb9\x6b\xd9\x73\x2f\x0f\x5c\x57\x7d\xf7\xad\x97\x6e\x1e\x2a\x71\xec\xc8\xe4\x81\x19\x87\x40\xa7\x1e\x40\xd9\xba\x60\x24\x72\x12\x48\x5c\x6c\xf0\x22\x03\xf5\xd0\x32\x69\x37\xb1\x19\x9b\xd1\x80\xe1\xc4\x48\x8a\x28\x24\xe9\xb1\x80\x20\x4b\x45\x8c\x93\xd0\x4f\x1e\x99\x71\xde\x7a\x8f\x7e\x79\xe3\xf8\x4a\xee\xc3\x09\xeb\xce\x34\x7b\x61\x43\xb3\x41\xa7\xa6\x1c\x2f\x79\x73\x14\xb7\xb6\xcd\x9e\x8f\xd6\xa6\x59\x87\x54\xe4\x62\xd9\x90\x29\x9d\x36\xe3\xd0\x8f\x40\xac\x09\xac\x1b\x26\x26\x71\x55\x51\x8e\xb1\x2b\x70\xd0\x75\x02\xac\xd1\xa6\x20\x42\x9d\x56\x21\xfc\x5b\x14\xfb\x49\xef\x31\xf4\x64\xde\xb6\xe5\x26\x84\x97\x5e\xaf\x3d\x53\x5a\x31\xec\xd8\xe5\x7e\x13\xf9\x97\x1a\xae\xfc\xba\xe3\x9d\x59\xfb\xa2\x89\xce\xab\x19\xaf\xfa\x53\x2b\xbe\xd2\x14\xe0\x25\xc1\x40\x9c\x2f\x45\xc8\xb7\x03\x2a\xb6\x7c\x1b\xc5\x22\xe4\x63\xe2\x69\x22\xa5\x04\x80\x17\x68\xcd\x8d\x80\xe7\xd2\x04\x7b\xff\x71\xec\x7f\x48\x75\x0a\xff\x29\x0f\x40\x87\x8b\xd7\xa8\xd0\xb8\xdb\xb7\xe5\xf2\x29\x1b\x98\x77\xca\x17\xb6\x9e\x3f\x5c\x29\x57\x91\xdc\xc9\x77\x57\x33\x1e\x15\x53\x96\x02\x91\x28\x45\x5a\x48\xf3\x94\x23\x01\x27\xf6\x23\xca\x52\x1d\xc2\x27\xb2\x41\x85\x31\xc5\x45\x8e\x0c\xa1\x6a\xd9\x32\x61\xb0\xeb\x3b\x7c\x84\x63\x20\xa4\x2e\x05\x56\xb2\xe7\xbb\x7d\xbf\xa3\xcb\x2f\x27\x7f\xdd\xb7\xff\xd1\x5b\xe5\x7f\x2f\x3e\xba\xd4\x07\xcb\xaa\xe6\xa8\x3b\xa5\x6a\xa1\xb7\x8b\xae\x98\x9c\xf1\x21\x41\xca\x3b\xad\x3b\x16\xed\x12\xe0\x6a\x9e\x48\xb1\x71\x2c\x84\x9c\x61\x84\x91\x27\xb1\xb6\xa6\x79\xac\xa7\x6b\x44\x0d\x43\xce\x8e\x81\xa1\x05\xd8\x06\x04\xf0\xea\x53\x5a\x0f\x7f\x6c\x18\xb8\xe3\x66\xb3\xda\x28\xfc\x6b\x76\xfb\x3f\xe3\xb7\x99\x09\x3f\xb4\xff\xb2\x4f\x83\xfb\x59\x1a\xba\x0d\xe9\x9b\xdd\xaa\x6c\x7e\xfc\xd7\xcf\x8e\xbf\x62\x0c\xed\xf6\xc2\xba\x2b\xbd\x4a\x5e\xe5\xb3\x56\xd5\xdb\x4c\xe4\x4f\x9f\x9a\x50\x6e\xd6\xe4\x92\x9b\xf2\x97\x58\x32\xe9\xa7\xc7\x2e\xdf\x87\x57\x7e\xfb\x78\xd4\x59\xee\xf6\xa1\xb3\x55\x57\x0d\x98\xbc\x62\xe7\x9a\xab\xd3\x57\x85\x0d\x66\x7c\x76\x06\xcc\x88\x8e\x96\x59\x91\x66\x93\xc8\x91\x21\x07\x82\x63\x98\x52\x98\x38\x1e\xd0\x13\x1e\x06\x3a\x6b\x43\x55\x49\xa8\x00\x41\x89\x91\x92\x90\xa5\x1d\xd6\x12\x6c\x0a\xb0\x8c\xe0\xb8\x29\x1a\x15\x53\x17\x97\x78\xc1\xea\x54\xf9\xc6\xb9\xde\x65\x8f\x8f\xaf\x31\xa2\xf8\x8a\xb1\xf2\xe1\x21\x67\xc5\x91\x17\xbe\x32\xf6\x54\x6d\x9c\x25\xcd\x78\x65\x20\x03\x4f\x09\x15\x0f\xca\x4e\x80\x68\x55\x61\x14\xd6\xa6\x6d\xce\xb1\x2c\xce\xd5\x44\x98\xc4\x42\xcc\x85\x9c\x2b\x5a\xa6\x1b\xd2\xaa\x1d\xbb\xf0\x29\xb9\xcd\x8f\x85\x32\xbf\x3b\xd5\x3c\xfb\x4e\x54\xf3\xe7\x60\x70\xf3\x3c\x4b\x2f\x54\xe7\xe7\x2e\xad\x98\xf3\xf5\x76\xa1\x5c\xb0\x61\xbf\xa6\xa3\xd2\x6b\x69\xcc\xc8\x6a\x0c\x2d\x31\xb1\x03\xec\x69\xbc\x03\x50\x62\xf2\x08\x59\x8a\xe0\x0a\x72\xa0\x28\xd0\x4a\x0c\x31\xf2\x13\x96\x32\x4c\x91\x44\xb4\x8e\x60\x6a\xef\xe4\x6e\x68\x98\x67\x65\x91\x4f\x6f\x2e\x6e\x3b\xa0\xd7\x85\x2d\x61\xb9\xf2\x17\xde\x60\xf3\xc3\xb7\x7a\xe4\xac\x50\xe6\xfe\xe9\x06\x7f\xdd\x4f\xef\x53\xc7\xb6\x4c\x51\x2c\x4f\x09\x6a\x12\xf0\x34\xe5\xf0\x31\xef\x73\x12\xcd\xca\x6a\x12\x53\xa6\x63\x47\x9c\x47\x90\x25\x31\x89\xe4\x68\x61\x12\xb3\xff\x8b\x2f\x7d\xbc\x0e\xbd\x8f\xb3\x51\xcf\xd7\xfa\x6a\xf3\xb2\xb5\xb8\xf5\xaa\x7a\x60\xe0\x2b\x0f\x36\x57\x38\xfc\xf6\xf1\xa3\xcc\xd9\x8b\x57\x3e\x9c\xf2\x69\x9a\x55\x26\xd8\x7f\x1d\x92\xa7\x22\x24\xf1\x7c\xa4\xcb\x34\x2d\xfa\x51\xec\x73\xb4\x2e\x07\x2c\x84\xd0\xa4\x5c\x13\x45\x3c\xab\x32\x9a\x29\x22\x11\x6a\x50\x10\x53\x57\xfc\xed\x5b\x06\x1d\x3e\x5b\xf1\x7b\xab\x9d\x03\xfe\xa8\x57\x55\xca\x3c\xfe\xc4\x6b\xa3\x8b\xad\x3f\x62\x3c\xf3\xfb\x8e\x97\x56\x34\xde\x34\x71\x4c\x9a\xc1\xc7\x01\x47\x85\x34\x48\x0c\x45\x89\x1c\x39\x90\x3c\x8e\xb2\x38\x2f\x48\x28\x23\x56\x01\x36\x62\x59\x22\x9a\xec\xb1\xaa\x8c\x54\x64\x8a\x58\xa3\x88\xf5\xa4\xa5\xc5\x3d\x93\xd5\x1c\x35\x70\xed\x4b\x0e\x5d\xe8\xbd\x5a\xfc\xc1\x45\x7e\xcf\x28\x6f\xbe\x05\xab\x9f\x5f\x9e\xb3\x60\x0d\xb5\x71\xc6\x17\x34\x52\x3e\x45\x1c\xd0\x1e\x1b\x45\x0c\xa5\xe8\x0a\xad\x9b\xb6\xe7\x46\x4e\xac\x85\x04\x20\x5b\x0f\xd5\xff\xd1\xa4\x83\x11\xe2\x58\x4e\x96\x30\x23\xe8\xb4\x47\x9e\x46\x8f\xf1\xda\x88\x71\x5b\xfa\xce\x28\xfe\xfe\xb0\x5e\xce\x94\x36\xb5\xc2\x1a\x9f\xbe\xfa\x5a\x89\xbc\x4d\x9b\x2f\x5c\xba\xa4\x6b\xde\xaa\x1b\x6a\xbe\xf2\xd8\x77\xa9\x33\xec\x62\x98\xbf\x5b\x7f\xf7\xf8\x87\xb0\x6e\xfe\xdd\x3f\xe8\xca\xb3\xcf\x75\xab\x5c\xf8\x6e\xe5\x51\xdf\x0e\x1f\x95\x77\x4a\xde\x8c\xd3\xd3\xa7\x1e\xe4\xc3\x88\x67\x18\x2f\x36\x29\x55\x11\x39\x1c\x89\x18\xc4\xb1\x2b\x40\xc6\xe3\x90\x18\x42\x88\x75\x89\xe6\x12\x09\x01\x86\x33\x90\xca\xb2\x24\x09\x9e\xcc\xee\xef\x0f\x7c\xe5\xf9\x12\xdd\x5a\x15\x7c\x01\x7d\x3f\x2e\xbe\x3b\x7e\x66\xd7\xe5\xe4\xc5\xcd\xbb\xdd\x7e\xf3\x1a\x36\xaa\xfe\xdd\xb8\x99\x69\x56\xde\x8a\x55\x9f\xc7\xa2\xc2\xb2\x89\xcb\x50\x2e\x16\x54\x0e\xeb\x2a\xed\x49\x74\x10\x51\x9c\x64\x48\xd8\x06\xa2\xc0\xa2\x40\xb0\x74\x1d\xc9\x9e\xa5\x22\x2f\xf5\x0b\x78\xfd\x4e\x78\xe5\x80\xaa\x8b\x4e\xbe\x8a\xed\x1e\xdc\x59\x57\xee\xb7\x8a\xab\x27\xcf\xd8\x53\x67\xc3\x33\xe5\x0f\x97\x6c\xb1\x26\x67\xc6\xa7\xe1\xa9\x19\xf5\x11\xeb\x9b\xbe\xa0\x29\xa6\x10\x24\xbe\x47\x71\x96\x44\x13\xcd\x8a\x04\xd5\x22\xbc\x4c\xfb\x3c\xe5\x69\xa2\x2b\x61\x9d\xb2\x04\x87\x21\x02\x97\x2a\x18\xf5\xd8\xde\x8e\xbe\xb8\xef\xf3\xca\xfc\xa4\x0a\x1f\xfe\x75\xa4\xe6\xf6\xdf\x2f\xb5\xfb\xb0\xf9\xb2\x35\x59\xe0\x7a\xb2\x6b\xcf\xf0\x07\x3f\xa6\xd7\x3d\x06\xc4\xd0\xb4\x44\x15\x98\x38\xe2\x35\x5e\x4f\x3c\x1e\x29\x8c\xa3\xf9\x12\x72\x09\x8a\x75\x9b\x17\x43\xcf\x57\x1d\x93\x62\x18\xc9\x34\x6d\xc6\xf5\x94\x4c\xff\x57\x30\xec\xbf\x0d\x6b\xfa\xd7\x2f\x59\xbb\x64\xc9\xc7\x27\xf8\xbf\x34\x5b\x3d\xe7\x9d\xf3\x4d\x46\xb4\x1a\xa8\xbc\x73\xec\x76\x76\x63\x7f\x9b\xfa\x8f\xb8\xb9\xb9\xcb\x6d\x61\x95\xd2\x73\xc0\xcc\x8c\x6b\x40\xa7\xee\x82\x48\x8a\x66\x23\xe0\x46\x18\x98\x86\xc6\x62\xc6\xc2\xbc\xcd\x73\x8c\x26\x53\xc4\xd3\x54\x8a\x80\xc8\x14\x31\x85\x7d\x8e\x0a\x90\xa6\xd2\x40\x08\x52\x87\xdc\x7d\x15\xe6\x37\x2b\x97\xbc\xd7\xbf\x72\xc9\x4c\xc6\xf8\x7e\xc3\x96\xec\x59\xdc\x1e\x17\xf1\x84\x12\x9d\xc7\x2c\xde\xb9\x3a\xff\x4b\x2d\xd2\x7b\x9f\x02\x5b\x23\x7e\xe4\xcb\x16\x47\x2c\x5b\x72\x38\x91\x44\x49\x44\x33\x8a\xc6\xf2\x81\x63\x86\x01\xad\x47\xbe\x42\x07\x54\x42\xc7\xac\x4d\x21\xdf\x11\x9e\xb2\x64\xb0\xa6\xe2\x88\x8f\xfb\x6c\xb7\xde\x7f\x75\x7e\x83\xf2\xbf\xd4\x2a\x0d\xae\xfd\x7a\xa7\xf5\xf3\x9f\x17\x5c\xd6\x27\xef\xca\x66\xb7\xca\xb7\x49\xb3\xb2\x67\x44\x44\x51\x8c\x15\xcf\x50\x45\x89\xc1\x4e\xe2\x6a\xaa\xef\x00\xe8\x11\xd7\xd5\xb0\x1c\x98\x01\x05\x59\x9f\x33\x23\x4f\xf4\x14\x2d\xf2\x21\xcf\x7b\xa9\x8f\xfd\xe9\x10\x5b\x99\x73\xf3\xbd\xb7\xb6\x37\xf9\xa3\x69\xdf\xfc\xa3\x87\x94\xbe\xbc\xe5\xad\xd2\x8b\x7e\xb8\xb0\x37\xab\xdd\xb5\xcd\xc9\x47\x19\x67\x6f\x48\x5d\x14\xa8\x96\x10\x04\x48\x64\x10\x0a\x55\x29\xc0\xa6\x2d\x38\x02\xb4\x75\x16\x53\x80\xc1\x02\xaf\x1b\x3e\x4f\xc9\x02\x6f\xb1\x3e\xf1\x95\x44\xa1\x9c\x27\x9f\xc2\x7f\x1b\xe9\xf5\xaf\x9f\xe3\xf9\xff\x2b\x56\xf2\xd3\xeb\x47\x4b\x8e\x1e\xfc\xfa\x46\x79\x54\xb5\x2e\x03\x64\xa7\x9b\xad\x57\x5b\xe5\xc9\xb9\xea\xf6\x3d\x4a\x5e\x6e\xd9\x31\xf7\xe1\x34\x83\x7d\x79\x29\x00\x36\x93\xc8\x9c\x0c\x25\x27\xd4\x13\xc5\x8c\x38\x97\x09\x24\x17\x24\xaa\xe1\x30\xc0\x47\x66\x4c\xab\x26\x74\x4c\x2a\x8a\x01\x03\x13\x35\x75\xe9\xf3\xd3\x8c\xd1\x97\x96\xef\x69\x7d\xae\x61\xa7\xb6\xb9\xbe\x3f\x78\x7f\xda\x4b\xe3\xcf\x55\x9c\xd0\xa8\x62\x0b\xf5\x40\x5c\xfc\xdb\xc1\x7f\x74\x4e\x6f\x72\x21\x4a\x7e\xec\x85\x84\xc3\x1e\x54\xb4\xd0\x45\x3a\xe3\xa8\x3c\xc7\x72\x0e\x08\x12\x27\xe1\x55\x25\x32\x42\x9b\xd1\x24\x2f\x72\x21\x0b\x11\xc5\x53\x52\xea\x63\x37\xbe\xbe\xa8\xe5\x82\x29\xb3\x3e\xbc\x37\xe2\x16\xb7\xe6\x24\xb5\x60\x68\x51\xd2\xe4\xde\xae\x52\x59\xa3\x52\xf5\x4b\xfd\xde\x78\x55\xc6\xd9\x5a\x52\x4b\xfe\xc5\x16\x8f\xff\x15\x5c\x29\x29\x80\x36\x86\xae\x2f\xc8\xb1\x6b\xba\xba\x95\x70\x96\x26\x79\x5a\xa0\xb8\x31\x9f\x60\xc4\xd1\x91\xcd\x42\xcd\x4b\x9e\x02\xa2\xbb\xbb\xf2\xd1\xad\xa9\x15\xca\x9f\x7f\x31\xcb\x9a\x2d\xad\xd6\x2e\xaa\x76\xb0\xf4\xa2\xfd\x4d\x8c\x6d\x0d\x2a\xea\xdd\xa6\xfe\xfc\xf5\xdc\x8c\xab\x24\xa5\x3c\xb6\x49\xf9\x7e\x68\xea\x16\xeb\x5b\xbe\x8a\xd9\x18\xe8\x94\x8a\x58\x5b\xd6\x58\xcb\xe6\x88\x19\x4b\xa2\xce\xb3\x00\x50\x1c\xcf\xc6\x5a\x2c\xb8\x0c\xf5\x0f\x1a\x6d\x48\xb6\xff\xb7\x12\xb3\x7f\xdd\x1c\x4d\x1e\x7f\x08\xa7\x4a\xe5\xa9\xd1\xad\x8b\x35\x76\x6e\x23\xaf\xd7\xd7\x05\x46\x35\xae\x3e\xae\x92\x51\xa3\xd5\xa0\x89\xbf\xfb\x8d\xb6\x9e\xd9\xb1\x3f\xe3\xf4\xc5\x29\xff\x23\x8d\x6d\x13\x21\x6c\xa9\x0c\x4d\x0b\x91\x24\x0b\xa2\xa1\xf9\xb2\x44\x63\xc3\x25\x31\x9d\x00\x41\x86\xb4\xe7\x68\xbc\xc3\xea\x6a\x40\x85\x34\xa1\xb4\xd4\x9f\xe6\xde\xc2\xb5\x5f\xbf\x57\x67\x79\xde\x67\x5b\x97\x2d\xd9\xf9\xa3\xce\xa8\xc8\xc5\xf2\xd7\xa6\xb4\x7a\xb5\xdc\x91\xd7\x7e\xdc\x55\xad\xde\x33\xfb\xd3\x4c\x23\x12\x02\x4b\x14\x04\x9a\x13\x08\xcb\x03\x1f\xba\x24\x20\xae\xa5\x61\x6c\x41\x5e\x86\x91\xe7\xd1\x92\x0c\xb0\x00\x9d\x80\xd1\x7d\x27\x14\x5d\xf7\x29\x02\x56\x5f\x14\x5d\x77\xa2\x4b\xc3\xfd\x5d\xbf\x59\xf1\x69\xc3\xfe\x9b\xca\xbd\x5f\x64\xd3\xd0\xdd\x1f\x4d\x4a\xaa\x1e\xf9\x96\x1c\x9d\x5e\x60\xa7\x90\x5e\x6b\x7b\xa6\x00\x59\x89\xf5\x42\x99\xa2\x23\x22\x5a\x1c\x6f\x78\x96\x22\x24\x26\x11\x92\xc8\xb5\x35\xd3\x36\x79\x9f\x0d\xb0\xc7\x6a\x9c\x8b\x91\x80\xa1\x90\xda\xda\x2b\x46\x5e\x9f\x58\xc2\x99\xb8\x84\x54\x9c\x5b\x6c\xdc\x6b\x23\x7f\x28\xb8\xc5\x5b\x53\x3f\x4b\xd1\x92\xea\xc0\x85\x7f\x4d\x6a\xd6\x22\xe3\xb5\x7a\xca\xde\x96\xe7\x59\x06\x85\x6c\x3f\x80\x44\x13\x6d\xc9\x32\x0c\x86\xf7\x02\x4a\x54\x58\xda\x31\x03\x5f\xb5\x44\xdb\xb0\xb0\x8e\x44\x9f\x0f\x10\x6f\x85\xa2\xef\x3e\xb1\x63\xf0\xdf\xba\x27\xfd\xeb\xd7\xce\x54\xa0\xf6\xe3\x08\x65\xbb\x57\xae\x22\x85\xda\x4d\x57\x7f\x5b\x58\xac\x83\x4b\x9b\x83\x7f\xd0\xaa\x71\xb3\xcb\x96\x51\x67\x1d\x6d\x70\x34\xef\xc0\x17\x33\xbe\xb7\x92\x1a\xed\xc1\x44\xba\xa2\x46\x3c\xb2\x8c\xc4\x75\xb1\xaa\x21\x2f\x36\x13\xc1\x0a\xdc\x08\x8a\x24\x34\x1d\xd5\xe3\x15\x8c\x6c\xcd\xc0\x6c\x10\xa9\xaa\x29\x3c\x65\x15\xb9\x5d\xd5\xdd\xd5\xeb\x74\x6c\xf1\xc6\x83\xc6\xf9\x6f\x2d\xff\x33\x67\xb4\xec\x60\x3c\x6c\x64\x9e\xd6\x7b\x0e\xbf\xc5\x2c\x5f\x36\xe0\xa7\x45\xe9\x7d\x0a\x04\x85\x84\x92\x1c\x99\xa5\x80\xe6\x50\x0e\x8d\xa5\x80\xe2\x54\x20\x47\x5c\x20\x5b\xae\xa8\x1a\xb2\xe1\x10\xd9\x4a\x78\x97\x95\x44\x2a\x84\x32\xf5\x14\x2a\xac\xb7\xb3\x7d\x9f\x73\x40\x0b\xb6\xca\x7b\x13\x67\x75\xfa\xee\xd9\x97\xbe\xff\xe0\x5a\xbf\xc3\x35\xdb\x5e\xd5\x2c\xb8\xa3\xe1\xc8\xf5\xd6\xed\x34\xef\x16\x47\xc8\x36\xa5\x18\x53\x6c\xac\xd1\x22\x47\xdb\x3e\xb6\x2d\x4a\xd6\x63\xdb\x67\x5c\x14\x6a\xc0\x52\x24\x4f\x0e\x0c\x9e\xa6\x14\x46\x71\x4d\x5d\x7c\x8a\x88\xd5\xcf\x53\xaa\x8d\xa8\x76\x38\x7f\xd3\x6a\xf7\x73\xb7\x6e\xb8\xa4\x56\x91\x39\x99\xcf\xe5\xab\x5f\xfb\x92\xcb\xf6\x78\x77\xb1\xdd\xa3\x5b\x7a\xc5\x3f\x78\x94\x78\x09\xc4\xba\xaa\xb1\xbe\x4d\x87\x6c\xe4\x9b\x22\x2f\x1a\x9c\xed\x73\x01\x96\xa1\x2a\xf0\x09\xa1\x95\x48\x30\x1d\x5f\x50\xb5\x20\x82\x81\x2e\xa7\xb6\xf6\xc3\x19\x57\x3e\xdf\x2b\xfd\x3c\x68\xec\x96\x06\x1d\xb8\xef\x96\x7f\x50\xad\xfb\x82\x15\x03\x57\x9f\x68\xff\xd2\xe6\x81\x2d\x2b\x8f\x29\x91\x71\xb8\xd6\x53\xb4\xa7\x95\x80\xe5\x05\xca\x71\x3c\x22\x10\x3a\xe2\x35\x56\x72\x03\xcd\xe1\x2d\x8e\xd1\xa0\xe1\xf1\x34\x17\xaa\x9a\xe9\xbb\xaa\xc5\x98\x0a\x65\xb3\xd4\x3f\xda\x5b\xff\x46\x28\xff\xb7\xe2\xbe\x7f\xbd\xda\x03\xff\x8f\x20\x32\x7d\xf5\xb9\x4e\xcd\x4a\x5c\x1f\xbe\xe9\xcb\x2a\xbf\xbf\xfb\x46\x8b\x21\x5d\x6e\x77\x6c\x7b\xf5\xe3\x4b\x9d\x36\x4e\x39\x3b\xae\x50\x80\xbf\x4f\xf3\x34\x0c\x69\x7c\x1c\x39\x89\x68\x78\x82\x4b\xcb\x8e\x68\x4b\x8e\x17\xb1\x88\x8e\xa1\x4d\xec\xc0\xf3\xb8\x58\xf0\x41\xa2\x28\x44\xe5\x01\xb6\x11\xf5\xf8\xe4\xe0\x3f\x42\xf0\x80\xe5\x2b\x5a\x76\x7e\xf5\x6a\x8f\x16\x35\x4f\xce\x5f\x74\xa8\xe0\x88\x43\x9f\x57\xe9\x31\x7d\xe9\xaa\x1e\xed\x6f\x7d\xde\x7e\xe8\xba\x97\xd2\xfb\x12\x64\xac\x24\x02\xcd\xf1\x82\x61\x50\x9c\xe5\xaa\x9a\x08\x62\xe8\xd8\x8a\x03\xc5\x44\xa0\x12\x94\xd0\x34\x90\x98\xc0\x0c\x0c\xa0\x38\x96\x13\xda\xff\xa1\xa5\xff\xd8\xb1\x2b\x7c\xbe\x6d\xd2\xd6\x61\x7f\x5d\xf8\x46\x3c\xd7\xee\x4c\xd9\x6a\xbd\x1a\x8d\xcf\xbe\xbd\xfb\xfc\xad\xa3\x6a\xdb\x9f\x06\x13\xf2\xae\x48\xaf\xde\x1f\xef\xd3\x3a\x4c\x5c\xdd\x89\x90\x4b\x47\x8a\x07\x15\x43\x50\xb8\x48\x12\x45\x35\xe1\x74\x4f\xd2\x54\x91\x37\x28\x5b\x74\x55\xd3\x57\x65\xcf\x8f\x6c\xfe\x29\x08\xe5\x53\x85\x4a\xe5\x18\x98\x2b\xc8\x3a\x6c\xc8\x67\x1d\xe4\xee\x4d\x0e\x8c\x5c\xd7\xfe\xcd\x4b\xdd\xf2\x1e\x5d\x71\xed\x4c\x8e\x5f\xec\x4f\x67\xa6\xf7\x25\xb0\xd8\x93\x25\x4e\x0d\x69\x15\xc5\x36\x8a\x12\x4d\xe0\x6c\x2c\x88\xba\xc6\xf2\x90\x62\x2c\x39\x46\x26\xc3\xaa\x89\x89\x15\xd3\xc0\x76\x92\xc4\xc2\x3f\xe2\x07\xf3\x5a\xfe\x2f\x19\xc9\xfd\x79\xfc\x96\xe3\x95\x0f\x74\xb8\xb9\xaa\xdc\xc5\x83\x47\xb2\xb2\xab\xb3\xd4\xb9\x2c\x8e\x39\xf8\xa2\x9e\xdd\xba\xe6\xcd\x18\xdc\xbf\xfe\xa3\x9f\xff\x57\xbd\xe7\x9f\xbf\xd9\x6f\xe8\xfd\xb5\x5d\x1b\xcf\x68\x3a\xe3\xc4\x82\xcc\xe5\xb8\xee\xbf\x94\x18\x56\x7c\xaa\x73\x7a\x42\x93\x1a\x57\xf4\xe6\xed\xcb\x0d\x4e\xb3\x46\x60\xcc\xa8\x34\xc0\x3c\xcf\x1a\xd8\x93\x7c\x51\x13\xdd\x30\x96\x12\x5a\x01\xa2\x03\x22\x3d\xa2\x1c\x04\x22\x46\x8c\x81\xe1\x08\x8a\x23\x40\xc7\xff\xbb\x4f\x9d\xa2\xa7\x97\x30\x61\xd5\x36\xcf\xb7\x9a\xc6\xd4\x9d\x91\xa9\x6e\xab\x61\x47\xf3\x94\x60\xfa\x2f\x08\xbf\x3e\xd7\xbe\xea\xd6\x1e\xa3\x46\xad\xfd\xec\xb1\x4e\xd3\xce\xea\xdf\xfc\x31\xb8\xd0\x89\x19\x63\x3b\x8f\xd9\xd7\xb6\xd3\xe7\x68\xeb\xa3\xf6\x7f\x34\x6f\xff\x32\x7f\xbc\x49\xbe\x77\x60\x93\x1d\x19\xa7\xed\x4b\xad\x49\x66\x91\x88\xf3\x54\x99\x38\xd0\x55\xb4\x30\xe4\xa1\x23\x40\xc5\x8d\x23\x19\x26\xd8\xd3\x6c\xd1\x06\xae\x4f\x5c\x96\x97\x2d\x5d\xa2\x05\x19\xba\xf8\xc9\x5e\xeb\xb5\xa9\x0d\xc7\xb7\x1c\xdc\xa3\xcb\x8f\x3d\x86\x4e\x0a\xab\xd1\x5d\xea\xaa\xcc\xa6\xc6\xed\x0e\x5e\x5d\x3a\xf1\xfe\xd7\x17\xbe\xb9\xd4\x21\xcd\xb4\x43\x46\x28\x68\x92\x95\x44\xa6\xa6\xeb\x94\x81\xa9\x40\xc5\x32\xb2\xa8\x88\x37\x63\x56\x88\x54\xd9\xc3\x86\xe2\x0b\x88\x17\x68\x46\x70\x28\xdb\x04\x66\x6a\xd2\xb2\x66\xf3\x1b\x0c\x7a\xad\xc0\x24\xed\x48\xf4\xdc\xb5\x95\x97\x6f\x3d\x3f\xbf\x6d\xbe\x02\xef\xec\xda\x7c\x61\xf8\x2f\x75\xdb\x0f\x9b\x5d\x05\xa6\x99\x97\x4a\x42\xc8\x4b\xcc\x40\x72\xb0\x1f\x45\x32\x54\x63\xd5\xe2\x75\x35\x81\x2e\x60\x91\x29\x10\x59\x76\xe9\x10\x84\x0e\x02\x12\x60\x45\x8d\x33\xfd\x14\x96\xee\xe1\xcd\x2b\x32\xf4\x44\x9d\xc5\xc3\x1b\xab\x95\x83\xd3\xd9\xe7\xfe\xf4\x4d\xf7\x43\x55\x2a\x7d\xd2\x66\x83\x74\xb1\xa0\xd6\x2d\xc8\xb8\xea\x6a\x6a\x56\x53\xcf\x36\x64\x92\x30\x88\x28\xac\xe1\x1b\x36\x65\x45\x22\xe1\x44\x5d\x04\x94\xe7\xc8\x8c\x4e\x4c\x03\x5a\x76\x88\xc4\x84\x4e\xb0\xc3\xd8\x1c\x7e\x0a\x69\x59\x83\xc1\xd6\xc8\x77\xa6\xbe\xf4\x5c\x97\x41\xbb\xb6\x3f\x7a\xf6\xe5\x32\x9f\x71\x1f\xf7\x6b\xff\xd5\xba\xbe\x6b\xde\x66\xac\xef\x9a\x9c\x4e\xb3\x4a\x66\xc4\x45\x90\x22\x6e\xc0\x9b\xbe\x03\x2d\x15\x42\x28\x02\x91\x36\x24\x05\xba\xa2\x2e\x46\x21\xed\x11\x99\x38\xba\x10\xc5\xd0\x90\x90\x80\xa5\xbf\x97\xbe\x1f\xb7\xf4\x84\xfe\x5c\xc5\xde\x87\x71\xaf\x53\xb8\xd7\x1f\x0f\x3f\xae\xf6\xfb\xa9\xa3\x1f\x16\xdb\x74\xab\x54\x99\x65\xfc\x9c\x06\xe5\xc7\xf3\x19\x2f\xc6\x52\xc3\x94\x04\x26\xf0\x1c\x4d\x51\x0c\x91\x86\x24\x22\x90\x86\x82\x44\xfb\x01\xad\xd0\x16\x2d\x04\x7e\x62\x46\x14\xc3\x05\x82\xe4\xbb\x1c\x4a\xa2\x20\x71\xe3\x27\x5b\xeb\x7b\xde\xcb\xf9\xd2\xc9\xb2\xb5\x6a\x6d\x6f\xf8\xdb\xd5\xdf\xa4\x6c\x1e\x13\xd6\x6f\xb9\x6c\x62\xf3\x7c\x95\xc9\xf9\x0b\x64\x71\xb3\x3c\x69\x06\x39\x5a\x8a\x1d\x90\x08\x40\x23\x44\x58\xd6\x62\x3d\xf0\x11\x45\x80\x13\x24\x26\xe1\x99\x44\x50\x75\xcf\x62\x43\x07\x0a\x82\x28\x1b\x3c\x67\x6a\x22\x9f\x7a\x8c\x37\xcc\x7e\xbd\x7b\x93\xcd\xfd\x07\xd7\xa5\x2b\x72\x73\x50\xdd\xb5\x65\x46\xf4\x1b\x8a\xef\x74\x5a\x51\x6c\xf2\xb7\x79\x76\x56\xc8\x99\xf1\x0d\xd7\x94\x96\xb6\x65\x91\x82\x6c\xc2\x24\x9a\xe7\x9a\xbc\x62\xb8\x92\x03\x90\xc8\x69\xa6\x1a\xb8\x32\x67\x21\x96\x0b\x89\xa9\x82\xc0\x31\x43\x43\x49\x04\x46\x21\x24\x05\x44\xe9\xfa\xac\x1b\x5d\xd7\x06\x4d\xe0\xbc\x7e\xe2\xdd\x2d\x6f\x94\x7e\x69\xb7\xf8\x49\x3f\x76\xa9\x34\x61\x73\xf7\x7b\xef\xad\x28\xb2\x31\xdd\x34\x24\x3c\x48\x30\xe5\x4b\x81\x14\x00\x05\x13\x4e\xd5\x1c\x4f\x54\x31\xe2\x0d\x41\x15\x05\x86\x31\x20\x50\xac\x44\x12\xbc\x80\x8b\x65\x3b\x10\x30\x4e\xfd\x0c\x73\xa8\x6f\xdc\x5a\x3c\xfb\x61\xed\xfe\x5b\xb7\x1f\x6b\xff\xda\xdc\x0f\xaa\x36\x65\xdb\xc5\x6f\xe4\x43\x93\x72\xdf\xbd\xae\x4f\xae\xb6\x36\xcd\xbc\x54\xc8\xe0\x81\xcb\xd2\x0c\x45\x00\xeb\x31\x0e\x64\x74\x06\x70\x3e\x67\x00\x3f\x88\x22\x4b\x20\x4c\x68\xfb\x1c\xc7\xe9\x0a\x65\x9b\xb6\x4a\x44\x97\x7a\x72\x88\x51\x72\xd8\xec\x51\x53\xbf\x6f\xb3\xec\xe8\xe5\x96\x55\xc1\xd5\x46\x45\x4b\xcc\x38\x5b\x2a\xf3\x47\xfc\x8e\xf2\x07\xab\x6c\x30\x27\xad\xee\x91\x5e\x1f\xed\x4b\xaa\x20\x48\x46\x8c\x4d\x24\x39\xb2\xc2\x8a\x62\x42\x82\x98\xf0\x86\xca\x05\xa1\xec\x09\x8c\xcf\x70\xba\x24\xdb\x46\xe2\x39\x8e\x20\xb0\x61\x2a\xda\xa3\xc9\x53\x73\x9f\x6e\x31\xfa\x17\x75\xdf\xba\x7a\x2b\x4f\x5f\xea\x71\xbd\x4d\x35\xba\xe7\x92\x52\x83\x4b\x95\x7e\x66\xdc\x88\x9c\x73\x27\x65\x9c\x79\x3a\xf5\xb6\x82\xe4\x42\x5d\x24\xa2\x4a\x88\x6f\x7a\xae\xe6\xfa\x82\x8d\x55\xcd\xf7\x5c\x1b\xd1\xb2\x23\xe8\x98\x53\x01\x4d\x02\xac\x62\x2c\xd8\xc0\xb0\x29\x35\x35\x10\x4c\x69\xeb\x3f\x5f\xe0\x66\x79\xb7\xd9\xc1\x51\x67\xd6\x69\x5f\x0e\x3b\xe7\xf6\xee\x7d\xe8\x8f\x1d\x7b\x72\x5c\xea\xb4\x78\x7a\x67\x90\x71\x2d\xd4\xd4\x83\x14\x47\xa7\x5d\x35\xc0\xd0\x63\x65\x8d\xb7\x62\xcb\x73\x60\x44\x5b\x10\x5b\xa2\x26\xc9\x50\x49\xfc\x88\x38\xba\x84\x35\x92\x30\x62\xe2\x20\x9a\xa4\x70\x78\x13\x5e\x01\x8b\xcf\xbe\xda\xf0\x7a\xeb\xae\xf3\xa6\xbc\xb9\x52\x6d\x96\x7d\xe3\xa1\x51\xfb\x4b\x8e\xa8\xd5\x79\xe9\xc2\x5f\xb7\x3e\x5c\xf8\x51\x7a\x2d\xcd\xb8\x91\xcc\xe9\xb1\x29\xc5\x82\x69\xd1\x2c\x11\x58\xcf\xc2\x2e\xa7\x68\x40\x0a\x59\x5f\xc3\x91\xa4\xb1\x1c\x60\x69\x9f\x63\x40\x62\x10\x97\x00\xfc\xe4\x7d\xfe\xe3\xf2\xbc\xc6\xab\xaa\xbc\x98\x6f\xec\xea\xd5\xd5\x5a\x5c\x6e\x51\xb6\xde\xda\xf5\x8f\x2e\xac\xcd\xfe\x55\xad\x7c\xf3\x4b\x75\x7a\x6d\x4d\x9a\x89\x52\x63\xc9\x66\xa1\xcd\x05\xc0\xc5\xa6\xac\x9a\x54\x64\x23\x4d\x35\x8c\x08\x47\xb1\xc1\x6b\x9a\x6c\x39\x96\x40\x00\x17\x90\x90\xb3\x5c\x4d\x13\x6d\x68\x3f\x05\x46\x7a\x96\x7e\xb0\xb7\xe9\x4b\x0f\x1e\xee\xc9\xf4\xf1\xc2\x16\xab\x9a\xe5\xfe\xe1\xcd\x57\xbf\xd8\x3a\x9d\xc9\xf7\xce\xfc\x3e\x27\x0b\xad\x4f\xef\xa6\x02\x0c\x62\x2e\x70\x43\x8a\x91\x58\x3b\x50\x63\x9b\x52\x59\x4d\x92\xcc\xc4\x27\xc0\x4f\xa0\x1e\xaa\x36\xcf\x8b\x16\xf3\xaf\x8a\x9b\xb1\x80\x69\x25\x0a\x10\x9e\xbc\x1c\x6b\xb6\x92\x29\xc5\xba\x36\x5a\xd7\xe0\xd9\x9c\x97\x0a\x2d\x7c\x61\x65\x54\x6b\xee\x94\x79\xa7\x7e\xd8\x39\xeb\xe5\x3d\x73\xb9\x42\x45\x8b\xa4\xd7\xd2\x66\xe4\x91\xd0\x02\xa1\xe5\xf1\x44\x01\x71\xec\x48\x91\x96\x18\x7a\xc0\x33\x91\x1a\x33\xb4\x17\xb3\x7e\x88\x54\x89\x68\x0c\xa6\x11\xaf\x06\x1c\xc1\xa9\x4b\xb9\xe0\xc2\xfd\x51\x9b\x6b\x8e\x6b\x9d\xb3\x36\xfa\x61\xfc\xb5\xa9\xba\x33\x61\xfd\x77\x8b\x1a\xdd\x7b\xfd\xd4\x45\x3c\xb9\x57\x9e\x5c\x69\xe6\x7b\x30\x21\x0c\x20\x06\xa1\xa6\x84\x14\x11\x1c\x87\x20\x59\x4e\x5c\x0a\x46\x8c\xaf\xca\xa1\xce\x42\x59\x86\x96\x04\x62\xd6\xe7\x9c\x90\xa6\x2d\x2a\xf1\x9f\x02\x04\xdb\x58\xbd\xcb\xa0\x63\x3b\x2f\xe0\xed\xb7\xeb\x8c\xcd\xd5\xb9\x50\xeb\xfc\x9f\x74\x9e\xf1\xe0\xde\xcf\x6f\x5e\xa8\xd1\xea\xf3\x45\x47\x0b\xbf\xfe\x98\xaf\x29\xf6\x8b\x53\xab\x43\xe5\x2a\x13\xd4\x17\xef\x1f\x99\xb2\x67\x7d\xfc\xc3\xba\x8d\xf6\xd4\x0b\xdb\x93\x5a\xfd\xcf\x5d\xec\xe0\x57\xfb\x29\xbd\x7f\x92\xa6\x69\x8d\xe6\x28\x4a\x75\x91\x89\x8c\xc0\xd4\x42\xac\xc7\x61\xa0\xc4\x0e\x6d\x31\x74\xe2\xea\x96\xe1\x7a\x06\x94\x15\x83\x0e\x39\xc7\xa6\x74\x9e\x7f\xf2\xe1\xb6\xc9\xdd\xbf\xd9\x73\x5b\x3a\x2d\xf2\xcc\x5c\x07\x9a\x6e\xc9\xf3\xe8\xe5\x77\x0f\xde\x5d\xfb\x6c\xa7\x9f\x2e\x55\x58\xf4\xc5\x99\x8d\x4e\xcf\xf4\x5e\x27\x47\xd2\x19\x2e\xa4\x39\xe0\x25\x92\x6d\x23\xd9\xf0\x19\x97\x70\xa1\xab\x73\x3c\x1d\x78\x2a\x90\xdd\x88\xe8\x0e\x8d\x4c\x99\xc1\x0c\xa3\x18\x11\x80\x4f\x1e\xd9\xb9\x79\xb3\xe4\x97\x63\x77\xfa\xf5\xbb\x5e\xa9\x5d\x6c\x4e\x83\x3d\xb9\x9c\x62\xcc\x6d\xa9\x49\xcf\x11\x8b\x7a\xd6\x67\x06\x3f\x4a\x33\x65\xa0\x4a\x30\x17\x11\xdb\xf7\x5c\x1c\xf3\xd8\x75\xa0\x83\x89\xa1\xf9\x04\x28\xaa\xa7\x29\x18\xf1\x00\x09\xb4\xea\x98\x10\x03\xc9\x54\x02\x25\x74\xac\xd4\x6d\xbd\x7d\x4d\xc6\x9f\x2e\xb3\x77\xc1\x33\xfb\xab\x55\x28\xb4\xa1\x57\xd7\x05\x65\xdc\xd1\xcf\x4d\x19\x5f\xbf\xce\xb4\x19\x39\xd6\x2d\x6d\xb8\x29\xe3\xc5\x42\x6a\xaf\x1e\x24\x11\xa5\xbb\xa6\xce\x38\x31\x4b\x10\xc7\x90\x50\xd6\x04\x1a\x2a\x81\x08\x79\xd7\xb3\x3c\x0c\x74\x24\xd2\x36\xcb\x7b\x0c\x25\xa1\x24\x70\x48\xea\xf8\x59\xbe\x73\xc7\x9c\xef\x34\x9a\xfb\x70\xc4\xf5\x92\x3f\xec\x9b\x34\x72\xe6\x85\xcd\x39\xcc\x0e\x6f\xdf\xa8\xb6\x34\x5b\xd9\xaa\x3d\x0f\x8a\x19\xd7\xc8\x48\x2d\x7f\xee\x38\x80\x0f\x89\xe8\xf8\xac\x66\x30\x58\x57\x6d\x4d\x4c\x42\x0b\x72\x8c\x4c\x7c\x1f\x03\x91\x00\x04\x18\xe2\xa8\x94\x80\xcd\x08\x52\x06\x49\x91\xa9\xbc\xad\xb4\xfe\x6a\xcd\xa7\x0f\x7b\x65\x5d\x74\x72\xe4\xd9\x52\xd4\xc3\x3b\xf3\xf6\x8c\x6c\x70\xfb\x78\xcd\x5b\x0f\x97\xd5\xab\xb3\x59\xce\x78\xbb\x3a\x35\xee\x0f\xf8\xb6\xa7\x1a\xc4\xf4\x0d\x9c\xf0\x2a\xcd\x2a\xc0\xf4\x58\xd7\x8e\xc2\x58\xe4\xc5\x18\x89\xb1\x48\xd3\x89\xc8\x05\x04\x00\xa4\x09\x20\x11\x52\xe4\x83\x6d\x7b\x2e\xfc\xbc\xda\xd0\xdc\x1d\x6e\xdf\x79\xae\xe1\x41\xbb\xd3\x33\x3f\x66\x91\x8f\x0f\x5e\x9a\xb9\x54\x8d\xf0\xe8\xcf\xb8\x47\xa3\x8c\x6f\x44\xa5\xbc\xd3\x86\xcc\xf8\xa6\x20\x27\xe8\x5f\x57\x97\x88\x2a\x0d\x4d\xca\x36\x12\xd6\x88\xec\x98\xe3\x04\x18\xc2\xc0\x4b\x3c\xcc\x18\x4a\xec\xc8\x50\x60\x31\x24\xa9\xe9\x82\x4b\xff\x38\xb7\xf9\xcb\x45\x87\xaf\xb8\x49\x88\xd8\x7b\x73\x97\x9a\xc2\x85\xe6\xcd\xef\xbf\xbd\xef\xed\xc1\xb3\x5e\x5e\xd4\xa4\x3f\x18\x90\x5e\x4b\xc7\x02\x47\x23\x3d\xb0\xa0\xe2\xb2\x1e\xed\xd8\xc4\x13\x79\x5d\x87\x32\xcd\xf3\x4e\xc4\x4a\x0c\x15\x78\x01\x05\x0c\xdd\xb6\x40\x64\x33\xbe\xae\xeb\x29\x80\xd4\x75\x98\x95\x97\xeb\x34\x7a\x36\x4f\xd1\xf3\xeb\xaf\xdc\x38\xf6\xd5\xb9\xb1\xfb\x46\x64\xda\x30\xfa\xc1\xf7\x03\xbe\x7d\xf8\xfb\x95\x0b\xa3\x1f\xa6\x9b\x4f\xd2\x01\x8a\x6f\x47\x94\xc3\x11\x99\x62\x18\xc3\x64\xb5\xd0\x63\x43\xd3\x8b\x45\x13\x91\x48\x52\x89\x2b\x42\x4b\x04\xae\xe2\x58\x11\x2b\x10\x87\x7f\x32\xe4\x93\x1e\x7d\xef\x14\xd8\x5c\xb6\x47\xe7\x92\xdb\x8b\x57\xd9\xf2\x65\xef\x16\x5f\xf5\x9e\x9a\x69\xcc\xde\x5a\x51\x8b\xd3\x79\x3f\xa7\x92\x34\xab\x48\xdb\x44\xd5\x1c\x02\x55\x57\xa7\x3d\xac\xc5\x8a\xef\x99\x22\x8f\x69\x8b\x12\x18\x43\x0d\x74\xa4\x79\xa1\x0c\x03\x08\x63\x5a\x71\x92\xc0\x52\x94\xff\x68\x33\x3c\x1e\x3b\xc1\x27\x9b\x32\x4f\x5d\x90\xf3\xa4\x36\xed\xba\xd7\xf2\xc2\x82\x37\xb7\x55\x62\x0a\x75\x8f\x46\x6d\x9b\x53\xfa\xc1\x07\x7b\x16\xfb\x65\x1f\x4b\xc5\xd8\x63\xc3\xaf\x0c\x9d\x59\x31\x27\xac\xd8\xf7\x32\x47\x5d\xe8\xda\x9c\xba\xb7\xa9\x52\xa1\x4a\xcf\x65\x65\xac\x9b\xe6\x77\x8d\x1a\xa4\xf7\x2a\x79\x82\x6a\x85\x32\xc6\x80\xa6\x12\xd6\x16\x0c\xc3\x42\x4a\x9c\x68\xb4\xc9\xea\x41\x2c\x07\x28\x0c\x54\x2a\xe0\x03\x95\x41\x31\xd1\x90\xe0\x86\x5a\x8a\x85\x0d\x4e\xeb\x57\xeb\x39\x41\x2f\x78\x3b\x47\xd1\x79\x85\xb6\x6f\xd8\xb2\xfa\x75\xe9\x85\xfb\x65\xf2\xfe\xda\xca\x0a\xfb\xc3\x09\xe7\xcb\xa7\xb7\xb4\x08\x6c\xe4\x22\x1e\x11\x0d\x45\xa6\xeb\x29\x02\x23\xc7\x8e\x44\x44\x04\x64\x1c\x05\x9c\x63\x47\x2e\xa6\xe4\x28\x81\xa1\x42\x45\xae\x14\x2a\x3e\x25\xa7\x2e\x97\x5f\x58\x7a\x52\x59\x3c\xce\x38\xd4\xb8\x50\xf5\x33\x1f\xf4\xdb\x5b\xbf\x75\x87\x26\x73\xf6\xbb\xcf\x57\xfb\x74\xc0\xd9\xf9\x3b\xd5\xa1\x19\x5f\x3b\x4f\x2d\x29\xec\xeb\x1e\x1d\x19\xbc\xe2\x42\x20\x44\x71\x4c\x23\x89\x11\x58\x59\x8d\x03\x10\x3b\x82\x64\x90\xd0\xd1\x59\x93\x87\xac\xab\x3a\xb6\x17\x2b\x31\x4a\xa1\x18\xf8\x2e\xdc\x55\xf7\xdd\x21\x7f\x9c\x5e\x9b\x65\xc7\x87\xd4\xa2\x1b\xc5\x46\x9f\x2c\x69\x14\xca\xf6\xf3\x81\x6f\xaa\xf7\xeb\x5f\xf9\x88\xdf\x2e\xbd\x96\x4e\x02\x8e\x4d\x50\x24\x99\x96\x22\x48\xc0\xe6\x7d\x59\xd4\x02\x95\x57\x91\x63\x05\xa6\x4b\x2b\x91\x10\xf9\xaa\x23\x31\x22\xc2\x0e\x97\x18\x11\xe4\xf5\x27\x1f\xed\xfa\x37\xf7\xd9\x5b\xec\xbd\x03\x27\x2a\xfb\x3f\x9d\x19\x8d\x13\xfe\x9c\xfd\xfa\xc1\x7c\x99\xe6\x8d\xec\x1f\x27\x67\xbe\xdc\xf1\x6d\xc6\xa9\xf6\x53\x57\xf8\xbe\xa7\x0a\xb4\xe3\x72\x44\xa6\x35\xc3\x40\x26\xcd\x86\xa2\x19\x25\x0e\x30\xb5\x40\xd1\x5c\x8d\x45\xd8\xf7\x45\x39\x22\x8c\x29\xb2\x0e\x1d\xfd\x87\x24\xff\xe3\x62\xe4\x77\x97\xb7\xbe\xf3\xe6\xf7\x2d\xdb\x8d\xda\x92\xb7\xad\xfb\xeb\xbe\x36\x97\x1a\x65\x3d\x5e\xaa\x79\xbe\x9d\xd5\x3e\x1b\x3a\x7d\xcf\xe1\x8c\xab\x91\xa4\x86\x0f\xa8\x30\x71\x08\x71\x35\xe0\x53\x14\x94\x15\xd9\x02\x9a\x60\xe0\xc0\x4e\x62\x8a\xb6\x65\x9f\x07\x7e\x00\x01\xa3\x72\x5e\xe8\xfa\x08\x9b\x80\xa4\x48\x61\xa7\x26\x57\xc4\x5f\x3f\x7d\xe3\xfd\x8d\xd5\xb3\xf4\x9a\xf2\xd7\x33\xe3\x0b\x5e\xbb\x74\xa7\xda\x82\x46\x6d\xb7\x17\x8a\x8e\xb7\x3b\xb5\xb9\x65\x9a\x1b\x13\x3c\xad\xf0\x94\x89\x68\x10\x24\x84\xb2\x29\x16\x20\x6c\x8a\x26\xe4\x05\x46\xf3\x08\xaf\x9b\xac\xa6\x1a\xb1\x14\x46\xb6\x41\x38\x2b\x52\x05\x1e\xa5\xae\x88\xf2\x9c\xef\xd8\xe3\xf4\xdd\x5f\x7e\xef\x54\x7e\xe8\xf7\x57\x77\x8f\x7e\xab\xca\x07\x73\x7e\x2c\xf8\x71\xeb\x22\x57\xb0\x3c\xac\x44\xdf\x1e\x6e\x7a\x03\x91\x2b\xdb\x58\x40\x0a\xcd\x5b\x82\x21\xcb\x0e\x94\x62\x8c\x6d\x0b\x43\xcb\xd6\x02\x48\x24\xda\xb0\x12\x43\x0c\x14\x4a\xa3\x31\xaf\x4a\x41\x10\xf0\x76\x6a\xc4\x70\xbd\x83\xed\xb9\xef\x2a\x97\x6e\x76\xef\xe7\x82\x9f\x6f\xb9\xfd\x65\xb1\x8f\x27\x3d\x58\x5e\x00\x4d\xcf\xdd\xea\xdd\xed\x37\xdb\x96\x1a\xd8\x26\xcd\x05\x83\x69\x59\x76\xe2\x3b\x9e\xc0\x02\x8d\x4e\xbc\xc4\xc5\x9e\x67\x24\x91\xc1\x8a\x8a\xc8\xbb\x4a\x20\xb8\xb4\x40\x59\xa2\x88\xa1\x98\xa8\x0c\x93\xd2\x4f\xb7\xec\xb3\xa6\xdb\x4c\xf2\xc6\x81\x76\x77\x1b\x7c\xd4\xe7\xe7\x61\xc7\x7b\xe6\x2a\xf4\xda\x89\x6b\x1f\x6f\xff\x76\xc8\x7b\x5b\xbf\x3e\x5b\x35\xbd\x3a\xb0\x90\x78\x9a\x83\x10\x65\x46\x11\x81\x92\xaa\x89\x74\xa8\x01\x6c\xca\x06\x0a\xa5\x58\x17\x74\x8a\x16\x78\x03\x51\xc8\x75\x29\x2f\xb2\x51\x12\xd3\x40\x78\xca\x7c\xed\x7e\xcb\x9f\xd8\x1b\xfc\x84\x6c\x2d\x1a\x5e\xcf\xff\xac\xfc\x65\x87\x3e\x73\x8f\x4d\xaa\x54\x68\x78\xef\xb5\x9b\xae\x5d\x78\xc7\x3b\xfb\xf2\x63\xdf\x65\xc4\x47\x73\x86\x55\x63\x7f\xdc\xfb\x5e\x5c\x60\x0f\xb7\x37\x28\xfc\xbd\xb7\x6b\x9f\xb0\x71\x57\x97\x86\x3f\xf5\xff\x66\x1e\x77\x3b\xe3\xf4\x95\x29\x5d\xa4\xeb\xd8\x09\x94\x3d\x46\x0a\x90\x60\x01\xca\x4a\x98\xc8\xb6\x13\x97\x88\xc0\x44\xc8\xc6\x92\x9d\x44\x18\x53\x8c\x22\x4a\x4e\xa4\x38\x9c\x49\x69\xdc\x93\x2e\xf2\xd8\x8f\x53\x43\x69\xe5\xf4\x93\x60\xd9\xd6\x03\x5f\x67\xbd\xd6\xf6\xb5\x46\xfb\xb2\xf4\xcc\x1b\xca\x73\x07\x3f\xac\x14\x5f\xed\x33\x2e\xbd\x2e\xd2\x33\x10\x70\x2d\xcb\xe7\x3d\xa2\xa9\x2a\xd1\x6c\x91\x45\x09\x82\x9a\x05\x05\x56\xf0\xb1\x2d\x3a\x44\x88\x24\x60\xd2\x06\xb0\x75\x8a\xa3\xf1\xdf\x6b\x45\x29\xf2\x9a\xc9\x33\xe7\xe7\x5a\xd7\x6a\xc8\x5b\x25\x56\xe6\x35\x1f\x34\xf2\x4a\x54\xea\xb9\x21\xd8\xbe\xfa\x13\xeb\xec\xfa\x5b\xeb\x70\xc5\x4b\xc5\x1f\x8b\xb6\xb9\xcd\x0d\x65\xba\x75\x3c\xf2\xcc\x6f\xa3\xe7\x8d\x7c\xbd\xd0\xf0\xd2\x37\xdf\xae\x75\x1c\x55\xfa\xa6\x6a\x23\xbb\x4a\xa5\xaf\x0f\x75\xd8\x92\xde\x68\xeb\x29\x98\x31\x5c\xc1\xd5\x19\x93\x4f\x12\x45\x27\x16\xa0\xa0\x63\xb9\x9e\x69\x19\x3e\x2f\x13\xdd\x92\x54\x9c\x50\xb4\x6e\x46\x4a\xc2\x9a\x30\x80\x29\xb4\x4b\xca\x56\xc9\x9c\xed\xcf\xbd\xbb\xef\x1d\x5e\x39\xec\xeb\xde\x03\x70\x87\xce\xb3\xbf\xbc\x57\xe3\x8b\x73\x59\x3b\x65\x3b\x56\xff\xd8\xad\x42\x49\x9a\xc7\xee\x76\x60\xb8\x36\x4d\x64\x3e\x90\x1d\x59\x11\x7d\x24\x06\x74\xec\x05\x80\x49\x1c\x3d\xf4\xfd\x48\xd5\x6c\x1b\x71\x86\x25\x72\x21\xef\x38\x7a\xa2\xf3\x4f\x1e\xb9\xd5\x57\xa7\x26\x9e\x5d\xd4\x3b\x47\xe6\x4e\x43\x0a\x3c\xda\x31\x0d\x35\xef\x7f\xb0\xc0\x8b\x5f\xf5\x19\x61\x6e\xed\xd6\x3f\xf8\xee\xc5\xb2\xe9\xcd\x1e\x35\x96\xf7\x5d\x89\x56\x71\xec\xf3\x02\x13\x2a\x1a\x01\x32\x6d\xb3\xb6\x12\xea\x48\x44\x34\x8e\x0c\xcd\xe6\x5c\xda\x8b\x85\xc0\x0e\x59\x8f\x41\xba\x99\xba\xb8\xfe\x7e\xc4\xf8\xf6\xbb\x77\x2e\xed\xd9\xba\xda\xb4\xdc\x5f\x94\xf8\x31\xc7\xd8\x72\x93\x77\x7c\xf6\xc5\xcc\x73\xb7\x26\x2e\x09\x2a\x7d\xd1\xfd\x72\x7a\x2d\x6d\x69\x46\xc8\x10\x97\x8a\x59\x1c\x1b\x4c\x4c\x5b\x3e\x8d\x2c\x9c\xc8\x3e\x1b\x23\xcc\x70\x10\xd2\x5c\x62\xe9\xb1\xae\xeb\x94\x1e\x06\x52\x68\xb8\xe1\x93\x96\xfe\x69\x72\xf9\x36\xe6\x96\x96\x2d\x3f\xfc\x31\x29\xcd\x8e\xcc\x3c\x77\x54\xee\x52\xb5\x26\x95\x28\x75\x74\x65\xc3\x5b\x5d\xbf\xf8\x35\xdf\x9a\xf4\x5a\xda\xa5\x64\xc0\x1b\x26\x6b\xc8\x2a\x65\x44\xba\x29\xa1\x84\x85\x8a\xc6\xa9\x89\x11\xe8\x9a\x05\x79\x16\x89\x04\x23\x8e\x77\x5d\x28\xc5\xbc\x19\xf9\x7a\x8a\xdd\x59\xfb\xc7\x01\xf9\xa7\xbd\x7c\xff\x64\x95\x2e\x65\xfb\xed\x9f\x50\x4c\xee\xd4\x2a\xaa\xf5\x5b\x87\xc3\x4b\xb3\x9f\xee\xbc\xa0\xfd\xd8\xf4\x56\xa9\x3c\xc0\xac\xea\x51\x31\x25\x32\x06\x0a\xe8\xd8\xd0\x03\x2d\xe1\x1d\x39\x70\x68\x9f\x8f\x10\x25\xe9\x8c\x44\x89\xbc\xa1\xe9\x8a\xec\x9a\xb2\x17\xd8\x58\x4c\x9d\x20\x14\xbd\xd0\xf5\x50\xe9\xd7\xbe\xda\xfc\xf2\x1f\xcd\x17\xb7\x7c\xff\xb7\x6f\xc7\x7c\x39\x29\xcf\x9a\x4f\x66\x37\x3d\x7e\xbf\x71\x54\x72\xee\xc9\x8c\x83\x76\x52\x5e\x0e\xde\x67\x15\xca\x90\x94\x88\x62\x00\xcf\xd9\x04\xb8\x52\x48\x5c\x1d\x62\xdd\xf2\x81\x2e\x58\x0e\x8e\x51\x20\x86\x9c\x63\xf1\x86\x67\x32\x00\x3a\x61\xea\x9e\xc0\x5b\x7f\x1c\x7a\x71\xd4\xba\xda\x7b\xee\x15\x9a\x28\x26\x5b\x17\x9f\xda\xff\x5d\xbf\x8b\x03\x97\x8c\xfb\x66\x57\x87\x42\x6d\xac\xef\xce\xb6\x4d\xaf\xc3\xf3\x31\x6b\x71\x22\xd0\x21\x50\x0d\x20\x47\xc8\x61\xcc\x7f\x15\xad\xb2\x16\xf1\xac\x29\xd0\x86\x4f\x28\xce\x15\x2c\x1d\xdb\x06\x06\x3e\x25\xd1\x62\x0a\x6d\x7b\x3c\x61\x44\xde\xaf\x7e\x2d\xf9\xd9\xbc\x03\x2b\xa7\xb6\x85\xef\xae\xda\xf2\xff\x63\xed\x2d\xc3\xb5\xa8\xda\x36\x60\xba\x94\x50\x69\xa5\x94\x06\x89\x99\x35\x6b\xe8\x46\x41\x52\xba\x14\xa6\x3b\xd6\xcc\xac\x89\x25\x08\x6c\x51\x09\x29\x01\x09\x51\xba\x51\xba\x04\x09\x11\x03\x29\x91\x16\x61\x4b\xa3\xa8\x94\x08\x48\x7c\xc7\xf3\x3d\xdf\xfb\x3d\x0f\x2f\xf7\x3e\x7c\x8f\x7d\xdc\x3f\xf6\xbf\xfd\xe3\xba\x67\xad\x2b\xd6\x75\x9d\xe7\x79\x0d\x3b\xbd\x68\xfc\xda\x8f\x9f\x9c\x7a\x97\x7b\x35\x57\xe1\x5d\x2b\xd3\x5c\x20\x18\x12\x82\xae\xe3\xdb\x82\xed\x27\x8c\x1d\x29\x86\xed\x8a\x8c\x49\x44\x41\x13\x83\x88\x07\xb6\x6e\x53\x32\x60\xc4\x50\xe4\x01\x16\x29\x5f\xe5\xc5\xc7\x73\xe7\xea\x76\x87\x27\xef\x58\xb6\xbb\x7c\xed\x93\x8d\x76\xb4\x13\x3f\x68\x3c\x73\x6c\xe3\x9c\xc7\xf2\x2d\x6f\x34\xe8\x8d\x64\x67\xc1\x5c\x43\xce\xa7\x79\x72\x11\xb2\xb4\x46\x27\x48\x76\x31\x4f\x34\xde\x89\x62\x64\x68\x6a\x08\x65\x87\xb6\x04\xe2\x07\x8c\xc9\xcb\x31\xd2\x54\xc6\x13\x42\x53\x82\x00\x27\x42\xea\xea\xb1\xd2\x6f\x37\x47\x7f\xbe\x75\xff\x82\x91\xcf\xb4\x1e\xb2\x2f\x9e\x79\xe5\x8b\xb6\x74\xb0\x79\xc0\x92\x8f\xdb\xbe\x7f\xb8\xdf\xcb\xf1\xf1\x82\xe9\x46\x27\x43\x93\xe2\xc2\x38\x46\x94\x02\x58\x35\x60\x74\xc6\xe3\x7d\xe8\x30\x9e\xe1\x4b\x8a\x63\x32\x0a\x14\x90\x6f\x24\xaa\xed\x25\x92\x25\x72\x3a\x4a\xf1\xbc\x58\xb9\x64\xdc\x9e\x6f\xbe\x1b\x37\x68\xcd\x47\xbb\x66\x95\x6f\x56\xe4\xf4\xd0\xa7\x2e\xb6\x39\x50\x78\x19\xf5\xdb\x84\x2b\x5b\xb7\x5e\xff\x69\x64\x9a\xbb\x2f\xac\x4f\x01\x41\xe3\xa8\xc8\x8a\x42\x42\x09\xa1\x18\x53\x66\x8c\xc4\x98\x13\x64\xc4\xf3\x01\x42\x0a\x12\x89\x64\xfb\x8e\xac\x09\x1a\x14\x14\x1d\xa5\x6e\x37\x1f\xbe\x32\xb3\xe6\xb4\x4e\x55\x26\xec\x79\xb6\xf0\xee\x26\x75\xbb\x8f\xf8\x2d\xb3\x4b\xe9\x67\xa8\xb1\xbd\x9f\x78\xb5\xc4\xd3\x5b\xe4\xee\xfb\xd3\x9c\x5a\x88\x6c\x01\x94\x84\x82\xc9\x09\xff\x4a\x2e\x8e\x27\x43\x3e\x22\x01\xa0\xf5\xc0\x11\x64\xd5\xb6\x13\x2c\x31\x81\x15\x24\x71\xe2\x70\x58\xf7\x4c\x3f\xf5\xfb\x33\x88\x0e\xf6\x7f\xaf\xef\xc1\xe5\xd6\x88\x7a\xd6\xf2\x0d\x57\x47\xb7\xcb\xf7\xc5\x96\xf7\x1a\x26\x99\x63\x56\x3e\xfc\xfc\x83\xc5\x7f\x67\x5f\x0c\x39\x75\x19\x1b\x2a\xa6\x05\x1d\xca\xd0\x15\xc4\x44\x0c\xaf\x19\x2c\xe6\x10\xa6\xed\x08\xab\x92\x87\x08\x0a\x91\xe0\xb2\x8c\xac\x30\x49\xac\x71\xa1\xae\x0b\xda\xe3\xae\x38\xf2\xce\x8c\xae\xfa\xda\x8a\xbb\xc5\xe6\xc9\x90\x70\xd4\xea\x79\x5d\x83\x3e\xf5\x2e\xaf\xca\x68\x20\x1f\xfc\x4b\x2c\xe7\xf5\xcd\xfe\xb8\x36\xb5\x2b\x52\xba\x91\xc4\x08\x7b\x76\xe4\x61\xca\xf2\x39\xda\x77\x00\x4d\x68\xd9\xe3\x29\x4f\x65\x42\x5a\x88\x54\x1c\xe9\x12\x1b\xea\xa1\xa0\x40\x1b\xfd\xd7\xa2\xe0\x11\xf9\xfe\x6f\xc0\xbd\x8c\xd6\x79\x0a\x54\x7c\xeb\x51\xb5\xe7\x13\x54\xe5\x41\xcd\x3f\xc7\x95\x9f\x72\x06\xdc\x9a\x83\xaa\xe4\xbb\xf4\xf1\xbd\x1f\x3e\xcd\x77\xf3\xa4\xbf\xfc\xfc\xa2\xd2\xed\xb3\xcf\x47\x4c\xad\xa7\x82\x4c\x93\xd3\x58\x3e\x92\x20\x89\x80\x15\xb3\xaa\xec\xbb\x02\xed\x40\x8b\x63\xfc\x20\x40\x7a\x2c\xe8\x3e\x95\x48\xa1\x8d\x05\x9a\xb3\x18\xde\x10\x52\xe7\xd0\xe5\x53\x0e\x16\xa8\xfb\xde\x83\x27\x17\xd7\x5d\xb1\xfc\xbe\xbc\x15\x4e\xef\x70\xef\x95\x1d\x87\xcb\x64\x9e\xdb\x9f\x87\xbd\x71\xc0\xce\xbe\xe8\x4e\xea\x59\x91\xac\x69\x3e\x2b\x71\x3c\x8c\x59\x46\x8c\x43\x89\x0b\x7d\xc9\x34\x7c\xdb\x88\x1c\xa4\x98\x01\x8d\x2c\x93\x25\x20\x91\x45\x15\x3a\x80\x88\xc1\xa3\x8b\x22\xfe\xe3\x05\x3d\x4b\xad\x63\x72\x76\xfa\xb0\x58\xbb\x9f\x97\x89\x97\xde\xef\x77\xf2\xe2\xd3\x0f\xdf\xdd\xfb\xf3\x77\x95\xfb\x7e\xd7\x62\xe8\x0c\xbf\x60\xf6\x17\xeb\xa4\xcc\xa1\x30\x8e\xf8\x04\x7b\x8a\xe4\x30\x92\x16\xc6\x1e\x27\x29\x92\x10\x24\x88\xa8\x9a\x1f\x86\x2a\x12\xc5\x08\xc3\x38\x56\x54\xc2\x31\x94\x6b\x68\xb1\x1f\x3d\x9e\x43\xf1\xd9\x01\xf4\x2c\x52\xed\x4a\xad\x0b\xf3\x6b\xaf\x39\xfd\xc4\xd2\x42\x5f\x19\x85\xcf\x5d\xaa\x3b\xe0\xad\xb1\xc7\x8b\xe5\xea\x50\x35\xfb\x2c\xbd\xd4\xbb\x80\x02\x86\xb2\xdd\xc4\x8b\x45\x1d\x98\x8a\x22\x0a\x16\x15\xaa\x81\x22\xc6\xb1\x6f\xeb\x88\xb7\x14\x3f\x26\x1e\x88\xf9\xd8\xc1\x30\x90\x6d\x80\xb9\xff\xbc\x3f\xff\x87\x8b\xf8\x4f\xa3\xdd\x8c\x36\x15\x73\x14\x1b\xf4\x28\x6c\xfd\xc6\x9a\x27\x7b\x97\x9d\xbc\xeb\xc9\xcb\xbd\xcc\x77\x97\x0c\xfb\xa2\x53\xe9\x66\x7b\x9e\xb9\xf7\xdd\xc5\xe1\x06\xfc\xab\x7e\x37\x90\x91\xe6\xd1\x92\x40\x27\xa6\x1a\x18\x8a\x6a\x90\x24\x91\x08\x81\x88\x73\x1d\x5a\x65\x05\x49\x09\xd4\x28\x60\xa2\x98\x31\x64\x19\x3a\xb2\x64\xf9\x12\x0e\xa1\x48\xb2\x58\x1d\x44\xb7\x7a\xa6\x26\xdb\x24\xb8\x5d\xf8\x25\xed\x83\x27\x66\x8e\x1d\xf7\xd2\xa7\xbf\xe8\x2d\xbf\xce\x55\xff\x95\xcb\xfd\x95\xdf\x9a\x6c\xcc\x3e\xbe\x32\xe5\x7d\x02\x1a\x66\x1c\x53\xf1\x30\xd2\x43\x8f\x0e\x5c\x9d\x26\x20\x22\x86\xce\xba\x9c\x62\xf8\x82\xc6\x84\x8c\xe0\x8a\x9e\xcf\x4a\x8a\xc3\x05\x09\x4f\x28\x2a\x75\x0e\xeb\x5a\xac\x20\x7b\xbb\x72\x27\x40\xff\xd4\x9c\x2c\xad\xd8\x43\xf9\xbb\xe5\x95\x73\xf3\x76\x2c\xfb\x75\x4b\xdd\x7a\x97\xd7\x3e\x77\x76\x5c\x9a\xbd\x57\x54\x80\x67\x12\x3f\x10\x22\x53\x62\x78\x9d\xb3\xb0\x25\x24\x9a\xc2\xd8\x82\x0f\x04\x3e\xa0\x59\x1a\x32\x71\x18\xd3\x96\x47\x41\x99\x11\x03\xdd\x4a\x6d\x76\x85\x01\xcb\x33\x61\xab\x6a\x73\xc6\x2f\x13\x66\x76\xb8\x94\x3b\xf7\x1b\xef\x7e\x74\x7a\xcb\x94\x3d\xdb\xde\xdc\x76\x66\xd6\x57\xf7\xa6\x65\x5f\x0d\x23\xb5\xf7\x86\x7e\xe8\x20\x93\x04\xaa\x22\x09\x94\x1d\x8a\xb2\x87\x10\x25\xb9\x98\xa1\x29\x49\x75\x58\x26\x64\x59\x3e\xf1\x88\x96\x68\xb4\x15\x78\x42\x42\xd0\x63\xb4\xdc\x7f\x9a\xd4\x64\xb4\xc9\x95\x63\x4e\x8e\x47\x5d\x61\xd6\xca\xbb\x37\x7b\xd4\xdc\x97\x4b\x9b\x08\x0f\x7c\x74\xf8\xf5\x15\x97\xc2\x2a\xbf\x37\x12\x2b\xec\x8c\xcf\x9e\xf8\xe0\x87\xcf\xe1\xac\xf4\x3a\x3c\xef\x38\xb4\x1c\xb2\x58\x55\x05\x99\x75\x30\x94\x2d\x5a\x09\x71\x98\xb0\x1c\xb6\xd5\x48\x0d\x0c\xd7\xe3\x19\x48\xbb\x5a\xac\x7a\x74\xc2\xc5\x8e\x9f\x85\xfe\xff\xdf\x9f\xef\x6d\x30\x68\xea\xc6\xf5\xcb\x3f\x79\x7d\xfe\x55\x72\xa9\xd7\x3b\x7f\xcc\xc1\x2f\x6d\x69\x69\xc3\xfd\x53\x5a\x57\x2b\x53\xd9\x4f\x33\x15\x82\x51\x78\x60\xf2\x86\x2a\x81\x84\xd7\x30\xd6\x0c\xc1\xd4\x81\x87\x09\x1d\xc9\x14\xe5\x89\x40\x94\xcd\x98\xc5\x82\x6d\x7a\xa2\xcf\x0b\x30\x31\x95\xd4\x1e\x5c\x62\xc1\xf2\xf6\x77\x06\xab\x1f\x7f\xd0\x6b\xd4\xf5\xc6\xbb\x9a\xed\x9f\x78\xa8\xf6\xf8\x5e\x7f\x7e\xc1\x3b\x6c\x9f\x1d\xed\xd1\xdd\xec\xcb\xb0\xa5\x9e\x35\x91\x88\x72\xf8\xc4\x93\x6d\x3d\x09\x8c\x24\xf1\x81\x10\x02\x19\xa8\xaa\x12\xfb\xbc\x11\xc5\x1c\xc6\x3c\x63\x10\x1a\x22\x85\x36\x4d\x57\x88\x91\x96\xfa\x6b\xbf\x31\x7c\xcf\x96\x8e\x0f\x1b\x4f\x3e\xbd\x73\xf4\xa5\x77\xcf\xf6\x2f\xdd\xb7\xe6\x8b\x5f\x7d\x7c\xcc\x6b\x59\xfc\x7d\x35\x3e\x91\x77\x5a\x95\x34\x8b\xee\x22\xd5\x44\x8e\xaa\x45\x34\xe0\x68\x40\x28\xd9\x0c\x28\xc7\x71\x21\x6f\xba\x14\x8a\xa1\x66\x52\x14\x0d\x91\xad\x27\xbc\x61\x87\x3e\x13\x06\x44\x7b\x2c\x2b\xfc\x53\xd3\x35\xa3\xcd\xd3\x39\x86\x15\x7b\xd4\x15\xba\x6c\xd3\xa8\x02\x2b\x0f\x9d\xef\x9e\xe3\xe4\x17\x97\x6f\xef\xdd\x38\xe5\xed\xbe\x87\x6b\x34\xee\x77\xb2\x3a\x9a\x7e\xb3\x01\xd5\x24\xfb\xb4\xbe\xd4\x12\xf3\x26\xc0\xc8\xd5\x0c\x9f\x51\x08\x70\x45\x28\xc7\x80\x31\x08\x50\x0c\x8b\x35\x29\x1e\x3a\x89\x07\x15\x53\x66\x03\x4f\xa2\x03\x07\xc9\x7c\x64\x64\x21\xd6\x50\x3d\xac\x35\x2d\xcf\xbd\x9f\xba\xfe\x3d\xad\xa7\x73\xae\xe8\x9c\xd5\x1b\x4f\xed\xae\x35\xf0\xc2\x0c\xe5\xe1\xb6\xd2\xcd\xea\x74\xd5\xee\xa4\xb9\x70\x35\x7d\xd6\x35\x25\x4b\xa0\x81\x69\xc3\x28\xe2\x35\x97\x85\x61\x14\xd1\x8e\xe9\xc6\x89\x66\x60\x18\x47\x5e\x68\x93\xc4\xb6\xe4\x04\x84\x42\x6c\x28\xa9\xcd\x1e\x3c\xa7\x7a\x38\xeb\x8f\x79\x87\xbb\xb5\x29\xf5\xee\xed\x5f\x86\x4f\xb8\x74\x72\xf1\xb7\xfd\xca\xf7\x7f\xee\x98\x38\x6f\xcf\xc0\x4f\xea\x66\x5f\xd3\x34\x65\x56\x50\x22\xdd\x08\xa9\x44\x77\x54\x57\x92\x88\xa0\xc4\x22\x17\x19\x8a\x82\x65\x4b\x95\x5c\x5f\xc6\x0a\xcd\x22\x9d\x67\x0d\x27\x32\x2d\x9f\xb6\x19\xc1\xcc\xe2\x41\x56\x79\x5e\xa3\x12\xef\xdc\x59\xff\xc4\xab\xb3\x8b\xd2\xd5\x72\xad\xcb\xd9\xb7\x50\xc5\xe7\x83\x36\xb9\x0b\xca\x0f\x2a\x5f\x7c\x2d\xff\x53\xd9\x57\xa3\x4a\xdd\x55\xd5\x7d\xde\x4e\x64\xc4\xf2\x91\x95\x80\x44\x60\xe9\x90\x11\x6c\x8d\x04\x2e\x01\x4e\x42\x4b\xa6\xc8\x04\x1e\xc2\x58\xc2\x82\x21\x18\x48\x93\xff\xab\x14\xdd\x9a\xff\xff\xd6\xe7\xce\x68\x55\x9c\x7f\x94\x96\x7b\xe0\xe3\x75\xcd\x2f\xad\xbb\x33\xe7\xe2\x97\x95\xf2\x85\x78\xcf\xdc\xe3\x9f\x5f\x29\x90\xb9\xfb\x29\xb6\xf4\xb1\x5b\xdd\x47\xd0\xbb\xb2\x1f\x5c\x53\xde\x28\xce\xd5\x5d\x20\x19\x8e\x1f\xd8\x42\x90\x30\xa6\x18\x30\x0a\x66\x2d\x3e\x91\x71\x1c\xbb\x09\xe4\x38\x0c\x74\xd7\x90\x51\xc2\xca\x1a\x2f\xd3\x24\x70\x53\xdf\xa8\xed\xd3\xde\x78\xb0\x61\xf4\xce\xb2\x82\xde\x70\xf3\x9c\x8b\x77\xbe\x28\xbf\xa9\xef\x84\xd1\x1d\x6b\x86\xaf\xce\xc8\x55\x74\xc9\x89\x83\x9b\xd2\x6b\xb6\x4e\x39\x72\xc2\x6a\xb4\xa8\x21\x02\x80\xef\xb9\x1c\xf1\x19\xdd\x73\x48\xa4\xda\xbc\x65\x13\x57\xe7\x75\x1f\xb2\x0e\x11\x15\x2d\x24\x82\xc5\x06\x59\xf0\x5b\xa3\xb6\xb7\x5b\x5f\xea\x7d\xf4\xd9\x72\x2a\xf3\x72\xe7\xc4\xbc\x3b\xb1\xdb\xf9\xc1\xa1\xf3\xec\xa4\x2b\x94\xbc\xbc\xf0\x1f\x17\xb3\xff\xc4\x4f\x99\xca\xbc\x10\x60\xc6\x8b\x75\x5e\x95\xa8\xd8\x09\x62\x87\x44\x02\x6d\xa8\x3c\xad\x85\x14\x0e\x58\x46\x84\x26\xe0\x54\x0e\x09\x00\xc1\xc0\x56\x85\xd0\x77\x52\xa7\xb2\x37\x9f\x29\x39\xaa\xd0\xb9\x62\x0f\x8b\x2d\xdb\x5b\xa1\xdb\xed\x3b\x60\x49\xfd\x7c\xc9\xad\x32\x5f\x1c\x9e\x76\xf3\x47\x2e\x57\x89\xa7\x5a\xa4\x39\x03\x0b\x7a\xe8\xb0\x3a\x1f\xda\x9a\x01\x42\x16\x23\x59\xe5\x54\x43\x30\x82\x44\xb1\x5c\xce\x10\x90\x6a\x68\xa6\x81\x04\xd7\x4d\x74\x80\x5c\xde\xf2\xb2\x10\x5b\x19\xff\xf4\x2a\x7d\xd7\xae\x85\x61\xeb\x46\x4f\xce\x9d\xd1\xaa\x3a\x97\x9f\xbf\xe6\xae\xdf\xdf\xf1\xe7\x77\xfe\xbc\x7c\xb0\x46\x46\xff\x6f\xd2\x5c\xfa\x5b\xbe\x88\x42\x51\x93\x1d\x60\x9b\x11\x1f\x60\x37\xb6\x35\xc9\xb0\xb9\x20\x60\x03\x5b\xb5\x20\x54\x10\xc3\x42\x5b\x31\x7d\x51\x31\x6c\x31\xe6\xff\x63\xf6\xce\x56\xff\xb6\xb8\xd3\xd9\x63\x87\xea\xf7\xb3\x86\xfd\xdc\x76\xf7\x7e\xbd\xbb\x73\xe7\xb2\x57\xbe\xef\xa2\x7d\xb7\xd5\x9f\xf2\xe5\x18\x96\x3f\x99\x7d\x39\xa3\xcd\xc3\x87\x6f\x3e\x9c\x56\xfe\x91\xa7\x67\x6e\x6a\x65\xb7\xdd\xaf\xcf\x5e\x31\x0f\xad\xaa\x30\x6c\x66\x05\x7f\xf8\x8b\x6b\x33\xbf\x3e\x34\xee\xe8\x37\xbb\xa6\xfc\xea\xb6\xb9\x7a\x32\xbd\xc5\x2b\x27\x40\x96\xe3\xa9\x48\x07\x94\x2e\x51\x26\xe3\xfb\x40\x94\x59\x8f\x77\xa5\x58\x73\x64\xca\x85\x2c\x8d\x20\x60\x74\x23\xf0\x31\xa2\x93\xc4\x31\xbc\xc7\x9f\x9e\xf9\x87\xd5\x68\x5d\xfe\xb5\xef\xee\xfe\x31\xeb\xf5\x4f\x4f\x3b\x47\x73\xbf\x39\xd2\xff\x73\xc8\xe9\xb7\xc7\x16\x13\x2a\x27\xd3\xeb\x34\xc8\x3e\xb5\x30\xf5\x85\x62\x75\x53\x0e\xd4\x50\xe4\x3d\x8d\x52\x1c\x4d\xd7\x78\xc1\xa2\x71\x94\x10\x27\xd1\x58\x4e\xc4\x81\xa7\xe8\x98\x49\x2c\x3a\x09\x29\x06\x6a\x10\x65\xa1\x82\xde\xb7\xf6\x96\xe1\xa5\xd6\x2c\x3c\x72\xb8\xfe\x9c\x23\xa3\xeb\x3d\xfb\xe9\x4e\xe1\x7c\xfd\x29\x95\x9a\x97\x3b\x94\x6f\xc8\xb8\xdb\x37\xda\x64\x7f\x8f\x42\xca\x2f\xed\x06\x9e\x12\x2b\xbe\x25\x18\x44\xa6\x75\x89\xe7\x3c\x03\xb9\xc8\x10\x1d\x28\x9b\x32\x52\x64\xd3\xc2\x8a\xcf\x2b\x40\xa1\x42\x02\x74\x0a\x80\x40\x79\xfc\x4b\x4f\xae\x5d\x3c\x17\xf3\x79\xd7\x66\xdb\xfb\xec\xf9\xbb\x65\xb7\x9c\xd7\xce\x2c\xcb\x95\xab\x45\xd5\xcb\x35\x72\x34\x3f\x3e\x69\x71\xa9\x28\xcd\x0a\x24\x08\x0a\x1e\x8f\x5c\x2d\x88\x93\x40\x66\x05\x43\x44\x1c\xf5\x2f\x07\xe6\x34\xc2\x13\x53\x0e\x80\x1f\x99\xb2\x4b\x02\x95\x8f\x21\xe0\x3c\x9e\xe2\xa2\xd4\x88\xa7\x7a\x27\x17\x77\x1f\x54\x75\xf8\x84\x57\x32\x76\x9d\xc9\x1d\x8d\xce\xdd\xed\xf2\x1b\x7b\x67\xdf\xcf\x93\x59\x6d\x56\xab\x3e\x9c\x71\x97\x4d\x73\x53\x51\x08\x43\x3d\xd1\x99\x10\x87\x06\x60\x69\x5b\x91\xf8\x98\x53\x59\x46\xc7\x4a\x40\x20\x62\x2d\x9b\x27\x86\x0c\x89\xc8\xb0\xb4\x82\xa3\x30\xf1\x53\xa8\xa0\xab\xd6\xd4\xe6\xdb\x37\xec\xd0\xe7\x96\xf4\x9f\xed\x5c\xa8\xe8\x9c\x42\x7b\x73\x7f\xe8\x15\x88\x3f\xf3\x96\x5e\x2a\xb5\xf5\x85\x9b\x0b\xd3\x4c\x34\x57\x14\xc9\x46\x09\x8b\x11\xe7\x47\x32\xaf\x5b\x82\x42\x03\x2a\xa4\x59\x03\x48\x98\x76\x3d\x3b\x34\x0d\xdd\x62\x2c\x81\x42\x0a\xcb\xc1\x58\xa2\x52\x98\x7c\x6b\xc8\x90\x36\xb9\xc6\xfe\x34\xef\xc8\xeb\x3d\xc6\xbd\x5f\xa9\xf1\xd6\xf5\x45\xae\x34\x58\x95\xbf\xf9\x86\xb9\x67\x5e\xf9\xe9\xb7\x64\x67\xf6\xf7\x7e\xa6\x2c\x70\x04\xc1\x62\xcc\x24\x34\x69\x57\x71\x24\x46\x51\x10\xa2\x03\x3d\x81\x31\xe5\x85\xb1\xe2\x8b\xb4\x20\x71\x40\x62\x05\x2e\x8a\x34\xc9\x61\x69\x10\xea\x5a\xea\x5e\x1b\xd5\xf3\x78\x89\x9c\x3f\x94\x2d\xf5\xae\xbc\x28\x3c\xdb\xb6\x7e\xae\x87\xcd\x3e\xef\xdd\xef\xc3\x53\x37\xcf\xbb\xd7\x8f\x7c\xb9\xec\xdb\x87\x69\x2e\x27\x55\x01\xd1\xbe\xe7\x1a\x58\x24\x3a\xe6\x65\x6c\x4a\x1e\xd6\x15\x07\x02\x46\x51\xe4\x84\x50\x0e\x8a\x1c\x2f\x06\x74\x42\x9b\x40\xe2\x3d\x4c\xa5\x18\xd0\xcf\xea\xb2\xa5\xc0\xdb\x5b\x3a\xfc\xd2\xa7\x01\xd5\xa4\xf3\x37\xd5\xe7\xfd\x11\xed\x99\xe7\x5d\xfd\x65\xec\x98\x9e\x75\x5a\xa2\xf7\x67\x3c\x97\x66\x6a\x61\xe4\x88\x81\x0f\x22\x83\x4d\x22\x43\x4b\x38\x3d\x74\x14\x8f\x05\xac\x1f\xca\x48\xb5\x5c\xec\x48\xb1\x8a\x31\x8d\x4c\x89\x8e\x62\x56\xd1\x34\xe2\xa5\x1e\xfe\x3c\xd9\xa5\x29\xf9\xfd\x33\xbd\x78\xcb\x33\x75\x2e\x5c\x19\xdd\x77\x84\xd9\xab\x53\xcb\x43\xf6\xef\x9b\xee\xc1\x3f\x9d\xcd\x68\x42\xf6\x67\x56\x59\x2c\xd8\x00\x96\xa2\x51\x4c\x48\x14\x27\x21\x92\x07\x79\x51\x95\xe3\x40\xb1\x04\xc4\x42\x9b\x62\xa4\x44\x8d\x1c\x48\x71\x20\x40\xa1\x16\xfb\x3e\xc3\x27\x8f\x7f\xe9\x72\x5c\xcf\xbc\x77\x0f\x76\x3a\x7d\xe0\x43\x71\xde\x5f\x75\xef\x1f\x5a\x7b\x73\x50\x46\x99\x93\xc3\x4a\xfc\x22\x94\x6a\x5f\x6d\x61\xae\xfb\xe9\x8d\xd1\x8a\xa6\x51\x61\xe8\xc7\x09\x22\x00\x61\x4a\xc4\xbc\x9b\xc8\x7c\x6c\x29\x0a\xc7\x62\x56\xd6\xe2\x08\x50\x40\xf5\x4d\x10\xc6\x90\x0b\x28\x5e\xf8\xb7\x26\x77\x0a\x88\x4a\x9d\x9d\xdb\x26\x4f\x5a\x56\xe2\xde\xe5\x3f\x37\xf6\xb8\xa2\xbe\x33\xd0\x39\xfa\x11\xb5\xea\xd3\x05\x6f\x5e\xec\x3f\xfc\xc5\x7c\x3b\xa6\xef\x7a\xf4\xbf\x3f\x9a\xd9\xe6\xe8\xe0\xa6\x2b\xd7\xec\x55\x2e\x0c\x6a\xb0\x62\xd3\x4c\x71\xf3\xf1\x4e\xd3\xbf\x3f\x53\xe2\xf9\xe9\x37\x07\x1a\x7b\x73\x17\x7c\xa4\x0e\xea\x0f\x3b\xec\x1c\x07\x5f\x2a\xf5\x66\xdb\x9b\xd3\x7f\x1f\xfa\x79\xa5\xf0\xaf\x51\xb5\x86\xac\xaf\x92\x51\x6f\xf3\xfc\x8f\xa6\xff\x71\xe2\xbb\xf4\x66\x5b\x39\x44\x7c\x14\x1a\x9c\x84\x20\xb0\xcd\x50\x51\x15\x23\x84\xc0\x36\x34\x91\x16\x45\x60\x49\x86\xa4\x81\xe0\x5f\x7f\x26\xcb\x69\x34\x6b\xc4\xba\x95\x3a\xdb\x5a\xaf\x75\xc8\x3f\xa5\xf4\xd9\x5c\xc2\x57\x7f\x3c\xbc\x50\xc5\x9a\xf3\xee\xed\x79\x23\xd7\xfc\xd8\xee\x6a\x89\x75\x45\xcc\xa9\x0f\xd6\x65\x5f\x2b\x2f\x65\x40\x85\x6c\xec\x73\x4e\x8c\x7c\x43\xd4\x64\x88\x7d\x47\x66\x93\x50\x32\x54\x31\x24\x14\x2d\x20\xda\x03\x3c\x8f\xb9\x40\x42\x1c\xab\x5b\x3e\x36\xb0\xc7\x3f\x1e\x50\x67\xdc\x6e\x3c\xe4\xa3\x72\x27\x37\x57\x59\x74\xec\xdb\xe9\xf4\xf7\xfb\x66\x8f\xaa\xa4\xbf\xd9\x38\x8f\xde\x6e\xfa\xa0\x3e\xab\x3e\x8d\xb3\xdf\x3c\x49\xbd\x9b\x01\x00\x4b\xa1\x7d\xd6\x63\x3c\x28\x33\x22\xa7\x71\xb6\xed\x58\xbe\x43\x07\x8a\x48\xd1\xae\x43\xb3\x52\xa4\x89\x82\x45\x94\xd0\x17\x68\x15\x23\x3e\x2b\xf1\xec\x33\x7b\x36\x6d\x69\x59\x72\x9b\xb9\xaa\x50\xcd\x7a\x57\xaf\xce\x18\xd2\xb3\xcb\xe0\x55\x71\xbe\xae\x4f\x95\x7e\xad\x4d\xe9\xf2\xaf\x6f\x91\x1e\xfd\xef\xa1\x87\x5e\xf8\xb0\xf2\xac\x0f\x57\xdd\x7c\xb3\xc2\x8d\x29\x5f\xfa\x3d\xda\x5d\xfe\xee\x70\x72\xf9\xda\xf2\xf5\x65\x8f\xf5\xba\x79\xfd\x99\xe8\x91\x53\xfc\x60\x4e\xd1\x77\x2b\x3d\x33\x67\x4b\x85\x45\x4b\x7a\x2f\xcd\xf1\x65\xfb\x09\x4a\xe3\x7b\x9f\xa2\xe2\xc1\x81\xe1\x27\xdf\xdc\xda\x4a\x6f\x98\x66\xf1\x6c\xc6\xf7\x4d\xc1\x36\x44\x4e\x96\x61\x04\x1c\xd9\x8b\x21\x81\xb2\xa2\x25\x8a\x1c\x5a\xc8\xc4\x12\xf1\x28\x28\x49\x08\x25\x2a\xaf\x60\xd3\xd4\xe3\xc7\xe7\xc7\xd7\x97\x8d\xbb\xf1\xf7\xcb\xc5\x1a\x5e\x9b\x3f\xf4\xa6\x34\x6e\xf5\x96\xb7\xf3\xef\x1a\xd1\x65\x7c\xc3\x59\x73\x56\x35\x9a\xd2\xb7\x54\x99\x34\x6f\x43\xe2\x03\xcc\x68\xa2\x40\xdc\x48\x4a\x58\xec\x22\x31\x50\x30\x13\x46\x9e\x68\x5b\x3e\x47\x7b\x38\xf0\x79\xd6\xd5\x7d\x57\x17\xa1\x13\xa9\xac\x14\xa0\x2c\x70\x9e\x9b\x26\x37\xfd\xa2\xed\x12\xeb\xe3\x9f\x9c\x3c\xeb\xb8\xe6\x4b\x5b\xbf\x33\x28\x18\x93\x39\xb9\x5d\xad\x7d\xb3\xc1\xc0\xcb\xad\x0f\xa4\x57\x1b\x99\x83\xa2\xc0\xaa\x56\xc8\xaa\x0c\x0a\x79\x88\x35\x5d\x41\xa2\x1f\xb0\x1e\x03\x48\xac\x89\x00\x86\x6e\xc0\xfd\xbf\x5a\x68\x1a\x2b\x84\x5a\xe0\xa9\x1a\x78\x3c\x58\xff\xde\x49\xb6\x72\xad\x78\xe3\x6e\xd3\x93\xab\x5a\x35\xef\x53\xf5\x52\xa7\xfe\x95\x94\x5f\x87\xbf\x9b\xfb\xe7\x43\x8d\x8a\xd4\xa8\x32\xf5\x6e\x9a\x85\x93\x12\x29\xd6\x6c\xda\x62\x63\xda\x57\x12\x27\xf1\x88\x2e\x41\x3a\xe2\x61\x12\x7b\x3c\xc1\x76\x14\x13\x18\x21\x9e\x24\xaa\x2f\x69\x28\x0a\x31\x97\x05\xe4\xba\x7e\xb3\x1e\x3f\x1e\xcc\xb7\x70\xf7\x8b\xed\x4a\xe5\x3c\xb4\xa8\x1a\xdb\xe9\x76\x30\x82\xfb\x7c\xc9\x1f\xa4\x4c\xde\xa0\x79\xbf\x12\xd9\xbf\x20\xa9\xb7\x11\x28\x91\x6d\x89\xba\x84\x78\x0c\x42\xc5\x61\x0c\x88\x5c\x86\xd3\x45\x4f\xd5\x04\x83\xe8\x54\x14\xf8\x36\x45\x4b\x8a\xa3\x10\x2c\x71\x7c\xa8\xfd\x5b\xed\xf8\xd1\x3b\x2d\x67\x9e\x72\x6a\xd7\x3b\xd6\x95\xbc\x5c\xa7\xf4\xcb\xdb\x7b\xfc\xf8\x6d\xf3\xaf\xb8\xaa\x55\xcb\xd4\x2f\xb0\xb8\xf6\xa6\x31\xeb\x16\xab\xe9\x36\x59\xb2\x59\x16\x60\x57\xf4\x8c\xc0\x15\x55\x9f\x0e\x80\xe8\x21\x22\xa8\x9e\x60\xd1\x24\x12\x21\xc5\x70\x40\x60\x88\x20\x3a\xd8\x12\x5c\x44\x45\xa9\x9f\xf0\x1f\x37\x1f\xd0\x63\xe3\x87\xaf\x7e\x33\xbd\xb6\x9d\xcb\x5a\x19\xe1\x57\x9f\xd7\x16\x8c\xbb\xfe\x43\xc1\x93\xe5\xde\x9c\xee\x3f\xd3\x2f\xbd\x2f\x2e\xde\x89\x2c\xcd\x33\x1d\xcd\xe1\x19\x4c\x6c\x3a\x51\x69\x9a\x23\x36\xe7\x84\xb4\x60\x23\xa8\xa9\xba\x03\x1d\x8a\xc1\x84\x71\x2d\x27\xf2\x28\x07\xf3\x74\xea\xce\x61\xcf\x02\x9b\xe6\xf3\x0d\xb7\x4f\x29\x5d\xa8\xd7\xe1\xe1\x6b\xac\x8e\x45\xca\xf0\x15\x92\x3f\x4a\x4f\x1d\x74\xae\xcb\x5f\x35\xab\xec\x9f\x9d\xde\xa0\xe7\xaa\x92\x65\x87\xc8\x88\x22\x17\x51\x44\x08\x43\x25\x89\x0d\x25\x30\x39\xc7\xb5\x7d\x26\xc0\x80\xe1\x4c\xe8\x73\x26\xa2\x11\xd0\x22\x8a\x35\x39\x2a\x8b\xaf\x9d\x39\xfd\xb9\x43\xbb\x9f\x2e\x9e\xc9\xf3\xdd\x7e\x25\xd3\x77\xff\xb2\xa0\xcf\x67\xf4\xd1\x1e\x17\x4a\x8c\xa9\xe7\x56\x3e\x77\x75\x79\x7a\x2f\x89\x13\xb9\x81\x60\xb9\x52\x18\x1a\x62\x24\x25\x11\x36\x39\x2c\x06\x8a\xc7\xb2\x91\x8f\x1c\x9c\xa8\x91\x10\xb0\x1a\x6f\xb3\x2c\x11\x0d\x60\x84\xfa\x7f\x6d\x64\x7c\x54\x4d\x62\x6c\xa5\xad\xf9\x57\xdc\x3c\x7a\xfd\x61\x8e\x05\x6f\x0f\x7c\x66\xe7\x4b\x37\x3b\x68\x33\x07\x9f\x7e\x68\x15\x3c\xb8\x6f\xd6\xd8\xf2\xd9\x67\x5b\xa5\x8c\xd7\x8e\x1e\xb9\x1a\xed\xa9\x26\x1f\x01\x53\x40\xbe\xc4\x87\x90\x03\xa2\xaa\x30\x12\xc5\x4a\x81\x65\x07\xa1\x9e\x04\x09\x07\x55\x14\x03\x01\x32\xa6\x60\x3d\x5e\x28\x68\xeb\x5a\x14\x8b\x36\x74\x2b\x67\x56\xf8\xfc\xd4\x8d\x09\xf8\xea\xf1\xaf\x32\x9b\x74\x2e\x75\xa9\xe2\xa8\xf6\x8d\x0b\x54\x3e\xb7\xf1\x8b\xf4\x5e\x10\xce\x91\x34\x26\x14\x84\x20\x96\x3c\xd6\x60\x4d\xd6\x13\x90\x0c\x64\x09\x71\x1a\xe0\x6c\x1a\x58\x28\xf2\xbd\x80\xa1\x01\xc5\xb2\xb6\x28\x38\x1c\x47\x3f\x1e\x41\xee\x8e\x1a\xb3\x73\x67\xed\x7b\xdb\xbe\x2c\x29\x2e\x5b\xe6\x16\xf6\x5a\xd1\x33\x6e\x8f\xbc\xac\xe4\x6e\x5f\xaf\xff\xce\x19\x93\x27\xf5\x4e\xaf\xc9\x3c\xcd\x70\x0e\x4c\x0c\x56\x0a\x1c\x18\x6a\x3c\x49\xa2\x44\x33\xac\x04\x39\x86\x68\x86\x3e\xf1\x82\x50\xe5\xdc\x98\x4b\x12\xc7\xe5\x84\x18\x3a\x9a\x90\xfa\x72\x94\x31\x4b\x6e\xae\x45\xaa\x56\x7a\x7d\xe7\xd5\xbc\x6f\x37\x3c\x51\x5b\xe8\x34\xe3\xd3\x45\x9d\xc1\xc6\x5c\x87\xca\x36\xfc\x7b\xbe\x71\x35\xbd\x97\x83\x68\x24\x86\x02\x4f\x87\x50\xd4\x09\x80\x22\x06\xf8\x5f\x41\x2f\x70\x54\x5a\x37\x64\xca\x32\x4c\xc1\xe4\x98\x88\x76\x79\x53\xf7\x93\x84\xc5\xa2\xfc\xf8\xe5\x98\xbd\x60\xf3\x83\xcd\x97\x6a\xfe\xb9\xb8\x41\xd4\xb7\x69\x74\x6e\x5e\x07\x65\x7c\xf1\x0b\x4d\xeb\x96\x7f\xcf\x3b\x36\x7c\xf0\xeb\x7d\xb3\x4f\x44\x4a\x69\x32\xed\x6a\x22\xe7\x5a\x62\x24\x22\xe2\x4b\x01\x51\x6d\x2e\x80\x14\x54\x02\x1c\x49\x3a\x1b\x69\x7c\x2c\x43\x68\x32\xae\xa7\xf9\x81\xcf\x0b\x9c\x45\xe0\xe3\x26\x5f\xbf\xa3\xfc\xfc\x00\x71\x3f\x7c\xb9\xc3\xdd\x3f\xe9\xc3\x99\xbd\x8e\x8d\x6a\x5c\x77\xfa\xe4\x6e\xd7\x16\x55\xed\x7e\x21\x3f\x58\xbb\x26\xcd\x82\x68\x48\x50\x7c\x8e\x85\xba\xe6\xc7\xaa\xae\xc9\x7a\x22\x26\x3c\x63\xd1\xbc\xc2\x24\x51\x64\x59\x44\xb1\xa1\x64\x70\x7e\x64\x88\xc4\x49\x7c\x33\x10\xcd\xd4\xfd\x78\xb4\xaa\x7c\xf3\xb1\x13\x06\x3d\xac\x33\xe7\x61\xf7\x53\xfd\x46\xf5\x78\xf5\xd0\xa7\xcf\x50\xf9\xc4\xa1\x6a\xb1\x92\x1f\xd4\x58\x58\x51\x4b\x6f\xc0\x73\x4d\x53\x12\x92\x24\x06\x1a\xe3\x09\xac\xe2\xea\x11\x86\x12\xc6\x61\x42\xb0\x0c\x3d\x9a\x76\x75\x96\xf1\x55\x1e\x23\x15\x46\x44\x77\x4c\x4b\xa3\x53\xbf\x8c\xea\x45\x7f\x37\x6e\x92\x51\x75\x43\x9b\xaf\x57\x4d\xfd\x3d\x2e\xfa\x44\x37\x7d\xbb\x10\xd6\xda\x39\x9c\xed\xba\xf1\x61\x9d\x66\xe7\xeb\xa7\xf7\x6b\x0b\x3c\xe4\xe4\xc8\x4d\x12\x9d\x8a\x79\xc7\x73\x38\xd1\x96\x0d\x84\x7d\xda\xc1\x81\x24\xf1\xae\x6e\x58\x02\x71\x12\x12\xb3\xb4\x13\xba\x8e\x42\x25\x29\x44\x30\x36\xdd\x5e\xe0\xd4\xad\x66\x3d\x71\xb1\xe1\x10\xa3\xd7\x40\xe7\xad\x2d\x5d\xdf\x1e\xb3\x65\x40\xe6\xfe\xd3\x7f\xbd\xf3\x72\x66\xe6\xa4\xec\x23\xba\x53\x9a\xcc\x42\x60\x84\x8a\x24\x39\x0e\x31\x5c\xce\x22\x06\xa5\xf0\x36\x30\x24\x45\x8e\x44\x56\x55\x5c\x91\xa5\x65\xc0\x45\x90\x0a\x44\x55\x50\x71\x22\x0a\x20\x0b\x46\x4f\xdd\xf1\xbd\x0b\x9d\x18\xb6\xa0\xea\x43\xe3\xbb\x52\x1d\xfb\xac\x6d\x70\xff\xe7\x6f\xeb\x4c\xbb\x34\x77\x70\x53\x79\x4d\x19\xb7\xd2\x14\xe5\x91\x73\xc1\x1d\x73\xec\x9a\xf7\x3a\x69\xb1\xa2\xef\xab\xaf\x09\xbf\xd4\x78\xe3\x3e\xb9\xad\x1e\xed\xdc\x25\x53\xfd\xb6\x6f\x8d\x1f\xf7\xbe\x9a\x5e\x25\x5f\x3e\xb2\x24\x56\xf6\xcc\x38\x09\xe4\x88\xa0\x50\xf6\x78\x9a\x32\x58\x9a\xd7\x39\xc1\xc0\x8e\xa4\xca\x1e\x42\x2e\xa0\xc4\xc4\xe4\x20\xb0\x15\x53\x11\xc2\xc7\xa3\x7a\xfc\xdc\x2b\xd5\xf7\x7d\xbc\xf6\xf4\xea\x06\xa8\xe3\xda\xaf\xfa\x1d\xce\xd1\x74\xf0\xaa\x3e\xeb\x73\xec\xdf\x72\x65\xe3\xdd\xfe\x7d\x07\xa5\x19\xbd\x49\x2b\xa2\x07\x35\xd7\xb3\xd5\xd8\x37\x13\xa0\xbb\x8c\x1f\x5b\x2c\x45\x99\x6a\x4c\x03\xc7\x57\x1d\x9b\xe1\x1d\xc7\xd6\x13\x9e\x42\x50\xc0\xb1\xad\xc3\xd4\x6f\x9d\xc1\x0d\x3f\xdd\xfd\xec\xd1\x97\x2f\xe5\xa8\x7c\x7e\xc0\xb1\xfa\x5f\xee\x5c\xf9\x13\xcc\x7d\xaa\x59\xe7\x71\x85\xaf\xdf\x69\x92\xac\xde\x58\x37\xbd\x8e\x0b\x0c\x56\xc6\xc0\x95\x6c\x82\xa1\xcb\x84\x84\x0e\x02\xde\x8b\x71\x18\x61\xdb\xb6\x5c\x07\x2b\xae\x44\x45\x34\x4b\x3b\x3c\xd0\x02\x1e\x43\x8a\x4b\xb1\x05\x63\xdb\xd7\x7d\xf3\x7c\xd5\xfc\xf2\x80\x2e\x25\x87\xd9\x95\xfa\xbd\xbf\xb4\xd9\x07\xf3\xcb\x8e\x7c\x0f\x0c\x9b\x23\xaf\x5f\x5f\xe0\x5b\x92\xde\x76\x06\x27\x18\xb2\xa4\x24\x21\x62\x25\xc0\xfb\x58\x77\x39\xdd\xc0\x91\x2a\x43\x21\x8c\x6c\x19\xfb\x36\xab\xd2\x41\x08\x0d\xa2\x25\x3e\xe6\x02\x56\x32\xf5\xac\x34\x23\x73\x9f\x79\x6a\x58\x97\xfb\x43\x1b\x3f\xb3\xec\x7c\xbf\xe6\xb6\x90\xa7\x4f\xdf\xb6\x55\x4f\xb6\x78\x4e\xd8\xf9\x5c\xc5\xdf\x9a\xcc\xc9\x7b\xec\x91\x6c\xfb\x6c\x03\xfb\xda\x83\x09\x6b\x7b\x4c\x7f\xe6\xdb\xaf\x6f\x8f\x68\xb7\x32\x5f\x99\x75\xb9\x0f\x77\x7c\xf5\x4b\x66\x52\xc9\xa2\x7b\xe5\xdb\xe9\xdd\xe9\xcd\x51\x72\xa4\x80\x40\xe6\x25\x1c\x4a\x62\x68\x99\x74\x10\x3a\x62\x1c\x58\x51\x24\xd8\xac\x02\x48\x02\x5d\xd7\x43\x6c\xa2\x40\xa0\xf9\x20\x72\x38\x3d\xc5\xcb\x68\x4c\xd1\x4a\xf1\xaa\xce\xb9\xa6\x36\x68\xd8\x52\x6f\xda\x21\x58\x34\xba\xdc\xf5\x2d\x93\xda\xb6\x5f\xd2\xb1\x8f\x7c\xa4\xef\x4f\xa7\xf5\x34\x9b\xec\x44\x09\x4b\x20\x89\x1c\x5a\xa4\x28\x97\xa6\x68\xac\x4b\x08\xb8\xa1\x05\x35\x35\x8e\xfd\x20\x60\x2c\x06\x61\x81\x84\x30\x92\x69\x49\x91\x05\xff\x71\x93\xcf\x15\xa8\x00\x6a\xff\x5e\x77\x9c\x36\xf8\xdc\xc4\x8c\x6b\x43\x96\x1c\xc8\x50\x2b\xe4\xd5\xe6\xbd\xfb\xd9\xcd\xb9\x97\x6b\x3e\x7c\xba\x7d\x7a\x5f\x45\xbc\xa6\x59\x91\xef\x50\x21\x8c\x1d\xd9\xd6\x28\x5e\x63\x80\x20\xea\x31\x9f\xc8\xd0\x57\x1c\x23\x20\xbc\xe6\x44\x9a\xcf\xf9\xb4\xae\xea\x72\x60\x89\x59\x60\x64\x1b\xb4\xd9\xd4\xfd\xa5\xd6\x5f\xe7\x81\x7f\x3c\xbc\x89\x97\x76\x6d\x68\xfc\xf8\xc7\x40\xf5\xfb\x33\x67\xcf\xec\xef\x3f\xbb\x7b\x66\xd1\x34\x37\x28\x2c\xac\x3b\x0a\x46\xc8\xc5\x84\x45\xbc\x62\x43\x47\x81\x46\x10\xc5\x44\x25\xa1\xe4\x2b\x2c\x02\x1c\x11\x75\x0d\xb0\x51\x24\x91\xd0\x37\x25\x3d\x05\x4b\xcd\xec\xf8\xe5\xb0\xea\xe3\x36\x7f\xe6\x6e\x2c\xc9\xbc\xbf\x21\x87\x10\xaf\x6f\xf9\xf7\x53\x19\x1c\x75\xfc\xa5\x4f\x97\x35\x61\x6b\xa4\xf9\x4b\x3b\x86\x21\x39\x9e\x14\x19\x8e\x9e\xf8\x11\x17\xca\x81\x19\x84\xd8\xd6\x50\x00\x11\x9f\x10\x11\xf8\x7e\x40\x20\x92\x43\xca\x96\xf4\x24\xe2\x23\xc3\xca\xa2\x9b\xdc\xae\xea\xba\x33\xc5\x5b\xfc\xa6\x7f\x51\xbb\xd6\xbd\x6f\x3a\x6d\xe8\x53\xe5\xb6\x54\xb6\x79\x9f\x46\xe7\x9f\x5b\xfc\xc1\xe1\x42\xdb\x17\xff\xfc\x88\xd3\xe6\xef\x5f\x9d\xb9\xde\xbc\xd9\xe9\x9c\x3d\xa7\x4d\x5c\x78\x77\xcc\xee\xbb\xc5\x72\x56\xc9\xff\x54\xce\x15\x93\x86\x1e\x1d\xd2\x7a\xf4\x98\x52\x69\x1e\x03\x41\xc9\x41\x88\xb8\x51\x14\x32\x74\x40\x14\xc7\x14\xe3\x58\xe4\x24\x2e\xf0\x14\x55\x66\x1d\x29\xd6\x59\x4c\x0c\x13\x99\xba\x24\xba\x81\x03\x34\xea\xf1\x73\x01\x7f\x8c\x6a\xfd\xa6\x98\x51\xf3\xc2\x8d\xb2\xcf\xe7\xdd\xd9\x70\xeb\x9a\x77\x36\x5f\xa9\x7a\x6c\x55\xdc\xf5\x55\xbe\xc4\x0f\xde\x94\xec\x03\x29\x52\x2f\x2c\x77\x63\x5d\xb6\x2d\xcf\x09\x64\x0d\xc4\x50\xe2\xb1\xe6\x6a\x91\x15\x69\x74\xe2\x28\x41\xa2\xfb\xb6\x0c\xad\x84\x8d\x04\x1d\x02\x4a\x21\x22\xeb\xa7\xe0\xce\x4e\xbf\x23\xb4\x5a\x78\xca\xda\x3f\x65\xe2\xfb\x25\x7b\x0c\x6f\xfb\x6d\x8b\x6d\x03\x07\xdf\xeb\x0d\xfa\xf4\xd8\x5d\xf7\x5c\x85\x12\xdf\xb8\x69\x56\x44\x80\x88\xf7\x58\x11\x4b\x8c\x21\x0a\xba\xe6\x30\xc0\x66\x6d\x56\x27\xba\x46\x01\xde\xb0\x19\x0c\x39\xd1\x31\x22\x9e\x35\x39\x4c\xab\x76\x80\x35\x2a\x75\x89\xfc\xe7\x1b\xe3\xae\x94\xae\xfa\x57\xff\xc1\xf7\x1a\xae\x5a\x55\xb0\xf6\x9a\xc1\x13\xdf\x9b\xb6\x64\xff\xd0\x56\xf9\xfb\xb5\x1c\xe9\xc2\xed\xd9\x47\xda\xa4\x8e\x35\xbc\x6c\x71\x92\xac\xb0\xc8\xd2\x74\x3a\x30\x03\x60\x06\x16\x42\x20\xa4\x59\x51\x51\x01\x40\x0a\xcd\xca\x14\x4c\x02\x16\xda\xa2\x28\x00\x40\xfe\x43\x0e\xdb\x96\xff\xff\x36\x49\xc9\x68\xfd\x54\xf1\x02\x8f\xa2\xa0\xf2\xbc\xbf\xa7\xe1\x3b\x15\xca\x3a\xbb\x3f\xee\x78\x76\x1d\xdb\xe4\xd4\x00\x7c\xec\x5a\xff\x6d\x23\x8d\x26\x23\x76\x3a\x23\x3e\xb6\x26\xa4\x37\x32\xa9\xe4\x5f\xbe\x2b\x3a\xbc\x69\x01\xce\xd5\x04\x4a\xf3\x3c\x36\xa4\x4d\xde\x0c\xcd\x08\x70\x9a\xeb\x89\xa6\xc1\x09\x36\xeb\x09\x26\x9f\x30\x46\xfc\x5f\x0c\xb8\x47\xcc\x3e\xfa\xe0\x05\xbf\xd7\xbe\x5e\xa5\x9e\xe9\xc5\x77\x65\x07\xcc\x6d\xf7\xc5\x8c\x51\xa3\x9f\x55\x1b\x7c\x22\x8a\xeb\x27\x95\x5b\xb8\x68\x7a\x9a\x11\xfc\x52\x20\xca\x32\x14\x63\xc1\x23\x96\xa9\xf8\x3c\x61\x64\x4b\x8e\x44\x4f\x10\x7d\x06\x0a\xa1\xe6\x61\x57\xb3\x54\x08\x18\x5b\xb1\x4d\x13\x4b\x86\x9f\xfa\x4a\xdd\x3a\xfe\xf4\xd0\x03\x37\xec\xb0\x7b\xf1\xd7\x9e\x98\x7c\x7e\xe5\xb1\xfe\x1f\xde\xba\x5c\xfc\xe2\xb4\xbd\x53\xca\x1f\x7e\xd8\x3a\x36\xb2\xcf\x22\x4f\xbd\x11\x8f\xf3\xdc\xc8\x0f\x80\x48\x3c\x3e\xb6\x19\x3a\x09\x3d\x07\x01\xd6\x26\x44\x21\x46\xc2\x79\xae\x69\xf9\x20\xe2\x04\x91\x0d\x43\x95\xc4\xd0\xd2\xa4\xd4\x66\xef\xda\x39\x7c\x5b\xff\xde\x3d\x7f\xe9\xf5\x76\x5b\xf3\xcc\x66\x69\x57\xf1\xa2\x52\xb1\x4f\x1e\xd4\xe9\x3d\x75\x5a\x59\xd0\xe3\x4c\xd9\x55\xe9\x75\xe0\xc8\xd4\x3c\xc4\xb1\x0a\xed\xf2\x12\x24\xba\x20\x52\xa2\x4e\x74\x2c\xb3\x26\x15\x72\xaa\x1e\xaa\xb4\x10\x2b\xb2\x05\x34\x2f\x36\x44\x22\x7b\xac\xa1\xa6\x36\xfb\x9d\xbb\x63\x4b\x3f\xb7\xec\xf5\xa9\x33\xbe\xd8\xd7\xae\xe3\x30\x6f\xc0\x61\x67\xda\xfa\x21\x0f\xeb\x7e\x36\xb5\xef\xa1\x53\x7f\xd5\xe9\x93\x7d\xaa\x64\xca\xbb\xcd\xfa\x98\xd6\x44\x5b\x27\x90\x0a\x02\x17\xf1\xac\xa2\x13\x35\xa6\x0d\x1f\xf1\x3c\x67\x50\x5a\xa0\x6a\xd0\xa4\x25\x37\x09\x75\xcd\x15\xf9\x24\x21\xff\x99\xe1\xbe\x9d\xef\xff\x36\xdc\xcc\x68\x93\xab\x58\x8e\x61\x8f\xb2\x9d\xb6\x37\xaa\xbf\x39\x73\x1a\x35\xee\xee\x1b\xab\x8e\x3c\xf1\x7b\xa9\x71\xe2\xfc\xee\x25\xde\x78\xa3\xd0\xe2\xfd\x6f\xf5\x78\x81\x1a\xb2\x2a\xfb\x92\x22\x29\x0f\x47\x15\x3c\x41\xb1\x69\x41\xc5\x76\xc2\x0a\x10\xc2\x50\x8e\x02\xa4\x52\x1c\xa2\x28\xd9\xd2\x0d\x53\x0a\x79\x68\x33\x6a\x10\xaa\xc0\xd4\x03\x86\x31\xe2\xd4\xef\x98\x6a\xbd\xa6\xf1\x6b\xae\x5f\x2b\x2c\xb5\xed\xd6\xa7\xdf\xb4\xba\x3d\xdf\x00\x55\x6b\x1f\x3a\x7b\x78\xee\x6b\xde\xc8\x81\xc2\x55\x3a\xfb\x74\xf2\x94\x66\x5b\x1a\x1d\xe8\x5c\x4c\xd9\x20\x16\x38\x2b\x96\x3c\x24\x4a\xbc\xe2\xc8\xa1\xe7\x33\x1c\x93\x10\x89\x45\xa6\x27\x86\xac\x91\xe8\x58\xd2\x0c\x81\xe5\x52\xe4\xb1\x4f\xb6\x4c\x1d\xf5\xed\xfb\xef\x34\x8c\x06\x76\x5d\x77\xa0\x5d\xdb\x05\x07\x3f\xa8\xa0\xde\x9a\x3a\x44\xa8\xd0\xa0\xf3\x15\xf7\xad\x4f\xc3\x34\x63\x02\xac\x30\x92\x42\x37\x52\x0c\x91\x67\x15\x95\x72\xc4\xd0\x55\xf9\x18\xd0\x5a\xc8\xc9\x6e\x98\x40\x5a\xd7\x91\x91\x48\x02\x2f\x98\x22\x41\x80\xa3\xb8\xd4\xb1\xf2\xa5\xbd\x1b\x9e\x6c\xfe\xc4\xfb\x3f\x7e\x5f\x39\xf7\x6b\x9f\x2d\xe9\x59\x64\xc5\xa0\xe3\xf9\x4f\x0f\x84\xab\x41\xa3\x7c\x3b\x06\x6e\x5f\x97\xe6\xf6\x65\x10\xb2\xbc\xc4\xc5\x86\x20\x88\x50\x07\xac\x65\xc2\x24\x49\x9c\xc4\x89\x81\x6e\x29\x6a\x14\x42\x46\x4a\x4c\xd3\xb0\x6c\xd3\x61\x68\x02\x9c\xe4\xdf\x15\xc3\x23\x5b\x76\xfe\x69\x28\x9b\xd1\xa6\x4d\x81\x8a\x79\x1e\x4d\x64\xf9\xf3\x3f\x31\xfd\xb4\xb9\xe0\x8d\xed\xb5\x8a\x1e\x98\xf0\xeb\xa9\x9c\x4b\x93\x2e\xa5\x26\xc2\x26\x63\xae\x65\x2a\x3c\x75\xa4\x62\xf6\x35\x45\x52\x6f\x6e\x42\x26\x0d\x08\x47\xb1\x9e\xac\xb2\x46\xa2\x1a\x0c\x4d\xc7\x31\x62\x00\xe6\x1d\x64\x12\xd7\xd4\x71\xac\xf9\x4e\x08\x5d\xd1\xa0\x4d\x62\x93\x47\xd0\x0f\xff\x65\x76\xde\x63\x15\x6e\x9f\xef\x3e\xe4\xc0\x94\x3c\xf5\x67\x14\xd8\xfd\x72\x9b\x92\x9f\xd4\xaf\x75\xa1\xd0\xcf\x19\x47\x6a\x15\xe9\x2a\x29\xe3\xd2\xad\x4a\x67\xd8\x9a\x47\x4b\x22\x61\x12\xc9\xb0\x0c\xa4\x6a\x50\xa4\x43\xcd\xf4\x2d\x12\x27\xba\x8e\x58\x8f\x32\x6c\xda\x8c\xf9\xc4\xa7\x64\x93\x4b\x7c\x0f\xa5\x9e\x97\xd4\xef\x34\x72\xe6\x83\x7c\xf1\xc9\xe9\xab\x47\x5e\x2d\x3f\x73\xd2\xde\xbc\x15\xe8\xde\xf2\x9b\xcb\x1a\xe4\xa9\x45\xef\x5c\xf7\x70\xdf\xd4\x34\x9b\x4d\xab\x30\x49\x02\x3b\x11\x14\x46\x4d\x5c\x9b\x8b\x18\x9d\x0d\x93\x98\x4f\x38\x4c\x2b\x86\x64\xc4\x1a\x8b\x79\x03\xe8\x9c\x6f\x63\xe0\x29\x7c\x42\xb2\x30\x7b\xcc\x6b\x9d\x67\x9f\xf2\x46\xdf\x3e\xd3\xe7\xc2\xd2\xc2\x39\xde\xa9\x57\xf0\xce\xb3\xd3\xba\x1c\x5b\xb8\x6f\xfc\x53\xa3\xb6\x17\xa3\xfa\xa7\x59\xe8\x8a\x48\x8a\xaa\x59\x89\x69\xd3\x32\x91\x14\x06\x58\x01\x0f\x75\x3a\x86\x8a\xef\x61\xa0\x5b\xa2\x4d\xd1\x76\x6c\x26\x40\xc6\x94\x12\x0a\xae\x10\x98\xa9\x2f\xc9\xb0\x3d\x2b\xee\x8c\xd4\x96\x53\xa3\x7f\xa5\xce\xd4\xba\x7d\x61\xc2\xd6\xb9\x72\x89\x71\x65\x3a\x94\x9d\xd6\x30\x67\x89\x92\x05\xdf\xcd\xfe\x7a\xbe\x94\xb1\x32\x60\x90\x99\x98\xa1\x8b\x75\xd7\x94\x08\x47\xa0\x22\x68\x6a\x28\xea\x92\x09\x6c\x33\x11\x30\x65\x11\xd9\x8c\x35\x97\xb5\x08\x11\x13\x0b\x79\x89\xfe\x18\x33\xe5\x9f\x80\x12\x19\x6d\x5a\xb4\xc8\xf3\xbf\xd6\xec\xb4\x3d\x74\x30\x77\x8e\xae\xdd\xa7\x7e\xf6\xd1\x1f\xcd\x4e\xbd\x1d\x56\x7b\xba\xd5\xb7\x79\xde\xda\xf9\xc5\xc9\xb6\x03\xbc\x37\x7b\x17\x2a\x50\x34\xbd\xe9\x9a\x0a\x14\x41\x35\x89\xa2\xc6\x96\x18\x03\x41\xe7\x18\x46\x93\x20\xe6\x18\xe4\xbb\x92\x6f\x80\x18\xc9\x9a\x87\xa1\x87\x39\x59\x09\xf9\xd8\x30\x48\x16\x13\xcf\x23\xc5\x8f\x77\x18\x58\x7e\x50\x66\x34\x62\xe8\x2b\x79\x3b\x97\x6d\xdf\xf7\x79\xb1\x74\xa5\x9f\x17\x66\xf0\x7d\x06\x5f\x1a\x7d\xa4\x70\x9a\xfb\xbb\xb4\xec\x21\x2f\x89\x05\x3f\x54\x91\xc4\x73\x44\xd5\x30\xe2\x54\x37\xe1\x31\x8e\x1c\x1d\x12\x02\x59\x97\x8f\x80\x4c\x4c\xce\x83\x81\xc6\x0b\x24\x0b\x42\xcd\xf5\x5e\x05\xcf\x8c\x2a\x3a\x72\xa3\xb7\xfe\x8d\x41\xcb\x4b\xfa\xfb\xbe\xfb\xea\x41\xfd\x05\x4d\x5f\xc7\x47\xaa\xee\xad\xb2\x75\xfe\x9d\xd6\xe9\xbd\x53\x50\xe2\xa5\x24\x21\xc4\x60\x54\x99\x46\x91\x2e\xf8\x49\xc4\x48\xa6\x13\x0b\x49\xcc\xf1\xa1\x97\x18\xb1\x4a\x70\x92\x50\x91\xad\x4b\x42\x20\x2a\x14\x49\x6d\x76\xee\x2f\xe0\xc2\x1f\x1a\xed\x7a\x4f\x1b\x70\xf9\x40\xbb\xce\xbb\xaf\x0e\x9f\x3e\x22\xd7\x84\x8e\xe7\x7a\x2c\xba\x70\xa3\x5c\xfb\x5d\x3f\xa5\x97\x47\xc0\x3b\xaa\x12\xf0\x22\x12\x2d\xe0\x30\xc4\xd2\x28\x23\xe4\x22\x86\x09\x31\x97\x78\x32\x07\x6c\x4c\x3b\x11\x1f\x22\x8a\x63\x42\x8d\xc5\x44\x16\x55\xf4\x9f\xf9\xf2\xff\x2c\x9c\xfa\xa7\x3e\x7a\x46\xeb\x9a\xff\x7b\x8b\x28\x5a\xb0\xfc\x35\xa5\xcd\x81\xda\xc7\x4a\x3f\x5c\x3c\x7f\x32\xa8\xfb\xfa\x2f\xdd\x0f\x1e\x7c\x66\xfe\x92\xe2\xd8\x6d\x7a\x7e\x61\x9d\x3f\xd2\x3c\x44\x67\x59\xd1\x8a\x29\x5d\xc5\x72\x24\x18\x40\x54\x63\x84\x24\x9d\x07\x1c\x6d\xdb\x22\xad\xd0\x30\xe6\x38\x87\x61\x24\x09\x12\x25\xb2\x75\xc5\x17\xb2\x10\x81\xf9\xfe\xa5\x43\xdd\xaa\xac\x1e\x39\xd2\x1b\x7f\xe9\x8f\x7a\xed\x5f\x29\xd7\xe7\xd7\x41\xf3\x47\x2f\x44\x2f\xa1\xdd\xa5\x7f\xb9\x72\xee\x9d\xec\x43\x3d\x53\xf6\x13\xd9\xd8\xb4\x23\x8b\x03\xa6\xcf\x62\x9e\xf1\x42\x11\x11\x68\xb2\x96\x02\xb1\xa1\x08\x8a\xc8\xdb\x5a\x24\x45\xc4\x50\x42\x49\x82\xc8\x44\x94\xaf\x67\x81\xb4\xa8\x3d\x68\x60\xe1\xce\xdb\x9b\x97\x58\x74\x71\xd6\xc7\x05\xaa\x51\xfb\xf6\x0f\x8a\xfb\xbf\x70\x7f\xf0\x9f\x27\x7e\x1d\x73\x61\x6c\x9e\xc6\xe9\xdd\x22\xca\xc9\x9e\xec\x4b\x22\x43\x43\x21\xd6\x55\x16\xb1\xa1\x15\x68\x3c\xad\xcb\xac\xc9\x03\xdb\x8a\x2d\x86\xe3\xe3\x28\x66\x25\xd5\x17\x2d\x99\xb7\x0d\x8a\x47\xa9\x3d\xa1\x8f\x7c\xed\x9b\x17\x72\xd7\x95\x6c\x74\x7e\x5a\xe6\xb4\x0a\x73\x96\xfd\xac\xcc\xef\x50\xac\x64\xee\xd2\x8b\xd7\x98\xdf\xe5\x68\x97\x5e\x8e\x16\x17\x9a\x82\xc1\xe1\x04\xdb\x8a\x1c\xe9\x16\x40\x09\x1f\xfa\x92\x6a\x3a\x84\x57\x6d\xc1\xd1\x69\x51\xb7\x01\x17\x5b\xae\x1d\xf8\x72\xe0\x51\x48\xfa\xaf\x9d\xad\xff\xe3\x09\xff\xd4\x4f\xcf\x68\x5d\x31\xd7\x53\x8f\x7a\x42\xf7\xc2\x3d\x2e\x3c\xbd\xe9\xf3\xe7\x16\x97\x2f\x5c\xb2\xe6\x9a\x01\xf7\xfe\x7e\x2f\xf7\x5b\x45\x96\x0d\xb8\x34\xe0\xe8\x13\xfe\xfc\x8f\xc6\x9d\x4d\xef\xd9\xc4\x6c\xa4\xf9\xa1\xce\x3a\xba\x1c\x5b\x10\x70\x3a\x17\x2a\x9a\x04\x4d\xd5\xd0\x39\xc6\x47\x9e\x6a\x21\x4f\xd1\x58\x8f\xa6\x35\x6c\x23\x64\xba\x5c\x16\x54\xd2\xb6\xab\x4a\x39\x75\x7e\x3a\xd5\x6e\x60\xed\xae\xc7\xef\x8e\x28\x32\xbc\xa3\x52\x6a\xc7\xf2\xbd\xce\x8e\x22\x37\xdf\x6a\xd0\xff\xc0\x8a\xb2\x69\x26\x59\x72\x08\x5b\x94\x1d\x8b\xb2\xcd\x05\x91\x92\x10\x4a\x25\x02\xcb\x24\x56\xe4\x68\xa2\xc9\xcb\x94\x16\xb2\x84\x31\x19\x2c\x1b\xae\xa7\x8b\x5a\x64\x64\xb1\x8f\xf3\x33\x00\x17\x8d\x8c\xa6\x7d\xdf\x0b\x36\x6f\x3a\x68\x55\x89\xd1\x1f\x6e\xab\xf3\xde\x8b\x4f\x9a\x8d\xaa\x96\x1e\xde\xf6\xc5\x13\xc7\x3f\x4c\xaf\x03\x0b\xbc\x95\x60\xe8\xf2\x11\xa2\x74\xc4\x85\x3a\x31\x58\x45\xb6\x2c\x8e\x8d\x89\xa9\x79\xc8\x52\x23\x4b\xd3\xa9\x40\x8d\x29\x55\xd6\x5c\x46\x56\xff\x0d\x7a\x7e\xdc\x81\xe5\x72\x5f\x8d\x19\x75\x2b\x7e\xf6\xc4\x9b\x7b\x37\x1e\xfe\xee\x87\xdc\xb9\xef\x0d\xf8\xf5\xec\xdb\x83\xae\x76\x74\x6b\xc5\xf8\x21\xca\xfe\x2c\x3b\x65\x55\x07\x3c\x20\x8a\x84\x11\x13\x4d\x36\x0d\xdb\x0b\x75\x44\x88\xe4\x84\x74\x6c\x01\xcb\xd1\x7d\x9a\x68\x09\xa2\x79\x03\x8a\x90\xa2\x4d\x2e\x8a\x44\x0e\x3e\xe6\x09\xff\xd4\xa4\xce\x68\x9d\xb3\xe2\xff\xf2\x84\xb1\x2f\x6c\x2c\xee\x57\x7b\x72\x7e\x8e\xcb\x8d\x72\x77\x29\xfa\x5e\x4b\xf5\xf4\x10\xe9\xc4\xdc\xf0\xa4\xf1\xcc\xe2\x7e\x63\x27\x9d\x9a\x9f\x66\xae\x13\x25\xaa\x81\x1f\x39\x22\x47\x7c\xe0\x42\x9f\x0e\x68\x9e\xf2\x74\x31\x52\x75\x4c\x54\x25\xd6\x5c\x2c\x22\xdf\x89\x22\xd6\x0b\x6d\x3a\x31\x02\x23\x8b\xcd\xd2\x7d\x86\xe6\xde\xd2\xd2\xfd\xac\xf0\xde\x3a\x75\x56\xe4\x5f\xb3\xae\xb2\xf0\xac\xf0\x17\xd3\xf6\xb7\x89\xf7\xdf\x13\x36\xf4\x2c\xb1\x3e\xfb\x6a\x0e\xa9\x05\x4f\xe5\x80\x0d\x4d\x96\xb7\x0c\x18\xc9\x26\xcb\xab\x5a\xa2\xe1\xd0\x31\x03\xa8\x46\x34\xcb\x98\x46\x64\x26\x96\x68\x98\xae\xeb\xc6\x40\x8e\x0c\x47\xc8\x62\x9b\x1f\xdc\x52\xf4\xfa\xbb\xbb\x99\xfd\x4b\xb5\x45\xd3\xda\x74\x58\xff\xf5\xe0\x9b\x85\x87\xbe\x9f\xe3\x13\xee\x61\xee\x3b\xb3\xd7\xa2\xde\x53\xd2\x4c\x69\x91\x13\x95\xa6\x0c\x4b\x4f\x7c\x36\xb4\x34\xde\x36\x34\x95\x0e\x6d\x13\xc7\x5a\xe0\xea\x21\x61\x62\x02\x59\x11\x19\x3e\x00\x3e\xa4\x39\x9d\x0d\xb2\x40\x75\x74\x6f\xb4\xab\xf2\xc9\x4a\x39\xaf\x9e\x6c\xae\x6d\x5e\x37\x7d\xc1\x8a\x3d\x9f\xe9\x9b\xbf\xac\x39\xe6\x4c\xd9\x02\xe7\x37\xdd\x38\x62\x65\x7f\xb5\x49\x6a\x19\x36\xc9\x96\x28\xd1\xa6\x58\x46\xd2\x68\x57\x77\x82\x80\xf7\x65\x4b\x90\x00\x56\x89\x8a\x7c\x9a\xc3\xaa\x8a\x68\xca\x83\x98\xa7\xa0\xab\x47\x22\xf5\x1f\x5a\xcb\xc4\x46\xff\xb6\xb8\xf1\xce\x02\x65\x1b\xbd\x8e\x5f\x1f\x52\x71\x58\xb9\xd9\x45\x47\x6c\x1f\x3b\xfe\x6e\x95\x4e\x77\x7e\x74\x2f\x14\x11\x8b\x8a\xbb\x0a\x8c\xc9\x68\xf3\xf0\xe1\xdf\xf7\xa7\x3d\xaa\x53\xd9\xba\x7e\xa5\x06\x4e\xfe\x28\x7f\x85\xba\x4d\xfa\xab\x33\x32\xeb\x7d\xd4\x2d\x6f\xc1\x4e\x35\x4e\x56\xc9\x5b\x60\xcd\x9a\x87\x7d\xdb\x66\x7f\x36\x95\xba\x08\x0c\x15\x5a\x55\x58\x18\x00\xe8\xc7\x90\xe6\xa1\xc1\x6a\x06\x36\x64\x25\x40\x8a\xac\xea\x14\xa3\x2b\xb2\xc7\x32\x18\xba\xc8\x89\x1c\x4c\xab\xba\xfd\xf8\xe0\x72\xfc\xba\x32\xef\xd5\xfb\xb3\xf3\x6f\xfd\x8b\x87\xc7\x72\x95\xb8\xf1\x44\xcd\x1f\x9b\xdd\x5c\x51\x69\x40\xa7\x25\x5d\x16\xcc\xa6\x56\x54\xca\x3e\x2e\x32\xf5\x85\xd2\x98\xd8\x8f\x7c\xca\xd5\xa0\xa5\xea\x2e\x17\x86\x6c\x4c\xab\xb6\x2e\x45\x90\x60\x1d\x25\x0a\xd1\xd9\xc8\x8f\x11\x03\x62\x82\x65\x1e\x71\x7e\x0a\x64\xd3\xa9\x89\x83\xf2\x54\x1d\xd6\x32\x4f\xc5\x63\x7c\xb8\xda\x9b\x31\x73\xd3\xe6\x35\x23\x36\x64\xcc\x7b\xf0\xe5\x81\x9f\x4f\xbc\x73\xf2\xf6\xbc\xf4\xba\xae\xaa\x7b\xc4\x8d\x12\xd1\xd1\x1d\xc7\xd7\x29\xc9\x90\x79\xc3\x0e\x42\x51\x90\xa1\x6a\x06\x09\x8c\x3d\xdf\xa6\x4c\x97\x75\xac\x58\xe5\x4d\x91\x0a\xf9\x2c\xa8\x8a\xbb\xb6\x64\x36\x39\x53\x79\xf9\xac\x36\x61\xcf\x2d\xad\xab\x95\x7b\xea\xfe\x5f\xe5\x57\x35\xed\x77\xab\x7e\xc7\x4d\xfc\xc5\x71\x47\x87\xae\x4e\x6f\xa0\x34\x30\xe5\x81\xc8\x64\x74\x8d\xc2\x8a\xce\x78\x02\x03\x65\xd6\x13\x2c\x2a\x72\x3d\xa4\x04\x8e\xe8\x46\x4c\x88\x05\x87\x73\x4c\xdd\x07\x98\xe2\x90\xf6\xf8\x4c\xef\x87\x6a\x19\xc1\xe5\xfc\x85\x8f\x4c\x22\x87\x85\x9e\xab\xef\xef\x6c\x3b\xb1\xe7\x9e\x5d\x4f\x1e\x6d\xb9\x7c\xdb\xfe\x31\xbf\xd5\x99\xde\x27\xbd\xf7\x19\x69\xae\x40\x59\x16\x8e\x12\x95\xd0\x01\xc7\xc2\xc0\xa2\x31\xb6\xd4\x90\xa3\x25\xd7\xc2\xc0\x77\x44\x18\xf1\xbe\x4f\x71\xc8\x75\x15\x9b\xe3\x3c\x35\x75\x90\x2c\xf5\xce\xe6\x53\x9d\xc5\xe8\xe8\x07\xe5\x5a\x49\x6e\xbf\x33\xef\x26\x8d\xcf\xdc\x1f\xb9\x5a\x58\xd8\xa4\xc3\x07\xdd\x57\xa1\x57\xd3\x3b\xcd\xe0\x74\x95\x78\x91\x08\x11\x09\xb8\x30\x96\x64\x13\x0a\x7e\x64\xa9\x40\x95\xb1\x15\x4a\x09\x6d\x59\x7e\xe8\xe1\x90\x86\x82\x62\x12\xdd\x60\x55\x89\xa2\x52\x77\x9e\x73\x56\xfe\x4c\x7a\x10\x2c\x1a\x0f\x8e\x16\xa9\x79\x7d\x65\x8d\x25\x2d\x9f\xab\x2c\xf4\xba\x73\xe9\xef\x5c\x7d\xb6\xa3\x4e\xef\x7e\x98\x7d\xe8\x7d\xca\x7b\x4d\xa2\x90\xff\xd7\x43\xdc\xb1\x15\xa0\x6b\xb4\x19\x43\xc8\xda\x3c\xc5\x85\xb6\x2a\x0b\x8c\x6e\x0a\x6a\x4c\x90\xcb\xc7\xd0\x8a\x05\xc0\x4a\xae\x6b\xa4\x58\x23\x33\xa3\xc2\x94\x4f\xa7\x70\x97\x27\xf1\xb3\x4a\x55\xed\xf7\xd3\x73\x33\x32\x5a\x6d\x78\xb5\x74\xbf\x13\x5d\xdb\x0e\x98\x5f\x55\x5b\x46\xb2\x8f\x55\x4a\x69\xb2\xc2\x7a\xae\xa3\x02\x46\x91\x91\x4b\x23\xd3\x8c\x14\x57\x73\x63\x25\x08\x35\xac\x62\x88\x39\xc4\x32\x34\x1d\x51\x14\x4f\xc2\x18\x43\x9b\xb2\xf9\x2c\xa4\x9c\xaa\x17\x5a\x39\x6e\x62\xbd\x11\x77\x20\xff\x7c\xc9\xbe\x1f\xfd\x52\xb6\xea\x8d\x28\xbc\x56\xe0\xfc\x0b\x49\x8d\x96\x93\x16\x57\xac\x9f\xfd\xfd\x15\xa9\x41\x86\xa2\xaa\x4a\x91\x6f\xd8\x2a\x70\x29\x57\x51\x29\x29\xd6\x48\x1c\x07\x5e\xc0\x29\xc4\x25\xbe\x8b\xff\x95\x4b\x1d\x40\x42\x02\x74\xa8\xaa\x26\xb1\x53\x9b\xfd\xc5\x82\x55\x5d\xef\x14\x2f\x6b\x77\xde\x76\x74\xb1\xdc\xac\xf9\xe1\x0b\x2f\xe9\xf8\xf4\xc4\x2e\x3d\x26\x05\xd5\x0b\xf6\xdc\x39\xe8\x40\x9a\x2f\x08\x23\x26\x01\xc4\x8c\x2c\x68\x06\x43\x5b\x6a\x40\x47\x84\x4f\xb0\x63\xb1\xb4\x8d\x54\xac\xcb\xb4\x87\xf8\x84\x55\x04\x68\x73\x44\x48\x54\x44\xb2\x10\x69\xff\xae\x6d\xb9\x3b\x6b\x51\x8f\xd9\x1b\x2a\x7e\xdd\xa5\x1f\xdb\xed\xda\xad\xfb\x73\xb6\x36\x7b\xf5\xcc\xe2\xa1\x0d\x8e\x9c\xbc\x36\xe3\x89\xf4\x52\xcb\x79\x1e\x30\xae\x24\x4b\x22\x61\xad\x50\xf3\x61\xa2\xfa\x89\x1f\xd3\x2e\x71\x02\x41\x90\x28\x4d\xd2\x29\x47\x30\x55\x81\x42\x9a\x22\xfa\x8a\x17\x99\x7e\x16\x64\xb7\xdc\xa7\x9f\x1d\xdf\xe9\xd6\x93\x37\x7f\x2f\xf5\xc7\xaa\x72\x2b\xb7\x6d\xfc\xa4\xc7\xce\xe3\x93\x4b\x76\xbd\xdb\xd3\x0f\x57\xce\x2b\xfc\x6d\xf6\x9b\x9b\xa9\x5b\xc9\xac\x1d\x78\xa2\xe8\x88\xc4\x31\x08\x47\x47\xb6\xa1\x98\x06\x2d\x29\xae\x66\x25\x09\xeb\x29\xaa\x94\x24\x9c\x2b\x38\x11\x1f\x84\x8e\xa3\x60\x96\x4b\x21\xd2\xfb\x67\xd1\xb8\x5b\xe3\x79\xcf\x9e\x5a\xd5\xf6\xe5\x16\xd7\xa6\xfc\xd5\xaa\xc2\xa6\xc9\xc2\x5b\x3b\xd6\x4c\x29\x33\x7a\xd6\x9c\x59\x65\xbb\x67\x7f\x09\x72\xea\x5a\x5c\x03\x22\xed\x00\x93\x86\x0e\x61\x21\x17\x47\x11\x1d\x6a\xa1\xec\x45\x22\x1d\x9b\x2e\xb4\x5d\xd9\x76\x1c\x1a\xf1\x94\x27\x0a\xd8\xd4\x3d\x29\x31\xb3\xc0\xc6\x2c\xff\x61\xe7\x9b\x57\x2e\xce\x29\x6a\x9e\xe9\xf8\xf3\xe8\xda\xe5\x2f\x57\xe9\x74\xf6\x97\x5c\x13\xf4\x72\x99\xe7\x4f\xa2\x91\x2b\x83\x75\x8f\x9c\x0b\x53\x14\xfd\xf8\xc6\xbc\xf1\xd7\x4e\xac\x7a\x78\x67\xc3\xc5\xaf\xaf\x81\xa9\x37\xf6\x8d\x69\x5a\xfb\xf7\x75\x15\x8e\x49\x39\x2a\xd6\x69\x96\xe6\x5a\x12\x31\xa6\xcb\x18\x86\xa0\x43\x25\xe6\x23\x31\x60\x62\x9b\xe5\x28\x9f\x25\x1e\xc7\x44\x6c\x20\xaa\x88\x92\x4d\x5e\xd3\x74\x39\x76\x45\x22\x08\x49\x0a\x71\x05\xfb\xe2\xfe\x06\x4b\xde\xdf\x57\xf1\x97\x69\xb9\x3e\x84\xad\x4f\x1f\xec\x73\x19\x95\xcc\xfc\x76\xc1\xbc\xb7\x5f\x5a\x57\xa5\x6f\xb5\xc6\x5b\xd3\x2c\x12\x84\xd9\xc8\xd2\x38\xde\x4c\xa8\x80\x57\x85\x80\x8d\x24\x84\x12\x62\xcb\x3c\x8a\x3c\x59\x77\x68\x11\x59\x89\x2f\x9a\x3c\xad\x89\xaa\xa2\xaa\xc0\xc3\x59\x00\x0d\xbf\x18\x9f\xb9\xa7\x36\x77\xe3\x3c\xf8\xdb\x1c\x54\x26\x73\x47\xbf\x25\xc7\x6b\x8c\xe5\x46\x0f\x3d\x32\xaf\xf2\xba\x22\xf6\x28\xa3\xfb\x23\xe7\x42\x0f\xe3\x4f\x9f\x2f\x71\x6f\xc7\x83\x6a\x39\xcb\x1c\xd9\x91\xef\x74\xf7\xed\x79\x16\x0d\x29\x49\xbe\x7e\x7a\x55\xa3\xcc\x56\x4e\xef\xf4\xae\x98\xe5\xa0\x9a\xb0\xc0\x57\x09\x64\x13\x2e\xb0\x94\x00\xf1\x74\x02\x03\x0e\x1a\x24\xe2\x20\xed\xc5\xb1\x4d\xeb\xa1\x67\x50\xaa\x4c\x12\x37\x0e\x5c\x85\x4a\xe1\x2f\xc3\xbe\x7a\x7d\xde\xef\x45\x06\xd6\x19\x57\xc7\x2a\x37\x2e\x94\xc7\xee\x3c\x96\xab\x6c\x1e\x38\x7c\xc9\xb8\x89\xab\x86\xa1\x6a\xf7\xb2\x8f\x8d\x4c\x79\x2e\x1a\x1d\x20\x1b\x6b\x89\xa4\xea\x81\x6b\x3a\xbe\x22\x60\x05\x5b\x02\x4c\x64\x5a\x0f\xe4\x40\x0f\x21\x17\xd3\x1e\xcb\x84\xac\x03\x44\xd7\xe7\x6c\x14\x67\x71\x2e\x3f\x36\x9d\x56\xb2\xe8\xae\xf1\xf9\x6b\xb6\x1c\x89\xbb\xcc\xa8\x3e\xa0\xc2\xb4\xfa\xc5\x9f\xb7\xb6\x4e\x38\x4f\x9e\x3b\x88\xbe\xca\x51\xeb\xd1\xff\xae\x9d\x67\xc2\x5f\x2f\x37\xff\x62\xe4\xa0\x8e\x73\x9e\x78\x6d\x37\x1d\xfd\xd5\xa1\x75\xfd\x69\xcb\x6e\x31\xf3\xc9\x5f\xc1\x33\xf7\x4e\x5e\x7a\x14\x9b\x50\x23\x67\xdd\xc2\xfe\xd2\x81\x23\xe5\xd1\x8d\x27\xb5\xfa\xec\xfe\xb9\x2a\xed\x4e\xf4\x2e\xf4\xe7\x9f\x57\x6a\x8c\xe8\x65\x95\xeb\xf5\x5e\x9a\x61\x5c\x81\xa6\x41\x22\x4b\xc8\x96\xb8\x28\x32\x5d\xd6\x60\x22\x29\x70\xa5\x88\x15\x44\x95\x33\x80\x40\x23\x60\xdb\x21\x4b\x0c\x35\x8a\x0d\xc3\x12\x0d\x3d\x75\xed\xd4\x3c\xd9\x5f\x72\x7d\x37\xf7\xf4\x87\xdd\xda\xae\x53\x57\x7f\xd3\x74\xd3\x8b\x39\xf6\xf4\x1a\x35\xb8\xd0\x8d\x8b\x8b\x4a\xe4\x9c\x9c\xef\xf9\x34\x7b\x98\x4e\x49\xc8\xf2\x51\xa4\x33\x2c\xe5\xc5\xac\x26\x62\x91\xc2\x51\xcc\x07\xb4\xe6\xb0\xba\x46\xfb\x12\xe4\x29\x9a\xd2\x13\x18\x1b\xbc\xed\x05\x41\x0a\xc9\xdb\x97\x8c\xa3\xb9\x9c\x88\x7f\x7f\xd7\xa1\x0d\xed\x06\x0f\xfa\xb6\xcd\xc2\x9b\x6d\x16\x0f\x7f\x6e\xd8\xb0\x27\x9e\x69\xd4\xec\xc3\x12\xf7\x07\xa5\x99\x86\xab\x69\x8e\xed\xe8\x36\x6b\x2a\x72\x02\x43\x88\x69\x5f\x63\x54\x89\x67\xed\xc4\xa4\x6c\x07\x70\x56\xc4\xa1\x80\xf6\x90\x45\x22\x3e\xa4\x65\xec\xf3\xa9\xd9\x3b\xaf\x7d\xfd\x73\xe3\x5f\x87\x8c\x39\x5e\x2d\x73\x7d\xbd\x01\x5f\x1d\x2a\x59\x3e\x5f\xd5\x2e\x65\x2b\x4d\x90\x33\x1d\x75\x70\x9d\x99\xeb\xdf\x4c\xb3\x0c\xa6\xc3\x19\x94\x07\xa0\x4c\x79\xbc\x0b\x02\x60\x1b\x5a\x20\x31\x1e\xab\x4a\xb6\xad\xdb\x42\x04\x58\xc9\x32\x3d\x4f\x57\x54\x81\xc6\x0c\xed\xca\x7c\x0a\x59\x55\xbd\xf2\x91\x1a\x20\xf7\xdb\x9b\x26\x4c\xe9\x7f\x75\xf3\xfc\xdd\x2d\x17\x8d\x78\x78\x65\x56\xf5\xc2\xa4\xfb\x80\x99\xd3\x8a\x2c\x13\xd2\xbc\x28\xd8\x35\x3c\x01\x1b\x96\x8d\x43\xac\x53\x72\xa2\x40\xd7\xb7\x3c\x16\xc6\x54\xc8\x11\x49\xf2\x21\xed\x3b\x8c\xc0\x00\x6c\xbb\x7a\x00\x43\x45\xe2\x85\x14\x2b\xc6\xb7\x38\x65\xae\x2d\x1c\x50\xff\x93\xd2\x9f\x1f\x6e\x93\xf9\xe4\x8b\x73\x8a\xe6\x2c\xbb\xb3\x63\xb5\x43\x77\x8f\xd5\x2d\x33\xba\xd5\xcc\x36\xe7\xd2\x7b\x9f\xd5\xc4\x67\x03\xc9\xb3\x10\x36\x88\x83\x78\x46\xe4\x25\x5d\x75\xe8\x00\xd8\x62\x22\x01\xc1\x72\x13\x03\x50\x2c\xa7\x60\x18\x99\x14\xc7\x1a\x09\x8d\xb2\x88\x4c\x53\x86\x2c\x58\xda\x66\x68\xb7\xb6\x8d\x97\xe7\xfc\xfd\x9e\xf6\x69\x6d\x54\xfc\xc9\x0e\x43\xfe\xae\x1e\x9d\x5b\xbb\xed\xba\x32\x89\xb4\x7a\xc4\x69\xfb\x0c\x87\x9f\x34\xea\x7e\xe0\xcf\x3b\xab\x5e\xaa\xb8\x35\x47\xa1\x02\x9e\xb5\x7a\xed\xfa\xf1\xaf\xdc\x7e\xf1\xe4\xdd\xf7\x7f\x1d\x32\x34\xbd\x32\x49\x3c\xaf\x70\xaa\x2a\x20\xa4\x52\xb4\xe6\x98\x8a\x4f\x3b\xbe\xc8\x1b\x84\x8b\x22\xca\x41\xbe\x8f\x44\x59\x06\xbe\x27\x28\x3e\xab\x7b\x32\xed\x68\x6a\xaa\x1d\x19\xda\x77\xf5\xf7\xb4\x04\x1f\x74\x5a\xf1\x7b\xa3\x97\xdf\x68\x57\x71\x1f\x7e\xf2\x99\x1d\x73\x40\x99\xea\x03\x6f\x1c\x9e\xf5\x8a\x5f\x32\xfb\xab\xdf\x53\xcf\x82\x63\xe4\x99\x12\x0f\x14\x2f\xd6\x13\xdf\xe4\x30\x8e\x78\x64\x9a\x8c\xc6\x27\x76\xc0\x2b\x2a\xe7\x61\x4b\xd2\x68\x41\x25\x88\xe5\x45\x9d\x8a\x69\x3e\x35\xce\xbb\xfc\xd5\xa7\x32\xbc\xb7\x79\x25\x2e\x1f\xcd\x9f\x39\xbe\x7e\x91\x8e\xdd\xbe\xef\x54\xe2\xe7\x91\xb5\xd9\x70\xed\xb4\x8d\xbd\xdf\xdb\x98\x66\x3c\xb1\x68\x44\x12\x30\xdc\x24\xe2\x04\xe2\x88\x51\x20\xe9\x2a\x4c\xb8\x90\xb5\x29\x49\xf6\x42\x95\xa7\x4c\x8d\xb0\x21\xab\x3a\x8c\x01\x10\xd2\x22\x4a\x78\xfc\x4b\x4f\xbb\x38\xb9\xc8\xfe\x79\x17\xf4\xcf\x77\x8e\x98\x95\x59\x43\xff\x61\x60\xcd\x11\x17\x5e\x5a\x53\x72\x7e\xcf\xa7\x33\xb8\x87\xbb\xfe\x34\xd2\x6b\x72\xc2\xba\x26\x36\x03\x92\x08\x0a\xe7\xc4\x26\xa5\x7a\xbc\xa5\x53\xa6\x41\xdb\xbe\x26\xc3\x20\x32\x69\xd9\x70\x55\xc5\xf0\x12\x81\xa5\x5d\x9d\x25\x74\x16\x00\xd0\xb1\x27\xbe\x6f\x54\xe8\xa7\xf2\x63\xbe\x6b\xff\xd2\x2b\xa7\xcf\x4e\xdb\x90\xf7\x68\xae\x49\x3f\x2e\x67\xaa\x9d\x6f\x55\x67\xff\x9a\x6e\x7e\xb7\x34\x23\x29\x63\x9d\x92\x23\x9f\xd6\x48\x94\x00\xc8\x79\x9a\x8e\xcc\x40\xf1\x4d\xcb\x61\xe4\x88\x93\x5d\x57\x8f\x29\xc5\x92\x25\x4d\x85\x30\x20\x91\x61\xff\x17\x0c\xfa\x91\xa8\xde\xe4\xd6\x9f\x93\x0f\x8b\xe2\x8c\x5a\x3b\x8c\x89\x07\xab\x92\x5a\x4d\x5e\x1f\xbd\xf9\x75\xfe\xca\x8d\x55\x97\x18\xba\xfd\xaf\xbd\xb2\x7f\xaf\x53\xf3\xa4\x88\x12\x03\xc4\x13\xcf\xa6\x75\x5d\x22\x2a\x47\x58\xde\xc1\x01\x07\x12\x03\x08\x1e\x66\x1d\xd5\xf6\x74\x0b\x2b\x20\x76\x0d\xd3\x30\x30\xf2\x53\xf4\x1e\x8e\xf9\xc9\x33\x66\xdb\xa5\xad\xd0\x52\x67\xc5\xb1\x65\x9b\x8f\xfd\x7c\xe3\x87\xcc\xef\x87\xdf\x5a\x78\xb8\x8b\x36\x79\xf9\xf8\xb1\xc7\xd3\x8c\xa2\x44\x44\xe7\xa9\xc0\xe5\x2c\xac\x59\x8e\x6e\xc8\x96\x0c\x31\xe3\xb8\x96\x88\x78\xce\x03\xb1\x2c\x29\xc0\x21\xc8\x05\x8e\xea\xf9\x0a\x11\x8d\x20\x45\x3f\xed\xe1\x46\xe6\xfe\x8b\xc2\xbd\x72\x03\x3a\x5c\xa2\x5f\x19\xd8\x71\xc2\x96\x1e\xc5\x8e\xb6\xd8\x72\x74\xc6\x5f\xb7\xe7\xce\xbb\x75\x7b\x77\x7a\xbb\xf7\x1c\x15\x22\xc1\x83\xba\xa1\x5a\x11\xf4\x1d\x09\x19\xb4\x63\xf2\xb1\xa4\x0b\x12\x31\x38\x0e\xdb\xae\xc1\x71\x5c\x80\x79\xe4\x42\x47\x11\x65\x87\xa1\xb9\x2c\xa2\xfa\x76\x78\x65\xd3\xa9\x1b\xbf\x8a\x0d\xef\x5d\x5f\x71\xf0\xec\xfd\xf7\x8f\xb1\x67\x66\x67\x34\x38\xd4\xb5\x6e\xb7\xd2\x7f\xbd\xff\x15\xfa\xfa\x11\x0f\x78\x6a\xe3\x87\xa7\x3a\xde\x99\x34\x77\xb0\xaa\x6f\x9f\x5a\xb7\x0d\xdb\x7b\xde\x8f\x2f\xf4\x7b\xba\x7d\x29\xfd\xe9\x61\x77\x8f\x2c\xbd\x5d\x2f\xbd\x3f\x92\x21\xbe\x02\x20\xf4\x22\xc5\x45\x9e\x1a\x68\x2c\xad\x04\xac\x09\x4c\x41\x0f\x63\x68\xcb\x1e\x56\x80\xab\x4b\xae\xca\x27\x51\x04\x68\xd1\x85\x5a\x56\x8f\x9d\xef\x1b\x16\xcf\xfb\x65\x03\x65\xf3\xba\x8f\xc3\x91\x73\x9b\xac\x6f\xc9\xbf\x2a\x62\x92\x6f\x76\x93\xbd\xdf\x77\x37\xbe\xd8\xff\xd4\xa3\x65\x72\xb5\x8d\x99\xf5\xde\xaa\x73\xa3\xf1\xa9\xc6\x5c\xb7\x8d\x33\x56\xcc\x69\xdd\xf9\xcf\x3a\x5f\x83\xa5\xbf\x1d\x1b\xf8\x4e\xa1\x6f\x06\x3d\xe0\xd2\xcc\x42\xe1\x05\x4e\x54\x62\x95\xf2\x10\x03\x5d\x40\x20\xa7\x2a\x4a\x22\xa8\xac\x69\xc5\x94\x21\x39\xb1\xe3\x39\x89\x85\xd5\xd8\x93\x0d\x3a\x0a\x7d\x2b\x21\xa9\xf3\xc0\xd5\xf1\x39\x67\xcf\xa9\x92\xb1\x6a\x6e\x0b\xf9\x70\x9f\xf5\xcd\xf2\x52\x6f\xbf\x79\xbd\x48\x91\x0f\xc9\xb8\xe3\xdb\xfa\x75\xf4\xbf\xaa\x99\x66\xdd\x21\xc0\x00\x98\x04\xb6\x91\x88\x26\xe4\x39\x4e\xc0\x36\x0e\x3c\x8a\xd8\x9c\xef\xd3\x6a\xc2\x09\x5a\xe0\x5b\x84\x61\xa4\x58\xe1\x39\xd5\x70\x12\x5d\x4c\x41\x72\x07\x0d\x7f\xef\xb2\xfb\xad\x6f\xea\xe4\x3b\xb1\x64\xcd\xae\x02\xdb\x1e\x5a\x9f\xad\x95\xbe\x9c\x5e\xd1\xa9\xd6\xeb\xce\xa2\x89\xf7\x5a\xa5\x37\x32\x29\x21\x67\xb3\x89\x4c\x44\x44\xc9\x0a\xad\x9b\xb2\x26\x13\x5b\x97\xd8\x04\xf9\x48\x12\x24\x9c\xd0\x0c\x4b\x19\x90\x70\x7e\x60\xb0\x91\x67\x4b\x5a\x16\x5b\xf1\x2b\x9d\x6a\x0d\x5b\xbd\x60\xbf\xff\xed\xd8\x60\x93\xd0\xbf\xa2\x3b\xee\x6c\xe7\xd7\x6f\xb7\x98\xd7\x4c\x59\x5c\x7f\xe4\xb2\x0f\x87\x56\x4f\x6f\x74\x32\x65\x86\xf8\x2e\xe3\xb1\x32\x11\x71\x10\x12\xa4\x00\x21\x8a\xa1\x4d\x2c\xc5\x97\x23\xca\x74\x6c\x29\xf0\x3c\x1b\x3a\x98\x09\x6c\xc6\x60\x03\xc4\x3e\x1e\x9d\x86\xac\x38\xf4\x7d\x46\x55\xd0\xe2\x62\xfb\xc5\xc6\x85\xef\x87\xb6\x6c\xf2\x46\xd1\x1f\x3a\x2f\x3b\x5b\x66\xf1\x9a\x19\xab\x72\xd6\xbf\xfa\x67\x7a\xbf\xb4\x48\x0c\xa0\x2a\xba\x15\x3b\x06\xc5\x48\x94\x87\x55\xcf\x70\x08\x95\xa8\xa1\xe2\x18\x8c\xc7\x48\x48\x45\xac\x6f\x26\x62\xc2\x81\xd8\x65\x6d\xc6\xe3\x52\xb7\x17\xdb\x1c\x5a\x3f\xf7\xb7\x17\x2b\x4f\x7d\x77\x49\xd7\xd9\x9d\xee\x5c\xe8\xcd\xbd\xd7\x7b\xdf\xa4\x65\xb3\xf6\x64\x54\xec\x33\x6e\x82\x3f\x27\xbd\x1b\xf0\x38\x2a\xb1\x19\xda\xf7\x05\x46\x37\x51\x22\x21\xac\xb8\x3c\x4d\x1c\x45\x8e\x44\x5e\xb0\x25\xd1\x48\x78\x6c\x78\x0a\x87\x29\x37\x08\x9c\x04\x3b\x21\x92\x52\x17\x0a\x1d\xe8\x82\x35\x6a\xae\x3d\x50\xe4\xad\x3b\x53\x9b\xb6\xd8\x5a\x62\xc7\x0b\xeb\xbe\x9c\xbe\xfe\x6d\xd8\xe5\xed\x49\xf1\xdf\xdb\xd9\xfc\x3f\xa7\xd7\x15\x63\x0e\xeb\x10\xfa\x9a\xe5\x40\x68\xc5\x8e\xc2\xf1\x0c\xe3\x86\x31\x8f\x03\x8c\x19\x60\x26\xa2\x99\xb0\x61\x22\xda\x3c\x71\x31\x01\xb1\x6f\xff\x5b\x23\xf4\x11\xf4\xf3\x3f\x75\xe9\x32\xda\x4c\xce\x91\xa3\xf2\xa3\xe8\x67\x69\xc3\x11\x73\xf1\xf9\x07\x87\xfb\xe7\x3d\x31\xb6\x4d\xab\x03\x9d\x37\xce\xcc\xb7\x1d\x3c\xbf\x70\x56\xcd\x26\x07\xbd\x5c\xab\xf7\xce\x4d\xef\xaf\x4c\x98\x84\x8e\x68\x00\x5d\x9f\x98\xbc\x08\x02\x0c\x74\x09\x72\xb4\x2f\x48\x3c\x14\x34\x12\x39\x0e\x8f\x4d\x2a\x0c\x44\x45\xa4\x90\xaa\xb9\x7a\x56\x4a\xf1\xd3\x87\x8c\x3b\xf9\xf4\x77\x6d\x97\x54\x28\x59\x7f\xc4\x0f\x9d\x66\xff\x9a\x4f\x99\x9b\xd1\xe5\x09\x6b\xd1\xb0\x32\x5f\xd6\xf8\xa9\x51\xa5\x8a\xe9\xbd\x53\x34\x61\x3c\x49\x8d\xb4\x80\x89\x1c\x3b\xf1\x81\x1b\xc8\x0e\x47\xa8\xc4\xb7\xb1\x47\x50\x64\xc7\x9e\xed\x21\x93\x81\x02\x0b\xf4\x18\x41\x9f\x15\x92\xd4\x77\x6a\xcf\x77\xf7\x6e\xac\x6e\x5a\xfd\xfa\x44\x7f\x4c\xb5\x2f\xf1\x85\x43\x65\x4f\xb4\x3e\x31\xed\x6c\x91\x3f\x5f\x38\x29\x7f\x52\xee\xad\xc3\x30\xbd\xc5\xa7\x67\x7b\x8a\xcb\xe9\x40\x48\x28\xd1\x92\x0d\x8b\xe2\x04\xc3\x64\x04\x2a\xe6\x81\x81\x12\x1c\x78\xb2\xee\xb3\x74\x02\x12\x21\x76\xe5\x40\x8a\xcc\xc4\x4b\x8d\x0e\x28\x3d\x22\xbf\x79\xfc\xfa\x86\x9f\xed\x22\xca\x13\xd5\xee\xd7\x6d\xbf\xe8\x16\x53\x27\xd9\xf8\xf1\xe7\xa5\xf7\x55\xbf\x75\xa6\x43\xc3\xcd\xe9\xad\x18\x0c\xc3\xf2\xa3\x20\xb0\xa2\x00\x47\x58\x31\x90\x23\x98\x8a\x03\x9c\x88\x76\x05\x1a\xc6\x14\x47\xa0\x18\x53\x06\x95\x30\x8e\xac\x30\xc4\xd2\x15\x33\x0b\xe9\xe8\x95\x53\x0a\xad\xec\x82\x2f\x8c\xae\x7f\x7f\xd4\x94\xd1\x4f\xb7\xce\xf7\x84\xbb\xf7\xf5\xd9\xa5\x87\x35\x3a\x7b\xf5\xe5\x12\xdd\x8c\xde\x69\xc6\x9a\xdb\xbe\x46\xf9\xb6\x17\xf9\xbe\x44\x2c\xc9\x0f\x3d\x10\xc9\xa6\x29\x62\x83\x62\x7d\xa8\x43\x97\x70\x9c\x05\x31\xa3\xda\x1e\xcf\x13\xc6\x03\x3c\xfa\x4f\xcd\xfc\x3f\xe8\xe7\x7f\xea\xe7\x66\xb4\x19\xf6\x7c\xc5\xff\xb5\xa2\x22\xef\x4b\x73\xdf\x7d\x70\x6b\xc7\x52\xe1\xf8\xf9\xc5\xc7\x0e\xe0\xa7\xf7\xed\xce\x55\x7d\xc2\x0f\x0d\x57\x7e\xfd\xc4\xdb\xb9\x85\xad\x3f\x66\x5f\xfa\x24\x35\x50\x46\x32\x22\xde\x87\x7e\xe4\x3b\x8e\x8e\x39\x9a\xb0\x8a\x13\x13\x24\x39\x4e\x20\x0a\xba\xe5\x11\x4f\xf0\x35\x45\x16\xb1\xca\x28\x9e\xe3\x19\x21\xcf\xa4\xf6\xe0\xd5\x03\x8a\x7c\x5e\x72\xd0\x27\xf3\x8e\x65\x3e\x7b\xba\x58\xff\x05\x27\x4e\x7c\xdf\xe0\xe4\x92\xfd\x0b\xf7\xae\xbd\x38\xa4\xc8\xa2\x81\x9f\x46\xe9\xf5\x60\x46\x09\x63\xa0\xe2\x10\x46\xd8\x64\x55\xd9\x89\x60\x44\x49\x49\x44\xd3\x0e\xe1\x62\x83\x46\xb6\xaa\xf8\xae\xee\x53\x2e\x43\x29\x80\x83\xba\x2b\x6a\xa9\x3d\x78\xd2\xf1\xcc\x3b\x2b\x86\xe4\xd2\xf3\x0d\x5c\x3a\x77\xeb\xe4\xd2\xaf\x66\xd2\xc3\xbd\xbe\x1f\x5d\xfe\x71\xe8\xf9\xf9\x55\xe7\x34\xcc\xbc\x92\x66\xb9\x42\x39\x8a\x04\xc5\xc6\x91\x13\xd1\xa6\x60\x23\x2a\xe6\x58\x1e\x01\x08\x18\xec\x85\xb1\x83\x68\x1d\x43\x5a\x66\x79\x14\xb3\xaa\x00\x4d\x55\x45\x59\xf0\x17\x84\x45\x6f\xed\x9d\xb8\xa6\xd6\x92\x46\x3d\xb6\x7e\x75\x53\x5f\x7b\xb4\x7e\x87\xb6\x5d\x73\x8d\xdd\x7d\x1c\x1d\xa2\xdb\x17\x3b\xf7\x6a\xf6\xb1\xe6\xa9\xb7\xd0\x8a\xba\xe4\xd8\x52\x8c\xe9\xd0\x63\x39\x16\x32\x1c\x87\xa0\x46\xd3\x00\x78\x21\x87\x12\xc4\xb9\xb4\x6b\x89\xa2\x4c\x41\x03\x85\xbc\x47\x14\xdf\x7c\x0c\xe9\xf6\x4f\x2d\xf4\x8c\xd6\x15\x8b\x3d\xf9\xa8\x27\x0c\xbd\xd1\xad\xfc\x07\x9f\xec\x7f\x79\x7e\x65\xa6\x89\x9e\x6c\x77\x5e\x6b\x4c\xfd\xbe\xac\xe1\x33\x45\xa2\x3e\x87\x36\xbf\xf0\xe1\xc6\xec\xe3\x4e\x52\x2f\x6b\x11\x64\x87\xc5\x1c\x80\x86\xe5\x09\xa2\x08\x91\x8e\x58\x4e\xa5\x68\x05\xd9\x36\xd4\x64\x1f\x6a\x8c\x28\x04\x9a\xe7\x0b\xae\x4b\xb3\x1c\x67\xa3\x2c\x00\xf5\xd6\x5f\x0d\x7a\x4d\x14\xef\x50\x97\x1f\x2c\x6c\xf8\xf1\x8f\x1f\xde\x6a\x5b\xb6\x5a\xa7\xa3\xcb\xbf\xdd\xf1\xd6\x72\x6e\xf4\x8e\xaf\xd7\xd5\x49\x37\xee\x44\xa3\x34\x42\xc5\x36\xaf\x60\xd3\x4a\x78\xd1\x82\x9c\xe1\x42\xdf\x8b\x78\x81\x82\x8e\x91\x98\xb1\x90\x58\x81\x60\xfa\x02\x4b\x02\x56\xb1\xf4\x2c\xe8\x0b\x83\x4a\x8c\xec\x51\xef\xee\xa6\x67\x3f\xee\x3f\xa9\xec\xc3\x7e\xdb\x36\x5d\x2d\xf2\x64\xd1\x7c\x5f\xd5\x7e\x77\xf7\xc8\xe2\x43\xf3\x8c\xad\x97\x7d\xd5\xd8\x94\x5f\x1b\x18\x09\x67\x89\x1e\xab\xb9\x38\x09\x14\xc3\x95\x30\x08\xe9\x80\xb5\xbd\xd8\x0c\x2d\xd1\xf3\x78\xcd\x25\x7c\x94\x60\x41\x74\x24\x9b\x33\xa1\xf4\x6f\x3d\xae\xc7\xbf\x76\xf1\x09\x87\x86\xc7\x9f\xb5\x93\x87\xcc\x79\x71\xd7\xea\xcd\xab\xdf\x72\x5f\xae\xf7\x51\x3c\xe6\x39\xfb\x99\x0d\xd6\xf7\xa5\xae\x5e\xc9\xbe\x76\x45\xca\xaf\xad\xab\x06\xc0\x11\xed\x01\x59\xb7\x2c\x97\xe5\x6c\x01\xd9\x6c\xe8\x59\x40\x62\x23\x23\x44\xaa\x9b\xb8\x04\xe8\xbe\x01\x74\x5d\xa3\x5c\x03\x18\xe8\x3f\x82\xe4\xff\x93\x14\xfe\x69\x3c\x94\xd1\x26\x4f\xe9\x62\xff\x2b\x29\x94\x02\x17\x5a\x0c\xf8\xa8\x45\xa9\xb9\x9d\x2b\x07\x93\x2f\x2e\xff\xb1\xc8\xe8\x9a\x6f\xdd\x6b\xf6\x67\xa1\xf6\x0b\x0b\x0f\x2c\xd9\xd4\x59\x9c\xee\x30\xc5\x31\x16\x00\x06\x85\xbd\x28\xf0\x02\x4a\xd6\x75\x18\x32\x2a\x8a\x42\x1f\x53\x0e\x51\x22\x6c\xfb\x1c\xc3\xd8\xbe\x2c\xf2\x0a\x82\x2a\x4c\xbc\xd4\x61\xea\x04\xe8\x50\x6a\xcf\x1f\xd5\xde\xf8\x65\xff\xa1\xeb\x23\x7b\x76\xae\xdb\xfa\xdd\x5d\xfb\x76\x96\x55\x6e\x4c\x1a\xd9\xa0\x7c\xae\x22\xdd\xb3\x8f\x55\xcd\xaa\xe6\x16\x10\xa5\xb0\xb6\xa3\xb9\x82\xa7\xea\x84\x53\x79\x87\x75\x99\x50\xf1\x68\x44\xc9\x9e\x2e\x20\x9f\xf8\xae\x11\x1b\x8c\x2d\x12\x8d\x85\x24\x0b\xfe\xc2\xc0\x3d\x1d\xf7\xf2\xaf\xce\xf9\xe2\x47\xb7\x6d\x6d\xa3\x76\xe5\xe7\x82\x5e\xcf\x17\x79\xf5\x68\x51\x3c\xe7\xf3\x81\xfb\x4b\x55\xef\xd5\x3d\xcd\xf0\x67\x1c\x12\x64\x08\x8e\x0f\x91\x40\x87\x86\x91\x38\x8a\x45\x34\x51\x14\xcc\x18\xe3\x10\x98\x14\xc7\x2a\xbe\x29\xea\x71\x28\x69\xd8\x8d\xbc\x00\x05\xa9\xcd\xa6\x0f\xd6\x5b\x78\xda\x7a\x9d\xbe\x36\xee\xe6\x45\x07\x34\xba\x7c\xdd\x73\xda\xb7\xff\x36\xcf\xbc\x9d\x6a\xa9\x82\x93\xd1\xf9\x72\x69\xd6\xe6\x77\x78\xa2\x03\xd9\x81\x54\x12\x91\xd8\x95\x7d\xd5\xb6\x7d\x4b\xd7\x20\xc7\xf0\x26\x0b\x13\x2b\x10\xfd\x58\x73\x5d\x11\x72\x9a\xe8\x06\xba\x2b\xfc\xe7\x09\xfc\x3f\x2f\x9c\x7f\x9a\x5e\x64\xb4\xc9\x59\xac\x7a\x8b\x47\x5f\x38\xef\x24\xcf\x57\x5b\xdb\x25\x83\x04\x97\xcb\x14\x7f\xc5\xd5\xcb\x4f\x18\xe7\x2f\xaf\xe5\xef\x2c\x59\x67\xe6\x83\x31\x4b\x17\x8d\x3a\x91\xde\x2a\xd0\xb3\x10\x10\x59\xde\xf5\x31\xe6\x65\x84\x1d\x84\x62\x45\x04\x82\xc9\xa9\xbe\x27\x20\x5a\x90\x25\x49\xb3\x6d\x95\x11\x24\x49\x91\x1c\x26\x80\x5a\x98\xfa\x70\x7a\xe5\xdd\xbe\xbd\xea\xc8\xbc\x4e\x81\x92\x2d\xce\x77\x68\x96\xef\xe2\xf7\x95\x86\xd0\xcb\x5b\x6f\x0e\x67\xbc\x73\x6b\xef\xe2\x72\xd7\xd2\x9c\xb1\x75\xc9\x03\xae\xa1\x45\x09\x1f\x31\x4c\x14\x6b\xb6\xa0\xc5\xaa\xa7\xb3\x02\xf6\x19\x9f\xf5\x02\x14\x5a\xa6\x05\x7c\x55\x89\xb1\xa5\xda\x3a\x14\x34\x98\x3a\x2b\xf4\xae\xc9\x5e\xe8\x79\xa0\xde\xb1\x93\xd6\xe1\xb1\xdb\xc1\xfb\xd3\x87\xcc\x3a\x3b\x7a\xc7\x91\x19\x95\x97\x8e\x7b\x7d\xd2\xb5\x37\xfb\x64\xdf\x15\x52\x66\x85\x44\x53\xcd\xd8\xa7\x64\xcf\x17\x38\x59\x92\x78\xc4\x12\x85\x41\x2c\x70\xa0\xae\x9b\x16\xb1\x90\xe6\x33\x08\x59\x86\x13\x24\x3e\x10\x74\xdf\xce\x6a\xcb\x4c\xeb\x0f\x9e\x2e\xbd\x69\xf2\xdb\xeb\x6f\x1e\x7e\x3e\x9e\x54\x98\xef\xd6\xe8\xe0\x75\xba\x41\xce\xe7\x6e\xee\x38\xbd\x5d\x29\x85\x1a\x35\x48\xaf\x2b\x08\x24\x60\x25\x20\x86\xd0\x32\x03\xa2\xfb\x98\x15\x39\xcd\x97\x63\x26\x66\x34\xc5\x4f\xb8\x44\xd4\xa0\xcb\x62\x17\x84\xbe\xca\x44\xa2\x2a\x0b\x7e\x16\xfc\xce\x89\xf7\xf8\xe2\x47\x6e\x57\x14\xeb\xf5\xbb\x5b\xb9\xca\x9b\x53\xd6\xae\x6c\x69\x1f\x1a\xbd\xac\xe0\xb6\x23\x33\x2b\xdb\xa5\xaa\x96\xc9\xfe\x14\x32\x35\xfe\xd3\xe0\x88\x20\xcb\x98\x09\x22\x27\xa1\x2c\x56\x11\x5d\xdb\x60\x14\x33\x80\x1c\x11\x5c\xc5\xf5\x45\x8b\x8f\x2c\x4d\xc5\x1a\x65\x63\xd9\x12\x35\x22\x3c\xf6\xc2\xf9\xa7\x4e\x75\x46\x9b\x82\x39\x72\xfd\x2f\x7e\xe7\xed\xd6\x63\x5b\xff\x30\x5f\x5f\x7f\xf3\xa9\x0f\x9e\xbf\xf1\xee\x98\x6a\x35\xf5\xb7\x9e\x7e\xba\x42\xcf\x7e\xd1\xd5\x4b\x38\xe7\xb2\x82\x63\xd2\xdc\xaa\x8b\x24\x5d\x06\xb2\xef\x5b\x88\x0a\x45\x83\x91\x42\x04\x55\xa2\x87\xb4\x1c\x02\x35\xe4\x19\x20\xf9\x5c\x60\x60\x09\xda\x7c\xac\x78\xa2\x06\xa8\x2c\x0a\xa4\xbf\xde\x1f\x32\x62\xd6\xa1\xf6\x77\x7b\x32\xb7\xbb\xcd\x2e\xde\xe4\x72\x0b\xff\x78\xc1\x0d\xec\xb6\xf1\x57\xf2\x7d\x37\x6d\xd2\x3b\x0f\xb2\xbf\x02\x28\x35\x05\x09\x60\x23\xe1\x38\x3d\xf2\x62\x83\x22\x36\x1d\x07\x81\xed\xe9\x72\xe8\x07\x89\xa4\xeb\xba\xa2\xf9\x09\x89\xcd\x40\x0e\x78\x3e\x4c\x6c\x3f\x16\xbd\x2c\x34\x3b\xce\x57\x88\x4a\x3f\xdf\x8d\xd9\x1f\x8f\xb0\xde\x1b\x5f\xf7\xe0\xcd\x9c\xb9\xbf\x89\x7f\xb9\xdc\xac\xe4\x1b\x3f\x94\xa8\x10\x1c\x1f\x30\x34\xcd\xaf\x66\x5b\xa2\x6c\x9d\x4f\x94\x38\x91\x34\x49\xf7\x29\x2a\xf4\x91\xaf\xc9\x86\x28\xc6\x8e\xa3\x79\x81\xee\x2b\xb1\x14\xc4\x94\x80\x68\xce\x95\x98\xff\x0f\xa3\xf6\x78\xbc\x8c\xfb\xbc\xb0\x69\xf3\xc5\xbf\x77\xb4\xcf\xd1\xe8\x2a\xf8\xeb\x95\x22\x0f\xbe\xae\x5b\x6d\x76\xb9\x82\xdb\x4f\xf0\x93\xf8\x5f\xb7\x57\xf9\x25\xcd\x4a\x59\x2e\x2f\x45\x12\x0f\x58\x19\x3a\x8c\x14\xda\x24\x31\x3c\x80\x45\x95\x42\x3e\xb0\x24\x29\x10\x6d\x41\xa5\x05\x28\xe9\x0c\x01\xbe\xe1\x46\x81\xf1\x38\xab\xed\x9f\xe6\x19\x19\xad\x4b\xe7\x18\xf1\xa8\x27\xec\xf9\xe1\xdc\x98\x92\xca\xc8\x16\xe7\x32\xbd\x5b\x07\x8e\xde\x7b\xa7\x52\x95\x4c\x89\x0c\x75\x3e\xba\xfb\x54\xef\xdf\x0f\x37\xd5\xd2\x2c\x03\xc3\x92\x90\x96\x28\x8b\xd5\x30\xd6\x18\x56\x26\x3e\x23\xfa\x3c\x0f\x02\x96\xa6\x89\xe0\x39\xa6\x15\xf0\xb2\xef\x79\x30\x14\x62\x4d\x95\x05\xd3\x33\xb3\xb8\x52\xeb\x33\xe7\x4c\x3f\x74\x32\xef\xae\x3e\xe1\x85\x2b\xa5\x0f\x76\xc8\xd7\xfd\xcf\xc1\xab\xf3\xcd\xde\xd9\xe9\xfb\x2d\x83\x0a\x5e\x78\xe5\x48\x66\x7a\xcd\x96\x1c\xdf\xd0\x78\xdd\xa3\x13\xd6\x91\xa2\x30\xd6\x45\x43\x90\x02\x53\xa3\x63\x59\x16\x24\x24\xeb\xa2\xa0\x8b\xb6\x4e\x11\x43\x73\x10\x01\x6e\x48\x65\xd1\xf6\x12\x8f\x56\xf9\x92\xef\xbc\x64\xf2\xdd\x43\x0d\x3a\xdf\x29\x22\x94\xbc\xf6\xd4\xcf\xb9\x56\xb2\x8b\x67\x07\xbf\x15\xfa\x65\xdf\x7b\x20\xfb\xfd\xa3\xd4\xf4\xb0\xd0\xb0\x45\x20\x53\xa1\x48\xd3\x81\x1a\xba\x8c\x16\xa2\xc4\xd4\x09\xeb\x3b\x2c\x85\x51\x20\x72\x9a\x6b\x98\x81\x49\x47\xb1\x8a\x94\x38\x21\x42\x16\x8d\xeb\x1d\xcf\x82\xdc\xa3\xfe\x02\x2b\x4b\x9e\x99\xf2\x7c\xa1\x1b\xf6\xce\xc0\x1c\xb8\xb8\xd6\xd5\xb6\x7a\xce\x09\x0e\x2e\xfd\xc2\x37\xd9\xc7\x2d\xa5\x56\x1b\xa1\x15\x5a\x03\x3c\x56\x43\x8a\xa3\x79\x62\x8b\x86\x81\x0d\x49\x4f\x78\xd3\x8f\xa5\x88\x0a\x62\xde\x32\x7d\x9d\x72\xb0\x12\x33\x82\x03\x44\x55\xb3\xff\x7f\xb3\xc7\xb4\xf8\xb7\xc5\x46\xb5\xd6\xe5\x9e\x7a\xe5\xb9\xa0\xe3\x88\xc1\xf7\x56\xbf\xfb\xe2\xe4\xbc\xdf\x17\x2f\xbf\xfa\xab\x8b\x9d\x66\x7e\x73\xbb\xef\xe1\x37\x1b\xfd\x92\xd1\xe6\xe1\xc3\xd3\x0f\xa7\x55\x78\x14\xce\xb8\xe3\x2d\x7d\xdd\xbd\xc1\x75\xf4\x3b\x15\xc4\xaf\x03\xbe\xc7\x99\xee\x73\x8e\xda\xdf\xbe\xb1\xb6\xcf\xf6\xf0\xfd\xd7\xcc\x05\x25\xd2\xfb\x33\x23\xcf\x74\x12\x80\x84\x04\x63\x45\xa7\x02\xcc\x0a\x80\x22\xba\x4c\x54\xce\x56\xe5\xd8\x4d\x00\x63\x61\x13\x60\x40\x1c\xdb\x12\x64\x41\xb3\x12\xf9\xf1\x01\x4e\xe3\x49\x7b\x66\xb7\x7c\xf8\xec\x7b\x65\x7f\x46\x76\x89\x2f\xfb\x2e\xcb\x33\xee\x9b\xde\x47\x97\x0e\xfd\x3a\xd7\xc7\x07\xc7\x0d\xe6\xf7\x35\x4d\x6f\x68\x55\x59\x2a\x89\x68\x62\x69\xff\x7a\x26\xb8\x12\x4a\x78\x5b\x93\x59\xc8\x99\x32\x80\x58\x34\x38\x0e\x2b\x09\x6d\xb8\x06\x66\x68\x9e\x0a\x23\x56\x13\xe4\x1c\xa9\x77\x5d\x6c\xf8\x61\xcb\x89\x4d\x03\xff\xfe\xe5\xbd\x4e\xa0\x69\xad\x15\x66\x89\x69\x75\x4f\x5c\x73\xfa\xce\xd8\xb9\xea\x42\xbe\x53\x63\xf7\x5e\xbc\xfe\xc8\xb9\x14\xff\xb5\xf3\xc7\x87\x9e\xed\x7c\xfd\x15\xf6\xb7\xcd\x6d\xf8\x27\xeb\xe0\x05\x2d\x9a\xb6\xb9\x22\x7c\xf5\xec\xba\x0f\xca\x2d\xe7\x8e\x5f\x4f\x73\x3b\x23\xe2\x70\xa2\x31\x71\x12\x51\x72\x20\xb9\xba\x6c\x84\xac\x67\x19\x26\x16\x63\x51\xe6\xf9\x58\xb3\x0d\xc7\x74\x6d\x93\xb1\x80\x6f\x05\x0e\x2f\x7a\x29\x56\x0d\xad\x71\xde\xa9\xc0\x90\xfc\x57\xf7\x3b\x75\xca\xee\x7c\x50\xe5\x97\xd7\xbe\x2b\x36\xaf\x6d\xc1\xd7\x72\xb5\x59\xb3\xe7\x89\x52\x5e\xbd\xec\x4b\x8b\xa7\xcc\xd4\x9c\xe6\x05\x11\x02\x71\x08\x45\xd1\x61\x28\x8b\x49\x74\x31\xc6\x3a\x25\x99\x12\x80\x2c\x83\x0d\x5d\x64\x10\x94\x45\x06\x98\x0c\xe3\x0a\xa6\x2b\xc0\xd4\xf1\xe9\x6d\xf9\xec\xf2\x89\x6a\x93\x5b\x7b\xd6\xac\xcf\xf7\x96\x5e\xff\x8f\x27\x7b\xae\x1f\x79\x75\x7e\xc7\x73\xf5\xbe\xb9\xf3\xf7\xe4\xda\xad\x85\x34\x67\x83\x18\x5b\xb4\x2f\x05\x34\xc7\x03\x83\xf3\x65\x2f\x11\xb9\x00\xda\x52\xcc\x8a\xa1\xcd\xb8\xa6\x26\x89\x0e\x43\x43\x9b\x44\xd0\x8f\x62\x57\x53\x03\x3b\x35\x94\x65\x4e\xd3\xa3\xb5\xe4\x78\xff\xb9\x7a\x63\x9c\xc1\xef\x1e\x1e\xe0\x0b\x35\xbb\xe4\x6f\x3f\xe9\xeb\x96\x74\xd1\x4f\xef\xcc\x39\x23\x64\x7f\x43\x52\x4a\x2f\x80\x01\x1b\x42\x83\x45\x2a\x51\x4c\xcd\x77\x34\x9b\x4a\x44\x99\x91\x04\x23\x10\x79\x96\x26\x51\x24\xfb\x84\x28\x81\x1d\x1b\x0e\x1d\xd2\xd0\x4f\x68\xf5\xf1\x19\xf7\x67\xb9\xca\x8e\x18\x84\xc6\x7e\x91\x8f\x1a\xb2\x72\x6e\xf9\xb3\xe5\x86\x9f\x3f\xd7\xf0\xd8\x80\x8a\x43\x56\x75\x19\x56\x6c\xf7\xa4\xfd\x33\xd2\x6b\x32\xab\xeb\x30\x51\x09\x71\x59\xa8\xc5\x8e\x63\xa3\x48\xd1\xe4\x38\x50\xb9\xc0\x08\x3c\x28\x25\x2c\x8f\x23\xdf\xe4\x0d\xde\x33\x50\xa0\x40\x37\xd6\xa9\xc7\x4d\xfe\xb6\xde\xd7\x07\x27\xae\x9b\x33\xa1\x56\xcb\xa5\x3f\xc6\x7e\x8b\x6a\xbf\x31\x93\x26\x8b\xbb\xfa\xbd\x70\xbe\xe5\xb1\x67\x0b\xdd\xd9\x3d\x2a\xcd\x42\x77\x98\xc1\x28\x36\xcd\x88\x42\xa6\x6a\x58\x9c\x47\x5c\x3a\x74\x5d\xc1\x33\x69\x29\xe2\x7d\x84\x35\x03\xc7\x54\x4c\xa9\x9e\xaf\x25\xb4\x46\xc9\x7a\x16\x0f\xb1\xeb\xdb\x07\x4f\x3d\xb2\xf5\x0b\x67\xba\xb3\xf3\xe2\x95\x75\xed\xba\xf6\x9c\xdb\xbd\x4c\xd3\x2d\xd5\xc6\x5c\xe8\x5e\x71\xd4\xe0\xcb\x25\x26\xa5\xf9\x21\x86\x2d\x25\x84\x7e\x28\xb9\x18\xd0\x84\x0f\x35\x64\x2a\x89\x85\x34\xd9\x36\x9d\xc8\xe1\x34\xe8\x44\xd8\x8d\xd9\x24\xd1\x14\x9c\xd8\xae\x28\x0a\x6e\x6a\xdc\x46\x91\x17\xd4\x23\x17\xc4\x87\x3b\xaa\xaf\x1a\x88\xf5\x05\xc7\x6e\xd0\x6c\xfb\x17\x67\x5f\xbc\x74\xe2\xfe\x4f\xf5\x9c\x1b\xf3\xf5\x7e\xe9\xed\x00\xf9\xac\xac\x5b\x44\x94\x34\x0c\x45\xc7\x4b\x64\x0e\xf8\x8a\x0b\x80\xc4\xe0\x88\x37\x0d\x2a\x80\x92\x0d\x4c\x5b\x22\x96\x4a\x31\xae\x0e\x25\x4d\x4b\x21\xae\x5c\x9a\xbf\x3f\x6b\xb8\xbd\xe7\x54\xb3\x1a\xf2\xf3\x35\x06\x8f\x97\x5e\x86\x77\x84\x4e\xfb\x96\x77\xaf\x0d\xef\x70\x43\x27\x4c\xcb\xfe\x7c\x3b\xb5\x80\x23\xad\xe8\x18\x61\x1a\x8b\x80\x65\x5c\xe4\x62\x04\x5c\x36\xb6\x88\xa6\xd9\xc4\x75\x90\xea\x99\x54\x64\x3b\x86\xe2\x48\x21\x25\x70\x31\x2f\x3d\xa2\x88\xfb\xdf\xc9\x68\xd5\xba\x72\x7d\xbe\xfb\x00\x5d\xd9\x96\x77\x50\xb7\x6f\x27\xfe\xb1\xae\x5e\xdd\x7d\x35\x6e\xcd\x6c\x3c\xf5\x93\xdc\xc3\xe6\x5d\xdb\xe8\x6e\x7b\x24\xd6\x14\x1a\xf9\xdc\xe4\x9e\xfb\x5e\xfb\x6a\xc5\xab\x23\xea\x64\xac\x3f\xda\xe5\xd0\x8a\xad\xf7\x33\x93\x77\xa6\x56\xd7\x5e\x3a\xfd\xf1\x37\x2f\x94\x4f\xaf\xe3\x4a\xc8\x0c\x12\x49\x64\x39\x4e\xa1\xa2\x88\x26\x11\x8e\x6d\x49\x66\x2d\x64\x25\xa6\xc4\xc7\xbc\x13\x3a\x8e\x47\x69\xc0\x77\x71\x6c\x31\x26\x10\x12\xe1\xf1\x73\x69\x7a\x02\xbc\x72\x73\x43\x87\x9f\xf2\x4c\xf9\xf2\x65\xeb\xe3\x5d\x7f\x5c\x6d\xf1\xc7\x61\xbe\xf6\xe4\x3d\x75\x8c\x9a\xfa\xf0\x72\xf3\xa6\xa5\x37\x19\xf9\x8a\x19\xb9\x12\x4b\x41\x87\xf5\x69\x4f\x61\x05\x83\x48\x72\x62\x7b\x88\x0b\x7d\x4b\xb5\x3d\x87\x75\x24\x5d\x05\xbe\x08\x58\xa8\x48\xb6\x97\x10\xe9\x71\xa4\xfc\xba\x5a\x5b\xc2\x92\xcf\x7e\x74\x74\x4b\xad\x17\xbe\xad\xdd\xa3\xcd\xee\x07\x45\x8f\x7b\xdf\x5c\xff\xfc\xd8\x6a\x28\x8f\x6d\xbc\xad\x6c\xf6\xeb\x9a\xd4\x1c\x65\x5f\x49\x6c\x47\x4f\x44\xd5\x8a\x79\xca\x49\x5c\xe0\x84\x2e\x25\xa3\x00\xfb\xba\xee\x5a\x5a\xa2\xc8\xac\x41\x87\x8e\xa3\x5b\x1c\x50\x78\x1c\x0a\x59\xc4\x9a\x2a\xbb\x34\xa3\xb8\xb9\xee\x93\x05\xe2\x1b\xc5\x3b\xbf\x26\x9e\xb8\x75\x4e\xbf\x5e\xff\xdc\xda\x63\xa7\x9f\xfe\x7f\x58\xfb\xca\xb0\x2d\xaa\x6e\x7f\x42\x10\x10\x90\x12\x01\x69\x05\x14\xa4\x26\xe9\x7c\xe8\x6e\x90\xdc\xd3\x33\x7b\x7a\xcf\xcc\x9e\x19\xd2\x87\x46\x4a\x50\x3a\xa4\x55\x4a\x3a\x04\x24\x05\x91\x6e\x10\x49\x69\x91\x90\x10\x04\xf9\x5f\xef\x79\xff\xe7\xf8\x72\xb8\x9f\xcb\x73\x3d\xd7\xfd\xfd\xfe\xb0\xee\x3d\xab\xd7\xfa\xfd\x56\xa7\x4f\x97\xfd\xb9\xbc\x6d\x72\x33\x48\xda\x95\x43\x51\x32\x4d\x1b\x31\xa2\xe3\xf3\xb4\xe0\x08\x86\x10\xc8\x36\xd2\xa0\x24\x68\x04\x36\x65\xc6\x0d\xc9\xc0\x93\x5c\x51\x8d\x02\x5e\x92\x5c\xeb\x3f\x7d\xcd\xdf\x3a\xbd\xe8\x5a\xa9\x2e\x2b\xbe\x7e\xf6\xe1\x88\x4f\x3f\x1b\xbc\x3d\xeb\x6b\xde\xa5\x76\xd7\x46\xf7\xd8\xf8\xd3\xbc\xd7\x4b\x4d\xff\x66\xf1\x85\xd4\xab\xc9\x7d\x6d\x24\xb3\xa4\x44\xb9\xff\xca\xee\xb1\x6e\xc9\x40\xa7\x63\x35\xe0\xb8\xff\xe2\x4a\x83\x16\xe6\x22\x3d\x70\x99\x40\x01\x3c\xa0\x75\x46\xb7\x45\xea\x3f\xc2\xfe\xdf\x38\xe5\x16\xdb\xfb\xde\x59\x3e\xa4\xc4\xda\x19\x53\xca\xfe\x14\x67\xdd\xe6\x2c\x6b\xed\x76\x0b\x72\x34\x69\xa4\x5c\xed\x3a\x3c\xb5\x4e\x92\xd7\x9b\x49\xc7\x27\x1d\x3b\x56\x79\x8d\xb2\x63\x64\xe8\x64\x8c\x10\x0a\x54\x46\x8a\x45\x01\xda\x72\x20\x9b\x1e\xa0\x54\x0a\x1b\x61\xc8\xb0\x98\x33\x98\x58\x7b\x35\x27\x7c\xb6\xed\x4f\x7b\x4e\x8d\x94\x8d\x5d\x32\x96\xdc\x95\xbf\x32\xe7\x1e\x1b\x30\xe1\xd0\xfb\x07\x05\xfa\xa4\x60\xd7\xca\x9e\x6f\x74\x92\x2f\x9a\x05\x8e\x65\xdb\x94\xc4\x58\xa6\xc5\xbb\xb6\xad\x04\x22\x4f\xc7\x00\x87\xac\x2f\x32\x1c\x21\xea\xb1\xe9\x6b\x0a\xc9\x62\x81\x60\x35\x4d\xd2\x58\x42\xf7\x12\xe3\x6c\x9a\x6e\xf9\x2b\x53\xef\x7b\x35\x97\x17\xe8\xd3\x7d\x76\x71\x6a\x5f\x6b\x67\x42\xf9\x05\x93\x3a\x5d\x9c\x1b\x55\x1e\x59\xb1\x55\x87\x3e\x49\xae\x59\x45\x13\x84\xb2\x66\xb9\x91\xee\xfb\x0e\xf0\x6c\x5d\x84\x88\x15\xe3\x88\x80\x62\x8c\x35\x1c\x85\x32\x6f\x42\x09\x71\x01\x66\x43\x0a\xe2\x38\x20\x12\xa0\x3f\xdc\x0e\xd7\x4a\x96\x59\x92\xa1\x4f\x9b\xf5\xb7\x29\xba\xd6\xb4\x1f\xce\xfc\xb4\xfa\x9b\x7b\xdd\xae\x65\x6a\xf4\xe4\x64\xd7\x5f\x33\xac\x73\x92\x4c\x33\x19\x11\x74\x24\x85\x1a\x76\x45\x8b\x96\x54\xa0\xf1\x82\xa0\x11\x91\x0a\x78\x40\x29\x2c\x1f\x6a\x06\x67\xd8\xa4\xa3\x32\x2e\xeb\xa8\x08\xcb\x8e\x2b\xa7\x51\x15\x1d\xdd\xf4\x5a\xd9\xd1\xee\x9e\x5c\x66\x9e\xce\x47\xf3\xb6\xfb\x71\xe8\xfb\xc7\xbf\x6a\x71\x22\xf8\x6b\x43\xab\x37\x46\x7f\x50\xcc\x68\x36\xf4\x65\x54\xce\x57\x33\x5f\x9f\xf6\xa4\xd7\xeb\x4f\xf2\x94\xab\xb4\xb1\xd9\x8b\x92\x79\x46\xb7\xeb\x84\xeb\xdc\xfd\x83\x3f\x77\xe6\xf4\xe4\x2e\x3f\xa4\x1f\xff\x94\x30\xda\xc6\x31\x66\xa1\x19\x53\x01\x65\x2a\x91\xe8\x51\x9e\xa0\xf8\xa2\x60\x6b\xaa\xc1\xb3\x48\xf0\x01\x87\x24\xde\x90\x34\xd7\x88\x48\x3a\x32\x7d\x40\x47\x09\x2e\xcd\x8d\x68\x32\xf1\x7e\x5f\xa7\x40\xab\xfa\x75\x97\x08\x4b\x4a\x93\xa3\x72\x8c\xa8\x9b\xf5\x62\xbe\xc5\x17\xae\x9e\xac\x5c\x7b\xd9\xe4\xea\x4b\x93\xcc\xf2\x2f\x6b\x50\x52\x91\x04\x5c\xc9\x71\xb1\x6e\x29\x56\xa0\x40\xcd\x74\x11\x10\x54\x31\x12\x65\x43\xd6\x75\xc6\xd0\x43\x6c\xa9\x1c\x2d\x7a\x0c\x50\xad\x57\x63\xe7\x8c\xee\x27\x7a\x45\xed\x84\x47\xcc\x90\xc7\xbf\x17\x9c\x5c\xac\xcc\xb4\x87\xeb\x2f\x8c\x3e\x90\xff\x64\x8b\x95\xfc\xa9\x83\x67\xd1\x57\xc9\xd5\x7e\x68\x52\x9a\x61\x38\x11\x27\x48\xb1\x46\x12\xb1\xcd\x22\x43\x8e\x51\xe4\x18\x80\x77\x14\xcf\x66\x62\x2f\x8c\x1c\x9d\x51\xe4\x48\x35\x68\x81\xf8\xff\xa7\x9b\x13\xe4\x34\x33\x06\x9e\xdf\x3f\xef\xbd\xd6\xfd\x0b\x7e\x31\x5b\xc9\xd9\x31\xf5\xe1\xae\x06\x25\x6a\x8f\xbb\x7a\xf3\x9b\xe5\xa3\xac\x6a\x75\x4e\xbe\xb7\xff\xe5\x81\x56\xa3\x89\x39\xaf\xb6\x42\x7f\xb9\x25\x5b\xdf\xd9\x9f\xf2\xe4\xcb\xd2\x41\xa3\xbd\x63\xec\x8c\xfa\xc4\xbb\xc7\x66\xa2\xe0\xc4\xd1\x24\xab\x92\x43\x9b\x1e\x1f\x9a\x82\x46\x84\x22\x26\x25\x8d\xc0\x50\x27\x00\x0e\xc9\x10\xf9\xbc\x1d\x03\x0a\x84\x30\xb4\x04\xdf\x90\x39\x2e\xb0\x35\xc5\xa1\x12\xa7\xc8\xf2\x88\x6a\x5d\xb6\xb4\x6a\x70\xfc\xdd\x29\x87\x67\xb2\x33\x47\xdc\x9c\x79\x70\xda\x0f\x3f\x4e\x02\xc7\x87\xf8\x23\xbe\xc9\x23\xf5\x2b\x90\x6c\x56\x10\xcc\xba\x94\xa0\x01\xcb\xb1\x58\x15\x2b\x02\x25\x01\x19\x68\x32\xd2\x21\xad\x11\x3c\x46\x0a\xe1\x86\x3c\xc1\xd8\xd8\xf6\x55\x3f\xf4\xc3\x38\x41\x0d\xd5\xef\xce\x9a\x06\x03\x8c\x6d\x37\x32\x0e\x98\x7c\x6b\x65\x81\xcc\x25\x1e\x39\x9b\x86\xde\x4a\xed\x9b\x52\xb1\x56\x54\x6f\x6a\x6f\x3f\x4e\x32\x7d\x26\xeb\x00\x9e\x65\x19\xc0\x20\xc4\x11\x58\x95\x63\xd6\xb6\xb1\x40\xb8\x82\xc7\x70\xb1\x8d\x29\x85\xf0\x6d\x9f\x50\x58\x56\x66\x08\x47\xe6\x89\xc8\x48\x5c\x60\xe7\x5e\x59\x65\xe3\xe6\x23\xbf\xbe\x1f\xbd\x37\x4f\xec\x9f\x63\xf7\x81\x86\x1b\x52\x6e\x1c\x1b\x79\xf4\xe6\x1e\xee\xe3\xb1\xdf\x7e\x3c\xf8\x51\x72\xad\x40\x32\x08\x49\xf6\x42\x4b\xa7\x4d\xd1\xe0\x1c\x2d\xb0\x21\x61\xe0\xd0\xb3\x03\x59\x94\x59\x4c\x4a\x2e\xe0\x62\x26\x56\xf9\xd8\xa4\x11\xc5\x13\x14\x8a\x5f\xf5\x35\xbd\xd9\xa9\xc3\x0f\x3e\xfa\xed\xb5\xad\xb5\xbb\x13\xcf\x9a\x3f\xac\xe0\x7e\x3b\x73\xf7\xbe\x6d\x05\x6f\x94\xfd\xde\xfd\x3e\xc3\x91\xad\x63\x93\x2b\x72\x18\x05\xa2\x2d\x41\xcc\xc5\xbe\x41\x07\x11\xa0\x4d\x4d\x8a\x5c\x60\x23\x52\x40\x81\xe1\x18\x34\xe9\x84\x0a\xcb\x1a\x1c\xad\x45\x40\xc4\x0c\xe4\x12\x6c\x63\x9f\x69\xd3\x74\xee\x82\xa1\x1b\xcf\x56\x19\xb7\xb5\x5e\x8d\x7c\x0b\x3f\xf8\x30\x77\xfe\xc7\xd5\x5b\x9e\xfe\x2a\xf3\x81\x22\x3f\xd7\x5a\xb1\xa1\x65\x92\xeb\x27\x55\xd7\x28\x2c\xaa\xb2\x46\x52\x3e\x81\x23\xcb\xf7\x59\xcd\x93\x59\x4b\x22\x0c\x49\xe3\x83\x40\xe7\xb1\x0f\xcd\xc8\xe4\x03\x59\xb4\xe9\x38\x72\x84\xc4\xd9\x63\xa9\xf9\x75\x1e\x7d\xbd\xad\x6f\xb1\x3a\x19\xfe\x58\xd6\xa7\xf7\xc4\x90\xd0\xc9\x47\x62\xb9\x4c\xd5\xfb\xbd\x9b\xd2\x6f\xe7\x92\x6b\x49\x6e\x9b\xd2\x0e\x04\x3e\xb2\x6c\x8f\x8e\x31\xd2\x02\x47\x22\x5d\x56\xf1\x22\x24\xb2\x46\x6c\x46\x91\xc5\xdb\xa2\x4f\x71\x81\x4c\xea\x14\x34\x74\x4b\x25\xe3\x04\x98\xbe\x9e\x5a\xa7\x32\x3b\x0b\x04\x77\xaf\x5b\x55\xbd\xd1\x99\xeb\x8c\x6e\x33\x6a\x2c\x55\x6e\xfc\xdd\x51\x7f\x69\x87\x8e\xa9\x73\x9a\x16\x4e\x32\x10\x37\x96\x54\x27\xf0\x04\x24\x60\x57\xe2\x59\x08\x24\x51\x36\x2c\xc7\x0d\x31\xc2\xaa\xc1\xfb\xa1\x44\xcb\x2c\x11\xa9\x8c\x12\x32\xbe\xc5\x05\x02\xd2\x5e\xf5\x1c\xd1\x7a\xf6\x16\xd5\x51\x5c\x93\x72\xf2\xed\xd6\x0d\x6e\xae\xf9\x65\x72\x10\x3e\xe9\xf8\x85\x72\xa8\x72\xd1\x6b\x15\x8c\x63\xd9\xd2\xdf\x9a\x4b\xa8\x1c\x28\x64\x20\xeb\xc7\x86\x09\xa4\xd8\x09\xa0\xe6\x52\x2e\x62\x19\x2c\xbb\x3e\x4d\x92\x40\x10\x65\x83\x34\x49\x97\xb7\x10\xb0\x03\x8b\x8e\x7d\x0d\xf8\x69\x04\xa2\x5f\x06\x6e\x1c\xd2\x47\xff\xeb\x48\xa3\xeb\x5f\x16\x1f\x9c\xe9\xc9\x5f\x85\x76\x16\xeb\xd7\x74\x7b\xb7\x0f\xc7\xad\x1e\xb3\x3e\x53\x97\x46\xdb\x5e\x0a\x44\xc7\x5a\x56\x2c\xde\xfc\xe3\x32\x83\xda\xab\xf2\xd4\xf9\x4b\xcb\x6c\x58\x5b\xbd\xb8\x68\x96\xfd\xa8\xbb\x4b\x6a\x8b\x2a\x54\x1a\x94\x7e\x80\x57\xe2\x49\x21\xa1\xf0\x9c\x4b\x53\x06\x0a\x08\x1a\xb3\x8c\x19\x1a\x74\x10\x10\x9e\x6e\x43\x25\x88\x45\x39\xc6\x84\x4b\x92\x24\x43\x8a\x61\xc8\xea\xac\x40\x21\x9c\x18\xf9\x31\x6c\xd6\xdc\x9b\xa5\x8a\xd7\x7a\xe8\xf6\x59\x33\x78\xf4\xd6\x03\xb3\x3f\xfc\x6c\x8b\x41\xfe\xdc\x76\x42\x97\x0f\x87\x55\xae\x74\xb6\xcd\xb6\x24\xf3\xde\xdb\xa2\xad\x07\xb1\x8a\x48\xd5\x16\x39\xc5\x25\x59\x4f\x26\x05\x81\x01\xb6\x27\x93\x16\x10\x3d\x9d\xf4\xb5\x98\xf1\x19\x2b\xa2\x7d\x9e\x89\x75\x98\x00\x8a\xfe\xe8\xc9\xe3\xb7\x9e\xa7\x0e\x6b\x57\xfd\x59\xbb\x12\x9f\xbc\x7b\xba\xe9\xf7\x99\x52\x9b\x74\xbf\x79\x2e\xc7\xfd\x4f\xb6\xb5\x3d\x37\xa9\x4a\x72\xcf\x91\x73\x54\x68\x63\xca\x0f\x21\x05\x69\x2b\xd0\x03\x4a\x53\xb1\xa7\xfa\x20\x8c\x29\x28\x42\x51\x57\x18\xac\x5b\x48\xb6\x62\x82\x75\xb4\x38\x54\x00\xe6\xf4\x34\x52\xe4\xed\x5d\x52\x0e\x94\x1c\x90\x4b\xdc\x59\xe1\xd1\xb4\x65\x57\xdb\xdc\x6e\x74\x7d\x38\x9c\xfc\x71\x9d\x31\xa3\xfb\xee\x5e\x50\xfc\xe2\xb2\xf3\x2f\xa9\xd3\x60\x8e\xfb\xf2\xb3\xa6\x55\xf6\x97\xf9\x79\xdd\xa5\xb3\x17\xe7\xcd\x98\xfe\x6e\x8d\xd3\xed\xb3\xaf\xcf\x2d\xf7\x9d\x70\x24\xe7\x93\xe7\x66\x72\x6d\x86\x0b\x05\x9d\x47\x92\x25\x43\xc9\x75\xa1\x65\x06\x1a\x1f\x0b\xbe\x4f\xbb\xa6\x22\xb8\x6a\x10\x44\x36\x54\x00\xe5\xca\x21\x1b\x78\x2e\xe2\x79\xf8\xef\x7b\x04\xaf\x8e\xdb\x26\x54\x5b\xdb\x6e\x62\xed\x89\xad\x52\x4b\xf4\xe9\xbb\x76\xe7\x8b\x67\xdf\x8c\x2a\xdf\xf4\xb3\x2d\x59\x07\x35\x9f\x42\xec\xff\x68\xf9\xde\x1c\xc9\xfd\x36\x2a\x72\x00\xe5\x33\x80\x62\x63\x31\xd2\x25\x1b\x3a\x12\x8a\x81\x2c\xc6\xaa\x1a\xaa\x94\x4c\xab\x8c\xc4\xa9\x1c\xa0\x64\x1f\x01\x8b\xe7\x10\x54\xbd\x34\xbe\x4d\x87\x7b\xdb\x3e\xb9\xf8\xf6\xf8\x5e\x3d\xe7\xd4\x2b\x8c\xdc\xb1\x2d\xda\x2e\xcd\xd0\x87\x6c\x79\xee\xea\xa4\x4e\x65\x5f\xd7\xaa\x36\xfb\xee\x65\x62\xe1\xa6\x77\x9f\x2f\x6b\xbb\xe9\x54\xdf\x16\x79\xac\x5d\x87\x47\x66\xda\x57\xb4\xcd\x6b\x99\x9a\x15\x9c\xb9\x67\xf1\x72\xf9\xeb\xb7\xca\xb1\x49\x26\xc9\x67\x10\x0f\x44\x92\xe6\x05\x95\x0e\x68\x9d\x8c\x75\x5e\xf3\xed\x90\xf0\x62\x3f\x74\x63\x9b\x30\x7c\xdf\x0f\x5d\x37\x06\xbc\xc2\x79\x0e\xc7\x2a\x3c\x9f\x38\xe7\xac\x40\xd7\xbf\xf5\xce\x27\x37\xd7\xff\x5a\xbb\x7e\x9e\x93\xbd\xe4\xd9\x79\xa8\xd5\xe1\x47\xa5\x0f\x0f\x55\x57\xd7\xf8\xf1\x86\x97\x2d\xb9\xa7\xfa\x38\x0d\x08\x9e\xe7\x47\x01\x1d\x4b\x4e\x80\x02\xcb\xf1\x39\x1f\x79\x91\x1a\x68\x98\xf1\x02\x4e\x72\x48\xd7\x64\x45\x93\xe1\x3d\x82\x24\x0c\xfc\xaf\x88\xf8\xaa\xa9\xcf\xae\x75\xf3\xec\xf6\xfa\xbd\xd7\xe4\x88\xba\x9d\x6b\xde\xe6\xfe\xe6\x51\x55\xc2\xa6\x29\x67\x2e\xc3\xbd\x2d\xf6\xd7\x2d\xc7\x8b\x7b\x93\x3c\x3e\x13\x23\x88\x62\x97\xb4\x5c\x27\xd2\x23\x86\x92\x4c\x8f\x8d\x24\xd5\x53\x02\xcc\x46\x24\xf6\x5d\xc1\xe0\x69\x4e\x97\x7c\xce\x46\xb1\x0d\x7c\x9f\x74\x12\x5b\x41\xb7\xf3\x05\xce\xd6\x28\x97\xe5\x70\xdd\x82\xcd\xab\xff\x70\xbf\xf9\xd0\xb7\xdf\xc8\x30\xbc\xdb\xb2\xfd\x1b\xa6\x4d\x7d\xfc\xc5\xb8\xf9\x53\xd2\x1f\xa3\x13\xf7\xed\x39\xdf\xb5\xa4\x40\xf3\x62\xc3\xc6\x38\xd6\x09\xd5\x70\x43\xd2\xe3\x42\x49\x32\x5c\x44\xfa\x38\xb6\x79\x0d\x45\xa6\x40\x48\x8a\xa6\x44\xbe\xe0\x79\x89\x15\xe4\x83\x9c\x7b\xba\xa0\x4f\x3e\xba\x7a\x73\x7f\x70\xf3\xfc\x84\x46\x6b\x97\xbf\x31\xe7\xf5\xda\xfe\xfd\xd7\x1a\xfe\x5a\x32\x65\x49\xab\x73\xe9\xf7\x39\x89\x8d\xd7\xd5\x10\xf6\x64\x48\x2a\x6c\x18\x41\x4c\xf2\x2a\x47\x06\x1c\xf0\x1c\x9d\x0b\x6c\xcc\x93\x36\x46\xba\x11\x61\x99\x21\x78\x09\x89\x80\xe5\x09\xf0\x6a\x6a\xd1\x7e\xf5\xf5\xdf\x9c\x94\x46\xd3\x33\xef\xee\x72\xa0\x7d\xf6\xe3\x3b\x96\xdf\x19\x15\xfe\x59\xf0\x62\x8f\xc3\xcf\x4f\xc2\xd2\x99\x3b\x24\x97\x96\x04\x38\xb2\xc8\x09\x91\xac\x01\xc9\x20\x22\x8b\x15\x18\x99\xe7\x55\xd6\xd6\xc4\x08\x53\x62\x28\x79\xa4\x45\x19\x2a\x65\x51\x40\x0a\x0c\xc2\x57\x28\x44\x70\x69\xf8\x9b\x63\x99\xeb\xd6\xdc\x5b\x7e\x1e\x92\x4a\xae\x1d\x93\x27\x2a\x96\x67\xf5\xd3\xec\xe8\xd6\xf6\x2d\xfd\xd7\xa7\x7e\x36\xbd\xd8\xd7\xcf\xdd\xff\xde\xf1\xfc\xa7\x61\x73\x6a\x4a\xce\xd7\x32\x65\x7c\x79\xc7\x93\x7f\x3e\xa7\xae\xf4\x41\xf6\x6c\x43\xcf\xe8\xc1\xbe\x39\x1d\x53\x32\xe3\x5d\x17\xde\x6b\x31\xd1\x9f\xbc\x62\xe4\xfa\x55\xe4\xc9\xe4\x5e\x97\xe7\x4c\x95\xb5\x6c\xc1\x51\x55\x56\x8b\x2d\x29\xb2\x3c\x5e\x91\x79\x41\x30\x55\x5e\xa6\x11\xeb\x23\x39\xe0\x1d\x03\x3b\x56\x64\x7a\x98\x72\x19\x96\x27\xd2\xd8\x59\x7a\x52\xa7\x4a\x81\x7b\x4b\x6b\x31\x1f\x9f\xd9\xc0\xd0\xed\xd0\xc0\xe3\xb9\x97\x8d\x79\xdc\xb2\xd6\xc3\xde\x75\x4e\xa5\x3c\xbd\x92\x71\x68\x92\x79\x4f\x90\x6f\xc7\x1e\x19\xc6\xa4\x66\x63\xd9\xa5\xdc\x88\x16\x5d\x4b\x23\x75\x4c\x45\x7e\x68\x2b\x76\x44\xc7\x0c\x0e\x48\x4f\x24\x15\x0f\xe8\x1c\xed\xf0\x89\x6d\xbd\x66\xd7\xad\x0f\x9e\x65\x7e\x5b\xd9\x4d\x6f\x1d\xd9\xe2\x78\xce\x09\x05\xef\x7f\x31\x3e\x5f\xf7\x01\x03\xeb\xf0\xbf\xcd\xdb\x33\x6e\x51\x94\x64\x1c\xaa\x40\x6a\xa1\x64\x53\x84\x64\x40\xc6\x97\x54\xcb\x8c\x90\x2d\x52\x11\x23\xcb\xc0\x65\x00\xa0\x03\x8b\x82\x14\xa5\xb1\x31\x2d\xb9\x30\x62\x11\x4c\x83\x54\xf0\xd0\xa1\xf6\x39\xc6\xbf\xef\x65\x3d\xf2\x4d\x9e\xf9\x0f\xea\x50\xcd\x7b\x65\x7f\xf8\x5a\xe3\x3b\x85\x86\x16\xbe\xea\x87\x7f\x78\xb9\x92\x7b\x68\x93\x53\x08\x05\x60\x41\x72\x28\x97\xe7\xa5\xd8\x0a\x05\x16\x63\x8e\xd2\x81\xa2\x70\x40\x16\x6c\xc6\xd4\x23\x3e\x60\x80\xa5\xab\x94\x29\x19\x11\x2b\x6b\x54\x62\xb1\x9f\x17\x3a\xa4\x5f\x99\x62\xde\x9a\xfb\x4d\xe1\x0c\xdf\x3f\x59\xf5\x46\x99\x81\x60\xdf\x8c\x32\x1d\xf3\x36\x68\x9d\xed\xcc\x91\x69\x4f\xac\x24\x73\xfa\x53\x1a\x46\xba\x68\x41\xe0\xfb\x42\x04\xf9\x98\xf2\x2d\x8b\x47\x14\x43\x68\x54\x44\xc7\xae\xa3\x4a\x81\xec\x1b\x41\x24\x6a\x91\x6f\x8b\xb4\x89\x82\x57\x70\xa8\xff\x34\xa1\x4b\x4d\xa9\x57\xaf\x41\x9e\x97\x2d\xb8\x49\xf3\xfb\x7f\x5d\x4b\x41\xa7\x6a\xbf\x78\x96\x32\xbf\x63\xed\xca\xb5\x3f\xaa\xd6\xb6\xec\xdc\x89\xa5\xeb\x95\x68\x37\xa8\xf5\xdd\x29\x3d\x93\x3c\x42\xf2\x30\x2f\x05\xb1\x41\xd9\x86\x60\xba\x36\x4f\x72\x72\xe8\x04\x50\xd2\x63\x9b\x27\x63\x83\xd4\x7c\x47\x17\x19\x5d\x92\x74\x07\x21\x49\x14\x09\xcf\x4e\x3c\x42\x9a\x33\xa5\xda\xe5\x13\xf5\xf8\xcf\xf3\x7f\xd8\xf8\xf9\x8a\x91\x3b\x26\xfc\xd8\xe3\xe4\xdc\x75\xb3\xb2\x2a\x4b\x6f\x6f\xf8\xa3\xd6\x9d\x67\xe7\x93\x6b\xc1\xae\x18\xf1\x8e\x40\x39\x94\xe9\x10\x31\x2b\xf9\x1a\xe2\x88\x90\x70\x3c\x07\x62\x60\xf0\xb2\xe0\xc5\x9c\x40\x21\x4a\x73\x02\xd5\x46\x8a\x6a\x7b\x91\x95\xd8\x82\x2b\x5f\xde\xd4\x7c\xc4\xb6\x83\xbf\xf6\x18\x7f\xf9\xb7\x12\xd5\x45\x4b\x2a\xde\xeb\xce\xa4\x63\x67\xfb\xed\xed\xb5\xed\x51\xe5\x01\x43\x0f\x24\xb7\x04\x32\x00\xa0\xb1\x4a\x89\x62\xa4\x93\xa2\x6e\x89\x9e\x1f\x68\x91\x2d\xb9\x64\x14\xe9\xa6\x1b\x40\xcf\x09\xa8\x38\x50\xa0\x15\x63\x5a\xd1\xe8\x48\xfb\x37\x7c\xf6\xd5\xd7\xee\xf3\xed\xa9\x8c\x05\x4e\xf1\x6f\x1e\xff\x5a\x7e\x5e\x65\xc0\xf3\x5a\xd7\xd6\xc2\x15\x15\x9a\x84\x67\x82\x63\xdf\x35\x3a\xa9\xfc\xa1\x27\xb9\xf3\x29\xd1\xb2\x43\x91\xa4\x2f\xeb\x3e\xad\x93\x20\x08\xa1\xca\xba\xb4\xe9\x87\x3e\xd6\x49\xdb\x23\x5d\x5f\x90\x42\x16\x93\x31\xcb\x2b\x04\x94\x24\x32\x8d\x85\xbc\xd1\xf7\x6e\xd7\x68\x9d\xaa\x9f\x8c\xb7\x7f\xb7\xe0\x66\xe6\xd2\x9d\x4f\xf6\xbb\xdc\xe4\x59\xf7\xd4\xcf\xd7\x66\x98\x7c\xf1\xaa\xdb\x22\xfd\x3b\x0d\x89\x77\xe2\x63\xca\xf2\x15\x23\x04\x84\x22\x43\x08\x90\xce\x46\xac\xc6\x6a\x3e\x36\x42\x8f\x0c\x4d\x5d\x64\x25\x9e\x52\x45\xc7\x93\x48\x0b\x98\x3e\xc1\xc6\x7f\x73\x45\xfd\xb7\x05\xff\xd3\x68\x23\x35\x25\x7b\xb6\x6c\xff\xeb\x8e\x56\xe9\x81\xb3\xb2\x0d\x2b\xfb\xc3\xbe\xb3\xcc\x6f\xeb\xbb\xfe\x38\xb4\xfd\xdc\x5a\x9f\x36\x3f\xd1\xf9\x4f\x23\xc7\x77\xbd\x2b\xa6\x9e\x6f\x9f\xdc\xb2\x9a\xa3\x24\xc7\x90\x24\x07\xc2\xc8\x46\x80\x51\x3d\xdd\x0a\x38\x9e\x51\x0d\x4d\x66\x02\xdf\x16\x49\xd7\xc0\xa2\x6b\x08\x91\x45\xea\x86\xee\x84\x1e\xc1\xa7\x71\xba\xe0\xbd\x3c\x6e\xa7\xb9\xbb\xff\xc8\xbb\x1b\xe4\x9c\x56\xa2\x66\xcb\x93\x5b\xae\xf4\x5a\xd3\x79\xd5\x29\xf6\xf1\x96\xeb\x4c\x2f\xd8\x3e\x63\x72\xd3\x29\x9a\x0a\x91\x88\x44\x60\xb2\xae\xa3\x05\x92\x29\x50\xa1\x43\x12\x3c\xe5\x8a\x02\xc2\xaa\xc3\x53\xb1\xce\x30\x22\x47\x93\x26\x1d\x7a\x36\x11\xaa\x2f\xdf\xb3\xff\x5b\xec\xdd\xcf\x5f\x14\xf9\xec\x8e\x37\xef\x9d\xec\xe4\x82\xd2\xf3\x2b\xbb\x6b\xfa\x2c\xea\x3b\xa1\xc4\xd0\xd7\x76\x3e\x18\x5f\x34\xd7\x5e\xa5\x66\x72\x5f\xdb\xa6\x21\x63\xa8\x92\xe4\xfa\x2e\x4f\x42\x2c\x70\xb6\xa4\xb1\x3a\xa3\x58\x06\x65\xc8\xff\x0a\x73\x66\x18\x88\x40\xd6\x1c\x3f\x88\x7c\x16\x71\x7e\x5a\xb7\x47\x4a\x7c\xda\xb0\x81\x5c\xb4\xe8\x0e\xf3\xc6\x0d\x74\xe0\x2f\x60\xb2\xc2\xa8\x3e\xb0\xfd\x8e\x76\xdf\xf7\x78\x7b\x43\xbd\x83\xe2\xb9\x24\x2b\x49\x00\x41\x00\xa0\x63\x86\x2a\x8e\x64\x17\x71\x9c\x06\x0c\x03\x63\x44\x9b\xa6\x0c\x1d\x5a\x80\x72\xec\x59\x86\x28\xb0\xbe\x28\x11\xa6\xc6\x3b\x54\x62\xb1\x8b\x6c\x14\x73\xbf\xdf\x77\xf1\xf8\x85\x0b\x6e\xe2\xfb\x6d\x5a\xbe\x78\xba\xbe\x7f\xad\x62\x55\x72\x5f\xfd\xb0\x40\xd1\x8d\xd3\x4e\x2f\x58\x92\x5c\x37\x6f\x70\x38\xe6\x2d\x46\xf5\x4d\xd7\x44\x8a\x2d\x07\x12\xed\x53\x11\x1b\x88\x90\x53\x2c\xcf\xf0\x00\xa9\xba\x3e\x69\x4b\x1a\x8f\x04\x1f\x78\x9e\xe2\x0a\xaf\x80\x06\xff\x69\xa2\x94\x9a\x32\x28\x43\x86\x46\x2f\x6f\x97\x5f\xa4\xba\x75\x4d\x4d\x91\xcf\xa1\x45\x70\x95\xd3\x22\xb8\x5a\xb7\x54\x89\xb3\x0d\xbf\x15\x5a\xbd\x37\xe9\x52\x96\x8b\x03\x0f\x4f\x4a\x32\x61\x13\x41\xa8\x1e\x6d\x58\x4e\x1c\xb0\x86\xed\xba\x1c\xc5\x6b\x9a\x4e\x2b\x50\x21\x6d\xc1\x37\x1d\xe8\xf1\xc0\xe2\x49\x8b\x22\x34\xca\xc1\x40\x97\x09\x39\xb1\x7b\xdd\xfd\x68\xdc\x8c\x42\xbd\x2f\xdd\xaa\xbe\xe9\xfe\xf6\x41\xb9\x5b\x56\xc8\x59\xf9\xe2\xac\xea\x34\xfa\x74\xd8\x8b\xe9\x75\xae\x14\x5e\x37\x2c\xc9\xb0\x5f\x8d\x86\x92\x8a\x25\x4b\xd5\x74\x5e\xd1\x55\x3f\x32\x6c\x27\x56\x04\x4a\x25\x18\x91\xd4\x3c\x59\xe6\x58\xc7\xb4\xb1\x45\xd8\x12\x0c\xb4\x50\x01\x72\x62\x9d\x2a\x97\x23\xf7\x87\xbb\x7b\xe5\x2c\xd8\xec\xc2\x2f\x0e\x31\x70\x57\xef\x52\x05\x96\xaf\xb8\x58\x7e\xe9\xb0\x91\x6c\xb0\x74\x7f\xc7\x38\xc9\xb8\x34\xc7\xa7\x85\x50\xb3\x43\x24\x47\x9c\x4e\xcb\x1a\x8c\x90\xed\x3b\x16\x05\xb0\xa5\x69\x9a\xce\x06\x24\x76\x63\x56\xa0\xb1\x68\x5b\xc0\x72\x25\xcc\xa7\xc1\x71\x3d\x3b\xb5\xd2\x92\x82\xa5\x7a\x3c\xab\x7c\x78\xf7\xb3\x3d\x2b\x1b\xee\xc8\xba\xb8\x7c\x33\x6e\xfb\x94\x12\x63\x9b\xf5\x79\x76\xb5\xd8\xf0\x7c\xc9\xf5\x97\x96\x2c\x5b\x26\xc5\x32\x2a\x0b\x62\x9d\x13\x43\x5d\x51\x48\x53\x52\x42\x33\xf2\x39\x48\xa3\xd0\xe1\x29\xca\x32\x02\x8f\x26\x54\x2a\xe4\x49\x14\x11\xca\x2b\xe9\xe8\x3f\xf5\xb4\x53\x53\xf2\xd4\xcb\x94\xf5\xe5\x60\x36\x2e\xc3\x93\x16\x9f\xb5\xda\x5c\xfd\xed\xb5\x9f\x5c\x6a\x9e\x69\xc7\xd0\xbb\x2d\x27\x6f\x7d\xb3\x65\xc7\x63\x59\x4b\xf5\x89\xf6\xa7\xee\x4f\x7f\x89\x93\x78\x23\xd8\x36\xed\x08\x28\xbe\x20\x63\xc1\x8a\x2d\x68\xe8\x2a\xcd\xf1\x50\x52\x81\xe3\x42\xc5\xf7\x22\xe0\x1a\x48\x51\x21\x36\x49\xdd\x60\x0d\x5e\x42\x69\x04\x33\xfb\x27\xa7\xe0\xb4\x1a\xdb\x4b\xe4\x18\x55\x6a\x7c\x1d\x6a\xf2\xae\xde\xf7\x48\x77\xe0\x3e\x61\x7e\x97\x26\x44\xa3\x56\xd9\x4b\x24\xf9\xba\xb1\x2f\x33\x12\x21\x49\x22\xc1\x73\x0c\xc1\x28\x98\xf6\xfd\xc0\x90\x18\x89\xb6\xa1\xa0\xfa\x94\x64\x39\xa1\xaf\x50\x64\x18\xf2\x8c\xa0\xa8\xac\x8e\xd3\x3a\x29\xd7\xee\xee\xe6\xaf\x9f\xf6\x68\x3d\xb4\xdd\xf0\x95\xb5\x96\xb0\x0d\xe7\x2f\x3a\xf6\xda\x67\x77\x97\x1f\x08\x0b\x70\x4f\xaa\xe6\x3f\x50\xb5\x6c\x72\x1d\x8f\xe9\xbb\x3e\x80\xae\xed\xaa\x7c\x68\xb9\x0c\xc7\xfa\x01\x11\x29\x36\x1b\x19\xd0\x08\x7d\x9d\xd7\x90\x41\x03\xcd\x14\x3d\x5e\xf3\x18\x16\xd9\xb4\x20\x25\x76\x3c\x76\xb3\x32\x55\x1a\x5c\x7d\x94\x17\xdf\x2a\x93\x6b\x44\x99\xae\xa0\xe7\x1c\xa7\xc5\xb5\x63\xf3\x66\x7c\x76\xa8\x55\xbb\xe6\x55\x3f\x59\x94\x64\x12\x1a\xc1\x65\x89\x40\x27\x99\x58\xd0\x79\xd3\xb5\x1c\x9b\x80\x12\x47\x06\x9a\xac\xcb\x34\x49\x04\x1c\x07\x08\x37\x74\x90\xc2\x09\x34\x34\x63\x09\x92\x28\xb1\xd8\xb3\x3b\x5c\x33\xde\x20\x24\x33\xe5\x5b\xb8\xee\xdc\xe4\xca\x3e\x75\xeb\xd7\x54\xad\xe6\x8d\xb3\x33\xa6\x54\x93\x37\x8c\x5f\xd4\x2f\xb9\xba\xcd\xd8\x01\xe1\x42\xc5\xa3\x6d\x8b\xd6\x04\x14\x87\xae\xa0\x48\x94\x06\x54\x4d\x0f\x45\x97\x33\x3c\x89\xe0\x05\x89\x23\x44\xde\x96\x30\xcf\x6a\x82\xcb\xfd\x8f\x92\x3c\xce\xf6\x7f\x1b\x23\xa4\xa6\x0c\xda\x59\xb2\xe4\xb0\x97\x4f\x5f\x16\xeb\xd2\xe6\xa3\x1f\xb6\x7c\x5d\xe5\x4a\xa5\x09\xc7\x5f\x7c\x62\x9e\x39\x76\xdd\x1a\x73\x2c\xd3\xe1\x99\x07\x6f\xec\x38\x3b\x6e\x78\xd5\xe4\xfa\x29\x4a\x88\x62\x2a\xd6\x34\xd3\x21\x68\xc8\x21\x6c\x99\x12\x05\x03\x02\x01\x9b\x86\xac\xa4\x08\x26\xf6\x43\x53\xe6\x58\xd1\x71\xf9\x98\xe5\x30\x74\xb9\xc4\xee\xb5\x42\xb5\xda\xab\xe6\x55\xc1\x7b\xba\xad\x19\xdc\xb8\x08\x9f\xdd\x7e\xb0\x7e\xfe\xa7\x8b\x06\x9f\x38\x71\xbf\xc6\x91\x65\xaf\xf5\x5e\x91\x39\xc9\x4b\x37\xb6\x27\x07\x94\x47\x86\x8c\x10\x88\x84\x2f\x80\x80\x33\x80\xe6\x79\x22\xa0\x4c\x57\xb1\xb1\x81\xcd\x88\x26\x65\x81\x88\x22\x9f\xa2\x41\xe8\xba\x69\xf0\x31\xdd\xdf\x7a\xb4\x67\xc5\x9e\x7d\xbf\xbc\xfb\x46\xa3\x8a\xd5\x16\x5e\x46\xcb\x4b\x3f\x3d\xd4\xa8\xf0\xaa\x91\xdf\xb5\x54\x27\x75\x2d\xd2\x2c\xfd\x8b\x37\x09\x75\xca\xf6\x44\xc4\x90\x16\x11\xb0\xa2\xc9\x82\xd0\x0f\x64\x03\xfb\x98\x77\xa8\x40\x10\x28\xd9\xa0\x24\x59\x20\xf4\x40\xf5\x22\x8a\x64\xb0\x48\x98\x01\x91\x86\xe3\x29\x54\xfb\x9d\x47\xe5\xef\xcf\x3e\x01\xbf\x1c\x38\xf1\xde\x88\x72\x5a\xb9\x1c\xb3\xb3\x75\x9f\xdd\xa7\x8b\x74\x49\xed\x5c\xb8\xdf\xd4\xf4\xb7\x84\x12\x5b\xb0\x25\x93\x62\xec\x06\x94\x49\xeb\x0c\x8c\xd9\xd0\x90\x1d\x8a\x26\x78\x83\xe1\x62\x3d\x60\x5d\x8e\x10\x80\xe9\x31\x80\x8e\x39\xc6\xa2\x28\xd2\xd2\xec\x34\x9a\xed\xad\x7a\x3d\xbc\x57\x7a\x46\xf5\x76\x45\xbf\xbe\xd8\x69\xd9\x84\x02\xc3\xf3\xd4\xd8\x52\x89\x5c\x49\xe6\xf9\x72\x06\x5f\xd0\x78\x27\xb9\x4c\xee\x1c\x2b\x52\xc8\x66\x69\x22\x34\x04\xe0\xb8\x0e\x09\x44\x97\xb4\x2c\x8e\x40\x31\x2d\x52\x11\xe9\xb8\x9c\x1e\xd2\x11\x29\x00\x49\xf1\xb1\xa4\xab\x08\xa4\x71\x6e\x6d\xfd\xec\x75\xbf\x1c\xbb\xbf\x7e\x78\xa3\x21\xf3\x4a\x4d\xca\x37\xa9\x47\xff\x0c\xad\xbd\x02\xbf\x6c\xfb\xe9\xc5\xe7\xd5\x75\xbd\x46\x91\xf4\xe7\x97\x09\x95\x44\xc6\x0a\x30\xa0\x14\x87\x90\x21\xa2\x00\xa9\xa6\x2c\x21\x86\x65\x39\x14\x9b\x34\x0f\x0d\x5b\xa7\x6c\x49\x02\xd8\xb5\x0c\xe4\xb2\x1c\xc1\x46\xc4\xab\xd7\x68\xff\x69\x46\x96\x9a\xd2\xb4\xe4\xa0\xff\x45\xbd\x51\x3f\x53\xeb\xc3\xcd\x4e\x35\x1b\x3a\xa7\x61\xef\x78\x62\xb6\x19\xa3\x32\x37\xab\x30\xb1\xf2\xc8\xce\xf9\xe4\xe2\xb9\x57\xbf\xbb\xee\xeb\x24\xcf\x6a\xa1\x65\xb8\x6e\xc0\xfa\x21\x8f\x48\xdb\x86\x3e\x64\x5c\x14\x90\x8a\xee\xd3\x54\x64\x06\xa2\x8e\x95\x10\x10\x3e\xeb\x70\x5a\xe0\x8a\x2e\x36\xe2\x7f\x9f\x57\x7c\xf5\xe3\x8c\xfc\xbe\xf9\xbe\xad\x63\x27\x7c\x3d\xf8\xf3\x2b\x2b\xfb\xb5\xcd\x54\x1f\xd4\xf9\xf6\xea\xa1\x11\x07\xdb\xe6\x2e\x53\x61\xfe\xcc\x4b\xbf\x7c\x98\x5c\xb1\xc9\x90\xc5\x86\x66\xb8\x80\x71\x0c\xd1\x86\x0e\xaf\xc5\xa2\xaa\x91\xbe\xe9\x92\x02\xc7\x86\x4a\xa8\x42\x35\xa2\x42\x9f\x76\x58\x87\x23\x14\x36\x82\x69\xdc\x93\xee\x3a\xbb\xd8\xe8\x3f\x1f\x5c\x2b\xbf\x8f\xbf\x3f\x61\x6f\x85\x2a\x1b\xfb\xe5\x38\x3a\xe2\xe9\x58\xf4\xed\x78\xf3\xc7\x55\x33\x4e\xfc\x99\x33\xb9\x62\x47\x11\x07\x3c\x99\x0f\x60\xc8\x18\x2c\x11\x45\x21\xa1\x22\x52\xe1\x54\xd1\x0f\xcc\x30\x88\xa1\x27\x4a\x80\x8e\x05\x8a\x86\x7e\x48\x05\x91\xad\x68\x46\x62\xb1\x4b\x1f\xa0\x3b\x6f\xc8\x33\xe4\xf3\x6e\xdf\x2c\x2b\x3b\x2f\xdb\xb3\x2e\x4c\xa3\xab\xf7\xae\x5f\xef\xf9\xa8\xf4\xf1\x6c\x0d\x27\x5f\x9a\x9c\x5c\x72\x41\x2e\x30\x1d\xc1\xb3\xc8\x10\x38\x14\x2b\x0b\x31\x24\x6d\x37\x26\x29\x9f\x88\x48\x85\x65\x18\x55\xb5\x43\x5a\x31\x22\x0e\xe8\x22\x74\x44\x31\xf6\x1c\xe2\x55\x6a\xb2\x7f\x1a\xdf\xa4\xa6\xd4\xcb\xf1\xbf\xcf\xd1\x36\xdb\x75\xbf\xca\xb0\x52\x19\x2a\xf5\xab\xdd\xfe\xea\xf8\xa5\xab\x6e\x36\x2c\xe3\x4d\x5a\xd1\xec\xd4\xce\xe5\x7d\xaa\x7f\x7c\xfc\x7c\x92\x79\xdd\x01\xcb\x21\xcd\xb1\x44\xdb\x73\x64\x1e\x44\x20\xd0\xb9\xd8\x36\x59\x92\xc6\xc0\x73\x2d\x5a\x35\x65\xda\x8c\x18\xd9\xd2\x55\x4e\x0a\x99\x10\x33\x18\x06\x89\xdd\x6b\xd7\x0a\xc7\x73\x56\xef\x90\x61\xd9\xae\xb2\xe7\xbf\x78\x0c\xa6\x7f\x31\x6b\xd4\xea\x91\x8f\x7e\xab\x30\xf6\x7a\xd7\x03\x19\xb7\xaf\x18\x7b\x29\xb9\xd5\x7e\x40\x47\xaa\x14\x4a\x62\x24\x85\x81\x15\x85\x92\xcc\xc1\x10\x2b\xd8\xf0\x30\xab\xe8\x2c\xf4\x4d\x11\xc6\x92\xad\x5b\x00\x71\x34\x16\x35\x2e\x80\x71\x62\xb1\xeb\x7e\x73\xbd\x47\xae\xcc\x35\x46\x14\xaf\xb3\xec\xbb\xfc\xd1\xb2\xb3\x9b\x6e\x4f\xef\x5b\x9b\xed\x50\x69\x3b\xca\xcf\x4b\xef\xb8\xd9\x92\xcc\x21\x0e\x80\x48\x99\x16\x0e\x0c\x5a\xd3\x64\xdb\x84\xc8\xe3\x75\x45\x71\xdd\x58\xc5\xb2\x4a\x2b\x48\xe2\x45\x15\xd1\x9c\xcd\x3a\x02\x49\x22\x0b\x69\x69\x4c\x8e\x9b\xb5\x68\x55\x68\xdb\x99\xad\x7d\xe6\xd4\x7f\x21\x54\x6d\x52\xf4\x8b\x89\x63\x7f\x1b\xd8\x19\x16\x2d\xd5\xa6\xe4\x17\xf8\xed\x26\xc5\xe8\xe4\x9a\x82\xc5\x12\x92\x01\x78\x06\x91\xaa\xea\x9a\xb1\xa2\x33\x64\xa4\x49\x94\x69\x30\x08\xc7\x81\x06\xdd\x88\x65\x3c\x17\xb1\xd0\xf0\x01\x83\xc2\x98\x25\xfe\x5e\x33\xde\xd1\xe0\xdf\x12\x2f\xd8\x7a\x74\xc9\xbb\xe3\x4e\x1e\xba\xb2\xab\x47\xc6\xad\x05\xd5\x0a\x37\x0f\x6f\xef\xd5\xea\xfa\x94\x20\x6f\xeb\x6b\x37\x5f\xbc\xd5\xe6\x51\x6a\xca\x8b\xc7\x7f\xbe\x98\x52\xfc\xe5\xf9\xe7\x86\x01\xee\x8e\xe2\x5f\xad\xee\x27\x32\x87\x5f\xff\xa6\x90\xc2\x64\xea\x99\xf3\x7c\xeb\x02\x39\x36\x95\xbe\x77\x7e\x95\x39\x7f\xc0\xa4\x97\x1e\x25\xf8\x70\x4c\xdb\x79\xf1\x61\x7f\x5f\x3b\xf1\xd7\xe7\xd5\xcf\x9a\x6a\xf1\xc6\xdb\x07\x1f\xf4\x6a\xcc\x5f\x5a\xa4\xd9\xa9\x9d\x63\x92\x9c\xa3\x93\x98\x15\x24\x2a\x46\x8a\xe5\x73\xa2\x47\x91\x04\x84\x96\xe5\x5b\x1e\x14\x63\x2d\x86\x32\xe1\x44\x1a\x1d\x04\x90\xd0\x79\x08\x0c\x91\x8a\x1d\x42\x4e\x83\xa3\x79\xfa\x80\x1b\xeb\x99\x41\xe5\x72\x95\xde\xf2\xe6\xcc\x61\x13\x6e\xff\xd1\xa3\xd3\xd3\xa5\x7d\xcf\xe7\x28\xd6\x20\xf3\xe2\x70\xf3\x83\x52\x9b\x5f\xee\x80\xb4\xfe\x5e\x5d\x32\x2b\xcf\xed\xf3\xd7\x57\x2e\xf0\xfe\xcc\xa9\x6d\x1e\x74\xe1\xe7\x1e\xe7\xbe\x7b\xfe\x4b\xc5\x11\x37\x57\x8e\xa8\x5b\x3d\xb9\x0a\xeb\x28\x41\x84\x54\x08\x24\x80\x05\x9d\x8d\x43\x8f\xd5\x18\xec\xea\xb4\x6a\x01\x9f\x01\xd0\x72\x4c\xd7\x87\x8e\x8c\x25\x0f\xf8\x0e\x82\x96\x9a\xd6\x52\x09\x3d\x38\x9a\xfc\xe5\x07\x1f\x4f\xb2\x5a\xbe\x97\xa3\x52\xcb\x75\x19\x27\x55\x99\xc1\x6e\xf6\x66\x13\x03\x6a\xaf\xad\xb9\x73\xb4\x9b\x7e\xca\xd4\xc4\x69\x8c\x27\x52\x5a\x1c\xf0\x8c\x27\x91\xac\x11\x85\x04\x69\x51\x9c\x48\x31\x34\x56\x48\x9d\xc6\xae\x1f\xeb\x26\xeb\x47\x31\x19\x63\xd1\x47\x3a\xc5\xc6\xf2\xab\x4b\x25\x9d\x7f\xfb\xae\x7b\xfb\xc7\x78\x56\xad\xac\x9b\xef\xa5\xee\xe8\x3c\xfd\xf8\xd6\xd6\xfd\x07\x3c\xc9\xd2\xbd\xd0\xf6\xee\x19\xf2\x8d\xee\x8e\x92\x4c\xc1\x6b\x63\x9a\x63\x5c\xcc\xeb\x12\x21\x79\x96\xa4\xc8\x48\xe0\x9d\x90\xa2\x50\x14\x53\xbc\x43\x2a\x34\xe6\x0d\x1f\x2a\xaa\x44\x59\x00\x51\xbc\x49\xc4\x89\x77\x55\xdb\xe6\xd7\xbf\x3d\x77\xe9\xe1\x96\xb9\x63\x1e\xbe\x76\x24\xd3\x90\x3d\x9b\x1a\x8d\xfa\xa6\xfd\xdd\x89\x07\xf2\x3f\xfe\xea\xfb\xa1\x4b\xf9\xd9\xc9\x15\x5b\x88\x64\xc2\x55\x48\x9e\x0c\x2c\x60\x07\x24\x27\x3a\x50\x52\x59\x87\x84\x14\x05\x23\x02\x72\x32\x6f\x93\x62\xac\x12\x1e\x1f\x0b\xb4\xaf\x28\x02\xe1\xbf\xba\xab\x3a\xb0\xbf\xef\xde\xfa\xa2\xf5\xd3\xbe\x7f\xf4\xda\x5d\xb1\x2e\xa6\xbb\xd7\x1a\x9c\x69\xd7\x6f\x39\x2a\xbc\xbb\xb6\xcb\xe9\xc9\x5f\x3d\xca\x9d\x64\xaa\x0b\xc1\xc1\x1c\x45\xaa\x0a\x80\xac\xa8\x52\xaa\xc3\xc9\x06\x6b\xf8\x9c\x49\x4b\x24\x81\x79\x18\x00\x83\xb0\x03\x41\x34\x74\x9e\x71\xc4\x48\x44\xff\x66\x30\x7b\x59\x39\xc6\x8c\x2d\xbd\xa4\xda\xe5\x95\x95\x6f\x7c\x7d\xa5\x48\xc1\x5b\x9f\xef\x1a\x77\xbb\xd9\xe0\x77\xe6\x3d\x79\xe3\xcc\xd5\xf1\x17\x0a\x6d\x1b\x2b\x25\xb7\xe4\x54\x39\xd3\x12\x35\xd9\x12\x43\xcd\x96\x3c\x35\x66\xa9\x88\xb5\x23\x3f\xd4\x3d\x68\x1a\x4a\xac\xea\x66\x24\xa8\x12\x52\x79\x4a\x31\x4c\x4e\x70\x49\x48\x26\x5e\xe3\xac\xf1\xd6\x8b\x55\x59\x1e\xd4\x3f\xde\x7b\x6d\xd5\xcb\x6a\x8e\x42\xf8\xee\xe1\x3a\x35\xce\x14\xba\x77\xf1\xc5\x5b\x9f\xb2\x4f\xb3\x5c\x48\x7f\xaf\x2b\x31\xc3\xbb\xcc\x49\xae\x1a\x32\xb1\x4e\x19\x86\x44\x60\x55\xb5\xc5\x98\x8d\xb0\xc0\xab\xbc\x25\x1a\xa4\x83\x54\xce\x73\x54\xa4\x43\x9e\x94\x15\xdd\xa1\x63\xf8\xaa\x72\xac\x1b\xf2\x7c\x59\x16\x3c\xeb\xf5\xb6\x43\xc7\xd5\xaf\xf5\x6c\x42\x9f\xc9\x9b\x9d\xa1\x7f\xfd\xd6\x40\xaf\xb3\xb0\xfb\xa9\x83\xfa\xbe\x24\x1f\x27\xf1\x54\x44\xea\x3a\xb6\x69\x5d\x07\xa4\x21\xf2\x9c\x17\x90\x58\x23\xa1\xc5\x47\x14\xc5\x9a\x96\x6e\x71\xb1\x82\x88\x48\x92\xa0\xc6\x09\xb4\x22\xbc\x4c\x28\xf2\xf7\x4b\x1b\xda\x96\x6c\xf3\xc5\x67\xbd\x66\x5f\xba\xa7\xd5\xfb\x60\x71\xbe\x5a\x25\xe7\xd5\x02\x39\x17\x74\x99\x79\x78\xa0\xba\x04\xd5\x49\xff\x09\xda\xc4\x15\x8d\xe4\x12\xff\x2a\xe7\x63\x57\xe6\x64\xdf\xb2\x30\x01\xb1\x11\x43\x10\xe9\xac\x4b\x49\x48\x91\x2c\xc3\xc5\x66\x84\x5c\x89\x91\x15\x9d\xb4\x7c\x5e\x7e\x75\x49\x6a\xef\x1a\xf8\xec\x4e\xa1\x26\x8d\x9d\xeb\x2b\x36\xc3\x1b\xc7\xcf\x66\xce\x54\xe1\x9d\x1a\xf7\x06\xa7\xd6\x19\x5c\x7f\xe1\x77\x27\x66\x0d\x4a\xae\xc8\xd8\xa0\x05\x13\x41\xcf\x85\x06\x2b\xb9\x64\x1c\xf8\xa6\xab\x0b\xd0\xb6\x43\x39\x20\x5c\x4d\x76\xf8\x88\xf0\x05\x44\xfb\x41\xa8\x70\xac\x49\x03\xf7\xa5\x4b\x8c\x7f\x3b\xbc\x7c\x29\x37\x2b\xbf\x61\x2e\xec\xba\x60\xe0\xbc\xb7\x2f\x7f\x51\xf1\xd2\x5b\x53\x32\xb7\xba\x3c\xe5\xe2\x85\x9b\x7f\x5c\xfd\xe4\xce\xc1\xbb\x49\x5e\xb3\x84\xba\xac\x47\x02\x50\xe4\x28\xc0\x36\x09\x10\x20\x55\x9a\xb2\x59\x87\x22\x3c\x91\x82\x16\x21\x33\xca\xbf\x0a\x1d\x9b\x24\x04\x8f\xf3\x4d\x88\x62\xef\x55\x9d\x6e\xe5\xf7\x5a\x50\xb9\xdf\xda\xe9\xe7\xc7\x1e\x9c\x74\xe1\xbd\x3a\xa5\xf6\xae\x54\xaf\x7d\x31\xac\x5f\x06\x74\x75\x52\xd9\x3f\xc7\x17\x39\x92\xe4\xf9\x29\x30\x64\xc5\xf1\x34\x4c\x02\xc6\xf0\x02\x92\x91\x4d\x3b\xe4\x90\xc9\x62\xc8\x60\x45\xd7\x40\xe4\xb8\x8a\x68\xa8\x72\x20\xc9\x9c\xa2\xd2\x1a\x82\xaf\x2a\xc7\xf0\x7c\x85\xbf\xa9\xf3\x65\x74\x3d\xcb\x37\x77\x67\x5d\xcf\xbd\x65\x48\x6d\xfa\xf2\x05\x3f\x9e\xf2\xc3\xa4\x9a\xa7\x47\x3c\xce\xb4\xe8\x41\x72\x45\x16\x48\x8a\xe0\x05\xda\xe0\x4d\x41\x8a\x74\x52\x88\xd8\xc8\x05\x9c\xea\xc7\xa6\x8a\x22\x18\xe9\x9a\xc0\x93\xb4\xc0\x5b\x88\xa6\x1d\x40\x29\xee\xff\x27\xa4\x7f\xd5\xe1\x55\x5b\x31\xea\xe9\x2a\xf1\xd6\xb3\x53\x07\xbf\x1b\xfc\x7a\xd7\xd9\x19\xba\xdf\xc9\x76\x5b\xda\x9c\xad\xc6\x98\x2e\x77\x4e\xb4\x20\xdf\x49\xf2\xa2\x31\xa1\x84\x82\x66\xf3\x30\xe6\x54\x8a\x02\x20\x0c\x04\x28\xba\x58\x52\x31\x45\x7a\xb1\x4d\xb3\x36\x11\x32\xa4\x40\xba\x24\xad\x9a\xbe\x24\x2a\xae\xcb\xbc\xfa\xd2\x5e\x83\x71\x3f\xed\x5e\xb5\xee\x7c\x59\x6a\x5c\x86\x3a\xbf\x73\xed\x27\xec\x9f\x8c\x0f\x16\x19\x74\x88\xff\x73\xe0\x8f\xa9\x39\x4f\xad\x4d\x72\x01\x28\x4b\x92\xa6\x05\x04\x29\xc9\x54\x08\x63\x17\xd1\x6c\xe0\x70\x3a\xab\xf3\xb2\xe5\xc5\x86\xe7\x7a\x20\xa6\x78\x55\x15\x55\xec\xaa\xa6\x20\x38\x91\x93\x06\x0c\x82\xaf\x55\xe1\xfa\x77\x79\xf9\xab\xc5\xdf\x33\x3b\xec\x20\x9a\x36\xbd\x42\x54\x5e\x53\x41\x74\x66\x0e\xae\xb5\x60\xd3\x59\x7b\xf8\xca\x97\xd2\xd8\x35\x67\xbb\x28\x25\x56\x96\xa9\x7b\xb5\x56\xbd\xfa\x75\x4e\x74\x32\x6f\x0c\x9a\xdb\xa7\x75\xae\xec\xcb\x7f\x7a\xba\x5e\x9c\x52\x69\xec\xbb\x49\xe6\x56\x36\x29\xd7\x8a\x99\x38\x08\xa1\xc9\x92\x2c\x89\x04\x81\xa4\x91\x18\xab\x91\xe4\x23\x06\x02\xc3\x8e\x29\x1b\x5a\x86\xed\xfb\xd8\xa0\x44\x68\x10\x46\xe2\xe4\xaa\x51\xc7\xaf\x73\xb1\x3d\x0f\xed\x6f\x9c\xba\xb8\x13\x6f\xad\xbe\x7d\xb0\x46\x51\xa2\x09\x28\x71\x30\xac\x9d\x63\x71\xa3\x0e\xb9\xd3\xbf\x03\x94\xd0\x0a\xbc\x40\x55\x43\x1e\x20\x15\x51\x16\x65\x30\x34\x07\x2d\x4d\x8c\x75\x82\xe7\x18\xc1\x51\x63\x9b\xf7\x08\x0e\x11\xb6\x41\xfb\x06\x74\x1d\x0e\x08\x44\x02\x6a\x84\x07\x0d\xa4\xc1\xb9\xff\x3a\x3c\x61\x5c\xcb\x31\x2d\x73\x64\xee\xdf\xe5\x79\x93\x3a\xeb\xdb\xc3\x7b\x2b\xb2\x6f\x7d\xb7\x3b\xb7\xec\x7c\xef\x24\x83\x9b\x75\xd6\xd5\x9c\x28\x56\x03\x83\xf3\x08\x19\xb9\x9e\x69\x51\xa1\x15\x47\xa2\x46\x39\xa6\x2c\x93\x71\xa4\xb8\x34\x11\x7a\xbe\xe4\x87\xa4\x40\x8b\x64\x02\xec\xd2\x9f\xe5\x87\xad\x69\x57\xe9\xa3\x81\xd5\xc8\xb3\x59\x0a\xe5\xe9\xd4\x6b\x41\xb9\x87\x9f\x14\xbf\x7e\x79\xfc\xc6\x45\x87\x4e\x3e\xc8\x33\xb7\x71\x92\x2d\x80\xb2\xf8\x48\x17\x69\x8f\x88\x0c\x83\x89\x29\x89\xf6\x43\xd6\xa3\x7d\xda\xa6\x0d\x24\xb9\x22\xef\x5a\x8a\xe8\x02\xca\x13\x4d\x0a\xbb\xaa\xab\x12\x66\xe2\x90\x9f\xe1\xd8\xe3\xb7\x7e\x6f\x95\x69\xcc\xd4\x4b\x15\xae\x94\x4a\x51\x7e\xe1\xae\x4f\x7b\x78\x8b\x5d\xb3\x73\xda\x4f\x3d\xba\x50\x25\x66\x1d\x4e\xae\xd8\x12\x2b\x0b\xb2\x0a\x91\x4d\xfa\x84\x02\x14\x48\x78\x20\x90\x63\xc2\x50\x24\xca\x0b\x58\xd7\x09\x0d\x06\x4b\xb6\x49\x78\x88\x88\x64\x99\x01\x4a\x44\xbc\xfa\xd2\xfa\xb7\xd3\xf6\x57\xb8\x76\xf3\xfd\x59\xc3\x2f\x7c\xf5\xeb\x8c\x5e\xfa\x6e\xcc\x7d\xb6\xfe\xa7\xaa\xe3\x06\x4d\xac\xd5\x35\xb7\xf0\x34\xfd\xab\xdc\x09\x33\x6f\x5d\x0c\x03\x89\x09\x3d\x52\x54\x64\xdd\x25\xec\x88\xf2\x0d\x17\xe2\x90\xc5\xc0\x42\xff\xca\xac\x62\x3e\x36\x00\x12\x49\x9e\x81\x34\xcf\x84\xaa\x23\x27\x06\x6b\x52\x1b\x96\x0e\xaa\x39\xbb\x70\xf6\x0b\x97\x4e\x2f\xed\x5a\x62\xe4\xd7\x19\xab\x35\xfe\x61\xe3\xc2\x2c\x73\xdb\x7f\xf4\xac\x65\x81\xad\xb5\xd2\xcf\x5b\x98\x50\x6c\xc2\x67\xf5\x50\x0a\x04\x5d\xf4\x28\x41\x61\x15\x57\xb2\xc9\x50\x63\x28\x22\x92\x68\x45\x54\x74\xd5\x65\x01\xe4\x79\x86\x71\x64\xc7\xf5\x42\xc5\xf9\x77\xb3\xe9\xe5\x82\x61\x54\xb7\x6f\x7a\x35\xfd\x68\x61\xe7\x23\x35\x16\xb2\xef\xb4\xad\xd2\xa3\xe4\xb9\xe6\xdd\x1f\xb6\xb9\x51\xe5\xf5\xaf\x8a\x6c\x7c\x56\xb0\x5c\xfa\x77\x8f\x12\xa3\x91\xfe\x8b\x45\xdd\x55\x03\x9b\x82\x8a\xcc\xb1\x3c\x8c\x78\x0e\x13\x14\xb6\x25\x0f\xab\xb1\x62\x04\x50\x64\x20\x27\xd8\x1c\x90\x69\x9e\x89\x45\x5d\x7c\xd5\x73\x9c\x2e\x3d\xcd\x7f\xb2\xa2\xed\xad\x13\x07\x33\xaf\x38\xd4\xa3\x1b\x4e\x2d\xea\x0e\x58\x7b\x51\x9f\x31\x76\xe5\x5c\xee\xb7\x67\x85\xea\x26\x57\x64\x4d\x12\x62\x12\x5a\x44\x10\x29\x26\x15\x79\x02\x07\x55\xa0\xfb\xa1\x8d\x48\x91\xb7\x22\x15\x13\xa4\x2e\x4b\xa1\x63\x99\x0e\x12\x03\x17\x42\x9d\x20\x12\xb7\x89\x2f\xcc\xfc\xa2\xcb\xa5\x9d\x95\xc7\xfc\x35\xca\x9c\xe3\xfc\x75\x24\x28\x9c\x69\xd1\x78\x4e\xf7\xef\xe7\x1e\x7d\xec\xfb\x2f\x82\x94\xf4\x77\x22\x13\x8b\x1d\xa2\x88\xa0\xa3\x90\x77\x2c\x12\x92\x94\xab\x52\x94\x18\xf0\x31\xa9\x92\x8c\xa4\x53\x94\x18\x91\x8e\x6b\x61\x85\x33\x45\x1c\x07\xae\xc1\x7a\x2f\x73\x71\xfe\xed\x3d\xea\xe5\xea\x59\xa4\xe0\xf1\x1c\x85\x8a\x74\xaf\xd3\x6c\x4a\xd6\x33\x2d\x5a\x1e\xfd\x96\xde\x5b\xad\xc0\xb1\xde\xb9\x0e\x2d\x3c\x33\x71\x48\x92\x29\x44\x6d\x0e\x79\x14\x22\xcd\x08\x69\x2a\x46\x30\x54\x09\x4b\x77\x34\xd5\xd6\x42\x4d\x14\x59\x29\xe0\x60\x6c\x53\x01\x8f\xa1\xce\x62\x87\x21\x2d\xf8\xef\x35\x84\x97\x15\x64\xf3\xcc\x0e\x8d\x72\x79\xf9\x5a\xce\x1f\x76\xd7\x7a\xf7\xd7\xa1\xc3\x3c\xfd\xdc\xb0\x39\x0b\x5e\xa3\xb2\x75\x7a\x51\x67\x5b\xed\xfd\xe9\x3f\xbc\x95\x06\x59\xab\xc8\x32\x58\x35\x24\xc3\x32\x10\x76\x69\xd5\xf4\x28\xd7\x72\x68\x99\x89\x59\x49\x54\x22\xe0\x1b\x54\x6c\x02\x01\x4b\x16\x52\xad\xc8\x12\xf9\x34\x16\xd3\x72\x54\x99\x31\xa5\x4c\xeb\xd7\x1f\x71\x75\xda\xf4\x1d\xd0\x69\x44\xd3\xfe\xa7\x76\x7c\x37\x35\xf5\x83\x73\xde\xb6\xf2\xcb\xdf\xfe\xee\x48\xc7\xe4\xfa\xe9\xc0\x97\xb1\x80\x59\xc6\xd7\x25\x22\xe0\x02\xc5\x06\xb6\xed\xc5\x98\x84\xbc\x2b\x60\x12\x59\x91\xc6\x2a\x31\x32\x2d\x22\xf4\x94\xc0\x08\x24\xf0\x1f\x14\xde\x2f\x43\xfd\xe6\x9d\xe6\x5a\x34\xfb\x22\x7b\xdb\x1a\x5f\x9e\x76\x9b\x7f\x3e\xf1\xf2\xc1\xce\xf7\xba\xb6\xdb\x17\x54\x2f\x3a\xf0\xb3\xd2\xa7\xda\x9f\x48\xae\xd3\xa3\x7d\xc0\x40\x99\xd4\x34\xc2\xc3\x62\xe0\x9a\x36\x67\xe9\xa1\xc4\x85\xb6\x15\xeb\x21\x19\x53\xd8\xc0\x0a\xc1\xf2\x92\xef\xb3\x91\xc7\x1a\x26\x1b\x79\x69\xb4\x37\x2b\xf4\x7c\xd7\xfc\xec\x57\xf0\xd3\xd1\x3e\x6b\x46\xe7\x2b\xf5\xfa\x42\x9c\x77\xe7\xa6\x15\xfd\x5f\xcc\xdd\x93\xe9\xbd\x3a\x7b\x0a\xf5\xde\xf3\x92\x15\x74\x4a\xa9\x91\xbd\xc9\x80\xdb\xf3\x0b\x19\x6d\x8e\x75\xbd\xf3\x43\xff\x4b\x57\xf3\xfd\x99\x73\xfb\xdb\xcb\x37\xcf\xd8\x90\xd7\x3b\x36\x37\xb9\x9b\x52\x9c\x10\x45\x26\xab\x38\x1a\x30\x31\xc6\x8e\xe1\x30\x3c\x61\x9b\xa4\x01\x3d\x35\xc6\xb6\xed\x58\x1e\x43\xea\x3a\x8a\x22\xd2\xe5\xa4\x50\x67\x44\x82\x4b\x80\x2d\xfa\xaa\xc4\x9d\x7e\xad\xd1\xe2\x61\xbe\xd2\x76\x6c\x2f\xdc\x75\xf7\x5f\xd9\x2f\xb6\x3f\x70\xf6\xc4\xb3\x6e\xb7\x1e\xbc\x73\xa1\xe0\xe9\xf4\xdf\x27\x4a\xa8\x4e\xa1\x16\x38\x86\x4d\xcb\x1a\x11\x32\x2e\x67\x91\x24\xc1\x3b\x91\x4f\xf1\xb6\x1d\x04\x81\x1d\x05\x06\xab\xd9\x88\x91\x7c\x92\x62\x3c\x04\x24\xac\x45\x38\xb1\x3a\x81\x85\xc5\x8f\x05\x59\x07\x2d\x2e\x75\xbb\xd6\xb9\x93\x93\xf2\x1f\x35\x97\x0c\x5a\xee\x8c\x59\xdc\x77\x7c\xf8\xd9\xd4\x69\x8f\xb2\x24\xf9\x96\x8c\x17\x13\xae\x2b\x90\x11\x1d\x73\x06\x05\xc8\xc0\x22\x39\x9b\x50\x78\xc2\x0f\xe4\x58\x12\x2c\x97\x30\x09\xc9\xd6\x2d\xce\x51\x14\x02\xc9\x0c\xf0\x5e\x3e\xfa\xfa\x77\xe8\xef\x5e\xb5\xf2\xbb\x43\xbb\x58\x5f\xde\x98\x92\xe9\xc7\xf5\x25\x4f\x14\x2b\xf7\xdd\x9a\x8e\x4d\xcb\x35\xc8\xfe\x9a\x39\x65\xce\xa9\x3f\x27\x54\x4c\xf2\xae\x07\xa6\xb8\x90\x35\x29\x10\xd1\x84\xc2\xb3\x61\xa0\x84\x4e\xe0\xc7\x5c\x28\x78\x8e\x6b\x68\x02\x94\x79\x96\x86\x02\x26\x59\x3f\xf6\x5d\x53\xa0\x90\xfa\xaa\x82\x70\x8d\xc7\x77\xb8\xce\xa0\xa3\x13\x3a\xcd\x97\x3a\xee\xfe\x75\xf0\xd4\xb9\xe5\xdb\x9f\xac\x31\xb7\x62\xea\xad\xd5\x85\xab\xda\xdd\xca\x25\x99\x72\xd2\x09\x91\x60\x29\x96\x24\x87\xae\xac\x12\x51\xec\x85\x0c\x17\x8b\xc8\x30\x42\x18\x85\x24\x88\xc4\x28\xe0\x2c\xe4\x4a\x96\x8e\xa1\x25\xca\x24\xb4\x5f\xcd\x56\x46\xce\xb9\xd3\xf9\xa7\x5a\x8d\x66\x94\xa9\xd6\x71\xa3\x5f\xc3\x39\x7c\xe8\xce\xb3\x13\xf3\x17\xf5\xcf\xb5\xac\xff\x74\x4b\x63\xa6\x25\xb9\x68\x20\x71\x00\x75\xe0\x59\xa6\x6b\xb8\x88\x8d\x9c\x40\xe7\xa2\x90\x56\xb9\x58\x93\xa5\x38\xb2\x78\x83\x20\x02\x56\x05\xc0\x0e\x18\x92\x95\xb0\x46\x72\x5e\x1a\x35\x28\x9b\xa3\x41\xdd\xdc\xd6\x82\x99\x9a\x36\x6c\x4c\xe9\xeb\x23\x66\x15\xce\xf5\xd1\x13\xa3\xe4\x85\x32\x83\xab\x0c\xe9\x70\xef\xf2\xa6\x4a\x2f\xff\xba\x72\x91\xca\x7f\xbc\xb7\xe2\x59\x9d\x4a\x15\xea\x4d\x5c\x5a\x31\xf7\xc9\x1c\x95\x32\xce\x6b\xfb\xe7\xea\xfa\x79\xb6\xef\x88\x7e\xef\x73\x43\x7a\x49\xf1\xd8\x2f\x66\x1d\x1d\x3c\x49\xbb\xb7\xa3\x86\x33\xe6\xbd\x1a\x39\x3b\xce\xc3\xf7\x7f\xbd\x39\x73\x03\x3e\xf0\x5a\xc1\xfe\x99\x0b\x1f\x48\xff\x75\x90\xc4\x67\xc8\x48\x99\x11\x4d\x82\xd0\x1d\x97\xd6\x91\xed\x20\xd5\x26\x02\x02\x53\x91\x4e\x88\x06\x74\x24\xcc\x5a\x74\x40\x62\xc0\x60\xc8\x92\x46\x20\x2b\x1c\x7a\xf5\x2b\xd6\xeb\xb3\xe5\xd0\xa8\x93\x85\x86\x0c\x6b\xf7\xe2\xe4\xb5\xed\x29\xb9\xdf\xfb\xc5\x0d\x3b\x6d\xb8\x5e\x64\xf8\xba\x43\x99\x7e\x1c\xfd\x3c\x25\xb9\x5f\x51\x71\x4d\x4b\x02\x14\xb2\x65\x52\x53\x00\x66\x4d\x4c\xb2\x1e\x56\x65\x3a\x0c\x51\xe4\x3a\xa6\x8e\x63\x40\x06\x7a\x68\x20\x15\x30\x76\x10\x31\x28\x7a\xb5\x20\x69\xf3\xe1\xbb\x68\x6f\x9e\x9d\x3d\xd7\xd6\x6d\xb9\xf7\x87\x4e\x43\xbb\xf4\x7c\xf3\xf3\x3f\xde\xca\x53\xf8\x4a\x21\xfa\x60\xee\xe7\xa3\x57\x65\x4d\xf2\x60\xd3\x10\x02\xdb\x62\xb1\xe3\x62\xda\x20\x00\x32\x18\x1c\x69\x34\xa1\x5a\x96\x66\x71\x91\x42\x04\xb2\x2e\xca\xc0\xb4\x43\x42\x21\xa1\xe9\x5a\xa1\xa6\x24\x4e\xde\x56\x5c\x2a\xdd\xe4\xb3\xdf\xcd\x72\xdb\xba\x6c\x6b\xf1\xe9\x8d\xd1\xf9\x57\x0e\x3c\x1c\xf7\x6b\x07\x5b\x47\xe6\xe2\x2d\x53\xf5\xfd\xe9\x37\xf1\x84\xce\xd4\x0a\x14\x3f\x94\x91\x82\x30\x07\x09\x55\x75\x80\x45\x13\x82\x1d\xea\x0e\x41\x0b\x9e\xe6\xe9\x01\xa9\x18\xa1\xc2\x63\x8a\x31\x2c\x1d\x18\xb4\xe5\x24\xe0\xef\xdd\xda\x9a\xb9\xfb\xc6\xda\x8e\xbb\xcf\xfb\x59\xbf\xee\x43\xed\x78\xc7\xf7\xdd\xa3\x33\x27\x74\xa0\x46\x1d\xbb\xd3\xf4\xe3\xd5\xb9\xf7\x24\xb9\x95\x81\x79\x5b\xb7\x43\xcc\xa9\x82\x81\x08\x99\xa5\x0c\x1e\x84\x82\x0f\x8c\x00\x39\x96\x4d\xea\x5a\x04\x08\x51\xf3\x44\xce\x50\x62\x3a\xb4\x05\xff\x3f\x98\xaa\x5e\x0a\x5b\x6f\x0c\x5a\x7a\xab\x4a\xe9\x37\xd7\xc8\x7d\x96\x3f\xcb\x6d\x67\xcf\xda\xb7\xdb\x6f\x6b\xde\x11\x9a\xff\x3c\x14\xae\x6b\xdc\x73\xc7\x81\x0d\x49\x2e\xfd\x68\x97\xa7\x2c\x82\x8b\x1d\x55\xe3\x4d\x9e\x36\xa4\xd0\x02\x41\x8c\xe4\xd0\xd0\x23\x11\xd0\xd8\x20\x81\x28\x47\x40\xb2\xa0\x06\x25\x03\x43\x04\xd3\xc8\x82\x72\x65\x0e\x1f\xfc\xde\xe4\xc1\x96\x9c\x65\xcd\x59\x6b\x8f\x1d\xbd\x01\x52\x8a\xe6\xbc\x38\x71\xe9\x8f\xab\x3f\x19\xa3\xc9\xf3\x1e\x7e\xf4\x92\xaf\x69\xba\xb9\xd2\x84\xef\x2b\x95\xbe\x30\x24\x75\xce\x4e\x79\xd7\xce\x12\x59\x8f\x4e\x1c\x5f\xa9\xda\xda\x66\x75\xa9\xdf\xc6\xd7\xc8\x36\xe3\xcd\xe4\x26\xd6\x58\xf4\x3d\x1b\x42\xc9\x00\x30\x08\x15\x68\x0b\x8a\x07\x02\x93\xd2\x55\x45\xb3\x74\x85\x22\x18\xc9\x94\x90\xc6\x10\x28\x70\x5c\x5b\x76\x71\xe0\x24\xf0\x35\xf8\xfb\xed\xc1\x80\xcd\x9f\x78\xcb\xbe\x6a\xb9\xec\xc6\x1b\x9f\xae\xed\x98\xe7\xc9\xba\x81\x8b\x43\x61\xe1\x0f\xcd\xa9\x22\xb7\xca\xd4\x4f\xf2\x80\xd7\x01\xaa\x4f\x23\x06\xc3\x00\xf2\x84\x01\x90\x17\x2b\x76\x08\x19\xcd\x66\x34\x59\x20\x31\x64\x50\xe0\xd2\x7a\xa8\x61\xe4\x11\xaa\xae\x73\x8e\xfb\xaa\xc8\xab\xca\xf7\x79\x77\xdc\xde\xdd\xd7\xa7\x76\x1a\x98\xb7\xf4\xb8\x9a\xc7\xb7\x9d\x96\x3f\xcf\xe0\x77\x5d\x77\x9b\xf9\xe3\x59\xdb\x11\x1b\x93\x4c\xae\xa5\x1a\x9c\xcf\xab\x94\xe6\x99\x04\x8a\x23\x3a\xe4\xa1\x11\xda\x1c\x34\x81\x14\xc8\x64\x6c\x99\x04\x0a\x22\xe8\xe8\x98\xd3\x63\x0f\x00\x44\x49\x04\xfb\xca\x3e\xd1\x3f\xad\x43\xa4\xa6\xbc\x5f\xef\x7f\x9f\x3a\x74\x9e\x4f\x98\x56\x6b\xd8\xfb\x83\x5a\x6e\xcd\x12\xed\xfe\x79\x74\xad\x43\x75\x07\x14\x68\x97\x49\x98\x57\x6c\xc2\xce\x62\x76\xa1\xdd\xcb\x92\x1b\x04\x04\x53\x17\x0d\x13\xda\x92\x15\x68\xba\x86\x3c\x9d\xb0\x19\x13\x21\x93\x03\x94\x84\x29\x47\xa6\x59\x9d\x71\xa3\x88\x72\x44\x41\x30\x24\x56\x17\xe3\x34\x4e\xce\x37\xf2\x5e\x9c\x0e\x8a\xe6\xd9\xbe\xf9\xbd\x41\x45\x6f\x15\xb9\x5c\xb7\xd8\x57\xa5\xf2\xd5\x9f\x8e\x26\xf7\x1a\xf4\x6e\x85\x67\x07\x57\xa5\xbf\xd3\x9a\x98\x0c\x48\x41\xa2\xaf\x43\xc2\xb2\x04\x11\x07\x6e\xa0\x22\x31\x08\x03\x85\x8e\x74\x6c\xc6\x0e\x13\xf1\x21\x66\x78\x36\xe0\x69\xce\xc5\x54\xa4\xf0\x36\x4c\x03\xe6\x3d\xf7\xc3\x2d\xbb\x72\xbd\x77\xfa\x45\xdb\x4a\xdf\x81\x12\x0f\xcb\x15\x78\x1a\x81\xa0\x64\x83\xc2\x6d\x3e\xd9\x7c\xfd\xc4\xee\x35\xcd\xd2\xcf\x33\x9a\xf0\xb5\x3d\xa0\x48\x86\x03\xa0\x2e\xe8\x56\x1c\xe9\x80\x8b\x04\xdb\xd7\x6c\x42\x04\x26\x42\x02\x76\x5d\xc3\x36\x24\x3e\x50\xf8\xd0\xb0\x94\x50\x30\x48\x94\xc6\x3e\x51\xa6\x35\xed\x3f\x2f\xf7\x65\x8e\x8a\x25\x8f\xbc\x7b\x69\x47\x76\xf7\xe2\xb6\xae\x37\x37\x77\xc9\x3e\xa7\xe7\xc3\xef\xb2\x52\x92\x94\x37\xfd\xd3\xca\x84\x62\x9b\x30\x30\x35\x9d\x45\x32\x34\xe4\xc0\x54\x45\x55\x54\x63\x83\x93\x7c\x8e\x73\x82\xd0\x76\x48\x97\x61\x21\x92\x02\x4a\x34\x18\x28\x30\x9c\x1e\x70\x7f\x17\x03\xff\x0d\x50\xf9\xa7\xa5\x99\xd4\x94\xd7\xbe\x19\x94\xe1\x65\x80\xca\xd4\x51\x45\x66\x35\x79\x3e\xe6\x8d\x03\x95\xdb\x57\xc8\x58\xf6\xc4\xe4\xb1\x2b\x3b\xb4\x3b\x92\xe7\x97\xb6\xf5\x1a\x7e\x58\x6a\x47\x9f\xb9\x07\x93\x1b\x3b\x9c\x80\x0c\x59\x46\xf7\x58\x56\x46\x66\xa0\xd8\xbc\xad\xc9\x01\x1b\xb9\x8c\x80\xf9\x28\xa2\x28\x45\xb0\x90\x18\x72\x86\x1f\x19\x4e\xe0\x91\xaa\x10\xa5\x41\x59\x5f\x74\xd3\xaa\x85\xa7\x3f\x1a\x56\xb1\x69\xb7\x22\x1f\xe5\x50\x33\x59\x1f\x34\xca\xfe\xbd\xfa\x7d\xc3\x4b\xb9\xba\x2d\x0c\xb7\xef\x7a\x7d\x67\x72\x3f\x8e\xe6\xfb\x1c\x29\xc8\xc0\x82\x9a\x15\xfb\xa2\xa2\x91\x80\x03\x98\x71\x65\xde\xa4\x29\xde\xa1\x85\xc8\x35\x18\x03\xc4\x3c\xc2\x01\x19\xb3\x02\x27\xa4\xa1\x53\x5a\xa3\x36\x52\x99\x25\x33\x61\xb3\xcf\x47\xde\x9a\x7d\xe5\xf3\x1d\xce\xbd\x71\xfc\xc5\xa9\x65\xc7\x95\xca\x5d\x2a\xd7\xa3\x0b\x61\x72\x4d\x01\x58\x58\x25\x62\x96\x62\x39\xc2\x10\x5c\x95\xf1\x2d\xc6\xd2\x19\xd2\x95\x20\x23\x09\x58\x07\x51\x2c\x07\x06\xe9\x7b\xb1\x4a\xf1\x21\xf0\x18\x48\x7a\x30\xb1\xd8\x3f\x1f\x1d\x67\xcc\x3a\x3f\xa9\xd0\xee\x83\xe1\xc8\x45\xdb\x96\xe6\x3a\xf5\xec\x78\x6a\x86\x5a\x35\xe6\x7d\xf6\xfe\xe0\xc6\x0b\x1a\x75\x1b\x9e\xe4\xee\x90\xc5\xeb\x40\x02\x31\xcf\x10\x02\x1f\x30\x1e\xe2\x75\x4f\xa6\x7c\x9f\xe4\x28\x9f\xe4\x15\x5a\x95\x0c\x3b\xe2\x0d\x89\x0b\x09\x81\xa5\xd8\x80\x8d\xfd\xc4\x62\x6f\x9d\xf5\xb4\xa5\xb5\x3a\xef\xc0\xcb\xf6\x96\x26\x19\x73\x66\x59\x5e\xb8\xf5\xd6\x06\xd5\xbb\xee\x1a\x16\xf5\x5e\xd2\xbd\xfd\xb5\xb5\xb3\x92\x1b\x7f\x75\x8d\xe4\x44\xd7\x26\x65\xcc\x58\x38\x76\xb4\x18\xa9\x0a\x19\x68\xbc\xae\xf3\x82\x07\x18\x45\xa5\xf5\xd0\xc2\x88\xa7\x6c\x0c\x19\xc3\x82\x88\xfb\x5b\xb7\xff\xfb\x94\xcf\x3f\xcd\x0b\x53\x1b\x12\x19\x06\xbd\x1c\xcb\xaa\x3d\xab\xf5\xe0\xd6\xde\xd0\x6b\x2c\xfc\x5e\x60\xc8\x5b\xcb\xdb\xd5\x1d\x37\x25\xff\x96\x1a\x79\xb6\x1c\x2e\xf9\xc1\xe4\x0b\x05\x77\xf5\x4f\xee\x9f\x14\xdc\x38\x40\x81\xab\x11\x3c\x1f\xf9\x50\x05\x16\x05\x10\x4f\x22\x59\x62\x75\xc9\xf2\x24\x8a\xf0\x88\x30\xc4\xd0\x95\xc9\x18\x42\xd5\xa3\x62\x98\x06\x04\xff\xe1\x47\xed\x3b\xb6\xac\x52\xa8\x43\xf7\x26\x3f\xb7\xdd\xbc\xbf\x72\xfd\x1e\x6d\xdb\x8e\xcf\xd1\xb5\x00\xd3\xb9\xd1\xcc\x8b\xa7\xee\x65\xe0\x92\x8c\x65\xb7\x5d\x57\xa4\x55\x03\x43\xd2\x75\x5c\x4f\x31\x24\x45\xc5\x06\xe6\x55\x6c\xaa\x34\xa6\x6c\xde\xd3\x05\xc3\x94\x42\x26\xb0\x64\x16\x19\x2e\xf6\x50\x62\xb1\xdf\x9e\x52\xf4\xcb\x5c\x7b\xb2\x85\x3f\x05\x8f\x52\x8d\x2c\x59\xc7\x9c\x6f\x90\x73\x42\xf9\xb2\x07\xd7\xbd\x3d\xe9\xfd\x7e\x87\xa7\x76\x4c\xbf\xd8\x89\x63\x99\x64\x3b\x02\xc9\x48\x8c\xca\x86\x66\x64\x98\x88\x37\x39\x83\x24\x05\xcf\x42\xb6\x65\xf8\x3c\xe5\x04\x82\xa4\x7b\x8c\x1d\xba\x06\x72\x91\xcd\xea\x5c\x62\x4b\x08\xba\xed\xe3\x5a\xb7\xdc\xb1\x1a\x3d\xab\x79\xf4\x40\x97\xed\x93\x4f\x7a\x7f\xf5\x88\xb3\xcc\xf8\x20\x6b\x93\x86\x23\x2a\xac\x29\x94\x7e\x62\xf5\xc4\xb1\x8c\x07\x8c\xca\x98\x6e\x24\x30\xbc\x1a\x47\x5a\xa0\x70\x24\xc1\xcb\x0e\x8c\xa8\x08\xb3\x51\xc4\x60\x99\x50\x65\xca\x0e\x6d\xce\xf2\x3c\x87\xf5\xa2\xbf\x11\xb9\x9b\x5e\xff\xbf\x75\x48\x53\x53\x72\x66\xc8\x58\xef\x65\x53\x28\x1a\x8f\xbc\x3b\x7f\xfa\x80\xf9\x23\x33\x0e\xbe\xc3\xb7\x39\xe3\x1c\xda\x3c\xa6\xdd\xc3\xbf\xf2\xb6\x90\x4f\xe7\xba\x7e\x6d\xe2\xa7\x85\x92\x5b\x28\xbb\x8c\x8c\x44\x46\x95\x8d\x00\x62\x8d\x04\xd0\x13\x69\x1c\x46\x98\x66\x58\x10\x13\x82\xa8\xa9\x32\x4b\x1a\xae\x4f\x93\x0a\x61\xb1\x7a\xe8\xa9\x44\x1a\x70\x96\x52\xf9\xe5\x6c\xef\x8d\x1c\x75\x7b\x69\xcb\x51\x1b\xee\xf5\x38\x6f\xb5\x2c\xd3\xbe\x5e\xfe\x41\x8d\xc9\x39\xb9\x47\x6f\xce\x71\xf8\x45\xae\x24\x9b\x82\xc4\x00\x4d\xe7\x23\xca\x85\x10\x71\x81\x68\x21\x92\x0a\x4c\x83\x32\x34\x91\x94\x15\x9a\xc1\x40\xa6\x02\xcc\xc4\xa6\x03\x55\xdf\x36\x74\x02\xe2\xc4\x0c\xe1\x35\xbb\xb6\xfa\xe3\x99\xb0\xb6\x3c\x35\xa4\xff\x9b\x7f\x64\xcd\x34\xf9\xf0\xe1\x32\x7f\xf6\xfd\x71\x14\x8e\xbb\x7c\x35\x3a\xb7\x7b\x7c\x55\x72\x75\x2a\x22\x39\x51\x8a\x6d\x0b\x04\x2e\xf6\x20\x23\xa9\x3c\x1b\x9a\x56\x10\xf9\xbe\x0d\x08\x15\xf2\x8c\xcd\xdb\xac\x23\x84\x92\xa7\x22\x97\xf6\x21\x88\x13\xb0\xc3\x1e\xdf\xd7\xf8\x9d\xd6\x6f\xa2\xc6\x6b\x3f\xdd\xd4\xf5\x44\xaf\x3c\xb3\xab\xfc\x3e\x75\xce\xc6\x6f\xc9\x62\x83\x47\x76\xee\x5c\xee\xd8\xfd\xf4\x2f\xec\x24\xde\xb0\x20\x69\xe0\x02\x83\x26\x34\xd5\xa0\x05\x93\x8c\x15\x8e\xd2\x39\x1a\xe8\xac\x63\xc5\x3e\x14\x65\xac\x99\x3e\x00\x10\xe9\x34\x87\x09\x82\x65\x85\x34\x60\x5a\x1f\xee\x2d\xda\xb4\x79\xab\x01\x3b\xd7\xb7\xda\x78\xba\xef\xa0\x25\x65\x26\x5f\x5c\xf2\xd5\x38\xba\x59\xc6\xe6\x7a\xb7\x2f\xf7\x76\x1f\x92\x7e\x84\x77\xc2\xf0\x8b\x15\xcd\xe3\x42\x1f\x1b\x9a\xa5\x1b\x96\xc3\x70\x84\xcf\x58\xaa\xaa\xd1\xba\x20\x01\xda\x40\x3e\x25\x04\xbe\x49\x10\x50\x13\x65\x4b\x30\x21\xa7\xfd\x9d\x35\xfc\x77\x1c\xfb\xa7\x9e\x63\x6a\xc3\xcc\xf5\x4a\xbe\x6c\xbc\x75\x16\xfc\xbc\xa6\x5d\xd1\x8f\x32\x74\xc8\xf8\xf9\xa5\x3a\xf8\x56\xee\x26\x6d\x52\xfb\xf4\xac\x93\xef\xd6\xed\x77\x40\xcf\xd6\x47\xe6\x2d\x4e\xee\xb7\x61\xb1\x24\xdb\xd0\xd3\x23\x9d\x8f\x6d\x49\x66\x44\x8b\x64\xa0\x28\xd9\xa6\xe5\x49\x74\x14\xc8\x01\x45\xd3\x94\x63\x13\x6e\x10\x47\x82\xec\x23\xc1\x4d\x03\xbb\xbb\xe1\x93\xe9\x1d\xef\xb7\x0e\xd8\xa8\xc4\x0f\x13\x1b\x76\x1d\x9e\xbb\x4e\xa7\x1f\x6e\x36\xcd\xd8\x60\xd7\x04\xf7\xa7\xd7\x63\x8e\x4a\x7f\x0b\x34\xf1\x5e\x06\xed\x03\x9d\x8a\xb0\xa5\x4b\x7e\x40\xcb\x86\xcd\xd9\x08\x50\xa2\xaf\xd0\x02\xd0\x25\xc6\xc3\x2a\x09\x29\x32\x8c\x1d\x4a\x8a\x7d\x1f\x63\x90\xd6\xc1\xcf\xa1\xfe\xe2\xa3\x2d\x36\xbd\xff\x68\xfc\xa8\xc5\xc4\xdb\x9d\x16\x09\x8f\x46\x57\x9b\x53\x33\xc7\x92\x05\xc1\x07\xcf\x46\x7f\x3a\xab\x54\x92\x5b\x13\x41\xec\xd8\x32\x11\xb8\x1e\x49\x9a\x32\x6b\x4b\x36\x47\xc4\x96\x14\xfa\x40\xd6\x02\x56\x20\xe9\x48\x61\x4d\x82\x0c\x55\x33\x90\x75\x68\x42\x8e\x02\x69\xe0\xd2\xab\x16\x1c\x32\x6c\x72\xfb\xaf\xb3\xef\xcb\x3e\xf8\xcc\xd4\x7c\x15\xee\x1f\xac\x7f\xb2\x35\x48\x2d\x73\x37\x65\xcf\xf2\x19\x7d\xbb\x3f\x4b\xff\xa5\x8d\x84\xed\x09\x3b\x04\x48\x34\xc9\x88\x57\x4d\x36\xd4\x69\xe4\x6b\x0e\xa5\x3a\xd0\x60\x42\xe4\x11\x94\x20\xf9\xae\xa3\xc5\x4c\x6c\x29\x9e\x43\x4a\xaa\xa9\xc2\xff\x60\xf0\xfd\x6f\x4b\xf8\xa7\x7e\x7a\x6a\xc3\x3c\x99\xf3\xbc\x6c\x09\x77\xef\x3e\xfa\xe3\x89\xe1\x97\xde\xdf\x8f\x2a\x5f\xf3\xd3\xef\x1b\xbf\xb5\xe1\xf7\x36\x56\xb7\xe1\x7c\xbe\xef\x2b\x7e\xfe\xf8\x7c\xdd\xf4\xdf\xfb\x4c\x4c\x12\xa2\x51\x1c\xc0\x1a\x45\x2b\x96\xc5\x43\xd1\x72\x4d\x4a\xe7\x75\x81\x82\x84\x10\xc5\x3e\x88\x49\x9d\xd6\x19\xd9\x32\x02\x3d\x90\x28\x07\x09\x26\x4f\xa4\x91\x63\x6c\x2e\x50\x6d\xf2\xae\xf1\x99\xe6\xee\x5b\xdc\xa8\x7e\x8e\x2a\xc5\x88\xb2\xf3\x3b\xfd\x7e\xef\x97\x23\x17\x2b\x9f\x1e\x54\x60\xbf\x99\x9a\xdc\x30\x16\xd2\xb1\x88\x15\x55\x94\x44\x3a\x72\x62\xe4\xb8\x26\x6b\x62\x21\xd6\x0c\xe0\xd8\x14\x43\x98\x84\xe3\x52\x9a\xef\x99\xac\x84\x74\x47\x67\x3d\xec\xa6\x01\xdd\xed\x7d\xa9\x63\x8b\x9b\x17\xac\x2a\xa5\x5b\x90\x76\xb8\xa8\xfd\x8c\xa2\x7f\x8d\x29\xfc\x71\xc7\xe2\xdd\xd4\xca\x9f\x2c\xbe\x3a\xbf\xc6\xef\xc9\xb5\x04\xa4\xb0\x04\x12\x78\xd1\x75\x65\x59\x63\x2c\x57\xe6\x5d\xca\x13\x18\x57\x8e\x95\x88\xd3\x90\xa1\x21\x40\x51\x01\xe7\xa8\xa2\x07\x28\x9b\x23\xc5\x28\x8d\x44\xf4\x8b\x27\xab\xfe\xac\xdd\xbc\x71\x85\x25\x35\xaf\x14\x19\xf3\xa5\x7a\xd4\x3d\xbf\xaf\xcd\xce\x93\x9b\xdf\x6a\x77\xa6\xe8\x13\xb6\x61\xdf\x4c\xc9\xb5\x84\x90\x96\x18\xcb\x0e\x11\x60\x38\x8d\xb3\x55\xc8\xf2\x9e\x2b\xeb\x5c\x1c\x32\xac\xce\x85\x21\x24\x74\xc3\x8d\x25\x5e\x65\x60\xe8\x3a\x96\x24\xc6\x51\xf8\x3f\x96\xf0\x7b\xb6\xff\x5b\xb7\x37\x35\xa5\x5e\x86\xc6\xff\x8b\xcd\xed\xc6\xa1\x9d\x87\x8e\xcc\x6a\xfc\xac\xd9\xd1\x6b\x45\x7f\xf5\x3a\x6f\x3f\xdd\xfa\x70\xcd\xdb\xe6\x97\x1d\x9e\xc3\xed\xeb\x4a\x57\x3f\x91\xe4\x39\x32\x32\x08\x96\xa5\x58\x56\x90\x09\x9a\x15\x19\xda\x35\xc2\x48\x0c\xe3\xc0\xd6\x79\x45\x73\x49\x0b\x0a\x9e\x07\xa1\xa4\x13\x1a\x42\x3e\xe3\x20\xf7\xdf\xa3\x8f\x57\x4d\xa1\x7e\xd1\x9b\xd3\x82\xec\x65\xdb\x56\xdc\x57\xf0\xcb\xbc\x59\x77\x5c\x18\xb4\x2a\xf8\x73\xc9\xf4\xc2\x85\x7e\xa8\xcb\x0b\xd5\x72\xae\x5c\x99\xe4\xc2\x53\x08\x43\x42\xf4\x04\x8f\xb4\x0c\x92\x31\x84\x58\x8f\x2d\x49\xf0\x09\x2f\xd2\x63\x89\x73\xac\x58\x0d\x14\x07\x59\x81\x2c\xc7\x02\xb0\x78\x41\x70\xc9\xc4\x19\xdd\xcc\xab\x67\x53\x70\x8f\xda\x19\xbf\x69\xfb\x41\xf5\x3b\xe7\x86\x5f\x28\x3c\x6f\xc3\x89\xd3\xb9\xbe\xfa\xfe\x43\x9b\xbb\x98\x81\xb9\x97\xfe\x15\xb2\x84\x3a\xe5\x42\xd5\x92\x58\x16\x71\xd0\x09\x34\xc1\xb3\x28\xe4\xb1\x08\x4b\x16\xf0\x25\x0c\x81\x4b\x8a\x62\x00\x04\x12\x3b\x26\x6b\x72\xac\xc1\x2b\xb4\x26\xbd\x3a\x47\x7e\x7e\xf9\x60\xbd\xe2\x1b\xca\x6e\xdd\xb0\x4b\x3c\xe9\x6f\x6b\x3c\x67\x64\xa7\x2f\xa6\xf4\xd9\xf3\xe1\xb4\x91\xbf\x4c\x4e\xf9\x60\xcd\xa0\x24\x5f\xa7\x93\x30\x29\x00\x59\x54\x45\x42\xb1\x42\x09\x8a\x48\x53\x0c\xa0\xfa\x6a\x20\xa9\x06\x30\x75\x2d\x12\x63\x0e\xf9\x50\x0f\xd5\x50\x70\x75\xe4\x31\x30\x0d\xeb\xed\xd3\x66\x6d\xc1\xcd\xb1\xfa\x7a\x99\x1f\x9a\x95\xdd\x04\x6a\xc3\x21\xe5\x8e\x77\x3b\xdd\x73\x58\xa1\xc5\xad\x3f\xba\x98\xbb\xe3\x79\x21\xb9\x0a\x12\xcb\x2a\x52\xa1\x40\x05\xae\x48\x18\x94\xe8\xd2\x01\xe7\x41\xec\x18\x6c\x8c\x2c\x00\x08\x53\x35\x6d\x06\x91\x31\x70\x24\xd7\x93\x02\x4b\x67\x11\x9d\x58\xec\x53\x27\x3f\xed\x52\xb4\x77\xf7\x3b\xe3\xc6\x0c\x5a\xb1\x76\xf4\x6f\x1f\x14\xcc\x32\x5c\xb3\xca\xf4\x32\x5a\x3c\x18\xe5\x8c\x88\x84\x5b\xc9\x7d\x6d\xa8\xc9\x3a\xc5\x5a\x5e\x44\x8b\x4e\x64\xf1\x8c\x28\x11\x36\xcb\x62\xdf\x43\xba\x46\x63\xcd\xe7\xa0\x4d\x6a\x80\x21\x24\x5a\xb2\x38\xd5\x10\x1c\xe2\xef\x5e\xc3\x9f\xcd\xfe\x7f\xa7\xbf\xc9\x96\x9c\xed\x32\x04\xed\x86\xd4\x2e\x23\x7f\x0d\xd6\xa7\x6c\x6c\xf1\x9d\xf7\xc5\xec\xbe\xd3\x7f\x23\x26\xbe\x71\xf1\xf9\xc7\x6a\x6a\xca\xc0\x17\x2f\xfe\x7d\x11\xf6\xef\xbf\x69\x0c\x29\x5e\x15\xfc\xde\x60\x26\x91\x72\xb8\xd1\xa3\x1b\x59\x3b\x97\x2c\xf3\x5a\xc6\xe3\xf7\x6b\x37\x59\xd0\xa1\xc0\x89\xfb\x7f\xdd\x4d\xee\x61\x49\x20\x11\xac\x18\x92\xa6\xc8\x52\x02\x64\xa1\x19\x21\xca\xd1\x65\xd7\x82\x56\xc8\xc6\x8e\xa3\xaa\x8c\x8d\x90\xab\xeb\x04\x52\x95\x58\x27\xa1\xe9\x0a\x72\x62\xd0\x87\xd4\x2c\x67\xa9\x5f\x84\xd3\x6f\xa1\xe2\x78\xef\xfb\xf5\x72\xec\xee\x22\x9d\xaf\xd0\x69\xea\x88\x2a\x23\x32\xf5\xb8\x0a\x5a\x96\x68\x9d\xe4\x65\x28\xc1\x95\x0d\x53\xb6\x62\xd5\x62\x14\x1c\x28\x54\xe0\xc4\x40\x25\x35\x83\x65\x54\xd7\x20\x35\x43\x09\x5c\xd7\x51\x29\xd5\x8c\x0c\x59\x8d\x75\x96\x48\x00\x19\x3b\xf5\xd1\x3b\x64\xe9\xa7\x23\x98\xd3\x53\x1f\x1d\x7c\xa3\x6c\xdc\x76\xf1\xef\x79\x7e\xef\x94\xf3\x66\xcd\xcf\xd6\x2d\x79\x63\x51\xe9\x21\xb5\x92\x1c\xc5\x20\x2f\x12\x3c\xe0\xa9\x7f\x15\x8d\xa4\x0d\x3d\x60\x2a\x88\x22\x59\xc5\x40\x80\x34\x6d\x81\xd0\xb1\x40\x33\x22\x41\x7b\x24\x4d\xc3\x48\x81\x42\x02\xd0\xc7\x6d\xb7\x50\x54\xbc\x90\x58\x7c\xfe\xc1\xd7\x2b\x94\x8e\xf4\xba\x79\xaf\xe6\xf9\xb4\xe9\x6f\x47\x8a\xbe\xdf\xfc\xa7\x73\x47\x9a\x74\x4f\xff\x35\xa3\xc4\x35\xa4\x2c\x08\xae\xaa\x53\xa2\x29\x03\x35\x44\x8c\x6a\x0a\x62\xec\x62\xdd\x66\x1d\x2c\x9b\x5e\x44\x0b\xb6\x11\xea\x22\xd6\x63\x2a\x64\x75\xc6\xd7\xb4\x34\x08\xaa\x7b\x3d\x29\x9c\xef\xad\x53\xd9\xfb\xa0\x2c\xa7\x7a\x8f\xb8\xde\xa6\x56\x1c\x97\xe5\x6f\xff\xde\xf2\x83\xb3\x5b\xdc\x94\xc1\x1d\x0b\xa7\x9f\xfd\x35\xa1\xd8\x3a\x2b\xba\x86\x10\x4a\x8c\x88\x58\x5d\x56\x6c\xdd\x57\x10\xf2\x44\xc0\xf2\x34\xed\x51\x86\x6d\x04\xac\x60\xc4\x14\x4b\xab\x86\xe9\x2b\x0c\x8b\xd5\x04\x2b\xef\x83\xb6\xb6\xdb\x7e\x98\x7a\xd1\x69\x74\x5b\xf2\xdb\xd6\x55\xc6\x2c\xdf\xf0\xc3\xc9\x52\x87\x4b\x6e\x7d\xb1\x6a\xcc\x3e\xb9\xea\xe1\x6d\xef\x25\x37\xf8\x33\x22\x81\x78\xd6\x63\x69\xc8\xfa\x1a\xcb\x08\x92\x45\x8b\x7e\x4c\x7a\xaa\x20\xd2\x22\x4f\xd9\x0c\x17\x87\x30\x82\x66\xa8\x62\xc8\x33\xb4\x03\x49\x2f\xf1\x36\x56\xe6\xdc\xe7\x6f\x9e\xea\xf0\x25\x71\xac\xee\x9e\x71\x85\x73\x7e\xe7\x51\xbd\x2a\x4e\x5f\x75\xb1\xe9\x89\xaf\xfa\xb4\x6f\xd8\xe2\xd3\xe7\xe9\xc7\x5e\x25\xd4\x69\x18\x47\x58\xa3\x65\x4c\x18\xae\x6e\x5a\xa1\x82\x30\x63\x43\x68\xd1\x06\x0b\x18\xca\xe7\x6c\x92\x13\x49\x28\x06\xac\x82\x15\x37\xa4\x7c\xe0\x70\xd4\xab\x3a\x9d\xb7\xfc\xa1\xb3\xab\x0b\xb5\x7f\x9c\xed\xf0\x85\xce\x63\x4e\x7c\xe4\x7c\xbb\xe5\xf0\x4f\xe5\xeb\xac\x23\x4f\xcb\xce\xd1\x33\x77\xdd\x24\x5f\x4e\x8b\x48\x83\x73\x19\x15\x19\x9c\x44\x09\x01\xe5\xea\x98\x90\x24\xd7\x0a\x75\x91\xe7\x04\x1c\xdb\x44\x40\xc5\xd8\x15\x04\xa8\x29\x2e\x85\x65\x4a\x8c\x12\x20\x82\x3a\x67\x5a\x5d\xaa\xdb\x7d\xee\x8d\x8e\x7f\xb6\xdc\x38\x2f\xd3\x85\xf6\xb7\xcb\x99\xcd\xe0\x0a\x5e\x6e\x91\xed\x2b\x6d\x4f\x93\x37\x67\x26\xd7\xd9\x01\x31\xd0\x25\x92\xc7\xbc\x01\x19\x3f\x74\x24\x0c\x00\xf4\x29\xde\xc6\x8a\xc8\xf2\x82\x44\x98\x3a\x8d\x79\x4d\x8d\x82\xd0\x0a\xa1\x2b\xdb\x11\x48\xa3\x69\x56\xfc\x47\xdc\x76\xef\x9c\x0f\xab\x4e\x5f\x51\x7f\x5f\xa5\xe8\xcd\x86\x0b\x37\xdd\x19\x92\xf3\xcd\x21\xcb\x0b\xf1\x4d\x5a\x56\x6d\xd3\x22\xb9\xde\x03\x70\x21\xb4\x42\x5e\x20\x95\xc8\x0e\x75\x3e\x84\x16\x74\x28\x2b\x22\x63\xc2\xe6\xb1\x6d\x9a\x64\x1c\x39\x26\x45\x00\x57\xe1\x43\x81\x55\x0d\x4b\xf8\x8f\xdb\x14\xff\x23\xf2\x92\x7c\x0d\xdb\xdf\x3f\xf0\x7c\xc5\x83\x0b\x17\xf6\x9e\x38\x3f\xe4\xaf\x32\x3f\x7b\x4f\xd4\x0d\x7b\xaf\xb5\xf8\x26\xdb\x88\x21\x07\x61\x92\x89\x4d\x59\xce\xf1\x75\x3b\x22\x18\x02\x88\x74\x2c\x03\x3a\x86\x86\x44\x40\x55\x45\x9e\xab\x03\xd2\xb2\x15\x60\xf8\x84\x44\xc6\x02\xf2\x43\xde\x92\x1c\x37\x8d\xf5\x23\xb7\x54\xd3\x86\x05\x56\x2f\x6d\x9f\x6f\xef\xfa\x32\x42\xed\xb3\x50\xa8\x3a\x45\x9c\x38\xcc\xf9\x7a\xd4\xd4\x2d\xdf\xc3\x05\xbb\x76\x27\x37\xc5\x12\x43\xdd\xf3\x74\x1b\x6b\x9c\x8b\x54\x57\x14\x65\x56\x06\xbc\x1c\xcb\xb4\x48\x4a\x8e\xe7\xd1\x86\x05\x79\xca\x22\x4d\x9d\x8c\x4c\xce\x22\x68\x3a\x11\x80\xfa\x9b\x62\x9d\x2f\x6c\x52\x1e\xb4\xf9\x6e\xf5\xf5\x4f\x9a\x96\xfb\xf4\xb7\x2c\xf3\xfa\x4c\xb1\x5b\x0e\xa8\xb8\xf2\x64\xb6\xd2\x7d\xe7\x5c\x7e\x3f\xb9\xca\xa1\x58\xc0\x01\x3e\x88\x6d\x55\x26\xa0\x1f\x3b\xae\xe5\x59\x26\xad\x04\x00\x6a\xa6\x20\x42\x06\x89\x1c\x47\xf3\x92\xee\x45\xbe\x2d\xc8\xbc\x08\xff\x6d\x86\xaf\x86\x96\x77\xf3\x2e\x6a\xff\x5e\xf5\x2f\x32\x4c\x5d\x59\x21\xa5\x16\xd3\xe3\xc0\xfa\x96\xdf\x5c\x68\x77\xac\xdb\xee\x62\x97\x77\x6d\xfa\x6c\x98\x96\xe4\xfe\x35\x54\x04\xac\xd3\x6a\x8c\x18\x5b\x95\x29\x96\x71\xb5\x38\x52\x2d\x89\xc7\x31\xeb\xc4\x1a\x08\x00\x25\x92\x8e\x19\x98\x26\xc7\x4b\xa6\x4c\x05\x71\x94\xe0\x38\xc6\x9e\xcb\x67\xcf\xe5\xca\x96\xa1\x43\xed\x3c\xb9\xa2\x5d\xe5\x0b\x1d\xfa\xf6\x83\x0d\xdf\x86\x0f\x0b\x1e\xa9\x73\xe3\x4c\xb5\x2b\x3b\xa3\xf4\x03\xa8\x13\xea\xb4\x41\x8b\x11\x65\x50\x2c\x4b\xb3\x9a\x6e\xc8\x98\x74\x18\x55\x54\x6d\x92\x23\x01\x10\x1d\xc1\xb0\x54\x0b\xda\x1e\x90\xb8\xd0\xb2\x15\xec\x30\xc0\x33\x12\xeb\x74\xab\x5b\x45\x07\x83\x1d\xdb\x2b\x2d\x6b\xb3\x70\x44\xa3\x8a\x9d\x3e\x3f\xd8\x3a\x7f\x89\xf7\x36\xcd\xcf\xfb\xee\xa4\xaa\x57\xa2\xbc\xd7\xd3\xbf\x09\x9e\x18\xd6\x1b\x86\x9e\xcd\x31\x61\x4c\x19\x8e\xe1\xfb\x44\x60\x89\x0e\x6d\x60\xa4\x48\x96\x14\xfb\x82\xa8\xba\xd8\x11\xa0\xec\x60\x01\x84\xa6\x49\xb3\x41\x2c\xbe\xea\x3d\xe6\xd6\x6a\x78\x2e\x2c\xf2\x0e\xaa\x9d\xeb\xe9\x9d\x66\x05\xbe\xdd\x75\xfd\xec\x07\x33\x26\xff\x7e\x7d\xaa\xf9\x62\xf7\xeb\xd5\x4f\xd7\x4a\x3f\x1e\x22\xf1\xf2\x7a\xc0\x04\x32\x23\xb1\xb4\x19\xaa\xbe\x00\x42\x0d\xb9\x90\x91\x29\xc3\x14\x05\x83\xf7\x05\x2b\x64\x68\x95\xf1\x49\x89\x8f\x81\x47\x73\xa6\x6f\x46\x69\x90\xe5\x9f\xfb\x65\xd5\xb4\x36\x47\xb3\x1c\xf8\x7e\xe4\xda\x1e\xea\xce\xd5\x79\xc6\x95\xe7\x87\x75\xff\x28\x57\xb3\xf9\x9f\xd5\x2e\x5b\x7f\xb7\x48\x25\x19\x8d\xcc\x6a\x8a\xe2\xbb\xbc\xc6\x59\x06\x0b\x20\x30\xbd\x48\x26\x35\x1f\xc7\x31\x03\x48\x68\xd2\x50\x92\x29\x13\xb3\x8c\xa4\x05\x8c\x11\x8a\x32\xa9\xa6\x71\x08\x62\x7c\xe7\x2b\x8d\x7f\x5c\x30\xfe\xfc\xbc\xcd\x2b\x97\xed\x12\xcf\x96\xa5\xeb\x3c\xac\xde\xb9\x51\xaf\x52\x17\xae\x17\x2d\xb2\xed\xc7\x6d\xef\x24\x79\x13\x90\x55\x09\xc1\xa2\x25\x91\x24\x28\x5f\xf4\x48\xec\x90\x22\x4b\x0b\xac\x66\x5b\xb1\x44\x99\x04\x67\x28\x3c\xef\xd2\x30\x0e\x9c\x90\x35\x54\x8e\x20\xb8\x34\x36\x01\xdb\x6c\x1d\x9d\xda\x64\xc1\xef\x4b\xbb\x7c\xb3\xb6\x76\xa9\xab\xcb\x8b\x66\x6c\x3b\xec\x5c\x67\x4e\xbc\xda\xbf\xc1\xd5\xda\x5d\x9a\x75\x39\xfb\xd2\x9f\xcc\x8f\xfe\xf8\xe5\xbb\x73\xef\x6f\xcd\x28\xed\x8a\xbf\x9f\x73\xd0\xa4\xb3\xe4\xaf\xba\xba\xdd\xa6\x62\xb3\x06\xf4\xec\x55\x94\xac\xf9\x6d\x92\x1b\x8d\x84\xea\x87\xc0\xb7\x20\xaf\x12\x81\x84\x34\x5f\xc2\x4c\x1c\x3b\x06\x45\xe9\x48\xb4\xa1\xe0\xf2\x9a\x6c\x2a\x9a\x6c\x03\x0e\xc7\x3c\x83\x59\xd5\x4c\x5c\x3c\x6f\xa9\x30\xd2\xef\x4f\xb6\xcb\xd7\xf3\x7e\xf5\x95\x0b\xbb\xd7\x4c\x29\x30\x7a\xcc\xfb\xf6\xd3\x37\xd7\xe6\xea\x5e\xfe\x54\xc6\xab\x8b\x93\xcc\x52\xa3\x2a\x58\xa1\x9d\x00\x2b\x0e\xa3\x51\x06\xd2\x68\xd9\x63\x88\x20\xc0\x02\x21\x1a\xac\x8b\x29\xa4\x93\x24\x2d\xa8\xf2\xbf\x34\xcf\xf3\x15\x56\xd2\xd3\xc2\x30\xef\xeb\xd6\x6c\x51\xe6\x0b\x0b\xae\xbc\x43\x4c\x9f\xff\x66\xbf\x5d\xe5\xaa\xec\x13\x0a\xe6\xbd\xdf\xb6\x40\xd7\xaa\x4f\xf4\xf5\xad\xec\xa6\x2f\xfd\xc9\xda\x5d\x46\xaf\xfa\x50\x3c\xdd\xbf\x4c\xc5\x2f\x1b\xac\x68\xb3\x69\xdb\x8e\x2f\x17\x77\x2a\x3a\xe2\x8f\xa9\x17\xaa\xb1\x33\xf3\xdc\x7e\x31\x2d\xb9\x51\xd7\x12\x79\x44\xfb\x9e\x24\xf0\x3e\x47\xf9\xbc\x61\x18\x0a\xd2\x35\x5f\xb6\xe4\x98\x02\xa6\xe6\x33\x8a\x6a\xdb\xa4\xed\x5a\x21\x29\x05\x81\x66\xab\x69\xd1\x89\xff\xb4\x6e\x55\xd7\xc7\x41\xb1\xbc\x6b\xef\xb7\xae\xd3\xb4\x64\x0e\x6e\x3b\x93\xb1\xed\x90\x6b\x83\x06\x67\x9e\x5c\xa4\xf7\xc2\x75\xcd\x93\xdc\xf9\xc2\x9a\xa2\x93\xa1\x43\x23\x04\x8d\x58\x61\x42\xa0\x92\x94\x22\x88\x81\xa6\x10\x9e\xaa\x39\xb6\xc7\xfb\x88\xc3\x91\xaa\x41\x8b\xd6\x2d\xca\xfd\xcf\xf3\x3d\x2f\x95\x1a\x3d\x8e\x1c\xbf\x72\x6c\xc5\x96\x8f\x1f\x8e\x9d\x5a\xb4\x76\x01\xf6\xe9\x7b\x8f\xce\x3f\x39\x09\x86\xc2\xd2\x79\xeb\x0b\x55\x88\x1f\x9e\x26\x57\xa5\x7c\x5e\x44\x16\x29\xfa\x10\x61\x85\x16\x0d\xdf\x21\x65\x35\x0c\x59\x35\x36\xa0\x2b\x2b\x90\xe3\x5d\xc3\x71\x08\x17\x10\x76\x00\x79\x9b\x97\x75\x94\xe0\x18\xb0\x94\xaf\xc8\xb6\xc2\x57\x6f\x9d\x69\x3c\x2d\xf8\xb4\x3f\x7f\xbc\xd1\xfe\xca\x2f\x3a\xbe\x79\x52\x98\x08\xe4\x41\x19\xbf\x79\x2b\xf7\x6b\x49\xae\x43\x7d\x4c\x21\x47\x70\x3c\x47\x34\x49\x55\x66\x21\x2b\xa9\xac\xc9\x5a\xc0\x92\x51\xa8\x29\xbc\x81\x09\x84\x81\x8d\x0d\x1f\x4a\xa2\x8b\x64\x4a\x4b\x10\xc2\x76\xf6\x1a\x33\x73\x73\xb5\x72\x1d\x0a\xa5\xae\xc8\x72\xb5\x6d\xc5\x7e\x67\x3e\x97\x33\x8d\x9d\x3d\xb3\xe9\xfb\xa3\x4a\xe6\xcb\xb8\xb8\xfe\xa1\x24\x73\x68\x11\x21\x1d\x60\xcd\x51\x5d\x60\xb9\x66\x40\x89\x26\xa9\x13\xaa\xe1\xf9\x96\xc0\xf8\xa2\x6a\xaa\x7e\x40\xd0\x30\xb0\x04\x27\x34\x10\x11\x1b\x2c\x8f\x12\x03\x82\x9d\xd1\xaf\x29\x95\xa4\xf7\x3f\xb9\x7e\xe8\xc9\xc3\x68\x42\x81\x1f\x46\x1d\x1b\xb0\x7d\xef\xfe\xdb\x4b\x26\xf5\x6d\x28\x16\x03\x7f\x3d\x4e\xae\xd8\x91\x40\x23\x2d\x92\x08\xe0\x88\x8c\xe3\x86\x82\xa8\xf3\x11\x43\x05\xd0\x15\xb5\xc0\x0d\x30\x8f\x5c\x35\x30\x24\x5e\x12\xa9\x58\x50\x03\xac\xfb\xff\xb1\x18\xf4\x3f\x22\x4f\xaa\x5d\xb8\xc0\xfa\x37\xbe\xcd\x50\xe9\xdc\xf8\xaf\x86\x83\x6b\x77\xaa\x54\x7c\xdc\xb3\xc0\xad\x11\x1f\xfd\xf8\x6b\x58\x79\xc3\xa2\x67\x97\x93\x8c\xf7\x64\x4d\x88\x44\xd6\x10\x1c\xcd\xb3\x48\xc5\x14\xa0\xcd\x9b\x12\xe7\x00\x18\x28\x41\x14\x20\xcd\xc4\x66\x0c\x09\x2a\x32\x21\x41\x6b\x76\x28\xfd\x07\x09\xe3\xdf\x54\x3c\x72\xff\x77\xb6\xdf\xbf\x85\xbe\x7c\x51\x2f\xcf\xb4\xcc\x65\xea\x2e\x7f\x5b\xe8\x3f\x7d\xc3\xad\x11\x77\x16\x7e\xdf\x8b\xeb\x37\xfe\xd7\xe4\xbe\xb2\x46\x84\xb6\xa1\xf9\x02\x1b\x32\x71\x24\x88\x2a\x4d\xb9\x04\x21\x78\x01\xc0\x14\xa7\x21\x85\x22\x81\x45\x12\x31\x8d\x54\xc2\xb2\x4d\x81\x50\x0d\xcd\x4d\xac\x1c\xc3\x1a\x7e\xb0\xbc\xa6\xf5\xb0\xdc\xcd\x4a\x5f\xe5\xf9\xe4\xca\xb9\x35\x63\xa7\x95\x97\xfe\x3c\x37\x71\xf3\x94\x0d\x67\x7b\x1d\xfd\x6c\x56\xbb\xe4\x8a\xad\x4a\x30\x20\x69\xc8\x47\x81\xcf\x5a\xae\x6f\xa9\x08\x40\x96\x27\x79\x4e\x77\xb9\x08\x50\x50\xc6\x8c\x83\x34\x64\xea\x40\x96\x49\x18\x72\xac\x90\x20\x67\x3f\xb8\xb1\xf5\x83\x17\x87\x8e\xef\xc8\x33\x66\x74\xc9\xe1\x1b\x7f\x69\x6c\x17\x3b\x99\xa9\x63\x34\x68\xeb\xe8\xb9\x4f\xce\xfe\x5a\xe5\x78\xfa\x7b\xe6\x09\x3d\x87\x1c\x91\x9c\x83\x44\xc1\x25\x29\x4d\xb2\x03\x85\x14\x4d\x2f\x10\x58\x26\x08\x24\x20\x22\x43\x91\x6c\x87\x0d\x08\xc5\xe4\x5c\xdd\x82\xb6\x12\x8a\xc0\x7c\xd5\x73\x9c\x3e\xfa\xfc\x0b\xb7\x51\x26\xf6\x79\xcf\xd7\x1f\x07\x77\xf3\x37\xfc\xd8\x5c\x32\xac\xe7\x1f\x9f\x3c\x78\x8b\xbd\x5d\x68\x7f\xb3\xde\x9b\x93\xcc\x47\xce\x71\xa2\xf1\x5f\xa4\x62\x96\x2e\x87\xa2\xad\xf1\x9a\xca\x70\x0e\xf6\x9c\xd0\x55\x04\x42\xb7\x0c\x8b\x13\x79\x8a\xd0\x6d\xcd\x02\x90\x05\x24\xa7\x24\xee\x60\x4d\x4e\x95\x88\x03\xaf\x69\x5d\xde\x6f\xf4\xb4\x61\xde\x0a\x79\x3b\x0c\x1e\xfe\xf5\x29\x66\x2f\x3b\x60\xd7\xe9\xd7\xeb\xe7\xe7\x5f\xa4\x3f\x53\x49\x8c\xcb\xd7\x2d\x3d\xa0\xb4\x48\x36\x43\x9a\xe5\x25\x2c\xe8\x54\xe0\x07\x26\xa2\x05\xce\x73\x15\x5f\x33\x01\x34\xad\xd8\xe1\x39\x3e\xa6\x34\x12\x47\x64\x9c\x80\xd1\x63\xc1\x5f\x0f\xb2\x85\x79\xcf\xb7\x78\x72\xa3\x41\xc6\xf2\x39\x7f\x6e\x9e\xb9\x29\xb1\xa4\xef\xc0\xb7\xd7\x8f\x58\x6f\x36\xd1\xcf\xbd\x91\xe4\x5b\xac\x5c\xec\x48\x92\x47\x61\xc1\x02\x8a\xae\xf3\x8e\x1d\x33\xac\xc0\x50\x52\xe4\xe8\xbc\xa9\xda\x8a\xab\x42\x4f\x55\x23\x24\x91\x56\x28\x1b\x1e\x62\xbd\x04\x78\xc2\xf5\xd7\xab\x7c\xbe\x68\xd7\x93\xd4\xcd\xd7\x4e\xb5\xf0\x9b\x13\x55\xd6\xad\xc7\x0b\xdb\x16\x39\x5e\x64\x6d\xe1\xc7\x85\x85\x12\x99\xd3\xbf\x79\x9d\x98\x5a\x2a\x82\x34\xa7\xc8\xd8\xa2\x62\x5d\x22\x15\x06\xc7\x76\x44\xc7\x66\x24\xd3\xb4\x14\xcb\xac\xa7\x20\xda\x76\x42\x44\xca\x22\x1b\x58\x3a\x19\xbb\x7c\x9c\x06\x5d\x5a\xc3\x9a\x0b\xd7\x7c\xfb\x73\x15\x77\x7b\xd1\xfd\x6b\x47\xbd\xbd\xa6\xc9\xc1\x2d\x23\x9b\xe5\xf5\x8b\x6c\xbb\xf8\xe1\x4c\xbe\xe7\xa6\xca\x49\x06\xb5\x08\x01\x1d\xe8\x5c\x64\x6a\x8c\x4b\x2b\x34\x17\x59\x24\x6d\xd1\xbe\xe8\x05\x20\xa6\x0d\xce\xa2\x42\xd2\xb7\x0d\x22\xf2\x0d\x2b\x34\x15\xca\x91\x89\x04\x9e\x63\x7f\xed\xaa\xf5\x5a\xe6\x3e\x96\x65\x08\x37\xcb\xab\xdd\xf0\x78\xf1\xd9\xc5\x1b\x17\xcb\xaf\x7b\x43\x3e\xae\xfa\xf6\xec\xba\x57\xba\x24\xf9\x3c\x9e\x2b\xcb\x12\xc5\x6b\x82\x0c\x62\x81\x87\x92\xc0\xf8\x7c\x44\xd8\x11\x69\x89\x9a\xea\xfb\x8a\x6d\x50\x84\x61\x92\xac\x45\xd1\x01\x1b\x00\x68\x38\x2f\x2d\x6d\xfe\x67\xe6\x7d\xe3\xfd\x20\xd3\xfb\x7e\xf9\x7b\x27\x47\x9d\xdf\xf6\xd8\xac\x5a\x73\xca\xfe\x9f\x6e\xc1\x46\xf9\x37\x5e\xaa\x5b\x2d\xef\xb2\x87\x1b\x3e\x7b\xe9\xbb\x64\xed\x3e\x6b\x6d\x76\xb8\xbe\xf6\xcc\xf3\x97\xdf\xce\x55\x65\x29\xdc\xb8\x7e\x80\xdc\xbe\xda\x65\x77\x45\x89\xf9\xd3\x5b\x3c\xb9\x35\x27\xc9\x55\x51\x44\xc8\xca\xbf\x94\x27\xa4\x35\xdb\x90\x64\xd2\x32\x35\x95\xb4\x42\x16\x02\x46\xe5\x19\x4b\x75\x18\x09\xa8\x42\x18\xd2\x38\x36\xc2\x80\xa3\x5c\xfd\xd5\xef\xd2\x7e\x55\x97\x3d\xfa\x88\xee\x53\xb5\xa6\xf0\xbd\x1b\x9d\x8c\x89\x8d\xc3\x94\xf9\xd3\xfb\x75\x0a\x8e\x15\x6a\x38\x76\x71\xc7\x1b\x9b\x92\xcc\x95\xa0\xf0\x92\xee\x98\x8a\x12\xf9\xc0\x70\x08\x47\x0f\x14\x51\x62\xdc\x30\xc2\x56\x8c\x22\x6c\x8b\x12\xa5\x78\xbe\x0c\x39\xcb\x0a\x65\xd5\x32\x1c\x87\x49\xdc\xc3\xcd\x50\x0b\x7e\xdb\xe8\xd3\xbb\x27\x6b\xcd\xbf\x54\xf8\x52\xa6\x92\x95\xde\x19\x3f\xfe\xcd\x53\xcd\x8d\xd3\x86\x32\x70\xdc\xa8\xbd\x83\x66\x24\xd7\xab\xcb\x5e\x20\x99\x92\x62\x58\x56\xec\x8a\xa1\x40\xf0\x12\xb4\x64\x59\x26\x31\x69\x08\x24\x65\x59\x0e\x76\x49\x2b\x88\x18\xd3\xb0\x2d\xd1\x77\x4c\x8b\x4b\x90\xc2\x7e\xd1\x52\x98\x73\xed\x4a\xd3\x55\x37\xbe\xd4\x0b\xf4\x7b\x90\x7f\xd2\xa8\x0e\x63\x9b\x2e\x79\x7a\x7d\x79\x5d\xa5\x50\xf6\x66\x55\xbc\xec\x49\xee\x96\x73\xba\x66\xe8\x20\x72\x04\xd9\x50\xe5\x18\x22\x46\x17\x90\xaf\x6b\x82\xac\xa9\x26\x27\xe8\x91\xe9\x99\x3e\xc0\xa1\x09\x44\x86\x17\x7c\x9d\x40\x54\xe2\x97\x6e\x3c\xee\xeb\x95\xc5\x01\x5e\xf4\x96\x91\x7b\x44\xd5\x31\x83\xaf\x14\x6f\xde\x64\x5f\xa1\x31\xdb\x3b\xfd\xda\x7d\x70\xb3\x3e\x6e\x4a\x85\xe4\xbe\xb4\x01\x22\x4e\x41\x01\xcf\x43\xc3\xb0\x74\xc1\x66\x19\x53\xd6\x31\xf6\x49\x83\x01\x11\xa3\xca\xa6\x64\xa8\x96\x19\x3a\x8e\x25\x33\xa1\xa7\x8a\x0e\xe0\x5e\x7d\xe9\x3d\x47\x7f\xf9\xe9\xe1\x88\xcb\xca\xe7\xc3\x4f\x5f\x6a\x73\xe3\x4c\xb5\x1a\x27\x67\x57\xac\xb9\xf4\xa3\x66\x67\x3e\x29\xd6\xb4\x70\xeb\xdb\xe9\xbf\xe5\x91\xf8\x30\x95\x29\xa8\x34\x62\x14\x83\x8f\x75\x9d\x75\x79\x5d\xd4\x90\x29\x61\xa0\xd2\x2e\x08\x5d\xd9\xd6\xe3\x40\x27\x39\xd1\x36\x44\x29\xf0\x54\xd7\x94\xdd\x34\x8e\x08\x35\x1a\x3a\xba\x69\xe3\x56\xed\x7f\x6b\x9a\xb3\x6b\xc6\x2c\x9f\x2c\x9b\xcd\x9c\xaa\xdb\xf5\xd4\xc7\x7b\x8e\x7e\x5d\x23\xca\xf6\x60\x74\x35\x3b\xc9\x84\x0d\xc6\x7f\xe1\x5f\x19\xef\xff\xb1\xf6\xe6\xf1\x3b\x55\x6b\xff\xb8\x10\x32\xcf\x43\xc8\x50\x94\x29\xec\xb5\xd7\xde\x44\xc6\x4f\x27\x12\x49\x2a\xd1\x60\xad\x3d\xae\x3d\xcf\x13\x99\xa7\x32\xcb\x3c\xcf\x42\x84\x0c\x21\x43\x86\x8c\x25\x32\x13\x29\xb3\xcc\x84\x4c\xbf\x57\xe7\xfc\xce\x73\xf2\xb8\x3f\xaf\xf3\xbc\x3e\xdf\xfb\xff\xfb\x8f\x75\xaf\x7d\x5d\xd7\xba\x86\xf7\xf5\x7e\xfb\x86\x69\xd3\x92\x4a\x41\x9f\x43\xbe\x82\x12\xd9\x74\x11\x1f\x02\x99\xf6\x79\x35\x24\x5c\xa2\x25\xbe\xa1\x52\x40\x8d\xf5\xd4\x40\x9b\x7a\xaf\x15\x2c\xd5\xca\xfe\x0a\xe4\xe9\xb7\x7c\x61\xee\x4f\xfa\x9d\xfb\xb8\x6c\xb3\xf9\xbb\x7f\xdb\xf8\xfe\x3a\xb9\xf7\xaa\xfd\xf9\x9f\x48\x73\x2b\x88\x11\x13\x8b\x24\x2e\x43\x21\x62\x52\x5a\x08\x79\x17\xfb\x12\x54\x79\x2d\x90\x4d\x89\x73\x62\x86\x8e\xa1\x0f\x1c\x03\xe9\x94\x8c\x68\xd7\xf7\x79\x37\x93\x7e\xd7\xc7\xf5\x8b\x37\x46\x6f\xee\xdb\xf1\x5d\xf9\x19\xf8\x95\x8d\xa5\x06\x17\x79\xf2\xd0\xb9\x36\x5b\xda\x04\x4b\x17\x17\x3d\x57\xb2\x6c\x83\xbb\x8f\x92\xf7\x34\x9d\xf7\xf2\xbc\x8b\xec\x6f\x19\x2f\x2c\xe4\x73\x65\x3c\xac\xbe\x7f\xdd\xdb\x1f\x34\x9b\x5c\x61\x70\xbe\x93\xcf\x31\xfd\xbd\x9f\xe4\x34\x27\xbe\xaa\x25\xf1\x44\x8a\x55\x8d\xe8\x80\x81\x2a\xc3\x9b\x06\xd4\x0d\x9e\x15\x18\xc2\xb2\x91\x6d\x06\x61\x68\x99\xac\x2b\x68\x0a\xa6\x03\xa2\x6a\x54\x26\x73\xd0\xbc\xd1\xc8\xfb\x5a\x99\xfc\xe1\x73\x97\x56\x6d\x2f\x15\x0c\x1f\x74\xed\x69\x69\xda\x84\x23\xbb\xfc\x5a\x3d\x56\x56\xff\x62\x5d\x90\xe6\x56\x90\x4e\xdb\x1c\x23\x23\x5e\x71\x28\xe2\x78\x94\x82\x8c\xc4\x8b\xb1\xc6\x50\x1a\xa7\xd0\x89\x2b\x19\x56\x62\xf9\x92\x8c\x6c\x9b\xe2\x20\x2d\xd3\x24\x61\x1f\x7f\x90\xf2\x0e\x58\x54\xe6\xa9\xf9\xe3\x86\x14\x2a\x71\x70\x7c\x91\x07\x3b\x9e\x50\xbc\x92\xdd\xc6\xbf\x7b\x67\x46\x89\xd5\x8d\x2f\x74\x9b\x5b\x6a\x56\x9a\x79\xe1\x28\x12\x26\x86\x87\x5c\x51\xa1\x39\x41\x61\x05\xc3\x16\x1c\x1a\x91\x24\x62\xa0\x6f\xd3\x82\x80\x25\xe4\x48\xba\x22\xb8\x94\x28\x04\x01\x48\x30\x7c\x3c\xde\x64\x94\xfc\xbc\xec\x86\x82\xdb\xf7\x74\x1f\xcb\x82\x8a\x4b\xc7\xf4\x54\xc2\xf6\x67\x6a\x5c\x9d\xf1\x45\xf7\xa3\x93\x16\x1e\xeb\x72\x82\x4b\xaf\xe3\xd2\xb6\xa7\xba\x40\x8f\x13\x8f\x55\x91\xed\x8a\x9c\xe5\x87\xa6\xc9\x28\xd8\x17\x84\x44\xc6\x06\x27\x78\x2c\xa6\x3c\xda\x91\x2d\x85\x65\x69\x1f\x93\x4c\xe0\x08\xd9\x4b\x5c\x1c\xd1\x62\xda\x73\x25\x4e\xbf\xb6\xba\x6a\x83\x96\x1d\xf4\xd3\x05\xa3\x67\x8e\xf3\xc2\xf4\x51\x2a\x28\xdf\xe0\xe9\x0f\xb2\xce\xec\x94\x5a\xe7\x05\x32\xb1\xaa\xe0\x24\x0c\x55\x36\xb1\x23\xc7\x8b\x12\x91\xe0\x98\xd6\x18\x4d\x73\x2c\x89\x67\x39\x35\x10\x23\xd3\x61\x59\xdd\x45\x94\x2c\x5a\x2a\x7c\xdc\x38\x9e\x1a\x35\x38\x9f\xb6\x77\x69\xef\xae\x05\x17\xd7\x7f\x69\x65\x9e\x23\xb3\x9f\x7f\xcd\xf0\xe0\xc9\x87\xd3\xd7\x0c\xfc\xa1\xe7\x8c\x01\x69\x26\xbb\x90\x21\xcf\x4b\x96\x2e\x52\x1a\x76\x19\x8b\xc8\x76\x84\x18\x5b\x30\x43\x62\xfa\xb4\x8d\x48\x2c\x8a\xd8\xa1\x54\x9f\xb1\x6d\x43\x0d\x21\x67\x7a\xee\x7f\x26\xce\xff\xde\x07\xfd\x6f\x5d\xf5\x5e\x19\xd9\x8b\xe4\xfc\x5f\xea\x9b\x8b\x3e\xf2\x6e\xec\xe9\x7b\xc9\xb1\xc6\xec\x79\xe6\x69\xaf\xeb\x67\x8b\xdb\x6e\xff\x7e\x7c\xe7\x13\x35\xca\xdf\xaa\xf3\x80\x7e\xf5\xe3\x62\xe9\xad\x4a\x38\x87\x57\x18\x82\x19\xca\xe7\x79\x42\x4c\xce\xd0\x08\xd1\xb1\xe3\xf9\x22\xb0\xec\x84\x4d\x88\x2d\xf1\x31\x63\x86\x80\x8d\xa2\xc8\x8f\x23\x68\x67\xa2\x83\xf1\x56\x78\xbd\x58\xe1\x19\xd9\xa7\x7c\xd4\x63\x64\xc5\x89\xfd\x98\x6e\x97\x5b\xff\x52\xe1\xcd\x72\xab\x60\xbf\x36\x3f\xaf\xf8\xe4\xfe\x9c\xac\x77\x8e\x52\xdb\x53\xa4\xf2\x7e\xa2\xf2\x12\x30\x82\x20\xc2\x31\x9d\xc0\x84\x8b\x23\x4a\x24\x1e\x42\x38\xf2\x9d\x90\x16\x91\x6b\x08\xb1\x2b\x89\x98\xa2\xd5\x24\x16\x53\x3f\xbb\x25\x4e\xb4\x76\xf1\xa7\x43\xca\x96\x9e\x51\x73\xf4\x17\x54\xbd\x3a\x55\x7b\xfd\x56\x77\x13\x8e\xba\x64\x8c\xf8\x34\x77\xee\x3a\xcb\x97\xa6\xf7\xb6\x5d\x26\x12\x18\x2c\x2b\x91\x48\xe9\x04\x53\x76\x04\x23\xc3\xd0\x8c\x48\x91\xc4\xc4\x54\x62\x6c\x06\xac\xcf\xba\x58\xb2\x6c\x18\xab\x56\xa2\xa8\x49\x98\xfa\xb6\x0b\x70\xa5\xbe\x5e\xb6\xf0\xeb\x2f\x83\xba\x8d\x95\x3d\xf9\x57\xbd\xdb\xe8\x42\xef\x2f\x33\x3e\x1c\x9c\x7b\xd0\xb2\x7a\xcd\x6f\xd6\x79\x33\xeb\x48\xb3\xd4\xfa\xb9\xa1\xea\xd3\x8c\x62\xd0\xc4\xb6\x81\x28\xc9\x31\x1d\x18\x88\x30\x20\x20\x49\x04\x3d\x4b\x95\x80\xc7\x70\xb4\xa7\x59\x8e\xc8\xba\x3c\x25\xb1\x24\x13\x3d\x8e\xde\x93\x0e\xbc\xf9\x60\xc1\xe1\xaf\xb7\x8f\xba\xb5\x40\x7e\x3a\xd9\x7c\xfd\x61\xff\x96\x1f\xff\x99\xff\xc4\x9a\x1d\x87\x9b\x8c\x9d\x1e\xa5\x77\x50\x8d\xb8\x44\x12\x64\xd7\x52\x64\x4b\x0e\x50\xc4\x52\x52\x42\x12\x5d\xc6\x5c\xcc\x13\xcc\x38\x89\x20\x58\x82\x60\x4a\x18\x06\x9a\x24\x30\xa6\x6b\x73\x44\x7b\x6c\x1f\xf4\xbf\xcd\x5e\x7a\x35\xcf\xd9\x63\xfd\xa3\xdb\x03\x7c\x7c\x4c\x2f\x51\x29\x2f\x5b\xb5\x39\xac\xda\x72\xdf\x53\x05\x5f\x5e\x50\x67\xe9\x94\x79\xb3\x7a\x2c\xeb\x5d\xee\x8d\xf9\x5b\x87\xbc\x93\x66\xdc\x83\xa7\x00\x3f\x21\x91\x81\x43\x47\x50\x15\xda\x65\x15\x94\xd0\x21\x91\x24\x53\xd0\xdd\x58\xb2\x28\x80\x81\x47\x45\x0c\x47\x05\x16\x62\xe2\x00\x67\x02\x2d\xad\xfc\xf4\x8b\xf9\x4e\xbf\xbf\xb4\x4a\xe7\xb7\x96\x14\x8f\xf3\x4d\xcf\x7b\x35\x47\xb9\x82\xe5\xde\x5c\x7f\xfa\x4f\xe9\x95\x9b\x7f\x1c\x1a\x7f\x28\xcd\xec\x4a\x12\xa3\xf2\xb1\xe1\x29\x52\x00\x69\xcd\x62\xec\x30\x14\x05\xc0\x49\x86\x60\xf1\xb4\x12\x7a\xae\xe4\xfa\x3c\xcf\x46\x86\x66\x50\xc4\x8c\x7d\x0f\x67\xb2\x47\x53\x65\xf7\xd4\xc3\x07\xf3\x7d\xb6\x64\xf7\x73\x5b\xfa\x8c\xaf\xd4\xa8\x47\x52\xb4\x6e\xc3\x8e\xa5\xa7\xfc\xa3\xe0\xf7\x67\xc6\x87\xd3\xc7\x67\x5d\x74\x24\xe5\xa3\x60\x42\x42\x45\x26\xb1\xd5\x20\x74\xa1\x68\x70\x71\xa4\x13\x0b\xc8\x6c\x8c\x55\x8b\x8b\x4c\xcb\x4c\x18\x5b\x52\x3c\x0f\xd1\x02\x6d\xb0\x11\x6f\x69\x99\xe0\x8f\xaf\x66\x6f\x9d\xff\xfd\x71\x8b\xf9\x37\x0b\x75\x7c\x70\xb7\x59\xe7\xce\xbd\xba\x76\x79\xb2\x02\xf9\xac\xe6\x98\xf1\xb7\x8f\xb6\x98\xbf\x2b\xeb\x71\x27\x13\x01\x6c\x8b\xc2\x11\xf2\x65\xd1\xb3\xa0\xe7\x42\x49\x35\x4c\x3d\x4a\x28\x62\x86\xae\x03\x09\x8c\x08\x89\x23\xec\x9b\x24\x66\x15\xd7\x16\xd5\x58\x45\x8f\xed\x83\xfe\xb7\x5e\x48\xaf\x8c\x22\xd9\xa6\xfe\x93\xe6\xe3\x3f\x49\x86\x71\x70\xcc\xaf\x0d\x66\xb0\x75\xfd\xbd\xdb\x9b\x97\xad\xfe\xb2\x75\x62\x36\x97\xfd\xfc\xf9\x96\xe6\x82\xbe\xed\xff\x68\xa8\x1f\xc9\x3a\x93\x6b\xca\xe8\xaa\xfb\x0e\x8c\x38\x05\xd9\x11\x07\x08\x0a\x20\xe5\xfa\xb1\x6a\x4b\x4e\x88\x79\x4a\x33\x38\x43\x72\x60\xac\x68\x26\x91\x59\x88\x74\x39\x09\x3d\x0e\x3e\xde\xc7\x3c\x71\xe4\xf2\x38\xa9\x51\x45\x7a\xe4\xf1\xcf\x47\xdf\x1d\xee\x57\x1b\x3a\x63\x74\x35\x63\xd3\x9f\x3f\x8c\xf9\xaa\xc9\xca\x25\xc1\xfc\xf4\x32\x5e\x22\x98\xc4\x41\x40\x47\xa1\x26\xaa\x9e\x86\x7c\x5b\x10\x6c\x4e\x51\x62\xdf\xd2\x2c\x3e\xf6\x2d\x3a\x11\x89\xe4\x78\x1e\xa4\x03\x94\x44\x32\x6b\x48\x24\x93\xe7\xb7\xcc\xee\x1c\x9f\x1b\x4b\x9f\x9c\x3a\x7f\xd3\xb2\x26\x5d\xbb\x34\x7e\xb9\xfc\xd8\x29\xef\x2d\xb9\x59\x73\xd4\x81\x0d\x3b\x3b\xac\x37\xdb\x65\x5d\x43\x21\xf5\xb1\x09\x4b\x49\x0a\x13\x04\x10\xf9\x74\xc0\x02\x5d\x0e\x7c\x5b\xc1\x92\x04\x0d\xd1\x34\x55\x37\x8e\xa5\x00\x87\xac\x08\x61\xa8\x8b\x12\xaf\xb9\x0a\x49\x7d\xec\xdf\x1e\xbe\xd7\x76\xd3\x15\xb1\xdc\xf2\x8a\x73\x6e\x8f\x78\xa7\x1b\x28\x37\xb1\xfa\xd0\x6c\xe5\x27\xe6\xee\x9b\xf3\xb5\xd7\x97\x2f\x6a\x31\x23\xcd\x54\xbf\x92\xa6\x10\x49\xb4\x5c\x8b\x0a\x64\xdf\xe1\x21\xe3\x6a\x9c\x13\x01\x20\x28\xb4\xc0\x48\x51\xc4\xc9\x3a\x30\x80\x60\x06\x84\x33\x13\x81\x05\x2e\x9f\xc9\xf6\xc0\xfc\x96\x5d\x3e\x6d\x2b\x68\x85\xbe\xc5\xe3\x76\xb4\xa9\xfa\x22\x35\xa4\x7a\xe9\x86\x7d\x2b\x95\x7c\x72\x5b\xb7\x2f\xa5\x21\xe7\xce\xa5\xf7\xb6\xe5\x58\xf4\x19\x8b\x56\x54\x3b\x8c\x58\xd9\x94\x4c\x20\x08\x12\x1d\xd1\x0a\xc4\x89\x69\x05\x71\xa4\x05\x42\x6c\x51\xaa\x48\x27\x80\x0d\x20\xef\xaa\xc2\x63\x24\x3d\xff\xad\xde\xed\x95\x91\xa3\x4f\xb6\xff\x45\xd2\xd3\xfd\xbb\x25\x03\xfb\x9d\x3a\xf0\x45\xdd\x32\xb7\x72\xe5\xda\x92\x63\x59\x78\xea\xdb\x9a\x2b\x73\xff\xc4\x3e\xbf\xff\xcf\x8e\x1d\x9b\x68\x1d\xd3\x1b\xa3\x28\x96\x05\xac\xa7\x0b\x86\x13\x71\x46\x18\x7b\x34\x74\x20\xef\x85\x58\xb1\x90\x21\xd8\xb1\x85\x02\xe2\xf3\x16\x20\x26\x1f\xf8\x71\x28\x25\x22\xca\x44\x3d\x6b\xe9\xd8\xcb\x57\xac\xd3\x15\x3e\x7a\xe2\xec\xa5\x0a\xf3\x3f\x1b\x7e\xf0\x7e\x67\x78\xe3\xfb\x93\x5f\x95\xdf\xbc\xa9\xd8\x13\x1b\x5e\x4f\xb3\x98\x2b\x66\x0c\x27\xd1\x81\xc4\x01\x0b\xdb\x1a\x49\x00\x4e\x24\x4b\xa7\x44\x16\xd8\x89\x63\xc9\x41\x2c\xeb\x82\xc0\xab\x1c\xaf\x11\x10\x10\x13\x07\xb6\x9a\xc9\xca\x52\x91\xee\x2f\x7d\x7e\xb3\xf5\xaf\x63\xf6\x87\xef\x74\x72\x2f\x0d\x1b\xf0\x65\x85\x36\xef\x2e\xbd\x59\x36\x6f\xf1\x4d\xf5\x3e\x58\x6b\x67\xcb\xfa\x00\x25\x35\x43\x40\x82\x55\xd5\xf6\x91\xa8\xc5\x9a\xc8\x31\xc0\xf6\x85\xc4\xc5\x8a\x6f\x27\x21\x42\x0e\xb4\x23\x31\x11\xf9\x84\x83\xa2\x8e\x48\x68\x59\x26\x4b\x65\x42\xa8\xb2\x6b\xf1\xa7\x13\xb7\xde\xaa\xe8\xf6\x2d\x30\x78\xa1\x28\xe4\x24\xc2\x47\x3b\x0b\xba\x53\xab\xd2\x07\x2a\x6c\x9b\x3d\xec\x48\xbb\xac\x0b\x12\x65\x42\x6c\xec\x47\x61\x20\x4b\x1e\x4f\xdb\xa2\xc6\x5a\x5e\x28\x31\xba\x15\x1a\xbe\x6f\x99\x8c\x8d\x30\xc1\x9a\x85\x64\xc6\xc1\x08\x47\x81\xe4\x6b\x1a\xf9\x0f\x1f\xf3\x80\xb7\xfe\x75\xe2\xaa\xec\x38\xdb\x5d\xd6\xf8\x7b\xe9\xa7\x67\xd6\x4d\xfd\xb8\xe9\x47\xc9\xfb\xb5\x9e\x5d\xb1\xb0\x68\xeb\xf9\xec\x8d\x32\x85\x87\xb7\x69\xda\x2b\xe3\xe1\xc3\xee\x77\xc7\x3e\xf3\xc8\x4b\xb6\xf7\xe4\x07\xee\xf7\x43\x9f\xf9\xa6\xca\xfc\xb6\xb5\x54\x42\x6d\xc8\xd8\xef\xdc\x63\xd5\xaa\xa5\xde\xff\xb5\xdd\xf4\x72\xeb\x9e\x6b\x99\x5e\x8f\x67\x02\x99\x48\x12\x85\x6d\x8b\xd3\x3c\xce\x24\xb1\xaf\xf3\x94\x69\x00\x20\x43\xc4\xc4\x02\x25\x43\xcb\x09\x79\x18\x69\x8a\x00\x74\x4a\x32\x12\x1c\x3e\xfe\x92\x1d\x2f\xfe\xa9\xb3\xa2\xfe\x83\xe7\x7b\x26\x5b\xf1\xeb\xdc\xb2\xb9\xed\x9e\x7f\x6b\x44\xad\xb7\x2f\xdc\xad\xf5\x70\xf0\xfb\xad\x9e\xfd\x3a\xeb\x5d\xab\xd4\xb1\x95\x08\xb1\xae\x0b\x81\x21\x68\x8c\xa5\xf9\x24\xb1\x3c\x64\x2a\x41\x44\x14\xc0\x8a\x62\x6c\x40\xca\x11\x95\xc0\xf0\x75\x9b\x81\x82\xa7\x2a\xac\x9a\x49\xcb\xd9\xed\xb2\xe7\xfa\x6b\x67\xf9\xca\x0b\xb6\x57\x1a\x51\xf5\xf4\xaa\xe3\x2b\xba\x0c\x68\x33\xf6\xde\xcf\xd3\x4a\x75\x70\xe6\x49\x7b\xc7\x67\x7d\x56\x94\x3a\x7d\x06\x82\x8c\xe5\x48\x52\x69\xce\x8a\x90\xc5\x40\x4a\x22\x80\xc8\xb1\x43\xb9\x4e\xe0\xd0\x84\x89\x23\x22\xdb\x36\xd6\xc2\x20\x8e\x13\x2b\x35\x6c\x78\xe4\xcd\x3b\xb7\x8a\xe8\x83\xf7\x4f\x3a\xf6\x81\xb1\xb0\xd3\xcc\x9f\x8f\xb7\xba\x7b\xf3\xc8\xc1\x07\xf9\x9e\x5e\xbb\xec\x93\xb9\xaf\xdc\x7d\x25\xbd\x47\x56\x6d\x2a\xa2\x29\x2e\xb2\x75\xd6\x07\xb4\xaf\xeb\x12\x4f\x31\x21\xd4\x65\x53\xb5\x62\xdb\x55\x38\x57\xd5\x68\x9a\xf6\x2c\x3a\xc0\x34\xe5\x9b\xc0\x96\x53\xdf\x74\x9b\x11\xcb\xcf\x35\x1e\xcc\x8f\x1d\xf8\x85\xfb\x7e\x38\xb5\x7a\x8f\x2e\xe3\xc6\x8e\x5b\x32\x49\xfb\xaa\x4b\xe7\x43\xd5\x72\x36\x9f\x97\xf5\x31\x4a\x6a\x69\x74\x28\xa3\x00\x98\x14\x23\xfb\xbe\x92\x60\x6c\xb2\x10\xf8\x5a\x20\x19\x4e\x42\x1b\x09\x64\x35\x3b\x22\x8a\x1f\x3b\x48\x13\x7c\x9f\x02\x81\x81\xfd\xc7\x6f\x7a\xe7\x38\x53\x28\x58\x78\xc0\x8e\xf0\xc0\xaf\x03\xca\x34\x2c\x72\xf8\x46\xd5\x4f\x73\xcd\x9e\x7b\x68\xb7\xf5\xf2\xfe\xae\x6f\x8d\x29\x90\x75\x42\xa1\xd4\xe8\x7d\x2f\x88\x68\xc9\x34\x69\xc5\x89\x03\xcb\x33\xf8\xc0\xb4\xb8\xc8\x23\x7a\x14\x18\xc8\x77\xf4\x10\xc9\x3a\x47\x78\x1b\x49\x6e\xc8\xf3\x0a\x43\x53\x28\x75\x90\xfc\x78\x6c\xce\x71\x42\xee\xf6\x7b\xaa\x5e\x78\x42\x7a\xeb\x83\xe0\x61\xcb\x09\x75\x8b\x8e\xe8\xbd\x62\xd4\xa6\xca\xfb\xfb\xdc\x5d\x56\x2c\xcd\x1c\x5f\x52\xac\xf9\x91\xea\x61\xac\x2a\x56\xe8\x09\x14\x40\xb2\x86\x69\x41\x01\x81\x65\xd8\x94\xff\x57\x9d\x85\x99\x40\x85\x81\xcc\x7b\x81\x11\x28\x02\x07\x53\x1b\xc8\x53\x53\x66\x9d\xd8\xc5\x57\x2e\x37\xa2\xfe\xd0\x9d\x4b\xee\xe5\xac\xf2\xfb\x43\xf5\xbb\x13\x13\x4a\xff\x76\x70\x60\x51\xa1\xc9\x9a\xe3\x20\xbd\x4f\x12\x97\x48\xba\x97\x58\xb6\xcc\xd0\x61\x98\x78\xa6\xa6\x38\xb1\xe8\x11\x09\x20\x0e\x5a\x7a\x6c\xab\xbe\x10\x28\x1e\x74\x9d\xbf\x12\x1c\x60\xc7\xb4\xad\x3c\xde\x8d\x7d\xab\xf0\x8e\xd2\x2d\xab\xff\x3a\x6d\x4a\x9d\xfd\x7f\xf6\xb1\x84\x9d\x27\xc8\x4b\x8b\xaf\x8c\x2d\xf1\xd9\xc8\x4a\x76\xff\xcb\x23\xaa\x67\xbd\xc3\x90\x3a\x4e\xfb\x81\x8f\x55\x9d\xf2\x0c\x4d\x35\x65\x8a\x55\x68\x56\x0d\xb1\xae\x18\x48\x51\x10\xf0\x69\x55\x89\x5d\x49\x10\x13\x24\x4a\x71\x92\xd8\xbc\x44\x32\xd9\x95\xa8\x50\xca\x2e\xd6\xf2\xae\xc8\xbc\x38\x7f\xcf\x9d\x75\x1f\xef\xfe\xf8\xc2\xed\x6f\x4f\x27\x0f\x7a\x0c\xe9\x90\xef\x87\x0a\x6f\xf5\xf9\xa4\x72\x9a\x77\xe0\x89\xef\x0b\x32\x4d\x41\x2d\xf2\x0d\xd1\x32\x2c\x42\xdb\xc4\x30\x74\x80\x6c\x80\x81\xa6\xc4\xc0\x24\x26\x2d\x12\x59\x8f\xe9\x90\x72\x99\x00\xa5\xe8\xc6\x2e\x3d\xdb\xa8\x85\xa0\x0e\x6e\xf7\xfd\x04\xbb\xac\xe0\x4f\x6b\x9f\xf7\x99\xb7\xc4\x67\xdd\xb3\xdc\x03\x51\x78\x37\xa9\xde\x66\x54\x7a\x6f\xda\x40\xbc\xa6\x58\xb1\xc1\x79\xa1\x85\x09\x54\x45\xc1\xd4\x7c\x0c\x21\x1f\x59\x18\x86\x9e\x2a\xc7\x18\x63\x01\xb0\x32\x71\x08\xf4\x31\x45\xff\xad\xb6\x7b\xc4\x15\xbf\xed\x2d\x2f\x3a\x85\x8f\xae\xed\x97\xaf\xf9\xf0\x35\x27\xc6\x34\xde\xed\x75\x5d\x5a\x74\x42\x8d\xbe\xc5\xcf\x94\xfc\xf9\xb5\xc3\xee\xd1\x34\xb3\x9c\xa8\x0e\x43\x42\xce\x54\x19\x99\xd1\x2d\x3a\xa2\x34\xde\xd6\xcd\x10\x1b\xb1\x22\x88\xa1\xa4\x21\x55\xf7\x13\x5a\x0b\x29\x68\xe8\xc8\xe2\x22\x3a\x71\x53\xcf\x72\xca\xbc\x5b\xf7\x8d\xdb\x4f\x0f\x6d\xff\x92\x93\xad\xf6\x97\x6f\xb4\x6a\xc8\x56\xbc\x7f\xb5\x55\xef\xfa\x23\xc4\xaa\xf7\x5e\xcd\x39\xf9\xcc\xed\x34\x93\x8c\x05\xc0\x65\x2c\xc0\xf8\x5c\x2c\x48\x1a\x1d\xa9\xba\x9e\x84\x8e\xcb\x09\x09\x4b\x10\xfe\xe7\xce\x35\x96\x02\x60\xb9\x91\x4a\x8b\x34\x8e\x0c\x87\x7a\xdc\x40\xc0\xe5\x9f\x3b\x74\x3f\x7c\x79\x50\xcb\xd7\x46\xb0\x27\xbe\x19\xf2\x25\xfd\xf6\xb6\xde\xd2\x43\xb6\xe4\x94\xae\x62\xbf\xc5\xe2\xac\xe3\xe9\x3d\x32\xcb\x11\x82\x34\x40\xfb\x1a\x13\x04\x2a\x25\x08\x44\x77\x0d\x99\x55\x04\xcc\xeb\xa1\x48\x21\xdf\x4f\xa2\x84\x31\x24\x0f\x72\x12\x2d\xc9\x8a\xa3\xa6\x78\x5e\x1a\xed\x7c\x35\xfb\xea\xcf\x2e\x97\xab\xfa\xf1\x9d\x72\xe3\xee\xfc\x36\x6f\xf9\xec\xd2\x63\xd6\xe1\x77\x70\xd3\x5c\xb3\x0b\x7f\xf9\xe0\xc7\xb3\x69\xee\x57\x24\x8c\x4d\x61\x81\x62\x4c\x59\xa5\x0d\xd7\x32\x78\x9d\x8f\x25\x1e\x40\xd6\x61\x1d\x4c\x98\x88\x01\xa6\xe0\x87\x21\x03\x04\x87\x76\x20\x61\xff\xc6\x6e\xf2\x88\x71\x94\xae\xf5\x93\x78\xeb\xa7\xe2\x4b\x99\xcf\x1b\x8f\xdc\xb9\x3d\xe3\x7c\x9e\x06\x25\xbf\x1e\xff\x4e\xd3\x63\x55\x86\xdd\x65\xed\x46\xd3\x4b\xa6\x19\xd8\x1e\xe8\x06\x52\x9d\x20\xf4\xbc\x28\x86\xa2\x68\x23\x96\x02\xba\x22\x70\xac\x95\xc4\xc0\x8e\x74\x5b\x81\x8e\x22\x79\x22\xb1\x90\xca\x31\xaa\x92\x0a\x85\x3c\x72\x5e\xe9\x12\xa3\x86\x9f\xcb\xad\xed\xcb\x3f\xb0\x48\x87\x4e\x73\x32\x0a\x7d\x7d\x06\x0d\xc6\x79\xbf\x9d\x96\xe3\x9d\xec\xc6\xb3\x59\xdf\xd1\x4c\x9d\x32\x41\xde\x85\x6a\x20\x21\xcd\xd5\x78\x41\x50\x88\x8f\x19\xd3\x25\x8c\x0c\x4c\xd1\x00\x8a\xc3\xab\xbe\xae\x40\x8c\x55\xc9\xe4\x45\xca\x21\x14\x95\x02\x2e\xb6\xe6\xf6\xa1\xdd\x3b\x26\x3c\x28\x36\x7f\xd5\x79\xb3\x7d\x89\xbe\x67\x6a\x4e\xf8\x6a\x49\xf5\x5e\xbb\x73\x0c\x3b\x55\xf5\x74\x2f\xef\xfd\xac\x6f\xc3\xa6\x06\x9a\xb2\x80\x28\x76\x12\xb1\x8a\x26\xa8\x81\x06\x79\x83\x76\x18\x56\xa3\x58\xd6\x52\x6d\x09\x78\xac\x22\x80\x50\xd7\x58\xd9\xd0\x41\xe0\x31\x8e\xe3\xea\xa9\x1f\xf1\x21\xb5\xc7\xab\x2d\xbe\x7a\xe2\x38\xd8\xb9\xdc\x68\x54\xe7\x99\xe8\xe8\xd5\xd9\xf5\x9e\xac\x52\x70\xd8\xeb\x97\x47\xff\x3e\xdd\x5f\x7d\x24\xbd\x71\x9a\x92\x29\xc3\xe2\x05\xc7\x70\x90\x0f\x89\xc5\x73\xc4\xb0\x1d\x49\x94\x01\x8c\xb1\x1f\xc4\x09\xa2\x65\xc7\xe5\x78\x56\x47\x3e\xb1\x29\x23\xa2\x51\x0a\x8d\x9f\xa9\x67\x8b\x1e\x9b\xbf\x0b\x65\x1c\x1e\xf6\x43\xbf\xd2\xd9\x5a\x4d\xa4\x17\x21\x5d\xec\xff\x16\xbf\x24\xfb\x9c\x3d\x4d\x4a\xfc\x96\x75\x25\xc2\x94\xe9\x92\x12\x5a\x40\x56\x93\x50\x4c\xdc\xd0\x8b\xdc\xd8\x46\x00\x4a\x92\x2f\x03\xde\x35\x05\xce\x66\x49\xe0\xaa\x2c\x30\xa1\xaa\x02\xda\x36\x4c\x05\x3b\x49\xea\xae\x50\xde\x5e\x5b\xc7\x1c\x6f\xf8\x6c\xc9\x6a\x1e\x53\xe6\x62\x6f\x9c\xb1\x60\xd4\x99\x4e\x8d\x07\x6f\x3f\xb1\xa0\xef\xf9\xe4\x20\x6c\x91\x5e\x66\x7b\x14\x86\xa1\x4e\x41\xdb\x01\xa2\xc5\x3b\x7c\x84\x62\xe4\x6a\xbe\x61\x7b\x18\xa8\x2e\x25\xc0\xd8\x4d\x42\x04\x59\x12\x61\x4b\x8e\x68\xe0\xda\x84\xca\x0c\xe5\x76\x5e\xcd\x11\x14\xae\x56\xf4\x03\xd0\x73\x03\xda\x72\x7b\xfc\xdb\x53\x43\x6a\xc3\xb1\x3f\x5f\x3f\xfb\xe4\x0a\x22\x1e\x02\x7b\xde\x7d\x24\xd6\x54\x6e\x4f\x97\x29\xb1\xac\xe9\xc5\xef\xfb\x4b\xa7\x6a\x5c\xde\x54\xee\x0f\x70\x60\x2a\x95\x6d\xce\x35\x52\x33\x77\xf6\xba\xc3\x5f\xc9\xfa\x43\x94\xf2\x4f\xaa\x22\x2d\x43\x2c\xc9\x82\x67\x62\xce\x26\x89\x07\x05\x47\xd0\xdc\x90\x75\x04\x3f\x81\x44\xd5\x02\x22\xa3\x58\xd2\x9c\x24\x0e\x44\x97\x92\x2c\x2c\x3d\x1e\x6b\x26\xac\xde\x59\x3f\x19\x57\x69\xcc\xee\xf2\xc7\xaf\xe7\xef\xfd\x5d\xcb\x4d\x55\x7f\x2e\x74\x46\xb8\xd2\x91\xab\x4b\xfd\xf8\xca\xef\x2b\xf2\xa5\x19\x87\x2f\x09\x1c\xd0\x28\x1e\xd3\xb2\xe5\x01\xdd\x77\x1c\x53\xa7\x81\x61\xf8\xa6\x1a\xd9\x31\xeb\x46\x86\xa0\xa8\xac\xc6\x9b\x0e\xf2\x28\x2c\xd1\x41\x2a\x61\xae\x8d\x1f\xf6\xbb\xf5\xd4\xf2\x17\xeb\xee\xcb\xde\xee\xf7\xab\x8b\x0a\x0c\xe0\xf2\xde\x2c\xd4\x9e\xba\x58\x7c\xe1\xbe\xdc\x3b\x5b\x9d\xb8\xd9\x2f\xbd\x4e\xeb\x31\x8a\xe3\xba\x36\x4e\x90\xe8\xb2\x00\x52\x2a\x85\x6c\x88\x12\x97\x85\x24\xb6\x62\x37\x48\x38\xd3\x42\x22\x81\x3c\xcb\x6b\xac\x1b\xd8\x76\x12\xa5\x7e\x88\x2a\x2e\xaa\xf6\x51\xd3\x5e\x5f\x5f\x3a\xf1\x53\xc1\xbd\xe5\xb6\xae\xaf\xd9\xa7\xce\xa0\x8c\xce\xdd\xbb\x3c\xac\x54\xf9\x40\xf5\xfa\x4d\xeb\x4e\x48\xf3\x22\xaa\x90\x40\x8d\x76\xfc\xd0\x87\x42\xa2\x38\x10\x1b\x16\x0d\x02\x87\xc6\x82\x23\xca\x50\x0b\x14\x1e\x24\x44\x35\x5d\x0f\x01\x86\x43\x3e\xcf\x13\xf5\xf1\x9b\xee\xb6\xef\xec\xa8\x73\x3f\xd7\xea\x50\xfe\xc2\xac\x3c\xd2\xbc\x03\x2b\x2b\x67\x13\x5b\x2d\x9b\xfc\x7b\xfd\x9c\xa0\xf3\xe4\xc6\x78\x44\xd6\x15\x07\x52\x8b\x0f\x03\xd1\xe3\x4d\x59\x56\x38\x29\x52\x45\x62\x51\xac\x2b\x38\x3e\x4d\xc9\x26\x25\x9a\x96\x42\xdb\x86\x8e\x10\xb4\x2c\xe4\xba\x0c\xef\x89\xb6\xed\xa6\x20\x51\x5c\x75\xbb\xd1\xda\x7a\xee\xac\xd5\x41\x50\xa5\xf6\x88\x52\xaf\xd6\x5d\x31\xe0\xfb\x01\xa3\x3a\xe6\xaa\xf8\x55\xee\xa7\xe8\x97\x07\xff\x9c\x66\x84\xdb\x3f\xd7\xaa\x69\x4b\x56\x02\x9d\xd6\x62\x07\x71\x40\x47\x9c\xee\x60\x6c\x49\xac\x4c\xdb\x6c\xc2\x1a\x3c\xb0\x09\x91\x04\x57\x11\x28\xe8\x22\x8a\xca\x04\x73\xd5\xf7\xd4\xf2\x15\x2f\xed\x69\x38\xa2\x4b\x91\x51\xfb\xdf\x59\x37\xf3\x62\x89\xa0\xf7\xe4\xdc\xe5\x0b\x9c\x2b\x3f\xf5\x41\xf5\x16\xdf\xf4\x32\x1f\x79\xb6\x0a\xdc\xa9\xd9\x6f\xcf\x9e\x6f\x6b\x15\xaf\xde\x6e\x74\xd0\x7c\xc8\xae\x8d\x85\x27\x34\x52\xe5\x37\x8e\x86\xcf\x7e\x59\xae\xf2\x27\xc3\xf7\xa5\xd7\x69\xa1\x27\x0a\x8e\x61\xcb\x54\x1c\x12\xd1\x20\xb2\x8c\x18\x64\xaa\x92\x4e\xe9\xbc\xaf\xbb\x91\x02\x80\x8f\x82\x00\x69\x16\x93\xb0\xa1\x4a\x5b\x32\x9f\xa2\x0d\xb4\xed\xa3\x03\xe4\xd7\x62\xc7\xb7\xae\x58\xb1\xf4\xf5\x05\xd2\xb3\xb3\xb9\x75\x97\x2b\x0d\xef\xb4\xfa\x8d\xf6\x6b\x86\xe6\x18\xf8\xfc\x57\x4a\x7a\x43\xa3\xe7\x71\x96\x1e\xe8\x2a\xf0\x6c\x5d\x75\x08\x6f\x7b\xba\x10\xdb\xb4\xc4\xfa\x8e\xcc\x9a\xb1\x4f\x89\x21\xcd\x98\xa2\xc4\x12\x4d\x86\xb2\x11\x59\xc8\x4d\xdd\x9c\xf8\xcc\x6d\xf9\xc3\xfd\x1f\x96\xf7\x67\x87\xac\x2b\x3c\x79\xea\xe1\x7c\xe7\xc7\x1c\x99\xda\xee\xfa\xd3\xbb\x9f\xa9\x98\xff\xcb\x2a\x35\x7b\x64\x7d\x65\x35\xa5\x07\x60\x07\x19\x0c\x13\xb3\xbc\xc6\xa8\x21\x44\x09\xa4\x02\x91\xf1\x6c\x9e\xf8\x86\x2f\xab\x12\xb2\x38\x95\x71\x05\x89\x33\x68\xda\x13\x55\x27\x46\x94\x9a\xba\x22\x7a\xe1\xdc\x57\xc7\xde\x7d\xf7\x72\xb3\xa4\xcb\xb3\xdf\x5c\x38\xd2\xe2\x45\x7f\x4d\x99\x85\x9f\xe7\x7f\x65\x40\xd5\x06\x4f\x6c\xdf\xb0\xa0\x6c\x7a\x99\xc9\xb0\x1c\x5b\x91\xc7\x49\xae\x8c\x13\x33\xf0\x51\x08\x6d\x16\xca\x96\x17\x59\x7a\xe4\xc8\x8c\xa7\x06\x81\xc8\xc9\x14\x34\x69\x4f\xa2\x2c\xde\xf1\x24\x2a\x85\xba\x49\xc7\xe6\xd9\xaf\x4d\x99\x7f\x32\xe3\xb4\xd0\xf2\x48\xad\x3d\x4d\x76\x32\x35\x8a\x9e\xd9\x31\xa2\x68\x2f\xb5\xc8\xf3\xfd\x5e\x29\x5b\xbe\x4e\x7a\x0d\x84\x47\x16\xe2\x3c\x8e\x8b\x4d\x5d\xf3\x34\x4b\xa2\xa8\xbf\x52\xc5\x30\xf4\x14\x56\x94\xc5\xd0\x0b\x19\x1f\x30\x4a\x02\xd4\x98\x47\x6a\xe8\x53\x72\x12\xa4\xd8\x16\x3c\xde\xf2\x69\xfd\xfd\xb3\x8d\x32\x82\x91\x0f\x5e\x9a\xd4\x3b\xa3\x5c\x8e\x86\x6f\x54\x2f\x7a\xff\x87\x0f\xb7\x3d\xf9\x4c\xcb\xf6\xab\xb3\xce\x31\x9b\x9a\xef\x51\x4a\x70\x14\x50\xb1\x6f\xeb\x41\x60\xaa\x2c\x04\x72\xa0\x7b\x1a\x13\x3b\x46\xe4\x33\xb1\xc3\x1a\x82\xe4\x7b\xc4\xc7\xc8\xf7\x14\x4f\x22\xff\xff\x0e\xdb\xe3\x55\x7e\xa3\xfb\xc3\xab\xee\xfd\xaa\xc8\xc2\x77\x3e\x2a\xcb\x17\x59\xdb\xbe\x53\xe1\x53\xbf\x77\x98\x55\x7a\xd0\xaf\x51\xcf\x01\x8b\x26\x2e\xcd\x9b\x5e\x2d\x6b\xec\x26\x81\xe9\x41\x49\x8f\x68\x9d\xd3\x05\xd5\x8f\x63\xc9\xb4\xac\x40\x15\x7c\xca\x55\x10\x50\x7d\x97\x44\xd0\x37\x3d\x1a\xa0\x30\xd2\x69\x47\x52\xdc\xd4\x6d\xa0\x2f\xb6\xbf\xd4\x87\xba\x51\xa8\xef\x89\x16\xcb\x8e\xb4\x38\xbe\x7f\xda\xa6\x5f\x86\xd5\x69\x16\xad\xd8\x7d\xe6\xf5\x87\xa3\x46\x8c\x29\x95\x75\xe2\xc9\x94\xb7\xcd\x79\x0e\x34\x63\x5b\x8c\x25\x59\x96\x45\x8b\x65\x30\xf2\x0c\x4e\x51\x75\x41\xc5\x8a\xe2\x29\x90\x20\x86\xf5\x48\x64\xab\x3c\xa5\xe9\x92\x2a\x51\xc1\xe3\xb9\xfa\xa6\x41\xe7\xf2\x6d\x7b\x62\xd2\xa0\x93\xeb\x5a\xf5\xea\xd2\xef\xd7\xe6\x19\xe5\xaf\x6e\x6a\xd8\xff\xa3\xbe\x55\xfb\xfc\xbc\xf0\x6c\xab\x66\xcb\xd2\xeb\x86\x50\x0b\x2d\x53\x72\x62\x01\x24\xac\xa6\xc5\x5a\x22\xc6\x1a\x91\x0c\x33\x21\x1c\x82\x48\xa4\x02\x17\xc8\x1c\x30\x04\x89\xf0\x54\x68\x41\x95\x01\x7a\x6a\xf8\x63\xf7\xca\x0b\xb6\x6c\x70\x16\x75\x7d\xe9\xe7\x8e\x3f\x6c\x7a\xae\xe4\xae\x12\xbf\x37\x38\x3d\xeb\x25\x6b\x46\x9b\x0b\xf5\xd7\x44\xd5\xbf\xcd\xba\x00\x49\x6a\x31\x9b\x90\x8e\x91\xc2\xc1\x04\x98\xb4\xe9\x5b\x4c\x28\xb3\x91\xa1\x03\x9d\xd5\x1c\x8f\xd3\x30\xad\x29\xb2\x46\xcc\x40\x8f\x81\x4c\x47\x88\xd6\x2c\x02\x52\x50\x66\xec\x3e\xf3\x41\x79\x95\xfd\xfe\x85\xfb\xea\x37\xf7\x76\xb7\xac\x32\xb0\x6b\x8b\x8e\x4f\x8d\x3a\xff\x6e\xbf\x93\xcf\x3e\xd9\xe2\xf3\xea\x23\xd3\x6b\xd3\xb6\xe2\x62\x2d\x52\xd9\x40\x55\x15\xa0\x03\x81\x53\x08\xf1\xa0\x2e\x26\x0e\xa5\x69\x96\xad\xa9\x14\x25\xb0\x1a\x10\x12\x0b\xa3\xc0\x34\x64\x07\x88\xa9\x6d\xfa\x97\xdb\x37\xf5\x3a\xcf\x87\xb3\x7b\xee\xf4\xbf\xbc\xb6\xf5\xcc\x07\x3f\xbc\x91\xe7\xf0\x11\xe9\x56\xd9\x8f\x3e\xe8\xf9\xd4\x96\xfe\x0d\xb2\x4e\xb8\x93\xf2\xd8\x32\x00\x98\xe0\x24\x44\x52\x60\x33\x0e\x31\x69\x96\x8d\x39\x5e\x96\xa4\xc8\x01\xba\x96\x04\x58\xd7\x4c\x51\x17\xbc\x40\xe4\x31\x25\x45\x4e\x14\xa7\x58\x29\xbd\xf0\xce\x9b\xb7\xe3\x31\x6f\x4c\x46\xbf\xff\xf9\x74\x85\x91\xd5\x70\xb3\xaf\xde\xb9\x70\x3b\xf7\xac\xcb\x9b\xee\xbe\xf5\xcc\xd6\x7b\xff\x0f\x2c\x1f\x29\xdd\x10\xd8\xb2\xa9\x04\x0c\x45\x4c\x3b\x02\x96\xca\x72\x98\x03\xb6\x01\x0d\xc4\x08\x16\x60\x4c\x95\x56\x58\x56\xe3\xc4\x88\xd5\x5c\xd7\x61\xf8\xc4\xc2\x56\xea\xec\xbb\x07\xbd\x6d\x6f\x91\x81\x6f\xf5\xc9\x56\xff\x9d\x4b\xcf\x57\xeb\x5c\xb9\xf4\xd6\x53\x28\x63\xf7\x9a\x3a\x4b\x27\xd6\x9e\xf2\x24\xa5\x0c\x4a\xf3\x62\x98\xc1\x2a\xac\xe9\x6a\x32\xef\x25\x0a\x9f\x50\x91\x21\x45\x28\x22\xbc\xe5\xd1\x0e\x4b\xab\x96\x99\x84\x1e\x6f\xf8\x9a\xaf\x44\x94\x0b\xf5\x88\xfe\x57\xd1\xf0\xa8\x4d\xf7\x99\x33\xaa\xfb\x84\x39\x73\x9d\x52\xd7\x5b\x78\xb3\x5e\x5d\x6f\x54\xcc\xb7\x7f\xfe\xea\x27\x6b\x4f\xcb\xbf\x76\x25\xbd\x41\xab\x9b\x66\xde\xab\xd0\x66\x2d\x5e\x26\x2e\x6d\x30\x20\xe0\x3c\x93\x95\x49\x10\x71\x9e\xcd\xaa\x18\x38\xb4\x11\x72\x12\xe2\x7d\xc1\xc0\xb4\xc6\x13\x44\x04\x0e\xff\x4b\xe2\xe5\x51\xe3\x18\xba\x7a\x6f\xb9\x05\x83\x1a\x46\xce\x1c\x6a\xd7\xbc\x1a\xfd\x8b\xaf\x2f\x54\x6d\xec\xd8\xda\xf3\xd6\x0d\xf9\x70\xf1\xa9\x86\x1d\xa7\xa7\x19\x55\xcf\x18\x66\x24\x30\xbc\xa8\xd8\x49\x88\x39\x25\xe0\x39\x05\x49\x9c\xa2\xd9\xb6\xeb\x0a\x22\xf4\x13\x8d\x8b\x75\x37\x50\x3d\x36\x54\x55\x9a\xf5\xa2\x18\xa7\x6e\x03\xd5\x3b\xf9\x44\xc6\xb5\x9e\x17\xde\xee\xd2\xfe\x30\xdf\xbd\xc1\xc5\x1e\x93\x66\x5d\x29\xbc\xa0\x45\xab\x36\x93\x4e\x95\xea\x39\xbf\x5b\xe5\xac\xb3\x31\xa5\x6e\x03\xd1\xbc\xe6\x73\x01\x23\x00\x4e\xd0\xfc\x90\xb3\x05\x40\xb3\x0c\x95\xb0\x7f\x65\x78\x4c\xe4\x28\xb2\xac\x86\x38\xd1\x1d\x2e\xa6\x65\x8e\x8d\x29\x27\xc5\xd3\x32\x60\xea\xa2\xb5\x79\xce\xe7\x9a\x79\x37\xbe\x63\x9c\x7a\xe5\x60\xa7\xc2\x9b\x37\xef\xba\xfa\x67\xb3\x75\x75\x8a\x57\x7d\xe5\x5a\xd3\x8f\x1f\xa4\xb7\xce\xd1\x61\xe0\x60\x95\x0f\x80\x2a\x80\x44\x8a\x24\x4a\x66\x18\x8b\x20\xc5\x09\x5c\xcf\x8f\x55\xc2\x86\x34\xc5\x33\x9a\x2a\x20\x93\x10\x8d\x60\x3d\x81\xa9\x37\xbb\x47\x95\x34\x3a\xba\x27\xdf\xd8\xd6\xf3\x6e\x91\x6f\xe4\x0f\x77\x36\xaa\x78\xae\x4c\xfd\x31\x79\xb8\xe1\x0f\x73\x4c\x6e\x6c\x3f\xfb\x66\x9a\x41\x6f\x8c\x09\xd9\x04\xf0\x09\x96\x5c\x2a\x8c\x68\x96\x96\x68\x44\x71\x8a\x85\x92\x84\x20\x53\x56\x6d\x28\x69\x61\x40\x3c\xdb\x23\x5c\x2c\xd3\x24\xa0\x94\xc7\x6f\x7a\x11\x25\x8d\x2f\xf5\x45\xa5\x71\x6b\xe2\xf1\x5f\x15\xe8\xbb\x77\xc2\xb6\xc6\x5b\xda\x7e\xda\x71\xf4\x24\xb7\xd7\xad\xb7\xba\x5f\x2f\x9c\x75\xa5\xc0\xd4\xb3\x9c\xd0\xc0\x0c\xcb\xf1\xaa\x21\x88\x0c\xe7\x78\x30\x91\x78\x35\x16\x5d\x85\x20\xc4\xd2\x09\x62\x5c\xdf\x48\x0c\x68\x73\x81\x6a\x50\x06\xf2\x18\xce\x7c\xfc\xc8\x97\x48\xd3\x8f\xf6\x7c\xb5\x64\xb4\xd3\xe4\xf9\x49\x4b\x4a\x0d\x1f\xa7\x8e\xa4\x7e\x98\xbf\xe5\x69\xee\xc3\x72\x5d\x5e\xa9\xf3\x62\xee\x3c\xe9\x75\x43\x87\x63\x44\xc5\x0d\x42\x20\x23\xe8\xb9\x2e\x07\x4c\xc9\x67\x35\x3f\x8a\x79\x40\x93\x24\x30\x9d\xc0\xc7\x5c\xa4\x26\x1a\xe4\x45\xc9\xb1\x7c\x8a\x44\xa9\xdd\x10\x34\x98\xc0\xe4\xf8\xec\x93\x6d\x77\xbe\x2c\x57\xf7\x9b\xee\x9f\xff\x5e\xb2\x7e\xd1\xe6\x5f\xde\x5f\x7a\xf1\x5c\xc5\x71\xcb\x72\xb6\x9f\x91\x75\x62\xe2\xd4\x0c\xbf\x5e\x68\xaa\x4c\xe8\x7b\x06\x6b\x5a\x30\x76\x22\xac\x08\x96\x14\xd3\x30\x60\x14\x8f\x83\x58\xb7\xdc\x80\x76\x1c\xc5\xa1\x79\x06\x51\x96\xa7\x71\x29\x8c\xe3\xc1\x84\xee\xc5\x7e\xab\x12\xf4\xfc\xf6\xc9\xe1\xd5\xb2\x0f\x9f\x7f\x7d\x6c\xde\xdb\xdd\xae\x94\x7f\x25\x5b\xde\x23\xe7\x0e\x8c\x38\xf7\xf6\xcd\xf4\xba\xa1\x21\xdb\x49\x62\x30\xb6\x10\xe9\x2e\xf0\x23\x96\x67\x29\x4f\x71\xf5\x30\x0a\x74\x22\xd2\xb2\x03\x90\x60\x84\x62\xc2\x03\x5d\x94\x45\xec\x09\xa2\xed\xa5\xee\xc6\x8e\xaa\x76\x0a\x1f\x0b\x56\x8b\x03\xfa\x54\x3b\xd9\xe5\xca\x9a\xcd\x23\x5e\xdf\xf9\xc5\xce\x3a\xd3\x6b\x7f\xd7\xe5\xd6\xb1\xb5\x0d\x47\xbc\x94\x66\x18\x58\x68\xc9\xae\xc1\xf0\x86\x63\xaa\x86\x22\xd9\x7a\xcc\x98\xa6\x47\x1b\x14\x30\x6c\x95\xa1\x09\xe7\xba\x32\x0b\x58\x83\xa3\xf8\x40\x34\x29\x1f\xc6\x99\x08\x6a\x0f\x78\xbf\x68\xdd\x60\x5f\x8b\x0a\xeb\x6b\x37\x38\xbe\x59\x81\x79\x26\x95\x5d\xbd\xe0\x89\xaa\xd3\xe3\x0d\x8d\x8f\xfd\x91\x5f\xa8\xa1\xa5\xd7\x40\x88\x19\xd8\x89\x6c\x5a\x8a\x6d\x71\x94\xec\x52\x01\xe0\x39\x20\x0a\x62\xcc\x85\x32\x03\x1c\xd6\x48\x28\x28\xaa\x0c\xe3\x21\x99\xf8\x0c\x43\x68\x4f\x4e\x9d\x7b\xe4\x7d\x61\xeb\xe9\x89\xfb\xfc\x45\x33\xfe\xe8\xdc\xf0\xd7\x4a\xd3\xd5\xef\xb6\x9c\x3c\x3b\x6c\xaf\xbd\x8b\xf6\x7e\x39\x91\xfc\xf8\x07\x95\xe6\xe7\xc5\xb4\x59\x36\xa0\x2c\xce\x44\x9c\x85\x59\x21\x34\x9d\x50\x13\x81\xa7\x44\x54\xc0\x9a\x9c\xa0\x78\x86\xc4\x45\x11\x34\x00\x42\x20\xb2\x1c\x3e\x4e\x31\x65\x28\x6d\x7f\x53\x70\xcd\xb2\x7c\xc5\x2a\x0f\x3e\xf9\xf6\xa5\x2f\x7e\xdc\x97\xed\xd8\xb6\xd5\x25\x7b\xb5\x1f\x54\xa0\x49\xe9\xe8\xf5\x57\x27\xae\x4d\x6f\x35\xce\x49\xa6\x16\x38\x6c\x44\xfb\x26\xab\x6b\xb4\xcf\x6a\x81\xc5\xe3\x48\x71\x75\x46\xf4\x5d\x9a\x22\x36\xf2\xe5\xd0\x03\xa2\x27\x33\xbc\xaa\x08\x96\x43\x3d\x5e\x8d\x2f\x78\xde\x14\xab\x3c\xd5\xf9\xc4\x1f\xe6\x57\xb9\x99\x31\xb9\x3e\x58\xbb\xa1\x40\xbe\x11\x5f\xf7\x2e\xf4\x6b\x89\xe7\xe7\x7c\xdc\xbb\x6c\xd6\x45\xe2\x33\xd9\x22\x0e\x89\x6f\x61\xd6\x61\x78\x9b\x17\x8d\x88\xa1\x80\xa5\xf8\x8e\xc7\x19\x12\x25\xe3\x38\x88\xb4\x80\xb7\x5d\x40\x19\x34\x6f\x6a\x82\x0e\xbc\x24\x4a\xfd\x22\xc2\x8c\x13\xd7\x66\x16\xda\xbe\xc7\x2d\xb4\x2d\xe7\x4f\x9d\x46\x57\xa9\xbd\xe3\xd2\x81\x3b\xe7\x56\xed\x60\xea\x7e\x96\xa7\xdb\xdd\x6f\x0b\xa6\x79\x66\xa0\x04\x12\xad\xe9\x26\x8c\x44\xc0\x20\x46\xe5\x55\x57\xd5\xdd\x88\xa2\x22\x46\x25\x12\x54\x70\x12\x61\xda\xd7\x6c\x9e\xe2\x25\xcb\x57\xa0\xe3\xa6\xb8\xe9\x76\x07\x9a\xf7\xae\x31\xe6\xd9\x4b\xca\xe7\x6d\x4e\xfd\xd9\xf0\xe8\x48\xe7\x89\xfa\xdb\xbb\x7e\x3b\x77\xe1\x57\x6b\x96\x77\x9f\xf5\x60\x4d\xd6\x87\x7d\x29\xed\x59\x09\x44\x53\x96\x2d\xc9\xa0\x5d\x53\xb7\x34\x27\x76\xe8\x48\x34\x12\xdf\x00\xb4\xa3\x21\x4a\x33\x6d\xd3\x32\x1c\x5f\x55\x42\x3a\x50\x34\xde\x32\xb8\x14\xe9\xd2\x9c\xad\x53\x8f\xac\x79\x61\x7f\x01\x7b\x55\xdf\xa7\x7f\x6f\xd9\x73\xe2\xdb\x79\x37\xb2\xb3\x87\x7c\x3e\x75\x33\x3f\x70\x7c\xbf\x11\xe3\xd2\x3c\x99\xb1\x14\x9a\xe2\xa9\x00\x2b\xb4\xe4\x60\x53\x8a\xdd\x98\x18\xa1\x2b\x9b\x0a\x88\x7d\x56\xc3\xd0\x61\xb0\x1c\x8b\xb4\x09\x55\xdf\x63\x35\xc5\xa4\xec\xff\x6c\xc5\xff\x1b\x94\xfc\xdf\x06\x4f\xbd\x32\x9a\x34\xe9\xf1\xbf\xd4\xd6\x7e\xca\x75\x68\x66\x5d\x7e\xce\x6b\xa3\xe4\xef\x76\xb7\x6c\x37\x69\x57\xd5\xca\xdf\x80\xa2\xc7\x96\xb5\x2e\xf4\xd6\xbd\x63\xfd\xfb\x3b\x69\x1e\xd1\xe3\x00\x2a\x92\x88\x34\x03\x4a\x96\x1f\xf3\x4e\xc4\x24\xb1\xaa\x63\xc6\x35\x02\xc2\xda\x02\x8a\xc2\xd8\xa7\x62\xc8\xc6\xba\x24\xa8\x22\xd4\x88\xc2\xa6\x6e\x48\xbd\x09\xe6\x8c\xea\xcf\x16\x19\x9d\x6c\x38\x3c\x76\x2c\x9f\xe7\x45\xc5\x8c\x96\x6e\x2b\xb7\x79\x60\x46\xc6\xe0\xb0\xd1\xb2\x5e\xc3\xd2\xfb\x1a\xc5\x0e\x47\xb0\xe7\xb9\xc8\x4a\x18\x64\xd1\xbc\x69\x85\x9e\xc0\x50\xd8\xf2\x14\x25\x0c\x1d\x1f\xf9\x1e\x24\xf8\xaf\x8c\x2b\x11\x24\x11\x07\x36\xc8\x44\x77\xb0\xaa\x8d\x76\x6d\x3d\xb1\x61\xe8\x53\xd7\xf7\x9d\xaa\xf2\xa0\x20\xae\xfb\x8c\xf7\xf1\x86\xfc\x3d\x0e\x94\x7a\xbd\xe9\xcc\x0d\x27\x86\x65\x7d\x2b\x3d\x65\xc0\x71\x03\x25\xa6\xa9\x08\xb9\xae\xa6\xba\x22\x20\x0c\xa6\x42\x1f\xfc\x65\x4a\x12\x8d\x2d\x5a\x94\x14\xd5\x73\x23\xec\xf3\x26\x45\x18\x17\xc9\xc8\x65\x53\xbf\xfd\x6b\xf6\xb4\x3d\x35\xe9\xdc\x95\x8f\x9a\xdc\xfb\x2c\xd7\xd5\xd1\xfd\x4f\xbd\x70\xaa\x4f\xb6\xea\xbb\xa2\xc9\xf7\x0e\x74\x6d\x76\x73\xd3\xd8\xf4\x6e\x8a\x22\x59\x0d\x43\xdb\x54\x74\x81\x30\x96\x21\xe3\x04\xc3\x98\xe1\x64\x27\xb1\x70\x62\xbb\x56\xec\xa8\x84\x58\x14\x1b\xa8\x21\x0d\x61\x40\xa8\xd0\xa4\xfe\x93\xb2\xf4\xcd\xf5\x7f\x9b\x8d\xf4\xca\x98\x9a\x2d\x5b\x9e\xde\x8f\xfc\xcb\x19\xbb\x6b\x2f\xbe\xff\x49\xd9\x83\xfb\xc3\x43\xb3\xbc\x36\x4f\x9c\x7d\xf7\x9b\xaf\x97\xe4\xfd\x74\x6f\xa7\x4f\x3e\xe9\xbc\xd9\xfd\xf1\xdb\x8a\x69\xde\xa6\x13\x79\x45\xc3\x14\x2f\x4a\x49\xa2\x6b\xa6\x1a\x9a\x96\xab\x9b\xa6\xe0\x44\x26\xcf\x87\x4c\x60\xab\x50\xf5\xc3\x50\x05\xba\xaa\xe8\x84\x93\x6c\x2e\x93\x14\xf8\xa7\x3a\xbf\x55\x0b\xa7\xe4\x69\xb7\x7c\xdd\x93\xeb\x94\xd5\x95\xa6\xb4\xaf\x90\xf1\x2d\xd8\x91\x57\xb2\x7b\x1e\x99\xbd\xf6\x1c\x77\x2d\xcd\xf5\x11\x92\x6d\x85\xe6\x75\x24\x5b\xb1\xcd\x42\x44\x29\x1c\xe7\x87\x42\x2c\x68\x1e\x82\x5a\x84\x18\xa2\x84\xd8\x96\x20\x23\x13\xa0\x99\x9a\x09\x39\xef\xf1\xd0\x7a\xa8\xd4\xbd\xdd\xea\xdc\x03\x3b\xd4\x5a\xbf\x8e\x2c\x73\xa7\x61\xff\xa6\x45\x2e\x0f\x9e\xab\x54\x2c\xf0\xc7\x31\xb0\x69\xfb\x7b\xd5\xba\xa5\x37\xb4\xda\x31\xa2\x65\x10\xc4\x6e\x60\xe8\x8c\x09\x2c\x24\x89\x16\xef\xeb\x94\xc8\x7a\x02\xc3\x29\x66\x22\x28\xa6\x05\x08\xef\xa3\x40\x74\xe8\xc8\xd1\xb9\x4c\x64\xcb\x3a\x1d\xfd\x71\x60\xd0\xb6\xfd\xe7\x2f\x71\xc3\x0a\xef\x29\x9c\x73\x75\xed\x69\x83\xab\x2f\x6e\x30\xa2\xf6\xf8\x2d\x2d\x77\xb6\xbb\x1a\x64\x5d\x35\x34\xe5\x4d\x07\x0c\x2f\x43\x83\xb3\xb1\x29\xda\x16\x11\x70\x00\x00\x46\x22\xe7\x25\x21\x66\x2c\xcc\x08\x0e\xcf\x69\xbe\x02\xe5\xd0\xb1\x82\x38\x16\xcd\xe8\x5f\x00\xdf\x7f\xde\xf4\xc4\x8c\xff\x7f\x2b\xbd\x6d\xf2\xf1\x99\xd6\xbf\x80\x78\xc5\x4f\xfd\xef\xb7\x9c\xdc\xfd\xb5\xa7\x76\x37\xf9\x6c\x42\xc3\x59\xf4\x0f\x5b\x73\xaf\xc9\x58\xb9\xb2\x57\xc6\x43\xe3\xe1\xc3\xb1\xe5\x1f\x31\xa8\x2b\x6d\xac\xce\x9f\x37\x99\x57\xa9\x49\xf1\xab\x61\x97\xd1\xfd\x8f\x64\xac\xcf\xf5\xa0\x7e\xab\x0f\x8f\x72\xd3\xaf\xe7\x23\xbf\x16\xbf\x97\xe6\xaf\x93\x84\x2a\x65\x06\x92\xa5\xd3\x96\x91\x10\xa4\x22\xe2\xd0\x51\x8c\x2c\x5f\xf5\x49\xa2\xfb\xa6\x15\xf2\x7a\x0c\x19\x82\x13\xd3\x88\x29\x44\x52\x91\x06\xdc\x29\xd3\xec\x23\x73\xd2\x82\x3b\xbf\x3f\xf9\xeb\xcd\x57\xa9\x21\x85\x9b\xef\x7b\xf7\xc4\xd4\x0e\x23\x73\x65\xdb\x1d\xf5\x3b\xd3\xb7\x41\xdd\x34\xf3\x08\x1b\x9a\x49\x0c\xe2\x61\x91\xa5\x94\x40\xd6\x63\x1a\x61\xca\x94\x30\x94\x80\x2e\x29\x28\xa4\x5c\x03\xc4\xac\x84\x81\xc8\x01\x18\xea\x88\x50\x46\xea\xae\x79\x70\x62\xec\x9c\x77\x7a\x35\xbf\xd2\xaa\xd3\xe5\x23\x5e\x8d\xec\x6f\x32\x1d\xb5\x16\x93\x27\x94\x5d\xb5\xa2\x66\x81\x89\xb7\xdf\x9d\x3d\x25\xbd\x06\x15\x7b\x56\xe2\x25\x9c\x1e\x60\x4e\x48\x62\x43\xf0\x03\xc6\x16\x88\xa4\xa9\x94\x21\xf0\xc0\xf1\x4d\x3b\x36\x69\x17\x38\x81\x0a\x58\x33\xf6\x6d\xc1\x4e\xd1\x27\x18\xfd\xe2\xbd\xf1\xe2\xee\x0d\x75\xdf\xdc\xf5\xe2\xa5\xb1\x0f\x1f\xfe\x50\x46\xeb\x79\xfe\xcc\x89\x0e\x2f\x28\x8b\xea\x0e\xb9\xb2\x64\x4d\x7a\x85\x37\x91\xec\x43\x47\x8a\x6c\x45\xd0\x10\x23\x0a\xb1\x22\x06\xaa\xcb\x9a\x0a\x62\x42\x2a\x66\x9c\xc4\x97\x05\x37\x09\x29\x4b\x64\x64\xc4\x39\x3a\xa5\x4a\x0e\x4c\xed\xba\x15\xd7\x4f\xbe\x51\x6f\xf4\x83\x7d\x5f\x37\x7d\xbf\xfb\x79\xf5\xa4\xc8\xb5\x2b\xd4\xd9\x2b\xf7\x21\x7c\xbd\x48\x8f\x69\xd7\xea\x5d\x4f\x73\x90\x74\x25\x21\x96\xd8\xd0\xd1\x92\x30\xb0\x88\x16\xab\x14\x0c\x2d\x86\xe6\x75\x2c\xc8\x2a\xf4\x55\x3e\x11\x68\x21\x56\x42\xd1\xb5\x6c\x4a\x37\x98\x80\x62\x52\xa7\x39\xfa\x57\x93\x36\x9f\xbb\xd6\xfc\x7a\xf0\xd3\xf3\x53\xec\x5c\xe2\xf8\x0d\x25\xaa\x6e\xd9\xf3\xfb\xae\x7b\x03\x0e\xed\x9e\xf5\xfd\xee\xde\x3b\xd2\xec\x8a\xbe\x08\x30\xad\x84\x92\xa3\x13\xd3\x62\x62\x36\x08\x39\x4b\x70\x19\x35\x02\x90\x8b\x6c\x13\x28\x0a\xaf\x40\xcd\x12\x23\x87\xb1\xad\x40\x04\x8a\x9e\x09\x04\xea\x8f\x72\x65\x8c\xe7\x85\xdb\x25\xa6\xfe\x23\xac\x39\xc4\x6d\xc0\x18\x56\xef\xf3\x4e\xa3\x72\xb9\xae\x7e\x91\x6f\x65\x0d\x5a\x3d\xfa\x48\x39\x53\xfc\xbb\xa3\x7d\xe7\x4f\xfb\xb4\x16\x57\x40\x18\x33\xb2\xc7\xc0\x37\xb6\xbd\x58\x32\x67\xde\xbe\x5c\xe5\x75\x3f\x94\x2a\xd3\xe4\x17\x79\x63\x9a\xbb\x65\x96\xa3\x47\x58\xf6\x0d\x43\x60\x61\x60\x68\x31\x54\x10\x0b\x38\x80\x9c\xd0\xc5\x4c\x10\x21\x49\x13\xa0\x05\x65\xc3\xd4\xb5\x38\x66\x62\x81\x8a\x1e\xf7\x82\x5a\x60\xe3\xc8\x76\x05\xe1\xc5\xd5\xd7\x32\x7e\xfd\x10\xdd\x9b\x08\x3a\xcf\x1f\x38\xeb\xc5\xd2\x9b\x8e\xd5\x79\xe5\x2b\x7d\x66\xe7\x24\xbd\x47\xd6\x58\x00\x05\x8f\x89\x28\x4a\x14\x5d\xf8\x57\x21\xe9\xf9\x80\xc7\xb6\xac\x11\x3a\xe6\x3c\x27\x00\x31\x2d\x30\xb6\x09\xe9\xc8\x91\xe9\x48\xe0\xff\x26\x21\xf0\x3f\x47\x9e\xdc\xa2\x77\xbe\x8d\x1d\x5a\xb4\xde\xb1\xb2\x45\x93\x5c\xad\xdc\x27\xae\x2f\x9e\xd1\x7b\x58\xc3\xdd\xe3\x17\xef\xeb\x38\xff\xe2\xbe\xef\xd2\x8b\x10\xc5\x16\xa2\x69\xc0\x44\x6c\xc4\x28\x86\x2e\xe1\x50\x95\x98\xc4\x43\x10\xf0\x12\x67\xe3\xc4\x49\x4c\x89\x00\xa2\x06\x96\xc8\xb1\xa2\x83\x91\x96\xf0\x56\xea\x5a\xb7\xc2\xca\x99\x2b\x6a\xa3\x52\x5c\xf3\x63\xc3\xc6\x19\x1f\xbc\x32\xb5\xff\x89\xb6\x95\x4a\x49\x5d\x8f\x15\x6b\x7e\x60\xf3\x19\xf1\x5e\xd6\xd5\xa0\x53\x46\x76\x51\xd6\x58\xca\x34\x45\xce\x90\x69\x31\x94\x9d\x80\xc7\x96\x8a\xb1\x16\xe9\xac\xc3\xb8\x8a\x00\x1d\xa4\xd2\x14\xb1\x4c\x48\x3b\x8e\x2d\x20\xc4\xab\x8f\x3f\x46\x35\x8c\x8d\x27\x17\x3c\xd7\x4b\x43\x47\x06\xe8\xd3\x47\xd7\x0b\xa8\x3e\xb3\x87\xcb\x7b\x76\x97\xbc\x5c\xfd\x52\x1f\xe6\xd3\x2d\x59\xdf\x99\x48\x4d\xf2\x65\x03\x89\xe7\x95\x38\x8a\x39\xe0\x6b\x0c\xf2\x03\x9f\x02\x02\x83\x83\x28\x31\x25\x17\x90\x84\xd6\x80\xad\xca\x8e\x04\x0d\x1e\x51\x82\xa0\xfe\x8d\x24\xf3\x3f\x7b\x40\x0f\xb2\xc7\x65\xe4\x76\x5e\xc3\xef\x2a\x57\x69\x35\xad\xcb\xa4\x6f\x8b\x2e\xcd\xdf\xe5\xf6\xe0\x17\x76\x7c\xf4\x53\xad\x37\xce\x3f\x9b\x75\x3a\xb5\x94\xe1\x91\x84\x8a\xa3\x26\xc8\xe1\x4c\x56\x52\xb1\xc9\xaa\xb6\x07\xcc\xc8\x76\x38\x0b\x21\x23\x52\x70\x68\x4a\x1a\x4f\x19\xd0\xc6\x82\xaa\x31\x92\xad\xa8\x7c\xea\x2e\x59\xdd\x27\x48\xb6\x65\xf9\x3e\xc3\x6d\x7a\x8f\xdf\x74\x73\xc5\xfd\x60\xe1\xc0\x02\x7d\x3a\xfe\xe3\x58\x9b\xa8\xfa\x61\x7d\x68\x41\x94\x75\xea\xc6\xd4\xbc\x9e\x31\x43\x6b\x26\x88\x24\x56\x70\xcc\xf8\xaf\x64\x97\x46\xc8\xf3\x65\x5d\x84\xb4\x2e\x88\xb2\x2e\xc7\x8a\x03\x69\x9b\x35\x63\x83\xb7\x40\x4c\x94\x14\xe3\xae\x97\x08\x3b\x74\xd9\xea\x5a\x0f\xf2\xd1\xef\x56\x93\x8f\xe7\x9c\x13\xec\x01\x25\x48\x8e\x07\x55\x9a\x69\x42\x87\x1a\xeb\x57\x4a\x69\x46\x3d\x0b\xbc\x23\xe8\x32\x52\xac\x90\xe5\xa4\xc0\x60\x6d\x11\x06\x31\xab\x00\x8a\xb0\x48\xe1\x10\x0d\x81\xe7\x09\xbe\xa6\xb9\x89\x4e\x7c\xc3\xe7\x80\xf9\xf8\x50\x71\x7d\x81\x56\x2f\xbd\xd8\x35\x7e\xfe\xdc\x83\xed\x13\xce\x95\xeb\x56\xbf\xd8\xcc\x81\x39\x1f\x94\x1c\xff\xca\x8f\xfb\xcb\xad\xe9\x93\x33\x6f\xd6\xc1\x93\xa9\xeb\x22\xde\x40\x86\x0b\x0c\x47\xf1\x79\xc7\xf0\x62\x1c\x41\xa0\xbb\x22\x74\x08\x4b\x2b\x28\x62\x64\x2f\xb1\x54\x12\x41\x4b\x77\x18\x15\x72\x2a\xa3\x7a\xa9\xeb\xa2\xb6\x5d\xb2\xe5\x6a\xbd\xaf\xf6\x6d\x79\xdc\xbd\xd5\x75\xd7\x6e\x99\x39\x92\xbe\x70\xa7\xdb\x0b\x13\x67\x82\x85\x6b\x7f\x1e\x30\xe7\x89\xac\x1b\x47\xea\xb7\x93\xc2\xc4\xc6\x2e\x50\x13\x93\xf6\x29\x83\xa8\x3a\x71\x62\xac\x61\x4b\x14\xa1\x0b\x39\xc7\xd4\xa8\x50\x31\x63\x35\xa4\x28\x95\x71\x91\xeb\x11\xf3\x71\x37\x3c\x38\x77\xe0\x64\xf1\xea\x8f\xa5\x4a\x7d\xf1\xd1\xdb\x97\xcf\x2e\x5c\xf9\x54\x89\xa7\xe6\xac\x6f\x5b\x68\xe7\xad\xee\x5d\x5a\xb7\x38\x69\x47\xe9\xb5\x67\x1e\x0b\x82\xee\x00\x95\xb2\x65\xc3\x50\xff\x2a\xb5\x25\x11\x32\x8e\x17\x04\x1e\x01\xb2\xa1\x79\xac\xe9\x03\x55\x73\x03\x64\x42\x42\x28\x19\xda\x24\x35\x24\xe1\xb9\x49\x5d\x56\xae\x1a\xd5\xb7\xf8\x85\x7a\x0d\x7d\xe1\xf8\xe8\x13\xdb\x61\xce\xec\xcd\x86\x56\x99\xf0\x6c\xb7\xdc\xbf\xbc\x3a\x75\x6d\x7a\xb3\x6f\x24\x1b\x4a\x22\x79\x72\xc2\x06\x11\x04\xb4\xce\x03\x4f\xf5\xed\x50\x92\x2d\x43\xa6\x03\xc8\xfa\x1e\x8d\x64\x96\x23\x92\x2e\xb3\x74\x12\x4a\x9c\xc4\xa5\xc0\x7c\x3a\x6f\xac\xb8\xda\x9b\xba\x77\x74\xfd\xcd\x8d\x4b\x4e\xb7\xbe\x54\xbb\x46\xab\xbd\x27\xba\xbc\xf5\xe1\x92\xbb\xec\xcb\x05\xf3\xbe\x55\x2d\xeb\x38\xac\xd4\x1d\x0d\x96\xa1\x81\x6b\x6b\x3e\x2b\xf2\x9a\xa7\x84\x28\xf1\x01\x15\xeb\x18\x4a\x3c\xa5\x07\xa2\xa4\x03\xc1\xb1\x98\x40\x8e\x5c\x9f\x70\xb4\x4d\xfb\x9a\x91\x09\xe6\x33\x77\xc6\x13\x75\x1e\xf4\x36\xde\xab\x8e\x5e\x6c\x7e\xd4\x17\xae\xb7\x5c\xfb\x63\x8e\xc2\x3d\xfd\x69\xbd\xfa\xb7\xac\xf6\x49\xad\x97\x67\x3d\x12\x1e\x8b\xde\x2e\xb0\xf1\x4c\xe1\x19\x9b\x4e\x7b\x1b\x17\x9c\x60\xfd\x46\xb5\xfd\x6f\xb6\xff\x72\x8b\xee\x3b\xac\xec\x27\xc6\xfe\x0d\x0f\xd3\xcb\x6a\x84\xf9\x90\x25\x34\x92\x23\x93\xf2\x13\x31\x32\x19\x42\x04\xd9\x63\x13\x27\x40\x40\x37\x42\x96\x22\x6a\x2c\x8b\x21\x87\x4c\xca\x63\x0c\x14\x02\x99\x4a\xf1\x5d\x6a\xbc\xfc\xcc\xdd\x7c\x44\xe8\x31\xf9\xa5\x7c\xdf\x7d\xf0\x5a\x9d\x35\xce\xca\x9e\x27\xaf\x2f\x6f\x38\xce\xfe\xed\xe1\xc8\xf7\x9e\x09\x7f\x48\xaf\x29\xb9\x31\x30\x0c\x23\xb4\x3d\x51\x03\x42\xac\xd3\xaa\x6d\x21\x3a\xb6\x6c\x0d\x88\x5c\x98\x84\x8e\x24\xca\xa2\x4a\xb1\xbc\x24\x3b\xae\x6f\xd2\x21\x9d\x88\x8f\x1f\x79\x60\xbe\x55\x3b\xf7\xb6\x8d\x16\x2c\x1c\xbb\x68\xeb\xc9\x1f\x06\x97\xe7\x1a\xb4\x7b\xed\xd0\xd6\x7a\xcf\xbd\xde\xf0\x99\xd7\xe7\xc4\x3b\xd2\x2b\x1b\x8f\xbc\x98\xa6\x74\x43\x95\xd5\x80\xe7\x5c\xd5\xa0\x03\x3e\x8c\x55\x5d\x43\x4a\x02\x92\x58\xd3\x14\x9a\x04\x30\xc2\x32\xd0\x25\x59\xc4\x7f\x45\xa0\xbf\xf5\x89\x1f\x71\x5a\x7a\x4d\xe1\x2a\x87\x5f\x7c\xf1\x45\x7a\x62\xa5\xbc\xf2\xe8\xb0\xe6\x41\xfe\xcd\x71\xad\x5e\x9c\xf3\xdb\xc5\xbe\xf5\x5a\xef\xbb\x3a\x3d\xbd\xeb\x37\xd8\xe7\x0c\xc1\x4f\x1c\x4e\xd7\x12\x22\x86\x7c\xc8\xbb\x9a\xe0\xb0\x21\xb6\xe3\xd8\x12\x6d\x43\x61\x28\x4a\x8e\x0c\xc3\xb6\x24\x8f\x32\x12\x8a\x43\x76\x0a\xda\xe3\xd1\x0f\x0f\xf4\xaf\xf6\xe1\xc3\xfa\x3b\x86\xbe\xd1\xf9\xed\x7f\xec\x2a\xde\xaf\x59\xc5\x51\x8d\x9d\x2d\x97\x07\xbc\xf4\xc6\xa0\xc9\x93\xda\x89\x69\xde\x9f\xa5\x45\x8f\x28\x1e\x8a\x95\x08\x12\xd5\xd0\xa8\xc0\x92\x02\x36\x09\x44\x9d\xb2\x02\xda\x52\xd5\x58\x70\x43\x5d\x60\x9d\xc4\xb5\x92\xd8\xc3\x7f\x9f\x7b\x3c\x72\xd3\xc5\x6f\xf5\xef\xb8\xae\xcb\xa9\x25\x05\x77\x95\x4d\xd6\xd5\xba\xda\xf3\xca\x97\xed\xd1\xe4\x3b\xea\xa5\x7c\x95\xd7\x66\x14\x7d\xf3\x58\xcf\xf4\x16\x0b\x11\x64\xbc\x44\xf1\x7c\x3f\x21\x91\x02\x59\xc1\x89\x13\xec\x41\x37\x54\x28\x97\xb6\x28\xd7\xe7\xa0\x46\x51\x32\xc3\x1b\x2c\x63\xb9\xc8\x61\x4d\x2a\x05\xd7\x41\xbb\x2d\xed\xe5\x56\xc5\x5b\x76\x9f\xd1\x78\x71\xa5\xbc\xd2\xec\x6d\xb5\xbf\x1c\x51\xab\xe9\xb6\xbc\xbd\xca\xb0\x4a\xbb\xbc\xc3\x95\x34\xcb\x58\x62\xd1\x07\x0a\x1b\x52\x1c\x60\x2c\x85\x91\x18\x4d\xf2\x54\x85\x61\x15\x1d\x51\x21\xcb\xd9\x9c\x1a\x6b\x89\x28\x9b\xba\xa8\xda\xb1\x60\x6a\xac\xaf\x64\xb2\x2f\x91\xfd\xa7\x65\x85\xa4\xdc\xdd\x6b\xb6\x9e\x56\xb9\xd9\x74\x38\xfb\x93\x29\x8b\x0e\xc4\x07\x6e\x94\xb8\xd4\xf1\x89\x72\xa3\xb8\x95\xdb\xb3\x5e\x2c\xa4\xce\x54\x14\x46\xd3\x13\x86\xa6\x31\xd4\x64\x0c\x10\xed\x26\x8c\xef\xa8\x8a\x42\x28\x01\x1a\x89\xaf\xc7\x9c\x1b\x88\x2a\x67\x33\xb4\x6b\x26\x8a\x6f\x12\xfb\x71\x9b\x6e\xdb\xec\xcd\xdb\x7b\x47\xe8\xc3\xbf\xdc\xf8\xe6\xd0\x9b\x4f\x5d\xa7\xb3\xaf\x2e\xce\xaf\x8e\xde\x78\xbe\x54\xad\x1f\xea\x3e\xd7\x72\xd9\xa6\x34\x67\x29\xba\x2e\x1a\x2c\x6b\xc8\xae\xe5\x11\x8e\x28\x16\x2f\x22\x51\xf7\x62\xc1\xd7\x75\x37\x34\x3d\x41\xc3\x86\xaa\xe9\x98\xc4\x96\x69\x1b\xa2\x88\x55\xe7\xf1\x80\xa7\xcd\x9c\xf8\x43\xd1\xe2\x6b\xaf\x84\x2d\x73\xe0\xaa\x55\x96\x3e\xbb\x67\xa2\xdd\xbc\xd3\xca\xbe\x1d\xb8\x9f\x27\xdc\x6f\xfb\x73\x78\x38\xbd\x59\x8a\x17\x39\x4e\x62\x22\x4e\x62\x84\xc4\x91\x81\x8b\x19\xc7\x45\x2e\x13\xfb\xb6\x1f\x59\x6e\xe4\xb0\x8c\xa8\xaa\x49\x48\x6b\x22\x70\x7d\x9a\x88\x08\xa9\x7f\x33\x8e\xbf\xbf\x9d\x03\xe1\xb4\x2f\x76\x2c\x31\x66\xfb\xcc\x27\xa5\xcb\xef\xec\x90\xb3\xf1\xeb\x3b\xeb\x5c\x7d\xaa\xee\xc6\x9f\xbb\xe6\x6a\x36\x30\xef\x2f\xc1\x23\x4e\xbb\xa4\xff\x86\x35\x55\x5a\x73\x1b\x7f\x29\xf2\x45\xa7\xb5\xa3\x56\xbf\x5a\xaf\xdf\x3f\x56\x65\xfb\xb1\xd6\x27\xd3\x3b\x7d\xa8\x5e\xda\x73\x2e\x48\x33\x6d\xa4\x9c\xe8\x16\x8d\x5c\x4e\x11\x01\xc5\xe8\x3c\x4c\x2c\xd7\x12\xc2\x08\xb8\x34\x82\x82\xc3\xe8\x86\x1f\x11\xd7\xb6\x69\x5e\x54\xd9\x88\x09\xb4\x7f\x89\x1b\x3d\xea\xb4\x57\xbf\x19\x3f\x0e\xbd\xb8\xb6\x4f\xdb\x65\xd7\xf6\x3d\xf9\xbd\x56\xe8\x4c\x0d\xa6\xfb\x01\x4e\xfd\xa4\x44\xe5\x93\x75\x4b\x1e\x78\x32\xeb\xd6\x9f\xd2\x69\x4d\x88\xd9\x80\xb3\x34\x95\xb6\x45\xdd\x63\x4d\x5b\x70\x05\xc5\xb0\x74\x57\x13\x19\x68\x3b\x82\xa8\xab\x21\xc3\x5b\x90\x61\x75\xce\x45\x0c\x15\xfc\x0d\x92\xf6\x48\x8f\xab\xef\xd1\xca\xdf\xf7\x98\x5f\xec\xd0\x83\xa9\xc2\x67\x63\x2b\xb4\x9a\x3b\xb0\xd2\xcc\x57\x95\x1b\xbf\xbe\xd7\x74\xe9\x9a\xa9\x83\xec\x6c\x69\x16\x67\x60\x34\xac\x63\x15\xd8\x7c\x24\x68\x22\x96\x7c\x55\x71\x71\x1c\x20\x43\x04\x51\x60\x21\x85\x72\xb8\x30\x70\x89\x6d\x93\x80\x07\x9a\x1a\xa1\x50\xf1\x52\xc7\x9a\x6a\xd3\x8f\x3d\x7c\xf8\x87\xd3\xfb\xe9\x46\x4f\xcc\xfd\xf1\x7d\xab\x77\x5b\x70\xb1\xe7\x9e\x50\xfc\xa0\xc7\xa1\x72\x2f\x6f\x19\x77\x64\x6a\x9a\xb1\x03\xa1\xe5\xb2\xd8\xb4\x05\xde\xd5\x49\xe8\xeb\x01\xa6\xfe\x29\xec\x0a\x3d\x9a\x78\x06\xd1\xe8\x48\xe7\x4d\x16\xa0\x38\xc0\x6a\x18\x01\xcc\x7b\xdc\xe3\xb1\x66\xde\x0b\x79\x7a\x8d\x5b\x38\x67\xc1\x80\x5b\x0f\xf3\x9e\xee\xe2\xab\x52\x79\x86\xbf\xd2\x74\xcf\x9c\x3c\x57\x54\x67\x43\x99\xe3\x69\x26\x4d\xb7\x45\x99\x35\x78\xd6\x73\x75\x1e\x05\x92\xce\x39\x6e\xe8\xf3\x91\x14\xf0\xb4\x23\x2b\x11\x6f\x18\x21\xe1\x13\x49\x31\x43\x3b\x32\x5d\x4a\x54\x5c\x94\x62\x83\x7c\x5e\xdd\x53\xbf\x95\x7c\x3a\xc9\x37\xaf\xd3\xdd\xd5\xb5\x9b\xcc\x3a\xac\xc8\x77\xd8\x9d\x47\x8f\x16\xaa\x48\x15\x7d\x29\xc7\x93\x3d\xb3\x3e\x93\x4b\xbd\x95\x02\x3c\xdf\xb5\x74\x4e\x37\xe9\x44\x32\x79\x26\x66\x4c\x5e\x0a\x14\x8d\x25\x02\x31\x45\x4c\xb3\x46\x82\x34\x5a\xe3\x1d\x1d\xfa\x56\x88\x74\x39\x89\x52\x2f\xd3\x80\xed\x4b\x40\xc9\x42\x1b\x4e\xde\x5b\x74\xa8\x66\xbd\xaa\x95\xd5\x4a\x7e\xb7\xbb\x6d\x2b\x7d\x99\xe7\x89\x42\x05\x36\xf7\x3f\x5a\x20\xcd\x70\x07\x57\x62\x4c\x5f\xe3\x6c\x47\xf3\x03\xde\x0e\x02\x62\x13\x4e\x60\x7c\x91\x63\x3d\x49\xe0\x29\x5b\x93\x44\xcb\x60\xec\x08\xcb\x08\x00\x8b\xc3\x1a\x4e\x11\x3d\x5e\xad\x34\x6c\x76\xf6\xb1\x37\x3e\x2c\x5f\x6f\xfc\xa4\xef\xef\x1e\x6b\xf0\x49\x95\xce\x2d\x6b\x7c\x73\xf0\xc7\x72\x7b\xe7\x3d\x7d\xfc\x4a\xa7\xac\x2f\xee\xa5\x76\x43\x35\x70\x42\x21\xc1\x86\xce\xe9\x3e\x43\xb3\xa6\xcb\xb8\x81\x8f\xa3\xd8\x21\xba\x4e\x25\x86\x89\x30\xe4\x34\x2f\x40\xb6\x03\x44\x3d\x46\x0a\x66\x1f\x3f\xf2\xa8\xb7\xbf\xc8\x6d\x2c\xcc\x28\xcc\xed\x9d\xf5\xf6\x62\xb6\xd0\xa8\xf9\x2b\x1f\xdc\xdf\xd1\x73\x6e\xdf\x62\xdf\x1f\xbd\xb3\xd3\x6a\x35\x3b\xbd\xf6\x2c\xf2\x88\xe7\x78\xc4\x42\x14\xc5\x96\xc5\x0a\x36\xad\x08\x38\xe1\x81\x6d\xc6\xb4\x10\x2a\x1e\x8b\x24\x1a\x29\xa2\x65\x52\x01\xa0\x45\x47\xe7\xe3\x24\x75\x63\x22\x67\x81\xaa\x37\xce\xad\x2c\x3a\xec\x8f\x13\xad\x0f\xd1\x8d\x7e\xed\xfa\x76\xb5\x39\xfd\xab\x7e\xfc\xc6\x77\xa8\x4b\x7f\xea\xd0\xba\x3f\xb2\x4e\x99\x91\x3a\x1f\x34\x22\x60\x4a\x72\xe2\xd1\x18\x79\x9c\xab\xf1\x96\x46\xa9\x98\x55\x05\xc1\xa1\x81\x12\xe8\x21\x27\xb2\x50\xd5\x15\x46\x24\xa1\x6f\x8a\x9e\x9f\x0a\xd0\x6a\xde\x58\xef\x56\xc8\x33\xc5\xab\x5d\xa6\xc9\xad\x19\xe5\x9f\xfb\x46\xe8\x75\x76\xd0\x0b\x54\x15\xfb\x9d\x2e\xa5\x8b\x24\x4d\xbf\x5b\x95\xde\x9b\xa6\x0c\xdd\x60\x5d\xde\x0c\x7c\x0a\x7b\xb1\x4e\x27\x31\xeb\x20\x13\x72\x06\xe2\x2d\x81\xf3\x29\x95\x21\xae\xcd\xda\x89\x60\x4a\xae\x8f\x7c\xd6\x7d\x04\x3a\xfc\xf7\x27\x9f\x1e\xbd\x2f\x18\x9c\xbf\xa2\x34\x7c\x66\xa3\x67\xcc\xb3\xa7\x86\x14\x4d\x2a\x88\x87\x6f\x8f\x79\x92\x8f\xf4\x7d\x4f\x36\xdc\x78\xf8\x91\xef\x32\x62\x4e\x25\xbe\x75\xe1\x7b\x15\xe6\x31\xd5\x99\x39\xd2\xfb\xd5\x8b\x16\x3f\xb8\xf1\x50\x89\x7d\x5f\x8f\x2e\x38\x5e\x9f\xb8\x6b\xee\xd5\xf4\xc6\x9a\x44\x0a\x7c\x1d\xb3\x86\xc9\x7b\x3e\xc0\x01\xcb\x63\x8b\x92\x3d\x40\x05\x88\x0b\x13\x26\x72\x23\xd9\x12\x18\x85\x87\x5c\x22\x47\x8a\xcb\xd8\x94\x93\xa2\x5c\x9e\xd3\x28\xdf\x92\x27\xfb\x76\xff\x76\xda\x8c\x87\xcf\x93\x5d\x5e\xde\x96\x9f\x4c\xe9\xd3\xa8\x58\xbb\x86\x3b\x7e\xdc\xf6\xf9\x8a\x0d\xed\xb3\xa7\x19\xfe\x2a\x3b\x12\x26\x7c\x10\x69\x80\x47\xb6\x6d\x0b\x5e\x2c\xb0\xbc\x29\xd2\x0c\x2d\x22\x2c\x10\x19\x1a\x3a\xb2\x19\xc3\xf0\x6c\x21\x48\xe2\x08\xc7\x28\x75\xc3\xa8\xef\xdc\xa2\x85\xaa\x7f\xd1\x6a\xea\x3f\xba\x5f\xee\x50\xf8\x0b\x52\xea\x8f\x9a\xd4\x41\x7b\xe9\x34\xba\x3f\xdd\xec\x66\x83\x3a\x73\x9b\xa7\xf7\xa6\x15\xe2\xc7\xba\x66\x9a\x89\xa3\x02\x41\x8c\x55\x3b\x11\x09\xf1\x64\xca\x77\x3d\x8d\x75\x3d\x5f\x07\xb6\xaa\x24\xc0\x33\x54\xd9\x05\x12\xc5\x85\x98\x79\xfc\xa6\xd7\x9f\xa8\x3b\x69\xe5\xaa\x3c\x3f\x82\xf5\x1b\xb9\x3b\x57\x1f\xbe\xf2\xe5\xa2\xb1\x03\x17\x3e\x7b\x3f\xe3\x41\xdf\x13\x53\xd7\x99\x27\xda\xa5\xf7\xc8\x42\xc0\x5a\x72\xa2\xd3\xa6\xc7\x88\x76\x6c\xc4\x16\xe6\x6d\x33\xa2\xd4\xc4\x8b\x63\x44\x42\x64\x41\x8d\x00\xa8\xb2\x02\xa7\x6b\x81\x24\x47\x12\x25\x64\x32\x89\x3b\x31\xf2\xed\x21\xeb\xf9\xee\xce\xd4\x1b\x2f\xbe\x7e\x3e\xf7\xb8\x3b\x50\x79\xf6\x7c\x9e\xaf\xbe\x3b\x7d\xbb\xf5\xc8\x0a\xdd\xa6\x3c\x3d\xee\xd1\x5f\xc3\x8a\x9f\xbe\x37\x6a\xef\x90\x9d\xd9\x9e\x32\x5e\xcf\x35\xf0\xcf\x72\x7f\x96\x5b\xbc\x1b\x8e\xec\x7a\x7a\xfb\xd7\x79\xa9\xb2\x1f\x8e\x8f\x1f\x5d\x29\xae\x7b\xef\xe4\x37\x79\x07\x2d\xef\x7e\xd7\x9a\xde\xf2\x7e\xc3\x2b\x17\x86\xe7\xcb\x31\xac\x66\x52\xf8\xd2\xf3\x67\xab\xd7\xb6\x2b\x34\x4b\x33\x87\x0e\x25\x30\xba\xa3\xd2\x8e\x13\x30\x71\xac\xc5\x22\xe2\x00\x50\x95\xc4\x08\x05\xc1\x14\x05\x4f\x62\x54\x83\xa7\x05\xcd\x21\x7a\x6c\x32\x2c\xcf\x63\xe3\xf1\x74\xa2\xcd\xde\x69\x2d\x5b\x56\xdf\x2a\x5d\xa0\xee\xac\x0d\x12\x10\x2d\x69\x3b\x6c\xde\x2f\x8d\x77\xe6\x69\x9f\x6f\x38\x35\xb0\x61\xf7\xfc\x69\xa6\xb3\x72\x45\x4d\x8e\x43\x93\x15\x6c\x3d\xf4\x02\x36\x74\x64\x04\x14\x41\xb7\x22\x57\x15\x5d\x3a\x71\xb4\x80\x06\x11\x81\x3a\x01\x31\x0a\x64\x92\x50\x5c\x26\xa5\xcb\x11\xf3\x90\xbc\xe6\xc8\x72\x35\xc7\xa6\x93\xb7\xfb\x6d\x7e\xf6\xde\xfc\x6b\x37\x7f\xe6\x2f\x6e\xaf\x70\xbe\xf5\xa7\xf7\xcf\xb2\x13\x6f\x3d\xfa\xeb\xc3\xcf\xde\x5f\x59\x79\xf4\xa9\x93\xdb\x27\x58\x25\x36\x17\xb9\x50\xf8\x1f\x5f\xae\xfe\x66\x5a\xc9\x1b\xef\xe4\x7f\x79\x6e\xa1\x01\x6b\xf5\xe1\xff\xc6\x0b\xfe\xb7\x29\x6d\xaf\x8c\x26\x3d\xea\xfc\x2f\x12\xd3\x87\x23\xb6\x2f\xae\xbb\xbe\x7b\xe1\x69\x2d\x3a\x9c\x69\x0e\x9e\xde\x37\xb3\xd7\x3f\x8a\xe6\xac\x0e\x9d\xbc\x3f\x34\x2d\xfc\x7b\xe9\xa7\x0b\xa5\xd7\x0f\x90\xa5\x61\x46\x70\x8c\x98\x89\xb9\xd8\xc1\xa1\x25\x51\x06\x44\xac\xae\x42\x9a\xe1\x39\x89\x4b\x34\xda\xb3\x15\x8e\xb1\x34\x8e\xf1\x64\x41\x88\x35\x92\x7a\xfe\xdf\xff\x8d\x67\xf6\x99\x17\x1b\xec\x13\xc6\xfd\xd6\xa9\x62\xd1\x6f\xd7\xd7\x7b\xe5\x93\x07\xc7\x72\xd4\xb9\xb1\xa8\xc7\xe1\x57\x95\x8d\x79\xaf\xa7\x79\xad\x32\x74\x81\x6d\x7a\x5a\xe8\x47\x1c\xaf\x69\x02\xcd\x07\xbc\x14\x5a\x32\xf0\x7d\x37\x61\x70\x48\xcb\x91\xca\x2b\x81\xa3\x6a\x8a\x92\x78\x94\x99\xd8\x99\xec\x92\xdb\xa6\x34\xbf\xeb\xc2\x65\xb8\xea\x4a\x70\xea\xd3\x43\x8d\xfd\x43\x0d\x7f\x1f\x3a\x77\x4b\xd1\xca\xf5\x0f\x7d\x5e\xf4\xb3\x45\x4a\x9a\x6f\xdb\xd4\x68\x46\x0b\x6d\x53\x92\xa0\xa2\x09\x72\xa4\xb1\x1e\x36\x15\x9b\x02\x44\x8f\x58\xca\x92\x14\xc9\xa1\x3c\x86\x78\x4e\xa2\xea\x94\x8f\x43\x11\x67\x02\x73\xfc\xa2\xd6\x86\x4f\x6f\x80\x3f\xaf\x4d\xfe\xa0\x6b\xed\x89\x39\x0a\xbd\x5a\x6f\xd5\xf0\x9a\x23\x96\x37\x3a\x75\x29\x27\xee\xf9\xe9\x98\xeb\x2b\xd3\x9b\x2e\xf0\x09\xb1\xa5\xd8\xa2\x63\xcb\x77\x68\x4d\x70\x5d\xcc\x63\x42\x9b\x24\xa2\x21\x03\x4c\xa8\xb9\x49\x12\xc6\x2c\xd6\x79\x5a\x51\x62\xc7\x0a\x7d\x37\xf8\x9f\xc8\xf0\x6f\x57\xf8\x6f\x7d\xf5\x5e\x19\x85\xb3\x65\xcf\xf1\xa8\x2b\x5c\xe8\x53\xf4\x9d\x3d\xcf\x0d\xf6\xdb\x05\x33\x93\xad\xdf\x7b\x1d\xaa\x1f\xf9\x5a\x87\xff\xf8\x6d\xea\x6d\xa3\xd3\xf9\x1d\xeb\xbf\xc5\x69\xe6\x5c\xa2\x18\x86\x0d\x68\x2a\xa1\x12\x87\xf3\x20\x82\x04\x3a\x90\xb7\xa1\x6a\x45\x21\xab\x22\x8e\x72\x20\x0b\x45\x45\x70\x63\xca\x89\x65\x53\xf4\x54\x27\x35\x98\x73\x47\xf1\x56\xcb\x8e\x7e\xd4\xa2\xdd\xf5\x1f\x4f\x8e\xfb\x7e\xe7\x73\x39\xd6\x0e\xfa\xe2\xfa\xfb\x9f\x37\xae\xb3\x76\xf7\xd3\xee\x80\x86\xd3\x8e\xa5\xb7\xe3\xe4\xcb\x32\xeb\xf3\x4e\x80\xb4\x10\xf3\xc8\x96\x23\xc1\xf0\x4c\x85\x22\xba\x8c\x90\x4c\x05\x6e\xec\x85\xbc\xee\xd2\x31\x44\x8a\x1b\x00\x86\x98\x71\x26\x1e\xfc\x64\x54\xb7\xd6\x9a\xfc\x1f\x6c\x99\xdf\x74\xc6\xc2\xd5\x93\xfb\x96\x33\xb2\xbf\xfd\xcd\x7b\xe7\x27\x0f\x59\x51\x3e\xc7\xbd\x59\x39\x7f\xdc\x9e\xe6\x89\x4d\x18\x04\x80\xb2\x28\x86\x8d\x49\x24\x0b\x86\xa6\xd8\x76\x6c\x29\x84\x4f\x62\x45\xf7\x28\x4e\x34\x78\x1d\x29\x6a\x08\x09\xef\x32\x89\xe4\xea\x6e\x26\xb7\x5d\xb1\x43\xaf\x5f\x86\xd5\x2b\x9b\xf7\x68\xb3\xdf\xcf\xb7\xfb\xae\x5b\xd1\x0f\x56\xce\xda\x74\xeb\xfd\xf2\x75\x2b\xd5\xdb\x78\xb7\xc2\x00\x25\xeb\x1c\x05\x29\x8f\xed\x29\xa6\x24\xb8\xa6\xc3\xe8\x50\xb4\x35\x5b\x67\x6c\x44\x31\xc0\xd4\x5d\xfe\x9f\x2a\xab\x4a\x48\x18\x2e\x86\x1c\x36\xb4\x44\x55\x0d\xd6\x33\xff\x26\x1a\xf4\x6f\x91\x95\xff\xd6\x26\xeb\x95\x31\x28\x5b\xb6\xfc\x8f\x8a\xac\x74\x6e\x55\x78\x57\xb3\x75\x8d\xcd\xd5\x2d\xfa\xe5\xfb\xad\x5b\x83\xbb\xb8\x62\xc6\xbe\x25\xc1\x77\x67\x46\x3e\x3b\x62\xd6\xd8\x37\xff\x1f\xb4\xfa\x52\xd7\xbb\x76\xe4\xb1\x26\xe3\x11\x5a\xe1\x7c\x2a\x16\x50\x22\x78\x36\x9b\x20\x31\xd1\xa0\xa5\x60\x49\x43\x92\x4a\x14\xca\xe7\x68\x1d\x41\x35\x34\x28\x55\x49\xdd\x7a\xa2\x2f\xdd\x18\xf4\xd2\x99\x6c\x93\x8b\x96\x7f\x6f\xd5\xbe\x76\xcb\x4f\x6f\x9d\x7a\x65\x5e\xd5\xfd\xb0\xf1\xf8\x73\xed\x5f\xe0\xeb\x0d\xbd\x92\xde\xf0\x2a\x19\x5a\x12\x02\x60\xeb\x16\x05\x4c\x5d\x0e\x50\xa2\x78\x8a\x9e\x24\x44\xb3\x88\x67\xa8\x88\x8f\x0d\xdd\xe1\x64\xa2\xeb\x58\xa6\x31\x05\xe0\xdf\x88\xde\x1e\x39\x76\xc9\xee\xc7\x73\x0d\x77\xc5\x01\xaf\xb7\x68\x56\xb0\x5c\xe5\x1e\x0d\x56\x6e\xbd\xb9\x39\x5f\xfd\x87\xc7\x4e\x57\x58\xd7\x4f\x33\x4e\x66\x7d\xd3\x26\xf5\xca\x2c\xa7\x60\x97\x11\xb0\xa6\x71\x01\x20\xb4\x10\xba\xa6\xa3\x68\xae\x65\x41\x5d\x67\x18\x36\x0e\x91\x9d\xc8\x9a\x03\x4d\xc4\xb0\xb2\x4a\xac\x88\xe0\xd4\xae\xd0\x65\xe9\xd0\xd2\x64\x7a\xc9\xc9\x85\x8b\x55\x2d\x77\xa7\xc4\xb3\x2f\xdc\xfe\xb0\xfc\xda\xa2\xbc\xf8\xf4\xcb\x07\xcb\xbf\x3b\xa9\x49\xeb\xac\x83\xdf\x53\x76\x18\x7c\x91\xc6\x48\x87\x94\xa7\x11\x10\x89\xd8\x42\x14\x36\x2c\x08\x05\x3a\xd2\x42\x85\xb0\x82\x89\x21\x71\x60\x14\x28\x9e\x15\x41\x1a\xfb\x91\xe6\xa5\x36\x92\x11\xdd\x4e\x2f\x1f\xb6\xe1\x41\x2f\xbd\xed\xc1\x29\x6f\x95\xbd\x76\xe9\xe8\xbe\xeb\xf3\x8a\x1d\xdc\xda\x7d\x49\x9f\xcb\x2b\x66\xac\x3c\x97\xf5\x25\xa1\xd4\x8c\xdc\x9a\x65\x08\x2a\x00\x01\x6f\x79\x48\x17\x01\x52\x62\x9f\x0b\x50\xcc\xa8\xc0\x71\xe8\x88\xb5\x45\x5b\x03\x49\x64\x44\x3c\xb1\x78\xdf\xa3\x38\xef\x3f\x20\x93\x3e\xb9\xfe\x6f\x55\x6f\xaf\xe6\x79\xa6\x66\xeb\xfd\x48\x2e\x9f\xbf\xfa\xf9\xbd\x33\x3a\x83\x4d\xc7\x56\x56\xe0\xbb\x34\x10\xac\x5a\x53\xe3\x43\xd7\xe5\x3b\x57\x7e\x9f\x36\xee\x97\x39\xe2\xcf\xe5\xd2\x5c\xfb\x32\x22\x8d\x0c\xd6\xd0\x5c\xce\x11\x69\x21\xf6\x22\x1f\x06\x1c\xb6\x38\x0e\x05\x58\xa1\x45\x3d\x4a\xac\xd8\xc0\x26\x92\x21\xad\x61\x48\x6b\x49\x0a\xcc\xef\xde\x5b\xc5\x16\x8e\xdf\xf5\x71\xe5\x8f\xeb\x75\x6a\xfe\xd3\x33\xa0\xcf\xcb\x87\x4a\x7f\xfa\x79\xcb\x61\xc5\x47\x75\xcd\x18\x3e\xe6\xcb\xaa\x03\xd2\x9b\x64\x40\x8a\x77\x15\x91\x24\x34\x0f\x31\x9d\x24\x2c\xcb\x23\x0d\x84\x1e\xa6\x69\x13\x25\x8c\x05\x12\xc3\xd6\x43\xdb\xc6\x26\x31\x81\x40\x87\x31\xb0\x33\xd1\x85\xd9\x49\x4e\x7c\x7f\x65\xf7\xc3\xb2\x23\xda\xbe\x73\x67\x4d\x9f\x6a\xd7\xc6\x7f\xbc\x65\xfc\xe5\x6b\x93\xf3\x2c\xbd\x55\xbd\x5d\xb7\x83\x20\xeb\xe2\xeb\x29\xcd\x49\xa0\x4d\x2f\x11\x41\x2c\x69\x80\xe2\x62\x5a\x76\xf5\x20\xe0\xb0\x42\x7b\x28\x90\x23\xcc\xf9\x36\xe1\xad\x24\xd4\x80\xeb\x43\x9a\x8f\x23\x2b\x54\x33\x59\xb8\x81\xbb\x3e\x1a\x32\x6e\xc1\xf8\xed\x27\xf7\x4c\xd8\x5d\xe3\xe0\x9d\xbe\x33\x8a\x54\x9f\x7c\xe0\x95\xe1\x9f\x4f\x28\xf7\xe3\x69\x74\xf1\xf9\xac\xd3\xe9\xa7\xf6\x02\x31\xa4\x64\xc1\x64\x64\xc5\xa7\x14\xce\x25\x82\x8d\x20\x83\x63\x8b\xc5\x0e\x4d\x3c\xa2\x04\x2e\xad\xb8\xb1\x12\xea\x92\xe1\x0b\x5e\x4c\x73\xc9\x7f\x00\xb4\xff\x7e\xc7\xfe\x5b\xe5\xdb\x2b\x23\x57\xb6\x4a\x79\x1e\x7d\xc7\x36\x57\x7d\x22\xd7\xdd\xec\xfb\xee\x0d\x7b\x5f\x0d\x16\xc9\xe3\xbb\x86\xbd\x2f\x9c\x3f\xf6\xe9\xbe\x93\x55\x73\x1f\x2d\x54\xed\x40\x46\xd6\x17\x5d\x52\xc3\x0f\x7c\x47\xd5\xa3\x80\x93\x09\x47\x09\x09\x4c\x04\x59\xb4\xa5\x08\xeb\x16\xd4\x64\x42\x20\x88\x22\x4d\xd7\x19\x8f\x57\x5d\x9a\x04\x3e\xe3\x89\x8f\x8a\xcf\xfd\xe7\xd8\x68\xef\xfe\x5d\xf7\x5b\x8e\x8a\xf2\x37\xed\x71\x3e\xe7\x9e\xbe\x6d\xee\xbe\xd9\xa1\xfd\x96\x7c\xf2\xc0\x41\x4b\x1b\x1c\x5a\xdc\x90\xaa\x92\xde\x8f\x63\x79\x32\x8a\x74\x4d\xe3\xf5\x40\xb2\xbc\x40\x06\x94\x63\x2a\x0a\xa0\x35\x5e\xb4\x59\xcf\x92\x5c\x9b\xa3\x6d\x19\xa8\xa1\x11\x8a\xd8\x89\x43\x3d\x36\x53\xdb\xd4\xe1\xb7\x2b\x9d\x6f\x36\xf6\xf7\x45\xca\x4b\xd3\x6e\x14\xac\xf9\xf9\xfa\x36\x37\x4b\xfc\x74\x59\xab\x9b\xb3\xc0\x8d\x4f\xaf\x57\xd9\x33\xf3\x61\x9a\xb1\x70\xb1\x65\xe9\x5c\x02\x54\x43\x65\x79\x95\x10\x06\xbb\xb6\x45\x7c\x21\xe4\xcd\x88\x30\xa6\xa0\x28\x3c\x63\xd1\xb2\x2b\x27\x94\x4b\x59\x4e\x88\x29\x26\xb5\x07\x9f\xab\xba\x95\x7b\xff\xc3\x42\xf7\x4b\x76\xbc\x72\x79\xc8\xbc\xfc\xef\x4e\xfb\xd6\xff\xaa\xfc\xe0\x43\x37\xb8\x77\x9a\x1d\xfc\x62\x5b\x8d\xac\xf3\x82\xa4\xe6\x70\x12\x9c\x10\x09\x8e\xe5\x58\x54\xa4\xbb\x22\x63\x42\x9f\x0d\x4d\x4b\x08\x2d\x49\xa5\xfd\x90\x15\x29\x81\x67\x89\x4c\x45\x30\xe6\x48\x24\xc5\xce\x23\xf3\xcf\xbf\x1d\x7b\x49\xfe\x81\x41\x98\xbd\xf3\xc3\xfb\x7b\x7f\x6b\x9f\xef\xec\x59\xf1\xdc\x59\x6e\xe8\x82\x95\x2d\x26\xc5\x3b\xfa\x87\xbb\x06\xbf\x5e\x2a\xcd\x4d\x37\x27\x21\x1e\x0a\xf8\x88\xf7\x42\x14\x7a\xb6\x07\x63\x95\x75\x3c\x07\x06\x10\xea\x04\x41\xdf\x4a\x68\xc1\x77\x75\x9f\x35\x0d\x9f\x0e\x3d\x01\xc5\xff\x63\xdb\xb7\xf2\xfc\xdf\xba\x51\xbd\x32\xc6\x66\x6b\x52\xbc\xdf\x23\xff\x12\xdf\xdb\x94\x7d\xe5\x98\xf5\xe7\x3f\xe9\x7c\xfa\xed\xa2\x53\x36\x9f\x2f\x34\xfa\x40\xdd\x5c\x5e\xdd\x5d\xda\xac\xcf\x8a\x16\x68\x9e\x3f\xcd\xa5\xa7\x47\x45\xbc\x6f\x71\x3c\x4f\xdb\x11\x70\x21\xd4\x3d\xa8\x31\x96\x0f\x74\xcb\x94\xa2\xc0\x93\xdc\xc8\x93\x7c\x80\x34\xc3\x13\x13\x25\x8e\xc2\x44\xc9\xe4\x55\xd8\x5b\xb3\x05\xdf\xf5\xae\x58\xfa\xc5\x3a\xc5\x17\xb4\x2d\x39\xe0\xfa\xd6\x36\x37\x8b\x77\x9a\x5a\x8c\x05\x9d\x3f\x3e\x31\xa1\x70\xc9\x5a\xe9\xb5\xa9\x84\x70\xba\x14\x21\x8a\x0a\x65\xd5\xf5\x3d\x22\x19\x10\x04\x82\xab\x3a\x80\xa5\x5c\x5b\x15\x22\x2a\x12\x39\x92\x38\x2c\x83\x04\x47\xe0\x13\xd9\xc6\xa9\x6d\x6a\x6b\xfd\x92\x15\x8a\x15\x39\xb7\x6f\xcb\x04\xbb\xc6\xe9\x72\xeb\x77\x6d\x1a\xc8\x1c\x6c\xd7\x6f\x76\xa1\x36\x95\x26\x0d\xdb\x50\xfa\x8f\x32\x69\x86\x02\x88\xbe\x27\x0b\x36\xe3\x24\x50\xd5\xc5\x84\x60\xc6\x4a\xe2\xc8\x94\x4c\x0f\x13\xd9\x33\x38\x11\x4a\x50\x47\x0e\x8d\x23\x25\xb4\x68\xa0\xd8\x6e\x26\x6b\x15\xf5\xb6\xbc\x7d\xe7\x4c\xa5\xde\xa5\x4b\x9e\xf9\xba\x6c\xf9\xfa\xdd\x4a\x16\xa9\x98\xad\xdc\xe8\x7a\x3d\x9a\x95\x5c\x36\xa2\x41\x19\x79\x61\xd6\xb7\x47\x53\xef\xdd\xc4\x54\x8c\x6d\xe4\xf2\x86\x24\xd2\xa2\x68\x2b\xa1\xed\x19\x11\xe4\xc4\x88\x75\x34\x5b\x13\x22\xe0\x30\xd0\xb3\x45\xdb\x4a\xfc\x04\x79\x9a\xcf\x45\xa9\x8f\x3d\x63\x60\xf6\x65\x05\x2f\xd6\xb8\x22\xbc\xdc\xe9\x83\x5a\x1b\xb6\x4f\xad\xa3\x6e\x2f\x5b\x73\x6e\x86\x55\x78\x79\x9f\x6b\x0f\x47\xed\x4a\x77\x26\x2a\x7b\x92\x2d\xc6\x0e\x25\xd2\x2e\x43\x25\x80\x93\x54\x9e\x60\x27\xd0\x81\x8f\x5c\xc5\xe1\x3c\x96\x95\x58\x05\x23\x14\xb8\x7f\x15\x93\x8c\x6d\x67\x42\x11\xcf\x0c\x38\xbd\xb9\x44\xc9\xab\x47\xb9\xe8\xfb\xf3\xde\xd0\x99\xb3\xae\xaf\xda\x5f\x2c\xfb\x32\xdc\xad\xbf\xf4\xe5\xcf\xf3\xa6\x74\xdc\x9c\xe6\x30\x9f\x38\x94\x2a\x98\x1e\xe2\xf4\x20\x96\x54\x12\x24\x0e\xa4\xad\x28\x71\x08\x43\x5b\x50\x14\x75\x89\x38\x9c\x89\x6c\x68\x59\xbc\x63\x45\x7a\x88\xe9\xc7\xba\x41\xff\xad\xdd\xda\x2b\x23\xcf\xd4\x9c\xff\xab\x31\xfa\xc9\xed\xe5\xe2\x10\xca\x8d\x5e\xfb\xa6\x14\xbc\x3d\xe8\x8f\xf7\x84\xf3\xc3\xbc\x1d\x51\xfe\x85\x77\x6b\x9d\xc9\x3b\xf3\xfd\x66\x59\x97\xf6\x4e\xfd\x06\x43\x43\xe2\x04\x06\x42\x4d\x73\x54\x97\x30\x1c\x21\x34\x46\xb2\x03\xe8\x90\xa2\x0c\x27\x60\x01\xef\x13\x8b\xf0\x72\xe8\x48\x0a\x45\x6b\x5c\xec\xa7\xfe\x38\x73\x6f\xad\xaf\xda\x7b\xd2\xba\x19\x7f\xfc\xd2\xb3\xdf\x84\x13\xda\x9e\xd3\xef\x4e\x5d\x77\x74\xc8\xf9\x13\x35\xc6\xe5\x5d\x46\x86\xbd\xb3\x3f\xbd\xc7\x06\xac\xad\x2b\x3c\x74\x35\xcf\x74\x88\x65\x32\x81\x61\x98\x91\x84\x35\x91\x73\x5d\x43\xf7\x03\x8e\x37\xdc\x00\xea\x21\xc5\x3b\xac\xed\xe9\x49\x98\x64\x62\x53\x39\x57\xb4\xdd\x5c\xfc\x5e\x83\xa3\x4d\xa7\x64\xab\xba\xb6\x50\xf7\x6b\x9d\xbe\x5e\x99\xeb\xd4\xfd\xea\x3d\xea\x3f\x98\x50\x3e\x87\x7d\xe7\x99\x34\x93\x6c\xc2\x30\x24\x9c\x2f\x79\x81\x46\xdb\xba\xed\xab\x2e\x4b\x3b\x84\x0f\x0c\xc5\x60\x18\x47\x09\x02\x0e\xf0\xb4\x16\x98\x46\x42\x38\x1f\x7b\xbc\xa1\x89\xa9\x13\xb5\xfd\xd3\xe5\x96\xb6\x7e\xfd\x66\x6f\xb1\x7e\xce\xfb\x5d\x0a\x7e\xdf\x29\xfc\x19\x4f\xe9\xb1\xb8\x9a\x34\x64\xc6\xec\x12\xc5\x8f\xa4\xb9\x72\x0f\x75\x28\x7a\x0e\xc5\xc8\x1a\xa5\xa8\xa1\x6f\xb0\x40\xd3\x88\x69\x08\x01\x07\x4d\xa4\x39\x62\x04\x2c\x8f\x68\x9a\x27\xd0\x80\xb2\x28\x4f\xf1\xf0\x7f\xd4\x15\x4f\xe4\xfb\xbf\xcd\x12\x7a\x65\x94\xa9\x9c\x2d\xa3\xff\x23\xff\xb2\xec\xc5\x85\x6b\x2a\xdc\xb8\xdc\x23\xdf\x07\xc9\x87\x0d\xaa\x1c\x6f\xd7\xe1\x70\x8e\x6e\x3d\xb6\xfc\xb9\x61\xdf\xb6\xdc\x3f\x17\xdd\x72\x76\x7a\x9a\x67\x04\x89\xa0\x60\xc3\x14\x04\x20\xd3\x3a\x07\x7d\x5e\x8e\x74\x51\xb0\x28\x5f\x31\x4d\x0e\xa9\x9a\xa7\x08\x9e\x60\xfa\x96\xa8\x08\x31\xa2\x21\x23\xf2\x66\xea\x8f\xd3\xb7\xc5\xc7\xee\xe8\x1a\x87\x44\x6b\xcf\xb5\x91\xcd\x67\xbd\xd7\x75\x5f\xfd\x31\x03\x0e\xe6\xba\xd1\xe7\xe7\x6f\xa7\x8e\xba\x7d\x7f\xd9\x1b\x69\xee\x06\x71\xa2\x8c\x03\x26\x01\x38\x48\x68\xdf\x03\x0c\x27\x99\x81\xe0\x45\xae\x14\x09\x48\x8e\x25\x4f\x71\x11\x6d\x31\x2e\x92\x0c\x94\x48\xb2\x88\x6d\x3f\xf5\xb1\x57\x65\xbf\x3a\x90\xa2\x8b\x2e\xfb\xa5\xc7\xb1\xe9\x1d\xef\xcd\xba\xf4\xd6\xdc\x59\xa1\x77\xa0\xe3\xb2\x1b\xc3\x16\xbf\x7d\xf7\xf9\x5f\xb2\x4e\xa0\x96\x5a\x81\x03\x2b\x1e\x91\x12\x35\x66\x71\x62\x49\x8c\x47\x04\xa2\xa0\x90\xf1\x29\x15\xeb\x11\x6d\x52\x81\x2a\x44\x1a\xd0\x12\xc8\x47\x46\xa2\xc3\x80\x70\x66\x6a\x54\x6c\xa7\xdd\x57\x1b\x77\xf7\x3e\x6f\x30\xf4\xd7\xfb\xc5\xa6\x5f\xae\xd9\xac\xc6\xe2\xc1\x87\xeb\xfd\x39\xf3\xdb\xdf\xe4\xf7\x1e\xbc\x23\x02\x21\xcd\x1b\x99\x7f\xf9\x27\x4b\x29\xba\x69\x42\x57\x86\xd8\xe1\x8d\x20\x84\x9e\x11\xe9\x50\x61\x31\x45\x11\x46\x90\x38\x39\x91\x19\x41\x4d\xdc\xc4\x23\xce\xdf\xe2\xe5\xff\x1c\xf9\xf4\x2b\xa5\x1b\xdb\xdd\xf7\xa9\x13\xfd\x6a\xf9\xff\xac\x30\xeb\xea\x8e\x25\x1f\x8d\x7c\xb7\xd8\x01\x75\xcc\x83\x62\x4f\xb6\x7f\xf0\x5b\x7a\xb9\x84\x30\xa7\x04\xb1\x6d\x41\x3a\xf4\x9d\x20\x52\x4c\xe8\x25\xbc\x44\x04\x45\xc2\xa2\x0f\x19\x5b\x46\xba\x05\x29\x27\xd6\x68\x01\xd0\x90\x80\x40\x92\x6d\x31\x75\xac\xbc\xda\x64\xe1\x0b\x65\x1b\x0f\x6f\x72\x66\xc0\x9d\x26\x2f\x94\x57\xb3\xdd\x2c\xb5\xa8\x70\x91\x9a\x33\xef\x55\xc5\xcf\x97\xdd\x93\x6d\x79\xf5\x34\xe3\x02\x81\x9f\xb8\x1a\x09\x0c\x4d\x02\x9c\xee\xa8\x2e\xb2\x19\x18\x33\xc8\x10\xc4\x84\xa7\xf9\xd0\x72\x74\x2b\xd2\x89\x2b\x61\x46\xb2\x4d\x91\x8d\x29\x3e\xf5\xb1\x3f\x3e\x6f\xd0\x0b\xb2\xaf\xab\x56\x4b\x14\xc2\x21\xdb\xee\xad\xdf\x9b\xf3\xab\x07\x17\x8e\xb6\xca\x79\x47\x7f\xee\xce\xef\x2d\x66\x65\x7d\xbc\x92\x5a\xd2\x55\x11\x02\x3e\x60\x44\x1d\xc4\x9c\x1b\x78\x90\x13\x5d\x98\xe8\x92\xea\x7b\x3e\x4c\x54\x9f\x73\x62\xd6\xd1\x59\xd7\x36\x23\x3a\x71\x58\x00\xb8\xcc\x28\x3e\xea\xbd\x97\x7b\xdf\x2b\xf5\x7f\x2b\xf7\x4e\xed\x51\x5f\x4c\x5c\xbf\xbd\x7f\x89\xe3\xaf\x8a\xab\x7f\xdd\x58\x63\xe8\xc9\x3f\xd5\x6c\x73\x4b\xf7\x4e\x33\x29\x71\x22\xea\x71\xa8\x62\x43\x67\x21\xf1\x45\x0f\x6b\x09\x1f\x26\x36\x13\x08\x4e\x12\x8b\x16\x17\xeb\x34\x96\x38\x2d\x80\x0c\xc3\x28\x0e\x41\x48\xf9\xcf\xa4\xf1\xfb\x86\xff\x3a\x71\x86\x25\x4f\xcf\xd7\xb1\x43\xbe\x57\xa7\xeb\xe3\x5e\xb2\xf3\xfc\x31\x60\xf2\x9e\x82\xf9\x2f\xbe\x7a\xa6\xd0\xfa\xdf\xab\x34\x7d\x76\x42\xdd\x5e\x19\x0f\x1f\x3c\xbc\xff\x4f\x01\xbf\xbf\x89\x59\x9e\x69\x7f\xa0\x7e\xf7\xe2\x70\xdd\x18\x7b\xf6\xa1\xcf\xf7\x0e\x55\x26\xd1\x5d\x66\x5d\xbf\x7f\xa2\xdd\x9a\xba\xb7\x16\x94\x1c\x97\x5e\x2c\x3e\xd2\xc2\x18\x07\x91\xc0\x41\xd9\x8c\x13\x4d\x35\x18\xe2\x85\x42\x2c\x29\x16\x67\x09\x52\x28\x10\x88\x13\x6c\xc9\xa1\xcf\x43\x2c\x30\x91\x14\x4b\x5a\x26\x2c\xd7\x85\xa7\x3f\x77\x79\x52\x9f\xd6\x46\xc5\x3b\xca\xec\xea\xbd\xf7\x85\xa4\x57\xad\x3e\x27\x87\x8e\xf9\x70\x74\x97\x6d\xd1\xaa\x6c\x79\xb2\x2e\xaf\x98\x7a\x85\x80\x01\xba\x60\x9b\x91\x62\x1a\xa6\xc4\x4b\x58\x0c\x6c\x2c\x69\xae\x4f\xf1\x9a\x9e\x18\x94\x61\x24\x94\x82\x2c\x8f\x77\x63\xc7\x56\xb1\x6f\x73\x71\x8a\xfd\x92\x9f\x26\xc1\x67\x72\xb6\x1d\xf6\x53\xe5\x2b\x3f\x64\x63\x6a\xd7\xd8\x97\xf1\xe7\xd9\x91\xd3\xe6\xef\x5c\x9f\x77\x48\xe9\x92\xf0\xd5\x96\x43\xd3\xbc\x5f\xa2\x73\x8c\xc1\xd1\xd0\xa3\x30\x66\x54\x2d\x86\x09\xed\xc7\xb1\x02\x2d\xce\xd1\xb4\x28\xa6\x4d\x10\xf3\x89\x25\x29\x9e\x2a\x62\x97\x95\x79\x3d\x49\xb1\x4e\xfa\xb0\xec\xa5\x8a\xf3\x2a\xff\x76\x78\x19\xfc\xfc\xde\x9e\x91\x5f\x94\xef\xde\xf9\xda\x94\xf9\xcb\xa6\x37\xed\xfc\x63\xa7\x79\xef\xf6\xd1\xce\xa7\x19\xb5\xc9\x1a\x92\x2d\x20\x0a\x22\x1c\x60\xdf\x60\x0c\x45\xf4\x82\x58\xd1\x34\x45\x00\xb6\x6a\x26\x04\xfb\x8e\x08\x31\x96\x2c\x3f\xf0\x75\x6c\x5b\x49\x26\x72\xea\x24\x6f\xc5\x86\x5b\x8f\x7c\xb2\x78\x70\x76\x67\x57\xfb\x8b\xf5\xdb\x1d\x11\x54\xa3\x4d\xae\x7e\xf3\x5f\xef\xb5\xf7\xf7\xa9\x77\xdb\x8f\x4e\x6f\x7c\x97\xf4\x00\x29\x80\xd6\x1d\x47\x23\x34\xa5\xb3\xac\x14\x3b\x21\x12\x55\xda\x74\x6c\xec\xbb\x94\xa9\x28\xaa\x6c\x07\x11\xe1\x25\x93\xd7\x04\x18\x72\x52\x26\x5b\xb0\xdb\xf7\x2f\xfd\xb5\x55\xbb\x8a\xe2\x96\xf3\x4f\x0d\xcd\x57\xb6\xf1\xdc\x6a\x2b\x57\x0c\x9d\xba\xbe\xd4\xfc\x5d\xa3\x37\xac\xf9\xb2\xd8\xe9\xf4\x26\x95\x34\x48\x34\x11\xb1\x90\xb3\x62\x3d\x76\x6d\xd6\xa7\x25\x4d\x35\x02\x41\x15\x3c\xc8\x8a\x81\x2c\xfa\x21\x1d\xca\x09\x0a\x62\x8f\x71\x68\xcf\x13\x38\xf2\x38\x0e\xa7\x47\xb6\x81\x0f\x2f\xbc\x2b\xee\x99\x9f\x6f\xe9\x8a\x05\x45\x8a\x34\x5b\x79\x73\xd0\xf3\xad\xdb\xbd\x2a\x8d\x2f\xd6\x7e\x6a\xb9\x07\xe5\x1a\xa5\x19\x6c\xca\xf3\x26\xf0\x18\xcd\xc2\x11\xd6\xf9\x30\x34\x59\xa8\x10\x9c\xc4\x74\x04\xe5\xc4\x51\x7d\x5b\xd7\x85\x58\x4f\x3c\x09\xb3\x8a\x43\x62\x53\x4f\xc5\x9e\x7a\xfc\xfb\x7e\xff\x58\x7e\x31\xdf\x8c\x6c\xeb\x4f\x5f\x7e\xe9\x70\x8b\x2a\x4b\xe9\xc5\xbf\x0f\xca\x7f\x78\xf2\xad\x6b\x7d\xa7\xaf\x5b\x50\x68\x5d\x7a\x1b\x4b\x92\x68\x29\x5c\x2c\x24\x32\x0b\x09\x27\xba\xb6\x29\x06\x96\x91\x00\x2d\x24\x2e\xcd\x26\x98\x18\xaa\xe4\x08\xae\x24\xda\x50\x00\xd0\xb2\x4d\xa8\x92\xd4\x60\x53\xf5\x62\x9d\x66\x93\xf7\xb5\xeb\x30\x71\x4d\xd1\x0d\x9b\x5f\xb8\x5c\xab\xfa\xdc\x9d\x77\xe5\x27\xa8\x97\x8a\x2d\x70\x5e\x0b\xfa\xee\xcc\x99\xde\xc7\x5f\x90\x70\xa0\xdb\x09\x01\x94\x47\x89\x26\x60\x49\xcc\x6a\x9e\x10\x01\x15\x4a\x0c\x47\xd9\xbc\xce\xa9\xa2\x97\xf8\x22\x96\x75\x4e\x0e\x39\x5b\x8b\xa9\xc7\x6f\x7a\x6d\xc3\x89\x27\xc7\xbc\xfa\xee\x70\xa7\x71\xc9\x3e\xef\xf6\xa1\x66\xff\xb4\xad\xc0\xd7\xf0\xc3\xba\xbd\xdf\x5c\xd3\xea\xca\xa7\x1d\xca\xe8\xe9\xb5\x67\x94\x88\xbc\x4e\x42\xc7\xc4\x2c\xa3\x19\x40\x31\x19\x9f\xf5\x59\x51\x8e\x75\x82\x2c\x35\x94\x02\x9b\xe8\xd8\xb6\xed\x44\x72\x0c\x60\x70\xbe\x98\x80\x4c\xc0\xa6\xa7\x8a\xfc\x34\xe8\xa0\x78\x71\x50\xad\x7b\x7d\x6a\xc1\x3f\x07\x96\xd4\xd6\x2d\x2d\x57\x39\xaa\x37\x27\xc8\xe7\x4b\x13\x9f\xcc\xa5\x3c\xfa\xeb\x25\x47\xea\x65\x94\x7f\x7b\x8f\xdd\x74\x77\x85\x46\xab\xaa\x9c\xfb\x25\xe3\x42\xd3\x26\xd7\xde\x5f\x55\xe2\xeb\xb1\x7f\x7c\x5d\x61\xb3\xf4\xe9\x23\x5f\x31\x0f\xbf\x71\xe6\x9f\x1f\xd1\x67\x2a\xbe\xb9\xb1\x76\xcd\x07\x9d\xc4\xd6\x6f\xbf\x17\xbd\x72\xbb\xe3\x05\x75\x7d\xa3\x76\xa3\xef\x93\xf4\x0a\x5e\x22\x9a\x35\x4c\x5f\xfe\xff\x58\xfb\xae\x68\x2d\x8a\xac\x6d\x40\xa2\x24\xc9\x08\x12\x25\x29\x20\xd2\xd5\x81\x0c\xca\x91\x24\xa2\x28\x92\x11\xbb\xba\x3a\x77\x75\xaa\xce\xe4\x23\x4a\x8e\x22\x2a\x2a\x49\xa2\x48\x10\x10\x50\x72\x96\xa8\x20\x20\x51\x32\x48\x50\x44\xc9\x20\xfc\x6b\xfe\xf9\xbe\xcf\x61\x78\xcf\x9a\x59\x67\xbd\x57\xe7\xe6\xbd\xd8\xa7\x7a\xa7\xda\xf5\x3c\xcf\x0e\xe8\x80\x0d\x4c\x22\x0b\x10\xba\x9a\xad\x05\x5c\xec\xe8\x48\xc6\xd8\xc1\x82\x19\xf0\x01\x52\x4d\x43\x93\x04\x5b\x72\x15\x4e\x10\x1f\x0d\xf1\x36\x85\x1a\xbb\xa3\x4e\x0c\x6a\xbe\xe0\xc2\x94\x26\xab\x3f\x7f\xaa\xeb\x67\x5d\xbb\x95\x21\x79\xf7\xac\xbe\xeb\x9f\xfc\xa9\xe6\xda\xfc\x7c\x7a\xe3\x05\x24\xbe\x69\x08\x14\x8a\x64\x49\xe5\x15\x4f\x4d\x04\x36\x60\x6c\xc6\xf3\x22\x3e\x02\x4e\x6c\x72\x02\x03\x69\x14\x31\x4a\x18\x20\x5e\xf5\x7d\x2a\xce\x62\x10\xfb\x57\xaf\x99\xed\x27\x34\xff\xe4\x48\xc3\x96\x1f\xaf\x5d\x1b\x9e\xe8\xf4\x1a\xf7\xdd\xe4\x71\x9b\x6a\x14\xa8\x39\xb8\xfb\xe2\x35\x2f\x44\x2b\xd3\x3c\xdc\x8f\x03\x2f\x09\x7c\x3b\xc6\x91\x1b\x50\x36\x15\x6a\xa6\x19\xb1\x11\xa4\x43\x22\x70\x91\x23\xfa\x58\x0f\x45\x59\x0f\x38\xe8\x8b\x7a\xa8\xb3\x31\x30\x52\x37\xcb\x4b\x37\x65\x4c\x98\xfd\xd8\xfa\x06\x67\x77\x34\x2d\x5f\xa6\xc3\xa4\x2f\x9a\xf6\x59\x34\x6c\xc8\xa0\xc5\x05\xeb\xaf\xfa\xe4\xe6\xe4\x37\x9e\x59\x9d\xde\x26\x41\x4c\x42\x31\xc4\x8c\x60\xca\x12\xe6\x30\xb0\x74\x3b\x96\x30\xa2\x59\x8b\x27\x9e\x67\x04\x92\xa0\x9b\x9c\x4c\x85\x94\x83\x14\x25\x21\x51\x48\xb2\x5a\xc3\x58\x64\x6e\xdd\x1c\x85\xfa\x97\x38\xdc\xed\x03\xf9\xce\xbe\xb9\x7b\xfa\x1c\xef\x7c\xe5\x0a\xff\xd2\x9d\xed\x2b\x5f\x29\x5d\x6f\xfe\x98\xbc\x3f\xa5\xd7\x6c\x4d\xd5\x59\xde\x36\x80\x16\x52\xaa\xcb\xf0\x6e\xe4\x7b\x3a\xc6\x9c\x15\x52\xa2\x6b\xc5\x61\x28\x44\xb2\xa6\x2a\xaa\x0d\x05\xd1\x16\x24\x48\x9b\x86\xf0\x68\x6f\x53\x73\x4b\x93\xf6\x3f\x93\x3a\x1b\x46\xf6\xfb\xf5\xf5\x77\x3e\x5e\x3b\xbe\x7c\xa3\xaa\x9b\x85\x1a\xef\x17\x1e\xb4\xf2\xf7\x39\x9f\x17\xeb\xbf\x2b\xcd\x26\xdb\x48\xa6\x58\xc1\x05\x82\x12\x07\xd8\xa7\x89\x40\x44\xc1\x27\x9c\xe4\xd0\xbc\xcc\x6b\x94\x0b\x35\x12\xea\x10\x23\x9f\xa7\x63\x8b\xd2\x43\x2d\x05\x4a\x7c\xc3\x85\x2f\x3e\xe8\xf0\x57\x8d\xb6\x9f\x1d\x28\x88\xb4\xf1\xe3\xa9\xb2\x45\x4a\x1c\x7d\xf3\x60\xfb\xe2\x77\x8b\x2d\x12\xde\x7d\x4b\xcd\xfe\x4e\x89\xd4\x42\xf6\x4a\x40\x19\x72\x40\xc7\xc8\xa7\x5c\xdb\x35\x54\x15\x2a\xb1\x13\xb1\x10\x29\x01\xcd\x73\x34\x67\x8b\x91\x1c\x33\x22\x0f\x34\x25\x72\x25\x9b\xe2\xb3\xd8\xff\x36\xe5\xc3\x1a\xa7\xd7\xed\x30\xdf\xef\xff\x5a\xf5\x75\x5d\x5f\x5d\xbe\x5c\x5e\x46\x0f\xed\x73\x33\xe3\x63\xae\x67\xd1\x09\x9b\x97\x3e\x96\x5e\x01\x07\xc8\xea\x31\x62\x05\x68\xdb\x00\x40\x89\x04\xbc\x19\x41\xd7\x15\x58\xc1\xf1\x6c\x49\x0f\x9c\x24\x36\x04\x05\xca\x56\x62\xeb\x36\x74\x12\x56\x72\xa0\x9d\xda\xa7\xcb\x3c\xf8\xce\x5b\x75\xff\x74\xd9\x0f\x4b\xa3\xd3\x4f\x5f\x1e\xb5\xf5\xdc\xac\x0f\x27\xa8\xb7\x0f\xbc\x36\xed\xcb\x1c\x0d\x1e\x5f\xb4\x7e\x70\x7a\xcd\xa6\x10\xa5\xe8\x08\xc6\xac\xc7\x52\x31\x47\xd1\x2e\x4b\xc9\x24\x32\x68\x97\xf6\x0d\x88\x7c\x51\xd0\x6c\x13\x4b\xd0\x8e\x81\x28\x18\xc8\x34\x54\xc8\xa7\x50\x43\xf0\x46\xb2\x27\xab\xbe\x39\xee\xcc\xb2\x7b\xf9\x2f\xb7\xa6\x47\x34\xfd\xe6\xbb\xc5\x3b\x5f\x1a\x13\xe8\x2d\xdf\x9a\x12\x15\x59\x76\x23\xbd\x0e\x62\xd9\x08\x24\x98\x95\x34\x0b\x6b\x21\x2b\xc8\x8c\xa9\x30\xac\xa7\x52\x2e\x0e\x05\x56\x84\x30\x02\x0a\x08\x18\x06\x99\x01\x87\x19\x36\x24\x4e\xac\x3c\x5a\x5e\x66\x2d\x3f\x70\xb0\xd6\xf8\x0a\x8d\xf7\xbd\x33\xbc\xbd\xf5\xf5\xf4\x9b\xed\xcf\x3e\x25\xb6\xbb\xb7\xf3\xfd\xef\xff\xe0\xef\xf7\xd9\xd0\x39\xfb\x0b\xe4\x53\xfb\x34\xd1\xe3\xc0\x14\x19\x1e\x10\x8d\x63\x63\x45\x70\x6d\x5d\x93\x6c\xe4\x7a\x1a\x6f\xfa\x96\x25\xf8\xac\x0d\x34\x91\x95\x89\xe3\x03\x56\xf1\xfc\x38\x4e\xdd\x8e\x7d\x04\x0e\x2e\xbc\xf5\xf5\xf7\x55\xeb\x2d\x2d\x10\x5e\x29\x75\x7f\xf4\xc6\xe7\x7b\x54\x6f\x5c\x79\xcf\xe2\x8b\x3d\x93\x69\x0b\x8f\x94\x1c\x97\xde\xaa\x18\xe8\x30\xe4\x3c\xd9\x17\x3c\x83\x67\x51\x60\x12\xd3\x01\x3a\x94\x18\x3e\x34\x13\x9e\x60\xc8\x43\x55\x10\x12\xce\x31\x11\x51\x45\x51\xe4\x04\xc4\x3f\x7a\xd2\x87\xfc\xb7\xd7\x6e\x9b\xdd\x62\xe8\x8e\xa3\xa7\x63\xf3\x35\x66\xf0\xf6\x5b\xed\x33\x1e\x6f\x9d\x31\xe0\x46\xfb\x4a\xf9\x56\x34\xb8\x97\x7d\xd5\xc3\xd4\x57\x66\xc4\xb0\x06\x70\x45\x56\x36\x23\xc2\xc5\xbc\xcc\xba\x48\x8b\x9c\x48\xa0\x10\xab\x8a\xbe\xa0\xcb\x89\x03\x88\x6b\xc8\x6a\x08\x00\xe4\x92\x24\xab\xf9\x22\x77\xa9\xe2\x3b\x4f\xdf\x0c\x7a\x7f\xfb\x12\x53\xb5\x75\xcd\x91\xcb\x3a\x2e\x28\x52\xb4\xcd\xa1\x6f\x0b\xef\x5d\x71\xe8\xa5\x7e\xd2\xfd\x34\x6f\x0f\x73\x01\xf1\x01\x4a\x4c\x4f\x32\x08\x04\x9e\x17\xc9\x86\x11\x33\xb2\x6a\xe8\x8c\x04\x62\x4f\xe7\x13\x33\x8e\x14\x55\x34\x3d\x46\xb3\x74\xc4\x89\x7c\x8a\xc5\x8a\xaf\x14\xce\xac\x55\xa1\xcc\xf5\x12\x0d\xcb\xe6\x1b\xb5\xb6\x5e\x13\xb2\x72\x35\xc8\x75\x6d\x64\xb3\x9f\xba\x0f\xd9\x3e\xbc\xea\x67\x27\xc7\xa7\xd7\x64\xcb\xd0\x6d\x8e\x21\x7c\xc2\x86\xb4\x9b\xc8\x58\x36\x22\x02\x62\x59\xd7\x65\x8b\x68\x21\x6d\x98\x91\xad\xb2\x80\xd5\x3c\x03\x47\xa1\x6e\x9b\x7c\x56\xe8\x93\x75\x23\x77\x7d\xd4\xf4\x83\xd6\x45\x8a\xd6\xf9\x76\xf1\x4f\x79\xe7\x8f\x1c\xff\xfa\xda\x9d\x75\xb6\xc3\xfc\x1f\x9f\x6f\xb7\x2a\x47\xf1\xd9\xe9\x55\xf3\x84\x26\xe5\x44\x9c\x42\x49\x6c\x10\x2a\xae\xa8\x63\x22\x47\xa6\x9a\x70\x49\x60\x78\x71\xec\x40\xd6\xa4\x44\x8d\x26\x90\xa5\xe8\xc4\x53\x7d\x17\xc7\x9a\x97\x05\x35\x26\x63\xe2\xfa\x77\x0e\xb7\xbc\xb0\x87\xdd\x3c\x84\xda\xb4\xa9\xdb\x2b\xf3\xbe\x6c\xba\x0c\x57\x7c\x79\xec\xb7\x27\x7e\x79\x73\x67\x99\x4f\x57\x3d\xfc\xeb\xd1\x0f\xec\xd7\x76\xf6\xbb\x08\x5f\xe7\xe9\xfd\xb9\x2e\x34\xf8\x63\x7f\xd1\x0f\x5f\xec\x4b\x9c\x26\x7f\x14\x59\x5b\xb6\xe7\x92\x5e\x1d\x1e\x3a\x92\x36\x65\x9f\x5f\xf7\xab\x32\xa8\xd7\xe3\xc2\xec\x17\xec\x0a\x85\xdc\x39\x43\x5b\xcc\x2e\x34\xe7\xd6\x73\x5b\x67\x4e\xd0\x6e\x3c\xb8\x57\x36\xbd\x61\x6e\xba\x16\x2f\xc5\x5e\xc2\xb8\xb6\xee\x01\x2e\x90\x2c\x0e\xcb\x94\x67\x11\x55\xe7\xe4\x50\x26\xba\xe2\x79\x5e\x10\x6b\x89\x63\x61\x21\xa2\x8d\x38\x51\x52\x8b\xad\xd1\x4c\xae\xbd\xf9\x6e\x3e\xdf\xef\xab\xc1\xd5\xc1\x7b\xd7\x77\x76\xfc\x6b\xef\x47\x6d\xe7\xee\x29\xf0\x49\x8b\x83\x53\x7e\xab\x5c\xf2\xe6\x13\xe9\x35\x5b\x37\xb9\xc0\x32\x10\x6d\x88\x82\xc2\x02\x8f\x87\xd8\x82\x58\xf6\x91\x2e\x88\x8e\x81\x4d\xec\xeb\x2c\xd4\x89\xc4\x3b\xbe\xec\x46\x00\xa0\x08\xe0\x47\xb3\x93\x6a\xf4\x9a\xc7\x2e\xc5\xfd\xea\x1d\x1c\xd7\xf6\x04\x3f\xad\x7e\x4d\xaa\x4e\xf3\x93\x8f\xdf\x6c\x35\x7c\xc3\x0f\x9f\x6e\x59\x7c\xe7\x76\x9a\xc7\xad\x48\x74\x25\x0d\x09\xb2\xca\x79\xb6\x13\xb3\x66\x14\x87\x6a\x14\x60\xde\x09\x49\x40\x28\x11\x2b\xb2\xac\xa9\x0e\xc3\x58\x82\x66\xfc\xa3\x35\x76\x8c\x47\xc3\xfc\x62\x52\xfe\xf6\x8c\xb1\xe7\x97\xeb\xf5\xce\x8c\x9f\x72\x77\xd3\xe1\x53\xcb\xf3\x9e\x36\x72\x15\x59\xef\x0e\x6e\xbb\xf8\x5c\xa1\x0a\xad\xd3\xfc\xf2\xa1\x21\xcd\x51\x74\x99\xb3\x18\x0b\x8b\x82\x18\x78\x22\xf4\x25\x0e\x01\xa2\x06\x16\x88\x70\xa4\x30\xb6\xc7\xb3\x50\xe6\x59\xde\xb7\x0c\x8e\xcd\x4a\x8b\xb2\xc2\xb9\xce\x67\xbe\x1d\xd8\xe1\xea\xf6\xd3\x03\xf5\x6f\x0a\x7f\x1f\x7d\x28\x1d\xdf\x1c\x2e\x3d\xb8\x22\xcf\xdc\x6f\xde\xe5\x9f\xdd\xb7\x28\xbd\x37\x23\x4f\x0c\x3c\xe2\xd0\xae\x4c\x0c\x4a\x01\x86\x2e\x11\x8c\x54\xd6\x4d\x64\x4d\xb6\x7c\x39\xa4\xec\x84\x11\x71\xa2\xe9\x51\xa4\x6a\x3e\xab\x4b\xaa\x93\x85\x26\x48\xb9\xdf\x86\x6d\xe3\xcb\xb1\x17\x4e\xfd\x7e\xe1\xdc\xe3\xd2\x19\xf6\x55\xbc\xf5\x99\xcc\x81\xd5\x66\x08\xcd\x9f\x1d\xc4\xfc\xf0\x6a\xf6\x01\xf8\x29\xcd\x8e\x45\xdb\x76\x15\x43\x33\x58\x2a\x20\xd8\x64\x11\xe7\x38\x1c\x31\x79\x68\xc9\x81\xc9\x72\x7e\xc2\xa1\xc8\x60\x42\x19\x33\xb6\xe6\xaa\xff\xe8\x78\xdc\x47\x07\x20\xaf\x34\x9e\xfa\xd4\x82\x7b\x0b\x1b\x96\xb9\xfc\xe9\xb9\xfb\x7b\xf6\x15\x79\xdf\x3d\x7a\xb6\xdf\xaa\x51\x7b\xb7\x8d\x6a\xd2\xa6\xfd\x83\x3e\x5f\xa4\xb7\xb7\x71\x44\x57\x55\x28\x43\x32\xdd\x84\xd0\x04\x50\x26\xef\x7b\xae\x2d\xf9\x91\x2b\xc6\x22\x8f\x3c\x4f\xa5\x19\xdb\xe6\xd5\x7f\xfc\x09\x78\x9a\x73\x61\x8a\x30\xec\x7a\x08\xab\x3f\xff\x38\x3b\x57\xf5\xb7\x9f\x19\xf1\xfa\x2f\xaf\x3f\x43\x7a\x46\x7f\xad\x6f\x3c\x1a\x97\xea\xdc\xf0\x99\xd9\xfe\xb8\x34\x33\x3a\x13\x56\x76\x12\x2f\xd6\x04\xc8\xeb\x58\x56\x65\xdd\xf7\x4d\x81\x45\x76\x12\xb1\xb2\xc0\x27\x8e\xcb\x31\xc4\x31\x25\x0d\x28\x34\xa7\xeb\x66\xa4\xa3\x2c\x14\x9d\x3f\x2b\x3a\xe3\x99\x02\xe3\xb7\x6d\x3b\xbd\xe8\xd2\x63\xef\xd7\xaf\x62\xbc\xd4\x78\xdc\x85\xf3\x53\xfb\xcc\xdc\x09\x2b\x8f\x6a\xab\x95\x4d\xf3\xda\x3a\x3d\x44\xc4\x93\x1d\x0e\x4b\xb2\x66\x78\x44\xc0\x0a\xeb\x12\xde\xa3\x65\x6c\x8b\x00\x63\xca\x47\xb1\x42\x39\x01\x0e\x54\xe8\x6b\xbe\x18\x3a\xff\x7c\xd1\x7b\xf4\x66\x34\xf4\x5b\xf6\xcb\x9f\x3b\x97\xae\x7f\xe8\x8b\x3c\x2f\x2b\x9f\x54\xbf\x9b\xf3\x97\x05\xf7\xaf\xb7\x59\xf6\xfc\x5b\x2d\xe2\x64\x5c\xb3\xd6\x3d\xd3\xeb\xd3\x1c\x27\xc8\x46\x14\x03\x2c\x62\xac\x26\x98\x91\x12\xc8\x25\x94\x46\x13\x9e\x33\x5d\x4a\x21\x02\xc7\x20\xec\x93\x00\xd3\x38\xd2\x62\x44\x0c\x18\xa4\xa6\xfd\x3e\x51\x65\xd7\xc2\x8f\x17\x17\xbe\x33\xe3\xb5\x5e\xf3\x3e\xcb\xf7\x42\xa7\x27\x47\x6c\xff\xe1\xcd\x21\x85\x2b\xcf\x79\xbb\x1a\x7f\x5d\x7f\xfb\x60\x9a\x55\x53\x09\xa7\x26\x96\x1a\xd1\x1c\x92\x58\x51\xb1\x93\x80\xa3\x0c\x47\x0a\x25\xcd\x08\x68\x45\x09\x91\x60\x1a\x89\x15\x68\x1c\x2d\x21\x0b\x9a\xae\xa4\xa7\x90\x18\x10\x4f\x1d\xfd\x64\xac\xdf\x3d\x67\xdf\x9a\x7f\x15\x6d\xd4\xab\x63\xff\x4d\x91\xf2\x21\xfb\x4b\xd4\xfe\x4e\xbe\x96\xfb\xfb\xac\x34\xb2\xbf\x5f\x28\xa5\x83\x18\x94\x1c\x38\x9a\x45\x78\xcd\x17\x30\xad\xe0\x58\x82\x08\xab\x8a\xcb\x45\x18\x6b\xb1\x49\x3c\x0d\x0a\xc4\x20\x48\x02\xba\xc8\x69\x58\x83\x44\xca\x62\x16\xf9\x45\x8d\xeb\xb9\x7a\x96\xad\xba\xad\x7a\x9b\xe2\x5d\x51\xff\xa5\x45\xea\x1e\x5d\xd7\xbb\xf8\x6e\xe1\xfa\xe7\x19\x45\x3f\xaf\xf9\xe7\x6f\xea\x43\xee\x54\xa5\xf4\x2f\x65\x1e\xfb\xe4\xe5\xab\x3b\x9b\xc3\x51\x63\x82\x75\x4a\xff\xdd\x97\xf1\xb8\xf1\xd5\xd6\x0e\xdb\xb2\xe0\x2f\xe6\xcc\xd6\xec\x13\x33\x52\xd6\x50\xc8\xc8\x22\xc1\xbc\x1d\x98\xa1\xa3\x70\x14\xaf\x1b\xc0\x13\x14\xc1\x50\x20\xe7\xb8\x02\xcd\x78\xba\xe4\xab\xbc\x81\x29\xd3\x63\x31\x8a\x3d\x02\xdc\xd4\xc1\x3b\xf7\xf3\xa3\x47\x2a\xed\xad\xdc\xa0\xea\xde\x3f\x0e\xe6\xa8\x77\xef\x4e\xa5\x05\x79\xc7\x7e\x50\x35\xef\xbe\x2a\xf6\xb8\x8d\xfc\x8f\x72\xf6\x1f\x11\x52\x7f\x1b\xd9\x04\xa2\xea\x22\x46\x37\x01\x2f\x53\x44\x90\x15\x26\xe2\x75\x8a\x32\x04\x5a\x73\xb1\x8b\x2c\xe0\x33\x2e\x8f\x29\x85\x35\xdd\xc0\x82\x40\x15\x52\x07\x6f\xd1\x11\x27\x96\x36\x7b\xa2\xe1\xd0\xba\x27\xf3\xd5\xdc\x4f\x0f\x29\x5b\xb6\x6c\xde\x4e\xb3\x66\x8d\x2c\xcc\xff\x36\xb1\xe3\x98\xed\x39\xb2\xbf\x1c\x2c\x65\xaa\xf4\x7d\x3f\x76\xbd\x28\xe0\x01\x65\x52\x26\x07\xc3\x44\x4a\x62\x26\xe4\x19\xcf\x42\xa2\xa4\xa9\xa2\x23\x28\xbc\x0e\x41\xac\xf2\x20\xc0\x2e\x8e\x04\x36\x8b\x76\xf9\xab\x67\x9f\xbf\x26\x75\x68\xde\x77\x03\x5b\xe6\x4e\xc7\x31\x3d\x73\xe5\x9d\x5f\xb0\x47\x8b\x2b\x9b\xee\x9e\xd8\x41\x46\x8e\x7e\xff\xa3\x51\xff\x8b\x18\xfa\x4f\x63\xf0\xcc\x8c\x97\x0a\xe5\xce\xf5\x30\x62\xa8\x59\x54\x7c\x60\x9b\xf1\xe7\xcc\x8c\xa7\xf7\x34\x2d\xe2\xff\xba\xfb\x65\xaf\xdc\x64\x78\x6f\xd9\xcd\x0e\x6b\x47\x0f\x2f\xb5\xf3\x5e\xf6\x1f\x57\x52\x66\x06\xc5\xf3\x4c\x3a\xf1\x09\xf0\x62\x01\xfb\x81\xe8\xa9\x81\xe3\x63\x40\x69\x1c\x76\xbd\xd8\xf7\x42\x21\xd0\x13\x0f\xd2\x08\x09\x3a\xc4\x0e\x12\xff\xa9\xdf\xfe\x68\x42\x6b\x5e\xe1\xe9\x8d\x9d\xba\x34\xec\x3f\xa8\x46\x93\x32\xcd\x29\x78\x7b\xc9\xb4\xd5\x63\x9b\x6f\x9d\x32\x82\x3b\xb7\xb9\x56\xc9\xea\xab\xd3\x4b\x17\x80\xb4\xa1\x27\x8a\x0f\x13\x23\x82\x8c\xa8\xf3\x01\xe3\x03\x11\x9b\xb1\xe3\x23\xc5\xb4\x82\x24\xd4\x6d\x28\x33\xa1\x0a\x65\x3a\x0e\x6d\x4a\x62\xe9\xd8\x7b\xb4\xf9\x3c\x71\xb7\xd6\xee\xa0\x4b\x90\x4b\x3c\x31\xba\xc7\x8b\xe3\x3e\xdc\x3e\xec\x50\xc5\x52\xa7\xed\x4b\x6d\xfb\x9e\x1a\x95\x7b\xe6\xe1\xc2\x6e\x9a\x35\x80\x00\xaf\xd1\x7c\x22\x48\x32\x36\xac\x58\x96\x1d\xcc\x8a\x40\x34\x42\x80\xec\x50\xc5\x46\x2c\x73\x6e\x42\x47\x9e\xaa\x38\xba\x65\x9a\x18\x86\x6a\x16\xb3\xc0\x66\x7d\x6e\x2d\x78\xbc\x22\xda\x33\xbf\xed\x94\x62\x42\x45\xff\xcb\x7a\x5d\x86\x94\x5f\xba\xb7\x41\xef\xf9\x9b\xda\x1e\x7a\xfd\xdc\x89\x34\xbf\x09\xd1\xc0\xa1\x2d\x22\x51\x1e\xad\x12\x9a\x4d\x98\x38\x8c\x30\x07\xb1\x2c\x24\x2e\xaf\x02\x0f\x1a\x80\xc8\x5c\x18\xfa\xb1\x13\xb1\x48\x0c\x43\x2d\x4b\xca\xdb\x6f\x77\xd6\x7d\x52\xcc\xfe\x9e\xbf\xd7\xf2\xb9\xad\x7a\xe6\xf1\x29\xa3\x0f\x58\x27\xe9\xf9\x39\xa7\x34\xda\xd2\x7e\xde\x9e\x0d\xd9\xe7\xda\xa6\x34\x1b\xfb\x3c\x65\x7b\x0c\x93\x88\x9e\x6c\x6a\x22\x2b\x49\x9e\xad\x0b\xa1\x28\x99\x14\xa3\x07\x4c\xa2\x53\x8c\x62\x47\x40\x0a\x13\x08\xa1\x67\x31\x3e\x52\x53\x9b\xed\x0d\x6e\x5a\xfe\x97\xb1\x15\x3b\x9c\x6a\x76\xad\xed\xa2\x99\x35\x3a\xe2\x35\x1f\xcd\xbd\x74\x70\xe0\x77\x5f\xbf\x59\x61\xd0\xfa\x37\x2b\x0e\x48\xb3\xd9\x1e\xe4\x55\x62\xb9\x71\x60\x71\x89\xad\x40\x4e\x65\x59\x09\x07\x5e\x80\x03\x33\xe0\x2c\x06\xd0\x82\xaf\x79\x89\x21\x48\x04\xc7\xb6\x9b\x28\xb1\x9f\xda\x6c\x6a\x41\xa3\x59\xe2\xe3\xe7\x5e\x2d\x48\x08\xb7\xe9\x46\xd7\x4f\xbf\xed\xf0\xd7\xcc\xe9\x73\x83\xdc\x73\x47\xb6\x11\x5a\xef\xcb\x7c\x21\xbd\xe1\x88\x39\x68\x08\xbe\x24\x88\xbe\x6f\x89\x40\x24\xa2\x04\x3c\xc9\x8a\x93\xd8\x8e\x29\x48\x9c\x10\x04\x06\xad\x04\x11\x67\x02\x3f\xb1\x7c\x27\x76\x74\x3e\x75\x1d\x2b\xbf\xfd\xe7\xd5\x3f\x8e\xbd\xbd\x60\xe4\xe2\x03\xad\xa7\x5a\x63\x1b\x3b\xe2\xb7\xb3\xe7\xfd\x34\x38\x47\xf7\xa5\xcd\x66\xae\x7d\xfe\x83\x34\x4b\xcd\xc5\xba\x1c\xd2\x11\xad\x5b\x92\x83\x0d\x36\xa4\x14\xc0\x9b\xb6\xa8\x01\x83\x05\x21\x49\x4c\x21\x80\x18\x44\x32\xc7\xd1\x96\x0b\x38\xdd\xb4\x3d\xf0\x37\x7b\x67\x68\xde\xff\xee\xed\x32\xb3\x65\xee\x1c\xf5\x1f\x86\x47\x7f\xdd\x7b\xe1\xea\xba\x7b\x99\x11\x9b\xe0\xa8\x2a\x8b\x84\x51\x5f\xd7\x9e\xd6\x3f\x4f\xdc\xd0\x5d\xfb\x41\xc5\xf5\x5b\x7e\x0c\x46\xa5\xb7\xea\xf1\x2c\x0c\x45\x64\x01\x56\x08\x42\x19\x29\xb2\x41\x03\x53\x31\x03\x22\x98\x22\x72\xad\x44\xc1\xe0\x1f\x17\x1e\x24\xf0\x14\x17\xd1\x9c\x9c\x18\x3e\x8f\x52\x7f\x9b\x16\x53\x57\xcf\x1f\x2f\xbf\x70\x60\x42\x91\x7a\xad\x0f\x5c\x7d\xea\xf6\x9d\x7c\xd3\x3e\x6b\x60\x2d\x5a\x39\xf4\xdc\xe4\x78\xea\xf1\x02\xd9\x17\xc2\x4c\x19\x09\xd0\x12\x31\x25\x53\x51\xc4\x9a\x89\x19\x45\xc0\x52\x2d\xa0\x98\x1e\xe5\x42\x26\xe0\x75\x1b\x03\x99\xb3\x7c\xdf\x13\xbd\x50\xd4\x22\x4f\xb2\x05\xcd\x4e\x1d\x09\xc5\xdb\x4c\x1f\xf8\x54\xef\x61\x39\x6f\x5f\x9f\x78\xaf\xd5\x91\x3b\x7d\x72\x3e\x59\x74\xdc\xfd\x4f\xc7\xfe\xba\x74\xc5\x2b\x23\x5a\xd4\x3a\xb2\x2c\xcd\xaf\xfe\x4c\xec\x42\x11\x84\x38\x91\xe2\x48\xf0\x18\xc4\x18\x09\x43\x0c\x04\x65\xac\xca\x6e\x8c\x69\xa2\x3b\x92\x0b\x4d\xdf\x16\x6c\xde\x65\x3d\x96\x07\xa9\x47\x0c\x6f\xbc\x30\x7e\x70\x87\x3a\x95\xa8\x5b\x33\x9a\xe4\xda\x7a\xa1\xf3\x90\xfd\x33\x92\xf7\x7e\x5d\xfb\x56\xd7\xf6\xeb\x27\x35\xd8\x36\xbd\xc3\xc9\x34\x93\xe5\x89\xf7\x0f\x47\x60\x23\x42\xa0\x1b\xc3\xd8\x0e\xdd\x98\x03\x26\x17\x04\x80\xc1\xb2\xa4\x07\x38\xb0\x78\x95\xf6\x44\x02\x84\x24\x14\x4c\xdb\xa1\x1e\x61\x0a\xfc\xa7\x19\x62\x66\x46\xfe\x1c\xca\xbf\x31\x05\x72\x4e\xf8\xf9\x1a\xbf\x65\xe5\x88\x12\xdb\xec\x56\xbf\x67\x8c\x68\xb5\xa3\xc1\xa2\x69\xe7\x27\x14\x7e\xa6\xc8\xd7\xd7\x73\xb4\xdd\x93\x58\xe9\x2d\xc1\xa1\x6f\xe3\x44\xd3\x3d\x56\xa0\x3d\x4a\x14\xed\x50\xd6\x90\x28\xea\x1c\xab\xc9\xaa\x47\x25\xd8\x21\x81\x0b\x6c\x9f\x4f\x84\xc0\xe7\x13\x82\x11\x85\x53\xfb\xd4\xcc\x15\xd7\x5a\x96\xbf\x74\xab\x70\xb9\xd5\x62\x59\x66\xd6\xc0\x01\x85\xe7\x35\xb1\x3b\xde\xde\x3a\x31\x9c\x33\xac\x5d\x9e\x1b\x6b\xd3\xfc\x71\x08\x2b\x32\x82\xea\x84\x62\x24\xf2\xaa\x63\x19\xba\x1c\x00\xc6\x55\x15\xa8\xf0\x1e\x4f\x05\xae\x08\xb0\xef\x9a\x08\xa9\x89\xa7\x38\x28\xe1\x25\xdd\x48\x6d\xf6\x9f\x99\x62\xb5\x42\x0b\x9f\x3c\xfc\xd6\xbd\xcc\xfe\x2b\x9a\x06\x67\xa5\x4a\x1f\xca\xbb\x7a\xea\x8f\x6f\x78\x6c\xde\x7b\x5f\x4d\xfa\x2a\xcd\xa0\x2e\x45\x11\xf5\xc0\x61\x58\x8f\xf2\x9d\x24\x76\x4c\x89\x56\x3d\x5a\x37\x28\xcf\x67\x35\x9f\x93\x1d\xc6\xe3\x61\xc2\x07\x92\x0f\x91\xc8\x46\x6c\x10\x50\x59\xf0\x32\xca\x7f\xff\xea\xdd\x1e\x8f\xd7\x79\x6d\xc3\xa7\xe3\x7e\x14\x9b\x37\xba\xbf\xf7\xcb\x89\x0a\x3e\xf0\x96\x52\x1b\xbd\xd4\xec\xe8\x8a\x1d\xd9\x17\x0d\x4e\x79\xda\x12\x16\x4d\x55\x85\xbe\xa0\x68\x66\x6c\xc5\x54\x92\x58\x08\x5b\x6c\xe8\xc9\xb6\x61\xd3\xa2\xed\x30\xb2\x84\x3d\xca\x14\x65\x17\x38\x56\xac\xc4\xc2\xdf\x0d\xcf\xff\x16\x85\xff\x34\x20\xcf\x6c\x99\x73\x70\xee\x87\x23\xe1\x5e\xed\xe9\xdf\xfc\xb5\xd3\x18\x50\xc8\x79\x65\xfc\x82\xc5\xcd\x83\x79\x99\xc3\xe6\x0b\xd3\xb6\x96\xdf\x7a\x7b\x75\x8d\x12\x33\x5b\xfe\x95\xe6\x78\x8f\x5c\x5d\xe4\x79\x62\xf8\xb6\x46\x80\x64\x5b\x12\xa4\x6c\xc7\xf7\x43\x4d\xc4\x9e\x03\x74\x8a\x93\x63\x41\xb6\x02\x4c\x79\x46\x84\x54\xe6\x7f\x66\x73\x8f\xba\x94\x2f\xfa\x85\xc7\x7b\x6b\x0b\x4c\xd3\xdb\x1c\x59\x56\xa1\x6f\xff\x16\x7b\xb6\x36\x1a\x58\xec\xd4\xab\x37\x16\xbf\x67\xd5\xdf\x5f\x25\xbd\xd0\x16\xde\x33\x04\x45\xb4\x10\xf4\x0d\x15\xfb\xae\xcd\x30\x5a\x28\x92\xc8\xc1\xba\xef\x43\xd1\x76\x65\x0e\x7b\x5c\x28\x41\x95\x67\x7d\xe4\x7a\xc8\x87\x71\x16\xbc\xd5\xd3\x55\x70\xdd\x26\x5f\x37\x75\xb7\x9d\x59\xf0\xee\x4c\x58\xb7\x48\x3b\x6f\xdc\xc9\x8f\xab\x5d\x2c\x51\xf5\xc7\x17\xcb\x32\x45\x87\xe6\x4b\x6f\x7b\x14\xb3\x41\x82\x0d\xc9\xc0\xd8\xf1\x5c\x1d\xb9\xbc\xc5\x19\xbe\xea\xb0\x6c\x8c\x28\x3d\xb0\x64\x2a\xf4\x38\x9a\x36\x23\x37\x61\x18\x8d\xc8\x14\x6d\x64\x41\xcb\x18\xbe\x46\x98\x72\xb7\xfc\x29\x70\x9c\xee\x84\xe7\x9e\xed\xf4\xea\xc4\x2f\x0a\x9e\xae\x2e\x94\x19\x46\xcf\xab\xd6\xcc\x6d\xb9\x3f\xfb\x22\x1d\x29\x03\x98\x52\x5d\x46\x23\x7a\xe0\x98\xc8\x66\x2d\x5f\xb1\x08\x83\x62\x59\x0a\x54\x2a\x71\xd9\xd0\xd1\x35\x46\x17\x3c\xd6\x04\x21\x10\x64\xc2\xf0\xc0\x17\xe8\x47\xda\xa3\xff\x34\x7c\xc9\x6c\x39\xb0\x45\xde\x87\x23\x21\xe9\x33\xf8\x17\x71\xf0\xdd\x21\x39\xbb\xef\xea\x7c\xeb\xcc\xfa\x02\x39\xdb\x4e\x6b\x73\xf6\x97\x4f\x96\x9d\x5c\xb8\x6e\x7a\x95\x4a\xdd\xb3\xbf\x7e\x3b\x65\xc1\x96\x90\x29\x53\x34\x1d\xc4\x89\x07\x15\xf8\x8f\xb4\x85\x22\x1e\xba\x3a\xa1\x69\xc6\x0d\x10\x11\x34\x68\x40\x89\x91\x81\x26\x99\x8c\x65\x28\x82\xeb\x64\x51\xb0\x83\xc7\x32\x9a\xbe\x7f\xfd\xed\x5d\x7b\xeb\x55\xf9\xaa\x2e\x7f\xe1\x62\x8d\x82\xd7\xbe\x10\x17\x3f\x56\xea\xc3\x12\x9d\xab\xbd\xbf\x34\xfb\x93\xea\xd4\x68\x29\x2f\x71\x74\xd1\x16\xa5\x80\xf7\xb8\x44\x0c\xa1\x4e\x12\x51\x41\x2a\x4b\x85\x9c\xc9\xc7\xa6\xe4\xf2\x1e\xb1\x38\x55\xb3\x7d\x35\xf6\x28\x57\x06\x7c\x6a\xb3\x07\x3c\x5f\x7c\xd6\xac\xbc\x0b\x8b\xe4\xfd\xb5\xed\xbb\x93\xaa\x3f\xf7\xcd\xe9\xab\x1f\x6d\xe2\x5e\xc8\x5d\xf7\xad\xda\xf3\x29\xaa\x03\xc8\x3e\x83\x3b\x35\xd3\x87\x0a\xa0\xab\x33\x48\x56\x68\x2e\x08\x18\xa4\x72\x38\x0a\x29\x53\x0f\xad\x80\xf5\x7c\x5b\x0d\x55\xd9\xb7\x88\x44\xd3\xaa\x19\xf0\x09\x60\xa9\x98\x4d\x1d\x09\x39\xfc\x3e\xbb\xca\xf6\xac\xbc\xfa\x77\xaa\x4b\x93\xa5\x27\x4e\xf4\xba\xd9\xf5\xe7\xd6\x9b\x1a\x3d\x70\xe2\x35\x3f\xd6\x3a\x70\x7b\x4e\x7a\x61\x1a\x10\xf0\x2c\x0e\x42\x57\x35\x19\xc8\x88\xae\xcb\x03\x25\xa6\x23\x5e\xd0\x1d\xcf\x96\x65\x29\x96\x4d\x8e\xe3\x78\x53\x50\x38\x96\x92\x18\xcb\x13\x65\x81\x7b\xa4\x3d\xfa\x4f\x33\xa3\xcc\x8c\x27\xf2\x3f\xfe\x6f\xed\x51\x6f\xf6\x98\x3e\x73\xcc\x96\xe2\x64\xf8\xd9\x05\x4b\xbb\x2f\x39\x54\xf0\x72\xde\x25\xc3\x6f\x54\x6c\xfe\x76\xfb\x7a\x7f\xde\xdb\x32\x39\xcd\x2a\xff\x14\x64\x12\xe4\x9b\x82\x8b\x0d\x96\xd5\x10\xab\xbb\x96\x19\x60\x04\x8d\x90\xa5\x8d\x80\xc1\xc8\x87\x2a\xa7\x25\x22\x85\x23\x93\xd7\x14\x85\xd7\x94\xd4\x1f\x67\x4b\xd9\x09\xe7\x1e\x1f\x3b\x7b\x57\xce\x3c\x6f\x35\x78\x6e\x72\xbe\xf1\x5f\xd4\xfe\x7a\x4d\xd1\xcf\xaf\x56\xc8\x31\xab\x4d\xa5\x19\xc3\x2f\xa4\x57\x56\x0b\x22\x8d\x06\xbc\x2e\x58\x89\x84\x59\x0c\x4d\x59\x37\xbd\x98\x51\x4d\x40\x22\x62\xb8\xc4\x4a\x22\x47\x44\x26\x81\x54\x82\x38\x96\xf3\x95\x88\xa8\x59\xc8\x6a\x95\xae\xbe\xf5\x8c\xfd\x4c\xd9\xc2\xfd\x86\xd7\x63\xca\xac\x2d\xb7\x7b\x65\x95\xcb\x51\x97\xc6\xef\x1a\x99\xc7\x9e\x7a\xbf\x83\xb2\x3a\xcd\xf8\x60\x5f\xd7\x1d\x0e\xc8\x10\xc5\x82\x6a\xb3\x32\x42\x1a\x43\x34\x8a\x89\xa0\xe5\x50\x31\x8e\x89\xad\x92\x98\x8d\x39\x62\x03\x33\xa2\x13\x8d\xc0\x38\x0b\xe5\xa6\xbd\x05\x3f\x3b\x56\xa0\x55\xa3\x25\x73\x1b\x3e\x31\xb3\xcc\x17\xcf\xd7\xb8\x37\x7f\x7d\x93\x69\x33\x37\xe6\xad\xde\xfa\x03\xd8\xb9\x41\xfd\x37\xd3\xfc\xde\xa4\x99\x31\x05\x0c\x83\x63\x19\x2e\x10\x6d\x43\x8d\x18\x06\xd1\x2c\xad\x99\x9a\xe0\x88\x48\xf5\x95\xc8\xb2\x1d\x3e\x10\x74\x29\x52\x55\xda\x8e\xc1\xdf\xc0\xc1\xeb\xec\x3f\x2d\x5e\xf8\xf1\xa1\x76\xaf\xcc\xfb\x71\xcb\x86\x82\xe2\x95\x67\x8e\xdd\xac\xfb\xf8\xaf\xc5\x8f\x8e\x1a\x1e\x68\x35\x87\xe7\x1f\x55\xf3\x70\xcd\xb9\x99\x19\x0f\x7e\xbd\xf9\xd3\x47\xe5\x1f\xfa\x37\x17\x6e\x28\x3d\xa6\xe3\x4f\x39\x4b\x7c\x3e\xa0\xd2\xbe\x8b\xe7\xdf\xbe\xb4\x7c\xc0\xaa\x5f\x0f\x7d\xd5\x63\x6e\x66\xa1\xb6\xb8\x6c\xc7\x62\xc7\xd2\x7b\x6b\x0e\x2c\x3e\x4e\x22\xde\xb2\x6d\x05\x98\x3c\x42\x2c\x92\x15\x12\x21\x51\x56\xf9\x50\x89\x3d\x93\x65\x2d\xd9\x94\x89\xa7\x63\xc9\x00\xa2\x49\x90\x10\xa4\x86\xc0\xe5\xa7\x0b\xbd\xde\xe4\xfe\xf2\x65\x05\xee\x37\xf8\xe6\xd7\xbb\xe5\x7a\x94\xce\xb8\xc5\x3e\xfd\xe7\xf8\xcc\xad\xe3\x17\x5c\xda\x38\xe4\xdd\x2f\xd3\x2d\x12\xe9\x44\x1a\xd0\x44\x11\x69\x92\x12\x21\x4a\xf2\x59\x5d\x76\x59\xcc\x72\x2c\xe5\xea\x98\x4a\x42\xe2\xcb\x0e\x4f\x43\x2d\x4a\x00\xd4\x42\xe4\xa4\x58\x6a\xf0\xf5\xed\x59\x45\x56\x5c\xdc\x7d\xec\x3b\xfb\xeb\x89\x7b\xb7\xbc\x53\xbb\xe5\x94\xcf\xd1\x16\x2d\xff\xda\x4e\xbb\x0e\xbe\x7f\xb4\xf8\xfe\x34\x0f\x18\x39\x90\xd0\x9c\x6e\x7b\x89\x80\x35\x8c\x75\xda\x70\x3d\x0a\x22\x51\x60\x68\x0f\x13\x85\x8e\x0c\x8f\x77\xb8\xd8\xd3\x6d\xd5\x53\x84\x30\x60\x1c\x37\xc5\xea\x88\x33\x27\x7e\x9b\x98\xb7\xce\xe2\x83\x6a\x66\xa3\x96\x87\x56\xa2\x0e\x03\x1f\xf4\x27\x15\xaf\xc7\x33\x8e\x5d\x19\xdb\xef\x87\x27\x8e\x66\xbf\x7b\x4e\xe9\x1c\xb4\x43\x25\x12\x8f\x1d\x18\x21\x09\x48\x1c\xa7\xc7\x32\x92\x63\x99\x07\x91\x1e\x05\x42\xa0\x06\x8e\xab\x3b\x8e\x2d\x72\x1e\x34\x5c\xd7\xf0\xf9\x38\x8b\x37\xd7\x83\xbb\x8e\x6d\xd2\x26\x8e\x2e\x79\x45\x2f\x7f\x3b\x6f\xff\x3b\xed\xba\xe6\xe8\x7a\xfd\xbb\xa6\x83\x8a\xb6\x3b\x48\x87\xe3\x2a\x6a\xd9\x17\xf2\x4b\xd9\xcf\x71\x9e\xec\xa8\x30\x12\x03\x46\x8e\x2d\x48\x07\x44\x75\x90\x82\x4d\xcc\xf2\xba\xcf\x72\x86\x11\xc8\x3c\x76\x83\xc0\x73\x24\x16\x10\xdd\x57\x2d\x57\x4d\x9d\x71\x3e\x79\xa2\x48\xb5\x0f\xf4\x8a\x6f\xee\xff\x79\x62\xfc\x73\xff\x57\x26\xbc\x53\x24\x5c\xdd\x21\xc7\xbc\x3b\x5f\x75\x59\x5a\xe7\x53\xee\xb1\x34\x2f\xb9\x4a\x4c\x99\x55\x89\xce\x42\x8b\x23\x12\xb2\x7c\x98\xb8\x71\x2c\x11\x46\xd2\x38\x37\xd2\x14\xd6\xa2\x54\xce\xf1\x0d\x9a\x91\x90\xcb\x08\x5e\x14\xc7\x62\x16\x68\xd4\x27\x5e\x70\x86\x0d\x7e\x6e\xe2\x94\xfa\xbd\x5a\xbf\x5a\xbd\xce\xb0\x2d\xd7\x8a\x36\x1f\x55\x73\xde\xa2\xa2\x67\x32\x96\xb5\xc3\x24\xfb\xd5\x34\x35\xd3\x06\x70\x9c\x09\x05\x0b\x38\x01\xad\x12\x57\x66\x45\xd6\xd3\x3d\x04\x0c\x14\x81\x30\x48\x42\x83\x68\x71\x18\xc3\xc8\x09\x3d\x47\xa4\x93\x44\x4b\x52\x30\x6d\xe2\x82\x43\x37\x97\xe4\x6f\x64\x6e\xf1\x73\x15\xee\xff\xe4\xc8\x39\x92\x54\x81\xfe\xea\x2d\x29\xda\x5c\x6a\x83\xd5\x78\x94\xf1\x41\x9a\xc5\x04\x05\x8b\xb3\x12\x3b\x12\x64\x21\xa4\x93\x44\x60\x15\x8d\xe3\x63\x17\xa8\x08\xf1\x58\xa1\x6d\x17\xf8\xb2\xc3\x86\x6a\x4c\x61\xd3\xc4\x01\xfb\x3f\x0c\xca\x7f\x63\x06\xcf\xd9\xf8\xd8\xdc\x71\x83\x40\xd8\x70\x88\x3b\x33\xfa\x61\xc7\x63\x63\xbd\x92\xe2\xba\x56\xd3\x9f\xe9\xd7\xeb\xa3\xd6\x54\xad\x2b\x69\x9e\x8d\xf0\x88\x66\x7d\xce\x8e\x30\xb4\x2c\x0a\xda\x81\xc6\x4a\xae\x8c\x19\x98\xb0\xb1\xa2\x3b\x10\xb1\xa2\x6c\x9b\x8a\x29\x61\xd1\x32\xa0\x1f\xfc\xcf\x56\xdc\x14\xcf\xc4\x4e\x07\x65\xda\x6d\x2b\xba\xf4\x55\x9b\x9b\x05\xa4\x62\x95\xa4\xdd\xbd\x33\xbf\xb8\x7c\x6d\x57\xb1\x3e\x7b\x2b\x9f\x5e\x37\xac\xdb\xc3\x1a\x71\xd4\xf6\x1a\x8b\x27\x0e\xb8\x52\x6b\x7b\x89\x09\xbf\x8f\x5e\xc6\x45\xdf\x4e\x3d\x5c\xb3\xc9\x90\x5b\xdb\xf2\x8d\x7d\xb7\x6a\x9d\x83\x20\xfb\x30\xf2\x94\x11\x20\x89\x40\x36\x40\xa8\x86\x24\x31\x51\x62\x01\xd9\x50\x28\xc7\xb0\x91\x42\xc5\x2e\xc0\x06\xb4\x6d\xd1\x89\x55\x16\x20\xc1\x15\x75\x2e\xe1\x04\x9d\x3c\x9a\xd5\x5f\x50\x5e\xff\x85\x14\x69\x5d\xe0\xab\x3c\x36\x5b\xfd\xc3\xa5\xa5\x95\x3b\x03\x9d\x5a\xdf\xd5\xa6\x6e\x8e\x3e\xf8\x61\x97\xad\x0b\xf6\xa4\xd7\xfb\x55\xda\x62\x5d\xde\x08\x12\x48\x82\x80\x65\x35\xd6\xb4\x29\x2b\x96\x38\x59\xd6\x12\x28\x79\x86\x65\xc4\xa2\x65\x5b\x94\x4f\x39\xb1\x4d\x3b\x8e\x10\x9b\xa9\x73\xcd\xec\xb5\x75\x17\x35\xaf\x22\xd4\xbc\x79\x67\x77\x9e\x75\x7d\xa7\x8e\x7b\xa5\xd3\x94\xa6\xb9\x73\x1e\x38\xd1\xeb\xc2\xc7\x4f\x74\x1a\x55\xfa\x42\x9a\xcb\x3e\xe4\x64\x0b\xc5\x8a\xe5\x04\x06\xa2\xdd\x90\x63\x15\xd1\x86\xc8\xe2\x44\xd9\xe5\x39\xda\x8a\x3c\x59\x09\x43\x19\x02\x86\x95\x19\xc1\xf6\x51\x4c\xa5\xce\x35\x15\x26\x2f\x2e\x79\xab\x69\x01\xf6\x85\xc3\xdb\xde\x69\x57\x2e\xca\x2c\x32\xed\x5a\xb1\x4e\x1f\x7e\xf1\xfa\xd2\x27\x6f\x5e\x1c\xf0\xdc\x5f\x05\xd3\x1b\x05\x51\x8c\x54\xd6\x63\x12\x5f\x0e\x43\x5d\x63\x22\x59\xa6\x5c\x55\xe2\x15\x20\xf8\x3c\x92\x44\xc5\x47\x06\x17\x53\xc4\xd1\x62\x83\x81\x58\x93\x90\xe3\x3d\x5a\x43\x3f\x39\x7b\x37\xa9\x56\xfe\xe8\xf9\x67\x46\xec\xe3\x77\x5c\xec\x73\xe6\xca\xb2\x75\x3f\x2f\xaa\x7f\x68\xcb\xbd\x71\x47\x8a\xd4\x19\xb8\x33\xfb\x8b\x0d\xb2\xc0\xe2\xd9\x8a\xc2\xd0\x8e\x04\x2d\x3e\x74\xa5\x44\x8d\x6d\xe4\x2a\x4e\xe8\x6a\x18\x61\x56\x92\x82\x58\x70\x22\xde\x0e\x45\x55\x62\x18\x9f\x50\xd4\xbf\xc8\x9f\xfc\xad\x51\x57\xfe\xe2\xb0\x13\xe5\xa4\xe2\x6b\xba\x4b\x27\xba\xf7\x6c\x3b\x9c\xa9\x7f\x72\x69\xc7\x85\xbd\x1b\x30\x95\x86\x54\xd8\xb8\x77\x58\xf6\x37\x70\xa7\x3c\x65\x93\xa3\x80\xc7\xcb\x8c\xef\x60\x8d\x56\x00\x63\x07\x3c\xc2\x8a\x27\xd2\x38\x16\x88\x60\x19\x02\x56\x5c\x55\xf7\x0c\x89\x18\x3c\x1d\x99\x6c\x88\x60\x56\xf4\xb8\xd7\x72\xbd\x3c\xa8\x46\x7c\x6c\x4d\x23\xc1\xc9\x98\x78\xa0\x1a\xaa\x41\xd6\x6d\x9e\x5b\x2e\x67\x8f\x79\x9f\x2d\x7e\x6f\x67\xa7\x87\x77\xd0\x7f\xda\xf8\x10\x7f\x5b\xe6\xc7\xcc\x1f\x33\x68\x64\xc7\xc3\xb7\xca\x7f\x5e\xb4\xf1\x2f\x5d\x57\x2c\xfd\xa6\xe6\x4b\xdb\xb7\x54\xbb\x52\xe6\x7e\x9a\xf5\xb0\x1c\x9a\x83\x20\x66\x39\x3d\x16\x75\xdb\x62\x2d\xd6\xd3\x13\x4d\x25\xa6\x8f\x6d\x4e\x27\x71\x42\x42\x3e\xa2\x20\xe7\x85\xae\x6f\x6a\x1e\x50\x3d\xf3\xd1\xef\x72\xf4\x48\x8d\x33\x26\xe5\x54\x1d\x5c\x3a\x7f\xb1\xc7\x2e\x65\x32\x3d\xde\x52\xeb\xb7\xed\xdb\xa8\x5c\xf0\xfd\xa8\x99\xcf\xef\xba\x95\x66\x24\x6a\xc4\xe9\xff\xb8\x96\xc8\x90\xb3\x34\x1d\x73\xb6\x03\x02\xd7\x0a\x62\x8e\x4e\x84\x00\x04\x91\xcf\xc8\x0c\x92\x65\x3a\xd1\x00\x6d\x25\x8c\x1d\x3b\x82\x9a\x05\xae\xe3\x3b\xf7\xab\x27\xfe\x98\x5e\xa1\xe1\xa5\xc9\x3b\xde\xce\xb7\xb8\xd2\x02\xcb\x5a\x37\x6b\x71\x93\xe7\x19\x76\xd7\xdd\xa3\xb1\x32\xed\xcb\x87\xbe\x4b\x85\xf1\x5f\xed\xdc\xa8\x6c\xd3\xc0\xe7\xc6\x2b\x7f\x4c\xbf\xca\x2f\x78\xe5\x99\x46\xa3\x5b\x7f\x3d\xb6\xe1\xa6\xab\xea\xb9\x13\x43\xfb\xa4\x79\xe0\x23\xfb\x92\x48\x49\x34\x0b\x35\x82\x79\x3b\xa6\xa4\x98\xf2\x09\x2d\x58\x3c\x76\x24\x9d\x03\x3a\x01\x71\x0c\x14\x8a\x12\x40\xec\x28\x10\x8a\x30\xc5\x2e\xbb\xce\xb9\x07\x55\xfa\xec\xcf\x7a\x99\xa5\x76\xce\xed\x3f\xb9\xef\x27\x83\x1b\xdd\x79\xb0\x3b\x57\xf7\x3f\xa6\x2f\xd8\x97\xb3\xe7\xbc\x85\x65\x2e\xa7\xf9\xb9\xc5\xd0\x29\x3f\x80\x06\x30\x7d\x03\x25\x20\x89\x38\x81\x70\x42\x2c\x20\x45\x32\x91\x47\x64\xdd\x64\x78\x81\x8f\x5c\x5b\x70\xb0\x6e\x26\x3a\x70\xb2\x92\xe9\xde\x5b\x6d\xdf\xc0\xda\x07\x5e\x78\x7e\x79\xbb\x8d\x13\x6b\x96\x19\x3a\xe4\xe9\xc9\x00\x4d\xf9\xe8\xce\xf7\x73\x2c\x5c\x7a\xdb\xc6\xec\xf7\x9b\x29\x33\x13\xaf\x09\xbc\x29\x7b\x12\x6d\x21\x29\xc4\xac\xea\x41\xa4\x84\x92\x4d\x90\x6b\xd1\xa2\x24\xc9\x1a\xe7\x98\x42\xa8\x1a\x82\xe0\x73\xba\x64\x83\x48\x27\xa9\x4b\x57\xdf\xd7\x3a\x67\x5c\xbf\xba\x7e\xe5\xc5\x11\xea\x97\x65\x6f\x0d\xab\x53\xd0\xb8\xf5\xca\xc6\x8f\x67\x94\x22\x05\x6f\x4d\xaa\x34\xff\x52\xf6\x03\x37\x35\xc1\x05\x33\x02\xf4\x15\xca\x24\x04\x00\x15\x12\x85\xe3\x12\x8e\x58\x6e\x6c\xf8\x9e\x1c\x01\x59\x43\x62\x22\xcb\x1e\xa4\x04\x64\xca\x62\xec\x22\x35\x4e\x7d\xda\xdd\x4f\x95\x7d\x79\xd2\x97\x54\x98\xd1\xa3\xd9\xde\x1d\x9d\xef\xcc\xbe\xf6\xc2\x97\xbd\xb5\x22\x9b\x4f\x7c\xb2\xa8\xda\x95\x69\x96\x38\x3a\xcd\xe2\x88\x89\x8b\x3d\x44\xb8\x88\xb2\xa2\x40\x56\x5c\x5f\xd2\x30\x34\x09\x15\xc4\x2c\x83\x40\x22\x63\xd5\x8f\x78\xc4\x44\x91\x8c\x09\x50\x42\x55\x79\x88\xc3\xf0\x2f\xe1\x58\x77\xd2\xf9\xef\xcc\x29\x0d\x5f\x6c\xf1\x54\xc5\x5c\xb3\x6b\xe6\x9d\x99\x7f\xd9\xac\xcf\xc7\xf5\x5c\x98\xab\xd5\xd5\x9a\xef\xfc\x39\xe1\x44\xa5\x34\xc3\x62\x78\xd3\x8b\xb0\x67\x6b\x1a\x31\x25\x9d\x61\x18\x36\xb2\x23\x85\x0a\x54\x12\x42\x99\x4b\x38\xdb\x4d\x08\x46\x71\x2c\xe9\x8a\x6e\xf9\xa1\xc5\xc1\x14\xbc\xe0\xd7\x98\x1c\xfd\x8f\x8f\xbc\x60\x0c\xfb\xae\xdc\x4b\x6b\x4a\xf5\x29\x6f\xcf\x7c\x7c\x77\x2e\x34\x7a\x73\x97\x5b\xbb\x07\x77\x3e\xd3\x23\xfb\xfa\xb7\x29\x1d\x44\x08\x0d\xc5\xd4\x29\x1f\xf2\x9e\xc0\x2a\x26\x85\xa0\x29\x43\x3b\x70\x58\x4d\x4c\xe8\xc8\x03\x11\x12\x39\x9d\x75\x79\x16\xbb\x21\x52\x1d\x21\xd2\x82\x2c\x64\x7b\x07\x97\x2c\xd3\xa2\xe6\x8c\xa5\x3f\x94\xdb\xdb\xef\xcd\x35\xd7\x56\x9a\x95\x82\xad\x3f\x3d\x6d\x32\xb7\x86\x6c\xdf\xdb\x4d\xaa\x96\x7d\xed\x9f\x94\xd9\x9d\xd1\x1c\x07\xd9\xc4\xa2\x4c\x81\x20\x64\xeb\xae\xe4\xc8\x9a\x6d\xd1\x31\x93\xd0\x08\xf3\x12\xc7\x5a\x2a\xc3\x1b\xb4\x4d\x05\x20\x06\x11\x65\x7b\x59\x91\x5c\x0a\x17\x5e\xfc\x4a\x91\xee\xe3\x96\x5d\x5f\x3e\xed\xcc\xc1\xd6\x79\x76\xee\xbe\xd9\x67\xc5\xf4\x83\x96\x54\xfa\xdd\x8d\xdd\x94\x71\x93\x1a\x3d\xfc\xeb\xfc\x5a\x85\xba\x05\xf2\xb0\x9d\xea\xb7\x0b\xc6\x8d\x6a\x7a\xbc\x5d\xc6\xc6\x0b\xcb\xe7\xe7\x9c\xfe\xc9\xef\x79\x4e\x3e\xeb\xe7\x3f\xd3\xea\xe1\x1b\xb1\x7e\x44\x6a\x3b\xed\x7c\xf8\xc5\x90\xe9\x7f\x7e\x7f\xf0\x60\xa9\xdf\x2f\x7c\xab\x35\x78\x90\xf1\xd4\xb7\xdf\x4f\x58\x7d\x73\xf1\xd9\xbb\xe9\xfd\x92\x89\x17\x31\x21\xcb\x09\x1a\x2b\x01\xe8\x7b\x46\x62\xd3\x9c\xee\x40\x16\xf9\x2a\xc5\x86\xb2\x14\x7b\x90\x44\x16\xe5\xd1\x08\x38\x90\xf8\x2e\xd1\x9d\xd4\x14\xbc\x5a\x0d\x2a\x64\x0a\xef\xad\xda\xd5\xe4\xd5\x8b\x5f\xe7\xc8\x37\x60\xb5\xf6\xd8\xc7\x5c\x9f\xea\xab\xaf\x67\x6c\xa9\xd2\xb2\x6f\xdb\xcf\x4b\xa6\xf9\x65\xd5\x75\x89\x11\xba\xa2\xa3\x52\xb4\x82\x94\xd0\x62\x0c\x91\xc6\x4c\xc0\xcb\x92\x11\x61\x49\x96\x01\xa7\x99\x22\x96\xb1\xc6\x0a\xaa\x46\x60\x42\x52\xc8\x65\xbc\x51\xe8\x78\xf3\x8b\x43\xb7\x74\x98\xb8\xa8\x6a\xf4\xf9\x94\xdd\xa5\xfb\xf5\x39\xfb\x8a\x3d\xa8\x58\xf5\x8d\x3f\xae\xdd\x70\xed\x95\x51\xa7\xd2\x5b\x0b\x10\x0f\xcc\x40\xe0\x4c\xcf\xe2\x19\x85\xf8\xa6\x4b\x08\x2b\x5b\x9c\xae\x5a\x92\x1e\x3a\x9a\xa3\xca\x40\x25\x96\xe0\x09\x26\x4b\x01\xc9\xa5\x99\x87\x14\x9c\xfe\xd5\x9d\xac\x66\xf9\x3c\xa6\xd5\xc7\x4b\xda\x3e\xd7\x8f\x2c\xc8\x31\xa3\x66\xa3\x09\xab\x5f\x5b\x92\xa7\xca\x94\x9f\x6f\x56\x7c\x79\x42\xd5\xea\x3b\x1f\xba\x3d\x14\x78\x6f\x58\x01\xe6\xc0\x37\xbb\xab\xe4\x2c\x56\xf3\xfa\xb3\x75\xaf\x3c\xbd\xa3\x6e\xae\x86\x4d\x1b\x97\xbe\x3f\xbd\x64\xab\x5d\x95\x9b\xa7\xf9\xae\x86\x39\x4f\xc3\x1a\x8e\x20\xc7\x00\x91\x37\x38\x91\xf1\x42\x0e\x4a\x90\x97\x90\xab\x05\x92\x29\x88\x91\xa0\xf1\xba\xce\xbb\x9e\xca\x98\x01\xc7\x7a\xc2\xa3\xad\x45\x49\x6e\x41\xce\xee\xb5\x5a\x5c\x7d\xb2\xbb\x7d\x6b\xd4\xcd\xb9\x7f\x32\xc5\xcf\xf7\xa8\x3c\x63\xe8\xa9\x8f\x46\xad\x73\xbe\xcb\xbf\x28\xcd\xdb\x09\xa9\xd8\x56\x62\x96\xf2\x34\xc7\xa4\x39\x07\x70\x0c\x6d\x26\xb2\x0b\x15\x46\x08\x63\xc4\x13\x4d\xa0\x43\x36\x51\x79\x57\x36\x02\x68\x6b\x8a\x1a\xa2\x14\x37\x62\x7d\x8a\x74\xbc\xf8\xef\x63\x06\xc0\x64\xfd\xd4\x8c\xb1\x5d\x9b\xaf\xbf\xf2\xe4\xcd\xc5\x5c\x95\x2d\x1b\x8b\x7f\xba\x80\xae\xfb\xe7\x9d\x34\x8b\xf0\xc7\x00\x32\xc4\xf2\x45\xce\x90\x35\x8f\xf1\x4d\x16\xd2\x92\x69\xb0\x3e\x27\x71\x51\xc0\x27\x14\x23\x71\x44\xd5\x4c\x4c\x31\x94\x87\x34\x43\x4e\x9c\xd4\x2c\x9e\x82\x6f\x55\x7a\x7e\x3d\xbc\x55\x70\xd0\xee\xad\xed\x7e\xac\xf5\x6e\xdd\xf2\xb7\xdd\x8f\xba\x35\xdd\x8b\xce\xdc\x39\x78\xaf\xcf\x81\xd3\x13\xd2\x7b\xd2\xc4\x66\x15\x2d\xd1\x42\x97\xd3\x19\xde\x31\x19\x21\xc0\x21\xc0\x34\x10\x55\x93\x17\x63\x5e\xd4\x1d\x5b\xd5\x88\x44\x05\xa1\x8c\x34\x18\x99\x24\x15\xeb\xbe\x5a\xd5\xc9\xd7\x97\x4f\xdc\x92\xa3\xf7\xce\x6f\x96\x3d\x3f\x77\xcf\x67\x5d\xbe\x4d\x16\xe8\x9d\x57\x6c\xfe\xb8\xe1\xb4\xe9\xf9\xd7\x8e\xce\xbe\xc9\xa9\x05\x63\xa0\x04\x4c\x49\x57\x4d\x9b\x0f\x91\xc2\x3b\xd8\x32\x0d\x83\x23\x1e\x91\x54\x53\xa2\x4d\x53\xb0\x1c\x90\x28\x1e\x67\x58\x8e\x68\x45\x52\xec\xaa\xe8\xd1\x3c\x53\xaf\x53\x9b\x01\x7a\xd1\xbf\xc6\x5d\xbe\xf4\xcc\x80\x1a\x8f\x75\x9c\x5c\xc7\xda\xd7\xb4\xfa\x53\x4b\xbc\x85\x0f\x8a\x1a\x07\x87\x0c\x68\x9c\x66\x44\xbd\x48\xd8\xc0\x03\x74\x10\x58\x32\x91\x78\xa4\x25\x3e\x36\x23\x9d\x4a\x04\x45\x67\x85\xc8\x03\x06\x07\x14\x1d\x89\x22\x97\x10\xe8\x04\x9e\x2d\x64\x81\xfb\x9c\xf3\x64\xde\x42\x1f\x75\x1b\xbe\x7d\xd9\xc1\xf0\xf4\x86\xe7\x46\x34\x7c\xfd\x85\x07\xaf\x2c\x7d\x50\xaa\xf8\xdc\xc7\x59\xfe\xee\xc2\x33\xd9\xe7\x95\xa4\x34\xdb\x97\x0d\x10\xab\x42\xa0\x4b\x09\xc5\xfa\x21\xe3\xc6\xd8\x4f\xdc\x40\x61\x74\x2d\x49\x6c\x35\x32\x10\xf0\x6d\x55\x17\x6d\x1a\x01\xe4\xdb\xbc\xe8\x04\xa9\x0b\xd1\x5b\x9d\xc6\x7e\xab\x3e\x3e\x63\xf8\x4a\xfc\xe3\xb6\x79\xd7\xc5\xaa\x3b\x9a\xf7\xcd\x75\x78\x4a\xa5\x91\x9f\xcc\xc6\xb5\xbf\x96\x2e\x66\xbf\x55\x4e\xd9\x52\xc8\x01\xf4\x1d\xd5\xc2\x9c\xab\xb2\x88\xd8\x11\xe7\x49\x9c\xa5\x20\x9e\xa5\xcc\x38\x60\x55\xc9\xe0\x2c\xd5\x55\x63\x55\x70\x05\x29\x8e\x24\xc6\xff\x17\xbd\xc9\xff\x33\x79\x50\xd1\xaf\x57\x14\x6f\x7c\xe2\xe6\xa0\x59\x39\xf5\xab\x33\x5e\x9d\xb4\x2c\x3c\xfa\x66\x8b\x66\x2b\xce\xb5\x75\x6a\x2c\x1d\xfc\x78\xce\xf7\xd2\x2c\xcd\x43\x13\xde\xd4\x3d\x57\x51\x2d\x2c\xa0\xd8\x71\x02\xe4\x06\xba\x9e\x98\x40\xd1\x15\x86\x78\xb2\x2d\x04\x5a\x18\x07\x01\x4d\x01\xcb\x88\x23\x9a\xff\x9b\x0e\xf3\x6e\xde\xff\x6e\xc2\x99\x99\x51\xbc\x72\x8e\xff\xbf\x0c\xe3\x6f\x7f\xaa\x36\xfd\xe8\x8c\x11\x7d\xc5\xc1\x33\x36\x14\x53\xde\xf9\xab\xec\x8a\xb7\xf6\xf6\x31\xe4\x7e\x47\x9e\xff\xbe\xfb\x1b\x05\xca\xfd\x38\x32\xfb\xc4\x92\xd4\xda\x76\xbe\x10\xd0\x84\x11\x04\xde\x53\x2c\xcd\xe7\x88\x25\xf9\xb6\x88\x99\x08\x70\x8a\x0a\x39\xda\x56\xfc\x88\xc8\xa2\x83\x64\x83\x98\x66\x14\xd3\x31\x48\xfd\xb0\x92\x6f\x67\x81\x9e\x35\x17\x7c\xef\xd5\xad\x32\xe3\x6e\xa1\xd1\x1b\x3e\xbb\x34\x69\xe5\xa0\x77\xea\x1d\x17\xdb\x3d\xd9\x65\x35\x7d\xe4\x70\xf6\x41\x9f\xa9\xc3\x40\x0d\x11\x52\x22\x55\x63\x5c\x43\xf5\x23\x51\x0b\xd8\x88\x55\xc5\xd8\xa0\xf9\x58\x50\x79\x5d\x8a\x6c\x29\xa6\x64\x45\x73\x3c\x37\x46\xba\x12\x1a\x59\xf4\x63\xa7\xae\xe5\x58\x7b\x28\xb4\x5e\xef\x96\xb0\x6d\x4e\xf7\xac\x5c\xee\x9b\xc9\x9f\x56\xae\xfe\xa0\xe3\xb3\x31\x68\xd3\x6b\xd1\x13\xca\xaa\x34\x9b\xad\xc4\xa6\x69\xb3\xd8\xe4\x11\xa1\x44\x64\xa9\x38\x82\x52\xe8\xb9\x8a\x0c\x9d\x44\x8c\x25\x4a\x0d\x7d\x14\x71\x1e\x1f\xc6\xaa\xa4\x08\x3a\x4d\xa2\x47\xf3\xe4\x9f\xdd\xe6\xce\x39\xf7\x79\x33\x0d\x7d\x3f\x3c\x57\xbb\x6e\x15\xde\x65\x8e\x8f\xce\x57\xbf\xfa\xe6\x25\x23\x27\xef\x3b\x75\x65\xc3\x80\xec\x2b\xc5\xa6\x9c\x82\xa8\xa1\x1f\x19\x2e\x9d\x18\x40\x10\x2d\xc6\x65\x03\xc9\xd7\x03\x27\x16\x3c\x55\x55\x44\x9b\x18\x8c\x18\x46\x81\x4a\x28\x53\x55\x88\x4c\x51\xd0\x27\x8f\x22\xb6\xff\xd3\xf0\x2d\xb3\x65\xd5\xca\x95\x1f\xc6\x61\xec\xbc\xfd\xf6\xe5\x69\x75\x86\x1e\xee\xfd\xf6\x83\xd9\xaf\xfe\xf9\x60\x64\xc3\xca\x9f\x95\x28\x71\xa3\xde\x80\x85\xc2\xb5\xc9\x5f\xe7\x2a\x56\x22\xbd\xdf\x45\x31\x28\xcd\x8c\xe8\x10\xb9\x38\x11\x0d\x5a\x33\xbd\x44\x52\x09\x47\x41\x0b\x2a\x6e\x60\x58\x36\x95\xd8\xb4\xa7\x1b\x58\x08\x18\x93\x8e\x1c\x2e\x2b\x70\xde\xa5\x8c\x2e\x47\x66\x3f\x33\xa7\xdc\x07\xf4\x9b\xb9\x7f\x28\xdc\x6e\x49\xbe\xd6\x1c\xf8\xee\xd6\xd2\x5f\x92\xf5\xc9\xe5\x79\xdb\xe9\x2e\xe9\x6d\x70\x22\xc5\x8d\x1c\xd7\x10\x50\x24\x9b\x11\xa4\x74\x23\x96\x34\x4f\x13\x02\x05\x0a\xb6\x1a\x05\x18\x07\x24\x08\x3d\x84\xcd\x88\x22\x1c\xed\x86\xa6\x91\x85\x92\xfe\xeb\x3f\x96\xdd\xd7\xfa\xcb\xc1\x13\x87\xed\xd9\x91\xab\x56\x85\xea\xbd\x5f\x7f\x6f\xfb\xaf\x2f\xfe\x70\x26\xd8\xde\x7d\xea\x3b\x6f\x75\x6a\xde\x35\xcd\xe0\x3c\xc5\x33\x35\x53\x02\x9c\x80\x3c\xd3\xb7\x89\x6c\x42\xc3\x0b\x90\x4f\x3b\x34\x13\xc8\xa2\x44\x79\x94\xed\x86\x1c\x6b\x68\x4e\x94\x44\xb6\x11\xfc\x73\xaa\xfb\x68\xce\xe9\xf5\xfa\x93\x2d\x5b\xbc\x92\x54\xdc\x5b\x7e\xda\x87\x4f\x96\x1a\x75\x7b\xfc\x53\x77\xfa\xb6\x8f\x0a\x3d\x87\xc7\xf4\x97\xee\x9e\x19\xb0\x24\xcd\xf3\x40\x62\xdb\x4a\xa0\xdb\x61\x20\x48\x86\xeb\x22\x92\xe0\x98\x12\x55\x2e\x36\x3d\x0a\x2b\x9a\x6f\x30\x09\xad\x33\x8c\xc7\xa8\x0a\xd2\x31\xb4\x41\x82\x73\xfc\xfb\x5a\x98\xff\x34\xee\xcc\xcc\x98\x36\x34\x47\x8e\x87\xd7\xc2\xf4\xd4\x6f\xc6\x0f\xce\xd5\xf2\x0b\x6e\x1e\xfb\xdc\xa0\xb1\x17\x9b\x8d\x18\xa7\xac\x1d\x3c\x29\xf3\xf0\x17\x6b\xae\x0e\x9e\xf6\xed\xa4\xec\xab\x86\xa6\x6c\xe5\x2c\x49\x45\xba\xca\x2b\x2e\x02\xb6\x4e\xb9\xb2\xe2\xb8\x94\x85\x03\x2d\xb0\x10\x21\xa1\x9c\x40\x80\x01\xf4\xb5\xd8\x8b\xa4\x88\x31\x2c\x93\x81\x4e\x16\x23\xc4\xdb\x0b\xc7\xd5\xbf\x70\xe0\xb7\xfe\xad\x73\xfe\x51\xa1\xc9\x1b\xfb\xf6\x5f\x68\xe0\x3f\x3b\x77\xe8\x9c\x91\x6e\x71\xb5\x7e\x8d\x11\x53\xd2\x1b\x0a\xb4\x0b\x0d\x02\x59\x96\xb2\xb5\xd0\x8a\x59\x2a\x60\x30\xa0\xb9\x98\x86\x94\x04\x4c\x0d\x6b\x89\x4a\x53\x8e\x0b\x8d\xc0\xf2\x0c\x8a\xf6\x15\x41\xcb\x62\x84\x98\x77\xdf\xb6\xa3\xd2\xf9\xce\x19\x25\x67\xfe\xec\x96\x9c\x19\xbf\x75\xb2\xcb\x73\xad\x1a\x1f\xab\xf8\xfe\xb8\x02\x17\x3b\x27\x3d\xd5\xec\x2f\x69\x4d\xbd\x3d\xd2\xe1\x81\xa3\x26\xa1\x0f\x0c\x9e\x68\x5a\xc8\x62\x5b\x57\x75\x11\x21\x27\x60\xc2\x98\x13\x59\x9d\x84\xac\x29\x30\x26\x25\x53\x86\x21\xc8\x58\xa0\x53\x9f\xf6\xd4\x01\x45\x2f\xcf\xb9\xf1\x4d\x4d\x75\x70\xdf\xaf\xab\x1f\x52\xfb\x2d\xc9\x7b\x6c\x07\xea\xbc\xfb\xf9\x89\x62\xb7\x0d\x4b\x2f\x75\xcf\xfe\x5c\x21\xf5\xcd\x0a\x47\x0a\x0f\x13\x35\x44\x9e\xee\x08\xc8\x66\x15\x42\x12\xd6\x73\x08\xc0\x0a\x92\x28\x4a\x55\x01\xc1\xb2\xc8\x7b\x40\xf2\x15\x5a\x08\x4c\x28\xa4\x3e\xed\x07\xb9\x1b\xf7\x3f\x6c\x6c\x38\x09\x0e\xbf\x3a\xad\x57\xe9\x9a\xd5\xed\x82\x43\xd7\xff\x72\xeb\xa7\xa1\x3d\xef\x5f\xe3\xea\x8d\x9a\xfe\x51\x7a\x9b\x1d\xd3\xd7\x28\xc3\x70\x74\x60\x33\x94\xa2\x46\x04\x29\x88\xe3\x79\x16\xc9\x06\xa6\x69\x62\x61\x22\xb9\xb6\x09\x03\x51\x60\x78\x56\xb7\x59\x20\x02\xf3\xff\x12\xcf\xff\x82\x0a\xff\xd3\x48\x2b\x33\x63\xea\x13\x2d\xfe\x0d\x54\xd8\xee\xf3\x16\x13\xbe\x9d\xe5\x4f\xe7\xf5\x16\xdd\xcd\x1f\x6e\x09\xbd\x93\x1c\x5b\x8e\x84\x75\xb6\xfc\x50\x6c\xcc\xbc\x86\xd3\x46\x76\x4b\x6f\x31\x13\x1d\x1b\x41\x22\x30\xae\x2b\x89\x9e\x0b\x83\x04\x58\x5a\x22\x71\x3c\x65\x92\x38\x96\xb9\x98\xe2\x90\xe2\x72\x9a\x84\x0d\x33\x34\x08\xe5\x98\x7a\x16\x37\x9b\x33\x87\x66\xec\xd9\xc9\xb4\xae\xb5\x75\x74\xc7\x53\x9f\xd6\x0f\xaf\x1c\x2a\x3a\xe2\xe5\xe5\x7f\xe5\xb4\xa6\x3e\xd3\xe5\xfc\x8a\x81\x5b\xd2\x2b\x26\x0d\x09\xf0\x48\x42\x34\xd9\x93\x29\xa4\x27\xae\x1a\xea\x5c\x6c\x68\x8a\x15\x03\xce\x51\x38\x3a\x56\x1d\x21\xf0\x39\xc9\x8b\xe4\x90\x71\x55\xca\xf9\x9f\xbd\x8a\x8f\x56\x85\x4b\xef\xee\x1b\xa1\x4c\xbb\xfd\xf4\x37\x1f\x6d\x6c\xdb\xf0\xd7\x09\xbf\xac\x5d\xf3\xf4\x69\xe4\xbd\xd7\xfe\x66\xbf\x92\x63\xd7\x0e\xa8\x98\xe6\x21\x83\x19\xfa\xb1\x13\x52\xac\x6e\x3b\x80\xb8\xbc\xcf\x4a\x82\x02\x80\x45\x4b\xaa\x07\x34\x26\x49\x80\x2f\x3b\x0e\xc4\x5c\x22\x63\xd1\x0f\x63\x9b\xa3\x70\xea\x50\x88\x2f\x97\xba\x0d\xde\x6e\xd3\x75\x27\xca\xd3\xac\x6a\xa9\x51\x37\x27\xb5\xd8\x51\xf9\xa9\xf3\xaf\xb7\x9f\xf5\x7a\x8e\x9e\xc3\x76\x6e\xa9\x92\xde\x62\x86\x2c\xe8\x29\x52\xa0\x44\x1e\x2b\x44\xae\x6b\xc5\x82\x12\x5b\x40\x4e\x80\x6e\xb2\x3c\x61\x2c\x89\x31\x3c\xc0\x78\xa6\x2a\xd3\x04\x89\x21\xcf\xc2\xbf\x17\x3b\xad\xcc\xf7\xdf\xcd\x6b\x33\x5b\xe6\xae\x5c\x68\xf0\x43\xed\x36\xbc\x5f\xbb\x3d\x5d\xed\x7c\xc5\x9e\x2d\x47\x3f\x61\x1d\x7b\x6b\x10\x5c\x5c\xb3\x49\xf5\xe9\x8b\x73\x9d\xdd\xdb\x76\xc0\x39\xeb\xf7\x85\xe9\xfd\x27\x29\x55\x0e\x62\x44\xc9\x90\x00\xc3\xa1\x79\x8e\x81\x61\x10\x51\xbc\xce\x98\xbe\xc1\xd9\x9c\x00\x7c\x8e\xa7\xa5\x84\x0b\x5d\x27\xc0\xb1\x22\x48\x89\x98\xe2\x65\xb5\xf4\x92\xca\xbd\x16\xcd\x79\xb6\xc6\xa5\x8a\xa7\xc7\xf6\xf6\x0a\x31\x07\x37\xb6\x1f\x70\xb0\xdf\xd3\x77\x4e\xed\xeb\xe3\x9e\xfd\xce\x4b\xb3\x2c\x11\x1d\x4a\xbc\xac\xa2\xc4\xd2\x38\x55\x80\x12\xad\xd9\x9a\xed\x7a\xa6\xa2\xc3\xd8\x32\xb8\x44\x73\x1c\x1c\x90\x18\xd9\x1c\xa3\x40\xd1\x0b\x88\x9b\x05\xf9\xf7\x99\x57\x6a\x5a\x83\x37\x89\x6f\x3e\x97\x71\x6f\xda\xaf\x3d\x7e\x91\xa7\x3e\xd3\xab\x30\xde\x2c\xfc\x54\xe8\xdd\x72\x9f\xbe\x30\x6f\x6d\xce\x34\x47\x81\xe7\x0b\xaa\xad\x9b\xaa\x24\x89\x8e\xaf\xc0\x48\xc1\x71\x10\x60\xc9\x89\x20\x1b\xb9\x08\xda\x82\x4f\x43\x12\xc6\x89\x6d\xfb\x18\xa8\x42\x44\x65\x01\x3e\x29\x7f\xad\xd1\xf4\xad\xdd\xce\xb5\x1a\x34\xad\xdf\xd2\x33\x2d\x6f\x1e\xdb\x98\xc3\x5c\xd3\x3d\xa4\xaa\xbc\xac\xd5\x6a\xdc\xd2\x5b\x97\x66\xf8\x15\xcd\x58\x96\x2d\x63\x18\xba\xb6\xc2\xcb\x3e\x91\x1d\x06\xca\x96\x23\x62\x96\x86\x26\x86\x8a\x26\x1b\x48\xe7\x69\x55\x90\x5c\x91\x66\xb4\xd8\xfd\x27\xac\xf0\x51\xb3\x9b\xec\xfd\xf3\xfd\x9b\xee\xb5\xce\x75\x2e\xac\x1a\x72\xfc\x89\xaf\xae\x55\x6c\xd7\xb5\x7c\xf1\x01\xdf\xbd\xd0\xa1\xf1\xe6\xb8\x16\x9a\x93\xde\xf5\x66\x7c\x12\xab\xbc\x83\x19\x4d\x66\x63\xca\x65\x24\x81\x05\x6a\x18\x47\xa2\x18\x42\x15\xd0\x94\x60\x59\x42\xe2\xca\x49\x62\xb9\xa6\x61\xdb\x3a\xcd\x78\xce\xdf\x0d\xf4\xff\x76\xa2\xff\x69\x3a\x9e\x99\x91\xab\xcd\x13\x39\x1f\xee\x44\x67\x6f\x2d\xab\xff\xde\x78\x72\x85\xaf\x37\xbe\xad\xbd\xf7\x5a\xe6\xe8\xa2\x2d\xae\xec\xda\x70\x73\x3c\xbb\xf0\xb1\x3f\x03\xf8\x5b\xed\xf4\x6a\x7d\x43\x3a\x31\x7d\x64\xf8\xaa\x2d\xbb\x7c\xcc\xf3\x74\x04\x4d\x03\x51\xbe\x2a\x49\x3a\x4c\x12\x49\x61\x4d\x33\x62\x88\x0d\x20\x30\x2c\x5f\x08\x05\x48\x65\xc1\x47\x1d\x58\xbd\xc3\x76\xb9\xfa\xaa\xf1\x17\x1a\xb5\xad\x6d\x9e\xaa\x37\x7c\xde\xfc\x71\x3f\x9d\xba\xfc\x4e\xe9\x06\x77\x86\xe6\xfd\x62\x0d\xb3\x2f\xcd\x17\x66\xa0\xc5\x16\xe2\x4d\x4d\x35\x63\x33\xe4\x14\x83\x32\x9c\x24\x86\x7c\x82\xb1\xad\x4a\xba\x4f\x21\x3f\x91\xdc\x88\x8d\xb0\x87\x78\xc8\xc9\x86\x9b\x45\x27\x9a\xab\xf5\xc5\xef\x67\x8f\xac\x77\x61\x67\xd5\x9e\xdf\xfd\xd0\xfc\xa9\x3f\xd7\x5e\x2a\x97\xef\x8c\xae\xb2\x8b\xf7\xfd\x5a\xf2\x89\x79\x7d\xd3\x4b\xa3\x85\x5a\xe2\xf2\xb2\x40\x61\x27\x96\x22\x8a\x57\x1c\x51\x60\x7c\x29\xf2\x24\x1a\xb0\x16\x92\x38\xc7\xe1\x6d\x9a\xf3\x58\x43\x52\x1c\x3e\x20\x06\x05\x92\x2c\x94\xba\xf4\x9d\x21\x3d\x8f\x2a\xb9\x7e\xe7\xcb\xe0\x03\x27\xd7\xcf\xcb\xc6\xef\xdd\x90\xb3\xf3\x7c\xf0\xc4\xdd\x8e\x35\x7f\x1e\xbf\x6a\x44\x9e\xf4\x76\x0d\x2e\xa5\x63\x91\x47\x09\x61\x02\xac\x01\xd7\xf6\x04\x8f\x77\x7d\x00\x09\x01\x89\x1e\x05\x41\x44\x09\x98\x10\x13\x42\x29\x14\x3c\xdf\xf3\xa5\x24\x8b\xbb\xe4\xfe\x8e\xfe\x6f\x55\x3f\x1d\x3d\x38\xef\x98\x31\x6b\xf0\x3b\x93\xdb\x4e\x99\xdd\x93\xd5\x9b\xa0\x3c\xb3\x7e\x6d\x5a\xfe\x3a\xf3\x54\x81\xf4\xf6\x68\x61\x60\x58\xbe\x0c\x39\x89\xc6\x3a\x8a\x05\x9f\x16\x62\xd1\xa3\x03\x95\xb6\x23\x4c\x11\x29\x64\x14\xe8\x71\x96\xaf\xa9\x89\x6d\x2b\x20\xd1\x90\xfb\x37\xc1\xf4\x50\xeb\x7f\x5a\xbc\xfa\x97\x5d\xef\x17\xdf\xdc\x10\xbf\x75\x99\x26\x47\xd7\xe4\x5b\x7e\x6f\xfc\x5b\xd5\xed\xde\x9b\x4e\x5c\x2e\x54\xfa\xf4\x85\x93\xe5\xf3\x65\x66\x3c\x38\xf2\x60\xc9\xff\xc7\xf4\xff\xfd\x94\x51\xb8\xbb\xf1\xc6\xd6\xda\x8d\xd6\xdf\xca\xb7\x30\xd3\x91\x33\x8b\x17\x3c\xf3\xf6\xef\x47\xb6\x0e\xdf\x70\xee\xca\x91\x81\xc3\x33\x3b\x28\xe9\x75\x2a\x47\x61\xc2\x40\x74\x12\x5b\xc5\xa1\x65\x61\x36\xa4\x64\x56\x52\x2d\x83\x78\x3c\xa0\xc2\x50\x08\x65\xcd\x16\x00\xa2\x08\x03\xa0\xcd\x48\x86\x88\x94\x47\x0b\xf0\x57\xaf\xb5\x94\x8d\xad\x5d\xdf\x10\x6b\x1d\xfc\xf5\x5e\x6d\xea\xb9\x2e\xe5\x7e\xad\xd4\x63\x4a\xdb\x05\x3f\x66\x74\xbf\x5f\xa7\xea\xc6\xec\xcb\x64\xa5\x74\xa8\xc0\x30\x41\x44\x24\x8d\x05\xb6\x8f\x64\x91\xb7\x51\x44\x13\x6c\xcb\x16\x72\x22\x43\x92\x65\x8c\x5d\x96\x45\x0c\x32\x0c\xca\x95\x19\x45\xc5\x5a\x0a\x91\xbd\xef\x96\x17\x59\x99\x27\x63\x70\xe6\xeb\xc5\x1e\x5b\xfb\xbc\x26\x6f\xfc\x68\xc3\x5f\x75\x83\xcf\xf4\xe7\xa2\x77\x3b\x16\x29\xbc\x66\x57\xf6\x01\x1d\xa9\x51\xe6\x8e\x4b\x90\x03\x45\xc7\xf6\x6d\x87\xe7\xb4\x40\x35\x3c\x99\x16\x58\xd1\x16\x68\x17\x32\x2c\xe7\x22\x55\xd5\x2c\x8f\x37\x09\x10\x12\x13\x0a\x42\x16\xbc\x96\x45\x57\xb6\xbc\x7a\x6c\xd0\x2e\xbe\xc4\xc4\x6d\xb5\xff\x98\x76\xe4\x8f\x25\xbb\xf9\xaf\xea\x74\xeb\x31\x30\x03\x95\xdd\x7a\xe3\xd3\xda\xe9\xed\xce\xa0\x4b\x31\xbe\x69\x49\x02\xc5\x87\x10\x0b\x1e\x17\xa8\x06\x06\x80\xd0\x4c\x48\x05\x31\x8e\x42\x95\x92\x30\xb1\x74\x9b\x57\x81\xcd\x24\xaa\x8e\x13\x3e\xf5\xf3\x5c\xa9\xfd\x5d\x2a\x2f\x9b\x28\x5e\xfb\xbe\x48\x9e\x06\xf3\xee\x8e\x7b\xd5\x6f\xfd\xa0\xe8\xb7\x60\xf0\xad\x86\x73\x36\x3b\x75\xb6\xb7\x3a\x9e\x66\x01\x61\x31\x8e\x0c\x45\x10\x5c\x0b\x26\x89\x4b\x4c\x8f\x35\xbc\x48\xd1\x78\x68\x59\x0c\x08\xa0\xab\x99\x8e\xee\x68\x2a\x4a\x18\xc1\x34\x95\x48\xb5\x81\xfc\xe8\x0c\xb7\x53\x58\x20\x30\x7f\xb9\x5f\xfa\x46\xbe\x9e\x23\x1e\x2c\x9a\x79\xe2\xcf\x07\x75\xfa\x4c\xec\x74\x51\xf8\xf8\xd4\x2f\xca\xf6\x3f\xe6\x65\x9f\xf0\x91\x5a\xf4\x4a\x90\x14\x3a\xe0\xf8\x7f\xdc\x72\x01\xa1\x50\x24\xb1\xd0\x02\x61\x18\x02\x1e\x73\x88\x17\x3d\x9d\x09\x75\x91\x09\x20\x43\x27\x7a\xcc\xe8\x3c\xcf\x3e\xea\xd3\x93\xbf\x21\x2f\x58\x2f\x8c\xb0\x2b\xaf\x5a\xb8\xb0\x47\xc7\xf7\xc3\x1d\xdd\x0e\x28\xe5\xb7\xad\x00\x57\xc2\x25\xc7\xdf\x68\x3c\xfd\xe5\x34\x4b\xda\x0a\x49\xe8\x18\x88\x32\x65\x22\x5b\x3c\x90\x6d\xcd\xd7\x59\xc3\x8b\x69\x05\x41\x2d\x31\x35\x11\x27\x0a\x0f\x23\x11\xba\x0c\x4b\x4c\x46\xd3\x00\x49\x9d\xd7\xaf\x8b\xbb\x5a\xfe\x66\x6c\xdb\xfb\xc2\xed\xcb\x85\x57\x15\x1a\x41\x5f\xf9\x7c\xf9\xf9\xf3\xbf\x95\x1a\xd0\x6c\xc1\xec\x5e\xf9\x06\x9e\x4b\x2f\x74\x06\xfa\x58\x52\x4d\x1e\xca\x82\xee\x8a\x32\xe0\x2c\xdf\x10\x1c\x22\x31\x86\x11\x70\x96\x44\x41\x3d\xb4\xb1\xe7\xeb\x7c\xec\x99\x5c\x44\x68\x3a\x00\x9a\x90\x05\x74\x66\x42\xf9\xa2\xbd\x6e\xb7\x15\x9b\xd5\x38\xd7\xf9\x99\xa4\xe5\x17\x23\x7b\xbd\xf1\xc9\xa0\x9b\x93\x57\xb7\xb8\x5f\xb2\x70\x9e\x8a\xaf\x1d\xcd\xfd\xd0\xb5\xea\x9d\xe0\x6a\x9e\xbb\xf3\xae\x8c\xd8\x1f\x6f\x6f\x39\xb6\x5c\xe5\x9e\x4d\xc7\xf8\xdc\xdc\xba\xf4\xb2\x85\x23\x83\xdf\xb6\x9f\xde\xd1\x30\xbd\xdf\x86\x30\x41\x62\x22\x2e\x8a\xa8\x90\x58\x02\x2f\x5a\x18\x31\xb1\x6a\x51\x4a\xc4\x68\x0e\xab\xe9\xd0\xf1\x24\x56\x14\xb0\xe3\xbb\xc4\x52\x15\x85\xd5\xc1\xa3\xee\x34\xb6\xf0\xf0\xc2\x3d\xcf\x8d\xc9\x38\xd0\xf3\xc0\x77\x5d\x67\xf9\xad\x3f\xdc\xb1\x76\xd9\xcc\x6a\xe5\x76\x36\xf9\x88\x7c\x71\x75\xd8\x90\xeb\xe9\xed\x25\xb1\x64\xb8\x32\x87\x4c\xc3\xd7\x02\xdd\x46\xa6\x4a\xa0\x81\x23\x82\x12\x5d\xf5\xb4\x58\xa4\x65\xc6\x8e\x69\x06\x9a\x9c\x6e\x4b\xc4\x80\x16\x11\x40\x6a\x91\xda\x5a\xd2\x17\x0b\x2b\x55\x07\xa3\x46\x6f\x7a\xc6\x1f\xb6\xe1\x9d\xce\x73\x3e\xbc\xdb\x71\x77\xee\x1b\x25\xee\x3d\x3b\x38\xc7\x5f\x17\x97\x3e\x9d\x66\xfc\x73\xc4\x42\xd6\x0b\x55\x68\x3a\xb6\x23\xea\xa1\x17\x4a\x72\x0c\xfc\x84\x45\xb6\x28\x20\x0f\xc9\x3c\x71\x62\xdb\x8e\x75\x51\x72\x03\x0d\xd2\xe6\xbf\x6c\xf8\xfd\x3f\x93\x5f\xfd\xa0\x1d\x9b\x6f\xf7\xc6\xcc\x3f\x1e\x94\xe2\x3a\xe6\x76\x96\xf7\xcb\x7b\xf6\xb7\xb2\x5d\x46\x77\xa9\xf1\xdc\xc2\x8b\xf4\xf4\x0f\x46\xa5\x99\x1e\xa2\xff\xe3\x26\xad\xc4\x24\x60\x31\xe5\x24\x34\x54\x29\x13\xb2\xba\x65\xeb\x2c\xb6\xfd\xc0\x41\x18\x2b\x34\x89\x4c\x14\x88\xae\xc4\xfa\x86\x90\x48\x8f\x9a\xfc\x53\xb8\xf2\xa2\xd4\xec\xb5\xdd\xb7\x0f\x7f\x39\x73\x4f\xab\xca\xda\x8f\xa3\x5a\xcb\x4d\x3f\xda\xb2\x9e\x5a\xb7\xe7\xfc\xed\x03\x8b\x3a\xa7\x19\xda\xa2\x52\x21\x6b\x85\xb6\x11\x05\x4c\xc4\x44\x16\x46\x2c\x70\x1d\x41\x80\x01\x2b\xc2\x80\xf1\x78\x5b\x8a\x42\x9f\xd2\x29\xc7\x21\xbc\x0b\xc5\x40\xa5\xb3\x08\xda\x69\xfd\x4e\x3d\xa8\x2c\x17\x5f\x52\x21\xdf\xc9\xbd\x13\x0f\xc0\x6a\x67\x3b\xd7\xdf\x58\xe2\xb7\x2a\x93\x77\x6c\xed\xe7\xdd\x9e\x79\xe4\xd7\x87\x32\xd3\x5b\xa3\x5f\xdf\xb0\x76\xd9\xdc\x4a\xd5\x72\x57\xf9\xb9\xc2\x9a\x15\xc2\x15\xe5\x87\x4e\x4d\x1f\xef\xd1\x64\x49\xbd\xdf\x78\xf9\xcb\xcc\xec\xab\x3b\xa6\x86\x1c\x59\xd8\x83\x11\xa3\xcb\x3e\x34\x20\xf4\x05\xe0\x26\xac\x11\x18\x89\x13\x27\x94\xe5\xf3\xc4\x96\x05\x87\xf7\x54\x36\x66\x81\x84\x90\x6c\x48\x9e\x94\xba\xda\x0e\x99\x79\x60\xe1\x84\x86\x57\xac\x66\xdd\x4b\x55\x7a\x70\x77\x56\x81\x79\xc6\x77\xb5\xc3\x0f\xb6\x8d\xdf\xfa\x6c\xdc\xeb\xd3\x1e\x17\xb3\x3f\xa7\x4a\x99\x6b\x94\x98\x87\x6c\x62\x19\x9a\xe6\x78\x1a\x4e\x4c\xdb\x93\x84\xc0\x8c\x38\x37\xb0\x39\x53\x17\x02\x23\x76\x9d\x98\x26\x8c\x11\xe8\x8e\x6b\x88\xaa\xae\x8b\x8f\xe6\x9a\xed\x23\x9e\xd9\xc2\xde\x7f\x71\xd9\xf9\x6b\x6b\x86\xac\x6c\xbf\xe7\xdb\x92\x0a\xcc\x37\x3c\x3e\xd3\xac\xf7\xf6\x46\x4f\x44\x4b\xa7\xa4\x17\xcf\x0f\x09\x0f\x3c\x07\x10\x04\x44\x03\xe2\x18\xb1\x8c\x2c\x26\x90\x4d\x94\x98\xb6\x1c\x95\x21\x2c\xf0\x43\x88\x11\x45\xe9\xaa\xee\xca\x26\xcf\x48\x6a\x8a\xa6\xf7\xfe\xf1\x75\x66\x95\xa7\xc7\xfa\x05\xeb\x6e\x3d\x96\xf7\xed\x8b\x95\xf6\xbd\x54\xfd\xc2\xa7\xe5\x7f\xfe\xf6\x63\x63\xfd\x0f\x9f\xd7\x2b\x92\xe6\x17\x39\x4e\xe6\x78\xcf\x25\x52\x94\x30\xbe\x44\x4c\x3a\xa6\xed\x04\xb9\x9e\x43\x27\x6e\xa2\x05\x94\xad\x69\xc8\xb3\x94\xc0\xf2\x22\xcd\x97\x63\x45\x50\x1f\x42\x7c\xfe\x8b\x73\x54\x2b\xff\x41\xb1\x6f\xea\x0f\x79\x50\xe0\x97\xb3\x15\x72\x7f\xdc\x77\xf0\xf1\xea\x1b\x6a\xe4\x6d\xdc\x1e\x6f\x1f\xf2\xca\xe2\xd7\x0e\xf7\x58\x97\xde\x93\x4e\x02\x0e\xa8\x8e\x14\x33\x09\x41\x76\xc2\x49\x49\x2c\x3a\x62\xe8\x12\x19\x86\x1c\xf1\x75\x1a\xd2\x8c\x09\x4c\x93\xb2\x12\x3b\x09\x45\x68\x04\xff\xb2\xdb\xfa\xff\x4c\x66\x6e\x14\x7b\x7d\x6f\xa7\xa0\xe7\xd3\x65\xde\xba\x30\xef\xa7\xa3\xc1\xc4\xed\xee\xc9\xcc\x41\xaa\x75\xec\xd8\x54\xbf\x4c\xa9\xbe\x33\xd2\xeb\xcf\x7a\x62\xb2\x40\x09\x90\x0c\x51\x4c\x00\xa5\x4b\x34\x10\x43\x5f\xe7\x55\x43\x82\xbc\x4e\x5b\x82\x84\x88\xca\x26\xb2\x07\x28\x6c\xea\x58\xb1\x9d\x14\x1b\xee\xa6\x0d\xe9\x5c\xac\xe1\xe4\xa3\x5b\xaa\xcf\xae\x77\x63\xdd\xd4\x8b\x77\x77\x77\xea\x50\xe3\xf8\xbc\x8c\x25\x17\xfb\x08\xef\x77\xeb\xdd\x73\x44\x9a\x33\xba\x82\x79\x4a\x80\x82\x19\xc5\xba\x98\xb8\xd8\xb6\x2d\xc4\xd8\x0e\x90\x74\x86\xb7\x13\x51\x34\x5d\x51\x55\x80\x6e\xbb\x89\x22\x72\xb1\x20\x8a\xaa\x94\xba\x76\x56\xb4\x0a\xb5\xab\x19\x2c\x7c\x69\x5c\xd5\xa2\x15\xdb\xbe\x51\xa1\xbc\x3f\xf9\xe0\xb2\xf7\x1a\x66\x54\x9b\x79\xe8\xc3\x1f\x37\x36\xb9\xbd\x37\xcd\x90\x23\x15\xda\x1c\x71\xd9\x28\x0a\x81\x27\x62\x4f\x50\x13\x46\x06\x11\x36\x74\x10\x99\x3c\x01\x1a\xf1\xa8\x48\x22\xa1\x26\xc9\xac\xcd\xdb\x94\x10\xa7\xc8\x1c\xe0\xeb\x9b\x93\xeb\x37\xcb\x18\x5b\xbb\x7d\xef\x7d\x39\x07\x15\x76\x67\x9d\xf5\xc6\xcf\xf9\xad\xec\x4f\x42\x91\x61\x2f\x2e\xf8\xa4\x4b\x87\x34\x37\xbd\xae\xeb\x52\xba\x16\x42\x91\x8a\xd4\x84\xc2\x98\x87\x76\x64\x86\x4c\x10\x32\x91\x40\xb1\x16\x63\xb1\x9a\x60\xf8\x81\x2a\x2a\xb2\x1c\x4a\x92\xe3\xa1\x47\x4d\x7e\xfd\x5d\xd0\x76\xd3\xdc\xfd\x1d\x6e\xf7\xf8\x46\xfc\xf1\x52\xd9\x2b\x4d\x8b\xef\x29\xba\x20\xc7\xe8\xeb\xed\x2b\x26\x7d\xa7\x1e\x5a\x73\x2f\xbd\xd3\x2e\x28\xba\xd8\x71\x24\xdf\xb2\x59\x99\x0f\x54\x85\x09\xb4\xd8\x77\x75\x95\x82\x94\x82\x54\x45\x76\x4c\x20\x4b\xaa\xa1\x10\x41\xf2\x2c\xc4\x73\xf6\x3f\xf7\xed\x3c\x7a\xf7\x14\xc0\xb8\x3f\xc1\xae\x7b\xcd\x96\x5f\xef\xd2\xaa\x6c\xfb\x2f\x8b\xed\x5a\x9d\x83\x2f\xd8\x68\xc9\xd8\x11\xa5\x6a\x7f\x37\xbb\xe4\xda\xec\x03\x71\x52\xc3\x9e\x28\x4f\xb7\x43\x49\xd4\x63\xc6\xe3\x05\x42\x74\x11\xdb\x12\xed\x06\x2e\xf2\x83\xc0\xf1\x6c\xc4\xd3\xb1\xec\xc6\x1a\x0d\x55\x41\x17\x60\xe0\x78\x72\x16\x25\x7f\xfa\x73\xcb\xeb\x2e\xd9\x56\x78\xd2\xef\x4d\x86\x34\xbb\x70\xba\x7e\xe9\x11\x6d\xbe\xfb\xb0\xdb\xf2\x0b\x19\xb3\xae\xb7\x2a\x89\xce\x65\x3c\x4c\x62\xed\x3f\xe5\xc9\x62\xfb\x37\xdd\x2d\x5b\xec\xda\xe6\xb7\x5b\x74\x7f\x67\x7a\x73\x6d\xe1\x79\x71\xcd\xf3\xab\x8e\x37\xb8\x5c\xeb\xa7\xde\x9f\xd5\x48\x6f\xd3\x4b\x45\x30\xf6\x74\x03\x61\x64\x09\xa6\xc6\x33\x5c\xac\xf9\x98\xa2\x24\xd1\x54\x44\x87\x26\x09\x6f\x7b\xb6\xc4\xc7\xac\x2d\x9a\x12\x08\x2c\x68\x79\xf0\xd1\x56\xec\xf4\xef\x4a\x66\x49\xe6\x8f\x83\x4f\x5e\x41\x70\xeb\x94\xbb\x75\xe5\x79\x2b\x1a\xcd\xd8\x90\xff\xfd\x85\xe0\x6a\xc9\x03\x0d\xa6\x7d\x9a\xe6\x87\x65\x4f\xe3\x58\x0e\x68\x9c\x2f\xea\x1c\x85\x20\xc5\xbb\x94\xce\xea\x31\x1d\x73\x2e\xe7\xe0\x40\x67\x3c\x10\x27\xae\x66\xd0\x36\x6b\x06\x2e\xe4\x08\x4e\x2d\x8e\x5b\x00\xf6\xde\xbf\x75\xe0\xd8\xa7\xd7\xe7\xde\xfa\x6a\xa1\x15\x2f\x7f\x05\x76\xbf\x7c\x64\xe0\xd7\xe5\x82\x82\x25\x87\x6f\xc8\xdf\x78\x51\xf7\x34\x8b\x88\xda\x32\xe4\x41\x22\x50\xbe\xec\x21\xc7\x0f\x68\x85\x17\x3c\xd3\x56\xa1\x10\x30\x50\xf4\xb9\x90\x40\x57\x46\x08\x28\xb4\x65\x40\x89\x40\x4a\x17\x1e\x3d\x69\x66\xef\xf2\x1b\x0f\x4e\xd6\x38\xf6\x57\x95\x0f\x2f\xfe\xb1\x70\x7a\xb1\x3c\xeb\x77\x8c\x0b\x9e\x3b\x7f\x63\x66\xb2\x72\xf4\x7e\x65\x51\xf6\x17\xb0\xa4\x74\x0e\xd6\x92\x29\x85\xa5\x65\xc4\x88\xae\x40\x27\x2a\x4b\x92\x50\x11\xa5\xd8\x0c\xa1\x11\x25\xb1\x0d\x7c\x45\x0f\xc4\xc4\x26\x92\x02\x18\x13\x01\x94\x64\xb1\xe3\xb1\xd6\xe0\x0f\x5a\x96\x28\x3c\x7a\x5a\xa7\x45\xc3\x3b\x6d\x1f\xf8\x51\xcf\x41\x37\x4a\x5c\xdc\x8b\x8a\x2f\xdf\xfc\x43\xa9\x4b\x5f\xf4\xfb\x76\x68\x9a\x9f\xf4\xec\x38\xb0\xb0\x21\x4b\x0a\x36\x08\x32\xb8\x48\xb0\x75\x99\x11\x35\x35\xd6\x01\x70\x54\xe8\xc4\xac\x1b\xfe\x13\xbd\xc9\x58\xd8\x24\xbc\xe1\x3d\x5a\xf2\x7b\x54\x6c\xf4\x6a\x79\xf7\x97\x03\x3d\xae\xe6\x9b\x75\xf1\xfd\x25\xcf\xe7\x8e\x8b\x0e\xb8\x2d\x94\x9b\x79\xf8\xa5\x7b\x9d\xd7\x6e\x4d\xe8\xf4\x9a\xcc\x7a\x94\x82\x45\x47\x92\xa1\x6d\x48\x16\x14\x95\x80\xf0\xd0\xb5\xfc\x40\x36\x59\x5b\xb0\x45\xc9\xa6\x13\x2f\x70\x61\xe0\x60\xd3\xe2\x68\xd7\xa7\xe8\xd4\x9d\xf7\xb6\x09\x85\x4f\xdd\xa8\xd7\x13\x6d\xfc\xf9\xf8\xf0\x81\x2d\x43\xf4\xac\x53\x6d\x4b\x3b\xfe\xf0\xf4\x45\x67\xc7\x8c\xd9\xfd\x59\xef\xec\x2f\x93\x48\xe9\xd3\x76\xc4\x9a\x12\xb0\x05\x9c\x28\x9e\x68\x78\x02\x4d\x61\xce\xf0\x24\x93\x11\x43\x56\xa5\xa1\xe4\x00\x51\x77\x08\x6f\x50\x09\xb1\x54\x56\x72\x6d\x98\x42\x25\xe4\x68\xd3\x9d\x5d\x87\x0e\xae\x21\x76\x1b\xc7\xae\x3d\x39\x43\xaa\xbc\x77\xfd\x6f\xa7\x8e\x0d\x1e\x5b\xec\xe3\xbf\x16\x6e\x1d\xf4\xd9\x7e\x39\xbd\x6d\x2c\xe3\x04\x8e\xca\xd1\xd0\x67\x90\xea\x00\x3a\xf0\x23\xc7\xfe\xff\x5b\x8f\x71\x68\xc5\x3a\x95\x90\x44\xd2\x5c\xd7\x35\x92\x80\xd7\xad\xd8\x32\x12\x2f\xc5\xec\xf6\xc4\xc5\xee\xf3\xbf\xad\x78\x76\xb9\x8e\xf2\x5d\x67\xa6\x0f\xdd\x31\xbf\xd5\xe8\x2a\x63\x5f\xf3\x7f\xf5\xd6\x0d\xdb\x56\x76\xca\xb9\xe6\xe9\x35\x39\xe2\x05\x55\xd0\x22\x46\xf3\x78\xde\xf0\x02\x5a\xa3\x22\x0b\x7b\x16\x07\x75\xa4\x31\x96\x00\x50\xc4\x62\xc6\x43\xb6\xc3\x81\xd0\x61\x12\x45\x7b\x88\x49\xfb\xaf\xdb\x73\x36\x31\xfb\x86\xde\x5b\xf5\xc9\xdc\xdc\xc7\xed\x83\xfc\xb5\x8a\x6f\x8c\xfe\xf4\x64\xe1\xd3\x67\xbf\x39\xfe\xde\x82\x2a\x4e\xc6\x80\x61\x69\x2e\x2d\x48\xf4\xbc\xc4\xb0\x7d\x9c\x88\xa2\x48\x13\x24\x23\x59\x14\x6c\x29\x56\x4c\x64\xb0\xac\xa5\xc8\x3e\x6f\xb3\xbe\xc7\xd9\xac\x26\x30\x34\xc6\x7a\x0a\xe7\x78\x71\xd6\x2d\x75\xcb\xf0\x27\x57\xfd\x72\xa5\xd5\x9f\x97\x97\xf6\x9f\xfa\x41\x1b\xed\xcc\xb4\x19\x9e\x5a\xf8\x9d\xc7\x7e\xa8\x3d\x6b\xed\xcc\xf4\x9e\xb4\x84\x78\x09\x32\xd0\x94\x68\x51\xf2\x40\x10\x8b\xd8\x8e\x62\xd9\x36\x3c\xdf\x44\x09\x1f\xcb\x1c\x52\x65\x3d\x62\xa4\x98\x8f\x13\xc8\xc7\xbe\xe2\xa6\xe8\x07\xbf\xff\xe9\xfd\xf2\x41\xe7\x8a\xf1\x0f\x35\xd0\x86\x0a\x87\x5e\xdb\xc9\x96\x9e\x14\xbd\x3b\x22\xa3\xc4\xdb\x39\x66\x9e\x9d\x5a\xfb\xea\xa6\xf4\x9a\xec\xe8\x71\xc0\xbb\xac\x67\x32\xa2\xc4\xc7\x51\xa8\x78\x09\xc7\x42\x9d\x47\x7a\x44\x85\x3a\xeb\x13\x45\xe1\x50\x02\x7d\x99\x57\x21\x22\x4c\xcc\x24\x51\x6a\xa6\x66\x41\x70\x75\xdf\xc2\x2f\xcb\x3c\xb9\xa2\x4b\xef\xbf\xde\xbf\x7c\x8a\xbf\x7d\xb9\x73\xa5\x46\xfc\x72\x8b\x3d\x1c\xca\x13\x36\x9e\x7c\x2e\xcd\x17\x60\x19\xb8\x91\x1a\x33\x11\xcf\x78\x2a\x31\xc3\x50\x94\x58\x01\xf2\xa2\x47\x18\x57\x96\x04\x29\x60\x5c\x28\xb9\xa2\x69\x88\x82\x20\x61\x5f\x64\x28\xf5\xd1\x1c\xdd\xec\xf8\x4b\x0b\x77\x4e\xef\xd1\xd7\x6a\x7c\xab\xe9\x5a\xe7\x69\xbc\xea\xc9\xd2\x37\x9f\xdd\xb4\xfc\xe9\xf9\x95\xa6\xe6\xbd\xb1\x95\x53\xd3\x9b\xa3\x35\xe4\x90\x48\xa7\x05\x5d\x15\xad\xd8\x27\x14\x8b\x21\x12\x64\x56\x89\x25\x4e\x8d\x64\xa2\x05\xbc\x17\x03\xc4\x9b\x50\x62\x6d\x91\x93\x7d\x16\x59\x59\x50\x85\x72\x8e\x11\xa5\xe7\xd6\x74\x1e\xb6\xf1\xd4\xe9\x52\x4b\xfb\xf5\x1a\xfc\x7a\x55\xaf\x7b\xb4\xf6\xea\x90\x76\xfb\xc8\xe5\xe3\x4f\xcc\x4e\x33\x03\x99\xe8\x71\x82\x62\xcc\x5a\x18\xab\x81\x66\xa9\x89\x45\x4c\xde\xb3\x7c\x4a\xc0\xa1\x45\x47\x66\x08\x9c\x84\xb7\x29\x8e\x4e\x38\xd9\x14\x38\x3a\xd1\x1f\x0d\xc3\x6a\x4f\x6d\x99\x9f\xb3\xf9\xc2\x52\xb6\x99\xbb\xff\xca\xa1\x97\xbf\x98\xff\xd2\xfc\xef\xab\x8d\x9a\x32\x99\xef\x5e\xf7\xfc\xe4\x97\x97\x67\x1f\x4f\x9e\x1a\xfc\x1b\x32\xbe\xa2\x03\x9a\xf5\x00\x30\x23\x11\xa8\x22\x63\xbb\x8a\x11\xc9\x0c\xb1\x4c\xc1\xb6\xe9\x24\xb2\x24\xda\xf5\xd4\x04\x62\xc9\x07\x0a\x43\x52\xe4\xe8\xd9\x25\x76\x1d\xbc\xbd\x31\xcf\xcd\xc2\x2f\x7e\x50\x6c\xf6\x98\x61\x87\x0f\xed\xae\x54\xfa\xe6\x59\xac\xbf\x5d\xff\x4a\x66\xb9\xba\xa5\x5f\x4b\xb3\x44\x89\x07\x59\x6c\x60\xce\xd1\xb0\x6e\xf0\xb6\xc5\x13\x04\x89\xa6\xfa\x6e\x18\x52\x40\xe4\xa3\x50\x56\xad\x50\x0f\xb8\xc4\x73\x88\xef\x06\x9a\x06\xb3\xda\x62\xf1\x7b\xc3\xa7\x77\xad\x06\x1b\x57\x1f\xfa\x59\xbe\xbc\xaf\xd5\x96\xfd\xbf\xe9\x85\xa6\x7d\x30\xbc\xd5\xb5\x7e\x42\xc7\x17\xf2\x05\xc5\xea\x3f\xfc\xeb\xa1\x8d\x07\x57\xaa\x70\x6a\xfa\x37\x05\xee\x77\x2c\xb2\x63\xe2\xa8\x7e\x53\x07\xcd\xb9\x36\xf9\xd8\x4b\x35\x6f\xe6\x0f\x86\xb7\x26\x32\xf7\x90\xe3\x55\x7a\xaf\x22\x75\xb2\x7d\xaf\x7a\x93\xba\x5a\xef\x75\x2c\xb8\x72\xed\xbd\x32\x03\x3e\xd9\x75\xe4\xea\x8b\x43\x33\xf3\xac\x9a\xf7\x7c\x95\xec\xa3\xde\x52\xdf\x54\xe5\xc0\xe5\x35\x43\x52\x02\x8b\xd0\x0a\x0b\x03\x1a\x3a\x02\xa0\x23\x89\x27\xc8\x34\x64\xdd\xf6\x1c\x8f\xf5\x55\x4b\xd1\x74\x2a\x34\x81\x81\x29\xfa\xd1\xaf\x58\xf7\x31\xeb\x9b\x8f\x47\xbc\x5e\xf2\xc8\x17\xe3\xef\x7d\xb0\xd3\x57\xf7\xac\x98\xf0\x5b\xde\x7a\xbd\xa7\xdf\x6f\x7b\xa8\xab\x77\x32\x67\x7a\xf7\xef\xc2\x90\x11\xd9\xd8\x12\xf1\x3f\x92\x4e\x2c\x4b\x89\xc8\xe8\x9c\x8a\x05\x8f\x32\x21\x67\x12\xc7\x90\x75\x25\xf0\x55\x86\x15\x05\xce\xb2\x19\x15\x8b\x20\x85\xe3\x31\xf9\x16\xbf\xd2\xe4\x3d\xfe\xec\xb5\x9e\x67\xfb\x96\x6f\xa7\xcf\x74\x6b\xf5\xb5\x3e\xc9\x37\xe7\xd7\xc1\xf1\xba\x9a\xb5\xa2\x9b\xd9\xc7\xab\xa6\x0c\x6f\xce\x09\x34\x9d\xb5\x25\x4c\x27\xd8\x50\x6c\x4f\xf3\x68\xdd\xb7\x15\x86\x0f\x34\xd3\x0a\x24\xc9\x89\xa0\x1a\x8a\xd8\xe3\x38\x14\x03\xdf\xf3\x19\x97\x4e\xdd\xa3\x0f\x7f\x56\x9e\xb2\xb7\xe3\x5f\xe5\xc4\x71\xcd\xbf\x38\x38\xb3\xf5\xb0\x6e\xce\xba\x5d\x2f\x4a\x2e\xd7\xf0\xe4\xce\x31\x7b\x9e\x08\x2e\xa6\x99\xc2\xeb\xd9\x22\x47\x44\xc6\x84\x1c\xe7\xcb\x7c\xec\xe8\x94\x66\xfc\xa3\x6d\x14\x0c\x5a\xd7\x4d\x8c\x42\x43\x67\x15\xdb\x92\x91\x4d\x68\x93\xb8\x61\xe2\x3f\x9a\xff\xc7\x0f\xfb\x46\x2e\x73\x12\x9f\x1f\xbf\x68\xc0\xac\x6d\x2f\x4c\xfd\x76\x70\xed\xd9\x9b\xb6\xd6\x5a\x3f\xb2\xc5\xf8\xf3\xcb\x86\x97\xec\xf5\x78\x7a\x4d\x66\x34\x11\x4b\x49\x62\x87\xb6\x2d\x5a\x91\x13\x60\x22\x10\x97\x91\x40\x20\x60\x5b\xf1\x34\x4a\xd4\x69\x2c\xc6\x2a\xe0\x25\x31\x16\x64\x3a\x48\xfe\x05\x29\xf8\x50\x18\x76\x5f\xf0\xec\xec\x6e\xe4\xc7\xd3\x5b\xaf\xb4\xcb\x59\xe2\xe0\x8c\x83\xdf\x87\x83\x5f\x5a\x33\x87\x8c\x28\xb9\xee\x9d\xd5\xd1\x8c\xcc\x34\xef\x94\x76\xfd\x84\x37\x05\xc2\xba\x94\x22\xc6\x34\x08\x20\x30\x12\x3d\x54\x80\xcc\x2b\x38\xe6\x34\x5a\xc6\xbe\x4e\x51\x48\x21\x9e\xa3\xab\x22\xcd\x5a\x6a\x8a\x69\xa2\x9f\xff\xd5\xb6\x83\xc6\x1d\x7f\xfa\xeb\xdc\xa1\xb2\x7b\x60\xc9\x77\xbe\x7a\xa6\x95\xb5\xb8\x65\xee\x8f\x73\xfb\x2b\x77\x4c\x28\xb4\x23\x4a\x6f\xa5\xb5\x54\x8a\xd2\x4c\x07\x21\x60\x82\x98\x24\x5a\xc8\x79\x8a\x16\x44\xba\xe3\xab\xac\xcb\x32\x91\x27\xb0\x94\x41\xe9\xac\x2c\xf3\x28\xe4\x44\x37\x84\x6c\x0a\x91\xb6\x66\xd3\xcd\x43\x87\xaf\xcc\x7d\xb7\xe4\xb8\xcc\x8d\x7b\xa6\xf7\xb9\xbf\xbf\x75\xd9\x09\x7f\xfe\xf0\x63\x83\xef\xc3\x46\xed\xc2\x0e\xd9\x67\x02\xa6\xde\x30\xe0\xd0\xa6\xc9\x7a\x02\xd0\x19\x5a\x80\x76\x00\x54\x1b\xe3\x90\xe6\x4c\x4f\x57\x12\x9b\x75\x58\x57\xe2\x24\x9f\x56\x35\xcb\x76\x0c\x06\x04\xe6\x43\x33\xae\x7f\xcd\xe8\x1f\xed\x9c\xa6\x0f\x7b\xa1\xca\x11\xef\xcb\xbe\xc5\x6e\x7c\xb3\xad\xcd\xa4\x78\x63\xbd\x4b\x56\xf8\x54\xd0\xa0\xc1\x67\xc0\xaa\x32\xff\x8f\xfc\xff\xdd\xe3\x6f\x66\xcb\xfc\xcf\xfe\x1b\x36\xaf\xd8\xd8\x93\x8f\x97\x3d\xfe\xe6\x5f\xe5\x67\xf7\x7a\x62\x46\x57\x7b\xe6\x8a\x22\x93\xd9\xfc\xcb\xfb\x93\xf6\xb7\x93\xe9\x55\x0f\x6c\xde\x9c\x6e\xc8\x89\x06\x30\x13\x02\xa4\x31\x1a\xcf\x68\x01\xa6\x81\xaf\xda\x8c\xa5\x62\x5b\x30\x64\x9b\x0e\x38\x1b\xa9\x1e\xcd\x38\x2e\xb2\x54\x3f\xc0\x82\x9e\x05\x5a\x6c\xe4\xc1\x15\xb9\xdf\xa2\xf3\xb6\xd9\x34\x69\x91\x36\x90\xbe\xf0\x7b\x9e\x3f\x2e\x2e\xfd\xcc\x63\xf6\xe7\xe9\x3a\xb6\xe3\x73\x53\x2a\x65\xbf\x6c\xa5\xde\x08\xa4\x13\x45\x4c\x88\x99\x24\x91\x8f\x45\x2c\x10\x9d\xd2\x63\xde\x4e\x9c\x50\x02\x94\x40\xfb\x3a\x81\x8a\x47\x7c\x27\x76\x38\xc0\xdb\xa2\x2f\x6a\x20\x35\xa4\xb0\x05\xf3\xf6\xf8\xe5\xef\x0d\xdb\x7b\xf7\x13\xbf\xd3\xe8\x7c\x3b\xd7\xce\x68\xd4\x11\x4e\xf5\x7e\xfa\xe2\xf0\xe3\xf2\x96\x0a\x93\xef\x65\x7f\xbf\x6f\xca\xab\xb8\xea\xf0\x4c\x44\x71\x0a\x42\x0c\x85\x22\x45\xd3\xb4\x90\x40\xc1\x67\x90\x87\x02\x26\x89\x55\x45\xc7\x26\x04\x34\xcf\x30\x28\x62\x3d\xac\xc7\xaa\x9e\xda\xec\x63\x33\x8d\xbe\xfd\x3b\x16\xa8\xff\xc3\x33\xe8\x34\x9a\xdb\x65\xff\x5e\x3d\xd7\x8c\x6a\x5f\xef\x5c\xf3\x5e\xd0\x6a\x58\xb4\xea\x92\x90\xe6\xb8\xa1\x08\x31\x58\x40\x51\x1c\x20\xba\xc9\x46\xb4\x47\xa0\x24\x01\xdb\x74\x4d\x6c\x8a\x0a\x92\x13\xdb\x90\x79\xdd\xd7\xa2\x98\x66\x4c\x1d\x8b\x94\x91\x7a\x98\xf7\xea\x8d\x3f\xae\x14\x5f\x36\x71\x7d\xcb\xa5\x8f\x77\xde\xfe\xee\x63\xb3\x76\x1d\xdc\x5d\xb1\x47\xf5\x6e\x3f\x9f\x6a\xd1\x7a\xf3\xee\xba\xf5\xb3\xaf\x48\x97\x5a\x8d\xc8\x14\x03\x8e\x35\x3c\x86\x8f\x90\x18\x0a\x0c\x42\x0e\xcd\x89\x86\x8c\x60\x00\x23\xca\x31\x08\x61\x15\x02\x01\xa5\x51\x1a\xab\xd0\x31\x45\xf3\xc6\xa3\x19\xaa\xdb\xb5\x55\x7d\x36\x8c\x59\xdd\x5e\xdd\xb5\xff\x85\x2e\x27\x9f\xce\xe5\x4e\xca\x18\x78\xa1\xd2\x4b\x1f\x7f\x65\x6c\x7c\x57\x98\xf4\xd9\xd9\x34\x8b\x7c\x13\x1a\x40\x1d\x10\x56\x87\x18\x69\x06\x4a\x5c\xa2\xf0\xa2\xc9\x25\xac\xed\x6a\x24\x08\xdd\x04\xc6\xc4\x65\x30\x8e\x90\x2b\x10\x33\xb6\xe2\xbf\xeb\xc0\xff\x92\x34\xff\xd3\xdb\x75\x66\xcb\xae\xf9\xff\x8d\xd7\xf2\x64\x1f\x27\xd7\xd5\xe6\xa7\x9e\x1a\xf4\xe2\x97\x7d\xaf\x74\x7f\x7b\x2b\x3a\x55\x6f\xe9\xcb\x70\x57\x9d\x42\x65\x8e\x8d\xf8\xe3\xd5\xa1\xd3\xd3\xeb\x4e\xd8\xc1\x08\x99\xc0\x05\xb4\x16\xd9\x58\xc3\xb6\xe6\x52\xc0\x96\xb0\x0a\x11\x4f\x38\x0d\x0b\x8e\x69\x05\xc8\x97\x25\x4e\x4d\x04\xc1\x24\x82\xa0\xa7\xce\x39\x5b\x5a\x92\x75\x9d\xf6\x82\x41\x63\x34\xe1\xf0\x57\x5d\xac\x5a\xdc\x4f\xcd\x9b\xbe\x7f\x7c\x42\xc3\x8d\xe5\xc6\x36\x6b\xb1\xb7\x51\xae\xf4\xd6\x68\x3e\x60\x28\x1b\xb0\x5e\xac\x7b\x9c\x40\xb3\xbc\x64\x11\x13\x63\x14\xa8\x91\x0e\x29\xda\x85\x3c\x52\x59\x41\x56\x22\x2d\x30\x64\xd7\x73\x12\xe8\x52\xa9\x91\x4c\x03\x97\xcc\x5b\xf2\x83\x3a\xe7\xf4\x1b\x6b\x6f\x2d\x06\xa5\xbd\x09\x71\xd3\x5a\xc7\x17\x71\xcd\x56\xac\x5a\x70\x4e\xdc\xde\xfa\xe9\xec\x4b\x89\xa5\x74\x29\x96\xf1\x05\x4a\xa1\x68\x20\xdb\x8c\xce\x2b\xb6\x1d\x40\xd5\xe6\x79\x8a\xa1\x59\xcb\xb6\x38\xe5\xff\x2f\x1b\x77\x90\x6c\x28\x7e\x14\x2a\x8c\x0c\x41\x16\x0b\xa6\xce\x55\xcc\x37\xbe\x0e\x1c\x74\xd2\x1e\xb5\xaa\x5c\x21\xb3\xf5\xe4\xda\xfb\xd8\x1c\xb0\xf4\xf9\x7e\xdc\xce\xa2\x2f\x7f\x79\xe7\xb3\xec\xcf\xd3\x52\xc3\x98\x35\x49\x54\x62\x5a\x71\x18\x51\x0b\x09\x82\x16\xb0\xd9\x58\xd1\x74\xd9\x0b\x25\x8a\x61\x7d\x4f\x66\x74\x68\x3b\x82\x66\xc6\xb1\xa5\x3b\x8e\xc7\xc7\x8f\xd0\x95\xff\xd3\x93\x4e\x66\xcb\x36\x39\xaa\x3e\x1c\x09\xad\x8a\x57\x6e\x5a\xa7\xf2\xd8\x6e\x87\x2e\xb6\xed\xf3\xdd\xb0\xf2\xfe\xda\x33\x85\x8f\x35\x3c\xb1\x72\x9f\xf6\xe0\x44\x47\x79\xa0\x2b\xa6\x19\x62\x1e\xab\x86\x8b\x62\x68\x87\x21\xed\x2a\x11\x14\x1d\x5f\xf1\x79\x95\xf6\x43\x5f\xe1\x0d\x23\x14\x88\x14\xaa\x4c\xc8\xda\x36\xc7\x50\xd0\xe2\x30\x95\x05\xef\x57\x79\xe5\xfa\xcc\xfc\x85\x7f\x3c\xf3\x7d\x95\x59\x4b\x3b\x74\x7f\x7a\xf5\xfc\x9b\xc3\xd6\x95\x28\xf2\x4a\x8d\xab\x95\x2e\x7f\xd4\x7b\x14\x9f\xe6\xb9\x90\x20\x47\x5c\xe0\x19\x8c\xce\x53\x20\x4e\x82\xc0\x4a\x42\x99\xa3\x5d\x0e\x1b\xa2\x19\xc7\x24\xb0\xa1\x6c\xb8\x3c\x12\x04\x49\x75\x4c\xa8\x25\x58\xb5\x52\x9b\xfd\xfb\x93\xcb\x5b\xb6\x2f\x7d\xf0\xb5\x01\x85\x4e\xee\xa9\xda\xaf\xf0\xd0\xae\x35\x72\x9f\x1d\x69\x3c\xf9\x59\x81\xb6\x53\xf2\x8e\x9c\x34\x2d\xfb\xca\x37\x29\xab\xaf\x26\x25\x2c\xe3\x04\x8c\x8b\x81\x1d\x60\xdf\x80\x32\x12\x1d\x42\xdb\xac\x4a\x80\x00\xbd\x24\x90\x6c\x5a\x85\x0a\x74\x49\xec\x46\x42\xa2\x08\x30\x0b\x15\xaf\x22\xd7\xb7\x8f\x7f\xb3\x7a\xd7\x6e\x0f\x18\x30\xf7\xcf\x35\xed\x7e\xe8\x53\xda\xe5\x8e\x6e\xad\xff\xa2\xfc\xfc\xec\x0c\x8a\x9d\x59\x3e\xbd\x01\x6c\x88\x16\x23\x21\xc1\x55\x7d\xd3\x8e\x0c\x3f\x09\x48\xa2\x53\xd8\x05\x7c\xa4\xeb\x58\xe0\x1d\x44\x19\xb4\x8a\x24\x31\x14\x64\x55\x92\x85\x38\xf2\xfe\x16\x26\x5f\x95\xef\xbf\x9b\x57\x64\x66\x0c\xce\x91\xe3\xb1\x87\x29\x5e\x53\x4b\xfc\x55\xe6\x7d\xef\x83\xf7\xf4\x49\x03\x0e\x55\x2a\x71\x68\xfd\x82\x72\xf8\xa3\x25\xcc\x8f\x6f\xf6\x78\xbb\x7d\xab\xcc\xca\x7d\xd2\x2b\x96\xc3\x5b\x1c\xf2\x1d\x90\xc4\x9c\x88\x4d\x4f\x50\x08\xa5\x2b\x6c\xa2\x19\x8e\x06\x69\x1e\x01\x2c\x81\x84\x25\x8a\x6d\xbb\x62\x68\xc6\x54\x10\xc3\xe0\x9f\x5b\x8d\x1f\xbe\x01\xdd\xcd\x3f\x69\x73\xfd\x97\xee\xb4\xee\xf8\x52\xf1\xe5\x43\x97\x1f\xca\xf1\x72\x9b\xc9\xaf\x81\x8f\xb7\x34\x17\xe7\x64\x1e\xad\xdb\x73\x73\xf6\x9f\xcc\x53\x8b\x67\xea\x8e\x96\x08\xac\xad\x6b\x84\xf9\x7f\xac\xbd\x65\xd4\x55\xd5\xfa\x36\x4e\x37\x08\x48\x97\x80\x08\xd2\xb0\x92\x50\x40\x78\x68\x10\x04\x14\x10\x50\x56\x77\xce\xb9\xe6\x5a\x73\x01\x52\x22\xd2\x21\x1d\xd2\x62\xd0\x21\x2d\x1d\xd2\xdd\x1d\x22\xdd\x25\x20\xff\x71\xfe\xe7\xfd\xbd\x1e\x5e\xf6\x33\xce\x6f\x3c\x63\x7f\xdf\x1f\xe6\x5e\xf3\x9e\x77\x5e\xf7\x75\x49\xa2\x63\x4a\xc0\xc2\xac\xc5\x9b\x06\x8e\x74\xc3\x54\x65\x81\xf4\x1c\x0c\x24\x86\x84\x32\xa3\x19\x1c\xc9\x6b\xa9\x28\x72\xcc\x9d\xf5\x6a\xd9\x3b\x07\xca\x9e\x9c\x74\xbc\xd8\x9f\xcb\x72\x3d\x1e\x3a\x6e\x67\xd1\x91\xc3\x0b\x11\x9d\x16\x9d\xe7\x6b\xaf\x6f\xb0\x3a\xb9\xfc\xfc\x3c\x8e\x24\x31\xe6\x04\x60\x4a\x50\x92\x38\x0c\x09\xd7\x08\xc8\x80\x83\x24\xc9\xf3\x00\x83\x80\x62\x02\xc9\x8d\x80\xe7\xa1\x50\xe0\xa2\x10\xba\xba\x9c\xf8\xd8\xd7\x87\xd5\x7d\xf6\xf9\x8c\xe5\x73\x9b\xb4\xca\x34\xae\xf8\x86\xa2\x6b\x3e\xcb\x35\x29\xa5\xdf\xcd\xc2\x41\xfe\xb3\xf8\x2a\xaa\x3e\xe4\x6a\x92\x9b\x11\x11\x85\x64\xc9\x17\x25\x4e\xf2\x79\x5e\xa2\xf8\x00\x03\xd9\xf7\xa0\x64\xc7\xc0\x12\x44\x2b\x24\x22\x51\x71\x08\x5a\xf7\x15\x52\x11\x62\xc9\xf1\x53\xd1\xc4\x5a\xb3\xdc\x1e\x76\x7e\xd7\xe2\xc2\xbb\xa6\x3d\xaf\xfc\xe8\x56\xcb\x8d\x85\x5b\x9e\x5f\x9a\x6d\x25\xec\x9e\x3b\xd3\x5a\xe7\x76\x93\x36\x55\x93\xbc\x50\x47\x87\xb4\xcc\x69\x02\xaf\xbb\x21\x45\xb1\x12\x72\x69\x42\x04\x1e\x66\x65\x8f\xb7\x5d\xd7\xf6\x5d\x0d\x92\x96\x68\x3a\x8c\x4c\x59\xb4\x84\xe9\x58\x7d\x23\x8e\xfd\xb7\xfe\x61\xbf\x46\xd9\x32\xe5\x78\x3d\x8e\x0d\xff\x70\xe2\xfe\x43\x0d\xd6\xf7\xe8\xb3\x3b\x5f\xdb\x3c\x59\xe8\x96\xfe\xc9\xf4\x95\x2b\x87\xcb\x73\xb6\x1a\x60\x5f\x2a\x75\x7f\x5d\xda\x97\x77\x12\xc6\x31\xcf\x24\xe3\x20\x52\x02\x2e\xe0\x03\xdd\xa2\x2d\x36\x50\x63\xc2\x82\x7e\xa8\x28\x36\x89\x35\x32\x36\x58\x82\xc0\x28\x0e\x81\x2c\xd1\x9c\x65\xcb\xa2\x9f\xf8\x6e\xf6\x1e\xd9\x30\x88\xfe\xa1\x48\x19\xf2\x9e\x38\xa3\xa6\xdd\xe3\xfe\x44\x65\x68\xc6\x4c\x93\x0b\xa9\xcb\x56\x0d\x5d\xd3\xf2\x50\x15\x23\xb9\x0f\x18\x73\x3a\x19\x98\xba\xea\xd2\xa6\x11\x45\xb2\x6b\x92\x8a\x6a\x59\x2c\xcd\x98\x21\x6f\xfb\xb4\x2b\x73\x11\x50\x81\xe0\x0a\x01\x50\xa3\x80\x52\x68\x2d\x4a\xfc\x12\x8e\xee\xbe\x5e\x32\x9c\x7f\xbc\x42\x9c\x79\x41\x86\x09\xc6\x47\x0d\xff\xd8\xf7\xeb\xc2\x5e\xdf\xff\xf4\x4e\xe1\x53\xf9\xb2\x3d\x5a\x54\x35\xed\x8c\x57\x89\xb9\xe6\x59\x85\x55\x2c\x36\x52\x05\x64\x32\x32\x03\x0c\xd5\xa4\x39\x91\x22\x4c\xec\xbb\x98\x8d\x6c\xe0\x98\x9a\xaf\x9a\xa4\x6a\x9a\x6c\x2c\xb8\x10\xea\x6a\xe2\xaf\x7d\xeb\xcf\xe9\x2b\xc5\x19\xaf\xba\x50\xce\xba\x32\x9d\x8f\xb6\x9b\x71\xa0\x73\x6d\xff\x60\x3b\x8f\x38\x9c\xb9\x69\x06\x65\xf6\xc2\xc1\x49\x9e\x71\x20\x1c\x8a\xa2\x2b\x61\x84\x59\xd1\xa0\x6d\x10\x63\x89\x95\x74\x9b\xf6\x75\x0b\x47\x1a\x81\x68\x17\x7b\xc8\x0d\x54\x2a\x56\x28\x9e\x57\x4c\xe2\x9f\xe2\x77\x75\xd6\xff\x5d\xdf\xa5\x5f\xc3\xf4\x3b\x5e\x8f\x62\x35\x86\x91\x6d\x8a\xf4\x6f\xb0\xb7\xcd\xd4\xdb\x03\xee\x9f\x7b\xd8\xa0\x05\xc8\x7f\xeb\x5e\x87\x65\x7f\x4f\xfe\x75\x41\xb7\xdd\x2f\x2a\xb5\x48\xee\x6b\xe7\x0d\xcd\xb0\x01\x44\x50\xa4\x74\x03\x91\xae\x1a\xdb\x96\x05\x08\x2d\x8c\xe8\x08\x03\x93\x84\xb6\xa6\x02\x53\x0e\x02\xde\x90\x39\xd5\x45\x90\x4c\x20\x03\xd0\x37\x05\xe4\xfc\x46\x59\xde\x6f\x55\x16\xb7\xfb\xb6\x25\xd7\x45\x14\xbe\xa8\xd5\xf7\xf9\x98\xb7\xd0\x9c\x2f\x7e\x7c\xe7\xdc\x88\x42\xc9\x0d\x07\xbc\xad\x7a\x3e\x1b\x4b\x96\xed\xe9\x72\xe8\x11\x31\xa3\xaa\xa6\xad\x23\x20\x03\x13\x2b\xb2\x1b\x11\xa1\x14\x7a\x9c\x46\x93\x00\x03\x49\xb7\x4c\x3f\x95\x47\x50\xa0\xc9\xa4\xca\x85\x8b\x3c\x3d\x9f\xff\xce\xf8\x71\x4f\x0f\x37\xb9\x84\x85\x0c\x85\x0a\xe5\xed\x94\x8d\x0a\x7f\x9a\x5a\xfc\x56\x86\x12\xc9\xb5\x26\x1b\x1a\xae\x42\x44\xbe\xce\xda\x8e\xc6\x07\xba\xa2\x21\x9f\xd0\x14\x5e\xa7\x14\xd5\x76\x62\x52\xb4\x09\x32\x26\x25\x57\x8c\x59\xcb\xc1\x8c\x2c\xa6\x46\xb8\xd1\xa0\xb7\xf0\x6c\x68\x9e\xae\xa5\xbb\x36\x3b\xb8\x75\xed\xd3\x0e\x73\xba\x09\x87\x56\x55\x2d\x3d\x6c\xe6\xd8\xe9\x5b\x7a\xd7\x9b\xdf\x24\xed\x18\x92\xc4\xfa\x27\xa2\x49\x39\x8a\x28\x0a\x44\xe0\xe9\x8e\x63\xc9\xbc\x81\x6d\x4b\x8d\x02\x4c\xb2\xaa\x60\xe9\x0c\x67\x5a\x40\x20\x49\xc6\x94\xf8\x50\xa3\x15\xc5\xa0\x12\x7f\xed\xb5\xe7\xfa\xd4\x26\x5a\x5d\x4f\x77\xb8\xed\xbe\x5d\xe5\xa5\xed\xda\xa4\x11\x45\x2a\x9f\xe9\x35\x70\xf5\xc5\x3a\xf3\x2e\xc3\x9a\xc3\xd2\xbe\xe6\x98\xd0\xe5\x40\x5e\x65\x81\xe7\xda\x98\x00\xb1\xc7\x73\x22\x0b\x30\x41\x62\xdb\xf4\x6d\x5b\x8c\x6c\xa8\x87\x18\x2a\x81\x08\xa1\xef\x32\x84\xc3\x13\x01\x1b\xff\x53\xb2\x2f\xae\xf7\xef\x13\x47\x65\xe6\xfd\xd0\x82\xbb\xda\x4f\x5a\x6a\x93\x4b\x4b\xdc\x6f\x3e\xf1\xdb\x8f\x6a\x9d\x3c\xd0\xa6\x78\x93\x2a\x97\x5b\x66\xed\xb9\xb9\x52\xbf\x94\x57\xaf\x1e\x3f\x99\xf0\x3a\x83\xbb\x95\xef\x52\xd7\x36\xc7\x4f\xbd\xc8\x51\xf7\xe3\xdd\x8f\xd6\xb6\x7b\xf6\x65\xe7\xae\x29\xf6\x96\x0c\x5f\xff\x5c\xee\xfc\xad\x55\x9f\xf5\xdd\x98\xdc\xe7\x4b\x58\x80\xf1\x24\xd9\x8f\x91\x2b\x05\x84\x48\x07\x5c\xa4\x85\x94\x19\x4b\xd0\xd2\x69\x19\x72\x34\x27\x9b\x98\x53\xc4\x88\x8a\x55\x1f\xf0\x8a\x9f\x08\x87\xfc\x7d\xb6\x57\xa3\xab\x7f\xc2\xcd\x01\x7f\x8c\x2e\x03\xb2\x0c\x3e\xd8\x7f\xc4\xc9\x5c\xe5\xdf\x59\xd7\x8c\x28\x70\xe0\x44\xfd\x4e\xf7\x1b\x26\x19\x68\x17\xd8\x9a\xc8\x04\x44\xe4\x6a\xc0\x32\x22\x9e\x44\x94\xf2\xaf\x78\xa0\x93\x71\x00\x64\x43\xf7\x59\x05\x91\x21\xa7\x01\x8b\xa6\x58\x1a\xb1\xb1\x1e\xa5\xd2\xd3\x4e\x29\xb7\x82\x6a\xdf\xeb\x4a\x89\x02\x72\x01\xa2\x81\x35\xc7\xcc\x45\xf7\xde\xd3\xe8\x78\xa5\xa5\x12\xaa\xf2\xd9\x1f\x1e\x35\xfd\x35\xf3\x2b\xdb\xbf\xcd\xb9\x17\x56\x80\x57\x36\x3e\x38\xb5\xf9\x88\x8e\x25\x6b\x7d\xb3\xac\x61\xe9\x3a\xf7\x8b\x4b\xdb\x7b\x36\xeb\x7e\x7a\x80\x98\xdc\x3f\x09\xa3\x88\x73\x44\x99\x02\x34\x4d\x31\x9e\xa1\x8b\xae\xed\xa8\x06\x29\x1b\xbe\x64\x79\x16\x46\x34\x69\x6b\x01\xa7\x45\xa6\x88\xdc\x40\xc2\x38\x06\xa9\xac\xf7\xe7\x1a\xbd\x51\xe8\xf2\xfc\xaf\xfd\xe6\xe2\xcb\xe9\xfe\x28\xb8\xa4\x47\x97\xb7\x7b\x3c\x2e\xf8\x74\xe6\xd5\xdd\x6b\xb6\xdc\x2b\xd5\xb5\x56\xda\x31\xe2\x89\x35\x37\x91\xad\xaa\x08\x07\xb4\x65\x69\x9a\x86\xb8\x10\xb8\xac\x1d\xd3\x9e\x64\xb1\x0a\xcf\xb0\xc0\x65\x49\xcb\xc3\xac\x49\x47\x8a\xaf\x46\x21\x87\x75\x3b\x31\xe0\x9a\x94\x6b\xac\x19\xb6\x71\xd4\x51\x47\xca\x71\x6b\x75\xd0\x38\xc8\xf9\xd7\xfc\xe3\x3c\xce\x67\x4c\xef\x5b\xef\x87\xab\x52\x8d\xe4\x4e\x2b\x39\x01\xb9\x3e\x25\xd9\x34\xa4\x59\x2d\xc2\x00\xc7\x3c\xcd\x0b\x18\xff\x2b\x7a\x9b\x02\x8e\x03\xd2\xf7\x0c\x4f\x24\x7c\x85\x44\x86\x2d\x0a\x98\xe0\x13\x80\x11\x0e\xd5\xff\x50\xaf\xfc\xd1\x8e\x96\x3b\x5b\xa7\x1f\x54\x74\xf2\xb6\x3e\x7e\xed\x43\x77\xaa\xd7\xe8\xde\x2c\xec\xfa\x5b\xa6\xad\xe9\x2a\xf6\x4a\x32\xd9\x15\xe9\xd0\xa2\x6a\x39\x42\xe4\xfb\x5a\x20\x85\xb1\xa1\x30\x1e\xd2\x0c\x01\x42\x23\x64\x22\x0b\xab\x18\x60\x4b\x93\x2d\x5f\x42\xbe\x8e\x6c\x04\x12\xec\x57\xdd\x5e\x78\xbf\x53\xf8\x6e\x84\xc3\x89\x15\x9a\x0e\xd4\xdd\x1a\x7e\xc9\x2c\x15\x3f\xf8\x56\xa9\x3e\x21\xf7\x36\xbe\xc6\xa1\x4f\x32\x26\x9b\x53\x1c\x0a\x8a\xed\xd8\x62\xe4\x91\x84\x4d\x52\x12\x1f\x18\x42\x24\x32\x92\x4e\x01\x03\x84\x31\x62\x3c\x43\x76\x45\x5a\xb5\xa1\xc6\xf8\xd8\x67\x05\x3b\xf1\x4c\xb8\xc1\x92\x8a\xee\x0f\x0b\xb2\x9c\xd8\xac\x9f\xe8\xf3\x78\xe3\x51\xc2\xac\x14\xb5\xfd\x7c\xf6\xf8\xb9\xc3\xb3\x7c\x55\xfd\xa8\xf8\x6e\x92\xe9\x83\x25\xda\x93\x02\x0f\x63\xdf\xe5\x38\x83\x8e\x05\x91\xb5\x1c\x87\x00\x9c\xe7\xd2\x76\x40\x11\x2c\x54\x68\x49\x22\x83\xff\x3f\x0e\x28\x0c\xc5\x9a\x38\x7c\xb3\x4e\x77\x36\x9d\x3a\x93\x3f\xdb\x0f\xbf\x1d\xdd\x78\xbc\xd1\xc2\x7c\xd9\xe8\x2c\x3f\x5d\xfa\xe3\x84\x99\xad\x73\x58\x73\x5a\xb6\xfe\x9d\x1a\x24\x57\x8c\x95\xc3\xd0\x51\x44\x9e\xe3\x4c\x51\x52\x88\x58\x66\x3c\x5b\xe1\x31\x8f\x22\x81\xa5\xe5\x18\x7a\x8a\xc8\x70\x16\x27\x0a\x91\x80\x39\x25\xd6\x64\x9a\x12\x40\xe2\xf1\x05\xaf\x2e\xcf\xbd\xa9\x4e\xed\x25\x55\x8b\xf5\x76\xbb\xcd\xda\xf0\x07\xaa\xf7\xa8\x8d\x7b\xea\xe3\x6e\xfd\x4a\xe7\x68\xd2\x77\x77\x9e\xfb\xc9\x4d\x15\x34\x60\x70\xb4\x86\x1c\x4d\x0a\xc5\x80\x92\x04\xce\xa0\xa0\x6e\x4b\x9c\x02\x39\x84\xac\x28\x36\x70\x80\x38\x43\xf0\xa2\x50\x32\x14\x95\xb2\x34\x32\x81\x20\xdd\xdd\x2e\xbb\x2e\xe6\xb6\xcb\x3c\x5d\xf2\xac\xc0\x9f\x9d\x7f\x9a\x3a\x63\xed\xb1\x66\xd5\xce\x7c\x5b\x62\x5d\xba\xe9\xb3\xca\x1d\xc8\xf7\x77\x72\x97\xbc\x78\x5d\x05\x90\x24\x75\x08\x35\x5a\x80\x74\xc4\xfb\x16\xd4\x78\xdb\x77\x44\x02\x20\x87\xb0\x6d\x12\x50\xa4\xef\x69\x34\xcd\xd8\x96\x1a\x87\x3c\x61\x30\x89\x41\x90\x4d\x4e\x65\x9b\xc2\xcf\x1e\x5d\xb0\xa3\xb0\xe1\x83\x0e\xaf\xd8\xba\x74\x87\x6b\xc1\xc1\xed\xcf\x3f\xbe\x96\x7f\xf8\xba\xb6\xca\xf2\x11\xc9\x35\x90\xd0\xe7\x75\x0d\x38\x16\x2d\x98\xc0\x07\x02\x0c\x80\x8f\x43\xc5\xa3\x24\x12\x20\x95\xe6\x78\x89\xa5\x05\xc1\x14\xc8\x30\xe2\x02\xde\xf3\x7c\x9b\xc7\x6f\x86\xfd\x09\x5d\xca\x15\xbe\x90\x61\xfb\x2e\xdf\xf9\xdc\x6f\x3d\xae\x4a\x4f\xfa\xdd\xb2\xc3\xce\x0f\x7e\x52\xa8\x43\xb5\xea\xdd\x4f\x14\xe8\x90\x76\xf4\x55\x2a\xa4\xb6\x0e\x65\xaa\x30\xa4\x5c\x5f\x20\x1c\x23\x72\x41\x6c\x9b\x72\x18\xda\xb1\x61\x11\x04\x4b\x62\xc9\x61\x11\x4f\x70\xaa\xe2\x08\x8a\x4b\x47\x50\x33\xdf\x74\x78\x8f\xb2\x56\xaa\xb6\xfc\x69\xd1\x6c\x87\x7b\x1d\xcc\x34\x68\xdf\xb9\x56\xd3\x26\x55\xce\xdf\xfb\x65\xc3\x9c\xdd\x8c\x35\x19\x07\xfc\x52\x3b\x4f\x92\xe7\x27\x1a\x0f\xf5\x80\xe3\xd4\x08\xc9\x22\x86\xac\x4c\x62\xd1\x27\x14\x5e\xf2\x63\xa4\x9a\xc8\xe6\x61\xec\x45\x0c\x1f\x53\xd8\xf6\x24\x2a\x0e\x64\x90\x4a\xbb\xac\xb5\xdf\xbe\xff\xf1\xd2\xfd\x99\x81\xd5\x16\xe6\xed\x29\x37\x1b\xd7\x7e\xd4\xbb\x4f\x7f\x1f\xb4\xb8\x40\xe6\xea\x7d\x1f\xbc\xbb\xb4\x14\x93\xdc\xdc\xc3\x8d\x19\x17\x45\xbc\x0e\x43\x49\xd4\x60\x60\x48\x9c\xe4\x44\x0c\x63\xfa\x22\x25\xfd\xab\xb8\x88\x58\xd5\xf1\x18\xd5\x11\xa1\xa9\x84\x00\x18\x8c\x20\x26\xce\x3d\x0e\xd4\x5a\x3e\x63\xf8\xdd\x7d\x55\x97\x7d\x7c\xa3\x2d\x71\x28\xcf\xe9\x1c\x07\xe6\x3a\x23\x2a\x59\x4d\x72\x0e\x86\x8b\x41\xfa\x9d\xa7\x92\x6b\xd3\x06\x87\x6d\x68\xb3\x91\x06\x80\x60\x7b\x1c\x85\x28\x3a\x8c\x03\x87\x55\xbc\xc8\x72\x08\x00\x09\x91\x14\x79\xd2\x30\xb1\xa6\x68\xbe\xac\x44\xfe\xeb\xe2\xcc\xff\x38\xbd\x62\x3b\x7f\xaa\xb8\x60\x7e\xe3\x76\xc7\xc9\xcf\x66\x2e\xdd\xf9\xf6\x9a\x1e\xcb\xca\x14\x5a\x33\xa1\x60\xa3\x6d\x39\xe2\xcf\x2e\x8f\xa8\x95\x76\x20\x4c\xe2\xc1\xbe\x4d\xf1\x86\x19\xd8\x06\x08\xc9\x90\xe4\x59\x96\x94\x38\x96\xf5\x49\xca\xf3\x3d\xcd\x03\xb4\x84\x39\x85\x95\x80\xe9\x44\x16\x21\x20\x3e\xe2\x79\xee\x4d\xbb\xbe\xf1\x43\xc9\x22\x5f\x76\xea\xf9\xd5\xd9\x9d\x3d\xb2\x6e\x1f\x5a\xfb\x33\xae\x4d\xed\xda\x8f\x3f\x5d\xf2\x64\xf4\x81\x1f\x0e\x87\xdf\xe4\xdb\x9b\x5c\xbb\xb6\x58\x9d\xd5\x62\x8b\x95\x14\x45\x89\x09\x04\x42\x48\x86\x12\x65\x38\x30\xd2\x5c\x2a\x62\x45\xc6\xd3\x3d\xd2\x90\xdd\x40\x43\x1c\xb2\xa2\xe8\xff\x64\x79\x09\xb4\x7f\x9f\x7e\x3d\x62\xa7\x77\x7a\xdc\x9a\x97\xcb\x4f\x73\x73\xca\x2c\xfc\x6c\xda\x17\xc4\xb7\xed\x87\x34\xcf\xfb\xb2\x1d\x73\xe3\xfa\xc4\xa3\x49\x1e\xe2\x88\x7e\x14\x87\x58\x34\x0c\xcb\xf3\x6c\x0a\xf0\x8a\x8e\x63\x5b\x37\x09\x4f\xb2\x94\xd8\x89\xed\x30\x64\x2c\xa0\xc4\x2a\xc7\xda\xa2\x17\xb1\x26\xc9\x27\x46\x4a\x8d\xa8\xd1\xd9\xfc\xa5\x73\xc3\xca\xd3\x5a\xf2\xd9\x06\x95\x68\xf4\xd3\xf6\xd6\x2b\x6e\x7c\x78\xf7\x0a\xff\x4d\xeb\xa6\x57\xf2\xa5\xc0\xb4\x13\x94\x25\x16\xf4\x23\x18\xd3\x74\x58\x2c\xbb\x1e\xeb\x45\x28\x60\xe3\x48\xd0\x4d\x4f\xf7\x2c\xd2\x24\x14\xcb\xc4\x84\xc7\x13\xb6\x6d\x23\x1f\x45\x12\xa2\x1d\x19\x44\x6f\x46\xc5\x59\x3b\x16\xb6\x7d\xd2\x2b\x63\xdb\xa5\xdf\xf6\xf5\xa8\xc3\x1b\x9f\x2e\x68\x5d\x9b\xbc\xd7\xf3\xa7\x43\x53\x37\x5d\xf6\x77\x1f\xeb\x91\xe4\x32\x80\x16\x39\x0e\x29\x12\xe3\x32\xb2\xec\x93\x0c\x6f\x6a\x11\x52\x55\x68\x04\x22\x4f\x73\x91\x40\x42\x4a\x74\xc8\xc8\x36\x23\xde\x26\x64\x9b\xa6\x6d\x3d\x78\xd3\xa6\xef\x67\x2d\xd2\x91\xd3\x72\x7e\x3d\xf7\x21\x79\xe4\xfb\xba\x6d\x6a\xc4\x1b\x66\xa4\x64\xaf\xb1\x69\x70\x79\xb0\xf2\xb3\x22\xf1\x9a\x24\xef\x8c\x28\x94\xea\xf2\x11\x14\x45\xda\x54\x3c\x5a\x04\x66\x84\x11\xc2\x66\xec\x8b\x14\xef\x89\x8a\xe0\x39\x8a\x17\x61\x47\x14\x79\xd6\xf1\x02\x95\xd0\x05\x21\x71\x77\xa5\x4c\xa6\xee\x0b\xaa\xf6\xe9\xcc\x7c\xda\x8b\xaf\x73\x67\xef\xa7\x17\x87\x5f\xa8\x53\x37\x43\x8b\x3d\xb7\xe3\x3b\xb7\x3e\x9d\x30\x7a\xcc\x77\x49\x36\x0e\xd1\xe4\x99\x80\x80\x26\xef\x8a\xae\x41\x04\xae\x4d\xf0\x9e\x29\xeb\x1a\x4b\x73\x04\xed\xc9\xd0\xf3\x03\xdd\x50\x58\xdb\x0b\x63\xd3\x67\x5c\xc6\x54\x12\x3f\xc5\x81\xee\xbd\x66\xba\x3f\xbd\x4f\xab\xaf\xab\x0f\x9a\xd0\x0a\x8f\xcf\x51\xb3\x5b\xad\xcc\x63\xde\xdd\x21\xce\x19\xbc\x6e\xac\xf5\x45\x92\x59\xab\x19\xd9\x08\x45\x4d\x26\x39\x95\x08\x18\x97\x16\x09\x56\xd6\x44\x85\x21\x74\x60\xa8\x8e\x0b\x21\xe7\x11\x64\xe8\xd0\xb1\x1b\x78\x91\xa2\x13\x20\xe4\xe3\xc4\xa5\x40\xee\x06\xe2\xa4\xb6\x74\x30\xa4\x45\x87\x67\xe5\x72\x7f\x4f\xec\xaa\x76\x7e\xd6\xf5\x8a\x85\x8e\x6c\x69\xdc\x54\xdc\x32\x74\xd6\xb3\x71\x49\xc6\x5a\xd2\x8c\x63\x9a\x41\x8c\xfc\xd8\x76\x64\x52\x0f\x29\x3f\x46\xd8\x40\x24\x8e\xb4\x58\xa6\x59\x08\x2c\xa0\xc9\x16\xe9\x99\x5c\xa4\xa9\x22\xc0\x86\xf3\x66\xda\x54\xf6\x83\x39\xbb\xe6\x95\xbd\x33\xbf\xeb\x84\xbb\x27\x5a\xf7\x5d\xb1\x69\x74\xad\x21\xeb\x27\x0c\x7a\xfb\xd9\xf2\x73\x17\x32\xfe\xd5\xa3\xf1\xfc\xe4\x26\xa8\x30\x20\x63\x5e\x14\x75\xd7\x13\x90\xcd\x90\xa1\xc6\x99\x0c\x17\x07\x21\x67\xb2\x34\x29\x50\xa1\x2d\xca\x8e\xa9\xc5\x96\x29\xe3\xc0\x62\x3d\xd6\xc0\x74\x2a\x08\xf0\xd5\xda\xad\x06\xed\x97\x9b\x0f\xdb\x34\x3d\x58\x39\x53\x99\x6b\x19\x66\xa4\xcf\x29\xcd\xca\x95\xa9\x4a\xd9\xa7\x93\x87\xe1\x2f\x77\x30\xaf\xdd\x8b\xbf\xa6\x6a\xc5\xee\x5c\xb3\x81\x0c\x79\x6e\x71\xaf\xf0\x4c\xff\xa5\x9f\x3c\x9f\x5a\x62\x41\x5d\x7b\xd7\x95\xaa\x75\xf6\xf6\x9e\x90\xf6\xed\xe3\xc4\x98\x3e\xdb\x0b\x25\x8d\xb4\x42\xd7\x8b\x1c\x36\xf2\x21\x12\x84\x80\x30\x23\x60\xfb\x28\x64\x74\x64\xb8\x18\xab\xa4\xa1\x0b\x08\x87\x36\x94\x35\x45\xa0\xde\xbc\x97\x1d\x8f\xb8\xc3\xcd\x56\x8f\x2a\xdd\xe2\x64\x93\x9f\x9f\xb7\x5b\x38\x6f\x66\xbf\x72\xd5\xeb\x0e\xec\xf1\xab\x31\x7b\x1c\x9f\x2f\xd3\xd9\xb4\x37\x78\x12\x86\x7d\x59\x13\xa2\x48\x13\x49\x1d\x1a\x88\x0b\x42\xe8\x61\x53\xe0\x54\x56\xd1\x00\xe4\x08\x5b\xd4\x5d\x18\xc4\x52\x48\x3b\xbe\xca\xd9\x02\x6b\x8b\x48\xb4\x12\xfb\x9b\x7b\xb8\xf7\xd8\xe7\xad\xf7\xf8\x1b\xab\xd6\xa9\xd5\x7b\x5a\xa5\x1b\x19\x77\xac\xc8\xb7\xd6\xbc\x64\x5c\xfd\x68\xd1\x8e\x83\x2f\x06\x66\x49\xf2\x46\x3d\x17\xd2\x14\x14\x55\x47\x8b\x44\x55\x10\x1d\xd1\xf7\xd8\xd0\x74\x54\xc5\xf3\x68\x86\x90\x19\x20\x72\x0e\x13\x3b\x8a\x4e\x85\xb1\x2c\x08\xac\x02\xe4\xc4\xc7\xde\x90\x71\xf2\xe9\x27\x33\x2e\x33\x4b\x8e\xe2\x6d\x93\x1a\xa7\x2f\xb0\xed\xee\x7d\x5b\x27\x0a\x35\xf1\xda\x5d\x7d\xb1\xb1\x71\xe5\xb4\xfb\x9b\x84\x06\x62\x84\x81\x21\x60\x2b\xb0\x03\xcd\x14\x03\x39\x26\x09\x8f\xc4\x8c\x0d\x39\x60\x52\x3c\x44\x11\x0b\x09\xdb\xd6\x01\x23\xb0\xbe\x20\xd8\x06\xe9\xbc\x06\xfa\xfc\xcf\x57\x30\xc8\xff\x6b\x40\xff\xec\xe6\x27\x35\x46\xe6\xee\x31\x2c\xf7\xdd\x83\xd9\x8f\x36\x5f\x4a\x2a\x29\x7b\x9b\xc2\x21\xcb\xdd\x31\xed\x5e\xff\x93\x7f\x8f\x71\x0f\xaf\xb8\xbb\xaf\x39\xfb\xea\xf3\xc7\x93\x0e\xd4\xe9\xd2\xbd\xc4\xce\x63\x79\x2e\xb4\x3f\x5e\xb7\xcb\x77\x23\x27\xed\x69\x97\x76\x22\xf1\x84\x77\xc3\x8b\x12\x6b\xf9\x92\x29\x0b\x94\x8e\xfd\xc8\x8e\x08\x56\x07\xae\x40\x11\x04\x80\xa1\xeb\x58\x1e\x47\x63\x09\xca\xbe\x6c\x11\xb1\x2c\x29\x41\x8c\xf5\xc4\x4e\xb5\x50\x8e\x82\x1d\xd7\x3c\x1a\x21\x3c\xaa\x28\x5d\x6f\xfd\xb2\xea\xca\xeb\x3d\xb7\x75\xfa\x7e\x48\xc6\x9c\xa7\x1a\x2e\x7b\x95\xaf\x7a\xcf\xb3\xc9\xbd\x1b\x39\x34\x3c\x23\x24\x61\x24\x46\x84\xe6\x49\xb4\x8c\x14\x5a\x50\x18\x8e\xa3\x28\x8d\xf3\x02\xde\x13\x0c\xce\x8c\x35\x0d\x09\x80\xe5\x5d\x01\x72\x42\x02\xcc\xfd\xaa\x7c\x79\x5b\xae\xbd\xda\xaa\xd3\xca\x91\xe9\x9f\xd6\xbd\x51\x32\x4f\xed\x69\x07\xe1\xe4\xab\xc6\xa4\x41\x45\x76\xeb\x23\x2e\xd6\x4d\x3b\xe9\x48\x62\xa8\x96\x2d\x44\x8a\x49\x70\x9a\x25\x84\x81\xc5\x86\xbc\x0d\x02\xd6\x8c\x35\xd2\xc5\x1e\x0c\x04\x4f\x0f\x83\xd0\xb5\x9c\x40\x0c\x88\x08\xc5\x44\x24\xe9\x46\xe2\x4c\xb2\x5c\xe7\x59\x7f\xfc\xf0\xe5\xa6\x42\xc5\xcb\xff\xf5\xf7\x06\x6a\xf4\x8b\x2f\x17\xcd\x48\xe9\xb4\xb2\x4a\xa9\xca\xf5\x9a\x2e\x1c\xba\xa3\x44\x92\x93\x05\x1b\x09\xae\xa3\x5a\xb2\x43\x8a\x3c\xa3\xd1\x01\xa7\x11\xb4\xec\x31\x32\x0f\x5c\xc5\x74\x2d\x4d\x15\x4c\xd6\x61\x64\x64\x3a\x32\x21\xe8\xae\x13\x1a\xda\x9b\x99\x64\xcd\x2f\x3f\xce\x51\xbe\xb2\xd2\xa6\x4a\xba\x0c\x9b\x6e\x0e\xba\x6d\xee\x88\x45\x54\x3f\xe0\x9b\xce\xba\xf1\x7e\x89\x43\xd5\x4a\x26\x19\x73\xaf\xf8\xa2\xca\xdb\x06\x24\x38\xc9\x8a\x22\xcb\xa2\x44\x51\x16\xfc\x98\x32\x0d\xca\x0f\x3d\x49\x91\x31\xe7\xba\x58\xd6\x3c\x8b\x54\x1d\x92\x90\x23\x2f\x01\x0f\xf2\xaf\xdb\x7a\x36\x7b\xd2\x71\xd9\xe7\xd4\xea\xfe\x13\x2b\x1f\x5f\xb9\xee\xd2\xb1\x23\xf7\x1a\xe4\x34\x98\xcf\xba\xf4\xae\xc8\x9f\x98\x90\x64\x45\x29\x4d\xc0\x02\x20\x35\xce\x62\x65\x59\xd5\x79\x9a\x74\xd4\x10\x3a\x90\x57\x7c\x81\xd7\x19\x2a\x22\x0c\x20\xeb\x04\xe3\x61\x8c\xf4\xc8\x05\x80\x27\x9c\xc4\x2e\xf2\xda\xa6\x21\xa5\x5e\x34\xda\x71\xae\xe1\xe4\xad\xda\x07\xcd\xdb\xad\xe4\x5f\x65\xab\xff\x63\x89\x33\xd9\x9f\x66\xbc\x5e\x3c\xcf\xb9\x7b\x69\x47\x6a\x27\x16\xe1\x46\xb1\x45\xd2\xac\xc0\x29\x6c\xc4\x42\x5a\x0b\x1d\xcd\x62\x20\x47\xa8\x26\x25\x08\x1a\xa5\xd3\x7a\xec\x70\x0c\x0a\xe5\x48\x30\x69\x18\x44\x26\x96\x13\x57\xfd\x8b\xf7\x17\x5a\xd2\x87\x2a\x35\xa7\x3b\x75\x67\x47\xbc\xe8\x9b\x1c\x63\xef\x2e\xc8\xd0\xa7\xd8\xfa\x4d\x15\x26\xe7\xb4\xe2\x81\xad\xd3\x3e\x15\x4d\x78\xec\x50\x03\xac\xeb\x98\x8c\xed\x6a\xa1\x42\x2b\x22\xa9\xe8\xa1\xa7\x58\x91\xef\x8b\x21\xe2\x58\x11\xfa\x6a\x14\x9b\x6a\x28\xa8\xa6\xa8\x85\x74\x6c\x1b\xa9\x90\x98\xd3\xe7\x47\xe5\x19\x31\x3f\xdb\xe9\x4a\x23\xa4\xc7\x55\x1a\xe9\x73\x17\x67\xed\x36\xad\xd8\xad\x17\x95\x78\x5e\xfa\x80\xd8\xd6\xb3\x7b\x92\xb7\x36\x55\x33\xd0\x14\xdd\x04\xa1\x01\x28\xc5\xf3\xa1\xc9\x3a\x81\x11\xa9\x50\xd0\x70\x4c\x06\xa1\xe0\x00\x13\xa8\x34\x4d\x9b\x14\xa4\xd5\xd0\x13\x0d\x23\x71\xb3\xa2\xf8\xe5\x07\x5b\x06\x5d\x7c\xb2\x7c\xed\x8f\xfb\x88\xb2\xef\x56\xec\x30\xef\x71\xd6\x0d\x87\x82\xfa\xe7\x2e\xe4\x4c\xbf\xf5\xc7\x25\xf3\x27\x26\x99\x7b\x3d\x30\x79\x32\x74\xcc\x90\x20\x8d\x28\x36\x80\x68\xb9\x31\xe5\x86\xa4\x43\x51\x91\xe4\xc8\xa6\x22\xa9\xa1\x62\x71\x90\xf2\x90\x19\x22\x82\xd5\xe3\x04\xc2\xc2\x2d\xa7\xf5\x59\x39\x62\x45\xfe\x07\x93\xe2\x59\xf5\x3e\x7d\x56\xfd\xb7\x85\x5d\xdb\x0d\x2f\x3f\xef\x7e\xf1\xe3\x97\x96\xdc\xc8\x77\x62\x4a\xda\x09\x2e\x12\xa3\x81\x23\xca\xd5\x3d\xc2\x43\x06\xc5\x92\x32\xcb\xe8\x1c\x85\x39\xe0\x22\x5b\x82\x4a\x18\x01\x83\x53\x05\xd6\xb5\x23\x5b\x76\x49\x99\xb5\xe8\x18\xfc\x9b\x0c\xe0\xcd\x4d\xe4\x56\x3f\x4c\x59\x3f\xbd\xed\x16\x6d\xd7\x17\x05\xaa\x75\x28\x4b\xdc\x1c\x3b\xb0\xf6\xa2\x7c\xfb\xe2\x5d\x37\x7e\x6d\xf3\xf6\xf1\x1c\xe5\xd3\x8e\x59\x4b\x18\xcc\x0d\x41\x88\x91\xe1\x48\x1c\xcb\xa9\x00\x98\x86\x1e\x09\xbc\x6d\xfa\xae\xe4\x9a\x06\x74\x22\xcf\xe7\x91\x47\x39\x9a\x66\x38\x71\xe4\xd2\x56\xe4\x43\xeb\xcd\x12\x7a\xf6\xf6\x53\xdb\xc6\x54\xfb\xb8\xe6\x8e\xf4\xbf\x6e\x3e\xdb\x60\x02\x56\xb5\xfa\xe9\xfb\xde\xeb\x3d\x62\xc9\xe9\x36\xb7\xe6\x65\x1d\xb4\x3d\xb9\x4f\x91\x61\x4d\x92\xf6\x7c\xcf\x15\xb1\xce\x79\x1e\x14\x70\xa4\x88\x2e\xcb\xba\xa2\x2e\x38\x82\xc0\x21\x19\x47\x36\x1b\x86\xba\x8d\x31\xa5\x22\xd6\xd6\x50\xba\xff\x57\x65\xe6\xbf\x8d\x64\xfb\xa5\xf4\x4b\x49\x97\xf7\xf5\xfd\xa1\x68\xc8\xf2\x17\x4b\x1f\xef\xdf\x6c\x36\xef\x53\x7a\x5e\x9e\x63\xa3\xef\x37\x3c\xf6\xf3\xf0\x9f\xad\x96\x75\xf7\x64\xeb\xfc\x43\xd5\xaf\xd2\xbe\xb8\x9c\xd0\x9e\x54\x9d\x93\x98\x58\x0e\x0c\x20\x99\x96\x07\x59\x45\x34\xa2\x00\xb1\x1c\x6f\x22\xc2\x0f\x49\x92\xa6\x9c\x48\x26\x59\xc5\x32\xb0\x16\xc9\x44\x00\x0c\x21\x71\xc5\xbd\xb5\xf0\xbd\x07\x87\x16\xbe\xdb\xf5\xd2\xb1\x3f\x0b\x5f\x59\x3c\xe5\xcf\x02\xab\x8e\xa7\xcf\x56\x90\xe8\xd8\x63\xf7\x7b\x3f\x96\x9b\x9d\x31\xed\x23\xa1\x84\xc7\xb6\x60\x04\x15\x25\xa6\x48\xdd\x06\x0e\x50\xdd\x98\x66\x4c\x36\x60\x69\x9a\x0d\x7c\x5e\xd4\x5d\xd2\x71\x18\x8b\xe7\x14\xcd\xc2\x44\xe8\x92\x96\xc7\x5b\x89\x8f\x3d\x2f\x65\xf1\xe3\xea\xdf\x9f\xd8\xf4\xe9\x8e\x5b\x1d\x0b\xed\x1f\x93\xb5\xc8\xa8\xdc\x1f\xed\x7e\xde\xeb\xca\xaf\x9f\xd7\xb9\xd5\xf5\xd5\x88\xb4\xcb\xe8\x27\x3c\xb6\x18\x45\x2c\xe9\x79\x36\xe7\x99\x40\xd6\x79\x85\xe4\x2d\xce\x31\x45\x1f\x53\x34\xe3\x68\x20\xd4\x6d\x92\x52\x29\x6c\x49\x86\x67\x33\x2c\xa7\x51\xbe\x93\xf8\xd8\xf5\x1b\xcc\xbe\x9b\xb9\x44\xdf\xc7\xf3\xba\x66\x9a\x9c\xeb\xe2\xfe\xdd\x5f\x75\x1e\xd7\x94\xaf\xb9\xe5\xce\x91\x97\xc5\x2a\x5c\x1a\xf2\x47\xda\x17\x3e\x12\x23\xbf\x48\x95\x16\x29\x8d\xe0\x3c\x43\xd2\xb9\x90\x94\x34\x43\x65\x54\x2f\xe2\x54\x16\xd0\x34\xab\x4b\x9c\x6c\x43\xdd\x8a\x01\x24\x94\x20\x16\x58\xee\xdf\x92\xa3\x6f\xe6\x00\xc3\xc6\xb4\xbc\xfe\x79\xf7\xb6\x95\x3f\x9a\xb8\x20\xdd\xc6\xbc\xf8\xf3\x86\x6f\x35\x6e\x39\x22\xef\xae\x6b\x37\x7e\x1a\x3d\xfe\xef\xaa\x6e\x92\xe9\x51\x45\x83\x75\x15\x9e\xa2\x65\x9b\xa3\x04\x92\x57\x79\x39\xf6\x5c\xe4\xda\x0e\x47\x52\x32\x32\x7d\xc4\xa2\x90\xa1\x91\x09\x2d\xa8\x48\xb1\x1d\x06\xe0\x1f\x5f\xf9\x3f\x2f\xf8\xbf\xb5\x09\xfa\xa5\xa4\xe4\x6d\x90\xed\xf5\x17\x3c\xfa\x40\xcd\xee\x63\x0b\x0c\x52\xbf\x2e\x16\x76\x1f\xb2\xfd\x01\xdb\x33\xf7\xa9\x9a\xd2\x5b\x97\x8e\xfc\xd6\xe9\xce\xfd\x2f\xf8\x26\x69\xf7\x53\x89\xa5\xec\x78\x83\xd2\x15\x41\xc7\x9c\x25\x90\x88\x46\x9e\x60\x02\xd7\x65\x5c\x48\xd3\xa2\x20\xeb\x26\xc9\xaa\xbc\x1a\x92\x26\xa0\x5d\x60\x71\xaa\x12\x70\x5a\xe2\xcb\x79\x78\xbb\x63\x8e\x01\xd9\x4b\x8e\xeb\x38\xa5\x7d\x8d\x93\x35\x37\x6e\x76\x3a\xf6\xec\x77\x72\x55\xc3\x2d\x3b\x5f\x4c\xeb\xf8\x79\x4f\x17\x25\xf7\xd8\x12\x25\x88\x2a\x6b\x84\x51\x60\x21\x37\xf6\x68\x9d\x61\x09\x22\xa2\x05\x24\x9b\x48\xf7\x00\x74\x21\x1f\xba\x4c\x10\x7b\x42\x28\xda\x94\xaa\x2b\x02\x91\xf8\xd8\xb3\xae\x36\xeb\xd8\xa3\xc4\xe0\x2e\xc1\x47\x54\xd6\x62\x7d\x9d\xb9\xc3\x99\xb8\xcf\xbe\x9c\x2b\xbb\x50\xcf\xdf\xaa\x56\x0e\xef\x5b\x99\xdc\x17\xec\x3a\x2c\xa5\x13\x61\x28\x79\x8e\x48\xfb\xbc\x6d\x13\x01\xc5\xb0\x0a\xc5\xdb\x11\xed\x84\x01\xeb\xe2\xd8\xe7\x6c\xd3\xf6\x51\x48\x40\xc0\x79\xb4\x98\xca\xb0\xe0\xd5\xcc\xfb\xd7\x2a\xc7\x15\xc5\xb9\x79\x72\xcf\xad\x27\x87\x2b\x72\x37\x5d\xbe\x87\x3f\xb2\xf0\x61\xd3\x31\x62\xcd\xd6\xe3\x6b\xf7\x4c\x72\x55\xea\x1a\x98\x8b\xe2\xd0\x24\x5d\x25\xa6\xcc\x18\x41\xe8\x19\x32\xed\x9a\x96\x1e\xc7\x98\xa0\x69\xd1\x57\x31\xa9\x59\x41\x20\xfb\x1e\xb0\xad\xc8\x4f\x65\x65\xeb\x9c\xf6\xf7\xc8\xf4\xad\x8f\xc3\xf2\x06\xac\x97\xf1\xe3\x6e\xe5\x37\xce\x3c\xf4\xa0\xd9\xaa\x99\x9d\xde\x5a\x5d\xa5\x66\xc9\xab\x97\x2f\x27\x19\xa1\xef\x0a\xb4\xca\x46\x7a\x1c\x29\x18\xba\x64\x6c\x71\x0a\x41\x13\x96\x1a\x82\x90\xa4\x68\xd6\x61\x2c\xc3\x24\x5c\x6c\xb1\x1a\x94\x02\xcf\x25\x04\x2d\x7e\x63\x9d\xee\xbf\xb5\x38\xfa\x35\xca\x98\xe5\xff\x59\xa7\xfb\x2d\x1a\x56\xbf\x4e\x83\x66\xbf\xf7\x7c\xb8\x3e\x87\x7b\xa6\xc1\x81\x42\x2d\x8b\x96\xc9\x52\x38\x20\xf7\xcc\x1b\x3b\x7e\xf2\x95\xe3\x47\x92\xeb\x5d\x29\xa0\x13\x0c\x8b\x6d\x56\xd6\x1c\x4e\xe0\x74\xd9\x06\x41\xec\x71\x36\x8f\x22\xd6\xf5\x05\x80\x23\x06\xca\xac\x4d\x44\xb6\x1e\x9b\x46\xc4\x6b\x30\x15\xa5\x99\xf5\x93\x56\x54\x6e\xda\x60\xf7\xb5\xae\xd3\x27\x4f\xec\x35\xe7\x62\xb6\x03\x93\xbe\x98\x73\xed\x7c\x8b\xb9\x7f\x8f\xac\xde\x2a\x9f\xc7\xa6\x7d\xc4\x90\x98\x70\x90\xf5\x40\x88\x49\x2f\x80\x3e\xab\x8a\x16\x24\x79\x4a\x30\x9c\xd0\x90\x28\x2c\xea\x3e\xe9\x29\x40\x95\x29\x36\x22\x34\xcf\x16\x24\x12\x30\x34\xa1\x24\x36\xa9\xa0\xfb\xb1\xa9\x7b\xfb\xb0\xd3\xc7\x76\x7b\xf0\x7d\xee\xfd\x97\x07\x3f\xcb\x7e\x3d\xba\x35\xf7\xde\xb8\x4c\xa5\x47\xa6\xdb\xb1\x6e\xef\x93\xe4\x7e\xed\x18\x41\x51\xe3\x3d\x03\x70\x48\xb4\xfc\x50\xc6\xac\xca\x45\x12\x70\x44\x82\x91\x35\x59\xe1\x55\x4c\xf3\xac\x2b\x62\x8b\xb0\x04\x22\xf2\x75\xc1\x4b\xa5\x53\xf9\x53\x3e\xa5\x8e\x59\xaa\x6d\xd7\x91\x4f\x4b\xc9\xcc\xe3\x8f\x8f\x5f\x1f\xba\xb0\x09\x75\x7f\x79\x03\xf2\x0e\xa3\x5f\x43\x61\xda\x7b\x34\x09\x8f\x1d\x2a\x86\xc6\xf0\x9c\x61\xd8\xb4\xce\x43\x59\xf4\x55\x99\xf7\xf5\x88\x77\xe9\x58\x0c\xe4\x98\xb6\x38\xc3\x43\x32\x20\x1c\x9f\x55\x0c\x8a\xf0\xd8\xff\x08\xc1\x8f\x1b\xfd\xfb\xc4\xdd\x31\x3e\xb2\xee\xe5\xdd\x1a\x9d\x6b\x65\x5e\x9c\xa7\xc4\xba\xa6\x63\xb6\x6e\x5b\xde\xab\xd3\xd2\x74\x03\x7a\xf9\x0b\x43\xef\x8f\x41\xfd\x52\x5e\x3d\x7e\xf5\x6a\x42\xa9\xd7\xea\x84\x32\xed\xb3\x9f\xac\xb1\x74\x2f\x4c\x37\xa4\x18\x98\x85\x9b\xf4\x19\xd2\xfe\x03\xba\x63\xc3\x22\x45\xf4\x8f\x1b\xb7\xaa\x75\xf7\x4c\xbe\x24\xf7\xf7\x69\xa8\x19\x62\x40\x60\x11\x44\x1e\xe3\x6a\xb6\xa6\x05\x64\xac\xfa\xaa\x89\x55\x5a\x0a\x29\x87\x71\x50\x1c\x4a\x04\x6b\x7a\x5e\x18\x44\x08\x92\xd6\x9b\x3d\x9d\xad\xcf\x9b\x3e\x2c\xf8\x9d\xbb\xff\xcf\xc2\x03\xb6\xb6\xf8\xa5\xd6\xf5\x43\xea\x9a\x47\xbf\x7e\xef\x9f\x7a\xf8\xb0\xfc\xae\x0e\xe8\x59\x92\x01\x9c\x8e\x47\x05\x82\xa2\x72\x34\xaf\x38\x92\xc4\x69\xc8\x20\x25\x01\x98\xae\xe8\xb1\x24\xe3\x1b\x86\x47\x50\x50\xe6\x54\x9e\x67\x45\x02\x3a\xb2\xad\xea\x38\x71\xf7\xac\xf3\x98\xbf\xab\x7d\xfe\xa4\x66\x96\x61\xb3\x27\x5d\x5f\x9f\x63\x75\xf7\x62\x0f\xb2\x9f\x7e\x74\xc5\x9d\xf2\xd9\x89\xbd\x56\x59\x71\x46\xda\x7b\xc8\x89\xf9\x6f\x5d\x39\x62\x43\x5e\x92\x65\x51\x60\x01\xf0\x09\xdb\x22\x2c\x27\xf6\xe9\x00\xab\x92\x6c\xc4\x96\x43\x7b\x1c\x17\x0b\xb1\xed\x03\xd5\x67\x23\xcd\x14\xde\xfc\xd2\xab\x2a\x3c\x9f\x70\xb0\x4a\x9d\x7e\x59\xc7\x0c\xa6\xae\xbf\x04\xcb\xda\x1b\xcb\xfa\xb4\x46\x0f\x7f\x18\x7f\x24\xdd\xa4\xe9\xe5\xf8\x24\xef\xff\x91\xbe\x62\x11\x1c\xef\x93\xaa\x14\x07\x96\xa3\x33\x9a\x81\x3c\x57\x82\x81\x21\xca\x40\x14\x80\x17\xd2\x91\x6a\x29\x2c\xb0\x28\x86\xf1\x0d\x8d\xe5\xd5\x37\x8b\xc8\xdd\x85\x26\x1c\xab\xd8\xf8\x50\x4e\x23\x37\x91\x65\x70\xd3\xc6\x29\x73\xbd\xd3\x17\x4e\xcc\x98\x7f\xf9\xb7\x15\xd3\x6f\x4c\xab\x35\x2a\xb9\x75\x0a\xe7\x4a\xc8\xa7\x14\x5d\x91\x74\x09\x79\x84\x01\x94\xc8\x10\x55\x47\xc6\x32\xd6\x78\x59\x74\xe2\x10\xd0\x84\xad\xeb\x84\x0b\x35\x91\xb6\xb1\xac\x73\x5c\x62\x40\x15\x73\xe1\xcf\xfd\x17\x98\xf3\xeb\xc6\xbd\x03\x4a\xf4\xcd\xb0\xb4\xc5\x1e\x7a\xbc\x52\x8c\x38\xbc\x39\xc3\xdc\xc1\xdb\xc7\xd0\x75\x93\x2c\x17\x43\x38\xae\xcc\x98\xba\xc9\x50\x22\x47\xca\x3e\x27\x40\xc6\xb5\x39\x83\x37\x19\xde\x41\xb6\x15\x6b\x22\x15\xb1\x0e\x01\x1d\xcf\xc2\xa6\x41\x13\x01\x1f\xbf\xd9\x18\xa9\xd3\x76\x5e\x9b\x1b\xfe\x5f\x9e\xb9\xf1\x6d\xae\xcb\xc0\xb0\xd0\xd8\xce\xc5\xda\xed\x3e\x3c\x5d\x2b\x77\x76\x81\x30\x65\xf5\xb1\x77\x92\x3c\x2e\xb0\x59\x06\xfa\xb1\x68\x01\x48\x2a\x11\x05\x71\x40\xb3\xa1\xc8\x58\x4a\x20\xf9\x88\xc3\x11\x22\x89\xc0\xb5\xe3\x88\x90\xcc\xd0\x42\xa2\xce\xc7\x09\xd4\x40\xe2\xcc\x39\x26\x5e\x9e\xbc\xab\xfc\x79\x7d\x77\xee\x77\xe5\xfb\x41\x99\x5b\x03\xc4\xf3\xf9\x8b\x32\xee\xd1\x09\x99\x17\x5b\x33\xd3\x4e\x16\x90\xf0\xc8\x2c\x07\x5d\x97\x01\x36\x56\x75\x83\x60\xa0\x19\xa1\x90\xf6\x68\x5e\x44\xae\xc5\x19\x91\x6c\x46\xae\x1c\xd8\xac\x16\x63\x89\x50\x69\x22\x76\x5c\x2d\x4a\x3c\xe1\x50\x6e\x57\x5a\xf7\xf7\x9d\x52\x5e\xb1\xad\x46\x34\x3b\x6f\xa9\x96\xcb\xb3\x79\x4f\x16\x57\x83\x95\xad\xb2\xad\xbf\xb1\x2a\xb6\x9d\x9a\xdc\x50\xa4\x44\x32\x4b\xd2\xd0\x14\x74\x4c\xb3\x5e\x40\x21\xcf\x23\x0d\x12\x12\x48\xf2\x63\x20\x89\x86\x4f\x42\x42\xa1\x44\x85\xe2\xcd\xc0\x0b\xcd\x88\xf1\x13\x7c\xe9\xe9\x4f\xf2\x16\x3c\x5d\xaf\x75\xbe\x67\xb9\xef\xfd\x56\x2d\x65\x45\xfc\x7e\x19\x65\x5a\x31\x72\xd8\x84\x62\x85\x67\x2e\x9c\xce\x57\xad\x9e\xdc\x23\xd3\x8e\x65\x1b\xc0\xf2\x09\xd9\x32\x95\x38\xd0\x1c\x80\xe4\x28\x42\x91\x0b\x03\x2f\xa6\x14\xc2\x32\x34\xca\xe6\x29\x28\xb8\x7a\x88\x68\x4a\xc4\xe2\x7f\xc2\x21\xfe\x73\x60\xd6\x29\x9d\x7a\xaf\xf1\xdd\x0e\x7b\x17\xee\xee\xbf\x7d\xef\x91\xa5\x15\xe4\xef\xdc\x16\xef\xd4\x68\x3e\x3c\xe7\xbd\x1b\xf6\xc5\x3b\x37\xd7\xbc\x96\x22\x9c\x7a\x5c\xeb\xdd\x99\x6f\x59\xfb\x2f\x77\x7c\x34\xaa\xd0\xed\x69\x4b\x96\xdf\x9d\x9a\xfd\x9d\x1b\xcd\x66\x6e\x6e\xb8\x6e\x5e\xf6\x89\x79\x3f\x49\xae\x39\x99\x84\xee\x4a\x94\x86\x22\x1f\xa0\xd8\xe5\xb4\xc0\x72\x20\x0e\x74\x99\xe2\x2c\x86\x60\x4c\x5b\xb4\x5d\x64\x98\xb6\x6d\x8b\xd8\x42\x82\x43\x45\xd8\x4a\x6c\x4e\xdd\x06\x3d\x6d\x3a\xf6\xb3\xfa\x1f\xad\xaa\xa3\xec\xdb\xfa\x68\xcb\xbd\x56\x5f\xcc\x7e\x55\xf7\x83\x9e\x13\x0b\x7d\x7f\xa2\x48\x5d\x7f\x5e\xda\x67\x22\x09\xef\x46\x8d\x71\xe8\x3b\xb1\xa5\x10\x10\xc8\x38\x94\x1c\x5a\x8f\x00\xcd\xd8\x02\xb0\x43\x9d\x94\x39\x49\xd6\x1d\xda\xb7\x64\xc6\x54\x48\xac\x61\x55\x22\x13\x90\x23\xef\xcf\x3c\x39\xc3\xb3\xb0\xde\x90\x75\x7b\x94\xe9\x77\x27\xfd\xf5\xf0\xee\x2f\x53\xb2\x2f\xca\xfc\x8c\x82\x3d\xb8\x16\xd3\x8f\xef\x72\x92\xcc\x32\x4c\x18\xae\x4d\xf8\x2e\x64\x90\x44\x1a\x26\x14\x28\x51\x0f\x7c\xc5\x08\x91\xc5\x4a\x96\x1e\x31\x24\x45\x88\x16\x56\x22\xde\x25\x2c\x33\x92\x18\x9c\x8a\xe8\xfd\x07\xc3\xbb\xd5\x1d\xf9\xed\x3c\xaa\xe3\xf4\x73\x85\xa8\x9a\xeb\x1a\x74\x1d\x52\x62\xfa\xea\xd9\xc2\x50\xe5\xf6\xe9\xab\xcd\x97\x9e\x4d\x3b\x12\x32\x71\xc8\xf7\xbd\xd0\x12\x20\x83\x4d\x11\x92\x64\x10\x44\x0e\x0e\x09\x41\x31\x1d\x89\x45\x81\xee\xd8\x4a\xa4\x02\x59\xb6\x08\x43\x30\x7c\xd2\xf1\x65\x20\x3a\x6f\x86\x7c\x2d\xdb\xf4\xb9\xd2\x2f\xd3\x5e\x4e\x19\xf2\x8a\x6d\x7c\xe0\xab\x96\x73\xda\x8d\x69\x76\x7c\x6a\xe6\xab\x0d\xd4\x52\x13\xde\x59\x76\xe2\xc7\xe4\xe6\x83\x0e\x70\xa9\xd0\xa5\x14\x8a\x11\x42\x31\x0c\x45\x45\x35\xa4\x20\x34\x04\x82\x92\xb5\x48\x8e\x39\x55\xe5\x49\x03\xda\xba\x11\xda\xa1\xa4\x1a\x8a\xa3\x89\x89\xdb\xdd\x79\xee\x76\xb3\x4a\xee\xa9\xf1\xe1\xaa\xcf\x0b\xe7\x1d\xbe\xf5\x55\xa6\xc1\xb7\x33\xcd\xbc\xb9\x6a\xf4\xdb\xa5\xfa\xdc\x9d\xbc\x7b\x43\xb3\xb4\x8b\x87\xa6\x22\xcc\x43\x05\x1a\xe6\x08\x0e\xa8\xea\xbf\x1c\xa1\x64\x50\x04\xa5\xca\x72\x40\x58\x54\x14\xb1\xba\xa9\xb9\x81\x06\x11\x49\x07\xa4\x07\x3c\xd1\xe6\xfe\x2d\x67\xf9\xfa\x97\xfe\x76\xe7\x86\xeb\x2d\x8a\xfd\x52\x6c\xcd\x3d\xd4\xfe\x33\x6e\x4b\x87\x2d\x42\x83\xa2\xc5\xd5\x4f\xee\xb5\x2e\x58\x72\xe7\x88\x7c\x25\x26\x27\xf7\xc8\xaa\x40\x07\x10\x87\x16\x89\x29\x0e\xb2\x0c\x84\x3a\xeb\x62\xc8\xc5\x8c\xa8\xc4\x9e\xc2\x68\x98\x57\xc3\x98\x51\x28\xdd\xf5\x74\x06\x45\x36\x09\x8d\xc4\x5f\xda\x9e\x58\xf0\xde\xf2\x89\xf5\xf6\x66\xf8\xe1\x6c\xdd\xdd\x5f\x2c\xf8\xbb\x98\xbf\xed\xa6\x76\xbd\xc2\x66\xbf\x4d\x9d\x9f\x94\xe3\x2d\xff\x4c\x6e\xa6\x42\x2a\xbc\x19\x93\x0e\x06\x9c\x17\xb9\xba\x10\x90\x1e\x8c\x45\xd9\x32\x04\x33\xb2\x02\x9f\x26\xd4\xd8\x16\x5d\x03\xba\x96\x46\x93\x90\x8e\x6c\xf5\x3f\x94\xf7\xff\x69\xb9\xa3\x51\x44\xb9\x87\x9f\x5c\x1a\x70\x01\x4e\x6a\xf0\xe0\xc9\x00\x65\xf7\xe0\x5d\xc5\xdb\x16\x36\xd2\xbf\x38\x9b\x73\xb7\x79\xaa\x63\x92\x0b\x06\xcb\x56\xa1\x6a\x6b\x24\x12\x18\x4e\xd0\x79\xd5\x0e\x91\x23\x7b\x2a\x60\x38\x82\xf5\x43\xd7\xb4\x30\x0d\x42\xc7\xb1\x48\xd6\xf6\x59\x8d\xf6\x81\x9f\x78\x58\xf6\x56\x05\xe7\x8b\x89\xef\x2f\x3b\xf8\xc9\xb1\xdf\x8b\xef\xbf\x77\xeb\x8f\xaf\xca\xcc\x58\xd4\xbf\xf8\xab\x8a\xab\xf3\x3f\xef\x34\xa0\x32\x97\xe4\x3e\x63\xac\x61\x51\x17\x29\x13\x19\x16\x66\x5d\xd1\x74\xb1\x83\x34\x2e\x32\x14\x25\xe2\xe9\x58\xf7\x9c\xc0\x21\x25\xd1\x87\xa2\xa5\xb9\xba\xe6\x46\x1e\x27\xbd\xe9\xa7\xff\x1c\x33\xa5\x52\x96\x06\xf3\xc7\xbc\x7c\xf8\xa2\xdf\xa5\x06\x0d\x33\x7c\xb1\xe1\xec\x77\x3d\xc2\xf7\xea\x0c\x5b\xba\x74\xfd\xb8\x32\xa3\xd3\xbe\x55\x94\x18\xb1\x1e\xab\x30\x0e\x58\xd7\x96\x68\x27\x60\x80\xc4\xea\xa2\x1b\x61\x87\x92\x4d\x5b\x14\x05\x82\x8b\x29\x3b\xc4\x1a\xab\x13\x24\xc9\x71\x71\x40\xfa\x98\x48\x05\x2d\x66\xe7\xd9\xd5\x61\x4f\xd5\xb1\xfb\x27\x55\x7d\xb0\xb4\xe6\xb4\xed\xe3\xe3\xc5\xb5\x7a\xb5\x1d\xf7\x62\xc3\x27\x5f\x9f\xcd\x71\x6f\x6b\xa5\xeb\xaf\xdd\x4b\xcf\x65\x67\xeb\x8e\x2f\x59\xf5\xf7\x5c\x19\x3f\x5a\xb7\x6d\x16\x58\x33\x68\xc4\xcc\x92\x8d\x25\xbd\x93\x18\x74\x9f\x9b\x2e\xeb\xa8\xb4\x2b\x28\x24\xbc\x17\x22\x14\x05\xc2\x61\xc9\x98\x17\x4d\xca\xe7\x7d\x5b\x14\xbd\x50\x14\xe5\x80\x54\xdd\x08\xda\xa1\x61\x86\x66\x18\xa9\x3e\x34\x15\x97\x50\x49\x18\x9a\x09\xe2\xe7\x81\x4e\x5f\x3e\x5c\x31\x6f\x4b\xd3\x35\xc7\xea\x9c\x28\x77\x39\x27\xc9\xdf\xde\x2c\x6f\x28\x35\xa7\xef\xaa\x66\xe3\x36\x53\x35\x3e\x4d\x72\x55\x04\xd5\x20\x50\x15\x1f\xb8\x80\x45\x2e\x92\x22\x51\xd5\x03\x1c\x38\xa2\x2c\x44\x3a\x69\x98\x26\x82\x2c\x49\xc5\xb2\x2f\x07\x00\x44\x90\x15\x3c\x11\x24\xae\x8a\xb2\xa7\x8f\xbb\xaf\xda\x5f\x77\x41\xfd\x02\xbf\x88\x2f\x4a\xbf\xd5\xa1\x4b\xce\x06\x25\x5e\x34\xfd\x5a\x1a\xdc\xb3\x78\xdf\x2f\x7f\xd8\x92\x5c\x95\x1b\xce\x56\x6c\x8d\x35\x28\xd7\x8f\x20\x61\x11\xa6\xa4\x05\xac\x64\x1b\xac\xe8\xe8\x8e\x2c\xd8\xb4\xc2\xd0\x86\x15\x38\x5a\x08\x75\x99\x74\x18\x24\x18\xff\xf1\x70\xff\x59\x05\xac\x95\xed\xf4\xb5\xd1\x4d\x4b\x36\x7a\xe2\x7e\x47\x74\xf9\x72\xee\x0f\x5f\x0d\xcd\x31\x7c\x90\xf7\x4b\xa5\xfc\xe0\xdc\xd0\xda\x6d\x93\xcc\x47\xc6\x59\x0c\xcd\x01\x2c\x49\x10\xa9\xaa\x46\x41\xcb\xf0\x10\x16\x2d\x46\x60\x49\x4f\xc1\x82\x45\x31\xbc\x4e\x71\x7c\xc0\x58\x46\x84\x42\x5b\x80\x26\xff\x66\x20\x62\xd9\x43\x3d\xb3\xfd\x9a\x7d\x6b\xa7\x56\xe7\x9a\x9e\x68\x52\xa1\x6e\xc3\x83\xf9\x70\xcd\x53\x75\xe5\x9d\x8b\xff\xfa\xa9\xf8\xfd\x3a\x15\x92\x6b\xcf\x21\x40\x81\x1f\x52\xb6\x07\x45\x91\xa6\x45\x82\x43\x9c\x18\x00\x0f\x07\x16\x29\xc5\x36\x96\x49\x23\xe6\xb1\xa3\x7a\x12\x30\x1d\x9d\xb2\x03\x95\x4b\x05\xf7\xd5\xe1\x42\xf8\x51\xc4\xb4\x2b\x78\x48\xd9\xbf\xe3\xef\xc3\xb9\x96\xc1\x81\xa8\xf0\xd3\x93\xc3\x1b\x15\x9c\xc3\xe4\x3f\xf6\xd7\xf1\x30\xc9\xcc\x01\x3c\xc3\x1b\x2a\xcd\xa0\xd0\x0c\x42\x8e\xc6\x88\x33\x54\xd6\xd2\x78\x33\xa6\x6c\x8b\x63\x81\x2a\x73\xaa\xae\xb9\x84\x4c\x05\x11\x05\xa1\x16\xfb\x09\x40\x9b\x77\xea\x49\x2f\xd2\x95\xec\xd4\xfc\xb7\x79\xf9\x61\x86\x65\xf9\x73\x1f\xaa\xf0\xc4\x28\xf6\xe4\x66\xad\x99\x59\xb7\xde\x2b\xde\x6b\x71\xdf\xe4\x66\xde\x86\xa0\xb2\x3e\xc6\x16\x47\x51\xae\xe4\x7a\xba\x84\x04\x81\x8d\x78\x37\xe0\x14\x55\xa1\xb1\x8b\xc5\x58\x80\xbe\x6f\x33\xa1\x6c\x70\xbe\x64\x23\x3e\xb5\xaa\x68\x48\x99\x52\x7b\xfe\x3c\xff\x60\x57\xaf\x47\x77\x7f\x7d\xa7\x5a\xbb\xdf\xaa\xd5\x6c\x12\xcc\x3b\x79\xfd\xc5\x8a\x66\xd9\xef\x8e\x5c\x39\xee\xde\xeb\xbf\xbe\x48\x3c\xf9\x18\xbe\x53\xbd\xfd\xd8\xa6\xdb\xda\x5e\x37\x9d\xca\x2b\xc8\x1f\x16\x0d\x7b\x7c\xfd\x69\xbb\xac\xd7\x6f\xb5\x5f\x57\x6f\xe2\x6b\xb7\x58\xab\xd8\xf8\x87\x9f\xe6\x2f\x37\x7d\xff\xb4\x49\x2d\xbf\x6d\xf9\xf6\xfc\xf4\xcb\x4e\xeb\x63\xef\x94\xbe\x3f\x6a\xf0\x8a\xf3\x78\xec\x8b\xb4\x73\x5c\x24\xbc\x45\xa4\x06\x5e\x48\x29\x0a\xa9\x3a\x36\xe1\xb8\xae\x0c\x58\x05\x23\x45\x34\x6c\x2e\x64\xb8\xd8\x75\x51\x6c\x60\xdd\x12\x29\x4e\x25\xe4\x40\x02\x50\x4c\x00\x89\xde\x57\x6e\xd4\x8a\x0b\xde\xe1\x73\x43\x1b\x9c\x5b\xba\xb7\x70\xad\x49\x3d\x53\x1a\x66\xdd\xa6\x74\x78\x31\x20\xbf\x42\xaf\x99\xd7\x3e\xed\x00\xad\x84\x5e\xc9\xd4\x0c\x95\x62\x31\x0a\x7d\x8f\x37\x7d\xa4\xfa\x4a\x2c\xf3\x8e\xe1\x2a\x96\x48\xc7\x0a\xef\xd8\x1e\xb4\x24\x81\xa7\x18\x42\x57\x98\x88\x34\x55\x3e\x35\x30\x68\xbb\x32\x55\xdb\x6e\x2a\xb9\xb8\xce\xf1\x6c\x05\x0a\x16\x0d\xfe\x54\xa6\x34\xbf\x7f\x9a\x17\xd3\x0f\x7e\xba\x68\xe7\xf1\xdd\x13\xa6\x9e\x7e\xed\x5e\x32\xfe\x7e\xa4\x70\xb6\x57\xcd\xc1\xe1\xf7\xe7\x2f\xba\x72\xbb\x21\x9a\xfe\xf8\xee\xb0\x5c\x79\x1a\xa4\xe4\x5a\x2a\x2e\x59\x78\xba\xc3\xac\x64\xd7\xb6\x92\xcb\x32\x8c\x62\xc8\x96\xa1\x4b\x2e\xcf\x29\xa6\xa2\xe9\x90\x8f\x23\x4f\x67\x80\xc7\x5a\xb6\x63\x12\xb1\x6a\x02\xd2\x24\x74\x1a\xf3\x9c\x9e\x00\x3f\xd2\xb0\x64\xf7\xc7\x17\x4c\xb3\x69\xc3\x8e\xcd\xd2\x5d\x14\x0e\xa7\xac\x69\x79\xfe\xc8\xe9\xfb\x2b\x3f\x2d\xf9\x7d\xba\xc6\x9d\xde\xfa\x3c\xb9\x20\x5d\xce\x8c\x1d\xc5\x15\x08\x2a\x0a\x19\x45\xd7\x29\xcb\x23\x30\x11\x0a\x16\x19\x22\x4e\x55\xdc\x00\x0a\xc8\xc4\x1e\xa3\xd0\xd8\xb2\x7d\x83\xf1\x5c\xd5\x4f\x85\x53\xe7\xad\xf7\x7e\xde\xfd\x6d\xfd\xd2\xd7\x6e\xb7\x9b\x5d\xf8\x65\x2e\xe6\x62\xdd\x91\x67\x99\x0a\x2b\x2a\x7d\x6f\xde\x2d\xbc\x6c\xc2\xae\x76\xed\x93\xeb\x14\x44\x49\x91\x18\x3a\x56\x75\x97\x20\x1c\x51\x97\x44\x96\x67\x11\x6f\xf2\x21\xeb\x20\x8b\x52\x04\xe4\x69\x96\x49\x84\x9a\x49\xc6\x0a\xf2\x0d\x51\xe6\xcd\xc4\x3b\xef\x6f\x8f\xb8\xbb\xe6\x48\x56\xd5\x98\x5f\x70\x42\x9e\x43\xe5\x9f\x7d\xf7\xeb\xe8\x27\x6d\xda\x9e\x59\xc5\x44\x7d\x67\x5c\xa9\xa8\x7c\x95\x5c\x5d\x51\xce\xc1\x6e\x6c\x38\x26\x17\x85\x86\x48\x31\x86\xcc\x29\x02\x80\x36\xc3\xca\x06\x32\x81\x19\xb9\x7c\x18\x5a\x98\x11\x14\x05\x53\xb6\xe1\x59\x8c\x41\x80\x37\x0d\x64\x56\xd1\xcc\x67\x72\x75\x29\x9b\xbf\x7d\xc6\x5b\x9f\x2d\x94\xba\x8f\xbb\x35\xb5\x5d\x8f\xa5\x6d\xd3\x8f\x38\xb2\xf7\x59\xee\x22\x23\xab\xa5\x9d\xd8\x31\x31\x03\x8a\x41\x93\x38\xf4\x28\xac\x6b\xba\xae\x92\x84\x1b\x07\x34\xc2\x96\x1c\xbb\x52\xc0\xd3\x16\xcb\x3b\x9e\x43\x30\x3c\xe2\x15\x4f\x37\x63\xc6\x03\x7c\x82\xc4\x6d\x69\xf9\xf5\x43\xa7\x74\x78\xd6\xc1\x18\xfb\x82\xff\x5d\xa8\x31\x6b\xd5\x7b\xf3\xa2\x6f\x7b\x2d\x39\x5c\x63\x7d\x2b\xeb\xe8\xc5\xa6\xcf\x93\x4d\x8f\xc3\xca\x01\xc1\x2a\x0a\xa4\x58\x68\x8b\xa6\xad\x44\x88\x63\x05\x41\xb6\x18\x13\xaa\x31\xe2\x43\x4e\xd4\x30\x11\x33\x64\x80\x55\xe4\x06\x2e\x91\x0a\x87\x57\x8e\xd2\x59\xa8\xda\xbb\x3a\xbd\x53\xff\xd7\xf4\xf9\x36\x1f\xef\xf2\xca\x3e\xb3\xfe\x79\x8b\x97\xa3\x1e\xbd\x6c\xba\x6a\x48\x87\x35\x63\x92\x4b\x2a\xce\x29\x3e\xf6\x29\x86\xe1\x50\x4c\xea\x1c\xcb\x3a\x12\x15\xe8\x8e\xc1\xfa\xac\x83\xa1\x26\x50\x98\x93\x7c\x81\xd2\x81\xaa\x0b\x96\x65\x4b\xb2\xea\xeb\xa9\xe8\x72\x97\xe9\x71\xb8\xd2\xf0\x31\x13\x1e\xb9\x7f\x97\xd9\x99\xf5\x93\xb6\xef\x7b\x7a\xeb\xef\x0a\x8e\x16\xb2\xae\x9d\x57\x23\xcb\xb9\x1a\xbd\xd2\xae\x5f\x99\x78\xfa\x0d\x61\x44\xc7\x8a\x83\x05\x91\xf1\xa3\x10\x03\x9f\xd4\xa8\x58\xe0\x70\xac\xa9\x6a\x48\x0b\xbc\x47\xa9\xd8\xa0\x34\x17\x80\x80\x65\x6d\x86\xe5\x50\x62\xac\x81\xc9\x5e\x2a\x95\xad\xd9\xb1\xd5\x55\x2a\x3f\x5f\x1b\x7e\xd4\x6f\xec\x94\xfa\xef\xc0\xac\xf7\x76\x2c\x66\x0a\x54\xb9\xff\xf4\xc2\x9c\x72\xc9\x7d\x8a\xbe\x4f\x53\x02\x86\x02\x43\x60\x18\xba\x2c\x07\x7c\x81\x52\x51\xc8\xf0\x41\x1c\x93\x76\x1c\xa9\x16\xa1\x78\x12\x6b\xc8\x04\x96\xa0\x4c\x99\x9a\x80\x53\x49\x2b\x66\xfd\xfd\x56\xb5\x1f\x9d\xe6\xf5\xab\x7e\xde\xec\x58\xfb\xd6\x3f\xf5\x7f\xb1\xa7\xf8\x8d\xb7\x5a\x30\x3f\x56\x16\x7f\xac\xdd\xf0\x69\x15\xe5\xb5\x80\x94\xf5\x54\x8b\xca\x77\x11\xee\x59\x35\xb8\x78\xbf\xdf\x25\xce\x5f\xda\x05\x75\xe9\xd8\xf8\xef\xb5\xb3\x16\x96\x5b\x79\xee\x58\xf9\xe4\xf2\x00\xf1\x74\xac\x84\x02\x13\xd3\x3c\x1f\x18\x1a\xe2\x58\x3a\x50\x04\x07\xea\x90\xb0\x44\xcd\x23\x35\xd2\x55\x81\x2f\x93\xb2\xee\x09\x24\x0f\x21\x0a\xa2\xff\x10\xea\xfc\xbf\x47\x1e\x32\x7a\x5b\xc5\x3f\x0b\xb5\x2a\x15\xcc\xfd\xa6\xe3\x63\xb9\x65\x2b\xbe\xd4\xe0\xec\x4f\xdb\x3d\xea\x71\xb3\x5e\xce\x8f\x90\x36\xf2\x61\x72\xfd\x8d\x24\x42\xcd\x0c\x81\x67\xd2\xc0\xe2\x43\x9d\xb1\x62\x8a\xf4\x23\xc1\xe4\x2c\x1b\x90\xb1\x2c\xc6\x91\x6b\x39\x9e\xe4\x72\x02\xed\x33\xa4\x26\xaa\x82\x92\x38\xb1\xbe\x51\xfb\xdb\xb7\xc7\x3e\x1d\x5f\xef\x2e\x7b\xa0\x28\xbb\xea\x97\x3e\x9d\xef\xfc\x5c\xf6\xbd\x5d\xc5\x9e\x0d\xad\xf3\xe4\x83\xb1\x5b\x3a\xa6\x1d\xf1\x9a\x78\x3b\x41\x56\x11\x50\x22\x81\x73\x64\x64\x02\x81\x54\x02\xdb\xe2\x42\x5a\xb6\x04\x35\x0a\x21\xe7\x2b\x9c\x21\x20\xc3\xa3\xfc\x30\x64\x79\xd5\xa4\x79\x1d\xbd\x99\x92\x3d\xbf\x7a\x77\x9d\x35\x66\xfa\xfd\x94\xb6\x3b\x2f\x76\xa8\x50\x7e\xe8\x67\x51\xb7\xdd\x07\x4f\x92\xad\x37\x1d\x18\x9b\xed\x71\x97\x47\x7c\x72\xbf\x74\xa0\x6a\x31\xe2\xd9\x40\x83\x9e\x2b\x1a\xb2\x15\xea\x1a\xe9\x09\x58\x13\x4c\xd6\xa6\x55\xc4\x3a\x3a\x74\xb0\x40\xd9\x11\x87\x10\xa3\x0a\xb6\x2c\x78\x89\x63\x68\xbe\x3d\x53\xa5\x4f\xda\x2c\x2d\x74\xea\xf9\x4f\xbb\x58\x38\x7e\xff\x84\xf5\x4f\x9e\xac\xbb\xb0\xe5\xeb\x7e\xe9\x6e\x7e\xdf\xe1\xfc\xb9\xb4\x83\x84\x52\x11\x9f\x85\x92\x10\xc7\x74\x48\x29\x86\xa1\xc5\xae\xa1\x86\x01\x25\xc9\xaa\xa9\x84\x3e\xaf\x4b\x81\x6d\xd9\x02\xf2\x28\xc1\x56\x6d\x21\x64\x02\x57\xc4\x09\xb4\x44\x46\x19\x97\x57\x0e\x39\x3b\xb6\x18\x8a\x37\xf9\xe9\x4e\x8e\x19\xf8\xd7\xd1\x46\xed\xf9\xe6\x85\x4b\x1e\x72\x33\x56\xf8\x79\x47\xd6\xb4\x7b\xf6\xc4\x5a\x52\x82\x6f\x03\x4e\xa2\x29\xca\x82\x81\x64\x13\x91\xe6\x89\xbe\xa9\x51\x0e\x2f\xf3\x84\xe4\x4a\x34\xb4\x9d\x58\x26\x39\x5b\x26\xf8\xc8\xe6\x35\x47\x4c\xc0\xb1\x31\x2d\xdf\xd2\x0a\x2f\x2a\x6f\xdb\xd7\x6d\x62\xfa\x63\xeb\x9f\xe7\x2d\x48\x04\x2f\xad\x9d\xe7\x16\x79\x3b\x8e\x7e\x51\xe3\x9d\xc7\x77\xd3\xbe\xd7\x94\x38\x2f\x14\x0c\x28\x98\xa2\xe1\x03\x44\xb3\x20\x8a\xd5\x80\x94\xe4\x58\x72\xd5\x10\xf3\xa6\x1f\x02\xd3\x25\x0c\x1c\x07\xb1\xab\x39\x54\xa8\xb3\x4a\x90\xaa\x88\xc1\x2e\x6e\x12\x5a\x5c\x75\x72\x9f\x77\x5b\xd7\x1c\x35\xaf\xcf\xcc\xcd\x5f\x2c\x6e\x3a\x62\x7c\xf1\x43\xc5\xb7\x6d\xf9\xd0\xef\xad\x0d\xcb\xf4\x20\xdb\xff\x6e\x66\xd5\x2f\xa5\x4f\xe9\xd2\x23\x5f\xc7\x30\xbe\xf5\x6d\xf9\x75\x93\x8e\xdf\x6f\xa8\xdd\xdf\xd4\x25\xe3\xdc\x09\x68\xe4\xe0\x46\xbf\xe7\xda\x39\xa3\xe3\xc2\x76\x13\x1f\xd4\xdb\x96\x35\xb9\x93\x7d\xde\x8f\x64\x42\x24\x54\x10\xd2\x96\xe2\x06\x00\x31\x8a\x83\xdc\x80\x92\x78\xc5\x61\xa1\x8a\x28\xd5\x16\xc3\x58\x23\x2d\x4b\x65\x0d\x20\xd3\x82\x22\xa6\x82\x61\x1c\x18\x0e\xdd\x56\xa8\x91\x33\x62\x61\x97\x7d\x77\xb5\x45\x1f\x56\xbe\x18\x6e\x44\x99\x8b\x15\xce\xc5\x7e\x99\xe3\x68\xe6\xae\xe9\x92\xcc\xaa\x66\x73\x06\x11\xe3\x88\x07\x0e\x32\x58\x89\x17\x6c\x68\xab\x8a\x6b\x48\x11\xd2\x6d\x14\x11\x3c\xab\x4a\x64\x44\x86\x02\x2f\xf1\x51\x28\x03\x9f\xf4\x52\xa1\x7f\xae\x67\xae\xad\x3c\xe6\xf4\x37\x77\xd1\xa4\x6d\xe7\x7f\xa3\xb5\x5b\x7e\xbe\xeb\x0d\x6e\x2f\xa9\xdb\xf9\xec\x40\xfe\xe0\xea\xd5\xbb\x07\x24\x19\xce\xab\x91\x21\xc4\xf6\xbf\x7c\xbc\xa7\xbb\x9e\xaf\x21\x95\xd6\x58\x8a\x8f\x28\x12\x07\x3e\x63\x82\x58\x82\xb4\x4e\xd0\xc8\x53\x95\x80\x61\x5c\xa0\xa7\x02\xbd\xfc\xe6\x9b\xf5\xa3\x5b\xb4\x6f\x74\xe1\xd8\x83\x3d\x4d\x2b\xed\x2b\x4a\x0d\x5a\xb2\x1b\x7f\x31\x5a\xfd\xf5\xc9\x99\xd3\x45\xb5\x1f\x5f\x0e\x4c\xee\x5b\xf7\x85\x48\x76\x0d\x40\xab\x10\x1a\x0a\x46\x24\x44\xb4\x64\x99\xac\xe6\xd1\x9c\x45\x39\x3a\x63\x39\xbc\x2b\x89\x04\xe7\x3a\x2c\x84\xb2\xab\x05\xba\x90\x78\x42\x31\xb0\x9a\xf9\x40\x57\x82\xb3\x7f\x74\x6e\x70\x71\x41\xe3\x9e\xf9\xaa\x7c\xe8\x94\xb8\x59\xa0\xd9\xed\x3c\x7d\x5e\xb4\x6d\x29\x0e\x49\x7b\x7f\x36\x31\x81\x2c\xa6\x45\x16\x32\x01\x88\x6d\xcf\xf4\x68\x01\xd1\x22\x2d\x03\x96\x8b\x1c\x89\x52\x45\xc3\x73\x14\x8a\xf1\x25\xc6\x54\x21\xc9\x73\x14\x88\x38\x52\x7e\x33\x7e\x8d\x2a\x67\x87\x5f\x30\x53\xa7\x0e\xff\xf3\xfe\xdc\xee\xf7\x9a\x3c\xd9\x9f\xfb\x7a\xf6\x2e\x7b\xd2\xed\x1a\xb1\xb2\xe0\xe4\x83\x4f\x2f\x25\x17\x98\xc0\xf3\x52\x24\x45\xba\x44\xa9\xc0\xb2\x62\xe8\x12\x84\x4d\xc6\x84\x24\x9b\xbe\x2f\xcb\x12\x08\x7c\x52\xe5\x64\xc6\x63\x49\x5e\x30\x15\x4c\x29\x48\xf7\xfe\x59\x8b\x1d\x94\xe5\x7f\xd7\x31\xef\x97\xb2\x21\x5d\xb6\x3e\xaf\xe3\x2e\x1b\xf4\x18\x77\xa5\x19\xe9\x35\xaf\x33\xa8\x46\xe1\x86\x3f\x2a\x33\x6b\xb4\x5d\xe7\x77\xbe\x64\xbe\x35\xab\x76\x9e\xb3\x79\x36\x0e\x4c\x2e\x0b\x3a\x17\xb1\x98\x50\x38\x5a\x0a\x39\x59\x0c\x14\x82\x93\x18\xda\xb0\x49\x82\x11\x0c\xcf\xe3\xf8\x98\xb0\x5d\x82\x11\xb0\x11\x4a\xbe\x11\xd8\x3c\x52\x54\x4e\x4a\xfc\x7a\xdf\x2d\xd4\x6f\xc9\xa0\x8d\x85\xbe\x9d\x08\x5a\x3f\x26\x2b\xe5\xe2\x07\xbc\xcc\xd4\xe2\xaf\xe1\x35\x47\xe7\x3f\x95\xf1\xa9\xf6\x8a\xba\x91\xe4\x34\x4e\x77\x28\x97\x62\x05\xcd\x74\xb0\x69\xd1\xb2\xe4\xa9\x28\x86\x36\x6b\xaa\xb1\x4f\x12\xaa\x68\x30\x9c\xa7\xaa\x9c\x66\xc8\x08\x29\x81\x2c\x90\xa9\xe1\xbd\x4b\x66\x39\xbd\x87\x29\x94\x7d\x6f\xdd\xd9\xe1\x6c\x72\xec\xe8\x0a\x1b\x2e\x35\xee\x94\xff\xd9\xee\xc5\x6a\xd1\x3a\xab\x7b\xbc\xda\x97\x5c\x98\x1c\x47\x1b\x24\x2f\xb0\x8a\x14\x46\x01\xe3\x1a\xa4\x8e\x79\x8b\xd3\x38\xdd\xd7\x0d\xe8\x42\x4a\x24\x08\xc0\x10\x5c\xc4\x88\x8e\xc1\xcb\x90\x97\x3d\x60\xa6\xe2\x2b\xd7\xa5\xfc\xba\xab\xf1\xcd\x02\x2c\x9d\xf7\xed\xcb\x5d\x61\xbb\xc6\xa7\xd3\xb7\x79\x2b\xcf\xfb\x0d\xa3\x3e\xd9\x3b\x7d\x4f\x75\xe7\xcc\xe4\x1e\x9b\x95\x04\x14\xfa\x62\x4c\xa8\xa1\x44\xcb\x20\xd0\x0c\x1d\x8a\x06\x54\x14\x93\x55\x90\x49\xa9\x26\x92\x45\x57\x51\x7c\x04\x24\xc3\x15\x79\x82\x13\xbd\x37\xb6\x80\xfe\x5b\x77\xb4\x5f\x4a\xdb\x3e\xe9\xfa\xbe\x1e\x7f\xfb\x76\x29\x52\xaf\xd1\x13\xf7\xee\x10\xbf\xdb\x7e\x66\xcd\xce\x6b\x3b\x1f\xed\x7a\x81\xd7\xf5\x7c\x6f\x76\xd5\x8f\xa2\x41\xe1\xc3\x7b\x49\xe6\xb2\x93\x04\x9b\x8d\x99\x50\x08\xb9\xc8\x11\xb1\x6f\x69\x82\x11\xd8\x92\x43\x92\x94\x18\x86\x40\x88\x8c\x08\x18\xa6\xe0\xdb\x21\x4d\xb2\x11\xe1\xe9\x46\x2a\x10\xe4\x5a\x73\x51\x83\xba\x45\x89\xa2\x4a\x9b\x59\xb3\x36\x37\x73\x36\x57\x3f\x7c\x73\xf0\xbe\x3a\x6b\x8f\x5c\xfd\xbc\x10\xa8\x58\xa0\x67\xda\x9b\x3e\x09\x5d\x6b\xc4\xd0\x40\xe3\x44\xc3\xd5\x63\x27\xe0\xb1\x44\x19\xa4\x69\xc8\x96\xaa\x38\x84\x23\x45\xac\x6c\x18\xa1\x27\x41\x52\x40\x91\x49\x21\xc0\xd3\x61\x6c\x27\xb6\xa9\x3f\x8b\x94\xad\x57\xb5\xdf\xcf\xa0\x49\x57\xb3\x7e\xfd\x35\x15\xa7\x06\x1d\xea\xb5\x3b\xd6\xf8\x55\x9f\x1b\xdf\xc9\x87\xc6\x83\xe3\x49\x9e\x59\xab\x3e\x96\x64\x64\x88\x22\x13\xba\x16\xc9\x6a\x26\x6b\xc9\x61\x80\x69\x3a\xf0\x28\x5f\xb3\x10\x29\xe2\x38\x86\x84\x11\x10\x6c\xe4\x50\x3e\xe1\x68\xa9\xb4\x23\x4a\x91\x45\xde\x7d\xbf\xf4\x2d\x71\xe7\x3c\xf5\x42\x91\x7b\x5f\xad\xcf\xc0\x1e\x5a\x8c\x33\x37\xcd\xba\xb1\x59\xf1\xad\xd9\x4e\x5e\x59\x95\x5c\x23\x61\x18\x91\xa7\x21\xa5\xd0\x88\x05\x21\xaf\x7b\x92\x6f\xf1\x2e\x76\x48\x03\x70\xb1\xc7\x4a\xb4\x6f\x6a\x12\x13\x84\x81\x2c\x63\xde\x61\x09\xe4\x43\x25\xb1\x91\x6c\x67\x86\x66\x3b\x34\xa5\xf9\xa9\x97\x28\xe7\x82\x19\x9d\xab\xad\xbb\x3d\xe0\xd8\xbc\x41\x15\x4e\x6e\x5a\x76\xf3\x71\xbb\xfe\x52\xfd\xb4\xd3\xf0\x25\x56\x7d\x56\x23\x80\x18\x3d\xd6\x1c\x31\xe2\x69\x3d\xc2\xb1\x25\x73\x7e\xec\x23\xde\x41\x3e\xe1\x58\x92\xc8\x58\x72\xac\x2b\xaa\x01\x65\xd3\xd5\x71\x04\xfe\xe1\xff\x1a\x90\xe5\x7f\x37\xb1\xe8\x97\x92\x37\x5b\xba\x4c\xfd\x5f\x67\xb2\x28\x5f\x2c\xd7\xe2\x36\xd9\xea\x34\xe7\xce\x6d\xd8\x95\xf2\x55\x96\x65\x07\xae\xb4\xcb\x57\xf3\xcb\xa5\xef\xcc\x6b\xd3\x19\xcd\xde\x75\x28\xb9\x97\xa3\x1b\x90\xd0\x25\x25\x8a\x3d\xcc\xb8\x8e\xee\x8b\x81\x6b\x32\x22\x13\xd8\x38\xb0\x63\xc3\xe1\x39\x32\xd6\x02\xde\x15\x4c\x96\xd2\x83\x98\x91\x18\x1d\x26\xbe\x9c\x5e\x4f\x7a\xaf\xed\xfe\xdd\x4c\xee\x49\xc5\x62\xf5\x9b\x3e\xf8\x26\x53\x99\x07\x15\xc4\x2a\xa7\x26\xd6\x2f\xbb\xfe\xa2\xda\x3d\xe3\xed\x61\x49\x66\x58\xa5\x35\x8f\xf7\x29\xd7\x24\x09\xc3\xe3\x3c\xce\x21\x35\x59\xa6\x0c\x80\xb1\x4a\xf1\xb2\x14\xd9\xb4\x25\x21\xd1\xa5\x55\x47\xb3\x19\x85\x07\x9c\x67\x24\xee\x49\x54\x19\xbd\xec\x8f\x9f\x66\xbd\x6a\xba\xe9\xc6\xee\x1d\x57\x9a\x8b\x75\x7e\x1f\x85\x7e\xdc\x70\x3c\xc3\xcd\x1b\xe9\x6b\xaf\x9b\xb9\x04\x5c\x4c\xae\x4d\x21\xc9\xd1\x69\x55\x05\x2a\x06\xc8\xd2\x54\x91\x23\x02\x8f\xa0\x0c\x07\xe9\x8e\x23\xa8\x86\xa6\x86\xb6\xc2\x69\x8e\x2b\x72\x50\x27\x68\x1c\x33\x30\xc1\x98\xe8\x45\xc7\xc9\xb3\xb6\x6e\xba\xb1\xb0\xd6\xf6\x87\xb5\x9f\x1f\xd2\x7f\xbf\x57\x9e\xac\xd2\x2c\xff\x53\xfe\xbd\xaf\x27\x7d\xfa\xcb\x8d\x3f\x17\x25\x39\x7b\x66\x2c\x81\x00\xbe\x0e\xb4\xc8\xd5\x43\x64\xd3\x88\xd4\x10\x89\xc3\x98\x09\x3d\xc3\x15\x15\xd2\x0f\x48\x00\x25\x4b\xf0\x30\x4d\xe9\x82\x68\xff\x07\xbe\xe7\x7f\x9e\xc1\x7f\x1b\x10\xf5\x4b\xc9\x90\xae\x74\xe9\xfe\xaf\x13\x40\xaf\x58\xd3\xee\x66\x1f\x21\x53\xc7\x0f\x2e\x6c\x98\xb6\x79\xf3\xb3\x2b\x2b\x37\x67\x2f\x93\x15\x3d\x8c\xc6\xee\x2a\xff\xc3\xf3\x82\x69\x47\x31\x25\x74\xad\x26\x8b\x80\xef\xe8\x26\xeb\x10\xbe\xe4\xd0\xac\x25\xf2\x82\xaa\x39\x84\x66\xba\x31\x44\x80\x57\x62\x5e\x66\x59\x41\x17\x39\x3b\x80\x92\x0b\x1d\x98\x20\xd9\xfe\xb1\x4f\x96\x23\xcd\xcf\xce\xd9\x35\xfc\x78\xe5\x5f\x84\x3c\xa7\xba\x19\x9b\xb2\x14\x29\x3b\xa9\x1f\xed\xfe\xd2\xb9\xec\x6f\x93\xd7\x24\x99\xe8\xcf\x82\x10\x39\x9e\x60\x43\x48\xb9\xa2\xe5\x46\x40\x12\x39\xd2\x01\x96\xc5\x93\x4a\x40\x2b\x02\x32\xa4\x30\xa6\x05\x47\xb3\x01\xed\x42\x86\xf6\x20\x97\x38\x1a\x14\xcf\x92\xb1\xef\xe4\x6d\xb5\x5b\xbe\xdf\x38\xc7\x80\x42\xfb\x6a\x37\xbd\xd6\xe2\xa8\x70\xba\xd8\x9e\xaa\xfe\xdc\xfe\xdd\x6a\x3b\xc7\xd2\x4e\x1e\x95\x78\x4c\x8f\x64\x15\xb9\x32\x96\x02\x05\x98\x0c\x1f\x0a\x9e\x84\x3c\x2a\xa0\x74\x07\x42\x55\x22\x2d\xc7\xf2\x7c\x53\xd7\x42\xcb\xe6\x29\x93\xe0\x55\x52\x14\x13\x3b\x1c\xdc\xe8\xc4\xce\x97\x3f\xd6\xdf\xf9\xfb\xd9\x9b\x87\x4f\x80\xcb\x3f\xb5\x5b\x75\xf0\x51\xb6\xcd\x4b\x96\xaf\xeb\x79\xe1\xa3\xf3\xc3\x2f\xa7\x7d\x27\x34\xf1\x1e\x4d\xa4\x20\x02\xf3\x14\x1b\x98\x32\xa7\xa0\xd0\xe6\x49\x28\xf9\x0c\xa7\x8a\x08\x11\xa4\x12\x39\x1e\x1d\x01\x39\x34\x68\x4f\x40\x94\xcb\x90\x3e\xfe\x87\xcb\xed\x7f\x36\xca\xfe\x5b\x5b\xba\x5f\xa3\xe9\xe9\x52\x5e\xaf\x6c\x94\x82\x79\xbd\x12\xd7\x66\xdc\x6e\x8b\xa4\x2b\x56\xbb\xfd\x64\xe6\xb2\x2e\xdd\x31\x67\xaf\x02\xcb\xb7\x9f\xdb\xd0\x73\x6b\xce\xb4\x0b\xdb\x24\x66\x63\x02\x94\x1c\x43\x46\x52\x54\x92\x93\x01\xc7\x9a\x36\x80\xa1\x2b\xa8\x48\x92\x2c\x39\x36\xd8\x20\x94\x25\x0c\x03\x29\xf0\x03\x51\xc4\x38\x70\x8d\x54\xd4\x15\xf5\x11\xaf\xc4\x6b\x95\x7a\x0f\x58\x5e\xa6\x64\xc3\x1e\xb9\x8b\x5f\x1f\x71\x73\xfc\x5f\x13\xbf\xef\xf1\xe9\xf1\x8f\xff\x6e\xff\xde\x77\x55\x9a\x26\x19\x9f\x1a\x43\xdb\x52\x65\xdd\x04\x8e\xa3\x71\x01\x29\x4b\x3c\x17\x51\x11\xe5\x21\x2f\xd0\x34\xc9\x26\x74\x60\xf1\x4e\x14\xa9\x1e\x20\x10\xed\x42\x22\xb5\xdd\xca\x9f\x9f\xf4\x68\x78\x73\x5b\xe9\x8c\xc1\xa7\x27\x9f\x45\x4d\xf7\x1c\xc9\xd0\xe1\x80\xf4\x43\xf5\xe0\xf0\x07\x53\x7f\xce\xb9\x72\x41\xf7\xd3\x49\x6e\x5e\x85\x11\x29\x3b\x82\x8e\x64\x26\x32\x91\x0c\x45\x07\x41\xc8\x0a\xb2\xa0\x71\x26\xed\x4b\xa1\xa0\xf2\x80\xe5\x69\xcd\x32\xbc\xd0\x96\x54\x99\x4b\x8d\x21\xe5\x64\xa3\x7e\xb9\xca\x35\xa4\x0f\x9e\x2a\xb5\xab\x71\xba\xc3\xbf\x6c\xbc\x90\xad\xdc\xe7\x95\xf2\x10\x2f\xf2\xe5\xdf\x5c\x65\xf9\xcc\xdc\x69\x17\xd3\x4e\xe8\x2a\x29\x92\xf6\x75\x9a\xa4\xd8\x50\x25\x34\xdf\x63\x1d\x89\x67\x24\x8d\x8b\x29\x49\xa4\x90\x64\x53\x96\x1e\xdb\xd8\x53\x6d\x8f\xb4\x80\x8e\x25\x82\x89\xc9\xff\xeb\x77\xfe\x47\x96\xea\xbf\x75\x20\xfb\xa5\x64\xfa\x36\x5d\xfa\xd7\x9f\xc2\xa3\xe5\xc7\xe7\x97\x5c\xb4\x6b\xd3\xb9\x11\xf1\xb5\xd9\x3f\x5e\xb7\xbf\xde\x7e\xe7\x7d\xa9\x67\x5f\xe2\xab\x0e\xd9\x26\x17\xad\x39\x48\x4e\xae\x4d\x91\xf0\x5f\xc5\x9b\xe9\x20\xde\xe2\x80\xa6\xfa\xae\xe4\x31\x30\xe6\x63\xd2\x66\xa1\xe9\x28\x82\x28\x47\xbe\xc8\x93\x9e\x1b\xc8\x02\x92\x0d\x5f\x36\xf4\xc4\x36\xb5\xae\x5e\xa1\x3e\x47\x98\xb3\x53\x3f\xd8\x9a\xe9\x7c\xab\x39\x53\xf4\xfb\xbb\x1b\x76\x1e\xbf\x7a\x7a\x8b\xa6\x9f\xde\xe9\x55\x31\x5f\xcb\x56\x49\xa6\x70\x27\xc2\xc8\x56\x61\xec\x5a\xac\x43\xc4\xae\x69\x11\xaa\xa6\xf2\xba\xce\x78\x16\x01\x22\x9b\x97\x38\x9d\x0b\x8c\xc8\xa2\x7c\x87\xa7\x41\x40\xb1\xa4\x96\x38\x2f\xaa\xde\x3d\x4f\x95\x1d\x4d\x8a\x4e\xfb\xa3\x67\x6f\x62\x00\xd9\xb7\xc4\xfc\x9c\xd9\x0f\x53\x4b\xe7\x90\x27\x07\xde\x6d\x7d\x63\x26\x97\x76\x35\xda\xc4\xfa\xa8\x32\x76\x29\x5a\x56\x65\xde\x21\x68\x47\x25\x7d\xd7\xa2\x55\xca\x36\x04\xd9\xb7\x90\x45\x10\x1a\x14\x42\x59\x31\x14\x5b\x01\x0a\xeb\x53\x01\xcb\xf9\x6f\x8e\xb4\xbf\xaa\xdd\xba\x44\x43\x66\xcb\xdd\xa1\xd5\x89\x31\x1f\xde\x98\xba\xaf\xdb\x01\x67\xfc\xa8\x9f\xe8\x39\xe9\x86\x15\x5f\x18\x57\x38\xd0\x2d\xc9\xf0\x49\xc7\x66\x55\xd2\xe2\x15\xd1\x54\x8c\x98\x05\x10\x84\x1c\xc5\x3b\xae\xa3\x53\xbc\xa8\x58\xb2\x2f\x99\x94\x26\x13\x01\x96\x79\xdb\xb6\x6c\x91\x32\x52\x49\x9c\x17\x2c\xbb\xd9\xe0\xbd\xc3\xab\x07\xa3\x0a\x7d\x87\x35\x1d\xb3\x3f\xc3\x5f\xf9\xeb\x3b\xfb\x53\xde\xbb\x7d\x79\x58\x54\x6b\xff\xc6\x55\xc3\x93\x7b\x6c\x8a\x8e\x54\xac\x8a\x9a\x2c\x91\xa4\x64\xb0\xb1\x21\x60\x95\x42\x48\x8d\x5d\x8c\x90\xa9\xb9\x94\xa0\x51\x3a\x00\x40\x70\x02\x87\xe1\x7c\xce\xf3\xfe\xe9\xe1\x4e\xf8\xe0\xdf\x27\xce\xbc\x6d\xd0\xae\x9b\x63\xa7\xcc\xfb\xa8\xe5\xf0\xdc\xef\x1d\xdb\x56\xa3\xcd\x27\x43\xde\x2b\x9f\xa5\x66\xd8\xe6\xeb\xf7\x3b\xae\x58\xa3\xbd\xdf\x2f\xe5\xd5\xab\xf5\xeb\xff\xff\x7d\xd0\x7f\xfe\x66\xf6\xf7\x4f\x6e\xa8\xde\x8a\xec\x7a\xec\xec\x93\xb2\x33\x83\xaa\xe5\xba\xcd\xe5\x57\xc3\x03\xec\xa3\x1f\x3f\x79\xb7\xc5\xa8\x32\xf5\xd2\xfe\x7c\x13\x77\x22\x5d\xd6\xb3\x2d\x51\x17\x91\xe1\xaa\x71\x64\x1b\x50\xa0\x82\x58\x93\x29\x40\xfb\x94\x13\x61\x96\xf6\xe9\x08\xb3\x86\xc2\x08\xa4\xe7\x03\xe8\x82\x54\xb2\x8c\xe7\x9b\xfa\xfe\x3e\xf0\x83\x13\x5f\xb5\x9f\x38\xf5\xd7\xbd\xd7\x5b\x6f\x79\x79\xa6\x21\x3b\xe4\xd3\x15\xcf\xdb\xe5\xfb\xe3\x18\xba\xba\x6b\x48\x92\x69\x9c\x6c\x93\xc4\x41\x04\x2c\xce\xe2\x5d\x81\xa2\x21\xe5\xf1\x62\x80\x28\xd3\x35\x80\x1f\xea\x02\xef\xf2\x26\xc4\x8e\xa6\x62\x1b\x61\x5f\xd6\xa5\xd4\xd6\xed\xe7\x66\x3e\xfd\x71\xd7\x8c\xda\x13\x56\x2d\x93\x73\x50\x85\x51\xf1\x9a\xc6\xf9\x36\x6d\x5b\x9c\x27\xa5\xb3\x37\x7f\x94\x89\x2a\x2c\x4e\x6e\x2a\x2a\x00\x9d\x35\xd8\x98\xf0\x15\x03\x58\x81\x60\xd9\x31\x8d\x7d\xcf\x66\xb8\x58\x65\x79\x5a\x0f\x6c\xc6\xa3\x14\x33\x8a\x03\x23\xf4\x2d\x8b\xf1\x22\xdf\x49\x65\x34\xe5\xf5\xce\x81\xaa\xb5\xed\xb4\xa5\x71\x54\xbb\xed\x6f\x37\xe6\xe7\xa0\x7f\xdb\x74\x63\xc5\x37\xd3\x6f\x80\xc3\x59\x4e\x74\xea\xff\xbd\xf3\xfa\xaf\x47\x4f\x1f\xfb\xa4\xc0\x60\x29\xcb\xd6\xf3\x77\x56\x0f\xe3\x06\x30\x05\xff\x2c\xe4\xaf\xae\xf9\x80\x95\x47\x2d\x7b\xfb\xe5\x15\xf0\x7a\x5d\x5d\xec\xe6\xf3\x7c\x8f\x2f\x6d\x3d\xb3\xae\xda\x8c\xc5\xdf\x7d\xb1\x30\xef\xd9\x15\xc7\xae\xd7\xbb\x3b\xb7\xd4\xe6\xad\x99\x07\xfd\x72\x34\xef\xaf\xc9\x06\xeb\x13\x9c\xa1\x0b\x4c\x28\xb9\xa6\xc1\xd8\x58\xd7\x54\x86\x62\x34\x11\x47\xbe\x6e\xc1\x28\x06\x31\x26\x68\x68\x50\x21\xab\xb2\x92\x80\xa3\x90\xd7\x13\x6f\xf7\x96\x39\x33\xfd\xae\x51\x74\x4e\xa9\xb3\x6b\xbe\x7e\x7a\xf2\xfd\x01\xb3\x67\xcb\xdd\x1e\x86\xcb\x3e\xae\x3d\x95\xfc\xfa\xfa\xdd\x8f\x0b\xe4\x4d\xee\xb1\x7d\x88\x34\x07\x9a\xa6\x69\xd2\x9a\x67\x6b\x41\x1c\xf3\x81\x6b\x28\x58\x33\x7d\x04\x0d\x3d\xf2\x08\x10\x3b\xd8\xb5\xed\x50\x8c\x90\xa2\x8b\x92\x6f\xbd\x59\x07\x75\x2d\x7c\xa2\xa8\x3d\xc1\x3e\xe1\xbf\xba\xf2\x84\xdf\x31\x7b\x49\xd6\x09\xd5\xe7\xb4\xcb\xde\x87\x5e\x74\xcd\xcd\x6f\x44\xf3\xd2\x2e\xe6\x96\xf0\xa9\x03\x8b\x0a\x80\xa1\x53\xac\x4b\x70\x18\x4b\x34\xd0\x5c\x99\xe0\x29\xdb\x95\x0c\xdd\x8b\x49\xc9\x8c\x15\xde\x46\x96\xc4\x46\x11\x1f\xda\x8a\x62\x60\x21\xc1\x1e\xd8\x5f\x6b\xd3\xe5\x5b\xb8\xfb\x5c\xdf\x68\x09\x5d\xf5\xfc\xe0\x7e\x23\xd1\xbd\x11\x5d\xab\xc8\xbb\xce\xaf\xd9\xf9\xf3\xb7\x35\x3e\xfa\x21\xb9\x35\x35\x19\x70\x11\x13\x07\x58\xd1\x58\x46\xb0\x43\xca\x36\x69\xcb\x43\x48\x61\x75\x52\x12\x7d\x93\x64\x09\x8b\x8c\xfc\x80\xf7\x55\x33\x56\x3d\xc3\x33\x89\x54\x14\x85\x7b\x17\x6a\xf2\xf1\xd3\xaf\xcb\x4f\x31\xa7\x46\xad\x0f\xcc\xbf\x5a\xb9\xd5\xa0\xcf\x0e\x72\x2b\x17\x4d\x88\xf2\xe5\x5f\xb9\x7d\xc6\xfb\x69\x1f\x5b\x26\xce\xb3\x59\x03\xf9\x2a\x17\x0b\xbe\x44\x0a\xa1\x60\xc4\x1a\xed\x52\x3c\x8d\x18\x83\x74\x5d\xdd\x36\x51\x6c\xc7\x9e\x61\x60\x5e\x46\x22\x64\xb1\x2b\x42\x27\x95\xb5\x88\x03\x45\xe9\xfa\xb9\xf0\x3b\xe4\xf4\xb6\xdf\x9f\xbf\xbf\x80\x5e\xf4\x69\xc6\x30\x6f\xdc\x6a\x79\x8f\x2f\x56\x9c\xff\xfc\xad\xe3\xdf\x2e\x7e\x9d\x9e\xe2\x9b\xc2\x95\xbb\x7f\xbb\x7e\x53\x69\x6f\x99\xb7\xf1\xa0\xee\x3d\xeb\xb5\xef\x61\xa3\xc5\x65\x8b\x62\xf3\xbd\x02\xde\xa5\x1e\xc7\x93\x9c\x8a\xa8\x6c\x6c\xa9\x54\x24\x3b\x8a\x14\xb1\x32\x60\xc8\xd8\x07\x1e\x1b\x39\x6c\xac\x22\x21\x12\x7d\x4a\xc6\x36\xe7\x46\x94\xcd\xd0\xa1\x26\x98\x4e\x9c\x8a\xbe\xd8\xcc\xc9\x9f\xef\x3f\xd7\xa8\xc6\xe9\xa1\x0d\xbf\xdb\xaf\x64\x1a\x7a\x73\xd3\xd2\xec\x72\x27\xe1\x58\xf9\xde\x2f\xa8\x9d\x6b\xce\xf4\x6f\x92\x64\xe8\x88\xc0\x7b\xa6\xe0\x00\x5b\x76\x38\xa0\x52\xa6\x14\x58\x22\xe7\x87\x1a\x11\xe1\x30\x44\x50\x75\x14\xc7\x81\xae\x0c\x55\x5b\xa6\x6c\x3b\x66\x30\x97\x0a\x3d\xc5\x9a\x7c\xd2\xbc\x9c\x75\xef\x1f\xdf\xda\x18\x7e\xbc\x0c\xcd\x9c\xb4\xfb\x6b\xee\xbd\x3f\xb7\x1d\xfc\x28\xcb\xc8\x29\x45\x56\x53\xa3\xd7\x25\x37\x72\x18\x50\x08\x58\x2d\xf2\x54\xcc\x78\xa1\xca\x21\x07\x09\x3a\xe9\x29\x8e\x48\x04\x12\xa0\x14\x97\xe4\xd4\x80\xe0\x62\x59\x44\x9c\x19\x73\x81\xef\x6b\xa9\x90\x20\x74\x4b\x19\x5f\xab\xfc\x6f\x25\x17\x5d\xf8\xa5\xc3\xc7\x35\xb6\xec\x1b\xb9\xe0\xd4\x90\x91\xc5\x3e\x96\x96\x1c\xb9\xd9\x5b\x2d\xb6\xa8\x56\x87\x24\xef\x34\x91\xae\x19\x22\xda\x82\x0c\x0b\x5c\x45\xc0\x86\xa6\x84\x98\xb2\xcd\x58\x15\x14\x1e\xc6\x2a\x23\x93\x12\xe1\xeb\x4e\xc4\xc9\x50\x73\x58\x45\xe0\xd9\x37\x7d\x4e\xbf\xca\xcd\x5e\x0c\x1a\xc8\xd4\x4a\x7f\xad\xc9\xca\x23\x97\xba\x05\x64\xf1\x4d\xdd\xfe\x34\xcd\x0e\xb7\x66\x31\xdf\x5f\xba\xd5\x35\xc9\x04\x44\x38\xe0\x2d\x04\x5c\x3a\x14\x45\xca\x34\x3d\x0d\x60\x4a\xe0\x15\xd2\xe3\x1d\xd3\x56\x63\x13\x10\x86\x80\x3d\x05\x48\x41\xac\x61\x0d\xdb\x88\xfd\xf7\x91\x5f\x47\xbc\x5c\x5a\xde\xf9\x91\x9c\xb5\xfa\xcb\x0a\x56\xcd\xb3\xdb\x8b\x7f\xf7\xac\xfa\xb8\xea\xf6\xae\x94\x9d\x55\x4b\xe6\xa8\x55\x7b\x62\xe7\xfc\xed\x92\xbc\x30\xae\xc4\xc0\xa4\x58\xcc\x52\x0c\x20\x3c\x1e\x3a\x7c\xe0\x68\x88\xb4\x54\x8e\x54\x55\x5e\x33\x48\x05\x9a\x84\x47\x3b\x2c\xab\x45\x3a\x83\x43\x13\xa7\x02\x87\x1a\x57\xb3\x54\x99\xd6\x1d\x56\xf6\xfc\xee\xb3\xf2\x7d\xff\x02\x93\x6a\x8f\x1c\xb6\xe8\xfe\xe8\xa2\xf5\xeb\x14\xaf\xd2\x21\xdb\xf4\xe7\xcd\x0e\x24\x99\x42\x34\x14\x90\xca\x5a\x06\x4b\xd1\x1a\x2f\xfb\x86\xec\x84\x16\x6f\x49\x2a\xe2\x62\x33\x12\x8d\x58\x8a\x5c\x23\x12\x58\xc3\x82\x1a\x63\xca\xc0\x07\x50\x7f\x33\x86\x1e\x49\x99\x51\x7e\xdc\x0f\xb9\xfb\x4c\xb8\x7a\x66\x5f\x83\x9a\xf4\xb7\x9b\x2a\x8a\x75\x8a\x6c\x2a\x95\x79\x55\xa3\x87\x6b\xf7\xe5\xf9\x34\xed\xb3\x8e\xc4\xaa\x32\x61\x14\xfe\x2b\x3f\x93\xb5\x98\xa0\x20\xc7\x04\x02\x05\xf5\x48\xd5\x65\xe4\x73\x01\x41\xf9\x08\x9b\xb2\x17\x45\x22\x1d\x9b\x1c\xeb\x5b\x22\x26\xc4\x37\xed\xf9\xca\xbd\x33\x13\x5b\x6f\xe8\xd1\xff\xb9\x7a\x74\x74\x83\x4b\xdf\x3e\xa9\xd8\x26\xdd\xb4\x60\x6b\xf7\xb6\xcd\xdf\xdf\xf5\xb8\xc1\xea\xcf\xd2\xfe\x95\x13\x1b\x07\x1f\x49\x18\x86\x24\x40\x36\x1d\x38\x7a\x68\x68\xb1\x6d\xcb\x40\x50\x31\x1b\x28\x20\x60\x39\x87\x95\x54\x5f\x56\x3d\x4e\xf3\x29\x3b\x84\x36\xa6\x12\x1b\x47\x79\xf8\xe2\x51\x93\x9a\xd5\xa5\xb1\x9d\xbe\x28\xfb\x9d\xf1\xe9\xad\x4b\x45\xbd\x7e\x9f\x33\x2d\xa5\xa2\xca\xd5\xc9\xa3\xf2\xdd\x48\x2e\xfb\x11\x4f\xe2\x18\x11\x8e\x10\x73\x5a\x80\x03\x01\xf0\x0e\x81\x54\x4c\x31\x11\xc2\x3c\x0d\x35\xc1\xa1\x7c\x10\x10\x9a\xe7\xc4\x3c\x43\x68\xa6\xe9\x93\xba\xf6\xa6\x71\x4c\xe9\xfc\xf5\x3b\xe9\x5a\x15\xeb\x7c\xf3\xeb\x25\x7b\x8b\xcc\xff\xa2\xcc\xbb\x8b\x6b\xd7\x68\xf6\x61\x9d\x39\xe9\xa7\xb6\xba\x57\xe1\xdd\x3b\x69\x6f\x34\x27\x26\x41\x90\x74\x2c\x23\x16\x7a\x3e\x69\xb2\x32\x0a\x98\x58\x0e\x63\x47\x84\x32\xaf\x45\xc0\xe6\x75\xc6\x92\x4c\x59\xf5\x18\x46\xe6\x59\x47\x14\xb0\xe5\x25\xc0\x9b\xff\x62\x6f\x7f\x17\xcf\xdc\x77\xed\xa2\x5a\x65\xd2\x82\x3f\x0a\x77\xd9\x56\x21\x87\x46\xac\x98\x9e\xe5\xaf\xb5\xbf\x15\x39\xd0\xdf\xdd\x95\xdc\x4c\x85\xd1\x42\x2f\x54\x55\x87\x65\x10\x8e\x4c\x1d\x47\x4a\x14\xb1\x8a\x46\x51\x0e\x49\xeb\x01\x26\x54\x56\xe0\x54\xcf\x92\x0d\x5e\x42\x12\x6f\x91\x34\xc1\xa4\x92\xa9\x74\xbe\xf5\xf5\x9d\xfe\x5d\xdf\x7e\xd1\x8e\x52\x6e\x3d\xce\x34\xf7\xe8\xda\xda\xe1\x08\x65\xdd\x9e\xee\x75\x36\xaa\xef\xe0\xb9\x63\xc3\xd7\x7f\x2d\xb4\x7a\xd6\xad\x27\x3a\x9f\xf1\x93\xef\xf6\x08\x79\x2e\x7e\x96\xa9\x0b\xac\x9a\x27\xa5\x3c\x7f\xbc\x54\xed\x77\xee\x17\xde\x74\x85\x7d\xad\xc5\x12\x7b\xf1\xfa\xcd\xe5\x46\x74\xdd\x89\xbe\xfc\xad\xe2\xb9\x72\xd5\xda\xb4\xdd\x54\xaf\x71\x38\xe4\xd6\xbc\x87\x1d\xba\x7d\x39\xff\x4a\xda\x01\x09\x89\xd3\x64\xce\xe3\xbd\x50\x88\x65\x86\xb3\x63\x91\xd4\x5d\x91\x21\x74\x22\x44\x32\xf0\x69\xce\xd1\x6d\xce\x84\xbe\xc7\x86\x2a\x6f\x5b\x12\x0f\x5d\x2e\xf0\x13\xa4\xc9\xf3\x2b\xdd\xdb\x72\x94\x78\x72\x78\xfe\x9d\x21\x1b\xc6\x2f\x2e\xb4\xbf\x7d\xbd\xfb\x07\x77\xf7\xdc\x78\xa6\xd7\x91\x0a\xef\xee\x2e\x3e\x3b\xed\x7a\x06\x89\x6f\xd1\x08\xac\x40\x0c\x44\x9b\xf1\x4d\x1d\x63\x2d\xb4\x11\x21\x02\xd5\x21\x55\x49\x75\x4c\x3a\x72\x4d\x99\x14\x23\xd9\x23\x1d\x82\xf7\x45\x3d\xe6\x80\x97\xca\x2d\xae\xa4\x70\x9c\xbb\xee\x92\x96\xbf\x2f\x9d\x5d\xa8\xf0\xd0\x0f\xf5\x3e\x5b\xe6\x4d\xde\xf6\x3d\xff\x70\x48\xd7\x9f\x57\x5f\x29\x18\x4d\x7a\xed\x5e\x8a\x56\xcf\x58\xa6\xd4\x64\x67\xe2\xbd\x77\x2b\xa6\x8c\xea\x45\x6e\x69\x34\x66\x37\xd5\xe1\xb1\xd4\xa9\xf5\x47\xb9\x7e\xa9\x57\xe9\xb7\x94\xe4\xba\x5e\x5a\x86\x20\x0c\x22\x9e\x73\x49\x93\xf1\x14\x32\xd0\x55\x55\x77\x42\x16\x01\xd7\x12\x62\x1b\x7a\x66\xa8\x7b\x36\xcd\xaa\x1a\x19\x2b\xc8\x31\x63\xc2\x7b\xf3\x5e\xa8\xae\x65\x47\xad\xcd\xd0\xb5\xc4\x8c\xcf\xc7\xf5\xbe\xd7\xb6\xf8\x9f\xad\x86\xdc\xfd\x55\x1d\xda\x74\xf6\x96\x65\x0d\x36\xdd\x28\x51\x37\xb9\xc3\x57\xde\x04\x8a\x41\x04\x58\xb3\x6c\x64\x51\x01\x17\x0b\x26\xd6\x15\x3f\xf4\x19\x8d\xf0\xe9\x80\x22\x62\x5f\xf0\x59\x82\xe0\x39\xc8\x0b\x4e\x00\x1d\x2b\xb5\xe1\x6b\xe1\x83\x95\x8e\x7f\x77\x46\xdb\x73\xa0\x13\xf9\x7b\xbb\x89\xea\xca\x42\x39\x17\x5f\x2a\xda\xa3\x54\xbd\x3a\x83\xcf\x14\x38\xa8\x3f\xde\x97\x5c\xd7\x1b\x68\xa1\x89\x64\x87\x63\x64\x4a\xa5\x83\x98\x23\x24\x41\xe5\x18\x49\xf5\xa0\x6d\x92\x84\x6b\xf0\xd8\xa1\x63\x95\xd6\xc2\x48\x09\xa9\x00\x11\x3e\x74\xdf\x74\xbd\x67\x1b\x6d\x38\xb1\x7c\x5d\x89\xc5\xfe\xc4\x5b\x3b\x0f\xcc\xda\x7e\xdf\x5d\xf8\xfc\x20\x7b\xb9\xf8\xd6\xfa\xbb\x8b\x3e\x92\xef\xb7\xfe\x2b\xb9\x2f\x00\xcb\x90\xd4\x62\xd6\xd4\x7c\x26\x84\x1c\x45\xa9\x41\x28\x62\xd1\xa1\xd4\x28\xb4\xb4\x38\x82\x3a\xc5\xeb\x9a\xc2\x90\x1c\x2f\x62\xca\x35\x2d\x8e\xd7\x12\x43\x17\x5b\x56\x67\x56\x16\x7a\xd5\xf2\xbb\x8e\xf7\x8d\x4c\x47\x8b\x9e\xa3\xdf\x7f\xda\x66\xfe\xa3\x0a\xf7\x5b\xb5\x6d\xd2\xba\xf2\x89\x16\x19\x92\xbb\xc9\xc1\x47\x9e\xcd\x5a\xae\x60\xf2\x1a\xa3\x51\x0e\x94\x29\x4a\xd1\x38\xc1\x0f\x42\xe0\xf2\x81\x8b\x1d\x8a\x70\x01\xe7\x22\x01\x79\x22\x65\x88\x06\x67\x73\xf0\x4d\x9b\x46\x5d\x5e\xe5\xfa\x74\x82\x18\xcb\xc7\x47\xcd\xd8\xb0\xcd\x66\x3f\x3e\xf3\xb4\x48\xb6\x9f\x57\x64\x9f\x31\xb7\xd6\xc4\xdf\x8b\x97\xee\x92\x64\x02\x39\x4d\x84\x14\xb6\x78\x60\x01\x23\x90\x38\x3a\x00\x86\xeb\xc8\x3a\x6b\x05\xbe\x68\x53\x1e\xa2\x3c\xcf\x11\x08\xda\x50\x38\xd5\xa3\x20\x50\x2c\x2f\x4a\xc5\xd7\xd4\x5b\x93\x2e\xdf\x4f\x4e\xc6\x79\xb9\x1e\x35\x99\xdc\xed\xf7\xb8\xed\xbc\xa0\xf0\x88\xdb\x2b\x46\xce\x3c\xd7\x6e\x62\x85\xca\x71\xc7\xf9\xaf\x25\x1f\xb5\xbe\x2c\xd7\x43\xbe\x54\x69\xd7\x5b\x3b\x77\x56\xfa\x6a\x42\x87\x6f\x8b\x36\xbf\xfa\xec\xad\xad\xc3\x5d\x3d\xde\x94\x6b\xef\xb3\xbe\x43\x93\x8c\x9a\x50\x14\x11\xbb\x0c\xe2\x34\x25\x66\x14\x44\x30\x3c\xa9\xe0\x10\xb3\x31\x17\xe9\x54\x6c\xd1\x92\x4d\xc6\xc0\xb5\x34\x97\x0a\x02\xc7\x93\x43\x12\x24\x88\xe4\xdd\x8a\x14\xbd\xfa\xb8\xf7\xe3\xfa\xf5\x1e\xad\xef\x78\xb8\x7c\xd1\xb7\xf7\xff\xb6\x8e\x1f\x85\x3d\xd0\xfc\xab\x2f\x7a\x2d\x33\xf6\xf7\x4e\xf2\x1c\x06\xb9\x36\x0a\x30\x61\x8b\x0a\x94\x15\x05\xb2\x92\x89\x08\x92\x36\x6d\x1d\x10\xb2\x2a\x04\x46\x18\x19\x22\xa3\x6a\x50\x27\x18\xdb\xf7\xb1\xe8\x27\xd8\x2d\xe0\xa4\x06\x65\xf7\x1d\x9d\xd3\xe1\x74\x9f\x87\x4b\x7e\xbc\xb7\x20\x43\xe3\xbf\xce\x9c\xf9\xa0\xfa\xc2\xb6\xb9\xa7\x57\x69\x8f\x07\xe4\x4b\x32\x43\x1e\x69\xf3\x00\x71\x98\x73\x08\x03\x33\x0a\x30\x63\xd3\x24\x59\xca\xa0\x89\x48\x0d\x0d\x8b\xa4\x91\x1a\x07\x02\x8a\x34\xc3\x91\x28\xe4\xe9\x1a\x13\x3b\x89\x59\x0a\x40\xdb\xe1\x07\x4d\xaa\xc0\xd2\x9f\xdb\x6c\x9a\xbd\xe6\xef\x0f\x6b\x8c\xdd\x7b\x68\x6a\xc7\xbe\xcd\x96\xa4\x6c\x1d\x92\x71\xd2\x87\xef\x4d\x4a\xae\x71\x78\x1c\x0d\x28\x5f\x30\x5c\x37\x96\x45\x91\x04\x8e\x02\x29\x5e\x63\x79\x8e\xa0\x81\x4f\xc4\x62\xe4\x3a\x1a\xe1\x79\x20\x0a\x64\x45\x36\x78\xeb\xff\xc0\xa4\xff\x1f\x96\xbc\x6b\x53\xe6\x56\xf9\x69\xc2\xc0\x85\xf1\xc4\xb6\xab\x6b\xf7\x5a\x34\xa1\x6d\x9e\x1d\xef\x8f\x7d\xfc\x61\xb1\x79\xed\x33\xc7\x7f\x57\xc9\x9f\xdc\x47\xab\x61\x3d\xd2\x42\x52\xc6\x06\x2f\x18\x8a\x25\x79\x31\x0f\xa0\x1d\xba\x4e\x48\x48\xb6\xa5\x6b\x91\x1c\xea\x9e\x61\xc9\x44\x20\xfb\x66\x28\x52\x18\xa3\x37\x8d\xe3\xef\xb9\xeb\xcf\x6f\xfe\x6c\xe6\x89\x35\x55\xc7\x3b\x7f\xe4\xc8\x3a\xf3\x8b\xb6\x64\xab\x5d\x59\x76\x96\xa8\xb5\x6f\xd2\xf4\xd2\x9b\x9e\x27\x59\x29\xd5\x21\x15\x9f\x96\x82\x20\x96\x08\x9d\xb0\x54\x02\xb9\x94\x04\x60\x44\xf1\x1e\x8c\x58\x28\x40\x52\x03\x52\xe4\x1b\xaa\x41\x99\x71\x4c\x84\x8e\x65\x28\x89\x3d\x7a\x85\xdd\xd5\x96\xed\xcc\x35\x8d\x2d\x75\xeb\x42\x63\x79\x58\xb8\x26\x6f\x86\x73\x1d\xb4\xed\x97\x7f\xad\xee\x17\x14\xde\xbb\x5c\x26\xed\xc4\x7e\x89\x8d\xc3\x82\xbe\xc0\xb8\x2e\x65\x52\x08\xa8\x2e\x92\x5d\x87\xf1\x18\x41\x65\x04\xd1\x8c\x81\x61\x31\x8c\x4a\x1b\x10\x86\xac\x6b\xda\x8e\x15\x9a\x36\x4c\x60\x1c\x97\xeb\x2e\xc2\x2d\xaf\xdf\xfc\xfc\x65\xb5\x11\xce\xa4\x29\x0f\x1e\x3f\x7f\x7e\x4a\xcb\x28\x7c\xb9\xa2\x5e\xc1\x27\x4b\xfd\x81\x2f\xdf\x4b\xee\x91\x65\xd6\x75\x02\x46\x0d\x80\x8b\x71\xe4\x10\x1a\x8d\x18\xcc\x07\xa4\x6b\x8b\x0a\x09\x2d\xc3\x8c\x1c\x9a\x65\xe9\x90\xc3\xba\xe4\xb9\xd0\xa2\x34\x22\x4e\xdc\x11\x2b\xfb\x73\x8e\x86\x3d\xab\x96\x8e\xab\x54\x91\x98\x78\x34\xb9\x61\xf4\x8b\x8e\x53\x72\x5c\xc8\x7c\xcd\x1a\xd1\x42\xf3\x97\xdc\x05\x49\x46\x22\x81\x88\xe1\x35\x06\x51\x01\x43\x32\x86\x41\xb0\x08\xe3\xc0\x96\x45\xcc\x60\x42\xf5\x54\xe0\x33\xba\x08\x35\x3d\x76\x24\x8f\xf4\x7d\x8e\x96\x7d\x3b\x95\x59\x4a\x8f\xf7\x4e\x3d\x5c\x90\x7b\x7d\xfa\x09\x4f\x16\xa4\x3f\xd5\xa2\xcf\xd4\x7d\x85\xc8\x1c\xb7\xae\x4c\xa8\x72\xe0\xfb\x0f\x87\x75\xea\xf8\xc3\x27\xaf\xff\x7a\xe7\xf8\x93\x3f\x37\xe8\x74\xe7\x1d\x33\x43\x8b\x1b\x05\x77\x6c\x9b\x70\xb5\xc6\xe6\x11\xf3\x0f\x55\xf6\x1a\x67\x5c\x9c\xb1\x32\x67\xf7\x7c\xcd\x33\x7d\xbd\x58\xd9\x5e\x78\xed\x53\x3d\x53\xeb\x45\x57\x61\x81\xf6\x23\xce\x92\x1d\xdc\xd1\x8d\xea\x0f\xfe\x69\xc4\x83\xc3\xbd\x1f\xe6\x4d\x3b\xe5\x77\xe2\x75\x19\x97\x87\x0c\x34\x44\x4a\x91\xc8\x40\x35\x1d\xdd\xb4\x4c\xda\xa5\xa0\x12\x00\x1b\x93\x8c\x00\x1c\xde\x0b\x54\xda\xf1\xb0\x08\x78\x81\xfc\xff\x58\x7b\xcf\x70\x9d\xae\xad\x7d\x5c\xef\xd1\x45\xef\x22\x44\x5f\x55\x10\x44\x49\x11\x44\x44\xb4\x68\x73\xf5\xb9\xfa\x9c\xab\xaf\x20\x6c\xbd\x45\x08\x51\xa3\x45\x09\x22\x7a\x8d\xb0\xd5\x20\x7a\x27\x51\x82\xe8\xa2\x13\x36\xf1\xbf\xce\x7b\x7e\xe7\x4d\x1c\xcf\xbe\xf2\x5e\xfb\xff\x7c\x75\xf9\x30\xf6\x7a\xc6\x18\x73\x94\x7b\xdc\x37\x65\xa3\x04\x03\x95\xb5\x97\x7e\x9a\x3e\xe8\xdd\x4e\xcb\xcb\xe4\x3a\xbc\xac\xf2\xeb\x1b\x77\x8c\x7c\xb5\x08\x28\xbb\x79\xd8\x89\x52\xe6\xd1\x96\x03\x7e\x68\x95\xf1\xb9\x66\x62\x65\x3f\x55\xf1\x42\x93\x24\x11\x84\xd8\xb0\x38\xc7\xe3\x58\x43\x91\x55\x4a\x14\x70\x04\x58\x44\x31\x3a\xa1\x7a\xb6\x4f\xdb\x22\xad\x47\x26\xc1\x29\x30\x01\xd7\xe1\xe5\xf2\xdb\x3b\x15\x79\xb9\x6d\xa3\x5a\xe4\xb6\x3e\x0d\xb8\x19\x6b\x7f\x9e\xb5\xed\x83\xa5\xa3\xca\xae\xcf\x3b\x04\xbc\x53\x08\x64\xca\x38\x28\x3a\x61\x66\xf2\x2c\xda\x94\x7c\xca\xa2\x38\x42\xa3\x54\x9d\xa1\x14\x89\xa1\x08\x1f\x72\x48\x94\x5c\x5f\x66\x6c\x10\x9b\xaa\x2b\x61\x2f\x70\x4d\x06\x23\x1b\x02\xef\x05\xd6\xfb\x7f\x5a\xdf\xa5\xb4\xc8\x91\x25\x5f\xa6\xe7\x11\xeb\x67\x9b\xb7\x9c\xdd\xfc\x8e\xdc\xa7\x49\x1d\xfb\xa5\xfe\x8d\x4b\xd6\xce\xba\xfc\x5a\x9f\xd3\xaf\x3e\x2c\x54\x40\x9f\xdb\x65\xdf\xc5\x3b\x19\x57\x52\x48\xac\xce\xc1\xa8\x2a\xc3\x9a\x86\x6e\x51\xa4\x20\x49\x10\x3a\x98\x91\x00\xc9\x41\x15\x31\x81\x06\xa1\x61\x22\x9f\x62\x49\x47\x55\x18\xac\x20\x25\xb6\x39\x27\xf1\x86\x75\xf6\xdd\xe2\xbd\xd6\xf4\x5b\x5f\xf9\x68\xfb\x14\x5b\x38\xf0\x74\x1c\x6a\x5e\xeb\xab\x9e\x97\x6a\x8f\xdf\x75\xb8\xdd\x89\x4d\x63\x36\x25\xd7\x6c\x80\xb0\x87\x3d\xc9\x0b\x69\x8e\x60\x22\xc3\x30\x94\x58\xd4\x03\x1b\x39\x2c\x41\xf0\xa6\x28\xa8\x04\x25\xe0\x80\xa3\x4c\x45\x17\x28\xcb\x97\x45\x8a\x4b\xe7\x80\xfe\x7a\xe1\x69\x9d\xe6\xcc\x19\x3b\xba\xf2\xd3\xd2\x9d\x9c\xb9\x9f\xbe\x56\xa5\xfd\xf6\x0f\xf2\x7d\x7c\x72\x8d\x37\x4d\xac\x54\x76\x7e\xe9\xe6\x49\x26\xcd\x8e\x38\x04\x43\xdb\x70\xb9\x40\xd3\x5c\xd5\x57\x91\x46\xc7\x11\x0c\x24\x5f\x16\x79\xd7\x0e\x21\xc9\x09\xbe\xce\x85\x0e\x56\x4c\x36\xc4\xa2\xce\x33\x89\x73\x70\xdf\xb4\x19\x93\xab\x5d\xcf\x7c\x5d\xbf\xb7\x6a\x44\xdb\x4a\x5f\x38\x5f\x77\xfe\xe4\xfd\x52\x39\x53\x94\x92\x53\x8f\x77\xfe\xba\xfa\xf4\x8c\x13\xdc\x24\xd6\xf7\x09\x35\x33\x94\x22\xc6\x53\x69\x46\x10\x23\xde\x94\x45\x4f\xe6\x04\x55\x13\x08\x89\xa1\x45\xc2\xa3\x75\x49\xa6\x74\x5e\xa0\x84\x80\x03\x24\x50\xd5\x74\x2e\x7c\x6e\xbc\x5d\xbf\x17\xb4\x77\xdf\x9a\x03\x9b\xf4\x15\xea\xad\x7a\x65\x62\xc5\x7e\x25\x6b\xf7\x18\x37\x7e\x68\xb1\x3e\xcf\xb6\x55\x1e\x9d\x64\xbd\x7b\x88\x80\x27\x82\x20\xb4\x05\xc6\x21\x79\xde\x8a\x19\x31\xe4\x28\x60\x03\xd7\x8a\x0d\xda\xd7\x1d\x83\x44\x31\x88\xb5\x48\x27\x19\x59\xd0\x15\x53\x7b\xf1\xe6\xe4\x9f\x56\xea\x29\x2d\xfa\x7d\x96\xe9\xbf\x22\xf8\xe6\x8a\x56\x17\x1b\x1d\x48\xeb\xfa\x78\xdf\xf9\x62\xb5\xeb\xff\x72\xfa\xa7\x72\x4f\x2e\x36\xbb\x53\x5b\xfd\x25\x77\x95\x99\xf7\x0b\x80\x13\x49\xbe\xac\x51\x22\x2b\x22\x29\x36\xb0\x18\x29\x36\x4d\x22\xc2\xd0\x32\x03\xc6\x21\x0c\x40\x4b\x84\xca\x23\x3e\x12\x4d\x4d\x8b\x14\x32\x32\x69\x49\x60\x6c\x35\x9d\xe3\x8d\x6c\x43\xaf\xf7\xa8\xf5\xd3\x8e\xea\xb7\xf5\x61\x5b\x4b\x8d\x7c\xb9\x99\xe9\xff\xe8\x17\xfe\xb1\xf4\xb1\x3d\x3d\x7b\xdd\xdd\xea\x2b\x43\x93\xcc\x93\x28\x70\x2a\x21\x22\x42\xe2\x4d\x99\xf6\x03\x1a\xb3\x2e\x14\x6c\xd9\x73\x11\x29\xf1\xa1\x05\x45\x37\x0a\x05\x1e\x50\x01\x08\x58\x91\x35\x18\xcb\xe1\x12\xef\x7c\x95\x1c\xa5\x5e\x26\x76\xb8\xa5\xf8\x81\x13\x83\x61\xe3\x06\xed\x59\x7b\xa9\xe2\xfd\x32\x4f\x5f\x4e\x6b\x70\xe4\x4a\x05\x29\x7f\xa9\xcd\x49\x86\xeb\x7a\x84\xe3\x58\xb6\x1c\xbb\xbe\xe6\xa9\x40\xd2\x3d\x39\xf0\x34\x95\x0f\x82\x50\xe2\x6c\x82\x51\x4c\x9b\x66\x5d\x02\xe2\x00\x51\xbe\x6f\x5a\x31\x99\x8e\xd2\xe5\xe6\x32\xeb\x8e\x34\xbc\x50\xa1\xc0\x83\xc1\xf7\xc8\xc9\x43\x8e\xde\xb9\x9b\xb2\x30\x25\x73\xd6\x8d\xa3\xfa\xee\xfa\x9a\x7a\xd6\xef\x60\xc6\x39\x0b\x12\x33\xf8\x85\x74\xa8\x30\xbc\xa2\x30\xae\xe5\x23\x8e\xe2\x19\x0b\xfa\x9c\xc1\x81\x48\x33\x4d\x14\x83\x88\xf2\x04\x81\xa4\x0d\xc6\x30\x78\xa0\xc6\xd0\x23\xb4\xc4\x5f\x7b\x5e\xea\xd9\x6d\xc3\x86\x2d\x3b\xf7\x4b\xaf\xac\x63\x7f\xed\x34\x28\xd3\xc1\x4d\xbf\x16\xef\x5c\x3b\x4f\xef\x8f\x4b\xcc\x98\x5c\xe2\xa5\xed\x19\x3f\x55\x4d\xcc\xac\x65\x9a\x26\x1f\x87\x6c\x6c\xfb\x8e\xe5\x52\x51\x44\xc4\x91\xa7\xb8\xaa\x2d\xfb\xa6\x1e\x61\x82\x57\x68\x8b\x85\x9e\x4e\x30\x2a\x6d\x58\xc8\xc4\x9a\xf3\xc2\x01\xe5\x3f\xed\xd6\x53\x5a\xe4\xca\x95\xab\xe9\xf3\xd8\xca\x52\xe8\xd7\x0b\xfd\xde\xce\x39\xe5\x48\xc3\xbc\xa8\x7d\x9b\xbe\xdd\xbf\x2d\x34\xea\xf5\x45\xed\xf5\x01\x9b\xfc\xda\xc1\x89\x23\x83\x33\x2e\xe5\x9d\xf8\xfc\x0a\x44\x32\x09\x04\xcf\xc7\x71\x20\xe8\x3a\xef\x49\x3c\x8a\x80\x6f\xc1\xc0\xe0\x34\x0b\x52\x50\x74\x91\x25\x60\xac\x29\xb2\x0d\x64\x11\xa9\x6a\x3a\x1a\x7b\xb9\xeb\xf6\x6c\xbc\x69\xd3\xd0\x8d\x93\x5f\x9d\xfc\x65\x97\x59\xeb\x7f\x9b\x7f\xf7\x8f\x7c\x1b\xd1\x8f\x35\x3e\xbd\xbd\xbc\x5a\xf6\x3e\x8d\x93\xeb\x53\x9c\xa5\x46\xb2\xa1\x1a\x0e\xa9\xf8\xae\x63\xb8\x64\x1c\x05\x34\x6d\x21\xc1\x57\x0d\x12\x9b\xff\xa3\x30\x0a\x4d\x35\x0c\x29\x11\x29\xba\x13\xea\x44\x0c\x13\xfb\xd4\xb1\x87\x17\x56\xdf\x4c\xbb\x12\xec\x7d\xbf\xde\xcc\x41\x7d\x86\xf7\xfb\xb8\xe4\xa8\xf2\xaf\x1c\xfb\x89\x6f\x94\xef\x1d\x67\xe8\xde\x0e\x6c\x72\x7d\x8a\xb0\x25\xde\x73\x69\x55\x37\x54\x13\xfb\xd8\xf5\x02\x49\x24\xa5\x10\x44\x9e\x8b\x44\x4b\x72\xcc\x48\x8c\x39\x0d\x19\x34\x19\xf9\x36\xaf\xf0\x1e\x6f\x27\x8e\xe0\x2a\xdf\x96\xe1\x26\x0d\x79\x3c\xa7\x61\xc9\x67\xab\xdc\x42\xdc\x95\x63\x76\x56\xd8\x7a\xe5\xc9\x4b\xb9\xc5\xe8\x9d\xcf\x7b\x14\x6b\x93\xdc\x34\xef\xd2\x84\xc0\x39\xb6\x01\x6c\x42\x61\x42\x55\x65\xe2\x58\xf1\x65\x17\x62\xd9\x97\x79\x93\x90\x25\x41\x67\x35\x49\x33\x4c\x47\x8d\x39\x97\x88\x79\x22\x7e\x01\x66\xfc\x4f\xcb\x9b\x94\x16\xcd\x72\x65\xfa\xaf\x5b\xe2\xce\x83\xbb\x67\xbd\xfb\xa0\xe5\xed\xd6\x6f\xbf\x99\xb5\xe4\x9f\xdb\x79\xfe\xa5\x2d\x9f\x3d\xb9\x9c\xf9\xc3\x9e\x0d\x37\xd4\xfd\x62\x65\xb3\x31\xc9\xcd\x53\x06\x15\x5a\x22\x6d\x04\x91\xc3\xe8\x3e\xd6\x14\x68\x91\xc0\xf5\x05\x42\xc7\x24\xe1\x29\xac\x8c\xe2\x80\xf4\x19\x93\x73\x7c\x21\xa4\x44\xc7\x63\x30\x93\xd8\xa7\x2a\xad\xda\xfd\xf3\xd1\xd3\x85\xa7\xdd\x68\x9b\x69\x16\x68\xbd\xe8\xa3\x62\x73\xef\x74\xb9\x5c\xe7\xbd\x21\x29\x6f\xc4\x7f\x14\x19\x56\xbc\x49\x72\x43\x41\xb6\x09\x14\x99\x28\x62\x4d\x18\xca\x40\x51\xb1\xfe\xaf\x4c\x6b\xe8\x61\x10\x1a\x84\x6a\x98\xaa\x86\x5d\xdb\x0a\xcc\x48\x0a\x49\x8e\x24\x78\x45\x4b\x27\x14\x7a\xa7\xc2\xc5\xab\xfa\x7e\xfe\xe3\xba\x05\x75\xb3\xf7\xd8\xf7\xc7\xfc\x35\xf7\x0b\x7f\xe9\xf8\xcf\x4a\xd4\x7f\x30\x3c\x5b\x83\x7d\xa3\x92\x7c\x28\x60\x28\xac\xc7\x00\x3b\x20\x83\x38\xf6\x30\xd2\xd8\xd0\x94\x54\x4e\xf1\x2d\x95\x56\x09\x28\x06\x41\x88\x29\x83\x63\x79\xc3\x14\x5c\x14\x86\x14\x8c\x95\xc4\xc3\x97\xb5\x33\x72\x2d\x69\x53\x6f\xe8\xb9\x23\x43\x3f\xbe\xaf\xef\x2c\xb1\xad\xc4\xc9\xae\x85\x07\x13\x25\xbf\xd1\xee\x6e\xbc\x73\x75\xdf\x6f\x19\x17\xac\x4d\xa7\xff\xa5\x43\x20\x70\x88\x90\x59\x53\x71\x6d\x5d\xd6\xd4\x50\x71\x1d\x43\x53\x5d\x93\x92\xdd\x80\x09\x75\x0d\x04\x00\xf3\x8a\x6e\x4a\x28\xf4\x3c\x98\x80\xc9\x66\xc7\x3b\x7b\xc0\xa7\x35\x87\x0c\x50\xf6\x9c\xcb\x3c\xb8\xfa\x63\xbf\xe6\x45\xb5\x85\x78\xaa\x46\xbe\xc7\x54\xf7\xa2\xc4\x98\xee\x19\xe7\xfa\x4f\xf8\xa5\xb1\x4e\xd1\x08\x79\x7e\x4c\x30\x8c\x4f\x63\x9a\xd0\x49\x52\xf4\x80\x16\x07\x31\x52\x22\x5b\xa2\xcd\xd8\x86\x7c\x10\x86\x3c\xcf\x78\x94\xcd\x78\xf0\xaf\x93\x8c\x8d\x39\xff\x6f\xcb\xd4\x94\xe6\x15\xfa\x6d\x7d\xbe\x12\xbd\xda\xbc\x65\xd0\xe7\xd9\x95\xe5\xed\x2f\x2f\xea\xff\x66\xf6\x81\xef\x57\x6d\xf7\x56\xae\xc5\x1b\xdb\xf5\x5c\x3a\xb7\xfc\x80\x63\x63\xe6\x65\x1c\xe3\x99\x30\x0a\x4c\x45\xc6\xaa\xec\x92\xbc\xcb\xc6\x1c\x89\x48\xc9\x8f\x49\xe4\x88\xbc\xe1\x52\xa6\x04\x88\x58\x03\xb4\x66\x2a\xc8\x8b\x89\x98\x8e\x7c\x46\xe6\x91\x92\x38\x0a\x16\x8d\x9d\x95\x63\x53\xb1\x73\x70\xf0\xfe\x29\x8b\xa7\xbb\xcb\x8a\xbc\xfc\x56\xc1\x94\xdf\xf7\x6d\xeb\x5e\x68\xd1\x9e\x57\xc7\xa7\x4e\x4e\x6e\x53\x06\x7c\x85\x50\x49\x1c\x45\xaa\x45\xc7\x16\x2b\x9a\x0a\x45\x44\xa6\x64\xbb\xb2\x2c\x22\x0d\x09\x58\x51\x4d\xd9\x64\x00\xad\xca\x10\xd8\xa6\xeb\x88\x1c\x9d\xf8\x41\x28\xdc\xfa\x56\xde\xae\x05\x8a\x6d\xac\x04\xb2\x5f\xe6\xaf\xbd\x3e\xe9\x6b\xad\xd6\xfc\x3f\x1a\x67\x19\xf9\xe3\xbe\x3e\xcd\x5e\xdb\xd2\x38\xe3\x3b\xfd\xc4\x17\x58\x0e\xe3\x52\xa2\x27\x04\x94\x89\x25\xd2\x34\xb8\xd0\xe4\x3c\xe8\x43\x9d\xc5\x48\x95\x78\x87\x17\x2d\x26\xf6\x59\x2d\x0a\x02\x2d\xa2\x62\xdf\x88\xc4\xc4\x66\x67\xad\x18\xf6\xfc\x7e\xcb\xde\x59\xf5\x3f\x1c\x91\x5a\x73\xd0\x81\xe6\x03\x4a\x5f\xa9\xfd\xce\xd3\x1e\xaf\x6b\xde\xa9\x33\x5f\x4c\x96\xf7\x26\x99\xc6\x83\xc0\xd0\x0f\xa2\xc8\x07\x66\xac\x7a\x64\xc0\xd3\x32\x43\xc5\x92\xa6\xc5\xbe\x15\xd3\x84\x03\x49\xd9\xf3\x1d\x8b\x74\x63\x09\x04\x8e\x04\x38\x9c\x4e\xbb\xf2\xf2\xdd\x4a\x5b\x3e\xae\x5d\xf0\xd7\x46\x5b\x1b\xe6\xf3\x47\x34\xef\x57\x68\x76\xc5\x9e\x05\xde\x2c\xe7\xb3\x6b\x3a\x3f\x29\x7f\xe2\x8d\x24\xdf\x09\xb8\x8c\x0d\x22\xec\x9b\x11\x20\x64\x59\x12\x49\xdb\x74\xc4\x90\x06\x8a\x27\x2b\xd0\xb3\x25\x5d\xd2\xa0\xe1\xf3\xb4\x28\xb8\x8a\x22\xca\x0e\x89\xff\xcd\x21\xf7\x5c\x25\xfa\x4f\x5b\xf7\x94\x16\xb9\xde\xcc\x54\xf0\xf9\xe7\xb7\x74\xf9\xea\x77\xe6\x7f\x3e\xee\xfe\xb4\x39\x97\x07\x8e\x5b\xb0\x71\xee\xb2\x21\x33\xf7\x1c\x2f\xee\xe4\x50\xf9\x32\x79\x3b\x9c\x6a\x91\x71\xd4\x64\x62\x42\x69\x4d\xd5\x80\x28\x39\x2a\x2f\xe9\x24\x87\x22\xd5\x17\x58\x1b\x19\x94\xc8\xda\xb4\x18\x78\xb4\x0b\x79\xd2\xd7\x43\x44\x90\x3c\x4d\x58\xff\xea\x6e\xe4\xc4\x11\x7c\x79\xe3\x11\xb3\xff\xea\xac\x47\xe6\x16\xea\x56\x6f\xe0\x22\xa5\xdb\x15\x6f\xa3\x31\x7e\x62\xd3\xc2\x8b\x8a\xe7\x6c\xf6\x8d\xf3\x67\x72\xb3\x2b\xe7\x21\x23\x64\x7c\xec\x53\x71\x40\x02\xd6\x72\xdc\x28\x24\x1d\x1c\x3b\x36\x0a\x74\x14\x84\x36\xc7\x7b\xc0\x05\x3e\x45\x19\x2a\xe2\x45\x8c\x3c\x18\x24\x36\x7b\x52\x09\x62\xeb\xee\xef\x8e\x37\xfd\x6d\xdc\xa1\xe6\xa9\xb7\x56\xf6\xda\xc5\x8d\xeb\xfe\xde\x83\xab\x07\x7f\xd9\xc1\x1c\x79\x90\x52\x24\xb9\x2c\x90\xc0\x24\x03\x05\x0b\x9e\x2f\x70\x8a\xab\xc7\x2e\x26\x84\x40\x62\x5d\x21\x80\x44\x2c\x20\xde\x15\x15\x93\x11\x55\x26\x00\x1e\xc7\x04\xd0\xe3\x8c\xff\x47\x6f\xf6\x62\x28\x3c\x29\xf5\xd9\xa3\x26\xd5\x73\xf6\x1a\x7a\xe0\xc4\xbd\x77\xf7\xbf\x37\xa6\xff\xa3\xed\xb9\x3b\x1d\xdb\x73\x39\x6f\xf7\x6a\x1f\xb5\x9d\x9f\xed\x6a\x72\xcd\xb6\x5c\x43\xf2\x42\x8f\x15\x21\xe7\xb3\x2c\xa9\x53\xb2\xa3\x23\x92\x74\x49\x52\x70\x24\x96\x90\x25\x49\xa3\x15\x28\x04\x80\xe4\x10\x46\xa2\x62\xbb\xca\xff\x9a\xfd\x9f\xd3\xcf\x7f\x5a\x0a\xa7\x34\x6f\x5a\xb0\xff\xf3\x91\x70\x74\x74\xbb\xe3\x37\x6e\xfe\x76\xec\x6e\xcf\x0d\x13\x4a\xd7\xa8\xf2\xc9\xc8\x9a\xf5\xfb\x8d\xb8\x38\xa8\xc3\xac\x4c\xd3\xf3\x77\xfe\x6e\xc6\x4b\x49\x9e\x1d\x39\x50\x91\x41\xa8\x11\x61\x10\x0b\x12\xcf\x1b\x01\x13\x2a\x31\x19\x13\x18\xcb\x81\x08\x29\x3a\xd2\x65\x9b\x30\x03\x11\x99\x21\x11\xc3\x10\xe0\x74\x7a\xb2\xad\x5f\xc3\xaf\x33\xe7\xf0\x8b\x54\x1d\x50\xef\xed\x97\x5a\xf6\xbb\xb9\x7e\x74\xcf\xd7\x4b\x75\xad\xbe\xa4\xd1\x9f\xe5\x0f\x7d\x39\xb1\xc2\x83\xe4\x46\x02\x45\x98\x80\x23\x3c\x99\x52\x04\x3e\x74\x45\x89\x0f\x2c\x83\xe1\x94\x48\xa4\x3d\xc6\x91\x90\xe7\x86\x8c\x40\xf8\x48\xf1\x22\xe0\x9a\x58\x27\x4c\x3e\x1d\x19\x62\x3f\x4f\x2b\xa9\xca\xc8\x1f\x36\x17\x2a\xbb\x60\x66\xca\x07\x25\xfa\xec\xab\x15\x1d\x1b\x55\x6b\xc9\x99\x22\x99\xe1\x80\xf5\xec\x84\x89\xc9\xfd\xda\x31\x2f\x53\x0c\x69\xe9\xd0\xd0\x81\x6f\xc0\x08\x47\x06\x6b\x01\x1f\x86\x94\xea\x60\xd9\x0b\x78\xde\x95\x78\x43\xf3\x59\x8f\xd5\x10\xd4\x03\xe7\x6f\xdc\x12\xcf\x99\x5d\x7d\xd2\xbc\x59\x15\x9f\xec\x2d\x35\xa5\xf6\x2b\x8d\xca\x77\x3b\x7d\xe8\xd0\xc1\x33\xae\xf9\xf3\xc8\x4b\xdb\x8e\xd4\x2c\x5b\xeb\xe3\xfc\x19\xe7\x27\x4c\x2c\x8c\x1b\xfa\xba\xee\xea\x2e\x29\x9b\x7a\xcc\xe8\x21\x50\x43\x3e\xb0\x6c\xac\x5a\x2a\xc0\xa4\x17\x1b\x61\xc8\x20\x11\x60\x1a\x6b\x8c\xe4\x7a\x3a\x0d\xff\x2a\xfb\xff\xf3\x28\xfc\xd3\x56\x2a\xa5\x45\xd3\x82\x85\xfe\x4b\x57\xf3\xe1\x9e\x69\xf7\x8e\xaf\x1a\x9e\xda\xab\xc0\x9a\x09\x93\x53\x97\xb4\xba\x79\xfd\xcf\xd3\x65\x3f\x97\x32\x9d\x6c\x53\x2a\xcf\x86\x97\xea\x25\x99\xac\x16\x86\x14\x2d\xf1\x01\x24\x58\x9b\x22\x68\xc6\x17\x39\x3d\x12\x7c\x05\x39\x90\x86\x96\x1c\x42\xda\x47\x26\x94\x05\x83\x91\x34\x8b\x8c\x05\xc6\x7a\xee\x9a\xe9\x6f\x66\xef\xce\x56\xfc\x5e\xb3\x3e\x9f\xb7\xe2\xed\xb4\x02\xe5\xdb\x74\x9e\xfe\x1d\xfe\x38\xab\xf1\xe9\x1b\xfd\x2e\x0f\xcc\x7b\x52\x6a\x75\xa5\x47\x72\x43\x41\x74\x3c\x24\x86\x3e\x94\x22\x20\xab\x11\xa1\xf8\xa2\x13\x08\x36\xe0\x1d\x19\xc5\x96\xc2\xe8\xb4\xac\x59\x26\x65\xf2\x28\xe2\x7c\x95\x8a\x14\x43\x4d\x27\x14\xba\xd6\x99\x3d\xed\x88\xc3\x1f\x3a\x31\x7f\xf1\xf7\x8b\xe9\x66\x6f\x21\xc2\xf4\x0f\xbc\x35\x2b\xdf\x94\x8e\xc4\x52\x35\x6d\x4b\xb6\xe4\x96\x75\x2c\x21\x31\x6e\xa0\xfa\x3c\x63\xf1\x3a\x62\x7d\x8d\xb1\x65\xac\xfb\x96\x12\x85\x04\x8d\x35\x57\xf0\x68\xd1\x90\x29\x04\x44\x41\x0b\x58\x92\x04\x38\x1d\x76\x98\x77\xe4\xcd\x15\xae\x50\xbd\xd6\x34\xb5\x1b\xa6\xc1\x2e\x8b\x97\x4e\x58\x56\x71\xfa\xed\x12\x79\xa7\xb5\xec\xb8\x76\x6a\xe1\xde\x4f\x93\xac\x3e\xa5\xa9\x4a\x04\x45\x59\xd3\x48\x39\x32\x3c\xd1\xe2\x4c\x99\x30\xa1\xa7\x68\x36\xc3\x71\xa6\x1c\xe3\x50\x22\xb4\x90\x33\x48\x4c\xd9\x42\x40\xfa\x2c\x7c\x71\x52\xf7\x4f\x2b\xd7\x94\x16\x4d\x9b\xfe\x77\x28\x9c\x58\xf2\x63\xf8\x73\xb9\x34\xeb\x44\xde\x26\x4f\xa7\xe5\xaf\xbe\x63\xfd\xcd\x2d\x1d\x3f\x3d\x9b\xe9\x6c\x83\x0e\x2d\x87\x2c\xf8\x79\xcb\x47\x49\xa6\xc9\x24\x61\x18\x42\x9b\xc6\x82\xc0\x63\xec\xc4\xbe\x15\x59\xa6\xe5\x06\xc8\xe7\x38\xcc\x04\x1e\x2f\x18\x88\x11\x7d\xc7\x15\xe5\xd8\x0d\x42\xda\xe3\xc4\xc4\x3e\x35\x22\xf7\xd7\xdf\x3f\xad\x35\xac\x54\x54\xfe\xdd\x71\x39\x2e\xb5\x8f\x8f\xaa\xb8\x3e\x31\xec\xfe\x8c\x3c\x17\x1a\x74\x1c\x35\xea\xa3\xe4\x5e\x95\x70\xa2\x17\x85\x9e\x05\x08\x2e\x96\x69\xc8\x99\x58\xb0\x19\x59\x0a\x54\x47\xf1\x64\x35\x88\x15\xda\x92\x20\xcb\x9a\xae\x1d\x84\x32\xf6\x24\x57\x14\x49\x3d\x9d\x6d\xd9\xed\x1f\xa6\x6e\xc9\xb9\x97\xf9\xf0\xe9\x84\xef\xf3\x57\xf9\xee\xec\xb1\xbc\xc1\x37\x5c\xad\x2f\x77\x92\x0d\x66\x31\x1d\xde\x7b\x36\x3b\xc9\xf4\x0b\xb6\x43\x01\x56\xa2\x38\x4a\x62\x3d\xdf\x82\x01\x49\xc6\x40\xf2\xed\x98\xa3\x45\x56\xf2\x09\x64\x92\x0a\x4b\x5a\x58\x31\x19\x27\x92\x45\x60\x00\x25\x71\x28\xec\xb3\xae\x16\x29\xf8\xe4\x9b\x68\xed\x4f\x7d\xef\x7e\x9f\x76\x78\xce\x81\x4c\x7d\x47\x7a\xe7\xb7\xcd\xfc\x6a\x63\x91\x4b\x83\xfa\x95\xcf\x95\xdc\x57\xc1\x87\x91\xe6\x33\x16\xa7\x79\x6e\xc4\xfa\x86\x22\x03\xc2\xa6\x5d\x45\x0b\xdd\x28\xd2\x58\x41\x83\xb4\xc0\xcb\x2e\x02\x58\xb6\x44\x3f\x00\xbe\xf6\x6f\x21\xd3\xff\x71\x92\xd9\x6f\xfc\xdb\xe2\x32\x7c\xdf\xce\x1d\xeb\xf6\x1f\x68\x68\xc3\x27\xef\x2b\xd6\x41\xf9\x8c\x6f\x54\xea\xd2\xe8\x0d\x6d\x5f\x11\x53\xef\x56\xed\x9b\x23\x5b\x4a\x8b\x8d\x7f\x3e\xbb\x36\xb1\xcc\xf3\x98\x05\x71\x34\x51\xe6\xd4\x6a\x69\x76\xe7\x22\xef\x36\x90\x46\xa7\x35\xf8\x44\xbd\xd2\xfa\xe7\xa5\x6c\xb7\x43\x5f\xbd\x2d\xd5\xae\x72\x7b\xc1\x73\x33\x9b\x06\xf3\x38\x58\xad\xf5\x12\x36\xc7\xf0\xcc\xd9\x0b\xd5\xee\xb5\x7f\x40\xcf\x3d\x3d\x1f\x35\xde\x3d\xe8\xf7\x09\xbb\x5b\x5e\xdf\x01\xe2\x24\x83\x4d\xbd\x50\x8b\x09\xc2\x8c\x69\x0e\x87\x1c\xb0\x8d\x18\x01\x8b\x37\x38\x83\xf0\x0c\xac\x53\xb6\x27\x92\x31\xe5\x9a\x6a\x64\x78\xac\x84\x42\xce\xe0\x13\xc8\x7a\xb8\x25\x7b\x1e\x2e\xfd\xda\xea\x87\x47\xfe\xac\xd4\xa3\xc4\xa8\x57\x0f\xe7\x9e\x50\xb6\x5e\xff\x8f\x5e\xa9\xd9\xe1\x7a\xe3\x6d\xcb\xe6\xed\xce\x92\x5c\x93\x0d\xc2\x93\x68\x36\xa4\x6c\x8a\x86\x21\x2b\x61\xec\x89\xa6\xe7\x28\x11\x26\x41\x4c\x49\xac\xa8\x01\x02\x78\xa2\xcd\x4b\x9a\x86\x69\x5d\xc5\x24\x64\x12\xdf\x62\x49\x2f\x4d\xfd\x22\xf8\x26\x57\x67\xb9\x58\xab\x3b\xfd\x96\xd4\x6b\xfd\xdd\x4b\x05\x3f\xf9\xf3\x18\x7d\x30\xe5\x25\x23\x6d\x53\xda\xff\x8f\x9d\x49\x42\xb3\x05\xc2\xf2\x31\xcf\xfd\xab\x65\x13\xec\x50\xe4\x88\x28\xe2\x3c\xd2\x22\x41\xa0\xcb\x38\xd4\x5c\x12\x02\xd3\xc6\x92\x0b\x54\xcf\xd2\x0d\x9f\x54\xb9\x04\xea\x3a\xee\x8a\x59\x37\x67\x8d\x7c\x2b\x47\xae\x1f\x7a\x9c\x2e\x50\x77\xef\x75\xa3\x6a\x8e\x9b\x93\x0f\x3f\xb8\xca\x70\xb3\xae\x3c\x5a\x47\x66\x4f\x6e\xc4\x50\x31\x23\xa9\x80\x35\x1d\x96\xe6\x54\x9b\x37\x24\xde\x85\xc0\x00\x01\xe1\x04\x3c\x12\x7c\xdd\x54\x09\x8e\x92\x49\x85\xb1\x24\x4b\x08\xb1\xc7\x46\x09\x34\x74\xef\x8f\x5e\x7d\x63\xd9\x82\x42\x27\xf3\xad\x38\x75\xfa\x8d\x05\x3f\xf4\x1f\xd1\xfe\xde\xbe\xd7\x77\xf6\x5f\xa4\x4d\x5d\xd6\xc8\xbd\xb8\x33\xb9\x6a\x51\x9c\x0e\x2c\x36\xa2\x63\x1a\x18\x88\x8d\x0c\x13\x73\xb1\x6d\x5a\x14\xd4\x15\x83\x0a\x22\x4b\x03\xba\xe8\xeb\x1c\xe7\x0b\xa4\xe2\xe8\xae\x8a\x5c\x93\x27\x13\x9f\xdb\x74\xfa\xa4\xe9\xd2\x03\xf5\x4e\x3f\x7e\x5b\x7f\xe4\x4c\x3b\x53\xf3\xfa\xb7\x4f\x0a\xe6\x34\x9b\xaf\xf8\xe5\xec\xf1\x3e\x61\x97\x92\x55\x33\x8e\x78\x4d\x3c\xa2\x33\x35\x5f\xc4\x54\x44\x02\x9a\xd0\x59\x8b\x08\x63\x4f\xc6\x92\x6e\x88\x6e\xe4\xfa\x80\x63\x04\x5f\x65\xb0\x48\x33\xc0\xa5\x05\x51\xb6\x5c\x0e\x31\x09\xe8\xd6\xab\x7c\x55\x7f\xd6\xa8\xe2\x5f\x75\x1c\x31\xe8\xfc\xf4\xb2\x44\xcd\xde\xe8\xde\xc2\x2f\xb2\xe8\xbf\x5d\xee\xf9\x7e\xa9\x83\x7b\x66\x66\x9c\x53\x31\xb1\x3f\x53\x11\xc9\x47\xa6\xe8\x52\x48\xc6\x0c\x47\xba\x91\x19\x38\x9c\xc8\x73\xae\x0b\xf8\x38\x08\x3c\xcd\x8a\xcc\xc8\x67\x6c\x9e\xe4\xb9\xd0\xf7\x39\xa0\xbd\xe8\xcf\xe7\x0e\xdb\xb7\xab\x4c\xdc\xb6\x69\x57\xb9\xf6\x9f\x2d\xf8\xb5\xf5\xc9\x2a\xa1\x34\x6b\xfe\x8e\xc3\xd5\xec\x37\x3f\xd9\xd5\xb2\xfe\xc4\x4d\xc9\x1d\x16\x59\xbe\xa5\xcb\xa2\x45\x72\x11\xd6\x18\xd7\x08\xe3\xd0\x89\xad\x98\x17\x18\x03\xc9\x36\x24\x58\x99\x70\x05\x56\xc7\x9e\x43\xb2\xa6\xcf\x39\x8c\xe6\xa6\xb3\x62\x5a\xc3\xaf\x4c\xcb\x3e\x64\xc5\x6b\x63\x77\xd5\xfa\xb3\xae\xdd\x27\xcf\xf0\xfd\x7d\x32\x7f\xdf\xee\xe9\xc2\x6f\xcf\x54\x7c\x29\xff\xde\x4f\x32\x2e\x7c\x9a\x98\x51\x1b\x73\xa6\xef\xb8\x02\xed\x31\x96\x65\x58\x9c\x1d\xe0\x08\x63\xcf\x15\x78\xd6\xe7\xa0\x46\x1a\x9c\x69\xfb\x92\xc1\xcb\x34\xa6\x81\xeb\x33\xae\x6a\xa5\x93\xf0\xe6\x2d\x2e\x9f\x59\x9a\x3b\x26\x35\x27\xe4\x06\x07\x9d\x32\xad\x59\x24\x0f\x6e\x34\xb3\xf3\xf7\xc6\x97\xab\x7a\x6f\xfe\x70\x33\x99\x5c\xb3\xed\xd0\x92\x05\xc6\x0a\x6c\xc8\xc9\x98\x96\x05\x55\x25\xa0\x08\x43\xd3\x24\x03\x5e\xa3\xc2\x18\xd9\x1c\x0e\x74\xcf\x67\x68\x8e\x95\xec\xd8\x17\xf4\x04\x0e\xd2\xfb\xf0\x93\xaf\x9a\x2c\xe8\x78\xb9\x21\x4c\x0d\x06\x8c\xb9\x72\x79\xdb\xa5\x26\xd2\xc8\xd1\x45\x4c\xa1\xfe\x27\xb7\xd8\xc5\x2d\x33\xfe\xb4\x24\x74\x10\x11\x92\xb6\x0c\x03\x8f\x0f\x90\x4d\x1b\x0e\x41\x32\x92\x28\x52\xa2\x24\x20\xc4\x99\x84\x4e\x5b\xa1\x23\x4b\x9a\xa9\xf0\xd8\x72\x28\xda\xf3\x2d\x2e\x81\x0c\xcf\xd2\x05\x23\xcb\x2d\xeb\x33\x61\xcf\x81\xc6\x6b\xf3\xbc\x6f\x5f\x3d\xd1\x85\x18\xfe\xc3\xcf\x67\xdf\xfb\xaa\x20\xd9\xaa\xa8\x55\x75\x58\x92\x99\x10\x2c\xc8\x8b\x1e\xcd\x3a\x26\x01\xcd\x10\xa8\x8a\xec\xb8\x84\x2c\xba\xb1\xe5\x40\x4e\x0e\x29\xd3\xf4\x24\xdd\x63\x55\xd2\x96\x90\x2b\x7b\x3a\xd2\x9e\x1b\x88\xfc\xbd\x4a\x39\x35\xf1\x95\x7d\x6f\x71\x3b\x56\x14\x68\x29\xde\x5a\xed\x14\xc9\x4b\x81\xd5\xd1\xd8\x32\xa0\x70\x8d\x1f\x2b\x5c\xa9\x5d\xc9\x68\xf0\x3c\x4c\x62\xce\xfd\x57\x8a\xc3\xcf\xcb\x15\x18\xb9\x6d\xcd\xa3\xd3\x99\x97\xb5\xcb\xd5\xaa\x58\xfb\x37\xaf\x4c\xa5\x4b\x1d\x5d\xb6\x62\x5c\xb0\x3d\xc9\xbb\xe1\x80\x13\x58\x35\xd0\x80\xcc\xd9\x01\x8c\x4c\x97\xb4\x7d\xdd\x8c\x14\x8d\x72\x14\x22\xa0\x20\x72\x54\xa8\xab\x50\x96\x14\x37\x22\x62\xcf\x62\x63\x29\xf1\x25\x4f\x8d\x4f\xa6\xf5\x97\x8e\xa4\xa5\x6c\xb9\x36\xfd\x8b\xef\xa6\x5a\x95\xb4\x22\x95\x5b\x34\x5a\xb4\xfe\xc4\xf1\xef\x9b\x56\xb9\x30\x6e\x4d\x72\xd9\xfb\x81\x13\xaa\x32\x15\x32\xb1\x69\xf8\x9a\x04\x1d\xcc\xfb\x26\xa6\x5d\x84\x29\xc5\x24\xc8\x00\x10\x96\xea\xf9\x92\xc3\x40\x4f\x50\xb0\xe0\x43\x57\x20\xc5\x17\xb3\x7a\x70\x21\x53\x07\x76\x7a\xc3\x9d\xc7\xcc\x3b\xa7\x56\x76\x6a\x5f\x9b\xea\xbf\x87\xba\xbe\xe5\x4b\xf2\xed\xc1\x4c\xd1\x29\xcb\x7e\xfe\x36\xb9\x41\x0b\xcc\x98\x09\x24\x28\xc7\xb1\x60\x06\x96\xae\xf8\x84\xc5\x9b\x20\xa0\x62\x82\x65\x5c\x2c\x03\x1b\x02\x46\xd5\x79\xe8\x40\x47\x0c\x1d\xda\xe3\xb1\x92\xb8\x25\x71\x5f\xe9\xe8\x1c\x4e\xad\xd3\xe8\xcb\xba\x1b\x73\x54\x29\x5a\xfb\xaa\x78\xe2\x0f\xae\xda\x2f\x23\x67\xbe\x34\x72\x79\xb3\x07\x23\x57\x24\x97\xbb\x15\xc8\xb1\x22\x88\x2e\xe9\x29\x34\x43\x85\xac\x44\x9a\x1c\x20\x62\x09\xb2\xba\xa5\x7b\xa2\x2b\x8b\xb6\x0a\x6c\x2d\x64\xac\x90\x91\x64\xc9\x73\x74\x99\x48\x87\x11\xae\xd4\xc1\x11\xd7\x37\xd4\xcf\x7c\x6d\xc8\x8c\x6c\xb5\x8f\x7d\xfa\xea\xe8\x60\xc3\xe2\x73\x75\x1f\x3e\x3b\xf4\x65\xf6\x87\xdf\xcc\x29\xbd\x6e\x5e\x92\xd7\x8f\x96\x86\x08\x2e\x52\x43\xac\x22\xd7\xf7\x0c\x0c\x43\x60\xd9\x1e\x30\x43\xac\x52\x86\xed\x6a\xbe\x43\x2b\xbe\x64\x0b\x66\x28\x44\x28\x08\x19\x90\x0e\x23\x5c\xe5\xa2\xdf\xdd\xec\xd8\xa3\x79\x85\xc6\xdc\xd5\xaf\xb2\x15\xee\x73\x34\x6f\xbb\xdb\xaf\x66\x15\x36\x3d\xf2\x6e\x94\x7a\xaf\x5e\xe6\xd5\x19\xbf\xd1\x4f\xac\xec\xe4\x21\x41\x64\x58\xc1\x71\x1d\xd7\xe4\x79\x93\x65\x20\xa6\x58\x3e\xf2\x5c\x4d\x08\x91\x4b\x31\x8e\x8d\x34\x49\x73\x65\x2c\x98\x1e\x76\x71\xc0\xff\x5d\xc2\xf0\xef\x39\xe7\xe3\x73\xcd\x1a\x2d\x3a\xe6\xe7\x1a\xf7\xa4\xe9\x8c\xca\x67\x7a\xe3\xec\x0b\xcf\xcf\xda\x71\xfc\xbd\x4b\xdf\x5d\x78\x76\xb9\x6e\xc1\x63\xeb\x9f\xfb\x23\x87\x4d\xff\xb5\xb0\x32\xbd\xd3\xc1\xcf\x1f\xee\x5b\xda\xd9\xcc\x97\xa3\xee\x88\x77\xba\xf4\x79\x96\xfd\x61\xd1\xbb\x4d\xdf\xae\xde\x7c\x72\xc6\x83\x37\xf1\x1e\x8f\x76\x04\x5a\x55\x23\x29\xc0\x2a\x6d\xd8\x56\x48\xd2\x8c\x02\x19\x23\x0e\x44\x86\x64\x45\xcb\x03\x32\x0d\x14\xc1\x02\x14\xe7\xb0\xbe\x66\x88\x9a\x9e\x38\xe7\x54\xda\xb8\xce\x1c\x79\xf3\xf6\xb8\x2c\x83\xee\x69\x55\x57\x7e\x34\xee\xee\xd2\x1d\x53\xb6\xf1\x95\x7e\x2f\x3b\xaa\xc6\xfe\xb4\x9a\x25\x7b\x25\xd7\xa5\x08\x84\x24\x24\xc6\x0a\x17\x69\xac\x62\x49\x6a\x88\x43\xd3\x02\x06\x11\xc8\xac\x23\x79\x3c\xe3\xdb\xa2\x8f\x22\x82\x63\x45\xce\xb5\x45\x9b\x63\x04\xf4\x62\xce\x31\xbe\x3e\x5b\x65\x6c\x65\x6a\x51\xe5\x8a\x93\x4b\xbc\xfc\xe0\xc0\x84\xb6\x05\xf7\x0f\x7d\xf9\xf7\x31\x65\xaf\x6c\x2b\x70\x7f\x43\xcd\xf0\xe5\x24\x6f\xb7\x4c\x46\x36\x23\x99\x15\x01\x8a\x78\x93\x15\x0c\xc3\xa0\x19\x35\xd6\x6c\x1d\x8a\x06\x8c\x0d\x8e\x34\xb0\x46\x29\x84\xaf\x39\xae\xe9\x38\x00\x3f\x7f\x88\xf4\xd7\x97\xce\x31\x6f\x5f\xdf\x43\xad\x6e\xb6\x73\x47\x3f\x0d\x8b\xd6\xb8\x32\xa4\xf0\xcf\xa9\x65\xd7\xbe\xd6\xba\xc6\x6d\xbf\xd6\xb5\xc7\x27\x3f\x2a\x9f\x64\x0e\x22\x60\x98\x5e\x08\x5c\x56\x71\x4c\x9a\x30\x75\x9e\x16\x1c\x60\xb8\x0a\x90\x23\x8e\x55\x02\x2e\x20\x4d\x56\x32\x2c\xdd\xd3\x09\xd3\xe5\xf4\x88\x84\x09\x5a\xe7\x53\xf3\xee\xae\xc8\x6a\xfd\xb6\xfc\xf4\xc6\x73\x6f\xd7\x6a\xfc\xd1\x43\xfc\x52\x30\xae\x93\x76\xf5\xbb\x5a\x07\xdb\xdc\x4f\xd3\x2a\x25\x77\xf6\x0a\x5c\x1d\x49\x81\x42\xc5\x12\x56\x7d\x2a\xa4\x75\x57\x21\x21\xa5\x21\x5a\x36\x09\x81\xd6\x59\x85\x85\x2c\x09\x39\xdf\x24\x78\x5a\xd0\x7c\xd1\xa3\x39\x2f\x71\xbe\x79\x75\x58\x8f\x9f\xee\x9d\xe9\x42\xfd\x3c\xa9\xbd\xb6\x25\x57\xee\xae\x9f\xf6\x3b\x7b\xea\x58\xe1\x77\xca\xff\x7a\xbe\xd9\xe6\x3f\x16\x4f\xca\xf8\xa3\x94\xb0\x3b\xd2\x8d\xc0\x80\x91\xa0\x02\x96\xe1\x49\x5e\x0c\x55\xce\x75\xa1\x2f\xd1\x48\x96\x43\x32\xe6\x05\x84\x80\xca\x63\x06\x8a\xaa\xa1\x7b\x12\x94\x5d\x44\x25\x76\x10\xf6\xd6\xe4\x1c\x79\xbf\x3e\xed\x16\xca\x7f\x7a\x6e\x1a\x9b\xab\x44\x6b\xab\x55\x5a\xbd\x4e\x25\x7f\xff\xa3\xc1\xf7\xe5\x9a\x0c\xdf\x9b\x64\x2a\x93\x40\x41\x04\x4f\x84\x9a\x0e\x20\x47\xb2\x21\x05\xe2\x58\x0c\x01\xe1\x1b\xb4\x62\x91\xa4\x47\x99\xaa\x13\x47\xba\x69\x31\xc8\xa3\x4c\x57\x0c\x81\xaa\xbe\x18\x8a\x93\xcb\xe4\x6f\x39\x6a\x6e\xa3\xd4\xa6\xb3\x1f\x76\x3c\x5b\xf0\x69\xc5\xca\x20\x53\xd7\x82\x74\xcd\x92\x7c\xff\xa1\xbd\x47\xce\x7b\x7f\x4b\x72\x4d\x46\x3a\x42\x11\xb4\x63\x51\xe6\x0c\xd3\x09\x7c\xd1\x80\x22\xeb\x05\x14\x42\x20\x50\x03\x42\x81\x1a\xc2\x81\x11\xc6\x84\x63\x1b\xb6\xed\x6a\x2c\xf6\x12\xdf\x04\x96\xdf\x30\x6f\x6b\x91\xd2\xad\x4b\xd9\x47\xb2\xa8\x4d\x37\x4e\x69\x1d\x8f\x29\x3f\xee\x54\x34\x3d\x34\x17\x35\x2b\x93\x3b\xeb\xd0\x8e\xc9\xcd\xd5\x91\x2a\xb2\x0e\x32\x5c\x4b\xf4\x55\x15\xf0\x8e\x11\x3b\x01\x4f\x3a\x8e\x1f\x46\x9c\x0d\x0d\xda\xb2\x22\x2f\x34\x20\xc5\xe1\x88\x36\x74\x22\x12\x23\xf5\xc5\xba\x7d\xf5\xaa\x7d\xe5\xd7\x0f\x68\xf7\x64\x72\xb1\x73\xfe\x88\x8f\x6a\x4c\xfc\x63\x53\xb1\x59\x29\x47\xfb\x56\x6e\xd5\xf7\xd9\x2c\xe9\xeb\xba\x19\xe7\x17\x4e\x8c\xb7\x20\x6d\x8d\x15\xc4\x50\x8f\x81\xc5\x71\x0e\x0d\x08\x35\x54\x62\x24\x45\x36\x0a\x68\xc6\x04\xb2\x49\xea\x1c\x4f\xd0\xa1\xa8\x52\xd0\x57\x58\xe2\xdf\x3c\x07\xcf\x67\x8f\x07\x07\x7f\xcb\x74\xf2\x2d\xaf\xd2\x6b\x5f\x39\xaf\xf5\xda\x5c\xe4\xf3\x31\x8d\x97\xce\x1a\x3c\xe1\xed\x59\x9f\xee\x1b\xb5\xea\x76\xb7\xd2\x19\xe7\x39\x48\xcc\xc1\x2e\x47\x5a\x88\x48\xdf\x14\x62\x02\x53\x31\x15\xb8\xc8\x67\x5c\x86\xd4\x62\x9a\xd7\x6c\x92\xd2\x34\x44\x39\x3c\x61\x11\x1a\x63\xa8\x8a\x48\xea\xbc\x97\x0e\xc6\xfa\xae\x5d\x62\xc0\xfa\x97\xe7\xde\x29\x9f\xd2\x7d\xf9\xfa\x9e\x97\xcf\xbb\x95\xb6\xad\x15\xa8\x72\x2b\x9e\x9e\xfb\xf3\xab\x93\x1d\x33\x7e\xca\x98\x98\x29\x0b\x02\x81\x14\x78\x93\x81\x48\xd7\x5d\x99\xf0\x2c\x39\x90\x63\x87\x36\x19\x45\xd4\x5d\xc2\x72\x38\xde\xd2\x02\x8a\x32\xe8\x50\xb5\x63\x95\x37\x51\x3a\xcd\x43\xcf\x39\x5f\x5b\x93\xc9\x02\xed\xce\x8c\xca\x14\xe5\x39\xf3\xe7\xb4\x1b\x2b\x7e\x1c\xdf\xa4\x56\xcb\xb3\xef\x7c\x72\x69\xc4\xd1\x97\xf4\x45\xc9\x35\x5b\x33\x81\x49\x20\x36\x24\x91\x6a\x84\x14\x36\x54\xc8\x86\x10\x2b\x2c\xc9\xc6\x14\x45\x19\x58\x63\x02\x3f\x8a\x51\x18\x4a\xa1\xa9\x45\xb6\x84\x13\xf1\xc5\x0d\xc9\x9e\xa5\x6e\x96\x81\xf3\xce\x3d\x78\xff\xf2\x8a\xac\x9f\xb7\xaf\x3b\x29\xdb\xa8\x9b\xd3\xcb\x09\x99\xdf\x2b\xb3\xbc\x5d\x49\x85\x7e\x2f\xc9\x6b\x18\x2f\x84\x0a\x27\x38\xbc\x8c\x58\xdd\x22\x3d\x1c\x60\xdf\x0c\x24\x83\x8e\x59\x6c\xf3\x9e\x4a\x87\x0c\x04\x10\x72\x6e\x24\xdb\xc0\x33\x10\x2d\xa4\xb3\x86\xb9\xa0\xdf\xdf\xf4\x79\xb1\xae\x03\x4b\xaf\xcf\x59\x6b\xcc\xae\xb1\x1f\x1f\x86\xe3\x2e\x2e\xf8\x34\xdf\xda\xb0\xd2\x74\xf1\x6e\x91\x8d\x19\x27\xa3\x4d\xd8\xf3\x38\x8a\x68\xc7\x91\x67\x43\x80\x5d\x91\x06\xb6\xa1\x10\x32\x2d\x9b\x16\x87\xfe\x67\x37\x00\x79\x41\xc5\x4e\xa0\x61\x10\x46\x90\x72\x81\x6a\x11\xd4\xdf\x7b\x9e\xbf\x1c\xa4\x74\xcd\x4e\x4b\xbe\xb2\xda\x0e\x4b\x45\x37\x06\x9c\xfb\x79\xf5\xee\x46\xd3\x3b\xdf\xf9\x69\xde\x89\xe6\x62\xf6\x25\x3f\x5d\x9a\x93\xda\x30\xc9\xcc\xae\x01\x4d\xf1\xa1\x15\x29\x06\xa1\x6b\x56\x24\x20\xc5\xd6\x29\xcf\xb5\xe9\x90\x8b\x04\x29\x14\x5d\xca\x25\x62\x35\x8a\x49\xcc\x9a\x92\x66\x60\x55\x0d\x5f\x74\x90\x09\xd3\x9d\xd7\x3a\xdf\x1a\xd6\xfb\x52\xce\xc3\x93\x3b\xb4\xd5\x66\x9d\xfa\xb1\x17\xf8\x6c\x22\x3f\xa0\xff\x9f\x9b\x8e\x2d\x7c\xeb\x8a\x95\xdc\xa4\x27\xb9\x2c\xf6\x34\x4e\x8e\x45\x04\x10\x74\x15\x45\xf4\x08\x2f\xa6\x10\x17\x62\x4e\x51\x45\xc7\x90\x23\x9a\x23\x00\x0a\x3d\xdd\x92\x71\x6c\x4a\xe9\x81\xcc\xb6\x7e\xdc\xbe\x46\x63\xf3\xbb\xcb\x0f\x0e\x6e\xb4\xdb\xf6\xec\xd8\xbb\x7b\x1a\xb9\xa7\xbc\xd7\xa5\xc2\x74\xa5\xd4\xad\x9e\x07\xbd\x8c\x4b\xb6\x27\x34\xdb\xb6\x14\x2c\x59\x1c\xb0\x3d\x8f\x55\x0c\x86\x23\x54\x6c\x91\x84\x28\xd9\x96\x42\x87\x86\x2b\x21\x92\x17\x63\x4b\x60\x6c\x4f\x55\x7d\xdf\x01\x91\x06\x12\x0f\xe0\x8e\x6e\x7e\x6f\x51\xb5\x9f\xf6\x3f\xce\xac\x18\x53\x0e\x10\x53\x5a\xdc\x5a\xcc\x8d\xc6\xec\xe6\x34\x21\xa5\xe0\x1f\x0f\x7a\xcd\x4a\x32\xa4\x8f\x76\x58\xc3\x12\x39\xc2\x21\x2d\xd5\x41\xa1\xe4\xb3\xac\x1b\xf9\xd8\xd5\x45\xc8\x68\x42\x8c\x05\x0f\x39\x96\xc1\x48\x4e\xcc\x33\xc8\x88\x22\x3e\x02\x2f\x3e\x31\x37\xca\xbc\x52\xb8\xf2\xd7\x59\xe6\x37\x3e\x78\x42\xab\xb9\x13\x4c\x2d\xb7\x67\xcd\xac\x1d\x0f\xb6\xd9\x85\x2a\x4f\x78\x7d\x44\xc7\x4d\x7b\x92\x8c\x7c\x0e\xc8\x50\x70\xd4\x10\x41\x41\x26\x24\x85\x40\xba\xa1\x45\x26\x60\x79\x36\x08\x38\x8a\x09\x40\xac\x6a\x6c\x80\x90\xab\xb0\x21\x08\x38\xc7\x52\x95\x17\x4b\xa6\xb4\xcb\xc6\x1f\xab\x66\x54\xcb\xf6\xfb\x9b\xad\xf2\xbe\xd3\xe7\xac\x34\x7f\xe1\x83\x1f\xca\xec\x5d\xe4\x0e\xb9\x9c\xda\x3e\x77\xe3\xda\x20\xb9\x61\xc8\xc5\x0c\xaf\x5a\xb2\x23\x86\x66\x4c\x53\x94\x66\xc9\x3a\x43\x08\xb1\xa1\x3b\xb2\x22\x23\xd2\x05\x54\x80\x34\xcf\xb3\x08\xe8\x78\xd8\xb3\x40\x98\xde\xe8\x81\x62\x3f\xf9\x6a\x7d\x91\x46\x75\x8a\x5e\xdc\xdd\x6e\xc3\x8f\x74\xd5\x79\x20\xf3\xfe\xce\x29\x83\x07\xe5\x3f\x35\xed\xe5\x6b\xd7\xde\x89\x92\x3c\xea\xd4\x38\x96\xc4\x7c\xac\x41\x0a\x85\x12\x19\x51\x46\x18\x38\x2c\x2f\x86\x3c\x8e\x58\xd9\xd4\x7d\x2b\x42\x32\xe6\x22\x4b\xe4\x5d\x8b\xe6\x79\x17\xa4\xd7\xc3\x77\x9b\x32\xd9\xc8\x79\xb5\xc9\xa0\x1c\x6d\xf8\x91\x65\x4f\x4d\x80\xeb\xb7\x76\x7f\xa3\xee\x1e\xd0\xf5\xf5\x41\x77\x8e\xde\x6e\x38\xb8\xed\x73\x29\x32\xd7\xb6\xd6\x87\x46\xd4\xff\xe9\x68\x4e\xb9\x67\xcb\x75\x0f\xd8\x8a\x33\x5b\x86\x5b\x7f\x2f\x79\xf8\xa3\x57\xba\xd7\xaf\xf1\xf5\x6b\x95\x33\x2e\x41\x9d\x58\xc7\x44\xb1\x30\xc1\x23\x5a\x97\x34\x45\x63\x39\x42\xe1\xf5\x90\xb0\x3d\x11\x0a\xa1\x29\x38\x9e\x6a\x33\x64\x44\x05\xc8\x01\x96\xae\x84\x04\x61\x30\x30\x7c\x31\x02\xea\xb7\xee\x9f\xe3\x8d\xe1\xb5\x2e\x4c\xbf\x34\x7a\x71\x8f\xda\x23\x53\x3e\x1b\xba\xe3\xc4\x23\xe1\xdb\xa5\x65\x72\x51\x39\x1a\x9f\xa8\x99\x71\xa4\x58\xe2\xb5\x8a\x64\x06\xba\xed\x89\x21\x94\xa1\x23\x11\xbc\x4e\x01\x84\x28\x87\xa6\x64\x52\xf0\x1d\x21\xd0\x63\x56\xe1\xb0\xe6\x6b\x56\x6c\xb3\x96\xef\x10\xdc\x5f\x53\xf3\x05\x79\xfe\x6f\xfb\xe6\x94\x16\xd9\x72\xf4\x2a\x38\xf8\x79\x3e\xcd\x22\xb7\xcc\xce\xdb\xce\xd6\x58\xb7\xba\x3b\x9e\xbb\x69\xea\xed\xb7\x57\x4e\x9d\xfe\x6d\xe7\xca\x6f\xd5\xd3\xb6\xfe\xba\x20\xf5\xed\xe4\xb2\x49\x71\x42\x6c\xea\x06\x15\x4b\xaa\xac\x20\x86\x08\x19\x88\x85\x88\x24\x28\x22\xa2\x62\x8a\x85\x81\xed\xfb\x30\x08\x75\x88\xec\x38\x0e\x39\xdf\x09\x1c\x5d\x4f\xa7\x94\x6c\xd1\xee\xc0\x65\xab\xe4\xf7\xbf\xae\xab\xf3\x6c\xef\x96\x6e\xf5\xde\x08\x07\x2f\xb8\x34\xa5\xcf\x9c\x2d\xc1\x9a\xd9\x93\x8a\x94\xc9\x91\xe4\x31\x23\x32\x29\x21\x42\x0a\xad\x32\xaa\x82\x80\xea\x39\x8c\x0e\x08\x3f\xc4\x90\x86\x92\xcd\x7a\x8c\xc1\xd8\x12\x76\x45\xd7\x52\x6c\xd3\xb7\x64\xe5\xdf\x80\xd6\x17\xcd\x0e\x9e\x3c\x6c\x36\xf6\x8f\xed\xf7\x6b\x8d\x6e\xdd\x6d\xe2\x9d\x97\xae\xef\x34\xa6\xe7\x38\x77\x32\x65\xf3\x4f\xef\xff\xd9\x73\xec\xb5\xb8\x78\x72\xb3\xaa\x44\x99\x0c\x4b\x39\xaa\xeb\xb8\x9e\x69\xa8\x92\x6d\x72\x84\x4c\x3a\x2c\xf6\x4d\x14\x39\xb4\xcc\xb1\x91\x02\xa1\xea\x51\x32\x65\x3a\x86\x65\x20\x0e\x24\xae\xcb\xaa\xd5\xf7\xbd\xb7\x3a\x9d\x49\x5d\x7d\xf5\xf8\x9a\x42\x1d\xf6\xdf\x3c\xff\xd3\x47\xa7\xc2\xef\x06\x6e\x1f\xd7\x71\xef\xf2\x6a\x73\xce\x34\x4d\xf2\x98\xd1\x61\x3c\x23\xb6\xed\x00\x5b\x3a\x21\x4a\x9e\x14\xf8\x21\xaf\x0b\x20\xd0\x14\xcb\x0c\x58\x89\xc3\x2a\x4b\x18\x36\x36\x7d\x60\x20\x4e\x07\x4a\xe4\x27\x2e\xdc\x0b\x5d\x78\x79\xda\xcd\x2e\x53\x06\x5e\x3a\x3a\xe0\x74\x9d\x0f\xd5\x16\x6f\xd6\xdc\x56\x61\xee\x90\x91\x77\x76\x7c\xbe\xf4\x8b\x2d\x97\x5e\xce\x38\x0d\x44\xe2\x53\x54\xd5\x97\x75\x80\x35\x4c\x61\x3e\x26\x48\x4b\x61\x59\x04\x78\x43\x21\x35\x10\x61\x9e\x75\x5c\x57\x95\x5d\x52\xe4\x08\x57\xf4\x29\x81\x75\x63\x98\xa0\x2e\xf3\xa9\xae\xab\xd6\x54\x1f\x7f\x7f\xdd\x4e\xeb\x4a\xc5\x33\xc4\x39\xed\xcb\xb5\xc5\xb2\xbe\xf2\xf6\xe0\x36\x2d\x6a\xc3\x3a\x6d\x3f\xff\x3c\xb9\x85\xbb\x2f\x30\x1c\x0e\xb1\xc7\xcb\x1a\x23\xf9\x5e\x14\x11\x72\x1c\x13\x96\x60\x00\x95\xf6\x04\x45\xb6\x5c\x3a\xa6\x80\xe3\x50\xa2\x43\x87\x06\xb2\x79\x22\x9d\x0b\x91\x5e\x55\xbf\xfe\xb0\xe8\xfe\x6a\x23\xfa\xbe\xba\xed\xdb\x09\x5b\x37\xaf\x5c\xd8\xbd\x66\xae\x5a\x79\x8f\x2c\xde\x94\xd6\xa1\x5b\x93\xb4\x95\x5b\x93\x6b\xb6\x81\x91\x86\x58\x22\x94\x3d\x52\xf6\x58\x47\xc1\x01\x4d\x7a\x3a\xf2\x21\x36\x6d\x52\x37\x05\x5b\x21\xa2\xc8\xf2\x49\x89\x36\x74\x59\x30\x38\xf7\x6f\x64\x58\x6b\x72\xfe\xdf\xb6\x5e\x29\x2d\x0a\x66\xfe\x6f\xe9\xb3\x9c\x87\xcc\x65\x69\xaf\x6e\xcd\xd2\xa9\x4a\xdb\xba\x1d\x7a\x9d\x5d\x38\xb1\xd9\xca\x4d\x39\x46\xfd\xfe\xfe\xfd\xdd\xd7\x66\x1e\x9b\xd0\x64\x6a\xb2\x6f\x94\x0c\x5f\xc4\xae\xe5\x62\x32\x40\xac\xa6\xda\x2a\x0a\x55\x01\x30\x1e\xe4\x02\x8b\x88\x10\x6b\xc9\x8c\xab\x5b\x56\x44\x9a\x40\x36\xc8\xd8\xd6\x8d\xc4\xd3\x2f\xb5\x5c\xb7\x83\xf6\xa7\xcf\xf2\x6a\x3d\xdf\x01\x83\x36\x5c\x2d\xf9\xe4\xe0\xaf\x99\x2a\xdf\xce\x3a\xa4\xf9\x9c\x25\x83\xef\x9d\xfb\x26\xe3\x9a\xc7\x89\x99\xca\x10\xcb\xf3\x26\x86\xb6\xe1\x09\x82\x22\x31\x34\x09\x55\x49\xe3\x71\xec\x68\x92\x4e\x2b\x12\x15\x5b\x8a\xe6\x22\x18\x70\x31\x63\xa9\x48\x0f\x80\xf3\x62\x29\xb7\xa0\x24\xfb\xac\xea\x77\x3d\x3e\xcd\xb5\x75\x75\xdf\x25\x77\x3e\xc8\x96\xf7\x8b\xcf\xde\x2d\xba\xa3\xf2\xb0\x95\xc5\x0d\xd0\x31\xe7\xf8\xef\x92\xcc\x20\xaa\x06\x0e\x0d\x59\x9f\x24\xa0\xcb\x9a\xac\xea\x8a\x21\x16\x0d\x3f\x54\x19\x2c\x39\xae\x15\x13\x91\x2d\x49\xac\x21\xfb\x0a\xb6\x0c\xe0\x6a\xb2\x93\x4e\xc2\x29\x97\x7f\x6d\x7b\xaa\x8e\xd1\xec\x8d\x43\x68\x7d\xc1\xa9\x61\xfe\x5d\x65\x84\xaa\x4f\x7e\x98\x33\xaf\xf7\x67\xe6\x9f\x1f\xae\x41\x35\x92\x3c\x88\xd6\x3c\x8a\x94\x2c\x49\x36\x55\x97\x64\x19\x09\xb3\x9a\x13\x10\x2e\x0d\x02\x1b\x68\x52\xcc\x93\x11\x2b\x82\x58\xf1\x2d\x83\xe0\x34\x02\x09\xdc\xdf\xee\x15\xfe\xd7\xe4\x95\x6f\x34\x1c\xd6\x6b\x59\x8d\x8d\xa7\xfc\xb6\x2b\xbe\xaf\x84\x5a\x45\x67\xc7\x0e\xb8\x7e\x6b\xfb\x8d\x32\x59\xb6\x94\x3a\xca\x0d\x2f\x90\xdc\x1c\xe9\x70\x06\x1b\xf9\x3c\x19\x63\xd3\x74\x05\x4d\x22\x3d\x41\xf1\xd8\x40\xb5\xc9\x40\xd1\x09\x13\x2b\xb1\x64\xf8\x0e\x52\x04\x91\xe6\x75\x84\x21\xc1\xff\x95\x23\xff\x73\xab\xf0\x4f\xbb\xa3\x94\xe6\xb9\x72\x15\x7d\x1e\x95\xda\x65\x45\xfc\x47\xd3\xdb\xeb\x07\xf6\xcb\xd4\x63\x6e\x75\xb9\x68\xb5\xa1\x3d\x56\x7e\x06\x1f\xac\x6f\xd8\xa6\x50\xb5\xe6\xc3\x1b\x56\x5c\x9c\xdc\xdf\x05\x79\x11\x84\x2e\x67\x53\x8a\xef\x31\x2a\xa5\x73\xb4\x2c\x99\x26\x69\x04\x41\x64\xa9\x0e\x1d\xd0\x1a\x43\xb1\x31\xe5\x7b\x6e\xc4\x5b\x76\x08\x95\xf4\x24\x61\x3b\x59\x45\x26\xfe\x26\xe7\x3e\x73\xad\xc6\xa2\x63\x97\x77\xd5\xac\xb8\x7e\x61\x91\x05\x33\x05\x7e\x0e\xcc\x9b\x7a\x74\xf5\x54\x2d\xe3\xf2\xd9\x89\xc7\xd6\x58\xc2\xbe\x1f\xb9\x92\x64\xca\xac\x1f\x3b\xc0\x03\xbe\xad\x21\x1e\x40\x80\x75\x05\x05\x86\xae\x61\x92\x09\x69\xac\x69\x31\xcd\x09\x48\x71\xd2\x01\x68\x37\x99\xf2\xdb\xf0\xd2\x73\x72\xe5\x1a\xd7\xab\x41\xbe\x9c\x8d\x8f\x9c\x1b\xbb\x6b\x47\x85\x6f\x8f\x5f\xfb\x25\x65\xf3\xb3\x0f\x32\xd5\x9c\x5d\x28\xb9\x2e\x25\x68\x86\x61\x45\x8c\xa0\xb3\x96\x0b\x34\x3a\xe0\x15\x92\x64\x42\x3e\xa6\x98\x50\x15\x1c\x99\xb0\x84\x58\x8b\x22\x18\x2b\x4a\xe0\xc4\xbe\x1f\x33\x7c\x3a\x1a\xaf\x8b\x2b\x1b\xef\x6f\x9f\xbf\xec\xca\xdc\xf9\x53\x77\x8e\xae\x58\xfa\x7b\x24\xed\xbd\xc3\x7f\xf9\x5e\x95\xaf\x4a\xed\xea\x57\xd6\x7a\xc4\x27\xb7\x45\xe1\x19\x82\x65\x63\xc4\x7a\x3a\x15\xb2\x0c\x0d\x15\x45\x10\x4d\x95\x14\x39\x1a\x30\x1c\x65\x62\xec\x39\x91\xe5\x33\x26\x96\x21\x8f\x45\x46\x63\xc1\x5f\x47\xb3\xff\x01\x68\xff\x53\x07\x96\xd2\x22\x4f\x9e\x4c\xff\x05\xd0\x2e\x90\x36\x3e\xdf\xb1\xaa\x6b\x2a\x3b\xe8\xb2\xb4\x72\xc1\xf1\xf2\xc5\xdf\xd9\xdc\xad\xce\xf2\x70\xca\x66\xa9\xd8\x86\x0a\xeb\x97\x26\x59\x85\x28\x26\xb5\x20\x00\x72\xe4\x09\x58\x33\x0d\xca\x0c\x68\x3e\xd0\x42\x1a\x41\xce\x02\xd0\xa7\x34\xd5\xf5\x62\x4d\x07\x16\xd4\x20\xa1\x92\x2c\xe7\x10\x66\xe2\x1f\xa7\xd6\x07\x7c\xb3\xf2\x33\x0b\xd4\xce\x56\x6c\x65\xa7\xfd\xdb\xaf\x73\x63\x6e\xb6\xe8\x5f\x2e\xe5\xdb\x70\xfd\x8d\xac\x6b\x9e\x35\xbb\x98\xf1\x89\x77\xe2\x6b\x23\x9f\x10\x38\x03\x90\x81\xe9\xca\xa6\x24\x09\x26\xb6\xa1\xc6\xf1\x0c\x00\x86\xaa\xab\x01\x32\x58\x24\x09\x18\x13\xbc\x1f\x85\x76\x20\xf2\xd8\x49\x67\x5e\xd5\x61\xfa\xbd\xed\xaa\x9e\xf6\xb4\xc4\x2b\xb3\xd9\x59\x6d\x2f\xdc\x0a\xbf\x1e\x4c\x8c\x40\x6d\x5a\x35\x2d\x72\x65\x00\x7d\xba\xdf\x8d\xe4\xbe\x63\x96\x84\x68\x57\x8a\x6d\x87\xa4\x63\x97\x15\x22\x49\xa7\x48\x89\x0e\x05\x99\x32\x90\x14\x45\x54\x4c\xd3\x82\x40\xfa\x16\xa7\x21\xd3\xe6\x43\xc5\x40\x7e\xe2\xaf\x5d\x7e\x6b\x95\x82\xa3\x66\x14\x7e\x32\xad\xe9\xef\x27\x4a\xb4\xe8\xd3\xef\xdb\xe3\x69\x67\xf3\x7c\x7b\xf4\xcb\xd7\xa7\xbf\xdb\x65\xbc\xde\xa8\x73\x92\xef\xee\x4c\x18\xb8\x21\x0d\x22\xa0\x87\x2a\x2b\x22\x4a\x73\x59\x9a\x09\x54\xc1\x70\x3c\x9b\x37\x04\xc3\xa4\xed\x48\x0d\x42\xdf\xf2\x20\x65\x5a\x86\xcc\xff\x25\xb2\x70\xb6\xc1\xff\xbb\x78\x1f\xd5\xe6\xab\x37\x6e\x75\x5b\xd8\xa4\x47\x4b\xbe\xc1\xa1\xc5\xa5\xb2\x96\xdf\xb1\xe3\xfd\x79\x69\x4b\xba\x8d\x3f\xf4\xf3\xdc\x9b\xc7\x8f\xa5\xb4\xb8\xf1\xac\xe1\xd3\x89\xa5\x9e\x1b\xcb\x7d\xfc\x6e\xdf\x1f\x2b\x56\xec\x78\x68\xfe\xce\xf0\x13\x65\xf8\xa8\xbe\x63\x5e\x29\x36\xe3\x52\x9e\x0f\xab\x7e\x21\x15\xbd\xf3\xaa\x52\x28\xe3\x85\x51\x3a\x60\x26\xcf\xd1\x6c\x8a\x96\x00\x30\x74\x85\xd2\x30\xe2\x39\xd9\x30\x04\xe0\x8b\x0a\x70\x19\xc6\x37\x21\x43\x73\x1a\x14\x28\x4e\x8c\x23\xdd\x25\xe2\x04\x9c\x6b\x43\x4e\x6c\x58\x72\x22\xcf\x57\x13\x3a\x4c\x5b\xdc\x79\x67\x99\x0d\x5d\x9a\x76\xce\xde\x64\xc8\x9a\x85\xeb\xd7\x97\x2b\x39\x66\xf3\x21\x2a\xb9\x13\x72\x4e\x8f\x03\x3d\x64\x14\xcf\xd1\x3d\x03\x22\x43\x82\xb2\xc6\x52\xb1\x13\x05\x9c\xca\x33\xac\x47\x47\xa4\xef\x68\x6a\x2c\xd2\x21\x2d\x22\x8a\x31\xbd\x28\x01\x94\x6f\xe4\x05\xbf\x3e\xd9\xd3\xa8\x7c\x7c\xc0\xbd\x9b\xc7\xbf\x2d\xf5\xed\xbc\x57\x66\x55\x1c\x5d\x51\xa8\x9b\x67\xec\xcc\xfd\x47\x70\x2a\x4c\xb2\x33\x41\x45\xe7\x23\x13\x59\x9c\x80\x04\x02\xc4\x8e\xaa\x2a\x20\xf2\x5c\x02\x92\xbe\x60\x8b\x9a\x17\x30\x51\xec\xa8\x36\x08\x68\x46\xb5\x69\x3d\x14\xb8\xc4\x43\xfd\xbd\x6d\x8b\x77\xec\xf3\x76\xc1\x56\x15\x2f\x3c\x2d\xfb\xea\xa9\xf6\xfd\xc6\x10\x59\x0a\x74\xca\xcd\x9d\x9c\xba\xa9\xd3\xda\xc9\xc3\x52\xed\x64\x6f\x32\x21\xef\xa9\xaa\xe0\x13\xd0\x16\x15\x0c\x83\xc0\x21\x35\x13\xeb\x66\xf4\xaf\xe4\xe8\x48\xb4\x49\xea\x52\x6c\xc5\x12\x41\x84\x3c\xaf\x84\xc2\xdf\x20\xaa\x7f\x0d\x40\x8b\x35\x25\x77\xef\x38\x76\xa4\x5e\xb3\xb9\x46\xff\x65\x9f\x5a\x02\x7b\x6d\xe7\x81\xc5\xa9\x39\x6a\x77\xaa\xba\x6b\x68\xd3\xca\x19\x5f\x54\x25\xec\x4f\x64\xc4\x99\xc8\x23\x14\x9b\xa4\x6d\x3d\x20\x59\x0b\x39\xb2\x4e\x41\xca\x10\xfd\x90\x09\x49\xe8\x0b\xba\x4b\xe9\x88\x20\x79\xe4\x99\x2e\x1f\x12\x90\x4d\x87\x92\xf8\xcc\x94\xab\x12\x51\xee\xd5\x03\xad\xca\x0e\xfa\xf3\x8d\xfb\xbf\xb9\xdb\xae\x15\xd9\x57\xed\xc3\xbd\x6f\x1f\x18\x5a\xaf\x5e\xa1\xfc\xff\xc3\x05\xf4\xd7\xef\xd2\x74\xcb\x93\x01\x63\x4a\xd5\xda\xb3\xfc\xc2\xb6\x63\xe5\x0f\x17\x30\xda\x57\x3c\x38\x77\x92\xd6\x6c\x46\xa3\xd6\xaf\xcf\x6d\x51\xcc\xca\x94\xdc\x07\xcc\xd6\x58\xa0\x44\x96\xa8\x18\x31\x2d\x88\x50\x37\xa2\x08\xf1\x4a\x84\x39\xc3\x02\xa2\x05\x30\x4b\x78\xaa\xa2\xb3\x81\xca\x23\x41\x37\x18\x47\x17\x12\x50\x45\xbf\x99\x73\xe3\x2b\x05\xd6\x0c\xa7\xaf\xe3\x36\xf5\xcf\xbf\x54\x71\x66\xa9\xd3\x52\xc9\x9f\x57\xb1\x8f\x0e\x9e\xfa\xa0\xe8\x27\x0d\x6e\x24\x77\x58\xc5\xf1\x42\x18\x98\x32\xab\x45\x16\xe0\x02\x5f\xd5\x74\x4a\x45\x26\x13\xaa\xa6\x1e\x0a\xc0\xb2\x71\x24\x7a\x4a\xe8\xc6\x51\xa4\xb2\xbc\x44\x21\x18\xc0\x74\x88\x08\x06\xe7\x88\x67\xde\xba\xfd\xa8\xcd\xf8\x4d\x37\xaf\xb7\x7d\x6d\xc8\x0f\x83\x1b\xd4\x3a\x7b\xc5\x28\x72\x60\xc3\xde\xc2\x8f\x7e\x98\x37\x32\xe3\x12\xc7\x09\xcb\x4f\x55\xe7\x64\x4a\x93\x43\x93\x66\x89\xd8\x09\x15\xd1\x76\x6d\xdd\x24\x00\x2f\xa0\x10\xfb\x90\x88\x55\x2a\xb4\x14\x87\xa4\x02\x82\x90\x25\xcb\x90\x10\x99\xb8\xfc\x0c\x8b\xee\x3c\xfb\x51\xde\xf8\xbd\x11\x93\x1a\x36\x91\x0a\x16\x7b\x77\xdc\xbd\x57\x3e\x33\x8d\x7a\xcd\x2b\x7f\x5b\xa6\xc1\x93\x8f\x4a\x9d\x4d\x6e\x14\xb0\x0c\x2f\xd9\x1e\x4b\x1a\x16\x54\x6c\xc9\xf7\xc5\x90\x47\x91\xa0\xab\x91\xa8\xb9\x9e\x60\x53\x2e\xff\xaf\xf6\xcb\x46\x81\x8a\x23\xc7\xe5\x22\x07\xa6\x53\x35\xcf\xeb\x45\x96\x99\xd4\xf8\xe5\x16\x3f\xbe\xfa\xc9\xb2\x65\x3d\xd9\x0f\xea\x74\xde\x54\xb1\xd8\x26\xa7\x5a\x19\x7c\xd9\x18\xb7\x2b\x2d\xe3\x4a\xdf\x89\x01\x1f\x58\x15\x24\x45\x51\x38\x45\xc1\x0c\x69\xab\x02\xc5\x3b\x4a\xe8\x13\xac\xed\x88\x02\x90\x1d\xca\xe7\x3d\xc9\xf1\x22\xcf\xe6\x08\xc1\xa4\x74\xd9\x89\x13\x9b\xbd\x74\x6b\x41\xe9\xdd\xeb\x0b\x96\x75\x98\x5b\x6f\xe2\x69\x71\xd8\xf7\x05\x77\x39\xf7\xd5\x16\xc3\x97\x57\x5f\xfe\x66\x9a\xb7\xa7\xd8\x8c\x24\xc3\x54\x15\x13\xb9\x9a\x6f\x07\x9a\x6a\x39\x9c\x46\xfb\x34\xe1\x6b\x16\x23\x69\xb4\x43\x0b\xb6\x16\x03\x4a\xe7\x88\x08\x6b\x20\x72\xb8\xc0\xb6\x54\x0f\x8b\x89\xb3\x7b\xa9\x72\xc7\x7a\x7f\x50\x61\x5f\xb1\xd5\xe3\xea\x9c\xcc\xf1\xcd\xef\x5d\xa7\x96\x98\xf8\xdb\xe4\x94\xaf\xb3\x9d\xbf\x31\xa3\x78\x83\xba\xe7\x33\x4e\xcd\x95\x78\xa7\x2f\x72\x40\x92\xd5\x88\x60\x1d\x1f\xea\x06\xab\x88\xbc\xe1\xeb\xd8\x14\x14\x9d\xd1\x59\x55\x56\x44\x97\xd5\x14\x8d\xa0\x82\x50\x84\x81\x23\x2b\x42\x82\xec\xde\xa7\x70\xb7\x4a\x0b\x36\x67\xce\x34\xf6\x40\x9f\xcd\x4c\xd3\xde\x63\xd6\x7c\xf4\xc7\xbb\x46\xd5\x46\x75\xbe\xdf\x4c\x4f\xc8\x13\x15\xec\x94\x5c\x07\x61\x75\x68\x20\x0e\x32\xb6\x18\x81\x30\xd4\x55\x41\xf2\x2c\xec\x4a\xba\xe2\xab\x42\x24\xc6\x32\x15\xe8\xa4\x6e\xa8\x34\xf4\x34\x3a\x30\x11\x6b\x69\x44\x3a\xd9\xbd\xd4\xc4\xd5\xfd\x1b\xfe\x56\x6b\x6a\xe3\x4a\x15\x4b\x35\x2d\xd0\xe6\xa0\xf9\xdd\x7b\xe7\x37\xb5\xbb\x3c\xeb\xec\xd7\xb7\x0d\xe7\xa6\xbf\xe9\x39\x77\x3a\xf7\xe7\xea\xea\xe7\x8e\xe4\x18\xda\x26\x57\xa5\x9f\x2e\xdd\x5e\xc5\xdd\x62\x56\x73\xcd\x5e\x3e\x77\x6b\x99\x7c\x6d\x60\xfd\xa5\x44\xc6\xf7\x44\x09\xff\x48\x2e\x8e\x28\x56\x82\xba\xa3\xb3\xa6\x2d\x22\xdf\x15\x63\xda\x8c\x95\xd0\x95\x01\x11\xb8\x10\xb1\x50\x12\xa3\x98\x72\x29\x29\x30\x6d\x4d\xd3\x61\x4c\x27\x86\x3d\x75\xc9\x11\x6e\x35\x85\x7b\x8f\x46\x7e\x30\x2a\xd3\xd9\x82\xab\x6b\x2c\x2a\x3c\x3f\x98\x5c\xb9\xf7\xd6\x78\xe8\xba\x47\x9d\xb7\xde\xce\x78\x8d\x93\xd0\x9d\x42\x25\x14\xac\xc0\x93\x63\x3b\xc0\x21\x49\x5a\xd0\xf0\xb1\x27\x98\x2c\x03\x54\x41\xb4\x38\x91\xe1\x25\x97\xe5\x43\x3e\xd4\x6c\x45\xb0\x28\x35\x8c\x12\x4c\x9a\xbb\xcd\xe7\x67\xf6\xf0\x2b\xbd\x55\x33\xc7\xe8\xd4\x51\x4d\xea\xd6\xfb\x7c\xe4\xe4\xb1\xb9\xee\xc6\x93\xc6\x67\x1d\xf2\x7a\x96\xe6\x8b\x93\xcc\xde\x1e\xf1\x84\x6e\x93\xa4\xc6\x5b\xd0\x11\x3c\x41\x62\x5c\x07\xb9\x84\x69\x05\x26\xad\x09\x2a\x1b\x07\x91\xae\x51\x8a\x10\xb2\x0a\xcd\x72\x14\x25\x00\x21\x01\x52\xeb\xe2\xcb\x9f\x78\xd9\xd6\x5c\x1f\x56\xb3\xd5\x8a\x25\xef\xbc\x7d\xbe\x49\x8b\x95\x73\xef\xc9\xc7\x3e\xf0\x8a\x66\xef\xbf\x65\x49\x97\x16\x19\x2f\x7e\x13\x2b\x92\x71\x2e\xc7\x18\x2a\x20\x04\x35\x10\x29\x2b\xe6\x39\x0a\x87\xb2\xc1\x2b\x08\x3b\x2c\xcb\x0b\xae\x6e\x10\x34\x36\x74\x46\xe4\x03\xca\x20\x68\x5e\x35\xd2\x89\x80\x25\xb5\x6f\x56\xbf\xae\xdf\x4a\x9b\x2a\x67\x7b\xba\x5d\xdb\x36\x4d\xab\xa4\x86\x87\xd3\x0a\x2f\x98\x73\xf0\xf0\x7c\xa2\xcd\x95\xc7\xcf\xff\xef\xaf\x82\x12\xcb\xdb\xdd\xab\xf5\xeb\xb6\x86\x93\xdd\x05\x63\xb6\x05\x7d\xd6\x2d\xdd\x18\xad\xcb\x5d\x7d\xf9\xd6\x5c\xab\x27\x2d\x3b\xda\xeb\xb9\x78\x81\x27\xfe\xc8\xdc\x70\x1b\x73\xff\x08\xf7\xfa\xfa\x0b\x1f\xff\x19\xb6\x9c\x70\xe3\x5a\xd6\x83\x5d\xbf\xff\xa3\x91\x53\x63\x79\xcd\x53\xf3\x93\xfb\x2b\x02\x14\xa3\xd0\x0f\x4c\x95\x92\x59\x45\x65\x10\x1b\x45\x50\x31\xa0\x6c\x39\x86\x11\xb3\x61\xcc\x8a\x02\x42\xb6\xe8\x40\x5b\xa1\x8c\xd0\x26\x03\xd5\x49\x7c\x65\xd7\xe2\xe8\x07\xab\xb2\xd7\xcf\xf2\xf4\x50\xda\xb3\x1d\x33\x3e\xa8\xd0\x38\xdf\x82\xa7\x0f\x7f\x6d\x99\xe3\x5a\x83\x69\x5d\xd2\xc4\xb5\xb5\x93\x4b\xe8\x08\x28\xcb\x0d\x04\x42\x25\x39\x3a\x20\x24\x9b\xb0\x28\x5a\x52\xa3\x98\x95\x89\x28\x0c\x15\xe0\x73\xa4\xe8\x1a\x1a\xa1\x63\x9f\x74\x64\x46\x8f\x38\x8a\x17\x5e\x6c\x63\x96\x9f\xbb\x4b\xcd\xeb\x32\xc2\x5e\x5a\x42\x01\x35\x0f\x2f\x7a\xe8\x4c\x2b\xee\x4c\x75\x3f\x4e\xf1\xa5\xea\xb8\x7c\xad\x61\xd7\x92\x5b\x56\x70\x88\x8c\x49\x4d\xc7\x64\x44\xd0\xd0\x8d\x74\x3b\x84\x34\xa6\x5d\xcb\x71\x4d\xdd\x0e\x11\x04\x3e\x2d\xd3\x8c\xe3\x46\xb4\x41\x43\xc3\x40\x31\x41\xbe\x38\x45\xdf\xc6\xb4\xa8\xb4\xb3\x40\xed\x4a\x03\x3e\xd8\xb4\x7b\x67\x9f\xa9\x47\xee\x35\x06\xcb\xcb\xbc\x79\x4e\x5c\xf0\x6b\x65\x67\xcd\x1f\x7c\x92\xe1\x54\x8c\xc3\xd3\xaa\x02\x7c\x45\xa2\x3c\x56\x91\x79\x0d\x87\x0c\x8d\x05\x20\xb0\x48\x15\x42\x5d\x92\x15\x0d\x38\x1c\x49\x59\x94\x48\x89\x9e\x84\xe8\x38\x1d\xea\xea\x9d\x7b\x1f\x76\xbf\x7d\xe0\xed\xb6\xd2\xf5\x33\x3b\x0a\x37\x38\xda\x63\x44\xaf\x6f\xee\x56\xad\x5a\xeb\x52\x83\xc7\xab\x1e\xca\xbf\x4e\xfd\x26\xb9\xe5\xb2\x42\x43\xc7\xd5\x42\x4f\x8a\x45\x07\x79\x06\xe9\x39\xac\x1d\xba\xb2\x2a\x73\x94\x4b\x19\x56\x00\x80\x67\x6b\x2c\x8f\x81\x1b\x39\xd8\xf3\x44\x47\x50\xd2\x01\x44\xb4\x12\xc7\xae\x11\x17\x2c\x2c\x54\x25\xeb\x81\x77\xda\x8c\xff\xa5\xdd\x08\xf1\xc9\xea\x8b\x4f\x0a\x96\xac\xd0\xec\x8b\xd9\x6b\xf7\xd7\xef\xf4\x5c\x04\x04\xc3\x52\x4b\x6f\x1f\x3a\x78\xe8\xba\xa9\x77\xa2\x1f\x87\xcd\xf9\xe6\xb3\x13\x7b\xf6\x15\xac\x59\xae\x7b\xb7\x9c\x79\x9a\x6e\xda\x73\x39\xc9\xcc\x28\x86\x4e\xfa\x84\x48\xaa\xb6\xe4\x98\x32\x36\x5c\x51\x62\x39\xa8\xba\xa6\x21\x68\x08\x7a\x0e\xed\x92\x0e\x34\xa1\x2d\x69\xd8\x62\x78\x8b\x24\x34\x22\x78\xd1\x9d\xb6\xd4\x2a\xb8\xe7\xcc\xd2\x3b\xf5\x2e\xec\xb7\x4f\xac\xff\x43\xae\x36\x7d\xb6\xfc\xb8\x79\xae\x8d\xbd\x76\xfc\x79\xa0\xdd\xcf\x57\x7a\x65\x5c\xc5\x29\xa1\x3b\x49\xb2\x2b\x4b\x51\xc0\x08\xa6\xa5\xd0\x81\x43\x33\x94\xc7\xa9\x14\x76\x50\x10\x20\xd6\x90\x31\xc9\x51\x31\x89\x79\x8b\x64\x29\xd6\x50\x4d\xa0\x13\xca\x8b\x41\xbb\xbf\x66\xfe\x95\x76\xef\x4c\xa9\x65\x2b\xe5\x9c\x9f\xeb\x95\x21\x95\xa6\x0e\xe9\xde\xbf\x69\xe3\xb3\x59\x56\xa0\xf2\x8d\x67\xff\xbe\x36\xe3\xa4\x1b\x09\xc7\x25\x9a\x60\x45\x0e\x22\x0c\x9b\x44\x9a\xa7\x05\x36\x07\x2d\x85\xf3\x29\x9d\x00\x82\xef\xb8\x92\x6f\x62\x03\x6b\x88\x27\x24\x49\x90\x38\xd6\xa3\x02\x40\x24\xc6\x8b\x55\x28\xbe\xc1\x89\x77\xbe\xfa\xce\xe8\xf7\x4b\xfc\xd9\xe1\xc7\xde\xfb\xdb\xe7\xd9\xd9\xaa\xd8\xd4\x06\x4d\xe6\xd8\xc4\xe2\x56\xa5\x0e\xa7\x24\x37\xab\xf3\x8a\xc5\xd2\xa6\x16\x00\x49\x88\x6c\x3d\x66\x78\x41\xe4\x02\xc3\x67\x23\x42\xa1\x94\x08\x9a\x48\xb2\xfc\x28\x36\x58\x21\x60\x58\x96\xd7\x05\x55\x07\x2f\xbe\xcd\x6b\xda\x6d\xad\xf2\xe4\xe7\x9f\xd6\x5d\x5f\x91\xa3\xc8\xca\x5b\x65\x1f\x45\xda\xae\x2e\xd7\xe7\x2d\x6d\xf5\x45\xa3\xd6\x9f\xef\x8e\x73\x64\xfc\xda\x25\xf1\xb9\x77\x08\x6c\x64\xfa\x0a\x42\x20\xb6\x24\x39\xc4\x3c\x66\x81\x87\x68\x33\xa6\x24\x59\xe5\x90\xa0\x72\x4e\x64\x58\x04\xcd\xb8\x82\xe8\x73\x3a\xe4\xf5\x17\x4d\xde\xd0\x72\xf6\x2b\xa5\xfb\x6f\xee\xfe\x5a\x9e\xdf\x26\x65\x59\xf6\x5a\x8f\xe6\x0d\x3e\xf8\xad\x86\xbb\xb0\x7c\xbc\x6d\x79\x83\x63\xe1\x81\xe1\xc9\xf5\x67\x85\x0e\x09\x92\xe2\x43\x2f\x80\x28\x76\x64\xd7\xb4\x23\x25\x70\x19\x5f\xb3\x39\x8f\x50\x20\xc7\x00\x5e\x73\x42\x86\xb2\x23\x97\x76\x55\x5f\xd2\x1c\x36\xb1\x73\x54\x3b\xa5\xf7\x4f\x6d\xd7\xfa\xe8\x84\xd4\x9b\x3d\xf7\xf4\x9c\xd8\xab\xba\x0e\x63\xbe\x53\x87\x39\x3b\x4e\xee\x7a\x4b\x5e\x9d\xbd\x4f\x92\x8f\x90\x65\x85\x14\x39\x52\x86\x8e\x43\xd8\x81\xc7\xc7\x2a\xeb\x23\x83\xb4\x63\x81\xe3\x29\x4d\x36\x22\x59\x27\x6d\x21\x02\xa1\xc3\xaa\x18\xd0\xbc\x0e\x12\xe0\xd5\xa7\x9c\x3b\x30\xef\xf4\xc6\xb3\x4a\x63\xeb\x66\xde\xd9\x56\xf5\xc6\x99\x1a\x76\x9e\x3d\x65\x68\xf9\x0a\xd4\xc3\x3a\xb3\x17\xbf\x7a\x3b\xe3\x77\xd3\x89\xe5\xbd\x0c\xc1\x36\xa0\xa0\x84\x48\xe4\x35\x5d\x57\x80\x64\x02\x0b\xdb\xac\x65\x70\xa2\x2b\xb8\x24\xa7\x52\x3a\xa9\x21\x87\x8f\x3c\xc3\x21\x48\x8e\x14\x12\x20\xa8\x77\x1c\xe8\x57\xbd\x5e\x8e\x60\xd7\xe3\xdc\x3b\xf2\x0e\x1a\xf0\xf3\xe0\x12\xfb\xb6\x4f\x3b\xdf\x66\xa8\x7c\x7d\x6c\xd7\x4e\x35\xab\xa7\x25\x97\xde\x8c\xa3\x19\x23\x8c\x40\xc0\x30\xb1\x09\xe4\x20\xb6\x59\x4b\xe0\x21\x67\x90\x02\x04\x21\x8f\x31\xb4\x45\x89\xa3\x18\xc5\xe2\x79\x68\xaa\x86\x2f\x06\x30\x4e\x07\x8a\x3c\xe2\xb0\xd2\xb5\x40\xe6\xb6\xdf\xb6\x4d\x1d\x3f\x38\xdf\xb4\x45\x57\xd6\x1f\x5a\xf4\x28\xf3\xf6\xee\xb1\xb8\x68\xd2\x7c\x7a\x4d\xc6\x77\x6f\x09\xcd\x76\xb1\x66\xb8\x0a\x66\x0c\x18\x6a\xb1\x42\x42\xc2\x75\x1d\x14\x50\x91\xc7\xb3\x50\x8e\x6c\x52\xf7\x7d\xc4\x3b\xbe\xe8\x58\x14\x1d\xca\x30\x80\x9c\xf5\xa2\x73\x18\xd9\xd7\x36\x6f\xf3\xf1\x9c\xbc\xe4\xaa\x7b\x17\x5b\x67\x29\x9d\x99\x5b\x32\xb1\x82\xd7\x24\xd7\x83\xc3\xed\xf0\xea\xf3\x73\xba\x25\x79\xf0\xc1\xf3\x3c\x94\x4d\x9e\x80\x86\xe1\x4b\x81\x1c\x1a\xb2\xa0\x78\xae\x16\x89\x16\x1d\x12\x48\x57\x19\x36\x36\x23\x9a\x70\x4c\x5d\xa7\x35\x3f\xd6\xfc\x98\x49\x8c\xaa\xc8\x53\xa7\x66\x85\xe1\x27\x0e\x7e\x63\x37\xae\xb7\xf9\x5e\xf5\xf3\x8f\x3a\xd7\x28\x7f\xfc\x71\x8d\x6d\x75\xc7\xbc\xdb\x94\x27\xae\x67\x32\x92\xfb\xa5\xd5\x80\xb3\x29\x29\xd0\x4d\x8e\x24\x15\x9e\x13\x02\xe4\xbb\x81\x15\xf0\x8e\x49\x48\x0c\x6d\x6b\x28\x8c\x00\x46\xae\x6c\x01\x9d\xc7\x12\x69\x03\xc0\xbe\xf8\xa5\x57\xdd\xfc\x65\xf0\x16\xf9\x56\xe9\xf1\xbd\xb7\x1c\xed\xdb\xf2\xb7\x19\x0b\x0e\x7f\x38\xa6\x68\x8b\xa9\xab\xdf\x5d\xfd\x71\x9d\x6b\x7b\x0e\x8e\x4e\xae\xc9\x4a\xa4\x02\x1b\x30\x94\x26\xaa\xa6\x11\x31\x91\x81\x58\x5e\xc6\xb4\x26\x98\x34\x54\x74\xdd\x54\x2c\x46\xd6\x3c\x4a\xfe\x57\xe5\x15\x84\xa6\x64\xfe\x0d\x84\xf9\x5c\x3d\x98\x77\xb2\x79\xfc\xcc\x84\x3b\x0b\xa3\x3c\x83\x7b\x96\x19\x98\xf6\x4b\x3f\x6b\xbd\xf7\x65\x35\x72\xec\xfc\x85\x1d\x4a\x34\x2f\xd6\x38\xe3\xdb\xa8\x84\xa5\x92\x6a\x92\xa6\xce\xa8\x91\x13\xbb\x9a\x0b\x48\xcf\x97\x64\x10\xf3\x86\xe6\xe8\xb6\xa2\xab\x96\x62\x72\x26\x41\x23\xc5\x62\x75\x9e\xb7\x7d\x4c\x29\xff\x9e\xf8\xbe\x38\x13\x18\xf9\x06\x55\xf5\xe0\xe0\x0e\xb3\xf3\x1c\x79\xeb\xf8\xe1\xda\x7d\x86\x3e\x19\xff\x7b\xee\x71\xfb\xd6\x6f\xac\xb8\xb7\x60\x4d\xe9\x73\xa5\x52\x72\xcd\xe6\x79\x25\x76\x71\xec\x20\x03\x62\x9a\x62\x4c\x20\x4a\x22\x6f\xd1\xa2\x46\x6b\x9e\x23\x03\x9f\x37\x10\x4d\x6b\xa4\x20\x69\x1a\x21\x50\x1a\xd6\x61\x02\xad\xb1\x73\xf9\xbf\x6a\xd2\x30\x4f\xaa\x9e\xf7\xd3\x22\x3d\x9f\x3d\xe9\xd7\xa5\x55\xe7\x3f\x85\x99\x0b\xcf\xa6\x16\xfa\x7e\xb4\x9e\xa9\xda\xe9\x8c\x2b\xfa\x24\xac\x3b\x58\x2c\xf9\x1e\x19\xc9\xaa\xaf\x1b\xd8\x8c\xb0\x6b\xd9\x91\x0d\x65\x80\x63\x10\x2b\x26\xa5\x03\xce\x0d\x79\x9f\x0f\x80\xcd\xdb\x21\xef\x52\x11\x32\x5f\xcc\xd3\x4f\x06\x8d\x2a\x71\xc8\xeb\xe6\xb2\xaf\x6f\x9a\x9f\x27\x68\x0d\x06\xbc\xba\xc7\x1b\x36\xbc\xe0\xe7\x23\x26\x2c\x2e\xc1\x19\xeb\xba\x26\x79\x90\x87\x44\xcb\xa2\x3c\x64\x3b\x1e\x62\x20\x88\x24\x49\x33\x62\x92\xe3\x2d\x14\x3b\x5a\xa8\xc7\x58\xb7\x54\x89\x08\x43\x96\x65\x01\xc7\xb0\x0c\xd6\xdc\xc4\xb3\xf5\x83\xf1\xed\xcd\xbd\x37\xf8\xda\x07\xc5\xb6\xc7\x95\xdf\xdf\xf9\x7d\xb1\x96\x5f\x1e\xcc\x9f\x85\xd8\xdd\x6a\x5c\x95\xb7\xb6\x4c\xec\x93\xe4\x0d\x2b\xeb\x23\x33\x22\xf9\x48\x97\x24\xc2\xc1\xdc\xbf\x9c\xd7\x24\xc8\x40\x92\x1d\x91\xf9\x97\x8f\x50\x11\x96\x43\x49\x08\x39\x4f\x65\x55\x41\xb1\x1d\xf8\x57\x61\xfa\x1f\xe5\x95\x7f\x5a\xd2\xa4\xb4\xc8\x92\xed\xf3\x2c\xcf\xf3\x5d\x8f\x5c\xd2\xac\xf6\x87\xe1\x92\x03\x87\x77\x33\xc7\xe7\x2e\x1b\xbc\x29\xcf\xa0\x93\xdd\x71\x8f\x13\x95\xab\x9e\x3e\xaf\x57\xfd\x63\x7c\xc6\xc9\x00\x12\xdf\xf3\x40\x18\x63\x36\x24\x1c\x87\xd1\x2d\x9b\x44\x9e\xc7\xba\x3e\x63\xf2\xa2\xe3\xf0\xbe\x6b\xd1\x8e\x1d\x45\x16\x90\x5d\xc4\xaa\x1c\x8e\x30\x21\x61\x23\x71\xc2\x11\xa9\xe2\x23\xb3\xdf\x98\xf2\xca\xbb\xbb\x7e\x6c\x43\xf4\xa1\x7b\x5e\x9d\xb5\xfd\xf8\xf5\x0d\x39\x8e\xf5\xcc\x72\xfc\xf1\xa5\x8f\xb7\xbb\xc9\x2d\x57\x6c\x46\x24\x48\x46\x75\x6c\x18\x49\x00\x93\x82\x4f\x40\x2f\x94\x2c\x46\x0f\x55\xc5\xc0\x21\x23\xa8\x2e\xcb\x43\xc2\x66\x50\xe8\x06\x2e\x34\x75\x15\x25\xf6\xa9\x0e\xd5\xad\xef\x3a\x1e\xfc\xe5\x87\xb3\xdd\x9a\x58\xd5\xae\x6f\x4b\xbd\xda\xfa\xf4\x9b\x7d\x8a\xf7\xec\xd8\x95\xea\xb2\x78\xa1\x75\xeb\x68\x92\x77\xc3\xa4\x1c\x19\x12\x0e\x7d\x8e\x09\x43\x2f\x0e\x19\x3b\x76\x08\x82\x71\x75\x6c\x47\x81\xc0\x18\x04\x6b\xf0\xa2\xcf\xc5\x7a\x00\x7c\x9e\x8c\xb0\x83\xd3\x21\xb1\xcb\xb9\xae\x69\x81\xbe\xdf\x76\xec\xb6\x6e\xe0\x67\xab\xcb\x7e\xd2\x7b\xfa\xd9\x4e\x73\x87\x6d\x09\x9e\x34\x1d\x73\x56\x1b\x7f\xe2\x8f\x8f\x26\x24\x99\x9b\x23\x0e\x20\xc9\x00\xac\x41\x9a\xd7\x43\x8f\x20\x79\x45\x81\x6a\x80\x65\x8f\x0a\x44\xc9\x90\x14\x47\x31\xe2\x80\xd4\x7c\x42\xc1\x3a\x43\x78\x0c\x41\x27\x5e\x7c\x94\x78\xa7\xed\xc0\x99\x3f\xfc\x2a\xd6\x1d\xb1\xf7\xf6\x93\x5b\xb7\x2a\x0f\xbf\x88\xb2\xff\x92\x82\x7b\x6d\xde\xd3\x6c\x4c\x91\x15\x6f\x35\x48\x6e\xe2\x61\x44\xc3\xe1\x7c\xa4\xca\x91\xe3\x0b\x9a\xa7\xd2\x8e\xee\xb9\x91\x41\x72\x24\x56\x0c\x19\x40\x5a\xe5\x43\xce\x01\x81\x8c\x58\x85\xe5\x7c\x83\x82\x7f\x35\x3c\xff\x39\x0f\xf8\xa7\x41\x7c\x4a\x8b\xa6\x99\xb7\x66\x79\xfe\x3c\x60\xe8\x99\xf7\x46\x17\xdb\x7b\x91\x99\xbf\x2b\xc8\x76\x60\xd0\xd5\x87\xed\x06\x54\xcb\xb9\x79\xfc\xa6\xfb\x33\xaf\xfa\xc5\xaf\xd7\x98\xb3\x3b\xc9\x0c\x83\x44\x20\x52\xc0\x24\x25\x8f\xf7\x11\xb0\x59\x8b\x21\x48\x5a\x23\x1c\x33\xf0\x44\xc3\xe5\x29\xca\xa2\x5c\xcc\x05\x81\x12\x11\x4c\x64\x33\x8c\x4b\xa6\x13\x0a\x37\xbb\x6c\xcf\x9c\x7d\xd3\xac\xad\xb3\xbb\x2e\xab\xdd\xe7\x8d\xf7\xfb\xce\x4d\x3b\x29\xfd\x32\xbc\x6b\xb9\x92\x5f\x8d\x3a\x34\xe8\xce\xac\x8c\xf7\x48\x09\xcd\xc6\xa2\x18\xf0\xa6\x6e\x71\xb6\x67\x58\x02\xcf\x98\x82\x01\x74\x3d\x8a\x63\xc5\x57\x43\x93\x17\x31\x06\xbc\xc6\x38\xb4\xef\xd3\x32\x52\x24\x51\x4a\xef\x55\x18\xbf\xe0\xdb\x85\xef\x4d\x01\xce\xe8\x32\xfb\xbf\x5b\xff\xf2\xe0\x0d\x77\x96\x5e\xe3\xda\xcc\x6a\x74\x23\x9f\x5f\xbb\xc1\x27\x8f\xbd\x8c\xab\x64\x24\xe6\x50\xd7\x0d\x88\x29\xc5\x8b\x35\x4d\x75\x22\x4f\x12\x25\x59\x65\x4d\x47\x89\x1c\xcf\xd0\x15\x29\x50\x08\xdb\x81\x96\xe5\x11\x9e\x27\xe9\x7a\x28\xc3\x38\x1d\xe4\xdc\xe3\xa8\xa5\x58\xbf\xf9\xd3\x3b\x53\x3f\xeb\x5c\xbf\x6c\xef\x56\x85\xf6\xbf\xb2\xe7\x87\x8d\x0b\x6f\xb5\xcb\x99\xb7\x73\xb7\x91\x1d\xb6\x26\x57\xbd\x19\x88\xa1\x42\x7a\x42\xec\x28\xba\x2e\x30\x84\xaa\xfa\x5c\x20\x62\x97\x62\x44\x96\x0a\x69\x82\x73\x22\xc2\xb2\x6c\xc3\xa2\x05\x32\x24\x23\x52\x8e\x48\x22\x4c\x6c\x76\x8e\x25\x97\xf6\x2c\xea\x65\xf4\xf8\xa1\xb7\x7a\xe3\xac\x59\xad\xcf\xe2\xbb\xbb\xdf\x5d\x7e\xba\xff\x4f\xd9\x9b\x7e\x26\xf7\xfb\xe9\xe5\xe9\xc9\x7d\x9d\x90\x25\x01\x97\x17\x43\xc1\x41\xd8\xb4\x43\x95\xe1\x40\xa8\x46\x9e\x4a\x69\x4c\x24\x70\x1c\x4f\x99\x1a\x0b\x01\x90\x59\xdd\x27\x7d\x92\xc3\x5e\x9c\x0e\x30\x25\x7f\xb7\x9a\x5d\x37\x95\xcf\x21\x94\xcb\x9a\xa3\xe8\x0f\xc7\x7f\x1c\xd5\xb9\xc1\xd8\x37\x76\xbd\x3f\xee\x4d\xe1\xf8\x9c\x15\x0d\xb3\x5c\x4b\x2e\x30\x05\xb0\x6a\x88\x38\x01\x87\xa2\xe5\xea\xa6\xe2\xb2\x06\xe4\x65\x9a\x8d\x0c\x05\x08\xb6\x18\x19\x8a\xec\x05\x8e\xc5\xb0\xa6\x60\xb1\x4e\x0c\x25\x89\x8d\x13\xec\x9a\xde\x7f\xa9\xd6\x2f\x2f\x97\x3e\xe9\xde\x39\x3a\x71\xfb\xf6\x63\xcb\x9e\xe5\x2d\xde\xa2\xda\xa9\x6a\x55\x97\x9e\xc9\xb4\xef\xd6\xd5\x73\x93\x2e\x24\xf7\x65\x0a\x6d\x28\x72\x86\x6b\x85\x7c\x84\x0c\x47\x0c\x25\x4f\xe7\x79\x10\x04\x0a\x45\x30\x90\x52\x43\x0f\x71\x34\xc3\x6a\x50\x74\x42\x85\x97\x8c\x40\x55\xff\x22\x8a\x5c\x9e\xf3\xff\xb6\xb2\x49\x69\x5e\x30\x53\xe6\x94\xe7\xea\xfd\xb2\x79\x8f\x4f\xbe\xb6\xee\x97\xaa\xf9\x3f\x1b\x3e\xea\xf2\x5b\x57\x1c\xa5\xd9\x81\x45\x0b\xdb\x2c\x3e\xf0\xd6\x90\x2b\xef\x9d\x8a\x6b\x0e\x4e\xae\x3b\x45\x3e\x60\x6c\x18\x79\xb2\x16\xb1\xb6\x6a\xfa\x2e\xa6\x05\x4f\xa5\x18\x27\x52\x21\xa1\x72\x51\xa8\x98\x21\x4b\xf1\x16\x21\x71\x8a\xcf\xca\x58\xfb\xdb\xf3\xfb\xbf\x26\xd7\xf9\xfc\x54\xeb\xe6\xa3\x0b\x13\x69\xd9\xf6\xb7\x9b\x7c\x38\x6d\x8f\xb1\xe9\xe2\xd8\x4a\xdd\x73\x7d\x11\x1c\x5a\x98\x9a\xe3\x64\xa7\x8c\xd3\xf0\x25\x6e\x51\x4c\x97\x96\x05\x5d\x63\x49\xd2\xa3\x74\x42\x33\x65\x4f\x05\x3c\x4d\x5b\x8e\xcf\x05\xd8\x41\x9a\x04\x6d\xd1\x96\x7d\xd6\x50\x2c\x08\x15\xcd\xf9\xb7\xd2\xd3\xf3\x2d\xca\xf7\x7d\x1b\x9f\xa9\x34\xa2\xe1\xaa\xe3\x05\x0b\xbc\x77\xe8\xa0\x88\xf6\xbf\x15\x9f\xfc\x4c\x5e\x59\x73\xd4\x27\x43\x3a\x33\x4c\xb6\x8c\x1f\x79\x26\xd6\x69\xf3\xb5\x40\xf4\x31\x32\xbd\x88\x20\x34\xd5\x35\x0c\x2a\x14\x19\x4f\xd5\x6d\xc3\x85\xd8\xa2\x44\x03\x5b\x86\x2f\xe9\x44\x24\x70\x8a\xaa\xcb\xd8\x49\x47\x0e\xb9\x92\x7c\x7b\x2f\xdf\xa9\x44\xab\xa5\x1f\x5e\x60\x0f\xa5\x1e\xbd\x5a\x6b\xd8\x4f\x4e\x0b\x0e\x74\x5d\xfa\xb8\x88\x75\xe2\x50\xbf\x24\x93\x01\xc5\x8c\x4c\x48\x54\xe0\xd9\x31\xe4\x49\x9f\x45\x02\x2f\xf9\x8a\x6d\xea\x14\xa7\x53\xb1\xa0\x12\x91\xad\x29\x9e\x45\x91\x92\xce\xea\x84\xc3\x51\x9e\x96\x80\x56\xf2\xbc\x7f\x7d\x69\x29\x5b\x33\x4f\x4e\xea\x3a\xa9\xa3\xdd\x65\x11\x55\x3a\xe7\xd0\x15\xab\x1a\x5f\x69\x3b\x83\xa9\x9e\x7d\xe5\xd0\x11\x49\xe6\xc5\xb0\x08\x1f\x11\x8a\x6e\x69\x34\xd2\x74\x21\xc0\x7c\xc8\xa9\x90\x63\x4c\xdb\x36\x69\xda\xf7\x20\x15\x0b\x96\xca\xcb\x40\x62\x03\x0d\x46\xd8\x11\xd0\x0b\x78\xe8\x7f\xda\x9c\xa6\xb4\xa8\x30\xf0\xbf\x05\x3d\x76\x7d\xb8\xea\xe3\xfe\xb3\xde\x3f\xa2\x37\x7f\xf7\x41\xed\x31\x17\x86\x4c\xbb\x56\x67\xef\xf6\xfb\xf5\xb8\x72\x8b\xfa\x7d\x36\x99\x39\x96\xf1\xfb\x87\xc4\x1c\xb6\x22\x17\xdb\xb1\x4b\xfb\x81\x26\x0a\x50\xf2\x5d\x3a\xf6\x11\xa7\x72\x21\xa0\x43\x8a\xf1\x39\x06\xf0\x22\x8c\x01\xc1\x09\x12\xed\x5b\x00\x49\x1c\x4c\x5c\x34\xb7\x3b\x52\x61\xe2\x8d\xb6\x53\x9e\x3e\xea\x17\xbd\x34\xa4\xe7\x92\x5f\x4b\x4e\x9c\x51\x75\xd7\xc1\x56\xdb\xdc\x5e\x37\x7e\x1f\xf8\x51\xaf\x9f\x93\x5c\xe0\xf8\xc0\xf2\x64\xa8\x03\x26\xc0\xb2\x08\x35\xdb\xd5\x48\xc3\x73\x00\x12\x84\xc8\x92\x43\x06\x71\x24\x0c\x4d\x21\x88\x48\x42\x61\x63\x87\xc4\x82\x93\xf8\xc9\x5d\x42\xbd\xf6\xfb\x82\x2c\x1b\x06\xd4\x1d\x54\xbd\x10\x27\xe8\x8f\xb5\x8a\xd3\x6b\x8f\xcb\x95\xba\x7a\xff\xe8\x5c\x1b\x7b\x35\xae\x99\x71\x9a\xb5\xc4\xa0\x83\xc0\x97\x42\xdd\x31\x65\x56\x67\x31\x20\x0d\xe8\x28\xb2\x47\x09\xbc\x00\x19\xcf\x22\xc2\x88\xa7\x74\x87\x66\x3d\xd2\x13\x65\x92\xa5\x55\xd5\x56\xd3\x31\xbb\xda\xf1\xbe\xcf\xbc\x3a\xee\x97\xc3\xf7\x55\x18\x91\x2f\x15\x8d\x7f\xbb\xc9\xd1\xd6\xa9\xd9\xf3\x94\x58\x3b\x65\x0f\xe8\x3f\x6c\x67\x92\x2b\x05\x05\x06\xa2\x80\x65\xc8\x91\x01\xad\x78\x9a\x4c\xc5\x50\x76\xe3\x58\xb4\x08\x0a\xeb\xb6\x23\xd2\x16\x12\x08\x8a\x84\xb6\xe0\x19\x81\x05\x38\x43\x35\x5e\x08\x85\x7f\xda\x45\xa6\xb4\xc8\x55\x31\x53\xe6\xe7\x43\xe1\x9b\x49\x57\x2e\x94\x38\xff\x75\x15\x39\xed\xbd\x61\x07\xbb\x0c\x7e\x77\xe0\xed\x91\x17\xda\xee\xa6\xdf\x78\xfa\x68\xee\xde\x2f\x96\xad\xcb\x38\x27\x44\xe2\x9b\x5a\x91\x23\x63\x9a\x27\x1c\x9e\x25\x23\x55\x25\x05\x4b\x89\x6c\x06\x47\xb1\xcf\x6b\x40\xc3\x64\x04\x3c\xcf\x23\x23\x1e\x99\x0e\x47\x51\x1c\x4d\x90\x7c\xe2\x1f\xa7\x6c\xd6\x09\xf5\xb6\x1d\x7d\xff\x7e\xfd\x6b\xf3\xde\x18\xf8\xf0\xc7\x03\x5b\x3b\x56\x2c\xbc\xb3\xca\x07\xef\x7f\xe7\x56\x2b\xb2\xe4\xc3\xdd\x19\xe7\xef\x49\x18\x0a\x54\xc8\x7b\x3c\x21\x10\xb4\x44\xf2\x54\x10\x5a\x28\x52\x09\x4d\x07\x8c\x88\x22\xec\xc9\x7a\x10\x93\xaa\xa8\x79\x92\x08\x65\x12\xd9\x24\xcd\x7a\xe9\xf9\xd4\xc9\xbc\x8f\xa8\x5c\x45\xef\xf7\xff\xe2\x7a\xab\xa5\x2d\x4f\xf5\xbc\x76\xbd\x48\xc3\x62\xea\xbb\xf9\x7e\xf8\x74\xf3\xee\x9c\x95\x6f\xbc\x9e\x71\x4e\xaa\xc4\xab\x49\x47\x01\x7a\xe4\x8a\x90\xa2\x25\x8b\xd6\x20\x8d\x28\xd7\x89\x98\x48\x8a\x02\x9f\x97\x30\x1d\xd3\x26\xc9\xd9\xd0\xf1\x43\x95\x40\x72\x80\x0d\x94\x0e\xbf\xe3\xfd\x52\x53\xd9\xc6\x2d\x37\x35\xed\xd1\x27\x4b\x9b\x8a\xbd\x57\x70\x6d\x3e\x98\x74\x28\xf5\x40\xb6\x77\x0a\x37\xfe\x58\x9d\xd9\x2a\xdf\xc3\xe4\x3e\x64\x30\x64\x62\x83\x35\x34\x09\x22\x3f\xb2\x69\x0f\x41\xc6\xc4\x08\x22\x4e\xa0\x54\xcb\xf0\xa1\x8a\x2d\x81\x65\x09\x55\x24\x90\x85\xa1\xe0\x63\xfc\xd7\x30\x36\xa5\xf5\xbf\x2d\x5e\xaf\x4c\x3e\x3a\xb3\x68\xe7\x0d\x27\x9f\xc4\xd2\xf4\xfb\xdd\x8a\x91\xaf\xbf\x7d\x7b\x7c\xf1\x82\xaf\x7f\xb8\xa4\xdd\xb2\xf3\xf7\x46\x2b\x29\x2d\x9e\x9d\x79\xf6\x6c\x62\xf9\xe7\x8a\xb9\x8e\x79\x95\xa2\xad\x4e\x0c\x1a\x3b\xa4\xaf\xd1\x69\xfb\x8f\xad\x5b\x0e\xd4\x6b\x2f\xfd\xf9\xd3\x81\x39\xeb\xe7\x6f\x59\xbd\x0b\xd5\xe7\x7c\x72\xff\x4c\xc6\x56\xb1\xe7\x2b\x9a\x4a\x30\x7e\x2c\x31\x9c\x4c\x88\xbc\xe4\x09\xbe\x24\x92\x7e\x44\x5a\x86\x43\x11\x2a\x56\x82\x50\xb0\x10\x8a\x02\x91\x37\x71\x02\xfa\x8b\xb9\x15\x4e\xcf\x9e\x30\x5d\x8d\x4b\x2d\xd8\x70\xfb\x06\xf9\x52\x8f\xf1\x77\x6a\xf5\x6a\xb3\xbe\xe8\xbe\xfc\x57\x53\xcc\x7a\x1d\x86\x7f\x98\xdc\x3d\x0a\x94\x2c\x8f\x57\x68\x25\x74\x7d\xcc\xc6\x12\x27\xa9\x9a\x4e\x41\xe8\xe8\xb6\xc5\x12\xa6\xa8\xd9\x16\x24\xa8\x38\xe0\x88\x80\x21\x80\xa7\x8a\xca\xbf\xeb\xcf\xff\x32\xb9\xbb\xb6\x13\x0c\x6a\x12\x7d\xb2\x6a\x57\xdb\x63\x4b\xcb\xe5\x4f\xa1\x52\xb3\x9e\x3b\x7f\xae\xc9\xc8\x50\x2e\x38\xbe\x71\xf3\xba\xc9\x35\x59\x74\x05\xce\xb2\x45\x3a\xb0\x08\x8d\x13\x64\x43\x85\x88\x8f\x43\x13\xa9\x3e\x76\x91\x2d\x93\x81\x63\xb9\x24\xc9\x32\x31\xcd\xfe\xeb\xdf\x29\x8c\xd3\x83\x34\xe6\xea\x79\xe2\x8f\xdc\x6d\xd3\x8e\xbe\x77\x03\x2d\x7c\x7c\x75\xce\xa5\xc5\xdf\xaf\xb8\xbe\xe0\xee\x0f\x69\x59\xa6\x43\xbb\x75\xc3\x91\xd9\x9f\xff\xdf\x45\x06\x5d\x36\x67\xec\x10\xc7\x55\xbe\xa9\x16\x7b\x30\xac\xfc\xeb\xeb\x1e\x14\xa1\xcf\x9c\x1b\xd1\xb8\x57\x9d\xc3\x6e\x35\x0c\x3f\x79\xae\x50\x6c\xf8\xd3\xf2\xb1\x5b\x87\xdf\xed\xd7\x04\x57\x3c\xa6\x15\xaa\xfc\xf8\xf5\x4b\x25\xb3\x8e\x54\x1e\x97\x29\x9d\x7b\xfe\x88\xdf\x8b\x9d\xce\xf8\xc3\x9e\xf8\xa9\x21\x28\x56\x81\x2a\xe0\xc2\x58\x89\x09\x3d\xd0\x78\x49\x13\xdc\x10\xf3\xaa\xc1\xf8\x2a\x03\x29\x4f\x12\x49\x42\x08\x23\xd5\xe2\x02\x46\xe5\x09\x41\x7e\xb1\x8b\x38\x5a\xe5\xe0\x23\x2a\x75\x69\xdd\x57\x1b\xbd\x97\xbf\xd2\xc8\x2e\xdd\xf4\xbd\x6f\xed\x58\x39\x61\x55\x2d\xbf\xd0\xeb\xc7\x3f\x3e\x30\x64\x4e\x92\xc9\xbc\x75\xda\x77\xe2\x40\x0b\x2d\x8d\x24\x75\xc1\xd4\x59\xe0\x86\x06\x01\x78\x99\x46\xb2\x0a\x19\x37\x44\x3a\xeb\x99\x9c\x1c\x49\xd0\xc6\x3a\xc9\xfe\xfb\x5a\x28\x01\x5e\xe7\xd5\x6c\xd1\xd4\x4d\xa7\x2b\x16\x61\x16\x37\x2d\x8b\xba\x7c\xf1\xdb\x5c\x90\x65\xc3\xba\x77\xc7\xbf\x76\xec\x9b\x4a\x1f\x36\xab\x07\x6b\x3d\x97\x10\xde\x7c\x70\x2e\xd7\xf8\x38\xe7\x8f\xa7\x8a\x95\xcf\xbd\xfc\xb5\x7d\x5b\xbf\xeb\x78\x2f\xff\xe2\xb4\x16\x03\x87\xbc\xa2\x3e\xfb\xa2\x8c\x97\x64\x0c\x3f\x6b\x7b\xbc\x23\x72\x91\xe3\x2a\x30\x76\x75\x13\x99\xc0\xa4\xdc\x08\x46\x82\x47\xe1\x30\x74\x79\x2a\xf6\x30\xc5\xf1\x06\x61\xb3\x24\xc3\x30\x26\x27\xbc\xd8\x75\x77\x2c\x72\xb0\xe1\xda\x2f\x8b\x64\x23\x3a\x0d\xee\xde\x73\xd5\x4b\xee\xef\xeb\xda\x8c\xe9\x93\x97\x2a\xfd\xc5\xe0\x6d\x1b\x06\x73\x3f\x66\x9c\xac\x31\xf1\x7b\x8e\x0d\x95\x14\x05\xc7\x61\x09\xc3\xc0\x8c\x62\xf1\xbe\x4e\x44\x90\x32\x59\xd6\x73\x09\xd5\xa7\x5d\x5d\x43\x9e\xad\x40\x53\x57\x74\xdf\xb1\x02\x15\x26\xd8\xba\x5f\x5c\xb0\x6f\x67\xf1\x5b\xbf\x6d\xed\x7e\x62\x6f\x54\xe0\x70\xee\xb1\xcf\xca\xb4\x2b\x9d\xeb\x51\xf9\xd4\xd2\x47\x0e\x8c\xed\xb6\xff\x59\x72\xd3\xae\xa0\x7a\xaa\x27\x03\xc9\x46\x0e\xb0\xa2\x40\xf2\xe9\x30\x62\x42\xdb\x10\x45\xcb\xd5\xbd\xc8\x8c\x59\x4f\x8f\x11\x8a\x3d\x9f\x76\x09\x2f\xa6\x05\x98\x8e\x0a\xf7\x4f\x0b\xaa\x5d\xec\x26\x4f\xbb\xd1\x61\xe6\xb0\x94\x51\xca\xfe\x51\xdb\xbf\x79\x27\x77\xb6\x62\xdd\xcb\xe6\x37\xc5\x99\x13\xaa\x7c\x98\x71\x6c\x60\x42\xe7\x40\x2e\x74\x5c\xec\xeb\x20\xb4\xc2\x58\xc1\x8a\xa1\xc6\x30\x8a\x62\x0a\xf1\x2e\x2f\xb2\xb4\x8e\xf8\x20\xe4\x7c\x52\x37\xb5\x28\x06\xd0\x66\xc8\x08\x26\x46\x61\xd6\x09\xda\x9d\xaf\xbc\xf0\xe5\x06\x87\x2e\x3f\xbc\x74\xe3\x54\xbd\x1f\xe8\xa9\x93\x3b\x14\xf5\x3a\x64\xb3\xa6\x2c\x98\x79\xb2\xe3\xa3\x24\x4f\xde\x71\x28\x48\x12\x1d\xc5\x98\x56\x1c\x59\x13\x99\x48\x8a\x65\xc6\xb3\x3d\xc9\x95\x35\xd7\x40\xae\xc2\xbb\x02\x94\x05\x5f\x04\xb1\x66\xd3\x8c\xe5\x12\xf8\xc5\x17\x63\x37\xfc\xe6\xf4\xe6\xa5\x8b\x9c\x69\x5d\xc6\x94\xfa\xe8\x64\xd3\x6d\xc7\xa3\xf2\xe7\x8b\x8f\x39\x57\xf0\x64\xff\x12\x83\x98\x11\x4d\x93\x4c\x0c\xc0\x71\x81\xee\xf3\x81\xcc\x21\x4f\xe2\x25\xc6\x73\x81\xeb\xd3\x46\xe4\x49\x72\x1c\x93\x8a\xe8\x9b\xb1\x10\xd1\x40\xa3\x41\x20\x91\xac\x6f\x61\xf9\x6f\xaa\x12\x7f\x5d\x65\x35\xce\xb5\xe2\x4e\xee\x3e\x8b\x2b\x0f\xdf\x7c\x39\xcd\x2e\x5e\xad\xef\xef\x2d\x6f\xb1\xbd\x1e\x9f\x6f\x71\x26\x67\xb1\x0d\xdf\x77\xc8\x38\xd5\x6b\x3a\xec\x70\x9c\x15\xaa\xbe\x68\xf0\xac\x6c\x8b\x12\x67\xda\x41\xac\xc7\x9e\x2f\xc7\x2a\xe3\x33\x2a\xb6\x64\x16\x06\x22\xef\x61\x41\x64\x23\x5a\x34\xc2\x7f\xe3\x1b\x5e\xac\x4f\x6f\x7f\x5e\xf3\xc3\xf5\x5f\xab\x5b\xc7\xb2\x6a\xf9\x36\x1d\x0f\x36\xcb\xbd\xe0\xa3\x23\x9f\x09\xef\xf7\xba\x78\xbb\x49\x3e\xb0\x20\x37\x9d\x5c\xe7\x20\x35\x17\x51\x80\xd3\x82\x30\x72\x42\xa8\x92\x01\x14\x55\x9e\x27\x62\x4e\x10\x3d\xc6\x21\x49\x56\x04\xa4\xee\x2b\x92\x64\xc6\x0e\xe1\x51\xac\x4c\xa2\xc4\x83\x96\x56\x9d\x3a\xb5\x1a\x97\xa5\xf6\xc7\x17\x7b\x37\x7d\x6b\x6d\xe3\x7c\x77\x5e\x7f\xb3\xc5\xf0\xaa\xd9\x2f\x9c\xad\xb6\x61\x6a\x99\x7c\x6e\xf9\x24\x6b\x1d\x50\x8c\x40\x78\xba\xea\x44\x6e\x40\x70\x9a\x04\x54\xd1\xe0\x6c\x10\xc5\x0e\x65\x12\x38\x46\x3c\xe5\x6a\x9e\x8d\x6d\x81\x91\x3d\x9a\xf1\x62\x93\xf8\x37\xae\xf2\xf9\xf7\x73\xd7\xaa\x1a\xd5\x1e\x14\xef\xb3\x66\xe6\xde\x36\x33\xc6\xd0\xad\x8a\x55\x3f\xe1\x4c\x6e\xc7\xae\xab\x5f\xfc\xd7\xcc\x2d\x84\x6b\x9b\xa6\x25\xb7\x0a\x8a\xe5\x50\xc5\x98\x12\x6c\xc1\xf7\x22\xa0\x08\x40\x23\x0d\x3b\x54\x64\x00\x7c\xd2\x21\x23\x0e\x90\x1e\xf4\x2d\xde\x26\x50\x18\xf2\xa4\x12\x71\x80\x48\x67\x01\x56\xa7\x7b\x09\xbe\xe8\xf2\xc9\xad\xda\x5f\xec\x99\x6f\xed\x82\x20\x75\x4d\xce\x2e\xf9\x89\x01\x73\xf8\x89\xa9\x03\xb2\xdd\x35\x0e\x27\xf9\x40\x92\x94\x1c\xc8\xc7\x8e\xc5\xf1\x16\x07\x78\x8d\x52\x55\x52\xf2\x40\xa8\x9a\xaa\x23\x23\x43\x34\x28\xdf\x73\x09\x60\x51\x16\xd0\x38\xd1\x95\xe9\x58\x4c\xcc\xd1\x51\xbe\xfa\x2a\x63\x58\x47\xad\xda\xd1\x22\x4d\xdf\x6e\x58\x37\x57\x91\xf0\xe2\xd4\x89\x9f\xbd\xb5\x6a\x52\x9d\x5e\xf6\x4f\x43\x6e\x7d\x95\x5c\x2c\x1a\xa0\x5d\xcc\x21\x3d\x72\x14\xc0\x89\x20\x64\x55\x24\xc4\x64\x64\x04\xae\xa1\xd3\x0e\x1f\x99\x04\x13\x89\x82\x29\x93\x9a\xca\x92\x9e\xe5\xfb\x86\xe3\x44\x2f\x66\x90\xe6\x9f\x9e\x13\x1e\xd6\x7e\xaf\xbd\x32\x72\xdc\x8c\x1e\x6d\xf6\xf9\x3d\x2b\x90\x7d\xbb\xbe\x3b\x68\x5e\xe7\x0b\xd7\x4b\x32\x63\xdb\xec\x48\x6e\xab\xc8\xc9\x32\x26\x3d\x82\x16\x6d\xd2\x77\x75\x8f\x93\xb8\xc0\x25\xb4\x90\xa3\xe2\x38\x8a\x65\xcb\x12\x09\x23\xe4\x1c\x16\x6a\x9e\xa1\x92\x3e\x41\x32\xd0\x4e\x0c\x54\xac\x75\x6f\x48\x6a\xee\x72\x25\x2a\xb4\xa8\xb1\xb3\xee\xfd\xa5\x85\xd2\xbe\x6c\xb7\x7d\xf7\x84\xdc\xc2\x86\xca\x77\xdb\x37\x7f\xb9\xe4\xd9\x03\xc9\x0d\x45\x0f\x00\x8f\xa6\x6d\xd1\x24\x25\x06\x9a\x06\x96\x3d\x25\x56\x49\x40\xb9\xb1\x6d\x19\x10\xfc\x7f\xac\x7d\x75\xb8\x16\x55\xbb\x3e\x48\x08\x28\x48\x83\x82\x74\x49\xca\x24\xa5\x74\x08\x12\x22\x25\x52\x33\x6b\x7a\x4d\xad\x35\x3d\x80\xe0\x16\x24\xa4\x43\x42\x1a\xa4\x4b\x90\x14\x94\x6e\x29\xe9\x46\xa4\xa5\x3b\x84\xdf\xf5\x9d\xef\x9c\x9f\xee\xc3\xbb\xaf\xf3\x5d\xfb\x7a\xff\x7f\xff\x78\xde\x35\x4f\xad\xf5\xdc\xcf\x7d\x63\x22\x00\x8e\x63\x91\x06\xd6\x31\x43\x9a\xbe\x1a\x71\x09\x1e\xc4\x5b\xf5\x6e\x3c\xf3\xbb\x8b\x7d\x5a\x75\x1e\x76\x79\x54\xaf\x3a\x4d\x76\xec\x1a\xf1\x49\x99\xbb\xe7\x4a\x8e\x7e\x31\x3f\x65\x67\xf9\xab\xdf\xa6\x9f\x28\x24\xa1\x73\x98\xa1\x62\x30\x94\xa8\xd0\xa6\x43\xc7\xa6\x62\x22\xd5\xd2\xe5\x7f\xdd\x4d\x2c\x0a\x50\x8c\x48\x44\xa2\x22\x89\x18\x33\x11\x32\x1d\x8d\x35\x25\x97\x4f\x00\x54\x3c\x39\x60\xea\xe2\xaa\x27\x17\x97\x9d\x57\x73\xb5\x7e\x01\x8c\x7b\xf1\xb0\x4e\x06\x2b\xfb\x2f\x79\x72\x3c\xa8\xf3\xd5\x92\x82\x07\xaf\x7c\x95\x64\x8a\x81\x58\xc4\x3a\x4f\xc8\x14\x50\x45\x1c\x32\x3e\x89\x45\xc1\x46\x81\x10\xb1\x86\xa3\x0a\x2e\x56\x54\x82\x56\x55\x26\x46\x50\xf6\x30\xc7\xd9\x88\x4c\x23\x0c\x3f\x38\x9d\xff\x6c\xa9\xc9\xd9\x36\x3a\x95\xba\x2c\xd8\xfc\xe4\x8b\xe9\x03\xeb\x34\x6b\xad\xaf\x7b\x76\xaf\xd4\x8a\x0c\x7d\xaa\x76\xb9\x56\x34\xb9\x49\xcf\x51\x45\x97\x65\x42\xce\xe4\x19\x85\x35\x3c\x36\x52\x34\x13\xc4\xb6\x8a\x03\xc7\xf6\x1d\x9e\x24\x7d\x03\xd8\x50\x75\x22\x43\x23\x81\x4f\x19\x84\x2a\xbd\xda\x7b\x34\x2e\xd5\xec\xf4\xb1\xa3\x75\x76\x09\x2d\x3f\xcb\xdd\x6c\xf5\xc8\xab\x15\x0f\x1c\x79\x42\x55\x2d\x26\xce\x5d\x32\x20\x13\xee\x71\x7d\x59\x72\xfd\x19\xf2\xa2\x1d\x71\x2e\x76\x74\x03\x03\xa0\x40\x0b\x73\x6c\xe4\xcb\x6a\x10\xaa\x64\x64\xb9\x11\xa9\x09\x36\xa7\x28\x42\xc4\x6b\x9e\xee\x28\x96\xa0\x2a\x89\xc3\xb0\xf9\x99\xc5\x7f\xa4\xcc\x79\xf4\x95\x30\x69\xc7\xcb\x32\x97\x6e\xde\xb9\xb7\xa2\x4a\xc5\x9e\x45\xaf\xf5\xae\x2d\x44\xed\x3f\x6f\xd3\x2d\xfd\x0b\xd3\x09\xcd\x96\x29\xdf\xb5\x4d\xdd\xc1\x9a\xab\x04\x3c\xc1\x40\x8e\x8f\x23\xcf\xe2\x79\x49\x31\x82\x80\x65\x24\x26\x30\x79\x8a\xa6\x69\x27\x26\x24\x95\x01\x3c\xe1\xbd\x1a\x86\x76\xc9\x21\x1f\xd6\x6c\x52\x50\xbc\x94\x8d\x9b\xcd\xbe\xbb\x7e\xf7\xe0\xec\xdf\x0e\x28\xf8\xde\x37\x2a\xda\xd5\xac\xfd\xaa\x8c\x77\x37\x25\xb9\x22\x8a\x2c\x2f\x10\x2a\x2d\x19\x08\x89\x18\x23\xde\x08\xb1\xaf\xf8\x0a\xe3\x31\x96\x0c\x24\x49\x56\x90\x60\xc9\x48\x67\x6c\x8e\xb4\x63\x64\x85\x28\x81\x73\x9c\xef\x59\xe0\x40\x4d\x86\x7c\xd2\xb1\xa7\xb5\xa8\x45\xfe\xb2\x43\x77\x55\xac\x5c\xa4\xe4\xe7\x9b\x3e\x7b\x73\xe7\x85\x61\x87\x9e\xe1\xd7\x93\x8c\x19\xa2\x20\xa6\x55\x43\xd4\x42\x93\xf3\x22\x84\x65\x97\x09\x43\x99\x03\x30\xc0\x06\xa9\xb1\x8e\x4b\x90\x81\xa6\x98\x34\xc9\x42\x8e\xb1\x23\x85\xf9\x87\x60\x51\xaa\x22\xfe\xb2\xc5\xbe\xc6\x33\xe7\x3d\xda\x58\xb6\xa3\x5a\x37\x53\xa1\x4d\x99\x7f\xf9\xb1\x52\xc7\x66\x3f\x6c\xad\x95\xe1\xe8\x98\x82\xc1\xdb\xfd\x93\x4c\x19\x40\xc4\xa2\xe1\xea\xd8\x8f\x24\xda\x92\x05\x1d\x93\x32\x1d\x99\x24\xa2\x49\x93\x0c\x75\x42\x23\x90\xec\x8a\xa6\xa3\x0a\x5a\x10\xa8\xae\x4d\x45\x22\xf2\x12\x77\x79\xc6\x84\xb2\xe7\xfa\x3f\x8d\x67\xac\xd9\x7c\xa3\xba\x70\xb4\x75\xb6\xf3\xcd\x5e\xf6\x2e\x76\xe2\xf5\x6b\x5b\x76\xdf\x7c\xfd\x02\x55\x74\x50\x72\x1d\x04\x4b\x24\x61\x01\x1b\xcb\xae\xac\x07\x06\x2f\x4b\x4e\xc8\x42\xdb\x0f\x69\xcc\x72\xd8\xa2\x58\x16\x40\x4d\xa0\x7d\x9b\x20\x1c\xcb\x0a\xf9\x28\x8e\xf8\x57\x1d\xe4\xe0\x0f\x77\xab\x1d\x6f\xe2\x7d\x21\xcd\xa8\xd7\xf1\xda\x5b\x0f\x9b\x2d\xcb\xf6\xad\xb0\xf2\x9d\x5f\xde\xa8\x7d\xbb\xd1\xa7\x8c\xce\x55\x4d\xf2\x66\xab\xe2\xd2\x82\xa9\x23\x29\x34\xa1\x86\x08\x46\x74\xd8\x58\x10\x2d\xc6\x90\x8d\x88\x8a\x55\xa8\x2b\x82\x19\x98\x16\x81\x58\x18\xb1\x9a\x8a\x41\x94\xc6\x49\x67\x68\xf8\xd7\xb4\x63\xcd\x89\x37\xfb\x6f\xae\x5a\xb7\xf6\x1e\xeb\x01\x55\xaa\xf5\xe4\xf7\x0a\xae\xbb\x18\x66\xfc\x8e\x18\xd6\x75\x43\xfa\x75\x08\x12\xfb\xb5\x24\x79\x76\x24\x68\x94\x6f\xc8\x11\xf0\x42\xde\xf5\x82\x48\x55\x1c\x59\xf2\x7d\x40\x11\x02\x89\x78\x99\x14\xa1\x8f\x4c\x35\x96\x18\x16\x1b\xff\xd6\x0e\x4b\x5d\x11\xcf\x2e\xdc\xfa\x57\x6d\xb5\x7a\xf1\xb6\x5a\xe9\x3e\x9b\x87\x3c\x38\xf4\x5e\x63\xa3\xf5\x89\xc5\xd1\xae\xf3\x07\x9f\x5e\xfd\x62\xef\x98\x8a\x49\x5e\x94\x26\x6d\x9d\xa5\x0d\x51\x37\x19\x14\x84\x84\xe8\xf1\x08\xb3\x12\x46\x2c\x83\x68\x82\x26\x1d\xcb\x97\x35\x4d\xb2\x19\x0a\x8a\x21\x1d\x61\x43\x74\xcd\xc4\x78\xe1\x3c\x77\x5a\x96\xae\xf8\xf8\xf5\x86\x5f\x6d\x7d\x67\x45\xe1\xcd\x13\x8e\x7d\x5f\x60\x00\x58\xb6\xa1\x7f\x3e\x79\xc4\x3a\xfe\x68\xe6\xdf\x33\x25\xb7\xf7\x30\x4c\x45\x62\x34\x93\xf7\x74\x0a\x4a\x04\x76\x78\xdf\x26\x38\x35\xf0\x28\x60\x6a\x01\xed\xb9\x88\x0b\x09\x1d\x40\x96\x89\x5c\xc0\x9a\x86\x4d\x10\x09\xd8\x68\xaa\xf4\xb9\x90\x6d\xac\x3d\xb4\x77\x9b\x4c\x0f\xfa\x16\x75\x87\x8d\x6a\xd5\xa8\xeb\xca\xa1\x27\x37\xfd\xf6\x5d\xe5\x03\x75\xa7\xdd\x68\x3a\x39\xb9\xa5\x85\x56\x6d\x91\x50\x3d\xd6\x77\x75\xc2\x22\x34\xd5\x62\x25\x3d\xa4\x29\xa8\xb1\x61\xec\xab\x0a\xc7\x48\x74\x2c\x91\x9c\xe2\x47\xbe\x28\x63\x4b\xd6\x48\xf3\xd5\xd2\x32\xea\x8f\xe9\xe3\x3a\x7f\x37\x2d\xe7\xde\xe5\x59\x86\xe6\xdc\x32\x3b\xff\xc5\x45\x79\xbb\x16\x9a\xf0\x68\x79\x81\x36\x2f\xba\xed\x12\x8a\x55\x48\x6e\xc2\xa3\x41\x28\x00\x5b\x0c\x08\x16\x03\x64\x47\x9c\xc6\xcb\x81\x1d\xba\x00\x28\x40\x89\x2d\x97\x57\x3d\x52\x06\x34\x30\x35\xc5\x03\x8c\x0c\x0d\x3a\x72\x12\x5f\xb6\xa4\x8a\x43\xc2\xbf\x84\x17\x6d\x4b\xd0\x99\x47\x2d\x86\x7b\x9e\xae\x6e\x91\xb5\x52\xe6\x3b\x37\x8e\x95\x7a\x7c\x2f\xe7\xc0\x92\xe4\xf2\x24\xe3\x85\x1d\x51\xf0\x04\x43\x63\x55\x49\xd5\x4c\x4b\xb7\x65\x32\xb2\x78\x0b\x44\x0c\xe5\x4a\x6e\x88\x24\x1e\x06\xb6\xa2\xda\x1a\x47\xf9\xb4\x1f\x02\x0b\x80\xc4\x58\xa5\x49\x13\xeb\x6e\xde\xf3\xd7\xe7\xc4\xaa\x53\x92\x39\xe8\xc7\x32\x93\x2e\x54\x7e\x54\x75\xda\xe9\x63\x39\x4e\xcf\x9f\x50\x33\x4f\xe1\xa3\x49\x56\x03\x33\xa5\x90\x51\x25\x88\x68\x8e\xf1\x62\x5b\xb3\x4c\x00\x69\x5a\x88\x65\xca\x24\x1c\x44\xca\x8c\xa7\x2a\x8a\x0c\x78\x0c\xad\xc8\xf2\x83\x58\xe4\xb8\x04\x4b\xe6\xcb\x27\x1b\xe1\xa8\x3b\x1f\x0d\x5f\x33\xa2\xd2\x9d\xc9\xb3\x5f\xbe\x69\x1d\x33\x9e\xad\xa8\x71\xbc\xd7\x9e\x26\xd9\xe1\xfa\x13\xbf\xb6\x4e\x72\x63\x8a\x04\x51\xf4\x74\x8b\xa4\x58\xec\x45\x91\x20\x05\x04\x74\x75\xce\x8f\x91\x4b\x06\xb6\x4f\x69\x82\x16\x11\xa1\x46\xf2\x8c\x80\x48\xc5\x64\xfd\x08\xa4\x31\x93\x28\x59\x60\xec\x80\xd5\x0f\xb3\x8c\xdf\x7e\xfc\xe1\xbd\x96\x3b\xcd\x56\xab\x51\x91\xa7\x87\x1f\x9f\x6c\xbf\xfe\x56\xc9\xd7\x86\x15\x9a\x51\x30\xf5\xaf\x57\x76\x38\x54\xb6\xcd\x9f\xa5\xb2\x5e\x79\x47\x5c\xf2\xf6\xbd\xd3\x7d\x73\x5c\x58\xff\x55\x95\xbc\x45\x73\x6f\xb8\xfe\x72\x27\x0b\x43\x23\xd5\x57\xec\x56\xe2\xca\xc8\xfc\x97\x0b\xf8\x3b\x66\x08\x95\x73\x2f\xdd\x56\x3d\x4f\xdf\x1f\x27\xde\x2c\xf8\xb1\x36\xe4\xf1\xa4\x7c\x5d\xbb\xbf\x35\x3d\xb9\x31\x13\xc5\x26\x80\x9c\x65\x42\xd9\xb0\x81\x82\x75\x49\x25\x03\x03\x51\xbe\x1b\x68\x1a\x29\x00\x8b\x61\x3c\x68\x70\x48\xa2\x44\x06\xd0\x22\x6f\x03\x64\xbe\x5a\x6d\xaf\xb6\xea\xbf\x69\xed\x57\x72\x81\xe2\xc3\x5e\xbf\xfa\xf4\x83\xe2\x0d\xfe\xb8\x78\xae\xdf\x4c\xf2\x61\xee\xd3\xc3\x4f\xe5\x28\x32\x44\x9c\x99\x64\x42\x86\x88\x01\x9c\x1c\xd1\x58\xe0\xb1\x60\x7a\xbc\xae\xc4\x81\x26\x70\xb2\x68\x2b\x14\xa5\x42\xc3\x0a\x49\x21\x16\x3d\x35\xe4\x90\xaf\x99\x3c\xa2\x53\x73\x10\xfe\x7d\xd2\xf4\xec\x7c\xfb\x32\x7f\x3f\x2c\x6f\x83\x2f\xda\x4e\xfb\x6d\x53\x1d\x95\xd7\xc4\x4d\x05\x4e\x97\xcf\xd5\xba\xc2\xb3\x29\xdb\x97\xdc\x78\x33\xc9\x43\x61\x08\x5c\x2c\xf8\xc0\x91\x75\x57\xe4\x83\xd0\xa6\x02\x3a\x72\x23\x89\x60\xb1\xc5\xe0\xc0\xf1\x79\x21\xa4\x11\x0a\x38\x0d\x04\x62\xe8\x86\x8a\x60\xbc\x9a\x50\xf5\x15\xbd\xa5\xa3\x5b\xb7\x16\x19\x3f\x3d\x93\xb2\x76\x5e\xf3\x55\x1b\x7a\xee\xf7\xca\xaf\x83\xab\xdf\xcc\xfd\x69\xb7\x9e\xdb\xd7\x69\xc9\xcd\x4c\xa1\x8a\x7d\x97\x64\x4c\x2b\x46\x7a\xa4\x78\x1c\xef\xf8\x16\x08\x68\x8f\x76\x2c\x2d\x12\x05\x2c\x89\x14\x2d\xf3\x92\xee\xf2\x0c\xd0\x68\x42\x8e\xc1\x3f\x99\xf9\xfe\x19\x01\xfb\x8d\x6d\x67\xab\x1b\x1d\x33\xb5\x7a\x9a\xbd\xce\xbd\x02\x39\xf2\x8d\xfb\xe4\x8b\xd6\x3f\xd6\xaa\x30\xfc\x7b\xfb\xf2\xed\x29\x2f\xbf\xba\x99\xaa\x36\xd7\xd8\x5f\x02\xf5\x9c\xbc\xe0\xf6\xc3\x65\xd9\x2b\xfe\xd6\x0d\x8d\xcd\x38\xa8\xcb\xb1\x9f\xea\x47\x8d\x0b\x2d\x1d\xc2\x08\x57\xc5\x24\xb3\xa4\x2a\x86\x81\x19\x8d\x8b\x55\xc6\xe0\xdc\x40\x8c\x9c\x30\x24\x2d\x49\x24\x28\xec\xf0\x80\x92\xbd\xd8\x10\x2c\x01\xaa\x96\x85\x3c\x0c\xac\x48\x44\x44\x82\x67\xe7\xf1\x99\xac\xf5\xd6\x81\x3a\x55\x2f\x29\x94\x9c\xa5\xfc\xa4\x41\x6b\x27\x4d\xf9\x32\x7f\x95\xac\xbf\xbe\x18\xb3\xed\xbb\xad\x59\x7a\x26\x57\xd6\x88\x73\x78\x53\xa1\x04\x99\xd1\x24\x2f\xd4\x25\x11\xe9\x2c\x41\x79\x3c\x49\x6b\xb2\x87\x38\x5a\x0d\x08\x93\xa7\x43\x89\xf4\x38\x5e\x51\x58\x41\xe7\xd8\x28\x7e\xd5\x95\xce\x0e\xf8\xb1\x52\xe6\xc7\x1b\xbc\x1f\x97\x8c\xef\xbb\x3b\x67\xca\xeb\xd5\xfe\x5c\x9e\xa3\x4f\xfe\x3f\x2f\x17\xfe\xa6\x7d\xdf\xc1\x87\x07\x25\x99\xe4\x91\xd7\x74\x91\x87\x18\x6a\x02\x63\x73\xaa\xec\x60\x8d\xa4\x21\xcf\x8b\xa2\x6f\x2a\x9c\xae\x89\x61\x40\xda\x8a\x49\x12\x4e\x60\x22\x49\x08\x64\x31\x4e\x83\xa6\xb5\x77\xa5\x35\x6b\x2a\x3e\x9e\x32\xe2\xab\x39\xf8\x26\x57\x23\xef\xbe\x51\xc3\xc6\xd6\xe9\x39\x68\x56\xeb\x1e\xec\xe8\xab\x27\x33\x56\x17\x93\xcc\x48\x16\xd1\xa2\x23\x21\xd6\xb4\x44\x8d\xe5\x54\x23\x52\x79\xdd\x0b\x59\x09\xb1\x20\xd6\x20\xd0\x2d\x9f\xe4\x1d\x1d\x29\x26\x6f\x13\x6a\xc8\xea\x72\xe4\x25\xce\x35\x7d\xaa\x6e\xff\xb2\xf4\xb2\xc1\x17\xe3\x9b\xe3\x8b\xbd\xbd\xb8\x60\x81\x23\x1b\xa7\x7c\x70\x89\xcc\x65\x14\x28\x15\x1f\x9b\xd8\x5f\xfe\x25\xc9\x34\xad\x0a\xc4\x3c\xe4\x45\x99\x62\x30\x21\xba\x18\xc7\xba\xe9\xd1\x51\xe4\x09\x5a\xac\xe9\x6e\xa0\xca\x92\x03\x59\x29\x54\x1d\xd3\xf4\x49\xc3\x76\x22\xf1\x55\x9f\x9e\x37\xa3\xb9\x85\xf3\xdd\x4b\x41\x1b\x76\x5f\x91\x98\x77\xbd\x96\xbd\xaa\xee\x1b\xdb\x34\x6b\xb3\x1a\x8f\x8f\xcb\xc4\xc4\xdd\xe9\xa7\xcf\x4f\x4c\xd1\x1a\x12\x98\xc2\x58\xe7\x4d\x3d\x72\x5c\x2b\x34\x80\xab\x72\x16\xcb\x61\x18\x61\xcf\xb0\x80\xee\xb2\x0c\xe6\x9c\x28\xd0\x31\xa9\x03\x1d\x10\x88\x49\xdc\x05\x75\xee\xb0\x7a\x79\xef\x07\xe4\xb9\x41\x57\x3a\xee\x1c\x7a\xab\x54\x59\xba\xf6\xda\xfb\x2b\x0b\x1f\xea\x5f\xee\xcc\xb4\x9d\x43\xbe\x58\xce\x24\xb7\xa5\xb0\x24\xc7\x8c\x02\x80\x7c\x4e\x16\x4d\x95\x00\x3a\x83\x09\x57\x35\x24\x31\x30\x4c\xc1\xf6\x1d\x82\xb7\x79\x2f\x32\x42\x83\xe4\x4c\xd9\x95\x25\xfb\x1f\x57\xbf\xff\x6f\xf2\xc8\xa7\x93\x5e\x7e\x97\xf3\x6e\xe1\x12\xe5\xcb\x2e\x3c\xd3\xfa\x9b\x73\x6f\x36\xae\x3d\xa0\xfc\xc4\xa1\xcf\x77\x2d\x6a\x3f\x72\xd2\x82\xc9\xa7\x92\x6b\x32\x27\x5a\x54\x64\x44\xaa\x1e\x23\x9b\x42\xd0\x30\x74\x17\x48\xbe\xe1\x6a\xbe\xc6\x86\x0a\x47\x91\x80\xd6\x21\x8d\x05\x46\xb0\xa8\x98\xa7\x22\x9d\x14\x12\xdf\xa1\x3e\x9e\x58\x4b\x7c\xb8\x6e\x6a\xc9\xea\xf8\x9d\x46\xc5\x6e\xbe\x93\xe1\x76\x8d\xec\xfb\x0a\xf2\xc7\x3f\xee\xdb\xb2\xed\x6f\x76\x9d\x2e\xc9\x5d\xe9\xff\x57\x2a\x63\xe3\x50\x12\xb4\x50\x91\x55\xc1\x72\x44\x13\x7b\x3e\xaf\xba\x58\x62\xdc\x90\xb6\x18\xd3\x17\x68\xca\x64\x15\x8f\xb5\xa1\x1b\xb1\x66\xe8\x26\xa0\xc7\x3c\xfb\xc6\x92\xbd\x17\xd6\xb7\xb5\x76\xd6\xcd\x32\xae\x7f\xdd\x11\xd7\x60\x85\x39\xeb\x87\xf7\x5c\xbf\xe6\xfb\xcd\x7f\x5d\x51\xac\x9e\x27\x92\x1b\x86\x98\xa3\x22\x1d\x3b\x6e\x24\x05\x6a\xe8\x47\x04\x00\x88\x94\x09\xcf\x80\x36\xa4\x2d\x59\x32\x28\x1a\x90\x1c\xcd\xa9\x06\x32\xff\x75\xcd\x72\x4d\x22\x81\xd2\xf5\xc3\x91\xd5\xd7\xd3\x51\x9f\x95\xdf\xcc\x29\x51\xba\xc3\xfb\x17\x15\x58\xb7\xcc\x6f\x9b\x5a\xfd\xde\xa4\x67\xf7\xd9\xab\x5f\x9b\xfd\x5b\xb6\xe4\x3a\x87\xc0\x86\xa1\x06\x24\x8f\xd2\x5d\x17\x44\x3c\x2b\x7a\xb6\x83\x1c\x4c\x5b\x98\x62\x19\x02\xb1\xc8\x12\x11\x69\xc5\x8a\xa8\x33\x26\x29\x23\x9f\xc5\x7f\x63\xb0\xff\x07\x0e\xf9\x7f\x01\x76\x52\x1a\x65\xcd\x50\xe6\x7f\x31\x25\xb7\x3c\x7f\xfe\x68\x9e\x02\xd9\xcb\xb5\xcc\x73\x23\x4b\xdb\xce\x35\xc0\x12\xae\x46\x39\xa3\x1b\x9a\xf8\xed\xb9\xd3\xe3\x5f\xef\x6d\xa7\x9f\x3b\x24\x31\x43\x8b\x88\x23\x00\xfc\x18\xca\x2c\xed\xba\x86\x4d\x6b\x1a\x0d\x23\xc3\x07\x0e\xe3\x4a\xbe\xa6\x68\xa4\xaf\xd3\xa2\x00\x64\x80\xa0\xc8\xf9\x24\x8e\xd2\xd0\x50\x1b\x39\x62\x5e\xf1\x23\x05\x4a\x0f\x26\xf7\xcb\x4c\x4a\xef\x9d\xce\x2f\x1d\xb4\x3b\x13\xea\xce\xc9\x59\x62\x49\xde\x1e\x97\xf6\x94\x49\x2e\x32\x98\x8b\xd5\x50\xb5\x65\x87\xe6\x81\x88\x43\x9d\x32\x63\x57\x60\x48\x21\x0c\x6d\xe4\x84\xaa\xa6\x4a\x3c\x74\xc9\x90\x8f\x42\xe4\x85\x01\xa1\x50\x3a\xe6\x84\xc4\x0f\x91\xfd\xfa\x56\xaa\x30\x77\xfb\xea\xfc\xb5\x26\xf7\xa6\x72\xbe\xe3\x2d\x98\xd9\xa5\xc2\xde\x9b\x92\xdb\x6c\xe7\xa0\x6c\x81\x79\x7c\x6c\x9f\x24\x3f\x44\x0a\xa6\x18\xb9\x00\x45\x38\x92\x95\x58\x05\x41\x8c\xac\xd0\xa0\x43\x52\xb6\x42\xce\x09\x79\x06\x9a\x80\xa6\x39\x59\xd0\x11\x92\x80\x49\x45\x71\x1a\xf7\xf2\xea\x99\xfe\x18\xff\xfb\xa5\x29\xdd\x17\x05\xe5\x0f\xbc\xd9\xe2\x8f\x8d\x03\x72\x96\x5e\xb4\x32\xcf\xbc\x0d\x71\xa7\xe0\xf5\xcd\xcd\xc6\x25\x19\x63\x03\x41\x8c\x28\x5f\xe5\x25\x5a\x0c\x14\x47\xf6\x7d\x53\x91\xd8\x58\x95\x63\x59\x42\x2a\x8b\x25\x8a\xf4\xb1\x80\x49\xd9\xf0\x11\x43\x68\xa4\xa0\x6a\x7f\xeb\xd0\xfc\x4f\x28\xfc\x5f\x68\xb4\x94\x46\xf5\x32\x57\xf8\x5f\xa1\xc0\xde\xfa\x2a\xd3\xba\x0d\xb3\x7a\x56\xfa\x78\xf6\x34\x30\x6f\xd4\x5e\x6d\xfe\xcf\x0f\x5e\xe4\xef\x9d\x6d\xe5\x58\xb5\xc2\xaf\x65\x17\x24\x39\xad\x06\x86\xe8\xe9\x40\x20\x44\x5e\x17\x22\x52\x93\x19\x9b\xe0\x45\x4e\x04\x3a\x25\x84\xa1\x6b\x45\x12\xe2\x45\x45\x55\x5c\xc1\x72\x50\x14\xf1\x22\x88\xe8\xc4\x8d\xd9\x7b\xbd\xcd\xcd\x5f\x67\xf9\xe6\xf3\x9c\x83\xdf\xdb\x3b\xfd\x51\xa5\x2e\x77\x8f\xb4\x9a\x79\xa5\xf8\xa9\xba\xd3\xda\x4e\xcc\x59\xb0\x91\x9c\x7e\x65\xad\xc4\xf8\x16\xca\xa7\x51\xe4\x50\xbc\x13\x12\x06\xe6\x3d\x43\xe2\x35\x25\x66\x70\x68\x93\x84\x4a\x71\xa4\x60\x07\xba\x03\x25\xd5\x80\x8e\x6d\x62\x5b\x54\x39\x94\xd8\xa7\x96\x9e\xcd\xbe\xdb\x19\xfe\xf4\xde\x3b\x4b\x87\xfe\xf1\xf1\xe1\xa5\xab\xe2\x7c\xba\x7c\x26\xef\xc5\x78\x79\x15\x7d\xf5\xbc\xae\xe3\xbe\x48\x6e\x97\x13\xd0\xb1\x28\x7b\x0e\xa0\x7d\x86\x0d\x15\x41\x70\x78\x95\x54\x44\xc6\xb3\x4c\x19\xe3\x38\x88\x05\x0e\xd0\xba\xc4\x2b\xa1\x1c\x1b\xaa\x2b\x50\x1a\xef\x25\x3e\xed\x6a\x5b\x04\xf2\x93\x26\x2b\x56\x2c\x2a\xb3\xf1\x99\xf1\xe1\xaf\xdd\xbf\x3f\xb6\xfa\xdd\x26\x17\x27\x5f\x8c\x0e\x95\x79\xf2\xe2\xc2\x94\x24\x4b\xa8\x23\xca\xa0\x49\xd9\xa1\x09\x82\xb2\x08\x16\xd2\xa2\x6b\x80\x48\xf7\x63\x5e\x97\xb5\xc0\x17\x49\x4b\x53\x7c\x23\xb2\x78\x52\xf5\x54\xec\xda\x9c\xfa\x8f\x57\x82\x7e\x59\xff\x33\x00\x60\x4a\xc3\xcc\x85\x33\xa4\x96\x80\x51\x9f\xae\x6f\x3f\xcf\xdd\x56\xaf\xe2\xa7\xa5\xe9\xa1\x6f\x74\xb8\xb5\x6f\x30\x55\x75\xe4\xcf\xfe\x87\xb3\xfb\x98\xb9\x2f\xd4\x8a\x93\x7c\xab\x62\x05\xd7\x76\x34\x92\x37\x79\xc2\x17\x6c\xda\x8e\x2c\x97\x12\x74\xd7\x32\x4c\x24\x38\x8c\xe6\x69\xb2\x21\x42\xd1\x22\x4c\x96\x26\xad\x28\xa2\x98\x7f\x10\xd7\xa5\x7e\x57\xc8\xf1\x62\x2c\x71\x2c\xf7\xfb\x53\xba\x3a\x8b\x1a\x64\x7e\xd8\xe5\x9d\xbb\x23\xde\x68\xf3\xf9\xc8\x85\xb3\xcb\xbd\x1c\xd5\xe8\x87\x2b\xbb\x92\x4c\x0b\x23\x09\x04\x07\x49\x92\xc7\x94\xaf\x84\x4a\xa4\x13\x40\xb2\x79\x5d\x13\x4d\xc7\x66\x7d\x92\x50\x4c\xc6\x77\xbc\x98\xb7\x62\xce\x0a\xa1\x0b\xa1\x90\x80\x33\xe8\x72\xe6\x26\x7d\xfa\x17\x93\xb7\x6f\x9d\x1b\x5f\xd9\xb9\xed\xd8\xfd\x94\x02\x63\x06\x16\x3b\xdd\x7a\x4e\xf1\xc6\x55\x4f\xbd\x5c\xb6\x63\x56\x72\x4d\x06\x1c\x23\x58\x6c\x60\x73\x2c\xa7\xe8\x94\x0f\x59\xd5\x95\xb8\x08\xea\x74\x8c\x6c\x2b\x26\x43\x0a\x46\xae\x18\x20\x89\xa0\x31\xa1\x48\x8a\x2a\x42\x2b\x71\x14\x2c\x68\x34\x77\xba\x7c\xaa\xf5\xea\x17\xed\xab\xdc\x3b\x71\xff\xf8\xd3\x3a\xf0\xdc\x77\x0d\x67\x6f\x9c\x79\xae\xc6\xb2\xaa\x85\xd8\x0b\xe9\xcf\x39\x89\xd9\xce\x19\x4c\x19\x22\xcf\x73\xbe\xa7\x5b\xb4\x48\x01\x21\x60\x49\x64\x49\x96\x16\x29\xaa\xc6\x06\x9e\xc8\x1b\x18\xf2\x5c\xa0\x13\x82\xc1\x3a\x2c\xad\xff\x8d\xd5\xb8\x9b\xed\x3f\x7b\x38\x4c\x69\xd8\xec\xb5\x46\xa9\x79\x1d\x66\x4a\x87\x77\xb6\xa4\x53\x56\xcf\xbb\x7b\x7a\xf1\xe9\x7a\x35\x6a\x8c\xca\xf0\xdb\xb3\x8a\x5f\x97\xa6\xce\x4f\x1f\xf4\x0d\x7a\x39\x2b\xfd\xc4\x82\x89\xe5\x79\x64\x10\x39\x52\x40\x6a\x2e\x43\xa8\x32\xc5\x00\xd1\x91\x7d\x85\xa1\x24\x46\x87\xa1\x49\x68\xae\x8d\x25\x2b\xb6\x4d\xc3\x0e\x3c\xa4\x06\x3a\x4e\x6b\xd8\x59\xbb\xfb\x5b\xa7\xaa\xcd\x6d\x51\x69\x95\xd9\x67\x11\xf9\x46\xdf\x56\x66\xc7\xf5\xd3\xe6\x94\xff\xfd\x6a\xf9\xe2\xdb\x0b\xdf\x68\xbe\x6e\x6c\x92\xc7\x15\xac\x85\x3c\x07\xaa\x11\x60\x79\x47\x8a\x7d\xd2\x36\x5d\x2e\xc4\xbe\x27\xaa\x8a\x47\x32\x8a\xe9\x52\xa1\x49\x02\x60\x90\xa2\x42\x59\xac\xa4\xa5\xbe\x3e\xfe\x6d\xf6\xe0\x5f\xe2\xcb\xca\x33\x6b\xe9\xaa\x62\x9b\x2e\x3f\x3d\xf3\x7c\x3a\x5d\xe8\x8f\xd7\x1e\x55\xae\x9e\xab\x4b\xdd\xa5\x5d\xa9\x26\x2d\xf2\x27\xb9\xfa\x42\x48\x8a\x1e\x67\x29\x81\x28\x47\x4a\xac\xcb\x9a\xc0\x58\xb1\x84\x34\x8a\x53\x1d\x31\xf6\x6d\xc7\x92\x08\x42\xd7\x09\xd6\x50\x0c\x0a\xf8\x36\x99\x46\xce\x19\x31\x6e\x4a\xa5\xa5\xfb\xde\x7f\x54\x23\xfb\x3b\x8f\x37\x0c\x2b\x3b\xfd\xe7\x7b\x5d\x7e\x38\x8e\x57\x7c\xb4\x6e\xee\xe8\x43\x37\x6e\xda\xc9\xa5\xa2\xe2\x3c\xa0\xbb\xaa\x2d\x19\x16\x83\x38\x39\xa6\x71\x8c\x24\x57\x74\xa9\x58\xa2\x49\x82\x94\x58\x02\x72\xb4\x09\x28\x3a\xa4\x22\xc5\x70\x0c\x2e\x34\xa2\x04\x04\x49\x3f\x5c\x1e\xff\xcd\x9d\x21\x0d\xd6\xb4\xfd\xa2\xfd\xd1\x19\x07\x96\xee\x3f\x36\x04\xfc\x95\x22\x54\x3b\x3b\x29\xf7\xf5\x86\xe1\xf0\xef\x9b\x26\xb7\x84\x99\xd8\x51\x23\x4e\xb6\x89\xd0\xa2\x34\x49\x06\xba\x6b\xab\x94\x4f\xb8\x52\xa8\x8a\x82\x44\xaa\xd0\xe2\x1d\x51\xc0\x1a\x0d\x48\x64\x1a\x14\x1b\xff\x83\xb2\x27\x95\x83\x64\xd9\x3d\xf6\xce\x57\xfe\xfb\xbd\x97\x3f\xad\xf8\xee\xc6\x0b\x53\xab\x8c\xe8\x39\x70\xf9\x47\xc5\x3e\x0d\x9c\x9f\x36\xe4\xcd\x35\x74\x6f\xfa\x87\x43\x89\xe9\xd5\x4c\x89\x16\x55\x99\x70\x02\x3d\x14\x2c\x8e\xd2\x7d\xc7\x75\x3c\xc1\x35\x74\xcd\x50\x78\x43\x95\x50\x28\x92\x96\x63\xeb\xa6\x6d\x71\x86\x2d\x06\xff\xc0\xa6\x9f\x7f\xe3\x3f\x1b\x3f\xa4\x34\x4a\xc9\xd2\x28\xf7\x80\xd4\xd4\x66\x7a\xbf\x5e\x87\xde\x9d\x93\xef\xeb\x2b\x13\x67\xb6\xe3\x5f\x52\xe3\xb3\x67\x2f\x23\xf4\x2b\x3e\x2e\xab\x96\xa1\xc9\xcd\xb1\xe0\x49\x72\xff\xa5\x28\x23\x2c\x07\x86\xaa\xfb\xc8\x74\xd4\x20\x14\x24\x0e\xbb\x90\x93\x55\x4e\xf1\x69\x89\x94\x1d\x06\x50\x1c\xf2\x74\x5d\x8e\x6d\x64\x71\xba\xa2\x25\x78\xaf\xea\xd5\xfb\xc8\x8c\xe7\x3f\x9f\xc9\x53\xf1\x54\xdb\xfc\x4b\xb6\x17\xcd\x31\xf9\xeb\xe9\x3b\xcc\x45\xc7\xfe\x9c\x76\xfd\x83\x23\xf7\x05\xa7\x5a\x72\x43\xc0\xf2\x59\xcb\x61\x31\x29\x4b\xa2\x43\x6b\x51\x0c\x29\xc6\xd2\x44\x8a\xf6\x74\x86\x12\x2d\x9e\x0d\x62\x09\x4a\x50\x60\x05\xce\xb3\xa5\x38\xe2\x34\x1e\x25\x4e\x38\x1b\xdc\x52\x3b\x17\x5c\x65\xca\x74\xb5\x7b\x54\xeb\xf3\xf1\xf1\x95\x87\xda\x6e\xc9\x3e\xaa\xce\xe3\xf2\x65\xee\x1d\x2d\xb3\xf0\x50\xa6\xf4\xeb\x4e\x25\x34\xdb\x60\x99\xc8\x0b\xad\xd0\x70\x1c\x4c\x19\x0a\x61\x68\xc0\xd7\x2c\x18\x79\xc0\x91\x69\x8c\x3d\x11\xc1\x08\x0a\x82\x6e\x47\x2c\x88\x91\xe9\x62\x55\x4b\x6c\x76\xed\xc6\xbf\x7f\x76\x67\x77\x98\x69\xd7\x9a\xd9\xb5\xae\xaf\x6e\xf3\xed\xb1\xf9\x83\xd9\x52\xe7\x3a\x37\xff\xbc\x7b\xfe\xcd\xfb\x7f\xbb\x0f\x93\x6b\xb6\x4b\x78\xc8\xa1\x20\x20\x38\xcf\x11\x09\x0b\xf9\x48\xa0\xc9\x98\x65\x88\x48\x16\x58\x24\xf0\x82\x67\xd1\xd8\x51\x59\xd5\xe1\x14\x81\x0f\x44\x42\x4d\xa3\x6f\xfe\x68\xf5\x27\xc4\xa8\x0f\xf9\x32\x4d\x07\x67\x68\xdd\x7a\xc5\x93\x9a\xf7\x4f\xd7\xba\x39\xef\xe5\xf7\x25\xff\xfc\xb2\xd5\xbd\xdc\xa0\x56\xfa\x9f\xda\x12\xbf\xc3\x52\x01\x45\x90\x21\xe7\x01\xa8\x5a\x9c\x4a\x02\x86\xf5\x5c\xc9\x63\xb1\x20\x49\x76\x20\xa9\x5e\xc0\x50\x1a\x6b\x20\x5f\xb7\x15\x57\x20\x31\x72\xd3\x50\x64\xea\x38\xef\xc2\xc7\xc4\xb4\xf3\xf9\x6f\x7d\xf8\x73\x87\x1e\x41\x86\x13\xfd\x2e\x8d\x58\x73\xaa\xf1\xe4\xd5\xad\x1f\xfc\xa9\xfd\xd5\xa2\x2a\x9b\xdc\x5c\xa9\xd3\x58\xb4\x64\xcb\x16\x5c\xcc\x12\x58\xf0\x24\x92\x34\x34\xc3\x51\x74\x14\x87\x10\xf2\x26\xb2\x34\xc9\xa1\xf5\x88\x87\xa6\x1b\xb3\x9c\x1a\x23\x2a\x71\xae\x2c\x30\xd8\x9b\x70\xf8\xd7\x5d\x0b\x26\xad\x6f\x52\x67\xe3\x92\x22\x0d\xd8\xd7\xfd\x3c\xe3\x0f\xd7\xbb\xf3\xee\xc3\x8b\x2f\xca\x8d\xd4\x5a\x26\xb7\x98\x7a\x0a\x0c\x04\xce\x8e\x24\x96\x14\x0c\x5b\x16\x29\xa0\x1b\x2a\x0b\xfc\xd8\x0a\x28\x0a\x93\xa4\x16\x47\x80\x75\x4d\x47\xa6\x22\x23\x22\x19\x5b\x8f\x70\x62\x27\x59\xdb\xfc\xe9\xf3\xc1\x95\x9d\x43\x47\xde\x50\x3e\xaf\xb0\xfa\x09\xb9\xbc\xd3\xaa\xca\x70\xee\xdb\x47\x2f\x4f\x2d\xdd\xae\xd0\xf8\x53\xe9\xa7\x58\x49\x78\xda\x8a\x17\xc8\x3e\xa7\x93\x52\xec\x05\xb6\xcc\x06\xb2\xce\x05\x94\x4e\xb0\x51\x88\x40\x68\xc4\xb6\x28\xe8\x21\xa1\x72\x16\xa7\x1a\x3c\xa5\xd0\x01\x47\xfc\x7d\xda\xff\xc3\x17\xf6\x7f\xcd\xd7\x52\x1a\xe5\xce\x98\x6d\x44\xea\xbe\xb2\xc5\x0f\xe3\xca\xac\x39\xd1\xac\xbd\x56\xbd\xde\xac\xa3\x07\x3a\x4e\x6a\x72\xb4\x4b\x7d\x7a\x68\x83\x11\xc6\xb3\xb5\x93\x7a\x64\xdc\x90\x7e\x9f\x4a\x1c\xc1\x8e\xa5\x9a\x96\xc9\xe8\xaa\x41\x59\x81\x25\x03\x07\xb0\x50\x52\x61\x1c\x70\x4c\x68\x7b\x96\xab\x43\x59\xf2\x08\x9f\xd6\xc8\x48\x80\x24\x62\x09\x31\xf1\xc7\x69\xf8\x6e\xaf\x69\xf0\x3a\xd3\xf8\xca\xe8\xa9\x9d\xe1\x07\x87\xf2\x6e\x9a\x13\xf4\xfb\xe6\x78\xff\x16\xb8\x60\x99\xf5\x03\x32\x6e\x4a\xbf\x72\x5c\xc2\x8f\x13\x40\x02\x70\x0e\x2b\xb1\x92\x04\x43\xca\xd4\x4d\xc1\x8d\x28\xce\xd1\x7c\x2b\x66\x7c\xda\xd7\x78\x43\x96\x59\xc8\x88\xbc\x0f\x15\xe0\x11\x3e\x0f\x8c\xc4\xa1\x70\x2e\x73\xef\x0b\x5b\xc6\x3f\xe8\x34\x76\xdb\xe8\x61\x2b\xee\x57\xbc\xb5\x21\x1e\x37\x78\xe0\xba\x79\xc4\x77\xbd\x07\x9d\x69\x56\xf0\x6a\xfa\x85\x52\x12\x17\x54\x56\xa4\x18\x82\x02\x2c\xed\x19\x9e\xe9\xcb\xa2\x2e\x8b\xa6\x49\x42\x10\x00\xa4\x42\x53\x77\x5d\x45\x09\xa1\xc3\x59\x0e\x64\x90\x16\x1b\x11\x92\x13\x27\x9e\x05\x03\xdb\x7e\xf4\x96\x2b\x82\xb2\xc3\x32\x7f\x55\x38\xbf\x7b\x33\x6f\xc7\xa2\xcf\xab\xed\xfe\x83\xbe\xbc\x72\xb6\xd0\xf1\xc7\xb9\x49\x66\x67\xa3\x7c\xa8\x53\x16\xed\xf8\x71\x4c\xd1\x3c\xa6\x10\x2d\x22\x16\x0b\x91\x21\x44\xba\x2f\xf2\x21\xb4\x05\x9f\x14\x7c\x82\x57\x64\x8a\xa5\xb0\xa4\x72\x5e\x62\xb3\x0f\xad\xbf\xc8\x7d\x55\xe5\x4c\xdb\x47\xef\x4d\xe9\x73\x86\x28\xfe\x6e\xd9\x23\xbf\x4c\xbd\x9b\xe3\xc4\xb2\x1f\x56\xee\x68\x72\x65\xc6\x91\x24\xe3\xff\x20\x82\xa6\x6e\xb9\x22\x90\x5c\xcd\x09\x7c\x5b\x8c\x59\xd5\x07\x98\xa7\x29\x13\x8b\x48\x0d\x0d\xdf\xd1\x19\xcf\x54\x3d\xca\x44\x6e\x2c\x8a\xde\x3f\x86\x40\x9b\x1b\xfc\xdb\xe2\xfe\x43\x3b\x2e\x15\x77\x37\xfc\xe8\xf2\xe1\xae\xc1\xce\x4d\xf4\xca\x47\x8f\xad\x4d\x73\xfb\x7d\x36\x62\xc3\xed\x39\xc7\x7f\x3e\x72\x63\x6a\x4a\xa3\x97\x7f\xbd\x3c\x3b\xbe\x58\xea\xb9\x7a\x8e\x32\x4e\xed\x5b\x3f\xd6\xba\xbc\x50\x2e\x35\xe8\x78\xc5\xec\x95\xcb\x97\x57\xab\x57\xab\xbc\x68\x72\x86\x2b\x9b\x73\xf5\xb9\xba\x7e\x50\xaa\x43\x29\x7a\xfe\x51\x8a\x58\xe0\x8a\x71\x7c\xdf\xc4\x6f\xbe\x5e\xbe\xd2\x9d\xf8\xc3\xb7\xd9\x3f\x3d\x37\x3f\x2a\x30\xf2\x59\x36\xbf\xd1\x5f\xe9\x5f\xe7\x4a\xcc\x31\xa2\x98\x2a\xc3\x58\x8c\x12\x98\x41\x18\x3a\xbc\xc2\xea\x82\x1a\x50\x94\xeb\xc9\x3e\x96\x24\x42\xa3\x05\xda\x97\x94\xd8\x71\x21\x94\xed\x40\x77\x53\x33\x92\xfe\x03\x10\x33\xb7\xde\xa5\x66\xa5\x1e\xe6\x9d\x97\xaf\xe7\xc4\xc7\xd5\x0f\xdc\x58\xba\xb4\xee\xc1\x21\xa3\x6f\x37\xbb\x55\xbe\xf4\xbe\x02\xcd\x1a\xae\x48\xee\xb7\x8c\x18\x83\xd1\xf4\x48\x25\x28\x28\xb8\x96\x27\xc8\x16\xb6\x58\x27\x54\x05\x32\x02\x8e\xa0\x09\x81\x42\xf2\xb4\xce\xc9\xc8\x88\x44\xd9\xa4\x75\x13\x25\x20\x6f\xb7\x17\x6f\x67\xb6\x75\xd8\x30\xeb\x7a\x8d\xf2\x1f\x4c\x6d\x93\x37\xe7\x83\x67\xdb\x47\x9e\x9a\x92\xeb\xcf\x26\xeb\x2e\xfe\x3a\x68\xce\x80\xf4\x77\xcf\x89\xc9\x01\x7d\xc8\x30\xae\x16\x43\x9d\x23\x55\x93\xf7\x45\xc2\x56\x42\x48\x88\xa1\xa3\x07\x1c\x96\x3d\x91\x21\x22\xdf\x80\x81\xae\x69\x32\xad\x86\xbe\xc2\x83\x34\x60\x1a\x4f\xd6\x93\x4c\x1e\xb1\x77\x93\xeb\x7b\x86\xf3\x55\xf3\x6f\x1d\xd5\x9a\x4a\x59\x31\xe9\x6c\x8b\x31\xe5\x67\xe6\x2d\xe1\xff\xf1\x5a\xbb\x54\xdf\xa5\x90\xde\x6f\xb6\xbd\xab\x60\x97\x32\xfb\x3a\xd5\xe1\x74\xff\xdc\x7b\x7b\xcc\x2b\xbf\xb7\x5c\x62\xec\xa4\xbe\x9c\x7d\xae\x59\xe6\xe4\x0a\x84\x70\xac\x80\x04\x12\xc9\x44\xac\x41\xd1\x22\x38\xc7\xa3\x65\x95\xa0\x64\x56\x88\x02\x23\x94\x4d\x95\xf5\x6c\x87\xc2\xc0\xf2\x74\x2b\x54\x02\x56\x31\x81\xfb\xea\x77\x21\xdf\xdf\x95\x69\xd0\x5a\x7e\x04\xd9\xe9\xc6\xad\xfb\xeb\x87\x6e\x1c\xfe\x7b\xee\x8f\xb2\x64\x5f\x63\xed\x5f\xd9\xaa\x33\xb5\xf6\x4e\xfa\x35\xa5\x13\x3f\x73\xc9\x34\xb4\x0c\xcb\x03\x21\xe5\x12\x8a\x2d\xbb\x6e\xec\xd0\x18\x90\x82\xea\x53\xa4\xcf\x45\x4c\x08\x30\x45\xcb\x96\x19\xb0\x06\x1d\xc9\x76\x18\xb3\x69\x7c\x97\x82\xc3\x2b\x1e\xaf\x72\xb5\xdc\xd1\x87\xf7\x17\x0f\x5b\xba\x3a\xde\xbc\x76\xd4\xb3\x16\xcf\xcb\x66\x9c\x96\x65\xc6\x88\xb5\xcd\xc6\x77\xc8\x98\x6a\x2c\x3b\xf5\xcd\x9a\x52\x09\xd6\x5f\xff\x7b\xe3\x47\xfd\xc3\x66\x4a\xd5\xed\x37\xa6\x7f\xea\x99\x4f\xec\xfd\xcb\x26\x6d\x02\x6e\x58\x39\xb9\x2d\xae\x47\xba\x1a\x41\x43\x09\x68\x9a\x87\x59\x87\xb0\x25\x11\x93\x50\x26\x28\x43\x65\x29\x53\x16\x1d\x93\x0c\x48\xda\xd0\x03\x57\x90\x3c\x87\x72\x45\x94\xe0\xea\xb6\xb3\xe0\xbd\x5c\xee\x04\xf2\xcc\x90\x9e\x2f\x8e\x0e\x29\x7e\xd3\x9a\x97\x02\x20\x13\x4e\xa8\x32\xc6\x6e\x33\xbd\x53\xd1\x39\x49\x7e\x31\xe5\x1c\x37\x0e\x61\x04\x58\x49\xb4\xe4\xc8\x77\x7d\x41\x04\xb4\x26\x30\x91\x1e\xfa\xa6\xe5\xb8\x9c\x11\xf1\x4c\xc8\x41\xce\xf0\xb1\x62\x28\x6c\x88\xdc\x57\x5f\x2f\xee\x5e\x5d\x35\x92\x18\x56\x67\xc7\x88\x97\x17\xfa\x14\x2b\x70\x3d\xfb\xf1\x6d\x87\xe7\x3d\xf1\x8a\xed\xf8\xa9\xf5\xc6\xc3\x99\xd7\x8e\x4b\x3f\x67\x45\xe2\x15\x75\x03\xba\x82\xe6\x28\x31\x0f\x25\x24\x28\x90\xb3\xb0\x8d\x22\x09\x32\xd8\xb2\x04\x3a\xc4\x26\xc9\x78\x94\x45\xc7\x3e\x6d\x98\x14\x8c\x29\x0d\xc2\xc4\x38\x14\x65\xce\xf2\x5d\x27\x61\x86\x9e\xec\x6b\x63\x72\xd0\x25\x7a\x7c\x52\x3f\x2a\xbb\xae\xc2\x40\xe3\xd9\x92\xef\x8b\xf5\xbb\xde\x2c\x36\x93\xbd\xb1\xc9\xd9\x3c\x16\x49\xc7\x06\xaa\xec\x33\x31\x4f\xb1\x96\xeb\x2a\xa6\xee\xcb\x9e\x05\x79\x51\xe7\x20\x63\xfa\xbc\xe1\x00\x9e\x07\x82\x6e\x29\x20\x01\x50\x69\xd2\x09\x76\x1f\x18\x7f\x7e\xf1\x1b\xed\x26\x2c\xd8\xf1\x68\xe6\x85\x42\xcb\x06\x12\x57\xec\x81\xda\xc0\x28\x9c\x58\xa5\xd4\xca\x5c\xc9\x3d\x69\x0f\x6a\xae\x65\xe9\x02\x2d\x33\x64\x64\x91\x3a\x32\x78\x9d\x8c\x4c\xc2\x53\xf8\x28\x14\x83\xd0\x56\x2c\x8f\xe4\xc8\xd8\x26\x6d\x86\x00\x3c\x41\xea\x62\xe2\x7d\xef\xe2\x3f\x35\xbd\xbe\x93\x39\x3a\x9a\x3d\xf2\xf9\xbe\x6e\xb9\x2e\x6d\xe9\xd3\xe8\x46\xab\x37\x73\x15\x1c\xd5\x76\xc6\x46\x89\xe3\xaa\xb6\x48\xf2\x43\xa2\xec\x71\x20\xc4\x04\x32\x14\x13\x85\x7a\x2c\x89\xc0\x77\x69\x5b\xf3\x49\x14\x4a\x8e\x49\x03\x20\x6a\x1e\xb2\xb1\x41\x3b\x21\x4d\xc8\xae\x1d\xa9\xaf\x9e\x34\xd7\x9c\x7b\xb8\xaf\xdb\xd3\x67\x2d\xbf\xbb\xa0\xfa\x99\x86\x9d\xbc\x98\x6f\x69\xd3\xc5\xf0\x78\x6d\xba\x1f\x28\x3f\xf3\xad\x2a\xe9\xd7\x69\x4b\xe8\x1c\x1a\x07\x7d\x43\xc4\x32\x8b\x1d\x18\x4b\x10\xf9\x62\xc8\x89\x1a\x2f\x21\x5d\xd0\x1c\x57\x66\x90\x60\x89\xa2\x24\xc8\x58\x8f\x05\xd7\x0c\x68\x0f\x26\x78\x44\x7c\xf0\xc5\x7b\x53\xef\x3a\xab\x7b\xb0\x93\xa8\x5c\x5f\x8d\xae\x03\x66\x96\x1d\xd0\xf3\xf4\xe1\x93\x67\xb7\xee\xbc\x3c\xa4\xcf\x56\x35\xb9\x7a\xa7\xbc\x47\xa9\xba\x2c\x68\x50\x30\x55\x64\x05\x72\x14\x49\x71\x68\x63\x26\xe2\x5d\x93\x77\x34\x0f\x02\x15\x6b\x2e\x6f\xb8\x01\x21\xc7\x9e\x2d\x04\x9c\x93\x16\x20\x72\x64\x4e\xe7\xfa\x50\xa1\x48\xf9\x5c\xb7\x37\x7b\x99\xfe\xb8\xf0\x76\xa7\xea\xd9\x07\x7e\x3c\xe1\xc9\x6b\x33\xce\x7f\xd6\x2f\xbe\x72\xeb\xc3\x54\x8d\x1b\x5d\xb7\xf1\xe0\x71\x29\x27\xf7\xfc\xb0\xa7\x43\xb7\xb1\x13\xae\x95\x58\x0d\x37\x3d\x1e\xa3\x97\xbc\x3f\xab\xc2\xf8\x92\x7a\xf6\xe9\xeb\x93\x8c\x32\xd0\x44\x81\x71\x3c\x87\x34\x43\x0a\xf8\x84\x6d\x6a\x1e\xed\x49\x9e\x1b\x07\x16\x60\xc8\x90\x91\x68\x2f\x20\x5c\x80\x05\x4f\xe1\x74\xde\x06\xb6\x90\x86\xa4\x65\x97\xf5\x7b\xa6\x36\xe8\x72\xa8\x7f\x91\x87\x47\x86\xd5\xee\x7e\x6e\x47\xb9\x13\xab\xbe\xc9\xb0\xe6\xf7\xbc\x95\xab\x8f\xdc\xb0\xb7\xf3\x80\xdc\x49\x66\x2f\x12\x55\xd3\x80\x84\x84\x68\x5e\xa2\x25\xdd\x50\xd5\xc8\xb1\x39\xd3\xc0\x26\xc9\x9a\x02\xab\x84\x08\x58\x50\x88\x1c\x42\x61\x42\x06\xe9\x28\x56\x71\xe2\x25\x1c\x6f\x5e\xa3\xfc\x0b\xef\xfd\x99\xbf\x6f\xb3\xb3\x64\xa6\x52\x85\xd7\xd6\xcc\xd7\x64\x85\xf9\xe5\x3b\x55\xfb\x2c\x3c\xb9\x3e\xfb\x94\xeb\xe9\xe7\x65\x4f\x7c\xfb\x77\xa1\x1c\xe8\x4a\xc4\x4b\x01\x88\x4c\xcf\xb3\x79\x12\xe9\x86\xa7\x58\x92\xed\xff\xab\xdf\x21\x54\x4d\xc6\xba\x20\x63\x47\x09\x15\x3e\xe4\x1d\x98\xa0\xaf\x59\x33\xe0\xb5\x25\x2d\xe6\x1f\xfe\xfa\xf8\xaa\x4a\xef\x6d\xcb\xd9\xaa\x5c\x8e\x41\x6d\x5f\x7b\xb3\x71\x51\x23\xeb\xea\xe7\x0d\x32\x6d\x7c\x94\xfe\xab\x7c\x1a\x4c\x6f\x98\xe3\x64\x36\xc2\x1a\xc3\x1a\x00\x93\x82\x65\xd2\x81\xec\x47\x32\x89\x69\x55\x11\x6c\x17\xaa\xc0\x15\x2d\x00\x2d\xc7\x96\x6d\x5b\xc5\x64\x1a\xac\x5c\x8b\x4f\xa8\x45\xed\xc3\x27\x0b\x41\xec\x1e\xcf\xdf\xc1\x1c\xfc\xd2\xd5\x87\x5c\xae\x37\xe3\x83\x27\x9b\xef\x7e\xd5\xa3\x70\xc1\x31\xc9\xed\xec\x4d\x35\x62\x62\xcb\xf5\x54\x09\x45\xaa\xeb\x32\xa6\x0e\x94\x00\x23\x46\xd1\x34\x56\x0b\x24\x80\x7c\x4f\xb3\x2d\x56\x8f\x2d\x39\x80\x04\x49\x73\x28\x4a\x7c\x95\xcf\xd0\xeb\xf5\xfd\xc7\x73\x93\x13\x4f\x97\xef\x74\x6c\x4c\xf3\xbd\xd1\x94\xca\xe7\xdf\xbb\xbb\xb5\x6b\xcf\xa6\x0f\x37\xca\x6b\xc8\x47\xe9\xdf\xf1\x4c\xe8\x20\x94\x67\x30\xac\x83\x22\x8f\x0f\xa9\x08\x63\x14\x89\x1e\x8b\x7d\x25\x20\x63\xec\xf1\x22\x30\x78\xe8\xfa\x1c\x24\x80\x69\x8a\xa4\x83\x59\x14\x61\x2e\x31\x5c\x2f\x4b\x93\x5d\xa3\x8a\x64\x01\x99\xfb\x1d\x7f\x31\x26\x6b\xcd\x7d\xe7\x36\x2f\x39\x7c\x6e\xc6\x4f\xbf\xdc\xcf\x29\x4f\xe9\xd6\x76\x32\x51\x27\xb9\xd9\x5d\xf0\x69\x81\xa5\x90\x4c\xa9\x76\xa8\x8a\x86\x62\x0b\x10\xc7\x1e\x26\x5c\x52\x8a\x4c\xc1\xb0\x10\x8d\x08\x42\x07\x2a\xc9\xb0\xae\x13\xe8\x8a\x08\x12\x6c\x88\xbb\x95\xc6\x5c\xba\x7b\x3d\xa5\xd0\xc2\xf2\x2b\x3a\x96\x6f\xfa\xd1\x16\xbb\xca\xe2\x85\xfb\xfb\x3d\x1b\x58\x66\xe9\xdd\x25\x07\x7e\x2f\x9e\xfe\x0d\xf1\xc4\x58\x4e\x68\xc8\x14\xe9\x4b\x92\x18\xd0\x8c\xc3\x09\x0c\x05\x2c\xec\x31\xb2\xe4\xd3\x6a\x10\x22\xc9\x93\x75\x83\x21\x3c\x91\x88\x0d\xc3\x16\xa3\x10\x26\xba\xfa\x0d\xba\xec\xb5\x93\x77\xba\xaf\x15\x7e\x78\xfb\xb8\x92\x7f\x64\xcb\xee\x2b\x47\xb4\xc9\x2f\x7d\x50\xb6\xc9\xc5\xb9\xa3\xde\xd9\x3c\x60\x60\x92\xfb\x42\x57\x24\xcc\x88\x52\x85\x20\xb4\x34\x2f\xd2\x20\x67\x01\x4c\xd0\xbe\x29\x39\x3a\x8d\x20\x03\x54\x2e\xd6\x62\x1d\xe3\x08\x1b\x3a\x44\xe2\x7f\x2b\xcb\x26\xe0\x67\x72\x4e\xd7\x7e\xaf\xfb\xc9\xb9\xad\x56\xbc\x91\x3d\xc7\x8f\x27\xba\x35\xfd\xb8\x6e\xab\xf9\xd2\x51\xa9\xfb\x83\xbc\xc3\xfb\x92\x7d\x46\xd1\xa9\x52\x64\xb6\x2f\x3f\x99\xb6\xe4\x8d\x71\x6f\xba\xa7\x4b\x5f\xdc\x58\xac\x7c\xb9\x23\x74\x8e\x73\xe4\xb6\x6b\xef\x8e\x6f\x07\xcf\xdd\xb9\x5c\x3d\xc9\x80\x55\x99\x11\xcd\xd8\x85\x76\x2c\xb0\x6c\x00\xfd\xd8\x0c\x69\xd5\x08\xe9\x50\xd0\x79\x97\x0a\x1c\x56\x35\xd9\x08\x62\xdf\x43\x04\x08\x55\x04\x40\x14\xcb\xaf\x7e\x17\x74\x6f\x7a\xc6\x4b\xea\x69\x6e\xc1\xfe\xb7\x2a\x0e\xd1\x6e\x77\xd9\x3c\xb1\x7d\xd3\xac\xb9\xaf\xd2\x3d\xa6\xea\xd3\x2e\x4d\xbf\x90\x7e\x9d\xbb\x84\x8d\x82\x68\xc9\x96\x66\x53\x84\x2b\x85\x9a\x47\x9b\x0c\x69\x38\x31\xaf\xca\xb2\x45\x11\x34\xc1\x85\xb1\xe2\xea\xb1\x44\x89\x10\xb0\x58\x67\x48\x1e\x7b\x5c\x1a\xd4\xa3\x23\x0a\x2e\xad\x59\xbd\x78\xe9\xf8\x78\xb9\x8a\x1d\xd4\x7c\xe5\x8e\xac\x1a\x52\x59\x3a\xb4\x72\xd7\x2f\x53\x37\x75\x68\x34\x73\x47\xf9\x9f\x92\x0c\x79\xf3\x5d\xc8\xf2\xd8\x53\x44\x44\x61\x1e\xf0\xaa\x8f\x45\x3f\xa4\x62\x9b\x55\x49\x9b\x11\x69\x83\x26\x45\xc2\xc0\xa1\x6d\xcb\x86\xcc\x46\x3c\xad\xa7\x71\xcd\xa8\xff\xa8\xde\xd7\xe7\x5b\x2d\x3f\x3b\x2a\x47\xeb\x99\xeb\x9f\x6c\xd9\x77\xeb\xaf\x1a\x7a\x95\x6c\xe1\xe1\xd1\x79\xca\x6c\x7a\xe7\x97\x95\x57\x93\xeb\x20\x3a\xb6\x74\x12\x71\x14\xed\xba\xd8\xd4\x22\x3e\x56\xcc\x20\x02\xac\x0b\x7c\x25\x74\x5d\xcb\xd6\x39\x59\x01\x8c\xc8\xdb\x61\x18\x44\x84\xef\x32\x38\x01\x08\x7b\x7a\xaf\xac\x53\x6e\xd6\x9b\x90\xbb\x73\xc7\xe9\xc3\xb6\x9f\x99\xc4\xf1\x3f\x36\xbc\x3c\x69\x5a\xaf\x59\x05\x3a\x64\x3c\xf5\xc9\x4e\xbf\x52\xb2\x49\x5e\x4d\x36\x56\x48\x68\x39\x01\xe3\x3b\x22\xa1\xb3\x1a\xed\xca\xc8\x94\x38\x96\xe3\x39\x01\x0a\x84\x42\xc4\xa4\x1d\xb0\x7c\xe0\x3a\x2e\xf4\xd5\x28\x4e\x7c\xcd\x90\xdf\x39\xdc\xd8\x2f\xd5\x34\x57\xcf\x83\xdc\x6e\xa3\xc5\x77\x45\x6e\x9e\xf0\x6e\x92\x27\x2b\x64\x28\xb4\xec\xc2\x6f\x03\x67\x17\xdd\x9f\x64\x74\x08\xe6\x90\x10\x21\x55\x42\x9e\x26\x9b\x36\xc3\xf1\xb4\xcd\xb8\x01\x22\x09\x49\x25\xb9\x58\x54\x58\x57\xa1\x1d\xc7\x13\x45\x06\xc6\x16\xcb\x21\x22\x81\x14\xdc\xe4\x7d\xfb\x2b\xeb\x2f\x06\xe6\x3d\xdd\x36\xe3\xee\x51\x0b\xf6\x3c\x7c\xf2\xc5\xfa\x9c\x27\x9f\xd6\x18\xde\x17\x1c\xd8\x31\xeb\xe0\xd7\xc9\x65\x95\xe6\x35\xc9\x62\x10\xc7\x1a\x04\x17\x20\xc7\xb7\xb8\x40\x27\x02\x52\x35\x3d\x36\xb0\x0c\x89\x42\x42\x10\x50\x74\x44\x8b\xc8\x64\xc2\x50\xe2\xf9\x48\x20\x9c\x57\x9d\xe3\xe8\x0c\xbf\xd0\x6c\x3c\xe8\xfb\x96\xbb\x3b\xdd\x90\x6f\x7d\xec\x97\xac\xd1\xbb\x4a\xdb\xf2\x7b\x4b\xf6\xfd\x60\x7c\xb9\x8d\xf5\xe7\xa5\x3f\x0c\x13\xcb\x66\x31\x16\x41\x51\x90\x52\x9c\x98\x84\x8c\x47\x00\xa4\xc9\x40\xb2\x00\x30\x82\x48\x41\x94\xee\xcb\x40\x32\x41\x2c\xa9\xb4\xc2\xc5\x11\x0c\x02\xc4\x25\x6e\x65\xeb\x54\x99\xa1\xad\xd4\x47\x1e\xd3\x3b\x7d\x34\xe3\xd3\x08\x59\x4f\x3a\xd5\xfb\xa8\xc6\xf3\x6a\xbb\xff\xfc\xa5\xd4\xf0\x06\x5b\xd8\xf4\xeb\x85\x27\x34\x9b\x09\x8c\x88\xc1\xbe\x0d\x28\x41\x90\x71\x80\x22\xce\x61\xcc\xd8\x8e\x80\xaa\x48\x92\x29\x3a\xb2\x0c\x81\x27\x45\x1c\xc9\x9a\x9a\x46\x30\x94\xa3\x25\x20\xc2\xbe\x3b\xa6\x5a\xee\x7c\x97\xed\x8f\xea\xff\x38\xf2\x8d\xce\x4c\xb7\xf2\xdb\x1a\x3f\xbd\xb3\x6b\xd6\xf8\x9d\xbb\x0f\x65\x5c\xde\x5d\x6c\xfa\x5b\x92\xd9\xdd\xb0\xea\x81\xc0\x8b\x4d\x93\x8d\xb8\x40\x07\x6c\x68\x08\x96\x62\x1a\xba\x15\x0a\x98\x17\x58\xe4\x79\xc0\x08\x10\x54\x69\x64\x39\x81\x2e\xba\x1a\x97\x46\xfd\x5c\x3f\x7e\xdb\xd3\x75\x7a\xb7\x69\x8b\xeb\x16\x99\x9a\x71\x46\xc1\x5d\x87\x97\x7b\x5d\xf3\xfd\xbc\xf5\x75\xae\x3b\x81\xdf\x28\xb8\x33\x4e\xfd\xeb\x6a\x0d\x7a\x5e\x1d\x3b\x7f\xee\x8d\x03\xe5\xb6\x54\xc9\x8a\xfb\xf7\x2a\x4f\xf5\xac\x55\x1c\x8d\xda\xd2\xe2\xc0\xc3\x36\x2b\xcb\x13\x5d\x52\xbf\x24\x84\xeb\x1a\xa1\x67\xbd\xdb\xb4\x2a\xb9\xee\x87\xbc\x5d\x96\x65\xcc\xa5\xa8\xfd\xda\xc2\xa6\x9f\x35\x99\xb6\x1a\x9f\x1e\x7b\x65\x5f\x72\x1b\x37\xc2\x57\x44\x95\x67\x31\xab\xc9\x81\xa7\x78\x11\xad\x29\x01\xcf\xb8\x5c\x10\x98\x91\xae\x18\x21\xab\x99\x84\x29\x20\x20\x93\xa6\x18\x79\x50\x01\x7c\x82\xd7\xb1\x76\x17\x0a\x8f\xda\xb2\xf0\xa7\x67\x2d\xdd\x92\x37\x97\x9d\x01\x6f\x6e\xf9\xb5\x5c\xdc\xf3\xcb\x77\x5b\x8c\x9e\xf8\xac\xf8\xf6\xa2\xc9\xc6\xf6\xd0\x24\x69\x83\x58\xa4\x65\x15\x12\x61\x60\x08\x12\x61\xb9\x42\x4c\x69\x90\xe2\x39\x52\x62\x38\x53\x15\x1c\x82\xf2\x62\xcd\xf1\x8d\xd8\xf3\x63\x12\xc6\xaf\x3a\xde\xb1\x63\x1f\xef\x78\x30\xa8\x59\xeb\x01\x6b\xe5\x72\x4d\x4f\x0d\xef\xd5\xa5\x63\xdb\x9b\x79\xe7\x8e\xc9\x5c\x68\x79\x45\x21\xdf\x67\x5e\xe3\xe4\xc6\x0a\xc2\x96\x43\xb0\x1e\x2d\x4b\x0e\x15\x79\x3a\xc1\xf0\x84\xe7\x29\xa4\x40\xea\xbe\x1a\x2a\x24\x2d\x68\x08\x69\x9c\xc7\xfa\x10\x38\x40\x32\x64\x05\x07\x89\xbb\xfa\x06\xe3\x98\x6f\x2b\x15\x89\x9a\x7f\x56\xe9\xc2\xba\x56\x0d\x07\xed\xbe\x21\x3d\x18\x7a\xf3\xeb\x66\xf5\xb3\xed\x9f\x31\x77\x4e\x2e\xe1\x79\x92\xd7\x85\x31\x21\xb1\xa1\xca\x62\x01\xaa\x96\x28\x7a\xba\x47\x06\x12\x43\x40\x3b\x44\x6c\x24\x03\x59\x31\x49\x8a\x33\x0c\x53\x55\x49\xe0\xd2\x2c\x26\x50\x82\x93\x1e\x43\x7c\xb2\x8f\x99\xf7\x7b\xca\x86\x81\x2f\x0a\xec\xf8\x64\x24\x53\xfe\xc8\x84\x95\xef\xed\x5b\xde\x66\xc3\xe6\xee\x2d\xfa\xd4\x1e\xf7\x2c\xb9\x26\xcb\x0e\x87\x45\x82\x61\x1d\x9a\x73\x1d\xc2\xb6\xf8\x28\x36\x23\x35\x52\x74\xd5\x92\x74\x45\x55\x2c\x5a\x15\x1c\xe0\xa1\x90\xb7\x05\x0d\x07\x20\x20\xa2\x57\x4d\x9e\x7b\xba\x66\xef\xae\x25\x6a\x18\xed\xb3\xf2\xee\x32\xe7\x60\x81\x0d\xa5\x67\x65\xa9\x56\x6f\xd0\x8c\x0d\x07\xde\xaf\x35\xf2\xb6\x90\x7e\xe5\xef\xc4\xea\x25\x36\x6d\xa9\x1e\x4f\xd8\x4c\x4c\xb3\x91\x1e\x59\x32\xc3\x46\x16\x8e\x89\x80\x04\x0c\xab\xfa\x16\x27\x88\x81\x42\xb8\x80\xa7\x44\x1a\x5b\x06\xc0\x76\xe2\xee\x71\xea\xe5\xf2\xf3\x0b\xbc\xec\xec\xf6\x9b\xb6\xb7\xe0\xe9\x15\xfe\xcf\xc7\x66\x55\xd6\x56\x7c\xd4\xdc\x39\xf5\xd9\xf5\xc5\x3f\xca\x79\xd2\xdf\x1c\x24\x34\x9b\x74\x14\x92\x8b\x59\xcd\xe6\x24\x48\x43\xce\x30\xec\x28\x8c\x42\x95\x27\x43\x26\xa2\xb1\xab\xfa\x94\x6e\xa8\x3a\x40\x86\x2f\xe8\xbc\xa4\x91\x0c\x09\x13\x4f\xfc\x72\xe4\x1f\x30\xfe\xb7\x16\xd5\xc6\xee\xb9\x76\xb8\x42\x9e\xa5\x6f\xb7\x9a\xa5\x64\x9b\x75\x6f\x71\x50\xa1\x7a\x96\xfa\x5f\x5f\xaf\x36\x31\xfd\x1c\x7d\x89\x59\xb6\x68\x10\x84\x40\x8a\x0c\x8a\xd5\x4c\x5b\x8c\x78\x18\xcb\x66\x40\x53\x06\x6f\x50\xbc\xc1\x2b\x8e\x65\xc6\x21\xe6\x1c\x9a\x87\x36\x2b\x41\xe8\xfc\x9b\xa3\x2f\x75\x4f\x23\xaf\xfe\x70\x44\xa7\x2a\x8b\xe0\x9b\xeb\xea\x7e\x78\x03\xf6\x5f\xf8\xdb\x67\x7a\x20\x7d\xbd\x76\x76\x8a\x7e\xbd\xc8\xee\xb7\x2a\x1f\x4b\xae\xc9\x02\x09\x08\x53\xc2\x1a\xa6\x44\x4f\x63\x28\x84\x0d\x91\x10\xb1\x19\xba\x71\x40\xb9\x88\x36\x7d\xc6\x93\x7d\xc6\x30\x3c\xe8\xe8\xc0\x0f\x84\xd0\x35\x12\xf7\xe9\x15\x1b\xdd\x66\xf3\xde\xfa\xb2\xc1\x90\xeb\x4d\x4a\xbd\xff\x55\xd7\x29\x70\xc6\xb1\x3d\x23\x0a\xd6\xdd\xb0\x73\x00\xe6\x7e\xc0\xbd\xd3\x0f\xd0\x49\x98\xf4\x3c\xd7\x72\x7c\x2a\x24\x6d\xd9\x30\x6c\x0e\x48\xbc\x6e\x90\x3e\x2d\x11\xaa\x0c\x29\x52\x11\x24\xd6\x43\x01\x87\x29\xa4\x22\x1a\xaa\x36\x6f\x22\x90\xa0\x4f\xe7\x3a\x2f\xb8\xbd\xf9\xad\xbc\x51\xc9\xd7\xa5\x69\x1f\x3f\x6e\x5a\xb4\x6f\x96\x4e\x9f\xae\x7a\xe3\x78\x63\x5c\x2f\xd7\x89\x29\xb9\xf2\x4e\x4c\x32\x6c\x94\x37\x03\x64\x05\x16\x25\x29\x14\x2b\xf2\x7c\xe0\xca\x30\x20\x35\x03\x79\x9c\x87\x03\x4e\xe1\x08\xa0\x0a\xac\x16\xa8\x04\xe1\x23\x49\x12\x6d\x52\x4a\xdc\x8a\x1d\x3d\x1b\x6f\x59\xb7\x0d\xcc\x69\x50\x33\xae\xf5\xa2\x6c\xdb\x0f\xfc\xad\xd2\xe1\xa3\x77\xfb\x3a\x55\x73\x0c\xdb\x9d\xb5\xc3\xb3\xe4\x12\xce\xf0\xb1\x4d\x01\x1a\xba\xaa\xa2\x9a\x90\x25\x15\x8b\xa6\x65\xda\x04\xb6\xe3\x00\xc9\x54\x75\x85\xf6\xb8\x28\xb2\x70\xa8\x78\x0e\x0a\x35\xc0\x45\x5a\xa2\x3e\xfd\xaf\x8b\x3b\x4e\xcf\x1d\x38\xbe\xc2\xc8\xb7\xb8\x45\xbd\x5b\x64\x68\xbd\xb5\xe0\xa7\x1f\xb7\x2d\x73\xb5\xdd\x9b\xf6\x8c\xed\xaf\xbf\xbd\x60\x43\x92\xfb\x0e\x9d\xe1\x2d\xda\xd4\x78\x4c\xb9\x7a\xac\xd8\x16\x15\xb3\x7a\x60\x08\x3c\xef\x87\x01\xe1\x05\xbe\x42\x41\x13\x58\x3c\xe5\xba\x18\x18\x9e\xe1\xf2\xd4\xff\xcf\x1e\x8f\xb2\xfd\x67\x70\x88\x94\x46\x8d\x72\xd7\xdb\x90\x5a\x74\xad\x61\xaf\x09\xbf\xa9\x87\x97\x9e\xca\xb9\xe0\xd0\xb5\xf1\x07\x47\xe5\xfa\x66\xc4\x84\xbc\x25\xba\xd5\x7a\x93\xb8\x34\x69\x53\xdb\x43\xbf\xcf\x4e\xee\xc3\x00\xab\x84\x81\x61\x47\x51\x14\x51\x12\x23\xfb\x11\x2b\x23\xcf\xe7\x21\x16\x5d\x9b\x51\x2c\x9a\x73\x4d\x52\xb2\x24\x1c\x8a\x98\xb4\x62\x56\x25\x29\x2d\x0d\x9d\xd6\x7a\x35\x46\x0b\xf0\xc2\xfd\x58\x79\xa7\xd8\x81\x5d\xe5\x37\x8e\x38\x91\xa3\xcb\xd4\xce\xaf\x53\x1b\x06\x37\x10\x27\x77\x3a\xb7\x32\xc9\xe3\xa5\x10\xdb\x34\x05\x78\x51\xc7\x48\x86\x8e\x16\x51\x32\xc9\x68\xb1\x86\x69\x4a\x12\x55\x28\xe8\xb1\xe9\x58\x62\xcc\x29\x2e\x00\xb2\x47\x28\x51\x00\xa9\xc4\x66\xe7\xcc\x3e\xfd\x69\x8b\x1e\xd7\x9c\x7e\x0f\x46\xb5\x5e\xd3\xfc\x3a\xfe\x69\xc2\xbc\x63\xfa\x25\xfd\xe1\x95\x26\x9f\xbd\xd5\x58\xe8\x71\x29\xc9\x0f\x03\xb2\x0b\xd5\x40\xd5\x34\x28\x02\x9b\x8e\x83\xd8\x51\x65\xc3\x90\x19\x40\x3b\xbc\xa9\x22\x86\xe2\x84\x80\x64\x63\xa4\x91\x18\x92\x98\x94\x25\x0c\x12\x3f\xf9\xf6\xf9\xad\x43\xaf\xe3\x5d\x07\xb6\xe3\x27\x8d\xbb\xfd\xfe\x91\x1f\xd6\x15\x98\xbb\xbd\x6d\xf7\xf9\xed\x77\x64\xda\xea\x7e\xf4\x6e\x9e\xdb\xe5\x92\x1b\xbd\x32\xe3\x52\x6c\x4c\x6b\x81\x24\xc5\x3a\x6f\xaa\x0c\xef\x21\x18\xf1\xb6\x40\xe8\x3c\x47\x1a\xba\xcb\x23\xdd\xd0\x3d\x5f\x33\x02\x8e\x55\x1d\x21\xd0\xd3\xd8\xc1\xe8\x9c\xf9\xf6\xd0\x8b\x57\xf6\x7f\xbc\x20\xe3\x3e\x63\xcd\xa3\xbf\x90\xf2\x67\xad\x36\xb3\xeb\xaf\xac\xce\x2d\xb8\x9b\xeb\xb7\x2d\xcb\xd3\xaf\x52\x90\x58\xda\xde\xc6\x8a\x6b\xea\x1e\x27\xb8\x1a\x05\x64\xda\x02\x6a\x0c\x00\x43\xf1\x82\xa0\x45\x48\x22\x24\x9e\x25\x4c\x47\x15\x4c\xd9\x8e\xc4\x28\x76\x64\x01\x26\x36\xfb\x7e\x85\x33\xc7\xd6\x96\x5c\xfa\xfe\xea\xce\xcb\xda\xfe\x9e\xe3\xf9\xd0\x5e\x1d\xbc\x8e\xb7\x97\xbb\x6a\x6e\x2f\x57\x85\x94\xb1\x6d\xcb\x26\xd7\xb7\x49\xe4\xa9\xac\x24\x40\x8b\xe5\x09\xdb\x05\x2a\x05\x45\x99\x0f\x51\xe0\x23\x60\xea\x0e\x63\x41\x87\xe0\xb0\x1a\xeb\x31\x64\x28\xa8\x4b\x82\x45\xfc\xbd\x8d\xf4\x30\xdb\x7f\x06\x9c\x49\x69\xd8\xa3\x5e\xbb\xd4\x79\x67\x70\xa5\xf9\x37\xf5\xe7\x8f\x56\x82\xa7\xd7\xf3\xfc\xee\xde\x79\x6e\x9d\x1b\x58\xac\xda\xa2\xce\x70\xac\x70\x34\x7f\xf7\x69\x3b\x71\x92\xf9\x37\x7c\xc2\x02\x30\x66\xfd\xd8\x84\x08\x92\x12\x6d\x39\x8c\x01\x29\xca\xc1\x9c\x12\x8b\xa4\x49\xa9\x5c\x68\x44\x10\x7b\x71\xe4\x51\xa4\x68\xcb\x6a\x1a\xfc\x1b\xf3\x7b\xe7\x78\xbb\xf9\xea\x5a\xc1\xf4\x1f\x2e\xef\x5d\x15\x0f\xfe\xeb\xb5\x9e\x2b\xa6\xd4\xea\x75\x7a\x18\xa8\xde\x6f\x54\xed\xde\xc6\x8c\x24\x93\xc6\x93\xb2\x41\x62\x5d\x17\x49\xcd\x65\x14\x55\x64\x90\x4e\x52\xaa\x66\x6a\xba\x4f\x09\x3a\x60\x45\x4d\xc4\xa4\xa6\xd1\x0a\x8c\x05\x35\xd0\x9d\x40\x48\x23\x80\x17\xd7\x3c\xd0\xf6\xf0\xe2\x79\xb9\xf5\x9b\x19\x0e\xd6\x7f\xe7\xdc\xd1\x9b\x17\x5b\x6f\xf9\xac\x49\xc3\x13\xfb\xff\x6c\x54\x6c\xc5\xed\x42\x1f\x26\x79\xe3\x19\x20\x2b\x72\x64\x91\x77\x1d\x64\x48\x9e\x48\x08\x61\x0c\x38\xdb\x43\xae\x14\x8a\xa4\xcd\x61\xdf\x80\x2c\xcd\x42\xd7\x8c\x34\x13\x79\x02\xfa\x77\x96\x7f\xd5\xec\x9f\x06\xcf\x6e\x61\x7e\x73\xeb\x78\xb3\xca\x55\x3e\x3a\xbb\x23\xae\xd2\xe7\xf8\x7d\xbd\xd5\x9e\x4f\x37\x7a\xf9\x2e\x94\x6e\x73\xa5\x42\xcd\xe4\xa6\xcb\x90\x20\x55\x89\xd2\xb9\x40\xc0\x31\xc9\x0a\x1c\x11\x61\x43\x10\x63\x9e\x94\x74\x8b\x94\x20\xe9\x21\x80\x39\x1d\x51\xac\x42\x4a\x58\x21\x04\x0c\xe4\xc4\x66\x77\xc9\x31\xe1\xc0\x82\x6d\x2b\xf0\x97\xc2\x2f\x19\x37\xc8\xf5\xb6\x97\xac\x32\x27\x5f\xd3\x12\x8d\xaf\xaf\x15\x58\x7b\x62\xb1\x17\x49\x66\xf6\xb5\x14\x33\xd6\x4c\x2b\x14\x4d\x85\x35\x59\x9e\xb6\x39\x06\x51\xa2\x8d\x3c\x8a\xb1\x14\xc3\xa7\x10\xc5\x58\x96\x18\x62\xc3\xc7\xba\x6f\x28\x82\xe2\xda\x89\xf3\x0e\x57\x3f\x2a\xd4\x73\x71\xfb\xfa\x85\x1b\x4f\xa9\x5a\xb6\xe4\xa7\xfb\x47\x95\x7f\x73\xc8\x96\x2d\xf7\x0a\xe4\x7a\x7b\x76\x89\x62\x7b\xbb\x5c\x49\xae\xd9\xaa\x27\x6b\x8a\xc5\x98\x88\xf0\x61\x14\x72\x74\x80\x3d\xda\x08\x44\x37\x36\x14\x2d\x56\xa2\x38\x56\x24\xe8\x50\x34\x1b\x70\x36\xe9\xb0\xa2\xf3\xdf\x92\xed\xff\x65\xf6\xff\xe0\xbe\xff\x2f\x60\x58\x4a\xa3\xcc\x25\xf2\xe4\x4e\x8d\xfb\x6e\xd6\xa5\x4c\xca\x96\x27\x95\x8f\xbf\xb8\x78\xb7\xd9\x1c\x33\x5e\x93\xf1\xda\x92\x1b\xe5\xf3\x65\xcc\xb4\x6d\xd6\x25\xfb\xdc\xcc\x0a\x5d\x92\xbc\x2a\x86\x38\xd2\x10\x2c\xc7\x81\x84\xa5\x20\xd9\x8b\x6c\x4d\xd4\x48\x5e\x41\x2e\xa6\x48\xdb\xb3\x4c\xc7\xd2\x6d\x12\x91\x48\x76\x6c\x82\xf2\x3d\xe2\xdf\x6a\x66\xaf\x26\x9e\xca\xfa\xe7\xd5\x6b\x0e\x2a\x36\xf9\xfa\xa5\x9a\x57\x84\xe5\xaf\x17\x5f\x73\x6f\xdc\xbe\x1b\xef\xa6\x4c\xcf\x7f\x65\x71\xab\x0d\xf1\xc6\xc3\x49\xc6\xee\x51\x96\x64\x12\x8e\xa2\x85\x31\x67\x09\xac\xa3\x90\x18\xc6\x80\xf5\x3c\x23\x54\x63\x4d\x73\x38\x8e\xb0\xb0\xe0\x03\x0e\x23\xc6\xb4\x80\x1d\xc0\x34\x76\x09\x4a\x5b\xb5\x2a\x6d\x2d\xb1\xb3\xf3\x26\xf5\x4e\xc7\x65\xc4\x47\xed\x4f\x0f\x1a\x17\x53\xb5\xf3\x65\x7e\xb0\x9f\x98\xde\xaa\x78\xd6\xa3\x49\x1e\x61\x32\x12\x2d\x09\x82\x69\x03\x42\xe2\x9d\x90\xf6\x42\x42\xe7\xa2\xd8\xb4\x94\x50\x71\x22\x8e\x12\x4c\x43\x36\x78\x46\x37\x64\xe8\x02\x9f\x71\xa9\x28\x8d\xcd\x8d\x46\x3d\xb7\xb4\x58\x50\x69\xd8\xc4\xe7\xfb\x87\x5d\x7e\x49\x34\x5b\x52\x4a\xbb\x41\xdc\x2f\x32\xeb\x8f\x4d\x3b\x52\x2a\xff\x5a\x79\xdc\x96\x24\x73\xbe\xfa\xac\xa5\xdb\x16\xe3\x7a\xd0\xe4\x49\x85\x77\x03\x4e\xa2\x28\xdf\x56\x83\xc8\xa3\x34\x9b\x87\xac\xe0\x44\x2a\x85\x7c\x07\xc7\x5c\x6c\x0b\x7a\xac\x27\x36\x7b\xc4\xa0\x96\x3f\x8c\xef\x6f\x34\x6d\xb1\x7a\x6c\x95\x6a\x93\x5a\x76\x3f\x37\xb2\xd3\xd6\xa6\xd6\xc3\x86\xe5\x7f\x6c\x3b\x7c\xe3\x9d\x8e\x45\x92\xdb\xa7\x99\xa2\x28\x40\x97\xa5\x69\x8f\x32\x04\xca\x61\x7c\x46\x54\x14\x44\x31\x90\x70\x25\x41\x62\x7c\xc3\x30\x44\xc7\x84\x11\x8d\xa1\xa5\xd2\x3c\x0b\xf0\xdf\x14\x88\xfd\xb3\xfe\x67\x40\xa0\x94\x46\x99\x33\x64\xc8\xf3\x55\xaa\xbb\xe4\x67\x39\x6a\x97\xcb\x30\x69\x59\xe3\xcc\x1f\xdf\xda\xa4\x2e\x6b\x9a\x3d\x7b\x81\x2d\xdf\x3e\xc1\x9f\xaf\x77\x0e\x76\xb9\x73\x46\x1a\x91\x2f\xc9\x6b\xcf\x9e\x48\x33\x11\x26\x19\x97\xd1\x7d\x1d\x80\x58\x88\x54\xc7\xb0\x2d\x08\x39\x81\xf4\x2d\x87\x51\x18\x9e\xc0\x7e\xc0\xcb\x51\x48\x30\x0e\xa5\x92\xe8\xd5\x07\xe1\xa1\xab\x5a\xdb\x5d\xe3\x26\xd5\xcf\xbf\x77\xcc\xfe\xf9\xca\x6e\xed\xdd\x5f\x4e\x65\x7c\x82\x0b\x56\x9a\x5e\x5d\xaa\xee\x4f\x1a\x30\x3f\xc9\x60\x61\xac\x0a\x9a\xa9\x8b\x11\xf2\x69\x9e\xa2\x71\x8c\x65\x49\x96\x7c\x57\x75\xb1\x24\x41\x1a\x1b\x3e\x32\x2c\xcb\x43\x4a\x24\xf0\x44\xc0\x72\x5e\x6a\x8a\xa3\xbf\xfd\xa9\x56\x91\x4a\xba\x9f\xe7\x6a\xf6\xdb\x63\xd7\xf7\x29\xfc\xde\xe3\x63\xf8\x7e\xb5\x11\xe7\x1a\x65\xa9\x30\x8d\x58\xde\xe7\xad\x2f\x9a\x3c\x4c\x6e\x18\xd0\x04\xeb\x29\x36\xa5\x00\x0f\x7a\x91\x0f\x7d\x01\x32\x46\x10\xeb\x4a\xec\x12\x58\xf5\xc3\x7f\x95\x34\x53\x25\xb9\x80\x71\x7d\x44\x69\xb4\x15\xa6\x65\x76\xd1\x3c\xc7\x1b\xf6\x9b\x40\x7d\xb1\xe5\xe8\xbc\xaf\xcb\xee\x5a\x78\xb5\xf5\xc5\xec\x3f\x1e\x6e\x7d\xb8\xd2\xaf\xd7\x46\x95\x1c\xec\x1e\x48\xbf\x18\x40\x62\x69\x6b\x4a\x11\x7d\xcf\x31\x1c\xcf\x0c\x25\x9a\x54\x59\xd6\x36\x89\xc0\x83\x40\x34\x39\xec\x53\x06\x43\x7b\xa4\xeb\x41\x0a\x50\x94\x4e\x6b\x34\x1d\xff\x43\xa5\xef\x7f\x0a\xd9\xff\x05\x3f\x48\x69\x44\x65\xca\x90\x21\x75\x21\xab\xd7\xb0\x47\xa6\x73\x37\x6b\x7d\x24\xf4\xd9\x76\x59\xcc\x34\x82\x1a\xfe\xb0\xf0\xb1\x93\xdf\xf0\x6d\x1e\x6f\x1a\x3f\xe5\xe1\xfd\xf2\x49\x5e\x60\xe2\x08\xd5\x70\x0d\x85\x81\x8e\x4f\x5b\x0e\x29\xba\xae\x2c\xf2\x81\x47\xb0\x9a\xc1\xb3\xa1\x19\x60\x13\x45\x72\x68\x21\x43\xfc\xd7\x6d\x13\xf0\x00\xa5\x51\x11\xec\xf7\x8a\x97\x1b\x18\x6f\x0b\x7f\x0c\x47\xb9\x5d\x4a\xa7\x80\xcc\x67\x36\xdf\x6f\x3c\xa6\xf0\x9a\xa2\x07\x37\x1e\xec\x3f\x61\x5c\x89\xe4\xe6\x28\xdf\xf5\x28\x8e\xc4\x3a\xe1\x86\x9c\xa3\x5b\xff\x6a\x43\x69\xdb\xf7\x30\xe9\x32\x1c\x15\xb2\x96\xc9\xf1\x08\x8a\x84\x8d\x38\xdd\xa3\x5d\xd9\x70\x88\x34\x2e\x65\x39\x87\xdc\x1f\xfa\x30\x4b\x9d\xab\x99\x0e\x34\x29\xd7\xfd\xfd\xf7\xae\xce\x18\x82\xb2\x8f\xdc\xd5\x2b\x5b\xd7\x09\xfb\xb3\xe6\x6f\xc2\x0c\x4d\x32\xb0\x45\xc4\x31\x2b\x1a\x38\x08\x79\x9f\x57\x29\x49\x0d\x2d\xce\x47\xa6\x48\xb0\x9c\x4c\x03\x4a\xe5\x55\xd6\xa4\x75\x40\x6b\x86\x40\x91\xb2\x2e\x84\xff\x7e\x70\x78\xd5\xec\x69\x46\xf8\xe5\x87\x99\x0a\xac\x6d\x93\xe1\xeb\x8f\x6f\xd5\x7b\x39\x76\x01\x5b\x67\x65\xb1\xdf\x8e\xbc\x9b\xf2\x69\xe1\x4f\x7f\xa7\x46\xa5\x7f\xac\x93\x06\x19\x87\x27\x5b\x20\x36\x7c\x51\x09\x4d\xde\x94\x63\xc7\x80\xb1\xac\x30\x16\xaf\x28\x14\xaf\xcb\x64\xe4\x13\x34\xeb\x12\x8e\x17\xb0\x94\x47\x84\x8a\x9e\x46\xb7\x53\x75\x6c\x99\xbc\xa3\x96\x9d\xab\xd8\xeb\xf2\xfc\xcb\x77\xcb\xbc\xb7\xc7\xdb\xdd\x9f\xd4\x84\x05\x07\xfa\xbc\x78\x9a\xed\xad\xde\x28\xfd\xfb\xfc\x89\x99\xc0\xd5\x80\x50\x55\x09\x8b\xa1\xa4\x78\x1c\x0b\x45\x52\x50\x2c\xd2\x0f\x91\x00\x54\x31\x66\x80\x2e\x63\x4b\xe3\x15\x91\x21\x20\x64\xa1\x44\x49\x3c\xf3\x4a\x04\xff\x5f\x03\xd0\x94\x46\x25\x32\x0e\xec\x9b\x3a\x82\x5b\xcd\xf8\x7d\xf1\xb9\xa3\x5b\x7f\x1d\x9c\x35\xba\x76\x3b\xff\xa9\x5a\x4f\xeb\x8d\x6a\xf3\x5a\xdb\xc9\x5f\xb1\x6f\x37\xf8\xb2\xec\xdb\x75\x93\x4c\x9f\xe5\xf8\xb2\x6a\xab\xb2\xc7\xf3\x9a\xa9\xca\x38\xb4\x63\x40\x2a\x2a\xa9\x18\xc8\xd5\x09\x4a\x73\x69\xa8\x87\x96\x28\x29\x8e\xc9\x88\x44\xa4\xd9\x06\x97\x46\x28\x1c\x3b\x51\xe0\xf6\xb5\x21\x37\xd4\xf1\xeb\x3e\xba\xbf\x1a\x3f\x99\xf9\xac\x6d\xc5\x6b\xf7\xde\xce\x5e\x38\xc7\x67\x68\xd1\x96\x03\x62\xfa\x9b\xa3\xc4\x88\x74\x02\x53\x84\xac\x8b\x8a\x0f\x34\xde\x41\x91\xae\x40\x2b\x94\x08\x49\x46\x8a\xca\xc4\x50\x23\x0d\x29\x74\x25\xd6\x62\x2d\xe8\xab\x86\x69\x87\x38\x0d\x09\xfe\xcd\x0d\x07\xe4\xfd\xf2\x48\xd6\xa3\xab\x32\x5c\xae\x9b\x75\xff\x8f\x17\x87\xd7\x3f\x32\xf5\xc2\x89\xbd\xb5\x47\x4d\x1f\xff\xed\x00\x90\x92\x5c\xe9\x40\x5e\x24\x29\x57\x46\x8e\x40\x87\x6c\x1c\x5a\xa1\x49\x8a\xb4\x25\x04\x8e\x2c\x3b\x1e\xa7\x87\x34\x0c\x24\x87\x90\x03\xe7\x5f\xa9\xd2\xc6\x9e\xea\x31\x90\x48\x6c\xf6\xc8\x9c\xc7\x87\xb7\x39\x30\x69\x6c\xd3\x0b\x0b\x1f\xb4\x35\xc5\x36\xa5\x0f\x3c\x29\xf2\x9b\xfe\xc3\x3a\x76\x47\xc3\x0d\x1b\x9b\x51\xe9\x57\x02\x49\x4c\x75\xa4\x05\x54\x04\xe4\x00\x0a\x01\x23\x5a\x22\x04\xd8\x51\x1c\x2c\xdb\x90\xa4\x71\xe0\xfa\x3a\xb0\x43\x96\x35\x41\x40\xb0\x8e\x69\x86\x8a\xe5\xa1\x34\x6a\xf0\x98\xc9\xdd\x72\xb6\x8b\x2b\x94\xb8\xa9\xbf\x95\xe9\x8d\xcc\x6f\x4e\x2e\x53\x71\x4b\xee\x2d\x23\xaa\xbe\x5d\xbf\xf4\xb0\xbd\x35\x8b\xa0\x24\x6b\xae\x04\xa1\x6e\x88\xac\x07\x8d\xc0\x13\xb1\x86\x6c\x4e\xa5\x43\x83\x43\x11\x0c\xa0\xc0\xc6\xa1\x69\xc4\x56\xcc\xe8\x48\x89\x2c\xac\x38\x3c\xa0\xa8\x7f\xcc\x29\xd6\xbd\xfe\x9f\x81\x12\x52\x1a\xbd\xf6\x66\xbd\xff\x45\x56\xb6\x0c\x96\xac\xb6\xe4\xeb\x3a\xca\xd9\x69\xd5\x26\x55\x3b\x7a\xb0\x5e\xf8\xa0\xea\xc8\x31\xcd\xf2\xbd\x37\xc4\x84\x73\xf6\x8a\x7b\x07\x24\x37\x82\x19\x39\xe2\xb5\x80\xb0\x03\x9a\x62\x81\x1d\x7b\x3c\xd4\x58\x8c\x24\xd7\xe6\x4d\x89\xe2\x05\x9f\x72\x0d\x97\xe4\x68\xc4\xb0\x6a\x24\x02\x88\x08\x18\x25\xf6\x29\xa6\x41\xfd\xf2\x9f\xfb\x5d\x33\xd5\x7e\xbe\xb6\xe1\x81\xb3\xc5\x2b\x1e\x1e\xcc\x2c\xb8\x3d\xff\xd7\x99\x9d\xb6\x7f\xfb\x56\xf1\xd6\x8b\xbc\xe4\xb6\x0e\x31\x69\x4a\x40\x97\x23\x5a\x55\x9c\x10\x69\xaa\x27\x9a\x41\xe0\x28\xb2\xaf\xb3\xbc\x60\x39\x61\x10\x9a\x8a\x17\xb2\x24\xc3\x12\x62\x0c\x43\x56\x47\x6c\xe2\xaa\x80\xab\x1c\x74\xe7\xdd\x7a\xf1\xed\xd9\x1d\x79\x27\x2c\xf6\xe7\xd6\xcb\xd2\x34\xa7\xdb\x66\xf3\xea\x83\x53\xdb\x0f\xc8\x2b\x4e\xd8\x7f\x36\xb9\x66\xdb\xb1\x6a\x29\x82\x21\x84\x5a\x28\x79\xbe\x12\x84\x3e\xe1\x13\x24\x40\x16\x90\x63\x18\x88\x8e\x6e\x38\x2a\x11\x48\x2e\x89\x84\x58\x13\x42\x9e\xc1\x7e\xe2\x79\x6e\xc5\x87\x85\x5f\x84\xcd\x3b\xc7\xce\xd4\x3e\x27\xf2\xfc\x51\x74\x6d\x14\xf6\x6e\x5f\x71\xcf\xb7\xb9\x02\x0f\x97\xdf\x2f\x76\x48\x2e\x3c\x9d\xf7\xb5\x80\xb5\x8c\x90\x53\x68\x97\x41\x96\x48\x98\xba\x28\x86\x96\x21\xc7\xae\x43\x45\x3c\x65\x32\xbe\x20\x93\x9a\x6f\x61\x9d\xe7\x04\xdf\x0a\x09\x57\x79\x75\xf6\xf5\xf9\xd2\xf7\xc3\xf5\x75\x8a\xce\xff\xa9\xcb\xb5\x46\xf3\xdb\x4c\x8c\x6e\x4e\x68\x94\xbd\xcf\xc4\x76\x05\xc6\x4d\x6d\x5c\xfd\xdc\xeb\xdf\x24\x59\x89\xc3\x22\x02\x51\xe4\x55\x87\x01\x2a\x0d\x65\xdd\x21\x89\x10\xd9\x82\xec\x05\x4a\xc8\x07\x48\x8f\x6c\x4d\x30\x08\x96\x65\x04\xcd\x81\x6e\x20\x22\xff\xdf\x6a\x8d\xff\x65\xf2\xc2\x1a\xff\xbd\x24\xd2\xad\xd7\xe3\xeb\x63\xdf\xde\xb1\x36\xeb\xf4\xb3\xf1\xba\x09\xc5\xaa\x94\x69\x76\x74\xf4\xfa\x51\xf7\x7a\x94\x20\x6b\x65\xe9\x3f\xee\x58\x4a\xa3\x97\xcf\x5e\xee\x1d\x5f\x34\x95\x43\x7d\xf7\x79\x96\xf1\xe4\xc9\x0b\x9b\x0f\xe7\x1f\x9f\xfd\x71\xe1\xb9\xb7\xb2\x2e\x7e\xe7\xa2\xd3\xf8\x44\xf5\x42\x0b\x2a\xbf\x76\xa8\xf0\x86\x51\x49\x5e\x52\x52\xc8\xd0\x70\x01\x8a\x35\xec\xd2\x28\x22\x20\xc6\xb2\xad\x12\xb4\x6d\xb0\xae\xaf\xa8\x91\xc2\x78\x16\xef\x19\xae\xeb\x32\x04\xe1\x43\xc5\x57\x83\xc4\x0e\xa5\x9c\xfb\x6b\x91\x5e\xab\x64\xee\x36\x33\x9e\xff\xb1\x3b\x1b\x1e\xb3\x6f\x74\xbe\xd9\x47\xab\xae\xcc\x46\xef\x68\x51\xdd\xfb\xb3\xf3\xc8\xe4\x96\x04\x9e\x8e\x15\xcd\x92\x03\x57\xd2\x1d\xdb\x87\x31\x1b\x11\x66\x0c\xb0\x46\x53\x34\x49\x0a\x8a\xa1\x33\x91\x84\x2d\x1c\x11\xa6\x03\x6c\x8b\x86\x34\x99\x00\x41\x78\x7d\xc3\xa4\xce\x5f\xd4\xfd\xa0\xa7\x3c\x2a\xcf\xdd\xb9\xe4\xed\x95\x4f\x06\xd7\xda\xbd\xad\xc6\xed\x4f\xb5\x45\xe2\xc3\x9f\x56\xb5\xfd\x39\xb9\xa1\xab\x52\x52\xa0\x40\x2f\xe2\xa5\x50\x89\xdc\x58\x21\xc3\x7f\x5d\xcd\x78\xda\x60\x78\x06\xb3\xbc\x88\x24\x21\x32\x3d\xc6\xf5\xb9\xc0\xb6\x4c\x15\xd8\x04\x4a\x7c\xd2\x1b\xc8\x1f\xb6\x6f\xbc\xfe\x69\xbd\x62\xe3\x3f\xb9\xd4\xe2\xa3\x86\xdb\xce\xb6\xb8\x5e\xf4\xa2\x7e\xec\xd9\x1f\x3f\xef\xa9\x59\xbd\xd1\xbd\xf4\x9f\x74\x62\xc2\x5c\x1c\x31\x32\xd2\x03\x03\x6b\x34\x70\x0d\x3a\xf4\x18\x29\x60\x2c\x44\x52\x58\xd5\x59\x2d\x16\xdc\x88\xd6\x83\xd0\xa1\xbc\x08\x7b\x50\x15\x08\x9c\x80\x30\xf7\xaa\x3e\xa1\xf9\xc4\x3e\x07\xbd\x3a\x55\xc7\xce\xe9\xe7\x6e\x18\x36\xbd\xeb\xda\x73\xbf\x74\xde\xb5\x96\x7b\xde\xe5\xfd\xa2\x59\x1e\x26\x97\xd8\x9c\x97\x64\x5d\xd0\x0c\x07\x21\x9e\xb1\x39\x59\xb4\x82\xc0\x56\xb0\xcc\x40\x57\x8c\x2c\x4a\x74\x4d\xca\x88\x3c\x03\xba\x34\xa9\xc9\xc8\xd1\x84\x98\xfc\xb7\x42\x72\x82\x95\xb0\x83\xab\xbc\x5e\x3b\xbb\x0c\xcb\x24\x29\x0d\x88\x4b\xc2\x0f\x8f\x2a\xdc\xbd\x75\xe6\x79\xb1\x71\x0b\x46\x5f\xdc\xd9\xec\x6c\xdd\x79\x17\x53\x05\x6e\xc9\xc2\xfd\xb3\xbf\xed\xe7\xfe\xb6\xea\xfa\x2d\x5e\xd6\xd9\x67\x0b\x54\x74\x2d\xb2\xe5\x87\x43\x82\x31\x2f\x17\xb4\x7d\x63\x5d\xc7\x3b\xc9\x8d\x00\x4f\x17\x22\x11\x52\xb6\xc3\x52\x36\x09\x2c\xd5\x52\x51\xa4\x84\x74\x14\x51\xa6\x17\x7b\x0e\x69\xd9\xae\x44\x52\xa4\x13\xb1\xb2\x09\xf4\x98\x04\x02\x9f\x18\x05\x31\xf0\x49\xd3\x43\x85\xbf\x7b\xed\x70\x9b\xc3\x3d\x3e\x39\x3f\xa2\x47\xde\x15\xdb\x4a\x6e\xbf\x5f\xa9\x00\x95\x63\xdc\x6b\x7b\x3a\x96\xd7\x92\x4d\x83\x2e\x98\x88\x0d\x78\x16\x45\xa4\xaf\x39\xa4\xc8\x68\x31\x02\x1e\xb2\x38\x9e\x95\x68\xac\xea\xa1\x65\x11\x76\x20\xf3\x36\x00\x86\xe2\x06\x3e\xf9\x6f\x9a\xb2\xd4\xee\x34\xe2\xc0\x44\xef\x6a\xa1\x3d\xb3\xfa\x5f\x5c\xf2\x7b\xc9\x2d\x53\x4f\xa4\xf4\x79\x67\x29\x39\xab\xf9\x85\xf0\x5e\xdd\x13\xda\xcf\x75\x6a\x27\xd7\x9d\xa0\xe2\x60\x8d\x23\x0d\x39\xb0\x85\x50\xb7\x29\x85\xd5\xc8\x00\xf3\x91\xa1\x30\x02\x94\x0c\xc6\xe5\x2d\x45\x8a\x98\x40\x92\x6c\x48\x84\x06\xd2\x22\x32\x71\xe0\x16\x39\x91\xc2\x2d\xda\x5b\xe2\xd8\xb7\x65\xfa\xb7\x3e\x9e\x32\xac\xd5\xbd\x46\xdf\x67\x15\x5b\x6d\xeb\xf2\x95\xb5\x20\x7f\xe1\x27\xeb\x1b\x26\xb7\x80\x39\xae\x27\x73\x06\x1f\x60\x3e\x60\x6c\xc5\x96\x78\x45\x52\x05\xca\x0a\x88\x18\x46\xb1\x43\xda\xc8\x65\x34\x5d\x01\x58\x0d\xb0\x61\x88\x2c\x0b\x54\xef\xd5\x93\x6e\x6f\x97\xbc\x37\xda\x97\x4e\x8d\x3f\x33\xa2\xdd\xce\x1e\xc4\x20\x70\x75\x6a\x7b\x76\xd4\x9d\x42\x07\xec\x86\x85\xaf\x4e\xce\x1a\x27\x99\x59\x2d\xf0\x1c\xc5\x53\x1d\x95\x95\x5c\x9f\x53\x04\xdb\x94\x19\x9a\x97\x3c\xdb\x97\x80\x65\x8b\x51\x40\x84\x96\xe1\xd2\xae\x4b\xc4\x06\xaf\x6b\xac\x0d\xd5\xc4\xbd\xe4\x99\x8a\x95\xee\xbd\xdd\x9c\x66\x5a\x76\x7e\xc3\xb8\xd9\x7e\xf1\xf8\x52\x57\x9b\x8d\x3f\xd2\xeb\x87\x65\x56\xf7\x76\xaf\x95\x58\x55\x3c\xfd\x8a\x04\x89\x57\x50\xa5\x50\x15\x68\x23\x04\xd8\xa0\xf5\x90\x61\x25\x8e\xd5\x7d\x52\xa5\x74\xcc\xa8\x2e\x64\x0c\x99\x35\x65\x59\xe7\x22\xc3\xb5\x3d\x8b\x66\x0d\xe4\x28\x69\xe4\x9b\x81\x7b\x2a\xb6\x3c\xd6\xf2\xb7\x66\x65\x2e\xf6\x51\xcf\xff\xda\xae\x76\xe9\x27\x5f\x4f\xbe\x91\x22\xf1\xdb\x9b\xbc\xff\xe1\xc0\xbe\x79\x77\xa5\x72\xa7\xf1\x6a\xbd\x9c\x07\x7f\x9a\xda\xf9\xf9\xe4\xc2\xf3\xb1\xb3\xfc\xa2\xdb\x6b\x40\xd7\xd6\x52\xa5\x82\x58\xaa\xbf\xbb\xf1\xf0\xf2\xe9\x47\x12\x26\xde\xf8\x81\x36\x66\xb0\x62\x51\x8c\x48\xc9\x22\xef\x99\x51\xa4\xc7\x8e\x69\x32\x14\x67\x50\x22\x61\x21\x0e\x3b\xb1\x2c\xdb\x44\xe8\x70\xb1\xab\xb0\xff\xbd\xd6\x94\xba\xe2\xfe\x14\x66\xe8\x33\xad\x45\xcd\x47\xbf\x77\x34\x8b\xef\x3a\xd4\x62\x87\xf6\xf3\xac\x1d\x7d\x3a\x89\x4b\x87\x88\x77\x66\x6d\xfc\x9c\x2e\x9c\x5c\x77\x32\x24\xe4\xd1\x9a\x08\x03\xc5\x0f\x18\xd9\x54\xb0\xcd\x88\x06\x70\x18\xdb\x20\x0d\x5a\xe7\x1d\x92\x31\x0c\x82\xa6\x23\x15\x20\xd3\x63\x29\x0b\xf0\x54\x1a\x48\xf2\xfb\x64\xd9\xd2\x15\x1f\xf7\xbf\x74\xb3\xd4\x5e\x6e\x4e\x91\xcc\xcb\x46\xcf\x1c\x5c\xec\xfe\x95\x2e\xf5\xa6\xe4\x5a\xb4\xb3\x41\xdb\x1e\xbb\x53\x03\x53\x86\x95\x6e\x3a\xbb\xc8\x4f\xf5\x07\x1f\x33\x9e\x35\xaf\xf1\xc3\x8b\x76\x6b\x16\x9f\xc8\x3b\xb7\xc3\x6e\xba\xc1\x5f\xfd\xa6\x18\x52\xfa\xd1\x70\x09\x13\x6a\x80\x42\x88\x5d\x9d\xe0\x39\x5e\xf6\x3d\xd5\x08\x48\xc9\x77\x4d\x1b\x61\x2e\xe4\x3d\xa0\x07\x21\x26\x29\x25\x66\x7c\x16\xeb\xba\xca\x93\x22\x19\xa5\x31\x69\x9d\x53\xe8\xcf\x33\xab\x86\x97\xea\xdd\x65\xd6\xc9\xf9\xef\x55\xf3\x0e\x46\x6d\x7a\xdc\x55\x57\xe7\x1a\xd4\xf5\xec\xf4\xdd\x44\xe7\x4a\x47\x92\xeb\x4e\x46\xc4\x13\x34\x17\x7a\x0c\xaf\xab\xa6\xc2\x9a\xa4\x43\x4b\xb4\xa6\x8a\xc0\x03\x12\xd4\x78\x95\x04\x82\x40\x46\xbe\x64\x04\x22\x47\x08\x18\x08\xd1\x3f\xa5\xe7\xff\xf9\x6d\x36\xbd\xff\xda\xec\x3a\x97\x9b\x5e\x99\x56\xb7\xdb\xb3\x75\xc4\xb8\x5d\xdb\xdb\xcb\x13\xae\x9c\xd9\x75\x7c\xca\x98\x22\xf3\x07\x9c\x3a\xf2\xbf\x74\x9f\x0e\xd5\xf7\xd9\x47\x0f\x16\x96\xff\xa6\x85\x7a\x21\x47\x89\x01\xed\x72\x6e\xe8\xf8\xe3\x77\xab\x76\xdf\xfe\x73\x17\x35\xf8\x49\xa6\xc6\x0b\x52\x1d\x49\x26\x32\xef\xb5\xf6\xc6\x45\xb4\xe4\xe3\x43\xc5\xea\xb5\xbf\xfc\xd6\x9d\xd2\x87\x2b\x0d\x26\xab\x36\xfd\xee\xc2\x2f\xdc\xcd\xca\x46\xfa\x25\xc0\x13\x7e\x49\x8d\xe4\x28\x0d\x04\xbc\x03\x62\x1b\x31\x81\x4d\xfa\x31\x1b\x07\x36\x60\x5d\x51\xc3\x0c\x4d\x51\x18\xd8\x0e\x54\x6d\x13\x63\x97\x93\x24\x82\x42\x4a\xe2\xfd\xa3\x56\x53\xef\x7d\x7f\x78\x9d\x73\x07\xf7\xbd\x52\xfa\x0f\x34\xf4\xbb\xa2\x5f\xdf\x37\xe7\xb7\x80\x27\x1a\xfa\x0f\xb2\x55\xea\xbd\x3e\xfd\x4b\xde\x89\x17\xd4\x34\x1c\xd9\xbe\x6e\xeb\x3e\x92\x44\xce\x53\x44\x42\xa1\x65\x86\x88\x4d\xc5\x0e\x04\x60\xe8\x92\xae\xc4\xb2\xa4\x99\xac\xc5\xa8\x98\x73\x48\xe3\xdf\xd4\x1d\xa9\xeb\x8c\xb3\x7f\x7e\xa6\xe6\x23\x3f\x1b\xb8\xcd\xcd\x70\xf3\xc5\xc2\x7d\x6f\x9e\xe9\xd0\x9b\x45\x43\x2b\x3d\x56\x27\x66\x72\x46\xe4\xbd\xde\x33\xc9\x58\x90\x88\x0a\x19\x46\x46\x8c\x13\xb9\x84\x69\x6b\x31\x16\x2d\x86\xa3\x14\x9f\x0b\x58\x1a\x32\xbe\x60\xd3\x3c\xad\x53\xa2\xad\x85\x11\x6d\x63\xd5\x72\x12\x6c\x2f\x0e\x9b\x7e\xeb\xdd\xf1\xe3\xa6\x6d\xd8\xc0\xd4\x1f\x77\xfc\xce\xc2\xef\x4a\x53\x5f\xcb\xc2\xa2\x0f\x7a\xcd\xaa\xb4\xe0\xdd\x2f\x7e\x6b\x9a\x35\xb9\x26\x3b\x38\x86\x26\x67\xc7\x2e\x8a\x25\x14\xea\x3a\xb4\x0d\x56\xf0\x25\xda\x53\x23\x2c\xd0\x24\x07\x58\x59\xd5\x15\x3f\x8a\x65\xcd\xa5\x91\x24\x83\xd4\xa8\x9b\xbf\xab\x46\xef\xd3\x8f\xad\xd8\x1b\xb0\x7a\x48\x59\x65\x10\x7e\xe7\x59\x93\x8b\xc2\x1d\x7e\x4f\xa5\x94\x9c\xab\x76\xdc\xce\xde\xd7\x7d\x59\x2c\xc9\x18\x27\x33\xa0\x59\xd1\xd6\x24\xd1\x16\x00\x6b\xc8\x26\x19\x44\x61\x60\x4a\x36\x8a\x55\xd6\x10\x65\x47\x14\x9c\x48\x0d\x19\x95\x53\x35\x9b\x76\xc3\x80\xf7\x5f\x1d\x54\x8e\xff\xaa\xd2\x1b\xbb\x16\x76\xce\x31\x30\xef\x9a\xe9\x1e\x55\xa8\xcf\x97\xeb\x4a\x16\x6a\x35\xfb\x45\xaf\xa9\x39\x1e\xd7\x7f\xf0\xe9\x9c\xcf\x93\xdc\x84\x78\xd0\x20\x7d\x4a\xf2\x03\x97\x63\x63\x13\xea\x9e\xa3\x4b\xae\x69\xfa\x9e\xa5\x49\x92\x42\x18\x02\x05\x2c\x5d\x0a\x30\x0d\x03\xa8\xb2\x86\xab\xb2\x69\x54\x8d\xb7\xc5\x52\x9d\xc8\x91\x55\x7a\x96\xe9\xb2\xa6\xf7\x94\x3f\xd5\xf0\x8f\x0e\x8b\xab\xaf\x47\x5b\xba\xb5\xcd\x90\x6b\xe5\xbb\xb9\xf7\xdd\x4b\xf5\x5d\x2a\x2c\x0d\x8a\xb5\x71\xdb\xde\xaa\x8b\xb7\x2e\xaa\xb2\xb0\xa6\xd9\xe3\xd9\xf9\xe6\xc7\xd0\x8a\x26\xcc\xc9\xbe\x59\x7b\x57\x9e\x95\x5c\x7c\x0e\x8f\x1c\x2f\x52\x91\xad\xfa\x12\x05\xa2\xc8\x92\x82\x38\xd6\x80\x2d\x1a\x86\x0a\x3c\x06\xc7\x0c\x61\xd2\x24\x4b\x00\x19\x4a\xa1\xc4\x6b\x40\xb1\x50\x02\xe5\xed\xa9\x6f\x6e\x72\x9f\x54\xed\x63\x8d\x5e\x3c\x32\x3b\xdb\x8a\xdc\x3a\x26\xd3\xb6\x0c\x5b\xcf\xb4\xfb\xeb\x56\xe6\x1c\xd9\x16\x6c\x1b\x98\x64\x9a\x54\x45\x74\x03\x04\x05\x4e\xf1\x45\x5f\xf0\x45\x35\x22\x9d\x28\x92\xa2\x58\x24\x78\x25\x66\xad\xc8\x91\x4d\x9d\x8e\x44\x8e\x01\x00\xda\x5c\x44\xd3\x4e\x1a\x34\xa9\x7f\x2d\x99\xb9\x60\xf4\x8c\x41\x4f\x8a\xed\x18\x30\x60\x4f\xa7\xa1\xdf\xac\x28\x77\xb2\xc3\xbb\xfd\x71\xf6\xe7\xd9\xf2\x5c\xe6\xca\xfb\x5d\x93\x0c\xb0\x47\x9e\xea\xda\x24\xed\x38\x16\x6f\x02\x08\x3d\x45\xf2\x63\xc1\x46\x92\xc2\xdb\x81\x15\x88\xa1\xac\xc9\x48\x15\x74\x81\xb2\x28\xda\xc5\x26\x83\xd3\x00\x70\x19\x1b\x9e\x0e\xbe\x87\x06\x1c\x2d\xf8\xc1\xb9\x8f\x5c\xc6\xa8\xd3\xa7\xe6\xfc\xb6\x6f\x2d\x01\xf3\xbe\x3f\x93\xbf\xfb\xe6\x59\x4f\x57\x25\x37\xab\x87\x4a\xc4\x7b\x1a\xc5\xd8\xa4\xa9\xca\x0c\x15\x91\x9c\x02\x3c\x14\x42\xdf\x11\x1c\x0a\x39\x4c\x60\xc4\x08\x91\x26\x4b\x78\x3a\x6d\x1a\xa2\x2c\x73\x7a\xe2\xb6\xe2\xf4\xb5\xcf\xef\xc8\x61\x95\xc2\x1f\x6c\x20\x7b\x77\x6f\x75\x7e\x92\xd5\xd2\xb5\xae\x3d\xeb\xa1\xb7\xeb\xb2\xf2\xf1\x81\x81\xb5\x3f\x49\x6e\x9a\x0c\x43\xc9\x09\x58\xc6\xd3\x7d\x87\x32\x15\x10\xc9\x96\xee\x70\x82\xa9\x7a\x4c\x08\xf8\x58\xfc\xd7\x4d\xd8\x89\xa8\x88\xf2\x43\xde\x36\x48\x92\x40\x6e\x1a\xcc\x0c\x43\xcd\xf7\x7a\x77\xdb\x54\xf9\xd3\xa2\xaf\x7f\x5f\xe1\xcb\x2f\xb7\x54\xcd\x77\x36\xcf\x2d\xfb\xda\xae\x3a\x43\xf3\xbe\x38\xd7\xfe\x66\xdb\xba\x49\x7e\xb1\x40\xbc\xea\x7b\xb2\x19\x8a\x86\x22\x9a\x82\x25\x31\x71\x08\x64\x13\x10\x74\x18\x68\xa6\x6d\x44\xa1\xce\x58\xb4\x2d\x49\x31\xcd\x61\xce\xe1\x42\x2d\xc1\x82\xdf\xbc\x41\x83\xaa\xf6\x78\x67\x58\x34\x7c\x63\x9d\x0c\x59\xf2\x7d\x57\xf4\x29\xa9\x2c\xe4\x7e\xdc\xb5\x6c\x75\xd1\xf2\xef\xe6\xcd\xb4\x3a\xc9\x34\x07\xbc\x63\x41\x93\x33\x15\xcc\x69\x06\x27\x86\x4e\xa4\xb3\x36\x15\xb1\x7e\xc8\x3a\xba\xc6\x2b\x3a\x67\x4a\x8c\x63\x09\x98\x0c\x03\xa0\x41\x89\xc2\x64\x02\xad\xd1\xab\x65\x7b\xdc\x59\xcb\xb7\x9b\x52\xed\x7c\xe3\x51\x7d\x0f\xf7\x6a\x7a\xae\xfd\xe3\x56\xcd\x3f\xce\x72\xfd\xf4\x9e\xd7\x17\xd4\x7b\x58\x3f\x25\xb9\x3e\x6d\x12\xac\x15\x46\x0e\xc1\x49\x4e\x04\x20\xcb\x79\x36\xef\xc4\xac\x8a\x2d\x5f\xe7\x49\x86\x97\x40\x64\xd2\x1c\xa5\x9b\x6e\x44\x92\xae\x18\x88\x2c\x86\x89\x1b\xac\xb2\x9f\xaf\xbb\xfb\xb0\x6a\x96\x62\x52\x4b\xa6\x73\xb3\x67\xe5\xba\x66\xd8\x48\xe7\xad\x5d\xa1\x71\xff\x71\x63\x8b\xd4\x94\x8c\xce\x99\x93\xbc\x7a\xcc\x13\x8a\x2c\x4a\xa4\x2e\x38\x48\x09\xa0\xe1\x00\x4e\x74\x45\xdb\x42\x9c\x16\x9b\x86\x8f\x74\x25\x08\xb0\xc3\xaa\xbe\xa0\xf9\x00\x41\x23\x76\xb5\x57\xbb\x95\x71\xed\xdc\x0d\xcd\x0a\x57\xdb\xa6\xfc\x95\x23\xf7\xbc\x53\x97\xfe\x9c\x50\xa9\x53\xaf\xd1\x37\xbe\xce\x35\xac\xeb\x1b\x6f\x31\x53\x86\xa4\x1f\x7e\x92\x78\x4c\xa1\x0a\xb2\x68\x52\xaa\xc6\xd9\x0a\xe3\x10\xa2\xe1\xdb\x91\xe7\x38\x9e\x2e\x33\x82\x6d\x0b\xbc\x4f\x4b\x1a\xef\x4b\x91\xe6\x50\x86\xcc\x32\x7a\x08\x13\x08\x6b\x9e\x7a\xde\xaf\x4d\xa5\x21\x47\x27\xdc\x98\xbc\xbc\xe9\xe8\xa2\xbf\x16\x19\x39\x64\xfa\xe4\x9c\xdd\xc6\xf4\x79\xe7\xc3\x77\xe6\x8c\x7c\x9e\x23\xfd\xdc\x98\x89\xd1\x0d\x0a\xeb\xda\x0e\x69\x8b\x5c\x40\x85\xa1\xc5\x31\x21\x40\x9a\x68\xf0\x3e\x90\x35\xd1\xd1\x7c\x2a\x70\x2c\xcc\x33\x92\xc9\xd3\x6c\x28\x91\x26\x74\xd2\xb8\x47\x7d\x63\x4f\x7f\x36\x7c\x4a\xb3\x06\xdf\x2e\xec\xda\x7f\xcd\x8c\x85\xce\xc4\xef\x94\x8e\x59\xf2\xdf\xfe\xa5\xd3\xc1\x4f\x1f\x9a\xdd\x67\x24\x57\x7d\x9b\x73\x31\x92\x24\x91\xf0\x51\xac\xfb\x04\x01\x39\x07\xf1\xa2\xa3\x52\x9e\x13\x59\xba\x1c\xa9\xa6\xc5\x00\x5d\x71\x78\x97\x16\x23\x4d\x91\x90\x0e\x34\x31\x71\xc2\xcb\xd4\x1f\x7d\x31\xb1\xc9\xf1\x8b\x0d\xae\xce\xf8\x3c\xe3\xc8\xd6\x9d\x97\xee\x2d\x98\x65\x74\xe3\x07\xcd\xd7\x36\x2c\x52\xf6\x99\xf5\xfd\xe5\x24\x53\x7a\x62\xd6\xc7\x04\xcd\xca\xb2\xa2\x46\xba\xc6\x39\x32\xaf\xb0\x92\xc7\x88\x36\xc5\x89\x6e\x24\x93\xaa\xee\xfa\x2c\xef\x45\x92\xc8\x89\x81\xe4\x60\x57\x7a\xd5\xa7\xb3\xdd\x1d\x21\x4f\xca\x0e\x76\x75\x2b\x51\x21\x9c\x06\xde\x9b\x3f\xb3\xe9\xe9\xaa\xb3\xb2\xb6\x7c\x7f\x5c\xa3\xca\x5f\x9d\x1b\x3a\xdc\x4a\xf2\x32\x94\x22\x89\x7e\x10\x10\xb1\x66\x99\xbc\xc8\x40\xd9\x92\x39\x27\x86\x12\x8a\x1d\x91\x53\x00\xe5\x59\x18\x3a\x81\x40\xd1\x36\xcb\xb3\x11\x69\xc1\x28\x01\x7b\xce\xa5\x8b\xe3\x5e\x7b\x58\x6d\xc7\xcf\xed\xc7\xbe\x16\x5f\x7d\x38\xf5\xa4\xde\x70\xfd\x87\xb5\xbe\xe9\xfb\x65\xa7\xae\x4c\x6d\x77\x6f\xc9\x43\xc9\x5e\x39\x93\x62\x4b\xd6\x5c\x21\x82\x26\xc0\x88\xb6\x6d\x55\x8b\x54\xd2\x8e\x25\x5b\xc6\xba\x43\xb9\x72\x44\x98\x8a\xe6\x07\xa4\x49\x47\x34\x1b\xd2\xff\xd0\x83\x4e\xd5\x9c\xf6\xc8\x53\xf3\x7e\xeb\xa3\xdb\x5e\x9c\x3c\xba\xf2\x93\xeb\x83\x7e\xff\xfe\x48\xab\xfa\xe3\xbe\x58\x51\xfb\xce\xa7\xc2\xb5\x0f\xfb\x1a\xeb\x5f\x24\x99\x97\xda\xa3\x04\x11\xb3\x50\x0e\x6d\x09\xba\xa4\x8a\x23\x16\xf2\x44\x60\xf3\x2a\x64\x4c\x15\x05\x01\x94\x78\x56\x63\x23\xde\x26\x18\xce\x45\x0e\xaf\x26\x90\x15\x1c\x7f\x59\xf8\xc2\xaf\x75\x06\x16\xf1\x5a\xcc\x7c\x24\xd2\x3d\xb6\x72\xc7\x0a\xba\xc5\x7a\x94\x18\x7a\xf2\x7d\xb3\xde\xa8\xae\xe9\x5f\xc6\x4a\x0c\xd3\x67\xfc\x48\x62\x14\x87\x76\x21\xe5\x99\x0e\xa0\x09\x2e\x14\x0c\x13\x05\xba\xe4\x10\x3e\x15\x46\x24\xcd\xfc\x97\xae\x85\xc2\xcb\x1c\xa7\x63\xf2\x1f\xdb\x05\x03\xb3\xfe\x67\xc3\x86\x94\x86\xcd\x32\x8c\x48\x3d\xea\x1f\x9f\x2b\xef\x27\xdf\xe4\x2b\x1a\xee\xe3\xf7\xf6\xc8\xd1\x3d\xdf\x7a\xf2\x71\x8f\xe2\x9f\xf4\x6e\xf1\xc5\x1b\x3f\x5e\xbd\x75\xaa\x34\x99\x7e\x5e\xd1\xc4\x43\x37\x56\xd5\x1d\xc4\xf3\x14\xd4\xff\x8b\xa9\xda\x27\x5d\x14\x7a\x32\x1b\x73\x3a\x4b\x2b\xaa\xeb\x8a\xb4\xee\x21\xcd\xa1\x58\x8c\xfd\x40\xa1\xe8\xd4\x0b\xf2\xff\x90\x53\x2b\xd8\x70\xd3\x94\x2f\x77\xcc\xf9\xb5\xec\xbd\x43\x5f\x9e\xd9\xd6\x63\x48\xf1\x49\xd1\x00\xf2\xfd\xc5\xcd\x5f\xf4\xcb\xb6\xe6\xfc\xc9\x0f\x92\xdb\x5c\xf1\x58\x0a\x35\x85\xa5\xa0\x44\xf8\xb4\x8c\x64\xd7\x12\x2c\x99\x90\x2c\x4a\x23\x09\xc0\x5a\x71\x2c\x05\x81\x4f\x69\x90\xa3\xa0\x28\x5b\xb2\x48\x0b\x30\xf1\xc5\xe1\xf5\x8c\x8f\x1a\x2f\x7a\x10\x0f\x78\xfb\xda\xe3\xea\x63\xf3\x4d\x98\x3c\xf9\x78\xf6\x2f\x9a\xaf\x59\x36\x66\x6e\xd7\x6b\x33\x46\xd5\xfe\x60\x6f\x92\xe1\xee\x62\x1c\xa8\x06\x83\x5d\x1a\xd2\x06\x0e\x30\xa0\x20\xb0\x38\x16\x84\x2a\xf6\x04\xec\x40\x53\xc4\xb6\x2e\x00\x85\x60\x45\x26\x10\x4c\x59\x89\x41\x1a\x70\xf7\x81\x35\xca\x95\x1c\x9a\xf9\x71\x6d\xe1\xa5\xd3\xa4\x5a\xcb\x5b\xc2\xd2\x6d\x13\x67\x1c\xc9\x79\xb0\xdb\x79\x3e\x47\x7c\x62\x61\xfa\x57\xb7\x13\x73\x4c\xfb\x56\xcc\xf0\x11\x43\x90\xbc\x8c\x5c\x97\xa2\xdd\xc0\x0a\x5c\x52\x41\x66\x10\x22\x09\x52\x4e\xa4\xd0\x98\x63\x65\x02\x52\xba\xcf\xbb\x86\xc5\xfd\x6d\xf6\xf8\xff\xc7\xda\x5f\xb8\x5b\x55\x75\xef\xe3\xf0\x01\x01\x0f\x25\x69\xd0\xd2\x21\x02\xae\xa4\x24\x0f\x02\x02\xd2\x9d\x73\x75\xcc\xd5\x73\xc5\x5c\x82\xc0\x11\x44\x40\x1a\x29\x01\x69\x05\x91\x90\x90\x2e\xe9\x14\x01\x49\x51\x90\x94\x6e\xe9\xf7\xfa\xbc\x9f\x78\x1e\x1e\xf6\xb9\xfc\x5e\xe7\xb7\xff\x83\xb1\xd7\x1e\x35\xc7\xb8\xc7\x7d\xe7\xfd\x7f\x1b\x83\xa7\xa7\x0d\x4a\xb7\xf3\x7f\xfe\x22\x3a\x7e\xcc\xbc\x52\x43\x7e\x68\x9a\x43\xcd\x5b\x78\xd2\x33\x2e\xbd\x52\xb6\xac\x27\x67\xbe\x7e\x60\xf2\x33\x6e\xdd\x8c\xd9\x93\xf6\x3d\xc8\xbc\xc6\x6c\xc2\x5f\x49\x49\x7c\x2c\xaa\x08\x05\x74\xac\x7a\x92\xa4\xea\xc0\x37\x65\x40\xc8\x32\x0d\xe3\x50\x12\x6c\x2a\x90\x78\xca\xa5\x7c\x02\x98\x2a\x62\x3c\x92\xf3\x32\x90\xe8\xfb\xf3\xd4\xd9\xfc\x2d\xd9\x8e\x15\xac\x99\x8b\x5b\x1c\x77\xe6\xd3\x33\xbb\x0c\x2f\xd9\x7d\xf6\xa5\xd9\x27\xaa\xe7\xcc\x5e\x70\xcd\xd7\x65\x93\x4d\x4b\x4d\x93\x64\x48\xb0\x36\x66\x02\x41\x76\x64\x42\xe3\x2c\x45\x08\x34\x53\xe6\x3d\xa4\xc4\x92\xe9\xb9\x96\x45\x28\x36\xb4\xa0\x69\x10\xd0\xc7\x3c\x95\x78\x95\x55\x35\x6b\x45\xfd\x1d\xef\xf5\x2d\xc5\x8f\x6c\x6e\xe9\x55\x26\x5f\x2d\xb5\x20\x2d\x5e\x5e\xd7\xde\xf8\x6d\x9f\x7a\x05\xd6\xbc\x5d\x63\x7b\x72\x13\x8f\x25\xd3\x34\x2d\x13\xff\xd5\xce\x10\xc0\xfb\xff\x9f\x68\x85\xae\xae\x68\x38\x20\x59\x57\x70\xb0\x8f\x0c\x37\xb6\xb5\xd0\xf7\x02\x82\x77\x05\xac\xeb\x09\xf8\x22\xc4\x95\x9c\xf5\xd1\xe7\xfc\xca\x43\x53\x16\x54\xf9\x65\x37\xee\xc3\xaf\x19\xf4\x86\x93\x76\xb5\xea\x89\x39\x37\x72\xcb\x37\xce\x64\x1e\xbe\x99\xd0\x64\xc0\x7b\x3e\xa1\x71\xa4\xab\x3a\x9c\x63\xd2\x02\xcb\x8a\x58\x32\x44\x81\x17\x69\xd7\x61\x3d\x51\x24\x58\x1b\x8a\x91\xec\x38\x2c\x8d\xd4\xd0\x33\x71\x06\x22\x05\xe5\xb6\xe4\xbb\xfd\xb4\xff\x99\x41\x0f\xbe\xa9\x94\x6b\x2f\x5a\xd8\x13\x76\x5f\x7d\xb3\xa7\xf6\xdd\x91\x5a\x9d\xda\xbd\xb6\xa3\xf0\xad\x24\xc3\x41\x2c\x1b\x11\x81\x6b\x53\x21\x81\x28\x97\x30\x2d\x42\x97\x43\xd2\x14\x4c\x4a\x95\x48\x5d\xa6\x6d\x16\x92\xae\x4d\x6b\x84\xe6\x28\x84\x13\x23\x9f\x87\x19\x48\xe8\x6c\xdd\xdb\xed\xea\x6b\x59\xb7\x5e\x69\xd2\xe9\x54\x83\x3f\x1e\xfd\x39\xf9\xc2\x90\x83\x45\xf7\xdc\xd3\xf7\xb7\xac\x71\xbd\xd1\xc6\x0b\x52\xe6\xb9\x98\x13\x3f\xfb\x3d\xa4\x68\x81\x6d\xd8\xa1\x05\x94\x30\xd0\x48\xde\x93\x44\x4d\x76\x10\x36\x38\xd6\x54\x85\x80\x32\x7c\x9a\xa3\x81\x23\x33\x52\x40\x09\xae\xe0\x64\x70\xac\xf2\x6c\xb7\x27\xee\x1f\x74\xf7\xee\xed\x94\xb6\xbb\x0f\xdf\x2f\xd3\xad\x65\xe7\x16\x6c\x95\x61\x72\xb9\xe3\xfd\x94\x03\xb7\xdf\xbd\x91\xf9\xae\x21\x61\x7f\xa6\x58\xbc\x47\x73\xa6\xa2\x50\x3e\x50\x1d\x4e\x8f\x68\xd7\xe5\x00\x65\xbb\xb4\x10\xb3\x36\x61\x70\xaa\x8a\x02\x5f\x46\x04\xeb\x84\x28\x60\x7d\xe2\xdf\xa6\x70\x2f\x98\x5d\xe3\xb3\x7d\x17\xea\x77\x39\xb6\x9b\x5d\xcd\xaf\x39\xb9\xe0\xd8\x98\x01\x8d\x7e\xfe\xfb\x68\xee\x3d\x37\x8e\x0e\x90\xb2\x7e\x79\xe0\x42\xbf\xe4\x36\x3b\xb1\x8e\x34\x4d\x75\x18\x49\x73\x55\x8b\x89\xa0\xe9\x68\x72\xc8\x62\xc9\x0c\x18\xd1\x14\xb0\x1b\x00\xd1\xd3\x2d\xd2\x44\x94\xec\x1a\x94\x83\x35\x3e\x03\xa1\xcf\x1a\xf5\x6f\x8d\x9b\x99\xd6\xaf\xe2\x96\x6f\x4b\x3d\xad\xff\xb0\x59\x81\x86\xfb\x76\x1c\x7e\xd4\xa3\xf1\xc4\x9a\xe1\x37\xeb\x83\x3e\x35\x33\xdf\x56\x26\x7c\xfe\xd3\xa1\xcd\x4b\x86\x12\x69\x3a\x32\x08\xec\x59\x14\x25\xda\xb4\x1d\x31\x3c\xb6\x6d\x9f\x70\x2d\x11\xc4\x16\x63\x50\xb6\x19\x13\x92\xa7\xc7\x0e\xf6\xe0\x4b\x88\xea\x7f\x5a\x04\xa6\xa7\xa5\xe6\x1a\x90\xf5\x45\x44\xf5\x57\x8b\x7f\x1b\xfe\xb8\xee\x29\xfa\xe8\x8f\xdf\x55\x6e\xb6\x3d\x47\xba\x71\xee\x76\xcb\xf4\x31\x4d\x2b\x6a\x1d\xe6\x9d\xf9\x7d\x43\xf9\xd2\xc9\x0d\x85\xd8\x8f\x05\x42\x86\xa4\x6a\x06\x1e\xe3\x7a\x94\x6a\x1b\x8e\xa0\x7a\xbe\xc4\xba\x22\xf6\x78\xc9\x0b\x35\xcb\x05\x56\x20\x49\x9c\x08\x65\xd9\xf7\x33\xba\xdb\xe2\x95\xec\xfb\xf2\x3d\xbe\x92\x6b\x51\xee\x13\x67\xef\x57\xa9\xdf\x6b\xd9\xb0\x35\x43\xd2\x9f\xcd\xa8\xf4\x7e\x8f\xa5\x25\xcf\x53\x35\xcf\x26\xd7\x6c\x3d\xd6\x22\xd3\x0d\x45\x97\x93\x10\x27\x9b\x86\x19\xf8\xd8\x22\xf4\xc8\xd2\x80\x44\x90\xaa\x22\xd2\xb6\x29\xb2\x94\x4f\x90\x1a\x21\x06\x14\x19\x11\x7a\x62\xb3\xa7\xbe\xd6\xf6\x3e\xf5\xc5\x99\x96\xa9\xdd\xef\x7c\x76\xa9\xed\xb5\xc6\xad\x1b\xd7\xac\x95\x7d\x5a\xa1\x6b\x7f\x1d\x21\x6f\x14\xbe\xa4\x65\x7e\x8e\x9e\x18\xd4\xe5\x07\x66\x8c\x79\x1d\xc9\x94\x19\x8a\xae\x29\x71\x90\x8f\x09\xdd\x74\x2c\xcd\x10\x79\x20\x78\x2e\x66\x85\x30\xf0\x5c\x9d\x93\x70\x00\x22\xc5\xc9\x40\x04\xeb\xc6\x93\x3a\xeb\x7b\x6c\xdb\xbd\x7d\xae\xf8\x67\xbd\x53\xf3\xf3\x3d\xab\xb5\x72\xc9\x94\x2f\xfe\x6a\x75\x22\x18\x50\x25\x9f\xf7\xe8\xb8\x9c\x64\xde\xdd\x58\xd0\x23\x4c\x39\x31\x84\x6e\x4c\xfb\x28\x86\x00\x53\x1c\xa2\x4c\x5a\x65\x83\x50\xb2\x18\x17\x87\x16\x29\x11\xa2\x11\x06\x62\xe8\x63\xe0\x70\x19\x38\xc9\x27\x4f\xa8\x55\xdf\x15\x9c\xbd\xbd\xf2\xe0\xb4\x16\xcf\x5f\x39\x4d\xce\x99\xfd\x7b\xc3\xae\x8d\x07\xaf\xde\xbb\xa1\xce\x89\x8d\xb7\x32\xcf\x1b\x95\x30\x82\x49\xc5\x12\x01\x86\xb1\xa2\x11\x2e\x69\xdb\x4c\xe4\xd1\xba\x8d\x68\x5f\x82\x41\xac\x90\x32\xc1\xe2\x58\xe1\x10\x26\x08\x86\x44\x12\xe6\x39\x42\x75\x52\xfe\x53\xfe\xf9\x9f\xd6\xc5\xe9\x69\xaf\xa4\xbc\xf2\x1f\x88\xea\x2a\xd9\x37\x8f\xe8\x0d\x0b\x3c\x9f\xf4\x91\x5b\xf2\x58\x4a\xfb\x93\xdb\xbf\x99\x62\xec\xcf\xd5\x69\xc4\xd5\x26\x33\x17\xbc\xd7\xbd\xf4\x2f\xc9\xad\xc1\x2a\x30\x09\x21\xe2\x54\x4e\xf4\x25\xde\xb6\x7c\x47\xe1\x29\x3b\x76\x54\x81\x76\xcc\xc8\x62\x69\xc2\x8e\xa2\xc8\x8c\x45\x41\x88\x5c\x51\x84\xac\xe9\x4a\x89\x7d\xea\x68\xde\xca\xdb\x52\xfd\x26\xd3\x7e\x0a\x9a\xbc\x5d\x4e\xa4\xea\xad\x2d\xc1\x7f\xc7\x5f\x9f\xd9\x81\x2d\x5f\x7f\x7d\xee\x29\x53\x2b\x25\x37\x82\x03\x22\x66\xd4\x88\x53\x42\x5b\xb7\x38\xc7\xb6\x91\x07\x19\xc6\x95\xd4\x40\x37\x50\x64\x0a\x61\x48\x87\x2e\x40\x3c\x60\x42\x1a\xf2\xb6\x46\x9a\x9a\x9f\xd8\xa7\xb8\x83\x2b\xd4\xe2\x31\x3e\xd8\xf6\xc2\x98\x37\x86\x16\x49\xdd\x3f\xa5\xd7\x9d\x11\xf9\xd7\x58\xfe\xad\x87\xbb\xaf\x9c\x2a\x52\x29\xb9\xf8\x75\x4e\x8c\x31\xd6\x01\x6b\xc6\xbe\x6b\xf3\x50\xd0\xe9\x50\x10\x62\x25\x08\x24\x87\x89\x54\x4d\x35\x02\x52\xf4\x44\x36\x72\x08\xcd\x66\x09\x5b\x96\x25\x8c\x12\xd7\xe0\x4e\x6d\xbe\xfc\x30\xfb\xf4\xc7\x1d\xce\xbf\xd1\xa8\xce\xf1\x7e\x03\x06\x8d\xbb\xf2\x79\xb5\x1c\x25\xff\x6c\xd1\x7a\x54\x3c\xfa\xf0\xb0\xd7\x7b\x25\x79\xeb\x6e\xb1\x52\x44\x07\xac\xcb\xba\x8c\x26\x30\x3e\x40\x04\x2f\x59\x50\x14\x39\x29\x12\x23\xd5\xf3\x14\xd1\x8f\x4c\x2c\x51\x9a\x18\x18\x9c\x06\x19\xf7\x5f\x8c\xf0\xff\x3b\x70\xf8\x27\x2c\x44\x7a\xe3\x72\x0d\x06\xbc\x18\x09\x63\x4f\x34\x38\x36\xfc\xcc\x71\xa9\x52\xca\xfc\x11\xef\x15\x69\xb7\xee\xbd\xc6\x8d\x2f\x17\xad\x3e\xbe\xec\xf8\x81\xb0\x87\xb8\xa4\x7e\xe6\x81\x55\x89\xd9\x4b\x4c\x18\xaa\x94\x1d\x69\x1c\x1d\xe9\x36\x49\x03\x49\x33\x64\x97\x22\xb0\x48\x43\xc9\xe2\x1d\xd3\x37\x49\x05\x5a\x22\x36\xb0\xe9\xe9\x0e\x34\x63\x27\xf1\x7f\x73\x74\x16\xbf\xbb\x0e\xf3\x4e\xae\xce\x0d\x85\xf7\x37\xe5\xda\xff\x98\x20\xd6\x8f\xaa\xcd\xa7\x6f\x3b\x15\xbe\x3b\x7f\x78\xd9\xc5\xb3\x93\x7c\x9d\x4b\x30\xac\x08\x08\x40\x68\x64\x8c\x42\x32\x66\x03\x41\x81\x06\x15\x5a\xb1\x18\xe9\xba\x08\x48\xc3\xf6\x55\x0e\x89\x40\xa7\x80\xe8\x06\xa1\x85\x32\x18\x38\x1c\xfb\x6b\xf2\xb3\xf1\xe5\x6e\x1f\xd8\x30\x20\xaa\xbf\xe6\xb7\xb1\x53\x67\x94\xdd\x3f\xf6\xcd\xa6\xcd\x97\x4c\x6e\x5c\x23\xcb\x99\xd1\x13\x3a\x26\xb9\xf7\xf7\x43\x83\x71\x74\xca\xd4\x0d\x6c\xbb\x48\x74\x74\x01\x22\x88\x48\xd2\x14\x05\x3f\x0a\x11\xcb\x1b\xd8\x51\x0d\x8b\xf6\x30\x47\x8b\x1e\xc1\xb8\x4a\x62\xb3\xe7\x2c\xfe\x74\xe1\xee\xe9\xbf\x37\x3c\x51\x36\x5b\x0a\x7c\xbc\xd4\x7a\x63\x70\xda\xea\x81\x9d\x97\x0a\x39\x6a\x4d\xfb\x4b\xc9\x5e\x27\xc9\x07\x28\x36\x2d\x90\xaa\xa1\x84\xb1\xc8\x60\xcf\x61\x5d\x89\x16\x50\x10\x47\xae\xee\xd3\x06\x67\x85\x9e\x2b\xf0\xb6\x0b\x69\x08\x3c\x07\x91\x3e\x63\x01\x68\xbd\x54\x14\xfe\x69\x53\x9f\x9e\x56\x29\xa5\x41\xfe\x17\x43\x61\x78\x9d\x3a\xa3\x7f\xfc\xfb\x68\xda\xa0\xd1\x85\x2e\xf7\xe9\xb2\xad\xec\xec\x57\x53\x7e\x7b\x62\x94\xec\xe7\xce\x3c\xfb\xe4\xc3\xef\xd2\x92\x4b\xe4\xc7\x89\x81\xca\x5a\x06\x01\x64\xc4\xf3\x08\xc9\xc0\x95\xe5\xc0\x95\xf4\xc8\x08\x84\x10\x00\xcc\x91\x9e\xac\x91\xbe\x61\x59\x22\x05\x14\x14\x23\x05\xe0\xc4\x7f\xce\xae\x8a\x07\xab\x9f\x5f\xde\xef\xf6\x27\x0d\x2a\xee\x39\xb7\xc0\x71\xbb\xdc\x3a\xd9\x62\x4a\xc7\x92\xf3\x66\xbd\x93\x7b\xea\x9c\x1f\xde\xcf\x7c\x51\x48\x98\x5d\x21\xa7\xcb\x0c\x60\x64\xcd\xe4\x45\x13\x85\x14\x67\xba\x2a\x19\x21\x59\xa7\x09\xc5\x27\x45\x5f\xa0\x08\x59\x0c\x78\x40\xd2\x22\xef\x42\xd9\x17\x33\xa2\x4d\xfa\x85\x40\x13\xe6\xbe\x81\x3e\x7b\xef\xab\x37\xd3\x5a\x77\xfb\x63\xcf\x96\x39\x13\xdb\x7e\x73\x6e\xcb\xc8\x27\x45\xd7\xb0\xc3\xd6\x4e\x4f\x32\x6c\x25\xb0\x11\x6b\x79\x82\x25\x23\x43\x06\x9c\x61\x19\xa1\xe5\x23\xc5\x42\x3e\x24\x59\x49\xa7\x55\xc8\x07\x51\x10\xca\xaa\x80\xb0\xac\xb8\x20\x10\xfe\x4d\x24\xe7\x05\xb3\xe7\xa6\xf4\x1c\x39\x07\x7f\xd1\x6a\x7b\xc7\x87\xcf\x0c\x7b\xcc\xf6\x7e\x3d\x66\xac\xd9\x5c\xbe\xb1\xfa\x5a\xc3\x35\x7e\xea\xeb\x79\x72\x27\x37\x14\xa0\xef\xca\x8c\x63\x48\x80\x64\x54\x53\xf2\x29\x00\x2c\xda\xa5\x30\xa9\x04\x0a\xf2\x2d\x5e\xd5\x58\xc9\x66\x24\x97\x91\x44\x9f\x10\x28\x07\xbb\xfa\xbf\x8a\xc2\xf3\xe6\xff\x73\x91\x38\xec\xe6\x57\xe0\xd3\x52\xb9\x0b\x7e\x2b\xfd\xfc\xc1\xfc\x65\x33\xb8\xfa\x1f\x95\x12\x3f\x29\xdb\xe0\xf1\xe4\x6f\xbf\x3e\x50\x0f\x34\x48\x4f\x7b\xfe\xfc\xf9\xf3\x49\x6f\xbf\x08\x75\x69\xf4\x53\xd9\x13\xcf\xf3\x17\xcb\x6a\x1c\x18\x7e\x6c\x78\xd6\x67\x03\xde\x3d\x51\xe2\x07\xba\xf7\x88\x3d\x3b\xb7\xe6\xbf\x79\xd8\xab\x75\xee\x85\x55\xd3\x3b\x3f\xa7\x57\xb9\x91\x63\xc1\xef\x15\x2a\xd4\x27\x8e\xcf\xb8\x57\x24\x17\xdb\xb2\xf6\xf5\x8b\x8f\x4e\x1a\xd5\x9e\xdc\xb2\xfb\xfd\x91\x79\xed\x94\xc4\x1b\x32\x48\x29\x8c\x61\x28\x32\x30\x0d\x55\xd4\x24\xc9\x51\x0d\x18\x62\x36\x94\x08\xc7\x8c\x43\x93\x15\x2d\xc1\xa2\x62\x41\xf3\xf8\xd8\x82\x8e\x6b\x70\x09\x56\x4d\x3f\xde\x1a\x5f\xef\xdc\xf1\xd4\xc9\xe5\xa4\xe7\x6f\xe5\xbc\xd8\x6b\x75\xde\xed\xe7\x16\x66\x9f\x74\x7b\x29\x68\x56\xe4\x6a\xf6\x9f\xaa\x25\x57\x0d\x0b\x50\x2e\xab\xf1\x3a\xcb\x91\x06\x21\xd9\x21\x15\xab\x1c\x49\x31\xa1\x45\x06\x9c\x62\x2b\x48\x0c\x80\x6b\x3b\x1e\x15\x79\x91\xc7\x78\x28\x22\xf8\x90\xa3\x5f\x5e\x80\x5c\x19\xf4\xdd\xfd\x1b\x05\xc5\x94\xca\xcd\x2b\x6d\x19\x59\x79\x49\xf7\xe5\x2b\xfa\x15\x2d\x32\x25\x18\x39\xe0\xd8\xdc\xd2\xd4\x9a\xfb\x99\x77\xbd\x84\x2f\x0a\x20\x04\xa6\x17\xc6\x12\x11\xa0\x98\xf5\x63\x2f\x16\x80\xa6\x44\x22\x42\x22\x1f\x38\x04\xc0\xa6\x12\x06\x16\x1d\x0a\xae\xc0\xd2\x02\x27\x61\x01\x66\x70\xa3\x59\xe5\xbd\x37\x5d\x20\x8f\xa0\xec\x77\x37\xa2\x36\x1d\x47\x0e\x4b\xad\xb0\xa4\x42\xe9\x63\x13\x0e\xa6\x57\x2b\x9b\xad\xdd\xde\x37\xfb\x26\x39\xd0\x3d\x43\x67\x7d\x9a\xd2\x55\x0b\x7b\xa4\xe6\xf8\x84\xa2\x88\x9c\xef\x46\x90\x89\x44\x47\x35\x62\x2f\xf4\x2d\xdd\xd2\x3d\x99\xc3\x74\x04\xa3\x10\xaa\x89\x07\xa2\x75\x8b\xfa\x9b\x4e\xbf\xd5\x28\x7f\xa5\x05\x07\x72\xe4\xee\x3f\xb3\xf9\xb4\x55\x45\x36\xec\x2c\x78\x4a\x2a\x37\x6f\xf3\xf8\x05\x4d\x2e\x7d\x92\x64\x30\xb6\xab\xc7\x12\x47\xf8\x11\xed\xba\x24\xe3\xf3\x5e\x88\xb0\x6e\xc8\x42\x60\x80\x80\x25\xdd\x10\x48\x4a\x6c\x21\x2c\x72\xd0\x10\x6c\x97\xd4\x54\x87\x7e\xd9\xa7\xef\x4f\x28\x30\xb7\x7d\xdd\x63\x45\xae\xf6\xa9\xf6\x43\x95\x03\x85\x8e\x57\x9e\x58\xa1\xe4\x64\xaa\xca\xfd\x47\x0b\x9e\x67\x51\xd3\xbf\x48\xae\x6a\x2b\x67\xba\x90\x8b\x42\x2a\xb4\x31\xe5\x42\x96\x42\xb1\xed\xfb\x18\x7b\x66\x14\x39\x01\x96\x0d\x96\x90\x34\x93\x0f\x03\xa4\x4b\x7a\x40\x4b\x1c\x23\xbe\xc8\xbf\xf5\xaf\xec\x31\xe4\x52\xf9\x9c\x41\x9b\x3c\xe7\x98\xf2\xf5\x97\x37\xab\xf4\xce\xcf\x2d\x3b\x51\x83\x73\xbd\x69\xa6\x4c\xe8\x75\x7a\x69\x7a\xfe\x7e\x49\xae\xbb\x96\x8b\x69\x3e\x0a\x1d\x46\xe6\x21\x30\x5c\xc7\x56\xd4\x38\x90\x18\x46\x93\xa5\xc0\xb3\x74\x15\xd3\x58\xd5\x02\xdf\x25\x25\xc8\xb9\x2e\x96\xc0\xbf\xdd\xc7\xfd\x9f\xc9\x67\xcf\x0c\x3e\x5a\x36\xf5\xe9\xd6\xad\xbf\x55\xdc\x99\xbe\x6e\x40\xbf\xcd\xaf\xfb\x23\x98\x83\x5b\x2f\xfe\x7c\xea\xab\x53\x57\xbe\xfe\xf4\x78\x72\x13\x1e\x13\x11\x1e\x11\x31\xbc\x1b\x1a\x24\xab\xe3\x40\xb2\x44\x4d\x05\x3c\x65\x59\x40\x08\x85\x48\xa6\x85\xd8\x24\x30\xa9\xf1\x04\x12\x49\x1d\x92\xba\xc7\xbe\xec\x1c\x0f\xfa\xb7\xfd\xae\x43\x11\xa6\xda\xf5\x15\x37\x2d\xfd\xca\xf2\x92\x39\xfe\xfe\xa1\xf9\x03\x54\xf7\xee\xd4\xf4\x61\x95\x89\x5a\x6f\x5e\x49\x32\x48\x8e\x71\x2c\x9e\x13\x24\xc5\x09\x08\x2a\xc0\x31\x2d\x87\xae\x85\xb0\xa4\xab\x9e\x4d\x52\xaa\xa5\xd3\x50\x33\x64\x81\x74\x34\x93\x26\xb9\x80\x90\x32\x9a\x47\xbc\x92\xbd\xe2\xd0\xbe\x0f\x98\xce\xfd\xcf\x6f\x6d\xf8\xd7\xa9\xef\x9f\xcd\xee\x7f\x76\x67\xee\x26\xe5\x0f\xed\x09\x2a\xf1\xa3\xbc\xe9\x67\x92\xcc\x5e\x40\x41\x9d\x76\x09\xa8\xbb\xa4\x85\xc5\x98\xa6\x54\x5b\xd7\x03\x3b\xa2\x25\x9b\x16\x82\x88\x16\x49\x02\x28\x90\x8b\x39\x47\xa6\x00\xa0\x54\x05\x07\x89\xf7\xeb\x5b\x5e\xb3\x46\xab\x73\x86\x44\xca\x5e\xa2\x41\x6a\xf1\xf1\xca\xae\xf6\x7f\xbe\x53\x7e\xc4\xd9\x7a\x61\x8d\xa1\xb3\x4e\x54\xae\x95\x79\xf9\xa2\x84\x49\x2f\x0a\x69\x53\xc1\xbe\x0a\x04\x4d\xe0\x21\x27\x01\x8a\xb6\x25\x29\x34\x0d\xd1\x34\x91\xcd\x1a\x02\x47\x28\x3a\x32\x3c\xc7\x35\x95\x38\x8e\x2c\x3a\x91\x30\xdd\x1f\xc3\xdb\xef\x1e\x7b\xbe\xca\xce\x56\xf9\x3e\x9c\xf3\xe1\xd8\xb5\xe5\xd6\x5e\xb7\x53\xb2\x8c\xcf\x57\xe5\xc8\x98\xc7\x0f\xd2\xde\xad\x9d\x64\x9a\x62\x4e\x04\x80\xd6\x25\x9f\x34\x5c\x23\x94\x89\x80\x22\x6d\x41\x66\x7c\x4b\xe4\x0d\x52\x64\x18\x3d\xe6\x6d\xd7\x91\x49\xce\xe3\x49\x5e\x71\x28\x87\x06\x6c\x62\xf8\x73\xc1\x6d\x0b\x2a\xee\x00\xc3\x82\xee\xed\x3b\x8f\xb7\x39\xb6\x5d\xdf\xce\x63\x3e\x99\x44\xbe\xbd\xc3\xed\xfa\xc1\xbb\xe7\xab\xa7\x67\x5e\x3c\x39\x61\x28\x8a\x91\xab\x90\xa2\x09\x43\xdb\x51\xb5\x08\x01\x8e\xd5\x24\x35\x80\xaa\xef\x98\x94\xcd\xf0\x2e\x23\x91\x50\x70\x1d\x6c\xb3\x80\x33\xb0\xe0\x11\x44\x02\xa0\x79\xb5\x99\x59\xb3\x8d\x2a\x7d\xe7\x8f\x7e\x07\xbb\x94\x54\xc7\x9b\x95\xae\xb4\x7f\x86\xf2\x76\xf8\xc6\x3a\xbb\xda\x9f\x5b\xf9\x2d\xdc\x28\xb9\xce\xa1\x9b\x2e\xa0\x49\x5b\x67\x0c\x1e\x60\xde\x06\x1e\x17\xf8\x12\x0a\xcc\x48\x50\x14\x1d\x1b\x32\xf6\xac\x88\x92\x01\x12\x44\x11\x46\xc0\x53\x2d\xf0\xef\x7a\x7a\xff\x96\xa7\x0b\x7c\xbd\x6a\x7f\x9e\x25\xfd\x66\xe1\xd9\x2d\x8f\x8c\x07\x79\xf6\xf4\xec\x53\xba\x54\xc9\xc9\xad\xe7\xe7\xf8\x53\x9e\xef\xfd\x3d\x61\x61\x92\xf1\xaa\x40\x31\x81\x82\xe8\x88\x61\x54\x80\xb0\x14\x93\x0c\x96\xbd\x58\x8a\x39\x5d\x30\x14\x9f\xc1\xa6\xaa\x21\xd7\x20\x49\xcb\xa0\x49\x1a\x9b\xba\x1e\xbc\x0c\x47\x9c\xbf\xa2\xd5\xd8\xc6\x37\x8c\xe1\xdf\x54\x3b\x73\xf8\xf2\xdb\x77\x6a\x74\x9a\xfc\x7a\xc9\x35\x8d\x7e\x19\x38\x44\x8a\x47\xd7\xbf\x7e\x61\x40\x72\x7d\x5a\xf2\x2c\xd7\x89\x35\x68\x41\x12\x03\xa4\xba\x96\xca\x6b\x11\x96\x28\x5a\xb6\x15\xdf\x86\xa6\x81\x42\x99\x51\x3d\xc1\x10\x75\x4d\x91\x1c\x45\x4a\xa4\xcd\x71\x72\xd7\xb0\x19\x76\xb6\xc6\xb3\xe7\xe4\xe9\xd3\xfd\x58\xf1\xc6\x2b\x4a\xd4\x34\x2f\x74\x1b\x37\x7c\x4f\x97\x42\x7d\x0b\xe5\x2d\x3d\x22\xf3\xed\x52\x62\xb2\x07\x49\x53\x05\x11\xd3\xb4\xab\xca\xd8\x76\x24\x3d\x32\x0d\xdd\x73\xbd\x98\xd0\x34\x20\xf2\x82\x0f\x7d\x0b\x92\x14\x61\x49\x86\xaf\x99\xbc\x19\x73\x19\xc8\xcc\xd5\x5a\x9f\xab\x09\xde\x56\xb6\x23\x10\x3a\x67\xa7\xc7\xbd\x77\x76\xff\x26\x34\x1b\x7d\x7d\xbc\x4c\xcf\xa1\x25\x66\x94\x6f\x7f\xe6\xb3\xe4\xfa\x34\x8d\x45\xc2\xf4\x62\x81\xd0\x75\x07\x7b\x56\xc0\xa9\x50\xb2\xf5\xd8\xb2\x64\x45\xa1\x49\x9a\x24\x75\x9a\x88\x3c\x13\x9a\x11\x6f\x89\x0c\x54\x02\xcc\x25\xee\xf2\x44\xa9\x73\x96\xdf\xa8\x9c\x45\xbb\xaf\xb2\x1b\xa6\xee\x1f\xba\xb4\xd0\xe8\xa5\xc3\x07\x74\x1b\x34\x20\x6b\x47\xaf\x6d\xe4\x9e\xf8\x26\xb9\xbd\x07\x4d\x3a\xba\x60\x2b\xae\xe2\x99\x8a\xc8\x90\x8c\xce\x51\x12\xaf\x48\x40\x10\x55\xca\x07\x34\x50\x63\x56\x8e\x28\xdb\x55\x7d\x1d\x51\x9e\x8f\x43\x90\x40\x8d\x73\xfe\xec\x86\x39\xde\xcf\x7f\x51\x9c\x74\xea\x1a\x63\xcf\xf8\xea\xfc\xcd\x01\x59\x0f\x37\x98\x9d\xba\x63\xdb\xa1\xfa\x7a\x87\x95\x29\x99\xbf\x95\x4d\xcc\x82\xcf\x87\x96\x20\x41\x22\x52\x3c\xce\xd7\x7c\x68\x45\xa6\xa5\x4b\xac\x4d\x49\x56\x20\xcb\x12\xad\xb0\x16\xa1\xd8\x7a\x18\x72\xae\x1c\x78\xa1\xe8\x23\x37\x71\x45\xec\xb8\xad\xd9\xb4\xe1\xd7\xf3\xe5\xe4\xf7\x1e\x2b\x53\x6e\x7e\xdc\x71\xdd\x93\x1d\x55\x1b\x77\xbf\x35\xe3\xca\xd9\xdb\xc7\x95\xc1\x5c\x92\x27\x76\xba\x18\x87\xba\xe2\xf1\x80\xa0\x62\x5d\xb2\x58\xd5\xa7\x4d\x82\x13\x58\x40\x21\xd1\x91\x23\xcd\x88\x38\x4d\xa5\x1c\xd3\x0d\xa2\x80\xc2\xaa\xac\x39\x09\x10\x67\x9b\x3f\xaa\xf7\xd6\xdb\x35\x17\xf4\xa8\xc7\x54\xaa\xdb\x52\xfc\xb5\x46\xef\x4e\x1f\xf7\xff\x2d\x07\x65\xcf\x7b\x45\x5f\x3b\x31\xa7\x95\x5c\x41\x22\x00\x7c\x4f\x30\x7c\x0b\x12\x3c\x07\x01\x11\x4b\x96\xc8\x1a\x34\x6f\x59\x81\x1d\x06\x32\xcf\x51\xa6\x6f\x88\x6e\x68\x02\x97\x55\x01\x6b\x68\x8c\x87\xb5\xc4\x2d\xd3\xc3\x85\x37\xe7\x96\x1a\xff\xec\xd4\xee\x7b\xa7\x07\x8f\x80\x69\x69\xcd\x8d\xf7\x46\x36\x58\xb7\x6f\xcf\xa9\x27\x9f\x05\xf3\x57\xb6\x4a\x2e\x06\x9b\xb3\x34\x89\x10\x7c\x4d\xb2\x35\xd7\x74\x24\x57\x64\x24\x9f\xb1\x5d\xe8\x93\xb1\x47\xeb\x36\x8d\xe5\x48\x44\x31\xf2\xec\xc8\x0c\x65\xc9\xa3\xe2\xff\x21\xc5\x49\x40\x17\xf3\xf3\x3c\xb2\xc8\x86\x7c\x55\xf5\xd2\x73\xbf\xec\x67\xd8\x67\x5a\x4e\x2f\x31\xa2\xc9\xb8\xc6\xaf\xec\x69\xf1\xfa\xe8\x73\x66\xde\xcc\x5f\x26\x27\xe6\x88\x0f\x79\x51\x13\x80\x8c\x48\xd7\x8a\x25\xc7\x57\x43\x39\x14\x7c\x85\x74\x35\x03\x07\x54\x14\x79\xb6\xea\x86\x82\x4a\x18\x96\x17\xf2\x8c\xab\xb3\x58\x4a\x5c\x15\x6b\xad\xba\x3e\xb2\xcf\x9e\x57\x3e\x9c\xba\x68\xe3\xc9\x35\x97\x7b\xaf\xc9\xb9\x6b\xbc\x39\x77\x6f\xbb\xc6\xd5\xf3\xf5\x39\x74\x2a\x7d\x72\xb9\x24\x3f\x05\x10\xa1\xa9\xa6\x81\x18\x82\xd3\xfd\xd8\xc1\x82\x86\x75\xce\x61\x7d\x91\xe4\x34\xc9\x17\x91\xe3\xfb\x4a\x20\xc9\x9c\x62\x47\xa2\xc3\x42\x14\x21\xf5\xe5\x12\xb3\x73\xcc\xf5\xb3\x35\x4e\xa6\xf5\x98\xe1\x7f\xde\xbb\xcb\xd6\x3a\x9f\xf4\xac\xf1\xb0\x64\xe7\xf6\x6b\x67\x1e\x5f\xf9\x71\xbd\xf9\xed\xf6\x64\x7e\x4b\x9f\xb0\x2a\x12\x31\xd4\x1c\x2c\xe9\x11\xe9\x21\xa8\x68\x8c\x46\x86\x80\xb2\x54\x47\xe2\x5d\x8d\xd5\x62\x8f\x93\xa1\x29\x78\x26\x44\x8e\x03\x14\x4e\xf4\xa3\x44\xa2\xf2\xbf\x8f\xfc\xb1\x2e\xdb\x41\x3e\x87\xfd\x3a\x6e\xa9\x5a\xcd\x0a\x2e\x7d\x6d\x66\xed\xba\x2b\x56\xcc\x39\xb9\xc6\xa0\xb6\x7e\x3f\x2b\x48\x6e\x55\x94\x55\x06\x06\x5c\x40\x2a\x26\x19\x30\x18\xd1\x90\xf5\x39\xd6\xf4\x1d\xc3\x56\x23\xe8\x3b\x16\x49\x4a\x1c\xed\x08\x3c\x87\x2c\xd3\x40\x84\x03\x5d\x9c\xf8\xae\xa0\x7a\xa3\xbf\xb8\x0d\xc0\x1a\x54\x36\xbd\x61\x97\xe6\x7b\xda\xbb\x6d\x7e\x7c\xb7\x7b\xc8\x7e\xd1\xe5\xfd\x57\x97\xfc\xa4\x0e\x7c\x35\xc9\x42\x5b\x86\x17\xb9\x08\xf2\x81\x4c\x52\x2e\xa0\x05\x06\xa9\x86\xee\x92\xa2\xa3\x33\xbe\xef\x70\x21\x15\xc5\x96\x65\xc8\x94\xa6\x9b\x3a\x46\xaa\x2a\x93\x2a\x78\xb9\x65\x1a\xbe\x72\x61\x87\x66\x95\xe7\xd5\xfc\xf2\xf6\x95\x01\x07\xcf\x8e\xbf\xd1\x9b\x6c\x38\xfe\xdd\x95\xb9\x2a\x7d\xf2\x76\xeb\x4d\xb7\x3b\x0f\xcd\xfc\x6a\x34\x31\x97\x2e\x0b\x3c\x13\x48\xa2\xcf\x31\x92\x24\xfb\x34\xe9\x87\x7c\x6c\xba\xb4\x89\x34\x4d\x23\x64\x96\x27\x19\x4d\xb5\x80\x48\xfa\xa6\xc7\x99\xb1\x27\x24\x3a\x85\x58\xf1\xa7\x9d\xe7\x6a\xa1\xf5\xed\x4f\xc6\x67\x06\x4e\xbd\xd7\xab\xd6\xc1\xa3\x4e\x11\xe2\x6d\xa1\xcf\xdd\xf4\x2f\x9f\xdf\x5b\xb2\xcb\x4e\xee\x57\xa6\xa1\x87\x4d\x19\x88\x8e\x4f\xe9\x82\x40\x32\xae\xce\x48\x82\xaf\x04\x71\xc4\x13\x8e\xcd\x00\xc8\x2a\xc8\xf3\x0d\xc5\xe6\x02\x55\x74\x18\x59\xe4\x99\xc4\x15\x31\x47\x8d\x60\xb0\x79\xfa\xf3\x9a\xf9\x4b\xbd\x3f\xf4\xe2\x28\xa6\xc0\xe0\x9c\x8d\x36\x8d\x99\x54\x7e\xca\x2f\x07\xce\xdd\x5b\xf7\xe8\xcf\xd1\xc9\x4d\x78\x32\x69\x1a\x3e\xa9\xc9\x5a\x44\x21\x92\x8a\x55\xcf\xe6\x59\x56\x27\xc8\x58\xa7\x63\xd1\x64\x34\x5a\xa6\x04\x31\xf6\x1d\x42\xf0\x4d\x8e\x12\x2c\xd6\x49\x80\x76\x9f\xda\xb0\xcd\xb0\x0f\x76\xb7\xe8\x3c\xbe\xbd\xd7\x7a\xca\xd7\x6b\x4f\x2d\x87\xaf\xad\x7c\x38\xb9\xd3\xf5\x8e\x1d\x6a\x9e\x5f\x98\x6b\x60\x72\x4f\x64\xb9\xd8\x14\x25\x21\xe0\x38\x8e\x03\xa4\x48\xa0\x50\xa3\x81\x1b\x8b\x24\x4f\xd1\x58\x26\xa2\xc8\x71\x31\x11\xbb\x1a\xa3\x38\x8a\xe5\x03\xcd\x00\x5a\xcc\x26\xae\x88\x32\xd6\xf6\x4c\xd8\xe5\x7e\xdd\x61\x55\x4a\xbb\x52\x65\xcb\xe6\xbc\xb9\xef\xfb\x77\xf7\x66\x15\x8b\xf5\xe9\x72\x66\xe2\x82\x8e\x8f\xf3\x24\x7b\x30\x16\x78\xb4\x48\x4a\x38\x8e\x75\x23\xd6\x24\x4e\x27\x75\x9d\xa0\x75\x99\x04\x11\xd6\x2d\x81\x66\x45\xc5\xc5\x90\xb2\x18\xe4\xcb\x41\xa4\xdb\x2f\xf2\x43\xff\x2b\x7b\xbc\x77\xbc\x39\x2e\x55\x66\xe9\xe8\xd6\xb5\xd1\xee\x7c\xfb\xce\x28\x67\x94\x5f\xe2\xb3\x4d\xce\x74\x79\xd4\xf4\xcb\xe2\xab\xd6\x2e\xf8\x3b\xb9\x2d\x93\x43\x49\x98\x8f\x9c\xc8\x25\x83\x08\x86\x2e\x17\x84\xb2\xeb\x1a\x2c\x85\x38\x46\x91\x22\xc4\xba\x31\xc9\xf9\xaa\x60\x32\x88\x16\x91\x2e\xb8\xa4\x9e\x60\x30\xd6\x9c\xde\x74\x91\x7d\xeb\xeb\x6d\x5d\xf3\x1e\x5d\xfe\x45\xb1\xa6\x4a\xbd\x67\x73\xa7\x15\x2f\xae\xa4\xa5\xdd\x6e\xd6\xcd\x99\xb6\xe0\x69\x92\x1f\x5c\xb2\x4e\x73\x7e\x24\xfa\x22\xcb\x7a\xbe\xc7\xe8\x02\xa7\x29\x9a\xef\xc6\xb2\x27\xb3\x34\x45\x46\x04\x96\x78\x26\x10\x55\xa4\x08\xa1\x41\x68\xf0\xbf\x55\x25\x5e\xcc\x1e\x6d\x0b\x7e\x36\xe6\xfb\x81\xe7\xeb\x0a\x9d\x8c\x99\x85\xba\x3f\x0e\xe8\x5e\xe7\x46\x7e\xbb\xf1\xc1\xc8\x7b\xc3\x46\x0e\xdc\xd5\xff\x6e\x99\xe4\x86\x21\xc1\x90\x9a\x4c\x7a\x32\x81\x28\xc3\x73\x81\x8b\x2c\xda\xb4\x6d\xd5\xf3\x3c\x17\xbb\x3c\xe7\x41\x45\x67\x42\x45\xb4\x51\x14\x79\xa4\x28\xd8\x82\x6b\x26\x7e\xb9\x14\x9c\xf0\xd3\x1a\x2b\x5b\xb6\xf8\xf9\xb4\x15\x8d\x77\x0d\x9f\x98\x7e\xf8\xd7\x78\x47\x5a\xe9\xea\x43\x52\xea\xbf\xb3\xad\x7f\x9f\xcf\x5a\x27\xb7\xef\x08\x05\x23\xc0\x62\xc4\x59\x44\x68\x68\xba\xed\x69\x61\x44\xb2\x61\x6c\xda\xa4\x48\x10\x2e\xab\x89\x62\x68\x09\x04\x86\xb6\x40\x4b\x56\xc0\xeb\x26\x20\x5f\xfe\xd2\xad\xb2\xdf\x59\xdb\xf2\xc6\xaf\xab\xfb\x5d\xe9\xb5\xe3\x93\x11\xcb\x94\xdd\x63\xe7\xfd\xfc\x5a\xf4\x6c\x63\xa5\xf7\xee\xef\x9c\x5a\x67\x51\x9f\x24\x8f\xd4\x55\x5f\xc5\xaa\x21\x9b\x84\xe2\x4a\x02\x0e\x64\x4d\x8f\x2c\x2c\x98\xba\xa9\x88\x96\xe5\x47\xb1\xcd\xd3\xc8\xc7\x76\xe0\x46\xaa\x2c\xfb\xa2\xa7\x67\x80\x9b\xab\x31\x70\xb5\xbc\xa9\x47\xab\x7a\x17\xb2\x96\x0e\xd5\xcd\xed\xbb\x9e\xfb\xba\x38\x71\xfa\xd7\xc1\x8d\xca\xd6\xbe\xda\x97\x99\x5f\x2c\xb9\x40\x74\x60\xbb\x9a\x62\xc8\x32\x69\xca\x14\xe1\x10\x08\xc5\x98\xe3\x28\xc0\xf3\x9c\x2c\x22\x6c\x70\x9e\x4c\x00\x5d\x0d\x08\x33\x10\x34\x25\x94\x0c\x81\xe6\xbc\x0c\xb8\x67\xb6\x99\x5c\xd5\x49\x45\xcf\x74\x6b\xf6\xa8\xc5\xf3\x3a\xf7\xd9\xdb\x25\x4f\x5e\x5c\xfe\x6b\xf6\x79\x93\x6b\xcc\x69\x18\x69\xcd\x5a\x1c\x7f\xc1\x9d\x5e\x9d\xf8\xee\xa5\xee\x77\x47\xe5\x7d\x6d\xde\xc8\x95\x47\x2b\x5e\xad\xf8\xf7\xbd\xd3\x4d\xee\x0f\x19\x52\xac\xdb\x0f\xdd\xc8\xb4\x15\xf5\x93\x3c\x67\x95\x3d\x3e\x0a\x7d\x68\x00\xce\x75\x03\xdf\x88\x10\xa3\x00\xc7\x17\x38\x56\xb1\x54\xd9\x20\x7d\x51\xf5\x19\x26\x22\x09\x1d\x01\x59\x8f\x1c\xca\xe4\xcc\x97\x3b\x95\x79\x7f\xf5\xbd\x6a\xe4\x1a\x44\x2d\x29\x3c\x7b\xf8\xba\xf7\xd9\x93\x3d\x87\xfd\xb6\xb2\xc6\x5f\xef\x30\x39\x72\x75\xc9\xfd\xe4\xe1\x37\x42\x92\x27\x25\xaa\x25\x9b\xb2\x47\x89\x54\x24\x38\x48\x45\x0c\x89\x09\xe8\xeb\x21\x63\x87\xa2\xaf\xb3\x54\xe4\x3a\x81\x17\x07\xb4\x1e\x38\x9e\xc1\xda\x0e\xc4\x54\xe2\x9e\xd0\x77\x2f\xdc\x59\x7f\xfb\xd3\x87\x63\xd7\x67\xdb\x58\x2a\xfb\xdd\xce\x55\x67\x5d\x5c\xbb\xa2\xcc\x33\x79\xf7\xc5\xae\x1f\xac\xde\xd5\x2a\xf3\x8b\xef\xc4\x48\x7b\xc4\x06\x21\xc1\x04\x88\xc4\xaa\x47\x73\x5a\xcc\xea\x92\xe8\x1b\x04\x83\x44\x9e\x10\x2d\xd6\x93\x34\x17\x84\x3e\x69\x08\x2c\x02\x40\x57\xb0\xea\xbc\x1c\xb8\xc3\xb2\x7e\x54\x62\xdc\x85\xd1\xcb\xf2\x15\xad\xff\x4b\xad\xef\x9a\x2f\x6b\x55\x29\xfb\xb2\xcd\x0d\xd6\x95\x3d\xd7\x69\xef\xf1\x82\xa3\x7a\xe2\xe4\x9a\x4c\xcb\x3e\xe4\x61\xc0\x60\x82\xd7\x10\xd2\x2c\xc5\x97\x91\xe0\x87\x98\xd7\x58\xd3\xd2\x28\x5d\x80\xb1\x23\x63\x16\xd8\x16\x45\xf3\x8a\x2a\xd8\x9e\xf8\xb2\xc9\x73\x67\x95\x44\xeb\x0a\xb6\x24\x1b\x16\xff\xf4\x83\xb5\xb5\x3f\x5a\xb2\xe3\x43\xb3\x43\xc9\xdd\x7d\x53\xf5\xcf\x57\xaf\xec\x3e\xa3\xdc\xf0\x24\x8f\x1b\x08\xac\xb3\xac\x19\xc9\x44\x48\x03\x68\x8a\x3a\xb0\xb9\x58\xc0\xbe\x63\x63\x18\xf8\x9c\x6e\x92\x0c\x16\x60\xc4\x01\x86\x8d\x64\x5d\x8a\x03\x4e\x49\x9c\xd5\xab\x15\xfa\x70\x2d\xef\xef\xca\x1d\xec\x6c\xff\xf5\xa4\xf7\x5a\x74\xe4\x06\x71\x6f\x95\xd8\x58\x6f\xd1\xbc\x8f\xe3\x09\x0b\xb3\x77\x96\x92\xdb\xca\x62\xdb\x33\x35\x1f\x8a\xae\x0a\x39\x05\x60\xd9\x08\x75\x82\x67\xc5\x50\x67\x43\x37\x0a\xe4\x20\xa2\x45\xcb\x50\x89\x40\xa1\x55\x01\x85\xa2\x47\xc5\x09\x48\x23\x36\x2f\x29\x59\xae\xe9\x95\x8f\xc6\xfd\xb1\x72\xfa\xb7\x95\xb9\x3e\x35\xa3\x27\xad\xc5\x7a\xb7\xbe\x18\xba\xb5\x06\x59\xaa\xb2\x79\x3b\x4a\x6e\x56\x27\x09\xac\xf3\xa4\xad\x22\x0e\x3a\x31\x47\x53\x8a\x8a\x64\x0a\x92\x44\xc4\x48\x9a\x0a\x49\x9f\x53\x1c\x0e\x32\x32\xe3\x98\xa2\x29\x6b\xbc\xa9\x38\x51\x06\x34\x43\xa7\x4a\x5f\xac\x70\xe0\xf6\x9c\x6b\xf9\xd7\x4d\x78\xa7\xc9\xdc\x1a\xbf\xcf\xc8\x5e\xa3\x45\xdd\xbb\x13\xfc\xf7\xd7\x16\x19\x39\xf9\xea\xc6\x12\x2f\xd4\x80\x7e\x35\x4b\x96\xfe\xe0\x71\x3c\xf1\xd5\x9a\x3b\xff\x2c\x75\xab\x51\x9e\xe7\xdd\x2a\xb4\xad\xd6\xa3\x7e\xfa\x37\x9f\xa7\xb4\x2a\x37\xe8\xd5\xe4\xb2\x07\x80\x48\x43\xa6\x43\xf0\x0a\x54\x45\x9a\x60\x68\x45\xd3\x11\x16\x3c\x8d\xd0\x6c\x83\xb6\x59\x43\x63\x15\x52\x55\x91\x68\x4a\xb4\x8a\xf8\x98\x09\x28\x3d\x03\x01\xbb\xaf\xee\xae\xee\xd6\x51\xfb\xbe\xe5\x6f\x37\x17\x55\x2b\xd2\xf3\xa7\xdc\x53\xef\x75\xab\x57\x67\xd5\xa6\x47\xf7\x3b\x07\xc3\xf3\x67\x59\xfd\x3c\xc9\xcc\x55\xac\x29\x21\x41\x8d\xf8\x90\xf3\x58\xc2\xc1\xaa\x2e\xc8\x36\xeb\x52\x9a\x6f\xc5\x11\x1b\x84\xa6\xe6\xfa\x8e\x6a\x04\xac\xa7\x48\x14\xa5\xd3\x94\xae\x25\x1e\x05\x09\xfb\x8f\xce\x3a\x5e\xa4\xca\xe3\x7a\x25\x7e\xf8\xa4\x4f\x9b\xb9\xeb\xbd\x41\xf7\x9d\x3c\xbf\x9d\xa8\xd6\xae\x69\x6a\x99\x3d\xda\xba\xcc\x3f\x9b\x13\xe6\x1b\x1b\x91\x16\x81\x79\x86\x06\x32\x1b\xbb\x9a\xe2\x72\x4a\x68\x7a\xb6\x2e\xd2\x32\xe6\x1d\xc6\x36\x75\xdf\x10\x39\x9e\xb1\x79\x06\x4b\x8c\x0b\xa3\x58\xcb\xc0\xa5\xa2\xea\xb5\xce\x6c\x38\x7d\xe6\xb3\x22\x4f\x9a\xd7\x3e\x7d\x7c\xee\xa1\xa2\x6f\x4e\xe8\xff\x5b\xbe\xb4\xf5\xf5\xfe\x6a\x7f\xad\x4d\x50\xf0\xc6\x0b\x3f\xb2\xcf\xee\x5e\x1d\x6b\x65\x5f\x53\xa3\x59\x81\xfa\x42\xed\x65\xe7\xf3\xb4\x3f\xfe\xfd\xae\x1a\x13\x9e\x64\x25\x46\xbc\xb1\x6a\xd8\xd8\xa5\x99\x7f\x4b\x25\xc6\x20\xf3\x50\x8b\xa5\x00\x30\x16\xa1\x85\xc8\x08\x08\xd2\xe3\x19\xcd\xe4\xe8\x50\xa3\x02\x20\x38\x92\x27\x10\x06\x27\x86\xbe\xad\x79\x90\xe2\x7d\x12\xa3\xc4\x2e\xf5\xdd\xb5\x25\x25\xc7\xf4\xb7\x16\x4c\xe8\xda\xec\x48\xc5\x39\x75\xb4\x2d\x4d\xb3\xd4\x3d\x0a\x6a\x48\xcc\xe1\xfc\x1f\x56\x3d\xd9\x7a\x4f\x92\x69\x6d\x08\x53\x44\x2e\xa9\x44\xa6\xe0\x01\x81\xa3\x08\x85\x0d\x7c\x4a\xc5\x1c\x40\xac\x21\xf0\x6a\x2c\x98\x96\x86\x25\x33\x04\x3c\x87\x29\x59\xb5\x1c\xf8\x12\x16\xf0\x9f\xa0\x4c\xe9\x69\x9f\x37\x78\xfb\x3f\x00\xe2\x0d\x9d\xd9\xc5\x1e\x09\x69\x8d\x66\x5f\x9f\x51\x62\xd9\x9e\x96\x57\x06\x9d\xe8\xb9\x6f\xc8\x2b\x3d\x7f\x59\xb7\xbc\xfa\xc3\x26\xed\xce\x67\x9e\xc6\x3d\xb1\xa8\x3b\xcb\xf2\xb1\x06\x2c\xd9\x11\x7c\xde\xd5\x3d\xa4\x38\x81\xe1\x62\x9b\xa5\x7c\x9a\x32\x43\x81\x51\x35\xdb\x63\x35\x59\x34\xb1\x21\x32\x94\xa9\x0b\x19\x8c\x7e\x53\x8f\xdd\x4c\xa9\xf4\xee\x20\x70\x6d\xfa\xa1\xae\x3d\x66\xa9\xc7\xd7\xad\x7a\xfa\xb4\x62\xbe\xcf\x26\x2a\x9f\xcc\x97\x77\x8f\xda\x96\x5c\x51\x5f\xe0\x45\x94\xe2\x8b\x16\x66\x83\x88\x37\xa0\xe5\x51\x34\x13\x02\x02\xc9\x2e\x32\x0d\x6c\x46\x22\x94\x69\xc3\x66\x79\xde\x8e\x5d\xda\xd2\x5d\x1b\x08\x19\x60\x01\x1f\xbf\xe6\xbd\xfd\xf3\xc1\x54\x54\xb9\xe8\x47\x5d\xf6\x17\x6e\xfb\xc7\xc7\xc2\xe6\xda\x2d\x7f\xff\xfc\xe3\xb7\x9b\x34\xe9\x34\xb0\x78\xdf\x24\xe3\xc7\x00\x13\x51\xb6\x66\xba\x2e\xf2\x2d\x8d\x12\x90\x67\x6a\x7c\xa4\x13\x9e\x65\x12\x8e\xe2\x12\x06\x15\x47\xb6\xa4\xa8\x9c\xa8\x29\x0c\x26\x6d\x10\xe9\x28\xf1\xd7\x3e\xfe\x8e\x5d\x7f\xd3\xe8\x0b\x0d\xdd\x9c\x93\xd0\xa9\xbf\x2b\x4d\xf8\x2e\x2f\x51\xf2\xd3\x91\x2b\x96\xfc\xda\xf0\x30\x3d\xe3\xd9\xa4\x24\x9f\x0f\x6b\xb2\x29\xb2\x40\x03\xba\x0c\x79\xe0\xa8\x84\x29\xf9\x14\x05\x62\x8f\x21\x08\x5f\xa5\x01\xb2\x19\xd9\x66\xc2\x30\x0a\x35\x85\x12\x09\x5f\x17\xb8\x7f\x2d\xf9\x37\xbe\xfa\xff\xf6\x24\x48\x6f\x9c\x75\xcb\x7f\xc8\x47\xa4\x16\xfc\x6b\xd2\xc6\x94\x0d\xf9\xcb\x8f\x7c\x38\xab\xcb\xd8\x46\xde\xa2\x15\x56\xf7\x4f\x37\xab\xad\xf7\x8e\x51\x6f\x0e\x7e\xa5\x5b\x92\x4f\xbb\x31\xcf\xb2\x32\x64\x68\xac\x86\x9c\xa7\x38\x3c\x76\x25\xa0\x52\x9e\x6e\x89\x48\x88\x42\xc0\x92\x2c\x07\x29\x07\x19\x2a\x2d\x19\xb6\x47\x13\xd6\x8b\xec\xd5\xff\xc6\xdd\xbb\x86\x39\xdb\x6a\xc0\xb7\x8b\xde\x79\xbd\xfa\x6b\xcd\xd6\x1e\x6a\x3d\x81\x34\xaf\x7d\x3e\xca\xbb\xd8\xe6\x4c\xc7\xfc\x8f\xe7\x3e\x4a\xae\xd2\x3c\x30\x6c\x4e\x91\xb0\xc4\x85\x84\x2b\x93\xb1\x2a\xdb\x92\xcb\x59\x3c\x6f\xc9\x72\x04\x64\xc2\x8c\x63\x9d\x8a\x15\x43\x27\x19\x45\xd6\x5c\x53\x8b\x22\x2d\x83\x43\xfa\x29\x7b\xe7\x1e\x6b\xb1\x96\x1b\x95\xda\x62\xf9\xab\x83\xbb\xb4\xa8\x5f\x20\x35\xcf\x8a\x46\xf7\x83\x29\x2b\xa7\x35\xda\x52\x79\xd2\x83\xcc\x07\x70\xc2\xbc\xc3\x4a\x44\x20\x50\x92\xe2\xf1\x9a\x44\x2a\xac\xe5\x4a\x61\x80\xc8\x40\xf6\xb0\x46\x87\xae\x1e\x72\x86\xad\xda\xbc\x26\xb2\x0e\x36\x79\x47\x82\x20\x16\x13\x9b\x5d\xa6\xe5\x07\xb5\x6e\x5f\xce\x59\xe8\xc7\x2f\xab\xf7\x7c\xed\xed\xa3\xb3\x9a\x9e\xa8\xf1\x94\xde\x7b\x6b\xc4\xf4\x0b\x3f\xf4\xdc\x6a\x0b\xf7\x92\x4c\x35\xc9\x42\xc4\x99\x10\x72\x0e\x41\x83\xc0\x62\x45\x93\x72\x90\x05\x28\x05\xbb\x3e\xe9\xa8\x11\x63\x43\x4e\x75\x55\x36\xb0\x45\xc2\x52\x6c\x2f\xd2\xe2\xc4\x66\xcf\xfa\xeb\xce\x51\x65\x45\xd3\xd7\xfa\xd5\xca\x76\xe5\x8d\x02\xd7\x8f\x3e\x6c\xe0\x7f\x2c\xd5\xfb\x68\x61\x2e\x3b\x6c\x47\x1c\xb8\x9e\x79\x1e\xba\xc4\xf2\x11\x62\x04\x4d\xdb\x8c\xc3\x40\xd5\x59\x84\x03\x9a\x22\xb9\x80\x15\xa2\x58\x00\xb6\x0c\xa2\x20\x90\xf8\x50\x51\x23\x5a\xf9\xaf\x07\x83\x2d\x33\x1a\xf7\xaf\xaf\xfd\xbf\xf2\x11\xff\xd4\xb4\xa6\xa7\xb5\x49\x79\x3b\xcb\x8b\xb5\xec\xef\xa2\x33\xc2\x4b\xbf\xe0\x3d\xe5\x06\x47\x34\xb3\xbc\x76\xc9\xb1\xbd\x5f\xdd\x97\xaf\x46\x95\x6c\x75\x46\x55\xdf\xf3\xd9\x8c\xb4\x95\xc9\xfd\x95\x48\x71\x78\xdb\xe4\x69\x64\xfb\x9c\x2d\x9b\x21\x60\x90\xae\x39\x21\xcf\xc5\xba\x2c\xd0\x4e\x60\xf0\x06\xa1\xfb\x86\xec\x1a\xa1\x80\x25\x5f\x25\x78\x3a\x31\xb0\x27\x4f\xbc\x37\xbe\xfc\x46\xc9\x36\xe4\x93\x0d\xcb\x9a\x3a\x1f\x72\x5d\xc9\xbb\x9d\x6b\x3f\xcc\xfe\x59\x4e\xaf\x41\xfe\xb4\x7b\xa9\x99\x1f\xda\x26\x3e\xbf\x89\x9d\x08\xf9\x52\x40\xa8\x30\xd4\x02\x51\x56\x10\x1b\x09\x02\x23\xca\x2c\x1d\xc5\x5a\x8c\x5d\x5f\x31\x34\xe0\x2b\xb2\x4b\x41\x0a\x88\xbe\x19\xd3\x09\x9e\x42\x63\xdf\x79\x77\x58\xc1\x75\x37\x6e\x5f\xb4\x6f\xbe\x95\xfe\xf7\xa5\x56\x33\xeb\x1f\x6c\xf5\xc3\xd3\x71\x4b\xd2\xbc\x9c\xe3\x6b\x9e\xe8\x94\x64\x56\x95\x28\x26\x55\x39\xa6\x24\x95\xf5\x64\x82\x34\x4d\x83\x81\x3a\xe4\x7c\x4c\xa9\x34\xcd\xd1\x2a\x1f\x12\x20\x14\xd8\x88\x09\x99\x08\x79\x56\x40\xf2\x19\x50\x16\x80\xef\x2b\x95\x31\x46\x4f\x9f\x7c\xbf\xe2\xb1\x1b\x38\x38\xf8\x5b\xc9\xf7\xda\x2f\x69\x52\xad\xcc\x92\xad\x27\x0b\xe5\x3a\xdd\x7e\xf7\xdd\x24\x93\x2b\x73\x31\x15\x2a\x3e\xcd\xeb\x24\xa5\xb1\x0c\xc2\x91\x19\xc6\x81\xcb\x38\x9a\x13\xca\x3e\xc7\x85\x28\xb4\x05\x52\x35\xf4\xff\xca\xff\x90\x8f\x40\x9c\x41\x8a\xaf\xdd\x67\xd6\xd8\xfd\xd3\xbe\xb8\x5b\x77\xde\xde\xde\x57\xdb\xf3\x13\x27\x5f\xe8\xdc\xb9\xdf\xd2\x2d\x45\x6b\x66\xed\x3c\x15\x76\x5d\xbe\x2e\xc9\xa4\x5d\x12\x15\x45\x86\x20\x78\x36\x6d\x92\x14\xb6\xb5\xd0\x16\x35\x09\xb1\x12\x0b\x14\xd2\xd6\x0c\x39\x62\x23\xa0\x0a\xba\x26\xd2\x1c\x34\x5d\x41\xe1\x85\x97\xa2\xf7\x9f\xde\x07\xe9\x69\xd9\x52\x66\xfe\x47\x27\xba\xe2\xcd\xbf\xbb\x17\x3a\x70\xa0\xca\x89\x7b\x8b\x8f\x5d\xeb\xdd\xbc\xc9\xd6\x65\x93\x3e\x4a\x6d\xda\xe6\x6e\xed\xf2\xb5\xea\xca\x67\xd8\xe4\x3e\xe1\xb8\xd8\xa1\x0d\xdf\x86\x71\x64\xe9\x3e\xe9\x3a\x4e\x24\xcb\x4c\x6c\x12\x11\xa1\xa8\x04\xd6\x6c\x3a\x0a\x65\x4d\x40\xb4\xa6\xf8\x81\xcd\xd0\x0c\xad\x79\x54\xe2\xe5\xd6\x2f\xad\xb6\xff\x30\xaf\xfd\x84\xf3\xe1\xca\xef\xd7\x8b\x5d\xfa\xd5\xa8\x5a\xf8\xf0\xb7\x07\x4b\xde\xa3\x3a\xde\xdc\x95\x73\x66\x93\xdd\x99\x57\x51\x49\x5c\xc8\x90\xe6\x10\x8e\x2a\x08\x22\x67\x08\xb4\xaf\x41\x9a\x62\x3c\x01\xe9\x76\x2c\x69\x31\xf2\x43\xca\x24\x89\x88\x67\x1d\xc1\x57\x4c\x24\xfa\xa6\xae\x26\x40\x5e\x3d\xec\x92\x63\xda\x96\x3f\xe3\xbe\xe7\xf7\x0c\xe8\x3c\xb9\xcf\x23\x7d\xf1\xd0\x9f\x67\xcf\xa8\xde\x60\xfd\xe2\x7d\x1f\x7e\xb2\x64\x1f\x9d\xe4\x30\xe0\x4c\xc8\x42\x41\x61\x03\x5d\xe1\x29\xca\x31\xb0\x69\x22\x24\x39\x88\x71\x75\x82\xb3\x42\x97\x70\x0c\xc1\x32\x62\x45\x70\x31\x13\x69\xa1\xc6\xf0\x41\xe2\x30\x78\x30\xb8\xc2\xba\x9b\x76\xde\x4b\xdf\x55\x8a\x27\xd4\x46\x7f\x6c\x7a\xf6\x4b\xde\xa9\x2d\xaa\xcd\x59\xf6\x0b\x75\x3d\xa5\x4a\xb7\x53\x49\x1e\x4f\xd3\x14\x94\x44\x47\x0a\x2d\x4c\x61\x82\xf5\x5d\x5b\xb1\x59\xd3\x0d\x2d\x08\x58\x92\x11\x59\x42\xe0\x38\xdf\x73\x03\xcf\xd2\x58\x4d\x88\x54\xc1\xd6\x32\x90\xd9\x59\x5d\xf9\xfe\x6b\x91\xd0\xec\x72\xbd\xda\xd5\x87\xbe\xf2\x30\x4b\xb6\x16\x67\xff\x1e\x75\xf7\x8d\xcd\x53\xaa\xde\xec\x71\xee\xe9\xe8\xff\x0f\xb8\x89\x84\x7e\xad\x21\xd2\x60\x39\xda\x8a\x55\xd3\x8c\x3d\x06\x6a\x2c\x61\x39\xb1\xa8\xb3\x5e\x20\x53\x86\x18\x28\xd2\x7f\xe5\x1c\x8e\x47\x24\x0b\x3c\xdd\x86\x36\x27\xff\x9f\x5f\x0f\xfa\xe0\x7f\x8e\xf7\x5a\x77\xd9\xa5\x1f\x39\x57\xb7\xf7\xf2\x6d\x85\x3e\x3a\x86\x4f\xae\x1f\xbd\xea\x5a\xe5\x39\x70\xe1\xb6\xb1\xcd\xa6\xed\x5b\x30\xe2\x70\x7a\xda\x95\xe7\xcf\x6f\x4c\x2a\xf1\xc2\xb4\xb7\xc8\xb9\x9f\xc9\xae\x63\xfb\x6e\xf8\xb4\x76\xe9\x45\x5d\x67\xb8\x8f\xef\x0d\x59\xbb\x67\x6c\x9d\xed\x43\x6e\xcf\xdc\xdf\xf2\xe3\x5b\xf7\x53\x93\xcc\x88\x10\x01\x22\xb0\x1d\x31\xa0\x75\x3a\x90\x78\xd3\x84\xc0\x09\x4c\x17\xd9\x46\x28\x28\x34\x6b\xf9\x3c\x41\xdb\xac\x1e\x12\x1c\xd2\x10\x0c\x18\x47\x4f\xc0\xe1\xd8\xfa\xea\x0e\xab\x9f\x39\xa2\xdc\xcc\x9f\xbe\xfe\xf2\xfc\xf7\x1b\xfa\xe5\xdb\x53\x3f\xff\x5b\x3f\x77\x6b\x96\xa5\x46\xe1\x36\x73\xf6\x5d\xea\x96\x64\x9e\x00\x96\x56\x68\x5b\x92\x6d\x11\x07\x50\x40\x22\xa4\x69\x53\xf6\x19\xd5\xa2\x75\x3e\x70\x74\x4e\x11\x61\xc8\x06\x32\x76\x74\x99\xa2\x3d\x35\x36\x55\xf3\xe5\xd0\x0d\xb7\x8f\x3e\x71\x6d\xe9\x8a\xe5\x75\x8a\x9f\xc6\xbc\x94\x65\xd8\xe5\x09\x79\x47\xbd\xb3\x69\x41\x97\x8d\x3b\xaa\xf6\x4a\x6d\xf5\x77\xe6\xa1\xa9\x09\x4d\x96\x3c\x19\xb3\xa2\x09\x20\x43\x38\x9e\xca\x84\x01\xc3\x2b\x91\xe4\xfb\x14\xb2\x78\x59\xf5\x35\x5f\xd4\x62\xcb\x72\x34\x52\x08\x0d\x5f\xb2\x03\xe7\xdf\xd6\x8e\x2f\x82\x26\xdb\xf6\x9e\xb8\xd8\xc8\xea\x2f\xad\x87\xd5\xec\x87\xa6\x76\xaa\x91\xff\xd0\xfc\x8e\x7d\x46\x65\xf9\xa8\x3f\x0d\xb7\x3c\xcd\x39\x2f\xb9\xce\x41\x40\x0d\xb0\x52\x18\xb0\x8c\x20\xb2\x7a\xe8\x0b\x98\x75\x00\xa9\x53\x9e\xa4\xb2\x1a\xc5\xdb\x9c\xee\x33\xa2\xe8\x3a\xaa\xc8\x8b\x36\x41\x28\xa4\x46\x27\xce\xed\xc2\xe3\xf4\x7d\xa5\xc7\x17\xe8\xd0\xfa\xf1\x72\xb8\xe3\xbb\x6d\xab\x7e\xad\x7e\x19\xbe\xd1\xb6\x57\xf0\x46\x7b\x76\x3a\x79\x76\xc2\xcc\xe4\x66\x9c\x58\x44\x1c\x44\xb4\x0b\x74\x89\x33\x68\x51\x72\xb8\x00\xb0\xb1\x17\x93\xbe\x8a\x69\x1d\x6a\x6c\x60\x47\x2e\xc0\x5e\x68\xb1\x12\x96\x6c\x45\x16\xc0\xcb\x7b\xe9\x59\x83\x99\x89\x4b\x16\x5f\xdd\xba\xa7\xc6\xc4\xd3\xa1\xd4\xf7\x95\xcf\x2f\xad\x38\x79\x61\xe5\x03\x78\x7b\x5e\x0a\x7d\xb7\x68\xf7\x3b\xc9\x2d\x47\x76\x40\xc9\x9c\xe1\xb0\xd0\x0c\x65\x92\xb0\x80\xc2\xa2\x08\x19\xa1\xad\x30\xb6\x47\x72\xb6\x6d\xd8\x04\xe2\x7c\x5e\x74\x58\x8e\xd0\x6d\x22\x54\xd5\x0c\xb8\x82\x9c\x32\xe5\xeb\x9d\x98\x53\x2d\x4f\x45\xc2\x7e\xb6\xa8\xf4\xb5\x8f\xd5\x3f\x4f\xa6\xd5\xf2\xd6\xbf\x77\xf6\x7c\xed\x92\x9f\xcd\x91\x32\xcf\xca\x94\xf0\x4b\x5b\x06\xa9\xc0\x38\xd0\x42\x4f\x0d\x44\xdd\x83\x3e\x96\x0d\xd6\x92\x14\xac\xfb\x16\xd6\x22\x82\x11\xb4\x80\xa3\x0c\x55\x53\xc4\x08\x20\x36\xf4\x84\x0c\x66\x84\xcd\x7e\xef\x74\xa9\xc0\xbe\xf7\xab\x87\xdb\xe7\x34\xbf\xbf\x6f\x61\xa1\xa5\x79\x9d\x76\x87\xca\x7c\x8f\xae\x2c\x69\xdb\xce\xd4\xff\x4c\xee\x8c\x10\x18\x9e\x24\x49\x52\xa4\x1a\xac\xef\x58\x9e\x8a\x04\x40\x62\x11\x4b\xa2\xa4\x0a\x3e\xa6\xdc\xd8\xd6\x49\xc2\x53\x02\x1e\xf3\x34\xa9\x48\x1c\x92\x5f\x38\x2a\xff\xf7\xf9\x6d\xfa\xda\x8d\x5e\xb7\x8a\x8b\x47\xb1\x4f\xb6\x34\xbc\x34\x7d\x54\xd5\x92\xa4\xdf\xa1\xd8\xb0\x0a\x2b\x57\x9e\xfb\xa3\x5e\xe1\x0f\x36\xaf\x7d\xe1\x47\x7a\x93\xff\xd8\x38\xbc\xe7\xd8\xe6\xa9\x73\x6b\xa6\x8f\x5e\xf9\xd5\xd5\x3b\x83\x96\x36\x57\xf7\x36\x5b\x30\xea\xed\x69\xf3\xbb\x51\xb7\x33\x4f\x56\x99\x30\xe7\x08\xbe\x12\xb0\x46\xe8\xaa\x36\x62\xa8\x48\x08\x45\x2f\xd2\x29\xcb\x84\x30\x16\x35\x35\xb2\x65\x24\x5a\x1e\xab\x2b\x56\x60\x3a\x91\x89\xf5\xd8\xe0\xf8\xc4\x2e\xd5\xa8\xe2\x94\x13\x85\xcb\xd7\x38\xf7\x7e\x8e\xfd\x29\x27\x5e\xa9\x73\xf6\xd4\xa5\x2f\x66\x8c\xf9\xfc\xd0\x99\xac\xf8\x7d\x76\xda\x98\xbf\xba\x26\xf7\xbf\x91\x58\x59\xe7\x70\xc8\x98\x01\x8a\x31\x20\x6c\x4b\xb1\x3c\x56\xc4\xae\x41\x41\x96\x13\x21\x56\x35\xac\xa1\x98\x08\x31\x67\x3a\x98\xd3\x02\x0a\xf0\x89\xb7\xa6\xef\xcd\x4a\x77\x5a\x2f\xaf\x52\x76\xfc\x82\x61\x55\x3a\xa6\x59\x43\x8b\x3f\xf8\xba\x61\x87\x07\x47\x83\xc3\x75\x2b\x0e\x1a\x3b\xf9\x75\x90\xe4\xaf\x2d\x92\x84\x49\x2b\x0a\x43\xfa\x34\xb0\x05\x86\xd1\x29\x81\x91\xc3\x40\x34\x7c\x47\x96\x74\x9b\x25\x7c\x4d\x60\x5c\x29\x20\x6c\x57\x24\x91\x2b\x93\xee\xcb\x45\xa9\xd3\xa9\x89\x4b\xa6\x66\xaf\x75\xeb\x68\x9b\xf1\xf9\x6e\xf9\xf9\xc7\xea\x9f\x0f\x5d\xf9\x59\xd5\x32\x55\xc9\xfe\xcb\xef\x7f\xb2\xa8\x46\x72\x27\x67\x80\x8d\x39\x33\x86\x2a\x8c\x81\x46\x31\x91\x07\xf8\x40\x0e\x65\x56\x21\x6d\x32\x36\x45\x57\x8a\x88\xc8\x86\xb4\xeb\x63\xc7\x80\x31\x0e\x78\x40\xf3\xf2\xcb\x69\xf2\x59\x05\xcd\xdd\xc5\xb5\x6f\xd0\x41\x22\xf6\x4c\x9e\x1a\xbf\xb1\xe1\xd9\x84\x8f\xb2\xf7\xca\xfd\xe7\xb6\xba\x8c\x73\xb5\xd0\xe8\x66\x49\xbe\x25\x97\x6c\x28\xd3\x88\x97\x79\x92\x53\xe2\x38\x8e\x5c\x0d\x0b\x80\x76\x49\x51\xb4\x09\x81\x26\x14\x25\x08\x3c\x9a\x51\x48\x5e\xa5\x88\x28\x20\xb1\xee\x27\x76\x0e\xfc\xd7\xa6\x31\xf7\x3f\x7e\xa8\xf4\x69\x33\x09\x17\x79\xe2\x9c\x68\x75\xe9\x8e\xf3\xc5\xef\x1b\xce\x54\xed\xd0\xfb\xca\xc3\x3f\x53\x32\xaf\x34\x99\x18\x96\xc6\xf8\xc8\xe5\x10\xcf\x00\x1c\x88\x00\x51\x44\x18\xc7\x82\x09\x39\x01\x03\x99\x94\x15\x9d\x14\x49\x48\xdb\xd0\xa1\x05\xa0\xf9\x06\x43\x44\x58\x79\xd9\x39\x3e\xdd\xd7\xdc\x98\x3b\xf9\x8b\xfa\xa9\x84\x7a\x28\x02\x73\xdb\xee\xb4\x86\x1a\x43\xae\xf4\xde\x77\xfb\xc7\x92\x55\x2b\x8c\x18\x90\x79\x11\xfd\xc4\xf0\x1d\x5a\xa4\x3c\xe4\x21\x85\xb7\x2d\x40\xd8\x14\x65\x7b\xb1\x4d\x07\xd8\x24\x19\x45\x53\x91\xeb\x68\xbc\x28\xa8\xbe\x27\x51\x4c\xe4\xfa\x52\x14\xba\x09\xfc\x79\xee\xa6\xda\xfe\xdf\x1f\x4f\xee\xb5\x77\xb4\xee\x74\x78\xf3\xe4\xfa\x06\xcd\xda\xb6\xaf\x9e\xf3\xc2\xe4\x81\xbd\xb3\x14\xed\x60\x6e\x9a\x93\xe4\x65\xa2\x27\xdb\xd8\xc7\x8e\xef\x33\x9c\xee\x62\xc3\xd1\x30\xd6\xf5\xd0\x60\x0d\x57\x50\x04\x45\x57\x01\x88\x58\xc8\x3a\x2a\x90\x23\xe8\xfb\x34\x03\x40\x62\xe7\xe8\x73\x7c\x7d\xa1\x61\x9b\x7f\xe8\xfc\x53\xed\x31\x3f\x16\x49\x1d\x53\xa0\x2a\x95\x77\x62\x8e\xf5\xaf\xd6\xf2\xba\x28\xdb\xcf\x36\x59\x5e\x37\xb9\x3e\x6d\x4a\x1e\x49\x53\x16\x0c\xc4\x08\x87\x1c\x0a\x31\x40\xbc\x0b\x65\xc6\x91\x05\x17\x8b\x82\x26\xb8\xd0\x35\x68\x3d\x62\x29\x1f\xc6\x8e\xc4\xb1\x64\x02\x75\xbd\x2f\xdb\xff\xbe\xe1\xc3\xaf\x47\x15\x29\xe6\x99\xcf\x37\xee\xa9\x53\x4b\x78\x63\x47\xd1\x62\x79\x4f\xdd\xcd\xbb\x66\x45\xed\xd2\x69\xd7\x7e\x4b\x32\x8b\x3a\x43\x1b\x0c\xed\xfb\xa4\x49\xf3\x5c\xac\xe3\x58\x15\x7d\x8a\xe6\x63\xc5\x71\x2d\x5e\xb4\x42\xc2\xf3\x7c\x2e\x8e\xd5\xd0\xb0\xb0\x18\x3b\x2a\x47\x26\xd0\x7b\x99\x7f\x5c\x19\xda\x6f\x6d\x91\x2e\x6d\x97\x76\x58\xd2\x7e\x5c\x75\x7e\xd0\xc1\x07\x15\xdf\xec\x0a\xeb\xcc\xc2\x1f\x9c\x6a\x1e\xf6\xca\x3c\xb9\x58\x62\xbc\x05\xa5\x29\x9a\xa5\x09\x81\x0a\x25\x4a\xd2\x05\xc1\xb2\x88\x38\xb4\xa0\x02\x28\x45\x83\x2e\x09\x95\x90\x86\x74\xec\x47\xc8\x95\x43\xc1\x20\xb1\x97\x01\xab\x61\x34\xb5\xc6\xfe\x2a\xa9\xe0\x9b\xaf\x3a\x94\xb8\xbc\x76\x90\x7a\x71\x78\x61\xed\xcb\x87\xf6\xd0\x86\x7c\x89\x9d\xd3\x53\xf7\x65\x59\x9a\x5c\xe7\x50\x31\xa4\x23\x35\x14\xa0\x21\x91\x4e\x08\xa1\x1f\x6b\x86\x16\x51\x40\xf6\x75\x18\x68\x04\x11\x12\xa2\x20\xa9\x04\x15\xa9\x2a\x69\xf3\xc0\x80\x1a\x91\x41\xa7\xf2\xc1\xbc\xd6\x77\xda\x0d\xcc\xd7\xaa\xcf\xc7\xad\xdf\xde\x7c\xbe\x4b\xc1\x2f\x7a\x1a\xd7\xae\x16\x1f\xd7\x6b\xfd\xc9\x02\xe3\xfa\xaf\xfe\x31\xdb\x0b\x11\xf0\x6a\xf3\x6f\x9e\x97\x28\xff\xfe\xd3\xbb\xed\xaf\x74\x1a\xd7\xf1\x38\xca\x37\xea\xb7\x6b\xb3\x1a\x5f\x98\xd0\x61\xe8\x27\xd5\xc8\xd4\x4f\xb3\x26\xb9\x10\xf9\x0a\x81\x49\xa8\xcb\x66\xcc\xd0\x5e\x6c\x1a\x6e\xc8\xba\x3a\xb2\x09\x17\xf2\xb4\xe5\xc9\x1c\x60\x03\x85\xb6\x2d\x53\x0b\x75\xc2\xd0\x84\x10\x48\x2f\x17\xa2\xf2\x13\xca\x57\xac\xb5\xaa\x73\xf1\x4a\x5b\x8a\xce\x29\x98\xf7\xac\x5f\xa6\xf6\x82\xbb\x4a\x6a\xab\x0e\x8f\xe7\x70\x1d\x17\x54\xdf\x9b\x79\x92\xcc\xc4\xb9\x86\xf4\x03\x4a\xa1\x54\xc3\x02\xa4\x29\xe3\x88\xb1\x41\x44\x53\xb1\x69\x0a\x82\xc5\x62\xac\x42\xd1\x05\xb6\x82\x11\x2d\x04\xac\xe1\x92\x31\xcb\x53\x2f\x47\x80\xf3\xf0\x48\xc1\xae\x33\x5b\x94\x71\x4b\x4e\x7e\x62\x67\x9d\xf3\x6c\xd2\xbc\x71\x5b\x9b\xad\x5c\xb5\x28\x65\xd1\x1a\xb4\x38\x5e\x71\x24\xc9\x20\x63\x09\xbb\x80\xf5\x38\x8f\x06\x34\xcf\x7a\x1e\xc4\x2a\x42\x4e\x10\x71\x4e\xa8\x3b\xd0\x34\x5c\x51\x51\x03\xd6\x62\x22\x4b\x43\xba\xeb\x48\x91\x2e\x26\x1e\xb3\x8f\x7b\xbb\x66\xde\x79\xc7\x96\xbd\x2b\x4f\x9b\x54\xa2\x73\x89\xa2\xeb\x4e\xab\xf7\xc6\x54\x2f\x72\xec\xcb\xaa\x73\x1e\xd6\xda\x7c\xe3\xd1\xf2\x24\x6f\xba\x5d\x9a\x54\x30\x90\x44\x8d\x12\x63\x9d\x81\x74\xe8\x72\x26\xd0\x98\x30\x14\x2c\xd1\xb7\x7d\x52\x45\xd0\xa0\x9c\x58\xb4\x74\x64\x40\x44\x53\x89\x70\xa4\x57\xcb\x04\x55\x36\x94\xdc\xba\x38\x77\xdf\x41\xfa\x86\x03\x1d\x7f\xfe\xf9\x4d\x69\xf2\xa0\xb6\xc3\xba\x12\xcf\xbe\xa8\x57\xf3\xc9\x89\x24\x03\xe7\x71\x80\xf9\x08\x30\xb4\x2a\x7a\x81\x14\x79\xb1\xeb\xb3\x94\x63\xeb\x5c\x10\x04\x5e\xc8\x43\x53\xe1\x05\x26\xd6\x62\x91\x46\x58\x37\xe5\x50\x01\xff\x3d\xf8\x7d\xf9\x52\x28\x15\x57\x9d\xd8\x9e\xf8\xa6\xe5\x9e\x2f\x0e\x0e\x2b\x3e\xe6\x69\xa5\x15\x5d\xd7\x74\x28\xd2\x31\xff\xe6\x5f\x84\x15\x38\x77\xbb\x63\x99\x97\x91\x4b\x7c\x59\x11\x45\x0e\xcf\xb1\x00\x01\x0b\x58\x0c\x0f\xcc\xff\x32\xdd\x85\x34\x0c\x0c\xcb\x24\x62\x07\x60\x16\xc3\x90\x75\x64\xe4\x93\x7e\x24\x21\x0f\x25\x00\xfe\xa5\x35\xa9\xbf\x6b\xda\xa7\xfb\x8a\x9e\x6d\x30\xec\xe4\xf0\x79\x87\xfd\xaa\x07\x1b\x3c\xad\x05\x9a\x16\x32\xf3\xd9\x3b\xa7\xad\x3c\x9f\x64\x85\x66\x36\x26\xa2\xc8\x82\x6a\xe8\xb1\x76\x04\x68\x4d\x65\x19\x24\x50\x9e\x8e\x6d\x15\x47\x02\x4d\x30\x3c\xc3\x7b\x96\xc4\xa9\x36\x1d\xd8\x80\x8b\x62\x94\xe0\x7e\x65\xd6\xb4\x26\x83\x9a\x7d\xfb\x79\x9e\xb1\xf6\xba\xc9\xe7\xca\xf2\xdd\x6f\x8f\x3e\x66\xcf\x0d\x86\x9e\x69\xca\x7e\x3e\x64\xc2\x62\x8b\x4a\x32\xc8\xd8\x21\x3c\x53\x8c\x02\xd2\xd0\x23\x35\x60\xa3\x00\x41\x3a\x90\x5c\xcc\x78\x50\xc6\xc0\x82\x8a\x62\xa8\x10\x08\x1e\x54\x0c\x9e\x8a\x69\x8a\xc7\x19\xc1\xd1\x6a\x46\xbb\x26\xed\xb2\x36\xb6\xbe\x33\xa5\xfa\x19\x2f\xe5\xf8\xd3\x61\x8f\x8b\xf5\xcc\x32\xa2\x7a\x97\xd2\x2d\xeb\x17\x8d\xa7\xbd\x39\xec\xc5\x8c\x2e\xf5\xff\xb4\xe2\xe1\x79\xb9\x3f\xac\x74\xd4\x6b\xb3\xe4\xc7\xe1\x85\x57\x37\xaa\xf7\x6e\xd1\x3b\xb3\x4e\x1d\x25\xb6\x77\xee\x55\x2d\xf3\x53\xc5\xc4\x13\x18\x09\x6b\x16\xf4\x02\xc6\x96\x6c\x92\x8a\xa0\x60\x62\x68\xc4\x01\x70\x18\xca\xf3\x19\x9d\xf6\x58\x86\xc6\x8e\x0f\x14\x3f\x90\x44\x59\x0e\x59\x28\xbe\x9c\xd1\x97\x2c\x5b\x9a\xa7\x25\x74\x46\xd9\xe5\xa3\xe7\xdf\x8c\xde\x95\x77\xf4\x91\x2f\x1a\x94\xa8\xdb\xb0\xe6\xe0\xf3\x79\xee\x1c\xed\x3d\xb2\x56\x72\xff\x17\x91\x89\x48\xda\x16\x05\x5a\xe1\x29\x03\x33\x06\x4f\x42\xac\x01\x46\x0a\x94\x90\xa2\x19\x95\x52\x34\xc7\x50\x38\xe0\xd9\x58\x95\x2c\x51\x60\x49\xd2\x7e\xd9\xfb\x4f\x3f\xfb\xe0\xf3\xf2\x87\xd3\xf3\x6f\xe8\x3a\x39\xfd\xaf\xbc\x9f\xfb\xfd\xdf\xb8\xb3\xbc\xde\xad\x51\x15\x73\x37\x56\x56\x6c\x91\xea\x2f\x4b\xf2\x78\x2e\x16\x29\x97\x23\x2d\x4b\x23\x90\xae\x20\x6c\x32\x46\x48\x86\xb1\x29\xc9\xa4\x1a\x92\xb4\x86\x05\xa8\x62\xe8\x93\x9c\xcc\x32\xac\xa4\xc7\x84\x9b\x91\x4c\xd9\x8c\x9a\xc5\x67\x6c\x2c\xfb\x3c\xed\xe8\xe5\x3d\x67\xd8\xae\x60\x5f\xde\xdc\x35\x6e\x6d\x3d\x33\xe9\xf5\xf2\xb3\xd8\x7e\xf8\x74\xb3\x9d\x2f\x74\x40\xc5\xdf\x96\x86\x4e\x0e\x76\xaf\x3e\xb2\x36\x37\x64\xbf\xf8\xb8\x6b\x89\x0f\x0e\x75\x79\x37\x7b\xf5\x26\xdb\xca\x55\x89\x6a\x4d\xaa\x9d\xf9\x87\x75\x62\x02\x40\x1c\x3b\x00\x4a\x02\x15\x99\x96\x1c\x71\x8c\x45\x40\x52\xf3\x88\x18\x12\x34\x49\x99\x66\x04\x2d\xdf\x73\x85\xd8\x97\x79\x55\x27\x2d\xd1\xd0\x90\x91\x78\x06\x59\x6d\xe1\xd8\xa5\x97\xb2\xe5\x5f\xfd\xd1\xe5\x1e\x6f\x65\x5f\xd0\xb1\xed\xb6\x9f\x7e\x7d\xff\x4e\x35\xb5\x8e\x4d\x3e\xa8\x2c\x7d\x75\x38\xb9\x03\x3d\x20\x48\x00\x51\xb2\x14\x69\x86\x44\x39\x2a\x80\x9a\x03\x2d\x9e\x65\x3d\x2d\x0c\x03\x49\xc0\x92\xc5\xfb\xb1\x84\x79\x81\x92\x6c\xce\xa6\x59\x1a\xa0\x04\xea\xe4\x43\x47\x37\x18\xb8\xa9\x7e\x79\x3f\x1c\x77\xea\xfd\xfd\x6f\xe9\xb5\xf2\x4c\x98\x5b\xea\xf8\xa0\x21\x2d\x36\xd7\x7e\x77\x7c\xd1\x47\xef\x65\x5e\x2b\x35\x61\xd0\x4a\xa2\x60\xf8\x56\x1c\xc5\xb1\xc2\x89\x9e\x18\x41\xdd\x44\x82\x6b\x50\x1c\xad\x86\x22\x4b\x01\x1c\xb3\x0a\x4b\xc6\x40\x0f\x24\xcb\x70\x03\x8a\x74\x32\x38\x34\xa9\xce\x76\xbc\x74\x64\x74\xed\xb9\xbf\x7f\x5a\xac\xff\x63\x1c\xef\x42\xeb\x1a\xb7\x96\xa7\xac\x5a\xbb\xbf\x6a\xef\x0f\xa6\xcf\x5b\x78\x21\xc9\xf0\x01\x49\x31\x78\x22\xe6\x4c\x4d\xd5\x45\x0e\xd1\x3e\x56\x25\xdd\xd6\x48\x49\x96\x38\x4d\x37\xd9\x20\xe6\x23\xd7\x91\x55\x83\x12\x24\xec\x7b\x3a\x8d\x12\xbc\x54\x41\x8b\x92\xe8\xd4\x78\xe2\xdd\x19\x1f\xf1\x37\x1b\xec\xeb\xff\x7a\xef\x1e\x3d\xc4\x8e\x51\xf7\x52\x35\x97\xd7\xad\x77\x35\xef\xcd\xa9\xc9\xf5\x69\xe0\x28\xac\xcf\x2a\xa4\x8a\x63\x9b\xf2\x15\x1f\x28\x8c\xa4\x48\xbe\x05\x42\x8b\xb1\x30\x8c\x31\xa3\x28\xb6\x2a\xf2\x8a\x4c\x12\x12\x74\x49\x96\x10\x12\xc3\xe0\xf8\x3f\xd7\xbe\x76\x7e\xe8\xc5\xe2\xa9\xf2\x95\x05\x55\xdf\xf3\x06\x8d\xb8\xba\x05\xcd\x67\xc7\xe6\x7c\xf2\xe7\xd2\x43\xfd\x0e\x1f\xbd\x96\xdc\xbe\x26\x70\x4d\xda\x13\x81\x86\x68\x5a\x96\x8d\xc8\x67\x31\x03\x79\x55\xe7\x1c\x2a\x50\x00\x23\x4b\xa1\xaa\x12\x80\xa3\x3c\x9a\x42\xb2\xcb\x70\xa1\x26\x64\xc0\xa1\x70\x2d\xeb\x9b\xb9\x3f\xde\x99\xb2\xbe\xc6\xf6\xd3\x25\x9a\x4f\xac\xb7\x66\x4f\x9f\x4d\x1f\x8c\xf9\x69\xfe\x97\xf9\xcf\xc0\x71\xf0\x84\xfa\x75\x92\xc1\x3f\xbc\xe3\xf8\x36\xc6\xb1\xef\xbb\x00\x12\x0e\xc9\xf9\x21\xa1\xda\x02\x23\xb3\xa6\x61\xe8\x90\xb6\x59\x85\x21\x63\x39\x16\x99\x40\x17\xb1\x85\xdc\xe8\x65\x07\xb9\x57\x65\x75\xb1\x22\x0f\x06\xcc\x7b\xe7\xc7\xdd\x3f\x2f\x2b\x5e\x74\x7b\x91\x02\xdf\x5d\x33\xba\x56\x2e\xb7\x85\x1d\xd3\xfd\xa7\x3c\x3d\x32\x8f\x59\x4f\xd8\xd7\x48\x38\x88\x54\x42\x70\x64\x9a\x82\x9e\x42\x1a\xae\x80\xa0\x4e\x05\xaa\x43\xe9\xb4\xea\xb2\xa2\x28\x48\x54\x68\xa9\xba\x4b\x60\x89\x65\x31\xa3\xa0\x0c\x70\x92\x25\xa6\x2c\xba\x59\x67\x51\xfd\x5f\x07\x65\xbf\xde\x6a\x6c\x43\xfb\x4c\x89\x62\xb7\x27\x2f\xe8\xd0\xae\x67\x8e\x1e\x67\xb9\xa7\xbf\x1c\x57\x93\xbc\xea\xe5\x55\x89\x05\x48\xf5\x19\x8c\x5d\x11\x1a\x01\xa3\x87\xa1\x4b\x70\x98\x93\x74\x9a\x12\xb1\xe3\x20\xcf\x40\x8c\x27\x6b\x50\xf4\x59\x82\xd6\x5c\x21\xb1\x83\xd0\xa5\x2e\xcd\x1c\xf4\xb7\xd3\x78\xeb\xaf\x5f\xde\xb8\x63\x77\xfc\xf9\xf1\xd2\x3d\xfb\xf3\x0f\xe8\x94\xd5\x1b\x35\xf4\x9b\xc1\xc3\x2b\xdf\x48\xae\x5f\x9b\x11\xcd\xdb\x94\x12\xf8\x8c\xc4\xf3\x2e\xe0\x14\x8b\xf1\x3d\x4a\x0c\xd5\x20\x12\x28\xc4\x10\x11\x49\x42\xc9\x82\x1e\xd6\x81\xad\x93\x06\xe3\x90\xda\xcb\xdd\xca\xa9\x42\x65\xca\x90\xc5\xef\x6d\xa8\x97\x63\xff\xf0\x6f\x2b\x4c\xdb\xd9\xb9\xf0\xc6\x32\x3b\x56\x8e\xae\x3f\x86\x69\xd1\xfe\xf8\x81\xbd\xa7\x92\xeb\xd3\x90\x23\x34\xd1\xe1\x05\x8d\x09\x2d\xc5\x0c\x02\x41\x07\x9e\xa7\xb9\xbe\xce\x3a\x41\xcc\x72\x0c\xf6\x7c\x8d\x32\x29\x26\x26\x78\x5a\x09\x74\x4e\x70\x88\x0c\xba\xc8\x16\xd5\xdb\x1e\x1e\x78\x69\xd9\x86\x69\xd3\x0b\xcd\x29\x9b\xa3\x45\xb7\x2a\x6f\x6e\x6d\xfb\xc3\xfc\x25\x8d\x50\x4a\x03\x7b\x68\x81\x9b\x07\x5e\xe8\x22\x4d\xfe\xd9\x9e\xdd\x6f\x4d\xb8\x72\xea\xcc\x80\xc1\x59\x97\x14\xe8\x3a\xe7\xf7\x9a\xbd\xaf\x1c\xf9\x7e\xa5\xd5\xbb\xae\xfd\xd7\x9c\x2d\x99\x2f\x48\x89\xc5\x86\x4c\x8a\x66\x5d\xc7\x16\x0c\xce\xa2\x28\x28\x05\xba\x44\x38\x38\x96\x45\xac\x31\xd0\xa3\x49\x45\x04\x34\x65\x38\x36\x72\x58\xdf\xa2\x29\xa4\xe2\x04\x8b\xde\x41\x3f\xe4\x7e\x52\xab\x40\x8f\xe1\x2b\xee\x17\x2f\x54\xa8\x78\x95\xbc\xb7\xcb\xf7\x19\x5c\xad\x4e\xb9\xdc\x9f\x3c\xac\xda\xb3\x4f\xb5\xa2\xa7\x93\xfb\xbf\x08\x91\x4c\x2b\xc0\xb5\x75\xd2\x63\x69\x8a\xd5\x3c\x3a\xe2\xa1\xa0\x13\x2c\xed\x93\x80\x73\x03\x09\x8a\x88\x17\xe9\x50\xa2\x30\xef\xf3\x54\xec\x68\xc2\xcb\x26\x8f\xee\x39\xb5\x4a\xb5\x4d\x5f\x65\x9d\xf2\x56\xd5\x60\x8c\x5a\x38\xcb\xdc\xef\x57\x6f\xfd\x75\xd4\xf6\x4a\xf9\xfb\x2c\xbb\x75\x7a\xe5\xbe\xa6\x49\x06\x37\x07\x06\xe6\x80\x87\xe2\x40\xa0\x75\x83\x55\xd5\x58\x8a\x44\xcd\x13\xa1\xc4\x08\x9a\x25\x7b\x01\x52\x5c\x0b\x59\xa1\x09\xa4\x08\x01\x42\xd1\x5e\x14\xce\xf8\x97\x73\x64\xab\xef\x3f\x18\x36\x36\x57\x4a\x16\xf9\xfb\xa8\xd0\x90\x35\x3f\xdd\xff\xe9\xe1\xb7\xf5\x9e\x6e\x33\x7e\xad\x50\xdc\x38\x34\xa2\x62\xe6\x55\xef\x12\x8b\x4f\xd2\x2c\x46\x11\xa5\xc5\x11\x63\x29\x80\x76\x6d\x07\x61\xce\x55\x08\xdd\xc1\x1c\x29\x51\x8c\x27\x70\x76\x44\x41\x8f\x77\xbd\x98\x06\x7a\x00\x1d\xe9\xe5\xa7\x5f\x5a\xe8\xfc\xde\xaa\xce\xf0\x73\x67\x57\xcc\x3b\x72\xe5\x7e\xdb\x1d\x03\xb2\xce\x1f\x7d\x6d\x0d\x31\xe1\xc4\x89\x3d\x3c\xcc\x72\x39\xf3\x3a\xb0\x89\x4f\x13\x2c\x48\x00\xdd\x44\x26\x6b\x33\x61\x6c\xc8\xa2\xad\x93\xae\x66\x21\xc6\x8d\x75\x60\x04\xac\xae\x44\x91\x15\x1b\x2a\x8c\x08\xcd\x37\x7d\x21\xf0\xb8\x97\x4d\xde\x39\xbe\xd8\xdd\x63\x5b\x66\x9e\xfd\xb5\x69\xc1\x1f\x2a\x7f\x50\xfb\xfa\xc6\x93\x1f\x9d\x1f\xfa\xec\xe4\xaf\xab\x77\x7c\xd1\x75\xe6\xb0\xec\x99\x17\xe9\x4b\x98\xd1\x85\x80\xe5\x59\x8c\x89\xc0\x88\x15\x19\xda\x90\xd0\x42\x0b\x92\x90\xe4\x02\x02\xf8\x3e\x88\x0d\x2e\x8a\x18\xdb\x82\xa4\x15\x6a\x84\xe6\xb2\x92\xe7\xfe\x5f\x6a\xfc\x5f\xc1\x8c\x7f\xda\x91\xa6\xa7\x0d\xe8\x93\xd2\xe8\x45\x0c\xb9\xb1\x64\x5f\xb9\x47\x0b\xa5\x82\xdf\xc0\x0a\x0d\x7a\xe4\x62\x77\xf6\x69\xfd\x7a\xe7\x91\xf9\x8b\xb6\xe9\xf0\x74\x7f\xfa\xc3\x89\x4d\x93\x4b\x2d\x07\x22\x2e\x0c\x1d\x85\x65\x38\x45\xf5\x19\x59\x65\xf8\x20\xe2\x90\x64\x53\x46\x80\x69\x2f\xa6\xec\x98\x77\x15\x5f\x8b\x18\x5e\x8b\x45\x8a\xd2\x44\xcb\x01\x89\x57\xa5\xf6\xdc\x9f\xfb\x90\xa5\x9a\xdd\x57\xcc\xdf\x86\xfa\xd5\x27\x4c\x6d\x3c\xe1\xab\xf7\x6b\x64\x9f\xde\xaf\x69\xe9\xbf\x57\x5e\x1c\xb8\xbf\x77\x92\x47\x63\x8e\xe6\x1a\x02\x1b\x59\x88\x93\x59\x93\xa0\x2c\x45\xc4\x14\x61\x40\x04\x5d\x8b\x32\x59\x2f\x0c\x2c\xda\x01\x74\x8c\x0d\x3e\x0e\x42\x37\x92\x33\xe2\xff\xf9\xe1\x6c\x07\x74\xc6\xff\x6e\x51\xc0\x0c\xcc\x92\xf5\xe8\xd3\x32\xa0\xfc\xcd\xdc\xd7\xbb\x66\xfb\x94\x04\x95\x5a\xdc\x0e\x5a\x66\x9e\xd2\x3d\xa1\x4f\x69\x4a\x44\x9b\x9c\xc7\x88\x11\x2d\x5a\x2c\x25\x91\x42\x68\xd8\x54\xc4\x72\x84\x22\x52\x98\x53\x51\x84\x7d\x60\xa8\x00\x4a\x6c\x6c\xd3\x0e\xa4\xbd\x0c\x78\xac\xef\x34\x2c\xe1\xf8\x8f\x77\xab\x6f\x1f\xff\xfc\x6a\xff\x81\x17\x52\x6e\xfd\xd6\xea\x93\x23\x5d\x3e\xa4\xdf\x39\x74\x76\x79\xcb\xce\xef\x4d\x48\xee\xd7\xa6\x0c\x45\x0b\x42\x3a\x34\x01\xc3\x60\x49\x50\xa1\x64\x85\x18\xeb\x01\x61\xf1\x2c\xe2\x0d\x48\x5a\x9c\xeb\xf0\x2c\x1b\x4b\x01\x20\x50\xa0\x19\x6a\x06\x5f\x7b\xd5\xae\xbb\x0b\x26\x2c\x3c\xb0\xb4\xae\x7d\xa8\xef\x2b\x7b\x7e\x2f\x9c\xfe\xe5\x89\x19\x3f\x8e\xa9\xb9\xbb\xc9\x53\x6e\x8e\xff\xdb\x8c\xda\x49\x26\xd3\x01\xaa\x4f\x42\x47\x52\x2d\x99\x55\x28\x01\xaa\x94\xef\x6b\x91\x18\xab\x3e\x21\x30\x7a\x18\xb8\x94\x6c\x50\x90\x56\x3d\xd2\x62\x68\x52\x33\x75\xf0\xaf\x22\xfa\xbf\xf7\x50\xff\xb4\x3b\x48\x4f\x2b\x9d\x2b\xe5\x3f\x50\xa8\xf5\x7f\xfc\x4c\x2e\x59\x55\x45\x23\x2e\x6f\x6b\xf3\xf0\x97\xc2\xe7\xeb\x4e\xea\x5b\xf6\xca\x33\xbd\xf9\xd4\xf9\x85\x0f\x8c\x39\xfe\xec\x56\x72\x7d\xca\x27\x55\xde\x8b\x45\x8d\xb2\x63\x0a\xd0\x34\xa7\xe8\x6e\x2c\x91\x8c\xa7\x85\x3c\x34\x1c\x5f\xf1\x25\x4f\x84\x02\xf0\x3d\x83\x0e\x25\x1f\x2b\x66\x46\x10\xe1\x36\x6e\xf7\x41\x2b\xb2\xab\x39\xba\xf1\x1b\x0a\x7f\x7a\x70\xce\xfc\xf3\x3f\x57\xa8\x98\x63\x51\xf9\x4b\x37\x77\x36\x98\x7d\x75\xed\xca\x59\xc9\x4d\x3c\x0a\x6f\x20\xcd\xe1\x19\x96\x40\xb1\xc8\xb8\x58\x89\xd5\x58\x34\x03\xcc\xd3\x1c\xa1\x9a\x61\x4c\xba\x81\x6d\x68\x6a\x1c\x4a\x90\xe1\x14\x05\xc0\x17\x89\x3f\xfe\x65\xf6\xb6\xc2\xad\x97\xb5\xbe\x93\xf3\x23\xfd\xdb\xbc\xf3\xdb\xd1\xc5\x5e\x4b\x5d\x7e\xf4\x6c\xcb\xea\x7f\xaf\x91\x73\xfb\xe7\xa7\xbc\xdf\xbf\x7c\x72\x0b\x59\xa8\xca\xac\x4b\x09\x0c\xc7\x7a\x5c\x80\x03\x3d\xc0\x04\x52\x9c\x58\x52\x79\x9a\x60\x64\x88\xa0\xc6\xba\x9e\x47\x0a\x76\x6c\xf0\xa1\x89\x14\x0a\x67\x20\x5a\xd5\x7e\xf6\xf8\xf3\x4d\xa7\x9f\x24\x4e\x17\xe8\xaf\x66\xbd\x5e\x74\x69\x97\xae\x5e\xa5\xe9\x03\x46\xcb\xe8\xf7\xf3\x6d\x67\x7d\x17\x64\xbe\xcf\x4f\x68\x36\x83\x34\x9a\x0e\x62\x85\x54\x79\x89\x07\xac\x42\xab\x08\xc4\x1e\x23\x05\x9c\x1e\xf1\x3e\x6d\x85\x7c\x18\x03\x28\x72\x16\xa5\x89\x84\xe2\x84\xca\xbf\x89\x3f\xff\x6f\x28\xfc\xd3\xd0\x35\x3d\x2d\x35\x4b\xb6\xb7\x5f\x0c\x05\xd8\x74\xfb\xd4\xa3\x25\xbe\x5e\xf9\x50\x28\xf0\xf0\xdb\x1f\x72\xcc\x5d\xb1\xbe\xda\xb8\xaf\x5b\xe1\x5b\xd3\xbf\x2c\xb8\xea\x53\x74\x29\xf3\x18\x89\x84\xa1\x60\xe8\x4a\x8c\x00\x01\xa4\x80\x09\x82\x40\x90\x2d\x24\x88\x31\xe6\x18\x49\x89\x39\x59\xd3\x59\x5f\x0f\x68\x5e\x74\x08\x6c\x45\x40\xd7\x6c\x5f\xc3\x19\x88\xe4\x77\x9a\x58\x7b\xff\x90\x47\x66\x87\x5a\xe3\x8e\x4e\x29\x3d\x34\x47\xee\x4f\x0a\xe6\xe5\xdf\x5e\xb6\xe2\xd2\xdf\x37\xca\x5e\x29\xff\xc7\xd4\x8f\x92\xcd\xd1\x1e\x89\xbc\x12\x72\x36\xab\x6b\xb6\x26\xfb\x26\x60\x5c\xc6\x61\x45\xcd\x55\x44\xc6\x10\x6c\x12\x4a\x24\x65\x1b\x5e\x68\x12\xac\xad\xeb\xaa\xa8\x67\x70\xa2\xa3\x14\x1c\xbe\xf7\xaf\xdd\xd5\x16\xfe\xd8\x9a\xda\xd5\xb6\x6b\x8b\xfd\x93\x85\xb9\x6d\x8b\x15\x1b\x7a\xff\xbd\x41\x2b\x9b\x8e\x1b\xd1\x69\x58\x72\x47\x39\xc8\x22\x69\x49\x21\xb8\x00\xb8\xae\xc6\x48\x8c\x08\x38\x46\x90\x08\x1a\x33\x54\x04\x49\x83\xe1\x25\x8a\x88\x23\x85\xb4\x00\x1f\x20\x46\x72\x0c\xc0\x25\x0e\x85\xeb\x3d\xef\x95\x9e\x5d\xbd\xd8\xe9\xbd\x29\x03\x77\xca\x9f\x3d\xfb\x7a\x6c\x3c\xa3\x5d\xfd\x4e\xdf\x1c\x6e\x90\x63\xf8\x69\xef\x62\xaf\xcc\x23\x3b\x13\x3e\x79\x63\xcd\xb5\x42\x0b\x9b\x0c\x4d\xd9\x04\xa9\x40\x9f\x41\x3a\x56\x54\x46\x8c\x09\x4d\x93\x65\x18\xda\x24\x41\x00\x0e\x40\xc6\xf6\x6c\x24\x00\x59\x55\x5e\xea\xeb\xfe\x69\x68\x9c\x9e\x96\x35\x25\xcb\x96\x17\xfb\xba\x3a\xe5\x76\x4e\x3c\x53\x6b\xcc\x96\x1d\x5f\xf5\x18\x73\xe0\xf8\x8e\x72\x79\xfa\x12\x47\xb2\x8c\x5c\x7e\x52\x3e\xb1\xfc\x87\xfd\xd9\x5e\x4f\xee\x22\x0e\xc4\xb2\x6d\x40\x23\x80\xac\xc1\x49\x5e\xe8\xf8\xd0\x67\x45\x8d\x72\x24\xc1\x77\x42\x8f\x77\x18\x43\x64\x40\x40\x30\x98\xc0\x02\x8b\x42\x56\xc3\x1c\x93\x38\x14\x02\xf2\xc8\xa0\x01\x75\x2b\x97\xe1\x6a\x5c\xac\x1d\x82\x56\xa9\x9f\xba\xb7\x9c\x85\x73\x36\xa5\xc2\x8d\xa9\x39\xca\x3d\xf9\x3e\xf3\x4b\xff\x84\x66\xcb\x08\x02\xc2\x90\x49\x0e\x00\x43\x85\x38\x60\x25\x2c\xba\x82\xce\x42\x8b\xe3\xc3\x18\xc5\x2c\x4d\x78\x58\xf1\x4d\x01\xea\x06\x6b\x2a\x94\x43\xc2\xc4\x66\xb7\x2c\x37\xec\xbd\x86\x9f\xa5\x33\xfc\xc7\x9b\x67\x34\xaa\xbd\x90\x3f\xf0\xe3\xa2\xee\x9b\xb6\xf5\xdf\x93\x6d\xd3\xcf\x15\xec\x25\xd9\x92\x4c\x47\x29\x8a\x50\x8b\x74\xc2\x0e\xc8\x90\x0c\x63\x96\x81\x96\x1d\x45\x24\x60\x35\x46\xb4\x4c\xc3\x21\xed\x80\x33\x08\x14\x47\x12\xa7\x38\xae\xac\x2b\x92\x90\xc1\x6d\xa0\x5b\xec\x60\xbf\x82\x52\xa8\x54\x99\xf9\xca\xe0\x0a\x29\xdf\x4c\xb4\x2f\x5f\x5c\xbc\xbf\xd3\x27\x8b\x1e\xce\xbb\xd6\xa6\x55\xd7\x2e\x49\xa6\xb4\x00\xc0\xa4\x09\x3f\xa0\x90\xaf\xe8\x30\xb2\xc4\x18\x92\xa6\x8d\x88\x28\x96\x44\xcc\x21\x99\xb3\x63\x8a\x0b\x78\x0b\x50\xa4\x4c\x43\x5d\x0b\x21\x4f\x27\x8e\xe0\x92\xe7\x0f\xff\x36\x2d\x5f\xed\xb7\xaa\x57\xce\xfb\xc6\xb5\x35\x53\xda\x34\x6b\xf8\xe1\xbe\xf0\x95\x27\x7e\xc7\xd6\x1b\x16\xd7\x7b\x2e\x66\x5e\x20\x22\xe1\xd7\xc6\xa1\xc9\x45\x3a\xe3\x7a\x22\xeb\x72\x8a\x14\xca\x08\xd0\x22\x60\x3c\x57\xa6\x79\x82\xf6\x58\x16\xf1\x51\xa4\x08\x52\x2c\x2a\x21\xe1\xe8\x84\x80\xf4\x97\xfa\xba\x7f\x9a\xfd\xa4\xa7\x15\x68\xf3\x9f\x7d\x5d\x85\x05\xef\xb4\x7f\x5a\x79\x7f\xf6\x5b\xe5\x5f\x39\x38\x2f\x7d\x97\x7a\xe5\xd3\xd5\x87\x52\xdf\x5f\x7c\x38\x7d\xc0\xda\x2a\x43\xcf\x9c\xc8\x7c\xd3\x9d\x58\x5c\x2f\x32\x55\x5a\x15\x11\xa4\x2d\x8c\x63\x4a\x34\x64\x4e\x14\x09\x13\x51\x1c\x8e\x84\xd8\x8f\x68\x00\x24\xd3\x0e\x65\x86\x94\x62\x59\x85\x0e\xe7\xba\x89\x43\xe1\xf6\xdd\xde\x2d\x0b\xde\x5c\x28\xee\xf8\x69\xfa\xdf\xde\x9c\x3f\x3a\xa4\xbd\x39\x3e\xcb\xb5\x76\x29\x35\xc7\xcd\x19\xb7\xf2\x95\xa5\xdf\x25\x37\xbd\x02\x32\x94\x48\xcd\xf0\x44\x31\x30\x0d\x9d\x0d\x35\x55\xd7\x0c\xd6\x0b\x75\x40\x87\xba\x11\xeb\x21\x36\x28\xc3\x94\x54\x41\x54\x65\x33\x84\xb1\xac\xab\x62\x62\xb3\xd9\x81\x56\x38\xf6\x92\xfb\xf6\xb1\x3d\x8b\x7e\x7f\xb6\xbb\x37\x2d\x37\x3b\xe5\xaf\xf7\xb7\x0e\x3c\xbe\x73\x59\xe5\xb5\x29\x13\xb7\x24\x79\x03\xa4\x02\x4a\xf3\x43\x48\xd9\x32\xa9\x0a\x56\xac\x38\x32\x85\xa1\xed\xaa\x3c\xa5\x52\xb2\xa3\xf1\x11\xc7\x88\xac\x28\x49\x06\xab\xdb\x9c\x1b\xb3\x4e\x06\x2f\xb3\x9f\x16\x4f\x5f\x9b\x35\xea\x5a\x61\x61\xd1\x39\x85\xbb\x66\x19\x5a\xf0\x49\xa5\x6f\xbe\xaa\xe5\xcf\x57\x16\x1d\xff\xa3\xf1\x6f\x6f\x80\x0f\x92\x6b\xb6\x48\x0b\xb1\x62\x08\x06\xc1\xf8\xb2\x8e\x59\x87\xd1\x65\x46\xf3\x78\x19\x1b\x0c\x12\x38\xc7\x77\x6d\x92\x70\x64\xd5\x97\x23\x2f\x86\x3e\x10\x79\x9e\xfc\x3f\xb3\x2f\xd7\xf9\x6f\x8b\xb3\x76\xfe\xb5\xc7\xce\x77\xce\x7e\x52\x7e\x68\xd1\x47\x3d\x76\x70\x1f\xdc\x5b\x59\x2b\xa5\xd9\xcd\x3d\x79\x27\x94\xfb\xf2\xce\x6a\xea\x68\x89\xf4\xb4\xf0\xd9\xe9\xc7\x93\x8a\xfe\x07\x7d\xc7\xfc\x61\xed\x1a\x16\x18\x35\xa6\x48\xe9\x57\x2f\x18\x6e\x99\x36\x8c\x37\xe9\x93\x21\x63\x4b\x75\x0d\xab\xac\xd0\x2f\xf4\xdb\xb7\xfa\x45\x79\xea\x43\x13\xad\xe5\xd4\x34\xef\xe2\xc8\x25\x59\xde\x19\xd5\xa1\x59\x91\x79\x1d\xb3\x15\xf8\x7e\x73\xad\x01\xed\xf2\x7e\x5b\x76\x7a\xaf\x24\x5f\x1f\x4a\x66\x84\x5d\x21\x80\x3c\x08\x35\xd3\x02\xba\x4b\x6b\x81\xaf\xd9\x88\xa0\x23\x82\x23\x48\x86\x83\x11\x27\xf3\x12\xe5\x62\x92\x52\x64\x4d\x52\x3c\x3b\x31\xdc\xe7\xf5\x42\xbf\x6d\xe4\xa6\xf7\xed\x53\x6a\xe7\xac\xc2\xb9\x7c\x61\xf6\x94\x6f\xa7\x99\xf2\xc7\xd3\xd2\x83\xbd\x5f\xe5\xcf\xb1\xa9\x69\x92\x25\x04\x23\x47\xc4\xc0\x66\x08\x18\x93\x8e\xa0\x70\xa6\x6b\x0b\x9e\xc1\x28\xb4\x60\x04\xb1\x49\xea\x24\x8d\xf8\x98\x0d\xe5\x80\x80\x9e\x19\x21\x12\x41\xc0\xbd\x3c\x40\x2d\x79\x75\xcf\xeb\xc0\x5f\xfd\x5e\xae\x0f\x8e\x69\x3f\x8d\x7a\xa5\xf2\xdc\xfd\xe5\xae\xe6\x6a\x3c\xaa\x4b\xcd\x7d\x31\x39\xf0\x6e\x95\xcc\x53\x8b\x27\x2c\x20\x2e\x19\x0b\x8a\x44\x8b\x84\xe3\xd3\x0c\x0f\x29\xcb\x46\xa2\x16\x7b\x8e\x84\x7c\x43\x43\xac\x6a\x89\x9c\xcb\xfa\x82\xcf\xdb\x01\xd0\x24\x4e\x35\x9c\x8c\xd6\xf0\xa3\x36\xab\xb5\xe3\xd2\xa7\x53\xcb\x35\x7a\xf6\xde\xf3\xda\x5f\x6e\xfd\xf9\xcf\x31\xa7\x9f\x6e\x3e\x38\xa5\x76\xd5\x7d\x97\x7f\xea\xf8\x60\xca\x8b\x77\x62\xb5\x8a\xef\x6f\x36\xf4\x5b\xbf\x79\xb6\x4b\xee\xc8\x1a\x4d\x96\x7f\x9d\x56\xbd\x69\xe9\xbc\x1d\x77\x92\xd5\x5e\xcd\xbe\x72\x1e\x99\x5c\x4d\x59\xce\xb4\x55\xd9\x35\x1c\xdd\x8c\x75\x46\x45\x9e\x19\x20\x64\x19\x14\x49\x00\x8d\x8f\x42\xc7\xf2\x58\x5a\x12\x01\x61\x7b\x01\xd6\x08\x3e\x8c\x34\x15\x25\x80\x47\xd0\xdb\xfa\x6e\xca\x39\xab\xc3\xae\xf9\x1f\x37\xda\xde\xab\xf3\xc7\x97\x66\xf5\x7a\xb2\x2e\xb5\x5f\xe3\xef\xaa\x3d\x2f\x5e\xe3\xd3\x7a\xc3\xdb\x25\xd7\x64\x0d\xdb\x5a\x44\x09\x90\x45\x10\x3a\x24\x6f\xd3\x5a\x8c\x80\x20\x72\x0a\x24\x15\x46\x23\x49\xce\x95\x75\x8f\xb5\x41\x28\x12\x46\xa0\x01\x9b\x4d\x24\x82\xb2\xf1\xc4\x96\x45\x27\xde\x5f\x7e\x39\xad\xee\x96\xc2\x43\xfb\x0c\xa9\xfd\x5a\xfd\xfe\x87\xe8\x25\xbb\x0e\x77\xe9\xf9\x4e\x8b\xc1\x8b\x5a\x76\x49\x6e\x26\x73\x1d\x14\x1a\x48\x8d\x54\x60\x4a\xbe\x69\x43\x99\x61\x79\x48\x84\x9a\x61\x47\xbe\x24\x62\x4c\x84\x01\x76\x63\x29\x44\x91\x0e\xb8\x20\xb4\xdd\x17\xb5\xb7\xff\x15\xb4\xe5\x2b\x7f\x79\x89\xed\x5d\xea\x2d\xef\x7d\xba\x59\xa7\xfc\xe2\xd6\xc6\x18\x5d\xbf\x86\x3e\x20\xde\x3c\x99\x9a\xfe\xac\xe5\xa4\xcc\x5f\x12\x24\x26\xb3\x40\xa4\x82\x19\x46\x37\x55\x35\x36\x3c\xc7\x53\xf4\xd8\xb7\x69\xd5\xd2\x3d\x42\x14\x54\x55\x76\x55\x53\x03\xae\x2b\x59\x0c\x25\x51\xb2\xc9\x42\x37\x41\xd0\xde\x38\xdc\x61\x56\xcf\x33\x39\xdf\xb9\xfc\xcb\x03\x66\xd4\xbe\x67\x6c\xbd\x23\x0f\xf7\xf4\x9d\x51\x6a\x71\xcb\xae\x7b\x7f\xe2\xb2\x8f\x4c\x32\xb5\x82\x23\xb8\x02\xa5\xf2\x24\x41\x63\x47\x41\x84\x23\x5b\xb4\x6c\xea\xba\x68\x8a\x91\x1e\x40\xd2\x40\x91\x24\x99\x94\x6d\x02\xca\x80\x36\x1f\xe9\x0e\x76\x12\xa7\x47\x0f\xf6\x3f\x7a\xa1\x7b\xd5\x7d\xfe\xb6\xd6\x9d\x7b\x74\x3b\x7d\x7f\xcc\xa6\x3a\x29\xd3\xbe\xae\x5b\xeb\xb5\x57\x47\xdd\x58\xf7\xd5\xc2\x0a\xc9\x7d\x6e\xe2\x40\xb3\x6c\x99\xa4\x1d\x0b\xca\xa1\x6c\x72\xd0\xe7\xe5\xc0\xa7\x45\x8f\xa5\x55\x9a\x09\xb1\x69\x0b\xae\xca\xf8\x0a\x54\xb9\x90\x8d\x63\x97\x80\x09\xc0\xe2\xe9\xef\xd7\xce\xb7\x78\xe6\xc7\x27\xb3\x9e\xbe\x7b\xf8\xf5\x31\x6d\xc1\x8c\x5f\x5a\xf6\xc9\xfa\x5e\x9f\x5f\x1e\xd4\x58\x57\xff\x83\xcf\xaa\x7d\x95\xdc\xf4\x48\x92\x2e\xa7\x1b\x31\x85\x64\x09\x28\x52\x4c\x13\xac\x60\x09\x66\xec\x0a\xa4\x61\x52\x82\x4d\x6a\x6a\x10\x31\x1a\xef\x92\x21\xa5\xc2\xd8\x41\x0a\xe4\x13\x03\x78\x72\x3f\xac\x51\xed\xca\x91\xa1\x9f\x43\x6f\xd5\x8c\x56\xf5\x56\x36\x6a\xb1\xf4\x51\xb5\xd7\xea\x55\x3d\xf8\xb1\x33\x67\xfc\xaf\xa7\xb3\x26\x17\xe1\xcb\x05\x7c\xe0\xba\x8c\x2e\x4b\x1c\x34\x14\x52\xd5\x02\x99\xc3\x08\x69\x86\x18\xda\x1e\x09\x02\x49\x67\x0d\x01\x85\x81\x11\xa9\x66\x68\x68\x90\xb7\xfe\x5b\x21\xe7\xc5\x2f\xdd\x20\xbd\xef\xd4\x7d\xb9\x66\xae\x82\x85\x68\xb2\x50\xd9\x65\x29\xf9\x07\xe5\xfd\xe2\xc7\xbf\xce\xd7\xfc\xc4\x9a\x7d\x7e\xc6\xa2\xde\x95\x93\x0c\x95\x52\xed\x90\x37\x04\x52\x76\x39\x0f\x21\x92\x62\x74\x17\x9b\x12\x0f\x59\x0f\x41\x37\x96\x83\x98\x30\x64\x8b\x8e\x22\x5d\xa7\x14\x48\x03\xe2\xdf\x41\xc9\x2f\x16\x22\xff\x6a\x97\x9c\x3f\x9d\xdc\x74\x64\xc0\x80\x31\x75\x3e\x3b\x1d\x65\xfd\xf5\xfe\xca\xa6\xcb\x37\x6d\x9c\x7b\x7f\xc2\xb5\x5a\xd7\xbb\x56\xe2\x5e\xf8\x5f\x8a\x58\x6c\xcd\xb3\x70\x79\x99\x25\xc5\x6a\x2c\x41\xf6\xa3\xcf\xe7\xf4\xac\x75\x7d\xb9\xbd\xb5\xdd\xbe\xfe\x97\x9f\xff\x5c\xfe\x6c\x96\xe4\x06\xae\x6b\xaa\x2e\xb2\x19\xcf\xc2\x5e\x48\x22\x3d\xa4\x4c\x3f\xe2\x5c\x53\x0a\x62\x13\x3b\x9e\xc5\x47\x0a\x4b\xfb\x3e\x29\x29\x00\xc3\x98\x26\x05\x9d\x4f\x70\x4b\x53\xf2\xc2\xd7\x39\x98\x5e\x93\x0f\x74\x38\x7c\x7a\xf7\x26\xee\xbb\x23\xaf\xb6\xdd\xee\x14\xf2\x72\xbe\x12\x4c\x68\x3b\xe2\x8f\x39\xa3\x93\xac\xc7\xce\x68\x8c\x4a\x05\x3e\x88\x05\x83\x8d\x41\x2c\xb3\x94\x22\x88\x14\xc3\xb2\x12\x23\x20\x01\xb8\x16\x21\xf8\xae\xa4\x30\xaa\xae\x21\x96\xb4\x6d\x29\x76\x13\xe7\x9a\x86\x45\x67\x0c\xa9\x07\x67\xdf\xb9\xf9\xeb\x97\xa7\x27\xf7\xd9\xfc\x4e\xd7\xed\x17\xfb\x1e\xd5\x7f\x48\x6f\x90\x67\x57\xc5\x8f\x16\x50\xdf\x27\xd7\x9d\x20\x49\x41\x53\x90\xc9\x80\x93\x58\x8e\xd1\x89\x30\x0c\x3d\x64\x92\x01\xc5\x20\x11\x12\x04\xa7\xba\x98\x30\x28\x95\xb1\xa4\x30\x56\x64\x18\x83\x44\x94\xab\x27\x2b\xbd\xf1\x85\x92\xef\xdd\xd2\xa3\x67\xf6\x1c\xd9\xf1\xd7\x19\xb0\x72\x7f\xef\xd6\xc8\x46\x79\x52\xe7\x75\xef\xf4\x3c\xd7\x8e\xfb\x99\x07\xd7\x26\x56\x4d\xd4\xbc\x80\xd1\x62\x56\xb0\x58\x64\x04\xa1\x20\x2a\xac\x21\xc9\xa6\x2a\x85\xa6\xa3\x08\x9e\x66\xf3\x7c\xcc\x70\x22\x43\xd2\xba\x20\xbb\x11\x24\x71\x06\x57\x1e\x1d\xf2\xf4\xc9\x9b\x4b\xb9\x61\x3f\xb8\xb5\xe2\xc9\xf3\x2a\x83\x3b\x8a\x4d\xaa\xb4\x7f\x00\x7f\xcc\x1b\x17\x28\x6e\x94\x6c\xb9\x3b\xf3\x72\x6d\x09\x73\x8d\xc7\xf2\x8e\x8c\x19\x24\x8a\x81\xe8\xb1\x40\x33\x50\x4c\x44\x50\x8b\x05\x3d\x14\x54\xd2\x56\x65\x21\xc2\xa1\x1a\x4b\x8e\x11\x44\xb1\x81\x95\x00\x33\x89\x47\x10\xb5\x1e\x2d\x9e\x5e\xa9\xf3\x91\x1f\xf9\x92\x3f\x4e\x79\x70\x76\xff\x90\x4a\xa9\x03\xee\x9f\xab\xde\x37\xa5\x5b\x55\xff\xce\xf7\xcd\x2a\x4c\x4e\xae\x5f\x53\x04\x41\x41\x8a\xd2\x44\xde\x8f\x25\xcb\xb1\x63\x97\x42\x3c\xab\x53\x72\x44\xa8\x48\x27\x6d\x13\x08\x14\x23\x93\xd8\x0c\x38\x2d\x74\x02\x35\x80\x66\x06\x20\x94\x8f\xe7\x37\xe9\xac\x1c\xeb\x96\xf3\xc7\x65\xdf\x8f\xf6\x2a\x54\xdf\x5a\x82\xac\xb7\xdd\x3f\x70\xf1\xdb\xdf\x98\x05\xfd\x5f\xb9\x51\x6c\xd4\x0b\x8d\x6f\xe9\xd7\x1e\x0e\x1d\x99\xed\xc8\x8e\x0b\x37\x66\x9d\xff\xb2\xf0\xd3\xc3\x37\x77\xfc\xb4\xa2\xce\xe3\xec\xfd\x47\x7e\xf8\x64\xcf\xaa\x42\x73\x2f\x27\xd7\xa5\x4c\x27\x90\x25\xd3\x8e\x1c\x9f\xb6\x3c\x36\x94\x55\x51\xe5\x3d\x5e\x50\x4d\x36\xf2\x4d\x82\x76\x18\x4c\x62\x1b\x3a\xaa\x69\x6a\x26\x63\x43\x27\xe6\xa2\x97\xc1\x41\x1d\xf3\x97\x6d\x56\xff\xef\xd4\xc3\x9d\x7a\x6d\x5b\xb1\xf8\xd9\x86\x0e\x55\x97\xf6\x6f\xd5\xd4\x2f\x36\xfd\x60\xdd\x65\xd5\xbe\x6a\x55\x65\x46\x72\x53\x24\x47\x5a\x11\xa1\x92\x2e\x81\x3c\x53\xb5\x40\xc4\x4a\x66\x04\x61\x84\x3c\xc5\x14\x21\xd6\x03\xca\x15\x39\x59\x53\xa1\x62\x28\x06\x36\x08\x52\x8f\x13\x80\x50\xba\xad\xfa\x6c\x66\x90\x65\xe8\x99\xbf\xd0\xf2\xfa\x1d\xc7\xec\x1f\x9e\x0b\x97\x39\x94\xde\xe4\xc3\x7b\xb9\xf5\x0a\xdf\xc5\x29\xdf\x67\x5e\x63\x31\x71\x93\x10\x89\x11\x63\x5a\x11\x4d\x23\xc3\x88\x62\xde\x15\x54\x1e\x8b\x52\x64\x31\x32\xcd\x98\x8e\xc9\x4b\xa6\xa6\x90\xa6\x19\x87\x50\x84\x82\x13\x08\x20\x03\xd1\xa0\x82\x93\x07\x7d\xc4\x9e\x7b\x34\xe6\x74\xca\x95\x57\xf5\xa7\xc1\xdf\xf7\x5a\x3d\xfc\x0c\xe7\xee\x7d\x6a\x7c\x4f\x6d\xdf\xab\x65\x3f\x4c\x2e\xb7\x2c\x90\xa1\xc8\x51\x46\x40\x48\x92\x41\x33\xbe\xfe\xff\x63\xed\xaa\xc3\xa3\x38\xde\x7f\x08\x01\x82\x5b\xb1\x96\x96\xe0\xd0\x42\x0b\x2b\x77\x38\x44\xa0\x50\x5a\xa4\x48\x29\x7e\xeb\x7e\x6b\xb7\x86\x85\xc3\xa1\x48\xd0\x50\xb4\xd0\x52\xdc\xdd\xa1\xb8\x5b\x29\xee\xee\x7a\x38\xfc\x9e\x25\x37\x7c\x7f\x09\xe1\x09\x0f\x4f\xfe\x81\xcd\xde\xec\x3b\xef\xbc\xf3\x79\x75\x66\x67\x65\x5d\xf2\xb1\x1e\xc6\x23\x50\xb0\x22\x61\xa4\x57\xf2\xeb\x38\x4d\x98\x92\xaa\x05\x54\x13\x46\x10\x53\xb1\xd3\x39\x78\xf8\xd8\xe3\x72\x5f\xc6\xff\xdc\x0d\x6f\x76\x6b\xc1\xeb\x7d\x0f\x3a\xdd\x4d\x3c\xc8\xf7\x6f\xb0\xb9\x54\x93\x8b\x67\xc5\x51\xb3\xca\x9a\x31\x99\x6c\x6b\x78\x4e\x44\x59\x8e\xa4\x3c\x1a\xe5\xf1\xf9\x24\x8a\x53\x1d\x9f\x66\xc1\x01\xc2\x92\x64\x45\x47\x28\xcb\x16\x55\xd2\x63\xe1\x1e\xc1\x24\x3d\x2c\x1d\xfe\x44\xc2\xfb\xb6\xa6\xf7\xe6\xe5\xc7\xa6\x2c\x1c\xf7\x53\xa1\xd5\xb5\x7e\x98\x16\xb1\xe7\xc5\xbd\x95\x85\x46\x0f\x3b\x0b\x9f\x2d\x53\xa3\xfd\xf0\x29\x3b\xfb\x7f\xfa\xb7\x06\xd2\x5f\x29\xa5\x28\xc6\x86\x7d\x30\xe7\x43\x2c\x02\x55\x60\xc6\x92\x79\x1e\xa2\x11\x23\x80\x23\x8e\xa6\xfb\x74\x45\xf7\xa3\xac\x27\x00\x7b\xfc\x96\xc4\xf1\x3e\xcb\xc1\xd2\xdf\xa5\x94\x05\x39\xf6\xea\xa7\x73\xbb\x1e\xce\x6b\x16\x73\xbd\xfc\xbc\xdf\x4e\x88\x57\xaa\x36\xf4\x9a\x5d\xc5\x37\x2f\xaf\x7c\x71\xe1\xbf\xd3\xf9\x33\xfb\xe0\x0f\x93\x96\x0d\xcc\x34\x2c\xd4\x2f\x6b\x98\x6c\xc1\x94\x4a\x09\x7e\x49\xf1\x89\x01\xca\xa7\x43\x12\xca\x22\x92\x8f\x50\x05\x93\xa1\xbd\x86\x6c\x92\xe9\x7d\xca\xa6\xcd\x2b\x1d\xca\x6f\x35\x2d\x9a\xaf\x7d\xa5\x15\x46\xa7\x7a\x7b\xea\xf4\x98\xcc\x7e\xd6\xb0\xf5\xce\x75\x43\xce\xe4\xdd\xb7\xf2\x8b\xa1\x99\xbc\x4a\xaa\x48\x34\x2c\xc9\x9a\x65\x53\x1a\x0b\xfb\x50\xdc\xf6\xc2\x5e\x8f\x47\x83\x34\x93\xc3\x65\x09\xd1\x61\xcb\x22\x34\xc5\x84\x2c\xaf\xe2\xe3\x4c\x14\x76\xac\xf7\xdd\xfe\xe4\x26\x43\xf7\x9f\xbc\xd2\x8b\xc8\xf5\x5d\xcc\x9b\x5c\x9c\x67\xed\x9a\xea\x87\x1b\x7e\x35\x7c\xf0\x28\xfe\xdf\x51\xf9\x37\x46\x76\xeb\x96\xb9\xab\x59\xb2\x21\x22\x0e\x6e\x10\xa8\x09\xd1\x1c\x8f\x29\x38\xab\x98\xac\xa3\xf3\xaa\x84\x72\xb2\x8e\x41\x0a\xa3\xd9\x01\x94\xb4\xfd\x2a\x81\xf0\x32\xea\xe7\x7d\x1f\x78\xe1\xaa\x94\x61\x75\xbe\xe0\x6f\x56\x96\xca\xfe\x57\x59\x36\xfb\xce\xbf\xcf\xec\x8e\xd8\x5f\xf5\xaa\xb1\xbe\xe0\xbd\x40\x91\xf1\x8f\x7f\xae\x97\xc9\x29\x06\x82\x98\x08\x82\x0b\x7a\x80\xd2\x55\x8b\xf6\x7b\x4c\x94\xb7\x29\x51\xd5\x09\xc5\xf1\xd8\x16\xe4\x33\x25\xde\xc4\x02\xb2\xc4\x05\x58\x54\x81\x74\x36\xbd\x2d\x6c\x9e\x4d\x9f\xeb\xe3\xff\x59\x18\xd1\xe8\x5e\x96\xba\x0b\xb8\x87\x6d\x96\x5a\x5f\xae\x1c\x83\x6e\x58\xba\x61\xe7\x0c\xce\x1e\x1f\x50\x32\x19\xcf\xa2\x15\xf0\x31\x86\x24\xe3\x3e\x4d\x0d\xa0\x0a\xa2\x09\x02\xe4\x45\x68\x41\x72\x28\xdc\xe2\x29\x0a\x91\x54\xde\x67\x4b\x18\xe3\xe3\x74\x44\x52\x1c\x0e\x7a\x1f\xcf\x33\xc5\x17\xe5\xb6\x62\x6b\xa6\x7c\xb7\x05\x1b\xbf\xa9\x0c\x9d\x73\x6b\x74\x84\xc7\xac\xc3\x8d\xcc\x37\xfa\x6c\x73\xb4\xff\xa5\x4f\xff\x50\x72\xba\x61\xac\x6a\x21\x9c\xe1\x53\x29\x49\x53\x59\x4d\x14\x59\xda\x46\x68\x5b\x36\x70\x1d\x46\x55\x53\xe5\x19\xc5\xef\x11\x0c\x1a\x17\x19\x2a\x60\x9a\x26\x2f\x13\x29\x67\x3f\xbe\x6f\xf0\x62\xc8\x90\x7c\xa8\xf2\x67\xff\xd4\xc9\xfb\x66\x58\x77\x28\x9e\xb8\x91\xdc\xa4\xce\xa8\x19\x71\xff\x5c\x6a\x9d\xff\xdc\xb0\x79\x0d\xd5\x4c\x7e\x1b\x0f\x12\x15\x94\x40\x1c\xd9\x67\x38\x18\x6a\xb1\x84\x9f\x32\x19\x9b\x43\x24\x56\x17\x02\x0c\x86\x29\x32\xe9\xb1\x2d\xc2\x96\x79\xc5\x21\x15\x25\x20\xa6\x3e\xe1\xf7\x7f\x1e\xb1\x49\x27\x7f\x6b\xaa\xcf\x4e\x44\xf9\xa2\xdc\xd2\xe4\x0d\x75\x1e\x5f\x6b\x1b\x79\xf4\xd0\xaf\x23\x6a\xce\xf9\x6f\x49\xd3\xed\x8b\x6f\x6e\xca\xe4\x65\x29\x94\x76\x10\xd3\xb2\x58\x58\x15\x45\xbf\x16\x60\x49\x93\x17\x10\x11\x0f\x78\x14\x32\xc0\xe2\x10\xac\xb0\x6e\xac\x4b\xe9\xba\x60\x2b\x8e\x42\x19\x70\x3a\x9f\x1b\xeb\x90\xf4\xcb\x53\xef\xf1\x6c\x8f\x73\x15\x6d\xba\x43\xa8\x5c\xb4\x58\xe7\xce\x8f\x47\xf9\x77\x36\xf8\xaa\xfe\xc0\x7b\x09\xd7\x1e\xb3\xb3\x33\x57\xd2\x3c\xaf\x0a\x8a\x68\x7b\x11\x2f\x2b\x29\x2c\x81\x71\x7e\x49\x81\x6c\x0b\x27\x09\x89\x34\x31\xd9\x8b\xb1\x38\xe5\xf1\xa0\xbc\x83\x7a\xbc\x8a\x80\x61\x84\xfa\x81\xc3\x99\x22\xe6\xfc\xd4\xb9\xc4\x19\x68\xf6\x9e\x07\x95\x7f\x9a\x33\xe2\xf3\x9e\x0b\x87\x77\x68\x1a\x57\xbf\xc7\x72\x2d\x79\xf8\x9f\x13\x9a\x95\xce\x9a\xc9\x1e\x91\x63\x71\x84\x94\x45\xc3\xf2\x30\xba\xa9\x73\x8c\x49\x06\x3c\x24\x61\x31\x7e\x14\xc6\x69\x4e\x67\xf4\x80\x61\xc8\xac\xe5\x57\x68\x06\x55\x64\x2f\xcb\xc2\xe9\x03\x44\x5d\xb6\x63\xc7\xa4\x4e\x8b\x86\x3c\x1e\x73\x6c\x6e\xb3\x72\x71\xd0\xe8\x6e\x59\xb3\xef\x68\x1f\x57\x37\x7f\x9f\x87\xbb\xed\x22\xcd\x9a\x66\xf2\x2a\x71\x80\x24\x0d\x83\x34\x1d\x4b\x21\xa5\x00\x4b\x92\xb0\x02\x43\x8e\x1c\x40\x18\x59\xf2\x1b\x01\xdc\xf6\x73\x28\xe1\xd5\x34\x09\x43\x6d\x8f\x48\xd1\xba\x66\xbe\x0f\x90\xa9\x7f\xed\x68\x7a\xec\x65\x8f\x59\x7d\xd0\xe2\x89\x5d\xbe\xd9\x90\x7c\x66\x6c\xa3\xef\x13\xd0\x3b\xb3\x5f\x4d\x7e\xf3\xdb\xf7\x5b\xa6\xad\xcf\xe4\xa2\x9b\xe2\xc8\x5e\x5e\x66\x10\x8a\x13\x74\x3f\x8b\x6a\x04\xe4\x15\x14\x87\x50\x19\x09\xf5\x93\x1c\x26\xcb\x28\x2e\x51\xa8\xc4\x0b\x8e\x1f\xa3\x65\xdb\x8f\x59\xe9\x5b\x90\x5b\x3b\x0a\x7e\x7b\xb4\xcb\xf4\xfb\xbb\xe9\xcb\x2d\x63\x76\xff\x90\x65\xf2\x96\xbd\x97\x43\xf1\xaf\x6e\xc8\xe3\x89\xa4\xfa\x44\xe5\x8e\x99\xec\x5e\x4c\x8c\xe2\x71\x45\xd1\x35\x09\x61\x0d\x2e\x60\x39\x3e\x56\x37\x2c\x81\x52\x60\x47\xa0\x7d\x7e\x45\x14\x75\x18\x26\x48\x47\x36\x2d\x8f\xe0\x33\x04\xee\x03\x9f\xa6\xd6\xc7\x37\xf9\x89\x3a\x93\x30\x65\x58\x71\x78\x1e\xd3\x45\xcc\x37\x60\xf2\xa3\xfb\xed\x06\x22\x0d\xb3\x8c\xda\x9d\xfd\x69\x9f\x87\x9f\x7e\x00\x50\xfa\xdf\x6b\xe0\x55\x44\xd6\x70\x85\x32\x35\xd8\x22\x20\xde\xa3\x42\xaa\x4c\x28\xb4\x2c\x8b\x1a\xe3\x51\x75\xdd\xa7\x49\x1c\x2e\xab\x12\xe3\xd5\x70\x8b\xb2\xfd\xac\xf3\x3e\x40\xa6\xfd\xdd\xef\xd0\xba\xbb\x6b\x5f\x56\xdc\xb6\xff\x70\xef\xdb\x75\x5e\x27\xd5\x68\xf9\x60\x6b\xdd\xd0\x77\x43\x0b\x56\xed\x32\x68\xc5\x67\xb9\x32\xf9\xf4\x2e\xc2\x0b\xc1\x10\x05\xc9\x78\xc0\x0c\x60\x9c\xce\x9a\x9e\x00\x85\x50\xa4\xe8\xf1\x29\x7e\x4e\x27\x02\x28\x8f\xe9\x5e\xdc\xe2\x34\x81\x63\x61\x99\x54\x9c\x0f\xac\xb5\xcd\xab\x9f\xe7\x76\xcf\x23\xeb\x5f\xbf\xaa\x94\xaf\x9d\x76\xe6\x82\x94\x75\x9f\x6f\x60\xef\x11\x77\x2e\x0c\x1d\xbc\x3b\xf9\x54\x42\x26\x9f\x59\x84\x31\x86\x25\xfa\x70\x9a\x43\xfc\x2c\xc9\x39\x0e\x19\x30\x38\xc3\x16\x03\x3a\x81\xda\xb2\xac\x10\x22\x22\xf8\x59\xcb\xeb\xf5\x08\x9c\x0f\x63\x3c\x8c\xca\xf0\xe8\xfb\x92\xbe\x1f\xdd\x22\x67\xfd\xbe\x7f\x89\x4f\x66\x8a\x57\x3a\xb7\xbc\x7f\xee\xfb\xb9\xfc\xf5\x3d\x2c\xbb\xe4\x54\xbd\xea\x4d\x26\x6e\x8c\xfa\x74\xaf\x98\xfe\x81\x63\xa4\x57\xe4\x18\x4e\x35\x02\x30\x8a\x2a\x1e\x4d\x51\x10\x0c\xe6\x48\xc6\x40\x88\x00\x42\x49\x90\x6c\xa9\xbc\x27\x60\xb0\x24\xce\xe2\x26\x6f\xe1\x42\xca\xa1\x56\x6f\x23\xbd\x81\xd9\x3f\x6e\xd1\x36\x18\xbf\x31\xaa\x40\xea\x4d\x0f\xcd\x67\x64\x9d\x77\xa7\x7b\xd5\x29\x9f\x21\x6f\x24\x79\x4f\x37\x39\xba\x44\xa9\xca\xde\x6d\xbb\x46\x0c\x34\x1f\x4d\x8a\x8f\xde\x99\xb9\xc7\xee\x61\x24\xc5\x31\x1e\xdd\x12\xbd\xba\xa4\xf2\xaa\x4e\xf8\x78\x03\xd1\x7c\x5e\xd4\xd0\x45\xc3\x2b\xda\xb4\x4c\x06\x0c\xda\xc4\x69\x4d\xa0\x61\xdc\xa7\x2a\xa6\x26\xa5\x6f\x6f\xe8\x12\x57\xfa\x46\xbe\x2e\x79\xa0\x5a\xff\x51\xcf\x76\xb4\xaa\x71\x6f\xfb\xe9\x9c\xc7\x9b\xdd\x2f\xbc\xf6\xd4\xc8\xfb\x4d\xb7\xbe\x68\xf6\xe9\x9f\x0d\x4f\xff\x5c\x46\x93\x75\x3c\x96\xa3\xab\x02\xa3\xfb\x10\x07\x75\x54\xaf\xa5\xf2\x86\x44\xb3\xba\xa6\x7b\x0c\x9f\xe4\x04\xd4\x80\x69\x39\x16\x4e\x29\x10\xea\x35\x79\x82\x4f\xdf\x8f\xe6\x3f\x54\x71\x5f\xf1\xe7\x93\x7a\xf5\x4d\x9a\x56\xef\x84\xef\xcd\x96\xb9\x5a\xb0\xf5\xc3\xd6\xb5\x6e\x4e\x4d\x9a\x49\x6c\x5c\x33\xb8\x4d\xe6\x4a\x1b\xc5\x74\x2d\xc0\x61\x2a\x83\x98\x8e\xc5\xc9\x38\x4f\xc9\x84\x40\x60\x82\x07\x33\x49\x9e\xf7\x2a\xa4\x2c\xd2\x7e\xd9\xe6\x64\x19\xb5\x29\x07\x82\x55\x4d\x4d\x5f\xda\xce\xf7\xff\xcd\x1a\xd0\xf8\xeb\x6f\xeb\x3a\x31\x8d\x1f\xee\xee\x99\x65\xfa\xe5\x6f\x97\x74\xb8\x95\xb0\x62\x89\xb3\xa2\xe2\xbc\xbd\xea\x9e\xcc\x75\x4a\x34\x4c\x21\x96\xa6\x33\x1e\x51\xc4\x68\xde\xf2\xe8\xba\x15\x90\x3d\x8a\xa6\x58\xaa\x81\x13\xa2\x4f\xb1\x4c\x0f\x29\x50\x6c\xc0\x61\x24\x2f\x24\xf0\x2a\xc4\xbe\xb7\x99\x35\xa3\xf5\xe6\x60\x42\x4c\x62\xd7\x34\xfb\x7f\x12\x23\xb8\x43\x9b\x95\x2e\xf9\x42\x3b\x66\x27\x8d\xcb\x59\xb1\x6c\x1f\xe6\xc4\xba\x2b\x63\xdb\x17\xae\xff\xaa\xf1\x5e\xe9\x48\xae\x4f\x3f\x1a\x26\xfd\xed\x95\x8a\xea\xf1\x7a\x59\x4a\x21\x2c\xaf\x2c\x70\x16\x4e\xe9\x14\xaf\xc1\x88\x81\x88\x8e\x17\x23\x59\x6f\x20\x40\x04\x78\x5b\x95\x79\x43\xa3\x6c\x46\x15\x53\x4e\xff\x78\x7f\x72\xc8\xda\xbb\xb6\xf4\xed\x03\xb5\x1e\xfb\x68\xf5\xe5\x83\x11\xf7\x37\xcf\x3f\x4c\xcf\x5a\xed\xa9\xec\xe4\x1c\x10\x57\xe1\x40\xab\xab\x1b\x32\xf9\x04\x10\xd4\xcb\xc9\x08\xcb\x9a\x8a\x41\x7b\x02\x12\x41\x61\x01\x85\x45\x7c\x86\x60\x1a\x96\x83\x59\x22\x63\xd0\x36\x8d\xea\x8a\x68\xc9\x1e\x06\xc2\x1c\x5d\xf3\xa7\x5f\x87\xee\xb4\xa3\xd2\x02\xa9\xc6\xed\xd0\xae\x3e\x7e\x72\xcd\xd6\x87\xeb\x95\x5f\xeb\x35\x1b\x14\xca\xf6\xdf\xed\xa5\x4d\xc7\x2d\xba\x3c\x70\x55\xe6\xaa\x02\xce\x9a\x3e\x5c\x75\x30\x49\x12\x58\x8f\xee\xe7\x1c\x83\x13\x3c\x92\xdf\xc0\x04\x9e\x94\x7d\x30\x2c\x08\x22\x6a\x9a\x5e\x02\xc6\x10\xd3\x44\x35\x49\xe6\x85\xf4\xa5\x1d\xb1\x56\x91\x13\x4f\x9c\xe6\x87\x94\xba\xf5\xe7\xed\x7b\x2b\xca\x9e\x3c\x57\x54\x1f\x74\x65\x64\xee\x1b\x8f\xda\x36\xa6\x9a\xdc\xfa\x26\x73\x41\x42\xc2\x30\x65\x68\xa2\x6d\xb3\x18\xcc\x50\x1e\x95\xf3\xf9\x3d\x8c\xa2\x62\x5e\x42\x76\x2c\xde\x0b\x79\x70\x58\x50\xbc\x56\x80\xa0\x1d\xcc\xef\x91\x4d\x87\xd0\xdf\x53\x85\x8c\x56\xbc\x82\x09\x51\x51\x11\x59\x53\xab\xc2\xf7\x67\x8c\xe0\xc2\xab\xf3\xb7\x3d\x2f\x3b\xae\xf2\x1f\xc3\x90\x41\x39\x5e\x0d\x5b\xb6\xe2\x51\xf9\x35\x71\x63\x4f\xd1\x74\xcd\xc5\xc3\x32\x79\x6d\xc3\x84\x60\x5c\x16\x74\x83\x92\x55\xd4\xcb\x89\x10\xa9\x32\x38\x8a\xd0\x2a\x85\xfa\x54\x8f\x82\x20\x26\x0f\x59\x9e\x00\x8c\xc8\x5a\x00\x91\xfc\x96\xfa\xa1\x0f\x5d\x14\xec\xb2\xe0\x2c\xf7\xa8\xda\x6c\xf6\x78\xdb\x0b\x53\xff\xfe\xba\xd2\x5f\xa3\xc8\xa1\xaf\xf1\x7a\x0b\x98\xfb\x5f\x55\xbd\x77\x68\xeb\xca\x4c\x9e\x1c\x45\x11\x15\x8b\xd6\x05\x02\x72\x24\x3e\x80\x9b\xb6\x44\xca\x1e\x18\x46\x55\xc3\xe4\x15\xcc\xf2\xb0\x04\xa4\xe0\xba\xe3\x65\x6c\xdc\x71\x30\x7f\x40\x63\xd2\xc7\xd4\xf6\x98\x82\xd4\xca\xa1\xdb\xa6\xb3\xad\x9e\x5f\xdc\xd5\x9b\xee\x75\xa0\xd6\xe7\xbf\x17\xa9\x59\x63\x54\x83\xbf\x87\xf4\x1b\x34\xf9\xfc\xa7\xbf\x60\x9b\xae\xb4\x0d\xd5\xf0\xfa\x18\x54\x82\x34\x92\x23\x55\x02\x43\x1d\x3f\x42\xd8\x22\x4c\xf2\x36\x1f\xa0\x08\x85\x50\x25\x4d\x95\xfc\x96\x66\x79\x9c\x00\x4d\x10\xa2\xf0\x01\x0d\x1e\x30\xf2\xdc\x8a\x72\xbf\xcb\x79\x07\x27\x1d\x2c\xea\x6f\x14\x3d\x65\xfd\xb8\xdc\x0f\xf2\xbc\x28\xbc\x67\xd6\x9c\xe5\xd3\xf3\x5d\x37\x3f\x7d\x2f\x52\xfa\xf1\x91\x97\xf0\x79\x34\xd2\x60\x38\x3a\x40\xb2\x1a\x2e\xda\x66\x40\x57\x60\x0c\x43\x18\x4a\x25\x4c\x07\xa2\x88\x80\xed\xd8\xb8\x47\x43\x74\xca\xf0\xfa\x48\xed\x7f\x07\xb2\x02\x55\xc8\x68\x31\x26\x98\x10\x1d\x13\x93\xe6\x15\x07\xf9\xab\xdc\xfd\xad\xed\x52\x99\xb6\xb3\x8a\x8a\xc9\x4a\xc1\xf9\x8d\x39\x72\x5e\xd5\xe0\xc1\x67\xfb\x42\xbd\x2f\xde\xc2\x17\x64\xee\x5b\xb6\x3e\x1b\x86\x25\x16\x56\x10\xdb\x23\xfa\xfc\x14\x2b\xe9\x16\x0c\xa3\x12\xc1\xd1\x86\x9f\xf1\x98\xa8\xa0\xd0\x1e\x14\xe5\x20\x9a\x17\x21\xc3\x80\x04\xcc\xb1\xd5\xf4\x23\x8d\xfb\x59\x4b\x87\xba\x0e\x2e\xf9\x5d\x40\x1f\x0a\xaf\x59\x5e\x2a\x7a\xf0\xaa\x36\x85\x0e\x34\xde\x55\x7d\x6b\xce\xc8\x2f\x8a\x1e\xe8\x77\x2c\xb3\x5f\x33\xf4\x22\xa6\xa8\xe0\xbc\x2a\xa3\x32\xe6\x58\x5e\x8e\x55\x61\x45\x81\x0c\x8a\xe5\x7d\x5e\x0d\xc2\x39\x0f\x6b\xd9\x10\xed\x27\x09\x04\x96\x30\x1b\x72\x3e\xf0\xb6\xcf\xa3\x97\x31\x17\xba\x9c\x6f\xa0\xb7\x7e\x3e\xaf\x62\x8d\xc2\xf7\xf3\x6f\xbd\x19\xb3\x50\x6b\xbb\x76\xd9\xa6\x0d\xed\xae\x2d\xe8\x37\xfa\xdb\xcc\x4d\x13\x70\x9d\x70\x04\xc2\xf0\x2a\x98\xcc\xa0\xb4\x4e\x18\x90\xcc\x93\x34\xcb\x71\xb2\x81\xa2\xbc\xea\x33\x2d\xc5\xa3\xa0\x92\xe0\x97\x09\x9f\x80\x63\x7c\x80\xfd\x00\xdb\xfe\x9f\xb0\x67\xd7\x76\x76\x5e\x0d\xf5\x56\xff\x68\x69\xff\x91\x27\x46\xec\x97\xf0\xf4\xc2\x80\xc7\x7b\xfe\x6c\x34\xbf\xf4\xd2\x76\x37\x32\xd7\xf0\x78\x49\x4c\x83\x55\xda\xaf\xc2\x18\x03\xe1\xaa\x2d\x69\x5e\x08\xf3\xc8\xa4\x8f\xc4\x02\xb0\x66\x5a\x1e\x44\x09\xd0\x90\x44\x8a\x34\x8c\x91\x02\xea\xe1\xf5\xff\x05\x48\xa3\x9b\x84\xb7\x6c\x16\xed\xf2\x65\x96\x32\x1d\x76\x9e\xdd\x55\xee\xd1\x9b\xc4\x05\x83\xaa\xcb\xf1\xcd\xbe\xbe\x51\xbf\x5e\x74\xd7\xc1\x07\x1a\xae\xa9\x5c\x2f\x98\xf0\xe6\xcd\x86\x87\x69\x0e\x70\xaf\x25\x36\xef\xbe\x82\xfc\xe6\xe7\xa7\xa5\x86\x6c\x1e\x59\x73\x5d\x99\xfd\x8b\x12\x16\x7f\x33\xf9\x65\xce\x33\xd2\xd4\x02\x6b\xf3\xce\xec\x91\xc9\x47\x60\x71\xa8\x4f\x17\x8c\x00\x01\xf1\x5e\xcc\x44\x35\x8b\xd6\x54\x9b\xa7\x55\x5d\xc0\x1c\x0f\x1a\x10\x68\x5c\x92\x2c\x8f\xcc\x3b\x94\x85\xc1\xba\x8a\xf9\x31\xe5\xfd\x22\xb2\xb0\xec\xbb\x0a\x0f\x6f\xf5\xee\xb6\xb2\xc9\x95\xfa\xbb\xbf\xae\x74\x99\x7a\xfe\xf4\xe6\x67\x05\xb2\x97\x4e\xf8\x87\x5b\x53\xcb\xd7\x3c\x73\x37\x16\x60\x2c\x49\x72\x12\x0c\x13\x08\xc5\xaa\x96\x8c\x9b\x9c\x22\xb2\x88\x41\x72\x82\x06\x0b\x08\xc4\xca\x9a\xed\xf3\x12\x0e\x4e\x04\xbc\x01\xc7\x92\xbd\xa8\x97\x4b\xa7\xee\xbd\x71\x47\xc7\xfe\xd7\x46\xb4\x99\x44\x6b\x70\xfe\x5b\x73\x73\x57\x19\x99\x63\x4e\x23\xbe\xc2\xab\x41\xb5\xe6\xec\xfe\x03\x29\xf4\x4f\xc5\x4c\xde\x87\xee\x88\x2a\x26\x40\x1e\x8d\xb5\x2d\x9b\x25\x04\x9f\xcc\x7a\xbc\x82\xea\xf8\x65\xd1\x6b\x98\x28\x4d\x40\x1e\xc1\x20\x10\x19\xc7\x61\x49\xb5\x18\x9f\xc2\x42\xe9\xaf\x30\xe4\xfa\x52\x35\xdb\x6f\x2a\x3a\xb4\xea\x8e\x4a\x79\x15\x2b\xd0\x6b\x50\xc5\x3c\xb5\x5e\xd1\xb9\x7e\x68\x67\xbd\x81\xfe\x7e\xc5\xf5\xc9\x5c\x1d\x50\x60\xc2\xf2\x48\x96\xe1\x23\x04\xd5\x20\x11\x9f\xc6\x31\x08\xa9\xfa\x0c\x12\x36\x34\xd9\x8b\x9b\x5e\x03\xf2\x09\xa4\x63\x08\x5e\x3a\x60\xe0\x96\x62\xf0\xe9\x80\x43\xf6\xdf\xcd\x1f\x95\x25\xfe\xab\xe4\xec\xe5\xc7\xdf\xcb\x56\xb1\xd6\x8e\x9c\xe5\x77\xef\xdf\x6a\x95\xfb\x31\xfb\xc0\x5a\xcf\xfe\xeb\xfb\x77\xe6\x82\x83\xd7\x38\x56\xb7\x10\x8e\x35\x78\xc7\x90\x15\xda\x14\x05\xcb\x8b\xa3\x02\xc1\x10\x88\x6d\x68\x98\x2d\xe3\x22\x46\x2b\x01\x58\x51\x88\x00\x2a\x59\x8a\xa2\xbd\xcf\xf2\x88\x53\x27\xfa\x79\x76\xfe\xf6\x74\xfb\xd1\x75\xf9\x8f\xcc\x5e\xb0\xf1\x5a\xbd\xe5\x7d\x91\x15\xb9\xfb\x3f\x38\x02\x75\x3f\xd1\x30\xef\xa7\x1f\xef\x9b\xfe\x17\xba\xf5\x00\x2c\x60\xa4\x29\xb0\x96\x6c\x19\x84\x24\x53\x3a\xe7\xd8\x01\x51\xf7\xf9\x78\x98\xc7\x20\x5a\x0b\x08\x0e\xc1\x52\x28\x4e\xf8\xfd\xa2\x2d\x43\x3e\x36\x7d\x70\xd4\x8e\x3d\xb1\x0d\xfd\x33\x32\x72\x50\xce\xf1\xc4\xe4\x07\xdf\xff\x33\x71\xfa\xe8\x2d\x47\xaf\x27\x4c\x3d\xb2\x29\x38\xbe\xe4\xb7\x03\x3e\xbd\x6a\x95\xfe\x3b\x60\x90\x83\xea\xa6\xce\xf8\x0c\x98\x94\x1d\x2f\x2f\x0b\x81\x00\x8b\xf3\x92\x2a\xfb\x09\xcc\x6f\xf8\x6d\x1f\x8f\x90\x02\xa9\x12\x1e\xc7\x60\x79\x04\x42\x7c\xce\xfb\x3b\x1b\x76\xa0\x03\xab\x1b\x8b\x2e\xfc\x37\x67\xd3\x91\xa5\xf9\x3e\x3f\x90\xb7\x43\x83\xec\xd3\x5a\xd8\x53\xd5\x88\xa5\x6d\x5e\x5d\x5e\xa6\x17\xc8\xe4\xda\x20\xcc\xca\xb2\x6e\xb3\x0c\x2d\xda\x08\x1a\xe0\x04\xd2\x84\x78\x5b\xc0\xfc\x01\xde\xd6\x78\x2f\xc1\xf8\x69\x59\xc1\xfc\x32\x62\xf9\xfc\xb8\xc5\x63\xba\x93\x4e\x6d\x70\x4f\x8b\x1d\x28\xb9\xb0\xeb\xc0\x6e\xc5\xeb\x26\x4d\x48\xfa\xb9\x7c\x7e\xf5\xd2\x65\x6e\xf7\xfa\xab\xaa\xe7\x45\x4d\x6c\x48\x36\x29\x93\x0f\x97\xc1\x55\xc3\xef\x61\x31\x88\xf5\x12\x0a\x86\x61\x5e\x59\x50\xfc\x0a\x84\x06\x24\x1b\xe5\x30\x87\xd7\x6d\xcb\xa7\x1b\x3e\x1a\x96\x74\x54\x61\x64\x48\x82\x3c\xe9\x6f\xe9\xcd\xd5\x61\x43\x8f\x0e\xe4\x67\x5f\xbd\x7c\x52\x6e\xc9\xb6\xc8\xc7\x15\xef\x8c\x8a\xda\xda\x7e\xc1\xb1\x9e\x93\x36\x5e\x54\x5f\x14\x5c\x99\x2d\x73\xd9\xe6\x60\x8f\x62\xd2\x5e\x83\x25\x14\x5b\xc2\x44\xce\x03\x9b\x38\xe6\xf7\xfa\xbc\x01\x4c\x20\x19\x42\x64\x7c\x1c\xe4\x70\x34\xe4\x55\x61\xd5\x2b\x93\xa4\xc0\x2a\xef\x83\xe3\xe9\xa8\xfb\xe3\xfe\x2a\x97\xbd\xd9\x9a\xbc\xad\x9b\x3c\x28\xf9\xd3\xb9\xc5\xad\x7f\x7c\x70\x43\xc8\xb5\xa4\xcc\x46\xc1\xb3\xb2\x91\xf7\xd3\x4f\x71\x48\x97\x65\x1a\xd3\x69\x31\x60\x11\x02\x45\x70\x86\x8f\xb6\x79\xaf\x0c\x09\x01\x52\xf5\xd1\x5e\x88\x23\x0d\x07\x36\x3d\x08\x21\x8b\x96\x04\x63\x0c\x8a\xe8\x2c\xab\x51\xe9\x87\xec\x2b\xda\x1d\x3e\x3b\xb4\x5d\x0b\x5f\xb3\xef\xaf\xe1\xe3\x99\xfa\x17\x3a\xff\xd4\xfe\xda\xa4\x46\x79\xfb\x67\xb9\x9c\xfd\xeb\x87\x05\xae\x3f\xc9\xe4\x53\xfc\x02\x8c\x8e\x5b\x0a\xca\x23\x98\xc8\xd1\x8c\x68\x61\xa2\x6a\x33\x9a\xcf\xf0\x78\x21\x13\xc1\x49\x95\xd2\x2d\x01\x81\x4d\x47\xd5\x24\x3f\xeb\x63\x18\x9c\x4e\xff\xd8\xea\xe1\x3f\x35\x9d\x4d\x34\xc8\xf2\xe2\xdf\x32\x7d\x8d\x2f\x2f\x78\xd7\xdf\x0b\x5c\x28\x6b\xf4\x61\xc9\xdb\x75\x4f\x8a\x75\xbe\x7f\xf6\xe9\xef\xeb\xa6\xff\x92\xa2\xc3\x63\x1c\x8c\x23\x1c\x6f\x53\x84\x05\x63\x12\x45\x22\x94\xe9\x15\x75\xd3\x11\x15\x84\xc6\x05\x95\xe2\x35\x8f\xcf\x11\x11\xd2\xf4\x09\x24\xc2\x61\xe9\x7c\x64\x63\xcf\xe4\x3c\x45\x2b\xe5\xda\xf2\xc5\xb6\x6c\xd3\x43\x85\x1f\x6e\x4b\x5e\x76\xe5\x2b\xe4\x86\xf4\xa5\x67\xe7\xbc\xa9\x46\xd1\x5e\xad\x3f\xfd\x4b\x44\xe9\xc6\xdf\x8e\x22\xd2\x04\xa5\x7b\xfc\x22\x87\xf8\x10\x9f\x9f\x14\x71\xdd\xab\x43\x94\xa4\x72\x16\x16\x08\xa0\x08\xa1\xca\x94\xa4\xd9\x90\x48\x89\x16\x65\xe1\x22\x6b\xbf\x6f\x3d\xde\x34\xdf\xb1\x6a\xf4\x85\x09\xf2\xc3\xdd\xcb\x1f\xcc\xb8\x8c\x74\xff\x77\x49\xfd\x3a\xff\xce\xd9\xcf\x4d\x5a\x7b\x7f\x4c\xd9\xae\x62\xe6\x9e\x72\xe3\x93\x35\x44\xe7\x64\x08\xd3\x70\x59\xb3\x74\x56\x54\x78\x4c\x16\x55\x5d\x75\x0c\x5d\x93\x38\x16\x36\xfc\x52\x80\xf1\x90\x6a\x40\x61\x19\x01\x42\x34\x5d\xfd\x40\xfd\x4b\x7a\xd1\x92\x8d\xcb\xc5\xdc\x5f\x3e\xa4\xe0\xc2\xc8\x1f\xea\x17\xad\x34\xbb\x79\xb6\x2d\x3f\x3f\x1f\x12\x33\x70\xfd\x92\x11\xd1\xd7\x73\x66\xae\xa4\xbd\x30\x43\x8b\x5e\xdd\xc2\x75\x49\xa3\x09\x54\x97\x10\x8f\x0d\x05\x10\x06\x51\x2d\xc1\xe3\xd5\x04\xc9\x46\xd5\x00\x07\x0b\xa8\x07\xa5\x04\x9a\x10\x0d\x47\x49\x7f\xb7\x4e\xa0\x4a\xc1\xf2\xc3\x8a\x75\x28\x45\x2f\x13\xe3\x6b\x5d\x8f\x5f\x7a\x6d\x57\xc5\x49\xd5\x4f\xd5\x5f\x59\xac\x7d\xbe\xc5\x47\xd6\x29\x35\x32\x57\xda\x1c\x4d\x1a\x96\xe2\xe0\x02\x43\x6b\x02\xef\xfe\xc7\xa8\xb4\xe5\x25\x55\x96\xf6\xdb\x10\x2a\xc3\x24\x84\xf2\xbc\x15\x50\x71\x87\x75\x44\x8d\xe7\x39\xe1\xfd\xd8\x63\x59\xf3\x13\xf0\xe2\x46\x79\x72\xfe\x58\xe4\x41\xad\x27\xd8\xa9\xde\x3e\xfb\x7a\xf4\xa1\x98\xd3\x95\x13\xbf\x7a\x51\xa0\xf9\x9c\x26\x99\xfc\x75\x2d\x5d\x0a\x48\xb6\xe6\xa3\x38\x9a\x61\x25\x1a\x77\x60\xdc\x0f\x51\x88\x49\xdb\x0e\x63\x2b\x3e\x3f\x86\x6b\x18\x63\xd9\x3e\x1d\x33\x61\x8b\x56\x30\xd6\x23\x10\xef\xab\xe1\xd6\xbb\xa6\x55\x7c\x5e\x5b\x7f\xee\xc8\x13\x07\xf6\x56\xf8\xf5\xf0\xcf\xf7\x83\xa5\x27\x64\xfb\x6d\xc6\xc2\xdb\x65\x23\xcf\xae\x79\x9e\x2f\x73\x9d\xb8\xed\xa3\x6c\x9c\xf5\x29\x7e\x04\x43\x75\x9a\x92\x54\xc3\x42\x25\x48\xd0\x10\x0d\x09\x08\x0e\xe7\x31\x4d\xca\x23\x7a\x6d\x2f\x67\xc3\x12\x29\x78\x51\x3d\xd5\x9b\x69\xff\x7f\xdb\x68\xbb\x42\x4b\x4f\x66\xad\x29\x32\xf1\x85\x37\x16\x61\x4f\xe5\x4e\x1a\x5e\xd4\x20\x4e\x9d\x5a\xa6\x0e\xdd\xd7\x83\x5b\x54\x9a\x2f\x96\xba\xf5\xe9\x73\x7d\x8e\x12\xb3\xbe\xa9\x1c\xac\xbf\xbe\x41\xd7\xee\x5b\x92\x67\xbf\xf8\x6c\xf6\xba\x45\x65\xb3\xaa\x37\x2e\xdf\x39\xfe\x4d\x8d\x1c\xa9\xf4\xa5\xec\xad\xa8\x46\x51\x8f\x6e\xac\xf8\xf1\x5e\x93\x31\xdf\x5a\x09\x7f\x8f\x6d\x3a\xbc\x4e\x0d\x7f\xab\x23\x97\xb0\x66\x91\x55\x9e\xbd\x1c\x9e\xc9\xb3\x68\xf2\x92\x65\xe8\x12\x6b\x0b\x86\x4e\xa9\x0c\x82\x7a\x69\x54\xc5\x6c\x15\x11\x2d\x2f\x47\x73\x0c\xc4\x18\x18\xc5\xa3\x86\x65\xb3\x24\x61\x49\x06\x0e\xa5\x1f\x24\xd8\xbd\x07\x17\x32\xb0\xe2\xcb\x9b\xbf\x78\xb5\x29\x49\xde\x52\x46\xff\xed\x6c\xdb\x22\x65\x27\x1f\x28\x54\xab\xd7\xd1\xf3\x9f\x3f\x0a\x65\xae\xc7\xf5\x61\x02\xec\x21\x68\x08\xd7\x2c\x1e\x86\x29\x83\xb5\x79\x52\x56\x3d\xb0\x46\xcb\x94\x49\xe3\xb2\x2d\xe9\x36\x29\x9a\xaa\x29\x10\xb6\x09\xbd\xfd\xe4\xf6\xfb\xe0\xeb\x7b\x7f\x5f\xae\xae\x7b\x16\x7e\x1d\x2a\x05\x25\xb2\xff\x0d\x39\xfd\xe5\xe9\xb2\x05\x73\xcc\x98\x54\xe4\x59\xcd\x46\x8f\x7f\xfb\x4c\xfd\xf4\x2f\x16\xa5\xbf\x96\x2f\xc3\x01\x8c\x83\x02\xb0\x28\x53\x98\x81\x39\x84\x08\xf1\x10\xcb\xe0\x8e\x4d\x2a\x5e\x8e\x13\x10\xdb\x46\x20\x5b\x93\x50\x4d\x90\x20\x4c\xa2\x29\xfc\x03\x8b\xe2\xb9\x2c\xb1\x7a\xf2\x93\x63\x0d\xd7\xec\x5a\x9d\x7d\x74\xaf\x67\x11\x97\xf8\xd3\x73\xaa\x3e\x65\x7a\xc6\x94\xab\xf6\xa8\xdc\xad\xe6\xc9\x99\xbc\x96\xef\xb3\x30\x99\x84\xfc\xb8\xcf\xf1\x68\xa4\x97\x55\x20\x96\x82\x69\xde\x82\x95\x80\xe3\x17\xc5\x00\x24\xe8\x3a\x17\xe0\x08\x88\x13\x21\x2c\xe0\x95\x30\x36\x9d\x94\x79\x54\xf5\xa5\x9f\x35\xff\xb7\xc4\x93\x83\x4d\xaf\xc9\x57\x17\xf4\x6c\xd8\xa2\xd2\x93\xcd\xcd\x17\xb4\x66\x06\x3f\x3f\x5b\xba\xd4\x81\xdd\x99\xbb\x74\x83\xc1\x34\xa4\xc8\x1e\x1c\x63\x75\xc1\x4f\xfb\x50\x1d\x0e\x30\x9e\x00\x4d\x49\x10\x83\xe3\x18\x02\xd3\xa4\xa9\x92\x5e\xd4\x2f\x04\x48\xc6\x23\x52\x01\x84\x51\xf0\x0f\xbc\x8d\xb2\xbc\xb6\x5a\xe0\xf8\xa8\x7e\x5d\x3b\xb4\x4a\x6e\xbd\xa2\x9d\x67\xf8\xcf\x9b\x0e\x74\xef\xde\x67\x74\x8e\xc2\x72\xd2\x85\xa7\x5d\x27\xd7\x4f\xa5\xb8\x3d\x5a\x73\xcd\x0a\x35\x27\xed\xfd\x57\x5a\xc5\x4f\x9d\xf5\xf9\xa9\x2b\xd7\x5a\x0d\xad\xf3\xf7\x8f\xd3\xfa\x0d\x59\x9d\xef\xe4\x8c\x22\x9f\xfe\x3e\x56\xba\x8e\x8e\xf5\x29\x86\xc0\x22\x3a\x8c\xe2\x06\xa9\xfa\x31\x8f\x66\x2a\xac\x44\xb3\x14\xa1\x69\x0e\x2b\x06\x02\xb8\xa1\x6b\x02\x05\xc3\xb4\x6c\xd1\x5e\x1e\x73\x78\x36\xfd\xda\x58\xbf\x7c\x13\x8e\xda\xd9\x0a\x95\x9c\xd1\xe5\x4d\xf4\xfe\x89\xb1\x5f\xff\xb5\x9b\x59\xfd\xdd\xe6\x49\x0f\x07\xbc\xe1\xbb\x1d\x6a\xb3\xb3\x54\xe6\x9a\x60\x8b\x65\x71\x49\x90\x75\x01\x81\xbd\x92\xd7\xc3\xca\x12\xcb\x70\x2a\x6c\xc0\x3e\xda\x1f\xf0\x79\x15\x86\xf7\x7b\x29\xce\xf1\xda\xb2\x69\x07\x64\x91\xf6\x7d\xc8\x3f\x1f\xfd\x6d\x94\x5e\x2d\xe7\xac\xf1\x17\x5b\x34\xad\xfc\x43\x44\xff\xe7\x5f\x74\x57\x8b\xf5\x48\x5e\xdc\x62\x35\xf3\x24\x54\xb9\xe5\xd1\x4c\x7e\x95\x8c\x52\x50\x48\xb7\x78\xc2\xd2\x21\x9b\x80\x2c\x8e\x90\x02\x30\xe6\x43\x35\x12\x92\x09\x9f\x86\x52\x02\xab\xc1\x84\xac\xf1\xb8\x45\xf8\x44\x52\x56\x31\x2e\x9d\x03\xf4\x4e\x5b\x51\x95\x6e\xcf\x6d\x98\x70\x3c\x5f\xe5\xb8\xa4\x8a\x77\x9a\x45\x0f\x68\x8e\x15\xd3\x56\xae\xde\x73\x68\x5b\x8e\x1f\x16\xf7\xfe\xf4\xa3\x7e\xd3\x7f\x6f\xd6\xb1\x44\x8f\x20\x9a\x8a\x22\x7b\x2c\x48\x45\x05\xc4\x84\x69\x96\xf1\xe3\x10\xa7\x93\xa2\x87\x31\x79\xc6\xe7\x87\x02\x2c\x4a\x11\x96\x86\xfb\x75\x41\x4b\xe7\x0c\xcb\x33\xc9\xbf\x36\x59\xbd\xa2\x6d\x44\x9f\x5b\x0f\x0f\x8d\x78\x38\x64\xe0\xd7\xad\xfe\x2a\xf5\xd5\xd9\xfc\xbf\xb5\x2b\x2c\x7c\x59\xff\x68\xe7\xcc\xfd\x3a\x1a\x26\x92\x3e\x1c\x95\x78\x04\x63\x65\x87\x26\x58\x33\x60\x91\x3a\x84\xf9\x10\xc7\x27\xcb\x16\xee\xe3\x14\x43\xc0\x11\x9f\x2d\xc9\xaa\x83\x48\x10\x4b\xf8\x6d\x26\x7d\x13\x59\x97\x1f\xb4\x56\x6b\xb6\xe5\xf1\x0a\x63\x5c\x72\xc2\xa2\xa2\x46\xdf\xe0\xed\x3e\xbb\x5e\xc4\x57\x68\x78\x69\x52\xbe\xe6\x67\xfa\x8c\xc9\xe4\xa3\x37\x35\x81\x81\x1c\x8f\x84\x92\x28\xa6\x20\x8c\xa6\x09\x54\x80\xf2\x05\x44\x48\x80\x05\x8f\xa3\x4b\x36\x4a\xe2\xbc\x8a\x42\x0c\x83\x23\x24\xcf\xf8\x79\x3c\x1d\x49\x8f\x4b\xfa\xf2\xfe\xae\x2b\xbb\xda\xe5\xcf\x1b\x7b\xfe\x51\x8d\x5e\xc9\xdb\x57\x8d\xcb\x53\xba\x04\xfa\xb2\xc2\xc9\x9e\x77\x5b\x27\x27\x65\xf2\xe9\x8a\x1e\xcd\x8f\xf2\x1a\xcd\xf1\x86\x57\x20\x1c\xcc\xd2\x75\x43\x52\x38\x0e\x31\x51\xc3\x82\x0c\xc6\xa2\x68\x8e\xe1\x15\xd4\xf2\x9a\x3e\x9d\xf6\xa2\x7e\x02\x26\xd3\x2f\x1c\xd5\xa9\x7c\xa6\xd5\xa9\x41\x91\xb9\x56\x4d\x1e\x3b\xac\xff\xa6\xa2\x77\x37\x90\xe5\x16\x5f\xbc\x0f\xef\x60\xba\x6e\x1e\xde\xae\x6d\x8d\x41\x99\xcb\x36\x2e\x61\x36\xc7\x38\x1a\x1d\x60\x18\x08\xe1\x2c\x5d\xb6\x30\x41\x55\xbc\x90\x80\xaa\x8a\x8f\x95\x65\x4b\x41\x70\x4d\xe7\x28\x5a\x10\x78\x99\x80\x58\x1b\x7e\xdf\xed\x5f\x19\xde\xa7\xf2\xcc\x5d\x35\x3a\xd4\x2b\x7f\xe2\x9f\x72\xd0\x8a\x84\x0b\xd5\x1f\xff\x34\xb5\x5f\xa8\xe3\x2e\xeb\x42\x4c\xed\x37\xa1\x4f\xdf\x9b\x92\x7e\x95\xdc\x20\x51\x93\xe2\x3d\xb8\x4f\x72\x1c\xc1\xf4\xa2\x90\xe2\xf3\x8b\xb6\xa0\x98\x12\x87\xc1\x7e\xbf\xec\xa5\xfd\x5e\x48\x35\x04\xaf\x44\x90\xa8\xd7\xa7\x43\xc6\xfb\x96\xe3\xd9\xa5\x35\x89\xca\x37\xd1\xb3\x0b\x97\x51\x22\x36\xc7\x3d\x88\x79\x53\xe6\xe5\xd5\xc7\xe3\xa2\xa6\x4c\xc8\x52\xa0\x55\xfb\xd7\xf6\xc6\x4c\x2e\xcf\x19\x10\xa7\x40\x7e\xaf\x43\xf0\x18\x81\x20\x1c\x46\x60\x02\xc9\x9a\xba\x66\x7a\x78\xca\x87\xa3\x06\xac\x38\x30\x1e\x60\x3c\x3a\xe1\x85\x69\x83\xf4\x2b\x1f\xa8\x2a\x96\x5d\x56\x6e\x6b\xd3\x6b\x0d\x5e\x9f\x9a\xd4\xe3\x46\x0c\x9e\xd4\xb1\x73\xab\x5b\xe5\xfa\xfe\x77\x6d\x58\x52\x20\xeb\x3f\x07\x66\xf7\xfd\xf4\x7a\x57\xfa\xc7\xc9\x8a\x1e\xdb\xc0\x2c\xd8\x40\xfd\x02\x25\xd2\x3c\x47\xf2\x3a\x8b\x0a\xa8\xe4\xf3\x10\xac\x22\x53\xaa\x80\xeb\x1e\x16\x0b\x60\x7e\x94\x44\x1d\x99\xa3\x59\xe1\x7d\x35\xfc\x15\xaf\xf6\xe7\xd4\x52\x33\x6f\xf5\xd9\xf6\x1c\x63\x91\xb5\x8f\x4f\x17\xfe\x66\xc1\x2f\xcb\xe6\xaf\x9c\xdd\xb2\x45\xcf\xca\x3b\xee\x7f\xfa\xb1\x27\xe9\xc6\x84\x16\xe9\x17\x7d\x01\x8c\x63\x4c\x2b\xa0\x23\x7e\x9f\xa3\x40\xb0\x57\x34\x1d\x5a\xe7\x54\x5b\xd3\x65\x48\xb7\x18\x05\x26\x10\xd2\x30\x21\x8f\xa5\x22\xd4\xff\xfb\xaa\xdc\x3b\x96\x2f\x5e\xbc\x35\x7a\xd2\xf3\x89\x17\xf1\xa8\x35\xe6\xee\xc9\x51\x8d\xa2\xff\xda\x63\x3c\xab\xf2\xeb\x2a\x08\x5a\x78\xb8\xce\xa4\x4e\xfd\x32\x57\xca\x9a\x44\xb3\x7e\x88\x92\x45\x4e\xa4\x44\x93\x62\x71\xda\xe7\xa0\x04\x2e\x50\x92\xc0\x59\xa2\x8c\x90\x84\x5f\xc1\x65\x8f\xe6\xf3\x10\x08\x6d\x8a\x92\xca\x7d\x28\x87\x5a\x71\xfe\xaf\xc4\x1d\x55\x7e\xea\x5d\x86\x6c\xda\xb0\x36\xef\xa9\xd8\xfd\x64\x5c\x93\x49\x1b\x4a\x7e\xbe\x89\xf8\x77\xda\xe4\x3c\xca\xb9\xd4\xad\xa7\x55\x5c\x9c\xd3\x13\xfa\xa1\xfb\xc0\xc5\x4b\x17\x95\x2f\x7f\xe5\x51\x9b\xb8\x66\xcb\x5a\x5f\xf8\xa3\x51\xc1\xac\xc5\x66\x7d\x57\xb8\x41\x4c\x2a\xe0\xb5\x9e\x59\xb6\x63\xdb\x45\x75\xbf\xf8\xf6\xdf\x09\x7a\x52\xd5\x96\xdf\x62\x85\xb6\xa3\xbf\x1c\x3c\x99\x6d\xfb\xb6\x2f\xb4\xdb\x25\xbd\x9f\xfe\xbd\xcb\xf4\x97\x68\x78\x8e\x61\x68\x1b\x27\xbd\x2c\xc9\x79\x50\x43\xe2\x21\x9f\x69\xc9\x98\xed\xc8\x84\x85\x3b\x1e\xc9\xc0\x48\x01\x87\x50\x48\xd3\x28\x8a\x54\x55\x51\x49\xe7\x45\xbd\xc4\x85\xeb\xf6\x5d\x3d\xba\xa9\xf5\x8d\xd6\xfb\xd4\x27\x58\xde\xd9\xb5\x1f\x64\x09\xf5\x2b\xa3\x1d\x28\x5c\xf1\x41\xf1\x2f\x12\x87\x64\xee\xaa\x12\x86\xdb\x76\xc0\x91\x03\xb8\x5f\x93\x28\x24\x20\xe9\xb4\x22\xa8\x1e\xc7\x67\x2b\x3a\xe5\x11\x24\x9f\x1f\x0e\x48\x3a\xae\xa2\x9c\xad\xf8\x50\x44\x35\x74\x85\xf3\xbc\xcf\xf2\xfe\xbc\x05\xae\xfc\x7a\x0d\x43\x88\x91\x35\xda\x67\xef\x7c\xa0\xcd\xbc\xbb\xd3\x46\xb7\x98\xfa\x5c\x9e\x56\xa2\xf7\xdf\xec\xbd\x78\x26\x73\x81\x67\x6a\x9a\x84\x93\x22\x84\x11\x22\x62\xa9\xb4\x5f\xf2\xdb\x3c\x89\xd0\x88\x5f\x55\x31\x91\x26\x51\x51\xc6\x20\xc4\x63\x8b\x0c\x0b\xab\xb2\x17\x91\x69\x25\x90\xfe\x56\xd7\xc1\x0b\x2a\xec\x2d\xd8\xa7\x70\x9e\xbb\x91\x33\x4f\x5e\x68\xf5\x72\x79\x41\xb5\xa6\x8d\xe4\x7c\xde\xa3\xf2\xd2\xd2\x71\xbd\x6a\xff\xfa\xe9\x47\x2f\xa7\x2b\x69\x42\xe7\x38\x07\x15\x71\xcc\xc6\x29\xc1\xf6\x3b\x9a\x57\x31\x1c\x41\x23\xfc\x3e\x3f\x2a\xfb\x10\x9f\x88\x10\x86\xe4\x31\x39\x0e\xd7\x11\xdc\xf6\x9b\x8c\x23\xbc\x2f\xe9\x39\x33\xd7\xb0\xd2\xfa\xbc\xf3\x7a\xf4\x2f\xb0\xb9\xe9\xd4\x3c\x23\xc7\xd7\x7d\xf9\xa4\x68\xff\xbc\x97\x7e\x27\xf9\xc3\x75\xf6\x6f\xfd\xf4\xb3\x41\xd3\x65\x99\xb7\x55\x4b\xb1\x6c\x1b\x37\x59\xd1\xf4\x62\xb8\x8a\xb2\xa6\x2e\x32\xba\x45\xe1\x7e\x8a\x87\x7c\x3e\x9d\x52\x45\x93\x85\x54\x91\xd3\x35\x55\x51\x99\x94\x65\xf7\xf7\xcb\xd9\x27\xaf\x16\xab\x53\xe5\x62\x42\xb9\x79\xc9\x63\x86\x3c\xe8\xfb\x6b\x97\x3b\xaf\x7f\xee\xfd\xcb\xd7\x35\x7b\x30\xd7\x57\x9f\x78\x0a\x95\x28\x93\xb9\xc6\xd4\xf1\x2b\x01\x8c\xd6\x65\xbf\xcf\xa3\x52\xa4\xcc\x21\x7e\x4d\xf6\xb0\x30\xa3\xa2\x10\x2a\x70\xb6\x65\x71\x14\x23\x20\x02\xa7\xe1\x3e\x92\x10\x48\x1a\xe2\x3e\xf4\x6d\xdd\x6f\x16\xd4\xaf\xfd\xb5\xd1\x63\xe5\x6f\x5c\xfc\xcb\xc1\xd7\x8e\x3f\x18\xb4\x08\xd5\x96\x37\x1c\xa8\xee\x79\x99\x10\x73\xe7\xf3\x81\xdf\xa7\xb2\x35\x9e\x5a\x87\xb7\x0b\x6d\x96\x8c\x2f\x98\x63\xd3\xe5\xa8\x43\x15\x0a\x5e\xfa\xb1\xee\xb1\xb9\xa3\x3e\xbf\x78\xb7\xe9\x67\xa7\xc6\x05\x16\x7e\x95\xc9\x35\x7b\xc6\x94\x14\x99\x97\x25\x86\x11\x51\xc3\x2f\x88\x2a\xcf\xda\xb4\xe2\xa3\x04\x2f\x8b\x92\xb8\x8e\x53\x04\xc3\xa2\x3c\xcb\x51\x86\x01\xf9\x6d\x11\x81\x98\xf7\x3d\x86\x6a\xaf\xa8\xdb\xf1\x8b\x95\x0b\x4f\x6f\xc9\x51\xe9\xf3\x4a\xad\x72\x4d\x9e\x51\xf5\xe2\xbc\x0d\x1b\xbb\xc3\xc2\x17\xc7\xff\x0c\x1e\xf9\xf4\x94\x2f\x5d\x96\x19\x8c\xe6\x0c\x19\x22\x7c\xa4\x41\x41\x5e\x49\xd5\x51\x9e\xf5\x39\x36\x8a\x21\x3a\xae\x98\x0c\x1b\x30\x04\x12\xa6\x04\x0f\x67\xea\xb8\x61\x78\x35\x4b\x48\x67\x29\xf8\xd5\x9a\xcd\x3d\x0b\xe0\xa3\x8e\x56\xf7\xde\x58\x71\x66\xc1\xa3\xe8\x12\xf9\x77\xec\x3f\xb2\xf4\x64\x8f\xfe\xa7\xea\x28\xe3\xdb\x36\xcb\xe4\x37\x5c\x38\xbf\xcf\x31\x71\xc9\x63\xa0\xb0\x97\x27\x02\x10\x21\x0a\x32\x8d\xc2\xa2\x4d\x32\x18\x66\x53\x06\x67\x9b\x92\xc1\xe8\x1a\xee\x67\x58\xaf\xc7\x2b\x39\x02\x9b\xbe\xad\xa9\xc5\x4c\xe9\xdf\x6d\x77\xa9\x9d\xd9\x7e\x3f\x55\xad\xc3\x38\x4f\xab\x3f\x8a\x55\x6f\xb2\xf7\xea\xbc\xd2\x8d\x77\xd4\x1f\x3e\xe1\xbb\x3d\x9f\xbe\x8b\xf2\x03\x29\x9f\xd7\x14\xb4\x00\x4b\xc1\x0e\xa7\x7a\xa4\x80\x88\x1a\xa8\x2d\xe9\x0a\xa9\x62\x16\x81\xf1\xb4\x82\xb0\xa8\x0e\x05\x68\x4c\x75\x44\x9f\xc4\xe1\x82\xc2\xbd\x1f\x01\x0d\x4d\x74\x66\x9f\x8f\x38\x31\x55\x6d\x59\x7e\xc3\xfd\x7e\x4f\x4a\xcd\xfb\xeb\x52\xbb\xfe\xf5\xe2\x16\xee\x99\x7c\xa9\x38\xd5\xad\xe1\xcd\xcc\x05\x47\x80\xe7\x35\x49\xf5\xa3\x2c\x66\x92\xa8\x49\xdb\x8c\x10\xb0\x6d\x1b\x42\x69\x88\x40\x78\x99\x66\x31\xaf\x9f\xf7\x13\x28\x4f\xc8\xb0\x85\xb2\x14\x25\xa5\x7c\xfc\xea\xfd\x94\x6f\x5e\xa9\x6e\x9f\x2d\x9a\xd3\x70\xdb\x17\x83\x57\x3c\xcf\x7a\xba\xb8\x7d\xb3\xcc\x4d\x6f\x39\x31\x67\xf0\x59\x44\xeb\x53\x1d\x7e\x0c\x7c\xfa\xc6\xcf\xf4\x77\x26\x79\x20\x4e\xd0\x60\x45\xb6\xbc\x3e\xca\xf4\xc1\x08\xc3\xca\x0e\x07\x33\x86\xae\xd3\xa2\xac\xfa\x38\x0b\xf6\x13\xa4\xae\xe8\x14\x65\xb0\x10\x44\x60\xb8\xef\x7d\x49\xef\x5d\x75\xae\xe2\xe9\x12\x45\x7a\x7e\x51\xa7\xd5\xac\x65\x31\x75\x8a\xe6\xb9\xd6\x6b\xe4\xe9\xf1\xc3\x0f\xee\xdf\xb7\x72\xc0\xa6\xd8\xa4\x8b\x99\xcb\xb2\xc3\xca\xbc\x6e\xe9\x94\xe0\xd5\x64\x45\xf3\xa1\x12\xc5\x08\xb6\x62\x41\x28\xe1\xb5\x3c\x1e\x12\xe7\x02\x36\xea\x75\x02\x1e\x85\xa3\x9d\x00\x83\x12\x8c\x0f\x7a\xef\xd8\xc6\x8c\xca\xde\xc1\x84\x98\x2c\x91\x51\xa9\x37\xe8\x35\x9e\x9b\x58\x7a\xe8\xe6\xa7\x39\xef\xcd\x62\xa7\xf6\xbc\x3b\x33\x7e\x70\xed\x1f\x4f\x04\xa0\x85\x70\xbe\x39\x45\xb2\x37\x5f\xd9\xac\x73\xe6\xfa\x2e\x8f\xa4\x38\x18\x23\x2a\x96\x05\x8b\x96\x22\x4b\x06\xef\x13\xbd\x92\x43\x79\xd8\x00\x41\x68\xb2\x2c\xd3\x1e\x36\x40\x09\x8c\x66\x62\x0c\x4a\xb2\x82\xe8\xfb\xc0\x39\x1c\x15\xba\x5e\x2a\xb6\xf6\xd7\x4a\x5c\xb6\xbd\x51\x05\x7b\x56\xfa\xb9\xf3\xed\x66\x27\x02\x74\x43\x7c\xfc\xbf\xeb\x8c\xa7\xb2\x56\x2d\x93\xcb\x62\xde\x00\x2e\xd1\x3c\x46\xaa\x01\xdd\xb6\x44\xd2\x47\x19\xb2\xe3\x30\x26\xe4\xd5\x10\xd9\xcb\x1a\x4a\xc0\xf2\x79\x78\x49\xb5\x28\x59\x56\x20\x09\x82\x0d\xf6\x03\xd5\x3c\xfd\xcb\x2a\x0f\x77\xe4\x3c\xb4\x2e\xef\x37\x79\xbf\x80\x5a\xff\x5c\xa1\x5e\xa9\x9d\xa7\x66\x9c\x88\x58\x3c\x28\x9b\x49\x77\x1d\x98\x30\x3d\x73\x93\x5b\x48\x95\xbd\x84\xcd\xc1\x38\xe6\xa0\x5e\x87\x44\x18\xcb\x76\x14\x91\x55\x14\x4c\xf6\x98\x1e\x9f\xd7\xe1\x05\xc2\xc7\x28\x1a\xc7\xf0\xb0\xea\x15\x29\x88\xfd\xc0\xf1\x21\xdd\x96\x5e\xde\x94\x65\xc6\x06\xc6\xb0\x0e\xd5\x89\xca\x29\xa2\xf7\x37\x7d\x5e\xa6\xb6\xfe\x5b\x64\x87\x7b\x97\x2a\xee\x7e\x73\xef\xd3\xb7\xcd\xa4\x6f\x74\x50\xdd\x24\x08\xd3\xcf\xc0\xac\xa2\x7b\x11\x93\x10\x51\x8e\x26\x30\x46\x95\x60\x03\x52\x3c\x58\x40\x0b\x70\xa8\x87\x83\x50\x8c\xf7\x7a\x15\x4e\xe5\xfe\xdf\x1b\x0c\xe0\x5d\x9e\x8c\xd6\x74\x82\xf1\xb9\x1a\x44\xa6\xd6\x84\xaf\x96\x54\x1c\x50\xaf\xe0\x9c\x2c\xfe\x11\x1b\x51\x7c\xf6\xed\x3e\xb7\xaa\xd5\xad\x7a\x2d\xee\x46\x2b\xbd\xe0\xc2\x2b\xf5\x4b\x1e\x86\x33\x57\x13\x04\x3a\xe0\x21\x25\xc9\x86\x29\x4b\x23\x4d\xcc\x0b\x13\x84\x22\x3b\x88\xee\x65\x69\x3f\x43\x22\x34\x26\xc2\xb6\x12\x50\xc5\x00\x2a\xcb\xb8\x88\x59\x08\x44\xa4\xaf\x09\x51\xc9\xf1\x1b\xff\x8b\x9c\x50\x63\x73\x42\xaf\xd2\x7b\x5f\x2f\xde\x51\xba\x4b\xc9\x41\xf7\x4a\x17\x90\xa6\xaf\x5c\x11\x3f\xf7\xeb\xc7\xd5\x32\xf9\x44\x37\x27\x20\x6b\x26\x63\x78\x35\xd2\xab\xe8\x12\x2c\x20\x94\x48\x79\x61\xaf\x22\x08\xbc\x29\xfb\x7d\x30\x44\xf2\xa6\x46\x48\x2a\x8e\x42\x12\xeb\x37\x03\x1a\x9a\xbe\x26\x6c\xdb\x9a\xf7\x9b\xc6\x25\x07\x38\x35\x72\x3d\x42\x46\x5c\x7d\x58\x30\xb2\x40\x83\xbb\xd3\xbe\xd8\x56\x20\x6f\xe3\xca\xab\xba\xed\xa9\xff\xe9\x87\xb5\xa4\xff\x2d\x38\x55\xf2\xd2\x92\x68\x1b\x32\x8b\x2a\x16\xee\xf1\xb3\x96\x46\xcb\x84\x1e\xe0\x4c\x94\xf2\xf3\x18\x2a\x12\x50\x00\xd3\x49\x98\x26\x21\x9b\xf5\x78\xbc\x29\x07\x3e\xbf\xcf\xf6\xf4\x75\xcf\xa0\xec\x8b\x1c\xf4\x71\x2f\xee\x65\xdf\x11\x15\x82\xf6\xa0\x63\xf3\xb7\xee\xdc\x18\xd7\xa6\x6c\xc3\x1b\xf3\x06\x15\xd3\x33\x57\xda\x38\xe2\x68\x9a\x8a\x2a\x88\xc9\x62\x1a\x4e\xa3\x88\x0c\xb3\x26\xab\xfb\x50\x9e\x85\x4c\xca\xc7\x10\x9a\x0f\x87\x11\x4c\x27\x4c\x0e\x27\x15\xce\x43\xb0\xc6\x3b\xb6\xc1\x69\xdc\x19\x2d\x92\x04\x13\x36\x36\x8e\x68\x90\xfa\x34\xee\xc9\x75\xa1\x67\x2d\x91\x9e\x37\x7e\x68\xd8\xe9\xce\xeb\x9d\x7f\x2c\x9c\x56\x8b\xff\xa6\x72\xcd\x26\xdf\x35\x21\xe7\xed\xc8\xfe\xf3\xde\xcc\x75\x7d\x3e\x0a\x31\x3d\x3e\x98\xc2\x68\x47\xc2\x30\x59\x62\x59\x1c\xe6\x3c\x98\xe2\x11\x15\x58\x36\x09\xc8\x63\xf8\x09\x5a\x71\x30\xc7\x54\x59\x9f\x43\xd3\x8c\x98\xfa\x2d\xc9\xff\x77\xf2\xc8\x00\xb2\x98\xb0\x65\x42\xeb\xdf\xe2\xf3\xde\x8f\x3b\x7c\x62\xbf\xe7\xce\xfc\x9c\xcf\xf4\x3f\x3f\x4b\xfc\x77\xad\x76\xec\xe6\xdd\x4c\xfe\x96\xa9\x46\xb1\x3a\x2c\x8a\x5e\x8a\x31\x2d\x4b\xf0\x88\x9a\x1f\x83\x2d\x91\xf0\x32\x02\xeb\x38\x8c\x47\xb2\xfd\x7e\xdb\x6f\xf0\x96\x17\x93\x14\xaf\x5f\x34\x65\xec\x03\x79\x58\xbb\xd5\xb7\x7d\x93\xa2\xea\x8c\x7a\xd5\x51\xef\xb0\x78\xd5\xf4\xa6\xd3\x7e\x6e\x8a\xac\x2b\xb4\xe0\x87\x27\x0b\x36\x2c\xb8\x72\x28\xef\xa7\x1f\x06\x97\xfe\xa6\x44\x56\xe6\x1c\x88\x15\x58\x95\xa1\x09\x5a\xb7\xe9\x80\xc4\xa9\x7e\x4a\xf4\xd1\x1e\x4c\x35\x25\x49\x81\xfd\x30\x4f\x69\x98\x6a\x6b\xaa\xa6\xe0\x86\xa5\xd0\xe9\xb3\x2d\x18\xf3\xa6\xdd\x7b\x48\xe5\x0c\xc4\xf4\x69\xfc\xf0\xfe\xec\xc5\x9d\xce\x88\x75\xaf\x4c\xa4\x63\xae\x8b\xdb\x7a\x0f\xcc\xfa\xe7\x8b\x4c\xde\xe1\x47\x38\x08\xca\x8b\x8e\x65\x50\xa2\x65\x13\x30\x27\xc9\xac\x4c\x8a\x01\x92\x11\x44\x36\xa0\x93\x04\xac\x73\x16\xad\x79\x3d\x3e\x5c\xb5\x71\x5b\xf0\xf0\x78\xfa\x20\x99\x35\xab\xb2\xde\x8b\x19\xb2\xe0\xd8\xb8\x06\x8f\xea\x54\xfd\xf6\xdb\xdc\x77\x67\x0e\xa8\xd5\x71\xb5\xef\xc2\xf4\x52\x71\x2f\x1b\x0c\x9c\x9f\xb9\x6c\x43\x5e\xc4\xe1\x11\xd3\x43\x88\x2c\x4d\xd0\x46\xc0\x84\x44\x88\x83\x64\x02\xf3\x08\x08\xc2\x4a\x98\x2e\xf8\x08\x81\x55\x2c\x14\x33\x45\xde\xc7\x09\x38\xf6\xbf\xe3\x69\x1e\x46\x7f\x5c\x25\x2e\x98\x90\xa5\x41\x54\x42\x6a\x0d\x5e\xcd\xe6\x3f\x7e\x68\xac\x6f\xe0\x18\xbb\xc1\xa9\xac\x9d\x37\x33\xf3\x8b\x75\xbb\xb1\xf6\x70\xd3\x3a\x7b\x75\xe2\x7a\x8f\xc5\x3f\x7d\xfa\x6b\x6d\xe9\x9f\x94\x20\x3a\x76\x40\xf7\x73\x12\xca\x90\x3c\x4a\x90\x1e\xdb\xf6\xc2\xa8\x40\x8a\x08\x89\x31\x2a\xa2\x7b\x7c\xb8\x25\xc9\x14\xe9\x73\x4c\x93\xd0\x0c\x09\x86\x3f\x30\x39\x47\x73\xb2\x27\x4b\x1e\xb8\x30\x69\x90\xde\x8d\x23\xa6\x0e\x2a\x90\x2f\xf6\x89\x14\x75\x31\x2a\xdf\x37\x77\xb2\x4e\x3f\xe0\x3d\xbb\x2e\x73\x35\x18\x95\x79\xde\x11\x50\x8f\xa2\x04\x64\x5e\xd4\x7d\x7e\x1f\x47\x9a\x7e\x94\xb6\x1c\xcd\x31\x79\x6f\xc0\x60\x50\x8d\x54\x75\x2f\x8c\x79\x70\x9e\x61\x50\x1e\xff\xc0\xb1\xd6\xcb\x22\x76\xf0\x0b\x16\x4f\x18\xb9\xb4\x65\xcb\xcb\x95\xea\xe6\xb4\xdb\x34\x1d\x52\xb8\x14\xb3\xef\xca\x5f\xbf\x7d\x33\xe6\x2e\xf3\x5b\xe6\xb2\x8d\x99\x1a\xab\x50\x1e\x92\xa0\x51\xcc\x61\x19\x9b\xf7\xa1\x4a\xc0\x91\x59\x3f\x1b\x50\x0d\x09\xb1\x34\x5c\x31\x74\xdd\x20\x61\x07\xb1\x74\x9e\xa6\x50\xc8\xf7\x81\x9d\xa3\x05\x2f\xdb\x15\x6f\x53\x0d\x67\x0c\xb3\xea\x42\x95\x73\xc5\xec\xff\x63\x62\xf5\xa3\xd3\x4b\xae\x7c\x11\xad\x5f\xfa\xa2\xd7\x5f\x5f\x66\xf2\x56\x79\x9e\xa1\x03\x02\x2f\x20\x12\x2f\x23\x3a\x81\xf9\x0c\xde\x92\x4d\x4a\xc5\x61\x08\x55\x3c\x0e\x4e\xd8\xbc\x57\x52\x70\x92\x81\x6d\xd4\x34\x54\x0d\xc1\x52\x42\x87\x34\xa5\xb6\x45\x07\xa1\xc3\x63\xd7\x76\x9e\x7c\xe9\x46\xe4\xd1\x92\x4d\x5e\x4f\xec\x95\x94\x3f\xff\x7c\x2f\x7f\x63\x87\xd0\xbb\xe9\xca\xb1\x99\xfc\xe5\x73\x98\xb1\x2d\x46\x44\x78\x98\xf4\xc3\x04\xaf\xe3\xa4\xac\x99\xba\x43\x2b\x2c\xee\xf1\xa1\x5e\x5a\xc5\x54\x86\x53\x25\x43\xe2\x39\xdd\xab\x50\x04\xa2\x62\x76\xfa\xb8\xfe\x3d\x5b\xcf\x22\x8d\xfe\x1d\x45\xee\x69\x57\xb9\x68\xa7\x53\x13\x43\x2b\x5e\x3e\x99\x92\xf8\xf9\x9f\xbd\xf6\x36\x1b\x9e\xf5\xf4\xb1\x02\x4d\x32\xd7\xa1\x42\x24\xed\x51\x08\xaf\x06\xcb\x8c\x83\x50\x02\x8e\xb3\x04\x2c\x50\x01\x54\xf4\xe2\x94\x26\x6b\x7e\x55\x25\x24\x08\x93\xfc\xaa\xc0\xa3\x14\x2f\x88\x92\xfe\xbf\x73\xde\x2e\xe7\xfe\xb8\x82\x7e\x30\x61\x51\x54\x96\x6a\x03\x53\x8d\xb2\xef\x96\x9a\x0b\xa6\x97\x08\x5c\x42\xb7\x4f\xaf\x3a\x62\x77\xaf\xbd\xd7\x5e\x94\x74\xae\xef\x88\x6d\xdb\xa3\x72\xdf\x06\xa5\x5a\x68\x99\x7c\xe4\x2d\x67\x9a\x3e\x91\xe2\x2d\x47\xb5\x6d\xd3\x6f\x90\x04\x03\x39\xa8\xca\x22\x38\xa4\x19\x01\xcc\x91\x68\xc7\x47\x98\x3a\xa5\x60\x82\xdf\x27\xf9\x6c\x59\x53\x8c\xf4\xb3\x9b\xad\x4b\x87\xcf\x7a\x31\x8d\xac\x59\x10\x2a\x32\xad\x4a\x44\xd9\x9a\xbf\x9c\x1a\x70\xe4\x1b\xa8\xe8\xa0\x3f\x1f\xc4\x3c\x5d\x39\xf1\xab\x37\x99\x7c\x7e\x8f\xcc\xc2\x38\x67\x04\xbc\x84\x47\x11\x44\xcd\x27\x8b\x18\xe3\x21\x70\x42\xd2\x50\x87\xf1\xeb\x92\xd7\x42\x64\x23\xe0\x37\x64\x1b\xa2\x2d\x8c\x24\x7d\xa9\x3f\xab\xf8\x3f\xb6\x9b\x4d\x9e\x9c\xd8\xa5\xdd\xd5\xf9\xf7\x5a\xf5\x1d\x56\xfc\xdf\xaf\xb3\x7f\xd7\xa9\x06\x17\xb7\xb4\xe7\x90\x38\xf4\x25\x72\x7b\x2a\x5a\x3f\x73\x8d\x8e\xc8\x9a\x88\x62\x9b\x1a\x86\xa8\xbc\x48\x39\xba\x0f\x83\x28\x35\x00\x21\x18\x23\x04\x30\x9e\x51\x1d\x8a\xa1\x04\x2f\xe7\x98\x22\x46\x89\xa2\x45\x1a\xc2\x07\xbe\x5c\xd0\x3e\xba\x78\x97\x3b\x43\x56\x35\xed\xbf\x6f\x5a\x62\x85\xc7\xbd\x6e\x3e\x5c\xf1\x2d\xf3\xeb\xc2\x3f\x4a\x6f\xf9\xae\xed\xf8\xd6\xc9\x55\x3e\x7d\x59\x22\xfd\x2f\x52\xd1\x8a\x87\x95\x2c\x99\xf5\x18\x32\x24\x09\x0c\x6d\x19\x9c\x89\xe8\xba\xc3\x4a\x3e\x18\x67\x1c\xd4\x67\xca\xba\xa4\xca\x02\x2c\xca\xa4\xc6\x92\x1e\x81\x4d\x1f\x24\xcf\x4a\x54\x1e\x3d\x86\x7b\x76\x64\x0e\xb5\x6a\x2c\x35\x7f\xc2\xa8\x3e\xdf\x0c\xf3\x1c\x20\xec\xec\xd7\x0b\x3e\xb6\xed\x36\x85\x3f\xbd\xc6\x9f\x7e\xe6\x6e\x60\x92\x06\x11\x08\xe7\x13\xfc\x86\x8c\x19\x08\x2d\xb0\x12\x6c\xca\x9a\xc2\xa8\x94\x44\x21\xa6\x29\x58\x18\xaa\x39\x1a\x4b\x60\x90\x8e\x3a\x26\xfe\x81\xaf\x07\x8d\x7b\xfc\x74\xb2\x30\xac\x7b\x87\x8b\x4b\x3a\xd7\xf6\x6d\x5a\xf0\xf5\x55\x7c\x75\xa1\xe9\x5d\x26\xfe\xd8\xe7\x56\xab\x9f\xeb\x34\xfd\xf6\xd3\x37\xb5\xa4\x0b\x12\x86\x82\x74\x1f\xce\x5a\x18\x4d\xc2\x10\xe1\x35\x08\x13\xb3\x59\x9b\xa5\x08\x5a\x14\x19\x87\x22\x39\xc9\xf6\xb0\x36\xcd\x12\x9c\xa2\x08\x24\x47\xf8\x55\x3c\x7d\x90\xcc\x8f\x3f\x33\x33\x0a\x4e\x3e\x27\x3f\x5d\x2a\xb5\xa9\x5b\xe1\x6b\xf1\xbb\xa3\x75\xfb\x7d\x51\xed\xec\x15\xac\xe3\xbc\xc4\x03\x15\x3f\xfd\x40\xf8\xf4\x73\x71\x83\xf2\x07\x08\x51\x30\x2d\x38\x10\xf0\xf0\x0e\xa3\x6b\x32\x8d\xc8\x36\x0b\xdb\x1e\x56\x65\x7d\x18\x6d\x2b\xaa\x01\x2b\x1a\x26\x23\x38\xaf\x98\x5e\xed\x03\x21\xf1\xf8\x6d\xe5\xf5\x19\xbb\xa4\xc3\xf4\xa2\x22\xdb\xe7\x16\xe9\x59\x76\x74\x95\x07\x5c\xe5\xc8\xaa\xfb\xbe\x1b\xb5\x6b\xd4\x83\xa4\x67\x9f\x7e\x28\x7c\xfa\xd8\xf6\x04\x60\x9e\xf1\xd9\x08\xcd\x49\x38\x2e\x52\xb2\x0e\x41\x8a\x60\xcb\x22\x83\x04\x18\xaf\xa8\x8b\xb0\xe5\x51\x4c\x1d\xb2\x68\x91\x25\x48\xd2\xe3\xd7\xb9\xf7\xea\x24\x19\xad\xa5\x04\xe3\xa3\xb2\x27\xa6\xae\x93\x60\xcf\x92\x3a\x5d\xda\x39\x69\xd8\x3f\x0d\xdb\x7a\x1a\x3d\x65\x47\x77\x8a\xab\xdd\xd4\x37\xfd\xe4\x94\x55\xf3\xa8\x6d\x8b\x7f\xde\x9f\xb9\xaf\x7d\xf9\x50\x18\x23\x6d\x43\x0d\x18\x24\xed\x30\xbc\x22\x78\x64\x83\x56\x18\x18\xa3\x70\xdd\x90\x69\x8b\xd5\x05\x08\xd6\x54\xc3\xa6\x34\xaf\x46\xf9\x6c\x2c\xec\xcb\xd2\xf9\x24\xfa\x67\xbf\xcd\xc9\x79\xb3\x52\x4b\xef\xf7\x0f\x36\x9c\xdd\x5e\xa5\xf8\xd9\x18\xea\x46\x91\xa8\x1b\xff\x74\x5a\x7e\x7d\xc1\x57\xf5\xf3\x2d\xcc\xe4\x8d\xee\x82\x85\x4a\x7e\x08\x47\x28\xd2\x26\xfd\x08\x4e\x06\x5c\x06\xa5\x00\x4b\x78\x6c\x9e\xc2\x29\x16\x0f\x90\x3e\xc4\x34\x31\x03\x83\x49\xaf\x68\x2a\x29\x59\xd6\xfb\x56\xbe\xc9\x57\x42\x64\x96\x4e\xa7\xfe\x2e\xb1\xb3\xa9\x3c\xe4\xcf\x56\xab\x92\x06\xa8\x3f\x6e\x58\xf4\x6b\x81\x03\x8d\x17\x1e\x38\xfe\x7d\xbf\x4f\xdf\x9f\x9f\x3e\xa4\x34\xd5\x72\x64\x44\x65\x59\x99\x26\x50\x22\x00\x71\x52\x00\x47\x08\x16\xb2\x20\x8c\x74\x6c\x38\x60\xf8\x51\x98\xf1\x39\xba\xc0\x99\x5e\x85\xf6\xd2\x3a\x95\xbe\xb4\xff\xbe\x53\xa0\xc4\x94\x56\xdf\x0c\x1b\xd1\x7d\x63\x4b\xe9\xd8\xf9\xbc\xf1\xcb\x3b\xfe\x98\xaf\xb2\xfc\xfd\xc5\x69\x37\x66\xae\x9c\x13\x77\x22\x73\x15\x58\xf5\x19\x7e\x06\x41\xfc\x94\xcd\xa1\x64\x40\x44\x60\x82\x72\x14\x81\xc7\x70\x01\xe3\x7c\xa4\x61\x68\x22\x4d\x10\x8e\x25\xeb\x5e\x9c\x75\x1c\x5b\x66\xa0\xff\x05\xf2\x54\x0a\xc3\xff\xb6\xaf\x57\xb4\x73\x8e\xfd\xd5\x9f\x57\xb5\xe7\xaf\x9a\xf8\xb4\xe7\x9a\x9e\xf9\x4e\xdd\xa0\x6a\x6f\xcf\xf7\xf8\x9b\x1c\xb5\x0d\xf6\xeb\x60\xc2\x96\x2c\x11\xa5\xfb\xbf\x1d\xa4\xcb\x42\xca\x70\xe3\x22\xc8\x06\xe1\x5b\xd7\xde\xdd\x22\xc0\x05\x05\x7e\xbb\x9e\xa3\x41\xa7\xf0\x5b\x22\xc9\x0f\xbf\x68\x67\x84\xc6\xdc\x2a\xbf\xa9\x6a\xee\x7b\xc6\x94\x5f\xaf\x3f\x7e\xdc\xb6\xde\xa8\xb3\xb9\xef\x1f\x9a\x53\x32\x0b\xf1\x2c\x18\x57\x20\xa2\xf7\xdb\xa7\x62\xfd\xff\x6f\xc9\x73\x6b\xb9\xd2\xe3\xaf\x0e\xab\x7e\xf5\x75\xcc\xd4\x16\xad\x96\xb4\x1c\x77\x57\x97\x06\xd6\x1c\xdf\x65\xee\x9e\x15\x57\xf1\x41\xbf\x8c\x2b\x7e\x27\xf7\xc7\xb5\x0b\x26\xbc\x79\xf3\xe6\x4d\x72\x4c\xea\x05\x55\xf3\xd4\x86\x43\x07\x17\x39\x2f\xc8\x89\x3d\x9f\xcc\x1a\x3d\x75\x61\xa8\x1e\x7a\xb6\xab\xb4\xec\x8f\x5e\x7c\x95\x60\x4d\x38\x9e\x4c\xb3\x5d\x7e\xfd\x85\xd6\x76\xbf\xef\x76\x14\x72\x22\xfc\x51\x6f\xf2\x1f\x7c\x78\xab\xe2\xea\x2d\x85\x26\x98\xc3\xf3\xe3\xaf\x8b\x75\xdf\x94\xe6\x4b\x38\xda\x8c\xee\xf5\xb8\x21\x17\x88\x36\x97\x57\xae\x29\x5b\xb4\x6f\x95\xa9\x3d\xef\xff\x92\x83\x78\x59\x2a\x57\x93\x46\x4b\x27\x47\x3f\x7b\x98\xba\xf5\x9d\x35\x9b\x9f\x3d\x5b\xc5\x5f\x9e\x1a\x51\xd5\xdc\x3c\x73\x44\xd9\x06\xd7\x46\xe4\x2c\x33\x60\xd4\xd3\x65\xaf\x27\x4e\x6b\xbe\x2a\x69\x7f\xea\xd6\x35\xa6\xf5\x7b\x5c\x6f\xd0\x92\xf2\x26\x5a\x31\xf9\x0e\x39\xb5\xc1\x95\x55\xd3\xe7\xa3\x21\xe9\xf4\xd2\xcd\xad\x57\xc5\x56\xa6\x2f\xa5\x6e\x1d\xf7\x72\x93\xae\xec\xe9\x71\xe7\x48\xdb\xce\x07\x8f\x7c\x7e\xb7\x69\xa5\x1c\xeb\xbe\x5f\xb1\xd9\x57\xa6\x4e\xbd\xce\x7c\xdd\xdf\xfe\xdb\x94\xba\xf5\xb1\x27\x7b\xf9\x07\x33\x0a\x2b\x8f\xfb\x98\x95\xea\x6c\x6b\xf9\xcf\xf1\xea\x79\xd6\xc5\xae\xd7\xfa\xe7\x1b\x9f\x5b\x9d\xb3\xbb\x6e\xa5\xd4\xad\x85\x82\x5a\x7c\x64\x64\x9d\x53\x07\xbf\x69\xf5\x4d\x30\xf9\x6c\x60\xb7\x6f\x09\xb9\x64\x56\xe7\xba\x42\xa9\x19\x15\x0b\xbc\x88\xa7\x52\xb7\xfe\x8f\x6c\xb2\x7e\x5a\xe9\x51\xaf\x8b\xf5\xeb\x8e\x1e\xdd\x3b\x3f\x94\x3d\x5b\x89\x1d\x81\x26\x89\x1d\xa2\xc6\xd7\xec\xdf\xbb\x5d\xd2\x83\xd4\xad\x37\x1a\xb8\x53\x6f\xc4\x4f\xc3\x66\xcf\xef\x36\x68\xcc\xfd\x7b\x2d\xdb\x55\x36\xd6\x4f\x2a\x7c\x7e\xd3\xd9\x65\x51\x37\x57\xc7\xb4\xaa\x9c\xba\xf5\xc0\xdf\xb7\xcf\xfa\x6c\x7e\x93\x8b\x51\xf7\x87\x8c\x6b\xd5\x79\xf4\xe8\x40\x8e\xe7\x15\x46\xd5\xa8\x23\xfe\x56\xb4\x7f\x3c\x54\x5b\xb8\x9c\xa6\x75\x89\x3b\x7a\x7c\x9c\x9c\xf7\xcb\xd0\xe2\xc5\x4f\x36\xae\x92\xff\x28\x79\xba\xfd\xa4\x07\x1d\x8d\xe1\x23\x97\x5f\x3b\x37\xfb\xc2\x8d\xd4\xad\x23\x4a\xec\x1a\xfb\x65\x42\x93\x98\xd2\xd7\x66\xd4\x5e\xba\xb0\xcc\xd7\x8b\x0e\x9a\xc5\x06\x95\xef\x8f\x0f\xb8\xd3\xf2\xab\x39\xf3\x42\x69\x96\xe9\x2f\xef\x19\xb0\x68\x89\xd9\x67\xf6\xd5\xd9\xdf\x77\x1b\x52\xbc\xfc\xe0\xde\xcf\x16\x3d\x54\x9d\x92\xe5\x37\x3e\xee\x1f\x3f\x6f\x7b\xe5\xd5\xa9\x5b\x3f\x42\x7b\x5f\xc8\xc3\x6d\x68\x66\xf4\x2a\x2f\xdd\x6f\x5f\xed\x51\x72\xb5\x76\xc5\x5a\xf7\xf5\x4f\x3e\x56\xb4\xea\x99\x69\xcc\xb1\x8a\x69\xe6\x12\xff\x67\xd1\x88\x99\x6b\xab\x64\xbd\xda\xb9\xd9\xf4\x6d\xcf\xa6\xde\x1a\x37\x78\xcc\xce\xb9\xd6\xca\x7c\x45\xce\x66\xeb\xc9\xae\x69\x98\xba\xf5\xa5\x00\x9c\x6d\xcc\x96\x87\xec\x99\x9f\x4b\x93\x83\x5b\x5d\xa8\xd4\x30\x29\xcb\x95\x86\x33\x56\x14\xae\x52\xe5\x69\xe7\x36\x17\x16\x60\xa9\x5b\xaf\xe9\xfc\xd2\xbb\xa8\x43\x03\xaa\xd3\xeb\xcb\x09\xdf\xaf\xee\x68\x95\x38\x1f\xea\x5b\x3c\xbe\x57\xc3\x42\x7b\x56\x0e\x94\x7f\x2b\xd5\x38\x75\xeb\xb3\x47\xa6\x8d\x3a\xf5\xb7\x20\x1c\xec\x5e\x34\x5b\xf4\xcb\x5a\xd1\xf3\x8e\x35\xf9\xbc\xe3\x90\x32\x3f\x76\x28\xf1\x7d\x93\x3e\x8d\xb7\x76\x49\xdd\xba\x5f\xaf\x89\x95\xd8\xcb\xc3\xcb\x2c\x7c\x58\xb1\xe3\x6f\x1d\xeb\x4d\xed\x96\x78\x6c\xc4\xbd\xab\x0b\xcb\x1c\x3f\xf0\xb0\xd4\xbc\xdd\x41\x5f\xea\xd6\x5d\x8e\xb5\x6d\xe5\xfb\xb9\xc8\xcb\xd0\xa0\x8e\x5f\x19\x65\xe6\x37\xf1\x5b\x0f\xaf\x3f\x8f\xcf\x46\xae\xfc\x7b\x60\x83\x5d\xf3\x06\xf7\x4b\xdd\x7a\xce\x9a\xb2\xe8\xe6\x15\x6b\x7e\xba\x7c\xad\xed\xa5\x6e\x3e\xdf\x83\xd3\xc3\xa6\x96\x5f\xd6\xb4\x67\xf0\xf6\xc3\x06\x6c\xe2\x95\xad\x63\x53\xb7\x2e\x30\xee\x6c\xfd\x16\x76\xd2\xc6\x63\xdd\x1c\xf4\x40\xcc\xab\x36\xfc\x4d\xfb\x7c\xdc\xa8\x42\x25\x4a\x17\xfb\xfc\xaf\xbe\x2f\xc6\xb5\x4f\xdd\xba\xd6\x9a\xaf\x17\x47\xd7\xaa\x13\x94\x4f\x0b\xc1\x41\x7b\x8b\xad\xfd\xfa\x76\xcf\xd8\xe6\xcb\x22\x87\xff\x92\x6b\x6c\x83\x65\xcf\xaf\xf4\x4d\xdd\xba\xeb\x2b\x68\x5f\xa7\x59\xf4\x80\x75\x77\xf6\x2f\xbd\xd4\xe7\xf9\xa4\x29\x43\x9a\x0e\xdf\xf7\xdf\xf8\x93\x15\x7d\x49\x35\xca\xdf\x1b\xe2\x4f\xdd\xfa\xf0\xb5\x43\x95\xab\x35\xcc\xb6\xed\x41\xdc\xfe\xcf\xea\x1f\x15\xbb\x2d\xb8\xf8\xf2\xd4\xe2\x33\xbd\x8e\x4c\xf9\xa6\xea\x9a\x3f\xd8\x75\xdb\x53\xb7\x9e\x5a\xaf\x7b\xe3\x41\xf4\x9f\x5d\xb2\x14\xaa\x74\x6f\xcf\xda\x86\x77\x5f\x96\x56\xde\xb4\x9a\x53\x5c\x9e\xb0\x61\xf4\xa1\xa8\x8b\xd9\x94\xd4\xad\xb7\x25\x4f\x60\xbb\x47\x7f\x5e\xe6\x52\xe4\x8c\x7a\x5f\x3d\x1f\xd6\xb8\xe9\x98\xbf\xb7\x56\xfc\x6d\xf1\x8e\x7c\x68\x83\x9a\xf6\x95\x46\x73\x53\xb7\xae\x76\x38\x7f\xf2\x89\xbd\x4b\xd4\x5a\xb5\x86\x8f\x3c\x77\xe5\xf7\x7f\x56\x62\xb5\xea\xb5\xec\x11\x3f\x35\x69\x4f\x89\xfd\x43\xff\x68\x30\x27\x75\xeb\xe9\x37\xf7\x0d\xba\x1d\x1b\x5c\xd3\x63\x68\xcf\x6f\xf9\x98\x3c\xa7\x2e\xf6\xf9\x63\xe2\x88\xd1\x43\xbb\x3e\xcb\xbd\xe7\xd7\x9f\x2a\xac\x4a\xa3\x0d\xd6\xa4\xc6\xa7\x3a\x96\xcb\xbe\x07\xce\x3f\xea\xd8\xb6\xc2\xd8\xe8\xaa\x55\x1a\xaf\x7c\x56\xb6\x50\xa1\x1c\x5b\xad\xb6\x57\xde\x0c\x88\x4a\xb3\xf9\x6e\xe6\xaa\xcb\xa5\x5b\xc7\xcf\x6f\x14\xbc\xcf\x78\x4f\x38\xd1\x59\xd7\x1e\x9b\x61\x15\x39\x12\xf9\x38\x5b\xe2\xdc\x07\xf5\x9a\x35\x3f\x18\xf5\x71\x96\x3b\x98\xf0\xe2\xd5\x86\x50\xf2\x17\xa9\xa9\xdb\xf9\xc7\xdc\xca\xfb\xf3\x0f\x95\x3a\x8e\x68\x36\xa8\xf1\x5f\xb5\x89\x8b\x27\x1e\xdd\xef\xfa\x70\xc9\xe7\xfc\xc3\x69\xcf\x3a\xc4\x1d\x1e\xf1\xb6\x48\x14\xb7\x20\x5f\x28\x18\xb7\x22\x32\x94\xe2\xcc\xa6\xe4\x0a\xa5\xdc\x1e\x91\x37\x14\x8c\x4b\xca\x97\xf2\x57\x6c\xae\x50\x30\x6e\x44\xb6\xd0\xdb\x2d\x37\x71\x43\x0b\x86\x82\x71\x13\xb3\x84\x82\x71\xaf\xa3\x43\xa9\xbb\xfc\xf1\x6e\xbe\x52\x05\x1b\x9c\xed\x37\x3a\x57\x8e\x17\xa7\xef\x3e\x45\x6b\x1d\x0e\xfe\xf1\x5b\xe4\x9a\x79\x2b\xd7\xf6\x4d\x3e\xf9\xef\xfc\xf3\x29\x9d\x5c\x28\x18\xee\x64\xbf\x4b\xe4\x61\x9e\x70\xdf\xcb\xb3\x85\x6f\xaf\x8a\x0a\x05\xe3\x36\x47\x87\xff\xda\xe5\x72\x72\x31\x47\x9a\x9e\xae\x8e\xb9\xde\x3a\x69\xa4\xf0\x60\xfb\xe1\x3b\xf0\x80\x13\x8d\xb2\x16\xeb\xf8\x70\x7f\xcd\x9e\xbe\xa2\x7d\xda\x4f\xc9\x13\x38\x5f\xaa\x45\xea\xd6\x49\xbd\x7e\xf0\xc0\x83\x7f\x52\x1a\x3f\x28\xe0\xc9\x17\x75\xfe\x87\xba\x6b\x6a\x8f\x6f\xdd\x69\x58\x97\x97\x8d\xcc\x17\xd9\xc7\x95\x92\x52\x7a\xda\xe8\xb2\x73\x16\x30\xb7\xcd\x15\xcc\x93\xe8\x30\x73\xbf\xe7\x4c\xc3\xc0\xce\x1b\xd0\x5f\x1d\x1f\x1e\xae\x30\xe0\xe4\xfa\x33\x71\x25\xaf\xd6\x7a\x52\xf6\xc2\xf7\x44\x37\xfd\x87\xb6\xdd\x95\xef\x0e\x17\xec\x3f\x27\x85\x48\x52\xf6\x50\x30\xee\x58\xbe\xb0\xe4\x76\xe7\x0f\x05\xe3\xee\xbb\xe3\x79\x93\x37\x7c\x6b\xb6\x2b\xcc\x39\x91\xa1\x60\xdc\xd2\xdc\xe1\x5b\x6b\x72\xb8\x6c\xb8\x0f\x9e\xcd\x13\xbe\x35\xd3\x6d\x75\xa4\x40\x28\x18\x77\x33\x6f\x98\xbd\x19\x2e\xb3\x5b\x23\xc3\x7f\x0d\xcf\x1a\x0a\xc6\x9d\xcf\x19\xfe\x6b\xb3\x3b\x5f\x47\xa3\xc2\x0f\x4f\x78\xdb\x85\xdb\xf5\x91\xe8\x50\xfb\x8f\xc3\x46\x30\xa1\x6b\xc4\xc0\xc4\x94\x62\x73\xdc\xf0\x1c\x61\x21\xbc\xcc\x15\xbe\xf8\x37\x4b\xf8\xe2\x72\xde\xf0\xc5\xd8\x7c\xa1\xe6\x1f\x87\x81\x60\x7c\x4c\x62\xa1\x94\x5c\x23\xee\x79\xce\xf0\xe3\x03\xb3\xa7\x5c\xc4\x76\x0b\xdf\xd8\x99\x3b\xd4\xf2\xe3\x66\x3a\x98\x10\x55\x29\x4b\xf8\x94\xba\xb8\x64\x30\x5f\x53\xa3\xc2\x17\x7f\x82\x2e\x5e\xe4\x0f\xfd\xfa\x71\x68\x08\x26\x2c\x8a\x88\x88\x0a\x0f\x7e\x0d\x18\xf3\x72\x80\xd3\xfd\x05\xc2\xbc\x6a\xe1\x1b\xc3\xf3\x87\x7e\xfa\x38\x50\x04\x13\xe2\x0a\x44\x44\xf4\x49\x79\x6c\x46\x98\x4e\xdc\x92\xfc\xe1\x79\x4b\x74\x81\x7f\x22\x5b\x68\x5c\xd4\xc7\xc5\x60\xc1\x84\x5e\x6f\x5e\x9f\x49\x2e\x99\xc2\x4e\xd6\x30\xb9\x55\x61\x50\xc4\xfe\x14\x0a\xc6\x3d\x28\x10\xa6\xdd\xdb\x85\xdd\x3a\x80\xb1\x91\xd1\xee\x5f\x2e\xc2\x1f\x87\x1f\x8b\x2d\x17\xfe\x69\x51\xb6\x50\x30\xee\xa4\x8b\xa0\x07\x59\xc3\xcf\x4e\xcd\x19\x0a\xc6\x5d\xcf\x95\x46\x03\xea\x35\x7c\xbc\xe8\xe2\xb7\xb9\x8f\x8b\xaf\x3b\xae\x2b\xb5\xe0\xf4\xc0\x23\xf3\x1a\x7e\xd3\x3b\x4b\xd7\xfa\x67\xae\xff\xf4\xbc\x7a\xfb\x4a\x1d\x52\x9e\xfd\xc7\x45\x5f\x08\x8c\x70\xb2\x3b\xc2\x5d\x51\xe1\xbf\x66\xba\x48\xdf\x01\x8c\x4c\x20\x14\x8c\x9b\x00\xd8\xed\xe3\x72\x31\x2e\x4f\x9a\x2e\x7b\xb4\x9a\x55\x77\x77\xcc\xd4\x15\xf1\x33\xff\xee\x4b\xca\x0b\x23\xbb\xf3\x89\x4d\xfa\xc5\x54\xb2\x56\xd7\xfc\x6e\xcc\xf3\xaa\x4d\xce\xa4\x6e\xfd\xc5\xce\xfa\x03\xfe\xe9\x34\x77\xbd\xb7\xfd\x92\x53\xfc\x8a\x2f\x8a\xd7\xed\xb2\x6a\xe8\x3a\xfb\xf6\xab\x52\xf7\xe7\xff\x4c\xaa\xf3\xe2\xc3\xea\xe1\x4a\x61\x72\xee\x50\x30\xee\x16\x90\xe0\x36\x00\x9e\xc5\x39\xc2\x42\xf9\xd3\x1d\xc5\x26\x97\xa7\x2b\x91\xe1\x5b\xe3\xdf\x9a\x41\x57\x8e\xeb\x81\x7e\x8c\x03\x2a\xd7\xcf\xa5\x99\xe4\x8e\xf5\x0c\x90\xf8\x5c\xf7\xe1\x13\xae\x20\x6f\x02\x61\xac\xc8\x13\x0a\xc6\x3d\x07\x56\x6f\xa2\xab\xa1\x8f\x00\x5a\xcf\x00\x52\x1b\x5c\x19\xfd\xf7\xd6\x50\x16\x08\xf1\x1f\x27\xf9\x60\x7c\xc7\x4a\x59\x06\xa4\x10\x4a\x0c\x6b\x56\xdc\x13\x30\xa8\xbd\x80\xdd\x01\xe0\xce\x4b\xa0\xce\xd7\xc1\xc5\xac\x2c\xa1\x2e\x1f\x27\xf2\x60\x42\x83\x1d\x11\xd1\x61\x65\xb9\x0c\xdc\xc7\x6e\x17\x6d\xb7\x0a\x86\xa9\x9d\x05\xa3\xda\x0d\x74\x68\x47\x76\xa0\xde\x19\x4d\x52\x30\x21\x18\x13\x11\xde\xcd\x14\xb7\x28\x1f\xd0\xc1\xfc\xe1\x8b\x57\xd9\xc2\x17\x0b\xf3\x86\x36\x64\xfb\xb8\x64\x24\x98\xf0\xc2\x4d\x8f\x4a\xa5\x3c\x38\x21\x3a\x2c\xe9\xfe\xae\x7d\x5d\xe8\x8a\x7b\x59\x5a\xbf\xb6\xff\x9f\x6b\xb5\xba\x6e\xeb\x9b\x78\x69\x3e\xbf\x64\x6b\xb9\xd3\x53\xa7\xdf\x7f\x5e\x35\x71\xb6\x90\xf0\x57\xc5\x56\xce\xe7\x57\x4b\xcf\x4b\x19\xf4\x56\xd7\x66\xdf\x06\x16\x68\x14\x30\xde\xb3\xdd\x69\xde\xef\x0a\xe4\x1c\x00\xfe\x12\x17\x1a\x07\xf3\x00\xf5\x72\xcd\xff\x3d\xe0\x77\x66\xba\x18\x99\x53\x30\xfc\xf0\x34\x17\x36\x47\xde\x7a\x91\x2c\xe1\x06\x23\x5d\x3e\x8f\x15\x48\xc3\xa2\xd8\xb1\x5a\xdf\xe7\x47\x4b\xd7\xf4\xf6\x1c\x4a\x57\xef\x59\xb9\xf2\x8b\x1d\xe5\x1b\x56\xa8\x36\xf5\xc2\x8e\x96\x17\x2a\xb2\x85\x9a\x0c\x49\x21\x37\xcf\x25\xbe\xc7\xed\x7d\x4f\xee\x30\xb9\xfb\x2e\x8e\x9f\xe5\x04\xa8\x76\x91\xb6\xc9\xed\xe1\x2e\x10\xf1\xec\xc8\x34\x5d\xad\xa1\x73\x6e\x29\x28\x7c\xd6\xa9\xc5\xe0\xdb\xa7\xaa\xd6\x5f\x64\x76\x39\xfd\xac\xf6\xb7\x48\x8f\xad\x15\xd9\x3a\x7d\xb7\x9a\xf3\xbb\xa7\xd0\x1d\xe7\x4a\xf2\x40\x78\xc4\xb1\xb2\xab\xe9\x00\x06\x9b\x80\x43\x5c\xea\x0e\xec\x94\x6b\x6b\x42\x69\xc7\x73\xaa\x5e\xf9\xeb\x7d\xfc\x7d\x66\xdd\xbd\xdb\x41\x6e\xbe\x78\xd1\xb9\x8a\x1d\x5b\xaf\xfe\xb1\xc2\xa6\xeb\x4d\x27\x17\xd8\x3d\xae\x5f\xa7\x1d\xa9\x5b\x33\x3d\xeb\xdf\xdd\xbf\xdf\x9e\x3f\xf1\xf3\x03\x9d\x1a\x5e\x1b\x90\x73\xce\xdf\xc2\xbd\xfd\xd3\x0a\x9c\xae\x57\x30\xe6\xa9\x94\x8d\x84\x52\xb7\xce\xd3\x79\x4e\x95\xf6\x95\x8d\x19\x3d\xf2\xf5\x9d\xf8\xf3\xca\xef\xb2\xd5\xcf\x59\x78\x6a\x16\x7c\xda\x66\x9e\x9a\x92\xd8\x7f\x78\xd4\xf3\x14\x2e\xff\x8a\x4a\xc3\x92\x39\xee\x79\x68\xdd\x6b\xe3\xcd\xa9\x88\xb1\x4b\xe3\x7f\xe1\x7e\x99\xd6\x24\x1e\xaa\x57\xfd\x3b\x66\xf9\xaa\x23\xf3\xad\xf1\x85\x97\xa5\x8c\x69\xa0\x2b\xbc\x91\xae\x88\x1f\x83\x10\xe6\x1f\x77\xf2\xef\x01\xeb\xb2\x1d\x68\x7c\xb2\x3b\xf0\x89\xe0\xf6\xd5\x48\xa0\x12\x19\xa1\x2d\x98\x10\x95\x25\x32\x5c\xae\x8b\x3b\x00\xa6\x69\x04\x00\xde\x48\x20\xe6\x13\x39\x00\xc5\x8c\xc0\x11\x4c\x88\x8c\x2c\x04\x7c\xe8\x19\x60\x1f\x0e\x02\xfb\xf0\x0a\xa8\xed\xa3\xc8\x50\x8b\x8f\xc3\x40\x30\x3e\x4b\x2e\xc0\xe2\xea\xdc\xe1\xc7\xd7\x03\x5e\x13\x41\x17\x7b\xf2\x80\x88\x24\xa3\xf9\x0e\x26\x44\xc6\x7c\x96\x25\x6c\x67\xae\x81\xb1\xf6\x06\x26\x66\x01\x18\xf4\xdf\xc0\x20\xcc\xcf\x16\x6a\xfb\x71\xe0\x08\x26\x64\x69\x10\x11\xd7\x37\xac\x7e\xee\x5c\x3d\x02\x64\x6f\x83\xc0\x78\x22\xb0\x3c\x77\x22\x43\xcc\xc7\xa1\x28\x98\x90\xb5\x60\xf6\x88\x94\x5a\x52\xdc\x32\x20\xc2\xde\x80\xd0\x40\xc0\xe8\x7a\x30\x98\x39\x40\x25\x67\xbb\x6a\x31\x27\x0f\x30\xc1\x19\xe1\x2e\x98\xd0\x3b\xaa\xc0\x3b\xd1\x80\x8e\x2e\x00\x61\xdf\x00\xd3\x38\x1e\xe0\x71\xb4\x6b\x70\x0e\x46\x87\x56\x46\x7d\x5c\x3d\x26\x98\x50\x7f\x7d\xaf\x37\x6e\x7e\xe1\x02\x7c\xb0\xeb\xa8\x4e\xb9\x76\xe2\x1a\x08\x3f\x83\x6e\xf8\xb9\x22\x6d\x8c\x3e\x24\x39\xe7\x94\xb6\xb7\xb2\xee\xb4\xac\xe1\x9b\xce\xdf\xd9\x76\xff\xcd\xb4\xab\x77\xe7\x0f\xed\x77\xbc\xad\xfe\x6b\xd4\xda\x0e\x98\xf5\x96\x5c\xec\xaf\xa1\x60\xdc\x5a\x57\x13\x4e\x00\xcf\xba\xdb\x65\xef\x90\xeb\x42\xdf\x84\xfd\x6f\x6c\xcd\x50\x30\x6e\xac\x6b\xbb\x5e\x02\xd3\x31\xc8\xfd\xfd\x3f\xb7\xe5\x19\x30\x47\xc3\x81\x20\xb7\x80\x81\x8e\x70\xdd\xfa\x2c\x20\xd6\x61\xae\x66\x3e\x06\xda\xb7\xcb\x7d\xf6\x75\xf8\xb7\x58\x29\x14\x8c\x9b\x9e\xd6\xd0\xf9\x37\x9e\xa8\x33\xf3\x8f\x83\x4b\x6f\xfc\xf0\x72\x48\x1b\xd8\xde\x38\xa5\x51\xa7\xe6\xd5\xca\x7f\x36\x7d\xef\x8a\xa4\xf2\x3b\x47\x2f\x1d\x19\x56\x78\xb7\x93\x73\xee\x94\x85\x00\xac\x37\xa7\xcd\x16\x9c\x15\x94\xf0\xf2\xe4\x83\x0e\xb5\xa3\xd7\x6f\xce\x9f\x6d\x51\xe3\x79\xc5\x76\x7d\xb9\xb2\xd7\x8e\x45\xf2\xa0\x85\x27\xae\xfc\x7a\xe9\x87\x14\x96\x5e\xb9\x42\x7d\x03\x84\xfa\xa7\xcb\xee\x29\x00\x97\x7f\x0b\x84\x07\xde\xd7\x15\xc3\x9f\xee\xe8\xaf\x00\x0f\xb3\xd1\x9d\x91\xad\x6e\xf3\xa3\xd9\xd2\x74\xdc\xe1\xa7\x92\x67\x03\xc9\x3f\x0d\xa9\xb4\xb8\xf3\xe6\xd8\x2f\x36\x0d\xfd\xe5\xb6\xd1\xa7\x42\xee\x06\xf5\x7f\xdf\x7f\xf9\xc4\x8d\x46\x83\x5e\xa6\x10\x5f\x0b\x72\xbb\x15\xee\x44\x5e\x72\x07\x74\x27\x7b\x58\x32\x5f\x86\x82\x71\x73\x41\xc8\x32\xc1\xed\xfc\x7c\xd6\x50\xb3\x8f\x9b\xe1\x60\xfc\xc6\x11\xc0\xac\x84\xc2\x23\x89\xe5\xc2\xff\x13\x60\xda\x0a\x02\xa3\x92\x91\xbc\x83\xf1\x85\x12\xa3\xc3\xe4\xa6\x81\xb8\xe6\x10\xd0\xa3\xb1\x00\xe7\x43\x73\x03\x82\x19\x89\x3d\x18\x5f\xa0\x2b\x88\x2d\x06\x00\x82\xd7\x81\xc8\x97\x81\x3b\x7f\xbd\x33\xcd\x19\x89\x33\x98\x10\x17\x11\xd3\x20\x4c\x71\x0f\xd0\xc0\x75\x20\xd2\x9f\x04\xee\x2c\xce\x1f\x3a\x11\xf5\x71\xe5\xcd\x60\xc2\x82\x17\x77\xdf\xbc\x0d\xf2\x83\xc1\xb8\xc1\xae\x79\x5a\x00\xb2\xae\x75\x40\x65\x76\xb9\x93\xbf\xdb\x9d\xb7\x17\x40\x09\x4e\x82\xc8\x73\x89\x8b\x95\xf5\x6e\x1c\x71\x1c\xe4\x32\x7b\xb2\x86\x7f\x3b\xef\xfa\xa9\xf3\x6f\x23\x4f\xa0\x33\x7f\xba\xe1\xca\x8b\xb4\x00\xae\xb7\x79\x71\x8d\xda\xfb\x9a\xf7\x1b\x57\xf1\x47\xa3\x48\xb7\xfb\x09\xed\x7b\x0c\x6d\xb2\xa0\xe4\x54\xa6\x56\x71\x38\xb2\x4d\x89\xad\xa3\x52\xc8\x9d\x76\xb9\xbb\xe4\xc6\xc4\x77\x41\x38\x33\xd0\xbd\xf5\x47\xc1\x34\xe4\x5a\x7a\xf2\x48\x91\xa3\xae\x78\xff\xcd\xf1\x3d\xf6\xf2\x56\x99\x55\xc5\xc6\x33\x83\x97\xef\x58\xa8\x36\xd8\xda\x63\x6c\xe0\x87\x1f\xee\xa7\x90\x1b\xe6\x32\xbd\xde\x25\x10\x02\x56\xed\x25\xb8\x98\x96\x05\x44\x48\xee\xd0\xd7\xb9\x2d\xef\xa6\x75\xd8\xf6\x4e\x99\x38\xdf\x78\xd1\x9a\xea\xa1\x82\x0f\x0e\x3c\xd9\xbd\x92\x8a\xea\xb3\xb9\xca\xd1\xa9\x5b\x7b\x56\x9f\xdb\x78\x25\xd4\xf0\x64\x0a\x87\x93\x5c\xe3\x73\x08\x18\x02\x2a\x14\x8c\x1b\x05\xe6\x6b\x7f\x58\x09\xe2\x96\xbb\xea\xbd\x1a\x48\x7b\x80\xcb\xd2\x74\xf7\xb1\x65\x60\x42\x8f\xa6\x15\xd8\xc2\x41\x7f\xd6\x5b\x39\x72\xca\xeb\x03\x2b\x4e\x45\x46\x55\xfd\xa7\xf1\x2a\xc4\x36\x97\x5d\x38\xcf\x68\x43\xd6\x71\xdf\xe5\xae\x7c\x2a\x5c\x4b\x71\x83\xa4\x24\x37\x02\x9b\x07\x62\xc3\x21\xee\xad\xb1\xa0\xe3\xdf\xdd\x39\x5d\x9b\x2f\x0d\xf1\x6e\x4d\x5b\x9f\xdb\x87\x4e\x5a\xd7\x6e\x0d\xb3\xeb\xdb\xa2\x46\x07\xb3\xda\x8a\xb5\x9b\x46\xac\x1c\xd1\x67\xf4\xe1\xec\x17\x6a\x67\x5b\xf0\xeb\xc7\x4d\x5a\x30\x7e\x63\x83\x16\x61\xbf\xb1\x16\x8c\x79\x37\x00\xc9\x23\x60\xcd\xf6\x02\xc5\x9a\x90\x05\x28\x56\x46\xf3\x17\x8c\xcf\x52\x3c\xbc\xf1\x3a\xee\x06\xa0\xdc\x07\xe8\xd3\x48\xd0\xc5\xd6\x9c\x80\x60\x46\x53\x15\x4c\x28\x18\x51\x10\x98\x92\xad\x61\x95\x8f\xed\x10\xa6\x33\x03\x4c\xc3\xee\x1c\x21\xec\xe3\xe4\x1f\x4c\xe8\x9a\xa5\x77\x4c\xd8\x3b\xdf\x02\x2c\xde\x00\x75\x88\x8a\xe1\x1b\x1b\x41\x5c\xb1\x0f\x74\x31\x2d\x1f\x30\x06\x19\xcd\x42\x30\x21\x3a\x21\x22\x06\x48\x01\x8c\xf9\x28\x08\xf8\x86\x02\xb1\x1e\x8c\x0c\x2d\x88\xfa\xb8\xd5\x8b\x60\x42\xaf\x5e\x6f\xba\x01\x63\x30\xcf\xd5\xec\x10\xa0\xf7\x30\x7b\x18\x9e\x7b\xdf\xfa\x4f\x57\xa9\x4f\x80\x6a\xd1\x60\x17\x46\x0f\x41\xd1\x69\x82\x0b\xb1\xb5\x2e\xa4\xb7\x00\xae\x26\x81\x64\xe4\x90\xeb\x01\xee\x02\x52\xc7\x5d\x7b\x7f\xdb\xbd\xf5\x0c\xd8\x9c\xe5\x40\x56\x8b\x81\x9d\x3c\x07\x32\x78\xb7\xf1\x49\xc0\xce\x71\x90\xaf\x2c\x70\x75\x73\x0d\x00\xf4\x49\x97\xaf\xab\x69\xa3\xfd\x59\x53\x67\xbc\x1e\x5d\xe2\xeb\x99\x7d\x9b\x57\xc8\x7f\x73\x74\xc9\x2b\xcb\x77\x87\x42\x25\x27\xf3\x91\x5d\x8a\x6e\x2c\x52\x3b\x57\x85\x9c\xa9\x5b\xff\x7c\xf0\x84\x76\x77\xcf\x1f\x71\x3f\x66\x47\x8f\xe6\x95\xca\x8f\x58\x58\x60\xf1\x16\x79\xf5\xb9\xa8\xb5\xa5\x9e\x7e\xbb\x6f\xfb\x30\x2e\x9c\xb3\xbb\xfd\x9e\x71\x8d\xd1\x0d\xe0\xbe\xa6\xbb\x03\xbf\x9b\xd6\x47\x3e\x7b\x63\xae\xe9\x1f\x3a\xbb\x2d\xdf\x80\xd1\x71\x66\x9d\xe8\x5f\x86\x57\xf9\x91\xaa\x9e\x34\xaf\xfc\x98\x9c\xd7\xda\xe6\x9e\xfb\x6f\xbf\x70\x29\xcf\x95\xea\x6e\x90\x27\xfd\xe3\xd2\xbd\xe2\xfa\xeb\x27\x61\xe2\xb1\x78\x28\x18\xb7\x01\x94\xe0\x56\xb8\xc3\xdc\x09\x06\xbd\xc0\xfd\x6b\x57\x96\xb4\xfd\x3e\xba\x44\x23\x13\x5b\x7b\xb2\x69\x4d\xae\xdd\xdf\xb8\x38\xae\xe3\x6d\xf5\x54\x52\xf3\x02\x0b\xbf\x9d\xfe\xe5\xe3\xe3\xcc\x81\xee\x29\x72\xec\x07\x2a\x01\xe3\xde\xd6\xf1\xdc\x7e\x2f\x45\x85\xbe\xff\x38\xb9\x05\xe3\xb3\x47\x44\x04\x53\xf8\xab\xe1\x1a\x62\x60\x65\x96\xbb\x74\x8e\xe7\x00\x45\xbb\x8c\x24\x1a\x8c\x6b\x31\x30\x0c\xe4\x24\x00\x84\x25\xc0\xd3\x8c\x07\xf1\xfd\xb9\x3c\x40\x9d\x33\x12\x69\x30\x21\x4b\x74\x76\xa0\xce\xbb\x81\x22\x4c\x04\x06\x62\x5a\x58\xeb\x62\xad\x50\xeb\x8f\x93\x55\x30\x3e\x3a\x66\x44\x98\xde\xec\x30\xbd\xd8\x22\xe1\xc1\x0e\x77\xa1\x3e\x06\x00\x73\x5f\xc1\xd0\xe2\xa8\x8f\x5b\xfe\x0b\x26\x3c\x79\xf1\xe6\x6c\xf8\x80\xe7\xb8\x65\xae\x12\x1d\x77\x51\x75\x16\x88\x71\x9f\x8b\x80\x53\x20\x0e\x3b\xee\xfa\x85\x87\x6f\xeb\xc6\xc0\x76\x3e\x06\x43\xda\xf0\x2e\x0a\x7f\xa7\x85\x2e\x28\xb6\xbb\x88\x7c\x01\x70\x32\xd5\x65\x74\x66\xda\xaa\x57\x53\xa7\xf3\x71\xae\x7c\xd9\x1e\xbb\x2b\x94\xa9\xbe\x53\x1a\xf4\x70\x6d\x9f\xe8\x1f\x8a\x8c\x5b\x3b\xe2\x62\x81\x89\x3f\x97\xaa\x7f\xf0\x56\x38\xdf\x01\x32\xab\x14\x8e\x99\xbf\x77\xfd\x93\xeb\xdf\xdf\xa4\xf5\x4d\x4c\xec\xe8\xa2\xed\xeb\xe5\x5a\x38\xb6\xe4\xda\xa2\x39\xb7\x05\x7a\x35\x3b\x94\x1f\x7d\xd8\x65\x6f\x5c\x87\xc2\xcb\x23\xdf\x60\x2f\xb7\xa7\xf0\x37\xd9\x55\xfb\x05\x2e\x47\xf7\x40\x84\x7d\x27\x07\xb0\x27\xae\xaa\x5f\x06\xa1\xf4\x62\x57\x35\xd6\x02\x5c\x04\x01\x1c\x1e\x00\x65\x58\xe6\xca\xec\x1f\xa0\x84\xfd\xdf\x96\xb6\x41\xc4\xd9\xc7\xa5\x34\xd3\xf5\xa5\xff\xa5\x75\xdf\x9d\x7e\xbe\xfc\x82\x8e\x5f\xfe\xf5\x92\xbf\x4b\x54\xaf\xc9\x5d\x7c\x3e\x73\x6d\xab\x5d\x47\x0a\xd6\xbf\x4c\x5f\x3a\x39\x33\x3a\xa6\x7c\x9a\xa5\xdc\x09\x8d\xab\x5f\xff\x61\xe1\xe0\xef\x7f\xf8\xd7\x77\x3e\xa2\xc3\x81\xb2\xaf\xc7\xde\xef\x8a\x6e\xc6\xc6\xee\x8a\xbe\x3c\xf0\xc2\x56\x69\x6d\x8a\x50\x62\x5c\x4e\x5c\x06\x4e\x00\x99\x4f\x70\x45\x34\x0f\x24\x7c\x97\xc0\xc4\x0d\x02\x01\xcc\x00\x57\xed\x26\x44\x86\x84\x8f\x9b\x8c\x60\x42\xcc\xc2\x06\x65\xc2\xc5\xb7\x7f\x00\xb5\x7e\x40\x57\x26\x83\x0a\xdb\x34\xe0\x4f\x8e\x00\x13\xdc\x1f\xdc\x99\x9e\x13\x38\xb1\x8c\x26\x2a\x98\x90\x50\x2e\x22\x2e\xc5\x89\xc5\x96\x0d\x3f\x7e\x1f\x20\x6d\x00\xe8\x74\x05\xb0\xd4\x63\x41\xac\xfc\x6f\x34\xd0\xd4\x8c\x84\x1c\x8c\x2f\x90\x07\x78\xf2\x2d\xc0\xf4\xdf\x05\x3c\xaf\x00\x04\xef\xbd\x53\xfd\x8c\xe6\x21\x18\x1f\x13\x03\x6c\xc9\x58\x00\x95\xe9\x40\x2c\x8b\x40\x17\xeb\x0a\x86\x16\x45\x7d\xdc\xb2\x7b\x30\xe1\xcd\xd9\xbb\x6f\x92\xbf\x4a\x8d\x87\xe2\x9f\x85\x5a\x66\x53\xf8\xda\x25\xad\xfa\x87\x2a\x37\xf6\x92\x2f\xc7\xe4\xbe\x9c\xe3\xec\x9e\xea\xd4\x9f\x7d\x3a\xdd\x38\xf1\x79\x74\xb8\x98\xe6\x46\xbb\xd7\xde\x49\x1e\x08\x6a\x39\x30\xba\x2b\x5d\x3b\xb9\xcf\x55\xd2\x63\x61\x34\xc7\x56\x75\x9f\x00\xe3\x3e\x06\x84\x7d\x0f\xe4\x67\x7f\xb9\x56\xe2\x86\x6b\x04\x6e\x01\x2b\x31\xdb\x0d\x51\x17\x01\x25\xda\x97\x36\xcd\xb4\x6b\xc4\xd6\x99\xfb\x6c\x73\x15\x3a\xc7\xe4\x09\x8b\x72\xc5\x1d\x3f\x31\xbf\xe9\xad\xa2\xd9\x06\x2d\x19\xfd\xd3\xbc\xbb\xad\xbd\x1d\xe1\x14\x22\x9b\x5c\x75\x7c\x9a\x56\x95\x9f\x0d\x2e\x30\x7d\x84\x77\xe9\xcd\x67\x2b\xa2\x35\xa5\xdc\xfd\x5b\xbd\xce\x74\xed\xf7\xf3\xe3\x79\x65\x36\x04\xee\x72\x79\xa8\x2d\xd7\x52\x9e\xbd\xed\x22\xfe\x3e\x08\x9d\x37\x82\x38\x76\x88\xcb\xea\x08\xf7\xb7\x73\x40\xec\x6b\x40\xf6\xb9\xfd\xad\x6f\x03\x8f\x24\x82\x8b\x73\xa0\x30\x39\xcf\xd5\xf9\xe3\xee\x30\xcf\xe4\x4d\xc3\xd3\xe1\x55\xf5\x47\xe7\x64\xb4\x4e\xc3\x6e\xd5\xa8\xb7\xae\xc3\xe3\x0e\x7f\xfe\xbe\xca\xe9\xbc\xb0\x96\xc7\x69\xfd\xe8\x59\x7c\xc7\x46\x9e\x94\x0e\x4e\xbb\x04\x9e\xbd\x33\xa4\x2e\x2b\x17\x41\xf5\xff\xb6\x6b\x30\x9e\x84\xff\x8a\x4d\x08\x05\xe3\xfa\x86\xa3\x89\x58\xd2\x8d\x6d\x80\xee\xae\x74\xfb\x3f\x0f\x4c\xec\xd2\xac\x20\x32\xcb\x68\xee\x83\x09\xd9\x23\x22\x0a\xf4\x49\xa1\x58\x37\x14\x8c\x9b\x0c\x0c\xdb\x68\xd7\x84\xff\x0b\x46\xbb\x20\x0b\xa0\x98\xd1\x1c\x05\x13\x12\x23\x23\xc0\xb2\xd6\x60\xf0\xfc\x3e\xc0\xda\x43\x00\x93\xa5\x51\x60\xad\x28\xa3\x99\x0b\x26\xc4\x24\x66\x01\x6b\x45\x13\x81\xa9\xdd\xe9\x9a\xcb\x8b\x80\xfe\xe4\x68\xb0\xa6\x95\x91\xcc\x83\x09\x51\xd3\xa2\x22\xc2\xb1\xfe\xe6\xb0\xda\xc5\x62\x20\x20\x07\x7a\xb8\x1a\x84\xbb\x73\xf2\x86\x96\x44\x7d\xdc\x3e\x96\x60\xc2\x9b\x5e\xaf\xdf\xaa\x9f\xfb\xe0\x01\x10\x48\xee\x71\x6d\xfa\x2d\xe0\xec\xa6\xb8\xb3\x3d\xd5\x9d\xe4\xd5\xef\x02\x61\x70\xb1\x26\x1f\xf0\x23\xae\x32\x1e\x00\x99\x58\x6d\xd7\x75\xe5\x0f\x3f\x9f\xec\xa2\x7f\xea\x5b\x8f\x04\x12\xd5\xbf\x5d\xd5\xfc\x07\x40\x66\x8a\x0b\x99\x07\x40\x4c\x7f\xba\x9d\x3f\x49\x1b\xe8\x45\x9f\x5f\xbd\x2b\x5b\x20\x22\xb0\xfe\xf4\x97\x8f\xb1\x95\x5f\x92\x5f\xee\x6a\xe0\x53\x07\x9d\x1f\xf4\x79\x87\xa2\x9b\xd5\xe1\x6d\x8e\x84\xb3\x3b\xf7\xd9\x55\xae\x73\x7e\x03\xac\xd2\x38\x10\x3b\xcc\x05\x2e\x6d\x8a\xdb\xf9\x35\x90\x83\x2e\x7f\xbb\x64\xeb\x72\xf7\x2a\x1c\x71\xc7\x36\x76\xef\x80\xe5\xa3\xf9\xee\xef\xab\x5c\x68\x9d\x0a\x67\xde\xb1\xc5\x43\xc1\xb8\xc3\xae\xeb\x39\x05\xa2\x15\x35\xdc\xc7\x4a\x10\xb4\x2f\x74\xc5\x75\x18\x2c\xa9\x04\x5d\x23\xb2\x2a\x6d\x0c\x19\x7f\x24\x34\xe6\xd2\xad\x53\x6f\x7a\xb5\x3b\x11\x53\x3c\x54\xac\xe2\x6c\xa3\x66\xdc\xde\x21\x45\x3a\x37\x5a\xd9\xab\xe7\xb4\xc2\x67\xca\x85\x43\x0d\x57\x38\xb7\x5d\x8d\x7e\x06\xc8\x9d\x72\xdd\xda\x5d\xa0\xed\x7d\xde\xd6\x08\xd2\x1a\xa6\x15\xc6\x86\xd3\x73\x56\x36\xf0\x76\xae\xa2\x4a\x85\x57\x77\xf9\xa6\xd9\xee\x5d\x7d\xfa\x6e\x99\x96\xb7\xf5\xd7\xad\x47\xb2\xab\xbd\xde\x14\xe2\x5b\xdd\xc1\x5d\x74\xe5\x71\xf9\xdd\xaa\x4e\x46\x92\x0e\x26\xc4\x44\x16\x00\xa5\x9c\x6b\x40\xba\xa7\x81\xf9\x9d\x05\xd4\x65\x51\x96\x10\xfe\x71\x03\x0d\x26\x64\xcb\xd2\x02\xe4\x73\xd3\xde\xad\x75\x01\x17\xb8\x10\xa8\xcc\x1d\xd0\xc7\x62\xd0\xeb\xb5\x77\x4b\xcd\x19\x8d\xf7\xad\x92\x67\x0f\x73\xbd\x10\x90\x1e\x0c\x3a\xbb\x0f\xb4\x68\x65\xce\xd0\xb4\x6c\x1f\xb7\xad\x2b\x98\xf0\xe6\x75\x78\x2d\xca\xcd\xdc\xdc\x19\xdf\xe7\xa2\xe2\x26\x88\x29\x37\xbb\x8a\x73\xc4\x15\xf1\x75\x40\xfe\x0c\xa8\x81\x0e\x76\x4d\xf7\x02\xf7\xb7\xfd\xc0\x7e\xcd\x70\x27\xf2\x34\x08\x3b\x26\xa6\x5d\xb3\xcd\xc5\x15\x6b\x59\xae\xf5\xfe\x57\x37\xc7\xbf\xac\x7f\xf7\xd1\x98\xa4\x01\x87\x8b\x2f\x2c\x35\xc1\xee\xfa\xc7\x88\x47\x71\x4d\xeb\x7f\xb7\x36\x75\xeb\x98\x2e\x0d\x6f\x14\xab\x57\xea\x54\x7c\xa8\x58\x43\x6c\xcf\x1c\xf2\xf6\x94\xc4\x93\x03\x4e\x36\x79\x76\x66\x79\xf7\xff\xaa\xff\x30\xf2\x5e\x4a\x27\xff\xa5\x5d\x2d\x2b\xba\xe1\xfb\x2c\x05\xb7\x26\x0a\xaf\xa7\x6c\xe8\x64\x5e\xfa\xd1\x7f\xf2\x0c\xd2\xe7\xfb\x52\x73\x93\xa7\xf6\xb7\xaa\x5f\x6c\x7e\xbf\x63\xd8\x24\x86\xd7\xdd\x62\x5b\x86\x82\x71\x41\x57\xe7\x2e\xa6\x75\x24\x13\x87\x2e\x56\x6f\xb5\x5a\x88\xb7\x38\x58\xc2\xe7\x59\x9d\x75\xef\xbf\xcf\x4a\x06\x36\xf5\x6c\xf3\xc7\x75\xa8\xcb\x66\x7e\x67\xb3\xb8\x14\x4d\x6b\xe7\x22\x0f\x24\x9b\x7d\x5c\xe1\x1d\x01\xae\xda\x45\xfc\x70\xf0\xd3\x46\x57\xb8\xcf\xc2\x82\x8a\x35\x5c\xd5\x03\x7e\xff\x2f\xa0\x15\xa3\x5d\x1d\x5e\x0a\x7c\x8d\x2b\xcb\x21\xef\xea\x8c\x69\xb9\xbb\xf4\x77\x89\x42\x03\x86\x77\xdb\x5d\xbd\x42\x04\x9c\xff\xdb\xfa\x1d\x92\x06\x56\x79\xc6\x12\x23\x5b\xef\xee\x7b\x0d\xdd\x70\x3e\x7e\x49\xea\xd6\x4b\xc7\x27\x8d\xaa\x36\x3d\x34\xe3\xab\xdd\xf7\x65\x75\xc6\xf1\x81\x51\x57\xde\x98\x57\x1a\x71\x15\x2a\x9c\x24\xe7\xb6\x5c\x38\xba\x59\xca\x8c\x5e\x77\xcd\xce\x4d\x57\x5b\x5f\xbf\xcb\x20\xd2\xce\xe1\x9d\x8e\x37\xb7\x9f\xec\x7f\xbc\x71\x68\x6e\xd9\xb1\x1d\x5f\xdd\x6d\xb9\x68\x57\xd5\xe7\x7b\x0e\x8f\xaa\x7a\x6f\x43\xd6\x67\xd7\xda\xc7\xd6\x0a\x7b\x6c\x30\xec\x39\xee\x28\x0e\x83\xe0\xfc\x08\x30\x69\xc1\xfc\x40\xb3\x32\xc2\x44\x30\x21\x3a\x5b\x61\xb0\x8e\xb1\x18\x10\xda\x08\xe0\x7f\x14\x50\x5c\x01\x7e\x5a\x0a\x82\x89\xa9\xd9\x80\x66\x65\x84\xa4\x60\x42\x62\x62\x44\xae\xb0\x66\xdd\x06\x0a\xf5\x04\xc8\x7e\x3c\xa0\xd8\x2f\x3f\x08\x33\x33\x02\x59\x30\xa1\x40\x54\x5f\x90\x61\xce\x00\xcc\x8e\x01\xf5\x1d\x10\xef\xcf\xca\x0a\x08\x66\x04\xb6\x60\x42\x64\xa3\x88\x30\xc1\x58\x24\xfc\xf8\x6b\x30\xf8\x51\x80\xe0\xad\x6c\xc0\x25\x67\x84\x8f\x60\x7c\x83\x3c\x23\xc2\x1e\x79\x32\x18\xe0\x7d\x10\x58\xae\x03\xd2\x5c\x03\x40\x3a\x38\x57\xe8\x87\x8f\xc3\x52\x30\x2e\x7a\x60\x38\xb8\x81\xdd\xcc\x17\xc8\xf3\x2e\xb0\x20\x63\x72\x81\x74\x26\x23\x30\x05\x13\x3e\x2b\x10\x17\x1b\x4e\x67\x16\x03\xe6\x26\x83\x89\x99\x0f\xc6\x3f\x1c\xd8\xd7\x11\xa0\xb3\xd7\x20\xde\xed\x1d\x1d\x4a\x8e\xfa\xb8\x6d\xab\xc1\x84\x37\xc6\x77\x6f\x92\x3f\x0f\xc7\xe6\xae\xe9\x5b\x06\x8c\x5d\x9f\xb7\xcb\x2c\xae\x7e\x5c\x04\x41\xe3\x7c\xb7\xc1\x7f\xe1\x44\x2d\xd6\x74\x5d\x18\x88\xc2\xa7\xb8\x76\x60\xab\x1b\x4f\x5c\x07\x4e\x38\xc9\x35\x94\xd3\x5d\x27\x7c\x19\xc4\x28\x2b\x5c\x03\x71\x03\x80\x63\x78\xda\x32\xeb\x9a\xbe\x6d\x2b\x4c\x3f\xbd\xb6\xf9\xc3\xa8\x5d\xcd\x9a\xcf\x6f\x7b\xe0\xfa\x95\x2d\x67\xe3\xe7\xdf\x40\xeb\x16\xb9\xec\x69\x24\x3c\x48\x0e\x67\x8a\x40\x18\x03\xb3\xa6\x79\xfe\x7a\xad\x3d\x17\x9f\x88\xbf\xb4\x29\x90\x54\xf4\xe0\xb6\x5b\x4b\x47\xfe\x36\x6c\x44\xd5\x41\x71\xd3\x07\xed\x1e\x2f\x9c\x98\xd0\x86\x99\x91\xba\x75\x0e\x7e\x47\xfe\x01\x45\xff\xfe\xe5\xbf\xe3\xa5\xea\xf4\xdc\xd1\xfc\xe6\x77\x8d\x88\x79\x6b\x12\xe7\x4e\xab\x59\x71\xeb\xf4\x2d\xdd\x97\xe7\x0f\xe7\x60\x80\xf7\x51\xee\x48\x6e\x02\x07\x9e\xe4\xc6\x85\xcf\xb3\xa7\x61\x20\xe7\xe3\x45\x95\x7b\x36\x29\x55\xab\x67\xaf\x63\x17\x5f\x0c\x6a\x9b\xaf\xcb\x9e\x36\xbb\xdb\x5d\xbd\x30\x69\x74\x37\x61\xc3\xe3\x27\x13\xf6\xa7\x18\xe0\x58\xd7\xe6\xb9\xfe\x7b\x13\x08\xee\x57\xb9\x7f\x6d\x74\x03\x8e\x2d\xa0\x12\x38\xcc\x95\xde\x76\x57\xaa\x2f\x01\xd4\x67\x83\x60\xf1\x16\x88\xc7\x07\xba\x02\x7f\xf0\x6e\xb9\x17\x24\x51\x23\xdc\x59\x3b\xe8\x9a\xd6\x53\x60\x2d\xee\x3f\xd7\x75\xdd\xcd\x09\xec\x43\x46\x92\x0e\x26\x44\x47\x26\x82\x34\x74\x2a\x50\x96\xde\xe0\x62\xdf\xbb\x4d\x5e\xd9\x00\xb0\x33\x92\x7d\x30\x61\x4c\x4c\x62\x74\x18\xd8\x87\x00\x04\x6e\xbd\xdb\x09\x03\xa2\x83\x95\x60\x76\x0f\x03\x3c\xaf\x01\x8d\x43\xef\x02\x87\x8c\xa6\x2e\x98\x50\x2d\x22\x08\x8c\xd1\x66\xd0\xc7\x40\x60\xe2\x2f\x03\x89\x1d\xcb\x05\xac\x51\x46\x33\x17\x8c\x8f\xca\x05\xe2\xa7\xb5\xc0\x42\x2c\x05\x33\x33\x1f\x30\x3d\x25\x67\x68\x48\xf8\x1d\xa0\x8c\x36\x81\xff\xef\xa5\x81\xb7\xcb\xab\xae\xb6\x8d\x76\xa7\x7b\x34\x50\xa9\x41\xae\x8f\x3e\xef\x7a\x93\x0b\xef\xac\x55\x18\x1d\xb1\x9f\xbb\x29\x9a\x8b\x97\x13\x40\x6e\x07\xc3\x4c\xc5\x3a\xe1\x19\x1f\xe0\x7a\xb5\xd5\x60\x4b\xd9\x6a\x17\xbd\x1b\xd3\xe2\xb5\xd3\xba\x96\x65\x7a\x8f\x9b\xfb\x28\x39\xa9\x7d\x6e\x71\xef\x9f\xab\x6f\x25\xac\x7d\xd8\xe9\xd5\x8c\x72\xc3\xd6\x1e\x7d\xfa\x63\xa9\x5f\x3a\xa7\x90\xee\x93\x76\xa1\xb9\xfa\xca\x8e\x6d\x92\x12\xdb\x2d\x9f\xbe\x75\x4a\xbc\x52\xed\xe9\xbe\x88\xe9\x4b\x0a\x93\xdd\xb0\x5b\x9b\x7e\x5e\x78\xbc\xd8\xca\x98\x2a\x29\x5d\xee\x75\x51\x18\x02\x49\xc7\xfa\xb4\x99\x34\xc1\xd5\xfd\x6f\xc1\x2f\xaf\xf9\xc4\x11\x65\x1e\x5d\xee\x06\xff\xdd\xeb\x78\xa7\x23\x0d\xca\xf5\xd1\x9e\xf6\x33\xae\x0c\x4a\x2a\x34\x2e\x45\x08\x47\xdc\x51\x3c\x76\x63\xe7\x37\x60\x0d\x6d\x91\x0b\xfa\x1d\x2e\xba\x6f\x80\x6c\x27\xd9\xd5\xc6\x29\xae\x3c\x6e\x84\x0b\xc6\xb1\x2d\x42\xc1\xb8\x0d\xae\x50\x8f\xbe\xab\x31\xa4\x0d\xb7\x67\x57\xfd\xb3\xf5\x50\x69\x20\x67\xa8\xe2\xb0\x7c\x3f\xee\x7f\x71\xce\x7a\xf2\x28\xd7\xea\x76\x8f\x90\x51\x1e\xf9\x49\xad\x84\x59\xa9\x5b\xff\xde\xac\x76\xb9\xe4\xc2\xab\x95\x66\x37\x27\xd5\x18\x37\xf9\xce\xc6\xf9\x5b\xfe\x5a\x17\x6f\x77\x7d\x53\xeb\xe1\x91\x8b\x52\xbb\x0b\x69\x36\xc7\x17\xea\xba\xfb\x8c\x35\x21\x10\x4c\x28\x77\xb4\xfc\xe7\x89\x2d\xea\x35\x39\x78\x34\xa6\x6e\xc1\x0e\x13\xe9\xbe\xc1\x32\xe3\x73\x96\x2a\x14\x46\x3d\x28\x6f\x0f\x75\x0d\xe3\x76\x77\x4c\xff\x82\xe4\x6c\x91\xab\xb1\xaf\x40\xfe\x33\xfc\x6d\x9e\xfc\x5e\xe6\x7f\xa7\x73\xb5\x19\x0b\x4a\xfd\x95\xeb\xf1\xd8\x4d\x55\xb2\x75\x69\x15\x8f\x95\xd9\x5a\x2b\x76\xed\x88\x6f\x46\x3e\xc7\x85\x92\x57\xf2\xa5\x10\xff\xdd\x05\xd2\x4d\x17\x5b\x0f\xd3\xc6\x36\x59\xf6\xc8\xf8\x83\x7b\x27\x4b\xdd\xfd\x32\xeb\xe3\x1a\x45\x6f\x16\xaf\x49\x8d\x9e\x9f\xad\x96\xbc\x8b\xf1\xbf\xfa\x2a\xb9\xef\x92\x27\xe1\x70\x0d\x28\xce\xee\xb4\xeb\x8a\xf0\x37\x27\xf3\xc5\x9f\xaf\xb5\x76\xcc\x24\xfa\xe6\xe5\x1f\x1a\x54\x3f\xfd\x72\xdd\x89\x22\xf5\x27\x37\xe7\x85\xd5\x39\xa6\xd7\x3e\xae\xb7\xf8\x38\x9c\x05\xe3\x7b\x17\x00\xab\xb8\x17\x80\xba\x8e\x06\x2e\xee\xd6\x3b\x0c\xe5\x02\x06\x20\x23\x04\xba\xc9\x7c\x44\x99\x30\xc5\x51\xc0\x45\x1e\x07\x8a\x3b\x12\x60\xe2\xf4\xbb\xb5\xf0\x8c\xe0\x18\x8c\x2f\x90\x1d\xb0\xb8\x1b\x58\xa4\xb3\x20\x68\x98\x02\x78\xdd\xf5\x6e\x0f\x50\x46\xe8\x0a\x26\x64\x8b\x8a\x08\x7f\xf8\x3c\x6e\xfe\xbb\x80\x0b\x50\xdc\x0e\x2e\xe6\x17\x04\x5b\x76\x32\x42\x60\x30\x21\x26\x2a\x22\x77\x38\xc2\x59\x01\x4c\xd2\x59\x30\xe8\x99\xc0\xea\xed\x04\xf2\x3c\x51\x00\x30\x9b\x11\x5c\x83\x09\x05\x22\xb2\x14\x0c\x33\xfb\x0c\x98\xbd\x9d\xc0\x44\xcf\x06\x73\x76\xeb\xdd\xca\x7d\x46\xd0\x0c\x26\x34\xa8\x14\x09\x4c\xf4\x40\x30\x43\x93\x01\xc5\x3e\x80\xe2\xf3\x3c\x80\x62\x46\x58\x0d\x26\x44\x66\x89\x98\x1a\xa6\x38\x13\x84\x4e\xe7\xc0\x60\xf7\x03\x4b\xf9\x6f\x76\xb0\xc8\x91\x11\x7a\x83\xf1\x2d\x22\xc1\x9c\xf7\x03\x83\xfe\x1d\x4c\xf5\x8b\x70\x12\x13\x5b\x2d\x14\x8c\x1b\x96\x25\xb4\x32\x9c\x82\x66\xf4\x3e\x4f\x30\xe1\xcd\x86\x57\x29\xf5\x1b\x37\x4b\x72\xfd\xfc\x25\xc0\xe4\x05\x10\x5f\x0c\x73\xf5\xfd\x45\xda\x65\xbb\xc8\x59\x39\x4e\xaf\x98\x97\x4b\xf3\x34\x5e\xec\x69\x31\xee\x3c\x6b\x28\x3b\x4f\x7e\x7b\xbd\xe2\x5d\x61\x68\xec\xd3\x6d\xe7\xef\x35\x0e\xef\x30\x74\xed\xc8\x1b\xc0\xef\x63\x40\x32\xd1\x0d\x32\xfe\x02\x05\x9e\x15\x6f\x43\x0e\xb7\x97\xed\x69\xbd\xc2\x57\x51\x37\x6e\x64\xd9\x59\xed\xf6\xa0\xfd\x13\xb3\x2f\x6a\x72\xf3\xf7\xb6\x15\x8c\xdd\xd1\xcd\x7f\x1f\x3d\xea\xa7\xbf\xcb\xee\xab\x59\xa7\x66\x8a\x9f\xa9\x17\x36\xb4\xa2\x6b\x98\x5c\xfb\x7b\x07\x88\xfc\x72\xda\x04\x15\x16\x2f\xff\x95\x44\xe4\x31\x3b\x25\xf6\x6f\xb1\x21\xd7\xf2\x35\xa5\x9a\x7e\x21\x0d\xf6\x1f\xc9\x67\xf6\xfa\x72\xf7\xd8\x0a\x1d\x27\x85\xdf\x4e\x70\xad\xf5\x69\xb0\x3b\xf4\x77\x97\xb5\xab\x6f\x37\xf0\x83\x02\x54\xa2\xfb\xd7\x5c\xa0\x17\xa7\xd3\x2e\xdb\x6c\x88\xa0\xe6\x6b\xdf\x5d\x3e\x95\xd7\xfa\xad\xb6\xba\x7c\xdc\x91\x47\xe3\xdb\xdd\xbb\xba\xe1\x66\x3b\xa6\x90\x1f\x26\x9f\x24\xdf\x0a\x6f\xe7\x71\x1d\xca\x5c\xb7\xab\x7f\x41\x58\xdb\xc7\x75\x2f\x2f\xd2\x9a\xb6\x1f\x37\x96\x1e\x9e\xf3\x68\x9f\xdc\xf9\xd5\xc7\xfd\xb3\x5e\xac\xf5\xa8\x79\xc9\xfa\xcd\x0e\xd5\xda\x34\x3a\xe1\x58\xae\x2b\xf7\x13\xd1\xe1\x29\xa3\xf7\x87\x82\x71\xc9\x6e\x58\x3c\x3b\x77\x9a\xe7\x4b\x79\xda\x77\x8a\x21\x8d\x3f\xcd\x36\xe6\xaf\x65\xbf\x8c\x7d\x22\xcf\x18\x51\xb6\x49\x53\xb3\xce\xb3\xdd\x43\x06\x27\xdd\xef\xb8\x3f\xa5\xef\xcb\xee\x5c\x3d\x04\x65\xb4\xab\x2e\x18\x5e\x01\x47\x97\xe8\xda\xed\x21\xee\x3f\x93\xc1\xa0\x2f\x80\x0d\x5a\xae\x73\xd8\xec\x3a\xbc\x57\x69\x57\x71\xfa\x1d\xca\xf9\x4f\xed\xf8\xa4\xb9\x13\x8a\x2f\x31\xce\xad\xf4\x9f\x5b\xf7\xfa\xd1\x26\xba\xf1\xa3\x9f\x66\xff\xa9\x1f\xff\xfa\x08\x16\x9b\x42\x7b\x8c\xdb\xd3\xf8\xb7\xdb\xa3\x73\x85\xda\x7c\x1c\xba\x82\xf1\x89\x89\x60\x25\x61\x1e\x70\x09\x17\xc1\xac\xef\x03\xa1\xc6\x49\x57\xc2\x4f\xf3\x01\xc3\x9a\x11\x9a\x82\x09\x39\x0b\x80\x55\xfb\xd8\x5e\x20\x0a\x04\xca\x7a\x1d\x18\xc6\x4d\xb9\xc1\xf6\xc2\x8c\xd0\x14\x4c\x88\x89\x28\xd0\x3b\xcc\xe7\x59\x60\xf4\xb6\x01\xf6\xd6\xb9\x8e\x30\x04\xb4\x63\x6f\x1e\xb0\x24\x9b\x11\x7c\x82\x71\x5d\xb3\x85\x89\x6e\x02\xea\x3a\x19\x90\xf9\x07\x38\x94\x25\x05\x81\xb9\xca\x08\x3f\x6e\x8c\xda\x00\xec\x56\x18\x0e\x86\x79\x0d\x10\x9a\x07\xfa\x18\xf5\x6e\xff\x43\x46\x88\x72\x53\xf0\x08\xb0\x28\x3b\x0d\x98\xa9\x67\x80\xe2\x45\x60\x52\xb7\xe6\x07\x63\xce\x08\x2b\xc1\xb8\xa8\xd1\xc0\xe7\x81\xa7\x77\xbf\xdb\x50\x09\x1c\xcb\xd9\x7c\xa1\xe4\x70\xd0\x9b\xd1\xdb\x89\xc1\x84\xb3\xe1\xad\xe0\xff\x1f\xb2\x1d\x0b\xcf\xdb\x51\xae\x7d\xb4\xd0\xae\x42\xbf\x25\x13\x9b\x3d\x26\xe0\x38\x4d\xfd\xa1\xcc\x95\xff\xba\x95\x9f\x5c\xe5\xeb\x92\x59\x36\xa6\x69\xbd\x67\xf6\xe8\x2d\x73\xfa\x3e\x3d\x5b\xaf\xf8\x80\x47\xe6\x91\x13\x1d\xc7\x8f\x5a\x32\xe7\x6e\xd2\x5d\x3e\xdb\xd8\xef\x4b\xd5\x08\xd6\x49\x31\xca\x25\x5c\x68\xa7\x35\x44\x8d\xbb\x07\xbb\x3a\x31\x2b\xb7\xdd\x9e\xbc\x6d\xec\xae\x0a\x25\xb5\xfc\x5f\x54\xe8\x75\xbb\xda\x2c\x76\x4c\xdd\x39\xe8\x7d\x34\x79\x6a\xb8\xe6\xef\xea\xe4\x99\xb4\xb6\xf7\xc7\x52\xfd\x7b\xb4\xac\xd5\x42\x39\x7b\x23\xb6\xc3\xfa\xde\xf2\x77\xbc\x93\x67\xc9\xa0\xa7\xc9\x4a\xa0\xf9\x78\x8f\xff\xef\x1c\xa3\xc3\xd3\x06\x80\xbb\x24\xed\xf3\x74\xd2\x8c\xe6\xc8\x19\x62\x66\x77\x9c\xbf\x34\xa7\x65\xfd\x3e\x5f\x3f\x5e\x7e\xfa\xcb\x73\xe7\xbe\xd8\x34\xed\xf3\x8a\xc3\xfa\xb5\x7c\x10\xae\x9c\x80\x88\x70\x9a\xcb\xc4\x2c\xd7\x48\xcf\x05\x3e\x71\x58\x78\x4a\x63\xe3\xc3\x6d\x06\xb8\x4a\xbc\xcd\x55\xe2\xd3\xe1\xe5\xdd\xd8\xea\xa1\x60\xdc\x20\xd7\x2e\xdc\x03\x7a\x99\x0c\x34\x60\x01\x28\x71\x4e\x75\x03\xe8\x7d\x6e\x62\xf1\x1a\x64\x9b\x83\x5c\x4a\xab\xdd\x5b\x6b\xd3\x56\xbc\xff\xc6\x4b\x72\x77\xca\x34\x39\x7f\x78\xe1\xc4\x85\x41\xe3\xd1\xec\x61\x77\x06\x3c\xdd\xff\xf5\x2f\x8f\x57\x0e\xf4\x4e\x5b\x53\xb5\xc8\x9d\x70\xb5\xdc\xb5\x81\x7f\x00\xe6\x47\xbf\x7d\x9b\xc4\x65\x63\x5a\x5a\xb3\x18\x5d\x7d\xca\x0f\x83\x99\xf8\xed\xfc\x0c\x7c\x40\xb9\x63\x77\x86\x7a\x8c\xe2\x7b\x3a\x77\x9b\x54\xe2\xf1\x67\xd7\x07\xd7\x5c\x52\xb4\x4e\x0a\xaf\x73\xd3\xa6\xf6\x8f\x2f\xce\x6c\x38\xf3\xe9\xc6\x2f\xbe\x67\x8b\x7c\xd9\xf2\xa7\xe5\x55\xfa\x37\x3a\xb7\x64\xea\xee\xaf\xf6\xff\x1f\x67\x5f\x02\x0e\x65\xf7\xfe\x3f\x3c\x94\x9d\xa4\x32\xe5\x95\x48\xd1\x26\xca\x52\x52\x96\x51\xd1\xa2\x12\x59\x22\x94\x90\xa4\x55\xca\x92\xe7\xb1\xef\xfb\x92\x10\x25\xa2\xb2\x67\xcf\xbe\x2f\x49\xc9\x9a\x48\x11\x59\x92\xb2\x95\xe5\x7f\x9d\x31\x67\xfe\xcd\x7c\x7f\xd7\x35\xef\xbc\xef\xf5\x5e\x5d\x8c\x67\xce\xe7\x9c\xfb\xdc\xfb\xb9\xcf\xfd\xb0\xdb\x3e\x18\xb5\xc5\x9d\xe0\x21\x69\x4c\x40\x34\x6f\x00\xbe\x08\xcf\x29\x9e\x00\xcf\xba\x83\x5a\xb9\x17\x9c\x18\x93\xf9\x74\x21\x48\x34\x13\x43\x5f\x63\x47\x5f\x5f\x19\x6c\xff\xe9\x27\x30\xa9\x2c\xe4\x59\x28\x28\xe4\x14\xc8\x99\x45\xe5\x25\x27\x5f\xaf\x6f\x37\x55\xea\x3a\x25\x1f\xd9\x57\xb0\x29\xf0\x4e\x5f\xdf\x15\xad\xef\x89\x57\x8a\x56\x49\x39\xf7\xed\x5e\xf3\xfa\x30\x49\x37\xb3\x91\x56\x9f\x04\xec\xd4\x1f\x62\x25\x00\x39\x41\x4f\x8b\xc5\x31\x82\x22\x8e\x87\x8f\x24\x6b\x89\x50\xad\xf8\xc2\xad\x5f\x80\xbb\x59\xc2\x04\x65\x97\x96\x18\x60\x2a\x8a\x38\x01\xd2\x80\xc5\xf0\xeb\x3e\x24\x43\xa2\xb4\x05\xe6\x60\xd8\xe0\xf9\x18\x2d\xd9\xc0\x08\x1b\x71\x3c\xf0\x7c\x6c\x00\x7a\x97\x99\xf0\xf0\xa4\x1e\x58\xa4\x39\xb2\x43\x49\x4b\x5a\x80\xae\x3a\x0c\xdd\xbf\x1a\xf2\xf4\xa0\x4a\x99\x82\x9f\x44\xae\x80\x55\xd9\xb4\xe4\x07\x23\xb0\x6c\xdc\x09\x4f\xdc\x72\xa1\xf6\x0c\x82\xa9\x92\xe7\x60\x3f\x06\x60\xde\xa2\x1f\x52\xd8\x87\x63\xea\xe8\xbf\xe3\x73\x4c\x45\x11\xc1\x2d\x65\xf9\x94\x7d\x89\x77\x46\xa0\xce\x6e\x87\xc4\x48\x20\xa7\x13\x68\x71\x39\x46\x70\x62\xc6\xc1\xfc\x4a\x18\x54\xd5\xde\xf0\xa6\x9b\x3a\xe9\x83\x00\x0e\x98\xdc\xa4\xc5\xff\x18\x61\x23\x03\x0f\xbc\x40\xb8\x00\xdd\x05\x57\x48\x46\x6f\xb8\xef\x38\xa8\xb3\xc9\x27\xad\xb4\x44\x01\x23\x28\x39\x91\xa7\x3a\x05\x23\x9f\x17\x10\xa2\x1f\x52\x21\x8c\x9c\xe0\xa6\x25\x2e\x18\x41\x91\xc0\xc8\x4b\x4a\x70\x77\x42\xd7\xbf\x94\x7c\x62\x04\xf7\x26\x18\x9a\x9c\x1f\x70\xdb\x3e\x31\x4e\x45\x91\x52\x9b\xb4\x6e\xb6\x63\x84\x0f\x0b\x8b\xc5\xd4\x77\x74\x83\x64\xfd\xa5\xb3\x9d\x3e\x9c\x3a\xf2\xd6\xf6\xf5\xf2\xc3\x1c\xc1\xc6\x31\x0f\x3d\x82\xbf\x2f\x8f\xbb\xf6\x71\x5b\xff\xdb\x50\xd1\x1d\x94\x4f\x07\x37\x39\x24\x5c\x99\xde\xb1\xb7\xd7\x21\xd9\xab\xe4\xf5\x89\x91\x41\x29\xa3\x74\xde\xc4\x43\x3f\xf3\x24\x2d\x7c\x3e\x0f\x84\xcc\x93\x52\x9f\x40\xdc\xdf\x00\x1f\xf2\x17\xa4\x45\x32\x74\xe8\x62\x81\x4a\x6d\x84\xfc\x31\x0f\xb9\x32\x04\xfe\x50\x01\x8b\x74\x82\x81\xe6\x6a\x87\x2b\x9f\x26\x25\x61\x95\x8e\x4e\x61\xca\x05\xc0\x59\x9d\x20\xa7\x3a\x80\x5f\x9c\x08\x84\xed\x15\xd4\xb6\x7e\xe0\xbb\x25\x44\xaf\x0b\x7a\xcf\xd1\xc0\x70\x24\x82\x47\xc7\xe0\x46\xcd\x41\xa8\x10\xc0\xbc\x53\x90\xb6\x55\xd4\x76\xaa\xec\xcb\x76\xd3\xe0\xcb\x95\x02\xf3\xa2\x37\x8d\x3b\x93\xdf\xf9\xee\x52\x3e\x1d\xce\xb2\xea\x66\xd3\x29\xc9\xd4\xa2\x57\xfa\x96\x8e\xa4\xf0\x14\x7a\x01\xef\xa8\x93\xb8\x9f\x76\x5d\x3b\xb5\xc7\xeb\x8d\xc0\x87\x82\xf2\x2c\x8b\xe0\x07\x1f\x56\x46\xd6\xf0\xa5\xfa\x1d\x5c\x7c\xb7\xf1\x5d\x44\x2e\x4b\x5b\x17\x49\xc5\xc1\x34\xb3\x1b\x58\x5d\x1e\x70\x72\x6b\x60\xa6\x15\x05\xf6\xc9\x13\x7a\xe7\xbe\x60\x29\xef\x48\xb6\x4b\x69\xdd\x14\xa6\xec\x0a\x56\xef\x03\x73\xa7\x01\xc0\xf2\x54\x83\x7f\x7e\x92\x79\x9a\xd6\x36\x63\x04\x45\x46\xf2\x61\x45\x3b\x14\x92\x58\xa8\x7d\x86\x20\x4f\x66\x92\xf5\x37\x2d\x56\xc0\x08\x0c\x4e\x25\x70\xc4\x58\xe8\x1c\x87\x41\xe2\xbb\x91\x33\x85\x2c\x53\x47\xfe\x1d\x9d\x81\xfe\x26\x90\xf4\x4d\x17\xf1\xee\x04\xcc\xf0\x19\xc2\x08\x88\x0d\x4a\x1c\x2d\x9a\x63\x04\x21\x2f\x56\x78\xa4\xd4\x02\x57\x17\x06\x27\x35\x06\x9d\x16\x0c\x92\x22\x10\xfe\x30\x8b\x4c\x39\xc1\x5a\x59\x1a\xdd\x21\x80\x6f\x67\xe7\x48\x2d\x71\xcd\xbb\x44\xc7\x8f\x1d\x32\xd2\x7e\xfc\x75\x38\x73\x44\x36\xa8\xfa\x7b\x99\xf1\xdd\xb5\xfc\x67\x6e\x7f\xfe\x56\x67\x1e\xb7\xf1\xbd\x09\xc9\x70\x03\x56\xf5\x02\xab\x6c\x82\xa2\xd3\x09\x0c\x77\x1f\xe9\x37\x25\x59\xe0\x9f\x40\x39\x7a\x05\x37\xea\x27\x3c\x86\x8d\x07\x5f\xfd\x02\x6d\x7e\x0b\xf8\x6d\x0e\xe6\x4a\x1d\xa7\x30\xe5\x34\x20\x22\x19\x30\x99\x16\x0a\xd0\xb2\xe0\x77\x73\x81\x9f\x32\x07\xed\x58\x16\x31\xeb\x0a\xab\xe5\xfc\x81\x54\x45\x80\x7f\x72\x60\x5a\xd6\x8d\xe8\x93\x81\xa7\xda\xe1\xc5\xdf\xd5\x20\x96\x82\xf1\x45\x04\x10\xf9\x3c\xe8\x74\x85\x43\x0b\xde\x41\xbe\xab\x0a\xd6\x15\x0c\xfc\xad\x04\xf8\x10\x4a\xbe\xa8\x07\x9f\x1e\xa0\x4e\xb9\x16\x1b\x3a\xe0\x05\x24\x32\x9b\xfb\xc7\x38\x53\xf2\x6e\xe2\x26\x83\xc2\x8f\xf8\xc7\x0a\x4e\xbf\xaf\x0a\xff\x5e\x65\x37\xa6\x13\x48\xf9\xf4\x9b\x37\x21\x9f\x2e\x3b\x6d\xcf\xfb\x58\x38\xe1\xd1\x7e\xeb\xd1\x08\x8b\x79\x55\xda\xc1\x35\xec\xba\x42\x26\x43\x2d\x13\x4e\x06\xa7\x49\x33\x05\x8a\xeb\x09\xf4\x0a\xbd\x89\x2a\x03\xd0\xe2\x19\x3c\x9d\x4d\x27\x16\xbf\x72\xc2\xc0\x8b\xd6\x56\x62\x04\xde\xff\x1f\xd1\xf4\x41\x4b\x91\x0d\xb9\xec\x07\x24\x78\x21\x58\xfc\x2f\x72\x5e\x87\xd6\xd2\x30\x82\x93\x30\x39\x53\xe4\x04\x19\xb3\x19\xea\xda\x16\x28\x63\xe3\x4c\x70\x44\x5a\xcb\xc7\x08\x4c\x8c\x27\xe0\x88\x13\x50\x17\x47\x42\xe2\x07\xc3\xed\x88\x5f\x3e\x95\x48\x62\x7e\x5a\xcd\x4e\x30\x42\x4f\x6b\xcf\xf7\x08\xaa\x36\x3d\x27\xb2\x02\xbd\x97\xab\x58\xc6\x2a\xba\x18\x6a\xad\xdd\x21\x3e\xa7\x2f\x59\x22\xc8\xe9\xf1\x66\xf3\x1d\x86\x18\x25\x45\x6b\x96\xaf\x4b\x94\x4f\x25\xd6\x8f\x13\xab\x10\x60\x81\x4b\x20\xe0\xd7\x48\x40\xfe\x87\xd0\x45\xcf\x06\x1f\x55\x01\xbe\xfb\x06\x29\xea\x02\xf5\xcc\x77\x72\xbd\x0c\xd4\xa1\xbe\x80\xc5\x83\x21\x83\x5a\x4e\x61\xca\x28\xdc\xd5\x37\x80\x01\x3b\xe1\xc1\x50\x14\xf1\xd6\x13\xe4\xfe\x30\xf0\x5b\x0c\x75\xaa\x7e\xd1\x40\xce\xaa\xdf\x2c\x38\xe9\xf0\xa4\xa3\x4c\xea\x5e\x81\xb9\x8c\xcc\xa9\x90\x3c\x09\xf5\x84\x4d\x73\x3f\x92\xd6\x04\x5d\x5f\x58\xfa\xee\x3b\xa0\x96\x3f\x41\xbb\xe2\x07\x13\x4d\x6e\x60\x61\x9f\xc1\xdf\xbe\x51\xc7\x02\xbb\x78\x0d\x6e\x6f\x39\xc0\xc5\x6e\xd2\xc7\xce\xbd\x21\x7c\x8b\xe8\xba\xcb\xbb\x85\x9b\x2e\xeb\x3b\x98\xdd\x97\x0d\xbe\x99\xd2\xa2\x40\xaa\x7d\x05\x02\xd5\xc9\x4d\xf5\xdd\x8c\x9d\x93\x7a\xdd\x4a\xf2\x5f\x15\x4d\xed\x77\xab\x24\x9c\x38\xeb\xb3\xe3\xf6\x73\x79\x99\x3d\xce\x9c\x8d\x2f\xed\x58\xcd\xbd\x4c\x97\xc0\x51\xc0\xe2\xcf\x80\xfc\x0e\x42\x7b\xe2\x0e\x96\x98\x4c\x32\xa7\x4a\x47\x80\xdd\x20\xd6\x1e\x41\x83\xe4\x44\x34\x48\x80\xd8\xaf\x61\xe2\x29\x17\x6c\xd0\x1f\x28\x28\x9e\xe0\xf1\x5c\x62\xe1\x00\x64\x14\x1f\x72\x8c\x4e\x6b\xc7\x31\x02\x2b\x0b\xf9\x8e\x42\x19\x64\xdd\x41\xf2\x05\x0d\xf8\xc3\x1b\x46\xe8\xe7\xd3\x22\x3e\xa6\x22\xc4\x4f\x4a\x23\x2b\xf1\x91\xbe\xdd\x05\xad\x73\x1b\xb9\xd0\x8c\x03\xda\x0a\x5a\x44\xc7\x08\xe6\x4c\x38\x66\x92\xad\x70\x87\x9a\xd6\x1b\xee\x6b\x35\x94\xbb\xcf\x70\xaa\x8f\xc9\xd1\x0a\xf9\x6c\x9f\xd6\xe6\x60\x2a\x01\x3c\xd0\xa5\x2c\x84\x8a\xe2\x0b\x74\x00\x31\x68\xa0\x72\x99\xa6\xdc\x49\x89\x05\x5a\xed\x83\x88\xa7\x69\x3d\xf0\x8e\x79\x32\x0c\xc5\x82\xc1\x66\x66\x02\x7d\xd3\xfb\x3f\x87\x58\x7d\x6e\xec\xa9\x23\xd2\x01\xbf\xf2\x0a\xd2\xbb\x6a\x04\xc3\x2f\x28\x29\xec\x79\x33\x74\x1d\x77\x7f\x78\x87\x6b\x47\xef\x99\xb4\xa5\xad\x7f\x0a\xb8\x65\x02\xba\x55\x89\x40\xfc\x4a\x81\xff\xd4\x07\x05\xcd\x1d\x48\xd3\x3b\x78\xf7\x2b\x12\x40\x95\x02\x66\x6f\xa6\x8e\xa3\xb5\x78\x9b\x3d\x33\xb7\xcc\x68\x17\xe0\xfb\x98\x15\x66\x65\x8f\x35\xa8\x7e\x8c\x58\x59\x3f\x79\x12\xcf\x6b\x7b\xa8\xb4\xe6\xa3\xd9\x92\xa4\x4a\x4c\x61\xca\x15\xb0\x5c\xf0\x00\xd5\x10\x5b\x06\x77\xbc\xb7\x5a\xbd\x7f\xda\x7b\x3e\xed\x83\xd2\xdb\x5b\x6e\x6c\x19\x5e\xb9\x7b\xff\x28\x22\xce\x21\x3e\xba\xa1\x92\x53\x85\xa4\x1b\x25\x60\x7e\x13\xd4\xd9\x51\xeb\xfb\x92\xd6\xd2\x75\x2f\xaf\xb3\x36\x5f\x2e\xf9\xf2\xab\x3b\xf7\xf4\xa4\xf7\x23\xae\x2c\xa6\x4a\x59\x47\xee\x1c\x5d\xc7\xbc\x9d\x4b\x84\x1b\xa6\xce\x05\x0f\x8a\x7f\x39\xd3\x56\x90\x36\xf6\x20\xa6\xf5\xae\xf4\x4f\xf9\x06\x29\x03\x2e\x35\x51\x8e\x91\x65\x31\x2f\xcf\xed\xc9\xf9\xb9\x32\x7f\x49\x8a\x4e\x4d\x61\xca\xc5\x40\x5b\x55\x40\x36\x79\x0c\xcd\x61\x1a\x98\xcd\x08\xbc\xb3\x71\x7c\x0a\x53\xee\x82\x86\xd9\x08\x98\x7b\x40\xd1\x8f\xd4\xe1\xf9\xb3\x67\x96\xff\xdc\x1b\x90\xd6\x2c\xd9\x90\xb2\xfa\xc7\x9c\x89\xeb\xc7\x99\x6d\x17\x2e\x36\x54\xca\x2b\x2c\xac\x0a\xdd\xe0\x82\x3c\x58\x1a\xfa\x0b\x31\xce\xa6\x3e\x13\x63\xb4\x3c\x55\x1e\x34\x98\xe1\x65\x74\xc4\x30\x2a\xd0\x6f\x2e\x53\x6b\xf9\x8a\xd4\xcf\x09\xbf\x6e\x84\x5f\xf2\x2d\x5b\xbf\x25\x8b\xaa\xbd\xd3\xd7\xc4\x75\x66\xf3\x8c\xd5\xec\xe6\xf6\xad\x3f\x4a\x3c\x1e\xb9\x2a\xf1\x29\x97\x6a\xca\xd7\x78\xbc\xde\xb2\x21\x8d\xb3\x80\x77\xa9\xd5\x87\x72\x23\x94\xa7\x50\xf2\x25\x62\x6a\xfa\x5a\x2d\x4b\x0d\x62\x3e\xde\xa0\xba\xbb\x62\xab\x99\x60\x44\x66\x8d\x53\xc1\x03\x89\xd7\xe6\xd2\x03\xef\xfd\x4e\x5d\x34\x6e\xb0\xc9\x21\xf9\x81\x90\xc7\xdf\x52\x7f\x3f\xaa\x9f\x6d\x3d\x87\xf3\x9c\xcf\xd1\xce\x85\xad\x6a\xbc\x15\x7b\x5d\xd8\x75\xb7\x6a\x2d\xba\x5f\x7b\x25\xc0\xfc\xed\x67\xbb\x0e\x4e\xef\xdf\x71\x2d\x46\x50\xc4\x31\x95\x91\xe2\xc0\x3f\x50\xfa\x9f\x92\xeb\x47\xc8\x91\x21\x9c\xc8\x7d\x6e\x78\x82\x4f\x8b\x41\x31\x02\x23\x13\xaf\x11\x49\x31\xf4\x41\x75\xfa\x04\xec\xef\x24\x04\x6a\x82\x36\x34\x11\xca\x47\x19\xb1\x54\x93\xa4\x2b\x94\x84\xa1\x9e\xa4\xc5\xca\x98\x8a\x22\x03\x0b\x29\xd9\x30\x01\xf5\xc1\x1f\x58\x5a\x12\x09\x84\xee\x29\xd0\xca\xe5\xe4\x03\x27\x5a\x0c\x8e\x11\x4c\x70\x3c\xd0\xe8\xa3\xd0\x72\x66\x43\x15\xfe\x1b\x72\x6e\x0c\x39\x23\x40\x8b\xf7\x31\x15\x21\xdc\x0a\x58\x30\x4c\x3e\xb8\x01\x81\xe0\x3b\x38\xfc\x6f\x4e\x38\x3d\x5a\x2c\x8d\x11\x98\x18\x84\x18\x48\xd3\x2b\x22\x87\xc0\x70\xe3\x0a\x21\x61\xd3\x97\xc3\x94\x00\x2d\x46\xc7\x08\x4c\x28\x0f\x0f\x89\x15\x92\xe0\x3a\x43\x49\x43\x2b\x69\x92\x3e\x68\x87\x9c\xf0\x91\x5c\x1d\x42\x4b\x28\x80\xff\x84\x63\x72\x26\x5d\x93\x02\x12\xfc\x18\xa8\xbc\x31\x88\xb1\x08\x15\xd8\x35\x38\x57\x5a\xd2\x81\x11\xf8\x71\x28\xbc\x52\xef\x02\x2b\x74\xd7\x40\xdf\x99\x5c\x13\x08\x8d\x8f\x0b\x02\xcd\x19\x2d\xb9\xc1\x08\x3c\x87\x19\x11\x12\xd7\xba\xc2\x7d\xa9\x83\x46\x27\x04\x7e\x32\x0f\x09\x9c\x0d\x79\x39\x7d\xc5\x94\x07\xe9\x48\x8f\x56\x3b\xba\xff\xbb\x01\xa4\xb7\xc8\xfa\x4b\xc7\xf4\x5e\x66\xad\x3b\x59\x3d\x7c\xe0\xab\x8f\x94\xe7\x6a\xfb\x6f\x3f\xee\x84\xd5\xf7\xb1\x1c\x56\x0f\x9b\xb6\xd3\x58\xa2\x1f\x06\x3c\xb5\x17\xc4\xbb\x49\x30\x3e\x89\x03\x0e\xcb\x3b\x18\x70\xa4\x01\x66\xcf\x06\x54\x1e\x82\x42\x55\x03\x3e\x7a\x0b\x23\x60\x67\x30\x42\x01\xb1\x65\x0d\xd4\xba\x51\xc4\x83\x24\xb8\xb6\x52\xe8\xc8\xbc\x02\x6e\x4d\x29\x74\xf6\xde\x10\x5b\xe4\x90\x6f\x29\xc0\xc2\x83\x24\x62\x47\x06\x98\x37\x0b\x01\x16\x74\x80\xda\xfb\x7a\x12\x18\x95\x30\x13\x22\xb6\x7c\x87\xf7\x97\x1f\x0c\x66\xeb\xbd\xea\xe6\x0f\xde\xf6\xd2\x56\x16\x3b\x3a\xb1\xc1\xd5\x30\xad\x7a\x0d\x89\x8d\xe1\x90\x59\x44\x17\x0e\xce\xc2\x0d\xa8\x0c\x1f\x98\xbd\x48\x00\xfe\x61\x1a\x90\xe5\x2e\x38\x95\x97\xd4\xd9\x5f\xf1\x0b\x13\x23\xf9\x57\xb3\x85\xa4\xd3\xb8\xbf\x7a\xe0\x23\x04\x55\xa5\x2f\x1e\x39\x6d\xd9\x5e\xb3\xdc\x46\x7b\x3a\x5d\xb0\x21\x94\x2a\xb9\x1b\xb8\x1d\x27\x9c\xab\x76\xdb\x7d\x8f\xd8\xa7\x16\xfd\xd9\xc7\x7c\xeb\xec\x36\x7d\x31\xd2\xac\x5d\xef\xf5\xcc\x3c\x4d\x50\xbd\x9d\x94\xa5\x05\xab\xaf\x24\xa6\x6d\x20\x41\xdc\xc1\x5a\x87\x20\x59\xb3\xc0\x34\x0b\xc1\x03\xdf\x20\x21\x9f\x92\xd8\x46\x49\x90\xf4\x4c\x26\xd1\x21\x20\xb6\x03\x80\x6c\xf3\x06\xf2\xe8\x27\xa8\xad\x5c\x00\x41\x07\x88\xd7\x49\xa8\x0d\xdd\x9d\xd5\x12\x88\x84\x71\x7c\x8a\x54\x47\x6f\x11\xd3\xec\x3a\x47\x36\x36\x0b\xc9\xb5\x91\x27\x73\x9e\x9d\x38\xff\xe8\xd7\xfa\x5b\x95\x24\x63\xca\x0c\x93\xb4\xb4\x58\x0a\xa8\x7f\x16\x27\x92\x4e\x4a\x82\xe4\x7f\x48\x0c\x1d\xe0\x22\x46\x58\xa0\x9c\xd3\xda\x45\xa0\xf1\x59\x60\x89\xc2\x0c\xb9\x0a\x83\x1c\xdb\x42\xab\xe8\x4d\x6e\x53\x42\x6b\xa3\x30\x15\x25\x5c\x09\x1c\x10\x12\x2a\x09\x8e\xdc\x03\xa5\xb2\x90\x09\x2a\x0e\x5a\x7b\x89\x11\xa4\x98\x14\x49\x59\x5f\xa5\x4d\x70\x3e\xd0\x60\xe4\x43\x88\x4a\x38\xf2\x20\xb9\x3e\x83\x16\xe9\x31\x02\x8b\xa2\x13\x5c\xbc\x27\xb4\x9b\x01\x90\x8a\x2f\xe1\xd0\x93\x3c\x53\xb3\xa4\x20\x91\x56\x1f\x4a\xa0\x26\xe6\x7b\xe0\xc9\xbf\x0b\x60\x2d\x5f\x6a\xc9\xe2\xec\x7d\x2a\x62\x19\x27\x9a\x9a\xb2\x62\xc2\x3f\x77\x65\xc0\xfb\xc0\x2d\x3a\xbf\x66\x19\xaf\x55\xb2\x06\xbe\xfc\x7a\xce\xea\x40\x22\x29\xa8\x02\x2c\x15\x00\x44\x3e\x02\x26\x3d\x62\x80\x8c\x7d\xa3\xae\x71\xaa\xb4\xcd\x9a\x9c\xcf\x75\xeb\x1b\xfc\x60\x26\x2f\xf7\xf5\x97\xdb\x8f\x08\xa9\x6f\x6c\x8b\xd9\x17\xd2\x0e\x49\x48\x44\x2e\x84\x76\x93\x42\x67\x18\x1b\x7a\x11\xef\xbc\x42\x3d\x3e\x40\x9d\xdb\x6b\xdd\xbe\x7c\xf4\xc5\xb6\x54\x79\x2d\x87\xdc\x68\x83\x8f\x86\x87\x82\x9e\xb3\xc7\xec\x7c\xc0\xf4\x3b\x6b\xd7\xd1\x95\xab\x2c\xd7\xce\x90\x68\x04\x49\x13\x0e\x07\x6a\x85\xd1\xa6\x17\xf1\xce\x06\xfc\xed\x09\xb0\x1a\xc5\x30\xb3\x19\x02\x1c\xc8\x18\x20\x50\x75\xd0\xfc\x45\x90\x5b\x36\x81\xf5\xbe\xa1\x56\x0b\x8f\x4c\x8e\xb9\x34\x9b\xb4\x19\x5c\x49\x48\x43\xf7\xc7\x2b\x7c\x0d\xbc\x2a\xfc\xf8\x56\x4e\xa1\x8d\x57\x79\xe7\xa7\x65\xbf\x04\x34\xa8\x0e\xf0\x2a\x24\x19\x36\x04\x7c\x73\xac\xdb\xac\xbf\x55\x8c\xc7\x9a\xc0\x3d\x7a\x9c\xf9\x4d\xe9\xee\x0e\x5e\xa7\xf6\xcb\x55\xd2\xbb\x48\x17\xd4\xc2\x01\x51\x2b\xe0\x65\xc4\x38\x30\xa7\x5a\x6a\x32\x6c\x5f\x7d\x4f\x1e\xcf\xc7\x98\xe5\xfb\x46\xfd\x6c\x6f\x67\xd0\x2a\x85\x8f\x66\x8d\x93\x0c\x66\xdd\x91\x2e\x5e\x0c\xa1\x6a\x7d\x8f\x49\xc6\x06\x2a\xe3\x1c\x62\x25\x2d\xb9\xef\x18\x20\x71\x11\xfc\x5b\x01\xd0\x7e\xdd\x30\x56\x2e\x03\x04\xa9\x02\xba\xf0\x37\x8c\x28\xf2\x80\x16\xaa\x02\xcb\x9f\x84\x3c\x58\x0c\xe5\xae\x99\x5c\xbd\x44\x8b\x6b\x30\x15\x1e\x9c\x14\x89\x97\x87\x21\x75\x4b\xa1\x98\x54\xc3\x28\x2f\x9a\x1c\x75\xd2\xe2\x1b\x4c\x79\x25\x2c\x87\x7c\x02\xa7\xf3\x1b\x66\x21\xa2\xc9\x1d\x91\xc8\xa7\xe1\xb4\x38\x07\x23\xec\xdc\x09\xab\xbd\x95\xdf\x43\x2f\xfb\x39\xb9\xef\x10\x1c\xda\x99\x5c\x02\x46\x6b\xf3\x31\x02\x8f\x13\xf9\xca\x73\x01\x64\xc9\x66\x48\xc4\xfb\x10\xc3\x8f\x71\x4a\xe7\xdf\x31\x08\xa6\xe2\xe4\x09\x8f\x58\xbe\x42\x9d\x95\x0c\x69\xf7\x00\x96\xba\x93\xb7\x89\xec\x9a\xd2\xe2\x17\x8c\x90\x84\x23\x2f\x7e\x81\x1c\xfd\x92\x4f\x70\xe1\x86\x0d\xf2\x4c\xc5\x93\x3c\x12\x5a\x4d\x6c\x31\xc2\xe2\x74\xcf\x52\x91\x91\x33\xa6\x1c\x04\xdc\x81\x34\x62\xa8\x05\x59\x2d\x1d\xf0\x55\x06\xe0\xb7\x36\xc8\x8b\x0d\x80\xcb\xbe\xc3\x58\xd7\x05\xb0\xbe\x3f\xb1\xc5\x00\xf4\xf5\x9f\x11\xdb\x0e\x41\xd9\x70\xe1\x00\x0f\x50\xe7\x74\x3e\x2a\xdb\x1c\x6c\xbd\xfe\xf1\xd4\x93\xc6\x90\xee\x71\x1b\xb3\x5f\x38\x53\xc3\xfd\x31\x1a\xf5\x4d\xef\x76\xf8\x69\xed\xd9\x62\xbb\xf4\xaa\x1c\xa5\x3b\x53\x98\x72\x03\xbc\x16\xe9\x0c\x62\x6c\x37\x30\xc5\xd6\xff\x49\x7b\xde\x8d\xdf\xd6\xd3\x7b\x31\xf6\x1c\xc7\xa6\xed\xa2\x25\xee\x93\x16\x52\x33\x9b\x13\x35\x6e\x56\xdd\xbe\x16\x55\x3d\x74\xf2\x28\x2b\x89\xf4\xd0\x22\x0d\x90\x6c\xb7\xd2\x56\xe0\x53\x81\x61\xa7\xa0\x9b\x81\x81\xa5\x06\x01\xd9\xab\x86\x6e\xc6\x38\xdc\xa9\x97\xd4\x09\x2f\xeb\x66\x0b\xfd\x0b\xf1\xcb\x6b\x93\x95\x1c\x9e\xf4\x0d\xc7\x6e\xba\xa5\xdc\xf2\x2e\xf3\xd9\x41\xd7\xe5\x36\xb1\xd5\xde\x0f\xb7\xfe\xa6\x7c\x3a\x4e\xf8\xc9\x54\x49\xa6\xc8\x41\xfd\xc0\xe8\x8c\xd2\x76\xcb\x5c\x91\x69\x1e\x33\xcb\x69\x3b\x9d\xef\xcd\xe6\xfb\x06\xc6\x94\x47\xa8\x5c\x27\x21\x36\x1d\x86\x59\x55\x81\xef\x5e\x9a\xc6\x0a\xf7\x8f\x8f\x70\x56\xaa\x5c\x39\xf1\xd9\x9c\x09\x09\x3e\xf2\x12\x89\x6e\x26\x90\x14\x25\xa0\x7e\x13\x4c\x39\x85\x82\xa5\x44\x00\x55\x51\x0f\x33\xd3\x29\x60\x2f\xd2\x81\xe7\x91\x01\x37\xe4\x19\x50\x5d\xc5\xf0\xb7\x77\x60\xad\xdd\x70\xeb\xba\x89\x87\x3e\x30\x07\xed\x03\x46\xff\x0a\x1e\x9f\x81\xd7\x56\x3e\x10\xaf\x80\x52\x6b\x58\x86\x9d\x23\xca\x8a\x33\x35\x02\xf6\x29\x0e\x37\x74\xc7\xd5\xd3\x8e\xb5\x89\xa5\x3f\x8a\x32\x49\x17\x71\xe0\xad\x8a\x91\x97\x26\xd5\xc8\x77\x42\x47\xc3\x0d\xd8\xa0\x14\x72\x3b\x20\x5a\xbc\x80\xa9\xb8\x90\xcb\x3e\x7f\x41\x09\x8f\x83\x02\x15\x09\xf9\x3f\x7e\x19\xb9\x46\x87\x06\x3b\x60\x2a\x3c\x04\xd8\x05\x2d\x82\x64\xa9\x95\xb4\x48\xc3\x34\x40\x31\xaa\x26\xeb\x10\x5a\xfb\x8c\x11\x58\x98\x58\x60\xa2\xca\x05\x72\x59\x05\x0c\x15\x5c\xe0\x0f\x6e\xe4\x8b\x37\xb4\x78\x01\x23\xb0\xb1\xe0\x60\x98\x37\x0d\x95\xc8\x28\x54\x98\x21\x30\xd2\xa9\x5b\x36\x75\xf7\xdf\xf1\x0b\x46\x38\x6c\xcc\xcb\xe3\x41\x72\x9c\x20\x15\x3f\xc0\xa9\x25\xc1\x55\x7b\xc2\x00\xf7\x3b\x34\xaa\xb5\x80\x7b\x5a\xa1\x66\xf4\x22\xdf\xc4\x47\x60\xc1\x29\xad\xdd\xc7\x08\x9c\x38\x26\xa8\x11\x3f\x92\x9b\x49\xc0\x81\xbe\x90\x8f\xf5\xc9\x0d\x6d\xd9\xa7\x5c\x49\x0a\x8c\x56\x5f\x6d\x8c\x30\xf9\x7d\x71\x91\xd4\x0a\x42\x49\x0d\x18\x65\xc0\x5c\x95\x90\xa1\x3f\x00\x79\xfe\x42\x2d\xb8\x35\x9b\x26\x7f\x99\xc5\x5d\x48\x8a\xcb\xed\x8c\x62\x7d\x18\x23\xb8\xa6\x47\x79\x93\xc9\x49\x85\x1f\xa1\xa5\x0f\x9b\xac\x77\x9d\xa1\x2a\xd2\xde\x1e\xee\xa1\xf0\xf6\xf4\x4e\x8d\xed\xec\x37\xb2\x3f\x3f\xe6\x7a\xb1\xbb\x4f\x65\xd5\xaf\x6c\x7d\xf3\x61\x21\xa1\xd7\x69\x4f\x33\x33\x96\xf8\xe7\x2c\x09\x31\x1e\xa8\xc7\xa7\xd4\x69\xbd\x85\xf5\xa5\x09\xcb\x18\x02\x7f\x48\xba\x33\xee\xbf\xa4\xfa\xe6\xd2\xd5\xef\xc3\x0c\xbb\x1c\xdb\x37\x27\x0c\x0e\x71\x2c\x2b\xef\x4e\x5e\xd2\x77\xaa\x53\x98\xb2\x2b\xdc\x92\x18\x6a\x9f\x6f\xb5\xc8\x93\x8b\x42\x27\xa5\x70\xfd\x0c\xd9\xf7\x56\xd4\x78\x1d\xd1\x56\xdd\x17\xd9\xaf\x78\x4b\x54\x3a\xe0\x58\xe4\xd4\xf9\xca\xfa\x25\x1a\x98\x4f\x61\xca\xc1\xc4\x13\x19\xb8\x93\x6f\xc9\x2d\x5f\x88\x3d\x99\xe0\xbe\x7a\x00\x59\x7f\x44\x1d\x6a\x28\xec\xf7\xf9\xf2\x6c\xed\x91\x01\xbe\x6d\x8b\x76\x08\xd6\xb8\xbf\x80\x3f\xa7\x51\x93\xff\x6c\x2c\xcf\x2c\x47\x90\x98\xbf\x32\x29\xd4\xe8\x87\xa2\x8c\x02\xed\x30\x07\x8d\xc1\x1b\x62\x00\x07\x0c\xc8\x24\xb5\x33\xf4\x4b\x5e\xe3\xc2\xda\x52\x4f\x85\xec\x93\x9f\xbc\x6f\xd8\xeb\x59\x1e\xbd\xbd\x7e\x5f\xfe\xef\x57\xd6\xf5\x3b\xf8\xd7\xb6\x9a\xe5\x91\x3a\x9e\x2d\xc0\x68\xd6\x19\xe8\xad\x47\x60\xa4\x0c\x18\x0f\x7a\x80\xdf\x46\x61\xfe\xfd\x39\xd8\xd8\x21\x62\x1b\x19\x58\x08\xe9\x4a\x6c\x24\x07\xb8\xf5\x37\x9c\x5e\x3c\x78\x60\x86\xec\xb7\x90\xe3\x7a\x38\x4a\x34\x98\x70\x26\xb1\x35\x00\xd4\x98\x2e\xe0\xa3\x61\xf0\xcf\x04\x23\x4c\xf1\xd0\xe2\x17\x4c\x45\x51\x88\x85\x74\x08\x5b\x00\xec\x5d\x1d\x54\x02\x49\x10\xb2\x83\x03\x06\x67\xb4\xd8\x09\x23\x38\xe3\x70\xb0\x84\xa4\x0c\x4c\xe4\x03\x1c\x24\x96\x5c\xee\x4c\x2e\x21\xa1\xc5\x58\x98\x8a\x22\xa3\x18\x49\x91\x3c\x86\x84\x78\x09\x79\x6c\x08\xfe\xd0\x48\x96\x66\x5a\x5c\x86\x11\x84\x71\x6c\xe4\xce\xb2\x70\x66\xf1\xe4\x68\x0f\xfa\x62\x55\xe4\xde\x04\x64\x45\x4f\x8b\xb7\x30\x15\x1e\x46\x78\xfd\x7f\x25\xf0\x28\xa0\xd2\x19\x80\xd1\x4b\x1b\xe0\x81\x6e\x1e\xd8\x88\x83\x16\x53\x61\x04\xc6\x12\x65\x27\x52\x56\xe7\x39\x54\x71\x5f\xe1\x0f\x7d\x30\x01\x75\x99\xf4\x41\x0a\xd4\xb4\xde\x5c\x53\x2e\xa4\x68\x8d\x56\xaf\x7e\x8c\xb0\xf0\xfd\x5c\x01\xbc\x1c\x97\x0e\x26\xf8\x95\xda\x3e\x6a\x4e\x8c\xd4\xe8\x2a\xed\x41\xbf\x95\xf7\x7f\x7c\x5c\xfe\x67\x13\xb3\xa2\xc7\x8e\x73\x2f\x6e\xdb\x24\x59\xe0\xb8\x94\x58\x52\xa1\xb9\x05\x2c\x1d\x09\xcc\x77\x39\x74\xeb\x5d\xc0\x47\x0f\x80\x46\xc9\x84\x46\x3e\x0a\x88\x6d\x1e\x60\x8b\x56\xa8\x4a\xa3\xa1\xb6\x7b\x0c\xbe\x5c\x00\x7d\x99\x0c\xc0\xd7\xcd\xc4\x14\x0f\xf4\xbd\x67\xe1\x7e\xbf\x81\x52\x15\x0e\x1e\xaa\x84\x7f\x7f\x08\x49\xf3\x8c\xda\xc5\x8a\xd7\xb6\xf7\x65\xbb\x9a\xe6\x8d\x7b\x1a\x75\x90\x9b\xbf\x59\xea\x56\xfb\x8d\x5b\x81\xe3\xf3\x27\x58\xa6\xa2\xf6\x1c\x7b\x7e\xbd\x8c\x74\x37\x10\xb8\x07\x8d\xd0\x61\xf2\x86\x39\x92\x32\x62\x07\x01\x40\x9a\x5e\x38\xb9\x07\xe0\xb7\x2e\xe2\xe1\x3d\xfc\xe8\x1d\xf8\x6d\x0c\x48\xec\x14\x4c\xb5\x24\x82\xd9\xcf\xc1\x98\x28\x10\x08\x78\x33\xa4\x4d\x03\x20\x44\x33\xf1\x0a\x3d\xc4\x49\x23\x1e\xa9\x80\xcf\x3f\x42\xa3\x32\x06\x95\x5f\x18\x18\xf8\xe3\xff\x94\x2d\xd6\x4e\x7d\xef\xd4\x77\xf9\x9e\x51\x1e\x60\x96\x12\x89\x3e\x7d\xaa\x5b\xf3\x6e\xdb\xe2\x66\x4e\x87\xf4\x5a\x66\x74\xb0\x5a\xf9\xe4\xbf\xdb\x40\x8c\xc0\x28\xc4\x02\x5b\x16\xd6\x90\x65\x9e\x5c\x30\x41\x3e\xfb\xe2\x81\x5a\x80\x16\x3d\x31\x82\x22\xce\x09\xa6\xb6\xbf\x90\x2f\xc5\x43\xc2\x74\x01\xb7\x6d\x92\x5c\xf7\x45\x6b\x19\x98\x0a\x8b\x17\x6c\x9d\xee\x06\x95\x48\x22\xfc\x61\x00\x0a\x6f\x26\xc4\xf9\xc5\x30\xd5\x46\xb2\xc0\xb4\xde\x3e\x81\x11\x16\x8b\x17\xfe\xa7\xcd\x8b\xa4\x6f\xaf\xd8\x35\xf9\x35\x15\xbb\xdb\x45\x67\x12\x86\xc6\xe4\x77\x37\xa4\x74\xda\x9c\xb6\xf7\x15\xe5\xc2\x9d\xe1\xdb\xeb\x3a\x44\x0a\x25\xc0\x86\xfe\x82\xdc\x8b\x82\xbd\x2c\x86\x39\x86\xaf\x80\xc5\x47\xa1\xb1\x7a\x0a\x38\xbb\x98\xfa\xd8\x89\x4d\xaf\x5a\x98\x39\x40\xf8\xf1\x96\xdb\x5f\x46\xc6\x84\x55\x82\xec\x2c\x5c\x76\x94\xf5\xd4\xa9\xab\x49\xbe\xb7\x19\xb5\x90\xd0\x26\xa5\x5e\x20\x0b\x24\x10\x2f\x88\x51\xb7\x9f\xa8\x57\xdc\x7f\xd0\xfd\xeb\x43\xa6\x46\xf3\x6d\x43\x3d\x4c\xe1\x9a\xe7\x55\x85\xc6\xf4\x2b\x17\xda\xda\x3e\x5b\x39\x36\x0d\xe8\x4d\x53\xdd\x47\x93\x6a\x4d\x77\x2a\x8d\xb9\x3b\x18\x16\x30\xd7\x26\x2e\x81\xee\x5a\x7e\x51\x62\xf1\x0c\x21\x49\xbf\x56\x5f\xac\x96\x79\x47\x24\xe5\xd3\xf3\x3d\x6a\x95\xa7\x37\xbb\x47\x6e\x40\xf6\x3d\xe7\x5f\x10\x93\xfd\x79\xea\x9f\xdc\x18\x3f\x39\xc1\xa6\x7b\x85\x59\x1f\xd5\xc4\xa4\x48\x11\x06\xbc\x8d\xb6\x01\xd8\x7f\x20\x18\x33\xd4\xc7\x55\xce\xa3\xc6\xf7\x43\xfb\x3a\x9a\xde\xb5\x7d\xe7\x58\x1d\x3b\xd9\x12\x13\xce\x11\x73\x50\x9b\xf3\xa7\x77\x86\x62\xfd\xd9\x9f\x32\x71\x4b\xdf\x17\x9d\xc2\x94\xf4\xa6\x30\xe5\x40\x78\xb0\x19\x0d\x44\xea\x2b\x90\xbe\x6f\x90\x08\x4f\x00\xcd\x0b\xa1\x10\x79\x01\x9a\xbf\x24\x36\xd2\xa1\x76\x37\xe6\x22\x8e\x1e\x56\x8f\x60\x5d\xaf\xe3\x66\xf9\x03\xf1\xae\x63\x9b\x88\x16\x3c\x9d\xe5\x41\x68\x6e\x71\xdd\xaa\xf2\x41\xe1\x77\x0f\xe5\xd3\x6a\x63\x01\x83\xef\x9f\x6e\x7e\xf1\x60\x5c\x4f\x88\x51\x8a\x69\xcf\x89\x89\xf5\x7c\xe2\xbd\x4c\x0b\x4e\x6b\xaf\x0d\xb3\x94\x49\x9a\x2f\x29\x5a\x01\x12\x6c\x21\x90\xd1\x69\xa0\x7a\x16\xa0\xf5\x2e\x21\xf6\x72\x07\x33\x79\x0b\x59\x20\x8f\xd8\x88\x9e\x7c\xff\x82\x71\x0a\x53\x7e\x0d\x6f\xd3\x00\x69\xee\x83\x0a\xb0\x1c\x72\x72\x1e\xcc\x47\x37\x01\x7e\x99\x86\x75\x12\x99\x00\xee\x1d\xb1\x9f\x26\x37\xf9\x6e\x18\x0d\x0e\xc5\x08\x2c\x42\xe4\xcb\xa1\x6d\x50\x41\x3e\x85\x12\xf2\x14\x7e\x32\xcd\x08\x45\x9a\x16\x37\x62\x04\x21\x1c\x4e\x8c\x24\xd2\xd1\x50\x41\x35\xc1\x48\xec\x05\x50\x5e\xbf\xd8\xa1\x6d\xa3\xc5\x96\x60\xb4\x00\x67\x92\x6d\x0b\x20\x5f\xfe\x25\xf7\x27\x20\xdf\xbd\x85\x0d\x5e\xc5\xa1\x07\x4f\x6e\x17\x49\x8b\x97\x31\x95\x12\x21\xa8\xd4\x02\xa1\xef\x10\x4a\xee\x2f\x07\x8d\x65\x33\x17\x3c\x65\xa1\xc5\xee\x18\x41\x09\xc7\xac\x04\xe7\x0c\xbf\x1f\x47\x6e\xc1\x0d\x87\xee\x80\x3f\x0c\x43\x0f\x20\x85\x1b\x16\xf8\xd2\x92\x04\x8c\xc0\xc4\xcc\x00\xa3\x8d\x04\x38\xb4\x3b\xb9\xe2\x85\xf8\x0a\x05\x48\xae\x16\xb8\x8b\x55\x2b\xe0\x2e\xd2\x62\x7b\x8c\xb0\x82\x89\xfc\xb2\x88\x59\x38\xd1\x24\x72\xc3\x1b\x62\x29\x01\x39\xd0\xa3\x25\x16\x44\x35\xaf\x04\x83\x5b\xc8\x13\x2f\xa0\xef\xf4\x18\x8e\x3f\xc4\x39\x35\x47\x72\x48\x68\xbd\xe0\x07\x23\xcc\x2f\xce\x17\x13\x43\x22\x10\x54\xc1\xb4\x4d\x2d\x10\xa6\x9f\xf0\xec\xe8\x11\xd1\x1a\x42\xd9\x7b\x4e\x6c\xd8\x04\x66\x3e\x4a\xad\x78\x32\xab\x71\x92\x15\xac\x7b\x9d\x6a\x85\x3b\xae\x1f\xbf\x71\xcd\xae\xf6\x51\xcb\x2e\xe5\x86\x2a\x23\xa6\x7c\x79\x01\xdf\x77\x18\xd5\xab\xb8\x7e\x29\x33\xf0\x5b\x31\x44\xce\xb5\xb6\x7b\xd8\xc8\x86\x3a\xdc\xe5\x49\x71\x39\x97\x72\xf4\x84\x72\xfd\x85\x33\xdf\x92\xae\x7c\x8b\xa5\x7c\xfa\xa5\x9f\xfd\xf5\x93\xc6\xfe\x9f\x5f\x7f\x47\xcf\xf2\x9b\xe6\xfd\x71\x34\x60\xc8\xda\x88\x16\x84\x44\x5e\xb9\xaa\x2d\xbc\x4a\x8b\x9d\xea\x9c\xcc\x2c\xf3\xd8\x7b\xf6\xcd\xc6\x3f\x9d\xca\xa4\xab\x05\x7c\x2b\x05\x4d\x77\x9c\xd8\x68\xb6\x51\xad\x3f\xa7\xdb\x3a\xd7\xbd\x22\x79\x69\xbd\xae\xd4\x99\x26\x8d\xdc\xf5\x58\xcd\xcf\x00\x71\xbc\x5d\xd3\x03\x3b\x7e\xb7\x43\xcd\xc5\x1b\xa4\xc2\x46\x75\x47\x46\xcc\x5c\x83\x53\xf6\x6d\x5d\x43\xea\xaa\x47\xbc\x06\x4d\xd4\x96\xb0\x37\xbe\xe2\x14\xa6\x3c\x0b\xb5\x66\x0a\xa0\xd0\x10\xb9\xff\x26\x50\x45\xc3\x20\x44\x99\x80\x62\xf1\x91\xc4\x60\x4a\x1a\xc0\xfd\x87\xfb\xd7\x0f\xff\x9c\x0f\xcb\x6a\x23\x00\x46\x16\x29\xbd\xa6\x04\x74\xb1\x27\xd8\x8a\x36\xe8\x33\xf9\xc3\x13\xe2\x87\x00\x71\x06\xfe\x16\x0e\x7c\xc0\x3e\x18\xb6\xbc\x04\xba\xf2\x07\xf8\xf2\x6f\xa8\x3d\x12\x80\xf6\xc8\x20\xf7\x0d\x85\x1e\x91\x37\xd0\xfd\x89\xc4\x98\x08\x7a\x7c\xc1\xe0\xb7\x72\xea\xfb\x60\xaf\xdb\x74\x9d\x8e\xa4\x7c\x49\xd3\xc0\x2a\x7a\xaa\x2f\xea\x1a\x76\xbb\x57\xdb\x05\x9a\xd5\xae\x93\xc2\x31\x1c\x0c\xc4\xc7\x68\x5f\xf8\x77\xec\x80\x11\x14\x77\xe2\x60\xf3\xda\xa7\x70\xd1\xfd\x80\x5e\xdf\xa1\x88\xb8\x11\x2f\x81\x40\x4f\x34\x1e\xea\xee\x56\x46\x18\x82\xd0\xe2\x22\x8c\xc0\xc7\x8b\x23\x8b\x38\x1c\xc8\x1b\xd2\x7a\x0c\xa6\x46\x27\xa1\x32\xc4\xc8\x6d\xf0\x68\xb1\x1c\xa6\x42\xe0\x81\x75\x57\x15\x50\x1c\xdf\x42\x88\x59\xa8\x8e\xde\x2c\x83\x73\xa5\xc5\x95\x40\xc0\x11\x7e\xd2\x5c\xc3\xa1\xc1\x6a\x80\x7a\x67\x1c\xba\x5e\xd9\xe4\x1b\xbd\x64\x4d\x44\x8b\x73\x31\x02\x03\xe9\x14\x0f\xc3\x94\x73\x89\x9e\x32\xb9\xc0\x0f\x12\xb5\x8c\x1b\xc6\xb0\xb4\x36\x18\x53\x61\xe0\x61\x22\xa9\xb5\x72\xa8\x34\xc2\xc0\xa8\x5f\xc9\x5d\x6a\x90\xa9\x76\x92\x57\x48\xeb\xbd\x61\xc4\x06\x4a\x3d\x30\xb1\x5c\x03\x58\xfc\x07\xd0\xbc\x8b\xe4\xc3\x5b\xb2\x8b\x0f\x2c\x75\x0a\x54\xcf\xe5\x80\x5f\x67\xa8\x99\xd3\xcb\xfb\xc2\x86\xdc\xf5\x62\xc7\xaa\xdf\xeb\x3e\x2b\x3c\x35\x21\xd6\xf9\x2a\xb8\xc8\xa8\x69\x64\x9d\xa6\xd4\x91\xdd\xc1\x57\xbc\xf3\x97\xbe\x3b\x0b\x14\xd8\x3c\x75\x42\xc3\xea\xd2\x8b\x6d\x87\x63\x4b\x6d\xbe\xf6\xd9\xb0\xd5\xf7\x6f\x90\x94\x30\x52\xb4\xbe\xbf\x6d\xf8\xe7\x0d\xe5\xee\x61\x9c\x0d\x4b\xcb\x92\x71\x84\x45\xa7\x91\xc4\x2a\x7d\x58\xf6\x67\x3c\x85\x29\xfb\x82\x19\xf5\x40\x39\xac\x01\x8b\x68\x81\x9c\xe6\x4c\xed\x33\xb9\x8a\x7e\x0d\xbc\xab\x65\xcc\x77\xf1\xc3\xe1\x43\x66\x1f\x76\xe7\x98\x85\x5c\x29\xe0\x77\xf2\x35\x6e\xec\x39\xb6\x88\x6f\xb3\xea\x24\x1d\x20\x03\x01\x18\xa5\xae\xa8\x6f\x7a\xf6\xfd\x8e\xbc\x52\x78\x3d\xb3\x3d\xeb\xbe\xd8\x0d\x0a\x1f\x92\xac\xde\x38\x29\x73\x27\xa7\xf1\x1b\x7b\x6f\xfb\xb3\xf5\xf7\x38\xe5\xd3\x57\x26\x95\xef\x85\x45\xe7\x7e\x3c\xa9\xfe\x72\x97\x56\xb6\x71\x45\xdc\xc6\x61\x85\x10\xc7\x0c\xa1\xfb\x92\xa7\x02\x93\xa6\xa7\x6b\x48\x39\x13\x62\x48\x05\x93\xf9\x85\x60\x29\xbd\xc4\x4e\xc2\xd4\xe1\x5d\xb5\xed\xbe\x9b\x7f\xc2\x05\x83\xfb\x22\x8d\xa7\x4d\x4c\xdc\x8f\xcf\x1e\x39\xf9\x7e\x43\xea\x2b\xae\x0b\x6c\xaa\x45\x1f\x07\xd2\x4a\x96\xd6\x1b\x04\xf5\xd6\x0e\x60\xe4\xc0\x2a\xfa\xa8\x43\x5d\xf9\xf3\x9e\xcb\x5f\xed\x61\xb6\x90\x3d\x7f\xf6\x85\xe1\xd5\xf6\x8e\xaa\x95\x22\x79\x87\x5b\xcd\x25\x8d\x3e\xb1\x1c\x9c\xce\x0e\x3e\xb7\x34\x93\x5a\x30\xaf\x26\xa0\xe1\xc6\xa0\xb3\x57\x0e\x7c\xb4\x4a\xc8\x78\x65\x40\xc3\xb5\x51\x93\x77\xa3\x5b\xb6\x03\x9b\x79\x79\xfc\x8d\x8b\x06\x02\x5b\xc6\x75\x6b\x44\xbb\xf3\x5e\x49\xed\x79\xa7\xa5\xe7\x5f\x7e\xf3\xa2\xa0\x29\x42\xca\xe1\x03\xa6\x7d\x05\x58\xae\x85\xdc\xfe\x06\xf6\x77\x33\x98\xc2\x94\xc7\x01\xee\x2f\x88\xfb\x82\x98\x2b\x23\x1f\x4d\xd3\x62\x35\x4c\x85\x5f\x11\xa6\x7a\x53\xa1\x1b\xd1\x0e\x15\xcd\x22\xb4\xd7\x35\xe4\x26\x24\xb4\xf8\x0f\xf8\x99\x08\xf9\x45\x59\x50\x41\xd4\x90\x6f\x9e\x42\x95\x33\x4f\xf6\x5c\x69\x31\x19\x46\xe0\xc1\xe1\xdc\x48\x23\x36\x43\x93\xe0\x07\x35\x8d\x1f\xb9\x7d\x13\x23\x0c\x1f\x69\xb1\x1e\x46\x08\x60\x62\x61\x84\xd7\x86\x20\x51\xf3\x60\xbf\x6f\x7b\x28\xd3\x10\xab\x9b\xdc\xf2\x91\x16\x9b\x12\xdb\x1b\xc0\x5c\x7c\x1b\x1c\x39\x0c\x2a\xdc\x5e\xa8\x7a\x9e\x70\xc2\xe4\x3e\x2d\x4e\xc5\x54\x8c\x18\xe0\x3d\x61\x33\xd2\xb7\xdf\x93\x5b\xc0\xc1\x1f\x5e\x2d\x87\x0a\x9c\x16\xc3\x62\x04\x1e\x21\xdc\x26\x98\xbd\x86\x2b\xfc\x09\x67\x18\x08\x35\x6d\x01\xd9\xd5\x24\x57\xf9\xd2\x62\x57\x8c\xe0\x84\xdb\x08\xad\xcd\x20\xdc\x96\x28\x48\x85\xdf\xe4\xde\xc4\xcb\xa7\xe6\x91\xa5\x21\x69\xbd\x81\x11\x23\x7c\xff\xbe\x38\x0f\x9c\xbf\xbf\xe5\x06\x57\x19\x8c\x5e\x0a\x14\xdc\x6e\x6b\x70\x13\xdf\xf5\x27\xe9\x46\x92\xc6\x60\xa7\xa1\x3c\xef\xf0\xf8\x96\x89\x20\x19\x7b\x0e\x52\x65\x76\x12\x50\x0f\x63\x90\xdf\xca\xe1\x9d\x0a\x87\x29\x4c\x39\x14\xae\xf2\x3d\xf4\x37\x7c\x80\xf4\x87\xc0\x3c\x6b\x02\x10\xb9\x7e\xe8\x5c\x56\x10\xbb\x61\xc2\x00\xe4\x0b\xfc\x4a\x31\x70\x58\xfa\x49\x87\x4b\x4a\xe7\xa6\x30\xe5\x78\xe2\x75\x26\x98\x3d\xbe\x0f\xf0\xa3\x89\xef\x15\x84\xe3\x7a\x12\x5f\x8c\x04\x9d\x30\x77\xf0\xf8\x1c\x3c\x0f\xac\x22\xbe\x11\x8d\xf8\x1a\x02\xf8\x91\x13\x98\x54\x23\xf8\x4e\x07\xb5\x76\x6d\x33\x35\x4a\x4e\xe5\x58\xc9\x9d\xad\xcf\x7c\x75\xc1\xfe\xb6\xa5\xf8\x85\x5d\x8f\x7e\x89\x6d\x08\x9c\xdf\x82\x1d\x67\xe8\xcd\xc5\x2f\x0d\x50\x47\x9c\x10\xf8\x67\x1c\x8a\x74\x31\x44\x0f\x05\xe3\xa6\xc1\x34\xb1\x37\x78\xa8\x02\xa0\x77\xc1\x27\x5b\xa1\xf0\x37\xc3\x28\x34\x18\x4c\xf1\x37\x39\x1d\x04\x83\x6e\x77\x30\x52\x30\xb0\x24\x3f\xa1\x98\x7f\x83\x06\xf0\x19\x30\x87\x5f\xe0\xfa\x5f\x10\x5f\xa0\xc0\x00\x63\x42\x5a\xfb\x88\x11\x98\x58\x14\xd3\x48\xf1\xd5\x43\xb8\x67\x15\x90\x8f\x42\xc9\xf2\x05\xff\xd4\x06\xaf\x12\x6e\x83\xfa\x8f\x16\x9d\x30\x02\xa3\x07\xb9\x32\x3d\x12\x32\xcb\x18\x1c\xf9\x3b\xbc\x41\x28\x35\x55\x41\x8a\x57\x68\xbd\x06\x14\x23\x7c\xef\x9a\xfe\x4a\x7d\x27\xe2\xf6\xf0\xb8\xf8\xf3\x33\x99\x39\x5e\xd7\x0e\x5b\x71\xac\xe7\xda\xce\xdd\x76\x5b\xa8\xda\xd2\x41\xf2\x34\x9b\x4d\xd3\x57\xa9\xa1\x68\x12\xcb\x10\xab\xc2\x80\xad\xc8\x83\x5c\x56\x01\x58\xb1\x01\xa6\x0c\x1f\x82\x1d\x2a\x23\xbf\x31\x0f\x3c\x59\x46\x7e\x7f\x12\x9c\x7d\x0d\x3c\x75\x48\x05\xc3\x65\x01\x9a\xb7\xc2\x23\xe2\x7d\x53\x98\xf2\x6b\x30\xc8\x02\x74\xa9\x6b\x81\xc1\x18\x01\xbc\x3a\x0a\xfd\x80\x19\xea\x9c\xd2\xfc\xf9\x9e\x52\xfb\xa3\x1b\x1e\x13\xce\x46\xde\xed\xf6\xb5\x13\x8a\x73\x4a\x7b\x22\xc6\x1d\x8c\xb8\x2f\xfa\x4e\x1c\x93\x9f\x16\x5d\xa2\x11\x89\x6d\x95\x80\xcf\xe1\x46\x4c\xfb\xc0\x5a\x30\x4f\xe2\xcd\x68\x62\x57\x35\x6a\x1b\x98\xff\xa3\xaf\xea\x55\x78\xa2\xf9\x93\x63\x15\x0e\xf3\x93\xaf\x43\x73\x05\x93\x57\xd9\x05\x3f\xf9\x2a\xf4\xcf\x1f\xa7\x80\x41\xcd\x7a\x52\x44\x07\xa8\x90\x09\xac\xec\x27\x72\xcf\x18\xf2\x19\x37\x58\x40\x38\x40\x78\x43\x3e\x71\x83\x41\x8f\xf6\x14\xa6\x64\x41\xa2\xd6\x03\xb0\xc6\x16\xb8\xec\x12\xc0\xf0\x5f\x89\x8e\x1c\x75\xf5\x90\xda\x07\x42\x89\x57\x98\x1d\x22\xd9\xf2\xd8\x60\x22\x9e\x73\x25\x1a\xf0\xd0\x1d\xcd\x2b\x1c\x48\xf4\x5f\x6d\xf2\x64\xc7\x10\xa9\xd1\x53\x28\x31\x68\xa2\x0e\xcf\x8a\x07\x9b\x8e\x95\x75\x96\x5e\x66\xfb\x5a\x5e\xc8\xf6\xcb\xf6\xd4\xa7\xd1\x35\xa9\x63\xf8\x90\x3c\x85\x1b\x5b\xe5\xe2\x44\x23\x46\x4e\xfc\x3b\x76\xc0\x54\x62\x19\xe0\x19\x71\x25\x34\x1a\x19\x70\xa7\x53\xc9\x46\x90\x0b\x9a\x3c\x5a\x3b\x84\xa9\xec\x14\x32\x22\x69\xfd\x28\x72\xe1\x00\x8c\x08\x1a\xe1\x80\x79\xe4\xf7\x3a\x71\x42\x09\xa2\xb5\x41\x98\x8a\x94\x13\xb4\xf7\x41\x50\x10\xc7\xc8\xe5\xa4\x70\xce\xde\xe4\x97\x70\xd0\x22\x2f\x46\x88\xc5\x29\xc1\x11\xe7\xa1\x12\x9a\x81\xf6\x28\x1f\x96\xf2\x2a\xc3\x01\x69\xd1\x1c\x53\x61\x62\x80\xfd\x54\x1f\x41\x43\x77\x1f\xda\xa7\xdf\x90\xa1\x66\x39\xc8\x25\x6d\xb4\x5e\xde\xfb\x57\x17\x33\x14\x53\xfe\x0c\x79\x2a\x12\x04\xad\x5f\xc1\x3f\x0b\xd0\x5a\x44\x43\x25\x99\x4f\x7c\x27\x25\xd0\x94\x1f\x20\x60\x1a\x74\x64\x13\xc1\xc7\x75\x80\x83\x9b\xe0\xf7\xe6\xa0\xe8\x04\x10\xdf\x8a\x09\xfe\xf6\x93\x9a\xd7\x32\x47\xbd\x12\xae\x79\xe6\xbb\xb1\x07\x4a\xe8\x7f\x5a\x31\xc0\x1e\x84\x72\x6c\x63\xc9\x3d\x7f\xf7\x83\xd1\x7b\x91\x2c\xff\x65\xec\xa4\x43\x14\xc0\xf6\xa5\x30\x75\xf8\x99\xf8\x96\x0d\x30\xdc\x2c\xf9\xad\x33\xc4\x8a\x08\xf8\x1b\x0a\xd8\x1a\x23\x77\xe8\x02\xbe\xe5\x23\xa0\x2f\x12\xa8\x75\x42\x7f\x6d\xef\xe0\xa1\xc6\x5d\x7c\x03\x46\xe2\xd3\xbf\xff\x79\x99\x7e\x38\xe3\x55\xe2\xe2\xcc\x7b\xa3\x6c\x66\x6d\x2e\xb6\x4d\x03\xcd\x24\x29\x01\x41\xcc\x13\xf2\xbd\x73\x18\x33\xe7\x03\x79\x5e\xa4\xee\xcb\xf5\x6d\x45\x5a\xc4\x9f\x73\x2d\x92\x37\x38\xd4\x5d\xdf\xd7\xf1\x0f\x44\x07\xef\xb9\x54\x7f\xc8\x69\xee\x1f\x6b\x42\x67\x91\xcd\x89\x38\x52\x39\x2f\x50\x2d\xf3\xf0\xc5\x51\x80\xac\x4e\x64\x5d\x06\x14\x62\x17\xf1\x26\x08\x5c\x4f\x03\xb1\xf1\x38\xb4\xc9\x19\xc0\x66\xbf\x01\x0f\xb4\xc3\x06\xd0\xa7\xa7\x30\xe5\x58\xe8\x3d\xcf\x81\x3f\x2d\x42\x9e\x6d\x20\xb7\xe5\x21\xbe\xf8\x96\xf8\x22\x4d\x98\x03\x88\x03\xe3\x66\xc1\x2c\x09\x20\x68\x1b\x6c\xfa\xba\x17\x6c\x24\x75\x13\x8e\xcf\xec\x99\x5b\x37\x4e\x9a\x5c\xbe\x45\x28\xd1\x09\x16\xf0\x50\xbd\x3e\xf6\xec\x67\xd3\x19\xc3\x44\xe6\xe7\xbe\xe6\xc9\xf8\xed\xdc\xba\xff\x6e\x4f\x31\x15\xe6\x78\x78\xdd\xff\x0f\x14\x09\x0f\x28\x24\xaf\xa1\xf8\xe6\x92\xaf\x1f\x92\x35\x04\xad\xfd\xc2\x08\x6b\x9d\x18\xe1\xd0\x81\x50\x7e\x13\xe1\x0f\x81\xe4\xd8\x03\x26\x60\x6f\x42\x33\x4e\x6b\xdb\x30\x15\xfc\x49\x78\x0d\x77\x1a\x2a\xb3\x5a\x28\x05\x23\x90\xe5\x13\xc8\xaf\x68\x26\xbf\x8d\x8c\x0d\x7a\xc9\xb4\xa8\x87\x11\xf8\x71\xe4\x12\xdb\x36\xe8\xc8\xc3\xf3\x50\x19\xe8\xd0\x33\x4c\x75\x93\x24\x9c\xd6\x0b\xb7\x31\xc2\x62\xf1\x62\x31\x6c\x37\x3e\x42\xee\xfe\x42\x3e\x74\x85\x8e\x53\x34\xf1\x7d\x9e\x80\x0b\xab\xc8\x22\x04\x78\xde\x03\x26\xb7\x5e\x13\xdf\xad\x49\x6c\xbd\x04\x75\xcf\x6f\x18\x7e\xa7\x01\xf1\xca\x86\x2c\x35\x05\x58\xea\x0f\xb5\x35\x2a\x26\x98\x62\xb8\x48\xfe\xf8\x73\x43\x76\x49\xab\xae\x24\xce\xe5\x87\x4f\xab\x0f\x1c\x7f\xc1\x22\xcc\xfe\x69\x97\x1e\x63\xb8\xdc\xd2\x90\x55\x50\xf3\x26\xc0\x44\x44\x1c\x60\xd7\x22\x72\xdb\x5c\x58\x04\x15\x06\x58\xf9\x09\xf8\xa7\x0c\x3a\x15\xe9\xc4\x62\x77\xb8\x31\xb9\xf0\x2b\xaf\xc9\xf7\xfa\x61\xaa\xcd\x13\xe8\x86\x01\x28\x2b\x7e\x40\x0e\xeb\xa1\x44\x3b\x81\xa5\xcc\x42\x8d\xe6\x04\xe4\x28\x0e\xe8\x8d\x4f\xd4\x82\x90\x1b\x12\xd1\xdd\x62\x27\x79\x0f\x33\x88\xa8\x3c\x10\x74\xce\xb1\x8e\x39\xb9\xe4\xb7\xce\xfb\x56\xa9\x5f\x2d\x1b\x3a\x93\xd5\x8d\x97\x86\x2b\x22\x16\xba\x50\x1f\x90\xed\x1d\xf4\x6b\x90\x73\xb0\x9d\x34\x78\x5a\x7d\xb9\xbd\xf6\xf5\x97\xa9\x9a\x17\x8f\xaa\x17\x5e\xe9\x87\x55\x9e\xb6\xee\xe5\xe2\x72\xa2\x7c\x9a\xe3\x94\xe2\xf9\xaf\x3b\xf7\x37\x0d\x1c\x6b\x5d\xf8\x7c\x60\x8f\x7f\x40\x0c\x53\x42\xc7\xcb\x67\x9b\x0c\x24\xc2\x57\x05\x64\x4a\x2e\xbd\xc0\x47\x09\x90\x29\x0e\x50\xe0\x15\x4c\x87\xbe\x02\x0a\xb1\x11\x6c\x5b\x37\xf5\xf9\xea\xbd\x1b\xf7\xd9\x5c\xdf\xdc\x0b\x3f\x75\x2e\x5a\x9b\xcf\xd0\x62\xaf\xc8\x94\xea\xad\x10\x99\xce\x4f\xbe\x13\xb2\x9f\x22\x3b\xbf\xc5\xea\xfd\xbb\x3d\xc3\x08\xc2\x1e\x4e\x50\xd6\x5a\x21\xe5\x43\x20\xe5\xdf\x91\x5f\x33\x49\x2e\xb5\x22\xd7\x33\xd0\x22\x1f\x46\x38\xa1\xcc\x02\x87\xae\x82\x1e\xdd\x27\x88\xf1\x0b\x72\xf2\x00\xd4\x19\x1f\xc8\xaf\xeb\xa6\x45\x5d\x8c\xc0\xc2\x43\x56\x3e\x55\xe4\xd7\x7e\x40\xdf\xa1\x1e\xaa\xa3\x3a\xf8\x49\x2d\xd9\x89\xa0\xb5\x15\x98\x8a\x22\x01\xd6\x88\xc4\x01\xf2\x27\x43\x1f\xf7\x31\xb1\x9b\x25\x6c\x02\x20\x0d\x63\x51\x5a\x1b\x81\x11\x76\xe2\x70\x2e\xf0\x55\x3d\x70\xd1\x41\xe4\xe6\xd1\xf0\x07\x0f\xc6\x29\x27\x52\x0e\x90\xd6\x5b\xf5\x31\xc2\xf4\xa2\xc3\x1f\xf8\x56\xac\x2a\x30\xaf\x41\x68\x27\xbd\x80\x16\x78\x08\x8c\xda\x02\xb5\x51\x3b\xd2\x1a\x1a\x65\xb1\xf3\xcd\xe5\xd9\x03\xfb\xc4\x46\x8e\xf4\x5d\xf2\x8b\xb7\xd0\xac\x66\xef\x5c\xfe\x27\xdd\x6b\x56\xf7\xdb\xdb\xb1\xa5\x01\xca\x81\x30\x35\x02\xf3\x35\x0d\x55\x4c\x3e\x94\xcf\xcf\x40\xec\x7e\xc0\xad\xfc\x00\x99\x23\x0a\xc6\x26\xbc\xa4\x0f\x62\xa1\x9c\x46\x02\x59\x2c\x26\x97\x16\x92\x9b\x02\x01\x96\xae\x85\xe7\x8f\x2e\xc0\x1d\xf7\x84\x65\x18\x61\xc4\x42\x0f\x20\xb5\xe3\x50\x8d\x3d\x01\xce\xf1\x7b\xea\xcc\x5a\x99\xa8\xf6\xeb\x0a\xb7\xdd\x87\x3a\x1f\x4c\x8a\x35\xf2\x46\x3d\xd4\xfc\x62\xba\xe5\xa8\x31\x53\xa8\x90\xc5\x56\x1e\xf9\xbb\x37\x48\x14\x7f\x47\xee\xe6\x06\x08\x83\x81\x1d\x7d\x40\x9d\x5a\xeb\x08\x33\xb1\x10\x3f\x55\x1a\xb1\x90\x3f\x50\xc5\x7d\xf3\xdb\x2a\xa7\x0d\xc7\x16\xe2\xb7\xf5\xf6\x0f\xfd\x49\xb1\xdb\x1c\xea\x18\x4f\xd5\xb4\x15\x8d\x77\xd6\xb7\xb2\xbc\x5b\x70\x4f\x63\xcf\x87\xfd\x81\xac\x83\x95\xc9\x5b\x14\x52\x06\x24\x9e\xac\x8f\x68\x18\xf6\xe3\x35\xa7\x7c\x5a\x8e\x89\x43\x59\xfe\xda\xe7\xe8\xd5\xf9\x56\xcb\x1a\xf3\xb7\xc5\xa9\x58\xb5\x3a\x36\xb0\x37\x48\xdd\x0b\xcb\xb3\xe0\xee\xcb\xb1\x58\x32\xd4\x07\x81\x7e\xa2\x4e\xb0\xf6\x39\xed\xb0\xee\xb6\xcf\x0d\xb4\x1b\xb9\xbd\x6c\x81\x73\x12\xbd\x61\x19\xc5\x75\x67\xf5\x75\xff\xe3\xcf\x25\xb3\x0f\xb6\x3c\x92\x5d\x5a\xe0\x73\xa8\x1c\xdf\x53\x07\x34\x87\x0d\x67\x19\x8f\xb0\xb7\xca\x20\x11\xd2\xc2\xdb\xbc\xd7\x6f\x88\xbb\xd6\x23\xc4\x9f\x5c\x77\xc6\x39\xcd\x52\xcc\xe7\xc8\xe9\xb3\x4b\x74\x79\x0c\xe8\xf2\x16\x30\xcc\x0c\x39\xb5\x46\x8b\x53\x30\x02\x03\x8b\x18\xf9\x02\x3f\xe4\x69\x1f\xe8\xad\x84\x40\x0e\x79\x47\x7e\xed\x0e\xad\xcd\xc2\x54\x44\xc8\x65\x99\xf9\x50\xa0\xc7\xa1\x1a\xfa\x43\x3e\x86\x26\x97\x79\xd0\xda\x33\x8c\xc0\x83\x63\xe1\x21\xa5\xdd\x07\xc9\xdd\xca\x61\x3a\xda\x1f\xd8\xc9\x46\xf2\x81\x2d\xad\x3d\xc5\x54\x18\x58\xe1\xf4\x6a\x61\xac\xf2\x09\x6a\x97\x3a\xb8\xde\x5e\x06\xa8\xc1\x68\x6d\x3b\x46\x10\x2e\x21\xfb\x38\xe3\x70\xc1\xa9\x50\x52\x2a\xe0\x0f\x49\x50\xef\x46\x23\xd0\x03\xa1\xc5\x16\x98\x32\x72\x82\x34\x55\x1f\x48\xb7\x1e\xb2\xa7\x0f\x7f\x08\x21\xb7\x35\xa5\xc5\x26\x18\x81\xa7\x44\x11\x1e\x0a\x05\xc1\x89\x85\xc2\x5d\xf7\x23\x37\x40\x87\x9f\xe4\x72\x4c\x25\x93\x34\x59\xce\xd3\xbc\xfe\x0d\xa7\x55\x52\x0e\x62\x3f\xcc\x65\x3b\xef\xb2\x20\x85\xed\x09\xb6\xab\x5a\x18\x27\x99\x9d\x9e\x4f\xec\x3f\xae\x01\xc2\x97\x85\xa5\xd7\x41\x60\x98\xb2\x0f\x50\x0b\x29\xd4\x67\x14\x46\x56\x51\xd3\x4e\xd9\xfe\x57\xa6\xbb\xae\x72\xc8\x9c\xdf\xb7\x42\x2f\xff\x60\x47\x8e\x31\xdf\xa9\x69\x85\xc9\xd2\xdd\x8a\xdf\xd0\xa5\xef\xfe\x00\x92\x3d\x01\x53\x4a\x18\xd0\x3b\xdf\xa9\x4b\x25\xdd\x8b\xef\x3a\x27\xec\x43\xc5\xaa\xb9\x8d\xd2\x64\x03\xab\x05\x24\x7a\xc2\xcb\xe3\x56\xef\xb9\xf5\xd9\xa1\x78\x58\x3f\x4c\x33\x88\x74\x90\x0d\x0c\xfe\x24\xf4\x52\x9c\x81\x55\x2e\x06\x1a\xaa\x1b\xc6\x69\x49\xf0\x87\x61\xc8\x4d\x28\xf8\xca\x00\x24\x84\x33\xdc\xce\x62\xea\x4b\xc6\xa6\x11\xdf\xc6\x8d\xd2\x5f\xc6\xde\xdf\xf4\x84\x63\x7d\x4a\xc9\x8e\x6c\x57\x74\xf9\x94\xa6\x80\x7e\x73\xdb\xf5\x5b\x32\x8b\x5a\xed\x54\x75\x22\x15\xca\xa3\xf1\xdf\x5a\xb9\x86\x84\x12\xd6\x84\xf0\xdb\xa8\x39\x4b\xe8\x16\x66\x8d\x3c\x54\x7d\xef\xc2\xe8\xf6\x4f\xb7\xfb\x66\x52\x6a\x05\xa8\xff\x36\xa0\x2f\xbf\x92\xdb\xdd\x43\x7e\x1c\x87\xf7\xbe\xcf\x00\xe2\xc0\xd9\xde\x07\xc4\xa9\x85\x79\xb1\x74\xe0\x81\xbd\x83\x4e\x64\x09\xb1\x13\x10\x70\x97\x46\x61\xa9\x8b\x1f\xd0\xbe\x0d\x40\x41\xbc\x87\x9b\xef\x47\xee\xd0\x41\xbd\x59\x1d\x3e\xd7\xaa\x3d\xc3\x97\x69\xb1\x67\xb6\xd5\xae\xdc\x2b\xec\x73\xac\xca\xcc\xd2\xa7\xf6\x46\x50\xd5\x71\x16\x43\xf1\x0f\x85\x29\xa4\x38\x15\xde\x40\x4a\x04\xe0\x05\xd0\xbc\x3c\x03\x64\x2c\xa1\x26\x9a\xc3\xc4\xc6\x17\x8f\xae\x84\xcb\x6e\x91\x3b\x2a\x63\x28\xfe\x73\xe4\x71\x84\x79\x5b\x6a\xa7\x52\xf4\xc5\xcb\x9b\x53\x7b\xd6\x14\xaf\xa6\xf2\x8b\x66\x3c\xb3\x1e\xfa\x7d\xe9\x5a\xaf\x6c\xa4\xbf\x4a\xfe\x41\xaf\xf0\x25\xf1\xf5\xef\x19\xb6\xee\xb1\x30\x39\x60\xb4\x66\x46\xae\x78\xc9\xd5\x5a\x3f\x85\x29\xa7\x83\x55\xb6\x92\x0f\x30\x69\xb1\x19\xa6\x22\xcc\x08\xd3\x73\x59\xe4\x24\x35\xdc\xea\x38\x98\xf0\xa9\x21\x9f\x26\xd0\xe2\x36\x8c\xc0\xc2\xc8\x00\x2f\xb8\x8d\xc2\xbd\xab\x86\x3f\x44\x43\x2e\x1b\x61\x9f\xba\xf6\xef\xd8\x07\x23\x94\xf0\xc4\x32\x93\x7a\xbc\x57\x42\xd9\x8f\x83\x72\x19\x07\xf5\xd5\x0b\xf8\xa7\x17\x10\x2c\x8a\x6c\x8b\xc1\xfe\x17\x90\x6f\x4d\xd3\x62\x41\x60\x08\xc8\x05\xfa\xbe\x50\x31\xa2\x50\x12\x7c\xe0\xf8\xa3\xe4\x6b\x7f\xb4\x18\x04\x23\x1c\x66\x24\x77\x9b\x29\x80\x7a\xbb\x0b\xd2\x39\x03\x4e\xbd\x9d\xec\xd1\xd1\xe2\x0f\x4c\x85\x11\x83\x77\xa5\x7c\x20\x09\xa6\x21\x07\x77\xc3\x29\xce\x70\xc0\xce\x50\xb4\x58\x08\x53\x16\x86\x86\x25\x87\x2c\x08\x30\x74\xaa\x01\x2e\x52\x2f\xe3\x94\x3e\xe9\x48\xe9\xd0\xf6\x15\x67\xc5\xe5\x2b\xce\x34\x7c\x29\xf5\x64\xb7\xda\xbf\x6e\x7b\x88\xb1\xac\xed\xf1\xe1\xde\x8e\x32\xb9\xa8\xf6\xd5\xf9\xee\xa8\x32\xce\x9c\x01\xa7\x88\xc3\xfd\xc5\xc3\xfc\x0b\x97\x1a\x8c\x1f\x3f\xb6\xe4\x90\xdd\xa7\xbe\xd7\x2f\xe1\x08\xba\x75\xa2\xee\xc1\x29\xa7\x13\x01\x51\xb6\x2d\x2c\x5a\x5e\x1c\xfc\x0c\x5a\x38\xb6\x8b\x16\x97\x25\x24\x25\x2c\xae\x58\xdc\xfc\xff\x3f\x19\x2d\x7d\xbf\x27\x6c\xa0\x8d\x45\x68\xaf\x73\xca\x0b\x8d\x60\xc6\xd0\x55\xdb\x8e\x1a\x97\x88\xd8\x8f\x36\x9d\x3e\xa2\x70\xc6\xf3\x5c\x44\x4f\xbc\xf3\x5f\x58\x5f\x36\x72\x4b\x7f\x75\x3f\xed\xac\xf4\xbc\xab\xf0\xf6\x6c\x7b\xcb\xa9\x02\x53\x91\x1c\x93\xb0\x87\x57\xe6\xae\x45\x3d\x91\x2e\x46\xf0\xc8\xf0\xa5\x9b\xa6\x37\x6e\x5e\x31\x05\xff\x17\x30\xff\xbb\x6f\x61\x04\xf1\xc7\xea\x2d\x7e\x44\xda\x68\x31\xf0\x2c\xbf\x75\x83\x3f\x6d\xff\x75\x14\xff\xc1\xf4\x45\x93\xcd\xc5\x75\x3f\x36\xaa\xf0\x5f\x22\xfe\x51\x47\x12\xb9\xff\x6e\xe6\xb5\x7a\xd5\x56\x76\x0b\x81\xd4\x14\xeb\x73\x77\x3d\x9d\x0c\x8b\xb8\x4f\x66\x6c\xa8\x08\x41\xea\x8a\x08\xa1\x16\xbb\x46\xf9\x43\x3e\xad\xdb\x8e\x5b\x81\x0c\x4e\xd7\xfa\x9d\x51\x34\xe0\xbf\xbc\x34\x2c\xa3\xed\x8e\xef\x87\xf3\x09\xc1\x3e\xb1\x1b\x5e\xcb\xee\xfd\xf2\x7e\x79\xb2\x96\xcd\x19\x3c\xf2\x8d\xb8\x0f\x5a\x0c\x46\x8f\xbb\x9e\xbe\xef\x3b\xf8\xaa\x32\x6f\xb1\x5b\x2d\xa7\x8d\x7d\xa7\xd1\xf4\x4b\xfe\xeb\x98\x16\x43\x4c\xa9\x54\xb3\xdb\xdd\xe3\x9e\x92\x07\xec\xa6\xef\x5d\x6e\x12\xb5\xc6\x9b\x45\xf0\x5b\x91\xa6\x1a\xd2\x60\x17\x65\xfd\xbe\x20\xfd\x53\xe4\x95\x9b\xf7\x5d\xbf\x8d\xbb\xec\x97\x38\xc2\x7f\x0d\x4e\x15\xd5\xdc\xf6\x20\x65\x73\xf4\x61\xde\xe1\xd1\x5d\xbc\x67\xbe\x3e\x44\xda\x6d\x73\x85\x96\xa7\xc4\x64\x2e\x3e\x5a\x53\xa4\x88\x3b\xd5\xb3\xba\x03\x15\x67\x4d\x32\x90\xf0\xc7\xef\x15\xaa\x9e\xfb\xc2\x7f\x91\x34\xd5\x73\xa5\xd6\x89\x2d\x3b\x7c\x9f\x19\x5a\xa6\xaa\xa4\xfe\x09\xe0\x9f\x74\xd4\xb8\x8b\x47\x96\x8a\x35\x75\x24\x91\x24\xd3\xbe\x05\xa3\xdd\x84\xa9\xce\xa2\xd1\xb8\x97\xc1\xdb\x59\x56\x72\xac\x5b\x64\xe7\x89\x28\x4a\x29\xb3\x2c\x4c\x64\xe9\x16\xe1\xb4\x79\x2a\xa9\xb2\x3d\x77\x7f\x5c\xc1\xb5\xd8\xde\x63\xf8\x5d\xfc\x17\xc0\xb7\xf2\xec\x2a\xea\xf3\x8b\xee\xd5\xea\xbf\xba\xc3\x38\x51\x7d\x75\x94\xe7\xb3\xcc\xc5\xcc\x55\x2d\x2a\x43\x0e\x1a\x25\x76\x75\xdc\x61\x43\x7a\x82\x5b\xd6\xc8\x9c\xd4\xe3\x9e\x34\x75\x70\xdf\xda\x5e\xcb\x6f\x4a\x5a\xe4\xf5\xab\xda\x37\x77\xf9\x6c\x18\x1d\xe0\x13\xf5\xb4\x1d\xff\xb2\x7a\x9d\x8e\x1d\x2b\xff\x15\x12\xdd\x8c\x37\xac\x1b\x62\x4d\x7a\x24\xa7\xc9\xc0\xa0\x53\xb0\x56\xd7\x8e\xb9\x68\xf9\x25\x7e\x73\x4c\x8b\x51\x7e\x19\xdf\xaa\x2e\xb3\xf6\x6d\x27\x7d\x2a\xd7\x64\x69\x5e\x8f\xdf\x1d\x2f\x8d\xe0\x91\x41\xd2\x98\x2b\x90\x22\x7c\xc6\x9a\xd8\x14\x3f\x47\xeb\x31\x6b\x23\xed\x9a\x8d\xc1\x6e\x23\xfc\x66\x90\x70\xb1\xf5\xdf\x62\xf4\xf3\x1d\xf9\xf3\xde\x06\xff\xbc\x50\xb8\x15\xcf\xba\x58\x9a\x1e\x73\x4d\xb6\x6c\x4f\xf3\x5c\x46\xf6\x62\xf0\xb4\xdd\x4a\x2b\xeb\xb0\x9f\x37\x23\xf4\x7b\x32\xe6\x9f\xfb\x30\xe5\xf1\x5b\x92\x66\xc3\x76\xd3\xa2\xe6\xdc\xf6\x5d\xad\xf7\x57\xe4\xe9\x47\x45\x19\x95\x69\x7f\xe2\xee\xe6\xb7\xc6\xb4\x18\x2e\x87\xdb\x4a\xf8\xf3\xe6\xcf\xd8\x7f\x5e\xfb\xd3\xcd\xaa\x39\xff\x7b\x51\x07\x81\xff\x2a\x69\x32\xb7\x2e\x35\xed\x61\x67\xe9\x3f\xd1\x75\x4e\xed\xcd\xab\x42\x9d\x2c\xcd\x23\xc2\xaf\xf8\x2d\x48\xfe\x4e\xac\xe5\xa4\xb8\x09\x3b\x47\x2a\x5b\xf3\xae\xdf\x7e\x76\x7c\x67\x6f\x2e\x17\x2f\x92\xc9\xf1\x8f\x4e\x61\x98\xd5\xad\x71\xae\xcd\x40\xff\xc3\x86\x28\x90\xf2\x4f\x25\x4d\xd1\x17\xa4\x2a\x45\x0a\xe4\x77\x7f\x3f\x74\xf6\x0d\x4b\xc4\xc0\x27\x31\x06\x23\x7c\x5b\xc7\x65\xc6\x47\x97\x1f\x17\x97\xa2\xff\x37\x79\x49\x13\x3b\xd5\x54\xbf\xee\xc7\xdc\xce\x11\x0b\x85\x6b\xcc\xe3\xc7\x87\x37\x86\x5e\xbc\x67\xb5\xee\x66\x12\xe3\xcb\xf2\x4b\x66\xfb\x13\xeb\xe5\xc0\xc4\x52\x18\x9b\xfe\xc1\x5e\xba\x28\xec\x08\xdd\xf3\x1a\x77\x9c\xf5\xf2\xac\x9e\xb9\x54\x9e\xc7\xdc\x23\xbf\x8c\x47\xd5\x82\x5c\x7c\x39\x61\xb3\x7b\xaf\x9c\xd6\x7a\xae\xf1\x2a\x26\x54\xe0\x96\x9f\x6d\x08\x69\xe8\x89\xd6\x8f\xab\x6e\x6d\x42\x1d\xe5\x9c\x1e\xb0\x88\x9d\x3d\xa6\x6c\xb7\xeb\xae\x52\xc0\xce\x90\x76\xc1\x9d\x0a\xfa\x4f\xbf\x98\x3a\xa1\xff\x81\xb9\x49\x43\x0b\x14\x38\xe9\xf5\xc5\xf4\x6d\x61\x7d\x18\x7e\x77\x7b\xd0\x43\xd6\xae\xe7\x2e\x26\xec\x6d\x87\x55\x4f\xd5\x8e\x07\xef\xf7\x3d\xf8\x08\xfd\x0f\xdb\x4f\x22\xa7\x1f\x41\xc7\x25\xe4\x8e\xf7\xdb\x40\xc6\xeb\x32\x37\x59\x86\x2e\xab\xdc\xe6\xff\x29\x55\xd9\x9e\xd9\x71\x41\xa9\x36\x87\x1f\x6d\x43\xff\x6f\xfe\x10\x60\xd0\xc2\x71\x2c\x29\xc5\xeb\xa6\xb7\x8d\xaf\x5f\xf8\xfb\xe7\x7b\x24\x15\xbb\x49\x5b\x70\xe2\x74\x02\xd7\x8a\x89\xda\x09\xce\xbe\x55\xad\xb8\x6f\xcb\x56\x77\xdc\xd4\xbb\x39\x30\xdb\xb7\xf2\xea\x99\xc6\xf3\x9e\x8a\x8a\x38\x35\x1c\x0f\x6e\xe9\x3f\x75\x1c\xc3\xf4\x91\xc4\xbd\xd7\x98\x5a\x82\x31\x9d\xb5\xe0\x97\xc7\x91\x77\x3e\xa6\xa9\xe2\xa8\xfe\xd3\x66\xc0\x87\x5d\xca\xd9\x4e\xfd\xb1\x1a\x8e\x7b\x71\xe9\x3f\x9c\xe2\x00\xe3\xd2\x04\x64\x6d\x7a\x5e\x77\x59\x66\x33\xdc\x32\xed\x2c\x62\x40\x4c\x3e\xbc\x27\xf4\xa7\xfc\xb0\x1d\xdb\x98\xfc\x8e\x89\x67\xa0\x98\xb7\xc2\xf7\xef\x3b\x9d\x37\x1e\x5d\x8d\xdc\xff\xd0\x6d\xdb\xfd\x4b\xd5\xac\x53\x04\xff\xdf\x56\x3d\xd5\x77\x7d\x70\x57\xa5\x7c\x9f\xc8\x7d\x67\x35\xf1\x56\x54\xfc\xfb\x32\x13\xff\xdd\x73\xf6\xd5\x4a\x33\xef\x6d\x5f\x7a\x4d\xfb\x39\x44\xcb\x78\x6e\xc5\xae\x34\xb8\x9f\x68\xd1\x7b\xd0\x36\xff\xe1\xb2\xe4\x11\x1c\x43\xac\x96\x79\x2c\x71\x62\x74\xd8\x9c\xbf\x1e\x3d\x2f\x6d\x93\xdb\xaa\x9a\x34\x8d\xf6\x64\xe2\x6b\x12\x98\x3e\x74\x59\x18\x1d\x19\xc8\x9e\x0a\x98\x46\x1a\xa2\xcc\x19\x4f\x6c\xf8\xeb\xd1\xf1\xb3\x25\xf9\xe5\xf1\xbb\x5d\x05\x0f\xdb\x3e\xeb\x39\x99\x12\x31\x3c\x8e\x76\x4a\xb6\xab\x54\x4b\x5f\x58\x2b\x36\xb9\xa5\xaf\xe3\xaf\x47\xc7\xfc\x53\x37\x71\xc4\x9c\xce\x1c\xcf\x48\x69\x1a\x37\x54\x51\xdf\x90\x25\x32\xca\x6b\x33\xe3\x6a\x69\xe6\x1c\xb9\x61\x67\xbb\x30\x7f\xe4\xdf\xd3\x2d\xa8\xda\xed\x58\x2e\x32\xd7\x75\xfd\xdd\xfa\x48\x46\x01\xcb\x6b\xeb\xa4\xbc\x24\xeb\x38\xb4\x54\xcf\x70\x35\xad\x2a\x39\xa1\x22\xab\x68\xfa\xef\x48\xe7\xa9\x8c\x33\x55\xc6\x99\x3a\x4d\xe9\x6c\xc2\x6d\x64\x61\xe0\x15\x72\x64\x3f\x16\xfe\x08\xe1\xd7\xb9\x5a\xcc\xb7\xbc\xdb\x86\x79\xc5\xf9\xba\x4e\x5d\xad\x43\x01\xb5\x49\xb9\x36\xc3\xe3\x27\x6a\x6f\x39\x21\xeb\x70\x38\x1c\x0b\xa0\x1e\x9e\x75\xbb\xee\xbf\xa3\x88\x33\x13\x83\xb3\x12\x13\xfa\xd7\xfc\xd7\x18\xce\x5b\x6c\xd1\x3f\xb3\xbd\xf2\xe0\x90\x89\xdc\x8f\xeb\xfd\x3b\x43\xb7\x5d\x3e\xb9\x21\xd1\x64\xf7\xfd\xa0\xcf\xaf\xfb\xd7\x2d\x77\xd2\xfe\x77\xcf\x39\x2b\xb1\xfc\x3d\x2c\x87\xe3\x2e\x7b\xbd\xb4\xf5\x71\x79\x84\xde\x6f\xa5\xdc\x1e\x57\x4f\xdc\xee\xbf\xfa\xc3\xd9\xee\x90\x88\xe2\x85\xc4\xb1\xf2\x0f\x0b\x70\x58\x5a\xcf\x39\x2b\x09\xfd\x3d\xec\x43\xb1\x87\x7f\x4c\x8e\x69\x3e\x5c\x31\xa1\x36\x27\xf1\x5e\x98\xa1\xcb\xa5\xc9\xc2\x20\x6f\x22\xdb\xab\x37\x31\xcb\xcf\xa8\x50\x1b\x0e\x4b\xeb\x39\x67\x25\x86\xbf\x87\x3d\x39\x69\xb4\xe0\x52\x28\xe9\xaf\xb1\xba\x7e\x21\xcd\x2a\x63\xea\x67\x47\xb7\x8f\xe3\x56\x0e\x05\xc7\xb2\x27\xb7\xb7\x4e\x1f\x78\xe8\xb4\xe3\xdf\x3d\xe7\xac\xa4\xe8\x84\x2a\x33\xbd\x71\x63\xf8\x77\xac\xe4\x8c\xe0\x11\x9c\xb3\x12\x82\xfd\x35\x97\xfb\xe6\xb8\x07\xbf\x4e\x34\x57\xe7\x44\xb9\x8b\xff\x8c\x39\xa8\x72\xc5\xc6\x91\xf9\xf8\xb6\xcb\xc7\x32\x5c\x6f\x05\x6f\x5d\x89\xe6\xfe\x7d\x2a\xbb\xfd\xdd\xc0\xb5\xc8\xd0\xf8\xe7\x53\x82\xf9\xb3\x3b\x76\x8d\xf2\x61\x69\x1d\x39\xbc\x5c\x53\x76\x23\xe6\xec\xfb\x74\x70\x61\x4e\xce\xc8\xbf\x1b\xd3\x59\x69\xd1\xe3\xef\x3a\x35\xd9\x7a\x86\xdf\x29\xe8\xa5\x66\x6e\x85\x8e\xe1\x9b\xf1\xbc\xd6\x5f\x6c\xa2\xe4\x7b\x8a\x2d\xbc\xec\x3b\x36\x1d\xd5\x94\x50\xfa\xeb\xd1\x63\x81\x97\xa4\xfc\x5f\x44\x79\x94\x33\xed\x62\x36\xb1\x09\xb6\xf8\x32\x99\x26\x73\xf7\xb0\x0c\xde\x6b\xbb\xe4\xce\x6a\xa1\x64\xb9\xbf\x7b\x46\x68\x6f\x5d\xd9\xb2\x4f\xb6\x67\xe6\x01\x47\x2b\x77\x6e\xc9\x71\x3d\xa9\x1d\xc5\x7f\xd6\x84\x7f\xdf\x75\xa8\x24\xbf\x5b\x6a\xdf\xc6\xbf\xfb\x39\x1c\xac\x71\xb9\xbd\xbc\xfb\xc2\x88\xb0\xf2\xdb\xd2\x99\x6b\x5b\x5d\x5b\x7d\xeb\xbc\x04\xcf\x8e\x7d\xde\x23\xe3\x60\x2f\xbe\x57\xf5\xaf\x47\x79\x37\x3b\x1d\xd8\x2d\x36\xf7\x33\xa3\x5c\x55\xca\xba\x96\x5f\xfa\xe2\x0b\xf9\x61\xf7\xb9\xe0\x8f\xbd\x22\x36\x0c\x76\x5d\x57\xd6\xfc\xf5\xe8\xcd\x16\x91\xe2\xc2\xdb\x49\xc7\x1c\x9c\x2c\xc7\x72\x26\x1e\xfe\xb8\x27\xd2\xf8\x58\xc1\xa4\xe8\x98\xf2\xf5\x15\x6a\xb7\xde\x2e\x8f\xfa\x3b\xd4\xbb\x2e\xb8\xc2\xaa\xa6\x7b\xb6\x8b\xcb\xaf\x7b\xbe\xf3\x8b\xcb\xe2\x9e\x23\x67\x3d\x6d\xef\x79\xcb\xef\x66\x99\x08\x3c\x38\x9f\xf4\xf7\x75\x11\xae\x75\x55\x6d\xc6\xcc\xc3\xea\x8c\xea\x6d\x6b\x35\xd4\xbd\x54\x37\x3d\x5d\xfd\xa3\x66\xdd\xee\xc4\xe5\xa7\xd8\xb6\xe7\x26\xb3\x91\x37\x81\x16\x55\xa9\x36\xe1\x92\x28\xf3\xdd\xe9\xe8\xd1\xc0\xb3\x05\x65\x12\x0c\x7f\xc4\xfc\x1a\xfa\x7d\x70\x5a\x73\x11\x1f\x04\x1a\x23\xa5\x94\xfe\xf0\xff\xad\x83\xd2\x0b\xae\xb5\x48\xe4\x17\x1c\x2b\x0f\x1f\xec\xb3\xb6\x7e\xe6\x26\x2a\xa2\x7e\xf4\x40\xe2\x7b\xb3\xdd\x13\x8b\x7a\x7e\x87\x9e\xfd\x3d\xdb\xb2\x0c\x9b\x3b\x53\x4f\x99\xd7\xda\x7d\xb7\x62\xd9\x9d\xa2\x79\xa7\x2d\x7a\x32\xfa\x80\x20\x93\x41\xd9\xa2\xe1\xc6\xc0\x11\x83\xbf\xc9\x15\xe5\xc9\x72\xcb\x7b\xce\x2d\xe1\xf2\x21\x43\x9b\x1c\xd9\x23\x2e\xba\xf1\xca\xc1\x32\x56\xeb\xf7\x29\x8e\xe5\x65\xdf\xbd\xe7\xfc\xf6\xaf\x47\x2f\x46\x5d\x24\x6c\x3d\xc4\xdd\x6d\xfe\x20\x7a\xbd\x42\x5b\x4a\x5f\x9d\x5d\x48\x56\xd5\xf1\xd2\x53\x47\xd3\xd1\x73\x56\xae\xf5\x77\xff\x7a\x14\xcf\x6b\x2a\x7b\x27\xda\x5d\xd1\xfc\x36\x4e\x26\x5b\x8b\x8b\xd1\x2e\xba\x7c\xe0\xf2\x54\x72\x43\xd5\x0f\xdb\x48\xbe\xe0\x9d\x7f\xb3\x37\xfb\xbb\x99\x48\xcf\x1d\x3d\x3b\x91\xef\x2a\xfa\x15\x9f\xde\x3f\xe6\xdf\xf1\x56\xef\x1f\xd5\xac\xd3\x0e\x0f\x3b\xd3\xdb\x8b\x5a\x4d\xff\x7a\x54\x46\x94\x57\xa2\x6f\x44\xd4\xef\x53\x5c\x4e\xb5\x91\x86\x1e\x53\xf8\xc6\x54\x36\xd3\xcf\xce\x6b\x3d\x6f\x7e\x88\x3a\x2a\xfc\xf9\x88\x53\xc1\xb2\x7f\x47\x55\x67\xa5\x45\x27\x0f\x6f\x1c\xd2\xbe\x45\x47\x1c\xc7\x80\xf5\x21\xe8\x20\xa3\xd0\x6a\xd1\xc0\xe5\xdd\x33\x67\xd4\x16\xb9\xdf\x07\x2b\xda\x04\xcd\x1b\x7f\xd6\xb5\xb9\xc9\xf0\x2a\x75\x42\x50\xc5\x58\xf9\xbd\xf9\x4e\x14\x8f\xe0\x70\x6b\x71\x6b\xd2\x74\x15\x0f\xe3\x5e\x61\x35\x4b\xa6\xd6\xab\x5a\xb8\x77\xe9\xa7\x1b\xd1\xac\xbb\x22\xaf\x56\x6e\x54\xc3\x8d\xc5\xef\x5c\x35\x31\x1d\x95\xe1\xcd\x40\x89\x50\xb0\xd1\xab\xfc\xf1\xd5\xc3\x1b\xad\xbf\x8d\x6d\x5c\xf7\xc9\xf8\xf3\x48\xd0\x72\xb9\xe8\xb5\xdf\x56\x8c\x94\x1e\x8c\x57\x5c\x5e\x7e\x01\xc5\x23\x0c\x74\x22\x30\x52\x22\xb0\x3c\x56\x2f\x8f\x0b\xe9\xa8\x5f\xdd\xaf\xdb\x14\x2c\xd0\x77\x70\x8c\x7f\xf4\x5b\xa9\x81\xd6\x76\x53\x2b\xaf\x23\x3c\x22\x8a\x67\x50\x3c\xc2\x48\x27\x02\x42\x89\xc0\xfa\x63\x5f\x67\x3e\xee\x86\x06\xd3\x95\xdc\xc3\x35\xae\x63\x4c\xe7\x8f\x0b\x19\xf0\x1d\x78\x77\x01\xcd\x6a\x2a\x95\xbc\xcf\x7f\x09\xc5\x23\x08\x9d\x08\x4c\x94\x08\xc2\xd6\xfd\xf3\xf2\xaa\x27\x87\x75\x59\xcb\x3a\xcf\x5e\x7f\x10\x7f\xd8\x2a\xde\x71\xee\x29\x67\xe2\x41\x0e\xfc\x46\xbb\x30\x13\x01\x14\x8f\x30\xd1\x89\xc0\x4c\x89\xb0\xd2\x6e\xfb\x85\x06\x63\x86\x8e\xfa\xc1\x78\xae\x1f\x9f\x78\xe6\xac\x1b\xdf\xcf\xdb\xea\x9f\x3d\x70\x97\xa3\x83\xbd\xf0\xcf\x85\x1b\x28\x1e\x61\xa6\x13\x61\x19\x25\xc2\xc3\xc7\xf8\x98\xb2\x21\xe3\xf0\x18\xe7\xb2\xde\x5f\x2c\xc3\x1b\x5a\xbe\xe0\x7c\xf8\xe2\xfc\x42\x35\x94\x39\xb5\xf2\x37\x1f\xd7\x46\xf1\xc8\x32\x3a\x11\x96\x53\x22\x6c\xcc\x9b\x36\x36\xac\x7c\xe0\xa0\xab\xea\x52\xbe\x51\xb4\x7a\x96\xb7\xdd\x79\x5f\x4b\x6a\x1f\xe3\xd5\x2a\x1d\xdf\xca\x60\x0f\x69\x14\x8f\x2c\xa7\x0f\x01\x0a\x0f\x2d\x3d\xb3\x24\x3c\x2c\x94\xd3\xa9\x4b\xaa\x96\xbe\xaa\x7e\xe4\xb4\x77\x96\xed\xde\x97\xb2\xed\x33\x9b\x7a\xcf\x95\xdd\xdf\x12\x95\xb2\x96\xb3\xf3\x50\x3c\x82\x9d\x43\xf1\x08\x0b\x9d\x0b\x66\xa5\x44\xd0\x70\x17\xb5\xd8\xa4\xee\x9b\x67\x97\x75\xef\xfb\x95\x17\xaa\x2c\xbe\x4c\x96\x55\x76\x59\x1f\x06\x53\xd8\xa3\xce\x69\x7e\xec\x97\x42\xf1\x08\x2b\x9d\x08\x6c\x94\x08\x2d\x6b\xd8\x6b\x13\x59\xf0\xbf\x3c\x7f\xa9\x1c\xde\xd1\xf0\x6c\x8c\xaf\x3e\xa2\xce\xe2\x46\xa4\x79\xe0\xd0\xb6\x37\x16\x53\xae\xcc\x28\x1e\x61\xa3\x13\x81\x9d\x12\xe1\x1f\xed\x2c\x81\xb0\x15\x82\x76\xc7\x05\xdc\x73\xc7\xfd\x05\x0a\xf7\xb8\x3c\xf4\x48\x62\x71\x2c\xd6\xd2\x8f\x1e\x3d\xf9\x4c\x5e\x13\xc5\x23\xec\x74\x22\x70\x50\x22\x4c\xca\x84\x9f\xfc\xfd\xfd\xf0\xc3\xae\x5f\x0d\xe1\x9e\x78\xfd\xc4\xe6\x6d\x09\x23\xc3\xdc\xe2\x8e\xe5\xa7\x7f\xdc\x60\x90\x5e\xab\x85\xe2\x11\x0e\x3a\x11\x38\x29\x11\xf4\xb4\xe2\xad\xaa\xca\xce\xaf\xbf\xab\xc0\x18\xfb\x8f\x28\xc7\xc9\x07\x9b\xf4\xb1\x51\x5d\x2e\x01\x5b\xde\x23\xd7\x6d\x3b\x05\x58\x51\x3c\xc2\x49\x27\x02\x17\x25\xc2\x81\xa2\xb2\x20\x81\xce\xba\x05\x63\xdb\xd7\xb3\x5b\x10\x3f\x89\xfa\xb3\x86\xc6\x73\xea\x49\x57\x06\x17\x47\x02\x76\x5f\x7f\x65\x80\xe2\x11\x2e\x3a\x11\xb8\xa9\xd6\xf0\x44\xc1\xf0\x2c\xaf\x5b\xd0\xdc\x3a\x36\xa6\xe7\x7b\x8e\x8b\xbe\xbb\x5f\x9b\xbd\x27\xc0\xeb\xad\xb7\x64\x5c\xdf\xaf\x95\x23\xe7\x51\x3c\xc2\xfd\xdf\x84\x87\x96\xe5\x5d\x12\x1e\x1e\xca\xe9\x4c\xf4\xc5\x66\x29\xdc\x2c\x58\xb3\xfd\xb6\x0a\xeb\xdb\x30\x6e\x5e\x7e\x5f\x8e\x02\x33\x0b\xe1\xa7\xa7\x84\xba\x9c\xa7\x7b\x9a\x01\x6b\xf3\xd0\xb9\xe0\x15\x94\x08\x1e\xb7\x33\x8f\x4d\x1a\x97\x70\x26\x87\x4a\x78\x3a\x3b\xdc\x7c\x79\x9b\x5f\x60\xa6\x37\x44\xe1\x6b\x94\xf1\x81\x15\x77\x98\x74\x99\x50\x3c\xb2\x82\x4e\x04\x5e\x4a\x84\xd7\x0e\xef\xce\x79\x7c\xb0\xe8\x6b\x30\xf6\x8c\x4c\x1a\x30\xfe\x38\x71\xc9\x68\xf5\xda\x33\x0d\x77\xae\x76\xb7\xfc\xaa\xfb\x78\x62\x3d\x8a\x47\x78\xe9\x44\x58\x49\x89\x90\xbd\xf1\xb5\xee\x78\x5f\xce\xf2\x3b\x03\xe7\x08\x99\xaa\x46\x3d\x46\x11\xa5\x77\x0e\xb3\x6a\x27\xae\x78\xaf\xe0\x22\x91\xd9\xbc\x12\xc5\x23\x2b\xe9\x44\xe0\xa3\x44\x98\x72\x9a\xf0\xcd\x4a\xd4\x4c\xdf\xba\xba\x70\x87\x41\xdd\xba\x57\x1d\x06\xd3\x31\xba\x61\xfb\x8b\x84\xdf\x3e\xac\x58\xa8\x5a\x04\x08\x7c\x74\x22\xac\xa2\x44\x70\xe2\x1c\x4b\x32\x3c\xee\x7e\x6a\xac\xcf\xd4\xce\xf2\xeb\xb3\x2f\xf1\x25\x17\x8d\x8a\xf7\x71\x12\x7a\x6f\x5c\xfc\xd6\xf2\x60\x1b\x60\xed\x55\x74\x22\xac\xa6\x44\x30\xc5\x17\xbb\xfc\xd3\x56\x7e\xfc\xce\xa7\x77\x21\x35\xfe\xf8\xdc\x3f\xea\xde\x09\xe2\x26\x3a\xf2\x56\x85\x5b\x8f\xa6\xfb\xbf\x31\x45\xf1\xc8\x6a\x3a\x11\xd6\x50\x22\xc4\xea\xf0\x65\x3b\xed\xea\x17\x7f\x2b\x38\x5a\x9d\xd5\xbd\x33\x52\x98\xcd\xa1\x7e\xe8\xd4\x96\x5b\x83\xe7\x57\x1d\xeb\x11\x5f\x7e\x1c\xc5\x23\x6b\xe8\x43\x28\x5f\xf6\xef\x7c\xd1\x25\xe1\xe1\xe7\xa7\x9c\x8f\x6d\x72\xda\x1b\x03\xa7\xdf\x89\x0f\x9b\x87\xfb\x15\x1b\x47\x37\xa9\xcb\x3f\xdc\x83\xad\xed\x8e\xfe\x50\x14\x90\x17\x9c\xa4\xb3\x07\xc5\x23\xfc\x74\xae\x98\x1f\x4f\x09\xd1\xb3\x56\x72\xfc\xca\xd4\xfc\x91\x76\x4d\xab\x46\x75\x99\xe1\x79\xc5\x09\xe6\xaf\xc2\x82\x62\x3c\xf2\x3d\xd9\xf5\x12\x27\x26\xb6\xa2\x78\x04\x4f\x2f\xc4\x5a\x4a\x88\xb4\xb4\xc4\x53\xaa\x3a\x93\x39\x3e\xef\x2a\x17\x44\x98\x25\x14\x1e\x98\x69\xe3\xad\x1b\x2e\x16\x7c\x10\x3a\x61\x75\xa0\x9a\x65\x1f\x8a\x47\xd6\xd2\x0b\xb1\x8e\x12\x22\x42\x76\xd3\x66\xab\xba\x17\xa3\x02\x0f\xc4\xf1\x96\x47\x36\xac\x5f\x1f\xf7\x44\x03\xed\xd9\xd0\xa7\x59\xc2\xe2\xbf\xce\x22\x07\x38\x56\xeb\xe8\x85\x10\xa0\x84\x08\x5f\x95\xbf\x5b\x6e\x5d\xe1\x59\xff\x6c\xc2\x0d\xbd\xbc\xd3\x2a\x5e\xdf\x44\x26\x78\x4c\xfb\xa3\x5c\x0f\xe9\x48\x2c\xfa\x0b\x5e\x46\xf1\x88\x00\xbd\x10\xff\x50\x42\xcc\x7b\x45\xbc\x13\xf9\xb2\x65\xdb\xb2\x5b\x0c\xcd\xf6\x3b\xb5\xee\xee\xb8\xfa\xc7\x36\xc7\x31\xf1\x9f\x0f\x6d\xcf\xad\x57\xc5\x88\xaa\xa3\x78\xe4\x1f\x7a\x21\x04\x29\x21\xce\x4d\x11\x92\x1f\xe6\x89\x16\x28\x94\x6c\x5c\x25\xc5\xda\x1f\xad\xb6\xdc\x94\x25\x3a\xc0\x33\x70\xe6\xbb\xf9\x63\x63\xe6\x42\x16\x14\x8f\x08\xd2\x0b\xb1\x9e\x12\xe2\x97\x67\xa9\xe5\x6c\x99\xfc\xb9\x7a\x3d\x3b\xd1\xec\xb3\x7b\x42\xc4\x0a\x23\xf9\x66\x5d\x74\x35\xb8\x6d\xe3\xfe\xb8\x6d\x93\x62\x40\xf1\xc8\xfa\xff\x26\x44\xb4\xa2\x34\x92\x10\x09\x51\xce\xe7\xa6\x11\xf3\x51\x8d\x03\x95\xdb\x6e\xf7\xbe\x58\x93\xd4\x24\x7d\xc2\x78\x70\xc7\xf6\x26\x67\x9b\xb1\xf7\x1f\xb6\x37\xeb\x7f\x7c\xb9\x1b\xc5\x23\x42\xf4\x2e\x79\x03\x95\xc7\xea\xec\xc9\x7f\x55\x74\x6a\xc6\x57\x7b\x81\x79\xf4\xda\xaf\xef\x87\x67\x78\x85\x6e\x14\x44\xd5\xaa\xa6\xe8\x9a\x88\x75\xb2\x5f\x41\xf1\xc8\x06\x7a\x21\x84\x29\x21\xb6\x30\xdd\xc8\x3b\xbc\xff\xb4\x7b\x00\x07\x5f\xf2\x45\x9b\x15\x7b\xf1\x41\x29\x85\x95\x57\xd4\x6e\xd9\x2d\x2e\xe2\x1c\x16\x55\x81\x7f\x25\x4c\x2f\x84\x08\x55\x74\xe2\xa6\xd6\x3d\x50\xae\xa5\xbd\x83\xab\x73\xf7\xf0\x36\xb5\x7e\xf7\xe3\x1a\x3e\x5f\xfa\x4f\xe7\xf5\xb4\x73\x7f\x28\x52\x93\x5e\x83\xe2\x11\x11\x7a\x21\x36\x52\x42\x68\xca\xbc\x73\xf6\x08\x4d\xaa\x78\xef\x73\x04\x4b\x65\x2f\x8f\x6a\x0b\xd0\xb2\xc4\x42\xb8\xb5\xa2\x7f\x2f\xeb\x6c\xfd\x61\x08\xd8\x6f\x23\xbd\x10\xa2\x94\x10\x23\x9d\xce\x73\x42\x8f\x2c\xaf\xa1\x1d\x63\xee\x93\x1c\xda\x83\x7d\x3c\x77\x32\x79\x9b\x37\xff\xee\x7f\xe3\xfe\x93\xfd\xb8\x20\x23\x8a\x47\x44\xe9\x85\xd8\x44\x09\x91\x54\xfc\x2c\x6c\xff\x36\xec\x40\xce\x4e\x66\x3f\x76\x4e\xa5\xa7\x04\xac\xbd\xf5\xa4\x21\x5b\xfc\x09\x65\x37\xdf\xe9\xf4\x1e\xa0\x0a\x36\xd1\x0b\xb1\x99\x12\x82\xb3\x62\x74\x77\xee\xaf\x0c\xcf\x18\x19\x77\x9e\x85\xc3\x27\x59\x27\xd6\x35\x1f\xd7\xbb\x91\x8e\x9e\x38\xa5\xb2\x6d\xdb\x70\xf5\x26\x14\x8f\x6c\xfe\x6f\x42\x44\x2b\x7f\x41\x12\x22\x31\xca\xf9\xf8\x6f\xd7\xdf\x13\x14\x5f\xed\xfe\xf2\x9e\xb0\x48\xd5\x64\xe3\xf9\xfb\x5f\x9b\xcd\x5a\x9f\xbe\x6c\xf5\x38\xb0\x27\xd7\x72\xab\x9a\x25\x8a\x47\xc4\xe8\x5d\xb2\x38\x25\x44\x7d\x1f\x9a\x3e\x14\x10\xba\xb1\x88\x29\xe3\xce\xfb\xd6\x28\x5f\xed\xb5\x32\xbf\xf8\x6f\x57\x06\x06\x95\x86\x16\xe9\x3a\xb7\x09\xa2\x78\x44\x9c\x5e\x88\x2d\x94\x10\xd1\xcb\xf5\xae\x79\x15\x72\x16\x29\xf4\xf7\x35\xf6\xa6\x07\x37\x45\x77\x9a\x84\xae\xda\x52\x89\x8e\xdd\xe1\xc9\x79\xa0\x52\x74\x18\xc5\x23\x5b\xe8\x85\xd8\x4a\x09\x71\xed\x44\xcb\xd3\x90\xef\x7b\x94\xec\x9d\xbb\x7e\xa4\x87\x96\x9b\x68\x0a\x27\x67\x45\xa6\xf6\xff\x62\x6c\xce\xb3\x76\x69\xea\xd1\x47\xf1\xc8\x56\x7a\x21\xb6\x51\x42\x7c\x93\x98\x19\x8f\xf6\xd8\xf3\x7d\xe2\xb8\xe0\x4c\x03\xbf\x87\xa2\xc4\x64\x21\x77\xff\x11\x7e\x6e\xd6\x8d\xdf\x3e\x38\x96\x0d\x01\x42\x6d\xa3\x17\x62\x3b\x25\x44\x3e\xe1\xbd\x9d\xcb\xd0\x6f\xa7\x67\xcb\xe3\x74\xae\xbf\x2e\xd5\xfd\xcc\xfe\x31\xf5\xb7\x79\xb4\x68\xc6\xd5\x0b\xa1\x06\xef\x44\x81\xc9\xde\x4e\x2f\xc4\x0e\x4a\x08\xb9\xd1\x3a\xbd\xe1\xc0\xc4\x3f\x8e\x82\x85\x82\xee\x2c\x33\x9a\x31\xd7\x3a\x0c\x55\x62\x6e\x78\xda\x66\xa4\x1b\xe8\x5c\x8b\xb1\x46\xf1\xc8\x0e\x7a\x21\x24\x28\x21\x2c\x37\xf3\x2b\xb1\xf6\x3f\xb0\x9b\x2f\x92\xb2\x41\x7a\x56\x39\x49\x0d\xee\x1f\x30\xf0\x60\x2f\xcf\x1a\x78\xda\xb8\xbd\xeb\x9a\x09\x8a\x47\x24\xfe\x9b\x10\xd1\xca\xec\x91\x84\x68\x27\xe5\x7c\x1e\xb3\x8f\x36\x1b\xbf\x70\xfd\xb0\xed\xe5\x3b\x71\x13\xeb\x92\xb5\x5e\x06\x9a\x2f\xf4\x09\xf8\x93\x29\x06\x2c\x5d\x15\xcb\xb6\xef\x45\xf1\xc8\x4e\x7a\x97\x2c\x49\xc5\x1b\x2d\x41\x0f\x5f\x87\xe0\x4c\x9a\x2a\x0f\x32\xb2\x46\x94\x62\xf1\x72\x9b\xbf\x6b\x3d\x9d\x56\x8e\xe7\x46\x37\x5d\xcd\x1b\x06\x7a\x43\x92\x5e\x08\x29\x2a\x7b\x9a\x19\x9a\x74\x15\xfd\x73\x2e\xd6\xaa\x79\xf3\x5e\x03\xeb\x56\x0d\xa3\x8c\x8e\x52\x9b\xa3\xeb\x7a\xa2\xd7\xd5\x26\xf7\x7f\x3d\x81\xe2\x11\x29\x7a\x21\x76\x51\x42\x58\x94\xec\xb9\x5e\xf2\x5a\x64\xf1\x6e\x9f\xfb\x57\xf3\x19\x8e\xb2\x64\x24\x7d\xe4\x52\x63\x4e\xe3\xc9\x1b\xaf\x65\xbe\x7d\x9c\x97\x40\xf1\xc8\x2e\x7a\x21\x76\x53\x42\xb8\x84\x8b\xbe\x3d\x2e\x78\xf4\xe2\xc5\x79\x8b\x82\xd7\x1e\x5a\x55\xa2\xe2\xa2\x87\x47\x7a\x25\xe2\xe6\x5d\x8e\xc8\xc8\x5d\x4a\x60\x46\xf1\xc8\x6e\x7a\x21\xa4\xa9\xa2\x3a\xc3\xc7\x52\xd3\x9d\x3b\x0c\x3d\xf4\x56\xbf\xcf\x0d\xdb\xa9\x7b\xe8\x86\xd5\x84\x9b\xf8\x42\xc4\x4c\x76\xec\x05\xc6\xb4\xf5\xab\x50\x3c\x22\x4d\x2f\x84\x0c\x15\x47\xdd\x70\x36\xf7\xe1\x19\x7a\xd0\x3a\xc4\x7f\x5a\x9a\x5f\xc2\xa8\xe0\x68\xfd\xee\xb6\x92\xa2\xcf\x0b\x6d\x63\xbd\x3d\x42\x32\xc0\x64\xcb\xd0\x0b\x21\x4b\x09\x21\x1e\x7b\x25\xee\xcf\x18\xab\xe9\xec\x6a\xd1\xf5\xf9\xc2\xf7\xbe\xcf\x7e\x95\xab\x79\xd6\x9a\xb2\x8b\xfd\x43\xce\xa5\xb4\x89\x6a\x60\x4f\x65\xff\x9b\x10\xd1\xca\x79\x93\x84\x48\x8e\x72\x3e\xc9\x51\xe1\x2f\xae\x0c\xd6\xcb\xae\x6e\xab\x93\x71\x7d\x77\x76\x94\xdb\x40\x63\xfd\x2a\x29\xce\xc0\x45\xfb\xf8\x33\x84\xa2\x23\xe2\x28\x1e\x91\xa3\x77\xc9\x7b\xa8\x52\x9c\xbc\x73\xb5\xab\x95\xbd\xea\x63\x05\x7d\x36\xaa\x75\xe7\xfd\x78\x5c\x2a\xb7\xe9\x00\xdb\x40\x11\xa2\xd9\x6a\x88\x4e\x9e\xbf\x8a\xe2\x91\x3d\xf4\x42\xec\xa5\x84\x38\xeb\x67\x24\xc6\x17\xd3\x16\x3f\xd3\x7b\x71\x6d\x4f\xc7\xe5\x48\x0b\x3f\x51\xd9\x6f\xb7\xf7\xc9\xec\xe7\xcd\x6e\x4b\x15\x5c\x75\x1a\xc5\x23\x7b\xe9\x85\x90\xa7\x84\x90\x1c\x60\x91\x0d\xbc\xe4\x16\xf1\x49\x7d\xbc\x97\xaf\xf3\x17\x93\xd6\xa0\x9a\x46\xa7\x92\xa7\x9b\xc2\x43\x3f\x9d\x23\x42\x43\xca\x28\x1e\x91\xa7\x17\x62\x1f\x25\x44\xd3\x99\x7f\x04\x37\xf8\x07\x14\xf5\x7f\xcc\x70\x38\xf7\xf0\x58\xfa\x98\xf4\xf0\x2e\xf5\x9f\xd2\x32\xcc\xd9\xa6\x75\xd7\xec\x4c\x15\x50\x3c\xb2\x8f\x5e\x08\x05\x4a\x88\xa7\xf7\xbf\xcd\xae\xd5\x8b\xde\xa4\x29\xe8\x9a\x3a\x30\x2c\xc8\x14\x28\xfe\x3b\x3f\xde\xae\x8e\x6f\xe8\xe8\xba\x71\x54\xc9\x97\x0d\xc5\x23\x0a\xf4\x42\xec\xa7\x84\xf8\xb4\x71\x2e\xb6\x36\x37\x54\x5d\x51\x7c\x97\x54\x5a\x8e\xb8\xf6\x0c\xfb\x9b\xd7\x79\xed\x4f\xda\xfd\x96\xc9\x0d\xaf\x79\xbe\x92\x15\xc5\x23\xfb\xe9\x85\x38\x40\x09\x71\x23\x67\x3f\xd7\x6e\xbe\x07\x1d\xab\xe6\x9e\xea\x1c\xd8\xaa\xd9\x3f\xf3\x42\xdb\x7d\xfc\x70\x9f\xa9\x38\x6b\xcb\x6d\x94\x47\x79\x2d\x8a\x47\x0e\xd0\x07\x01\x0f\xe5\x68\x9d\x5f\x52\x9f\x8c\x5e\x5b\xcf\xe4\xdd\xd8\xf1\x73\xf1\x92\xdb\x80\xc1\xca\xb1\xcd\x97\x58\x14\x1a\x7a\x0b\x7c\x12\xb7\x7b\x88\xdc\x92\x3b\xec\x2e\xfb\xd7\xa3\x3b\x8a\x5c\x04\xdc\xf5\x23\x13\x84\x7f\xd5\x0e\xb9\x84\x77\xb8\x1c\x3d\x70\xe6\x8a\xf3\xa7\x99\x74\x71\x2e\xbe\x1c\xbf\x9e\xdc\x6b\x7f\x9f\x6a\xcb\x0f\xf6\xc9\x0d\x4c\x38\x06\xec\xe3\x70\xfc\x68\x9e\x75\xb5\x2a\x4e\xde\xf2\xca\xe5\x4d\x5f\x1a\xf7\xe0\xf6\xb5\xa5\xc9\x1b\xfd\xf5\xa8\x62\x65\xc8\xb1\x84\xa0\xa6\xc1\xb5\xc3\x73\x95\x22\xd7\x9c\xfa\x0d\xbe\xd7\xa5\x31\xfa\x6f\x6f\x0a\x59\x5f\xa1\x58\xff\x31\x84\xe7\xef\x3e\xaf\x1f\xd8\xed\x43\x4c\xd4\x5d\x70\x1f\x47\x0a\x2d\x32\x5b\x27\x8f\xb5\x19\x95\x2d\x73\x9c\x52\xf9\xce\x36\x9c\xab\x2c\xfb\xee\xef\x52\x8d\x15\x27\x87\xf9\x5c\xe5\x8a\x22\x64\x96\xad\x7c\xa4\x29\x3f\x56\x3d\x9f\xc4\x66\x65\xc0\x75\x30\x74\x30\xcf\xc8\x3e\xd1\x21\x33\xfb\xef\x37\x32\x35\x9e\x6a\xfc\x92\xf3\x92\x2b\x44\xf6\x50\xbd\xd2\x8d\xb1\xc2\xfd\x5e\x03\xe7\x06\xd7\x49\xce\x27\x9f\x72\x7b\x91\xf2\x36\x89\xf3\xaf\x47\x53\xea\x57\xca\x72\x89\x0d\x1d\x74\xf4\x74\xb7\x6d\xcf\xd8\x69\xed\x2d\xcb\xb0\xbe\xac\x3e\x73\xeb\xe2\xa3\x5d\xbf\x87\xb4\x9f\xfe\x71\x82\x9a\x8c\x16\x55\x49\x9a\x4c\x91\x92\x29\x6a\xd5\xcc\x4e\x04\xad\x79\x2b\xe1\xb4\x2c\x54\xb2\x46\xd4\xe1\xcd\x6d\xcb\x4f\xfb\x57\xcf\x5c\x50\x1b\xf6\xae\x4f\xdf\xe7\xbc\xf9\x00\x8a\x47\x14\xe9\xe5\x3b\x25\x4a\x88\x9a\x9e\x8e\x3b\x6b\x07\xd7\x65\x7c\x30\x92\xc8\x53\x55\xe6\x8f\x90\xab\x8b\x36\xfa\x74\xcb\x3f\xf9\x2a\xcb\x3f\xe7\xc2\x26\xae\x5b\xa1\x78\x44\x89\x5e\x08\x65\x4a\x08\x65\xf3\x43\x19\xa7\x94\xe2\x99\x9f\xe7\xcc\x1b\xa4\x6f\x9a\xd0\xef\xc3\x97\xa4\xb0\x5f\xfd\xac\x7f\xae\xff\xd0\xcb\x96\x04\x4e\x35\x14\x8f\x28\xd3\x0b\xa1\x42\x09\xc1\x7f\x6b\x54\x5b\x40\x7a\xbf\xbf\xc6\x9b\x4f\x5d\xc3\x05\xca\xc7\x63\x9b\x74\xd6\x5c\xff\xf3\xb8\xe3\xf9\x49\xbf\x02\x8d\x9a\x75\x00\x42\x85\x5e\x08\x02\x25\x84\xaa\xe4\x19\xb9\x57\x2f\xbb\x05\xbd\x7e\x3c\x77\x48\x50\xb7\xaf\xbd\xc1\x74\xd6\xb6\x6a\xc3\x3b\x2f\xd5\x30\xff\xdc\xd1\xc8\xcd\x5a\x28\x1e\x21\xd0\x0b\xa1\x4a\x09\xd1\x5e\x77\x08\x63\x16\x7f\x75\xf8\xe2\xc9\x8a\x7e\x0e\xcd\xab\xc5\x79\xff\xb0\xc7\xa4\xb1\xb9\x1e\xd9\xbe\xf7\x80\x54\xde\x53\xfb\xeb\x28\x1e\x51\xa5\x17\xe2\x20\xd5\xe9\xdf\x05\x39\x8d\x1b\x5b\x31\x87\x92\xc5\xdb\x07\x0f\xbe\xb1\x3f\x74\xca\xf7\x7c\x85\xdd\x1a\xa5\x4f\xb8\x94\xf7\x55\x52\x0b\xd3\x22\x28\x1e\x39\x48\x2f\xc4\x21\x4a\x88\xaa\x17\x0b\x1a\x2f\xf7\x6a\x4f\x5e\x38\x26\x31\x34\xd2\xb8\x2c\x64\x3d\x4e\x51\x9a\xfb\x50\xab\xcd\x1f\x7b\x99\xa8\x84\xe4\xc7\x78\x14\x8f\x1c\xfa\x6f\xee\x00\x2d\x7d\x43\x12\xa2\xc3\x94\xf3\xd9\xff\x5a\xa0\xbf\x7e\xeb\x4c\x46\xa0\xd3\xa6\x94\xdd\xf7\x9a\xea\x9e\xa0\xed\xbf\xe5\xc2\x15\xc4\x73\xb7\x3d\x78\xb9\x70\x41\x44\x12\xc5\x23\x87\xe9\x5d\xb2\x1a\x25\x44\x9b\xd9\xe0\x8c\x2f\x23\x9b\xb0\x92\x55\x20\xdb\x01\x7f\x76\xa7\xc5\x70\xbb\x5f\x01\xcc\x97\xdf\x36\xd4\xdd\x95\x96\x92\x70\x02\x1b\xa7\x46\x2f\x84\x3a\x25\x04\x37\xe1\xa7\x70\xca\x41\xe9\xa9\x9d\x85\x7c\x8c\x1f\x5b\xa2\xb2\x2b\x44\xbc\xd4\x1e\xd4\x99\xcf\xa8\x56\x72\x94\xbf\xfa\xe1\xb3\x1d\xc5\x23\xea\xf4\x42\x1c\xa1\x84\x10\x53\x6e\x3c\xdd\x87\xf4\xee\x8b\x7f\xb9\xa9\x8f\xfd\xcc\x9a\xc0\xe1\xd3\xdd\xb6\x04\x69\x77\x01\x17\xf1\x8e\x82\xdf\xf5\x55\x97\x51\x3c\x72\x84\x5e\x88\xa3\x54\xa9\x17\x41\x53\x2b\x3e\xd9\xb8\x21\x11\x9e\xcb\x33\xfd\x25\xa2\xca\xd6\x92\xde\xce\xb2\x8b\x33\x6b\x45\x16\x3b\x25\x0c\xa4\xf8\xcf\xa1\x78\xe4\x28\xbd\x10\xc7\xa8\xfc\xa6\xe9\x75\x2f\x54\x4c\xa7\x7c\xa7\x73\x36\x84\xfa\x2e\xeb\x99\x61\xc5\x0b\xf0\xda\xaa\x3e\xac\xbc\x66\xa0\x21\xd7\x5d\xd1\x03\x1c\xde\x63\xf4\x42\x1c\xa7\x84\xd8\x7d\xf4\xad\xed\xa6\x94\xb7\x09\x1f\xc4\x25\x3e\x06\xf2\xd7\x6d\xe3\x3d\xdc\xb6\xc8\xa1\xd5\x51\xcd\xa4\x56\xa5\xf6\xed\xa7\x33\x3f\x8a\x47\x8e\xd3\x0b\xa1\x41\x09\x11\xd6\xc5\xcf\x41\x58\x79\xe8\x56\xdd\x23\xb5\xcd\x46\x2b\x08\xa7\x9f\x1a\xad\xcd\xea\xbd\xcf\xf1\xf4\x49\xf7\x1a\x81\x33\xe2\xb3\xa7\x50\x3c\xa2\xf1\xdf\x84\x88\x96\x25\x26\x09\xd1\x09\xca\xf9\xcc\x05\x36\xd5\xd4\x74\x7e\x7a\x7a\xb2\xec\xd1\x18\xb3\xd1\x5b\xcb\x5e\x59\xd5\x0a\xe6\xf5\xd6\xda\x3b\x9e\x38\x0f\x34\xa4\x77\x9f\x45\xf1\xc8\x09\x7a\x97\x7c\x92\x12\x22\x30\xf6\xe3\xaa\xa4\x20\x97\x84\x86\xe7\x73\x43\x2e\x6e\xb7\x84\x38\x56\x54\xed\x98\x44\x3b\xa2\x31\xb6\xd3\xf3\x75\xbf\x59\xd5\x51\x3c\x72\x92\x5e\x88\x53\x54\xaa\x29\xf6\x16\x87\xab\x73\xab\xa7\x87\xeb\xfe\x4b\x5d\xe2\x42\x8a\xe7\xcb\x7d\xef\x29\xca\xab\x76\xca\x9f\xbf\x7b\xe0\xe7\xf6\x0a\x20\xa7\xa7\xe8\x85\xd0\xa4\x84\x18\x50\xc3\x56\x24\x74\x76\xb0\x72\x05\x4e\x24\x75\x46\x6a\x0b\xc7\xe7\x57\xbc\xba\xaa\x68\xb2\xdb\xa3\xfa\x54\x66\xb3\xf7\x4f\x13\x14\x8f\x68\xd2\x0b\x71\x9a\x12\xc2\xf5\x75\x87\xe5\x6f\x81\x3e\x89\x6e\x8d\x55\x0f\xa4\x2d\xce\xda\xf3\x59\x8c\xdc\x49\xfa\xc1\xed\x90\xf3\xe8\xab\xdf\x38\x7b\xbe\x36\x8a\x47\x4e\xd3\x0b\xa1\x45\x65\x4f\x27\xdf\x36\x1a\x1a\xdd\x6c\x39\xb7\x2a\x8e\x61\xff\x86\x7b\x4c\x66\xa9\x0c\x0b\x0e\x5f\xf2\xd2\xdf\x22\x16\x0a\x7d\x67\x06\x81\x0e\xd7\xa2\x17\x42\x9b\x12\x02\x09\x42\xb4\xe4\xa2\xb9\x8c\xdc\x3d\x94\x1f\xfb\x9e\x7e\x9e\x63\x76\xf2\x8f\xf8\xfd\xbe\x64\x2b\xaf\xb6\xc8\xae\x70\xef\x71\x10\x5e\x6b\xd3\x0b\x71\x86\x12\xe2\x4f\x39\xb7\x59\xb9\x4d\x71\x28\x16\xc1\xbb\x8d\x7d\x7c\x34\x59\xb1\x61\xff\xf1\x4a\xf3\xcd\x49\x97\xf8\x72\xd9\x8b\x93\xab\x2e\xa2\x78\xe4\xcc\x7f\x13\x22\x5a\x3e\x2a\x49\x88\x74\x28\xe7\xb3\x2b\x60\x8d\x1f\x43\xc2\x5e\x82\x59\x3c\x9a\x17\xc3\x58\x6c\x61\xa2\xb1\x4b\x44\x7a\xd6\x81\xe3\xaa\xf2\xda\x35\xb6\x8e\x22\xc0\x9d\xd3\xa1\x77\xc9\xba\x54\xaa\xe9\xdc\xe1\x3d\xe6\x1b\xb7\xde\x16\x5b\x39\x3b\x6b\xd8\xf3\x69\xb5\xeb\x8b\x51\xb1\x27\x49\x33\xea\x82\xa2\xea\x1f\x2e\xd9\x10\x10\x14\x8f\xe8\xd2\x0b\xa1\x47\x09\x51\x5e\xe6\x61\xf4\xeb\xf8\xcc\x7d\x47\x51\x2e\x5c\xdb\x10\x23\x8a\xe7\xd2\xd6\x9d\xd0\xd6\x3d\x77\x3f\x4a\x76\x9a\x81\x67\x70\x35\x8a\x47\xf4\xe8\x85\xd0\xa7\x84\x08\x78\xe3\xf9\xbc\x62\x47\xda\xe5\x40\x4b\x9f\x58\x9f\x16\x44\x68\x79\xea\x91\xcc\x23\x65\xbd\x1b\x54\x9f\x77\xd8\x0b\x30\x47\x6f\x44\xf1\x88\x3e\xbd\x10\x67\x29\x21\x4e\xff\x3e\xfe\xd9\x47\xb4\xbb\xbe\xe8\xe0\xc3\xc8\x72\xf5\xd9\x88\x0a\x2c\x56\x2e\x7a\xfb\x2e\x7b\xae\xf8\x1a\xa4\x6b\x0f\x0f\x08\x4c\xcf\xd2\x0b\x61\x40\x09\x81\x2f\xd6\xe8\x16\x8d\xba\x51\x77\x28\xda\x20\x21\x77\x07\x5a\x64\xef\x3f\x93\x58\x20\x13\xd1\xa5\xda\x2c\xdb\x92\x5f\xff\x53\x16\xc5\x23\x06\xf4\x42\x18\x52\x42\x04\xcb\x95\xa1\x53\x03\x81\xb6\x61\xd2\x36\xe5\x82\x1a\x7a\x61\x82\xf9\xbc\x6e\x67\x2e\x04\x1e\xb0\xb5\x90\x58\x88\x39\xbf\x66\x25\x8a\x47\x0c\xe9\x85\x38\x47\x95\x06\x93\x31\x50\x3d\xbf\x8c\x4f\xcc\xfb\xdb\xd1\x95\xa9\xba\x5e\x7c\x1d\xaf\x5f\xab\xe7\x88\x54\x2b\xa6\x60\x95\x3d\xdf\x06\x23\xf4\x51\x3c\x72\xee\xbf\x09\x11\xad\xe8\x8d\x24\x44\x46\x94\xf3\xe9\x48\x5f\x3f\x78\x73\x3c\xcf\xd2\x55\xfb\xad\x84\x72\x54\x3b\xe7\x72\x99\xe1\xe5\xab\xa2\x1a\x35\x3b\x47\x8f\x85\x73\x9b\xe9\xca\xa1\x78\xc4\x88\xde\x25\x1b\x53\x71\xb8\x91\x06\x43\x20\x5f\x83\x7e\xda\x79\xa5\x98\x4d\x35\x05\x97\xad\x33\xf8\x0b\xd7\xfd\x68\x92\xd8\x2d\xc8\x76\x43\xaf\xa4\x03\x68\x3f\x63\x7a\x21\x4c\x28\x21\xba\x9f\x0c\xf1\x58\xa9\xd7\xe7\x7e\xe0\xda\x91\x11\xf5\x74\x4f\xba\x85\x71\x59\xc5\xea\x35\x9b\xba\x37\xbf\x48\xbd\xca\x3f\xa1\x03\xfc\x70\x13\x7a\x21\xce\x53\x55\x43\x5d\x2f\x3f\xca\xa8\x1c\x75\xa2\xba\x58\xd5\x50\x6c\xf0\xee\x40\x5f\xcb\xfa\x5e\x89\xaf\x51\x4f\xcb\x0b\xa5\x95\x36\x7c\xe6\x31\x44\xf1\xc8\x79\x7a\x21\x2e\x50\x42\xec\x71\x78\x9e\x69\x6a\x50\xf7\xb1\x55\x26\xb5\x37\xba\x23\x96\xa5\x1b\x0d\xf2\x3f\x3e\x7e\x6e\xf0\xcd\x03\x66\x95\xbe\x57\x73\x3a\x28\x1e\xb9\x40\x2f\x84\x29\x95\x57\x90\x9f\xaf\x24\x76\xfe\x6e\x4c\xf8\xb5\xba\x79\xa1\x16\xc1\x2e\x4e\x35\xe1\x0d\x98\xda\x5d\xc6\x37\xbf\x83\xdc\x05\x76\xee\x14\x44\xf1\x88\x29\xbd\x10\x17\x29\x21\x2e\x8f\x09\xed\x2c\x8c\xde\xeb\xf7\x71\xd1\xd0\x40\xf3\x6b\xe7\xaa\x5b\xb5\x53\x56\xf7\xf0\x72\x66\xbe\x96\x5d\xf7\xaf\x0a\x0d\xf1\xa0\x78\xe4\x22\xbd\x10\x66\x94\x10\x8b\x61\xaf\x1c\xbc\x4d\xeb\x3a\xaa\xae\x6c\xcd\xe3\x61\x4b\xf9\xd0\x1d\xd7\x29\xf7\x6b\x6e\x63\x0c\x8f\x09\xc3\x3f\x81\x29\xaf\x2e\xa1\x78\xc4\xec\xbf\x09\x11\xad\xbc\x06\x49\x88\xcc\x29\xe7\x53\x5a\xc9\x3b\xa5\xfc\xc3\xfe\xba\x5c\xff\x47\xa6\xdc\x5d\x47\x5d\x6e\x73\x16\x3d\x3f\xa8\xbe\xed\x8e\x7b\xca\xde\x8b\x37\xb3\x7e\x80\x25\x9b\xd3\xbb\x64\x0b\x4a\x88\xc2\x27\x8f\xc7\x77\x4f\x3c\x97\x61\x3e\xe2\x76\x33\x9b\xe7\x0e\xff\xcb\xa7\x79\x71\x63\x0c\x32\x35\xc9\xa5\x4f\x6b\x1d\x66\xd2\xc1\x92\x2d\xe8\x85\xb8\x44\x75\x94\x31\xf1\xee\x4a\x83\xe3\x21\x11\x29\xbd\x84\x71\x93\x4d\xec\xb7\xbc\x8e\x66\x4e\x69\x29\x48\x0b\xf0\x6d\xdd\xf3\xe7\x56\xce\xa2\x22\x8a\x47\x2e\xd1\x0b\x61\x49\x15\x2f\x63\xf8\x85\x67\x86\x3e\xcf\x7e\x72\x25\xf6\xb4\xa6\x36\x9f\x7e\x96\x6c\x2c\x5e\x64\x9c\x39\x7f\xb4\x44\x7b\x9d\xed\xcd\x08\x3d\x14\x8f\x58\xd2\x0b\x71\x99\xaa\xf4\xba\xe2\xd3\x82\xdb\xf2\xde\x85\xb0\x11\x0f\x0f\xd1\x60\xa3\xa8\x86\x47\xae\x23\x77\x13\xb7\x9b\x5d\x14\x33\xff\xa4\xa1\xbf\xc0\x82\xe2\x91\xcb\xf4\x42\x58\x51\x39\x42\xd3\x01\xff\xd8\xaa\xa9\x28\x39\xa8\xc9\x15\x57\x1e\x7e\xec\x97\xd7\x5a\xc9\x59\x8d\x72\x32\x48\x29\xae\x3f\x22\xaa\x7a\x6a\x03\x8a\x47\xac\xe8\x85\xb8\x42\x09\x71\xeb\x9b\xf7\x8d\x10\x6b\xf7\xde\xa3\x9b\x75\x8a\xd4\xe2\x9f\x75\xc9\xcf\x74\x9d\x9c\x7e\x3d\x36\x26\xc2\xb6\x7b\xf4\x8f\x68\x99\x28\x8a\x47\xae\xd0\x0b\x61\x4d\x09\x91\x9b\x36\x52\x1f\x5e\xef\xd0\xb0\xb0\x6f\x95\x7d\x87\xdd\xb5\x07\x3e\xe8\x35\x3f\xb3\x57\xfc\xd3\x67\x98\x4f\x58\x56\xde\xc8\x58\x85\xe2\x11\xeb\xff\x26\x44\xb4\x32\x7e\x24\x21\xba\x4a\x39\x1f\x5e\x8b\x6e\x29\xef\x2c\x19\x4f\xbe\x98\x23\x43\xcb\xee\x5c\xe0\x7f\x2d\x22\xea\x7c\x40\x9f\xeb\xeb\xb3\x19\xbd\x67\xa5\x23\xa7\x81\x0b\x71\x95\xde\x25\x5f\xa3\x84\x68\xbe\xfe\xa7\xf5\x20\xbb\xbd\xbe\x83\x25\x33\xf7\xe2\x33\x4b\xab\x7a\x87\x71\x57\xcd\xb6\xac\x4b\x1f\x3e\x3d\xdf\xb1\xe7\xa4\xc1\x41\x14\x8f\x5c\xa3\x17\xe2\x3a\x25\x44\x48\x95\x88\xb1\xff\x5b\x5c\xa8\x17\x5f\xda\xc1\x1e\x69\x83\xf9\xb3\xa2\x32\x33\xd9\xcf\x4e\xe9\xb6\xb2\x9f\x90\x2d\x1d\x0e\x3e\x81\xe2\x91\xeb\xf4\x42\xdc\xa0\x84\xc8\x0a\xde\x2b\x21\xcd\xe3\xbb\x69\x3c\xfb\xcd\x71\x9f\x98\x8c\xe2\x9b\x86\x86\x5f\xb2\xa5\x7e\x86\x3a\xb4\x94\xae\xda\xd4\xfe\x64\x37\x8a\x47\x6e\xd0\x0b\x71\x93\xca\xd8\x35\x5c\x8a\xaf\x19\x7c\xae\x9b\x49\xd8\xab\xb5\xfd\xbb\x7e\xd1\x4d\x37\x5b\x2b\xc9\xc3\x9f\x55\x6a\x3d\x87\x5e\xda\x95\xf6\x82\xb0\xeb\x26\xbd\x10\xb7\xa8\x6a\xb0\x9b\x96\x89\x68\xf7\xae\x95\xf4\x3a\xf6\x2a\x43\xf4\x37\xf2\xa6\x5a\x55\x50\x2b\xf4\xb0\xa9\xea\x5b\x2e\xb3\x3d\x9c\xdb\x2b\x00\xfb\xdd\xa2\x17\xc2\x86\x12\x62\x05\x1a\x75\x12\x37\xfc\x4a\xdb\xe8\x59\xeb\x9f\xcd\x5f\xbc\x85\xe4\x8a\xbe\x3f\xfb\x52\xdc\xa0\x93\xda\x53\x7d\xd1\xcd\x4f\x4c\x18\xc5\x23\x36\xf4\x42\xdc\xa6\xaa\x12\x2a\x0f\x69\xe4\x4e\x4b\x50\xff\xba\x61\xe7\x82\x0f\xba\x1f\xef\xbf\xa9\xbd\xf1\x84\xed\xfe\x38\x6d\x2d\x86\x47\xe6\x47\x94\x41\xd8\x75\xfb\xbf\x09\x11\xad\x5c\x38\x49\x88\x6c\x29\xe7\x73\x72\x65\xce\x7d\x8d\x17\xb8\xd5\x07\x32\xbe\x05\x9e\x6a\xe6\x5c\xe5\xcb\x5a\xab\x6c\x13\xff\x78\x56\xb6\xfd\x8e\x2d\xaf\x6f\x33\x1f\x8a\x47\x6c\xe9\x5d\xf2\x1d\xaa\xa8\x7f\x7a\x93\x23\x83\xd3\x85\xd1\x0b\xcd\x77\x4e\xdc\x6b\x5c\x54\x70\x4f\x55\xe0\x56\x8c\xf5\xbc\x2e\xb8\x91\xb9\xea\xe8\x3b\x15\x69\x14\x8f\xdc\xa1\x17\xe2\x2e\x25\x44\x59\x41\xf1\x5c\xde\xe2\x40\xf0\xa5\xdb\x9e\x43\xd2\xf7\x3c\x66\x6c\x56\x4b\xbe\x16\xb8\x12\xb8\x63\xb5\x26\x87\xab\x59\x16\x37\xf0\x52\xee\xd2\x0b\x61\x47\x09\xb1\xad\xb1\x63\xc5\x8a\xc9\x63\xed\x9c\x49\x2c\xd5\xa3\x25\x2f\x2c\x4c\xfa\x4c\x6a\x7c\xbb\x12\x4d\x96\x99\x2f\x5c\xbe\xd4\x3b\xca\x88\xe2\x11\x3b\x7a\x21\xec\xa9\xee\x00\x68\xf9\xd8\x3f\xe6\xdb\x6a\x3c\xe5\xd2\x52\x5a\x31\x10\xc6\xdb\x14\x56\x7a\xea\xd9\x88\xc0\xa8\xb6\x01\x67\x26\x6f\xba\x3c\xb0\x44\xf6\xf4\x42\x38\x50\x42\x30\x8c\x3a\xe2\xee\x72\xb4\xae\xcb\xe8\x97\x34\x1f\x24\x3c\x8a\xe5\xf1\xf2\x57\xeb\x5d\x71\xc1\xcf\x55\xb7\x40\x7f\x7f\xe9\x6a\x65\x14\x8f\x38\xd0\x0b\xe1\x48\x09\x21\xf3\xd5\x2c\x57\x65\x32\x63\x4c\xcf\xa6\x94\x4b\x37\x2b\xd6\xf7\xc3\x9a\x7d\xc7\x8c\xdc\xc5\x45\xd6\x9b\x70\x06\x39\xbe\x6d\x00\x42\xe4\x48\x2f\xc4\x3d\xaa\x00\xe1\xd8\xc6\xcf\x99\xdd\x8f\x03\x96\x09\x9a\x2f\xbe\x90\xf3\x61\x5a\xf9\x67\xd9\xc6\x0b\x56\xd7\xaf\x6a\xb7\x33\x72\xc9\x5d\xd8\xcb\x8e\xe2\x91\x7b\xff\xed\xb0\x8e\xd6\x0d\x42\xaa\xc3\xba\x24\xfe\xe8\xd2\x83\x59\xa1\x9c\xb9\x67\x85\x2e\xf2\x2b\xad\xc3\x95\xf1\x0c\xbe\x51\xd3\x7a\x84\xca\x19\x9c\x3b\x60\xf5\x28\x06\xf9\xfb\x15\x22\x4e\x07\x67\x82\xf3\x98\xc7\xb8\x3b\x3b\xb2\xc3\x8c\x4b\x0b\xca\xa5\x97\x2d\x68\x8b\x5d\x2a\xd7\xc9\x92\x17\x8f\x13\xeb\xb9\xf5\xd7\xa3\x21\xaa\x75\x1e\x83\xd9\x9b\xc7\x22\x5c\x70\x29\x6a\x2b\x13\xac\x64\xbe\x45\xfc\x0a\xeb\x3f\x78\xd9\xfe\xb3\x8e\xd3\x6b\x3f\x9e\x99\xbf\x5b\xee\x4f\x0c\xcf\x26\xe4\xfd\x61\x55\xfd\xc4\xe7\x17\xca\x88\x0b\xdb\x76\xa6\x3f\x6f\x28\xdf\xfa\x7c\x17\xd3\xe9\x96\x87\x76\x9b\xff\x3e\xd7\xf3\xb8\x2d\x52\xd3\x35\x5e\xf7\x66\xbb\x3d\xff\xaa\x5d\x49\x6b\x79\x9e\x9a\x75\xb1\xed\x64\x9f\xda\xf6\x56\xf9\x9f\xc7\x86\x2c\x76\xf8\xbf\x5b\xe4\x7f\xf2\x3b\x60\xb5\xbc\x21\x57\xcd\xda\xe7\x9d\x4a\xd7\xb9\xcf\xde\x6b\x64\x83\x92\x3a\xd7\x30\x38\xbf\xab\x3d\xca\x5b\x39\xf0\xf7\x5c\xdb\xf6\xff\xba\x1d\x6b\x7c\xca\xf7\xea\xc7\xad\xdb\x8d\x7a\x46\x05\xd6\x7c\xeb\xbf\x70\x28\x40\x62\xeb\xb2\xb2\x1d\x65\x65\xb3\xf7\x52\xff\xbe\x9d\x99\x69\x99\xe2\xf0\x98\x47\x53\xd1\x64\xec\xb7\xbf\x98\x2c\x17\x87\xc2\xde\xb5\xea\xcd\x49\xdf\x5c\xe6\xc6\x0f\x0a\xd7\xa9\x6b\x93\x0f\xeb\x68\x51\x95\xa4\xc9\x9c\xa8\x62\xf1\x2f\x5f\x5f\x96\xde\xcb\x32\x5d\xa7\xb9\xe2\xa2\x88\xfe\x4b\xb6\x32\x8c\xef\xfd\x6b\x33\x85\xf7\x42\x7b\xd5\x7f\xad\x0c\x33\x59\x86\xe2\x11\x27\x7a\xf9\x0e\xa5\x72\xdb\x0b\xd9\xc2\x0f\x26\x6b\x77\x67\xaf\x5f\xbc\xb0\x7c\xf1\x9f\x89\x15\xd8\x86\x1d\xc1\x38\xd9\x5a\xd1\xfc\x91\x37\xc9\xeb\x5c\x84\x50\x3c\x82\xd2\x0b\x81\x51\x95\xd0\xaf\x51\x69\xdc\xe1\x42\xf0\x6d\xab\x1a\x38\x3f\x55\x6d\x57\xc4\x9b\xcf\x8b\xb9\x6a\x76\x97\x7b\x97\x85\x67\xfb\x57\x56\x20\x28\x1e\xc1\xe8\x85\x70\xa6\x52\x96\xe6\x21\x9f\xb5\xb0\xb1\x22\x8d\x95\xe9\x7b\x0e\x4a\xc6\x28\x6a\xae\x38\xf0\xbe\x44\x3b\xd7\xf2\xe5\x4b\x9d\x1a\x9e\x45\x6b\xa0\x66\x9c\xe9\x85\x70\xa1\x84\xc8\xd1\x8c\xd6\xcb\xb9\x7b\xe5\xfe\xfb\xe1\xd1\xbb\x7b\xf7\x4d\x24\xbe\xbe\x37\xd1\x15\x60\xb9\x3c\xe7\x95\xbd\x60\xfe\x15\xb1\x69\x6d\x14\x8f\xb8\xd0\x0b\xe1\x4a\x09\x71\xa9\x7c\x75\xf4\xfc\x17\x91\x73\xc2\xfc\x59\xe7\x5d\xdd\xa4\xde\x99\x39\x0c\x74\x89\xdb\x18\xa4\xd8\x36\x5e\x74\xf4\xcf\xeb\x30\x46\xf1\x88\x2b\xbd\x10\x6e\x94\x10\xc7\xba\x86\x34\x62\x5b\x56\x78\xd9\x9f\xe3\x61\x18\xaf\x4f\xf9\xfc\x21\x7f\xaa\x89\xa5\xb0\xf5\x8a\x43\x2e\xe3\xf3\x39\x9d\x9d\x0c\x28\x1e\x71\xa3\x17\xc2\x9d\xaa\xb8\x3f\x4f\xd4\x0f\xe3\x8b\xae\xd8\x25\xa6\x5a\x6c\xe5\x1e\x92\xc6\x73\x4f\x21\xe1\xdb\x8a\x3e\x0b\x99\xb9\x8c\xb3\x6b\x66\x3b\x81\x6b\xe6\xfe\xdf\xdc\x01\x5a\xfa\x86\x24\x44\x1e\x54\x15\x51\x97\xee\xbc\xb4\x4d\x1c\xbd\x8e\x10\xee\xaf\xf2\x0b\x30\x4a\x74\x93\x37\x88\xf6\xcd\xff\x68\x73\xc8\xff\xc0\xf9\xf4\x3e\x9f\xb3\x28\x1e\xf1\xa0\x77\xc9\x9e\x94\x10\x42\x8b\xf5\xdc\xf5\xa1\x55\xa2\x0b\xba\x76\x77\x7c\xe2\xfe\x14\xcc\x2a\xa8\x5e\xab\x76\x2d\x57\xfc\xf3\xa3\x68\x34\x40\xb4\x60\x1f\x8a\x47\x3c\xe9\x85\xf0\xa2\x84\x18\xbc\x10\x35\x91\xd3\x7c\x7f\x03\x6b\x2d\x47\xb9\x24\xd3\x44\xef\xe8\xda\xf9\xaf\x02\x2d\xc8\xbc\xda\xfc\xc2\xe1\x82\x2a\x49\xe0\x53\x7b\xd1\x0b\xe1\x4d\x09\x31\xad\x12\xa4\xee\x33\xee\xc0\xbd\xeb\xe1\x9c\x91\xe1\xe8\xce\x9f\x7e\xcb\xec\xe7\xfb\xd3\x4c\xe3\x70\x79\x5c\x1d\x7b\x2e\x5f\xf9\x07\xc5\x23\xde\xf4\x42\xf8\x50\x55\x1f\x44\xc5\x87\xc4\x38\xfc\x5e\xb6\xf3\x78\x2d\xf7\x0e\xe7\xaa\x42\xaf\xa3\xbb\x32\x24\x36\xb1\x5f\x2a\x73\x9c\xe6\x8c\x3c\xbf\x15\x78\x1c\x3e\xf4\x42\xf8\x52\xdd\x04\x28\xab\xf0\xb6\x4a\x70\x7c\xcb\xd9\xc4\x12\x24\xad\x31\xb6\xa6\x5e\xab\x2b\xbe\xf1\xc7\xd6\x8c\xa9\xf4\xa9\xf8\x15\xa6\x15\xdb\x50\x3c\xe2\x4b\x2f\x84\x1f\x25\xc4\x9d\xcf\x49\x5f\x83\x2c\x7d\x84\x37\x86\xe5\x6e\x56\xbf\xe1\x33\xd3\x17\xc7\xa0\xf9\x28\xfd\xd9\x25\xb5\xc3\x27\xfb\x96\xeb\xc5\xec\x44\xf1\x88\x1f\xbd\x10\xfe\x94\x10\xfd\x73\x6b\xb4\x76\xff\xc3\x79\x66\xea\xf6\xed\x84\x61\xc2\xec\x61\xd5\x4b\xab\x1d\xdf\xf0\x97\x3f\xbe\xf1\xf6\x44\x3e\x81\x63\xf3\x11\x14\x8f\xf8\xff\x37\x21\xa2\x65\x89\x49\x42\x14\x40\x39\x9f\x85\x55\xea\x85\x13\x99\xf7\x4d\x5e\xcf\x26\xd8\x6b\x09\x3a\x62\x49\x96\xc9\xa7\xca\x3e\xa9\x7a\xd4\x2e\x7e\xae\x1a\xda\x6b\x03\x38\x3c\x80\xde\x25\x07\x52\x1d\x73\xb5\x38\x6e\xb8\x16\x6b\xfd\x48\xb3\xc2\x5a\xdc\xb5\xff\x69\xc8\x0f\xa7\xf6\xc9\x20\x27\x9d\x5d\x57\x38\x92\x6a\xbd\x39\x4a\xa4\x50\x3c\x12\x48\x2f\x44\x10\x55\x0d\xfd\xe6\x32\x16\xd3\xad\x17\xcb\xc5\x0e\x31\x27\xbc\x3b\xa9\x92\xb4\xc0\xa2\x77\xb9\xaa\xff\x6d\xca\xea\x2b\xfb\x6c\x47\xf3\xe7\x79\x51\x3c\x12\x44\x2f\x44\x30\x25\x84\xde\x9a\xd3\x17\x5f\x31\x31\x48\x9b\xbb\xe9\x9b\x3e\xef\x9c\x21\xac\xe1\x64\x2a\x30\x94\xff\xf4\xf3\xdb\xc2\x56\x3d\x24\xc3\x9a\x1b\xc5\x23\xc1\xf4\x42\x84\x50\x42\x58\x0d\xf2\x0b\x96\xb6\x5f\x6d\xf0\xdc\x17\x1d\xfb\xf0\xe5\xe7\xe3\x61\xc2\xf7\x2e\x2c\xeb\x9f\x0e\x6f\xab\xe4\x8d\xc2\x84\x76\xed\x47\xf1\x48\x08\xbd\x10\xa1\x94\x10\x9b\x8d\xfa\x54\x8d\x6a\x74\xed\x15\xcc\xc6\xf2\x16\x2e\xff\x70\xbc\x70\xd4\xe1\xe3\x75\x61\xfb\x10\xf7\x6c\xc9\x08\x36\x83\xeb\xcb\x51\x3c\x12\x4a\x2f\x44\x18\x55\x04\x3f\xfe\x5a\x7f\x90\x77\x24\x6c\xe8\x9e\xff\xef\xc8\x0b\xf5\x86\xcf\x95\x6c\x6d\x47\x98\xac\xbc\x03\x47\x5d\xf7\xa8\x48\xad\x5e\x89\xe2\x91\x30\x7a\x21\xc2\x29\x21\x5e\xad\x7e\xcb\xa3\x13\xd4\xaf\xc0\x30\xb9\xf2\xbc\x7c\x8e\x7e\x89\x89\xd2\xae\x4f\xdb\x9a\xaf\x2b\x5f\xb7\x53\x3f\xd3\x62\xc8\x07\x08\x15\xfe\xdf\x84\x88\x96\x8f\x4a\x12\xa2\x08\xca\xf9\x3c\x60\x7f\xf2\x7e\xa7\xab\x9a\x43\xc2\xb1\xcb\xcb\x75\x6c\x09\x63\xa9\x97\xa5\x95\x83\x4d\xb8\x93\x53\x5a\x3e\x47\xeb\x9f\x0e\x30\x40\xf1\x48\x04\xbd\x4b\xbe\x4f\x09\xf1\x4e\x4d\x5b\x82\x4d\x35\xdb\x77\x77\x2d\x72\xfd\xb6\x6c\x74\xd8\x86\x16\x8d\xce\x11\x6d\x85\x6d\x41\x8e\x49\x4f\x7d\x07\x4a\x08\x28\x1e\xb9\x4f\x2f\x44\x24\xd5\x6d\x2e\xe4\x50\xe2\x87\x37\xad\x19\xc1\x5d\x11\x9d\x5e\x6c\xc8\xc8\x69\x5c\x9d\xca\x1b\xcb\x05\x69\xb1\xcd\xec\x83\x3a\x41\x7e\x60\xe3\x22\xe9\x85\x78\x40\x09\xc1\xa1\xfe\xf4\xd6\x32\xf1\x69\x71\x65\x17\xa5\x17\xbf\xf7\x79\x25\xeb\x18\xde\xdf\x40\x10\xbd\xdb\x5d\x36\x75\xff\xd1\xd9\x4a\x2e\x31\x14\x8f\x3c\xa0\x17\x22\x8a\x12\x62\x9d\xbb\xad\xb5\xa4\xff\xb3\xdd\x7b\xf7\xec\x98\x79\x71\xb5\xb0\xc2\x9e\x63\x99\xb1\x52\x95\xeb\xf8\x27\x9f\x03\x37\xc5\x1c\x36\x82\xa8\x31\x8a\x5e\x88\x68\x4a\x08\x09\xb5\x3b\x72\x5e\x1f\xa5\x52\x0c\x99\x4e\xfa\xc5\x88\x05\x8d\x73\x4c\x15\x66\xfb\xa6\x26\x87\xb5\x66\xd9\x9a\x12\xc6\xce\x71\xa0\x78\x24\x9a\x5e\x88\x18\xaa\xe2\x97\x82\xc0\x64\x0b\xa6\xb4\x47\x72\x37\x6e\x7e\xbc\xb7\x7e\x66\x4f\x8f\xd7\x41\x81\xb3\x67\xe6\xef\xad\xc8\x4b\x4f\xe5\xfa\x53\xa1\x80\xe2\x91\x18\x7a\x21\x1e\x52\x42\x88\xae\x94\x8b\x18\x3c\x79\x57\x44\x5d\x87\x65\x77\xc3\xf3\x85\x4c\xb1\xcb\x96\x4a\xbe\x2e\x37\x15\x93\x7b\x0e\x0a\x67\x78\x87\xee\x45\xf1\xc8\xc3\xff\x26\x44\xb4\xa2\x37\x92\x10\xc5\x52\xce\xa7\xf3\x64\xd1\xb9\x9a\x38\xee\x9d\xbf\xf7\x5a\x6c\x8f\xcd\xdd\x7d\xe9\x37\xeb\x2e\xdf\xb7\x29\x63\xaf\x39\x1a\x2d\x72\x7a\xad\x23\x4d\x51\x3c\x12\x4b\xef\x92\xe3\x28\x21\xec\x56\x3a\x28\x5d\xe1\xfa\xc5\xec\x75\x3c\x6e\x5c\x80\xd5\xfa\x6b\x6e\xbc\xb2\xf4\x89\x9e\x43\x02\x52\xc9\xa2\xa6\x5b\x3b\x94\x8f\xa1\x78\x24\x8e\x5e\x88\x47\x94\x10\x28\xa3\xec\xcb\xb9\x6c\x7b\x2d\xd6\x8e\xaf\x2b\x6c\x43\x36\x29\x5d\x5c\x9f\x23\x56\x1c\x22\x8f\x56\xcd\x8e\x07\xeb\x0e\x88\x1e\x42\xf1\xc8\x23\x7a\x21\x1e\x53\x39\xa5\x38\x5b\x0d\x89\x24\x86\x55\x6c\x6f\x2f\x5b\x3e\x63\xbf\xd5\x77\x3a\x95\x47\xcd\xb5\x5c\x73\xc6\x6e\xd0\xeb\xc7\xde\x37\xea\x5a\x28\x1e\x79\x4c\x2f\x44\x3c\x55\x61\xd4\x0c\xe7\xca\xa6\x03\x56\x4a\xaf\x1a\x2e\x2f\x5f\xb5\xe1\x96\xb6\x4a\xf8\x06\x09\xdd\xfb\x2e\x32\x3d\xdf\xbc\x87\x75\x54\xf8\xd9\x51\x3c\x12\x4f\x2f\xc4\x13\x4a\x08\x8f\x41\x25\xfe\x61\x93\x2a\xa6\xa3\x55\x4f\x42\x54\xd7\x09\xff\x3c\x7a\x26\xc6\x58\x75\x19\x81\xb5\xbc\x7b\x7c\xe7\x9f\xcd\x5b\xe5\x51\x3c\xf2\x84\x5e\x88\x04\x4a\x88\x29\x21\xa7\x1f\x4c\xab\xf9\xd4\x22\x17\x71\x0a\xf7\x12\xcd\xad\x55\x0f\x96\x06\xad\xff\x79\xc0\x74\x0b\x4f\x8c\xb6\xc1\xb8\x0a\xf0\xb5\x12\xe8\x85\x48\xa4\x84\x30\xca\xc9\xcd\x9a\x33\x33\xe1\x90\x3b\xf8\x62\xe7\xe5\x55\x13\x2c\x21\xaa\xbb\xde\x13\x7a\x4b\x38\x7b\xc7\xef\xb9\x4a\xb5\xc7\x6b\xa2\x78\x24\xf1\xbf\x09\x11\xad\xbc\x06\x49\x88\x9e\x52\x5d\x7b\x6b\x4c\xb0\xdb\x25\xfe\xca\xb5\x30\xa7\x53\xf3\x73\x35\xc7\x8a\xd9\x41\xec\xec\xfe\x7d\x56\x57\x7f\x45\x78\x4a\xe8\xb7\x1d\xe7\x44\xf1\xc8\x53\x7a\x97\x9c\x44\x09\xb1\x71\xd6\xd7\x7d\xf0\xa2\xd1\x8b\x1a\xad\x99\x53\x99\xdc\xe5\x61\x3e\x49\x92\xd9\x52\x5a\xbe\x5b\x8b\x59\xea\xeb\xb4\x7e\x06\xeb\xa1\x78\x24\x89\x5e\x88\x64\x2a\xaa\xea\xe9\x4f\xbf\x64\xad\x09\x18\x94\xfa\x7d\xdd\xe5\x57\x9b\xee\xab\x13\xef\xe6\xba\xd8\xcf\x70\xc9\xcf\xcd\xcf\xdc\x29\x75\xb2\x40\xf1\x48\x32\xbd\x10\xcf\xa8\xfc\xde\xf8\x51\xaf\x54\x16\xce\xd7\x67\xac\xa7\x4f\x20\xf7\x5d\xcb\x1a\x0f\xdb\x7c\x3d\x30\x70\x7b\x72\x6d\xea\x28\x5e\x7e\x5c\x03\x08\xd1\x33\x7a\x21\x9e\x53\x42\x70\x1e\x3d\x9f\xfe\x29\x75\x2c\x62\x55\x17\xcb\x9f\x9e\x94\x6d\x3f\xdb\x0e\x7f\xb1\x92\xbb\xa3\xbd\xd3\x27\x6a\x2a\xcc\xf2\xec\x8c\x12\x8a\x47\x9e\xd3\x0b\xf1\x82\x12\xe2\xca\xa6\x8b\x4e\xfc\x23\x5f\x1a\xf9\xbf\xcc\xb2\x3d\x17\x54\x6b\x56\xd9\xe6\x26\xae\xdc\x9d\xd7\x6e\x5d\x1b\x35\xfd\x28\xde\x7e\x33\x8a\x47\x5e\xd0\x0b\x91\x42\xa5\xd0\x9a\x0e\xe5\x5d\xda\x92\xd1\xce\xec\xc1\x9c\x21\xbe\x3a\x02\x7f\x2f\xe8\xed\xa1\x61\xd6\x5e\x9d\x32\xf9\x65\xef\x8d\x24\x6e\x00\x63\x97\x42\x2f\x44\x2a\xd5\xc5\x0f\x4d\xab\x8b\x33\x27\xd9\x82\xf4\xe2\x2f\xb2\x44\xeb\x0a\x1f\x60\x8b\xd2\xe1\xe0\x7d\x10\x34\xff\xab\xdc\x08\xe9\x99\x0e\x5f\x8f\xe2\x91\xd4\xff\x26\x44\xb4\x32\x7e\x24\x21\x4a\xa3\x9c\x0f\xcf\x26\xc3\x86\xf2\x89\x4f\xb9\xf7\x2b\x25\xb9\x6e\x69\x38\x94\xd9\x7f\x1c\xd8\x9c\xd0\xa4\xae\x27\x68\x11\xd7\xe7\x7d\x44\x4b\x03\xc5\x23\x69\xf4\x2e\x39\x9d\xea\x0a\xc7\x1d\x5d\xa5\x05\xcf\x99\x8b\xa2\xdc\xef\xdc\xf4\x1e\x9c\x12\x0b\xfe\x5e\xaf\x19\x16\xd6\xef\x1f\x70\x66\xe5\xaf\x3b\x7b\x02\x0e\xa3\x78\x24\x9d\x5e\x88\x0c\xaa\x5a\xe6\x0b\xe1\xd9\xa3\x67\xbe\x58\x97\xde\x3d\xdd\xf0\x72\x9b\xd8\xf5\xc7\xeb\x39\x5e\xf3\x95\xff\x3f\xce\xfe\x34\x9c\xaa\xef\xf1\x1f\xff\xed\x73\xf6\x31\x25\x22\x64\x19\x93\x59\x54\x32\xab\xc8\x2c\x63\x99\xcb\x14\x99\xe7\x21\x45\x2a\x76\x09\x99\xcb\x54\x48\x42\x54\xe6\x21\xc9\x1c\x91\xc8\x3c\x95\xcc\x53\x32\xa4\x4c\x91\xe9\x7f\xf9\xfe\xde\x3e\x57\xed\x3b\xfe\xfb\x75\x7f\x5d\xd7\xf3\x4c\xcf\xb5\xd7\xda\xeb\x9c\xf3\xe8\x98\xbe\x3f\x96\xb0\x7c\x3f\xbd\x57\x17\x01\xf8\x02\xac\x11\x85\xff\x46\xdc\x20\x2a\x81\x32\x0f\xfb\x11\x62\x4d\x5d\x3d\x5e\x7f\xdb\x12\x28\xfa\x29\x47\x3f\x2d\xa8\x88\x8c\x2d\x0b\x32\x12\xd3\xfa\xcb\x23\x00\x5f\x88\x35\xa2\xe8\xdf\x88\x9e\x92\xbc\xfa\x05\x8b\x92\xd5\xee\x9e\x26\x09\x9e\x86\xd8\x15\x3e\xeb\x63\x61\x06\xb9\xef\xf9\xff\xb0\x3d\x16\xc7\x1d\x3c\xae\x8a\x00\x7c\x11\xd6\x88\xd7\xa8\x5b\x67\x8e\x0a\x5e\x37\xac\x54\xd5\xf3\xe5\x22\xd3\xb5\xbe\x72\x8c\xea\x5a\xb4\x18\xb1\x69\x3d\x64\x9e\xb6\x8f\xe6\xef\xf5\xe0\x60\x47\x00\xfe\x35\xd6\x88\xe2\x7f\x23\xe6\xdd\xc8\x1f\x27\xa9\xd7\x41\x4d\x49\x33\x63\xae\x5f\x1f\x45\x38\xba\x10\x6f\x3e\xa7\xab\x7a\xc8\xfb\xa3\x5f\x6e\x91\xec\x89\x05\x02\xf0\xc5\x58\x23\xde\xfc\x1b\xc1\xf8\x01\x4f\x6b\x3c\x60\xda\x73\x94\x53\xa4\x2e\xae\xea\x67\x93\xe0\x54\xf4\x87\xdc\x08\x3e\x59\xdb\xb7\x0f\x23\x6a\x73\xc7\xce\x21\x00\xff\xe6\xbf\x95\x68\xaf\x7b\xe1\xff\x2b\x51\xc9\xbf\x8f\x47\xf4\x66\x1a\xeb\x3d\xb5\xf4\x56\x56\x19\xfa\x8d\xe9\xc2\x5a\xbe\xa7\xa6\x77\xbf\x59\x48\x9f\x6c\x5a\x7b\x9f\x90\x90\x7c\xfe\xcb\xce\xc7\xaf\x04\xeb\x53\x7e\xfb\x6f\x44\x5e\xe6\xfd\x4a\xb1\x9c\xfb\xaf\x92\xc4\x52\x64\x8d\x8e\xb3\x4f\xa8\xc4\xbb\x6a\x32\xe5\x7e\x90\xa2\xdf\xd4\x12\x88\x3d\xa4\x62\x84\x00\xfc\x5b\xac\x11\xa5\xa8\xcb\x84\x65\xa7\xdb\x7b\xca\x5e\x77\x3b\xff\x17\x94\xb4\x9e\x7d\x45\x05\x66\x97\x73\xc9\x88\x1a\xdd\x4b\x3e\x50\x5b\x74\xe3\x18\x2f\x22\x00\x5f\x8a\x35\xa2\xec\xdf\x08\x1c\xb8\x37\x63\x9d\x11\xb0\xd6\x39\xe5\xcb\x20\xfb\xf9\xae\x94\xba\xb5\xef\xcd\x8d\xbb\xfe\xac\xe7\xd8\xbf\x8d\x1d\xdb\xfc\x72\x12\x01\xf8\x32\xac\x11\xe5\xa8\x83\x53\xd5\x28\x8b\x1f\xc9\x62\x3c\x8e\x8e\x2c\x57\xeb\x85\x72\x12\xe4\x47\x93\x2c\x49\x7e\xe8\x04\x76\xef\x5f\xaf\x3a\xaf\xfd\xc6\x05\x01\xf8\x72\xac\x11\x15\xff\x46\x2c\xbc\x22\x9c\x7d\x21\x36\x55\xbc\x1f\xc0\x7c\x78\xe0\xa0\x96\x6d\x17\x43\x19\xa6\xf4\xa9\xbf\x86\x6a\x89\xfd\x6a\x57\x30\x33\x02\xf0\x15\x58\x23\x2a\x51\xdf\x57\x3d\x90\x2a\xf2\x35\x34\x1b\x9e\x75\xb4\x51\x6e\xa8\xea\x3f\xd9\x72\xb6\x87\xe6\x3b\xdd\xd6\x8d\xca\xb6\x57\x37\xb5\x45\x2e\xee\xec\xec\x2a\xb1\x46\x54\xfd\x1b\x31\x5c\x89\xd3\x17\x70\xe7\xd7\xbd\xab\x2d\x65\x34\x71\xa9\x45\x88\xf3\x4b\xc4\x90\x21\xf1\x84\xd3\x6c\x31\xb9\x22\x6b\xdd\x77\x7d\x04\xe0\xab\xfe\xdb\x61\xdd\x5e\xff\xe1\x89\x3a\xac\x73\xaa\x36\x75\x7e\x78\xeb\x42\xa6\x8c\x96\xa4\xc2\xc5\xf9\xa4\x80\xe7\xd0\x7e\x93\x9b\x7a\x7d\x9d\x26\xb7\xf1\x07\xaf\x7b\xd2\xfc\xfc\x6b\xe8\xea\x79\x1b\x8f\x59\x8f\xd0\x8a\x8d\xbe\x7d\x32\xfc\xa4\x9f\x04\x63\xd5\xba\x19\x22\x7f\x17\xaa\xde\xf0\xa0\xd3\x8b\x2f\x7d\x61\xff\xd7\x50\x96\xe1\x8b\x0d\xcb\x0f\x7b\x24\x9c\xd9\x0c\xdf\x79\x0e\x52\x5c\xab\x5e\x6b\xf8\x59\x82\x88\x8f\x79\x6f\xc6\x24\x6e\x9c\x69\xfd\xfb\x04\xae\x7f\x7d\x73\x3a\x31\x20\x28\x67\x58\xbe\xe6\x78\xf2\x95\xb7\x29\xc9\x03\xb5\x2c\xe7\xbb\xce\x1a\xc8\x7a\xfe\xe9\x71\x1f\x9f\xc1\xfd\xfd\x67\xc2\x5d\x77\x4c\xa3\x48\x9f\x27\x88\x9c\xf6\x10\x1e\xb4\x8b\x71\x5f\xde\x8f\xf3\x24\x0f\xd3\x8a\xa7\x29\xa6\x7d\xdf\xd9\x52\x39\xf6\xd7\x50\xa5\x2a\x49\x4f\xdf\xcb\x52\x51\x77\xe4\xc9\x64\xc2\x5f\x8f\xfb\xec\xeb\xc0\x91\x53\x0a\xcf\x95\xe8\x18\x38\xd1\x8c\x51\x30\xfc\xfd\x57\xaa\x6c\x1f\xed\x4f\x57\x0b\x08\x13\x1f\xad\x64\x7f\x5e\x4c\xed\x39\x29\xfd\xa3\x8c\x49\xe8\xe9\x97\x2d\xc5\x79\xda\xf3\x61\xce\x0e\xd2\x7f\xff\x5f\x6d\x12\x2c\x5f\xe3\xe3\x1a\xd2\xfc\x41\x4c\x77\xda\x30\x55\x53\x79\x93\x52\xb1\x95\x91\x6f\xee\x9d\xe6\xfd\x50\x0f\x1d\x7e\xb5\xff\x3b\xac\xdb\xeb\x55\xfd\xdf\x4c\x56\x8d\x3a\x87\xa6\x7e\xf2\xac\xa9\xb7\x96\xa9\x2c\xfd\x3a\x19\xcb\xd4\x13\x6a\xcb\x6f\x55\x7d\x7c\x1c\xb3\xa7\x2f\xfc\x0e\x99\x37\xe5\x2a\x37\x45\x00\xbe\x1a\xeb\xe7\xee\x1d\x6a\x0e\xe8\x2d\x98\x8f\xa7\x03\xbd\xdc\x54\xe7\x8d\xe3\x9d\xaf\xc6\xe6\x13\x44\x1b\x7a\xf7\x09\x1c\x77\xfb\x7d\x94\x64\xf4\xdd\xd8\xce\x85\xf4\x1d\xd6\x88\x1a\xd4\xbd\xed\x9c\xb7\xa7\x4f\xa6\x83\x3c\x85\xf8\xd0\x73\x90\x7f\x4c\x0d\xcd\x83\x7d\x7d\x56\x16\xb5\x5c\x7a\x5a\x2b\xda\x6f\xd7\x86\x20\x04\xe0\x6b\xb0\x46\xd4\xfe\x1b\x61\xd1\x4e\xb4\x7f\x43\x51\x7a\x9d\xc0\x12\xd6\x3c\x17\x66\xcc\xe4\x36\x4d\x29\xde\xac\x42\xdb\x30\xc2\xd7\xe1\x9d\xb4\xa4\xec\x8e\x00\x7c\x2d\xd6\x88\xf7\xa8\x23\xc7\xb6\x64\x0d\xf1\x12\xd6\xfb\x2a\x4b\xbf\x3a\x7c\x1f\x14\x7e\x28\x9d\xee\x0c\x19\xe0\x92\x5a\x2d\x6a\x38\x7b\xb8\x47\xde\xee\x04\x02\xf0\xef\xb1\x46\xd4\xfd\x1b\xe1\x27\xa6\xc8\xca\xf6\xa1\xd6\xaf\xf1\xeb\xba\xd1\x0d\x3b\x70\x3f\xbd\xbd\x36\x78\xc0\x93\x99\xab\x42\xfc\xae\x7b\x43\x73\xab\x38\x02\xf0\x75\x58\x23\xea\x51\xbf\x67\x78\x43\x32\x7d\x5a\x1d\x74\x50\x5c\x2c\x4e\x99\xcd\x3f\x6e\x92\xb0\xc9\x2f\x19\x6c\x80\x38\xb5\xe7\xd2\xd6\xb2\x88\xf1\x52\x21\x00\x5f\x8f\x35\xe2\xc3\xbf\x11\x39\x1e\x46\xab\x8b\xe9\x59\xa3\xbf\x0e\xec\x73\x24\x7a\x7c\xe0\xde\xe4\xda\x1a\xd5\xb7\x39\xd6\x61\x7f\x86\x87\xe7\x44\xbf\xe0\x77\x76\x69\x1f\xfe\xdb\x72\x60\xaf\xf9\xe6\x7f\x25\x6a\xf8\xf7\xf1\x68\x9e\x49\x32\x8d\x09\xb5\x67\x57\x3f\x38\xc4\x25\x85\xd4\x4f\x9b\xbe\x3b\xa1\x6b\x1c\xdf\x4a\x3e\x44\x22\x72\x87\xab\x5a\xda\x09\x01\xf8\x06\xac\x4f\xf9\xe3\xbf\x11\xdf\x9c\x65\xe7\xf3\xaf\x51\xcc\xd1\xea\x30\x51\x4a\x7f\x51\xfe\x61\xfa\xfe\xfb\x89\x4b\x1c\x4d\x85\x6c\xe5\x17\x63\xcf\xd8\x5d\x76\x45\x00\xfe\x23\xd6\x88\xc6\x7f\x23\x7e\xe6\x99\xab\x11\x8e\x52\x45\x9e\xbe\x9f\xdd\x4d\x5a\x1e\xc0\x39\x98\xcd\xaa\x51\x17\xcb\x69\x78\xfa\x94\x83\xc5\x88\xf7\xd4\xce\x25\xa8\x11\x6b\x44\xd3\xbf\x11\x17\x6d\x43\xa1\x45\xa7\x11\x9e\x82\x07\x54\xf2\x9a\x3a\x72\x9b\x37\x5e\x50\xc6\x3f\xb5\x78\x1b\xdc\x72\x44\xfc\xfc\x82\xe1\xa6\x32\x02\xf0\x4d\x58\x23\x3e\xfd\x1b\x71\xc6\x0c\xfa\x39\xca\xf2\x78\xaa\xe1\x5e\x21\x83\x5f\x44\xd0\xbd\x70\x88\x99\x74\x5b\xf7\x5c\xef\x3a\xe7\x79\xc6\x2f\xdf\x05\x3c\x10\x80\xff\x84\x35\xa2\xf9\xdf\x88\xa7\x2f\xa2\xbb\x6f\x1c\xe2\x8c\xe6\x6d\xee\x30\xbb\x35\x69\xf9\xe8\xf4\x53\x86\x19\x22\xda\x1b\x95\xbc\x77\xbc\xa2\xed\xe4\x54\x6c\x10\x80\x6f\xc6\x1a\xd1\xf2\x6f\xc4\xb8\x0f\x31\x23\x5b\xb9\xef\x27\x10\x6c\xd0\x2e\x27\x7b\x6c\x5c\xd7\xfa\xe1\x30\x9b\x56\xcc\xe8\x71\x0e\xa7\x3f\x4e\x4c\xf9\xac\x08\xc0\xb7\x60\x8d\x68\xfd\x37\x82\x37\xac\x20\xd5\x47\x9a\xf1\xcd\x6a\x1b\xed\x92\x8a\xb4\xb8\x86\xca\x8f\x21\xd9\x37\x1e\x07\x7b\x84\x64\x85\xf3\xbe\xb3\x22\x22\x08\xc0\xb7\xfe\xb7\x12\xed\x75\x25\xfe\x5f\x89\xda\xfe\x7d\x3c\x6d\x83\xc7\x82\xb5\x6d\x65\x57\xca\x7d\xae\x45\x67\xee\x1b\x5d\x9e\x66\xe4\xab\x29\x3d\xf4\x6c\xad\xac\xdf\x14\xb4\x2f\x7f\xdd\x79\x3c\x6d\x58\x9f\x72\x3b\xaa\x44\xd0\x9d\x63\x2b\xea\x62\xda\xe9\xf1\xe9\xe4\x3f\x5c\x43\xe8\xd3\x0f\xa7\xaf\xa7\x9a\xb3\xe8\x33\x35\xf2\xb8\xcc\xd3\x08\xec\x5c\xec\xda\xb1\x46\x74\xfc\x1b\xf1\x62\xac\xe0\x4f\x68\x53\xab\xec\xdb\x6d\x45\xc9\x1a\xe6\x0b\x46\x32\x01\xda\xe4\x77\xfd\xfb\x99\xf4\x8b\x8e\x1c\xd5\x68\xfc\x46\x86\x00\x7c\x07\xd6\x88\xce\x7f\x23\xfe\xd8\xcd\x3b\x44\xcd\xe1\x78\x91\xc5\xe5\x83\xc4\x56\xa3\x5d\xfc\x25\x2f\x7b\x0d\xf5\x1b\xe8\xcf\x96\xdd\xe7\x8e\xd8\xc7\xca\x8f\x00\x7c\x27\xd6\x88\xae\x7f\x23\x5c\x4b\x4f\xaa\xa6\x9b\x6f\x39\xdf\xaf\xca\xfa\x34\x48\x60\x75\xdf\xb6\xb1\x66\xbc\xe5\x45\x15\x77\x76\x8e\x85\x2a\xff\xd5\xc8\x05\x04\xe0\xbb\xb0\x46\x74\xa3\x7e\xcf\x10\xf3\x48\x1b\x17\xdd\xfd\x6b\xba\xb0\xba\xfd\xb9\x7c\xea\x3b\x73\x82\xde\x10\xd3\x62\x20\x55\xe2\x30\x43\xb6\xb8\x12\x8d\x18\x02\xf0\xdd\x58\x23\x7a\xfe\x8d\x90\x2d\xaa\x7e\x2e\x4c\x49\xb8\xc2\x50\xfc\xe2\x03\xdf\xd9\xc2\xe4\x87\xb6\xb9\x4d\x2e\x02\xf2\x81\xee\xde\x6d\x04\x85\xf1\x58\x19\x04\xe0\x7b\xb0\x46\xf4\xfe\x1b\x31\x93\xe7\x56\x7f\x82\xe5\x53\xeb\xab\x67\x73\x16\x7e\x35\x24\x87\x16\x5d\x8b\xc3\xa2\xcb\xee\xb5\x29\x65\x31\x39\x1c\x76\x0a\x16\x42\x00\xbe\xf7\xbf\x95\x68\xaf\x35\xea\xff\x4a\xf4\xf9\xdf\xc7\x73\x9e\x7f\x54\x9d\x73\x98\x82\x7e\xa6\xaf\x5a\x2d\x6a\xe8\x5b\x6b\x05\x43\x70\xcc\xfc\x37\xb2\xb9\xd7\x4d\xb9\x51\x44\x1e\xe7\x49\x11\x80\xff\x8c\xf5\x29\x7f\xf9\x37\xa2\xec\x45\x77\x7f\x10\x7f\x71\x9c\x6a\xbb\xc5\xac\xfc\x8a\xef\x30\xbf\x57\xce\xb7\x32\x69\x24\x4a\xf2\xae\xff\x98\xaf\x5b\xc5\xce\x42\xe8\x0b\xd6\x88\xbe\x7f\x23\xc8\x73\x23\x48\x07\x5b\xab\x14\x7f\x09\x58\x9e\x21\xcd\x0f\x35\xbc\x62\x98\x1f\xef\x7c\x42\x97\xe4\x45\x82\xa7\x8e\x92\x80\xed\xce\x27\xbc\x0f\x6b\xc4\xd7\x7f\x23\xb2\xf8\xc5\x91\x31\xae\x14\x0e\x1b\x67\x42\xbe\xd2\xbc\xf0\xd1\xd2\x33\x62\xaa\x54\xf1\x42\xfc\x87\x5d\xd2\x68\xf5\xed\xa9\x1d\x11\x80\xff\x8a\x35\xa2\x1f\x75\x6e\x9f\x6d\x5b\xe8\x3b\xb1\x1c\x95\xf1\xe9\xca\xc5\x3a\x2a\x91\xf2\x6e\xfb\x5f\x2c\xa4\x9b\xd7\xdb\x15\x67\x3e\xce\xb0\x10\xd7\x69\x23\x00\xdf\x8f\x35\x62\x00\xb5\xd6\x12\x9e\x3c\x27\xd6\xa0\xad\xc1\xa9\xfb\x7e\xc8\xf6\x16\x17\xb7\x96\xa2\x71\x98\x6f\x52\x44\x4d\x86\xc8\xd7\xc8\xda\xfe\xc7\x3b\x7b\xdf\x01\xac\x11\x83\xff\x46\x74\x8b\xad\x3f\x76\x65\x2b\x5c\x62\xd6\x10\xb5\xe4\xea\xaf\xb5\x76\x9f\xc4\xd7\xff\x49\x15\xeb\x34\x50\x34\x27\x9a\x9e\x99\xde\xb9\xd8\x0d\x62\x8d\x18\x42\x7d\xdd\x96\x0b\xa9\xc9\x4a\x97\x5e\x37\x3e\x55\x5d\x55\xb9\xdc\xa7\x57\x55\xab\x57\x27\xc2\xda\x58\xa4\x47\x14\x82\xab\xa5\xbd\xa5\x88\x00\xfc\xd0\x7f\x2b\xd1\x5e\xbb\xb7\xff\x95\x68\x18\xf5\x7b\x86\x99\xc4\x9e\x75\x4e\xa1\x87\x47\xe4\x98\x26\x89\xc2\xa2\xae\x26\x08\xf0\x48\xe7\x37\x1e\x62\x29\xce\xf5\xb2\x35\xc9\xf9\x7f\xff\x0d\x31\x8c\xf5\x29\x8f\xfc\x1b\xc1\x32\x7e\x63\x26\x5a\xcd\xd6\x1b\xe7\x35\xbf\x28\x56\x2f\x03\x2d\x8a\xf5\xe3\x34\x7c\x52\x3c\xa6\xbd\x3f\xcf\x11\x66\xb3\x55\x10\x80\x1f\xc1\x1a\x31\x8a\xba\xb9\xf8\x8e\xff\x1e\xa9\xa6\xc6\x28\x7f\xbc\xd9\x61\x85\x19\xcf\x58\xa6\xc6\x4f\x24\xb2\xa1\x49\x2b\x27\xad\x56\xaa\x62\xc9\xb3\x45\x11\x80\x1f\xc5\x1a\x31\x86\xda\x13\x01\xdf\xae\xc5\x9f\x2f\x8d\xfb\xc3\x1b\x6e\xfc\x19\x79\xf0\x7e\x6e\x26\x28\xb2\x62\xf3\xa0\x5a\xcf\x4b\x6f\x57\xf5\x0d\x89\x9d\xdd\xc4\x18\xd6\x88\x71\xd4\xa1\xfa\x0d\xbb\xad\x05\xf8\xe1\xab\x87\x62\x3f\x57\xdc\xb5\x14\xaf\x1f\x4e\x50\xd0\xd6\xe9\x74\xde\x7e\xa6\x67\x1b\xd1\xf2\x5c\xf5\x2c\x02\xf0\xe3\x58\x23\x26\xfe\x8d\x68\x38\x40\x21\x20\x10\x57\xed\xac\x5c\x54\x7e\xbb\xc3\xd3\x3e\xf6\xc2\x14\x73\x2c\xe2\x11\x2a\x73\xe5\x5e\xd6\x61\xeb\x9f\xda\x47\x10\x80\x9f\xc0\x1a\x31\xf9\x6f\x84\xd1\x9c\x40\x7d\x48\xf0\xbb\xb8\x65\x0a\x76\x79\xe1\x6d\x56\xee\xf0\xe6\x6d\x23\x51\xa1\xb4\x03\x8d\x5b\xca\xc7\x25\x72\x7e\x9d\x43\x00\x7e\x12\x6b\xc4\xb7\x7f\x23\x7e\xa5\x2a\x5b\x8d\xe5\x5d\xbc\xb4\x4d\x2d\x70\x3f\x4a\xed\x32\x47\x3e\x61\xd4\x26\x57\xd4\xb4\x46\x39\xef\x5e\x56\x3b\x7d\x3c\x37\x02\xf0\xdf\xfe\x5b\x89\xf6\xba\xaf\xf1\xbf\x12\x4d\xfd\xfb\x78\xce\xd6\x4f\x4b\xf0\xd5\x08\x77\xdc\x76\xed\xf9\x35\xe9\x7e\xf7\xe0\xbd\x36\xf1\xe8\x40\xc1\x8f\x74\xd1\xda\xda\x6a\x61\x75\xc5\x0a\x08\xc0\x4f\x61\x7d\xca\xdf\x51\xdf\xbd\x02\xdd\x1e\x21\x56\x61\xdb\x93\x38\x5a\x03\x8e\xa8\x87\xb2\x95\xf7\xcf\xbe\xf7\x74\x50\x3b\x3d\xe4\xf0\xfa\x48\x54\xaf\xf3\x21\x04\xe0\xbf\x63\x8d\x98\x46\x7d\xa5\x88\xca\x87\xf0\xe4\xe5\xab\xd5\x2e\x7f\xaf\x93\x77\xdb\xe5\x0c\x9d\x4b\x4f\x8f\x72\x71\x2c\xae\x7a\xb3\x49\xc5\x3e\x65\x22\xd9\x59\x31\x4e\x63\x8d\x98\xf9\x37\xe2\x26\x12\x3b\x6a\xa3\x6c\x2e\x7d\x8f\x59\xcc\xac\xed\xe6\x02\x11\x92\x3e\xe1\xb0\x1e\xf9\xac\xa8\xe3\xc4\x57\xb2\x43\x43\xfc\xb6\x08\xc0\xcf\x60\x8d\x98\x45\x9d\x96\x18\xc7\x9b\x25\x37\x68\xc5\x4c\x06\xc8\xca\xfa\x70\x48\x4c\x16\x46\x69\x87\x75\x37\x3f\xdb\x50\xe9\x20\x95\x5a\xfe\xa8\x79\x0a\x01\xf8\x59\xac\x11\x73\xff\x46\xc8\xb0\x70\x86\x50\xbd\x7e\xaf\x55\x1d\x60\x0e\x99\x1c\x5f\xa8\x1d\x6d\xd4\xe5\x2a\x2d\xa3\x88\xc3\x17\x1d\xef\x38\xbe\x9c\x40\x8b\x00\xfc\x1c\xd6\x88\x1f\xff\x46\xa4\xb7\x7e\xe9\x4e\x38\x74\xb2\x68\x5e\xe0\x2c\xd3\xf7\x30\xf9\x59\x77\x37\x02\x55\x4a\x81\xc1\xca\x8f\x97\x46\xe3\x8c\xe3\x01\x92\x08\xc0\xff\xc0\x1a\x31\x8f\xba\x8f\xb4\xdc\xa5\xeb\xbd\xfc\x63\x5a\x59\x60\x90\x43\xd2\x2b\x92\xfd\xe8\xdb\x23\xf4\xea\xa5\x07\x1a\x59\x0e\x68\x09\xde\x5b\x0a\x67\x47\x00\x7e\xfe\xbf\x95\x68\xaf\x3b\x7e\xff\x2b\xd1\xcf\x7f\x1f\x8f\x97\xdf\x70\xca\xa4\xe4\x61\x59\xae\xb7\xf5\x0d\x6f\x9a\xc6\x1d\x53\xdf\x30\xe5\xc6\x55\x58\x25\x7b\x22\x62\x75\x14\xa1\xdc\x96\x08\xc0\xff\xc4\xfa\x94\x7f\xa1\x5e\xd5\x4a\x5e\x87\x34\xce\xc8\xf7\xa3\xdb\xb4\x5e\x89\x2e\x6a\x54\xcf\x0d\x35\x68\x6e\xf6\x43\x07\x34\x4f\x28\xf6\xec\x53\x9b\x71\x42\x00\xfe\x17\xd6\x88\x05\xd4\x91\xa3\x8a\xfc\x2f\x77\x92\x2d\xaf\x7d\xe5\xcf\xbe\x50\xc5\x3f\xd8\x24\x92\x58\x1e\x5c\xc9\x8d\xef\x58\x48\x10\x0d\x2f\xcb\x52\xa3\x47\x00\x7e\x01\x6b\xc4\x22\xea\xeb\xdb\x2a\xcf\xdf\x29\xf3\xaa\x74\xab\x71\xb6\x15\xaf\x78\x10\x7b\x84\x3c\x60\x7d\xf6\xfe\x9c\xb0\x66\xd4\x69\xa8\x58\x71\xe6\xd6\x7e\x04\xe0\x17\xb1\x46\x2c\xfd\x1b\xf1\x28\x57\x25\x4f\xfd\xe9\xe6\xd9\x10\x5e\x89\xd7\x3e\x1e\xaf\xbf\xd0\x7c\x5b\xa0\x15\x55\xba\xcf\x69\x51\x9b\x36\x64\x46\xe2\xb9\x73\xc9\x5e\xc2\x1a\xb1\xfc\x6f\xc4\x5b\xae\xb6\xa9\x87\x15\x42\x8e\xfb\x68\xbc\x8a\x16\x47\x4b\x5d\x4e\x4e\x3f\xed\x67\x1c\x4f\xb2\xe1\x19\x28\x16\xb2\xfa\xb4\x68\x85\x00\xfc\x32\xd6\x88\x15\xd4\x37\x3d\x95\x6e\xf3\x05\x69\x27\x91\xa7\x06\xc8\x4a\xd4\xc4\x58\xdf\x7a\x00\xea\x3d\x0f\x13\x55\xf5\xae\x1e\x26\x2e\xfd\xae\xb9\x4a\x84\x00\xfc\x0a\xd6\x88\xdf\xff\x46\x3c\x69\x3f\x3e\xc9\x19\x23\xa2\x69\xfd\xa3\xad\xff\xcb\x85\x60\x15\xc2\x5a\x88\xcb\x28\xc9\x2d\x17\xe4\x66\x8f\xcd\x45\x62\xf6\x9d\x3d\xc8\xef\xff\x56\xa2\xbd\xee\x85\xff\xaf\x44\xab\xff\x3e\x9e\xe9\x67\x8e\x45\xd2\x9c\xfb\x3c\x4d\x19\x7f\x36\xc9\x5f\xb7\x69\x24\xb9\x7f\xc9\xf4\x52\x53\x89\x8f\xc0\x47\x3c\x65\x46\xff\x67\x59\x04\xe0\x57\xb1\x3e\xe5\xb5\x7f\x23\x5e\xfd\x56\x7b\xfb\x95\x22\xf7\xe4\xd1\xae\xc8\x9f\x04\x11\xad\x85\xaf\x9f\x72\x2e\x87\x1c\xaf\xf8\x26\x63\xe7\x31\xc7\xff\xf2\xdc\x45\x04\xe0\xd7\xb0\x46\xfc\xf9\x37\xc2\x9f\xa6\x4b\x8b\xe4\xcd\x53\x64\xe6\x9d\xfb\x06\xd1\xf9\xf4\xf8\x0b\xba\x66\x43\x05\x77\xbe\x9f\xab\x7d\xb0\xf8\x7b\xb3\xf9\x0b\x0f\x02\xf0\x7f\xb0\x46\xac\xff\x1b\x91\x36\xc8\x3d\x9e\x35\x2f\x3f\xd6\x77\x3b\x62\xdc\xbf\xe5\x4a\xbb\x77\xbc\x73\x81\x51\xf0\x1a\x4b\x14\x4f\x8b\x44\x6e\xae\x16\x1f\x02\xf0\xeb\x58\x23\x36\x50\xab\x82\x07\xb2\x4b\x05\xc5\x92\x71\x5c\x15\x22\xb4\x89\xa6\x97\x4c\x39\xdf\x11\x49\x36\x33\xcf\x0c\xc2\x1c\x4f\x6e\xc9\xb6\xfe\xbf\xef\xb9\x6f\x60\x8d\xd8\x44\x7d\x5f\xb5\xf3\xdb\x62\xd7\xe7\xe7\x8d\x35\x5d\x5e\x22\x77\xf2\x0e\x45\xa8\x91\x8a\xd5\x7d\x3a\x61\x74\x48\xf5\x79\x2c\x49\x3b\xfb\x97\x9d\x9d\xdd\x26\xd6\x88\x2d\xd4\x49\x1a\x65\xa5\x84\x8d\x94\xe8\x7c\xd2\xb8\x67\x25\x6c\xb9\x3d\x94\x2a\xe7\x9d\x62\x27\x31\xa4\x70\x29\xea\x96\x2d\x9d\xb7\xd9\xce\x27\x6a\x0b\x6b\xc4\xf6\xbf\x11\x02\x0f\x97\x6d\x2a\xf5\x73\x44\x82\xa1\x0c\x91\x2b\xce\xd9\x96\xca\x06\xf7\xbc\xe7\x7c\xbf\x74\x9d\x3c\xb8\x16\x69\x7e\xb1\x5c\x17\x01\xf8\xed\xff\x76\x58\xb7\x97\xa2\x87\x3a\xac\x4b\x5f\xda\x7a\x43\x4c\xff\x5c\x50\x91\xce\x46\x50\x53\x23\x8f\x62\xf8\x7a\x46\xc0\xa1\xe9\x4d\xe6\x0c\x76\x41\x07\x83\xbe\x95\x37\x7f\x0d\xd5\x71\x82\x36\xf2\xa9\x14\xaf\x64\x5c\x29\xa2\x36\x64\xba\x64\x70\xff\x45\x53\x45\x54\x9a\xbd\xc9\xc7\x0c\x55\xe8\xe7\xf8\xa5\xad\xbf\x86\xde\x54\x9f\x9e\xbe\x3c\x19\x4d\xa5\xc6\xc0\xe2\xe2\xf7\x26\x91\xab\xfa\xc5\xa5\x4c\x23\xc9\x58\xcb\xb9\x96\xcf\x74\x8e\xe5\xd7\xff\x06\xe7\x6a\xd7\xb5\xa5\x7c\xdb\xbb\x1c\xde\x14\x37\x30\xad\xa6\xe2\xcc\xb7\x6f\xb7\x92\xd2\x44\x73\x26\x3b\x65\xad\xab\x05\xae\xc2\x7f\x23\xa1\x1a\x67\x75\x1a\x13\x37\x4d\x0a\xd7\x54\xc9\x48\x85\xb3\x43\x9f\x1e\x8b\x77\x92\xdc\xff\x28\xdf\x32\xcc\x9f\xf6\xcc\x63\xb6\x3b\xad\x7f\x0d\x8d\xb5\x6b\x58\xf4\xbb\xf3\x9a\x94\x81\xa3\xe5\x08\x07\x4f\xd6\xf9\x12\x3e\x89\x2b\xb4\x41\x8d\x9e\xf0\xbd\x8d\xcc\xd1\x4a\xd0\xff\xf7\x8f\xf0\x98\xab\xae\x8c\x77\x96\x97\x4e\x5b\x35\x3c\x55\xd9\x4f\xd2\x24\xea\x38\xee\xac\x25\xc9\xad\x6c\x5d\xab\x74\xb8\x6d\x72\xee\xc3\xdf\x8c\xdd\xa5\x41\xb9\xf5\xde\x0d\xf1\x43\x39\xcd\x1f\xe3\x95\xf6\x6b\x46\x71\xa8\x03\xf2\xa9\xdb\xdc\x37\xef\x3e\x2e\x19\x32\xa3\x0d\xf4\x6b\x22\xfe\xff\xef\x55\xfd\xff\x66\x32\x00\xa1\x74\xba\x89\x89\xa6\xd0\xc7\x11\xe4\xb6\xa9\x94\x15\x53\x9a\xd4\x6f\xc6\x73\x45\x0c\x8e\xa9\x7f\xee\xd4\x8c\xff\xea\xf4\xe3\xd4\xfa\x12\x19\x02\x60\xac\x3a\x1d\x80\x50\x3e\x9d\xec\x4c\x61\x13\x9b\xd8\x5c\x46\xfa\x93\x1e\xee\x49\x1b\xce\x11\xa3\x99\xa0\x6b\x79\x9e\x0a\x41\xf1\x97\x1a\x65\xe4\xad\xd4\x79\x10\x00\x63\xf5\xe9\x00\x84\x12\xea\xfc\x8e\xaa\xd1\x53\x9c\xb5\xb6\xd8\x1f\xa3\xd6\xc4\xfc\xa2\x28\xf4\xa3\xbc\x9c\xe8\x48\xa1\x13\xe4\x50\x04\xff\x0c\x54\x9c\x36\x46\x00\x8c\x55\xa8\x03\x10\xca\xa8\x73\x31\x98\x73\x7c\x74\xe4\xf0\x55\x23\x53\xea\x32\xd3\xc8\x8f\xed\xb5\xcb\xa4\x01\x29\x31\xbd\x7a\x06\x94\x87\x2c\x5f\xc7\xde\xd4\x46\x00\x8c\xd5\xa8\x03\x10\x4a\xa9\xb3\x7b\xf1\xf3\x8a\x88\x60\x2e\x74\xf4\x39\x03\x55\xdc\x49\xc6\x9c\x92\xdc\x6b\x02\x20\x54\x95\x70\x3f\x4b\x84\x4f\x41\xf8\x0b\x0b\x02\x60\xac\x4a\x1d\x80\x50\x4e\x1d\xf3\x05\xea\x84\x7c\xd6\xb0\x0f\x75\xf3\x37\x9e\x17\x0d\xdf\xc2\x31\xb6\x1b\xc6\x08\xc4\x50\x25\x74\xb6\x64\x8c\x76\x4a\x2f\x1b\x20\x00\xc6\xea\xd4\x01\x08\x25\xd5\xd5\xe8\xd6\x1c\x5e\xd2\x2d\xa7\x3f\x31\xfa\x55\x52\x25\x49\x49\x08\x97\x91\xfa\xd4\xae\x62\x68\x89\x83\xf7\x0d\xaf\x36\x47\x29\x0e\x01\x30\x56\xa9\x0e\x40\x28\xab\x6e\xb0\xeb\xc1\xd4\x7d\x8e\x89\x27\x67\xdd\x2a\xd2\x7f\xcb\x5d\x92\x7e\x7e\x30\x49\xdd\xc8\xc0\x83\xe7\x4b\xeb\xc5\xcb\xfa\x4f\x2b\x54\x10\x00\x63\xb4\xea\x76\xcb\xb4\xd7\xbc\xb3\x5b\x26\x94\x56\x37\x18\x6c\x3d\x53\xd3\xd3\x49\xb2\xd0\x7d\xec\xe1\x45\xeb\x9e\x9e\xf0\x73\xaa\xb7\x4e\xdc\x3c\x18\x6b\xa4\xfc\xaa\xe0\xc1\x8a\x06\x1b\x02\x60\xac\x5a\x1d\x80\x50\x5e\xdd\xfb\x07\x3c\x14\xdc\x0e\x92\x8b\x4b\x7a\x87\x95\x5d\xc6\xe8\xb9\xa3\x4d\x52\xdc\x0e\xce\xe9\x3e\x76\x51\xf5\xfc\x31\x39\x7a\x99\x0b\x01\x30\x56\xaf\x0e\x40\x28\xb1\xee\xc1\xb1\xb1\xb5\x5f\xec\xce\x35\x5f\x3a\x1e\x92\xe4\x58\x0f\x65\xad\x85\x2f\xb9\x65\x56\x23\x2d\x30\xef\xeb\x97\x2f\x2e\x38\x92\x22\x00\xc6\x2a\xd6\x01\x08\x65\xd6\xe5\x34\xf8\x9c\xf3\x74\xe8\xd5\x22\xd9\x92\xb6\xf7\x29\xd2\x1b\x58\x9c\xbd\xa0\x3b\x57\xcf\x19\xa2\x84\x8f\x17\xd7\xa0\xcf\xb2\x47\x00\x8c\xd5\xac\x03\x10\x4a\xad\x23\xfa\x2c\x17\xfd\x48\x4b\x5b\x72\x34\xb2\x7a\xd0\xd5\x2b\xae\xc1\x95\xb7\xd8\x68\x59\x33\xd6\x70\x81\xd5\x9a\x63\xfb\xe4\x79\x3a\x04\xc0\x58\xd5\x3a\x00\xa1\xdc\xba\x9c\x03\xfb\x18\x5a\x27\x18\x79\xce\x33\xf4\x06\x29\x2f\x8c\xea\x3c\xb7\xd3\xb6\x9e\x4f\x24\xf1\x71\x24\x9a\x18\x96\xa0\xaf\x10\x43\x00\x8c\xd5\xad\x03\x10\x4a\xae\xe3\x53\x8f\xc9\x10\xbb\x74\xf5\x35\xc5\x0b\x09\x35\xe1\x92\x19\xa7\xd1\xa1\xdc\x64\x9b\xda\xca\x98\x2c\xcf\x3a\x71\xf7\xf7\x8f\x77\x5e\x2b\xac\x72\x1d\x80\x50\x76\xdd\x32\xef\xa0\xc3\x9d\xbe\x97\x02\x62\x63\x66\x6f\x42\xc5\xcb\x47\x9a\x41\x5d\x51\xba\xe9\x99\x92\x98\x63\x7e\x4e\xc7\xa9\x56\x14\x11\x00\x63\xb4\xeb\x76\xcb\xb4\xd7\x95\x79\xb7\x4c\x28\xbd\x4e\xfc\x4f\x7f\xb5\x73\x07\x85\x16\x55\x65\x65\x32\x13\xd5\x49\xb7\x47\xb4\xfe\x13\xf7\x03\x83\xe9\x44\x63\xd5\x48\x8e\x0d\x19\x9a\x23\x00\xc6\xaa\xd7\x01\x08\xe5\xd7\x9d\x20\x9a\x7b\x50\x73\x70\xdf\x17\xfa\x51\xcd\x18\x4d\x56\xc3\x79\x06\xa3\x2b\x7a\x9a\x74\x93\xf6\x9e\xa7\xc4\xbe\x77\xf6\x73\x1a\x22\x00\xc6\xea\xd7\x01\x08\x25\xd8\xf5\x4d\xe6\xe4\xb1\xde\x0e\xe1\xdd\x6f\x24\x72\xea\x31\xc7\x30\xb3\x67\x4e\xb1\x43\x29\x4b\x79\x88\xd5\x35\x5c\x2e\xdb\xdc\x07\x5a\x04\xc0\x58\x05\x3b\x00\xa1\x0c\x3b\xc3\xe8\x84\xae\x94\x3c\xf2\xec\x96\x8c\xd0\x45\x82\x51\x5d\xf2\x77\xf7\xd6\x66\xaf\x6c\x81\xa8\x39\xd5\xbc\x90\x66\x26\x7d\x1a\x04\xc0\x58\x0d\x3b\x00\xa1\x14\x3b\x46\xd5\xba\x4b\x9a\x77\xdd\xb5\x36\xef\x06\x1f\xd7\x56\xfd\x55\x6f\x87\xb7\xfd\x46\x9e\x74\xbb\x43\x8b\xf1\x7c\xfa\x86\x77\x27\x03\x02\x60\xac\x8a\x1d\x80\x50\x8e\x1d\x33\xb7\x86\xd9\x33\xbf\x98\x63\x95\x9f\x5b\x5f\x9d\x15\x0e\x0f\x8c\xa2\x15\xb8\xaa\x9d\xc9\xdd\x58\xc5\xdd\x49\xe7\xb0\x66\xe2\x8a\x00\x18\xab\x63\x07\x20\x94\x64\xf7\x82\xfa\xd6\x73\x69\x2a\xa1\xfd\x5f\x07\x46\xf3\xaf\x4a\xae\x7c\xe3\x6e\xcc\x23\xad\x70\x8c\x13\x80\xa8\x96\x5f\x2e\xfa\x0a\xc1\x08\x80\xb1\x4a\x76\x00\x42\x59\x76\x46\x57\x73\xa9\xde\x0b\x55\x7f\xd5\x08\x59\x1b\xae\xf2\x8e\x2d\xba\x72\xfd\x97\xbf\xc0\x03\x7c\xeb\xfd\x25\xcf\x75\x8e\xf2\x8d\x9d\xd5\x08\x46\xcb\x6e\xb7\x4c\x7b\xad\x5d\x77\xcb\x84\xc2\xec\xa2\x6e\x3e\x7e\xc6\xbe\xb2\xdd\x3c\x70\x6d\xf6\x89\xeb\x1c\x07\xa3\x2e\x6e\xbe\xdb\xb0\xa0\x3d\xfb\x08\xa9\xec\x4d\xdb\x60\xef\x4b\x08\x80\xb1\x62\x76\x00\x42\x69\x76\xbc\x17\x03\xf9\xfd\xe2\xd2\xf2\xc7\xed\xbb\x33\x8e\x2f\xdc\xb5\xac\xbb\x23\x43\xb3\xe8\x19\x34\x56\x78\x32\x6f\x25\x2a\xff\xd9\xce\x4c\x88\x55\xb3\x03\x10\x8a\xb3\x73\xf2\x0b\xba\xf4\x4c\x45\xd4\x2f\x6b\xf3\x55\xd5\x85\xcc\x7c\xbc\x3a\xf7\x53\xcf\x91\xcc\xfa\x81\x7c\xd6\x41\x2f\x7b\x63\xad\x9d\x2b\x2c\x56\xce\x0e\x40\x28\xcf\x2e\xf9\xd1\xd1\x0c\x2d\xe2\x89\x5c\xed\xf2\xe2\x21\x81\xdf\xd3\x85\x87\x9f\x8b\x28\xa8\x28\x4e\xa7\x5a\x4f\x5c\xdd\x94\x1f\x66\x93\x43\x00\x8c\xd5\xb3\x03\x10\x0a\xb4\x63\xb9\xa1\xe6\xd2\x44\x29\xf0\xf1\xd0\xfb\x62\x6f\x7e\xae\x4d\xc2\xbb\xd3\xf6\x6f\x64\x2e\xfa\x72\x3f\xcf\xd3\x9b\xf1\xf6\xba\x79\x01\x01\x30\x56\xd0\x0e\x40\x28\xd1\x2e\xcf\xef\xd0\xa5\x1c\x02\xd5\xc7\x80\x10\xed\xf1\xa4\x3b\x94\x96\x54\xb7\xde\xc3\x35\x99\x87\xa0\x80\x4a\xc9\xb1\xab\x48\x19\x09\x02\x60\xac\xa2\x1d\x80\x50\xa4\x1d\x71\xe4\x8f\x8d\x37\x05\x56\xd6\x53\xdd\x97\x54\x97\xec\xff\x1c\x1e\xe1\x56\xcb\x1d\xb9\x42\x43\xb8\xb3\xee\xd6\x58\x1b\xef\x74\x0a\x01\x30\x56\xd2\x0e\x40\x28\xd3\x2e\x43\xf3\x98\x74\x58\xd8\x81\x56\x49\xde\x72\x10\xa7\x73\xc8\xfa\x83\xad\x61\x7f\x05\xbb\x7a\xc5\x6f\x4b\x6b\x45\x77\xee\xdb\x3b\x57\x3f\x8c\xa6\xdd\x6e\x99\xf6\xda\xdd\xed\x96\x09\x85\xda\x49\x6d\xbd\x1a\xdc\x92\x2c\xea\x4f\xbb\x20\x4b\x95\x26\xc2\x56\x9c\x46\xfc\x01\x7f\xc0\xca\x6a\x86\xea\x49\x9b\x6d\xd6\x75\xa2\x9d\x75\x27\x56\xd4\x0e\x40\x28\xd5\x6e\x70\xff\x3a\x2b\xd7\x3d\x56\x65\x96\x93\x8b\x01\x67\x09\x8c\x97\xb4\xf6\xb3\x05\x7a\x68\x45\xb2\x5d\xd0\xc7\x8f\x06\x24\x8b\x1c\x44\x00\x8c\x55\xb5\x03\x10\x8a\xb5\x5b\x7d\x7b\x43\xf8\xb8\x2d\xe9\xb5\x38\xe7\x70\xd9\x67\xa5\xcf\x72\x32\xdc\xee\x31\xfb\x3c\x9a\x13\xa7\x47\xe2\x25\x24\xf9\xcf\xbb\x23\x00\xc6\xca\xda\x01\x08\xe5\xda\x05\x77\x52\xc7\x4f\x86\xff\x1c\x4c\xa8\x3c\x20\x72\x3e\x47\x86\xfa\xf4\xc3\xe7\x8e\xbd\x6d\x17\x4c\xa5\x9f\x14\x2a\xa7\x06\x6d\x68\x20\x00\xc6\xea\xda\x01\x08\x05\xdb\x9d\x54\xe4\x53\xbb\x2a\xbc\x74\x37\xed\x7e\x28\xd3\xbb\x13\xda\x74\xf8\x74\x49\xe6\x0a\xa3\xae\x88\x0b\x97\x4d\xbe\x34\x82\x84\x13\x08\x80\xb1\xc2\x76\x00\x42\xc9\x76\xf5\x13\x6d\x4b\xde\x46\x59\xc2\xdf\xf9\x57\x5b\x32\xbf\xd7\xc0\x2d\x1b\xad\xa6\x2c\xa9\xc5\x17\x8a\x4f\x6c\xeb\x86\xb4\x33\xd8\x22\x00\xc6\x2a\xdb\x01\x08\x45\xdb\x7d\x4c\xa1\xba\xff\x5d\xb7\x74\xa2\x40\xfc\x26\x45\x54\xa8\x80\xf8\x91\xba\x94\xa5\xd7\x73\xf0\xa6\xa2\xda\xc7\x0d\x5d\x84\xf7\x08\x02\x60\xac\xb4\x1d\x80\x50\xb6\xdd\x45\xd1\x93\xef\xe8\x94\x1f\xd0\x7b\xbe\x61\xdb\xf6\x83\x6b\xe7\xce\xbe\x57\x5c\xd3\xb4\x13\x59\x39\x3b\x6d\x99\x4b\xb2\x36\x71\x08\x01\x30\x46\xdb\x6e\xb7\x4c\x7b\xdd\xff\xd8\x2d\x13\x0a\xb7\xfb\xb3\x5f\xac\x6f\xcd\x8c\xf0\x50\x8c\x32\x84\x6d\x68\xf3\xbb\xbd\xbe\x4a\xd2\xa0\xd6\xf5\x92\x89\x7d\xf6\xdb\x7e\x07\x9d\xe7\xc5\x11\x00\x63\xc5\xed\x00\x84\xd2\xed\x3e\x45\x01\xb5\x91\xfe\x0b\x4d\xf4\x76\x24\x67\x8e\xee\x33\x7f\x2f\x1f\x77\x93\x3f\x45\xe4\x06\x83\xaf\x47\xb6\xb0\x7e\x29\xf5\xce\xc6\x1d\xab\x6e\x07\x20\x14\x6f\x67\x1f\xf8\x28\x97\x32\x13\xb1\x50\xbf\x66\x2c\x10\x4e\x75\xd8\x60\xa8\xbb\xe4\x88\x42\x61\xe9\x5a\x99\xf5\x49\x87\x48\x7c\xa2\x12\x02\x60\xac\xbc\x1d\x80\x50\xbe\x1d\x23\x91\xe2\xa9\xe3\x17\xf5\xce\x17\x55\xab\x7a\x9f\xfa\x91\xcb\xb5\x75\x2e\xb0\xec\x68\x47\xd6\x8d\xb2\xf4\x8e\xa4\xc8\xd7\x01\xd4\x08\x80\xb1\xfa\x76\x00\x42\x01\x77\xe3\x02\x44\x42\x11\x0b\x1d\xb3\x09\x7e\xc1\xfb\x5d\xb8\x53\x46\x9d\x6e\x95\xe1\x7c\x26\x7f\xaf\xab\x49\x68\x65\x73\xf0\x35\xee\x7c\x40\xb0\x02\x77\x00\x42\x09\x77\x3c\x8a\x6d\x7d\x5c\x38\x66\xa7\xbe\xbe\x33\x17\x92\xaf\x3c\xb5\xf0\x77\xca\xbf\x2f\xf3\xd3\xe9\x54\xfe\xd1\xa1\xbb\xd1\xfa\x5c\xfa\x08\x80\xb1\x0a\x77\x00\x42\x11\x77\x8c\x72\x15\x2f\x8a\x89\x84\xc2\x6c\x9b\x5a\x3f\xc0\xbc\x27\x36\x7e\xc8\x3e\x2e\xa5\xa6\xfd\x9d\x5b\xc1\x7f\xf9\x64\x2e\xa5\x88\x20\x02\x60\xac\xc4\x1d\x80\x50\xc6\xdd\xc7\x01\x1f\xfb\x58\xc5\x70\x8a\x1e\x1e\xfd\xaa\xc7\xa1\xd6\x94\xf1\x4c\xb2\x3d\xdc\x91\xf4\xe9\x73\xa5\xde\x83\x29\x97\x5b\x76\x56\x0a\x18\x8d\xbb\xdd\x32\xed\x75\x87\x70\xb7\x4c\x28\xe4\xee\x68\x6a\x9c\x9e\x0e\xe4\x6e\xd8\xa0\x90\x82\x2c\xa6\x45\xb0\x39\x1f\xbd\xf6\x28\x4c\xd7\xe2\xc6\x81\x17\x2d\xc0\x93\xd6\x41\x0b\x01\x30\x56\xe4\x0e\x40\x28\xe5\xee\xc8\x68\x55\x22\x57\xcc\x01\xd3\x7b\x9f\xc6\x19\x54\xc9\xc9\xef\x31\xcd\x1d\xca\xa0\x6a\x34\x24\x72\x55\xe3\x6d\xde\x26\xd9\xde\x79\xd2\x58\x95\x3b\x00\xa1\x98\xbb\x07\x1d\xda\xb8\x47\xf3\x6c\x6e\x82\x46\x69\xf6\xd4\xdc\x45\xce\x13\xbc\xf7\x71\x69\x16\x2a\x7d\x4f\xac\x54\xae\x0a\x7f\xe8\xdd\x59\x1e\x61\x65\xee\x00\x84\x72\xee\x44\xde\x2c\x90\xbf\xb8\xca\x9a\x6e\x1a\x27\xa2\x3a\xaf\x1c\xe5\x56\x1a\x2d\xe6\x72\x81\x44\xd2\x9f\xe1\xe5\x67\x4f\xa7\x87\x44\x64\x08\x80\xb1\x3a\x77\x00\x42\x41\x77\x6d\xb2\x77\xde\x7f\x17\xc9\x81\x23\xea\x1e\x86\x32\x70\x58\xda\xaf\xbe\xce\x14\x2e\x69\xb9\x3a\x78\xf1\xc9\xf3\x31\xa3\xa7\x97\x29\x10\x00\x63\x85\xee\x00\x84\x92\xee\x54\xf0\xdf\x5e\xfe\x1e\x40\x3c\x8a\x0e\x75\x4b\x0b\xa8\xb7\x04\x4a\xbf\xeb\x26\x8a\x78\x2f\xdc\x77\x2d\xc6\xdf\xbd\x56\x35\xfe\x0c\x02\x60\xac\xd2\x1d\x80\x50\xd4\x5d\x99\xf3\x54\xcb\x07\xf2\x5f\xc1\xbc\x6a\x56\x4a\x4b\xfc\xf7\xc8\x3d\xf4\x2a\xae\x5d\x5e\x8d\x65\xb8\x53\xc0\x99\xa5\xa3\xdf\x63\x82\x00\x18\x2b\x75\x07\x20\x94\x75\x17\x5d\x22\xbd\x94\xce\x43\xb3\x69\xe8\xf7\x5a\x45\x7a\xba\xbb\x63\x2a\xa1\xd3\x78\x65\xed\xf7\x07\x82\x5a\x62\x5c\x31\xbc\xe5\x80\x00\x18\xa3\x75\xb7\x5b\xa6\xbd\xee\xa1\xef\x96\x09\x85\xdd\xf1\x33\x56\x89\x1c\x7d\xf7\x34\x7d\x4d\xe9\x44\x6d\x6f\x76\x0f\x4b\xe3\x6d\x76\xce\x60\x55\x33\xc9\x8f\x55\x31\x54\xa2\xca\xce\x3b\xeb\x67\xac\xd8\x1d\x80\x50\xda\xdd\xf4\x3b\xb6\x4e\x2b\xa2\x77\xb7\x1e\x04\xb4\xba\xbc\xfa\x7a\x37\xf3\xa1\x74\xf6\x7b\xb9\x73\x72\x1d\x77\x69\x17\xeb\x0b\x95\x7d\xb9\x10\x00\x63\xd5\xee\x00\x84\xe2\xee\xaa\x82\x23\xce\xd7\x70\xcf\x11\x84\x48\xe3\x6f\x57\x7c\x82\xf8\xdb\xad\x3b\xd7\xb4\x8c\x0a\x34\x07\xe7\xa7\x49\x9e\xde\x5d\x15\x40\x00\x8c\x95\xbb\x03\x10\xca\xbb\xf3\xf5\xfe\xd6\xb5\x36\xae\xae\xc6\x90\x73\x4c\xb8\x4d\x49\xf6\x7a\x94\x65\x44\x53\xce\xe5\xc0\x5f\xa2\x67\x0e\x4a\x64\x9b\xd6\xec\x2c\xc1\xb0\x7a\x77\x00\x42\x81\x77\x74\xfe\xf6\x07\x18\x49\xbf\x3b\xb3\x84\xd9\x1c\x63\x62\x99\x51\x6f\x35\x5a\x55\xae\x4d\x3f\xca\x93\x1e\xd9\xde\xcf\x72\x77\x58\x16\x01\x30\x56\xf0\x0e\x40\x28\xf1\xee\xf0\xab\x9c\x3f\xcf\x2c\x8a\xd6\x53\x95\x8f\x9c\x35\xa8\xcb\x27\xb8\x51\x42\x75\x8c\x83\xfe\x51\xdc\x59\xc4\x62\xdd\xae\x1b\x76\x08\x80\xb1\x8a\x77\x00\x42\x91\x77\x9a\xd4\xbf\xb7\xee\x54\x5f\x5f\xef\x49\x08\x2a\xe4\x7f\x5e\x69\x10\xda\x5a\xa3\x70\x3b\x9a\x85\x2e\xa8\x42\xef\x81\xab\x57\x1e\x13\x02\x60\xac\xe4\x1d\x80\x50\xe6\x9d\x2b\xfd\xbb\xb3\x3c\x76\x53\x97\xf7\x95\x1b\xe7\x7e\x12\xa8\xea\x59\x51\x99\xd3\xcf\x7c\xab\xf2\xb5\xcf\x93\x52\xba\xcc\xdf\x74\x67\x2f\xfe\x1f\xcd\xbb\xab\x5d\x1c\x55\xe5\xd7\x5f\x6a\xdc\xf2\x73\xf8\xf1\x66\xe1\xe9\x2f\x5f\x8e\xe6\xd4\x33\x16\x95\x1a\x72\xee\xd4\xe7\x3c\x3b\x48\x12\x51\x87\x7d\x2b\xf3\xe4\x52\xaf\x39\xae\xbf\x23\xa2\xe3\x93\x90\xf9\x59\xec\xe6\x73\x2a\xa6\xb9\x2a\xb7\xe2\xd0\xd0\x9f\xad\xc1\x22\xea\xc3\x7f\x43\x76\xc7\xcf\x04\xc5\x99\xfc\xa6\xf5\xf1\x7a\xc2\xe4\xa0\xb4\xd0\x1a\x29\x1a\xff\xed\x7a\x58\x56\x94\xa3\x6a\x41\x73\x02\xb1\x61\x83\xcc\x5f\x43\x69\xee\xe0\x93\xda\xe8\xb2\x8e\xa5\x8b\x5b\xbb\xbf\xc9\x3d\xe5\x18\xdb\xde\x12\xeb\x9a\x24\x91\x7a\xfe\xad\xde\x03\xed\x49\x91\x27\x7f\x0d\xe5\xaf\x5b\xd5\x41\x4a\xae\xcc\xcc\x31\xd6\x18\xb3\x3f\x71\x72\x5a\xdb\x8e\x15\x4c\xa0\x79\x19\x4b\xe7\x66\x79\x62\x7d\x88\x63\xe3\xaf\xa1\x7e\x62\x02\xc1\x67\x20\x73\x44\x58\xcf\x2b\xaa\x7a\xb4\xd3\x92\x7b\xa6\x3e\x33\x9c\x34\x83\x60\xe3\x58\x32\x96\xa2\x27\xfa\xf9\xaf\xa1\x8b\x42\xf9\xe3\x64\xc3\xd7\xcf\xe8\xd8\x77\x95\x5e\xba\x4e\xdb\xf9\x59\x99\xa9\x64\xfb\x9d\x8b\xfc\x2b\x89\x05\xeb\x56\x62\x7f\x91\xbf\x86\x7a\x8d\xb4\xc5\xbc\x78\x45\xfb\x6a\x3b\xac\x61\xc6\xfb\x55\xa2\x43\x20\xb7\xde\x6a\xc0\x87\x9e\x0d\x3f\xa7\xcf\x95\x77\xc8\x9a\x4c\xff\x1a\xda\xbc\x8f\xc3\xa8\x45\x3f\x83\xca\x4d\x75\x5a\xb1\xa5\xb7\xd9\x5a\xb9\xf5\x60\xb9\xaf\x65\x79\xe6\x21\x35\xef\x43\x6b\x23\x7f\xae\xfc\xdf\x61\xdf\x5e\xaf\xea\xee\x8c\x86\x42\xef\xdc\xbb\xf4\x7f\x99\x33\xab\x1b\x5e\xbe\x3d\xed\x17\x6a\xae\xec\x5f\x34\x70\x5e\xdc\x4c\x30\xb8\x64\x11\x77\xa5\xec\xb2\xdf\xbe\xcb\x08\x80\xb1\xa2\x77\x00\x42\xa9\x77\xbc\x08\xa4\x9e\xe8\xb0\xf0\x8a\xbe\x35\xf1\x8e\x95\x01\x7d\xe8\xcc\xc2\x56\x14\x73\xd4\x9f\xf0\x6c\xf7\xde\x23\x82\x1c\xcc\x2e\x08\x80\xb1\xaa\x77\x00\x42\xb1\x77\x32\xc3\x19\xe6\x02\x35\x72\xa5\xf3\x9d\x8f\xef\x45\x76\x15\x71\x94\x33\x0d\x8a\x1a\x45\x8e\xe7\xbc\x7a\x1c\x7e\x60\xfe\x18\x74\x16\x01\x30\x56\xf6\x0e\x40\x28\xf7\xee\x52\x7c\x74\xe2\xa2\xb5\xa7\x1e\x0d\x2e\x27\xe0\x35\xed\x83\x4b\xbd\xbc\x66\xb9\x2c\xb9\xf3\xdf\xd2\x94\xda\x26\xec\x7b\x6d\xac\x10\x00\x63\x75\xef\x00\x84\x82\xef\x16\x05\x93\x7b\x15\x4e\xb7\x13\x13\x51\x1a\x0b\x1a\x2e\x2b\xd0\xbe\xa2\x74\xd7\x59\xcb\xae\xb2\xdc\x0c\x74\xf0\x24\x98\x93\xec\x2c\xd7\xb0\xc2\x77\x00\x42\xc9\x77\x96\xd3\xba\xdd\xef\x69\x7b\xad\x6f\x38\xe6\xda\x57\x8a\x09\xcf\x31\x55\x89\x4e\xd0\xaf\xf5\x87\x2c\x89\x2c\x67\x10\xd3\x89\x3a\x21\x00\xc6\x2a\xdf\x01\x08\x45\xdf\xf5\x99\x3e\x25\x93\xfd\x1a\x76\xff\x5a\x0f\xf1\xdc\x7e\x6a\xdd\xe3\xbf\xee\xa8\xf2\x91\x86\xaf\x38\x2c\x5b\xf4\xe8\x4b\xc6\x17\xc2\x08\x80\xb1\xd2\x77\x00\x42\xd9\x77\x85\x5a\xfd\x6c\x7c\x8e\xd7\xc5\x26\xe2\x8c\xac\x3a\xe7\x6d\x3b\x6e\x79\x28\xbf\x34\x79\x3b\xa2\xe8\xd9\x1a\x36\x78\x50\x5d\x7b\x67\xef\x83\xd1\xbe\xdb\x2d\xd3\x5e\xf3\xce\x6e\x99\x50\xf8\x9d\x8c\x6b\x9c\xa4\x57\x43\xb7\x13\xdd\x07\xbd\x81\x3b\x97\xac\x7f\x2f\xc7\x24\x33\x9c\x28\x51\x75\x14\x0b\x8b\x0b\x4b\x22\x7a\xca\x81\x00\x18\x2b\x7e\x07\x20\x94\x7e\x77\xdd\x9c\xfb\x28\xa3\x6e\xc0\xc7\x6e\xc2\xda\xb2\x08\x55\x5e\xb4\x4e\x66\xf3\x55\x8d\x1b\xfd\xa9\xc6\xf4\x66\x0f\x64\xfd\x8a\xaf\x20\x00\xc6\xaa\xdf\x01\x08\xc5\xdf\x51\x94\x5f\x0c\xb8\xc4\xc3\x1a\x0d\x37\x93\x6b\xae\x37\x81\x5b\xfb\x44\x1a\x2a\x88\x52\x72\xa4\x38\x6a\x65\x95\x5a\x55\xf5\x0e\x20\x00\xc6\xca\xdf\x01\x08\xe5\xdf\x1d\x2e\xf1\x95\xd2\x89\x3e\xd6\x6b\x7c\xab\x6e\xf6\xfb\x6a\x37\x69\xbe\xd5\xc5\xec\x23\x16\xf9\xea\xa9\x22\x1d\xe2\x63\x8d\x37\x77\xde\x3c\xac\xfe\x1d\x80\x50\x00\xde\x50\xc6\x64\x17\x91\x77\xf0\x03\x6e\x91\x70\xd1\xb7\x42\xb5\x8e\xae\x03\x71\x4e\xb2\x4c\x6f\x94\x6f\x15\xe0\x44\x60\x06\x0d\x08\x01\x30\x56\x00\x0f\x40\x28\x01\x4f\xeb\x85\xdf\x95\x0f\xb9\x37\x74\x21\xa2\x53\xb6\x7c\x5e\x2f\xaf\x90\x0c\xab\xaa\xbd\xc9\xe2\x52\xda\x7a\xd2\xe0\x12\x0a\x70\xe4\x08\x80\xb1\x0a\x78\x00\x42\x11\x78\x15\xf9\x73\x06\x37\x8b\x02\xbb\x27\xa5\x3f\x4f\xb8\xae\x7e\xbd\xb3\xbf\xc1\xec\x5b\x1c\x19\x5b\xe8\xc1\x57\xf8\x43\xae\x37\xc7\x77\x36\xc7\x58\x09\x3c\x00\xa1\x0c\xbc\x18\x96\xf2\x6c\xc1\x33\xac\xe6\x1d\x3f\xf5\xab\x2a\x5b\xba\x1e\x0e\x36\x1f\xa4\x60\xe2\xdb\x7c\xee\x75\x3d\xae\x99\x9c\x01\x67\x8a\x00\x18\xa3\x81\xb7\x5b\xa6\xbd\xae\xcc\xbb\x65\x42\x21\x78\xf3\x2d\x6e\x80\xdc\x5d\xfa\x09\x4f\xc5\xa1\x50\x8e\x17\x76\x15\xb5\x66\x43\xc4\xe4\x5f\x6e\x3b\x20\x67\x7a\x6c\x05\xd7\xb8\x19\x11\x00\x63\x45\xf0\x00\x84\x52\xf0\x0a\x27\xe8\xbb\x59\xff\xdc\xe1\x15\xf6\xdd\x8a\xbc\xf1\x96\xff\xcc\x11\x35\x86\xb7\x92\xe5\x52\x6f\xdb\x24\x2c\xff\x84\x96\x98\xec\xac\x51\xb1\x2a\x78\x00\x42\x31\x78\x62\xec\x4f\x23\xb4\x4f\xe9\x12\xaa\x03\x9d\x1f\xd2\x25\x7f\x97\x56\xd9\x2a\x0d\x0d\xa3\x3d\x7d\x3f\xd4\x23\xcd\x83\x42\xa6\xe6\x38\x02\x60\xac\x0c\x1e\x80\x50\x0e\xde\x2a\xaf\xa4\x4f\xed\xc4\xcf\xcb\x59\xf2\xb2\x19\xfc\x72\x4e\xa2\x9f\x7b\xc1\xc9\x42\xa8\x39\x80\x59\x3b\xe5\x42\xb6\xab\xa7\x1a\x02\x60\xac\x0e\x1e\x80\x50\x10\x5e\x1a\x3e\xf1\x7b\xf0\x6f\xae\x7b\x56\x06\x72\x48\x5a\x86\xbf\x9e\xd8\xd2\x34\x4d\xad\x9b\x4b\xc3\x10\xf9\x8d\xc1\xc7\x8e\x7d\xe7\x10\x00\x63\x85\xf0\x00\x84\x92\xf0\xea\xf2\x85\xab\x93\xf6\x31\x32\x91\xa7\xdb\xe2\xb4\xff\x08\x1a\x9f\xd6\x15\x3a\xf7\xfe\x65\xdc\xef\xf0\xcb\x06\xde\xd6\x6a\xc7\x77\x26\x05\xac\x12\x1e\x80\x50\x14\x1e\x59\x66\x81\xc4\x7a\xda\x99\xd2\xa7\x95\x7e\x2f\xcd\x53\x9b\x2f\x3f\xb9\x68\xcc\x2b\x16\xf6\xa5\x67\xd4\xfc\x91\x63\x0c\xe1\xcd\xce\x7b\x8e\x95\xc2\x03\x10\xca\xc2\xc3\x87\x8f\xb6\x9e\x72\xfb\x45\x9f\x98\x59\x79\xd1\xbe\xc9\x41\x9c\xdf\xfa\xf5\xe6\x70\xf8\xa6\x7c\x32\x73\x0b\xf5\xd3\xaf\xcd\xfb\x10\x00\x63\xb4\xf0\x76\xcb\xb4\xd7\xda\x75\xb7\x4c\x28\x0c\xaf\xbf\x93\xde\x5e\x9e\xdd\x7f\xde\xc4\xb0\xd3\x76\x8b\xec\xf7\x99\xda\x8f\xdd\x83\xb7\x44\x02\xde\x98\xa8\x14\x7d\x7b\xc9\x35\xbe\x33\x4b\x61\xc5\xf0\x00\x84\xd2\xf0\x04\xae\x57\xde\x17\x6a\x75\xb6\xde\x78\x37\xe1\xed\xa6\xac\xa1\xb5\xef\xa3\x3c\x89\x15\xdd\x69\xce\xe9\x47\x5f\x18\x98\xd9\xc3\x4f\x21\x00\xc6\xaa\xe1\x01\x08\xc5\xe1\xbd\xfa\xde\xee\x24\x98\x2a\xf6\xe1\x34\xe9\xb3\x13\xc6\xcd\x5c\xf9\x03\x82\x7e\x06\x15\xe2\xed\x8f\xb4\x0f\x6f\x2d\x2d\x5a\x89\x99\x21\x00\xc6\xca\xe1\x01\x08\xe5\xe1\x4d\xb8\xca\x30\x51\xfa\x46\x59\xd7\xc4\x8b\x56\xd5\x58\x1d\x34\xf4\x4c\xd2\xe5\x8b\xcb\xb9\x5d\x75\x62\xbf\x37\xce\xeb\x3a\xa3\x35\x02\x60\xac\x1e\x1e\x80\x50\x20\x5e\x0b\x97\xed\xd5\xe2\x55\x83\x81\x00\x41\xef\xa8\x82\xbb\xeb\x83\xbd\x0f\x92\xd7\x53\x5e\x4b\x28\x31\x91\x69\x4b\xb0\x64\xb6\xee\x14\x16\x2b\x88\x07\x20\x94\x88\x97\xec\xaf\x76\x3d\xff\xe7\x8b\xb0\xc1\xa3\xdc\x14\xca\xfc\x0a\x39\x46\x66\x22\x81\x4d\x44\xab\x0b\xec\x9d\x4b\xcd\x43\x5b\x9b\x5c\x08\x80\xb1\x8a\x78\x00\x42\x91\x78\x6c\x5b\x93\x13\x84\xce\x09\xc6\xc9\x04\xbc\xc8\x60\x5e\xf5\x52\x6d\x27\xbf\x8e\xb0\x65\xc8\xa6\xce\xa0\xee\xd9\xb7\x94\x17\x76\x96\x92\x58\x49\x3c\x00\xa1\x4c\xbc\x1a\xde\xe4\x6c\xf5\xd7\x55\xd5\x02\xf9\xb7\x67\x99\xc2\x7b\x04\x7b\x99\xe5\x64\x6a\xa2\x0f\x0a\x12\x38\xf2\xae\x66\x15\x68\x1c\x46\x00\x8c\xd1\xc4\xdb\x2d\xd3\x5e\xbb\xbb\xdd\x32\xa1\x50\xbc\xaf\x05\x6c\xda\x89\xf4\xed\x5a\x86\xbf\xcd\x6e\xfd\x6a\x9f\xb4\x7e\xbf\xb2\xa5\x7c\x9e\x78\x8a\x52\x1c\x8f\xc4\x4d\xa7\x53\xef\xbc\x79\x58\x51\x3c\x00\xa1\x54\x3c\xbf\x98\x8b\xd7\x8e\x92\x05\x2f\x1f\xc7\x7d\x26\xd2\x93\xe0\xf9\x3c\xbe\x1a\x60\x22\x7a\x2b\xef\x61\xa8\xfe\x8f\xd2\x14\x9b\x61\x7a\x04\xc0\x58\x55\x3c\x00\xa1\x58\xbc\x02\x83\xd0\x1e\xfe\x84\x9b\x41\x52\x32\x1a\x14\xba\xd7\x54\x8e\x76\xa5\xe1\x9d\xcd\x8e\x79\xec\x7f\xff\xf2\xd5\xfb\xb6\xbb\x4e\x44\x08\x80\xb1\xb2\x78\x00\x42\xb9\x78\x4a\xe9\x46\xa7\xe7\xf8\xb8\x03\x9d\xda\x9e\x99\x25\xb3\x6b\x14\x77\x49\x72\x50\xd4\xe4\x1d\xdc\xee\x48\x28\x29\x85\x74\xd3\x54\x10\x00\x63\x75\xf1\x00\x84\x82\xf1\x22\x68\x3c\x45\x95\xda\xae\xe8\x4d\x64\x55\xac\x2e\x0f\x4e\x65\xb8\x7e\xa4\x6f\xf9\x09\xdf\xc8\xac\x14\xef\x49\xe0\xa3\x64\xb2\x45\x00\x8c\x15\xc6\x03\x10\x4a\xc6\x2b\x7c\x1d\xa4\x2b\x35\xa7\x30\xa8\xe1\x61\xbb\xb5\xd8\x06\xd7\x17\x3c\x39\x91\x76\xbb\xbf\x6d\xe3\xf5\x01\x4a\x39\x7a\xbf\xc2\x33\x08\x80\xb1\xca\x78\x00\x42\xd1\x78\x47\x4d\x7f\xcf\x34\xdb\x5c\x0c\xca\x68\xf3\x64\x89\x50\xa6\x7c\xf9\xfb\x4d\x17\x64\x7f\x66\x5b\xf5\xa1\x1a\x63\x38\xe5\x68\xf3\x05\x04\xc0\x58\x69\x3c\x00\xa1\x6c\x3c\x4d\x1d\xeb\xd6\x5c\x53\x6d\x0a\x57\x66\xe9\xf6\x0f\x2b\x43\x3d\x65\x33\x14\x7a\x7a\x31\xae\xd4\x1f\x1f\x1a\xd1\x3b\x72\x57\xee\xac\xaa\x30\xda\x78\xbb\x65\xda\xeb\xfe\xc7\x6e\x99\x50\x38\x5e\xe7\x85\xc9\xd0\x02\xd6\x14\x15\x2b\x0a\x81\x69\xcf\xa6\x94\x78\x12\xe5\x82\xb4\xb9\x7b\xe5\x4d\xbf\x6f\x35\xbe\x62\xe8\x1d\x14\x47\x00\x8c\x15\xc7\x03\x10\x4a\xc7\xdb\x07\xfc\xe8\x2f\x2c\xcc\xb9\xe5\xb0\x9d\x52\xeb\xb3\xca\xca\x35\x19\x62\xfc\x9a\xdd\x15\xad\x1c\xcf\xa0\xa2\xdf\xaf\xc4\xed\x88\x00\x18\xab\x8e\x07\x20\x14\x8f\x57\x1c\x09\xce\xfc\x6a\x74\x4f\x50\xe0\xde\x6e\x88\x90\x16\xd0\xb6\x67\x19\x91\xbe\xa1\x75\x27\xf8\x65\x3c\x87\x13\x87\xc4\xe7\x9d\xe5\x11\x56\x1e\x0f\x40\x28\x1f\x8f\x4c\x91\x3d\xdf\xf0\x66\x22\xc5\x8b\x38\x84\xff\x79\xb8\x19\x79\xb1\x9d\x1d\xf7\xc6\xfa\x93\x9b\x59\xa9\x34\xc9\x3c\x0b\x82\xec\x08\x80\xb1\xfa\x78\x00\x42\x01\x79\x31\x0b\xc3\xd2\xa6\x24\xf7\x36\xf9\xc7\x8d\x7c\x1a\xf6\x19\x8c\x9f\xe1\x69\x32\x91\x2d\x93\x59\x99\x7a\x52\x19\x4b\x71\xf6\x04\x09\x02\x60\xac\x40\x1e\x80\x50\x42\x9e\xf8\xc9\x1b\x8b\x89\xc6\x0d\x2e\x01\xe6\xfe\xd3\xdf\x88\xea\x4f\x85\x71\xf1\x7e\x61\x09\x61\x54\xb5\xaa\x2f\x63\x38\xa9\x77\x9c\x1b\x01\x30\x56\x21\x0f\x40\x28\x22\x2f\xc6\xc2\xc8\xd2\x4e\x52\x7a\x51\xe4\x78\x42\x28\xbb\x11\x15\x3d\x21\x40\xc3\xac\x2f\x2a\xb9\x7f\xeb\xeb\x49\x89\xeb\xa1\x57\x61\x04\xc0\x58\x89\x3c\x00\xa1\x8c\xbc\x8e\x60\xa1\xc4\x1a\xa2\x27\xb7\xc3\x0b\x6f\x97\x98\x59\x52\x7c\x5f\x6e\x14\x58\x33\x8e\x8e\x75\xb4\x21\x2f\xfb\xf3\x33\xb1\xd6\x04\x01\x30\x46\x23\x6f\xb7\x4c\x7b\xdd\x21\xdc\x2d\x13\x0a\xc9\x9b\x4d\x30\x6b\x19\x98\x2b\x6d\xea\xcd\x35\xb5\x1e\x12\xc6\xf9\x8a\x4b\x75\x2d\x96\x7a\x1e\x6b\xe3\x80\xe5\xfd\xed\xfc\x98\x68\x10\x00\x63\x45\xf2\x00\x84\x52\xf2\x0c\xdb\x2c\xbf\xbf\xf1\x7e\x15\xaf\xd4\xd1\x5b\x39\x11\xd8\xd4\x44\x1e\x44\xfd\x61\xfc\xc2\xb5\x89\x6c\xaf\x02\xdc\xfc\xf3\xca\x9d\xcd\x28\x56\x25\x0f\x40\x28\x26\x4f\x45\x50\xf6\x49\x2f\xdb\x39\xca\xeb\x9f\x6c\x42\x6a\x6c\xbf\xf4\x31\xe5\x6b\x9d\xfa\x2d\x13\xdf\x31\xd1\x33\x43\xd1\xfb\x73\x4d\x14\x01\x30\x56\x26\x0f\x40\x28\x27\xef\xa9\x44\x91\x49\x2c\x93\xce\x03\x37\x8b\x53\x2f\xcb\xcb\x26\x83\x35\x0a\xae\x9d\x3f\xf0\xf2\xba\x45\xcd\x9a\xf5\x20\xf5\xdd\x28\x73\x04\xc0\x58\x9d\x3c\x00\xa1\xa0\xbc\x6c\xb8\x96\x41\xb5\x28\x64\xb1\x57\xc1\x6a\x11\x1f\x65\xf4\xec\xd4\x9a\x5a\xc0\xef\x0b\xfc\xf6\x7d\x27\x59\xbf\x73\xa7\x6d\x1a\x23\x00\xc6\x0a\xe5\x01\x08\x25\xe5\xf1\x8a\x91\xf8\x1c\x7d\xa3\x7c\x62\x2b\x73\xbf\x51\xc5\xe8\xe1\x15\xb3\xb3\xd3\x07\x5e\x5a\x7e\xfb\xa9\xe0\x52\x65\x41\x35\x6f\x43\x8b\x00\x18\xab\x94\x07\x20\x14\x95\x97\xa3\xa4\xff\xd2\x5f\xe8\xb5\x0d\x2f\xc5\x7d\xaf\x73\xa9\xb6\x6b\x8c\x11\x76\xcd\xd6\x47\x22\x96\x93\xef\x98\x1f\x7c\x29\x7e\x72\x67\xfb\x80\x95\xca\x03\x10\xca\xca\x9b\xc9\x3f\xc4\x92\x3c\x49\xaa\x12\x7f\x2c\xef\x8d\xeb\xd1\xc7\x8c\xb3\xa6\xa4\x94\x5f\x12\xa0\xfd\x7e\x74\x8d\xaa\xc1\x4d\xfc\xaa\x08\x80\x31\x5a\x79\xbb\x65\xda\xeb\x1e\xfa\x6e\x99\x50\x58\xde\xcc\xc6\xe3\x32\xbe\x46\x27\x1c\x5d\x3c\xf3\x89\xa8\x5b\xfb\xce\xee\x0b\x92\x11\x29\x26\xf5\xe1\x1f\xa0\x2f\x76\x98\x8b\x5b\xde\x79\x40\x58\xb1\x3c\x00\xa1\xb4\x3c\x7b\x52\x16\x6a\x83\x0a\x6e\x4a\x0b\x7f\x87\xcd\x3b\x9f\x53\x27\x88\x63\x87\x94\x6e\x72\xd5\x46\x90\x2c\x6c\x1f\x13\xaf\x5f\xe2\x45\x00\x8c\x55\xcb\x03\x10\x9a\xcb\x2b\x8d\x4f\x1f\x68\xec\x0c\x6e\x64\xee\xf6\xfa\xf6\x8a\x61\x41\xeb\x78\x6b\xdc\xbe\x2e\x32\x11\x7e\x07\x7b\x26\xe1\xbb\xb6\x3b\xcb\x23\xac\x5c\x1e\x80\x50\x5e\x5e\xe4\x4b\x99\x8c\x6b\xb7\x9d\x82\x53\x85\x10\xbd\x71\x64\xab\xc7\x31\xf7\xcb\xdd\xd3\xd1\x2f\xb3\x38\xce\x59\x7f\x46\x18\x2e\x69\x20\x00\xc6\xea\xe5\x01\x08\x05\xe6\x09\x31\xc5\xcb\xde\x12\x8f\x3b\x00\xdc\x95\xf0\x87\xd5\x47\x7b\x4e\x4e\x9d\x0a\x8d\xfa\x69\xac\x6c\x96\x49\xf6\xec\xc0\xb3\x9b\x6c\x08\x80\xb1\x82\x79\x00\x42\x89\x79\xb6\x26\x69\xc9\x51\xe0\xee\xb0\x87\x63\x20\x42\x2d\x29\xe5\xda\x7f\x9d\x70\x6e\xa4\xb8\xd7\x57\x96\xc6\xed\x8f\x90\xbd\xc5\xce\x6a\x04\xab\x98\x07\x20\x14\x99\x17\xab\x54\x6b\x9c\x48\x31\x5b\x72\x75\x56\x26\x3c\x73\xc9\x50\xf3\xa1\xaa\xe9\xfb\xcb\x75\x7f\xde\x18\x48\x0a\x90\x50\x30\xea\xee\x7c\xae\xb0\x92\x79\x00\x42\x99\x79\xe6\xeb\xc9\x3a\xaf\x9c\x22\x78\xed\x99\xc3\xe2\xf5\x23\xdd\x6c\xe0\xc0\x8e\x98\x45\x86\xc9\x7c\xee\x15\x35\xe7\x3b\x9d\xb4\x7a\x08\x80\xff\xa3\x99\x77\xcb\x9d\x95\xda\xa9\x61\x60\xed\x2b\x65\xf8\xc0\x66\xdf\xb8\xff\xb6\xa4\x9a\xf1\x7d\x2f\xdf\x90\x53\x22\xa4\x0b\x0f\x94\x36\x5f\xa2\x0e\xfb\x2c\x6a\x06\xcb\xd3\x6f\xfc\xa4\xed\xb5\xb0\x49\x93\x6a\x48\xfe\x7e\x9f\x46\x46\xb1\xb3\xe8\x4b\xc9\xfe\x9f\x76\x2c\x2c\x91\x21\xc4\x7f\x0d\x8d\x70\xa9\x3c\xe4\x15\x96\xc8\x5e\xf2\x84\x8c\x98\xd9\xc3\xd1\xc5\x70\x28\xcd\xb9\xc9\xd8\x8c\x78\x7c\xfb\x9a\x75\xfe\x2b\x13\xf5\xbf\x86\xa6\x45\x09\x5f\x90\x8e\x1c\xe7\xd8\xd7\x7b\x84\xec\xf7\x43\x1f\x4d\x69\x7d\xb2\xcf\xac\x27\x7f\x97\xce\x22\xf9\xd9\x07\x0b\xe2\xfe\xfe\x6f\xcd\x74\x1b\x45\xee\x22\x9b\x9e\xa4\x25\x32\x8a\x86\xdb\xc7\x74\x22\x9d\x94\x65\xd8\xb7\x15\x8b\x3a\xfa\x4c\xb2\xe3\x48\x60\xfd\xbf\x7f\xd9\xa7\x34\x59\x09\x26\xfd\x6c\x2c\x0b\x62\x9a\x53\xe2\xce\x16\xf7\x74\xa9\x5e\x3c\x30\x7f\x32\xc5\x9b\x3a\x64\x0b\xf6\x3c\x99\xf8\xf4\xef\x33\xcc\x4b\x30\xcd\xca\x3c\x92\x23\x70\xcf\xb3\xf7\x31\xdf\x4b\x1f\xb1\x50\x59\x39\xca\x9b\xc4\xb6\x09\x37\x9f\xd9\x77\x9f\x67\x53\xf8\x6b\x68\xf2\x6c\xce\xed\xf0\xe7\x9e\x41\x52\x21\xd2\xef\x1a\xcd\x5f\x7a\x2a\xa8\xc8\x4b\x3f\x4a\xea\xce\xb7\xe6\x62\xd0\xb4\xbd\xe6\xca\xfa\xf7\x2f\xfb\x48\x83\x40\xc5\x89\xf7\xfb\xcf\x34\xfc\x70\x19\x64\x99\x7d\xfb\x8e\x9e\xf7\x44\xee\x1a\x45\xc6\xb3\xec\xa1\xd4\xc9\xbe\xcb\xae\xff\x77\xd8\xb7\xd7\xab\xba\x3b\xa3\xa1\xd0\x3c\x1b\x17\x93\xcc\x1e\xad\xa1\xa8\x4f\x02\x7c\xc4\xc5\x12\xdd\xe3\xa3\x27\x6c\xa2\x56\xcb\xb8\x53\xe2\x8c\x09\xf1\x2c\x8b\xa4\x32\x08\x80\xb1\xa2\x79\x00\x42\xa9\x79\xd7\xdc\x28\x0e\xdd\x67\x86\x0e\x1f\x5f\xaa\xf6\x1e\x04\x76\xf9\xb7\x22\xf3\x06\x7c\x60\x26\x8d\xd7\x3c\xeb\xa9\x99\xfa\xaa\x86\x08\x80\xb1\xaa\x79\x00\x42\xb1\x79\xfa\x94\x3e\xab\x66\x92\x39\xb4\xa6\x8b\x5d\x77\x7e\xc8\x3a\x6c\xf9\xff\xbc\xaa\x38\x51\x74\xee\xf7\x3a\x95\x99\xaa\xea\xd3\xef\x1e\x08\x80\xb1\xb2\x79\x00\x42\xb9\x79\x17\xe8\x19\x5a\xaf\xf2\xe4\x5f\xe2\x73\xe7\xae\xac\x8a\x54\x3f\xee\x57\x1d\x49\xa0\x9f\x3f\x26\x72\x25\xfd\x60\x38\x71\xea\x17\x57\x04\xc0\x58\xdd\x3c\x00\xa1\xe0\xbc\xe7\xcc\x6d\x04\x43\x4b\xc5\x54\xf2\xec\xef\xe6\x4f\x13\xcc\x82\x6c\xae\x94\x32\xa4\xbd\xd8\xbc\x95\xa3\x07\x06\x56\x1f\x1e\xd6\x46\x00\x8c\x15\xce\x03\x10\x4a\xce\x93\x78\x54\xda\xc2\xae\xf8\xae\xe5\x0a\x77\x6b\xd3\x93\x96\x48\x42\xcb\x8f\x69\x86\xe7\x79\xba\x34\xc8\xb7\x14\x07\xad\xab\x32\xd6\x08\x80\xb1\xca\x79\x00\x42\xd1\x79\x95\xd4\xa7\x0f\xaf\xd7\xd5\xcc\x9d\xa6\x54\x9d\x23\x75\xe6\xec\x0f\xef\x82\x03\x39\x96\x0a\x3c\x4a\x79\xd8\xa5\x82\x69\xfe\xec\xbc\xe7\x58\xe9\x3c\x00\xa1\xec\x3c\x05\x53\x7e\x2b\x23\xc7\xe1\xd9\x09\x76\xa7\xfa\x8c\x5e\xb5\x61\x9f\x51\x61\x03\xa5\x22\xd2\x9c\xac\xdc\x54\xbe\x94\x3f\x76\x87\x10\x00\x63\xb4\xf3\x76\xcb\xb4\xd7\xbc\xb3\x5b\x26\x14\x9e\x37\x88\x13\x41\xb6\xb9\x68\xde\x76\xdc\xc9\xc0\x57\xdf\x68\xf6\x1f\xa8\xcb\xaa\xb7\x6c\xfe\x45\x4b\x76\x51\xbe\x29\x9f\xeb\x93\x03\x02\x60\xac\x78\x1e\x80\x50\x7a\xde\x07\x6f\xd0\xd4\x61\x4f\x3b\xef\x5f\x29\xb9\x78\xc4\x83\x97\xfe\xaa\x85\xcd\x92\x04\x12\x31\x25\x45\xb6\x8c\x53\xa5\x3d\xb9\x73\xc9\xc3\xaa\xe7\x01\x08\xc5\xe7\x91\x3a\xe1\xad\x8a\xeb\x44\x98\x8d\x4e\x13\x6f\x7e\xe5\x34\xad\x63\x1b\x95\xf5\x65\xf5\xbe\xf1\xe0\x76\xc5\x83\x85\x52\x2e\x6f\x1d\x04\xc0\x58\xf9\x3c\x00\xa1\xfc\xbc\xac\xdc\x8b\x65\x42\x0c\x46\x64\x8b\x89\x83\x7c\xd5\xef\x3e\xcf\xfa\xdf\x0e\x1c\x60\x5e\xce\x2a\x1b\x9b\x55\x99\xcc\x35\x19\xd1\x45\x00\x8c\xd5\xcf\x03\x10\x0a\xd0\x73\xe0\x1c\x97\x7f\x23\x29\x15\x1f\x71\x5a\xfc\x53\xf1\x5c\x6c\xf4\x57\xc5\x37\x5d\xc3\x0e\x4a\x87\x34\xfc\x87\x7e\x37\x66\x4d\xef\x4c\x6e\x58\x01\x3d\x00\xa1\x04\xbd\x92\x17\x8c\x91\xf8\xf7\x3e\x37\x5e\x1f\x64\xa5\xee\x7c\xac\xdb\x5d\x1b\x9d\xe5\x18\xe8\xf8\xd9\x36\x51\x73\xa2\x4a\x7f\x72\xe9\x04\x02\x60\xac\x82\x1e\x80\xd0\x84\x1e\xcf\xf3\xaf\x15\xef\x48\x43\x98\xc1\x79\x19\xf3\x4f\x49\x07\xdc\xaa\x65\x28\xbd\x6f\x68\xb0\x99\x96\x3f\x31\x65\x4a\x7e\x42\x8c\x00\x18\x2b\xa1\x07\x20\x94\xa1\x27\xe8\xe4\x5c\x22\xe2\x70\xbe\x3b\x33\x85\x51\x63\xba\x99\x33\xbd\xe0\xcd\x9b\xb0\x6f\x4b\xfe\x1e\x9b\x63\xc2\xcf\x14\xaa\xb8\x8f\x20\x00\xc6\x68\xe8\xed\x96\x69\xaf\x2b\xf3\x6e\x99\x50\x88\x9e\xe4\xd8\xe0\xc5\xd1\xe7\x9f\x34\xca\x39\x3c\x33\xe6\xd3\xc3\x14\x63\x0f\x05\x1d\x18\xb2\x19\xf0\x69\x2f\xae\xb2\xb9\x65\x27\x4f\x82\x00\x18\x2b\xa2\x07\x20\x94\xa2\xc7\xf8\x75\x1f\xa0\xa8\x32\xbf\x21\xd2\x4d\xfc\xf1\x56\xeb\x86\x5b\xbc\x66\x87\xba\xcf\xe1\xa1\x0f\x6c\x93\xaa\x57\x1a\x98\xb3\x89\x10\x00\x63\x55\xf4\x00\x84\x62\xf4\x84\x20\x3c\x8d\x91\x54\xf6\x8b\xe0\x90\xfd\x4a\x72\x2b\xa9\x91\xea\x9a\xfb\xd7\x8d\x14\xe9\x7a\xdb\xee\x69\xc9\x0f\x09\x51\xe3\x11\x00\x63\x65\xf4\x00\x84\x72\xf4\x6c\xec\x5f\xfb\x39\x9e\x77\xd3\xb9\x58\xff\x35\xa5\x20\xf7\xf3\xe1\x63\xb8\xa3\x75\xdc\x57\x1b\x63\x49\xd8\x55\x3a\xae\xff\x6c\xda\x59\x6b\x63\x75\xf4\x00\x84\x82\xf4\x62\xaf\x51\x3b\xc4\xba\xcd\x32\x59\xfc\x72\xe4\x2e\xe7\x4f\xc9\x3d\x4e\xbf\xd0\x9c\x1e\x79\xf1\x74\x41\x8c\x6b\x74\xb0\x9c\xbd\x0b\x02\x60\xac\x90\x1e\x80\x50\x92\x1e\x8e\x64\x53\xfa\x56\x2a\xf0\xe5\xbd\x41\xb4\xc5\xd7\xa4\x8c\x6b\x59\xcc\x2b\x1f\xfb\x70\xaa\x4d\x96\xf9\x6b\xbb\x01\xcb\xb6\x3c\x02\x60\xac\x92\x1e\x80\x50\x94\xde\xd6\x92\xf5\xf8\xb9\x59\x68\x14\x39\xf2\x01\x0f\x6f\x74\x98\x8d\x65\xde\x58\x4e\xbe\x7b\xfd\xfa\xe4\xe4\x60\x4c\xce\x12\xab\x13\x02\x60\xac\x94\x1e\x80\x50\x96\x1e\x19\x55\xde\xa3\x33\xf1\xec\xd1\xdf\x2a\xbd\x2f\xd4\xaa\x72\x6d\xe9\x18\xbb\xdb\x7f\x53\x17\x2e\xf3\x79\x69\x2c\xf5\x67\xff\xcd\x9d\x4d\x3e\x46\x4b\xef\xff\xfe\xc0\x61\x8f\xb5\xeb\x6e\x99\x50\x98\xde\x92\x70\x0c\x0d\xc3\xd3\xd8\xe6\x8e\x5f\xbc\xb9\x8c\xf5\x74\xab\x62\x47\x62\x56\xa9\x67\x85\x9f\xfa\x57\x6c\xbe\xf3\xc8\xae\xbf\x80\x00\x18\x2b\xa6\x07\x20\x94\xa6\xd7\x9b\xf8\x46\x82\xab\xe5\x5e\xa2\xb3\xcd\x8d\x01\x7d\xf2\x86\x4f\xae\xad\xf9\xb7\x70\xcd\x7a\x77\x95\x5f\x8b\x28\x9b\xbf\x4c\x21\x20\x00\xc6\xaa\xe9\x01\x08\xc5\xe9\x8d\x2c\xd8\xdb\x16\x28\xee\x23\x7b\x77\xf7\x64\x63\x5b\xa5\xda\xd1\x95\xb0\x69\xfb\xa1\x34\x0f\xea\x57\x4f\x5f\x30\xcf\x9e\xf3\xd8\x99\xa5\xb0\x72\x7a\x00\x42\x79\x7a\xcf\x3e\xf9\x73\xfe\x08\x6d\x12\x76\x9a\x32\xcb\x1d\xf4\xaf\x9d\xad\xa8\xb6\x4b\x4a\x90\xcc\x97\x3a\x75\x76\xe0\x7a\xb8\xc7\x37\x69\x04\xc0\x58\x3d\x3d\x00\xa1\x40\xbd\x47\x5f\x1e\xae\x6d\xf8\x26\xc5\x26\x83\x12\x11\xf7\xa3\xc5\xcc\x4c\x92\x35\xf7\x1c\x3b\x4d\x9f\xf5\xfa\x4e\x95\xde\x0a\x39\x7e\x00\x01\x30\x56\x50\x0f\x40\x28\x51\x4f\x65\xbb\x2b\xe0\x88\x12\xf7\xc9\x9b\x53\x8f\x2e\x8c\x7f\x98\x4a\xe0\xa9\xd6\xe1\xe6\x3e\xfb\x8d\x9f\xe1\x70\x14\x09\x2b\x4b\x14\x0d\x02\x60\xac\xa2\x1e\x80\x50\xa4\xde\xd6\xa1\xc8\xfe\xeb\xb4\xbd\xf7\x1f\x64\x59\x5f\xff\xe9\x7e\x4e\x28\x4e\xff\x78\xde\xe5\x47\x2f\x4c\x78\x63\x9a\x0a\x12\xe5\x9d\xb4\x10\x00\x63\x25\xf5\x00\x84\x32\xf5\x96\x86\xbc\x48\x85\x74\xe6\x5b\x79\x9b\x3d\xb4\x0d\x23\x7e\xd7\xd7\xbf\x4a\x7a\x6c\xa9\x1a\xca\xf7\xf0\xf1\x32\x2e\x4f\x62\xdb\x06\x01\x30\x46\x53\x6f\xb7\x4c\x7b\xed\xee\x76\xcb\x84\x42\xf5\xa4\x72\x2e\x06\xcd\x05\x52\x1b\xa4\x37\x4d\x2e\x34\x15\xb0\xaf\x45\x0a\xb7\xe7\x26\xe8\xb0\xf5\x32\xaa\xf9\x3a\xc9\x1f\xe7\xdf\x99\x09\xb1\xa2\x7a\x00\x42\xa9\x7a\x76\xcd\x6b\x2b\xd5\x8f\x1c\x4e\x16\xae\x69\xea\x93\xe0\xbe\xbd\x3d\x4d\xfa\xa9\xe6\x7d\xc8\xe8\xbe\x57\x97\x9f\x39\x18\xb6\xff\xda\x59\x82\x61\x55\xf5\x00\x84\x62\xf5\xee\xb4\xc6\xd5\x4c\x1d\x70\xb7\x10\x54\xd2\x95\xda\xd6\xfb\x73\xed\xa6\x42\xdf\xbd\x85\x59\xa6\xaa\x3c\x8b\x67\x7a\xb9\x79\xe1\x16\x08\x80\xb1\xb2\x7a\x00\x42\xb9\x7a\xc4\xfb\xc6\xb5\x14\x89\x4d\xf9\xcf\xce\x94\x9e\xdf\x5f\x32\xfc\xb2\xf6\x1c\xf9\x41\x8b\x6b\x9f\xe8\x15\x79\x24\xa6\x7e\xc1\x1e\xe2\x08\x80\xb1\xba\x7a\x00\x42\xc1\x7a\xfc\x85\x06\xb5\x8c\xcc\x91\xe3\x72\x87\x53\xf2\xb9\x5c\x3e\x55\x4d\x7d\xdd\xd0\x2c\x2c\xe3\x7e\xcc\x54\x31\x69\x5e\xe5\xb7\x6c\x8f\x00\x18\x2b\xac\x07\x20\x94\xac\x27\x74\x44\x76\x15\x9a\xd3\x1f\x32\xf8\x29\xd0\x56\xf6\x65\x5e\x2a\x8f\x9d\x4f\x91\xbd\x38\x13\x69\x67\xab\xb4\x9d\x0d\x3b\x7a\x1a\x01\x30\x56\x59\x0f\x40\x28\x5a\x2f\x54\xdf\xb5\xb1\xc2\x78\x61\xff\x41\xc5\xd2\x39\xf7\x90\xdf\x3f\x73\x5e\x86\x9a\x3e\xfd\xd1\x3e\x98\x69\x28\x24\x6a\x65\xa1\xed\x86\x00\x18\x2b\xad\x07\x20\x94\xad\xd7\xa6\xc1\x25\x4c\x2d\xe4\x2d\xeb\x78\x8a\x52\x8d\xd3\xf7\x72\x2d\x83\xf7\xe5\xae\xf5\x4b\x67\xfa\x3e\x9f\xee\xec\xf4\x78\x86\x23\x43\x00\x8c\xd1\xd6\xfb\xbf\x6f\x1b\xef\x71\xff\x63\xb7\x4c\x28\x5c\x2f\xb8\xe9\x94\xde\x2b\xf8\xe0\xa1\xf0\x01\x0a\xc1\x13\x66\x86\xde\x9c\xad\xc7\xcf\xf4\x5b\xfe\xa9\x38\xe0\xfd\x20\xaf\x1d\x32\x11\x45\x00\x8c\x15\xd7\x03\x10\x4a\xd7\x6b\x3f\x97\x90\x98\xbf\x34\x38\xc8\xf2\xfa\x1d\x62\xfa\x73\xe0\xfc\x48\xdd\x47\x87\xf2\x1f\xe9\xef\xca\xab\x5c\x56\xfc\x59\x9c\x2c\x11\x00\x63\xd5\xf5\x00\x84\xe2\xf5\x0c\x4e\x78\xbf\x36\x6c\xf5\xb1\xab\x5c\x28\x97\x6a\x0a\xb9\x41\xf4\x31\xf7\x43\xe5\xf0\xb6\xf3\x9b\xab\x62\xe9\x97\xe2\x93\x7f\xe2\x10\x00\x63\xe5\xf5\x00\x84\xf2\xf5\x5c\x78\x14\x38\x52\xca\x9e\x9a\x9b\x5b\xde\x56\x13\x7d\xdb\x13\xd6\xc1\xec\xc4\xd5\x5f\x11\x96\xa3\xd4\x46\xec\xa5\x5c\x51\x24\x84\x00\x18\xab\xaf\x07\x20\x14\xb0\x77\xdb\x60\x95\x6e\xe0\x48\xc3\x35\x4d\x89\xb1\xe1\xe7\xc2\x8f\x5e\x58\x3c\x37\x0f\x8c\x67\xbd\x71\xa1\x43\xd7\x6e\xac\x9c\x3d\x89\x15\x01\x30\x56\x60\x0f\x40\x28\x61\x6f\x5e\xc4\xbe\xee\x59\x7f\xdd\x59\x2a\x11\x4b\xd3\x5c\xb3\x2f\x2d\xc3\x95\x23\x01\x1b\x26\x54\x24\xb7\x93\xba\x19\xa8\x55\x1d\x58\x10\x00\x63\x15\xf6\x00\x84\x22\xf6\x5e\x9b\x0c\x0a\x52\x9a\xf3\xaa\x6a\x55\xc8\x88\xcc\xb9\xd6\x4c\x8c\x27\xdf\x68\xbd\xd7\x76\xad\x9c\xd1\xbf\x4d\x75\x71\x4a\x85\x1d\x01\x30\x56\x62\x0f\x40\x28\x63\x8f\xac\xc7\x40\x2b\x64\xcc\xbb\x27\xb7\x99\x5a\xe9\x90\x7b\xe3\xa2\xfe\x47\xe5\x1a\x81\x63\x0f\xa5\x15\x78\x8e\x46\xc0\x2b\x5e\xcc\x08\x80\x31\x1a\x7b\xbb\x65\xda\xeb\x0e\xe1\x6e\x99\x50\xc8\xde\xb6\xe8\x17\x91\xd6\x94\x68\xe5\xdb\xc6\x4d\xa9\x91\xf2\x1f\xb7\x7d\x1a\x52\x26\x0a\xcc\x05\x52\xd9\x74\x0d\x64\x1b\xb9\xea\x76\x3e\xe8\x58\x91\x3d\x00\xa1\x94\xbd\x5b\xd5\xcc\x84\x0b\x16\x0c\xda\x3f\x83\x28\x37\x92\xee\x40\xca\x55\x75\xce\xd5\x9e\xe2\xd5\xbf\x05\x3a\x90\x8f\x44\x19\x73\x3b\xb3\x14\x56\x65\x0f\x40\x28\x66\x4f\xbd\x9e\x95\x6d\x1a\x21\x6e\x0d\x33\xf1\x3a\x25\x26\x18\x31\x7e\x48\xeb\x64\xcb\x83\xb2\x4f\x49\xef\x65\xa2\x53\x93\x8d\x9c\x65\x11\x00\x63\x65\xf6\x00\x84\x72\xf6\xbe\xd8\x77\xf3\xd3\xcd\x15\x19\x2e\x96\x0f\x8d\xc6\xd5\x21\x14\x13\xb6\xdf\x38\xf8\x2a\x88\x10\xaf\xf2\xf3\x16\x09\x31\xce\xd4\x08\x80\xb1\x3a\x7b\x00\x42\x41\x7b\xed\x52\x9c\x80\xf7\xe2\x99\xad\x54\xdf\xe4\xab\xac\x2f\x1d\x02\x7c\xe4\x2b\xa3\x9d\x15\x7e\x7a\x56\xf0\xb0\x96\xde\xf9\xdc\x62\x8b\x00\x18\x2b\xb4\x07\x20\x94\xb4\x57\xce\x3c\xb9\xe9\x3b\xf4\xd1\x81\x82\x89\x77\xf0\xd3\xbb\x81\xd0\x1a\x3f\x0f\xe6\x92\x86\x3e\x3a\x83\x68\x33\x01\x39\xc2\xf8\xce\x6a\x04\xab\xb4\x07\x20\x14\xb5\x67\x3f\x30\x9c\x33\xcb\x12\x7f\xe9\x09\x52\x3d\x6f\xc6\x27\xbe\x32\x52\xdd\xe4\xae\x15\xd5\xa3\x13\xfa\x43\xc6\x4e\xb7\xe1\xf9\xce\x55\x1c\x2b\xb5\x07\x20\x94\xb5\xa7\xf5\x93\xa8\x6a\x1b\xdf\x11\xe9\x69\xc9\x24\xe3\x33\x7b\x46\xc1\xe3\xa7\xfb\xba\xeb\x9f\xd4\xef\xa9\xdb\x93\x2b\xc9\xe6\x0e\x14\x08\x80\x31\x5a\x7b\xff\xf7\xcb\xbe\x3d\xee\xa1\xef\x96\x09\x85\xed\xb1\x76\xe7\x2c\x6d\xfa\xac\x2a\xb6\x28\x65\x9f\x08\x60\x8d\xa6\x92\x50\xe3\x79\x46\x97\x7a\x99\x26\xd3\x13\x1f\x57\x60\x77\x72\x67\xcf\x84\x15\xdb\x03\x10\x4a\xdb\x9b\x50\x08\x4c\xfa\x2e\xa2\x11\x2b\xf5\x15\x68\x78\xfd\x29\x0f\x55\x61\x9e\x65\x15\x15\x6c\xf7\x6e\xef\x32\x9f\x20\x79\xc9\xcc\x81\x00\x18\xab\xb6\x07\x20\x14\xb7\x47\x13\x52\x99\x50\xe3\xf3\x9e\xcd\x7a\xf9\xae\x9a\x94\x91\xdf\xbc\x62\xc5\xe1\x65\xf6\xb0\xec\xe5\xa7\x44\x14\x2a\x1f\x9c\xaf\x03\x04\xc0\x58\xb9\x3d\x00\xa1\xbc\xbd\x5f\x5a\xf6\x07\x32\xd8\xca\x87\xb3\xe4\x82\x1c\xd5\x1b\x35\xf9\x1e\x34\xaf\x85\x05\x3d\x1b\x4f\x8e\x94\x6f\x3a\x23\x6a\x6a\x73\x0e\x01\x30\x56\x6f\x0f\x40\x28\x70\xef\xc7\x78\x55\xfc\xcc\xef\xc2\x2b\xc7\x1f\x28\xd8\xd2\x93\x1a\x95\xd5\xcf\x27\x10\x07\x65\x9f\x5b\xe9\x99\x6c\x3a\xf2\x81\x3c\x74\xa7\xb0\x58\xc1\x3d\x00\xa1\xc4\xbd\x99\xa9\xb6\x81\x8e\xa8\x1b\x13\x64\x67\xfa\x98\x78\xfe\xc8\x3c\xff\xf1\xd1\x6b\x80\x10\x78\x20\xb5\xdb\x3a\xaf\xea\xb3\xdf\xcc\xce\xc4\x83\x55\xdc\x03\x10\x8a\xdc\xfb\x42\xbc\xe1\x25\x43\xb2\xb0\xdf\x4d\xcf\x80\xf1\xf1\xc8\xc3\x64\x93\xde\xd0\xb7\xd9\x32\xa1\xcf\xf3\xab\x04\xe8\x12\x84\x17\x77\x56\x0a\x58\xc9\x3d\x00\xa1\xcc\xbd\xed\x7e\x3d\x75\x39\xc9\x2f\x3a\xd5\x9f\x32\x95\xf6\x79\xa5\x30\x14\xb3\xb5\xd8\x44\xac\x1f\x87\x5c\xec\xaf\x48\x44\xa8\x53\x18\x23\x00\xfe\x8f\xe6\x9e\x25\x25\x53\x7d\xaf\x39\x61\x46\x15\xa7\xda\xcb\xa8\xa5\x1a\xac\xc8\xfd\x82\xfe\x57\x03\x93\x48\x06\x89\x36\xb9\x60\xc9\x2b\x72\xd4\x61\xdf\x61\x21\xeb\xab\x73\x1d\xf6\xc7\x20\xde\xe1\x2b\xc1\x41\x55\x82\xfc\x33\xca\x7c\xe1\x82\xdd\x15\xa4\xe7\xa3\x3e\x11\x3f\x25\xe1\xfb\x6b\xa8\x1b\x23\x6f\xe1\xb3\x53\x6d\xf5\x1a\xb5\xc1\xc1\x8d\xa4\x19\xdc\xb7\x1c\x17\x53\x1a\xe9\xbe\x77\xa6\x02\xa2\x62\xb1\x93\x95\x7f\xff\x8b\x26\x42\x92\xa3\xa8\x3b\xd0\xd1\x8f\xb7\xff\xee\x76\x56\x5c\xbb\xf0\xd3\x58\xa3\xd0\x34\x27\x89\xa4\xb4\x47\x48\xae\xc5\xa3\x35\xb1\xbf\x86\xca\xfc\x8a\xcc\x11\x9a\xa3\x9c\xa8\xf6\x1a\x31\x2d\x96\x9a\xf8\x95\x4a\xb5\x9a\xed\x77\x5a\xf0\xca\xa5\x7c\x57\xda\xb5\x47\x74\x29\x7f\x0d\x2d\x95\x93\x8e\xe6\xd8\x9e\x97\x62\xee\x1e\xfb\xba\x2d\x5e\x56\x5f\x33\xbb\x94\x5c\xc1\x75\xd1\x47\xe0\xb0\xbf\x31\x7b\x40\xbb\xf1\x5f\x43\x19\xe9\x79\x98\xb6\xda\xd3\x9a\x3a\x23\xf8\xe7\xad\x14\x5c\xeb\xe8\x05\x9f\x07\x1e\x2d\x9f\x31\xa4\xa1\xcb\x39\x4f\x67\x9b\x1c\xf7\xd7\xd0\xa3\x16\xa1\x3c\x23\x65\x77\x02\xda\x72\xa6\xb6\x04\x38\x5b\xff\x28\x16\xbe\xe2\x7f\x79\x7c\xb4\x33\x81\xbd\xf6\x52\xa7\x7d\xf7\x8f\xbf\x86\x72\x3d\xdc\xbe\xbf\x31\x10\x92\xf9\xb3\xa6\x9a\xdb\xf7\xbc\xbf\xf1\xbd\x6d\xaa\xc0\xa0\x13\x7c\x27\x0e\x67\xe9\x96\xef\xa3\x51\x90\xfc\xbf\xc3\xbe\xbd\x5e\xd5\xdd\x19\x0d\x85\xee\x9d\x4e\x6d\xbb\x15\x3e\x72\x32\xe4\xac\xb5\x42\x64\x1f\xc9\x52\xd1\xd2\xfd\xdb\xe3\x3e\xcb\x4d\x5a\xa5\xb2\xaf\xcd\xf3\x8e\x25\x48\x22\x00\xc6\x8a\xee\x01\x08\xa5\xee\x1d\x57\xca\xa2\xf9\x0e\x89\x1c\x94\xb8\x76\xf9\x19\xd3\x01\xaf\xad\x59\x0b\xd7\x2f\x1a\xec\xb4\x71\xec\x71\xf6\x3c\x1d\xef\x03\x14\x11\x00\x63\x55\xf7\x00\x84\x62\xf7\x22\x2c\x3a\xd5\x68\x3f\xf8\xa7\xdc\x6a\x50\xf4\x6f\x3f\xf2\xb5\x55\x6c\x7c\xa4\xa7\xb7\x4b\xf4\x66\xfd\x05\x6d\xc3\x4c\xf3\x41\x47\x04\xc0\x58\xd9\x3d\x00\xa1\xdc\x3d\xe7\x70\x76\x1e\xd9\x13\xb7\x0e\x94\xb7\x9e\xe9\xbd\xeb\x2e\x14\xb9\x62\x10\xd8\x11\xcf\xcc\xb7\xa2\x99\x5e\x40\x4b\x53\x15\xc0\x86\x00\x18\xab\xbb\x07\x20\x14\xbc\x57\x54\x38\x30\xff\xe1\x8b\x48\x55\x5e\xd7\x01\xe5\x1f\x1b\x66\xae\xea\x66\x0c\x21\x1e\x47\x18\xa7\xf2\x75\x16\xda\x0e\x5c\x9f\xdd\x87\x00\x18\x2b\xbc\x07\x20\x94\xbc\x97\x73\x4a\x82\xcd\xea\x63\x58\x86\x2a\x11\xa7\x23\x63\x69\x9e\x57\x5f\xf7\xb1\xb1\xd5\x3b\x1a\x21\xec\x29\xb6\x76\xf2\xe0\x9e\x0c\x02\x60\xac\xf2\x1e\x80\x50\xf4\x9e\xf6\xa6\x86\xb1\x7c\xd6\x6b\x92\xbe\xc3\xf7\x4d\xbe\x49\x30\xd2\x86\x27\xcf\xee\xe7\xb9\x4c\x35\xe6\x91\x1c\x66\x95\x67\x1b\xe2\x8a\x00\x18\x2b\xbd\x07\x20\x94\xbd\x77\x57\x58\xf2\xf1\x64\xaa\x8a\x08\x23\xad\x8d\xd1\xed\x76\x26\x97\x2d\xfd\x6e\x1b\xfa\x6b\xe1\x1b\x49\x22\x2c\xea\x2c\xf4\x27\x77\x96\x07\x18\xed\xbd\xdd\x32\xed\x35\xef\xec\x96\x09\x85\xef\xf5\x2f\xe2\x02\x5c\x7c\xa8\x7f\xa4\x3c\x63\x9b\xbe\xb8\x76\xc4\x3d\xb6\xb7\xa1\x86\x6f\x9d\xa1\x3c\x98\xac\xe9\xd2\x3e\x1e\x16\x1a\x04\xc0\x58\xf1\x3d\x00\xa1\xf4\xbd\x84\x14\x3d\x95\x03\x81\x87\xb6\xa7\x34\x5d\x16\x6c\x7c\xf3\xac\xf8\x5b\x16\x4c\x5e\x95\x0d\xb9\x74\x0e\x8e\x9c\x71\xbf\xec\x2d\x85\x00\x18\xab\xbe\x07\x20\x14\xbf\xa7\xd2\x54\xf8\x71\xd3\x7b\x28\x76\xd4\xe5\xfe\x45\x76\xd7\xcf\xd5\x74\x51\x94\x9f\xcb\x7e\x1c\xd1\xfa\x48\xf5\xf4\x57\xd0\xe7\x31\x4e\x04\xc0\x58\xf9\x3d\x00\xa1\xfc\xbd\x8e\x04\x58\x5e\x31\xe3\x5e\x48\xb5\xd5\xd7\x42\xbd\x10\xde\xd3\xfa\x97\xbc\x42\x89\xed\x7d\x29\xfd\xd8\xfa\xbf\x49\x7c\xda\x77\x00\x01\x30\x56\x7f\x0f\x40\x28\x80\x2f\x7e\x62\x6b\x5d\xf4\xbe\xc4\xfc\x88\xa6\xfe\x81\xbe\x37\x67\x74\x1f\x7c\x0a\x12\x55\xf6\x68\x2f\x11\x76\x3d\x9a\x26\x50\xf6\x87\x1b\x01\x30\x56\x80\x0f\x40\x28\x81\xcf\xe2\xe9\x0a\xb5\x85\x68\x3d\xb5\xd8\x4f\xf5\x54\x0d\x4a\x7c\x0a\x65\xea\x95\x5a\x43\xfd\xc7\xc3\x9a\x61\xe4\x81\x3f\x9b\xe0\x9d\xc2\x62\x15\xf8\x00\x84\x22\xf8\x68\xa8\x18\x2c\x8f\xd5\x73\x71\x8e\x32\x7e\x73\xd6\x54\xfb\x69\x57\x50\xbf\x7f\xc3\x61\xec\xf4\xed\x87\xf9\x4e\x05\x13\x2f\x44\x75\x11\x00\x63\x25\xf8\x00\x84\x32\xf8\x1c\x6b\x23\x22\x57\x8b\x7e\x3f\xfc\xf5\xbe\xaa\xa0\x4c\x26\x5b\xe0\xf7\x10\x0b\xc7\xdb\x8a\x7d\x89\x5d\xc3\x52\x81\xf7\xd4\x5e\x4b\x23\x00\xc6\x68\xf0\xed\x96\x69\xaf\x2b\xf3\x6e\x99\x50\x08\x9f\x37\xa5\xb0\xc6\xb1\x83\x71\xcc\xdc\xf7\xd7\xbd\x3a\xa6\x32\xbd\x57\xb8\xe8\xb6\x4c\x4f\x64\x15\x9a\xbe\xca\x8b\x92\x5e\x3d\xbe\xb3\x93\xc6\x8a\xf0\x01\x08\xa5\xf0\x21\xdf\x7d\x49\x33\x54\x9d\x68\x7f\x75\x87\xdf\x12\x95\xae\x1e\x2e\xaa\x18\x8a\x20\xa2\x1d\x35\x4d\xa9\x65\xe3\xc7\x99\x4c\xee\x6c\x94\xb0\x2a\x7c\x00\x42\x31\x7c\xd9\x63\xf7\x6e\x0a\x84\x97\xbc\xf9\xc1\xe9\x2e\x10\x79\x2c\x37\x93\x30\xfd\xc6\x50\x26\xff\xc5\x9a\xa7\x7a\xb6\xe8\xd1\x01\xce\x9d\xb5\x1d\x56\x86\x0f\x40\x28\x87\x2f\xf0\x90\xfe\x30\xe4\x41\x23\x2b\xde\x67\xdc\x4f\x7c\x22\x78\x88\xe1\xb1\x0f\xfd\x8b\x2b\xd7\x8c\xb3\xf3\xa7\x02\x7f\x43\xc8\xce\xa4\x80\xd5\xe1\x03\x10\x0a\xe2\x3b\xdf\x34\x78\x80\xff\xc5\xdb\xde\x97\xce\x1f\x28\xd2\xaf\xe8\x2c\x9f\x6b\x31\x0d\xc9\xf2\x49\x6d\x4b\x91\xb9\xfb\x79\xea\x27\x0d\x1d\x02\x60\xac\x10\x1f\x80\x50\x12\x9f\x65\xc3\x43\x5a\x69\x7d\xce\x4e\x09\x95\x95\x67\xf1\xd9\xc4\xbe\x27\x5d\xa1\xf4\x67\xb9\x4b\x6f\x22\xcf\xe6\x3f\xb6\x9f\xd8\x32\x41\x00\x8c\x55\xe2\x03\x10\x8a\xe2\x33\x9d\x6a\xfe\xcd\x3a\xe8\x11\x4c\xea\x2f\xe0\xbb\xa1\xc1\x36\x1e\x2e\x2a\x77\xe3\x5a\xca\x7a\x78\xcd\xc9\xea\xc3\xcf\x6f\xdc\xa2\x44\x00\x8c\x95\xe2\x03\x10\xca\xe2\xa3\x98\x0e\xd2\xa5\x61\x4a\x0a\xbf\x2f\xf1\xe1\xa8\xd3\xa9\xd0\xf3\x76\x8d\x06\xa7\x0e\xd7\x3d\xac\x34\x4a\xd1\x70\xba\xf6\xa1\x09\x46\x00\x8c\xd1\xe2\xdb\x2d\xd3\x5e\x6b\xd7\xdd\x32\xa1\x30\xbe\x2b\x6d\x14\xb7\xa5\x0e\xbe\x62\x78\x18\x78\x3d\x6c\xfd\x76\xe2\x73\xc6\x61\xdd\xc1\xce\x6a\xa6\x98\xcb\x9b\x97\xd3\x5b\xbe\xb4\x33\x22\x00\xc6\x8a\xf1\x01\x08\xa5\xf1\x05\xdd\x71\x59\x9c\x21\xaf\x2e\x0b\x0c\xca\xc7\xe9\x31\x2a\xbb\xdc\x64\xc9\x66\x37\x31\x78\x18\xcb\x5b\x3c\x30\x34\xff\x82\x6b\x67\xa3\x84\x55\xe3\x03\x10\x8a\xe3\xa3\xf8\x21\x4d\x27\x9e\xa6\x95\x98\xd3\x0a\x46\x32\x1f\x75\x50\xed\x7b\xe0\xfa\x88\xfe\xca\x85\xd3\xb5\x8c\xf7\x7e\xfc\x36\xe1\x30\x42\x00\x8c\x95\xe3\x03\x10\xca\xe3\xcb\x1e\x91\xbf\x48\x4a\x14\x39\x30\xec\x77\x04\xc4\xe8\xb4\xb1\x9f\x89\xa0\xbf\xa2\x7a\xb7\xc7\x88\xad\x4a\xdb\x82\xf3\x6b\xa2\x00\x02\x60\xac\x1e\x1f\x80\x50\x20\x1f\x3e\x83\x70\x6d\xce\x6b\x29\xc5\xfd\x40\xd9\xe6\xc0\x21\x1d\x31\xc9\x31\x8f\xa1\x9c\x43\x72\x76\x41\x88\xe5\x73\xd1\xd2\x22\x11\x04\xc0\x58\x41\x3e\x00\xa1\x44\x3e\xfb\x3c\xda\x9b\x31\x2c\xb1\x4b\x89\x2a\x47\x9d\x0d\x9d\x15\x82\x1e\x9f\x87\x94\x2a\xce\x12\xf1\x9c\x7d\xb7\xe5\x16\x60\x70\xfd\x32\x02\x60\xac\x22\x1f\x80\x50\x24\x5f\x20\x8e\xe1\x21\x87\xf8\x4b\x39\xda\x23\xd4\x56\xe7\xa0\x48\xce\x07\xb1\xfc\x54\x6b\x5f\x99\x8c\x0d\x9e\x5c\x3f\xb1\x46\x6d\x61\x89\x00\x18\x2b\xc9\x07\x20\x94\xc9\xa7\x22\xb0\xc5\x2f\x38\x29\xe8\x58\x9f\xf2\xe3\xee\x19\x19\xcb\xaa\x6b\x52\x4b\x9f\x9f\x72\x59\x59\xe1\x43\x9f\xd0\x8c\xd0\xda\x1a\x20\x00\xc6\x68\xf2\xed\x96\x69\xaf\xdd\xdd\x6e\x99\x50\x28\xdf\xe5\x5b\x0f\x5d\x4d\x70\xf0\x12\x87\xdb\x03\x8b\x0f\x6f\xf5\x14\xee\x67\x39\x98\xab\xf2\x66\x92\x1f\x89\x7a\xcc\x78\xd4\xaa\xdd\x10\x01\x30\x56\x94\x0f\x40\x28\x95\x8f\x71\x3e\xab\xe7\x7b\x97\xb0\xfe\x42\x70\xc1\xa7\xcb\x6d\x8b\x92\x02\x72\x8e\x53\xd2\x8f\xef\x84\xfa\x6d\x45\xbd\x8a\x30\xd4\xdd\xb9\x1c\x63\x55\xf9\x00\x84\x62\xf9\x72\x8c\xdb\x5e\xb4\xb9\x51\x7d\x68\x4c\xbf\xbe\xc0\x15\xac\xfa\x9d\xdf\xd2\x03\x57\x5d\x99\xd5\xf1\x82\x31\xb2\xac\x6e\x60\xea\x30\x02\x60\xac\x2c\x1f\x80\x50\x2e\xdf\xfa\xbd\xf5\xaf\xcd\x87\xf6\xbf\x08\xa3\x31\xab\xa9\x14\xd2\x38\xe5\x4c\x34\x71\xea\x45\xba\x7a\xa0\x96\xe6\xe8\xb8\xba\x58\xc6\x21\x04\xc0\x58\x5d\x3e\x00\xa1\x60\xbe\x91\x5f\xf7\xa5\x02\x2e\x1a\x85\x72\x08\xe7\x65\x28\x3e\x36\x3f\xd2\xac\xec\xf4\x21\xd8\x81\x89\xd1\xe8\x4f\x8e\xf8\x78\x43\x9f\x3b\x02\x60\xac\x30\x1f\x80\x50\x32\x9f\xe0\x29\xb2\x23\x9b\xf1\x83\x9e\x85\xf0\xa4\x8a\xf4\xf4\x03\x41\x0b\xe6\x77\x63\xa9\x99\x65\xd9\xec\x6e\x2b\x06\x8f\x26\x54\x76\xde\x0f\xac\x32\x1f\x80\x50\x34\xdf\x3b\xdf\xc6\x29\x1a\xd7\xf9\x6b\x01\xbe\xf5\x09\x21\x9c\xd7\x12\xd9\xb6\x34\x24\x1c\xdf\xd6\xac\x7c\xca\xfb\xec\xb9\x4d\x26\xaa\x8c\x00\x18\x2b\xcd\x07\x20\x94\xcd\x67\xbb\xe2\xc8\x9a\x51\xf4\xcd\xc6\x7e\xa2\x80\x5f\x69\x3f\x11\x9d\xaf\xb2\x0a\x5f\x50\xaa\x94\x54\x1a\xe7\xeb\x9c\x27\x01\x1e\x3b\x19\x18\x6d\xbe\xdd\x32\xed\x75\xff\x63\xb7\x4c\x28\x9c\x8f\xc9\x6a\x62\x42\x78\x2d\x94\x2c\xc6\x57\xf3\x7a\xea\x26\x99\xdc\xaf\x17\x01\xd5\x72\x2b\xbf\xe8\x75\x75\x78\x5c\x96\x5e\x2b\xab\x20\x00\xc6\x8a\xf3\x01\x08\xa5\xf3\x31\x6a\x99\x7b\x84\xa7\x72\x2f\x72\x7f\xf8\xde\xc3\x7a\x5b\x34\xe2\x46\xf4\xbe\xee\x89\xac\x7d\x4f\x75\xa9\x98\x6b\x9e\xf5\xfe\xbf\x1f\xd8\x60\xd5\xf9\x00\x84\xe2\xf9\xea\x7b\xbf\x18\x73\x76\x55\x96\x4e\x5f\x0c\xeb\x4e\xdc\x3a\x72\x9f\xc8\xcc\x42\x8d\x74\x24\xae\xb6\x4b\xe8\x7c\xa1\x8a\xfb\x5d\x4d\x04\xc0\x58\x79\x3e\x00\xa1\x7c\xbe\x38\x7d\x1e\xa2\x81\xd8\x3b\x59\x44\xdb\x65\x7d\x43\x7a\x2f\xc5\xba\x38\xb8\x8f\xb9\xf5\x27\xca\x3b\xb0\x31\xae\xb0\xcd\x6b\xed\x6c\xaa\xb1\xfa\x7c\x00\x42\x01\x7d\x62\x5b\x54\x19\x96\x84\xbc\x9b\xa4\x99\x9a\x75\x62\xe2\xea\xab\x2e\x87\x03\x85\x1e\xd1\x04\xb0\x6e\xf0\xde\x0b\xd3\x66\x15\x3d\x83\x00\x18\x2b\xd0\x07\x20\x94\xd0\x57\xe4\xcf\x98\xb1\xb5\x92\x78\x79\xed\xb8\xc1\x7b\xc9\x91\xd6\xa3\x3a\xbc\x4d\xd3\xf9\xa1\x9c\xf1\x59\xd7\xf8\xdd\xa5\xd8\x82\xf9\x10\x00\x63\x15\xfa\x00\x84\x22\xfa\x8e\x2b\xf8\x6e\x8e\xf1\x66\x69\xab\xfc\xf4\x6b\x3a\x79\xf0\xc4\xe4\x4f\xad\xe7\x54\xf9\x39\xa6\x05\x9e\x4d\x0e\x1d\x3e\x7e\xc8\xce\x55\x1c\x2b\xd1\x07\x20\x94\xd1\x47\xe1\x14\x38\xcb\x56\xcb\xf4\xca\xaa\xc0\x5b\xd2\xef\x25\x09\x91\xcc\x71\x8b\x7b\x03\x2d\x9d\xb3\x97\xcb\xe5\xcc\xbf\xd9\xcf\xb3\x21\x00\xc6\x68\xf4\xed\x96\x69\xaf\x3b\x84\xbb\x65\x42\x21\x7d\x8c\x02\x9a\x0d\x92\x6a\x7f\xae\x70\x8c\x95\xe8\x99\xe6\x85\x8b\x6f\xa7\x2d\xc5\xaf\x38\xe8\xf2\x2e\x3e\xcb\x94\x9a\xe1\xb9\xc8\x8b\x00\x18\x2b\xd2\x07\x20\x94\xd2\xd7\x36\xd5\x2c\xff\xe7\x88\xab\x57\x97\xfe\x45\xde\x7e\x82\x3f\x99\xaf\x8b\x96\xd9\x5b\xe1\x6b\x84\xfa\x7e\xba\xdc\x70\xee\xe8\xf3\x08\x80\xb1\x2a\x7d\x00\x42\x31\x7d\xd3\x23\xef\xbb\xf2\xf3\x9c\x0f\x6a\x53\x6e\x93\xa5\x8a\xa6\x3c\xc8\xe0\x94\x14\x40\x16\xbd\x65\x23\x4e\x87\x1d\x9b\x1e\x2e\x35\x47\x00\x8c\x95\xe9\x03\x10\xca\xe9\x83\x2d\xd7\x8f\x28\x46\x1b\x6b\x72\x5c\x1b\x32\x53\x4f\x3a\xe6\xa0\xfd\x24\x69\xf2\x2c\xcb\x3b\x6e\xc3\x98\xf8\x8f\x2a\xf6\x36\x64\x08\x80\xb1\x3a\x7d\x00\x42\x41\x7d\x24\xd2\x34\xc6\x76\x34\x73\xad\xde\x75\x12\x4d\x2b\x81\xb1\xc7\x94\x24\x9f\xbd\xbd\x1b\x7b\xe7\xa5\xb2\x1d\x4d\x9a\xed\xb0\xd9\xce\x72\x15\x2b\xd4\x07\x20\x94\xd4\x77\xd3\x5c\x3a\xa2\x47\xa5\xaf\x42\x9f\xc5\x26\x2a\xf4\xc0\x37\x8f\x53\x4f\x5e\x0d\x1d\x81\xeb\xf3\x4f\xf0\xf4\x37\xb9\xef\xa7\x39\x80\x00\x18\xab\xd4\x07\x20\x14\xd5\xa7\x84\xcb\x1a\x7b\xea\x95\xb2\xc9\x7d\x48\x84\x1a\x99\x9c\x6d\xc6\x91\x7c\x7a\x13\x14\xe2\xea\x22\x28\x3e\x36\xea\x51\x5b\xbb\x33\x29\x60\xa5\xfa\x00\x84\xb2\xfa\xce\xaf\x3a\x98\x4d\x8a\xe0\x63\x83\xc4\xd9\xe3\xc8\x9c\x24\x12\xdf\x05\x9c\xbb\xf3\x9d\x3e\x79\x7e\xed\xce\x67\x59\x4d\x2e\xf7\x9d\x65\x1e\x46\xab\x6f\xb7\x4c\x7b\xdd\x43\xdf\x2d\x13\x0a\xeb\x7b\x75\x4e\x61\xfe\x7d\xca\xab\x66\x33\xfc\xc5\x90\xaa\xba\xee\xd0\xb1\xc9\xa3\x87\x47\x46\x2f\x6b\x90\x3b\x1f\x60\x91\xfa\x5a\x43\x83\x00\x18\x2b\xd6\x07\x20\x94\xd6\x17\xcb\xd2\xf5\xe3\xd9\xe0\x8d\xea\xe5\xab\x61\x45\x9f\x65\xbf\x1c\xd4\x62\xe0\xea\xc8\xa6\xf9\x3c\xc4\x45\x3e\x86\x27\x5d\xbd\xc7\x8e\x00\x18\xab\xd6\x07\x20\x14\xd7\xc7\xa2\x64\xff\x32\x8d\xda\xee\xf1\x41\xc6\x87\x0e\x36\x1f\x49\xbc\x08\x74\xcd\x69\xee\xc5\x8f\x4f\x58\x4a\x99\xc8\xe3\x63\x6b\xf1\x08\x80\xb1\x72\x7d\x00\x42\x79\x7d\x97\xc6\xa8\x05\xcc\xc7\x78\x39\xbd\xcd\x3f\x52\x0b\xa8\xe3\x0d\x02\x1e\x10\xab\x52\x9c\x63\x3f\xb5\x2e\xde\x17\x71\xa5\xb6\xd6\x16\x01\x30\x56\xaf\x0f\x40\x28\xb0\x6f\x84\xc4\x64\x22\xa5\x5e\x0e\x52\x39\x5b\xbb\x26\x6e\xbe\x75\xea\xa3\xea\x97\x58\x59\x9a\xd9\xc3\x75\x52\x5e\x71\xf0\x63\x31\x7b\x04\xc0\x58\xc1\x3e\x00\xa1\xc4\x3e\x3c\x17\x13\xb5\x6d\x89\xcc\xc2\xd7\xa2\xb2\xae\x4d\x69\x9d\x91\x20\x7c\xf7\x15\x7d\xd2\xcb\xe6\xa4\x96\xed\xce\x7d\xfc\x87\x4e\x21\x00\xc6\x2a\xf6\x01\x08\x45\xf6\xd1\x0b\x3d\x9c\xa3\x91\x65\x1c\xa9\xf7\x39\x95\xc9\x03\xfa\xfc\xea\x4c\x3e\xeb\x30\xf9\xaa\xa9\xd4\x0a\x49\xd3\x1c\x3c\x3c\xb9\xb3\xe2\xc1\x4a\xf6\x01\x08\x65\xf6\xcd\x44\x44\x05\x7f\x55\x3d\x78\xc3\x7c\x36\xe9\x6b\x4b\x9d\x39\x19\x53\x53\x4a\xa6\xdc\x74\x8d\xa0\xf6\x8d\x8c\x7b\xe7\xad\xa4\xd5\x11\x00\x63\x34\xfb\x7a\xa1\xff\xaf\x4c\xe7\x04\x3b\x27\xdd\xe2\x63\xd2\xb2\x56\x58\x4b\xd7\x8e\x09\xcf\xd1\xde\xc9\xfb\xf2\x86\x86\x72\xc5\x67\xd6\x76\xdf\x69\x43\xa2\xd8\xbb\xb2\x54\xfe\x7f\x9d\x5f\x45\xeb\x5c\x78\x72\xcc\xe8\xb7\xa3\x5a\x79\x3d\x99\xa5\x1e\x91\xdb\xaa\xd6\xb6\xca\x8f\x53\xc9\x54\x0d\xfb\x8d\xed\x7a\xae\x50\x74\xfd\x35\xf4\x8f\x96\xec\xb8\x79\xe8\xc9\x04\x91\x02\xc2\x58\x68\xf3\xd8\x49\x0b\xbd\x3e\x9a\xe7\xaf\xe8\x47\xcf\x5a\x96\x5d\x0e\x3b\x4a\xa2\xf7\xd7\xd0\xaa\x87\x76\xc7\xff\xe4\x15\x14\x36\x9b\x0d\xcc\x8c\x77\x4c\x47\x2c\x9b\xce\xe3\x63\x45\xba\xa3\x8f\x94\x5f\x0c\xba\x31\xa1\x79\xfc\xaf\xa1\x0c\x9e\x24\x96\x59\x4f\xce\xed\xab\x8b\xbf\x5a\x46\xae\x37\x24\xf0\x28\xa3\x63\x6d\xf6\x88\xcd\xf3\xcd\x97\x3f\x70\x69\xaf\x0f\xeb\xf9\xed\x9e\x62\xee\xf5\x48\x51\xa7\x98\x7a\xb1\xd7\xdb\xc6\x75\x6b\x45\x3d\x49\x0f\x34\x6d\xf6\x07\x1e\xba\x52\x6e\x6c\x29\x14\x67\x43\xe1\xff\xfd\x9b\xa0\xc8\xbb\x4c\x83\xbf\x86\x06\xe6\x4a\x2b\x0f\x45\x58\x8c\x39\x5b\xd2\xcc\xb5\x0b\x11\x39\x25\x3d\x1b\xe3\xdd\xb6\x8e\xce\x51\xf8\x15\xcd\xd1\xb9\x61\xf1\xf5\xaf\xa1\x57\x37\x29\xb7\x65\x9b\x4a\x2b\xf7\x17\x7b\x9b\x35\x8f\x51\xc9\x76\x88\x5d\xd1\x72\xeb\x69\x14\x65\xaa\x71\x99\x48\x63\x14\x1d\xfb\x6b\x28\xb9\xdf\x03\xbf\xad\xe1\x51\x67\xf7\x58\xde\x86\x19\xdb\x68\x05\x81\xfc\x27\x21\xc7\x85\x0e\x58\x19\x7e\xfc\x32\x22\x3f\xa7\xae\xfc\xd7\xd0\x8c\xd0\x93\x2d\x89\x1c\x5b\x9b\xb1\x22\x0a\xfe\x8f\x03\x1c\x6d\x85\x24\x67\x67\x32\x41\xf5\xb5\x79\x26\x63\xc7\xeb\xdf\x69\x7a\xff\x1a\xfa\x96\xef\x5d\x67\x5b\xc2\xbe\xed\x42\xf2\x69\xd9\x1f\x94\x07\xc5\x16\x75\xab\xee\xc5\xd2\xdc\x31\x4a\xb7\x9b\xcd\x4b\xef\x4a\x6b\xff\x6b\xa8\x76\x08\xd9\x4d\xd5\x1a\x4f\x0a\xf1\x5f\x07\x4d\x75\xa4\xcd\xa4\x4d\xb5\x99\x69\x95\x9e\xfb\xb7\x52\xca\xa8\x03\xbf\x6f\x52\xef\xfe\x1a\xda\xba\xb6\xfa\x39\x7e\x41\xee\xeb\x54\x76\xf2\x84\xe5\x15\x13\xf5\x13\xab\x45\x7f\x06\x93\x8e\xe2\xa8\xe5\x4e\x7c\xaa\xe2\x0c\x6f\xfd\xbf\x53\xcc\xbd\x5e\xd5\xff\x4d\xd5\x38\x14\x46\xd8\xfb\x74\xe4\x60\x6a\xe2\x62\xa9\x1b\x45\xcd\x9c\x59\x77\xfd\xe8\xf4\xd7\xc9\xdb\x16\xa3\x53\x52\x72\x25\x5c\xf2\x7a\xcc\xe3\xe7\x10\x40\xc0\x8c\x11\xe2\x50\x18\xa1\x5a\x88\xc1\x95\xe7\xaf\x4e\x5d\x23\x4b\xfa\x45\xa5\xfd\x6a\x7d\x29\x77\x6a\xe6\x76\xd4\x0d\xa8\x87\x39\x80\x78\x18\x7a\xcf\x46\x87\x00\x02\x66\x8c\x10\x87\xc2\x08\x2f\x65\x7a\x52\xb0\xc5\x85\x9e\xff\xc9\xef\x6a\xc8\xb9\xa6\xeb\xf6\xdb\x3a\xcd\xe8\xea\xc8\xd3\x01\x85\xd4\xe3\xde\xbf\xa3\xc3\x8f\x22\x80\x80\x19\x23\xc4\xa1\x30\xc2\x6e\xd9\x37\x93\xf6\xe4\x0e\x24\x81\xfa\x1f\xf3\xfa\xee\x98\xde\x69\x6e\xe0\xac\xf6\xe3\x3d\x50\xb8\x2a\xe2\x2e\x4b\xaa\x15\x74\x19\x01\x04\xcc\x18\x21\x0e\x85\x11\xf2\xac\xcb\x99\x27\x6c\x1e\x3d\xf2\xaa\x32\xac\x3c\xa2\xb2\xc2\x77\x5e\x77\xff\xdb\x4d\xce\x81\x47\x55\x4f\xb2\x06\x6c\xa6\xea\xd5\x11\x40\xc0\x8c\x11\xe2\x50\x18\xe1\x34\x89\x31\xf3\x55\xa3\x9b\xc4\x6b\x4f\xe8\x3c\x3a\x13\xb7\x09\x2e\x5d\xc7\xc7\x8f\x5f\x1a\x4a\xee\x1a\xe6\x77\xb2\xea\x6b\xe5\x45\x00\x01\x33\x46\x88\x43\x61\x84\xb7\x3e\xa7\xc7\x89\x1c\x2c\x34\x8e\x61\x1a\x96\x8b\x8d\xd5\xbe\x0a\xbc\x84\xae\x86\x04\x39\xb7\x6a\x3c\x7b\x5c\x3f\x65\x5e\x0e\x10\x40\xc0\x8c\x11\xe2\x50\x18\xe1\x23\xae\xaf\xaa\x69\xa2\xc3\x79\x2d\xa4\x42\xcd\x97\xb6\xf9\x1a\x5e\xd8\x79\xf5\xdc\x6f\x1b\xd4\x92\xc9\x6e\xe3\xc8\x31\x56\xc4\x23\x80\xf0\x1f\x31\xc2\xbd\xe6\x9d\xdd\x32\xa1\x30\xc2\xb9\xba\x7c\xb9\xf3\x95\x73\x7a\x51\x34\x95\x7e\x44\x1f\xff\x5c\x8c\x7f\xc4\x23\x97\x17\x44\xc7\x68\xe2\x16\x7c\xa0\x54\xdf\xe3\x18\x02\x08\x98\x31\x42\x1c\x0a\x23\x4c\x14\x1b\x32\x24\xcb\xe4\x79\x49\x1d\x42\x15\x2b\x26\x2b\xdc\x36\x30\xb4\xd0\xda\xf3\xfd\x59\xfd\xc7\xae\x67\x41\x8f\x2c\xaa\x8f\x20\x80\x80\x19\x23\xc4\xa1\x30\xc2\x63\x0f\xc4\x93\x6b\xee\xde\x96\x57\xd3\x24\xa2\x9c\xf5\x0e\x4b\xca\x78\xc2\xcc\xc9\x33\xe1\x1b\xc2\x46\x1b\xdd\xb6\x46\xa1\xa8\x80\x00\x02\x66\x8c\x10\x87\xc2\x08\xdf\xfb\xe7\xc5\xbf\x21\x2c\x5d\x09\x38\x2e\xe2\x88\xeb\x0d\x1d\x5f\xd6\xe8\x3b\xa2\x74\x98\xa6\xe2\x58\x4f\x85\x08\xa5\x36\x9d\x0e\x02\x08\x98\x31\x42\x1c\x0a\x23\xdc\xd8\x4e\x98\x78\x13\x49\x3f\xf1\x63\xf8\xc6\xe8\x1d\x95\xea\x2e\xa5\x73\x9c\xf1\x0b\x1d\x57\xe5\x47\x8b\xce\x6c\x36\x15\xbf\xd2\x42\x00\x01\x33\x46\x88\x43\x61\x84\x7c\x42\xb5\xd3\x6f\x72\xf2\xf8\x20\xf9\x28\xe5\xef\x15\x59\x45\xf3\x79\xef\xeb\x62\x6c\x3e\x06\xc7\x6e\x0e\x2a\xc8\x0a\x16\x1c\x44\x00\x01\x33\x46\x88\x43\x61\x84\xfb\xf4\xcb\xb4\x4e\x57\x3c\xbd\x56\xb0\x5c\xa8\x2c\x5b\x13\xfd\x87\xa2\x2b\xa7\x2d\x92\x8c\x40\x77\xcd\xfd\x18\x95\x95\xa6\xaf\x2d\x02\x08\x98\x31\x42\x1c\x0a\x23\xd4\xfc\x75\x81\x88\xec\x58\x84\x7a\xb1\x41\xc9\xb3\xce\x11\xd5\x8b\x9c\x96\x23\xaf\x1d\x26\xab\x43\xa7\x0b\x75\x4c\xea\xc3\x3f\x5f\x40\x00\xe1\x3f\x62\x84\x7b\x5d\x99\x77\xcb\x84\xc2\x08\xaf\xe5\x94\xb8\x67\x05\x7f\xff\x48\x44\x57\xa2\x9b\x13\x5b\xe3\x7f\x38\xe6\xab\x8b\x44\x5e\x70\x90\x7f\xe9\x83\x5b\xd7\x65\x84\x65\x10\x40\xc0\x8c\x11\xe2\x50\x18\x61\x00\xcb\xe3\xe7\x63\xee\xab\x8f\x0e\x8d\x5e\x62\x4c\x22\xb1\x1c\x5f\xcf\x88\xcc\x0c\xee\xc7\x55\x70\x4f\xf5\xee\x5b\x3e\x23\xcc\x80\x00\x02\x66\x8c\x10\x87\xc2\x08\xfb\xfb\x99\xee\xe0\x0a\x54\xad\xeb\xa5\x82\x5e\xcf\x0c\x1f\xe6\x19\xb9\x33\xf1\xa7\xe3\xfd\xeb\x77\x62\x21\x6a\x0a\xbf\x0a\xd2\x35\x10\x40\xc0\x8c\x11\xe2\x50\x18\xe1\xf7\x09\x3a\x9e\xae\xec\xfb\x8e\x0e\xa0\xa3\x8e\xbb\xc9\xd5\x22\x0a\x61\xbe\x28\x0e\x37\xe8\x11\x5f\xf7\xca\x7c\xef\x76\x7e\xe7\x83\x8e\x19\x23\xc4\xa1\x30\x42\xfb\x77\x9e\x9d\xda\x27\xcc\x84\x1b\xce\xbf\x5e\x69\x5c\x54\x4d\xe0\x5b\xbe\xf9\xa8\x64\x48\x31\x88\x5f\xc1\x72\x4b\x4a\xc9\x4c\x1a\x01\x04\xcc\x18\x21\x0e\x85\x11\x7a\x7d\x26\x77\xca\xf8\x5a\xbe\xfa\x34\x9e\x70\x6e\xe3\xf2\xc5\x72\xc1\xe3\x38\xa9\x05\xc7\xa4\x77\x9f\x7d\xa6\xde\xc1\x2f\xec\x0c\x11\x40\xc0\x8c\x11\xe2\x50\x18\x61\xf1\x31\xc8\xed\xf4\xca\x71\xdd\xdf\x7f\x62\x86\xcc\x5f\x8b\x9f\x23\x5f\xcb\xb2\xe3\x5d\x4c\x9c\xf1\x9f\xa4\xbc\x9c\x5b\x37\xc6\x83\x00\x02\x66\x8c\x10\x87\xc2\x08\xa5\xb7\xec\xae\xfd\x12\xe6\x79\x7c\x48\xc8\x43\xfd\xcf\xa4\xfe\x52\xec\x82\x04\x4d\xad\xa5\x2e\x27\x61\xe6\xa4\xfb\x69\xc3\xf2\x13\x08\x20\xfc\x47\x8c\x70\xaf\xb5\xeb\x6e\x99\x50\x18\xe1\xc7\x33\x4a\xe2\x27\x12\x6f\x44\xbe\x4d\xa7\x54\x0f\x20\x1d\xaa\x25\x58\x0e\xa5\xe9\xa4\x57\x1c\x31\x77\xe0\x92\x88\x7c\x48\x6f\x81\x00\x02\x66\x8c\x10\x87\xc2\x08\xbd\xce\x51\x94\x9f\xcd\xb6\xc8\x69\xaf\xb9\xa4\x19\x6c\xc0\x53\x95\x65\x53\xb1\x61\x78\xe0\x63\x2f\x6b\x09\xeb\x5a\x57\xe0\x00\x84\x00\x02\x66\x8c\x10\x87\xc2\x08\x17\xce\xf5\x56\x05\x6c\xbc\x70\x85\xe1\x98\x82\xf4\xcb\xc4\x01\x6f\xd6\x47\xf9\x2c\xb6\x1e\xdf\x1e\x30\x79\xd9\xd8\xed\x9a\x62\x8e\x00\x02\x66\x8c\x10\x87\xc2\x08\x3d\xe6\x3c\xa9\x4c\x0d\xba\x1d\x43\x0f\x07\xf0\xdd\x70\xd8\x90\x95\x17\x06\xc4\x64\xaf\x09\x4a\x01\xd9\x5c\x07\x9b\x0e\x6e\xec\x5c\xfd\x30\x63\x84\x38\x14\x46\x58\xf5\xbe\x67\xe3\xf1\x19\x06\x5e\x8e\xfc\x5e\x95\xe7\x8d\xf3\xc7\xbe\x9f\xe2\xf0\xdd\x2f\xbc\xfa\x20\xe3\xcf\xa1\x27\xe9\x01\xd9\x3b\x1f\x10\xcc\x18\x21\x0e\x85\x11\x4a\xdc\x89\xb3\x3b\x19\xaa\x4b\xc5\xcb\x2d\x14\xf8\xb0\x53\x5e\xe2\xcb\x30\x63\xbc\xd7\x94\xcf\xca\x6a\xe9\xba\xa0\x7d\x5c\xf2\x4e\x06\x66\x8c\x10\x87\xc2\x08\x67\xf3\xfd\xdd\xdc\x54\x33\x10\x1c\xc5\x13\x5a\x3f\xca\x0d\xe2\xe8\xc2\xa8\xd9\x6f\x43\x5e\x4e\x35\x13\x97\x23\xd2\xfd\x42\x44\x10\x40\xc0\x8c\x11\xe2\x50\x18\xa1\xd2\x86\x86\x2c\x4d\xf1\x05\x85\x47\xef\x99\x98\xc5\xd8\x2e\x68\xdd\x0a\x4b\x49\x7d\x37\x68\xa2\xce\xcd\x5c\xf4\x3a\x2b\x23\x4c\x12\x01\x84\xff\x88\x11\xee\xb5\xbb\xdb\x2d\x13\x0a\x23\xdc\x5c\xa2\x0d\x62\x56\xb5\x51\xb2\x2e\x7e\x97\xec\xc2\xe3\x7f\xf9\xea\xb8\x8b\x77\xc8\xe3\x34\x2f\x6a\x61\xad\xad\xcd\x79\x11\x0e\x04\x10\x30\x63\x84\x38\x14\x46\x48\x7c\x75\x9a\x58\xa0\xf2\xfd\x87\xa9\x55\x4a\xeb\x0c\x07\xdb\xb0\xac\x48\x71\x46\x4d\xd9\xf5\x4e\x9e\xb4\xdb\x9e\x11\x0b\x9a\x54\x08\x20\x60\xc6\x08\x71\x28\x8c\xd0\x2b\x34\xd2\x01\x4e\xa0\x79\xd1\xad\xb0\xa2\x96\xf6\xb3\x39\xd0\xed\x14\x05\xec\x79\xa4\xc4\x72\x1f\x23\x9b\x4c\xad\xbe\xdb\x3e\x04\x10\x30\x63\x84\x38\x14\x46\xa8\xa0\xf7\xca\x35\xa9\x27\xc6\x40\xa6\xf8\x11\x52\x42\xb5\x95\x1e\x90\x74\x8b\x2a\xff\x59\x63\xc8\x6c\x44\xd5\x97\x97\xf6\xa3\xe7\x11\x40\xc0\x8c\x11\xe2\x50\x18\x21\x8f\x81\xcf\x41\xd9\xad\xad\x16\x62\x85\xeb\x0f\x7a\x02\xa5\xee\xf4\x93\x5b\xde\x76\xa4\x1c\x2c\xfc\xc2\xa1\xe9\xa3\x9c\x26\x24\x84\x00\x02\x66\x8c\x10\x87\xc2\x08\x75\x14\xa9\x3e\x92\xfb\x29\x4a\x9e\x3b\x63\xd4\x7c\xf1\x90\xfd\xc8\x90\x75\x95\x67\x97\xbb\x49\xb2\x90\x8e\x0f\x87\xe3\x81\x24\x5a\x04\x10\x30\x63\x84\x38\x14\x46\x28\x3e\x60\x53\xa6\xea\x54\x71\xc0\x3d\xcb\x0a\xce\x90\x12\x48\xa2\x76\x0d\x9a\xb1\xd7\x4e\xf6\x88\xbe\x18\xfe\x4e\x18\x26\xf1\x40\x00\x01\x33\x46\x88\x43\x61\x84\x43\x85\x9c\x7a\x1f\xc9\xd7\x7f\xbf\x30\x9b\xe0\x8b\x3e\x76\x2c\x3a\xe0\xd9\x6f\xb6\x85\x07\x94\x0d\xeb\x7d\x35\xea\xe6\xb2\xeb\x4e\x08\x20\xfc\x47\x8c\x70\xaf\xfb\x1f\xbb\x65\x42\x61\x84\x93\x85\x8c\x78\x82\x0a\x1d\x13\x87\xc5\xd8\x37\xc2\x47\x1e\x2a\x53\x7e\xf2\xcb\x4f\x59\xa8\x06\x4f\x0b\xab\xd3\xe7\xd2\x06\x53\x20\x80\x80\x19\x23\xc4\xa1\x30\x42\x25\x89\x5f\xc9\x65\x27\xf9\xa6\xd2\x5b\x06\x93\x04\xcb\xa7\x5c\x1e\xc8\x6d\x25\x86\x7b\x4d\xcf\x79\xbb\x3f\x0a\xa3\x45\xa6\x05\x10\x40\xc0\x8c\x11\xe2\x50\x18\xe1\x7d\xe5\xa2\x0f\xb4\xd3\x2d\x4a\x91\x32\xb7\x97\x1e\x46\xb6\x5c\x6d\xb6\xd7\x71\x8b\xea\x7f\xf2\x68\xe8\xde\x58\x9d\xaf\x89\x89\x12\x02\x08\x98\x31\x42\x1c\x0a\x23\x2c\xd3\x67\xc7\xdd\xf7\x52\x99\x0e\x7d\xeb\x62\x70\xb7\xde\xde\xf0\xf7\xfe\xe4\xf2\x33\x1c\xd6\x55\xdb\xfb\x4f\xea\xce\xaa\x18\xec\xac\xd1\x31\x63\x84\x38\x14\x46\x98\xd5\xa4\x4a\x61\xf0\xf1\xcf\xcb\xef\xd4\xbf\x3b\x0c\x53\x6f\xcd\xde\x1f\x39\xed\xd0\xaf\x6c\xfd\xb5\x40\xea\xc5\xc1\x02\xad\x1f\xf2\x08\x20\x60\xc6\x08\x71\x28\x8c\xd0\x78\x94\x7f\xb8\xf3\x29\x2d\x9e\xfd\xc5\xb1\x0c\xf6\x5b\x4c\xa3\x2d\x9f\xf2\x6d\x22\xcb\x4f\x4f\x59\x11\x5a\xde\x46\x4e\xca\xb1\x22\x80\x80\x19\x23\xc4\xa1\x30\xc2\x66\x66\xbb\x89\xde\xe9\xbe\x30\x7e\x5f\x26\x1d\x1f\xb7\x0e\x1d\x1f\xb9\x4b\x8b\x24\xb6\x8f\x0d\x86\x89\xa9\x07\x64\xfd\x5f\xff\xff\xd8\xbb\xd3\x68\x2a\xa3\xff\x6f\xfc\x6c\x2e\x11\x99\x87\xae\x4c\x65\x8c\x52\x86\x32\x95\x39\x33\x99\x33\x64\xce\x3c\x0f\xa9\xc8\x74\x99\x95\x54\x86\x64\xca\x3c\x85\xc8\x2c\x25\x19\x42\x2a\x0a\x21\x65\x0c\x99\x87\x50\x86\xf8\xaf\xf3\xfb\xdf\x7e\xcb\xba\xee\x07\xbe\x57\xcf\xee\xb5\xbe\x8f\x7a\xf2\x5e\xfb\x74\xce\xd9\x9f\x7d\x7d\xf6\xde\xcb\x79\x51\x22\x30\x84\x19\x23\x04\x28\x8c\xd0\x2c\xee\x0a\x1e\xe1\x57\x91\x2b\x65\xdf\x87\x3c\x9d\xb4\x8d\xde\xdd\x62\xd3\x8e\x65\x33\xf8\xd0\x27\xf8\xfe\xc4\x33\xc6\x53\xd1\x1c\x08\x0c\xfd\x23\x46\x78\xd0\x09\xe1\x5e\x31\xa1\x30\x42\xb9\x6b\xaf\x93\x7d\x02\x1d\xef\x29\x37\x28\x73\x8f\xb2\x1d\x8e\xf5\x8a\xdd\x39\xe5\xff\x02\xb4\x27\x95\x4c\xe6\xc8\xdf\xd2\xc3\xad\xb6\x98\x31\x42\x80\xc2\x08\xdd\x8e\xa4\x0e\x88\xe4\x08\xda\xeb\x0d\xfd\xee\xf3\xeb\x7c\x9a\x79\x85\xe4\x75\x5a\xbd\x58\xec\xa1\x28\x3a\x45\x9d\x02\x5b\x5f\xdc\x9b\xc6\x8c\x11\x02\x14\x46\x58\xc0\x65\x26\x39\x3d\x9e\x1d\xc6\x74\x96\xf2\x45\xc0\xae\xc3\x65\x55\x0d\xa7\x24\x48\xe3\xab\xcc\x3c\x43\x8e\x9b\xe6\x9b\x26\xdc\x3e\x00\x33\x46\x08\x50\x18\xe1\x8b\x4b\x06\x9c\xb9\x3d\xa5\x14\x25\xd1\xb3\x0b\x2f\xed\xed\xc7\x9d\x07\xa6\xab\xd5\xdd\xd5\x77\x08\x6c\x1b\x36\xff\x22\x9a\x9c\x08\x0c\x61\xc6\x08\x01\x0a\x23\x14\x0c\xec\x9e\x1a\xfa\x11\x2b\xa4\xad\x41\x5b\xee\x13\x6a\x49\xf7\x62\xa6\xf0\x5b\xa1\xc9\x85\xc5\xb2\xc1\x13\xc4\x36\x0b\x5d\xb8\x8d\x3b\x66\x8c\x10\xa0\x30\x42\xf3\x63\x6d\xf7\xf3\x77\xe5\x3f\x09\x36\x5d\x5a\x78\x59\x0f\xd7\x32\x32\x98\x5e\x92\xe2\x39\x96\xf8\xa5\xc0\x63\x56\x3f\xd5\xef\x38\x02\x43\x98\x31\x42\x80\xc2\x08\xcf\x7a\x32\x7b\x70\xbc\xb8\x25\xcd\x1d\xdd\x3c\xb2\x94\xf6\x51\x42\x7b\xd9\xf7\xb2\x55\xc3\xdc\xe1\x8f\x04\x45\xc2\x49\xfe\xa2\x26\x08\x0c\x61\xc6\x08\x01\x0a\x23\x84\x9a\x6d\xee\x15\x0e\x7f\xe8\x70\xf5\xab\x25\x1f\x18\x94\xb8\x24\x91\x4f\xbb\xee\x34\xec\xc5\x23\x78\xb9\x59\x7d\x52\x3f\xf2\x2c\x02\x43\xff\x88\x11\x1e\x74\x86\xbe\x57\x4c\x28\x8c\xd0\xe8\x5b\x03\xf5\x99\x29\x97\xf1\xfc\x5d\x83\xdd\x3a\xc3\x2a\x3f\xf7\xc7\x8f\x58\xf8\xb8\x8d\x98\xaf\x5c\xb3\x9d\x78\xd3\xf2\x8a\x11\x81\x21\xcc\x18\x21\x40\x61\x84\x75\x66\xd0\xc9\x36\xa2\xa6\x37\x2f\x83\x37\x5d\xef\xcd\x9b\xd2\x4a\x8a\x4b\xea\x1b\x2a\x53\xe2\x1d\x36\x7f\x51\x79\x6d\x6b\x0a\x57\xb0\x98\x31\x42\x80\xc2\x08\xc9\xc5\x8a\x0a\x69\x7f\xca\xb6\xd0\x06\x5e\x08\x7c\x50\xcd\xce\x30\x7b\x2a\xd7\xd4\xc1\xe7\xd5\x5c\x7e\xb2\xb7\xf6\x43\x49\x6b\x5c\x31\x61\xc6\x08\x01\x0a\x23\xb4\x99\xa1\x84\xdf\xbb\xbf\x5d\xb9\x49\x70\x1e\xb1\xa3\x58\xac\xd8\x35\x64\x1f\x22\x5b\xea\x4a\x7f\xaf\xce\x79\x82\x24\xfe\xfe\x35\x04\x86\x30\x63\x84\x00\x85\x11\x06\xa5\xf7\xc2\xb7\x52\x0e\xb7\xca\x1c\xb6\x31\xac\x77\x35\x5f\x03\x87\xd9\x3f\xe9\x08\xb0\x10\xaf\x64\x1e\xdb\x30\xcd\x6e\x52\x41\x60\x08\x33\x46\x08\x50\x18\x61\xa8\x84\x96\x96\x65\x2d\x89\x41\x74\x85\x0e\x99\xaf\xa0\xfb\xf2\xb1\x65\xe1\xc4\xc7\x6f\xb6\x8f\x6d\x5d\xd0\xe0\x7d\x9a\x9c\x42\x84\xc0\x10\x66\x8c\x10\xa0\x30\x42\x3b\x9e\x93\x3f\xfe\xf6\x84\x50\xf4\x86\xff\x99\x6f\xc2\x1f\xdd\xfa\xca\xaa\xdd\x37\x64\x7c\x75\x3e\x91\x3d\xeb\x6c\xfd\xb8\x2b\xee\x3b\xc7\x8c\x11\x02\x14\x46\x28\xf3\x5b\xd9\xa8\xed\x85\xb5\xe2\xd9\x31\xa2\x08\x9f\xd3\x1d\xec\xb7\xdc\xf3\x42\xda\x73\x7e\x09\x6c\x91\x48\x4e\xde\x7b\xb8\x63\x86\xc0\xd0\x3f\x62\x84\x07\xdd\x35\xa2\x2e\xfb\xd4\xaf\xf7\x98\x2b\xca\xe5\x54\x3c\x59\x48\x7b\x9f\x38\xb6\x41\x76\x6c\x9a\x82\x6a\x7e\xc4\xe2\x17\x92\x3a\xe4\xea\x9a\xe1\x88\xec\x8b\x7e\x6f\xf7\x50\x2e\x0a\x54\xb2\x56\x6e\x0e\x3d\x42\x5c\xfb\x43\x22\xf1\xfc\x9f\x28\xfd\x6c\xd8\xb7\x7d\xf5\x8a\xe4\x57\xff\xc0\x98\x7d\xd1\xca\x54\x5e\xb9\x40\xb1\xad\x63\xc3\x2c\x54\x09\xd1\x6f\x53\x02\x6f\xd9\x4c\x64\x5f\x2e\xdf\xb8\xd2\x66\x5a\x59\x90\x53\xa5\xb4\xb9\x2f\x6a\x17\x2a\x5a\x22\x14\x32\xa7\x7a\xd8\x6c\x99\xd8\x93\xa6\x6c\xeb\xfd\x07\xa5\xdd\x77\x3d\x5a\x9f\xf1\x79\x28\x87\xb4\xa0\x90\xf8\x7d\xd1\x25\xb1\x1f\xab\xcb\x06\x01\xee\x4e\xa3\x19\xe4\x74\xca\x6c\xba\xcf\xba\xab\xcb\xe6\x88\x5e\xe6\x8c\x96\x28\x0a\x85\x11\xba\x53\xee\x8b\x72\x6b\xb6\x42\x78\x2f\x52\xc5\x8c\xda\x8a\xee\x55\x16\xe9\x4b\xd6\x3e\x13\xbd\xe7\x8e\x6f\x63\x93\xb5\x71\x2a\x89\xf2\xeb\x30\xe9\xbe\xe8\x55\xf7\xdb\x55\xd5\x8e\x40\x61\xc3\x90\x11\x9f\xe0\xce\x20\xf7\x0c\x18\x19\xf6\xc3\xff\x60\xd9\x9a\xee\xe6\x66\x7d\xfb\xe9\xd6\xbe\xa8\xfd\x89\xf2\xc9\x26\x76\xc2\x6c\xee\xc5\x3b\x57\xf8\x76\x41\x13\x62\xa2\x9e\xdf\xe2\x2a\x8f\x5f\xca\xba\xce\xac\xb3\x4a\xe6\xf4\xbf\x97\x7d\x07\x7d\xaa\x7b\x2b\x1a\x0a\x23\xe4\x77\xcc\x10\x58\x63\x8d\x48\x1b\xee\x76\xd2\x39\x6c\xb8\x5d\xa3\x2f\xbf\x1d\x77\x3f\xe5\x5b\x5e\x4d\xd9\xaf\x69\xc5\x52\x7f\xdc\x32\x8e\x19\x23\x04\x28\x8c\x70\x92\xd9\x9a\xe5\xe5\xf7\x77\xb9\xe3\xc4\xc6\x6f\xd7\xaf\x16\xfe\xfc\xf9\x85\x7a\x67\xe8\xad\xd2\x54\xcf\x93\xf8\x80\xba\x85\x5c\x63\x04\x86\x30\x63\x84\x00\x85\x11\x86\xbf\x6e\x5e\x6c\x9e\xdc\x71\x7f\xd3\x5f\x4f\xd3\x60\xe9\xc7\x7b\x94\xbc\xa3\x53\xc9\xc2\xef\x4f\xed\x61\xc1\x4e\xe9\xa7\xcf\x20\x04\x86\x30\x63\x84\x00\x85\x11\xae\x7f\x7c\xe9\xf5\xf0\x64\x68\x91\x69\x81\xaa\xb4\x5c\xb6\x78\x80\xc2\x8c\x60\xde\x5d\x6d\xed\x6a\x13\x91\xca\x87\xb5\xd5\xea\xd4\x08\x0c\x61\xc6\x08\x01\x0a\x23\x5c\x75\x17\x3a\x66\x6b\x4d\xbe\x3c\xaf\xb3\x52\xda\x46\x55\x51\xbe\x73\xc9\xb0\xa2\x74\x2d\xca\x3c\xfa\x44\x8d\xc5\xc3\xf8\x5d\x5c\xaf\x8d\x19\x23\x04\x28\x8c\x70\xdc\x3a\x06\x4a\x14\x65\x73\x93\xe6\x74\xe7\x19\xb0\x23\xcd\x29\x78\x98\xde\x28\x14\x9f\xbd\x7a\xc8\xbd\x41\x53\x59\xe8\x26\xae\x5d\xc3\x8c\x11\x02\x14\x46\x48\x25\xb3\x33\x76\xba\x80\x29\xb4\xe3\xa5\x7b\x42\x45\x3d\x9b\xb1\x56\xeb\xfb\xde\xde\x7e\x24\x93\x49\x34\x28\xf9\xc5\x09\x35\x12\x04\x86\x30\x63\x84\x00\x85\x11\xfa\x89\x04\x2a\x32\x3e\xec\xbe\xaa\x21\xf5\x1c\x88\x04\x84\x31\x11\x78\xf3\x37\x25\x3d\x8a\x7d\xb5\x7e\x6f\xf8\x91\xa6\xf6\xae\x08\x02\x43\xff\x88\x11\x1e\xb4\xee\xec\x15\x13\x0a\x23\xcc\x3f\xf5\xa0\x6d\x58\xff\xc1\x0d\xda\xef\x35\x77\xdd\xd3\x78\xe4\x8f\xd5\xd3\xd2\x4b\x16\x14\x33\x7c\x0d\xd2\xd2\xd2\x6e\xb2\xe4\x43\x60\x08\x33\x46\x08\x50\x18\x21\xcf\x30\xdf\x96\x59\xeb\xf2\x8a\xe2\x0c\xf0\xa1\x32\x2e\xa3\xe4\xac\x3d\x13\xa9\xf4\x23\x67\x30\x68\x99\xa3\x10\xc4\x6f\xe2\xbe\x3c\xcc\x18\x21\x40\x61\x84\xdb\xf3\x54\x93\x65\x5f\x97\x23\x4c\x0d\xc0\xc8\xec\xdd\x94\xc7\xd5\x4f\xea\x9e\x4e\x57\xfb\x8b\x50\x5b\x26\xd0\x40\x92\x2a\xb8\xfe\x11\x33\x46\x08\x50\x18\xe1\x51\x64\xc8\x87\x4f\xc9\x6c\x88\x3a\xf5\x5e\x6b\xd3\x5f\x26\x9b\x4c\x4d\x3a\xe6\x11\xda\x1c\x11\x44\xa6\x8c\x42\x94\x65\xd6\x12\x81\x21\xcc\x18\x21\x40\x61\x84\xbb\xf2\xab\x73\x49\x77\x3f\x52\x8f\x6e\x16\x76\x9e\xd3\xd7\x67\x65\xe8\xb3\x2c\x88\x4e\x65\x3f\xd2\x86\x17\xac\xf7\xfa\x55\x10\x17\x02\x43\x98\x31\x42\x80\xc2\x08\x17\xce\x6a\xff\x94\x6a\x3b\xac\x96\xbe\xe8\xfb\x60\x47\xc5\xeb\xd7\x21\xd3\x27\x76\xb1\x7a\xee\x3f\x03\xb8\x66\x1b\xeb\xd9\x27\xf1\x11\x18\xc2\x8c\x11\x02\x14\x46\x78\xff\x24\x52\xba\x63\xb1\x7a\x9f\x5e\x59\x89\xfd\xb0\xe8\x0f\xb3\xd4\xf5\xef\xbd\x1d\x62\x55\x92\xf4\x14\x91\x97\xd9\xb6\xb4\xf5\x10\x18\xc2\x8c\x11\x02\x14\x46\x38\x2a\xf8\xe3\xa2\x45\xc3\x8e\x07\x97\x31\x98\x0e\x38\x6d\xfb\xd0\x25\xdf\xda\x27\xd4\x3c\xfd\x2a\xbd\xec\xea\xdb\xf1\x97\xd4\xb6\x08\x0c\xfd\x23\x46\x78\xd0\x93\x79\xaf\x98\x50\x18\xe1\xeb\xa7\xbf\x28\xb5\xdf\x3e\xa4\xef\xb5\x08\x9d\xd0\xe8\x1b\xaf\x4d\xb1\x40\x2c\xe2\xab\x0b\xf0\xac\x1a\xe3\x5b\xa4\x8e\x77\xf1\x23\x30\x84\x19\x23\x04\x28\x8c\xb0\xb0\x89\x28\x9f\xc6\xcf\x94\x86\x64\xe8\xc6\x32\xff\xfc\x76\x92\x57\x42\x1d\xc8\x72\xca\xf7\xe1\xa8\x93\x7a\x34\xf4\x58\x02\x37\x41\x30\x63\x84\x00\x85\x11\x16\x25\x14\xf8\x79\xcf\x85\x0b\x8e\xe7\x8d\xc7\x59\xe9\x39\xee\x34\x5c\x7f\x34\x32\xc5\xd6\x81\xcf\xe6\x64\xaa\x2f\x3f\x9b\x89\xeb\x1f\x31\x63\x84\x00\x85\x11\x7e\x4c\xcd\x3e\x53\x39\xa8\x69\xd8\xd3\xa0\x78\xf6\xbb\xe9\xb2\xfc\x6d\xce\xe0\x93\x5a\x87\x73\xd6\xfc\x58\x04\x15\x84\xef\xd1\xf1\x22\x30\x84\x19\x23\x04\x28\x8c\x50\x79\xc2\xff\x57\x97\x96\xf8\x44\xe5\xfc\xbd\xc5\x7a\xb6\x2c\x25\x9f\xa4\x30\x8d\xdc\x6b\x05\x5e\x9a\x77\xf3\xcb\x0b\x9f\xb2\x59\x23\x30\x84\x19\x23\x04\x28\x8c\x90\x39\xea\x7e\x0c\x59\xd6\x7b\xc2\x39\x35\x95\xdf\x83\x77\xd4\x3d\x04\x89\x6b\x1c\xac\x83\xdd\x7a\xc2\xc5\x69\x23\x52\x83\xe4\xae\x22\x30\x84\x19\x23\x04\x28\x8c\xd0\xd3\x6d\x3c\xdb\x44\x23\x22\x41\xe2\xc9\x58\x9f\x6d\x63\x13\xa9\x00\x10\xe1\x2f\xf1\x10\x99\x77\xb0\x64\x58\x6a\x77\xe4\xc4\x15\x2c\x66\x8c\x10\xa0\x30\x42\x98\xc5\x44\xce\x24\xb5\xae\xe4\xb9\x64\xc9\x2a\xc5\xa0\x92\xc0\xcf\x17\xd3\x87\x5c\xad\x29\xcc\x05\x88\x5c\x1c\xb9\xf3\xcf\x88\x22\x30\xf4\x8f\x18\xe1\x41\xbd\xeb\x5e\x31\xa1\x30\x42\x25\xfa\x45\x2e\xa1\x5a\x06\xb8\x59\x84\x9c\xff\xef\xa3\xf1\x24\xca\xc5\x0a\x33\x25\xf3\x9b\x65\xe3\xdc\x8f\xda\x2f\x9d\x4d\x92\x47\x60\x08\x33\x46\x08\x50\x18\xa1\x35\x07\x6b\x8e\xb2\x73\xf5\x48\x61\x5e\xe5\xb9\x79\x52\xe5\xc9\x8f\x0c\xd5\x01\x0c\x15\x55\xb9\x27\xa3\xc3\x41\xe3\xf2\x45\x2b\x04\x86\x30\x63\x84\x00\x85\x11\x2a\xd3\x66\x50\x7c\xf0\xba\x99\xa5\xb2\xfe\x8a\x29\xe8\xd8\x17\x27\xca\xfe\x1b\x15\xe3\x2e\x72\x35\xba\xcc\x8f\x27\x2a\xcf\xea\x32\x23\x30\x84\x19\x23\x04\x28\x8c\x50\xb5\xf9\xe7\x43\x52\xea\x1f\xe0\xf8\x44\x7e\xef\xb0\x65\x70\xc8\xc8\xe3\xf3\x06\xb1\x4e\xd9\x46\x02\x59\x42\x17\x0f\x3d\xa0\x53\x45\x60\x08\x33\x46\x08\x50\x18\x61\x34\xde\x37\xaa\x64\x1d\x47\xc2\x98\x64\xef\xfb\xda\xb4\x32\xd1\x74\xf3\xcf\x57\xbc\xb5\xab\x93\xce\x54\x2b\x7c\xfe\xc2\xce\x8f\x6b\x89\x31\x63\x84\x00\x85\x11\x3e\x1b\xf1\x65\xd4\x69\xc4\xeb\xb8\xe3\xd8\xac\xf5\x87\x87\xbc\xfa\x22\x4f\xcc\xd1\x23\x27\x1e\x1d\x9d\xbf\xd9\x0d\xf3\xd2\xa5\xe3\xde\x07\x66\x8c\x10\xa0\x30\x42\xa5\x39\xa2\x10\x2a\xe1\x3f\x5a\x42\xf4\x12\x0b\xac\x66\x47\xe2\x4d\x08\x56\x64\x85\x39\x64\xd6\xf3\x5a\xb9\xb9\x97\xd8\xa8\x70\x6d\x37\x66\x8c\x10\xa0\x30\xc2\xe0\xe8\xd7\xdc\x56\xf9\x66\x64\x22\x8f\x97\x6a\xce\x6a\xdc\x09\xb9\xde\x39\xde\x67\xae\xe8\x47\xe9\xfd\xc1\xa9\x50\x7f\xd0\xf4\x34\x02\x43\xff\x88\x11\x1e\xb4\xbb\xdb\x2b\x26\x14\x46\xa8\x92\x2b\xd7\xe5\x40\xc8\xe3\x70\x84\xf1\x35\xdb\xc0\xa7\xf2\x32\x1a\xd3\x9a\xc4\x35\xd5\xba\x08\x9d\xf6\x7a\xae\xd2\x84\xd2\xc3\x08\x0c\x61\xc6\x08\x01\x0a\x23\x2c\x6a\x5d\x99\xd8\xad\xf9\x64\x1f\xc3\x98\x6f\x5a\x96\x0d\x0d\x92\x39\xf4\xbd\xbd\x5a\x6d\xf2\x60\xc1\xa6\x9e\x6f\x46\x8c\x8c\x0e\x81\x21\xcc\x18\x21\x40\x61\x84\x3a\x6e\x37\x1f\x64\xfe\x9e\x0e\xf9\xcc\x79\xd8\xe5\xb3\x34\x73\x41\x24\xcb\xc7\xa3\x17\x03\xd9\xa3\xaf\x16\x74\x15\xe8\xff\xca\xc6\xf5\xe8\x98\x31\x42\x80\xc2\x08\x05\x2d\x00\xc7\xcf\xb1\x67\x3b\xa6\x6e\x7f\x59\x96\x0d\x0d\x7b\xe3\x9d\xfd\x17\x16\x83\x32\x6d\xe3\x23\xca\x6c\x58\x99\xd2\x68\x11\x18\xc2\x8c\x11\x02\x14\x46\xc8\xc8\x0d\x73\xbf\x60\xad\x9f\xd8\x31\xa9\x38\xfe\x45\xe5\x7e\x71\x47\x06\x97\xa5\xc4\x71\x9f\x92\x29\xb3\x16\x01\x7b\xce\x64\xdc\x53\x03\x33\x46\x08\x50\x18\xe1\x21\x7e\x1e\xdb\x8e\x23\x0d\xe2\x5f\x4e\x4a\x49\xfe\xf9\xdb\x38\x46\x4a\xa3\xf9\xab\xe5\x70\x12\x55\x24\x83\x4b\x6d\xa2\x98\xbf\x2b\x02\x43\x98\x31\x42\x80\xc2\x08\xf9\x26\x2d\xd4\xbd\xb5\xb2\x2f\xdd\xb9\x23\x21\x53\x4f\xc0\xc7\x47\x51\x74\xae\xf0\xed\xcf\xe2\x78\x0d\xdb\x58\xcb\xd3\x97\xc4\x28\x11\x18\xc2\x8c\x11\x02\x14\x46\xf8\x79\x37\xdb\xf1\x59\x6c\x67\xc6\xc2\x5f\xd6\xf6\x13\x8c\x91\x53\x9e\x0d\xfa\x3a\x2f\xf1\x18\xeb\x8e\x7b\xfe\xbd\xf1\x75\x8e\x11\xd7\x76\xff\x23\x46\x78\xd0\xf9\xc7\x5e\x31\xa1\x30\xc2\x9b\x82\x22\x12\x3f\xfb\x3b\x43\x34\xce\x05\xd8\xa4\xf5\xb5\x44\x9e\x7f\x9d\x64\xd0\xf5\xcd\x47\xe9\x57\x38\x7d\xb5\xb0\xc8\x06\x6e\x82\x60\xc6\x08\x01\x0a\x23\xcc\xbd\x6d\xdb\xd4\x67\x7d\xc4\xc5\x7a\x22\x6f\xf3\xba\xa0\xbc\xbf\x9e\xc8\x51\x95\x94\x12\x96\x2e\x2a\x8d\x00\xc2\xb8\xb5\x97\xb8\x36\x0f\x33\x46\x08\x50\x18\x61\x73\x89\xe6\x03\x17\xfc\x46\x0b\x55\xbc\x98\x19\x9d\x6f\xe9\xb5\xd3\xe9\x1e\x97\x05\xfa\xcd\x7f\x3a\x73\xdf\xc1\x6f\x57\xd1\xa4\x40\x60\x08\x33\x46\x08\x50\x18\x21\x39\x05\xd1\xf1\x41\xd2\x8b\xda\x7f\x9f\x76\x86\x6c\x51\xd6\x66\x25\x84\xb3\x3c\x71\xcd\x1d\x3f\xd9\x2c\x47\xb5\xee\xbf\x72\x0f\xb7\xbf\xc4\x8c\x11\x02\x14\x46\xb8\xf1\xf6\xd3\xdf\x26\x8a\xec\x88\xda\x38\x1f\xc3\xe7\x6d\xc6\xc2\x6f\x4c\x7e\x85\x2f\x84\xeb\x29\x27\xb4\xe5\x0d\x1b\x49\xdc\x3f\x89\xc0\x10\x66\x8c\x10\xa0\x30\xc2\xbb\x69\xe5\x15\x6f\x0f\xb9\x25\x44\x9b\xb4\x06\xf0\xc4\x4b\xad\xf9\x88\xe8\x0c\x02\xfb\x13\xdc\x87\xfc\xcc\x84\xc5\x5b\x99\x1c\x11\x18\xc2\x8c\x11\x02\x14\x46\x98\xdd\xaf\x37\xfa\xa2\xc2\xbb\xc7\xfb\x89\x91\x5b\x49\xde\x7c\xa1\x04\x75\x5a\x3d\x8f\xe6\x8f\xd0\x3c\x7b\x53\xcb\xcb\xea\x45\xba\x08\x0c\x61\xc6\x08\x01\x0a\x23\x34\x4c\x3d\x3d\x5e\xc2\xec\xa3\x52\xac\xb0\xeb\x68\xc4\xf4\x59\xd7\xc4\x8d\x81\x7a\xd8\x35\x89\xbe\x36\x36\xb9\x7b\xed\xdc\x7b\x41\x04\x86\xfe\x11\x23\x3c\xe8\x84\x70\xaf\x98\x50\x18\xa1\x19\x0b\xe5\x91\xe8\x66\x8b\x88\x41\xe9\xa2\x8d\x32\x05\x02\xaa\xa9\x29\xca\x5c\xf1\x2d\x16\xe5\x4b\xc6\x94\x4f\x8d\x8e\x5e\x97\x41\x60\x08\x33\x46\x08\x50\x18\x61\x43\xde\x96\xe2\x46\x7b\x30\xa4\xf6\x46\xe1\x4a\xfa\x82\xc3\xfd\x87\xe2\x2e\xc2\x55\x6d\x2c\x6a\x09\x46\x0c\xd7\x2b\x74\xdb\x70\x05\x8b\x19\x23\x04\x28\x8c\x70\x7e\x52\x77\x2e\xc7\x8b\xf3\xd0\x56\x54\xc2\x4c\x3f\xaf\x21\x4d\xa8\xea\x8b\xc7\x92\x3d\x5c\x33\xad\x3c\xf2\xb6\xc4\xd2\x91\x27\x10\x18\xc2\x8c\x11\x02\x14\x46\x18\xba\x1b\x6c\x70\x2e\xfa\xa9\xf7\xaf\x1b\x4f\x2d\x27\x04\x83\x56\x4c\xee\x33\xfb\x06\x3c\x9f\x5f\x5e\x63\x6c\xfc\xc6\xce\x53\x2f\x87\xc0\x10\x66\x8c\x10\xa0\x30\x42\x81\xbc\xb3\x31\x5d\x9f\x7c\xb5\xbc\x60\xa2\x92\x2e\x2a\x07\x37\x75\xf5\x3a\xe5\x06\x86\xcf\xcd\x25\x5b\x34\x0c\x5f\x5b\x67\x15\x10\x18\xc2\x8c\x11\x02\x14\x46\x28\xcb\xce\xab\xe9\xeb\x29\x6a\xe7\x93\x3b\xd2\xa2\x5e\x98\xb7\x32\x15\x16\xc8\x7a\xdc\x85\xd6\xb2\x7f\xc1\x44\x5a\xe4\xf3\x6b\xdc\xe2\x86\x19\x23\x04\x28\x8c\xb0\xe4\x37\xe9\x82\xc8\xdb\x76\xce\x09\x75\x5b\x53\x1e\x0d\x68\xae\xd1\xbd\x90\x73\xf5\xf9\xa2\xe0\xf3\x1d\xcf\x51\x2f\xa2\x73\xca\x08\x0c\x61\xc6\x08\x01\x0a\x23\x24\xaf\x4b\x48\x7b\xad\x69\x70\x22\xa1\xa3\x20\xea\x43\xd6\x09\x1a\x29\x69\x10\x5b\x4a\x4c\x52\x58\xfd\x6e\x66\xf4\x16\x63\x95\x38\x02\x43\xff\x88\x11\x1e\x74\x86\xbe\x57\x4c\x28\x8c\x70\xba\xc8\xf5\x87\xc8\x95\x24\xb2\xa5\x8f\xb6\xac\x11\xcc\x9f\xce\x11\x78\x43\xea\xa7\xda\xe2\xa4\xc8\x1e\xbe\x8d\xc7\xd7\xe8\x90\x40\x60\x08\x33\x46\x08\x50\x18\xe1\xf0\x65\xee\x2f\xae\xac\xcb\x01\xf6\x0f\x38\x52\xca\x77\x75\x65\x2f\x8b\xd6\x7a\x57\xdf\xad\x65\x23\x10\xf4\x59\x77\xfc\x75\x4b\x07\x81\x21\xcc\x18\x21\x40\x61\x84\x39\x3a\x9f\x95\x1c\x27\x8f\xfe\xfa\xf6\x38\xfa\xbe\x59\xf8\x8c\x08\xad\x8b\xee\x48\xb0\xb7\x3c\x58\x3e\xbb\xad\x2e\x34\xe6\x2d\x84\xc0\x10\x66\x8c\x10\xa0\x30\x42\xe8\xf5\xea\xf8\xc3\x32\x9d\x81\x92\xf6\xb1\xd4\xbf\xe1\x93\xc7\x42\xee\xc9\xdc\xed\xf3\xc9\x1a\x4c\xfe\x79\xb7\x9c\xf7\x5c\x38\x6e\x12\x62\xc6\x08\x01\x0a\x23\xa4\x64\xc0\x0f\x88\x3b\xd5\xb1\x7e\xbb\x7b\x7d\xf5\x16\x63\xca\x43\x75\x3f\x8e\x58\xe9\xba\xd3\x5d\x4d\x44\x97\xdd\x29\x73\xab\xd9\x10\x18\xc2\x8c\x11\x02\x14\x46\x98\xaf\xb8\xed\x1e\x46\x90\xe2\xcd\x4a\x18\x93\xc9\xb0\xc0\xd0\x45\x24\x56\x17\x3e\xe2\x4d\x3b\x4e\xbf\xd9\xa2\xc9\xa6\xd0\x83\x7b\x0d\xcc\x18\x21\x40\x61\x84\xca\x6a\x6f\x9a\x7d\x55\xea\x6d\x32\x9e\x40\xc7\xec\x7c\xf3\x24\x4c\xaf\x4d\x1b\x1c\x89\x92\xe2\xbc\x11\x9d\x1d\xe9\x27\x7f\x97\x13\x81\x21\xcc\x18\x21\x40\x61\x84\xc4\x91\x77\x6b\xd6\xe9\x42\x1d\x73\x62\x29\x61\x3e\x3e\xe6\x42\xea\xa5\x76\x82\x5b\x0c\x47\x2e\x91\x94\x4f\x19\x25\x6b\x11\xc8\x22\x30\xf4\x8f\x18\xe1\x41\x7f\x2d\x88\xba\xec\x5b\xff\xbd\x6c\x96\x36\x60\xbd\x3d\x76\xe1\xae\x9b\xef\xe0\x8b\xc1\x6b\x51\x04\x11\xd7\x85\x76\x1f\x26\x18\x4e\xac\x3e\x51\x7c\xfc\x7b\x5f\xf4\xf9\xb5\x5e\xce\x25\x19\x71\x7d\x09\xad\xf9\x70\xae\x54\x03\x93\x08\xab\x8d\x24\x51\xb7\xf9\x9c\x98\x12\x16\xae\x3a\xba\x47\x96\xfb\xa2\xb7\x97\xcd\x9d\x7b\x93\x2c\x6f\x33\x30\xf9\x79\x48\x57\x6a\x86\x71\x36\x10\x90\x7f\xba\x92\x4a\x5f\x93\x3d\x5c\x5c\x13\xc7\x26\xbb\x2f\xca\xa6\x7a\xc5\x78\x25\x66\xdd\x6c\xf2\xfa\x07\x35\x9f\xb7\x03\x09\xb3\xe5\x47\x85\x58\x45\x76\x95\x15\x34\xcb\xa4\x96\xbf\xfe\x54\xdd\x17\x1d\x4c\xee\x4e\xd2\x58\xac\x3a\xf4\xf6\xb3\x0c\x7f\xec\x6d\xdd\x1d\x35\x36\x91\x09\xc3\xde\xf4\x1f\xc1\x8b\x72\xe3\xe7\xac\xdc\x5e\xed\x8b\x0a\x9c\x4c\x1c\x3e\xec\x70\x4d\xa3\x67\xaa\x3f\x6b\x49\xe6\x78\x47\x78\xb4\x6e\xcd\x52\x07\xaf\x2b\x61\x67\x62\x47\x55\x98\x45\xc7\xbe\xe8\xd0\xa0\x51\x53\x6c\x88\x72\x30\x74\xdf\x7e\xd0\x37\xfb\xc7\xdc\xad\x15\xbe\x17\xd3\xc6\x72\xeb\xa3\x53\x7f\x28\xa7\x10\xcd\xb6\x7d\xd1\x7a\x56\xa2\x6b\x71\x5f\x37\x1f\x95\x46\xf7\x18\x0c\x6e\x98\x56\x99\x5b\x3c\xaf\x8b\x1c\xc9\xa1\xc8\xab\x4b\x7c\x5c\xf8\x57\xed\xcc\xff\x5e\xf6\x1d\xf4\xa9\xee\xad\x68\x28\x8c\x70\x26\xcd\xa4\x43\xab\x28\x76\xa4\xf3\x57\x73\xc9\xf7\xee\x05\x47\x68\xba\xcd\x2b\x53\x0a\x84\x9c\xf5\x21\x0a\xb1\xf5\x7c\x63\x88\xc0\x10\x66\x8c\x10\xa0\x30\x42\xe5\xf3\x26\xab\xbb\x5e\x78\x62\xd3\xce\x57\x39\x07\xb2\x37\x52\x04\xd6\xd9\x79\xa5\x47\xbe\xf8\x6f\xf5\x0c\x11\xe8\xb2\x55\x59\x23\x30\x84\x19\x23\x04\x28\x8c\x30\x5e\xa1\xa1\x76\x89\x24\xaa\xef\x3b\x4d\xf6\xed\x1a\xf3\x5f\xd2\xec\x0d\x95\x21\xd7\x52\x06\x2e\x28\x7c\x4a\x3e\xc7\x7c\xf8\x35\x19\x02\x43\x98\x31\x42\x80\xc2\x08\xa3\xc2\xb8\xeb\x62\x73\x36\xbb\xc3\x62\x28\x46\xff\xca\x96\x0e\x2e\x14\x8a\x5a\x5c\x21\xb6\x5c\xb3\x3a\xeb\x7d\xde\x32\x23\xee\x14\x02\x43\x98\x31\x42\x80\xc2\x08\x8b\xf1\xb7\x3c\xe3\x0c\x68\x74\xbf\xd3\x97\xb5\x8f\x12\xbd\x7d\x0e\xec\x28\x87\xe5\xac\x2a\x2d\xa5\xbf\x85\xbd\x1a\x15\x09\x39\x84\xc0\x10\x66\x8c\x10\xa0\x30\x42\x12\xc9\xab\x42\x0b\x6e\x12\x86\x4d\xa5\x1e\x86\x6b\x6c\xd9\x39\xc7\xb8\xaf\x26\x09\x81\x78\x95\x0c\xb9\x6f\xb1\x65\x49\xff\xb3\xa9\xc4\x8c\x11\x02\x14\x46\xe8\xab\x24\xcd\x50\xaf\xe5\x5f\xac\x97\x49\x45\x16\xab\xb1\xfa\x80\xdd\xfa\x6e\xba\x76\x62\xbd\x6f\xb7\x46\xa6\x08\xd9\xf5\x16\x5c\xaf\x8d\x19\x23\x04\x28\x8c\x90\xe9\xb5\x67\xe3\x9f\xf5\x81\x98\xf1\x53\xa6\x65\xf6\xcc\x2a\xfc\x0b\x33\x23\xf5\xf1\x43\x29\x3a\x4f\xa8\x5a\x62\xc7\xfa\x14\x45\x10\x18\xfa\x47\x8c\xf0\xa0\x75\x67\xaf\x98\x50\x18\x61\x60\xb9\x2d\xa9\xe4\x13\x09\x82\x81\x6a\x61\x6a\xeb\xde\x9b\x1e\xa5\x01\xe5\x76\x42\xaf\x3f\x16\xdd\x1f\x32\xd9\x3e\xc7\xca\x7d\x0e\x81\x21\xcc\x18\x21\x40\x61\x84\x6c\x78\xf3\x6b\xbf\xa2\xfc\xba\x16\xae\xe7\x08\x3f\x90\xbf\x1c\x7d\xad\xc4\x33\x84\x59\xcd\xee\x66\xc3\xcd\xac\xd7\xb9\x2d\x16\x87\x11\x18\xc2\x8c\x11\x02\x14\x46\x48\xf1\x68\xb2\xda\x4d\x53\x45\x2e\xf0\xde\xdd\xe1\xec\x0e\x8d\x66\xeb\x53\x73\xba\xda\x43\x63\xfe\x6d\x7a\xae\x17\x5b\x6b\x1a\x9d\x11\x18\xc2\x8c\x11\x02\x14\x46\x28\xcd\x9c\xc0\xc6\x29\xb1\x71\xb2\xb5\x56\xb4\x7b\x44\x6b\x29\xd8\x24\xce\xeb\xe1\xf7\x05\x85\x0c\x12\xd3\x50\x01\x5d\x7a\x2d\xdc\x63\x15\x33\x46\x08\x50\x18\x21\xc3\xa4\xa6\xbb\xab\x70\xf9\x47\xfc\xbc\x9a\x85\x84\xf6\x88\xf2\xbb\x7f\x94\x5e\x9e\x10\x55\xfb\x55\x68\xce\x17\x06\x92\x96\x00\x02\x43\x98\x31\x42\x80\xc2\x08\xcd\x9b\xe9\xfb\x32\xc2\xc3\x7d\xd7\xdf\x29\x9c\xb1\x15\xfe\xf2\xe9\xdd\x4b\x81\x0d\x93\x6c\x95\xfa\xe7\x2f\x8e\x3f\x09\x72\xd1\xc3\x2d\xa0\x98\x31\x42\x80\xc2\x08\x93\xa3\x38\x4e\xba\x88\x06\xa9\x8f\x0f\xe8\xe8\x99\x30\xdb\xfa\x5a\xe5\x25\xad\x0a\xb8\x4f\x3b\x51\x9b\x9b\xb0\xb3\x3d\xe6\xc0\xed\xe1\x30\x63\x84\x00\x85\x11\x8e\x49\x1d\x32\xa4\x73\x14\xad\x9f\x51\xf5\x5c\x91\xfc\xde\x38\x4b\xa0\x61\x1b\x16\xa6\xee\xd6\x08\x05\xfd\x18\xf9\x81\x67\xab\x88\xc0\xd0\x3f\x62\x84\x07\x3d\x99\xf7\x8a\x09\x85\x11\x9e\xf5\xbd\xaa\xe0\xdc\xc3\xf9\xc7\xb7\xd8\xe8\x4b\xdc\xe0\x8b\x5f\xdd\x6c\x6b\xe9\x99\xa2\xdd\xa2\xf7\x45\xab\xda\xdf\xbf\x0c\xe4\x43\x60\x08\x33\x46\x08\x50\x18\xa1\x4e\x79\x69\xab\x2d\xab\x5d\xc8\x6e\xc7\x91\x54\xe5\x30\x9a\x96\xba\x67\x19\x23\x9f\x75\x35\x7c\x53\xaf\xf3\xee\x8e\x3c\xce\x53\x42\x60\x08\x33\x46\x08\x50\x18\xa1\x68\x54\x7e\x9a\xec\xaa\x16\x9b\xa9\xdc\x13\xed\xe4\x91\x0f\x8c\x37\xb9\x92\x3b\x97\x7f\xca\x5e\x3c\x73\xbf\xe5\x4b\x52\xf5\x07\x66\x04\x86\x30\x63\x84\x00\x85\x11\x12\x86\xa9\x7e\xaa\x19\xb8\xea\x48\x33\xe1\xf5\x8e\xe0\xcd\x4e\xf6\x8b\xf7\x31\x7e\xb6\x37\xec\x7a\x73\x34\x36\x33\xa9\xfd\x9d\x70\xab\x2d\x66\x8c\x10\xa0\x30\x42\xab\xcd\xa0\x9f\xcd\xdf\x9b\x5e\x7d\xe8\xe6\x90\xdf\x10\xd5\xcf\x78\xea\xab\xf6\x70\x26\x6e\x28\x70\x2d\x93\x44\xf5\x41\xe8\x7b\x3a\x04\x86\x30\x63\x84\x00\x85\x11\x46\xd2\xe3\x65\x3d\xa8\x2c\x54\xcc\xfd\x31\x59\x60\x96\x34\x13\xea\xc0\xfe\xe6\x55\xb1\xd3\x7c\xf1\xf2\xdc\xc5\xca\x3a\xae\x57\xaa\x08\x0c\x61\xc6\x08\x01\x0a\x23\x54\xa0\x68\x50\x3d\x13\x13\x41\x53\x9d\x77\xad\xea\xf6\x32\xd3\x7d\x67\x59\x96\x4c\x29\x7a\xed\xca\x6e\xb2\x07\xcf\x33\xd6\xa7\xa5\x10\x18\xc2\x8c\x11\x02\x14\x46\xd8\x9b\x4a\x69\xe7\x27\xac\x3d\xd4\x05\xb3\xee\x76\xfe\xf8\x39\x7a\x3d\xb1\xa4\x9c\xc3\xaa\xfd\x1e\xff\x4f\x39\xfb\xc8\x88\x7b\x47\x11\x18\xfa\x47\x8c\xf0\xa0\xde\x75\xaf\x98\x50\x18\x61\x2f\x63\xc5\xd2\xb0\x33\x41\x90\x19\x71\x66\xde\x8c\x54\xc3\x70\x72\x0b\xfb\x44\x07\x47\x9a\xce\xb3\x2f\x87\xce\x4b\x4c\xb5\xe3\x76\xd2\x98\x31\x42\x80\xc2\x08\x2b\xca\x86\x6f\x4d\xf4\x24\xb4\x04\x5f\x30\xa7\xa1\xbd\xe2\x2a\xdd\x14\x4d\x7c\x2e\xfa\xd4\x5d\xf1\xc2\xdd\x38\x53\x73\xcd\x5d\x27\x04\x86\x30\x63\x84\x00\x85\x11\x16\x91\xef\x5c\x78\x82\x3c\xd8\x39\xda\x1f\x7e\xd6\xb1\x26\x34\x35\xa5\x8a\x29\xfd\x74\xbc\x81\x9c\xd6\xdc\x8a\x71\x37\x49\xc5\x55\x04\x86\x30\x63\x84\x00\x85\x11\x5e\x2e\x16\x9b\xbd\xe3\x15\x25\x4b\xa5\x69\xa4\xb1\xe5\xd9\x4f\x95\xc6\xef\xb7\x21\xb5\x65\x25\xb0\xb6\x3e\x19\xb9\x68\x6e\x81\x5b\x78\x30\x63\x84\x00\x85\x11\xee\x8a\xbf\xfa\x56\x61\x64\xe6\xf7\xa6\x27\x6b\xe7\xf1\x06\xa7\xc5\xcf\x96\xd6\xef\xb7\x4c\x69\x53\x34\x33\xfe\x16\x36\x30\x4e\x9a\x23\x30\x84\x19\x23\x04\x28\x8c\x90\x78\x61\xd7\xa8\x10\x2f\xab\xa9\x2f\x8d\xd8\xea\x48\xa2\xd9\xb8\xe2\xe8\x52\x58\xc3\xb3\x67\x82\x9d\xd1\x43\xbb\xcd\xcf\x73\x70\xaf\x81\x19\x23\x04\x28\x8c\x30\xce\xfc\x68\x18\xc5\x2a\x43\xd3\xf0\x8a\x5c\xe4\x71\x0f\x89\x37\xfd\xa3\xa7\x13\xb7\x89\x46\xa8\xf5\xeb\xf4\x86\x49\xe9\x29\x60\x04\x86\x30\x63\x84\x00\x85\x11\x5a\x16\x78\x7e\xa8\x7f\xd3\x71\x3e\xaa\xeb\x59\xd0\x79\xfb\xcf\xaa\x7f\x15\xfd\x9c\xce\x8f\xdf\x91\x90\x2b\xc6\xaf\xfe\xf5\x78\x1a\x37\xaf\xfe\x11\x23\x3c\x68\x77\xb7\x57\x4c\x28\x8c\xf0\x07\xff\x40\xee\x96\x03\x6b\xbb\xd7\xd0\xf3\x7a\x75\xeb\x99\x2a\x7d\x46\xad\x64\xca\x8d\x88\xc6\xd1\x05\xae\xe0\xe2\x51\x1b\x3c\x04\x86\x30\x63\x84\x00\x85\x11\xde\x42\xb8\x04\x52\x0a\xf3\xce\x8c\x5a\xdd\x31\xa8\x56\xaa\x36\x36\xa8\x21\x30\x18\xd5\x97\xb4\x8f\x72\xf8\xa0\x0c\x09\x24\xe3\xda\x0a\xcc\x18\x21\x40\x61\x84\x52\xe5\xf3\x1d\x92\x3d\x39\x66\x53\x53\xe4\xd9\x9a\xee\x3a\x5d\xe2\x35\x57\x9e\x5d\xb2\xff\x75\x2b\x8c\xa1\x95\xac\x3f\xda\x11\xb7\xa2\x63\xc6\x08\x01\x0a\x23\x3c\x76\x64\x64\x99\x60\x4d\x52\x79\x84\xf0\xb3\xa9\xc1\xf9\xab\x2d\xcc\x32\x66\x9b\xde\x4f\xbc\xaf\x09\xaa\xb7\xde\x76\x18\x67\xa6\x47\x60\x08\x33\x46\x08\x50\x18\xe1\xf8\x45\x2f\xf2\x8e\x60\x45\xc1\x38\x92\xb3\x7f\x36\xfd\x93\x0c\x13\x9e\x2c\xf4\xc6\x4e\x30\x50\x2a\xa9\xd5\xb9\x31\xaa\x07\xf0\x23\x30\x84\x19\x23\x04\x28\x8c\x50\x48\xe5\xb6\x17\x43\x67\x2f\x57\x4f\xed\xdd\x60\x75\x36\x6b\xa3\xa2\x8d\xa3\xc9\x5b\xbe\x5d\x03\xc1\xc6\x67\xbb\x19\x3c\x6e\xe3\xf6\x4c\x98\x31\x42\x80\xc2\x08\x15\x24\x46\x9e\x0b\xdc\x36\x48\x4d\x5b\x52\x61\x1b\x9d\x75\x25\x4a\xfc\x38\x98\x9c\x9a\x74\x8e\x64\x8d\xc1\x80\xa3\xa3\x25\xdd\x00\x81\x21\xcc\x18\x21\x40\x61\x84\xcd\xa6\x7e\x72\x6a\xa5\xc7\x26\x09\x46\x86\x3c\x1c\x33\x36\x8f\xaa\x3f\x50\xfd\xe8\xfc\xc0\x3c\x9e\xe1\x9c\xcd\x83\x84\x90\x17\xfa\x08\x0c\xfd\x23\x46\x78\xd0\xf9\xc7\x5e\x31\xa1\x30\x42\x95\x6d\x09\xe2\x39\xff\x6a\x1a\xfa\x69\xcf\xfa\xd2\xf3\x42\x0a\xce\x36\x8c\x1e\xa7\xbf\x5f\xdb\x39\x21\x25\x30\x1b\xcf\x10\x88\xab\x6e\xcc\x18\x21\x40\x61\x84\x37\xac\x39\xae\x12\xcc\xd2\xcb\x18\x05\xa7\xb0\x10\xc4\xd9\xd8\x07\x67\x71\x5e\x5f\xbc\x0e\x39\x40\xaf\x07\xfe\xc6\xb7\xa6\x5c\x43\x60\x08\x33\x46\x08\x50\x18\xe1\x03\xb7\x52\xef\x0a\xa6\xc3\x1b\x54\xcd\xd2\x5c\xb6\x03\xd2\xd5\x39\x43\x45\x9c\xba\x64\xdd\x33\x82\x02\x96\xab\x24\x41\xaa\xec\x08\x0c\x61\xc6\x08\x01\x0a\x23\x7c\xd3\xd1\x45\x3b\x50\xbd\xb8\x56\xd6\x44\x35\xf3\x4d\x7b\x7a\x53\x4c\x13\x36\xcb\xff\x5d\x57\xd6\x7c\x66\x53\x9d\x51\xe6\x0b\x6e\x1f\x80\x19\x23\x04\x28\x8c\x90\x8a\xd1\xfb\xa1\xc3\xe1\xae\x00\x43\x3e\xd7\x96\x13\xa2\xb2\xd1\x94\xa4\xd7\xeb\x5f\xac\x08\xe8\x76\xdf\x39\x93\x70\x41\xa5\xe6\x34\x02\x43\x98\x31\x42\x80\xc2\x08\xc3\x2e\xeb\x48\x77\x37\x93\x98\x93\x78\x5b\x04\x04\x08\x6c\x0e\xaf\x18\xc9\x7a\x21\x39\xab\x29\xa2\x0b\xeb\xd4\xba\xa6\x8a\xf6\x08\x0c\x61\xc6\x08\x01\x0a\x23\x8c\x94\x9a\xe7\x8d\x14\x90\x7b\x62\xd3\xa9\x70\xc7\x7b\xe0\xa4\x9c\x5d\x4c\x4b\x6f\xc9\xab\x3f\x87\xf1\x3e\x6d\x52\xfc\x18\x2a\x95\x44\x60\x08\x33\x46\x08\x50\x18\x21\x47\x73\xf1\xe8\xc3\xd3\x93\x31\x3d\x9c\x29\xad\x91\x25\x2b\xf2\x44\x37\xce\xf7\xcd\x25\xcd\xc4\xfb\x5c\x32\x54\x30\xe4\xe4\x39\x85\xc0\xd0\x3f\x62\x84\x07\x9d\x10\xee\x15\x13\x0a\x23\x74\x19\x86\xbd\x13\x99\x7b\x48\xb8\x3f\x4c\xab\x78\xe6\x4f\xe7\x27\x5e\xd6\x75\x96\x23\x99\x77\x28\x3e\xad\x42\x40\xf2\xbe\x49\x01\x81\x21\xcc\x18\x21\x40\x61\x84\x17\x28\xde\xa5\x94\x9a\xbe\x63\xbd\x98\x19\xd8\x18\x37\xb8\x18\xaf\x67\x9c\x70\x33\xec\x8b\xcd\x45\x76\x46\x26\x87\xf4\xce\x53\xda\x08\x0c\x61\xc6\x08\x01\x0a\x23\xb4\x78\x2a\x24\xfc\xf2\x85\xf8\x58\x26\xf5\xb3\x8b\x33\x8a\xcc\x96\x9c\x71\x5b\xc7\x1f\xbf\x3f\x5c\x41\xce\x50\xeb\x6b\xc6\x63\x40\x84\xc0\x10\x66\x8c\x10\xa0\x30\xc2\x9f\x81\x64\x6b\xc4\xe7\xab\x13\x9e\xba\xbe\x23\x6f\x93\x16\xb1\x5e\xa2\x8f\x3b\xdf\x97\xfa\xa4\xf4\xad\xca\x71\x87\x8c\x60\x75\xdc\xfb\xc0\x8c\x11\x02\x14\x46\x58\x14\x70\xe4\xf9\xb0\x2c\x88\xe2\x55\x9c\x99\x50\x86\xdb\x75\x5d\xc6\x0f\xb5\xa6\xd2\xa9\x59\x07\xf4\x78\x0e\xc7\xd3\x45\x5e\x44\x60\x08\x33\x46\x08\x50\x18\x61\x88\xfc\xcd\x9f\xe4\xde\x6a\x11\x61\x52\x32\xfc\x7f\x28\x8a\x93\x8e\xb8\x3e\x30\xf4\x66\x3e\x9a\x1b\xd1\xa6\xe1\xbf\x83\x27\x4c\x8b\xc0\x10\x66\x8c\x10\xa0\x30\xc2\x47\xc6\x67\x6c\xc7\x8e\x6e\xe1\x5b\x51\x14\x97\xa5\x3e\x61\xef\x09\xb1\xf0\x28\xf9\xdc\xc2\xc5\x2d\xab\x7d\xee\xe8\xf2\x1d\x09\x5c\xdb\x8d\x19\x23\x04\x28\x8c\x90\xde\x38\xa9\xf2\x59\xb3\x50\x34\xf5\xea\x84\xa6\xf4\x99\x98\xc9\xcb\x12\x77\xca\x4b\x63\xc7\xf9\x39\x95\x32\x22\xf5\x55\x0b\x71\x5b\x94\x7f\xc4\x08\x0f\x3a\x43\xdf\x2b\x26\x14\x46\x58\xf8\xe8\x24\x19\x32\xd1\xbe\x49\x48\xbd\x7c\x56\x75\x5c\x38\x55\xa6\x29\x61\x3b\x97\xd2\xda\x1a\x79\xfd\x57\x54\x59\xfc\xdd\x09\x04\x86\x30\x63\x84\x00\x85\x11\x4a\x3e\xa9\xaa\xe9\xf0\x3c\x4e\xb8\x46\x74\x7c\x73\xc9\xed\x47\x50\xdf\x78\xb4\x9a\xe1\xac\x6d\x9a\xe8\x15\xd1\x01\xa8\x49\xdb\x0e\x81\x21\xcc\x18\x21\x40\x63\x84\x53\xdf\x0f\x25\x32\x3b\xb2\x56\xc4\xf5\x08\x73\xd8\x76\xd2\x6c\xbf\xbe\x0e\x5f\xbb\xec\xd9\xbf\x70\xff\xe6\x90\xb0\x93\x2b\xee\x91\x8f\x19\x23\x04\x28\x8c\x30\xa0\xdc\xec\x45\x9d\xa5\xc2\x19\x3c\x27\x42\xfd\xca\xbc\xa3\x88\xce\xc2\x6a\x43\xc9\x7b\x49\xb2\x08\xfa\x1f\xab\x1c\x87\x48\x3d\x11\x18\xc2\x8c\x11\x02\x14\x46\x48\xca\x75\xe2\xc7\x6a\xea\x54\xfe\xd9\xbf\x8c\x27\x3b\xc8\xa9\xcc\xed\x28\xb2\x62\xa8\x7e\xb0\x47\xb1\xf4\xda\x70\xa7\x9e\x24\x21\x45\x60\x08\x33\x46\x08\x50\x18\x61\xab\xcd\x32\x63\xf1\x19\xaa\x99\x1f\x7f\x94\x29\x7a\xbd\x5c\x2c\x7c\xd8\xe9\xc0\xe0\xc2\xfc\x4d\x73\x9f\x77\x3b\x03\x3a\x4c\x82\x08\x0c\x61\xc6\x08\x01\x0a\x23\xac\xcb\xac\x6c\x36\x16\x4a\x53\x35\x55\x83\x0c\x85\x9c\x87\xf8\x4f\x8f\x18\xd0\xb4\x7f\xf8\x30\x46\x72\x9d\x37\xe0\x5d\x8e\xd2\x31\x04\x86\x30\x63\x84\x00\x85\x11\x8a\x98\x79\x2d\xf3\xe1\x95\x35\xc4\x2f\x69\x8d\x3e\xf2\x8f\x78\x51\x48\xbe\x4d\x7d\xf7\xc8\x4f\xd1\xaa\x4e\xc6\x6f\xed\x96\xfe\xbc\x08\x0c\xfd\x23\x46\x78\xd0\xef\x7d\xa2\x2e\xfb\x4e\x17\x8e\x5f\x95\x39\xc6\x5d\xfd\xb2\x82\xf1\xc1\x78\x76\xb5\xed\xe2\x99\xaa\x71\x1f\x36\x0d\xe2\xec\x40\xf7\x2b\x95\x9f\x93\xc5\xf6\x45\x3f\xcf\xb0\x74\x5d\xf4\x26\x4e\x74\x9d\x9d\xdc\x91\xfb\xf8\xb2\x4d\x0f\x2f\x80\x42\xf7\x54\xfe\x89\xcb\x14\x93\x82\x9f\x38\x54\x35\xf6\x45\x09\x19\x0a\xb8\xcc\x72\x53\x94\x39\x0b\x7f\xc7\x8c\x59\x1c\x43\x4c\xba\xde\x10\x0a\xbb\x72\xe5\x85\x7a\x4a\x5e\x88\xad\xe5\x77\xd9\x17\xc5\x9f\xa0\x5e\xbb\xf1\xa0\x0b\xf1\xef\x12\xec\xf1\x5f\xea\x9e\xbc\xf1\xb2\x4f\x5a\x9e\xfd\xcc\x4a\x05\x43\x53\x3f\x95\x25\x2d\xff\xbe\xa8\x7c\x81\x4e\x45\x50\x6a\xd5\xb5\xa0\x9c\x7a\xfb\x09\x82\xda\xb1\xe7\xef\x0f\xf1\xf0\xf9\x89\x8d\xb4\x08\x0c\x0b\x7d\x15\x89\x60\xdd\x17\x25\xaf\x0d\x2d\xd1\x80\xe3\x2b\xb6\x6b\xd9\xee\xfd\x69\x61\xb8\xd5\x4b\xb0\x79\xb5\x77\xf6\x7d\x9e\xc7\x4b\x1a\x63\x26\x9d\x8b\xdd\xfb\xa2\x31\x96\xa5\x9e\xc5\x48\xf0\xf7\x6f\xfe\x7d\xbe\x69\xbe\x4c\xc6\x42\x01\x5f\x4e\x19\x4a\x4f\x88\xe8\x10\xae\x96\xa8\x7f\x98\x50\xda\x17\xe5\x9d\x95\x15\x93\x23\x3e\x49\xf8\x81\xb4\x94\x9c\x40\xf5\x43\x1b\x11\x91\x96\x82\x6b\x0f\x51\x68\x74\x77\xb3\x46\x54\x10\x53\xcf\xff\x5e\xf6\x1d\xf4\xa9\xee\xad\x68\x28\x8c\xf0\xc6\x48\xaf\x19\xd0\x7f\x3a\xaf\xc2\x55\x69\x1e\x7a\x15\x7e\xf5\x08\xde\xfa\xad\x69\x34\xbb\x53\x68\x27\xa4\xd6\x67\x26\xa3\x8c\xc0\x10\x66\x8c\x10\xa0\x30\x42\xcb\x5e\xbe\x3e\xae\xe4\xd9\x6d\x99\x2a\x36\xc5\xf3\xa2\x02\x47\x58\xb2\x2a\x7d\x49\xef\x26\x04\xa8\x77\x85\x0d\x6f\xc6\xbd\xc2\x55\x10\x66\x8c\x10\xa0\x30\xc2\x23\x3a\x3b\xce\x8f\x19\x04\xda\x73\x7d\x7b\x4e\xfd\xb5\x70\xbb\xdc\xf3\xb5\x4a\x3c\x32\xa5\x3d\x7c\x30\xb3\x22\xa9\xf9\x43\x80\x11\x02\x43\x98\x31\x42\x80\xc2\x08\xcd\x7d\xca\x6d\x45\xad\xea\x4e\xa7\x59\xb3\x90\x5f\x4b\x2a\xb2\x84\xc4\x57\x93\x38\x8d\x07\xf5\x58\x6d\x7b\xfe\x24\x11\x4a\xe2\x36\x7c\x98\x31\x42\x80\xc2\x08\x6f\x74\x52\x19\xdc\xce\xd1\xb1\x79\xce\xed\x19\x12\x60\x16\x40\x4a\xe1\x77\x9e\x81\x12\xbe\x99\xd8\x5a\x2d\x7e\x3a\xfe\xb1\xa5\x2a\x02\x43\x98\x31\x42\x80\xc2\x08\x25\x67\x98\x05\x33\x92\x9d\x8b\x5d\x98\x3c\x25\xda\x9e\xfb\xd1\xd1\xe0\x11\xf8\x28\x7c\x3b\xc9\xf1\xd9\x52\xe1\xa4\x57\x8b\x2d\x84\xc0\x10\x66\x8c\x10\xa0\x30\x42\xad\x9f\x77\xf0\xa2\x72\xe8\x9d\xac\x2c\xae\x57\x23\x82\xe7\x9c\x9e\x56\x4a\x1d\xfa\xca\xfb\xc9\x39\xb0\xe7\x6b\x85\xb2\x8e\x86\x3c\x02\x43\x98\x31\x42\x80\xc2\x08\xfb\x35\x83\x10\xcd\x85\xba\xcc\x3b\x9e\xbd\x8e\xe9\x2e\x20\x3d\xaf\xdb\xf3\xf4\x79\x19\xc6\x37\x9d\x3c\x78\x09\xef\xec\x86\xc8\x11\x18\xfa\x47\x8c\xf0\xa0\x75\x67\xaf\x98\x50\x18\xe1\xb2\x01\xc1\x21\xd6\x8c\xd5\xe6\xf7\x79\x31\x29\xcf\xa6\xd6\xdf\xce\x16\x1e\x3a\x1a\x4a\xd1\xe6\x7c\x87\xd8\x85\x5d\xfa\x35\x25\x23\x02\x43\x98\x31\x42\x80\xc2\x08\x3f\xbf\xfe\x2a\x12\x41\xb7\x4a\xae\xc9\x60\xb4\xa4\x4d\x61\x46\x37\x68\x5e\xce\xb3\x66\xc1\x37\x12\xbc\xce\xf6\xb4\x7d\x41\x07\x20\x30\x84\x19\x23\x04\x28\x8c\xd0\x97\xe6\xf6\x5f\xae\x91\xe9\x2b\xaf\xce\x0f\x55\xcd\x89\x53\xf5\xce\x81\x67\x7a\xdf\x27\xb2\xfc\xa3\x46\x92\xa4\xbc\x12\x24\x18\x10\x18\xc2\x8c\x11\x02\x14\x46\xf8\x3d\xf8\x36\xa5\xd0\x10\x21\xf5\xa3\xf2\xc0\x62\x82\xcc\xdd\x5a\x84\xa3\x55\x22\xf4\xa2\x69\x2f\x09\x29\xad\x55\x65\xe9\x9c\x25\x02\x43\x98\x31\x42\x80\xc2\x08\xfd\x39\x8b\x45\x82\xb9\x0a\xad\xae\x46\x7c\xe8\x6c\xea\x32\x57\x3c\xde\x3e\xd8\x12\x28\x54\xf3\xf4\x14\xfe\x98\x5f\x8b\xa4\xe5\x11\x04\x86\x30\x63\x84\x00\x85\x11\xca\xde\x09\x49\x4d\x75\x2d\x3b\xa1\xad\xd9\x3a\x34\x93\xb7\xf5\xe0\x94\x67\x6b\xc4\x4e\x8e\x53\x19\x95\xa6\x31\x17\xc3\x97\xfb\x9c\x08\x0c\x61\xc6\x08\x01\x0a\x23\x3c\xc5\xff\xf2\xa7\xd1\x34\x69\x99\x83\x1c\x4b\x40\x4d\xeb\x18\xe3\xdf\x7a\x9d\x14\x85\x70\x4b\x19\xb9\xa4\x8b\x66\x78\x2a\x22\x12\x08\x0c\x61\xc6\x08\x01\x0a\x23\x54\xb7\x14\x63\xe2\xff\x64\x67\xcd\xb6\xb3\x26\xcc\x51\x42\xc4\x1b\x47\xc2\x4a\xe3\x17\xfb\xf7\x0e\x2d\x41\x0f\x93\x8d\xf8\x21\x16\x04\x86\xfe\x11\x23\x3c\xe8\xc9\xbc\x57\x4c\x28\x8c\x30\x1e\xbc\xea\x92\xc8\x75\xc8\xe7\xb1\x6f\x22\xa5\xa4\xf8\xc5\xa6\x43\x94\x74\xae\xfe\x7a\x3b\x5f\xdf\xa5\x11\xbb\xfa\x4f\x3d\x4e\x08\x0c\x61\xc6\x08\x01\x0a\x23\xfc\x9c\x56\x4e\x89\x57\x72\xec\xf1\x65\x9e\x9d\xe6\x10\x81\x47\x71\xfc\x15\x2a\x09\x4e\x6e\x36\x1c\xe7\xc3\xed\xe0\xf7\x9e\x2b\xe7\x10\x18\xc2\x8c\x11\x02\x14\x46\x38\x7a\x92\x8e\xfa\x61\x9f\x92\x37\x05\xad\xd1\xe7\xaf\xc9\x74\xd5\x78\x1e\x74\x6c\x6b\x75\x86\x1e\x73\x09\x46\x35\x21\xb7\xa3\x5d\x11\x18\xc2\x8c\x11\x02\x14\x46\x68\x6f\x7f\xa8\xc3\x61\xb7\x89\xbb\xd7\x81\x82\x35\x50\xf8\x99\x52\xfe\xe6\x2d\xee\x50\xdd\x65\x92\xa3\xc7\x83\xd8\xd7\xb2\xe6\x71\x13\x04\x33\x46\x08\x50\x18\xa1\xfa\x19\x01\x8e\x9f\x1b\xa9\xa7\x19\x88\x7c\xf0\xfa\xaa\x26\x95\x5c\x2d\xed\xce\x0d\xb0\xd0\x8b\x1f\xaf\xf4\xd6\x4e\xde\xa8\x93\x42\x60\x08\x33\x46\x08\x50\x18\xa1\xf5\xd1\x63\x8a\x2d\xbd\x6a\xad\x43\xe7\x5f\x93\x3f\xc5\xf7\x3a\xda\x47\xe1\xf1\x58\x3c\x7a\xe0\x10\x7c\x2f\xc2\x47\x73\xab\x81\x10\x81\x21\xcc\x18\x21\x40\x61\x84\x71\xf0\x6f\x96\x98\xe2\x0b\x56\x91\x93\x7d\xb2\xf1\x6a\xef\x24\xc4\x8c\x06\x56\xdf\x50\x70\xae\xbc\x74\x4d\xf9\x26\x6f\x52\x80\x9b\xe8\x98\x31\x42\x80\xc2\x08\x8d\x0f\xd9\x51\x48\x0e\x0f\x49\x73\x07\x4d\xf9\xbf\xc9\x89\xf9\xc1\xcb\x48\xa1\x61\x91\xaf\x36\xf6\x61\xfe\xfd\xc2\x56\x58\x81\x1e\x02\x43\xff\x88\x11\x1e\xd4\xbb\xee\x15\x13\x0a\x23\xa4\x6a\xfc\x58\x7f\xa7\xff\x63\xdb\xa2\x90\x75\xee\x4b\x9a\x39\x9b\x6a\x96\xd9\xba\x2a\xf5\x3e\xcb\x29\x75\x95\x92\x4c\x42\x25\x5c\x0b\x86\x19\x23\x04\x28\x8c\x90\xeb\x0b\xc1\xe1\xc2\x49\xd1\x96\x54\x6d\xb2\xcd\x4e\xcb\x68\x52\xed\x62\x82\x47\xc9\xc7\x99\x73\x0d\x20\x17\x02\x99\xf0\x77\x74\x08\x0c\x61\xc6\x08\x01\x0a\x23\x4c\x6d\x4c\x90\xed\x4e\x8b\x03\xc7\xe9\xcc\x9e\x47\xc8\xb4\xb6\x66\x75\x0e\xe7\x42\xc4\xa9\x76\xf6\xb3\x4b\x15\xb3\x9b\x0e\xb8\xa7\x1f\x66\x8c\x10\xa0\x30\xc2\xbf\x12\x84\x7d\x46\x14\x2a\x7f\x9c\x07\x8c\x3f\x47\xd3\xda\x7d\xb0\xe8\xac\x93\x7f\xac\xee\xbc\xbd\x66\x55\x4d\x3e\x45\x59\xc3\x8f\xc0\x10\x66\x8c\x10\xa0\x30\xc2\xba\x2a\x62\xab\xd8\x79\x62\xd5\x24\x5f\xb1\x65\x65\xdd\xc5\x13\xc5\x0d\xf3\x93\xc2\xd4\x45\x7a\xd9\x81\x91\xa4\x9f\x4a\x58\x70\x6d\x37\x66\x8c\x10\xa0\x30\xc2\x63\x56\x63\x9e\x5a\x3e\xd6\xc3\x03\x77\x67\x5d\x46\x94\x3b\x6f\xb4\x7e\xdd\xb2\xeb\x3e\xe5\x3a\x1d\xb5\x28\xcc\xc9\x51\x1f\xc0\x85\xc0\x10\x66\x8c\x10\xa0\x30\xc2\xf4\x14\x2b\x8e\x02\x5b\x97\xaa\x6f\xf3\xbc\xd7\x5f\xba\x44\x2e\x31\xb3\xc5\x7e\x4b\x5c\x13\x6a\xd5\xdd\x70\x77\x55\x1a\x78\x4c\x84\xc0\x10\x66\x8c\x10\xa0\x30\xc2\xfe\xae\x15\xc6\x9b\x59\xbd\xfe\x49\xe5\x49\x6b\xea\xb5\x62\x13\x47\x88\x9a\x7d\x57\xe9\x7d\x07\x19\x4a\x9c\xbc\x39\x82\xbc\xed\x10\x18\xfa\x47\x8c\xf0\xa0\xdd\xdd\x5e\x31\xa1\x30\xc2\x07\x9e\xb2\xf3\x27\xcf\x96\x99\x3b\xa5\x09\x5d\xfc\xe6\xc2\x89\xdc\x7b\xb4\xa2\x35\xb9\x78\x2d\x5d\x31\xd0\xe4\x7e\x15\x92\xa2\x80\xc0\x10\x66\x8c\x10\xa0\x30\x42\xa9\xac\xaf\x47\x6f\x5b\x3d\x69\xce\xf8\x93\x90\x95\xea\x79\xeb\x69\xaa\xb9\x89\xfd\x25\x4b\x5f\xfd\xde\x20\xcd\x27\xd3\x53\xf8\x2e\x08\x0c\x61\xc6\x08\x01\x0a\x23\xbc\x55\x20\xdd\x1e\xbd\x7e\x52\x98\x15\x3c\x9d\xb7\xcc\x81\x6d\x95\x95\x88\x4f\x7c\xba\xee\xf1\xfb\x83\x68\x51\xa6\x11\xd7\x0f\xdc\xa2\x80\x19\x23\x04\x28\x8c\x50\xc7\xf3\xf2\x8b\xcc\x48\x9e\xec\x00\xbe\x8b\xd9\xd1\x3d\xce\xee\x11\xbb\xc7\x2c\x95\xeb\xaa\x36\x5b\xbe\x5e\xe3\xe3\x6c\x8f\xc1\xad\xe8\x98\x31\x42\x80\xc2\x08\x79\xb5\xbd\x45\x4a\xf8\x23\x19\x9f\x91\xa5\x53\xa5\x90\xbd\xf7\xfc\xa9\xf2\xbc\x6e\x94\xd8\x49\x7a\x26\x47\x1c\x9f\xf7\x1e\x2f\xae\xed\xc6\x8c\x11\x02\x14\x46\xf8\x45\xe5\xad\x62\x98\xf7\x7b\x4b\xde\x04\xf6\x33\xb1\x32\x22\x3a\xb2\xd6\xa9\x1d\x55\x83\x61\xd2\x7f\x03\x12\x37\x92\xce\xfe\xe2\x45\x60\x08\x33\x46\x08\x50\x18\x61\x8e\xfe\x15\xa4\x29\x64\x9e\x4e\x6c\x7d\xfc\xf6\x8c\x99\xff\x84\x72\x02\xfe\xab\x6a\xb1\xeb\x9f\x8e\x34\x8e\x6d\xe5\x3d\x1d\x72\x47\x60\x08\x33\x46\x08\x50\x18\xe1\xe4\xcd\xf9\x57\xcb\xdc\x2d\xfd\xf6\xe7\x27\xb6\x37\xd3\x59\xc9\x23\xfa\x8a\x2c\xc7\x2c\xe2\xbf\x17\x2c\xdd\x0e\xb4\x56\x6a\xd7\x44\x60\xe8\x1f\x31\xc2\x83\xce\x3f\xf6\x8a\x09\x85\x11\x1a\x4e\x2d\xde\xd6\xf9\x72\x98\xf1\x99\x32\x4d\x66\xca\xa3\xb5\x9b\xc2\x5f\x1e\xcf\xcf\x0f\x4e\x38\x13\x67\xbc\xd9\xa4\xb5\xb8\xa7\x85\xc0\x10\x66\x8c\x10\xa0\x30\xc2\x37\xda\x62\x42\x5c\x53\x22\x59\xc4\x6f\x94\x8d\xae\xe0\x6d\x37\xb6\x0c\x85\xbe\xe3\x95\xb9\x38\xa1\x64\xc9\xda\xcf\xa2\x42\x75\x01\x81\x21\xcc\x18\x21\x40\x61\x84\xdc\x02\x9f\x23\xa6\x03\xd5\x9e\x91\x65\xeb\x0b\x2c\xb2\xfa\xb6\xb0\x8c\x6f\x6a\x97\xb6\x45\xa4\x10\x7b\x2d\x32\x99\xdd\x30\xb8\x88\xc0\x10\x66\x8c\x10\xa0\x30\x42\xb3\x90\xdd\xa2\x30\xba\x68\xab\x62\x96\x8c\xf2\x1f\x26\xe4\xc9\x03\x1b\x4a\xbe\x20\x6a\xd2\x08\xbf\xff\x59\x0c\x73\x38\xa5\x31\x02\x43\x98\x31\x42\x80\xc2\x08\xa1\xc4\xdb\x2b\xf4\x11\x2c\x8a\x70\xd2\x7c\xf6\xb5\x90\x72\x61\xe6\x49\x19\x9e\xfc\x47\xb4\xe7\x2b\xf2\xb9\x42\xaf\x53\xea\xd1\x20\x30\x84\x19\x23\x04\x28\x8c\x70\xe5\xa9\x19\xf3\x80\xbe\xd8\x94\x1c\x8b\x5c\x76\xf8\xd8\x45\xfe\x5b\x26\x4a\x8c\x05\xe3\xcf\x5a\x4d\x08\x27\xa7\x36\xa8\xd3\x69\x11\x18\xc2\x8c\x11\x02\x14\x46\xc8\xb0\xe8\x75\xd1\x47\xf9\x4f\xcb\xf7\xec\x1b\xf5\x0d\xf6\xd5\x15\x36\xdf\xfa\x73\xbe\x7f\xdf\xdd\x32\xb7\xe0\x08\x9e\xfc\xc8\x6e\x88\xc0\x10\x66\x8c\x10\xa0\x30\x42\x8d\x52\x53\x06\xfd\x4f\x67\x0d\x05\xc9\xfe\x34\xca\xcc\x9c\x7b\xe8\xeb\xb0\xc4\x6b\x9f\xc8\xbb\x10\xfe\x37\xb1\x6d\xa9\x4d\x91\x04\x81\xa1\x7f\xc4\x08\x0f\x3a\x21\xdc\x2b\x26\x14\x46\x78\x89\xa9\x71\x9c\x67\xa4\x4a\x7e\xf6\x1e\xb1\xe6\x40\xa5\x02\xcf\xcc\x6c\xd4\x15\xcf\xcc\x7e\x71\x42\xc1\x23\x45\x7d\x05\xd5\x6a\x08\x0c\x61\xc6\x08\x01\x0a\x23\xfc\xba\x00\x5e\x07\xb1\x5f\x4a\x37\x4d\x7f\x6b\xc9\x37\xd6\x5f\xdc\xbf\x15\xa3\xcc\x15\x76\xef\x4d\x28\xfb\x76\xf9\x36\x6d\x07\x6e\xb5\xc5\x8c\x11\x02\x14\x46\x28\x13\x1b\xf1\xf2\xf7\xb2\x6f\x51\xf4\x66\xfc\xc2\xea\x45\xf6\x3f\x72\xa6\x56\xb9\xb7\x5b\x67\xf2\x2e\xf8\xcd\x3a\x26\x5a\x57\x59\x22\x30\x84\x19\x23\x04\x28\x8c\x30\x42\x12\xdf\x69\xdb\x42\xbc\xc6\x84\x01\xcf\x99\x37\x43\xd9\xb9\x27\x91\x98\x21\x47\x8d\xde\x24\x6a\x78\xcb\xcb\x74\xdc\x11\xd7\x4a\x62\xc6\x08\x01\x0a\x23\x74\xd0\x7e\xa3\xda\x71\x58\xd1\x59\x20\x58\x7e\x9d\xf4\xd6\x79\x7c\x0f\x59\x60\x0c\x9a\xde\x1c\x73\xb6\xf5\x1f\x54\x8b\x0e\xbc\x84\xc0\x10\x66\x8c\x10\xa0\x30\xc2\xdc\x2a\x0e\x8b\xdc\x6f\x76\x7a\x82\x16\xb9\xa9\x2f\x02\x6f\xa9\x80\xd7\xcc\xbf\x48\x75\xb4\x09\xc4\x8d\x69\x6b\xe4\x4f\x5e\x26\x40\x60\x08\x33\x46\x08\x50\x18\xe1\xd7\xfb\x36\xda\x05\x7f\x8c\x9f\x44\x28\xf6\xb7\xc3\xc4\x25\x1b\x5c\x97\xd6\x1e\xc9\xea\x45\x0f\x4b\x5b\xe9\xa5\x0b\x71\x51\xe0\xe6\x15\x66\x8c\x10\xa0\x30\xc2\x77\xd7\xf9\x8f\x32\x5e\x12\xfe\xf5\x71\x25\x64\x42\xfa\xcf\xac\x23\xef\x5b\xeb\xea\x46\x7f\x95\x8f\x27\x33\x3f\x5d\x23\xd9\x8d\xc4\x2d\x0a\xff\x88\x11\x1e\x74\x86\xbe\x57\x4c\x28\x8c\x70\xb0\xe7\x6b\x34\x99\x5b\xbb\x5d\x48\x63\xbd\x4f\x0f\x43\x78\xe9\x76\xc6\x4e\x7b\xf9\xcd\x55\x3e\x09\xe3\xf7\xd2\x6d\x1a\xe2\xf6\x08\x0c\x61\xc6\x08\x01\x0a\x23\x4c\xda\xe4\x09\x1e\x30\x8f\x73\xe1\x2d\xf3\x1e\x78\xc0\x5a\x9c\xde\x49\xf3\xe6\xbb\xcc\x26\xbb\xa3\x82\x71\xe5\x95\x89\xf7\xfc\x64\x08\x0c\x61\xc6\x08\x01\x0a\x23\x9c\x08\xb7\x2e\x23\xe5\xed\x55\xab\xd0\x68\x39\x5f\xae\x72\x95\x4b\x48\xcc\x2e\x3a\xff\xf4\x5a\xf4\x76\x55\xc8\x04\x2d\x07\x91\x1c\x02\x43\x98\x31\x42\x80\xc2\x08\xc5\x84\x7d\x44\x68\x8a\x84\xc7\x5a\x48\x28\xcf\x2f\x89\x0a\x25\x67\xf7\xb5\x0b\x0b\x7b\x5d\xe6\x0e\xbc\xb5\xf4\x1a\x5a\x28\xc2\x4d\x10\xcc\x18\x21\x40\x61\x84\x34\xf7\x83\xc9\x2e\x34\x2b\x77\xe1\x85\x82\x87\x26\x77\x8d\xa9\x25\x64\x43\x5a\x3f\x7e\x69\x90\x54\xce\x65\xfd\x25\x76\x9a\x40\x07\x81\x21\xcc\x18\x21\x40\x61\x84\x27\xf0\x58\xde\x72\x6d\x50\x1a\x4d\x3a\x6b\xbd\x7d\x5e\x7e\xa6\xba\x95\x6d\x2a\x4f\x89\xcd\xa3\xf8\xa3\x50\xb5\xea\xca\x43\x61\x08\x81\x21\xcc\x18\x21\x40\x61\x84\xd4\x94\x56\x67\xec\x8b\x7c\x3a\xf4\x64\xae\x1e\x61\xff\xfb\x6a\xfd\x7c\x59\x3a\xe3\x06\x41\x0f\x74\x71\xfb\x0f\xbd\x07\x83\xb6\x22\x02\x43\x98\x31\x42\x80\xc2\x08\xbf\x5c\x1f\x11\xa1\x9b\xb9\x49\xf8\x68\x2e\x82\x62\x76\x56\x69\xc1\xff\xd0\xd9\xdf\xe7\xf0\x83\x22\xf3\x1a\x48\xf3\x6c\x6c\x54\x55\x10\x18\xc2\x88\x11\xd6\x52\xfe\xff\xc5\x54\xf7\xf6\x9c\x7f\x13\xfb\xf6\xa0\x47\x37\x6b\x12\x60\x72\x74\x67\x14\xbc\x23\xf0\x8e\x4c\x4f\x5e\x9f\xbc\x93\xae\x41\x53\x4e\x04\x79\xbc\xff\xfe\x4c\x96\xbc\xdc\x63\x88\x3a\xdb\xfc\xb9\xf1\x49\x8a\xa5\x1e\xb1\x12\x3d\x73\xd1\xae\x6d\x07\xbf\x81\x14\x0d\xa1\xb5\xad\xe3\x73\xd3\xfb\xa2\xab\x52\x4d\x34\x7d\x4f\x1e\x9d\xc3\x7f\x19\x10\x55\xef\xcd\x90\x70\xd9\xfc\xd9\xdd\xfb\x8f\x4e\x97\xf3\x50\xb2\x9b\x08\xd9\x67\x95\xfc\x37\xfa\xdf\xe8\x7f\xa3\xff\x8d\xfe\x37\xfa\xdf\xe8\x7f\xa3\xff\x2f\x45\x23\xf0\xff\xb3\x66\x20\x7c\xdf\x98\xa7\x98\x37\x66\xa2\xa4\x6a\xb2\x66\xe9\x55\x82\x07\x39\x37\x3d\x17\xf8\x5a\xae\x51\xbe\xca\xb8\x6c\xea\xf0\x3d\xfb\xdc\x8c\x41\xe5\xbe\xa8\x7b\xc7\x4b\x0a\x52\x1f\xef\x69\x0a\xb6\x67\xf2\x50\x70\x6c\x22\xa8\x4a\x18\x83\x9a\x8f\x29\xcb\x94\x75\xb9\xd5\xb9\xf5\x38\x4a\x4b\xc3\x04\x78\x30\x01\x5e\x90\xb4\x74\x26\xfe\x7f\x36\x7a\x30\x1e\x7e\xb0\x0c\x7e\x20\x12\x29\x4b\xd8\x25\x2d\x2d\xbd\xef\xc5\xc6\x75\x29\x76\xf1\x8e\x74\xd1\x56\xc0\xaf\xb8\x1f\x4e\xc2\x31\xdf\xa3\x05\xb6\xa5\x0d\xc9\x3f\x7a\xd7\xbb\xf1\x5c\x92\x9b\x8b\xdc\x17\x9d\xb0\xbe\x2b\x71\xf4\x03\xd1\xe8\xe0\x03\xba\x8a\xd2\x39\xbd\x37\xec\x99\xea\x57\x47\x67\x38\xfa\xc5\x44\x5b\x6a\xc4\x6e\x6b\x9c\x0d\x52\xc4\x3b\x8a\xeb\xb6\xf0\x14\xf1\x96\xfe\xe7\xdf\x20\x69\xe9\x20\x69\x69\xc3\xff\xec\x85\x82\x89\xf0\x83\x65\x8e\xef\xff\x19\x74\xea\xb0\xd5\xa1\xf9\xd3\x0f\x39\x06\x08\xc0\x48\x5c\xf0\xd7\x4b\x6a\x4f\x56\x6f\xad\xdb\xce\x87\xff\xce\x52\x99\x68\x76\x5b\x6c\x0b\xbc\xf2\x9f\xe5\x82\x65\x02\xf7\x0f\x1b\xe0\x53\x4f\x90\xfc\xd7\xeb\x7a\x95\xfa\xc8\x33\x86\x56\xeb\x98\xab\x8a\x05\xe9\xb1\x71\xef\xfa\x0a\xde\xa5\x51\x57\x8d\x7a\x2b\xec\x0d\x7b\x50\x2e\x58\x86\x78\xff\xb0\x4e\xa3\x19\x26\x16\x0e\xbc\xac\xb9\x8c\x3d\x7f\xee\x9d\x60\x89\x69\x6c\x29\xbd\x5a\x12\xe1\x4b\x25\x89\xcf\xcc\xd7\x79\xc5\x70\x6b\x6f\xd8\x83\x72\xc1\x32\xf8\xfb\x87\x15\xbf\x13\x2c\x33\x17\x28\x17\x7f\x82\xef\xb0\x97\xf3\x58\xc9\x53\xa6\x6f\x4b\xba\x5f\xca\xd3\x9f\x12\x49\x47\x0d\x47\x66\x49\x3f\xdf\x1b\xf6\xa0\x5c\xb0\x0c\xe1\xfe\x61\x6f\x7a\xf6\x9c\x54\xec\x26\x24\xa7\x8a\x15\x32\x6b\x3e\x8a\x5f\xbc\xa2\xc1\x54\xa8\xf3\xb6\xd0\xf5\x3b\xcf\x7b\x9f\x6b\xb2\xf9\x25\x7b\xc3\x1e\x94\x43\x0d\xfb\x58\xd8\xf1\xb3\xf4\x4d\x8f\x86\x4f\xe6\xb4\xaa\x8d\xe4\x27\x0a\x59\xb4\x24\x57\x87\x3f\x6f\x5e\x3d\x19\x4a\x79\x3a\x52\x6a\xb7\x29\xd0\xf0\x3f\x9b\xe2\xff\xf7\x64\x68\x84\x2d\x79\x99\x48\x05\x9d\x4e\x31\xa9\xe9\x31\x20\x4f\xd2\xbc\xdf\x6b\x15\xcb\x87\x0a\xf3\x07\x25\x3c\xae\x53\x10\x4f\x3f\xb6\xf7\x1f\x3e\x28\x87\x9a\x0c\x77\x5e\x0b\xa8\x9d\x99\xeb\x4c\xbb\x47\x4b\x3e\x82\x97\xc9\xcf\x27\x58\xca\x4b\xf1\xf2\x2e\x5e\xb7\xcb\x09\x5a\x5f\x91\xe3\x81\x87\xf6\x86\x3d\x28\x87\x9a\x0c\x2f\x2f\x7e\x36\xb5\x0c\xdd\xee\xbc\x52\x15\xf7\xc0\xd3\xf0\x2a\x29\xd5\xc3\x9b\xd3\x6c\xae\x39\x19\x89\x77\x7e\x04\x5d\x7a\xa5\x3d\xbd\x37\xec\x41\x39\xd4\x64\x60\x33\x30\x65\x38\xdd\xba\xf8\x38\xf8\x04\xe3\x26\x71\x08\x93\x89\x92\xd3\x15\xee\x71\xf0\xb1\xaa\xf7\xf5\xe2\x32\x35\xf5\x19\xd2\xbd\x61\x0f\xca\xa1\xbe\x35\xe6\x2f\x4a\xb6\x8d\x44\x05\x9a\x1e\xd2\x70\x8f\xef\xdb\x96\x5f\x95\x1e\x78\xe2\x03\xc9\x2e\x5d\x23\xfe\x7a\x8e\x3c\x41\x44\x2d\x7b\xc3\x1e\x94\x43\x0d\x4b\x91\xa6\xbb\xbc\x1d\x35\x49\x95\xea\x72\x98\xf4\xb9\xf8\xdd\x0e\x4d\xcf\x3a\x7b\xb2\x59\x1d\x22\x9f\xd5\x58\xb9\xeb\x47\xc4\x5e\x05\xfa\xfd\x9f\x49\xc3\x1f\xf0\xac\xf0\xfb\xf1\x28\x9a\x13\xf5\x6a\x2c\x6d\x1a\x75\xf1\xa7\xfb\x65\xd5\x38\x06\x8f\x18\x3d\x6a\x23\x38\x5b\xf6\x91\x32\x08\xc3\x1a\x84\x21\xfa\xff\x05\x00\x00\xff\xff\xd2\x59\xd1\x40\x43\xd9\x10\x00") + +func fixtures_assetsCarDevnetCarBytes() ([]byte, error) { + return bindataRead( + _fixtures_assetsCarDevnetCar, + "fixtures/_assets/car/devnet.car", + ) +} + +func fixtures_assetsCarDevnetCar() (*asset, error) { + bytes, err := fixtures_assetsCarDevnetCarBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "fixtures/_assets/car/devnet.car", size: 1104195, mode: os.FileMode(420), modTime: time.Unix(1624501759, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _fixtures_assetsCarForcenetCar = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\xdd\x09\x38\x55\x6b\xc3\xf8\xff\xbd\x10\x22\x44\x64\x2d\xc9\x90\x79\x9e\xc7\xca\x4c\x32\xcf\x53\x11\xb1\x43\xe6\x21\x43\x09\xb7\xb1\x92\x21\x43\x32\x66\x2a\x43\x49\x91\x29\x63\x52\x51\xe6\x99\xc8\x58\x64\x28\x2a\x64\xfe\x5f\x9e\xe7\xf7\xfe\x1f\x7b\x3f\xef\xba\x4e\x6f\xd7\x75\xae\x8e\x7d\xee\x3e\xf6\x1a\xf6\x5a\xf7\x5a\x4b\xdf\x73\x26\x07\xeb\xe9\xe6\xe6\xed\x05\x86\x78\xcd\xb8\x30\x90\x47\xd6\x0c\x01\x8b\x93\x72\x04\x43\x5e\x31\x72\xba\x5b\x91\xa7\xbd\xc5\xba\xcf\xd8\xab\x65\x49\x40\x93\xc3\x88\x52\x91\xe9\x06\x71\xfe\x6f\x92\x68\x7b\x1f\xac\xa7\x97\xa3\x9b\x2b\xf4\x82\xe0\xef\xfe\x40\x9c\x12\x06\x03\xcc\x58\xac\x3f\x9e\x5f\x4f\xf2\x7a\x6e\xa5\x4c\x3f\x28\x65\x28\xf2\x73\x6b\xba\xe6\x8b\x71\xfd\xfb\xf1\x41\x85\xf6\x9c\xe0\x8f\xd5\x76\x77\x43\x30\x0a\x20\x04\x63\xc6\x82\xf9\x87\x5f\xc1\xfb\x6f\x96\x03\x03\x79\xd0\xb0\x1c\xbd\x19\xc2\xc8\x31\x4a\x22\xc1\x42\x70\x7e\x3c\xb1\xa0\xbe\x36\x3d\x46\x3d\x59\xe5\xcf\x55\xad\x82\x7b\x99\x60\x25\xa3\xdd\x53\x01\x73\x60\xb9\xe6\xa8\x58\x67\xa6\xb3\x46\x15\x12\xad\x67\x8b\xe5\x7b\x5b\x7e\x56\xbb\x32\xb3\x8f\xca\x20\x12\xcd\xb3\xd6\x67\x6e\x27\x1d\x16\x3e\x30\xf4\x0b\x36\xea\x2c\xdc\x4e\x3c\xf9\x29\x8e\xee\xe5\xf3\x45\xe3\xd7\x6c\x39\xda\x17\x26\xe7\xd9\x87\x64\xa4\xdf\x56\xc9\xdc\xd0\x15\x3a\x30\xf4\x81\x70\xd0\xb3\x27\x63\x2c\x77\x8f\xb1\xd6\x6b\x31\xb5\xe8\xd6\x24\xf1\x0f\x29\x69\xb1\x7f\xa2\xb0\xb8\xdf\x42\x28\x54\xda\x71\x74\x8d\xc1\x26\xf4\x0c\xdf\x1a\x46\x15\x73\x68\x75\x12\xf3\x8e\xe0\x6f\xde\xf6\x23\x07\x15\x1b\x6f\xac\xb7\xa3\x0b\xd6\x4b\x54\x58\x44\x4a\x40\x58\x42\x40\x58\x82\x45\x58\x44\x56\x54\x4a\x56\x42\xc4\x5e\x07\xeb\xed\xeb\xe6\xe9\xe4\xa0\xe6\xe8\x8c\xb5\x75\x73\x74\xc5\x1a\xb9\x39\x61\x5d\xff\xff\x2f\x9d\xff\xf5\xa5\xa2\x8b\xdb\x35\x57\x6f\xaf\x5c\x27\x23\x37\x6f\x1b\x67\xc3\x6b\xee\xee\xce\xfe\x2e\xa2\xfc\xc2\xc2\xc2\xff\xf3\xcf\x15\x6d\x47\x57\xac\xa7\x97\x8b\x08\xbf\xf8\x7f\x5e\x74\xd6\xf3\x74\xf3\x76\xb3\x75\x73\xd6\xb2\xb9\xec\x95\xeb\xa4\x82\xf5\xc1\x3a\xbb\xb9\xbb\x60\x5d\xbd\x9d\xc4\xfe\x33\xca\x49\xed\x9a\xab\x9d\xa7\x8d\xa3\x97\xa3\xab\xbd\x93\xe8\x7f\x5e\xbf\xaa\xe6\x76\xcd\xd5\xce\xc6\xdb\xd1\xcd\xd5\x49\xe4\x3f\x2f\xdb\x6b\x63\xbd\xbc\x6c\xec\xb1\x7e\xea\x46\x0e\x8e\x5e\x2c\x8e\x5e\x2c\xde\x0e\x58\x96\x73\x58\x57\xac\x97\xa3\x17\x8b\x92\xb3\x9b\xad\x13\x8b\xdb\x95\x7f\xbd\xf8\x3f\x0b\xc1\xa2\x82\xb5\xc5\xba\x7a\x7b\xda\x38\x3b\x5e\xc7\xda\xb1\x18\x7a\xbb\x79\xda\xd8\x63\x59\xfe\xdf\xa2\x0b\x06\xfe\xdd\x26\x0d\x25\x3a\xb0\xa5\x7c\x0e\xf7\x54\x2e\x25\x25\xda\xde\xbe\xfc\xc3\x49\xdc\x62\xea\x74\xc3\xc8\x08\x85\x63\xb9\xa3\x63\x4b\x08\xb4\xc5\xbb\xfb\x7b\xe1\xc0\x50\xd5\xe7\x9d\x4d\x2c\x1d\x8b\x17\x02\x18\x2f\x37\xf7\x21\x67\xa5\x67\x16\xf2\x62\x6e\xd1\x79\xa6\xcf\x5e\x4a\x27\x7b\x3e\xf3\xba\x71\x92\xf4\xef\xc8\x10\x95\x3c\x6d\x72\xf6\xbb\x20\x44\x09\x63\x11\x36\xc4\x6b\x88\x81\x8c\x31\x94\x57\x1c\x9d\x85\x24\x85\x5c\xae\x39\x7b\x3b\x7a\x39\xda\x1f\xf8\xae\xd8\xfb\x0e\x99\x0f\xa5\x9b\xa2\xd6\xee\x2d\xc8\x5c\xd0\x97\x8f\xa0\xe8\xb2\x10\x32\x38\x2e\xe0\x78\x8b\xe6\xe7\xa3\x4c\x85\xab\x12\x18\x6d\x0c\x41\x03\x43\xb0\x51\x9e\x0b\x26\x1e\x83\xc1\xec\xab\xd8\xb0\x21\x5e\x83\x7d\x95\xe2\xdf\xaa\x8d\xad\xed\xfe\x66\x3f\x80\x76\x47\x9d\xcf\x71\x89\xa9\x7c\xdf\xcf\x41\xcc\x3d\xab\xe6\x37\xf4\x2e\xdc\x67\x40\xc2\x4d\x06\x4e\xdd\x05\x6c\x09\x3a\x23\x57\xf6\x3f\x74\x4a\x18\xe2\xb0\x21\x5e\xb3\x13\xfb\xd0\xf1\x7f\x43\x3e\x58\x4f\xc7\x2b\x8e\x58\x3b\x4f\xac\xbd\xa3\x97\xb7\xa7\xff\x01\xd1\xa3\x24\x91\x7c\x42\x2b\x9b\xd6\xf8\xed\x71\x8f\x56\x17\xfb\xf5\x55\x2e\x1b\xcf\x66\x1d\x86\x2b\x5f\xfb\xef\x25\x68\xd0\xfc\xa2\xf9\xb7\x48\x14\x36\xc4\x6b\xba\x0f\xd2\xfc\x1b\xf4\xfa\xf7\x16\x74\x77\xf3\xc5\x7a\x1e\xc0\xee\xdb\x6b\x6c\xd0\x37\x1c\xd3\xcf\xbb\x7c\xe4\x22\xdf\x76\xc7\xdb\xd7\xd7\x84\x7f\x39\xdc\x79\x7d\x8a\x4a\xfe\x44\x35\x79\xf0\xec\x4b\x8c\x42\x48\x88\x12\x86\x30\x6c\x88\x57\x77\x1f\x23\xfb\x37\x66\xeb\xe9\xe6\x7a\x70\xc5\x75\x8f\x0c\xda\xc5\xb7\xf5\x77\x1d\x45\x6e\x36\x39\xf5\x6f\x91\x34\x76\x86\xb7\x8d\x96\xfc\x3c\x1a\xd6\xd8\x77\x63\x87\xde\x1c\xa3\x10\xa2\x84\xb1\xfd\xc7\x55\x35\xae\xea\xfd\xae\x2c\xbb\xfa\x6a\x4b\xed\xf3\xc4\x97\xc9\x01\x09\x3c\xd1\x7e\xce\x5d\x3f\x36\x4b\x7b\x66\xf3\x06\x4f\xf8\x3e\x20\xdb\x5f\x30\x65\xcc\x1c\xc9\xff\xbe\x64\x2e\xfb\x9f\xa6\x03\xda\xe9\x29\x8f\x8d\xad\xec\xfb\x17\x1f\x0f\x3e\xfa\xc8\x78\xd4\x44\x7f\xf5\x2d\x93\x81\x25\x47\xc1\xb2\x59\xd3\x54\xbb\x47\xc1\xbb\x0a\x8c\x06\x86\xfd\xd3\x0d\x06\xa2\x57\x82\xea\xc1\xfb\x2b\x0c\x13\x36\xc4\xab\xbf\xcf\x1e\xf9\x7f\xac\xbf\x97\x37\xd6\xe5\xff\xb0\x53\xfe\x7b\x55\x1d\xda\xdf\x92\xf0\xbe\x73\x0c\xf7\xed\xd9\x78\x3a\x61\x0f\x2e\xed\x93\x97\xd5\x4f\x21\x56\x09\xd6\x2e\xb9\xa2\x99\x02\x6e\xd1\xd4\x2f\xd0\x97\xd9\xe1\xbc\x85\xe6\x25\x7b\xde\xb6\x79\x82\x0b\x02\xff\x5a\x69\x7a\xff\xbc\xd7\xde\x38\xff\xba\x3e\x62\xce\x2d\xfc\xe4\xf5\x4e\xc5\x1f\x52\x22\xf6\x72\x0c\x29\xdf\x5e\x72\x35\x08\x7f\x9a\x19\xee\xd6\x96\x75\xe2\xfc\xf7\xee\x00\xe1\x6d\x41\x47\x57\xc7\x83\x6f\xe6\x7e\x39\x33\xeb\x17\x7e\x64\x51\xa3\x3e\x51\x81\xab\x96\x47\xb5\x8d\x40\x89\xef\x4b\xbb\xbb\x1b\xe0\x9f\xaa\x11\xba\x4c\xb6\xfc\x6f\xc4\xee\x1f\x37\xa1\xb0\x6d\xee\x43\xc3\x3f\xdd\x77\xeb\x04\x76\x91\x9c\xa8\x46\xab\x6b\x46\x33\xe7\xcd\xa6\xea\x2f\x4f\x57\x7e\x5c\xe2\x8e\x64\x88\xc6\x68\x61\x78\x2e\x34\xc7\xcf\x2d\xda\x55\x76\x57\xfe\x6b\xb5\xeb\xff\xa3\x39\x49\xbc\x44\x9c\x6a\xcd\x10\x14\x14\xf3\x78\x44\x34\x87\x11\xeb\x66\xfa\x47\xe1\xf2\x22\x4d\xd2\x84\xcd\x21\xe9\xea\xa9\x0e\x8f\x7f\xbf\x37\x02\xbc\xcd\xe7\x89\xf5\xb5\xf1\xb4\x3b\xc0\xb0\x3f\x2f\x55\xb3\x79\x60\xe4\xbf\xd4\xfb\xc8\x8c\xf4\x65\x08\x03\x99\xe1\xb1\xf5\x9f\x21\x2f\xc3\xf3\x74\x56\xbd\xa4\x98\xee\x7c\xc3\x68\x63\x08\xa3\xbf\x52\x05\x3c\x88\xa6\x6a\xc3\x60\x30\x2c\xff\xbd\xd2\x71\xbf\x72\xf8\xbb\x83\x46\x24\x50\xc2\x60\x21\xbc\x43\x07\xe6\xe0\x79\x11\xde\xbd\xda\x66\x93\x9b\xeb\x74\x44\xea\x8c\x86\x6c\xcc\x63\x4d\xc0\xf7\xf3\x43\x9a\x41\xb0\x5e\x5c\xba\x5f\x1f\xa9\xf1\x9d\x23\x3c\x7f\x37\x2c\x44\x21\x98\xe9\xbf\x56\x23\xce\x17\x67\xff\xee\x88\x04\x8c\x21\x6a\xc2\x7a\xa4\x94\x3e\xeb\x59\x4c\xa0\xdb\x77\x37\x6b\x93\x16\xf6\x84\x88\x45\x61\xf4\x83\xd3\xff\xfe\x6a\x30\xf4\x77\xc7\xab\x50\x25\x8c\xde\x81\xd5\x41\x75\xc9\x4e\xb3\xf2\x3b\xe9\x05\x4d\xb7\x0a\x89\xf4\x0b\x63\xed\xd6\x47\x7a\xd4\x04\xad\x5e\x5c\x9a\xa5\x9a\xd2\x48\xad\x90\xa5\xf8\x3f\xac\x39\xb1\xbf\x13\x43\x54\xf6\xe7\x3c\xe0\x5f\x7b\xa3\x02\xf7\xff\x7e\xc8\xfc\xef\x57\xbe\x42\x7f\x77\x04\x8d\x55\xc3\xb4\xec\x6f\xf1\xff\xf7\xdb\x39\x0c\x49\xd7\xc1\xdf\x95\x31\xc4\x0a\x78\xff\x49\x21\xc4\x0c\xc6\x10\x8c\x3a\xff\x6f\x93\x2f\x53\x0c\x61\xe3\xff\xf6\x3a\x04\x1d\x58\x2f\x25\xbb\x1c\xbd\x1f\x2a\xbe\x15\xe8\xb2\x0f\x1b\xdd\x7d\x1e\xac\x6e\x72\x64\xc7\xc4\x40\xf9\x96\xf5\xe4\xa5\xb4\x8c\x43\x96\xad\x9d\x07\xf7\xbe\xfc\x5d\xac\x31\xb7\x32\x97\x88\x82\xff\x87\xfe\x00\xc3\xa4\xf8\xfc\xb3\x56\xc4\x74\x57\x44\x8e\xbc\xee\x24\x1f\x02\xe6\x91\xab\x6b\x17\xfe\xce\x0c\x51\x26\xf8\xd7\x3a\x54\x3c\x78\x0c\x76\xe7\xa8\x67\xa4\x6a\x30\x4a\x7d\xf8\xe2\xeb\xb2\xcd\x94\x4a\x68\x74\x0c\xdb\x03\xe6\xbb\x48\xb2\x11\x56\x71\xba\xbe\x6b\xc9\x53\xee\xef\x86\x85\x11\x63\xa0\x50\x75\xe8\xff\x9f\x7f\xfe\xeb\x2c\xa0\x04\x20\xe5\xbf\x5b\x84\x10\x65\xe8\x5f\x6f\x6d\xff\x4f\x85\x92\xe0\xad\x6c\x18\xf7\xac\xf6\x9f\x7f\x13\xfd\xbb\x73\x1b\xd8\x3f\xe8\x13\x1d\xda\x3f\xf2\x1f\xe6\xfd\xbb\xf3\x18\x50\xc2\xd8\xfe\xf7\x6e\xf6\xaf\xf3\xd7\x7f\xbf\x32\x45\xf0\x77\xa7\xb3\xd8\x03\xab\xbd\x93\xb9\x2b\x68\xf7\xa5\x60\xe1\xa5\x90\xbc\x92\x0c\xb6\x33\xd4\x6a\x1b\x1f\xb9\x93\x57\x7c\xfb\xc9\x64\x2d\x14\xcb\x4b\x14\x2e\x28\x28\x1c\x18\x7c\x1c\xbe\x7e\x29\xe0\xbd\xe2\x9f\x7e\xbf\xf2\x3b\xeb\x31\x37\x33\x24\x6f\xf3\x85\xb8\xb6\x45\xea\xf5\x59\xa4\x0d\xee\x8c\x3a\x8b\x28\xec\xef\xa1\xff\x87\x0f\xdd\x81\xa1\x43\x9e\xdb\xbf\x2c\x15\xb1\xac\xd1\xba\xd1\x18\x21\x97\x8e\xda\x97\x4f\xdb\xf9\xa5\x0b\x5e\x2d\x16\x43\x9d\x03\x53\xbf\xe7\xb8\x0f\x0c\x7d\xed\xfd\x3c\x73\x30\x4a\x2b\xe6\x96\xe1\xdd\xac\x50\xa9\x5b\x84\xc7\x64\xf2\xce\x1d\x35\x7a\xad\x6a\xc7\x8c\xfc\x3e\x15\xef\xff\xe8\xe0\x39\xc6\xa6\x9d\xe1\xab\x80\x4d\xe3\x33\x17\xd2\x82\xa8\xd1\x99\xaf\x4c\xb9\xe9\x71\x94\x92\x95\x66\xa2\xab\x51\x7b\xf0\xe8\x87\x25\x19\xd2\x62\x98\xe3\xc0\xf8\x1e\x97\xda\x32\x1f\xbd\x28\x01\x16\xcd\x67\x41\x75\x52\xfa\x84\x4e\x65\x3c\x29\xaa\x7c\x96\x4b\xcd\x85\x06\xd6\x5a\x4a\x3c\xdf\x15\x56\x6d\xfe\x6e\xb5\x45\x29\x61\xec\x94\x30\x76\xc1\x6b\x66\x9c\x18\x76\x52\x88\x86\x65\x31\xcb\xda\x76\xe8\xa4\x0b\xf1\xae\x10\x73\xb6\xa8\x5f\xe0\xe0\xfc\x53\xe1\xb6\xcc\x27\xe7\x3d\xb1\xc3\x0f\x43\x5e\xd7\xd0\x5c\x0a\x26\x61\xd8\x3f\xb2\x10\xb0\xac\x71\xff\xdd\xba\x06\xc1\x36\x7f\xb7\xe6\xc2\x88\x09\xa0\x50\x75\x0c\xe6\xdf\x17\x6b\x07\xaf\x1e\x25\xa6\x14\x47\x5c\x7c\x28\xf4\x27\x18\x92\x3c\x9a\x4d\x14\xd4\x88\x8c\x15\x2b\x09\xc4\x5f\x3b\x06\x59\x96\x88\x56\x3f\x55\xca\x0e\xb6\xfc\xbb\x71\xfb\x7a\xf0\x7f\xe9\xd4\x0c\x0d\xd5\x02\xf7\x12\x23\xc9\xf7\x22\x9c\x3a\xaa\xcf\x5f\x1a\xa5\xa4\x9c\xfd\x40\x28\xac\xdd\xef\xb3\x7b\x56\xa3\xcc\xe9\x7e\xb0\xe4\xdf\x8d\xdb\xd7\xf7\x7f\x11\x61\x82\x81\x32\xd1\x03\x88\xf7\xef\xf6\x82\xfd\xa1\x77\xa0\xbf\xdb\x0d\xc2\x0e\x11\x20\xc4\x0a\xa1\x2a\x84\x18\x0c\x26\xe4\xc0\x22\x4c\x19\x16\x48\x9c\x79\xf5\x80\x21\x6b\x93\x53\x32\x5b\xc6\xfb\xc2\x72\xdf\x7b\x96\xea\x5c\x0f\x5a\xaa\xaa\x99\x40\x27\x7f\x75\x99\x03\x43\xb5\x38\xf3\xaf\xf8\x7e\x68\x3a\xb2\xc7\x1e\x90\xb2\x2d\x31\xb0\x7c\x4c\x98\xaf\x60\x4a\x15\xab\xdb\xf5\xfa\x5b\x53\x44\xde\x88\x61\x70\x2c\xf9\xdf\x99\xa1\x2a\x7b\x7b\x7b\x7b\x0f\x58\x0e\xd8\x87\x3d\x6e\x5e\xcb\x37\xdc\xeb\x10\x32\xff\x24\x75\x22\x86\xb5\x0a\x73\xd9\x70\xa0\x03\xfe\x62\xf7\xf9\xa9\x4a\x0f\xcd\x5c\x7f\xd4\x81\xa1\xba\xbc\xe4\x61\xa3\xd1\x14\x74\x4c\x44\xd7\x1d\xbc\x9e\xbe\x4d\xba\x90\xba\x23\xe3\x91\xe5\x18\x4e\xa7\x68\xbf\xb2\x79\x5e\xfe\xcf\x81\xa1\xae\x3b\x1f\xb0\x94\x72\x15\x91\xc3\x43\xcf\xcf\xff\x69\xab\x88\x6b\x8b\x19\x13\x0e\xd4\x10\xb5\xd6\xd3\xff\x28\xab\xf1\xc9\x6a\xe2\xc0\x50\x8d\x0c\x77\x52\x27\xf3\x9f\x3a\x0f\xda\x6d\x7a\x28\x3f\x29\x13\x8b\x5b\xa9\xb1\xbe\x99\xc0\x10\xba\x7c\xf1\x1b\xd6\x6b\xcc\x24\x3c\x30\x74\xb8\xf1\x0d\x6f\xd8\xce\x47\xde\x2f\xb2\x5e\x8d\xa7\x28\xd3\x67\x27\xc0\x44\xc5\x55\xd9\xce\x87\x01\x6d\xf4\xcf\xa4\x57\x9f\x98\x1d\x18\x1a\xe1\x5e\x14\x43\x65\xb2\x53\xa7\x3a\xf8\x83\x6e\x85\x37\xc3\x7e\xcc\x0a\xb3\x28\xff\x39\x54\x32\x55\xf2\x61\x21\xdd\x0c\x69\xf2\x81\xa1\x23\x6b\x52\xbf\x74\xd4\x3f\x91\xdb\x3c\x7a\xe5\x91\xf8\xf8\xf7\x53\xe3\xb3\x51\x55\xc5\x2a\xbf\x68\xbc\x69\xfd\x9d\x05\x3b\xc4\x19\x0e\x0c\x75\xbb\xb7\xf5\xe7\xf6\x44\x56\x49\xf7\xca\x1f\x03\xf6\xe7\x0d\x0b\x62\xa5\x25\x6f\x13\x45\x1c\x53\xc6\x38\x85\x87\x18\xef\x0b\x89\x1c\x18\x1a\xd3\x95\x1f\x9f\xad\xad\xe9\x9a\x30\x20\xfe\x92\x79\xea\x75\xc4\x1b\x09\xea\x5f\x46\x4f\x9f\x60\x83\xc2\x52\xcf\x6e\x93\x3b\x86\x1e\x18\x6a\x1b\x32\x6d\x9d\xfa\x90\x46\x72\xeb\xb7\x50\x66\xd7\x39\x9d\x7b\xb2\xf4\x5b\x45\x1d\x96\xcb\xa1\x63\x0d\xaa\xe2\xed\x71\x0b\xd3\x07\x57\x56\x79\x63\x4b\x8a\x41\xf9\xd3\xbb\xb4\x8a\x5a\xcb\xcf\xf3\x29\xa8\xa7\xfb\x07\x57\x2f\xd4\xb6\xf2\x0d\x34\x9a\x66\x44\x3d\xb2\x3a\x30\xd4\x66\x5d\xc8\x6b\x71\x4e\xb7\x70\xa2\x71\xac\xe1\x4c\x14\x07\xab\x06\xbd\x77\x77\xcc\x62\x6f\xd3\x3a\x8b\x4e\xab\xd8\x6c\x93\xc9\x81\xa1\x3c\x6f\x1b\xe7\x9b\xc8\x1d\x48\x44\x30\x37\x9f\x87\xa6\xf2\x4d\x5a\x7c\xfb\xc3\x99\x2b\x27\xb1\xc6\x45\xb0\xa3\x71\x31\x28\x2c\xf8\xc0\xd0\xe5\x89\x97\xc4\x17\x6d\x2e\x6d\x6d\x0e\x5a\x33\xb7\x8f\xcd\xb8\xd8\x17\x91\x7d\xb1\x51\xbc\xbe\x6a\x53\x2e\x20\x16\x1d\xf7\xf5\xcb\xc1\x0b\x9f\xe9\x78\x8d\x13\xad\x98\xa2\xb7\x29\x0f\xee\x4b\x45\xaf\xde\x60\xb7\x27\x7e\xa4\xd6\x4e\x10\xdb\x16\x07\x8e\x29\xdd\x9c\x57\x3a\x30\x34\x71\xbb\x3f\xb3\x73\xdc\x3c\x6b\x29\xf3\xa5\xe3\xda\xb2\x70\x9b\x11\x61\xc1\x39\x6c\x51\xfc\x85\x05\xf6\x5b\x4d\xe2\xdc\x5f\xaf\x1f\x18\x6a\x19\xd5\x7b\xe8\xd9\x8a\x04\x12\x43\xf3\x75\x82\x53\x6f\x3e\x6b\xe6\x9e\xb5\xef\xe7\x98\x46\xaa\x0f\x22\x4a\x94\x3a\x79\x2c\x3b\x07\x86\x7e\xd5\x3b\x5b\x6f\xd1\x83\xb0\xde\xfe\xdd\x79\x7e\xe3\xdb\x4d\xf1\x3f\xe1\x53\xf6\x21\x32\x3d\xea\x77\x6e\x1b\xe8\x94\xfb\x7d\xa2\x3b\x30\x54\xbd\x58\x2c\xc1\xd4\xe2\x26\x45\x49\x29\x2b\xed\xdd\x6b\x0f\xf6\xd6\x0d\x78\x34\x68\x93\x64\x89\x9e\x97\x87\x1c\xeb\x34\x3d\x2b\x78\x60\x68\xc6\xa0\xc6\xf5\xca\xc1\xb5\x07\x3a\x57\x2c\xbe\xd2\x33\xa4\x3d\xec\xc1\x26\xae\xdc\x33\x15\xde\x5e\x2b\x8f\x64\xbc\x74\x95\xe7\xc3\xc1\xa9\x7e\x30\x21\x91\x33\xd1\x8f\xa9\x90\x87\xae\xd4\x77\x84\xfb\x5e\xe5\x8d\xa6\xbd\xc3\x0c\xb5\xb1\x25\x46\x8e\xa7\x85\xee\xe6\x0c\x1f\x5c\xac\x35\x9b\x82\xba\x92\xef\x57\xd8\x45\xf5\x06\x97\x06\x83\xee\x3d\xdf\xa8\x66\x6d\x19\xef\x39\x5e\x3a\x7e\xa8\x83\xf6\xf7\x72\xdb\x81\xa1\x6f\xbb\x5f\xf1\x79\xd7\xdf\x39\xb2\x3b\x1e\x2b\xb0\xfe\x79\x7a\x70\x20\xf0\xf9\x17\x56\xc1\x8f\x6b\x48\xb7\xe3\x53\x45\x06\xf6\x86\x03\x43\x57\x96\x6e\xfd\x68\x52\x10\x0d\x30\x0e\x7f\xf1\xcd\x2a\x30\xba\x5e\x52\x6f\xc5\x5e\xf8\xe4\xe9\x13\x87\xef\x52\xe5\x90\x15\xfc\x3c\x77\x60\x68\xb0\x6e\x43\x89\x00\xf8\x8c\x89\xb1\x5c\x77\x6f\x60\x69\x27\x67\xe4\xe8\x55\xb1\xea\x68\xce\x19\xd8\xcb\x52\x32\x95\xda\x59\x39\x30\xd4\x3c\x7e\x70\xb6\x55\x76\xdb\xf5\x6e\xc8\x28\x57\xbd\xce\xed\x36\x2b\x2f\x71\xb2\x8d\x00\xf7\xcb\x83\x3b\xa3\xaf\x3c\x1b\x02\xc3\x0e\x0c\x6d\xb9\xf5\xe7\xdc\x75\xb0\x8d\x61\x4b\x0e\x4e\x91\x2e\x3c\x7b\xcd\xb3\x78\x8e\x31\x45\x8b\xb5\x3e\xef\x50\xe8\x1b\x9f\x59\xba\xa1\x03\x43\x97\x32\xb6\x17\x67\x94\x7e\x50\x0f\x13\xb8\x68\xf4\x4b\x0a\xbc\x08\x2f\xe7\x29\xba\xec\xf5\xd8\x75\xa6\x3e\xcf\xe2\x81\x69\xfc\xc1\xf9\x76\x9a\x83\x47\x21\x5f\xf6\x76\x5b\x37\x3f\xb9\xb0\x5d\xe5\x5e\xee\xe9\xb5\x57\x64\xb2\x3c\xf7\x3e\x11\x8b\xa7\xb5\xe9\xb4\x6c\xa9\x1e\x18\x5a\xf1\x47\x9a\x65\xd3\xe0\x99\x78\x79\xfc\xe8\x5d\x33\x9b\x36\x82\xe0\x42\x85\x80\xf5\xa2\xd0\xf4\xe1\xc9\x38\xc0\xa5\xfe\xab\xe8\xc0\x50\xbe\x1d\xf9\xa7\x97\x31\x65\x55\x0a\x1f\xa9\xc4\x22\x6f\xee\x89\xeb\x27\x57\x92\x6e\x92\x69\xe4\x25\xdc\x74\x8d\x1b\x95\xb3\xdf\x3b\x30\x54\xc5\x39\xff\x81\xe4\xb4\x6e\x05\xff\x4b\xe9\xad\xdb\x12\x14\xbf\xad\x6a\x5f\xdb\x1d\xad\x39\xe1\x19\xaa\xf3\x73\x4e\x7e\x48\x93\x2b\x78\x9c\xe6\xef\x8e\xae\xff\x3e\x20\x07\x3f\x60\x89\xc6\x90\x0c\xf1\x9a\xf1\x60\xa0\x90\x29\x42\x30\x47\xc0\x32\x97\x71\xa2\x59\x86\x34\x6d\xfe\x06\x8f\x64\xac\x1d\x4f\x71\x80\x1a\x55\x58\xbe\xf6\x7c\x5f\x71\x0b\x9d\xee\xc0\x5c\xcd\x37\x2e\x80\xc1\x30\x60\xe8\xf3\xa9\x15\xd4\x31\x04\xbf\xa7\xf6\x4f\xbf\x4a\x18\x48\x41\x01\xa3\x10\x0d\xe1\x42\x5f\xe8\x13\x03\x48\xb4\x7d\x41\xd0\xab\xce\x32\x2f\x4b\x2f\x77\xad\xeb\x98\xd6\x9c\x0c\x5f\x8a\x50\xe6\xe9\x47\xee\xd5\xd2\xee\x00\x42\x83\x08\x70\x21\x81\x9f\xe1\x5e\xa7\x78\xb2\xe3\xb7\xef\xc9\x9e\x61\xcf\x3f\x27\xef\x6f\xdf\x39\x3c\x6e\x42\x64\xf7\xb2\xbd\xf9\x59\xc6\xb1\x0f\x82\x80\x00\x0d\x22\xc4\x85\x5c\xfd\x4e\xf9\x36\x3b\x45\x66\xa9\x19\x1d\x47\xee\x5f\x27\xb0\xa6\x6d\xa7\x15\xb9\xea\xdf\x7f\x33\x2d\x9f\xb6\xa6\xbf\x49\x9e\x13\x10\xa2\x41\x44\xb8\x10\x97\x62\x91\xfe\xf0\x99\x1f\xb7\x9f\xb8\x51\xf7\xc4\x8b\x5d\xbe\x5e\x33\xd5\xd6\x22\xd0\x41\x44\xe2\x45\xc4\x22\xf7\x67\xfe\xf9\x51\x40\x84\x06\x1d\xc2\x85\x4a\x16\x1f\x7d\xd3\x16\xc0\xe4\xf4\x70\x4d\xdc\xeb\x14\x56\xd7\x0e\xcc\x0c\x4e\x33\xe9\x96\xc9\x19\xfa\xac\xfa\xea\x64\x73\xd7\x15\x70\x08\x0d\x22\xc6\x85\x76\x3a\x20\xda\x12\x82\x47\x57\x98\x8e\xbc\xf5\x6a\x11\x99\xf8\xae\x7e\xd3\xbd\xfe\xdc\xa1\x66\xac\xf2\x9d\x27\xec\xcf\x36\xcd\xcf\x03\x62\x34\x88\x04\x17\xa2\xd2\x37\x8d\x0c\x28\xb6\xb2\xde\x90\x4c\x6e\xb5\x97\xb0\x6d\xd0\xf0\xb8\x27\x5e\x4f\xab\xe7\xd1\x35\x46\xaf\x1d\x5f\x73\x8d\x13\x90\xa0\x41\xa4\xb8\x50\xbd\x8a\x94\x63\x46\xbd\xfe\xf4\xcf\xd1\xcc\x5b\xa7\xdc\xc3\x86\xf2\xbe\xdb\xe4\xa9\x35\x93\xce\x05\xc6\x31\x57\x0d\x89\x25\xe8\x03\x52\x34\xe8\x30\x2e\x34\xe8\x43\xe0\x98\x22\xd2\xfa\xfa\xe4\xa0\xa8\xe5\x42\x35\x7b\x31\x77\xb7\xa4\x1d\xa7\xc6\x70\xf9\xd2\x53\x15\x6d\x59\x0f\x5b\x15\x70\x18\x0d\x22\xc3\x85\x3a\x64\x7b\x3e\x05\x0a\xfa\x9f\x2c\x20\x52\xe0\x07\xdc\x5c\xe3\xc1\x92\xe5\x8d\x85\x46\xae\x8f\xb0\x3f\xdd\x3d\x6e\x48\xef\x29\x02\x32\x34\x88\x1c\x17\x5a\xee\xd4\x39\x25\x26\xf7\x3d\xdd\x65\x66\xa2\x9b\x4a\x45\xb5\xfe\x69\x4d\x62\xa5\x54\xe3\x46\x01\x71\xf8\x1d\xc3\x5f\xa9\xef\xc5\x00\x39\x1a\x74\x04\x17\x3a\x1c\x12\xb3\x7c\x9e\x1d\x3e\xc2\xfa\x6e\xf8\x5a\x9b\x26\xf3\xb7\x2f\x67\xcb\x4a\x06\x5c\xc4\x24\x3c\x96\xd9\x7b\x43\xc3\x3c\x61\x70\x04\x0d\xa2\xc0\x85\xac\x88\x82\xf9\xb4\x38\xa9\x38\x59\xa2\xcb\x65\x8d\x83\xab\x68\xd2\x9f\x1e\xb5\x5b\x52\x8f\xd7\x63\x3d\x5e\x19\xb1\x24\x7d\xec\x02\xa0\x40\x83\x28\x71\xa1\xbb\x43\x47\x4a\xd8\x0d\x38\x8e\x52\x3d\x88\x79\x68\x6a\xf3\x44\x26\x24\xae\x45\xd9\xf9\x57\xf1\xeb\xdf\xe7\x05\xa7\xce\x6c\xce\xab\x03\x4a\x34\x88\x0a\x17\x72\x94\xfb\xfe\xeb\xfb\x5d\x70\xcb\xef\xce\x8c\xcf\xf1\x67\x0d\x94\x0f\x89\x8d\xe5\xe9\x5f\xe5\xa8\x3b\xb9\x0b\x82\x11\xaa\x5a\x09\x40\x85\x06\x1d\xc5\x85\x7e\xfd\x54\xaf\xf8\x76\x45\xac\xc9\x4d\x95\x33\x2e\xdc\xfb\xe1\x55\xf5\xfb\x33\xcf\x85\x76\xbf\xbb\x32\x46\x97\xf1\x6b\x97\x86\x4a\x81\xa3\x68\x10\x35\x2e\x14\x4a\x5e\x23\x77\x3d\x56\xb0\xc7\x20\xa1\x26\x48\x79\xf7\x73\xee\xaa\x0f\x48\xf9\x25\xd3\x61\x90\x6c\x76\x69\xe1\x83\x48\xb6\x07\xa0\x46\x83\x68\x70\xa1\x3e\xe3\x23\x37\x2d\x48\xaf\xdc\x65\x62\x28\xed\xa7\x3a\x59\x75\xd4\xe6\xf4\x1d\x12\x9e\x5b\xa9\x2a\xef\x8f\xc3\xc2\x7e\x7b\xcf\x45\x00\x0d\x1a\x74\x0c\x17\xfa\xd6\x5a\xee\x32\x56\xb3\xe4\x73\xfc\x81\xc7\x70\xcd\xdd\x56\x27\x9d\xa7\x9c\xf0\x88\x9c\xce\x9d\xfb\x94\xc8\x7d\xd2\x9c\xdf\xb2\xe0\x18\x1a\x44\x8b\x0b\xc9\x1b\x1c\x9f\xd7\x20\xff\x68\x37\xba\xd8\xc1\x40\xc0\x99\x22\xfe\xb2\x7e\x80\x22\x84\xd4\xfb\x8b\x06\x7d\xd9\x5d\x61\xd1\xab\x0e\x80\x16\x0d\xa2\xc3\x85\x8c\xb7\xce\xdd\xaf\x35\xf9\x38\x92\xfb\xe0\xd3\xe6\x94\xca\x59\x09\xab\x86\xbb\x04\x30\x8d\xae\xef\x03\x0c\x8d\x72\xaf\xb6\xd7\x69\x40\x87\x06\x1d\xc7\x85\x46\x49\x9b\x62\x26\x07\x49\x0c\x53\x68\x94\xf5\x0d\x5d\xe6\xdd\x98\x0b\x18\xef\x32\xbd\x79\x4c\x32\xae\x12\xaf\x43\x1f\xf9\x41\x17\x1c\x47\x83\xe8\x71\xa1\xf5\xc3\x1a\x36\x4f\x98\xc4\x9e\xc8\xec\x1e\x6e\x98\x60\xd8\xa0\xd0\x35\xa4\xcd\x6a\xa0\xaf\x8b\x3a\xb7\xd1\x81\x8d\xaa\x88\xd7\x05\xf4\x68\x10\x0c\xe3\x4a\x1f\x30\x0d\x97\x8e\xd6\xeb\xca\x63\x66\x68\x3e\x6a\x3c\xa2\x74\xf9\x9d\xb2\x90\xd3\x80\xed\x4b\x98\x0e\xdc\xbb\x79\x83\xc3\xf3\x0a\x80\x61\x54\x0a\xc1\xa5\x9c\xa2\x33\xa6\xe7\xf2\x88\xb6\x5a\x13\x6a\x0c\x3a\x2d\x3b\xd7\xb5\x99\x35\x9f\x6e\x69\xcf\x56\x8d\x3e\x1c\xd7\xfe\x03\x01\x32\x00\x23\xa8\x14\x03\x2e\x75\x91\xa7\xd7\x33\xc6\x2a\x61\xab\x5f\xed\x87\x77\xec\x9f\x11\xe1\xc6\x5b\xdf\xb2\x5b\xdb\x8c\x6e\x9c\xd4\xcc\x93\xe5\x4b\xb2\x11\x07\x30\x03\x2a\x75\x02\x97\x3a\x9d\x97\x15\xf3\x23\xa1\xa7\x9e\x29\x87\x20\x5e\x4c\x60\x61\x50\x2a\xfb\x53\xfc\x37\xce\xe7\xea\x73\x9e\x58\xf2\x20\x82\xa1\xab\x00\x3e\x81\x4a\x31\xe2\x52\x14\x2d\x46\x16\xa7\xf5\x63\x6e\x2b\x71\xb7\x73\x06\x87\x97\x5f\x7e\xde\x90\xbf\x66\xf8\xc1\x69\xb8\xf9\xd2\xe1\x39\xf5\xe3\xea\x9a\x00\x66\x44\xa5\x4e\xe2\x52\x19\x86\x2e\xf5\x3b\xd1\x86\x6f\x47\xbf\xea\x19\x99\x4c\x56\xfd\x4a\xc2\x94\xf8\x48\x9c\x8d\xf5\x7b\x2b\xdf\xb2\x56\x41\x5b\x4c\x06\xe0\x93\xa8\x14\x13\xde\x27\x38\x4e\x46\x34\xd9\xf3\xeb\x67\x9e\x6f\xf2\xbc\xcc\x85\xef\xc3\x6c\x9e\xe4\x8b\x70\x18\x12\x06\x73\xe7\xd5\x74\x32\x25\x6d\x3b\x00\x98\x09\x95\x62\xc6\xa5\xb2\x8e\x28\xb8\xbf\xa8\x3b\x39\x9e\xe7\x71\x59\x4f\x97\x9c\x95\xbc\xb2\xdb\x5e\x2a\x3d\xe5\x63\xe1\x8c\x76\xee\xc7\xf3\xf3\xa5\x67\x01\xcc\x8c\x42\xc5\x1e\xfb\xbb\x6b\xd2\xff\x4c\xb0\x60\x16\xdc\xef\xad\x19\xdb\xf3\xa1\x0c\xea\xb9\x3f\x7b\x6c\xc8\xf7\x0a\x7b\x79\x44\x4c\xc2\x21\xe7\xe5\xba\x8a\xd5\x99\x60\x7b\x72\xd5\x1f\xc7\xaf\x02\x98\x05\x75\x31\x58\x71\xa9\x23\x73\x3f\xcf\x7e\xa4\x78\x35\x6a\x38\xf2\xbd\xbf\xb6\xad\xe3\xf7\x05\x4e\xfd\xed\xeb\xbb\x2a\x37\xa3\x4b\xd9\x04\x88\x64\x5b\x2d\x01\xcc\x8a\x4a\x9d\xc2\xa5\x66\xc2\xda\x1d\xed\x7b\x44\x94\x4a\x59\xc9\x59\x5b\x44\xb2\x4d\x7a\x4f\x8b\x9e\xf7\x7c\x95\xea\x61\x65\x26\x35\x34\xb9\x40\xae\x0b\xe0\x53\xa8\x14\x1b\x2e\x55\xd8\xf1\xe9\xe6\x71\x7f\x57\xf7\x78\x8b\x1a\x3e\xc9\xb5\x05\x1d\x3e\x55\x7b\xa2\x33\x81\xb9\x4f\xad\xc9\xae\xbf\xb7\xe4\xbb\xc3\x02\x60\x36\x54\x8a\x1d\x97\x62\x3b\xb3\xf9\x9a\x21\xa0\x91\x2e\x50\xe7\x26\x52\xaf\x46\x9d\x2a\xec\xce\xb4\x73\x03\x61\x7f\x22\x64\x25\x71\xfe\x05\x8b\x28\x05\x80\xd9\x51\x29\x0e\x5c\x8a\x7d\xf9\x50\xca\xdb\xa2\xe7\x71\x49\x9f\xe9\xa7\x76\x7c\x5f\x34\xb5\x59\x51\xfe\xf0\xd4\x17\x8c\xd4\x2c\xba\xb8\xc8\x9a\x25\xac\x0c\x60\x0e\x54\x8a\x13\x6f\x8e\xdc\xfd\x76\x37\xd1\x47\xff\xf4\xb7\xb1\x1f\x46\xdd\x4a\x6b\x4f\x68\x5f\x2b\x11\x71\x59\x3f\x7a\xc4\xfe\xe1\x73\xb2\x47\x8b\xe7\x45\x00\x73\xa2\x52\x5c\xb8\x14\x5d\xc4\x04\xb7\x5d\x1d\x96\xed\xc7\x80\x70\x4e\xe3\x0f\xc3\xa8\x02\x49\x1f\xcf\x45\xda\xac\x0a\xfa\x3c\xca\xeb\xcb\xaf\x34\x6d\x01\xcc\x85\x4a\x71\xe3\x52\x84\xac\x3f\x42\x12\xd5\xa7\x22\x4e\xdc\x67\xbe\x33\xe3\xc7\xb5\xa3\x5b\xfe\x78\xb2\x2e\xe4\x4d\x3c\x55\x94\xf0\xbb\x4c\x33\xbb\xcb\x00\xe6\x46\xa5\x78\x70\xa9\x5b\x59\x05\x04\x44\x87\xf2\x14\x34\xb8\x33\xf3\x48\x77\x0f\xd1\x65\xdd\x51\xd5\x0f\x4f\xa1\x5c\x77\xd6\x0c\x7e\x76\xa1\xcd\x11\x01\x30\x0f\x2a\xc5\x8b\x4b\x5d\xab\x7a\xc3\x5d\xe6\xa1\xce\x44\xe7\x70\xe1\xcc\x26\x1b\x0b\x59\x5c\xb1\x41\xb9\x8a\xe3\x24\xcd\xbd\xe5\x37\x7a\xd4\xd5\x97\x39\x00\xcc\x8b\x4a\xf1\xe1\x52\x6d\xc9\x51\x6b\x0b\x59\xdf\x6f\x30\xdf\x0f\xf1\x7f\x62\x74\xe4\xf7\x19\x77\x3b\xda\x29\xf3\x23\x13\xfd\xf9\x81\x57\xa9\x43\x7f\x9a\x02\x98\x0f\x95\xe2\xc7\xa5\x16\xaf\x0b\x8d\xfe\x0e\x0e\x3f\xfb\x1e\x3a\xf1\x2c\x67\x59\xff\xc4\x6d\xe2\xdf\x9f\xce\x6e\xfb\x5c\x4a\xbe\x7a\xb6\xc2\xf1\xde\x2e\x3f\x80\xf9\x51\x29\x01\x5c\x8a\x46\x68\x91\x3a\x58\x4a\xfa\x47\xea\x4b\x8d\xa4\x1c\xf6\xb0\xfb\x42\x33\x49\x57\x7e\xf5\xbe\xce\xfa\x38\x32\xb5\xdc\x3c\xef\x4b\x03\x60\x01\x54\x4a\x10\x6f\x6f\xaf\x9b\x8d\xfe\x64\xd9\x22\x54\xb4\xb8\xf1\xd6\x22\x40\x61\x22\xb3\xcc\xb4\x67\xe4\xa7\x74\x30\xd1\x5d\xb3\x72\x8a\x0a\x21\x6a\x00\x0b\xa2\x52\x42\xb8\x14\x36\x3b\x5c\x3b\xd1\x6d\xc8\xb9\x0c\x5b\x85\x59\xec\x99\xb3\x0e\xeb\xdc\xdb\x7d\x58\x17\xd1\x74\xa9\xda\xed\xa2\x5e\xa9\x3b\x1d\x80\x85\x50\x29\x61\x5c\x2a\x73\x51\x48\x3a\xc5\x40\xe5\xe4\xfa\xd9\x3e\x7e\x65\xca\xd1\xd7\xcb\x4b\xd2\x65\xed\x24\x66\x63\xb4\x5c\x66\x6a\x6d\x5a\xb3\x5c\x00\x16\x46\xa5\x44\x70\x29\x39\xc5\x95\x2e\xaf\x0b\x79\x3f\x19\xc2\x0d\x5c\x2d\x96\xf4\x7c\xcd\xac\x68\xac\xe2\x06\xb4\x08\x96\x54\x6f\xe5\x8a\x51\x3d\x24\x01\xb0\x08\x2a\x25\x8a\x4b\x61\x04\x27\xf4\x83\x0a\xfc\x7c\x10\x8d\x4f\x59\x6a\xdf\xb7\xe8\x07\x79\xa5\x77\xe8\x39\x3b\xdf\x5e\xc8\x56\x22\xa4\x52\xd0\x50\x05\xb0\x28\x2a\x25\x86\x4b\x5d\xfe\x9c\xdf\xd3\xc7\xf4\x96\x76\x54\xf3\x02\x9f\x90\xb9\x71\x6d\x61\x98\xf0\x59\x31\x5d\x11\x9b\x73\xd7\x18\xe5\x3f\xbe\x3b\xe7\x04\x60\x31\x54\x4a\x1c\x6f\x26\x26\x28\xd6\x97\xab\x76\xb5\xb4\xbf\xf9\x7a\xc1\xc0\x63\xda\x64\xc9\x55\x1a\xf8\x6b\xcb\x6a\x59\x85\x73\xb9\xc5\x27\x99\x61\x3e\x00\x8b\xa3\x52\x12\xb8\x94\xca\x34\xf1\x0b\x4b\xbf\xf9\xd9\xa3\x6c\xb9\x04\x2b\x60\x34\x0e\x6e\xe2\x23\xa7\x6d\x59\x63\xf0\xbd\x51\x9b\x71\x06\xba\x43\x01\x60\x09\x54\x4a\x12\x97\x4a\x9f\x08\xd6\x5f\xeb\x72\xa0\x66\xbf\x62\xc3\x7d\x64\x34\x98\xf8\x36\x29\x1f\x31\x0b\x71\xfe\xb3\x4b\x91\x9f\x2b\xf8\x0b\xad\xb1\x00\x96\x44\xa5\xa4\x70\xa9\x91\xbe\xb5\xb7\xce\xcc\x22\xeb\xf2\x7a\x1e\xa6\x8f\xdf\x15\x31\x7e\x48\x26\xac\xda\xd1\x99\x5d\xbc\xaf\x29\x67\x12\xdb\xfd\x85\x08\xc0\x52\xa8\x94\x34\x2e\x35\xf0\x53\xcd\x2d\x41\xf4\x1d\xe1\x6c\x60\x7a\xdf\x92\x4f\xe8\x5d\xab\xd3\x1d\xd7\x0f\x07\x95\xf8\xd2\xb0\x8e\x15\xdc\x51\xbb\xca\x09\x60\x69\x54\x4a\x06\x97\x2a\x0f\x26\x9f\x7e\x55\x35\x3e\x3e\x41\xb4\x11\x27\xf4\xaa\xd2\x83\xeb\x44\xea\xcc\xc5\xcd\x19\x75\xca\xd4\x95\xb9\xc6\xf9\x02\x1b\x00\xcb\xa0\x52\xb2\xb8\xd4\xeb\xca\x0b\x81\x3c\x31\x55\x42\x7c\x51\x1b\xc4\x8d\xf1\x62\x8f\x48\xef\x8b\x59\x96\x4d\xcd\x1c\x75\xe6\x1d\x1c\x15\xf9\x99\xeb\x0c\x60\x59\x54\xea\x34\x2e\x15\x9e\x51\x1f\xb9\xe1\xe0\x7f\xf3\xe7\xb6\xfa\x90\x94\xd7\x90\xd4\x9a\x8c\x3e\xd7\xc6\x1c\xb9\x98\xd0\xb9\x0f\xa1\xb7\xe1\xdd\x43\x00\x3e\x8d\x4a\x9d\xc1\xa5\x56\xaa\x2f\x76\x8b\x7c\xc9\x5b\xb8\x33\x19\x9f\x96\x9d\x25\xd8\xc2\x28\xc2\x7b\xd8\xd4\x41\xdc\x27\x21\xb2\xf0\x85\xbc\x48\x91\x34\x80\xcf\xa0\x52\x67\x71\x29\xbe\xe4\x0b\xd4\x26\x2a\x74\x4c\x05\x3b\x5d\x61\x73\x74\xcc\x2f\x8d\xbb\x04\xd2\x1d\x0f\xbb\xa5\x14\x68\xb7\x4a\x39\x12\xbc\x11\x04\xf0\x59\x54\x4a\x0e\x97\x32\xf1\xba\xd7\x69\x24\xfa\x32\x45\x19\xcc\x5b\xfa\xd3\x8b\x23\x24\xf6\xb1\xc7\xa8\xef\xf6\xfa\xa8\x74\x7d\x54\xd2\x7a\x3f\x77\x15\xc0\x72\xa8\x94\x3c\x2e\x45\x4b\xda\xb0\x2b\xdc\xe7\xce\x12\xad\x14\xa3\x1e\x97\xa7\xe3\xaf\xf9\x5e\x65\xb0\xe9\x67\x7c\xb2\x3e\x4c\x42\xb4\x16\x54\xee\x02\x60\xf9\x7f\x98\x90\xfd\xd3\x9d\xff\x03\x13\x32\x05\xdc\xef\x2d\x74\x54\x90\x48\x56\x42\x4a\xdb\x4c\x9e\xf5\xe5\x57\xaf\x1e\x23\xb0\xa3\x7c\xac\xcd\x62\x21\xcc\x45\x71\xe9\xec\xf6\x73\x53\x11\x00\x2b\xa0\x2e\x86\x22\xde\xd9\x2e\x6d\xf5\xe7\x25\x8e\x7b\x96\xa5\x57\xe5\xbd\x27\x64\x2c\xab\xe3\xf3\xe7\x6a\x9d\x2a\x7b\x23\x0b\x4e\x10\x76\x03\xec\xa6\x14\x80\x15\x51\x29\x25\xbc\x8b\x0c\x7a\x67\x7d\x3a\xac\xdb\xd9\x77\x5f\x6c\x16\x63\x04\x28\xe1\x87\xc5\xca\x6e\x55\x55\x4f\x83\xcf\x9f\x3f\xde\xf4\xe9\xad\xdd\x09\x00\x2b\xa1\x52\xca\xb8\x94\xf4\xc4\x61\x0f\xa2\x27\x0f\xeb\x33\xef\x79\xe5\x1f\xcf\xc3\x46\xf3\xb4\x5e\x74\xac\xa3\xac\x2f\x4e\xbf\x7e\xe6\xdd\x0b\x1d\x01\x4d\x00\x2b\xa3\x52\x2a\xb8\x54\xb5\xd0\xe3\xab\x04\x29\x8d\xb4\x48\x79\xc8\xd0\x90\x74\xdb\x8b\xf4\xbc\x99\x3a\x59\x27\x7e\xd1\xab\xac\x03\x34\xba\xe2\x8f\xdd\x01\xac\x82\x4a\xa9\xe2\x52\x3f\xad\x7b\xf6\x0c\x8d\xdf\x48\xe7\xbe\x3f\xce\x23\x5b\xfa\x51\xeb\xe6\xed\xa5\x31\xa6\xbc\x14\x72\x66\xb6\xaa\x25\x0b\x93\x27\x24\x00\x56\x45\xa5\xd4\x70\xa9\x98\xf4\x4b\x81\xe3\x6a\x32\xfd\x67\xbe\x34\x17\x3c\xbb\x9a\x67\xf6\x2a\x83\xa3\x97\x30\xf1\x04\xdf\x8c\x80\x29\x31\xf5\xc3\xc3\x18\x00\xab\xa1\x52\xe7\x70\xa9\xcd\xc5\x89\x57\xb2\x2e\x25\x05\x39\x29\xc7\xda\x1c\x65\x92\x2a\x97\x8e\x15\xe6\x5f\x52\xf0\xcf\x94\x49\x55\x2b\xf0\x3a\xbd\xca\x0e\xe0\x73\xa8\x94\x3a\xde\xbd\xb4\xf2\x00\x35\xab\x4a\xc1\x0e\xe5\x75\xdd\xb4\x6c\xa3\x5f\x03\x61\x09\x0a\x29\x5d\xde\xb9\x6c\x56\x2c\xcb\x66\xd3\x62\x4d\x66\x00\x56\x47\xa5\xce\xe3\x52\x55\xe5\x3d\x35\x63\x04\xbf\xa3\xe5\xfc\xfc\x3c\xbe\xcf\xa5\x15\x33\x9a\x38\x89\xff\x52\x9b\xea\x3d\x6a\x73\x7b\x4d\xe8\x94\xb9\x3e\x80\xcf\xa3\x52\x1a\xb8\x94\xf6\x78\xc3\x08\xa3\xcd\x91\x96\x67\x69\xf5\xcd\x0d\xd4\x24\x29\x7b\x22\x27\x33\x82\x17\x7a\x42\xcf\x2a\xa7\xf3\xdd\xe8\x59\x39\x01\x60\x0d\x54\x4a\x13\x97\xb2\xbd\x43\xb5\xbd\x4a\xc1\xd4\x99\xe4\x55\x2c\xed\xa4\x3c\xdd\x26\x6e\x27\x57\xff\x56\xc0\x3d\x95\x5d\xc3\xf2\x54\x6e\x14\x95\x18\x80\x35\x51\x29\x2d\xbc\x5b\x61\xca\xdf\x0a\x0c\x27\xa3\x43\xce\xd5\x91\xa5\x67\x32\x05\xe8\xc4\x8d\x52\xbe\x49\x0d\xb2\xb1\x79\x6e\x2b\xb6\x9c\x8d\x5d\x3a\x0f\x60\x2d\x54\x4a\x1b\xef\x36\xef\xa8\xff\x83\x6e\x2e\x67\x91\xbd\xd3\x7f\xd2\x29\x5f\xf4\xf8\xa5\x85\x7e\x13\x20\xda\x98\xca\x4b\x36\xbd\x23\x62\x31\xa4\x47\x03\x60\x6d\x54\x4a\x07\x97\x4a\x83\x13\x8a\x4e\x0b\xf7\x11\x58\xbe\x3b\xaa\xf8\x3a\xb6\xef\xc7\x92\x3f\x36\x76\xdd\xba\xb0\x9e\x80\x36\x22\xf4\xe7\xd8\x05\x23\x00\xeb\xa0\x52\xba\xb8\x94\x20\x39\x77\x48\xc9\xe2\xea\xf7\x25\x9f\x6c\xfe\x8b\x7f\xa6\x24\x87\xe5\x0e\x3d\x6a\xb0\x69\x1e\x24\xed\x7c\x34\xde\xc9\x64\x27\x09\x60\x5d\x54\x4a\x0f\x97\xd2\x17\x6b\xf9\xc3\x75\x2f\xae\x88\xb3\xff\xf7\x5a\xd0\x97\xc9\x0e\x52\xd2\x2f\x5d\x35\xd3\xbc\xbe\x5c\xa5\x9a\xee\xf7\xf3\xb6\x45\x00\xac\x87\x4a\xe9\xe3\xdd\x37\xa6\x08\x9b\xd1\x62\xf3\x35\x4c\x1a\xad\xa9\x79\xcd\x75\x31\xd8\xe7\xd3\x22\x2d\x5d\xc3\x64\xb7\x97\x4b\x76\x05\xf4\x63\x41\x1e\xc0\xfa\xa8\x94\x01\x2e\xe5\xa1\x50\x1f\xae\x2d\xc3\xe2\x39\xd9\x92\x6d\x25\x4a\xf2\x3c\x80\xec\x17\x2b\xf4\x5b\xa9\x15\x73\x7d\x77\x8f\xa3\x44\x54\xc9\x02\xc0\x06\xa8\x94\x21\x2e\xf5\xb6\x33\xd0\x4e\xfa\x16\x60\x67\x11\x8d\xeb\xda\x34\xc8\x7e\xab\xc2\xb0\x5d\xd0\x1d\x4a\x1e\x59\xaf\x4e\xe8\x1c\x59\x69\x28\x0b\x60\x43\x54\xca\x08\x97\x7a\xb1\xb8\x10\xa0\xff\x6b\x2c\xdc\xf3\xb1\x61\x67\x20\x6b\xc2\xef\x25\xf9\xde\x18\xd1\x98\x84\x73\x55\x1a\xe6\xaf\x4a\x1f\x59\x88\x00\xd8\x08\x95\x32\xc6\xa5\xc4\xde\x48\x8b\x4e\x6e\x88\xa5\xf1\x21\x73\x65\x13\xf7\x1f\xf1\xa4\x4b\xea\x2b\x67\x0a\x6e\xde\x1a\xf9\xce\x73\x5d\x64\xa0\x97\x09\xc0\xc6\xa8\x94\x09\x2e\x95\xbb\x16\x3c\x1b\x6b\x1f\xd7\x69\xf9\x6d\xba\x9b\x6a\xf1\x5e\xb4\x1c\x51\xcf\xc7\x33\x97\x4f\x8b\x90\x7c\xca\x26\x0f\x4c\xf2\xd6\x02\xb0\x09\x2a\x65\x8a\x4b\x09\x93\xb8\x1e\x8d\x50\x32\xba\x24\xd2\x25\xd0\x96\x70\xe3\xf5\xce\x54\xf3\x63\xa2\x55\x7f\x9a\x53\xad\x1d\x9b\xc2\x0e\xde\xc3\xe6\x00\x36\x45\xa5\xcc\x70\x29\xad\x8e\xa6\x87\x27\xeb\x26\x92\x95\xa7\x69\x92\x4b\x65\x2b\x0c\x6e\x65\x7f\x6a\x3d\x5f\x79\xff\x86\x95\xaa\xce\xd9\x32\x89\x1c\x0c\x80\xcd\x50\x29\x73\x5c\x0a\xb4\x56\x64\xba\x7b\x1e\x16\x69\x19\x70\xf0\x70\xd3\xf0\x58\xb3\xff\x2a\x42\xcb\xf6\xa2\xe9\xe9\x9a\xf1\xe1\x9f\xef\x25\x96\xec\x00\x6c\x8e\x4a\x59\xe0\x5d\xd6\x4a\x27\x2a\xef\x11\x97\xfe\xa9\x69\xbd\xf6\x12\x32\x57\x6d\xa5\xeb\x62\x0e\xc9\x39\xbe\xf9\xd2\xfc\x73\x0e\x68\xd0\x03\xd2\x00\xb6\x40\xa5\x2e\xe0\x52\xc3\x34\x26\xd7\x1d\x03\x3f\x0a\xaa\x87\x6f\x2b\x64\xfe\x91\xf8\xb3\x67\xbf\xde\x1f\x1b\x65\x78\xaa\x5d\x4c\xc1\xc1\x6f\xed\x14\x23\x80\x2f\xa0\x52\x17\x71\xa9\xd2\x4b\x26\xf9\x3f\x98\xbe\x0f\xc6\x6c\xf8\x1e\xdb\x79\x5b\x9d\xeb\x1b\xe7\x75\xbe\x58\x6e\x73\x21\x8b\x4b\xed\x88\xb7\xd7\x02\x11\x80\x2f\xa2\x52\x96\xb8\x14\x42\x9b\x73\x9b\x5d\xe7\x2d\x41\x99\x6a\xcf\xb2\x86\xcd\x38\x5f\x83\xff\xef\x6b\x73\x92\xa9\xa5\xc4\xbc\x9f\x0a\xf4\xeb\xc3\xd9\x01\x6c\x89\x4a\x59\xe1\x52\xb1\x47\xc9\xa0\x27\xb7\x7b\x8d\x86\x88\x4e\xc6\xad\xa5\xaf\x4a\x44\x07\x27\xdc\x59\x65\x3a\x52\xf5\x7e\xf3\xb5\xf3\xae\x91\x94\x34\x80\xad\x50\xa9\x4b\xb8\x54\x57\x58\xbd\x5f\xf2\xef\xdc\xdd\x9e\xef\x97\xcf\xf2\x2a\x56\xf9\x1e\xdd\x9b\x06\xd9\xb9\x16\x13\x45\x62\x26\x15\x18\xe3\x31\x4b\x00\x5f\xfa\x87\x09\xd9\x3f\xfd\x7c\xc5\x81\x09\x99\x35\xee\xf7\xe6\x2e\x7f\xc6\xc6\x6e\x97\x5c\xb0\x35\xac\x4e\xa7\x51\x63\xda\xac\x3d\xfd\x39\xbe\xa8\x23\x19\x4b\xfb\xb8\x9b\x89\x7e\x78\xc2\x0e\xc0\xd6\xa8\x8b\x61\x83\x4b\x59\x9c\x67\x88\xdc\x6b\x88\xf9\x11\xc3\xad\xe9\xe2\xea\x37\xa0\xe9\x12\xcc\x18\xf5\xf1\xfc\x42\x31\xe9\xe7\xef\x25\xf1\xdb\x31\x87\x01\x6c\x83\x4a\x5d\xc6\x3b\xc0\xe5\x8f\x98\xf9\xc5\x2b\xb1\xd4\x0e\x1c\x63\xf8\x45\x9c\x42\x62\xde\x63\x2c\x25\x7c\x23\x49\xed\xd5\x1b\xfb\x63\xeb\x1f\x3e\xa8\x03\xf8\x32\x2a\x65\x8b\x4b\x15\xd0\x2e\x5d\x66\xd8\x50\xbe\x71\x67\x51\xc8\x6f\x7b\x74\xf1\x26\x59\x51\xe9\x0c\xf7\x50\xff\x63\xfd\x44\xdb\xf1\x3a\xef\x3c\x26\x00\xdb\xa2\x52\x76\xb8\x54\x4b\x97\x15\xaf\x5e\x80\x58\x61\x29\x83\xeb\xf3\x94\x77\xe1\xb4\x79\xd3\x9a\x8b\x93\x51\x9a\xc3\x06\xa6\x59\xc7\xa3\x34\x8a\x2d\x00\x6c\x87\x4a\x61\x71\xa9\x88\x6f\x0c\xfa\x0b\x6e\xee\x79\x9d\x3a\x75\x27\xb4\x67\xae\xa5\x4f\x62\x3d\x24\xe3\x79\x2e\x14\x0e\x9f\x7a\xff\x7c\xc3\xe9\x9c\x19\x80\xb1\xa8\xd4\x15\x5c\x2a\xb8\xa4\xaa\xd9\xbe\x29\xd0\xd4\xb3\x59\x78\xf8\x45\xce\x0e\xf7\xd0\x37\x87\xcf\xbc\x22\x64\x91\x69\x03\xef\xa7\x79\x75\x7d\x2f\x02\xf8\x0a\x2a\x65\x8f\x4b\x65\xaf\x15\x49\xd4\x83\x94\xfa\xe7\x41\x95\xfd\xae\xc2\xbb\xdb\xe2\x8d\x21\x74\x3f\x43\x07\x8b\x6b\x12\x4d\xe2\xce\x13\x57\xd0\x01\xd8\x1e\x95\x72\xc0\xbb\xd9\x76\xb7\xd0\x6f\xbc\xd8\x9b\xe4\xbc\x90\x44\xcf\xa2\x6b\x95\x7c\x80\xbe\x52\x21\x3f\xc6\x17\x10\x69\x6f\x52\x99\x20\xd4\x17\x01\xec\x80\x4a\x39\xe2\x52\xb3\xa9\xa7\x1f\x42\x77\xe5\xe6\x04\x5a\x74\x74\xb7\x49\x72\x66\xc7\x7a\x3e\xd6\x8e\x6c\x38\x85\x7c\x1a\x89\xdc\x9b\xe0\xb1\xd3\x02\xb0\x23\x2a\x75\x15\xef\xbe\xbd\xce\x43\xcf\xdb\x69\x93\x4f\x4c\x89\x86\x2e\x0d\x35\xe6\x89\x10\xda\xd6\x57\xe8\xdc\x77\x37\x90\x31\x3d\x1e\x24\x92\xdb\xe2\x09\xe0\xab\xa8\x94\x13\x2e\xd5\xe4\x51\xec\xc0\x96\xb1\x75\x58\x70\x82\xc0\x6b\x2a\x8e\x96\x89\x35\xe9\x72\x25\x07\xc1\xe8\x47\xc9\xae\x0a\x5a\x12\x27\xf8\x28\x80\x9d\x50\x29\x67\x5c\x4a\x3c\x5d\xb8\x63\x2e\x50\xb2\xe2\xf8\xc6\xd9\x97\xe6\xdc\x09\xfe\x70\x0b\xe4\xba\x2c\x73\x42\x0a\xce\x97\x13\xbd\x1e\xbe\x76\x11\xc0\xce\xa8\x94\x0b\xde\x2e\xaa\x28\x5c\xfd\x80\x41\xd2\xd8\xe0\x6e\x1b\x83\x0f\x96\x95\xe2\x5c\x5a\x63\xb1\xf5\xee\xcf\x6e\xa9\x52\xc6\x75\x0a\xcb\x9f\x57\x01\xec\x82\x4a\xb9\xe2\xcd\x57\x16\x42\xf9\xee\x34\x76\x64\xb9\x2c\x21\xcb\xfe\x23\x64\xe3\x23\xd3\xaa\x1b\x1d\x39\x4a\x25\xaa\x82\x4f\xde\x36\x91\xbe\x52\x01\xb0\x2b\x2a\xe5\x86\x77\x75\xee\xf5\xee\xf5\x45\x8d\xeb\x2d\xbd\x1a\xe6\xfd\xe4\xe7\xc5\x36\xa9\x26\x6e\x0e\x11\xb1\x8e\x50\xf8\x76\x75\xa9\xda\x9b\xf6\x5a\x03\xd8\x0d\x95\x72\xc7\xa5\x9e\x11\x19\x15\xad\xd3\x56\x6e\x33\xf4\x15\x81\xcb\xfa\xad\x9b\x21\xd7\x57\x42\x85\xd7\x67\x05\xfa\x9a\x95\x36\xd4\xd9\x65\x4f\x02\xd8\x1d\x95\xf2\xc0\x7b\x26\x58\x44\x10\x9b\x78\x2f\x20\xe2\xb8\x50\x72\x65\xdf\x9c\x95\x58\xba\xc7\x16\x63\xa0\x15\x73\x19\x59\xf4\xe9\x5f\xe6\x87\x0f\x9f\x04\xb0\x07\x2a\xe5\x89\x4b\xa9\x9d\x2b\xe9\x34\x69\x34\x26\x2a\x9a\x9c\xcf\x90\xd6\x64\x3a\x8f\x21\x29\x26\x37\x17\xf6\xf2\xe7\x9c\xee\x5e\x38\x34\x6d\xc7\x0f\x60\x4f\x54\xca\x0b\x6f\xc6\x59\x2b\x7a\xdd\x9c\xa2\xc5\x80\xf9\xe7\xa1\x43\x23\x3e\xed\xf2\x3e\x9b\x6a\x0f\x59\x49\xf3\x82\xa9\x3a\x04\x5d\x12\x4e\x9a\x53\x03\xd8\x0b\x95\xf2\xc6\xa5\x7a\xd7\xb9\xa8\x87\x16\x5c\x8a\x19\xc9\xfd\x09\x46\x48\x8d\xd7\xfc\x29\x38\x2e\xdb\xbe\x62\xd9\x13\x06\x86\xb5\x4d\x59\x8f\x60\x00\x7b\xa3\x52\xd7\x70\xa9\xa4\x3b\x04\x01\x7a\xab\x4e\x9c\x4b\x17\x9a\x25\xf5\xec\x46\x5a\x32\x52\x46\xf5\x8b\x2d\xda\xb6\xf4\xbb\xf8\x4b\xd4\x85\xdf\xf1\x03\xf8\x1a\x2a\xe5\x83\x4b\xf5\x78\xaf\x81\xd6\x70\x95\xa7\x6d\x22\x8c\xbc\x1e\x19\x2f\x69\xea\x69\x4a\x7c\x4e\x77\x15\x0d\x8a\x37\xe9\x05\x52\x45\x13\xc8\x00\xd8\x07\x95\xf2\xc5\xa5\x2a\xc2\xfb\x86\x83\x6c\x07\xb1\x83\x3e\x9f\x7e\x30\x4a\x1e\xdd\x7d\xb5\x6a\x01\xf4\x78\x09\xa8\x6e\xac\xcb\x09\xd0\x5f\xfb\xce\x0b\x60\x5f\x54\xca\x0f\x97\x1a\xaf\xb0\x72\xbb\x1b\x48\x15\xd7\x9b\x62\x4e\x2d\x2e\x9f\xc0\x74\xc8\x20\x63\x58\xb8\x45\xd9\xc6\x24\xb3\x39\x2d\x34\x29\xcc\x04\xc0\x7e\xa8\x94\x3f\xde\x1d\xfd\xe2\xf5\x73\x2d\x88\xde\x7b\x3e\x64\x63\x5e\x41\x61\xd5\x5d\xf0\x88\x59\xf3\xe9\xa2\xec\xf3\x9e\x1a\x46\x55\x09\x5b\xe6\xe2\x00\xf6\x47\xa5\xae\xe3\x5d\xc9\x1c\xda\xb0\x9a\x3b\x44\x75\x06\x09\x7c\x6a\xf5\x76\x81\x9d\x72\xef\x86\x18\x8f\xb3\xf4\x7d\x85\xd2\x72\x16\x8e\xc7\x73\xb6\x08\x80\xaf\xa3\x52\x37\xf0\x9e\x5f\x21\x27\xa5\x95\x02\x4e\x1c\xb7\x23\x79\x1b\x45\xf1\xce\xb5\x88\xc6\x3d\xeb\x90\x9b\x54\x00\xdb\x83\xf0\xac\x70\x47\x25\x47\x26\x00\xdf\x40\xa5\x02\x70\x29\xf7\xe6\xf2\x0e\xa6\x77\xc9\x98\x01\xf5\xdc\x5b\x5c\x6f\xf9\xce\x9c\x23\x7f\x91\xe8\x96\x5d\x31\x45\xf4\xab\xe4\x4e\xb1\xb6\x89\x28\x80\x03\x50\xa9\x9b\xb8\xd4\xea\x90\x18\x0f\xe6\x5d\xe6\xde\xd5\x95\x0b\x8c\x6b\x75\x65\x34\x72\x44\xb6\x9d\x4f\xdf\x2f\x95\xbe\xa7\x17\xad\x3b\x91\x4a\x7b\x15\xc0\x37\x51\xa9\x40\x5c\xca\xff\xe2\x0c\xe5\xc5\xda\x7b\x77\x85\x02\xcf\x9d\x1d\xe0\x6b\x22\xbb\x76\x53\x38\xd8\xfa\x7b\xc0\xa5\xba\x26\xaa\xaa\xaf\xd5\xcf\xec\x00\x1c\x88\x4a\x05\xe1\x52\x2e\xce\x4f\x29\x1d\x49\x8f\x75\xa8\xf2\x2f\x4e\x0c\x0d\x5b\xe9\x11\x8c\xb6\xf0\x73\xdc\x26\x10\x3a\x52\xcd\x33\x3e\x25\x46\xe3\x08\xe0\xa0\x7f\x98\x90\xfd\xd3\x4f\xb1\x1e\x98\x90\x05\xe3\x7e\x6f\x1b\xf2\x25\xb9\xf1\x2f\xbf\x6b\x26\x5c\xb3\xe0\xdb\x25\x92\x03\x66\xd3\x1f\x6c\x24\x17\xb6\x19\x43\x33\xdd\x73\xd7\xff\x6c\x8a\x03\x38\x18\x75\x31\x00\xde\x62\xb4\x24\x2f\x1f\x65\x34\xbe\x27\xa5\x18\x2e\x2b\x91\xf7\xb2\xcf\x91\x64\x2f\x86\xe1\x8f\x8b\x63\xe8\xec\xd5\x14\xff\xbd\x01\x57\x00\x03\x54\x2a\x04\x97\xea\xcf\x9c\x51\x77\x2e\x23\x0c\xf6\xa7\x73\x59\x68\xa4\xc7\xd0\x6d\x76\x0a\xcf\xd5\x52\x74\x64\xb5\xf9\xd6\x13\x77\x55\x0b\xd8\x01\x38\x04\x95\x0a\xc5\xfb\x41\xac\xb8\x61\x2d\xcf\x80\xf0\xa7\x19\xc0\x41\x8b\x6d\x85\xa3\xdd\xdd\xd3\xe6\x62\xf6\xab\x44\xa5\x48\x6f\xfe\x81\x1f\x41\x3c\x02\x00\x0e\x45\xa5\xc2\x70\xa9\xf6\x0f\x83\x9d\x8c\x9f\x3f\xeb\x70\xac\x47\x5c\x70\x67\x24\xa7\xb9\x7b\x45\xb6\xe4\x14\xa5\xcc\xbc\x2e\x56\xf0\xb7\xeb\xd3\x05\x12\x00\x87\xa1\x52\xe1\x78\x57\x51\xcd\x8f\xda\x08\x9f\x9a\x4d\xb4\xa8\x06\xb9\xdb\x51\x31\x6f\x5c\xd1\xa6\xd7\xcf\x7b\x68\xd7\x1a\x9c\x71\x67\x9a\x43\x49\xf8\x04\x80\xc3\x51\xa9\x08\x5c\xea\x69\xe4\x8a\xa4\x45\x3b\x87\xf3\xb7\xb1\xa7\x89\x8e\xd5\x66\x29\x66\xb2\x9b\xc9\x5f\x53\xf9\x6f\xb6\x23\x99\x71\x8f\x19\x74\xcf\x03\x38\x02\x95\x8a\xc4\xbb\x20\xd3\xcc\xf4\x9b\x7f\xf7\xe9\x9b\xe9\xd7\x0b\xfe\xa5\x32\x69\x8f\x4f\x6a\x97\x2d\xfe\x08\xe2\x19\xdc\x58\x70\xd2\xa6\x81\x93\xc4\x00\x1c\x89\x4a\xdd\xc2\xa5\xcc\x8e\xc4\x0e\xaa\x57\x49\xc8\xd5\x6d\x1b\xc0\x83\x03\x82\xd3\xeb\x3b\x41\x37\xe0\x48\x77\x1d\x3f\xf2\xf1\x3d\x42\xde\x3b\x72\x00\xbe\x85\x4a\xdd\xc6\xa5\xf2\x1c\x2f\x5c\x3d\x46\xd3\x39\x65\x3d\x4d\xf0\x75\xf9\x99\x6c\x56\x4f\xfd\x8c\xbe\x65\xf3\xca\xa2\x16\xab\xaa\xa5\x4d\xb9\x8c\x30\x80\x6f\xa3\x52\x77\x70\x29\x22\x6c\xcc\x19\x52\x89\xea\xc3\xa5\xe6\x86\x3c\xbc\x96\x57\x5c\xae\xde\x44\x12\x5e\xf2\xc4\xd4\x4e\x0d\x2f\xf0\xc9\x5d\x63\x33\x02\xf0\x1d\x54\x2a\x0a\x97\xe2\x71\x65\x77\x31\xeb\x51\xd1\x63\x76\xaf\x1b\x3d\xf4\x8b\xa1\x97\xd5\x8f\x79\x5c\xda\x89\x2f\xeb\xa7\xbe\xf3\xe5\xe8\x7a\x3d\x1b\x00\x47\xa1\x52\x77\x71\xa9\x8f\xbe\x9c\xd3\xc1\xe6\xd2\xb2\x2d\xca\x5e\x3a\x8f\x14\x7e\x05\xce\xff\x50\x6a\xcf\xeb\x7a\xea\x3c\x9c\xba\x54\x13\x40\x16\xc3\x00\xe0\xbb\xa8\x54\x34\x2e\xa5\xf8\x24\x22\xda\xa4\xa1\x70\xa8\xa8\xf1\x1c\x4f\x78\x8e\xdc\x66\x3e\x87\x9d\xf0\x86\x1e\xd3\xd8\xe9\x22\x93\x4b\x16\x7f\x10\x51\x00\x47\xa3\x52\x31\x78\x8f\x4b\x8e\x0a\x10\xc8\xae\xba\x64\xe6\xc4\x4c\xdf\x79\x32\xba\x3e\xd6\x43\xbe\xab\x9e\xad\xf7\xf6\x9a\x89\x78\xb1\x96\x81\x15\xb7\x21\x80\x63\x50\xa9\x58\x5c\xea\xf7\xce\xc9\x26\x8d\xb4\xf9\xad\xab\x3e\x53\x97\x0f\xa5\xdf\x66\xc6\x5a\x4b\xe8\x20\x37\xcf\x3d\x26\x7f\xb8\x46\x98\xd8\x22\xa9\x03\xe0\x58\x54\x2a\x0e\x97\x7a\x62\x77\x62\xf6\x52\xb8\x1a\xef\x48\xef\x0f\xd9\x87\x14\x3d\x7d\x99\x09\x1c\x64\x8f\xd2\xe6\x54\xc6\xeb\xb2\x8f\xae\x5c\xd4\xe5\x04\x70\x1c\x2a\x75\x0f\xef\x1e\x67\x67\x56\x08\xdb\xee\x4a\x67\xe0\x25\xb0\xfc\xce\xc2\xc3\xc3\x12\xbe\x7e\xd8\x5a\xc3\x8a\x51\x2f\x73\xe2\x96\xa5\xbf\x04\x2f\x80\xef\xa1\x52\xf1\x78\x8f\x77\x37\x1d\x82\x2e\x5a\x3a\xdd\x5c\x25\x5f\x54\x4f\x0b\xdb\x3d\x3b\xb5\xc0\xf3\x24\xa5\xf5\x66\x92\x3e\xab\x9c\x86\x4b\x23\x8b\x07\x80\xe3\x51\xa9\x04\x5c\x8a\xec\x67\x84\x55\x00\xad\x73\xcf\x59\x2e\x06\xfe\xcd\x8e\x4c\xf1\xdb\x54\xb1\xdc\xd8\xc6\x71\x99\xbb\xa3\x65\x4f\xe5\x92\xbf\xd3\x02\x38\x01\x95\x4a\xc4\x9b\xfa\xe8\x99\xdd\xf8\xf8\xb8\x26\x82\xaf\xf1\xa1\xf4\x45\xab\x1f\xfc\x1f\xbf\x68\x67\x3b\xbb\x8f\xd2\xd5\x4c\x05\xea\x44\xfc\x2a\x35\x07\x70\x22\x2a\x95\x84\x4b\xf9\x25\xd5\x78\xdf\x3d\x77\x41\xa1\x1a\xd2\x7e\x2a\xc1\xf4\x51\x42\xd7\xe3\x0f\xdf\x51\x43\xf9\xc4\x4a\x9f\xd9\x13\x55\x2a\xcb\x8c\x00\x4e\x42\xa5\xee\xe3\xdd\x14\xe9\x0d\x79\xd7\xc1\xc6\xef\x6a\xa5\x40\x3f\xf0\xfd\x6e\xd3\x55\x83\x4b\x6a\xc9\x67\x73\x42\x9e\x3b\x30\xd8\x04\x3b\x67\xbf\x53\x04\xf0\x7d\x54\x2a\x19\xef\x91\x65\xdb\xf1\x24\x03\x82\x8f\xf3\x77\x74\xed\x3f\xe4\x7f\xf0\xec\xcb\x91\xce\x97\xa6\xfe\xc2\x52\x9f\xfe\xfb\xe4\x62\xba\xb9\x36\x07\x80\x93\x51\xa9\x07\x78\xd7\x0c\x47\xbf\xeb\x33\x25\xb0\x93\x4d\x97\xa4\x8f\x5c\x72\x8c\x3c\x07\xf4\x56\xe6\xe4\xd6\x5e\x16\x7e\x95\xe9\x60\x9b\x1c\x1e\x83\x00\xfc\x00\x95\x4a\xc1\xa5\x92\x09\x92\x83\xaa\xce\x30\x88\x7e\x6d\x9a\x92\xef\x31\x5c\x6c\xfc\x22\xcd\xcb\x70\xc1\xcf\xfd\x59\x2c\x39\x79\xd6\xde\xdd\x26\x47\x00\xa7\xa0\x52\xa9\x78\xf3\x95\x17\x5b\x9d\x1b\xda\x37\xa1\xcb\x73\x73\xd5\x8e\x06\xc3\x63\xab\x83\x1e\x7b\x42\x7e\x5d\x11\x87\xb2\x7a\x9f\x87\xc6\xce\x8a\x03\x38\x15\x95\x4a\xc3\xa5\x2a\xe7\x83\x53\x1f\xeb\xf5\x2e\x0c\x54\xf5\x3b\x2a\x93\xef\x79\x6a\xd7\x44\x94\xf3\x29\x1f\x1a\x3b\x4b\x37\xbf\xfa\xe2\xf8\x37\x66\x00\xa7\xa1\x52\xe9\xb8\xd4\x05\xa3\x5d\x55\x6d\x0f\xcb\xd5\x82\x77\x0f\x52\x09\x27\x44\x8e\x1d\x9b\x91\x59\x96\x8c\xe3\xac\xca\x2c\x0e\xb3\x79\x1c\xf0\x4c\x16\xc0\xe9\xa8\x54\x06\xde\x07\x27\xf1\x8b\x87\x38\x55\x44\x95\x60\x9c\xdc\x19\xcd\xd0\x1b\x37\x16\xa5\x4d\x7b\xa6\x7e\x48\x0d\x1a\x8c\xbc\x28\xb1\x72\xa1\xf5\x04\x70\x06\x2a\x95\x89\x77\x5b\x6b\xe9\xbb\x57\x02\x8f\x4b\xa6\x88\x6f\xf1\x47\xab\x1e\xa2\x57\xc9\x5e\x96\x72\x74\xca\x34\x6e\x4b\xfe\x6d\x67\x0b\xd2\x99\x4c\x00\x9c\x89\x4a\x3d\xc4\xa5\xfa\x6a\xe8\x8a\x82\xd3\xe5\x8d\x90\xe7\xa3\x7d\x6e\xf4\x5f\xca\x3e\xd4\x2a\x3b\xf6\xf3\x51\x38\x9a\x4a\x45\x06\x45\xad\x0d\xf1\x01\xf8\xe1\x3f\x4c\xc8\xfe\xe9\xef\x0a\x1d\x98\x90\x65\xe1\x7e\xef\xda\xb4\xb7\x4f\xf9\x04\x93\xcc\x95\x7c\x09\xdc\x9b\x24\x62\x3b\xfa\x1e\xa6\xb5\x25\x1f\x55\x92\x8e\x65\x7e\x16\xfd\x87\x4c\x87\x1c\xc0\x59\xa8\x8b\x91\x8d\x77\x87\x7c\x92\xed\xb9\xee\x91\x84\x33\xd2\xa2\xc5\x06\xcf\x4a\x48\xd3\x78\x1f\x49\x48\x8a\x54\x60\x6b\x88\x2a\x9c\x78\xc2\xb8\x2b\xec\x00\x9c\x8d\x4a\xe5\xe0\x5d\x19\xf8\xf5\x17\xf6\x4d\xb1\xf4\x44\xdd\x0d\xcf\x30\x66\xa0\xaf\x39\xee\xd8\x52\xbb\x25\xbc\xb2\x72\x4b\xfa\xcf\x50\xe4\x13\x5e\x65\x00\xe7\xa0\x52\xb9\x78\xcf\x83\x03\xea\x5b\x98\x96\xb5\xbf\x98\x67\x3d\xcc\xd2\x1e\xdb\x1e\x78\xb0\x28\xc5\x4c\x15\x61\x48\xeb\x57\x49\xdc\x22\xc8\xbe\xa1\x01\xe0\x5c\x54\x2a\x0f\x97\x0a\x32\x97\xe1\xcf\x66\xd3\xfb\x13\x2f\x1a\x2c\xaa\x72\xa9\xae\x33\x83\x44\xdf\x41\xd3\xb3\xdd\xde\xb7\x83\x55\xa3\xc5\x62\xd4\x0a\xc0\x79\xa8\xd4\x23\x5c\x2a\x9e\xc8\x63\xda\x9f\x12\x33\xe9\x2a\x1c\x8c\xcd\xaf\xd3\xb5\xa8\xe5\x58\x21\x63\xfd\x39\x38\x3f\xad\x5f\x53\x59\xc2\x13\x45\x01\xe0\x47\xa8\xd4\x63\xbc\xb9\x1d\x09\x2f\x8d\xa2\xf7\xb3\x64\x3a\x2a\xbb\x0f\x7b\xd4\x8e\xd5\xf9\x3c\xa7\x53\x06\x08\xe5\xf8\x7f\x2a\x8d\x88\x4a\x6e\x06\xd8\x02\xf8\x31\x2a\x95\x8f\x4b\x7d\xb7\x57\xab\x32\xd3\x76\x38\x93\x73\xa1\xe6\x73\x49\x00\xd3\xf7\xd5\x93\xd2\x31\xea\xc5\xbb\x5c\x5a\x0e\xaa\x4c\x8f\xf7\xd4\x5d\x00\x9c\x8f\x4a\x15\xe0\x1d\x4a\x04\xa3\x86\x33\x24\x49\xad\xf8\x17\x59\xc6\x85\x3b\x1d\xe9\x0f\x91\xda\xb9\x1f\x17\x59\x5e\xca\x7a\x9a\xf2\x60\x19\xb9\x6e\x0b\xe0\x02\x54\xaa\x10\x97\x52\x3d\x67\xaa\x1c\xab\xe1\xc6\xa1\xe1\x98\xb7\x65\x20\xb1\x58\x55\x50\x3d\x74\xc4\x5f\x40\xcf\xa4\x73\xb7\x84\x5a\xbb\x9d\x44\x12\xc0\x85\xa8\x54\x11\x2e\x65\x59\xf8\xad\xe9\x79\x69\xbc\x46\x4d\xdd\xa2\x87\x7f\xa2\xa2\x74\xfb\xae\x72\x4b\x9d\x4d\xa7\x7c\x9c\x84\xd7\xfa\xb6\x42\x86\x02\x80\x8b\x50\xa9\x27\xb8\x94\x63\x8f\xa3\x33\xa3\xed\x69\x99\xf8\x80\x67\xa9\x7e\x02\xed\x83\x02\x8f\x32\x32\xde\x44\x5e\x60\x0a\x4f\xfd\x6d\xac\x7a\x73\xcd\x01\xc0\x4f\x50\xa9\xa7\x78\x0f\x71\x6e\xf8\xa6\xdc\xde\x38\xa4\xdb\xca\x12\xae\x2e\xb0\x33\x37\x76\xc1\xe1\x98\x66\xce\x8f\x9b\xdd\xd8\x06\x61\x50\xe4\xfd\x88\x09\xc0\x4f\x51\xa9\x62\x5c\x2a\xe1\x52\xec\x9a\x50\x5c\x86\xfc\x71\x42\x62\xc5\x20\x51\x8b\x33\x7f\x02\xdd\x4d\xc8\x39\x6a\xc4\x98\x2a\x2d\x8c\xb6\xa4\xa9\x04\x00\x5c\x8c\x4a\x3d\xc3\xbb\x5d\x9a\x45\x7f\xe1\xfc\xa6\xee\xab\x92\x6f\x5c\x3f\xe9\x3f\x12\x86\x47\x0f\x09\x33\xd8\xa5\x9d\xf9\x22\xcf\x11\x7d\x55\x28\xff\x92\x3c\x80\x9f\xa1\x52\x25\x78\x8f\x4b\xa2\xc2\xc2\xc7\x35\x32\x4d\x88\xe9\x84\x18\xbc\xc6\x7f\x76\xcc\xab\x2c\xb7\xac\xed\x50\x2d\x5f\xff\x73\x75\x73\xef\x4f\xa7\x3b\x80\x4b\x50\xa9\xe7\xb8\xd4\xd7\x9b\x7c\xc0\x87\x46\x18\x92\xe7\xf1\x82\x3e\xb9\x4e\xed\xdc\x8e\xfd\xca\xcd\x57\xca\xe9\x72\x83\x8e\xc8\x5e\x25\xa4\xd9\x0a\xc0\xcf\x51\xa9\x17\xb8\x14\x7d\x7d\xd3\x42\x26\xb0\xbf\x5a\xa5\xcf\xae\xe7\x16\x1d\xb9\xad\x1e\x5c\x64\xee\x54\x1f\xa3\x48\x65\x7d\x4f\x36\xf7\x49\x12\x2f\x80\x5f\xa0\x52\xa5\x78\x1f\xe7\x7e\xba\xf2\x82\x02\x63\x02\x5f\xdd\x0c\x91\xba\x30\xa2\x29\x36\xfe\x22\x4d\xaf\x15\xa2\x59\xc7\x53\x0e\x87\x1d\xc6\x20\x2d\x00\x97\xa2\x52\x65\x78\xf7\x83\x95\xaf\x0f\xe9\x7f\x6c\xa7\xdc\x88\xe5\x92\x7e\x3e\x2b\x25\xa6\xd9\xa7\xc6\x73\x8b\xfb\x31\x1b\x55\xd6\xdc\xc7\x4b\xfe\x51\xf6\x00\x2e\x43\xa5\x5e\xe2\xfd\xe0\xc7\x2b\x7d\xb5\xb1\x1c\x49\x5d\x49\x8b\xaa\xd6\xec\x5b\xc6\xa3\x3e\xf3\xf0\x2f\x4a\xa6\x3f\x35\xce\x35\x89\x57\xa5\x7c\x0c\xc9\x01\xfc\x12\x95\x2a\xc7\xa5\xd4\x4f\x29\x8c\x8b\x62\xb3\xe2\xef\xc5\x51\x96\xc4\xde\x1b\xdd\x6d\xe2\x7b\xfa\xeb\xf7\xad\x0b\x6b\x09\xf6\x3f\xac\x8c\x7f\xbd\x50\x03\x70\x39\x2a\x55\x81\x77\xcd\xd0\xa3\x1a\x6d\x59\x6e\x3c\x44\x9b\x2b\xa5\xbd\x2c\x3f\xb6\xb9\xbd\xf7\x5e\x05\x56\xdf\x5a\x77\x3d\xba\xb3\xbd\x7b\x6e\xca\x14\xc0\x15\xa8\x54\x25\xde\x83\x94\x55\xf1\x92\xfc\x63\x4f\xce\x36\xad\x20\x62\x7d\xd4\xbc\xc7\xc4\x33\xc7\xaa\x59\x2e\x94\xfa\x24\xac\x63\x57\x22\x8e\x07\xa8\x03\xb8\x12\x95\xaa\xc2\xa5\x24\xb4\xcc\x4a\xca\xdb\x3d\xf5\x9c\xd8\xe9\xe4\x8d\x12\xe6\xd6\x6f\x45\xb8\xb5\x0a\x5c\x0a\x58\xab\xe6\xe8\x2a\xf5\x2d\xf8\x2e\x0f\xe0\x2a\x54\xaa\x1a\x6f\x92\xf1\xbd\xfe\x2c\x66\x4f\xc0\xd0\x5c\x1a\xae\xb3\x8d\x4a\x2a\x07\x4e\x7f\x3a\xfd\x15\x4f\x47\x10\xc4\x0a\xb5\x1d\x4d\x9a\xe4\x02\x70\x35\x2a\xf5\x0a\x97\x52\x80\x35\x44\x4c\x9e\x81\x2e\x1a\x01\xd2\x30\xcb\x10\xc2\xb4\x37\x12\x33\x1c\xf3\xb4\x26\x5c\x03\xee\x22\x85\x74\xa2\xc4\xe6\x00\x7e\x85\x4a\xd5\xe0\x52\x89\x2a\x15\x0d\x92\x27\x38\x88\x65\x08\x8a\xa2\x64\x14\xce\x0c\x29\xdd\xdb\x3d\x61\x3e\xf9\x99\x4e\x59\x52\xff\x85\x00\xef\xd0\x55\x00\xd7\xa0\x52\xb5\xb8\xd4\xf3\x42\x71\xed\x90\xbd\xb2\xed\x6c\x97\x5f\xdc\x4d\xe4\x1c\xf6\x3c\x9d\x22\xa3\x8b\x4f\xaa\x26\x9f\xea\xf4\x35\x9f\x73\x3e\xe5\x0e\xe0\x5a\x54\xaa\x0e\x97\x7a\xcf\x37\xfb\xea\xd7\x2a\x93\xb7\x4b\xf8\x7d\x73\xa9\xa5\xde\xcf\x4d\xcb\x46\x24\x81\x51\x3e\x7b\xd1\x63\x12\x9c\xac\x2f\x52\xe5\x00\x5c\x87\x4a\xd5\xe3\x52\x5e\xb5\x57\x4c\x68\x5c\xa8\x9c\x8d\x48\x98\xd9\xbf\x30\xa6\x77\x7d\x21\x27\x49\x31\xe5\xa0\x61\x09\xa5\x41\x8a\x05\xad\x86\x5c\x01\x5c\x8f\x4a\x35\xe0\xfd\xbc\xcd\xed\xc7\xb1\xc3\xb6\xa5\xe2\x7a\xe0\xf9\x2f\xe1\x3b\x7b\x66\x65\x4f\x5d\xe4\xfb\xc3\xc3\xec\x4e\x2b\x7d\x6f\x5c\xcc\xef\x34\x03\x70\xc3\x3f\x4c\xc8\xfe\xe9\x6f\x64\x1f\x98\x90\x35\xe2\x7e\xef\xcf\x13\xa1\x4a\xef\x42\x8d\x56\xd8\xea\x07\x38\x10\xef\x6b\xa7\xbf\xa6\x87\xf3\x47\xf0\x13\x98\xea\x91\x3e\xe3\x7a\x9f\xf9\xf8\x24\x80\x1b\x51\x17\xe3\x35\x2e\x55\xa4\xfe\xf3\xda\x4c\xc0\xab\x51\x4e\xdd\x4f\xf3\x7b\x54\x2e\x62\xcf\xcf\xa5\x98\xb4\x39\xbf\x62\xfd\x28\x41\xba\xf9\xe7\x63\xee\x09\x00\xbf\x46\xa5\x9a\x70\xa9\xfc\xd9\x47\xe7\x38\x3e\xc5\x44\x79\xab\xd7\xc7\x2b\xfa\x61\x48\x7f\xf9\x59\x11\x18\xfe\x32\xee\x7c\xf6\x4c\x87\xbf\x61\x28\x97\x1c\xc0\x4d\xa8\xd4\x1b\xbc\x05\xdc\xd6\xa3\xe8\xcd\x76\x6a\x98\x98\x14\x24\x19\xa8\xb9\xe7\x25\x24\xa3\x51\x45\xdd\x5d\x1c\xb8\x36\x98\xa1\xbd\xb1\xf9\x44\x0f\xc0\x6f\x50\xa9\x66\x5c\x4a\x4f\x25\x2d\x95\x6b\xc8\x4c\x80\xc6\xec\x88\xb2\x9e\x73\xb9\xba\xa9\xd4\x76\x0f\x99\xc6\x86\xbb\x75\xf7\x8f\x80\x09\x82\x4f\x58\x00\x37\xa3\x52\x6f\xf1\xe6\x2b\x29\x4e\x45\xc3\xaa\xe4\x51\x01\x96\xa1\x3e\x47\x9b\x03\x76\x1a\x2f\xa7\x34\x91\xd9\x89\x9a\x72\xdc\xff\x3d\xea\x65\x33\x78\x0c\xc0\x6f\x51\xa9\x77\xb8\x14\x83\xcb\xf3\x90\x19\xc9\x13\x27\x10\x2b\x06\x5d\x21\x0b\x12\xb1\x80\x5e\xe2\x47\x11\x5d\xf1\x9e\x3b\x71\x64\x6d\x61\xad\x16\x58\x00\xbf\x43\xa5\xde\xe3\x3d\x86\xb7\x6a\xb4\xdf\x0b\xbe\x21\xc6\x9d\xb1\xab\xa4\xed\xd0\x2c\x33\xe7\xa1\x13\x33\xd3\xa9\xab\xce\x38\x76\x58\xb1\x9b\xc7\x57\x0f\xc0\xef\x51\xa9\x16\x5c\xaa\x5c\xae\x6d\x9a\x2b\xed\x72\x77\xcd\xd8\x11\xc8\xd4\x87\x96\xe3\xe8\x78\xda\xb7\x6f\x3f\x46\xe5\xb2\x27\x4e\x76\xb7\x33\xb9\x18\x01\xb8\x05\x95\x6a\xc5\xa5\xec\x99\xc5\x0f\xf1\x4d\x2a\x74\xb9\x97\x50\x9c\x80\x46\x64\xc1\x77\x8b\x90\xda\xce\x36\x32\x79\x1b\x93\x53\x31\x6d\x36\x2d\x5c\x00\x6e\x45\xa5\x3e\xe0\x52\x7c\x39\x33\xbf\x6e\x9d\xd6\x79\x76\xfb\x96\x8e\x62\xb3\x9c\x0d\x45\x41\xed\xae\x5c\xe8\x0a\x65\x42\x9b\x1a\x37\x4f\x19\x57\xbe\x16\x80\x3f\xa0\x52\x1f\x71\xa9\xeb\xb4\x58\xbb\xf7\x6d\x7e\xb2\xc3\x27\x7d\xfc\x9d\x6f\xce\x67\x2f\x5f\x88\x3e\x7d\xc1\x23\x4a\xea\x72\x71\xf1\xa1\x8b\x1a\xb5\xa7\x01\xfc\x11\x95\x6a\xc3\x7b\xe0\xd5\x53\x1e\xda\x51\x1d\xfa\xa5\xfd\x24\xe7\x05\x85\x66\x07\x25\x8a\xf7\xe6\x24\x47\x77\xa2\xae\x72\x1b\x0a\x3b\xb0\x96\xab\xe8\x00\xb8\x0d\x95\x6a\xc7\x7b\x88\x43\xc0\x37\x11\xb8\xfb\x8a\xf1\x45\x70\x6d\x76\x40\xa1\xab\xe2\x47\xaa\xed\xd9\x6e\xc3\x8a\x5f\xbe\xd8\x8d\x3c\xe2\xae\x28\x69\x00\xb7\xa3\x52\x1d\xb8\x54\x5c\x76\x4c\x19\x77\x85\x48\x7d\xb0\xf8\x9b\xa1\x8b\x89\xbd\x72\x6e\x06\x9f\x2a\x1a\xc9\xba\x9d\x49\x66\x78\x29\xfb\x1e\xe7\x9e\x07\x70\x07\x2a\xd5\x89\x77\x5e\x71\xed\x59\x8a\xb4\x1d\xcb\x2a\xcf\x49\x4a\x9f\xb6\x70\x9c\x50\x3d\xce\x81\xc8\x44\x5e\xe8\x57\xa1\x20\xed\xc9\xe4\x6c\x82\x01\xdc\x89\x4a\x75\xe1\x52\xdd\x7e\xdb\xa7\x3e\x11\xb9\x72\xde\xd1\xf0\x19\xa2\x6d\x9a\x2c\x87\xcd\x9b\xe7\xae\x35\xda\x57\x72\xda\x90\xdb\x86\xf3\x1b\xb0\x03\xb8\x0b\x95\xea\xc6\xa5\x36\xc9\x9b\x6f\xcf\x25\x49\x10\x5a\xe6\x2b\xaa\x90\x3b\xc4\x9f\xa7\x4a\xc9\x8f\x35\x13\x59\x18\x5c\x4c\xa7\x0e\x2f\xfd\x95\xa6\x02\xe0\x6e\x54\xaa\x07\x97\x92\xe1\x94\xe6\xb8\x37\xf2\xda\xa0\xf2\x3d\x4d\xc4\xf4\x82\xf6\x85\x3a\x8e\x2f\xe7\x44\xe9\xa4\x7c\x92\x72\x78\x7c\x45\x4d\x7d\x44\x01\xdc\x83\x4a\xf5\xe2\x52\xb7\xdd\x16\x44\x5f\xbb\x7a\x76\xa9\xdf\x77\x21\xf7\x2c\x6b\xe7\x4e\xed\xf7\x92\x24\xec\x5f\x3a\x7e\xad\x10\x62\x6c\x3d\x19\x4f\x01\xe0\x5e\x54\xaa\x0f\x97\x12\x3a\xef\x1c\x2f\x4e\x52\x25\x44\xfd\xab\x99\xae\x59\xa7\xe0\xd0\xe7\x63\xda\xe9\x0a\xfe\x69\x4a\xdf\xa7\x14\x34\xe2\x14\x32\x6c\x01\xdc\x87\x4a\xf5\xe3\x52\x27\xcc\xed\x03\x4d\xee\x3a\x4c\xba\x97\xd2\x94\x19\xb2\x75\xcb\xbb\x90\x59\x9b\xd8\xde\x15\x5f\x88\xda\x6a\x1c\xed\x79\x48\xaa\x02\xe0\x7e\x54\x6a\x00\xef\x06\x92\xfc\x60\xac\x80\xab\x60\xd5\xf6\xd9\x7b\xf2\x30\x42\xaf\x19\x3d\x9f\x51\xcb\xad\x32\xd6\xad\x64\x79\x03\xaa\x93\xcd\x32\x02\xf0\x00\x2a\x35\x88\x4b\x95\x45\x51\xfe\xb8\xa0\xe9\x76\xfd\x6b\xb8\xeb\xad\x6b\x8f\xd9\x1e\x87\x31\x4f\x36\xd5\x7e\x82\xdc\xd7\x6e\xf4\x0b\x77\xaa\x13\x18\x03\x78\x10\x95\x1a\xc2\xbb\xbe\x0a\x2a\x5c\xa3\xa7\x17\xaf\x98\x5f\xf6\x2d\x69\xfe\x24\xed\x50\x7e\xdf\xeb\xe5\x5b\xdd\x8c\x2f\x39\x95\x6d\x24\xd4\x34\xbe\xc6\x00\x1e\x42\xa5\x86\x71\xa9\x2d\xbd\x8b\xb6\xb0\x66\xd0\x6e\xf6\xc9\xd0\x1f\x9f\x7c\xd2\x09\xea\xc3\x0b\x1f\x17\x84\x7c\x56\xcc\xbb\x72\x9f\xc9\x4c\xe5\xd4\x59\x00\x0f\xa3\x52\x23\x78\x5b\xf0\xc3\x10\x5d\xe1\xfa\xa2\xf0\xe9\x53\x0d\x93\x11\xcd\x4e\x1f\x76\x6b\x4e\x8f\xdb\x85\x33\xd3\x8e\x0c\x31\xd5\x52\x4f\xa6\xdb\x01\x78\x04\x95\xfa\x84\x4b\x3d\x78\xae\x3b\x70\xd7\x73\xda\x7c\x79\x72\x27\x4e\xbc\xc3\x52\xb1\x84\x72\x90\x95\xb5\x2a\xec\x13\x57\x84\x60\xff\x4b\xe5\x44\x13\x00\x7f\x42\xa5\x46\x71\x29\x9d\x98\x93\xad\x9c\x0f\x02\x57\x65\x9d\xd2\x66\x87\x49\xbe\x65\x8d\x1d\x19\x6d\xce\x7f\x30\x72\x29\xa7\xcb\x6b\x8b\xb2\x4e\xdc\x13\xc0\xa3\xa8\xd4\x18\xde\x93\x62\xc1\xd4\x67\xe4\x6d\xbb\xdb\xe1\x85\x42\xdf\x53\xf3\x4d\x1b\x69\xf7\x96\x6c\xdf\x9f\x08\xe3\x65\x84\x44\x2b\x2f\x3e\xcb\x83\x01\x3c\x86\x4a\x7d\xc6\xa5\xce\xb1\x3f\xed\xe3\x8d\x1c\xbd\x2e\x5b\xb8\xb5\xc3\xe3\xe1\xc9\x7e\x4a\x67\x35\x24\xea\x59\xca\xd6\xab\xf8\xb5\xb5\x98\xe5\x44\x5b\x00\x7f\x46\xa5\xc6\xf1\x1e\xa4\xb4\xf7\x57\x8b\x09\xd9\x5d\x89\x3f\x4a\xbd\x32\x73\x45\x25\xbf\xf6\x35\x64\xda\xf4\x47\xa9\x53\x88\xe8\xde\x92\xcf\xe1\x75\x05\x00\x8f\xff\xc3\x84\xec\x9f\xba\x37\x07\x26\x64\x13\x78\x0f\xbc\xea\x48\xd4\xdf\xc2\x4b\x2b\x2b\x25\x91\x0a\x6d\xa2\xfc\x1f\xd6\xa6\x73\x75\xfa\xca\xa2\xa4\xd8\x9d\x03\xae\x66\x15\xbb\x8b\x02\x78\x02\x75\x31\x26\x71\xa9\x93\x27\xc3\xb5\x2e\xaa\x79\xc8\xb7\x1b\x10\x6e\x0d\x1a\x3d\x59\x5f\x8d\xb8\x57\xcf\x28\x7d\xb9\x21\x32\x97\x4a\x8e\xb7\x2c\x9a\x05\xc0\x93\xa8\xd4\x14\x2e\x65\xbc\xe3\x6b\xff\xf4\xe1\x24\x53\x2c\xe2\x48\xbe\x55\x57\x76\xd6\x6d\x8a\x86\x8b\xef\xc1\x66\xfb\x78\xa0\x7b\x80\xf4\xa2\xfd\x71\x00\x4f\xa1\x52\xd3\x78\x97\x3e\x23\x05\xf4\x42\xac\x8e\x37\x3e\x72\xde\xef\xcb\x6f\x68\xd9\xb3\xbc\x7f\xc7\x7a\x3c\x9e\xee\x01\x9b\xa8\xcd\x2b\x69\x5a\x69\x75\x00\x4f\xa3\x52\x33\xb8\x54\x63\xa1\x16\xcd\x7c\xaf\x82\x53\xf4\xa7\x22\xcc\xc5\x63\xcc\x13\xb5\x0d\x0d\x02\x25\x5a\x53\xb7\xc5\x6e\x9f\x64\x43\xde\x99\x1d\x06\xf0\x0c\x2a\xf5\x05\x97\xd2\xea\x35\xc3\x3c\x49\x81\xa9\xda\x74\xca\x1e\x79\x72\xad\x0a\xe6\x16\xdb\x49\x78\xb2\xfb\x16\xa5\xa8\x61\x66\x27\x56\x13\x8c\x01\xfc\x05\x95\xfa\x8a\x77\x63\x32\x0c\x10\x69\x49\xda\xd7\x1b\x68\x4e\xac\xa6\x13\x07\x3c\xff\xcd\xba\x90\x71\xf9\x2c\x90\x79\xd4\x22\x22\x53\x15\x14\x64\x0a\xe0\xaf\xa8\xd4\x2c\xde\xed\xd2\x44\x17\x25\x25\xd5\x06\x81\xdb\xcf\x5a\x6b\x82\x09\xa6\x82\x0a\x29\x2f\x7d\x7c\xcf\x30\x5c\x75\x74\xd1\xd0\xea\x7b\x2c\xa7\x00\x80\x67\x51\xa9\x39\xbc\x3b\xe4\xbd\xee\x3f\xba\xeb\x34\xa9\x79\x73\x3e\xaf\x9c\xde\x64\x5c\xed\x21\x24\xbb\x97\x3d\xec\xc0\xe0\x6e\x87\xe5\xc6\xbe\x98\x50\x01\xf0\x1c\x2a\xf5\x0d\x97\x72\x3d\x26\xd2\xff\x28\x9a\xf9\xdc\xdb\xdc\xe0\x55\xe1\xad\x34\xcd\xf1\x97\x77\xbe\x58\x51\x34\x6c\x45\x56\x9b\x98\x0d\x1f\x3d\x4b\x0e\xe0\x6f\xa8\xd4\x3c\x2e\xa5\x22\x70\x68\x22\xf5\x0d\xf7\xc5\x1c\x85\x4f\x36\xb5\xcd\x4f\x37\x76\xc6\x1f\xaa\x31\x49\x28\x5d\xba\x59\x10\x3d\x6b\x6a\xcd\xe9\x02\xe0\x79\x54\x6a\x01\x97\x7a\x77\xb1\xc4\x4d\x01\xaa\x1d\x92\x7e\xa4\x69\xc0\x72\xa3\xdd\x86\x2e\xb6\x37\x91\xee\x94\x7d\x75\xe4\xef\x8f\x36\xce\xde\x77\xb5\x00\xbc\x80\x4a\x2d\xe2\xdd\xf5\x49\x7a\x09\x97\x5f\x58\xfa\x10\x41\xad\x42\x64\x7d\x3f\x42\xce\x62\x1b\x7b\xff\x6b\xec\x27\xc7\xb7\x2c\x31\xad\x0c\x84\x3b\xc4\x00\x5e\x44\xa5\x96\xf0\x9e\x07\xd5\x39\x14\x8b\xf4\x2c\xe8\x45\x87\x35\x88\x2a\x09\xa7\x36\x54\x96\x21\x85\xb4\xb7\x17\x7e\xe7\x2c\x67\x60\x79\xea\x32\x8e\x02\x78\x09\x95\xfa\x8e\x4b\xa5\x30\xe4\x07\x48\x77\xbd\x7c\x99\x64\x74\x53\x7a\x63\x32\x79\x53\x61\x3b\xfe\xb4\x83\xf8\xf5\x16\x5a\x8e\xbd\x74\xdf\x97\xdc\x46\x00\xfe\x8e\x4a\xfd\xc0\xa5\x72\x88\xa5\x77\xed\x28\xbe\x2e\xbe\x1e\xa5\x1f\xf9\x4d\xc7\x32\x52\x2d\xcb\xcc\xce\x1c\xa8\x3c\xa1\xe2\xbd\x49\xc1\xf2\x25\x43\x03\xc0\x3f\x50\xa9\x65\x5c\xca\x2a\xe8\x1e\x2b\x29\x89\x4a\xef\xe4\xa5\xd9\x48\x7e\x89\x11\x23\xbd\x36\x77\x0d\xd5\xbe\x79\xd6\xa3\x06\xb4\x7f\x14\xb3\x2f\x11\x02\x78\x19\x95\x5a\xc1\xa5\x98\x1c\x48\x5f\xad\x7d\x12\x3a\xd6\x7c\xf6\xd0\x46\x22\x61\x15\xeb\xe3\xe6\xe3\xe3\x05\x79\x99\x9c\xae\x64\x91\x3d\xe2\xfa\x66\x84\x00\x5e\x41\xa5\x7e\xe2\x52\x52\x2f\x94\xd4\xea\x58\xb7\x76\x56\x7a\xd6\x49\xb2\x05\x3e\x5c\x10\x4c\x57\x16\x3b\xbd\x78\xb7\xe1\xc7\x49\xc8\x3d\xdb\x3e\x92\x0b\xc0\x3f\x51\xa9\x5f\x78\xcf\xce\xac\x65\x75\x89\x88\x89\xf4\x32\xd2\x8e\x6d\xdc\x09\x93\x5f\xb0\x71\xca\xd4\xb2\xfe\x1c\xd4\xa6\x72\xf2\xc5\x0d\x1f\xf9\xf6\xe3\x00\xfe\x85\x4a\xfd\xc6\x7b\xaa\x6e\x10\x58\x6a\x16\xac\xf1\x55\x30\xf1\xad\x3d\xbf\x7d\xe9\x4f\x46\xe7\x58\x69\x0e\xdd\x8d\x82\xef\x3f\xdb\xb9\xcf\x2b\xca\x38\x02\xf8\x37\x2a\xb5\x8a\xb7\x5f\x45\x23\xa5\x4b\xe5\xbe\x9c\xc5\x0b\xd8\xb6\x82\x43\x23\xa1\x1a\xdb\x2e\x96\x0d\x1b\xd3\xab\xd2\x31\x9d\x66\xaf\x3c\x5a\x34\x00\xbc\x8a\x4a\xad\xe1\x52\x2d\xbe\xa6\x75\xe7\x0a\xec\x4e\xa6\x78\x3d\xcb\x89\xff\xdd\x7f\x58\x4b\x99\x74\x7e\xc5\xe3\xdd\x27\x59\xdd\x47\x0b\xe7\x45\x74\xaf\x00\x78\x0d\x95\x5a\xc7\xa5\xde\x84\xe8\xa8\xd2\x1d\x9f\x2f\xde\x5c\xa9\xb2\xd3\x91\x1c\xb1\x13\x50\x14\x86\x63\x6f\xfe\x6a\x8d\x19\x0d\x09\x81\xec\x78\x3c\x00\xbc\x8e\x4a\xfd\xc1\xbb\xd8\xee\xcb\x58\x11\x3a\xc7\x2c\x97\xf8\xce\xbb\xfe\x0d\xdb\x59\xce\x1d\x61\x8f\x84\xbc\xdc\x13\x93\xd7\xaf\xf0\x2d\x73\xd5\x3b\x70\x03\xf8\x0f\x2a\xb5\x81\x77\x6b\x99\xed\xfc\xa1\xf0\x63\xec\xf6\x16\x7a\xbb\xdb\x3b\x69\x36\xb5\x87\x1e\xbc\xa0\xf0\x88\x15\x6a\x34\xaf\x62\xe1\xeb\x16\xd5\x15\x07\xf0\x06\x2a\xb5\x89\x77\x63\xe2\xc6\xb7\x1d\x73\xf1\xa0\x37\x8d\x98\xdc\x55\x21\x62\x3a\xbf\xd0\x6f\xc7\xdf\x99\x3a\x3d\x0a\xc0\x2c\xb9\x0f\x6e\x0f\x96\xab\x02\x78\x13\x95\xda\xc2\xdb\x45\xb3\x4c\x72\xf2\x65\x4f\x9a\xd5\xbf\xf1\x0b\xe6\xdc\x5b\xbf\xd5\x7b\x88\xef\xe1\xd9\x5e\x49\x56\xed\xcf\xcc\xce\xc5\x4f\x87\x49\x01\xbc\x85\x4a\x6d\xe3\x6d\x41\x4c\x7c\xff\x31\x19\xf2\x68\xbf\xcf\xd4\xfe\x73\xd5\xd2\xc9\x1d\x27\x95\xcc\xf8\x4c\x83\x83\xee\x71\x0a\x76\x16\xda\x1b\x5c\x06\xf0\x36\x2a\xb5\x83\x77\x51\x54\xf3\xdd\x23\xbd\x39\xa2\xef\x7d\x0e\xd6\x7c\x46\xd4\xa4\xa4\xda\xd9\xb3\xe2\xfc\x1c\x9c\x63\xcb\xfa\xf1\xc3\xbd\xeb\xfd\x67\x00\xbc\x83\x4a\xed\xe2\x4d\xa9\x1f\x7b\xb0\xb7\x16\x3b\xdf\x7c\x74\x57\xad\x48\x29\xee\x86\xce\x9d\xbc\xc9\xea\xd6\x1a\xfd\xbb\xef\x52\xf4\x6c\x68\x59\xc8\x24\x01\xbc\x8b\x4a\xed\xe1\x52\x3b\x1a\x2a\x47\xb9\x1a\xfd\xba\xa9\x9f\xf5\xd7\x87\x7c\xc3\x0a\x1a\x8e\x4a\x29\xbf\x15\xbe\xd7\x17\x31\xd1\x45\x46\x99\xf5\x81\x05\xc0\x7b\x28\x54\xe7\xb1\xbf\xab\x0b\xfe\x67\x42\x86\x40\x78\x65\xb1\x7c\xef\x57\x3e\x9f\xb4\x9d\x7f\x58\x3e\x57\xe9\xcc\x20\x4a\x9d\x88\x72\x80\xc3\x3f\x1c\xfd\x9c\x2f\x16\x69\x07\xec\xc5\x4e\x52\x00\x04\x42\x6d\x8b\x21\x10\x5e\x5d\x6c\xb1\xde\xc2\x6e\x7b\x98\x39\x87\x62\x44\x62\xdb\x1b\xcb\xe1\xfa\x90\x5d\x60\xea\x28\xd2\x2e\x17\x6b\xaf\x71\xb5\xeb\x9c\x80\x2a\x40\x20\xd4\xbe\x18\x02\xe1\x15\xc6\x4e\x35\x31\x47\x7c\x56\x15\xfc\x65\x37\xab\x91\x7a\x36\xfe\xce\xac\x66\x40\x14\x7f\xf7\x30\x35\xb9\x9e\xbf\xd1\xfc\x9b\xe1\x2e\x66\x80\x40\xa8\x8d\x31\x04\xc2\xab\x8c\x91\x99\x8d\xa4\xcb\x4e\xb8\x26\xd3\x54\xb9\x64\xad\x68\x69\x5a\x16\xea\x39\x3e\x93\xfa\xe3\xe3\xb3\x57\x74\x62\xe7\xb2\xe3\x0b\x2e\x80\x40\xa8\x9d\x31\x04\xc2\x2b\x8d\x61\x69\x80\xcf\x19\xbf\xba\xbb\x24\x35\x67\x55\xa9\x3a\x9e\x33\xb7\xde\x9b\x36\x4e\xf4\x5a\x0a\x35\xbc\x7b\xfb\xcb\x4e\xf2\x83\xe3\x00\x81\x50\x5b\x63\x08\x84\x57\x1b\x7b\x4d\x1b\x7a\xed\xec\x4f\x4d\x8b\xe3\x6f\x6a\x6a\xa1\xea\x48\x83\x84\x6f\x15\x26\xc9\xd4\x64\xfd\x5d\xb7\x12\xe2\x34\xe5\x3c\x0c\x00\x02\xa1\xf6\xc6\x10\x08\xaf\x38\xd6\x7c\xee\x62\x2d\x15\xa5\x59\xc0\x83\x5b\x57\x38\xa9\x3b\x45\xa8\x4e\x4a\x8c\x78\x1d\x92\xd1\x90\xbf\xac\x21\x21\xee\x4a\x9f\xc3\x08\x10\x08\xb5\x39\x86\x40\x78\xd5\x31\x6e\x83\x5c\x9e\x44\xa2\xa4\x3b\x34\xc2\x82\xd1\x55\x94\x1e\xb4\x0c\x4f\x08\x06\xa3\x05\xad\x9e\x9e\x16\xfd\x26\x94\xba\xeb\xae\x02\x10\x08\xb5\x3b\x86\x40\x78\xe5\xb1\x9a\x09\xbe\xe7\xba\xc3\xf2\x2d\x4d\xad\xbe\x63\xb9\x99\xf3\x7d\xe3\x0a\x0c\xc4\x6f\x0b\x52\xc9\xd7\x8f\xfa\xac\x76\x33\x9c\x77\x00\x08\x84\xda\x1e\x43\x20\xbc\xfa\x58\x19\x86\xb0\xf4\x84\xb1\x74\xe5\x49\xd6\x0d\x9a\xb6\x1b\xae\xbf\x6c\x93\x0a\x53\x78\x0a\x0a\x53\x09\xb1\xd1\xed\xb1\x75\x0b\x18\x80\x40\xa8\xfd\x31\x04\xc2\x2b\x90\x19\x07\x70\xd9\xa6\x0d\xea\xea\x74\x24\xf1\x25\x9e\xaa\x3b\x24\xfa\x5a\x80\x49\xed\xc7\xa9\x43\xcc\xc1\x4f\xc4\xc4\x0a\xc1\x9a\x21\x40\x20\xd4\x06\x19\x02\xe1\x55\xc8\x16\xdd\x34\xde\x82\x8d\x7a\xbb\xf9\xc5\x61\x5a\xce\x6f\xf5\xea\x95\x54\x81\x33\x99\x16\xb7\x35\x86\x15\x1f\x9c\x89\xac\x7f\x65\x0f\x10\x08\xb5\x43\x86\x40\x78\x25\xb2\x6f\xee\xa2\xdd\x57\x53\xe8\x35\xb9\x1e\x04\x37\x9f\x29\xa0\x2a\x5a\x89\xbe\x66\xc6\x44\xbd\xab\x7b\x49\x7d\xad\x81\x5c\x4e\x46\x16\x20\x10\x6a\x8b\x0c\x81\x28\xf0\xaf\x01\xf2\x96\x17\x9c\x27\x2f\x29\x24\x55\xf4\x77\x6a\x25\xa9\x5f\x9b\x1c\x76\xbd\xbc\x7b\x2b\x83\xc9\x45\x2e\xd5\x58\x9a\x85\x0a\x20\x10\x6a\x8f\x0c\x81\xf0\x8a\x64\x9e\x6d\xd5\xf3\x6a\x52\x1d\x8d\x34\xdf\x1f\x54\x13\x98\x06\x0f\xb4\x31\x0b\xd6\x65\x98\x93\x1f\x73\xef\x15\x69\xf6\x0d\x76\x65\x03\x08\x84\xda\x24\x43\x20\xbc\x2a\x19\x25\xb6\xd7\xa5\xee\xa7\xfd\x6e\x28\x3d\x79\xf1\x56\xb1\x59\x68\xdf\x72\x7d\x1c\x97\x5a\x54\xaa\xc3\x67\xec\xe2\x87\x70\x17\x2c\x40\x20\xd4\x2e\x19\x02\xe1\x95\xc9\xc4\x4e\x70\x5f\x59\x7c\xf6\x44\xfa\x74\x9e\x72\x96\x4f\x9c\x91\x5a\xb5\x39\x07\xf5\xf9\xdb\xa6\x77\xd4\x0d\xd2\x34\x6b\x3f\xde\xd7\x06\x08\x84\xda\x26\x43\x20\xbc\x3a\x19\x39\x49\xf0\x6f\x7e\xf5\x2d\x63\xb7\xe4\xf7\x42\xcf\x4a\x9c\x14\x0b\x8e\x9c\xf3\xaa\x67\x21\x66\x18\xb0\xe0\xbb\xc9\x7f\x4b\xfd\x34\x40\x20\xd4\x3e\x19\x02\xe1\x15\xca\x5c\xcb\x9f\xea\xf7\x54\xef\xfd\x60\x1b\x3e\xd2\x7d\x8c\xe0\x81\x79\xc2\xad\x7b\x3f\x1f\x2b\xbe\x84\xf2\xf5\xc4\x6e\x19\xa9\x5f\xd9\xdf\x00\xa8\x8d\x32\x04\xc2\xab\x94\x15\x91\xbd\xa9\x8c\xeb\xfe\xc5\x17\xb4\xea\x30\xfb\xd2\xb6\xf2\x74\xd0\xc2\x43\x02\xb9\xd9\x27\x52\x23\x4d\x59\x4f\x5e\xb1\x72\xd9\x02\x04\x42\xed\x94\x21\x10\x5e\xa9\x2c\x52\xde\x61\xb4\xa5\xda\x5d\x33\x3e\xe1\x46\xf8\xcd\x50\xed\x51\x25\xae\xd0\xda\xfa\xda\x76\xa2\x35\x67\xe6\x0a\xd7\xde\x38\x0f\x80\x40\xa8\xad\x32\x04\xc2\xab\x95\x0d\x2f\xaf\x6e\x99\x77\x0e\x2c\x6a\x86\xe5\xea\x1f\x17\x09\x9d\x13\xc1\xc4\x11\x3c\xec\x8e\x4a\xb5\x79\x65\xcd\x7c\x7f\x61\xd7\x04\x20\x10\x6a\xaf\x0c\x81\xf0\x8a\x65\x34\xea\x3c\xed\xe2\xef\xf2\xae\xc8\xc1\xc4\x7e\xbe\x74\x2b\xbf\x2a\x0e\x39\xb0\xda\x5e\x79\xee\x9f\x41\x46\x99\x50\xd7\x57\x2b\x08\x10\x08\xb5\x59\x86\x40\x78\xd5\xb2\x61\xa6\x27\x0b\xd7\xcd\x8e\x7d\x0f\xfe\xa1\x9f\x55\xc3\xd7\x61\x9a\xf2\x2a\xf8\xda\xa9\x91\x53\xa4\x1e\xb7\x8a\xef\xfd\x26\xd0\xdf\x7f\x67\xa8\xdd\x32\x04\xc2\x0f\x97\x41\xa1\x67\x6f\x04\x39\x0a\x3e\xf8\xfe\x74\x7e\x2d\x43\x7b\xec\x7b\xeb\xf3\xb8\xc5\xcf\x46\xf4\x91\xa6\x6d\x67\x2a\x89\x6d\x4c\x01\x02\xa1\x96\xcb\x10\x08\x2f\x5d\xe6\xb6\xea\x1d\x76\xa7\x9a\x8d\x5e\xe6\x5b\x73\xde\xa6\x7b\x07\x94\x04\xcf\xad\x9b\x1f\x7e\xfc\x45\x8b\x52\xe1\xb6\x83\xd5\x82\x0d\x40\x20\xd4\x76\x19\x02\xe1\xc5\xcb\xa4\xb7\x6e\xde\x92\x4b\x32\xb4\x8a\xe7\x21\x71\xff\x5c\x50\x53\xb6\x46\x36\x22\x7c\x43\xb3\xf8\xa1\x6c\x2c\xcf\x26\x18\xf3\x3d\x04\x10\x08\xb5\x5e\x86\x40\x78\xf9\xb2\xe6\x64\x9e\xaa\x29\x86\x88\xe3\xb7\xcf\x10\xdc\x6a\x94\xf8\x5a\x9f\x48\xce\x15\xa5\x7c\x59\xf2\x5b\x8b\x7f\xe0\xad\x26\x5f\x46\x21\x80\x40\xa8\xfd\x32\x04\xc2\x0b\x98\x31\x5f\x3b\x61\x17\x27\x26\x28\x5a\x61\xaa\xfe\x01\x33\x9b\x56\xf6\x64\x8d\xf5\x1e\x36\x71\x89\xae\xd5\xc0\x7d\xdc\xbc\x70\x65\x1f\x43\x2d\x98\x21\x10\x5e\xc2\x4c\x2a\xb6\x6c\x63\xf9\xf2\x4d\x83\xc4\xf1\x89\x17\xd6\x24\x8f\x12\x57\xe2\xab\x19\xae\xd6\xf8\xca\x20\x8a\xf1\x45\x3e\xf5\x85\x8a\x00\x81\x50\x1b\x66\x08\x84\x17\x31\x3b\x2d\xd2\xad\x74\xb8\xf0\xed\xf9\xd1\x15\x53\xa9\xf9\xd8\xbe\x81\x69\x55\xff\xc5\x97\x25\xef\xd7\x4f\x4f\xf9\x42\x77\x4e\x04\x6b\x01\x04\x42\xad\x98\x21\x10\x5e\xc6\x2c\xf4\xa4\xbf\xdd\x33\x76\xca\xf4\x9f\xbd\xdf\x36\xdd\xa0\x64\xcb\x34\xeb\x37\x0e\xa7\xd5\xfd\xde\x31\x92\x37\x8b\x52\xfb\x88\xee\x9f\x03\xd0\x3a\x66\xff\x33\xa1\xfb\xa7\x06\xf4\xc1\x09\x1d\x5e\xc8\xec\x82\xdf\x04\xcc\xc7\xdd\x2d\xce\x4d\x6f\x35\xf5\xa0\x01\x91\x99\xf1\x20\x08\xb5\xf6\x9e\x74\xf6\xa1\x16\x4f\x1c\x48\x0e\x92\x02\x08\x84\x5a\x32\x43\x20\xbc\x94\xd9\x57\x4a\x91\xd4\x0e\xb9\x88\xcb\xf1\x2a\xd2\x5f\xce\x38\xf0\x08\x1e\xde\x9b\x33\x5d\x7b\x1b\xb4\xa3\x28\x3f\x72\x26\x97\x2b\x83\x18\x20\x10\x6a\xcb\x0c\x81\xf0\x62\x66\xeb\x6b\x41\xde\x62\x91\xc6\x8a\xcc\xc9\x3e\x06\x9c\x5c\x5e\xd3\xa7\x6a\xef\xdb\x2b\xac\x2d\x7d\xaf\x62\xb2\xd4\x6c\x79\xb4\x2b\x06\x10\x08\xb5\x66\x86\x40\x78\x39\xb3\xc3\xa6\x52\x8f\x9c\xe7\xaf\xdc\xc8\x13\x0f\xda\x22\x6e\xfd\xb3\x11\xc7\x45\xdd\xc0\xf6\xaa\xc4\xfb\xda\xaf\x2c\xa1\x07\x26\x0b\x67\x00\x02\xa1\xf6\xcc\x10\x08\x2f\x68\xf6\xc1\xf8\xfe\x30\x73\xf7\xc5\x87\x15\x39\x8c\x67\x28\xa3\xa3\x0e\x47\xda\x92\x6f\x77\xc4\x7c\x2c\xb6\xb4\xff\x76\x75\xf1\x26\xab\x30\x40\x20\xd4\xa2\x19\x02\xe1\x25\xcd\xc2\x07\x09\xe4\xd5\x56\xd2\x48\x45\xd3\x37\x24\x53\x49\xcf\x07\x92\xdf\x17\x4d\xfe\x40\x3a\xde\xb8\x75\xd8\xef\x75\xe1\x8b\xe3\xfb\xf3\x09\xd4\xa6\x19\x02\xe1\x45\xcd\x7e\x53\x51\x75\xf7\x1a\x32\xdc\x3a\x19\x7f\xf1\x8f\x13\x24\x2b\xe7\x31\x37\x19\xad\xf5\x64\x52\x84\xad\x7b\x86\x34\x61\x91\x74\xff\xc8\x80\x5a\x35\x43\x20\xbc\xac\x99\x83\xcd\x29\xfd\xfb\x7a\x36\x64\x6a\x95\xa1\xec\x22\x52\xf1\x0f\xb6\xf3\x47\x8d\xd5\xf3\xfd\x1d\x5c\x8d\xcc\x72\x4a\xc4\xdf\xf1\x00\x04\x42\xed\x9a\x21\x10\x5e\xd8\x4c\x7c\x1d\xdb\x77\xc4\x76\x6e\xba\x5b\x57\xfd\x5d\x85\xe7\xf2\x43\x73\xa1\xb1\xd2\x8e\xf8\x82\xaa\x8d\xd3\x3d\xc4\xc7\x03\x67\x25\x01\x02\xa1\x96\xcd\x10\x08\x2f\x6d\x86\xc4\x50\x45\x79\x9f\x31\x97\xeb\xd5\x1a\x0f\xe0\xb0\x52\xbc\x1d\x63\x7b\x93\xe7\x0e\x08\xe2\x16\x0f\xd5\xf4\x35\x36\xc9\xe3\x04\x08\x84\xda\x36\x43\x20\xbc\xb8\xd9\xf7\x23\xd1\xcb\xa7\xd8\xa9\xb2\xad\x53\xde\x6e\x58\x66\x9e\x2a\x86\xc6\xc4\x8b\xc7\x18\x17\x19\xb3\xac\x73\x95\x08\xc1\xc3\x13\x00\x81\x50\xeb\x66\x08\x84\x97\x37\x9b\x3c\xff\xed\xf0\x6b\x91\x01\x3e\xbe\xc0\xfe\x62\x2b\x3b\x03\xb8\x65\x88\xbc\x28\xa1\xa2\xf8\xe4\xf5\x34\xcc\x14\x07\x45\xea\xfe\x49\x03\xb5\x6f\x86\x40\x78\x81\xb3\x7b\x42\x1f\x26\x36\xcb\xbf\x6a\x7c\xdb\x6a\xf2\xb9\xa6\xf6\x67\xd5\xd6\xca\xbd\x2c\x61\xfc\xd4\xe6\xfc\x5d\x27\x93\x63\x1f\x3b\x58\x00\x02\xa1\x16\xce\x10\x08\x2f\x71\x46\xf6\x42\x44\x8b\xb1\xb5\xe2\x1a\x3d\x94\x65\x50\x24\x3f\x53\x6d\xf0\x30\x05\x5b\xb8\xfb\x24\x21\x4d\xb6\x65\x59\x0a\xfc\xd8\xbf\x72\x43\x6d\x9c\x21\x10\x5e\xe4\xec\xc7\xd4\x13\xca\x56\x7b\x8f\xc8\x01\x3e\xdd\x90\xe9\xb1\xc2\xb7\x55\xd4\x71\xc9\xda\x37\x63\x74\x6e\x7f\x66\xaf\x5c\x2d\x7b\x4b\x04\x10\x08\xb5\x72\x86\x40\x78\x99\x33\x81\xd8\x3a\xe2\x3c\x25\x12\xd7\x4a\xc7\xab\x67\x06\x1a\x8e\xf1\xb9\xde\x67\xe2\x6f\x4b\x59\xab\xbc\xf3\xae\x9f\xf7\x36\x79\x02\x21\x40\x20\xd4\xce\x19\x02\xe1\x85\xce\xd2\x46\x17\x39\xb4\x55\x4a\x42\x8a\x1c\xe6\x29\x5f\x6d\x95\x63\x96\x16\xb3\x2b\x38\xd3\x1c\x2c\xf8\x27\x4e\x12\x17\x2b\x90\x59\x00\x04\x42\x2d\x9d\x21\x10\x5e\xea\xcc\xce\xc1\xf7\x4c\x7c\xcb\xb9\x1b\x57\x5a\x79\x40\xb6\xb2\x42\xf9\xb1\xf5\x1d\xd2\x1a\x11\xf8\xa1\x89\x95\xc4\x40\xec\x17\x37\x79\x80\x40\xa8\xad\x33\x04\xc2\x8b\x9d\xc5\xee\x45\x13\xb0\x38\xa7\x5b\x9f\x92\xb2\x11\xce\xcf\x7d\xf0\x26\x7e\x74\xdd\x79\x2a\x40\xc5\xb9\x85\x7e\x93\xf6\xf1\x07\x42\x7d\x80\x40\xa8\xb5\x33\x04\xc2\xcb\x9d\xbd\xa7\xb6\x6a\xb7\xbe\xf3\xf9\xf0\xe6\x87\x79\x47\x61\xbf\x00\x82\xf4\x5d\xc1\x16\xaf\xbe\x88\x63\xd7\xbe\x86\xe9\xdd\x8b\x20\xe0\x05\x08\x84\xda\x3b\x43\x20\xbc\xe0\x19\xaf\x79\x96\x66\xbf\x33\xa1\xb4\x30\x3b\xd6\x58\x45\x3a\x97\xbf\x46\x4a\x4e\xcf\x68\xf6\x8a\xf5\x9f\x98\x6c\xbf\xd9\xe7\xed\x08\x40\x20\xd4\xe2\x19\x02\xe1\x25\xcf\x46\x0f\x39\xaf\xa7\x9e\x2b\x7c\x23\xd8\x70\xeb\x03\x17\x7d\xa9\xd1\x98\x81\xd1\x9e\x58\x82\x49\x62\x6a\x3c\x2d\xbd\x9f\x43\xb4\x32\x40\x20\xd4\xe6\x19\x02\xe1\x45\xcf\xf6\x1c\xae\x26\x60\xd6\x6d\xe8\xb6\x46\x24\x9f\x7c\xa5\xba\x6c\x25\x7f\x4f\xce\xa8\xa3\x3b\x5a\x9c\xea\x4c\xa6\x47\xf6\xfa\x27\x18\x20\x10\x6a\xf5\x0c\x81\xf0\xb2\x67\xca\x3f\x93\xe6\x73\x8b\xb0\x5e\x0b\x3c\xe1\x75\x27\x03\xbc\x13\x56\xdf\x71\x21\x1b\x9b\x2e\x93\x4a\xdc\x35\xbe\x86\xd2\x4f\xce\x01\x04\x42\xed\x9e\x21\x10\x5e\xf8\xec\xf1\x44\xb6\xca\xec\xed\x40\x6f\x47\x75\x01\xad\x77\x6f\xea\x02\x90\xe1\x69\xa5\xf8\x94\x37\xcd\x9b\x21\x7d\xa5\x47\x9a\xae\xbb\x01\x04\x42\x2d\x9f\x21\x10\x5e\xfa\xcc\x24\x1f\xde\x8b\x5a\xd8\xd6\xd6\x3a\xd1\x2b\x55\x25\xe9\xb7\x7e\x27\x6d\x6a\xeb\x7c\xcc\xef\xe3\xaa\x3f\x72\x0a\x64\x83\x05\x9c\x00\x02\xa1\xb6\xcf\x10\x08\x2f\x7e\x26\xce\x62\x89\x7c\xb8\x83\x09\xe2\x80\xde\x33\x2f\x65\x51\x6b\x1c\xff\xba\x7b\xfe\xe5\x15\xe3\xf0\x91\x88\xd0\xec\x16\xca\xa9\xfd\xfd\x0c\xb5\x7e\x86\x40\xf8\xf9\xb3\xf8\x00\x5d\x1d\x36\x85\x01\xfb\x54\xa0\xf3\xfe\xba\xe0\xe7\xec\xe2\x88\xc7\xee\x5d\xaf\xb1\x56\xd5\x71\x8b\x97\x69\x5f\x53\x02\x04\x42\xed\x9f\x21\x10\x5e\x00\x2d\x5e\xd9\x6c\x80\xb6\x56\x19\x32\x65\xcd\xd8\x7e\x7a\xaa\xc0\x3e\xc4\x40\xf5\x94\xb4\x6c\x8a\xcd\x87\x1a\x2e\x1d\x7a\xf2\x17\x72\x00\x81\x50\x0b\x68\x08\x84\x97\x40\x73\x4d\xf1\x9a\x30\x89\x34\x1d\xde\x2e\x19\x6f\x9d\xab\x10\x7f\xb7\x33\xcc\x1f\xde\xc2\xd6\xe9\xa4\x94\xb0\x62\x9b\x92\x33\xe8\x00\x10\x08\xb5\x81\x86\x40\x78\x11\xb4\x4d\xa6\x2d\xc7\xf6\xba\x45\xfe\xee\x5f\x0b\xcc\xe3\x7a\x37\x9b\x73\x89\xd4\x47\x33\xd3\xc5\x29\x24\xdc\x40\x6a\x1e\xd5\x31\x76\x80\x40\xa8\x15\x34\x04\xc2\xcb\xa0\x69\x19\x87\xac\xc2\x5c\x3c\xc9\x7c\xdf\x9d\x47\xa3\x08\x93\x4b\x8e\xae\xda\x7e\x13\xd0\x21\xd6\x35\x48\xc8\xb4\x7c\x00\xbf\xa3\x01\x08\x84\xd6\x41\xfb\x9f\x09\xdd\x3f\xfd\x9f\x3a\x0e\x4e\xe8\xf0\x42\x68\x7d\xcb\x13\xc8\xa5\xdf\x0f\xce\x4f\x23\xdc\xb4\xe1\xf5\xa3\xdc\x05\x65\x2f\x83\x13\xfc\xe9\xd9\xa5\x54\x3d\xaf\x10\x83\x49\x66\x80\x40\xa8\x25\x34\x04\xc2\x4b\xa1\xbd\xd5\x7b\xb6\xee\x61\x68\xb1\x68\xae\xa2\xd7\xf0\xd4\x98\xa4\xea\x9d\x8a\xd2\x0d\x3e\xac\xde\xd6\x03\x59\x82\x16\x56\x02\xc3\xfd\xcb\x16\xd4\x16\x1a\x02\xe1\xc5\xd0\xfc\x17\xa2\xb4\xe9\x8e\xdc\x74\x2f\x74\x3e\x5d\x41\x58\x3e\xd1\xff\x9c\xfd\x5c\x71\xde\xa4\x14\xcf\xc3\x95\xbe\x54\x91\x14\xaf\xfd\x99\x0e\x6a\x0d\x0d\x81\xf0\x72\x68\xb6\x2a\x9d\x6b\x32\x99\xc6\x4a\x63\x2d\x1b\x11\x97\xec\x37\x33\x74\x49\x87\x3a\x66\x45\xdb\x8f\xe5\x5a\xc5\x93\xec\x05\x51\x9d\x02\x08\x84\xda\x43\x43\x20\xbc\x20\x5a\x91\x85\x6b\xd9\x90\xcb\xc8\xeb\x8e\x5b\x1f\xd8\x08\x9e\x89\xf9\x52\xf4\xc6\x73\x5c\xdf\xc8\xe6\x6e\xb1\xf2\xfe\x48\x20\xc3\xb9\x7f\xa2\x45\x2d\xa2\x21\x10\x5e\x12\xad\xec\xeb\x74\x22\xb2\x76\xcd\x33\x35\x6f\xb1\x28\x54\xee\x32\x03\xec\x94\xa7\x20\xb3\x2d\x1c\x52\x12\xc3\xa5\x7f\xf9\x89\x33\x1b\x40\x20\xd4\x26\x1a\x02\xe1\x45\xd1\x8e\xdc\x36\x16\x0a\x19\xc9\x71\xed\x29\xf0\x74\xab\x26\x51\x9d\xbe\xa1\x73\xf5\x4e\xaf\x46\x12\xc5\x89\x0c\xcf\xa9\x1f\x16\xa3\xc7\x01\x02\xa1\x56\xd1\x10\x08\x2f\x8b\x46\xea\xab\xd0\x4f\xb2\x55\xf6\x91\x4e\xaf\x78\xeb\xc8\x29\x2a\xdb\x34\x93\x2f\x57\x7d\x8e\xb2\x96\x0d\x1f\xee\xa5\xa8\x48\x96\xdc\xff\xfc\xa1\x76\xd1\x10\x08\x2f\x8c\x56\xc9\x42\x50\xca\xde\xa2\xd9\xfc\x5d\x3b\xfa\x15\x1b\x9b\xe2\xcd\x84\xd1\xe6\xb0\xc2\x22\xeb\xe1\x91\xaf\x5b\x12\x97\xaf\xd5\xc9\x02\x04\x42\x2d\xa3\x21\x10\x5e\x1a\xcd\xeb\x9b\xff\x13\x45\xab\x14\xf0\x2b\x2f\x43\xd2\x32\x56\xe3\xc6\x76\x8c\x0e\xcc\x54\x1c\xac\x3e\xf1\x3e\x42\x95\xc5\xf7\xc1\x65\x80\x40\xa8\x6d\x34\x04\xc2\x8b\xa3\xd1\x2d\xf2\x26\xfc\xda\xcc\x51\x9c\x95\x2b\x90\xae\xcf\xbb\xbf\x1c\x91\x53\xc7\xb7\x90\xcf\xf0\x5e\x6e\x50\x49\x58\xd7\x8c\x98\x11\x20\x10\x6a\x1d\x0d\x81\xf0\xf2\x68\x35\xe1\x62\x0f\xb5\xde\x04\x5f\x92\x84\x1e\x87\xe9\x1d\xfd\xd1\xdb\xed\xf2\xf0\x37\x54\x26\x38\xe0\x7d\xcb\xa6\xf8\xa5\x75\xef\x31\x80\x40\xa8\x7d\x34\x04\xc2\x0b\xa4\x69\xbf\xff\x6c\x21\x43\x1e\xb4\x3d\x70\x86\x9c\xb9\xaf\x79\x65\x59\xde\x34\xdd\x1d\x64\xf0\x2f\xaf\xd7\x9d\xfb\x6a\xc2\x9b\x7e\x04\x20\x10\x6a\x21\x0d\x81\xf0\x12\x69\x39\x2f\x4b\x5d\x13\xf2\xae\x1c\xae\x71\x6f\x38\xd5\xce\xd1\x9a\xf1\x94\x77\x83\xf4\xaa\x40\x6e\x6a\x44\x92\x7d\xd0\x12\xff\xb1\xfd\x4f\x00\x6a\x23\x0d\x81\xf0\x22\x69\x26\xc9\x2c\xf9\x22\xa6\xec\xdd\x88\xd5\x65\xd3\x26\xdb\xad\xd9\x1c\xc2\x6a\x95\x30\xce\xd3\x32\x6d\x95\x49\x99\x49\x5c\x03\xfb\x47\x53\xd4\x4a\x1a\x02\xe1\x65\xd2\x68\x19\x7e\x5e\x5f\xd6\xbc\xeb\x20\xed\x2b\xc7\xd1\xe5\x6a\xf5\xde\x30\xf3\xd3\xe5\x6f\xbf\x4e\x9f\x3a\xb4\x49\x4b\x90\xc3\x46\xc5\x01\x10\x08\xb5\x93\x86\x40\x78\xa1\x34\xea\xd9\xb2\x23\xd1\xef\xc8\x7e\x66\x77\x2d\x30\x66\xe5\x70\xe8\xbe\xb4\x62\x66\x6e\x2a\x27\x1d\x8a\x4b\x32\xeb\x94\x1c\x7e\xbe\x7f\x49\x83\x5a\x4a\x43\x20\xbc\x54\xda\x0d\x01\x0a\x9e\x6b\xac\xcc\x10\xa7\x5c\x92\x3f\xaf\x6e\x3d\xe1\x8d\xea\x29\xe2\x72\x85\x02\x6b\x09\xab\x6b\x6e\x76\xad\xd2\xfb\x3b\x2d\x6a\x2b\x0d\x81\xf0\x62\x69\xa7\xea\xce\xdf\x0f\xcd\x95\xa3\xd2\x12\x65\x0f\x92\xb9\x2e\x3b\x57\x77\x74\x99\x4d\xf4\x19\x01\xab\xff\x66\x82\xc0\x33\x8f\xec\x43\x00\x81\x50\x6b\x69\x08\x84\x97\x4b\x33\x08\x97\x67\x3e\x4e\x7f\x08\xab\x71\x66\xd8\xac\x54\xe3\x3b\xe9\x54\x81\x0f\x05\x8d\x66\x58\x61\x11\xa5\xca\xd2\x8f\x0a\x29\x08\x20\x10\x6a\x2f\x0d\x81\xf0\x82\x69\xd2\x6f\x7e\xd7\x15\x9e\x22\xff\xf6\xeb\x72\xed\xef\x9c\x65\xf1\x92\x53\x67\x5f\xb3\x8d\x55\xfa\x56\x4d\x64\xdc\xc5\x6a\xff\xa1\xa7\x06\x08\x84\x5a\x4c\x43\x20\xbc\x64\xda\x93\xb8\xf3\xd8\xc8\xdd\x57\x74\x55\xfc\xee\x49\xb2\x7c\x6a\xe2\xef\x17\x0d\xe7\xbf\xd9\x6e\x9d\x1d\x27\xab\x38\xbf\x39\xd4\xb9\x7f\xd8\x46\x6d\xa6\x21\x10\x5e\x34\x6d\x2b\x7c\x6d\xcc\x2d\xf7\x5e\x56\x9b\xce\x6b\x6c\xa8\x21\xc7\xed\xc8\xde\x2c\xfe\x20\xd1\xb7\x57\xe7\x5b\xa8\x45\xbb\xae\x5f\xdd\x9f\x6a\xa2\x56\xd3\x10\x08\x2f\x9b\x06\x2a\x0d\x52\x27\xfb\x48\xf2\x0d\xe9\x9f\x91\xd5\xb2\xac\x1e\xb9\xcb\xfb\xa1\x47\x88\x4b\x4d\xa3\x48\xd5\x97\x24\xb8\x38\x7f\x7f\x76\x88\xda\x4d\x43\x20\xbc\x70\xda\xc5\x5b\x25\x4c\xb7\x8e\x58\xd9\xd7\x37\x7d\xb4\xbd\x3c\x27\xd7\x50\xf7\xf1\x70\x7f\xb4\x20\x4b\x95\xe0\x5e\x3f\xa4\x21\x1b\xb3\xff\xce\x50\xcb\x69\x08\x84\x97\x4e\x0b\x8c\xa2\xee\x1d\xa9\x0e\xfd\xca\xca\xd6\xf6\x21\x34\xea\x14\xcc\xa8\xed\x41\xff\x85\xf3\xb0\x7f\x4c\xbd\xe0\xa6\x93\x5a\xd7\xfe\x79\x13\xb5\x9d\x86\x40\x78\xf1\xb4\xf4\xaa\x1f\x1b\x17\x1e\x46\x15\x15\x0b\x2d\xce\x2f\x3e\xe0\x9a\x13\xe9\x3d\x3c\xc9\xf9\xf9\xda\xb2\xfe\x23\x9d\xc6\x5b\xcb\xa2\xfb\xf3\x09\xd4\x7a\x1a\x02\xe1\xe5\xd3\xe8\xbe\x1e\xdf\x3a\xc2\xe5\x9b\xd5\xe9\x32\x37\xb8\x65\xc3\x22\x18\xbd\x5a\x55\xbf\x67\xe3\x59\xc8\x70\xd8\x6f\x77\x47\xcd\xc6\x05\x20\x10\x6a\x3f\x0d\x81\xf0\x02\x6a\x5f\x22\x5f\x73\xc5\x8f\x7e\x96\x67\x57\x34\x65\xa9\xba\x99\x01\x6a\x95\xab\x45\x4f\xaa\xce\x75\xb1\x6b\x85\x5d\x6b\x20\xa0\xf4\x04\x08\x84\x5a\x50\x43\x20\xbc\x84\x9a\xc1\x2c\xc9\x4f\x71\x11\x49\xcd\x53\xa5\x19\xc7\x18\x52\x2c\x62\xec\x02\xdf\x2e\xd1\x5f\xeb\x6e\xf2\x13\xe3\x4c\xdc\xb9\xdd\xb6\x7f\x08\x42\x6d\xa8\x21\x10\x5e\x44\xcd\x2f\xe5\x69\xe5\xf1\xf7\xb4\x44\x33\x8f\x57\x8d\x76\x48\xd5\xe9\x4e\x3b\x1f\xdd\x29\xfd\xcc\x75\x89\x1a\xf3\x54\x3e\xc1\xab\x72\xff\x9d\xa1\x56\xd4\x10\x08\x2f\xa3\x66\xbd\x73\x3d\x02\x4b\xe9\x10\xa3\xfc\xff\x11\x76\x27\xce\x58\x7e\xff\xff\xc0\x5d\xc7\x92\xad\x64\x49\x4e\xc9\x1e\x2d\xa4\x2c\x95\xa4\xec\x5b\x22\x7b\xd9\x29\x44\x64\x89\x94\xa2\x2e\x94\x2d\x91\x2c\xd9\xa2\x92\x16\x59\xb2\x65\x29\x2a\x5b\xca\xbe\x67\x0b\x21\x8a\x64\xdf\xf9\xcd\xfd\x9b\xf9\xce\xbc\xe7\xcc\x9c\xf9\xfc\x03\xf7\x5c\xf7\x75\x5e\xe7\xf5\x7a\xbe\xca\x3c\xee\x86\xfa\xf1\xd0\xf1\x50\x89\xf3\x36\x99\x64\x83\x88\x7c\x21\x6f\xac\x33\xf5\xb8\xc4\x00\xe5\x9d\xe1\x1c\xb5\xff\x0b\x74\xff\xeb\xf7\xd4\xfe\x1b\xe8\x10\x48\x6d\xca\xce\x44\xd9\xd2\xf0\xdc\xf2\x0c\x8b\xe2\xb9\x51\x97\xbf\x19\x83\xba\x67\x6c\xff\x6e\xdd\x16\xee\x73\xad\x7e\x6b\x8c\x9f\x3d\x25\x9b\x62\x25\x35\x48\x20\x94\x5a\xb2\x4b\xa7\xd7\x8f\xb3\x4f\xfb\x4a\x5f\x7d\x78\x73\xca\xac\x28\xfb\x7d\xdf\xb1\x59\xfa\xcf\x52\xdf\xf9\x43\x67\x7a\x7d\xbf\x7b\x32\x92\x90\xc0\x5a\x6a\x90\x40\x30\x35\xa5\x8b\x6f\xa9\x43\x14\x96\x88\x57\x2d\xc7\x69\x18\x9c\xbd\x04\x9b\x2c\xcd\x2c\x7c\x3f\x38\x97\x5e\x63\xbe\x6a\x72\x7a\x9f\x19\x65\x09\xc5\x6a\x6a\x90\x40\x38\xb5\xdd\xd9\x9a\x37\x4b\x63\x3a\xc7\x49\xf6\xbb\xc1\xb5\xe7\xf4\xae\x3d\x76\x97\x51\xce\x77\x93\x18\x2e\x88\x93\xdf\xa4\x74\xe5\x26\x15\x09\x09\xac\xa7\x06\x09\x04\x54\x6b\x4d\xbe\x15\xed\xf3\xc3\xe1\x18\xc3\x3e\x46\xb7\x07\xbf\xc2\xbf\xd1\xc6\xbd\xe0\xcd\x5e\x3e\xdf\xf5\x85\xfc\xca\xfe\x76\xcb\x53\x4a\x67\xc0\x8a\x6a\x90\x40\x48\xb5\x4f\xaa\x4d\x34\xa2\x70\x6c\xcb\x26\x3d\x87\xce\xe2\xbb\xd3\xad\xe6\x72\x8c\xcf\x9c\xd7\x3d\xe4\xfa\xaf\x2a\x30\xae\x58\x06\x88\x93\x90\xc0\x9a\x6a\x90\x40\x50\xb5\x04\xff\x28\x37\xa5\xe4\x8d\xcc\x94\x4c\x6b\x4b\x1f\x75\x1f\x65\x6d\xd6\x6b\x93\xb7\xf6\xa8\xea\x6c\x6d\xed\x3f\xb4\xd2\xfb\x90\xf2\x64\x58\x55\x0d\x12\x08\xab\x66\x6a\xf7\xed\x6d\x11\xd5\x57\x27\x01\x63\x5d\xdf\xc0\x5c\xa7\x2d\x07\x14\xaf\xbe\x50\xc9\x7d\x70\xa2\x61\x85\xb6\x4e\x72\x44\xc7\x92\x84\x04\xd6\x55\x83\x04\x02\xab\x79\x18\xab\x1a\x8e\x93\x6d\x56\xab\x8e\xb2\x86\xd2\x0c\x11\x1f\x37\xe4\x62\x7f\x5f\xb2\x95\xec\x35\xb6\x33\x7b\x33\xe4\x2c\x68\x46\x42\x02\x2b\xab\x41\x02\xa1\xd5\x3c\xe7\x3c\x6d\x8f\x8c\x4a\xbc\xea\xe6\x3d\x61\x1b\x13\xfc\x96\xfd\x25\x79\x40\xe3\xf9\xc3\xd2\xcf\x15\x27\x4b\xf4\xef\xc8\x5b\x1d\x26\x21\x81\xb5\xd5\x20\x81\xe0\x6a\xb5\x5c\xdf\x8a\x5e\xbf\x68\x8b\x3e\xf2\xd8\xee\xb6\x4a\xab\x5c\xf8\x4d\x5b\xde\xf9\x97\x9e\x91\x5f\xe3\xd6\x39\xa9\xbf\x14\xad\x6c\x22\x21\x81\xd5\xd5\x20\x81\xf0\x6a\x82\x63\xc9\x8f\x7f\x86\xf8\x4d\x57\x8d\x29\x2e\xd2\xea\x8e\x6f\xb9\x3f\xd0\x9e\x1a\x60\x7e\x67\x77\xc8\xa4\x77\x89\xad\x69\xbb\x2c\x09\x09\xac\xaf\x06\x09\x04\x58\x1b\x8c\x49\x3a\xc9\x76\x46\xb6\xb5\x35\x57\x97\x25\xe2\xf9\xc2\x31\xe3\x25\x2a\xeb\x88\x32\xfa\xd5\x7d\x86\x9a\x12\x55\x62\xf5\xa7\x48\x48\x60\x85\x35\x48\x20\xc4\x5a\x86\x71\x2c\xe7\xa1\x83\x5b\xb6\x87\xfe\x15\x9f\x0a\xae\x0e\x22\x4f\xd9\x1f\xa3\xdf\x77\xfd\x51\x42\x58\xa5\x99\x49\x54\x96\xf1\x39\x12\x12\x58\x63\x0d\x12\x08\xb2\xc6\x78\xb5\xd0\x27\xf8\xf5\x69\xce\xd7\xd7\xee\xae\x4d\x3f\x35\x35\x64\x54\xa0\x11\x61\x9a\x3e\x70\xea\xad\xf6\xf4\x60\xff\xc2\x02\xa5\x68\xb1\xca\x1a\x24\x10\x66\x8d\x43\xf5\xec\x5e\xa1\xd8\x52\x97\xda\x20\xa3\x8c\xbf\xe7\x58\x75\xf9\xf3\x26\x25\xff\x59\xf1\x25\x50\x5d\xe6\xb1\x1e\x16\xbc\x4d\x49\xd4\x58\x67\x0d\x12\x08\xb4\xf6\x96\xed\xc3\x51\xab\xf3\x5f\x54\xe7\xbb\xf6\x7d\xff\xc3\xf6\x7c\xbb\xee\xf4\x46\xb7\xe0\x1f\x8d\x6c\xae\x97\xd6\xde\x92\x72\x17\x8f\x90\x90\xc0\x4a\x6b\x90\x40\xa8\xb5\xfc\x87\x87\x76\x08\xac\x85\xa5\x45\x3d\xba\xc7\x72\xd6\xa2\x37\x21\xd8\x4f\xad\x59\x7e\xd3\xd8\xe7\x57\x20\x6b\xc4\xd2\x51\xe8\x0a\x09\x09\xac\xb5\x06\x09\x04\x5b\x1b\xdb\xda\xc8\xd6\x4a\xc3\x7b\x9d\x61\x34\xe7\x73\xc3\x0e\x15\x9e\xca\x29\xd6\xce\x9d\x8f\x98\xd7\xf4\xbc\xe1\xad\x6c\xc7\x50\x79\x12\x12\x58\x6d\x0d\x12\x08\xb7\x26\x2a\x31\x70\x4b\x75\x73\xd5\xa1\x21\x99\xa7\x57\xba\xa8\x64\x0b\x7f\x1c\x1b\x5d\x74\xb8\x5d\xd0\x6d\xa2\x15\xf9\x70\x4c\x2d\x9e\xb2\x6c\x61\xbd\x35\x48\x20\xe0\x9a\xdc\xd4\x84\x90\xcd\xba\x7c\x51\xb0\xe0\x49\xa9\x07\x7f\xde\x5d\xe9\xd0\x79\xc4\x62\xf0\xed\x4d\xa7\xa3\x4d\xdd\xa2\xcd\xfd\x5c\x4a\x38\xc1\x8a\x6b\x90\x40\xc8\xb5\xb5\xb3\x21\xef\x9e\x17\xb2\x37\x17\x69\xab\xc6\x9e\xe5\x7e\xad\x19\x55\x20\xe7\x72\xe4\xc7\x05\xa1\x92\x6b\xb6\xbd\x37\x17\xdf\x4a\x91\x90\xc0\x9a\x6b\x90\x40\xd0\xb5\xea\x23\xce\xe3\xd1\x85\xde\xd7\x27\x77\x85\x2d\x0a\x2a\x6e\x79\xe0\x4b\x95\xee\x69\x6b\x72\x65\xd7\x26\x5f\xc5\x7b\x03\x2e\xbb\x78\x49\x48\x60\xd5\x35\x48\x20\xec\xda\xc9\xc0\xd3\xd2\x4c\xfd\xa2\x19\x6c\x85\x51\x62\xc2\xd3\x3d\x5d\x66\x45\x27\x34\xa6\xba\x94\x9e\xfd\xc9\x62\xe0\xb3\x50\x39\x20\x4c\x42\x02\xeb\xae\x41\x02\x81\xd7\x26\x1e\xd4\xd7\x25\x87\x69\x06\x9e\xfa\x42\xa7\x26\xa8\x69\xb9\x37\xef\xc9\x55\x65\x7d\xdd\xf7\xb0\x3e\x66\x8d\x3f\x6b\x2e\x7a\x0f\x09\x09\xac\xbc\x06\x09\x84\x5e\x13\x36\x12\x73\x28\xa3\x7d\x62\x14\x17\x6e\xfa\x57\x6c\xb1\x2a\x62\x72\x97\xb5\xe4\xa2\xf1\xe8\x4d\x96\x9a\x8a\xd6\x87\xb6\xd1\x97\x49\x48\x60\xed\x35\x48\x20\xf8\x5a\x50\xa9\xd5\xbd\x9c\x99\xab\x47\x14\x75\x2e\x95\x57\xe5\x5c\xbe\x46\xfc\x3c\xfb\xa8\xb2\x98\x73\x2c\xe6\xd2\x1f\x7a\x23\x0f\x5e\x07\x12\x12\x58\x7d\x0d\x12\x08\xbf\x76\xea\xcd\x81\x5b\xc1\x75\x2b\xd3\x72\x5f\x57\x33\x9b\x85\xef\x8a\xae\x18\x96\x4b\x31\x6f\x16\x08\x09\xbb\xf5\xd4\xa5\xd9\xf7\x0c\x25\xe9\x60\xfd\x35\x48\x20\x00\xdb\xad\xc9\x82\x38\x06\x43\xbd\xb2\xd4\x67\x2f\x78\x6e\x30\xa7\x14\x49\xeb\x88\xbe\x8c\xdd\x7c\x6f\x54\x2b\xe4\xef\xb8\x62\x77\x33\x25\x1e\x60\x05\x36\x48\x20\x04\xdb\xd5\x80\x47\x67\x55\x84\x5f\xcd\x8d\x0c\xc5\x2b\x39\xe5\xef\x59\x11\x6c\x1d\xa8\x31\xce\x13\x59\xbe\x9e\xb2\xf1\x4f\x29\x6d\x5e\x82\x84\x04\xd6\x60\x83\x04\x82\xb0\xd9\x46\x8e\x98\xf7\xcb\x79\x5b\x28\x33\x0c\xe4\x0f\xa4\x66\xcf\x38\xf1\x2c\x5f\x70\x6c\x70\x5d\x37\xaf\xd5\xc8\x7b\x95\xc0\xaa\x46\x42\x02\xab\xb0\x41\x02\x61\xd8\xba\x95\x77\x8b\x56\xbc\x81\x4f\xb3\x34\x5f\x6c\xf0\x88\x35\xdc\xd4\xdb\x4f\x72\xa9\x28\x70\x27\x70\xd4\xbb\x78\xc9\x7f\x2a\xa5\xb4\x6d\x9c\xc3\xf6\x7f\x81\xee\x7f\xfd\xea\xed\x7f\x03\x1d\x02\xb1\x85\xa7\xc8\x77\x4d\x9f\xd0\xda\x2a\x12\x9f\x99\xd3\x33\xb8\xf7\xf5\x1f\xd2\xa6\x6a\xe2\x06\xc3\x9b\xee\xe2\xe7\xce\xab\x4c\xf3\x94\x40\x87\x95\xd8\x20\x81\x50\x6c\x2e\x4f\xa6\x4b\xea\xba\x55\x41\xfa\x1d\x61\x93\xcb\xd4\x59\x83\xef\xe2\x16\x6f\x31\x81\xaa\xee\x0f\xba\x62\x47\x5b\xcb\xaa\x29\x9b\x06\xd6\x62\x83\x04\x82\xb1\xd1\x8d\x54\xc8\x08\x8b\x7e\x1a\x9b\x13\x36\xdf\x5b\x7d\x3e\x33\x37\xb3\x71\x48\x4d\xce\xd3\x6e\x24\x73\xa8\x40\x34\xb7\xb7\xdb\x80\x84\x04\x56\x63\x83\x04\xc2\xb1\xe5\xaf\xd7\xdc\x70\x0e\x2e\xed\xdb\xf4\xdb\xb5\x52\x54\x8a\xae\xb2\x86\xe7\xfb\xf5\xf7\x59\xa3\x7c\xe2\xc1\xeb\x7c\x6e\x3c\x22\x94\xc2\xc4\x7a\x6c\x90\x40\x40\xb6\xc3\x0b\xfb\x72\x7f\x44\x84\x29\x8f\x34\x71\xe5\xe9\xc8\x8a\xf6\x07\x4f\x6c\x32\xb1\xd2\x81\xae\x87\xbb\x26\x3f\x1a\xe7\x94\x53\x76\x6d\xac\xc8\x06\x09\x84\x64\x93\xba\x75\xfa\xe0\x6b\x5f\x3e\x71\xbe\x14\xcf\x97\xfc\x9f\x8f\x94\x35\xdf\x7e\xf3\x34\xd9\xae\x33\x65\x07\x77\xf3\x80\x1e\x87\xad\x0c\x09\x09\xac\xc9\x06\x09\x04\x65\x2b\xf2\xb0\xff\x37\xbd\x1a\x62\xb3\xbd\x53\x54\xfd\xab\xa4\xa1\xe2\x0f\x56\x9a\xb9\x51\xea\x2b\xd4\xa3\x17\xd8\xec\xef\x2b\xef\x60\x20\x21\x81\x55\xd9\x20\x81\xb0\x6c\x35\xd9\x05\xd7\x79\xda\x5e\x7d\xb4\x5e\xfe\xa0\xd9\x54\x61\xe8\xcf\xb4\x2d\xbc\xeb\xc7\xce\x3b\x97\xc3\x75\xdf\x47\xf0\x0b\xaf\x70\x92\x90\xc0\xba\x6c\x90\x40\x60\x36\xc5\x28\x4e\xc9\x20\xe5\x5f\xe1\x12\x9a\x1f\x59\xbb\x4a\xbc\x86\xbc\xf2\xa3\x8e\xfd\x53\x71\xbc\xdd\xca\x1c\xd8\xd2\xbc\xd6\xeb\x42\x42\x02\x2b\xb3\x41\x02\xa1\xd9\xb6\xb8\x25\x45\x8e\x3c\x73\xfe\xbd\xf3\xd6\xd3\x94\xc8\x1b\x1c\x03\x82\x2b\x4a\x8a\x1d\xf7\x7d\xe5\x68\x25\xd5\x0a\x8f\x79\x08\xa8\x93\x90\xc0\xda\x6c\x90\x40\x70\x36\x01\x47\xa3\xf1\x3e\x97\x0e\x6b\xe1\x8b\x8d\x9b\x1b\xfe\xf6\xe6\xaa\x55\x3f\xfa\x3b\x6d\x5d\xfa\xcf\xb4\x79\x83\xf9\x6a\x6c\x9a\x0a\x09\x09\xac\xce\x06\x09\x84\x67\xe3\xc8\xf8\x71\x66\x23\x9d\xf1\x64\x69\x45\x3b\xb1\xe6\x78\xe5\x60\xc5\xbe\x1d\xe6\x3f\x47\x8f\xb7\x84\xb5\xed\x9a\x96\xb5\x5f\x66\x25\x21\x81\xf5\xd9\x20\x81\x00\x6d\xee\xab\x8f\x7d\xbe\xf5\x39\xb5\x3f\x13\x53\xa3\x63\x27\x34\xb6\x3e\xb9\x2f\xad\xb9\xdc\xc7\xfa\xab\x2e\x4d\x44\x8b\xce\xce\xcc\x8a\x84\x04\x56\x68\x83\x04\x42\xb4\x11\x1c\x87\x18\x96\xbc\x6c\xdd\x99\x86\xca\x9b\x32\xe9\x63\xe9\x6c\x43\x0f\x94\x87\x0f\x9c\x4c\xbf\xa5\x69\x56\x79\xd3\xf8\x96\x2d\x09\x09\xac\xd1\x06\x09\x04\x69\x7b\xfb\x8e\xec\xbc\x31\xe5\xfb\x6b\x53\xd6\xea\xbc\xf1\xb7\x06\xaf\x07\x4a\x7a\x4a\x27\x13\x9a\x2d\xcf\x2b\xf6\xc7\xf3\xf7\x16\x52\x16\x07\xac\xd2\x06\x09\x84\x69\xd3\x9a\x98\x99\x7d\x3a\x60\x23\x92\x31\x9d\x4b\xf7\x70\xa3\x7b\xa5\x66\xf4\xee\xd1\x4c\x9a\x68\xd0\xd8\x56\x28\xfa\x52\xe9\x1d\x20\x21\x81\x75\xda\x20\x81\x40\x6d\x5c\x77\x53\xbc\x56\x69\x16\x9e\x53\xed\xde\xf1\xe8\x63\x05\xff\x25\x06\xc3\xcc\x22\xb5\xe1\x69\xe6\xb3\x93\x91\xad\x85\x12\xae\x27\x49\x48\x60\xa5\x36\x48\x20\x54\x5b\xfe\xc4\xe4\x0d\xfe\x01\x17\x53\xa5\x3d\x09\xdb\xde\xc4\x5c\xfe\xfa\x9c\xb6\xd5\x67\xec\xcf\x95\xab\xad\x32\x16\xf6\xe7\x2e\x3f\xa1\xf4\x33\xac\xd5\x06\x09\x04\x6b\xcb\x1d\x6b\xbd\x1a\xff\xf7\x4f\x11\x6b\xee\xe1\xbb\xc3\xa2\xc7\xef\xa9\x9d\x3b\x4d\x6d\x48\x3f\xf7\x62\x88\xaf\x74\x84\x56\xb9\x77\x0b\x09\x09\xac\xd6\x06\x09\x84\x6b\x9b\xb9\xf5\x26\xf0\xca\xf7\xf0\xfe\x2e\x32\x65\xcb\x1f\x60\xa6\x65\x32\x48\xef\xd2\x40\x3f\xf8\xdd\xe5\x7d\x53\x49\x48\x19\xf7\x45\x12\x12\x58\xaf\x0d\x12\x08\xd8\x76\x33\xbc\xf1\x51\xfe\xc6\x85\x50\xfe\xde\x57\x76\x3c\xd3\xcf\x5d\x79\xcb\x0b\x2e\xa5\xa6\x09\x94\x9c\xef\x1b\xbf\xb5\x5f\xa7\x46\x83\x84\x04\x56\x6c\x83\x04\x42\xb6\xa9\x2e\xd8\x70\xdf\xd8\x13\xfd\x81\xfe\xdd\xed\x53\x8b\xa2\xd5\xad\xad\xdf\xa2\x2a\xf3\xba\x1f\xe5\xf3\x33\xa7\xfc\xdc\x63\x91\xcb\x4c\x42\x02\x6b\xb6\x41\x02\x41\xdb\x94\xa2\xd9\x27\xb2\x3c\xdf\xda\x3d\x5d\x99\xdb\x31\x42\x6f\x10\x5c\xcf\xf0\xd0\x85\xd7\x55\x6a\x2e\x71\x6c\x7d\x8e\x2d\x72\x8a\xb2\x85\x60\xd5\x36\x48\x20\x6c\xdb\x86\x74\x51\xd4\xbc\x6a\x92\xb3\xf3\x75\xda\xc7\xf9\x8b\xaf\x8b\x5a\xb2\xa9\xd7\x76\xb6\x65\xb6\x93\x59\xa1\xaf\xf6\x2f\x08\x50\xbe\x26\xd6\x6d\x83\x04\x02\xb7\xb5\x47\xb7\xa5\xae\x58\x4c\xee\xd9\x7f\xaf\x8e\x37\xaf\x4e\xdd\x62\xc4\xfc\x2b\x77\x43\x68\x60\x05\x4f\xa1\x2d\x8b\xe0\xfc\x51\x4a\xa7\xc5\xca\x6d\x90\x40\xe8\xb6\x63\xb0\x25\xcf\x77\x81\x3b\xc8\x8c\x5e\x81\xf3\xaa\x8f\xa3\xcf\xc3\x01\xe6\xf1\xaa\xfc\xe7\x61\x9d\x0a\x9f\xa0\xa4\xbd\x02\xa5\x9f\x61\xed\x36\x48\x20\x78\x5b\xfa\xf2\x3d\xd7\xba\x86\xdd\x32\xf2\x87\xcc\x7d\x8e\x48\x3a\xe6\x0c\xb4\xd6\xba\xe9\x3b\x70\x19\x74\xc9\xfa\xdd\x54\xd8\xaf\x41\xc9\xad\x58\xbd\x0d\x12\x08\xdf\xe6\x79\x71\xf3\x9b\xc7\xc1\xe9\x7e\x37\x02\x7f\x24\xf0\x46\x3b\x97\x0c\x69\xb8\xc4\xf1\xd7\x3e\x19\xad\x12\x2b\xb5\x7b\x41\x63\x49\xa9\x33\xac\xdf\x06\x09\x04\x70\x63\x12\xdf\xd5\x34\x76\xe3\xb0\xd3\xe5\x2b\x8f\x9a\xe5\x6e\xb6\x96\x5f\xfd\x72\xb0\x88\x2b\x6a\xa9\xe2\xb1\x7a\xd8\x93\x8b\xe5\xa1\x46\x24\x24\xb0\x82\x1b\x24\x10\xc2\x8d\x71\x82\x6a\xb3\xc6\xee\x86\xfb\xdb\xdc\xaf\x9d\xf6\x6a\x9f\x53\x89\x23\xf9\x07\x1f\xbb\x07\xfd\x95\x6b\xcb\xf9\xb6\x51\x73\xc8\x82\x84\x04\xd6\x70\x83\x04\x82\xb8\x6d\x6f\x30\xcd\x36\x7f\xf2\x30\xce\xb6\xae\x4f\x75\x79\xb3\xff\x2f\xcb\xfa\xc1\xbc\x5a\xfa\x3d\xd5\xb3\x72\x22\x16\x2e\x56\x95\x94\x0c\x86\x55\xdc\x20\x81\x30\x6e\xcc\x4b\x19\x37\xbd\xe2\xbe\x33\xe5\x1a\x14\x64\xdd\xd4\xd0\xd9\x37\x52\xef\x16\xb8\xfb\xdc\xf4\x6f\x2a\x43\xf3\xa5\xf7\x30\x80\xd2\x35\x70\x8e\xdb\xff\x05\xba\x7f\xfd\x79\x74\x66\xd6\x96\x2b\xcb\x1d\x56\xbc\x75\xbd\x43\xce\xf6\xaf\x19\x87\xad\x15\xbc\xe7\xac\xf3\xc5\x24\xc3\x22\x46\x86\xff\x1b\xe8\x10\xc8\x2d\x2b\x6a\x4f\x86\xdd\xf7\x6f\x5f\x93\xcc\x1b\xb6\x1e\x60\x71\xe9\x09\x3d\xc7\xbc\x96\x35\xa7\x50\x21\xac\xbb\xed\x49\xff\xcf\x25\x82\x84\x04\x56\x72\x83\x04\x42\xb9\xa5\xbe\xfb\xd3\x49\x57\x13\x7c\xc1\x90\xc1\x7a\xad\x6c\xdf\x76\xcd\x3f\xab\x5f\x86\xc0\xb7\x64\xaf\xa7\xcf\x1a\x67\xd9\x3b\xad\xd9\x49\x48\x60\x2d\x37\x48\x20\x98\x5b\x9f\x66\xa4\xca\x4c\xf3\x4c\x5b\x09\x7d\x51\x28\x9d\x9c\x5c\x4e\xc6\x5d\xd7\xee\x63\xba\x54\xbd\x09\x03\x25\x6e\x57\xd3\x8d\x34\x49\x48\x60\x35\x37\x48\x20\x9c\xdb\xd7\x05\x72\x98\x7d\x97\x73\x1c\x57\xdb\xa8\x9c\xf4\x85\x75\x56\xdd\xd7\x1b\xe6\x69\xae\xce\x21\xb2\xea\x01\xf3\x9d\xbb\xf3\xc4\x49\x48\x60\x3d\x37\x48\x20\xa0\xdb\x8d\xab\x52\xe7\x8a\xed\xc4\x45\x92\x2d\xd7\x08\x8f\x53\x29\xd4\x0c\xc1\xc5\x3b\x24\x84\x4e\xd0\xf4\x9c\xf9\x54\x15\xf2\x71\xf3\x5e\x12\x12\x58\xd1\x0d\x12\x08\xe9\x76\x48\x3b\xad\xda\x2f\xd0\xc4\x9b\x2c\x71\x95\x3b\x93\xf1\xd3\xb4\x6f\x58\x4d\x82\xfc\xb2\x99\x3e\x32\x66\x9d\xfd\xe3\xe0\x2d\x13\x12\x12\x58\xd3\x0d\x12\x08\xea\x26\x22\xf5\x93\x8e\x7f\xee\xda\xf8\xb6\x93\x77\x8d\x5f\xec\xbf\xdf\x74\xf4\x4e\xbc\x51\xd6\x62\xc2\x4e\xa1\x79\x3a\xf9\x5d\x6f\x3f\xea\x91\x90\xc0\xaa\x6e\x90\x40\x58\x37\x03\x86\xe8\xa7\x41\xd3\x0f\x97\x03\x6e\x7e\x35\x11\x0c\x10\xbb\x70\xf4\xe3\x58\x0a\x7f\x86\xef\xd9\x2f\xf4\xc7\x84\x2d\xca\x43\x0e\x90\x90\xc0\xba\x6e\x90\x40\x60\xb7\x2b\xb6\xd5\xfb\x25\x96\x2f\x29\x3d\x7e\x13\xf1\x3b\xfb\x27\xcf\x53\x91\xbe\xc1\x81\x08\xae\x49\xeb\x63\x01\x4b\x11\xe2\xb7\xd4\x2f\x91\x90\xc0\xca\x6e\x90\x40\x68\xb7\xb5\x7b\xed\x3f\xe5\xb8\x02\xac\x2e\x18\x3c\x39\xad\x6f\xb2\xe4\x6b\x76\xeb\x5e\x6c\x66\xe8\xfd\xae\x32\x2f\xab\x5b\x4a\x5b\x2c\x9c\x48\x48\x60\x6d\x37\x48\x20\xb8\xdb\x51\xb1\x01\x3f\xc8\x37\xba\xda\x19\x1d\xe9\xf0\xe2\x99\xd1\xa6\x13\x40\x92\x7d\x7f\x3b\x5c\xd1\x7e\x6a\xf8\xb2\xba\x25\x79\x13\x09\x09\xac\xee\x06\x09\x84\x77\xdb\xea\x33\xb8\x72\x7b\xbb\xc9\x48\x12\xb5\x1f\x1d\x1d\x93\xd1\xd6\xb8\xbf\xb7\x4f\xa8\x9a\xe9\x58\x26\xdb\x3f\x3e\x12\xdd\xe7\x2d\x4b\x42\x02\xeb\xbb\x41\x02\x01\xde\x6e\x1e\x9c\xf6\xbc\x9b\xf5\x76\xfa\x9f\xd2\xba\xc3\x74\x84\xbb\xcd\xd9\x03\x79\x7c\x35\xf1\xbc\x5f\xeb\xb3\x27\x37\xde\xbc\x29\x66\x22\x21\x81\x15\xde\x20\x81\x10\x6f\x56\x35\x4c\xcc\xbc\x1a\x2a\xc5\xfa\x47\x86\x9f\x85\x7d\x14\xdb\xbc\x19\xbe\x15\x93\xda\x47\xcd\x94\x54\x71\xe5\xc9\xe5\xa1\xd7\x94\x71\x86\x35\xde\x20\x81\x20\x6f\xf5\x43\x16\x2b\x32\x2e\x36\xca\x2b\x7b\x03\x8a\x77\xbb\x71\xd8\xfd\x53\xb2\x2a\x67\x4a\xee\x3c\xd4\xd2\x26\xd1\xcf\x16\xf9\xf0\x0a\x09\x09\xac\xf2\x06\x09\x84\x79\x13\xf3\x7c\x91\xa3\xa2\x4c\x73\xba\xf5\x53\xc1\xee\x3b\x2e\xa7\x36\x4f\x2f\x2e\x6d\x7a\xf2\x49\xbf\x9d\xe9\x45\x85\x3a\x1b\xb7\xfb\x7e\x12\x12\x58\xe7\x0d\x12\x08\xf4\x26\xf3\x65\x79\x99\x95\x89\x64\xcb\x16\xff\xdc\xce\x7a\xa1\x8b\xcf\xa5\x9c\x61\x6c\x29\x68\x7e\x2c\x87\x8f\x2a\x94\x7c\x31\xab\x4f\x42\x02\x2b\xbd\x41\x02\xa1\xde\xcc\x87\x75\xce\xbc\x36\xb5\xe1\x50\x6c\xbc\x17\x36\x25\x48\xb5\xef\xce\xbd\xb7\x03\x42\x73\x61\x5e\x4a\x57\xbf\xfd\x19\xd0\xd4\x52\x25\x21\x81\xb5\xde\x20\x81\x60\x6f\xe6\xcd\xbb\x2a\x7f\xfc\x5d\x4c\x30\x90\x16\xc9\x92\x18\xd9\xf8\xfb\xc7\x8a\x5d\xb2\xb7\x4a\x60\xaf\x76\x9d\x74\xe8\x61\xfd\x7b\x6c\x24\x24\xb0\xda\x1b\x24\x10\xee\x2d\x43\x32\xef\xdd\xe3\xb2\x9b\x52\xb4\x95\x5d\x96\xd1\x03\x31\x74\x8b\xf5\x39\x69\x2f\x3a\xed\xaf\xf6\xd5\x4a\x4f\x58\x34\x51\xc9\x91\x90\xc0\x7a\x6f\x90\x40\xc0\x37\xa7\xba\x28\xa9\xe2\x95\xad\xbb\x3b\xae\x99\xfe\xda\x2c\x53\xa2\x2f\x79\x2b\x27\x24\xc2\x2f\xdc\x89\xe6\xd2\xcc\xf3\x9e\xb1\x31\x3a\x12\x12\x58\xf1\x0d\x12\x08\xf9\xb6\x1e\x5b\xd6\xf9\x6f\x8c\xa3\x1f\x0c\xa4\xb8\x56\xce\x44\x4f\x1a\x70\xb1\xef\x67\xb3\xdd\xbb\x3a\xeb\x7e\x6a\xe2\x0b\x51\x41\x79\x32\xac\xf9\x06\x09\x04\x7d\xb3\xec\x16\xdd\xf8\x94\x93\xa4\x63\xff\xd2\x20\x70\x9f\x43\x48\xb3\x7a\xb6\xc9\x59\x25\xde\x88\x35\xbd\x6b\x42\x6a\xca\xb5\x9e\x96\x24\x24\xb0\xea\x1b\x24\x10\xf6\x4d\xdd\xc2\xa4\x5f\x74\xdd\xe6\x5d\xf5\x50\x0d\xe3\xaf\x5e\x78\xb7\xe4\xf3\xb6\x45\x3d\xdb\x72\x5d\x71\xb5\x69\x51\x49\x2e\x4e\x4a\x3f\xc3\xba\x6f\x90\x40\xe0\x37\x8d\x2b\x93\xea\xa2\xfd\x56\xdc\xcc\xb3\xd7\x0a\xf9\x54\x2c\xff\xf9\x75\xf1\x33\x1a\x2c\xce\xbf\x9c\xae\xfe\x29\x39\x50\xc5\x2a\x49\x42\x02\x2b\xbf\x41\x02\xa1\xdf\x72\x2d\x2d\x2d\x27\x57\x73\xd3\xb4\x44\x6f\xa9\xc4\xdd\x5a\x6d\x4d\x38\x96\x21\x32\xbe\xa0\xb0\x4d\x52\x46\x27\xad\x93\xfd\x34\x65\xa7\xc4\xda\x6f\x90\x40\xf0\x37\x81\x10\x69\x07\x5a\x96\xc3\xbb\x6e\xd4\xcf\x36\x77\xed\xcd\xda\x2d\x24\x9a\x98\xde\xb5\x87\x27\x20\x46\xb2\xfd\xf8\xba\xcb\x18\x25\x51\x63\xf5\x37\x48\x20\xfc\x1b\xa7\x0c\x8f\xbc\x31\xed\xa9\xe8\xfd\x13\xf1\x8d\x49\x23\x22\xc1\x2e\x95\x9a\x77\xf7\x9a\xdd\x99\x3c\x65\x7f\x44\xe9\x6d\x2e\x3d\x25\xd0\x61\xfd\x37\x48\x20\x00\xdc\x89\x64\x76\x13\xfb\x81\xcd\x93\xdc\xd6\x31\x6c\xac\x9c\xd2\x2e\x09\xb2\x74\x2f\x2e\xff\x5a\x61\x8d\x6e\xa9\xac\xd2\x34\xf1\xa6\xd4\x19\x56\x80\x83\x04\x42\xc0\xad\xb0\xac\x25\x6b\x1a\x9c\xac\xea\xd8\xfb\xf3\xdb\x7d\xe9\xfa\x5c\x7d\x6b\xd5\x88\xef\x33\xb5\xfe\x2a\x35\x8d\xdb\x5a\x2b\x3f\x28\x91\x90\xc0\x1a\x70\x90\x40\x10\xb8\x91\x68\xed\x03\x7d\xcc\x86\x3f\xa6\x7f\x6b\x8c\x6e\xf9\xe3\x38\x9b\xcc\xc2\xbc\x62\x5e\xa4\x34\xc1\x9f\x3a\x18\xf1\x6d\xc4\x87\xb2\x06\x62\x15\x38\x48\x20\x0c\x1c\x53\x89\xc2\x81\x0d\x7d\xe7\xdf\x63\xb5\x6d\x42\x25\x7a\x97\x74\xc3\x09\x93\x68\x9b\xe6\xed\xe9\x62\xba\x1b\x1a\x7c\xbb\xba\x28\x51\x13\xe7\xc0\xfd\x5f\xa0\x93\xfd\x19\xa9\xb9\xb3\x86\xea\x75\x65\xdc\xa3\x98\x23\x61\x73\x37\x84\xec\xe9\x9e\xab\xd6\x81\xf0\xda\x08\x92\x5d\xd1\xe7\xb7\xe2\x7f\x03\x1d\x02\xc1\x0d\x55\x87\x00\xc6\xd6\xa3\xcc\x1f\x8b\x56\x1a\x3c\x5d\xef\x48\x7e\x99\x1f\xda\x11\xd5\x59\x7b\x92\x30\xd9\xdb\xfc\xe5\xf1\x6e\x4a\x6c\xc2\x4a\x70\x90\x40\x28\xb8\x91\xb8\x8a\xcb\xdd\xb3\x16\xd3\xc3\x65\x2c\xbf\x5e\x97\xd8\x7e\x14\x92\x58\x9d\x8d\x38\x9c\x24\xba\xa7\x26\xf2\x81\xb2\xd7\x4f\x4a\x2d\x61\x2d\x38\x48\x20\x18\xdc\x0f\x0b\x6f\xb9\x91\xfb\xff\x2a\x98\x5a\x3c\x64\xe6\x03\x6c\x8e\xc5\x0d\x8f\x7d\xfd\xd4\xe0\xd7\x5e\x70\x22\x28\xf2\x8d\xcf\x3f\xca\x0e\x84\xd5\xe0\x20\x81\x70\x70\x57\x93\xff\x3e\xf4\x9c\x18\xca\x16\xa9\x1c\xe2\xb9\x2f\x2e\x15\x94\xdc\xbb\xb0\x6d\x23\x93\xbe\xb9\x7f\x4d\x7d\x4f\xb2\x5d\x37\x15\x09\x09\xac\x07\x07\x09\x04\x84\xeb\x7b\xb4\xfb\xe7\xbe\x70\x3f\x13\x95\x81\x13\x89\x49\x2a\xae\x7f\xa6\x14\x67\x53\xad\xda\xfb\xdf\x6f\xd3\xde\xf2\x29\x33\xdb\x83\x32\x34\xb0\x22\x1c\x24\x10\x12\xee\x0c\x47\xbf\x67\x70\xe5\xbd\xd3\x11\x24\xc7\x67\xc5\x7c\x7a\x6f\x9a\x18\x50\xde\x11\xa9\x9a\xcf\xf1\xc7\xd1\xd6\x26\x69\x3b\xe5\x00\xb0\x26\x1c\x24\x10\x14\xee\x2d\xc1\x53\xa9\xa0\xa8\x5b\x90\x17\x7c\xe8\xee\x6a\xe8\x44\xff\x9d\x02\xab\x9c\x29\xdf\x78\x8b\x52\xcd\x55\xaa\x1d\x49\xc9\x94\x5a\xc2\xaa\x70\x90\x40\x58\x38\x03\x19\x15\x4f\x99\x5f\x76\xef\xd9\x09\x2d\xde\xf9\x2b\x7b\xe9\x76\x14\xbd\xbf\xc7\xaf\x5f\xd1\x14\x76\xb1\x52\x56\x37\x43\x91\x8b\x84\x04\xd6\x85\x83\x04\x02\xc3\x95\xe4\x95\x52\x19\x5e\x14\x9b\xcc\x8b\xf7\x53\x72\xe7\x5e\x7e\x14\x73\x7d\x4a\xca\x20\xb9\x5f\x47\xe5\xe9\x1f\x13\x99\x26\x79\x43\x12\x12\x58\x19\x0e\x12\x08\x0d\xf7\x50\x23\xe8\xab\xea\xfd\xed\x42\x16\x4e\x4e\x7f\x5e\x09\x57\x7a\xba\x35\x69\xec\xab\xe8\xd9\xd8\x57\xa7\x9d\x35\xfd\x4b\x8a\x9a\xf2\x61\x58\x1b\x0e\x12\x08\x0e\xb7\x3c\x9a\x5c\x45\x5d\xc7\xd5\xae\x7a\xcd\x64\xe7\x73\x15\xf3\x1f\x39\x17\xe1\x97\x7c\x05\xa7\xa4\xa4\xee\x9d\x96\x4f\x03\xd5\x24\x48\x48\x60\x75\x38\x48\x20\x3c\x5c\x36\xe3\x2b\x4d\xde\x69\xb6\x9b\xe6\x81\xfc\xa7\x9e\x2f\x74\x84\x7d\x71\xa8\xa1\xea\x5a\x30\x98\x7b\x96\xf8\xca\xe0\xc3\x9d\xc1\xe3\x24\x24\xb0\x3e\x1c\x24\x10\x20\x8e\x6e\xf5\xf2\xc1\x24\x25\xa9\xc6\x07\x91\xb2\x0f\xf8\xd2\x26\x7a\x13\x18\xff\x9c\x0e\x3c\x93\xbe\xfb\xd8\x85\x91\x87\x32\x74\xf9\x0a\x24\x24\xb0\x42\x1c\x24\x10\x22\x4e\xf0\x72\x87\x6e\xbb\x6a\x4b\x95\x71\x14\xc7\xbc\x9b\xc5\xb0\xa6\x85\xc7\x81\x31\xa6\xc6\xba\x6a\x9b\x8c\xe6\x1d\xa6\x95\xe3\xee\x24\x24\xb0\x46\x1c\x24\x10\x24\xce\x5c\xee\xab\xf9\xe5\x23\xdf\x1e\xca\x2c\x5f\x5a\x4c\x62\xf3\x99\xee\x0e\xe1\x7d\x45\xf5\x6a\xd7\x6f\x45\x4f\x8d\x75\x48\xa5\x4e\x4f\x42\x02\xab\xc4\x41\x02\x61\xe2\x2c\xd4\x68\xf5\x84\xee\xc7\xbc\xfb\x17\x6b\xab\xb5\x69\x5f\xcc\xcf\x33\xb6\x2d\xb1\xc5\xd5\x22\xf7\xd4\x45\x42\x0f\x0f\x8d\x79\xe9\x92\x90\xc0\x3a\x71\x90\x40\xa0\x38\x1f\xed\xba\x91\x80\xb7\x27\x03\x1c\x75\x19\x8b\x3a\x87\x64\x72\x6b\x8f\xed\x71\xbf\x64\xbe\xfd\xb7\xe0\x5b\x33\xa2\x60\xec\x86\x0c\x09\x09\xac\x14\x07\x09\x84\x8a\xbb\xe9\xc0\x4d\xbf\x74\x4b\xcd\xfd\x11\x88\xea\xbf\xd4\xef\x36\xc2\x71\xde\x71\xb6\x3b\x99\x71\x35\xd5\xf9\x86\x5b\x38\xab\xcc\x66\x12\x12\x58\x2b\x0e\x12\x08\x16\x17\xb5\xe8\xbf\x4b\xd8\x23\x65\xfb\x46\x6c\xe7\x53\xe7\x89\xf9\xa2\x83\x0c\xb5\x69\x4d\xaf\x46\x5d\xdb\x82\x6a\x73\x3b\x64\xe6\x28\x75\x86\xd5\xe2\x20\x81\x70\x71\x52\x61\xf9\x53\x21\x42\x86\x17\x75\x9e\x5a\x9b\x4b\x1a\xda\x7d\x79\xa2\x5f\xba\x83\xfe\xf6\xcd\xd3\x7c\x27\xdc\xce\x68\x84\x05\x51\xc2\x09\xd6\x8b\x83\x04\x02\xc6\x99\x37\x79\x9b\xa7\xba\x49\x51\xd5\x04\x0b\x4f\x98\x64\x1e\x5f\x0d\xd5\xe3\x8c\x8d\x0f\x0c\x33\x4d\x12\x37\xbd\xdf\x5a\xa1\xe2\x48\x42\x02\x2b\xc6\x41\x02\x21\xe3\x7c\xe6\x42\x5f\x28\x7e\x3c\xd5\x28\x50\x11\xc0\x7e\xff\x86\x6d\x58\x9e\xc0\x3e\x85\xd3\x76\xa9\xcd\xce\x36\x70\xa8\xa1\xfe\x3c\xe5\x6e\x62\xcd\x38\x48\xa0\x68\x9c\xf6\xda\x07\xb6\x4c\x33\x26\x49\x31\xcb\x79\xa1\xaf\xd6\x8b\x9c\x9e\x27\x3e\x58\xb4\xe9\x86\xbf\xce\xdf\x7c\xe6\xde\x7d\x7f\xca\x69\x62\xd5\x38\x48\x20\x6c\x5c\x1c\x17\xad\x6c\x6b\x65\x62\x3a\xef\xea\xd2\x7c\xa2\xec\xd7\xf2\xd7\xfc\xdf\x56\xbc\xbe\x8e\x7d\x93\x09\x2c\xa2\xd3\xe7\x79\x7d\x86\x84\x04\xd6\x8d\x83\x04\x02\xc7\x3d\xbe\x9d\x75\xad\xec\x06\xdf\x98\x8b\x9e\x25\xbf\x43\xa6\x60\xb0\xf5\x17\x49\x83\xa5\xb0\x0b\x74\x95\x13\xe9\x7a\x7f\xd2\x00\x65\xa5\xc1\xca\x71\x90\x40\xe8\xb8\x6b\x87\x35\xe3\xf8\xce\x69\x3c\xf6\x76\xd8\x1d\xdd\x5b\xa9\x12\x39\xd4\xc5\xbf\xc0\xc8\x69\x95\xff\x3c\xe4\xf7\x93\x63\xf7\xe7\x28\x07\x80\xb5\xe3\x20\x81\xe0\x71\xdf\x3d\x41\x50\xfd\x3f\x5d\xe1\x40\xaf\x3b\xdd\x63\xf1\xc7\xfb\x05\xaf\xa7\x71\xec\x58\xb5\x0d\xb9\x30\xa0\x3c\x95\x23\xd0\x41\x49\x3a\x58\x3d\x0e\x12\x08\x1f\xf7\x91\x2f\xde\x01\x36\x49\x1f\x57\x6b\x49\x0a\x5c\x0e\x2b\x0f\xb2\x82\x83\x2c\x21\xfe\x17\x0e\x44\x4d\x5a\xed\x2c\x14\x09\xd4\x22\x21\x81\xf5\xe3\x20\x81\x00\x72\x62\x07\xae\x3a\x37\xc5\x46\x8d\x9e\xd8\xe3\x2e\xa3\xa8\xec\x12\xa2\xbb\xb5\xd4\xb9\x36\x6b\xdf\x70\x6e\x4c\xe4\xda\x44\xcc\x1d\x57\x12\x12\x58\x41\x0e\x12\x08\x21\x47\x9d\x43\x3f\x2d\xd1\x60\xa8\xfa\x64\xd5\x54\xf6\x57\xbe\xb3\x9e\xaf\xe1\x21\x99\xa9\xe4\x22\xfa\x18\x8e\xaa\x73\xf3\x0e\x1e\x47\x48\x48\x60\x0d\x39\x48\x20\x88\x9c\x83\x61\xb7\xdd\xe0\xb5\x3e\x1e\x86\x4b\xde\xc7\x8d\xd2\x6a\xb7\xb6\x7a\x3a\x3a\xbf\x65\xf1\x10\x25\xce\xec\xba\xfe\xd0\x24\x97\x9f\x84\x04\x56\x91\x83\x04\xc2\xc8\x15\xf5\x76\x5b\xb4\xb8\x2d\xb7\x8e\xfc\xfe\xc4\xf2\xfd\x64\xef\x6b\xd7\xbf\xec\x3d\x76\x7c\x19\xd5\x07\x9a\xa3\x0f\x41\xbd\x5f\x76\x24\x24\x70\x8e\xdc\xff\x05\xba\xa8\xd5\xb6\xc7\x0d\x3f\xce\xa5\x4c\x3c\xce\x73\x98\xff\x77\xb0\xd6\x80\xfa\xa5\x9a\xed\xeb\x48\xd3\x3f\x42\x41\x9f\xa5\xf6\x8c\x78\xff\x37\xd0\x21\x90\x5c\xf4\xac\xb2\x80\xf8\xbd\xa4\x3d\xe4\x23\xe3\xbb\x16\x8c\xf2\x42\x42\xfe\x82\xa7\x8a\x4e\x70\x5c\x57\x10\xfd\x99\xcc\xaf\xfb\x7b\x1b\x09\x09\xac\x24\x07\x09\x84\x92\xeb\x79\x79\xfb\x8a\xb5\x2d\x6d\x2a\xf0\x64\xf9\xa1\x97\x6b\x60\xb8\x98\x74\x7e\x4e\xc1\xf6\x3a\xd5\xcd\xb5\x6d\x0b\x41\x4d\x53\x94\xf7\x82\xb5\xe4\x20\x81\x60\x72\x89\x11\x8a\x5b\xdb\xf3\x5e\x9f\x0c\x3a\xe9\xd2\x77\xfb\xdd\xb5\x6d\xd6\xea\xe7\x15\xbf\xf9\xbb\x16\x75\x68\xa9\xaa\x75\x47\x5e\x51\x27\x21\x81\xd5\xe4\x20\x81\x70\x72\x42\x03\x8c\x7c\x23\x54\x64\x3b\xaf\x14\x57\xaa\xaf\xc8\x83\xf0\xbf\xc2\x5e\x5c\x9f\xa9\x80\x76\x4c\xb6\xb2\x61\x61\x42\xe2\x59\x12\x12\x58\x4f\x0e\x12\x08\x28\xe7\x97\x5d\x27\x07\x62\x66\x1e\x51\x43\x86\xfb\xed\xff\x12\x38\xaf\xae\x11\xd4\x8e\xa7\xd8\x6d\x15\x42\x5e\xae\xf7\x49\x50\xa9\x91\x90\xc0\x8a\x72\x90\x40\x48\x39\x3a\x85\xc9\x73\x9d\xaa\x5c\x15\xaa\xef\x94\xd4\x3e\xbf\xf4\xf7\x6e\xdd\x69\xd3\x73\x23\x70\x86\x3c\x20\xc2\x7e\x64\xc5\xb3\x89\x12\xe8\xb0\xa6\x1c\x24\x10\x54\x4e\xa6\xc1\x24\x64\x5b\x48\x99\xc8\x9b\xef\xd7\x2f\x5a\x8e\x38\x1f\x6f\x37\x09\xf7\xe3\xde\xd7\x3d\x23\xe3\xcd\x19\xae\x96\x1a\x42\x43\x42\x02\xab\xca\x41\x02\x61\xe5\x78\xcc\x65\x5b\x4f\xa6\x97\x3f\x7d\x3b\xdc\xf8\xea\x62\xaa\x94\x6b\xcb\xd3\xf7\x3b\xac\xb2\xee\x4f\x72\x5f\xdd\x11\x39\x37\xfa\x53\x80\x84\x04\xd6\x95\x83\x04\x02\xcb\xe5\xf0\x0f\xf3\x99\xae\x9e\x5c\xd4\xe1\x08\x95\xf8\x56\xc5\xf7\xb2\xe3\xa4\xc5\xb0\x4f\x49\xba\x88\xdd\x3f\x89\x73\xa9\x57\x2f\x9b\x91\x90\xc0\xca\x72\x90\x40\x68\xb9\x08\x46\xe9\xc3\xd6\x75\xb5\x63\x17\x99\xe4\x37\x94\x02\xa8\xbf\xee\xb1\x73\x8e\xb4\xe0\xa4\x4e\x1c\xa0\xa1\xbf\xf8\x65\x9c\x4b\x84\x84\x04\xd6\x96\x83\x04\x82\xcb\x69\xcb\x69\xdf\x7c\x3f\x66\x2f\x38\x49\xef\x37\xf6\xce\x4e\x2d\xee\x4a\xa3\x6b\x4b\xbb\x5c\x51\xe0\xf6\xe0\xb5\xd1\xfd\xc7\xd7\x28\x0d\x10\xab\xcb\x41\x02\xe1\xe5\xee\xd8\x4e\xbe\x93\x2f\x1c\x3e\x2f\xe6\xf5\x75\xd1\x35\x42\xdd\xf1\xc1\x8d\x83\xbe\xd3\x69\x9f\xcf\x6f\x0d\x61\x6a\xbd\x77\x87\x8f\xb2\x85\x60\x7d\x39\x48\x20\xc0\x5c\x61\xc2\xe3\x28\x07\xbb\xfd\x01\x5e\xf7\x77\x4e\xd3\xf7\xbd\x93\xc9\xaf\xd2\xda\xf8\x65\x32\xa8\x6c\x14\x68\xb3\xee\x63\x6f\xa1\x43\x42\x02\x2b\xcc\x41\x02\x21\xe6\x8e\x47\x2c\xff\x1e\x15\x17\x7d\x68\xc6\xd9\xa9\x18\x7f\xeb\xef\x16\xc9\x2e\xd7\x63\x4d\xf5\x82\x3a\xfb\xa3\x88\x0b\x11\x96\xad\xd4\x24\x24\xb0\xc6\x1c\x24\x10\x64\xee\xdd\xca\x28\x53\x40\x79\x4d\x50\xc0\xf0\xce\x8d\x73\xd9\x4f\x82\xd5\x9e\xbe\xea\x78\xf0\xd6\x88\x93\x23\x9b\xa9\xfc\x66\x6c\xc5\x7e\x12\x12\x58\x65\x0e\x12\x08\x33\xa7\x16\xe7\x70\xa5\x5f\xaf\x98\x4b\x96\xea\x6c\xf8\x87\xe0\xaa\xc4\xd9\x9f\x7f\xaa\x56\x43\x2d\xf8\xab\x6e\x75\x9c\x51\x32\x76\x11\x22\x21\x81\x75\xe6\x20\x81\x40\x73\x4f\xa9\xee\x58\xf3\xec\xd4\xed\xed\xcb\x89\xe7\x93\xa9\xfa\xc2\xfa\x21\x5b\xe1\x34\x5f\xaf\xc3\xfd\x2f\x0a\x57\x01\x4b\xa9\x06\x65\x02\x61\xa5\x39\x48\x20\xd4\xdc\xa9\xbb\x6c\x75\xef\x8b\x8e\xb2\x86\x0d\x3d\xb8\xb4\xfc\x55\xe3\xc0\xad\x8a\x72\xd6\x3e\x92\x7b\x69\xfb\xe9\x75\x7b\x71\xa1\x2f\xc6\x24\x24\xb0\xd6\x1c\x24\x10\x6c\xce\x24\x31\xf1\x48\xcd\x18\x4f\x5b\xdb\xd9\xf9\xbb\xb6\x0b\x75\x93\xe3\x6b\x89\xdf\x7c\x77\xc6\xcb\x7b\x8c\x9f\x3d\xd3\x1d\xb5\x9d\x72\x9d\xb0\xda\x1c\x24\x10\x6e\xae\x67\xaa\x39\x66\xe4\x02\x4b\x5e\xfb\xb3\x58\xbe\x26\xcf\xa4\x6f\x83\xf4\x67\xa7\x9b\x4f\x6a\x0e\x8f\x5e\x13\xba\xff\xb8\x33\x89\x9d\x84\x04\xd6\x9b\x83\x04\x02\xce\x3d\xba\x44\xb3\xbc\xa3\x76\xb5\x9d\x41\x26\xfb\xdd\x07\xa1\xbe\xe8\x9a\xf3\xae\x96\x5c\x4a\x0c\x91\x37\xa9\x35\x65\x35\xf6\x95\xc8\x91\x90\xc0\x8a\x73\x90\x40\xc8\xb9\x8b\x51\xbe\x39\x2e\xfd\x86\x16\x8b\xac\x4f\x1f\x1d\xfc\x68\x63\x9c\xc1\xa5\x7f\xbd\x41\xed\x88\xc1\xf4\x98\x8b\x86\xd1\x94\xb1\x06\x09\x09\xac\x39\x07\x09\x04\x9d\x0b\x4b\x95\x1f\x8d\x93\xcc\x28\xdb\x22\xbf\x20\x13\xd3\xb9\x30\x7a\xdd\x25\xe8\xce\x8f\xf6\x2f\x7f\x95\x6f\x3b\xd3\x9e\xf0\x86\x94\x81\x82\x55\xe7\x20\x81\xb0\x73\x3c\xc7\xd4\x39\xfe\x55\xd3\x2b\xdd\xf2\x9e\x32\x66\x78\xaa\xbb\x16\x53\xa4\x5d\xde\x41\x63\x6a\xbb\xbd\xe0\x91\x82\x67\xb5\x30\xa5\x6b\x60\xdd\x39\x48\x20\xf0\x9c\x1b\xff\x82\x45\x64\xc6\xc7\x09\x91\x38\x3b\x23\xc9\x19\x96\x64\x31\x1f\x36\x1f\xb7\x03\x56\x42\xb9\x77\x5e\x48\x07\xad\xc9\x9f\x20\x21\x81\x95\xe7\x20\x81\xd0\x73\x67\xc4\x52\x79\x0c\xe7\x53\x4d\x5b\xdd\xee\x17\x64\xb9\x7b\x5e\xbb\x99\xbe\xe9\xa8\xff\xc0\x9d\x47\xc7\x63\xfc\xa3\x8c\x3a\xbe\x29\x92\x90\xc0\xda\x73\x90\x40\xf1\xb9\x8b\x7a\x51\xe4\x09\x73\x95\x43\xc7\xcd\x26\xf7\xf5\x9f\x92\xd9\x92\x72\x94\xae\x50\xe5\x95\xe0\xa9\xcf\x35\x3c\xe7\xd5\xca\x20\x09\x09\xac\x3e\x07\x09\x84\x9f\x33\x9b\x74\x91\xb9\xd3\xef\x7b\xe7\x9d\x86\xc7\xca\xa6\xbe\xc3\x4d\xfe\x83\x32\xb9\x07\x4e\x5b\x15\x6f\xff\x1e\x72\xd2\x27\xab\x63\x0f\x09\x09\xac\x3f\x07\x09\x04\xa0\x2b\x4f\x12\x61\x8e\x71\x78\x76\x2d\xb4\x77\xfc\xee\x2b\xe7\xfe\xd2\x9a\xc1\xea\x13\xce\x25\x55\x67\xde\xfa\x5d\x7f\xea\x67\x04\xa5\x48\x48\x60\x05\x3a\x48\x20\x04\xdd\x83\x57\x9f\xbc\xa5\x27\x7c\x83\x52\xae\xaa\x84\x1a\xf6\xdd\x8d\x15\xbf\xa4\xbd\x74\xe4\xcd\xba\x08\x13\xb7\xd0\x1a\x1b\x0f\x03\x65\xa7\xc4\x1a\x74\x90\x40\x10\x3a\xd6\x4d\xeb\x82\x63\x5e\xdb\xd6\x67\xbb\x99\x52\x97\x99\xa3\x02\x03\x8b\xd9\x47\xc3\x82\x4c\x7e\x1d\xd1\x8b\x7f\xda\x24\x4f\x47\x99\x9b\x58\x85\x0e\x12\x08\x43\xf7\x6d\xcb\xe5\x4d\x96\xaa\x87\x7b\xf8\x0b\xea\x7d\x8d\xdf\x75\x84\xcd\x9c\x70\x1f\x86\x87\xe9\x59\x4c\xd3\xba\x75\xf8\x8f\xcd\x5b\x92\x90\xf8\x5f\x0e\x9d\x79\x68\x0b\x6d\xe6\x94\x34\xbc\xcf\x36\xd2\x2f\x7c\xe6\x77\xca\xd0\x03\x2b\xaf\xbe\xfb\x1f\x59\xbe\x1e\x52\xdc\xa2\x9d\xca\xb7\xf6\x9f\x40\x07\x10\x87\x6e\x90\xe8\x65\x7e\x20\x52\xb4\x71\xd7\x62\xf9\xbc\x96\xc9\xa3\x4b\x7f\xa4\x0f\x9c\xf2\x2e\xd1\x48\xd4\x9c\xf6\x3a\xe7\x38\x6e\xa8\x42\x42\x80\x77\xe8\x00\xe2\xd0\x25\x86\x3d\x91\x17\xdf\xa6\x75\x63\x8f\x8d\xc1\x35\x51\x2d\x86\x9b\x76\x2f\x8d\x13\x39\x23\xc8\xf3\x6a\xcb\x5a\x5f\x3c\x9e\xa9\x3a\x93\x10\xe0\x1d\x3a\x80\x38\x74\x5b\x6f\xfc\xbd\x6f\xdd\x55\xbb\x7a\x4e\xe6\xca\xa7\x17\xcb\xcf\xcb\xbb\xad\x9d\x07\xaa\xd6\x7a\x72\xb9\x77\x9f\xa6\x77\x06\x47\x79\x49\x08\xf0\x0e\x1d\x40\x1c\xba\xb6\xbd\xf3\x23\x07\x73\xaa\x0f\x0a\x7c\x14\x2c\x14\x8f\x19\x19\x79\xb2\xf4\xe7\xe6\x08\x53\xb5\xc3\xbc\xca\x4e\x9b\xab\x9b\x42\xd8\x48\x08\xf0\x0e\x1d\x40\x1c\x3a\x0d\x7f\xc3\xe2\x27\x8a\xca\x2b\xbb\xa4\x98\xee\xef\x9f\x0d\x13\x3c\xa3\xce\xe8\xb7\x2e\x7b\x4e\xf1\xe6\xe6\xfc\x5f\x8c\xfb\x79\x35\x49\x08\xf0\x0e\x1d\x40\x1c\xba\xd1\x09\xa7\x98\xe2\x2c\xf6\xd3\xbb\xff\xec\x3f\xda\x31\x1f\x5c\xd0\x25\x2c\xe3\xa1\x2d\xc8\xfd\xda\x4b\x6b\x53\x59\xc0\x8f\x4a\x6d\x12\x02\xbc\x43\x07\x10\x87\xee\x12\xe7\xf5\x76\xc6\xe3\xfe\x0d\xe2\xe2\x3f\x4c\xe7\x5c\x9e\x3d\x2d\x8b\xc9\xd8\x73\x89\xea\xdd\x43\xad\xf5\x4a\xcf\x5c\xae\x03\x74\x24\x04\x78\x87\x0e\x20\x0e\x5d\x74\xaa\x39\xa9\xb5\xa9\x94\x5b\xf5\x0e\x6f\x98\x41\x16\x79\x55\x21\x5b\xea\x64\xd3\x1c\x8c\x7d\xc0\xff\xd7\xce\x7d\x40\x52\x8a\x84\x00\xef\xd0\x01\xc4\xa1\xbb\xfb\xfb\xaf\x55\xa9\x13\xd8\xaf\xd5\x70\xb6\xe4\x77\xea\x79\x97\xf4\x9e\x34\x70\xba\x31\x5b\x26\x9c\xe9\x40\xde\xcd\xe4\x7f\x56\x24\x04\x78\x87\x0e\x20\x0e\xdd\x65\x39\xab\x09\xf8\x6a\x97\x95\x3d\x2f\xcd\x6e\xe3\x8c\xfe\xfa\xed\x65\xa2\x87\xaf\xb3\x50\x3f\x3a\xab\xfe\x73\xd8\x49\x25\xe7\x30\x09\x01\xde\xa1\x03\x88\x43\xa7\xf6\xb4\x7c\x81\xbc\x2c\xfc\xca\x54\xe4\xe2\x17\xe3\xe3\x8f\xb6\x07\x6d\x30\x78\xe8\xbf\xea\xf6\x9e\x98\xf0\x17\x93\xba\x92\x64\x46\x42\x80\x77\xe8\x00\xe2\xd0\x51\x65\x66\x2d\xf5\xbe\xdf\x2a\x44\x7e\xe7\x0f\x7e\xb9\xab\x4d\x9f\x4e\x31\x2a\x57\x79\x32\xd0\xc3\xc8\x65\x7d\x2d\xae\x5e\x7f\x0b\x09\x01\xde\xa1\x03\x88\x43\x67\xb4\x33\x89\xdb\x92\x3d\x21\x2f\x27\xce\x47\x4f\x67\xfb\x80\xe1\x66\x6f\xeb\xf6\x23\x4c\x5b\x72\x36\x87\x14\x9c\xb3\x10\xa0\x92\x23\x21\xc0\x3b\x74\x00\x71\xe8\x1a\x32\xc1\x15\xdb\x9d\x73\xa5\x5f\x8d\x57\x75\x8a\x0f\xbc\x5e\xed\x69\x3d\x7f\x49\x39\x68\x7f\x6d\x67\xe2\x65\xb9\xce\x34\x01\x2a\x12\x02\xbc\x43\x07\x10\x87\xee\xf0\x9a\x75\xde\xa5\xbc\x87\xdb\xaa\x9a\xd4\xc5\x77\xae\x58\x37\x39\x2c\x28\x6e\xec\x70\x1e\x82\x72\x5a\x27\x9f\xdb\x1e\xae\xa7\x21\x21\xc0\x3b\x74\x00\x71\xe8\xde\x73\x4a\xbc\x4e\x79\xf3\x8a\xc1\xf0\xe2\x91\x98\x08\xe6\x64\xa3\xe8\x23\x9d\x3e\x1a\x02\xa7\x83\x97\xec\x5f\xd5\xb5\x94\xda\x52\xae\x13\xde\xa1\x03\x88\x43\x37\x1e\xcb\x5e\x74\xe4\xcb\x4b\x21\x3e\x87\x9a\x43\xf0\x98\xbf\x91\xe3\xf7\x63\x5f\xdc\x6f\x1a\x44\xfd\x16\xf4\xea\xae\xf1\x0f\xdb\x49\x42\x80\x77\xe8\x00\xe2\xd0\xd1\xde\x2d\xc8\xc9\x18\x8b\x7b\x7c\xf6\xaf\xb0\xc8\x88\xcf\x58\xb6\xd4\xe8\x19\xe1\x3e\x17\x27\xd7\xb6\xd3\x57\x74\x97\xf4\x95\x29\x07\x80\x77\xe8\x00\xe2\xd0\x81\x99\xf5\xbf\x96\x35\x6b\x8a\x4c\x1b\x8a\x09\xf3\xc3\x53\xa5\xbf\x2e\x2a\x57\x6c\xa8\x7b\x5a\x15\x48\x36\x4f\xc9\xd1\x6c\xa1\x14\x2d\xde\xa1\x03\x88\x43\x17\xe2\xe9\x7f\xf7\xa5\xbc\xa8\x90\xd9\x96\xda\x67\xb7\xce\xcc\xc6\x01\x3a\xbb\x43\x1b\x02\x1a\xbe\x3b\x0f\x55\xe8\xda\x6b\x7b\xed\x27\x21\xc0\x3b\x74\x00\x71\xe8\x9a\xcb\xf4\x37\x4e\x04\xde\x78\xe8\xe7\xf5\x6e\x52\x41\x7d\x6b\x21\xcf\x17\x1f\xbe\x44\xf3\x35\xd5\x93\x0f\xf3\xa2\xf6\xde\x19\x94\x24\x21\xc0\x3b\x74\x00\x71\xe8\x06\x36\x57\xac\xde\xa9\xfa\xa8\x7d\xa2\x6f\xf7\xed\xde\x94\x0a\x2e\xb9\xea\x14\x2f\xd7\x27\x4b\x75\x81\x4b\xb7\x56\x8b\xbb\x7a\x6c\x48\x08\xf0\x0e\x1d\x40\x1c\xba\xb2\xaa\x47\x3b\xb7\xab\xb7\x36\x3e\xbc\x79\xb7\x89\xc3\xf1\xbb\x85\xf1\x80\xb9\x9a\x72\xef\x8e\xe2\x3f\xeb\xf2\xc6\x2d\x91\x12\x3b\x48\x08\xf0\x0e\x1d\x40\x1c\xba\x0f\x6a\x3f\x2c\xb6\xac\x8e\x1b\x1c\x09\x35\x5b\x3f\x93\x94\x93\xa7\x35\xc5\xed\xf7\xe5\xa6\xd7\xc9\xd2\x33\xad\xc1\x3f\xfd\x7f\x51\x9a\x23\xde\xa1\x03\x88\x43\xd7\x7d\x4e\xf6\x17\xef\x61\x9e\xcf\x8d\xa1\xe5\xf9\x17\xcc\x7a\x45\x17\x03\x3c\xb9\x46\xdc\xaf\x9e\xd4\x2e\xf6\x8b\xcf\x5c\xab\xd2\x23\x21\xc0\x3b\x74\x00\x71\xe8\x68\xa3\x77\xd2\x99\xd0\xa6\x73\xbf\xcc\xaf\xe6\x17\xe4\xbe\x76\xec\x0c\xa3\xaa\xcf\xc8\x78\x88\x8e\x6d\xa1\xd8\xc7\xab\x11\x96\xe7\x49\x08\xf0\x0e\x1d\x40\x1c\xba\xa8\xa2\x88\x27\xbb\x2e\xbb\x50\x9f\xe0\xa6\xf1\x9b\xe1\x9d\x7b\x3f\x15\x24\x46\xd0\xfa\x9c\xf6\x0b\xfd\xe3\xd5\xd3\x73\x5d\x9d\x99\x84\x00\xef\xd0\x01\xc4\xa1\xfb\x1b\xf4\xf0\x9e\x9e\x69\x68\x75\x44\x98\x4f\x09\x60\xd0\x78\xff\xe0\xf9\xa5\x4a\x37\x3a\x5b\xc7\x96\x38\x73\x32\x33\x2c\x76\x2b\x09\x01\xde\xa1\x03\x88\x43\xe7\x3d\x31\x18\x3b\xc4\x66\x50\x75\xeb\xa5\x85\xb9\x9e\x95\xfe\xb2\x90\xfa\xfb\x94\xc2\xd9\x99\xa4\x9b\x34\xe3\xce\xf7\x68\x0b\x75\x49\x08\xf0\x0e\x1d\x40\x1c\x3a\x66\xcf\x85\x1b\xed\xed\xe7\x5d\x66\xdb\x99\x76\x46\xce\x2b\xda\x68\x26\x4a\xcb\x9f\x71\x7c\xf1\x53\xc8\x2e\x93\x5f\xef\xe4\x61\x6e\x12\x02\xbc\x43\x07\x10\x87\x6e\xc7\xaf\x5d\xcd\xf4\x2e\x07\xe0\x85\xcd\x51\xe6\xf1\x39\xd1\x89\x01\x6f\x97\x89\x19\x87\x77\x33\xd6\x8a\xd7\x77\xd2\x88\x30\x5f\x22\x21\xc0\x3b\x74\x00\x71\xe8\x5e\x3e\x16\xe4\xb4\x8b\x8f\xd9\x31\x7c\x39\x51\xa5\x85\x5e\x84\x9e\xae\xe5\x83\x04\xfd\x3a\x33\xdf\x69\xf6\xf9\xa9\xdd\x54\x5e\xc6\x24\x04\xff\xcb\xa1\x1b\x39\x23\x57\x6a\xd2\x0c\xf9\x83\x67\x1b\x34\x96\xc6\x7c\xa4\x16\xef\x0c\xda\xfb\xc9\x34\xab\x87\x04\xeb\x69\xe7\x5f\xeb\xde\xf6\xdf\x40\x87\x38\x74\x99\x92\x3d\xd4\xe3\xd1\x3c\xd7\x02\x18\xa3\xf3\x4d\xdf\x25\x80\xb6\x1d\x1b\xb3\x54\x61\x05\x41\x9f\xc3\x9d\xd3\x3a\xd6\xe5\x29\xe3\x0c\xef\xd0\x01\xc4\xa1\xdb\x14\x51\x71\xe7\xac\x33\x9b\x79\xae\xed\xce\x44\xe6\x88\xd0\x93\xec\xf6\xef\x53\x5b\xee\xf1\x2b\xe4\x90\x17\x2c\x72\x7e\x79\x51\x5e\x32\xde\xa1\x03\x88\x43\x67\x5d\xc2\x78\x8a\xf7\xf6\xe7\xc0\x11\xa1\x57\x5a\x7a\x75\xd3\x2e\x76\x2f\xb2\x76\x6b\xd8\x47\x7c\xfe\x71\x69\x49\x3a\xc5\xf5\x2b\x2b\x09\x01\xde\xa1\x03\x88\x43\xe7\xbb\xd2\xe7\xc4\x48\xef\x31\x79\xdd\x5f\x7b\xbf\xda\x73\xe9\xcf\xb9\xc3\xf7\xaf\xba\x25\x39\xf9\xc6\xb1\xe6\xd5\xd2\x72\xbf\x54\x24\x21\xc0\x3b\x74\x00\x71\xe8\x9e\xb0\xfe\xa1\xaf\xfe\xe5\xd3\x52\x97\x79\xed\x79\xff\xee\xc9\x8a\xe8\x90\x77\xdf\xf3\x86\x58\x83\x39\xea\xda\x8d\xef\xfd\x7c\x62\x40\x42\x80\x77\xe8\x00\xe2\xd0\xf5\xec\x9b\x96\x7a\xe5\xf7\x96\x7a\xae\x30\xe8\xa9\xeb\xc9\xad\xbe\x0b\x5b\xa4\x07\x78\x7b\xe8\x34\x64\xa8\x52\x5a\xce\x25\x86\x52\x26\x10\xde\xa1\x03\x88\x43\x37\xb2\xf0\xdc\xc5\x3f\x63\xd8\xf3\xec\x93\x80\xdd\x73\x7e\xe2\x9f\xcc\x03\x36\xa5\xb2\x7a\xdb\x79\x25\x97\x94\xdf\xb1\xda\xb7\xf9\x0c\x09\x01\xde\xa1\x03\x88\x43\x67\xbe\xfb\xf2\xad\x1d\xdb\xfd\x18\xb6\xf7\x07\x5f\xed\xdc\xb1\xe3\x4d\x78\x85\xfd\x16\x05\xe6\x9f\xdb\x7e\x19\x2e\xa8\x1d\xcc\x6a\x31\x24\x21\xc0\x3b\x74\x00\x71\xe8\x22\x63\x93\x3c\x3c\xd2\x99\xf2\xaa\x23\xd5\xf6\xa9\xe5\xbc\xfd\xe6\x4b\x0e\xf7\xd7\x3d\x5f\xe1\xe2\xe2\xfd\xb1\xa1\x93\xb3\x83\x32\xb5\xf1\x0e\x1d\x40\x1c\xba\xbd\x06\x2f\xf4\x18\xea\x52\xdc\x1e\xc9\x36\x3e\x2f\x1d\x3c\x3f\xc1\xb2\x90\xfc\x89\x85\x5a\x65\x4b\x08\x21\x1f\xcf\xfb\x20\x40\x9a\x84\x00\xef\xd0\x01\xc4\xa1\xdb\xb5\x52\x93\xb3\x5b\x7b\xc2\x31\xf6\xd7\xad\xda\x16\x85\x1c\xa3\xd5\x8c\x86\x9e\x63\xeb\xb7\x67\x1d\x6c\x19\xcb\xff\x98\x5d\x77\x27\x21\xc0\x3b\x74\x00\x71\xe8\xac\xb4\xf4\x0b\xff\xb8\x57\x1a\xf3\x75\x08\x18\x5c\xbe\xce\x15\x66\xf6\x2e\x8f\x34\x9e\x19\x3e\x27\xbc\x71\x46\x33\x71\xfe\x13\xe5\x34\xf1\x0e\x1d\x40\x1c\xba\xf4\xb4\xc4\x8c\x63\xab\x36\xd3\x36\xc9\x27\x34\xc6\x83\x3f\xdb\x3f\x53\xa7\x6d\x8c\x4e\x70\x3c\x99\x6b\x50\xb6\x35\x82\xce\xed\x08\x09\x01\xde\xa1\x03\x88\x43\xb7\xca\x37\x2b\x20\xa6\x9a\xa5\xc2\x44\xa5\x32\x3f\x4b\x9b\x58\x74\x94\x26\xa0\x74\xbd\xeb\x09\xc7\x97\x16\x09\xe7\xaa\x83\xc1\x02\x24\x04\x78\x87\x0e\x20\x0e\xdd\xc9\xd9\xfc\x3a\xea\x11\x9a\xe1\x8c\x75\x23\xce\x4b\xfb\x56\x80\xca\xaa\xe2\x94\xa4\xc7\xdd\x62\x0b\xce\x8a\x29\x87\xe7\x6c\x96\x24\x04\x78\x87\x0e\x20\x0e\x9d\x7f\xb4\xd4\x67\x3e\x7b\xd9\x73\x5b\xbf\x3f\x9e\x4c\x9d\x3f\xd4\x91\x96\x5a\x75\x9d\xd5\x3d\xe0\x67\x00\x5d\x6a\xea\x92\xf6\x49\x09\x12\x02\xbc\x43\x07\x10\x87\xae\x6e\x35\x65\xff\xa9\x6d\xb9\x57\x2e\x86\x7c\x36\xee\xbc\xb8\x35\x34\x30\x27\xc8\xb0\xce\xc7\xc4\x7a\xb0\x74\xa0\xfd\xbb\xc7\x0c\x25\x51\xe3\x1d\x3a\x80\x38\x74\xdd\x57\x55\x85\xd5\x44\x99\xcc\x22\x96\xed\xfa\x85\xdf\x08\x06\x6a\x9c\xb9\x48\xc3\xe5\xfc\x52\xa3\x68\x67\xdc\x3b\x82\x7b\x0f\x2d\x09\x01\xde\xa1\x03\x88\x43\xd7\x6d\xce\xc6\x7c\x21\xff\xc8\xa7\x14\x6b\x8d\x49\xe3\xde\x0b\xad\xef\x3d\xee\xf8\x0a\x5b\x86\x6c\xd2\xab\x32\x2a\xb0\xb3\xe8\x83\x24\x04\x78\x87\x0e\x20\x0e\x9d\x7c\xd9\xb6\x9b\xe7\x2e\xd8\xad\x44\xdf\xe0\x89\x7d\x74\x42\x6e\x6b\xd5\x64\xc7\xa6\x1f\xd9\x9a\xf0\x6a\x41\x0f\x4f\xf1\x66\xb0\x9b\x84\x00\xef\xd0\x01\xc4\xa1\x8b\x7b\xfd\xc8\x9c\x3d\x63\x39\x54\xfd\xe0\x94\xff\x66\x5f\x06\xb5\xc7\xc7\x0d\x8e\xd0\x5c\x28\x38\x67\x92\xdb\x14\xa9\xf7\x36\x88\x12\xe8\xf0\x0e\x1d\x40\x1c\x3a\xbe\xd2\x64\x91\xbc\x44\x8f\xf1\x39\x81\x2d\xb7\x8f\x1a\x08\xfd\x7b\x5f\x77\xbc\x9a\xbb\xc2\x8f\x61\x56\xd8\x9d\x4b\xc7\xcc\x84\x85\x84\x00\xef\xd0\x01\xc4\xa1\x33\x35\x48\xed\xcf\x5d\xbe\xfd\x7c\x2d\x90\xe3\xfd\xc0\xd9\x01\xeb\x2e\xf3\x1c\xcd\x18\x26\xe5\xe8\xb2\x6c\x1e\x23\xf2\x82\x80\x03\x09\x01\xde\xa1\x03\x88\x43\x67\x49\x72\xe9\x38\x09\xf0\x51\xf1\x6f\xa9\xd9\x4e\x3f\xd6\xd1\xf3\xe6\xd8\xb6\xcf\xc7\x8b\x42\x5b\x74\x99\xe9\xee\x39\x71\x66\xd9\x92\x10\xe0\x1d\x3a\x80\x38\x74\xce\x4d\x03\x19\x73\xae\x97\x5f\xd9\x2c\xf1\xd3\xb4\xc4\x54\xed\xde\x37\xbc\x4c\x4f\x65\x18\x33\x32\x22\x90\x21\xfa\xf2\xa3\x34\xe5\x34\xf1\x0e\x1d\x40\x1c\x3a\x7a\xe0\xb2\x3b\xd9\x20\x25\x5f\x3e\xee\x71\x72\x7b\x8e\x5b\xe1\x02\x7f\xd3\xd9\x7c\xa1\xb6\xa0\x7a\x87\x62\x1f\x9f\x20\xc7\x8b\x24\x04\x78\x87\x0e\x20\x0e\x5d\xec\x88\x71\x49\x58\xcf\xe3\x21\xb6\xb3\x45\x27\xae\x6c\x3d\xda\x73\xa5\x20\x60\x5d\xf6\xa7\x9d\x8d\xbe\x3a\xc3\x3f\x8d\x33\x0f\x64\x48\x08\xf0\x0e\x1d\x40\x1c\xba\x54\x75\xcb\x33\x8f\x62\x2f\xfa\xd1\xdf\x16\x13\xb5\xcb\xb3\x52\x33\xfd\xae\x97\x9a\xfe\xe5\x0f\xf5\xd6\x72\xa1\xcb\xb4\x9b\x38\x29\x13\x1d\xef\xd0\x01\xc4\xa1\xb3\xcd\xcc\xfb\x74\xd0\x9c\xe6\x58\x6b\xce\x8f\x33\xc1\x12\x95\xb6\x9e\xb3\xd5\x26\x25\xef\x88\xdb\x1a\x8d\xaa\x86\x82\x7a\x3c\x94\xd3\xc4\x3b\x74\x00\x71\xe8\x3e\xac\x79\x98\x0c\x40\x81\xd6\x73\xa6\xff\xe4\x8f\x1a\x48\xfb\x19\x14\xbd\xe8\x1b\xb6\x0f\x11\x68\xb8\x91\xa3\x9e\x52\x1a\xc0\x4f\x42\x80\x77\xe8\x00\xe2\xd0\xf5\x95\x97\xdd\xab\x86\x9d\xc2\x37\x67\xf4\x55\xb6\xab\xd5\x0b\x72\xfa\xc4\x18\xfb\x7e\x9c\xce\xb7\xcc\xf9\x72\x8f\xc9\x7c\x99\x83\x84\x00\xef\xd0\x01\xc4\xa1\xfb\x2c\x48\x55\x50\xdd\x75\x36\x87\xd7\xc5\x50\x44\xa0\xc4\x72\x4e\xe7\x71\xc5\x4f\xd5\x17\x1d\x1d\x3f\xaa\x1f\x1d\xbf\x3d\x38\xa8\x42\x42\xf0\xbf\x1c\x3a\xf5\x0c\xc9\x87\xc6\x26\x3e\x9b\xb3\x72\xf8\x39\xee\x79\x3e\xda\x58\xd0\xdb\xab\xc9\x11\x7d\x8c\x26\x3b\xdf\x8f\xbd\xc1\x58\xee\xc0\x7f\x03\x1d\xe2\xd0\x85\xbf\xaf\x94\xda\xce\xa0\x75\x85\xb1\x87\x34\x3f\x50\xec\xf9\xf5\x3b\xcf\x16\x6d\x91\x4b\x52\xa3\xa3\xf6\x41\x53\xe7\x82\x39\xf8\x48\x08\xf0\x0e\x1d\x40\x1c\x3a\xad\xd7\xcf\x9d\x4f\xcc\xba\xfd\xad\x76\x9f\xcd\x2a\xaa\x1a\x0f\xe2\xbf\xba\xe8\x61\xbf\xb5\xfc\xea\xf2\xf1\xf1\x74\x5e\xce\x70\x82\x84\x00\xef\xd0\x01\xc4\xa1\xa3\x33\x8a\x63\xa4\xeb\xec\x9f\xbd\x52\xf2\x74\x6d\x96\x4a\xe4\xa7\xbf\x5b\xa9\x8c\x3e\xef\xf6\x34\x2a\x19\xdb\x92\xb5\xd5\xdf\x94\x4d\x03\xef\xd0\x01\xc4\xa1\xf3\xf7\xb9\xe5\xef\xb4\x6e\xf4\xb0\x27\x5e\xfa\x8d\xca\x70\xd6\x26\x5e\xb7\xc9\xac\x7a\x61\xd9\x3f\xdf\x78\xa6\xfa\x45\xc2\xa4\x28\xf7\x0f\xef\xd0\x01\xc4\xa1\xfb\x17\xf2\xb2\x50\x41\xc5\xf5\xc1\xd9\xe0\xda\x27\x29\xec\x3d\x57\xd2\x1b\x18\x9b\xaf\x6b\x99\x29\x65\x7c\xf6\x77\x7f\x76\x39\x89\xb2\x37\xe2\x1d\x3a\x80\x38\x74\xa3\x0e\x8a\xa1\x7e\x31\x0c\xbf\xb6\x6e\x2f\xb2\x8c\xd8\xdd\x3d\x5b\xd4\xbd\xa3\x6e\xef\x9a\xc4\x29\x41\x52\xe8\xfa\x82\xd8\x7b\x47\x12\x02\xbc\x43\x07\x10\x87\x6e\x0b\xc3\xeb\xee\x7b\x92\xd5\x1f\x32\xee\xfb\xfb\xcd\xc9\x5e\x5e\x4c\x5e\xd9\x6b\x74\xbf\xb7\xa0\x2f\xc3\xdf\x72\xef\x1c\x47\x2e\x65\x02\xe1\x1d\x3a\x80\x38\x74\x03\xf5\x32\x3a\x32\x8e\xba\x02\xe1\xec\xea\xcf\xf6\x67\x57\x1d\x99\x98\x34\x9c\xc9\xf7\xe3\xe5\xca\x2c\x97\x3d\x73\xc7\xeb\x3d\x25\x1d\xe2\x1d\x3a\x80\x38\x74\x3d\x86\x77\x8b\x6b\xd4\x6f\xec\x73\xcb\xe8\x1a\xdc\x72\xb4\x31\x9e\x6e\x9e\x25\xdf\x37\x55\x26\xbf\x28\xa1\xf3\xe2\xe4\x25\x1a\x0d\x12\x02\xbc\x43\x07\x10\x87\xee\xd7\x31\x83\xe9\xd0\xf5\xb5\x43\xa5\xc2\xc4\x76\xef\xb4\xe9\xed\x6a\x37\x0a\x85\xda\x0d\x58\x4f\x3a\xd2\xee\x39\xb6\xfb\xdf\x57\x75\x12\x02\xbc\x43\x07\x10\x87\xce\x68\x7a\x5f\xe8\x1b\x63\x2a\x8b\xc7\x17\xb3\x44\x0e\x33\x16\x95\x72\xde\xbf\x1a\x13\x31\xa1\xf0\xf9\x2d\x17\x9f\x2d\xb4\x7c\x42\xd9\xb5\xf1\x0e\x1d\x40\x1c\x3a\xf9\xa8\xfc\x43\x5f\x6d\xdd\xdf\xd2\x78\x26\x3c\x48\x3f\x74\xe1\x72\x84\xd7\x76\x09\xbd\xd6\x47\x03\xe7\x43\x27\xbf\xd6\x04\x7f\xa0\x5c\x66\xbc\x43\x07\x10\x87\xce\x30\xb0\x37\xff\xfa\xaf\x8d\x43\xf3\x87\x19\xe4\x3b\xba\xa2\xed\x66\x3e\x24\x8c\x0b\xf7\x0a\xb0\xd5\xde\x4f\x9b\x30\xb2\x16\x37\x21\x21\xc0\x3b\x74\x00\x71\xe8\xca\x5e\x8a\xe6\x84\x5f\x75\x2e\xd2\x78\x4e\x33\x17\x67\x4d\xe3\x18\xe7\xb4\xb0\xf9\x5f\xd3\x99\xbe\x8c\xd3\xdf\xfd\xdf\x4e\x49\xf1\x90\x10\xe0\x1d\x3a\x80\x38\x74\xf9\x65\xc5\x3c\xab\x97\x5e\xec\x6d\x94\x4e\x5c\xbd\x2c\x5b\xa5\xbb\x2e\xf8\xea\xdc\x9d\x9f\x5e\x2f\x24\x32\x2b\xc3\xde\xdc\xfb\x4a\x89\x4d\x78\x87\x0e\x20\x0e\x1d\xcf\xd9\xd8\x51\x3e\xff\xad\x47\x7d\xe1\xbe\xf2\x93\x37\x96\x05\xec\x9f\xdc\x2c\xbd\xc5\xd7\x2c\xab\xfc\xc3\x73\xde\xf4\xc1\x80\x16\x09\x01\xde\xa1\x03\x88\x43\x37\xd1\x2d\x2a\xd5\x5d\xa1\x72\x57\xaf\xc2\xff\x55\x7b\x77\xa2\x7b\xc8\x20\x08\x7d\x7e\xde\x6b\x9b\xb0\xff\xc0\xdc\x70\x40\xb7\x2a\x09\x01\xde\xa1\x03\x88\x43\xf7\x13\x4e\x5e\xa5\xbe\xc0\xf1\xb9\x29\x3c\x71\x53\xee\x9d\x5d\xa7\x9f\xac\x16\xfc\x9b\x53\xf2\x1f\xf8\x34\xf3\x85\x75\x4e\x3d\x9f\xf2\x64\x78\x87\x0e\x20\x0e\x1d\x1d\x63\x8b\x10\x9d\x5c\x30\x71\x3c\x95\xaf\x73\x82\xa3\x50\xa3\x75\xd5\xe0\x91\xf8\x46\x7d\xfb\xd8\xaf\xc9\xa1\x9c\x75\xc8\x46\x42\x80\x77\xe8\x00\xe2\xd0\x8d\xfe\x1e\xd0\xf6\x78\x1d\x29\xd2\xb0\x00\x69\xe7\xe7\x2c\x6a\xd9\xc8\x0d\x95\xc7\x1d\xaf\x63\x8b\xb6\x06\xe5\x49\x7c\x5d\x75\x25\x21\xc0\x3b\x74\x00\x71\xe8\xba\x77\x4f\x8d\x26\x78\x66\x95\xaa\x06\x33\x19\xa9\x87\xff\xca\xd7\xba\xfb\x34\x2a\x96\x69\xbc\xd9\x49\xfe\xc0\x05\xfe\x50\x79\x4a\x3a\xc4\x3b\x74\x00\x71\xe8\x62\x98\xdf\x4c\xfa\x1d\x71\x9e\x4c\x1c\xb9\x61\x64\xfe\x99\x4e\x42\x39\xc7\xaf\xc0\xe3\xb7\xc8\xde\xc7\x37\x32\xfe\x85\x9f\xf7\x51\x23\x21\xc0\x3b\x74\x00\x71\xe8\x72\xc1\xd6\x87\x3f\x73\x69\x8e\xfb\x26\x7c\x92\xdb\x52\xcc\xa3\x56\xb8\x98\x3c\x63\xd8\x5d\xfa\xd8\x44\xa9\xfd\x10\x57\xdb\x18\x27\x09\x01\xde\xa1\x03\x88\x43\xa7\xfc\xeb\x55\x75\xf8\x44\xf1\x25\x57\x7e\xcf\xa2\xc9\x19\xaa\xd3\x2c\xab\x9a\xac\x8f\xe4\x7a\xe7\xb3\x8c\xf6\xf7\xbc\x93\x4a\xa3\x14\x2d\xde\xa1\x03\x88\x43\xb7\xc0\x6c\x91\xad\x5b\x75\xb6\xcd\x72\x6f\x92\x85\x07\x14\xdd\xb3\xb3\xe9\x9b\xfb\x7a\x66\xdb\xdc\xad\x07\x2e\x9b\x9d\x34\x6c\xf4\x49\x08\xf0\x0e\x1d\x40\x1c\xba\x6a\x05\x83\xc2\x55\x81\xf0\x6b\x1f\xc1\xc8\xb4\xdc\xdf\x39\xcf\x03\xb2\x26\xac\x27\xfc\xef\x25\x5e\x2a\x7a\xfc\x6d\xfc\x92\x12\xe5\x6e\xe2\x1d\x3a\x60\x82\xfe\x3b\x98\x4e\x5f\xe1\xc1\xbf\x1d\x9e\x9f\xde\x1e\xac\x1a\xf7\x9b\x7e\x51\xe5\xfb\x52\x7b\xd6\xeb\xf4\x41\xeb\x47\x21\xc2\xbb\x7b\x6d\x48\x08\xf0\x0e\x1d\x40\x1c\xba\x3a\xa6\xef\x12\xdf\x2d\x6e\x7d\xd4\xa2\x23\xae\xb8\xff\x8a\x2b\xee\x61\x90\xf4\x1b\xd2\x59\x61\xd0\x81\x02\xdb\x84\x2b\xa4\x19\x48\x08\xf0\x0e\x1d\x40\x1c\x3a\x4d\x46\x79\x8e\xdd\xae\xee\x99\x5d\x87\x22\x77\xdc\x64\xb0\xe7\xeb\xbf\x67\xcd\xbe\x41\xef\x19\xbb\x45\x2d\x7a\x5d\xd2\xe7\x8b\x28\x09\x01\xde\xa1\x03\x88\x43\x47\xdd\xb3\xb7\x77\x2b\x7d\xd6\xfe\x6a\x2b\x35\x9f\xee\x9a\x9a\x4e\xae\xb7\x9c\xb7\x18\x2f\x7f\xb8\x7e\x35\xa3\xec\x9a\x94\xea\x45\x0b\x12\x02\xbc\x43\x07\x10\x87\xce\x99\x6f\xf0\x0c\x51\xd1\x64\x70\x8a\xc5\xd3\x3d\xca\xe5\xb9\xd5\x34\x8f\x66\xdd\x4a\xf2\xf8\x64\x73\x6e\xb5\x63\xae\x88\x90\x20\x09\x01\xde\xa1\x03\x88\x43\xf7\xc1\xed\x83\x68\x11\xe4\x25\x5b\x76\x30\xd9\x46\x7a\xf2\x48\x1d\xfa\x7e\xb0\x3e\x46\x5a\x42\x79\x49\x7c\xd4\x35\x95\x56\xff\x20\x09\xc1\xff\x72\xe8\x92\x3a\x34\xbd\xdf\x75\xcc\x3f\xd2\xb6\x33\x19\xd9\xbe\x23\x21\xb9\xd9\x36\x6a\xea\x81\xf1\xc1\xd5\xf9\xfc\x40\x6e\x4b\xc7\xbd\x5f\xff\x1b\xe8\x10\x87\xae\x9c\x47\xcc\xfe\x68\xe3\xb5\xcb\xf5\xc5\x24\xb3\xfe\x4e\x1f\x0d\x93\x9f\xf5\x81\xe9\xc2\xdc\x77\xcb\xb6\xa6\xdf\xd6\x2e\xd9\x46\x59\xa8\xf0\x0e\x1d\x40\x1c\xba\xee\x80\xe4\x27\xfb\x07\xa2\xf7\xd9\x56\xe5\x06\x6f\x52\x78\x60\x45\xd3\xe4\xeb\x78\xaa\xa8\x95\x36\xd7\x31\xc8\x39\xe6\x9c\x24\x25\x82\xe3\x1d\x3a\x80\x38\x74\xd7\x3d\x6b\x5d\x44\xed\x63\x57\x24\x2f\xb9\xf9\xdd\x81\x96\x96\xd2\x13\xbf\x77\x29\x0e\x9d\x6d\xf1\x08\x19\xae\x73\xf8\xe2\x48\xa9\x25\xbc\x43\x07\x10\x87\x4e\xb7\xee\x44\xa8\xe7\xbf\xb7\xbf\x59\x67\x9f\x6d\x69\x6e\x6e\x73\xd6\x1d\x96\xb1\x4f\xda\x3a\xd3\x5d\xe1\xf9\xaa\xee\xac\x3d\x0f\x25\x82\xe3\x1d\x3a\x80\x38\x74\x96\xf2\x3a\x11\x69\x4a\x7b\xd9\x58\x14\x8f\xa6\xef\xba\x93\x67\xb0\x4b\x7d\x7f\xec\xd6\x46\x87\x07\x3a\x45\x25\xb1\x22\x39\xbb\x14\x48\x08\xf0\x0e\x1d\x40\x1c\xba\xfd\xf6\x4a\xe9\xea\xd2\x54\xff\xe2\x0d\x9b\x54\xad\xcd\xbd\x5d\xd3\x97\x2b\x55\x67\xb8\xb8\xf7\x85\xa5\xb1\xa9\xc7\x73\x88\x5f\x20\x21\xc0\x3b\x74\x00\x71\xe8\x6e\x5f\x37\x2e\x35\x61\x11\x1b\x33\x65\x8a\x89\x2e\xb7\xaa\xf2\x5f\x75\x59\x75\x33\x37\x2c\xd9\xac\x6d\x9c\xca\x1d\x9b\xa3\x72\x8e\x84\x00\xef\xd0\x01\xc4\xa1\xcb\xbe\x93\x31\xc9\x9f\xf5\x99\xe6\x19\x8d\x75\xc1\xd2\xd4\xeb\x73\xdf\x38\xc2\xd8\x4d\x63\x0e\xfd\x11\xaf\x08\xbb\x1d\xdc\x25\x26\x45\x42\x80\x77\xe8\x00\xe2\xd0\x3d\x17\xd7\xde\xaf\x5c\xc6\x9b\x33\xcf\x4b\xcf\x6d\x95\xa0\xfd\xf2\xfa\xf9\x61\xf9\xe7\x77\x9d\xb9\x05\x76\xf3\x9e\xf2\xbf\x56\xa3\x48\x42\x80\x77\xe8\x00\xe2\xd0\x29\x58\xef\xa6\x2d\xfe\x18\xe0\x72\x72\xa9\xe1\x67\x55\xa4\xc7\x73\xb7\x66\x2a\xd3\x42\xee\x02\xa0\xff\x57\xc8\x62\xee\x72\xf8\x76\x12\x02\xbc\x43\x07\x10\x87\x6e\x75\x63\xf4\x7d\xa3\x94\x51\xf4\x75\x7e\xd7\xea\xa3\xfa\xf1\xdc\xc9\x46\xe4\xf5\x99\xc9\x22\x0d\x81\x3d\x42\xb9\x15\xfb\xd3\x01\x09\x01\xde\xa1\x03\x88\x43\xd7\xbb\x2d\xe2\x41\x62\x8d\x37\x63\xb0\x4d\xcb\x2f\x59\xc6\xcf\xcc\x35\x6c\x83\x8d\x8f\xe8\x8b\x53\xfb\xaf\x68\x7a\x0b\xce\x5e\xa3\xcc\x46\xbc\x43\x07\x10\x87\xee\x8f\xa2\xf0\x94\xe5\x77\x3b\xaa\xf1\x84\x5c\x17\x75\xc3\x87\x1f\x8e\xa7\xd2\x78\x0c\xd0\xbe\xf9\x24\x55\x69\x2f\xbe\x59\x22\x81\x91\x84\x00\xef\xd0\x01\xc4\xa1\x7b\x45\xb8\xb3\xb6\x49\xcd\xc8\xb0\xdc\x92\x76\x2a\x3d\xf5\xdb\xb4\x5e\xe9\x7d\x7f\xdf\x2d\x11\x7b\x6a\xc5\xa3\xf9\xe1\xfa\xe6\xec\x24\x04\x78\x87\x0e\x20\x0e\x5d\x63\xda\x9e\x54\xaf\xb8\x4c\xbb\x3f\xd7\x62\x93\x98\x2e\x26\x37\x84\x39\x97\xde\xe2\x71\x12\x66\x28\x4e\xae\xec\x8a\x5f\xb4\x15\x21\x21\xc0\x3b\x74\x00\x71\xe8\x6a\x6f\x3c\x37\x3f\xd1\x09\xc7\x19\xf7\xfa\x08\xbf\x50\xec\xdd\x2b\xce\xfa\x7e\xa4\xc2\x36\xb5\x99\xf7\x65\xc0\xfa\xca\xb1\xb8\x6d\x24\x04\x78\x87\x0e\x20\x0e\x9d\x31\xbb\xad\xe2\xa2\xb0\x3f\x77\x40\xa9\xe8\x0d\x1f\xbd\x22\xc9\x95\xc3\x01\x0f\x56\x68\x24\x5c\x23\x7e\x7f\xb6\x6b\x0c\x93\xdc\x43\x42\x80\x77\xe8\x00\xe2\xd0\x31\xa6\x8d\xfc\x53\xc8\x09\x58\xe3\x76\x3f\x39\x20\xd3\x98\x54\xcf\xc1\xef\x75\x45\x59\xaa\xe0\x25\xcf\x70\x56\xc9\x81\xc8\x15\xca\x87\xe1\x1d\x3a\x80\x38\x74\xd2\xa2\xc5\x46\xf1\x11\xd4\x95\xec\xb7\xfd\xea\x79\x4e\x1d\xf9\x55\xfd\x8c\xb6\x83\x4b\x5e\x59\xf9\xa2\x60\x8a\x87\x46\x7a\x25\xa5\x34\xf0\x0e\x1d\x40\x1c\xba\x33\x0f\x13\x5d\x67\xd4\xcb\xc4\xab\x7e\xb7\x9f\xa0\x92\x1a\xdc\xf5\xce\x70\xcb\x5b\x49\xe9\xe8\x3a\xbf\x5a\x03\xb1\x5d\x87\xb5\x4e\x93\x10\xe0\x1d\x3a\x80\x38\x74\xcc\x2b\x2e\x11\x86\xed\x2c\x69\xe5\x07\xa7\x0a\xac\xa9\x8a\x1a\x57\x3f\x5b\x1e\x95\xd6\x31\x4d\xbe\x69\x27\x34\x24\x52\xe2\x41\x59\xea\xf1\x0e\x1d\x40\x1c\x3a\x45\x20\x21\xd6\xcd\x39\x78\x2d\x28\x5d\xb9\xf6\xda\xb0\xcb\x44\xbd\xbe\x98\xe7\x21\x6b\x01\x25\x67\xd9\x23\x1e\x03\xa9\x90\x8b\x84\x00\xef\xd0\x01\xc4\xa1\xd3\xf4\xff\xb5\xce\x7c\xc2\xb0\x84\x25\x60\xf6\x8e\xe4\x6d\x3b\x6a\xe0\x33\x94\x7a\x41\xf7\xdb\xda\xeb\x55\xc6\x1e\x95\xc8\x09\x4a\x08\xc6\x3b\x74\x00\x71\xe8\xf6\x7d\xcd\xfb\xfe\x7a\x81\x5b\xdd\xf1\xfa\xd7\x9b\xa0\xe8\x47\xcc\x62\xeb\x7c\x87\x78\x46\xfa\xd6\x42\xa5\xe9\x17\x27\x7b\x7f\xda\x91\x10\xe0\x1d\x3a\x80\x38\x74\x15\x35\x9e\xf7\xff\xb2\xbf\xe7\xc8\xb9\x79\xf4\x95\xaf\xdf\x22\xef\xfa\xfd\x96\xb6\x80\xb9\xdc\xb8\x3f\x1f\xfd\xfb\x75\x3f\x6d\x10\x24\x04\x78\x87\x0e\x20\x0e\x1d\xd7\x8d\xfd\x9d\xb3\xe5\xaf\x3a\x63\x7e\x2d\xee\xb1\xd8\xcb\xf8\x5b\xf8\xec\x51\x5b\x7b\x5a\xde\x99\x5f\x3e\x47\x4f\x8e\x9e\x9c\xd9\x4b\x42\x80\x77\xe8\x00\xe2\xd0\x2d\x89\x8d\x56\x5d\x58\xfb\x59\x28\xf4\xa1\x71\xe9\xfe\x97\xf4\xb3\xdd\xff\xe2\x07\x45\xd7\xaf\x88\x59\x2a\xdc\x5f\x76\xf6\x15\x3d\x46\x42\x80\x77\xe8\x00\xe2\xd0\xed\x62\xe4\xce\xac\x6e\xe1\x2a\xad\x52\x52\x31\x4a\xdb\x59\xca\x55\x9d\x15\x9e\x71\x01\xfc\x39\x2f\x7a\x4c\x82\xe9\x6c\xad\x34\x35\x09\x01\xde\xa1\x03\x88\x43\xc7\xf1\xac\x47\xdb\x97\x4e\x42\x28\xaa\xb6\x2f\xee\xb4\x9a\xd6\x56\xef\xd6\x66\x29\x2d\x87\xf6\x68\x66\xd6\x7d\x36\x7e\x43\xe3\xda\x24\x04\x78\x87\x0e\x20\x0e\x5d\xec\xf6\xa6\x83\xae\xe6\x1b\x75\x02\xab\xdf\x52\xe7\x24\x8e\x08\x66\x04\x8c\x90\x59\x17\x8e\x6f\xd9\x97\xf2\xfe\x64\xd0\x07\x4f\x66\x12\x02\xbc\x43\x07\x10\x87\x4e\x5b\x5c\x9b\x2d\x83\xe6\x8c\x69\x91\xf9\xf1\xb5\x12\x26\xff\x3e\x1e\xad\xc5\x7f\x09\x0c\xbd\xc3\x36\xc1\xe7\x36\x7e\x16\xab\xd3\x92\x10\xe0\x1d\x3a\x80\x38\x74\x09\x44\x2a\xc3\xe1\x25\x0f\xbd\x22\xe1\x30\xdb\xcf\x5e\x29\xa2\xf2\xd2\xf5\x39\x2f\x2c\x0b\x9f\x6e\x54\xfd\xb6\x0f\xbc\x78\xc4\x9d\x84\xe0\x7f\x39\x74\x42\xb7\xa9\x69\x9c\x68\x26\x07\xfd\x92\x2f\xb3\x86\x1c\x6c\x2d\x4e\xed\x49\xa8\xa2\xea\xac\x15\x8c\x0a\xfc\x91\xe0\xbf\xfe\xf4\xfb\x7f\x03\x1d\xe2\xd0\x8d\xe8\x2a\x39\x3b\x51\xdf\x3d\x6b\x2d\xe9\x37\x6d\xa1\xdb\x53\x76\x7b\xd8\x46\x65\x7a\xa1\xe8\x5e\x60\x0c\x67\x5f\x4c\x92\xb6\x24\x09\x01\xde\xa1\x03\x88\x43\xb7\x5f\xa3\x40\x1a\x14\x04\xf6\x98\x97\xde\x30\x77\x0a\xa0\xfa\x9b\xe2\x53\xff\xf2\x0d\x9f\xbb\x7d\x49\xea\x2e\xe1\xfe\x6c\x71\x4a\x36\xc5\x3b\x74\x00\x71\xe8\x64\x76\x39\xc3\x1c\x0d\x56\xee\x6d\x9d\x87\x94\x53\x54\xcf\x4c\x45\xde\x4e\x18\x39\x13\x22\x57\x9f\xaf\xbc\xac\xb0\x89\xde\xdb\x90\x84\x00\xef\xd0\x01\xc4\xa1\xdb\x35\x11\xa9\x2a\x9d\xa9\x7f\x22\x7a\xe1\x84\xd6\xef\x87\x2c\x2a\x69\xef\x7a\x66\x9f\xff\x18\x57\x49\xd6\xca\x79\x7b\x5a\x62\x3f\xe5\xc4\xf0\x0e\x1d\x40\x1c\x3a\xeb\xb6\x4d\xc1\xff\x3c\xdc\x0f\xdb\xbe\xbf\xb6\xfe\x63\x88\x9e\x33\xb1\xed\xdd\xb6\xde\xad\x49\xa1\x5d\xd5\xfa\xbf\x6a\x0f\x7f\xbb\x48\x42\x80\x77\xe8\x00\xe2\xd0\x71\xd1\xb4\xdc\x21\x3e\x3c\xcc\x8e\xaa\xbb\xcf\xf3\x44\x81\x3d\x75\x07\x33\x33\xcb\xc1\xa2\xbc\xa8\xbf\x54\x6c\x6e\x7f\xb5\xf4\x8e\x92\x10\xe0\x1d\x3a\x80\x38\x74\x8e\x73\xef\xf7\x2a\x3b\x8e\x00\x17\xab\xc5\x08\x16\xce\xcc\x3b\xb4\xbb\x34\xaa\xaf\xfa\x14\x05\xac\x5e\xfd\xf6\xfa\x37\x83\x34\xa5\x35\xe3\x1d\x3a\x80\x38\x74\xc5\x37\xa7\x66\x0d\x0a\x4b\xda\xb6\xd2\x66\x16\xb6\x76\x35\xad\x33\xfc\x88\xf1\xaa\x48\xb5\x7c\xb2\xaf\xbe\x26\xf8\x73\xef\xe7\xc3\x24\x04\x78\x87\x0e\x20\x0e\x9d\xd5\xb9\xfc\xc8\x4f\x0b\xd7\x07\x82\x58\x66\x17\x3e\xc6\x31\x04\x5f\x0d\xd0\x2b\xd4\xbd\xa4\x53\x22\x50\x66\x1e\x70\xdc\x7b\x84\x12\xcf\xf1\x0e\x1d\x40\x1c\x3a\x91\xbe\x35\xa1\x3b\x7a\x22\xa4\x51\x10\x4f\xdc\x40\x64\xf6\x8f\x00\xeb\xa7\x7c\xce\xee\xa2\x39\x37\xc7\x7f\x3f\x3c\x17\x5e\x25\x4d\x42\x80\x77\xe8\x00\xe2\xd0\x71\xcd\x79\xfb\x28\xf7\xe5\xdc\xdb\xa6\xf4\x2c\x0b\xe8\xd3\x7d\x2e\x7d\x50\xb3\x12\x3c\x2d\x21\x7d\x20\xe8\x30\x77\x40\x9f\x33\xa5\x35\xe3\x1d\x3a\x80\x38\x74\xfa\xaf\x05\xb2\x4a\xb3\x27\x84\xd8\x65\xff\x49\xee\x14\xea\x50\x54\x3c\x91\x43\x1d\xea\x7d\x5a\xd7\x69\xee\xd3\x3b\x1d\x5f\xcb\xcd\x24\x04\x78\x87\x0e\x20\x0e\xdd\xc7\x6f\x92\x1f\x5b\xd4\xec\x1f\xc5\xf7\x71\x2a\x0e\xf4\x6d\xf1\x16\x1d\xd5\x70\x1e\x2b\x1b\xe7\x3e\x7d\x51\xca\x78\xf4\xfb\x03\x33\x12\x02\xbc\x43\x07\x10\x87\x8e\x77\x49\x40\xe7\xc7\xe6\xf4\x34\x83\x19\xa1\x6a\xfd\xc0\x70\x33\xce\xd6\xe7\xda\x3b\x0e\x6e\xb3\x13\xed\x6b\xbc\xe2\x93\x20\x28\x4c\x42\x80\x77\xe8\x00\xe2\xd0\xad\x1d\x0f\xb3\x48\xcb\x5e\x4c\x8e\x2d\xb1\xf9\x68\x36\xb9\xfd\xaf\xcb\xf3\x22\x7e\x03\x91\x07\xc7\x33\x96\x13\x83\x6d\x66\xfd\x77\x90\x10\xe0\x1d\x3a\x80\x38\x74\x9e\x7d\xcc\xf4\xfc\xdb\xbb\x1c\x60\x44\xdb\xf4\x44\x72\x42\x7c\xda\x6d\xfa\xc7\xbf\x0f\xdd\x7b\x1a\xfc\xcd\xdc\x75\x60\xec\x03\x25\x36\xe1\x1d\x3a\x80\x38\x74\xbb\x76\x18\x85\x33\x41\x65\xd6\xd7\x32\xaf\xc7\x23\xbe\xbf\xf5\xb3\x2a\xb1\x90\xf6\x75\x6b\xd4\x8a\xce\x67\x9d\x95\xc9\xcc\x3c\x40\x42\x80\x77\xe8\x00\xe2\xd0\xb5\x4a\x9d\x76\x53\xe6\x6e\xbb\x2d\xed\xd4\xed\x78\xca\xf2\xde\x48\xec\xc4\x9b\x4b\x47\x6f\x7d\x1f\x19\x56\x66\x6b\x8f\xa2\x97\xd7\x21\x21\xc0\x3b\x74\x00\x71\xe8\xee\x5b\x86\xca\x99\xa7\xcb\x5e\x5e\xdd\x51\x29\x59\x97\x26\xa5\x3f\xa9\x77\xc6\x91\xb0\x97\x98\x55\x82\x55\xde\xd1\x71\x66\x4e\x24\x04\x78\x87\x0e\x20\x0e\x5d\x67\x01\xd7\x3e\x97\xc0\xe3\x22\x3e\x1e\xd6\xd7\x78\x2a\x99\xda\x64\xce\xde\x30\x8c\xfd\x73\xc6\x46\xc9\xbc\x48\xfc\xf3\x89\x87\x94\xd9\x88\x77\xe8\x00\xe2\xd0\x75\x84\x6d\x0f\xe9\xf9\xdc\xfc\x53\x9a\xba\x4b\x36\xe0\xe1\x0e\x70\x9e\x5a\x4c\xa4\x3f\x6b\xe7\xb3\xb7\xc5\x2a\xf7\xbf\xb6\x5a\x6f\x21\x21\xc0\x3b\x74\x00\x71\xe8\xd4\x9f\x7e\xfb\xf1\x62\xa9\xf1\xa2\xdc\x46\xd9\xc3\xb4\x36\x97\xba\x23\x8e\x47\x4e\x45\xb3\x9e\xca\xc9\x70\x7b\xb8\xe5\x76\x62\x26\x27\x09\x01\xde\xa1\x03\x88\x43\xe7\x97\x58\x9f\x96\xb6\xf6\x4d\x60\x97\xf0\xad\x75\xda\xf4\xe8\xa4\x64\xba\x9a\xb0\x96\x56\x37\xce\xb1\x9d\x67\x16\x4d\x68\x9c\x29\x53\x1b\xef\xd0\x01\xc4\xa1\x3b\x69\xad\xb3\x3c\xf4\xe6\xef\xa5\x91\xcf\x55\x5f\xbe\x99\xbe\x7f\xfe\x7b\x3c\xd3\x58\x52\x22\x67\xb7\xef\xc9\x6a\x29\xc6\xfa\xff\xff\x67\x37\x78\x87\x0e\x20\x0e\x1d\x9d\x5c\x0f\xdd\xbf\xda\xb4\x0f\xa6\x15\x05\x79\xc6\x1c\xd4\x6c\x55\xbe\xc5\xcd\x4b\x3e\xe2\x5b\x22\xd7\x7f\xd6\x1c\x9a\x5f\x11\x23\x21\xc0\x3b\x74\x00\x71\xe8\x9e\xb2\xde\x2e\x67\xba\x9e\xb4\x11\xff\xcb\x53\x4c\x8d\x71\xc6\xdb\x53\x4e\x3f\xb7\xe6\xc3\xb6\x1b\xb5\x4c\x4f\x59\x63\x64\xed\x29\x59\x1f\xef\xd0\x01\xc4\xa1\x8b\x32\x91\xd9\x72\xba\xb7\x82\x6a\xd3\xbd\x7b\xec\xa7\x7d\xbc\x36\xc2\xd3\xc0\x94\x93\xcb\x64\x48\x79\xa3\xcd\xc4\xb4\x66\x93\x2c\x09\x01\xde\xa1\x03\x88\x43\x27\x1f\x51\x76\x83\x46\x5b\x74\xc5\x5d\x49\xb4\xf2\x6b\x1e\x87\xec\xea\xc8\x05\x99\xeb\x7b\x0e\xd5\x5b\x1b\x0a\x6d\x1f\x4c\xed\xd5\x27\x21\xc0\x3b\x74\x00\x71\xe8\x4c\x06\x77\x2e\x9f\x2f\x78\x97\x98\xb5\x6b\xdc\xc9\xe7\xd2\x87\xa2\xd2\xcd\x51\xb7\x6f\xf7\x92\xb4\xe2\xb2\x9a\x87\x9e\xe5\xc8\xca\x93\x10\xe0\x1d\x3a\x80\x38\x74\x19\xb9\x1c\x96\xec\xdf\x47\xbe\x3e\x8f\x6a\x3f\xf4\xfb\x2c\x8f\xc9\x95\x0d\xae\x87\x9a\x3c\xf7\xc4\x1e\x67\xeb\xff\xf6\x1b\xb4\xa7\xac\x34\x78\x87\x0e\x20\x0e\xdd\x69\xa9\xf5\xbf\x7b\xdd\x98\x8b\x13\x8c\x53\xe4\x07\x1b\x3d\x0e\x88\x7f\x55\x88\xf5\x3c\xf8\x69\xff\x6c\x7d\xc7\xc6\x50\x7a\x99\x2e\x09\x01\xde\xa1\x03\x88\x43\x37\x50\x94\x1b\x7e\x48\x36\x2c\x46\x28\x50\x6a\x8d\x4d\x8f\x55\x32\x5c\xe2\xc4\x5e\xc9\x86\x25\x01\xff\x1c\x7b\x91\xd1\xb1\x3a\x40\x42\xf0\xbf\x1c\x3a\xf3\x79\xeb\x97\x1f\xb2\xfe\xda\x09\x49\x9c\xe9\x98\xe8\xb8\xf5\x20\x7b\xa9\x88\xff\xcb\x8f\x66\xce\x9c\x1f\xb4\xf5\x1c\xb3\xff\x6a\xff\x1b\xe8\x10\x87\xae\x9f\xd7\x40\x3c\xf0\x74\x59\xd7\xf3\x87\xbc\x69\xe1\xce\xe2\x2b\x62\xda\x77\xb8\xbe\x1f\xe6\xee\xdd\xf4\x80\x45\x20\xd4\x70\x9b\x01\x09\x01\xde\xa1\x03\x88\x43\xf7\x32\x79\xf2\x7c\xb3\x4d\xcc\x38\xc9\x4f\x5f\xb7\xbd\x6b\x7e\x3e\x82\x99\x68\x11\x55\xbf\xf8\x58\x27\x48\x37\xfd\xf0\x1f\xcd\xad\x24\x04\x78\x87\x0e\x20\x0e\xdd\xb2\xec\x26\xfb\x19\x85\xad\xb5\xbb\xf9\x38\x7e\xbe\x97\x04\x74\x52\xb6\xb7\x02\x44\x55\x4b\x56\xcf\xf6\x52\xed\x74\x8e\xef\xdb\x4e\x42\x80\x77\xe8\x00\xe2\xd0\xb9\x6b\x31\x1f\x15\x58\x7a\x76\xb2\x3a\xda\x38\x31\x59\xd7\x3c\x55\x9b\xad\xdb\xe8\x07\x0c\x09\xd1\xfa\x7e\xe8\xd7\xbd\x53\x1a\x6a\x24\x04\x78\x87\x0e\x20\x0e\x9d\xd0\x8e\xf9\x5f\x6d\xe7\x1f\xb9\x2b\x0c\xeb\xd2\xac\x05\x85\xcf\x3a\x39\x1e\x69\xd5\x16\x6a\xb9\x3b\xd4\x28\xbf\x23\x5d\xb5\x9a\x92\x27\xf0\x0e\x1d\x40\x1c\xba\xb8\xc6\x83\x1e\x13\xbb\x8e\x7a\xd6\xf4\x0d\x25\xa4\x7e\x8a\xea\x7c\xee\xff\xb1\xfb\xe5\xef\x72\x8e\x85\x15\xfa\x4f\x53\x6f\xc2\x18\x49\x08\xf0\x0e\x1d\x40\x1c\xba\x98\xd5\x63\x4e\xe9\xd0\xf4\xc4\xe7\x63\xaf\x64\xc4\x4a\x59\xee\x7b\x67\x06\x7d\x75\x62\x95\xea\xd4\x89\x4f\x30\x4b\xae\x8d\x50\x27\x21\xc0\x3b\x74\x00\x71\xe8\x86\x56\x4e\x5d\xd2\x33\x74\x91\xbc\xa5\x96\xd8\xe6\x74\x20\xc2\xcf\xf0\xdc\xb1\xb3\x37\x6b\xad\xe7\x72\x15\xcb\x53\x05\xb6\xad\x39\x90\x10\xe0\x1d\x3a\x80\x38\x74\x12\x89\xa7\x7e\x7f\x6f\xd2\x73\xe2\xed\xda\x75\xd9\xa3\x66\xde\xe3\xc2\xf9\xf0\xdb\x17\x59\x7b\x4b\xe4\x1b\x7f\x38\x1b\x49\xa5\x73\x90\x10\xe0\x1d\x3a\x80\x38\x74\x76\xe9\x69\xc1\x6f\xa5\xc6\x5e\xa4\xfd\x8e\x2a\xd8\x3d\x97\xfd\xd9\x5b\xab\x53\xbf\x2a\xef\xf7\xc2\xda\x78\x74\xc4\x31\x7f\x25\x48\x42\x80\x77\xe8\x00\xe2\xd0\x45\xb2\xfe\xdc\xaf\xb7\x4d\x3b\x87\x34\xde\xaf\x6b\xbe\x4d\xa5\x57\x4e\xa4\xfa\x02\x3f\x93\x9f\x31\x4b\xea\xad\xc3\x4c\x29\x0b\x32\x24\x04\x78\x87\x0e\x20\x0e\xdd\xf7\x4b\x92\xd7\x73\x5e\x1f\x5a\xcc\xf8\xfe\xb0\xa6\x72\xdf\xfc\x6d\xfd\x12\x33\x8d\xe0\x77\x27\xf3\x6c\xab\xa5\x54\x0c\xd3\xdc\x29\x7d\x1e\xef\xd0\x01\xc4\xa1\x1b\x8d\x34\x12\x5e\x7a\xb9\x51\x78\x6c\xd7\x81\x84\x13\x3f\x35\x73\xde\x1d\x6b\x79\x16\xc2\x5c\xf9\x3c\x40\xfd\x5d\xab\xe6\xf4\xba\x35\x09\x01\xde\xa1\x03\x88\x43\x67\xfa\xd9\xed\x82\xac\x6c\xdf\xe7\x81\x8e\x90\xe3\x63\x0a\x1b\xa9\x5f\x82\x8e\x0a\x76\x6b\x95\x0f\xc4\xd9\x7c\xb6\x4e\x3a\x64\x41\x69\xcd\x78\x87\x0e\x20\x0e\x9d\xf6\xd3\x01\x2f\xdb\x37\x69\x3c\x3d\x0d\x3c\xd3\x8b\x53\x1a\xd4\xdb\x5b\xcf\x9f\x86\x47\xef\xdd\xfb\x78\x68\xf3\x93\xa8\xc8\x54\x4a\x08\xc6\x3b\x74\x00\x71\xe8\x3a\x94\xce\x0f\x7a\x7b\x17\x0f\x9a\xfe\xd3\x92\x15\xce\xdf\xcf\xd2\xca\x23\xe4\xe5\x1a\x6b\xed\xbf\xc6\x90\xac\xa8\xcd\xb7\xd5\x92\x84\x00\xef\xd0\x01\xc4\xa1\xab\x37\x75\x3f\x7f\x5b\x3e\x6d\xd3\xfe\xbb\x2c\x96\xa1\xeb\x16\xce\xa7\xb3\xfc\x45\xa8\x54\xfd\xc7\x13\x2f\x76\x4a\x3e\x2a\xfc\x60\x4c\x42\x80\x77\xe8\x00\xe2\xd0\x65\xd2\x04\xc4\x27\xd9\x5e\x97\x6e\x16\xa6\xeb\xce\x3e\xc0\x2e\x2b\x7c\x57\xe5\xd3\xaf\xbb\x2d\x47\x98\xbe\xdd\x18\x8e\xb4\xa8\x3f\x43\x42\x80\x77\xe8\x00\xe2\xd0\x79\xe5\x7a\x57\xb7\xad\xdd\x69\xca\xb9\xe0\x46\x3d\x1b\xb8\x1e\x9e\xe8\xb3\xbc\xde\x71\x45\x28\x83\xfe\xd2\x59\xdf\x52\x7b\x55\xca\x38\xc3\x3b\x74\x00\x71\xe8\x7c\xba\x04\x8f\x33\x8d\x6d\x5a\xec\x91\x35\x1b\x55\x31\x5d\x3f\xd7\xbf\x60\x14\x73\x53\xfc\xc6\xc7\x87\x0f\x46\xcd\xa9\xca\x6d\x28\x37\x00\xef\xd0\x01\xc4\xa1\x7b\xbe\xdd\xac\xab\x91\x3d\x3d\x3f\xee\x59\x9e\x70\x1c\x07\x87\x6f\x10\xcb\xe6\xad\xaf\xc8\xb9\x7e\x51\x21\xda\x1b\xac\xbb\x16\x44\x48\x08\xf0\x0e\x1d\x40\x1c\x3a\x9b\x94\xb7\xfc\xbb\xb4\xd8\xee\x1e\xd4\x7b\x4a\x93\x79\x28\x7e\xf5\xd1\xd1\xb4\x5d\x34\x71\x27\xf3\xbd\x1e\xba\x84\xdd\xb5\xe6\x33\x21\x21\xc0\x3b\x74\x00\x71\xe8\x8e\xee\xd5\x98\x3c\xf7\xea\x2b\x9b\xd2\x01\xaf\xfb\xa2\xe3\xeb\x65\x76\x8d\x57\x4d\x8b\xbf\xf9\xb9\x36\x07\x30\xde\x2a\x30\x4d\xa7\x1c\x00\xde\xa1\x03\x88\x43\x67\xe6\xb8\xf8\xf8\x25\xd3\x7e\x9a\xa8\xc1\x3d\x07\x94\x2b\x5b\xd4\xf5\x2b\xf7\x7c\x3a\x37\x74\x55\xb8\x74\x5a\xf3\x44\xff\x09\xd9\x2b\x24\x04\x78\x87\x0e\x20\x0e\x5d\xd3\xed\x07\xdf\x3b\xaf\x13\x71\x99\x5e\x57\xbb\xd8\x46\xc5\x4b\x5d\xef\x0c\x1c\x52\x4e\x60\x2f\x98\xee\xa3\x7a\xf7\xe3\x6c\xb2\x05\x09\x01\xde\xa1\x03\x88\x43\x17\x2a\xa1\x4d\xfa\x7b\x9a\xf1\xb0\x15\x14\x8f\x6b\xc8\x2d\x28\x76\x06\x2a\xa9\xd4\x65\x12\xdb\x6e\x75\xdb\xa8\x3b\xcd\xf2\x0b\x92\x10\xe0\x1d\x3a\x80\x38\x74\xd7\x8f\x2c\x18\x35\x6f\x3e\x91\x57\x41\x3f\xd7\x9c\xde\xfe\x6d\x91\x67\xb7\xbb\x97\x95\x65\x73\x4b\x65\xfd\xbf\x1d\x8f\x97\xec\x6c\x48\x08\xf0\x0e\x1d\x40\x1c\xba\x0f\x4b\xef\x9f\x56\xf9\x69\x97\xee\xa0\xda\xe2\x53\xe1\x20\xea\xce\x48\xd3\xa1\xe9\xf8\xe1\x82\x82\x98\xa1\xa3\xed\xb9\x1d\x0a\x94\x9d\x12\xef\xd0\x01\xc4\xa1\xcb\x58\xe9\xfa\x24\xbb\xea\x97\xab\xbc\x99\xbd\x3e\xc5\xc0\xca\xfc\x83\x6e\x88\x32\xcb\xdd\x7e\xa5\xdd\x7f\x1d\xc2\x74\xf3\x4b\x29\x73\x13\xef\xd0\x01\xc4\xa1\x8b\xba\x13\x2b\x6b\x6e\x58\xa1\x68\xe3\x77\x87\x76\xd7\xdd\x98\xf9\xcc\xac\x3d\x8c\x89\xbd\x1f\x73\xe4\x8c\x14\xb8\xef\xbc\xde\x44\xe9\x1a\x78\x87\x0e\x20\x0e\x9d\x36\xf5\x2f\xb3\x0d\xbb\xde\xba\xa2\x89\x0d\x1d\x8e\xde\xdd\xd9\x34\x46\x6c\xc3\x72\x42\x36\xcd\x73\x21\xdf\x34\xa6\xbb\xdb\x29\x77\x13\xef\xd0\x01\xc4\xa1\x7b\x09\xfd\xde\x75\xd4\x09\xd2\xa8\xee\x3a\x30\x18\xa0\x6f\x25\x30\xbc\xb8\xf5\xde\xef\x19\x2b\xff\x6d\xf1\xeb\xab\x6e\x97\x0b\x05\x48\x08\xfe\x97\x43\x57\xd9\x54\xbc\xdf\xa3\x34\x84\x79\xfd\x47\xb8\xd8\x42\xdf\xcf\x8e\x76\xdf\xec\x61\xfe\x03\xdf\xe6\x61\x93\xc3\x1b\x85\x1d\x42\x65\xff\x0d\x74\x88\x43\xe7\xb9\xa7\x5c\x5e\xa3\x71\x54\x6d\x62\x53\x64\xd5\xb2\x86\x80\xe5\x4e\x87\xd7\x0d\xed\xfb\x5d\x16\x12\x78\xac\x5d\xad\x52\x54\xb9\x48\x08\xf0\x0e\x1d\x40\x1c\x3a\x8e\xd0\xbe\xd7\xf4\xde\xdb\xfe\x19\xbd\x9a\xb4\x78\xd8\xe1\xd6\x4c\x3a\xbc\x2a\xef\x76\x8e\xb8\xef\x38\x32\xfe\xa5\xa0\x5d\x58\x95\x84\x00\xef\xd0\x01\xc4\xa1\xb3\xe0\x2b\xde\xe2\xed\x75\xad\x4b\x7c\xb2\xdb\x7f\x8c\xb5\x79\xcc\x68\xf8\xb1\x70\x5a\xcf\xe3\x88\x98\xcc\x87\x02\xef\xd2\x9c\x28\xef\x05\xef\xd0\x01\xc4\xa1\xd3\x6e\xfe\x74\xda\xe2\x71\x16\x4b\x90\xe0\x03\x41\x16\x33\xa3\x51\xf6\xe3\xcf\x8e\x9f\xd0\x55\xd5\x28\x2c\x4d\xf6\xfb\x66\xd8\xe6\x4c\x42\x80\x77\xe8\x00\xe2\xd0\xad\xbf\x78\x59\x4c\xe3\x76\xf8\x85\x2d\xa4\xfa\xf7\x44\xe9\xdf\x9f\xf0\xaf\x4e\x9f\xbe\xc6\x78\xc6\xaf\x1c\xb4\x89\x39\xe7\x26\x7c\x92\x84\x00\xef\xd0\x01\xc4\xa1\x6b\x33\x99\x70\xb1\xdf\xc8\x1b\x2e\xb2\xf8\x45\xde\xbe\x72\xe9\xd4\x97\x81\x41\x03\xc7\xf3\x2e\xe2\xfc\x4f\xbc\xbb\x79\x59\xbd\x29\x19\x0c\xef\xd0\x01\xc4\xa1\xbb\xdd\x55\xb7\x6d\xa0\x23\x82\xbd\xb6\x84\x3f\x85\x6a\xd6\xfd\x15\x5f\xf9\x94\x17\xcf\x07\xbf\x2d\xdd\xdd\xb7\x4e\x5b\x8d\xef\xdf\x41\x42\x80\x77\xe8\x00\xe2\xd0\xc9\xcb\x5d\x08\xe2\xb5\xbe\x20\x5f\x68\xfe\x64\xa2\x25\xc3\xf3\xc8\x95\x4b\x87\x32\x7f\xea\xfb\x75\xac\x7d\xb0\x9b\x9b\xb3\x6f\xa7\xb4\x66\xbc\x43\x07\x10\x87\xee\x8f\xc6\xab\x4f\xa2\x5b\x93\xea\x85\xad\x18\x0e\xbe\x1b\x99\xe6\x3b\xbe\xdd\x33\xb9\xf4\x4e\xdb\xe9\x68\x89\x24\x0b\x09\xba\xb3\x0a\x24\x04\x78\x87\x0e\x20\x0e\x9d\x99\xb9\xb6\x4c\x97\xa8\xa1\xcf\x52\xbb\xb7\x22\x47\xfb\x67\xdb\x47\x97\xdb\x0e\x69\x16\xb2\x6b\x70\x7e\x0d\xf6\x9f\xf0\xd8\xb1\x99\x84\x00\xef\xd0\x01\xc4\xa1\x0b\x49\x2e\x5b\x74\xe8\x57\xc9\x4b\x88\x97\x8b\x8d\x73\x70\xfd\xee\xe2\xa0\x3c\xa9\x27\x7f\xbe\x73\x64\xaa\x55\x77\x24\x88\x9d\x12\xe8\xf0\x0e\x1d\x40\x1c\xba\x4d\xda\x1d\x03\x7d\x8d\x46\x66\x92\x4e\x55\xcb\x37\x86\x72\x3d\x94\x0f\x65\x31\x30\xc9\x40\xce\x80\xc7\x07\x0b\x27\x6c\xd4\xe5\x48\x08\xf0\x0e\x1d\x40\x1c\xba\xcb\x86\x61\x69\xd6\x71\xaf\x4f\xbc\x84\x05\x35\x34\xc5\xd6\x4a\xf2\x5b\xc4\x8a\x27\xfe\xe5\x72\xce\xbb\x08\xb5\x44\xb2\x6d\xbf\x4c\x42\x80\x77\xe8\x00\xe2\xd0\xed\x94\x17\xb0\xaa\x3b\x64\x49\x08\x1c\x33\x3e\xae\xf2\xf0\xb0\xd9\x89\x40\xf2\xe2\x67\xfb\xba\x61\x2b\x51\xe9\x89\x12\xe8\x28\x49\x42\x80\x77\xe8\x00\xe2\xd0\xb9\x8e\x6e\x6e\xdc\x47\x9b\x35\x4f\xd7\x90\xde\x5c\x3b\x7e\x4f\xa5\x99\xbb\x94\xb7\x7e\x47\x8e\xdf\x0f\xfd\x7f\x0b\xe6\xc1\x35\x9b\x48\x08\xf0\x0e\x1d\x40\x1c\x3a\x5f\x7e\xe8\xf9\xca\xfb\xf4\x76\xf7\xfd\xf4\xbd\x1f\xe2\x3f\xd6\xbf\xfb\xfa\x97\x89\x3d\x53\xe6\x60\x42\xa4\x8f\x3a\xd7\xcd\x24\xca\x0d\xc0\x3b\x74\x00\x71\xe8\x12\xa5\x1b\x2b\x8f\xdd\x79\x4d\x3b\x6f\x7a\x7c\x6a\xad\xd2\xe7\xab\xd4\xee\xb6\x71\x03\x9d\xc6\x10\xa7\x7b\x4e\xad\x7c\x36\xbe\xf4\x24\x04\x78\x87\x0e\x20\x0e\x9d\xb2\xe1\xdb\x3a\xd7\xfa\xbf\xa9\xbc\x11\xcd\xfd\xfb\x5f\xf4\x7f\x8d\xc9\x9c\xce\x50\xdd\xc6\x68\x14\x99\x12\xf6\xe7\x7c\x03\x1f\x25\x04\xe3\x1d\x3a\x80\x38\x74\xef\x15\x7b\xb5\xd7\x3e\xe6\x87\x3c\x4e\xea\x0a\xde\x28\xe7\x33\x8a\x97\x4e\x1f\x8a\xfc\x20\xbf\x6f\x89\x9b\xfa\xae\xca\x1e\x48\x29\x0d\xbc\x43\x07\x10\x87\x6e\xe7\x17\xaa\xb7\x36\xe7\x56\x2c\x9d\x68\x1f\x26\x8f\x0d\xf9\xcc\x07\xdf\x9b\xb6\x8d\xdd\x53\xad\xf4\xfe\xc0\x6d\xa3\xf8\x7d\xb7\x77\x92\x10\xe0\x1d\x3a\x80\x38\x74\x81\xc6\x55\x8f\x32\x94\xb2\x2e\x87\x9f\xbc\xbb\x34\x22\xd8\xf8\x20\xed\x82\xeb\x1f\x59\x91\x5c\xf6\xc7\x85\x67\xf7\x2e\x8d\xb9\x73\x93\x10\xe0\x1d\x3a\x80\x38\x74\x9b\x87\xb8\x73\x41\xd5\x42\xa0\x79\xd2\xb7\x94\x0b\xc5\x9a\xbf\x62\x3f\xb7\x68\xce\x14\x92\x8f\x5b\x13\x7a\x40\xab\xf6\x09\x29\x12\x02\xbc\x43\x07\x10\x87\xae\xb5\xd4\xd5\x4e\xb0\x2a\x3d\x43\xec\x29\xcc\xe5\xfd\x1e\xd4\x6f\x15\xa8\x61\xa6\x70\x94\x3e\x57\xe2\xde\x60\x76\xf8\x84\x96\x16\x09\x01\xde\xa1\x03\x88\x43\xe7\x90\xfd\xf8\xfd\xd4\xc2\xe5\xd5\xd9\x48\x81\x5f\x6a\xa6\x0c\x57\x0c\xb2\xc4\xee\xf8\x90\x65\x59\xba\x31\x7c\x22\xe9\x86\xd9\xc7\x49\x08\xf0\x0e\x1d\x40\x1c\xba\x52\xfa\x0b\xe7\x5c\x83\x6e\xdc\xe0\xf6\x97\x3e\x6e\x50\xba\xd1\x19\x7f\xe0\xb7\x78\xb2\x69\x03\x5b\xfc\xec\x15\xb6\xb7\xb3\x12\x94\xcd\x0d\xef\xd0\x01\xc4\xa1\xfb\xbb\xf9\xec\x29\x96\x94\x87\x03\x96\x6c\xde\xfc\xb7\xdf\x9f\xba\x02\xcc\x69\x56\x1e\x70\x26\x49\xb9\xbb\x1e\x0d\xff\x74\x9c\x8b\x9a\x84\x00\xef\xd0\x01\xc4\xa1\x4b\xb6\xaa\xc9\x99\x9a\x59\x3c\xf0\x48\x83\x4c\xb6\xf1\x15\x3b\x10\x0f\x1b\x12\xe9\xee\x3f\x3e\xba\xa2\x7b\xcf\x65\x71\xab\xe7\x31\x12\x02\xbc\x43\x07\x10\x87\x6e\x25\x47\xdc\x67\x9b\xeb\xdb\x0f\x8c\x3f\xae\x47\xe6\xd8\x5a\xcc\x30\x68\xbc\xbf\xdf\xbf\x34\x91\xf8\xce\x9d\x77\x26\x4b\xf8\x1d\x65\x06\xe0\x1d\x3a\x80\x38\x74\x13\xae\x69\x4f\xf5\x87\xb2\x87\xaa\x8e\xee\x7b\x43\x7f\x35\x41\xfc\xf5\xb9\x68\x75\x26\xd5\xbe\x15\x77\x9a\x7d\x8a\x3f\x65\x3e\xf2\x92\x10\xe0\x1d\x3a\x80\x38\x74\x3c\x43\x2d\x61\xd7\x1a\xd6\x5f\x7c\x8f\xfb\x50\x3d\xa8\x9b\xf6\x37\xbc\xe7\x02\x93\x8a\xe4\x1b\xba\xaa\xc1\x2b\xe9\xd3\x07\x86\x0e\x92\x10\xe0\x1d\x3a\x80\x38\x74\x4b\xea\x15\x67\xb9\x06\xd9\x0e\x78\xa5\x05\xf6\x52\xc9\xe8\x34\x25\xba\x3d\xd0\xbc\xf5\xed\x9e\x9e\x8e\x44\xd7\xb1\xea\x7f\xcf\xd8\x49\x08\xf0\x0e\x1d\x40\x1c\x3a\xa7\x1b\xc9\xbb\x83\x3b\x6b\x18\xd4\x47\x73\xc6\xae\xd9\xbe\x6f\x78\xb4\x65\x89\x43\x58\xb6\xf8\x35\xa9\xad\x66\xb7\x70\xa1\x86\x32\x9d\xfe\x97\x43\x37\x35\x11\x34\xf9\x59\x5e\xe2\xa6\xe1\x9d\xb7\x63\x16\xbe\x61\xa5\x87\xcf\x4c\xd9\x1f\xdc\x25\xbb\x93\xe1\x1e\xcb\x53\xc6\x97\xd3\x6a\xff\x0d\x74\x88\x43\xf7\x77\x93\xe1\x83\x93\xdf\x49\xf6\x5d\x56\x3e\x6e\x97\xec\x52\xb6\x14\x98\xfc\xf1\x9b\x8b\x2d\x18\xde\x21\x96\xd2\xc1\x30\x53\x66\x44\x42\x80\x77\xe8\x00\xe2\xd0\xe9\x98\x7e\xde\x37\x44\x17\x34\xd3\x7a\x26\xf3\xdd\xc0\xee\xb4\x6e\x2d\x31\xe1\x4f\xa5\xf9\xf2\x7a\x6d\xb5\xfd\xb7\xed\x78\xff\xff\x7f\x38\xe1\x1d\x3a\x80\x38\x74\x61\x6e\xf5\xb4\xed\xc7\xbe\x0d\x8a\x5e\x8a\xd6\x3d\x67\xa5\x93\x67\x5d\x60\xf1\xdc\x5a\x6b\xe0\xa1\x57\xc2\x9e\x99\x86\xe9\x6c\x77\x12\x02\xbc\x43\x07\x10\x87\x8e\xc1\x7d\xab\x73\x03\x2d\x9f\xb8\x83\xf5\xc1\x0f\x25\x85\xbd\x6f\x95\xff\x98\x4d\x75\x2c\xdb\x9e\xf5\xf6\xaa\x4a\xa3\xfb\xa4\x4f\x89\x9a\x78\x87\x0e\x20\x0e\x5d\xc0\x5e\x0f\x3a\x57\xb1\x9e\x85\x67\xfa\x73\xc7\xab\xaf\x99\x09\x36\x59\x9c\x0a\x49\xff\xb2\x74\x65\x7e\xc0\x7c\x73\xe8\x4a\x3d\xa5\xca\xf1\x0e\x1d\x40\x1c\x3a\x1e\xf9\xbc\xf7\xf5\xa7\x2f\x1d\x3d\x30\xb4\x6b\x3a\xc1\x2c\x64\xcc\x3d\x4c\xa3\xee\x9e\xde\x4f\xee\x52\xef\x2a\x1e\xf1\xc8\x19\x36\x12\x02\xbc\x43\x07\x10\x87\xee\xba\x7e\x8d\x3d\xe3\xde\xec\xa1\x85\x7f\x89\x72\x1d\x09\xe3\x02\x1f\x32\x9a\x65\x72\x18\x1d\x5d\xfc\xc6\x9e\xcf\xf3\xbf\x90\xa6\x2c\xa1\x78\x87\x0e\x20\x0e\x5d\x59\xf7\x65\xb7\xba\xb7\x3b\x5b\x9f\x71\x6f\x5a\xb0\x9f\x0a\xdc\xb8\xd1\x53\xf9\xc4\x3d\x67\x09\x54\x56\x4b\x2e\x9f\xc9\x70\x76\x20\x21\xc0\x3b\x74\x00\x71\xe8\x1c\x9c\xac\x33\xb3\x13\x0e\xcc\x06\x04\x3c\xd6\xda\xeb\xf5\xfd\xe1\x0d\x2f\x5a\x0b\xb3\xa7\x1f\xc2\x5f\x9f\x64\x16\x58\x36\x63\xa5\x84\x60\xbc\x43\x07\x10\x87\x8e\xeb\xa0\xfe\xf9\xd5\xa9\xb2\xb6\x0d\x9a\x74\x9e\x7a\x35\xed\x37\x03\xdf\xeb\xb7\xcb\x9c\xab\x99\x1f\x5b\xb7\x0b\xd3\x31\x65\x71\x25\x21\xc0\x3b\x74\x00\x71\xe8\xbc\xf8\xab\x59\x24\x6a\x8a\xba\x55\x1a\xc8\x5f\xa9\x43\xe7\x2f\x9a\x97\xb3\xe6\xe8\x87\x87\xfb\x12\x8c\x57\x69\xad\x2c\x1f\xec\x23\x21\xc0\x3b\x74\x00\x71\xe8\x8a\xbc\x5b\xda\x85\x6f\x46\x0f\x5d\x2a\x70\x13\x8c\x99\xbe\xde\x4e\xeb\xdb\xd9\xb2\x94\x5c\xac\xd5\x55\x24\x5c\x7e\xea\x22\x2d\xe5\xc3\xf0\x0e\x1d\x40\x1c\xba\x4a\x81\xc3\x35\x0d\xc7\x76\x6d\x9e\x1a\x4d\x7b\x1e\xca\x27\xaa\xb0\xaa\xf2\x6e\x84\x27\x24\xb6\x7b\x21\x3e\xe4\xc9\x9f\xc6\x15\x35\x12\x02\xbc\x43\x07\x10\x87\x8e\xd1\xfb\xd8\x1b\xd1\xed\x22\x61\xf9\x9b\xea\x9e\x18\x2f\x29\xed\x7a\xf2\xcd\x56\x57\xff\x90\xa1\x52\x66\xf9\xb6\x88\xd9\xc6\x4a\x4a\x9e\xc0\x3b\x74\x00\x71\xe8\xce\x0e\x86\x5b\x7c\x72\x14\xde\xcc\x93\x70\x60\xcd\x68\xf4\x9d\x7a\xfc\xbc\xaa\xbe\xc9\x85\x60\xad\x9d\x7f\x36\x7f\xab\x34\x4d\xd7\x23\x21\xc0\x3b\x74\x00\x71\xe8\xae\xd0\x7b\x2e\x3c\x6b\xd2\x9d\x95\x19\xf7\xd4\xa7\x9a\xe0\x69\xfe\xc2\x17\xdc\x7e\x9d\x97\x45\xc1\x75\x40\xfd\xd7\xd1\xd7\xf1\x94\xc5\x1d\xef\xd0\x01\xc4\xa1\x2b\xd8\xa6\x5e\x7f\x30\xb6\x32\x99\x39\xd7\xd4\x23\xda\x9e\x48\x8a\x6f\xf3\xd5\x51\x12\xdb\xf6\x06\xde\xc8\x9c\x7f\xb3\xc9\xe6\x00\x09\x01\xde\xa1\x03\x88\x43\x67\xe8\x4d\x54\xdf\x5d\xbd\x3d\xda\xa4\x2e\xdf\xb6\xf6\xf8\x42\x99\xd2\x62\x80\x4c\x76\x90\xfc\x29\x32\xe5\xbc\xa8\xdf\xa1\x61\x4a\x9f\xc7\x3b\x74\x00\x71\xe8\x4c\x17\xf9\xbf\x67\x2f\xac\xab\x5b\x33\x79\x3f\x30\xd1\x59\x0b\x4c\x1d\xfb\x6d\xd9\x95\x1d\x72\x5d\x5c\x96\xb6\xa1\x58\x3f\x52\x87\x84\x00\xef\xd0\x01\xc4\xa1\x73\x3a\xaa\xf5\x8f\xce\x31\x63\x56\x3d\xf7\xc8\xc4\x52\x3e\x2b\xe7\x65\xb3\xf3\x1b\xcc\x1e\xf9\x34\x39\x77\x69\xc3\x22\x18\xa5\x6c\x48\x08\xf0\x0e\x1d\x40\x1c\x3a\x5f\x85\xd2\xeb\xc3\x7d\x4b\x1f\xf9\xa8\xb9\xa6\x83\x5f\xb7\x99\xdd\x54\xf3\x6f\x8d\x7d\x39\xc0\xeb\x5f\xd5\xfa\x42\x5f\x64\x81\xd2\xcf\xf0\x0e\x1d\x40\x1c\x3a\x1d\x73\x8b\x07\x1b\x7b\x8f\x5d\x38\x14\xb6\xd5\xd6\x53\xdf\x5a\x59\x3c\xe6\x8c\xfa\x89\x37\xaf\xae\x18\x8d\xa5\xb7\xd5\xd9\x6f\xe6\x24\x21\xc0\x3b\x74\x00\x71\xe8\x0c\x68\xe6\xf6\xd7\xa8\x59\xef\x7d\x3c\x67\x1b\x25\xbd\xbf\x88\x95\x3d\xf1\x67\xc3\xf6\xb3\xa2\x4a\x4f\xed\xf7\xaf\x3c\xc8\xe1\xa4\xec\xe1\x78\x87\x0e\x20\x0e\xdd\x87\x7f\x51\xf2\xe6\x8a\x21\x57\x1c\x73\x56\xc7\x97\x16\xee\xcc\xfc\x3a\x36\xce\xd8\x3c\x26\xd8\xf4\xea\xf1\x3b\xa6\xa6\x4f\x8d\x94\x95\x06\xef\xd0\x01\xc4\xa1\xa3\xab\xd6\x9e\x6d\xe2\x0e\x74\x6f\x2d\x6c\x7e\xef\x76\xe5\xf4\x68\xfd\xd3\x82\xb9\x70\xe6\xc6\x99\xfe\x44\xa8\x22\x64\xc8\xb3\x9b\x84\x00\xef\xd0\x01\xc4\xa1\xdb\x23\x3f\xd4\x61\xe8\x67\x1d\x70\xef\xce\x95\xb6\x87\x2a\x4e\x4f\xae\xbf\x93\x77\x50\xe2\x4c\x50\x66\xac\xf5\x0b\x38\xae\xd8\x63\x4b\x42\x80\x77\xe8\x00\xe2\xd0\x7d\x82\xc7\x54\x8c\x44\x85\xf2\x54\xd6\x87\x95\xe7\x8e\x1c\x0e\x65\x70\x97\x39\xb6\x87\x6a\x5c\x9f\xea\x6f\x5c\xd3\xa5\x16\x7d\xca\x0d\xc0\x3b\x74\x00\x71\xe8\x7e\x2c\x6b\x77\xf6\xf8\x25\xb4\x44\x47\xaa\xe6\x78\x93\x02\x3f\x2a\xca\xec\x75\xb3\x9e\x6a\x71\x3e\x88\xb5\x55\x0c\x12\xcd\x34\x27\x21\xc0\x3b\x74\x00\x71\xe8\xfe\x78\xec\xac\xe9\x4b\x98\xb1\x3b\x7f\xe9\xea\x60\x60\x92\xee\xb7\x59\xc6\xaf\x8f\xfa\x4a\xb9\xf6\x1e\xe1\x7d\x5d\x6f\xea\xc8\x74\x88\x84\x00\xef\xd0\x01\xc4\xa1\xfb\xf2\x54\x7c\x80\x37\x34\x47\xb5\x5d\xd2\x9e\x69\xb4\x68\x67\xa8\x97\x92\x8a\xbc\xc1\x98\xc4\xcb\xeb\xec\x1f\x1f\xd4\x8b\x49\x5d\x24\x21\xc0\x3b\x74\x00\x71\xe8\x64\x0d\xf8\xa4\x2a\x45\x6b\x3f\xf1\xf9\x39\x7b\x28\x88\x3d\xb0\x28\x98\x4b\x9b\xb2\x57\xd7\xb0\x66\xa6\xa7\x5f\x8e\x17\x77\x72\x22\x21\xc0\x3b\x74\x00\x71\xe8\xfe\x78\x9f\x73\x78\x73\x9a\x23\xa9\x4c\x66\x68\x7f\x6d\x9a\x6f\x7e\x43\xbe\x3b\x97\x15\xbf\xd2\xb6\x9c\x82\x5d\x3f\xfb\xd6\xf6\x52\xae\xd3\xff\x72\xe8\x6e\xeb\x94\x65\x89\x91\x7d\x54\xf7\xcd\x17\x5c\xcb\xf8\xea\x98\xb8\x77\xb7\x28\x5b\xd4\x57\x3c\x6d\xdf\x48\x51\x34\x3e\xb2\x36\xf5\x9f\x40\x47\x8d\x38\x74\xe5\xfb\x0c\x3d\x87\x4e\x7c\x53\x32\x9e\x8d\x2a\x29\x3e\xe9\xc3\xc8\x26\x2b\xa0\xbd\x68\xc6\xef\x9b\xc1\x9b\xb2\x9d\x26\x0a\x52\x91\x90\x1a\xef\xd0\x51\x23\x0e\x5d\x8a\xdf\xe4\xea\x49\x4f\xae\x17\xd7\x2c\xf8\xca\x5d\x17\xec\x56\xbe\x2e\x9d\xf8\xd7\xa1\x5a\x7a\xf0\x56\xcd\xe6\xc0\xef\x23\xc5\xea\x24\xa4\xc6\x3b\x74\xd4\x88\x43\x77\x36\xd1\xd6\x21\xb6\xa5\x07\x8c\x46\xaf\x50\x39\xc2\x5c\x71\x17\xad\xed\x7c\xbb\x6a\xbd\xce\x2d\x70\xdd\x4c\xff\xcc\x6c\x4b\x4b\x42\x6a\xbc\x43\x47\x8d\x38\x74\x4e\x7d\x52\x4a\xe7\xbc\x63\x9f\x3d\x61\xa3\xd9\xb1\xd5\xeb\x9a\xb4\x0c\xd1\x3a\xef\xb6\xd1\xa0\xbb\xaa\x5b\x43\x1e\x35\xcc\x30\x26\x21\x35\xde\xa1\xa3\x46\x1c\x3a\x96\x07\x5f\xb8\x1b\xfc\x95\x35\xf2\x4d\xf2\xac\xc7\x4a\xf6\x35\xaf\x0f\x4d\x32\x0e\x7f\x1d\x4f\xa4\x49\x4e\x89\xd2\xa0\xa1\xb7\x27\x21\x35\xde\xa1\xa3\x46\x1c\x3a\x15\x2b\x83\xc6\x51\xc3\x56\x21\x0e\x41\x16\xb1\x17\x75\x1f\xc6\xdc\xab\x9e\x34\xed\xec\xd9\x90\x10\x4a\xe5\x9f\x0b\x59\xd4\x94\x22\x21\x35\xde\xa1\xa3\x46\x1c\xba\xe0\x21\x8e\xc9\x47\x3d\xbb\x75\x4b\xfb\x3a\x94\x56\x23\x0f\xc4\xa7\x3d\xe8\x75\x51\xa3\x57\x58\x5c\xa1\x8a\x0d\xa5\x89\x2c\xbd\x48\x42\x6a\xbc\x43\x47\x8d\x38\x74\xce\xb9\x9b\x77\x18\x6b\xee\x0e\xe9\x4c\x62\x4b\x94\xfe\x22\x2b\xf6\xa1\xd0\x92\xf4\xfc\xf1\xd7\x34\xc9\xb4\xd8\x9b\x81\x79\x85\xf2\x35\xf1\x0e\x1d\x35\xe2\xd0\xb9\x84\xd2\x89\x64\x7d\xb8\x7c\x41\x33\x37\xff\xfc\x95\x9e\x48\x95\x2f\x87\xc3\x96\x14\xec\x45\x78\xe4\xcf\xba\x84\xef\xd1\xb9\xba\x8f\x84\xd4\x78\x87\x8e\x1a\x71\xe8\xe6\xe4\x2d\x1b\x8b\x98\x46\x8b\xeb\x9a\x19\x5c\xc4\x1a\xdb\x4b\x93\xb2\xae\xbe\x02\x9c\x6d\xde\xfa\x9b\x6f\x87\x88\x9e\x5d\xe0\x23\x21\x35\xde\xa1\xa3\x46\x1c\xba\x1d\x1f\x2a\xf3\xd4\x7c\x4d\x8b\xda\x7b\x0d\xa9\x5e\x1a\xb0\x0f\xdc\x2d\x62\xf8\xc4\xda\x57\x76\xdf\x9a\x68\x52\x08\x4e\x52\xbf\x4c\x42\x6a\xbc\x43\x47\x8d\x38\x74\xc9\x91\x5f\xb7\x28\xde\xd6\xe1\x4c\xfe\x7f\x84\xdc\x77\x34\x97\xff\xff\x3f\x70\x79\x5e\xca\x0e\x91\x2e\x23\xa3\xec\x08\x91\x9d\x14\x99\x15\x42\x4a\xf6\xca\x1e\x0d\x25\x95\x8b\x8c\x64\x56\x44\xf6\x4a\x51\x92\x91\xca\x16\x4a\x76\xb6\x54\x76\xd9\x7b\x95\xf1\x3b\xaf\xcf\xf7\xfc\xce\xe9\x3c\xcf\x79\x9e\xf7\xff\x8f\x5e\xe7\x72\x3d\xc7\xe3\xfe\xe0\xd5\x2d\xb9\x50\xd3\xfe\xb3\x38\x27\xb5\x79\x07\xcd\x3e\x9d\xdd\xec\x56\x8f\xf9\x59\x44\x9e\x3d\x93\x26\x70\x80\x76\xe8\x00\xe4\xd0\x9d\xff\x15\xf1\x98\xac\x77\xbd\xe4\x8b\xb7\x73\xe8\x13\xaf\x2e\xf7\x62\x5b\x96\xc9\x62\xad\x88\x48\x5c\xe8\xf7\x47\xe7\x0b\x9a\x94\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\x8a\x3d\x22\x2a\xfe\xaa\x0d\xd1\x01\xe1\xae\x2c\xfa\xaf\x13\x79\x6d\xf2\xa8\xdd\xc5\x1a\x3c\x27\xba\xcd\x45\x79\x83\x16\xf6\x93\x56\x13\xed\xd0\x01\xc8\xa1\x7b\x5f\xf9\x2c\x63\x6f\xa9\xee\xce\x1c\xf6\x8d\xbf\x07\xca\xb3\x68\xfe\xba\x9f\x37\x5f\xb5\x7f\x23\x2b\x22\x68\x95\xfc\x92\xe5\x94\x09\x81\x03\xb4\x43\x07\x20\x87\x4e\x5d\xfa\x36\x05\xd6\x9e\x2e\xd5\x45\x70\xb1\xaf\xd7\x9f\x8c\xa6\x62\x36\x4a\x7a\x5b\x6a\x2b\x3a\x5b\xbf\x9a\xf7\x84\xd5\x1c\x23\x70\x80\x76\xe8\x00\xe4\xd0\xc5\x0e\x38\x1a\x4a\x78\x78\xc5\x91\x7f\xbb\x3d\x9f\x06\x64\xed\xe2\x42\x8f\x80\x68\x4d\xc9\x6f\x16\xb1\x79\xd4\xd3\x92\xf7\x68\x09\x1c\xa0\x1d\x3a\x00\x39\x74\xe5\x07\x54\x13\x6f\x0c\x49\x7e\x25\x02\x63\xb2\xb4\x89\x33\xa3\x75\x0f\x04\x8a\x25\x7e\xf4\x56\xfa\x71\x4d\x47\x47\x7f\x50\xb3\x25\x70\x80\x76\xe8\x00\xe4\xd0\x99\x76\xfb\x3c\x4d\x4b\xed\x89\x5a\xb8\xef\x7d\x9d\x21\xba\x88\x83\x4e\xf3\x4c\x54\x55\xe8\x09\x66\x59\xb2\xf6\xb0\xcb\xfd\xee\xe6\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\xbd\x27\x67\x15\x32\xe8\xea\x1c\xba\x69\x2a\x32\x67\xf7\x72\xcc\xcc\x3f\xb2\xbc\xb8\x55\xfa\x68\xaa\xb8\x2c\xf7\x87\xe5\x0d\x23\x63\x02\x07\x68\x87\x0e\x40\x0e\x5d\x51\xc7\x5d\x01\x6b\x4e\x03\xba\x84\x37\x4e\x31\xf7\x5b\xef\x9d\xaa\xf2\x3b\x6a\xb5\x52\x72\xee\x41\x2a\x77\xe7\xa0\x5c\x7c\xf4\x1e\x02\x07\x68\x87\x0e\x40\x0e\xdd\xa2\x7e\x95\x73\xbb\xc9\x77\x0f\x79\xcd\xf4\x7d\x66\x22\x31\x91\x69\x05\xb3\x07\x93\x76\x2d\xcc\x7a\xf9\x1a\x9b\x9c\xb8\xa9\x4f\xba\xcf\xd0\x0e\x1d\x80\x1c\xba\xde\xe6\x63\xf1\x3a\x2e\xd2\xac\x5a\x9a\xd7\x79\xdf\xb5\xbd\xa3\x2e\xf4\x77\xfb\xf4\xb9\x39\x8a\xfc\x07\xfd\xaa\x26\x19\xaf\x99\x20\x81\x03\xb4\x43\x07\x20\x87\x6e\xf7\x6e\xe7\xdf\x49\xbb\x9f\x7d\x67\x79\x9b\xa0\xbb\x79\xe6\xd7\xaa\xb7\x97\x3f\xf7\x40\x9e\xb1\x30\xed\xb5\xb6\xe2\x97\x14\x3a\x0a\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\x80\x32\x0e\x15\x11\x66\xd3\x04\xfe\xa7\x18\x45\xca\xe1\xf3\xbf\xdb\xae\x8b\x6b\x77\xaa\x9d\xd2\xa4\x30\x98\x1c\xbc\x73\xe1\x2b\xe9\x9d\xa1\x1d\x3a\x00\x39\x74\x7a\x01\x29\x35\xfa\xce\xa2\x87\xc2\x8e\x5c\x5c\xfa\xe8\xed\x14\x47\x57\xd2\xc7\x8d\x09\xea\xb1\xdf\x90\xea\xab\xfe\x21\xfa\xdc\x8c\xc0\x01\xda\xa1\x03\x90\x43\xf7\xcb\x7e\x71\xf3\xb7\xf7\xbe\x62\xdd\xc3\x2b\x3f\xbe\xd3\xff\xcc\xa0\xb5\xa6\xd4\x36\xbf\xe1\x1a\xdc\xd2\x55\x5b\x2b\xbb\x19\x28\x44\xe0\x00\xed\xd0\x01\xc8\xa1\x3b\x31\x57\xf3\x87\x2f\x75\xea\x4b\xc4\x75\x6d\xbf\x8b\x22\x9e\xc5\xcd\xce\x75\xcf\x8a\xcf\x5f\xbb\xc3\x7e\xff\xb1\xf8\x71\x87\xde\x63\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\xea\xdf\xbf\xae\x49\xa7\xbf\x11\x34\x8a\x74\x0e\xd4\x71\xe0\x69\xe7\x20\x6b\x9a\x1a\x39\x29\x1c\xba\xc4\x06\xfc\xc2\xaf\x85\x4b\x12\x38\x40\x3b\x74\x00\x72\xe8\x7e\x9d\x2c\xcd\x39\xe1\xdc\xeb\x46\xd9\x2d\xf4\xd6\xf4\xe2\x58\x23\x9f\xb9\x45\xee\x0f\xee\xbd\xe1\x61\x5d\x36\xc9\xc7\x89\x2a\xd2\x41\x47\x3b\x74\x00\x72\xe8\x7e\x7b\xb1\x88\x4c\xe7\xf6\x0c\x6b\x0a\x84\xd0\xa5\xd7\x35\x4c\x1c\xf5\xae\xdf\xc1\xd9\x94\xf7\xfc\xb4\xf4\x76\xb2\xd5\x4f\x4d\x4e\x02\x07\x68\x87\x0e\x40\x0e\x9d\x61\x34\xf9\xf9\xbf\xd1\x62\x4e\xed\x05\x54\x2e\x0e\x2a\xe1\x0a\x8c\x19\xbe\x4a\xaf\xb4\x3d\xa2\x96\xb4\x13\xb5\x2b\xc2\xbb\xf5\x09\x1c\xfc\x97\x43\x77\xe1\x61\xf7\xaf\x7a\xf9\x0d\xd7\x50\xbf\x7e\x81\xf2\x33\xf7\x1b\xcd\xae\x48\x51\xaf\xfb\xb8\x5b\x75\x6f\xf6\x7f\xf0\xac\xb8\x73\xef\xdf\x40\x07\x39\x74\x99\xb9\xa2\xc3\xb9\x51\x5c\x65\x42\x4c\xea\xc3\xe1\x76\xa7\x85\x05\xdc\x08\xe6\x15\x77\x9e\xed\x4f\x1d\x12\xfc\x77\xe6\x7b\xdd\x09\x1c\xa0\x1d\x3a\x00\x39\x74\xee\x2e\xae\x3a\x59\x5b\x16\xf9\x64\xa1\xec\x22\x11\x56\x77\x2f\xde\x1c\x67\xfc\xf4\x67\xfd\x3e\x78\x6b\xd7\x5f\x90\xc5\x4c\x0b\x08\x1c\xa0\x1d\x3a\x00\x39\x74\x5a\xc2\x0a\x54\x7e\x67\x5e\x57\xd0\xe8\x85\xd5\xab\xc5\xcb\x3f\xbb\x1e\x79\xe4\xc6\xb3\x53\x56\x96\x47\x65\x78\xda\x05\xaf\x47\xb2\x13\x38\x40\x3b\x74\x00\x72\xe8\x12\xed\x1a\x4e\x89\x0b\x2a\x47\xb4\xad\xbf\x1b\x17\xea\x61\x66\x56\x70\xba\xb6\x9c\xf8\xf3\xd4\x6b\x95\x22\xed\x5f\x1a\x0e\x2e\xe4\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\xdf\x69\xd3\xe7\xc8\xef\xee\x39\xdd\x75\xed\xa2\xc6\xa7\xf0\x37\x8a\x16\x6c\x76\x78\xfb\xc1\x90\x8e\xc3\x1a\x2f\x38\x47\xbd\x42\xe8\x09\x1c\xa0\x1d\x3a\x00\x39\x74\xda\xcd\xde\xea\x4b\x2e\xc2\x67\x78\xc8\x6d\xf7\xaf\x9d\x9b\x71\x8f\x1d\x9c\x03\x9b\x73\x1e\x2d\x6b\x8a\x82\x73\x54\x35\xc4\x3e\x02\x07\x68\x87\x0e\x40\x0e\x5d\xb8\x50\x44\x22\xf7\xa4\x40\xf6\x8b\x34\x2f\x9b\x21\x43\xa5\xf4\x73\x45\x97\x3f\x8d\x39\xf6\x5c\x13\xac\xbb\x5b\x3f\xb6\x12\x44\x4a\xd4\x68\x87\x0e\x40\x0e\xdd\xe0\xb0\x14\x57\x76\x8d\xa9\x42\x1e\x56\xd8\xc8\x75\x7a\x23\x7e\xb9\x9a\xc6\x65\x56\x84\x61\x0f\xab\xfe\xf1\xd4\xe4\x5f\xde\xa4\x3c\x81\x76\xe8\x00\xe4\xd0\x99\xde\x76\x2b\x6a\x7c\x1f\x2d\xee\x6b\xfe\x33\x5a\x25\x4f\xa7\x7c\x66\xfc\x9b\xc0\xea\x8e\x8a\xf4\xdc\xf7\xec\x69\x1c\xcd\x1c\x4a\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\x8d\x84\xa7\x11\x64\xfe\x2f\xc8\x5e\xa9\x17\x32\x06\x95\xaa\x75\xde\x04\x97\xbf\x9c\x7b\x9f\x24\x6f\xef\xc3\xd7\xc2\x43\x4d\xec\x26\x70\x80\x76\xe8\x00\xe4\xd0\x65\x1f\xda\x27\xf7\xc7\xaa\x5b\xbf\x9f\x6e\x84\x28\x2b\x11\x8a\x94\x1c\x74\xdf\x35\x91\x26\x28\xdd\x7e\x6c\x97\xc3\x91\x54\x31\x35\x02\x07\x68\x87\x0e\x88\xc0\x5f\xe1\x5a\xbe\x1d\xab\x3a\x79\x4f\x4d\xae\xe9\xc0\x49\x2a\x6d\x81\x70\xa3\x63\x5c\xef\x3d\xeb\xee\xb5\x4e\xbf\xb6\xb2\x2b\xd8\x12\x23\x70\x80\x76\xe8\x00\xe4\xd0\x5d\x6b\x6e\xd3\xdd\xbf\xbe\x79\x38\x2d\xca\xf4\xdc\x63\x06\xd1\xa7\x7d\xfa\xfc\xdc\x6c\x07\x9e\xb7\xbd\xb5\xa7\xde\xb1\x04\x5c\x48\x27\x00\xed\xd0\x01\xc8\xa1\xe3\x7b\xd9\xb3\xa3\x33\xe9\xdb\xe5\xd7\x2e\xbd\xf7\xf7\xdc\x72\x24\x1e\x3b\x8d\xd1\x98\xd6\xa8\x79\xee\x13\xae\x55\xbe\x73\x86\xec\x14\x81\x03\xb4\x43\x07\x20\x87\x6e\xf9\x66\xe1\xda\xe4\xb7\xb3\x86\x1a\x1f\x66\xee\xb7\xb8\x6f\xd0\xeb\xdf\x8b\x2d\x7b\x49\xee\x13\xfe\xd9\x9e\xaa\xe2\x1e\x71\xfd\x34\x81\x03\xb4\x43\x07\x20\x87\x2e\xb6\xc3\x2f\xfc\xfb\x76\xe9\xc0\x59\xcd\xeb\x16\x91\x26\xe7\x6e\x6d\x27\xc4\x88\x1c\xef\xfb\xfb\xd5\xe5\xe6\x2b\xfe\xbd\x3f\x56\x8c\x08\x1c\xa0\x1d\x3a\x00\x39\x74\x9c\x85\x6d\x87\xff\xb8\xcd\xa4\xc4\xe9\xb7\x8d\x56\xb4\xf4\x37\x96\xff\xcd\xf1\x91\x4f\xe8\x1e\xf8\xfc\x6c\x5e\xf1\xfd\x28\x97\x00\x81\x03\xb4\x43\x07\x20\x87\xce\x39\x44\xe0\x7c\x57\xc5\xd3\xe5\x22\xcd\xca\xb6\xf8\xbf\x87\xf3\xfd\x7a\x0a\xf2\x6f\x91\xad\x7e\x94\x4e\x3b\xc5\xac\xb0\xf6\xd6\x8e\xc0\x01\xda\xa1\x03\x90\x43\x97\xb6\x3e\xf3\xcb\xe1\x95\x81\x76\x9e\x98\xfd\x9f\xb1\x16\xa5\xc4\x84\x8b\x57\xdf\xc6\x17\xf9\xb2\xae\x3e\x63\xd1\x0b\x8f\xeb\x97\x27\x70\x80\x76\xe8\x00\xe4\xd0\x5d\x92\xbd\xbb\x4a\xef\x9f\xd2\xa0\x34\x45\x53\x28\x62\x61\xee\xf6\x6b\x74\x68\xac\x74\x62\x3e\x2f\xc0\xfd\xb7\xdd\xda\x35\xd7\xe3\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\xcb\xf1\xe3\x3e\x8f\x86\xe9\x85\x2e\xed\x52\x7c\x3c\xa4\x5d\xba\xe3\xec\x4b\xe6\x63\x02\x97\x45\xfd\x9d\x5a\x59\x65\x0e\xf8\x26\x59\x13\x38\x40\x3b\x74\x00\x72\xe8\x68\x9c\x3d\x35\xf7\xaa\xbc\x6c\x4b\xcd\x88\x31\xbf\x92\xed\xd1\xe9\x7a\xa5\xef\xe7\x36\xef\xc1\xf0\xd8\xf3\x3f\xc1\xb2\x21\x2d\xa9\xd1\xa2\x1d\x3a\x00\x39\x74\xcd\x5e\xa6\xbb\x05\xbb\x12\x2b\x62\x07\xbd\x19\x7b\xdb\xb6\x06\xe4\xc8\x2e\x24\x7a\xc5\x05\xb8\x7d\xdf\xcd\x17\x6e\x57\xa4\x4d\xfa\x31\xd1\x0e\x1d\x80\x1c\xba\x9d\x02\x25\x57\xbc\xee\xee\xa8\x4b\x74\x35\x76\x0c\x1b\xaa\x1c\x5d\xb7\xb8\xb8\x6f\x4c\x94\xd3\xc9\xcf\xda\x6a\x44\xb0\x9b\x30\x20\x70\x80\x76\xe8\x00\xe4\xd0\xc9\xd2\x99\xcb\xc5\x2b\x8a\x9e\x23\x8b\x08\xbd\x3c\x70\xf6\x8a\xc9\x91\x7b\x7c\x02\xe7\x5e\x2e\x5e\x15\x2b\x7f\x72\x63\xe4\xa0\xfb\x61\x02\x07\x68\x87\x0e\x40\x0e\xdd\xf6\x17\x8d\xc4\x12\xe0\x7d\x63\x8f\x25\x95\xfd\x85\x42\x4a\x0f\xda\xa4\xb3\xc9\xad\x23\xf3\x65\x93\x34\x54\x8a\x2a\xae\x8c\x4c\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\xfc\xaa\xcf\x34\x27\xfe\xfc\xb8\x2f\xbd\xcb\xb9\x8b\xc6\x36\x6b\xf2\x55\xc8\xaa\x27\xbd\x79\xae\xce\x21\xc7\x1c\xb5\xf0\xb4\x7d\xa4\xee\x84\x76\xe8\x00\xe4\xd0\x5d\x38\x77\xd1\x73\xed\xfa\xbe\x43\xbf\x93\xfa\xbe\x39\xcf\xee\x6b\xdf\xa5\x68\x76\x63\x95\x7c\xa8\x9e\xbb\xf8\x81\x6a\x76\xf6\x38\x69\x0e\x47\x3b\x74\x00\x72\xe8\x4e\x31\x56\x33\x7c\xbb\xa9\xdb\x15\xe9\xb8\xf5\x2e\xeb\x46\x05\xdf\x97\xd3\xea\xaa\x71\xf9\x57\x8e\xd4\x2c\x9d\xea\xd5\xfa\xf8\x89\x74\xd3\xa2\x1d\x3a\x00\x39\x74\x33\xca\x39\x83\x1b\xe7\x82\x1e\xdb\x34\x0a\x8b\xb8\x9f\x92\x38\xbd\x6d\x3f\xe0\xef\xf0\x79\x27\x65\xa9\xf8\x5e\x81\x53\xca\x59\xa4\x78\x8e\x76\xe8\x00\xe4\xd0\x7d\x89\x20\xe8\xe6\x45\xbe\x8c\xc6\xea\x75\x9f\x38\x35\x60\x4a\xf9\xa4\x7d\xac\x5e\x21\xf8\x8e\xfc\xd8\xa8\x7d\x79\xe4\xa7\x7c\x52\x70\x41\x3b\x74\x00\x72\xe8\x44\x33\x74\x59\xb4\x25\xec\x78\x5f\x88\x1b\x50\xae\xed\x2f\x9e\xa8\x3d\x2d\x10\xfc\x20\xbb\xba\xe0\xcb\x83\x5e\x11\xb5\x75\x49\xd2\xe4\xf6\x5f\x0e\xdd\xe7\xe0\x35\x75\x6f\x62\x83\xec\xc0\x13\xdf\x38\xd9\x17\x4a\xd7\x3c\x5f\xfd\xe6\x88\xd3\xe1\x29\xcf\xa0\xf0\xff\x78\xfd\x17\x4b\xcf\xbf\x81\x0e\x72\xe8\xec\x1c\xcd\x29\xa8\x76\x6c\xbd\x29\x8b\xb5\x8a\x4c\xea\xdf\x5d\x7c\x65\xcd\x7e\xe9\x62\x98\xea\xd9\x6f\x5b\x8e\x9f\x80\x5f\x26\x69\x70\x47\x3b\x74\x00\x72\xe8\x9c\xe2\x12\xdb\xa4\x0f\xb1\x75\x37\x69\x30\xfc\x94\xab\x2d\x0a\xda\x53\xf3\xe8\x9e\x17\xb5\xb2\x81\x36\x97\xc2\xe0\xb8\x49\x2c\x69\x2f\xa1\x1d\x3a\x00\x39\x74\x5d\xf6\x1f\xa8\xb9\x33\xec\x96\x65\x79\x9e\x76\x73\xbc\x74\xbe\xcd\x48\x4d\x1d\xbd\xf7\x94\x77\xc2\x16\x4b\xbf\xa7\x33\xbf\xf4\x15\x02\x07\x68\x87\x0e\x40\x0e\x9d\x9d\x88\x17\xcb\x70\x95\x86\xde\xb4\xfa\xe2\xc7\xbb\x1c\x39\x67\x09\x5f\x85\x2f\xf7\x6c\xbf\xe8\x4b\x36\xaa\xbb\xac\x25\x55\x52\x13\x38\x40\x3b\x74\x00\x72\xe8\x24\xa8\x9b\x56\x9f\x52\xe3\xaa\xd8\x1a\xe3\x50\xc3\x11\x29\xc6\xbf\x8b\x31\xfc\xdb\xaf\xaa\xc5\x5d\xe4\x63\x9e\x93\x33\x1e\x70\x25\x70\x80\x76\xe8\x00\xe4\xd0\x7d\x3f\x62\x3f\xdc\x15\x10\xd5\x9a\xc7\x14\xd5\xfe\xbc\xa1\xdf\x76\xfa\x58\xb9\x8f\x50\xf1\xb9\x97\x2d\x63\xbe\xbb\x42\xe9\x64\x49\x51\x13\xed\xd0\x01\xc8\xa1\xf3\xfc\xd1\x1f\x17\x3f\xf0\xb7\x69\xd7\xa9\x93\x67\x71\x0f\x8e\xcf\x34\x5a\x0b\xe3\x36\xf6\x2d\xd2\xbe\x20\xcf\x63\xfe\x6a\xde\x41\x02\x07\x68\x87\x0e\x40\x0e\x5d\x78\x81\x81\x9c\xc0\x2e\x33\x47\x47\xb6\xc8\x07\x32\x73\xea\x4c\x11\x51\x73\x34\xad\x3e\x2e\x1c\x33\x5c\x9b\x57\x53\x0b\x96\x48\xab\x89\x76\xe8\x00\xe4\xd0\xb5\xa7\x8f\x7e\xb9\xe4\x2a\xb3\xd2\x55\x56\x56\xb6\x5b\xf8\x0a\xc3\x64\xed\x4f\x0a\x2e\x1b\xa2\xf7\x98\xdb\x71\x3d\x2e\xf7\x47\x4e\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\xc0\xf3\x63\x4b\x7a\x73\xfd\x73\xd5\xf5\xfa\xe3\xef\x68\x2b\xf8\x8e\xeb\x5b\x31\x1e\x37\xb4\xb8\x73\xe6\xeb\x6a\xed\xb7\x92\x74\x52\xa3\x45\x3b\x74\x00\x72\xe8\x02\x5e\xec\x61\x5c\xef\x79\x3a\xbb\xef\x40\xdc\xe8\xc5\xe0\x2c\x97\x5d\x20\x50\xfb\x78\xe4\x91\x43\x99\xfd\x0c\xbf\x96\x44\x4f\x1e\x22\x70\x80\x76\xe8\x00\xe4\xd0\x05\xb9\xdf\x98\x0c\x8a\x3e\x50\xdd\x37\x75\xae\x62\x72\xf8\x03\xff\xe1\x2b\xfc\xbc\x7e\xde\xfb\x94\x23\xdf\x58\xfd\xa6\x6c\x75\x23\x6d\x0d\xb4\x43\x07\x20\x87\x2e\x47\xc7\xbd\x48\xd3\x9f\xa9\xdb\x66\xc5\x9d\x26\xba\x31\x8c\xb2\xf1\x51\x58\x6d\xd2\x92\xae\x6a\xb9\xc5\xa3\xdf\xc6\x2d\xaa\x8c\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\x25\x97\x92\x33\x9c\x77\x6f\x76\x0c\xa6\x27\x33\x72\x58\x69\xe2\x8a\xba\xe3\x76\x1d\x8f\x77\x74\x5b\x7e\x0f\x1f\xc3\xef\x7e\xb0\x22\x70\x80\x76\xe8\x00\xe4\xd0\x09\x7c\x33\x73\xfa\xde\xdb\xd3\xfd\xda\xfe\xef\x0d\x53\xce\xbf\x6a\xce\x6a\x73\x87\x03\x82\xcd\xed\x06\xfe\x76\xcf\xad\xb0\x2a\x31\x10\x38\x40\x3b\x74\x00\x72\xe8\x4a\xb2\x24\x8d\x16\x03\xea\x86\x9e\xd7\xe6\x9d\x68\x10\x35\x8e\xef\x66\xab\x37\xde\xd9\xb2\x8f\x22\x57\xe6\x8a\x92\xb1\xdb\x34\x29\xb7\xa2\x1d\x3a\x00\x39\x74\x4e\xf5\xf7\x5c\xe8\x0b\xad\x6e\x89\x30\x6e\xad\x7c\xd7\xec\x1b\x55\x4e\x5a\x68\x9a\xb2\x49\xf1\x6c\x1e\xed\x98\x59\xb4\xe2\xd6\x26\x70\x80\x76\xe8\x00\xe4\xd0\x6d\x9e\x50\x5a\x65\xfb\x3c\x22\xb1\xf4\x4d\x47\xdd\xf7\x6c\xc1\x88\xc2\x80\x8f\x4b\x55\xf2\x92\xd8\x87\xab\xe1\x0a\x8e\xd2\x4d\x96\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\x05\x47\xa9\xbb\x7e\x09\xee\x6f\x0d\xef\x86\x0c\xdd\x34\xbe\xec\xef\xac\xe8\xda\x96\x4c\x95\xc0\xf2\xc9\x9f\x5a\xf3\x59\x8f\xb9\x2c\x81\x03\xb4\x43\x07\x20\x87\xce\xc7\x21\xfa\x7a\xba\xf9\x66\x8f\x52\x7f\x77\xd8\x93\xcd\xe8\x25\x67\xb1\x8e\x5a\x22\x20\x50\x24\x6a\x3f\xc6\xd2\x1d\xc5\xab\x4e\xe0\x00\xed\xd0\x01\xc8\xa1\x7b\x35\xe0\x35\x11\x5c\x4f\xee\xfa\xbb\xe2\xc3\x16\x4b\x5e\x4d\xd3\x6c\xb3\xd9\x1f\xbf\xe4\x22\xa1\x0a\x75\xdb\x33\xad\xb4\xa7\x70\x02\x07\x68\x87\x0e\x40\x0e\x9d\xc4\xa7\x7a\x8d\x01\x11\x2b\x41\xcf\xc3\xe4\xc6\xd9\xb3\xb5\x6b\x6f\x04\xdb\xa6\xe4\x0b\xe4\x19\xa3\x4f\x64\x90\x35\xfb\x1c\x20\x75\x6d\xb4\x43\x07\x20\x87\x6e\xd8\x26\xf0\x6c\xa9\xad\xa9\x3c\xd7\x8e\x97\x03\x83\xb6\xfc\xbe\x27\x37\x8f\x8c\xda\x3d\xce\xd3\x20\xfa\xb2\x7e\x1f\x79\xcf\x28\x45\xe0\x00\xed\xd0\x01\xc8\xa1\x7b\xc1\x7f\xf9\x99\xef\xad\x7a\xb3\x2f\x9f\x2a\x6e\xcc\xd3\xbe\x70\xdb\xe5\x1b\x93\x11\x41\x66\x1a\x7e\xd5\x3c\x55\x3f\x7a\xab\xc1\x96\xc0\x01\xda\xa1\x03\x90\x43\xd7\xaa\x34\xe4\x98\xd6\x22\x6d\x9c\x68\xe2\x25\xf0\xbe\xa1\xae\x9a\xaa\x8c\x9b\x90\x32\x2b\x53\x13\x0f\x15\x2b\x63\x1f\x37\x26\x23\x70\x80\x76\xe8\x00\xe4\xd0\x95\x63\x0b\xa1\xdf\xd5\x52\x62\x24\xcc\x65\x46\x7b\xcf\x56\x3f\x98\x0d\xbc\x93\xeb\x1b\xd3\x29\xbd\xaf\x9a\x49\x59\xcb\x39\xe2\x3c\x81\x03\xb4\x43\x07\x20\x87\xee\x8b\xed\x46\xcd\x62\xc2\xbe\xe6\xb5\x01\xaf\x57\x1f\x75\x5e\xa5\xd7\x2e\x58\xd1\x47\x75\xc6\xfc\x32\xfe\xf2\x3e\xf4\x1e\xdb\x7e\xd2\x8f\x89\x76\xe8\x00\xe4\xd0\xed\xcb\x5e\x1c\x77\x13\x28\x79\x45\xd9\xd1\x24\x73\xa9\x3b\x57\x63\xcc\xf9\xc1\xf8\x66\xa7\x65\xdc\x37\x9d\x5f\x26\x5e\x11\x47\x49\x93\x1b\xda\xa1\x03\x90\x43\xc7\xb7\xd8\xbd\xb9\x2f\xb8\x62\x66\xa9\x73\xe7\x54\xcf\xe9\x6c\xb0\xc7\xc3\xba\x5b\x35\xb9\xe9\x60\x35\xd5\xc5\xc7\xf4\x36\xb3\x18\x81\x03\xb4\x43\x07\x20\x87\xae\x50\xcf\x56\x31\xf2\x50\xbf\xfa\x43\x0a\xae\x96\x79\xf9\x05\x3e\x2b\x6a\x69\x8d\xe2\x30\xb2\xe4\x4f\x1c\xeb\x3f\xe3\x75\x66\x48\x43\x3d\xda\xa1\x03\x90\x43\xe7\xe8\x71\xc9\xe0\xc5\xbd\xda\xb4\xda\x9b\xb7\x65\xae\x07\xce\x67\x76\x6f\x9d\x90\x58\xd4\xda\xb3\xaf\xb2\x7f\xf4\x85\xd5\x98\x32\x69\x35\xd1\x0e\x1d\x80\x1c\x3a\xcf\x17\x8f\x2d\xf0\xfa\x9d\xfb\xc4\x7b\x3f\x8d\xeb\x75\x26\x6b\x5c\xe1\xdc\xd3\xf5\xcc\xde\x5a\xa4\x6a\x7b\xa6\xd4\x5a\xab\x82\x34\xb9\xfd\x97\x43\x37\x9d\xb8\x31\x35\x72\x62\x96\xb1\x97\xdc\x45\xab\xf3\xa8\xe8\x9b\x80\x22\xa1\x6c\xab\x2b\xcf\x5c\x47\xca\x33\x2e\xc6\x9e\x7f\x48\xf7\x6f\xa0\x83\x1c\xba\x3f\xd7\xb7\x23\x02\x3b\x59\x8a\x7a\x02\xe9\x6c\xfc\x1b\xb3\xda\xc9\xeb\x73\x2c\x7e\x28\x26\x07\x5f\x9d\x69\x5b\x7f\xc6\xfc\xd3\x86\xc0\x01\xda\xa1\x03\x90\x43\x77\x3d\xca\xbd\xed\xee\x2e\xb5\x9a\xfd\xef\xa8\x94\x8b\xd6\xf6\xbf\xb3\x0a\x62\xa6\xd3\x09\x6f\x7c\xac\xf3\xb4\x38\x84\x77\xf1\x7f\xbf\x6e\x47\x3b\x74\x00\x72\xe8\x02\xc7\x0c\x4e\x08\xbb\x4b\x19\x6c\x67\x6f\x3f\x8f\x08\xd2\xe8\xd8\xdd\x6e\xa8\xf0\xf5\xa6\xf2\x2f\xda\xf2\x94\x83\x1e\xb2\xfb\x49\x37\x03\xda\xa1\x03\x90\x43\x67\x54\x2e\x5f\x7a\xf9\xbb\xa5\xe8\x89\xe8\x6e\x35\x5a\xc7\x76\x95\x8d\xb6\x47\x4d\xbf\xf7\xf9\xb4\xf6\x34\xf5\x57\x57\x3e\xcd\x20\xb5\x33\xb4\x43\x07\x20\x87\xee\xc6\xce\x31\xd9\x10\xa1\xe1\x99\x77\x13\x2e\x2f\xb6\x2c\x0e\x74\xbb\x28\x3f\x93\xa7\x99\x7e\x52\xa9\x98\x26\x1a\x50\xc3\x79\x9f\x34\xea\xa1\x1d\x3a\x00\x39\x74\xfc\xa7\x92\x8a\x6f\xf4\x7f\x7f\x7b\xe0\xfb\xec\x93\x93\x77\xb3\xe6\x64\x0f\xdd\x8e\xb2\x79\xc7\x36\x3f\x17\xba\xc2\xe1\xb6\x43\x91\x92\xc0\x01\xda\xa1\x03\x90\x43\xd7\x9e\xfb\x48\xbe\x3f\x2d\xbf\x8c\x82\xed\xb5\x90\x57\x48\x7c\xe6\x03\xe7\x30\xd5\xc4\x1f\x4d\x12\x6d\xfb\xd7\x03\x6a\x5e\x7e\x3f\x40\xe0\x00\xed\xd0\x01\xc8\xa1\x2b\x7c\x1e\x25\x54\x7e\x98\x7a\x5b\x24\xc2\x52\xec\x0e\x3b\x9f\x6a\x28\x2e\x58\x35\x7d\x0a\x63\xfa\x5e\xad\x2e\x13\x23\xf1\x58\x88\xc0\x01\xda\xa1\x03\x90\x43\x37\x75\xa4\x59\xf7\x52\x57\x76\x41\xbe\x5a\x12\xe7\x3d\xf9\x86\x03\x5f\xad\x66\x6a\x6b\x12\xda\xc3\xc5\xb4\x77\x3d\x96\xb6\xa9\x3b\x49\xe0\x00\xed\xd0\x01\xc8\xa1\xf3\xbc\x7d\xf7\x27\x56\xde\x74\x99\xfc\x8f\xd0\x52\x55\x37\x6e\xd7\x9f\x14\xba\xda\x94\xd0\x2a\x60\x38\x22\xbe\x72\xbd\xd4\x90\x86\xc0\x01\xda\xa1\x03\x90\x43\xd7\x5b\xb4\xd6\xa6\x1c\x7b\x72\x8a\xbd\x25\xe2\x61\xf2\x56\x47\x09\x1d\xb3\xc3\xb1\x6f\x9a\xaf\x6b\x24\xf1\x74\x09\x26\xcb\x0d\x33\x02\x07\x68\x87\x0e\x40\x0e\xdd\xf0\xaf\x1d\x51\x5c\x37\xf1\x93\x9f\xde\x75\xff\xd4\x6c\xb8\x5d\x53\x1e\x6e\xc3\x16\xa1\xf0\xdd\x6e\x68\xce\x84\xff\x10\x6b\x2c\xa9\x6b\xa3\x1d\x3a\x00\x39\x74\x61\xbc\x1e\x3b\x3b\xa7\xe6\x2a\xf7\xd2\xbc\xb0\x96\xbf\xa5\x29\xff\x95\xcc\xea\x16\xab\xe8\xaf\x8c\xcf\xa3\x2d\x09\x6d\xe2\x2c\x3b\x08\x1c\xa0\x1d\x3a\x00\x39\x74\x9f\xdc\x99\x82\x14\xb7\x69\xed\x74\xeb\x7a\x37\x96\x2e\xaa\x6a\x73\x32\xf1\xb9\x49\x76\x5e\x7c\xce\x48\x5f\x6c\xe8\x75\x3e\xe9\x08\x81\x03\xb4\x43\x07\x20\x87\xce\x37\x7c\x96\x27\x98\xa6\xaf\xe2\x10\xab\x68\x74\xd7\x2c\xcf\xd5\xfd\xf2\x97\xbf\xea\x2d\x2d\xec\x7d\xd6\xc6\x7f\x21\x97\xf8\x4b\xda\xb4\x68\x87\x0e\x40\x0e\xdd\x84\x65\x41\xf0\x50\x47\x1a\x9f\x8f\x4e\xa7\xea\xe5\x7b\x6b\x95\xbe\x34\x7d\x6f\x3e\x5f\x3c\xcf\x14\x9c\xb6\x3e\xf2\xc6\xbd\x8f\xf4\xce\xd0\x0e\x1d\x80\x1c\x3a\x9b\xcb\x31\x6d\xb8\x60\x9e\x40\xb6\x42\x66\xb0\xf7\x53\x0d\xc1\x6d\x47\xdf\xb0\xe4\xe0\x47\xa5\x81\xee\x1f\x7b\x7e\xa4\x3f\x24\x25\x6a\xb4\x43\x07\x20\x87\xee\x8d\x76\x92\xd2\xf3\xcc\x4e\x15\x95\xc5\xbf\x81\xea\xdf\xaa\xae\x37\xe8\xab\x79\x5a\xf4\xcd\x3d\x57\xfc\xbc\xcf\x64\xf7\xda\x7b\xd2\xb0\x85\x76\xe8\x00\xe4\xd0\x2d\x4b\x3f\xc4\xee\xd2\x5d\x39\x6a\xee\x7e\x80\xfd\x9c\x88\x41\xb6\xb7\x2e\x3f\x55\x76\x7e\x77\x94\x9c\xab\xe4\x8e\x94\x9f\x36\x1c\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\xde\xe5\x9d\x7f\x34\xea\xb6\xac\x7e\x61\x17\x2b\xea\xf2\x36\x62\x65\xf5\x3d\x54\x95\x18\xc3\x56\x36\xd6\xdc\xec\x9d\x45\x5f\x90\x0e\x3a\xda\xa1\x03\x90\x43\xa7\x35\xd7\xa3\xbf\x84\x5d\x6a\x1c\x0e\x0f\xa5\x71\xbe\x2d\x1f\xf8\xd4\x68\x8a\xb2\x49\x7f\xb6\x55\x90\xb8\xbf\x33\x62\x4f\x2b\x20\x70\x80\x76\xe8\x00\xe4\xd0\x49\x3f\xa1\x03\xf7\x2b\x1d\xfa\x6a\x83\x0a\xa3\x5b\x98\xcf\x87\xf1\xf3\xc4\x85\xaa\xcb\x5f\x17\x73\x94\x29\xda\xad\x48\xac\x92\xae\x6d\xb4\x43\x07\x20\x87\x8e\xed\xad\xf6\xb5\xee\xa8\x3b\xa7\xc3\xcf\xd0\x24\xf7\x5f\xa9\xd2\xda\xef\xf1\x64\x70\x2e\x37\x0a\xb8\xe6\xcb\x3f\xa0\x4c\x89\x25\x9d\x4d\xb4\x43\x07\x20\x87\xae\xd3\x62\x72\xfe\xa7\x64\x88\xb8\x71\x4e\xe6\x9c\xab\xb3\xc9\x1e\xbf\xa2\x6d\x1f\x93\xfb\x6b\x7b\x86\x47\x29\x7f\x52\x5f\x75\xdd\x47\xe0\x00\xed\xd0\x01\xc8\xa1\x2b\xf4\x6e\x3a\x61\xac\xa8\x17\xd9\x5d\xae\xee\x94\xa0\x5a\x7e\x30\x44\x28\xf7\x89\xce\xe6\xf3\x53\xcb\x3d\x29\x49\x35\x43\x3a\x3c\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\x47\x0a\x94\xe7\x63\x82\x40\x7c\xf2\xe4\x44\x78\xcc\x95\xa1\xa0\x36\xab\xe7\xe2\x69\x5c\xf1\x5f\xf7\x05\xc9\x44\xa7\x5c\x9c\xa5\x26\x70\x80\x76\xe8\x00\xe4\xd0\x1d\x91\x31\x28\xbb\x6c\xdd\xb8\x54\xcb\x5f\x4e\xf5\xca\xb6\xef\xb9\x47\xa8\x61\xd3\x4d\x93\xbf\xdd\xb9\x0e\x2c\x7c\x20\x40\xdb\x81\xc0\x01\xda\xa1\x03\x90\x43\x67\x42\x11\xbf\x2d\x25\xa4\x65\xd4\x31\x37\x54\xe8\x20\x10\x6b\xe9\x70\xba\xcd\xe4\x66\x87\xa0\xf3\xe9\x5e\xea\xbf\x15\x82\x72\x9e\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\xac\x0c\x7b\xb7\xa3\x77\xee\xfb\xa6\xc3\xb8\x9b\xc5\x9d\xd2\x07\xe0\xe4\xd2\xfd\xe6\x32\x1a\xcb\x76\x97\xb1\x69\xfb\x7b\x95\xc6\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\xcf\xc7\x33\xa4\xae\x04\x9f\x66\x1e\x08\x97\x16\x7b\x47\xf1\xdb\xa6\x65\x7f\x67\x58\xee\xf1\x62\x5e\x59\xfd\xaf\xfd\x02\xe3\x73\xd2\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\xf0\x83\x2f\xab\x36\x34\x39\xf4\x3d\x84\x8a\x3a\x56\x4e\xa5\x7b\xed\x29\xe2\xd1\x8d\x62\x7e\x91\x96\x28\x16\xdf\x39\x21\x6b\xca\x4f\xe0\x00\xed\xd0\x01\xc8\xa1\x13\x5c\x66\xfb\x5a\x70\x3b\x68\x70\x56\x67\xff\xa0\xf3\x80\x79\xed\xd9\x09\x27\x39\x8b\xa1\x91\xfb\x16\x0b\xad\x75\xd2\x95\x83\xd6\x04\x0e\xfe\xcb\xa1\x8b\xbf\xec\xf1\x42\x24\x75\xa3\xb1\xed\x10\x8d\xb8\x4d\xf1\x76\xba\xc2\xca\x07\x6a\x79\xa1\xa8\x6f\x3b\xa5\xe2\x1b\xcf\x7c\xfe\xab\xf6\x6f\xa0\x83\x1c\x3a\x3c\x8a\xc5\xba\xc4\x7e\x2a\x59\xf2\xb3\x98\xff\xc6\xf6\x38\x16\x9c\x76\x60\x5f\x80\xe1\x28\x97\x46\x72\x77\x60\x97\xfb\xd0\x2e\x02\x07\x68\x87\x0e\x40\x0e\x5d\xad\xd6\xca\x4f\xc3\x3e\xb6\x6f\x16\x95\xc7\xf6\x52\x69\x3c\xee\xb8\xac\x5b\x7c\x3c\x2c\x71\x54\xe4\x58\x49\xb0\x69\x73\xf6\xb0\x07\x81\x03\xb4\x43\x07\x20\x87\xee\x4c\xe1\xdd\x7b\x17\x7e\x8f\x64\x66\xec\x1c\xa4\x60\x76\x72\x63\x53\x7e\x94\xab\x7c\xb5\xf0\x1e\xdd\x0d\x79\x10\xe6\xb1\xa7\x94\x8e\xc0\x01\xda\xa1\x03\x90\x43\xf7\xa0\xf2\x05\x2b\xf3\x21\x27\x7f\x8b\x0c\x01\xed\x4e\xb2\x11\xae\x3e\xd6\x7d\x34\x84\x74\x63\x1c\x1b\xf3\x4a\x60\xa8\x73\xc2\x59\x02\x07\x68\x87\x0e\x40\x0e\xdd\x0a\xff\x90\x60\x12\xd3\xe7\x33\x4d\x35\x61\x5e\x0b\x5f\xd3\x3d\x24\x7b\xb7\xce\xec\xf5\x3d\xd4\xbe\x19\xc3\x9f\xa7\x77\x48\x5d\x97\xc0\x01\xda\xa1\x03\x90\x43\x77\x5e\x2d\xb4\xd6\xc2\xfb\x52\xd9\xcb\x96\x57\xdb\x99\x9c\xcc\xb9\x0f\xe3\x53\x43\x5a\x23\x1a\xdf\xe5\xd8\x50\x92\x4b\x92\x2f\xeb\x13\x38\x40\x3b\x74\x00\x72\xe8\xb8\x35\x3e\x74\x7d\x98\x7c\xd1\x11\x5d\x9c\xaf\x6d\x9c\xcc\x4b\xfe\x4a\x5a\xb2\xd6\x52\xa2\x69\xba\x29\x31\x7d\xfa\xd7\xd1\x49\x2e\x02\x07\x68\x87\x0e\x40\x0e\x9d\x82\x0c\xc5\xd4\x8e\xea\x4f\x61\x57\x26\x02\xca\x56\x0f\x44\x44\x6b\x09\x28\xf2\xfc\x2e\xbf\xe7\xe7\x92\x71\xa3\x43\x3c\x2c\x95\xd4\xce\xd0\x0e\x1d\x80\x1c\xba\xf1\x7e\x05\x0f\xf1\x3c\x4e\xec\x2c\xa3\x4d\xdd\x90\x0d\xfb\xb2\x3b\xf3\x84\x48\x33\xf3\x83\xce\xa6\xdc\x46\x01\xc7\x25\x7a\x7a\x02\x07\x68\x87\x0e\x40\x0e\x9d\xd8\x81\xdd\x2e\xb4\x1a\x4b\xd1\x7d\x96\x61\x15\xb5\x0b\x1e\x7e\x94\x62\xfc\x12\xdb\xa2\xa3\x87\x43\x00\xd7\xc9\xb0\x50\x1d\x43\x02\x07\x68\x87\x0e\x40\x0e\xdd\xa9\x0a\xb7\xd0\xb0\x43\x23\x5f\x1e\xe4\x3c\xa5\x66\x58\xa9\x3f\xcb\x7c\x2f\x75\x7f\xa4\xfb\xe4\x47\xa2\xdb\x61\x8d\xc7\xf4\x09\x4e\xe0\x00\xed\xd0\x01\xc8\xa1\x6b\x92\x3d\x43\x46\x73\x96\xe0\x28\x8b\x1f\xd4\xb9\xfd\x59\xab\x85\xcb\x38\x25\x68\x23\x9c\x3c\x3f\xa8\xb4\x9d\x55\x2e\x72\xd9\x8e\xc0\x01\xda\xa1\x03\x90\x43\x57\x1c\x72\x5a\x45\x24\xaf\xc9\x44\x7c\xbf\x9e\xa5\xc7\x6f\x96\xd6\x44\x41\xb3\x0c\xf5\xe2\x96\x1f\x69\xf7\x69\x62\x83\x05\x3a\x49\x21\x18\xed\xd0\x01\xc8\xa1\x33\xca\x30\xae\xf0\x48\xae\xba\xf2\xd8\xd1\x54\x91\xf3\x70\x84\x61\x72\xb9\xed\x5d\xfe\x84\x32\x93\x44\xbb\xda\x47\x71\xb5\x2f\x49\x5b\x03\xed\xd0\x01\xc8\xa1\xe3\x3d\x1a\xab\xba\x55\x7b\x72\x66\xf7\x3b\xfa\xbf\x43\x69\x3d\x34\xfa\xc1\xbf\xcd\x1e\x2d\x2e\xfe\x16\xdc\x1b\x2d\x9c\xc0\xf6\xbf\x3f\x6c\xa2\x1d\x3a\x00\x39\x74\x3b\xac\x9e\x70\x18\x1d\xde\x37\xd7\xb3\x5f\x34\xf2\xe7\xc8\xb3\xf6\x8b\x7c\xf2\x6b\x19\xb4\xf7\x86\x23\x41\x55\x05\xcb\x31\x3b\x0d\x02\x07\x68\x87\x0e\x40\x0e\x9d\xcb\x57\xae\x13\x4d\xbc\xfb\x65\x9f\x7d\xe0\x34\xce\x12\x4e\x19\x56\x7d\x2c\xf4\xa2\x39\x2e\x92\x6d\xeb\x88\x82\x17\xbd\x91\xb6\x28\x81\x03\xb4\x43\x07\x20\x87\xae\xba\xa2\xe1\xe8\xe1\x7d\x87\xbf\xbd\x7f\x75\x64\x6b\xa0\x69\xe9\x62\xc2\x6b\xb2\x2b\xfa\xf1\xf7\x65\x4c\x0a\xb8\xfa\xdd\xd6\xa9\x0f\x13\x38\x40\x3b\x74\x00\x72\xe8\x0e\x27\x54\xbd\x5b\xe2\x8e\xfd\xd8\x78\xbd\xe2\xc9\xd8\x7e\xdb\xbd\x8e\x46\xf1\xed\x8e\x56\x52\x2c\x86\xf5\x4e\x17\xee\x6a\x3f\x54\x26\x70\x80\x76\xe8\x00\xe4\xd0\xd9\xf5\x35\x3a\xa5\xbc\xe7\x55\xe5\xe8\x68\x79\x3e\xa8\x22\xad\x22\xb3\x3b\xfe\xde\xd8\xd5\x16\x9f\x6c\xe6\x58\xbd\x60\xb3\x3c\x52\xa2\x46\x3b\x74\x00\x72\xe8\x3a\x44\x4a\x6b\x24\xbe\x7f\x8d\x15\xb9\xfc\xd6\x34\x5f\xc7\xa6\xfd\x33\xf7\x91\xdc\xa0\x5d\x4d\x7b\xb1\x33\x9a\xaf\xed\xeb\x9c\x9c\x08\x1c\xa0\x1d\x3a\x00\x39\x74\x86\x7d\x14\x0b\xd2\x99\x8e\xcf\x85\xa6\x34\x07\xbf\xd0\xd4\x66\xa4\x12\xc5\xcf\xac\xd5\x8e\x76\x9f\x48\xe1\x7e\x11\x30\x3c\x4f\x8a\x9a\x68\x87\x0e\x40\x0e\xdd\xa3\x91\xb5\x3a\x39\xb6\x8f\xe5\xbb\x9f\x4a\x6b\x8c\xe5\xca\x51\xdc\x4b\xde\x88\xb8\xb6\xcd\xf2\x82\xe6\x25\xfb\xa9\xee\x37\xff\xfb\x82\x31\xda\xa1\x03\x90\x43\xc7\x53\x42\x55\x4c\x6e\x5f\x18\xab\x2f\xc5\xd1\x76\x2f\xcf\x3c\x23\x47\xad\x9e\xd7\x26\xd0\x50\x8f\xf1\x3d\x6b\x9b\x57\x7f\x8d\x33\x81\x03\xb4\x43\x07\x20\x87\xae\xe3\x6b\x55\xc8\xc9\x16\xd7\xbc\xc3\xb6\x0c\x93\x2c\xc9\x23\xd5\xca\xa3\xaf\x23\x53\xfa\xb6\x4e\x7c\x5a\xbf\x1e\xef\xc8\x3e\x48\x9a\x29\xd1\x0e\x1d\x80\x1c\xba\x92\xa8\x80\xfb\x4b\x21\xef\x34\xcf\x7f\xb4\x7d\xb5\xe2\xdd\x1e\x31\x20\x2b\x7d\xfe\x3d\xb9\x24\xfb\x94\x58\xf1\x16\xbd\xe4\x31\x61\x02\x07\x68\x87\x0e\x40\x0e\xdd\x9d\x36\xef\x96\x93\x9e\x2b\xca\x5e\x3f\x87\x55\x3e\x6e\x1e\x93\x09\x39\x47\x63\x6a\x90\x20\xb5\xab\x70\x6b\x34\x89\x72\x4a\x9e\x99\xc0\x01\xda\xa1\x03\x90\x43\xa7\xe7\x50\xcf\x54\xdb\x71\x96\xa9\x21\x33\x73\x7a\xfc\x98\xf8\x10\x4f\xb3\x58\xed\x27\xef\xee\xcc\xdf\x2e\x96\x96\x5c\xc7\xd3\xe5\x08\x1c\xa0\x1d\x3a\x00\x39\x74\x14\xde\xd5\x97\x94\x95\x1d\x45\xc8\xef\xfd\x30\x0d\x7d\x4c\x4e\x87\xe9\xba\x1e\xab\x67\x09\xc9\x08\xdc\xdc\xd0\xd8\x6d\xe5\xc4\x48\xe0\x00\xed\xd0\x01\xc8\xa1\xa3\xe9\x96\x31\x32\x73\xb8\xc0\x18\x6e\x60\x23\x74\xf7\xd1\x93\x1d\x1b\x93\xc6\xfd\xe9\xe4\x01\xfb\xde\x04\x74\x86\x34\x7c\x54\x21\xf5\x4d\xb4\x43\x07\x20\x87\xae\xe0\x99\x73\x74\x94\x45\x3f\x27\xc5\xdd\x2f\x41\xd9\x61\x03\xb2\x47\x3f\xfa\x03\x9e\x4f\x42\x43\x7b\x66\x7c\xe3\x3c\x08\x29\xd2\xd6\x40\x3b\x74\x00\x72\xe8\x42\x3a\xd9\xaf\xdb\x48\x5f\xdf\x2d\xd9\x18\xfd\x21\x32\x81\xde\x87\x35\xdf\x8c\x96\xdb\xb6\x20\x8b\xab\x20\xfe\x87\xce\xd7\x71\x77\x02\x07\xff\xe5\xd0\xbd\x5d\x93\xe5\xfe\xa3\x9f\x2b\x55\xf4\xb0\x3f\xd4\xd8\xb2\x91\xdc\xf7\xc5\x71\x9f\xd5\x6c\xff\x84\xde\xc1\x48\x42\x40\x63\x31\xfb\xdf\x40\x07\x39\x74\x53\xac\x46\x5b\x3b\xe9\x5f\xaa\x49\x36\xd4\xd9\x02\xcd\xa5\x56\xd5\xf3\x56\xde\xc1\x96\x6e\x1c\x7d\x4f\x6c\x39\x3f\xbe\xe8\x3f\x41\xe0\x00\xed\xd0\x01\xc8\xa1\x9b\x70\xd6\x7b\xa4\x12\xb2\xd3\xa9\xe9\xca\xe8\xd5\xf4\x82\xa7\x19\x42\x0f\xc4\xea\x2d\x2f\x9b\x6a\x53\x71\x6c\xd2\x84\x5d\x55\x24\xad\x18\xda\xa1\x03\x90\x43\xd7\xd1\x55\x71\xd8\xeb\x7d\xf1\xd2\xb7\xc6\xa5\x1e\xfa\xc4\xb5\x33\xf4\xf9\x71\xb4\x07\x09\x0b\x95\x18\x69\xc0\xd8\xdf\x4e\xab\x4d\xe0\x00\xed\xd0\x01\xc8\xa1\x3b\xec\xfa\x58\xaa\x21\x68\x9c\xc7\xc2\xad\xaa\xd2\xfa\x0c\xeb\x6a\xb9\x6c\x24\xf7\xf5\x17\xef\x8e\xcd\xd1\x1d\xa0\xa4\x3e\x23\x2e\x41\xe0\x00\xed\xd0\x01\xc8\xa1\xdb\xcc\xf7\x33\xc8\xa4\x67\x8f\xff\xa6\x91\x44\xde\xaa\xe3\x4d\x1f\xee\xf5\xe1\x9c\x5c\x8d\x64\x61\xc0\xdd\x27\x09\x39\x71\x21\x82\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\xe6\x9f\xce\x11\x09\x52\xc9\x17\xc2\xac\x5f\xd6\xd5\x8a\x1f\x09\xa5\xbc\xb3\x3d\xff\x40\x62\x4f\x55\xe2\xe5\xec\x9b\x0e\x27\x0a\x75\x08\x1c\xa0\x1d\x3a\x00\x39\x74\x1f\x65\x31\xe3\x3c\xc7\xed\xd2\x82\xbf\xc7\xc4\x9a\x2f\x88\xc5\xa6\x2b\xc9\x47\xa5\xdd\x59\x9f\x2d\xc9\x79\xf3\xc9\xe0\xc5\x38\x13\x81\x03\xb4\x43\x07\x20\x87\xee\xc8\x49\xa9\xea\x9d\xcb\x2a\xb7\x25\x6a\x1a\xea\xc3\xb4\x26\xc6\x3d\x8d\x19\xd2\x73\xb2\x1a\xab\x76\x7a\x24\xbd\x7f\xce\x97\xba\x87\xc0\x01\xda\xa1\x03\x90\x43\x37\x72\x6d\x34\x94\xf9\x34\x63\x74\xe7\xe9\xe9\x12\x59\xf9\xa0\x8c\x53\xe7\x7d\x7e\x96\xf6\xd1\xb3\x97\x9d\x51\xf9\x7a\xfb\x1b\xcf\x21\x02\x07\x68\x87\x0e\x40\x0e\x9d\x3d\x8b\x76\xe5\xed\x43\xef\x40\xba\xb5\x84\xda\xe4\x90\xbb\xd7\x2c\x3f\xbd\x58\xc6\x4a\xe4\x24\x5d\xfb\x7e\x9d\x97\x6f\xbd\x0d\x08\x1c\xa0\x1d\x3a\x00\x39\x74\xe6\x03\x15\x4a\x8c\x36\x4e\xb4\xe2\x79\x5f\xac\x1a\x68\x1f\x98\x12\x89\x9c\x4a\xe9\xcf\xc7\x7a\x19\x8e\x86\x2e\xf1\x72\x33\x90\x86\x50\xb4\x43\x07\x20\x87\x4e\x2a\x22\xc3\xc7\xfe\xf8\xb8\x75\xb9\xed\x65\x65\xcb\x51\xad\xd8\xd7\x7e\xc2\x33\x47\x44\x84\x8e\x44\x6a\x94\x8f\x47\xcd\xcd\x5f\x22\x70\x80\x76\xe8\x00\xe4\xd0\xd1\xba\x71\xb2\x28\x3b\x32\xf9\x04\xe5\xca\x66\x2a\xdb\xfe\xb0\x08\x6f\xa9\x9b\xfc\xcc\xe1\x9a\xb9\xcd\x18\x91\xd5\x1d\x61\x86\x11\x38\x40\x3b\x74\x00\x72\xe8\x8a\x1e\xd0\x9c\x2c\xb0\x88\xde\xa0\x66\x6b\x6d\x13\x12\x6a\xcf\xa2\x39\xbc\x70\xcc\x4f\x97\x08\xb5\x31\xac\xd8\x7c\x39\x10\x45\x0a\x74\x68\x87\x0e\x40\x0e\x5d\xd6\xe7\xb9\x90\x4c\xdb\x08\xa1\xb4\xa8\x57\xcb\xd6\x67\xb5\xde\x72\x76\x27\x51\xf1\xda\x54\xf6\xeb\x8b\xb6\xb3\xee\x5c\xe0\x16\x22\x70\x80\x76\xe8\x00\xe4\xd0\xc9\xfd\x0d\xd0\x29\xf2\x88\x50\xd8\xb0\x55\xd1\xb2\xfa\x23\x59\x97\xc7\xcf\xa8\xb5\x74\xdd\xbd\xdc\x51\xf1\x9c\x76\xa4\x46\xbf\x22\x81\x03\xb4\x43\x07\x20\x87\xee\x89\x6b\xf4\x80\x88\x9c\xc4\x9b\xf5\x87\x2a\x7b\x3e\x27\x9a\x2a\xbd\xe5\x3d\x33\x75\xb0\xbe\x49\xaf\xe0\x88\xa3\x8c\xad\xea\x95\x7d\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\x85\xbf\xf7\x66\x1d\x0b\x74\x85\xc4\xb4\xe6\x8f\x0b\x8e\xb1\x8f\xa9\x3a\x04\x48\xbf\x4a\xb1\x9e\xee\x2b\x48\xc9\x77\x08\xa1\x25\x6d\x5a\xb4\x43\x07\x20\x87\xae\x5b\xce\x6d\xa9\x64\xf7\x8f\xb5\xe4\x14\x1f\xad\xaf\x3a\xcd\x95\x49\x9d\xce\x1d\x61\xe1\x22\xb5\xca\x37\x4b\xfc\xf3\x73\x9f\x90\xb6\x06\xda\xa1\x03\x90\x43\x97\x18\xd5\xfd\x62\x03\x3b\xe6\xc1\x2d\xf7\x89\x8d\xb5\xaa\xa7\xef\xd0\xad\x26\xcf\x94\x4c\xb5\x8d\x15\x56\xfb\x50\x9a\xb8\xbc\xa3\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\x8a\x13\xfc\xa5\x3f\x8a\x33\x76\x0a\x76\x38\x93\x95\x2d\x06\x5f\x79\xd2\xdd\x73\xe7\x2c\x05\x85\xa7\x44\x56\x82\xcf\xfb\xd3\xec\xa4\xf9\x08\xed\xd0\x01\xc8\xa1\x53\x75\x93\x35\xd0\x53\xdf\xa5\x20\x2c\x52\x58\xdb\x75\xef\x60\xb0\xef\xda\xda\xb9\xd0\xe3\x03\x81\xa7\x62\x2d\xf7\xf8\x24\x39\xba\x11\x38\x40\x3b\x74\x00\x72\xe8\x26\x33\x8c\x2d\xc2\x5d\x8f\x78\xf5\xee\x64\x52\x2c\x31\x30\x38\xf3\xc7\xdf\x72\x73\xd7\x62\x7e\x96\xfc\xd0\xdf\xa9\x1d\xc1\x53\x97\x09\x1c\xa0\x1d\x3a\x00\x39\x74\xa5\x4d\xcf\xef\xc5\x9c\xf5\xa4\x35\x02\xca\x5f\x4e\xb7\x8c\xee\x22\xba\x70\xba\x90\x3c\xfe\x04\x7f\xcd\xe9\xce\x8f\xcd\x45\xe6\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\xbb\xd0\xc9\xfd\xb6\x2d\x55\x15\x14\x89\x45\x74\xe7\xf5\xb9\x7e\xe4\xce\xb2\x3c\xff\x3a\x2e\x2f\x81\x85\xbb\x5a\xde\x0f\xa7\x75\x21\x70\x80\x76\xe8\x00\xe4\xd0\xc9\xc5\x27\xe4\x24\x0f\xa6\xbf\x1c\x09\xd2\xea\x2a\xb8\xeb\x33\xd5\x4b\xbf\x37\xe7\x13\xd9\xc9\x34\x9b\x3b\x0b\xb7\x03\x3f\x3a\x92\xce\x26\xda\xa1\x03\x90\x43\xb7\xf9\x3a\x90\x57\x27\x29\xc2\x85\x8e\x39\x3d\xda\x9e\x8b\xfb\x2f\x6f\xcc\xe6\xee\xfe\x21\x61\xcd\x23\xbf\x39\xdd\x98\x4f\x89\x91\x56\x13\xed\xd0\x01\xc8\xa1\xcb\x9f\x5c\x62\x61\x88\x3e\x52\x62\x30\x25\x3c\x72\xa9\x57\xf3\xf1\x85\x1d\x7b\xc4\x25\xd5\xe2\x72\xd7\x1c\x3a\xed\xa7\x5e\x07\xd3\x12\x38\x40\x3b\x74\x00\x72\xe8\xea\xa6\x75\x4e\xd8\x2e\x19\xf8\xe4\x78\x6c\x4d\x31\x97\x1a\x5f\x54\xec\xff\xc1\xc1\xbd\xa2\x73\x81\x4f\x89\xfd\xe3\xfb\xd6\x16\x33\x02\x07\x68\x87\x0e\x40\x0e\x1d\x03\xdb\xa1\xea\x55\x7a\x8a\x92\x85\xc7\x6f\x64\x17\x22\x29\x27\x78\x9b\x98\xab\xeb\x65\x76\x1e\x3d\x18\x51\x31\x74\x4c\xa7\xcf\x88\xc0\x01\xda\xa1\x03\x90\x43\x77\xd6\xe8\x3d\xbb\x2c\x5f\xb8\xf7\x4c\xe3\xa5\x1f\x7b\x7c\x23\x03\x0a\x7b\x47\xef\xf3\x3a\xc6\xe6\x58\x2a\x6f\x17\x84\xaf\xed\xe4\x27\x70\x80\x76\xe8\x00\xe4\xd0\xfd\xc1\x7c\x86\xde\x37\x78\x72\x9e\x5a\x3c\x3a\x7c\x41\x85\x21\x2f\xaa\xb7\xa7\x71\xe4\x0c\x95\x83\xd9\xf9\xd4\x8a\x32\xc2\xc4\x95\xc0\xc1\x7f\x39\x74\x22\x9b\xca\x2f\xad\xc8\x0a\xde\x1d\x6f\xd8\x7d\x24\xe8\xf6\xb6\x94\xde\x93\x62\xca\x3f\xd4\x5a\x19\x8f\x6e\xbb\x46\xf6\x1f\xb3\xdf\xfe\x37\xd0\x41\x0e\x9d\xbe\x91\x4f\x41\x93\xae\xf3\xa9\x79\x6d\x47\x43\x8d\x83\x57\x62\x31\xf6\x94\xb7\x75\x59\x7f\x4c\x8f\x2d\xd4\xef\xa1\x32\x1d\x56\x21\x70\x80\x76\xe8\x00\xe4\xd0\x75\x6b\xf3\x0c\x79\xac\x36\xcb\xa7\xa9\x9a\x1e\xa9\xe4\x89\x2e\x7a\x7d\x30\xd6\x2d\x74\x6e\xeb\xb6\xf8\xef\xef\x31\x7c\x98\x81\x2a\x81\x03\xb4\x43\x07\x20\x87\xce\x97\xf2\xe3\x2d\x19\xc9\xe2\x3b\xda\x35\xba\xdb\x1d\x7d\x6e\x0b\xc5\xa5\x7c\xa2\xad\x0e\x6b\xcf\xdb\x0d\x3d\x46\x4a\x64\x9e\x88\x13\x38\x40\x3b\x74\x00\x72\xe8\xe6\x7e\x70\x74\x09\xaf\x18\xaa\x9d\x73\xbc\xf8\x48\xbf\xa5\x64\x26\xe7\x7d\x54\xc4\x51\x21\xb7\x92\xc8\x95\x73\x4b\x0a\x87\xc9\xed\x08\x1c\xa0\x1d\x3a\x00\x39\x74\x6f\x25\xee\x18\xfd\x7c\x1d\xef\xa7\x9d\xcf\x14\xe6\x39\x24\xbc\x1e\xa9\x29\x11\x72\xe4\x74\xb3\xe8\xfa\x5b\x81\x72\xbb\xd4\x8b\x4a\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\x77\xa1\x77\xcf\x9b\x88\x74\xdd\x09\xf9\xfc\x87\x3c\xd3\x7a\x66\x77\x36\x79\xef\x19\x9c\xd8\x2b\xfd\xb8\x4f\x49\xea\xfc\x43\x29\xd2\x78\x8c\x76\xe8\x00\xe4\xd0\x31\xa8\xaf\x5d\x7d\xae\x64\x8b\x9f\x6a\xba\xc5\x1a\xdd\x21\x33\xc3\x89\x69\x2c\xf5\x58\xdc\xd3\x7a\x7b\xe3\x8d\x1c\xd3\x0d\x2d\x6a\x02\x07\x68\x87\x0e\x40\x0e\xdd\xe5\xca\xd5\xfb\xe7\x5a\x22\x72\xa2\xb3\x5d\x23\xce\xbe\xf4\x1b\x56\x78\xd5\xb2\xf8\xea\xa1\xe5\xcd\x52\xd1\xc1\xd3\x8b\xfc\x74\xa4\xd8\x84\x76\xe8\x00\xe4\xd0\x59\x7f\x55\x5f\x6f\x0e\x4c\xd9\xd1\xe3\xc8\x28\x1e\xe1\xa0\xb5\xeb\xd0\x8f\xfc\xbf\x4e\xf1\x5a\xd5\x14\x5e\x76\xeb\xab\xba\xf4\xac\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\x6a\xc7\xdb\x6b\xd6\xf1\x67\x9e\x51\x9b\x30\xde\x56\x57\x9d\x01\x1f\x25\x35\xb7\xa6\xd6\x1a\xdc\xb2\xb2\x62\x95\xf7\xfe\xe2\xd6\x25\x70\x80\x76\xe8\x00\xe4\xd0\xb5\x55\x9a\xd8\xc5\x08\x7d\x0c\x4a\xf3\xe9\xa8\xb8\xff\xfb\xfc\xac\x51\xb9\x7f\xe1\xee\xab\xfe\x64\x94\x41\x4f\x43\xfd\x75\xe5\xe8\x08\x1c\xa0\x1d\x3a\x00\x39\x74\xcb\x89\x97\x74\x03\x9f\x13\xbd\xa1\x7a\x4b\xd4\x42\x0b\x9e\x89\x67\x79\x97\x2f\xe9\xd1\x8f\x85\x73\xe6\xc9\x17\x17\xe4\x9e\xdd\x4f\xe0\x00\xed\xd0\x01\xc8\xa1\xab\xe1\x72\xfc\xba\x3c\x90\x99\x49\xbf\x71\xbd\x5a\xe7\x69\x45\x3f\x05\xb5\xb3\x5b\xc3\x26\xbf\x14\xd5\x65\x22\xc8\x43\xf1\xe9\x49\x02\x07\x68\x87\x0e\x40\x0e\xdd\x89\x5b\x4a\x7d\x80\xa9\xa6\x5b\xa2\x6e\x3c\xfb\xc7\x93\x42\x57\xe6\xd8\x01\xb3\xb1\xe6\xfb\x7f\x24\xf3\x36\x2b\x26\xc9\xb4\x49\x1d\x08\xed\xd0\x01\xc8\xa1\x4b\x4e\x30\xe0\x0a\x94\xdf\x25\xe7\xa7\xcc\xed\xac\xb7\xf7\xd3\x87\x34\x81\xe3\xd6\x47\x17\xbe\x4f\xc8\x5b\x8e\x4e\x6b\x70\xdb\x90\x62\x13\xda\xa1\x03\x90\x43\x77\x53\xc8\xd9\x35\xd1\xf7\x7e\x07\x9f\x9e\xf2\x5f\xa6\xd7\xdf\x73\x14\x7e\xad\xaf\xa8\xac\x66\x3d\x32\x30\x2e\x28\x48\x90\xb2\x72\x20\x70\x80\x76\xe8\x00\xe4\xd0\x19\x74\x2b\x9d\xcc\xd4\xa3\x49\x78\xf2\xc4\x5f\xe1\x75\x93\xa6\x6b\xe4\xef\xf5\x1d\x8f\x42\xae\x7a\x7c\x7f\x44\xab\x7a\x92\x45\x52\x8b\xc0\x01\xda\xa1\x03\x90\x43\x77\xba\x60\x61\x57\x51\x19\x45\xd9\x85\xf3\x89\xc3\xac\x7f\x8b\xf2\x7a\xc3\x95\x93\x68\x4f\xf4\xfd\x2a\x10\x52\xbe\x6f\x46\xfe\x48\x83\xc0\x01\xda\xa1\x03\x90\x43\x17\x29\x5f\x29\xfd\xab\xc3\xe8\xc5\x97\x22\x21\x3d\x0e\x21\x7d\xf7\x37\xd2\x92\x91\xbb\x13\x28\x92\x82\x7c\xd2\x45\xec\x68\x87\x48\x1f\x86\x76\xe8\x00\xe4\xd0\x05\x85\x44\x69\xf5\x4a\x8d\xbc\xf5\xae\xff\xcb\xc7\xb6\xf3\xdb\xb0\x44\xc8\x01\xd6\xcf\x0f\x05\x1f\xbf\x88\x3e\xd9\x3f\x75\x34\x83\x34\x3a\xa3\x1d\x3a\x00\x39\x74\x8f\x5f\x28\x8a\xb2\x29\xbd\x6d\xbc\x57\xa3\xaf\x67\x68\x89\x5b\x71\x50\x93\xbb\x65\xee\xff\xb8\x7d\xed\xac\x2a\xb9\x54\x82\x1f\x69\x35\xd1\x0e\x1d\x80\x1c\x3a\xe5\x5e\x8e\x48\xc1\x8f\xa3\x1f\x0e\xc8\xb5\x89\xb4\x7f\x52\x5e\xdf\xa2\xbc\xcc\x73\x27\x8c\x47\xf6\x74\xe3\xa8\xdb\xda\x95\x7d\x8e\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\x9e\xe9\x0b\xef\xcd\x73\x0d\x29\xe8\x57\xf9\x76\x7c\x54\x97\xe7\x59\xd0\x4d\xe8\xf3\xf8\x9c\x2a\xe2\xe1\x17\xbc\x7d\x46\xde\xd7\x86\xc0\x01\xda\xa1\x03\x90\x43\xa7\x50\xb1\x4b\xda\xf5\xbd\x51\x5b\x40\xdb\xa6\x7a\xcb\x70\xdd\x43\x4f\xb5\xe6\x5f\xd9\x17\x09\x87\x28\x07\xc9\x56\xbe\xe2\xb3\xda\x04\x0e\xd0\x0e\x1d\x80\x1c\xba\x3b\x7d\x96\x37\xb3\x8c\x0d\xcf\xee\x1d\x5b\x3f\x7e\xc5\xb4\xfd\xe3\xe2\x02\xe5\xca\x8e\xe0\xba\xb0\x29\xbf\x1d\x31\xd7\xcb\x5e\xf2\x10\x38\x40\x3b\x74\x00\x72\xe8\xbc\x32\x5c\x27\x94\x4b\xd7\x05\x58\x7c\x65\x13\xd5\x2f\x91\x9f\x70\xf6\x49\x3f\xf2\x61\x6f\x63\x90\xe7\x88\xc3\xab\x8f\xb2\xc2\xa4\xee\x84\x76\xe8\x00\xe4\xd0\x0d\x99\xe6\x47\x69\x8c\x90\x55\x19\x38\xd8\x59\x47\x0d\xea\x27\xbe\xf3\x4b\x0e\x2f\x7a\xb3\x94\x37\xec\x7b\xe1\xf6\x38\x99\x08\x29\x1d\xa2\x1d\x3a\x00\x39\x74\xfe\x13\xdc\xac\x17\x79\x72\x58\x07\xdc\x0b\x8a\xeb\xec\x2a\x56\xda\xde\x1b\xaa\xe6\xd2\x38\x9d\xff\x9c\x73\x61\xa2\x37\xdc\x5f\x9d\xc0\x01\xda\xa1\x03\x90\x43\xd7\x72\x4a\xbf\x77\xf2\xf3\x10\x79\xfe\xa5\x03\x7d\xd1\xaa\x8f\xaf\x5c\xf1\xf8\x31\x2d\x78\x20\xa5\xab\x87\x5e\x67\x92\xab\xec\x33\x37\x81\x03\xb4\x43\x07\x20\x87\x6e\x7b\xd5\x60\x67\xe7\xa1\x54\x71\xee\x00\xb9\x1a\x9d\x6a\xa3\x6a\x0f\xf1\x9e\x8a\x5c\xe9\xb7\x9c\xbc\xdd\xd4\x62\x62\x96\xcf\x79\x09\x1c\xa0\x1d\x3a\x00\x39\x74\x7d\x47\xd7\xfb\xdb\x5a\x3a\xe2\x98\x69\x7b\x5a\x24\xcd\x17\x8d\x87\x3c\x33\xef\xde\xd6\x48\xf2\xc6\xf1\xf1\x5c\xaf\x2f\x96\xc7\x09\x1c\xa0\x1d\x3a\x00\x39\x74\x25\x64\x07\x5e\xc7\x80\xac\x4b\x7f\x1b\x6f\x88\xf5\x1e\x90\x28\x3a\xe8\xce\xa0\x23\xec\x97\xf0\x42\x6c\x5f\x51\x50\xef\x9e\x74\xd2\x14\xf2\x5f\x0e\x9d\xaa\x73\x56\xec\xd1\xe1\xb3\x6f\x0f\x15\xca\xfe\xbd\x2f\x4d\xb7\x64\x56\x5a\x65\xc3\x50\xc2\xee\xe9\x7f\x66\xe1\xb7\x72\x8f\xb6\xc0\xbf\x81\x0e\x72\xe8\x12\x7e\xe5\x31\x49\x0f\x1d\xf6\x3e\x56\xc2\x1c\x1c\xe6\x44\xa9\xc1\x62\xfd\xba\xa1\xf7\x28\x13\x73\x78\x73\xe6\xe5\xf7\xce\x77\x48\xd7\x0c\xda\xa1\x03\x90\x43\x77\x27\xed\x22\xe1\xe0\x3f\xf9\x54\x69\x64\xd6\x26\xe5\x69\x66\x9f\x84\x5d\x71\x56\x6a\x6e\xf2\x3b\x8a\xc2\x86\xee\x5c\x5e\x75\xd2\x7b\x41\x3b\x74\x00\x72\xe8\x56\x1e\x1d\xae\x08\x54\x5a\x78\xe5\xf2\xfe\xf6\x39\xe9\xce\xd8\xe0\x1f\xdd\x8f\x7f\x6b\x79\x3d\x7b\xe8\xd6\xf9\xad\x8c\x4e\xfb\xf8\x15\x02\x07\x68\x87\x0e\x40\x0e\xdd\x55\xaa\xcc\xdb\xec\x6b\x89\xb3\x89\xf3\xcd\x2c\x73\xc9\x89\x69\xc2\x83\xa5\xb6\x1f\x3f\x32\x75\x1b\x65\xd7\x64\xf1\x33\xca\x90\x76\x39\xda\xa1\x03\x90\x43\xb7\x7a\xfb\x67\x74\xc7\x86\x61\x72\xa7\x2a\xff\x2b\x39\x3d\xdd\xb2\xa7\x99\x44\xc3\xd0\x3c\xe3\x46\x68\xa7\x80\x45\xdd\x7a\x33\x29\xb7\xa2\x1d\x3a\x00\x39\x74\x07\xc9\xe9\x0e\x1a\xaf\xaa\xa8\x99\xb0\xd4\xbc\x1b\xd3\x3f\xf4\xd9\xa2\xe3\x21\xa7\x16\x9f\xb1\xe6\x73\x26\xbf\xb3\x57\xe2\xec\x2d\x09\x1c\xa0\x1d\x3a\x00\x39\x74\xfc\xca\x17\x7f\x05\xbe\x3e\x96\x37\xd2\x7d\xd3\x97\xf7\x91\x4b\xbc\x57\xc0\x8a\x53\xa3\xa3\x54\xb6\xd1\xf3\x85\xa4\xb1\xf6\x57\x0a\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\xb5\xa0\x17\x3f\x94\xd7\xf6\xe8\xae\xee\x8d\xd8\x8e\x58\xce\xff\x34\x3c\xb6\xf7\x5c\x9e\x9c\xdb\xec\xd9\x3d\xca\x7d\xa0\xea\xb8\x28\x81\x03\xb4\x43\x07\x20\x87\x6e\x2c\xd2\x26\x43\xe7\xfe\xf7\xdc\x9b\x89\xc7\xa2\x25\xa6\x8a\x23\xbf\x4c\xfd\x71\x3b\xee\xad\xf8\x87\xe7\xe8\xe6\xf9\x20\xba\x70\xd2\x61\x46\x3b\x74\x00\x72\xe8\x1c\x26\xd8\xb3\xc8\xc4\x6a\x68\x5d\x63\xe3\x3f\xa7\x9b\xc5\x90\xd9\xd9\xf0\xec\x92\xc0\x86\x5e\xea\xe4\x9c\xed\x4a\x1a\xca\x33\x21\x70\x80\x76\xe8\x00\xe4\xd0\x05\x33\x9b\xbc\x3d\x62\x12\x21\xcc\xbf\x22\x9e\x6b\xe1\x5a\xba\xff\xd3\x1b\x33\x43\xaa\x46\xea\x26\xcf\x0d\x9b\xd4\x25\xb7\x28\x01\x02\x07\x68\x87\x0e\x40\x0e\x5d\xe2\xb1\xc5\x19\xf2\xfc\x6f\xaf\x55\xc3\x05\x55\xdf\x0d\x1e\x3d\xb0\x2c\xdb\xb1\xe3\xed\xd3\x4f\xfc\xfc\xfb\xfd\x4d\xdf\x8e\xf3\x31\x10\x38\x40\x3b\x74\x00\x72\xe8\xa8\x9f\x54\xb6\x15\x36\xfb\x8b\xf7\xc8\xde\x12\x4b\xe3\x20\x66\x7f\xd6\x98\x87\xc4\xfe\x75\xfc\x63\xf8\x93\x81\xc7\xa7\x3a\x46\x8d\xc0\x01\xda\xa1\x03\x90\x43\x77\xc6\x4a\x6c\xe3\xb0\x95\xb8\xd9\x2e\xaa\x13\x3b\xd9\x76\xf1\x7e\x31\xe5\x7b\xc1\x47\x6f\xb8\xeb\x7c\x74\x89\x12\x2e\x5d\xbf\x44\xea\x40\x68\x87\x0e\x40\x0e\xdd\x01\xfb\xeb\x63\x67\x3f\x27\x55\x9e\xfd\x70\xee\x95\x70\xfa\x02\xa0\x04\x77\x2e\x51\xe5\x15\xfb\xef\x55\xc3\x3e\x68\x7e\x78\x74\x89\xc0\x01\xda\xa1\x03\x90\x43\x37\xc9\x59\x77\x23\x7c\x7d\xa5\x5d\xfa\xa1\x60\x18\x45\x69\xba\xe8\xb5\x98\x0f\x53\xda\x55\x1f\xed\xcc\x5b\xaf\x9e\x1d\xf0\x6c\x24\x7d\x18\xda\xa1\x03\x90\x43\x17\x35\xd9\xb5\x47\xdd\x8f\xf8\xf0\x29\xf4\xe7\x2b\xc6\x3b\x3a\xa1\xa3\x75\x01\x17\x57\x0e\x6f\x72\x29\xce\xaa\x74\x78\xb2\xa9\x91\xc2\x09\xda\xa1\x03\x90\x43\xb7\xa7\xe4\x4e\x17\x55\x34\x03\xe5\xe3\xec\x19\xde\x97\x37\x5e\xd0\xc6\x50\xed\xb4\x21\x12\xed\x5d\xaf\xde\x93\x3c\x9f\xee\xf9\x8d\x34\x6b\xa3\x1d\x3a\x00\x39\x74\x9f\xf1\x85\xa9\xd2\x69\xc1\xd6\x3a\xe6\x90\xeb\xe2\xb1\x75\x7b\xf5\x1c\xd2\xca\x92\xc9\xf7\xd8\xb2\x1f\xea\xf5\x59\xe5\x5f\x15\x26\x70\x80\x76\xe8\x00\xe4\xd0\x75\x4b\xdd\x19\x62\x7a\xf9\xe4\xc3\xb5\x8b\x16\x4e\x7b\x23\x67\x02\xf0\xcd\x1f\x25\x0b\xcd\xb1\x5a\x37\xaa\x7d\x0d\x24\x64\x2b\x49\xc3\x16\xda\xa1\x03\x90\x43\xa7\xc6\xbb\xc5\xfd\xc8\x21\xb6\x4b\xaa\xb4\xb0\x44\xd6\xd6\x7b\xce\x40\x76\x65\xe9\xdc\x3e\xfd\xcf\xa6\x71\xa7\x5e\xe9\x12\x1f\x75\x08\x1c\xa0\x1d\x3a\x00\x39\x74\x95\xae\xbc\x6b\x35\xf1\xcd\x2f\x47\xcf\x8b\xbd\x31\x7b\xa2\x77\xd9\xc2\xc1\x9a\xed\x10\xb5\xd3\xbc\x84\x94\x3d\x8d\xdc\x98\x3e\xe9\x9d\xa1\x1d\x3a\x00\x39\x74\x17\x9a\x9f\xe8\x0e\xa4\x3d\x60\x5a\xac\xae\x72\xe7\xe8\xf6\x0c\xb9\xdc\xc8\x7d\x2b\xf8\x93\x51\x06\xd5\x38\xd0\xde\xac\x3a\x4f\x0a\x74\x68\x87\x0e\x40\x0e\xdd\x5e\x1e\x39\xb9\x57\x7e\xbd\x9b\x53\xfb\x2b\x94\xcf\xce\x3e\x38\x36\x34\xa8\x11\x3d\xfd\x93\x96\xc1\x38\xc7\x9f\xf5\x74\xd7\x2e\x0f\x02\x07\x68\x87\x0e\x40\x0e\x1d\x2b\x83\x3f\x6b\x63\x0c\xc0\x23\xe6\xf6\xd3\x95\xf4\xac\x73\xf2\x8f\x53\x4e\x58\x8e\xb5\x59\xde\xae\xc9\xed\x19\xbb\xdb\xc0\x44\xe0\x00\xed\xd0\x01\xc8\xa1\x13\x8b\x17\x4d\xe1\x68\x5b\xa2\x8c\xff\x3b\x4e\xe9\x27\x6d\x99\x30\xdb\xb0\xdb\x44\xe9\x9d\xdd\x9f\xc9\x2f\xbf\x95\x74\x9a\x0b\x2c\x08\x1c\xa0\x1d\x3a\x00\x39\x74\xcb\x19\x8f\x53\xb6\x2e\xb3\xcc\x7e\x48\xfa\x1a\xa5\x96\xdd\x7f\xd2\xfc\xe4\xe2\x58\x66\xca\x93\xf7\x63\xa6\xe3\x3a\xcb\xf1\x27\x49\x1d\x1d\xed\xd0\x01\xc8\xa1\xcb\xd6\x8a\x60\x6b\xcc\x9b\xe0\xdf\x12\x99\x1b\xb8\x4f\x36\x9c\xa9\x23\xda\x43\x2f\xc6\xaa\x31\xb8\x7e\x41\xe2\x55\xc6\xea\x9a\x15\x81\x03\xb4\x43\x07\x20\x87\xee\xb6\x86\xf1\xb5\xc3\x16\xf7\xe7\xcf\xf8\x8e\xa5\x31\xc5\x3b\xfe\x0a\xad\xb3\x0e\x59\xd9\x64\xa8\x7a\x27\x64\xe9\xb1\x7a\x80\x73\x2f\x81\x03\xb4\x43\x07\x20\x87\xce\x3e\xff\x32\x5b\x7d\x8b\xce\x0f\xdd\xea\xdb\xf2\x7e\xaa\xb7\x29\x1b\x4f\xba\x87\x84\x0b\xab\x27\xbd\xcd\x57\x32\x55\xf1\x19\x90\x26\x70\x80\x76\xe8\x00\xe4\xd0\x99\xd8\x1e\xf9\x69\xfa\x53\xa9\x53\x50\x68\x4b\x77\xfc\x5c\xc9\x8b\xbe\x8a\xa3\x92\x1a\x15\x4c\x2f\x26\x12\x76\xd9\xe5\xd1\x81\xa3\x04\x0e\xd0\x0e\x1d\x80\x1c\x3a\x2b\x6b\x99\x3b\x8c\x5b\x2f\x3c\x4a\xd8\x97\x7c\x17\xca\x5f\x81\x0f\x29\x14\xde\x7d\x05\x63\x67\xcc\xd3\x6c\xa9\xf3\x54\x38\x49\x5b\x03\xe5\xd0\x15\xee\xfc\xbf\x40\xa7\xc3\x9f\x65\xe7\xf5\xa5\x9a\x76\xfb\xa0\x4f\xdc\x86\x74\xd7\xdc\x1e\x71\x91\xe7\x43\x6a\xb6\x67\x5b\xab\xc6\xab\x03\x33\xfa\xce\x91\x02\x1d\x20\x7b\xd8\x23\x6c\x2c\x40\xf6\x7f\xff\xe2\xe7\xcd\x9d\x4c\x63\x8c\x34\xaf\x29\xff\xe8\x64\x76\x39\x73\xb6\x32\x7b\xd6\xd3\x6a\xb8\xe4\xc6\x5d\x6d\x89\x2a\x34\x63\xcc\x91\xfc\xa7\xd4\x2e\x59\x6e\xcf\x40\xc1\x75\x75\xdc\xeb\x2d\xdf\x23\x21\xab\x15\xab\xd7\x02\xc7\x77\xb7\xd6\xff\xcc\xfe\x23\xfe\xea\xbb\xd8\x35\xb2\x7f\x4a\x05\x97\x8c\x79\xd9\xf9\x8e\x3d\xd2\xf5\x39\x4f\xfe\x67\x8c\xeb\xc3\xa7\xb0\xe8\xe0\xef\xdb\x4c\xdf\x1c\xc6\xd5\x8d\x7e\x86\x9a\x47\xff\x53\xfa\x7b\x87\xca\x39\xa1\x91\x29\xab\x3d\x93\x6d\x8e\x09\xc7\xdb\xf8\xcf\x5e\x10\xaf\x70\x1a\xd6\xdd\xdf\x35\x60\xe7\xab\x7b\x20\xf3\xfc\x3f\xa5\xc2\xbc\x37\x3f\x5d\xe3\x3a\xc4\xab\x7b\x8c\x8d\x5a\xae\xf3\x4e\xa3\xa7\x53\x3d\x6b\x7b\x5c\xb4\xe5\x5f\xb7\xd6\xf3\xbf\x32\x2b\xb5\xff\x29\x3d\x7f\x24\xcc\x27\xb8\x83\xbd\xbe\xa5\x26\x7f\xd7\xf3\xd4\x9f\xa0\x6a\x48\x5e\xbe\xe0\xce\x9b\x9b\x7b\xbf\xf7\x0c\xd4\xf2\xf5\xac\xff\x53\x5a\xf5\x8c\xde\xdd\xc5\xe3\x83\x52\x70\xf7\x8c\x86\xef\x4e\xdb\x56\xdf\xd2\x98\x0e\xe2\x19\x67\xbd\xc0\x12\x7b\xc2\xb2\xec\xc5\xd9\x7f\x4a\xfd\x6f\x2a\x2c\xc4\x07\x0d\x9f\x3d\xe1\xcf\x7e\xc2\x84\xb6\xdf\xe0\xdd\xab\x5f\xdd\x2a\x53\xd3\x7e\x7f\xb8\x8f\xff\xa5\x3c\x7d\x86\xf2\x9f\xd2\xcd\x84\xf5\xd9\xdf\x7c\xb4\x0e\x5a\x7c\x05\xcf\xad\x02\x42\xad\x9e\xcb\xd1\x38\xf3\x77\x1e\x58\x61\x72\xaf\xdf\xfd\xd9\x8e\x3a\xf9\x9f\xd2\x1f\x8c\x95\x39\x2f\xd8\x26\x4b\x12\xbb\x3b\xb5\xee\x0d\x88\xb9\x04\x3e\x66\xb2\xbb\x95\xf1\xaa\xbb\x6b\x33\xfc\xf4\x9d\x92\x89\xcd\x7f\x4a\x17\x82\xd5\xcb\x3d\x82\xac\x3b\x8e\xf7\xe4\xbd\x2f\xce\xd0\xbc\x53\xaa\x9b\x7e\x59\xf8\x43\xc0\x3d\x7c\xcb\x85\x5e\x4b\xe1\x97\xc1\x3f\xa5\xbb\x53\x7d\x8f\x7a\xe2\x97\xe8\xe8\x04\x0d\x9d\xae\xe4\x56\x7f\x58\xa4\x55\x49\x3e\xd1\xe7\xb7\x56\x93\x91\x50\x28\x7e\x55\xf6\xcb\x3f\xa5\xa0\x4e\xf7\xe9\x6b\xde\x85\xd2\xca\x2b\x1b\x61\xdc\xd2\xaf\x1c\xde\x9f\x1e\x2a\xee\xae\x6b\x1a\x6a\x93\xef\x94\xf2\x2b\xb6\x7b\xf2\x4f\xa9\x3c\x2b\x2f\xe7\xbc\x28\xf1\xfb\x11\xf3\xe2\xf0\xd1\x88\xc8\xc1\x2f\x99\x42\xdf\x47\x14\x78\x55\xa7\xe8\xf9\x5f\x5f\xda\xcd\xfd\xfd\x9f\x52\xa1\x9a\xc9\x58\x9e\xb8\xb4\x89\xcc\xd4\x23\x59\xa6\x17\x59\x63\x1c\x45\x7f\x5d\x9d\xf0\x31\xfb\x16\x7b\x4d\xf7\xcb\x6b\x76\x8f\x2b\xff\x94\x52\xfc\xee\xde\xa9\x92\x35\x97\xa2\x6f\xae\xf3\xee\xc2\x71\xbd\xbf\x91\x54\xa1\x06\x3d\xac\xcd\x3d\x9b\xdf\x0c\x3c\x47\x13\xa2\xae\xff\x53\x1a\xfa\x2d\x53\x79\x81\xb6\xee\xf1\x04\xd5\x68\x96\x6a\x02\x7e\x40\x50\xad\x2f\xb3\x48\x36\x35\xdd\x7e\x3f\x7b\xfc\xa9\x24\x62\xe1\x9f\xd2\x5b\x83\xfb\x45\xdd\x53\xfe\x5e\xcc\x08\xf3\xbf\x3d\xa1\x37\x99\x24\xfb\x6b\x34\xbf\x96\xd7\x7b\x65\x82\xe6\x56\xd0\x44\x98\xc0\x43\xdf\xff\x3f\x06\xfd\xd7\x19\xf8\x67\x0c\xc2\x20\xbd\xd1\xf2\xce\x8f\x5b\x47\x3e\x97\x7b\x69\x3a\x4c\xdd\x9f\x76\x8a\x0c\xb3\x8f\xe4\xbb\x9f\xbe\x3b\x34\x5f\xfe\xcc\x88\x7d\xf0\x69\x65\x43\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\xe4\x0f\x96\x03\xc2\x37\xad\x6b\x18\x0d\x5f\x7e\xac\xf8\x80\x53\x0d\xbf\xa7\xef\x98\xfb\xe0\xd6\xbc\x22\xa7\x21\xfb\xee\xab\x31\x0b\x81\x63\x68\xbd\x11\x83\xf4\xc6\x93\x69\x85\xc1\x9d\x01\x5b\x27\x46\x1b\x29\x7a\xf0\x07\xac\x9e\xbd\xe7\xeb\x0e\x61\xe9\xaf\xbd\x69\x42\xca\xb7\xa8\x57\xae\x33\x11\x38\x86\xd6\x1b\x31\x48\x6f\x8c\x2b\xee\x2b\x2b\xcd\xd9\xce\xf8\x7d\xa2\x2a\xe6\x99\xea\xcb\xd5\x99\xcb\xf3\x07\x4f\xa5\xec\x66\x1f\x9e\xb3\x7d\xe2\x98\x92\x44\xfa\x30\xb4\xde\x88\x41\x7a\xa3\x4e\x99\x6a\xa6\x07\xf7\x0d\x23\xd9\xdd\x11\x5f\x0a\x9e\x7f\x53\xbe\x69\x3a\x47\xd7\x94\x9b\x53\x50\xa2\x53\x74\x2c\xef\x76\xb9\x34\x81\x63\x68\xbd\x11\x83\xf4\x46\xbd\xbc\xa3\x0c\x5e\x61\x1b\xea\x5e\x55\x0a\xfc\xaa\x0f\xc9\x8f\x33\x8b\xbe\x16\xf1\xd1\x73\xe1\xdf\x51\xd4\x76\x4b\x41\xb8\x8b\x8a\xc0\x31\xb4\xde\x88\x41\x7a\x23\xb3\xe4\x4c\x41\x66\x2b\x4b\x9d\x24\xbd\xaf\x79\x6e\x43\x67\xd6\x4b\x5e\x05\xc5\x0a\x9d\x0e\xd6\x07\xc3\x2e\x02\x26\xb7\x0e\x1d\x24\x70\x0c\xad\x37\x62\x90\xde\x18\x4e\x63\xfb\x81\xc3\xbe\xfc\x4d\x18\xf9\xbc\xc9\x44\x67\x5d\x00\x75\x2c\xdd\x8c\x4c\x46\xf6\x70\xb8\x73\x25\xe5\xec\xe4\x9b\x5d\x04\x8e\xa1\xf5\x46\x0c\xd2\x1b\x3d\x9f\xee\xd9\x39\x93\x10\x2d\x54\xef\x37\xb1\xbf\xd3\x55\x3f\xb2\xb0\xe6\xed\x85\x6f\x86\xa1\x56\x97\x04\xb4\x19\xf7\xbf\x6e\x93\x25\x70\x0c\xad\x37\x62\x90\xde\xc8\x9d\x6f\xb3\x63\xf5\x1e\xcb\x39\xd6\x62\x09\x66\x0b\x86\x51\xb2\x97\xa2\x04\xf3\xf7\x52\xc3\xec\x7b\xcd\xd7\xa8\x39\xdf\x46\xf0\x13\x38\x86\xd6\x1b\x31\x48\x6f\x7c\xfd\xa3\x45\xea\xd6\xeb\xc1\x66\x30\x7e\x65\x4a\xdd\x39\x32\x7b\x92\x78\x90\xf9\xd0\xa8\xa7\xa4\x7e\xe0\xc9\xe5\x1d\x97\xce\x92\x11\x38\x86\xd6\x1b\x31\x48\x6f\xa4\xd1\xb4\x5f\xd9\xfd\xc0\x67\x6d\x77\x78\xd5\x48\xe3\x49\xa6\x43\x25\x8f\xee\xb3\xfd\xc8\xdb\xb6\x78\x37\x95\xf3\xba\xb6\xe9\x3c\x69\x01\xd0\x7a\x23\x06\xe9\x8d\xbe\x95\xfd\x21\xf8\xee\x52\xea\x92\xc5\xda\x3b\x46\xb7\xfc\xda\x4f\xaa\x54\xa4\x2c\x8d\x72\x26\x57\xde\xaf\xed\x04\x1a\xc0\x85\xc0\x31\xb4\xde\x88\x41\x7a\x63\x15\x95\xc0\xe7\x95\x73\xc1\x84\xff\xec\x03\x2e\x15\x26\xeb\xae\x50\x97\xcc\x38\xa9\x47\xfb\x53\x26\x9f\xf5\x7a\x5a\x5b\x7c\x38\x47\xe0\x18\x5a\x6f\xc4\x20\xbd\x51\xfb\xbb\x4c\x2a\x99\xa2\x58\xdd\xc2\xca\xec\xd5\xb6\x28\x89\xa4\x29\x43\x0b\x2a\xef\x65\x8e\x15\xb9\xe6\xfe\xbb\xb3\x0f\xcd\x49\xb7\x06\x5a\x6f\xc4\x20\xbd\x91\xfb\xd6\xa0\xc9\xb5\xfb\x06\xae\x7a\x83\x69\x8e\x8f\x03\xda\x98\x80\x61\x0c\x16\x19\x25\xca\x74\x73\x67\xf5\x57\xd6\x29\x7a\x5d\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\xd6\x66\xde\x22\xa7\xac\xaf\xc9\xf6\x98\x9b\x05\x51\xf2\xd3\x32\x3f\x3d\xa3\x69\x59\x34\x14\x6d\xf8\x20\x6e\x3b\xe2\x1e\xc3\x2e\x27\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x2d\xa6\xe9\x7c\x67\x3e\x4e\x1e\x3d\x65\x34\x72\xee\x58\x1f\x8f\x9b\x7f\x3c\xef\xa4\x93\x41\x88\x40\xa5\x6c\xe4\xc1\x35\xaa\x70\xd2\x93\xa1\xf5\x46\x0c\xd2\x1b\x4f\xeb\x97\x85\x7d\x60\x9e\x8c\xab\x4c\xbd\xfa\x7e\xc3\xc8\xd6\xec\x59\x6a\x89\x10\xc3\xa6\x67\xe7\x84\xdb\xd4\x17\xf2\xd8\x27\x3a\x04\x8e\xa1\xf5\x46\x0c\xd2\x1b\xed\x07\xa2\x96\x9f\x93\xaf\xa7\xf2\x4a\xcf\x4f\x0d\xb3\xc4\x29\xd0\x0f\xff\x71\xb9\xc0\xe6\x53\x6b\x71\x5e\x47\xf9\xda\x01\x33\x36\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x53\x7d\x1a\x8f\x19\x6d\xc2\x55\x8f\x6b\x49\xaf\x4c\x5e\x7e\xf8\xd0\x42\xdb\xff\x0e\xa7\x42\xe5\x4d\xed\xa5\x58\xb5\xa1\x36\x45\x40\xe0\x18\x5a\x6f\xc4\x20\xbd\x51\xc7\x9d\x30\xa3\x2d\xd7\x19\xda\x23\xaf\xd9\xb4\x48\xc5\x5c\x95\xa8\xcf\x1f\xfa\x74\x99\x4c\x25\xec\xde\x89\x67\xcf\x73\x94\xe9\x08\x1c\x43\xeb\x8d\x18\xa4\x37\xf6\x33\x8f\xe0\xf1\x3a\x11\x7f\xe9\x12\xa3\x96\x3f\xb5\x79\xd6\xcc\x86\xf1\xbe\xdc\x32\x6f\x12\xff\xad\x19\x7a\x66\x70\xaf\xd7\x7e\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x2f\x37\x02\x23\xa8\xef\x7e\x3d\x71\x25\x94\xef\xc1\x86\xb4\xee\x65\xde\x3f\x11\x5c\x36\xce\x2f\xfc\x8d\x62\xad\x9e\xc4\xcf\xf3\x1f\x20\x70\x0c\xad\x37\x62\x90\xde\x48\x7b\x76\xc7\xb4\x54\x43\x40\xe7\x48\xdf\x6f\xd9\x69\x87\xa7\x65\xc9\x27\x8f\x73\x06\x0d\x5d\x8d\x91\x9a\xd8\x97\x54\x75\xf0\xb3\x39\x81\x63\x68\xbd\x11\x83\xf4\xc6\x3a\x2d\x89\xf5\xef\x0d\x8b\x35\xa9\xf3\x3d\x6b\xa9\xbe\xa1\xc9\x12\x34\x73\x62\x36\x1d\x8c\xc7\xb4\xdd\x19\xfa\xfd\x5c\x1f\x90\xb6\x06\x5a\x6f\xc4\x20\xbd\x31\x5b\xbe\xe8\xc1\x89\xc5\x55\x9a\x2d\x3f\xdf\xba\xaa\xab\x97\xee\x35\xbf\xd2\x8d\xa4\x51\x38\x96\xeb\x67\x77\x84\xf2\xef\xe2\x61\xd2\xd9\x44\xeb\x8d\x18\xa4\x37\xb2\x56\xbf\xdc\x66\x12\x6b\x9d\x2a\x32\x70\x57\xae\xfa\x23\xec\x91\x7e\x69\x97\xe9\xba\xff\xcf\x3b\x8f\x77\xbe\x2b\xb3\x77\xce\xa5\x25\x70\x0c\xad\x37\x62\x90\xde\xf8\xd3\x48\x4f\x5c\x5e\x3e\xf1\x6e\x84\x69\xed\xf1\xeb\x8b\xeb\x8e\x6a\x09\xd6\xd7\xae\x2a\xa9\xb2\xd5\xbe\xfb\x38\x21\xb3\x3a\xe0\x40\xe0\x18\x5a\x6f\xc4\x20\xbd\x51\xbe\x5d\x78\x4f\x98\x69\xf8\xe3\xa6\x35\xb0\xba\x23\xfe\xcd\xa4\xc8\x99\x58\xb2\x19\x23\x76\x27\xf6\x3e\x13\x83\x8f\xd3\x52\xa4\x1e\x80\xd6\x1b\x31\x48\x6f\xac\xf8\xf3\x3c\x7b\x31\xb8\xbe\x3f\x7e\x7e\x35\xdd\x7e\xae\xd8\x28\xe6\x72\x7f\xd2\x25\xda\xd4\xa4\x84\x46\xf6\xc7\x81\xfe\x9c\xec\x04\x8e\xa1\xf5\x46\x0c\xd2\x1b\x5d\x6d\x13\xad\x8f\xa7\x92\xe5\x67\x58\x5d\x53\x4e\xb3\x7c\xf7\x97\xd7\x3d\x88\x1d\xbf\xef\x22\x55\xe8\x68\xa6\x19\x9e\x96\xbd\x9b\xc0\xb1\xff\xd2\x1b\xff\x6b\x52\xf9\x37\xd0\x41\x7a\xe3\xf4\x28\x3f\x99\xe7\x4b\x4f\x9d\xe5\x7b\xf3\x99\x1c\x3c\xbb\x32\x39\xbd\xfc\xc5\x3e\x6c\x5f\x63\xb9\xa8\xb4\xdf\xcd\xec\xc2\x7b\xd2\x4b\x46\xeb\x8d\x18\xa4\x37\x16\x7e\x7a\xe0\xf0\xa0\xb8\xa6\x9f\xc7\xe9\xf6\xd9\x74\xf1\x17\x9b\x9d\x46\x32\x4e\x89\xc1\x4e\xa7\xcf\x1a\x74\x4a\x95\xc8\x33\x7a\x10\x38\x86\xd6\x1b\x31\x48\x6f\xec\x1d\x3f\x5e\x51\xbc\xf8\xf9\xa4\x91\x40\xd6\xbd\x79\x0d\x2e\x3a\xd6\x83\xc6\x27\x04\x6f\xde\xe3\xe5\xbe\x12\x14\xc7\xf9\xb3\x90\x9c\xc0\x31\xb4\xde\x88\x41\x7a\xa3\x05\x57\xc9\x61\x43\xbe\xdf\x5c\xfb\xfb\x0f\xa7\x5b\xe5\x33\xf0\x30\x2a\x78\x9d\x14\xfe\xae\xa2\xa0\x7f\xde\xb7\x26\xe5\x15\x46\xba\x19\xd0\x7a\x23\x06\xe9\x8d\xcd\xc4\x0d\xfe\xb8\x73\x72\x32\xf7\x33\x69\xd3\x37\x85\x77\x84\x5c\x8b\x94\x09\xa5\x16\xf5\xb8\xdc\xdc\x72\xae\x80\x7a\x62\x8f\x3a\x81\x63\x68\xbd\x11\x83\xf4\xc6\x4f\xbb\x86\xa7\x77\xc4\xfa\x3f\x98\xa9\x2d\xa5\xe4\x7b\xdf\x58\x35\x7f\x6c\xc7\xdc\x72\x66\x04\x77\xc8\xc2\x40\x9b\x1b\x8f\x81\x1d\x81\x63\x68\xbd\x11\x83\xf4\x46\xd7\x0c\xef\x4c\xa5\xbe\x7d\x89\xfc\xaf\xa2\x85\x54\x1f\x9e\x15\xc5\x58\x6f\xb9\x9e\xa9\xdf\x6c\x90\x1f\xb8\xe8\x3a\xe4\xdf\x4e\xda\xe5\x68\xbd\x11\x83\xf4\xc6\x6f\x7c\x8f\xef\x86\xf7\xcf\xf7\xaf\x65\x6c\x5e\x5a\xf7\x16\xaa\xd4\xcc\xac\xf4\xd4\xea\x13\xfd\xc3\x61\x5f\x9a\x73\xad\x5e\x8c\xf4\x61\x68\xbd\x11\x83\xf4\x46\x42\x61\xfe\xf7\xce\xdb\x37\x3c\xca\x5e\x32\xb4\xd1\xb8\xc6\x46\x31\x57\x29\xdf\xb9\x6d\xc7\x4d\xd5\x73\xf4\xed\xd5\x04\xea\xaa\x2b\x04\x8e\xa1\xf5\x46\x0c\xd2\x1b\xe7\x3a\x1f\x36\xcf\x88\xef\x2a\xf6\x25\x1b\x91\x5d\x56\xd0\x17\x92\xb2\x6b\x62\x93\xd1\x4c\x4a\x2a\x34\x65\x8f\x9a\xb9\xc4\x45\xda\x67\x68\xbd\x11\x83\xf4\xc6\x76\x23\xe6\xf6\x2b\xa3\x21\xaa\x47\x3f\xb1\xe7\x9b\xbd\x71\x94\xec\x12\x39\x36\xa2\x28\xa8\x81\x7d\x0f\xfa\x4e\xf3\xb9\xf7\xa1\x10\x81\x63\x68\xbd\x11\x83\xf4\xc6\x4a\x67\x4f\xaf\x95\x5b\xd3\x59\x6f\x02\xc4\x18\x32\x5c\xd3\x6a\xe6\xa2\xf9\x18\xe2\xc2\x45\x8e\x9e\xf6\xeb\x5d\x2e\xf0\x55\xb5\x20\x70\x0c\xad\x37\x62\x90\xde\x18\x30\x10\x5f\x1c\x2e\xd3\x32\xf1\xcd\x69\x27\xa6\xf7\xce\x0c\x68\xd7\xee\x30\x49\xe2\x63\x28\xf9\x55\x44\xbf\x40\xb9\x25\x43\xba\x66\xd0\x7a\x23\x06\xe9\x8d\x1b\x5f\xac\x6e\x51\xe9\x0a\xb4\xb3\x6a\x4c\x3b\x6c\x7e\x09\x0a\xd5\x51\xf3\xf8\x1e\xc6\x3d\x1b\xa2\xf8\xf7\x9b\xe2\xa0\x6d\xc8\x5e\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x7e\xd2\x17\x8e\x08\xac\xb8\x4d\xc8\x4b\x26\xb2\x2a\xb5\x71\xbc\xbd\x51\x5f\x71\x5e\x77\xd0\x38\xbc\xe5\x47\x06\x5b\x3d\x85\x14\x03\x81\x63\x68\xbd\x11\x83\xf4\xc6\x67\x57\xbf\x6c\x85\xf7\x09\xcf\x6e\xff\x1a\x32\xc5\x58\x0e\xc8\x7e\xcc\x1e\xd9\x79\x59\x6f\x28\x59\x61\x43\x78\x71\xf7\xa0\x9d\x1a\x81\x63\x68\xbd\x11\x83\xf4\x46\xe5\x8b\xbc\x45\xbd\x21\xfd\x67\x53\x75\x8e\x08\x95\x54\x7c\x08\x15\x9e\x66\xfc\xb5\xae\x2c\xc2\xbc\x2e\xfa\x3b\x98\xea\xcc\x4b\x6b\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x47\x87\xf2\xd4\x32\x22\x33\x0b\x3e\x75\x4d\x6e\x53\xc7\x52\x19\x4d\x71\xbe\x94\x70\x7e\xe6\x4d\xc5\x62\xb9\x1c\x72\xbd\xed\x95\x23\x81\x63\x68\xbd\x11\x83\xf4\xc6\x6f\x6d\xe7\xe6\x55\x73\x4d\x72\x2f\x84\x0d\x72\xaf\x26\x77\x48\x65\x7f\xbe\x22\x44\x99\xfc\x35\xef\xa6\x8c\x4d\x59\x6b\x96\xe6\x79\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x4d\x19\x09\x7a\x1e\x2a\x56\xd1\x3d\x19\x79\xc3\x52\x8c\x42\x9f\x82\xf7\x05\x0b\x90\x1d\xec\xed\x4e\x9f\xbd\x78\xfa\xac\xbc\x15\x35\x81\x63\x68\xbd\x11\x83\xf4\x46\xa3\x83\x57\xe2\x63\x89\xa2\x9c\x9b\x5f\x8f\xbe\x17\xad\x8a\x7c\x2e\xdc\x15\x38\x28\xd4\xc2\xd0\x60\x1a\x7b\xc5\xfc\x4e\xb6\x0a\xa9\x6b\xa3\xf5\x46\x0c\xd2\x1b\xd5\x5a\xe7\xd8\x76\x35\xca\xb9\x08\x97\x17\x78\x0d\x7e\xb1\x1c\xaa\xfe\xa8\xc3\xc3\x3d\x3c\xb2\x6a\x18\xe0\x4c\xa5\x10\x2a\x27\x4c\xe0\x18\x5a\x6f\xc4\x20\xbd\x31\xb6\xe1\x9a\x98\xac\xfe\x1d\x95\xab\x99\x3c\x03\x4f\x45\x6d\xe7\xc5\xa2\x0f\x04\x72\xff\x8d\xc8\xbe\x6c\x1d\x1d\xde\x2b\xf4\x89\xb4\x00\x68\xbd\x11\x83\xf4\xc6\x2a\x8a\x48\x43\x3e\xa5\x8e\x92\x6c\x8e\x2f\xcf\x2b\x4e\x7c\x38\xd4\x79\x53\xe6\xce\xa2\xf2\xc1\x23\x06\xe5\x8a\x2f\xe8\x46\x54\xb5\x09\x1c\x43\xeb\x8d\x18\xa4\x37\x26\xd2\xf0\x1d\x62\x0b\x3d\xae\x3e\xc8\x75\xdc\x91\xb3\x96\x5b\xf9\xb1\x7b\x83\xf5\x15\x0b\xad\xb0\x70\xbb\x9c\x57\xd7\x25\xaf\x90\xa6\x5d\xb4\xde\x88\x41\x7a\x23\xc3\xdd\x85\x53\x3c\x4f\x0f\x45\x66\xf6\xab\xc9\x16\xb9\xe8\xce\xc9\x10\x1e\x7a\x87\x37\xb9\x43\xcf\x6c\xeb\x69\x67\x1b\xfb\x1e\x23\x70\x0c\xad\x37\x62\x90\xde\xf8\x3d\x53\x02\x68\x7e\xf1\x6a\xc1\x71\xc9\xfb\xc7\x1b\x03\x82\xdc\x03\x13\xb2\x26\x12\x12\xdb\x8b\xb8\xfd\xcd\xd7\xad\x15\x4e\x11\x38\x86\xd6\x1b\x31\x48\x6f\xfc\x3c\x4f\xfd\xc5\x41\x99\x99\x7b\x75\x4c\x49\xdd\x2e\x3a\x6e\x77\x69\xd3\xce\xf0\x6a\x9e\x30\x6f\xce\x43\x4f\x36\xc2\x05\x3b\x45\x09\x1c\x43\xeb\x8d\x18\xa4\x37\x5e\xce\xb3\xbb\x61\x77\xcc\x2c\x24\xac\xee\xd3\xf0\xd9\xfc\x3c\xeb\xbf\x59\x69\xe1\x91\x1e\xd3\x02\x77\x64\xee\x0b\x76\x19\x3c\x77\x23\x70\x0c\xad\x37\x62\x90\xde\x68\x75\xa3\xc3\xce\xa4\x7d\x56\xd6\x84\xdb\x44\xeb\xf3\x53\x13\xfb\xd4\x85\x44\x87\x29\x43\xa9\x2f\xba\x1b\x9f\xbb\x3c\x5e\x72\x53\x10\x38\x86\xd6\x1b\x31\x48\x6f\xdc\x9f\x33\x7b\xd7\x83\x9c\x93\xbc\xe6\xe5\xa1\x31\x7c\xe5\xb9\x6c\x7c\x8a\xd4\xc1\xee\x8a\xf5\x61\xca\xd3\xd5\x62\x3a\xe2\x95\x1c\x04\x8e\xa1\xf5\x46\x0c\xd2\x1b\x6f\x91\x5b\xca\xc9\x7f\x0f\xdc\x88\x26\xcf\xe0\x6e\x8d\xcb\x90\xa6\x6d\x32\x7d\x90\xb9\x60\xf1\xf6\xdc\xf5\x26\x85\xc5\x6a\x0e\xd2\xd9\xfc\x2f\xbd\xf1\xbf\x7e\x9f\xfc\x6f\xa0\x83\xf4\xc6\x46\xed\x14\x06\xc1\x9b\x73\x4d\x29\x66\x21\x8e\x1c\xfe\xa1\xc9\x77\x9a\x4e\xce\xd2\x53\x3d\x55\x91\x31\x32\x5a\xf3\x4b\xf3\x25\xbd\x64\xb4\xde\x88\x41\x7a\xa3\xbd\xb1\xe5\xf4\x72\xe8\x83\xf6\x9b\x56\x8a\xa3\x0e\xbe\xb7\x4c\xdb\x29\x4c\xae\x95\xfe\xbe\xe9\xb3\xe8\x45\x93\xda\xae\xaf\x4a\x6a\xb4\x68\xbd\x11\x83\xf4\x46\xcb\xa5\xbf\xd2\x8f\xd7\xc7\x5b\xff\x0a\xde\x4a\x3f\x2c\xf5\x37\x36\xf5\x40\x17\x2e\xc6\xdf\x4a\xf6\x79\xdf\xe3\x43\x8e\xd2\x7a\x38\x81\x63\x68\xbd\x11\x83\xf4\x46\x47\xa5\xe0\x74\xfe\xc6\x6c\x86\xee\xaf\x7b\xc9\x2e\x72\xbc\x9e\x31\x1a\xbc\x53\x6d\x2d\xe7\xa8\x14\x72\x61\xcf\x57\x4b\x19\x59\x52\x6e\x45\xeb\x8d\x18\xa4\x37\x3a\xb1\x76\xfa\x7b\x28\x72\x1f\xa9\x94\xfd\x2c\x7f\x7b\xf8\x41\x6d\x5b\x21\xcb\x70\xea\x22\x7b\x57\x88\x6c\x39\x59\x87\x79\xc5\x05\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x75\x9c\xb7\xa3\x3d\x2a\xb6\x5f\x67\x8c\xf7\xcd\xfc\xc9\x2a\x8a\xa1\xd5\x50\x22\xfb\x9a\x45\x77\xf3\xf2\x83\x07\x51\x62\x46\x99\xa4\x74\x88\xd6\x1b\x31\x48\x6f\x54\xa7\x29\x8b\xd3\x67\x66\x52\x1b\x67\x64\x67\x7a\xaf\xb6\xfb\xd8\x86\xa8\xb0\xfd\x89\x50\x03\x49\x2e\xef\xb8\x2b\xcc\x53\x17\x59\x09\x1c\x43\xeb\x8d\x18\xa4\x37\x76\xb4\xca\xcc\x33\xe5\x9e\xa8\x89\x1c\xcf\xbf\x70\x81\xa6\x6c\xcb\xf8\x07\x19\xf7\x3d\xfa\x16\xdb\x7d\x4e\xde\x4f\xc8\x55\x04\x98\x08\x1c\x43\xeb\x8d\x18\xa4\x37\xd2\x84\x1f\xac\x00\x7a\xda\x0c\x75\x2f\x3e\xf1\xcf\x6e\x7e\xac\x63\x1f\x8d\x7b\x67\xf2\x54\x83\x7e\xa1\xf9\xe8\x33\xbe\x9b\xe2\x96\x04\x8e\xa1\xf5\x46\x0c\xd2\x1b\xf7\xc5\xdb\x9c\xbe\x56\xc7\xd1\xd5\x19\x7d\x5a\x4d\xf7\xbc\x75\xe5\x75\x4d\xfd\x1d\xea\x17\x0a\x34\x79\x6a\xa9\xa3\x33\x93\x24\xa8\x08\x1c\x43\xeb\x8d\x18\xa4\x37\x12\x1c\x37\x15\xcd\xa7\x5c\x7e\x89\xe9\x9c\x99\x5f\xe0\xb6\xc9\x39\x17\xbd\x31\xd2\xe9\x37\xd8\xa2\x76\x8d\xc1\xdd\xc8\xd3\x57\x8e\xc0\x31\xb4\xde\x88\x41\x7a\x63\x03\x8b\xfd\xe8\x8a\xda\xb7\xe5\xef\xcb\x65\xc1\x6f\x23\x7e\xbb\xbe\xe1\x58\x9e\x20\x7f\xc8\xbc\x26\x8d\xbf\x56\x9a\xdd\xb0\xf2\x24\x70\x0c\xad\x37\x62\x90\xde\x38\x45\x55\x71\xec\xad\xee\xc5\xe9\x11\xad\x6d\xe3\xdb\xae\xb3\xad\xa7\x17\xfc\x30\x3e\x19\x4d\x96\xc9\xe4\xe7\xa5\x5e\xaf\x5b\x49\xb7\x29\x5a\x6f\xc4\x20\xbd\xb1\x8c\x5c\xdc\xa2\xce\xfc\xf1\xe5\x37\xbe\xd9\xf9\xc2\x2d\x99\x8c\xd4\x63\x9a\xbd\x35\x91\xc3\x51\xde\xa7\x98\x54\xf8\x1b\xa9\x49\x19\x0c\xad\x37\x62\x90\xde\x78\x3a\x8f\xd2\x95\xf2\xcc\xd6\xb4\x8e\x96\xf0\xc0\x58\xa0\xf6\xdb\x64\xca\x3c\x03\x87\xac\x46\xb1\xed\x02\xad\x12\xb1\x31\x6b\x09\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x7b\x37\x26\x8c\xcf\xc4\x5c\xbe\x44\x97\x3e\xcd\xf2\xfd\xe9\x00\xd7\x23\x13\xb6\x06\xa9\xa2\x12\x3e\x63\x3b\xf5\x47\x5e\xc5\xef\x49\x59\x1f\xad\x37\x62\x90\xde\x38\xb7\x67\xce\x3c\xce\xac\xdb\x39\xdf\x6d\x53\xa8\x3c\x98\xa8\xcc\x4a\xcc\x4f\x67\xb9\x81\x0d\x4b\x34\xcd\x61\x72\xcf\x5e\x73\x12\x38\x86\xd6\x1b\x31\x48\x6f\x54\xc9\xd3\xf3\xd3\x2f\xa6\xd8\x39\xa5\xe5\x64\xfd\x4c\x8d\xc9\xfd\xd6\xa4\xa4\xd0\xeb\xf6\x86\xb3\x5e\xd7\x33\x93\x12\xea\xfe\x4a\x12\x38\x86\xd6\x1b\x31\x48\x6f\xec\x7b\xd7\x78\x50\xc8\xc3\xab\x72\xdc\x31\xdc\xd4\x42\x5c\x2b\x60\xe2\x92\xf7\x87\xa2\x4d\x7b\xf9\xe0\xb5\x64\x41\x6b\xb6\x20\x45\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x76\xfb\x46\x0c\x34\x2c\x2c\x54\x19\xa5\x1f\x1c\xd0\x7b\xc8\x46\xd5\xa5\x3a\xe3\x72\xb0\x60\xfd\x90\xf8\xdd\x36\x5b\x2a\xfd\x57\x17\x09\x1c\x43\xeb\x8d\x18\xa4\x37\xfe\xc0\xd2\x3a\x9b\xf5\xd7\xb8\x4e\x64\x4e\x2e\x58\x14\xe8\xb6\x5e\xbd\x21\xfb\xac\x65\xf9\x2d\x95\x56\x70\xf7\x92\x79\x2b\x71\x9a\xc0\x31\xb4\xde\x88\x41\x7a\xa3\xe4\xf7\xf1\x94\x3b\x47\xb9\xfa\x3d\x94\x3d\x8c\xef\x32\x28\x32\xbf\x8f\xda\x61\x2d\x34\x1a\x3d\x79\x4c\x3b\xdf\x3c\x65\x9e\x89\xd4\xce\xd0\x7a\x23\x06\xe9\x8d\xcb\x39\x7a\x2f\xa2\x6e\x6a\x72\x95\xfe\x92\x51\x6e\xed\x59\x34\xb8\x6e\xaa\xde\x3e\x2d\xb0\xfc\x5b\xce\xba\xb2\x64\xb0\x89\x82\xf4\x64\x68\xbd\x11\x83\xf4\xc6\x3a\xd7\xa1\x88\x87\x74\x7b\xf6\xfa\xe6\x71\xce\xb3\xd1\xc7\x9c\xd7\x3a\x97\x3e\xe0\x62\xbf\x6d\x46\xe6\x1f\x56\x94\xab\xe8\x46\xba\x35\xd0\x7a\x23\x06\xe9\x8d\x6b\x8c\xa9\x6c\xcb\xfc\x46\x81\x1f\x6b\x02\xce\x0d\x36\xfd\xf1\x99\x7d\x4a\x1b\x58\x2b\x7a\xd2\xea\x6d\x82\x8e\x7b\x59\x8d\x18\x19\x81\x63\x68\xbd\x11\x83\xf4\x46\xad\xd8\xe1\xa5\x3f\x06\x62\x4a\x31\xbc\x3f\x24\x4f\xf1\xe2\x2e\x57\xeb\x81\x5e\x23\x16\xa8\x5e\x33\x91\x13\x28\x97\x18\x40\xba\xb6\xd1\x7a\x23\x06\xe9\x8d\x4e\x14\x1f\x07\x7d\x4f\x3b\x28\xd6\x7c\x9b\x10\x0e\x75\x38\xc9\xe4\xef\x32\xcf\xf5\xb5\x2a\x25\xac\x3e\x31\xcf\x73\xe1\x86\x04\x1d\x81\x63\x68\xbd\x11\x83\xf4\xc6\x1b\x53\x3f\x2b\x8b\x14\xa7\x23\x62\x4b\x2b\xfb\x94\x4f\x24\xf4\xba\x3f\x13\xf8\x94\xcc\x8d\x15\x32\x7d\x28\x28\xec\x8f\x65\x26\x25\x1d\xb4\xde\x88\x41\x7a\xa3\x60\xd9\x93\xdf\x93\x27\x8d\x65\x73\xae\xdc\x62\xef\x53\xe1\x31\x3e\x90\x76\xf2\x83\x74\x6a\xa4\x68\x7b\x36\x65\xf5\x60\xc3\x0a\x69\x6b\xa0\xf5\x46\x0c\xd2\x1b\x6b\x18\x4a\x4e\xb2\x7c\xb5\x76\x7f\x21\xf3\x2a\xb4\xfd\xea\x1b\x97\xa6\xda\xd1\x9f\xbd\xd7\x66\x9b\x12\xc4\xbe\x8d\x2c\xa7\xff\x26\x35\x61\xb4\xde\x88\x41\x7a\xe3\xde\x98\x1d\xc9\x1c\xf9\x94\x62\xbc\xe2\xc7\xec\x5e\xd0\x1e\x2a\xa9\xf7\xef\x76\x25\x8b\x0e\x8e\xd1\x5c\xd8\xae\x77\x92\x96\xb6\x27\x70\x0c\xad\x37\x62\x90\xde\x68\xa0\xe1\xd2\x95\xfd\x3c\xe7\x47\x3c\xfb\xf6\x27\x2d\xaa\x4b\xbc\x1f\xdb\xd9\x7f\x9d\x0f\x1c\xaa\xf9\xab\xe8\x71\xb9\xfc\x6a\xbf\x21\x81\x63\xff\xa5\x37\xfe\xd7\x5f\xfd\xff\x0d\x74\x90\xde\x18\xf8\xe3\xfb\x0e\xf6\xf3\x5b\x45\xd7\x6d\xec\xba\xbd\xae\x7b\xc9\x1c\xbc\xb1\x47\x15\xef\xdd\xb7\xef\xc7\xfa\x3c\xe5\xb7\x97\xb7\x65\x08\x1c\x43\xeb\x8d\x18\xa4\x37\xde\xd0\x7a\xb2\xaa\x7e\xfc\x79\xd9\xa0\xea\x9f\x62\x4d\xd6\xda\xf6\x38\x69\xb2\xef\xf3\x6d\x5a\xde\xb4\x85\x09\xa7\x1a\x8f\x68\x70\x11\x38\x86\xd6\x1b\x31\x48\x6f\xec\xbe\x7e\x9d\xf6\xaf\xba\x39\xbd\x6f\x19\x4f\xe8\xfe\xc0\x9d\xde\x52\xa1\xaf\xfa\xcb\x4a\x4c\x6e\xe6\x1b\x99\xe8\x8a\x55\xec\x23\xed\x72\xb4\xde\x88\x41\x7a\xa3\x96\xc5\xbe\xd7\xeb\x9f\xac\xd8\x58\xb9\xad\x53\x1f\xe0\x22\x76\x3c\x96\xbb\x41\x0d\xaf\x2a\xc1\x46\xf9\xc6\x80\xff\x66\x3a\x69\x06\x42\xeb\x8d\x18\xa4\x37\x8e\x94\x17\x51\x57\xc5\xdc\x8f\xe9\x7b\xf1\x3d\xe9\x71\xce\xaf\x8e\x75\x65\x99\x32\x0b\x72\xc1\x1f\x5d\x17\x22\x93\x78\x1f\x9a\x0a\x10\x38\x86\xd6\x1b\x31\x48\x6f\x54\x65\x9e\xa3\x11\xd6\x90\x2b\xd4\xad\x15\xf7\x2e\x26\xef\x18\xa3\x0a\xa6\x77\x26\xff\xf1\xb5\xfc\xc7\xa7\x3f\x53\x35\x07\xfb\xd8\x09\x1c\x43\xeb\x8d\x18\xa4\x37\x06\xab\xf6\xee\x3a\x7c\xe9\xfe\x29\xd5\x3b\x09\x29\xfe\x63\x0a\x85\x8a\x1f\xc5\xaa\xc8\xfd\x6d\x58\x5a\xac\x58\xc9\x72\xf4\x85\xcc\x08\x1c\x43\xeb\x8d\x18\xa4\x37\xea\x4f\x6b\xd5\x87\x8d\xa7\xfc\xd1\x3b\xc4\x7a\x8b\xf5\x73\x03\xc6\x33\x93\x6f\x34\xe6\xf6\x9b\x7e\x67\x27\xce\x2b\xf2\x82\xc3\x85\xc0\x31\xb4\xde\x88\x41\x7a\x63\xea\xe9\x1c\xce\x24\x3d\x45\x3a\xa6\xbb\x17\xc7\xcd\x8d\x39\xc9\x18\x05\x9e\x1f\xba\x57\xa2\x7c\xf1\xfd\xb5\x35\x72\x39\xda\x56\x41\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x27\x9d\x63\x66\xb6\x54\x33\x95\xaf\xb9\x88\xb8\xb9\x8d\x07\xd8\xb4\xad\x34\x5f\x64\xe7\x4a\x78\x1b\x73\xe2\xea\xe8\xa9\xf1\xe5\x3d\x04\x8e\xa1\xf5\x46\x0c\xd2\x1b\x4d\xf6\xba\xda\x64\x39\x69\xfd\x7a\x50\xfa\x79\x23\xe0\x43\xff\x80\xd2\x8d\xdd\x35\xb7\x3a\xf2\xda\xde\x5e\xf9\xf4\x6b\x3c\xf2\xdc\x7e\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x85\xcb\x7a\x4a\x74\x38\x77\xfe\x8f\xce\x12\xb3\x86\xc3\x02\x21\x87\x44\x4c\x27\xb5\x54\xd2\x35\x52\xcd\x76\x56\x92\xdd\xf5\x22\x6d\x0d\xb4\xde\x88\x41\x7a\x63\x59\xb1\xad\x14\x59\xfd\x33\x19\x0e\xbe\x8e\x8e\x5b\xd4\x5f\x17\x98\xf3\xcd\x7c\x57\x4b\x04\x37\xf7\x55\x19\x3e\x7a\xf5\xe5\x81\x12\x81\x63\x68\xbd\x11\x83\xf4\xc6\x27\xef\x82\xe5\xf5\x7c\x8d\xb2\x13\x0d\x82\xfb\x5b\xf6\x4e\x1a\xfa\xb3\xdd\x9b\xaf\x7a\x70\xd4\xa9\x6b\x48\x49\x26\x61\xfe\xbd\x1d\x81\x63\x68\xbd\x11\x83\xf4\xc6\x43\xdd\x64\x79\xe0\xf0\x9d\xd2\x84\x1d\x47\x5c\x4e\xb0\x0f\x96\xeb\x45\x2b\xe4\xc6\x64\x07\xfe\xac\x97\x71\xb9\x51\xf9\xc4\xf0\x24\x81\x63\x68\xbd\x11\x83\xf4\x46\x23\xdf\x1d\x4a\x79\xbd\x32\xe7\x94\x99\x9f\x14\xee\x72\x94\xda\xbe\x2b\x61\xe6\x35\x53\xcc\x7c\x5f\xf4\x66\xd8\x4b\x9f\x86\x27\xa4\x40\x87\xd6\x1b\x31\x48\x6f\x6c\xc9\x75\xcd\xe5\x2a\x3f\xf6\x6c\x4b\xf3\xb9\x9d\xbb\xb6\x03\x08\x2b\x79\x50\xe0\x6a\x5a\x26\x48\x47\xfd\xe4\xd9\x46\xd7\xda\x5e\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x60\x31\x43\xd8\xf1\xbb\xf0\xfe\xb5\x8e\x67\x3e\x97\x35\x4e\x5d\x92\xf2\x6b\xfb\xf0\x21\x8e\x41\x55\xed\xd5\xfb\xa7\x43\xbf\x13\xb4\x08\x1c\x43\xeb\x8d\x18\xa4\x37\xa6\xd0\xc9\x28\xde\x5a\x3b\x23\xae\x9c\x7d\xd9\x32\xa8\xa5\xe2\x2f\x6b\xa8\xf9\xc0\xfd\x73\xa1\x29\x4f\x3f\x1d\xe7\xde\x71\xe3\x9a\x23\x81\x63\x68\xbd\x11\x83\xf4\xc6\x25\xa6\x5d\x67\x42\x19\xcc\x23\xed\xc5\x4e\xda\xde\x34\x7a\x17\xe5\x7a\x62\x55\xd7\x61\xa0\x70\xce\x2e\xd7\xed\x69\xb1\xac\x33\xe9\xc9\xd0\x7a\x23\x06\xe9\x8d\x1b\x86\x33\x72\xf7\xfb\x75\xb7\x59\x28\xc1\xe6\xef\x87\xe1\x75\x61\xb7\x7e\x32\x55\x39\xdc\x7f\xd8\x18\x2c\x69\xc6\xf0\xb4\x95\x94\xf5\xd1\x7a\x23\x06\xe9\x8d\xad\xb4\x9d\xa9\x54\xd7\x7c\x67\x5e\x75\xa8\x7d\x69\xed\x8c\xdb\x21\x76\x48\xf8\x92\x1e\xf5\xac\x90\x72\x12\xf7\x97\x49\xae\x52\xd2\x18\x88\xd6\x1b\x31\x48\x6f\x4c\xf7\x17\xb6\x1f\xec\xc9\x1c\x6d\xfc\xf2\xcc\x98\x7b\x32\x32\xef\xe6\x61\xbe\xd4\x57\xc5\xbe\x8d\x52\xd6\x5f\x74\xad\x37\x17\xe5\x09\x1c\x43\xeb\x8d\x18\xa4\x37\x46\xbe\x21\x06\xe7\x65\x69\xac\xe2\x75\xe5\x02\x79\xe5\xa6\x4e\x46\x94\x51\xef\xb9\xad\x10\xde\xc5\x19\x76\x40\xea\xa8\x81\x24\x69\xd8\x42\xeb\x8d\x18\xa4\x37\x5e\x4f\xd6\x7a\x51\xe5\xd4\x61\x93\x6a\xb7\xc3\x6d\x79\x65\xcf\xfd\xb5\xef\x72\x0b\xd7\xde\x33\xb9\xaa\x2e\xfc\xba\xd0\x2f\x3c\x67\x42\xe0\x18\x5a\x6f\xc4\x20\xbd\x31\xaa\x53\xe8\xaf\xcf\xa1\x37\xfb\x4b\xbe\xb9\x2e\xef\x29\x8b\xba\x50\xc5\x38\xa3\x99\xf4\x79\x31\x31\x95\x9a\x47\xa6\x98\x38\x05\x08\x1c\x43\xeb\x8d\x18\xa4\x37\xde\xa6\x4b\x72\x53\x3a\x23\xaa\x37\xba\x47\xf1\x7c\x6b\x87\x4e\xd1\xbc\x81\xfa\xe6\xa6\xe6\x76\x60\x55\x9c\xe4\xec\xc9\x1d\x92\xc7\x09\x1c\x43\xeb\x8d\x18\xa4\x37\xfe\xa0\x4f\x3f\xcd\x14\xf7\xcc\xa1\x62\xfa\xc5\x26\x7f\xbe\x8c\xfb\xe3\x58\x0d\x56\xa5\x6a\x3a\x8b\x16\x62\xff\xeb\x87\xcd\x6f\x49\x81\x0e\xad\x37\x62\x90\xde\x68\xcc\xb7\xca\x9b\x72\x23\x74\x3e\x0f\xbc\x5c\x94\x3f\x70\x30\x2f\x4c\xca\xa4\xa3\xaa\x6d\xed\x6e\x1c\x97\x18\x9d\x54\xaa\x10\xa9\xa3\xa3\xf5\x46\x0c\xd2\x1b\x25\x5a\x7f\xc6\x6c\x09\xce\xf2\x3c\xde\xcf\x7d\x5c\xfe\x66\xd9\x80\x74\xb6\x4c\xd5\xc1\xa7\x89\x8d\xa7\xae\x2e\x1c\x3c\x1a\x61\x68\x44\xe0\x18\x5a\x6f\xc4\x20\xbd\x71\x81\xed\xc2\x78\x73\xd2\x8b\xb9\xd1\xcb\xcb\x8f\x1e\xdf\xf6\xaf\x79\x5c\x90\x73\x71\xc4\xca\x9c\x7b\x97\xfb\xbd\x7e\xde\xa4\x48\x11\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\xf7\x15\x6f\x37\x6b\xf8\xfc\x62\x32\x5d\x2a\x1a\x7b\xad\x95\x6f\xc8\x70\x62\xb4\xec\xdc\x25\x51\x35\xc3\xf8\xf4\xd6\xf0\x2c\x5f\xd2\x1c\xfe\x5f\x7a\xe3\x7f\x7d\x37\xf3\xdf\x40\x07\xe9\x8d\xac\x54\x35\x4c\x43\x1a\x8e\x71\x1a\x5f\xa7\xba\x4c\x7d\xa8\xf4\x9a\x16\xc2\x59\x69\xf7\xaa\x71\x47\x1f\x77\x7a\xde\x22\xfc\x92\x85\xc0\x31\xb4\xde\x88\x41\x7a\xe3\xa2\xdf\x79\xc9\x5f\x77\x85\x0e\xc7\xd0\xd7\xd0\x4f\x2f\x6a\xe5\xf8\x7f\xdf\xc0\x15\x1a\x73\x1a\x74\x79\xf4\xa4\xe6\x6b\xae\xa8\x12\x38\x86\xd6\x1b\x31\x48\x6f\xa4\x5a\xa2\x6b\xbe\xe5\xc5\xcc\xc9\x9b\x46\x9d\x77\x3c\xf0\xc4\xa0\x7d\xd0\xb1\xb6\x67\x0b\x1f\xd7\x16\x7b\x8c\x8e\x54\xfe\xa2\xe6\x27\x70\x0c\xad\x37\x62\x90\xde\x58\x52\x57\xf8\xd3\x4a\x5b\x89\x9a\xa1\xfc\xe9\x0d\xf2\xdd\xf2\x66\x33\x9e\x29\x14\x36\x2a\xc7\x2a\x97\x59\xee\xfb\xdd\x38\x50\x70\x94\xc0\x31\xb4\xde\x88\x41\x7a\x63\x98\xff\x52\x51\x57\xac\xad\xac\x73\x96\x4f\x93\x85\xe0\xf6\x0e\xde\x7c\xc3\x4a\x3e\xbb\x27\xcb\x2a\xf7\x43\xcf\x47\x86\x18\x92\x6e\x06\xb4\xde\x88\x41\x7a\xe3\x87\xeb\xaf\xe5\x6f\x1e\xbe\xc8\xc6\x39\x95\xc5\x20\xf6\x92\x77\x49\x4f\xa5\x86\xeb\xee\xf3\xab\x2c\xdf\x74\x66\x9e\x06\xfc\x8e\x22\x0d\xee\x68\xbd\x11\x83\xf4\x46\x30\xbd\x7f\x62\x9c\xd3\x71\xe7\x3b\x89\xfd\x1f\x83\x68\x09\x7a\xfa\xf6\x96\x92\x6d\x5d\xb3\x77\x34\x77\x99\x6f\xe4\x31\x5c\x26\xdd\xf3\x68\xbd\x11\x83\xf4\xc6\x5b\xbb\x59\x26\x43\x8d\xe8\xb0\x76\x2f\xb7\xba\xd4\x92\x57\x06\xe7\x28\x0b\x7d\xde\xfc\x71\xe1\x3e\x66\xaf\x2b\xf1\x55\x6c\xdf\x11\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\xc4\xf0\xc3\x72\x85\x5d\xf6\x89\x8f\x9a\xab\x7d\x0b\xe8\x0a\x92\x97\x1f\xc4\x09\x78\xc5\x72\xbb\x53\xa8\xaf\x3a\xf8\x2f\xbe\x54\x23\x70\x0c\xad\x37\x62\x90\xde\x98\x7e\xa8\xda\x34\x6f\xf5\xc0\xc3\xd1\x0c\x71\xc7\xb4\x4a\x0e\xb6\x47\xd2\xbe\x7e\x07\x2e\xe3\xa2\x79\x6a\xb3\xfc\xb7\xf4\x1d\x4e\x11\x38\x86\xd6\x1b\x31\x48\x6f\x1c\x36\xd4\xeb\xa9\x37\x61\x28\x48\x5f\xb7\x90\x34\x08\xd7\x93\x91\xdb\x77\xa7\xf5\x0a\xfd\x7e\x0e\xc9\x2f\x3f\x2f\xf5\x9b\x6c\x38\x10\x38\x86\xd6\x1b\x31\x48\x6f\xe4\x1a\xfa\x72\xc4\xe8\xb0\xcd\xc3\xb6\x3b\x51\xfa\xc9\xd3\xfa\xfa\xdb\x1b\x1f\x55\xa9\xc5\xb5\x92\x4c\xf9\x25\x0f\x48\x86\x94\xd9\x12\x38\x86\xd6\x1b\x31\x48\x6f\x7c\x93\x51\xdd\x42\xe1\x51\x5a\xe9\x1b\xef\xeb\x74\xe4\xd5\x41\xd7\x90\x9e\xed\x95\x3b\xb7\xf8\x7d\x6a\xe7\x2e\x65\xf5\x3b\x2e\x93\x11\x38\x86\xd6\x1b\x31\x48\x6f\xdc\xd3\xf0\x3c\xf3\x4c\x15\x45\xf2\xf7\xaf\x57\x05\xc8\xfb\x4f\xbc\x1e\x49\xa0\xa8\xbf\x9f\xf6\x74\xf8\xa6\x78\xf1\xb7\xea\xfb\x4b\xa4\x3c\x81\xd6\x1b\x31\x48\x6f\x34\x57\x97\x8c\xf0\xe5\x15\xe3\x3e\x70\x4d\x32\xc8\xf2\x6e\x86\x72\xf9\x35\xed\xee\xe9\xf1\x25\xde\xf4\x3d\x45\xd1\x14\x9f\xfa\x49\x53\x08\x5a\x6f\xc4\x20\xbd\xf1\xe8\x8b\x47\xd7\x3b\xd6\xd9\x87\xb2\x04\xaf\xc5\x31\x70\xef\x49\x91\x4e\x31\xa5\x57\xb9\x21\x7c\x43\x75\xf4\xfa\xc3\x89\xa9\x09\x29\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\xb5\xce\x2c\x63\x7a\x4f\xb8\xc2\xc2\x03\x96\x3c\x7e\x67\x0e\x50\xfb\x8e\x95\x45\x4c\xff\x3a\x9f\x4b\xc9\xcd\xb0\x98\xcc\xb4\x46\xca\x13\x68\xbd\x11\x83\xf4\xc6\xd3\x7f\xb4\x62\xd5\x32\x74\xdf\x6c\xa5\x45\x77\xbf\xbf\x4c\xbe\xe8\x9c\xc2\xb5\xfb\x88\x50\x7c\xb1\xba\xd4\xa5\x0f\x77\xdc\xdf\x91\x4e\x00\x5a\x6f\xc4\x20\xbd\xf1\x07\x53\xe0\x6c\x61\x54\x46\x81\x29\xf5\xe2\xf4\xc1\x78\x41\x59\x96\xb9\xd1\x33\x75\x14\x8b\x12\x5c\x8c\x36\x5f\xa5\x62\x0e\x91\x9e\x0c\xad\x37\x62\x90\xde\xf8\x26\x55\xf3\xaf\xce\xe4\x9a\x5d\x47\xb7\x86\x0b\x33\xbd\x47\x8d\x93\x49\xba\xca\x63\x1e\x03\xef\xc9\x60\x9f\xbc\xa6\x37\xc7\xcc\x09\x1c\x43\xeb\x8d\x18\xa4\x37\x0a\x1e\xfb\x75\x7e\x6d\x1f\xfd\x45\xf1\xf7\x2d\x05\x17\x2f\xd8\x8b\x79\x66\xa9\xe7\xe4\x81\x88\x8c\x89\xd1\xcb\xc9\x85\x1f\x3f\x90\xc6\x40\xb4\xde\x88\x41\x7a\x23\x65\xe7\x75\xa5\x2d\x8d\x2a\x77\x8b\xc7\x8d\xef\x53\xfc\x63\x28\x2d\x8c\x7b\xf3\xfd\x3f\x2c\x0a\x1c\x3d\x17\x28\x7e\xdc\xd6\x49\x98\xc0\x31\xb4\xde\x88\x41\x7a\xa3\xe5\xb4\x80\x2a\xee\xe3\x15\x5d\x42\x61\x73\x33\x6f\x47\x96\xe0\xce\xa5\xfc\x13\x3f\xe9\x2b\xfe\xd8\x5e\xf3\x38\x69\x48\x39\x41\xba\xb6\xd1\x7a\x23\x06\xe9\x8d\xa7\x3c\x83\x0f\x9c\xde\xa9\xfd\xf0\x4f\x0e\x85\x6d\xeb\x7b\x43\xf5\xaf\x47\x69\x04\xea\x3d\x56\x0f\x18\xdb\x94\x87\x1f\xb5\x8a\x37\x26\x70\x0c\xad\x37\x62\x90\xde\x38\x57\x24\x47\x21\xb6\xd3\x82\xb9\xe0\x9d\xbe\xd7\xcb\x80\xdd\x91\x63\x37\xed\x19\x72\x1c\xaf\x3a\xc7\x7d\x1f\x55\xa5\x94\xbb\x22\x4e\xe0\x18\x5a\x6f\xc4\x20\xbd\x31\x54\x92\x39\xac\xe6\xb3\xf9\xb0\xee\x19\x9e\x2c\x01\x05\x8a\x98\x67\x71\x1b\x4b\x13\x05\xcf\xfa\xa7\xf2\x4d\xee\x79\x15\xf3\x92\x66\x4a\xb4\xde\x88\x41\x7a\x63\x3f\x9f\xd4\xd1\x11\xfd\x86\xce\x53\xac\x5b\x5b\x3f\xe9\x82\x62\xcb\x63\x32\x87\x44\x4f\xbc\xe4\x09\x9e\xb9\xf9\x34\x43\x34\x9e\x74\x05\xa1\xf5\x46\x0c\xd2\x1b\xab\x99\x53\x0e\x2a\x37\xf5\x3d\xdf\x17\xa8\x74\xa9\x5e\xa3\x5d\x3d\xc8\xd6\xe1\xdc\xb9\x74\xca\xe7\xf5\x33\x0a\x5d\x9e\xfe\xd1\x8c\x04\x8e\xa1\xf5\x46\x0c\xd2\x1b\xd5\x2c\x13\x5d\x5b\x85\x6a\xdc\x03\x4e\x96\x67\xa9\x6b\x71\x4f\x6d\x8d\x08\x4e\x1a\x1d\xb6\xef\xd4\xa3\x32\xba\x22\x11\xcf\x48\x0a\xc1\x68\xbd\x11\x83\xf4\xc6\xe1\x77\x9a\x20\x4d\x52\xc6\xe5\xa2\xa9\xd8\xdc\x53\x3f\x0d\xd6\x0d\x57\xac\xe1\x8b\x1b\x4e\x35\x64\x5a\xf8\xf3\x12\x9b\x24\x69\xda\x45\xeb\x8d\x18\xa4\x37\x3e\x70\x4b\xfa\xd5\x65\xf9\xa8\xed\x5d\x5a\x69\x5a\xf1\xe4\xf9\xd3\xd2\xe3\xd1\x01\xdf\xce\x3b\x9d\x35\x7f\xd5\x70\xec\x5b\xf6\x03\xd2\x71\x42\xeb\x8d\x18\xa4\x37\xce\xae\x3f\x14\x9c\xd6\x0d\x28\x9d\xcc\xd3\xcb\xa5\xda\xc3\xe6\xe3\x96\xb6\xe1\xae\xb9\x45\x63\xaa\x2e\xc6\x5f\x94\x9a\xf1\x1a\x23\x70\xec\xbf\xf4\xc6\xff\xfa\x1f\x34\xff\x06\x3a\x48\x6f\x6c\x9f\x99\x7c\x1b\xd0\x70\xa6\xfa\x62\x5c\xd1\x9b\xdc\x57\xd5\x7a\xa3\x1a\x09\x57\xf7\xd3\x28\x5e\xfd\x2a\x71\x89\xfe\xa3\x87\x37\x29\x9c\xa0\xf5\x46\x0c\xd2\x1b\xe9\xa5\x5e\x9f\x16\xa4\xf8\xdd\x7f\x3c\xd2\xae\x0b\xbf\xf0\x52\x4a\x6a\x6a\xc7\xd6\xfb\x4b\x14\xa2\x69\x7a\xc9\xaa\x33\xb2\x49\x86\x04\x8e\xa1\xf5\x46\x0c\xd2\x1b\x55\x2e\xbd\x5b\x24\xfb\x12\xbc\x7d\xbb\x50\xc2\xe3\x93\xcd\x51\xd1\x4f\x27\xfb\x39\x78\xb9\xc5\xaf\x15\x5c\x17\xe2\x55\xc5\x35\x49\x4f\x86\xd6\x1b\x31\x48\x6f\xac\xde\x11\x45\x4b\x71\xfd\xa3\x65\x19\x8d\x86\x9a\xed\x92\x41\xb2\x9d\x93\x09\x4f\xe4\xfe\x81\x81\x77\xdc\xce\xc5\xeb\x0a\xf5\xa4\x3b\x0b\xad\x37\x62\x90\xde\x38\xbe\xb8\xfc\xf5\x92\xde\xa4\x80\x57\x6f\x4c\x8b\x69\x50\xd8\xbb\xe6\x53\x9d\x37\x9f\xcc\x58\xa7\xc4\x6b\x78\x31\xf2\xcf\x18\x91\xf2\x04\x5a\x6f\xc4\x20\xbd\xb1\xbd\x50\x95\xbc\xf3\xeb\xc8\x23\xc1\xde\xa2\x98\x20\x67\x9f\x22\xdb\x1a\xfa\xc5\xee\x79\x33\xf2\x37\x13\x93\x75\x42\x3b\xd2\x48\x87\x19\xad\x37\x62\x90\xde\x78\x37\x70\x7f\x63\x84\x25\x43\xdb\x19\x8a\x67\x63\xab\x9e\xcc\xf5\x67\xb8\x77\x72\xdd\x38\xdc\x30\xa1\xda\x97\x2f\x9c\xae\x5e\xba\x93\xc0\x31\xb4\xde\x88\x41\x7a\xe3\xd1\xfd\x77\x8f\x0e\x65\x97\x45\x7e\x08\xeb\x4c\x3f\x95\x23\xce\x47\xed\x73\x3a\xc4\x5a\x7e\xe4\x8e\x95\x44\x6f\x8d\x13\xcb\x07\x03\x02\xc7\xd0\x7a\x23\x06\xe9\x8d\x7c\x8b\x15\x15\xb5\xc5\x42\xb8\x78\x95\x88\xbe\x91\xac\xb7\xff\xf5\x69\x79\x8a\x89\xea\xfc\x01\xab\x58\xe1\x2f\xbb\xc2\x38\xdc\x08\x1c\x43\xeb\x8d\x18\xa4\x37\xb2\xf2\x1c\xf8\x68\x38\x15\x9d\x64\x7f\x79\xe3\x40\x85\xcd\xf5\xfb\x09\xdf\x93\xbf\x5e\xfd\x3a\x0e\x2e\xda\x55\x5b\xb1\xd2\x71\xec\x20\x70\x0c\xad\x37\x62\x90\xde\xf8\xa6\xd8\x3a\x88\xfe\xdd\x30\x4b\x65\xf4\x42\xa2\xc8\xfb\x67\x4c\xb4\x57\x6f\x92\x5f\xfd\xfb\xc5\x8a\x69\xf6\xea\xfb\x5b\xd3\xab\xd2\x04\x8e\xa1\xf5\x46\x0c\xd2\x1b\x03\x57\xa7\x8a\xe6\x4c\x6a\x89\xb9\x70\x9f\x3d\x69\x6f\x24\x3a\xc2\x57\xc5\xf5\x2c\x0d\x15\xdc\x18\xc4\x03\x65\x07\x0d\x33\xaf\x10\x38\x86\xd6\x1b\x31\x48\x6f\xf4\x36\xf7\x76\x8a\xff\xac\x48\xc6\xfa\xdc\x97\xdd\x70\xd0\x58\x99\x9d\x18\x19\x76\x66\x4a\xb5\xf7\x39\x67\xbb\xab\xd9\x5b\xe1\x10\x81\x63\x68\xbd\x11\x83\xf4\xc6\xa5\x88\x12\x33\x26\x95\x9f\x0a\x36\x14\xe6\x27\x6f\x0d\xac\xdf\xba\xbd\xae\x42\x9f\x52\x2f\x25\xc1\xdb\xa3\xc8\x7c\x21\x32\xd8\x83\xc0\x31\xb4\xde\x88\x41\x7a\xe3\x55\x71\xb2\x5d\xc9\xfb\xa7\x5d\x28\xce\xbd\x7d\xf8\xe4\xf6\x83\x0d\x65\xe1\x7b\x0d\x3e\xa3\xd6\x8f\xf6\x8e\x57\xff\x6c\x5a\x97\x27\xbd\x33\xb4\xde\x88\x41\x7a\xa3\xc1\xff\xe3\xec\xbe\xa3\xb1\xfe\xff\xb8\x81\x8b\xeb\x7d\x29\x3b\x32\x3e\x65\x64\x65\x85\x64\x16\x8a\x8c\x90\x44\x66\xb6\x14\x0a\x91\x15\xc9\xf8\x58\x99\x49\x21\x3b\x5b\x76\x29\xd9\x19\xc9\xca\x4c\x4a\xd9\xb2\xf7\xa8\xcc\xb8\xcf\x75\xff\xce\x7d\x8e\xf3\x3e\xe7\x73\xbe\xe7\xdc\xff\x3f\x8f\x73\x8d\xf7\xe7\xf5\x7e\xbe\xfe\xf0\xb8\x4c\x02\x89\x94\xca\xb6\x9c\xb8\xfd\x03\x8f\xe5\x0e\xed\xd6\xf9\xbb\x55\x6d\x39\x3c\x48\x65\xfa\x6b\x3f\xb9\xe2\xd9\x90\x40\x82\x22\x38\x6c\xbd\x11\x07\xe9\x8d\x95\xa5\x5d\xee\xe7\xb4\xb6\x23\x18\x95\x6a\xc4\x8c\x55\x0b\xb9\xb8\xac\x78\x7b\xb9\x97\x1b\x6e\xf3\x80\x7a\xed\x5e\xda\x32\xc2\x34\xc5\xd6\x1b\x71\x90\xde\xa8\x5e\x4a\x7e\xf7\xa2\xe9\xca\xda\x2f\x5f\x7f\xfe\x86\x05\xfa\x01\x86\x0f\x47\x6f\x91\xbd\xb6\x34\x11\x1b\x23\x19\xfe\x79\xaa\x87\xf0\xa0\x63\xeb\x8d\x38\x48\x6f\x2c\x2c\xa6\xf6\x5b\x4a\xe1\x3c\x8c\x28\xcf\x88\x73\x2c\x08\x1c\xa9\x8d\x1e\x6e\x0b\xd1\x7e\xa2\x7b\x76\x7e\xa7\x95\x3e\xd1\x4e\x0a\x45\x70\xd8\x7a\x23\x0e\xd2\x1b\xed\x74\xfc\x47\xd5\x8a\xb4\xf6\xc9\xa3\x2e\xfb\x2a\xf0\x6c\x39\x5c\x54\x53\x7b\x34\x35\xc2\xb6\x71\x5f\x3e\x9b\xec\xe8\x80\xb6\x35\x8a\xe0\xb0\xf5\x46\x1c\xa4\x37\x16\x3b\xdf\x3a\xf3\x39\xff\x14\xe9\xcd\xf7\x29\xe4\x1e\xb5\xcc\x49\xf8\x85\x9b\x4f\x59\x95\xcf\x9d\x27\xbe\x65\xa3\xd1\x7c\xf7\x18\xe1\xd9\xc4\xd6\x1b\x71\x90\xde\x98\xf3\x6e\x68\xc9\x88\xf5\x35\xee\x6a\x67\x44\x76\x09\x9d\xaa\x9d\xbd\x91\xe4\x2d\xba\x31\xca\x57\xb3\x8a\xf3\x19\xe7\x9c\x54\x6f\xa2\x08\x0e\x5b\x6f\xc4\x41\x7a\xa3\xb2\x2a\x28\x77\x2c\x5e\xbd\xaa\xd2\x92\xe7\xfa\xfa\xae\x5b\xd0\x9d\x90\xee\x95\xf9\xee\x9d\x2f\x91\xfd\x6a\x39\xa1\x22\x5d\x5c\x28\x82\xc3\xd6\x1b\x71\x90\xde\xf8\x51\xa0\x3e\x63\x51\xaf\x9b\x9f\x3c\x42\xa0\xa0\x39\x89\x93\xa1\x98\xc3\xe5\xcf\xd9\x80\x4f\x89\x81\xcf\xd4\x78\xa2\xc5\x2c\x09\x7d\x02\x5b\x6f\xc4\x41\x7a\xe3\xa4\x6f\xda\x44\x7b\xee\x6a\x43\x8b\x6d\xfb\xcc\x96\x09\x45\x63\xe8\xd6\xd0\xc6\x8d\x4a\x92\x42\xf2\xe7\xae\xdd\x1f\xd2\x71\xc6\x28\x82\xc3\xd6\x1b\x71\x90\xde\xc8\x97\xdb\x64\xeb\xbe\x7c\xa9\xb0\xe1\x59\x40\x04\xa7\xf5\x6c\x06\x89\x8a\xde\x8c\xf2\xa3\xa0\xb6\x4b\xce\x49\xa5\xe4\xa3\x37\x19\x50\x04\x87\xad\x37\xe2\x20\xbd\x91\xf4\xf2\xa3\x14\xbc\x89\xbf\xde\xe4\xe7\xa3\x24\x33\xf2\xbb\xd2\x32\x14\x8d\xc4\x67\x16\x37\xdc\x0a\x2f\xaf\xfc\x1b\x67\x33\x11\x44\x11\x1c\xb6\xde\x88\x83\xf4\x46\x5e\x45\xc1\xeb\x33\x54\xc4\xd4\xd1\x96\x39\xdd\x7a\xc2\xcd\xe6\x64\x4f\x8b\xb5\xa2\x87\x39\x3d\xc6\x0f\xbd\xf5\x4e\x8e\x9b\x20\x6c\xbb\xd8\x7a\x23\x0e\xd2\x1b\xcf\x36\xab\x10\x85\xf5\x8c\xe7\xaf\x34\x67\xc7\x54\xc4\x8c\xb3\x39\x9c\x2e\xe4\xbe\x71\xf1\x54\x1b\x9f\x86\xfc\x66\x7c\xb7\x25\x2f\x8a\xe0\xb0\xf5\x46\x1c\xa4\x37\xe6\x4e\x2d\x73\x6a\x10\x6d\xfa\xbb\x6a\x7b\xda\x52\xe8\x5d\x0c\x7b\x61\xba\xf2\x41\x37\xf4\x8b\xc2\xb3\x75\xff\xc6\x50\xbf\x96\x2b\x28\x82\xc3\xd6\x1b\x71\x90\xde\x88\xa3\xee\xb6\x22\x3a\x41\xb6\x86\x7c\x6c\x60\x36\xe8\x11\x7c\x54\xa2\xf3\x54\x5f\xd1\x52\xd3\x81\x64\x9b\xdf\x23\xb6\x5b\x97\x0f\x45\x70\xd8\x7a\x23\x0e\xd2\x1b\x75\x38\x2c\xce\x18\xa7\xbf\x8a\xec\x30\x5f\x3a\x54\x37\x57\x44\xe4\x73\xfa\x28\x7e\x37\x5d\x5b\xb9\xef\x7c\xb8\x68\x99\x8f\xf8\x0d\x14\xc1\xfd\x97\xde\xf8\x5f\xff\xe7\x7c\xb0\xd0\x41\x7a\xa3\x1f\x09\x7b\xbb\x47\xfe\x4b\x0a\xf5\xe0\x7f\x01\x9b\x85\x66\x76\xcb\xb2\x6f\x35\xe6\xb7\xb6\xb9\x1e\x06\xb5\x8d\x44\xde\xbc\x77\x19\x45\x70\xd8\x7a\x23\x0e\xd2\x1b\x5f\xff\x7c\x27\xa5\x7c\xd7\xf7\x83\x0a\xc7\x62\xe8\x70\xdb\x5c\x44\xe4\x83\xcc\xdd\xa8\x85\x46\xe5\x8a\x12\x6a\x95\x1b\x1a\xb2\x54\x28\x82\xc3\xd6\x1b\x71\x90\xde\xc8\x39\x28\xf4\x80\x6b\xf4\x81\x60\x2d\x45\xae\x6a\xad\xae\xc2\xd5\x05\x95\xa8\x2d\x9b\x09\x77\x63\xd1\x21\x6e\x8d\x24\x69\x52\x25\x14\xc1\x61\xeb\x8d\x38\x48\x6f\xfc\x7b\x38\xeb\x25\x43\x73\x19\xa2\xa3\x74\xec\x1e\x47\xfb\x83\xc4\x13\xc3\xd3\x66\xb8\xbb\xfd\xc4\xdf\xfe\x3a\x8c\xeb\xbc\x8a\x25\x7c\xc8\xd8\x7a\x23\x0e\xd2\x1b\x6d\xe5\x1a\x98\x7d\xa5\xe3\x0f\x95\xea\x0c\x2c\x8a\x4d\xcd\x97\x9a\x75\xfa\x07\x85\x65\x76\xb8\x5a\x0c\x02\xd6\xc9\xf2\x6b\xf4\x28\x82\xc3\xd6\x1b\x71\x90\xde\x88\xf8\xdb\x97\xe7\x70\x9e\x57\xae\xb3\xf2\x9f\x57\x6c\xe1\xad\x3c\xec\x2b\x46\x97\xa9\x17\xb0\xd6\x43\xf2\xc7\xcf\x49\x38\x86\x1b\x45\x70\xd8\x7a\x23\x0e\xd2\x1b\xe9\x64\xa7\xad\xec\x32\x27\xaa\x19\xd6\x22\xa8\x43\x1a\xae\xd8\x5d\x48\xef\x0f\x55\x5f\xee\x16\x4c\xc9\xd1\xf8\x73\x2b\x2e\x51\x11\x45\x70\xd8\x7a\x23\x0e\xd2\x1b\xab\x25\x84\x4f\xaa\xff\x7d\x7f\x86\xb2\x71\xcc\x3f\x5c\xbc\xf4\xf9\x56\x05\x8d\xf9\xb6\x8a\xfb\x78\x44\x64\x8e\x5f\x70\x82\x25\x23\x8a\xe0\xb0\xf5\x46\x1c\xa4\x37\xf2\x29\xd6\x4f\x6c\x49\x6a\xc5\x0c\xad\x54\xbb\x8a\x58\xff\x7a\x2f\xde\xd4\x2c\x4e\xfb\xf1\x89\xc5\x87\xfd\x8b\x6c\x12\xda\x99\x32\x28\x82\xc3\xd6\x1b\x71\x90\xde\x78\x8c\xc5\xe3\x51\xef\x93\x09\x4b\xf9\x48\xb1\xcf\xbd\x09\xe6\x77\xde\xd6\x07\xc4\xf4\x7f\x0e\x56\x6f\x32\x2c\x35\xe0\xd6\x4b\x13\x43\x11\x1c\xb6\xde\x88\x83\xf4\xc6\x5f\xca\xf7\xe9\xaf\xdf\x47\x06\x69\x53\x46\xcf\xe9\x2d\xed\x6c\x16\x67\x6c\xa7\x7a\x4f\xfb\xf8\xd3\x4a\x95\xb2\x15\x0f\x72\x10\x46\x33\xb6\xde\x88\x83\xf4\xc6\x6d\x8e\x9b\x0c\x1c\xcc\x13\xd7\x03\x7b\xea\xc4\xd3\xff\x6a\x30\xbc\xd8\xff\xb9\x92\xa6\x15\xf2\x49\x3e\x4f\xaf\x46\x2b\x8d\x8c\x50\xe8\xb0\xf5\x46\x1c\xa4\x37\xba\x90\xc4\x1d\x79\xd3\x4c\xba\x7a\x64\x3e\xeb\xb5\xf2\xcd\xe7\x11\xdf\x17\xe7\x1e\xd7\xa4\xcf\x98\xb4\x09\x24\x2d\x27\x6b\xdf\x25\x5c\x67\xd8\x7a\x23\x0e\xd2\x1b\x1d\x98\xbb\x95\x7f\xaf\xf0\xef\xe3\x63\x53\x78\x4f\xd8\xf6\xb8\x45\x99\x0f\x44\xf2\x30\xbd\xa1\xb7\x78\xd7\x60\x34\x7b\x5a\x8d\xf0\x36\xb1\xf5\x46\x1c\xa4\x37\xda\x0d\x88\x8f\x2a\xfc\xca\x17\xe8\x7e\xe7\xb7\xab\x60\xcc\x77\x9b\xfc\xf7\xb4\xfc\xa3\xb2\xde\xa3\x4b\x57\x45\xe3\xbf\x3e\x3d\x6d\x82\x22\x38\x6c\xbd\x11\x07\xe9\x8d\x8b\xf3\x56\x49\xdd\xf7\xa6\xdf\x89\xaa\x2e\xc7\x4f\x66\x3d\x50\x08\xbb\x12\xfe\x66\xe4\xb5\xa5\x0f\x70\xbf\xf7\xb0\x09\xd4\x13\x1e\x27\x6c\xbd\x11\x07\xe9\x8d\x53\xe7\xe7\x83\xb5\xc4\x3a\x49\x7d\xce\xb9\x77\xbd\x30\xed\xf3\x8a\x1c\x1f\x24\x65\xdd\xce\x7d\x30\x14\xa1\x6f\x91\x85\x8c\xa9\xa3\x08\x0e\x5b\x6f\xc4\x41\x7a\xe3\xfd\x9e\xc1\xa1\x50\x26\xf7\xc7\x95\xa6\x41\x96\x37\xf7\xff\x46\xb8\xd0\x4e\x8e\x09\xf1\x45\x7e\xa3\x08\x54\xfd\xde\x26\x17\x4f\x38\x67\xd8\x7a\x23\x0e\xd2\x1b\x29\xff\xd9\x7c\xb9\x79\xed\x58\x64\x89\xdc\xb0\xfa\x76\xc9\xbb\x3f\x7e\x32\x35\x5a\x87\xba\x0e\x91\xbe\x61\xab\xad\xb6\xb8\x3b\x4a\x83\x22\x38\x6c\xbd\x11\x07\xe9\x8d\x26\x1a\x13\xc5\xfa\xd1\x51\xed\xc7\xe8\x99\xbf\x5a\x0b\x0e\x5e\xee\x7d\xa0\x4d\x32\x3a\x77\xa9\x98\xd7\xee\xb3\x80\x41\xd7\x9d\x13\x28\x82\xc3\xd6\x1b\x71\x90\xde\x38\x4b\x2a\x9d\x2f\x46\x55\xa0\x5b\x45\xf6\xdc\xb0\x42\xee\x9b\x92\x45\x10\x69\xfa\xa3\xe6\x07\x5f\x64\x9f\x89\xb9\x98\x0c\xc6\x5c\x44\x11\x1c\xb6\xde\x88\x83\xf4\xc6\x73\x19\x23\xb5\x66\x66\xd7\xff\x38\x1e\xee\x11\x97\x38\x1e\xf8\xea\x56\x4b\xe8\xb6\xb5\x0a\xbf\xaf\x24\x8b\xd2\x58\xd9\xb4\x15\xe1\x42\xc1\xd6\x1b\x71\x90\xde\x38\x6e\xd7\x36\xdd\xc0\x5b\xa7\xb8\x4c\x21\x95\xe7\x17\xd4\x1c\xcd\xeb\xc2\x37\xe1\xbd\x51\xb6\x53\x55\xa2\x18\x3e\x35\xe4\xcd\x82\x22\x38\x6c\xbd\x11\x07\xe9\x8d\x95\x7f\xa2\x48\x27\x00\x0f\x99\x7a\x75\xd3\x59\xca\xf3\xe2\xa3\xbd\x14\x45\x0e\x94\x45\xf3\x97\x7c\x7e\x48\x2a\x16\x6d\xc4\x11\xca\x09\xb6\xde\x88\x83\xf4\xc6\xd4\x5b\x0f\xef\x9c\xa1\x69\x5c\xfb\x55\xf2\x79\xf4\x5a\xfe\xf4\xdb\x81\x71\x64\x40\xad\x22\x03\x77\xa4\xa9\x56\xcf\xee\xc1\x00\xe1\x68\x60\xeb\x8d\x38\x48\x6f\xe4\x1e\x25\xf6\xa3\xad\x66\xa9\xfe\x13\xed\xcc\x05\x8a\x9e\x2d\xe8\x5c\x6d\xe7\xfa\xf6\xe6\x52\xd4\xbf\x84\x10\xcd\x07\xff\x2e\x11\xee\x00\x6c\xbd\x11\x07\xe9\x8d\xcf\x0f\xad\x20\xc9\xc7\x4f\x5d\xfc\x48\xb4\xe8\x2a\x4b\xbb\x20\x29\x20\xbd\x2d\xf2\x8a\xb2\x35\x00\x69\x7e\x58\x91\xb6\x55\x83\xa0\x08\x0e\x5b\x6f\xc4\x41\x7a\xe3\x33\xdd\x86\x29\xca\x95\x75\xe6\x98\xd6\x0a\xa6\x30\x99\xfd\xba\x72\xc3\xd7\x24\x2c\xe0\x89\x0f\x35\x8f\x2b\xb7\x64\x95\x14\x3f\x8a\xe0\xb0\xf5\x46\x1c\xa4\x37\x52\xb2\xec\x8a\x4a\xea\xa0\x42\xd6\xed\x55\x4e\xc5\xde\xa3\x4f\x65\x5f\x22\xca\x0c\x3a\xa9\x79\x4c\x8f\xa2\xd5\x62\x86\x37\x68\x51\x04\x87\xad\x37\xe2\x20\xbd\xd1\xf3\xa6\xc6\xda\xe8\xf8\xab\x5a\x99\x79\x91\x09\x33\x0a\xb1\xd2\x5e\x7b\xe2\x57\xe2\xed\x91\xd4\x99\x44\x5e\x46\x2f\xee\x3c\x22\xdc\x4e\xd8\x7a\x23\x0e\xd2\x1b\xaf\xd0\x1b\x1a\x28\x55\x38\x2c\xb3\x7b\xf3\xea\x1a\x7a\x82\xa6\xa0\xc5\xef\xbb\x6a\x7c\xd3\x66\x15\x5f\xde\x74\xfd\xec\x3d\x7b\x14\x45\x70\xd8\x7a\x23\x0e\xd2\x1b\x83\x5c\xb5\x66\xef\xe4\x79\x06\xe5\xbe\xf4\x26\xbd\x77\x61\xbc\xce\x67\xf5\xc4\x88\xdc\x86\xb0\xc5\x91\x33\xb3\xa3\x92\x39\x8f\x25\x50\x04\xf7\x5f\x7a\xe3\x7f\x69\x34\x07\x0b\x1d\xa4\x37\x2e\xde\x32\x95\x3d\x95\xdc\x52\xe1\xfa\xba\x6b\x9c\x8f\x58\x56\x28\x42\xe2\x2d\xaa\xab\x1c\x68\x54\x31\xeb\x1f\xa1\x76\x8e\x58\x1e\x45\x70\xd8\x7a\x23\x0e\xd2\x1b\x6d\x84\x1f\xdf\x58\x0c\xf8\x3a\x7d\x27\xc0\x69\x5d\x2e\x82\xaf\xe6\x71\xbf\x54\x5f\xc5\x85\xbc\x43\x15\x1e\xcf\x96\xac\xa3\x4c\x09\xab\x1e\xb6\xde\x88\x83\xf4\xc6\x52\x83\xa5\x8e\x8b\x1e\x0b\x2b\x3b\x74\x4b\x1d\x27\x3b\x98\xae\x26\xae\x37\xbd\x3d\xc9\x1d\xc7\xbf\x68\x77\xf5\x69\x23\xeb\x1a\x61\xd3\xc0\xd6\x1b\x71\x90\xde\xa8\x1b\xcb\xb5\x1e\x95\x29\xf5\xa5\xc0\xef\x3c\xe9\x46\x7c\x74\x5b\xde\x79\xbe\xe7\xed\x0e\x55\xf4\x76\x99\xa4\x3f\x46\x74\x3c\xcf\xa1\x08\x0e\x5b\x6f\xc4\x41\x7a\xe3\xd5\xbf\x41\xb2\x47\x8e\x7d\x69\x10\x17\x96\x56\xe7\xae\xff\xe1\x5f\xb1\x32\xf4\xeb\x5d\x88\x57\xb5\xc1\x6d\x85\x84\x7b\x37\x8e\x0a\xa3\x08\x0e\x5b\x6f\xc4\x41\x7a\x63\x40\xcc\x10\x67\x37\x31\x6b\x42\xac\x60\xb6\xd2\x21\x26\xb3\x14\xee\x99\x5e\x0b\x2e\x93\x63\xfb\x0f\x70\xad\x7b\x2c\xa2\x3b\x84\xa6\x83\xad\x37\xe2\x20\xbd\xf1\x41\x2c\x53\x8f\xa2\x59\x75\xbd\xa6\xa2\xc0\xde\xe5\x7f\xcf\x36\xf4\x98\xe6\x4e\x53\x9d\x1d\x48\xcd\xe8\x31\x96\xa1\x47\xcf\x50\xa2\x08\x0e\x5b\x6f\xc4\x41\x7a\xe3\x77\xae\x09\xdd\x62\x44\xe7\x86\x55\xca\xa0\xdf\xd9\x91\x2c\x5d\x93\xdc\x55\xcd\x2c\x99\xc0\x92\x0f\x82\x5a\x5e\x9f\xce\x5a\xe3\x51\x04\x87\xad\x37\xe2\x20\xbd\x91\x32\x77\x5b\xb6\x58\xf5\x88\xe3\xc6\xa5\x19\xa3\x3a\xc7\xf3\xe1\x3f\x27\x8a\xd8\x4c\x67\xf6\x23\xa9\x8e\xe1\x29\x1f\xcd\x0c\x52\xa0\x08\x0e\x5b\x6f\xc4\x41\x7a\xe3\xf1\xd6\xec\x32\xbf\x21\x8f\x17\x23\xe4\x4b\x34\xe1\x5f\xa7\x1c\x58\xae\x4a\xe8\xe4\x27\xf8\xa5\x7c\x78\xf1\x5a\xeb\xca\x4b\x7b\x03\x14\xc1\x61\xeb\x8d\x38\x48\x6f\xbc\xae\x1c\xb4\xbf\x49\x2c\x24\xf5\x51\xcc\x4a\xa4\x91\xde\x27\xe4\xb6\xe7\xc3\x94\x13\xeb\x2c\x91\xaf\x1c\x98\xa2\x59\x78\x2c\x09\x03\x10\x5b\x6f\xc4\x41\x7a\x63\xbe\xf4\xe1\x43\x8a\x77\x88\x0a\x55\xc2\x58\x83\x73\xba\x32\xdd\x75\x32\xb4\xee\x9c\x8c\x6b\x37\x54\xf7\x45\x8a\x8a\x12\xa3\x08\xab\x1e\xb6\xde\x88\x83\xf4\xc6\xbb\x94\xd3\xe2\x95\x85\x13\x94\xbc\x1f\x2f\xf7\x7c\x08\xfb\xdd\x2d\xcf\x1d\x56\xf7\x30\xbb\xd2\xe8\xd6\xfe\xf3\x9a\xfa\xf9\x75\xc2\x12\x8a\xad\x37\xe2\x20\xbd\xf1\x4c\x16\x9a\x93\x5a\xef\x4c\x77\xdd\x62\x7b\xe8\x69\xef\x2d\x53\x11\xe3\xa0\x65\x0d\x03\x1c\x71\xed\x1f\x7d\x8b\xb5\x8a\x1d\x7d\x14\xc1\x61\xeb\x8d\x38\x48\x6f\x3c\x4e\xd7\x75\xe8\x6d\xec\x17\x1f\x5b\x9b\x88\xe8\xca\xe7\x27\xbe\xc9\x2a\x1c\x59\x09\x8c\x99\xac\xed\xfc\x3c\xc0\x7b\x0c\xc7\xc0\x8e\x22\x38\x6c\xbd\x11\x07\xe9\x8d\x5b\xcc\x6a\xff\x88\xc4\x6d\x92\x72\x45\xe9\xe8\x9a\x44\xea\x66\x9e\x17\xbe\x50\x77\x8b\x2c\xf0\x67\x72\x4d\xfb\xf1\xa6\x5c\x99\x70\xce\xb0\xf5\x46\x1c\xa4\x37\x2e\x6a\xf9\xa9\xb5\x29\xac\x12\x05\x6f\x0c\x65\xdd\xbf\xab\xc8\xde\x3b\xc3\x7e\x26\x5a\x26\x92\x79\xb8\x38\x45\x5a\xea\xe3\x0d\x42\x6f\xc5\xd6\x1b\x71\xb0\xde\x78\xde\x43\xe4\xea\x6c\x6a\x89\x4c\x6f\x38\xbd\xdf\x47\xc9\x48\x6f\xd9\x2e\x60\x28\xac\xfa\x7e\xdf\x27\x64\x50\xf8\xe3\x75\xc2\x3c\xc3\xd6\x1b\x71\x90\xde\xf8\xc0\x83\xf8\x72\xd7\x85\xc8\xaf\xcd\x1e\x8a\x81\xbb\x63\x9b\xc3\x05\xee\x81\x91\xf2\x26\xbc\xa4\xe7\xf2\xb9\x52\xc1\x8d\x8b\xb6\x28\x82\xc3\xd6\x1b\x71\x90\xde\xf8\xe2\x78\x2b\x05\xef\xd4\x96\x47\x8b\x70\xce\xc9\x7d\x65\xee\x6c\xbc\xe1\xf5\xd9\x33\x03\x21\x15\xdf\x0b\x0b\x77\xe3\x6b\x0c\xae\xa3\x08\x0e\x5b\x6f\xc4\x41\x7a\xa3\x53\x97\x55\x54\x68\xde\x54\xf8\x68\xc7\x80\x3b\x77\x06\xcd\xb9\x42\x71\x83\x8f\x67\x15\xa3\x4c\xec\xb5\x0c\x62\x2e\x33\xb1\x12\xb6\x10\x6c\xbd\x11\x07\xe9\x8d\x1c\xff\x74\xb8\x68\x46\x2a\xed\xe6\xcd\x9b\x84\x37\xb8\x92\x75\x8b\x5c\x89\x79\xa9\x8e\xcb\xba\x79\x75\x6e\x94\x5c\x6a\x38\x42\xe8\xfa\xd8\x7a\x23\x0e\xd2\x1b\xb7\xb7\x98\xed\x96\xcd\xae\x51\x5a\xed\x86\x74\xee\x7b\x37\xc5\xc7\x6a\xb2\xb7\x1a\x5c\x56\x15\x4f\xd8\x33\x3b\x43\xee\xf1\xe2\x02\x8a\xe0\xb0\xf5\x46\x1c\xa4\x37\x0e\x84\x33\x6f\xf5\xf5\xeb\xca\x66\x1e\xe5\xb5\x51\xdf\x3a\xea\x4f\xbc\x36\x79\x1e\x57\x2f\xdd\xbb\xc9\xd3\x2c\x96\x4b\x97\x74\x06\x45\x70\xd8\x7a\x23\x0e\xd2\x1b\x5f\x73\x86\x66\x8e\x24\x52\xcd\x7c\x52\x5d\xa9\xb9\x99\x6b\x6f\x96\x67\xdd\x2e\x29\x70\x39\xd8\xac\xf7\xed\x52\x43\x46\xcb\x28\xe1\x6d\x62\xeb\x8d\x38\x48\x6f\xd4\x3d\x14\xc1\xae\x1f\xf8\x95\xb3\xad\x27\xad\x89\xc8\x4d\x84\x9b\x7f\x8a\xed\xbe\x1d\x2b\x31\x32\xeb\x3b\xab\x36\xf3\xdb\x59\x16\x45\x70\xd8\x7a\x23\x0e\xd2\x1b\x89\xf5\x1a\xf1\xe7\xbe\xfd\x4a\x4a\x6c\xf7\x79\xd9\xf0\xc6\x67\x35\xae\xe6\x77\xbf\xd7\xb6\x57\x53\x50\xe0\xef\x3f\x85\x03\xce\x87\x51\x04\x87\xad\x37\xe2\x20\xbd\x31\x01\x27\x3e\xba\xb1\x67\x95\x4b\x77\xd8\xb9\xa4\x46\x94\x2d\xfb\xda\xaa\x6f\xd8\x19\xd5\x42\x0a\x6a\xe9\xb5\x4f\x4d\x9b\xc7\x09\x57\x1d\xb6\xde\x88\x83\xf4\xc6\xc0\x29\x63\x70\xf8\x04\x69\x60\x9b\xb2\x8a\x24\x3e\x3e\x75\x94\xed\xb3\xac\xf6\xba\x80\xed\x88\xf4\xb9\xc0\xaa\xc7\x51\xb1\x67\x51\x04\x87\xad\x37\xe2\x20\xbd\x71\xb5\xfe\x41\x96\xff\x2f\x85\xd2\x89\xca\x06\x7a\x1d\xe2\xe6\xf3\x31\x9a\x48\x09\x7f\x8b\x65\xc1\x21\xa6\x8a\x91\xca\x8d\x2e\x47\x14\xc1\x61\xeb\x8d\x38\x48\x6f\x54\xff\xf9\xec\xfc\x49\x9d\x70\x22\x99\xd1\x72\xb7\x4f\xd6\x83\x82\x89\xd7\x24\x7d\x17\x2b\x23\x35\x9e\x3d\x6a\xe0\xab\x9e\x7e\x4d\xb8\x03\xb0\xf5\x46\x1c\xa4\x37\xe6\x39\xc5\xe3\x39\xb3\xdc\x26\xc3\x2c\x94\xbe\x07\xc6\x3a\xfe\x53\x5f\xcf\x32\xbf\xea\x4e\x19\x86\x08\xac\x10\x19\xfd\x1e\xbb\x87\x22\x38\x2c\xbd\xf1\xff\x15\xba\xff\x32\x03\x0f\x14\x3a\x00\x39\x74\x97\xe3\xf3\xb8\x58\x8f\x08\x65\x3d\xfe\x15\xb0\xfa\x48\x87\xe2\x52\xa3\xc9\xcd\x8b\x53\x99\x9e\xe3\x2d\x1a\xcc\x91\x9e\xc7\x6e\xd1\xa2\x08\xc0\x76\xe8\x00\xe4\xd0\xc5\x8d\x2d\x53\x34\xd6\xb8\x1f\xd9\x66\xfb\xce\xac\x75\xd7\x45\x47\x0c\x4f\xea\x06\xb8\x5a\xa8\x3a\x0c\xf7\xbe\x86\xcd\x4b\x00\x14\x01\xd8\x0e\x1d\x80\x1c\x3a\x03\xea\xeb\x44\x85\xad\x89\xa4\x5f\xee\x1d\xda\x75\x52\xbb\x65\xa3\x28\xf5\x23\xfc\x9a\x78\x04\x99\xfb\xcf\x4b\xb1\xe7\x6c\x59\x2c\x50\x04\x60\x3b\x74\x00\x72\xe8\x52\x1d\xeb\xac\x6b\xf9\x2c\x27\xfa\x5b\xdd\x2f\xdc\x0c\xa3\x7f\x69\x51\xf4\x87\xef\xea\x88\x4d\x68\x71\xd8\xee\x7b\xaa\xc3\x83\x17\x50\x04\x60\x3b\x74\x00\x72\xe8\x72\x8f\x6b\xd3\x3d\xbc\xc2\x25\x66\x39\x9c\x5b\x7e\xc9\x61\xab\xba\xeb\x56\xd9\x6e\xee\x19\x5a\x49\x39\x7e\x9e\xf3\xb1\x66\x44\x3c\x28\x02\xb0\x1d\x3a\x00\x39\x74\xaf\xc7\xd3\x42\x3c\x87\x7f\xaf\x45\x57\xd0\x32\x3f\xf4\xb1\x39\xcd\xe3\x41\x9e\x6e\xc8\xf1\x6a\x63\xde\xa7\xf4\x7e\x71\x80\xaa\x2c\x8a\x00\x6c\x87\x0e\x40\x0e\x9d\x60\xb9\xf0\xe7\xf4\x50\x79\x2f\x1a\x5b\xbd\x39\xdd\x49\xa2\x29\x93\xe5\xe8\x6f\xe5\xad\x1e\xb1\xf3\x0b\xdc\xc3\x65\x7b\xfe\xa2\x28\x02\xb0\x1d\x3a\x00\x39\x74\x7f\xd3\xbf\x79\x05\x3c\x39\xec\xb6\x93\x37\x45\x4b\xe7\xfd\x65\xce\x88\x5a\x0b\xd9\x71\x0c\x79\xff\xda\x57\x5c\xbf\xdd\x61\xe4\x04\x8a\x00\x6c\x87\x0e\x40\x0e\x9d\xbc\xa9\xdd\x77\xa5\x78\x0e\xcd\x3b\x47\xf1\x15\x2a\x7c\x22\xaa\x25\xf5\x75\x67\x6b\xbb\x47\xd6\xc1\x4e\xe9\x9f\x80\x21\x59\x23\x14\x01\xd8\x0e\x1d\x80\x1c\x3a\x9e\x06\x3b\x97\xde\xe3\xd2\xda\x62\xdf\x2c\x3b\xb5\x9a\x1e\xca\x2d\xd5\x5b\x27\x04\x53\x2c\x49\x4b\x94\x1d\xa2\xd0\xe0\x98\x3a\x85\x22\x00\xdb\xa1\x03\x90\x43\xd7\x2d\xc2\x94\xdb\xb4\x73\x69\x6b\x45\xf4\x9e\x82\xf4\x0c\x45\xbb\xa8\x8f\x50\x22\xdd\xca\xd5\x3d\x03\xdc\xf7\x7a\x5f\x96\x94\xab\x28\x02\xb0\x1d\x3a\x00\x39\x74\xe1\x73\xbd\xd2\x66\x82\x41\x0f\x1f\xee\x5a\x49\x29\xe0\xe3\x92\x4f\x57\x5d\x0c\x7c\x1f\xad\xa1\xc3\x95\xd3\x1a\x94\x53\x44\x6a\x8f\x22\x00\xdb\xa1\x03\x90\x43\x47\x63\x55\xc1\xff\xb1\x4b\x84\x78\xf8\x58\xba\x06\xee\x75\xab\x22\x5d\xc5\x7d\xe9\xdb\x46\xda\xdc\xba\x95\x1d\x6e\xb3\x57\x1e\x9c\x43\x11\x80\xed\xd0\x01\xc8\xa1\xeb\x7a\xa6\xa7\x9f\xeb\x51\x66\x3b\xc2\x26\x9c\xc2\xd2\x67\x78\xc9\x47\xcb\x36\x8b\x9c\x72\x45\xe7\xb8\xfe\x2d\xbc\xc0\xcf\xb3\x74\x28\x02\xb0\x1d\x3a\x00\x39\x74\xe7\x46\x1a\xd4\x96\x8a\x48\x3e\x71\xfe\x96\xce\xf9\x27\x62\xf8\x40\xdb\x62\x91\xbb\x7d\x68\xec\xf4\xb3\x0f\x86\xc5\x44\x9d\xea\x84\xa9\x81\xed\xd0\x01\xc8\xa1\xe3\xba\x29\xbd\xb7\xa7\xae\xde\xfd\x3b\xd2\xd0\x78\xa3\xef\x62\xc7\xfd\x16\xe4\xdc\x17\x96\x18\xbc\xf2\x40\xbf\x66\x29\xfd\x2f\xc2\xa1\xc5\x76\xe8\x00\xe4\xd0\x5d\x4c\x7e\x39\xd2\x1b\x52\xad\x4e\x47\x15\x50\xcb\xfd\x5b\x7f\x59\x99\x73\xfb\x8b\x9f\x35\x91\x09\xc9\x9d\x87\x32\x7b\x44\x79\x8a\x28\x02\xb0\x1d\x3a\x00\x39\x74\x1c\x0e\x17\x9a\xaf\x9f\x7c\xb4\x7d\xb9\xb8\x9f\xf1\xbd\x59\xe3\xc7\x45\x66\x73\x06\x8a\xc8\x5f\x3e\x2b\x02\xad\x9d\x6c\x7a\xcf\x6e\xa2\x08\xc0\x76\xe8\x00\xe4\xd0\x4d\xd8\xfc\x1c\x3b\xfd\xc0\x2c\x3a\x9c\x4d\xe7\xd5\xc7\xf7\xad\x1c\x23\x6c\x1f\xd4\xb6\xda\x98\x4e\x93\xac\x92\x4c\x7d\x76\x2b\xa6\x46\x11\x80\xed\xd0\x01\xc8\xa1\xf3\x3e\x9c\xe9\x17\x17\x19\xa5\x27\xe1\xf0\xe9\xb9\xe2\x4c\xeb\xdb\xd5\xe7\x8c\xdc\xcc\x3c\x1b\x7e\x52\x96\x1f\x98\xfd\xac\x2f\x9c\x45\x11\x80\xed\xd0\x01\xc8\xa1\xfb\x45\xf3\xe6\x72\x43\x23\x95\x9f\xa9\x9c\x5b\xdc\x83\x47\x0d\xf4\xfd\x0d\x3f\x0a\x3e\x24\x6a\x4d\xd0\xc5\x3d\x8b\x79\x74\xa3\xf3\x30\x8a\x00\x6c\x87\x0e\x40\x0e\x5d\x4c\x62\xf7\x8d\x91\x25\x4d\x97\xc0\xab\x0a\x4a\x0c\x41\xc3\x43\xde\x60\x59\xf1\x97\x2b\x03\x47\x60\xdb\x95\xd0\x17\x47\xef\x69\xa2\x08\xc0\x76\xe8\x00\xe4\xd0\x09\xf0\x36\x2b\x4d\x4e\x38\x99\x17\x8b\x0f\xe1\x0d\x27\xe8\xfe\x4c\x15\xad\x0f\xb5\x09\x26\x70\x0d\x8f\x65\xe4\xed\x8d\xe8\x72\xa3\x08\xc0\x76\xe8\x00\xe4\xd0\x95\x36\x53\x5e\x61\xaf\x6a\x58\x2b\xcd\xb8\xec\xcc\x56\x3f\x74\x9b\x96\x6a\xef\x23\xc5\xdd\xee\x84\xc4\x90\xc6\x13\x21\x81\x6f\x8e\xa1\x08\xc0\x76\xe8\x00\xe4\xd0\x89\xb1\x95\xfe\x7a\x7f\x32\xc0\x18\xa1\x35\xed\x62\x7d\xdc\x55\x5d\x21\x8d\x7b\x29\x22\x53\xa0\x67\xc4\xc6\x47\x06\xc6\x2a\x10\x14\x01\xd8\x0e\x1d\x80\x1c\xba\x88\xd5\x68\xf3\xdb\x4d\xb8\xc9\x92\x94\x97\x44\xc4\x95\x55\x5f\x07\xb9\x9e\xfd\xdc\x91\xb6\xa0\x39\x61\x59\xf6\xf4\xed\xa4\xca\x75\x14\x01\xd8\x0e\x1d\x80\x1c\xba\xfb\x2d\x32\xd1\x95\x3d\x21\x7c\x45\x6b\xb1\x9f\xed\x0b\x63\xdf\x27\xdc\x11\xdd\x39\x74\xfa\xee\x6a\x61\x68\xd7\x1a\x77\xdc\x73\xc2\xd8\xc6\x76\xe8\x00\xe4\xd0\x51\x45\x6a\x91\x74\x04\x7d\x88\x7f\x1f\xd9\x57\x2e\x63\xf5\xa0\x94\xc5\x73\xb0\x51\x78\x82\xd1\x26\xbc\xf1\xef\x6c\xf2\xf1\x43\xa7\x51\x04\x60\x3b\x74\x00\x72\xe8\xee\x2c\xe7\xbd\x3a\xb2\xce\x9f\x43\x67\x2f\xf2\x7b\x56\xb4\x96\x36\xe9\x77\x98\x85\x8d\x4e\xe4\x84\x74\xee\x35\x61\xd9\x27\x94\xaa\x28\x02\xb0\x1d\x3a\x00\x39\x74\x56\xc4\xd4\x49\xeb\x87\x23\xee\x6f\x44\x6a\xc8\xdd\xc8\x33\x6c\xcc\xff\xac\x9e\x35\xf8\xd7\x99\xcc\xe3\x0f\xe7\x1b\x73\x29\xe4\x38\x8a\x00\x6c\x87\x0e\x40\x0e\x9d\xff\xc9\x5a\x81\xa2\x99\x43\x35\x17\x4c\x4a\x6a\x74\x45\x1f\xb3\x93\xa9\xe8\xfd\xae\xfb\xe2\x19\x9b\xb4\xdb\x2d\x16\x72\xe2\x34\x0b\x8a\x00\x6c\x87\x0e\x40\x0e\xdd\xa3\xf9\x29\x19\xd2\xde\x8f\x96\xa4\x67\x43\xe4\x7b\x4d\x89\x29\xbd\x06\x8a\x39\x96\xf5\x17\x7b\xc4\x64\x1b\xef\xcc\xe6\x4d\x29\xa1\x08\xf8\x2f\x87\xee\xbf\x64\xe7\x83\x85\x0e\x72\xe8\x5e\x39\x27\x53\xd4\x0b\x39\x6e\xf7\xbd\x99\xc6\x2f\x31\xf6\x04\xfe\x54\x27\x0a\x66\xfc\x7d\xd7\xf1\xd6\x5c\x4e\x94\x05\xf1\x05\x06\x14\x01\xd8\x0e\x1d\x80\x1c\xba\xdb\xfe\xc0\x34\xa7\xb7\xab\x8e\x39\x6e\xe3\x4b\xd1\x4a\xb9\x44\xc8\xde\x6a\xd0\xd7\x8a\xdd\x7f\xa7\x05\xae\x8e\x36\x48\x75\x18\xa3\x08\xc0\x76\xe8\x00\xe4\xd0\x3d\x62\x43\xfa\x5d\x3c\xc7\xf2\x24\x5e\x71\x3d\x09\xbe\x43\x66\x1d\xfa\xd5\xbf\xcb\xad\xed\x88\x6a\x45\xb5\x74\x76\x82\x94\xbc\x1c\x8a\x00\x6c\x87\x0e\x40\x0e\x9d\x56\x01\x7b\xce\xe5\x7c\x17\x1b\x83\x78\xb7\x90\x6a\x9a\x2f\x2b\xae\x27\x77\xbb\xce\x5b\xb9\x2d\x9d\xd7\x94\xf5\x2e\x48\x32\x56\x47\x11\x80\xed\xd0\x01\xc8\xa1\xd3\xf2\x72\xcf\x32\xb6\xf8\xf2\xea\xee\x51\xef\xd9\x91\xd0\x50\xd2\x99\x9e\xce\x9c\x37\x1c\x7d\x92\x75\xdc\x63\x2f\x3b\x16\x4f\x11\xe6\x3c\xb6\x43\x07\x20\x87\xae\xee\xa9\x46\xbb\xf2\x0f\x27\x35\x41\x87\x54\xfc\x5a\x24\x11\x99\xa4\xaa\x45\xef\x95\x59\x4d\xed\x1b\x31\xd5\x29\x06\xa9\x21\x66\x28\x02\xb0\x1d\x3a\x00\x39\x74\x15\xb7\x3a\x1b\xbb\x52\x03\x3e\x9f\x12\xad\x8b\x0c\x38\xad\x2d\xc5\x74\x78\x2e\xc7\x69\x22\x79\xe3\x12\x57\xdd\xc6\xe0\xf8\x2e\x2b\x8a\x00\x6c\x87\x0e\x40\x0e\xdd\xdc\x91\xbe\x9a\x6e\xfd\x45\x83\x45\x05\x29\x83\x27\x77\xa3\xce\x56\x04\x16\x51\x70\x37\xc5\x9d\x7f\xed\x99\x30\xa9\x96\xb9\x4a\xf8\xcc\xb0\x1d\x3a\x00\x39\x74\x0e\xc9\x1b\x75\x6d\xc6\xaf\x8e\x16\xbe\xbe\x27\x78\xb1\xdc\x36\xfc\x21\xdb\xab\x3d\xed\xa9\xa5\xe4\xdb\x4f\x7f\x81\xcf\x4f\x73\x09\x1d\x0c\xdb\xa1\x03\x90\x43\x97\xf0\x8a\x92\xe8\xbb\xb9\x5c\x6c\x0a\xc3\x64\xb8\xdd\x9f\x8b\xa2\xab\x1c\xe7\xad\x29\x03\x9e\xa6\x7f\x53\x26\x4e\x1b\xd3\x7e\x74\x12\x45\x00\xb6\x43\x07\x20\x87\xae\xe7\x7c\xad\x8e\x60\xcc\x9c\xda\x76\xb5\xdd\x27\x01\xae\xab\xd7\xe5\xe8\x52\x3d\xf3\xbd\x03\xf6\x62\x0f\x5f\x7d\x5d\x4c\x82\x63\x43\x11\x80\xed\xd0\x01\xc8\xa1\x73\xeb\xa6\xa1\x5f\xa9\x26\xe3\x8b\xa5\xd1\xf9\xda\xb0\xee\x9e\x38\x5d\xec\x46\x6a\x6f\x20\x95\xde\x07\xa6\x3f\x9d\x90\x62\x21\xbc\x4d\x6c\x87\x0e\x40\x0e\xdd\x4c\x2f\x5f\x1b\xb5\xed\x03\x81\x2b\xcb\xca\xe4\xd5\x77\xcc\x17\x56\xa3\x2a\xf2\x88\x77\xb2\xaa\xa8\x39\xab\x0d\xb8\x5c\xba\x8f\xa2\x08\xc0\x76\xe8\x00\xe4\xd0\x1d\xd9\x62\xb3\x6c\x6c\x89\x3b\x9e\x6d\xec\xd7\xb1\xe4\xc7\xe4\xf8\x48\xe6\x6b\x30\x43\x54\xb0\x5d\xe9\x6f\x32\x3b\xa2\x5b\x9b\x84\x31\x83\xed\xd0\x01\xc8\xa1\xf3\x66\x7b\x4f\xcd\x75\x87\xf5\x2a\x1b\x59\x93\xc3\x6e\x53\xe7\x3c\xe3\x5e\x67\x56\x3b\xa3\x7d\xdd\xfb\xbe\xa7\x61\x71\xb4\x79\x84\xcd\x0d\xdb\xa1\x03\x90\x43\xf7\x2f\xb1\x78\xce\xb5\xe8\x07\x47\x30\xd3\x8e\x37\x07\x6b\x8b\x5d\x45\x81\x4d\xd6\xcf\xd6\xca\xbd\x94\x8f\xc0\x66\xb3\xfe\x24\x2f\x8a\x00\x6c\x87\x0e\x40\x0e\xdd\x74\xfd\x26\x43\xb5\xaa\x74\x8b\x0a\xed\x1b\x55\xd6\x63\x89\xfc\x05\x7f\x45\x2a\x99\xbe\xdc\xb1\x58\xba\xee\x6d\xfa\xb9\xa7\xe7\x0e\x8a\x00\x6c\x87\x0e\x40\x0e\x9d\x76\xd5\x8b\x02\xe9\xd2\xac\x17\x2f\x3d\x3f\xa4\x6d\xbc\x96\xd6\x8d\x4e\x6e\xa7\x57\x2c\xd0\x17\x24\xb6\x67\xfb\x49\x16\x98\x6a\x8e\x22\x00\xdb\xa1\x03\x90\x43\xe7\x7d\x8b\xee\x95\xc7\xc9\x00\x5d\x9c\x6d\xdb\xbb\x5a\x76\xca\x7a\x0d\xaf\x0c\xd2\x87\xdf\x92\x96\xbe\x77\x55\xe7\x0b\xee\x7c\xa5\x42\x11\x80\xed\xd0\x01\xc8\xa1\x23\x53\xd8\x79\x28\xb0\x63\x94\xd5\xfb\xa9\x4e\xf5\x70\xb0\x13\x72\x62\xb0\xc0\xcf\x83\xd4\x8e\xc4\xe2\xd2\x5e\x05\xf3\xcf\x19\xc2\xdd\x88\xed\xd0\x01\xc8\xa1\x2b\xec\xb2\x8d\xeb\x63\x70\x56\x4d\x8f\x3c\xf9\x6f\xcc\x22\xff\x82\xcd\xa2\xd4\x9d\xab\x0c\x92\xe5\xa6\x4f\x53\x7f\x3e\x78\x2e\xa1\x80\x22\x00\xdb\xa1\x03\x90\x43\x77\xa4\xc2\x59\x45\xc9\xb5\xef\x4f\xd7\xad\xe0\x4c\x61\xdf\xbf\x29\x76\x79\x1e\xa9\x53\xca\xe5\x87\x53\x75\xd6\x16\xf6\x98\x29\x08\xed\x10\xdb\xa1\x03\x90\x43\xc7\xc0\xff\xd2\x80\x2d\x7b\xa1\xf5\x84\x63\x5d\x25\xe5\x4f\xc9\x44\x2d\xad\xa1\xad\x47\x4a\x17\xd2\x8b\xaf\x5a\x29\x1d\x17\x99\x27\x34\x1d\x6c\x87\x0e\x40\x0e\x1d\xfa\x57\xde\xfe\x78\x17\xcf\x03\xea\xfd\xbe\x95\xa3\x53\x37\x83\x2e\xe2\x74\xba\xfa\x3a\xc5\xad\x2a\x36\x16\x7a\xa9\xfe\x2c\x5e\x46\x11\x80\xed\xd0\x01\xc8\xa1\x7b\x9a\x77\x62\x70\xcf\x64\x0d\x71\x3c\x9d\x5c\x70\x7c\x68\xcd\x4a\x3c\xdd\xb7\x4f\x62\x76\x48\xa4\x44\x9e\xf9\x67\xff\xa8\x34\xa1\x1d\x62\x3b\x74\x00\x72\xe8\x96\xf8\xfb\xee\xe8\xb1\xe7\x92\x7a\x66\x77\xf1\x06\x12\xab\xd2\x3c\x25\x5b\xb3\x1f\x21\x8d\x0a\xe5\x52\x0f\xa9\x92\xf7\xf1\x25\xdc\x9b\xd8\x0e\x1d\x80\x1c\x3a\xda\xea\x45\x56\xa3\x13\xcd\xef\xa8\xf9\x35\xd8\x98\xef\xaa\xa7\xfb\x22\xb6\xd7\x17\xd9\xab\x25\x70\x56\x6a\xef\x6e\x27\xbd\xe1\x44\x11\x80\xed\xd0\x01\xc8\xa1\x6b\x5e\x91\x7e\x17\xe2\xa8\x67\xf1\x85\x49\xfa\x0b\x57\xa3\x7f\xe5\x79\x66\x4a\xc6\x2c\xae\x57\xc3\xef\xe6\x40\x5b\x49\xe9\x57\x7d\x14\x01\xd8\x0e\x1d\x80\x1c\xba\x62\xdd\xf4\xd6\xaa\xab\x01\x69\x0d\x71\x27\xce\xac\x32\xda\x4d\xa9\x72\x8b\x3d\x0d\x79\xa9\xe0\x4f\xb4\x4b\xbe\xa5\x92\x0c\xa4\x51\x04\x60\x3b\x74\x00\x72\xe8\x9e\x1e\xf3\xbf\xf9\xad\xb6\x5e\xcd\xcb\xf4\xdf\xcb\xfe\x5a\x1d\xd6\x54\xc1\x05\xd7\xf5\x13\x8e\xd4\x8c\xee\x27\xac\x42\xaa\xaa\xae\xa1\x08\xc0\x76\xe8\x00\xe4\xd0\x99\x95\x71\x58\xcb\xcf\x0e\x3d\xe4\x3c\xfe\xf2\x3e\x3f\xaa\x3b\xef\x96\xb8\xdb\x1f\x30\x5a\x1c\xa6\xaf\x9a\x6b\xd6\xd4\x2c\x42\xf8\x02\xb0\x1d\x3a\x00\x39\x74\x06\x59\xda\x8b\x09\xf7\xb6\x53\x2b\xbd\xbf\x7d\x3d\xc5\x86\xef\x09\x3b\x5e\x18\x7b\xb6\xe9\xfd\xe7\x3f\xed\x21\x1a\xf4\xa1\xbe\x94\x28\x02\xfe\xcb\xa1\xfb\xaf\xdf\xdf\x38\x58\xe8\x20\x87\x6e\xa1\x9c\x77\x48\xe3\xf6\x48\x9d\xfb\x07\xbc\xf5\xfd\x33\xf9\x7f\xd9\x5b\x82\xda\x8b\xdf\xd9\x2d\x32\xf4\xe5\x7a\xa8\x44\x3d\xd1\x46\x11\x80\xed\xd0\x01\xc8\xa1\xb3\xf4\xa0\xf6\x5f\xc7\xeb\x7d\xb4\x6a\x7b\x44\x23\xa2\x27\xce\xb4\xf9\xb3\x65\xfe\x74\x09\x6e\x92\x75\x3a\x65\x83\x3e\xbf\x47\x03\x45\x00\xb6\x43\x07\x20\x87\xce\x54\x23\xad\x92\xe3\x56\x63\x08\x67\x5e\x1e\xef\x27\xdb\xf7\xaa\xec\x44\x14\xce\x2d\xa7\x76\x5f\xf3\x7a\xd7\xbe\x57\x9c\x1e\x92\x42\x11\x80\xed\xd0\x01\xc8\xa1\xf3\xda\x9f\x4c\x18\x7b\x19\x11\x93\xd8\x45\xcc\x71\xfa\x5b\x59\x41\xc5\xdb\x55\xdf\x37\xd1\x62\xfa\x1f\x88\x86\xe6\x1b\xcf\x74\x11\xe6\x3c\xb6\x43\x07\x20\x87\x6e\xfd\xa6\xab\xa8\xc4\xe1\x87\xfe\xbe\x44\xa5\xb2\x38\xab\xb3\x52\xda\x2e\xbf\xfd\x57\x2f\xe4\xad\xdf\x7a\x2e\x35\x69\x52\x58\x24\x84\x22\x00\xdb\xa1\x03\x90\x43\x47\x2b\xa6\xb3\x9b\x28\xe0\xfb\xe6\xcc\xfb\x93\x62\xc4\x16\xbf\xac\x7b\x85\xa3\x88\xdb\x96\xb6\xe4\xeb\x06\xe5\x1f\x73\x85\x8c\x1f\x41\x11\x80\xed\xd0\x01\xc8\xa1\x73\xb1\xfd\xe5\x9e\x2c\x9c\x4a\x64\xf3\xc5\xdb\x61\xd9\x34\xc3\x28\x83\x62\x6e\x79\xb4\x26\x66\x75\x99\x52\x56\xab\x83\x24\xd5\x02\x45\x00\xb6\x43\x07\x20\x87\xae\x8b\xfc\x0c\x98\x9c\xaa\x11\x2a\x65\xcc\x59\x6c\x31\xa8\x23\x9a\xe9\x7c\x37\xfd\x16\x17\x30\xb7\x29\x75\xe3\xd5\x5c\xd3\x00\x0f\x8a\x00\x6c\x87\x0e\x40\x0e\x1d\x49\x1b\x43\xa1\x3f\xad\x81\x40\xa2\xba\x49\x54\x84\x73\xd4\x8e\x9b\x38\x63\xdb\xcd\x55\xa6\x8c\x7b\xce\x57\xfa\xf4\x71\x3c\x77\x51\x04\x60\x3b\x74\x00\x72\xe8\xca\x59\xc3\xd7\xeb\xd5\xdb\x68\xde\xd5\x3c\x4f\x33\x18\x74\x36\xb1\x72\x26\xde\xfc\xf5\xf1\xf2\x44\xd6\xf9\x18\x51\xab\x53\x8c\x84\x46\x8d\xed\xd0\x01\xc8\xa1\x23\x6a\x24\x92\x5d\x10\xb4\x15\xcf\x54\x3f\xf2\x79\x7f\xf9\xf1\x95\x67\x77\xb7\x3c\xb2\x0b\x36\xf7\xc9\x72\x68\x5a\x1b\x26\x15\x65\x50\x04\x60\x3b\x74\x00\x72\xe8\xa2\x76\x2d\xcf\xfa\x5e\xa9\x66\xba\xe4\x4f\xdd\x6e\x35\xf0\x35\x73\x0c\x34\x6b\xab\x20\x43\x3b\x37\x0b\xff\xb9\xe5\xaf\x70\x13\x66\x16\xb6\x43\x07\x20\x87\xae\xf0\xeb\xa0\x59\x23\xfe\x79\xc0\xf8\x51\x72\xf6\x7a\xad\x3d\xd1\x63\xe0\x6c\x81\x8b\x64\x44\xfc\xf7\x28\xb7\x5e\x0a\x65\x2f\xc2\x68\xc6\x76\xe8\x00\xe4\xd0\x55\xf0\x54\x70\x2c\x37\x85\x39\xdc\x5e\x61\xa3\xdb\xbd\x68\xe0\x93\x2a\xbb\xdb\xdb\xd3\x14\xaf\xde\x66\xb2\xe3\xdb\xbe\xc1\xec\x88\x22\x00\xdb\xa1\x03\x90\x43\x57\x30\x12\x3d\xa5\x3b\x71\xe3\x46\xe1\xb9\xfd\x4d\xd2\x28\xab\xd6\xcc\xc5\xbf\x46\xa6\xe7\xf6\xd9\x5e\x24\x51\xa7\x51\x54\xc8\xd9\xa3\x08\xc0\x76\xe8\x00\xe4\xd0\x7d\x32\x4a\xba\x91\xf3\xa9\xd4\x2f\xe3\x4a\x25\xb1\x5f\xad\x40\x95\x0d\x71\xd8\x4a\x7b\x7b\xe1\xc0\x33\x4a\xd4\x2d\x5e\x75\x93\xd0\x0e\xb1\x1d\x3a\x00\x39\x74\x7c\x01\x1f\xb6\xd3\x8d\xed\x0d\x3a\x99\x64\x2e\xe0\x5a\xdf\x5d\x9c\x6d\x79\xfe\x66\xc3\x52\x8f\xd1\x34\x79\x36\x31\xd0\x9a\x88\x30\x4d\xb1\x1d\x3a\x00\x39\x74\x4e\x9e\x13\x71\xad\x17\x7c\x99\xb2\xde\x68\xaf\x7c\xe1\xb7\x95\x9a\x67\x57\x9a\x5e\x90\x4a\x98\xca\x49\x9a\x8d\xe7\x18\x3b\x47\xf8\x02\xb0\x1d\x3a\x00\x39\x74\x4f\x07\xd2\xe8\xad\x6b\xcc\xa9\xd4\x88\xf9\xce\x4f\x1f\x1d\xa2\x92\x92\x7d\x5f\x56\x73\xdf\xfc\x56\x13\x69\x5e\xd8\xe7\x92\xc4\x5b\x28\x02\xb0\x1d\x3a\x00\x39\x74\x3f\x79\x7e\x3f\x98\x8f\x19\xdd\x77\x7b\xf0\x58\xb0\xeb\xc9\xef\xba\x43\x89\xd9\xb4\x93\x97\xda\x36\x36\xf9\x15\x82\xfc\x26\xaf\x13\xb6\x10\x6c\x87\x0e\x40\x0e\xdd\x6d\xb2\x5d\x72\x8b\xae\x6a\xfe\xd5\x7d\xce\x7b\xfc\x32\x12\x27\x76\xf8\xe2\xb8\xf5\xfd\x03\x29\x15\x32\x41\xb1\x5a\x1b\xf3\x15\x14\x01\xd8\x0e\x1d\x80\x1c\x3a\xb7\x25\x23\x51\xa3\xad\xb0\xf3\x8d\x0f\xef\x77\xe5\x97\x57\x0e\xec\x1f\x9a\x34\xd3\xa4\xf7\xf9\xdc\xdd\x5d\x3b\x79\xfa\x75\xbe\x1a\x8a\x00\x6c\x87\x0e\xc0\x0e\x5d\x6b\x3a\x35\x73\xab\xf5\x06\xbd\xfc\x2c\x57\x41\xde\xe3\xd1\x2b\xad\xa7\x27\xfe\x58\xfd\x4a\xff\x7d\x2a\xc8\xfa\xbc\xb3\x9f\x1e\x8a\x00\x6c\x87\x0e\x40\x0e\x1d\x09\x9d\xce\x89\x06\x0e\xb6\x0a\x8f\x7d\x91\x89\x9b\x5e\xd5\x9c\xf7\x42\x67\xd2\x1e\x3c\xe6\xa7\xd0\xdc\x55\xe8\xf1\xe0\x92\x39\x8d\x22\x00\xdb\xa1\x03\x90\x43\x77\x29\x88\x9f\x3e\xd3\xb1\x7a\xde\x8b\xfe\xdb\xd7\xb5\xc7\x1e\x74\x11\x94\xc1\x64\x78\x23\x2e\xdd\xcf\x8d\x40\x77\xfe\x1f\x95\x38\x8a\x00\x6c\x87\x0e\x40\x0e\x9d\xe4\x82\xdc\x5f\x79\x85\xbd\xd2\x7b\x0b\xde\x46\x53\xb7\x58\xc6\xfb\xd4\xca\x5f\x84\xa8\xbd\xa3\x3e\xd6\xc8\x59\x2d\x9e\x72\x9b\x02\x45\x00\xb6\x43\x07\x20\x87\xce\xa3\x3c\x31\x21\xda\x34\xb0\xd2\x77\x22\x76\x67\x68\x2f\x95\xeb\x62\x2f\xe9\xea\xf5\x7c\x12\xf6\xdf\xdb\x3e\x85\xe9\x8c\xf9\x86\x28\x02\xb0\x1d\x3a\x00\x39\x74\xd7\xca\x2f\x08\xa5\x59\xa9\xc9\x7e\x50\x9d\x1c\xd3\x64\x50\x34\x7f\x9c\xd3\x88\x7c\xa3\x5e\x6d\x33\xe2\xd3\x3d\x14\x38\x59\xa9\x83\x22\x00\xdb\xa1\x03\x90\x43\x77\x84\x56\xf1\x76\x80\xa4\xf0\xa5\x10\x63\xad\xcf\xdb\xfe\xb3\x4a\xc9\x2e\xe5\xc7\x98\xcc\x9a\xb8\xf9\x2d\xff\x75\xf3\xf4\xad\x5c\x44\x11\x80\xed\xd0\x01\xc8\xa1\x7b\x3f\xa3\x56\xc1\x6f\x5d\xd0\x4a\xad\xf3\x19\x51\xcb\x49\x40\x13\xde\x6d\x20\xe5\x38\xbd\xb5\xe8\xc7\x0d\x2f\x0b\xeb\xb5\x74\x51\x04\x60\x3b\x74\x00\x72\xe8\x68\xe4\x9f\xc5\x17\xad\xbf\xae\xba\x68\xa9\xb2\x6c\x30\x46\x6d\x73\xbe\x28\xc5\xef\xf4\x49\x36\x7a\x83\xea\x0e\xd1\x17\xeb\x64\xf7\x50\x04\x60\x3b\x74\x00\x72\xe8\xca\x8f\x45\x2e\x0d\x1f\xa5\xce\x7b\xde\x3a\xff\xa2\xbb\x36\xd1\xac\x92\xc8\x85\xd7\x5f\xcd\x92\x35\xf7\x85\xdc\xca\x63\x8b\x61\xc2\xd4\xf8\x2f\x87\xee\xbf\x7e\x25\xed\x60\xa1\x83\x1c\x3a\x5f\x67\xbf\xea\x3b\x21\x9a\xbc\x3b\xbf\xaf\xd1\xa4\xe5\xb1\x1a\x9f\xba\x75\x28\x51\xd9\xee\xa1\x26\x7b\xab\xfa\x69\xc5\x6b\xef\x8d\x50\x04\x60\x3b\x74\x00\x72\xe8\xa4\x4b\xda\x75\x2d\x49\xae\xf2\x78\x96\x7b\xcd\x71\x55\x5e\x96\x5b\xe1\x56\x8f\xb3\x6b\x56\x4e\x3a\xae\x3d\xc2\x99\xb3\xa4\x26\x8c\x22\x00\xdb\xa1\x03\x90\x43\x27\xe4\x57\x96\x62\xba\x7e\x23\xfe\xce\xde\xad\x9b\xc2\xdf\x5b\xf3\xaa\x8d\x27\x85\xe2\xa3\x8d\xaf\xc7\xb5\x47\x09\xff\xfb\x3b\x4e\x68\xcd\xd8\x0e\x1d\x80\x1c\xba\xd0\xda\xf6\xc5\x3c\x0a\xf7\xbb\x64\xad\xf4\x69\x94\xbe\xc7\x22\x66\x69\xa3\xae\x9a\xa5\x8a\xe9\x7d\x91\x1a\xd1\x06\x45\xf6\x47\x51\x04\x60\x3b\x74\x00\x72\xe8\xbe\x97\x0a\xbc\xb1\xd1\x4c\x69\x53\xa7\x66\x57\xdf\x4b\xe7\xea\xb3\xe7\x3f\x6a\x22\xd4\xe5\x94\x8e\x7f\x3c\xf5\xa8\xa4\x62\x59\x19\x45\x00\xb6\x43\x07\x20\x87\x8e\x32\xcb\x42\xb8\x9f\x23\x5b\xef\xb8\xa9\x74\x1b\x6e\xce\x7c\x83\xed\xf5\xf7\xf4\xc1\x93\xd4\x2d\xef\xbc\xde\x5a\x04\x0c\xed\x1f\x47\x11\x80\xed\xd0\x01\xc8\xa1\xf3\xca\x71\xfc\x71\xd3\xd5\x48\x57\xa8\xe4\xdf\xbe\x61\xc8\x85\xe9\x4b\x05\x52\x69\x4a\x7f\x84\x42\x03\x2f\x96\xe4\x10\x27\xfa\x11\xd6\x63\x6c\x87\x0e\x40\x0e\x1d\xe7\xdd\x0a\xa4\x35\x66\x4b\xae\xf6\x6c\xeb\x7d\x4f\x22\x9d\x1f\x1e\x2d\x7e\x0b\xe8\x83\xcc\xef\xbd\x01\xbf\x9b\x05\xb4\xaf\xd3\xa3\x08\xc0\x76\xe8\x00\xe4\xd0\x69\x2e\x2d\x2e\x67\x2f\x5b\xac\xca\xaf\xfd\x3b\x8e\x3f\x9c\x76\x8a\x71\x4c\xff\xf1\xe3\x37\x71\x22\x5c\xda\xe3\x86\x7d\x7e\x74\x17\x50\x04\x60\x3b\x74\x00\x72\xe8\x70\x9b\x1f\x7e\x27\xbf\x78\x52\x1c\x14\xbc\x62\x45\x95\x2a\x47\xa6\x1a\xfa\xad\x99\xe2\x95\x91\xd6\x80\x51\x12\x51\x0c\xc3\x65\x42\x6d\xc2\x76\xe8\x00\xe4\xd0\x99\xbe\x57\x0d\x36\xfd\xd0\x73\xcf\xd3\xfd\x9f\x97\x8f\xbc\x3f\x5e\xfd\x4b\xf6\xaf\x78\xce\x71\x56\x77\xfe\xe8\x6c\xcb\xd5\xa0\x33\x28\x02\xb0\x1d\x3a\x00\x39\x74\xf1\x6b\x8a\xaf\x58\xe4\x82\xb2\x55\x5a\x3e\xf9\x14\xfd\x29\x19\x92\x93\x49\xdb\xa2\x30\x98\x7d\xb5\x97\xed\xa7\xb5\xd8\xb6\xeb\x80\x22\x00\xdb\xa1\x03\x90\x43\xe7\xcd\xe8\x25\x58\xe8\x5a\xf1\x7c\x9e\xcc\xc7\x2f\x95\x4c\xd2\x0a\x8c\x46\xa5\x05\x9a\x52\xbe\xa9\x7d\x41\xc3\x73\xa9\xe2\xb6\x39\x8a\x00\x6c\x87\x0e\x40\x0e\x9d\x4e\x48\x5d\x8f\xe9\xa8\x6e\x41\x8e\xad\x5f\xe7\x99\xfe\xd9\x85\x76\x56\xcf\x70\x49\x6b\x55\xdd\xb6\xc0\x0a\x09\xa5\x2e\x56\x6b\x14\x01\xd8\x0e\x1d\x80\x1c\xba\xa1\xfd\xad\x66\xcb\x10\xea\x69\xfb\x31\xd2\xef\xf4\x28\xc3\xc3\xdb\x11\xcf\x13\x07\x32\xac\x1f\xed\x91\x9b\xcb\x34\xc4\x55\x12\xa1\x08\xc0\x76\xe8\x00\xe4\xd0\x99\x9a\x4e\xcf\x45\xbd\x4f\x6c\x38\xac\xf0\x46\x78\x61\xb9\xd8\xf5\x99\xab\x48\xf1\xb0\x6f\x55\xb5\x6f\xe4\xe9\xf8\x90\x90\x1e\x42\x07\xc3\x76\xe8\x00\xe4\xd0\x09\x01\x5c\x9b\x7b\xc2\xbc\xfe\xd7\xf9\x21\x52\x7e\xf3\x07\x23\x12\x1f\xca\x2b\x06\x7d\xd5\xda\xc4\x6f\xa7\x0d\xd6\xe5\x48\x12\x1e\x27\x6c\x87\x0e\x40\x0e\x9d\x6b\xbb\x6a\x9a\x38\x17\x31\x63\x5a\xa5\xaa\x6e\xfb\x4d\xfc\x07\xaf\x6f\x14\x13\x5f\x00\xd7\x78\x4c\x55\x8f\x4e\x37\x90\xe7\x42\x11\x80\xed\xd0\x01\xc8\xa1\xe3\x1d\xba\x51\x17\xe5\x7b\x9f\xdc\xa6\x4a\x73\x86\x58\x85\x96\xfe\xed\x35\x7d\xaf\x68\xc3\x88\x62\x57\xa3\xbb\x44\xb6\xc4\x08\x61\x9e\x61\x3b\x74\x00\x72\xe8\x66\x8a\xee\x17\xea\x9a\xb4\x11\xe7\x8d\xc6\xdd\x57\x7d\x1e\xb4\xe8\x50\x92\xeb\x9a\x7b\x2b\xa1\x8b\x32\xf6\xa7\x71\xb4\x84\x08\x1e\x45\x00\xb6\x43\x07\x20\x87\xee\x4d\x9b\xb8\x71\x5b\xc3\xfd\x30\x1e\xa5\xab\xd3\x4b\x91\x05\x7f\xe6\x2c\x55\x45\xd2\x53\xce\x3e\x4c\xdd\xfd\x1a\x93\x56\x35\x4e\x28\x27\xd8\x0e\x1d\x80\x1c\x3a\x3b\xe3\xef\xc1\xda\xa6\x4f\x0e\x6f\x16\x51\x73\x7f\x17\x9f\x8f\xe6\x60\xbe\x77\xe8\x6b\x81\xf5\x96\xc7\xc7\xf4\x47\x82\x82\xa1\x84\x2f\x00\xdb\xa1\x03\x90\x43\x37\xa3\x1d\xab\x42\x91\xb5\x37\xb9\x7a\xa6\xd2\xf0\x89\x8c\x92\x19\xb0\xab\x79\x8c\x2a\xd0\x2b\xf7\xbb\x5b\x5e\x7f\x27\xff\x9a\x0a\x45\x00\xb6\x43\x07\x20\x87\xee\xb6\xb5\x61\x4d\x76\x4a\x58\x5b\xe7\x48\xf2\xee\x28\x63\x71\xa7\x56\xaa\xd7\x96\xb5\xbb\x9e\xcb\x28\xdd\x7e\xd4\xc3\x75\xeb\xdb\x28\x02\xb0\x1d\x3a\x00\x39\x74\x82\x1a\x57\x36\x4f\x49\x6c\x11\xc7\x85\x38\x71\x51\xbe\x7a\xe3\xe8\xce\xdb\x24\x50\x16\x2f\xc4\x7c\xe3\x9c\xc3\x50\xe0\xbf\x11\x42\x6f\xc5\x76\xe8\x00\xe4\xd0\x25\xd8\xc7\x36\xe4\x80\xd5\x75\x1f\x9e\xc2\x0f\x7d\x17\xf5\xee\x98\xd3\xbb\xea\xa8\x74\x18\xdf\xf8\x14\x3a\x10\x8b\x24\x59\x12\x7a\x2b\xb6\x43\x07\x20\x87\xce\x99\xda\xea\x71\xfc\xa4\xd1\x4d\x8b\xe8\xe1\x16\xbb\x23\x57\xd5\xcb\x0b\x39\xbf\x4d\x06\xff\xd4\x5d\xce\xcd\xf8\xe9\x7c\x52\x97\x70\xa3\x63\x3b\x74\x00\x72\xe8\x36\xf7\x5e\x8d\x5e\xd3\xcc\x72\x51\xfa\xa5\x26\x7a\x23\x3b\xa1\xe7\x87\x06\x33\x72\xbe\x43\x2b\xe8\xd9\xe5\xf1\x84\x32\x8a\x73\x96\x28\x02\xb0\x1d\x3a\x00\x39\x74\x44\x46\x38\xba\x16\x86\x35\xc7\x99\xbf\xe8\xb8\xb2\xb7\xcf\xb9\x0e\xcf\x17\x3d\x0c\x15\xc7\x4f\xfa\x23\xf1\x0d\x26\x48\x0b\x23\x8a\x00\x6c\x87\x0e\x40\x0e\xdd\xa2\x85\xf2\x9f\xc3\xe9\xdf\x57\xf3\x15\xf6\x84\x77\xbb\xe3\x22\x6f\x5f\x15\x09\xeb\x0d\xf9\x15\xaa\xb4\xcf\x2a\xcb\x9a\xd5\x4f\x68\x87\xd8\x0e\x1d\x80\x1c\x3a\x53\x4a\x0a\xa9\xb0\xb2\x80\x4b\x09\x4f\x4e\xb7\xf5\x5b\xa9\x3b\xcd\x89\x55\x99\x6b\x29\xb9\x96\xd8\x5d\xa5\x7b\xde\xae\xca\x73\x0d\x45\x00\xb6\x43\x07\x20\x87\x2e\xed\xc7\x4c\xfb\x93\xf1\xfe\xc5\x4a\xda\x4c\x13\x51\xba\x5d\x76\x5d\x24\x3c\xbd\xdf\x59\xa2\xc2\x21\xd0\xe0\x47\xd8\xbb\x53\xfa\x28\x02\xfe\xcb\xa1\xfb\xaf\xdf\xb2\x3d\x58\xe8\x20\x87\x6e\x8c\x54\x71\x63\x6f\xaa\xfd\x03\x5a\xde\xc0\x3b\x5a\x54\x14\x5a\xe6\xa6\x7b\xc7\x6a\xf0\x6b\xea\xd8\xa8\x85\xea\x23\xd4\x89\x30\x9a\xb1\x1d\x3a\x00\x39\x74\x09\x0a\x44\xff\xbc\xdf\x11\xdf\x93\x2b\xb6\x20\xdd\x91\x5e\x51\xf9\x6e\x2c\x2a\xcb\xf2\x53\xff\x42\x68\x70\x64\x79\x07\xfd\x16\x33\x8a\x00\x6c\x87\x0e\x40\x0e\x9d\x6d\xef\xa1\xf4\x62\x62\x7a\xf2\xe9\xf2\x28\xf5\x29\x7f\xdd\x5d\x71\x95\x6f\x1d\xcb\x44\xa6\x1c\xef\xdb\x34\x5d\x38\xef\xd1\x9d\x40\x11\x80\xed\xd0\x01\xc8\xa1\xfb\x67\x40\x23\x7b\x75\x82\xd6\x78\x69\xa8\xda\x89\xbb\x7c\x94\x89\x55\x3e\xb7\x9a\xc2\xf3\x8f\xc7\x6c\x3d\xdb\x32\x4f\x90\x26\xa1\x82\x63\x3b\x74\x00\x72\xe8\x0a\xba\x93\x72\xfd\x52\x43\x9d\x2e\x24\x1f\xa3\x4a\xc5\x69\x0a\xbd\x52\x0b\xe0\x36\xf0\xdc\x90\xd5\x22\x71\xca\x60\x12\x2e\x21\xfc\x31\x6c\x87\x0e\x40\x0e\xdd\xdc\xd3\x54\xd3\x45\x19\x43\x55\x23\x2b\xc9\x43\xc7\x62\x5a\x79\x3d\x55\x18\x6b\xce\x99\xa7\xf5\xb3\xec\xc6\x49\xbe\xb8\x7a\x41\x00\x45\x00\xb6\x43\x07\x20\x87\x4e\x8b\x8f\xbb\xd6\x95\xef\x9c\x5b\xcf\x82\xba\x8c\x63\x73\x48\x36\xe9\x1b\xf7\x0f\x9b\x4c\x5e\x13\x46\xaa\x2f\x4a\x3b\xf8\xec\x54\x51\x04\x60\x3b\x74\x00\x72\xe8\x0c\x25\x19\x35\x68\xaa\xac\x9c\x27\xda\xe8\x12\x04\x2d\x49\xab\xf3\xdf\x2a\x9f\x0d\xae\x9c\x6b\x55\xbd\xe2\xd5\x16\x3b\xfe\x13\x41\x11\x80\xed\xd0\x01\xc8\xa1\xb3\x1e\x52\x1b\xcd\xdb\x0b\xd2\xd0\xc9\x1b\x18\xff\xe0\xdc\xa4\x43\x4f\x5a\x97\xcb\xb9\x39\x92\x5d\x4b\x96\x96\x3f\x25\x7c\xd1\x0e\x45\x00\xb6\x43\x07\x20\x87\x2e\x62\x7b\xd3\x74\x8f\x65\xb9\x83\xc7\xe8\xde\x64\xf2\x10\x75\x79\xd4\x95\xf2\x6f\x3d\xdb\x5e\x7c\x63\x1e\x8a\x0b\x97\x73\x5f\x89\xa2\x08\xc0\x76\xe8\x00\xe4\xd0\xa5\x08\x66\xf8\xd0\x95\xc6\x8a\x90\x8c\xbe\x3c\xf2\xbd\x8a\xf5\xe4\x0f\xb3\x75\xea\x1f\xb1\x44\x7b\x19\x3a\x8a\x37\x3d\x43\xf5\x88\x51\x04\x60\x3b\x74\x00\x72\xe8\xac\xd5\xf9\x63\x3f\x9f\xbf\x56\x9d\xc6\xdd\x27\x36\xbb\xb5\x53\xcc\x49\xfb\xa3\x58\x43\xe9\x6c\xb0\x71\x80\xf5\xc7\x7d\xdc\x3e\x2d\x8a\x00\x6c\x87\x0e\x40\x0e\x5d\x4b\x6a\x5c\xe4\x29\xa2\x31\xd3\x4e\xbf\x80\xd9\x0f\x0f\xfe\x5d\xfb\x18\xc3\xd7\xee\x88\x63\x0b\xbb\x66\x73\xd8\xca\x27\xd9\xc1\x09\x45\x00\xb6\x43\x07\x20\x87\xee\xed\x25\xc9\x34\xa9\xa7\x7f\xc3\xfd\x57\x86\x68\xc9\xe6\x1e\xff\x7c\x15\x40\xc9\x77\x2d\x2f\x40\xfd\xe8\x8e\x71\xf4\xc0\xb6\x36\xe1\x8f\x61\x3b\x74\x00\x72\xe8\x76\xa4\xab\xb6\xc2\x7b\x84\xd6\xdc\x8f\x7b\xd5\xe0\xb2\x83\xf5\xcd\x9c\xae\xcf\xd6\x77\x2e\x72\xf5\x49\x46\xb3\x26\xb5\x6b\x12\x1e\x74\x6c\x87\x0e\x40\x0e\x1d\xa7\xed\x0b\x7a\xde\x73\xbf\x18\xf4\xca\x74\xea\x97\x42\xc5\xe8\x6e\x28\x7f\x7b\xb3\x87\x2f\xc2\x3b\x6b\xbc\x49\xb1\x11\x65\x54\x41\x11\x80\xed\xd0\x01\xc8\xa1\xb3\xa1\xe2\x21\xf2\xa5\xfa\xaa\xbd\x35\xeb\x48\x83\x0b\x66\x71\x25\xef\xe9\xbb\xca\x41\xfb\xad\xdd\x80\xf5\x84\xfd\xfd\xbb\x34\x84\x5b\x1b\xdb\xa1\x03\x90\x43\x37\x96\x23\x16\xbd\x25\xf0\x75\x38\x64\xe3\x7c\x47\x1a\xc5\x4b\xd9\x32\x56\x96\x60\x41\x91\x6f\xb3\x33\x2a\x9a\x57\x58\xee\xb6\x31\xa1\x08\xc0\x76\xe8\x00\xe4\xd0\x3d\xae\xe7\x56\x20\x12\x8d\x8a\xed\x59\x99\x89\xb1\x3f\xfc\x4c\x21\xcf\xee\x30\xe8\xbf\xdb\x4a\xa3\x7a\x3f\xfa\x9b\x1d\xcb\x2d\x2d\x14\x01\xd8\x0e\x1d\x80\x1c\x3a\x79\xa5\x38\x53\x33\xe9\x0e\x55\x3b\xb1\xc1\x51\x1e\xe6\xe2\x05\xfb\xa6\xef\xd3\xe3\xa5\x9a\xb8\x82\xdc\x4b\x19\xca\xac\x8f\x09\x1d\x0c\xdb\xa1\x03\x90\x43\x37\xd9\xe8\xf6\xd2\xd1\x84\x6d\x5b\x9c\x1d\xd5\xd5\x1f\x2a\x70\xbe\x18\xdf\xff\xad\xd4\xb3\xb5\xc7\x2f\x53\xc3\x49\x95\x2c\x80\x70\xd1\x62\x3b\x74\x00\x72\xe8\x90\x31\x15\xce\xe0\xbf\x5c\x42\xed\x83\xec\x71\x02\xc5\xca\xb3\x19\x0c\xec\x77\xf5\xbc\xb6\x9f\x37\x37\x9f\x1f\xbb\xca\xb6\x45\xb8\xce\xb0\x1d\x3a\x00\x39\x74\xfb\x8b\xf4\x22\xfb\xc3\x24\x01\x62\x47\xa6\xdd\xa5\x9e\x72\x8c\x8f\x97\x7f\xe4\xba\xb2\xa0\x76\xe7\xa3\x8b\xcd\xc9\xa2\xb3\x69\x84\xa9\x81\xed\xd0\x01\xc8\xa1\x5b\x16\xec\x92\x36\x92\x99\xa0\xf0\xf0\x42\x25\xfd\x35\x8f\x5f\xfa\x3e\xab\x66\xe0\x63\x60\xa2\x30\x94\xf3\x50\xe8\xb3\xfe\x4b\x56\x14\x01\xd8\x0e\x1d\x80\x1c\xba\xdb\xaf\xd7\xc2\x65\xf8\x5f\x2b\x45\xb4\xf3\xdb\x37\x4a\xbd\xa9\xa4\xc8\xf3\x2f\x6c\xea\x57\x78\x7a\xb2\x8d\xbe\x8b\x97\x89\x91\xb0\xb9\x61\x3b\x74\x00\x72\xe8\xbe\x98\xbf\x22\xed\x34\xf8\xad\x9f\x86\x56\xa4\xac\x76\x9e\x3e\xa9\x9d\x9c\xa9\xde\x25\x77\xcf\x65\x39\x46\xcd\xf8\x8b\xdb\x36\xe1\x9c\x61\x3b\x74\x00\x72\xe8\xc2\x9c\xc5\x1e\x7a\x32\xfd\x7a\xca\x79\x8f\xf7\x6d\xa5\xda\x39\xe6\x7b\x7a\x65\x86\xa2\x1e\xe1\x3e\x15\x1f\xf5\x57\xab\x7a\x3e\xb1\xa0\x08\xc0\x76\xe8\x00\xe4\xd0\x51\x85\x0e\xa5\x7d\x6e\xbe\x19\xc1\x27\x9e\x1c\x7e\xc5\xc6\x83\xed\x44\x53\x45\x9d\xfc\x1b\xf6\x24\x26\x9d\x5c\x13\xdb\x4c\x13\x42\x6d\xc2\x76\xe8\x00\xe4\xd0\x25\x5b\x66\x65\x31\xcc\xbf\xdd\x63\xe9\xb1\xd7\x14\xbb\x19\x32\xf9\x67\xa0\xa7\xdb\xf0\xde\xa5\xc6\xfb\x77\x36\x4f\x04\x59\x4d\x5c\x47\x11\x80\xed\xd0\x01\xc8\xa1\xcb\x0c\xda\xe6\xf4\x95\xc8\x8c\x5f\x0a\x99\x9e\x47\xff\x9d\x28\xbd\xdb\x27\x6a\x64\x60\x9d\xd9\x43\xc5\xe6\xb8\xaf\x98\xfa\x8b\x30\xb6\xb1\x1d\x3a\x00\x39\x74\xd5\x36\x06\x06\x01\x47\x1c\xa3\x2f\xbc\x9c\xd6\x2a\x0b\x28\xf0\x49\xd4\xdf\x52\xb9\xb0\x7a\xaf\xff\x26\x45\xe9\xf7\xdb\xa9\x36\x84\x11\x84\xed\xd0\x01\xc8\xa1\x13\x1e\x53\xbd\xc8\x73\x72\x5c\xc1\xd5\x23\x9c\x6d\xe6\x51\x85\x63\x06\xdd\x3b\x0e\x71\x71\xb1\xf8\xf9\xeb\x0f\x57\xa3\x4e\x69\xdd\x45\x11\xf0\x5f\x0e\xdd\x79\x46\x0e\x96\x55\x41\x74\xe6\xf9\xb1\xf5\x5f\x12\x91\x4f\xc7\xda\xb2\xf8\x86\x26\xa4\x39\x14\x17\xa8\x4e\x15\x1b\x53\x9f\x1c\x3a\x58\xe8\x20\x87\x8e\x0d\x15\x3d\x8f\x36\x85\xf5\x90\x76\x17\x1b\x89\x9b\xf6\x5c\x39\xc2\x50\x39\xec\x92\xc3\x25\xc5\xdd\xf4\xec\xba\xcf\xd4\x83\xcb\x28\x02\xb0\x1d\x3a\x00\x39\x74\xaa\x4a\x8a\xac\xe5\xbe\x5b\x51\xb4\xf5\xec\x3f\xe5\x6f\x0e\xdb\xfa\xd5\xfa\x89\xe7\xea\x4c\xf5\xa6\x4d\x86\x9c\xe1\x15\xf4\x30\x45\x11\x80\xed\xd0\x01\xc8\xa1\xc3\x59\xa5\x4f\x96\xad\x8c\xdd\x92\xa0\x7a\xab\x31\x50\x30\xd2\xab\xf2\xf7\x21\x4e\xce\xb8\x77\xd4\xe5\x25\x7a\x7d\xf0\x58\x1d\xe1\x61\xc6\x76\xe8\x00\xe4\xd0\x31\xc6\x1c\x3b\xae\x96\x76\xac\x56\x74\xfc\xb9\x47\x4e\x91\x2c\xa3\xb0\xe8\x03\xe3\x5d\xc1\x27\xc6\x75\x61\xc9\xba\xd5\x56\xc9\x84\xf5\x18\xdb\xa1\x03\x90\x43\xa7\x50\xf8\xec\x45\x5e\x6b\xb5\xc6\xd1\xec\xa7\x5a\x5e\xc2\x6c\xa6\xe3\x2a\xa6\xbb\x5b\x4e\xcc\xaa\xaf\x05\xeb\xae\x3e\xbe\xfe\x46\x19\x45\x00\xb6\x43\x07\x20\x87\xce\x6e\x82\xd2\xe5\xd5\x8d\xb1\xb9\x1f\x05\x0c\x61\x4b\x32\x78\x32\xed\x07\x53\x3a\x7a\x75\xaf\x7d\x9d\x7a\x8d\xdc\x8b\x71\x59\x37\x51\x04\x60\x3b\x74\x00\x72\xe8\x0c\xc5\x84\x59\x2e\xa7\xac\x88\x23\x67\xe4\xbe\x7f\xbe\x4d\x27\x51\x7b\xbb\xb7\xc2\xce\x6f\xc8\x65\xec\x34\x37\x7d\xd4\xd5\xc3\x84\x4b\x03\xdb\xa1\x03\x90\x43\xc7\x58\x47\x39\x13\x98\xc7\x91\x56\x80\x0b\xc8\x31\x3d\xe6\xd1\x64\x15\x27\x47\x5e\x26\x1d\x55\x67\xa8\x1f\x14\xad\x31\x88\x27\xac\x2d\xd8\x0e\x1d\x80\x1c\x3a\xef\x31\xff\x77\x11\x7a\xa4\xaa\x73\x4e\xff\x22\x73\xcf\xea\xbe\xb0\xfa\x21\x71\x76\x21\x4d\x7f\xe7\x44\x29\x72\xf1\x3d\x59\x34\xa1\x9e\x63\x3b\x74\x00\x72\xe8\xe4\xb6\xbb\xdb\x7d\x1d\xfd\xcd\x2f\x77\x96\x38\x32\x75\xbd\xeb\x5c\x39\xc2\xe7\x91\x51\x64\xf0\x5c\xc1\x38\xbc\x48\x5f\xa5\x93\x13\x45\x00\xb6\x43\x07\x20\x87\xee\xda\x5f\x5a\xde\x6a\x7b\xd2\xeb\x21\x0f\xd5\x6d\xfe\xca\x2d\x9f\xb7\xfd\xfa\x88\x51\x76\x9a\x4d\x31\x96\x61\xfe\xbd\x99\x44\xfc\x11\x14\x01\xd8\x0e\x1d\x80\x1c\xba\x3a\x29\x1d\x5b\x9d\x80\x69\x4e\x56\xcf\xb2\x92\x23\x1e\xbf\xfd\x0a\x5f\x52\x90\xb3\x75\x7c\xb0\x17\xca\xcb\x7a\x76\xcb\x81\x95\x0a\x45\x00\xb6\x43\x07\x20\x87\xee\x86\xa5\xf6\xa7\xf9\x8a\x4d\xca\xcd\x0b\x1e\xcb\x47\x26\xd4\x44\x3e\x92\x19\x1a\x14\x67\xd7\x9c\xc9\xad\x5a\x38\xf5\x6f\x67\x84\xb0\x38\x60\x3b\x74\x00\x72\xe8\x22\xcd\x9b\x9f\x87\xb2\x57\xe4\x9e\x91\x71\xc9\x5d\x99\x90\xbe\x53\x9a\x79\x89\x25\xfc\xf9\x11\xcd\x21\x85\x94\xc0\xe9\x47\x12\x66\x28\x02\xb0\x1d\x3a\x00\x39\x74\xef\xc6\xb8\xa3\xe8\x79\xc4\x9f\x88\x1c\x92\x36\xbb\x52\x9c\x5a\xa2\xca\x45\x2e\xfc\x24\xdc\xf5\xf0\xe5\x92\xf0\xc1\xb6\x41\x1e\x67\x14\x01\xd8\x0e\x1d\x80\x1c\xba\x14\x30\x1a\xd3\xbd\xe4\x32\xec\x49\xa5\x74\x3b\x61\xa3\x6a\x2d\x52\x28\xa6\x84\x24\xa3\xa4\x3f\xbc\xcf\xb8\xe1\x88\xd7\xb2\x24\x8a\x00\x6c\x87\x0e\x40\x0e\x9d\xe4\x91\xe4\x1e\x83\x50\xba\xe9\xd4\x9a\xcf\x1b\xb5\x5a\xb1\xbc\x7c\x9f\x5d\x5d\x9f\x5c\xc8\x9d\x95\xdc\xa5\x99\xe8\x7f\x7b\x46\x04\x45\x00\xb6\x43\x07\x20\x87\x8e\x49\x3a\x39\xdd\x2d\xa6\xea\x4e\x52\x93\x81\x84\xea\xb3\x2a\x5e\x4f\x5f\x09\xff\x40\x41\xfd\xf7\xba\x1b\x8a\x75\x4f\xb5\x22\xf0\x28\x02\xb0\x1d\x3a\x00\x39\x74\xde\x59\xf3\xe4\xdc\x3f\xe2\x35\x1a\x3c\x5b\xae\x25\x6f\x5f\xa9\x17\x13\xf8\xdc\xfc\x71\x4f\x68\x2e\xce\x5d\x82\x87\xd1\xa4\x83\x04\x45\x00\xb6\x43\x07\x20\x87\x8e\xf9\xf6\x99\x80\x0e\xab\xb4\x46\x9e\x10\x6b\xa2\x4f\x4c\xd7\xb2\xb5\x35\xd8\x4f\x7d\x8f\xcf\xfe\xc3\x2b\x3b\x72\xcd\x4b\x8e\x8a\x1f\x45\x00\xb6\x43\x07\x20\x87\xce\xf2\x93\xec\x17\xab\x3f\xc9\xd5\xb1\x4b\x3e\xfd\x72\xd5\x17\x34\x8f\x8d\xf9\x70\x94\x79\xbf\x4b\x66\xcb\xad\x74\x28\x0b\x35\x26\xec\x47\xd8\x0e\x1d\x80\x1c\x3a\xa3\xef\xb3\xeb\x95\xdc\x4e\x2c\xd1\x1e\xbc\xeb\x53\x1d\x9e\x0e\xd5\x27\xad\x1f\x85\x2a\x88\x18\x9f\xf8\xfa\xfe\x14\x69\xd0\x55\xc2\xd8\xc6\x76\xe8\x00\xe4\xd0\x05\xe7\xde\x3a\x1f\x9f\x35\xdc\xd2\xeb\xfc\x77\x2e\xbe\xed\x66\xe2\xaf\xe9\xe1\xfc\x1f\x2a\xd5\xbe\xe4\xd7\xcc\x43\x53\x97\x4e\x11\x0e\x2d\xb6\x43\x07\x20\x87\xee\xe1\x49\x99\x91\x4a\xd1\x13\xdd\xbe\x3e\xd9\x4f\x1e\x89\x5a\x3e\xfb\x2c\x92\x43\xa1\xdd\x83\xe4\xa6\xfe\x0e\x4c\xbf\xa2\x48\x49\x38\x67\xd8\x0e\x1d\x80\x1c\xba\x57\x5f\x16\x94\xcb\x69\x9f\xec\xb4\x17\x84\x39\x74\x56\x4b\xaa\xbd\x3e\xcd\xb1\x79\x6c\xac\xc4\x7d\x58\x51\x97\x2a\x6e\xa6\x4c\x06\x45\x00\xb6\x43\x07\x20\x87\xee\x13\xcd\xeb\x2b\x9b\xaa\x39\x39\xe6\x8d\x9d\x60\xc5\xb4\xa7\x28\xea\xd2\x5b\x1e\xf2\x81\xa7\xd7\x1e\xfd\xcc\x97\xfc\x49\x67\x20\x88\x22\x00\xdb\xa1\x03\x90\x43\xf7\x7a\xb6\xfd\x9a\xe6\xc7\x7d\xb3\x1a\x96\x69\x52\x60\x14\xa0\x4a\x19\x40\xdc\xd1\xe6\x76\x52\x44\xea\xd9\xf9\x8b\x09\x34\xd4\x84\xa3\x81\xed\xd0\x01\xc8\xa1\xbb\xbd\xe0\x4e\xf6\x80\xf7\xe5\x56\x5c\x8e\xa2\x2a\xc7\xe6\xe8\xce\x49\x1d\x44\xdd\xa3\x6f\x82\x3f\xfe\xf8\xe2\x0f\xaa\xa0\x16\x42\x39\xc1\x76\xe8\x00\xe4\xd0\xad\xe8\xa9\x17\x66\xd1\x3f\x12\x8f\x7c\x61\x52\x6f\x7e\x16\xe9\x7d\x71\xf8\x93\x41\x58\xb0\x24\xcf\x9f\xc6\xef\x4a\xc7\xed\x34\x4f\xa3\x08\xc0\x76\xe8\x00\xe4\xd0\xe9\x45\x28\x1b\x3c\xb9\xef\x68\xff\x80\x3d\x59\x42\x2f\x32\xee\xd7\xed\xef\xa6\x99\xa7\x51\xb2\x41\x0b\xe1\xbf\x8a\xee\xfb\x2d\xaa\x28\x02\xb0\x1d\x3a\x00\x39\x74\xdf\x1e\x09\xe6\xf5\xfe\xcb\xed\xbb\xbd\xc3\x47\x5b\xf0\xdb\x54\x46\xf5\xbe\x17\xef\xe9\xd0\xf6\xcc\xae\xec\xad\x0b\x1b\x6d\x7e\x56\x28\x02\xb0\x1d\x3a\x00\x39\x74\xda\xf3\x1d\x5e\x8c\x21\x35\x46\x14\x03\x32\xf4\x03\x05\xd7\x59\xa6\x94\x52\xf9\x8d\xb2\x8b\xce\x6b\x9c\x62\x19\x59\xab\x15\x20\x8c\xed\xff\x72\xe8\xf8\x1a\xe7\xe3\xd8\xe3\xd3\xe7\xb2\xd2\x44\x73\x4c\x0c\x19\x63\xef\x0a\x4e\xbb\xcc\x3d\x32\x1d\x88\x73\xd5\x6c\x2b\x3e\x71\xdf\xf9\x60\xa1\x83\x1c\xba\x14\xf5\xae\xbf\xb5\xdb\x67\x1e\x3e\x9e\x0e\x64\xa5\x2c\xb0\xcf\xc9\x6b\x90\xb5\xa1\xcc\xa9\xf8\xc3\x75\x34\x88\xac\x4a\xa8\x95\xf0\xb9\x60\x3b\x74\x00\x72\xe8\x50\xb9\x7f\x7d\x2a\xe7\xe2\x0d\x23\x9e\xfc\xd0\xba\xf2\xf0\xc8\x3a\xc9\xe8\x95\xed\x5b\xd7\xb2\xb3\x02\x81\xf3\xd8\xc6\x0b\x0d\x3a\x14\x01\xd8\x0e\x1d\x80\x1c\x3a\xe3\xdd\x35\x9f\xa7\xe6\x4b\x42\xf9\x5f\xce\xb5\x74\x26\x8b\x56\x69\x97\xd5\x14\x06\x2c\xa0\x78\x16\x73\x07\xdf\x75\x0a\x13\x09\x14\x01\xd8\x0e\x1d\x80\x1c\x3a\xca\xe6\x7e\xf5\x36\x59\x11\xad\xf1\xb9\x62\x0a\xa1\xc6\x7a\x1b\xca\x1a\xfd\x46\x5a\xdd\x7f\x6e\xb4\x6c\xb6\x9f\xa3\x6b\xea\x8e\xa3\x08\xc0\x76\xe8\x00\xe4\xd0\xad\x69\xbb\xa6\x29\x0e\xe0\x4c\xdf\x3d\x94\x49\x26\x0f\xcb\xac\xa4\xae\x2c\x33\x35\xa8\xf7\x55\xcb\xe6\x28\xec\x0e\x6f\x8d\x53\x42\x11\x80\xed\xd0\x01\xc8\xa1\xbb\xdf\xf6\xe7\x6e\xc9\x8d\xe4\xe8\x61\x15\x4d\xf1\x75\x5a\xff\x57\xd7\xac\x1b\x26\x4e\xdf\x3b\x4e\x91\x34\x2a\xbf\x59\x2d\xf1\x89\xf0\x36\xb1\x1d\x3a\x00\x39\x74\xff\x32\x45\xb9\xd5\x73\x49\xd7\xba\x5a\xed\xa5\x4c\xa7\x78\x43\x3f\xdc\xad\x8b\xbf\x67\x4c\xb1\x4d\x73\x1f\x1f\xb0\xd7\x39\x49\x18\x33\xd8\x0e\x1d\x80\x1c\xba\xa6\xf7\x15\xc1\xfa\xf9\x57\xbb\x82\x85\x99\x58\x2d\xda\x80\x86\x4d\x76\xce\x33\x75\xa1\xd4\xe5\xc3\xc2\xb7\xd3\x7b\x6d\x8c\x2c\x50\x04\x60\x3b\x74\x00\x72\xe8\x7e\x6c\xc9\x97\xb4\x2c\xc8\xd3\xda\xe4\x32\xbd\x2a\x52\xb0\xfc\x2e\xd2\x37\xdb\xc8\xdd\x74\xeb\xdf\x5b\x03\xbb\xca\x17\xbd\x9f\xf4\x50\x04\x60\x3b\x74\x00\x72\xe8\x4a\xdc\x2b\x73\x88\x3f\xe6\x5b\x58\xd7\xcb\x06\x9f\xb5\x4d\xcc\x6e\x68\x4c\x66\x72\x7c\xd8\x99\xd9\x3c\x99\xf5\xf0\xc1\xf5\x08\xc2\xe2\x80\xed\xd0\x01\xc8\xa1\xbb\xb1\xf0\xa0\xd2\xcc\x34\xd1\xc1\x52\x5a\xa4\x48\x42\xb8\x48\x81\xe9\x24\x87\xa3\x16\xd1\x1e\x79\xd3\xdd\x6b\x5b\x6d\x77\x5f\xf0\xa1\x08\xc0\x76\xe8\x00\xe4\xd0\xbd\x62\xf7\x56\x49\xe0\x09\x9b\x89\xbd\xb8\xc3\xe4\xc5\xf7\xa6\x36\x02\x57\xed\xb2\xba\x6b\x7b\xe3\xc4\xfe\x9f\x21\x63\x35\x21\x35\x14\x01\xd8\x0e\x1d\x80\x1c\xba\xf3\xc2\xf1\x2f\xf7\x3c\x63\xe5\xbd\x33\x8f\x72\x07\xd8\x0f\x9c\xb8\x23\xa0\x5b\x38\x73\xfa\xb8\xfd\x73\x9a\x4f\x81\x6a\x91\x96\x34\x28\x02\xb0\x1d\x3a\x00\x39\x74\x47\x6d\x77\xd7\x13\xd9\x38\xea\x9f\x2a\xbe\x8d\xa7\x32\xfe\xb7\xc9\x2c\x4f\x1e\x52\x65\xd1\x96\xb6\xf2\xca\xd6\x76\xb5\x45\x58\x1f\x45\x00\xb6\x43\x07\x20\x87\xae\xde\x3a\xdc\x39\x4a\x58\xc3\xee\xd9\x25\x1f\xbe\xfb\x32\x5e\xae\xf7\xf3\xf0\x5e\x9b\x54\xb6\x7b\x44\x91\xba\x81\xc0\x86\x92\x15\x45\x00\xb6\x43\x07\x20\x87\xee\x02\xce\xe7\xef\x1f\xcd\x97\x0d\x6c\xce\x87\xc8\x59\xea\x9e\xaa\x5f\xbe\xc9\x12\xa4\x9e\x20\xe0\x20\x42\xac\x24\x96\xfe\xe9\xc7\x1d\x14\x01\xd8\x0e\x1d\x80\x1c\xba\x76\xd9\xb3\xed\x93\x89\xca\xaf\x8e\x5f\xd3\x8c\x24\xf1\x7b\x3c\x69\x73\xd8\x23\xc3\xb9\x3e\xb6\x6c\x33\x77\x3d\x84\x28\x94\x8d\x1d\x45\x00\xb6\x43\x07\x20\x87\x6e\xb5\x7c\x64\xec\xf9\x17\x12\x7d\xfa\xa4\x6d\x47\xce\x04\xdd\xb1\xde\x23\xa3\x9a\x3c\x9f\x5f\xf6\x2f\x57\x32\xce\xe7\x06\x4b\x5d\x45\x11\x80\xed\xd0\x01\xc8\xa1\xbb\x79\x9c\x7c\x95\x87\x41\xee\xf7\xeb\x93\xb7\x55\x48\x70\xda\xbb\x11\x22\x0d\xf3\xd5\xaf\xcb\x0f\x4f\xd0\x39\x85\x79\x05\x3b\x32\xa2\x08\xc0\x76\xe8\x00\xe4\xd0\xfd\xa0\x9e\xf2\xda\x09\x5f\xcb\x8a\xdd\x32\xa0\x7d\x68\xda\x44\xa4\x73\xd6\xdb\x71\x27\x33\xae\x8b\x36\x8c\x7e\xb6\xff\x35\xe5\x75\x14\x01\xd8\x0e\x1d\x80\x1c\x3a\xe5\x3f\x8a\xa2\x9d\x55\xd2\xec\xe7\x49\x88\x32\xea\x22\x8b\x86\x3e\x1c\x97\xb9\xa0\x58\xf8\x3e\xab\xcd\x84\xe4\x47\xe0\x6c\xbf\x38\x8a\x00\x6c\x87\x0e\x40\x0e\x9d\x5d\xd3\x40\xf5\x0f\x43\xe1\xb5\xaf\xe5\xfd\x65\xfe\x9a\x0b\xd1\x4e\xaf\x9b\x6b\xdf\x6a\xc7\x71\x5d\x7f\xda\x78\xee\xe1\xf2\x5f\xc2\xd4\xc0\x76\xe8\x00\xe4\xd0\x45\x45\xbb\x75\xb3\x31\xbb\xfe\xa5\x98\x3e\x6a\xe8\xe6\x7c\xb4\x63\xf7\x77\xf6\x32\xe5\x8a\x48\x6f\x9a\x67\x90\xff\xc7\x5b\x87\x09\xb7\x13\xb6\x43\x07\x20\x87\x8e\x48\xff\xc8\x1f\xa7\xdb\x7a\x87\x42\x99\x87\x7b\xaa\xee\x2a\xa7\xd8\x86\xe9\xb6\x0e\x4c\x0d\xc5\xdb\x53\xb7\x32\x64\x59\x9c\x23\x8c\x20\x6c\x87\x0e\x40\x0e\xdd\x58\xe2\x29\xa2\xf3\xf4\x45\xe1\x1c\x25\xce\xdf\x1f\xd3\x1f\x1a\x8e\x39\x9d\x97\x9a\x59\xd8\xd1\xff\x68\x2d\x32\x71\x8d\x6e\x85\x18\x45\x00\xb6\x43\x07\x20\x87\xee\xa7\x62\xac\x6e\xdd\xf3\x8e\x5d\x62\x97\x0d\xe2\xb4\xa6\x96\x4d\x75\x1e\x4a\xf6\xba\xf1\xaf\x1a\xab\xe2\x51\x89\x86\x77\xc6\x08\xcf\x26\xb6\x43\x07\x20\x87\x2e\xd7\xa7\xee\xc6\xcb\x85\xb5\xa2\xc4\xc4\x56\x85\x58\xbb\x22\xed\x43\xf3\x68\x50\x58\x20\x47\x8c\xc3\x9c\x71\x2e\xe7\xaf\x1f\x84\x76\x88\xed\xd0\x01\xc8\xa1\x63\x61\x59\x4e\x25\x69\x5c\xff\xe6\x54\x6b\x79\x41\x51\xf2\xfe\xcb\xf2\xa6\x3b\x2f\xb7\x9f\x90\xdb\x1b\x1d\xe2\xc9\x9e\x8e\xeb\x27\x42\x11\x80\xed\xd0\x01\xc8\xa1\xfb\x93\xab\x5a\x4c\x4a\x3b\x74\x6e\x7e\x05\xc7\x1f\x32\x3b\x01\xe4\xf3\xf1\x1a\xd7\x2e\x7f\x88\xb8\xff\x1b\x70\xbc\x8d\x10\x25\x2c\x5b\xd8\x0e\x1d\x80\x1c\xba\xb0\x6b\xba\x61\x41\xf9\x3a\xba\x4d\x2e\xde\xd4\x8f\x2e\x9d\x77\xd3\x2e\xbf\x49\x5c\x41\xfe\xf6\x61\xdd\xb9\x5b\x63\x83\x2c\x03\x8e\x28\x02\xb0\x1d\x3a\x00\x39\x74\xf1\x64\x5a\x1d\x44\x09\x2e\x96\x4b\x5a\x27\x68\x76\x15\x8e\x89\x16\xfb\x96\xf6\x0b\x5c\x74\x0d\x18\x9b\x66\xd7\xbc\x19\x3a\x49\x58\x50\xb1\x1d\x3a\x00\x39\x74\x32\x36\x29\x5c\xab\x91\x69\x6a\xea\xf8\x27\x62\xf4\x85\x77\xaf\x99\xb1\x02\xdb\x96\xea\x0e\xbb\x9a\x3d\x77\x99\x15\x12\x4d\xc2\x1a\xf8\x5f\x0e\x1d\x98\xf9\x8e\x97\xcf\x59\x49\xbd\x6e\xa6\x5e\x7e\x43\x4e\x6b\xe7\xe9\x91\x70\x9d\x7e\xc6\xce\xfe\x7f\x03\x3a\x4e\x93\x49\x51\x6e\x07\x0b\x1d\xe4\xd0\x91\xce\x35\xf1\x47\x7d\x74\xbc\x71\x9b\x9e\x8a\xfd\xd8\x31\x3d\x0e\xef\x4c\x83\x2c\x7f\xd5\x30\x5c\xd7\x1f\x12\x6e\xd9\x44\x01\x79\x14\x01\xd8\x0e\x1d\x80\x1c\x3a\xcf\xec\xac\x52\x32\xbf\x66\x2a\x8d\x1a\x33\x9b\x3a\xa4\xf0\xbe\xdd\x36\xab\x75\x38\x43\x6a\xf6\xd0\x13\x8a\x24\x6b\x9f\x59\xc2\xf3\x87\xed\xd0\x01\xc8\xa1\x3b\xcb\x30\x74\xda\xc5\x87\x3b\x7e\xf8\xe7\xbe\x49\xfc\x09\xf1\x48\xe3\x78\xf6\x82\x88\x4c\x9f\x56\x61\xa9\x77\xad\x46\x42\xbf\x09\xaf\x0c\xdb\xa1\x03\x90\x43\xa7\xf3\xd3\xd2\xc0\xeb\xdb\x34\xf3\x94\x4d\x0a\x89\x7a\x61\x6f\x94\x26\xe3\xbd\xcf\xa1\x8e\xa6\xe6\x0b\x93\x12\x74\x44\x37\x1e\x12\x96\x50\x6c\x87\x0e\x40\x0e\x5d\x5f\xab\x9d\x70\xa4\x2f\x67\x33\xcb\x2d\x05\x16\x72\xce\x86\x84\xbb\x87\x14\x1f\x0a\x90\xf3\xee\x6c\x4f\xda\xf0\x7d\xaa\x33\x3f\x8f\x22\x00\xdb\xa1\x03\x90\x43\x57\x17\xd9\x2d\x78\xb8\x38\xf1\x8e\xa9\x8a\x76\xfc\xd4\x65\xfe\x0c\xaa\xf9\x66\xb6\x85\x75\x81\xe2\x6c\x87\x37\x35\xb4\x93\xf3\xe4\x28\x02\xb0\x1d\x3a\x00\x39\x74\x93\x92\xd9\x3f\x10\xe5\x77\x5f\xfd\xc0\x5a\x78\xfa\x82\xbd\x48\xd2\x85\x38\x55\xab\x8a\xcf\xd7\x71\xcb\xc2\x9b\x2f\xa7\x59\xa5\x50\x04\x60\x3b\x74\x00\x72\xe8\x90\xc7\x21\x6f\x99\x41\x6b\xe6\xf9\x26\x84\x7f\xe0\x8b\x22\xd7\xa1\x52\x87\xd6\x4d\xb7\x1f\x41\xdc\xfe\x36\xaa\x55\xe3\xdb\x84\x1b\x08\xdb\xa1\x03\x90\x43\xd7\x4e\x71\xa9\x27\xac\xd2\xf1\x74\x9a\xfd\xa1\x66\x12\xd9\xdf\x03\x35\x2b\xab\x7b\x45\x9d\x19\x2f\x2e\x8e\xd2\xf0\xe7\x37\x6d\x12\xde\x26\xb6\x43\x07\x20\x87\xae\x2a\xfa\xfa\xd9\x23\x2a\x2d\xc5\x43\x4d\x29\x42\x76\x4a\xe6\x3f\x9f\xd6\x3d\x62\xf0\x3f\xcc\xbd\x79\xa2\x41\xbe\xdd\x68\xcb\x86\xf0\xfc\x61\x3b\x74\x00\x72\xe8\xb8\x07\x57\x94\x5c\x54\xae\xb5\xbc\xd2\x93\x59\x1a\xda\x8b\xf8\xa0\x1f\xfb\xa5\xb0\x20\x20\xbe\xf4\xb5\xea\x5b\x83\xb1\x9b\xa7\x09\x15\x00\xdb\xa1\x03\x90\x43\xc7\x54\x1e\x50\xe0\x4c\xae\x97\xce\xe4\x92\xba\x1f\xd2\xf7\x66\x2d\x7e\xf0\xed\xb7\xe5\x13\x09\x23\x67\xe4\x4e\x76\x58\x49\x0e\x91\xa0\x08\xc0\x76\xe8\x00\xe4\xd0\x05\x8a\xa7\x3d\x64\xd6\xf3\xf1\xdc\x35\x24\xc9\xa5\xe5\x0d\xf5\x2f\x0f\xab\x37\xf7\xde\x73\xfe\x57\x1c\x37\x5f\x96\xb6\x94\x4e\xf8\xcc\xb0\x1d\x3a\x00\x39\x74\x9a\xc7\xc4\x1f\x36\x59\xba\x57\xff\xdc\x91\xbb\x97\xb3\x25\xc6\x25\x92\x22\xfb\xf8\x9f\xfe\xd5\x5c\x3a\xb7\x8e\xea\x33\xcd\xb7\xb9\x51\x04\x60\x3b\x74\x00\x72\xe8\x0e\x4f\x7c\x68\x99\xff\xe1\x35\x7a\xdd\x85\xc7\x35\x5a\x25\xf3\x26\x93\x1b\xd7\x80\xdd\xdd\x85\xb5\xf3\x13\x9b\x8e\xc4\x19\x3e\x47\x51\x04\x60\x3b\x74\x00\x72\xe8\xca\xf5\xfe\x75\xf9\xcc\x6c\x56\xf0\x12\xa7\x0f\xa8\xf4\x3d\x08\x19\x9e\xdd\xe5\xbb\x26\xa4\x89\x67\xe4\x35\x24\xbe\x7a\xfe\xaf\x16\x8a\x00\x6c\x87\x0e\x40\x0e\xdd\xcf\x99\xdb\x3b\x94\xb6\x54\xe6\x06\xc8\x72\x34\xbd\xc4\x2d\x73\x3b\xc1\x41\x09\xa2\xef\x24\xa4\x5c\xf7\x6b\xed\xda\xc7\x4f\x31\xa0\x08\xc0\x76\xe8\x00\xe4\xd0\x7d\x61\x63\xb2\xec\xb1\x09\x0c\x16\x34\xf8\x90\xb4\x5b\xff\x83\xc2\xc3\xf6\x82\xc9\x43\xdf\x4b\x6f\xcb\x3f\xab\xce\x9f\xc3\xfd\xba\x89\x22\x00\xdb\xa1\x03\x90\x43\x97\xf6\x49\x63\x5b\x32\x4b\x9a\xf8\xcf\x55\x25\x6a\x91\xb9\x67\x19\xaf\x33\x72\xb2\x5c\x39\xaa\x84\x7f\x6b\xad\xf7\x2e\x9e\xdb\xb6\x42\x11\x80\xed\xd0\x01\xc8\xa1\xd3\x4b\x69\xe7\x3c\x57\xd9\x5c\x55\x9a\x55\xda\x1c\xb3\xa1\x9f\xff\x9b\xba\x3a\x83\x2e\x9a\xe7\x83\xc7\x4a\xf3\x62\x58\xe6\x0b\x6a\x14\x01\xd8\x0e\x1d\x80\x1c\xba\xdf\x6b\xd6\x63\x92\xf7\xfd\x4d\x29\x3d\xdb\x8b\x0e\x55\x6a\xc7\xe5\x8c\x95\x59\x0c\xb0\x85\xb1\xde\xe8\x57\x39\x6b\xa3\xb3\xa6\x8c\x22\x00\xdb\xa1\x03\x90\x43\x27\x34\x1b\x7a\x66\xc0\xd4\xa4\x99\xf2\xe4\xa8\x75\xe7\xdd\x67\x41\xd2\x13\xbe\x68\xea\x09\x8b\x11\x72\x09\x09\x66\xad\x98\x18\x31\x14\x01\xd8\x0e\x1d\x80\x1c\xba\x1a\x81\xf4\xaf\x77\x23\xd6\xe2\x04\x4d\xbd\xa5\xe5\x66\x63\xbe\x68\xbe\x07\xa7\x54\xf2\xf6\xd8\x04\x85\x88\xd6\x2a\xda\x8c\x08\x23\x08\xdb\xa1\x03\x90\x43\xa7\x51\xf1\x94\xcb\x35\x61\xbd\x90\x98\xe3\xd0\x85\x2a\x3e\x6b\xe0\x24\xe2\x3e\x24\xa4\x51\xcf\x22\x94\x75\xc7\x48\xe1\x69\x29\x61\x71\xc0\x76\xe8\x00\xe4\xd0\xf5\xd5\x4b\x90\xde\x29\x2c\xb0\x2b\x7b\x3a\x7a\x51\x33\x6e\x87\x31\xd9\xdf\x93\xb3\x21\xd8\xf8\x6d\x81\x86\x8e\x94\x89\xf3\xff\xfd\xbf\x2c\x6c\x87\x0e\x40\x0e\x5d\x63\x59\x7f\xe3\x7e\xc3\x17\x25\xb6\x1f\xef\xba\x27\xa2\x5c\x37\xb3\x52\x40\xdf\xa9\xa4\xbb\xbd\xf7\xcb\x07\xb8\x0a\x6a\xe6\x9c\x50\x04\x60\x3b\x74\x00\x72\xe8\xc4\x9f\x9a\x3f\xd3\xac\xbf\xf7\x46\x8b\x8d\xcb\xc5\x67\x9c\xe6\x97\x70\x1d\xae\xd8\x5d\x45\x53\xcf\x96\x14\x15\xb4\x3f\xc3\x4b\x68\x3a\xd8\x0e\x1d\x80\x1c\x3a\xbe\xbf\x55\xb5\x87\x42\x82\x43\x0c\xd4\x7c\x5b\xd9\x29\x85\x84\x3f\x8c\x2d\x70\xed\x34\x72\xf5\x54\x3d\x59\x5a\xe5\x7e\x2b\x24\x83\x22\x00\xdb\xa1\x03\x90\x43\x97\xff\xe0\xfa\xcb\x33\x8a\xdd\xfb\x82\x24\x12\x03\x47\xc9\x9c\x42\x44\xdc\x5f\x6c\x33\x67\x53\x34\xee\xfe\x79\x39\x5c\x69\x7d\x8d\xf0\xca\xb0\x1d\x3a\x00\x39\x74\x79\x6e\xba\x14\x91\x5f\x3d\x69\xec\xe5\x13\x6f\xf5\x84\x33\xa9\x3e\xe5\x17\xee\x8f\x0a\x49\xdf\xcf\x0d\x2e\x57\xd1\xdf\x36\x23\x6c\x21\xd8\x0e\x1d\x80\x1c\x3a\x8d\xb4\x1f\xcf\xa9\xbc\xca\xf6\x4d\x1d\x6f\xa7\x4a\x65\x89\xd5\x3d\xcf\xcc\x0e\xa4\x5d\xee\x67\xc8\xb9\x54\xef\x7b\xe2\x47\x36\x15\x8a\x00\x6c\x87\x0e\x40\x0e\x5d\x70\x48\xe2\x59\xde\x6b\x61\x15\xfd\xee\xed\x8f\x44\xc8\x4a\x1c\xae\x2c\x7f\xe0\xce\x0f\xb7\x8d\x49\xba\x97\x11\xcd\x9a\x47\xab\x89\x22\xe0\xbf\x1c\xba\xf0\x81\xac\x8b\x6b\x14\x4d\xd1\x73\x47\x26\x73\x14\x93\x10\x4e\x5e\xa5\x9f\x59\xa5\x52\x69\x19\xd6\xac\x27\x12\x95\x53\xd0\xb5\x03\x85\x0e\x0f\x39\x74\x31\x2f\xe3\xa8\x1b\xe3\x02\xbe\xb3\xf1\x70\x26\x18\x93\xa5\x6b\x59\x15\x44\x06\x2a\x05\xcf\x74\xe6\x17\xf6\x8f\xa9\x9d\x6c\xa7\x47\x11\x3c\xb6\x43\x87\x87\x1c\xba\xfc\xd2\xb4\xf4\xf0\x8e\xbe\xa1\xc7\xdc\xd2\xbb\x83\x99\xa1\x02\xbf\x8f\xca\xb2\x5e\x5c\x44\x82\xab\xd5\x28\x82\x1e\x53\xf9\xb2\xa0\x08\x1e\xdb\xa1\xc3\x43\x0e\xdd\x3d\xe3\x4d\xd0\x28\x62\xe0\x14\xfd\x47\xc8\x21\xef\x9c\x4d\x51\x92\x41\xcc\x9f\x60\x1d\xe9\xc0\x63\x0b\x94\xb4\x99\x79\x74\x86\x28\x82\xc7\x76\xe8\xf0\x90\x43\xa7\x71\x7f\x75\x56\xb1\x35\x5a\x8d\x1d\xdf\xe7\x6b\xff\x64\x29\xb6\x66\xd4\xda\xa3\x51\x5b\x6a\x98\xcd\xec\x4b\x80\xf0\xa1\x39\x76\x14\xc1\x63\x3b\x74\x78\xc8\xa1\xf3\xda\x52\xad\xc1\x05\xb7\xc4\x91\x1d\x39\xe7\x30\xff\x8c\x93\x4a\xe1\xe3\x98\x23\x3f\x5b\x9b\x2c\x25\x59\x0b\xf1\x7c\x9d\xc2\x19\x14\xc1\x63\x3b\x74\x78\xc8\xa1\x0b\xc8\x72\xe2\x38\x17\xcd\x24\x28\xb0\x92\x95\xa0\x6a\x11\xf0\x92\xe1\xf8\xd7\x29\x77\x99\xa5\xf2\xc4\x4f\x33\xb2\xfb\x13\xfa\x37\x51\x04\x8f\xed\xd0\xe1\x21\x87\x8e\xe5\xe2\x5d\x9d\x5f\x9e\x54\x63\xbc\x9d\x93\x7c\xfc\x41\x35\x14\x74\x32\x11\x54\x24\x49\x8d\xeb\xdc\xd3\x7b\x49\x17\xe4\x78\x85\x51\x04\x8f\xed\xd0\xe1\x21\x87\x6e\x81\x7f\x6a\xf3\xc6\x19\x0b\xf9\x95\xbb\xbb\x4f\x96\x9a\x94\xaa\x7e\x51\x1d\x36\x6d\x06\x4f\x87\x68\x94\x5e\xbe\xdc\x0b\x27\xa2\x41\x11\x3c\xb6\x43\x87\x87\x1c\x3a\xc3\xda\xc9\xed\x99\xf0\x3d\x17\x05\xb5\x7c\x2b\xf5\x78\x8e\x7b\x96\xf4\xe2\xce\x99\x1e\x1f\xdc\x13\x92\xec\x1a\x56\xff\x15\x11\x5e\x19\xb6\x43\x87\x87\x1c\x3a\xd2\x1b\xa2\x6f\x39\xe4\x3d\x03\x2e\x25\xc9\x52\xdb\xdd\xd6\x88\x38\xaf\x94\x2a\xea\x59\x3b\x23\xf1\x0a\x44\x1f\x6a\x94\x9b\x96\x40\x11\x3c\xb6\x43\x87\x87\x1c\xba\x56\x7e\x8d\x87\x3d\xcf\x78\xdc\xb8\x8e\x66\x12\x49\x7a\xdc\x17\x9e\x7d\x5b\x55\x90\x64\x67\x73\xf3\xdc\x39\x9a\x53\xf8\x30\x0e\x12\x14\xc1\x63\x3b\x74\x78\xc8\xa1\x3b\xf6\xf2\x67\x7c\x47\x33\x47\xc7\xab\x7a\xe1\xe4\xf0\x7a\xf7\x9e\x33\x7a\x17\xbc\x06\xd2\x34\xd8\x79\x75\x18\x3f\xff\x54\xe5\xb2\x44\x11\x3c\xb6\x43\x87\x87\x1c\x3a\x13\xc4\xf7\x52\x44\xf7\xfc\xc9\xa0\x8a\x0c\x9f\xa9\xba\x72\xf9\xcb\x4a\xa7\xfa\x2e\x72\x66\x8d\x8a\xcb\xe5\x79\xab\x1b\xc5\x12\xce\x19\xb6\x43\x87\x87\x1c\xba\xc0\x2a\xdc\x56\xf4\xf8\x4f\x15\xed\xbf\x5a\x9d\xef\x3f\xb5\x4c\xb8\x5d\x7c\x1a\xc0\xfd\xa9\xa4\xb4\x5d\x64\xac\x7f\xdd\x6b\xc3\x01\x45\xf0\xd8\x0e\x1d\x1e\x72\xe8\xe8\x65\x19\x98\xfc\x2e\xec\x14\xf4\x26\x50\xbf\xe1\x7c\xdb\x86\x23\xe5\x9b\x4d\x68\x90\xe5\x3d\xf9\xe7\xe9\x9c\x59\x92\x3c\x29\x23\x8a\xe0\xb1\x1d\x3a\x3c\xe4\xd0\x05\x6e\x9c\x95\x8a\x7a\x17\x1c\x2a\x71\x44\xcb\xe8\x53\x02\xc5\x48\x08\xd9\x96\x97\x91\xdc\x6b\xa1\x8f\x4d\xde\x14\x3c\xa9\x37\xf5\x51\x04\x8f\xed\xd0\xe1\x21\x87\xce\x51\x94\xda\x6a\xd8\xae\xc0\xb4\xbc\x99\xd9\x58\x51\xe4\x1d\x8d\x88\x9e\xa7\xec\xda\x23\x53\x97\x53\x82\xf2\xa6\x8d\x0c\x2e\x84\x57\x86\xed\xd0\xe1\x21\x87\xce\x51\xed\xa5\x99\xb1\xe8\xfc\x5f\x6d\x9e\x0f\x83\x7d\x09\x8d\xda\xdf\x07\xa8\x24\xa5\x0f\x4d\x33\xfb\x67\x97\xa5\xf1\xe8\xb0\x39\xa2\x08\x1e\xdb\xa1\xc3\x43\x0e\x1d\x45\xe9\xb6\xa4\x36\x87\x79\x22\xcd\x19\xe7\xe7\xf4\x15\x6a\x25\xbe\x25\xb3\xd1\xac\xe9\xd1\xff\xba\xf6\xcf\x8a\xd1\xbe\x71\x26\x46\x11\x3c\xb6\x43\x87\x87\x1c\xba\x02\x03\xc5\x39\x85\x13\x2d\x3a\x74\xee\x51\x6f\x1e\x17\xdc\x1e\x9d\x36\x34\xf2\x8b\x65\xfd\x9a\x7f\xdd\x29\x90\xc4\x48\xb2\x87\xf0\x6d\x62\x3b\x74\x78\xc8\xa1\x4b\x6b\xe1\x3f\x33\x84\xbb\x2a\xae\x2d\xa8\x2c\xce\x05\x3e\x3d\x53\x79\x7e\x21\xb5\x2f\x91\x3c\x80\x58\xb8\x33\x6a\x98\xed\x89\x3c\x8a\xe0\xb1\x1d\x3a\x3c\xe4\xd0\xdd\x11\x8c\xa0\xfa\x5a\x61\xed\xa1\xf2\xbc\xe2\xdf\x92\x89\x43\x86\x8c\xed\x3c\xcd\x1b\x1a\xd4\x6e\x6b\xa3\xe7\x22\xed\xf9\x52\x4a\x14\xc1\x63\x3b\x74\x78\xc8\xa1\x2b\xe6\xb9\x13\xde\x78\x8b\x9b\x5c\x43\x51\xf1\xf6\xf7\xfd\x4a\x3f\x3d\xe7\x4f\x68\x8b\xb6\xe7\x28\xdb\xba\xbe\xed\x35\xe5\xb6\x63\x28\x82\xc7\x76\xe8\xf0\x90\x43\xc7\x9a\x5a\x82\xd8\x76\xcc\x0d\xd0\xaf\xeb\xfb\x1e\xab\x49\x5c\x43\xba\xc4\x83\x56\x2c\xe8\xc9\xe8\x36\x8b\xbe\x25\x85\xef\x1d\x42\x11\x3c\xb6\x43\x87\x87\x1c\x3a\x59\xdb\x59\x06\xdb\x54\xa3\x8b\x22\x85\x7e\x3c\x89\x66\xd2\x19\x9c\x85\x85\x52\x16\x1c\x49\x66\xbc\x79\x2b\x74\xf8\xb1\xe7\xa6\x28\x82\xc7\x76\xe8\xf0\x90\x43\x77\xb3\x38\xd4\x20\xa7\x95\xfd\xd6\xf3\x82\x3e\xf3\x1c\xa6\xbe\x17\xf1\x6e\x6a\x78\x5f\x86\xaf\x51\x61\x44\xe6\x4b\x65\x03\x6d\x57\x51\x04\x8f\xed\xd0\xe1\x21\x87\xee\x7d\xfb\xf0\x60\x58\xba\xbd\xbf\x4a\x7b\xaf\x47\x33\xf1\xfe\xb0\xb0\x1e\x99\xef\x52\xf9\xdd\x72\xff\x68\x5d\xc9\x4a\xc1\xb6\xe3\x28\x82\xc7\x76\xe8\xf0\x90\x43\x17\xaf\xd0\xe3\xea\x57\x41\x1e\x57\x19\x17\xfe\x29\x1f\xff\xd1\x14\xcc\x28\x8c\xbe\xe9\x5e\xa6\xe0\x94\xab\xb3\xe6\x70\x2e\xe7\x40\x11\x3c\xb6\x43\x87\x87\x1c\xba\x4b\xc3\x24\x97\xcf\xd4\xa7\xa2\xd6\xab\xd9\x05\xe1\x0f\x46\xf6\xad\x6b\xc3\x0d\x8e\x56\xdf\xe3\x11\x0b\x0f\x7f\xc4\xa3\x4e\x6f\x82\x22\x78\x6c\x87\x0e\x0f\x39\x74\x5e\x2c\x9b\x46\x9c\x86\x27\x04\xf8\x66\x1f\x53\xa3\xbf\xea\x18\x12\x70\xac\x43\x87\xf9\x47\xbb\xb7\x3e\x7d\xfe\x30\xaf\xc2\x73\x0e\x45\xf0\xd8\x0e\x1d\x1e\x72\xe8\xdc\xda\x84\x35\xbe\x48\x26\x17\xc6\xea\xf5\x38\x27\xdc\x1a\xeb\xa6\x78\xf6\x3b\xb8\x03\x6f\x93\xe1\xf0\xdb\xc4\x3d\x7e\xf3\x37\x37\x8a\xe0\xb1\x1d\x3a\x3c\xe4\xd0\x9d\xdc\xa1\x1d\xca\x3d\x2d\xce\x13\xc1\x93\xe3\xf8\x98\x3b\x7f\x9f\x38\x5a\xda\x82\xdb\x61\xa8\x7b\xb7\x77\xcf\xae\x2a\x23\xd6\x08\x45\xf0\xff\xe5\xd0\x79\x8e\xb1\x0a\x3a\xa6\xee\x18\x66\x46\xf8\x7b\xcd\x69\xcd\xa7\x48\x4d\x4f\x96\x7c\xe2\x78\xf8\x77\x8e\xdc\xf3\xf1\x5c\x04\xcf\xb3\x83\x85\x0e\x72\xe8\xc8\x2b\x9a\x47\x6e\x08\xd5\x77\x4f\xc9\xe1\x67\x53\x59\x93\xef\xbb\xf6\x45\xa6\x97\xb7\x3d\x34\xff\xa4\xf8\xce\x27\x75\x80\x9b\x70\x30\xb1\x1d\x3a\x3c\xe4\xd0\x95\x0a\x54\x7d\x9d\x7b\x12\x3d\x67\xe8\x32\x1c\xf9\xf2\x51\xc5\xfd\x12\xc9\x8f\x67\xc7\x46\x1e\xbd\x4f\xc0\xd9\x5a\xb9\xbd\xc8\x3b\x8c\x22\x78\x6c\x87\x0e\x0f\x39\x74\x26\x9b\x7d\x31\x44\x11\x62\x17\xf8\xdb\x39\xda\x59\x7a\x02\x3e\x26\xb1\x51\x7e\xa6\x7f\xe0\x63\xf1\x99\xd7\x33\x94\xf1\xdb\x59\x6b\x14\xc1\x63\x3b\x74\x78\xc8\xa1\x5b\x92\x60\xd8\xe8\x70\x2d\x0a\xfb\xed\xfd\x97\x53\x86\x5f\xc8\x14\x37\x2f\x36\x56\x94\xfa\x85\x9e\xa2\x2d\xf1\xe2\x0b\xc3\x49\xc2\x59\xc2\x76\xe8\xf0\x90\x43\xf7\x54\xd9\xc8\xee\x62\xfb\x2f\x63\xe2\x04\x81\x47\x7b\x6e\xae\xa7\xf4\xb2\xa2\xd3\xe2\xd8\x2e\x33\x3a\x25\x29\xb8\x9c\xcd\x71\x77\x46\x11\x3c\xb6\x43\x87\x87\x1c\xba\xd7\x01\x2f\xbe\xb5\x91\xbd\xa0\x69\xfe\x98\xb2\x71\xd1\xae\x3a\x43\xc4\x4b\x30\xf5\xd0\x53\xd9\xfb\x2b\x64\x63\x6a\xd5\xa6\xbc\x8a\x28\x82\xc7\x76\xe8\xf0\x90\x43\x37\x7c\xb9\x33\x98\xf7\x6d\x56\x74\xd4\x87\x20\xd7\xeb\x46\xaf\x1d\xac\xb8\x1f\x06\xdd\xec\x98\xf7\x79\x18\x22\x1d\xce\x72\xb2\x83\x70\xca\xb1\x1d\x3a\x3c\xe4\xd0\x65\x38\x2b\x4e\xd8\xd3\xae\x5e\x30\xa9\x1c\x95\xda\xad\x28\x13\xe3\x24\x23\x3f\xd5\x4c\x3b\xda\x4d\x9b\xf9\x24\xc4\xae\xc6\x57\x00\x45\xf0\xd8\x0e\x1d\x1e\x72\xe8\xe2\x85\x8e\x76\x02\x9f\x79\xaa\xd5\xca\x91\xef\xf3\x37\x12\xa8\x33\x45\x04\x15\x04\x8e\xab\x10\xf9\x2c\xb8\xe3\x37\x32\xdc\x65\x50\x04\x8f\xed\xd0\xe1\x21\x87\x8e\x47\xf6\x98\x7d\x54\x61\x5e\xc6\x57\x76\x8a\xcb\x29\x57\x4e\xbf\xca\xa7\x1d\xcb\xeb\xf9\xe9\x8b\x1b\x9a\x79\x9e\x29\x3f\xf1\xec\x06\x8a\xe0\xb1\x1d\x3a\x3c\xe4\xd0\x59\xf4\x85\xfd\x6c\xef\xb3\x2b\x91\x4c\x65\xf3\xe3\x78\x29\x7a\xac\x7e\x38\x9a\x44\x56\xfb\x7c\x39\x7b\x5b\x37\x13\x9f\xfe\x3f\x15\x14\xc1\x63\x3b\x74\x78\xc8\xa1\x7b\xb2\x1e\x79\xcb\xcc\x7a\xb6\x5f\xbe\x67\x97\xe9\x69\x79\xf2\x6b\xbb\xd1\xc5\x40\x93\x76\xdd\xc0\xe9\xa7\xd6\x24\x5f\x3d\xd9\xae\xa3\x08\x1e\xdb\xa1\xc3\x43\x0e\xdd\xfc\xa5\x43\x9b\x8d\xc6\xdd\xc7\xf6\x05\x13\x3e\x05\xbe\x59\x7b\x34\xe4\x8b\x52\x2b\xf6\xaa\x85\xc7\x19\x1b\x5f\xf3\xe6\xc9\x25\x47\x11\x3c\xb6\x43\x87\x87\x1c\xba\x64\x0a\x07\x49\xa7\xd2\x68\x87\xe5\x77\x9d\xfe\x99\xe6\x26\x5a\x2a\x19\x65\xbf\xce\x8d\x9b\x5d\x7a\x9d\xec\x54\xa7\x50\xbb\x61\x8f\x22\x78\x6c\x87\x0e\x0f\x39\x74\x1f\x0d\x45\xc2\x0c\xa4\xb9\xad\x32\x1e\x64\x47\x9c\xed\x0b\x48\x18\xb4\x9f\x5f\x74\x8e\xa7\xdd\xc3\x7b\x14\x76\xee\x39\x5d\x50\x47\x11\x3c\xb6\x43\x87\x87\x1c\x3a\x49\x41\x15\xcb\x00\x1d\x61\xa3\x9a\x11\x76\xd4\xe9\xdd\xf1\x13\x7a\x53\xfd\xda\x5f\x78\xed\x55\xee\xfd\x5e\x20\x76\x96\x58\x21\x9c\x33\x6c\x87\x0e\x0f\x39\x74\x76\x17\x2b\x16\xf9\x05\xe3\x85\x93\x42\xcf\x2e\x4c\x0b\xaa\xdb\x34\xf4\x46\xea\xa6\x8c\xcc\x3e\xd0\x2b\x10\xb6\xdf\x73\xa3\x22\x1c\x0d\x6c\x87\x0e\x0f\x39\x74\x35\xed\x46\x1f\x6d\xec\x82\xc9\x9b\x04\x5a\x6d\xd3\x6c\x71\xc7\xb8\xe9\xc5\x9f\xb1\x9c\xa4\xa1\x8d\x5a\xa7\x2c\x3a\x6d\x7e\x49\x0e\x45\xf0\xd8\x0e\x1d\x1e\x72\xe8\x86\x28\xbe\x89\x19\xe9\x25\x21\xdb\x95\xd6\x81\x12\xce\x62\x35\x57\xc6\x14\xfc\xce\xc6\xf0\x15\x6b\xff\x01\x2b\x5a\xdf\x4d\xec\x50\x04\x8f\xed\xd0\xe1\x21\x87\xce\xe9\xca\x61\xef\xce\xe6\xcb\x3b\x44\xff\x5a\x92\x14\x34\x73\xe4\x62\xd9\x5c\x77\x64\x1e\xd8\x9c\x12\xd8\xbf\x65\xf0\x86\x05\x21\xcc\x33\x6c\x87\x0e\x0f\x39\x74\x31\xb5\x2a\xa8\xdc\xdb\x29\x12\x3a\xad\x1b\xe3\x4d\x3c\xee\x1d\xc3\xa6\x7f\x9b\x8f\x6a\x11\xc7\x77\x1c\xff\x12\x5f\xde\xae\xeb\x84\x22\x78\x6c\x87\x0e\x0f\x39\x74\x2e\x3b\x49\x37\x7e\x3a\xed\x75\xdf\x61\x06\x63\xa6\x12\xc9\xdf\x04\xf4\xdd\xdf\x32\xfb\xcf\x65\x19\xb7\x33\x17\xbd\x9b\xca\xb0\x45\x11\x3c\xb6\x43\x87\x87\x1c\x3a\xe2\x5b\x24\x34\x2c\xbe\x62\xc4\x11\x4c\x93\x67\x39\x66\x7b\x62\xb8\xbe\x53\x50\x0e\xd8\xd6\x5b\xeb\x14\xe4\x87\x67\x5c\x6f\x23\x7c\x66\xd8\x0e\x1d\x1e\x72\xe8\x02\xde\x2d\xfc\x34\x46\x6a\xae\xad\xdf\x8a\xcc\x5b\xf8\xa0\xf5\x54\xd3\x42\x6e\x3d\x20\x76\x36\xd7\x89\xcd\x69\xb3\x2b\xf4\x24\x61\xd2\x62\x3b\x74\x78\xc8\xa1\x6b\x5e\xde\xe2\x9f\xaf\x97\xd7\x7f\x1b\x20\x7f\x87\xaa\x9c\xf5\x8f\x34\x75\xc1\xa2\x18\xad\xea\x86\x68\x4e\xdc\x9d\xe9\xbe\x6d\x56\x14\xc1\x63\x3b\x74\x78\xc8\xa1\xa3\x23\x0d\x6d\x25\xfa\xf6\xf3\xee\xf0\x15\x81\x3e\xee\x86\x92\x25\x9a\x8b\xfc\xc4\xde\xe7\xc4\x68\x26\x6d\xb3\x6f\x1b\xbb\xc9\x5d\x42\x11\x3c\xb6\x43\x87\x87\x1c\xba\xaa\x8b\x3e\x56\xbe\xba\x5b\x97\x29\xf7\x5e\x3d\x77\x76\xd2\xa6\x69\x67\x7c\x16\x3d\xf4\xc5\xa3\x8b\x62\x8e\x2c\x74\xc1\x9b\x86\x07\x45\xf0\xd8\x0e\x1d\x1e\x72\xe8\xfc\xb5\x5e\xdb\xc9\xaf\x12\x39\xb2\x2d\xa5\xb0\xaa\xac\x1d\xbf\x47\xd1\x6b\x7a\xec\xc7\x1a\x9b\x5f\xe7\x4e\x6c\xee\xc6\x2e\x31\xa1\xd0\x61\x3b\x74\x78\xc8\xa1\x8b\x90\x20\x22\x96\xff\xf4\xc3\x84\xe8\x45\xfc\xfd\x59\x91\xb8\x85\x29\x6a\x94\x89\x5a\xfc\xab\x7f\x5c\x9e\xdd\x4c\x45\xc8\x6d\xc2\xd4\xc0\x76\xe8\xf0\x90\x43\x27\xd8\xe8\x7a\x9e\x78\xd3\x75\x49\x4d\xde\x80\x86\xdb\x28\xbf\xe3\x26\x0f\xed\xf3\x30\x09\x6a\x1b\xc4\x54\xb4\x37\x87\x8b\x41\x1c\x45\xf0\xd8\x0e\x1d\x1e\x72\xe8\xee\x4f\xd0\x47\xe4\x1d\x19\x3c\x22\xce\x94\xbb\xa5\x11\xb0\x77\x93\x95\xd9\xdb\x7c\xd3\x35\x02\x79\xd8\x72\x91\x8c\xd8\xb6\xd8\x0a\x45\xf0\xd8\x0e\x1d\x1e\x72\xe8\x14\x5e\x45\x72\x9c\xb5\x5a\x2d\x0f\x53\x9e\x66\x7a\x7e\xca\xc1\x34\x3d\x6e\xb1\xdc\x61\xfd\x31\x1a\xf0\x2a\x44\x60\xf6\xf3\x69\xc2\x1f\xc3\x72\xe8\x2a\x68\xfe\x57\xe8\xbe\xd8\x57\xbf\x75\xd3\x0c\x13\x3c\x79\xa5\xc8\xa7\x46\x52\x8b\xc4\xf6\x2d\x5f\xbc\x92\x80\xc9\x62\x63\xee\x75\x73\xf5\x4b\x7c\x4b\x68\xdc\x99\x7e\x7e\x03\x1e\xa2\xff\xa5\x79\xac\xcf\xb4\x0d\x58\xe3\x22\xee\x8f\xfb\x8e\x0e\xda\x66\x3d\xae\xff\xb3\x88\x4e\x1c\x39\x12\x22\x69\xbf\x72\xf5\xd7\x9d\x90\xb7\x07\xa2\x01\x7f\x4c\x8a\x75\x8f\x05\x3b\x84\xb9\x24\x51\xd8\xc6\x9b\x8d\x7b\xaf\x25\xfa\xd5\x8a\xfe\x66\x2c\xd4\x35\x9d\x10\xae\xb8\xc2\x72\x20\x6a\x5c\x6d\x19\x8b\x9a\x70\x4f\xa5\xf6\x8b\x1c\xce\x2f\x52\x3c\xeb\x38\xde\x43\xa4\xab\xdb\x13\xb3\x6b\xed\x77\x7e\x44\x8d\x32\xfa\x40\xb4\x48\xe4\xd3\x1d\x25\xee\xdb\xf2\xad\x27\x3f\x98\xc5\x59\x70\x8d\x25\x66\x4c\xb0\x50\x31\x56\xec\xbf\xcc\x9c\x64\x27\x7e\xf2\x25\xeb\x40\xb4\x81\xbd\x5e\xf1\x58\x8c\xc4\xc2\x29\xcd\x6b\x81\xd4\x0a\x97\x9e\x5c\x7a\x7d\x42\xd3\xb2\xf8\x94\xd1\xb7\x36\x39\xba\x76\xaf\xdb\xe9\x07\xa2\x91\x91\xe1\xec\x64\x1c\xee\x0f\xad\xd7\x5c\xa8\xa2\x4c\x54\x4e\xfd\x66\xb6\x52\xa1\xe4\x79\xd3\xad\x73\x5d\x94\x49\xfd\x89\xf4\xd8\x81\xa8\x9c\xcd\xe8\x24\x91\x9e\x9f\x79\xf5\xf1\xbc\x9e\xa0\x59\x71\x91\x47\x52\x1e\xde\x4f\x57\x1f\x4c\xa8\xac\x87\x2a\x11\x15\x64\x98\x1f\x88\x7e\xb2\x7c\xa6\x7e\x97\x95\x3c\x45\x6d\x73\x81\xa8\xfb\x72\x72\x49\xd1\xfc\x91\x7c\xb6\x19\x01\x4b\xc5\xc7\xd9\x99\x47\x2f\xc6\x35\x1f\x88\x5e\x73\x63\xbf\xa0\x30\x66\x40\x95\x1d\xdf\xec\xb1\x77\xc7\x99\x7e\xa2\xa2\x4b\xe5\x3e\xfe\xb6\xc5\x5c\x11\x7d\xcd\x5f\x59\x43\xa9\x03\x51\x67\x92\x1b\xc6\x46\x32\x1f\xd3\x42\x68\x4a\x3b\xd3\xca\xe4\x29\x76\xe3\x8c\xf3\x23\xdc\x0d\x37\x53\xdd\xdf\xde\x3f\x9d\x7f\xae\xfd\x40\xf4\xc1\xb5\xb9\x85\x7c\xe7\x37\x1a\x3a\xcb\x83\x47\x07\x8e\x2a\x89\xf4\x18\xa9\x0a\xe6\xab\x39\xac\x90\x09\xba\x91\x48\x2a\x03\xf7\x83\x51\x03\xab\x6f\xb7\x3f\x26\xd2\x3b\xf5\x3d\xf9\xb9\xe9\x2b\x72\xd3\x55\x7b\x78\x7c\x40\xd2\x85\x34\x25\x98\xef\x48\x1b\x75\x7c\xdf\x81\xe8\xa9\xa2\xb0\xce\xd4\x18\xeb\x61\xd3\x3b\xc4\x21\xaa\xaf\xf2\x2b\xe8\xe3\x3f\x0a\xdd\x8f\x1d\xc9\x42\xe6\x0e\x83\xc1\x8a\xc8\x94\x03\xd1\x0e\x43\x9a\x7f\xad\x42\xd3\xf4\xe3\x6e\xd2\xa5\x09\x9e\xc7\x9c\xae\xff\x8e\xe2\x48\xbf\xe4\x66\xbd\x7c\x4a\xf2\x56\xee\xbb\x17\xea\x07\xa2\xec\xf6\xfb\x9c\x69\xb1\xb9\x4e\x87\xbe\x88\x6b\xda\xec\x2e\x1a\x5d\xd6\xe3\xfa\xf7\x93\xb9\x5e\x61\x5c\x36\x7a\x78\xfd\xcb\x22\xf9\x81\x68\x12\x99\xed\x8b\x1e\x9d\x43\x05\xdd\xaf\x1b\xce\xf2\xc5\xd5\x1c\x7a\x9b\x6b\x60\xb9\x77\xe1\x2b\x99\xf5\xc8\xf1\xba\x14\xf7\xec\x88\x03\xd1\xe1\x37\x14\x3e\x81\x39\xd3\x12\xfa\xea\xdf\x9b\x24\x59\xaa\xef\x77\x0e\x32\xfe\x6a\xd2\x7f\xbd\xe2\xc9\xae\xd6\xf3\x22\xc3\xec\xcb\x81\x68\xe9\x55\x01\xd3\xfc\xab\x2f\xe6\xb2\xee\xbd\x48\x6b\x21\xde\xec\xac\x0d\x57\x72\xb2\x6e\x10\x22\xa9\xd5\x79\xb5\x6d\xe2\x16\x77\xeb\x40\xd4\x68\x49\xbc\xff\x63\x4b\xfa\x33\xf4\x19\xb7\xe7\xd8\xae\xa9\x5f\x31\xcd\x54\xd5\xab\x07\x08\x6f\x7f\x5b\x5a\x44\xc9\x51\xba\xf0\x83\xe7\xd5\xc2\xae\x55\x73\xab\xdf\xb7\x9f\x9b\x31\x16\x89\x72\x3d\xa3\x22\x3f\x1f\x41\xf4\x4e\x5d\xaa\x80\x2a\xe4\xeb\xbd\xb7\x73\xfb\x07\xa2\xd4\xcc\x4a\x7f\xbe\x10\x51\xac\xec\x7a\xad\x5d\x0d\xac\xfb\xfa\xfc\x5c\xe8\x8b\xbf\xed\xa1\xaf\x8f\x93\x5d\x6b\x8f\xce\x89\x4d\xb0\x3c\x10\x8d\xbf\x2c\xf5\x2f\xbf\x50\x79\xf6\x92\xd9\x9b\xaf\x6f\xfa\xc9\x2a\x03\x43\x4f\x35\xf1\x32\x09\x85\x64\x6f\x05\xd7\xdb\xfd\x19\x12\x3a\x10\x95\x8a\xa7\x37\xfe\xd2\x77\x5b\xbe\xa0\x37\x2a\x84\xa9\x8e\xf2\x71\x70\xfe\xe3\xed\xc3\x64\xb6\x86\x33\xd4\xc9\x6c\x22\x0c\xe7\x0e\xbe\xd6\x05\x1e\xbd\x22\xfa\xd9\x93\x88\xa2\x76\x88\x82\x8a\x5d\xc5\x8b\xcb\xdf\x9b\x2e\x58\xcc\x79\x5f\xbb\x93\x1b\x71\x6a\xef\x17\x87\xe0\x81\x28\xe5\x4e\x4d\x9f\x52\x9b\xd5\x56\xf0\xb4\xcb\xa5\x33\x4d\x8a\x37\x43\xad\xac\xc9\x58\x1d\x76\x0c\x5c\xe4\xd6\xc2\xee\xe2\x9f\xbe\x38\x10\x0d\x62\x7c\xae\x80\xa4\x66\xd0\xa7\x94\xcb\xbb\x7c\x7f\x73\xe9\x50\x21\x43\x5e\x8e\x37\x83\xec\xd7\x53\xd3\x8c\xac\xb2\x83\x4c\x03\x07\xa2\x59\xdf\x59\xae\x74\x37\x09\x4b\x97\xbe\x13\xb2\xdc\xb8\x12\x67\xdf\x1f\xdd\x6a\x79\xdd\x6c\xe4\x5b\xa4\x24\xbf\x3a\xd3\x07\x89\x87\x07\xa2\x27\xaf\xbe\xfc\xe1\x9a\xbd\x21\x44\xfb\xb9\x40\xc6\xfe\x5e\xcb\xc9\xab\xb5\x6b\xa7\x3a\xb7\x71\x2c\xbe\xbe\xdf\xf1\x1c\x3c\xb6\xc2\x07\xa2\x9f\x05\x0f\xe5\xbd\x5f\xba\x2c\x31\xc8\x5f\xd2\xf1\xea\x48\xc7\x66\xde\xe6\x57\x46\x56\xa6\x29\xde\x73\xaf\x46\x5a\x8f\x5a\xad\x98\x1e\x88\x46\x70\x95\xed\x65\xb9\x3b\x3a\xdd\x8d\xf6\xf7\x96\xbe\x1d\x29\x24\x20\xc1\xbc\xbe\x32\x92\x1d\x9f\x94\x7d\x66\x94\xaa\xb1\x30\xff\x40\x94\x2f\x76\x20\x8a\x4f\x27\x6f\xa3\xdb\x65\x23\xf4\x68\x42\x50\x9c\x45\xf9\xe1\x51\x79\xa7\xfd\xba\xfb\x51\xad\xa2\xe7\x51\x07\xdd\x03\xd1\x84\xcf\xdf\xd2\x4c\x1b\x3f\x9f\x18\x38\x71\x78\xfa\xcc\x83\xf3\xfe\xea\x7d\x92\xcd\x42\xf9\x99\xf6\xb4\xc7\x0b\xbe\x31\x15\x49\xe6\x1c\x88\xba\x0e\xfe\xd8\xcb\xfa\x33\x17\x72\xf9\xdb\x8b\x8d\x94\xa6\xdd\x1c\x34\xc6\xa3\x9f\xfa\x46\x92\x39\x2e\xf4\x5d\xa9\x32\x4b\xdd\xc1\xa7\x60\x56\x9c\xa5\xc0\x5b\xae\x6c\x75\x5f\x4c\x52\x7b\x26\xc2\x3f\x59\x5d\xea\x2e\xc7\xf2\x98\xd1\x69\x99\xc7\x2e\x6b\xef\x58\x74\x9e\x1c\x88\x7e\x33\x34\xda\xcd\x56\x95\xcd\xa6\xb5\xea\x1a\x30\x64\x62\x2c\x2b\xa5\xe3\x2a\xab\xe9\x9e\x3c\xe3\xcc\x52\x70\x81\xfc\xf7\x33\xfc\x81\xe8\x7b\x1c\x4f\xe4\x96\xc6\xcf\x91\xe7\x87\xe4\xf5\xd6\xee\xd4\xcb\xc5\x69\x57\x1d\x0e\x0d\x13\x32\x76\x76\xfe\xe4\xae\x99\x5b\xc3\x7b\x20\xda\xe3\xff\xad\x5c\xb7\x57\xe8\xfd\xd2\xb2\x41\x9b\xc8\x85\x0d\x8a\x52\x03\x12\xba\x43\x4a\x37\xdd\x5b\x4c\x04\x98\x36\x1a\x8f\x1e\x39\x10\x5d\xb2\xd6\xa6\xcf\x6d\xaf\xb2\x90\x6d\x55\xf8\xa6\xf3\xf7\x77\xb9\x89\x80\x70\x4e\x52\xd6\x66\x39\x69\x56\xee\xc6\x58\x33\x4f\xc2\xff\x5f\x54\x6b\xbd\xfa\xc4\x13\xe2\x6b\xd4\x6c\x81\x1c\xb7\x67\xc8\x3d\xae\x2f\x2a\xab\x72\x98\x15\x9e\xd1\x28\x2d\xdb\x68\x8c\xd5\x0f\x09\x39\x10\xa5\x57\xdd\xd1\x2b\xd5\xbf\xa3\xc9\xa8\x10\xc4\x5d\x98\x1b\xbe\xfb\xdb\xb8\xf6\xeb\x07\x92\xbf\xee\x1f\x75\x36\x22\x3c\xa6\x7c\x68\x0f\x44\x3d\x96\xcb\x4e\xc4\x70\xfc\x1b\xf7\x55\x29\x75\x08\xb6\x15\x93\xf1\x4a\x56\x64\xf6\x33\xbc\xf1\x66\xb5\xa0\xeb\x8c\x48\xdc\xff\x61\xee\xcf\xa3\xb9\xfa\xfe\xbf\x7f\xdc\x94\x39\x2a\x43\xc6\x12\x42\x66\x19\x43\xe6\x21\x73\x66\x32\x67\x2c\x64\xc8\x9c\x79\x16\x19\x32\x46\xa6\x28\x32\x85\x50\x84\xcc\x21\xf3\x50\x14\x92\xb1\xcc\x33\x99\xfa\xad\xcf\xe7\xfd\x3a\xe7\xd7\xfb\x70\xb5\x5f\xd7\xfa\xfa\xe3\x5a\xab\x3f\x6f\x3d\xce\xde\xdb\xed\xb9\xcf\x3e\xfb\x9c\xfb\x39\x86\x7f\x3a\x30\xda\x3d\xf2\xfb\xc1\x23\x29\xdd\x5b\xf8\x6b\x76\x02\xea\xa4\x84\x64\x8a\x76\xd7\x7d\xbb\x4c\xbb\x03\xc3\xa4\x7d\xbd\x25\x4e\x39\xfe\x81\xbe\x96\x96\x4d\xce\x21\xb6\xce\xce\xfc\xd2\xe4\x44\x38\x78\x93\x0d\xd5\xa9\x92\xe3\x22\xba\x45\xe2\x10\xfa\x2e\x4d\x9d\x79\xa6\xdc\x1f\x68\x58\xd6\xb7\x1f\xfc\x0f\xae\x7a\xfa\xd8\x7c\x2d\xb0\x79\x74\xab\xb3\x83\x72\x71\x52\x72\xeb\x41\x8e\x5d\xe7\x47\xc9\xf2\x65\xb3\x81\x3f\x50\x52\xaf\xb3\xb4\x86\xb8\x78\x1a\x8b\x07\x87\xa1\x9c\xda\xfe\x0a\xaa\xb7\x1d\xbf\x3c\x75\xfb\x79\x33\x87\x62\x60\x78\x66\x56\x52\xf5\x0f\xb4\xf8\x27\xa1\x74\xa4\xa3\x55\x23\xe6\x25\x5f\xf5\xef\x83\x3a\xa7\x8c\x0a\x77\x7f\xda\xc5\xa2\x68\xdc\xbb\x42\x69\x5d\x53\xdd\xe1\xf0\xe7\x9c\xa5\x5f\x26\x13\x1f\xe2\x26\xf7\x96\x72\x77\xe6\x56\xab\x54\x6b\x0d\xdf\x69\xdb\x2b\x56\xbc\x3e\xdf\xce\xa5\x16\x5a\x11\x55\x2f\x87\xa0\xfd\xbb\xc5\xc0\xc3\x3f\x6a\xd6\x18\xda\x25\x50\x08\x79\x32\x11\xbc\xcc\x5b\xfa\xfd\x26\xff\xce\x29\x95\xf1\x71\xd7\xfd\x74\x07\xcc\x47\xda\x8f\x76\x5e\x0a\x96\xfd\x81\xca\x8a\xe8\xa0\xfd\x48\xb7\xde\xee\xaf\x4a\xbc\xa3\x14\xc0\x1e\x7d\xff\xa3\x57\xed\xa8\xe4\x74\x69\xfb\x72\xf4\xcc\xa8\xa6\xde\x4b\x31\x31\x32\x7a\x32\x7a\x7f\x31\xb1\x3f\xfe\x8f\x21\xc9\xc1\x63\xfe\x27\x9c\xf6\x6d\x2d\x4b\x2d\x1d\xf7\x36\x66\xf7\x2e\xe1\xe6\xe6\xdc\x69\xd6\x50\x0b\xed\xca\xab\xf8\x61\x9b\xfd\x07\xda\x93\xe2\x93\xf4\x4c\xe4\xe7\xe0\xd8\x57\xf9\x9a\xa7\xf6\x83\xb2\xc9\xa6\x5b\xb5\x2f\x3e\x77\x35\x5d\x2c\x6d\x5e\x2b\xef\x5e\x90\xf8\xbf\xa8\x5a\x8c\xfa\xef\x3a\x17\x88\x8e\x7a\x2e\x40\x1c\x2b\xe0\x8f\xd2\xb9\xb1\x0f\x6f\xdf\x4f\x16\xa5\x70\xe8\x7b\x54\xde\x3e\xe9\xd4\x7c\x69\xb4\xa1\x38\x4b\x8d\xaa\xe9\x15\xa7\xbc\xb8\xa9\x30\x53\xee\x1f\xe8\xec\xcb\x98\x29\xfc\x82\x0d\x25\xec\x28\x07\xfc\xc7\xc1\xa5\x1c\xcb\xca\xcd\xf2\xca\x2a\xfe\x55\x7e\x03\xc4\x83\x6d\x54\x74\xf7\xff\x40\xdd\x18\x57\x27\x06\x72\x25\xca\xd0\x4b\xb3\xb6\x70\x33\x4b\x65\xf3\xde\xc4\x3a\xa9\x63\xa1\x67\xd7\x7c\x0d\x6b\xa1\x45\xcf\xb9\xeb\xfb\x0d\xeb\xdf\x1d\x3e\x40\xfc\xb7\x6f\x68\xb8\xb8\x86\x98\xd8\x7f\x0d\x73\xcf\x03\x74\xbd\xbd\x20\xe2\xe0\x35\xc9\xf3\x54\xe7\x26\x6f\x65\x5a\x5e\xb7\xba\xd4\x82\x3d\xff\xe4\xd1\x86\xf1\x33\x6c\xde\x87\x75\xff\x17\xc3\xec\x2f\x8d\x22\x86\x82\x82\x22\x83\x82\xe6\x8b\x82\x82\xe2\x2f\x26\xf6\x9f\x7f\xe1\x92\xbe\x0a\xa8\x88\xa3\xc6\x6d\x64\xc5\xf8\x07\xa1\xb1\x9d\x79\xb7\xdd\x87\x12\x68\xcb\x47\x6f\x9e\x31\xb5\x6a\x24\xc6\xeb\x69\x8b\xcf\xcd\x63\xb3\x4e\x7d\x02\x47\x95\x42\xe1\x17\x43\x1e\x56\xc7\x86\x97\x95\x6c\x41\xb2\x62\x76\xd9\x15\xd5\x9c\x92\x7f\xdf\xe1\x42\xad\xc2\x77\x9a\x3b\x6c\xea\xd3\xe1\x49\x98\x9c\x2c\x65\x27\x71\x58\x5f\xb5\x23\x87\xa5\xb6\xf3\xdb\xd0\xd3\x53\x7f\x1a\xf0\xf5\x83\xe6\x32\xfe\x8c\x95\x3a\x9f\x8a\x8c\x0a\x9f\xff\xbd\x49\xf7\x47\x8b\x7e\x87\x17\xd2\x4e\xa4\xb7\x86\x47\x0e\xdb\xd7\x74\x01\xdb\x7e\x5c\x5a\x11\xf5\xd6\x84\x81\x28\x5e\x63\x56\xaf\xa2\x8e\x5a\x0a\xb7\xdb\xa0\x2a\x87\x47\xcd\x43\x1e\xb7\xcd\x13\xe9\xad\xfb\x91\xc3\x9e\xeb\xdd\x51\x0f\xb8\x7b\xa9\x2d\xf8\x39\xb9\xd6\x2e\x35\x36\xe9\xb6\x57\x87\xc9\x86\x6e\xbe\xb3\x92\xfb\xcc\x85\xe7\xfd\x62\x81\x27\xd2\xdb\xf8\x23\x87\x6d\x2d\xe1\x94\x79\x60\xcd\xe2\x48\xb4\x2e\x21\x5c\xf5\x04\x53\x4f\xfd\x3a\xef\xad\xef\xb4\xec\x9e\xb8\x96\x12\xa4\xe3\x6e\xe6\xa2\x27\xd2\xdb\xe2\x23\x87\x0d\x1e\xf3\x08\xae\x0a\x88\xca\xa8\x37\xb9\x8c\xa9\xe8\x9c\xd5\x10\xd1\x41\xf8\x58\xf3\x7b\x67\xe5\xf5\xa2\xb5\xc4\x22\xc2\x97\x2f\xfe\xbf\x1f\x56\xef\xdf\xfd\x50\x03\x31\x4e\xa1\x06\x48\xa0\xa1\xf8\xfd\xb9\x58\xbf\x50\x33\x72\x78\x88\xaa\x13\xc3\x1f\x4e\xe3\x21\xce\xf4\xa4\x9e\x2a\xb6\x6d\xec\x69\xb2\xb2\x42\x55\xb0\x8a\x38\x53\xfa\x6d\x5f\xed\x7f\xc7\x05\x48\xf8\xfe\x57\xdd\x84\xd2\x20\x27\x1c\x66\xa9\x99\x5d\xaf\xf1\x89\xdf\x0c\xfc\x71\xb2\x3d\xda\xac\x5d\x6b\xe8\x34\x1c\x37\xf4\xa4\x8d\x28\x0a\xce\x41\x75\x41\x5c\x80\x04\x0a\xc6\x9f\x75\xdf\x52\x25\x0a\x49\xe6\x33\x77\xb6\xd1\x7c\xf1\x5e\xa8\xd9\xbb\x5e\x85\x1f\x79\x65\x44\x03\x0f\x1b\x9d\x77\x2f\x47\x32\xff\x54\x39\x54\x17\xc4\x21\xdb\x7b\x91\x84\x4a\xeb\xee\xe1\x80\x83\x4c\xfb\x3e\xa5\xcd\xb5\x75\x9c\x8b\xe7\xf6\xcd\x72\x19\xd8\x4b\x5f\xc7\x5c\xa3\x8b\x21\xff\xc4\x08\xd5\x05\x71\x01\x12\x67\xfe\xab\xee\x28\x79\xc5\xde\xb6\x4a\x3b\x5e\xa7\xf5\xfd\x9f\xca\xa9\x13\xe3\xda\xd6\xbf\xd1\xd1\xbf\xb1\x32\x37\xd9\x59\x13\x4f\xd7\x4c\x60\xfa\x4a\xfd\x3b\x2e\x40\x02\x85\xc6\xd7\x2f\x48\x5c\x43\x4c\x02\x05\xed\x88\x06\x1c\xff\x4e\x9f\x40\x74\x14\x94\x00\x71\x14\x5f\x5f\xbd\x7f\x37\xc7\x1e\x27\xcc\x2f\x8a\xef\x2c\x9b\xe6\xf6\xc4\x3a\xc6\x51\x0f\x3e\x68\x92\x0b\x31\xda\xe1\x3f\x0e\x9a\xed\x67\x6d\xea\xe1\x0a\xc4\x63\x95\x98\x84\x06\x0a\xc4\x21\xff\x00\x11\x39\x4a\xcf\x43\x1e\xb2\xc5\x3e\x8f\x3b\xd3\x9a\x73\xf9\xb5\x7f\x25\x45\xda\x8b\x01\x4e\xf3\xee\x1c\x9c\xdd\x97\x77\x0b\x29\x19\xa0\xba\x20\x0e\x29\x4c\xa4\x64\x1a\x6d\xfd\xb0\xd4\x42\x4c\x98\x45\x04\xe6\x01\x7d\xd8\x7e\x2b\x79\x64\xb4\xd1\xd3\x67\xd7\x4b\xd0\x59\x7c\x63\x85\x0d\xa1\xba\x20\x0e\xd9\xde\x2c\x0f\x45\x0f\x56\xf9\x96\xf8\xa6\x66\x6e\x26\xf2\x95\xa9\xfa\x9b\x25\x1e\x61\xef\xaf\xc8\x2b\xdf\x18\x32\x7d\xb4\xfc\x9c\xeb\x0b\x54\x17\xc4\x21\x85\x61\x8a\xe2\x36\x60\x9a\x9c\xaf\x44\x17\xbe\xa7\xf1\x9c\xb2\x45\x55\xa6\x75\xe0\xc3\xbc\x3d\xc5\x5e\x15\x36\x46\xe8\x2e\xf5\xcc\x47\x5f\x99\x7f\xc7\xfd\x23\xcc\xff\x9e\x59\x8f\x53\x46\xef\xdf\x9d\xef\x8e\x53\x80\xc1\x7c\x70\xbc\xf6\x0c\x43\x40\x29\x8d\x3d\xa6\xd2\x2f\xf7\xe8\x64\x05\xf6\x2c\xd1\x14\x81\x45\x99\x1d\x46\xc7\x1a\x27\x13\x35\xa8\xeb\x20\x0e\x39\xa4\xe7\x59\x89\x99\xa4\xbe\xc5\xcb\x60\xca\xf9\x6b\xa4\x1b\xa4\xc6\xe2\x9d\xc1\xb7\x8a\x60\x28\xb7\x6a\x31\x3e\xc7\x16\x66\xf2\xb5\x0c\xaa\x0b\xe2\x90\x0a\xec\xec\x75\x8f\x56\x97\x87\xa9\xe4\xc5\xfa\xd4\xab\x49\xcc\x5d\xb2\x3d\xd5\x2e\x79\x18\x9a\x21\x80\x96\xea\xcd\x46\x28\x66\x99\x02\xd5\x05\x71\xc8\xf6\x3e\xb3\x49\xe3\x7a\x2d\x23\x97\x40\xe3\xa5\xc1\x40\xcc\xe1\x32\x96\x9a\x85\xf2\x78\x02\xad\xb3\xb4\x41\xfe\xd5\x04\xbe\x58\x56\x38\x54\x17\xc4\x21\x15\x38\x6c\x95\x79\x2f\x67\xe5\x7f\x3d\x53\x09\x45\xa3\x2c\x67\xec\x72\x1d\xef\xca\xea\xb5\x4f\x7b\x4c\x82\x8c\x37\x13\xcf\x0c\x08\x4b\xfa\xca\xfe\x3b\xee\x1f\x05\xfe\xb3\xcc\xf9\x8b\x03\xa0\xc5\xc7\x71\x0e\x48\x63\x24\xd3\x2d\x45\x08\x70\x98\xb2\xd6\x79\x7c\x75\xa0\x7c\x72\x0d\xdd\x3c\x40\xe8\x59\x03\x7a\xe7\xed\xcb\x5d\x3a\x8f\x37\xcf\x40\x7d\x07\x71\xc8\x31\x8d\x15\xa7\xc5\xcc\x31\x71\x35\xde\x0d\x30\x4e\xe9\xca\x11\xb0\x29\x73\x1b\xe9\xcc\xf8\x76\x73\xf7\x39\x36\x8e\xa4\xdf\x27\xa3\x1b\x50\x5d\x10\x87\x74\xa0\xa1\xe4\x63\x67\x7c\x7e\x80\xec\x61\x58\xe7\xca\x25\x34\x8d\xf9\xae\x24\x23\x76\x2e\xac\xa1\x6b\x65\xaf\xde\x3f\xb8\xbc\x93\x7c\x0f\xaa\x0b\xe2\x90\xed\xe5\x2a\x7b\x32\x86\x4b\xc0\xd3\x71\x70\x27\xc0\xd5\x67\x10\x93\xb4\xec\x66\x86\xe3\xe1\xc2\x8d\xcc\xb3\xc6\x8b\xe4\xcb\xd1\x9e\x58\x50\x5d\x10\x87\x74\xc0\xc5\xe3\x9e\x72\xec\xa1\xd5\xaa\x40\xbd\xab\x70\x10\x9f\x9d\x4a\x05\xee\x9d\x39\x17\xd9\xef\x0c\x1c\x55\xf6\xba\xb7\x4b\xca\x8b\x20\x07\x40\x1c\xe4\xc0\xff\xae\x39\xff\xe2\x00\x68\x25\x78\x9c\x03\xbc\xef\xb4\xbb\x36\x2f\xcf\x5a\xbf\x9f\x90\x6c\xe1\x8a\xf2\xad\x9d\x2d\x49\xe0\xae\x9a\xee\x7a\xc4\xca\xf8\x53\xdf\x91\x9d\x13\x3e\x15\x80\x38\xe4\x98\x76\xf4\x60\x1f\x48\x9e\x95\x7f\x68\xd2\x7e\xf3\x53\x30\xeb\x69\x0d\x0f\xda\xae\xa4\x40\xad\x04\xd1\xac\x37\xea\xf3\x1c\xae\xe6\x42\x50\x5d\x10\x87\x74\x40\x91\x95\xcf\x81\x0f\x2f\x93\x52\x5b\x30\xcb\xe5\xdc\x2f\xe5\x8a\x2c\xa9\xa0\x72\x49\xbd\xce\xad\x8e\x9e\x81\x91\xaa\xa9\x4c\x17\xa8\x2e\x88\x43\xb6\xb7\x31\xb3\x83\xe4\xfd\x57\xa3\x53\x6d\x2d\xc2\x5e\x83\x5e\xf7\xc9\xc8\x13\x4e\xbf\xbb\x43\x90\x13\x73\x7f\x3c\xb5\xca\x58\x7c\x60\x01\xaa\x0b\xe2\x90\x0e\x2c\x0f\x2c\xea\x25\x52\x4e\x8a\x0a\xfb\x5b\x74\x8a\x55\xd9\x92\xdc\x92\x62\x6f\x7c\xaf\x10\x51\x15\x78\x7b\x59\x34\x24\x40\xdd\x18\x72\x00\xc4\xc1\xf3\x80\xe1\xdf\x1d\x00\x2d\xcb\x8f\x73\xc0\x74\x49\x71\xb0\xff\xf0\x92\xcf\x33\xc3\x39\x3a\xd4\x4f\xc9\x57\xdd\xdd\x63\x19\x76\xf5\xcd\x29\xb3\x35\xa8\x85\x2a\xdf\x19\xf0\x41\x7d\x07\x71\xc8\x31\x75\x9f\xd5\x8c\xac\xdf\x1a\x97\x08\x39\x70\x6a\x6f\xc9\x19\x34\x5f\xf1\xad\x16\x5d\xbc\xe7\x57\x20\x40\x90\x1b\xa4\x89\xa3\xee\x00\xd5\x05\x71\x48\x07\x2e\x25\x3e\x4e\xbd\x71\x16\xaf\x5c\xf9\x6c\xdb\x69\x66\x1d\x8e\x80\xa1\x1d\x95\x8c\x7b\x37\xce\xe2\xe8\xf0\x3d\xd5\x90\x8d\x98\x93\x85\xea\x82\x38\x64\x7b\x31\x5e\x1b\x62\xea\x32\x76\xd5\xad\x8f\x6f\xb3\x06\x07\x5c\xe7\x10\xe3\xea\x9b\xad\xa9\x0f\x2d\x89\x48\x2d\x36\x30\xff\x91\x4a\x0c\xd5\x05\x71\x48\x07\x36\x08\x3c\x7e\x46\xa7\xd9\x2b\xfc\xb4\x75\xf1\x24\xfa\xc5\x5a\x3c\x3c\x42\x5e\xef\xc0\x95\x36\xd9\x4a\x36\xec\xec\x9f\x1b\x1a\x0a\x39\x00\xe2\xe0\x79\xc0\xfd\xef\x0e\x80\xae\x91\x8e\x73\x60\xa1\x42\xea\xf1\xb9\x44\x03\xaf\xaa\x80\xc6\x83\x1d\xd3\xf3\xb7\x99\x27\xdf\xe4\x2f\x9d\x31\xe1\xee\xda\xa3\xbd\x9d\xfe\x9d\x00\x17\xea\x3b\x88\x43\x8e\x29\xee\x37\xd9\x87\xa8\x3e\x67\xec\x3d\x0a\x3f\xeb\x55\x18\x7d\xfc\xa0\xe3\x4e\xc8\x24\x2f\x39\xd1\xa1\x3b\x6c\x89\x56\x98\xed\x1e\x02\xd5\x05\x71\x48\x07\x2c\x79\xae\xee\x39\x36\xab\xba\x0b\x76\xe9\x65\x45\x92\x1f\x94\x7a\x8e\xcf\xb0\x76\x8c\xbe\x51\x4b\xc8\xb8\x2d\xe8\xfb\xf3\xfe\x5d\xa8\x2e\x88\x43\xb6\xd7\xfb\x2d\xa1\xee\xad\x80\xc1\x62\xdf\x1c\xd7\x68\xba\x83\x35\x3e\xed\x04\x5f\xa9\x8f\xb5\xd5\x68\xd9\xcc\x1f\x24\x7f\xb3\x7f\xbc\x02\xd5\x05\x71\x48\x07\x0a\xbb\x6d\xd6\xca\x15\xdf\x14\x70\xd3\x50\x77\x9d\x46\x6d\x6a\x4c\x37\x5a\x9d\x4e\x68\xd5\x25\x19\xbc\xb8\x86\xe5\x46\xc8\x2c\x06\x39\x00\xe2\xe0\x79\x20\xfe\xef\x0e\x80\x2e\x58\x8f\x73\x20\xb4\x7a\x72\xe3\x40\xe1\xfc\x97\x8c\x1a\xb4\xa4\x22\x14\xae\xb1\xf2\x40\x6a\xd7\xeb\x38\x51\x17\xdd\x6d\xab\xbc\x9c\x23\x98\xe1\xeb\x32\x10\x87\x1c\x53\xcb\x71\xad\x2e\x1c\x03\x9c\x86\x8e\xe7\xdf\x86\x7d\x1f\x92\xab\xbf\xbd\x6b\x3c\xbe\x47\x2a\xec\x62\x3a\xa5\xea\x61\x15\x61\x3c\x00\xff\xad\x00\x1c\xd2\x01\xac\xf8\x9e\x0c\x41\x0c\x29\x83\x0d\x61\x54\xce\x11\xba\x59\x37\x7a\xd6\xa2\x8c\x80\x4b\x6a\x58\x13\x8f\xbb\x5c\x6f\x88\xba\x05\x42\x75\x41\x1c\xb2\xbd\x7a\xce\x2f\x6f\x4f\x60\xd9\x3f\x58\xcc\x31\x64\x9b\x57\xef\x20\xab\xfa\x16\x9c\x9f\x48\x12\x27\x68\x5e\xff\x4b\xa8\x30\x4f\x93\x10\xaa\x0b\xe2\x90\x0e\xa0\x8a\xdf\x48\x7a\x63\xf0\x5c\xe6\xcc\x55\x36\x75\x7b\x36\xfd\xfc\xea\x42\xed\xe6\x89\xac\xc2\x73\x7c\x2e\x16\x94\xc4\x54\x4d\xf1\x90\x03\x20\x0e\x9e\x07\x8a\xff\x0f\x0e\x4c\x62\xfd\xbb\x0d\xc8\xff\x6c\x16\x4a\xa1\x54\x1f\xd9\xef\xd0\xbf\x20\x62\x1b\x5b\x58\x49\xd0\xa3\x97\x79\x73\x96\x52\xe9\x59\xd2\x61\xbb\x46\xcc\xcf\x17\xfe\x07\x2b\x4f\xb0\xcf\x5e\x4c\x2a\x39\x91\x6d\x96\xcf\x47\x0e\xeb\xdf\x26\x39\x53\xd9\x7e\xb9\x82\x8f\xbf\x3a\x52\x26\xba\x99\xa3\x8b\xf0\xd7\xec\x0d\x2e\xd4\xeb\xa9\x28\xe9\x19\x1b\x49\x64\xad\x27\xb2\xa9\xb4\x7e\xe4\xb0\x09\x75\xc2\x03\x83\x8b\xf6\x1c\x22\xa5\x32\x26\x0e\xae\xa4\xc3\xe8\x07\x3e\x01\x29\xec\xe5\x4f\x9b\xad\x9d\xdd\xf6\x58\xad\x99\x4f\xa4\xb7\x87\x47\x0e\x7b\x56\x20\x29\x72\x5a\xd1\x9e\x9e\x3f\x2a\xb3\x39\xd1\x7c\x3c\x88\x7e\x2f\x95\xd4\xfb\x74\x39\xd6\x85\x20\xef\x47\x7e\xf7\x9e\xf7\x9d\x48\x6f\x29\xc4\x91\x87\x95\x16\x23\x7f\xd4\x5d\x4d\x7e\xe5\xb5\x67\x7a\x18\x59\xfa\x54\xc7\xc3\x14\x1d\x83\xe6\x1b\x1c\xdc\x9c\x91\x29\xf1\x2a\xca\xbe\x7a\x27\xd2\x5b\xde\x23\x87\x55\xde\x33\x9b\xfa\xe5\x1e\x81\xf3\x33\xf8\x29\x31\xde\x5a\x7d\x96\xa1\xba\x56\x93\x28\x8d\x39\xce\xe5\xba\x52\xcb\xdd\xe6\xd8\xa4\x13\xe9\xad\xea\x91\xc3\x26\x0e\x3c\xd1\xa8\x14\x2a\x9c\x77\x4f\x67\xf2\xa2\x39\x50\xba\x91\xf0\xe0\xf7\xdd\xe8\xda\xec\x2a\xbd\x30\x9a\xaa\x5d\x6a\xf5\x95\x13\xe9\xad\xfe\x91\xc3\x5a\xca\x97\x89\x69\xca\x1f\x30\x2a\xa5\x4b\xa4\xed\x3d\x5f\x0d\x55\x8c\xb4\x5d\xbb\xb6\xa7\x67\x4d\xeb\x8a\xa2\xb3\x33\xe1\xbf\x71\x62\x1b\x86\xa0\x5f\xea\x71\x13\x7d\x10\x2b\xc9\x6f\xc5\x32\xb7\xa7\x25\x1e\x1f\xdf\x7f\x23\x8a\xa8\x23\x72\xf5\x5e\x19\x5c\x7f\xc9\x1d\x9b\xe2\x84\x35\xe7\x6c\xac\x01\x4d\x70\x20\x0e\x39\x71\x86\x96\x0d\xe7\x3f\x09\x7b\xd5\x54\xae\xa6\xe3\xc4\xe5\xe2\x75\x9f\x52\xcb\x79\xed\x8a\x5f\x5e\x8c\xeb\x4d\xc9\x51\xea\xc0\x71\x78\xd1\x0f\xe2\x90\x13\xbd\x06\xf1\x45\xad\x81\x25\x79\x2c\xbc\xde\x4d\xf1\xa0\x09\xc7\x69\xaf\xf6\x6a\x23\xf4\xc6\xfd\xd4\x9e\xa9\xab\xce\x8f\x75\x73\x6c\xa1\xba\x20\x0e\xd9\x5e\x34\xee\x2f\x2a\xab\xb5\x5b\xf7\x3e\xce\xca\xac\x65\x7b\x0f\x63\x77\x7a\x5d\x3f\xe4\x88\xce\x47\x55\x79\xf1\x73\xa2\x41\x93\xde\x0f\xaa\x0b\xe2\x90\x13\xbd\x8e\x0c\x16\x31\x59\x8c\xed\x97\xd9\x8d\x31\x1e\xe2\x1d\xf2\x2e\x56\x54\x7d\xe7\x22\x8b\xbd\x7c\xa9\xc7\x16\x09\xe4\xe8\x82\x3d\xd0\x44\x0f\xe2\xe0\x93\x7d\xf5\xdf\x4f\xf6\xa0\x69\xf3\x38\x07\xb6\x1e\x3c\xfc\xf5\x81\x81\xb2\x52\x95\xe0\xe5\xca\xe9\xc3\xbc\x61\xdb\x1a\xe6\x57\x91\x16\xd9\x7d\x66\x16\xef\xd7\x5d\x44\x30\xa7\xa0\xbe\x83\x38\xe4\x98\x96\x09\xb5\x6a\xf0\x7c\xe9\x54\xb6\x36\xe6\xcc\xb5\x50\x72\xd2\x94\xd5\x6f\x73\xcb\x71\xd7\x4f\xc0\x23\x1a\xce\x65\xb7\x68\xa7\x82\xea\x82\x38\xa4\x03\x12\x02\x8a\x8d\x3d\x9e\x39\xa6\x15\x79\x9f\xe3\x47\x56\x0d\x3f\x5e\x8f\xd3\x12\x7f\xd1\x14\x3e\x4f\xee\xb9\x5f\xd5\xaa\xb8\xeb\x09\xd5\x05\x71\xc8\xf6\x52\x98\xcf\x9d\x1b\xb3\xa9\x91\xd0\xbf\xfd\x64\x7e\x5e\x23\xeb\x30\xf1\xdc\x83\x3d\x17\x6a\x7b\x4c\x09\xc5\x60\xdc\xab\x3d\xa1\x64\x50\x5d\x10\x87\x74\xe0\xd6\x6d\x49\xbe\x24\x94\xbe\xb2\x0f\x1e\x0b\x02\xcf\xc6\x1e\x7c\xb6\xfd\x2d\xde\x4f\x95\x7f\xbb\x4e\xa8\xc6\xb7\x99\xe8\x3e\xc5\x37\xc8\x01\x10\x07\x9f\xec\x3f\xff\xdd\x01\xd0\x39\xec\x38\x07\x48\x0e\x71\x79\x42\xbb\xca\xe6\x3c\xa6\x23\xa9\xdf\x0d\xec\x14\x59\xa3\x15\xf2\x4d\x6c\x16\xe5\xbe\x66\xfe\xc9\x6d\xe7\xa2\xf8\x15\xea\x3b\x88\x43\x8e\xa9\xe0\xd2\x6c\xf7\x75\x91\x91\x87\x6d\x75\x3e\x0b\x66\xe9\xad\xb3\xc5\x55\xac\xaa\xf3\xcf\xdc\x2e\x8f\x6f\xb3\x5a\x38\x79\xe5\xc1\x8b\x73\x10\x87\x74\x80\x51\xee\xd2\x03\x86\xaf\x12\x25\xf2\x57\x9f\x13\x3f\x5a\x59\x89\x60\x17\xaa\x14\x4b\x54\x39\xa5\xbc\xfa\x5b\x64\x6f\xcf\xf5\x4d\x10\x54\x17\xc4\x21\xdb\xdb\xe3\xad\x6f\x9a\x93\x26\x8b\xad\x5b\xa7\x20\x2f\x99\xd9\x59\x7e\xdf\x48\xe3\x9d\x64\xae\xb0\x7f\x2a\x7d\xfb\x2c\xe1\x93\x57\xdc\x50\x5d\x10\x87\x74\xa0\x80\x55\xd5\xd0\x42\x7e\x21\x19\xe5\x4c\xac\x8f\x6a\x15\x1b\xf7\xd3\x51\x23\x31\x94\x5d\xcf\x54\xcd\xdc\x5e\x9b\x34\x96\xb4\x79\xc8\x01\x10\x07\xcf\x03\xeb\x7f\x77\x00\xb4\xa0\x38\xce\x01\x0b\xc1\x24\xf1\x33\xcd\xb5\x4d\x99\xef\xf5\xd4\x5c\x0d\x5b\x9a\x86\x5f\x86\xcb\x48\xd4\xfe\x60\x32\x43\xf5\x74\xb0\x7a\xb3\x03\x5f\xfc\x83\x38\xe4\x98\x5a\xb9\x89\x73\x70\xf9\x2b\x38\x1e\x12\x6e\x56\x62\x6a\x92\xfb\x96\xca\xb1\x16\xc9\x79\xa4\xbe\xf0\xd0\xea\xa0\x51\xab\xb1\x2e\x84\xea\x82\x38\xa4\x03\xeb\xa4\x93\x84\xda\x4e\x2f\x4b\xfb\x14\xa2\x64\x6a\xe4\xcb\xee\xbe\xed\xfb\xf0\xfc\xa3\xbb\xf7\x77\xb9\x01\xde\x8d\xe8\xac\x29\x78\xd1\x0f\xe2\x90\xed\x25\x7b\xf1\xc2\xc7\xcb\x19\xdb\xc2\xe8\xfc\x85\x56\x7f\x19\x15\x6f\xe6\x1e\x8f\x1c\x26\x23\x1e\x3c\xe5\x0f\x09\x97\x4e\xcb\xfd\x18\x86\xea\x82\x38\xa4\x03\xcf\x0f\x71\x3d\x2a\xc9\x19\xc3\xc2\xfb\xcc\x18\xd7\xef\xbd\xfd\xc2\xa5\x89\xa1\x81\xae\x59\x5a\x51\xd5\xd4\x2a\xf0\x7d\x25\xed\x15\xe4\x00\x88\x83\xe7\x81\xc3\xbf\x3b\x00\x5a\xdd\x1d\x7b\x03\x51\x6c\x7a\x85\x2d\xeb\xeb\x02\xe5\xa9\x83\x3a\xdf\xc6\x76\x1b\xf6\x4e\x62\xeb\x37\xeb\x55\x44\x9e\xa4\x66\xc4\x2b\x72\x99\x13\xf0\x0d\x44\x00\x87\x1c\x53\x49\xae\x45\xd3\x70\xaa\x4c\xdf\x14\xeb\x4a\xce\x96\x28\x22\x9f\x0b\x37\x5b\xa8\x68\xd7\x9f\x26\xfa\x72\x26\x9b\xeb\x06\x62\xcc\x42\x75\x41\x1c\xd2\x81\xa7\x36\xb4\x7d\x37\x6e\xa8\xaf\xe4\x6f\xf1\x34\x76\x6c\xe7\x59\xf3\x66\x9f\x56\x2b\x12\xb4\xba\xf5\x2d\x6c\x9c\x8e\x1d\x53\x26\x00\xaa\x0b\xe2\x90\xed\x45\xcf\x34\x49\xfb\x8c\xa1\x52\xd1\x53\x65\x57\x6e\x2a\xea\x38\x4d\x5a\xc2\xae\xc4\x3e\x7f\x3f\xed\x42\xd8\x23\x52\x95\x4b\xe7\x14\xa0\xba\x20\x0e\xe9\x40\xdf\x8d\x76\x85\x6e\x93\x95\x51\x23\xac\x60\xf6\xdd\xf1\x3a\x86\xc0\xfe\xc8\x5e\x8c\xaf\x76\x1f\xcb\x44\x69\xc9\x8c\x94\xb2\x4b\x20\x07\x40\x1c\x3c\x0f\xfc\xcf\xa2\xfe\x2f\x0e\x80\x96\xda\xc7\x39\x40\x29\x3b\xff\x38\x8a\x8b\xac\x90\x6e\x49\x71\x74\x7f\xe3\x34\xdb\x44\xba\xee\xde\x3b\x83\x60\xac\x18\xa6\xb1\x19\xd5\x67\xf4\x18\x50\xdf\x41\x1c\x72\x4c\x75\x89\x3e\xaf\x3b\x9f\xe7\x7b\xc1\x22\x5b\xa1\xab\xf5\x81\xde\xb9\x0b\xdd\x7d\xb3\xe4\x79\x9c\xd6\xa7\x72\xda\x99\x7b\x11\xbc\xfa\x50\x5d\x10\x87\x74\x40\xd9\x6f\x56\x3d\xd0\x77\x54\xb5\x5b\x40\xb8\xd5\xdc\x98\x72\x41\xd1\xf6\x25\xcd\x64\xcb\x4e\x1f\xa7\x4c\xd4\x52\xae\x0a\xa3\x08\x54\x17\xc4\x1d\x69\xef\x85\x82\xe4\x92\x1f\xc5\x22\xf2\xd6\x93\xfa\x85\xa6\x75\x87\xea\xdc\x57\x19\x69\xef\xd0\x9a\xba\xca\x04\xf8\x3b\xdd\xbb\x2c\x09\xb7\x17\xc0\x21\x1d\xe8\xb7\x5a\x4b\xde\x9c\x8e\x23\x28\x3d\xc7\x6b\x6b\x91\xc4\xf7\x28\xe4\x31\xd1\xed\xa7\x7b\x51\x54\x54\x53\x63\x97\x58\x85\x72\x23\x21\x07\x40\x1c\x3c\x0f\xf0\xfe\xdd\x01\xd0\x75\xcf\x71\x0e\x30\xa2\xd7\x3e\x33\xeb\x73\x5b\xa8\x54\x4d\xa6\x0f\xc6\xf9\xbd\xcb\xe9\x1b\x9b\x28\x6b\x6b\xf4\x7c\xc5\xf5\x21\x05\xbe\x9c\xd1\x1b\xf8\xfc\x0a\xe0\x8e\x5c\x17\x4c\xca\x56\x84\x8d\x86\x45\xe2\x17\x9b\x19\xfa\x19\x5d\x98\x9b\xa9\x7b\xfb\xce\x4f\x6c\x4b\x16\x6d\xf7\xb9\x13\x07\xf3\x2b\x34\xf8\xba\x00\xc0\x21\x1d\xc8\xbd\x33\x68\xcc\x23\x11\xe7\x25\xc3\x5e\x7b\x7e\x9d\x3f\x20\x24\x29\xe1\x26\x41\xe5\x67\xde\xcd\xad\x3d\x8b\xe8\xdc\x47\x98\xf0\x46\x0d\x88\x43\xb6\xf7\xe9\x7c\xf6\xd6\xa9\xac\x75\xd5\x8c\xd1\x3c\x99\xf3\xf7\xf3\x6f\xb9\x33\xa6\x77\xd8\x70\x5e\xb9\xa3\xd4\xaf\x99\x28\x9e\x40\x05\xbb\x05\xe2\x90\x0e\xf4\x7c\x2f\x53\x6f\x35\xec\xd2\x0c\xc7\xbd\xdf\x93\x1d\x71\x8a\xb4\xc5\x58\xad\x3a\xc0\x87\xbf\xeb\x63\xca\xc7\xd8\x33\xc5\x67\x78\x20\x07\x40\x1c\x3c\x0f\xa8\xfe\xdd\x01\xd0\x45\xe8\x71\x0e\xd4\xf6\xa9\x3b\xaa\x07\xda\x5d\x6c\xfb\xd1\xbe\xa2\x9b\x56\x77\xe1\x36\x99\xc4\xdc\xc4\x17\x3c\xba\xd9\x75\xc2\x46\xd7\x5f\x5d\xf0\x8d\x10\x10\x87\x1c\xd3\x70\x0d\x9f\xfc\xab\x92\xf7\x03\x77\x4b\xf9\x9c\x3b\x6b\xee\x93\xce\xdc\xf3\x56\xe6\xf1\xb4\xd2\x9c\xa2\xbe\xb3\xcc\xe3\xb4\x30\x04\xd5\x05\x71\x48\x07\xe8\xfd\xd4\x32\xbf\xdd\x92\xb0\xe7\x75\xb1\xc0\xe2\xc3\x70\xc3\xd7\x49\x0c\x34\x6e\xdc\x09\xbf\x2d\xaf\x87\x37\xb5\xcd\xd4\x43\x04\xd5\x05\x71\xc8\xf6\x62\x85\x8f\x69\xd7\x28\x95\xa5\x91\xa4\xb0\x90\xb9\xcd\x7d\xf2\x57\xdc\x17\x5f\x9a\xa4\xb0\xc1\x46\x5f\x27\xd3\xb7\xeb\x22\xfc\x0e\x6f\x2e\x02\x38\xa4\x03\xdc\xe9\xca\xca\x83\xfd\x89\x95\x66\x4f\x69\x7e\xfb\xff\x62\x2e\x8c\x25\x0d\x32\x67\x93\xf1\xa7\xc3\x36\x7b\x58\xf8\x98\xf3\xd5\x67\xc8\x01\x10\x07\xcf\x03\xfa\xff\x07\x07\x9e\xfc\xf3\xb0\x27\xe8\xd1\xc2\x00\x71\x74\x5f\xff\x70\x29\x14\xb7\x23\x7b\x18\x17\xf4\xef\x95\xe1\x3d\x7e\xc7\xbd\xbc\xa5\xe0\x45\x70\x8d\x31\x4b\x9b\x85\x7e\xa7\x26\x95\xa5\x6d\x64\x2b\x95\x9a\xb2\xba\x22\xf1\x44\xb6\x4e\x62\x8f\x1c\x16\x5d\x28\x6f\xa0\xb7\x4a\xa1\xf4\x3c\xba\x1c\x39\x76\xc1\x33\x65\x92\xd4\xac\x29\x56\xd4\xf9\xb0\x1a\xc9\x51\x39\xe1\x8e\xd8\xb6\x13\xdb\x3a\x01\xf5\xef\xb8\x9f\x87\x4c\xe5\x75\x2a\x5b\x26\xfd\xfc\x57\x8c\x6c\xd7\xf2\x65\x2e\xf6\x85\x90\xe0\x5e\x5c\x51\x55\x64\xa6\x47\x21\xba\x4a\xb2\x96\xc6\x03\x69\x01\xe2\x90\xba\xc5\x5d\x12\x0e\x54\x5b\x97\x99\x24\xc8\xb1\x2c\x96\x4a\xd2\xbc\x10\x7d\xab\x07\x55\xd8\x42\x92\x4d\x7f\x93\xc6\xe7\x22\x77\x54\x1a\x54\x17\xc4\x21\x7f\x1e\xf7\x95\xbb\x50\xd9\x2a\xf2\xb4\x63\xd5\xd0\x82\xc8\x6f\x0c\xa1\x7f\xa4\x1c\xbf\xa7\x16\x9a\xa6\x35\x5c\xc4\x97\xe8\x73\xa8\xc5\x0e\xd5\x05\x71\xc8\xf6\x3e\xb9\xfb\x75\xab\xa3\x0a\x25\x3a\xc0\xe7\x16\xfe\xd2\x15\xbd\xaa\x14\x93\x60\xb6\xda\xe2\x49\x8b\xcc\xfb\xcf\xa3\x31\xd9\x1e\xb4\x42\x75\x41\x1c\xf2\xe7\xd1\xf4\xa8\x78\xe6\xf7\x05\xd4\xc3\x1e\xa2\x79\x81\x8e\x50\x9a\x07\xa2\x12\x43\x16\x35\x5f\x5c\xd9\x95\x71\xdf\x27\xd8\x7d\xb9\xa4\x01\xfd\x3c\x40\x1c\x3c\x45\xba\xfd\x7d\x8a\x04\xc9\x76\x9c\x03\xf5\xc5\x8d\xe3\x77\x3f\xb7\x2e\xd2\x9d\xe7\x67\x5a\x36\x7e\xcb\xff\x2b\xaf\xf9\xcc\xce\xa3\xfb\x19\xb3\x69\x6f\x2e\x6d\x75\xec\xb9\x43\x7d\x07\x71\xc8\x31\xf5\xb7\x34\x89\xcb\x3a\xeb\xf0\x29\xb3\xb3\x4e\xe4\x6d\xf9\x1d\x5f\x1b\x2f\xec\xf8\xdc\xcb\xa1\xa8\x25\xaf\xde\x26\x87\x6a\x45\xe8\x40\x75\x41\x1c\xd2\x01\x96\xa2\x7c\x0c\xe2\x64\x31\xb2\x9f\x18\xaf\x14\x7e\x9f\x63\xa1\x91\xb4\x3f\x65\x83\xe2\xb6\x4b\x58\xa2\xfa\xbc\x98\x85\x8c\x1a\xbe\x1c\x07\x71\xc8\xf6\xd6\x66\x16\x5d\x38\xf5\x36\x8b\xa1\x36\xf8\xc7\xa5\xb7\x7e\x58\xd8\x24\xe2\xfc\x4c\xa3\xe7\xdd\xd3\x6e\x75\x18\x96\x04\x19\x4d\x24\xc2\xa7\x0a\x00\x87\x74\xe0\x51\xb7\x7c\xda\x9c\x1d\xde\xdb\xcd\xe7\xf8\xf9\xd9\x3c\x2f\x9c\x71\x22\x0d\x12\x88\x55\x5b\x28\x50\xb8\xcb\x8a\x14\xcb\x1f\x9b\x43\x0e\x80\x38\x78\x8a\x8c\xfd\x3f\x38\x60\xf0\x9f\x3a\xa0\xe7\xd6\x03\x4f\x61\xa0\x06\x48\xa1\xa1\xa0\xfc\x57\x2b\x0d\x8a\xa7\x3d\x3e\xbe\x5a\xbc\xa9\x46\x67\x80\xce\xb4\xcf\xc9\x8f\xf3\x48\x66\xc4\x43\xba\xfb\xd1\xf5\x62\x53\xcb\xdd\xe4\xba\x3b\xbe\xba\xff\x8e\x0b\x90\x42\xf1\xfd\xef\xca\x4b\x46\xf1\xf6\xd7\xb0\x82\xd7\xf4\x6d\x73\x57\x0a\x83\x9a\xfc\xd3\x1a\x3f\x3c\x35\x09\xc5\x7b\x15\xda\x22\xbd\xce\x5f\xa0\x50\x08\x55\x06\x71\x01\x52\x28\x68\xff\x5d\xf9\xfa\x86\xfd\x43\x26\x92\x5c\x49\x9d\x75\xf9\x12\x94\x5b\x58\x2b\x91\xc3\x4f\x1c\x51\x65\x37\x99\x84\x22\x16\x3a\xfd\x18\xbe\x7f\x82\x2a\x83\xb8\x00\x29\x14\x94\xff\x76\x4c\xad\x5e\x07\xc3\x65\x9e\xae\xb7\x57\xa6\x73\x56\xc7\x33\x3d\xe1\x5c\x86\x9a\xae\xae\x41\xe5\x99\x9c\x00\xca\xef\xdf\x08\x56\xb6\x7d\xb9\xfe\x1d\x17\x20\x85\x42\x83\x82\xe2\xeb\x27\x21\x85\xf6\xcf\x03\x91\xa0\x67\xf9\x03\xd1\xfe\x79\x20\x12\x4a\x37\x80\xf2\x8b\x7f\xa6\x1b\x5c\xb8\x29\x45\xd0\xfb\x0a\xd4\x89\xcd\x1f\x60\xe9\x57\x25\x72\x2c\x07\xd4\xdb\x29\xd2\x6b\x36\x5d\x88\xd8\x70\x4c\x4f\xfe\xf0\x67\xba\xa3\x21\xf1\x2d\x6e\xb7\xfd\xbb\x49\x46\x3f\xaa\x2d\xa3\x74\x26\x1b\x7d\x21\xcc\x48\x21\xfc\x45\x7c\x19\x21\x1a\xc9\xd8\x7b\xa9\xe7\xff\xdf\x4b\x37\x80\x3a\x77\x4c\xba\xa1\x25\x80\x77\x48\x34\x0c\xdb\x60\x96\x30\xe1\xf9\xa5\xb3\xf6\xb6\x03\xde\x58\xfa\xd7\x6c\xac\x32\x33\xe5\x6e\xdf\x51\x63\x34\xdc\xff\x03\x5d\xf4\x3d\x83\x62\xba\xd4\xd2\xb9\xeb\x61\x1c\xfc\x86\x30\x61\x58\xee\x31\xe1\x15\x94\x99\x6c\x6b\xd5\x3e\xb6\x25\x6d\x13\xce\x77\x7f\xde\xe8\xb2\x57\x32\x15\xd8\xfd\x66\xbb\x10\xa6\xb7\x49\x9a\x57\x91\xbe\xf9\xca\xb8\xc9\xfb\x3d\x09\x6f\x93\x7a\x51\x1a\xe9\x69\x5a\x75\xdf\x71\xac\x7f\x77\xf8\xff\xdc\xb0\x94\xb8\x49\x8c\x58\x32\x10\xb2\xbc\x6d\x1e\x22\x63\x31\xb9\xaa\x96\xf2\x55\x89\x2e\x26\xaf\xec\xfc\xb3\xfd\x33\xd9\xda\xbb\x18\xe5\x91\x85\xe2\x36\xd7\x59\x4f\x60\xa5\x22\x59\x77\x24\xde\x70\x57\x01\xcf\x49\xd1\x8c\xe7\xad\x1f\xc7\xf2\xe4\x15\x5f\xdf\x9c\x46\xca\x71\xa6\x71\x5e\xdd\xd4\x20\x01\x6d\x89\xb0\xb0\xcc\xf6\x93\x58\x1f\x89\x1d\x8d\x37\x5c\x1f\x4a\x7a\x5e\x63\xb5\x12\x20\x79\xb9\xe5\x4d\x29\xab\x01\xbf\x24\x57\x8c\x17\xce\xf6\x85\xbe\x43\xc5\x86\x91\x65\x07\xc5\xd2\x93\x38\x6c\xdd\xd1\x78\xc3\xd0\x94\xe8\x3c\x06\x77\x58\x6d\x7e\xb1\x48\xa7\x39\xce\x96\xc8\x43\xec\xaa\x87\x0d\x53\x4b\x1e\x5f\x99\xec\x16\xd0\xfc\xaf\x9e\x48\x98\x43\xec\x68\xbc\x81\x67\x18\x23\xc2\x86\x3f\x73\xd5\x29\x9c\xfe\xb1\xdb\x6d\xa1\xe5\xac\xb8\x1c\x03\x0a\x17\xf7\x24\x79\x11\xb3\xdd\x98\x4f\xb2\x4c\x27\xd2\xdb\xa3\xf1\x06\xdc\xde\x97\xe9\x77\x96\xa4\xa3\xd4\x34\x3c\xd7\x6b\x5d\x88\x14\xc3\xbc\x77\x0a\x69\x56\x4b\x3b\x1a\xb3\x3e\x79\xe5\xae\x27\x36\x9c\x48\x6f\x8f\xc6\x1b\xcc\x24\xb5\x86\x9f\x04\x7d\x3f\x78\x83\xff\xc5\x29\xa6\x2d\x23\x66\x55\x99\x9c\x74\x67\xfa\xb5\xf5\x3b\x13\xa6\xad\x9a\xd9\xf1\x8a\x13\xe9\xed\xd1\x78\x43\x7b\x73\x49\x6e\x21\x4f\xeb\x0e\xee\x55\xbd\x8b\x5f\x39\xf4\x13\x36\xef\xce\x8c\xdb\x3d\x33\x9f\xe3\x69\x09\xc3\xf3\xcc\xc4\x9b\x3c\xb1\x25\x37\xe8\x87\x7a\xdc\x72\xcb\x5e\xfb\x0a\xc6\x68\x80\xc1\x97\xb9\x26\x02\x9a\x7a\xfb\xae\x73\x7b\xb4\x2f\xd9\x1b\x73\x74\x2b\xf9\x70\xeb\x36\x17\x28\xd5\xe1\x47\x93\x40\xdc\x91\x47\x95\x6f\x51\xfc\xbe\x57\x2d\xcc\x41\x3a\xc1\x3b\x2c\x83\x45\x9a\xd8\xec\xef\xd3\x3e\x26\x8c\x7e\x48\xbd\x18\x2e\xb1\x5d\xa6\xd4\x03\x3f\xaa\x0c\xe0\x90\xcb\x2d\x85\xf7\x28\x3f\x4f\x87\x52\x9e\x4b\x19\xd3\x43\xcf\xd0\x34\x9d\xfa\xf2\xc1\x73\xeb\x0d\x99\xd7\x5d\x36\x42\x23\xdb\x2d\x82\x38\x5e\xa8\x2e\x88\x43\xb6\xf7\x87\x85\x11\x0d\xfd\x7e\x97\x2b\x23\x7e\xf3\xf4\x5d\xfb\x30\x81\x33\xa6\x36\xfe\xf8\xfa\x55\x4a\x24\x5c\x72\x09\xcb\xfc\xe7\x9e\x43\x75\x41\x5c\x80\x04\x0a\xea\x9f\x75\x4b\xb2\x1b\x55\x5f\xe1\x96\xf7\xbb\x7c\xd8\x31\x6c\x5d\x94\x0c\x11\x8a\x2e\x61\x36\xd4\x29\x90\xd6\x58\x67\x1f\x7b\x9b\xc5\x29\xe0\x2b\xfd\xef\xb8\x00\x09\x14\x34\x5f\xbf\xa0\xff\x99\x9d\xff\xb2\xe0\x06\x4d\x9a\xc7\x2e\xb8\xef\x9e\x8b\xf0\x6e\x18\x2c\xfd\x86\x53\xc8\xfa\xcb\x00\x1d\xab\xae\x35\x95\xce\x89\x93\x20\x29\xdc\xf5\xb1\x84\xb1\x14\xc5\x20\xbc\xe0\x06\x70\xc8\x11\x5d\x25\x32\x1c\x75\x66\x53\x25\xb6\xee\x0c\xd0\x4e\x53\xef\x66\x9c\x3c\x20\x99\xf2\xde\x16\x28\x6a\xf8\x78\xaa\xf6\xc7\xb4\x6f\x28\x54\x17\xc4\x21\x0d\x90\x14\x40\xdd\xd6\xfa\xba\x76\x19\xd7\x13\xcd\xb3\x03\xc7\x57\x02\x0b\xe5\xaa\xd6\xb3\x8b\xfc\xc1\x66\x7a\xb4\xa8\x8c\xa2\x83\x56\xf0\xbe\x37\x80\x43\xb6\x37\x49\x20\xbb\x5c\xdb\xcd\x9b\xfa\x73\x1d\x5e\xee\x4b\x1d\xec\x90\xf2\x4c\x9b\xcf\xb3\xed\x36\xad\x18\x8d\xd7\x4a\xe9\xfd\x0a\xe0\x07\x14\x41\x1c\xd2\x80\x78\x53\x79\xb6\x32\x61\x12\x57\x7d\x93\xcd\x79\x01\xef\x38\x11\xbb\x9d\x5b\x5e\x56\x28\xf2\x3e\xbd\xca\xea\x75\xbd\xa2\x2c\xa2\x50\x5e\x01\xc4\xfd\x63\xc0\xff\x9e\x2a\xff\xa2\x00\xe8\x04\x76\x9c\x02\x77\xaf\x57\x17\x5d\xfc\xe0\xa6\xbc\x9b\xc2\xcc\xc0\x61\x22\x4c\x7a\xf5\x99\xf0\xfa\x5d\xb3\x8d\x6d\x76\xa5\x9d\x9b\x3b\xc3\x61\xf0\xad\x3f\x10\x87\x1c\xd2\xbb\xdf\xd9\xeb\x73\x48\x96\x94\xab\xbc\xc7\x88\x1d\xf9\xfd\xf9\xce\x7a\x7e\x76\x3b\x9d\x61\x57\x52\x6c\x95\x93\xf9\x42\xbb\x07\x8e\x80\x80\x38\xa4\x02\x32\x74\x95\x5d\xf1\xf7\xc4\x98\x7f\xbe\xff\x70\x5a\xb0\x93\x0d\xb7\x3d\x1a\x33\x86\x41\x2f\xed\xd9\x2b\x75\xb6\xd2\x0d\x1c\x1c\xf8\x96\x0a\x88\x43\xb6\x37\x08\xfb\x60\x34\x38\xdf\xd4\xee\xad\x6e\xec\xb2\x57\x0c\xe9\x15\xcd\xf0\x8c\x29\xfe\x8b\x49\x63\xa2\x8a\x3e\x6b\x5e\x83\xd7\x4d\xe1\x47\x37\x00\x1c\x52\x01\xf9\x09\x83\x5e\x3a\x54\xeb\x30\xc5\xab\x64\xe1\xf9\x6a\x2d\xb3\x7d\x0d\x03\xf4\xfa\x2e\x2f\x82\x7d\x9b\x9e\xed\x77\xad\x34\x4b\x43\xd7\x5c\x20\xee\x1f\x05\xfe\xb3\x6e\xf9\x8b\x03\xa0\xd5\xc4\x71\x0e\x50\x7c\x93\x67\x7b\xa7\xc4\x60\xcd\xd8\xa2\x37\xb9\x87\xbf\x15\x5c\x60\xe9\x1b\x81\x36\x43\xf0\x36\xdb\x53\x4f\x6e\x0f\xbf\x82\x06\xbe\x55\x0f\xe0\x90\x63\xba\x6c\xbc\xf4\x81\xfb\xad\xd2\x0d\x8d\xaf\x4f\x6e\xa7\x68\xdc\xda\xa6\x92\x5c\x3f\x1d\x38\xd5\x91\xa0\xa2\x14\xf6\x6e\xe3\xb5\xc5\x18\x54\x17\xc4\x21\x1d\x88\xd5\xa8\x43\xe7\x55\xda\xc1\x1d\x5b\xaf\x1d\xf1\x2e\xcc\x6d\x4e\x33\x16\x5f\x61\x5c\xcc\xc8\xfa\x58\x47\x11\x25\x4f\xf7\x22\x01\xce\x41\x00\x38\x64\x7b\x31\xaf\x6e\x58\xa6\xea\x38\x15\xb1\x5c\x48\x7f\xf4\xe1\x61\xd8\xb5\x15\x45\x7e\xaa\x95\xb3\x75\x4d\x93\x42\xfe\xef\x28\xc4\xfa\x29\xa1\xba\x20\x0e\xe9\x80\x6b\x61\xb2\x9a\xb7\x9d\x1a\x9e\x9b\x9c\x59\x82\xa1\x61\x4b\x8a\x12\x61\xfe\x2f\xe3\x81\x92\xb3\xfb\xdd\x2a\xbb\x81\x97\xf9\x7c\x21\x07\x40\x1c\xe4\x40\x1d\x20\xaf\x00\x5a\xda\x1d\xe7\x40\x14\x2a\x5f\x55\x1e\xee\xcc\xc7\xb1\xe4\x84\x79\xee\x77\xb5\xab\xa6\x0f\x6e\x98\xe7\xf9\xc6\xb0\x63\x54\xe6\x4e\x6a\x9b\x6a\xc2\xb7\x12\x40\x1c\x72\x4c\x1b\x0a\xa9\x45\xbd\x92\xfa\x67\x03\x0e\x92\xa6\xeb\xaf\xe6\x7b\xe8\x7b\x5f\xa1\x0a\xcb\xb1\x90\xea\x0d\xfb\xd8\x1f\x28\xca\x9f\x0e\x67\x4b\x00\x1c\xd2\x81\xf9\x2d\xdb\x3b\xb5\xaa\x63\x6d\xa4\x46\x7c\x2b\x2a\x24\xad\x15\xd4\x8c\xfb\xea\xd3\xb5\x4f\x6a\x1f\x63\x53\x87\x29\xb2\xe6\x7b\x40\x75\x41\x1c\xb2\xbd\xdc\xe9\xae\xb7\x08\xae\x54\x99\xa9\x19\xbc\x32\x3a\xc3\x41\x52\x4c\xee\x38\x57\xf1\x5e\x55\x62\xd9\xfb\x55\xca\x5a\xc1\xa5\x41\x78\xff\x0d\xc4\x21\x1d\x28\x1b\x5c\x70\xff\x22\x48\x71\x6a\xcf\x2f\x9c\xd1\x7f\x96\x3a\x88\xf3\x59\x32\x4a\x94\x7f\x5a\x11\x09\x1a\xb5\xac\x94\x8b\x11\x06\xe4\x00\x88\x83\xe7\x01\x40\x5e\x01\xb4\xce\x3e\xce\x81\x2a\xe9\xef\x75\x18\x3d\x5f\xf8\x6e\x9b\x54\x7a\x65\x8a\xff\xae\x65\xdc\xef\xe5\xca\x75\xe3\xee\xd8\x13\xa1\xe5\xfa\x46\xfe\x44\x1d\xea\x3b\x88\x3b\x92\x77\x8d\xd9\x0e\x89\x16\xe6\x08\x21\xc8\xe8\x96\xc7\x2c\x8a\x70\xad\xe3\xa3\x1c\x77\xf6\x3d\xe4\x3f\x30\xa0\xf3\x93\x28\x7f\x7a\x19\xce\xbb\x02\x38\xa4\x03\xb3\xb9\x17\xb1\x42\xce\xf6\xdf\x2d\x73\xa7\xe3\x51\xbc\x2e\x5f\xe3\xa3\xa1\x5c\xb1\x5f\xfe\x0e\x45\xd6\x67\xd8\xd0\x96\x8b\xce\x08\xaa\x0b\xe2\x90\xed\x6d\x1a\xda\x6b\x29\x5a\xaf\x47\x0d\x36\xd1\x54\xe4\xe3\x8e\x23\xfa\x7d\x69\x7b\x34\x24\xd0\xaa\x94\xf1\xbb\x58\x67\xfd\x0d\x0e\xf8\x96\x0a\x88\x43\x3a\x30\xdd\xc5\x9f\xac\x11\xc6\x61\x3d\xdf\xe5\x5a\x5a\xf1\xa6\x42\xfe\xf2\x4c\x40\x79\x82\x3f\x81\xed\x35\xc5\xaf\x82\x19\x44\xe7\x2b\x20\x07\x40\x1c\x3c\x0f\x00\xf2\x0a\xa0\x8b\x9e\xe3\x1c\xb8\xaf\xfc\xd2\x26\x7e\xb2\xe0\xd2\xe5\x9a\x28\xea\x64\xca\x02\x16\x36\x74\xaf\x01\xdd\x6a\xb4\x03\x7b\x96\x2c\xbf\xea\xab\xd1\xbe\xff\xff\x7d\xed\xbf\x73\xc8\x31\x8d\xcc\x8a\xf6\xf4\x7b\x6e\xaf\x42\xe6\x9d\x81\x42\xbe\x7f\xef\xf2\xf5\x21\x73\x63\xcd\x1e\x7b\xae\x9b\x3a\x24\x9a\x24\x58\x01\x0d\x70\xd4\x14\xc0\x21\x1d\xe8\x79\x18\x3f\x9c\xf4\x90\x26\x60\xc3\x02\x9d\xb8\xe6\x0b\x93\x7d\x08\x9d\xc4\x47\x3d\xf7\xc6\x34\xa9\xcb\xc6\x3f\xf2\xe3\xad\x04\xe0\x47\x8c\x00\x1c\xb2\xbd\xcc\x49\x2f\x74\x71\x1c\xb0\xf9\x6c\xf6\xf1\x88\x08\xe3\x69\x0a\xb3\xed\x3f\x0a\x91\xa0\xcb\xd9\x38\xd5\xda\xed\x5c\xee\x89\x84\x2f\x0a\x40\x1c\xd2\x01\x7e\xf7\xcc\xac\xdf\xe1\x93\xbf\xcc\xd3\xb7\x87\x2a\x4f\x7d\x12\xa3\x1d\xf9\x9c\xbd\xca\xdc\xbf\xd5\xef\xd2\x3e\x3c\xd2\x9b\x2e\x0e\x39\x00\xe2\xe0\x79\x00\x90\x57\x00\x5d\x81\x1e\xe7\xc0\x30\x1b\xf7\xa7\x07\x8a\x98\xd5\xbb\xf2\x62\x42\x6e\xbb\xd5\x2d\xdb\xcf\xb2\xec\x3e\xe0\xef\x7a\x3b\x2b\x06\x46\x3f\xcb\x28\x84\xb3\x1a\x20\x0e\x39\xa6\xe2\x3f\x1e\xaf\x16\x46\xb2\x9b\x6c\xe8\x5c\x25\x38\xd5\xcc\x3e\xf4\xba\xe7\x36\x69\x22\x8e\x29\xe1\x59\xdf\x7c\xdb\xbe\x4d\x4f\x6a\xa8\x2e\x88\x43\x3a\x70\x51\x5c\x74\xce\x94\x7c\x3c\xb6\xde\xd5\x58\x48\x6f\x9d\xa3\x43\x91\x61\x6b\xa2\x47\x98\xf4\x11\x43\xba\x20\xdd\xbb\x82\xf0\x68\x38\x9f\x0e\xe0\x90\xed\xbd\xd3\x6b\x37\x98\x33\x99\x61\xe9\xb8\xda\x61\xb5\x23\x57\x59\x12\xb0\x83\x9b\x28\xf4\x35\xa0\x41\x0c\xe5\xc3\x18\x4e\xfc\x59\x38\xf7\x0e\xe2\x90\x0e\xa4\x17\xd9\xe4\x6e\xcb\x48\x78\x98\xbd\x6c\x0d\x56\xaa\xa3\xc2\xf2\x60\xe3\x24\x9d\x64\xed\xbc\x10\xaf\x1c\xca\x19\xe0\x95\x5b\x0d\x39\x00\xe2\xe0\x79\x00\x94\x57\x00\x6d\x29\xfe\x93\x57\x10\x3b\x9a\x57\xb8\x4f\x95\x53\xfd\x0a\xeb\x21\xb5\x1c\x06\xcd\x87\xae\x91\xee\xf1\x43\xba\xf6\xfe\xfd\x26\xd7\x74\xcc\xd6\xc7\x8e\x83\x7b\x4f\xd9\x4e\x64\xdf\xe4\x68\x5e\xe1\xb7\xe9\xa9\x73\x74\xb9\xd2\xac\xee\xb3\xa2\xa3\x9d\x77\x42\x1f\x7d\xfb\x2c\x61\xab\xd0\x14\x20\x55\x7a\x2e\xf9\xe6\x0c\xa6\x48\xd8\x89\xec\x12\x1d\xcd\x2b\xa0\x1d\x54\xb0\x1c\xc4\x9a\xdf\x5c\xc0\xb2\x89\x5c\xc1\x10\x11\xc5\x0f\xc2\xd7\x57\xd4\xf0\x21\x6e\x35\x12\x74\x5b\xd4\xb9\x1d\x73\x22\xbd\x3d\x9a\x57\xc0\xe7\xc6\xbb\x53\xeb\xef\xda\xcb\x1c\xc6\xc4\x9d\x6f\x72\x53\x66\xeb\xe2\x3a\xff\x0c\x93\xfb\x18\xc1\x58\xe1\x84\x16\xce\x77\xa7\x13\xe9\xed\xd1\xbc\x42\x3d\x9e\xcf\xbd\x0a\x81\xe7\x2f\xa9\x16\x3e\x57\x50\x8f\xc9\x87\x10\x73\x19\x4b\x33\x54\x26\xe9\xe5\x55\xf4\xe6\xad\xc7\x38\x74\x9d\x48\x6f\x8f\xe6\x15\x5e\x6a\x99\xfb\xbe\x5f\x52\x8a\x41\x65\x6f\x79\xed\xdc\x22\xd2\xc8\x84\x5e\x12\xcb\x7f\xde\xb0\x66\xde\x36\x28\xc1\xd3\x22\xbb\xea\x44\x7a\x7b\x34\xaf\x10\x15\x2b\x7f\x49\x2d\xb2\xf6\x43\x88\x8b\x51\xef\x63\x35\xc1\xfe\x49\x5b\x49\xdf\xbd\xe8\x33\x19\x37\xab\x1b\x03\xe6\x32\xfb\x65\x4f\xa4\xb7\x47\xf3\x0a\xed\xe8\x56\x38\x7a\x67\x35\xaf\x6f\x92\x6d\x5f\x34\xac\x70\x6a\xcc\xb1\xef\xf4\xfe\xae\xe3\xa6\xc2\x22\x40\xfd\x90\xd1\xd8\x1f\xf5\xc4\x76\x00\x41\xbf\xd4\x63\x6f\xba\x47\x95\x9b\xdd\xa3\xd2\x1e\x0e\xc9\x6f\x4b\xed\xd9\xff\xe6\xae\x58\x98\xfa\xce\xfb\x43\xe8\x2b\x93\x5b\xdd\x78\x95\x78\x3d\xf0\xc2\x0c\xc4\x1d\xb9\xe1\xba\xcf\x88\x69\x72\xb3\xc9\xea\xf5\xbe\x36\x07\x6a\xc4\xd4\xfe\x03\x0f\x26\x06\x3d\xc9\x98\x09\x1d\xfc\x07\x3f\xb2\x87\x8b\xaf\xc1\x37\x5c\x01\x1c\x72\xa2\x37\x75\x59\x75\xbd\x20\x30\xdd\x8b\x4f\xc0\x1e\xdb\xee\xe7\xab\x44\xf1\x6a\x37\x27\x73\xe6\x4d\xd1\x57\x29\x7b\x11\xa9\xa4\x4e\xf8\x04\x02\xe2\x90\xed\x3d\x33\xf8\xc2\xb1\x84\x4d\xc7\xb5\xbc\x77\x92\xaf\xb6\x7a\xff\xdd\xf7\xf9\xbb\xf8\x6c\x12\x35\x2c\x82\x4f\x2a\xa4\xf0\x96\x1c\xcf\x43\x75\x41\x1c\x72\xa2\xdf\xf8\x58\xf2\xfc\x8b\x67\xcd\x9b\x3a\xbf\x10\xf5\x2f\x8c\x06\xd9\x9d\xdf\xb0\x16\xf5\x2f\x04\xa7\x29\x96\xcd\xc4\xcd\x0c\x26\x52\xc1\x01\x55\x00\x07\x9f\xec\x01\x79\x05\xd0\xb4\x79\x9c\x03\x1f\x78\xde\x7f\xf7\x64\x2b\x6d\x33\x1b\xcb\xfe\x64\xa0\xd1\x41\xde\x76\x9b\xab\xcd\x96\xa7\xc5\x7f\x49\xac\x97\x35\xd5\xe8\x53\x31\xd4\x77\x10\x87\x1c\xd3\x77\x1e\x5f\x7a\x4d\x7e\x9f\x89\xd8\x3b\x13\x77\x5e\xe2\x16\xf3\x3d\x34\x83\x70\x71\x09\x69\xdf\x78\xcb\xfc\x84\x8d\x65\x1f\xda\x12\xa8\x2e\x88\x43\x3a\xc0\x49\x14\x87\xd9\x41\xe1\xc2\xd1\xf6\x81\xa3\xbd\x9b\x32\xde\x97\x4a\xcc\x80\xb1\x57\x32\xcd\x04\x35\xda\xd5\x66\xf4\x2d\x25\x9c\x57\x00\x71\xc8\xf6\x06\xbf\x5d\x29\xdc\x91\x20\x22\x8e\xd5\x7c\x97\x7d\x30\x13\x4a\xa6\x7a\x10\x68\xab\x30\xf3\x28\x59\x0c\x77\x4a\x37\x8c\x9e\xe1\x35\x54\x17\xc4\x21\x1d\x98\x38\x7d\x53\x7a\xd1\x34\x67\x34\x8a\xef\xdc\x9d\x96\x1e\xfb\xac\xcf\x9c\xd8\x74\xa1\xf4\xfa\xd6\x52\xb4\x32\xe6\x21\xd4\x77\xe0\xe7\x94\x41\x1c\x7c\xb2\x07\xe4\x15\x40\xe7\xb0\xe3\x1c\x88\xd5\xe9\x63\xdc\xa8\x3b\x8c\xba\xce\x26\x56\xe6\x32\x71\xca\x76\x74\x4a\xf9\x17\xfb\x9d\xfd\xc0\x6e\x9a\x4f\x14\xf3\x22\xf1\x74\xf0\x86\x0a\x80\x43\x8e\x29\xad\xa9\xb8\xc2\xd4\x93\xc8\x73\x92\x6e\x24\xf8\x8c\xfa\x78\x2d\x44\xbc\x1a\x59\xbc\xf4\x4d\x4f\xd6\x9b\x30\x93\xc5\x1a\xde\x67\x43\x75\x41\x1c\xd2\x81\xe8\xbb\xd3\x51\x79\xa3\x56\x8f\x15\xf7\xae\x0d\x24\xef\xec\xd8\x48\xd4\x24\x55\x72\x65\xa2\xbc\x51\x1d\x6a\xaf\x93\x75\x3d\x0d\x5f\xa0\x81\xb8\x23\xcf\xd2\x8d\x91\x93\x51\x0d\xe3\xbc\x78\x84\xd3\x2d\x82\x1a\xb2\x2b\x39\x77\xad\xd0\x92\xb7\x3a\xa5\x15\x1f\xcf\x5b\x22\x53\xa1\x0c\xbe\xf8\x07\x71\x48\x07\xb0\xb6\x1a\xca\x2f\xed\x7b\x71\xac\x9d\x5a\xf0\xd4\xe3\x6b\xdc\x2e\x91\x59\xf6\x65\x21\x73\x7b\xfb\x88\x79\xce\xc5\x2f\x69\xe3\x0c\xe4\x00\x88\x83\xe7\x01\x40\x5e\x01\xb4\xa0\x38\xce\x81\xf7\xf3\x96\x36\xd4\x54\x6d\xd7\x44\x1d\x59\x9a\x6e\x9f\x93\x16\x10\x4f\x2f\x19\x66\x30\xc3\x7f\x26\x33\x9a\x19\x4e\xc5\x44\x53\x0a\xf5\x1d\xc4\x21\xc7\x94\xdc\xe1\x9d\xc0\xd2\x33\x39\x9d\xea\x97\x58\xca\x3d\xbf\x07\x42\x05\xc4\x64\xbe\xa6\x3f\xde\xa9\xc0\x7e\x2f\xc5\x11\x85\x69\x9d\x09\xd5\x05\x71\x48\x07\x7e\x2a\x7e\x1a\x9a\xbb\xab\x54\xee\xf3\xbd\xe3\xe7\x9d\x9e\xa7\xfe\x0d\x12\xae\xe2\x7d\x7c\xca\xf6\x96\x7c\x46\x57\xf5\xa6\xc2\xe0\x87\x6f\x40\x1c\xb2\xbd\x1f\x4b\x48\xe3\x67\x15\x70\x31\xf4\xa8\x46\x43\xe2\x7f\x08\x59\x9b\xa3\x17\x9d\x9e\xb8\x72\xee\x49\x4a\xec\xb9\x57\x4e\x2d\x2e\xfe\x50\x5d\x10\x87\x74\xa0\xfc\x9d\x35\x36\xb7\xf4\x8e\xa8\xba\x40\x4c\x13\x1b\xbd\x0f\x6e\x18\x9d\xf8\xaf\x08\xdd\xda\x33\x7e\xe7\x48\xf0\x7e\xeb\xf3\x26\x42\x0e\x80\x38\x78\x1e\x00\xe4\x15\x40\xab\xbb\xe3\x1c\xc0\x0f\x7f\xa3\xf9\x6c\xf0\x70\x07\xd5\x59\x2b\x67\x6a\xe4\x47\xd5\xce\x63\xa6\x89\x47\x3a\x63\xc9\x9e\x37\xd3\x30\x18\xa4\x17\x37\xa0\xbe\x83\x38\xe4\x98\x8a\x89\xd0\x06\xcf\xfb\xaf\xe1\xbc\x21\x94\x4c\xd3\xf5\xa6\xc1\xda\x67\x48\x61\x77\x2c\xdb\x08\x9c\xc7\xf4\x74\xcf\x90\x9e\x83\xef\xaf\x80\x38\xa4\x03\x38\x91\x46\x73\x0d\xf6\xb5\x9f\x0b\x39\xab\x04\x13\xae\x36\x15\x0c\xd6\xce\x2d\x06\x2c\x71\xe5\x4a\x5f\xd3\x7d\xbf\xfd\xf1\x43\x2d\x54\x17\xc4\x21\xdb\x1b\x70\x4d\x9a\x37\x29\x46\x41\x1f\x33\x46\x35\xad\x7b\xec\xfd\x77\xbe\xec\x82\xeb\x35\x39\xec\x95\xc5\xc9\x55\x6d\x78\x77\x1d\x2d\xa0\xba\x20\x0e\xe9\x40\xcc\xc6\x36\x06\x53\x1b\xc6\x97\xad\x9b\x3f\x57\xdf\x73\xd9\xf6\x7f\xdb\x9f\xef\x62\x1a\x61\xcc\xff\xf0\x52\xc4\xbb\x3e\x61\x21\x13\x72\x00\xc4\xc1\xf3\x00\x20\xaf\x00\x5a\x6a\x1f\xe7\x40\x75\x22\x4b\xd8\x97\x48\x7f\x9e\xc7\x98\x5c\xbf\xfb\xcf\xff\x12\x24\xeb\xba\xbf\x29\xed\xee\x66\x40\x6e\x35\x33\xb4\x28\xf4\x75\x0f\xea\x3b\x88\x43\x8e\xe9\x2f\x2d\x81\x5f\x0c\x0e\x3d\xcf\xda\x74\xfc\x6c\x59\x6b\xcb\x44\xde\x16\x4d\x8c\xea\x93\x86\x50\x57\xaf\x36\x44\x90\x5a\xdc\x89\x83\xdf\x8d\x06\xe0\x90\x0e\x38\x3e\x91\x7a\xfa\x86\x56\x97\x6e\x91\xfe\xab\x87\x2d\xdb\xcd\x4f\x2d\xdb\xc1\x1f\xeb\x7e\x62\x29\x6e\x50\xac\xd1\xf9\x35\x74\xb1\x41\x75\x41\x1c\xb2\xbd\x69\xc4\x0b\xdf\x27\x9a\x98\x37\xac\xc4\xbb\x27\x1c\x86\xc9\xce\xa4\xc5\x09\x18\xb8\x93\x4c\xde\x69\x7a\x4d\x42\x82\x9e\x37\x2f\x05\xd5\x05\x71\x48\x07\xdc\x7c\xe6\xba\x99\xf9\x2f\xba\x9f\xb9\x62\xe7\x98\xd6\x10\xa1\xcf\xea\x24\xdf\xbb\xf4\x29\x12\x0f\x47\xa0\x9c\xcc\xd2\x5f\x65\x00\x72\x00\xc4\xc1\xf3\x00\x20\xaf\x00\xba\xee\x39\xce\x81\xb0\x4b\xc9\x34\x23\x83\x68\xd8\xfd\xda\x29\x58\x71\xe6\x97\x1c\x51\x8d\x05\xce\xbf\xcf\x94\x89\xb4\xf9\xdc\xd3\xae\x15\x7e\x5e\x05\xea\x3b\x88\x3b\xe2\x80\xbd\xa0\xe8\x12\xbb\xeb\x95\xe7\x98\xc4\x77\xdd\xc5\x71\x8c\xd1\x59\x9c\x3e\xbf\x5c\x17\xa7\xfc\x96\xab\xad\xb0\x6d\x14\x03\xff\xae\x40\x1c\xd2\x81\x27\x8d\x36\xba\xaf\x2c\xb1\x5c\x65\x97\x9e\x28\x91\x49\xf8\x45\x7d\x9f\xd4\x5f\x6b\x68\x4f\xb8\xfd\x69\xd5\xd4\x87\x7d\x3f\x10\x5e\xbf\x83\x38\x64\x7b\xbf\xbc\x96\x62\xc1\x4b\x29\x4f\x27\x45\xff\xf8\x29\x1e\x6d\x6d\x4e\x6d\x64\x3a\xa6\x61\xb4\x7b\x03\xe7\xf5\xcd\x91\xe6\x54\xda\x7c\xa8\x2e\x88\x43\x3a\x20\x2b\xf7\xe5\xe2\x64\x72\xc5\xb8\x4d\xf6\x0d\x85\xea\x88\x7b\xb9\x3a\x6b\xaf\x0e\xcf\x8f\xaa\x1a\x3a\x4f\x87\xab\x6d\xda\xbd\x7a\x00\x39\x00\xe2\xe0\x79\x00\x90\x57\x00\x5d\x84\x1e\xfb\x2e\xc3\xb0\xdc\x85\x02\x23\x9e\xdf\x97\xbc\x3d\xdb\x12\x68\xe2\xcd\x5b\x5d\x7f\x9c\x55\xae\xfb\x5c\xac\xa4\x10\xf7\xf3\x76\xb7\xbf\x3d\xfc\xb7\x02\x70\xc8\x31\x65\xe5\x1b\x6a\x09\x71\xee\xe7\x7d\x21\xf9\x50\xbe\x8c\x5c\xb4\x97\x5d\x5f\x42\x74\x49\x98\x55\xcc\xed\x29\xf5\xcc\xf7\x3c\xea\x43\xa8\x2e\x88\x43\x3a\xf0\xa8\xe3\x43\x78\x9d\xd5\x43\x4a\x9d\xd3\x5b\x37\xef\xa1\xc7\xeb\x79\xc8\xef\x1b\xb5\xeb\x61\x87\xfb\xeb\xe6\x71\xa8\x34\x8a\xc1\x19\x1b\x10\x87\x6c\xaf\xd4\xf4\xda\xb5\xc9\x3c\xb3\x7b\xcf\x9e\xa2\xed\xbc\xd2\x09\xfd\x49\xf1\xa9\xdb\xf7\x21\xa5\xbf\x4c\x81\x96\x0f\x63\xf0\x62\x94\x09\x54\x17\xc4\x21\x1d\xe8\xfe\xa1\x3b\xc5\xc0\x57\x5d\xef\x7c\xf1\xbd\xdd\xdc\x65\x3f\xc9\xbb\xcb\xb4\x0a\xab\x3e\xf8\x2b\x24\xb1\xe4\x0e\xe7\x77\x84\xad\x20\x07\x40\x1c\x3c\x0f\x80\xf2\x0a\xa0\x87\x05\xff\xc9\x2b\x88\x1d\xcd\x2b\x48\x4b\x7c\x1c\x5d\x35\x61\x9a\x90\x4e\x5b\x4f\xad\xfc\x16\x5b\x1d\x3a\xf3\x1c\x65\x61\xce\x20\x63\xe6\x47\x2d\x36\x0e\x7d\xe5\xb5\x13\xd9\x3a\x39\x9a\x57\xc8\x47\xe1\x3f\x17\x96\x93\x91\xe4\x15\xb0\xb8\xfa\xc6\x4d\x82\xbc\x0a\xf5\x93\x14\xdf\x05\x53\x63\x8e\x90\x87\x12\xec\x5b\xb8\xef\x4f\x6c\xeb\x04\xd4\xbf\xe3\x7e\x1e\x8b\x6d\x82\xf8\x77\xc2\x46\xcf\x92\xa7\x25\xbc\xfc\x29\xff\xba\xbb\xda\x92\xf2\x9c\xa8\xaf\x68\xbc\x6d\x2c\x9d\x8c\x56\x0d\x8f\x25\xa4\x05\x88\x43\xea\x86\x7a\x8e\x19\x35\x77\xed\x47\x1e\xc6\xa6\xf5\x8a\x7a\xf0\x66\x94\x7e\xe5\xe0\xcd\x3d\xc9\xcb\xea\x04\xbe\xc1\x5a\x25\x4d\xd6\x70\x0e\x02\xc4\x21\x7f\x1e\x85\x2d\xbc\xcc\x4e\x1c\xb6\x84\xe2\x1f\xbf\x92\x54\xc7\xa5\x15\x9d\xd5\x5f\xb2\x78\x47\x66\x62\x2f\xaa\xcc\xa6\xd6\x14\x7d\x50\x05\xd5\x05\x71\x47\x1e\xf5\xf1\xd9\xad\x0b\xea\xf9\x58\x81\xc7\xf2\x35\x1b\xb7\x93\xc5\xf7\xc6\x4f\x45\x8b\x76\xb3\x59\xc2\x80\x39\xdc\x2f\xe5\x2f\x27\xa7\xe1\x47\x7d\x00\x1c\xf2\xe7\x41\xe2\xb8\x10\xdf\xcf\xea\xa6\x40\xb9\xc1\xeb\x88\xa7\xc5\x2b\x80\x5f\xb0\xe6\x2e\x47\x9f\x67\x73\xfb\x77\x82\xf4\xa9\xba\x00\x09\xe8\xe7\x01\xe2\xe0\x29\x12\x90\x57\x00\xc9\x76\x9c\x03\x98\x5a\xdd\x52\x7b\x77\xa3\x32\x69\xa7\x3a\x47\xd4\x0c\x0c\xfc\x25\x88\x77\x3f\x14\x7b\x99\xb5\x24\x33\x91\xa4\x3a\x18\xd2\xc1\x5b\x1c\x20\x0e\x39\xa6\x46\xde\x4f\x29\xb2\xee\x97\x4e\xc8\x3f\xef\x31\x79\xc3\x42\x2a\xe0\x90\xd3\x6f\x7c\x76\x75\x65\x6d\xb6\x53\x7e\xcb\xcf\x4e\x33\x18\xaa\x0b\xe2\x90\x0e\x8c\xdf\xae\x9c\x7e\x6f\x62\x67\x7b\xe6\xa3\x76\x82\x5c\x0c\x73\x71\x32\xa5\x62\xd3\x07\x07\xcc\x07\xb3\x9e\x7e\x8a\xe5\x4d\xcd\xf0\xbb\x49\x41\x1c\xb2\xbd\x85\xac\x14\xbd\xf8\x57\xa5\x7f\x3d\xeb\xcb\x7c\x43\x2d\xa1\x85\x96\x68\x96\xf3\xbc\x99\x80\xf9\x9e\x41\xf6\xe4\xf4\xd5\x39\x15\x38\x2e\x08\xe2\x90\x0e\x38\x55\xa5\x9b\x7a\xa4\x3b\xcd\x36\x68\x4a\xbe\x28\x3b\xf4\xf7\x50\x0b\x7e\xcb\x33\x55\xd6\xef\x1b\x79\x63\xd9\x84\xa4\xce\x9c\x0e\x72\x00\xc4\xc1\x53\x24\x20\xaf\x00\x7a\x12\xfd\xf8\xbc\xc2\xa0\x85\xc1\x63\x16\xef\x72\x62\xb1\xbb\x5c\xec\x22\xbf\x9e\x75\x74\x7b\xf1\x75\x2c\x92\x4a\x3f\x33\x18\xe6\x65\xbd\xdd\xb2\x4a\x0e\x3d\xfb\x0f\xe2\x8e\xe6\x15\xca\x5b\x4c\x85\x32\x1e\x71\x62\x0e\x4c\xad\x4f\x3b\xac\xdc\x18\x7c\x51\x1e\x66\x5e\x1e\x36\x10\x3a\x4e\x4f\xe7\xe2\x16\x44\x51\x01\x55\x06\x71\x47\xf3\x0a\x87\x57\xab\xcf\xbf\x61\x4d\xe1\x58\xc4\x48\x33\xc1\x59\xb0\x37\x31\x79\xca\x1e\x4b\x54\xd7\x76\xd1\xf9\xe2\x4b\x7f\xec\xe0\xe1\x06\xa8\x32\x88\xfb\xdf\xbc\xc2\x99\xff\x5a\x8a\xdd\x10\x6a\xe7\x79\x10\xc7\xc2\xef\xbc\xf7\x30\xa0\xec\x81\x2b\x59\x89\xa9\xc8\xc6\x65\xa7\xad\x39\x05\xc1\xc5\xa5\xab\x19\x44\x50\x5e\x01\xc4\xfd\xa7\xcd\xff\x9b\x57\x80\xf2\x07\xa0\x8f\x22\xfd\x99\x3f\xf0\x12\xff\x7d\xbe\x25\xa8\x64\xae\xec\x4e\x58\xa2\x56\xc8\x00\x3a\xed\xc4\xad\x6b\x85\xbe\x25\xef\x06\x57\xc7\xda\x7d\xc4\x35\x1f\xff\x81\x16\xb8\xd5\xcc\x48\x0b\x56\xff\x56\xfc\xd9\x18\x51\xbc\x8d\xaf\x73\x25\xae\xf4\xb5\x3a\x7f\xc4\x15\x2c\x52\x8c\xaf\x1f\x9b\x7a\x96\xfe\xdf\xcb\x1f\x80\x3a\x77\x4c\xfe\xe0\x91\x0e\x29\xce\xf5\xaf\xf3\x76\x13\xe1\x42\xdf\xc2\xfa\xd2\x44\x3b\x3a\x2a\x30\xa3\x5b\xa6\xe5\xad\xd8\xf5\xb9\xa7\x6f\x07\xa9\xfc\x81\x56\x88\x39\xf1\x91\xd0\x7d\x88\xb4\xd7\x7b\x42\x7e\x2b\x95\x4f\xc7\xc4\xf6\xa6\xd1\x85\xb4\x07\xfb\xc9\x79\x0c\x84\xd9\x17\x0e\xff\xfc\xda\x46\xa1\xf5\xcd\x6a\xad\x80\x18\xc9\x15\xf5\x5e\x87\x6f\x33\x8c\x0d\x03\x3b\x0c\x35\xb5\x03\xd9\x04\xd4\xed\x6a\xc6\x82\x8d\xea\x87\x70\xfe\x00\x74\xf8\x7f\xf2\x07\xd1\xc8\xfc\x41\xc1\x9e\xde\x95\xcd\x6f\x0f\xc5\x6a\x3e\x4f\x76\x85\x5d\x95\xe6\x6a\x5d\x4a\xff\x8a\xee\x89\x22\xec\x1e\xe7\xb2\x2a\x48\x56\x64\x79\x02\x2b\x0f\x49\x14\x45\xe4\xc2\x43\xed\x31\xcd\x6a\xfa\x2d\x57\xd9\x87\xef\xc5\x38\x72\xb0\x09\x84\xc4\xd1\x26\x63\xb6\x22\x73\x23\x95\x6c\xad\x06\x29\xf4\xfd\xae\x9e\xc4\x7a\xc7\xf7\x68\xfe\x60\xa1\xa8\x62\x9e\xbb\xbd\x32\x8e\xa1\x1a\xe5\x3d\xbd\x94\x09\xb9\xfd\x30\x1f\xee\xfc\x7a\x6e\x2d\x9e\xd1\x2d\xec\x95\x27\x32\x27\xf2\x44\x3e\x8a\xfa\x91\xc3\x5a\x91\x7b\xb2\x79\x94\x97\x59\xea\xda\xca\x5b\xf2\xae\xe3\xdf\xd2\xb0\x49\xa9\x2e\xfc\xc9\xfa\xe0\xa6\x6b\x1b\xe5\x01\x7a\x20\xf1\x89\xf4\xf6\x68\xfe\xe0\x4c\xbb\x93\x3a\xb6\xf6\x3d\x57\x4a\x3e\xc3\x9b\x95\x01\x0f\xae\x77\x93\x61\x5c\xcb\x5d\x7b\xd9\xfc\xee\xc9\x12\xbf\xc4\x7b\xb2\x13\xf9\x98\x04\x8a\xc7\xd1\xde\xba\x8a\xb0\x94\xa5\x7c\xcb\xbc\x4c\xb8\xf3\x48\x43\xe1\x05\x46\x9c\x17\x77\xc8\x95\x70\xcb\x8a\x73\x3f\x68\x1b\xa8\xe2\xde\x46\x9d\x48\x6f\x8f\xe6\x0f\x42\xae\x87\xe3\x57\x87\x13\x77\x85\xd3\x85\x6a\x4c\xca\x0b\x27\xda\x87\x7c\xb7\xd0\xb0\x3e\xd8\x57\x0b\x75\xe6\xaf\x63\xd6\xd9\x39\x91\xde\x96\x1c\x39\xec\xf9\x3c\x9b\x4e\x62\x1c\x6f\x95\xd8\xa0\x38\x5e\xc5\x44\xfd\x5b\x53\xda\x42\xa6\xa7\x5f\x64\x2e\x6a\x3e\x2d\x30\x1c\x72\x2e\xed\x39\xb1\x25\x34\xe8\x87\x7a\xdc\xf2\x09\xcb\x26\xb1\xfc\x6e\x84\x5a\x9c\x5e\xc1\x05\x79\xe3\x01\xb4\xb6\x37\xb1\xac\x9f\xea\xea\xd3\xd0\xbd\xc4\xbe\x12\x05\xa0\xac\xb3\xc0\x49\x70\x00\x87\x5c\x8e\x28\x61\x12\x6e\xd9\x58\xd2\x89\xe4\x5a\x5f\xda\xf9\xe2\x85\x27\xf8\x7c\x79\xd0\x21\x47\x62\x63\x78\xa7\x82\x2d\xb0\x29\x12\x1d\x7e\xa5\x39\x88\x3b\xf2\xaa\x74\xd5\xa9\xfa\x40\x9f\xe0\x3d\xae\xfc\x8f\x3f\x35\xc2\xe4\x70\xe3\xef\xae\x2f\xad\x92\x8c\x28\xd1\x0e\x0b\xed\xcf\xe7\x31\xe1\x41\x75\x41\x1c\xb2\xbd\x42\x74\xdf\x55\xf2\xd1\x6f\x25\xb5\x9a\xb5\x54\x2e\x96\xb3\xaa\x38\xdd\xee\x8c\x09\xe5\x9f\x93\x4f\xe2\xbc\x34\xbc\xfc\xac\xd7\x0d\xaa\x0b\xe2\x02\x24\xfe\xfb\x54\x1c\xa1\xd0\x7a\xed\xa3\x51\xe1\x88\x9a\x22\xde\x10\x6b\xd7\x53\xfd\xe0\x6e\x7a\xcd\x75\xb4\x61\xe9\x91\x18\x36\x79\x33\x1b\xf1\x10\x28\x7f\x00\xe2\x02\x24\x68\x50\x7c\xfd\x82\xfe\x67\x76\xfe\xcb\x02\x1a\x34\x69\x1e\x67\x80\x54\xca\x39\x11\xe1\x5a\x7a\x07\x3e\x86\x20\x7a\x97\x0a\xe3\xa2\x2b\x2e\xfb\x7d\x84\x55\x49\x65\x0c\xba\x73\x73\x8d\x2f\xdf\x47\xc2\xd7\xd6\x00\xee\xc8\xf7\x12\xb6\xbd\x3a\xbd\x48\x9b\xde\x64\xdf\x3a\x98\x13\xdc\xd3\x0e\xc6\x66\x3d\xa3\x91\xcb\x63\xb4\x98\x11\x49\x47\x26\xe1\xe3\x8a\x02\xd5\x05\x71\x48\x03\x22\xc2\x78\x49\x74\x2d\x64\x45\xf0\x1d\xe2\xdb\x1a\x83\xa4\x22\xf8\x4a\x2e\x71\xba\x15\x98\x54\x13\x06\xad\xdc\x53\xd6\x1d\xc3\x81\xeb\x02\x38\x64\x7b\x85\x9d\x8a\xc7\x2f\x06\x9f\x6f\x89\x76\xb5\x4f\x13\x0a\x9a\x50\xf6\xbe\xc6\x42\xd8\xc3\x48\x9a\x6d\xc3\xdb\x41\x30\xc0\x11\x6e\x0c\xd5\x05\x71\x48\x03\xd6\xd1\xce\x47\x7c\xeb\x75\x5b\x95\x7b\xb1\xa4\xba\x66\x5e\xe4\x41\xef\x27\xda\x48\xa3\xa3\x79\xe7\x86\x17\xdd\xa7\x49\x49\x1a\x16\x28\x7f\x00\xe2\xfe\x31\xe0\x7f\x4f\x95\x7f\x51\x00\x74\x02\x3b\x4e\x01\xf3\x82\x7d\xe9\x9b\x0d\x72\xdf\x76\xfa\x14\x29\xeb\x64\xbf\x2d\x32\x63\xa9\x56\x7d\x4a\xd4\x0a\xc4\xe8\xa8\xbe\x81\xea\xfe\x1a\x7e\xcd\x04\x88\x43\x0e\xe9\xc4\xa7\x79\x73\x3b\xcd\x3d\x7e\x7d\x34\xd4\xa8\xa9\xfc\x8f\x1b\x63\xcb\x65\x07\x11\xaf\x36\xc7\xba\x53\x2d\x5c\xad\x52\xc5\x15\xa1\xba\x20\x0e\xa9\x40\x29\x0b\xed\x44\x4f\x77\xc0\xd5\x2f\x17\xbf\x78\x66\x0d\xf4\x6b\x39\x08\xd4\x0d\x0a\xf3\x98\x6b\xba\xd2\x92\xdc\x26\x50\x3b\x0f\x3f\xd3\x0e\xe2\x90\xed\x15\x98\xa7\x68\x0f\x10\xa7\xb9\x38\x7a\x85\x8b\x03\xfb\x4b\x54\x87\x2c\x77\x99\x21\xce\x7e\x6e\x8b\x4a\x06\xaf\x21\xd7\xb7\x94\x54\xa8\x2e\x88\x43\x2a\xe0\xeb\x48\x13\x3d\x78\x40\x20\x4c\xe3\xc2\x8d\x43\xbb\x29\x13\x98\xcc\x48\x32\x5f\x9f\x5d\xa1\x46\x26\xba\x3c\x78\x69\xd3\x00\x17\xba\x86\x02\x71\xff\x28\xf0\x9f\x75\xcb\x5f\x1c\x00\xad\x26\x8e\x73\x40\x63\x03\x7b\x23\x9b\x43\xc5\xea\xd6\x7d\x4e\xf6\x5f\x4f\x3f\x24\x86\xef\xa2\xd8\x0a\xa9\xb0\x4d\x3d\xa7\x79\xaf\xeb\x6c\xaf\x3b\x0f\xbf\x86\x12\xc0\x21\xc7\x74\xf2\x19\x46\xa9\xf4\xe9\x2b\xcb\xf6\x87\xc4\x1e\xbd\xf1\xe9\x4c\x37\x82\xd0\x95\x38\x76\x6e\xce\x49\x9f\x67\x36\x32\x9e\x95\x2f\x80\xea\x82\x38\xa4\x03\x64\x6c\xde\x67\xbe\xa3\xb4\xb3\x85\xbd\xe7\xeb\xcf\xef\xf2\x96\xc9\xb7\xac\x51\x7c\x30\x59\x33\xa1\xf8\x7a\xd4\x2d\x82\x64\xeb\x3a\xfc\x4a\x33\x00\x87\x6c\x6f\x33\xa3\xbe\xfa\xa7\x2a\xf4\x4d\x45\xd3\x6c\x2f\xbe\xe8\xc6\x33\x36\x46\x03\xb1\x68\x7c\x8a\xec\xa8\x12\xb1\xd3\x9e\x98\x0a\xf0\xde\x0f\x88\x43\x3a\x10\x1a\x88\xf2\x2b\x91\x8f\x57\x8d\x22\xbe\x0e\xfd\xae\xc8\x35\xab\xe7\xa7\x0c\x68\x6f\x8c\xf8\xdb\xbb\x14\x18\xf5\xc9\x0e\x27\x5c\x85\x1c\x00\x71\x90\x03\xff\xbb\x88\xfc\x8b\x03\xa0\xa5\xdd\x71\x0e\x94\xb4\x07\xd3\xac\x46\x11\xe2\xe1\x85\x6d\x98\xf7\xda\x1b\xe2\x3b\x71\x7a\xb8\xd8\xa4\xfd\xcc\x68\xd3\x3b\x8d\x43\x85\xbb\x4f\x0e\xf5\x1d\xc4\x1d\x79\xfd\x1c\x53\x91\x4b\x27\x85\x71\x97\xff\xad\x1e\x94\x3c\x57\xcb\x16\xd7\x96\x4e\xbc\xd3\xe9\x31\x07\x8e\x24\x19\x64\x01\xdb\x9c\xca\xf0\xdf\x0a\xc0\x21\x1d\xf8\x22\xac\xa1\x38\x83\xf5\xc6\xe5\xf2\xb2\x40\xd1\x44\x35\x17\xf1\x70\x4c\x40\xb7\x86\xa3\x72\x8f\x42\x11\xde\xa7\xdd\x0b\xf2\xf0\xf3\xc1\x20\xee\xc8\x7b\xdd\x3f\xae\xec\x65\x3a\xb4\xd2\x2d\x6e\x45\xd1\x70\x2e\x12\x94\x9f\x9e\x09\xcd\xcc\x2e\xf7\xec\xd0\xc0\x50\xb8\x18\x7b\x2f\x63\x1f\xaa\x0b\xe2\x90\x0e\x9c\x35\xf0\xab\xf5\xe5\x71\x67\xae\x32\xcf\xa1\x0f\x67\x90\xa4\xad\xa6\x37\x79\x6d\x8c\xb9\xfb\xe0\x0c\x36\x27\xf1\xce\x86\x40\x3d\xe4\x00\x88\x83\xe7\x01\x40\xfe\x00\xb4\xce\x3e\xce\x81\x49\xf2\x79\xba\xa4\xc9\x38\x05\xcb\xcd\x1b\x1d\xe5\x57\xdf\xb8\x3d\x1f\xd5\x6e\xe0\xa9\xe7\x93\x25\x8d\xb3\x30\x6d\xbc\x68\x0e\x3f\x86\x02\xe2\x90\x63\x1a\xf3\xe5\x49\xd1\x63\xd1\xc9\xd3\x2e\xab\xed\xfa\xe7\x3c\x54\xb3\xd2\x6f\x9c\xf3\x9f\x94\x2b\x75\xe5\x78\xe2\x10\x96\xbd\x87\xf9\x03\xaa\x0b\xe2\x90\x0e\xe8\x3c\x70\x29\x3c\x65\xca\xdd\x9a\x2b\x7d\xd9\xaa\xd2\xfa\x0c\x61\x68\xb5\xff\x0d\x2c\xd1\x3e\xbb\xb4\x7c\x2a\x57\xb2\x4b\xd2\x70\x7b\x41\x1c\xb2\xbd\x83\xd2\xcf\x2b\x46\x2f\xd1\x8d\x5c\x38\x6d\x38\xf3\x7c\x98\xbc\xa8\xbb\x81\x93\x14\x3b\xa3\x08\xad\x79\x8d\xe0\xea\xf5\x9b\x51\xf0\x32\x03\xc4\x21\x1d\xa8\x6d\xc5\x20\x48\xdf\x26\x47\xf7\xed\xb8\xb4\x62\x59\x56\x16\xe2\xa9\x30\x76\x3a\xf5\xda\x6c\xff\x6b\x09\x76\x2f\xd3\xc7\x6e\x51\x90\x03\x20\x0e\x9e\x07\x3c\xfe\xee\x00\xe8\xa2\xe7\xd8\x6f\xe7\x5c\x91\x7c\x1d\x7f\xb3\xfb\x4a\x9e\xbd\x3b\x1a\xa6\x52\x62\xfe\x8d\x0b\x3b\xdc\x8d\x1d\xfe\xb2\x37\x37\xdb\xb0\x49\xae\x73\xc0\xe7\x6d\x10\x87\x1c\xd3\x83\x5b\xac\x31\x69\xec\xa9\x21\x33\xea\xb5\xbe\x32\xbf\x23\x55\x67\x2e\x32\x3d\xf7\x29\x93\xbf\x5f\x9f\xca\x30\x18\x19\x52\xce\x0a\xd5\x05\x71\x48\x07\x52\x8c\x43\xe9\x5f\xec\x4b\xc5\xf2\xd4\x53\xa0\x45\x3f\x7a\xdd\x13\x49\x8f\x9a\x34\xa3\x40\xef\xcc\x92\x41\x78\x4b\xf0\xb2\xe3\x37\xa8\x2e\x88\x43\xb6\x17\xef\xb4\xda\xe5\xea\xbe\xd5\xbb\x02\x66\xb7\x14\xda\x3c\x1f\xcb\xd6\x57\x10\x5d\xe0\x6a\x49\x43\x75\x1a\xa7\x74\xd8\xd1\xbd\x0b\x3f\x3a\x05\xe2\x90\x0e\x58\x9d\xb6\x28\x2e\x51\x17\xc7\x2e\x4c\x4a\xbc\x9e\x4c\x6f\x94\xf0\xfd\x19\x0b\x9b\xb5\x59\x01\xb3\x36\x39\xe3\x16\xee\x72\xc7\x0a\xe4\x00\x88\x83\xe7\x01\x40\xfe\x00\x74\x05\x7a\x9c\x03\xb7\x22\x2a\xe3\x2c\x2f\xdc\x48\xc3\x9a\x7d\x59\xc8\xec\x79\x95\x88\x92\xa3\x47\x91\x7f\x40\x9e\xd3\x97\xfd\xaa\xde\x4b\xec\x5e\xf8\x96\x1b\x88\x43\x8e\xa9\xcc\x8a\xe2\xc0\x24\x79\xd0\xb0\x38\xbf\x04\x77\xa8\x2a\x91\x25\x2e\xd3\x0f\xea\x0e\xa7\x25\xfb\xd6\x37\x1e\x46\x94\x28\x6c\xbd\xf0\xe3\xae\x00\x0e\xe9\xc0\x6b\x9c\x9b\x37\xce\x5f\x66\x88\x24\x5a\x19\x7b\xfc\xa1\x02\x8d\x98\xae\x4a\x3c\x05\xe5\xbd\x0f\x9d\x25\x4e\xe7\x45\x89\x21\x55\x52\xa8\x2e\x88\x43\xb6\x77\x9a\x7c\x76\xa3\x7e\x2f\xfe\xbe\x1d\x8f\xea\xe5\x95\xcd\x8c\xbb\xbf\x84\x22\x35\x36\x9a\x97\x23\x50\x5f\x3b\xb6\xdd\x63\x3b\xb8\x09\xd5\x05\x71\x48\x07\xe2\x83\x75\x7a\xaf\x5d\x17\x9f\x8b\x19\x15\x71\xbd\xab\xb9\x7b\xe0\xa5\xf9\x64\xd2\x84\x7a\xbc\x78\xbc\xdf\x42\x99\x82\xfd\x66\x13\xe4\x00\x88\x83\xe7\x81\x12\x40\xfe\x00\xb4\xa5\xf8\x4f\xfe\xc0\xf7\x68\xfe\xc0\x10\xcf\x67\x26\x99\xb5\x70\xa8\x74\x23\x8d\x08\xbb\x7d\xee\x57\x5e\x25\xe6\x39\xb4\x09\xe1\x81\x0b\xad\x05\xe6\xd3\xc9\xf5\x27\xf2\x59\x4a\x94\xa1\x23\x87\xb5\x25\x6a\x60\xc2\xc8\x63\x2c\x8f\xfc\x1c\x7b\x69\xf8\xc3\xc5\xa2\x27\x85\xca\x1f\xa4\xd8\x7b\xf7\x3f\xd4\x7f\x98\xfe\xa0\x10\x78\x22\x9f\x1c\xf5\x3d\x9a\x3f\x60\x71\xdf\x78\x86\x36\x34\x3a\x41\x78\xa7\x62\xe1\xfa\x72\x0e\xaa\x8a\xa2\xf8\x4e\xcc\xeb\x2a\x8c\x1c\xc2\xfe\xab\x71\xeb\x64\x9f\x4e\xa4\xb7\xbf\x8f\x1c\x36\xf1\x6c\x8c\x4c\x73\xef\x67\xbe\xd1\x47\x74\x64\x8a\x5c\xf9\x28\x9e\xf5\x31\x02\x85\xb5\x02\x57\x25\x52\x3b\xc3\x3e\x36\x3c\x25\x3b\x91\xde\x1e\xcd\x1f\x88\x05\x1b\x9d\xdd\x7e\x2d\x92\x5b\xf5\x45\xe8\x7b\xf7\xa7\xec\xcf\xa1\xd5\xde\x4e\x07\x02\x5f\x42\x5e\xe4\xe1\xf8\x96\x54\x99\x9d\xc4\xcb\x65\xa4\x50\xf8\x8e\x1c\xd6\x98\x1e\xe5\xfd\xc2\xb7\x55\xb2\x94\x46\xe7\x6c\x66\x91\xfd\x1b\x14\x66\x41\xa1\x0e\xa8\xaf\x4c\x05\x1c\xca\xac\x99\xca\x65\xbf\x9e\x48\x6f\x8f\xe6\x0f\x96\xaa\xac\x4c\x9e\x96\x8b\xc5\x50\xc5\xf3\x38\x4f\xa9\xcc\xd5\xad\xd5\xa5\x3a\x31\xb6\xac\xe5\x9d\xcd\x2b\x10\xd3\x0a\x2a\xd7\x38\x91\xde\x1a\x1c\x39\x6c\xaf\xeb\xd0\xc6\xbd\xef\x1f\x87\x28\x0f\xef\xb0\xe9\x71\x68\x18\x0c\xf4\x6c\xea\x17\xb9\x3d\x2e\xba\xaf\x2c\x8a\x3d\x5d\xfe\xe8\x04\x76\xd0\xf5\xfe\xdd\x2f\xf5\xd8\x0b\x3f\x5f\x2b\xe9\xa7\x83\x25\xc2\xfa\xe3\x43\x8f\x6a\x4a\x89\x57\x07\x14\x27\x7f\x62\xef\x7e\xd1\xd2\xd3\x7c\xe1\x98\xc2\xfe\x86\x19\xbe\xf0\x03\x70\x47\x3e\x92\x36\xb4\xd8\x82\x91\x7c\xbb\x9f\xb5\x36\x31\xa5\x29\x38\xbe\x80\xb0\x66\xb2\xa9\xcc\xfc\x10\xed\xa3\x67\xfd\xb4\xe9\x3e\x15\x1c\x66\x06\x71\xc8\x89\x9e\xaf\xb1\x9a\x91\x72\x08\x93\x12\x87\xee\x57\xde\xfd\xe8\xca\x37\x58\x13\x9c\xb6\xfb\xfb\x52\x9b\x53\xfa\xeb\x17\x2c\x35\x0c\xe3\xa1\xba\x20\x0e\xd9\xde\x7b\xaf\xbf\xf0\xd1\x8b\xd5\xad\x2c\x74\xef\x2e\x6f\x99\xaf\xfd\x9e\x79\xf2\xd9\x6c\xac\xe2\x09\x19\xff\x8e\x51\xa8\x22\xe5\x6d\xb8\xbd\x20\x0e\x39\xd1\xdf\x9d\xbf\x43\x14\x9c\xc6\xd8\x68\xad\xbb\x9e\x65\xe1\xc5\xc2\xf8\x25\x3f\xcc\xc6\x62\xc2\x48\xc9\x6b\x81\xe6\x65\x5b\xde\x2c\x29\x34\xd1\x83\x38\xf8\x64\x0f\xc8\x1f\x80\xa6\xcd\xe3\x1c\x90\x25\x40\xe1\xba\x69\x1c\x5b\xce\xf5\xe0\xb1\xaa\x74\x64\x19\xab\xf2\x1a\x2e\xb3\x88\x70\x5e\xd1\x03\xa1\x9d\x15\x83\x0c\x8e\x2c\xa8\xef\x20\x0e\x39\xa6\xc5\xe6\xfb\xa4\xc9\xfd\x63\xba\x98\xe4\x9e\xa7\x05\xf1\x5c\x45\xa7\x3b\x45\x9b\xe8\xdf\x70\xab\x52\x6a\xdd\x16\x22\xd5\x19\x78\x09\xd5\x05\x71\x47\x2e\xfe\x67\x42\x93\x0c\xcb\x2d\x82\xa8\x42\xe4\x8c\x15\xe5\x7e\x86\xc4\x3f\xc6\x2b\x48\x11\x10\x8d\xef\x49\x8c\x39\xdd\x9c\x95\xbb\x09\x5f\x50\x02\x38\x64\x7b\xab\xa9\xbe\x8c\xc4\x2d\x94\xc5\x7c\x27\xec\x8e\xca\x66\x72\x23\x9c\x1f\xf3\x0c\x9d\x5e\x75\x09\xa4\xdf\xd0\xeb\xd0\x66\x93\x58\x81\x9f\xbb\x04\x70\x48\x07\x72\x6a\xe5\x83\xcf\x35\x2b\xca\x2f\x45\x2f\x8c\xa2\x63\x60\xbd\x18\xd8\x5e\x60\x1a\xf1\x5b\x66\x99\xe8\x7b\x4e\x54\x5b\x62\x0b\x7f\x20\x0b\xc4\xc1\x27\xfb\xa1\xbf\x3b\x00\x3a\x87\x1d\xe7\x80\x51\x43\xb4\x66\xe5\x9d\xe7\x34\xde\x8c\x86\x09\x7e\xeb\x2d\xd7\xba\x1e\x9d\xd6\xf8\x1c\x18\xb4\xc1\xdc\x72\xd5\xb0\xe1\x9d\x39\x7c\x27\x00\xc4\x21\xc7\xb4\xc0\x65\xd2\xe9\x0e\xfd\xed\x4f\xb6\x79\x6e\x1a\x65\xaf\xa3\xa8\xb9\xbb\x92\x56\x5c\x7b\xbe\x9e\x76\x1e\x8b\x95\xf2\xb8\x1b\x09\x87\x83\x41\x1c\xd2\x01\xa9\x17\x06\x8a\xad\x1b\x22\xb8\x76\x78\x54\xa5\x85\xfe\xd1\x72\xad\xbc\xcf\xef\x76\x1b\xf5\xb8\x65\x97\xa4\xf7\x5c\x61\xe0\x81\x3f\x94\x07\xe2\x90\xed\x7d\xb1\x73\x8f\x5f\xfc\x94\xe6\xa7\x25\xec\xc9\x3e\xa6\x2b\xd5\x16\xa6\xde\x3f\xea\x07\x7f\x6e\x9f\x6d\xdf\xd9\x51\x11\x48\x76\x82\x43\xd2\x20\x0e\xe9\x80\xb4\x43\x8e\x41\xc5\x0f\x9f\x25\x37\xfc\xb0\x9a\x14\x9c\xad\x77\x92\x72\xf4\xa6\x09\xbb\xf4\x02\xdf\xa4\xe8\x0a\xae\xdd\xf0\x84\x2f\xfe\x41\x1c\x3c\x0f\x00\xf2\x07\xa0\x05\xc5\x71\x0e\xe0\x4e\x79\xab\xb6\x8e\xf4\x52\xfc\x52\xa0\x13\x1e\x98\xb2\xd1\x28\xa0\x45\xdf\xba\xc1\xc0\x82\x2f\x24\xa0\xd5\x33\xf7\xe5\xf6\x47\x78\xe3\x03\xc0\x21\xc7\xb4\xa8\x9b\xa2\xfd\xe5\xd6\x72\xd0\xc0\x8f\xe2\xbd\x4b\x14\xdc\xc2\xc3\xfa\x81\x8f\x6d\x85\xf8\x94\x9e\xe2\x8b\x7f\xc8\x27\x2a\x69\x86\xea\x82\x38\xa4\x03\xf2\x21\x8a\xbb\x72\xc3\xa7\xec\x32\x23\x84\xc9\x8a\x5e\x16\x6d\xc6\x62\xe2\xfb\x46\x27\x7a\x54\xa1\x9f\x2f\xa8\xb6\xdd\xfc\x05\x87\x8e\x41\x1c\xb2\xbd\x9f\x0c\x9c\x48\xd6\x74\x4c\xeb\xda\xad\x7f\xbf\xb3\xb0\xba\x74\xa5\xf3\x0a\x51\x55\x51\xc3\xfd\x67\x16\x1e\x59\x9f\x77\xeb\x1f\x8c\x40\x75\x41\x1c\xd2\x01\x74\x06\xfa\x8f\xdd\x0f\xcf\x5b\x7f\x8d\x8a\x58\x53\x5f\x9f\x41\x31\xbb\xab\xc8\x17\x69\xea\x84\xb1\x68\x9f\x16\x93\xa9\x5b\x2d\x04\x39\x00\xe2\xe0\x79\xe0\xf7\xdf\x1d\x00\xad\xee\x8e\x73\x40\x82\x45\xc5\x61\x81\xa9\xb5\x8b\x7e\xa8\x52\x65\x2b\x9b\x94\xc4\xed\xa5\xd9\x56\xe7\xc3\x74\x69\x85\xeb\x8a\x89\x22\x16\xe9\x4f\xa0\xbe\x83\x38\xe4\x98\x5e\xc2\x98\xf4\x3d\xf8\xbc\xcd\x8e\x4f\x71\x3b\xda\x41\x9b\x19\xfd\x43\xbb\xf0\x68\x5f\xf1\x14\x4b\x04\x86\xde\xa9\x4a\x1a\x5c\xf8\x1c\x03\xe2\x90\x0e\x10\xbd\xef\xbf\x43\xb2\x57\xdb\xdb\x97\x4a\xbc\x7e\x96\x01\xfb\x05\x5a\xd7\xe4\x12\x56\x3e\x9f\xde\xad\x92\xab\x74\xb2\x07\x5c\x15\x50\x5d\x10\x77\xe4\xa5\xc5\x14\xe6\x1b\x24\xa7\x9b\x79\xdd\xf4\xc2\xf3\x38\x2f\x98\x10\xa6\xba\xf9\x1a\x4b\x1c\x9e\x51\x1b\xe0\x10\xef\x9a\xba\x91\x55\x07\xd5\x05\x71\x48\x07\xbc\xad\xe7\x5b\x96\xe2\xb2\x24\x59\xcc\xcf\x9f\x17\x7e\x48\x41\x1c\x3b\xab\x65\x65\xb6\x85\x6a\x95\x54\x5e\x50\xcb\x55\x1e\xaf\x06\x39\x00\xe2\xe0\x79\x00\x90\x3f\x00\x2d\xb5\x8f\x73\x80\xd0\x89\xdb\x46\xe3\x45\xb0\xe3\x1d\x4f\xce\xb2\x78\x93\x5e\x3a\x6d\x87\xa4\x92\x3d\x91\x10\x71\x1f\x9f\xcf\x36\x62\x6a\x55\x70\x5e\x08\xc4\x21\xc7\xd4\xa5\xe7\xad\x7d\xe3\xc5\x87\x82\xd9\x8f\x93\xb2\xb4\xfd\x36\xcf\xa6\xa7\xcb\x6e\xf7\x26\xee\x61\x1a\xde\x66\xcb\x1b\x22\xbc\x5c\x04\xd5\x05\x71\x48\x07\x7c\xde\x9a\x94\xbf\x70\xbb\xd7\xc0\x82\x59\xcc\x20\xf8\xeb\x14\x9f\x99\x23\x2b\x36\x07\x6b\xe3\xaf\x42\xea\x29\x1d\x22\xb9\x6e\xf8\xe2\x1f\xc4\x21\xdb\xcb\x12\xde\xc7\xb2\xee\x4f\x4d\xcc\xa8\xbf\x38\xa4\x54\x2a\x2d\xe3\x3c\x1a\xff\x16\xe3\x9c\xf5\xfe\x4d\xfe\xdf\x59\xdf\xd2\xb5\xfb\xa1\xba\x20\x0e\xe9\x40\x40\x5c\xf2\x60\xcb\xb0\xe2\xe9\xa1\xc5\x2f\xea\x96\x77\xd2\x8a\x18\xf0\x3b\xe5\x58\x52\x34\x4d\x06\x46\x6d\x1e\x6c\xf6\x0c\x92\x43\x0e\x80\x38\x78\x1e\xe0\xfb\xbb\x03\xa0\xeb\x9e\xe3\x1c\x58\x97\x2f\x66\x7f\x8d\x2f\xfc\xb1\xc0\xf0\xfa\x65\xf3\x9c\x9b\xe5\xc4\x97\x6e\x4c\x78\x11\xdd\x7c\xf2\x86\x2d\x3e\x4c\x9b\x63\x04\xbe\x11\x02\xe2\x90\x63\xaa\x6c\xf0\x53\x8b\xf6\x66\x8b\xda\x4e\x81\x78\xe5\x61\xf8\xe3\xcd\x10\x43\xb9\x07\x01\x44\x26\xa1\xfe\xaa\x7d\x07\xeb\x7d\x45\x67\xa1\xba\x20\xee\xc8\xc7\x93\x7f\x96\xc5\x61\x24\x55\x8d\x09\x64\x98\x73\x0d\x8b\xdb\xf3\xda\xdc\x98\x18\x67\x78\x58\x15\xcc\xec\x70\xc0\xdd\x5f\xb5\xad\x05\xd5\x05\x71\xc8\xf6\x72\x5e\x50\x6d\x4b\x26\xf5\x3b\xd8\xad\x74\x19\x3b\xdb\xe3\x53\x92\x97\xf0\x19\x23\xe0\x42\xc0\x75\x33\x26\xfe\x42\x7c\xc5\x41\x78\x83\x19\xc4\x21\x1d\x20\xfd\x84\x67\x8b\xfb\x39\xb4\x76\x21\x16\x77\xe4\xe5\x7b\xfc\xf3\x96\x64\x11\xe1\xca\xd4\x92\x49\xa8\xb2\xcd\x16\x91\xdf\x52\xe1\xef\xa8\x81\x38\x78\x1e\x00\xe4\x0f\x40\x17\xa1\xc7\x39\x60\xa8\xaf\x64\x11\xbf\x8d\xd1\x5f\x5c\xff\x40\xef\x30\x92\x61\x3f\x99\x3e\x15\x95\x8b\xe8\xea\xbd\x6d\x4d\x76\x9f\x6d\xfd\x6a\x51\xa8\xef\x20\x0e\x39\xa6\x53\x5b\x9f\xb4\x39\x56\xf5\xe3\x1b\x76\xb7\x7f\xa6\xf6\x14\x07\x6c\xd5\x3b\xa7\xb2\xbc\xfc\xd9\x65\x34\xa3\xc8\x6f\x58\x5a\x0a\xaf\xdd\x40\x1c\xd2\x81\xb3\x0a\x6f\x05\x73\xf8\x29\x4a\x17\x49\xde\xf9\x6d\x7b\xcf\x2f\x0a\x48\x1f\xfe\xa2\xde\xc2\x7e\xfd\xec\xd0\x55\x8f\x6d\x9b\x01\xce\xd2\x83\x38\x64\x7b\xa3\xd8\xa2\x56\xe7\xfa\x4a\x92\x82\x44\x45\x0b\xd9\x37\x58\x64\xad\x8c\x39\x8c\xb6\x87\x4d\xec\xbe\x45\x55\x2a\x71\xea\xb8\xc0\xbf\x05\x10\x87\x74\x40\x63\x46\x90\xb3\x29\xce\x00\x55\xb2\xc9\xf3\x96\xe9\xa6\xc2\x94\xbe\x17\x57\xea\xe7\x71\xdc\x2f\xb3\x17\xae\x66\x1c\x28\x16\xc2\x2f\xa6\x03\x71\xf0\x3c\x60\x00\xc8\x1f\x80\x1e\x16\xfc\x27\x7f\xe0\x7b\x34\x7f\xb0\xfb\x44\xb7\x7f\xe5\x32\x0d\xad\xf6\xbb\xb3\xe7\x3a\x07\x36\xbd\x0e\x62\x23\xac\xc6\x3f\xe3\x3e\xe2\xd5\x50\xac\xf7\x89\x92\x49\x38\x91\xad\x93\xb8\x23\x87\x65\xa8\xcb\xee\x2c\x37\x1b\x43\xf9\x1d\xc9\x80\x41\xc3\x9f\x64\x12\x94\x55\x39\x90\x7c\x1f\x1f\x77\x5b\x5b\x93\x92\xe4\x56\xe4\xd0\x89\x6d\x9d\x80\xfa\x77\xdc\xcf\xa3\x67\x50\x83\xce\x3b\x35\x9e\xba\x9b\xc3\x95\xdc\x82\x47\xfb\xb1\x10\x99\xb4\x2e\xaf\xb6\xfc\xfe\xaf\x44\x32\x3a\xfc\x1f\xce\x32\xf0\x7b\x8f\x00\xdc\x91\xef\x34\x27\x66\x4a\x78\xf2\x3d\xd9\x5b\x8d\x62\xae\xa3\xc8\x77\x97\xe1\xb9\x40\x40\x45\x77\x0a\x57\x07\xcb\x27\x70\xf6\x5e\xfa\x16\xfc\x19\x30\x10\x87\xfc\x79\x28\xdd\x36\x6e\x7c\x48\x2e\x57\x19\x3d\xc1\xcd\xef\x12\x7d\xf9\x77\x35\xa9\x1d\x79\xb9\xb8\xe5\xbc\x93\xe6\x33\x3c\xd3\x2d\x0d\xf8\x7d\x90\x20\x0e\xd9\xde\xd9\x17\x11\xbf\xb1\x31\x2f\x7c\x5a\x66\x92\x57\xa3\x3b\xef\x10\xe0\x68\xa9\xe0\xd6\x7b\x76\x72\x7d\x17\x95\x43\xf8\xde\xb7\x1f\x31\xf0\x3b\xc0\x00\x1c\xf2\xe7\xa1\xc5\x24\x7f\xfd\xce\xca\xd7\x5f\xaa\x21\x1e\x43\xed\xa2\xda\xe7\x35\x4e\x15\xeb\x65\x31\xb0\xe1\xd0\xf5\x56\xde\x94\x5d\xa0\x7b\x0f\xfd\x3c\x40\x1c\x3c\x45\x02\xf2\x07\x20\xd9\x8e\x73\x60\x4f\xc4\x64\xf9\x9c\x63\x08\xc1\xf3\x5c\x8c\xa9\xbb\x64\x16\x9d\x0a\xdf\x75\x05\xd5\x3e\xa7\x4c\x11\x3d\xb2\x16\xec\x52\xd8\xb0\x83\xfa\x0e\xe2\x90\x63\x3a\x22\x27\x30\xd6\xf1\x5b\x25\xad\xdc\xca\x62\x02\x5d\xac\x34\x9c\x4d\x27\x4c\xb2\x17\xb5\x47\x44\x90\x99\x8d\x2f\x41\x13\x33\x16\xaa\x0b\xe2\x90\x0e\x04\xfc\x56\x16\x97\x96\xb8\x92\x5a\xf5\x59\x79\x07\xd3\xc1\x6e\xe2\x21\x53\x55\x80\xa0\x4c\xbf\xa5\xe1\x76\x56\x48\xb5\xce\x04\x7c\x9a\x04\x71\xc8\xf6\xea\x10\x7d\x53\x98\x1c\xf0\xfe\x6e\x7b\x9e\x6f\x47\xa4\x69\xfa\xa7\x8f\xf5\x4f\x61\x15\x47\x12\x07\xab\xdb\x85\xa2\xd6\x23\x65\xef\xe1\xfb\xb0\x00\x0e\xe9\x80\xf1\x94\x48\xd9\xe1\xee\xb5\xbc\xc2\xb6\x0f\x5d\x81\xf8\xfd\x75\x38\x0f\xb0\x83\x43\x02\xbd\x7d\x50\xdc\xbe\x88\x9e\x4a\xa0\xb8\x0d\x39\x00\xe2\xe0\x29\x32\xee\xef\xf9\x03\xd0\x93\xe8\xc7\xe7\x0f\x3e\x4a\x36\xcc\xa2\x37\x55\x15\x08\x7e\xf2\x57\xa6\xdf\xeb\x8c\xf4\x3f\x27\x4b\x49\x77\x70\xdf\x22\xc6\xe2\x77\xde\x03\xc1\x3e\x79\xe8\x59\x7e\x10\x77\x34\x7f\x90\xd5\xbb\x30\x91\xb6\x2a\xbd\xee\x9a\xe3\x3e\x9a\x2c\x64\x39\x78\x45\xaf\x8e\x4a\x46\x7f\xdf\x4c\x46\xf9\xd7\x27\x32\x9f\xf8\x6b\x50\x65\x10\x77\x34\x7f\x80\x7e\x23\x20\xcf\xcf\x0d\x33\x8b\xd4\xc6\xbe\x33\x2b\xd3\xc3\x8a\x60\xb8\xbd\xf2\xec\x5b\x9a\x09\x9f\xe2\x76\x0a\xcd\xd9\x5b\x49\x50\x65\x10\xf7\xbf\xf9\x03\xb1\xff\xda\x4a\xea\xab\x56\x2c\x4a\x3a\x5f\x3d\x10\x5b\xc6\xff\x52\xd1\xce\x8f\x50\x74\xfc\xbd\xd6\xbd\xbb\xe6\xcf\x5f\x4a\x5f\x11\x58\x48\xb1\x83\xf2\x07\x20\x2e\x40\x8a\x06\x05\x91\x3f\x28\xe2\x6a\xbe\x23\x7d\xd9\x5c\xbc\x8d\xa6\xd6\x28\xc9\x84\xfe\x7b\x4a\xd6\x14\x35\xc1\xf9\xca\xdf\xe9\xd9\xd3\x97\xd0\x22\xfb\x9e\xff\x99\x3f\xd8\x63\x2a\xb3\x16\x11\xa6\xd4\xdc\x0a\xd4\xe5\x0f\xa4\x7f\x4c\x9b\xaf\x6b\x1b\xf4\x9e\xf2\x95\xa6\xbc\xd2\x61\xb3\xbb\xaf\xaf\xc5\x9f\xf7\x9a\x38\x29\x4b\x88\xe7\x93\xf2\xb9\x6e\x7c\xb5\xe1\x89\xef\xe8\x54\x6f\x88\x1d\x26\xcd\x4c\x39\xdb\xb9\xc9\xa8\x41\x58\xff\xd4\xe7\xff\xbd\xfc\x01\xa8\x73\xc7\xe4\x0f\x96\xcb\x57\x1f\xdd\xc6\xbe\x19\x4f\x12\x4b\x45\xc2\x2e\xcf\x22\xce\xd5\x29\x12\xde\x18\xc1\xa5\xa8\xd2\xc2\xfd\x80\x4a\x1e\x25\xe3\x0f\x74\x41\x76\x85\xac\x43\x14\x8f\x32\x27\x95\x34\x56\x02\x97\xf6\x8b\x9a\x78\x8b\xd2\xb3\xc5\xbd\xd5\xcc\xfe\xc0\xeb\xaf\x0c\xda\xa2\xff\x40\xc3\xdb\x89\xc3\x97\x9f\x2a\x2f\x7e\xbc\xf0\x88\x96\xaa\x80\xc5\x79\x78\x22\x4a\x25\x70\xc4\xb3\x8d\x11\x97\xae\x19\xb3\x23\x39\x0e\xce\x1f\x80\x0e\xff\x4f\xfe\xa0\x07\x99\x3f\x68\x13\xe6\x34\x35\x2c\xa9\x35\x95\x9e\x18\x61\x20\xd7\xfe\xf6\x36\x32\x29\x8e\x66\xdf\x91\x9b\xc5\x2d\xb0\xbe\x31\x3a\x22\xf0\xc3\x09\xac\x3c\x24\xc5\x8e\xe4\x0f\x4a\x35\x85\xf9\xfc\xf8\x5c\x55\x6d\x32\xab\x2f\xe5\x44\xff\xde\xc2\x55\xd5\xa0\xf2\xf5\xbb\xfc\x58\xec\x06\x5f\xdd\x0d\xb3\x25\x8f\x93\x58\xef\xd4\x1d\xcd\x1f\x64\xfe\x28\xf7\x97\x20\xfc\x70\xe5\xbe\x64\xbe\xbd\xa0\xf2\xe7\xa5\xa5\x16\x5a\x42\x6b\xf2\xa0\x9e\xf2\xc7\x73\x17\xdf\x51\xaa\xbf\x3a\x89\xc3\x8a\x1d\xcd\x1f\x90\xa4\x61\x58\xf1\xbc\xed\xb6\x99\x24\x44\xe7\x8e\x69\xd9\x0f\xad\xd8\x18\xd2\x6d\x74\x72\x16\x72\x79\xe7\x82\x61\x83\x92\xbc\x7f\x22\xbd\x3d\x9a\x3f\xc0\xc3\x67\xad\x7f\xb1\xca\x9d\x65\x18\x4c\xe4\x92\x32\xe4\x8e\x96\x71\xdf\xeb\x8e\x99\xdf\x19\xd1\x17\xac\x01\x94\x87\x7e\x45\xbf\x4f\xa4\xb7\x47\xf3\x07\xca\x33\xeb\xef\xbe\x66\xd0\xe6\xd7\xd6\xdc\x7a\xe7\xd4\x6e\x99\x46\xa8\x4f\xd7\x77\x2b\xbe\xfe\x43\x78\x85\x7d\xd8\xa1\x75\xc3\x89\xdc\x06\xac\x3b\x9a\x3f\xb0\xd4\x9b\x92\x4e\x9c\x74\x7c\xa7\x9c\x47\x73\x7e\x53\x22\xe5\xb5\x66\xce\x92\xa7\xbb\x2c\xa1\x71\xa4\x9c\xc5\x03\x7a\x9d\x92\xc0\x13\xe9\xed\xd1\xfc\xc1\x4f\x7e\xe5\x1d\x7e\x4b\xed\xcd\x60\x1d\x6f\x05\x4e\x6b\x7f\xe7\x6f\xa4\x3a\x02\x92\x1f\x31\xfa\x04\x4f\xa5\xb6\x5d\x5d\x8b\x1a\x39\xb1\x25\x34\xe8\x87\x7a\xdc\xf2\x89\xcf\x5a\xb8\xbe\x95\x99\x4c\xc8\x22\x4a\x4b\xfb\xfb\xfc\xa4\x6a\x96\xe8\xd8\xf7\x2a\xb4\x35\xe7\x4b\x3f\x72\xb4\x45\x84\x47\xb5\xe1\xbb\x79\x00\x0e\xb9\x1c\x19\xe2\xe9\xcf\x18\x71\x4e\xf6\x0f\x77\xf6\x12\xbe\xbe\xbd\xc0\x1a\xb9\x48\xd0\x1e\xdf\x2a\x4e\x28\x3d\x12\xe4\x71\x23\xfd\xce\x22\x54\x17\xc4\x21\x97\x4f\xac\x8a\x26\xf7\x03\x8a\x3c\xda\x5e\xc9\x4e\x9b\xcd\x4b\xa7\x4e\x37\x6b\x9f\xf5\x14\x14\xce\xeb\x46\x89\xdf\xc7\x51\xef\x22\x83\xdf\xca\x00\xe2\x90\x31\xcb\xc1\x90\xc4\x19\x6d\xb4\x20\xc7\xcf\x77\xdd\xe6\xcb\x12\xb2\xdb\x44\x09\x2c\xad\xbf\x0b\x47\x3d\x37\xe0\x98\xfd\x9d\xca\xc1\x05\x7f\x59\x1c\xc4\x05\x48\xa0\xfe\xd7\x38\xec\xa3\x04\x7f\xc9\xe8\x0c\xd8\x91\x44\x9b\x2f\xe5\x1f\xea\x79\x73\xad\x58\x13\x7b\x76\x71\xbc\x61\xa6\x80\x03\x95\x2d\x33\xcf\x1f\xca\x1f\x80\xb8\xff\xf9\xbb\xf9\xfa\x05\xfd\xcf\xec\xfc\x97\x05\x34\x68\xd2\x3c\xf6\x7d\x37\x86\x28\x1a\x2a\x71\x23\xce\x43\x01\x92\x3a\x05\x65\x23\xea\xc4\xdb\x43\x63\xd5\xd2\x22\xb7\xbe\x5c\x34\xc6\x23\xe3\x50\x90\x86\xdf\x77\x03\xe0\x90\x06\x90\x7e\x74\x11\x7a\xe2\x7a\x4a\xe2\xab\xe5\x0d\x21\x3d\x27\xa6\x17\x34\x94\xcd\xef\x9f\xda\xaf\xdd\x17\x6b\x1c\x28\x4c\x3b\xe3\x03\x7f\xf7\x1a\xc4\x21\x0d\xf8\x41\xd6\x5e\x67\x16\x12\x45\xf0\xc8\xef\x94\x17\x5b\x5d\xfc\xbb\xc9\xd3\x87\x8e\x3f\x6e\x6b\x62\x3b\x10\x77\x3b\x1f\x84\xa5\xa1\x42\x75\x41\x1c\xd2\x80\x56\x3c\x5e\xf9\x56\x05\xb7\xdf\xf6\xed\xf9\x3d\x0e\xda\xe9\xa1\xf8\x56\x1e\x07\xa7\xef\x3d\xd2\xbf\xc8\x5c\xc2\x64\x13\xca\x03\x5f\x9c\x81\x38\xa4\x01\x0f\x9a\xb5\x98\x22\xe4\x08\x04\x8d\xf0\x42\x47\xaa\x44\xd0\x99\xee\x31\xfe\x54\x29\x5b\xd3\xdb\x41\xc9\x5f\x39\x83\xf2\xc3\x75\x04\xca\x1f\x80\xb8\x7f\x0c\xf8\xdf\x53\xe5\x5f\x14\x00\x9d\xc0\x8e\x0d\x21\x85\xfc\x78\xed\x22\x78\xaa\x60\x7d\x44\x27\x7d\xf3\xd7\xb3\xb4\x7c\xec\xef\xc2\x2f\xc3\xc2\x87\xaf\x30\xcf\xf9\xe7\xf1\xe9\x72\xc0\x21\x24\x00\x87\x54\xa0\xae\xde\xbc\x46\x86\x78\x2e\x59\x4d\x45\xe3\xb7\xbf\xd5\x1d\x7d\xb6\x16\x61\x06\x13\xd2\x20\x9a\xea\xf2\x3e\xbe\x07\xe8\x98\x42\x50\x5d\x10\x87\x54\xa0\x76\x1e\xff\x9c\x1b\xf1\x79\x92\x9f\x4e\x8c\x2d\x6f\xdf\x93\xcc\xa0\xe7\x6a\x6b\x5b\x7a\xe5\xa0\xbb\x37\xe5\x77\x98\x5f\xcc\x74\x80\xea\x82\x38\xa4\x02\xb3\x2a\xab\xa3\x19\x19\x4a\x54\x7c\x1e\xbf\x6e\x96\x71\xc5\x65\x4b\x9e\x49\x91\xf1\x5f\x8e\xa3\x22\x28\x99\x5b\x9a\x52\x30\x77\x84\xaf\xa3\x01\x1c\x52\x01\x07\x07\xa3\x00\xec\x4b\xe6\x18\x79\xac\x3f\x7f\x69\xc8\x2e\x27\x92\x94\x3f\xe4\x9e\xe2\xa9\x23\xae\xd3\xd4\xb2\x2b\x20\xaa\x85\xb7\x9b\x41\xdc\x3f\x0a\xfc\x67\xdd\xf2\x17\x07\x40\xab\x89\xe3\x1c\x08\x90\x34\x61\x5a\x6b\x90\x9e\x91\x57\xf1\xc3\xe3\xe1\x60\x97\x96\x0b\x95\xbe\x48\x72\x9a\x7a\x24\xbe\x61\xa5\xe7\x5c\x04\xbf\x20\x7c\x5d\x0a\xe0\x90\x0e\xac\x10\x96\xf7\x39\xdd\x29\xfc\x50\x36\xb2\xc0\x27\x6a\x61\x3a\xb7\x5b\xbb\x1e\xfc\xeb\x59\x55\xca\xb4\xfa\xf9\x95\x68\xf4\x1f\xf0\xb3\xdc\x20\x0e\xe9\x40\x8d\x4d\x4f\xc7\x41\xd1\xdc\x8d\x85\x33\xbf\x42\xde\xbe\xbf\x51\xf3\x58\xf7\xbb\xfb\x42\xbf\xdd\x1c\xa6\xdd\xcf\xaa\xb8\x96\x31\x78\x1b\x1b\xc4\x21\x1d\x48\xc0\x25\x8a\x65\x22\xcc\x49\x65\x1d\xa3\x60\xec\x1f\x4b\xd9\x73\x33\xd2\xfa\x2e\xb4\xb8\x3c\x90\x78\x25\x58\xa3\x2b\x8f\x57\x15\xaa\x0b\xe2\x90\x0e\x50\x0d\xa4\xdc\xd9\x4b\xe5\x6c\xfe\x5a\x1c\x59\x10\xaf\xe5\xc0\xfc\xb5\x22\xce\x5b\x5e\x81\x2f\xfc\xb3\x56\xce\x3b\x16\x9a\x56\x4c\xc8\x01\x10\x07\x39\x20\x06\xc8\x1f\x80\x96\x76\xc7\x39\x70\x95\x35\xe1\x3c\xcf\x68\xc1\xe5\xb0\x53\xce\xe6\x3f\x7b\x73\x31\xcb\x29\xc6\x26\x45\xb4\x53\xe3\x7e\xeb\x09\x5d\x18\xbd\xce\x01\xe7\x04\x40\x1c\xd2\x81\x32\xeb\x6f\x75\xb7\xbc\x66\xa6\x2e\xe2\x73\x35\xf5\x64\x7f\x32\x9b\xa2\xcc\x21\x9b\xa7\x50\xbb\xab\x58\x2d\xd0\xe1\xd3\x55\x09\x7f\x7b\x12\xc4\x1d\xf9\x5c\xff\xa8\xc8\x56\xe6\xbb\x99\x25\x17\xb4\x87\x56\x46\x83\x39\x53\x69\xbe\x79\x6d\x67\xdd\x94\x02\x65\xb0\xd0\x4f\x8d\x72\xdf\x84\x5f\xa3\x03\xe2\x90\x0e\x38\x7e\x8d\xc1\x67\xdb\x37\x8d\x75\xd1\xbe\x3e\x39\x77\xb0\x76\x7b\xa7\xf4\x91\x53\x8a\xbe\x92\x7b\xbc\x0c\xe6\xeb\xeb\xf5\xf4\xf0\x23\x4e\x20\x0e\xe9\x40\xdd\x57\x99\xed\x1a\xa2\x6b\x41\x44\x14\xc4\xce\x5b\x49\x3a\xad\xfc\x3a\xaa\x6d\xcf\xf6\x43\x3d\x9d\x24\x37\xec\xce\x69\x73\xa6\x42\x0e\x80\x38\x78\x1e\x00\xe4\x0f\x40\xeb\xec\xe3\x1c\xf8\xbc\xfc\xc8\xf1\x9e\x22\x63\x48\x7c\x29\xd3\x93\xa5\xc7\xd6\xa3\x09\x38\x02\xde\xac\xb2\x13\x44\x0a\x67\x5e\x1f\xbe\x3e\xab\x32\x03\xf5\x1d\xc4\x1d\x79\x1c\xcd\xc4\x86\x6e\x93\x20\x5d\x69\xa5\xe3\x6b\xb1\x6f\xc6\xa9\x87\xfc\xfb\x3e\x8b\x95\x5b\x68\x1a\x57\x2b\x4e\xe7\xba\xe1\x26\xc0\x0b\x37\x10\x87\x74\x80\x43\xe0\x97\xb6\xda\x03\xdf\xbc\x4d\xcd\x50\xef\x61\x55\x5c\x5c\x77\xf5\x4b\x45\x4d\x56\xec\xc5\xd9\xa9\x33\xbd\xfe\x9f\x12\xe1\xf8\x24\x88\x43\x3a\xc0\xbd\xb0\x71\xb0\xc9\xf2\x85\xe7\x16\x49\x35\xdd\x1c\x41\x59\xfd\x75\x82\x14\xed\x94\xbd\xd4\x39\x01\xd3\xbc\x4f\xda\xde\xf2\xc9\x50\x5d\x10\x87\x74\xe0\x7e\xc5\xea\x16\x87\x1a\xed\xaa\x67\x10\x8d\x73\x5a\xa5\xd6\x8a\x1c\xf1\x19\x41\x8b\x09\xe3\x2c\xa6\x5b\xd9\x4b\x14\xd8\xb6\xed\x90\x03\x20\x0e\x9e\x07\x00\xf9\x03\xd0\x45\xcf\xb1\x9f\xc4\xca\x56\x91\xc3\xa3\x24\x9a\xc8\x3d\xfb\xf1\x4a\x71\xb9\xd5\x6c\x57\x0d\xba\x71\x4d\x68\xe9\x7a\x30\xdb\xb6\x17\x8b\xf1\x4e\x00\xd4\x77\x10\x77\x24\xdb\x25\x11\x2f\x92\x6a\xb4\xfc\xa6\xce\xe0\xa2\xc4\x6d\xd2\xfd\x92\x4f\xf8\x36\xb7\xeb\x2c\x0c\xc6\xf4\x3d\xab\xca\xd9\x5e\xd9\x26\xc1\xd9\x2e\x00\x87\x74\xe0\x61\x61\x59\x72\xce\xc7\xfe\x7d\x4a\x1c\x79\x56\x25\xd9\x4b\x76\x7b\x04\xc2\xc4\xe9\x57\x24\x25\x0f\xfc\x47\xe9\x7f\x71\xb9\xc3\xaf\xd5\x03\x71\x47\x1c\xf8\xfa\xee\x74\xff\xfb\x6b\x06\x35\xc9\xa5\xd9\x1c\x17\x5d\xd9\xb9\xf7\x5f\x0f\xf9\x7e\x52\x1c\x59\xc0\xc4\x1f\x78\x75\x58\x04\xe7\x1c\x41\x1c\xd2\x81\x8c\x6d\x7a\xa2\xd4\x21\x65\x5e\x59\x74\xe1\xda\xf4\xf3\x3a\xde\x4e\x58\x58\xf2\x84\x1b\x8a\x4b\x3d\xdd\x9c\x95\xfa\x09\x14\x4c\x90\x03\x20\x0e\x9e\x07\x00\xf9\x03\xd0\x15\xe8\x71\x0e\x98\x0e\xdd\xbd\xd2\x1f\xb1\x31\x9d\x2c\x26\x45\x75\x97\xa3\x62\xfa\x7d\xba\x73\xa2\x03\x39\x5d\x67\xe5\x50\x77\xdb\x6a\xa1\x0a\x9c\xbf\x01\x71\x48\x07\xe4\x92\xfd\x30\x92\x12\xcb\xc3\xda\xe2\x2e\x71\x48\xc9\x55\xac\xfb\x29\xa9\x8c\x93\x3f\xcc\xd0\xc1\x5d\xe4\x17\xfa\x2d\x7c\x0d\xbe\xb7\x02\xe2\x90\x0e\x68\x07\x0d\x67\x25\x2a\x12\xa0\x78\x26\x04\x92\x7f\xc2\xaa\x14\xa0\x32\xb9\xa8\xde\x65\xa7\xf7\x19\x5f\x70\x9f\xfa\xf2\x5d\x59\x74\xa8\x2e\x88\x43\x3a\x90\xaf\x9c\xc4\xc3\xfe\xab\x29\x3b\xb6\xf1\x51\xe4\xeb\x3b\xe3\x3f\x55\x17\x17\x83\x22\xe6\x68\x70\xca\xf8\xee\x51\x30\x07\x08\xc2\x97\x1b\x20\x0e\xe9\xc0\x63\xef\x91\x72\x73\x4e\x82\xea\x1e\x3f\xc2\xae\x9a\x45\x6c\x3c\xc1\x49\xe1\xab\x5c\x57\xc6\xfc\x7e\x0f\xf5\x4f\xe8\x59\xbf\xd0\x86\x1c\x00\x71\xf0\x3c\x00\xca\x1f\x80\xb6\x14\xff\xc9\x1f\xd4\x1d\xcd\x1f\x28\xaa\xf9\x9a\x16\x34\x47\x44\xe9\xdc\x6d\x96\x3e\x95\x5e\x3f\x35\x29\x7e\x28\x1f\xfb\x93\xbd\x98\x37\xec\x9b\x4b\x71\xbe\xa3\xfd\x89\xec\x9b\x1c\xcd\x1f\x34\xfd\x90\xce\x7c\xd7\xbd\xfc\x53\xc9\xfa\xe3\xb6\x88\xdc\x5d\x36\xe6\xad\x68\x92\xf3\x2b\xcd\x31\x39\x03\x79\x6a\x2f\xdc\x5b\x46\x4f\x64\x97\xe8\x68\xfe\xa0\x71\x36\x34\x86\x6f\x19\xdb\xbc\xc2\xe8\x3a\x17\x86\x28\xca\xce\xed\xa9\xdc\xaa\xcb\xa4\x8c\x2b\x57\xc4\xca\x43\xde\xc4\x12\x9f\xc8\x17\x50\xc5\x8e\xe6\x0f\xe6\xb3\xe8\x73\x5f\xb5\xfe\x46\x95\x2c\xc3\x09\x7d\x70\xfe\xc9\x70\xb6\xaf\xca\x0a\xaf\x83\xbe\xc4\x35\x46\x55\x2d\xde\x16\xa6\x0b\x27\xd2\xdb\xa3\xf9\x03\x36\xc2\x04\xc5\xdd\x55\xd1\x05\xa6\x91\x2a\x27\xbd\xfb\x09\xb5\x3a\xaf\x6a\x36\xb9\xe3\x4b\x22\x8b\x7f\x60\xb8\x32\xa2\x9c\xda\x3a\x91\xde\x1e\xcd\x1f\xe4\x05\x60\xaa\x17\xd4\x08\x48\x5e\x24\xbc\xde\xfb\x6c\xc4\x96\x5e\x77\x4b\x7b\xdc\x59\x34\xe6\xd9\x5b\x6e\x3a\x85\x74\xe1\x9f\x5e\x27\xd2\xdb\xa3\xf9\x03\x8d\xa1\x22\xf9\x2c\xf2\x5a\x2a\x47\x65\x9e\xea\x80\xf1\xa4\xf7\x06\x7e\x2e\x85\xec\xe9\x4a\xac\xed\xba\xdd\x34\xf9\x46\x16\x06\x27\xd2\xdb\xa3\xf9\x83\xce\xaf\xcf\x8a\xeb\x57\xea\x05\x74\x4a\x6e\xe9\x46\x70\x72\x35\xd1\x31\x4a\xf4\x9e\xc6\x75\x32\x4d\x41\xbf\xb7\x4c\x65\x19\x78\x70\x62\x3b\x80\xa0\x5f\xea\x71\x13\x7d\xf1\xfd\xb5\xd3\xa1\xe3\xf7\xfa\x69\xa7\x89\x48\xf6\x15\x59\x50\xc8\x13\x34\xf4\x97\x26\xcc\x08\xf5\xdf\xf6\xcd\x53\x0e\x3d\x86\x43\xf7\x20\x0e\x39\xd1\x5f\x7e\x10\x73\x43\x66\xd0\x2a\x58\x04\x5b\x7a\x68\x7a\xe0\x0a\xf3\xec\x7b\xfd\xb3\xb5\xba\x0a\x77\x45\x65\xb0\x35\xde\xd4\x95\x33\x41\x75\x41\x1c\x72\xa2\x97\xcd\x70\x5e\x68\x16\x7b\x59\xc9\xd3\x6f\x65\x92\x59\x77\x3f\x44\xf8\x4d\xd1\xe6\xcb\x52\x5d\xfe\x4b\xda\x6f\x2c\xab\xd5\xe9\xe1\x67\xc4\x41\xdc\x91\xf7\x93\x2f\x26\x30\xd0\xae\x65\x0e\xb6\xa7\x30\xd7\xd6\x45\xab\x19\x9e\x37\x31\x15\x6a\xff\xf1\x51\x30\x45\x83\x1d\x37\x5d\xad\xf7\x00\xde\x04\x01\x70\xc8\x89\x9e\x4d\xb5\xc5\x8e\xc2\xaf\xb6\x8e\xcd\xed\x83\x9f\xc5\xc2\x66\x71\xfb\x83\x05\xaa\xeb\xdb\x31\x63\x73\x56\x4a\x7c\xfc\x84\xb4\x55\xd0\x44\x0f\xe2\xe0\x93\x3d\x20\x7f\x00\x9a\x36\x8f\x73\xe0\x4c\x92\x87\x56\xae\xb3\x56\x6b\x1f\x6a\x60\x60\x23\xed\x7d\x9b\x1e\xf4\x2d\x19\x47\xfa\x6a\xe1\x6e\x06\xa1\x2f\x4f\xc3\x73\x28\xa0\xbe\x83\xb8\x23\x1f\x94\xb4\x47\x47\xbb\x36\xd9\xf8\xd5\xf5\xf3\x0a\x8f\xbb\xf4\x3b\x02\x94\xfb\xd7\x26\x4f\x2b\xd2\x0d\x5c\xe1\x1a\xc7\x8a\xb1\xd3\x81\x5f\x6c\x01\xe2\x90\x0e\x78\xe8\xde\x52\xfe\x40\x65\x2d\xb9\x65\x59\x89\x3b\x79\x6b\x65\x87\xdc\x3b\xdd\x6e\xa0\xa7\xa5\xbf\x0f\xe3\x61\xf5\x81\xdc\x21\xfc\xce\x6b\x10\x87\x74\x00\x43\x6b\x9c\xcf\xa7\x36\xae\x42\x5b\x8d\x6f\xa9\x5a\x1d\xff\xfa\x4e\xc6\x41\x98\x4b\x04\xca\x83\x90\xa5\xf8\x94\xc6\xe9\x0a\x11\xa8\x2e\x88\x43\x3a\x50\xd3\x5f\xa7\xfd\x50\xa9\x6d\x5f\xbc\xf7\x53\x6f\x37\x13\xc3\x65\x9b\x34\xed\x8e\x72\xb2\x8e\x18\x4f\x16\x7b\x65\x6a\x45\xd6\x14\xc8\x01\x10\x07\x9f\xec\x01\xf9\x03\xd0\x39\xec\x38\x07\xda\xf0\x2a\x7f\xa5\x9f\xbd\x52\xc4\xd6\x82\x2b\x85\xb2\x1f\xea\x2e\xca\xf5\xc1\xe3\x55\x98\x00\xa9\x5b\x99\x47\x83\x23\xed\x35\xf8\xcb\xc2\x20\xee\xc8\xc7\x04\xb3\xd2\x5e\xbf\x72\x89\xba\xae\x1f\x4f\xbf\xa8\xf4\x83\xa9\xea\xfc\x25\x8f\x6f\x6b\x59\x92\x8a\x1a\x49\xa3\x61\x55\xde\x2b\xf0\xbb\xa9\x41\x1c\xd2\x81\xd6\x71\x9e\x18\x7b\x85\x48\x1a\xf1\x4b\x1d\x9f\x0d\xbb\x44\xa8\x1b\xf9\x7c\xe8\xef\xac\x2a\x11\xb2\xee\x0c\xfd\x30\x42\x2b\x7b\x07\xef\xd7\x02\x38\xa4\x03\xdf\xc6\x6f\x5e\x12\xa9\x7d\x52\x51\xeb\x21\xa3\xf3\xb3\xa0\xbf\x72\xc3\x98\x84\x18\xcb\x07\x3f\xf8\x12\xda\x4b\x95\xa5\x5e\x71\xf8\x1b\x18\x20\x0e\xe9\x00\xa5\xf4\x34\xbe\xdd\x83\x2e\xbb\x66\xd2\x32\xdf\xcb\x1d\xe5\x11\xa9\xb7\xbb\xd4\x45\xd1\xfd\x67\x36\x44\xe7\x79\xe2\x1e\xdd\xf1\x83\x1c\x00\x71\xf0\x3c\x00\xc8\x1f\x80\x16\x14\xc7\x7e\xf8\x4e\xd5\xf0\x00\xf3\x82\x56\x68\x11\x1a\xe1\x2f\x6d\x4b\x4e\xfd\x36\xbd\x3d\xde\x58\x7e\x27\xac\x48\x89\xa7\xb9\x76\x16\x0c\xf0\xb7\x1f\x40\x1c\xd2\x81\x05\xcb\x42\xeb\xd2\x5b\xde\xd7\x07\xa8\x86\x4e\x49\xb8\x24\x33\xa4\xaf\xbc\xb4\x93\xeb\xf5\x0a\xc0\xe0\x96\xf8\x96\xed\xf8\x09\x7e\xe7\x35\x88\x3b\xf2\xf2\x81\xc6\x37\xad\x13\x1a\x45\xab\xd8\x5f\xae\x79\xcc\x34\xf1\xad\x2f\x64\xaf\x1a\x72\x6f\x17\xf5\x09\x5c\x63\x0f\xbe\xe3\xf8\x03\x76\x16\xc4\x21\x1d\x08\x94\x8f\x0c\x0e\x2b\x89\x50\xf4\xf6\x5f\x36\xf9\xd6\x51\x9f\x6b\x48\x81\xeb\xb2\xba\xd4\xb7\x96\x69\xcd\x2f\xa0\x89\x45\x83\x0f\xd5\x05\x71\x48\x07\x36\xb2\x5f\x62\x9d\xf9\x65\x39\xad\x76\x57\xda\xb4\x5d\xae\x47\x59\x3e\x24\x47\x4e\x58\x58\xb7\x21\xde\xce\x96\x8e\x46\xc2\x06\x1f\xfe\x16\x0e\x80\x83\xe7\x01\x40\xfe\x00\xb4\xba\x3b\xce\x01\x83\x7b\x09\x6a\x84\x01\x7e\x31\x26\x61\x36\x64\x0d\x5f\x97\x4d\x1b\xd9\x42\x37\xe4\x84\x0f\x9c\x5a\x92\xc6\x78\x57\xd7\x3c\xe0\xcd\x3a\x10\x87\x74\xc0\x96\xf7\x42\x16\xea\x95\xad\xdf\x0d\xf8\x59\x9e\x7b\xed\x8f\xa3\xc7\xc8\x53\xc4\xbc\x25\xee\x15\xbe\xe9\x65\xf7\x2b\xbf\x48\x21\x0c\xd5\x05\x71\x48\x07\x42\xa5\xce\x25\xe6\x8c\x2b\xdf\xef\xed\x64\x0f\x7e\x2e\xc7\x3b\x65\x3f\xbc\x31\x73\xfe\xc9\x9b\xd6\x29\x3e\xea\x6c\xb1\x3e\x06\x78\xfd\x02\xe2\x90\x0e\x68\xd0\xd6\x93\xa5\xd7\xff\x58\x28\x65\x4f\xcc\xa5\x79\xd0\xec\xfe\xe4\xbe\xc4\x0e\x89\xd3\xa1\xd6\xb3\x78\x23\x73\x6f\xc3\x55\x78\x13\x04\xc4\x21\x1d\x88\xbe\xd7\x27\xf4\xe8\xc0\x74\x3a\xf6\x5b\xff\xa4\xc7\xe1\xb3\xcd\xa7\xda\x57\x77\x24\x12\xc2\xec\xce\xf0\x76\x73\x3b\x52\x1f\x8c\x40\x0e\x80\x38\x78\x1e\x00\xe4\x0f\x40\x4b\xed\xe3\x1c\x70\xc5\x1a\x2e\x2b\x7b\xea\xaf\x10\xae\x2c\xd5\x7f\xe7\xc9\xfc\x48\xa4\x6a\x57\xd0\x13\xcf\x33\x83\xe5\x13\xf7\xb5\xec\xb3\xf4\x9c\xa0\xbe\x83\x38\xa4\x03\xb5\xe8\x6c\xde\x41\x14\xcd\x35\x6f\x15\x65\xcc\x02\x09\x66\x31\x34\x38\x43\x49\xfd\x78\x08\x92\xb6\x7d\xd6\x7e\xa4\x2b\x32\xc3\xf3\x0b\x88\x43\x3a\xe0\x24\x69\xe2\x36\x3c\x79\xfa\xa1\x9c\xa2\x9d\x45\xf3\x70\xe2\x38\x86\x37\x9f\xa4\xcb\x06\x95\xb1\xbc\xb1\x96\x3d\xca\x75\x4d\xf8\x1d\xf5\x20\x0e\xe9\x80\x64\x13\x8d\xe3\x8a\x62\x57\x97\x18\xfe\x73\x1e\xe5\x7b\x6d\x53\x61\xe4\xc1\x91\xca\x56\x67\x29\x3e\x79\x14\xa6\x7a\x3c\xc9\x94\x87\xea\x82\x38\xa4\x03\xaf\xe8\xcf\xd9\xe7\x99\x68\x05\x3d\x4d\x4b\x10\xa5\x97\x3c\x67\xf8\xc2\x4c\x70\x08\xbb\xc1\x95\x85\xfa\x1c\xed\x0a\x26\x3f\x87\x09\xe4\x00\x88\x83\xe7\x01\x40\xfe\x00\x74\xdd\x73\x9c\x03\xcd\x74\x6f\xf9\xdc\xfc\x8b\x62\xed\x47\x30\x0d\xcc\xc6\xea\xdf\x50\x2b\xbf\x09\x0f\xba\xbd\x8a\xe5\x7d\xa5\x51\xfe\x43\x37\x21\xfc\xfd\x7a\x10\x77\x24\xd7\x23\x1f\x21\x18\xf2\x99\x55\x8e\xab\x34\xd2\xee\x49\xa4\x57\x3b\xf6\xe7\xd7\x1e\x21\xfd\x06\x54\x84\xf1\x7d\x87\xfd\xcd\x0a\x2f\xe0\x5c\x0f\x80\x43\x3a\x30\x63\x5f\xe4\x41\xa5\x6d\x1b\x62\xd8\xf9\x88\x82\x62\xcd\x94\x85\xd0\x9c\xcc\x16\x5b\x1a\x73\xcd\x51\x99\x9a\xe6\x7c\x1d\x3d\xfc\x1d\x7f\x10\x87\x74\xe0\x74\xfa\x74\xf3\xe3\x1a\xc7\x72\xea\xef\x55\x95\x82\xb6\x9a\x39\xbd\xfd\xfb\x5f\x0b\x64\xeb\xcf\xde\xf5\x48\x8c\x75\x75\x1a\x86\xaf\x37\x40\x1c\xd2\x01\xcf\x5b\xd8\x78\xa9\x58\xed\x61\x79\xbf\x76\x59\x59\x55\x37\xad\xcd\x98\xba\xd8\x9e\x4a\x6b\x46\xd7\x8f\x37\x8c\x6f\x53\x5d\xfd\x02\x39\x00\xe2\xe0\x79\x00\x90\x3f\x00\x5d\x84\x1e\xe7\x40\xa2\x63\x58\x4f\xb3\xc9\x37\xfa\x67\xb6\x5c\xb8\xec\xe8\x4f\x51\xf9\x12\x1f\xb1\xc8\x37\x65\xfb\xbf\x60\xac\xdd\xda\xbb\xe0\xd9\x0d\xf5\x1d\xc4\x1d\xb9\x29\x38\xc0\x24\x5d\xe1\x12\x56\xf0\x29\x46\x82\x88\x9b\x54\xfc\xf2\xcc\x6a\xc4\x80\x92\xf0\xce\xc3\x9b\x12\x6a\xcc\x26\x96\xf9\xf0\xb5\x21\x88\x43\x3a\x40\x2e\x51\x4c\x3e\xe2\x5d\x99\x9b\xef\x70\xc7\x49\xdb\x27\x97\xd2\xb0\xc6\xaa\x28\xda\xec\xd4\xbe\xca\xdc\xae\x63\x34\x3a\x03\x26\x54\x17\xc4\x21\x1d\x10\xb6\xe2\xc6\x92\x23\xe9\xbe\xd7\x5c\x5f\x2a\x2a\xba\x44\x25\x59\x19\x55\xc8\xac\xd4\x50\x4c\x35\x3d\xdb\xcb\x5d\x2f\xcb\x34\x07\xbf\x9b\x10\xc0\x21\x1d\x68\xee\xb0\xad\x96\xc3\xa2\x5d\x27\xf5\x42\x61\x7f\x2b\xd9\x7f\xfa\xb4\xb3\x33\xf7\x1d\xa5\xe0\xa9\xe1\xb5\x82\x9c\xff\x1f\x73\x7f\x19\x55\xd5\xf3\xf7\xff\xe3\x84\x48\x29\xa0\x48\x23\x20\xa9\x34\x92\x02\xd2\x2d\x25\xa0\x82\x34\x08\x48\x37\x4a\x4a\x23\x25\x8d\xa4\x48\x88\x20\x48\x83\x20\xd2\x25\x08\x28\x21\xdd\x2d\x20\x52\x52\x12\xff\xf5\xf9\x5c\xef\xb3\xd7\xfb\xda\x87\xbf\xf3\xfd\xad\xc5\x8d\xeb\xfe\x63\xcd\x59\xb3\xcf\x63\xbf\xf6\xec\xd9\xf3\x9c\xc9\x0d\xd4\x98\x47\x38\x00\xe2\xa0\x3a\x00\xca\x1f\x80\x16\x0b\xfe\x93\x3f\xa8\x47\xce\x1f\xac\x24\x75\xa9\xb9\x70\xde\x0a\x64\xe8\x88\x6c\xea\xf8\x74\xe5\x56\x76\xb9\x02\x87\x67\xf1\xa3\xef\xbc\xb8\xe7\xec\xe8\x8c\x9d\xcf\x66\x5a\x0c\x39\x7f\x70\xb9\x42\x84\xc0\x97\xe3\xa4\xe3\x23\xc9\xe4\x97\xe3\x90\x90\xee\xe7\x63\xe1\xe2\xdc\x34\x9d\x31\x95\x03\x97\xa6\x57\xaa\xa3\xcf\x60\x1b\x62\xed\xff\xb7\xfe\x9d\x76\x7b\xbc\x7a\xa4\x10\xb1\xf9\x82\xe6\xe8\x4f\x6d\x44\xc6\x22\x11\xce\x11\xde\xa4\x47\xa7\xeb\xe1\x33\x35\x8b\x48\x8c\x3a\xd3\x70\x74\x28\x56\x0b\xe2\xe0\xb7\x87\x96\xa3\x76\x2e\x17\x41\xea\xe3\x05\xdd\x0f\x8e\xd1\x91\x2c\x0f\x02\x0c\xef\x87\xb5\x5b\x4f\x6a\x37\x6d\x77\xb9\x14\xf3\x3f\x87\xd6\x72\x83\x38\xf8\xed\xe1\x9e\xd7\xa5\x77\x8b\x81\xac\xac\xe3\xc3\x81\xd2\xa6\xb6\x79\x9c\x01\x0f\xff\x7a\x96\xe0\xc7\x29\x4e\xd1\xa4\x27\xa3\x72\x8d\xd0\x16\x0b\x20\x0e\x7e\x7b\xe8\xab\xee\xdd\xef\xf2\x5a\x67\xc4\x7b\xf5\x50\x52\xd9\x7e\xf7\xcd\x67\x25\xbf\xb9\xb7\x19\xbe\x11\x0b\xe7\x6f\xda\x84\xde\xc3\x8e\x87\xa2\xeb\x00\x0e\x7e\x7b\x4c\xb9\x7c\x1f\xb5\xef\x89\xe8\x79\x86\x52\x10\x49\x9b\xc1\xa1\x91\x76\x81\xe8\xa4\x5e\xe1\x3c\xc1\xc5\xdc\x14\x85\x0f\x6b\xea\xd0\xd6\x0d\x20\x0e\x2a\x91\x80\xfc\x01\x48\xb6\xd3\x1c\x50\xcc\xdf\x88\x79\x20\xf7\xe9\xa0\xfd\x7d\x94\x31\x4d\xbb\xeb\xc9\xab\xed\x3f\x58\x43\x57\x6a\x1f\x61\x24\xad\x29\x47\x9c\xc4\x8e\x43\xb1\x37\x00\x07\x77\x60\xd7\x87\xe0\xab\xca\xbd\xd4\xe3\x21\x81\xfb\x4b\xba\xe5\x58\xc5\x2b\x99\xcd\x65\xde\xc3\x9e\x95\x23\x6b\x0a\xcd\xb1\x27\x39\xd6\x88\x76\x41\x1c\xdc\x81\x86\x48\xd3\x21\x8c\xb0\x18\x59\x6e\x95\xae\x18\xff\x1e\x09\xbf\xfa\xad\xbb\xd1\xe7\x96\x8d\x39\xfd\x29\xbf\xc8\xf4\x8c\x86\x40\xe7\x2a\x80\x38\xb8\x03\xfd\x14\x25\x29\x82\x0c\xf8\x37\x7f\xce\xb3\xc6\xba\xfd\xda\xea\xb3\x88\xca\x92\x1e\x12\x15\x73\xb9\xbb\x5d\xd7\x70\x50\x3d\x07\x45\xc1\x41\x1c\xdc\x01\xfa\x13\xe1\x62\xc3\x7e\x12\x63\xdd\x37\xbe\xdf\x6c\x9b\x5f\xe2\xae\xfb\xb1\x8f\x59\x25\xec\x62\x6e\xbc\x79\x84\x87\x9f\x65\xa0\x85\x70\x00\xc4\x41\x25\x12\x90\x3f\x00\xad\x44\x3f\x3d\x7f\x10\xaa\x66\x9a\x4a\x7d\xce\x28\xfe\x89\x78\x00\x43\x19\x5a\xa8\xb5\x57\xce\x8d\x64\x0c\x91\x95\x4b\x27\xbb\x1a\xdb\x94\x8d\xd6\xc6\x88\xb5\xfc\x20\x0e\x39\x7f\xf0\x8b\x2a\x3d\xc7\x6c\xdc\xf0\xab\x4c\x49\x85\xe0\x68\xd6\xda\x13\xeb\xeb\xc1\x97\x5a\x5c\x8c\x9a\x54\x2a\x1f\x90\xe7\x89\x7b\x5c\x46\xb4\x0c\xe2\xfc\xa4\x50\xce\xfd\xef\x96\x3b\x2b\x8a\x8f\x09\x7c\xb4\xa8\xdd\xfb\xa3\x26\x5e\x24\xf5\xf2\x2b\x77\x84\x6c\x8b\x6c\xaf\x55\x3c\xe6\xe7\xd5\xb9\x9e\x4c\xef\x8c\x68\x19\xc4\xf9\x49\xa1\xc2\xae\x06\x47\x41\xe2\xbd\x73\x4f\xe3\x03\xfc\x72\xe3\x8e\x7c\x44\xb2\xef\xe6\x0c\xbb\xc7\x8b\xe4\x47\x5b\x7f\xf2\x7c\x64\xfe\xf5\x19\x2a\x13\x22\x7f\x00\xe2\xfe\xe7\x3a\xff\xaf\xfc\x41\xe3\xb5\x06\xa9\x2b\x71\x7c\xab\x8c\xaa\x2a\x01\xf8\x92\x12\x2f\x24\x8a\x28\x54\x8d\x0b\x19\xb5\x07\x3a\xc4\x08\x3b\x3d\x4d\x32\xfe\x9d\x3f\xb8\x1a\x9f\x17\x37\xf4\xe7\x0b\x3f\xf6\x92\x61\x28\xb1\x95\xf5\x1c\x37\x2a\x7f\x02\x97\x77\x95\x16\xe7\x9f\x47\xb1\x6b\xee\x0f\xa4\xff\x85\x0a\xae\x62\xfe\xf6\xae\xca\x26\xa8\xbc\xc8\xe0\xd3\x69\x80\x17\x78\x23\xb3\x0c\x6d\x81\xa3\x4e\x1e\xe7\xbd\x78\xba\xfe\x44\xa5\xd6\xff\xbd\xfc\x01\xa8\x73\xa7\xe4\x0f\x52\xe2\x8f\x8d\x38\x97\xbe\xe3\x6a\x32\x57\x8d\x3e\x9d\x65\x24\x2b\x0f\x4a\x1b\xd1\x52\x0c\x0b\xfb\x2e\xd1\x7d\x11\x9f\xdd\xe0\xdf\x0b\xf9\xd7\x32\x69\x2e\x4c\x04\x49\xf3\x06\x63\x5c\x8f\xaa\xd3\xde\x62\xf2\x4b\xf2\x3a\xfa\x9d\x79\xc3\xbd\xed\x7e\xaf\x18\x43\xf2\x70\xfd\xbf\x17\x36\xbd\xe3\xa9\x12\xc7\xc7\x88\x5a\xb3\xf3\x24\x7c\xcb\x5d\x71\x94\xb9\x76\x73\xe8\x7b\xc1\x57\x1b\xcc\x9a\x95\xb2\xb4\xde\xd8\x52\x28\x7f\x00\xfa\xf9\x7f\xf2\x07\x04\x44\xb0\x21\xc0\x9d\x38\x3c\xef\x99\xc8\x9e\x19\xac\x37\x4f\xda\xa3\x06\xd0\xec\x88\x57\x30\xf8\xe6\xe4\x3e\xbf\xfb\x41\x15\x1d\x11\xca\xc2\xee\x77\x06\x23\x0f\x49\x6f\xa4\xfc\xc1\x8f\x9d\x5d\x66\x55\x1e\x5c\xa2\x6b\xdd\xf8\x1a\xe9\x6f\x75\x19\x5f\x06\x13\x61\x73\x71\x8f\x3b\x2d\xfa\x95\xdb\x65\x29\x58\x3e\x3b\x8b\xf1\x0e\x8a\x00\xd2\x67\x40\xbc\x74\x82\x6b\xe2\x6f\x14\xee\x57\xd1\x76\xc5\x61\xde\xab\xf5\xc8\xf0\x3c\x24\x46\x65\xee\x73\x52\x6c\x65\x9b\x8e\x0d\x52\x91\x3f\x8b\x9f\xf5\x46\xce\x1f\x44\x89\x1e\xd3\xce\x77\xc9\x53\xe5\xd9\x16\x7f\xe1\xcc\xad\xef\x58\x9f\xa8\x69\x56\x69\x78\x34\x5d\x11\x6e\x12\x64\x37\xc5\x54\x7c\x26\xbd\xd5\x47\xfa\x59\x17\x93\xfb\xbf\x6f\x77\x0f\x13\xe5\x05\xeb\xff\xba\xde\x8a\xc1\x22\x7d\x7b\x95\x96\xfa\xda\xcf\xe4\x8c\x4d\x3f\x4b\xec\x38\x3a\xaf\x33\xe9\x2d\x72\xfe\x40\x5e\x85\x26\xb0\x81\x8c\x75\x65\x74\x48\xdb\x71\xb6\x0b\xe3\x5d\x6e\x96\xe7\x86\x73\x32\x21\xb6\xdd\xee\xcc\x33\xf7\xfb\xa3\x67\xf2\xd1\x13\x25\x1e\xe9\x67\xab\x5e\x7e\x96\x6e\x4c\x10\x59\xeb\x5f\x93\x31\x6f\x92\xd1\xb0\x42\x71\xef\x11\xb3\x56\x60\xbe\x24\x17\x4b\x62\x3a\x4c\x6e\xba\x79\x26\xbd\x45\xce\x1f\xd0\x51\x7b\x25\x32\x7e\x0c\xfb\xd4\xfd\xfa\x53\x67\x7d\x8a\x19\x7e\x00\x2e\xb3\xb8\x78\x9c\x4b\x6b\xc8\xea\x55\xa5\x38\x9d\xe1\xb5\x33\x1b\x42\x83\x6e\xd4\xd3\x86\x4f\x5d\x37\x4a\xa7\xbf\xf0\xd0\x10\x56\xf2\x97\x06\x06\xcc\xaf\xd8\x9a\x6f\xa1\x94\x3e\x7d\x2b\xa1\x8d\xf7\x34\xee\x0e\xd9\xbb\xe2\x9b\x88\x61\x03\x88\x83\x0f\x9f\x12\xb0\x6b\xde\x7e\xa7\x24\x8b\x30\x37\xa3\x79\xc8\x7b\xf4\xb9\x80\x58\x7c\xa0\x3c\x9f\x4f\x86\x56\x68\xee\xea\x17\xc7\x9f\x6d\x6e\x88\x76\x41\x1c\x7c\xf8\x94\xe7\x6b\x9e\x46\xaf\xe4\x96\xd7\x4c\x6b\x36\x72\xe9\x19\x79\xb0\xc0\xa7\xc1\x4b\x4d\x45\x65\x47\x0b\xbc\xe4\x58\xae\x15\xa9\x7c\xd0\x72\x10\x00\x07\x1f\x3e\xfd\x0e\xcd\x7b\xad\xfb\x81\x7d\x9e\xef\x4d\x80\x2e\x21\xe7\x50\x1b\xda\xf4\x25\x05\xd6\xdd\xb2\x5e\xc1\x4d\xf2\xc4\x8a\x23\x7b\x68\x99\x2c\x88\xf3\x93\xc0\xfa\x5f\xd7\x61\x99\xf6\xd0\x72\x00\xc3\x31\x98\x62\xe6\x7e\x88\x36\xc1\x90\xe3\x51\xdf\x4e\x74\x04\x65\xaf\xfc\xa7\xca\x31\xd3\x4e\x36\x11\x63\x44\xfe\x00\xc4\xf9\x49\xa0\xd0\x78\xfb\x04\xfc\xa7\x3a\xff\x6d\xa1\x11\xa0\x68\x9e\x66\x00\x49\x85\x82\xd1\xd7\xe6\xe1\x2b\xbc\xdd\x58\x81\x14\x0f\x33\x1b\x78\x64\xf7\xa3\x56\xc7\x7a\xb5\x86\x8b\xd3\xf6\xa4\xf5\x35\xf7\x11\x3d\x07\x71\x70\x03\x08\x4d\x2c\xa2\x48\xee\x28\xad\x12\xea\x8e\x13\x9b\xd2\x12\xd5\x31\x5d\xc2\xe2\xcd\xdd\x70\xe2\xdf\x58\xdb\x8e\x34\x37\x7a\xf1\x0c\xda\x97\x06\xc0\xc1\x0d\xb0\xb2\xc1\x2a\xa8\xdb\x58\x6e\x2e\x1b\xe4\xbf\x9b\x1e\xec\x65\xe7\x4a\x43\xc4\xfc\xeb\xf7\xfa\xe0\x7b\x9b\x2d\xe6\x97\x4c\xe2\xec\x88\x76\x41\x1c\xdc\x00\xae\x7e\xcd\xd7\x91\xe7\xf5\x8e\x5e\x1b\x3f\xce\x33\xa3\x8e\x7f\x44\x9d\xa9\xa5\x90\x3b\x1f\xb9\x1b\x77\xab\xc6\xe8\xba\xba\x1a\x34\xe7\x0a\xe2\xe0\x06\x10\xb1\x98\x24\xb3\x53\x32\xea\x51\x6f\x70\x79\xc6\x3f\xb7\x1e\x9c\x36\xb9\x2d\x1a\x91\x83\xce\xa0\xbb\x35\x64\x32\x29\x85\xc6\x80\xc8\x1f\x80\xb8\x7f\x0c\xf8\xef\xa3\xf2\x2f\x0a\x80\x1e\x60\xa7\x29\x10\xba\x3d\xff\xdc\xd9\xe5\x43\xc8\xd0\x6e\x35\xfa\xf3\xd9\xcc\x6b\x02\x3f\x69\x54\x88\x86\x62\xbb\x64\x4f\xb8\x8e\x06\x23\xca\xa0\xf5\xfc\x20\x0e\xae\x40\x2f\x35\xfb\xef\xdf\x63\xd7\xda\x4c\xf1\x7e\x4d\x09\x1f\xf1\x3f\x6b\x45\xe5\x4c\xd2\xfc\xad\xd9\x72\xf9\xf5\xfd\x1f\x5e\x1a\xe3\x50\xbb\x20\x0e\xae\x80\x84\x43\x58\xc7\xc2\x7e\x46\x3f\xc6\xc3\xcd\xcf\xa9\x49\x81\x4b\x3f\x50\x03\x5d\xcc\x83\x06\xf2\xea\xad\x2d\x17\x64\x31\xd5\xa0\xa5\x02\x20\x0e\xe9\x38\x4c\x07\x8a\x2f\x91\x8e\xfb\x3c\x23\xe8\xf5\x5e\x0e\xd9\x5b\xae\xc2\xc1\x7a\xbf\x98\x9f\x60\xc6\xf1\x38\x16\x61\xc4\x76\x5e\x80\x3e\x3b\x81\x38\xb8\x02\x57\xae\xaa\x44\x64\x90\xfb\x7d\x90\x1c\x43\x29\xc5\xfa\x34\xc7\x73\xef\x09\xd7\x9f\x06\xd2\x17\xd7\x45\x15\x19\xea\x35\x8d\xaa\xa0\xa3\x56\x41\xdc\x3f\x0a\xfc\xcf\xb8\xe5\x2f\x0e\x80\x46\x13\xa7\x39\xc0\x8f\x1b\x46\xd3\x75\x25\xfc\xf1\x45\x74\x72\xc2\xcd\xc0\x78\xa2\xe1\x17\x34\x2b\xe8\x77\x13\xff\xdc\x54\x70\x64\x89\x2b\x43\x85\xf6\xbc\x06\x71\x48\xdb\xdf\xdd\x2b\x9a\xcb\x68\x8c\x9f\x17\xd5\x25\x27\x91\x2b\xef\x65\xe1\x66\xc9\xfe\xf4\x7a\x15\x2b\xdf\xef\xcb\xa8\xc7\x25\x1b\x49\x28\x86\x04\xe2\xe0\x0e\xbc\xbe\x4e\x97\x8a\xa6\x6b\x17\xe5\xdb\x45\x1e\x54\x6b\x1d\xc8\x19\xf0\xf5\xad\xe8\xc7\x29\x94\x7d\x81\x24\xba\x04\x83\xed\x07\x50\x5c\x08\xc4\x21\xcd\xa5\xf0\x78\xdc\xf6\xff\xa4\xf6\xe0\xb2\xec\x70\x5d\xf2\xcf\x5b\x62\x8f\xfa\x25\x27\x74\xd1\xb6\x7f\x6f\xa9\xf8\xaf\xf7\x3e\xa8\x85\x32\x28\x20\x0e\xee\x40\x46\x29\x4d\x3a\x8b\x93\x6e\x8a\xe7\xc2\xe8\x36\x3d\x49\xca\xf3\x09\x7c\x66\xc1\xce\x1c\x76\x1d\x71\x16\xb4\x3c\xe9\x2f\x17\x59\x10\x0e\x80\x38\x84\x03\xde\x80\xfc\x01\x68\x68\x77\x9a\x03\xe4\x1c\xf5\x5f\xb7\x1c\x5a\x5d\x7f\xdf\xa0\x74\x14\x9d\x98\x44\xdf\x8b\xde\xeb\xe2\x8c\xeb\x5b\x40\xc9\x2c\xeb\xe0\xb8\xa0\x0f\x1d\x5f\x0b\xe2\xe0\x0e\x70\xd0\xc7\xc5\xf7\x5c\xc3\xb9\x9c\x7a\x3e\x24\x5e\x3f\xb3\x7a\xef\x96\x7a\x81\xfe\x90\x17\xeb\x77\x09\x4e\xbe\x48\x14\xfa\xef\xd0\x67\x1c\x10\x07\x77\x60\x90\x3a\xd2\x67\x87\xe4\x64\x77\x11\xad\x3a\x8f\x3e\x48\xec\x63\x6e\x18\x71\x84\x59\xb6\xe3\xee\xe5\xa9\x85\x98\xfb\x0d\xb2\xd0\xe7\x67\x10\x07\x77\xa0\x16\x6b\xad\x4b\x53\xb0\xbb\x62\x39\xc3\x61\xf2\xc6\xc7\x2d\x32\x86\x9f\x87\x6b\x02\x17\x37\x7b\x89\x03\x72\x7a\xa7\x3c\x4f\x1a\xa0\xcf\x64\x00\x0e\xee\x40\x3b\x15\xb7\x0b\x6b\xb6\x13\xed\x87\x73\x4e\x73\xa9\x76\x85\xea\x86\x5b\x78\xc9\x1c\xd6\x0c\x96\x68\x02\xbe\xa2\x3d\x0c\xde\x34\x08\x07\x40\x1c\x54\x07\xf4\xff\xee\x00\x68\x9c\x7d\x6a\x1d\x30\x70\x98\xef\xed\xd6\x26\x6f\x7f\x52\x30\x7c\x90\x49\x18\x6c\x71\x0e\xef\x11\xe5\x67\x06\x0e\x8c\xf5\x27\xdc\x49\x38\xe3\xd0\x39\x9a\x20\x0e\xe9\x59\xd0\x36\x8b\x69\x52\x6d\x16\x37\x46\x21\xfc\xa8\xa3\x2f\xa4\xe7\xb2\x30\x45\xf7\xf5\xe5\x60\xef\x73\x8c\x52\xfd\xad\x19\xd5\x4c\xd0\xb3\x00\xc0\x21\x6d\x87\xbb\x14\x28\xaa\xb7\xb3\xb4\xfd\x8a\xf6\x66\x61\xed\xee\x23\x71\xbd\x5d\xa1\xb0\x74\x33\x72\x02\x8b\x91\xe3\xaf\x69\xb9\xea\xc3\x50\x80\x16\xc0\xc1\x1d\x50\xe5\xad\x57\xdf\x1c\xbc\xf4\xe3\x16\xc7\x1d\x4b\x09\x3d\xb3\x3b\x57\xee\x29\x17\x1c\xbf\x1a\x72\x3c\xd0\x6e\xbd\x27\x65\xcc\x00\xed\xe9\x02\xe2\xe0\x0e\xc8\x88\x1f\x29\x46\x63\xab\xfe\x94\xc5\xf3\xfd\x1e\x31\x4e\x46\xb3\x38\xb3\x39\x3a\xd6\xfd\x49\x9d\xed\x15\xae\x90\x59\xf0\xee\x2a\xc2\x01\x10\x07\xd5\x01\x40\xfe\x00\xf4\xd2\x73\x6a\x0e\x49\x31\x88\xee\x5d\x73\xf8\x39\x81\x3c\xca\xb5\xc3\xdf\x25\xb2\x4e\x0b\x24\x7c\x5c\x77\x67\x0f\x0f\x42\x0b\x47\x8b\xfb\x7f\x42\xcf\x41\x10\x87\x74\xc4\x94\xe7\xe3\xd5\x16\x7d\x32\xf2\x57\x6b\x5c\x5b\x17\x25\x02\xf7\x13\x07\x32\xb6\xb8\x04\xef\x6f\x98\x75\x06\xab\x5f\x18\x72\xb1\x81\x3e\xe3\x00\x38\xb8\x03\xb8\xf7\xec\xb7\x75\x32\x1f\x46\x4c\xc7\x38\x73\xdf\xed\xba\xe3\x38\x9a\x2d\xf2\x47\x6f\x37\x7c\x3f\xf5\xb8\x73\x7f\x9e\x87\x0a\xca\x8a\x80\x38\xb8\x03\x35\x62\xdc\x97\x47\x3d\xfa\x0b\xc5\xf0\x3b\x16\x67\x44\xc7\x9e\xcf\xeb\x46\xc8\x7f\x43\xdb\x57\x27\xb0\xee\xeb\x92\x1c\x25\xd1\x81\x32\x6e\x00\x0e\xee\xc0\x75\x27\xd7\xf4\x3d\xf5\xe7\xce\xd8\x0e\x3d\x72\x8f\x53\x43\x88\x43\xa9\xcb\xc7\xc8\xab\x72\x54\xdd\xe4\x07\x8c\xd2\xaf\x16\xb7\x21\x1c\x00\x71\x50\x1d\x88\xff\xbb\x03\xa0\x37\xd0\x53\x97\xa1\xbc\xe6\x57\x98\x56\x8a\x7c\xd3\x8b\xff\x95\x65\xc5\x2a\x68\xe1\xa3\x52\xa5\x28\x01\xc7\x97\x2f\xa9\x8a\x6b\x85\x03\x81\xac\xd0\x92\x21\x10\x07\x77\xa0\xba\x55\xdb\xa7\xb4\xe7\x85\xbb\x48\x4e\xb0\x76\x6b\xf2\x8f\xc1\x80\xc1\xc0\x02\x25\xdd\xcd\xdf\x1a\x2b\x38\x9b\x44\xea\x98\x5e\x88\x76\x41\x1c\xdc\x81\x77\x13\x1e\xba\xd6\x2b\x7a\xfc\xe3\x43\xf4\x5d\x4c\xbf\xef\x1c\x07\x5f\x7f\x4a\x26\x52\xa1\x1b\xdd\xf7\x6d\x7f\x36\xb1\x36\xca\x04\xd1\x2e\x88\x83\x3b\xf0\x3e\x90\x30\x30\x63\xf8\x48\xd7\xba\xc1\x06\xf3\x43\xa0\x72\x6f\x61\x0f\x77\x50\xe0\x98\xde\x6a\xcb\x65\x35\xd2\xbe\x90\x07\x39\x88\x76\x41\x1c\xdc\x81\x94\x07\x49\xd9\xa5\xb5\x4f\x0f\x7f\x5f\x7e\x51\x79\x67\xb6\x56\xe1\x12\x6a\xe1\xce\xb3\x70\xf9\x2d\xd5\x8c\xbb\x2c\x2d\x59\xd8\xb6\x08\x07\x40\x1c\x54\x07\x40\xf9\x03\xd0\x94\xe2\x3f\xf9\x03\x94\x1a\xa4\x09\x0c\xfe\x2b\xba\xbb\xf2\xb4\xb7\x4e\x06\xff\x90\x3a\x7e\x7f\xa9\xfa\x03\x75\x48\x91\x8d\xe7\xeb\x87\x5f\xb7\xdf\xba\x3f\x4a\xa7\x6e\x90\x39\x93\x79\x13\xe4\xfc\xc1\x38\x1e\x23\x6d\x86\x57\xf8\x68\x94\xb9\x89\x1c\xa3\xad\x56\x42\xb7\x83\x1f\x71\x1c\xa9\x2e\x7a\xcb\xae\xee\xad\x8b\xab\x2b\xd4\x67\x32\x4b\xb4\x8d\xf4\xb3\x0a\x0c\x42\xad\x65\x8b\x56\x2e\x29\x1f\x6e\x2b\x58\xf0\x66\x73\x4c\xac\xdf\x2c\x24\xe3\xea\x12\xa0\x50\xbe\xbf\x24\xf8\x67\xe8\x4c\x0e\x9a\xf7\x46\xce\x1f\x08\xbf\xf0\xae\x0c\x7b\x6f\x33\x40\x91\x8f\xfe\x10\xe5\xb1\xde\xfd\x9e\x4d\xd4\x37\x73\x6e\x0d\xc2\xeb\xc2\x27\x55\x3f\xf2\xef\x9c\xc9\xf9\x07\x28\x14\x48\xdf\x77\x33\xde\xdd\x5f\xaf\x19\x35\x55\x22\xc4\xd4\x4a\x9a\x59\x2d\xd7\xb6\x7f\x7b\x77\xa6\xe9\x8e\x76\x3d\xad\x54\x52\x84\xa7\x7c\x9a\xda\x99\xf4\x16\x39\x7f\x60\xad\xc0\x80\x6f\xc4\x45\xf0\xd9\xe5\x06\x71\xf2\xf2\xf6\xc9\xd8\x1d\x97\x16\x22\xef\x07\x9e\xb7\xbf\x5b\x85\x61\x35\xff\xdc\xbe\x7a\x26\xbd\x55\x43\xfa\x59\x96\x9c\x2f\x29\x37\x34\x73\x9a\x3d\xb2\x1c\x64\x95\x3e\x15\x7a\x0a\xdf\x26\xfc\x8a\x75\x3d\x6e\xf8\x29\xbb\xc2\x64\x82\xe9\xf3\xe0\x33\xe9\x2d\x72\xfe\xa0\x65\x74\xdb\x85\x2a\xf2\x0a\x4a\x82\x40\x8d\xb9\x31\xf3\x3c\xfb\xcf\x9d\xe0\x60\x1b\x7d\x3d\xae\x81\x34\x9d\xcb\x6c\x38\x81\x34\x67\x36\x03\x08\xba\x53\x4f\x2b\xf4\xdc\x02\x44\x8f\x23\x35\x9c\x77\x2f\x6b\x24\xbe\xa9\x37\x3e\xc8\x5c\x13\xac\xaf\x78\x5d\x7e\x52\x5b\xc1\xb3\xeb\x4a\xfb\x5c\x65\x0b\x5a\x1f\x0c\xe0\x90\xce\xbf\x0c\x0b\xaa\xb3\xba\x7d\xdb\xb1\x4d\x20\xda\x85\xcc\xc8\x67\x94\xa4\xc1\xfb\xc5\xf2\x9f\xb4\x36\x29\x8b\xb9\x71\xee\xfe\x70\x28\x18\x0a\xe2\xe0\x85\x3e\xd5\x34\x17\xf5\x92\x39\xf3\xe3\xb2\xef\xdf\x62\x5b\x70\x0d\x83\xa5\x72\x1d\x3d\xc5\x7d\xee\xb1\xf3\x1e\x19\x97\x6b\x1c\xa1\x41\x07\xde\x83\x38\x78\xa1\x7f\xfe\xfc\x0b\x2b\xd6\x03\xc5\x80\x70\xda\x5f\xef\x59\x5e\x9a\xa0\xe8\x2d\xe8\x8a\x12\xdf\x53\xac\x27\x6a\x65\x5f\x22\xb1\x75\x81\x0e\xa6\x07\x71\xf0\x42\x5f\x17\xb3\x91\x30\x40\x16\xdd\x5e\xd2\x3e\x9f\xc9\xed\x7a\x2e\xbf\x23\xdc\x95\x75\xe2\x5d\x3a\xed\xaf\xeb\x95\x6d\x66\xee\x4f\xa1\xe0\x39\x88\x83\x1e\xf6\x35\x7f\x7f\xd8\x83\xca\xe6\x69\x0e\xa0\xa0\x12\xcc\x28\x0a\xc7\x5a\xfa\x6a\x88\x35\x37\xbe\x9a\x62\x8c\x36\xa0\xce\xe6\x78\x84\xf5\xc0\x2d\x42\x27\x23\x86\x87\x1d\x7a\xe1\x01\x71\x70\x07\x76\xaa\xcc\xa5\xe2\x37\x22\xe9\x7e\xd7\x39\x2c\x4a\xe4\xe6\x56\x85\x7a\xeb\x77\x5c\xe0\xc4\xf3\x37\x63\x56\x79\x61\x7f\x55\x74\x16\xd1\x2e\x88\x43\xda\xf3\xda\xfb\xd1\x8a\xf4\x83\x30\x23\x79\xc9\x50\xc3\x18\x94\x45\xa9\xc1\x2a\xdd\x0f\x32\xab\x17\x4d\x6e\xbe\xce\x31\xc1\x66\xb1\x84\x0e\xea\x03\x71\x70\x07\x9c\xed\x72\x09\xfa\x72\x3a\x86\x19\xf9\x6d\x2f\xc8\xae\xe1\x6e\x12\x71\x90\x68\x31\x3b\xa9\x52\x27\xe5\x6e\xca\xab\xbb\x8d\x43\xfb\x28\x83\x38\xb8\x03\x5e\x27\x77\xb9\x92\x71\xe4\x04\xa2\x48\xb9\xd9\x82\xff\x7c\x9f\x92\x0e\xbe\x11\xf9\x4d\x8f\x54\x67\x90\x29\x80\xf6\xfa\xcc\x4c\x1a\xb4\xe7\x35\x80\x83\x1e\xf6\x80\xfc\x01\xe8\x19\x76\x9a\x03\x2e\x3c\x14\x31\x02\xb3\xe6\xb1\x7c\x6a\x97\xe9\x33\x66\xb2\x53\xcc\x4d\xe6\x4f\xc8\xe7\xda\x1c\x5a\x1b\x6f\x88\x99\x2f\xf4\x7c\x44\xf4\x1d\xc4\xc1\x1d\xa0\x53\x6f\xf8\x65\xc5\xad\x2c\x76\xe9\x72\xa2\x28\xf5\x83\x0d\xd6\x80\xb5\xb7\x4a\x71\x92\x2e\x98\x2e\x8f\x45\x38\x5f\x64\xcd\x40\xe7\x09\x80\x38\xb8\x03\xe3\xa2\x09\x46\x77\x5f\x66\x70\x64\x3d\x7b\xdf\x75\xdb\x59\xef\x12\xb6\xf0\x92\x91\x78\x39\x87\xbd\xb0\x52\x8d\xd9\x8b\xaf\x2d\xd0\x17\x06\x10\x07\x77\x60\x2b\x2c\x90\x95\x9e\x3c\x4e\xda\x8c\xf1\xa2\xe7\x4e\x5e\xc7\xe5\x1b\xb5\x52\x09\x5a\x2f\xd6\x49\x5e\xf7\x7f\xb3\x4c\x2c\x1b\xae\x82\x36\x35\x00\x70\x70\x07\xfc\x2e\x50\x64\xc9\x0a\xdc\x17\x6d\x0c\x66\xd2\x90\xd0\xbd\x12\x9b\x99\xc9\xaa\x28\x1d\xcd\x40\xb4\xda\x9b\xab\x3e\x8b\x37\x88\x0a\xed\x79\x0d\xe0\xa0\x3a\xb0\xfd\x77\x07\x40\x03\x8a\xd3\x1c\x50\xa8\x97\x8e\xe5\xf7\xb5\xfc\xd4\xa9\xb3\x4a\xad\x8d\x51\x2b\x1d\xfb\x59\x72\xfc\xf6\x35\x05\xa3\x0d\x65\x5c\xb7\x92\x62\x6c\x4b\x44\xdf\x41\x1c\xdc\x01\x5d\x21\x8b\xaa\x0e\x1c\xa6\xb9\x0f\xcd\xd6\x85\xed\xd9\x64\x57\xf9\x9c\xa5\xef\x50\xd9\x31\x93\x5f\xb1\xc0\xfb\x8e\xf3\xe1\xcf\x2b\xe8\x65\x02\xc0\xc1\x1d\x30\x2d\x6d\xd8\x3a\x56\xfc\xa2\xff\x1d\x35\x71\xc1\xfa\xe3\xec\xe8\xa2\xdd\xdb\x2e\xac\x11\x6c\x4f\xcb\x82\xd0\x3d\xef\x6f\xfd\x8c\x88\x76\x41\x1c\xdc\x81\x1f\xce\xc4\xbf\xe6\xa3\x53\x76\x7f\xf7\xe3\x0e\x60\xa6\xbc\x25\x71\x77\x5f\xf4\xb4\x09\x67\xe8\x7d\xf1\x5a\x22\xc3\xb3\x4d\x27\x1a\xd1\x2e\x88\x83\x3b\xd0\x74\x59\xfe\xd5\xcc\x33\x29\x93\x39\xb1\xd1\x94\xcd\xa2\xdb\xc3\x44\x4d\x1d\x03\xd4\x3e\x46\xc6\x3a\xae\x3d\x01\x42\x9c\x84\x87\x08\x07\x40\x1c\x54\x07\x00\xf9\x03\xd0\xe8\xee\x34\x07\x78\x76\x96\x8f\xca\xd3\x38\xc6\xca\x78\x0b\x4f\x2e\xfc\x6a\x7c\x13\xa2\xe1\x5d\x46\xb2\x38\xa1\xbc\x68\x16\x90\x58\xb8\x7a\x1f\xca\xf5\x80\x38\xb8\x03\xf1\xc9\xaf\xe6\x7e\xf2\x47\x55\x38\x0f\xa1\xe1\x61\x71\xed\xc4\x10\x98\x63\x0b\x92\xe4\x18\xd2\x48\xb0\xff\x66\x24\x11\xa4\xd6\x86\x36\x76\x01\x70\x48\x0b\xaa\x94\x3a\x31\xc9\xdd\xda\x8a\xc6\xef\x70\xd8\x45\x4d\xee\xc8\xdd\x49\x54\x31\x9e\x91\x77\xd2\x7e\xd4\xf1\x95\x4a\x56\x23\x1b\xfa\x82\x09\xe2\xe0\x0e\x98\xbf\xaf\xe5\xe7\x9e\x1f\x5e\xbd\x8a\xe5\x16\x34\x66\xd6\x68\xfa\xfd\x16\x73\x35\xfb\x2d\xd7\x99\xcb\xda\x5e\xf9\xdc\xb9\x28\xea\x88\x76\x41\x1c\xdc\x81\x5a\xca\xd1\x34\x1e\x92\x16\xc7\x19\x83\x9e\x7b\xb5\x23\x35\x22\x63\xa3\xf6\x85\xf5\x8d\xd7\x7b\x0e\x7a\x8a\xd8\xb0\x3e\xf9\x84\x40\x07\x60\x02\x38\xa8\x0e\x50\xfc\x7d\x51\x1d\x68\xa8\x7d\x9a\x03\x62\x87\xde\x07\x93\x62\x66\x46\x95\x54\xbc\x69\x33\xd7\xfa\xc3\xe2\x77\x17\xa7\xf5\x07\x43\xa8\xed\x1c\xeb\x55\x35\x5e\xb1\x41\x1f\x03\x40\x1c\xdc\x01\xf6\x7b\xcc\x9b\xd8\x7f\xe4\x6a\xd7\xde\x59\x44\x97\xbe\x09\x33\xbc\x48\xb2\x43\xcc\x5b\xa6\x23\x9a\xb3\x42\xc1\xd1\x61\x8e\x07\x7d\xbd\x05\x71\x70\x07\xca\x83\x1d\x85\xd3\x53\xbc\xb6\x18\x39\x75\x88\xa8\xd1\x84\x31\xc6\xa3\x53\x69\x98\xb5\x22\xd8\xb9\x1a\x62\x6f\xf0\xb2\xea\x4f\x23\xda\x05\x71\x70\x07\x14\x77\xc5\x0e\x43\x99\x6e\xeb\xdd\x79\xf1\xea\x30\x87\x6a\x16\x25\x2b\xba\xe9\x79\x5f\x57\x21\xfe\x45\x49\x9f\xde\xca\xd4\xaf\x25\xd0\xe2\x42\x00\x07\x77\xc0\x75\xda\x23\xe7\x9d\xfe\x2e\xfe\x76\x50\xb6\xac\x3c\x1e\x7d\xf4\x73\xa7\x74\x7e\x01\xec\x83\x3b\x2e\xc7\x9a\xe8\x5a\xbe\xca\xd9\x08\x07\x40\x1c\x54\x07\x00\xf9\x03\xd0\x7b\xcf\x69\x0e\xc8\x95\x60\xd3\x3f\xfc\x72\x40\x34\x84\x61\x7c\xbd\xce\xeb\xeb\xcf\xb5\x27\xcd\xa4\xd1\xf6\x97\x7e\xf4\xb6\xe0\x5e\x7a\xca\xd9\xeb\x8a\xe8\x3b\x88\x83\x3b\x40\x61\xab\xd1\xdc\x69\x9e\xdd\x7c\xf7\x51\xfe\xe7\xb6\xbe\x17\x83\xd9\x3d\x33\xc4\x07\xa6\x0f\xb9\xdb\xe6\x87\xae\xbf\x77\x6c\x0d\x47\xb4\x0b\xe2\xe0\x0e\x60\x96\x27\xf6\x75\x28\xe0\x63\xe2\x67\x2e\xd3\x95\x74\x65\x15\xd8\xdc\xc0\xac\x8e\xdd\xad\xc2\xf7\x7c\x4e\xf6\xa0\xfd\xf3\x23\xe8\x3d\x06\xc4\xc1\x1d\xf0\x69\xf7\xbd\xa7\xd1\xb5\x31\x4b\xee\x40\xae\x20\x1d\x7f\xc7\xdf\x40\x2b\x58\x3f\xe1\x5d\xd5\xc3\xde\xf6\x2a\x55\x8c\xa6\x39\x68\xd3\x14\x10\x07\x77\xa0\x68\x7a\x64\x90\xea\x20\x57\x27\x30\x7f\x34\x8a\x9f\x46\xbb\xdd\xd4\xef\xfa\x43\xd6\xcb\xd4\x0b\xb8\xf3\x52\x7b\xd6\x25\xe2\xbb\x08\x07\x40\x1c\x54\x07\xd4\xfe\xee\x00\xe8\x25\xf4\x34\x07\x94\x3d\x68\xb6\x29\x48\xba\x8b\xae\x47\xa4\x5e\xfd\xc3\x73\x6f\x41\xfc\xd9\xf3\xe3\xdc\x17\x0c\x6b\x92\x7c\x42\xa2\x57\xbf\xe6\x60\x22\xfa\x0e\xe2\xe0\x0e\x24\x09\x4d\x59\x62\x0d\xa0\x32\xed\x14\x6f\x61\xc6\xd1\xa6\x47\xe3\x5c\x7a\x7e\x5d\x25\x45\x20\x26\x38\x44\x34\x4f\xce\xe4\xc2\x13\x44\xbb\x20\x0e\xee\x80\xab\x9a\xff\x40\x8e\x42\xd2\xd1\xd8\x16\xa6\x8e\x33\x75\xcf\xb5\xb0\x32\x7f\x9b\xe4\x39\x0f\xa6\x45\x92\x74\x3b\xeb\x3b\x1f\xa1\x67\x01\x88\x83\x3b\x30\x42\x7b\xe8\x51\x49\xac\x76\x17\x2b\x70\x20\xac\xdc\x21\x58\x15\x3d\x1d\xe7\x5a\x56\x49\x78\x02\xdd\xe8\x4d\xfc\x11\x52\x6b\x28\x2f\x01\xe2\xe0\x0e\x88\x45\xa2\x67\x5b\xa3\x2a\xe0\xb0\x6f\x90\xac\x6d\x0c\xdf\xb5\x9d\xfe\x95\x2f\xf5\x2e\x5c\x7f\x80\x9a\xdd\xcf\x79\x58\xd6\xed\x04\xe1\x00\x88\x83\xea\x00\x28\x7f\x00\x5a\x2c\xf8\x4f\xfe\x00\xc5\x15\x69\x0e\xe3\x64\x54\x5d\x74\x99\xfd\xa9\x54\xfa\xf4\x70\xeb\xe7\x19\x7e\xab\xa3\x82\x00\xa5\x51\xbe\xcb\xdf\x6d\xfb\x82\xd4\x1b\xf5\x33\xab\xcf\x64\xea\x04\x39\x7f\x30\x27\x66\x8a\xb1\x67\x26\xf3\x87\xee\x8d\xf1\xbc\xa8\x48\xb8\x84\xc2\x2d\xaf\x98\x61\xd6\x4f\xa9\x91\x85\xa5\x0b\x4e\xee\xfb\xef\xcf\x6c\xea\x04\xd4\xbf\xd3\x6e\x0f\xba\x90\xca\x0f\xec\x53\x17\x74\x88\x5d\x4f\x04\x74\x1c\x09\xa7\x22\x9c\xa8\x72\x09\x6d\x6e\xf6\x50\x99\x6d\x7f\x4e\x75\xe9\x80\xb6\xee\x04\x71\xf0\xdb\x43\x04\x7d\x84\xe3\x8f\x63\xb2\x95\xf7\x16\x49\x28\x31\xe3\x7a\xa7\x3c\xb5\x03\xc1\x4d\x49\xc3\xe1\xa9\xbd\xce\x08\x19\x7d\x3a\x4e\x44\xbb\x20\x0e\x7e\x7b\x7c\x4d\x76\xe5\x78\xcf\xe7\xf2\xfe\xb6\xcb\x96\x4d\xce\x0d\xba\x25\x4c\x47\xba\x2f\xb4\x9d\xeb\x55\xf2\x1f\x13\x30\x39\x33\x73\x7c\xa1\xf5\x0d\x00\x0e\x7e\x7b\x58\x1f\xd1\xbd\x36\xbb\xa7\x40\x59\x64\x19\x97\x6c\x40\xff\x0c\xf5\x82\x0a\x3f\xd7\xa4\x3a\x6b\xcf\xe7\xe4\x71\x51\x21\xf9\x37\xd0\x5e\x45\x20\x0e\x7e\x7b\x50\xb3\xa3\x1e\x8e\x32\x7e\x99\x4e\xbc\xf0\x35\x42\xe6\xf3\xdd\x03\xec\x83\x2e\xef\x34\x72\x7c\x5e\xd2\x87\x84\xa8\xbe\x9c\x2c\xfd\x88\xdb\x03\xc4\x41\x25\xd2\xf5\xef\x25\x12\x24\xdb\x69\x0e\x08\xa3\xc8\x1b\xb9\xfe\xc8\x0e\x68\x1b\x9b\x9c\x1f\xa4\x6f\x9d\x7e\xa2\x6c\xcf\x2a\x8e\x31\xf0\x2a\x81\xbd\xf6\x07\x45\xbc\x09\x94\x41\x01\x71\x70\x07\x22\x13\x73\x52\xfe\xb8\x71\xb4\xd4\xcd\xb0\x9a\xd2\x54\xbd\xe9\x76\xbe\xe1\xdd\xd9\xef\xe8\x40\xb6\x74\x27\x22\x97\xda\x35\x12\x0b\xd1\x2e\x88\x83\x3b\xa0\x41\xf5\x39\x6c\x1c\xb3\x3b\xe6\x1d\x2f\xdb\xa8\x1f\x6b\xba\xd9\xd7\x15\xc1\xea\xe9\x72\x31\xce\xec\xfe\x3e\x0c\xe3\xdf\x91\xd0\x3e\x93\x20\x0e\xee\xc0\x58\x65\x67\xc9\xf4\x1a\xfd\x8a\xf4\x78\xb0\xf0\x5a\x13\x11\xdd\x61\x14\x89\x65\xb6\xc6\x9d\xe4\x6e\xa2\xb7\xea\x34\x1d\x31\x7b\x88\x76\x41\x1c\xdc\x01\xcb\x40\x9c\xad\xf7\x2f\x7f\xe4\xba\x58\x34\xaf\x6b\xcf\x97\x66\x8d\x38\x8e\x5f\x4f\xb3\xb8\x1b\xad\xdd\x3b\xef\x11\x2f\xfb\xd2\x09\xe1\x00\x88\x83\x4a\x24\x20\x7f\x00\x5a\x89\x7e\x7a\xfe\x20\x62\x69\xc4\xb6\xa9\x13\x4f\x3c\x37\x96\xd2\x5b\x31\xba\xa7\xf4\x81\x8c\x67\xcd\x81\x81\x7a\x13\x06\xc6\x96\x71\x03\xc3\xa0\x3c\x62\x2d\x3f\x88\x43\xce\x1f\x94\x8c\xed\xd5\xa7\x31\x91\xa4\x32\x5e\xd1\xa7\xb6\x34\xbd\x90\x48\xcb\x58\xb2\x76\x6b\x2c\x67\x86\xd3\x3d\xa8\x80\xac\xfe\xcf\x47\x44\xcb\x20\x0e\x39\x7f\x60\x1e\x33\x9b\x75\xb1\xa2\xca\x57\x3a\xdd\xc6\xa4\xd0\xc2\x34\xcd\xe9\x2e\x7d\x64\x8a\xfa\xf0\x5b\x7b\x4d\x6f\x0a\x25\x02\x31\x75\x44\xcb\x20\x0e\xf9\x6a\xdc\x23\x60\x10\xa9\x41\x37\xa8\xd1\x53\xfa\x76\xf5\xcb\xb9\x09\xab\x48\x5d\x83\x20\xf3\x05\x1d\xd4\xf9\x0d\x4d\x43\x43\x73\xf1\x6a\x44\xfe\x00\xc4\xfd\xf7\x64\x05\x9a\xff\x95\x3f\x88\x88\x08\xbb\x86\x43\xfb\xd4\xcd\x6c\xd3\x09\x2f\x4a\x57\x8e\x71\x9b\xd2\x54\xee\x22\x53\xf1\x37\x0d\x35\x6e\x52\xc5\x17\x42\xd3\xff\xce\x1f\x38\x25\x37\x9a\xae\x10\xf6\x9c\x33\x27\x3c\xfe\xb5\xea\x6f\xa4\x39\x56\x78\x5d\xec\x1c\x43\x5b\x78\xab\xe0\xd8\xd0\x8b\xd9\x85\xd9\x7f\xa1\xda\xa1\xa3\xeb\x4e\x2d\x7e\x6b\x13\x09\x86\x4d\x1e\xea\x8e\x31\x6c\xfc\xd1\x3c\xf7\xfd\xda\xc6\x42\xef\xe6\xdb\x06\x51\x68\x7d\xfa\xbf\x97\x3f\x00\x75\xee\x94\xfc\x41\x09\x4a\xce\xf8\x5d\x3d\x8e\x31\x54\x55\x41\x57\xed\x9f\xcb\x4a\xee\x93\xb6\xd3\xea\xd3\xb2\xd7\xac\xee\x4b\x6a\xde\xdc\xa8\x36\xf9\xf7\x0a\xed\xc2\x15\x31\xce\xcc\xea\x18\xfe\xa5\x4a\xac\x1c\x5d\x14\xd2\x74\x7f\x31\x21\xe6\x3c\x14\x4b\x31\xd7\xc9\x79\xca\xed\x9d\x7f\x1f\x95\xa0\x43\xb6\x95\x21\x92\x43\x73\xae\x20\xf1\x29\xb5\x84\xc9\x78\x37\x73\x66\x35\x9b\xcf\xcf\x87\x3b\x55\xee\xc6\xce\x7f\x36\xc2\xca\xa0\xfc\x01\xe8\xe7\xff\xc9\x1f\xa8\xc2\xf3\x07\x28\x9d\x0a\xb2\x05\xe9\xde\xf4\x9d\xc2\x1e\x89\x49\xba\x0e\xba\x0a\x6c\xd8\x97\xae\x1f\x34\x73\x36\x3b\x7b\x3e\xd3\x1e\xee\x60\x3f\x83\x91\x87\x64\x3d\x52\xfe\x20\x47\x8f\x0f\x7f\xa1\x0b\x7b\x7c\xa9\x49\xce\xb6\xc8\xc1\x1b\xe3\xa6\x0c\xde\x48\x9a\xee\x6a\xd6\x28\x9b\xc6\x18\xd7\xd3\xb8\xff\x2f\xff\xee\xff\xff\xbc\x25\x72\xfe\xe0\xaa\xfc\xb2\xeb\xb7\x07\x1b\x87\xe2\x45\x8f\x67\x0f\x4c\x3b\xca\x88\x1e\xdd\x19\x2a\x6e\x42\xbd\x1a\xd1\x47\x75\xe7\xc0\x65\x91\xf8\x2c\x7e\xb6\x1e\x39\x7f\x80\x73\xfb\x2a\xa7\xec\xf3\xf7\x38\x93\xc7\xf8\x2a\xa4\xc6\x78\xf5\x6f\xef\x29\x93\x35\xbf\x33\x6e\xf9\xba\x6b\x65\x12\x7d\x90\xf0\xe1\x4c\x7a\x8b\x9c\x3f\x50\xef\xae\xe0\x0a\x16\x2f\xb9\x91\xdc\xca\xb2\x95\xfe\x69\xf5\xc7\x25\x51\x9c\x93\x94\x90\xc7\x3f\x0b\xed\x2e\x29\xcb\x2e\xaa\xd6\x9d\x49\x6f\x91\xf3\x07\xda\xcf\x59\x92\x45\x04\x24\xd7\xb3\x3c\x3f\x14\x2d\x94\x8f\x71\xe2\xe8\x7b\x30\x74\x1d\xd8\x96\xa1\x69\xff\x10\xa9\x9e\x61\x1d\x3e\x93\xde\x22\xe7\x0f\x92\xc7\x94\xbe\x77\x32\x4e\x76\xa2\x46\x0e\xf9\x08\x8d\x3d\x2d\xca\x90\xd9\xbb\x8b\xf1\x7b\x60\xf3\x69\xbb\xd3\xb7\x01\x0c\xef\xc4\x33\xe9\x2d\x72\xfe\x60\x6c\x61\x7c\xfa\x8f\x61\xb9\x78\xf9\x74\xcf\x6d\x2a\xde\x85\xb5\xc8\x44\x7a\xa2\xdb\x63\x94\xbb\x4d\xa3\xf7\xfa\x93\x6b\x5e\x86\x9d\xd9\x10\x1a\x74\xa3\x9e\x36\x7c\x4a\x58\x88\x4d\xbb\x11\xd1\x79\xbf\x9b\x7f\x48\xa7\x3d\x45\x38\x76\xfb\x8e\xf3\xcb\x93\xf1\x25\x63\x61\x99\xb7\x3e\x0d\x77\x04\xa0\x6d\x69\x41\x1c\x7c\xf8\xc4\xd4\xf0\x36\x7b\x2e\x19\xf7\x1d\x77\xbe\x0d\xd7\x9b\x3d\xab\x6d\xd6\xf7\x7a\x5d\xda\xb5\x27\x74\xe9\x99\xa5\x38\x4f\x27\x79\xa0\xaf\x0e\x20\x0e\x3e\x7c\x2a\xa3\x2a\xd0\xde\x53\x95\xfe\xa8\x30\xcb\x4f\xa4\x2c\x86\x97\xd0\x72\xe2\x76\xd5\xfc\x31\xb7\x51\x79\x7e\x24\x53\x7c\x9b\x2f\xb4\x7b\x02\x88\x43\x5a\x6e\xf6\xa6\x23\xda\xd7\x2c\xaf\x69\xa4\x66\x7e\xb0\xfc\x37\xbf\xa7\x89\xf6\xd6\xf3\x71\x92\xbe\xa5\x54\x9a\x99\x38\x54\x2e\x4d\xe8\xbc\x06\x10\x87\x14\x63\x75\xfc\xf0\xeb\x31\xce\x41\x37\x19\xfe\x52\x8c\x76\xc5\xb8\xa5\xc0\x52\xd6\x11\x1a\x43\x54\xe8\xd0\xd7\xbc\x1c\x5c\xee\x84\x3f\x88\xfc\x01\x88\xf3\x93\x40\x41\xf3\xf6\x09\xf8\x4f\x75\xfe\xcb\x00\x1a\x54\x34\x4f\x33\x80\x97\x2d\x09\x5b\xe8\x76\xb5\xcf\x45\x75\xb9\x45\x3d\x43\x54\x9e\x52\x0c\x9b\xe1\x2e\xec\xc0\x1a\xc6\x39\xae\xed\xc0\xd5\x08\x29\x44\xcf\x41\x1c\xbc\xe7\xfe\x11\x24\x4f\xfc\xae\xb3\x2f\x7f\x22\xf1\x99\x78\x17\x1a\xe2\x61\xc3\x93\xde\x24\xcb\xa4\xe8\xe5\xed\xd1\xf0\xee\x79\x20\x26\xb4\x21\x29\x88\x83\x1b\x90\x3c\x26\xd9\xc3\xc2\x77\x81\x07\x8b\x40\xec\x59\x45\x63\x1a\x3b\xde\xa5\xdf\xa6\xb6\xd8\xa4\x17\x51\x3f\xd4\xfb\xe1\xdc\x6b\x3f\x87\x68\x17\xc4\x21\xed\x7d\x16\x9a\xaf\x8b\xe7\x26\xc6\x42\x65\xf5\xd4\xd3\x3f\x77\x2d\x51\xc2\x9c\xd2\x59\xb1\x7c\xd6\xe3\x11\xab\xa3\x1c\xd3\x0e\x16\xb4\x57\x1b\x88\x83\x5f\x07\x32\xb2\x7c\xa2\xd0\x40\xae\x83\xe3\x1c\x2f\x37\x1d\x85\x1e\x82\xd9\x5c\xeb\xd0\x6c\x5d\x97\x43\x6a\x07\x75\xee\xe0\xc9\x72\x39\x44\xfe\x00\xc4\xfd\x63\xc0\x7f\x1f\x95\x7f\x51\x00\xf4\x00\x3b\x35\x7f\x10\x72\x5e\x98\x63\x0e\x8b\x5a\xea\x42\x84\x5e\x45\x82\xa9\xb4\x1b\xa3\x5a\xa2\x75\xc8\xcf\x10\xaf\xc8\xe9\xc9\x27\x3d\x29\x66\x50\xfe\x00\xc0\xc1\xbb\x9e\x95\xf4\x7a\xcd\x72\x56\xb4\x1a\x4b\xa7\x9c\x34\x65\x51\xd9\x46\xb7\x9a\x69\x51\x50\xb3\x33\x5a\x5e\xd6\xcf\x68\x7c\x68\x0b\x3a\xb6\x12\xc4\xc1\x15\x68\xee\x43\x23\x4b\xff\x46\x6b\xf7\xf9\x8b\xde\xdb\xd7\x22\x8f\x77\x0c\x28\xc5\x6c\x0a\x9a\x2b\xf6\xc3\x0f\x86\x15\xdb\x5e\x86\x42\x47\x39\x83\x38\xb8\x02\x22\x0f\xc4\xc2\x6e\x2d\x24\x29\xd6\x16\x7f\xee\x79\x3b\xf9\x87\xde\x4b\xe7\xbb\x10\x2a\xf1\xef\x77\x32\xe8\x1f\x8a\xb3\x5f\x14\x40\x5b\x9d\x80\x38\xf8\x75\x50\x6f\x0b\x7d\xd2\x2c\x42\x71\xe5\x13\x66\x9e\x65\x4a\x43\x50\x9e\x54\x7c\x2f\xdf\x8b\xe7\xa4\x8f\x65\x73\x1f\xc5\x51\x7d\xb3\xe0\x46\xbc\x43\x81\xb8\x7f\x14\xf8\x9f\x71\xcb\x5f\x1c\x00\x8d\x26\x4e\x73\x20\x8b\xe1\xdd\x7c\x1a\x33\x2e\x9d\x37\xb5\xbc\xc4\x8a\x4c\x7c\xc1\xef\x6c\x5f\xdc\x1c\x14\xd4\xde\x9c\x40\xb6\xe3\x35\x47\x29\x68\xbd\x2d\x88\x83\xf7\x1d\xb7\xdc\xf1\x06\x93\x0d\x2d\xd1\x52\x81\x95\x3c\x8e\xc7\xea\xd3\x9b\x19\xe1\xe5\xbd\xc6\x97\x76\x06\x9f\x36\xe2\xa8\x7b\xfe\x81\xce\x13\x00\x71\x48\x0e\x14\x4b\xd6\xe6\x8f\x4e\x1e\xcb\xa4\xea\xab\x6d\x3d\x51\xab\x55\x6a\xfc\x5d\x53\xad\xb6\x22\xf8\xf9\x22\xe1\x06\x5e\x01\x07\xf4\x99\x0c\xc4\xc1\x1d\x78\x1b\x7b\xa1\xee\x92\x28\x41\x74\xa5\xcc\x43\x9d\x92\x6c\x7b\xf9\x6e\x51\x96\x86\xf2\xee\xf2\x47\x87\x02\x37\x73\x6b\xa7\x12\xe8\x11\xed\x82\x38\xf8\x75\x08\x1d\x6a\xfb\x9c\x49\x7c\x2d\x47\x60\x90\xfa\x6e\xb0\xac\xed\xcd\xa4\x17\x35\x8f\xcb\x3f\x3c\x2b\xc4\x95\x94\x9d\xe8\x77\xb8\x17\x87\x70\x00\xc4\x21\x1c\xa8\x07\xe4\x0f\x40\x43\xbb\xd3\x1c\xa8\x79\xc1\x9a\x9c\xe4\xdf\xbd\xad\x5f\x62\xe3\xf9\xd1\x63\x23\xc1\x5f\x6d\x39\x46\xad\x74\xa0\x01\x5f\xed\x7a\x64\x6f\x86\x33\xb4\xef\x3f\x88\x83\xf7\x5d\x9c\xf1\xda\x93\x9b\xb8\x15\x6b\x34\x6c\x13\xe7\x0f\x67\x71\x06\x12\x65\x15\x13\xd1\xdf\xbf\x62\x48\xc4\x59\xe9\xe4\x4f\xfa\xae\x84\x68\x17\xc4\xc1\x1d\xb0\xe6\xa3\x2b\xd0\xc8\x76\x79\x40\xd0\xe2\x1f\x3e\xc1\x99\x78\xe8\xbe\xf8\xd5\x69\xd9\x02\x85\xc7\x5f\x64\x41\xc9\x46\x45\xd4\x13\x9a\xf7\x02\x70\x70\x07\x18\xdf\xec\x28\xcc\xba\xb6\x26\xfd\xca\xf9\xba\xca\x6a\xc6\xd0\xf9\xa7\x36\xa5\xfb\xfd\xa3\xeb\xec\x64\xc3\xf2\x37\xc8\xc3\x7e\x67\x20\xda\x05\x71\xf0\xeb\xf0\xda\x93\xde\x70\xa5\xc3\x64\xf5\x21\x53\xd9\xad\x22\x51\xd5\x3e\xc5\x1b\x2e\xb8\x87\xa5\xd7\x0a\x70\x2f\x75\x45\x89\xa7\x0f\x0c\x41\xfb\x9e\x03\x38\xa8\x0e\x00\xf2\x07\xa0\x71\xf6\x69\x0e\x94\x13\x65\x66\x09\xfb\x66\x12\x9f\xec\x65\x86\x93\xe6\x12\xbc\x21\xb1\x99\x34\x60\x56\xa1\xc1\x62\x48\xb8\xe1\x84\xd6\x3a\x9f\x05\x7d\xca\x03\x70\xf0\xbe\x33\xfe\x34\xdd\xdb\xb9\x55\x54\xe9\xcb\xf6\xe3\xa8\x3e\x5f\x39\xf4\xd0\x26\xa3\xf8\x69\x73\x76\x4c\x93\xbc\x41\x69\xde\xb7\x44\x28\xe0\x09\xe2\xe0\x0e\xd0\xf4\x09\xd0\x46\xdc\xf1\xa2\x8e\x8d\xd8\x17\x8e\x4c\xfc\x24\x28\x74\xbf\xf4\xfd\xc4\x43\xe1\xb5\x6c\xf3\x27\x54\x44\xd3\xa9\xd0\x96\x47\x20\x0e\x69\xfb\xbb\x44\x83\x71\x77\xba\x66\x65\xe6\xec\x85\x9a\x1a\xd5\xaa\xea\x97\xf1\x5e\x27\x4c\x7c\x1d\x13\x77\x5b\x95\x6c\xc3\xd4\x25\xa0\x63\xfd\x41\x1c\xd2\x52\x0c\xd4\x84\x4f\xa3\x55\x01\x57\xf2\x70\xee\x08\x78\xcf\x9b\xf5\x31\xae\xbf\x12\x4e\x19\x46\x99\x50\xba\xc2\x1f\x57\x9c\xb6\xde\x8c\x70\x00\xc4\x41\x75\x00\x90\x3f\x00\xbd\xf4\x9c\xe6\xc0\xc2\xae\xd8\xa1\xd0\x2f\x9c\xc5\x9c\x18\x77\x7f\xee\xb0\xa7\x3e\xbe\x73\x53\x6f\x87\xf7\x38\x99\x87\x12\x19\xba\x9e\x5c\x78\x0d\x2d\xf1\x03\x71\xf0\xbe\x7b\x38\x25\xff\x8a\x65\x98\xcc\x5f\x20\xa9\x58\x8a\x23\xef\xe3\xfc\x79\x3b\x8f\xce\x5d\xd8\xcf\x8b\x9d\x41\xa4\x79\xbc\x3a\x16\xca\x76\x81\x38\xb8\x03\x01\x9f\xa9\xea\x79\xa6\x8f\x93\xaf\xeb\x6d\x73\x70\x26\xcb\xe4\xe3\x63\xa3\xb7\xd0\xfe\x7a\x69\x7d\xc2\xda\xac\x64\x25\x24\x0d\x45\x47\x41\x1c\xd2\x9e\x2e\x6f\xf5\x1c\xe2\xdb\xe7\x6c\x22\x24\xb8\x6b\xfa\x45\x30\x52\x73\x3b\x2a\x5c\xef\x9b\x7a\x4f\x6d\x45\xba\xe4\x3e\xb4\x4a\x85\x1c\x00\x71\xf0\xeb\xb0\x74\x8c\x66\x7b\x8f\x91\x9e\xd1\x40\xca\xdc\x51\xdb\xb4\xcf\x6e\xf8\x42\x5f\x14\x7b\x77\xd0\x50\x2b\x6f\x10\xc7\x22\xb3\xce\x1b\x84\x03\x20\x0e\xaa\x03\x80\xfc\x01\xe8\x0d\xf4\x34\x07\xc6\xce\xd9\x6c\x7a\x1b\xfa\xc7\x56\x7a\x75\x1f\x3b\x63\x09\x9c\x13\xd0\x1d\xae\x71\x53\xf4\xb5\x37\xdf\x62\x1d\xb9\xea\x1f\x9a\x0f\xcd\x27\x03\x38\xa4\xe1\xb0\xf4\x10\x77\xfe\xaa\xaa\xf7\x05\xc1\x9e\xae\x04\xfd\x91\x73\xb2\xbf\xb0\xa6\x71\x34\x7f\x1d\x13\x46\x0f\x9a\x6b\x90\xdc\x75\x81\xb6\x28\x03\x70\x70\x07\x54\xa6\xfa\xb5\x0b\x67\xf4\xc5\xaa\x27\x65\xfd\x8d\x5a\xb5\x8b\x27\x2f\x5b\x0c\xfd\x7c\xf2\xbb\x80\xe5\x83\xb6\x64\xb2\x71\x2e\xe4\x16\x88\x83\x3b\x90\x9b\xa0\xd9\xfb\x0e\xbb\x52\xb4\x58\xf4\x59\x66\xd6\xb8\xab\xed\x16\x51\x53\xe2\xc3\xb9\x6f\xa1\xa1\x59\x33\xcf\x97\x0b\x25\x58\x10\xed\x82\x38\xf8\x75\xe8\x36\x2b\xd3\xc9\xc2\x68\xf9\xe9\x12\xfa\x45\x8f\x9d\xfa\xfd\x49\x37\x75\x60\x41\x19\x5b\x4c\xa0\x5d\xfa\x1c\xdf\x61\xe0\x90\x0b\xc2\x01\x10\x07\xd5\x01\x50\xfe\x00\x34\xa5\xf8\x4f\xfe\x40\x0c\x39\x7f\xb0\x91\x42\x43\x1a\xe1\xee\x55\x9b\xdb\x54\xf4\x66\xaf\x95\xdf\x8e\x3f\x1e\xc7\x90\x7f\xa4\x2a\xe4\x5c\xe3\xf0\x6f\x37\xad\x9d\x97\x67\x32\x6f\x82\x9c\x3f\x08\x5d\x5f\x96\x08\xbb\xda\x52\x11\x3d\xf3\x66\x74\x39\x82\xb5\xa7\x54\xd4\x47\xea\x49\x57\xd2\x02\xaa\xdb\x61\xe3\x9f\x88\x6d\xbe\x33\x99\x25\x42\xce\x1f\xe0\x90\x12\x69\x85\x62\x75\x33\x50\x14\x18\x0c\x50\xa1\x54\xbe\xec\x77\xff\xdd\x45\xd2\xbc\x3e\x29\x64\x6f\xff\xfb\xc4\xd8\xff\xd3\x99\xf4\x16\x39\x7f\x90\xb6\x15\x47\x19\x11\xd4\x32\xe0\xe4\xb7\xf9\x96\x45\xcc\x09\x45\x47\x59\x3b\x2e\x41\xc4\xba\xe2\xa3\x53\xd1\xb3\xb1\xf3\xcd\x7d\x67\xd2\x5b\xe4\xfc\xc1\x57\x96\x60\x0f\xb5\xca\x32\xd9\x4b\x5d\xdc\xee\x47\x84\xf3\xf6\xf7\x30\x12\xe9\x64\xa5\xaf\x35\x12\xdf\x18\xae\x08\x30\xdb\xb3\x38\x93\xde\x22\xe7\x0f\x7e\xa8\x57\x58\xb0\xaf\x73\x5d\xdd\x43\x89\xff\xed\x48\xdc\xa1\x90\x1e\x4a\x8d\xc5\x3f\xe8\x42\x27\x6a\x23\x7a\x49\xb7\x30\xf1\x0c\xe6\xc4\x42\xa5\xc4\x90\xf3\x07\x0f\x87\xd4\x04\x73\xba\x34\x0a\x17\x57\x63\xfc\xa6\x89\xfd\x54\xa2\x73\xf5\x9b\xd6\x7a\x74\xee\x4c\x66\x28\x89\x74\xba\xa2\x8d\x9c\x49\x6f\x91\xf3\x07\x6e\x0f\x05\x2c\xde\xa6\x96\xbd\x77\x4b\xa4\xbb\xb7\xdf\x1f\x55\xd6\x2b\xcd\x91\x2d\xc9\xaa\x9e\xa0\x32\xfa\xe7\xc8\x84\xe6\x16\xc7\x99\xcd\x00\x82\xee\xd4\xd3\x0a\x7d\xb6\x77\x54\x3c\x13\x4f\x16\xc1\xfd\x88\xd7\x7d\x23\x63\x16\xb2\xd1\xb3\x94\x37\x28\xed\xc5\xfa\x51\xa7\xc7\x8d\x72\x9d\x7c\xf9\x11\x05\x0e\xc4\xc1\x0b\x9c\x5d\xd7\x0e\x95\x54\xe8\x2b\x86\xbd\xaf\xb4\x25\xbf\x54\x46\x2d\x1e\xb6\xa7\x3d\x2a\xde\xa4\x26\xa7\x11\xac\x69\x1a\xcc\xf1\x87\x5e\xd2\x41\x1c\xbc\xd0\xd3\xed\xbb\x94\x2b\xb4\xd0\x28\xe0\x4d\x8e\xd8\x32\x73\xab\x10\x67\xf3\xa8\x34\xb2\x3c\x58\x3a\xea\x1e\x0f\xc3\xe9\xab\x56\x82\xf6\xcb\x00\x71\xf0\x42\xff\x67\x80\xa7\xd3\x2b\x67\x44\x60\x7d\x8a\x88\x84\xa7\x1f\xa7\x5c\xd3\xde\x2a\x34\xe9\x8f\xb2\xbb\xcc\x81\xf4\xb2\xa0\xf2\x1f\x68\x31\x01\x88\x83\x5f\x87\x98\x75\xd6\x3b\x94\x09\x9f\x7d\x93\x6e\x3a\x1c\x35\x9a\x2c\xfa\x1f\xb7\x8e\xa7\xe5\x6d\x99\xbe\xcf\xbe\xed\x65\xe9\x11\xa8\x5b\x8e\x28\xf4\x20\x0e\x7a\xd8\x03\xf2\x07\xa0\xb2\x79\x9a\x03\xec\x8b\x82\x4c\x46\xef\xdc\xc4\xda\xae\xf0\xdd\x13\x8f\x29\x43\x7f\x58\xa7\x4b\xaf\x1a\x99\xe6\x7f\xcd\x52\x56\xf2\x9e\x4a\x14\x74\xe8\x19\x88\x43\x7a\xe9\x7d\xf1\xf0\x84\x4b\xfc\xee\x3e\x3a\x7e\xe5\xb7\x2b\xb6\x58\xc6\x1d\x94\xc7\xcf\x04\x69\x3f\xd3\xd9\xd7\x48\xfe\xc4\x7f\xed\x24\x03\x4d\x2c\x01\x38\xb8\x03\x59\xba\xd9\x54\x72\xd9\x5d\xd2\x1b\x5a\x19\xed\x8e\x71\x61\xd3\x1f\xe6\x1e\x48\xff\xb2\xcf\x15\x2d\x39\xa7\x95\xf1\xf1\x6b\x10\xb4\x3e\x12\xc4\xc1\x1d\x88\x1e\xd6\xc0\xbd\xeb\xa6\x96\xae\xd0\xfc\x60\x0c\x97\x84\xdd\x92\x46\x41\x72\x84\x20\x88\x2f\x66\x75\x76\xfa\x12\xb7\xaf\x60\x39\xa2\x5d\x10\x07\xbf\x0e\xa8\xe6\x36\xa3\xa1\x9e\x97\x51\xa9\xa6\x94\xde\x2e\x3d\x59\xfd\x64\xf1\xb0\xa7\x82\x59\xf1\x52\x6f\xf7\xad\xd6\xdd\x0d\x62\x6e\x23\x84\x03\x20\x0e\x7a\xd8\x03\xf2\x07\xa0\x67\xd8\xa9\x07\xdf\xa9\xd2\x74\x6c\xc5\x13\x4c\x54\xa2\x93\x4a\x62\x6f\x51\x37\xde\x2e\x68\xb7\xe3\xff\xfa\xc9\x34\x74\xa9\x38\xc4\x9d\x02\x07\xca\x74\x80\x38\x78\xdf\x7b\x8a\xcc\xf3\x5a\x5a\xef\x34\x4a\xde\x2f\x37\x45\x31\xd1\x54\xe1\x6e\x1a\x5e\x30\xee\x17\x8b\xa4\x73\xb8\xd5\x65\x32\xd1\x0f\xed\xa7\x0e\xe2\xe0\x0e\xb4\x2a\xdd\xae\x95\xb4\xb7\xa9\xf4\x26\x1b\x3b\x97\x9c\x7f\x73\x6b\x5a\x0c\x8f\xc4\x8b\x5b\x66\x45\xb7\xca\xda\xb6\xd5\xeb\x3d\x34\x90\x04\x71\x48\xeb\x0d\x8f\x06\x57\xed\x24\xde\x51\x8e\x9c\xe7\xdd\x43\x8f\xd8\xa7\x9a\xc8\xce\x63\x96\x48\xf1\x24\xf2\xca\x09\x5c\x51\x5e\x5e\xdc\x85\xd6\x1b\x02\x38\xf8\x75\xb8\xa0\x29\xe7\x90\x7a\xeb\xfd\x46\x97\x88\xee\xcb\xcb\xa3\x23\x1e\x12\x2f\x7d\x6f\x78\x48\xe8\xa6\xfe\xc9\xeb\x7c\x32\x5a\x96\x34\x87\x70\x00\xc4\x41\x75\x00\x90\x3f\x00\x0d\x28\x4e\x73\xa0\x83\xe3\x43\x5e\x72\xc6\x8c\x27\x2a\xca\x08\x1f\xd1\x11\x21\x6d\x53\xb6\x8a\xcf\x0b\xfc\xf7\xfa\x5a\x0e\xcf\xe2\xea\xb0\x3e\x7f\x43\xf4\x1d\xc4\xc1\xfb\xee\xb7\x76\x53\xf5\xdc\x5b\xaf\xf7\x07\x45\xaa\xcf\x0f\xd4\x7a\x28\xa4\x5e\x7a\xe2\x2d\x31\xa9\xb9\x3d\xbf\xf4\x52\xa0\x24\x73\x01\x5a\xbf\x07\xe2\xe0\x0e\x88\xd1\xa1\xc8\xdc\x41\x49\xdb\x8b\x2f\x49\x68\xfc\xe5\x63\xf4\xd8\x27\x78\xfb\x8d\xf0\x66\x82\xd9\x7e\xf6\x66\xb3\xef\xb6\x34\xb4\xf9\x28\x88\x83\x3b\x90\xf5\x31\xa3\xed\xf3\x9b\xee\xc8\x5d\x36\x3a\xd7\x0d\x0c\x62\x76\xf2\x3e\xf2\x79\xeb\x99\x7d\x27\x93\xd6\xe0\x67\xe8\xce\xdd\xd0\x82\x2a\x10\x07\xbf\x0e\x03\x0c\x98\x77\x6e\xf4\xa9\x6d\xed\x89\x69\xea\x7d\xb4\x6f\xd8\xac\x53\x8d\x52\xe4\x23\xf4\x70\xc1\xf5\xe4\xb9\x4a\x47\x5b\x26\x83\x70\x00\xc4\x41\x75\x00\x90\x3f\x00\x8d\xee\x4e\x73\x80\x92\x25\xce\x6e\x31\xa8\x74\xbc\x60\xff\xd8\x29\x88\x61\x44\x8d\xe1\x3a\x46\xa8\x02\xf3\xa1\x9a\x53\x2c\xc1\x90\xb6\x07\x33\x74\x12\x38\x88\x83\xf7\x3d\xa2\x4b\xad\x50\x41\xd3\xdb\xa0\x4f\x43\x17\xcb\x8e\xae\xfa\x56\xa1\x93\x58\xaf\x54\xe7\xf0\x2c\xba\x86\x17\x55\x60\xf3\x90\x06\xa2\x5d\x10\x07\x77\xc0\x3c\x41\xf9\xc9\x3d\xc5\x5e\x26\xae\xfa\x82\x7c\x93\xbc\x91\x92\x37\x41\x77\xfd\xcf\x8b\xdf\x8e\xa2\xef\xc3\x4b\xec\x66\xa3\x8d\x80\x72\x02\x00\x0e\xee\x80\x42\xd1\xea\xcd\xda\xaf\x1d\x4f\xcf\x51\x3d\xa1\x37\x4c\x98\xe3\x10\x53\x47\x51\xc6\x6a\xa8\x0e\xb8\x18\xd9\x49\x30\x27\xd0\x07\x9d\x85\x03\xe2\xe0\xd7\x61\xaf\xaa\x7e\x26\xeb\xa8\x15\x5d\xf1\xfb\x85\xc2\xf9\xf6\x2f\x43\xc7\xce\xbc\xc2\xfe\x2b\x8f\x34\xe8\xd6\x8a\xb9\x4c\xbd\xc9\x3e\x23\x1c\x00\x71\x50\x1d\x00\xe4\x0f\x40\x43\xed\xd3\x1c\x78\xa4\xd2\xab\x98\x2e\x29\xd2\x23\xc7\x20\x69\xaf\x35\xd8\x65\x8d\x11\xc9\x99\xee\x4b\x90\x7c\xb9\x68\xd4\x71\x8e\x3d\x23\x0f\x3a\x10\x1b\xc4\xc1\xfb\x4e\xc5\x2c\x54\x3b\xad\x20\x7f\x9b\x16\xcb\x5f\xfc\x5c\x1e\xf3\x93\x1b\xed\xc6\xaa\x53\xe1\xb1\xb1\xcf\xcd\x05\xeb\x8a\xa2\x05\xa0\x1c\x12\x88\x83\x3b\x50\xc7\xfc\x73\x9b\xe3\xd9\xce\x3a\x63\x9f\x89\x91\xf3\xee\xa8\xfe\xf3\x51\xb7\xd6\x1b\x3f\xc2\x34\x6c\x7b\xe8\xaa\x2e\xa7\x67\x43\x39\x24\x10\x07\x77\x40\xd6\x5c\x4a\x2b\xbe\xc4\xcf\xe8\x17\xf9\xed\x26\x9f\x1a\x32\xf5\x67\x53\xdc\xe1\x5c\x0a\x35\xa6\x6d\x22\xd6\x01\x2f\x38\x42\x1e\x22\xda\x05\x71\xf0\xeb\x50\x70\x5d\xe7\xa5\xca\x1c\xd7\x31\xf7\xa4\xc1\x6f\xda\x9d\x02\xe7\x67\x4b\x66\xaf\x97\x93\x1b\xd4\xf2\x1f\xd4\x8c\x4f\x7f\x14\x0f\x44\x38\x00\xe2\xa0\x3a\x00\xc8\x1f\x80\xde\x7b\x4e\x73\xa0\x31\xc0\xd4\xa2\xae\x14\xaf\x2c\x76\xcf\xa6\x07\x3b\x40\x70\xd0\x27\x93\x69\x75\xf0\x92\xda\xf1\x95\xcc\x97\x31\x73\xf7\x8d\xa0\xbd\xef\x41\x1c\xbc\xef\x9e\x77\x85\x04\xd0\x98\x02\x48\xef\x37\x7f\x24\xb9\xcd\xf2\xa7\x27\xf9\xb6\xee\xb6\x31\x4f\x99\x76\x8c\x72\xdb\x8f\xc2\x8e\xa4\x6d\x44\xbb\x20\x0e\xee\x40\x82\xc0\x25\xd2\xab\x37\x12\xdb\x0b\x0b\xb1\xcc\x85\x9e\x4e\x55\x09\x26\xdf\xbd\x22\xa2\xaa\xbf\xc0\xb8\xd1\x38\x77\x9b\xfd\x03\x2d\xb4\x92\x01\xc0\xc1\x1d\x48\xfd\x42\xc4\xa7\x34\x41\x98\x72\xec\x56\x79\x5e\xcf\xdd\x56\x88\xdb\x5e\x08\x8b\xda\x3b\xda\xeb\xa7\xa1\xa6\x93\x41\xbb\x09\xb4\x19\x0b\x88\x83\x5f\x87\x9c\xa2\xb6\xaf\x55\x32\x54\x87\x14\x72\x37\x8f\x88\x4f\xba\x49\xc3\x07\xde\xae\x65\x39\x97\x2e\x14\x07\x1e\x10\x5d\xd0\xd0\x82\xce\x3f\x00\x71\x50\x1d\x00\xe4\x0f\x40\x2f\xa1\xa7\x39\x20\xed\x7b\x79\x8b\xf8\xaa\xa5\x3e\xf3\xd5\x25\x9b\x8d\xab\x92\x39\x73\x47\x1e\xcd\x0e\x33\xb7\xd0\xce\x2b\x46\x6f\xb5\xd1\x75\x2e\x21\xfa\x0e\xe2\xe0\x7d\x17\x28\xdf\x09\x94\x27\xdf\x3c\xb6\x3a\x8f\x61\x40\x41\x10\xd8\xb4\xf7\xe5\x1e\xdf\x80\x85\x7e\xdb\x4a\xc8\x62\xcf\xcd\x0c\xa9\x2b\x88\x76\x41\x1c\xdc\x81\x76\xeb\xe7\x13\xb7\xc4\x37\xf7\xe5\x3b\x0d\x64\x71\x4b\x54\xc7\x27\x92\xc2\xaf\xbe\x96\x1e\x15\x7d\xe0\x86\x81\x5e\x1c\xab\x0e\x2d\xb0\x06\x71\x70\x07\x28\x86\x5e\x2b\x4b\x26\x5e\x5f\x57\x8e\xa9\x7b\x58\x65\xf6\x41\x70\x11\x83\x66\x34\x72\x46\xdc\xaa\xda\x7d\xe3\xb8\xe8\xf1\xfa\x22\x94\x99\x01\x70\xf0\xeb\x30\x7b\x64\x21\x63\xb9\x7d\x60\x76\x8d\xb5\xe4\xf9\xf4\x8f\xe2\x78\x69\xb2\x37\xe9\x4d\xb7\x33\x5f\xa0\x98\x32\xcb\x89\xfe\x61\x09\x47\x38\x00\xe2\xa0\x3a\x00\xca\x1f\x80\x16\x0b\xfe\x93\x3f\x10\x43\xce\x1f\x48\x4e\x49\xab\xd9\xf5\xb7\x89\x93\xe8\x70\xd9\x33\x10\xb4\x0d\xae\x34\xb3\xd6\xbd\x8c\x4d\xf2\xeb\x49\xa3\x67\xe5\x9f\x79\x2d\x78\x26\x53\x27\xc8\xf9\x83\x28\xe3\x7e\x5f\xd6\xac\xbd\x10\xa2\x85\xd1\x04\x6e\x76\x1d\xfc\x9b\x27\x03\xb3\x5a\xbc\x21\xef\xf8\xb6\x9d\xf4\x6f\x94\xe0\x9f\xc1\x7e\xc0\xda\xff\x6f\xfd\x3b\xed\xf6\x18\xa5\x27\xc3\xec\xa9\x5f\xbd\x89\x6a\x3a\xe1\x18\xbc\x4a\xba\xb4\xf5\xe9\x5e\xd9\x93\xc8\x90\xc7\x0e\x5d\x76\xd7\xf8\xde\x66\x42\xaf\xb7\x20\x0e\x69\x9f\x26\x6e\xe1\x68\x93\x0f\x76\x17\xe9\x8d\x7a\x29\x1f\x2d\xd9\x59\x1a\xd2\x95\x5e\xa3\xa0\xa4\xca\xca\x92\xea\x0c\x09\x57\xb6\x08\x83\xd6\xb4\x03\x38\xf8\xed\xb1\x14\x73\xd5\x2b\x53\x64\xf0\xca\x55\xf9\x9a\x14\xc2\x8e\xfe\x3f\x8d\x8b\x2f\xce\x15\x2e\x46\xad\x52\x72\xbf\x88\x68\xd8\xa8\x80\xf6\xd2\x01\x71\xf0\xdb\xc3\xe2\x5d\x36\xb7\xfb\x07\x9e\x52\x4b\xb4\xac\x67\x7e\xf9\xcf\x1a\x8a\xaa\xdf\xde\x79\xd0\x92\x9b\x93\xd9\x99\x23\x7a\x8c\xb2\xdc\x81\x68\x17\xc4\xc1\xaf\xc3\x1b\x6e\xe2\xd1\x17\x82\xf7\x9b\x08\xd8\xd1\x13\xdd\xef\x7b\x46\x97\x15\x1d\x89\x1c\x1b\xfe\xdc\x42\x67\xa9\x69\xb7\xca\x43\x83\x8e\x07\x01\x71\x50\x89\x04\xe4\x0f\x40\xb2\x9d\x7a\x74\xa4\xd2\xa8\x21\xd7\x91\xf8\xe3\x14\x14\xea\xbc\x6c\xe7\xda\x35\x47\x9f\x2f\xb3\xe2\xdc\x23\x9c\x65\x2c\x99\x11\xf3\xbc\x9b\xd0\xb1\x3b\x20\x0e\xde\x77\x4d\x12\xa9\xd8\x3b\xcc\xab\x8b\xe7\xcd\x0e\xc5\x37\xda\x6c\xd5\x66\xbf\x6a\x96\xb1\x7e\xbc\x4f\x39\xc3\xd6\x15\xb3\xdb\x20\x04\x0d\x3f\x41\x1c\xdc\x01\xe5\x80\xdc\x9d\x64\xa1\x55\xef\x4c\x1c\xca\x8c\xeb\x4f\xcb\xca\x4c\xee\x76\x46\x5c\x31\xdb\xa4\x78\x21\xbf\x69\x54\x47\x89\x37\x07\x45\xca\x00\x1c\xdc\x81\x6f\xbf\xb6\x7e\xae\x3d\xcb\x50\xc2\x48\xa1\xaa\x45\x3b\xa4\x61\xc7\x92\xf9\x5c\xfc\x7b\x42\x11\x5b\xb9\xd7\xff\x61\xac\x81\xdc\x01\xa2\x5d\x10\x07\xbf\x0e\xd7\xcf\xfd\x79\x5e\x71\xc7\x84\xd8\xdd\xb2\xf7\x18\x73\x29\xc4\x63\xb4\xfb\x82\x03\x79\xd1\x5e\x27\x33\x0d\x17\xe7\xa4\xb3\x6c\x02\xb4\x57\x17\x80\x83\x4a\x24\x20\x7f\x00\x5a\x89\x7e\x7a\xfe\xc0\xf2\xba\x15\x6e\x94\xf6\x62\x0b\x2a\x93\x00\xe9\x40\x9c\xcb\xb0\xbd\x7e\xea\xc7\x72\xdf\x30\x1c\x9a\xa3\xf7\xe7\x9c\xee\x6e\x43\x6b\xf9\x41\x1c\x72\xfe\x60\x9f\xa7\x4e\xd2\xcf\x30\x7e\x22\x30\x45\x0f\x65\x66\x3b\xe3\x50\x3d\x83\x5f\x6b\x71\x27\xfd\xb5\x82\xaa\x93\x4f\x73\xa4\xd4\x24\xa2\x65\x10\x87\x9c\x3f\x10\x78\x8f\xfb\xd0\x81\xe5\x33\x7d\xf3\x45\x5b\xa1\x98\xf1\x24\x7f\xb3\xcd\xf7\xe4\xfd\x78\x97\x9e\x2f\x3c\x96\x6e\xd8\x9e\x4b\xd2\x41\xb4\x0c\xe2\xfc\xa4\xb0\x60\x57\xc3\xc9\xf7\xc1\x4b\x14\xa1\x47\xed\x3f\x6e\x18\x14\xe6\xc9\x59\x92\x2d\x18\x71\xff\x19\x29\xc3\xd5\xd0\x6f\xdc\xd1\xd5\x4c\xec\x3a\x8f\xc8\x1f\x80\xb8\xff\xe6\x0f\xd0\xfe\x57\xfe\x40\xec\xf1\xd4\x3c\xca\x7d\x5f\x83\x4f\xe4\xef\x7a\x02\x7f\xf0\x72\x79\x08\xb8\x7a\x45\x6e\x3c\x99\x93\xdb\x0a\x91\x46\xc9\xcf\x34\xf8\x77\xfe\xc0\xf9\x38\x6d\xfd\xb1\xc3\x8a\x39\x07\x89\x85\x8a\x5d\xd5\xc6\x73\xfc\xa9\xd8\xab\x17\x9d\x9f\xbd\xf2\x78\x6b\x32\xf8\x2a\xf3\xe4\xdf\xfb\x8d\xd3\x60\xb9\xe0\xb1\xb1\xa6\x7c\xd0\x13\xe6\x35\x5f\x57\xd6\xbb\x25\xa8\xa4\xa1\xe1\x6d\x4e\xd9\x5e\xe9\x5d\x4e\xc5\x8d\x36\x76\xfd\xff\x5e\xfe\x00\xd4\xb9\x53\xf2\x07\xfc\xbf\x55\xc5\xae\xe4\x1b\x09\xb9\xec\xe0\x25\xf0\xb2\x54\x0f\x9b\x79\xc6\x1a\xf2\x9e\x8b\x8d\xf5\x0f\x25\xc6\x2b\x1d\x76\xbb\xfe\x2f\x94\x8b\xcf\xba\xfe\xcd\x82\x1c\x13\x99\xf7\x3e\xaf\x3b\x13\x59\xde\x4b\x6c\x25\xf3\xb2\xe0\x57\xfe\xeb\xbb\xd6\x52\x57\x7d\xd5\x03\xff\x85\x16\xd7\xf0\xe7\xff\x5c\x11\x71\xab\xf5\x36\x39\xae\x67\xd1\x78\xd9\x5c\x16\x68\xfa\xfb\xe7\xd2\xe5\xf5\xdf\xd7\x26\xb3\xa8\x66\x1d\xa1\xfc\x01\xe8\xe7\xff\xc9\x1f\x44\xc2\xf3\x07\x2a\xaf\xcd\x29\x9c\x45\x1d\xca\x85\xd9\x3d\xf1\x93\xb6\x69\x6f\xc6\xb6\xfe\x24\x0b\xae\x89\x4f\xb3\x16\xd4\x3a\xe4\xe2\xfe\x50\x71\x06\x23\x0f\x49\x14\x25\xf8\xc0\x23\x2f\x1d\xbf\x7f\xef\x9c\x74\xb0\x75\xd0\xc8\x61\x7b\xf0\xad\x85\xe5\xdf\x25\x4c\x34\x61\xaa\x32\x61\x87\xd8\x23\x3b\x4c\x95\xca\x67\x31\xde\xf1\x46\xce\x1f\x2c\xd3\xb2\x07\x85\x65\xb3\xa3\x4f\xec\x74\xd3\x1d\x69\xd0\xd4\x0e\xb0\x11\x7c\xcd\xb2\x68\xd8\x34\xf8\x98\x5d\xf3\x35\xc0\xe5\x4c\x4e\x04\x40\xd1\x40\xfa\x59\x5a\x96\x1c\x47\xd2\x88\x18\xfa\xbd\xf6\x46\xe1\xfe\x9b\x47\x63\x53\x79\x79\xc9\xfb\x95\xef\x5e\x36\x94\x0a\xbf\xec\x7c\xda\xb2\x74\x26\xbd\x45\xce\x1f\x38\x3c\xcc\x1d\xba\x97\xfd\xfa\xdc\x68\xd8\x7c\xdd\x8f\xbd\xf0\x0f\x6f\xc6\x1e\xf2\x10\xbf\xb1\x59\xa3\xb7\x54\x77\x09\x2e\x18\xe0\x3d\x93\xde\xba\x23\xfd\xec\xaf\xb8\x1c\x87\x59\x06\x26\xae\x44\xad\xb2\xf4\x48\x5b\x81\x36\x65\xdb\xca\xda\x57\x06\x0c\xd6\x16\xe7\xdb\xfb\xd0\xcf\x73\xb1\x9d\x49\x6f\x91\xf3\x07\x3c\xbd\x15\x52\x6e\xeb\xf6\x8c\x16\x38\xd2\x43\x3e\x16\xcb\x35\x37\xa2\x0d\xbf\x72\x29\x69\xbe\x15\x5b\xbc\x1c\xb2\x3a\xdb\xa5\x75\x26\xbd\x2d\x41\xfa\xd9\xf2\x95\xf3\x44\x58\x8f\xfd\x16\x9d\x42\xa5\xba\x8b\xee\x8e\xfc\xba\xf9\xec\x7c\xba\x59\x21\x56\x06\xa3\xa8\xb4\xc0\xc7\x77\x07\x01\x67\x36\x84\x06\xdd\xa8\xa7\x0d\x9f\xe2\x5e\xcf\x71\x79\x64\x17\xbe\xfd\xa4\xf6\x71\x8c\xcf\x81\x80\x73\x7f\x03\x5b\xd5\xfd\x68\x56\x0a\xd5\x36\x7c\x54\xbc\x40\x80\x0b\x31\x6c\x00\x71\xf0\x61\x83\x31\x0b\x45\x40\x50\xeb\x32\x31\xf1\x6b\x9d\x1a\x8a\x8c\x88\x60\x43\xb7\x1b\x9f\xc8\x5b\xfc\x49\x67\x53\x52\x26\x51\xde\x5f\x84\xbe\xe4\x80\x38\xa4\x13\x77\xf3\xfa\x39\x8d\xd5\x14\x4e\xd2\x7e\x77\xc8\x30\xcb\x28\x7f\x11\x1e\x2e\xf6\x78\x6a\x9c\xfc\xcd\xfe\x0a\xdf\xe2\x8a\xdd\xc8\x00\x34\x2c\x03\x70\xf0\xe1\xd3\x55\x83\x3b\xe9\x1e\x6c\xf3\x43\x3e\x42\x26\x1c\x9f\x8b\x7f\x24\x1d\x61\x58\x6b\x4a\x75\xf3\x10\xbe\x2e\x28\xe1\x7f\xcd\xeb\x2f\x81\x68\x17\xc4\xf9\x49\xa0\x60\xfd\xbb\xdd\xa7\xfb\x9e\x68\x1b\x96\x49\x34\xde\xe8\x9e\xec\x45\x68\xad\x0f\xe2\x02\xa3\xa7\xa4\xf6\xce\xe9\xee\x95\x7c\x1b\x09\xee\x1c\x5d\x41\xe4\x0f\x40\x9c\x9f\x04\x0d\x8a\xb7\x4f\xc0\x7f\xaa\xf3\x5f\x06\xd0\xa0\xa2\x79\x9a\x01\xee\xd9\xae\xa4\x8e\x3e\x89\x57\x49\xf3\x59\x03\x8d\x8c\x49\x17\x73\xfd\x63\x88\x28\xf5\x5d\xb5\xa4\x42\xd0\x8a\x72\xea\xc7\x6e\x23\x7a\x0e\xe2\x90\xe6\x59\x75\x29\x33\xb5\x82\x37\x42\x23\x74\x02\xf9\xc9\x4c\x69\xc8\x12\xa2\x12\x8a\x85\xde\x49\xee\x2c\x54\x1c\x58\xe6\x4b\x55\xad\x21\xda\x05\x71\x48\xdf\x9d\x5a\xa4\xc4\x09\x5b\x3b\x8e\x17\x67\x5a\x03\x03\x2a\xa5\xa8\x83\xb8\x88\x7a\xf8\x99\x0f\x3c\xc8\x26\x6f\x33\x35\x45\xad\x42\x9b\x74\x83\x38\xa4\xfd\xef\x86\xf8\x14\xee\x39\xc5\x1e\x2d\xc9\x6d\x8c\x85\x69\x6a\xa6\x59\xc5\x95\x4a\xc4\x0b\xde\x9e\xc0\xfd\xa0\x30\x67\xdf\x73\x33\x08\xda\xff\x0e\xc0\xc1\x0d\xe0\xee\x72\x11\x61\x18\x5f\x62\x48\xf3\x6f\x47\x11\x94\x32\xdf\xaa\xb9\x66\xde\xad\x78\x64\x9c\xab\xad\x72\x43\xe0\xc9\x03\x86\x1a\x44\xfe\x00\xc4\xfd\x63\xc0\x7f\x1f\x95\x7f\x51\x00\xf4\x00\x3b\x4d\x01\x25\xee\xaa\x55\x95\x88\xcd\x56\x59\x8e\x5b\x94\x63\x8c\x1e\xb2\x75\x52\x19\x51\xd6\xe5\x1f\xb8\xca\x6b\xa3\x8a\xe5\x37\xb5\xa1\xcf\xcf\x20\x0e\xe9\x73\xcb\xac\x94\xa5\x32\x73\x89\xb9\xdc\xf1\x97\xf4\x1c\xed\x4b\x12\x8f\xd3\x56\x1c\xcf\xd5\x79\x3b\x1b\x5f\xc9\xbd\xc2\x29\xa9\x0a\xe5\x0f\x40\x1c\x5c\x81\xef\x85\x4b\x77\x2f\x6b\x94\xbf\x73\xaf\xa7\xb4\x4a\x7b\x7d\xee\x15\x4b\xb3\xf8\x25\x39\xc7\xb9\xfd\xd4\x51\x11\xdc\xa1\x12\x0d\x68\xdf\x73\x10\x07\x57\xe0\x3b\x3d\x2d\x7a\x05\x57\xd5\xb2\xf2\xa7\xa8\x32\xc6\x26\x96\x77\x64\xa6\xb4\x05\x14\xfa\xda\x91\xf6\xad\x93\xd3\xef\x6a\x3e\x42\x6b\xcf\x41\x1c\x5c\x01\x66\xfb\x59\xe5\x94\xac\xd1\x93\x2a\x8e\xec\x13\xd3\xf3\x13\xcf\xd4\xeb\xf8\x9c\x08\x2e\xe6\x54\x92\x99\x2e\xbc\xc9\x57\x5d\x2d\x45\xbc\x43\x81\xb8\x7f\x14\xf8\x9f\x71\xcb\x5f\x1c\x00\x8d\x26\x4e\x73\x80\x9a\x6e\xae\x29\xc7\x85\xbf\xd9\x18\x3d\x0f\x9f\x5b\xd2\x46\xb1\xc5\x8b\xa7\xea\x56\x2f\x51\x25\x5a\xc0\xc0\xa5\x59\x87\x29\x68\xf9\x05\x88\x83\x3b\xa0\xf1\xeb\xbc\xeb\x86\xf0\x0d\x6e\xee\x6f\xd9\x45\x51\xd7\x5a\x9c\x5f\x66\xe4\x61\xb6\x6d\x0b\x45\x68\xaa\x77\x93\xcf\x9e\x5f\x68\x87\xd6\xf1\x02\x38\xb8\x03\xa4\x5d\xd3\x52\xab\xf2\x3b\xa5\xbe\xd7\x02\x66\x68\x43\xbe\x2d\xe6\x54\xd3\x12\x0c\xfc\x7a\xda\xbb\x20\x9d\x1a\x2d\x68\x85\x4b\x8a\x68\x17\xc4\xc1\x1d\xd8\x93\x1d\xe9\xd7\x4a\x11\x1a\x7e\x1c\xfc\x6c\x79\x50\xe4\x84\xf4\x30\xbf\x48\x33\xeb\xdb\xfb\x0a\xe2\x6a\x56\x85\xb9\xc1\xd4\x31\xa8\x6c\x01\x38\xb8\x03\x0a\xec\xad\x8c\x0e\xdf\x58\xb3\x19\x4a\x27\x9b\xb6\x47\x95\x3c\x46\xd6\xb3\x6b\xfb\xf2\x5e\x60\x1a\x6f\x5b\xf7\x75\x97\xec\xd1\x22\x1c\x00\x71\x08\x07\xfe\x3b\x88\xfc\x8b\x03\xa0\xa1\xdd\xa9\x5b\xa1\x3e\xe1\xb8\xeb\x44\xcd\x9d\xf2\xc7\x7a\x4f\xad\x2c\x9d\xd8\x4c\x38\x88\x87\xc1\x93\xe2\x0e\xdb\x9c\xac\xef\x43\xab\x65\x0d\x68\xdd\x31\x88\x83\x3b\x60\xa9\xf9\x03\x73\x73\x5f\xad\x22\xa6\xef\x61\xc4\xa8\xd8\x65\xd3\x63\x14\x31\x19\x09\x2e\xaf\x1b\x33\x57\x2b\x6c\x27\xaf\xe6\x41\xdb\xea\x81\x38\xb8\x03\xa8\x18\xab\xdb\x01\xf7\x99\x99\x15\x7f\x53\x7f\xd2\x98\xf9\x98\x6f\xd8\x7d\x4c\xf9\xf2\xa5\xdd\x37\x8e\x0b\xf4\x82\xc1\x34\xfc\xd0\x9a\x53\x10\x87\xb4\x0c\x05\xa7\x5b\x4b\x4d\x4f\x62\x10\x97\x27\xf1\xdc\xad\x3f\x8f\x4a\xa6\x99\x6e\x6e\x8f\x8e\x7d\x10\xf1\x52\x25\xfa\xfa\x01\xaf\x05\xfa\x9c\x05\xe2\xe0\x0e\xec\x93\x2c\xe1\xfe\xde\xde\x8f\x63\x7d\xb7\x63\x1a\x62\xa7\x1b\x5a\x58\xf5\x69\x9a\xc6\x4d\x77\x20\xe5\x96\x3b\xdf\x8b\x1b\x96\x83\x08\x07\x40\x1c\x54\x07\x00\xf9\x03\xd0\x38\xfb\x34\x07\x24\xef\x6e\xe6\x12\xfe\x38\x5c\x61\x99\x94\xd3\xb0\xbd\xfe\xf3\x8a\x63\x62\xeb\x67\xb3\x68\xf5\xae\x0d\xec\x1e\xa6\x6f\xca\xd5\x06\x88\xbe\x83\x38\xb8\x03\x16\xa3\x07\xd7\x46\x99\x0c\x57\xcc\x0e\x62\x32\xf8\x47\x3c\x0e\x09\x1f\xcf\xbe\x2b\xe6\xa4\xe4\x8d\xa5\xd4\x56\xcd\xc3\xda\x92\x83\xe6\x28\x01\x1c\xdc\x01\x2c\xa3\x0a\xc2\xb4\xec\xe1\xf3\xdc\xb7\x43\x84\x19\x3d\x0e\x1d\xbf\x4a\x36\x8b\xa5\x0d\x33\xee\xae\x28\xf9\x97\xc5\x46\x6f\x42\x4b\x05\x40\x1c\xdc\x81\xcb\x4b\x89\x96\x0e\xd4\x95\xcb\xe2\x25\x33\x25\x6e\x58\xdf\xf2\x5a\x70\xee\x73\x62\x64\xca\xdc\x1b\x7b\x5a\x42\x5b\x3a\xb5\x0b\x2d\x9b\x01\x71\x70\x07\x82\xc7\x85\x87\xfc\x0b\xf9\x94\xa9\xcd\x3c\xd5\x57\xec\x6b\x76\x47\xec\x75\x8f\x1a\x8a\xb0\x3c\xd2\x55\xde\xdc\xef\xba\x9b\x47\x8f\x70\x00\xc4\x41\x75\xc0\xfd\xef\x0e\x80\x5e\x7a\x4e\x73\x80\xf3\xd6\x4f\x7a\xed\x74\xdc\x14\x89\x81\xc6\xd6\x2f\xd1\x47\xaf\x4a\x47\xfb\x1e\xd2\x87\xdd\x3f\xbf\x78\xe1\x8b\x30\xb6\xde\xcb\x41\x44\xdf\x41\x1c\xdc\x81\x6f\x7d\x84\xe8\xb9\xbb\x13\x16\x79\x6c\x26\xc4\xc3\xd1\x33\x5e\x9f\x48\xdf\x37\x92\x0a\xd6\xca\xf5\xf5\x2a\x88\x39\x04\xf9\x41\x9f\x87\x40\x1c\xd2\x67\xa7\xb4\x9c\xcb\xc1\x94\xd7\xa8\x51\xee\x50\x24\xee\x60\xf5\xc9\x35\xfe\xd8\x14\xc1\x21\x3e\xcf\x21\x17\x95\x2a\x1b\xeb\xb8\x0c\x7d\x2e\x07\x71\x70\x07\x6c\xfd\x18\x36\xfb\xa5\xa4\x95\xe9\xb6\xdd\x0d\xac\xf6\x0f\x43\xc8\xbe\x7d\xed\x5d\x1b\x1f\x61\xe7\x0a\x4e\x6b\xa0\xb0\xc4\xfb\x85\x68\x17\xc4\xc1\x1d\xf0\x43\xb1\x95\x98\x13\xdd\x63\xdd\xae\xef\x48\x10\x0d\x90\x57\xf1\xf4\x7b\x2b\x1f\x2e\x13\x76\x43\xc7\xf4\xe6\x9c\x6b\x9e\x03\x74\xa6\x2c\x88\x83\xea\x00\x20\x7f\x00\x7a\x03\x3d\xcd\x81\xca\x3c\xca\x37\x21\xf8\x61\x91\xae\xf1\x3f\xcd\x3f\x53\x27\x72\x5c\xcb\x6b\xbd\xaf\xca\xd3\x42\x18\x3e\x43\xca\x41\xa7\x8b\x02\x9d\x7f\x00\xe2\xe0\x0e\xc8\x46\x65\xbc\xbc\x99\x58\xef\x59\xfd\xec\x32\x97\x7a\xde\x87\x31\x33\xbb\x38\x3b\x4a\x0a\x32\xe5\xe2\x80\x62\xe1\x4f\xb4\x2b\xd0\xfd\x0a\xe2\xe0\x0e\x50\xc7\xa3\xa3\xc9\x2f\x4d\xb5\x86\x6b\x3d\x59\x6f\x61\x7c\x3e\x93\x58\x5a\x82\x39\xa7\xf7\x96\x84\x01\x6f\x79\x72\xed\x35\x2e\x0e\x34\x7e\x01\x70\x70\x07\x26\xd4\x65\xf7\x1e\x3c\x37\xba\xda\x5c\x62\xab\x7f\x9b\x48\x26\x47\x57\xd4\x7b\x55\x6d\xec\x7c\xd4\x63\xf1\x23\x02\x6c\xf2\x46\xe8\x13\x2c\x88\x83\x3b\x40\xae\xfa\x31\x25\xf9\x2a\x0e\x4d\xed\x2c\x55\x5d\xb8\xd4\x90\x16\x4f\x8a\xb4\xcc\xf9\xfd\x00\xfc\x7b\x3a\x3f\xb9\x56\x76\x83\xab\x11\x0e\x80\x38\xa8\x0e\x94\x00\xf2\x07\xa0\x29\xc5\x7f\xf2\x07\xde\xc8\xf9\x03\x9d\x5b\xca\xf6\x28\x42\x3b\xc9\x7b\x97\xf2\x1f\x34\x84\xcd\xbe\x7e\xfd\x34\xdc\x91\x41\x56\x28\x4f\x95\x95\x9a\xee\xce\xde\xe8\x99\x4c\x4e\xa1\x0c\x23\xfd\x2c\x57\x58\x23\xfe\xcc\x9b\x2f\x8c\x62\x37\x94\xac\xd9\xf8\x06\x06\xbf\xd4\xb5\x9b\xea\xf9\x8d\x28\x8f\xec\x7d\xa5\x14\x15\x76\xab\x39\x93\x59\x22\xe4\xfc\x01\xbe\xb7\xf4\x17\x27\x9d\x9b\xb8\x2b\x27\xce\x5a\xca\x5f\xc7\xae\xea\xcf\xd7\x8d\x9f\x6c\x9f\xff\xf1\x9e\xb4\x5d\x93\x2f\xeb\xd3\xbb\x33\xe9\x2d\x01\xd2\x87\xd6\xfe\x58\xdc\x3e\xca\xa9\xed\x95\x72\xcc\x11\xf2\x02\xf9\x67\x1e\x6d\xdd\xf6\xe6\xa1\x23\xec\x36\x17\xcd\x69\x89\x1d\x3e\x76\xfb\x9e\x49\x6f\x91\xf3\x07\xeb\xbf\x53\xc4\xc5\x30\xbd\x99\xa9\xdf\x5e\x71\xa4\x48\x8f\x9a\xfe\xd6\xf3\x49\x4b\x67\xd4\x5b\x1b\xbf\x61\x4e\xaa\xa2\x2b\xd2\xe6\x4c\x7a\xcb\x8f\xf4\xb3\x13\xd5\x8f\x56\x5c\xbc\x87\xea\x15\x75\x69\x73\xb8\xce\x3b\xa2\x95\x31\xfb\x0c\xb7\x33\x18\xfe\xcc\x5c\x91\x5b\x5f\x12\xd2\x72\x3c\x93\xde\x22\xe7\x0f\x66\x6c\xcd\x0a\x9e\x3c\x61\xd1\x57\x8f\xa0\xb1\x37\xfe\x44\xa2\x13\xd0\xe2\xfc\x69\x37\x69\x5d\xfe\xe2\x2d\xdb\x86\xd5\x3b\x44\x74\x67\xd2\x5b\x3d\xa4\x9f\x3d\x7a\x91\x1c\x84\xa6\x5f\xa1\xb9\xf5\xae\xee\x65\xfc\xef\xc5\xcb\x32\xf4\x85\x9b\x7b\x1a\xf6\x9c\xc1\xbf\x86\x9f\x30\xf2\xd3\x9f\xc1\x7f\xab\xfd\xff\x76\xa7\x9e\x9a\x3f\x20\x7e\x56\x60\x89\x49\xf4\xf9\xbd\x8a\xe8\x39\xe3\x9c\xcf\x7f\xd4\x64\xa5\x94\x7d\x12\xb2\xc9\x8b\x19\x04\x3d\x3e\x3a\x0a\x40\x87\xfc\x80\x38\x78\xa1\x6f\x3c\x50\x30\xad\xd5\x65\x9f\xdd\xb5\xdd\xf9\xb3\x1f\x97\x5e\x3c\x59\xe9\xf0\x71\x08\x0b\x15\x3d\xd2\xbe\x84\xe9\xa3\x78\x0b\xb4\x6f\x28\x88\x83\x17\xfa\xe7\x25\xbc\x86\x8a\xb6\x8f\xdf\x2f\x34\xfa\x86\xd0\xf7\x6b\x6b\x19\xce\x08\xea\x3f\x5c\xac\x3d\xb2\xe8\x5c\xe6\xf1\x57\x1d\x6e\x82\xe6\x69\x00\x1c\xbc\xd0\x73\xd7\x53\x9c\xfb\xe1\xd9\x2b\x2b\xf3\xfd\x09\x9b\x5c\xef\x21\x85\xd0\x78\xd9\xaf\x19\xc1\xe3\x4b\x98\xf4\xfd\xc1\x4d\xc7\x22\xf5\xd0\xcb\x0f\x80\x83\x17\x7a\x7e\x75\x1b\x54\xf1\xc3\xea\xae\xaa\x42\xc3\xad\x8d\xc1\x3a\xbb\xe3\x47\xf6\x6d\x5a\x94\xad\x77\x5e\x92\xd1\x97\x64\x0c\x5e\x2f\x41\x14\x7a\x10\x07\x3d\xec\x01\xf9\x03\x50\xd9\x3c\xcd\x81\xe0\x00\xa2\xd5\x93\xb4\x95\xa5\x4e\x7f\x92\x13\xfb\xa7\xa8\x6d\x22\x8a\x7b\xfc\x3e\xb3\x3f\x1d\x19\xe9\x07\xca\x85\x93\xf7\x84\x10\x7d\x07\x71\x70\x07\x54\x0f\x17\xdc\x08\xa9\xc8\x47\x36\x97\xd1\x2e\x76\x8f\x3e\x17\xf7\x6a\x91\x4f\x5c\x92\x8e\x14\x6e\xd2\x65\x52\x56\xbd\x6e\x0a\xbd\x4c\x83\x38\xb8\x03\xe8\x0e\x9f\xd5\xd2\xae\xdf\x59\xf7\xe8\xb7\x56\x51\x34\xf8\xd5\x97\x12\x6f\xb3\x93\x35\x2d\xa0\xc0\x13\xd2\x18\x35\x42\x95\x03\xed\x16\x03\xe2\xe0\x0e\x84\x3c\x58\x6c\xcc\xbb\x7a\xf9\xaa\x76\xd2\xe4\x56\xda\x55\xfc\xf9\x5d\x75\x4b\x63\xc5\xef\x4b\x84\xaf\x1e\x3f\x70\xbe\x28\x4d\xf5\x18\xd1\x2e\x88\x83\x3b\xd0\xf6\xb5\xef\xf9\x68\x71\x26\x6f\x32\x31\x2b\x66\x96\xd9\xee\xbe\xc3\x3a\x83\x4c\xb4\xb9\x50\x21\x57\xb0\x09\x3b\xae\xca\xa6\x24\xc2\x01\x10\x07\x3d\xec\x87\xff\xee\x00\xe8\x19\x76\x9a\x03\xdf\xb6\xf4\x57\xf9\x3e\x66\xd4\xae\x5c\xcd\xa1\x4f\x65\xb2\x5a\x94\x9e\xf8\xc2\x45\x1f\xb6\xaf\x30\xbc\x26\x7a\x19\x2d\x3c\x03\x0a\xf1\x82\x38\xa4\x17\xbf\xb8\x2b\x16\x28\x96\x23\xf9\x2e\x18\x71\x3a\x84\x9e\x19\xc2\x6f\x7e\x35\x3a\x79\x97\x87\x60\xbf\xb9\x28\x6d\xfa\x63\xbd\x86\x1a\x7a\xf1\x03\x70\x48\x75\x80\xc2\xd8\x61\x83\xe4\x89\x61\x99\x86\x40\x31\xcd\xea\xb2\x0a\x39\x59\x73\x0c\xb5\x92\xca\xd2\x4b\x45\xd9\xa3\x13\x17\x36\x68\x87\x23\x10\x07\x77\x40\xeb\x79\x09\xae\xc4\xda\xad\x8d\x2e\x87\x0f\x2b\x5c\xce\xcb\xfb\xa4\xa5\xbe\xd9\x26\x6f\x0b\xf7\x82\x1f\xdd\xac\x0f\x4b\xa6\xea\x46\xb4\x0b\xe2\xe0\x0e\xbc\xc2\xbc\xf5\xfb\x99\x90\x1b\xce\xb4\xe0\xce\x49\xb8\x62\x6f\xc2\xa3\x57\xbb\x44\xa5\xbe\x74\x76\xc2\xea\xfe\xe7\xf7\xd1\xae\x64\x22\x1c\x00\x71\x50\x1d\x00\xe4\x0f\x40\x03\x8a\xd3\x1c\x90\x45\x63\x96\x18\xd4\xbf\x21\x78\xe8\x2e\x4e\x51\xaf\xd1\x8e\xfb\x31\xd7\x33\x8c\xce\x03\xff\xc0\x22\x32\x95\xe0\xbb\x86\xd8\x04\x34\x38\x07\x70\x48\x5f\x83\x72\x8a\xd1\x3b\xee\x10\x77\x4c\xd9\xba\x1a\x3f\x2f\x8f\x48\x56\x2b\xbd\xb6\xd1\xdd\x43\xb8\x79\x9f\x3c\xd2\x65\x79\xf0\x55\x27\xf4\x35\x08\xc0\xc1\x1d\x90\x39\x27\x49\x7d\xb5\xbc\x61\x80\xe3\x41\xca\xf5\x85\x7a\xc5\xf9\x88\x61\xa3\x6d\x35\x03\xde\xde\x41\x92\x6c\xe7\xdc\x75\x2c\xe8\x25\x1d\xc4\xc1\x1d\x38\xd4\x34\x8e\x31\x89\x15\x21\xe9\xfb\xb9\x78\xed\xf0\x1a\xe7\x9d\xa3\xce\xae\x16\x1e\x76\x9c\xe0\x3d\x69\xd1\xf2\xe1\x27\x0f\x9e\x22\xda\x05\x71\x70\x07\x74\xac\xf6\xae\x18\xdc\x56\xcb\x2e\xda\x88\xf1\xa4\xa4\xf1\x72\x61\x44\xa7\x54\x5c\x35\x77\xc1\x6f\x74\x71\x48\xc7\x5e\xb1\xf0\x46\x38\x00\xe2\xa0\x3a\x40\xf0\xf7\x05\x55\xa0\xd1\xdd\x69\x0e\x44\xd8\xcc\x06\xc5\x25\x69\x70\x44\x5c\xc8\x8c\xe0\xa7\x78\xaa\xfe\x31\x4b\xb8\x6e\xd3\x8d\xfc\x80\x56\xe0\x8f\xb1\xc1\x7e\x18\x33\x94\x13\x00\x70\x70\x07\xc6\x5b\xaf\xb2\xd4\xf0\x0c\x0a\xb8\x2c\x39\x0a\x91\x58\x9d\x0b\xa0\x33\x94\x68\x8f\x93\x7e\x7f\xb1\x00\xa3\x2d\xa5\xaa\x88\xc0\x1f\xd1\x2e\x88\x83\x3b\xe0\xbd\xa6\x77\x71\xf4\x33\xf6\x05\xdb\x66\xf3\x3e\xae\xd0\x74\x3b\xbd\x10\x0d\x07\x06\xec\xbb\x7c\xb5\x03\x93\xd8\x6c\x51\x83\x50\x6e\x0a\xc4\xc1\x1d\x10\xb2\x18\xa4\x95\x88\x28\x37\x3a\x14\xc3\xec\x6c\x6b\x12\xfb\xd5\x30\xeb\x6c\xf0\xe8\x55\x77\x99\x0e\x9b\x65\xa8\xe1\x68\xbc\x11\xa2\x5d\x10\x07\x77\xc0\x18\xe3\xd3\xd1\x0d\x39\xad\x08\x35\x6e\x01\xce\x8c\x12\x13\x11\x93\xcb\xcb\x74\x6e\xaf\xe4\x8a\x56\x52\x9d\x78\x53\xdf\x6d\x3e\x46\x38\x00\xe2\xa0\x3a\x00\xc8\x1f\x80\x86\xda\xa7\x39\xa0\xfe\x58\x2c\xac\x45\x2d\xd1\x59\x59\xfe\xe0\x8b\x86\x82\xdc\xb5\x8a\xc6\xd7\x8f\x0d\x19\xa3\x1a\x7d\x3c\x79\x25\xad\x39\x8a\xa0\xb3\x2a\x40\x1c\xdc\x01\xd7\xd9\xa7\x83\xeb\xfc\x15\x36\x31\x27\xb3\xe6\xaf\xdc\x34\x0e\xab\xef\x19\xf2\x50\x73\x3a\xa3\x32\xaf\x29\x2e\x26\x11\x4a\x42\xf9\x03\x10\x07\x77\x60\x75\xde\xc5\xd5\x96\x5f\x36\x4a\x90\xbe\xaf\x1c\xe5\x77\x9b\xd3\xe6\xd3\x87\x84\x3f\xb0\x8b\x62\x88\x9b\x9e\x52\xac\x6f\xc5\x43\x5f\x9b\x41\x1c\xdc\x81\x22\x81\xd9\x4f\x49\xdf\xe3\x5d\x48\x2e\x26\xd5\xb6\x2d\x69\xc8\xdc\x94\x98\xb8\x93\xc8\xfc\x20\xba\x93\xd1\xd8\x67\xd0\x80\x1b\x3a\xc3\x1d\xc4\xc1\x1d\x38\x8c\x90\x4e\x17\x90\xfa\x22\x15\x42\x73\x53\xe2\xa2\xd8\x85\x37\x51\x8b\x2e\xc1\xa8\xe6\x68\x76\x0e\xfd\x47\xf2\x47\x23\x6f\x3f\x20\x1c\x00\x71\x50\x1d\xe0\xff\xbb\x03\xa0\xf7\x9e\x53\x17\xd7\x0e\x2e\xe3\x7c\x71\x62\x97\x16\xc4\xbd\x93\xe8\x9e\x30\x2d\x76\x61\x9c\x0f\xe3\xe4\xc5\x89\x72\x8c\xf7\x2d\xaa\x5c\xd2\x67\x54\xd0\xe2\x5a\x00\x07\x77\x00\xab\x48\x48\xe5\xcd\x53\xca\x59\xa7\x78\x7e\xe5\xcc\xc0\x10\xef\x9c\x4b\xbc\xc9\x3d\x8f\x53\xfc\xfa\x17\xf2\x82\x6b\x75\x8b\x49\xa0\x09\x5b\x00\x87\xb4\xb8\x96\x90\x60\xdd\xf7\x7e\x23\x26\x79\x6d\x40\x3f\xfd\x5b\x5a\x8d\x4b\x7e\x89\xcf\xbe\x8a\x5a\x5f\xa6\x6c\xa9\xf4\x67\x7b\x4f\x04\x9d\x81\x01\xe2\xe0\x0e\xe4\x1f\x94\x0a\xf7\xd2\xfd\x22\x62\x18\x6c\xdb\x37\xd2\xd4\x94\x27\xe5\xa5\xb6\x0c\xae\xb0\xf5\xe8\x16\xf0\xa9\xe1\xbf\x26\x36\x84\x68\x17\xc4\xc1\x1d\xe8\xe9\x51\x9c\x14\x6d\xef\xc9\x49\xcb\x2d\xb3\x7a\x9a\x5d\x37\x79\xe5\x89\x9c\x21\xe5\xa8\x3f\xe9\x53\x4e\x19\x8a\x56\xd9\x55\x11\x84\x03\x20\x0e\xaa\x03\x80\xfc\x01\xe8\x25\xf4\xd4\xf3\x0f\x9a\x43\xef\x4d\xc4\x64\xd7\x27\xe0\x5b\xdd\xda\x1b\xf8\x4c\x7c\x55\x4e\xf1\xfa\xef\xc8\x2c\x56\x5e\x1d\x35\x87\x2f\xec\x96\xc6\xd0\x62\x55\x00\x07\x77\xe0\x52\x8f\xaf\xdb\x5c\xae\x62\x67\x21\xfd\xa0\x3c\x71\x05\x56\x94\xc6\x8c\xce\x8f\x51\x2f\x06\xa5\x0f\x91\x9f\x19\xd2\x96\x37\x3e\x23\xda\x05\x71\x70\x07\x86\x92\x8e\xf0\x23\x18\x5b\x43\xcc\xc6\x08\x9d\x1f\x8c\xf1\x6c\x9a\x44\x44\x27\xea\x6f\xdf\xd6\x2c\x33\xb6\xc6\x9f\x8a\xd0\x26\x40\xb4\x0b\xe2\xe0\x0e\x74\x5b\x75\x3e\x4c\xaf\xa3\x1c\xa8\x20\x5d\x25\x8d\xa8\x50\x9a\x5a\xba\x57\x5c\xe3\x7f\xfb\xe6\x0c\x6e\x3e\x3d\x6d\xb2\x66\xd1\x1b\x44\xbb\x20\x0e\xee\x40\xc7\x6e\x71\x22\x87\x75\x99\x7c\x30\x96\x5a\x1d\xf9\xbd\x40\x09\xba\x90\x84\xf7\x6c\x62\x02\xdf\xee\x61\x35\xd1\x34\x0d\x94\x3c\x41\x38\x00\xe2\xa0\x3a\xa0\x07\xc8\x1f\x80\x16\x0b\xfe\x93\x3f\xf0\x46\xce\x1f\xf4\x53\x5c\xe2\x3f\x6c\xa0\xce\xd6\xc1\x4a\x95\x1f\xac\xa8\x3f\xce\x7a\xf5\xf8\x25\xdf\xed\xb0\x60\xd1\x43\x49\x14\xe1\x55\x19\xb3\x33\x99\x3a\x89\x43\xfa\xd9\x2b\x31\xb4\x77\xb9\x0d\xd5\xa9\x82\x1c\xd8\xd0\x9b\xe9\xff\x2c\x7a\xd6\x8d\x6f\xd5\x2d\x14\x0c\xb9\x0e\x5f\xbd\x3b\xf8\xa6\x04\xef\xcc\xa6\x4e\x40\xfd\x3b\xed\xf6\xb8\x12\x3a\x6c\xce\x61\x85\xb9\x10\xdb\x40\xff\xd0\x5a\xd1\x36\xbc\x9b\x97\x7c\xc9\xe6\xdd\x72\x47\xa4\xb7\xfc\x85\xf7\xe2\x98\xee\x08\x2d\x40\x1c\xfc\xf6\x20\xc2\xbb\x8f\x77\xe1\x17\x1e\xd6\xc8\x2f\x0a\x96\xfd\xf0\x91\x80\x56\xc9\x47\x5a\x3f\x08\x25\xc3\x14\xdb\x63\x94\x22\xe7\xfb\xa0\x78\x3d\x88\x83\xdf\x1e\x18\x4e\xdb\x21\x38\x04\xfb\x99\xe2\x2a\xef\x8d\x55\x05\xf1\xa7\xd7\xac\xbf\x57\xf4\x24\x1b\x86\xf1\x45\xaf\x77\xf6\x8c\xde\x87\x8e\x9e\x01\x71\x48\xaf\x4c\x94\x1b\x53\xee\xb5\x57\x0a\xf4\xbf\x2e\x0f\x3f\x97\x37\xc4\xf9\x9c\x70\x4d\x6c\x8a\x39\xce\x72\xfb\x75\xf5\x18\x1e\x4f\x11\x0a\xf4\xca\x04\xe0\xe0\xb7\x47\x52\x2a\xef\x66\xad\x70\xc7\xcf\x73\xca\x09\x79\x54\xb3\x1c\xac\x6c\xfe\xfb\x33\x58\x0f\x3c\x8c\x31\x1e\xea\x65\x5c\x4b\x8a\xbd\x8a\xb8\x3d\x40\x1c\x54\x22\x01\xf9\x03\x90\x6c\xa7\x0e\x95\xa8\x1f\x34\xa8\x56\x66\x85\x12\x4d\x7f\x4e\xa0\x42\xc1\x41\x1f\xa3\xe3\xde\x7f\x1a\x50\xc1\xc4\x41\x31\xdd\xf2\x84\x5f\x1f\x5a\xe3\x02\xe2\x90\xf6\xa8\x2a\x88\x7b\x84\x53\xf6\xf6\x3a\xfb\x0f\x31\xcb\xee\x41\x14\x73\x2c\x1a\x19\x74\x0b\xae\x0a\x13\xd2\x6b\x57\x9e\xe9\x8a\xf4\x43\xd3\x67\x20\x0e\xee\x40\xcf\x5d\x8b\x12\x46\x67\xf1\xd5\xe4\x51\x36\x93\x10\x16\x6f\x2c\xcf\xb7\xda\x59\xea\x6b\xd9\x0f\x24\x42\x2e\x2e\x7d\xa3\x69\xdc\x81\xb6\x03\x00\x70\x70\x07\x08\x06\x31\x4b\x4b\x33\x0d\xb1\x51\x17\x86\xc6\x7b\x9c\xeb\x98\x88\x78\xb2\xaf\xf0\x36\xc6\x11\x2e\x38\xf3\x06\xb1\x5e\xd0\x9c\x82\x72\x18\x00\x0e\x69\xed\x0c\x1d\x6a\x67\x55\xbf\xd0\x88\x83\x6b\x77\x10\x1b\xc6\xc1\x63\xe2\xb0\x2b\x3d\x07\xfb\x3c\x4c\x5f\x24\x69\xd8\x3e\x0d\x38\x42\x43\x25\x10\x07\x95\xc8\xb8\xbf\xe7\x0f\x40\x2b\xd1\x4f\xcf\x1f\x0c\x15\xa9\x06\x85\xd3\x7d\xf5\x2d\x78\x11\xc0\xe1\x26\x32\x11\xb1\xf6\x98\xde\xab\x70\x6e\x57\x8d\x30\xc9\xc5\xbb\xb8\x27\x5f\x0c\xb1\x96\x1f\xc4\x21\xe7\x0f\x26\x86\x1b\xfe\xcc\x6b\x16\xa9\xe8\x68\x32\xd4\x10\x8f\x86\x94\x57\x5e\xac\xb5\x96\xec\xa7\xc4\x2c\xfc\xde\x72\xf9\xd1\x39\x42\x63\x44\xcb\x20\x0e\x39\x7f\x60\x8a\xd9\xa7\x89\x56\xa8\x1c\xc1\x3d\xb4\xcc\x21\x26\x4b\x5f\x3a\xa3\xd1\xfa\x86\x5b\xbe\x44\xab\xf3\xbe\x21\x9b\x9c\x65\xa4\x24\xa2\x65\x10\xe7\x27\x45\x03\xbb\x1a\xba\xb6\x37\x82\xf5\x7c\x22\xc6\xe8\x39\xbf\x3a\x98\x4a\x39\x04\xb7\x72\xdf\xcc\x18\x2f\xb1\x9b\xf6\xda\xbe\x16\xf1\x6d\x85\xbb\x00\x91\x3f\x00\x71\x7e\x52\x28\x28\xff\xf9\xd7\xfe\x95\x3f\x68\x31\x8e\x56\xb4\xa0\xc2\x7d\xa5\xb0\xb7\x8a\xf2\x4d\x36\xb5\xa4\x60\x05\x3b\x8f\x7a\x89\xc5\x58\x2a\x28\x3b\xeb\x92\x68\x42\xdb\xbf\xf3\x07\x6c\xce\x2f\xee\x9a\x12\x7e\xc4\x7c\xfa\xac\x43\x73\xe2\x21\xc9\xc1\x90\xec\x50\x34\x86\xfa\x63\xde\x50\x2b\x19\x39\x9d\x18\x1f\xa3\x7f\x0f\x48\xce\x87\x78\x3e\x77\x09\xb3\xf5\xe9\xa0\xc1\x51\xe0\x7f\x6f\x6e\x84\x25\xec\xf3\x49\x73\x9c\x3e\xd2\x4e\x18\x3b\xd1\xb4\xfe\xf5\xff\xbd\xfc\x01\xa8\x73\xa7\xe4\x0f\xe6\x39\xec\x0c\x18\xaf\x64\xb9\xc7\xe6\x13\xde\x20\xa6\x15\xdb\x5b\x53\xe6\x7d\xc8\x86\xa6\xe7\xdc\xc4\xa9\x29\xd2\xd9\xd7\x21\xfc\x2f\xd4\x51\x8b\x66\x21\xa9\x30\x06\xfb\xa1\x2c\x25\xb3\x95\x2b\xdf\x51\xdc\x26\x0b\xee\xb9\xcb\xd7\x86\xd7\x39\x27\x27\x34\x04\x87\x9f\xfc\x0b\x65\x78\xd8\x46\xfe\xad\x37\x25\x78\xee\x17\x9a\x48\x80\x95\x0b\x2a\x76\xf5\x88\x4e\xd4\x75\xc6\xa1\xd6\x9c\x96\x57\x8e\x89\x15\x4f\xa0\xfc\x01\xe8\xe7\xff\xc9\x1f\x7c\x83\xe7\x0f\x7e\x16\xc7\xa9\x98\x19\x4c\xf3\xb9\xff\x89\x7a\xf7\xa8\x58\x3c\xa9\xec\x5c\xb4\x80\x85\x53\xdd\x85\x0e\xfa\xdd\xb4\x86\xf9\x5c\xfe\x33\x18\x79\x48\x8a\x21\xe5\x0f\x66\x6c\xb4\x2d\x96\x2a\x58\x63\x5e\x7a\x6d\xdd\x0c\xb9\x49\x79\x60\x5f\xbd\xd8\xb1\xcb\x97\x93\x7f\xfe\xde\xae\xc1\xc6\x45\xfe\xb3\xf8\x55\xa9\x7a\xe4\xfc\xc1\x46\xf5\x4f\xe5\x2c\x7c\x01\x2a\xa7\x66\xbc\xb5\x1d\xb1\x75\xad\x41\x36\xf2\xd6\xa2\x20\xd9\xa5\xfb\x69\x16\xd9\x29\x1a\x2b\x94\x67\xf1\xb3\x62\xc8\xf9\x03\xbc\x95\xbc\x7a\x2b\x13\xfb\x72\x2b\xcb\xa4\x5f\xc3\x25\x9f\x95\xa3\x6f\xf9\x47\x61\xf1\xc8\x29\x94\x3d\x6a\x9a\xe5\x90\xaf\x27\x3f\x93\xde\x22\xe7\x0f\x56\xdb\x5b\x75\x4d\xec\x4b\x74\x0b\xc7\x7f\x15\x78\x6d\xe8\x49\xf1\xaa\xba\x55\x75\xa7\xf9\x7e\x69\xee\xfb\xd8\x74\x20\x6b\xb0\x78\x26\xbd\x45\xce\x1f\xbc\xf8\x74\xc0\x8a\x4f\xa3\x3e\xd2\x64\x6a\x81\xc3\x19\xc8\xac\x1c\xa1\xe5\xac\xb3\xda\xbf\xdc\x18\x66\x60\xbf\x94\x15\xb5\x71\x26\xa7\xaf\xd7\x23\xe7\x0f\x7a\x44\x89\x22\x2a\x7c\xd0\x32\xae\xdf\x95\xc2\x34\xe1\x38\x51\xf1\xe5\xa0\xa0\x1e\x31\x67\x44\xf1\xa1\x6f\x96\x2b\xee\x25\xfd\x71\x26\xbd\x45\xce\x1f\x44\xa1\x71\x4d\x75\x24\xce\xb2\xdf\x36\x9b\xe3\xab\xac\xb5\x0a\x19\xe1\x88\x74\x20\x9b\xe3\x64\x98\x15\xf9\x15\x9e\x68\xdb\xb7\x7f\x66\x43\x68\xd0\x8d\x7a\xda\xf0\xa9\x80\x27\xe9\xe2\xbd\x13\xb5\x89\x57\xb5\xf7\xb1\x30\x2a\x77\x93\x95\xb8\x26\xa6\x25\x2e\xfb\x0c\x7e\xfc\x6a\xc0\x6b\x97\x9a\xcd\x8a\x18\x36\x80\x38\xf8\xf0\xa9\x8a\x25\x1d\x8b\x34\x3f\xfe\x32\x8e\x2c\xe7\x97\xef\x25\xe9\xec\xaf\x7f\x11\xbc\xaf\x29\x5a\xd4\x73\x6d\xe4\x7b\x71\x05\x5f\x56\x18\xd1\x2e\x88\x43\xda\xf9\x8a\x46\x3a\x0a\x47\x9c\x25\xb1\x20\xeb\x27\x5b\x8e\x85\xfa\x97\x1c\xed\x54\x52\x26\x1d\x4c\xba\xd6\x45\x85\xb7\x9f\x3b\x1e\x40\x4b\x24\x41\x1c\x7c\xf8\xb4\xf8\xec\xe3\xbb\xaf\x22\x03\x7d\x6d\x26\x0b\x24\x9b\x0d\xd1\xd3\xaf\x6f\x0e\x16\x92\xbd\x0a\xd5\x29\x18\x6e\xea\x5c\x8b\xef\xfe\x8d\x68\x17\xc4\xf9\x49\xa0\x78\xff\xbb\x5d\x95\xa8\xfc\xa8\xa7\xdb\xb4\x84\xaf\x73\x0a\xb2\x8a\x69\xa6\x3c\xed\xdc\x16\x42\x62\x55\xbc\xf8\x0f\x95\x28\x6b\xa2\xe5\x43\x75\x11\xf9\x03\x10\xf7\x9f\xff\xcd\xdb\x27\xe0\x3f\xd5\xf9\x6f\xf3\x4c\x80\xa2\x79\xea\x01\x62\xe8\xfe\x6e\x42\x26\xc1\x53\xfa\x6f\x62\x07\xdf\x7d\x92\x0d\x6f\x65\xb9\x61\x8f\x42\xe9\x9b\x13\x26\x16\x62\x5c\xf9\x6e\xb8\x0b\x0a\x5b\x03\x38\xb8\x01\x8f\x2d\xa5\x88\x0c\xe9\x71\xda\x0f\xe9\x48\x16\xba\x3a\x54\xec\x65\x1f\x7f\xfc\xf4\xea\x2d\x09\x16\x27\x85\x66\xd1\x0d\x52\x0b\x5b\x44\xbb\x20\x0e\x6e\xc0\x55\xad\x46\x54\x2f\xe2\xef\xae\xfe\xd4\x21\xe4\x4f\x14\xb4\xcf\x5f\xfb\x99\xd2\x2d\xf5\x86\xda\xf5\xbe\x13\x4d\xe9\xd4\x83\x12\x68\x51\x18\x88\x83\x1b\xf0\x53\x3b\x81\x6d\xa3\xe3\x21\xb3\xdc\xf4\xcb\xe1\x59\xfd\xa0\x83\x24\x4c\xed\xe7\x33\xb9\x3b\x66\x02\xb9\xbb\x0d\x2f\x24\xdd\xa0\x83\xd4\x40\x1c\xdc\x80\xf0\x8f\xef\xb2\x4b\x17\x6d\xbc\x17\xf8\x70\x6c\x87\x7e\xde\xd0\x57\x2a\xba\xb7\x7a\x3e\xda\xfe\xdc\xcd\xf6\x72\xe6\xcb\x8b\xa5\x3a\x88\xfc\x01\x88\xfb\xc7\x80\xff\x3e\x2a\xff\xa2\x00\xe8\x01\x76\x9a\x02\x73\xe7\x08\x56\x8a\x2b\xce\xf5\x0a\x9a\xf3\xd1\x93\x12\xab\x7c\xf4\xd7\x9b\xaf\xa6\xa7\x71\xdd\x91\xf4\x89\x6b\xe3\xc2\x6e\x1b\x41\x74\x1d\xc4\xc1\x15\x50\x59\xaf\x0d\xd7\xba\x7c\x5c\xed\xd7\xdf\xbc\xc6\xf4\x4b\x95\xe6\x65\xfe\xca\x8e\x0c\x0b\xf7\x17\x4c\xd7\x4a\xea\xcf\xdd\xeb\xd0\x11\xae\x20\x0e\xae\x80\xf3\x77\xad\x27\x0e\x7e\x83\x5f\x9e\x77\x56\xba\xef\xa8\xbc\x6a\xc3\x9c\xc3\x89\xdd\xe1\xc7\xa4\x28\x77\x7d\x82\xed\x99\xdf\x08\x4d\x61\x82\x38\xb8\x02\x97\x3c\x8a\x8b\xc6\x26\x82\x44\xb8\xbd\xe8\x9c\xa9\x2d\x23\x26\xa6\x77\xe4\x27\x43\xa7\x49\xbb\x93\x26\xab\x88\x15\x76\x73\xa0\xad\x9f\x40\x1c\x5c\x01\xf3\x13\x7e\xec\x64\x2d\xfe\x9b\x0d\x6c\x1c\xbe\x3f\x46\xd3\xe8\x82\xe3\xd2\x27\xf4\x3d\x53\x99\xbf\xf0\xa2\x92\xe0\xa3\x7f\x55\x42\xbc\x43\x81\xb8\x7f\x14\xf8\x9f\x71\xcb\x5f\x1c\x00\x8d\x26\x4e\x73\x60\x18\x63\xc3\xe0\x93\xaa\x88\xfc\xaf\x36\xee\x7c\xb4\xa1\x15\x8c\x46\x9e\x5d\xfd\xc6\xd4\xbe\x00\x57\x54\xfb\x0e\x7f\xaf\xf7\x31\x88\xbe\x83\x38\xb8\x03\x36\xf2\xfb\xc7\xf7\xbf\xa0\x48\xb8\x6c\xd5\x08\x61\x7f\xc4\xd7\xbe\x9a\x45\x6e\x36\x2b\x5d\xfc\xc1\x7d\x8a\xdd\x49\xad\xa9\x1c\x3a\xce\x1e\xc4\xc1\x1d\x90\x74\xe3\x6e\x50\xde\x2b\x08\x5b\xb8\x71\x11\xaf\x23\xfe\x16\xed\xc5\xa1\x6a\x79\xfb\x87\x5f\x7d\x8b\x82\xf0\x55\x7c\x12\x8e\x5a\xa1\x75\xd2\x00\x0e\x69\xdf\x73\x1b\x5d\x86\x73\xbf\x7d\x2a\xd5\xdf\x8d\x76\x79\xff\x94\x32\x49\x4c\xb8\x48\xfd\xba\x96\x94\x2b\xd3\x52\x8c\x7f\x43\x27\x9a\x0e\xca\x4b\x00\x38\xb8\x03\x95\xce\x99\x9e\xd6\x87\xf6\xd3\x9b\x04\xdc\x51\xe1\xaf\x94\xe3\x29\x70\x95\xbb\x16\x5c\x57\x47\xbf\x6b\x3b\xe6\x77\xf0\xa4\xb2\x21\x1c\x00\x71\x08\x07\xc4\x00\xf9\x03\xd0\xd0\xee\x34\x07\x12\x3f\x5f\x2f\x9a\x0c\x75\x79\x7d\x5f\xda\x20\x9e\xcf\x48\xba\xe2\xcf\xe2\xb9\xca\xfc\x00\xcc\xcd\xc5\x96\xb7\x26\xe1\x35\xb4\x50\x69\x05\x71\x48\x9f\x1c\xda\x92\x96\x99\x2a\x74\x6f\x6e\x2d\x09\x3e\xbb\xd0\x5d\x7b\xf0\x88\xf5\xf8\xae\x93\xd0\x2d\xcf\xb7\xeb\xe3\x5b\x7f\x6a\x09\x9c\xa1\x4f\x0e\x00\x0e\xee\x00\x6f\xe6\x95\x97\x2c\x07\x39\xd1\xe3\x53\x42\x19\x52\x24\xb2\xb3\x34\x24\x7c\xe1\x58\x77\x25\x3f\xd0\x7d\xb3\xae\x1a\x0e\x7e\x33\x89\x68\x17\xc4\xc1\x1d\x88\x5c\x1d\x9c\xa7\x4b\xdf\xbb\xb6\x62\x35\xf2\xe5\x90\x84\xdf\xe1\x50\x52\x9f\x51\xce\xe8\xe8\x9d\xb9\xd3\x9c\x4e\xe1\xf8\x28\xb4\xc5\x2a\x88\x83\x3b\x50\x5f\xdc\x77\x0d\x27\x10\xef\x91\x94\xc8\x84\x0f\x0b\x2f\x4a\xc2\xf0\xc5\xb4\xe7\xba\x29\xb5\x6e\xbb\xd5\xbb\x6b\x3e\x4b\xb3\x75\x08\x07\x40\x1c\x54\x07\x00\xf9\x03\xd0\x38\xfb\x34\x07\x0c\x8b\xb3\xdb\x78\x1f\xb8\x3b\x24\x7b\x3e\x74\x7b\x72\x43\x34\x46\xaa\x90\x19\x3f\x60\x5c\xf9\xbc\x90\xf6\xfa\x71\x22\x86\xff\x6b\x44\xdf\x41\x1c\xdc\x01\x4e\x4c\xcf\xa3\x77\x22\xa4\x4c\x58\xbd\x4a\xf7\x18\xfc\xb9\x13\x98\x45\x89\x9d\xdc\xa6\xbc\xb6\x9c\x0b\x62\x83\x28\xcd\x2c\x56\xa0\x35\xed\x00\x0e\xee\xc0\xa8\x63\xe7\x0f\x7a\xb9\xde\xdf\x64\xa3\x98\xd7\x02\x2a\x4a\xc2\x05\x71\x9a\x48\x34\x83\xf8\xe5\x2c\x5e\xa5\xff\x0c\xfa\x39\x5e\x08\x7d\x26\x03\x70\x70\x07\xaa\x86\xe5\x26\x6c\xa7\x0d\x52\x28\x2f\x72\xed\xce\xbc\xf2\x79\x13\x6f\x20\x24\x1c\xfe\x36\x5a\xd0\x74\xc1\xae\xa7\x61\xd0\x18\x8a\x39\x82\x38\xb8\x03\x71\x79\xb7\xb3\xfa\x6a\xe9\x9f\xa5\xbc\x23\x59\x4d\x13\x5b\x70\x16\x34\x15\xc6\xc5\x2c\x17\x10\xb7\xfe\x33\x2c\x2a\x60\x9c\x0c\x9d\x29\x0b\xe2\xa0\x3a\x00\xc8\x1f\x80\x5e\x7a\x4e\x73\x60\xf7\xbd\xad\x00\x63\x30\x83\xe8\xd5\x91\x2b\x58\xce\xd9\xbe\x6f\xae\x29\x56\x3b\x1d\xbf\xd5\xbc\x64\xfa\xde\x8c\xaf\xc7\xa6\x74\x14\xd1\x77\x10\x07\x77\xe0\x27\xea\x79\xfa\x0d\x47\x55\xaa\xe2\x59\x9c\xe4\x38\x5d\xf3\xfb\x74\x04\x0c\x96\xce\x2c\x6d\xa3\xbf\x1d\x62\x99\xb5\xc9\xf4\xca\xa0\x21\x16\x80\x83\x3b\x90\x2d\xd6\x41\x71\x2b\xbf\x63\x93\x7c\x53\xb3\x5b\x07\x1b\xb3\x0f\x5f\x85\xe6\x76\xef\x8d\xed\x14\x6f\x5e\x72\x3c\x45\x67\xcc\x60\x68\x09\x25\x80\x83\x3b\x40\xa9\xa6\x12\x70\x57\x31\x2b\x20\xb3\x37\xd6\x00\x2b\xf2\xb1\x9d\xd2\xe0\xa5\x83\xe1\xdb\xd7\x3e\x95\xd9\xbd\x21\x2d\x27\x38\x84\x8e\xda\x02\x71\x70\x07\xd4\xe6\x9e\x8d\x11\x19\x5e\xb3\x19\xa9\x88\x2d\xad\x77\xbf\xc7\xf2\x81\xa9\xcc\xc8\xcd\xb3\x0d\x65\x4b\xe7\xe7\x1b\xe7\x15\x96\x34\x84\x03\x20\x0e\xaa\x03\x80\xfc\x01\xe8\x0d\xf4\x34\x07\x4c\x71\x39\xfa\x6b\xf5\x88\x6d\xc7\x7a\x68\xa9\x07\x3f\x26\x74\x56\xb3\xdd\x96\xae\x23\xed\xea\x1b\xa0\x4d\xfe\x46\x19\xa5\x0a\x2d\x17\x01\x71\x48\x0e\x3c\xb9\x80\x52\xa4\x42\x83\x3d\xf2\x62\xbf\xd4\x4b\x75\x02\xf3\xfe\xc4\xfa\x48\x02\xf5\x3a\xd1\x8b\x35\xbd\x93\x3a\x85\x00\x28\x83\x02\xe2\xe0\x0e\xf0\x5d\x99\x78\x44\x73\x21\x15\xe3\x55\x9f\x25\xd5\x7c\x3e\x67\xfa\xaf\x98\xef\xe6\xce\xe6\xcf\xfe\x88\xbd\x79\x3f\x26\xa2\xf2\x01\x5a\x46\x0b\xe2\xe0\x0e\xdc\xca\x6b\x3e\x90\x91\xa2\x7d\x6f\x14\xaf\xa4\x79\x69\x2e\x91\x65\x6a\xf0\xfb\xbb\x92\x8a\x8f\xb6\xc3\xd2\x3d\xb2\x9e\x0f\x0d\xe3\x11\xed\x82\x38\xb8\x03\x28\x4a\x96\xb3\xdd\xbc\xe9\x3f\x96\xb3\xec\x46\x4b\xee\xc8\xbf\x99\x6d\x5a\x40\x77\x29\x1c\xe9\x0f\xe4\xbb\x7c\xc4\x95\xf5\x30\x08\xe1\x00\x88\x83\xea\x00\x28\x7f\x00\x9a\x52\xfc\x27\x7f\x50\x8f\x9c\x3f\x38\x2f\xe4\x85\x97\xb1\x14\x1b\x10\xec\x66\x13\x4a\x79\x43\xa0\x33\xa7\xf0\xcb\xe4\x83\xeb\xc5\x28\x18\x5c\x9a\x07\xf7\xf4\x83\x6c\xcf\x64\xde\x04\x39\x7f\x40\x52\xf5\xcb\x47\x8a\xb2\xdf\x4e\xd4\xc9\xee\xdc\x3e\xd9\x3d\x5a\x4c\xca\x04\x19\x65\x14\xd1\x26\xb6\x73\x98\x6c\xab\x85\x2b\xd9\x67\x32\x4b\x84\x9c\x3f\x60\x64\x13\x36\x21\x9d\x58\x17\x9b\xe9\x16\x15\xf1\xb5\xd4\x44\x5f\xab\xb2\x38\x77\x44\x4f\xc2\xde\x2c\x12\x1f\xae\xfa\xb6\x3a\xfa\x4c\x7a\x8b\x9c\x3f\x40\x2f\x2f\x30\x9d\x38\x42\x43\x23\xa3\x6d\xea\x9c\x79\x7e\x49\x16\xed\xee\xcb\x37\x1d\x02\x1b\x86\x7a\xe1\xa5\x55\xeb\x2d\xc5\x2b\x67\xd2\x5b\xe4\xfc\xc1\x87\xaf\x7a\x9f\xa6\xbe\xdd\x0a\x23\x8a\x29\x63\xe2\x37\x92\xd0\xc0\x67\xf2\x7e\x7e\xb7\x19\x73\xdb\xb1\x2b\x6a\x6e\x5d\x0c\xa3\xeb\x4c\x7a\x8b\x9c\x3f\xb8\x2d\xc5\xfe\xe0\xdb\xb8\x6a\x8b\xb2\x6c\xd3\x44\x71\xd4\xad\xf5\x6b\x6c\x79\xda\xbe\xb8\x6e\x57\x0f\x56\xe6\x72\xbb\xdf\x76\x87\x9c\x49\x6f\x91\xf3\x07\x7d\x47\x9e\xba\x75\x36\xba\x6c\x8f\x3d\xf2\x5b\x4a\xa8\xf8\x50\x62\x96\x3d\x28\x5e\xa7\x5f\x75\x6c\x5d\x5f\x6c\xa1\xce\xe8\x2e\x3a\x93\xde\x22\xe7\x0f\xd4\xa5\xa8\x1e\x2f\x31\x32\x17\x0d\x0c\x2d\x75\xa7\x6a\xbc\x26\xd6\xa1\x52\x30\x88\x88\x17\x7b\xfc\x05\x45\xd9\x5a\x2a\x66\x31\xf0\xcc\x66\x00\x41\x77\xea\x69\x85\x1e\x1f\x6f\x0d\x9b\xcc\xd0\x63\xab\x81\x21\xd7\xff\x92\xe5\x2e\x05\x67\x3e\x31\x2b\xb7\x95\x32\x0d\x73\xfe\xb0\x22\x0a\xf6\x3e\xb4\xc6\x0a\xc4\xc1\x0b\xfd\x41\x73\x9d\x1f\x67\xc6\xcb\x2c\xbc\xeb\x85\xa3\x9f\x44\xd8\x77\xd6\xe6\x96\xef\x65\xec\xec\x6a\xdb\x0a\x37\x48\x93\x29\xb8\x41\x07\x5e\x81\x38\x78\xa1\x2f\x62\xf7\xb0\x31\x74\x46\x77\xf9\xd8\xa7\x9b\x3e\x11\x39\xf3\xa3\xc7\x5f\xc7\x61\xfe\xa6\xb2\xc7\x87\xe0\xac\x1a\x11\x23\x63\x68\x3f\x52\x10\x07\x2f\xf4\x17\x45\xb5\x7e\x32\xd9\xd0\xc9\xb3\xcd\x6c\x59\x5c\xe6\x4f\x7e\xae\x3e\x74\x33\x4d\x83\xe7\x89\x78\xb9\xe0\x96\xaf\x7b\x42\xe5\x4b\x44\xbb\x20\x0e\x5e\xe8\xdf\x76\x84\xbf\x8c\x2d\xe6\x65\xba\xf9\x7c\xf4\xca\x01\x45\x80\xcb\xc4\xeb\x0d\x22\x36\x1f\xef\x96\x9b\xe5\x6d\x5f\x2a\xda\x31\x9c\x11\x85\x1e\xc4\x41\x0f\x7b\x40\xfe\x00\x54\x36\x4f\x73\x60\x7c\x6d\x8a\xbd\x4b\xf9\x8e\x65\x97\xdf\x9d\xfd\x4a\x34\x83\xc8\x29\x25\x86\xc9\x6f\x54\xfb\x5f\x46\x1d\x86\x34\xfc\x30\xc8\xbc\xa1\xb5\xa1\x00\x0e\xee\x80\xce\xe4\xa7\xc1\xe3\xce\x6a\xc2\xa4\xfa\x7c\xe3\xef\x33\x9b\x8c\x7f\x5e\xbb\x34\x24\xe1\x65\x8a\x71\xbb\x1f\x3e\xb2\x4e\x7f\x1c\x8b\x68\x17\xc4\x21\x9d\x82\xcb\xd3\x6a\xc9\xea\xb6\xee\x1a\x15\xa7\x71\x73\x42\xd0\xda\x31\xec\xb9\xc8\xd8\x5b\x2e\x11\x45\x31\xa3\x3a\x35\x8d\x2b\xcf\xa0\xd9\x65\x10\x07\x77\x20\xac\xcf\x9b\x97\xb6\x8b\x9c\x25\xcf\xe9\x8a\x66\xe0\x02\x2d\xed\xc3\xc3\x3e\x92\x3c\xeb\x5e\x7d\x91\x1c\x71\x6b\xd5\xba\x07\x49\x88\x76\x41\x1c\xdc\x01\xd5\x5a\xab\x89\xf7\x46\xb1\xbb\xa2\x98\x3a\xf2\x73\x6d\xe9\xa4\x97\xef\xc7\xe9\x1b\x30\x54\x5a\x61\xf2\x5f\x5e\x8c\x5b\x23\xf4\x44\x38\x00\xe2\xa0\x87\x3d\x20\x7f\x00\x7a\x86\x9d\xe6\x00\x0f\xe7\xe1\x35\xd2\x8c\x4c\xfc\x0c\x7e\xf5\x4f\xd4\xc7\x49\x9e\xb4\x0c\xa9\xfb\x36\x8e\xfd\x1b\x3b\x93\x6a\xe3\x0b\x53\xd1\x25\x88\xbe\x83\x38\xb8\x03\xaf\x64\x12\x70\xa3\x7c\xc5\x2d\x3c\xda\x8f\xa3\x3e\xfa\x68\xc8\xf8\x29\x97\x46\x39\xfe\x38\x5c\xfe\x51\x47\x88\x61\xc0\xcd\x12\x88\x68\x17\xc4\xc1\x1d\x50\x9d\x97\x64\x70\x7e\xd1\x1b\xbd\xce\x9a\xcb\xb5\xf2\x1c\x6b\x70\x4d\xa6\x88\x68\x6f\xe4\xc7\x48\xc7\x1f\xd5\xa6\x95\x50\x23\x68\x0f\x5d\x10\x07\x77\x60\x7d\x21\x98\x7e\xee\x91\x9d\x63\xaa\x50\xa9\x42\xae\xab\x1d\x11\xd3\x3e\x47\x88\xaa\xdb\x1f\x41\xfa\x75\xef\xd2\x3b\x69\x33\xd0\xfe\xcc\x20\x0e\xee\x80\x01\xdd\x15\x03\x4e\xfd\xa9\x99\xfd\xd5\x24\x2f\x2f\xcd\x6b\x27\xd9\x94\xd8\x41\x35\xbf\xa4\x8e\xb3\xd4\x9e\x5d\xa7\x8b\xc5\x8b\x41\x38\x00\xe2\xa0\x3a\x00\xc8\x1f\x80\x06\x14\xa7\x39\x80\x53\xcc\x69\xe9\xc0\xd6\x66\xed\xd3\x28\x7f\xad\xed\x6e\xeb\x67\xa3\x3e\x5c\xab\xfd\xfb\xaf\xd5\xc9\xa9\x45\x5d\x71\x33\xdd\xa1\xf3\x0f\x40\x1c\xd2\xe1\x87\x1d\x3c\x33\xcb\x1c\xe1\xb3\xbd\x23\x1b\xf6\x2b\x26\xae\xb6\x01\xbb\xfc\xe5\xf9\xd9\xf1\xb4\xa3\x37\xf1\x5b\x3f\x2b\x76\x41\x7b\x53\x83\x38\xa4\x83\xef\x68\x67\x75\xe6\xbd\x2b\xf9\x94\x53\x8d\xd1\xc8\x66\x66\x5c\xc5\x1d\x5f\xb8\xa0\xcb\xea\x90\x9d\xff\x32\xc4\xba\x66\xd8\x9f\x88\x68\x17\xc4\xc1\x1d\x30\x47\xa7\x29\xc7\xac\x4c\x7f\x44\xa5\x17\xb1\x24\xf4\x94\x54\xce\x32\x0b\xb5\x5d\x22\x7e\xa3\xcf\x6d\xf8\xa2\xf3\xc5\xc2\x8b\x01\x88\x76\x41\x1c\xdc\x01\x99\x1e\x7d\x8e\xcf\xe7\x0a\x8f\x92\xa4\x86\x6b\x6e\x47\x2f\xda\xd2\xa5\x8f\x3e\xb3\x7b\xb2\x4d\x36\x4f\x32\xce\xd9\xfc\x34\x6e\x1c\xe1\x00\x88\x83\xea\x00\x20\x7f\x00\x1a\xdd\x9d\xe6\x80\x15\x2d\xda\x8e\x4b\xb8\xca\xbb\xe7\x84\xb4\xce\x3f\x9e\xce\xe7\x13\xb5\xc7\xbe\x18\x37\xcf\x7f\x11\x23\xb3\xfd\x0a\x73\x6a\x17\xfa\x0e\x02\xe2\x90\xbe\x07\xad\x7c\xd6\xbb\x71\xa8\x64\xfe\x2b\x94\xa3\xfe\x73\xf2\x8b\xf0\x9d\x61\xd5\xc0\xaa\x8b\x5f\x5f\x49\x1f\xd1\xca\xe8\x99\x5f\x98\x85\xbe\x07\x01\x38\xb8\x03\x25\xfd\xf6\x26\x1c\xad\x9e\x8a\x76\xb4\x2f\x39\x9d\xec\x6c\xd8\x47\x55\xf8\xbe\xb1\x4a\x8b\xdf\xdb\x0c\x5c\x34\xeb\x6a\x1a\x83\xfe\x2b\x10\x07\x77\x40\x1d\xed\x1d\xef\xad\x2a\xab\xb8\x9f\x18\x75\xba\xf9\xed\xfa\x9e\x1c\x03\x42\x73\x1a\x42\xfb\xd7\x74\x0c\xe5\x3f\x98\xcd\x11\x25\x43\x0b\xcb\x00\x1c\xdc\x81\xfd\xef\x2d\x79\xc9\xb7\x7d\x3d\xed\xf9\x5f\xba\x92\x86\x8e\x78\x2b\xbd\x98\x5a\xd3\xcb\x1f\xbc\xdb\xe0\x1d\x46\x12\x91\x52\x01\x1d\x80\x09\xe2\xa0\x3a\x00\xc8\x1f\x80\x86\xda\xa7\x39\x70\x94\xa4\xa5\x1f\xcb\x3d\x4c\x14\xf6\x23\x16\xc5\x48\x43\xfb\x70\xcd\xfd\xf5\x80\x56\x28\x37\x9f\xcb\xf9\x5b\x1a\x46\x9e\x56\xd0\x44\x30\x88\x43\x3a\x08\x77\x5b\xcd\xff\x40\x7c\x59\xcc\x38\x28\xde\xc0\x82\xfa\x0a\x0d\xef\x1b\x31\xbc\xfa\xe8\xf7\x22\x94\xf7\x27\x63\xba\x8e\xf2\xa1\xc3\x04\x41\x1c\xdc\x01\x85\xfd\xef\x4e\x27\x28\x94\x17\xdf\xc9\x98\xb8\x48\x59\x1d\xad\x50\x64\xfb\x5b\x25\xd7\xb5\x1c\x3d\x96\x90\x8c\xcc\xa5\x58\x83\x3e\xdc\x80\x38\xb8\x03\x9c\xd7\x99\xd6\x62\x2f\x37\xcb\x5e\x6c\x18\x7a\x1f\xeb\xd8\xbe\xb9\x95\x73\x25\xb0\x3d\xb9\x9a\xbd\xef\xad\x3f\x65\x5f\xeb\x85\x6b\xd0\xa4\x25\x80\x83\x3b\xf0\x9a\x66\x5c\x09\xe5\x96\xdd\xf0\xa5\xae\xc3\xcf\x46\xfd\x82\x6a\x3f\xa7\x4a\x42\xd1\x93\x9d\x24\x7f\xb1\xa3\x66\x47\x0f\x5f\x34\x87\x0e\xc2\x05\x70\x50\x1d\x00\xe4\x0f\x40\xef\x3d\xa7\x39\xd0\x1e\x10\xf7\x4d\x64\xaa\x36\xff\x24\xd1\xef\x62\xea\x93\xea\x47\x1b\x41\x9e\x1b\xf7\x88\xb2\xc7\x62\x4e\xb0\x08\x3d\xdd\xbd\x04\xa1\x4d\x3d\x00\x1c\xdc\x81\x97\x61\xbf\xcf\x8f\x24\x2d\x3d\xc5\x3c\x69\x77\xe1\x5a\xcc\x4e\x41\xe9\x13\x2e\x35\x54\xf5\x3c\x16\x5d\x63\x7c\xe0\xf1\x68\x35\x1d\xd1\x2e\x88\x83\x3b\x30\xf6\xe8\x45\xa5\x8c\x4a\x7d\xa0\x50\x1a\x0e\x0e\x8a\x8f\xfb\xf7\xe2\xa0\x40\x92\xa9\xc2\xfc\x56\x7b\x26\x09\xcc\xb1\xa6\x60\x28\x33\x06\xe2\xe0\x0e\x98\xb8\xc5\x55\xa0\xda\xcf\x8b\x15\xd4\x79\xa7\xb2\x84\x74\xa2\x77\x5d\x19\xd3\x1f\xb4\x7e\xf1\x6c\x6d\x83\xea\x68\xde\x5a\x54\x19\xd1\x2e\x88\x83\x3b\x80\x7e\x30\x95\xba\x3c\xa2\x6b\x66\xb3\xea\x74\xe7\x5b\x79\xd5\x75\xb3\x2a\x27\xbd\x5c\x0a\x39\x3e\xda\xff\x1f\x73\x7f\x19\x95\xd5\xf3\xef\xff\xe3\x08\x48\x37\x8a\x82\x4a\x23\x12\x0a\x22\x8d\x74\x87\x94\x84\x80\xb4\x48\x77\x77\x0b\x92\x22\x21\x25\x0d\x92\x22\x4a\xb7\x22\x2d\x20\x20\xdd\x88\xa0\xa4\x34\x48\xf8\x5f\xe7\x9c\xcf\xb5\xff\xef\xb3\x2f\xd6\x7b\xbe\xbf\xb5\xb8\x71\xee\x3f\xd6\xec\x6b\xe0\xb1\x5f\x7b\xf6\xec\x79\xce\x18\x89\x96\xc4\xd3\x37\xbd\x44\x38\x00\xe2\xa0\x3a\x00\xc8\x1f\x80\x5e\x42\xcf\x72\x00\x83\x43\xf1\xe4\x04\x65\xd6\x6a\x75\x4f\x9d\x9a\xb6\xf9\x0d\x36\x6a\x43\x02\xf3\x5c\x13\x5b\x78\xe2\x2b\xec\x98\x24\xa1\x13\xe8\x7e\x05\x71\x70\x07\x9e\x7b\xdc\x9d\x12\xa0\x45\xb9\x64\x53\x75\xcb\x8b\xa5\xb9\xa3\x38\x32\x98\x14\x73\x69\xd3\xf9\xb2\x29\x6d\x15\xbe\x41\xa7\x56\x18\x94\x77\x06\x70\x70\x07\xd4\xa7\x65\x92\x26\x0c\xbf\x36\xfe\x3d\xfe\x7d\xad\x4c\xdf\xa4\x01\xc3\xdb\xda\x65\x49\xc7\xc6\xb1\x5b\x4e\x0d\x83\x84\xd4\x8f\x14\xd1\x2e\x88\x83\x3b\x80\x31\x49\xca\xb7\xeb\xb4\x3a\xff\x80\x6e\xf0\x32\x97\x93\xe9\x07\x0b\x1c\xf7\xd2\x81\x08\x5a\x46\xef\x88\xbb\x17\x04\x26\xc9\xa1\xac\x2b\x88\x83\x3b\x30\xf8\xc6\xf3\xe4\xfb\xa9\xb6\x04\xc7\x9b\xc5\x26\xe6\xa2\xa5\xc6\xc6\x1c\xa6\xa4\x76\x37\x23\xe2\x9f\x34\x8a\x53\x03\x0d\x09\x58\x08\x07\x40\x1c\x54\x07\x40\xf9\x03\xd0\x62\xc1\xff\xe4\x0f\x9a\x91\xf3\x07\xf9\xbf\xca\x78\xbc\x7e\xfd\x28\xf4\x1d\xb9\x5e\xb5\x94\xa3\x69\x1a\x9a\xb7\x53\xc3\x98\xb0\x47\x23\x17\xaa\x37\xa7\x8b\xe1\x63\x76\x2e\x53\x27\xc8\xf9\x83\x23\xc6\x6b\xca\xdd\x41\x24\x4f\xd5\x85\x94\x7a\xf6\x5c\x6f\xbd\x8b\x38\xac\x9a\x95\xc2\x14\xc5\x1d\xff\x28\x4c\xaf\x19\x30\x72\xef\xdc\xa6\x4e\x40\xfd\x3b\xeb\xf6\x08\x4f\x58\x2e\xfe\xe5\xf5\x79\xb5\xeb\xde\xb0\x06\xa9\x1f\xce\xdf\x70\xd6\xe9\xfe\x7d\x9a\x24\xb5\x23\xcc\x44\x34\xe3\x7c\x5d\x68\x2e\x1b\xc4\xc1\x6f\x0f\x47\xdf\x1d\xfa\xee\x44\x89\xc9\x9f\x84\xb8\xef\xef\xc9\xce\x7a\xf6\x37\x3c\x68\xb8\xa3\x2b\x25\x6c\xf7\x92\x41\x7f\x0c\xcf\x06\xfa\x66\x0e\xe2\xe0\xb7\x07\xe1\x5a\x1c\xa3\x5e\x97\x46\x15\x05\x55\x87\x0b\xf9\xb7\xc4\x90\xce\x71\xca\x38\x9c\x93\xfc\xcd\x10\xe1\x80\xf1\x9b\x2a\x79\xf2\xd0\x54\x0f\x80\x83\xdf\x1e\x8a\xe6\xd5\x2f\x68\x19\x19\x0f\x8f\xf5\xc7\x2d\x5e\x33\x88\xc5\xc6\x46\x62\x72\x79\x5e\x9f\x6a\x74\x9a\xa2\xb1\x4d\xf6\x95\x1e\x80\x62\x4a\x00\x0e\x7e\x7b\xf4\x6b\x5f\x13\x90\xff\x10\xf4\xe3\xb2\x8b\xaa\x7b\x85\x5f\xa7\x97\xa7\x8b\x83\x27\xcb\xe2\x4b\x13\x33\xb2\xdd\xbf\xeb\xd5\x04\xd0\x91\x71\x20\x0e\x2a\x91\x80\xfc\x01\x48\xb6\xb3\x1c\xf8\xde\x96\x6d\x44\xf3\x4a\x6d\xce\x22\x6c\x40\xee\x62\x8e\xe1\xf8\xcd\x76\xca\xcf\xaa\x15\xca\x3d\x6c\x57\xef\xfc\xbe\xa7\x4e\x00\x4d\x19\x80\x38\xa4\x12\x89\xeb\xcc\x98\xb3\x1d\xdc\x1a\xff\x76\xf4\xc5\x2e\xaf\xe1\xdf\x9b\x6e\x5d\x1f\xb4\x47\xaf\x44\x85\x49\xc7\x7f\x78\x95\x11\xc8\x0d\x95\x48\x00\x07\x77\x60\xec\x49\xc8\x22\x4f\x91\x6d\x53\x04\xb6\xc4\x57\xd7\xb2\x17\xcb\x92\x4e\x87\x94\xf5\xa4\x2f\x22\x3f\x86\x71\x8b\x58\x36\xfc\xd6\x85\xd6\x79\x00\x38\xb8\x03\x59\x26\x85\x07\x6f\x7c\xd0\x5b\x0d\xd4\xb4\x09\xdd\xd8\x5d\x8b\xfd\xaf\x5e\x91\x2a\xaa\x0a\x2a\x3f\x4c\xe3\x94\xc2\x64\x9e\x81\xf6\xee\x04\x71\x70\x07\x2c\x67\xa9\x6d\x95\x75\x6c\x48\xb3\x49\x58\xfb\xc9\x7d\xdb\xf8\xd6\x09\xa9\x28\xd7\xba\x02\x14\x9b\x14\x63\x69\xa7\xbd\x36\xbb\x10\x0e\x80\x38\xa8\x44\x02\xf2\x07\xa0\x95\xe8\x67\xe7\x0f\x5a\xe4\x71\xb3\xde\x32\xbe\xa4\xc1\x17\x97\x2d\xf6\xbd\xd7\x5a\xf7\x0a\x2f\xc1\xe5\x59\x61\xde\xde\x74\xd9\xda\xef\x1c\x69\xdb\x3d\xc4\x5a\x7e\x10\x87\x9c\x3f\x48\x28\xfc\xd6\xa4\xf1\xc2\xc7\x5a\x6f\x1a\x77\xe9\x59\x64\x64\x52\xae\x68\xda\x0d\x74\x94\xb6\x1b\xfb\xcc\x0a\x68\xcf\x09\x09\x86\x10\x2d\x83\x38\xe4\xfc\xc1\xe5\x65\xf1\xbf\x35\x4d\x49\x03\x69\xdc\xb9\xc2\x75\xb3\xbb\x39\x65\x0e\x9a\xdb\x3d\x95\xb7\x0c\x32\x07\xbe\x47\x5f\x33\xbe\x2a\x8f\x68\x19\xc4\x05\x4a\xf8\xc1\xfe\x1a\x87\xbe\x4c\xca\xbd\x93\xed\x34\xe9\x8c\x1c\x1f\x3e\xfb\x4b\xa3\x3f\xb2\x64\xb8\x2b\xfb\xfa\x7a\x33\x77\xd0\xb5\x5f\x39\x7e\x0e\xe8\x88\xfc\x01\x88\x0b\x94\x40\x41\x41\xfd\xdf\xf9\x03\x25\x17\x1a\x21\xf1\xb9\x47\x04\x79\x49\xed\xee\xa7\xe6\x8e\x97\x17\x6a\xfa\x64\xec\x31\x4c\x0c\x97\xdf\x5e\x6e\xd8\x13\xd4\xe6\xfd\xe7\x97\x83\xd9\xe4\x5d\x3e\x3a\xd2\x4e\xe7\x87\x24\xcd\xcd\x57\xd9\xdc\x7c\x68\x96\x5f\x93\xc8\xbe\x77\x24\x2b\xc2\xec\x7c\xf3\xdd\x27\x63\xef\x1f\xa8\xc2\x73\x7e\x46\x5f\xf3\x19\x6b\xdb\x78\x5a\xb2\xe8\x2b\x7a\x4d\x44\x99\x1d\x5e\x84\x03\x06\x26\x53\x75\xb5\x37\x02\x9d\x99\x98\xfe\xef\xe5\x0f\x40\x9d\x3b\x23\x7f\x50\x9e\xfd\xf6\x6d\xc8\xb6\x26\x51\x31\x75\x70\x2d\x4b\x84\xd1\xf5\x07\xcc\x81\xa7\x94\xf1\xd5\x0f\x7a\xff\xac\xdd\xf0\x5a\x75\xa4\xfe\x07\xca\xd6\x1f\xd0\xa8\xe1\x24\xe2\x5e\x60\x12\xf9\x66\x2f\x7a\x2a\x9d\xfb\xd3\x88\xd1\x75\xaa\xfc\x71\xdd\x52\x8c\x62\x9f\xfc\x53\xa9\x7f\xa0\xf7\x96\x2a\x76\xfb\xd8\xd2\xae\xa2\x95\xf2\xdb\xc6\xa1\x5d\x6b\x6f\x1b\x60\x24\x3b\xba\x1a\x95\x7b\x9f\xd3\xe6\xb2\xaf\x50\x4b\xa0\xdf\x1c\xe6\xff\xdb\xe5\xff\xe7\x03\xa4\x38\x8a\x18\x7c\x0c\x80\xb7\x27\xcb\xfa\x62\x2e\xbf\x9b\x9a\xd5\xbe\x1b\xc7\xec\x2a\x83\x9a\x14\xde\x2e\x46\xe4\xb5\xfe\x3a\x4c\x4a\x16\xc9\xaf\xc4\x59\xe7\x30\xf4\x10\xf7\x43\x0a\x20\xd0\xb1\x18\x48\xae\x85\x32\xd6\x09\x0e\xa4\x55\x60\x30\xb9\x17\x5c\xbe\x86\x16\xc9\xf5\xfb\xeb\xae\xa1\x67\xb5\x7c\xd4\x48\x97\xf6\x79\x0c\x78\x50\xf8\x90\x3e\x3f\xce\x3c\xdb\xf2\xa0\xaa\x95\xf5\xe7\x45\xc1\xd5\x31\xd9\x24\x47\xa5\x91\xea\x77\x5b\xfc\x73\x85\xfb\xba\x61\x5e\xf1\xab\x84\xb7\xfa\xe7\x71\x59\x3f\xe4\x00\x82\xdd\x78\xdd\xc5\x17\x01\x74\x2c\x12\x99\x9d\xd2\x58\xd5\xf5\x68\x2c\x77\x12\xac\xa8\xf9\xe9\x42\xd0\x43\x8d\xb4\xc7\x7b\xd4\x24\xcf\xa5\xb7\x76\x48\x97\x55\x0f\x0e\xd3\x7f\xe9\xf7\x39\x15\xa3\x4a\xf0\xd6\xb0\x44\xc4\xcb\xda\x6b\xba\xc5\xc6\x6e\xfd\x71\xd7\x5e\xa2\x68\x3e\xd5\x49\xa6\x3e\x97\xde\x22\x07\x10\x82\x71\xaa\x09\xd3\xbe\x95\xfc\xa5\xfc\xd3\xa2\xe4\x3e\xf1\x5d\xe8\x52\xa0\xad\x78\xe3\xb2\xc9\x94\x20\x26\x4f\x7d\x77\x98\xf9\xd4\xb9\xf4\xf6\x15\xd2\x65\x8d\x2d\xd2\xc5\x3a\x7e\x2a\xc8\xa1\xef\xc7\x6d\xe9\xba\x1d\xcd\x27\x6c\x78\x3d\x1b\x0c\xf6\x4f\xa3\x0c\xd4\x64\xb9\x4e\x25\x7d\x3e\x3b\xea\x21\x07\x10\x6e\xd2\xbc\xfa\xac\x47\xf2\x50\x24\x6a\x39\x48\xd5\xa7\x8c\x6d\x41\x63\x17\x75\x37\x45\x78\xe8\x3a\xdd\xd7\x18\x7a\x8c\xd0\x22\xa7\x73\x1b\x43\x83\x6e\xd4\xb3\xc6\x4f\xf3\x3d\x1c\x6c\xcc\xf8\x18\x15\x2e\x26\x73\xdf\xfb\xe5\xfc\x6f\x74\x57\x73\xc8\x05\x67\x56\x5f\x7e\x41\xc8\xcd\xaa\x9e\x8a\xff\x0b\x31\x6e\x00\x71\xf0\xf1\xd3\x49\x88\xb5\x26\x47\xa1\x3b\xf1\x5c\xc1\xc9\xca\xd6\x57\x6a\xe9\xe3\x57\x0e\xb9\xba\x05\x74\x59\x72\x31\xd8\x51\xf6\x5f\x49\xa1\x33\xb9\x40\x1c\xd2\x94\x73\x97\x50\x33\x06\x89\xb9\x15\xb7\xb0\x8d\x60\x88\xa1\x34\xa6\x0e\x6f\xac\xbb\x16\x5a\x73\x5f\x7e\xc7\x96\x94\xe4\xc1\x1d\x68\x5a\x10\xc4\x05\x8a\xa1\xa0\xfe\xb3\x5d\xb7\xed\x18\xcd\x84\xd6\x24\x17\xbd\xec\xe3\x66\x4b\xa9\xc3\x15\xa9\x23\x7a\xef\x1a\xef\xcf\xda\xed\x8c\xef\x3e\xaa\x91\xd9\x40\xdb\x9d\x80\xb8\x40\x31\xf4\xff\xf5\x77\x90\x20\x59\xc4\x98\xd6\x9f\x99\x55\xb6\xbd\x2d\xea\x38\xc4\x9f\x97\xa1\x65\x50\x7b\x21\x57\xb0\x50\x31\x2c\x96\xd4\xfc\x10\xc7\x09\xb1\xfc\x1c\xc4\x05\x8a\xa1\x50\xff\xf7\xf6\xf7\x62\xff\x3a\x84\x06\x55\xcd\xb3\x14\x90\x0f\x55\xe3\x16\xb9\x9b\x18\xca\x5f\xb4\x97\x85\xe1\xd8\xbf\xc4\x29\x9e\x67\x5a\xad\x9c\x61\xbf\x68\xc9\xfa\xf8\x72\x65\x75\x3c\xa2\xeb\x20\x0e\xae\xc0\xeb\xf1\x6e\x03\xea\x02\x36\xdc\x84\x1a\xc1\x09\x55\x51\xa3\xdb\x5e\x4b\xa3\x32\xd9\x11\xf7\x04\x76\x59\xc3\x5f\x04\x61\xe4\x3a\x22\xda\x05\x71\x70\x05\x58\x09\x3c\xf0\x06\x62\x6e\x4e\x0a\x4b\x1d\xec\xdf\x1c\xe3\x52\xf5\xc4\xfe\x5b\x1d\xa1\x58\x73\x85\x76\xae\xc9\x79\x8e\x5a\x1c\xda\xa9\x0b\xc4\xc1\x15\xe0\x11\x17\x22\x33\xf5\x2f\xd1\xe4\x27\x61\x10\x0c\xda\x1e\x34\xe7\xae\xf0\xa8\xe4\x4d\xeb\x36\x57\xa9\x5a\xf6\x52\x1b\xe8\x83\xbe\x6c\x83\x38\xb8\x02\x7b\xf8\x2c\xda\x41\xec\x03\x7a\x6a\x8e\x22\x3c\xe3\xca\xd6\x71\xf3\x63\x58\xa7\x81\x34\x5a\x18\xae\x9f\xea\xa2\xf8\x8c\xf5\x36\x11\x0a\x80\x38\x84\x02\x7e\xff\x9e\x40\x00\x3d\xc1\xce\x52\x80\x3a\x7f\x3b\x49\x59\x54\x4c\x24\x7c\x40\x36\x38\xcc\x69\x90\xb2\x96\xbe\xa3\x45\x7f\x7b\xc6\x32\xcd\xe4\x35\xf7\x08\x46\x2e\xb4\xd2\x0e\xc4\xc1\x15\xf8\x65\x6e\xa9\xe0\x89\x53\xbb\xf7\xd8\x20\xc2\xd7\xa3\x4b\x41\xb3\x25\xcb\xbf\x83\x5f\xc4\x3e\x0e\x33\xa3\x8c\xf1\xb5\xfc\x7c\x3a\xa2\x5d\x10\x07\x57\xc0\xb2\x86\x68\x58\x6b\x9b\x3c\x7c\x84\x5f\x45\x16\xaf\x3e\x5e\x2b\xe7\xa5\xf3\x23\x3d\x0d\x1a\x3b\xb2\x9e\x17\xb1\x17\xea\x4f\x8f\x10\xed\x82\x38\xb8\x02\x1b\x7c\x2a\xee\x8e\x2f\xbe\x4d\x1c\xb7\xbf\xb3\xe8\x7a\xab\xeb\xfb\xbc\x12\x3f\x9a\x7d\x7a\xf2\x2a\x5f\x9a\xdb\x7b\x59\x7e\x6e\x68\xd5\x1d\x88\x83\x2b\xd0\xd3\x55\x82\x4b\xdb\xbb\x7c\x65\x66\xef\xe8\xc2\xe9\x8c\x3a\xf7\xa6\x48\xde\x63\x67\x86\xc0\x25\x2a\x6a\x0d\xb7\xa1\x2a\xf1\xab\x88\xb7\x28\x10\xf7\x1f\x05\xfe\x67\xe0\xf2\x2f\x0e\x80\x86\x13\x67\x39\x20\x56\x16\x5b\xec\x94\xe5\xed\x3e\x9a\x4e\xdb\x94\x79\xfd\xdd\xdd\x2e\x86\xab\x51\x58\x31\xdc\xd4\x73\x71\xb2\xcc\x86\x3a\xc4\xca\x88\xbe\x83\x38\xb8\x03\x47\xe5\xf9\x43\xd6\x09\x4e\xd1\x71\x8b\x97\x08\x2f\x6f\xd7\x51\x93\x9f\x44\x99\xdb\xd6\x92\x8f\x89\x66\xa9\x5b\xab\x8c\x90\x87\x22\xda\x05\x71\x70\x07\x82\xb2\xb0\x1f\x06\xa8\x0a\x5b\x1b\x3e\xdc\xb1\x7e\xec\x5b\x28\x73\x79\xbb\x38\xa9\x0e\xdf\xd2\x59\xc4\xd6\xbf\xed\xb1\x8c\xfd\x13\x44\xbb\x20\x0e\xee\xc0\x04\xa7\x0f\x5e\x10\xcf\x83\x72\x56\xf3\x35\x67\x03\x31\x13\x9e\xaf\xb7\x55\x3a\xb0\x6e\xaf\x12\x28\x54\x19\xfe\x4a\xa0\x99\x82\x76\xd5\x07\x71\x70\x07\xe6\x37\x57\x93\x38\xbb\x69\x96\xed\xd0\x45\xec\x1e\xae\xd7\x6e\x63\x3a\xc7\xe5\x29\xd9\x56\xe0\x8a\xd4\x65\x1e\x35\x84\xda\xb6\x20\x1c\x00\x71\x08\x07\xfc\x00\x09\x04\xd0\xd8\xee\xcc\x19\x35\xae\x93\x9f\x15\x8e\xf4\x8b\x8f\x18\xeb\x8a\x2e\x1d\x57\xba\xd5\xee\x79\xcd\x71\x04\xe4\x53\x61\x69\xb0\x8f\x91\xeb\xe7\x41\x1f\x74\x41\x1c\xdc\x01\xa3\x6b\xa3\x53\xa8\x86\xa6\x8f\x71\x69\x44\x2c\xb1\x7e\xb2\x7d\x64\x73\xfd\xad\x8e\xad\x76\xa1\x32\x71\x32\x4d\xbb\x75\xf9\x82\x04\xa2\x5d\x10\x07\x77\x60\xf9\xf5\x02\x15\x8f\xb2\x62\xe1\x91\x52\xd9\xd8\x85\x2c\x3f\x06\xed\x0d\x96\x82\xe3\x30\x8d\x52\x97\x03\x63\x6d\xd4\xa6\x68\x68\xd6\x03\xc4\xc1\x1d\xb0\x7e\xcd\x6e\x2b\xb1\x98\x75\x99\x2c\xd4\xfc\x2e\x63\xb7\xdc\xa7\x84\xd5\x52\xc3\xdc\xaa\xb7\xe5\xee\xc7\x49\xcf\xa2\xf5\xbc\xa0\x76\x41\x1c\xdc\x01\xff\x16\x13\x2e\xfe\x9f\x2a\x61\x98\x52\xac\x06\x95\x7f\x30\xc9\x29\x9e\x0f\xbc\xc1\x97\x29\x51\xdb\xb9\x5e\x5b\x8e\xb5\x23\x39\x8a\x70\x00\xc4\x41\x75\xc0\xee\xdf\x1d\x00\x0d\xb4\xcf\x72\xe0\x2a\x3b\x9a\x53\xc4\xc5\xe0\xc0\xb6\xf1\xd7\x1d\xfe\x97\x06\xc7\xf3\xd0\x30\x4c\xa4\x87\xbd\x5b\xe3\x0d\xfe\x5c\x9d\xbb\xa8\x4c\x82\xe8\x3b\x88\x43\x3a\x4d\x75\xed\x46\xbb\xcb\xd7\x63\x9c\x42\x8a\x8f\xa7\x06\xbd\x17\x9b\x9e\x27\x34\x09\x1b\x56\x8c\x87\xbe\x52\x0b\x41\x9b\x9a\xca\x86\x76\x3e\x07\x71\x48\x9b\xa1\x7a\xa2\xd1\xab\xa6\xbd\xaa\xce\xe2\xfa\xe8\x58\x6c\xda\x63\xff\xf1\x4d\xf1\x7d\x25\xaf\xbd\x2f\x43\xc4\xdf\xde\xdd\xe1\x65\xba\x0c\x6d\x86\x0a\xe0\xe0\x0e\x10\x3c\xf2\xc1\xf7\xb0\x7a\x76\xdd\x50\xf7\x8d\x76\xe8\x07\x2c\x7c\x4b\x4b\x96\xf4\xb7\x17\x12\x48\x97\x04\xba\x4a\x5f\x04\x63\x41\x1f\x61\x41\x1c\xdc\x81\x9c\xf7\xb4\x26\x18\xad\x3d\xda\x79\xc3\x5e\x1f\x45\x88\x5d\xcc\xee\x73\xe1\xbd\x64\x13\x9e\x16\x71\x1f\xab\x4d\xde\x71\xaa\xb9\x85\x70\x00\xc4\x41\x75\x00\x90\x40\x00\xbd\xf5\x9c\xe5\xc0\xb5\x22\xda\x44\x97\x48\x0b\x7f\xaa\xf2\x99\x68\x97\xa1\xc2\x6c\xf9\x1f\x2a\x46\xec\x21\x01\xa2\x7a\xdf\x9f\x27\x3d\x90\x95\x81\x76\xe0\x01\x71\x48\x9b\x22\x0f\x0a\x5b\x1a\xb4\xa7\xab\xb4\xec\x07\x8a\x58\x79\x7a\x3e\x11\xef\x8a\x9c\x52\x8b\x7a\x11\xf0\xa3\xa6\xdf\x6f\x77\xbc\x1d\x1a\x62\x81\x38\xa4\x45\x89\xa1\xf7\x06\xb3\x99\x3e\x67\x56\x4f\xce\x9a\x0b\x1c\x15\xf4\x30\x9a\xa0\x77\xa6\x75\xc8\x06\x70\x3d\xe7\x7b\x2d\xdf\x3a\x03\x6d\x8a\x0c\xe2\x90\x86\x84\x9f\x0f\x29\xcb\xee\xf2\x52\x60\xcc\xc8\x0e\x3d\xbf\x64\xf9\xd8\x7c\x92\x79\xf2\x0e\x16\x87\xf9\xb0\x06\x57\xa0\x2e\x61\x21\x74\x12\x0a\x88\x83\x3b\x20\xfe\x49\x56\x0b\x25\x4f\x36\x99\xde\x94\xb7\xe3\x25\x87\xa5\x70\x9f\x79\xf5\x8f\x8e\x8a\xcc\x2f\x77\x23\x22\xf2\x37\x5d\xa7\x2d\x11\x0e\x80\x38\xa8\x0e\xbc\x02\x2c\x48\x03\xbc\x82\x9e\x79\x0a\xc6\xbd\x68\xe3\xaf\x75\x31\x22\xe4\xa4\x56\x1a\x98\xb4\xde\x77\xdc\x58\xec\x27\x09\x32\x98\x6b\xd0\x6c\xcd\x3b\x97\x06\xd3\x3c\xa0\x8f\xef\x00\x0e\xee\xc0\xc5\xda\xa3\x16\xee\xf6\x9f\xb6\xfd\x28\xfe\x79\x5a\x7b\x1e\x9c\x36\x6f\x83\x86\xd5\x96\x64\x0e\xf7\xd5\x27\xcc\x9c\x2a\x25\x72\xa0\x5d\x98\x00\x1c\xd2\x07\xe8\x93\x56\x69\xa7\x89\xa2\x0b\x79\x7f\xde\x8b\xb7\xa7\xa5\xb4\x17\x7c\xa4\x94\x7e\x36\x18\x2d\x22\xf8\xe3\x0d\x31\xa3\xda\xd4\x45\xe8\x03\x34\x80\x83\x3b\x80\x19\x1a\x96\xbf\x41\xb1\xc8\x3c\xc3\x8a\xe3\xf8\x0b\xed\x1b\x41\xcd\xf6\xfb\x65\xc5\x25\x66\xc6\x80\xd4\x9d\x1e\x01\x82\x87\xd0\x66\x6d\x20\x0e\xee\x40\xd5\x8f\x63\x87\x4f\xda\x66\xcf\x1c\x24\x82\x8e\xae\x88\xa5\x5a\xb0\x87\x61\x16\x4a\x76\x6c\xb0\x33\xa0\x13\x19\x13\x9e\x04\x72\x22\x1c\x00\x71\x50\x1d\x00\x25\x10\x40\x93\x8a\xff\x49\x20\xa0\x34\x22\xcd\x60\xb4\xb6\x6c\x5b\x9b\x35\x60\x1b\xa9\x5d\xa0\x42\x27\x88\xa2\x18\xad\xe5\xbd\xfa\xa4\xf4\x56\xce\x47\xfb\x1f\xf5\x95\x4a\xf1\x2d\x6e\xe7\x32\x71\x82\x9c\x40\x90\x26\x42\xbd\xe0\x57\x9d\x17\xad\x4a\x1e\x4e\xa1\x7d\xe7\x4f\x3a\x17\xb6\x79\x50\xc5\xcd\xed\x1d\x9c\x09\x0c\x6c\xfb\xeb\xad\xe7\xb2\x2b\x07\xca\x2e\xd2\x65\xf3\xb6\x66\x4a\x8e\xed\x48\x67\x24\x24\xc5\xbe\x25\x61\xbe\x68\x22\xcf\xea\xf2\x93\xfc\x75\x7f\xb2\x69\x4e\x6b\xc2\xb5\xf3\x5e\xf8\xb9\xf4\x16\x39\x81\x90\x54\xb1\x1e\x98\xdd\xaa\xf2\x54\xff\xd9\xeb\x83\xc1\xc4\xc7\x89\x92\x86\xbe\x8e\xa6\xc5\x2c\xa7\xb6\x4f\x30\xa8\x6d\x97\xdb\x13\xce\xa5\xb7\xd7\x91\x2e\xbb\xf3\x65\x2d\x6d\x17\xfb\x8e\x85\x5d\x7b\xe1\xfe\xa3\x47\xcc\x66\xe9\x5c\x0e\xb8\x27\xaf\xbe\x8d\x58\xd8\xc5\x1c\x77\x17\x6d\x2c\x9f\x4b\x6f\x91\x13\x08\x4c\xb2\xe5\x1f\x88\xf4\x0f\x48\x55\x4f\xb6\xb0\xe4\x04\x98\x31\x5c\xe3\x0c\xae\x62\x1e\x64\x5b\x25\x06\xb7\xbf\xeb\x50\x44\x79\x71\x2e\xbd\x7d\x88\x74\xd9\xa1\x2b\x77\x5b\x83\xc3\x63\x13\x6e\x3e\xfe\x61\x96\x59\xe3\x5e\x60\x4c\x93\x91\xf8\x29\xec\x95\x39\x49\xed\x7a\xa9\xf0\xd5\x51\xca\x73\xe9\x2d\x72\x02\xa1\xb5\x8a\x54\xa8\xcc\xff\xa4\xd6\xbe\xba\x02\x7b\x65\x4a\xdf\x38\x8e\xe8\xbd\x98\x8b\x6f\x45\x50\xaf\x02\x59\xe2\xac\x58\xc8\xdf\x73\x9b\x02\x04\xdd\xa9\x67\xee\x40\x21\xb6\xfb\x96\xa2\x6d\x9f\x24\x46\xd0\x42\x21\x8f\x6d\x8a\x25\x06\x7f\x21\xa6\xee\x88\xb5\x59\x02\xc7\xfe\x08\x25\x66\xae\x08\xda\x81\x02\xc0\xc1\x0b\xbd\xf6\xfe\xd4\xa7\x1f\x27\xa6\xa7\x01\xbf\xd0\xd3\xcd\xda\x1e\xb4\x68\xed\x7a\xab\xbe\xb1\xf9\xdd\x9b\xe0\x88\x83\x6b\x13\x72\x0c\x15\x7a\x10\x07\x2f\xf4\xb8\x32\x6d\x04\x74\xaf\xed\xbf\x71\xc4\xac\x2a\x6c\xc9\x18\x17\x67\xe8\xf2\x7c\x58\xcf\x64\xd7\xda\xa8\xf1\xf5\x0a\xa5\x35\x82\x76\xb9\x04\x71\xf0\x42\xbf\x7f\x3b\xc8\xa7\xea\x8b\xdd\x0a\xad\xfc\x2f\xdf\x78\x6a\xed\x52\x97\x43\xf3\x68\x77\xcf\x00\x79\xab\x3c\x6f\x54\xf7\xd9\xcb\xa6\x50\xec\x12\xc0\xc1\x0b\xfd\xa4\xce\xd3\xa0\xb5\xa0\x98\xfb\x65\x56\x7f\x33\xc8\x2b\x48\xdb\xe9\xa4\xa4\xc7\xbc\xfa\xc6\x4a\xf1\xbf\xb3\x79\x47\x73\xf1\x3c\x44\x14\x7a\x10\x07\x3d\xec\x1b\xff\xfd\x61\x0f\x2a\x9b\x67\x39\x80\xcf\x70\x2f\x7c\x52\x85\xac\x4c\x6d\x40\x18\x5b\xcc\xbd\x3b\x6f\xf8\x39\xfb\xde\xa5\x1d\xd5\xf8\xbc\xf6\xcd\xdb\xa4\x3b\x25\x7a\x50\xfa\x02\xc0\x21\xbd\xfc\x07\x62\xce\x18\xbc\x8c\xd7\xae\x9c\xe8\xe5\x9c\x27\x9b\x7c\xf9\x42\x42\x48\xa3\x83\x8b\x9e\xff\x90\x21\x2b\xd2\xae\x7f\x72\x10\x7a\xf9\x07\x70\x70\x07\x8e\xbc\x02\x49\x12\x75\x74\x83\x7b\x0a\x3d\x82\xad\x3b\x47\x0e\x9f\x84\x5b\x5d\x25\x2a\xde\x9b\x8e\x75\xf7\xaa\x78\xcd\x9d\x0b\x0d\x50\x41\x1c\xdc\x81\x9e\x7b\xc5\xdf\xf4\x04\x9a\x32\xbf\xac\xe8\x57\x29\x28\xa5\x6a\xca\xbe\x11\xe1\xd5\x88\x63\xc1\x75\x59\x17\x79\xfd\x35\xc8\x50\x04\xd1\x2e\x88\x83\x3b\xc0\x60\x78\x23\xf4\x6e\x51\x5e\x62\xe9\x2c\xe3\x17\xef\xd5\x0e\xdc\x0d\x5f\x7a\xdc\xf9\x0f\x4b\xb7\x27\x67\xca\x5e\xa8\xca\x4e\x43\x13\x40\x20\x0e\x7a\xd8\x03\x12\x08\xa0\x67\xd8\x59\x0e\x64\x5f\xb1\x7c\x10\xc0\x9a\xdc\x64\x17\xf6\x2e\xa5\x6f\xbb\x5d\xf1\xc5\x80\xed\x15\xe9\x6b\xc2\xf2\xd1\x76\x92\x7c\xf9\x39\x5e\xd0\x11\x52\x20\x0e\xee\x40\xa3\xda\x81\xf7\xaa\x4a\x90\xe7\x22\x77\x26\x6e\x53\x43\xa4\x90\xdd\x3b\x9d\x67\x5f\xfa\xd1\x38\xc5\x4a\x53\x6d\x12\x62\x33\x55\x11\xed\x82\x38\xa4\x3a\x70\x81\x46\xd6\x9a\xd0\x33\x5f\x3b\xae\x76\xb7\xe8\x49\xe7\x98\x3e\xb3\x36\x99\x93\xdb\x13\xb1\x10\xfc\x38\x3f\xbf\xd1\x23\x68\xcf\x20\x10\x07\x77\xa0\x17\x45\xeb\x4d\xa9\x94\xcc\x4d\xb5\xf4\x87\x58\x27\x74\x65\x51\x8b\xf8\x73\x33\x02\x2a\x38\xbd\xbe\x2c\xe9\xa3\x15\xef\xda\xa0\xf8\x35\x88\x83\x3b\x40\x1c\xf4\xeb\x1d\x1d\xbd\xa4\x02\x75\x7e\xfe\xd6\x9d\x1d\xd6\xf0\x64\x0c\xb3\x15\xe3\x3a\xcc\x70\xcc\xf4\xdf\x84\x34\x63\x78\x84\x08\x07\x40\x1c\x54\x07\x76\xff\xdd\x01\xd0\x80\xe2\xcc\xfd\xa8\x04\x65\x12\xe3\x44\x3e\x53\x31\xee\xd1\x68\x7c\x19\x0c\xd8\xbb\xca\xfa\xd9\x42\x16\xf3\x28\x84\x6b\xec\x28\xd6\x47\xbe\x1e\xda\xf1\x18\xc4\xc1\x1d\x28\xf0\x33\x2f\xb6\xca\x4b\x7f\x68\xba\x14\x9f\x3e\x66\xe2\xd4\x11\xca\xd7\xf4\xe2\x12\x65\x1f\xd9\x6b\x66\x6d\x36\xec\xd8\x26\x28\xdd\x05\xe2\xe0\x0e\x54\xf6\xe4\x12\xa5\x18\x0d\xe1\x61\x51\x34\x30\x79\x66\x3e\x62\xa4\xed\xc6\x50\x92\xfb\xbd\xa1\x5a\x17\xa7\xe2\x55\x73\xdf\xbc\x04\xd1\x2e\x88\x83\x3b\x50\xc1\x2c\x50\x32\x94\xbb\xb5\x6b\x57\x83\x8a\xab\x78\x59\xec\x01\x53\x01\xbf\x28\x91\x8f\x28\x7f\x40\xa4\xac\x73\x66\xf5\xa6\x3a\xa2\x5d\x10\x07\x77\x60\x7f\xaa\xda\x62\x33\xe7\xe1\xd0\x00\x56\xb4\x14\x65\xbc\x80\xdc\xdf\x8c\x34\xce\xd1\x50\x96\xb9\x14\x6f\x0b\xab\x3f\x9d\xb8\x8d\x08\x07\x40\x1c\x54\x07\x00\x09\x04\xd0\xe8\xee\x4c\x07\xda\x74\x9e\x30\x8e\x8e\xba\xd3\x79\x88\xa0\xe2\x36\xcf\x0f\x0b\x5e\xd5\xf6\xfd\xcb\xfc\x9c\xf9\x59\x52\x90\xdb\x8a\x54\x2a\x26\xe4\x00\x80\x43\x7a\xf9\x4f\xe9\x15\xa9\xea\x64\xf8\xfa\x71\x1b\x33\x55\x26\xf0\x1e\xc7\xf0\xa8\xbd\xc2\x4d\xd5\xd6\xfb\x9e\xec\x5c\xa2\x1f\xb5\x0e\xa0\x4f\x77\x20\x0e\xee\x40\x3d\x67\xf2\x31\x69\x65\x58\x09\x8e\xc5\xef\xc3\xbe\xdb\x2f\x17\x8f\x4b\xba\x0d\x31\xcb\xc5\x5f\x10\x28\xb5\x73\xa4\x49\xb4\x12\x22\xda\x05\x71\x70\x07\x9a\xb9\xe4\xfb\x97\xa3\xf7\x94\xef\x07\x8f\x50\xfb\x4d\x5f\xb9\x25\x76\x61\xdf\xce\x83\xbc\x90\x09\xe3\xe1\xa8\xf2\xda\x7b\xc7\x70\x44\xbb\x20\x0e\xee\xc0\x1f\x69\x8d\x5d\x3c\x79\xe5\x94\xd7\xf1\xd3\xd1\xf9\xcb\x2f\xd7\x64\xd2\xb9\x56\x1d\x38\x46\x0f\x37\xa5\x27\xae\x50\xf2\xf0\x40\x09\x04\x10\x07\xd5\x81\xeb\xff\xee\x00\x68\xa8\x7d\x96\x03\x1d\xaa\x25\x27\x8e\xbd\x01\x5b\x18\x4e\xbe\xb8\x26\xb7\x02\x16\xff\xbe\x71\xc0\x69\x19\x99\x16\xfd\xf4\xed\x13\x8e\x20\xca\xe1\x18\xa2\xef\x20\x0e\xee\xc0\x88\x30\xb7\xa8\x65\x36\x96\x64\x4a\xf6\xf8\x8b\x6f\xa3\xcd\x9f\xdd\xc3\xff\xa6\xf6\xae\x46\xef\x7d\x0a\x55\xff\x79\xf8\x3e\x06\xda\x3f\x0e\xc4\xc1\x1d\x50\x28\x1b\x37\xcf\x97\x50\x3c\x52\xc3\x60\xe5\xa0\x09\xe0\xde\x4f\x4d\xd7\xd8\x19\xa3\x2c\x68\x95\x30\xef\xfa\x84\xdf\xd9\x05\x4d\xda\x83\x38\xb8\x03\x0c\x73\xb2\xe2\x6b\x9f\x49\x75\x0f\xc8\xfc\x28\x1e\xbc\x66\xc1\xfa\x9a\x60\xf6\x65\x55\x93\x90\xe5\xbe\xb6\x79\x81\xcb\x9f\xe7\xd0\xef\x05\x71\x70\x07\x5c\x35\xca\x9b\xcd\xfd\xff\xee\xf7\x9b\x3d\xcf\x28\x37\x12\x72\xd6\x1c\x8b\x5f\x2f\x77\xb3\x15\x0d\x31\xbc\xfa\x30\x33\xc4\x90\x0b\xe1\x00\x88\x83\xea\x00\x20\x81\x00\x7a\xef\x39\xcb\x81\x46\x76\x21\xfa\x05\x34\x8e\xf8\x14\xf9\x6f\xea\x43\x7a\x66\x29\xb2\xe4\x39\xb8\x3f\xc7\x82\xf0\xba\x47\x3e\xbf\xc7\xf1\xd3\x12\x82\x9e\xdb\x00\x0e\xee\x40\x83\xbc\x75\x57\x82\x98\x41\xc1\x2f\x2f\x4d\x9c\xd3\x21\x4f\x6a\xa9\x99\x9a\xa7\xbd\x51\x59\xcc\xca\x51\x1d\x57\x6e\x59\xba\x42\x13\x2a\x20\x0e\xee\x80\x96\xd9\x6c\x39\xab\xb5\x50\xc1\x46\x56\x4e\x0f\xaf\xf3\xa4\x73\x66\x2d\xcb\x9f\x0a\xb1\xaa\x46\x03\x96\x85\xac\xab\x92\x32\x1c\x88\x76\x41\x1c\xdc\x81\xb6\x53\x5a\x87\xef\x98\xdb\xcd\x97\x1b\x73\x22\xa3\xa3\xd5\x87\xcd\xb6\xf7\x39\x2c\xba\x9f\xdf\xd9\x43\xb9\x29\x17\xf0\x60\xf6\x02\xa2\x5d\x10\x07\x77\x20\xed\xcb\x3c\x47\x9b\xa5\x4d\xca\x66\x21\xb3\xe6\x2b\xab\xc1\xbb\xde\x64\xac\x02\xf4\xf4\xdb\x8f\x86\xba\x52\x4a\xb0\x6e\x67\x46\x43\x27\x22\x01\x38\xa8\x0e\x3c\xfc\x77\x07\x40\x2f\xa1\x67\x39\xe0\x5e\xf4\x69\x35\x19\xeb\xa9\x9e\x98\x06\x8e\xc6\xe0\xbd\x37\x31\xcf\x87\x4f\xeb\xc7\x1c\x85\xac\x4b\xd8\x4a\xf1\x63\x59\xb2\xa1\x94\x27\x88\x83\x3b\x70\x88\x3f\xb7\x9a\x5c\xa4\x46\xfe\xa8\x42\x74\xc1\x6a\xa3\xff\xfd\x0f\xcd\x7d\x1e\xd5\xc7\x9b\x2d\x3b\x94\x26\xd8\xa2\xd8\x4c\xd0\xf8\x1d\xc4\x21\x1d\x89\x6d\xd8\x18\x63\x31\x8f\x85\xaf\x7f\xcb\xa7\xaf\xd7\x75\x14\x95\x7b\x33\xd6\xbd\x6a\x93\xcb\xf7\x57\xff\xc7\xd7\x05\x1d\xf8\xd0\x49\x28\x20\x0e\xee\x80\x47\xf8\xa8\xbe\xa3\xe6\xe8\xbc\x42\x53\xde\xbb\xd6\xc7\xa5\x07\x6c\x9a\xa1\x72\xd8\xbc\xac\x93\x38\x06\x77\x3b\x3b\x95\xdb\xa0\x67\x0c\x88\x83\x3b\x30\x4a\x83\x46\xc5\x61\xc3\x1b\x77\xbb\x51\x32\x08\xe3\x16\x76\x86\xf1\x69\xd5\xcc\x68\xf1\x7c\x65\x6b\xed\x8b\x8f\x02\xd6\x85\xcf\x11\x0e\x80\x38\xa8\x0e\x80\x12\x08\xa0\xe5\x82\xff\x49\x20\xa0\x78\x20\xcd\x61\xc8\x16\xef\xbf\xfc\x15\xf3\xe0\xc3\x2d\xbe\x45\xd2\xd2\x90\x3a\x74\xe2\x8c\x47\x47\x36\x13\x6b\x72\x15\x19\x33\x17\x42\x62\x97\x8b\xce\x65\xea\x04\x39\x81\x70\xd7\x08\x4f\x3e\x20\xd9\x58\xef\xb2\xe3\x6b\x9b\x96\x83\xb5\x93\xfe\x07\xcb\xe1\x8f\xd2\xb1\x2c\x1a\x13\x27\xab\xdf\xb3\x51\x9d\x9e\xdb\xd4\x09\xa8\x7f\x67\x1e\x1e\x59\x5a\xf2\x5d\x1c\xe5\x2a\x36\xb1\xd7\xa0\x85\xda\x87\x8d\x67\x7a\x6c\x8c\xd2\x68\x85\xda\xce\xe8\x32\x8c\x21\x3d\x16\xbd\x51\xd0\xce\x47\x00\x0e\x7e\x7b\x50\xab\xc7\x77\x5c\x78\x55\xc3\x62\x63\x93\xc3\x39\xf9\x8c\xe7\x16\x83\x98\x65\x4c\x61\x9a\x04\xaa\x5c\x7d\x76\xf6\xc3\x0f\x8f\xa1\xd3\xc2\x41\x1c\xd2\x6b\xb3\xd5\xab\x90\x36\x92\xe3\x09\xa5\xcd\x97\xb2\xfd\x7f\x52\x19\x18\x4b\xb3\x82\x69\x48\xa6\x94\xbf\x6d\xd4\x7d\x41\x4b\x75\x86\x0e\x3a\x04\x71\xf0\xdb\xc3\x3b\xe8\xea\x83\x7c\xb6\xde\xf2\xab\x14\x4f\x2f\x48\x73\x2b\x59\x90\x8e\xd8\x54\x5f\x60\x69\xe9\xbe\xc6\x54\xfc\x68\xca\x5b\x59\x1a\xd1\x2e\x88\x83\xdf\x1e\x77\xb8\xa9\x9b\x6a\x95\x9c\x74\xe4\x9b\x36\xdf\x92\x98\xf6\xd1\x2d\x70\x4f\x1c\xf2\xfb\x64\xad\x3b\xf0\x9f\x70\xca\xde\x3f\x81\x76\x6a\x02\x71\x50\x89\xf4\xf8\xf7\x12\x09\x92\xed\x2c\x07\x94\xf6\x4d\xea\xfd\x2e\x73\x39\x6a\x9e\xe2\x71\xff\xe0\xa6\xae\xf6\xca\xfc\x7e\xe3\xe1\xa3\xeb\xc5\x44\x0e\x8b\xd5\x6f\x09\xcd\xa0\x80\x1a\x88\x83\x3b\x70\xe5\x1d\xa1\x57\xf2\xef\xbe\xd9\xb2\xe4\xe8\x95\xf1\x21\x5c\xec\x0f\x0b\x03\x21\xd6\x3e\x59\x4f\x3a\x8f\x9c\x17\x7d\x99\x29\xa0\xc3\x23\x41\x1c\xdc\x81\x8e\x8f\xf1\xfa\xa5\x65\xb2\x28\x05\x0e\xd7\xbf\x94\xde\xe7\x1f\xdd\xb0\x15\x54\x3a\xb1\xfd\x71\x10\x35\xab\x95\x75\x55\x77\x01\x3a\xe4\x0e\xc4\xc1\x1d\x88\x38\xf8\xcd\x3e\xe4\xa0\xa9\xf2\xe6\xc9\x3c\xb3\xd6\x98\xaa\x88\xa4\x7c\xc5\x85\x25\xfc\xe7\x78\x84\x3a\x52\xf9\x3a\xe3\x33\x2a\xd0\xe6\x0d\x00\x0e\xee\xc0\xc5\x0b\x92\x97\x3e\x2e\x47\x89\xed\xb7\x0a\xdc\xb9\x93\x4a\xed\xeb\xe7\xe9\x4f\xf3\x4c\xe1\xc3\x13\x26\x22\x79\x73\x06\x02\x23\x0d\x84\x03\x20\x0e\x2a\x91\x80\x04\x02\x68\x2d\xfa\xd9\x09\x04\x77\xac\xa2\x5d\x52\x69\x1b\xcc\xa8\x83\xdc\x2d\x02\x13\x1f\x52\xa7\xef\xae\x8f\x29\x9d\xe2\x19\xfb\xe6\xb4\x18\xf4\x16\xd9\xea\x10\xab\xf9\x41\x1c\x72\x02\x41\xc5\x79\x8f\xd5\x23\x7e\x84\xee\xb7\xaa\x4d\x30\xdf\xb3\x75\x8f\x3c\xff\xe9\x5b\xb4\xb1\x4f\x08\x71\x0e\xd7\x45\x84\xc8\x04\x96\x11\x2d\x83\x38\xe4\x04\x42\x45\xd5\xf7\xb4\xcc\xd2\x11\x54\x5e\xcb\x55\xda\xa3\x8b\xc2\x01\x3e\x15\x03\x9e\xaf\x50\xc2\xd8\x04\x58\x7b\x15\x78\x83\xb8\x73\x11\x2d\x83\xb8\x40\x09\x14\xd4\xff\xdd\xb2\xea\xc7\x47\xe8\x2e\x2b\x74\xfd\xfd\x52\x3d\x4b\x8f\xbc\xd2\x13\x48\x32\x54\xb5\xb4\x74\x6b\x88\xde\x04\x5e\x9b\x9b\x21\xf8\xbd\xef\x87\xc8\x13\x38\xa2\x69\x3d\xd6\xb9\xdf\x92\xf9\x9c\xa8\xa2\x37\xb3\x4a\x14\xef\x38\xf1\x71\x51\xa4\x9b\xf6\x41\x86\xdb\x07\x7b\xd6\x22\xbe\x2f\xff\xcc\x13\x94\xc4\x4f\x14\x45\xba\x7d\x64\x34\x4b\xba\xe1\x21\xaa\xf1\x48\xab\x78\x64\xe4\xbd\xd7\x65\x85\xdd\x01\xbc\x05\x2f\x5f\xee\xaf\xff\x8c\xc0\x4d\x13\x5e\xe9\xb8\xe4\x70\x34\x60\xa4\x77\xd5\x6d\x1d\xdf\xd1\x24\xc6\x7b\x2a\x3c\xfd\x66\x9b\x28\x63\xd3\x3d\xb4\x86\x6f\x5d\x79\xff\xf7\xf2\x04\xa0\xce\x9d\x91\x27\xd0\x14\x95\x5c\xd6\xd3\x27\x12\x7c\x68\x87\x8a\x56\xd3\x58\x73\x87\xbd\x2c\x65\x7f\x69\xe3\x65\x07\x1f\x3f\x27\x3d\xfe\xe0\xdd\xb5\x7f\xa0\x3e\x73\x2f\x98\x74\xac\x32\x25\x76\x83\xab\xa2\xf2\x3d\x44\x19\x38\x72\x65\x78\x7d\x73\xff\x52\xc6\xc5\x27\x69\xe1\x2d\xbe\xa2\xfa\x07\x2a\x50\x9b\x46\x92\xed\xe1\x86\xa2\xe1\x81\x87\x16\x5c\xfb\xb6\x54\x81\x3b\x62\xb6\x61\xe5\x45\xdf\xe5\xe7\xbf\x24\xda\xdf\xf5\x3b\x41\x79\x02\xd0\xe5\xff\x93\x27\x10\x41\xca\x13\x30\xa0\x46\xe0\x49\xb1\xd8\x68\x06\x9f\x2c\x34\x89\x77\x5d\xbe\xad\x8b\x49\x49\xf6\x94\x8c\xc0\xc0\xaf\x1a\x2b\xc5\xc5\xfd\x93\xe0\x39\x0c\x24\xc4\x9b\x91\xf2\x04\xb6\xdf\xf9\xa4\x98\x9f\xc5\xb5\x92\xc4\x76\x88\x78\x86\xa0\x84\x7e\x79\xb0\x46\xa4\x34\x9d\xcb\x99\x5f\xa4\xdc\x20\xfd\x86\x7b\xf3\x3c\x86\x2f\x22\xc8\x79\x82\x4e\x4b\xe5\x94\xae\xa7\x9f\x99\x17\xcd\x75\x30\xb3\x33\xdc\xba\x66\x2e\x2a\x1b\x5c\xb0\xc3\xcd\x50\x6e\xc4\xb8\xec\x15\xcc\x85\x76\x1e\x97\x6d\x46\xce\x13\xf4\x7e\x55\xab\xe3\x8b\x08\x12\xe2\x34\x69\xbc\x19\x14\x34\xcf\x6f\x6b\xc7\x43\xb3\x16\x15\x20\xfa\x28\x4e\x37\x7e\xa2\x35\xa1\xf4\x5c\x7a\x8b\x9c\x27\xc0\x7c\xf0\x24\x91\x54\xb0\x6f\x08\xf7\x47\xb6\xd3\xd6\x40\x34\xeb\xdd\xde\xf0\x3e\x6a\x8b\xf4\xdb\xbd\xf1\x22\xf4\x69\x82\x85\xc6\xe7\xd2\x5b\xe4\x3c\x01\x99\xbf\x82\xe6\xb5\x10\xf7\x92\x9c\x89\x09\xc6\xfb\x42\x3e\x98\x4a\x44\x68\x74\x2c\xef\x1f\x86\xa9\x8c\x7d\x0e\x8c\xa2\x71\xe4\x3c\x97\xde\x22\xe7\x09\x52\x72\x15\xf1\xef\x67\xde\x76\xd6\xdd\xaf\xb7\x9b\x88\xf4\x4a\x7b\x68\xc1\x60\x83\xf3\x3d\xe1\xe7\x16\xd9\xcf\x7e\x8e\x0c\xfb\x9b\xe7\xd2\x5b\xe4\x3c\xc1\x9f\x17\x7f\x6f\xd3\xeb\xac\x47\xb0\xae\x87\xcb\x47\x8b\x14\xc7\xbf\x7a\x2e\xad\x82\x16\x72\x85\x63\x65\x6e\xa7\x1f\xa7\x20\xf0\xff\x4b\xa1\xfa\xf7\x11\x31\xe8\x46\x3d\xf3\xc8\x3c\x51\x0e\xea\xd6\x04\x94\xf0\xac\xa9\x80\xdf\x94\x96\x06\xce\x72\x75\xc1\x43\x26\x77\xfa\x24\xa9\xda\xdd\x25\x05\x3a\xa3\xa0\x11\x26\x88\x83\x8f\x86\x64\x77\x04\x2f\xce\xb9\xae\xdd\xf2\x9b\x72\x28\x2b\xa9\x66\xc2\xca\xd4\xd7\x6f\xc6\xb6\x49\xd1\xb4\xdf\x91\x7b\x66\x76\xc9\x6a\x1e\xd1\x2e\x88\x83\x8f\x86\x94\xf2\xa6\x9c\xf4\xa6\xb0\x49\x3c\xbf\x75\x88\x05\x32\x5c\xb4\xec\xf0\xd2\xf7\xed\x0f\x1a\xba\xc3\xb8\x78\x13\xa3\x1f\xdd\x0b\x9a\x98\x06\x71\xf0\xd1\x10\x95\xf7\x6d\xc6\x28\x99\xc5\x4a\x95\xbf\x3f\xb7\xd7\x18\xf0\xe6\xd1\xde\x5e\xdc\xc1\xf5\x37\x94\xc7\xad\x3a\x3e\xa4\xb4\x1b\x89\x41\xb4\x0b\xe2\x02\xc5\x44\xfe\xd7\xdf\xe1\x41\x82\xc6\xcd\x50\x8b\x81\x43\x9c\xc2\x20\x82\xd4\x5e\x9d\xde\xc1\x94\x8e\x67\x5c\xd7\xa5\xd9\x1e\xbc\x32\x7c\xfe\xf1\xe9\x72\x0d\x62\x31\x39\x88\xfb\xaf\xdf\xfb\xdf\xdb\xd9\xff\x7b\x9e\x00\x54\x35\xcf\x52\xc0\xe1\xb9\x71\xb9\x73\x2f\xce\x65\x6f\xea\x4c\x2f\xe6\xf5\x47\x21\x7e\x96\x3a\x97\xc3\x44\x68\xaf\x8d\xa7\x64\x0a\x53\x0f\xa6\x42\xdf\x10\x40\x1c\x5c\x01\x8a\xe0\xaa\xf6\x34\xfa\x6f\xbf\xd1\x51\xe9\x62\x4c\xd2\x48\xb3\x4a\xe7\xcc\x4a\x37\x2c\xb7\xbf\x14\xe3\x98\x9a\x77\xd7\x85\x41\xa7\x93\x83\x38\xb8\x02\xf9\x27\x2d\xdb\xcc\x8f\xb5\xae\x54\xcf\x68\x9c\x62\xe5\x30\xf1\x9a\x60\xd3\x7e\x6c\x27\x1d\x3a\x16\xbe\x9b\x13\x50\x38\xc3\x27\x88\x68\x17\xc4\xc1\x15\x20\xb6\xd2\x38\x78\xf2\xeb\x6f\xce\x9d\xb1\x63\x0b\xf7\x9c\xba\xec\x19\xcf\xad\xcd\x0a\xde\x9e\x50\x5d\x57\x42\xd3\xd8\x0f\x7b\xd0\xe2\x77\x10\x07\x57\x20\xda\x37\x7a\xc0\x1d\xef\x36\x39\x25\x7f\xe0\xfb\x9f\x92\x5f\xcc\x2a\xef\x94\x17\x96\x78\xdf\x1f\x2c\x5a\x79\xc8\xcd\xfd\x3b\xae\x13\xa1\x00\x88\x43\x28\xd0\xfc\xef\x79\x02\xd0\x13\xec\x2c\x05\x92\x1f\x6f\x17\x06\xce\xb4\x91\x3e\xc8\x9b\x63\x78\xa1\x7f\xd7\x4c\xad\x6d\x61\x81\x73\xf4\x86\x5b\xac\x60\x00\x39\x0e\xc1\x0c\xb4\x19\x08\x88\x83\x2b\x70\xcb\x87\x27\xb1\x7a\x31\x54\xd5\xc1\x64\xde\x41\x80\x91\xf4\xd2\xcd\xde\x90\xc1\x27\xeb\xf4\x81\xa4\xaa\x98\x0b\xc9\xfb\xa2\xfe\x88\x76\x41\x1c\x5c\x01\xc6\x3f\xdd\xea\x0c\x4f\x07\x3f\xe1\xd0\xf7\xb9\x5d\xaf\x29\xab\xd2\xf7\x15\x57\x5a\xce\x68\x56\x91\xc9\x30\x0f\x7d\xef\x1a\x0d\xa5\x7f\x40\x1c\x5c\x81\x72\x15\x7b\x7d\xf7\xb0\x4e\x96\x0f\xf1\xcc\x7f\x57\x7e\x3f\xa2\xec\x97\x49\x28\x28\x1e\xd3\x1e\xf3\xee\x68\x77\x46\xdf\xa6\xde\x82\x36\xca\x03\x70\x70\x05\x74\xda\xb4\x31\x68\x56\xf1\xb7\x30\xf5\x12\x67\x5a\xb0\x7f\xe8\x45\x56\x36\x45\x50\x5d\x1b\x8f\xa1\xaa\x50\xac\x8b\x20\xe8\xca\x41\xbc\x13\x81\xb8\xff\x28\xf0\x3f\x03\x97\x7f\x71\x00\x34\x9c\x38\xcb\x81\x9d\x79\x06\x9e\x8d\xc0\x9f\xf2\xf8\x37\x93\xef\x94\xa4\x4e\x93\xc7\xa8\x50\xeb\x2e\x31\x59\xc6\x7f\x51\x69\x5e\x7d\x1f\x77\xf9\x1d\xa2\xef\x20\x0e\xee\x40\x70\xa8\x95\xe7\xe2\x7a\x9b\xe4\x4b\x7b\xe1\x0a\xf1\x2c\xce\xfb\xed\xef\x67\x38\x4a\xa5\xee\xdb\x4d\x51\x1a\xe4\x9c\xba\x1f\x40\x9b\x81\x80\x38\xb8\x03\x74\x4b\x0e\x4c\x61\xbb\x26\x4c\xd2\x07\xaa\x92\xdf\xe3\x6a\xd5\xaa\x9f\x26\xbe\x78\xd8\xf9\x80\xa2\x92\x43\x38\x47\x9d\x9f\xa2\x18\xd1\x2e\x88\x83\x3b\x70\xe7\xc4\x8e\xf5\x6d\x78\xff\xf3\x99\xc4\xdc\xad\xf9\x29\x31\xea\x39\xc9\x80\x07\x81\x5e\x6c\xa9\x81\x5f\x9b\x49\x97\x76\x1d\xa1\x6c\x0d\x88\x83\x3b\x20\x44\xbe\x65\x10\x52\xa0\xf3\xa5\x23\xd8\x99\x30\x94\x51\xdf\xe9\xef\xa2\xcb\x26\x03\x77\x52\x92\xec\xdf\x96\x9e\xf9\xc2\xcd\x54\x84\x03\x20\x0e\xe1\x40\x33\x20\x4f\x00\x1a\xdb\x9d\xe5\x80\x39\xfe\x97\xbc\xac\xca\x9a\x83\xb4\xdf\x33\xb7\xfe\x6a\xab\x32\xe3\x5e\x8c\xd3\xbd\xd8\x51\xff\x3e\x2d\x9c\xeb\x5a\x91\x4c\x2d\x34\x87\x01\xe2\x90\xd2\x85\xa4\xdb\x69\x09\xcb\xcc\x6d\x1f\xf8\x96\x39\xac\x4b\x54\x6c\x45\xd6\x6d\xb2\xf0\xc7\x1d\x4a\x57\x22\xb2\x9c\x5c\xcd\x14\xa1\x0d\x6c\x40\x1c\xd2\x2e\xd6\xfd\x93\xf4\x47\x91\x04\xf5\x51\x6c\xf7\x58\x95\x56\x3e\xd8\x90\xbe\x19\xe4\xa1\xba\x3f\xcf\x81\xfa\xa1\x26\xf3\xf1\x67\x0e\xe8\xf0\x77\x10\x07\x77\x60\x1d\xa5\xd8\x43\xc2\x53\x95\xce\xc7\xcb\x26\x06\x0b\xcb\xe8\x86\x4d\xc4\x8f\x32\x8e\x03\xb6\x2b\x5b\xad\x27\xcf\xd0\xb3\x5c\xbc\x11\xed\x82\x38\xb8\x03\xef\x2e\x5e\xf9\xd1\x24\x7c\xa4\x95\x1b\x55\x9e\xc8\x5c\xad\x34\x99\x93\x16\x3d\xb4\x43\x2b\x7a\xda\xac\xf5\x2c\x84\xf0\xb4\x82\x0c\xe1\x00\x88\x83\xea\x00\x20\x4f\x00\x1a\x68\x9f\xb9\xc1\x6d\xcc\x0b\xb5\x82\x2b\xcb\x0f\x67\x58\x50\xf6\x1c\xe3\xb1\x27\xbe\xca\x32\x5d\x89\xe0\x0b\x78\x2f\x9a\x76\xb0\xc0\x30\x16\x94\x0a\xed\x7a\x02\xe0\xe0\x0e\x60\xcb\xaa\xc9\xff\xe2\xfa\xaa\x65\x31\x53\x78\x3d\xba\xb9\x3b\x7e\x48\x56\x6f\x2e\xee\xd3\xc8\x68\xbc\xca\xd1\xce\xf2\x12\xdd\x67\x44\xbb\x20\x0e\xee\xc0\x4a\xff\x15\xfa\x83\x5f\xd6\x77\x7d\xb3\x0b\x2e\xea\x2e\x0b\x9e\xae\x0e\x5c\x73\x4c\x8f\x75\x96\x7d\x89\x59\x9a\xa0\x7f\xfc\x8a\x1a\xd1\x2e\x88\x83\x3b\x50\xaa\x9c\x6a\xfd\x79\xad\xd7\xf2\x63\x42\x97\xa9\xc5\x67\x71\x51\x96\x2b\x3b\x94\x21\x53\x3c\xb9\xe5\x06\xde\xba\x45\xe4\x5d\xd0\x33\x11\xc4\xc1\x1d\xf0\xa7\xa0\xbd\x6a\x8b\x2b\x74\x74\xab\xbd\x56\x67\x1a\xd7\x6f\x56\x2d\x2a\xc9\xb9\x19\xa3\xd5\xce\x6d\xf8\x97\x20\x0a\x9b\x95\x1f\x94\x29\x01\x70\x50\x1d\x00\xe4\x09\x40\x6f\x3d\x67\x39\xa0\x9e\xc9\xb3\x89\xa5\xbc\x36\xe4\x67\x1d\x60\xef\x53\x3c\x24\x71\xf9\x0b\x4a\x98\xff\xe5\xd2\xf0\x2f\x74\xa9\xdc\x7b\x51\xa1\x06\xd0\xc6\x50\x00\x0e\xee\x80\x8a\x8c\x3e\xf3\xa2\x8e\x9b\xb7\x8e\x99\xcf\x77\x3e\x0e\xe7\xc2\xaa\xd0\xab\x44\xa2\x1b\x54\x02\x41\x75\x42\x59\x8a\x19\xb3\x50\x0e\x10\xc4\xc1\x1d\x68\xb2\x3f\xb2\x8e\xda\x6e\xa9\x7a\x67\xfa\x65\x00\x8b\x91\x5d\xad\xc2\xf5\xb5\x9a\x25\x47\xe9\x0a\x27\xb7\xc2\xdf\x63\x9b\xd3\x29\x44\xbb\x20\x0e\xee\x00\x7d\x5e\x59\x39\x39\x9d\xd6\xab\x6b\x8a\x8f\x39\xb4\x9d\xf9\xd3\x73\x1d\xa8\xa4\x3d\xd7\x9f\x7b\x09\x47\x59\xf5\x5f\xbe\x65\x0d\x9d\xee\x01\xe2\xe0\x0e\x5c\xfb\xfd\x74\xa7\x31\xdb\x45\xf0\xe0\xa1\x40\x8d\x66\xc0\x2b\xdc\x02\xe9\x99\xcf\x3d\x06\x99\xd8\xd9\x58\x73\xc5\xbe\x06\xc3\x86\x08\x07\x40\x1c\x54\x07\x00\x79\x02\xd0\x2b\xe8\x99\x9f\x12\x09\x8d\x7b\xd2\x5c\xba\x0f\x5b\x04\xf8\x46\x29\x50\x77\xac\x8b\x38\x74\x75\x33\x19\x14\x6a\x70\x77\x95\x9d\x18\x2e\xe5\xb2\x41\x9f\x12\x01\x1c\xdc\x81\xce\x65\x0f\xb4\x6b\x0e\xb2\x0d\x19\x71\xae\x6e\xb7\xd3\x64\x27\x2e\x6d\x5b\x66\xda\x2a\xb6\x8a\x65\x35\xc8\x2b\x25\x54\xa5\x16\x42\x1b\xe5\x01\x38\xb8\x03\x27\x0e\x3f\x72\x3a\x14\x43\x54\xb9\x38\xd0\x1c\x04\x28\xbf\xfa\xea\xfd\x31\x46\xa7\xb3\xa2\x28\x9e\x23\xdc\xe7\x21\x95\x5b\x52\x83\x9e\x31\x00\x0e\xee\xc0\x83\xc8\x2f\x12\xf4\xbe\x0f\xd3\x23\x66\xa9\x1c\x63\xdd\x48\x9c\xa4\x0d\xbe\xe1\x99\xd1\x5d\xc2\x16\xa7\x70\xea\xda\x38\x79\x28\x8b\x68\x17\xc4\xc1\x1d\xa0\x1b\x57\x70\x16\xf6\x55\xa5\xf3\x8f\xa8\x24\x6d\xcd\xe4\xe6\xc7\xf5\xb0\x30\x9a\xcc\x53\x4a\x73\x62\x91\x68\x60\x71\xf5\x53\x44\x38\x00\xe2\xa0\x3a\x00\xca\x13\x80\x26\x15\xff\x93\x27\x10\x41\xce\x13\xf8\x95\xd6\xd2\x57\xba\x7e\xfd\xf2\x21\x39\xd6\x56\xc5\xae\x4f\x75\xe6\xb7\x07\xa9\x2c\xad\xb3\x1a\xbb\xae\xd2\x91\x41\xed\xdd\x6b\xe7\x32\x71\x82\x9c\x27\xc8\x12\xc0\x2c\x48\xc3\x53\x13\x55\xa3\x42\xa1\xed\x5c\xb5\xce\x22\x7e\x1a\xd5\x6d\x97\x25\xfd\xfa\xf3\xe2\x55\xbd\x5f\x07\xcf\x5d\xce\x65\x9a\x08\x39\x4f\xc0\xf4\xb8\xda\xcd\x8a\x67\x79\xe9\x40\x72\xf7\x25\x06\xaa\x5b\xc7\xd6\x85\xad\x59\x26\x9a\x5a\x1e\x75\xef\xaa\x6f\xda\xbf\xc8\x1e\x9c\x4b\x6f\x91\xf3\x04\x2a\xd7\x3f\x98\x66\xed\x48\x9d\xd6\x50\x08\xf7\xbe\x1e\x68\xc4\x12\x2f\x1b\x90\xb0\xbb\x87\xb2\xa2\xe6\x7f\x9b\xac\x9c\x30\x72\xe3\x5c\x7a\x8b\x9c\x27\xd8\xbf\x5d\x18\xe4\x36\xf9\x75\x2a\x67\x6f\xe2\xf9\xeb\xa0\xfa\xae\x96\xe7\xdc\x41\x66\x8c\xb8\x47\x0a\x1e\xa3\x37\xc4\x8d\xd1\x99\xce\xa5\xb7\xc8\x79\x82\x20\xff\xb0\xa3\x54\x0f\xce\xf0\x37\xdf\x93\x29\x6e\x48\xa9\xfd\x1a\xbd\x5b\x6c\x6f\x40\xb4\x96\xba\xc4\xee\x80\x4a\x6b\x5f\x5c\x76\x2e\xbd\x45\xce\x13\x3c\x73\x8f\x1f\x4c\xde\xfd\xac\x18\xb3\xf1\x70\xb1\x25\x91\x3e\xf5\x63\x71\x22\xb7\xdf\x85\xe9\xf9\x43\x62\xeb\x91\xec\xc5\x04\xe6\x73\xe9\x2d\x72\x9e\x40\xeb\x48\x86\x62\xc9\xd3\xe0\xfe\x1d\x3e\x7d\xd7\x45\xda\xd4\xf5\xdf\xa5\xde\x24\x69\x4e\x05\x06\x03\xcc\x84\x76\x07\x74\x99\xe7\x30\xf3\xa8\xf3\xff\x76\xa7\x9e\x55\xe8\x73\xa5\xeb\x69\x59\x9c\x25\x97\x3d\x3f\xe1\x3c\x64\xed\x0d\x52\x5a\xac\xf0\xd0\xaa\x1b\x26\xae\xd2\x68\x5c\x88\x35\x7a\x1a\x00\xad\xcf\x07\x71\xf0\x42\x4f\x40\x6e\x43\x3c\x3a\x6c\x5b\xb8\xca\x2c\x16\xbc\xf9\xa6\x68\x52\xb0\x33\xc6\x41\x0e\x45\xc9\xb3\x9f\x37\x60\x41\xcd\x36\xe5\x03\x14\xc8\x04\x70\xf0\x42\xbf\x6d\x75\x93\x7d\x93\x39\xe6\x4d\x8c\x68\xd6\x6b\x4d\x03\x3f\x21\x73\xb2\x8a\x1c\xcf\xb0\x25\x9d\x71\x35\xd3\x87\x5d\xce\xf6\xd0\x11\x56\x20\x0e\x5e\xe8\x9f\x46\xec\xda\xf2\x1e\x67\x4e\x60\x2c\x47\xde\xde\xf3\x95\xec\x60\xc4\x67\x32\xc1\xd3\x2f\x8a\x4c\xb8\x58\x9f\xb6\xb9\xf2\x17\x05\xd1\x2e\x88\x83\x17\x7a\xdf\x1f\xca\xcc\xbe\x7b\x0a\x0f\x9a\xf8\x42\x93\xd5\x03\x1e\x7b\xba\x8a\x11\x5e\x50\xbd\x17\x5d\xf9\x34\x66\xe4\x15\x43\x6b\x87\x18\xa2\xd0\x83\x38\xe8\x61\x0f\xc8\x13\x80\xca\xe6\x59\x0e\xdc\xac\xa7\xb7\x1b\xbb\xde\xa0\xc4\xdc\x19\x1a\xe1\x72\x37\xe2\x8d\x42\x81\xef\x77\x13\xfb\x79\x94\x1f\xf6\xb2\xc4\x0c\xe5\x4a\x90\x03\x20\x0e\xee\xc0\xb3\xac\x5c\xb9\xfd\xf7\x8e\x1c\x41\x84\xc6\xa5\x21\xb7\xf0\xe3\xb8\xe6\x66\xf1\x37\xb1\x82\x1d\xb5\x88\x3e\x98\x9d\xe4\x0e\x40\xc7\x0c\x81\x38\xb8\x03\x2f\xed\xb2\xee\x6d\x50\x7f\xa8\x8d\xbe\x5e\x12\x6c\xbb\x9b\x6e\x89\x31\x9d\xba\xd2\xa0\x54\x27\xff\xf3\xe9\x5e\x66\x27\x65\x26\xb4\xe0\x02\xc4\xc1\x1d\x08\xce\xfa\xc8\x31\x48\x4e\x8b\x17\x47\xce\x30\xa0\x8d\xda\x9a\xd0\xfe\xed\x40\x6d\x37\x73\x3b\xbd\x90\x09\xf3\x2e\x51\x6d\x1d\x74\xac\x23\x88\x83\x3b\x30\xfb\xe3\x6f\x59\x29\xd5\xc0\xc4\x51\xdd\x62\xe2\x1a\xa1\xb6\xcf\x78\x73\xf8\xbd\x21\x4a\x8a\xbb\x94\x79\xcb\x2c\x9c\x92\x69\x50\xa6\x04\xc4\x41\x0f\x7b\x40\x9e\x00\xf4\x0c\x3b\xcb\x81\xad\xd4\xa6\x2b\xdb\x5c\xcc\xb7\x9c\xa2\x35\x37\xcc\x5d\x24\xaf\x4b\x12\x0f\x49\x1f\x68\x6c\x35\x0a\xfe\xf8\x79\x0b\x7d\x4c\xa9\x1e\xd1\x77\x10\x07\x77\x60\x61\xfb\xb6\x35\xfe\x6a\xf8\x1f\xd3\x28\x37\x9e\xde\x12\xd3\xd3\x9e\x5b\x68\xca\xf9\x32\xfd\xf5\x99\x77\x2c\x55\x99\x8f\x72\x1e\x21\xda\x05\x71\x70\x07\x86\xf8\x94\xad\xa2\xa7\x47\x45\xf3\x1a\x77\x47\xfd\x62\x3d\xc6\xa7\xff\xca\xb2\x5d\xe2\xb6\x50\x6c\x57\x91\x79\x3f\x2e\x30\x71\x17\xd1\x2e\x88\x83\x3b\xf0\xcb\x36\xa8\x73\xb8\xf3\x52\x28\x0e\xb3\x77\xf8\x80\xf9\xce\x74\x15\xe6\xaa\x8d\xca\x46\x99\x20\x7b\x96\xcf\xfb\x8a\xbb\xe4\x50\xbb\x20\x0e\xee\x80\xcd\xa0\x2b\x56\x5d\xfb\xb1\xe3\x9e\xfe\xa6\x5b\x6a\x11\xbb\xdc\xc7\x71\xfe\x2f\xca\x5c\x5a\x6b\x4e\x1d\x5d\xec\x75\xb4\xbf\xa1\x00\x29\x88\x83\xea\x00\x20\x4f\x00\x1a\x50\x9c\xe5\x80\xf0\xd0\x4e\x81\xc3\x12\x7b\xde\xb2\xd5\x6d\x1d\xf3\xf7\xfd\x3c\x37\x23\xdc\x46\x02\x88\xe3\xea\xaf\x8c\xb6\x4f\xae\xf2\x3c\x81\xfc\x07\x71\x70\x07\xc8\xa2\xc7\xf7\x74\x18\xa5\xb6\x43\x4f\x5a\xb3\x17\x59\x1b\xff\xdc\x5f\xb9\xfa\xa7\x9f\x76\x9f\x88\xac\xad\x35\xbf\xd1\xa1\xdc\x06\xd1\x2e\x88\x83\x3b\x10\x7e\x41\x7a\x9f\x7e\x29\x8c\x6e\x7d\xa5\xdb\xc7\xe8\xa5\x70\xf7\x0c\x6f\x85\xf5\x55\xd6\x1e\x26\x9b\x0b\xa3\x6c\x9f\x9d\xad\xa1\x85\x4c\x20\x0e\xee\xc0\x3c\x1e\x76\xe0\x0d\x4d\xb5\x34\x83\xc8\x89\x92\x76\x1a\x13\x09\x8a\xa4\xef\x6e\x1f\x3c\x73\xe2\x35\x56\x50\xa3\x69\x17\x4a\x19\xa0\x6d\xb6\x00\x1c\xdc\x81\xfb\x06\x34\xe6\xf7\xef\xf7\xb1\x9f\xc8\xbd\xab\x2d\x90\xb0\xaf\xc0\x1d\x9f\xc8\x6b\x8b\xef\xf2\xfe\x61\x93\x2d\xb7\x6d\xcf\xfa\x09\xe1\x00\x88\x83\xea\x00\x20\x4f\x00\x1a\xdd\x9d\xb9\x96\xdc\xe4\xa5\x5c\x3a\x1a\xcf\x8d\xf9\x81\x3b\xf1\x9a\x5c\xb1\x33\xdc\xdf\x9a\xf1\xa6\x7e\xac\x1e\x5b\xe6\x67\x2b\x91\x6a\x9c\x40\x1b\xb5\x80\x38\xb8\x03\xf5\x16\xcf\x7d\x6d\x79\x79\x63\xfe\x7c\x55\x27\x53\xc5\x3c\xf9\x42\xe5\x50\xec\x7f\x68\x94\x32\x68\xe0\x93\x1a\xb3\x78\x53\x0a\xda\x4a\x15\xc4\xc1\x1d\xc0\x09\x52\x0e\xc1\xe1\xa0\xb8\x87\x9d\xc3\xf5\xc3\x37\x96\xe2\x51\xcc\xe9\xaf\x43\x0d\xf7\x8e\x7e\xbb\xa2\x91\xa1\xe3\x4c\x53\x68\x5b\x61\x10\x07\x77\xa0\xec\x69\xc1\xea\x71\x99\xa0\xaa\x6e\x0c\xde\xa7\xc5\xf9\xe6\xc3\x59\x55\xc7\x8f\x51\xc7\xf1\xbc\x72\x98\xb3\x16\x78\xa4\x6d\xb5\x88\x76\x41\x1c\xdc\x01\x9a\x17\x92\x98\xf4\x05\xbf\xde\xdb\xda\x2e\x24\xae\x5c\xe8\xa4\x79\x42\x6c\x25\xce\xae\xa9\xce\xb8\x59\x49\x2f\x37\x48\x38\x07\xbd\xfc\x83\x38\xa8\x0e\x00\xf2\x04\xa0\xa1\xf6\x99\x9f\x85\x03\x85\x84\x66\xb2\xb8\xe6\x9e\x1b\x13\xb9\x85\x67\x13\x89\x19\x0c\x66\x67\xfc\x14\x54\xdf\x08\xb0\x21\xe5\x7f\x34\x59\x9d\x06\x7d\x16\x06\x70\x70\x07\x34\x89\xe6\x0c\x6e\x92\x13\x45\x87\x6e\xd2\x8c\xa6\x8f\x6a\x98\x86\x63\x66\x3f\xc6\x66\x74\xe0\xee\x08\xaa\x8f\x4d\xbb\x67\x0c\xad\xcd\x06\x71\x70\x07\xb0\x5b\xb7\x4f\xb0\x31\xb5\xa2\x0f\x96\xb6\x0d\xc9\x9e\x98\x87\x0e\x61\x18\x0a\xe2\xab\xaf\x78\x0c\xfd\x6e\x19\xf4\x68\x29\x84\x4e\xe5\x02\x71\x70\x07\x2c\x6e\xcf\x64\x70\x46\xef\xf3\x4a\x13\x1b\xc5\x3a\x8d\xe9\xee\xd5\x34\x9d\xae\x30\xfb\x0f\x9e\xde\xf5\xbf\x14\xe4\x18\xa1\xc4\x83\x68\x17\xc4\xc1\x1d\x28\x1d\x0e\x55\x2f\x90\xd8\xc3\xc7\x57\x16\xce\x0c\x17\xe8\xe9\x49\x57\xfd\x5b\x75\x6d\xb9\xb2\x96\x20\x60\x40\x36\xef\x4a\x31\x07\xc2\x01\x10\x07\xd5\x01\x40\x9e\x00\xf4\xde\x73\x96\x03\x0c\x1c\x87\x53\x9a\x3b\x37\x93\x27\x0f\xee\x76\x8e\xbe\x77\x95\xd7\x7e\xa7\xd2\xfe\x72\x15\xc3\xef\xc3\xaa\x0c\x5f\xee\xed\x8f\xd0\x46\x50\x20\x0e\x69\x4c\x78\xe2\xcc\xd2\xd6\xe3\x59\x29\xb7\x7d\xc8\x66\xea\x2d\xdf\x23\xb7\x32\xed\xd8\x32\x62\xcc\x7c\xcf\x90\xd0\x3d\xc0\xf4\xc2\x5f\x68\x4c\x08\xe0\xe0\x0e\x9c\x7a\x5b\x9d\x90\x04\x1e\x5d\x0e\x74\xd1\x92\x28\x51\x50\x94\x90\x4b\x52\x43\x55\x0b\x2b\xfa\x32\xd3\x8e\xde\x15\xdb\xc3\x02\x4d\x04\x83\x38\xb8\x03\xa4\x09\x26\xf8\x55\x56\xbf\x23\xf4\x6a\x16\xc4\x2c\x42\x04\xd9\xff\x38\x2e\xaf\x06\x6a\x35\xb6\x5c\x97\x98\xd6\xe8\xac\x91\x86\x8e\x63\x06\x71\x70\x07\x7e\xa9\x67\x05\xc9\x3d\x8f\xaa\x08\x62\xb0\x44\xef\xd7\x19\xa6\xef\xbd\x72\xe1\x13\x65\xd1\xe3\x44\xa7\x6b\x6c\xa4\xaf\x0f\x54\x3b\x10\x0e\x80\x38\xa8\x0e\x00\xf2\x04\xa0\x97\xd0\xb3\x1c\xf8\x45\x40\xed\xd3\x81\x7b\x77\xba\xbd\xfb\x49\xc8\x1b\xe3\xfa\x24\x9a\xf0\xc6\x52\x7a\x37\x2a\x91\xcd\xde\x68\xe1\x9a\x50\x03\x68\x62\x15\xc4\xc1\x1d\xe0\xeb\x56\x0e\x91\x76\xfd\x9d\x48\xcf\x4c\xc4\x6f\x8d\xf6\xcd\xf0\xae\x42\x47\x34\x83\x69\x9b\x43\x67\xef\xbd\xc6\xe1\xc0\x4d\x51\x44\xbb\x20\x0e\xee\xc0\x07\x77\x92\x3b\x04\x5f\x65\x68\xf7\x93\x7e\x44\x75\xc4\x36\x57\x0e\x57\xe0\xc8\xaf\x95\xdc\xc7\x9f\x7e\x6b\x50\xa1\xe3\x42\x35\x8c\x68\x17\xc4\xc1\x1d\xb8\x11\x57\x84\x3a\x4e\x39\x19\xbd\xae\x2d\x92\xee\xef\xe0\x24\xb0\xb3\xaf\xf9\x34\xc0\xe0\xa5\x8d\x66\x41\xde\xe4\x27\xd4\x0e\xe8\x94\x2b\x10\x07\x77\xc0\xf0\x2d\x66\x55\x76\xad\xae\x9c\x40\xcb\x97\xbf\xf7\x07\xd6\x7d\x7f\x86\x17\xd2\xab\x90\xf2\x6d\xf7\x31\x53\x9a\x6d\x2b\x96\xf7\x20\x1c\x00\x71\x50\x1d\x00\xe5\x09\x40\xcb\x05\xff\x93\x27\x10\x41\xce\x13\x3c\xee\x9a\x66\xa0\x5f\x6f\x73\xdb\xba\x7a\x28\x83\xa7\x50\xd6\x74\x09\x73\x02\xfd\x24\x8c\x51\x64\xc0\x34\xb9\xb8\x8f\xe0\xe9\xb9\xec\xb4\xdb\x8c\x9c\x27\xd0\xc3\x76\x46\x27\x42\x5b\x7f\x51\x35\xfc\x68\xc6\x7b\x93\x3c\x45\xb7\x27\xc8\x25\x3b\xdc\xc0\xf3\x96\xf5\xf8\x84\x30\xce\xde\xc2\xb9\x4d\x9d\x80\xfa\x77\xd6\xed\x71\x1a\xfd\xf3\x08\xc3\x70\x65\x31\xd7\xe3\x32\x9a\x58\x84\x02\x65\xd2\x7d\xf9\x92\xca\x96\x86\x5b\x1d\xa8\xb7\xde\xfb\x31\x34\x43\xdf\x8a\x41\x1c\xfc\xf6\x50\xad\x77\xc1\xc4\xf1\xf0\xbb\x16\xdf\xb0\x60\x85\x1e\xba\x9b\x34\x4a\x88\xc2\x48\x60\xc1\x26\xbb\xf3\x57\x23\x39\x51\xf8\x00\xda\x77\x09\xc4\xc1\x6f\x8f\xbf\x06\xbb\x5a\xcd\x1e\xae\x98\x99\x38\x5f\x3b\x84\x74\x14\xfe\x9c\x1c\x7d\xcf\xc4\xa1\x73\x0b\xef\x47\x79\x21\x33\x7e\x69\x0c\x3a\x58\x0c\xc4\x21\x0d\x95\xc6\x7b\x31\x19\x87\xb4\xb5\xac\x65\xbf\x50\xf9\x3f\xeb\xae\x8f\x6f\x18\x0b\xb8\x7a\x8b\xb7\x98\xb0\x0f\x67\xd5\xba\x57\x4a\x0b\x1a\x2a\x01\x38\xf8\xed\x71\xca\xa8\x9c\x9a\xce\xfd\xdb\x8f\xef\x5e\x5b\x2b\x71\x84\xc7\x88\xbb\x7c\x31\xfd\x73\x9f\x0b\x03\x9d\x31\x05\x77\x8a\x13\xbf\x40\x53\x27\x20\x0e\x2a\x91\x80\x3c\x01\x48\xb6\xb3\x1c\x40\x4b\x1c\x24\x10\x8f\xc6\x14\x78\x6b\xfe\xb9\xec\x96\xa7\x9d\xca\x9e\x2f\x59\x66\xf7\xee\xee\x03\xda\x9a\x6e\x8e\x17\x68\xf8\x2e\xd0\x7e\x66\x00\x0e\xe9\xb5\x19\xa5\x5e\x59\x2f\xaa\x55\xc6\xd6\x34\x9f\x24\x41\xff\xfb\x00\x6d\xa7\x9a\x61\x48\x27\xfe\xcb\xa7\xd2\x4c\x24\x4a\x9f\x76\x36\xa1\xd7\x66\x00\x07\x77\x20\xe0\x22\x59\xf2\x2b\x1e\xff\x26\x93\x5b\xb3\xe5\x37\x1e\xb1\xd0\x4f\x64\x96\xe9\xbe\xb3\x4e\x40\xd3\x77\x74\xa2\xcb\x3a\xfd\x0e\x1d\x58\x06\xe2\xe0\x0e\x2c\xa7\x52\x5d\xd0\xe4\x3a\xea\x7a\xa2\xd0\xb0\x3e\xcb\x79\x52\x5e\x58\xf7\x8a\xa3\x30\x5b\xfe\xb1\x41\x00\x89\x33\xbd\xf0\xd2\x37\x68\x6f\x3f\x00\x07\x77\xe0\x26\x4a\x39\xeb\xc6\x62\xa7\xfe\x20\x1d\x7e\xcb\x56\xaa\x50\xea\xf5\x82\x07\xbc\xa8\x23\xd1\x02\x55\x0d\x58\xb9\xd9\x68\x2f\x87\x10\x0e\x80\x38\xa8\x44\x02\xf2\x04\xa0\xb5\xe8\x67\xe7\x09\x38\x08\x6a\xee\x64\xae\x34\xa7\xc6\xfd\x50\xea\xf6\x4d\x65\xb4\x7a\x8d\xaf\xfd\x97\x96\x79\xb1\x43\xb7\xb5\x1b\xf5\xf1\x08\xb3\x13\x62\x6d\x3e\x88\x43\xce\x13\xd0\x3e\xbd\x22\x1b\x32\x57\x4b\x7b\x27\xe9\x71\x60\x78\x94\xf7\xf2\x35\xdb\x8e\x44\x6d\x92\xdf\x9f\x7e\xcf\x1b\xe4\x5c\xd0\xe1\xc3\x42\xb4\x0c\xe2\x90\xf3\x04\xd8\x0d\xcc\x33\x98\x07\x9b\x12\xcb\x13\xaa\x87\x8f\x48\x47\x62\xde\xde\xf2\xcb\x7e\xf6\x3e\x66\x0a\xaf\x68\x5c\xd1\xfb\xa4\x8a\x0d\xd1\x32\x88\x0b\x94\x40\xc1\xfa\xdf\x2d\x27\xc9\x08\x74\x71\x7a\xc6\xb1\xf0\x38\x1f\x85\x05\x96\x7b\xba\x5e\x2d\x33\x16\xda\x61\x70\xda\x5b\x96\xe7\x5f\x5b\xe7\xc8\x20\x85\xf2\x04\xae\x4a\xcb\xab\x45\x8e\x65\x8a\x6a\x1b\x93\xc4\x13\xc4\x92\x77\xfb\x75\x64\x6f\x17\xc9\xd9\xfe\xc6\xb9\xed\x82\xc6\x23\x75\xd1\xed\x9f\x79\x02\x43\x36\xc1\x24\xc9\x08\xab\x27\xf3\x62\xfc\xd6\xa4\xe3\xde\x5b\xd6\x95\x8b\xf7\x6f\x78\x53\x89\xa6\xf4\x15\xb3\x84\x60\x5e\xfa\x27\xfa\x65\x51\xf9\x02\x39\x83\x9c\x45\xd1\x25\xe9\x2c\x94\xdf\xef\x3d\x9e\x55\x96\x8d\x6b\xd1\x92\x7a\x54\xcc\x8a\x09\xdd\xd1\xdd\xce\xfe\xbf\x97\x27\x00\x75\xee\x8c\x3c\x01\x06\x1b\x73\xd8\xa3\x0e\x1b\xef\xa4\x37\x4f\xd6\x1b\x66\xbf\xc8\xdb\x97\x56\xba\xfc\x10\xa0\xc4\x56\x23\x55\x4e\x3f\x69\x98\xf6\xfd\x07\x6a\x66\xed\x35\x39\x60\xdc\x4f\x2d\x41\x69\x7b\x3d\xe7\xe9\x0f\x9a\x0b\x1e\x3e\xc5\xae\xac\x42\x2b\x17\x2a\x09\x97\x02\x68\x28\x65\xfe\x81\xca\x4c\xd4\xf2\xd3\x49\x86\xcb\xa2\x70\xaa\x7c\x9f\x88\xdf\xea\x12\xf7\x4d\x2b\xd8\xc0\x6f\xbc\x9b\x35\xe7\xc6\xc3\xc7\x3f\xe6\x06\xe5\x09\x40\x97\xff\x4f\x9e\xc0\x0f\x29\x4f\x20\x1c\x69\x4e\x4d\x8b\x71\x7f\x7c\x20\xc8\xc8\x5a\xf2\x06\xf9\xf8\x38\xb3\xdd\x50\xc0\x8b\xfc\xc3\xac\xa8\xdb\x0e\x8c\x01\x17\x52\xce\x61\x20\x21\x8e\xa2\x08\xbf\xaa\xbc\x10\x5f\xe0\xf2\xb5\x84\x1f\x55\x4b\x44\x44\x1d\xf2\x5d\x1b\xe8\x6c\xa3\x21\xdf\x4f\x97\x72\x6a\x24\xae\xd8\x85\xa6\xa4\x9c\xcb\x07\x27\x3f\xe4\x3c\x41\xbb\x04\x99\x91\x2e\x73\x83\x26\x9b\xda\xd0\x17\xa3\xc2\x31\x8e\xd0\xfc\xbe\x20\x0e\xaf\xf2\x6c\xc9\xfe\xb5\x6c\xbc\x93\x26\xe5\xf3\xb8\x2c\x8a\x3a\xd2\x65\xc9\x23\xbe\xbd\xb1\x0f\x0d\xce\xd6\xca\x21\xa6\x9f\x6f\x4f\xba\xa7\x33\xe1\xd1\x5a\x58\x46\x6d\x90\xbb\xaa\x64\xf7\xca\xfb\xd5\x79\x9c\x01\x21\xe1\x87\x9c\x27\x60\xda\x8f\xfd\x41\x32\xfc\x64\xe7\x63\x02\x43\x88\x87\xca\x9e\x59\x10\x2f\x9e\x85\xbe\xfa\xf7\x2f\x5a\x5c\xdf\x31\x43\x06\xad\x47\xce\xa5\xb7\x5e\x48\x97\xfd\x3e\x74\xf3\xb7\x8a\x4a\xb3\xca\x4e\x58\x76\xfa\x1e\x99\x2d\x89\xe2\xc4\xd1\x5d\x4c\xbe\xa8\x3c\x1a\x07\x5e\x0c\x3f\xdf\x7b\xac\xe7\xd2\x5b\xe4\x3c\x81\x27\xae\x67\xe8\x43\x0f\xe5\x0a\x5f\x1e\xba\x6a\xdd\x69\x99\x89\x5f\x01\xf5\x5a\x0b\xba\x0e\xf8\x91\x87\x82\xa1\x82\x5d\x52\xe4\xe7\xd2\xdb\x0f\x48\x97\x75\x9d\xe2\x7c\x7a\xb0\x6a\x81\xad\x32\x42\xe0\x6c\x96\xa4\x2b\xf2\x46\x25\x73\x6f\x4b\xef\x60\x38\xed\x6d\xf9\x9d\x2d\xc9\xd8\xa4\x73\x1b\x11\x83\x6e\xd4\xb3\x46\x43\x6c\x6c\x17\xd1\x49\x74\x59\xd6\xd5\xf4\xd3\x9c\x6b\x88\xd7\xac\xcd\xba\x64\x51\x8e\x6f\x2e\xa8\x67\xa6\xb0\xa4\xe2\xac\xe4\x40\x1b\x3b\x80\x38\xf8\x68\x08\xc5\x43\xdd\xef\x20\x88\xfd\xad\xd3\xed\x12\x8f\xa9\x27\xbc\x4e\x01\xbb\xa9\x33\x4f\x1c\x8f\xae\x8b\xd2\x46\xb8\x2f\xf7\x4d\x69\x20\xda\x05\x71\xf0\xd1\xd0\xeb\x39\xbc\xc0\x3a\xa6\xb2\x47\x8c\x6f\x12\x3e\xf1\xbe\x74\xef\x36\xd7\x2e\x3d\x3a\xf4\x9d\xf6\xc7\x49\x13\x7d\xf7\xa4\xd5\x0a\x5a\x45\x0a\xe2\xe0\xa3\xa1\xe4\xe9\x88\x2b\xa5\x2f\x35\xee\xfe\x91\x50\xab\xaf\x37\xfa\x29\x43\x73\xea\xed\xd6\x1e\x91\x9b\x3d\x30\x12\x70\xea\xe3\xb7\x0c\x1d\xdb\x08\xe2\xe0\xbf\x77\x77\xb8\x4b\xb2\xa1\xe4\x87\x60\x54\x17\x03\x7d\x8f\x54\xf6\x5b\xbe\x54\x7b\xd4\x4f\x1e\xa6\x4f\x7a\x77\x1f\x2d\x93\x14\x70\x75\x21\x16\x93\x83\xb8\x40\x31\x6a\x94\xff\xde\x9c\xfe\xdf\xf3\x04\xa0\xaa\x79\x96\x02\xfb\x5a\xe8\xe1\xeb\xfa\x68\x29\x5b\x39\x5a\x99\x1d\xf3\x4d\x42\xfc\x9f\x2a\xd0\x0d\x8e\x70\x31\x08\x64\x5e\xb7\xca\xfe\x99\xc8\x85\xf6\x65\x03\x70\x70\x05\x62\x13\x03\x62\x1f\x6b\x73\x53\xcb\xa3\x71\x55\x1c\xaf\xd1\xe2\x5b\xe6\x64\x6d\xcc\x24\x7b\x45\xd3\xe0\xaf\x09\x8f\xbc\x19\xa7\x44\xb4\x0b\xe2\xe0\x7f\x52\xd4\xce\xd0\x2f\x1f\xfd\xa8\xb0\x85\x93\xc4\x35\x88\x1a\x97\x83\xb6\x5b\x06\x4a\xb6\x85\x33\xef\xb4\x36\x4e\xf8\x7f\x4f\x11\x83\xe6\xb9\x40\x1c\x5c\x81\x6a\xe2\xb7\x9f\x9d\x3b\x5f\x32\xf7\x0d\x3f\x88\x77\xe1\xd6\xd1\x9d\xbf\x14\xea\xa1\x6c\x7f\xe5\x64\x37\xa7\xe0\xdd\xd3\x22\x0b\x32\x44\xbb\x20\x0e\xfe\x7b\xb9\x1a\xa4\x32\xeb\xc8\x22\x12\xbf\xae\x35\x8e\x78\x32\x7c\xba\x95\x69\xcb\xe9\x4a\x59\x34\x98\xff\x84\x46\x21\xa8\x34\xff\x8f\x02\x42\x01\x10\x87\x50\xe0\xbf\x9e\x95\xff\xa2\x00\xe8\x09\x76\x96\x02\xdd\x9e\x7d\xbd\x68\x32\x9a\xcd\xa5\xd6\xa2\x95\x8d\x8d\x35\x42\xc7\x35\xfe\x68\x53\x43\x33\x89\xf9\x82\x6f\xfb\xf7\xcc\x13\xa1\xc3\x50\x41\x1c\x5c\x81\xbb\xa4\x3e\x03\xf7\x37\xdb\xfc\xb8\x5d\xd2\xc9\xf9\x02\xbf\xa2\xf3\x2c\xf6\x13\x94\x13\x2d\x86\x5f\x3a\xe0\xf4\xb1\x75\x7a\xa1\x83\x68\x17\xc4\xc1\xff\xa4\xf1\xcf\xd9\x82\x4b\xae\xde\xb8\xbf\xfb\xdd\x01\x3d\x78\x3b\xf3\x7a\x38\x9a\x0c\xae\x92\x34\xee\xc7\x92\x03\x3d\xaf\x18\x09\xaf\x15\x44\xbb\x20\x0e\xae\x80\x8b\x88\xc1\xea\xfc\x45\x2f\x75\x81\x11\x9f\x7b\x26\xa7\x11\x7e\x1e\xb6\x15\xc1\x0b\x9a\xe4\x4a\x7f\x93\x99\x04\xdb\xee\xf2\x53\x21\xda\x05\x71\xf0\xdf\x3b\x73\xcc\x94\xe8\x9c\xfc\xa4\x5e\x6c\x38\x15\xaf\x4b\xae\x5a\xc1\x48\xc4\x36\xfc\xc3\x5f\x3d\xc2\xa1\xbe\x6e\x17\xff\xc2\x3b\xc6\x88\x77\x22\x10\xf7\x1f\x05\xfe\x67\xe0\xf2\x2f\x0e\x80\x86\x13\x67\x39\xe0\x17\xb0\xea\xc0\xf3\x94\x2f\xa4\x54\xd8\x63\xe7\xb2\x4d\x36\xe9\xef\x86\x9a\x43\x4c\x1c\x3d\xf9\xdf\x28\xbb\xb9\x5f\x2a\xbd\xa0\x35\xa4\x20\x0e\x69\x5f\x72\x86\x1a\xef\x0f\xe2\xf9\x9f\xd0\x14\xf8\x2e\x39\x87\x3e\xbd\x66\xed\xb7\x16\xdc\x42\x64\x5f\xf0\xba\x96\x8d\x6f\xd5\xad\x14\x3a\xb4\x14\xc4\xc1\xff\xa6\x07\xe6\x0e\x0c\xec\x26\x4c\xe9\x81\xfe\xf2\x32\xe2\xe2\x54\xb7\x75\x92\x3f\xb1\x8b\xf3\x1d\x51\xd0\x57\xd3\x30\xb9\xf0\x2a\x43\x73\x2e\x20\x0e\xe9\xbd\xf8\xd3\xeb\x98\x8f\xe1\x21\xeb\x94\xcd\xbb\x76\xbb\xec\x84\xa2\xd2\x9f\x58\x4b\x84\x70\x63\x1c\x88\x77\xf0\x2a\x04\x0c\x53\xa1\xf5\xd4\x20\x0e\xfe\x7b\x35\x3a\xd2\x68\xf8\x4f\xa3\xb4\x59\x0b\x78\xc4\x23\xc9\xba\x7c\x05\x4f\xf2\xbb\xfb\x8e\x3d\xf4\x0c\x9f\x3d\x9a\x0e\xbb\xc0\xc7\x8d\x70\x00\xc4\x21\x1c\xf8\xef\x51\xe4\xbf\x2d\x29\x00\x8c\xed\xce\x72\xe0\x8a\xd5\xc0\x72\xfb\x6c\x0d\x8b\xde\x34\x5b\x05\x2f\xe3\xd0\xbb\x26\x54\xf9\xee\xd6\x88\xe8\x44\xd4\x3c\x2d\x4e\xd9\xdb\x5d\xd0\x16\x62\x20\x0e\xee\x40\xf3\x7d\xb5\x8d\xf2\x72\xd3\x2c\x0f\x63\x79\xf7\x37\x65\x81\x39\x78\x0c\x0d\x0e\x86\x63\xd7\xe2\xa9\x30\x6c\xae\xbd\xf0\x7c\x0d\x6d\x75\x04\xe2\xe0\x7f\xd3\xac\xa3\x30\x55\x03\xa1\x89\xe6\x39\xc6\x8b\x37\x0e\xd5\x2f\xbc\x22\xc0\xf5\x7d\x9b\x79\x23\xa2\x95\x6c\x0f\x43\xb5\x58\xe2\x17\x94\x27\x00\x71\x70\x07\xae\x4e\x8a\xad\xeb\x2f\x9e\x46\xd9\xf4\xe9\xd8\x1a\x35\x10\x6d\xdf\x6d\xe1\xb2\x08\x08\x26\xde\x5b\x35\xf0\xf7\x8f\x4e\x3e\x80\x3e\xa9\x82\x38\xf8\xef\xdd\x78\xd7\x94\xaa\xdc\x69\xfc\x94\x50\x88\x26\x70\x89\xec\xfa\xb5\x00\xef\x2d\xcf\xa2\x67\x9a\x5f\x4b\x37\x1c\xa3\x3b\xa9\x3e\x35\x20\x1c\x00\x71\x50\x1d\x00\xe4\x09\x40\x03\xed\xb3\x1c\xb0\x20\x40\x3b\x5e\x37\xed\xd7\x4b\xaa\xe1\x62\x77\x16\xa8\x93\xd8\xb7\x6d\x5d\x71\x92\x36\xb4\xf6\x0e\x11\x3f\x89\xf4\xcf\x5d\x87\x3e\xa1\x01\x38\xb8\x03\xed\xbc\x24\xdf\x22\x92\x77\xc5\xdf\xac\x2c\x08\xa0\xbd\xa8\x12\x79\xbc\x6b\x9c\x38\x2c\xb6\x44\x35\x50\xde\x24\xc4\x1f\x8e\xca\x85\x68\x17\xc4\xc1\xff\xa6\xdd\x63\x1f\x65\x6d\x48\x28\xe5\x49\xa9\x28\x33\x19\x1b\x0b\xa3\xba\xee\xcc\x8c\x0d\xb9\x0b\x5d\x47\x91\x08\xba\xb9\xb0\x94\xf1\x14\x7a\x76\x01\x38\xb8\x03\x91\xa2\xfa\x9f\x49\xbc\x74\x6f\x77\x10\xe8\xef\xbb\x5d\x2e\xe3\xae\x79\xf8\x20\xee\x39\x4d\xab\xcb\xf3\xba\x2d\x61\xc2\x57\x98\xe5\x88\x76\x41\x1c\xfc\xf7\x9a\x50\x65\x88\x5c\x89\x55\x28\x45\x35\x71\xd1\xf5\xb0\x7b\x9e\x7b\x8d\x73\xe7\x24\x46\xda\x7a\x6d\x25\xb4\xee\xa2\x5d\xdf\x5f\x67\x84\x03\x20\x0e\xaa\x03\x5e\xff\xee\x00\xe8\xad\xe7\x2c\x07\x2e\x2a\xa9\x33\x97\x4b\xd2\x53\x7f\xd6\xc1\x34\xc9\xf7\x7a\xe7\x3d\x16\xe9\xd6\x2b\xe0\xb0\x87\x69\xf8\xde\x24\xf5\xe2\xb5\x2e\x6b\x44\xdf\x41\x1c\xdc\x01\xbc\x27\xbe\xbf\x9f\xad\xdf\xf7\xf2\x4c\xbd\xe5\x30\xe3\x9f\xb8\x92\xf1\xa3\x71\x68\x4c\x5a\x84\xd8\x40\xde\x7e\xe3\x5d\xb8\xf6\x08\xa2\x5d\x10\x07\xff\x9b\xca\xc7\x2d\xe4\xb5\x46\xb6\xd2\x08\xfb\xae\x0f\xa4\x74\x2c\x78\xca\xce\x18\x35\xaa\x6a\xb2\x3c\xb1\x4c\xe4\x2f\x68\xdb\xcc\x75\x45\xb4\x0b\xe2\xe0\x0e\xa8\xb4\x3c\xc2\xc6\xbd\xfd\xe6\xd3\x92\x34\x3f\xb7\x4c\x46\xa6\x93\xfc\x64\xbe\x8d\xdd\xb5\xb8\xe2\x3f\x38\x87\x0b\x1e\xcb\xdd\x0f\xa0\xfc\x03\x80\x43\xaa\x03\xb5\x77\xec\xa8\x4c\x1a\xbc\x32\x9f\x3f\x78\xb2\xbb\xf9\x40\xd0\x1e\x83\x4a\x72\xb5\xa9\xaa\xc7\xfe\x9a\xdc\x92\xb0\x6e\xb7\x11\x54\x07\x00\x1c\x54\x07\x00\x79\x02\xd0\x2b\xe8\x99\x79\x02\x7b\x2a\x03\xb6\x9f\xe6\xe9\xbe\x14\x69\xfe\xb7\x7f\xfe\x36\x96\x6e\x17\x32\x7b\x50\xae\x56\xee\xa7\xe2\x4c\xfa\xa7\x4f\x72\x08\xca\x13\x00\x38\xb8\x03\x26\xdb\x1f\x0e\x31\x6d\xcd\x28\x2c\xd7\xfb\xd5\x50\xdb\x07\x44\x2a\x33\xed\xc6\x0a\xc8\xb1\x43\x32\x8b\xdf\xdc\xa0\xbc\x36\x07\x6d\x2b\x0b\xe2\xe0\x7f\x53\x29\x1b\x83\xeb\x0c\x6c\x79\x92\xf5\xf8\xfc\xbf\x42\x2f\x7d\xfc\xc0\xd8\xf6\xe6\x92\x0a\xea\x75\xa3\x84\x48\x25\xe7\xa5\x41\xc5\x59\x44\xbb\x20\x0e\xee\x00\xf7\x38\x8f\x25\x56\xe3\xe3\xd1\x35\xd9\x2e\x83\x57\xaf\x19\x0b\x68\x0f\xfa\x1e\x73\xd5\xbf\xbd\xb5\xc7\xd5\x7a\xa1\xfb\xca\x75\xe8\x33\x35\x88\x83\xff\x5e\xac\x7a\x14\xf1\xa2\x0b\x45\xbb\x8e\x0b\x25\x0f\x9c\xc2\x7a\x42\xde\x50\xd4\xad\x67\xfe\xde\xb7\xca\x4e\x46\x27\xed\x13\xfc\x46\x8a\x70\x00\xc4\x41\x75\xe0\x03\x20\x4f\x00\x9a\x54\xfc\x4f\x9e\xc0\x0f\x39\x4f\x90\xb2\x78\xb2\x24\xd8\xea\xa9\xf5\x37\x2c\x70\x93\x78\xb0\x7b\x7b\x7d\x7b\x23\xc1\x4f\x5a\x48\xfe\xe7\xfb\x27\xf4\x1b\x2e\xe4\xe7\xb2\x87\x3d\xca\x38\xf2\xe9\x99\x19\xf7\xd8\xbe\xf8\xde\x6f\x79\xee\xf4\x88\xfa\x74\x92\xcc\x32\x7d\xa1\xb4\xeb\x9e\xe2\xfd\xbc\xf7\x5f\xa5\x66\xff\x46\xce\xba\x9e\xcb\x34\x11\x72\x9e\xc0\x4e\x4a\xcb\xfb\x9a\xa8\x87\x97\xed\xcb\xd5\xab\xdc\xb3\x1f\x57\x8b\x70\x50\xf1\x3d\xad\x3b\xf4\xe8\xd6\x03\x77\x36\xa8\x62\xb1\xce\xa5\xb7\xc4\x48\x1f\x4e\xbd\xc2\x3b\xbe\x13\xb7\x25\xf9\xaf\x68\x1e\x95\x60\xce\xcc\x76\xba\xde\x9c\x30\xce\xf1\xa3\x13\x7e\xc7\x60\xfa\xd2\x5e\xf0\xe7\xee\xb9\xf4\x16\x39\x4f\x10\x97\x1a\xdf\x4e\x7a\xe8\x78\xf4\x33\x97\xf1\x19\xeb\xf5\x13\x32\x67\x67\x91\x4e\x86\xd0\xcd\x43\x63\xee\x4c\x99\xa5\x22\x07\x8b\x73\xe9\x2d\x2f\xd2\x65\xf9\xa6\x75\x06\xbd\x5a\xad\x0d\x6e\x9b\xfa\xe9\xb9\x7e\xa4\x5a\x2b\xfc\x29\xd5\x1d\xff\x2c\x18\x25\x10\x45\xd6\xef\x26\x51\xd0\xe3\x73\xe9\x2d\x72\x9e\xe0\x7e\xc6\xcf\xc3\x9a\x48\x34\x77\xda\x21\x96\xc0\x0b\xcd\x4d\x87\x8a\x49\xaa\xba\x56\x6d\xb5\xde\xdc\x32\xf7\xf0\x52\xee\xbc\xbf\x74\x2e\xbd\xd5\x47\xba\xac\x8e\x74\x90\xe8\xf0\xb7\xe5\x71\xfc\x06\xd1\x53\x06\xaa\xb5\x96\xf9\xea\x23\x3e\xcd\x74\x3e\xa9\xfd\xcb\x4b\xf7\xcc\x4f\x1c\x78\xce\x6d\x0a\x10\x74\xa7\x9e\x55\xe8\xb9\xcc\x99\xa3\xf4\x5d\x3e\xa3\x3c\x9f\x95\xe9\xc6\xed\xe3\x98\xe6\xff\x78\x97\xe2\xb6\x74\xe9\xa0\x2c\x0e\xf7\x4c\x06\x5d\x18\x74\xc4\x3b\x88\x83\x17\x7a\xb3\x90\x80\x86\xe6\x5d\x37\x0d\xfe\xac\xcb\xb8\xce\xa1\xbf\x38\x2d\xaa\x13\xee\x6a\xaf\xad\x13\x13\xa1\x25\xa0\x5f\xa4\xd3\x5d\x42\xb4\x0b\xe2\xe0\x85\xf3\xd2\x72\x1b\xc7\xc5\x68\x6f\x81\x29\xe6\xfa\x1a\xfe\xb1\xe0\xba\x47\x7d\x34\x0a\xec\x51\x8f\x72\xf4\x89\xb8\x43\xbf\x6e\x18\x43\xfb\x90\x82\x38\x78\xa1\x57\x20\x8b\x8d\x65\xc5\x2f\xb8\x8d\x9a\x19\x75\xcb\xce\x39\xc0\xe0\xd6\xbe\x15\x27\x39\x31\xfa\x07\x7a\xb3\xca\x97\xbc\xcb\x38\xd0\xd4\x22\x88\x83\xff\x5e\xbe\x2f\x98\x19\x57\xda\x1f\x5f\xe2\xd8\xb2\x92\x79\x86\x71\xe2\x34\x73\x4d\xcd\xaf\xfc\x53\xa7\x15\x2b\x2f\x43\xa6\x93\xce\xb5\x15\x44\xa1\x07\x71\xd0\xc3\x1e\x90\x27\x00\x95\xcd\xb3\x1c\xc0\x3c\xd8\x20\x50\x6c\xa5\x35\x61\xfb\x42\x6a\x84\x4d\xd7\x16\x94\xde\x6e\x15\xc9\xac\xee\x4b\x3e\xfe\xb4\x74\x6f\x6e\xc5\xb1\x0a\xd1\x77\x10\x07\x77\xa0\x4a\x92\x5b\x65\x70\xe9\xa9\x4a\x4e\x64\x55\xe8\x36\xc5\x2c\x4b\xb3\x76\x65\xba\x85\x88\x94\xfa\xb2\xb0\xeb\x65\x0b\x46\xdc\xfb\x88\x76\x41\x1c\xfc\x6f\x8a\x9e\x49\x52\x76\x3b\x30\xf1\x19\x85\x02\xda\x07\xa6\x8f\xfb\x5a\x57\x32\xdd\xf0\xf0\x69\x7e\x5c\xfa\xae\x69\x57\xf6\x74\x99\x10\x9a\xac\x00\x71\x70\x07\x28\x7e\xf2\x97\xac\xfa\x78\x2f\xe3\x2d\x3d\x78\x3a\x7b\x54\xbe\x6d\x92\x23\x6e\x24\x7b\xdd\xd3\xa4\x06\xd3\x43\x2c\x42\xf4\xde\x36\xb4\x07\x0a\x80\x83\xff\xde\x1d\x27\x15\x1b\x0e\xec\xae\x8b\x7a\x8b\xdf\x4c\xf4\xf3\xa3\x89\xdb\x78\xe8\x9e\x35\xa0\x85\x37\x49\x98\x1f\x6b\x04\x3b\x39\xcd\x22\x1c\x00\x71\xd0\xc3\x7e\x1c\x70\x40\x25\xe0\x19\x76\x96\x03\x7f\x46\xd9\x94\xa6\x5c\xd2\x2e\xfd\x60\xee\xf4\xc5\xf4\xd1\xbc\xdb\x89\x2d\x58\x40\x55\x35\x72\x10\x3c\x3a\x62\xb8\x9d\x15\x09\x0d\xf8\x40\x1c\xdc\x01\xaf\xc9\x0a\xd4\x61\xc6\x1b\x9c\x4d\xa1\x7e\xf2\x63\xd3\x39\xa2\x65\xdf\xfa\x9a\xd3\x4c\x7d\x3c\x78\xaf\xef\x3f\x28\x56\x5c\xa3\x43\xb4\x0b\xe2\xe0\x7f\xd3\x17\x79\x92\x2c\xc9\x0f\x16\xbb\xaf\x95\x15\x33\x6c\x4c\x3e\xfd\xe3\xd1\xde\x7a\xca\x5a\xeb\x5f\x3a\x4d\xf1\xb6\x24\x2c\x7d\x0e\x7a\x49\x01\x71\x70\x07\xb0\x52\x35\x09\xb1\x46\x74\xdc\x19\x04\xd2\x23\x7e\x66\x3c\x43\x91\xe1\x79\x2d\x99\xe3\xc7\x6b\x27\x6c\xde\x70\xab\x6e\xa6\x53\x13\xd1\x2e\x88\x43\xfa\x74\xa1\xa9\x3f\xec\xa2\x2c\xfd\x73\xcc\x23\x6a\x1c\xeb\x7a\x27\xd1\x87\x4f\xc7\x1c\x84\x24\x02\x0b\x4f\x56\xbe\x77\x5b\x2e\xef\x94\x22\x1c\x00\x71\x50\x1d\x00\xe4\x09\x40\x03\x8a\x33\x37\x96\xd1\x1b\xca\x78\xf3\x5b\x32\x84\x24\xcf\xf3\xd7\x92\xa2\xfc\xe6\x8a\xfe\xa8\x45\xcd\x7a\x3a\x5e\xd6\x45\x9c\x91\x99\x30\x11\x0a\xe8\x33\x08\x80\x83\x3b\xa0\xde\x88\xf2\x47\x19\x3b\x13\x55\xf3\xb3\x2b\xf1\xfe\xf5\xd2\x52\x07\xd1\x92\xa9\x8f\xd1\x29\x0c\x49\xa7\xfc\xef\x0f\x2f\x5e\x83\x0e\x3d\x04\x71\xf0\xbf\xe9\x68\xca\xd7\xe8\xa7\x95\x73\x7f\xb2\xc5\x92\x65\x7e\xfd\x15\xd7\xab\xd8\xb2\xbc\x4a\x57\x42\x32\x4f\xf0\x93\xe4\x22\xbb\x8d\x01\x34\x67\x0f\xe2\xe0\x0e\x30\x53\x89\x1b\x63\x93\x84\xde\xe4\x9c\x8b\xc8\x95\xa3\x8b\xbf\x16\x76\xaa\x9b\xa9\x72\xff\x26\xd7\x6a\xf7\xca\x64\xd9\x03\x36\x5b\x44\xbb\x20\x0e\xfe\x7b\x51\xa6\x4e\xfc\xfe\xd6\xa1\xfe\xfc\x7a\xd0\xb4\xed\xd3\x24\xd5\x84\xaa\x46\xe3\x78\x4b\xf7\xb3\x79\xf6\x44\xba\x60\xc7\xbd\x5b\x7b\x08\x07\x40\x1c\x54\x07\x88\xff\x7d\x81\x14\x68\x74\x77\xe6\xbe\xe4\x72\x3c\x98\x4f\xf5\x28\x82\x8b\x3e\x6a\x57\xb3\x4b\xa5\x8d\x71\x5d\x6f\x1d\xc7\x2e\x68\x90\x90\x6a\xc6\x5d\x7c\xa4\xf1\x02\x7a\x6e\x83\x38\xb8\x03\x91\x12\x7e\xb3\x53\xb4\x3a\x64\x78\x3b\x4c\x0f\xf0\xca\x50\x6a\xae\x9d\xd0\x19\xcc\x1d\xa1\xe7\xa2\xc7\x59\x71\xdc\x64\x7d\x7f\x0a\x4d\xa8\x00\x38\xf8\xdf\xb4\xfc\x76\xa7\xa4\x57\x5f\xec\x87\x97\x5e\xbb\xbe\x06\x9b\x92\x3e\x98\x72\x7a\x8e\x7f\x12\x78\xf4\xf2\xe6\x7a\xbb\x3d\x85\xb0\xb5\xa1\x4d\x80\x00\x1c\xdc\x01\x96\x84\xf5\xf5\xc9\x8e\x80\xd8\x82\x76\x4e\xb4\x40\x41\x1d\xf2\x65\xee\x5a\xf1\x7b\xec\x43\xcd\xe9\x89\xb9\xfb\x38\xfb\x8b\x89\x88\x76\x41\x1c\xfc\xf7\x7a\xa8\xa8\xbe\xd2\xfc\x45\x51\xe8\x58\xc0\xd9\xaa\x27\x74\x63\x48\xab\x82\xdb\x74\x51\xe9\x73\x8a\x17\x6d\x05\xe6\x10\x56\x4f\x20\xc2\x01\x10\x07\xd5\x01\x40\x9e\x00\x34\xd4\x3e\xcb\x81\x48\x94\x59\x14\xfb\x37\xa1\x0c\x66\xfa\x34\x0c\x2c\xe3\x5e\x72\xa5\x34\x39\xb2\x5f\xaa\xc2\x9a\x09\x3c\xda\x3e\xf3\x55\x50\x41\xfb\x71\x83\x38\xb8\x03\x7a\xd2\x7d\x4d\x93\x51\x19\xde\xd3\x61\x97\x2e\x2d\xe8\x2a\x63\x31\x60\x28\xbe\xfb\x95\xe6\x3e\xa7\xe5\x67\x61\x92\x40\x49\xfb\x1e\xd1\x2e\x88\x83\xff\x4d\x95\x1b\xef\x85\x7a\x27\x85\x75\x6b\xf4\xd3\x4d\x9b\x25\xfe\x1a\x39\xb8\x93\xce\xa3\xcd\x68\x34\xa7\xa1\x85\x33\x6b\x89\x25\xd7\x84\x68\x17\xc4\xc1\x1d\x20\xdc\x34\x6d\x8c\x51\x1b\xd1\x39\x4c\xf7\x6d\x72\x52\x17\xce\x7d\xe5\x63\x59\xe5\x38\x7b\xd4\x40\x4c\x9e\xff\x29\xb8\xfa\xb8\x11\xda\x5c\x05\xc0\xc1\x7f\x2f\x91\x70\x80\x6e\x4d\x92\xba\xab\xe1\x9d\xbc\xa0\xd8\xf7\xde\x55\xd5\x9d\x93\x9b\x7f\x8e\xf3\xc9\x4d\xad\xe5\xbc\x36\x6c\xea\x09\x10\x0e\x80\x38\xa8\x0e\xf0\xfe\xbb\x03\xa0\xf7\x9e\xb3\x1c\xb0\xa1\x68\x5b\x3f\x26\xbf\x4c\xb9\xf2\xbb\x3e\x92\x04\xe3\xed\x14\x25\xd1\xc7\xa8\x9c\x05\x6c\x29\x1b\xdc\xf8\xf2\xac\x6c\x45\xe8\xd0\x4f\x10\x07\x77\x20\x31\x62\x1d\x77\xc7\x4c\xe2\x52\x88\x6d\xcd\x6b\x86\x92\x9f\xea\xc9\x15\xef\x1c\x82\xde\xdf\xa1\xa8\x32\xaf\x30\xfa\x4b\xfb\x00\xca\xae\x82\x38\xa4\x73\xeb\xe3\xde\x4a\xbc\x70\x4b\x79\xc1\x9d\x9a\x8f\xd5\x6f\x4d\x58\x8b\x4e\xbd\xd0\xc6\xca\xfe\xc8\x66\x69\xb9\x57\x54\x6b\x68\x15\xda\x50\x02\xc4\xc1\x1d\x30\xb9\xbb\xa6\x57\xb6\xde\xf8\xae\xa0\x47\xd0\xa8\x20\x27\x56\xda\x58\x3c\x41\x68\x2d\x8e\x52\xd7\xf4\xef\x81\x73\xe9\x45\x7c\xe8\x7d\x03\xc4\xc1\x7f\x2f\x3e\x5e\x63\xb6\x5b\x76\xd5\x94\xba\xd6\x6c\x46\xe2\x4b\xd3\xd8\xbc\xec\x5b\x38\xa4\x8f\x1a\x89\x1b\x3c\x99\x2a\x96\x05\x76\x74\x10\x0e\x80\x38\xa8\x0e\x00\xf2\x04\xa0\x97\xd0\xb3\x1c\xe8\x4a\xc8\x68\xf0\x2d\x73\xfd\x69\xff\xda\x8a\xac\x43\x61\x9d\xe5\xd4\xa1\x31\x3b\xf7\xda\x46\x93\xd1\x1c\xcd\x9f\x28\x8d\x0f\x16\x88\xbe\x83\x38\xb8\x03\xc3\x12\xd1\xb4\xb7\x2a\x29\x92\xd6\xae\x30\xae\xac\x69\x3d\xf4\x46\xcb\xf1\x31\x35\x64\xbb\x60\x46\xcc\xd6\xd5\xc5\x7d\x4f\x0c\x1f\xd1\x2e\x88\x83\xff\x4d\x5b\xd4\xdc\x48\xb3\x3e\x10\xdf\x6e\xf0\x96\xaf\x24\xad\xef\x49\x49\xca\xed\xe2\x5c\xf6\x3e\x70\x54\x36\x2d\xa6\xaa\xcc\x9f\x0a\x44\xb4\x0b\xe2\xe0\x0e\x34\xf1\xdc\xa0\x91\x48\x73\xd7\xa0\xe2\x34\x31\xff\xea\xd6\x1b\x6e\xeb\x9b\x66\xb1\xc5\xf1\x65\x74\xe4\x25\x41\x4a\x53\xdd\x13\x28\x1b\x0f\xe2\xe0\xbf\xd7\x87\xf8\x33\xe9\xdd\x87\xb7\xaa\xf6\x07\x27\x84\x13\x9e\x6b\x8a\x3c\x1e\x9e\x73\xf1\x28\xee\xc2\xe6\xfc\x10\x30\xd4\xc9\x3a\x99\x88\x70\x00\xc4\x41\x75\x40\x1f\x90\x27\x00\x2d\x17\xfc\x4f\x9e\xc0\x0f\x39\x4f\x40\xef\x47\x20\xbe\x1d\x74\xc3\xb5\xfa\x21\xd5\x5b\x5a\xe2\xdb\x18\x4f\x4c\xd7\x74\x4a\x0a\x6f\xd6\xa1\x16\x7c\xd1\x48\xbb\x19\x7a\x2e\xbb\xb1\xa2\x24\x20\x5d\xd6\x78\xee\xb3\x9c\xb9\xf3\xc3\x4b\xf5\x1d\xdc\x2d\x1a\x27\x6c\x5e\x79\x71\xc1\x96\x7f\x36\x7b\x56\xcd\x6c\x6e\x51\xa3\x39\xfa\x5f\x38\xb7\xa9\x13\x50\xff\xce\x5c\x3a\x23\xac\xa6\x2b\x75\xa9\x1e\x7f\xe1\xc7\x37\x86\x30\x19\xf7\xcb\x12\x6f\x3d\xae\x90\xa3\x79\x64\x72\xfd\x74\x6f\x94\xe7\xd4\x84\xce\xb0\x06\x71\xf0\xdb\x43\x81\x3b\x62\x35\x7e\xf2\x32\x43\xf7\x5a\xbb\x33\x51\x93\x86\x57\x87\xd3\xfe\xf1\xbe\x25\xc6\x3d\x81\xda\x27\x71\x94\xf7\x58\xa0\x39\x72\x10\x07\xd7\x8d\x98\x3a\xff\x63\xc5\xf0\x93\xa7\x57\x57\x27\x93\x27\x64\x4d\xbd\x95\xc2\x59\xda\x58\xb7\xe6\xae\x89\xf7\x18\x56\xcf\x32\xa0\x41\xe7\xae\x83\x38\xf8\xed\xb1\xfd\x7e\xe9\x13\x86\xe9\x1f\xba\x4d\xe9\xfc\x45\x07\xea\x57\xa1\x7e\x93\x0d\xee\x43\xc6\xba\x8a\xfb\x8b\xca\xfc\x3c\xb4\xbf\xa1\x9c\x02\x88\x83\xff\xde\x52\x82\x69\xa2\xf2\xc7\xa6\x0f\x1f\x2e\xd3\x1e\x7c\x45\xf1\x7b\x87\xc7\xca\xdb\x35\x34\x8f\x81\xee\x67\xa5\x41\x33\xa3\xf0\x2b\x03\x8a\xdd\x01\x38\xa8\x44\x02\xf2\x04\x20\xd9\xce\x72\x80\x7c\x84\x50\x22\x10\x83\xf3\x13\x7b\x1f\x8d\x28\xbb\x81\xf1\xeb\x2e\x05\xd4\x43\x66\x32\x19\x26\x0f\x77\xe1\x61\x26\x14\x09\x68\x39\x12\x88\x83\x3b\x70\x4c\x35\x7c\x7f\x05\xb5\x34\xf4\x4b\x8c\x8c\xe8\x69\x76\x7c\xfb\x77\xaf\x51\xba\x30\x81\x18\xe6\xfd\xdf\x9d\xfd\x17\xde\xea\x11\x20\xda\x05\x71\x48\x7b\x6f\x61\x17\x06\xbd\xb2\xef\xde\xb8\xfa\x43\x02\x67\xd1\xe3\x1a\x25\xe3\xba\xa9\x8c\x50\x57\xdf\x95\xdb\xe2\xfa\xed\x53\xde\x15\x50\x04\x1b\xc4\xc1\x1d\x18\x29\xfa\x25\x81\xcf\x1e\x6a\x4e\x14\x93\x2a\xda\x93\x72\x03\x2b\xcd\xa6\xf8\x57\x28\x4d\x63\xf1\x81\x78\xfc\x93\xb4\xa5\x5c\xe8\xdc\x03\x10\x87\x14\x15\x55\x66\xf9\xa8\xa7\xc3\xae\x4e\x93\xc5\x7c\x68\xe1\xa3\x69\x98\x9c\xf0\xd2\xe1\x03\x5b\xca\x4d\x54\x0a\x4b\x73\xb4\x41\x3f\xe8\xb5\x19\xc4\x41\x25\x32\xe1\xdf\xf3\x04\xa0\xb5\xe8\x67\xe7\x09\x3e\x77\xb0\x89\xa0\xb8\x7b\x89\x11\x12\x63\x6f\xa8\xdd\x17\x8e\x5c\x95\x36\xfa\x7d\x67\x56\xcf\xe2\xe8\x4d\xb8\x9d\x06\xe5\x45\x2a\xc4\xda\x7c\x10\x87\x9c\x27\x48\xd9\x7e\x7f\xb0\xe6\xe8\x26\xe4\x1e\xea\x33\x23\x5f\x85\x7b\x47\xd1\xef\x5a\x3b\xf7\xfa\x9d\xfd\x23\xd5\xbd\xaf\x83\xad\x8e\xbc\x88\x96\x41\x1c\x72\x9e\x40\xbd\x77\xb8\x71\x20\x25\xe3\xa7\xc5\xd5\xf7\x12\x0a\x97\xc6\xaa\x36\xef\x2b\xb8\x85\xed\xf6\xda\x11\xb6\x75\xde\x60\x16\xb8\x68\x86\x68\x19\xc4\x05\x4a\xa0\x50\xff\xef\x96\xf5\x07\xea\x15\xde\x26\x5e\xa9\xff\x16\x5b\xce\x53\xa0\x60\xeb\x4f\x28\x3c\xdb\xa4\x61\x63\x61\x92\x5b\x20\xc9\xc4\xbb\x9a\x62\xfb\xff\xcf\x13\x3c\x7a\x3a\x6c\xd2\x92\x72\xd9\x61\x28\x6a\xfc\xc0\xef\xae\x91\xf3\xc3\xe9\xf9\x09\x1e\x27\xcc\xb4\x50\x26\xec\x2e\xc2\xa4\xa1\x7f\x86\x04\x9a\xe7\xeb\x38\xe3\x53\xb7\x51\x8c\xcc\xb7\xb8\x3a\xb1\xab\x54\x9a\x77\x74\x70\x97\x1f\xab\x75\x1c\x92\xf1\xad\x66\x32\x34\x92\xfe\x03\xf5\xbe\xe1\x25\xf4\x40\x4a\xa8\xd5\x5b\xcb\x2b\xfd\x08\x7f\x2a\xbd\xa2\x5a\x71\x40\x7b\x23\x41\xd1\x93\xcc\xf0\xd8\xfe\xba\xea\xde\xff\xbd\x3c\x01\xa8\x73\x67\xe4\x09\x14\x77\xe8\xc4\xb4\x6d\x32\xf1\x7a\xd9\xdb\xfa\x87\x89\x1d\xea\x39\x23\x08\x8c\xe7\x67\x7b\xcd\x0b\x97\xda\xfe\x38\x37\x95\xfd\xf3\xe4\x9e\xa5\xaa\x65\x06\x63\x8c\x79\xf3\x68\xaa\xeb\x99\xc4\x63\x9d\xec\x55\x7a\xa8\xdf\xd0\x5d\xa9\x4f\x2e\x2b\xd9\xee\xb5\xb7\x95\xd8\xfe\x73\xf6\xab\x62\xaa\xcd\xd3\x74\xb0\x09\x5f\xb9\xa3\xac\xd2\xc0\xb1\x6f\x36\x39\xa9\x97\xe7\x93\x4b\x9f\x13\x85\x33\x55\x64\x45\xe5\x33\x28\x4f\x00\xba\xfc\x7f\xf2\x04\xcd\x48\x79\x02\x95\xe2\x79\x47\x03\x56\xb3\xc8\xed\xbb\x62\x2e\xd1\x77\xac\x6e\x87\xd8\x3f\x33\xf8\x40\xbb\x2a\x73\xa4\x3e\x74\x83\x55\x6f\x4f\xf4\x1c\x06\x12\xe2\x22\x48\x79\x02\x59\xef\x7d\xc9\xcb\x02\xe9\x7d\xe4\xea\xb4\xf3\x6f\x47\xc2\xa3\xe7\x5c\xbb\x9f\x59\xe5\x5d\xa0\x53\x68\xc9\x7f\xa3\xd3\xb6\x35\x7b\x1e\xc3\x97\x66\xe4\x3c\x81\xf0\xbd\x51\xf9\x34\xd7\xef\xc6\x17\x9c\x92\xeb\x6b\x0d\xf1\xc6\x3f\x54\xf9\x3f\xe4\x7c\x6a\x15\x73\xca\x26\xbf\x6b\x46\x9e\x7b\x2e\x1b\x58\x89\x20\xe7\x09\x54\xd8\x1f\x35\x4d\x6c\x2d\x3f\x4a\xa2\xb9\x3f\xa5\xf3\xa3\x75\x73\xb5\x56\x8a\xb2\x5e\x7b\xcf\x22\x3d\xcc\xfe\xc7\xed\x5c\xeb\xb0\x73\xe9\x2d\x72\x9e\xc0\x5e\xba\x1a\x2d\xf0\xa9\x76\xf2\xfb\x85\x0c\xf2\x08\xd7\x4a\xd1\xf7\xca\x6f\xca\x64\x4b\xdf\xf8\xca\x09\x2f\x24\x2f\xf1\xba\x9f\xcf\x21\x10\xc8\x79\x02\x29\xcf\x8d\x37\xf8\x25\x78\xde\x02\x12\x21\x11\x8d\x6a\x3c\x5f\xc8\xf1\xb2\xbf\x47\x92\x4e\x7c\x61\x94\x3f\x2d\x6c\xa2\xb4\x3a\x97\xf4\x44\x33\x72\x9e\x20\xbb\x1d\xd7\x77\xe4\x5e\xfb\x43\x2e\x46\x85\x6d\xed\xf4\x8c\xb5\x95\xb8\xe7\x0b\xa8\xc9\x2d\x3f\x08\xb7\x4a\x8b\x1d\x84\x24\xce\x45\x29\x11\xe4\x3c\x41\xce\xfd\x16\x9f\xfb\xec\x41\x7a\x8f\x73\xc6\x52\x48\xac\x78\xe6\x58\x49\x99\x19\xd1\x78\xca\x16\x28\xad\x3f\xe4\x86\x05\xbd\xe8\x3a\xb7\x11\x31\xe8\x46\x3d\x73\x57\xea\x43\x0d\x52\x67\x96\x67\xce\xa7\xbf\x47\xc9\xe5\xd3\xa8\x88\x92\x24\x6f\xd8\x55\x3d\x53\x3f\x7a\x19\xe1\xba\xf5\x50\x3e\xfd\x1e\x62\x14\x00\xe2\xe0\xa3\x21\xf3\x00\xf2\xc5\x0c\x36\x93\xc6\xc9\x13\xe2\x2f\x6a\x6a\x89\x36\x9e\xa7\x71\x4f\x0c\xb9\xe7\x75\xae\x0a\xa1\x33\xb2\x87\x26\x41\x9b\xfc\x80\x38\xf8\xe8\xc2\x22\xb8\xfa\x4a\x6e\x10\x76\x6b\x7c\xb7\xaa\x4f\xbf\xbb\x4f\x7a\xce\x73\xc7\x67\x9d\x09\xc1\xae\xf6\x7b\x56\x4a\xef\x5c\xbe\xd9\x41\xab\xdd\x00\x1c\x7c\x34\xa4\xf8\x01\xed\xa5\x2b\xcd\xfc\xb7\x8c\xda\x46\xbb\xd8\x9f\xe8\x3e\x35\x74\x29\xef\xdc\x99\x7a\x89\x25\xf4\xbe\x26\xc4\x2b\x2c\x41\xa9\x4d\x10\x17\x28\x86\x22\xf2\xcf\x76\xc5\xa7\xe6\x6d\xd2\x73\xb4\xc2\xfd\xdf\x54\x7d\x76\x28\x42\xe1\xd7\x59\x9d\xe5\x78\x15\x4d\x6b\x4b\xbb\x9c\x76\x1c\xcc\xb4\xfa\x0a\xb1\x98\x1c\xc4\xfd\xd7\xff\xed\xbf\x37\xa7\xff\xf7\x3c\x01\xa8\x6a\x9e\xa5\x80\xcf\x9d\xbe\xda\x57\x63\xe8\xe4\x84\x35\x73\x04\x3c\x72\x57\xf7\xb6\x07\x0f\x7f\x3d\x8b\x74\xee\x7e\x4c\x7c\x29\x45\xba\x5c\xe7\x2d\xa2\xeb\x20\x0e\xae\xc0\xd6\xc4\x53\xf7\x53\x62\xdc\x65\x2a\x9a\x37\x6b\x77\x30\x43\x29\x04\x7e\xc7\xe3\xdb\x0b\x88\xed\x1e\x57\xcc\xbd\xa4\x2f\xf6\x6b\x80\xf6\xbb\x02\x70\x70\x05\x22\xec\xef\x7e\xec\x4d\xcc\x8d\xfb\x54\x52\x12\xb3\xc5\x85\x19\x48\xfd\x78\x36\x74\x25\x46\xf1\xed\xd7\x8b\x6d\x29\xcd\x17\x1a\xa0\xfd\x68\x40\x1c\xd2\xbc\x91\xcf\x82\x4b\x63\x0a\x47\x71\xdf\x94\x24\x49\x76\xe8\xbe\xf8\x1d\xdd\x27\x91\xb8\xd5\xa3\x4d\x57\x9c\xe7\xa6\x39\x5d\xda\xa0\x6f\x89\x20\x0e\xae\x40\xc3\xa5\xd8\xcb\x46\x68\x93\x5e\x4c\xd8\x79\x11\xf2\x3f\x47\xc9\x4a\xf0\x98\x13\x49\xec\xfa\xe7\x6b\x29\xd1\x48\x6a\x83\x7b\xb3\x11\x0a\x80\x38\x84\x02\x22\xff\x9e\x27\x00\x3d\xc1\xce\x52\x40\xeb\xe1\x27\x14\xf9\x48\xff\xa9\x6f\x11\xae\x64\x8b\x44\x5f\x1f\x1c\xed\x30\x71\xbc\xe5\x96\xe1\x1a\xe2\xb5\x74\xdb\x44\x3b\x42\x43\x74\x1d\xc4\x21\xbd\x13\xf9\x2d\x6c\xfa\x1d\x7e\x4a\xce\x92\x16\xf2\xcb\x69\x41\x71\x12\x2e\xa4\xa2\xcc\xb5\x9a\x78\xf5\xb0\xc3\x59\xaa\xb5\xee\x4e\x1f\xf4\x4e\x04\xe0\xe0\x0a\x5c\x55\xd0\xab\x3d\xde\x45\x27\x25\x2d\x55\xba\xbd\xad\xa8\x9b\x9f\xa6\xbb\x48\x25\x9b\xcf\x93\x33\x39\xd5\xbe\xc0\xdf\x2c\x34\x07\xad\xf7\x05\x70\x48\x5b\x91\xf8\xee\x36\x3f\xe9\x59\x51\x2d\xb1\xc6\xaf\x7b\x6b\x74\xe3\x75\x9e\x4f\x2a\xcf\x5e\xfd\xdb\xaf\x0c\x23\x99\x72\x0a\x1f\x3e\x43\x67\xd7\x81\x38\xb8\x02\x21\xf7\x03\x52\xdf\xa7\x05\xb3\x74\xfc\x3e\x79\x7e\xf7\x7a\x4c\xe4\x2e\xdb\x9b\xad\x5c\xdd\x57\xe8\x94\x58\xba\x45\x72\x53\x47\xef\x11\xef\x44\x20\xee\x3f\x0a\xfc\xcf\xc0\xe5\xdf\xb6\x26\x03\x0c\x27\xce\x72\x80\x8e\x22\x68\xf8\x24\x77\x7f\x3e\x61\x2f\x8e\x9b\x58\x67\xa3\xf1\xc9\x68\xe3\x83\x8c\x7b\xb5\x12\xeb\xba\x8e\x93\x7d\x37\x36\xdd\x11\x7d\x07\x71\x70\x07\x72\x82\xff\x4e\x85\xb7\x2a\x3a\x96\x16\x0b\xf1\xb4\x3e\xac\x0b\xbd\xec\x6a\x29\x49\x94\x61\xab\x98\x76\xcf\xef\x98\xdb\xce\x09\x9a\x3e\x06\x71\x70\x07\x1a\x3e\x91\x91\xd0\xf8\xa6\xfa\xd3\xb2\xe7\x5d\x65\x8b\xf4\x12\x6f\x1e\xbc\xe4\x2e\x4f\xf4\xd5\xfe\xd1\x6b\xf3\x68\xb6\x98\xd3\x10\x44\xbb\x20\x0e\xee\x80\x8d\x9b\xc0\xcd\x5f\x43\x9a\xb9\x75\x0b\xae\x3f\x2b\x2b\x7b\xd8\x9d\xb5\x6f\xbb\xc9\xf6\xf1\xf2\x2c\x8c\x8c\x13\xe1\xb2\x7e\xd4\x87\xa6\xd1\x01\x1c\xdc\x81\x35\x22\x32\xcb\xfb\xc3\x18\x25\x27\x99\xc4\x0c\x3c\x3d\x6a\x92\xa3\xdc\x56\x24\x0f\xe4\xaf\x27\x7f\x62\x59\xc7\xb3\xbd\x8e\x0a\x2d\x29\x00\x71\x08\x07\x44\x00\x79\x02\xd0\xd8\xee\x2c\x07\xa2\xbe\x55\x61\x04\xdd\x28\x9d\x2e\x91\xec\xbd\x3d\x23\x33\xfd\xb2\x29\x81\xb1\x73\x9e\xeb\xc1\xb1\xb6\x83\xf6\x16\xf3\x01\xed\x2f\x44\xdf\x41\x1c\xdc\x01\xad\xc3\x2b\xd7\x7e\x99\x85\xf6\x45\x58\x39\xf3\x87\x1a\x64\x79\x57\xd6\xf3\xa7\xca\x71\x46\x79\x38\x78\x28\x2e\xf6\xbc\x27\x81\xce\x13\x01\x71\x48\x0e\x58\xb0\x13\x11\x0c\xff\x22\x20\xc6\xf1\x95\x89\x6f\x78\x3c\xed\xc2\xa8\xd0\xcf\xf7\xf1\xb4\x20\xf6\xc8\x02\xa3\x35\x50\xff\x26\xe4\x00\x80\x83\x3b\xa0\x97\xa5\xf3\x2d\x54\xaa\xea\x39\xf6\x52\xbd\xe6\xef\x6f\x0b\xac\x64\x16\x7f\x37\x94\x04\x96\x5d\xed\xcb\x49\x31\x2e\x32\x4c\x89\x41\x9f\xbd\x00\x1c\xdc\x01\x9c\x55\x4b\x6d\x7e\x03\xe3\xaa\x92\x98\x6e\x7e\x31\xf5\xdd\xc4\xe9\x39\x19\xa3\x23\x41\xcd\x41\x47\x43\x12\xc2\xa3\x31\xee\x10\x84\x03\x20\x0e\xaa\x03\x80\x3c\x01\x68\xa0\x7d\x96\x03\x64\xe8\x69\x98\x57\xfc\xf3\x0a\x5d\xd4\x34\xd0\xae\x93\xbd\x2d\x32\xc3\x7b\x3a\x53\xfa\x9c\x51\x66\x99\xc2\x53\xaf\x7e\xae\x00\x4a\x98\x82\x38\xb8\x03\x19\x36\xfe\xcf\x24\x5e\x38\xdd\x9a\x0e\x0e\x99\xd2\x1e\x5d\x49\x6c\x7b\x90\xb7\xc7\x97\x52\x71\xfa\x47\x03\xe3\x59\x6b\x12\x37\x74\xf6\x0b\x88\x83\x3b\xb0\xe9\x1d\x9a\xdf\xa9\x1d\x9c\xfc\x32\x34\xdd\x90\xb7\x87\x3f\xbf\x88\xd0\xbb\x22\xf6\x73\x5b\x34\x4e\xef\xc1\x26\x6b\x16\xe7\x43\x44\xbb\x20\x0e\xee\x00\xad\x91\x5b\xa1\x99\xdc\xc0\x2b\x66\x2e\xbc\x74\xa2\x39\xdc\xa4\x77\xfd\x0f\xb5\x55\x29\x4f\x9a\x6b\xdb\x2e\xc5\xc6\xff\x4d\x82\xce\x6b\x01\x71\x70\x07\xc8\x32\x02\x26\x5b\x5e\xa3\x24\x6e\x3e\x7f\x84\x7f\x8b\xb1\xcf\xe4\x93\xe8\x89\xee\x1f\xb6\x4a\xcd\xe6\x92\xab\x36\x72\x3d\x1f\xcc\x10\x0e\x80\x38\xa8\x0e\x00\xf2\x04\xa0\xb7\x9e\xb3\x1c\xe8\x0f\xe6\x51\xd0\xfe\xb3\x90\xce\xd1\xc9\x73\xf3\x96\xa0\x75\x6b\xf2\x97\xcb\x4c\x21\x53\x46\xa1\x56\x61\x84\xc5\x0e\xb9\x2b\xd0\xe9\x62\x20\x0e\x69\x59\x49\xf2\xfb\xe5\x95\xc7\x8b\x76\x21\x96\x52\xd2\x23\x0e\x3e\x17\xbf\xe7\xcb\x94\xb7\x4e\xd7\x57\xf8\x49\x76\xd9\x84\xee\xcb\xd3\x40\xcb\x4a\x00\x1c\xdc\x81\xe9\xd3\x3f\x62\xd5\x97\x82\xe2\xc2\x2d\x71\xf9\x2f\x74\x56\xd7\x47\x74\x1a\x99\xc9\xb6\xe6\x79\x63\x65\xe6\x67\x05\x74\xea\x1a\x22\xda\x05\x71\x70\x07\x5a\x29\xde\xb0\x4f\xe6\xd6\x72\xa5\x8a\x68\xcf\x0f\xd8\x72\x62\x2b\x05\xbf\x8e\x49\xa1\x24\x61\xe5\xfb\x19\x2f\xae\xdd\x5d\xfb\x1d\xd1\x2e\x88\x83\x3b\x60\xc4\xe1\x7c\x75\x84\xeb\x54\xbc\xbd\xf8\x36\x6a\x4d\xb2\x5a\x91\x95\xa0\x6e\xc0\xf3\xbd\x22\xcf\xd8\x83\xb7\xb7\xc7\x24\x67\xa1\x63\xae\x41\x1c\x54\x07\x00\x79\x02\xd0\x2b\xe8\x59\x0e\xf0\xf4\xac\x25\x0e\xb1\xbf\xd8\x59\x61\x67\xcc\xa5\x1e\x09\xd6\x7c\x5a\x22\x29\x65\xfc\xb9\x6c\x8e\x8f\xfe\x30\x76\x96\xb3\x0e\x3a\x09\x0e\xc4\xc1\x1d\xa0\xa7\xec\x7f\xe1\xe7\xff\x52\x89\xe9\x11\x1d\x6d\x18\x37\x21\xa3\xd5\xcf\x4b\xc4\xee\x8c\x44\xcf\xc7\xe9\x29\xbb\x38\xbe\x7b\x43\x9f\xfe\x41\x1c\xdc\x01\x85\x14\x26\x47\x8a\x7d\xc1\x08\x2d\x9e\x76\x11\x53\xab\x0e\x06\xb4\xf0\x78\xf6\x74\xed\x72\xad\xfd\xb6\x30\x56\x03\xcc\x05\x68\x79\x19\x88\x83\x3b\xf0\xe4\x83\x7e\xf4\x6e\xb0\xef\x04\x81\x99\x27\xef\xd2\xad\xa2\x02\x36\x2a\x74\x01\xe2\xc7\x4c\xbd\xab\x9d\xa6\x38\x57\x17\xa9\xa0\xb1\x26\x88\x83\x3b\x90\x4c\x27\xad\x95\x2a\xf5\x79\x62\x06\x2f\xf4\xa8\x64\x5f\xda\x9b\x75\x2d\xaa\xe9\x6f\x74\xac\x65\x6b\xd9\xf0\xc4\xf1\x94\x15\x94\x2d\x03\x71\x50\x1d\x00\xe5\x09\x40\x93\x8a\xff\xc9\x13\x34\x23\xe7\x09\x6e\xfd\x52\x7a\x70\xbf\x35\xc4\x76\xca\xfa\x89\x5f\xec\x69\x10\x11\x5d\xfe\xea\x43\x16\xb3\xb0\x66\xc1\x9e\x44\xa9\x47\x2c\x22\x12\xe7\x32\x71\x82\x9c\x27\x68\xa3\xbb\xc8\x2b\x37\x2e\x6b\x62\xec\x12\xb0\xba\x9d\x2c\x8e\x13\xf7\xea\x96\x55\xe6\xb6\xef\xdf\x34\x75\x61\x26\xe7\x97\x33\x05\xe7\x32\x4d\x74\x46\x9e\x20\xc5\xab\xb9\x5f\x15\x27\xf0\xd9\x1a\x99\x33\xf5\xf6\x7a\x4f\x1a\xea\xef\xce\xf5\x3e\x9b\x16\xd3\x2c\x05\xf6\x20\xb4\xaa\xaf\xe7\xd2\x5b\xe4\x3c\x41\xff\xe4\xe0\xf3\xf8\x1b\x0c\x43\x8e\x01\x9a\xf3\xb2\xa9\xf8\x6e\x9b\xee\x8a\x53\xba\xab\xe2\x7e\x3a\x0f\x63\x2c\x7c\xb8\xc6\x5a\xce\xa5\xb7\xc8\x79\x02\x12\xa3\xa6\x57\xfc\x95\x1f\x04\x1f\xf7\xa0\xa6\x1f\x8b\x07\x11\xbc\x37\x78\x24\xc1\xbd\x1e\xf4\x73\xc9\x8c\xfc\xd2\x46\xea\x50\xf1\xb9\xf4\x16\x39\x4f\xf0\xdd\x45\xf1\xab\x66\xe4\xd8\x3a\xf5\x16\xca\xde\x70\x81\x8e\x60\x5e\xf3\x44\xf8\xf3\xf9\x1d\xa3\x98\x87\x73\x2c\x84\xe5\xd4\x2c\xe7\xd2\x5b\xe4\x3c\xc1\x00\xd5\xc0\x73\xc2\xb9\x40\x3f\xd4\x08\x26\xfb\xd2\x6f\x94\x18\xcc\xe2\x49\xaa\x6b\xca\x3a\x2c\xbe\x9e\x1b\xa3\x91\xfa\x6f\xa3\xce\xa5\xb7\xc8\x79\x02\xf5\xc0\x61\x91\x25\x2c\x02\x05\xfb\xf6\xf1\x8b\x5d\x7e\x26\xee\xb1\xad\xa8\xc6\x54\xa4\x56\x9f\xfe\x62\xf7\xfe\x15\x9c\x08\x3b\xbf\x23\x4a\x41\x77\xea\x59\x85\x7e\x09\x03\xbb\x3a\x8b\x2d\x9b\xca\x7b\x45\x37\x62\x7e\xd2\xbc\xd2\xac\x44\xec\x51\xe3\x71\xb5\xc6\x6c\xf6\xe3\xb8\x03\xda\xa2\x12\x44\x81\x03\x71\xf0\x42\x5f\x91\xef\xb2\x40\xae\xfb\xd3\xfa\x6b\xd6\x46\xb2\x84\x41\xef\x16\xe5\x96\xe3\xe3\x25\xbc\xb9\xe6\x55\xf5\xf7\x5b\x21\xb6\xb4\x1e\x88\x76\x41\x1c\xbc\xd0\x4f\xf4\x13\x1b\xb2\xdc\x3f\xb1\x8b\x5a\x67\x52\xe6\x61\x5b\x22\xca\xd7\x88\xff\x92\x4c\xf2\xe4\x7b\x1f\x7e\x8d\x19\x2e\xc7\x04\xb4\x3e\x19\xc4\xc1\x0b\x7d\xe3\x33\x23\x2e\x73\x0c\x56\x0d\x8a\x40\xfc\x29\x52\x94\x31\xf6\xb0\x34\x5e\x47\x52\xee\x31\x81\xcb\x51\x85\x35\xc6\xef\xb8\xa1\x35\xea\x20\x0e\x5e\xe8\x53\xea\x63\x54\x0f\xb6\xcb\x1d\xc6\x0e\x30\x59\x1a\x32\xe6\x1a\xd7\xd7\x9e\x69\x2e\x92\xdc\xc9\x16\xe6\xa9\x3a\x5e\x20\xe4\x11\x47\x14\x7a\x10\x07\x3d\xec\x01\x79\x02\x50\xd9\x3c\xcb\x81\xc5\x6d\x0c\x1e\xd3\xa7\xa5\x43\x2d\x11\x01\x7c\x0c\xb7\x24\x57\x5b\xdc\x53\xe9\x22\xd1\xb1\xd3\x83\x77\x1d\x65\x04\xee\xe5\x46\x23\xfa\x0e\xe2\xe0\x0e\xd4\xd4\xae\x84\x7d\xd7\x79\x2d\x37\x76\x83\xd6\x35\xdc\x72\xe1\x91\x31\xb6\xf1\x9b\x10\x33\x12\x46\xb3\xd2\x77\x3f\x12\xd8\xfa\xa0\x3d\x45\x40\x1c\xdc\x81\xf5\x3c\x2a\x4b\x0a\x87\x9f\x34\xdf\x7c\x37\x7e\x32\xd7\x98\x8c\x1b\xdd\x38\x8c\x1a\x0c\xdf\xd3\x2c\xa4\x92\x6a\x76\xfd\x56\x16\x81\x68\x17\xc4\x21\xed\x47\xfc\xb4\x33\xe3\x26\xbd\xd5\xe6\x58\x0e\x9e\x7b\x7d\xe4\x61\x74\xdd\x3e\x93\x52\xf3\xed\x21\x77\x8a\x94\xa0\x63\xd2\x9f\x7a\xd0\xbe\xe4\x20\x0e\xee\xc0\x6e\xc7\x16\xcd\x3e\xce\x30\x9f\xf6\xb7\x22\xbc\x72\xdb\xd3\x31\x0d\x5b\x87\xc6\x6f\x85\xf8\xef\x08\x98\x32\x70\x52\x4b\x2e\x3e\x46\x38\x00\xe2\xa0\x87\x3d\x28\x4f\x00\x78\x86\x9d\xe5\x80\xa5\xdb\x94\xe3\xd7\xd7\x9a\x8b\x09\x42\x15\x04\x15\x21\xd2\xb9\xdf\xaf\x4a\x57\xa6\xec\xde\x45\xbd\x43\x47\xe8\x8e\xb6\xd9\x06\xfd\xaf\x40\x1c\xdc\x01\x36\x34\x8e\xc6\x8f\x91\x49\xd4\x26\x03\x72\x95\xd5\x57\xa8\xe2\x24\xdb\xc3\x65\x3e\x91\xeb\xde\x47\x33\x8f\xa0\xc6\xa6\xe5\x87\xc2\xbe\x20\x0e\xee\x40\xf6\x0c\x36\xa7\xbb\x90\xe1\xa0\x7a\x96\xf9\x2b\x92\xa8\xe4\x7e\x54\xb9\x38\x16\x1b\x49\x8d\x82\xc6\xbb\x8b\xe8\xcd\xb2\x53\xc1\x88\x76\x41\x1c\xdc\x81\x67\xc3\x66\x6f\x9f\xde\x3a\x98\x22\xe3\x4c\xac\xb2\x79\x6c\x4e\xb4\x30\x1e\xb5\x42\xfa\x76\xe9\xaa\xc3\x85\x66\x12\x17\xec\x38\x7b\x44\xbb\x20\x0e\xee\x00\xff\xed\x75\xb1\xcb\x3e\xed\xc3\x0a\xa9\x64\xb8\xbb\x2e\xc4\x8f\x5f\xce\x84\x3c\x92\x6a\x19\xfe\x2c\x11\x82\x2e\x72\xab\x87\x2e\x16\xe1\x00\x88\x83\xea\x00\x20\x4f\x00\x1a\x50\x9c\xe5\x00\xf6\x46\xbe\xe6\x8f\x0c\xff\xf1\xc7\x89\xeb\xd4\x0b\x0b\x1f\x39\x30\x7f\xdc\x1c\xd8\x23\x39\x9a\x3c\x1d\x97\x50\x28\x4b\x4f\xda\x47\xf4\x1d\xc4\xc1\x1d\xf0\xbf\xee\xf2\xe7\xf8\x13\xe9\xd7\x1b\xe8\x55\x37\x38\xa9\x2f\x3e\x08\x6e\xb5\x98\x6a\xb8\xa4\xcd\xb1\xad\x98\xa4\xe6\xcd\xab\x18\x89\x68\x17\xc4\x21\x6d\xb6\x89\x56\xf7\x74\xe3\xf5\xb2\xbe\xd6\x13\x3e\xbb\xe0\xfb\xf7\xf6\xd3\xe9\x1f\xbe\xb2\xd9\x1b\x6c\x28\xf3\xfd\xa2\xc0\x72\xc1\x0b\x7a\xf9\x07\x71\x70\x07\xd0\x6b\x82\xbe\x27\x5f\x62\x1b\x0b\xe1\xa6\xa3\x8a\x74\xec\xa2\x7f\x8a\x59\xac\x9f\x4f\xd2\x24\x58\x85\xf7\xf0\x71\x1b\xf5\x51\x3e\x94\x57\x02\x70\x70\x07\xd0\xf8\xa3\x95\x4c\x62\x3a\xae\xdd\x64\xbb\xfd\x49\xb0\x98\xa9\x7a\xc4\x20\x8e\xfa\xc9\xe4\xf6\x0e\x81\xca\x42\x54\xd7\x34\xd7\x3d\x84\x03\x20\x0e\xaa\x03\x80\x3c\x01\x68\x74\x77\x96\x03\x89\x82\xd2\x58\xe4\x77\x35\x66\xe9\xf0\x6c\xf3\x09\x7a\xd4\x73\x48\x88\xc4\x7b\xb6\xf2\x5a\x7f\x7d\x0d\x66\x7d\x21\x28\xca\x0f\xed\xc9\x0e\xe2\xe0\x0e\x24\x10\xc8\x75\xea\x50\xb0\x04\x64\xe1\x6f\x3d\xd9\x1a\x3e\x62\x69\x65\xd2\x70\x90\xa5\x3e\xe6\x99\x26\x7d\x94\x38\xad\xcf\x01\x05\xb3\x41\x1c\xdc\x01\x55\xd7\x55\x86\x7c\x8c\x1f\xc6\x5e\xdd\xd6\x58\x5b\xd1\x17\x7f\x92\xd9\xdf\x28\xf8\xcb\x9d\x23\xec\xdb\x7d\x1c\xf7\x79\xcb\x0e\xda\x20\x16\xc4\xc1\x1d\x78\x51\x89\x5d\x17\xc5\x67\x5c\xac\xb9\x18\x63\x15\x22\x71\x87\x24\x57\x7d\xff\x67\x5e\x8c\xee\x0e\xef\xf0\xe7\x08\x52\x9e\xbd\x67\x50\x5e\x09\xc0\xc1\x1d\xb8\xd0\x1d\xbe\xca\x4c\xd0\x42\x5c\xfd\xe7\x41\xff\x15\x14\xd1\xdf\xa2\x8e\xe3\xb2\xfc\xcc\x86\x35\xcb\xbb\x9e\x44\x3a\x98\x49\xcd\x08\x07\x40\x1c\x54\x07\x00\x79\x02\xd0\x50\xfb\x2c\x07\x86\xaa\xb1\xe3\x86\x22\x47\xe5\x2e\xf2\x3d\x58\xa4\xf4\xf0\x0e\x43\x1d\x12\x4e\xd3\x69\x4f\x62\xe5\xe5\xbd\xce\x6e\xb6\x78\xf7\x05\xa2\xef\x20\x0e\xee\x00\x1a\x7d\x9b\x47\xca\xee\xcc\xc5\xc9\x5a\x89\x22\x71\xe3\xcc\x78\x4b\xda\xfe\x14\x97\x06\xee\xfa\x95\x9f\xd7\xa5\x83\xa6\x47\xdb\x11\xed\x82\x38\xa4\x63\xeb\xd5\xba\xa3\xd4\x17\x0d\x37\xde\x94\x36\x36\xd4\xac\x54\xda\xef\xed\xd3\x0e\x7e\x13\xe7\x24\xda\xf5\x88\x69\x34\xda\xb4\x36\x41\xb4\x0b\xe2\xe0\x0e\x78\xd7\xd5\xa4\x73\x92\x5d\xcd\x88\xfd\x4d\x4c\x8d\x69\x9d\x60\x50\xa5\xd5\xdf\xa7\x9a\xac\xef\x54\x39\x7c\x89\xa0\x92\xb0\x1b\xda\x60\x07\xc4\xc1\x1d\x50\x93\x19\x3c\xb5\x7c\x18\x67\xcf\x5e\x35\x71\xb3\x1a\xd3\x18\xe7\xfe\x4e\x89\xcd\x5f\xe7\x8f\xaf\xb4\x88\xbb\xf7\x92\x8d\xe5\xa1\xf1\x00\x88\x83\xea\x00\x20\x4f\xf0\xff\x63\xee\x2d\xc3\xaa\xea\xa2\x77\x6f\x90\x90\x06\x41\x90\xee\x52\xba\xc3\xa0\x15\x41\xa4\x1b\x94\x0e\x01\x41\x5a\x94\x12\x10\x11\x04\xe9\x94\x06\xe9\x46\x44\xba\x1b\x41\xe9\x96\x46\x41\x40\x10\x04\x89\xf7\x3a\xff\xf3\xec\x75\x9e\xb3\x36\xd7\x33\xdf\x0f\x7c\x38\xdf\x7f\xd7\x58\x7b\xee\x79\xaf\xb1\xc6\x9a\x6b\xde\x63\x82\xde\x7b\xce\xd2\x00\x56\xfc\xac\x83\xd3\xf0\x31\x07\xea\x8d\x5a\x42\x4b\xa3\x5f\x2f\xc8\x71\xae\xc8\x4a\xff\xfe\xd6\x47\x6e\x56\xf5\xd5\x83\x67\x2c\x1f\xf2\xd5\x01\x38\xb8\x06\xb8\x68\xd1\x0b\x6e\x3c\xc4\xad\xdb\xe8\x7e\xf5\xb2\xfe\x93\x08\xf5\xa6\xe0\xaf\x5b\xbd\xef\x3e\x56\x1d\x97\xc4\x4b\x7d\x43\xdf\x85\x9e\x05\x20\x0e\xae\x01\xda\x87\xb9\x61\x3e\x58\x58\x5c\xf7\x87\x43\xf2\x39\x8f\x16\xdb\xf4\x04\x68\x06\x68\xb8\x6e\x28\xbc\xd3\x2d\xfb\x11\xda\x74\x9b\x02\x11\x17\xc4\xc1\x35\x70\x3d\xe9\xa4\xaa\x64\x55\xd6\xa2\xeb\xf0\x64\x78\xb1\x8b\x69\x9b\xa5\xcb\x4d\xfd\x79\xd1\xdf\x75\xf6\x62\xbf\xc2\xb4\xc8\x03\x28\xbf\x80\x38\xb8\x06\x4a\x3f\x15\x76\xbd\xb5\x96\x58\x27\xa8\x28\x55\x76\xe0\xe3\x71\xc9\x93\x7b\x82\xf6\xd9\xe6\xb3\x2b\x17\x96\x2e\xc9\x02\x5a\x07\xb4\x10\x0c\xe2\xa0\x3c\x00\xf0\x13\x80\x5e\x42\xcf\xd2\x40\x63\x73\x9d\x4f\xb6\xdd\x96\x5c\x28\x7b\x16\x05\x66\x7f\xaa\xe0\x71\xc0\x13\x6c\x76\x96\x1a\x4a\xe7\x60\xab\x92\xcf\x8c\x38\x90\x1f\x18\xc4\xc1\x35\x40\xc1\x9a\x7f\xd1\x85\x77\x93\x3d\xac\x52\x72\x48\x2f\xe0\x77\x55\xde\x75\x03\x8c\x38\x23\x9e\xb7\x3c\x4a\x21\x7d\x65\x49\xd9\xd8\xd0\x26\x5c\x00\x07\xd7\x40\xd8\xd1\xd3\x87\xf8\xba\xf9\xa1\x7d\xf9\xd5\x85\xef\xec\xb1\x79\xd5\x73\x82\x93\x95\x9d\x58\xaf\x84\xfa\x94\x0f\xe3\xe7\xaf\xda\x20\xe2\x82\x38\xb8\x06\x66\x0a\x35\x7a\xda\xf2\xa8\xd8\xf0\x27\xf0\xc8\x12\x1a\xb6\x59\x39\xd7\x6b\x7a\xba\xf7\xea\x42\x02\x51\x4f\x02\xea\x49\xf8\xb9\xa0\x05\x66\x00\x07\xd7\x40\x76\xe6\x0b\x3c\xac\xcf\x7a\xba\xa4\xb7\x34\x7a\x82\xfc\x0f\xb7\xb7\x19\xba\x9a\x9c\xff\xb0\xb3\xb6\x7b\x44\xe6\x0b\x06\xa7\x69\x22\x34\x00\xe2\xa0\x3c\x00\xf2\x13\x80\xb6\x0b\xfe\xe3\x27\x68\x44\xf6\x13\x34\xff\xee\xa4\xdb\xa3\x8e\x60\x3a\xc8\x5b\x76\x5a\xd5\x1e\xa6\xfa\x7b\xdf\xa2\x52\x29\xa1\x4a\x05\xbf\xf9\x26\xd7\xea\x03\xbf\xe9\x73\x59\x3a\x41\xf6\x13\xac\x6d\x5a\x89\x5f\x8b\x12\xc8\x35\x74\x6c\x1d\x5b\xf6\xba\x42\xd8\x21\x10\x97\xa9\xd0\x5a\x87\x97\xbb\xf6\xe4\x5e\xfd\x5e\x51\xd5\xb9\x2d\x9d\x80\xc6\x77\xd6\xed\xd1\x47\xd1\x52\x87\xc9\x84\x7a\x83\xda\x29\x2c\xf8\x42\xd1\x7c\x02\x07\xc3\xbd\x6f\x44\xcb\x61\xa1\x1a\x94\xcc\xb2\x07\xe8\x1a\xb2\x08\x59\x80\x38\xa4\x57\xa6\xed\xd0\x3e\x5a\x85\xee\x02\x6e\x4f\x81\xef\x4e\x21\xd3\xf6\xa2\x1d\xf8\xde\xa2\x2e\xd5\x92\xe4\x3b\xc4\x68\xf3\x2a\x12\x82\xd0\x2b\x13\x80\x83\xdf\x1e\x49\x45\xdc\x09\x42\xc6\x57\x1f\xb1\x30\x7e\xa0\xea\x48\x25\x60\xfe\x49\x37\x71\xca\x35\x21\x93\xc8\x2a\x3a\xf6\x6a\xc7\x9c\x02\xb2\xf5\x82\x38\x24\x3f\x01\x89\x15\xd7\x88\x7b\xfa\xee\xa8\x2c\x87\xce\xb7\x09\x76\x94\x25\xfe\xdc\x0c\xb5\xb1\xfd\x49\x46\x2e\xe9\xe8\xb8\xaa\xf2\x01\xc8\x4f\x00\xe0\xe0\xb7\xc7\x3b\x0e\x1a\xe1\xa1\x82\x66\xce\xdf\x4e\x79\xac\x1f\x14\x9a\x50\xe6\xa9\xa4\x4e\x35\x9c\x26\xdd\xdd\x27\xb6\xc9\xb5\x6f\xe2\x91\x42\x16\x6c\x00\x07\xa5\x48\x80\x9f\x00\x24\xb6\xb3\x34\x40\x95\x8f\x45\xa0\x72\x67\xf1\xe0\x52\xe3\x93\xd9\x18\xfe\xaa\xc5\xc1\x95\xb4\x3f\x4a\xae\x8f\xed\xcb\xc6\x31\x6a\x68\x12\xe7\xa1\x32\x11\xc4\xc1\x35\xe0\x30\x50\x90\x6e\x2a\x6a\xec\x95\xb2\xf9\x6e\xed\x93\x5a\x63\xf8\xa7\xb4\x07\x81\xbb\x3a\x72\xd4\xeb\xa5\x2d\x9f\x76\xaf\x1c\x06\x23\xe2\x82\x38\xb8\x06\xac\x7b\xf5\xe6\x31\x2e\xb6\x39\x57\xbb\x1d\xdc\x79\xc9\xf0\xdc\x15\xd5\xe8\x67\x37\xb7\x72\x49\xf9\x12\x7b\xeb\x5c\x87\x67\x2d\xf4\x6d\x1b\xc4\x21\xf9\x09\x62\x57\x12\xbe\x2e\xf7\x6e\xea\x87\xfe\xea\xad\x08\xaf\x93\x70\x19\x64\xf8\x61\xad\x61\x16\x5b\x62\x68\xb2\xc0\xf7\xbd\x24\x1b\xf2\x13\x00\x38\xb8\x06\x28\x3f\x2b\x56\x3c\xb0\xe0\x64\x65\xcb\x52\xd2\xfc\x82\xef\x2a\x72\x48\xa3\x69\x94\x8d\xaf\xfd\x5e\x69\x4e\x78\x4d\xed\xe9\xf6\x4b\x84\x06\x40\x1c\x94\x22\x01\x7e\x02\xd0\x5e\xf4\xb3\xfd\x04\x45\x63\x42\xde\x24\xdb\x14\x26\xb1\xe4\x78\xd1\xbb\xd7\x26\x98\x74\xaa\xef\x89\x14\x25\x08\xd3\x0e\x2c\xff\x68\x6b\x55\x25\xab\x40\xec\xcd\x07\x71\xc8\x7e\x82\x86\x19\x75\xa2\x08\x45\xf4\x2c\x85\x70\x3f\x95\xf0\x27\x0f\x1a\x2f\x39\x63\x99\x9c\x0e\xaf\x8e\x25\x2d\x8c\x08\xaf\x7a\x7c\xff\x89\x88\x0c\xe2\x90\xfd\x04\x72\x05\x54\x37\x63\x0c\x4c\x07\x22\x3c\x56\x46\x36\xa7\x44\x94\x9c\x6b\xa3\x36\xed\xb5\x6d\xd0\x89\xa4\x5f\x87\x7c\xd3\xc6\x24\x47\x44\x06\x71\xc8\xbf\x99\xa7\x28\x5e\x13\xdd\x3d\x26\xc0\x2f\x37\xfa\xd8\xf7\x56\xb6\x6a\xce\xf8\xb3\x98\x5b\x05\x11\x76\xb5\x9e\x66\xd6\x9f\xbd\x51\xd9\x20\x3f\x01\x6b\x51\x70\x7f\x6a\xb4\xe5\xcc\x03\xeb\x0b\x41\x77\x73\xf2\xab\x49\xe3\x5b\xb8\x9f\xc4\xcc\x66\x51\x7c\xc7\xc2\x98\xaa\x0e\x4b\xfe\xf7\xc6\xe7\xe7\xae\x51\xb2\xd3\x83\x16\xe8\xaf\xb0\xec\xb7\x35\xc7\x7b\xec\x6c\xac\x5c\x6f\xfa\x30\xbf\x52\x55\x8a\x1f\x2f\x55\x5d\x96\xbc\xf7\x2f\xd4\xaa\x1d\x63\x62\xaa\xc9\x74\xca\xd6\xf0\x73\x91\x09\x3e\xe6\x24\x77\x90\x0b\xa9\xa5\x97\x0c\xe7\x12\x2f\xb7\x84\x43\x80\x58\xe1\xff\x7b\x7e\x02\xd0\xe0\xce\xf0\x13\x78\xdd\x78\xbb\x4d\xb0\x8d\x56\x6e\x67\x1e\x51\x59\x46\x3e\x79\x7b\xf9\xef\xeb\xd5\x16\x4a\xfa\xb5\xa2\x67\xad\x59\x32\xed\x3d\xe1\xff\x42\xb7\x70\x04\x34\xda\xa8\x2f\x33\xa4\xb1\xcf\xd2\x99\x08\x33\xbe\x1f\x63\xd2\xff\xfc\x64\x41\xe4\xde\x5a\xbc\x7b\x3b\xa9\xa8\x6f\xc0\xbf\x50\x67\x3b\xcb\x39\x22\xc9\x38\x1a\x4c\xee\x8f\xd9\x8a\x4f\x97\x47\x87\xda\xec\xde\x98\x56\x62\xa7\x6d\x79\xa1\xb5\x4e\x5d\xb9\xf7\x14\xf2\x13\x80\x2e\xff\x8f\x9f\x00\x45\x06\xfe\x44\xb7\xb2\x11\x51\xee\x9e\xf7\x33\xc8\xd4\xa2\xea\xdb\x8f\xf7\xb3\xe9\x6f\x93\x36\xac\x1e\x32\xd5\x8e\x9d\x6e\x88\xa5\xd4\x69\xcf\x3a\x87\x42\x42\xc6\x07\xc9\x4f\x60\x5c\xa8\xad\x4f\xa5\x75\xe3\x2e\xf9\x41\x57\xa4\x56\x81\x1e\x4e\x4f\xc7\xcc\x5a\x75\x94\x3b\xd5\x78\xf3\x27\xc6\xe3\x0d\xc3\x73\xf9\x98\x88\x22\x8e\xf4\x31\x31\xf8\x50\x33\xf1\xa4\x24\xe3\xdb\x63\xbb\xab\x2c\xf5\xec\xf9\xe9\xd9\x5e\xfc\x1f\x5d\xea\xf2\x26\x08\x74\x4b\x63\xe5\xf6\x5a\x26\xce\xe3\xb2\x3e\xc8\x7e\x02\x72\x7e\x99\x4f\xa5\x7f\x7a\xac\x38\xa3\x52\x29\xa6\x64\xb1\x6b\x0c\x15\xbe\xf9\x1a\xf7\xfa\x73\x72\x63\x63\xa6\xd4\xee\x69\xbf\x3d\x97\xd1\x3e\x41\xba\xac\xe5\x30\x4d\x99\x06\x36\x66\xef\x56\x84\x97\x68\xed\x9f\xb7\xb8\xf8\x87\xf2\x6f\xc6\x72\x67\xf5\xbc\x3b\x25\x97\xe7\xab\xf9\xef\x9e\xcb\x68\x91\xfd\x04\x21\xc4\xb9\xb4\x31\xf3\x28\x24\x95\xe3\xbf\x13\x05\x7d\x69\x8a\x6e\x52\x1b\xa5\x7e\x99\xc7\xdf\x32\x55\x54\xb8\xd0\x52\x5e\x83\x7b\x2e\xa3\x8d\x43\xba\x2c\x25\xae\x32\xfe\xfa\x9a\x66\x9b\x1d\x4a\x43\xbc\xe3\xb1\x3a\xda\x76\x81\x37\xaa\x52\x68\x47\x9f\x81\x0e\xae\xab\xe6\x1b\x93\x73\x38\x28\x20\x58\xd6\x07\xd9\x4f\xf0\x60\x3b\xb1\x80\x78\x88\x91\x64\x48\xf0\xc2\x4d\x27\xdb\xca\xb1\xc1\xdc\x5f\x25\x2a\xe8\x9e\x52\x51\x5a\x62\xea\xd3\x9b\x4b\x7e\xe7\x56\x11\x83\x6e\xd4\xb3\xaa\xa1\x98\x18\xcf\x98\x08\xdd\x32\xcb\xb7\x55\xa3\x16\x1e\xde\x22\x96\x02\xb7\x98\x53\x6e\xf4\x5a\xf7\x61\xac\xbf\x4f\x56\x73\xf0\x81\x16\x0d\x40\x1c\xbc\x1a\x4a\xd8\xc1\x70\x64\x30\x7f\xc9\x5c\x13\x55\x61\xe6\x40\xa3\x4a\xf3\x39\xea\x60\x16\xed\x8b\x22\x77\xa9\xfe\xc8\x60\x89\x9f\x3f\x74\xb0\x25\x88\x43\x32\xa0\x93\x4b\x0b\xc4\xeb\x68\x59\x36\x34\x3f\xc4\xf7\xb9\x5b\xd4\x71\x20\xdd\x56\xea\xfc\x52\xda\x1f\x5b\xd0\xff\xef\x88\xb1\x34\x74\xd8\x39\x88\x83\xc7\xfd\xc0\x8f\x79\xe7\xba\x54\x35\xa9\xd1\x15\x6e\xaf\xf5\x03\xc2\x90\x7b\xd7\xdf\x7a\xcb\x3b\xc7\xcf\x2b\x05\xad\x3e\x9f\xb4\xd5\x82\x76\x3c\x82\x38\xf8\xff\x3b\x36\xdd\xb8\x86\x59\x18\x58\xb1\x44\xc2\x38\xc6\x3e\xbf\xa8\xd7\xc3\xac\xf6\x59\xee\x66\xf0\xeb\x3a\x99\x53\xaa\x97\x23\xdc\x96\x88\xcd\xe4\x20\xce\x4f\x1a\x85\xfe\x7f\x9a\xd3\xcb\xfc\x67\x41\x0c\xca\x9a\x67\x49\x00\xbd\xf0\xb9\x6c\x76\xf4\xa4\xeb\x77\x3c\x93\xc7\x38\x0e\x96\x14\x45\x38\xf1\xe3\x55\xdb\x8a\x16\x75\x91\xcf\x93\x58\x88\xd2\xa1\xcd\x58\x20\x0e\x2e\x01\xcb\x4f\x8c\x6c\xe3\xc6\x5f\x08\xf2\xb8\xed\xd3\x96\xb6\x16\x12\xb3\xb3\xfa\x15\xab\x89\xea\x23\x17\x63\x02\xbd\x4b\x3e\x46\x8b\x22\xe2\x82\x38\xf8\x54\x05\x54\xea\xf9\x08\xe0\xbd\x4a\x21\x5c\xcc\x19\xf1\x2c\xb3\xa1\xba\x82\xf7\xdd\xf6\x96\xbf\x1f\x89\x25\xaf\xcb\x1e\x2f\x65\x06\xb4\xc1\x07\xc4\x21\xf5\x38\x91\xc1\x9a\xa5\x7c\x1c\xd0\x67\xf9\x73\xff\xcb\x0f\xb4\x55\xd3\xf9\xe0\x06\xb5\x76\x3a\xc3\x8d\x76\x3c\x1d\x52\x09\xf4\x88\x3e\xa8\xc7\x09\x80\x83\xff\xbf\xfc\xfd\x12\x8d\x1c\xc5\x7f\x68\x45\x57\x85\xdc\x92\x2e\x29\x6b\x3a\x26\x24\x90\x5e\xe9\x52\xbb\x6f\x3a\x5e\x12\x12\x9d\x39\x49\x8d\x90\x00\x88\x43\x48\xc0\xe7\xbf\xfd\x04\xa0\x27\xd8\x59\x12\x40\x25\xfa\x12\x19\x76\x75\xc7\xef\x4a\xb4\x26\xb1\xf9\x60\x87\xec\xed\x5a\x11\x5c\x8f\x39\xff\x0b\xf2\x9b\xb4\x25\xa1\x6f\xd4\xa0\x5e\xcc\x20\x0e\xe9\xcc\xb6\x67\x57\x1d\x38\x50\x86\xdf\xde\x30\x50\xf9\xce\xaf\x41\xdb\x7a\x84\xd5\xae\xeb\x16\x89\xfe\x24\x45\x06\xad\xfe\x0f\xbd\x26\x74\x64\x30\x88\x83\x4f\x55\xfd\x80\x5b\x8c\xc1\xab\xa2\x98\x9a\x14\x13\x6f\xbb\x82\x39\x8a\xbf\x8f\xee\xd7\x15\xdb\xfa\x48\x0c\x3d\xe2\x1d\x96\x69\xf6\x82\xb2\x0b\x88\x43\x6a\x1d\x34\x7b\xf1\xa0\xed\x37\x0e\xb5\x84\x40\xe4\x8b\x3e\x54\xe1\x99\x78\x9c\x85\xdc\x06\x39\xb4\xe8\xfe\x8c\x8e\x42\x92\x8d\x6b\xd0\xe7\x64\x10\x07\xff\x7f\x89\x6f\xce\x5d\x20\xf3\xb3\x3d\x89\x5d\x3f\x45\x97\x0d\x1b\xc1\xe3\x08\x75\x13\x7b\xe6\x28\x8e\x5d\x6c\x8d\xcd\x69\xd2\x19\x1b\x8f\x78\x27\x02\x71\xff\x48\xe0\x7f\x17\x2e\xff\xa1\x01\x50\x39\x71\x96\x06\x78\x3d\x3f\xb4\xe2\x48\x7a\x92\xfe\x65\xdf\x7b\xa4\xb2\x21\x10\x74\x14\xa1\xf1\x37\xbe\xd3\x3c\xaa\xfb\xfe\x60\x9f\x09\xa3\x28\xd4\x3a\x08\xc4\xc1\x35\x40\x72\x14\xb3\x65\x57\x2f\xfd\xe7\x50\xd4\x77\xc8\xe2\x52\x9d\x3f\xd9\xc2\xe7\xcb\xf2\xed\xf5\xd3\x28\x6b\x6a\x23\xec\xa3\x89\xd0\x11\xea\x20\x0e\x3e\x57\x78\xf6\xd1\x4a\xc2\xfd\xd3\x2f\xc5\xd4\xd5\x85\xaf\x0c\xda\x51\x5b\x7d\xce\x8f\x4c\x7e\x56\xab\x1e\xa3\xf9\x8c\x6e\x8d\x33\xda\x0a\x11\x17\xc4\xc1\xe3\xc6\x70\x8f\x5d\x17\x63\x44\x11\xde\x5f\x19\x8b\xfa\xd1\xfb\xbb\x34\x43\x86\x7c\xf1\xd3\x5b\x09\x3e\xfc\xe8\x89\x06\x69\x39\xb7\x2d\xe8\x89\x08\xe0\x90\x4e\x02\x2a\xa1\xdd\x91\x7b\xec\x62\x6f\x71\xfa\xeb\xf5\x9b\x08\xb6\xf8\xb2\xd7\xce\xbe\x49\x2c\x9e\xc5\x8c\x14\xe5\x8e\x4d\x3e\x26\x8a\x08\x0d\x80\x38\x84\x06\x7c\x00\x7e\x02\x50\x6d\x77\x66\x3b\x9a\xd5\x8c\x2f\xb3\xaa\x3f\x9c\x7f\x88\x93\x2e\x71\x66\xd6\x1e\xf9\x98\x3a\x65\x9e\xe6\x1e\x8d\xa9\x87\xf8\x04\x27\x58\x58\x4a\x40\xed\x68\x00\x1c\x5c\x03\x72\x6c\xc6\xa9\xc1\x35\x52\x49\x4a\xca\x8f\xbd\x6e\x32\x58\xdf\x46\x1f\xbc\xc0\x38\x5d\xb3\x68\xfe\x33\xeb\x7b\xc9\x07\xbd\xb0\x59\x44\x5c\x10\x07\x9f\xab\x26\xed\x17\xf2\x2d\xf1\xcf\xee\x10\xa4\x7e\x8c\xa4\xa4\x36\xec\xfb\x85\xf3\x7a\xed\xa9\x4c\x8a\x51\xa9\xce\x6b\x77\x22\x62\x76\xa8\x87\x03\x88\x43\x3a\xfb\x82\xd1\x2a\x21\xc6\x99\x5c\xf5\x8d\x16\xcb\xcd\xf1\x2a\xdd\xb9\xc6\x7a\x4a\xfe\x77\x6a\xeb\x0f\x3a\xa7\x18\x23\xba\xd0\xfb\xbe\x20\xe2\x82\x38\xf8\xff\x1b\xed\xab\xb7\x5e\x6b\x91\x6e\xb0\x58\xd5\x7c\x73\x94\xff\x97\x93\x21\xb7\x7d\x55\xc4\x9e\x97\x87\x4f\x92\x1d\xc5\xc1\xca\xd3\xef\x08\x0d\x80\x38\x28\x0f\x3c\xf9\x6f\x0d\x80\x0a\xed\x33\xcf\x27\xa8\x3a\xb6\xb7\x2e\x0c\x71\xba\xb3\xcb\x90\xe8\x95\x5b\xbc\xf2\xc5\x5c\xd2\x16\x3f\xf2\xf9\x05\xe1\x8e\x38\x8e\xf1\x0d\x36\xe8\x59\x00\xe2\xe0\x1a\x18\xdd\x13\x36\x91\x3c\xf6\x5d\xa8\x30\xfc\x52\x3c\xfa\xe9\xfe\x75\x99\x72\xc2\x9d\xbf\xd6\x6d\xc9\x61\x6f\xf3\xaf\xe5\x16\xbd\x81\x4e\x80\x02\x71\xf0\xb9\x22\x2e\x72\x3a\x1d\xae\x7a\x99\x25\xd8\xfa\x3a\xd1\x6c\xd5\x33\x45\xbd\x76\x73\xeb\xb9\x63\xba\x5a\xe8\x8d\x9b\xfa\xdc\xfe\x82\x90\x13\x14\xc4\xc1\xe3\x3e\xbe\xba\x8f\x22\x98\x49\x3e\xce\xce\xd5\x1e\xd3\x48\xb0\x28\x75\xf3\xb9\x98\x0e\xfd\xaa\xa5\x68\x62\xcc\xbb\x77\xa2\x0d\x42\xff\xc7\x57\x04\xe0\xe0\xff\x6f\xeb\x7c\x0a\x21\x39\x55\x43\xbd\x01\xed\xe0\x55\x46\xe1\xcc\xcb\x54\x44\x3f\xf8\xfc\x4d\xde\x1d\x0a\x7c\x13\x22\xfa\x43\xea\xf5\x0e\xa1\x01\x10\x07\xe5\x01\x80\x9f\x00\xf4\xd6\x73\x96\x06\x0a\x4c\x19\x8c\x55\x8f\x9f\x9c\x3c\x33\x9c\x4d\x77\x74\xde\xea\x48\xec\x45\x55\xbc\x3a\x87\xad\xe5\xa5\xfa\x7a\x68\x2e\x89\x1b\xda\x52\x03\xe2\xe0\x1a\x60\x4b\x2f\xb6\xd3\x8c\xd4\x60\x13\x18\x4d\xa5\x73\x46\x97\xed\x78\xbe\x19\x26\x77\x79\xc9\x9a\x50\x95\x54\x19\x4d\xa3\xbd\x10\x05\x11\x17\xc4\xc1\xe7\x4a\x32\x42\xa5\x9f\x94\x75\x15\x83\xf9\x8d\x44\x51\xed\x95\xde\xab\xf7\x83\x94\x65\x09\x15\x2d\x38\x3a\xb0\x1e\xa2\xc9\xa0\x11\xcb\x23\xe2\x82\x38\x78\xdc\xa1\xf7\xcb\x09\x4e\x2f\x89\x7c\xf3\xf2\xab\x44\xae\x3d\xbc\x75\xf7\x06\xf3\x87\xf2\xec\xfa\x27\x39\xad\x4a\x7d\xbc\x57\x7c\x02\x20\xab\x2d\x88\x83\xff\xbf\x57\x17\x04\xdd\xbe\x10\x8e\x2c\x8a\xab\xbc\xa5\x23\x7b\xf8\x44\xb2\x67\x51\xa8\x66\x81\x4d\x65\x7c\x70\xfe\xab\x9f\xf8\x23\xde\x2b\x08\x0d\x80\x38\x28\x0f\xc4\xfd\xb7\x06\x40\xaf\xa0\x67\x69\xe0\xfd\xf2\x6a\x3a\x25\xed\xf3\x3f\x73\x03\x77\xbc\x28\x8c\xe7\xb2\xaf\x66\x7c\x67\xa2\x4b\x28\xe2\xfa\x14\x1f\x70\x5a\x4b\xa2\xb0\x88\x18\x3b\x88\x83\x6b\x40\xc0\xb1\x91\xcb\xd9\xf0\x01\x0a\x13\x4a\x96\xe6\xc7\xe8\xa2\xcd\x47\x85\x66\x8f\x59\xba\x68\xb0\x62\xe2\x89\xbb\x3a\xf9\x1d\xa0\xb3\xb0\x40\x1c\x7c\xae\xe4\x18\x5f\x8a\x3f\x67\x79\xff\x34\xaa\x64\xad\xd8\xeb\xd7\xaf\x4d\x83\x43\x91\xe7\x68\x24\x53\x41\x3f\xe2\x4f\xc5\x6c\x6d\x98\x38\xa1\x67\x0c\x80\x83\xc7\xe5\x69\xf7\x2b\xcd\x98\x30\xb1\xc0\x50\xfb\x60\xf3\xe2\x16\xf7\x0c\x8f\xd1\xd5\x87\x6f\xa3\xde\xed\x4d\x46\xa8\xa9\x6e\x6b\xeb\x43\xad\x9b\x41\x1c\xfc\xff\xa5\x79\xb0\x47\xba\x7c\x35\x9a\x66\xad\x87\xe7\xfa\x28\xbd\xca\xd2\xa1\xed\x22\xe9\xed\x89\x6f\xc2\xab\x6e\x18\xde\x42\xea\x3a\x50\x6b\x32\x10\x07\xe5\x01\x90\x9f\x00\xb4\xa8\xf8\x8f\x9f\x00\xa5\x01\x69\x05\x23\xe2\x97\x26\x03\x4a\x56\xab\x5c\xeb\xaa\x06\xb3\x57\xaf\x68\x71\xea\xe5\xd2\x85\x0d\x59\x96\x81\xc7\xb6\xdf\x49\xb7\x19\xea\xd0\xcf\x65\xe1\x04\xd9\x4f\xb0\x7b\x50\x1f\x72\xec\x5d\xbc\x19\xe5\xe4\x6b\x54\x57\x7b\xff\x17\x6d\x50\x9c\x9a\x76\xc7\x2e\xbd\x62\xbc\x4d\xe7\x52\xbf\x65\xcc\xb9\x2c\x13\xed\x21\x5d\x96\xea\x25\xa1\x7c\x62\xa2\xe1\xd6\xc7\xe4\x61\x71\xac\x11\x86\xa2\xd2\x61\xf6\x19\x6a\xab\x72\xee\x79\x33\xa9\x5f\xe1\x3c\x4d\x16\xe7\x32\x5a\x64\x3f\x41\x62\x9e\x48\xef\x46\x57\x73\x29\x05\x0b\xe3\xe0\x97\x14\xb5\xac\x17\xb9\x39\xd9\x19\xd1\x7b\xf2\xcc\x38\xdc\x3d\x24\xec\x2e\xcf\xcf\x65\xb4\x34\x48\x97\x8d\xfc\xa4\x30\x34\xd8\x4e\x15\xbe\x44\x3b\xd3\xfd\xda\x75\xaa\xa6\xb3\xfc\xce\xd7\x67\xa6\x56\x97\xf2\xb1\x5d\x53\x58\x03\xca\xbe\x9e\xcb\x68\x91\xfd\x04\xe6\xa4\xaf\x7b\x9a\x88\x88\x3d\x23\xe6\x9e\x7e\xad\xa2\xff\x62\x66\x52\x5d\x47\x93\xcb\x77\x9a\x99\x94\xfa\xbe\x25\x6b\x5c\xad\xf2\x5c\x46\xab\x81\x74\xd9\x90\x99\x8a\x7d\xb1\x83\x80\x3b\xdb\x6e\x0e\x87\x04\x27\x51\xcd\x51\x6c\x5a\xa6\x41\x0f\xc8\x19\xe6\xe3\x63\x69\x63\x3f\xb8\x9d\xcf\x21\x10\xc8\x7e\x02\xb1\x9c\xc0\x9f\x72\x27\x6c\xa4\x2b\x6a\x91\x07\x5e\x9e\xdc\x11\xa3\xbc\xb4\x92\xc3\xc6\xc9\x09\x9e\x9f\xc5\x4a\x0d\x82\x02\xf4\xce\x6d\x09\x10\x74\xa7\x9e\x95\xe8\xf9\x89\x52\x9c\xe5\xe5\x1f\x12\xfc\x40\xd1\x1e\xaa\xdb\x41\x2d\xfd\x92\xb5\x42\x12\x9f\x5a\x64\xf2\x0c\xdf\x98\xdd\xbd\xab\x0f\x5a\x02\x04\x71\xf0\x44\x3f\xbc\xd9\xf1\x52\xf6\xa3\xec\xcf\x85\xc1\x28\x1e\x7d\xee\x3e\x47\xf3\xc8\x8b\x49\x73\x5a\x65\x12\xca\x2d\x28\x02\xa8\x6c\x66\x3a\xd0\x9e\x34\x00\x07\x4f\xc8\xc3\x1d\xbe\x9a\xea\x34\xad\x1b\x8e\xb4\xb4\x86\x09\x2a\x39\x66\x57\x88\xa5\x18\xe9\x0d\x3d\x99\xc5\x9e\xac\x5d\xa7\x95\x92\x98\x86\xe2\x02\x38\x78\xdc\x7e\x36\xa3\x32\xd1\xd3\x06\xdb\xeb\x95\xee\x43\x01\xbc\xc6\x23\x55\xef\x9a\x30\xbf\x3f\x65\xe0\xfd\x24\x58\xcc\x80\x6e\xfb\x30\x17\x11\x17\xc4\xc1\xff\xdf\xcd\x6a\x13\xd2\xe7\x3f\x7d\x8c\xfc\xbb\x2e\xee\x47\x0b\x7f\x4e\x68\x9c\xa1\x34\x67\xc8\xeb\x79\x37\x42\x4e\xea\x5c\x2b\xb5\x6e\x0b\x1d\x46\x04\xe0\xa0\x87\x7d\xc3\x7f\x3f\xec\x41\x69\xf3\x2c\x0d\x10\xa8\x5c\x2d\x98\x12\x4c\x8f\xa2\xa5\x98\xd3\x24\x4d\xbe\x55\xa7\xae\x12\x18\x65\x97\xac\x4f\x4f\xc2\x6d\xa8\xd3\xb2\x78\x0c\x19\x48\x41\x1c\x5c\x03\x97\x78\x39\x44\xae\xde\xaa\x26\x24\xab\x59\xcd\xb8\x7e\xcb\x27\xbc\x93\x83\xe9\xd2\x7d\x95\xef\x63\xe5\xda\xea\xfe\xc6\xbd\xbe\xd0\x21\x82\x20\x0e\x3e\x57\x71\xc2\xa4\x74\xa6\x18\x97\x5c\x26\x3b\xbe\xf2\x2d\x93\xcd\xdc\x24\x5a\x97\x4a\x9c\xcf\x30\xf1\xb7\xef\xdd\xa5\x54\xcb\x79\x84\x09\xed\x79\x05\x70\xf0\xb8\xe5\x8e\xf7\x8b\xef\xb8\x11\xe4\x0b\x10\x62\x8d\x77\xe5\x45\x3e\x35\x6d\x98\xcb\x3a\x28\x14\x8f\xc6\x66\x8e\x5b\xb7\x9a\x11\x87\x7a\x73\x83\x38\xf8\xff\x7b\x43\xc1\x4f\x99\xa2\x8e\xdc\xcc\xf1\x4f\x6c\xc1\x9e\xaa\x60\xbf\x8e\x81\xe9\x9e\x88\x7d\xaf\xa2\xd6\xc2\xcc\xfd\xf5\xbc\x14\x1e\x84\x06\x40\x1c\xf4\xb0\x07\xf8\x09\x40\xcf\xb0\xb3\x34\x30\xc5\xf4\xfe\x31\x7a\x06\x49\x5c\xf8\xcb\x1a\xaa\xfb\x8b\x63\x71\xc9\x6b\x95\x04\x41\xd5\x2f\x66\xfc\xac\x0b\xc9\x04\x7a\x53\x8e\x10\x63\x07\x71\x70\x0d\xbc\xef\xb1\x72\x1c\xf0\x11\x56\x1c\xfe\x84\xf3\x60\x64\x8e\xb9\x73\x82\xda\x6f\xbd\x2b\x24\x5d\x26\x5d\x36\x50\x48\xea\x8a\x30\x0f\x54\x48\x02\x38\xf8\x5c\x35\x4a\x65\x92\x8d\xbc\xca\xdb\x7a\x7d\xd9\x8c\x2f\x28\x5f\x93\x84\x3b\xe8\x6e\xf7\x4a\x3f\x21\xb1\xa9\xf1\x57\xeb\xd2\xa0\xef\x5d\xd0\x5e\x37\x00\x07\x8f\x2b\x50\x58\x6c\x56\x66\x20\x34\x15\x5e\xe9\x25\x6c\x52\x80\x9d\x2d\x19\xd7\x9c\x3a\x49\xe5\xbd\x8b\xd5\x38\xb1\xba\x51\x5f\x6d\x0b\x15\xa8\x00\x0e\xfe\xff\x7e\x74\x7f\x78\xec\xfd\xb9\xfd\xe1\x40\xb7\x7c\xa9\x60\x1c\x76\x63\x9b\xd3\x86\x9c\xaf\xbb\xe8\x36\xb1\x8d\xcd\xaf\xeb\x71\x54\xd0\xe6\x18\x10\x07\xe5\x81\xbd\xff\xd6\x00\xa8\xa0\x38\x4b\x03\x46\xec\x49\x17\x3f\x4a\x33\xa9\xe8\x14\xff\x6c\x9e\x32\x55\x15\x74\xfd\x30\x80\xc7\xf3\xea\xb1\x75\xdc\x7e\xec\xe4\x94\x84\x07\x74\x5f\x81\x38\xb8\x06\x66\xfc\x58\x0a\x94\x7d\x43\xc5\x9e\x56\xf7\xee\x5f\xb4\x7d\x1d\xf6\xa2\x0d\xf7\x57\x53\xe7\xb3\x6f\x98\x0f\x5e\xde\xdf\x5c\x35\x78\x0e\xed\xc7\x03\x70\xf0\xb9\x12\xb7\x88\xe0\x1c\x15\x14\x23\xbf\x21\x94\x20\xc1\x2d\xce\xe5\x1f\xd1\x89\x31\x65\xaf\x22\xb3\xcb\xf3\x60\x52\x96\xb4\x22\xde\x13\x11\x17\xc4\xc1\xe3\x8e\xef\xe4\x35\x2f\xd0\x5e\x78\xc5\x1a\x35\xe3\x31\xd3\xf4\xc6\x97\x2e\x0e\xe5\x36\x8b\xca\xa3\x10\x96\x0b\x97\x73\x28\x98\xb8\xa1\x3e\xc7\x20\x0e\xfe\xff\xce\x0d\x25\xc8\x72\x97\xdc\x7a\xea\x44\x98\x8a\x27\x93\xb0\xa7\x69\x95\x3b\xaa\x91\xd2\x16\x53\x1c\xf1\xc2\xe9\xe3\xb7\x2b\x01\x5a\x08\x0d\x80\x38\x28\x0f\x00\xfc\x04\xa0\xea\xee\x2c\x0d\x70\x16\xf2\x86\xd2\xa4\x5f\x21\x13\x7a\x74\xf9\xf2\x85\x5d\x1e\xf9\xf2\xa4\x7b\xf3\x0e\xdb\x87\xf1\xa4\x17\x0a\xc9\xb0\xe9\x57\x2e\x20\xc6\x0e\xe2\xe0\x1a\xe0\xa8\x9a\xb6\xbb\x1b\x51\xc3\x14\x45\xa9\xaf\xe7\xf2\x8b\x4f\x64\xea\x01\xbf\x7c\xce\x64\x03\xab\xcf\xeb\x37\x47\xad\x32\xd7\xa0\x7a\x00\xc4\xc1\xe7\xea\x68\xf4\x30\x42\x80\xa9\x23\x4c\xa2\x60\xba\x76\xaf\x3f\xfd\x4f\x4b\xf0\xfd\xdf\x6e\xe5\xd3\x1c\x12\x7a\xfb\x92\x58\x9f\x66\x68\xa0\xa6\x45\x00\x0e\x1e\x37\x96\x23\xa8\xa0\x6a\x4e\x3a\x8a\x43\x7f\x76\xfa\x75\xb1\xb3\xab\x99\x1a\x57\x39\x51\xe0\x57\x9b\x7b\x7b\xbb\x7a\xdb\x55\xad\x50\xf3\x61\x10\x07\xff\x7f\x33\xa2\x9a\xdc\x58\x57\x45\x44\x5f\xe1\x37\x98\xe6\x98\xe2\x4c\x47\x37\xd8\x3c\x2c\x65\xff\x16\xbf\xe2\xfe\x4a\xc1\x80\x6a\xbc\x16\xa1\x01\x10\x07\xe5\x01\x9a\xff\xd6\x00\xa8\xd4\x3e\xb3\xf1\x72\xe6\x5e\x6f\xcd\xe0\x9a\xcc\xfe\x1c\xdd\xbb\x5f\xb1\xc4\x81\x74\x4f\x4a\x02\x1d\x98\xfe\x2c\x0a\xc7\x59\x99\x31\x44\x6d\x43\x1f\x42\x40\x1c\x5c\x03\x6e\xb4\x9a\xe6\xe8\x4f\xbf\x93\xfd\x91\x6a\x2f\xc7\x5a\xd0\xa6\xf0\xf6\x59\x08\x4d\xcc\x7a\x6e\xaf\xde\x9a\xc3\x57\x42\x30\xec\x8c\x88\x0b\xe2\xe0\x73\xd5\xab\x32\x15\x76\x5a\x26\x93\x55\xe4\xbf\x73\x3f\x8d\xda\x33\xb1\xfe\xbe\x02\x5b\x8e\x44\x3c\x25\xf6\xf6\x77\x96\xcd\xb2\x48\xe8\x8c\x0a\x10\x07\x8f\x4b\xa8\x9a\x37\xeb\xb0\x37\x35\xaa\x5f\x1f\xb7\x83\xfe\x4c\x40\xd0\x51\xff\x5e\xdf\xdc\x35\x52\x12\x0c\x7b\xa9\xca\xd3\xd3\x1b\x4e\x88\xb8\x20\x0e\xc9\xbf\x49\x49\x1f\xb8\x1d\x78\x28\x40\x37\x2b\x2e\x2f\x7e\x97\x86\xf2\xcf\x53\x51\xd5\x6e\xa9\x3d\xa1\x32\x31\xff\x80\xef\xf5\x04\xbf\x10\x1a\x00\x71\x50\x1e\x00\xf8\x09\x40\xef\x3d\x67\x69\x60\x3c\xf5\xc9\x47\x9e\x26\x26\x12\xdc\x93\x8d\x53\xe2\x48\x8f\x6d\xfd\xa7\x47\x1b\x96\xfd\x6d\x96\xcd\xa6\xdf\x6e\x7c\xb8\xd4\x03\xdd\x57\x20\x0e\xae\x01\x59\x2f\x4e\x41\xcd\x3f\xf6\xcd\x2e\x86\xd2\xdd\x7d\xce\xba\xf6\xba\xd1\xce\x1f\x35\xff\x44\x90\x60\x97\xb2\x25\xde\x92\x09\x12\x43\xc4\x05\x71\xf0\xb9\xd2\xe7\x7f\x21\x1a\x21\x93\xe4\x1b\x42\x73\x80\xad\x6b\xf2\x33\x91\x6a\xf9\x4f\xa8\xc8\xc8\xb0\xbf\xae\xab\x13\x41\xa6\x5a\x3e\x74\x10\x36\x88\x83\xc7\xfd\xe8\x2c\x66\xad\x1b\xb3\x66\x93\x76\xe7\x6e\xa1\xc2\xe1\x3c\xdf\xc1\x5d\x31\xa5\xef\x59\xf3\x69\xf6\xd9\xf7\xfc\xf2\x5f\x95\x5c\x44\xc4\x05\x71\xf0\xff\xf7\x8f\x8f\x7e\xa3\x90\x7d\xf7\x37\x27\xc1\xed\x80\x9f\x49\x92\x94\xea\xd1\xf2\x01\x77\x92\x7f\x7e\x9f\xa0\x56\xc1\x96\xfe\xc6\x85\x8f\xd0\x00\x88\x83\xf2\x80\x06\xe0\x9c\x12\xc0\x4b\xe8\x99\xef\x86\xa8\xc4\xb4\x09\x79\x52\x82\xb7\x1c\x8a\x6f\xc6\x61\xb0\x8f\x6c\x2f\x50\x72\x48\x84\x27\xdf\x53\x95\x3a\xb9\x91\xef\xe5\x29\x09\xbd\x1b\x02\x38\xb8\x06\x4e\x27\x99\x6e\xc9\xc4\xff\xda\xad\x5e\xb9\x3c\x7b\x5d\x62\xdf\x9b\xfa\x91\x6f\x8c\x4b\x96\x87\x96\xa8\x47\xa4\x3d\x93\x8a\x05\x54\xbb\x81\x38\xa4\x06\xec\x94\xbb\x3a\x7f\xc6\xb5\x1b\x7e\x0d\xd2\x75\x5f\x48\x65\x4d\xd1\xf2\x70\xb7\x0e\xb3\x4f\x0d\x9b\x54\x3c\x78\x80\x93\x93\x0f\x9d\xa9\x01\xe2\xe0\x71\x43\x0f\x89\xb9\x95\x33\x3b\xde\x7e\xee\xb2\xec\xd6\x97\x30\x2d\x65\x78\x10\xdc\x38\x75\xfc\xa4\x6e\x73\xbd\xad\xcf\x80\xe2\x86\x25\xd4\x68\x0b\xc0\xc1\xff\xdf\x4a\x87\x02\x9a\xac\xc9\x9f\x8b\xa3\x75\xb8\xdf\xac\x9a\x9b\x29\xef\xf9\xef\x88\xce\xdf\xe4\xd8\x1f\x7c\xb9\x25\x62\x7b\x8f\x2a\x0b\xa1\x01\x10\x07\xe5\x01\x90\x9f\x00\xb4\x5d\xf0\x1f\x3f\x01\xca\x33\xa4\x35\x0c\xee\x3a\xc5\xc9\x1c\xbb\xe6\xa4\xdb\xa8\x2f\xae\x95\x65\x0b\x47\x0a\x2c\x1c\x68\x58\x7d\x78\x78\x63\xe9\xfe\xc2\xbd\x2d\xab\x6f\xb3\xe7\xb2\x74\x82\xec\x27\x30\xe0\x6f\xae\xfd\xa3\x41\xf5\x43\x69\xaa\xea\x06\x96\xe2\xd1\xcd\x3b\x5e\x9c\xeb\xfc\x4c\x0f\xd1\xaa\x5e\x5e\xfc\xe6\x7b\xbf\x5c\xfc\xdc\x96\x4e\x40\xe3\x3b\xeb\xf6\xd8\xbe\xb0\x13\x32\xd4\x44\xd5\xc7\x38\xd2\x41\x53\xe2\x1a\x3f\xfa\x8c\xe5\x49\x76\xec\x60\x2d\xe1\x35\xb3\x90\xc6\x3f\x5d\x62\x5a\x50\x2f\x2b\x00\x07\xbf\x3d\x6c\xc3\xa8\xbd\x93\xfe\x78\x54\x10\x70\x52\x4d\x15\xc6\x9e\xc4\x62\x57\x34\xd2\x09\xc6\x4d\x05\x2e\x39\xbc\xeb\x5f\x12\xdd\x1a\x43\xc4\x05\x71\x70\x19\xcf\xca\x71\x52\x67\xb3\x51\x1c\x50\x5b\x1b\xcf\x1c\x07\x99\x50\x96\xd2\xc9\xea\x07\x04\x0c\xc8\xee\xfe\x94\xf1\xb5\xbc\x10\xbd\x81\x88\x0b\xe2\xe0\x71\xe7\x7a\x64\xf4\x85\xc4\xc7\xd0\x43\x0c\x16\x22\xe7\x27\x47\x84\x7d\xea\x7f\x0e\xfc\x0d\x19\xd8\xff\xec\x7e\x4d\xf5\xdb\x7e\x29\xb4\x7b\x0a\xc4\xc1\xff\xdf\x5f\x95\x1d\x18\x31\x8a\xbf\xdc\xaf\x2d\x47\x89\x19\x6e\x24\x5f\xce\x16\xd3\x48\xb6\xc4\xb1\x1c\x27\xb9\xe0\x45\xef\x93\xfc\x01\x3a\xc7\x19\xc4\x41\x29\xf2\xd9\x7f\xa7\x48\x90\xd8\xce\xd2\x80\x39\x2a\x81\x9a\x26\x57\x5f\xa2\xe0\x2b\xfa\xed\x98\xef\x66\x63\x74\x97\xd9\x73\x6b\x53\xdf\x5d\x49\xe0\xac\x78\xf4\x1b\x3b\x14\x3a\xba\x04\xc4\xc1\x35\x50\xb7\x48\x42\x36\xeb\xed\xf4\x88\x6c\x67\xe9\x1d\x35\x93\xb9\x82\x45\xe9\x5e\x92\x3a\xa6\x2a\xe5\x8b\xe2\xee\x07\x8d\x97\xd4\xa0\x6f\x4f\x20\x0e\x3e\x57\x4f\x2f\x4a\x7b\x5e\x98\xdf\xa9\xac\x5a\x2c\x77\x8e\x5d\xd3\x7b\x94\xc4\x90\x90\xce\x5b\xfb\x3b\xd0\x6a\xd3\x3a\x8b\x88\xba\x6d\x09\x11\x17\xc4\xc1\xe3\x0a\xf3\x97\x1b\x52\x51\x71\x68\x91\xb3\xa5\xf5\x89\x3e\x2f\xe5\x48\xf8\x15\xbc\xdc\xcf\x33\x77\xa7\xbc\x40\xe7\x75\xa2\x48\x08\xf4\xda\x00\xe2\x90\xfc\x1a\x1c\xed\xbc\x81\xbd\xef\x86\xbe\xfc\x26\x8a\xf2\x5e\x51\x29\x8b\x8e\x75\xca\xb8\xc9\x48\x20\xf6\x50\xa7\xf2\x72\xc6\x76\xdf\x26\x42\x03\x20\x0e\x4a\x91\x00\x3f\x01\x68\x2f\xfa\xd9\x7e\x82\x97\x6a\x46\x0a\x8f\x65\x68\x64\x19\x22\xb1\xe5\xd6\xfe\x62\x04\xf7\x1b\xe5\xd6\xfc\x09\x8c\x7d\x14\xeb\xb3\x45\x3e\xe7\xda\x51\x8b\xd8\x9b\x0f\xe2\x90\xf7\xe6\x5f\x12\xa8\xa5\xe0\xf4\xfe\x6c\x40\xa0\xa9\xa9\x59\x5d\x14\x4a\xa3\x4f\xfb\xdc\xe2\x93\x62\x72\x41\xac\x7f\x72\x7a\xa7\xe8\x14\x1f\x22\x32\x88\x43\xf6\x13\x8c\x0d\x2c\x1d\xa5\x30\x71\xa1\x2c\x64\x89\x78\xbe\x5a\x97\x7f\xa2\xfd\xf5\x8e\x7f\x49\x53\xfe\x49\xd5\xc9\xbd\xfe\xdd\x5f\x52\xd7\x11\x91\x41\x9c\x9f\x2c\x0a\x0a\xea\xff\xdd\x37\x8e\x88\xe5\x56\x1d\x9a\x51\xdd\x03\xa5\x01\x9a\x1e\xf4\x19\xdb\xb7\x86\x46\x81\xd6\xcb\x06\xa8\x4b\xdb\x3a\xc6\xc6\xd6\x52\x35\x90\x9f\xa0\x4f\x8f\xe8\xb8\x8b\x7b\x85\x74\xde\xf5\x7a\x65\xc2\xb3\xcb\x8e\x6a\xbb\xe1\x8c\xe9\xd2\xae\x96\x9b\xac\x22\x66\xb9\x15\xb1\xf7\xfe\xed\x27\xb0\xe6\x20\x25\x65\xd2\x28\xd2\x13\x30\x17\xb3\xd8\x23\xcf\x9f\xc6\xb3\x60\xcc\x2d\xc0\x8e\xb9\x26\xdd\x23\xc3\xb2\x6d\x92\xf4\xe4\xdf\xdf\xd8\x95\x7c\xc4\x8c\xcd\x37\x84\xee\x60\x9c\xe8\x12\x67\x89\x92\x9e\x3a\x1f\xe5\x3e\xd1\x7d\x47\x60\xab\x6b\x8b\xe1\x9d\x1c\x83\xf2\xff\x9e\x9f\x00\x34\xb8\x33\xfc\x04\x47\x87\x92\x7c\x84\x7d\x01\x14\x45\x17\xde\x05\x38\xa2\x5e\x09\x12\xb9\x8a\x4a\x70\x57\x2c\xe1\xf1\x14\xd9\xb3\xfa\x41\x02\xcc\xcf\xff\x42\x5d\x70\x9e\xbf\x26\xde\x66\xba\xc6\xe1\x32\x42\x49\x33\xab\xd3\xbb\xf6\x39\xd1\x3b\x14\xcf\x14\x37\x78\x42\x3b\xe2\x62\x52\x49\xe0\xbf\xd0\x66\x7f\x27\xa6\x09\x0d\x9d\x67\xac\x29\x69\x18\xa2\xbb\x87\xe3\x0f\x5b\x2d\x3d\x32\x78\x09\xf0\xef\x70\xb6\x95\xce\xde\xd5\x33\x86\xfc\x04\xa0\xcb\xff\xe3\x27\x90\x44\xf2\x13\xc4\xe4\xf4\x5b\x52\xa7\xf0\x3f\xbf\x3e\x18\x33\xed\x76\x83\xcf\xb5\x1d\x73\x96\x49\x7a\x2c\xa5\xcc\x8a\x01\x2b\x89\x26\x21\x00\xe5\x1c\x0a\x09\x99\x46\x24\x3f\xc1\x7b\x7a\x49\x39\xd1\x12\x6f\x6f\x6a\xd9\x26\x8e\x87\x47\x38\xa9\x78\xc4\x82\x23\x06\x46\xb2\xf7\x0f\xee\x3d\x63\xe8\x6e\x38\x38\x9f\x2e\x61\xc8\x7e\x82\xa6\x48\x8f\xd4\x10\xf5\x29\xd5\xc7\x3f\x79\x26\x8e\xf8\x3a\x6e\x4c\x65\x24\x2a\x8a\xc5\xad\xe1\x3a\x75\x1f\x61\xb0\x88\x15\x3a\x9f\xc7\x65\x1b\x91\xfd\x04\xf1\x23\xb4\xab\x38\x39\xeb\x13\xac\x8f\xd1\x06\xcb\x95\x52\x22\x3e\x63\xf1\xf3\x52\xbf\x6c\x65\x7f\x40\x42\x6d\xaf\xf4\xe5\xc8\xe1\x5c\x46\x8b\xec\x27\xa8\x94\xa1\xee\xf6\xa5\xc9\x45\xdf\xef\xfb\xac\x75\x43\x82\xdd\x6f\xcf\x8f\xfa\x9b\x01\x15\xca\x29\xab\x79\x4f\x10\x56\x7b\x97\xd5\xb9\x8c\x16\xd9\x4f\x30\xd2\x73\xad\x67\x67\xcc\x92\xe8\x03\x6d\x55\x73\xcf\x5b\xbc\x20\xe2\x53\x8c\xcc\x30\x63\x5c\xa6\x9b\x47\x01\x8d\xba\x9e\x4f\x14\xce\x65\xb4\xc8\x7e\x82\xbf\x59\xcb\x6e\x2b\xb6\x38\x26\xb2\x16\xda\xf4\x5e\x33\xb5\x62\xb8\xf6\xed\x68\x72\x4c\x97\x2b\x56\xde\x3f\x37\xeb\x2b\xef\xea\x3c\x97\xd1\x22\xfb\x09\x24\xbf\xce\xab\xdc\x6d\x9d\x9d\x7e\xed\xd4\x23\x56\xd2\x84\x69\xb6\x42\xe4\x92\x84\x22\x32\xf2\x60\x8b\xc8\x96\xa1\x94\x61\xeb\xfc\xfc\x04\xa0\x1b\xf5\xac\x6a\xc8\x25\x18\x5b\x49\xd8\xf0\x02\x01\xea\xcd\x58\x85\xef\x93\x8a\xa2\x69\x77\x85\x22\x97\x05\xb0\x3c\x1a\xc3\x2e\x8c\x90\x52\x38\x40\x4d\xe4\x41\x1c\xbc\x1a\x12\xe6\x98\x9e\x7d\xb3\x3a\x18\x2e\x7a\x95\xa0\xd3\x1f\xef\x73\x65\x78\x30\xf5\x66\x45\x4a\x78\xb3\x4c\xd6\xe6\x49\xaf\xc8\x8f\x70\xa8\xba\x00\x70\xf0\xaa\xe5\x79\x04\x81\xfc\x2b\xee\x83\x79\xba\xa8\x23\x93\xd2\x1d\xa2\xc4\xe2\x2f\x0a\x09\x4f\xed\xe4\x56\xf4\x36\x8f\x7c\x87\x7d\x67\xa0\x5d\x23\x20\x0e\x1e\xf7\xc0\xf0\xc8\xe9\xf1\x77\x8b\x8a\x55\x46\x96\x74\xe5\x70\x0e\xbf\x12\xdb\x65\xce\x19\x93\x69\x6b\x3c\x7c\x2a\xd9\xbf\xdc\x4a\x95\x88\xb8\x20\xce\x4f\x9a\xfe\xff\xfa\x1f\xae\xef\xfc\x35\x52\x9f\x34\x8b\x23\x4a\x8c\x26\x28\x75\x4c\x7b\x9e\x52\x2b\xb8\xe2\x22\x5b\x75\x6a\x71\x13\x87\x91\x90\x39\x53\x08\xb1\x99\x1c\xc4\xf9\x49\xa3\x5c\xf8\x9f\xe6\xf4\xff\xed\x27\x00\x65\xcd\xb3\x24\x90\xb3\xd2\x39\x35\xfb\x40\xcd\x24\xc7\xe8\xfe\xf7\x9c\x21\xa7\x34\x4a\xde\xa0\x55\x7f\x36\x45\x03\xca\x8b\x6f\x62\x5f\xe4\xe9\x40\xeb\xa6\x20\x0e\xa9\x17\x49\x94\xcd\x3e\xa9\x76\x7a\xa4\x82\x8b\x47\xa5\xc3\x9c\xff\x1a\x4e\x49\x72\xff\x40\x13\x99\x44\x84\xbc\x25\x79\x6c\xef\x4a\x0d\xd4\x8b\x04\xc0\xc1\xa7\x6a\xb3\xca\x7f\x6a\x4e\x88\x1f\xc5\x47\xae\xf4\x63\x69\x64\xb8\xc6\x26\xd5\xb5\xfa\xaf\xb9\x09\x91\x37\x3e\xe3\xe6\xae\xae\x99\x42\x8d\x53\x41\x1c\x3c\x6e\x14\xce\xb8\x7d\x17\xef\xb7\xb9\x42\x43\xac\xdf\x01\xa1\x99\x75\x5c\x2f\x4f\xfb\x5d\xc4\xfe\x5e\x99\xfe\x79\x67\xd9\x7f\x28\x40\x13\x11\x17\xc4\xc1\x25\x60\xad\xfe\xf6\x5b\xb6\x7b\x9a\x2f\x46\x4c\xef\xca\xed\x84\xb4\x6c\xaf\xf4\x6b\xca\x8f\x16\xcd\x55\x54\x32\x44\x33\x55\xd9\x74\x8e\x10\x12\x00\x71\x08\x09\x34\xfe\xb7\x9f\x00\xf4\x04\x3b\x4b\x02\x63\x37\x2b\xee\xf7\x62\x33\x90\xb4\x54\x7d\xbc\xfb\x67\x28\xb6\x9d\x9d\xee\x6e\x5a\x74\x54\xef\x3b\x05\x9c\xe8\x2f\x75\xe2\x15\x50\xcb\x10\x10\x07\x97\x80\x3b\x4a\x5e\x3d\x86\x67\xfc\xe0\xed\xc0\x90\x52\xcb\x8f\xbb\xbd\x76\x9c\x27\x87\x75\x1d\xb7\x83\x63\xbd\xde\xdb\x91\x8f\x95\xbc\x43\xc4\x05\x71\xf0\xa9\x0a\x92\xa0\xbc\x9d\xdb\x8c\xeb\x2f\xf8\x23\xa7\x88\x4c\x0b\x2b\xfe\x50\x50\x26\x9d\xfa\xf4\x7a\x8c\x18\xa9\xdd\xe5\x88\xf2\x31\xe8\x6e\x05\x71\xf0\xb8\x65\xaf\x5e\x2c\xd1\xde\x64\x2c\xbf\x94\xd0\x94\x74\x8f\x89\xe0\xa3\x6a\x9c\x99\x92\xbf\xb2\x5d\xda\x7e\xb7\x32\xcf\x97\xd1\x6c\xc8\xad\x04\xe2\xe0\x12\x58\x14\x98\x79\x92\xaf\x77\x9f\xf9\x6f\x35\xd1\x0f\x99\x94\x5d\x01\x0c\xeb\x52\x73\xd6\x66\xaa\xe8\xa1\x2b\xab\x92\x6c\x16\x59\xf3\x88\x77\x22\x10\xf7\x8f\x04\xfe\x77\xe1\xf2\x1f\x1a\x00\x95\x13\x67\x69\x60\x7d\xa7\x6b\xff\xae\x80\x90\x46\x05\x0a\xa3\x15\x4e\x54\x9b\xb9\x8f\x59\x00\xaf\x07\xe5\xef\xda\x8b\xa8\x04\x2c\xdf\x46\xc3\x95\x11\x63\x07\x71\x70\x0d\x0c\xe0\x6a\x05\x6e\x6a\x84\x46\x2f\x2c\x59\x5e\xd5\x7b\xae\x23\x92\x3e\x16\xf7\xee\x9e\x45\xee\x81\xb4\xa1\x99\xed\x86\x71\x19\xb4\x8f\x18\xc4\x21\xed\x21\x15\x7a\xb5\x6b\x79\x77\xef\x85\x6c\x49\x82\x5e\xfe\x91\xd1\xf5\x0d\xd9\x27\x9f\x39\xe5\xae\x7c\xea\x7b\xa3\xf2\xf8\x38\xe7\x02\xd4\x42\x09\xc4\xc1\xe3\x1a\xcd\x56\x04\xa2\x0f\x6a\x5e\xac\xe2\xe8\xcc\xaf\xbd\x13\xc0\x99\xf8\xea\x12\x1f\x19\x0b\x4e\xf5\xdb\x60\xcc\x9d\x30\x93\x22\xa8\x1d\x0d\x88\x83\x6b\x80\x7e\x7c\x32\x78\x5c\x24\x95\x2e\x77\x81\x8c\xe1\x12\xc6\xbc\xfc\x50\xfb\xe2\x48\x2f\x1f\xa9\x95\xd5\x35\xc5\x6d\x7e\x96\x6b\x69\x08\x0d\x80\x38\x84\x06\x1a\x01\x7e\x02\x50\x6d\x77\xe6\xb6\x12\x1f\x3c\x21\xd5\xa4\xf7\xb1\xb7\xb9\x38\x4c\x86\x4c\x7f\x8a\x3c\xd3\x40\x7f\xa3\x67\x53\x78\xb9\x77\xc7\x88\xc4\xc3\x56\x2f\x05\xda\x56\x02\xe0\xe0\x1a\x58\x79\xa5\x17\xe9\x49\xd4\x97\x2b\x89\x9a\x70\x83\x76\x42\x2a\x8c\xfe\x4e\x4d\xf0\x83\x3e\xd9\xb2\x4f\x3a\x95\x32\x3e\x72\xfa\xd0\xf1\xd9\x20\x0e\xc9\x5d\x98\xb8\x6b\x9a\x4b\x5b\x1a\x35\x4d\x31\x20\xac\x1f\xaa\x87\x25\xd3\x6e\x74\xb9\x3e\x55\xa3\x20\xf4\xed\x88\xac\x13\x2d\x9f\x3f\xe4\x2e\x04\x70\x48\x8f\x82\xdc\x8b\xea\xf4\xd6\x85\x95\xe5\x18\x2f\xf5\xc9\xc4\xe5\x06\x0d\x28\xa3\xe8\x43\xb4\x27\x56\x88\x8a\xb9\x32\x0e\x93\xc6\xa0\xa3\x6a\x40\x1c\x5c\x03\x9d\xd2\xc5\x18\x6a\x2b\x0a\x9e\xf4\x24\xfe\xa6\x03\xb7\x92\x6b\x2f\x08\x30\x2f\xbf\xe2\xea\xe3\x54\x76\x4d\xa3\x73\xb0\x90\x86\xb6\x95\x80\x38\x28\x0f\x00\xfc\x04\xa0\x42\xfb\x2c\x0d\xac\xb2\xe5\x4a\x16\xdd\x79\xa7\x31\x67\xfe\x5b\xaf\x8e\xf4\xfb\xe5\xdf\x9d\xe6\x5e\x52\xf5\x45\x94\x8d\x2b\x29\xbf\x08\x35\xae\xab\x22\xc6\x0e\xe2\xe0\x1a\x50\x6a\xb9\xf9\xd1\x26\x58\xed\xf6\x60\x5e\x10\xfd\x22\xbf\xd0\xa0\x04\x01\x0f\x7d\x76\xe5\x4d\xf2\x00\x12\xd6\xe9\xbd\x16\x5f\x19\x44\x5c\x10\x07\x9f\xab\x64\x61\x26\x26\x35\x69\x35\x83\xa0\x26\x11\xbc\x4f\xa6\xe6\x33\xf4\x0f\xd0\x1e\x57\x2a\xcf\xbe\xf1\x72\xa5\x9a\x7a\x70\xad\x19\x5a\x77\x03\x71\xf0\xb8\xdd\xa3\xba\x7b\x11\xb5\xcc\x0b\x51\xdd\xf2\x5e\xfa\x0d\x4f\x64\x64\xfc\x8b\x32\x69\x1e\xed\x5f\xe6\xc3\x21\x57\x68\xba\x44\x03\xad\x15\x83\x38\xb8\x06\xd4\x19\x6b\x73\xb5\xa9\x3e\x79\xd1\x1c\xda\xed\x0b\xae\x61\xec\x3a\x5c\xe2\x8a\x99\x40\x69\x13\xbd\x33\xa8\xdf\x33\xce\xad\x00\x79\x4a\x40\x1c\x94\x07\x00\x7e\x02\xd0\x5b\xcf\x59\x1a\xc0\x30\xf8\xd3\x30\x39\x1b\x95\x62\x14\x89\xe1\x40\x52\xa8\xa9\x72\xcd\x2b\xa4\x5a\xed\xf4\x89\xc2\xd8\xcb\xda\x3c\x3b\x36\x33\x6e\xc4\xd8\x41\x1c\x5c\x03\xdc\xa3\xb2\xbe\xb6\xea\x5f\x74\x19\x54\xe2\x1e\xbd\xd5\xdf\xa2\xaf\x91\xb2\x33\xad\xb0\xe4\x1b\x3c\x76\x08\xa8\xe3\x49\xac\x82\xce\x41\x02\x71\x48\x5b\x0a\xb4\xbe\x7c\xbd\xe6\x8d\x8e\x77\xdb\x52\x71\xd4\x66\xae\x7d\xae\x64\x1c\x57\xe5\xd3\x62\x52\x75\x90\x80\xad\x4a\xf5\xcf\xf0\x6e\x68\x4b\x01\x80\x43\x3a\x0d\xed\x0d\x36\x43\xb7\xad\xdd\x49\xf8\xcb\x6c\x12\x3f\xc3\xfe\xb4\x5c\x7c\x29\xeb\x43\xf3\xed\x60\x32\x81\x1c\x71\x67\x65\x52\x1c\xc8\x5b\x03\xe0\x90\x4a\xc2\x34\xf5\x58\xa1\x1a\xb1\x6d\xdf\xfc\x2c\xcd\x54\x15\xfe\xc9\x7d\xe7\xce\x97\x3b\x52\x42\xfd\x5e\x0f\x34\xaa\xdf\x4a\x28\x94\x23\x34\x00\xe2\xa0\x3c\x00\xf0\x13\x80\x5e\x41\xcf\xd2\x80\x41\x43\x30\x76\x54\x55\x57\xf5\xca\x0b\x1f\x95\x5b\x42\x3e\x1f\xf6\x75\xf9\x7c\x06\xb7\x22\x37\x49\xfd\xb6\xbd\xbf\xe5\x4e\x7a\x23\xc6\x0e\xe2\xe0\x1a\x08\x56\xcd\x98\xc8\x74\xf4\x95\x1b\xe5\x78\x5a\xf3\x53\x53\xe3\xc5\x6d\x9d\x83\x2b\xbe\x28\xf7\x99\x9f\xfe\xbd\xb6\x75\x32\x4a\xfa\x01\x11\x17\xc4\x21\x6d\x29\xf8\x4a\xef\xe6\xc3\x33\x49\xdd\xc4\xe3\xa6\x7a\xa7\x25\x46\xd8\x1f\x7b\xf4\xe6\x55\x13\xcb\x9d\x47\xc4\x24\x7b\x5f\x0c\x04\x20\x9f\x02\x88\x83\xc7\xf5\x9d\x9b\xa6\x89\xc9\x61\xd8\x17\xe0\xdf\xe7\x19\x70\x27\x23\x7e\x66\xd1\xd0\x79\xc1\x40\x95\x30\xa0\x87\x26\x97\xd7\xa6\x6d\x14\x11\x17\xc4\xc1\x35\x40\xf4\x39\x38\x24\xed\xf1\xb2\xe4\x1c\xe3\xef\x6d\xce\xba\x30\xde\x99\xe4\xda\x63\xd7\x9f\xd1\x1b\x12\x12\xee\x45\xea\xa1\x8c\xd7\x11\x1a\x00\x71\x50\x1e\x00\xf9\x09\x40\x8b\x8a\xff\xf8\x09\x24\x91\xfd\x04\x28\xe4\xee\x7c\x2d\x31\x69\x12\x4c\x78\xb9\x49\xf1\x19\xb9\x93\xe3\x4f\x38\xbb\x27\x53\xfd\x87\x65\xad\xaf\xa3\x11\x94\x3d\x11\x3a\x97\x85\x13\x64\x3f\x01\x5d\x68\x56\x2f\x03\xd5\x57\x7a\x1b\x9b\x8b\x2e\x0d\x9d\xcd\x26\x9c\x1b\xe1\xf8\x29\x36\x32\xb7\xb7\x7f\xbc\x5b\x89\xad\x79\x6e\x72\x2e\xcb\x44\xc8\x7e\x82\x65\x3d\xbc\xdb\x79\xe3\x49\xe3\xe5\xa9\x5d\x03\x92\x3f\xdb\x9c\x07\xdf\xfc\xbd\xc7\x58\x96\x2c\xf1\xa4\xcc\xe9\xde\x25\x7d\xd4\xf3\xe8\x9f\x22\xdb\x88\xec\x27\x78\xa1\x94\xf0\x65\xd0\xb5\xe5\xd1\x04\x61\x7d\x48\x03\xef\x69\xc6\xab\xa8\xcf\xec\xfd\x4a\xd4\xf5\x17\x31\x7b\x25\xcb\xd1\xd4\x7d\xcf\x65\xb4\xc8\x7e\x82\xdb\x09\x1e\x04\xe9\xee\xb1\xae\x92\x3a\xa5\x71\x1d\xf4\x72\x3e\x64\x02\x0b\x2f\x32\x1a\x1e\x1b\xaa\x34\x1d\xcf\xdc\x7b\x77\x27\xf2\x5c\x46\x8b\xec\x27\xa8\xc4\x7f\x2d\x56\xfc\xda\x33\x56\xf8\x38\x1c\x9d\xeb\x7d\xf6\x7d\xf4\x67\x7b\xb2\x25\xdf\x15\x26\x5d\x0a\xc3\xae\x34\xcf\x2c\x9f\xc3\xa1\x9d\xc1\xb2\x92\xc8\x7e\x82\xc6\xf9\x35\x3d\xfe\xf4\x24\x9b\x23\xed\x87\xad\x16\x0e\x1b\x2f\xfe\xfa\x53\xcd\x5c\xb1\x09\x61\x64\x64\x27\xd3\xa4\xd1\x15\xd0\x3f\x97\xd1\x22\xfb\x09\x76\x15\x5e\xaf\xa4\xa4\xb2\xd0\x92\x6c\x04\xb7\x9a\x24\xf5\x1b\x3f\xd5\x58\x57\x76\x5e\x9c\xc7\xbd\x6e\xb7\x88\xba\x82\xda\x74\xff\xdc\x96\x00\x41\x77\xea\x59\x89\xfe\x53\x9f\xad\x4e\x7c\x73\xdd\x9e\x2a\xa6\xbc\x2c\x7b\xd4\x68\xdc\xd7\xd0\xaa\x47\xc9\x07\xd1\xeb\x79\xec\xd5\x38\x76\x7e\x7f\x21\xe3\x24\x88\x83\x27\xfa\xd6\x96\x4b\x14\x58\x97\xf1\x5c\xc9\xca\xb0\x5e\x08\xb0\xa4\xbd\xba\x2b\xd9\x8e\x63\xb1\x9d\xf5\x73\x14\x7f\xeb\x95\xac\xcb\x1f\xe8\x23\x33\x88\x43\x7a\x28\x6f\xe6\x50\xb4\x8f\xbb\x06\x5f\x41\x39\x50\x0f\x29\xfd\xc8\x40\xbd\xc9\xd7\xf1\x6a\x3f\x30\x61\xeb\xf3\xcc\xcc\x37\x03\x79\x35\xe8\xa1\x0c\xe0\xe0\x71\xf9\xc8\x6e\x91\xef\x3e\x7e\x77\x95\x54\xb8\xd5\xd3\x94\x2c\xa6\xef\x0f\xea\x02\x9a\xc2\x80\x55\x62\xec\xc9\x6d\xd1\x78\xb3\x62\xe8\xc0\x76\x10\x07\x4f\xf4\x96\xd8\xa9\xb7\x93\xaa\x13\x50\xb5\xda\x37\xe7\xcd\x43\x4f\xfe\xe6\x06\xba\xdd\x47\xcd\xde\xc3\xb8\xd2\x2b\x6e\xa7\x5b\x2f\xc1\x85\x48\xf4\x20\x0e\x7a\xd8\x03\xfc\x04\xa0\xb4\x79\x96\x06\x58\x48\xa2\xf7\x6b\x1c\xb5\xde\xde\x4a\x67\x3e\x78\xbf\x11\xb9\xbf\x98\xac\x7c\x45\xab\x8c\x5c\xf3\xa9\xbf\xd2\x58\xc3\x85\x4e\x68\xdf\x1c\x88\x83\x6b\x80\xca\x4a\xdb\xc0\xa7\x2b\xbc\x6c\x71\xd1\x67\xc5\xaf\x69\x39\x85\x4a\x83\x73\xfd\x4d\xf3\xa7\xbd\xa7\x64\xc4\x85\xcf\xb7\x1b\xa0\xde\xf4\x20\x0e\x3e\x57\x2b\x4d\x5e\x57\xf1\x4f\x5f\x38\xd1\x86\x52\x74\x55\xd8\xdb\xb3\xe5\x4c\xbf\x1c\xf4\xaf\x3d\xac\x9d\x32\x7f\x56\x4f\x81\x9d\x0b\x1d\x72\x04\xe2\xe0\x71\x4b\x4e\x33\xd0\x05\xfa\x13\x30\x17\xad\x8d\x1c\x70\xd2\x95\xd4\xdf\x74\x37\xba\xad\x06\x29\x98\x4f\x13\xe3\x64\x0d\x9a\xfc\x80\x1a\x43\x82\x38\xb8\x06\x44\xdf\x58\xad\xf5\xdd\x6a\x29\x9c\xfb\xa9\xe0\xf3\xa2\xaf\x39\xdd\xbd\x23\xbc\x78\x91\xd1\x76\x38\x6a\x2b\x9d\xfd\x31\x5a\xc6\x33\x84\x06\x40\x1c\xf4\xb0\x07\xf8\x09\x40\xcf\xb0\x33\x0f\x29\xcd\x1d\x98\x9a\x6b\x90\xa8\x14\x1f\xbb\xe0\x80\xeb\xc8\x83\x53\xad\x59\xf1\xb5\x3b\x9a\xfb\x49\xd4\x27\x0e\x7b\xf7\x8b\x4e\x50\xbf\x7f\x10\x87\xd4\x68\xd1\xa0\x42\x28\x60\x46\xec\x64\x33\xea\x22\xbb\xc6\x52\xfc\x95\x81\xd3\x86\x1b\xf8\xd6\x09\x66\x11\xc9\x7e\xd4\xbe\x93\x91\xd0\xa7\x00\x10\x07\x9f\xab\x44\x21\x14\x33\x01\x54\x32\x2e\xcc\xec\x1e\xf4\x55\xe5\x91\xc7\x89\xd2\xae\x14\x0e\x7b\x19\xa6\xf9\x7b\xb7\x5e\xff\x24\xe9\x85\xf6\xa6\x82\x38\x78\x5c\x5b\x26\xd9\x0b\x77\x5f\x68\x17\x0e\x3b\x86\xe2\x39\x6c\xfe\x38\x72\x54\x20\xfa\xf3\xb5\xe8\x80\x4e\x15\x4b\x3f\xda\xfb\x55\x23\xd4\xe7\x18\xc4\xc1\x35\xc0\x62\xf8\xbc\xc8\x0f\xcd\x7b\xe5\xd9\xf0\x26\x99\x41\xb0\xbc\xda\x12\xa9\xd0\xe2\x68\x47\x23\xb3\xce\xfd\xd0\xa3\xba\xd1\x0c\x73\x84\x06\x40\x1c\x94\x07\x00\x7e\x02\x50\x41\x71\x96\x06\x98\x1f\xb4\x15\xde\x0d\x48\xd2\x2d\x65\x12\x36\x49\x6d\x97\xdd\x11\xa4\xba\x7c\x78\xdd\x4a\xda\x10\x2b\x6a\x7e\xf4\x8d\x71\x0f\x94\x03\x41\x1c\x5c\x03\x84\x3e\xae\x76\xd3\x17\xe3\x27\xbf\x09\xef\xdc\x42\xd1\x2d\x0f\x92\x9a\x91\xd4\xbe\x78\xb0\xb4\xc3\x61\x91\x3d\x95\xf9\x33\x0a\x03\xda\x97\x0b\xe0\xe0\x73\x35\x25\x98\xa9\xcb\xe5\x9a\xea\xde\x5f\x30\x1c\xc8\x70\x5b\x4a\x8b\xb3\xa9\xe2\xc1\x60\xe5\xae\xc8\xfb\xa2\x6f\xe4\x7b\x38\x63\x90\x07\x0c\xc4\x21\x2d\x2e\x5e\xd6\x1c\x61\x66\xdf\x6a\x21\x2b\x7a\xf5\x8c\xfc\xe7\xc0\x90\x75\x2c\xc3\xb4\x67\x86\x53\xdb\xc9\xc8\x41\xa1\x78\x11\x0b\xd4\x0b\x09\xc4\xc1\x35\x40\x6c\xf3\x30\x58\x70\xc7\x53\xe7\x94\x4a\xcf\x53\x6d\x47\x89\x86\x26\xff\x13\x79\x62\xca\xdb\x7b\x1d\x03\xee\x6f\x76\x03\x7d\x3f\x42\x8d\x65\x00\x1c\x94\x07\x00\x7e\x02\x50\x75\x77\x96\x06\x4e\x30\x46\xb9\x9b\xf0\x57\x48\x76\xf0\x5e\x11\x58\x26\x49\xda\x25\xad\xdb\xcb\x78\xc7\x0d\x6c\xcb\x7f\x4d\x64\x78\xcb\xea\xa3\x81\x18\x3b\x88\x83\x6b\xa0\x7b\xca\xa5\x26\xd7\xdf\x5b\xe9\xab\xcd\x93\xd6\x0b\xdf\xad\x99\xea\x9b\x99\xc5\x3e\xb6\x89\xbb\x2e\x69\xd2\x9a\xdd\xd9\x37\x1d\x82\x16\x54\x00\x1c\x7c\xae\xbc\x67\x48\x67\xc7\xed\xe9\xbf\xa9\xd5\x3d\xa6\x5e\x6b\x3d\xe4\x8a\xb8\x55\xd8\x67\xc1\xfd\x7b\xa5\x08\x75\x02\xb7\xef\xe7\xff\x39\x9c\x10\xc4\x21\x79\x55\xb2\xfd\x51\x34\x4a\x55\x5e\xfb\xcf\xd6\xd7\xf7\x2f\xcb\xd8\x55\xed\x2e\xf5\xf9\xc5\xfe\x16\x5b\x18\x98\x15\x0b\x78\xb8\x04\x1d\x56\x0c\xe2\xe0\x1a\xb8\xbd\x65\xa6\x2f\xfb\xe3\xa9\x81\x62\x4b\xc0\xfb\x56\x3b\xfc\xa2\xea\x08\xce\x5a\x15\xce\xfb\x97\xaa\xbd\x75\x4f\xb3\xee\xa1\xa7\x22\x34\x00\xe2\xa0\x3c\x00\xf0\x13\x80\x4a\xed\xb3\x34\x60\xd5\x11\xc1\x2c\x17\x33\xcc\xd7\x4c\xf1\x22\x09\xef\x9e\x75\x87\x7e\x40\xd1\xbd\xcc\xbf\xfd\x95\x35\xee\x63\x2f\x23\xc6\xa5\xa1\x63\xeb\x41\x1c\x5c\x03\x23\xc4\x61\x22\xa8\x2b\xf2\x51\xe9\x14\xdd\xd9\xf7\x45\xfb\x67\x13\xb4\xf8\x5a\xac\xc3\xa3\xd5\xf5\x6f\x60\xbb\x14\x68\xfe\x81\x16\x82\x41\x1c\x7c\xae\x96\x8e\x2f\x18\x7a\x3c\xfc\x7d\x75\x8a\x88\xf2\xa4\x84\xaa\x5c\xc3\x95\x55\x22\xe5\x7a\x67\x7b\x55\x4c\x1c\x5e\x66\x9a\xa2\x53\x10\x22\x2e\x88\x83\xc7\xa5\x7c\xdc\x2a\x87\xb6\x82\x5f\xad\x27\x98\x78\x2d\x40\xfe\x63\x5b\xdf\xe9\xc6\x21\xa3\xed\x52\x7f\xa3\x2e\xcb\xee\x60\x38\x6a\x0c\x22\x2e\x88\x83\x6b\xe0\x89\xa8\x83\x67\xc1\x6b\xa5\x36\xc3\xf5\xf2\x8b\x5f\xe5\x1e\x38\x65\x9e\x28\x7f\x15\xfc\x1a\xdd\xa5\xe1\xe8\xdb\xf1\x5c\xfd\xaf\x3d\x42\x03\x20\x0e\xca\x03\x00\x3f\x01\xe8\xbd\xe7\xcc\xef\xc2\x1c\x5d\x6e\xf3\xe4\xcf\x2a\xb2\xec\xff\x9e\x70\x62\x97\x55\x73\x88\x4b\x5c\xde\xd0\x1d\x4b\x53\x90\xad\x34\x9d\xc0\x79\x01\x7d\xbc\x03\x71\x48\x7b\xc9\x07\x2d\xdc\x3f\xec\x50\xd5\xd3\x97\x79\x7f\xb2\x61\x92\x3e\xb5\x1a\x4e\x97\x95\x1a\xa8\x70\x32\xd2\x4e\xa6\x70\xbe\xfe\x1e\x7a\xdf\x00\x71\xf0\xb9\x22\xe2\xbb\x6f\xc7\xf6\x4b\xe8\x4f\x71\x89\xd2\x03\xae\xaf\x84\x62\xfb\xbf\x73\x8d\x89\x89\x76\x0f\xf6\xae\x48\x1f\xf4\xba\xab\x47\x21\xe2\x82\x38\xa4\x67\x8c\x50\x40\xaa\x2f\x8f\x0b\x27\xc3\xef\x15\xb3\x0f\x83\x4b\xb7\x37\xf8\x63\x72\xab\x48\x1f\x69\xb6\xbf\xb6\x1d\x41\xbd\xf4\xee\x12\xf4\x8c\x01\x70\x48\x1a\x18\x65\x37\x19\x30\x50\x97\x7e\x1f\x70\xea\x91\x2a\x5f\x96\x3e\xce\xa6\x53\x57\x74\xd9\xfe\x66\x2c\x36\x19\x33\xd6\x0f\x4a\xa8\x37\x3d\x88\x83\xf2\x00\xc0\x4f\x00\x7a\x09\x3d\x4b\x03\x1e\x2b\x5d\x29\x58\x2b\xfe\x26\x63\x9f\x2a\x27\x88\x83\x0f\xb9\x38\x51\x0f\x3a\xb2\xdd\x28\x99\x56\x49\x7e\x95\xbb\x4d\x64\xdb\x43\x0d\xd6\x00\x1c\x5c\x03\x46\x46\x6f\x19\xc3\xca\xf8\x73\xb1\xaa\xbe\x48\x3d\x7e\xf0\x4a\xc2\x4e\xf4\x4a\x35\x59\x4b\xab\xbf\xdf\x85\xbd\x7e\x2a\x41\xd5\x53\xe8\x23\x1b\x80\x83\xcf\xd5\xe9\xfb\xb4\xc5\xbf\xe1\x74\x1f\x45\xa4\xb8\x58\xef\x3a\x25\xe6\xaa\x96\x07\x52\xb1\x0e\x5c\xf4\x29\xc1\xdb\x7f\xad\x48\x43\x01\xd5\xef\x20\x0e\x1e\xd7\x46\x5d\x0c\x67\xe0\x2d\x71\x9f\x5f\x9f\xef\x55\x4b\xb5\xc0\xdb\xbb\xbd\xdf\x17\xd2\x4b\x8b\xf9\x84\xab\xee\xa2\xbe\xe6\xbf\x7c\x0d\x11\x17\xc4\x21\xbd\x17\x34\x3c\xfa\x25\xb9\x5f\x6a\xbe\xe1\x69\x89\xea\x60\x7b\x30\xc2\x37\xba\xc2\x9e\x46\xfb\x4e\x97\x24\x5d\x63\x64\x06\x53\x00\x5a\x04\x04\x71\x50\x1e\x00\xf9\x09\x40\xdb\x05\xff\xf1\x13\x48\x22\xfb\x09\xf4\x97\x0f\x46\xb8\xf5\x6f\xb8\x7c\x36\xe8\xce\x45\xef\xb5\x70\x7d\x16\xea\x3d\xcc\x14\x2d\xbb\x82\xde\x58\xf6\xf6\xf6\xe6\xb2\xc6\xb9\x2c\x9d\x20\xfb\x09\x84\x62\x65\x6b\x14\xd5\xea\x18\x26\x9d\x88\x48\xc8\x96\xae\x2a\xba\x58\xd7\xff\xcd\xbe\xe9\xe4\xba\xdb\x2f\x33\x84\xce\x61\xf4\xe8\xdc\x96\x4e\x40\xe3\x3b\xeb\xf6\xb0\xbd\xc2\x6c\x7c\x99\xf6\xe8\x29\x7f\x72\x98\x15\x3e\x89\xfe\x37\x5c\x8a\x14\x12\x53\x4b\x2c\x0d\x2d\xcc\xda\xc5\x3f\x3f\x0b\xa0\xa5\x08\x10\x07\xbf\x3d\x9e\x54\x91\x48\x98\x17\x50\x06\xc7\x60\x3c\x52\x09\x20\x77\xa0\xc0\xf0\x60\x58\x96\x34\x57\x40\x4d\x52\x6e\x6f\xf7\xf2\x54\x83\x5e\x99\x40\x1c\x5c\xc6\xa6\x69\x25\x41\x37\x68\xa9\x04\x4c\x2f\x44\xb8\x12\xaf\x10\x51\xda\xf4\x04\xe2\xea\x4c\xdd\x51\x6a\x68\xb5\xae\x6e\xb5\x2b\x87\xbe\x69\x81\x38\x78\xdc\x76\x31\x6f\x53\x23\xd1\xb1\x69\x5b\x46\x34\x59\x9d\xd9\x26\x02\xde\x0c\xba\x4b\xd6\x41\x6d\x1a\x73\xd2\x4c\x79\xa1\x1f\x3d\xa0\xd4\x0b\xe2\xe0\xb7\x87\xc0\x83\x11\xe2\x6c\xa2\x2f\x8f\x5d\x4a\x77\xa5\x43\x6e\xb4\x58\xfb\x1f\xce\x3f\xd5\xc6\x88\x89\x12\xf8\x4b\xff\xc0\x00\xbb\xf3\x33\xe2\xf6\x00\x71\x50\x8a\x04\xf8\x09\x40\x62\x3b\x4b\x03\x6b\xa4\x8c\x82\xfd\x23\x58\x8c\x3d\x18\xda\x96\x9c\x3c\xcb\x38\x6b\x6f\xdd\xe9\x57\x71\x87\xb5\x70\xd1\xde\xae\x8c\x97\xcd\x41\xde\x0f\x10\x07\xd7\x40\xa6\xe5\xda\xf6\x12\x9a\x31\x81\x55\x59\xad\xd2\x3e\x2b\xad\xf8\x0c\xcb\x2d\x2e\x42\x9e\xab\x3e\xa4\x4e\xf7\x92\x64\xd2\xb5\xd8\x10\x71\x41\x1c\x7c\xae\x58\x13\xed\x33\x8a\x23\x64\xa4\x03\x51\x7d\xd3\xdd\x09\x3f\xa3\xe7\xfc\x4c\x5f\x7e\x39\xc3\xf2\x80\xe3\xc6\x6c\xac\xf6\xb6\x1a\xd4\x2b\x0f\xc4\xc1\xe3\x8a\xe1\xce\xe4\x86\x57\xac\x2a\x0f\xf5\x6e\xd1\xbb\x0b\x99\xa7\x90\xeb\xeb\x6d\x1f\xe3\x4e\x89\xcb\x77\xe1\x0e\xac\x27\xd0\x37\x22\xe2\x82\x38\xb8\x06\xc2\xac\x50\x03\xea\x33\xd0\x50\x6c\xbf\x16\x08\x6e\x65\x6b\x7e\xbc\x1b\xe7\xe6\xf9\xf7\xb6\xaf\xc3\xf8\x33\xcd\x25\x59\x3a\x4b\xe8\x1c\x67\x10\x07\xa5\x48\x80\x9f\x00\xb4\x17\xfd\x6c\x3f\x41\xed\x86\xb3\xfd\x2f\xbe\x17\x82\x3c\xed\xa9\xfe\x34\xbb\x3f\x0e\x82\xd0\x1b\x0a\xfc\xe6\x5a\xa7\x1d\x4b\xbc\xcb\x75\xe2\x0c\xc4\x11\x7b\xf3\x41\x1c\xb2\x9f\x40\x66\xd9\xaa\x5e\x96\xdc\xd1\x8d\xaa\x6d\x10\x2f\xb0\x6a\xd2\x6b\xe7\xba\x74\xb0\x38\xb3\xf3\x83\x41\x59\x56\x11\x4c\x23\x76\x13\x44\x64\x10\x87\xec\x27\x78\x24\x1b\xc7\x1e\x63\x76\xdb\x86\xca\xe8\x77\xdb\x6c\xcc\xd3\xfd\x14\x97\x8a\xee\x10\xf9\xae\x63\x6b\x76\x6c\x19\xea\x76\xdc\x60\x44\x64\x10\xe7\x27\x8b\x82\x82\xfe\x7f\x45\x76\x7e\xa1\x1d\x8b\x72\xdd\xac\x6b\xed\xaa\x51\x71\xbe\xbc\x0d\xc5\xb2\x89\xc0\xdf\x89\x0a\x5c\x8d\x87\xcd\x7b\x86\x3a\xf1\x7d\x98\x90\x9f\x80\xc1\xee\x94\x29\x2d\x26\xd7\x11\xf5\x8b\x90\x8a\xd5\xd1\x86\xfe\x1d\x2d\xe6\xe3\x09\xea\x26\x99\xf9\x9b\x51\x33\x3b\x5f\x36\x70\xff\xed\x27\xd8\x7f\xfc\x47\x6c\xcb\xf6\xd9\x8a\x56\xbd\x9c\x70\x65\x79\xe5\x1f\xea\x50\x67\x49\x9c\x02\x94\xd5\x0a\x26\x79\x96\x6c\xb7\x93\x7f\x3f\x09\xd6\x47\x47\x38\xa2\xc4\xb0\x4c\x75\x5d\x2a\x7a\xeb\xe8\xae\xec\x09\xc8\x5d\x57\xf2\x08\x52\x2b\xef\x67\x0d\x6a\x19\x9b\x52\x52\xfb\x7f\xcf\x4f\x00\x1a\xdc\x19\x7e\x02\x5b\xce\xfc\xe5\xf4\x2a\x8b\x8d\x4f\x0a\xae\xfc\x03\x51\x58\x23\xbc\x3e\x0b\xd4\xf6\x05\x5d\x35\xc2\xc6\x8e\x2c\x99\xd7\x8d\x79\xfe\xfd\x3c\xe9\x66\x4f\x3d\xa6\x71\xfb\x20\x3b\x70\xbc\x89\xa7\x91\x5b\xd2\x33\xa5\xb1\xc4\x39\xcd\x90\x8f\x89\x2d\x55\x6d\xe3\xfb\x3a\xee\xdf\x5f\x03\x54\xc4\x2e\x36\x5f\x8d\x7f\x6a\x2c\x98\x76\x78\xc7\xd5\x39\xdd\xe4\x8d\x6d\xf5\xb4\x66\xf1\x47\xac\xe5\x57\xe9\x6d\x46\xc2\x12\x90\x9f\x00\x74\xf9\x7f\xfc\x04\x3e\x48\x7e\x02\x11\x56\xde\xd8\x77\x26\x42\xbe\xb8\x13\x12\xa4\x4c\xd4\xc7\x33\x19\x29\x15\xa2\xc6\xd5\xfe\xd1\x14\xcb\xb9\xca\x07\x5c\x3c\x29\xe7\x50\x48\xc8\xa0\x28\xc3\xaf\xca\x29\xd7\x4e\xd9\x76\x5d\xf5\x6f\x50\x82\xbb\x4b\xd7\x6d\xa2\xc8\x0b\x75\x4a\xf3\x29\x99\x79\x1c\xf5\x81\x2f\x28\xbd\x57\x2b\x99\xcf\xa3\x7c\xf1\x41\xf6\x13\x2c\xa8\xe3\xcd\xdf\x18\x91\xe8\xb2\x55\xb0\xe3\xee\x79\xd5\xb7\x23\x3c\x16\xf2\xe5\x67\x0d\xa6\x4e\xb0\x76\x3c\xb3\xe8\x25\xee\xae\xf3\xb8\x2c\x8a\x16\xd2\x65\xb3\x6b\x4b\x5b\xf3\xf8\x12\x7e\xa9\x3e\x7b\x2b\xe9\xed\xbd\x5e\x2c\xca\x24\xe0\xb6\xae\x5b\xd0\xf4\x28\x8e\xe9\x27\xca\xa0\x46\xd9\xb9\x8c\x16\xd9\x4f\xb0\xf9\x99\xae\xba\xca\xa1\x04\x75\xf6\x5b\xdc\x7d\x77\x7c\xfd\xfe\x22\xd2\xc7\x77\xc5\x26\x4b\x52\x5b\xab\xc7\xbe\x1d\x3d\x8f\x3d\x97\x6f\x98\x28\x9e\x48\x97\xcd\x28\x51\xaf\x3c\x6e\x19\x0e\x51\xa9\x4d\xd2\xe1\xb6\x8c\x57\xe2\x74\x4f\x0e\x09\x66\x7c\x4b\x6c\x5b\xb5\x5c\x94\x15\x2c\x7d\x2e\xe7\xe7\xfb\x20\xfb\x09\xbe\x5c\xc9\xaf\x34\xe2\xec\x93\x5f\xdb\x54\xe1\xa7\xd0\xba\xcc\xd4\xd1\x83\xa7\xae\x19\x39\xc4\xb5\x9d\xac\x55\x67\x91\x66\xbc\x7b\x2e\xa3\xad\x40\xba\x6c\xea\xe7\x13\xb4\xad\x56\x47\xf9\xb9\xe7\x43\x84\x15\xf7\xad\xad\x45\x52\x88\xaa\xaf\x9a\x6c\xd4\x56\x11\x0b\x33\xa9\xac\xe3\x34\x9f\x5b\x45\x0c\xba\x51\xcf\xaa\x86\xfc\xc8\xac\xee\x74\x18\x75\xd5\xbf\x9a\x96\xbc\xd5\x50\x89\x2d\x9a\x52\x4d\x83\x76\x12\x33\xac\x9d\x95\x2c\x9c\xf5\xf5\x8e\x74\x27\xa2\x0a\x00\x71\xf0\x6a\x48\x65\x5f\xcc\xb6\x0b\x2f\x27\x6f\xcd\x0e\xe5\xd8\xdf\x6c\xda\x73\x18\xc5\x32\x2f\x98\x84\x7b\x96\xf2\xe1\x38\xcd\xe6\x3a\x23\xf4\x12\x0e\xe2\xe0\x55\xcb\xbd\xce\x27\x1f\x92\x2f\xb8\x7f\xc6\xb1\x36\xd7\x1e\x1d\xe9\x68\xdf\xc8\xdf\x65\xfb\x62\x55\x4d\x72\xdd\x9c\x0a\x4b\xca\x0f\x13\xda\xdd\x01\xe2\xe0\x71\x7f\x88\xe8\x5e\xdb\x50\xe7\x34\x4e\x16\xe0\x15\xbb\x90\x85\xde\x86\x47\xff\xc8\x9d\xa2\x5c\x13\x6d\x80\x4e\x41\x75\xf8\xf7\x30\xb4\x73\x08\xc4\xc1\x4f\x81\xca\xa9\x7f\x9b\xad\x8e\x99\x26\x43\x82\x67\x1b\x16\x5d\xa7\x2c\xed\x95\xc3\xf6\x35\x68\x94\x81\x31\x73\xfc\x86\x61\x9b\x80\xb9\x14\x62\x33\x39\x88\xfb\x5f\x55\xd6\xff\x34\xa7\xff\x6f\x3f\x01\x28\x6b\x9e\xd9\x94\x3a\x08\x73\x2c\x96\x91\x7d\x24\x1e\xe5\x18\x1b\x2d\xc3\xad\xe5\xe3\xaf\x8f\xa3\xca\x2d\x65\x0e\x4d\xed\xb5\x78\x98\x0b\xf2\xd0\x77\x19\x10\x07\x97\x80\xd7\xb4\x9f\xf9\xe4\x9f\x61\x8b\x1b\xbc\xd7\x54\x4d\x7f\x71\x87\x2a\x06\x2f\x70\xd9\xf2\x97\xbc\x17\xae\x89\xea\x31\xf1\xf6\xc9\x40\xc4\x05\x71\xf0\xa9\x12\xd9\xd0\x96\x11\x0a\x15\x8c\xd6\x58\x4f\x2e\x17\xaa\xc2\xa9\xc3\x64\x3a\x58\xc3\xd7\x64\x89\xcc\x66\xe1\xbe\x22\x88\x71\x19\x5a\x97\x06\x71\xf0\xb8\xc7\xed\xea\x55\x77\x37\xf9\x75\x22\xb6\x8c\x22\x15\x88\xed\x64\xf7\x24\xa8\x6e\x5d\x70\x6a\x43\xaf\xe3\xcd\x2f\xf3\x9f\x13\x80\xbe\x7d\x82\x38\xb8\x04\x7e\xfe\x25\xb2\xff\x6c\x61\xfd\xbc\x5b\x44\x5c\xe3\x95\xe5\x5b\xf6\xda\xad\xb1\x67\x9e\x5b\xbc\x96\xc5\x87\x77\xb0\xe8\xf2\x50\x34\x10\x12\x00\x71\x08\x09\xfc\xaf\x67\xe5\x7f\x1d\x6f\x0b\x78\x82\x9d\x25\x01\xa5\x41\xc9\x83\xb6\xbd\x35\xc9\xac\xbf\xf9\xa5\x24\x0e\x79\x7c\xf7\x0a\xfe\x2a\x52\x29\xd3\xa3\xf4\xd4\x3d\x63\x8e\x72\xee\xbe\x0d\xed\xf5\x04\x70\x48\x47\x1c\xdf\xf2\xbf\x68\x93\x32\x91\x5f\xee\xf0\x79\xe5\x16\x41\xf5\xb7\xef\x2f\x79\x58\x47\x71\x45\x44\xaf\x16\x97\xca\x25\x9b\x7f\x83\xfa\x9d\x83\x38\xf8\x54\x2d\xd7\x4f\x3f\xa7\x57\x41\xa1\x24\x4b\x89\x8a\x59\x42\x55\x36\xdc\x30\x8e\xbb\x66\x84\x89\x19\x3e\x3b\x23\x34\x71\x1c\xfa\x04\xfa\xec\x05\xe2\xe0\x71\xe9\xf5\xd0\x0f\xa6\x46\xbe\x89\x10\x2b\x6e\x45\x5c\xcb\xcb\xd3\x8b\x79\xbb\xee\x25\xf1\x3a\x2f\x39\xd3\xe2\xce\x9f\x68\x9b\x10\x7d\x44\x5c\x10\x07\x97\x40\x09\x33\xda\x0b\x7c\x61\x15\xa1\xa0\xf1\xc4\x26\x6e\x61\xc7\x32\xe2\xc2\x57\x86\xdc\x52\xdf\x23\x83\x83\x9e\x27\x33\x2b\xbe\x5a\x41\xbc\x13\x81\xb8\x7f\x24\xf0\xbf\x0b\x97\xff\xd0\x00\xa8\x9c\x38\x4b\x03\x95\xbb\xcb\x46\xd4\xac\xe6\xce\xdf\x02\xf2\x08\x98\x7d\xa9\xf4\x7c\x77\xee\xa5\x2a\xf6\xc7\x7d\x2e\xbc\x21\x20\xb8\xc2\x7a\x5b\x11\x31\x76\x10\x07\xd7\xc0\xd7\x87\x5a\x0c\x9a\xa1\x03\x1f\x1d\xe6\x6c\xb2\x52\xff\x26\x90\xaa\x28\xea\xac\x39\x29\xff\xfa\xc8\x5d\xd3\x57\x7f\x50\xe7\xc5\x8a\x88\x0b\xe2\xe0\x73\x55\x3c\xce\x40\x1b\x47\x15\xfe\xd0\x26\xe1\xf5\x1f\x5f\x69\xd1\x09\x4f\xbe\x74\xea\xe2\x42\xa1\xdf\xf4\xac\x9a\x82\x69\x2f\x64\x5a\x11\x71\x41\x1c\x3c\xee\xc5\x92\x28\xc1\xc9\x2c\xff\xb0\xc3\x86\xac\x13\x05\x52\x65\xfa\x63\x41\xfe\x4b\x1c\x69\xdb\x5e\xa7\x2d\xae\xc2\x5f\x3d\x2f\x3d\x43\xc4\x05\x71\x70\x0d\xd8\xb8\xaa\x7d\x31\xe2\x4d\xec\xa1\x36\xec\xf3\x7e\xce\x8e\x96\x90\xb7\xc6\xef\x6d\x35\xdc\xf3\x81\x85\x0d\xe7\xf6\xb4\x13\x39\xd4\x8a\x04\xc4\x21\x34\xf0\x3f\x55\xe4\x7f\x68\x00\x54\xdb\x9d\xa5\x01\x11\x0f\x32\xb6\xa6\xf8\x7b\x9c\x35\xdb\xa2\x43\x1b\xb3\x44\x02\x28\xbf\xdf\x34\x51\xeb\xe2\xd9\x4f\xe4\x3f\x71\x6f\x45\x27\xf9\x01\xa5\x56\x00\x07\xd7\x00\x3e\x8b\x37\x49\x92\x92\xe2\xd2\x78\xf7\xfb\x31\x1f\x02\xab\x37\x66\x6f\x04\x74\xbe\x5a\xcf\xc5\xe6\x06\x6d\x10\x58\x1c\x36\x0a\x23\xe2\x82\x38\xa4\xb5\x11\xda\xc4\xf8\x3e\x57\xcc\xf1\x87\xd3\x1d\x2b\x7b\x4e\xd4\x03\x62\x37\xfe\x52\x38\xc4\x95\x4b\xd4\x10\x55\xcb\xbc\xd4\x26\x85\xda\xc6\x80\x38\x78\x5c\x06\x53\x1c\xca\xea\x2b\x77\x44\x39\x8f\x9a\x46\x38\x9a\xb9\x97\x6c\x49\x98\x47\xb2\xe3\x3b\xef\xfb\xb3\x5e\x93\x49\x0e\x1e\xb3\x46\xc4\x05\x71\x70\x0d\x74\x13\xeb\x44\x44\x05\x3a\xa8\x8c\x07\x1d\xb1\x79\x68\xd0\xe0\xf6\xfb\x8c\xbc\x5d\x98\xff\xf9\x60\x69\x70\x89\x45\xff\x09\xf9\x0c\x42\x03\x20\x0e\xca\x03\x00\x3f\x01\xa8\xd0\x3e\x4b\x03\x4f\x55\x88\x67\xf9\x5a\xf4\x6d\x9a\xf9\x3d\x19\x84\x50\xa4\xeb\xf9\xcd\xf1\x6f\x5c\x62\xec\x72\x19\x23\x74\x92\x5a\x5e\x33\x85\xda\xc8\x81\x38\xb8\x06\xf6\x12\x33\x7e\x3a\x87\x84\x6c\xa1\x64\xb6\x2a\xee\xa8\x46\xfe\x10\xec\xc0\x2d\xb0\x7c\xdc\xdf\x32\xf3\x56\xaf\x53\xf9\x70\x04\xfa\x3c\x05\xe2\xe0\x73\x75\x32\x96\xef\xf6\x69\xd6\xed\x44\xfe\x64\xff\xa8\xc8\x91\x50\xd8\xc6\x9b\x62\xb5\x91\xa9\x89\xb3\x67\x28\x32\xcb\xb9\x2d\x0c\xf2\x41\x81\x38\x24\x6f\xd9\x23\x77\x8f\x90\xa6\xbb\x4f\xf8\xae\x76\x7d\x68\xd9\x73\x26\x10\xc7\x0e\x72\xb6\x3b\xc6\x15\x0d\xd8\x4a\x55\xbe\x64\xfe\x10\xea\xe3\x01\xe2\xe0\x1a\x40\x9f\x68\x40\x33\x34\x7f\x4f\xb8\x24\x49\xe8\xd1\xca\x66\xa2\xfd\x62\xcd\xbf\xbf\xfc\xeb\xec\x87\x02\xb3\x57\x2a\xb6\x4e\xb2\x7a\x08\x0d\x80\x38\x28\x0f\x78\xfe\xb7\x06\x40\x6f\x3d\x67\x69\x20\xff\xd5\x9c\x99\xcc\x29\x51\x5a\xe0\xe2\x77\xbf\x70\x05\xac\xd0\x35\xdd\x32\x67\xb6\xf7\x39\x4e\x7f\x35\xfc\xde\x62\x9f\xac\x43\x9e\x12\x10\x87\xe4\x29\x61\x64\x92\x9b\x4a\xf9\x1c\x23\x59\x2f\x2b\xdb\xfa\x71\xc1\x08\xfd\x87\xcf\xe2\xe2\xf7\x3e\xe1\x12\x9a\x0b\xca\x6e\x92\x18\xd0\xe7\x64\x10\x87\x74\xb4\x94\x6c\x99\x5c\xaa\x67\x03\xf5\x05\x62\x0b\xf3\xe4\xef\x4e\x5c\xef\x28\xfc\x53\x88\xef\x7d\x11\x94\x91\x39\xb8\xfe\xa7\x8d\x04\x17\x7a\xdb\x00\x70\x48\x2d\x0a\x77\x27\x99\xa2\xbd\x0c\xd4\x53\xb8\xaf\x2a\xf9\x6b\x18\xbd\x11\xca\xdc\x69\x89\x6c\xd7\x94\xb1\xf9\xa8\x50\x3b\x22\x30\xf5\x00\x6a\x51\x08\xe0\x90\xde\x0a\x08\x44\xcc\x1a\xd4\x06\xda\xf8\x94\x3e\x9c\x44\x53\xb9\x66\x85\x98\x66\x70\x6e\xb8\x55\xc9\x2f\xd5\x5b\x88\x4b\xf5\x19\x24\x22\x34\x00\xe2\xa0\x3c\x00\xf0\x13\x80\x5e\x41\xcf\xd2\x80\x80\x69\xde\xb8\x7f\x81\x03\x8d\x7f\x4a\xcc\x9e\xec\x69\x1e\x7e\x70\xfd\xcf\xe3\xdb\x16\x29\x0e\xef\x6e\x4e\x5d\x8f\x3c\x4d\xe4\x43\x8c\x1d\xc4\xc1\x35\x70\x38\xc0\x77\xf2\x93\x77\xf7\x40\x44\xa9\x32\x8f\x98\x68\x92\x7e\x7c\xb9\xa9\xc9\xfc\x59\xf2\xfc\x4d\xcc\x9b\xb2\x5d\x8a\xad\x0e\x88\xb8\x20\x0e\x3e\x57\x21\x79\xd6\x35\x2d\x9d\x7e\xd6\x91\x4c\x6f\xcb\x0b\x37\x12\xcb\x4f\x3b\xee\x28\xae\xe4\xd2\x4d\xd7\x69\x18\x93\x2e\x4d\xda\x43\xed\x75\x41\x1c\x3c\x6e\xb8\xf1\xfc\xc4\xdd\x51\xf2\xa0\x42\x7b\xe3\x2b\xbf\x34\xd2\x3e\x24\x5a\x85\x65\x37\x7d\xc2\xea\xdb\x18\xc6\xbb\x8a\x7b\xf1\x33\x64\x5f\x06\x71\x70\x0d\x84\x8e\x2c\xf2\xb2\x25\x09\x45\xda\xd2\x86\x9f\x7c\xc7\x60\xbb\x98\x77\x3a\x85\x9a\xee\x7a\x8b\x9d\xe7\xa8\xe4\x1a\x7d\x63\xcb\x2a\x42\x03\x20\x0e\xca\x03\x15\x00\x3f\x01\x68\x51\xf1\x1f\x3f\x81\x0f\xb2\x9f\x00\x8d\xae\xf5\xbb\x7a\x1a\x53\xe3\x54\x1c\x41\xc5\x8b\xc8\x79\x5e\x9c\x7c\x7a\x5b\xc2\xb4\xaa\x76\xd4\xc7\x21\xe2\x99\x61\x89\xa5\xe7\xb2\x70\x32\x89\x74\xd9\xbd\xab\xd2\xc6\x8a\x97\x03\x65\x30\x5d\x25\xcd\x13\xab\xab\xee\xcc\x24\x2f\x5a\x61\x8b\x57\x7c\xcf\x62\x7b\x3e\x97\x38\x2a\x37\x75\x2e\xcb\x44\xc8\x7e\x82\xb4\x47\x38\x68\xf8\xc9\x71\x84\xb8\x68\x75\xa3\x4e\x13\xa4\x65\x71\xf5\x06\x05\xa5\x87\xab\xf4\x6d\x74\xb4\x71\x06\x38\x6b\xbc\xe7\x32\x5a\x62\xa4\x0f\xa7\xc7\xc3\xcc\x6f\xde\x53\x9c\xa2\xed\x6b\x58\x4a\xfc\x5c\xdd\x47\x5b\xf9\xf1\xb0\x2f\x1f\x5d\x52\xfc\xf2\xc5\xbe\x7d\x1e\x55\x62\xcc\x73\x19\x2d\xb2\x9f\x00\xbf\xa6\xf7\xc0\xd7\x9e\xcf\x4f\x45\x78\x08\xe3\x75\xf4\x4d\xc6\x53\x86\xf9\x8f\xd2\x36\xdc\x04\x7c\xfd\x2b\xa6\xd6\xb6\x6c\x73\xe7\x32\x5a\x31\xa4\xcb\xc6\xd4\xb1\x1d\xce\xd3\xb7\xdd\x48\x54\x94\x72\x7b\x10\xbc\x68\xde\xd8\xc3\xfa\x3e\xbd\xbb\xcd\x4b\x69\xa8\x31\x93\xb3\xde\x77\xf3\x5c\x46\x8b\xec\x27\x98\x54\x78\xea\xdb\xf6\x28\x1d\xdb\xca\x08\xe5\x7a\xef\xe9\x5a\x64\x55\xdc\x50\xa5\xb5\x23\xdd\x10\x63\x5d\xf7\xbb\x65\x02\xb3\xf3\x99\x5b\x07\xa4\xcb\x7a\x97\xb1\x60\x1f\x06\x11\x5a\xbc\x89\xc7\xc4\x2c\xc6\xcd\xe0\xc2\x45\x1d\x5f\xa0\xea\xbc\x9c\x68\x26\x51\x55\x36\xf1\xa6\x52\xed\xdc\x96\x00\x41\x77\xea\x59\x89\x7e\x5a\xe9\xaf\xde\x70\x9a\xb4\xd6\x6a\x44\xfc\xdd\x58\x94\xd1\x9a\x0d\x1c\x91\x72\xc2\xe5\xea\x62\x6e\xc5\x79\x23\x9e\x1f\xfe\x50\x1f\x52\x10\x07\x4f\xf4\x47\x52\xf7\xf5\xdf\xde\x66\xf9\x90\x33\x19\x36\xee\x47\x2c\x93\xc9\xdd\x47\xf6\xd2\xe3\xf7\x05\xf5\x37\xa4\xbf\x31\xbb\x0b\x50\xa1\x0f\x97\x20\x0e\x9e\x90\x57\x9f\xac\xbd\x17\x34\x4f\xa6\xd2\xca\x1d\x73\xe5\x89\xe6\xcc\xec\x57\xd9\xe8\x26\xca\xb1\xbd\xc8\xbf\x60\xcf\x89\x1e\xe7\x06\xad\xff\x80\x38\x78\x5c\x93\x1a\xcd\xb2\x69\x95\x4f\xb1\x2e\xb3\x2a\x5d\xc6\xeb\x29\x9f\xe4\x4c\x1a\x9c\x2e\x9a\xb7\x56\xdd\x67\xb5\xd4\xdf\x17\x52\x85\xd6\xc1\x40\x1c\x3c\xd1\xb7\xac\xcd\xe9\x6a\x3f\xa6\x57\xa3\xed\xac\x0a\xb2\xff\xfb\x3c\xc3\x51\x1e\xff\xe6\xd4\x87\x47\x16\x1f\xbf\xf4\x97\x9d\x7a\x6c\xc9\x21\x12\x3d\x88\x83\x1e\xf6\x00\x3f\x01\x28\x6d\x9e\xa5\x01\x46\x1a\x5f\x7f\xed\x4f\xd5\x9f\xfa\x4e\x0f\x05\xeb\xd9\xf8\xde\xdf\xd9\x4c\x62\x93\xb0\xa2\xab\xf9\x6d\x7f\xb2\xb9\xd7\x4b\x37\x8e\x18\x3b\x88\x83\x6b\xe0\x9d\xf5\xbe\x7a\xdf\xf3\x40\xfb\x8f\xfe\xa5\x17\x3e\xdd\x52\xe3\x5b\x78\xdc\x55\xa3\xf6\xee\xf8\xf0\x49\xa1\x63\x68\xd9\x32\x29\x74\xe8\x21\x88\x83\xcf\x55\xa9\x72\x75\x71\x5e\xfe\x48\x16\xdf\x0c\xc9\x23\xc7\xf7\x8c\xa4\xbe\x93\xe1\x5a\x7a\xad\x4f\x04\xf3\xc3\xaf\xed\x74\xc4\x28\x7a\x21\xe2\x82\x38\x24\x9f\xc2\xfe\xa6\x41\xa6\xa3\x9d\x2b\x69\x73\xd5\x0d\xc3\x1e\x21\xec\xbe\x21\x77\xe7\x6e\xd6\xea\x25\xb9\xfc\x7e\xdd\xec\x9f\xaa\x7f\x21\x9f\x02\x80\x83\x6b\xc0\xae\x30\x3e\x82\xd8\x17\xa5\x81\xe5\x6e\xa4\x62\x56\x0e\x31\x9e\xb6\xb6\xbe\xa0\xc3\x26\x96\xe9\x52\xb8\xa6\xf9\x1f\xc1\xa8\x4e\x84\x06\x40\x1c\xf4\xb0\x9f\xfc\x6f\x0d\x80\x9e\x61\x67\x69\x60\x2e\xe5\x43\x56\x43\x08\xbe\x38\xfa\x73\x2a\xd4\x4c\xbc\xf9\x07\xed\xe3\xd1\x27\x57\xb1\x8d\x83\x7d\x58\x3c\xa8\x8d\x51\xf6\xa0\x1e\xf2\x20\x0e\xae\x81\x12\x76\xd3\xe8\x3a\xa1\x2f\x39\x52\xb3\x34\x6b\x5e\x83\x17\x2f\x0d\xdd\xc5\x3b\x89\x3b\xfc\xc0\x9e\x2a\xcd\x13\x58\x10\xd6\x09\x9d\xfb\x0a\xe2\xe0\x73\x65\x50\xfb\xed\xd6\x13\x1e\x27\x29\xf4\x32\xab\x8f\xfc\x04\x4c\xe4\xbf\x2b\x44\xec\x6c\xb5\x68\x4d\xef\xa3\x66\x30\xe0\x85\x7f\x88\x87\x0c\xaf\x00\x0e\xe9\xec\x8b\x9b\x2d\x42\x89\xe2\x34\x15\x03\x16\x7f\x0f\x4c\x4a\xe8\x9e\x5d\x1a\x26\xfd\xf8\xf5\xad\xd5\x33\x85\x08\xaf\x5d\xaf\x17\x77\x1c\x11\x71\x41\x1c\x5c\x03\xac\x26\x79\x1f\x4c\x22\xcd\x71\x2d\x9b\x9b\xfe\xf4\xc5\xe7\xcd\x64\x7e\x31\xde\xe8\x54\xce\xb3\xac\x7f\x6e\x3d\x8b\x2d\x2d\x51\x8f\xd0\x00\x88\x83\xf2\x00\xc0\x4f\x00\x2a\x28\xce\xd2\xc0\x90\x3f\x11\x47\xcd\x63\xe1\x60\xd2\xbe\xd8\x3a\x5f\xb3\x7b\xb4\x03\x4b\x97\xb7\x2f\x1a\x74\x8d\xe0\xdb\x6e\x79\x52\xeb\x3f\x87\x8a\x7e\x10\x07\xd7\xc0\xce\x4a\x0e\x93\xeb\x8b\x2b\x62\xe2\x34\x85\xde\x64\x3c\xd5\x5d\x5b\xf7\x36\x7f\x0c\x5a\xb5\x67\xd2\x1a\x48\xfb\xba\x48\x16\x67\x22\xe2\x82\x38\xf8\x5c\xb5\xe2\xdb\x9b\x8c\x0e\x56\x19\x1a\xa3\xd1\x32\x62\x60\x3e\xce\x8a\x16\x4e\x0f\xc7\x36\x98\x91\x7a\x41\x5e\x5a\x89\x4a\xc2\x80\x0f\x79\xd6\x00\x1c\xd2\x5e\xf2\x0a\x61\x01\xb1\xd6\xf2\x71\xf1\x62\xcc\xaf\x61\xe2\xd9\xf4\x37\x0d\x50\x5c\x4d\x7f\x1c\xd9\xd0\x6b\x7c\xca\xbe\xc9\xe2\x71\x0b\xda\x4b\x0e\xe0\xe0\x1a\xb8\xb8\xbb\x71\x30\x62\xcd\x67\xee\x14\xe3\x4b\x87\x4f\x68\xad\xd8\xa0\x90\x54\x5a\x51\x37\xad\x7c\x44\x26\xf5\xf2\x17\xdb\x85\x6a\x84\x06\x40\x1c\x94\x07\x88\xff\x7b\x83\x14\xa8\xba\x3b\x4b\x03\x85\xeb\xcb\x79\xe3\xe6\x15\x4f\x86\x39\x7a\x86\x6f\xb8\xa0\xa3\x7c\x6f\xf5\x7f\xdc\xb7\x3a\xce\x5a\x41\x85\xae\x78\x10\x84\x7a\x05\x31\x76\x10\x07\xd7\xc0\x3a\xa9\x67\x7d\xdc\x9c\x12\xea\x9b\x8d\x1b\x94\x6f\x38\x69\x50\xcd\x4f\x45\x5f\x0b\x6b\x9d\xfa\x3c\x78\xde\x72\x1a\x28\xdf\x04\x1d\x56\x0c\xe2\xe0\x73\xc5\x52\xb6\x1a\x57\x64\x3f\xd7\x6f\xb5\xde\x68\xf8\x2e\xfc\xfb\x2d\x66\x0c\x39\x79\x91\x26\xb3\xc3\x93\xdf\x28\x46\xea\xa3\x5e\x3d\x90\x17\x0e\xc0\x21\x35\x72\x75\x42\xd5\xd6\x94\xd1\xaf\x4b\xbd\x3c\xe0\x9c\xa9\x72\xdd\x44\xf9\xf5\x4b\xa5\x4e\x5e\x79\xd7\xf8\x2d\x94\x24\x92\x8e\x69\xa8\x2e\x02\x71\x70\x0d\x14\xd7\xd7\xa7\xbe\xca\x0d\x6d\xa6\xb3\x0f\x7d\x4f\x70\x25\x6b\x6b\x21\x23\x3f\x3f\xf3\xe3\x6f\x1d\x4a\xdc\x7b\x16\xb7\xf6\xdd\x69\x10\x1a\x00\x71\x50\x1e\x00\xf8\x09\x40\xa5\xf6\x99\x0d\xa6\x8a\xa8\xe9\xae\xef\xde\xf5\x44\xad\x62\x7c\xab\x44\xd1\x8c\xfb\x64\xd6\x04\x63\xc3\x4a\x01\xc5\x91\xfd\xbe\x1f\x9f\x22\xe6\x2e\xd4\x60\x0a\xc0\xc1\x35\x50\xfe\xce\x88\x39\xa3\xa1\xca\x9b\xe4\x4f\xfb\xaf\xf8\xa6\x41\xfe\x59\xa3\xe8\xd8\x93\x06\x95\xd5\xf8\x91\x4b\xbe\xbe\x07\x6e\xcd\x88\xb8\x20\x0e\xc9\x53\x72\x6d\xdb\x91\x42\x57\x8f\x68\x79\xe0\x0b\x3d\xeb\x35\xf5\x2d\x49\xd3\x9a\x4b\x15\xee\xa6\x53\x8d\x9f\x24\x2a\x0e\xf2\xc8\xa0\x03\x2a\x41\x1c\x52\xcf\xfb\x23\x26\x74\x0a\x33\x5b\x0e\x3d\x71\x07\x2f\xe5\xae\x4b\x7b\x8e\xbf\x9a\xd9\x8d\x1c\x94\xd2\xde\xe9\x79\xa9\x85\xc9\x26\x40\x79\x0b\xc4\xc1\x35\xe0\x33\x68\xe8\xab\xb8\x64\x5b\xdb\x19\x72\xf7\xe4\xea\xa7\x3b\x66\xf7\xd5\xb3\x9b\xe9\x58\xf2\x2e\xa5\xb7\xf1\xcb\x6d\x3a\x91\x0e\x22\x34\x00\xe2\xa0\x3c\x20\xf6\xdf\x1a\x00\xbd\xf7\x9c\x59\x0f\x14\x49\x8d\x98\xdd\x8d\x37\xbd\x60\xe1\x8d\xf1\x88\x45\x9a\x1d\xcf\x30\xb9\x8f\x63\xa1\x55\xe0\x4f\xd2\x17\xac\x08\xc6\x15\x73\xa8\x1e\x00\x70\x70\x0d\xb4\x18\xa4\x2d\x53\x79\xa3\x5a\xf0\x3f\x8c\xb7\x54\xab\x69\x6f\x7c\x18\x7d\x88\x15\x3e\xb8\xa2\xfb\x90\x2d\xe2\x77\x95\x44\x1c\x74\xa8\x30\x88\x83\xcf\xd5\x57\xd2\x9d\xe9\xc9\xcf\xc6\xa6\xc7\x95\xab\x18\xbb\x47\x7a\xec\x7b\xa2\x16\x6b\x8f\x44\x55\x45\xd8\x37\x72\x08\xb1\xdb\xc7\x98\xa0\x0f\x4d\x00\x0e\xa9\x79\x19\x8a\xdc\x50\x4c\x18\xde\xc5\x49\xe1\xa2\x97\xad\x43\x9c\x78\xfa\xaf\x0c\x23\xc8\x1f\xbf\xa9\x79\x65\x95\x2a\xa4\x67\x9f\xec\x02\x35\x2f\x03\x70\x48\x0b\x40\x73\x27\x1d\x11\x4a\xa7\x83\xa7\xd7\x2a\x75\xdf\x97\x07\xa1\x36\x30\x4c\x9d\x3c\xa9\x0f\x33\xf8\x4c\x6d\xe5\x8a\xfa\xba\x03\x15\x5a\x00\x02\x70\x50\x1e\x00\xf8\x09\x40\x2f\xa1\x67\x69\xa0\x5c\xf1\x6d\x92\x71\x52\x70\xeb\xa5\x57\x29\x09\x63\x27\x3b\x35\xb4\x44\x47\x24\x82\xd4\x7b\x4f\xea\xa8\x95\xf4\x0d\x33\xe6\x38\xa0\xfb\x15\xc0\xc1\x35\x20\xf5\xec\xe1\x2f\xeb\xf5\xb2\x8e\x43\x7e\x82\x69\x01\x0a\xc2\xe4\xa1\xe2\x23\x5b\xaa\xab\x72\x5f\x2d\xb4\x67\xe4\x73\xa8\xf9\xf6\x11\x71\x41\x1c\x7c\xae\x78\x2b\xe3\xc8\x7a\x99\x4a\xa3\xc2\xb7\x16\xdf\x3c\xac\x73\xca\xf3\x4e\xdf\x64\x26\xa3\x25\x99\x22\xde\x51\x70\x92\x63\xa8\x85\xde\x0b\x40\x1c\x3c\xee\x1b\x9c\xe0\xa1\x48\x16\xc2\xae\x67\xf5\xb4\xb1\x4c\x75\x2a\x51\x19\xae\x13\x52\x95\xcf\x1f\xcd\x11\x75\x4d\xd9\xdb\x56\xb3\x42\xcd\x55\x40\x1c\x5c\x03\x0d\x96\x6f\x15\x5c\x88\x32\x30\x2a\x93\x57\xfc\x5c\x51\x3f\xbd\x6c\xc0\x3f\x58\x4b\x89\x90\x88\x23\x64\x62\x74\xb6\x1a\x54\xf5\x45\x68\x00\xc4\x41\x79\xc0\x01\xe0\x27\x00\x6d\x17\xfc\xc7\x4f\xe0\x83\xec\x27\x20\x5a\xd0\x31\xc3\xe3\xb9\x3f\xaa\x53\xaa\x43\x55\x9f\xd8\x35\xf7\x97\x89\x3e\xab\x8f\x5f\xdc\x2e\x27\x67\x4a\xd3\x43\x63\xb8\xe1\x5c\x96\x4e\x62\x91\x2e\x2b\x98\x6a\xf6\x21\xd0\x8b\x5c\xfb\x24\xd6\xfa\xd5\x1f\x52\xbe\x14\xd7\xbd\x05\xd3\x1c\x22\xf4\x8e\xec\xab\xcd\x0f\x23\xb1\xc7\xce\xa1\xe5\xad\xfe\xff\xbf\xf1\x9d\x75\x7b\xa8\x56\x8b\xbe\x69\x5b\x67\xed\xac\x69\x17\xb1\x21\xd4\x90\xfd\x70\xdf\xa9\xe1\x17\xb9\xce\x87\xef\x12\xcb\x68\x02\xe4\xa9\x5a\x89\x08\x59\x80\x38\xa4\x6f\xe6\x1f\x8a\x16\x2d\x1f\xe6\x56\xcc\xf7\x3c\x22\xcb\xfa\xee\xfe\x82\x0b\x73\xce\x4d\xf5\x39\xca\x04\x25\xe3\xae\x0f\xca\xc2\x51\x3a\x94\xca\x00\x1c\x5c\xc6\x3d\x8b\x46\x14\xfc\xfc\x87\xf8\x74\x6a\xfe\x71\x7a\x45\x78\x84\x9a\x97\xc4\x83\x4d\x69\x96\x02\xdd\x2a\xfe\x72\xf6\x47\x0d\x41\x7b\xbe\x41\x1c\x3c\xae\x5f\x53\x64\x3a\x6b\xe2\x98\x36\x71\xa3\xc0\x65\xc6\x18\x71\x12\x59\x05\xdc\xdf\xd1\x7e\xe1\xee\x1f\xc4\x78\xdb\xb9\xfa\x96\xa0\xa3\x61\x40\x1c\xfc\xf6\xe8\x79\xc8\xfa\x82\x28\xe7\x5a\x17\x45\x63\xab\x8f\xe3\xcb\x78\x9f\x86\x47\xe4\x4a\xd8\xac\xe4\x9d\xea\x31\xdf\x8a\xbb\xca\xd3\xaa\x10\xb7\x07\x88\x83\x52\x24\xc0\x4f\x00\x12\xdb\x59\x1a\x28\xed\xf7\xfd\x39\x52\x63\xfc\x97\x37\x86\xeb\x54\x21\x65\x24\xe1\x8a\x73\x31\xea\x22\xbb\xcf\x87\xc3\x2f\xcc\xb5\x47\xaf\xaa\x20\x2f\x05\x88\x83\x6b\x20\xb9\xff\xfe\x3d\xed\x81\x95\xbb\x5a\x0c\xfa\xfb\xc3\x3a\xeb\xbb\xf9\xc2\x6e\x82\x53\xd6\x9c\x69\xa6\xb7\x97\x3f\xc4\xff\xb2\x86\xca\x65\x10\x07\x9f\x2b\x9f\xef\xbf\xcc\xd2\x5f\x52\xc9\x4c\xfd\xb9\xd5\x45\x79\x97\xab\xef\x5e\xf4\xcd\x35\xd3\x32\x2a\xc9\x91\xd8\x52\xca\x0f\x43\xdf\xb8\x10\x71\x41\x1c\x3c\xae\x93\xcd\xdd\xee\x8a\x4e\xbd\x35\x01\x5f\xfc\xd8\x37\x98\x2a\x72\xdc\x9f\xcd\x7f\x3f\xbc\x3c\xcc\x1c\x9d\xb9\x5d\x96\x45\x61\x03\x7d\x37\x06\x71\x70\x0d\x9c\x0a\x0f\xf3\xbb\x7a\x59\xa1\xeb\x2c\x27\xf6\x6a\x86\xbc\x77\x45\x4d\x69\x6e\x76\x5b\x2b\xff\x9a\x6e\xad\xe4\xfd\x9b\xd3\xa6\x01\xa1\x01\x10\x07\xa5\xc8\xd8\xff\xf6\x13\x80\xf6\xa2\x9f\xed\x27\x18\x14\x7b\xe1\x6b\xac\x1b\x4f\x63\xb6\xbb\x8c\xf1\x3b\x2f\x6b\xd8\x94\x66\x59\xc7\x67\x21\x9d\xb4\x92\xa9\x83\x41\xac\x24\x42\x09\xb1\x37\x1f\xc4\x21\xfb\x09\x86\xc6\xca\x26\x8a\x95\x34\x75\x44\x8b\x04\x49\xb1\xc6\x2f\xfc\x76\xe3\xa2\xe3\xf1\xaa\x88\xbb\xaf\xec\x43\xe1\x2e\x46\x39\x91\x80\x88\x0c\xe2\x90\xfd\x04\x7e\x9c\xe9\x77\xff\xf4\xbe\xf1\x26\x6d\x62\xd2\xe5\x11\x39\x56\xd5\x88\xd7\xd6\x1b\x0e\xbc\xae\xb1\x69\xfa\xba\x70\xcd\xda\x2f\x0a\x11\x19\xc4\xf9\xc9\xa2\xa0\x10\xfd\x5f\x91\x0d\xed\xaf\x06\x3d\xf0\x0d\x9b\x62\xe6\xfd\xec\x68\x21\xeb\x18\xd4\x2e\xc0\x9f\x3e\x5d\xe6\xf0\xcd\x6b\x97\x21\x6c\xe0\x87\x40\x11\xe4\x27\x48\xc2\xb1\x89\x1d\xd4\x40\x2d\x18\x28\x69\xe6\xbf\x1a\x57\x87\x5a\x9e\xab\x63\x7a\x72\x6b\x08\xc7\x72\x96\xb2\x31\xd9\x3d\xfb\xcd\xbf\xfd\x04\xb5\xa6\x76\xc7\x05\xba\x0a\xa8\x1a\xd7\x04\xc2\x3a\x49\x17\x9f\x14\x29\xdf\x0d\x40\x63\x74\x28\x76\x97\xa4\x8f\x9c\xe6\xcd\xe6\xfa\x17\x7a\xb3\x65\x87\xef\xe4\x01\xb9\x84\xe4\xe5\x1f\xf1\xe8\xf1\xe4\x8f\x7a\x6e\xc4\x67\x94\x54\xd0\x49\x0a\x75\xc7\xf6\x4c\x6a\x94\x7a\xfd\xbf\xe7\x27\x00\x0d\xee\x0c\x3f\x41\x1c\xcd\xdd\x5f\xaa\x03\xd7\xc3\x09\xe4\x84\xab\x07\x96\x02\x02\xf1\xfc\xef\xdb\x4e\x30\x4f\x10\xb6\xce\x8d\x4d\x4d\x46\xa3\xb8\xfd\x0b\x7d\xd9\xf3\xf2\xea\xd4\x8a\x1b\x86\xab\x7d\x6a\xd3\x25\xf7\x0e\x74\x5f\xf3\x89\x0b\x5c\x91\xb3\xb1\xbb\x1a\x79\x47\x6e\x0d\x83\xff\x3e\x1f\xd9\xb7\xb2\x5b\xea\xd3\x89\x74\x48\x47\x16\x8f\x42\x5a\xcf\x63\x5b\x42\x1b\x17\x7d\x8f\xa9\x85\x1d\xcb\xe1\xce\xa0\x97\x5a\x16\x93\x90\x9f\x00\x74\xf9\x7f\xfc\x04\x8d\x48\x7e\x02\xfe\x89\xb5\xef\x4e\x9c\x8f\xf0\xf5\xb9\xf6\x3c\x0a\x99\xe9\x8c\x23\x58\x3a\xaa\xa3\xc8\x54\xcc\xa6\x1f\x60\xe3\x6a\x44\x28\xdb\x9d\x43\x21\x21\x23\x89\xe4\x27\x40\xc5\x12\x72\xf3\x57\x17\x7b\x64\xc5\x45\xd4\x9e\x54\x41\xc4\xdb\x99\x2b\x5b\x17\x9f\xec\x2e\x20\xd9\xcc\xe3\x7d\xf9\xa3\xa1\xff\x79\x94\x2f\x8d\xc8\x7e\x82\x1b\x75\x28\x8f\xc9\x2f\xe4\xf4\x5f\x76\x1c\xee\x2b\xb4\x7d\x7b\x7b\xef\x25\xba\x0a\xd5\x7e\x54\x97\x2b\x89\x08\xab\xb0\x11\xfa\xa7\xf3\xb8\xac\x24\xb2\x9f\xa0\xe8\x98\xf3\xb8\x7f\xe9\x57\x84\xb8\x3e\x13\xda\x4e\xec\x4d\xd6\xcd\x3b\xb1\x17\xc8\x9b\x94\xfe\x90\xfb\x2c\xf9\x37\x7f\x98\x7d\x73\x2e\xa3\x45\xf6\x13\x4c\x5f\x9b\xcc\x63\xdc\xba\xbf\xe5\x28\xa9\xb6\xc6\xbf\xe7\xc1\x50\xd4\xed\xac\x6d\x44\xe4\xd2\x2e\x7d\xfa\xb5\xc6\xdb\xee\xc2\xb9\x1c\xff\x2d\x89\xec\x27\x18\x8e\x38\xd4\x6a\x7c\x71\x81\x70\xfa\xf6\x54\xcf\xfc\x15\xde\x29\xf2\xef\x14\x94\x47\x7e\x37\x17\xe3\x95\x73\x53\xdd\x29\x75\xa9\xce\x65\xb4\xc8\x7e\x82\x29\x5a\xe5\x7b\x59\x18\x2f\xc3\xb2\xf3\x2d\x4d\x97\x49\x7a\xef\xe0\x3d\xeb\xc3\x88\xf0\x7e\xc3\xe0\x3a\x97\x8a\x77\x31\x2e\xe8\xe5\xb9\x8c\x16\xd9\x4f\xe0\x53\xfe\x4d\xec\x51\x84\x85\x0c\xe1\x3d\x7e\xb3\x0f\x0d\x25\x47\x3f\xd8\x3e\x88\xc4\xff\x9a\xd8\x16\xc4\x22\x3a\xd4\xb6\x8d\x0c\x3f\xb7\x8a\x18\x74\xa3\x9e\x55\x0d\xa1\xee\xa0\x7a\xfd\x3e\xc1\x10\x77\xf7\x32\xd8\x28\xbb\x71\xab\x3f\xed\x05\x8e\x1a\xc5\xbc\xc7\x74\x4d\x47\xa4\xec\xad\x11\x36\x68\xe1\x08\xc4\xc1\xab\x21\x2d\xab\xf0\xf7\x92\xf8\x9f\x59\x7a\x1f\x51\xe5\x66\x89\x9f\x3e\xfe\x18\x4f\xe6\x98\xe5\xef\x46\xa8\xa5\xd8\x85\x2a\xcb\x29\x0a\x35\x21\x00\x71\x48\x2f\x8c\xa5\xe8\xe1\xfb\xed\x62\x39\xd9\x45\x7f\x5c\xe7\x13\xb6\x74\x6c\xe5\x45\x6d\x47\x9e\x3a\x7f\x60\x5c\x9c\x4e\x8a\x5c\xfd\x06\x35\xd3\x07\x71\xf0\xb8\xe8\x42\xcd\xb5\xa3\x3d\x13\x2e\xe8\x26\x38\x72\x38\xb8\x3b\x74\xbc\x21\x9e\xfa\x8b\x47\x7c\x44\x6c\xa4\x84\x35\x7e\xd7\x2e\x41\x8b\x27\x20\xce\x4f\x1a\x85\xfe\xdf\x71\x69\xf8\x7b\x98\x7b\x3d\xde\x8b\xc6\xc7\x79\x8a\xa6\x32\xf2\xdd\xd6\xa9\x2e\x35\x52\x6e\x48\x77\x55\xfd\x30\x8f\xfd\xad\x5a\xaa\x1b\xb1\x99\x1c\xc4\xfd\xaf\x79\xfb\x9f\xe6\xf4\xff\xed\x27\x00\x65\xcd\xb3\x24\x10\xe6\xfc\x98\x73\xa9\xe6\x2a\x4d\xb7\x63\xd7\x3d\x5c\xd3\x03\x05\x9e\x85\xdb\xb5\x0b\x97\xcc\x12\xdb\x14\xae\x62\x88\x94\xbd\x81\xfe\x52\x10\x07\x97\x80\xa3\x56\xf6\xef\x67\x69\x84\x27\x34\xb7\x1f\x49\xfc\x4e\x23\xeb\x6d\xee\x8a\x9e\xc9\xfb\xbb\x32\x1e\x78\x4b\x6c\xa7\x7e\xb6\x0b\xda\x9c\x0d\xe2\xe0\x53\xb5\x61\xbe\x1d\x76\xbb\xb8\x96\x9b\x3c\x77\x7c\x97\xa2\x90\xfd\x1a\x4e\xf8\x4d\x9e\x95\x4e\x16\xd3\x8b\xb7\x63\xb4\xbd\x0a\xdd\xa1\x33\xc9\x41\x1c\x3c\x6e\x3a\xeb\xce\x24\x19\x7b\x14\x1d\xe3\x83\x2a\xbe\xd5\x1b\xb2\x2d\x65\x47\x05\x0b\x3b\xac\x18\x5e\x52\x27\x55\x2f\x5a\x53\x51\xa0\x82\x18\xc4\xc1\x25\xe0\x77\x71\xfc\xe3\x46\xec\xe4\x38\x29\xb1\x88\x2e\x7b\x39\x43\xa1\xb0\x52\xc0\xce\x97\x93\x2d\xf6\x65\x37\x83\xb2\x9b\x4a\x28\x2a\x08\x09\x80\x38\x84\x04\x24\xff\xdb\x4f\x00\x7a\x82\x9d\x25\x81\x6c\xd2\xeb\xea\x3c\xa2\x7c\x09\xa1\x6d\xc9\x69\x62\x9e\xdf\x7f\x75\x36\x0e\x3b\x94\x61\x50\x36\x6b\x5c\x0c\x32\x32\x67\xb2\x83\xf6\xcf\x82\x38\xb8\x04\xee\x60\x4b\x56\xfe\xaa\x33\xb0\xf8\xb2\x43\x62\x6e\xba\xd5\x23\x7a\x57\xd3\xac\x7d\x23\x5e\xb1\xf9\x96\x04\x36\xc9\x48\x45\x46\x0e\x22\x2e\x88\x83\x4f\x95\xfb\x38\x03\xca\x91\xab\xfe\xc0\x58\x21\x9b\xe5\x45\xfc\x4b\x55\x91\xb7\x96\x8f\xb9\xd8\xc5\x27\x6f\xac\x47\x89\x37\x38\x68\x42\xcb\xc7\x20\x0e\x1e\xf7\x15\x23\x65\x29\x65\xca\x0b\xef\x7d\x9e\x29\xcf\x35\x4e\x4e\x3d\x5d\xe6\xb0\x2e\x7b\x8f\xba\xe0\x7b\x5b\xd1\x81\x89\x3f\x14\x23\x10\x71\x41\x1c\x5c\x02\xdd\x45\x1c\xe3\xcc\x57\xd4\xbe\x6e\xf6\xdf\x25\x9c\x93\x6d\xc6\xcb\x9e\x1c\xb9\x52\x8f\x66\x31\xb8\x3a\x73\x74\xf9\x9a\xf3\x37\x05\x68\x1f\x31\x80\xfb\x47\x02\xff\xbb\x70\xf9\x0f\x0d\x80\xca\x89\x33\x7b\x52\x8f\x3f\x7b\xfe\xb4\x5b\x7b\x75\x93\x86\xd7\x4c\xa0\xef\xce\xa9\x6a\xb6\x53\xcb\x1a\xae\xdc\xe5\xab\x76\xa4\xac\xdf\x7f\x8a\x42\xfb\xe8\x41\x1c\x5c\x03\x21\x0b\x18\x9c\x9f\x55\xc4\x93\x6e\x68\xd7\x64\xa7\x7e\x52\xb9\xa9\x43\x2e\xf2\x99\xf4\x62\xa6\x7d\x21\xb6\xf4\xba\x70\x87\x87\x05\xb4\xcf\x0f\xc0\xc1\xe7\x8a\x4e\xff\xc3\x8b\xd8\xcc\xf2\xa9\x47\x84\x9c\xbd\x1e\x72\x41\xf6\x86\x6a\x5f\xb9\x59\x39\xa2\x07\x02\x69\x56\xfe\x4a\xd7\xa0\x40\xe7\x1e\x80\x38\x78\x5c\xeb\xdb\xf8\x35\x5d\x2e\xb5\x2d\x37\xca\x79\x67\xb4\xef\x3c\xcb\xbf\x87\xbf\x78\x27\xa6\xca\x72\xc8\xe0\x35\x47\x2b\xb1\x92\x6a\x34\x22\x2e\x88\x83\x6b\x00\xb5\xb1\xb6\x8b\xe8\x6b\x35\xb5\xa0\x62\xf8\x51\x88\x40\xfc\x21\xfa\x55\xb5\x92\x39\xd9\xa6\xbb\x65\xca\x35\x91\xb3\x95\x18\x3b\x08\x0d\x80\x38\x84\x06\x24\x01\x7e\x02\x50\x6d\x77\x96\x06\xa8\xef\x7e\xff\xae\x8a\xc9\xa5\xf4\xd7\x14\x1f\xbf\xc5\x73\x46\x41\xbc\xc8\x5b\x45\xb3\xc1\x0c\x63\x47\xc6\xe5\x82\x4a\x73\x20\xd4\xef\x1f\xc4\xc1\x35\x70\xab\xb2\x55\x2d\xaf\x87\xe0\x5d\xbe\x6a\xa9\x6d\x65\xa2\x9d\x44\x73\x69\x14\xb1\xe0\xa1\xe2\x52\xb1\xfa\xbc\x02\xca\xaf\xfc\x7c\x44\x5c\x10\x07\x9f\x2b\x32\x3b\x33\xd1\x63\x0f\x49\x45\x7d\xcd\xd6\xbb\x3b\xc3\xd8\x1e\x61\x09\xf4\xaf\x59\x50\x92\x37\x17\x70\x38\x1c\x71\x65\x1d\xa0\x7e\xe7\x20\x0e\x1e\x17\x5f\xf7\x06\xf7\x2d\x3f\xfa\xa6\x4e\xb3\xba\xa8\x87\xd1\x1c\x94\xef\x64\xdd\xc6\x2b\xf5\xdf\xdd\xe7\xac\x9f\xdd\xe0\xd8\x08\xf5\x85\xfc\x0f\x00\x0e\xae\x01\x17\x53\xbf\x51\xfd\xdc\x24\x99\x04\x9f\x1b\x83\xa7\x7f\xfd\x06\xaf\x2d\x78\xb1\x61\xf5\xab\xe2\xf5\xff\x90\x75\x0e\x51\xfb\x08\xe5\x01\x10\x07\xe5\x01\x80\x9f\x00\x54\x68\x9f\xa5\x81\x9d\xaf\xdd\xa9\xa1\xfe\xc6\x91\xf9\x7b\x51\x4e\xf1\xd8\x95\xdc\x7e\xba\x72\xd5\x6d\x0f\x9f\x36\x6b\x2c\x96\xdb\x2d\x61\x13\x8b\x40\x9f\xfe\x01\x1c\x5c\x03\x06\x52\x78\xcd\x41\xb3\xa1\x1f\x43\x9f\x58\x31\x92\xcf\x3d\x73\xea\x51\x9a\x69\xd7\x50\xbe\x22\xfc\xad\x9b\x5f\x22\xe2\x99\xbf\x2c\xb4\xfd\x03\xc0\xc1\xe7\x4a\x29\xca\xf2\xb6\x84\xa5\x47\x46\x9f\x49\xd9\xbe\xbb\x1d\xc1\xee\x95\xe3\xa3\x48\x75\x07\x5b\xeb\x97\x28\x09\x94\x4d\x52\xf1\xff\xc7\x0b\x07\xe0\xe0\x71\x77\x54\xe9\x51\xb1\xcd\x48\x75\x35\xb8\xe4\x3f\xf5\x85\x9e\xfe\xf1\x51\xa4\x1c\x72\xd6\xec\x97\x7a\xf8\x30\xc8\x60\xfd\xc6\x68\x3f\xf4\x3f\x00\x38\xb8\x06\x88\x7b\x33\x5d\xab\x8f\xd5\x73\x28\xb3\x67\xf0\xcd\xac\x08\x19\x9d\x7f\x6c\x90\x30\x84\xf0\xcf\x3c\xd6\xbc\x2d\x82\x97\xf4\x53\x08\x6a\x51\x08\xe0\xa0\x3c\x00\xf0\x13\x80\xde\x7a\xce\xd2\x80\x94\xed\x83\x94\xb4\xc6\x72\x33\xfd\xce\x56\x91\xf9\x43\x6d\xb4\xda\x84\x77\xaa\xc4\x5d\xe3\x28\xc3\x21\x1e\x99\xdf\xa3\x79\x4c\xa1\xcf\x3d\x00\x0e\xae\x81\xb5\x89\xca\xf2\x22\x45\x3c\xc7\x65\x0a\x39\x53\x3a\x6a\x3a\x9a\x61\xbe\xc7\x6f\x95\xfb\x0e\xcb\x0f\xec\xee\x6d\x70\xe2\x0f\x43\x5b\x8b\x40\x1c\x92\xbf\x90\x29\x9a\x4d\xdf\x77\x92\x58\x33\x3e\xef\xe7\x95\xe4\xeb\x68\xa6\xdf\xba\x4f\x34\x09\xf9\xc3\x6b\xbd\x95\x58\xe4\xca\xb6\xa1\xb8\x20\x0e\xa9\xce\x30\xc7\x7c\xd6\xd6\x51\x39\x95\x74\xbd\x58\x95\x7d\xc2\xae\x28\x21\x9f\x42\x3c\x69\x14\x53\x6d\x38\xa4\xdd\xc4\x65\x70\x8d\x18\xaa\x33\x00\x1c\x5c\x03\x53\xef\xc3\xb4\xd5\x52\x9c\x72\xbc\x1e\x93\x3b\x78\x57\x5e\xe6\x8e\x5a\x95\x17\x31\x92\x36\xe1\xd8\x13\xef\xcc\x4b\x5f\xb8\xcb\x8e\xd0\x00\x88\x83\xf2\x00\xc0\x4f\x00\x7a\x05\x3d\x4b\x03\xfa\x97\xbd\x9d\xc4\xa6\x9d\x86\x85\x1b\xba\xa3\x4f\xb6\xde\xd3\x9a\x88\xf0\xbd\xe6\xf3\x3a\x1c\x28\x39\xd6\x49\x4d\xeb\x42\x7b\x0c\x7d\x4a\x07\x70\x70\x0d\x0c\xe3\x63\x09\x6e\x1d\x19\x3f\x4f\x1a\x39\x1a\xf3\x26\xed\xb2\x9a\x23\x7f\xbc\xb4\x67\xd8\xad\x29\x98\x8e\xc6\xfe\x83\x66\xaf\x0a\x11\x17\xc4\x21\x6d\x2b\x71\x71\xff\x60\xb7\x78\x55\xf8\x5d\x4e\xef\x42\xeb\xd5\xe4\xe7\x5c\x9e\xe5\x4a\x7b\x92\xfa\x18\xa9\x9e\x5f\x4f\x87\x3b\x56\x67\xa1\x6d\x25\x00\x0e\x1e\x57\xe1\x54\xbe\x56\x72\x95\x28\x92\x9e\xc8\xa2\xe1\xf1\xbc\xa2\x7c\x27\x0d\x7a\x8a\xf0\x23\xa7\x09\x32\xa2\xfc\xa5\xfb\xb2\xdb\xd0\x96\x25\x10\x07\xd7\x40\xc8\xb1\x7b\xf0\x49\xd3\x14\xdb\x9b\xd6\xc3\x94\x46\xca\x1a\x0f\x4d\x42\x21\xb2\x77\x0e\x02\x69\x44\x05\x2d\x9a\x63\xda\x7b\x7e\x08\x0d\x80\x38\x28\x0f\x80\xfc\x04\xa0\x45\xc5\x7f\xfc\x04\x8d\xc8\x7e\x02\x85\xfa\x61\xbd\x45\x3a\x99\xa0\x82\xa4\xbf\xb7\x8a\x4e\x3e\x70\x74\x09\x63\xa2\x54\xd6\xf7\xb3\xef\x7b\xa2\x7d\x96\x7d\xf7\xcc\xf4\x5c\x16\x4e\x90\xfd\x04\xb6\x61\x7f\xc3\x25\x1d\x13\x2f\x1e\x79\x90\x16\xab\x5c\xd2\xe5\xf2\x17\x73\xf3\xa9\x68\x6b\x79\x6d\xfb\x27\xbf\x89\x57\xed\xe3\xf9\x2c\x13\x21\xfb\x09\xea\x82\x4f\x45\xe6\x5d\x03\xe2\x2f\x3f\xe7\xd1\xd5\x0d\x21\x8d\x9f\xc1\xe4\x93\x56\xc8\xf0\x18\x63\xc6\x0b\x67\xfb\x36\x6a\xd0\x7a\x2e\xa3\x45\xf6\x13\xb4\x55\x84\x6d\xfb\x48\xf1\x15\x3c\xd6\x9c\xa3\xc9\x79\x91\xf4\xf5\x86\xd2\x38\x57\xa6\x3c\x06\x93\x94\xf6\x0d\x23\x51\xee\x26\xd7\x73\x19\x2d\xb2\x9f\xe0\x60\xcd\x44\xd5\xac\x72\xc2\x28\xc0\x90\x55\xbc\x16\x47\xcf\x84\xbe\x2e\x72\x94\x81\x0f\x8b\x3b\xe1\x4a\xee\xd6\xef\xc7\x6f\x33\xce\x65\xb4\xc8\x7e\x82\x95\xd4\x87\xf3\x82\x71\x82\x44\x82\x65\xaf\xa6\x1e\xba\xfc\xf2\x8f\x77\x5a\x6f\x8b\xd7\x8a\x31\xf8\x61\x62\x48\xe5\xac\xa9\x73\xe9\x5c\x46\x8b\xec\x27\xb8\xbe\xcb\x40\x30\xcd\x49\x3c\xb8\x87\xc5\xe6\x8e\xaf\xe6\xf5\x85\x8d\x97\xf7\x3a\xef\xcd\x88\x02\x89\x5b\x61\x21\x0f\xed\xe2\xce\xe1\xa0\x80\x60\x59\x49\x64\x3f\xc1\x36\xbf\xf2\x4a\x01\xfd\x27\xad\x56\x77\x87\x57\x83\xb7\xb5\xa4\x68\x0b\xd8\xbe\xef\x5d\xd5\xbc\xd8\x5a\xb0\x93\x28\x5e\xf8\x1e\xff\xdc\x96\x00\x41\x77\xea\x59\x89\xde\x4e\xf4\xa7\x28\xad\x0b\x5d\x05\x13\xb1\xe2\x2d\x86\xa0\x80\xfb\x94\x6d\xdd\xa6\xe6\x0f\x42\x84\xbc\x64\x4d\xe3\x31\x9a\xba\x2f\x22\x12\x1c\x88\x83\x27\xfa\x45\xa2\xbd\xb9\x35\xd9\x90\x20\x9e\xcb\x92\xa2\x8f\x54\x66\x1f\x2c\x35\xa4\x25\xc4\xb2\x0f\xef\xe9\xe3\x44\xa9\xbb\xb3\xa9\x41\x1f\x99\x41\x1c\xd2\x1e\xaf\xb0\x2b\x18\xed\xf7\x8d\xf5\xef\x16\x32\xe7\x3d\xc5\x8e\x5f\xc6\x53\xb2\x8e\xe4\xe8\x34\x1f\x22\x26\x20\x89\x49\xde\xad\x87\xf6\x0d\x81\x38\xa4\x17\xbf\xfd\x9e\xf8\xaf\x3f\xc8\x84\x1c\x22\x4d\xc3\x3a\xac\x6d\x2b\xb2\x2a\x84\x04\x19\xe6\x96\xf4\xfc\xc9\xd1\x4a\x71\xe5\x89\xd6\xa1\x17\x3f\x00\x07\x4f\xf4\xb8\xa1\xa1\x78\xd7\xd4\x46\x82\x89\x0b\xe5\xc6\xd1\x9a\x66\xba\xc5\xad\x6b\x3a\xf9\xe3\x6f\x7e\xed\xd7\x2e\x7b\x6a\xe0\xce\xea\x8d\x48\xf4\x20\x0e\x7a\xd8\x03\xfc\x04\xa0\xb4\x79\x96\x06\x3a\xbd\x92\xdf\x25\xa1\x3f\x96\x66\x34\x4d\xb5\xb1\x5b\x3a\x96\x62\xc0\x7a\x25\x28\xf6\xd3\x4a\x8e\x50\x9f\x5a\xcb\xf8\x41\x11\x2d\x62\xec\x20\x0e\xae\x81\xf1\x5b\x6a\x3a\x89\x64\xb5\x49\xe1\xdc\x65\x85\xcb\x6d\xaf\x30\xec\xfb\xb6\x64\xbc\xab\xfb\x4f\xa3\xc5\xb8\xf9\xf0\x5b\x8e\xed\x10\x71\x41\x1c\x7c\xae\x78\xb6\x9c\x48\x5d\xe3\xcd\xbf\x3d\x58\xb0\x17\x2a\x7a\x13\x3e\x5d\x8c\x11\x68\x49\x30\x95\xf6\x9b\x37\xfa\x5a\xdf\x3a\xa1\x2c\xb4\x00\x04\xe2\xe0\x71\x07\x0c\x66\x99\x3f\xa1\x48\xf3\x2e\xde\xce\xc3\x42\xdd\xe9\xf1\xc6\x32\xcd\x8c\xa7\xe5\x50\xd7\x7a\x2b\xfc\xd1\x7f\x86\xab\xa1\x1e\x11\x17\xc4\xc1\x35\xe0\xa4\x76\x21\xea\xa5\xd5\x45\xa9\x07\x6c\x99\x26\x7f\xf2\xda\x71\xb0\xd7\xa4\x66\xdd\x75\xe6\x68\xda\x5a\xdf\x2e\x06\xe8\x34\x41\xfb\x88\x41\x1c\xf4\xb0\x07\xf8\x09\x40\xcf\xb0\xb3\x34\xf0\x32\x97\x59\x8d\x9c\x6a\xf8\x65\x8b\xa7\xac\x8d\xe6\xda\xc3\xd7\xbb\x05\x22\xb4\x9f\xb2\xbd\x2e\xbd\x4c\xfb\x83\x56\x4b\xda\x02\x99\xfe\x41\x1c\x5c\x03\x2f\x29\x79\xda\xb3\xa2\x07\xa7\x38\x7f\xb7\x04\x10\xf3\x90\xd0\xd7\x05\xd0\x0d\x6c\xb6\xbc\xfa\xf2\xba\x38\x20\xa5\xcb\x9d\x14\xda\xa3\x0e\xe2\xe0\x73\x35\x34\x81\x49\xb0\xce\xac\xf8\x92\x8b\xda\x99\xc2\x9e\xf7\x72\x53\x57\x11\xf5\xf4\x74\xf1\x43\x5f\x1d\xc5\x3a\x66\x54\x71\x51\xa8\xb5\x10\x88\x83\xc7\x25\x65\x35\x12\x09\xf8\xa1\x16\xf8\x48\xea\x3e\x89\x2c\xce\xcc\x87\x31\xae\xb6\xad\xc1\xe8\x7a\xa1\xc0\xc5\x47\xf6\x52\x75\x83\x50\x8f\x5b\x10\x07\xd7\x40\x51\x39\x89\x20\xb5\x0b\x7a\x4c\x5e\x13\xf9\xd7\xd1\x9b\x17\xe9\xb6\xc8\x19\x2d\x39\x4e\x03\xbf\xee\x9a\xb8\x7c\xfc\x56\x2b\x03\xf5\xa4\x06\x71\x50\x1e\x00\xf8\x09\x40\x05\xc5\x59\x1a\xa0\x31\x53\x6a\x8b\x23\xad\xb8\x34\xed\xa6\xd8\xff\x36\x64\xfa\x52\xaa\xf9\x62\x91\x1f\xc3\xb1\x5d\xaa\xfd\x84\x40\xa2\x57\x64\x32\x62\xec\x20\x0e\xae\x81\x4d\xae\x96\x4f\x68\xfd\xaa\x78\x64\x8b\xe2\xc1\x12\x98\x7c\x35\xb2\x56\xad\xdb\xbe\x73\x4f\x09\x34\x9f\x69\xa4\x09\x6b\xa4\x41\xda\x02\x71\x48\x6d\xa0\x58\x06\x2a\x71\xaa\x1e\xae\x14\x32\xc6\x56\x31\xff\x6e\xe3\xcd\x35\x65\x30\xda\x20\xc3\x25\x13\x75\x2a\xdc\x98\x51\x65\x0c\x81\xda\x40\x01\x38\x78\x5c\x79\x7a\x95\xd7\xb8\x43\x25\xd4\x6a\x18\x02\x81\x18\x2d\x6a\x05\xcf\xac\xec\x2a\x96\xde\x2b\xe8\x6b\x6c\x51\x79\x28\xf3\x70\x2b\x21\xe2\x82\x38\xb8\x06\x26\xcb\xa7\xd2\x9e\xf4\x31\xfb\x2d\x5f\x5f\xe3\x67\x63\x29\xec\xdf\x5c\xa7\xff\xfe\x0c\xf7\xcd\xdd\x7b\x81\xc1\x68\x3f\x94\x56\xaf\x22\x34\x00\xe2\xa0\x3c\x00\xf0\x13\x80\xaa\xbb\xb3\x34\xc0\x4a\x6e\xf3\x7c\xed\x9e\xcb\x07\x09\x95\x95\xe3\x1a\x7a\xee\x5b\x29\x92\x81\xca\xa3\xe6\x22\x39\x98\x4f\x7f\xb3\x50\x5d\xe9\x82\x5e\xd0\x40\x1c\x5c\x03\xf6\x0f\xe9\xa7\x0c\xe4\xfb\x1e\x30\x87\xbe\xfe\xdd\x53\x90\xdb\x9b\xc1\xea\xdb\x7f\xc8\x7e\x87\xf3\xb3\xfa\xc8\xd7\xca\xb0\x0d\xe8\x7e\x05\x71\x48\x87\x13\xfa\x1a\x2e\x56\x5c\x3e\x61\xa8\xdf\x1d\xff\x22\x24\x3f\x90\x39\xa3\x78\xf0\x23\x34\xce\x71\x53\x72\x27\x40\xd7\xa5\xb6\x7e\x01\xf2\x2d\x02\x38\x78\xdc\x9f\x2c\x22\x2e\x5b\x43\x38\x44\x6c\xdc\xce\x6b\x59\x15\xa2\xa5\xbd\x2d\x78\x5b\x73\x3f\x15\xb6\x96\x76\x1d\x4d\x48\x3e\xd2\xf3\x23\xe2\x82\x38\xb8\x06\xfe\xc6\x3a\xae\x27\x54\x7f\x69\xcd\x6e\x8f\x44\x49\xb9\xa9\xf3\x2b\x64\x3c\xef\xe0\x78\x96\xa1\x51\xc1\x29\x99\xd8\x3c\x77\xac\x06\xa1\x01\x10\x07\xe5\x01\x80\x9f\x00\x54\x6a\x9f\xa5\x81\x0b\xd5\xa7\x97\xd6\x79\x89\xc4\x9b\xde\xe4\x48\xea\x5e\x12\x4f\x5d\x22\xec\x25\x78\xab\x63\x78\x5b\x5b\x7d\x88\xaa\x2f\x6c\x87\x14\x31\x76\x10\x87\xb4\x51\x92\xb3\x59\x55\xf8\xca\xd3\xd7\x81\xff\x1f\x73\x6f\x19\x96\x45\xd7\xf6\x7d\xd3\xdd\x8d\x48\x87\x34\xd2\xa9\xd2\xdd\x25\x28\x20\x20\x08\x08\x28\x1d\x12\x12\x82\x84\x28\xa1\x22\x1d\x12\x82\x48\x88\xa4\x4a\xb7\x94\x20\x20\xa9\xb4\x48\x28\x2d\xfd\x6e\xef\x75\x9f\xc7\x3c\xe7\x35\x07\x8f\xeb\xf9\xc0\x87\xfb\xfb\x6f\x5b\xc7\xb6\xe0\x37\xfb\xac\x59\xb3\xff\xd7\x5c\xab\x77\xbe\xb1\xe3\x4e\xa1\x84\x23\xaf\xde\xd6\x77\x61\xf1\xb5\x2c\xfb\x4e\xb6\x78\x06\x74\x98\x00\x88\x43\x3a\x3f\x9c\x9c\x8e\x64\xaf\xa9\x07\x3f\x45\xe5\xaa\xaa\xc7\xec\xf1\x1b\x43\xa5\x08\x13\xf4\xef\xd7\x65\xbb\xa3\x7b\x99\x1a\xab\x6e\xa1\x20\xc6\x05\x71\xf0\x71\x85\xb7\x3a\xdf\x85\x50\xba\x7f\xc8\xbe\xb2\xbd\xbf\x3b\xeb\xfb\xcc\xef\x32\x3e\x39\x7e\x01\x4e\xcd\x93\xe7\x8f\xf1\xeb\x3c\xf9\xff\xcf\xa1\x0a\x00\x0e\xee\x80\x49\x74\x99\x08\x9e\xd3\xc2\xfd\x85\xed\xa0\x46\x74\x5c\xeb\xcb\xaa\x06\x64\x5f\x74\x6d\x1a\x8f\x8b\x5f\xcf\x9a\xe8\x5c\xbd\x31\x80\x70\x00\xc4\x41\x75\x00\x90\x27\x00\x3d\xf7\x9c\xda\x2c\x1b\x39\x95\x84\xb3\x3c\xf8\x3e\x9e\x42\x98\x01\x4d\x79\x27\xee\xd5\xb3\x37\xf8\x6c\xcf\x51\x9b\xe6\x03\x1d\x32\x1c\xcc\x66\xa0\xef\x8b\x81\x38\xb8\x03\x55\x9f\xbf\xd5\x12\x60\xa9\x13\x58\x7f\xac\x93\xd5\x7e\xb8\xdb\x1d\x63\x59\x48\x13\xf3\x39\xfe\xe4\xde\x25\x4d\x39\xf3\x07\x58\xe7\x10\xe3\x82\x38\xa4\x6f\x4b\x9d\xdf\xcb\xd6\xed\xfb\x11\xdb\x8b\xfe\xe1\x83\xfa\xbc\x0d\x27\x77\xff\x36\xb6\x95\xe6\xde\xfb\x7b\xfb\xc6\xdb\x94\x23\xb8\xd0\x47\x55\x41\x1c\xd2\xc1\xcb\x76\xd7\x0c\xdb\x14\xfb\x76\x12\x6c\x8d\xc5\x49\xcd\xa6\x79\xf9\x4f\x92\x98\x70\xdf\xc4\xe3\x29\x93\x64\x17\x5c\xe7\xe9\x85\xf2\xcb\x20\x0e\xee\x40\x89\xcc\x80\xd7\x39\xe2\x22\x35\xf2\x66\x02\x36\xf1\xa7\x93\xa3\x93\x66\x96\x84\x2d\x9f\xdd\x8d\x87\x62\xbf\xa3\x38\x7a\x61\x7b\x40\xb9\x22\x00\x07\xd5\x01\x40\x9e\x00\xf4\x10\x7a\x9a\x03\xb3\x42\xa4\xd5\x4a\xbb\xd5\xb9\xf1\x81\x59\xd9\x25\x52\xc9\x3c\x31\xb8\xb9\x17\x73\xf3\x59\xa5\xd2\x8d\xf7\x18\x33\x18\xb9\x29\x10\x73\x07\x71\x70\x07\x78\x1f\x5c\xdb\xa4\x3c\xd7\x3a\x3b\x25\xc8\x2f\x81\x2b\x2b\x2a\xc7\x24\x15\xaf\x9d\x38\x49\x8d\x7b\x87\x45\xe5\x53\x43\x25\x0e\x2a\x62\x5c\x10\x87\xb4\x1e\xb8\xc3\xdb\x92\x9c\xaf\x8a\x17\xa7\x6f\x17\x4f\x13\x62\xfe\xf8\x32\x17\x1b\x53\x7c\xc7\xfe\x87\xc0\xca\x63\x6a\x9c\x20\x26\x68\x9d\x01\xe2\x90\x1c\xf0\x9e\xe3\x09\xf6\x34\x11\xef\xc8\x08\x5a\xa1\x29\x0f\xb2\xa1\x61\xdc\x61\xea\x2c\xa1\x7e\x51\x69\xe5\xb3\xc3\x92\x12\x00\xdd\x0b\x40\x1c\xd2\xb3\x21\xee\x14\xdf\x47\x37\x6a\xfb\xda\xa2\x48\x46\x02\x37\x51\x5f\x49\x4b\xb2\x68\x42\xfb\x95\x73\xec\x9e\x8f\xe5\x9c\x22\xc3\x1f\x42\xcf\x86\x00\x0e\xaa\x03\xa0\x3c\x01\xa8\x5d\xf0\x9f\x3c\x41\x03\x72\x9e\x80\x62\x11\xa5\xc3\x3c\x79\x3e\xc7\x55\xfe\xb5\xe8\x72\x9f\x94\x2d\x3e\x5d\x43\x14\x6e\x92\x03\xa7\xdc\xde\x8d\x9c\xee\x5d\xdf\xc1\x33\xd9\x3a\x41\xce\x13\x0c\xfc\xaa\x0d\xbd\x32\xd0\xfb\x5c\x8a\xe6\xce\x65\x86\xdf\x68\xcf\x72\x04\x3f\xa5\x7d\xbf\xfc\x92\x1d\x4b\x5f\x38\xf7\xf5\xc0\x2d\xad\x33\xdb\x3a\x01\xcd\xef\xb4\xcb\xe3\xe4\x02\x7a\xd0\x01\x31\xa9\xf5\x1e\x97\x96\x41\xc3\x1b\x55\x52\x5a\x1f\xe3\x27\x6a\x96\x78\xd3\x41\xe5\x14\x1e\x01\xb1\x77\xa0\x65\x22\x88\x83\x5f\x1e\x89\x8c\xb8\xe2\x7b\xdc\xc6\xe2\x9c\x9a\x1d\x9f\x9d\x4d\x13\x19\x2c\x2e\xd5\xc6\x3e\xf8\xca\xd6\xe3\xd9\x7f\x0e\x3d\x64\x58\xe4\x0f\x74\x8e\x11\x80\x43\x5a\xd2\x78\xf8\x34\x19\x2d\x4a\xd1\xc5\x88\x3f\x96\x47\x51\xec\x91\x69\xca\x49\x5b\x11\x4d\x95\x68\xfc\x53\x72\x51\x27\x1c\x8d\x1b\xba\xfd\x82\x38\xf8\xb8\xfc\xf7\xb0\xe8\xde\xcb\x51\xa9\x5f\x5c\x15\x7d\x62\x33\x24\x41\x26\xa4\x30\x81\x6f\xf6\x74\xdb\xa5\xca\x90\x17\xa7\x91\x6e\x67\x0e\x31\x2e\x88\x83\x5f\x1e\x8a\x66\xf4\x5a\xbf\x7a\xde\x07\x0c\x96\x30\xb8\xd8\x61\x73\xad\x3d\x09\x26\xd5\x62\x0d\xf2\x35\x88\xf0\x19\x14\xbe\xcb\xa6\x00\x6d\x9d\x80\x38\xa8\x44\x02\xf2\x04\x20\xd9\x4e\x73\x20\xb7\x8f\xc0\x98\xab\xfc\xcd\x80\xf2\x44\x0a\xae\x4c\x20\x73\x1b\x71\x97\xf8\xd2\xba\xe2\x33\x7a\x3d\x3e\xfd\xdd\x54\x13\xb2\x6b\x88\xb9\x83\x38\xb8\x03\xcb\xef\x28\xf0\x51\x7f\x73\xa1\xcd\x74\x1b\xf2\xcd\x0a\x46\x98\x16\x10\xea\x84\xb1\x10\x46\x72\x93\x74\xb2\xbb\xa2\x53\x06\x73\x41\xa5\x0c\xc0\xc1\xff\x57\xb9\xfe\x14\xb3\xe8\xd7\xfe\x58\xbc\xbe\xcf\x2b\x1c\xd1\xb2\x49\x74\xbf\x60\xe3\x8b\x48\x2f\x46\x8f\x17\x19\x2e\x7f\x85\x08\x23\xb4\x5c\x06\x71\x48\x5b\x27\x69\x56\x66\xb3\x0f\xe5\x15\x15\x67\x2b\x52\xb9\x68\x84\xeb\xc3\xb2\x76\xfa\x29\xb0\x30\x59\x2e\x52\x7e\x2e\xc4\x7e\x2e\xb8\x0a\x6d\x9d\x00\x38\xb8\x03\x06\xaf\x7d\xe2\x7b\xa7\x5e\xff\x28\x7e\xfd\xf1\x5e\xc2\x0b\x63\xb3\x6e\x01\x7c\x46\xd4\x12\xb9\x92\x1e\x83\xc4\x40\xd1\x61\x0c\xe8\x91\x09\xc4\x41\x25\x12\x90\x27\x00\xf5\xa2\x9f\x9e\x27\x18\x08\xe4\x1a\xb5\x33\x7f\x3e\x18\x8d\x46\x73\x25\x1d\xe7\xdd\x6f\xeb\x3d\x1b\x03\xc5\xb1\xeb\xb9\xc2\xb3\x5e\x31\x22\xdd\x38\xb5\x88\xde\x7c\x10\x87\x9c\x27\x50\xf4\x73\x4a\x11\x10\x98\x1e\x99\xf8\xce\xec\x24\x5a\x87\x37\x4f\x5e\xd1\xfc\xf8\xa7\x7d\x71\x6c\x3f\xb7\xcd\xc7\x5b\x47\x0c\x1b\x88\x91\x41\x1c\x72\x9e\x00\x83\x7f\x7b\x20\x5c\x0e\x5b\x93\x09\x8b\x7a\x63\xa1\x24\x31\xf9\x1a\x4f\x87\x72\xd0\x4a\xdd\xd0\x4d\xed\x5d\x01\xc1\xed\x43\x27\xc4\xc8\x20\x2e\x54\x11\x05\x45\xf6\xbf\x46\xde\xbb\xcf\xa5\xdb\x3b\xd1\xce\x9c\x71\x41\xa8\xbc\x25\x58\x05\xc3\xc4\x91\x5d\x50\x2d\xed\x7c\x83\xd8\x03\xba\xa5\x9c\x20\x37\x0c\x28\x4f\x30\x55\x46\x70\x3f\x2c\x7f\x51\xec\xaa\xe6\x48\x9b\x38\xfd\x07\xd7\xde\x09\xea\xd9\xb6\xab\xa5\xbf\xfd\x98\xd5\x3f\x27\xbe\xbc\x31\xf0\xef\x3c\x41\x51\x8e\x99\xfe\x54\xdc\x78\xc4\x7d\x4f\x9f\x1d\xd3\x29\xa2\x15\xd1\xea\x77\x61\x7e\xf1\x12\x86\xe9\x5e\xdc\xfd\x32\xdc\xe9\xff\xfe\x40\x4e\xda\x03\xb3\xda\x7b\x27\xe5\x15\x18\xb4\x77\x7f\x37\x99\xc4\x53\xe9\x5c\x11\x57\xfd\x2d\xb2\x73\x83\x20\x66\x9a\x4c\x6e\xd5\xcf\xf9\x7f\x5f\x9e\x00\x34\xb9\x53\xf2\x04\x78\xea\x43\xb1\xe4\x9a\x31\x6d\x73\x5a\xdf\x2c\xc6\xb7\x9c\xeb\x67\xd0\x36\xdc\x5c\xe3\x4b\x1e\x57\x98\x10\x7a\x8a\xcc\xa1\x1f\xfd\x0b\xa5\x56\x58\x70\xaf\xc8\x11\xeb\x41\xc7\xca\x8f\x66\x35\xce\xc7\xef\x1e\xf4\x3a\x21\xe5\xee\xb7\x95\xb1\xfb\xb8\x20\x13\x43\xa8\xf7\xef\xdb\x7c\x5b\xa3\xe2\xb8\xa3\xd4\x1f\xb4\xe7\x92\x8a\x74\x7c\x5d\xf7\xaa\xe6\x67\x86\xce\x69\x87\xbe\xca\xed\x91\x40\xb5\x28\xb7\x12\x82\xf2\x04\xa0\x9f\xff\x27\x4f\x80\xa2\x08\xbf\xa3\x4b\xcd\xcd\xef\xb3\xe7\xd2\x16\x57\xe3\x3e\x72\xe5\xd4\x3b\x78\xbd\x8e\xa9\x44\x64\xa5\x11\x7b\x30\xfb\x38\x41\xe5\x7a\x73\xbe\xc9\x19\x2c\x24\x14\x82\x90\xf2\x04\x2f\x93\x1a\x29\x6b\xaf\x54\xc6\x45\x70\x4c\x10\x2f\x71\x6d\x79\xd2\x30\xd2\x73\x24\x52\xab\x3c\xa2\xe1\xc5\x0c\xde\xbd\x34\xde\x78\x16\xcb\x17\x14\x69\xa4\x97\x89\x1a\x37\xa4\x96\x6b\x68\xab\x97\xbb\x44\xc4\xdf\x49\xd1\x4a\xe1\x53\x91\x3a\xbb\x06\x73\x90\xfd\x9c\xb6\x3e\xa4\x47\x9b\x6c\x9d\x3e\x8b\x9f\x0d\x42\xce\x13\x64\x8d\x89\xda\xeb\x27\x95\x35\x5c\x78\x42\x6b\x69\x26\xcc\x96\xa7\x48\xff\x80\x4a\x72\xb4\x40\xcc\x7a\xd7\xcc\xcc\x34\xb7\x9f\xef\x4c\x66\xeb\x86\xf4\xb3\x17\x85\x99\x5b\x2c\x2b\x14\x7f\x9e\x98\xa1\x7f\xcf\x7b\x75\x69\x95\xba\xbf\x3b\x35\x0f\xa7\xc2\x31\x8b\xea\x13\x2d\xc7\xec\xdc\x19\x1c\x9d\x1f\xad\x18\x84\x9c\x27\x88\x38\x8f\x11\xee\x22\x36\x79\x5c\x92\x9f\x8c\x99\xe9\xa3\x65\xda\xe1\xe7\x5a\xf1\x9b\x07\xdf\x53\xac\xa0\x4f\xb1\x50\x5f\x4f\xf8\x4c\x66\x9b\x84\xf4\xb3\x14\xf1\xd7\xb6\x77\xac\x05\x3b\x55\xf8\xf4\x08\x7e\xf0\x7d\xb8\xdf\x36\x3b\xff\xee\xa7\x6d\x51\x53\xf4\x9e\x50\xba\xc2\xb9\x1f\xe8\x67\x32\x5b\xe4\x3c\xc1\x85\x81\x89\x44\xde\xfc\x93\x16\xde\x5b\x02\xcd\x98\xe3\x7a\xdf\xb4\x1f\x45\xf6\x6b\x27\x6d\xb1\xa4\x3b\xdb\xbf\xf8\x4d\xfc\x3a\xf0\xcc\x56\xc4\xa0\x0b\xf5\xb4\xd5\x90\xd7\x28\x86\x8d\xe4\x35\x4e\x79\x7b\xd6\x7b\x9e\x76\x1a\x41\x25\xba\xf2\xac\x37\xb0\x2a\x5f\xee\x98\x5e\x25\x12\x16\xd5\xbe\x68\x86\x58\x05\x80\x38\xf8\x6a\x08\x73\x2c\xfd\xa9\x9e\x3a\xb9\xde\xc2\xd7\xa6\x67\x97\x02\x92\xce\xfd\xd0\x72\xa7\x8a\x34\x8e\xbb\x39\x36\x47\xdb\xd0\xe3\xc7\x07\x35\x7d\x83\x38\xf8\xaa\xe5\xd7\xf7\x2b\xf8\xe4\xd7\xb0\xaf\x14\xbe\x29\xe3\x3e\x79\x59\xf3\xe8\xe7\xd2\xb5\x86\xe5\x57\x3d\xe6\x2a\x6a\xaa\xb2\x71\xd1\x6b\xad\xd0\xc6\x34\x80\x0b\x95\x47\xc1\xf9\xf7\xb8\x2f\x71\x19\x0f\xc2\xb6\xa9\xe2\xca\xb5\xb8\xfc\x8a\x32\x3f\x6e\x6f\xa5\x0b\xba\xe7\x5e\xbc\xa2\x17\xdf\xbb\x33\x1c\x9f\x81\x07\x6d\x72\x80\xb8\x50\x79\xd4\xff\xfe\x72\xd9\xc6\xc8\x63\xb6\x50\xce\x9e\x6d\xf3\xf9\xec\xc7\xe1\xcb\x9f\xda\x4b\x30\x66\x88\x5a\xac\x55\x27\xb2\xe6\x99\x17\xf2\x18\xf6\x10\xcd\xe4\x20\xee\xff\x5f\x65\xfd\xe7\x70\x7a\xc5\xbf\x1f\x48\x0c\xa8\x9a\xa7\x29\xf0\x6b\x64\x6d\xa0\x92\x37\x87\x87\x5c\x92\xf6\x3a\xd1\x44\x50\x03\x97\x98\xdc\xf5\xdc\xe6\xc5\x35\xbc\x3f\x44\xb1\x29\x11\xd9\x41\xd0\x9f\x14\xc0\xc1\x15\x88\x8e\x67\xc8\x72\x99\x8f\x60\x18\xe5\x60\x14\x56\x25\xbe\xef\x2c\x50\x33\x59\x4e\xa5\xe9\x20\x9e\x20\x56\xef\x49\xd8\x72\x1f\x3a\xd8\x13\xc4\x21\x35\x79\xb9\x3a\x0a\xdb\x17\x19\xbe\x4d\x7e\x2c\xab\xe6\x59\x3b\xfc\x24\xe0\x82\xd2\xb5\x4d\x39\x92\xb7\xe5\x6f\x1f\x57\x87\x16\x2e\x41\xdf\x1e\x04\x71\x70\x05\x28\xe6\x56\xbf\xe0\x64\x9c\x8b\xd3\x12\x28\x6f\xa3\x5e\xbe\x2a\x5a\xac\x9e\x42\xcb\x3b\xca\xb2\x55\x3a\xf3\xca\xfc\xd2\x33\x4f\x28\x52\x02\xe2\xe0\x0a\xe4\x2a\xb2\x73\x18\xc7\x69\x5e\x1c\x37\xbb\x7a\x07\x3f\x95\xf3\x83\x67\x93\x88\x7f\xb4\x66\xb1\xc0\x36\xca\x4d\x29\xb6\xf2\x76\x26\x84\x02\x20\x0e\xa1\x40\xd0\xdf\xf3\x04\xa0\x3b\xd8\x69\x0a\x08\x8d\x0c\x87\x1c\xec\xa4\xf9\x87\xec\xb2\x85\xb8\x24\x14\x0e\x51\x98\xb8\x9c\x0f\x79\xf4\xfc\xbe\x6f\xe3\x75\xed\x67\xe3\x89\x79\x88\xa9\x83\x38\xb8\x02\x3f\x59\x88\x6c\x99\xae\xf9\xf2\x55\xe6\xd7\x5e\x56\x46\xaf\x7c\x85\xea\x80\x5d\x6b\x57\x5b\x43\x81\x7f\x4d\x50\xdb\xbd\xb8\xe7\x21\x62\x5c\x10\x87\xd4\xe3\xd5\x5b\xeb\xdb\xaa\xba\xfa\xc8\xda\x95\x77\x8a\xab\x21\x68\xef\xba\x27\xed\x0f\x06\xaf\x7c\xcb\x1e\x79\x32\xae\x1a\xfb\x84\x42\xa8\xc7\x0b\xc0\xc1\x15\x18\xfb\xe9\xb7\x97\xf2\xbe\x48\xa0\x1f\xd3\x18\x75\x94\x3e\xc4\x84\x2a\xed\x05\x73\x7b\xc3\x7c\x67\x37\xcd\xbd\x3a\x49\xda\x14\xe8\x18\x0a\x10\x07\x57\x80\x74\x08\xb3\xee\x49\xbb\x9a\xe2\xaf\xe3\x34\x1f\xcc\xb6\x3c\xa3\xb6\x9f\x28\x17\x6e\x6e\xa8\x77\xe6\x86\xd1\x8c\xbf\x91\xcf\x81\x9e\x89\x40\xdc\x3f\x0a\xfc\xcf\xc2\xe5\x6f\xc7\xd3\x01\x96\x13\xa7\x39\x90\x63\x2a\x43\xc5\x8b\xc7\x4a\xb1\x9c\x5c\x24\x6e\x42\xef\x57\x85\x42\xcb\xbd\xa3\x60\xa7\x8e\x7a\xc3\xba\xb0\xe7\x43\xc6\x5a\x0c\x62\xee\x20\x0e\xee\x80\xd0\x00\x7b\x5a\xf7\x16\xb3\x39\x26\x5a\x63\xca\xad\x77\x65\x5b\xb3\x5c\x21\x9a\x47\xc6\x8c\x5e\x65\x0f\x06\xeb\xab\xd3\x1a\xa1\x2f\xe0\x80\x38\xb8\x03\x63\x71\x8e\xb4\x4b\x92\x99\x34\xe5\xa1\x04\x4d\x75\x9f\x8d\x6a\x05\x70\x86\xcc\x1e\xce\x33\x2a\x52\x7e\x9e\xb9\x23\x1c\x2f\x26\x0a\xfd\xaf\x00\x1c\xdc\x81\xec\xdc\xc7\xf9\x6a\xd1\x3a\x29\x32\x22\xed\xf5\xc9\x0b\x6b\x24\x07\x82\x4f\xa4\xc4\x72\x65\x49\x5e\x70\x62\xb9\xf0\xdf\xe0\x78\x0c\xc5\x8a\x00\x1c\xdc\x81\xfd\xa0\xe1\xa9\xe1\x20\x87\xf5\xd4\xdd\x1f\xdb\xaf\x92\xa4\x66\xf5\x56\x56\xb1\x7d\x77\x2e\xc4\x57\x3d\x8b\x27\x2e\xbb\x54\xe6\x89\x70\x00\xc4\x21\x1c\x08\x02\xe4\x09\x40\x6b\xbb\xd3\x1c\xb0\x2b\x1b\xf1\xb7\x88\xea\x19\xab\x39\x4a\xac\xa4\x54\xe1\x5e\x96\x97\x91\x19\x9d\x4d\x97\xf5\x99\x20\x09\x6a\x4c\x31\x68\x83\xfa\x72\x41\x1c\xd2\x51\xa5\xe1\xf1\xd3\xb7\x87\xe8\x0e\x47\x8a\xbc\xe7\x7d\x7b\x74\x7b\x53\x1f\x72\xdc\x5a\xb8\x12\xaf\x47\xd6\x97\x4b\xcd\x73\x4d\x03\x7a\x45\x0f\xe2\xe0\x0e\x98\x94\xf3\xbc\xeb\xf8\x6a\x24\xfc\xa3\x81\xd3\x54\x57\x7a\x27\xb9\xd2\xe5\x13\x05\xd5\xa0\xfd\x8b\xf3\x6b\xe5\xe7\xfa\x69\xcf\x43\xdf\xd4\x00\x71\x70\x07\x7e\x09\x19\x57\x19\xfa\xb5\x61\x29\xce\x65\xfb\xf5\x75\xd3\x3a\x04\xd7\xfa\xdf\x42\x43\x21\x29\x7a\xb4\xa2\x5e\xd4\xe5\x39\x04\x1d\x4b\x05\xe2\xe0\x0e\x64\x25\x75\x26\x4f\x08\xc7\xbe\x3e\xd7\xf4\x6a\xad\x7f\x5a\x91\x05\xe7\x61\x69\xcd\x1c\x69\x5e\xa1\xdf\xaa\x5d\x62\x20\xba\x1f\xd4\x47\x0c\xe2\xa0\x3a\xe0\xf6\x77\x07\x40\x0b\xed\xd3\x1c\xd8\x9e\xc4\x0e\x55\xeb\x5c\xd5\xaa\xd5\xfe\xd3\x2a\x8f\xfd\x09\x8f\xe1\x91\x42\xac\xe7\xe8\x3e\x03\xef\xc6\x09\x4a\xea\xd2\xca\x36\x62\xee\x20\x0e\xee\x80\x98\x25\x76\xeb\x2f\xa2\xc9\x98\xb5\x42\x4f\x5b\x94\x88\x3e\x11\xc9\x87\x76\x4a\xd7\x5c\xb1\xbe\x8c\x7d\xca\x34\x18\xd3\xa5\x85\x8e\xbf\x04\x71\x48\x31\x40\xcc\xd9\x6d\x8e\x57\xcd\xfd\x4e\x19\xd2\x5d\x1e\xf7\x95\x14\x9f\x3e\xed\xaa\xfe\x23\x63\xeb\x4c\x3e\x69\x1b\x9c\x65\x72\xaf\x11\xba\x5e\x01\x1c\xdc\x81\x90\x7c\x87\x82\x79\x97\xd6\xdb\x76\xf6\xd2\x34\x6e\x39\x3b\x78\x41\x44\x77\x4f\x3e\x19\x7d\xce\x8a\x09\x97\x56\xad\x8b\x55\x82\xbe\x63\x0a\xe2\xe0\x0e\x44\xa3\xdd\xec\x7d\x89\xba\xaf\xb3\x42\x1d\x2f\x9e\x26\xd7\x6d\x59\xfb\x16\xdd\x6b\x96\xd0\x78\xb5\x83\xb1\xae\x91\xe5\xf1\x77\xe8\xcc\x15\x10\x07\xd5\x01\x40\x9e\x00\xf4\xd4\x73\xea\x37\x5c\x45\x7e\x16\xb6\xbe\xf6\xa3\xde\x6b\x11\xb4\xe9\x3f\xf9\x5d\x83\x62\x2a\x2d\x19\x20\x79\xeb\xb2\x63\x6e\x3a\x79\x4f\xd1\x16\x94\x01\x03\x71\x70\x07\x6e\xb2\x90\x45\xa6\xb9\x3c\xbc\x33\x8a\x73\x9b\xcc\xde\xd9\x1e\x2d\x22\xbd\x71\xd3\x42\x77\x62\xc6\xec\xe4\x77\x82\x83\xca\xbf\xbe\xb7\x0b\xe0\xe0\x0e\xcc\xa4\x35\x5f\x15\xbc\x78\x64\xfb\x86\x19\xad\xe7\x8e\x7e\x72\xeb\xf8\xcf\x43\x95\xf1\xfd\xbb\x65\x64\xec\x3a\xf3\x4f\xa8\xb6\xa0\xa7\x0d\x10\x07\x77\x00\xb3\x4b\xf6\x2b\xfb\x86\xd7\xb4\x6a\xac\x8b\x8b\xf6\x5a\xc4\xaf\x47\xc9\x0e\x46\x25\x57\xdd\xc2\xfd\x27\x2b\x71\xea\x02\xd5\xa1\x7a\x08\xe2\xe0\x0e\x34\x78\xf3\x88\xa3\xb0\x73\x5e\x62\xb7\x23\xf1\x92\xa1\x9d\x90\xa8\x7a\xb9\xd5\xb3\x60\x8d\x33\xdd\x9a\xea\x31\x58\x94\x30\x4f\x81\x70\x00\xc4\x41\x75\x20\xe9\xef\x0e\x80\x1e\x41\x4f\x73\xc0\x47\xb4\xe4\x97\x67\xff\xe2\x1b\x9e\x0a\xcb\x1d\x2e\x1e\x89\xb2\x0f\xf4\x5e\x47\x8e\xf6\xb5\x3e\x32\xf9\x6d\xdf\x72\x63\xf5\xa2\xa0\x65\x36\x80\x83\x3b\xf0\x65\x32\x0d\x33\xf3\x58\x9f\x39\xb3\xf7\xa1\x7a\x1c\x9b\x43\xd4\x48\xf8\x27\x7f\xab\x47\xcf\x42\xcb\xd5\x3b\x44\xd4\x08\xe6\xa0\x75\x06\x88\x83\x3b\xb0\xdb\x1b\x84\xf9\x85\xda\xae\xfa\xeb\x0a\x09\xd5\x13\x1c\xd4\x6b\xcb\x9e\x55\xb7\x37\x26\xb6\xb8\xb0\xb8\x15\xcb\x0f\xf9\x14\xa0\x36\x18\x10\x07\x77\x60\x47\x3d\x3a\x28\x6d\x7d\x93\x46\xe5\xb7\xd2\xb0\xdd\x7d\xb2\x64\xda\x43\xba\x2e\x42\x14\x5c\x2f\x4a\x0d\xe6\x4e\x23\x54\x17\x49\xc4\xb8\x20\x0e\xee\x80\x9b\x4d\xc2\x6b\x4e\x3b\xcb\xbe\xa5\x6e\x02\xcb\x0b\x1d\x23\x91\x5f\x3f\x99\x62\xbc\x12\x0a\xd4\xb8\x2c\x41\x28\xb2\xe4\x32\x0c\x1d\x51\x08\xe2\xa0\x3a\x00\xca\x13\x80\x36\x15\xff\xc9\x13\xa0\xf4\x23\xed\x60\xec\x62\xd4\xdc\x70\xbf\x37\xc5\x18\x22\x28\xd5\x34\x9f\xfa\xc6\xf5\x75\xe3\x46\xe0\xd4\x0a\xed\x65\x8b\xe2\x2c\xb5\x73\xee\x55\x12\x67\xb2\x71\x82\x9c\x27\x58\xe8\x2e\xb8\x85\x73\xc5\x7f\x8c\x80\x8c\xf7\xb6\x86\x47\xfc\xce\xa8\xd0\x62\x87\x3c\x59\xc1\x5e\xf0\x81\xd3\x6e\x46\x27\x6b\xec\x99\x6c\x13\xed\x22\xfd\x6c\x69\x75\xa5\x38\x7b\x70\x6a\x9c\xcd\x8b\xad\xcd\x05\x95\xae\x01\x5c\xfe\xe7\xb4\xb7\xf5\xb9\x83\x16\x03\xc6\xdd\xe7\x32\x64\x18\xcf\x64\xb6\xc8\x79\x82\xf2\xc6\x4f\x76\x3b\x6d\xfd\x23\xce\xf5\xc1\xcc\x71\x97\x52\x02\xf1\xa2\xc9\x6e\x5c\x41\xbf\xf1\x9b\xe4\x58\x10\x67\x62\x61\x48\xed\x4c\x66\xcb\x80\xf4\xb3\x8d\xc4\x2f\xe9\x6e\xec\x67\x13\x3f\xc0\xbf\x4b\x8c\xa2\x8c\x2a\x73\xf9\x9c\xcf\xa5\xd0\x85\x94\xe4\xaf\xfb\x4b\xcf\xac\xba\x53\xf3\xce\x64\xb6\xc8\x79\x02\x3e\xd1\x1b\x6a\x77\x9a\x8e\xb0\x15\x24\x0d\xe5\xf3\xba\xd3\x5a\xa9\x5f\xae\xbd\xd7\xfb\xba\x7d\xd4\xad\x3e\x32\x5b\xbc\x32\xd6\x71\x26\xb3\x35\x42\x0e\x6d\xf0\x57\x19\xb3\x27\x47\x34\x9b\x63\x1a\xa9\xa3\xb4\x60\x1f\x04\x13\x84\x12\xfb\xe3\x25\xfd\x5e\xdc\x3b\xc2\x13\x18\xbe\xc9\x7e\x26\xb3\x45\xce\x13\x3c\xbf\x6b\x52\xc2\xcf\x48\xf0\x90\xc0\x75\xed\xeb\x8a\x4f\xe5\xe8\xd3\xa3\x81\x91\x0d\x35\xca\x2b\x7e\x9f\x70\x45\x77\x7d\xb6\xf8\xcf\x6c\x0b\x10\x74\xa5\x9e\xfa\xf0\x6f\xd5\xbc\x36\x42\x84\xfb\xae\xc1\xf8\xcb\xa2\x01\x36\x13\x6b\xf6\x61\x6a\x3a\xfa\x45\xda\xa7\x58\x49\x4c\xf7\x16\x2b\x37\xa0\x9b\x3d\x88\x43\x0a\x11\xbb\xcc\x3b\x5b\x76\x3f\x7c\x43\x64\xab\x1d\xf8\x96\xc8\xee\xeb\x66\x6e\x4a\x4c\x54\xa0\xbc\x7e\xa8\x80\x1e\x0d\x5a\x32\x1b\x14\xc6\x03\x71\xf0\x42\x8f\x35\x1b\xe5\xd7\xe7\xfb\xe6\x8d\xd7\x51\xa9\xb6\xea\xd4\x79\xeb\xed\x91\xbe\x42\x19\xcb\xdf\x18\xaf\xbc\x9d\x82\xac\x72\x5d\xa0\x33\xef\x41\x1c\xbc\xd0\x1b\x15\xcd\xd6\x0a\x61\xba\x37\xba\x24\x58\x85\xa9\xdc\x08\xf8\x3e\x75\xeb\x7e\x76\xd0\x97\x39\x47\x73\xe2\xc3\x2d\xcd\xed\x4f\x50\x73\x00\x88\x83\x17\x7a\x17\x0d\x7c\xbe\x03\xed\xe5\x03\x2a\xb3\x0e\x1d\x61\x7a\x3f\x7a\x6e\x6f\x3e\x43\x39\x31\xfe\x17\x1f\xe2\x87\x2c\xca\x03\x93\x6c\x11\x85\x1e\xc4\x41\x37\xfb\xfe\xbf\xdf\xec\x41\x65\xf3\x34\x07\x56\xd3\xc6\xea\x1a\x95\x37\xce\xb1\x29\x95\x91\x50\x7a\x17\x9f\x54\x7d\xbe\x31\x17\xcf\xff\xe2\x66\xc1\x61\x21\xd6\xfb\x78\x5e\xa8\x0f\x07\xc4\xc1\x1d\xd0\x7b\x22\xdc\xf5\x6c\xc5\x32\xea\x66\x84\x34\x39\x1a\xd9\x6a\x18\xbb\x71\x33\x9b\xf7\xde\xe7\xc3\x85\x00\x89\x6b\x35\xa9\xee\xf9\x50\x4f\x1a\x80\x83\x3b\xe0\xd1\x36\x5a\x75\x28\x36\x56\x75\x7e\x2d\xdb\xe9\xfe\x03\xf4\x47\x69\x85\x4c\xa3\x9d\x57\x22\x5e\x7d\x94\xa5\x94\x7a\x1d\x20\x04\x1d\xb2\x07\xe2\x90\x36\x80\x5a\x54\xe8\x64\x17\xa7\xd0\xcb\xbc\x2b\x33\x55\x14\x5a\x16\x8a\x77\x04\xe3\x9c\xa5\xb9\xde\xb9\xcd\xd5\xeb\x6f\x5a\xae\x5e\x84\x36\x15\x00\x1c\xdc\x81\x3d\xf4\x28\xcb\xc1\xc0\x9c\xcf\xad\x0f\x3c\x7b\x7f\x59\x31\xf5\x2b\xff\x62\xf8\x63\x6e\xd3\x76\xd1\x3e\x41\xf3\x1c\xcf\x67\xa7\xef\x08\x07\x40\x1c\x74\xb3\x07\xe4\x09\x40\xf7\xb0\xd3\x1c\x70\x2b\x70\x51\x51\xa0\xdf\x79\xfc\x31\x52\x8d\x50\xe4\x30\x8e\xa0\xd8\x13\xcd\x7b\x91\x52\x8c\x77\x8f\x28\x8b\xfd\x05\x55\x8f\x0d\x74\xfe\x0b\x80\x83\x3b\x80\xc1\xef\x3f\xa1\xfa\xdc\xea\xe9\xd7\xbb\xbb\xcd\x4e\xe6\x53\x1f\x52\xfb\x0f\x7c\xd5\x1a\xb3\x38\x0b\x54\x34\xcd\x19\x0e\x3c\x9e\x43\x47\xf5\x00\x38\xb8\x03\xd3\xc5\xc3\x29\xd5\x2e\xc2\xa9\x6f\xca\x3b\xb4\x75\x27\x43\x6d\x09\xef\xcf\x1c\x25\x6f\x77\x1d\xf9\x4e\x6b\xfc\xe1\xe6\x20\x83\x3e\x81\x0c\xe2\xe0\x0e\xbc\xbb\x3c\x68\x81\x7a\xb5\xe8\xd3\x93\x6f\x1b\x8b\x43\xf7\x8d\x3f\x8b\x25\x2a\x1c\x76\x9b\x06\xa2\x70\x2c\xd9\x0e\xd8\xa4\xff\xac\x44\x8c\x0b\xe2\xe0\x0e\xa0\x58\x9a\x1e\x34\x8d\x1d\x6a\x95\xf0\x0f\x47\x0d\x27\x07\x85\xf5\x7a\xaa\x90\x07\x93\x63\x18\x73\x1b\x46\xf3\xc6\x2c\xba\xeb\x21\x1c\x00\x71\x50\x1d\xd8\xfd\xbb\x03\xa0\x05\xc5\x69\x0e\x38\xb6\x0d\x16\x35\x45\xe6\xf1\x8c\xbd\xbb\x30\xe6\x24\xa4\x87\x82\xc2\x68\x3c\x9d\x6d\x69\x6b\x8d\x4a\xcd\x4a\xdc\xd7\xdd\x01\x85\xe8\x41\x1c\x52\x90\xfc\x04\x53\x68\xa6\x89\xe0\x2d\x46\x87\xd7\xbc\xd6\xf6\x83\x26\x6d\x99\x7a\xd4\x63\xf9\xc5\x6d\x07\x4c\xef\x36\x7c\x01\x53\x68\x6f\x1d\xc4\xc1\x1d\x30\x72\x25\xb8\x3f\x26\x4f\x71\x20\xc5\x99\xf9\xc6\x8e\xef\xa3\x7d\x85\x22\x97\x63\x61\xc3\x86\xe1\xc2\xd1\xcf\xdb\x77\xdb\xac\x2f\x40\x35\x1b\xc0\xc1\x1d\xb8\x89\x93\xbd\xf6\x83\xe0\xf1\xcf\x5f\xf3\xd9\x5a\x58\xce\x9d\x9e\xca\x21\xc5\x2f\x0c\x5e\x34\x76\xc5\xbb\xec\x31\xbb\xea\x6b\x42\xf7\x02\x10\x07\x77\xe0\xb8\xb8\xe0\x0f\x9b\x78\xb1\x2d\xe5\x0e\x37\x76\xc7\xa5\x12\xb5\x93\x36\x47\x5d\xbe\x88\x3b\xd7\xb8\x8c\xdf\x12\xa5\xc4\x09\xfd\x46\x38\x00\xe2\xa0\x3a\x00\xc8\x13\x80\x56\x77\xa7\x39\xa0\x11\x67\x2c\x29\x48\xfc\xe9\x0b\x8b\x24\xda\xcf\x8b\x22\xef\xdf\x4a\x2c\xa7\xdd\x77\xb7\x23\xbb\xea\x47\x17\x52\xef\xae\x59\x74\x1e\x31\x77\x10\x07\x77\xc0\x21\x3c\xb8\x0d\x4b\xf3\x73\x45\x4e\xd4\x04\x51\x78\xe9\xc8\xe5\xef\x46\x1a\xa2\x26\xcf\xe3\xcd\xb8\x93\x6d\x6d\x22\x78\x25\xdc\xa1\xbc\x1e\x80\x83\x3b\xc0\x23\x87\xeb\xbe\x21\xc6\xf6\xa4\x27\x30\x92\x7d\x5d\x02\x0b\x8b\x29\x6b\xab\x70\xed\x0e\x97\x54\x09\x4a\x86\x89\xf2\xde\x2e\x74\xbd\x82\x38\x24\x07\xa6\x1e\xcc\xaf\x37\xcc\x0b\xdb\x0e\x93\x8a\x75\xab\x6d\x3b\x54\x16\xb3\x49\xa4\x7c\xb8\x44\x5c\xf5\xfb\xeb\x9a\xc0\x17\x2b\x09\xc8\x01\x00\x07\x77\xc0\x7b\x99\x7b\xbe\xab\x77\x81\xf8\x80\x66\x80\xe2\x88\x71\x7d\x74\x50\x35\x80\x2c\x91\xde\x7e\xca\x7b\xb2\x0c\x4d\xf2\xe1\xeb\x2b\x08\x07\x40\x1c\x54\x07\x18\xfe\xee\x00\x68\xa9\x7d\x9a\x03\x7d\x06\x4d\xb1\xba\x7b\x1a\xba\xef\x1f\x13\x4a\x61\xc7\x8f\x1a\x9c\x14\x73\x26\x19\x5a\x99\xfe\x64\xad\x5c\xbf\xc9\xb9\x11\x0c\x6d\x7c\x80\x38\xb8\x03\xcc\x57\x0c\x9e\x58\xc5\x62\x0a\xe7\xf7\x7a\x09\xad\x9a\xe6\xb7\xbc\x31\x63\xd3\xfd\x6d\x41\x13\x96\x4d\x7b\xef\xb6\x04\xfe\x83\x1f\x88\x71\x41\x1c\xdc\x81\x13\x0c\x33\x11\x02\x3c\x86\x29\x62\x2a\x0b\xf5\x34\x9d\x16\x26\x5c\x87\x9d\x2b\x5f\xa3\x57\x86\x5e\x65\x2e\xf0\x2b\x91\x87\x42\x19\x53\x10\x07\x77\x20\xf1\xb9\x7c\xc2\x40\xf2\x72\xb3\x2c\xf7\xaa\x9a\x2d\x57\x49\x26\x87\x36\xda\x40\x53\x84\x43\xdf\x51\x60\xb3\x25\xc3\xdb\x5e\x02\xa8\xb1\x13\xc0\xc1\x1d\xc8\xe7\xa5\x7e\x88\xdf\x1a\x14\x4f\xeb\x76\xc9\xdf\x89\xd3\x1c\x35\xe9\xc1\xd6\x04\xbb\x2c\xf3\xe5\x34\x9f\x82\x43\x36\x47\x5a\x1e\x84\x03\x20\x0e\xaa\x03\x80\x3c\x01\xe8\xb9\xe7\x34\x07\x04\xae\x86\x39\x44\xf3\xb7\xcc\x7a\xed\x78\x7b\x06\xeb\x77\xaf\x04\xf1\x04\xa0\x3e\xb3\xb2\xd5\xcf\x24\x88\x13\x7e\xc7\xe5\x04\xbd\x64\x03\x71\x70\x07\x9c\x34\xd7\x86\x9e\xa6\xa7\xcb\x7b\x3b\x6f\x87\x94\x08\xe1\x69\x1a\xbd\xf4\xee\xeb\x22\x7b\xb3\x2c\xe5\x7f\xd1\xc5\xfd\xa7\x23\x74\xa0\x33\x88\x83\x3b\x30\xa0\x45\xcd\x6b\x71\x27\xf1\xd3\x1c\x59\x97\xa3\x5b\x51\xcd\xcb\xfc\x28\x76\x77\x3b\x9d\x21\xda\xe1\xfb\xb3\x26\xfd\x82\xb4\xcc\x88\x71\x41\x1c\xdc\x81\x2c\x81\x7e\xf7\xa6\x5f\x56\xed\xd6\xb5\xf5\xa8\xc9\xf9\xd5\x4d\x23\xc6\x13\x97\x24\x72\x53\xfb\xa7\x56\x44\xab\x6e\x6f\x60\x42\x1b\x61\x20\x0e\xee\xc0\x81\xee\xab\xc3\xe1\x27\x14\x46\xdc\x71\xdd\x97\xf4\x59\xaa\x8f\x8f\xe2\x13\x58\xa7\x9e\xf0\xcb\xcf\x73\xf6\x37\xf0\x7e\x34\xd4\x85\x72\x45\x00\x0e\xaa\x03\x46\x80\xef\x94\x00\x1e\x42\x4f\xfd\x60\x75\x34\x2a\xe5\x56\x65\x53\x9f\xa7\x2d\x4d\xb7\x70\x20\x61\x25\x9d\xc0\xc9\xfc\x6f\xb3\x0a\xb2\xfb\x53\x3d\xad\x01\xef\xd7\x37\x11\x73\x07\x71\x70\x07\xd8\xdf\x5c\xc9\x4b\x6a\xb7\x6c\xc9\x34\xbc\xf1\x82\xa4\x47\xb8\x93\xea\xed\x63\xa3\xbb\xba\x26\xbb\x4b\x22\xba\x43\xcd\xcb\x6d\xd0\x7a\x00\xc4\x21\xf5\x06\xf4\xa2\x50\xe2\x74\xb9\x3c\x37\xd8\x71\x7b\xa3\x1f\xa6\x37\xf2\x91\x97\xd6\xfd\x7d\xbf\x5c\x7e\x4b\xd3\x35\x34\x53\x8c\x9c\x8f\xd0\xa6\x25\x80\x83\x3b\xb0\x22\xe4\x53\xaf\xe8\x3e\x4b\x23\x91\x5c\x30\x95\xda\x91\x1d\x1b\x75\x8f\xcc\x10\xeb\x73\xd7\xed\xf3\xc7\x5a\x59\xa4\x4a\xea\xdf\x11\xe3\x82\x38\xb8\x03\x12\x03\xd5\x33\xaa\xc7\x96\xae\x19\x6f\x67\x0e\x1e\x2c\x2c\xb4\x79\xf2\x73\xe0\xe8\xdf\x35\x14\x99\x46\xa9\xe4\xad\x20\x72\xd3\x41\x38\x00\xe2\xa0\x3a\x00\xca\x13\x80\xda\x05\xff\xc9\x13\xa0\xf8\x23\xed\x61\xc4\x7e\xdc\x72\x9b\x98\xb2\x68\xbf\xcc\x5a\xd5\x2d\xe0\x17\xd2\x99\x8a\x46\xd0\x28\xa8\xfa\x59\x37\x4f\x5b\xa2\x55\x69\xa1\xb0\xfa\x4c\xb6\x4e\x90\xf3\x04\xdf\xb6\x3b\xf2\x29\x7a\x92\xf1\xcc\xd3\xe9\x5d\x9f\x3f\x11\x99\x2e\xdb\x76\x50\x67\xc3\x12\xe8\xcf\x68\x0d\x6f\x50\xbf\x62\xe6\x71\x66\x5b\x27\xa0\xf9\x9d\x76\x79\xb8\xea\x8e\x3f\x35\x78\x76\xe3\xde\x5e\x8e\xaa\x46\xea\xfb\xa6\xf0\x89\xbb\xf5\xa5\x7e\x3c\x1e\x7c\xda\x4f\x93\xa2\x71\x62\x16\xa1\xdb\x0e\x88\x83\x5f\x1e\x5e\x85\x92\xb1\x96\xdf\x44\x59\x29\x29\x29\x59\xbe\xad\x2e\x3e\x9c\x0a\x1f\x19\x24\x6e\x7b\xd9\xfa\xbb\xf2\x8f\xac\xe2\xf5\x5e\xe8\x1d\x34\x88\x83\x5f\x1e\xf3\xec\x31\x8f\xa9\xd9\xd5\x8b\x2e\x47\x36\x3c\xa7\x49\xfc\xf6\x88\x9d\xf6\x65\xbe\xc8\x37\x5a\x26\xba\xa9\xdb\x96\x0a\x18\xbb\x46\x88\x71\x41\x1c\xfc\xf2\x60\xe8\x41\xcb\x61\x55\x08\x5e\xea\xda\x2d\xc1\x6f\xf9\x7e\x4e\x77\xa1\x47\x62\x24\x74\xfe\x7b\x4f\xaa\x2e\x57\x8e\xdf\xc8\x1b\xa8\x47\x1d\xc4\xc1\x2f\x0f\x12\x6f\x42\xcc\xf8\x10\x5c\xbe\xed\xc7\x6e\x4a\x32\x8e\xf4\xc3\x15\xc3\xf7\x1a\x0e\x62\x7c\x5a\xc5\x31\x6c\xf8\x74\xc9\xef\xcd\x23\x2e\x0f\x10\x07\x95\x48\xff\xbf\x97\x48\x90\x6c\xa7\x39\x90\x15\xc2\x10\xfe\x89\xc2\xfc\x67\x60\x9a\x82\x24\x2b\x2d\xdd\x6b\x3d\xc7\x73\x85\x9a\x11\xad\xe6\x87\x1d\x6e\xa4\xf7\x07\x78\xa1\x3e\x04\x10\x07\x77\x80\xbb\x0c\xfd\xed\x65\xc3\x43\x57\x0b\x8d\xe1\x3b\xd4\x14\x57\x4b\x3d\x42\xa7\x36\x2f\xb4\x61\x72\x65\x8c\x36\x73\xc6\x5f\x23\x82\xbe\xbd\x0f\xe2\xe0\x0e\xd0\x3d\x7d\xbd\x7b\x5b\x32\xba\x58\x2d\x96\x93\x59\x50\x9a\x79\xde\x49\xf5\x3d\x79\xab\x68\x51\x68\x14\xd6\xe4\x91\x98\x5f\x13\x14\x13\x04\x71\x70\x07\xa8\xf8\x34\x4a\x84\xfa\xd6\x8c\x96\xd0\xd8\xce\x35\x75\x11\x1d\xc7\x68\x06\xbc\x63\x2f\xf0\xdf\x0b\xcc\x5d\x2f\x6b\x4f\xfd\x00\x9d\xeb\x06\xe2\xe0\x0e\x84\x6c\x26\x85\xd8\xe5\x15\x0a\xaf\xa2\x2b\xdf\xef\x99\xad\xb9\x42\xff\xfe\x69\x8e\x59\xd8\x63\xec\x75\x62\xca\x50\x7e\x9e\xdc\x63\x84\x03\x20\x0e\x2a\x91\x80\x3c\x01\xa8\x17\xfd\xf4\x3c\xc1\x37\x31\xfa\x63\xb5\x19\xbe\xb4\x05\xcd\x12\xfe\xa6\xb4\x27\x97\x1a\x1b\xee\x28\xc8\x86\x5d\x12\xd8\x8b\x6e\xe6\xc7\x72\x9a\xf5\x45\xf4\xe6\x83\x38\xe4\x3c\x41\xf1\xb2\x89\x33\x8e\xa1\x4b\xa7\xe6\xd1\x3d\x9f\xe8\x97\xfd\x18\xdf\x39\xdb\x58\x50\xcb\x56\x5e\x79\x27\x37\x50\x6e\x5c\xf9\x6a\x89\x18\x19\xc4\x21\xe7\x09\xce\xad\x1e\xdd\x19\x56\xf1\x14\x4c\xcb\xe2\xb2\x35\x22\xd0\x7d\x71\xb5\xc5\x5b\xe0\x37\x29\xef\xab\x80\xfc\xb8\xae\x85\xcc\x91\x71\xc4\xc8\x20\x2e\x54\x11\x05\x05\x05\xf5\xdf\x23\xeb\x37\x9a\x60\x78\x2d\xb3\x7e\xfe\xac\xdc\xb3\x68\xe2\x9f\xf1\x9c\x2c\x53\xdf\xd4\xd4\xbc\x86\x24\x3f\x94\x6e\xfa\x1b\xd1\xef\x5d\x28\x4f\x50\xa1\xc5\x63\xf1\x5a\x2b\xf1\x67\xee\x9d\xc4\xac\x0e\xb4\x3f\xbd\xf5\x8f\x94\xdc\xec\x9a\xf8\xd1\xeb\x0d\x5f\xed\x9b\x7b\xbd\xb0\xf9\x77\x9e\x80\x9b\x23\xea\xb6\x02\xc1\x40\xa5\xad\x4f\x84\x5c\xfa\x73\x81\x1b\xb2\x47\xc4\xc5\x96\x8a\x21\xc3\xd5\x87\x57\xf4\x36\xc6\x86\xff\x7d\xd3\x70\xb7\x2d\x5d\xe6\x56\xf6\xf9\x6d\xf6\xba\xe2\x79\x73\x7d\x8f\x3f\x5f\x95\xfe\x97\x18\xa5\x26\xc1\x2b\xdc\x34\xf7\x86\x23\x43\x6d\xfe\xf7\xe5\x09\x40\x93\x3b\x25\x4f\x10\xf5\x10\x83\x50\xcb\x71\xea\x73\x0a\xdd\x07\x27\x0f\x7b\x05\x7f\x7a\xac\x3a\xdc\x8b\x03\xd2\x4d\x04\xa8\x1f\x38\x99\x8f\x5d\x98\xff\x85\x96\x4d\xa1\x48\x2d\xcf\x75\xb1\xa6\xec\x36\xed\xdb\x6d\x67\xa1\x37\x0c\x69\x09\xb8\xc7\x3b\xbf\xfe\x88\xeb\x7c\x6f\x29\x67\xd1\xe1\xdf\xdd\x8a\x1c\xb4\xdf\x52\x74\xf6\xc7\x24\x89\xa9\x9f\xf7\xdd\xa5\xd4\x92\x5e\x12\xda\xbb\x1e\xde\x2e\xbb\xb0\x17\x67\xf1\x54\x80\xe9\x18\xca\x13\x80\x7e\xfe\x9f\x3c\x81\x2c\x52\x9e\x20\x40\xe1\x0d\x4f\x66\xed\x1f\xd2\x49\x0f\xa2\x3f\x2d\x72\xf5\x93\xd1\x65\x21\xfe\x96\x6f\xe7\xf5\xad\xcb\x55\xa3\x18\x94\xf4\x67\xcf\x60\x21\xa1\xd0\x80\x94\x27\x08\xc7\xdf\x9d\x60\xe1\x18\x6d\x24\xe5\xf0\xd7\xd0\x71\x52\x5d\x71\x98\xfa\x30\x93\xf9\x69\x71\x53\xd3\x8a\xa9\x79\x2c\x52\x5e\xe4\x2c\x96\x2f\xb2\xc8\x79\x02\xf7\xe1\x9c\x10\xfa\x42\xeb\x2b\xcf\xe7\xd9\xf7\xd1\xa3\xbb\x62\x0c\x71\x97\x4b\x4f\x0c\x57\x4d\xee\xe0\x5a\x6b\x06\xdf\x50\xe8\x3e\x8b\x9f\x6d\x40\xce\x13\xe8\x1a\x0c\xe4\x44\x25\x97\xbd\xc0\x0c\xdd\xab\xa3\xa9\x77\xaa\xa1\x79\x2b\x15\xbe\xd3\x76\xf7\xfe\x1d\xf1\x70\x0f\x3a\xc1\x8f\x89\x67\x32\x5b\xe4\x3c\x01\x8d\xc4\xeb\xdf\x68\xc7\x58\x27\x99\x69\x9e\x6e\x52\x5c\x92\xf9\x5b\x04\x4e\x29\xef\xae\x15\x53\x15\x79\xd1\x10\x6d\x7d\x96\xde\x3c\x93\xd9\x22\xe7\x09\xd6\xa5\x3a\x8a\x29\x0b\x07\x36\x54\x30\x5e\x8c\x4c\x4f\xc5\x5a\xa3\x86\x50\xac\x24\x12\xdf\xee\xcc\xd1\x42\x95\x49\xfe\xd8\xe3\x77\x26\xb3\x45\xce\x13\x50\x56\x18\xa8\xbc\xa8\xc8\x38\xaf\x44\x93\xce\xbb\x12\x78\x24\x42\xf6\x6a\x74\x5a\xc3\x99\x14\xe5\x81\x04\x71\x40\x79\x8c\x74\xfc\x99\xcc\x16\x39\x4f\x40\x95\x58\xbb\x78\x5e\x5c\xdd\x2d\xbf\xed\x7d\xbb\xde\x27\xff\x8c\x91\x9b\x89\xe9\xba\x3f\x33\x2a\x39\xdb\xdd\xef\xbc\x9f\xd9\xbc\x7b\x66\x2b\x62\xd0\x85\x7a\xda\x6a\x88\x82\xab\xec\xe1\x54\x09\x4b\x94\xe5\xc5\xef\xac\x57\xa2\x1e\xd2\xbc\x12\xd5\xbb\x36\x9b\xe0\x16\x1b\x82\xda\xc7\xe9\xc4\xf0\x0b\x3a\x7d\x11\xc4\xc1\x57\x43\xd3\x0e\xce\x97\xf4\x6e\xa8\x5d\x69\x6f\xe6\xdb\xae\x53\x35\xa0\xfe\xb2\xb8\x17\xf7\x76\xe4\xe8\xa9\x5c\x42\x9e\x1a\xc6\xd4\x31\xd4\xdd\x01\xe2\x90\xba\x48\x45\x6e\xff\x79\x98\xaa\xe2\x24\xca\x78\x23\x7d\xea\x35\xba\xf4\x9c\x73\xfa\xae\x36\x4b\xdd\x75\xaf\xa1\x91\x2f\x99\xa5\x3e\x96\xd0\x0b\x1f\x00\x07\x5f\x0d\xd5\x12\xd8\x4d\x6e\x0f\x05\x97\x12\x51\x5e\xdc\x26\xe3\x75\xfb\x41\xe6\x18\x7c\xc9\x2b\xf7\x02\x5f\x2b\x5f\xb1\xd9\xe6\x8b\x40\xe8\x83\xdf\x20\x2e\x54\xfe\xbf\xbf\xfc\x63\x1d\x44\x78\x9d\xfd\xd2\x5d\x46\xd7\x17\x27\x04\xad\x94\xbc\xd7\x3f\xfa\x14\x70\x2a\xbc\xdc\xa8\xbf\x14\xe6\x4d\x78\x9d\x0e\xa3\x0a\xd1\x4c\x0e\xe2\x42\xe5\x51\xd0\xfe\x73\x38\xfd\xdf\xf3\x04\xa0\xaa\x79\x9a\x02\xac\xc3\xda\x29\xc7\x54\x2b\x22\xec\x9f\xb5\xf4\xb6\x0b\x42\xca\xe8\xb4\x23\x09\x24\xe4\xf7\xa7\x15\x22\x66\x33\xeb\xb2\x2f\x42\x87\x31\x83\x38\xb8\x02\x0b\x4f\x56\xbf\x52\xbe\x4a\xa0\xc0\xa8\x72\xab\xae\x72\xf9\xee\xfc\xa5\xa2\x47\x29\xb2\x3b\xfd\x71\x23\x91\xd4\xea\x07\x8e\x78\xe8\xb0\x6b\x10\x07\x57\xe0\xb3\xf1\x7e\x0e\x99\x4a\x84\xc6\xc7\x05\x72\xc6\xf3\x17\x5d\x3e\xf3\x86\x3f\xf6\xe8\x8f\xad\xd4\xe4\x39\xea\xdd\xe2\x79\x3f\xe1\x8d\x18\x17\xc4\xc1\x15\x70\x2d\x78\xf6\xcd\x9c\x97\x9c\xd7\x46\xf6\x63\xb4\x58\x4d\x93\x74\x3f\xf3\xbb\x7e\x7a\x8e\x96\xc9\x47\x57\x35\xb5\xf6\xf0\xc2\x03\xa0\x87\x43\x00\x07\x57\xc0\x3f\xdf\x08\x63\x54\xf2\xf6\xed\x96\x29\x8b\xaf\x17\x51\x7e\x9f\x33\xc6\x5b\xa6\x14\xae\xd3\x73\x3e\xa0\x22\xa7\xab\xb4\x95\x2b\x40\x28\x00\xe2\x10\x0a\x34\xfc\x3d\x4f\x00\xba\x83\x9d\xa6\xc0\xde\x95\x82\x6d\x07\x1f\xa1\xa7\x51\x36\x1b\x0f\x63\xd3\xf5\x1f\xcb\xc8\xec\x44\x2d\x0f\x3f\xad\xfe\x42\xe9\x8b\x41\x76\xc9\x13\x7a\x2e\x06\x71\x48\xc7\x50\xb4\xcd\x6f\xf8\x7d\x13\x33\x70\x63\xf4\x10\x74\xb4\xcd\x90\xbe\x88\xce\x60\xad\x4d\xb1\x71\x51\x43\xe7\x83\x1e\xce\x6d\x65\x61\xe8\x18\x0a\x00\x87\x94\xb1\x96\xa1\x38\xc9\xca\xd4\xc2\x34\xf2\x62\x1d\x1b\xb0\xe6\x9c\x58\xc8\xb0\x20\x4b\x31\xfa\x18\x2c\xa1\xf3\xbe\x9e\x61\x29\x81\x13\xca\x58\x03\x38\xb8\x02\x17\xb0\xde\xdc\xac\xdb\xf7\x38\x7f\x01\xd5\xf8\xc2\x98\x71\xf4\x65\x57\xb3\xc6\x3f\x49\x19\x43\x37\x55\xc2\xb2\x1c\x76\x87\x06\x34\x11\xe3\x82\x38\xb8\x02\x3a\xc1\xba\xdb\x3c\xaf\xcc\x04\xf2\xd6\x4e\xea\x29\xee\xf9\x78\x31\x32\xe5\x15\x5c\x20\xf2\xa9\xd8\x41\x23\x59\x2f\xe1\xd1\x64\x45\x3c\x13\x81\xb8\x7f\x14\xf8\x9f\x85\xcb\x5f\x1c\x00\x2d\x27\x4e\xfd\x52\xcd\x27\xf4\x28\x49\x27\xce\xe8\x2f\x0e\xba\x27\x94\x56\x9f\x95\xee\x7d\x63\xb9\x2f\x6f\x55\xd2\x29\xaa\x59\x5d\x63\xe3\xf1\x09\x3a\xa6\x12\xc4\x21\xbd\x4a\x2c\x75\x8f\x56\x73\xfa\xdd\x6a\xbd\x79\x10\xfa\xfa\x28\xab\x3a\x35\xb5\x2c\x7d\x50\xc5\xa7\xa5\xac\x6c\x3c\x8e\xc6\x97\x1a\xda\x3e\x06\x71\x70\x07\xee\x6d\x62\x93\x0b\xe8\xf6\xe8\x52\xd2\x5d\xd7\xf1\xe3\xb2\xe9\xfb\xac\xfd\xce\x68\xc1\xd1\x21\x58\xd8\x44\xe7\xaa\x91\xc6\xf7\x4b\x88\x71\x41\x1c\xd2\x73\x71\x45\x31\x39\xda\xfe\x73\x75\x31\xcb\xf0\x14\xaa\xd4\xfc\xfb\xef\x9d\xa4\x31\xaf\x3b\xbe\xb2\x43\xd7\x31\x54\xc9\x8e\xcf\x2f\x82\x9e\x8b\x01\x1c\xdc\x81\xba\xa6\x3c\xf6\x3f\xc5\x2a\x8f\x87\xc3\xd6\xc2\x83\xa7\x7f\xa5\x68\x45\x6c\x6e\x62\x8a\xea\x8a\x5e\x10\x20\xd4\xd8\x37\x55\xe1\x47\x38\x00\xe2\x10\x0e\x34\x00\xf2\x04\xa0\xb5\xdd\xa9\xdf\xa8\x58\xd1\xed\x54\x9c\x7c\xc2\x1c\x5f\xae\x34\x94\xc5\x98\x54\x92\x29\xd5\x38\x60\x79\x24\x5c\xd4\x32\xcf\xa0\x27\x24\xc4\x0d\x9d\xf7\x0f\xe2\xe0\x0e\xb4\xa3\xf2\x65\xdb\x0e\x6f\x57\xe6\x94\x9e\x2f\xe6\x0c\x48\x4e\x88\x22\xce\xba\xc3\xfb\x9a\x36\xab\x77\x92\xfb\xc2\x94\x1d\xda\x24\x62\x5c\x10\x07\x77\x80\xd6\x6b\xf1\xe9\xc3\x0d\xd3\xe8\xd2\x9b\xe7\xd5\xde\x1e\xe4\x58\xed\xd9\x8a\x68\xdc\x31\xd7\x08\xd8\x2c\x2b\x65\xf4\xcd\xda\xe0\x40\x8c\x0b\xe2\xe0\x0e\x3c\xeb\x99\x1a\xe7\xa2\x21\x55\x6c\x67\xdc\xf1\xb9\x65\x52\xf5\xcb\xc7\xde\xa3\x04\x13\x15\x85\xe5\xea\x6c\xd7\x0d\x65\xd6\xdb\xb4\x88\x71\x41\x1c\xdc\x81\xac\xb1\x19\xd5\x9b\xf1\x45\xbf\x0d\x64\x2d\xde\x1b\xee\x0a\xae\x56\xb5\x3b\x9c\xe7\xff\xe3\x5d\x42\xdd\x3b\x6d\x49\x72\xeb\xa3\x25\x94\x27\x00\x70\x50\x1d\x00\xe4\x09\x40\x0b\xed\xd3\x1c\xf8\x52\xec\x1c\x8d\x5e\x9d\xe8\xcd\x6b\xa1\xc4\xe0\x4e\x85\x3d\x5e\x95\x55\x31\xd6\xcf\x61\xfd\x12\xfd\xbb\x68\x0b\xae\xac\x43\x01\xd4\xef\x0b\xe0\xe0\x0e\x74\xa5\xed\xdf\xac\xec\xc8\xbd\x2b\xf1\x98\x59\x32\xb9\x9f\x66\x28\x16\x2d\xf7\xa9\xef\x43\x42\xd7\xe3\xad\xf6\xb7\xbc\x7b\x04\xd0\x99\xf7\x20\x0e\xee\x40\xaa\x93\xad\xdd\xf8\xd6\x4b\x4d\x81\x09\x95\xa4\x91\x16\x1e\x0e\xf9\xc6\x9c\x84\x87\x49\xdd\xd8\xe1\x41\x11\xbb\xfd\x8c\xe7\xa1\x7b\x17\x88\x83\x3b\xe0\xa7\x8f\x86\xdb\xb3\xe2\xa6\x9a\xf0\x47\xf7\x0f\x5e\x8a\x13\xef\x39\xc2\x9a\x85\x22\xd4\xf3\x96\x77\x9d\x98\x37\x77\x48\x96\xd6\x10\xe3\x82\x38\xb8\x03\x44\x13\x59\xef\x71\xa9\x99\xc6\x79\x45\x85\xb7\x27\xe7\xdc\x5c\x76\x50\x8e\x8b\x54\xd6\xe2\x5d\xc4\xd2\x3f\x7c\x3b\xb0\xdd\x88\x42\x38\x00\xe2\xa0\x3a\x00\xc8\x13\x80\x9e\x7a\x4e\x73\x80\x50\xbf\x36\x3e\x32\xdb\x39\x2c\x90\xc6\x8d\x42\xee\xcf\xfb\x18\x09\x23\xea\xa0\x73\x5e\x1c\x7f\xe8\x7a\x51\x44\x8b\x5f\x56\x41\xaf\x93\x41\x1c\xdc\x01\x7c\xb5\x52\xce\xd6\x0f\xc7\xca\x53\x05\xd1\x05\x78\x8e\x87\x09\x2d\xde\xf7\x50\xbb\x9e\xa1\x17\xe4\xdc\x2c\x1e\xc6\x7c\xeb\x0a\xb5\x16\x81\x38\xa4\xb3\x51\x30\x58\xec\x68\xaa\x9e\xab\xf0\x62\x11\x12\x59\x4c\xd2\xad\x1e\x3c\xb2\x89\x51\x60\xa4\x7d\xaa\x40\xcc\x2f\x41\xec\xe3\x7a\x02\x9d\x8d\x02\xe0\xe0\x0e\x74\xbc\xf9\x79\x41\xba\x02\x63\x7b\xf1\xf6\x97\xef\x18\xe6\x03\x33\x15\x79\x23\x3c\x7e\x2e\xa3\x39\xc9\x54\x65\xf1\x69\x71\xdb\x0b\x88\x71\x41\x1c\xdc\x01\x37\x73\x53\x25\xd9\x0a\xd9\x01\xfc\xbd\xe7\x2a\xa6\x4f\x1e\x5d\x9c\x37\x7d\xf8\xf6\xb9\xda\xcf\xf9\x9f\xc2\xd7\x55\x78\xa7\xd5\x4d\xa0\x5e\x72\x00\x07\xd5\x01\x40\x9e\x00\xf4\x08\x7a\x9a\x03\xa4\xcd\xdd\xbd\x6a\x72\x36\x18\xfc\x8f\x66\x44\xe4\x6e\xaa\x26\x4d\xce\x60\xc7\x56\x30\x18\x1d\xa2\x97\x1f\xb6\xdc\x7f\x25\x03\xbd\xd3\x00\x71\x70\x07\xba\xeb\x12\x7b\x87\xb1\xe3\xf1\x3e\xb2\xa6\x05\x17\x60\x3a\xee\xa4\x74\x68\x14\xb1\xd0\x2a\x16\x18\x14\x59\x6e\xf9\x0b\xa5\x30\x21\xc6\x05\x71\x48\xaf\x93\x79\x5d\xb2\x32\x46\x5f\xe0\x09\x05\x8b\x47\x9b\xe5\xc5\xe9\x67\x31\x2a\xb5\xea\x11\x19\xb2\x07\xbe\x23\xe7\x7e\xbc\x71\x0c\x5d\xaf\x20\x0e\xee\x00\xce\x47\x06\xfa\xb7\x44\x6f\x6e\xb1\x90\x5d\xcc\x1b\x40\xc3\xab\xc6\x3d\xef\x23\xba\x3b\x36\x7e\xc1\x63\x77\xc7\xd3\x77\x4e\xae\x1c\x31\x2e\x88\x83\x3b\xc0\x52\x45\x69\xf3\xe2\x01\xa5\xb4\xfd\x4f\x8a\x47\x11\xed\xed\x11\x18\x33\x8d\x2e\xf7\x08\xbb\x87\xac\x72\x08\xd7\xa6\x53\xad\x85\x10\x0e\x80\x38\xa8\x0e\x80\xf2\x04\xa0\x4d\xc5\x7f\xf2\x04\xb2\xc8\x79\x82\xc1\x38\x8c\x7b\xf8\x36\x53\xb9\xc7\x91\xdb\x52\x27\x44\x5d\x73\xd6\xae\xf3\x01\xf9\x07\xaa\x93\xb5\x33\xbd\x4f\x65\xaf\xb8\xc9\x9d\xc9\xc6\x09\x72\x9e\xa0\x3a\x87\xd9\x86\xc9\xe1\xfb\xdd\x0c\x39\xf5\xc7\xf1\xd8\x5e\xed\x94\x35\x25\xbf\xeb\x70\xd8\xd7\xbb\x8b\x22\x36\xc9\x9d\x36\x56\xcf\x64\x9b\x08\x39\x4f\x70\x20\xfe\xea\x08\x8d\xa6\xb7\xe2\x5c\x34\xde\xf7\xf0\xa9\x2d\x4b\x34\x33\xaf\x42\xe7\x46\xd4\xf6\x73\x72\x22\x6f\x75\x7a\x86\x05\xcf\x64\xb6\xc8\x79\x02\x81\x1f\xb3\x46\xad\x33\xfe\xc5\x1f\x71\x6e\x8b\xe4\x50\x2b\x6a\xf8\x3c\x60\x9f\x26\xfc\xf0\xd4\x6f\x30\x53\xd9\xcc\xed\xa9\xdc\xd9\x7c\x16\x01\x39\x4f\x10\xfd\xb2\xfc\xc3\x39\xa2\x70\xc2\xf9\x91\xfb\xfd\xef\x9a\x4b\x3f\xa7\xec\x98\xfc\x59\x56\xe4\xa9\xbb\xfb\xe0\xf8\x45\xa8\xb9\xe1\x99\x7c\xa2\xb4\x01\x39\x4f\xa0\x35\xfc\x83\x4c\xc1\x35\x39\x71\x1a\x6f\xb6\xd6\x8b\xa5\x1e\x7d\xc5\x8c\x8a\xd4\x68\xbc\x26\x87\xe3\xca\xf9\x0a\x83\xc6\xd9\x33\x78\x4d\x1c\xad\x28\x8b\x9c\x27\x48\xbb\xb1\x7a\x8e\xe3\x9c\xd9\x9f\xf3\x87\x5c\x53\xae\x62\xf7\xb1\x62\xa5\xf9\x3a\xb6\xc4\xbe\x27\xc4\x1f\xd6\xd1\x2f\xbf\x7a\x74\x26\x2f\xc5\x1b\x90\xf3\x04\x39\x3e\xe3\xf4\x8b\xca\x23\x3d\xed\x13\x66\x2b\x5e\x44\x6b\x21\xb3\x99\x9f\xb3\x22\x94\x34\xc8\xef\xe5\x1d\x17\x1f\x57\xc6\xfc\x3a\xb3\x2d\x40\xd0\x95\x7a\x5a\xa1\x17\x34\xf6\x19\x9d\x5a\x5f\xe3\x8c\xf6\x20\x1f\xc8\x64\x62\x2f\x20\x0c\xaf\xa6\xf5\xe0\x61\xd5\xff\x66\x22\xd2\x26\xa7\x4b\x7f\x17\x51\xe0\x40\x1c\xbc\xd0\x5b\xb8\xbc\xf0\xde\xf7\xaf\x8e\xe5\x73\x78\xc3\xf2\xd2\xa3\x2a\x60\xd6\xfa\x8f\x42\xa1\xfb\x41\xa0\x58\x9d\xfd\xd5\xaa\x80\x9c\x58\xc4\xb8\x20\x0e\x5e\xe8\x2f\x95\x6f\xbf\x65\xa5\x33\xf5\xa8\xf1\xea\xe2\x39\x57\x9c\x70\xf3\x0e\x5b\xa1\x8a\xb2\x8c\xfb\xfa\xcd\x88\xdb\xa5\xdc\xeb\x5e\xd0\x81\x70\x20\x0e\x69\xd1\x8f\x23\x2a\xb5\x7e\x41\xab\x6a\x4f\xcf\xe6\x29\x6e\x6d\x6b\xbd\xf7\x70\x6e\xea\xa1\xae\x78\x8c\xc9\xad\xc6\xed\x52\xbc\x28\xa8\x97\x16\xc4\xc1\x0b\x7d\xad\xbf\xe5\x60\xdb\xcd\xaf\x26\x52\xc7\xba\xac\x1f\x48\xf0\x4d\xa6\x92\xd4\x73\x19\x2d\xc3\xf4\x3e\xdc\xc2\xbe\x19\xd9\x35\x1f\x87\x28\xf4\x20\x0e\xba\xd9\x03\xf2\x04\xa0\xb2\x79\x9a\x03\x1f\xfc\x4b\x9e\xbb\xc7\xb3\x86\x9b\xe4\x3e\x39\xc9\xec\xe4\x4c\xec\x0a\x29\x99\x97\x66\x3a\xbf\x8c\xc9\x87\xef\x55\xc3\x55\xd2\x8e\x98\x3b\x88\x83\x3b\xd0\x61\xc3\x89\xc2\x70\x81\xa1\xc2\x73\x82\x6c\xd0\x91\x6b\xb7\xa8\xf1\x3b\x49\xeb\xea\x67\x5b\xbb\x7d\x56\x99\xf2\xc0\x24\xe1\x08\x68\x01\x05\xe0\xe0\x0e\x10\x93\x35\x93\x37\x5f\x63\xbc\xa2\x26\x45\x77\x57\x29\xc5\x50\xf1\xd7\x94\xca\xf5\x06\x51\xae\xc2\xac\x8a\xef\xd2\x72\x0f\x9f\x41\x07\x3f\x80\x38\xb8\x03\xaf\x37\xe7\xe2\x6b\x4a\x5b\xb3\x1e\x1c\xb4\x25\xa1\x78\x77\x78\x31\x15\xde\xe6\x3b\xfc\x4d\xbf\x4d\x4b\x7c\xa2\xc5\xf1\x9d\xfa\x36\x62\x5c\x10\x07\x77\xc0\x67\x3f\xd8\x69\xcd\x8c\x7d\xb9\x23\xb9\x3f\x2f\xe9\xa0\xe9\xae\xd1\x25\x59\xd1\xa5\xb0\x90\x7b\xc7\x51\x0c\x12\xa3\x4f\xbf\x40\xbd\xe4\x20\x0e\xba\xd9\x03\xf2\x04\xa0\x7b\xd8\x69\x0e\x48\x4f\xee\xbb\x09\x18\x5b\xf3\xeb\xef\xdd\xe2\xde\xa1\x95\xf3\xdb\x36\xbb\x25\x33\x50\x4a\xd9\x65\xf1\xed\x47\xc5\x2b\x71\x8c\x0f\x88\xb9\x83\x38\xb8\x03\xa4\x7e\x2f\x85\x7f\xe9\x76\xf9\x49\xb3\x60\x2e\xdc\x9b\x61\x34\xf7\xab\x7e\x47\x11\x19\x89\x67\xf7\x96\x89\xc0\x33\x6c\x9a\x01\x3a\xff\x05\xc4\xc1\x1d\x98\x0b\x7c\x8b\xad\x23\xc1\x36\x18\xa1\xaf\xe4\x2d\xd3\xe8\xee\xef\x4d\x6e\x44\x88\xcf\xdf\x7d\xcc\x5b\xff\xed\xbc\x74\xc8\x71\x2e\x62\x5c\x10\x07\x77\x60\x43\xbf\xe5\x89\xce\xf4\x39\x1a\x8e\x78\xe7\x34\xbc\x27\x2e\x2b\xc4\x3e\xef\x1e\xf1\xbf\x65\x14\x51\xfc\x64\xf6\xd2\xb1\x43\x0e\x3a\x8b\x16\xc4\xc1\x1d\xc0\xdd\x24\xb5\xcc\xd9\x54\xcc\xce\xcc\xa6\xed\x76\x56\x9f\x5b\x6d\x6c\x9e\x4c\xb7\x70\x74\xf5\x26\xb6\xf0\x74\x55\x98\x6a\x5f\x44\x38\x00\xe2\xa0\x3a\x00\xc8\x13\x80\x16\x14\xa7\x39\xc0\xa4\xfc\xab\x9a\x59\x61\x93\x96\xe6\xb9\x3d\x7f\xca\x34\x7f\xfe\xa8\x77\x40\x40\x58\xdf\x07\x25\xea\xfb\x76\x5a\x7f\x70\xde\x74\x22\xe6\x0e\xe2\xe0\x0e\xcc\x1e\x6e\x53\x9a\xbf\xe6\xb1\xb6\xf5\xfb\xe1\xa1\x3d\x84\x6e\x88\x27\xdb\xe9\xe6\x42\x7d\x8b\x80\xba\x44\x24\x47\x56\xf7\x37\xd4\x47\x0c\xe2\xe0\x0e\xd0\x64\xcf\x5f\xf8\xd9\x63\x7c\x8d\x89\xb0\x73\x79\xf9\xc0\x06\x57\x22\xf9\x19\x9f\x0c\xd1\xd6\x63\xdb\x40\xae\x3d\x26\x97\x48\x3d\xc4\xb8\x20\x0e\xee\x80\xec\xb3\xee\xdb\xb5\x16\xfd\x02\x47\x9c\x2f\xd1\x4a\x67\x13\xec\xc2\x88\x95\x93\x14\x55\xf1\x0b\x3f\xc9\xd1\x91\x91\x7c\x0f\x84\xbe\x55\x0c\xe2\xe0\x0e\xf4\xbb\xe0\x24\x3f\x2c\xcb\xd4\xd4\x22\x97\x0c\x9a\x72\xac\x1b\xdc\x8b\x2e\xbd\x89\x77\xee\x84\x94\x21\xb0\xf6\x52\xfd\x5b\xb6\x97\x08\x07\x40\x1c\x54\x07\x00\x79\x02\xd0\xea\xee\x34\x07\x88\x69\x6e\xd0\xfe\xba\x45\x4a\xf7\x5a\x38\x9b\xc2\xaa\xfd\xc8\x92\x52\x3b\xfe\xe0\xf2\xab\x84\xe7\x0c\x02\xe3\x58\x9d\xd1\x32\x65\x50\x6d\x05\x70\x48\x0f\xff\xb8\x1a\xcd\xcf\xa6\xd4\xd8\x1e\x0f\x15\x47\x06\x92\xff\xc8\xe8\xcb\x4d\x37\x21\x93\xa8\x57\xa5\x33\xd6\xa0\x16\x6a\xba\xae\x04\x3d\xfc\x03\x38\xb8\x03\x2f\x6e\x72\x8f\x72\xb2\x7a\xc6\x10\xf8\x60\xcf\x49\x76\x6d\x9e\x8f\x66\xbf\x25\x65\x76\xb2\x97\x6e\x52\x84\x59\x58\x12\x28\x0b\x1d\x56\x02\xe2\xe0\x0e\x38\xd1\x3f\xf6\xd4\xd8\xa8\xc7\x6a\x74\xd5\xdc\x1f\xf8\xa0\x40\x8c\x67\x63\x33\x1e\xd9\xf7\x91\x3a\xfd\xed\xd0\x93\x4f\xd9\x75\x16\x50\xdf\x33\x80\x83\x3b\x60\x5f\x33\x7f\x6d\xa9\x4e\x44\x6e\xce\x90\x30\x87\xd2\xe2\x9a\xdf\x17\x83\xe1\x2f\xfa\x22\xcd\x27\xfb\x5b\xa2\x2d\xcd\xe4\x8e\xd0\x7a\x00\xc4\x41\x75\x00\x90\x27\x00\x2d\xb5\x4f\x73\x60\xcd\x7e\xf3\x63\xe6\xa2\x08\xca\x78\xec\xfb\x19\x93\x4f\xcc\x5f\xd1\x22\x5a\xae\xd3\x66\x24\x84\x5f\x9f\xf6\xb3\xfc\x2c\xc4\x23\x80\x98\x3b\x88\x83\x3b\x30\xd1\xa4\x75\x78\x20\x59\x62\x12\xb0\xe6\xa4\xc7\xf2\x52\x7f\x87\x02\x75\x21\xee\xd5\xb9\x2d\xac\x58\x4a\xc6\xa2\xea\x47\xee\xd0\x07\xa0\x41\x1c\xdc\x81\xa7\xe9\x5b\x35\xcd\xb7\xf6\x12\x99\xcb\x48\x26\x0c\x33\x6e\x78\x56\x9a\xfe\x3e\x98\xa5\x6e\xf0\xe5\x9f\xf8\xd4\x38\x36\x55\x13\x8a\x18\x17\xc4\xc1\x1d\x08\xbd\x1d\x9b\x19\xf1\x45\xbd\x4b\xc9\x61\x37\xa8\xd4\x24\x91\x88\xa4\xd5\xe4\xa1\xe4\xef\x9b\xe3\xb7\x6f\x12\x8b\xdd\x91\xf4\x80\xce\x51\x07\x71\x70\x07\x54\x35\x7a\x4e\x6e\xff\xf1\xa5\xff\x82\xd2\x6b\x3e\x2f\x44\x8d\xc3\xa3\x58\x44\x27\x5d\x82\x43\x9c\x59\xd1\xfe\x5e\x62\x04\x9d\x1a\xe1\x00\x88\x83\xea\x00\x20\x4f\x00\x7a\xee\x39\xf5\x5e\xf0\x06\xb7\x43\xcf\x03\x37\xa9\x31\xa1\xeb\xc5\xf5\x8e\x85\xb4\x4f\x75\xa2\x0d\xce\xe9\x5c\xd6\x8a\x44\x81\x83\xe5\xf2\x84\xf4\xd0\xbd\x00\xc0\xc1\x1d\xf0\x53\xb1\x7b\x60\xda\x77\xeb\xb7\x96\x79\xee\x1e\x1e\xdf\x5a\x7a\x11\x47\x36\x06\x8e\xf7\xb2\x31\x15\x9b\xbc\xbd\xc0\x8b\x08\x03\x68\x63\x15\xc0\xc1\x1d\xf8\xf1\xd6\xa6\x62\xb2\x9f\xe3\x42\x87\xb8\x00\x85\x31\xab\x50\x71\xa4\xe9\xb5\x86\xc2\x2e\x23\xd4\x5b\xbc\xba\x2f\x4f\x94\x27\xa0\xfc\x03\x88\x83\x3b\x50\xa0\x4f\xf8\x55\x79\x52\x4b\xd0\x95\x19\xbd\x84\xa7\x73\x21\x3b\x87\xf2\xae\xd0\xe1\x5b\x8e\x38\x19\xff\xac\x6d\xb2\xd5\x0b\xd0\x37\xb6\x40\x1c\xdc\x81\x52\x2e\x0a\xb9\x96\xce\xbb\xcf\x98\x50\xd0\x1e\x5f\x6e\x56\xc3\xad\xce\xb3\x38\xd6\xe2\x8d\x99\x92\x1e\xf6\x7a\xf9\xb5\x3f\x3a\x0b\xe1\x00\x88\x83\xea\x00\x20\x4f\x00\x7a\x08\x3d\xcd\x81\x41\xc2\x2a\xb9\xc0\xcc\x28\xb4\x0c\xf2\xd6\xed\x72\x2a\x1a\x0e\xe1\x40\x51\xfd\x90\x1b\x9d\xb8\x17\xf3\xda\x31\x4b\xfc\xcb\x70\x10\x73\x07\x71\x70\x07\xf8\x7e\x98\x8f\x54\x2a\x98\xe1\x0f\xab\x7d\x6a\xd2\x3b\x61\xd4\x23\x14\x6f\x4c\xe2\x7a\xd9\x9b\xf8\x7a\x30\xf3\x56\x68\x4d\x24\x2f\x62\x5c\x10\x87\x94\x2b\x0a\x22\x25\x88\xcc\xfa\x62\x9e\x56\x91\x91\x56\x34\x20\xea\x44\xe7\x3a\x2f\x29\x88\x9d\x47\x65\x83\xd6\x1c\x96\x5f\xe3\x0b\x1d\x8c\x07\xe2\x90\x72\xc6\xa6\x1c\x77\xaf\x3c\x6b\x55\x16\x28\xa0\xb9\x98\xed\x6f\x92\x1b\x79\x07\xe5\x24\xb4\xef\xe3\x25\xba\x81\x28\xc3\xf0\x3e\x01\xe8\x18\x4b\x10\x07\x77\xe0\x6a\xfc\x1b\x0d\xf7\x70\xdb\xbc\x5f\x74\x9e\x1b\xd1\xf6\x68\x19\x22\xcd\x83\x37\xaa\x36\xae\xa7\xe6\x96\x9c\x93\x7b\x3f\x7e\x17\x6a\x98\x06\x71\x50\x1d\x00\xe5\x09\x40\xed\x82\xff\xe4\x09\x64\x91\xf3\x04\x0c\xee\xe3\x73\x66\xb2\x9b\xd6\xbc\x82\x63\x0d\x57\xe4\x4a\xeb\xcd\x0b\xbe\x4a\x46\x38\xab\x96\x98\xcd\xde\xc1\xcb\x60\x28\x7c\x7c\x26\x5b\x27\xc8\x79\x82\x15\x1b\x9c\xe5\x37\x1e\x32\x8c\xb8\x69\x66\x8d\xfa\x8a\x2c\xa8\x16\xf3\x83\x1e\x15\xef\x38\x44\x0f\x87\x0c\x64\xba\xc7\x69\xae\x9d\xd9\xd6\x09\x68\x7e\xa7\x9e\xbb\x94\x74\x7d\xd0\x4a\xa4\xfd\xc3\x75\x6d\x12\x0a\xbe\xee\x3f\x11\xf1\xb9\x55\xd8\x98\x5f\x28\x6e\x3d\x3f\x47\x44\x57\x9e\xf7\x86\x07\x7a\xb7\x0d\xe0\xe0\x97\xc7\xd8\x37\x93\x6d\xdb\x0c\xcc\x47\x37\xa9\xd5\x68\xc5\xc4\xc6\x39\xcd\x88\x92\x8b\x30\x9f\x29\x45\x63\xc7\x12\xb7\x61\x66\xdf\x85\xde\xbf\x80\x38\xa4\xa3\x18\xb0\xfc\x7b\x0d\x93\x09\x56\x08\xa7\xcb\xbf\x4c\x70\x60\xeb\xef\x5b\xdc\x9e\x9e\x8d\x5f\x24\x49\xf6\xcb\xdc\x3f\x29\x99\x75\x80\x8e\x62\x00\x70\xf0\xcb\x83\x7e\x21\x05\xbb\x0f\xe5\xc9\x2d\x09\x67\xa9\xc7\xe6\x41\x09\xdf\x1e\x14\x76\x4c\xed\x48\xca\x2f\x27\xf2\x86\xd9\xbb\x30\xd0\x9b\x22\xc6\x05\x71\xf0\xcb\x83\x50\xe3\x89\xa6\x4f\x8a\x9b\x2d\x47\x4b\x20\x21\xe5\x9d\x00\xaa\x7e\x46\x86\x9c\x88\xbe\x97\x76\x06\x6e\xce\x03\xae\xec\xab\x6f\x10\x97\x07\x88\x83\x4a\x24\x20\x4f\x00\x92\xed\x34\x07\xae\x50\xbc\x3c\x9e\xa3\xe7\xf3\xc2\x11\xc7\x23\xf9\xf2\xc1\x6c\xf4\x24\x88\x58\x5a\xf5\x7b\x96\x14\xb3\x1f\x47\xf2\x20\x76\x15\xf4\x49\x43\x10\x07\x77\x40\x79\x20\xd3\x6e\x4e\x09\x43\xf3\xdd\x57\xa5\xcb\xf7\x9d\x4b\x12\x6c\x75\x03\x56\x30\xda\x28\x95\x2b\x56\x14\x0c\x99\xd1\xce\xed\x20\xc6\x05\x71\x70\x07\xc6\x1b\x0b\x8c\x0f\x07\xb4\xc2\x55\xc7\xb8\x14\xa9\xee\x4b\xfe\xec\x9c\xef\x31\x7f\xa1\x1c\x51\xd7\x88\x49\xe5\x33\x60\x7f\xed\x00\x31\x2e\x88\x83\x3b\x10\x6b\x78\xeb\xda\xa6\x9b\xab\xbc\x7a\xb5\xb5\xf3\x55\x82\x79\x2d\x9b\xd0\x89\x8a\xfa\x20\xb4\x26\xb2\x89\x0f\x97\x44\x50\x7c\xe9\x10\xe3\x82\x38\xb8\x03\x0e\xbe\x01\x37\x6e\xd1\x3c\x23\xad\x14\x4e\x5f\xcb\x29\x65\xcd\x8e\x8d\xc1\x92\x0f\xf7\xfc\x59\x78\xf8\xe7\xaa\xad\x44\xc6\x39\x41\x84\x03\x20\x0e\x2a\x91\x80\x3c\x01\xa8\x17\xfd\xf4\x3c\x81\x3d\x4b\xfb\x90\xa5\xfb\xb9\x14\x94\xfd\xeb\xa4\x82\x8f\xae\x94\x5c\x19\xd0\x35\xb8\x76\xc0\x64\xf5\xf3\x52\x59\xd0\x82\xcd\x98\x1e\xa2\x37\x1f\xc4\x21\xe7\x09\xe6\xb6\x23\x83\x7f\x8e\x5c\x2a\xf5\x73\xba\xc1\xbc\x7f\x55\x59\x73\xa9\x4e\x53\x26\x87\x3f\x1d\x57\x9d\x75\x61\x81\xa5\x35\x35\x06\x31\x32\x88\x43\xce\x13\xd8\xf1\xa8\xaf\x95\x3d\x4c\x7e\xb0\x4c\x4e\x5d\xd7\xae\xd8\x39\x79\xf3\xb3\x6e\xfa\x94\xba\xc3\x2a\xed\x60\x12\x59\xbc\x3f\xdb\x03\xc4\xc8\x20\xee\x3f\x79\x82\xff\x72\x2c\x49\x55\xba\x4b\xc4\xef\x29\x8f\xb8\xe7\x41\x54\xe8\x3b\x3f\x6f\x9a\xb2\x9b\x97\xb7\xd8\x3d\x76\x7e\x6a\x48\xad\xae\x09\x65\x92\x43\x79\x82\xeb\x6b\xa2\x5f\x9b\x3b\xb2\xe3\x83\xe3\xd9\xfd\xa6\x0f\x2d\x42\x4a\x48\x16\xde\xbf\xf2\xa6\xe5\xfc\xda\x95\x15\xf3\x96\x94\xfc\xd1\xbf\xf3\x04\x03\xf5\x9b\xac\xc2\xaf\xe4\x04\x18\x22\x53\x19\x26\xb8\x71\x2a\xae\xa4\xdf\xb9\xa8\xd0\xa1\x66\x9e\xaf\xda\x13\xa6\x6d\x7a\xa7\xe4\xdf\x4b\xd7\x1d\x66\x89\x4e\xc5\x72\x56\x52\x85\x6f\xfb\xbf\xf6\x4d\x2e\x31\xe4\x08\x10\x39\xc5\x76\xf0\x93\x0a\x0d\xb1\xd2\xb5\xff\xb8\x2b\x2b\x4b\xc3\x42\xc3\xf2\xbf\x29\x4f\x00\x9a\xdc\x03\x74\x54\x52\x58\x9e\xa0\x85\x3e\x91\x36\x66\xde\x34\x6d\x36\xae\x4c\x33\x68\x15\x8d\x97\xdd\x99\x95\xeb\x53\x76\x9e\xb1\xe6\xd0\x13\xbe\xaf\x5f\x2e\x06\xfc\x0b\x4d\x08\x63\xef\xb1\x4b\x35\xa3\x96\x77\xeb\x09\x52\xf0\x58\x32\xd6\x67\x58\xd9\x5d\x14\xc9\x3b\x57\xfd\xa2\x62\x42\x6d\xe9\x6b\xdc\xbf\xd0\x27\x13\xa4\x69\x2f\x0f\xf4\xaa\xd4\xef\xc4\x91\x33\x2e\x74\xda\xdd\x68\xd0\x77\x13\xda\x50\x34\x0b\x5a\xe8\x93\x4f\x08\xf4\x62\x0e\x9a\xc1\xfe\x7f\xfb\xf9\x7f\xf2\x04\x41\x48\x79\x82\xeb\x38\x49\x04\x97\x66\x24\x0c\x48\x8c\x3f\x0f\x85\x9a\x0f\x36\x2b\xd9\xf4\x61\x90\x31\x12\x93\x3c\x3a\x44\x19\xf6\xd6\xb9\x5b\x77\x16\x0b\x09\x94\x8b\x48\xaf\xf5\x44\xe9\x0c\x48\x42\xc2\x7f\x1c\x92\xd2\x09\xdd\x8c\x60\x5a\x0e\x90\xb6\xd5\xab\xaa\xe3\x2c\x7a\xb9\x37\xaa\x3d\xc0\xb5\x77\xfc\xe0\x2c\x7e\x36\x08\x39\x50\xe0\x4b\xb9\x13\x71\xd5\x4a\xc7\x04\xf3\xba\x02\xdb\xc3\x4a\x97\x3b\x52\x65\x92\xac\x2f\xe6\xcc\xa2\xd7\xd7\x02\xb8\xb4\xa3\xe9\x57\xce\x64\xb6\x57\x91\x7e\xf6\x93\x90\xce\xc3\x84\xb0\x89\x54\x51\x3c\x8a\xec\xf9\x4b\xa2\xe2\x3a\xdc\xa2\x53\xac\xcb\x84\x1e\x89\x17\x2b\x94\x12\x3d\x36\x08\xce\x64\xb6\xc8\x81\x82\x3e\xf5\x74\xbf\x85\x47\xd1\xb7\xca\xe5\x8c\x14\xde\xe2\x56\x24\x8d\x4f\x4e\x7e\xb8\x97\x98\xfb\x8c\x49\xb6\x76\x27\x80\xbd\xc8\xf8\x4c\x66\x1b\x88\xf4\xb3\x9f\x05\x3f\xbc\xf5\xf9\x1c\x30\xef\xc5\x33\x4a\xe4\xda\xa1\x61\xdd\x84\xfd\x9a\x25\xb8\x5d\xbb\xad\x62\x48\xaa\x58\xd4\x3b\xc2\xee\x4c\x66\x8b\x1c\x28\xb0\x27\xb3\x4e\x37\x7e\xd7\xed\xe0\x55\xbf\xf7\x5e\xb2\x6d\xe0\x95\x36\xbe\xaa\x93\xbf\x78\x4f\xcc\xd5\xb5\x87\x7d\x96\xba\x35\x51\x67\x32\xdb\x0a\xa4\x9f\xc5\xae\x5f\x48\x10\x7c\x72\x54\xd6\x4d\xc0\x5a\xf9\xa2\x3e\x24\xcf\x3f\xcb\x9e\x6b\x44\x91\x37\xfa\xaa\xe9\xce\xda\x85\xec\x4b\x0f\xcf\x6c\x49\x0c\xba\x52\x4f\x5b\x0e\x1d\xaf\xb0\xcf\x52\xd6\xf0\xb6\x44\xd3\x7f\xa3\x59\x15\x37\x94\xb9\xa5\x38\xf7\xee\x55\x82\x11\x9a\xef\x7c\xef\xd8\x93\x92\x1b\x43\x88\x65\x00\x88\x83\x2f\x87\x0c\x2e\x57\x96\x29\x74\x6a\x5c\x5a\x36\xc7\x6a\x7b\xf7\x50\xe4\xc2\x13\x52\x1f\x3f\x0b\x6e\x7a\xf3\xea\xb9\x7b\x17\x98\x32\x8a\xf1\x10\xe3\x82\x38\xf8\x72\x88\xd7\x1b\x7b\x4a\x7d\x89\xec\xa4\xf5\x63\x0a\x46\xea\xf6\xe1\x17\x69\x8b\x5e\x34\x9e\x71\x37\x83\xaf\xfd\x7b\x6f\xd0\x66\xf6\xa8\xa1\x16\x65\x00\x07\x5f\x0e\x5d\xa3\xed\xd9\x5d\x1f\xfa\xb4\x4f\xf2\x92\xc1\xa8\xfc\x4b\x08\xde\xd6\x12\xb5\x4e\xdd\x9f\xaa\x60\x52\xc1\xb5\x44\x66\x4e\x43\x68\xa9\x0d\xe2\x42\xe5\xff\x3b\xaa\xa7\x3c\xa0\x21\xc0\x88\xee\x58\x2b\xdd\x74\xa5\x44\x8c\xae\xf1\x3b\xe3\xc1\x07\x1f\xf2\x7d\x7f\xb6\x42\x6c\xce\x8f\xfc\x26\x8a\xad\x88\x6e\x72\x10\x17\x2a\xcf\x84\xf2\x9f\xd3\xe9\xff\x1e\x28\x00\x55\xcd\xd3\x14\xa0\xb5\x14\x8b\xe5\x7e\xf1\xde\x7e\xf9\xfc\xc2\x3e\xc9\xf9\x3d\xfd\x6a\x36\xe5\xf1\xc1\xf1\x90\xcc\xd4\x74\x13\x3e\x7b\xac\x84\x64\xa8\x2b\x13\xc0\xc1\x15\x40\x55\x4e\x50\x51\x50\x96\xa2\xc2\xa2\x88\xf0\x6c\x53\x21\xb7\x22\xff\x16\xe7\x22\x4a\xf2\x8e\x27\x5e\xd6\x55\xd4\xfa\x92\x2a\x3e\xd4\xa1\x0c\xe0\xe0\x0a\x68\x8b\xb4\x2b\x67\xed\xff\x9a\xda\xdd\xc3\x5f\x66\x65\x79\xdd\x8d\x2b\xf4\x5c\xfa\x04\x63\x35\xf5\xe0\xbe\x67\x7f\x5f\xa0\x28\xf4\x51\x66\x10\x07\x57\xa0\x18\xef\xd5\x55\x54\x8c\x70\x43\x35\x52\x22\x4c\x31\xbf\x58\x74\xcf\xa9\xa7\xcf\x39\xc5\xe9\x58\xf8\xe2\x66\x3e\xab\x5d\x57\x1c\x44\x8c\x0b\xe2\xe0\x0a\xc4\x35\x5c\x1a\xcb\x78\xeb\xf1\xfa\x77\xc4\x05\x53\x19\x63\xa5\xbc\x2e\x76\x9b\x3a\x2a\xb5\xe1\x05\xe9\xf7\x52\x77\x9e\xaf\x2f\x8b\x20\x56\xc4\x20\xee\x1f\x05\xfe\xe7\x66\xf9\x17\x07\x40\xb7\xb0\xd3\x1c\xb0\x3d\x16\xbf\xa5\xe5\xbc\x84\x81\xed\xf4\x30\x8e\xcd\xf9\x7b\xbb\x56\xaa\xa8\xfa\x61\xae\x53\xd4\x97\x24\xd1\x59\x55\x3f\x49\x0c\xc4\xdc\x41\x1c\xdc\x81\xd7\x15\x3d\x87\x91\x65\x5e\xd9\x69\xb4\x01\x0b\x45\xd7\xa5\xfb\x13\x4c\x46\x27\x7c\x98\x82\x8b\x56\xb8\x32\xef\xb2\xfb\x3a\x43\x7f\x53\x10\x07\x77\xa0\xda\xb0\x76\x08\x7f\xf0\xb0\x23\xf2\xe1\xda\x56\xcb\xf3\xa7\xcf\x0e\xde\xbb\xfd\x10\x1d\xed\xa2\xdb\x9b\xd9\x41\xe3\xc4\x6f\x77\x42\x8c\x0b\xe2\x90\x5e\x26\x4a\x49\x46\x5c\x98\x33\xcc\x40\xc3\x4d\x38\x78\x26\x56\xc7\xe1\x36\xbc\xf6\x42\x35\xfd\x37\x27\xfb\xad\xd1\x9b\x3c\xe9\x9c\xd0\x86\x14\x88\x83\x3b\x20\x20\xc9\x7c\xfc\x73\x25\x51\xb1\x8a\xa0\xa7\xcc\x8a\xf5\x27\x23\xc1\xf6\xf5\x5f\x6c\xbe\x9b\x06\xe3\xeb\x72\xe4\xf6\x36\xe7\xf6\x10\x0e\x80\x38\x84\x03\x41\x80\x44\x01\x68\x3d\x71\x9a\x03\x86\x8e\x06\x06\x6c\x97\x2e\x0c\x11\x09\x61\x64\x6b\x34\x4a\x3b\xa6\x08\xbc\xbf\x2e\xc3\xfc\xbe\xab\x30\x41\xf4\x37\x66\xc9\x0d\x5d\xc4\xdc\x41\x1c\xdc\x01\xd6\x76\x2f\xcf\x99\x2c\xf2\x79\x73\xc7\xe0\x49\xaf\xa4\x75\x5b\x45\xfc\x24\x9e\x87\x96\x38\x78\xfc\xdf\x52\xbd\x1a\x3b\x98\x20\x07\x40\x1c\xdc\x01\x3e\x25\xc7\x67\xdc\x27\x4a\xa8\xdf\x04\x3b\x2f\xba\x1e\x2c\xc5\xd1\x33\x3c\x24\xaf\x49\x6b\xb5\xf2\x5b\x32\xa7\xfa\xc9\x9c\xc0\x0e\x6d\x4a\x02\x38\xb8\x03\xb9\x7d\xc4\x2f\xa7\x71\x46\x68\x76\xd2\x62\x83\x27\x4b\xb2\x8e\xb4\xe7\x5d\x31\xe4\x3a\x98\x8c\xd6\xb3\x82\x26\x2d\x92\x74\xbf\x41\x69\x15\x00\x07\x77\x40\xc7\x63\x98\x8f\x3d\x2f\xe8\x45\x28\x8f\x4c\x90\xbc\xcb\x7e\x05\x75\x4a\xd1\xfa\xa5\x7c\xa6\x37\xbb\x86\xd2\x01\xe3\x28\xd1\x25\x50\xaa\x04\xc0\x41\x75\xe0\xea\xdf\x1d\x00\x2d\xee\x4e\xfd\xc0\xad\x80\x6d\x80\xe3\xfd\xa6\x22\x63\x6e\xd5\x95\x4e\xf4\x84\x2a\xe1\x7e\xb5\x28\xf3\x5b\x36\xcd\xbe\x52\xf7\xbb\xe4\x27\xb5\xb4\xa1\x17\xbf\x00\x0e\xee\x80\xf8\x9f\xa2\x5b\x46\xcc\xb5\x3f\xf0\xa8\xbf\x30\xa8\x28\xf8\x75\xc9\xc8\x4a\x17\x3d\xd2\x2a\xdc\x8a\x2c\xa1\x74\x63\xa8\x71\x5e\x87\x0e\xba\x01\x70\x70\x07\x42\xc6\xe8\xa3\xd3\x1e\x8b\xdc\x55\x58\x2b\x3a\x7e\x9b\x7a\xdd\x49\x6b\x2b\x12\xe5\xd7\x4b\x31\x4c\xbf\x14\x66\x2f\x5b\x14\xfa\x16\xc4\xb8\x20\x0e\xee\x00\x16\x5e\x42\xdb\xfc\x46\x90\x8c\xa1\x77\xef\x27\x31\x0e\x8a\x4f\x19\x7c\x7b\xb3\x8e\xd6\xf1\xe7\x13\xc2\xfe\x54\xe7\x2e\x99\xbd\x83\x76\xde\x00\x1c\xdc\x01\x4b\xbc\xb5\x96\x0b\x7d\x62\x8f\x86\x4c\x2a\xf4\xca\xde\xfc\x26\x1a\xd9\x1e\xa6\xa5\x8d\x7b\xbd\xa3\xb4\xba\xc7\xd1\xa0\x19\xb1\x80\x70\x00\xc4\x41\x75\x00\x90\x28\x00\xad\xb4\x4f\x73\xa0\x28\xf2\xe6\x70\x90\x08\x77\xc9\x07\x7b\x8f\x1a\x2d\xca\x4a\x19\xcd\x99\xa8\x67\xe9\x5a\x07\x5f\x05\x2e\x37\xfa\x35\x15\x8a\x57\x20\xe6\x0e\xe2\xe0\x0e\xdc\x9a\xbe\xd0\x57\xea\x3f\x9f\xde\xdc\x69\x5c\x6d\x5e\xb6\x70\xd5\xeb\x42\x9c\x4f\x64\xd8\x05\x87\xf8\x3f\xe1\x3e\x65\x14\xa9\x53\x88\x71\x41\x1c\xdc\x81\x95\x90\x46\x9f\x17\x79\x45\x6f\x7c\x1e\xdf\x2b\x36\xe8\xcf\x69\xd6\xbe\xa7\x77\x49\x69\xb8\xec\x92\x65\x7e\x80\x9e\x72\x81\x22\x74\x88\x12\x88\x83\x3b\x30\x14\x92\x27\x24\x7c\xdb\x25\xf8\x95\x61\xd6\x08\x63\xe2\x97\x65\x4b\x5f\x66\xfa\xe0\x54\x1f\xee\x36\x51\xe6\x30\x23\x13\xbd\x67\x88\x71\x41\x1c\xdc\x81\xec\x8e\xd7\x4e\x85\x33\xcf\x98\xc6\x35\x9e\xdc\x7c\x41\x2f\x72\x57\xe8\x2a\x25\x87\xd8\x6a\xf2\xce\x45\xa1\x9f\xf2\x1c\x4b\x9b\xe8\x08\x07\x40\x1c\x54\x07\x02\xff\xee\x00\xe8\xb1\xe7\x34\x07\x38\x4c\x66\x7f\xf4\x1e\xe6\x5f\x14\x72\x40\x93\x62\x75\x34\xdf\x9e\x0b\x72\x77\x96\x78\xbd\xd2\x18\x1d\xa7\x8b\xeb\xe3\xdd\x06\x2d\xb3\x41\x1c\xdc\x81\xdd\x8b\xb5\xe3\xaf\x53\xc2\xa4\x0a\x14\x1b\x9b\x29\x58\x9e\xa6\xa2\x38\xd7\x7a\xd2\x52\xf9\xd7\x61\xeb\xb2\x39\xae\xf5\x31\xf8\x20\xc6\x05\x71\x70\x07\x14\x76\x68\x67\x5a\xdb\x93\x4e\x5c\x7e\x26\x4e\xdd\x9a\x90\x7d\x9c\x63\xfa\xd6\xf4\x63\x6c\x66\xde\xb7\xfb\xe3\xe7\x7a\x24\xde\x43\x4d\x10\x20\x0e\xee\xc0\x97\x22\x11\xad\x83\x27\xc7\xca\xcd\x9e\xd6\x56\xf3\xcf\xcb\xb0\x0a\x0a\x0b\x6d\xb6\x6d\x29\x9a\x0d\xa9\x83\xbf\x0c\x97\xad\x40\x8f\x31\x20\x0e\xee\x40\x7a\xea\x15\x0f\xf1\xda\xbd\xa3\x94\xc7\x85\x42\xf2\xb1\x32\x8e\xdb\xbf\xd3\x0a\x39\x34\xea\xc6\x7e\x58\xe9\x1f\xac\xdf\xce\xa2\x47\x38\x00\xe2\xa0\x3a\x00\x48\x14\x80\x9e\x41\x4f\x75\x60\xe2\x84\x67\x48\xff\xc8\xd8\xa3\x2b\x40\xbe\x5a\x5b\xb9\x3f\xf1\x57\x4d\x4b\xbd\x99\x45\x7a\x8d\xca\x2f\x6a\x6f\x94\x49\xe8\x6b\x12\x20\x0e\x29\x61\xf8\x2e\x46\x58\xaf\xb8\xd8\xb8\x74\xd7\x9d\xfe\xc1\x48\xec\x4f\x16\x16\x2d\x6d\x95\xf9\x3f\x69\x95\x8f\xa7\x07\x2d\xb8\x79\x53\xa1\xb7\x30\x00\x0e\xee\x40\xd8\x1a\xfb\xb2\xf9\x43\xb9\x9d\x1f\xbe\x62\xf5\x6d\xc4\x2d\x6a\x31\x6f\xaa\xd5\xb7\x76\x52\xd0\x14\x8c\x0a\x2e\xfa\xd5\xec\xa6\x20\xc6\x05\x71\x70\x07\x1c\x77\xd3\x24\x4c\xdf\x9f\x3b\x3a\x14\xc1\x16\x7e\xaf\x41\x5f\xdd\x68\xf1\x3b\x56\x3e\x8a\xdd\xf8\xc3\xc4\xd0\x2f\x4c\x76\x05\x7b\xc4\xb8\x20\x0e\xee\xc0\xf3\x46\xde\x05\x4e\x21\x07\x73\xee\x81\xce\xdc\x51\x36\xb9\x84\xaa\xa2\x24\x31\xb1\x36\xfc\xca\x87\x14\x95\xe4\x14\x74\xa8\x8f\x11\x0e\x80\x38\xa8\x0e\x54\x00\x12\x05\xa0\x6d\xc5\x7f\x12\x05\x41\xc8\x89\x82\x71\x6e\x4d\x6d\x53\xa3\xe1\x4a\x89\x29\x3b\xaa\x78\xb2\x26\xf7\xd8\x00\x9c\xb0\xab\x43\x8e\xb6\x61\x24\x4a\xf2\x3f\xcb\x47\xd4\xcf\x64\xe7\x64\x02\xe9\x67\x55\x04\xbc\xbe\x47\x91\x66\xf2\xa4\x72\x3d\x1b\xc0\xf9\x96\x42\xb8\x63\xcb\xe7\xf0\x2c\x28\x65\x6e\xf1\xb2\x3b\x96\x90\x65\x35\xe6\x99\xec\x13\x21\x27\x0a\x92\xf8\x64\x2a\xce\x85\xa3\xab\x8c\x8b\xdf\xb9\x99\xac\xe7\x11\x7b\xae\x35\xb0\x73\x85\x8f\x4b\xca\xb2\xf6\xc7\xf0\x65\x6f\xcb\xb3\x38\x41\x45\x11\x85\x1c\xe9\xd5\x69\xd5\xfb\xea\x26\xec\xab\xf5\x95\xb2\x77\xfc\x05\x43\xc4\x65\x98\x7c\x79\x88\xb6\xc8\x03\xe9\x3e\xf9\x96\xcc\x8c\xac\x05\x47\x04\x9f\xc9\x6c\x91\x13\x05\x37\x55\x45\x49\x39\x3c\x22\x98\x6e\x8e\x8a\xec\x79\xa9\x7c\x1d\x7f\xb0\xc2\xe6\xec\xc2\x71\x1e\x4d\xab\xc0\xac\xb0\x6e\x06\xaf\xf3\x4c\x66\x2b\x85\xf4\xb3\x01\x61\xfe\xe9\xdb\xdc\x9e\xb6\x6e\x25\x2f\xab\x97\x2c\x85\xe6\xd1\xb2\x03\xb0\xdc\x1a\xd3\x93\x1a\x64\x36\xbf\x4c\x53\xb4\x15\x9f\xc9\x6c\x91\x13\x05\x32\x4b\x91\xe3\x86\xa8\x63\xce\xc6\x57\xce\x67\x94\x7d\xea\x79\xef\xe8\x8b\xef\xb4\x22\xcc\x9a\x35\x98\x35\xfc\x5d\x9d\x49\xe7\xcd\x99\xcc\xd6\x15\xe9\x67\xa3\x62\x95\x9e\x55\xe2\xb4\x67\x25\xa1\x9c\x37\x96\xd0\x1e\x0a\xea\x08\xc9\x0c\xdd\x7b\x59\xc1\x94\xf0\x67\x6e\xb1\xf1\xfc\x3d\xeb\x33\xdb\x03\x04\x5d\xa9\xa7\x15\x7a\xb4\x2b\x72\x7c\x1a\x12\x91\x78\x09\x4f\xff\x7c\x76\xca\xcf\xaf\x8d\x99\xc1\xe4\xef\x5b\xe7\x47\xd1\x25\x20\x71\xb7\x8c\xb6\x80\x6e\xca\x20\x0e\x5e\xe8\xcd\x1e\x6a\xbf\x27\x98\x98\x4e\xef\xce\xf9\xba\xfc\xb0\x41\xc8\xbe\x7e\x3f\xee\x63\x8b\x68\xba\x35\xc5\x5d\x99\xa7\xd8\x4f\xcd\xa1\x13\x7e\x41\x1c\xd2\xc3\x7f\x5d\x69\x90\x85\xdd\xd5\x47\x8b\xa5\x0f\x66\xef\xfa\x99\xc5\x9b\xcb\x47\x73\x55\x47\x5d\xda\xef\x46\x9b\x70\x79\x49\xad\x08\x3d\xa8\x82\x38\x78\xa1\xcf\x74\x70\xee\x11\xf0\xb5\x65\x24\x15\x6a\xf7\x6a\xf9\xaa\x2a\x51\xbc\x90\xf1\xfd\x16\xde\x9b\x9f\xd3\x56\xa5\xa1\x25\x2b\x58\xc7\x88\x71\x41\x1c\xbc\xd0\xf3\x30\x04\x91\x8c\x16\x66\xee\x26\xa3\x06\xdf\x7d\x8f\x1a\xf1\xb5\x70\xe3\x53\x46\xfc\x88\x74\x62\xf0\x26\x1d\x0f\x29\x03\xba\x36\xa2\xd0\x83\x38\xe8\x66\x0f\x48\x14\x80\xca\xe6\x69\x0e\x74\x8f\x8e\x7d\x2e\x65\x49\xd1\xba\x3f\xe1\x71\xa2\x72\xfb\xf3\x6e\x98\x0f\x9d\x6b\xfe\x6f\x03\x1d\xe5\x07\xe2\xab\x54\xc7\xef\x12\xa0\x98\x1f\x80\x83\x3b\x50\x64\xa1\x7c\x71\x44\x91\x65\x35\xcc\xb3\xd8\x9b\x98\x21\xa7\x2d\x37\x39\xfe\x66\x7d\x41\x3b\x95\x27\x76\xf8\xe0\x0d\x42\x5c\x28\xa5\x01\xe2\xe0\x0e\x0c\xa9\x62\xaf\x13\x93\x1a\x30\x87\x24\x77\x55\x62\x76\x5e\xa6\xcd\x36\x55\x62\x12\x4b\xa6\x6f\x8c\xa7\xee\x3c\xca\x9e\x74\x81\x4e\xa7\x07\x71\x70\x07\x52\xde\x0e\x4a\x9a\xec\xf7\xec\x11\x89\xec\x96\x6c\xe8\x24\x72\xcb\xa0\x67\x88\x0f\x9b\xaa\xcd\x3d\xed\xaf\x21\x8d\x95\x93\x7f\x82\x18\x17\xc4\xc1\x1d\x70\x0f\xb2\x76\x3b\x1f\xe3\x73\x39\x01\x17\xd5\x72\x40\x6c\xef\xba\x5e\xf1\xf3\xcf\x16\x6a\xab\xb6\x17\xc4\x9a\xa6\x65\x2f\xf7\x91\x22\x1c\x00\x71\xd0\xcd\x7e\xe2\xef\x0e\x80\xee\x61\xa7\x39\x70\x24\x6a\xef\x95\x8b\x75\xff\xae\xe1\xf4\x1b\x83\x39\xf9\x76\xba\x48\x63\x4c\x5a\xa1\x0b\xce\x5c\x9d\xa2\xfd\x26\x92\x14\xea\xab\x88\xb9\x83\x38\xa4\x93\xc9\x5f\xe0\xe6\xa5\xb5\x6b\x70\x27\xa3\x6f\xbc\xd5\xbd\xe4\x48\xc9\x42\x7a\x41\x58\xfe\xa0\x49\x4a\x2f\x6e\xa7\x52\x4d\x99\x01\xea\x24\x06\x71\x70\x07\xbe\xa0\x35\x3c\x55\x6f\x7d\x2f\x86\xf2\xa8\xf8\xf6\x52\x10\xed\x96\x5a\x45\xb8\x87\xa9\x49\x06\x69\xe7\xbb\xdc\xd6\x5a\x85\x06\x62\x68\x71\x0e\xe0\xe0\x0e\x10\xeb\x48\x11\x68\xb1\x05\x1a\xbe\x19\x24\x48\xa0\xad\x61\xce\xf8\xd3\x7a\x61\x2f\x51\x28\x20\x73\xe1\x76\xef\xb1\xe8\xd8\x2a\x74\x22\x31\x88\x83\x3b\x80\xa9\x3c\x54\xcb\x30\x9e\x7d\x3b\xf2\xf6\x6b\xdd\x40\xa3\xdd\x8b\x1a\xbe\x03\xfc\x2a\x46\x56\x69\x29\xae\x58\x3c\x73\x27\xf3\x6f\x11\x0e\x80\x38\xa8\x0e\x00\x12\x05\xa0\x05\xc5\x69\x0e\x84\x0f\x16\x9d\xcf\x97\xf3\x43\xfd\x80\xb5\xd8\x3d\x7f\xfd\x47\xd7\xfa\x25\x2e\x4b\xd5\xe5\x8e\x31\x47\xc2\xee\x19\x22\x7f\xdc\x25\xc4\xdc\x41\x1c\xdc\x01\x95\xc4\x31\x5f\xb2\xf7\xab\xc1\xbd\xc2\xca\xd4\xd2\x66\x0a\x4f\xc4\xe5\x29\x76\x55\xdc\xe4\x77\x03\x47\x1a\x65\xbe\x38\xd2\x40\x75\x00\xc4\xc1\x1d\x78\x42\x1c\x25\x43\x24\xb5\x1d\x1b\xa2\x9a\x63\xcb\xe6\x1b\x89\xb2\xf8\x6e\x44\xd1\x43\x80\xdb\x64\x85\xf8\x11\xeb\x9e\x18\x1e\x74\xa4\x04\x88\x43\xfa\x4a\x85\x77\xc1\x23\x7e\x8a\x5b\xbc\x3f\x3d\xcb\xb8\x25\x75\x74\x5e\xf4\x28\x7d\x63\xba\x16\x22\x43\x38\xb2\x38\xe9\xaa\xfd\x70\x81\x12\x31\x2e\x88\x83\x3b\x60\x13\xc4\xb3\xcf\x14\xb2\xf0\x9d\xb4\xba\x2d\x88\xc9\xc7\x54\xed\x64\x42\x88\x52\x3a\x4b\x5f\xe6\xdd\xc6\xdb\x23\x2a\xf9\x1b\x31\x08\x07\x40\x1c\x54\x07\xc8\xff\xde\x22\x05\x5a\xdd\x9d\xe6\x40\x4c\x6e\x8b\xf3\x2d\xb6\xa3\xd9\xe6\x16\xd9\x95\x8f\x77\x28\xa7\xed\x92\x48\x2c\x7f\x7d\x1c\x78\x5b\xe2\xd7\x2f\x67\x17\x7e\x5e\x1d\x31\x77\x10\x07\x77\x60\x24\xa9\xb4\x1c\x23\x86\x49\x5e\x7b\x35\xf6\xe9\x26\x67\x37\xee\x20\x5d\x46\x93\xc3\x65\x32\x7c\x7c\x9f\xfc\x84\x49\xdf\x16\x68\x23\x18\xc4\x21\x1d\xbb\x4b\xba\x46\xe2\x62\x4f\x83\xe1\x98\x13\xca\x8f\xf9\x4e\x69\xd0\xa2\xdf\x1c\xc3\x83\x68\xb7\xe1\x86\x40\xbc\x20\xdd\x4d\xd6\x7d\xc4\xb8\x20\x0e\x69\x3d\x50\x29\x72\x71\xab\xa6\xc4\xea\xfa\x22\xa6\xaa\x09\x0d\xc5\xde\xd1\x91\x07\xfa\xef\x31\x6a\xb1\xfe\x32\xbc\xda\x85\x1a\x86\x01\x68\x3d\x00\xe0\xe0\x0e\x1c\xbd\x64\xc3\x1c\xdb\x09\xaa\x7a\xf4\x80\xa2\x42\xab\xad\x90\xfb\x5d\xf6\x6b\xe7\xeb\xc2\xdb\xd3\x3f\xcb\xc9\xa7\x1e\xd5\x19\x4b\x22\x1c\x00\x71\x50\x1d\x00\x24\x0a\x40\x4b\xed\xd3\x1c\x78\xaa\x92\x23\x67\x7b\x93\x20\x9e\x84\xc7\x41\x4a\xb6\x81\x3d\xd2\xeb\xfa\xb8\xde\x03\xb4\x18\xff\x7a\xe6\xc8\xdd\xe1\x9b\x59\x98\x50\x87\x3e\x80\x83\x3b\x30\x9f\xdb\x6f\x3e\xd5\xd3\x49\x26\xc8\x6f\xd0\xdc\xfb\x48\xb4\x39\xae\x5e\xc7\x8a\xbc\x87\x8f\xf1\xd5\x6b\x96\xa0\x97\xfc\xaa\x50\xb2\x08\xc4\xc1\x1d\xb0\x4b\x59\x2d\xe9\x37\xa4\x0e\x9c\x0d\xbc\x2f\x72\xe5\xc9\x8c\xf3\x4e\x84\x6c\xda\xf4\xcd\x80\xa9\x8d\xda\x19\xf5\xd2\x8e\x42\x28\x05\x06\xe2\xe0\x0e\x14\xa2\x19\xa8\x37\x98\xc4\xf5\x72\x3e\x8e\xc2\xc1\x8a\x8f\x28\x69\x1d\xf3\x73\x76\x75\xfb\x81\x9d\x8e\x57\xfb\xce\xae\xa4\x1f\x5a\x67\x80\x38\xb8\x03\x25\xf3\xe8\xcd\xf8\xfd\xf3\xaf\x2f\xcb\x70\x3e\x11\xfb\x43\xae\x9c\x51\x1a\xb0\x66\xd0\x46\x1b\xf8\xd3\x33\x86\x56\x9f\xf2\x84\x0d\xe1\x00\x88\x83\xea\x80\xd4\xdf\x1d\x00\x3d\xf7\x9c\xe6\x40\xfd\x79\x32\xcd\x17\x64\xa6\xf9\x7b\x9b\xd2\x25\xed\x75\xfe\x2b\xf4\xb7\x0c\xfa\x3d\x93\x46\x2e\xe7\x1e\x24\xef\x2b\xaf\x74\x43\x6d\xa2\x20\x0e\xee\x40\xa8\xed\x0b\xa6\xcb\x8f\x0d\x08\x84\x84\xe4\x7d\xd0\x9f\x47\xde\xcb\xa9\x22\x65\xa2\xfe\x99\xfa\x8b\xea\xfb\x6f\xce\xef\xe3\xc4\x86\x50\x4a\x03\xc0\xc1\x1d\xb8\xdc\x47\x6c\x70\x41\x66\xee\x2d\x95\xfd\x18\xae\x2a\x87\xf2\xfb\xf5\x32\x6e\xc6\x6b\x95\xee\x8c\x0f\xd5\x26\x19\x24\x3e\x72\x42\x47\xd6\x80\x38\xb8\x03\xdd\x34\x04\x57\x47\xd5\x6d\x22\x33\x13\xb8\x45\x09\x22\x85\xc9\xe7\x39\xc3\x5a\x52\xbb\x82\x96\xae\x28\x65\xca\x0a\xe4\xe5\xfc\x82\xd6\xc6\x00\x0e\xee\x00\xeb\x98\x54\x70\xf7\xe7\xb0\xc9\xa0\xa8\xe0\xf4\xcf\x92\x89\xd2\xd6\x5d\x7d\xeb\x5b\x03\x12\x3c\xf7\xb4\x03\x1c\x72\xd5\x97\x57\x10\x0e\x80\x38\xa8\x0e\x00\x12\x05\xa0\x87\xd0\xd3\x1c\xd0\xbc\x90\xc0\xd0\x88\x5f\x80\x63\x76\xce\x3e\x46\x97\xfb\x8b\xda\xb7\x1b\x1b\x2b\xd8\xaf\xd6\x6a\x42\xe2\x9b\x7f\xc4\xff\x48\x97\x45\xcc\x1d\xc4\xc1\x1d\x70\xf7\x33\x5a\x23\x30\xa6\x17\xb0\x9b\x3c\xe7\x5f\xed\x62\xa8\xa6\xc1\xb7\xf9\x69\x4d\xec\x9e\x48\xc5\x2c\xfd\xeb\x70\xb2\x1f\x59\x88\x71\x41\x1c\xdc\x01\x69\xab\x40\x4d\xa5\xdd\x57\x4f\x53\x6b\x8c\x82\x8a\x0f\xd1\xfc\xd8\x16\xde\x2e\xd1\xde\x6e\x8c\x4c\xd0\x0f\x88\x64\xd9\xdb\x84\x5e\x06\x80\x38\xa4\x3a\xe0\x52\x12\xbc\x53\xb7\x13\x72\xcd\x56\xef\xb6\xbb\x8e\x5d\x5c\x41\x90\x48\x91\x75\xee\xd4\x2a\xf7\xdc\xc0\x20\xad\x6f\x1f\x94\x2a\x01\x71\x70\x07\x44\x2d\xba\xb5\x6d\x2b\x69\xdc\x9c\xdd\x26\x9c\x65\xf1\xe7\x2d\xee\x18\x95\x5f\x73\x41\x0b\xbf\xb1\xf5\xa7\x37\x64\x26\xac\x5f\x0a\xe1\x00\x88\x83\xea\x80\xeb\xff\xc5\x81\xec\x7f\x3a\x17\x41\x0d\x83\xa1\x72\xa8\x41\xc1\xd1\x8a\x41\xc8\x89\x82\x22\x3d\xfa\xee\x92\x14\x57\xe1\xc1\xb5\x58\x89\xa3\x68\x0b\x71\xac\x3e\xcc\x87\xdb\x7c\xfc\x4f\x17\x9c\xfb\x2f\x5f\xc3\x12\x6b\x38\xb3\x3d\x0c\xd0\x0f\x9d\xe6\xa9\x9f\xf4\x08\x7a\x37\xf3\xc3\x47\xc5\x8b\x5a\xde\xf6\x2f\x82\x29\xf0\x15\xee\x39\xb3\x99\x94\xcb\xd2\x48\x15\xbc\xfa\x64\xfc\x10\x4a\xae\x83\x38\xb8\xa7\x38\x1f\x7d\xd6\xcc\x31\x68\xd8\xc2\xa7\xa5\x5e\xb5\x90\xb8\xde\x9e\xde\x2f\x16\xa0\xc5\xbc\xa3\x9f\xfe\x45\xad\x55\x26\xa2\xc7\xee\xff\x1c\x27\xf3\x77\x0e\xee\x69\xd3\xa0\xe0\xa5\xcf\xe5\xb4\x1f\xbf\x18\x64\x7c\x22\x2f\x79\x25\x6e\x7c\x7e\xdb\xe7\x80\x81\x78\xc6\xf1\x13\x69\xec\xa1\xa0\xcf\x08\x62\x5c\x10\x07\xf7\x34\x5c\x83\x71\xd0\x66\xb1\xa6\xff\xe5\xd1\xd1\xf3\xbe\x04\xcc\xb1\x77\x95\x4d\x3b\x19\xfc\x6b\x2f\xf9\xaa\xc8\xaf\xa4\xc7\xc7\xea\x43\xeb\x77\x00\x07\xf7\x34\x82\x53\xd3\x36\xec\x99\x48\xa2\x88\x4e\x9b\x50\xa0\x9f\x9a\x6d\x98\x8c\x99\x9f\x1c\xce\xc2\xe4\x1d\x75\x8d\x67\x3f\xf6\x3a\xef\x20\x3c\x05\x71\x50\xad\xfa\xbf\xb5\xf6\xff\xd3\xd6\x0d\x6a\x09\x3e\xbd\xad\x3b\xeb\xda\xd8\x5c\x41\xe6\xd1\xba\xaa\x56\xe2\x05\x31\xa7\xf2\xcb\x05\xb4\x95\x37\x38\x8d\xbf\x75\x47\xfa\x79\xb3\x57\x95\x34\xa1\x21\x5a\xa4\x41\x1c\x72\x5b\x37\x8a\xb5\x5f\xc9\xf5\x7d\x79\xfa\x6b\x84\x51\x46\xcc\x5b\x64\x29\xdf\x26\x0d\xc3\xbb\x36\x8b\xe2\x6f\xd9\x63\xcc\xe5\xa3\x6e\xf1\x20\x46\x06\x71\xc8\x6d\xdd\xf1\x5e\xb2\x4e\xbb\x9a\x82\xaa\xa2\x54\xb3\x57\xd1\x8e\xc6\x17\xeb\x7d\x95\x1c\x96\x72\xde\x6a\xb1\xe3\x49\x5f\x1a\xab\x3a\xe6\x45\x8c\x0c\xe2\xfe\xd3\xd6\x4d\xf2\x5f\x31\x0f\xdc\x6a\x99\x66\x5e\x2e\xf4\x8a\x51\x3e\xf4\x68\xed\xd7\x4c\x8e\xbf\x7b\x99\x08\x9b\x55\x3f\x3c\x9e\x46\xa5\xb3\xf2\xc5\xc4\x0d\x12\xfc\x7f\xe3\x42\x15\x99\x50\x50\x50\x82\x82\xe5\xd9\xd0\x10\x8d\xe0\xc5\x56\x4e\x9d\xba\x7b\x5f\x83\xbe\xb2\x53\x3f\xa7\x8d\xf3\xbc\xa8\x2a\xb7\x1c\x83\xf2\x4e\x53\xa2\x88\x28\xf2\xcb\x9d\xf2\x9f\x27\xff\xee\xa5\x2c\x28\x5c\xff\xb8\x25\x76\x35\xf3\x6a\x20\xd5\x5b\x91\x59\xe5\xce\xdb\x68\x4f\xf0\x93\xef\x50\x0d\x11\xf9\x17\x06\xf7\xe5\x3a\x0a\xfd\x0b\xc5\x10\x39\x3e\x6e\xcb\x23\x14\x5a\xba\x22\x67\x9d\x23\x3b\xf9\xba\x6a\x9e\x68\x68\x66\x55\xf6\xa2\xa2\xd4\x9d\xca\xc0\xe5\xc0\xb5\xff\x7d\x8d\xe0\xa0\xc9\x9d\xd2\x08\x9e\x51\xd9\x79\x18\xdd\x4c\x45\xfb\x38\x6f\xf5\x72\xb4\x30\x85\x82\xc0\x61\x21\x87\x0c\x47\x88\xcb\xbe\x84\x96\x18\xa6\xfe\x17\xca\x7f\xa1\xed\x3b\x29\xf2\x63\xb4\x87\x52\xeb\xce\x16\xec\x22\x0e\xfd\xe1\x78\x91\xfb\x94\x5f\x82\x62\xde\x73\xe4\xe1\x7f\x5f\xdc\x2c\x38\xf8\x17\x2a\xb4\x12\xd2\x1b\x64\x82\x1b\x72\x25\x0f\xbd\xe6\xc6\x1f\x7c\xef\x4d\x69\x6f\xfc\x35\x1e\x0a\x17\x12\x39\xfe\x2b\xed\x99\x4c\x35\x50\x23\x38\xe8\xe7\xff\x69\x04\x6f\x40\x6a\x04\xb7\xf6\x7f\x19\xb2\x1b\x88\x75\x89\x84\x8a\xe3\x33\x2e\xe1\x8f\x20\xa7\x3c\xe1\x95\x57\xa3\x51\xb5\xe5\x47\x05\x19\xbd\xf8\x9c\x0b\x67\xb1\x75\x2e\x8b\xdc\x08\xbe\x41\x2a\x2c\x7d\x4f\x69\x8c\x94\x75\x25\x5b\xb8\x83\xa5\xf4\x5d\xca\x98\x87\xe0\x4c\xfd\xd3\x40\xb5\xc4\x05\x9c\xc9\x1b\xe5\x67\xf2\x7e\xa2\x01\xb9\x11\xfc\x16\xab\x10\x66\x29\x6a\x13\xc3\x47\x61\x11\x5f\xf1\x5f\xf6\xef\xb7\xd3\x24\x64\xbc\x96\x82\xe7\xa8\xf2\xe2\x94\x71\xba\x3f\x9f\xcd\xa1\xe7\xc8\x8d\xe0\x1a\x4b\xe6\x0d\x19\x23\x68\x18\x84\x28\xcf\x7d\x6b\xa9\x39\x62\xb1\x48\x0d\xbf\x09\xce\x34\xe9\x1e\x31\x13\x33\x05\x5d\x8f\xf1\x3c\x93\xd9\x22\x37\x82\x9f\x97\x3b\x1e\xc4\xcd\xd1\x32\xfa\xd2\x3a\xf5\x16\x83\x81\xa4\x50\xf9\xd3\x0e\xad\xe4\x6c\xed\x06\xee\x4b\x62\x67\xaf\x67\x79\x67\xd2\xe4\x2f\x8b\xdc\x08\xce\x81\x4d\x5c\xca\x99\x63\xeb\xa1\x2d\x1c\xff\xee\x77\x46\xca\x71\xf5\xb7\x83\x99\x0f\x17\xd3\x34\x3a\xa7\x15\xbb\xa9\xde\xe0\x5d\x3e\x93\xd9\x22\x37\x82\x6b\x94\x4a\xb4\x3a\xbe\x77\x67\x6d\xc0\x62\x98\xbb\xad\x1c\xa4\x1f\xbf\x70\x07\xf5\x71\x5d\x26\x79\xae\x60\xf9\x1e\xdd\x78\xf1\xbb\x33\x99\x2d\x72\x23\xf8\x9b\xfc\x2f\x7a\xc3\x7c\xae\x33\xf3\x73\x8d\xaf\x89\x6d\xf1\x26\x04\xc8\x86\x6b\xe2\xe2\xc6\x53\x08\x9b\x44\xe2\xef\xb8\xa7\x4d\x9f\xd9\x02\x0a\x74\xa5\x9e\xb6\x80\x6a\xee\x7b\x93\xaa\x4b\xa7\x4f\x37\xe1\x65\x28\xea\x7f\xdc\x28\x99\x1f\xe3\x43\x98\x20\x45\xfe\xeb\xae\x4f\x48\xd1\xa2\xa5\x00\x1a\x62\xe1\x00\xe2\xe0\x0b\x28\x46\x2f\xa9\x47\x46\xa1\x94\x0f\xbf\xef\xee\x60\x5e\x21\x9f\x78\x52\x7a\x3f\xab\xd9\xaf\xb6\xe8\x43\x24\x0a\xcf\x48\x53\x29\x8b\x23\x62\x5c\x10\x07\x5f\x40\xc5\xf0\x85\x51\x67\x27\x69\x62\xdd\x73\xd5\x6f\x8d\x0c\xff\xd6\xd7\xdf\x89\x5b\xf6\x99\x41\xf0\xd8\x6a\xb8\x8a\x2d\x84\x45\xb0\x1b\xda\xa4\x02\x70\xf0\x05\xd4\x32\xcd\x2b\x41\x79\xc3\xa0\x9b\x75\x2b\x9f\x6e\xdc\x7e\xf2\xed\xfa\x91\xb8\x98\x65\x6c\xd4\xe5\xfb\xd7\xbd\xab\x5c\xee\x3a\x47\x43\xc7\x8a\x83\xb8\x50\xf9\xff\xbe\x19\xff\x31\xa9\x0e\x2c\x9c\xfa\xc9\x1c\xe9\x2f\x79\x12\x3e\xb0\xcf\x1e\xa3\x39\x41\xa4\xb3\x90\x78\x90\x8e\x47\xc8\xf2\x34\x3a\x89\x16\xd1\x08\x0e\xe2\xfe\xff\xff\xdb\x7f\x8e\x15\xff\x7b\x23\x38\xa8\x6a\x9e\xa6\x80\x85\xee\x49\xc4\x1d\xe1\x34\x79\x8f\xc8\x15\x3c\x22\x73\x4e\x02\x37\x01\xa5\x39\x34\x8a\x7a\x72\x1e\x5d\xd3\xe4\x45\x1b\x1c\xe8\x4f\x0a\xe2\xe0\x0a\xe0\x32\xd4\x4f\x8c\x9b\x0d\x78\x7e\x4c\x41\xb9\xc5\x97\x1f\x7b\x8b\x27\xe0\xbd\xa3\x0f\xba\x53\x96\x81\x02\x35\x17\xd3\xac\x34\xf4\x05\x51\x10\x07\x57\xe0\x68\xbf\xa9\x3a\x76\x48\x37\xed\x87\x8f\x20\x37\xd9\xb0\xce\x37\x77\x9d\x2e\x66\xa6\xcd\xb0\x91\xbe\xb2\x02\xae\x9b\xb4\xd1\x50\x83\x39\x88\x83\x2b\xd0\xaa\x33\x53\x74\xc8\x9e\x8e\xfb\x51\xef\xc9\x92\x3f\x8f\x90\x70\xcb\x66\xc1\x15\x53\xf1\x70\x57\xab\x48\xe2\xb7\xf6\x59\x77\xa0\x8f\x16\x80\x38\xb8\x02\xf1\x81\x3f\x66\x3d\x79\x3d\x1f\x35\x4c\xa3\xd4\xf7\xa1\x4a\xb8\xab\x67\xed\x9b\x9b\xf7\x26\x0d\xe0\x62\xbe\x61\x5a\xfa\x13\x6b\x86\x58\x43\x83\xb8\x7f\x14\xf8\x9f\x9b\xe5\x5f\x1c\x00\xdd\xc2\x4e\x73\xc0\x2a\xe5\x8b\x71\x44\xf9\x8b\x9e\x40\xb5\xf5\x4f\x0a\xf7\xa8\x8d\x6f\x53\x1c\x32\x14\x8a\xb2\xba\xc7\x8d\x58\x73\xe8\xb8\x62\x41\xef\x6c\x41\x1c\xdc\x81\xf3\x43\xad\xc3\xbe\x85\xe2\x15\xef\x9e\x7d\xac\x56\xed\x79\x45\x36\x72\x9f\x0e\x2f\x70\x51\xf4\xe7\xa0\xb8\x57\xa3\xce\xe0\x25\x05\xc4\xb8\x20\x0e\xee\x00\x61\x06\x6e\x47\xf0\xba\xe5\xcf\x0f\x21\x69\x82\x15\xe8\x5e\xdb\xeb\xfd\x28\xc4\x92\x68\xb6\x75\xb4\x53\x5c\xde\x68\xb4\xbf\xa0\x46\x35\x10\x07\x77\xc0\x21\xd1\xe9\x8a\x6b\x0a\xdd\xe8\x26\x0b\xef\xb2\x6b\x95\xe3\xe3\x07\xe6\xe9\xec\x5b\xa2\xef\x54\x1c\x63\x0c\x63\xea\xf1\xb2\xa0\x2f\x12\x82\x38\xb8\x03\x7c\x58\x51\x1f\xf9\x67\xfc\xc8\x32\xa5\x3b\x53\x69\x2a\x05\x5b\xd0\x29\x3a\xed\x9e\xf8\xe2\xab\xa3\xe6\x0c\x79\xe5\x77\xb3\xdd\x40\x38\x00\xe2\x10\x0e\x34\x00\x1a\xc1\x41\xeb\x89\xd3\x1c\x20\x28\x27\xde\x59\xd5\xf3\x5d\x13\x44\x0d\x9e\x2f\xef\x97\x3d\x88\xc2\x5c\x28\xd2\x7d\xda\x9a\xab\x71\xf9\x77\x59\x7f\x9a\x29\x74\xa4\x34\x88\x83\x3b\xf0\x73\x52\xec\x3b\x91\xcb\x5c\xdd\x97\xeb\xfa\x04\xda\x1d\xeb\x91\x07\xd9\x47\xaf\x9e\x68\x6e\xa2\x7f\xe0\xa7\x4f\xba\x2c\xb8\x00\xed\xa3\x81\x38\xa4\x46\xf0\x79\xe2\x9b\x74\xd5\x0f\xdb\x44\xd6\x6b\xe5\x1a\x37\x65\x47\x99\x08\xde\x38\x0c\x3e\xf7\x28\x95\x79\x32\xad\x79\xee\x01\x1a\x74\xea\x0b\x88\x83\x3b\x10\xf5\x56\xff\x7b\xa2\x64\x14\x6b\xcb\xa2\xd5\x2f\xfe\x6b\xb7\x28\x3f\x6a\x61\x99\x35\xf4\x62\x4b\x0a\x9a\x5d\x4d\xd5\xef\x2e\xeb\x43\x8c\x0b\xe2\xe0\x0e\x7c\xee\x88\x62\xc9\x1f\x0a\x66\x28\x27\x6c\xb1\x53\x66\x30\x88\xef\x78\xcd\xe3\x66\x62\x90\x92\x6b\xc4\x65\xce\xff\x2c\xb0\x60\x19\xe1\x00\x88\x83\xea\x00\xa0\x11\x1c\xb4\xb8\x3b\xcd\x01\xeb\x4b\x37\xfd\x4a\xb4\x0c\x5c\xca\x36\xe9\xbb\x2b\x0c\xaf\x67\x5d\x79\x3a\x11\x88\x7b\xbe\xf2\x3b\xa9\xdf\xc1\x42\xd8\x5c\x5e\x33\x62\xee\x20\x0e\xee\x80\x7e\x86\x19\xb6\x72\x0f\xd3\xa8\xe2\xfb\xad\x63\x92\x71\x37\x07\x94\xa6\x48\x92\x1f\x55\xda\x5f\x3d\xdf\xfd\x5a\x4a\x54\x1f\x7f\x89\x18\x17\xc4\xc1\x1d\x78\xfe\x0c\x77\xa8\x4c\xd5\xb1\x55\xc6\xfb\xbb\x1a\xc5\x5d\xa1\xb0\x3e\x8b\xa3\x1d\x6e\x63\xd9\x3d\x11\xea\x97\x76\xf6\x44\x04\xbb\x88\x71\x41\x1c\xdc\x81\xca\x4d\x1c\x75\x47\x55\x94\x57\xf1\x91\xc5\x25\xa5\x2c\x7e\x82\x4c\xf7\x6b\x6c\x7f\x8c\x56\x58\x70\xf0\x50\xbd\xa0\xa9\x7e\x04\x1d\x19\x01\xe2\xe0\x0e\xd0\xf3\x45\xb5\xa9\xe1\x50\xc7\x5a\x84\xed\xba\x53\x16\x28\xba\x77\x19\xa3\xbe\xb6\x88\x73\x51\x35\xa6\x27\x0d\x15\x20\xbb\xe5\x83\x70\x00\xc4\x41\x75\x00\xd0\x08\x0e\x5a\x69\x9f\xe6\x80\x0d\x33\xca\xab\x9e\xb2\xd9\xa0\xbd\x28\x74\x4d\xa9\x7b\x4c\xac\x0e\x6c\x9a\x77\x29\x64\x53\xac\xe6\x67\x1a\x39\x5e\xac\x87\x7e\x45\xcc\x1d\xc4\xc1\x1d\x28\x1b\xd0\xf0\x6d\x7f\x41\x9e\x9c\x1a\xef\x88\xd2\x4e\x73\xc4\x91\x7c\x5e\x38\xc7\x5a\x6a\xf4\x58\x32\x3b\x63\x5d\x93\x60\x03\x7a\xbf\x08\xe2\xe0\x0e\xbc\xa5\xd4\x98\x9b\xb8\x83\xa7\xa0\xd5\xdd\xaa\x4d\x92\xef\x1b\xba\xa4\xdc\x84\x27\xa2\xfa\x48\x7e\xb1\x40\x80\x86\xf8\x9d\x24\xf4\x99\x11\x10\x07\x77\x20\x7e\x5f\x9f\xa6\xae\x82\xc4\x02\x2f\xc0\x17\x97\x17\x55\x95\xef\xb1\x46\xcd\xcf\x07\x46\x6e\x2f\x82\x7f\x9c\xa3\x49\xfa\x80\x11\x8d\x18\x17\xc4\xc1\x1d\xb8\xc5\x50\xab\xdd\x51\xa0\xbb\x32\xa8\x63\xb0\xd0\x42\xd5\x2e\x4c\x49\xfd\x94\xca\x5a\x94\xa9\x5b\x27\xf0\x8b\xa4\x47\xdc\x6d\x3f\x84\x03\x20\x0e\xaa\x03\x80\x46\x70\xd0\x63\xcf\x69\x0e\xf4\xde\x40\x2b\x90\x5b\xb9\x7c\x7d\x3f\x36\x11\x5b\x7b\xdd\xbd\xb4\x5e\x7c\xf2\x69\x91\xe6\x13\x77\xb1\x42\xd2\x64\x86\xdf\x98\xd0\x3b\x50\x10\x07\x77\xc0\x7b\x5d\x3b\x99\x88\xe4\x47\xf4\xfd\x44\x37\x15\xeb\x78\xfc\x81\x25\x03\x25\x8e\x51\x5f\x71\xa9\x39\x93\x73\x1a\x44\x94\xd5\xd0\x89\xa0\x20\x0e\xee\x40\xd7\x4f\x46\xac\xba\x7a\x62\x94\xe7\xcc\xf6\xd3\x64\xbc\x92\xf9\x6a\xc9\xe2\x0c\x2c\xfd\x44\xbb\x34\x47\xba\xa5\xdd\x5e\xa1\xd0\x27\x6c\x40\x1c\xdc\x81\xe6\xb4\x5b\x9a\xb4\xd2\x7a\x0c\xef\x75\x0d\x7a\x8c\x5f\x72\xe9\x96\x1e\x2b\x10\xcf\x89\x9b\xb1\x6e\xa2\x2e\x45\x2d\xf6\x45\x41\x3d\x67\x20\x0e\xee\x40\x87\xaf\xf5\xc1\x1c\x8f\x4f\x11\x9b\x27\xaf\xb9\xbd\xf2\xcc\x62\xf6\x0d\x4c\xc2\xc9\xed\x51\x72\x15\xe3\x19\xbc\x0b\x12\xe1\x49\x08\x07\x40\x1c\x54\x07\x00\x8d\xe0\xa0\x67\xd0\xd3\x1c\xd0\x78\x95\x10\xe7\xae\x29\x27\xbe\x21\x4f\x4f\x5a\x99\x73\xcc\xdd\x2d\x21\x6b\x4e\x5e\xc8\x72\x87\x1c\xfd\xab\x87\x40\x63\x05\x14\xb2\x01\x71\x70\x07\x46\x71\xa8\x06\xfa\x88\xd2\x3c\xa3\x06\xd8\x7e\x50\xd6\xb8\x3c\x2b\x7b\x53\x54\xc6\xfd\xa4\xae\xaa\x32\xeb\xfd\x49\x7d\xfd\x80\x2a\x62\x5c\x10\x07\x77\x60\xd2\x20\xbb\x88\x45\x48\x20\xe2\xea\x78\x34\x55\xec\x1b\x0d\xbb\x07\x37\xb1\x3c\xee\xdd\x67\xb7\x3d\x46\xd7\xf9\x31\x81\xdd\xec\x8b\x18\x17\xc4\xc1\x1d\xe0\x1f\xed\xbc\x2b\xf3\x7d\xbf\x68\x93\x21\x68\x79\xed\x90\xb8\xf0\x9c\x78\x7d\xf8\xbd\x34\x34\x47\x56\xbb\xc9\xcb\xf1\xb2\x5f\x1b\x11\xe3\x82\x38\xb8\x03\xab\xd3\xaf\x37\xda\x9e\x1c\xd9\xac\x73\x5f\xb8\xc7\x7c\x9e\x8d\x95\xe4\x6e\xa0\x8a\x8d\x7e\x42\x59\x37\x51\x41\x1c\x1d\x07\x09\xd4\x0f\x00\xe2\xa0\x3a\x00\x6a\x04\x07\x6d\x2b\xfe\xd3\x08\xde\x80\xdc\x08\x9e\x57\x6f\x7f\x1c\x5c\x8d\xdd\xe4\xa4\xd0\xea\xb8\x1c\x44\x74\xbb\xe5\xa5\xa9\x7d\xbe\x90\x2a\x5a\x3f\xf9\x17\x41\xc6\xb0\x8b\xf4\x67\xb2\x73\x82\xdc\x08\x1e\x73\x9f\xdf\xc6\x34\xfb\xf0\x99\x4d\x35\x59\x4a\xd3\x96\xb1\x30\xc9\xce\x4b\xcf\xc3\xdc\xb9\x9a\xb0\x41\xcd\x77\xec\x19\x37\x7e\x9e\xc9\x3e\x11\x72\x23\xf8\x56\xe0\xed\xc9\x48\x37\x06\x0b\xb4\x8c\x17\x0f\xfc\xe9\x18\xfc\x1f\xae\x7f\x26\x96\x8d\x08\xb4\x96\x79\x55\xd6\x78\x38\x6b\x78\x7c\x26\xb3\x45\x6e\x04\xbf\xd6\x29\x84\x59\x77\xd7\xee\xde\x84\x57\x87\x20\x71\x9c\xcf\x7b\x2e\xf9\xde\x1a\x77\x02\xde\xe6\x72\x4c\x9b\xf5\x95\x75\x15\xcd\x33\x99\x2d\x72\x23\xf8\x9f\xc7\x4b\x1f\xe9\xb0\xdc\x8d\x65\xd3\x3e\xf6\xfd\x30\xdf\x7d\xf3\x27\x18\x63\x40\x92\x50\xbd\xd3\xf8\x53\x79\x88\x9c\x5d\x5e\xe5\x99\xcc\x16\xb9\x11\xfc\x0e\x37\xfd\x35\x8d\x8b\x37\xec\x5d\xea\x47\x87\x7e\xa1\xf8\xd5\x2f\xee\x94\x45\xda\x7f\xe3\x7d\x2a\xa5\x89\xfe\xc3\x8f\x11\xc5\xe0\x4c\x66\x8b\xdc\x08\x9e\xae\xdb\x69\xc5\x9f\xfd\xae\x8c\x36\x98\x00\x55\xf0\x03\x9d\x67\xcb\xad\x94\xd7\x5b\x33\x17\xf0\xb1\x6c\x86\x82\xb7\xcb\xdc\xcf\x66\xc7\x13\xb9\x11\x7c\x4f\x3a\xda\xe8\x8b\x7d\xda\x72\x03\xcf\x43\xcf\x0b\xc5\x78\x54\x57\xac\x25\x8c\xf2\x7e\x16\xa9\x04\x93\x65\x12\x53\x50\x19\xba\x9c\xd9\x1e\x20\xe8\x4a\x3d\xad\xd0\xaf\xd0\xad\x49\x89\xf4\xb7\x67\x97\x5a\x69\xcd\xda\x33\x89\xcb\x99\xeb\xa9\xe7\x7a\xde\x58\xe4\x33\xee\x35\xac\xd2\xdf\x3d\x0f\x25\x73\x40\x1c\xbc\xd0\xa7\x68\x34\x46\xd4\xf4\xc4\xf9\xff\x26\xe2\xf4\xf7\xd6\xc0\x6a\xb4\x48\x30\x5e\xae\x42\xfb\x26\xbd\x28\x5d\x45\xf4\x69\x4f\xdd\x03\x6a\xaa\x05\x70\xf0\x42\x9f\x49\x28\x68\x28\x47\x61\x6f\xa1\xe7\x54\xde\xab\x2c\x3b\x26\x91\xcc\xa7\xc3\x46\x5b\x50\xfa\x47\x93\x51\x53\xbf\xa2\xe3\x16\xd4\x4c\x04\xe2\x90\xbe\x2e\xc9\x8a\x22\x14\x1b\x2f\x28\xd5\xfc\xd5\x35\xd1\x73\xe2\x11\xdb\x23\xb7\xa4\x51\x51\x8f\x4e\x5f\x9c\x99\x4a\x77\x62\x05\x5e\x14\xc4\xb8\x20\x0e\x5e\xe8\x25\xd2\x29\x73\x70\xba\x89\x79\x24\x3d\x50\xd8\x12\x09\x5b\xca\x96\x3e\xe9\xde\xe8\x74\x1b\xff\x14\x5d\xe2\xf7\x4d\x5e\x73\x01\x4a\x7d\x81\x38\xe8\x66\x0f\x68\x04\x07\x95\xcd\xd3\x1c\x60\xa3\xcd\xd5\x59\xc1\x20\x94\x24\xff\xb5\xae\x34\xc2\x2a\x50\xf9\xf4\x77\xcb\xdd\x5d\xd3\x4e\x2b\xa3\xd6\x4d\xeb\x5f\x93\x15\x50\xf2\x15\xc4\xc1\x1d\xd0\x98\x73\x9d\x59\x75\xce\x4c\x50\x9d\x13\x11\x19\x8d\x7a\x3e\x6f\xc5\xe5\xd9\xf9\xde\xff\x42\x54\xd9\xf9\x1d\x54\xcf\xe4\xb2\xdf\xd0\x22\x02\xc0\xc1\x1d\x58\xda\x8b\xea\x24\xec\xc1\x7e\xbe\xd6\x6e\x6a\x4f\xf8\x6e\x1a\x33\x5f\x8d\x54\xb7\x2a\x39\x8f\xc5\xc7\x58\xe2\xe9\x8c\x14\x07\x74\x12\x00\x88\x83\x3b\xe0\xa6\xe1\xb6\x4a\x69\x37\xf2\x95\x14\x5b\xd0\xf1\xb2\x7a\xe0\x47\x7b\x0a\xe2\xaf\xb6\x6f\xa6\x14\x5b\x2e\x5e\x1c\x2d\xbd\x1b\x05\x7d\xcb\x1f\xc4\xc1\x1d\xe8\x0b\x22\xae\x31\x51\xbf\xcb\x65\x29\xe6\xc0\x81\xff\x5d\x50\x5f\xbf\x16\x3f\xc5\x84\xca\x4d\x83\xb2\x96\xb0\x87\x62\xe4\x0e\x74\x9c\x30\x88\x83\x6e\xf6\x80\x46\x70\xd0\x3d\xec\x34\x07\x4c\xfc\xbe\x97\x98\xce\xa4\x0d\xd4\x4a\x0f\xad\xcf\xac\x4c\xc4\xd7\xe8\x31\xa6\x30\x52\x2b\x0e\x6e\x77\x2b\xe1\x8f\x98\x8a\x40\x4d\x0f\x20\x0e\xee\x00\xb1\x55\xfb\x95\x00\xff\x17\x1d\xc4\x1b\x61\xcd\x97\x0d\x9b\x7e\xb3\xf1\x27\xeb\x8d\x15\xcf\xb4\xa6\xc8\x57\xbc\x5e\x27\x5b\x85\x8e\xe5\x04\x71\x70\x07\x98\x2d\x53\x89\xd2\x68\x0f\x5c\x3a\xd5\xb0\x02\x18\x1c\xf8\x64\x5f\x09\x2e\xf3\xc4\x8f\xbf\x7c\x2a\x5b\xd5\xc9\x13\xd4\xfb\xe7\x11\x62\x5c\x10\x07\x77\xa0\xca\x60\x42\x97\x74\x1e\x5f\x53\x3d\x8d\x76\x46\xda\x81\xcb\xa2\x96\xda\x44\xaf\xa3\xe4\xc2\xab\xf0\xcd\xdd\xdc\x4b\x83\xcf\x19\x10\xe3\x82\x38\xb8\x03\x14\x94\x4a\x4d\xe8\x1b\x21\x24\xb5\x51\x21\x73\xc3\x4e\x75\x09\x91\xcc\xf5\xa9\x9e\xf3\x79\x0f\xd4\x6e\xc6\xa8\x73\x1e\x9c\x47\x41\x38\x00\xe2\xa0\x3a\x00\x68\x04\x07\x2d\x28\x4e\xfd\xc4\x84\x7c\x64\x6a\xb7\x6d\x87\x68\xdf\x24\xd1\x1e\xa6\x7d\xe8\xf0\x0d\x1c\x9d\xa5\xc5\xe1\x64\x8d\x92\x2e\x9e\x92\x2e\xff\xcf\xd0\xf1\xbc\x20\x0e\xee\x00\x97\xfd\x67\x0a\x31\x86\x76\xaa\xbd\xca\xd0\xb5\x0c\xc5\x27\x22\xd7\x59\xc3\xd3\xbe\xba\xdf\xa6\x26\xf4\xc5\xcf\x2a\xd9\xba\x4b\x8e\x18\x17\xc4\xc1\x1d\x60\x25\x92\x26\xf2\x1b\x17\xdc\x99\x9a\x34\xc6\xd6\x61\xf2\x99\xf5\x53\xbc\xeb\x58\xbb\x24\xf0\x69\x90\x8f\xd9\x69\x43\x59\x47\x10\x3a\x65\x02\xc0\xc1\x1d\xc0\xf7\x92\x89\x7e\xcd\x79\x31\xaf\x9b\x48\x18\x53\xed\x77\xa7\x06\x39\x0a\x1a\x35\x41\xa4\xe9\xe3\xdc\xa0\xf0\x00\xf3\xda\x05\xe8\xcb\xc8\x20\x0e\xee\xc0\x68\x66\x65\x6a\x4f\xa4\xb3\x29\xce\xa7\x72\xe2\xfc\xde\x44\xef\xc8\xd6\xe4\x20\xac\x41\xa6\xfc\xbd\x64\xba\xec\xa8\x0b\x43\xd0\x46\x30\x88\x83\xea\x00\xa0\x11\x1c\xb4\xba\x3b\xf5\x44\x10\xbb\x68\x91\xbd\x8f\x71\x05\xbf\xcb\xbe\x67\x94\xe7\x71\x74\xcd\xf6\xee\xa9\x54\xcd\x9f\xbf\x7f\x57\x47\xf5\x6a\xca\x89\x7f\x24\x74\x22\x08\x80\x83\x3b\xc0\xf3\x4e\xc7\xfd\x23\x7d\x79\xec\xa3\x67\x3d\x56\x9a\x92\xc9\x13\x02\x9c\x89\xce\x97\x0b\x17\x77\x73\xa3\xa9\xf2\x33\x4a\x70\xa0\x71\x41\x1c\xdc\x01\xab\x54\x2f\xbd\x18\x91\xaf\x73\x15\x13\xb5\x8f\x6f\x32\x32\x05\x14\xe0\x50\x25\x16\xdc\x90\xf4\xd2\x72\x1b\x61\xa5\x1f\xe6\x86\x92\xba\x20\x0e\xee\xc0\x43\xcf\xaf\xa1\x28\x77\xc3\xbe\x7f\x6f\xeb\x8e\x37\xc3\x32\x25\xf0\x3e\x4c\xfa\x7a\x9d\x68\x89\xcf\x3e\x66\x16\x73\xb8\x97\x0f\x0a\xb0\x80\x38\xb8\x03\x2e\xb6\x83\x56\x23\x49\x38\x3f\xda\xd6\x1f\xdc\x9f\xae\x98\x6a\x19\xfc\x21\x89\xf7\xe2\x31\x7a\x49\x3e\xf5\x0c\x5d\x7f\x49\xe5\x65\x84\x03\x20\x0e\xaa\x03\x80\x46\x70\xd0\x52\xfb\x34\x07\xd8\x87\x65\xe9\x24\x48\x85\x03\x58\x4b\x57\x48\x63\x5f\x85\x1f\x33\x98\xc4\xe4\xd0\x7d\xcd\xcd\x1f\x77\x88\x9e\xb0\xb3\x4a\xbb\x80\x98\x3b\x88\x83\x3b\x70\x84\xe2\xee\xbd\x34\x67\x55\xc0\x7f\x8e\xf0\xfb\x65\x2e\xc2\x59\x3b\xeb\x10\x2e\xab\xb4\x03\xf2\xed\xbb\xe8\x13\xbe\xf2\x12\x50\xb3\x2e\x88\x83\x3b\xf0\xff\x31\xf7\x97\x51\x59\x7c\x7d\xff\x3f\x4c\x4a\xa7\x94\x81\x84\x48\xa7\x80\x52\x02\xd2\x9d\x22\xd2\x52\xd2\xd2\x88\x48\x77\x09\x28\x20\x25\x21\x28\x29\xa1\x88\xa4\x74\x48\x0a\x48\x97\x84\x34\x92\x22\x21\x71\xaf\xdf\x79\x9d\xc7\xdc\xdf\x6b\x0e\xd6\x77\xff\x1f\xf0\xe0\x7a\xfe\x5a\x9f\x59\xfb\xe0\xc5\x67\xf6\xec\x79\xcf\xde\x3d\x25\x53\x27\x44\x72\xef\x30\x54\xd2\xe6\x45\x8d\x57\x58\xba\xcb\xf9\xf2\x1e\x4a\xb8\xef\xcd\x7b\x2a\xee\xdd\x64\x73\x0b\x87\x8e\x2f\x01\x71\x70\x07\x38\xe2\xb2\x1d\xbb\x38\xc6\x54\xcd\xf5\xfa\x35\x0d\x8a\xe8\xe6\x73\x2a\x09\x71\x08\x6c\x7d\x18\xd7\x12\x0b\x0a\x2a\xc7\x32\xa1\xc0\x1e\x88\x83\x3b\xa0\x89\x35\x40\xce\x2d\xe6\x41\x25\x52\x46\x1f\x20\x2b\x25\xf2\xea\xe6\x87\x5b\xdd\xa9\x2d\x81\x84\x51\xef\x64\x73\x8f\x96\x1f\x30\x21\x1c\x00\x71\x50\x1f\x00\x04\xc1\x41\xcf\x3d\x67\xbe\x10\x6a\xb8\x29\x8b\xea\x18\xbf\x60\x13\x43\x11\x18\xd9\x3d\x66\x91\x13\xad\x60\xb2\xb4\x74\x38\x68\x9a\xb0\xae\x47\x73\x64\x0c\x9d\xdd\x0b\xe2\xe0\x0e\xdc\xc1\x63\xf8\x36\x3b\x62\xe9\xf0\x8c\xa2\x57\xe2\xcb\x85\xbd\xcf\x33\x61\xed\xc2\xe1\xd3\x4a\x7a\x3f\x2c\xaf\xa2\x89\xa9\xac\x3e\x46\xd4\x05\x71\x70\x07\x16\xe9\x44\x77\x88\xb4\x09\xe8\xcc\x3f\x28\xd5\xda\xd4\x8c\x92\x5f\xd0\xf6\xf1\xd3\x2e\xbf\xfa\xab\x7c\xd4\xbc\x63\xa8\xdd\x1c\x3a\x72\x0a\xc4\xc1\x1d\xf8\xc2\x26\xfb\x7a\x54\x49\x75\xbb\xf6\x8d\x95\xe9\xa9\x31\x4e\xc3\xdb\xf0\x88\x0c\x0f\xd5\xbc\x3b\x2f\x3f\x2f\xf5\xc9\x6d\x98\x42\x3b\x0e\x81\x38\xb8\x03\x2c\x4e\x7d\x28\x54\x3d\xbe\x52\x9d\x97\xc9\xb4\x7a\xba\x2c\x26\x1a\xc4\x15\xc2\x03\x48\xbe\x7c\xd0\xa5\x5a\x2d\x89\xb9\xf5\x1a\x3a\x63\x14\xc4\x41\x7d\x00\x10\x04\x07\x3d\x84\x9e\xe5\xc0\x23\xdf\xea\xb6\x85\x88\xb7\x5f\x49\x4d\x6c\x70\x50\x27\x22\x44\x62\xef\x85\xcc\xa8\xb3\xa8\x1d\x4d\xae\x2c\xde\x79\xeb\x5a\x08\x2d\x02\x82\x38\xb8\x03\xa1\xaa\xe1\x0c\x49\x9f\x52\x78\x6f\x8c\x4b\xbf\x39\xb0\xe2\xe1\x5b\xa0\xfb\x26\xc0\x35\x10\x69\xdc\xd9\x7d\x88\x8f\x76\x50\x04\xcd\x07\x40\x1c\xdc\x01\xee\xd2\x85\x9f\xea\xaf\xb3\x3a\xec\x25\xef\x9f\xf8\xbe\x67\xd9\xbb\x42\xc5\xad\x35\x99\x23\xdc\x55\x30\x67\x40\x1e\xd9\x4a\x0f\xed\xc7\x0c\xe2\x90\x1c\x50\x52\x24\x34\x8f\x4b\x5a\x12\xfc\xf4\xab\x34\x27\x37\xf2\xdd\x2a\xc7\x55\xcb\xfa\x94\x18\x1a\x05\x12\x73\x32\xd6\xb1\x16\xe8\x45\x13\x88\x83\x3b\x50\x11\xa6\xa1\x44\xfb\xd8\x3c\x3f\x29\x9e\x30\x9d\x8c\x98\xf2\x8b\x64\x30\xcb\x3e\xe1\xa5\xa7\x78\x89\xce\x23\xb8\xc6\x6b\xe5\x7f\x11\x0e\x80\x38\xa8\x0f\x80\x82\xe0\xa0\xc0\xe0\x7f\x83\xe0\xf5\xc8\x41\x70\xfd\x66\x99\xcd\x02\x46\x9e\x9c\x98\x4f\xae\x4d\xbc\x45\x3f\xec\x2d\xe7\xa8\xb7\xe4\xbf\x5e\x5a\x15\xa4\xd4\xe8\xb9\xb6\xe0\x69\x73\x6e\x6b\x18\xa0\x0b\x9d\xe5\xe9\xd7\x27\x14\x96\xfc\x9e\xe2\x85\xdb\xc6\x22\x23\xea\xca\xeb\xd2\xa6\xe6\x39\x29\xcf\xad\x0a\x04\xfa\x7c\x65\xf8\x15\x06\xb2\xea\x11\x7f\x1f\x10\x87\xb4\x93\x1d\x47\xe9\x5b\xa9\x89\x95\xf7\xad\x2b\x24\xdf\x17\x97\x34\x1f\xf9\x7b\xfa\x3d\xb5\x41\xad\xf1\x14\xeb\xa7\x15\xb9\x52\x29\x04\xed\x90\x07\xe2\xe0\x9e\x4e\x7d\xe3\xaa\xfc\xe9\xf9\x69\xc1\xdd\x53\x60\xef\x33\x35\x8b\xf7\xf7\xd2\x81\xce\xcd\x81\x2b\x0a\x2b\xb5\xfd\x94\xd3\xa1\x9d\x07\x88\xba\x20\x0e\xee\xe9\xdc\x25\x0e\x5f\xc5\x82\x54\xc9\x99\xaf\x98\xa6\xac\xee\xd8\xcf\x43\x9f\x4e\x1e\xa1\xe1\x27\x7c\xc9\xdd\xc3\x7a\x98\x26\xee\x09\x9d\xe3\x0e\xe2\xe0\x9e\x5a\xa2\x50\x94\xf0\xea\xbc\x35\x69\x60\x52\x14\x69\xb5\xf2\x52\x6c\xb8\xe0\xd5\x7b\x64\xf8\xb6\x34\xaf\xcf\xac\x99\xc7\xbe\x11\x13\x3a\x0e\x07\xc0\x41\xbd\x0a\x10\x04\x07\x45\x82\xcf\x0e\x82\xeb\x7e\x3b\x22\xcd\xdc\xf5\x56\x89\x55\x13\x5e\xf8\x73\x64\xc7\xfc\x85\xf5\x11\x43\xca\x63\xc5\x84\xd0\xda\xd5\x66\x1a\x76\x4f\x07\x44\xa8\x1a\xc4\x21\x07\xc1\x7b\x75\xd8\xf5\xc5\xee\xee\x1f\x98\xb7\x25\xe2\x17\x95\x0a\x12\xa4\x48\x59\x08\x67\x58\xe1\xdc\x59\xb3\x14\x1e\xf1\xc9\x2d\x8d\x45\x54\x06\x71\xc8\x41\x70\x4d\x2d\x6a\xc5\xee\x53\x36\x0d\xea\x90\x81\x54\x5b\x89\xc1\x97\x3d\xad\xf5\xa3\xcf\x7a\x1c\x24\x6e\x77\xa2\x15\x0b\x5d\x27\x5a\x41\x54\x06\x71\xff\x09\x82\x8b\xff\xaf\xfb\xb7\xc6\x29\xc1\xf1\xdf\x97\x41\x02\x11\x53\x0b\x51\x97\x9f\xb6\xb7\x3c\x6e\xdd\xf2\xe0\x5c\x1e\x64\x46\x29\x36\xb1\x16\x26\xc8\x44\x04\xc1\x41\xdc\xff\xfc\xce\xff\x2b\x08\x4e\x74\x55\x7a\xb7\x1f\x05\x7f\xf3\xc8\x6b\x5b\x39\xa8\x7e\x20\x56\x30\x3c\xe1\x4f\x57\x78\xc9\x65\x5c\xd5\xae\xb8\x9c\x57\xc9\xa6\xff\x0c\x82\x8b\x32\x39\xb3\xab\x7f\x49\x31\x98\x56\xea\xb3\x17\x2d\x54\x8d\x10\x7f\x8f\xc7\x57\xb7\xd7\xb8\xc6\x6d\x5f\xe5\xfb\xa3\x8a\xf2\x9f\x49\x5e\x79\xce\xa5\xd6\x15\x35\x1b\x62\x8b\x3a\x07\xbc\x0a\xb5\xda\xd5\x39\x7e\x0c\xcd\x5b\x12\x72\xa5\x9a\x62\x5b\x0a\x27\x18\xb7\xda\xfe\xef\x05\xc1\x41\x83\x3b\x23\x08\x4e\x2e\x7b\x8c\x95\x9a\xee\x2e\xa0\x3f\x19\xb8\xa4\xb9\x2f\xbb\x93\xf1\x0a\xf3\x29\x55\x31\x87\xe6\xb7\x69\xce\xe1\xc8\xcd\x67\x63\xff\x40\x31\xa4\xf1\x5b\x7f\xea\xd5\x24\x0b\x90\x73\xd5\xbe\xdb\x43\xc1\x7b\xb1\x91\x97\x28\xa0\x34\x60\xfd\x60\xc3\xed\xe5\xfd\x8f\x7c\xf3\xff\x40\xb7\x42\xbd\x8c\xe8\xf4\x4f\x4f\xbe\xf0\xcb\x0c\x99\x63\x89\xb0\x57\x8c\x09\x46\xfc\x5e\xaf\xd0\x6f\xf8\x7a\xc2\xff\x12\x77\xcc\x01\x0a\x82\x83\x2e\xff\xdf\x20\x38\x8a\x34\xbc\xff\xc7\x07\x90\xd1\xef\x78\xb2\xbd\x9d\x9b\x88\xfc\x41\x6f\x72\x7f\x91\x31\x26\x74\x9f\xbf\x33\xe2\xa5\xcc\x3a\x51\x11\x13\xdf\x36\xf6\x79\x2c\x9d\xfb\x22\x07\xc1\x51\x9e\xfc\xb9\xf1\xea\x89\x88\x52\x51\x77\xd3\xaa\x71\x11\x3e\xd1\x29\x8f\xd2\x61\xad\x83\xfa\x6f\x32\xd4\x7d\x36\x5a\x3c\x8f\x0f\xe7\x71\x59\x14\x11\xa4\xcb\x2e\x4b\xef\x04\xd7\x6d\x70\x4f\xab\x66\x47\x0d\xd0\x7a\xe3\x50\x1e\x0b\x51\x64\x3a\x0d\x2f\x99\x4e\x09\x88\xed\xf6\x7e\x9a\xb1\x3b\x97\xd1\x22\x07\xc1\xe7\xba\xcb\x2f\x0d\x15\x0c\xc7\x8f\xad\x86\x7f\x47\x79\x8d\x7d\xc3\x5a\xb3\x15\xa7\xf4\xe9\xbd\xb4\x35\xbb\xec\x54\x17\x16\xf6\xe8\x73\x19\xad\x33\xd2\x65\x0f\xb6\x2d\xd8\xdd\xb0\xd3\x1d\x08\x1f\x1a\xd2\xe6\x36\xa8\x2c\x57\xad\xcf\x6c\x1f\xcb\x56\x3f\x61\xb1\xda\x08\x97\xe5\x9b\x38\x97\x97\x40\xbe\xc8\x41\xf0\xec\xcb\xaf\xba\x50\x97\x4b\x9d\x49\xff\xf8\xe7\x1e\xde\xdb\x4d\xe1\xb8\xd7\x7a\x84\x2e\xf4\x82\xe8\x54\x4b\x8f\x73\x7c\xb4\xac\xee\x5c\x46\x9b\x8c\x74\xd9\xd0\xf5\xbe\x21\xce\xac\x43\x9f\x3f\x6f\x70\xb4\xc5\x9e\xa9\x33\x55\xd1\xc7\xd5\xbc\x7d\x5b\x95\x10\x51\xf5\x5c\xa2\xdf\x56\x37\xfd\x5c\x46\x8b\x1c\x04\x4f\x25\x9f\xc1\xe6\x3c\xfd\x20\xde\x7a\x4c\x92\x4d\xed\x8e\xf1\xc3\x96\x6e\xd2\x4c\x81\xc5\x3e\x89\xde\x0a\xfb\x48\x67\xca\xfd\xfc\x0e\xc9\x01\xfd\xa7\x9e\x35\x81\xd2\x20\xae\xba\x33\xb8\xe2\x48\x7c\x27\x7e\x28\xaf\x41\x45\x65\xc7\x13\x73\x9a\x39\x50\x57\x9a\x60\x53\x01\xbf\x2d\x5b\x8a\x11\x0a\x82\x83\x38\xa4\xc4\xc7\xdf\x34\x39\xbd\x2a\x9e\xee\xab\x17\x72\x27\x96\x5e\x37\xe5\x14\x0a\xa1\x51\xcc\x1d\x1b\xe8\x26\xeb\xfe\x8d\x50\x09\xa5\xf7\x83\x12\x1f\x00\x0e\x3e\x81\xd2\x76\x93\xc0\xcc\x25\xf5\x21\x9e\x1e\x90\xd2\xe3\xa9\x15\x36\x36\x69\xd7\xc0\x5f\x6f\x67\xb1\xbd\xe7\x20\xbc\x9a\xbf\x9c\x0c\xed\x60\x0e\xe2\xe0\x13\x28\xae\x57\x26\xa9\xa6\x7f\xed\xf9\x8d\x18\x36\x79\x4a\x98\x15\x79\xef\xcf\x8b\xdf\xf5\xc2\x0d\x73\x34\x73\x17\x6b\x10\xb0\x79\x06\xa5\x08\x40\x5c\x80\x04\x8a\xef\x3f\xeb\x5e\x6b\x48\x7f\x5b\x3f\x7f\x03\x03\x0f\xdf\x2b\xf9\xd1\xcd\xf5\x2d\x6a\x7d\xbf\xa7\x7a\x05\x06\x7f\x27\xfd\x9a\x4d\xa5\xf3\x38\x3e\x21\x82\xe0\x20\x2e\x40\x02\x85\xd6\xd7\x2f\xe8\x3f\xfd\xf9\x5f\x9e\xf5\x40\x5d\xf3\x2c\x05\x44\x8a\x6f\x17\x99\xbe\xfe\x33\x71\x6c\x17\xa9\x1b\x3d\xf4\x71\xed\x30\xb5\xec\x29\xea\xe4\xf3\xa8\x06\x75\x5c\x63\xc6\xde\x6c\x7f\xc4\xd0\x41\x1c\x5c\x81\x92\x8c\xee\x09\xb3\xd9\xfd\x5e\x2e\xc2\x4e\x93\x61\x5d\xc3\x5f\xa7\x0e\xb4\x82\x1a\x43\xe5\x83\x5a\x18\x2d\x43\x2f\x66\x47\x6f\x23\xea\x82\x38\xb8\x02\xb3\x1f\x05\x2a\x99\xf0\xb9\xbf\x15\x8e\x8d\x86\xdf\x9c\xf7\xb5\xcb\x4c\x7a\x9d\x5a\x51\x7b\x0d\xed\xb6\x98\x8a\x93\xd5\x3c\x7e\x15\xa2\x2e\x88\x83\x2b\x70\xd8\x88\x27\x21\x11\x70\x18\x75\xc9\x32\xa7\x35\x02\x73\xe1\xe5\xc5\x5f\x2f\xa9\x9b\x7e\xe2\xcb\x76\xa7\xe0\xa9\xdd\x66\xe3\x0c\x44\xd4\x05\x71\x70\x05\xe6\x5b\x2e\xca\x6d\x3c\x8f\xec\x50\xd7\x0a\x67\x70\xc9\x5c\xb9\xc9\x2d\xe9\xe1\xb2\x87\x2b\xc5\xb6\x49\xbd\xe6\x13\xd3\xb7\x5e\x85\x98\x43\x83\xb8\xff\x2a\xf0\x3f\x37\xcb\x7f\x71\x00\x74\x0b\x3b\xcb\x01\xac\x54\x1a\xfd\xab\x36\x17\x78\x96\xa9\xd7\xd8\x5e\xf3\x05\xff\xa8\xa2\xc0\x94\xd7\xe7\x10\xf6\x6e\x54\x7f\x15\xd1\x74\x27\x1c\xfa\xa0\x16\xc4\xc1\x1d\x68\xe3\x45\xbd\xd4\xf8\x45\x8a\x00\x7f\x2e\xb7\xe7\xa1\xb0\xcd\x1f\xda\xb4\x8a\x91\xf2\x34\x94\x36\x22\xff\x8d\x00\xeb\x27\x46\x89\x88\xba\x20\x0e\xee\x40\xd1\xdd\x23\xb5\x84\x7e\x52\x16\xa5\xc3\xca\xc2\x61\xb7\x5b\xfe\x3c\x09\x27\x87\x21\xa3\x62\x38\xc7\xf7\xdc\x82\x2e\xfd\xd1\x86\xd6\x29\x41\x1c\xd2\x6e\xd0\x2a\x6e\xdf\x24\xde\xe5\xd7\x26\xc5\xd9\xdb\x99\x8d\xb5\x73\xac\x7f\x93\xbf\x38\xf0\x14\x5d\xdf\x90\xec\xe9\x1b\xda\xe4\xdb\xd0\x31\xcb\x20\x0e\xee\xc0\x73\xea\xb0\x32\xbf\x22\xdf\xb2\xda\xed\x35\x87\x57\x54\x7a\x7a\xcd\xcb\x2a\x27\xc1\xaa\xf3\x7f\x18\x92\xd9\xba\x2d\x07\xfc\x8e\x11\x0e\x80\x38\x84\x03\xff\x99\xb9\xfc\x8b\x03\xa0\xf9\xc4\x59\x0e\xc4\xc4\xae\x5e\xba\x57\xd9\x7e\xfc\x7b\x49\x5e\x5c\x61\xb0\xbb\x53\x0b\x47\x3b\x30\x46\xcb\xed\xe0\x5b\xd2\x68\x83\x07\xfa\x3c\xd4\xb2\x41\x1c\xdc\x81\xd9\xc7\x4b\xb7\xc5\xac\xa9\x04\x13\x9e\xf6\x0a\x51\x71\x52\x38\xf8\xb2\xed\x08\x7c\xe9\xa1\xcc\x0a\x2a\x18\x28\x8e\x14\x09\x27\x85\xfe\x5f\x01\x1c\xdc\x01\x2c\x97\x30\xca\x00\x46\xfb\x57\xfa\xb5\xbf\x54\x5f\xac\xe6\xa0\xcc\xe7\x58\xeb\xbd\xcc\xf4\x7d\x59\x93\x3d\x23\xb5\x8d\x65\x5f\x08\x39\x0b\xe0\xe0\x0e\xa0\x46\xc9\xf2\x4d\x11\x69\xe2\x7f\x4a\xd8\x6d\xf0\xe1\xb3\x78\xa7\xcd\x41\x7d\x2a\x84\x53\xcc\x27\x6f\xce\x67\x1d\x58\x3b\x38\x80\xa8\x0b\xe2\xe0\x0e\x44\xc4\x96\x25\x29\xa4\xd1\x4c\x11\x15\x70\x38\xf4\x46\x37\x79\xbf\xd5\x53\xf8\x35\xfb\xa9\x28\xc2\xcf\xf8\xe7\xfe\xb2\xf6\x3d\x0a\x84\x03\x20\x0e\xea\x03\x80\x20\x38\x68\x72\x77\x96\x03\x2a\x8e\xed\xe6\x83\xda\x1c\x4d\x37\x79\xe2\xfe\xbc\xf8\xcb\x3c\x38\xdf\xb4\xe9\x57\xca\x6e\x2e\x69\xbb\xdf\xa9\x9b\x32\x4e\x04\xdd\x5e\x41\x1c\x52\xf8\x8f\x36\xad\x49\x36\x77\x3e\x7a\xe9\xbb\xce\x2b\x25\xed\x21\xcc\x16\x95\x7c\xe9\x10\x8c\xac\x0c\xc6\x75\xad\x4f\x8a\x6e\x3e\xda\x50\xf8\x0f\xc0\x21\x39\x50\x9a\xb1\x6b\x3e\x98\x9f\xa5\x56\xb9\x3b\x7b\xa9\x86\xfd\xc1\x74\x55\x10\x41\x3f\xcd\x6b\xf7\x8f\x8e\x65\x7f\x45\x66\xa7\x68\x20\x07\x00\x1c\xdc\x81\x3f\x94\x68\x64\x39\xc2\x8d\x09\x7a\x59\x1f\x4b\xf0\x0c\xbe\x35\x08\x19\x5d\x28\x7a\x77\xc8\x6a\xdb\x7a\xc9\x7c\x1e\xab\xb7\xed\x3d\xa2\x2e\x88\x83\x3b\x60\x8f\x55\x37\x6f\x44\x19\xa2\xd9\xa7\x12\xa6\x6e\x92\x91\xda\xbe\xd4\x9a\xf7\xa3\xad\x8e\x8b\xd8\x84\xe7\xb5\xec\xdc\xc2\x8f\x11\x84\x03\x20\x0e\xea\x03\xce\xff\xee\x00\x68\xa6\x7d\x96\x03\xd3\x47\x24\xdf\x67\x15\xc9\xf0\x59\x46\xc6\xef\x8b\x87\x5d\xdc\x64\xbe\x7e\x7f\x08\x2d\xdb\x3e\x24\x85\x26\x0b\xff\x88\x56\x0a\xda\xb0\x05\xc4\x21\x7d\x14\xd4\xa7\x7e\xef\x6d\xd8\x82\xf5\x13\x07\xaa\x1a\x6f\x89\x32\x1c\xca\x3b\x2f\x03\x3b\x04\x6e\x8a\xb3\xf9\x56\x3c\x3f\x6e\x51\xfa\x09\x7d\x14\x04\xe0\xe0\x0e\xb4\xcd\x69\xe9\xf4\x39\x13\xe8\x15\x89\xa3\xf7\xf6\x9b\x56\xfe\x8a\x63\xd1\x35\x2f\x7b\x7f\xbf\x2f\x54\x38\x4c\xec\x0b\xd3\x3a\x14\x5c\x07\x71\x70\x07\xb0\x68\xae\xa2\xdd\x0d\xd6\x92\x21\x1e\x29\xdf\xbb\x74\x7d\x6e\x89\x32\x70\x31\x89\x79\x93\xc6\x9a\xd7\x5a\x04\xfb\x3b\xd1\x9f\xff\xbf\x5b\x00\x0e\xee\x00\x53\x7c\x08\x2e\xe6\x20\x8e\x26\xd9\xd2\xe7\x22\xdd\x13\xf9\x39\xbe\x0b\x0a\x9f\xdf\xdc\x3c\x9e\xd3\x62\xb6\xd8\xb6\x68\xbf\xd1\x8a\x70\x00\xc4\x41\x7d\x00\x10\x04\x07\x3d\xf6\x9c\xe5\x80\x8d\x62\x9b\x97\x9d\x35\xbf\xe3\xe5\x5f\x97\x7a\x9e\xe0\x61\x1e\x25\x65\x5e\xf1\xd2\xbf\x7e\x01\x67\xd7\xc0\xcb\x52\x82\xcc\x07\xfa\xd0\x0a\xc4\xc1\x1d\x78\x97\x74\x4d\xe4\x86\x67\x4c\xdd\x73\x42\xd7\x81\xef\xb3\x56\x53\x9c\x0e\x1e\xa2\x12\x03\xc5\xf3\x34\x14\x85\x0c\xdc\x4c\x5e\x26\xd0\xfd\x15\xc0\xc1\x1d\x08\xc9\x96\xde\x41\xb1\x76\xb6\x90\xfd\x28\x56\x8d\xe5\x3a\xf2\x8e\x2d\xee\xf9\xd7\x43\x5c\x91\xad\xaf\x8f\x8f\x48\xe9\x86\xd7\xbd\xa1\x77\xb6\x00\x0e\xee\x00\x3a\x3f\xef\xfc\xb0\x96\x82\x55\x94\xd3\xf3\xa2\x1c\x91\x41\xcb\xda\x9f\x38\x36\x3a\x8a\x5a\xbd\x5f\x2a\x30\x13\x27\x15\x8a\x2f\x23\xea\x82\x38\xb8\x03\x0f\xbe\x67\xd2\xbe\x8e\xdf\x8d\x2a\xab\xf5\x68\xb1\xb5\x69\x52\x26\x7a\x36\xfe\x42\x43\x3e\x8d\x61\xad\xe5\xf1\x9d\x94\xcf\xbc\x2e\x08\x07\x40\x1c\xd4\x07\x92\xff\xdd\x01\xd0\x33\xe8\x59\x0e\xa0\xdb\x06\x25\xb7\x7c\xef\x7b\xd7\xac\x71\x55\xf2\x8a\x3b\x1e\x61\x07\xfd\xc2\x7e\xb9\xa1\x1f\xa9\xa4\x39\x4e\x8e\xad\x48\x33\xf4\x81\x05\x88\x43\x3a\x66\x7c\x2b\x96\x16\x4d\xbc\xc2\xc3\x8e\xe1\xda\x2a\xd6\xcb\xc1\x9d\x8f\x0c\x65\x07\xc7\x84\xb2\xe4\x87\xd8\x28\xd7\xf0\x76\xfb\xa0\x47\x4e\x10\x07\x77\x40\x6b\x21\x8f\x17\x1f\xa7\x32\xf3\x6e\xcb\x93\xc8\x9d\xb7\x63\x4d\x8a\x8f\x63\x3a\x63\x38\x2d\x88\x2c\xb4\xa5\x2a\x51\xcc\x96\xf4\x11\x75\x41\x1c\xdc\x01\xe6\x29\xfa\x95\xad\x30\x9a\x09\xf7\xce\x27\x42\xdf\xc7\x24\xf4\x15\x2a\xe2\x9f\x93\x0e\x6b\x73\xd5\xdc\x28\xf3\xf5\x15\x3b\xc2\x41\xd4\x05\x71\x70\x07\x9a\x51\xef\xd4\x76\xf7\xce\xaf\x1b\x8d\x8e\xce\x55\xbe\xa2\x4a\x6d\xae\xea\xd6\xae\xec\x69\x74\x4c\xf3\xd8\xbb\xb6\xff\x84\x69\x07\xe1\x00\x88\x83\xfa\x00\x28\x08\x0e\x5a\x56\xfc\x6f\x10\x1c\xa5\x0f\x69\x09\xc3\x2f\xee\xd2\x57\x3d\xd5\x7c\xab\xeb\x8e\xe8\x28\x3a\x7d\x18\xc6\x6a\x5b\x69\x71\x5e\x3b\xd2\xba\xa4\x2f\xac\x5d\x08\x6d\x34\x42\xcf\x65\xe5\x04\x39\x08\xae\x52\xf1\x2c\x8d\x60\xfc\x6a\x09\x9f\x06\x5d\xa3\x5a\x6f\x02\xff\x8b\x48\x2c\x09\xf6\x09\x3e\xb1\xc5\xb1\x62\x82\x3a\x74\xe3\xae\x73\x59\x27\xda\x47\xba\x2c\x86\xcb\x83\xc0\xfe\xcd\xe1\x6a\xfc\xe8\x9b\xd9\x84\xbb\x1e\x75\xc3\xfa\x6c\xdb\x2f\x3d\x50\xf1\x22\x24\x83\x64\x1d\x72\x8d\xe4\xcf\x65\xb4\x67\xec\x08\xae\x5d\x7b\x23\xe0\xe1\xe9\x7c\xea\x72\x40\x6f\x9e\xf2\x93\x5e\x41\x34\xb2\x90\x16\x4f\xcd\x5e\x94\xc9\x85\x3d\x65\x53\x11\xcb\x73\x19\x2d\x0d\xd2\x65\x73\x0d\x9c\x3e\x33\xee\x2e\x1e\xe8\x2e\x97\xb3\x54\xbd\xe7\x8b\x53\xca\xfb\xe0\xa3\xb1\xbd\xac\xc9\x94\xc5\x1d\x9a\xe2\x34\xe9\x76\x2e\xa3\x45\x0e\x82\x8b\xf6\x15\xf6\x94\x5e\xd9\x89\x29\xb4\x19\x25\xc2\xaf\x9d\x55\xc8\x11\x5b\x6e\x20\xd1\xb1\xc5\xbb\x9b\xaf\xc6\x2c\x4e\xab\xdb\x70\x2e\xa3\xbd\x8f\x74\xd9\x51\x4c\x9d\x34\x9e\xdc\xf1\x2e\xfe\x57\x5f\xcd\xfa\xd2\xcc\xd1\xc2\x45\xc6\x2b\x3c\xe6\x52\xff\x7e\x89\x6e\x7b\xa9\xeb\x3e\x52\x70\x2e\xa3\x45\x0e\x82\x1f\x56\xcf\x68\x9b\xbd\xb7\x90\xc3\x6c\x56\x1a\x97\x0e\x68\x4b\xe7\xa9\x4f\xb2\xad\xa5\x28\xd8\xb8\x92\x56\xb4\x91\x5a\xf2\x63\xfa\xdc\xd6\x00\x41\xff\xa9\x67\x35\x7a\xce\xfa\x1d\x31\x63\xd1\xa1\x0a\xf4\x1f\x69\x05\x5f\x95\xab\x17\x17\x64\x64\x07\x1b\x16\x9e\xb1\x15\xd4\x44\xfd\xcd\x71\x72\x90\x87\xbe\x74\x01\x70\xf0\x46\x8f\xbe\x60\xeb\xce\x70\x81\xa4\x9d\x33\x6b\xf8\x75\x33\x4b\xc7\xa1\xbe\x1d\x1d\x17\x8e\xf7\x37\xee\x75\xe5\x9c\xaa\x98\x9d\x87\xd0\x2e\xb0\x20\x0e\xde\xe8\xa5\xee\xae\x04\xce\x64\x7b\x56\x0d\x12\x9b\xfe\xdd\x71\x3e\x8e\x35\x6e\xee\x29\x52\xff\x42\xb5\xa7\x4d\x43\x57\x83\x27\x11\x0d\x3d\xf8\x81\x38\x78\xa3\xbf\x8f\x2e\x75\x74\xfb\xe5\x90\xc7\x8f\xa6\x1f\xa8\xf3\xfa\xeb\x1b\xe8\x31\xc9\x5d\x3c\x04\x93\x6e\xbf\x9e\x51\x1f\xa3\xbe\xd0\xa1\x40\xd4\x05\x71\xf0\x46\x8f\xf7\x22\x59\x51\xe1\xd1\x0e\x5e\xc3\x1b\xa7\xdc\x25\x9c\x1b\x26\xdc\xb8\x06\x29\xa2\x0b\x9c\xf8\xef\x57\x96\x09\xc2\x0b\x6e\xf5\x21\x1a\x3d\x88\x83\x6e\xf6\x7d\xff\x7e\xb3\x07\xb5\xcd\xb3\x1c\xa0\x9e\xb9\x35\x2a\x76\x40\x61\x10\xc6\x1e\x50\x6d\x5f\x58\xa7\x78\x29\xc5\xee\x5d\xd5\x57\x37\xca\x48\xda\x1e\xea\x21\x0f\x07\xe8\xa0\x6c\x10\x07\x77\xc0\xfc\x52\xa6\xab\x55\xcd\x5b\xc6\x5f\xd7\x88\x03\xf6\xeb\x02\x8f\x8b\x75\xa6\x46\x85\x4a\xa6\x9e\xb2\x67\xa2\xe4\xa2\xc4\xb2\x2b\x21\xea\x82\x38\xb8\x03\x86\x05\x92\x5e\xf7\x63\x3a\x4a\xff\x8c\xb3\xdd\x32\x18\xbb\x28\x63\x95\xfa\x82\xb9\xd5\x9b\x8f\xb2\x8e\x4e\x76\x66\xda\x13\x1d\x7a\xe1\x0d\xe2\xe0\x0e\x7c\x9f\x36\x9b\xad\x27\x5c\xb5\xf5\xa7\xe1\xc7\x2d\x58\xfc\xba\xe0\x44\x9a\x80\x81\x9d\x47\xeb\xa2\xe9\xdf\xdb\x9c\xcb\xa9\x56\x81\xa8\x0b\xe2\xe0\x0e\x54\xe0\x0d\xe8\x98\x63\xda\x34\xe3\x84\x2a\xf7\xfc\x40\x1d\x0a\x6a\xb1\xff\x68\x68\x4b\xc2\x13\xae\x7d\xa0\x61\x1d\x3e\xb6\x35\x0e\x05\x3e\x00\x1c\x74\xb3\x07\x04\xc1\x41\xf7\xb0\xb3\x1c\x58\x3c\xb2\xa6\x53\x71\x3b\xe5\x5b\xe3\x7a\xee\x62\x48\xfa\x85\xb4\x63\xb0\x34\xb0\xeb\x03\xdb\xfb\x90\x88\xb8\x3a\xaa\x46\x4a\x68\x87\x0d\x10\x07\x77\xc0\xd3\x7e\x05\x3b\x6f\xa8\x09\xed\x4b\xe5\xe2\xb5\x2b\x5a\x64\x52\x87\xc2\xfc\x46\xed\x62\x52\x98\x73\x57\x02\x24\x3d\x23\xe4\xa0\x5d\x9b\x41\x1c\xdc\x01\xa6\x3d\x7f\x91\xa8\xba\x3c\x33\xa9\xd9\x5b\xc1\x6e\xb1\xa4\x38\x0f\xac\xf4\x55\x2c\x2c\xf1\xd7\xd2\x50\x4a\x52\x17\x08\xc7\xa0\x45\x05\x10\x07\x77\x20\xb4\xab\xec\xea\x3b\x3b\xdb\xab\x8e\x9f\xb8\xae\x67\x06\xb8\x8b\x63\x9a\xa4\x69\x4b\x4e\x39\x5a\x95\xda\x51\x19\xb9\x3e\x0b\xe7\x86\x42\x4a\x00\x0e\xee\x00\xab\xd6\xb7\x80\x8e\x48\xbb\x2c\x13\xee\xbf\xaf\x63\x2c\x04\x1f\xa2\x6a\x5d\x98\xe1\x47\x1f\x1a\x5b\xa7\xfc\xee\xb6\x9a\x1c\xd8\x8b\x70\x00\xc4\x41\x7d\x60\x1f\xb0\x23\x38\x60\x42\x71\x96\x03\x84\x6c\x38\x84\x99\x8a\xe8\x97\x27\x14\x86\xc7\xee\xb3\x3c\x5d\xac\xd8\xec\x24\xac\xd7\xe4\xd5\xf9\xe6\xd6\xfe\xe0\x45\x6b\xe1\x0b\xc4\xd8\x41\x1c\xdc\x01\xd7\x05\x37\xd3\x2b\x4b\x6e\x4c\xe2\xae\x86\x29\xa2\x36\x63\xef\xc8\x43\xec\x42\x3e\x1c\x3c\xa1\x7d\xec\xfa\x8b\xd6\x92\x2a\x14\x3a\x5e\x08\xc4\xc1\x1d\xc0\xa8\x8e\x0c\x5b\x09\x73\xbc\xa8\x25\x36\x68\xd7\xb6\x35\xb2\x4a\xe7\xb1\x39\xf2\xe9\x59\x75\x24\x36\x89\x2e\xf9\x9b\x5f\xc9\x50\x08\x18\xc4\x21\xed\x06\xad\x96\x67\xcd\x71\x6b\xbc\xd2\x80\xfb\xfa\xa9\xde\x0d\x9f\x6c\xf7\xd0\x37\x38\x97\xfa\xb0\x52\xd2\x45\xe7\xc6\x0e\xa4\xcd\x2f\x40\x1f\x1b\x01\x38\xb8\x03\x62\xbb\xd6\x8c\x0f\xbf\x7c\x2b\x3f\x5e\xe2\x89\x18\x0c\xbb\xf2\x94\x3c\xc4\x40\x7e\x74\xd6\x0f\xe7\x9b\x30\x0a\xde\x83\x65\x85\x43\x84\x03\x20\x0e\xea\x03\x80\x20\x38\x68\x76\x77\x96\x03\xbf\xd2\x51\x76\xf7\xcd\xee\xb2\x3e\xfd\x3b\x19\x6d\x86\x43\x28\xf9\xcd\xeb\x01\x6a\xfa\x38\xfe\xe2\xdd\xa6\xe7\x22\x6f\xc3\xe2\x7d\x11\x63\x07\x71\x70\x07\xdc\x97\x14\x08\x2e\x6f\xb9\x54\xaf\x85\xa0\x5a\x9a\xe3\x73\xb9\xd4\xce\x1f\x17\x8a\x11\xdf\x5d\xd9\x6f\x9f\x70\x2e\x5d\x92\x11\x42\xd4\x05\x71\x70\x07\x2c\x03\xa7\x5a\xbe\x75\x37\xd0\x5c\x94\xdc\xc1\x09\x0b\x91\xfb\xa0\x5b\xc8\xc0\x9b\xc0\x1f\xe5\x9f\x35\x57\xb4\xe1\x53\xe8\x0e\xbd\xbc\x00\x71\x70\x07\x66\xa2\xe9\xb7\x46\xd9\x25\xb6\x7b\x2f\x77\x10\xf8\x3a\xcd\x13\x47\xcf\xbf\x7c\xb3\xe0\x46\x6f\xc6\xd8\xea\x42\xb7\x59\x67\xec\x89\xa8\x0b\xe2\xe0\x0e\x54\x47\x3d\xf9\xa0\x75\xd8\x61\x1c\xec\xf9\x49\x44\xf9\xd3\x48\xc3\x75\x26\x94\x74\xce\xf2\x66\x4d\xd9\x43\x7b\xa6\x4d\x6e\x5a\x62\x84\x03\x20\x0e\xea\x03\x34\xff\xee\x00\x68\xaa\x7d\x96\x03\xa8\x76\x39\x24\x37\x99\xff\x88\xe1\x45\xdf\x8b\x2a\x5f\xca\x5d\x60\x54\xe2\x78\xc9\x90\x63\x15\xef\x7e\x6d\xea\xc6\x5e\xa2\x2d\x27\xb4\x08\x0e\xe0\xe0\x0e\xbc\xc6\xcc\x2c\xa2\x6f\xc8\x4b\x6c\xf9\xb5\x6e\xfd\xc7\x72\x53\xf6\xd3\x56\x98\x71\x63\xe3\x60\x76\x44\x7c\x57\x8a\xc3\xc7\xd1\x7d\x44\x5d\x10\x87\x14\x02\xfe\xd9\xa1\x6c\xc4\x25\x10\x23\xb7\x52\xcb\xba\x66\xdd\xf7\x1b\x85\x38\x87\xe1\xb8\xa3\x5c\x21\xed\x7d\xda\x3d\xe9\x91\x9f\xb9\xd0\xbd\x0b\xc0\xc1\x1d\xf8\xdd\xa5\xd8\xf9\x8b\xe3\xdb\x9b\x8b\x9b\xb8\x47\xf1\x35\xa3\xa3\xa6\x16\xbf\x0a\x2c\xa7\x56\xaa\x49\xbc\x34\xef\x36\x59\x99\x40\x1f\x03\x80\x38\xb8\x03\x69\x06\xdf\x9a\xaa\x59\xf2\x57\xc7\x1f\xca\x98\x1e\x06\xbf\x68\xb9\xce\x9d\xa2\xb1\x78\x54\x39\x30\xbf\xba\xb2\xf8\x88\x67\x5d\x00\x3a\x12\x0e\xc0\x41\x7d\x00\x10\x04\x07\x3d\xf7\x9c\xb9\xcb\xae\xc0\x6a\x99\x82\x3a\xa9\xe6\x83\x92\xa1\x46\xdf\xdd\x28\x8e\xc1\xda\x88\xea\x78\x5e\xe6\xb5\x00\x4f\x7e\x77\x55\x67\xf1\xe7\xd0\x2e\xbb\x00\x0e\xee\xc0\x46\xd2\xbb\xc1\x07\xbd\xcf\xc4\x92\x9d\x7e\x8e\xaf\x62\x85\xd9\xa4\x6c\x67\x57\x16\xb2\x2e\x4b\x51\xc7\x69\xf0\x74\x47\xd3\x42\xc7\x8e\x82\x38\xa4\x5d\x76\xed\x29\x5e\xb2\xf1\x1a\xfd\x99\x9a\x36\x48\x95\x09\x33\x46\x59\x12\x65\xa4\x1d\xbf\x3d\xc4\xad\xd8\x3c\x30\xf1\xa5\x42\xc1\x08\xda\x65\x17\xc0\xc1\x1d\x38\x48\x7b\xb4\x70\xcf\x2a\xa4\xfa\x53\x10\xf1\xe9\x15\xdd\xa6\xa5\x9d\x25\xf3\x36\x8b\xfd\xa2\x40\x2f\x6d\xb1\xc2\xc9\x30\x5c\x7c\x44\x5d\x10\x07\x77\x40\xd3\x3c\x27\x83\xec\x9a\xd2\x26\x6e\x61\xc6\xc3\x9a\xb0\xf8\x04\xb1\x07\x39\xf9\x0f\x28\x8f\x86\x8e\xb4\xde\x11\xa9\x24\x45\xdd\x84\x3e\x06\x00\x70\x50\x1f\xb8\xff\xef\x0e\x80\x1e\x42\xcf\x72\xa0\xaf\xf1\x79\xaa\xf7\xb4\x66\xc5\x27\xb1\xec\xe6\x30\x97\xa3\xee\x09\x19\x27\x3b\x42\x8c\x15\xbf\x3b\x92\xe4\xbe\xca\xd7\x2c\xa1\x8f\xed\x40\x1c\xdc\x01\x09\xca\x96\xab\x73\x06\xcf\xfd\x65\x7d\x94\xd1\x4b\xe9\x6c\x9c\x07\xbe\xe8\x76\x64\x98\x50\x5d\x51\x6e\xee\xe1\xd5\x71\x6f\xe8\x45\xd4\x05\x71\x70\x07\x5a\x37\x7f\xd3\xbc\x7f\x95\xec\xca\x29\x30\x69\x81\x5e\x5b\x13\xf2\x66\x85\x40\xde\x75\x64\xad\xa5\x13\xed\x4e\x7a\xa5\x62\xe2\x0a\xa2\x2e\x88\x83\x3b\xa0\x79\xc9\x47\xc4\x73\x6e\x6f\xb3\x52\x6f\x70\x97\x78\xda\xc2\xd5\x37\xe7\x6e\x01\x83\xf1\x35\x8e\xf2\x91\xd6\x5d\x6a\xd6\xc3\xaf\x88\xba\x20\x0e\xee\x40\xce\x83\x4c\x85\x6a\xd1\xc0\x8e\x4e\x8f\x4b\xd8\x4d\x8e\xe9\xde\x19\xd7\x37\xb7\xcd\x7c\xcb\x27\x0f\xae\x9b\xe8\x7c\xc1\xcb\x80\x76\x89\x03\x71\x50\x1f\x00\x05\xc1\x41\x81\xc1\xff\x06\xc1\x51\xbc\x90\xd6\x30\x1c\x7a\x85\xb1\x70\xb1\xde\x6c\xfe\x4c\x76\x4f\xd0\x78\x6d\x4c\x78\xc8\x96\x51\x3d\xfc\xe4\x1b\x55\x44\x57\xcb\xcb\xe6\x66\xf3\xd9\x73\x5b\xc3\x00\x5d\xe8\x2c\x4f\xb5\x57\xf4\x88\x73\xba\xc8\xef\x7c\xcc\x19\xd4\x7b\x8f\xfa\xce\xaa\xc2\xa1\xb0\xf4\x36\x27\xbd\x19\xc6\xa8\x04\xe6\x82\xb4\x31\x14\xd4\x07\x71\x70\x4f\x49\x5f\x55\x9d\xba\x46\xfc\xd2\xcb\x36\x46\x3f\x9d\x6f\xe7\x5a\xa9\x6a\xf8\xfe\x0e\xfd\x6e\xfd\x0d\x29\x06\xd9\x95\x14\x79\x33\xc8\x27\x10\x07\xf7\x34\x0f\x45\x43\xa3\xc3\x1e\x9f\x24\x1a\x3b\x57\xf8\x22\x0e\x0e\x6f\xec\xdd\x5a\x13\xff\xec\x40\x4a\xa2\xe1\x2c\xa9\x89\xbc\xa7\x50\x10\x1c\xc4\xc1\x3d\xed\xd0\x27\x0c\x8d\xbc\xe0\x7f\x2a\x23\xc9\xe9\x64\x66\x1c\x75\xb7\x71\xed\x11\x43\xe4\x36\x2d\xff\xbe\x5a\x09\x95\x6a\x9b\x21\x34\x6f\x05\x71\x70\x4f\x05\x7e\x05\x93\x6f\xea\x2b\x68\xa3\xf7\xab\xe5\x47\xbf\xf9\xf3\xd7\xf8\xf1\x50\x85\xa6\x98\x41\xbd\xbe\x3b\x71\x5e\x51\xfa\x67\xe8\x03\x46\x10\x07\xf5\x2a\xaf\x7f\x0f\x82\x83\x22\xc1\x67\x07\xc1\x05\xbd\x27\x93\x56\xaf\xe1\xd6\x1e\x65\xa7\x44\x7c\x5f\xf1\xba\xf8\xed\xb5\x3a\x3d\x6e\xd9\xa8\x38\x3a\x77\x68\x07\x4d\x3b\x2e\x1e\x22\x54\x0d\xe2\x90\x83\xe0\x04\xe2\xb5\x94\x0e\x63\xa4\x2f\xc5\x6f\x91\x2d\x6d\x06\x28\x04\xbe\xe2\xb3\x1c\x46\x65\xa6\x66\x1c\x4a\xd8\x94\x0c\x12\x92\x20\x45\x54\x06\x71\xc8\x41\xf0\xf0\xad\x45\x17\xa5\xc3\x34\x8d\xb5\x07\x49\xb7\x0a\x48\x74\x8d\xb6\x23\x37\x8a\xc5\x9e\xdb\x0e\x9e\xe2\xe5\x1c\x6c\x4c\xeb\x6c\x21\x2a\x83\xb8\xff\x04\xc1\xff\xd7\xdf\xcc\x67\xc2\xd0\x3f\xf0\x83\x30\x7a\x5f\xec\x16\xab\xc1\xfc\xef\x6b\x91\x23\x06\xcc\x72\xf5\xef\x15\xf7\x4b\xfe\x2c\xd6\x5c\x5b\xc3\x47\x04\xc1\x41\xdc\x7f\x2a\xd3\xfe\xaf\x20\x78\x92\xac\xc0\x71\x41\xa1\xcc\xb2\x84\xd1\x87\x81\x0f\x23\xb8\x55\x41\xe1\x8c\xad\xcc\x54\x9c\x61\xd9\x07\xa1\x0d\xb6\xbb\x93\x9c\xff\x0c\x82\xbb\x78\xfb\xb7\x2c\x2d\xe1\x69\x55\x7f\x4d\x8c\xbb\x57\x1c\x71\x45\xb0\x3b\x36\x63\xcf\xf0\x59\x6e\x70\x79\x61\xfc\x1b\xff\x1b\x4d\xff\x5c\x85\xb2\x0f\xff\x11\xbd\x1f\xcf\x90\x62\xce\x59\xb8\x7f\xe5\xf5\x15\x6f\x2d\x45\xd4\x1f\x9b\xf8\x17\xf3\x56\x85\x70\x45\x52\x35\x25\xfe\xef\x05\xc1\x41\x83\x3b\x23\x08\x2e\x28\xa0\xb8\xea\x48\x21\xb3\x48\x1b\xcf\x1c\x35\xfe\x84\x8b\xcb\xd2\x2f\x29\xe1\xe3\xdf\x86\xa9\xfc\x08\xd3\x2e\x56\x65\x6c\x8a\x7f\xa0\x27\x7d\xe3\xfc\x4f\xae\xe6\x5c\xc0\x32\x6a\x1c\xcc\x33\xe4\xa7\xa5\xd9\xda\x93\xd4\xd8\xb6\x71\xaa\xfa\xe1\x58\x29\x4e\x9f\xf6\xcf\x57\x02\x2f\xc3\xdb\xd0\x15\xaf\x6c\x76\x13\x91\xf9\x48\x5b\xeb\x1f\x57\x3f\x1a\x93\x96\xb1\x09\xe0\x29\x24\xe7\x49\x9f\x97\x52\x8b\xd8\x80\x82\xe0\xa0\xcb\xff\x37\x08\x2e\x8e\x14\x04\xf7\xea\x48\x40\x3b\xb9\x98\x9b\x46\x9e\x97\xc6\x28\xaf\xae\xe9\x63\xf8\xd4\x25\xbe\x2c\x2e\x5b\x56\xf2\x7d\xe3\xea\xc8\xb8\xc8\xb9\xac\xd8\xd7\x23\x07\xc1\x93\x2b\x3f\x71\x1b\xfd\x14\xc3\xbb\xc1\x7e\x91\x7f\x37\x4d\xa4\x6f\xc4\xb6\xa0\x8a\x9d\xe7\xb7\xd9\x25\x0c\x96\xeb\xd6\xa5\x6a\x84\xe7\x71\x59\x71\xe4\x20\x78\xf3\xb3\xbe\x98\x98\xd8\xcd\xc2\x2e\x15\x8e\x07\xfb\xb3\xef\x6a\x0d\xb5\xe6\x9e\x3b\xcd\x0d\x2d\x5c\x77\x2c\xc4\xe4\x6b\x93\xe5\x39\x97\xd1\x22\x07\xc1\x95\x7c\x3f\xb0\xf4\xdf\x27\xf5\x1c\x4c\xc7\x23\xcd\xc0\x6c\x94\x2b\xeb\x93\x78\x42\x48\xd0\xd6\x52\x56\x42\xf7\x24\x2a\xfe\xf2\xf9\x6c\x54\x83\x1c\x04\x5f\x4a\x1c\x0b\xe6\x0d\x7b\x8a\xe1\x67\x15\xf6\x8a\x85\xa0\x74\xdd\x70\x25\xa6\xa1\x7a\xe6\xf5\x98\xd0\x13\x19\xdd\xfb\x28\x46\x63\xe7\x32\x5a\xe4\x20\xf8\x41\x3b\x61\x73\x56\x6b\xdb\xc7\x18\xff\x10\x91\xcb\x3c\x89\xbb\x95\x14\xfe\xe1\x7b\xec\x93\x28\x13\xad\x65\x17\x76\x15\x94\xcf\x67\xcb\x25\xe4\x20\x78\x70\x57\x0d\xd1\xe4\xab\x52\x34\x3d\x0d\x61\x2e\x8a\x69\x8f\x5e\x46\xb3\x11\x97\x7e\xa1\x15\xfc\xd1\x96\xef\x72\x9d\x41\x42\x8c\xe7\x32\x5a\xe4\x20\xf8\xa1\xca\x2b\x56\x95\x45\x5d\x2d\x7d\x17\xaf\x59\x83\x32\x8c\xab\x1c\x28\x65\x6e\xf1\xab\x18\x97\x68\x24\x43\x3c\x0b\x05\x1f\x9b\x9d\xdb\x04\x0a\xf4\x9f\x7a\xd6\x04\xaa\x7f\xfd\x77\xe0\xe8\x7a\xa6\xeb\xac\x5c\x5d\xb1\x8d\xfb\xf5\xb8\xbf\xf4\xdc\x8e\x45\xa1\x4f\xb9\x8f\xfd\x7e\x68\x7a\x3d\x31\x86\x1e\xcc\x41\x1c\x7c\x02\x95\xe6\x51\xe7\x67\x64\x6a\x63\x20\x98\x50\x5b\xfe\x71\x4f\xa0\xc2\x9e\xb8\xe0\xcd\x63\x42\x76\x2f\xd7\x06\xfb\x1e\x93\x5b\x82\x50\x8a\x06\xc4\xc1\x27\x50\xa3\xef\x18\x8c\x84\x07\xde\x5a\x87\xd1\x95\xcf\x76\x06\x9f\x50\x48\x18\x0f\x15\x6a\x1f\xeb\x4c\x94\x1a\x96\xa9\xa3\x72\x94\x9d\x42\x89\x32\x00\x07\xff\xe2\xed\x12\xd9\x8b\x86\x88\xb7\x2e\x1e\xf6\x33\xa5\x03\x81\xe5\x77\xe7\x86\x4d\xf9\x62\x1f\xf9\xc8\xf6\xcf\x59\x9a\x72\x7d\xa3\x31\x83\x76\x82\x01\x71\x01\x12\xd8\xff\x7b\xe1\xa3\xb8\x00\xed\xbd\xd7\x90\xc0\x40\x78\x83\x70\x82\x2c\x75\x3a\x6d\x28\x5e\x9f\xf1\xe3\x71\x7a\x1d\xe3\xa1\x28\x16\x4f\xc3\x5c\x44\x10\x1c\xc4\x05\x48\xa0\xa0\xf9\xfa\x05\xfd\xa7\x3f\xff\xcb\xb3\x1e\xa8\x6b\x9e\xa5\x00\x87\x75\xd3\x7b\x89\xc3\x6c\xee\x7c\x94\xa5\x41\xd3\x29\x83\xd4\xd0\x27\xfd\xfc\xbe\x0f\x99\x1a\xe8\x0b\xf1\x3e\x8d\x06\xbf\x81\x4e\x00\x03\x71\x70\x05\x7e\x5d\x73\x10\xbf\x27\xd7\xfb\x3a\xc9\xa6\xb0\x5d\x5f\x56\x3c\xb1\xf8\x93\xc7\x76\x37\x96\x57\x10\x0d\x59\xd2\xc3\xc5\x09\x4f\x74\x68\x3d\x11\xc0\xc1\x15\x90\xc7\xc8\x8b\xfb\x68\x65\xac\x5b\xf5\x50\x3d\xfd\xa9\x99\x79\x6e\x55\xcf\x0d\x9a\x5f\x16\x9f\xbb\xbe\xef\x6c\xf9\x25\xd7\x3d\x9d\x45\xd4\x05\x71\x70\x05\x8c\xb9\x77\x9e\xe6\x93\xa9\x85\xc4\x63\xa3\xb2\x0b\xb7\xbe\xfd\xe0\xc2\x6e\xc4\xf6\x63\x7c\xa7\x2c\xea\x66\x8c\xf3\x18\x5e\x2a\x34\x87\x06\x71\x70\x05\x0a\xb4\x05\xfd\xc2\x96\x69\xf1\xff\x52\x30\xea\x37\x1a\x16\x96\x15\x1f\x85\x87\x2c\x78\x91\x34\xea\xab\x0f\xcc\xa7\xd5\xe2\xfc\x42\xcc\xa1\x41\xdc\x7f\x15\xf8\x9f\x9b\xe5\xbf\x38\x00\xba\x85\x9d\xe5\x40\xf7\xcd\x89\xa1\xed\xa1\x69\xca\x49\xe2\xfb\xab\xd4\x05\xbb\x6e\x4f\x3b\x0d\xb7\xb1\x33\x22\x59\x47\x8b\xe9\xc8\xbd\x8a\x70\x82\x11\x63\x07\x71\x48\xeb\x7e\xc4\xb5\x46\x94\xa6\xf2\x27\x8a\xfa\x82\x8c\x45\x5e\xfe\x03\x7e\xef\x6b\x4a\x5e\x58\x08\x67\x3e\xbd\xb2\xd7\x2b\x62\x17\x9b\x09\xad\xfb\x01\x38\xb8\x03\x25\x37\x09\x7c\x55\xbb\x2e\x7a\x88\x67\xd9\x8b\xfc\x29\xdb\x68\xf9\x89\xf9\xe4\xe9\x64\xa9\xf2\x49\xea\xed\x9e\xcd\x5d\x66\x01\x68\x03\x2b\x10\x07\x77\xc0\xd1\x9d\xf1\xf7\xd4\x8d\x97\x1f\x58\x42\x62\x23\xc5\xb0\x0b\x99\xbd\x28\xb1\x4d\x18\x8e\x95\x75\x26\x97\x6f\xbe\x8d\x6e\xa7\x84\xd6\x3f\x41\x1c\xdc\x81\x61\x22\x8a\xce\x83\x23\xc2\xb0\xe7\xcf\x6b\xc2\xb1\xb7\xa4\xeb\xc4\xbd\xee\x3e\x9a\xc5\x57\x5f\x3f\xd4\x8c\xf1\xed\x23\xbc\x5d\x87\x70\x00\xc4\x21\x1c\x10\x07\x04\xc1\x41\xf3\x89\xb3\x1c\xf8\xbd\x7f\xab\xc4\x55\xff\xf0\x09\xcd\x11\x8a\xf7\x74\x35\xb1\xdb\xdd\xfd\xa6\xbb\xa6\x37\x86\x93\x29\xc9\x69\xfa\xaf\xc8\x27\x43\x1f\x42\x80\x38\xb8\x03\x17\x3f\x18\xe4\xb1\xb5\x56\xd3\xca\x8c\x1a\x44\xcd\x3f\x9a\x0f\x8b\x9e\x24\x78\xab\x29\x24\xa7\x66\x9b\x95\x5a\x48\xed\xef\x56\x80\xa8\x0b\xe2\xe0\x0e\x1c\xa4\xf0\xce\x55\xbf\xc7\xbd\x59\x75\x6f\xcf\xca\x7a\x4e\x17\xfb\xd6\xe8\x0f\x49\x25\xdf\x70\xaf\xd0\xea\x7d\xc6\xe0\xfa\xdf\x45\xd0\xfa\x1c\x80\x83\x3b\xd0\x15\xbc\xf6\x8a\x7a\x44\x7d\x71\xf3\x09\x9b\xd1\xfc\x1c\x61\x61\xd2\x05\xee\x89\xdb\x44\xda\x53\xf6\x42\x99\x4a\xec\x6f\x18\xa0\x35\x05\x10\x07\x77\xa0\xb3\x54\x68\xb3\x59\x82\x29\xbe\xfa\xce\xed\x8f\x44\x71\xf9\x62\xc7\xc5\xdd\x33\x37\x8b\xb8\x3a\x7e\x07\xb0\x85\x50\x86\xfc\xd5\x44\x38\x00\xe2\xa0\x3e\x00\x08\x82\x83\x26\x77\x67\x39\x30\xa1\xd5\x5e\x7a\xa7\x42\x4c\xa3\xd7\x7d\x43\xcc\x48\xef\x46\x9b\x05\x85\xd9\x93\x9e\x96\xba\xbf\x07\xe1\x43\x0f\x82\x35\x6f\x0d\x41\x21\x3d\x00\x07\x77\x80\x33\x95\xe0\xf3\x5f\xfb\x41\xb2\x14\xb2\x3d\xfe\x6c\xff\x27\x43\xac\x7e\x55\xa9\xd7\xef\x3c\xe6\x21\x63\xa8\xe5\x2c\xec\xb9\x0e\x7d\x6c\x04\xe2\x90\xde\x05\x97\x47\x66\xcd\x0d\xb7\xd7\x25\xe0\xee\xa8\x2a\xe4\xa7\x0b\xe9\x60\xdb\x5e\x71\xc2\xcf\x13\xbb\x8b\x11\xb9\xae\x6b\x35\x27\x05\xbd\x0b\x06\x70\x70\x07\xdc\xc9\x3f\x18\xa0\x88\xbc\xfa\xeb\x75\xb3\x20\xab\x81\x32\x3b\x36\x45\xd8\xee\x54\x29\xbf\x32\x0e\xbf\x54\xa4\x7e\xb8\x90\x1f\xea\x03\x20\x0e\xee\xc0\x23\x97\xeb\xb1\x8b\x96\x4a\x01\xa5\x41\x3a\xf8\x65\x1b\x9e\x63\x97\x52\x6f\x63\x7e\xbe\xce\xad\xb3\xdc\xe9\xee\x2d\x63\x22\x5d\x0b\xed\x06\x0d\xe0\xa0\x3e\x00\x08\x82\x83\x66\xda\x67\x39\x80\x97\x44\x29\x3a\x4f\xfa\xfe\x5b\xd8\xc8\x9e\x9f\x34\x5f\x4c\x11\xf1\x4a\xad\x57\xa2\x78\x51\xb4\x72\xa9\x88\x34\x3f\x7d\x20\xb4\x21\x1a\x88\x83\x3b\xc0\x67\xe5\xdc\xf1\x55\xee\xcf\xf3\xe8\x4e\x2d\xee\x37\x63\xab\x85\x01\xe4\x27\x59\xb7\x75\x36\x12\x49\x65\xd5\x34\x29\xee\x06\x42\xd9\x0d\x10\x07\x77\xa0\x62\xad\xe7\xe5\xd7\xa1\x91\xcf\x32\x24\xd5\x2b\x7e\xfb\xd4\x58\xa3\xa9\xd4\x99\x74\x4d\x11\x31\xe5\x76\xa6\x77\x29\x1c\x47\x7e\x23\xea\x82\x38\xb8\x03\xbc\xd6\x73\xd3\xaf\x3e\xfb\xe0\xa7\xd7\xbb\x79\x68\x7e\x9d\x1f\xc1\x78\x33\x23\xf9\x81\x79\xfa\xb6\x9c\x67\x39\xab\xc0\x17\x52\x68\x43\x4b\x10\x07\x77\x40\x96\x45\xa1\x94\x3a\xd9\xee\xaa\x69\xa6\xb0\xe0\x56\x41\xc5\x05\x47\x83\xb6\x71\x29\xd1\x08\x41\xd4\x93\x91\xa9\x6a\xc9\x8e\xbb\x08\x07\x40\x1c\xd4\x07\x00\x41\x70\xd0\x63\xcf\x59\x0e\x88\xa1\xfc\x2e\x16\x3d\x31\xbd\x4e\x22\xa1\x74\x9c\xef\xd0\xc3\x47\x71\x93\xb4\x10\x9f\xa3\xbb\xd0\xf7\x8f\x29\xe3\xf5\x0d\x8e\x77\x88\xb1\x83\x38\xb8\x03\xc2\x14\x28\xb8\x7d\x7d\x54\xc2\x96\xc2\x69\x86\x8f\xb9\xe7\x27\x84\x9f\xe6\xd0\x45\x4d\x16\x89\x45\x18\xdc\x89\xb3\x60\xe9\xa0\x43\xd4\x05\x71\x70\x07\xa4\xc3\x2e\x5a\xb6\x95\x3f\xe6\x37\x13\xb1\x65\x08\xc1\xac\x78\xe7\x53\xf6\x7d\xf6\x78\x96\xf4\xb6\xd8\x13\xdf\x1b\x45\x0e\x8d\xd0\x86\x20\x20\x0e\xee\x80\x48\x36\xfd\xf5\xeb\xe9\x46\x6d\xae\x38\xca\x21\x1b\xb6\xfe\x03\xc7\xd6\x34\xd3\x3f\x54\x72\x8c\xfb\x55\x72\xb9\x4e\x50\xeb\x1c\xa0\x8f\x24\x01\x1c\xdc\x01\x32\x0d\xfb\xc2\xc1\x92\xc2\x21\x89\x1a\x6e\xf5\x36\x4d\x6e\xbe\x35\xa9\x5b\xd7\xa7\xca\x5e\x25\x6a\x67\x7d\x25\xcc\xf5\x16\xc7\x87\x36\x07\x04\x70\x50\x1f\x00\x04\xc1\x41\xcf\xa0\x67\xe6\x01\xd8\x7e\xf9\x5c\xbc\x97\xe8\xda\xae\x7c\x51\x91\x74\x88\x63\x6d\xa6\xf5\x72\xf8\xde\xd2\xdb\x17\x9f\x7a\xe5\x3f\xdd\x69\xf0\x83\x4e\xf4\x01\x71\x70\x07\xf0\x7e\xe3\x11\x99\x8a\x1e\x91\xf6\x52\xff\xda\xba\xe2\x13\x39\x65\xc6\xfc\xf4\x67\xd2\x11\xaa\x93\x08\x6e\xf1\xd5\x49\x01\x05\xe8\xfd\x22\x88\x83\x3b\x30\x4c\xff\xb9\xa4\xf4\xb6\x5a\x80\xc3\x43\xdb\xbb\x74\x42\x82\x89\x72\x7b\xd5\x36\xc4\xb6\xd7\x2c\x05\xf7\x98\x1e\x36\xcc\xd5\x1c\x23\xea\x82\x38\xb8\x03\xcb\x42\x13\xf4\xc5\x54\xca\x15\xb2\xee\xdd\x96\x73\x9a\xb5\x17\xdf\xce\x71\xb6\x1c\x7f\xf9\xc0\x15\x47\x4c\x9d\xb8\x50\xe3\x80\x8d\xa8\x0b\xe2\xe0\x0e\xf4\x06\x27\xe4\xce\xb4\x35\xbe\xde\xfb\xa5\x47\x84\xef\xd6\xc1\xc8\xeb\xbf\xa2\x7b\xaa\x1b\xd3\xc5\xda\xd0\xf4\xf5\x73\x22\x11\x0e\xc2\x01\x10\x07\xf5\x01\x50\x10\x1c\xb4\xac\xf8\xdf\x20\xb8\x38\x72\x10\x3c\x69\xe0\xf6\xb1\x63\xa1\x90\x57\x10\x3a\xcb\x83\x4a\x9d\xcc\xa6\xf5\x9e\x79\x42\xb5\xe1\x8a\xd2\xbf\xca\xd9\x85\x0a\xd8\xd6\x25\xe7\xb2\x72\x82\x1c\x04\xf7\xdd\x0b\xba\x48\x45\x3b\x80\xdf\xd3\x4f\x9b\x9d\x35\x9a\x3a\x97\x97\x69\xc7\x23\xca\x8c\xc2\x3e\x2f\x65\xbf\x9c\x1c\x7d\x7a\xff\x5c\xd6\x89\x90\x83\xe0\x3e\xde\xf2\x1d\x6f\xca\x54\xd9\x9d\x3c\x37\xee\x2f\x4b\x1d\xa0\x59\xbc\x27\xcf\xfa\x5d\xbb\x25\x6e\x85\xed\xdf\x31\xe4\x43\xfb\xe6\x5c\x46\x7b\x46\x10\xfc\x4b\x08\x5e\x15\x6f\x18\x2f\xa3\x34\x25\x9f\xc3\x5d\xe7\xc2\xd3\xd3\x4a\xab\xc4\x48\x49\x35\xb7\x81\x6d\xa7\x0b\xaf\x64\xf6\xce\x65\xb4\xc8\x41\x70\xa7\xdb\x8f\xfa\x4b\xee\x11\x3c\xfc\x73\xdf\x41\xfd\x23\xbe\x13\x95\x61\x79\xfb\x5c\x2c\x2b\x41\xa0\xf0\x4f\xb7\xbc\x43\x5b\xa6\x6f\xe7\x32\x5a\xe4\x20\xf8\x69\x71\xbc\x5c\xe8\x05\xca\x37\xf6\xea\x0a\xea\x0a\xa1\xdb\x49\xb2\x1a\x72\xb4\x1f\x15\xa4\x5a\xb0\x17\xd0\xf9\x1f\x27\x61\x5f\x3e\x97\xd1\x22\x07\xc1\xad\x6f\xee\x96\xd5\x18\xe7\x76\x25\x11\x7f\xba\x29\x33\xfd\xe7\x5e\xa2\x7c\x80\xff\xf3\xe2\x2b\xce\x57\xaf\x32\x11\xa5\x2b\x95\xbe\x3b\x97\xd1\x22\x07\xc1\x0d\x6c\x65\x4d\x3a\xf3\xb3\x4f\x09\x9b\x8b\xb7\xa2\x46\x6e\x3e\xd7\xfa\xf9\x4d\xf1\x7d\x74\xf0\xcd\x19\xbe\x93\x84\x1f\xb9\x5f\xce\x21\xe4\xaf\xf7\xff\xed\x3f\xf5\xac\x46\xdf\x48\x55\xfc\x49\xc6\xa5\xdf\x08\x7b\x70\xc9\xab\x65\x9e\xa0\x26\x24\xe9\x91\xe2\x4d\xe6\xcb\x22\x8d\xa5\x91\x0f\xef\x37\xaa\xe3\x42\x01\x0a\x00\x87\xf4\xc5\xcf\xa3\xe7\xe6\x51\x17\x22\x9a\xf1\x86\xa3\x4b\x07\xcd\x17\xff\xea\x5d\x48\x1d\xc0\x43\x97\x4a\xf7\xf3\x72\xbb\x32\xf4\x6e\x1f\x3a\x56\x1f\xc4\xc1\x1b\xfd\x17\x3a\x6b\x63\x56\x46\xce\xae\xdf\x6a\xbe\x81\x8f\xef\x8f\xb1\xd7\x31\x6a\x5f\x62\x5e\xe5\x57\x62\xfb\xe4\x2c\xa3\xaa\xa1\x05\x2d\x56\x80\x38\x78\xa3\xd7\x7e\xcd\x7e\x5a\x2c\x1c\x92\xf9\xdd\xac\xa9\xa3\xbe\x33\x09\xfd\xe9\xc2\xd7\x13\xe7\x21\xd4\xa3\x2e\x32\x74\x9b\x23\xa9\x5e\xe8\xb8\x72\x10\x07\x6f\xf4\x1f\x93\xee\xe7\x51\xbc\xa4\xd7\x0c\x7b\x8a\x36\xd2\x15\x6c\x13\x29\x47\x6e\x41\xdb\x31\xd3\xd0\xa4\x93\xe2\xfa\xc4\x6a\x7a\x95\x16\xd1\xe8\x41\x1c\x74\xb3\x07\x04\xc1\x41\x6d\xf3\x2c\x07\x4a\x33\xa7\xc5\xbf\xe7\x63\x18\xaa\xa6\x90\x64\x17\xea\x5e\xd2\xd6\x4f\xbb\xc3\x5b\x3f\xfb\xa7\x3f\x9e\x4d\x3f\xc2\xfa\x66\x23\x1f\x62\xec\x20\x0e\xee\x00\x35\xab\xed\xa6\x0a\xde\x55\x81\xa5\x10\x46\xbb\x94\xce\xd8\xc5\x57\x11\xb2\xce\xfd\x2e\xce\x62\x9a\x28\x2a\x98\xbe\x79\x35\xd0\x43\x3a\x88\x83\x3b\xe0\x6c\x2a\xa3\x8f\xdf\xe2\x5f\xe1\x80\x93\x87\xf5\xce\x33\xe6\xb2\x9f\xb5\x12\x33\xa1\xd6\x89\x5b\xbf\x0a\xe1\xfc\xd7\xbf\x2f\xa0\x2f\x96\x41\x1c\xdc\x01\x5d\x7d\x2d\x9a\x3f\xaf\x28\x0f\xc3\xdd\x7c\x64\x31\xc9\x4e\x05\x42\x8c\xe2\x2a\x77\x33\x3a\x78\x1f\x7c\x19\xb7\xfa\x4b\x7d\x19\x9a\xa0\x82\x38\xb8\x03\xfd\xdb\xb1\xf5\x37\xf2\x0a\x95\x57\x66\x0d\x83\x77\x5f\x1e\x53\xdd\xd8\x0b\x73\x7e\x48\x55\x7b\x81\xc1\x5b\x89\x35\x4e\xc1\xdb\x15\xe1\x00\x88\x83\x6e\xf6\x80\x20\x38\xe8\x1e\x76\x96\x03\xef\x97\x04\xee\x14\x9e\x5c\x35\x24\xab\x69\xe2\x15\xaf\xa9\xdb\x3d\xb1\xe2\x35\x0b\x13\xd5\x23\x22\x9c\x88\xd3\xc4\xac\xa6\x87\x16\x3e\x40\x1c\xdc\x01\x12\x39\xb9\x1d\xc1\xda\xc9\xfe\xe3\x41\x6d\xe7\x4b\x9b\x43\x3a\xc6\x7f\x7e\xfc\x15\x46\x9b\x9e\xcc\xa0\x56\x74\x59\x22\x1b\x79\x85\xa8\x0b\xe2\xe0\x0e\x3c\xb0\xbe\x11\xad\x5e\x4a\xf3\xe7\x06\x2b\x5d\xe4\xfb\x94\x91\x8c\xe1\x19\xa1\xf0\xd5\x2e\x0f\x41\xb6\xab\xad\xc9\x6a\x69\xf9\x50\x70\x1d\xc4\xc1\x1d\x68\x35\x3d\xb9\xb1\x33\x90\x9a\x33\x2b\x20\xe9\x28\xf4\x2e\x9f\x6b\x95\xd5\xe8\xe6\xb3\x9b\xec\xfc\x45\xa8\x49\xe3\x0e\x5e\x64\x04\x50\x98\x08\xc0\xc1\x1d\xf0\x7d\x81\x2e\xba\x3a\x4f\xd1\xc3\x91\xee\x74\xd3\x6a\x62\xf9\xa8\x98\x1b\xf5\x91\xfa\x53\xa7\xb1\x14\xa3\xe5\x35\xf4\x3f\xbf\x7b\x10\x0e\x80\x38\xa8\x0f\x80\x82\xe0\x80\x09\xc5\x99\xbb\xc2\xcf\xd5\x0e\xfb\x7c\x19\x0a\x2a\xb1\xba\xbb\xf1\xe6\x2d\x9d\x0e\x3e\xe9\x09\xcf\x62\x5d\x9b\xca\x31\x8e\xfa\x35\xc7\xd7\x12\xd0\xff\x15\x88\x83\x3b\x70\xcd\xb1\xd7\xc7\xe5\x4f\x5e\x67\x81\x5d\x5b\x45\x8c\x2a\xc1\x70\xaa\x0d\xd7\x8f\x1b\xfe\x4a\x56\xad\x24\xbe\xb9\xd4\x8a\x7a\xd0\x6e\x10\x20\x0e\xee\x00\xba\x05\x09\x43\x27\x91\x6d\xe0\x34\xe7\x1d\x97\xc4\x07\xf5\xf1\x1f\x65\xde\xac\x32\xee\x34\x3c\x10\xc6\x22\x1f\x42\xe5\x8b\x83\x76\x85\x01\x71\x70\x07\x14\x59\xae\xa9\xcd\xdb\x38\xe1\x30\x10\xdf\xb9\x34\x4c\x33\xc3\x3e\x95\xb1\x7f\x8b\x59\x96\x8d\xe9\x13\x05\xf7\xdd\xf4\x37\xa6\xd0\xef\x00\xe2\xe0\x0e\x68\x5a\x66\x87\x53\x79\xb3\x60\x0f\xe6\x69\x7f\x3b\xe4\xc2\x1b\x36\x7b\xf4\xd9\xf6\x6f\xc1\xa2\x81\xf5\x5c\x79\xcb\xf8\xaf\x48\x3b\x28\xfc\x07\xe0\xa0\x3e\x00\x08\x82\x83\x66\x77\x67\x39\x70\x3c\x3b\xd9\x60\xa5\x6c\x44\x74\x5a\xc2\xe2\x69\x6f\x55\x7d\x5f\xcb\x70\xa4\x3a\x35\x86\xf1\xd1\xfc\xd0\x58\xfa\x69\xfc\xe8\x38\x62\xec\x20\x0e\x69\x27\x80\x20\xfd\x9c\x38\xa2\x19\x63\x87\x42\xf7\x17\x4b\xda\xce\xdc\x0e\x5b\xbc\xc4\x11\xa8\xbf\xfc\x2c\x44\xe4\x78\x9c\x37\xdf\x71\x41\x3b\x01\x00\x38\xb8\x03\x3b\x28\xf5\x75\x99\x3a\x6f\x26\x2a\x87\x97\x6c\xfb\x04\xa2\x15\xab\xfd\x96\xbb\x7d\xec\x2f\x7f\x3e\x2d\x4b\xb9\xb4\x5d\xa2\xa4\x8e\xa8\x0b\xe2\xe0\x0e\xd8\xa5\x1a\x61\x3d\xfa\xd2\xcf\x95\xed\xc6\xf3\x7b\xeb\xf8\xa1\xd6\x70\x86\xe1\xad\x2e\xd1\xb5\x01\xc2\xa3\x37\xc2\x79\xb7\x7b\xa1\xc5\x45\x10\x07\x77\x60\xcf\xb5\x4c\x33\x92\x6f\xf3\x0f\xfb\xef\xe8\x18\x8b\xc5\x4d\x9b\x82\x9e\x3a\xf4\x37\x4b\xfb\xb9\xa9\x5c\x4f\x28\x43\x50\x0f\xe7\x10\x0e\x80\x38\xa8\x0f\x00\x82\xe0\xa0\xa9\xf6\x59\x0e\x7c\xd8\xe6\x63\x74\x39\x79\xd6\xe2\xce\x8a\xe5\x14\x94\x66\xcd\xe4\x32\xed\x3d\xdc\xa6\xaa\xc9\x6a\xc6\x5f\xf5\xaa\x80\xe6\x1e\x74\x8a\x03\x88\x83\x3b\x50\x55\xf2\x53\x5f\xee\x85\x03\x9e\x76\xbc\xa3\x6f\x69\xcb\xaa\xd7\xbb\x42\x85\x9b\xe3\x32\xd7\xef\xd4\x16\x48\x26\xcc\x7e\x96\x08\x41\xd4\x05\x71\x70\x07\xe6\x4d\xef\x92\xf5\x7a\x28\x9b\x9f\x5c\xba\x14\x1f\xeb\x4a\x67\xea\x38\x6c\x42\xca\x5d\xed\xa0\x6c\x76\xea\xf6\x34\xc1\x9f\x15\xfa\x5a\x1b\xc4\xc1\x1d\xa8\x59\xfa\x62\x8a\x5e\xf9\x55\xa3\x28\x2f\x7f\xd2\xb5\xa2\x79\x8e\x7c\xf2\xe3\x37\x67\xc6\xf8\xe4\x8a\x6d\xab\x37\xc4\x3e\x24\x8f\x10\x75\x41\x1c\xdc\x01\xcf\x8c\x5e\x42\x47\xdb\xd4\x5a\x2d\xf1\x6a\xe2\x81\xc9\xf1\x7b\xf3\xbb\xfc\x9b\x03\xac\x74\x38\xa3\x87\x31\x0f\x56\x42\x2e\x98\x22\x1c\x00\x71\x50\x1f\x00\x04\xc1\x41\xcf\x3d\x67\x39\xb0\xff\x8e\xef\x9e\xca\x05\x7e\x39\x05\x1e\xd5\x22\x9a\x31\xd3\xf7\x97\xcd\xd9\x3e\xd3\x65\x63\xe3\xf8\x7f\xda\x10\xbd\xc4\xd3\xe3\x8e\x18\x3b\x88\x43\xda\x11\x7c\xc8\xf7\x34\x21\x07\xf5\xd9\xb0\x29\xcb\xd3\x0b\xd9\x97\x9d\x9e\x14\x6f\xbd\xf8\xcd\x67\xa6\xf5\x8b\xd2\x22\x26\x84\xca\x56\x02\x51\x17\xc4\x21\x7d\x10\x42\x68\x3a\x1e\xde\x34\xb4\xb3\x31\x7a\x70\x3b\x83\xb1\x2f\x36\xe5\xa2\xdb\xb7\xc1\x1e\x82\xfe\xaa\xbc\x9b\xd7\xba\xdb\x03\xa0\x85\x1a\x10\x07\x77\x60\xf1\x54\x6b\xf0\x03\x7a\x6d\x12\x5f\xae\x83\x2b\xff\x2a\x03\x93\x5b\x8a\x68\xa1\xcd\x94\x61\x3d\xad\xfb\x22\xbe\x5b\xa3\x5e\x14\xf4\x91\x01\x80\x83\x3b\xc0\xc6\x70\x05\x05\x6f\x50\xc1\xb4\x33\x36\x73\x50\x00\xfb\x22\xde\xed\x62\xd4\xc0\xa3\xc3\x5d\x46\xac\xf7\x51\x71\x94\x55\x5d\x51\x08\x07\x40\x1c\xd4\x07\x00\x41\x70\xd0\x43\xe8\x99\xcf\x05\x7d\x63\x31\xf1\x0c\xcd\xcb\xc4\x02\xc4\x8e\xb4\x1b\x6d\x52\x3c\x29\x1f\xd8\xa5\x8d\xc3\x27\xa2\x46\x3c\x70\x27\x28\x25\xa0\xdd\xa1\x40\x1c\xdc\x81\x5e\x8d\xd3\xb0\xf0\x6f\x02\xf2\xa4\x3e\x8f\xe4\xd7\xfa\x9b\x89\x2b\x2b\x6d\x0e\xb4\x4a\x25\xbe\x4e\xcf\x96\x97\x0c\xee\x64\x42\x1f\xdb\x81\x38\xb8\x03\x69\xc3\x26\x1f\x77\x67\xed\x53\xe7\x47\x57\xec\xad\xf8\x1b\x9f\xa6\x15\x26\xbf\xcb\x56\x63\xf4\x4c\x44\x77\x19\xb8\xd0\xef\x91\x0c\xe5\x4e\x00\x1c\xdc\x81\x48\x27\x87\x84\xee\xfc\x49\x9f\x7d\x6f\x41\x2e\xd3\x3b\x57\xe3\x52\x37\xd6\xf4\x5b\x57\xb1\x14\xdf\x4c\xf6\x2a\xa0\xec\x1c\x63\x22\xea\x82\x38\xb8\x03\x59\x65\x13\x0d\xbb\xd6\xdf\xfc\xfc\xc9\x22\x4d\x93\x9d\xd0\xf9\xc3\x8a\x9d\x1b\xb9\x8f\xc7\xd3\x19\x1f\x3f\xc9\x51\xbc\xc7\xf9\x03\xe1\x00\x88\x83\xfa\x00\x28\x08\x0e\x0a\x0c\xfe\x37\x08\x2e\x8e\x1c\x04\x1f\xdd\xd5\xca\x45\xbb\xfe\x91\xaf\x2c\x2b\x57\x52\x75\x97\x45\xe1\xd9\xb5\xd0\xb2\x4a\xbc\x49\xf2\xe3\xf0\x7c\xab\xa1\x47\x81\x55\xe7\xb6\x86\x01\xba\xd0\x99\xc7\x57\xa6\xc4\x3b\xeb\xcd\x35\xdd\x2d\x0f\xaf\xef\x60\x7a\xef\x94\x75\xa2\xa1\x2e\x6a\x4d\x7d\xcd\xc7\xb2\x26\x71\x6a\xae\x33\x00\xfa\x58\x03\xc4\xc1\x3d\xed\xf4\x11\x21\xa0\x54\x52\x24\xbe\xf2\x0e\x8d\x42\x80\x51\xa3\xfc\x6b\x45\x6a\x1e\x0f\xc9\xde\x5f\xf5\x0a\xb5\xbf\x19\xa6\xb3\xcb\x88\xba\x20\x0e\xee\xa9\xaf\x45\x99\xb0\xae\x46\x5b\x25\x29\x7a\xf4\xf8\xb5\x9a\xd7\x1a\xea\x22\xaf\x3a\xd1\xfc\x16\x69\x3c\xbc\x72\x6a\xe6\xb3\xf5\xa1\xd3\x0b\x40\x1c\xdc\xd3\xc6\xc6\x94\xa5\x1c\xc9\x26\xcf\x9e\xb0\x8e\x67\xaa\xef\x36\xf2\x5e\x3d\x17\xd4\x92\x79\x9c\x8f\xa5\x65\xf5\x64\x86\x6d\x88\x17\x3a\xc6\x16\xc4\xc1\x3d\x1d\xc3\x4f\x2c\xae\x74\xf1\x9e\x7f\x3e\xf1\xe0\x4d\x97\xf7\xab\x85\x5f\x55\xbc\x9d\x09\xdc\x19\xe3\xca\x39\xfb\x3b\x91\x2b\xad\x5a\x08\x4f\x41\x1c\xd4\xab\x00\x41\x70\x50\x24\xf8\xec\x20\xb8\x51\x7b\x4e\xd6\xdc\x5c\x4c\xfb\x44\x83\xe2\xd0\x1b\xc1\x96\x18\x4c\xb3\x46\x82\x07\xba\xc6\xdb\xdc\xd4\xbf\x99\x45\x14\x7c\xe4\x11\xa1\x6a\x10\x87\x1c\x04\xbf\x84\x59\x12\x18\x6c\x44\x32\x85\xf9\x6a\x27\x96\x30\x35\xb4\x85\x82\xd3\xb1\x2d\x58\x7d\x30\xac\xc0\xd5\xa7\xf7\xb0\x14\x63\x0f\x51\x19\xc4\x05\x48\xa1\x60\xff\xef\xca\x49\xfd\x9c\xdf\x62\xf1\xb4\x0e\xf2\x7e\x3f\x93\xaa\x5e\x32\x4a\xe1\x7d\x67\x5c\x26\x47\xb8\x57\xda\xd2\xa3\x15\x14\x2f\xbe\x60\x8d\xa8\x0c\xe2\x90\x7f\x8d\xaa\x06\x09\x21\xc3\x3b\xfa\x8d\xd9\xfe\xd3\xbf\x4d\x58\x2f\x98\xfe\xec\x10\x89\x1a\x46\x23\x08\xdb\x49\x52\xd5\xc6\xad\x88\x22\x41\x04\xc1\x41\xdc\x7f\x82\xe0\x68\xff\x2b\x08\x2e\x90\x44\xae\xdf\x3f\x68\x7e\xf7\xfd\xf7\x17\x61\x54\xf5\x04\x21\xa1\x05\x21\x87\xd8\xb8\x36\xba\x4b\x44\xa9\x34\x3c\x14\x82\x91\xff\x0c\x82\x7b\x29\xce\x19\x4c\x5f\xb1\x53\xa2\x4f\xbb\x4b\x96\xb0\xa6\xae\x36\x9f\x6b\x4a\x44\xb5\xa8\x38\x43\x4d\xf1\xa6\x20\x31\x34\xff\x9f\xa7\x21\xe2\x5d\xbb\xcf\xba\x79\x3b\x89\x5c\x9d\x0d\x57\x20\xb2\xf8\xd9\x95\xe7\xd9\xb6\x06\xab\x26\xf7\xe8\xa2\x7f\x3c\x8f\xb6\xa7\x89\x25\xf8\xbf\x17\x04\x07\x0d\xee\x8c\x20\x78\xdf\xf2\x4b\x6d\x4b\x83\x86\xe0\x92\x0d\x29\xbf\x78\x63\xa3\x6e\xaf\x1d\x2c\xfc\xad\x97\x89\xb7\x35\xa6\xb7\xd6\xd5\x18\xbc\xa3\xfe\x81\x4a\x88\xc7\xbb\x25\xbc\x5a\xfc\x60\x94\x7e\x7f\x97\x8e\xf7\x89\x45\xbe\xdc\x45\x77\xf4\xd9\x59\xd4\xa4\xa5\x9c\xcd\x0c\x67\x9c\x83\x7f\xa0\x11\x6e\xd8\xd6\x4b\xca\xb3\x6a\x9d\x56\x22\xeb\xa2\x11\xc7\xee\xf4\xb3\x89\x58\xe5\x91\xe3\x0a\x63\x56\xe5\x7f\x15\x62\x62\xde\x40\x41\x70\xd0\xe5\xff\x1b\x04\xf7\x45\x0a\x82\xc7\xdc\x48\x74\x59\xfb\xe5\xa9\x98\x20\x89\x49\xd8\x97\xdd\xfb\xd2\x32\xfa\x19\x61\x51\x52\xa0\xd6\xcd\x71\x15\xc1\x5d\xb5\xf9\x84\xf3\x58\x3a\x47\xe1\x41\x7a\x1b\xf3\xce\x3d\x75\xe1\x64\x8d\xa0\xaa\x0c\xb5\xea\x70\xe2\x3b\x49\xa6\x20\x7a\x7d\xc3\xb8\x05\x43\xa8\x59\xcc\x20\x59\xcd\x38\x05\xef\x79\x5c\xd6\x17\x39\x08\xce\xe9\x52\x21\x95\xe1\x34\x76\x20\xa9\x4f\x13\xd3\x21\xe7\x9b\xce\xc4\x4d\xf1\xfb\xcf\x11\x53\x8f\x8f\xd5\xd5\xb7\x01\xbf\x4f\xcf\xe1\x0c\xcf\x08\x29\x94\x07\x48\x97\xe5\x28\xcc\x3a\x38\x08\x90\xf3\xd3\xd1\x5d\x9f\x91\x0b\x09\x90\x34\xd3\xa4\xb1\x54\x89\xae\xf8\x1c\xe5\x2f\xd9\xab\x80\x41\x7e\x3e\xdb\xae\x23\x07\xc1\x47\x71\x0f\xd3\x8a\x86\x0c\xf2\xe6\x1c\x4d\x64\x5c\x52\x87\x8b\x2d\x58\xb4\x71\x70\x43\xf1\x39\xdb\x5b\xe3\x9f\x76\x99\xec\xc4\x9c\xcb\x68\x7d\x90\x2e\x8b\x7d\x8b\x21\x35\x96\x82\xd6\x87\xc5\x73\x78\xa7\xa6\xb9\x42\xf0\x10\x7d\xf1\x87\x43\x2f\xcd\x24\x4a\x49\x79\xc3\xc7\x71\xf5\xb4\x73\x19\x2d\x72\x10\xfc\xa9\xd5\xb0\xd0\xba\xde\xe4\xbb\x9d\x27\x6a\x0a\x13\xb9\x1c\x9b\x2c\x81\xa9\x3d\xbe\x1b\x35\xdf\x79\x6a\xdf\x6f\x5b\xc8\xb4\x5e\x3f\x97\xd1\x7e\x46\xba\x6c\x6c\x02\xcb\xca\x6d\x74\xa2\x8c\x25\x7e\xc5\xd7\xb7\x5d\x5f\xa6\x6e\x94\x0f\x4d\x76\x8f\x0c\x32\xfe\x4e\x9a\x5e\xcb\xfd\xae\x24\x78\x6e\x13\x28\xd0\x7f\xea\x99\x47\x82\xb2\x38\xda\x5e\xd4\xc8\xd2\x3d\x54\x53\xdb\xea\x71\x21\x1c\xd3\x8c\x33\x69\xd0\x5b\xa1\xbc\x27\x75\x35\xcb\x83\xe7\x81\x2c\x03\x62\xe2\x00\xe2\x90\x8e\x81\xd3\xaf\x63\x8b\x30\xd5\xbb\xb3\x9f\x5b\x3d\xd4\x71\xab\x99\xd2\xe3\x69\x74\xee\xc6\x15\x8f\xef\x35\x58\x06\xa9\x93\x85\x69\x95\x88\xba\x20\x0e\x3e\x81\xa2\x57\x7f\x7e\x5b\x65\x05\xb3\xd4\xe4\x5a\x83\x75\xdb\x93\xc5\x18\x35\xd1\xd7\x1e\x0a\x7d\x8f\x8c\x9a\x73\x64\x1e\x8c\x65\x14\x43\x6f\xfb\x41\x1c\x7c\x02\x65\x81\xf3\xe7\x2d\xaa\x72\xe3\x52\xb9\x7c\xde\x75\x6a\x3d\xbe\x89\x78\x5a\x6d\xfb\x05\xc7\x02\x74\xe5\xfb\xac\x22\xb3\xf7\xac\x9c\x10\x75\x41\x1c\xfc\x77\x10\xc5\xe9\x5c\xb9\x5e\xf8\x78\x31\xab\x90\xfa\xd4\xb0\xdd\x55\x44\xdc\xc5\xe6\xc5\x75\xd1\x87\xf9\xad\x33\xda\x3e\x35\x35\xca\x65\x88\x20\x38\x88\x0b\x90\xa0\x45\xf1\xf5\x0b\xfa\x4f\x7f\xfe\x97\x67\x3d\x50\xd7\x3c\xf3\x24\x40\xa7\x2f\x0c\xb8\xdd\x85\x2e\x52\x7b\xaf\xe4\x57\xd0\x1a\xef\x91\x07\x7f\xf0\x38\x68\xed\xfb\xf1\x7d\xac\xe8\xaa\xfd\xab\x3b\xd0\xc9\x57\x20\x0e\x3e\xf4\xa0\x93\xbb\x21\x2f\x9e\x24\xaf\x1e\xc9\x6c\xa7\xdf\xe0\xc6\x9f\x7c\xf1\x81\xa8\x97\x2b\xaa\x59\x94\x65\x32\xc7\xe0\x5b\x7d\x10\x74\x82\x2f\x88\x83\x2b\x40\xa2\x54\xb2\x31\x59\x5a\x61\xa7\x57\x59\xd8\xa3\x93\x76\xe2\x3c\x4b\xc0\xae\x2e\x9d\xa1\x8b\xd3\x5e\x45\x2e\xe3\xed\x17\x06\xad\x23\x80\x38\xb8\x02\xef\xa7\xa5\xd9\x62\xf1\x38\x7f\x60\x2c\x63\xd8\x76\x3b\xe0\x7a\x5a\x7e\xff\x6d\x44\x34\x33\x24\x9a\xfc\x0b\xef\xf5\x3d\x12\x03\x68\x23\x0c\x10\x07\xff\x1d\x0e\x51\x19\x3b\xed\x93\x9a\xea\x9c\x4d\x38\xe3\x95\x5b\x1e\x78\xce\x3f\xa7\x0e\xdd\x0d\xa7\x11\x18\xbb\x93\x3d\x8c\xfa\x40\x16\x3a\x55\x07\xc4\xfd\x57\x81\xff\xb9\x59\xfe\x8b\x03\xa0\x5b\xd8\x59\x0e\xf0\xfb\xd0\x16\xa7\x9a\x46\x11\x62\x4e\x14\x7d\xbe\xfd\x39\x8d\xac\x70\x07\xad\x98\xdc\x61\x9e\x6a\x66\x51\xd9\xd9\xe9\xf4\x12\x14\xd2\x03\x71\x48\xcf\x51\xc9\x7e\x04\x94\x6e\xda\x29\xa1\xc1\xe1\x3c\x97\x74\x50\xdd\xdd\x7d\x3f\x7f\x7f\xf7\xe2\x56\xd5\xf1\x22\x2e\x0b\x6d\x6b\x29\xb4\xc9\x16\x88\x83\x3b\x10\x2f\x97\x65\xd6\x54\xda\x5d\xda\x5c\xfc\x30\xd5\xec\x28\x63\x9b\xd2\x4d\xcd\x56\x75\xfd\xc7\xa7\x93\x3f\x65\xe4\x69\x3f\xbc\x09\x11\x75\x41\x1c\xdc\x81\xa4\xba\xeb\x2a\x6e\xaf\x76\x6e\x15\xf7\xee\x35\x96\xf9\xed\x74\x2e\xa4\xc8\xff\xbc\xc5\xa4\x15\x6e\x8b\xb7\x60\x7b\x77\x6f\x1e\xda\xb8\x06\xc4\xc1\x7f\x07\x3f\xd3\x5f\xaa\x37\x2d\xef\xac\x4a\xa5\x6a\x09\x26\xe1\xce\xdc\xdf\x92\xf0\x98\xb8\xe0\x80\x36\x60\x24\x17\xb0\x7c\x49\xfc\xe4\x3d\xc2\x01\x10\x87\x70\xc0\x17\x10\x04\x07\xcd\x27\xce\xfc\xf8\xdf\x4f\xb6\xf7\x16\xcd\xec\x27\xe3\x00\xca\xac\x8e\x3d\xbf\xe2\x95\x10\xca\xcb\xd5\xfe\xad\xaf\x67\x86\xad\xdb\x85\x94\xbb\xa0\x3c\x00\x88\x83\x8f\x5d\xcd\x43\x36\x23\x38\x0e\xdf\x29\x42\x43\xc3\xaf\xdc\x1c\xab\xc6\x4e\xbb\xd8\xd3\x20\x34\x77\xc0\xa8\xed\x82\xd5\x34\x79\x9e\x21\xa2\x2e\x88\x83\x3b\x90\x5a\x5a\x8c\x6e\xd0\xc3\x82\xe5\x1b\xbc\xf1\xf8\xf6\x2f\x13\x61\xc7\x85\x6a\x8e\xf0\x17\x52\x82\xc1\xb6\xba\xac\x4b\x52\xa4\xd0\x37\x4c\x20\x0e\xee\x80\xcd\x77\x3b\x72\xc9\x59\x8c\xdf\x43\xeb\x04\x3e\x23\x7f\x8f\xae\x92\xff\xa8\xef\x1f\x74\xa6\x2d\xeb\xe7\x7d\xa5\x7d\xff\xf3\xc9\x2e\xb4\x1b\x2e\x80\x83\xff\x0e\xed\xcc\x01\xbc\x27\x1d\xf7\xf0\xcb\xf5\x38\xb7\x8f\x03\x9e\x6d\xbd\x4f\xcb\x62\x9d\x96\xc7\xc7\x78\x3c\x53\xf9\x46\xe8\x97\xc4\x77\x84\x03\x20\x0e\xea\x03\x0f\xfe\xdd\x01\xd0\xe4\xee\xcc\x0f\xeb\x35\x2c\x2f\x54\x25\x73\x34\xd0\x48\x64\xd6\x70\x86\x78\x1e\x2e\x0f\x3f\x58\xb9\x60\x3d\xbf\xed\xbf\xe5\x9c\xdf\x67\xfb\x76\x1d\xca\x42\x00\x38\xa4\xb1\xdb\x37\x48\x44\x1c\x8e\x0a\xa3\xe3\x14\xe6\x09\x73\x77\xed\x8e\xd1\xde\xb2\x7c\xef\x91\x5e\x6f\x19\x47\x4f\xb5\xd9\xfa\x0c\xda\xb4\x07\xc4\xc1\x1d\xf8\x90\x75\x54\x87\x7f\x83\xd4\xa5\xbd\xb4\xac\xbb\xe1\xb8\xfb\xde\xc7\x08\x9c\x17\x36\xcf\xb3\x28\x99\x3b\x0f\xbf\x99\x4b\xc4\x41\x1b\x58\x81\x38\xb8\x03\x9e\x38\x92\xc6\xce\xba\xaf\xa3\xcc\x24\x0c\x99\xe2\x0d\x15\x0b\xef\xd3\xab\xa9\xf9\x39\x77\x09\x5d\x5e\x17\xa2\xe8\x45\xa7\xb1\x81\x36\x31\x03\x70\x48\x1b\x63\x4d\xba\x1c\x1a\x3d\x58\xb3\xeb\x9a\xf1\xba\xf9\xa7\x94\xf4\xaa\xa0\x42\x10\x7d\x78\xe1\x8b\x86\x7b\x74\x4a\xa9\xf9\xcd\xae\x4b\x08\x07\x40\x1c\xd4\x07\x00\x41\x70\xd0\x4c\xfb\xcc\xf5\xff\x0a\x9f\xca\x1f\x5a\x8b\x2d\x01\x65\x7a\x3f\xee\x8e\x77\xe0\xe4\xda\x7e\x18\x56\x23\xd6\xd0\xb0\xdc\xcb\xba\x29\xad\x7a\x1f\xda\x11\x1c\xc4\xc1\xc7\x5e\xfd\x72\x3e\xc0\x76\xc2\x2b\xe7\x51\x7b\x7d\xd3\xde\x17\xe9\x20\x9b\x46\x85\x37\xb7\x2a\xcd\x82\x70\x94\x6c\x1b\xae\x9c\xf4\x41\x61\x5d\x10\x07\x77\x60\xed\xe4\x77\x44\x4f\x0e\x16\xcd\x09\xfa\xc5\x69\xe1\xfb\x13\x8d\x9f\x0f\x18\x52\x9f\xa9\xd2\x38\x16\x1e\x1a\x87\x15\x70\xf8\x42\x6b\xca\x20\x0e\xe9\xf4\xd6\xed\xef\xf3\x83\x85\xcb\x35\xdb\x92\x6f\x78\x05\x35\x7c\x7f\x58\xa1\x56\xdc\xb3\x88\xad\xd1\xaa\xd6\xb1\xdf\x5b\xa5\xa9\x5b\x80\x36\x01\x01\x70\x48\xa7\x62\x92\xf9\x7e\xe2\xa0\xb8\x8c\xd9\xe1\x6b\x90\xd6\x66\x38\xc5\x5b\xcf\xea\xc1\xe1\xfc\x32\x95\x7f\x76\x64\xc7\xe1\x5e\x19\x7e\x39\xc2\x01\x10\x07\xf5\x01\x9f\x7f\x77\x00\xf4\xd8\x73\x96\x03\xc9\x3b\x25\xb3\xba\x17\xe7\x0a\x29\xaf\x4c\x0f\xed\x4f\xeb\x9b\x0c\xca\x5d\x6f\x74\x8d\x26\x94\x6d\x72\x5b\x1f\x55\x49\x30\x85\xd6\xd3\x41\x1c\x7c\xec\xeb\xf4\x27\x3b\x3b\x32\xea\x43\x6d\x34\xde\x61\xce\x51\x52\x14\x57\xf1\x6f\x15\xc6\xd1\x6b\x05\xe6\x93\xe0\x28\x9b\x93\x4a\x8c\x22\xea\x82\x38\xb8\x03\x2f\x6a\xc4\x08\xc4\x5a\x4f\x59\x13\x82\xaa\x1d\xb1\x52\x9d\x04\xd4\xb1\xef\x6b\x6b\xfb\x2d\xf5\xee\x3d\x23\xc1\x30\xfd\x11\x06\x6d\x0c\x07\xe2\xe0\x0e\x10\xc8\xdb\x7e\x2b\x8e\xf8\xc1\x20\xcf\x47\x95\x77\xf0\x80\xea\x86\x1b\xe7\xe2\xaf\x7a\xd6\x70\xc1\x44\x39\x8b\xe1\x65\x19\x4a\xe8\xa4\x74\x10\x07\xff\x1d\xb6\x46\x7e\x1a\x4b\x66\x6e\xbf\xb6\xea\x7c\x4d\xba\x87\x69\x73\x14\xb9\x53\xdb\xfc\x1a\xff\x61\xc5\x57\xec\x5d\x95\x76\xfb\x03\xe8\x5e\x00\xe2\xa0\x3e\x00\x08\x82\x83\x9e\x41\xcf\x72\x40\x90\x27\xd4\x38\x13\x33\xc3\xec\x85\xa8\x3b\x25\x23\xef\x15\xb3\x71\xd3\xe7\xd5\x5c\x58\x0c\x8f\x7d\xe9\x7b\xa9\x66\xe7\x89\xa1\x4d\x70\x40\x1c\xd2\xc7\x81\xe1\x4e\x37\x66\x06\xd3\x67\xc4\xb7\x09\xcc\x26\x74\xca\x59\xde\x76\xa7\xeb\x14\x8a\x9e\x1e\x1f\xe8\xc4\x63\x66\xdf\x89\x67\x87\x3e\x0e\x04\x70\x48\x1f\x07\xb2\xad\x9a\x63\x75\xb0\xde\xf6\x17\x78\xff\xda\x9d\x7b\x4a\x7e\x6d\xbe\x05\xff\x11\x49\x19\xe5\xb4\x65\x92\x57\x52\xef\x1d\xe8\x83\x56\x10\x07\x77\x80\x2e\xbc\xb3\x50\xdd\x4d\x2f\x21\xc1\x65\x09\xf3\x70\xb3\xc3\x8d\xe8\x2f\x6a\x34\xd5\xfc\xab\x9b\x6c\x77\xad\xca\xc5\xf6\x19\x52\x10\x75\x41\x1c\xfc\x77\x68\xb9\x33\x92\xbb\xa8\x5c\x70\x2d\xb8\x3d\x83\x6e\xe2\xe3\x6a\x63\x7d\x2c\x71\xa3\xf1\xd6\x96\xd5\x56\xfe\x45\x1d\x0a\x7c\x5e\x5c\x84\x03\x20\x0e\xea\x03\x9f\x01\x41\x70\xd0\xb2\xe2\x7f\x83\xe0\xbe\xc8\x41\xf0\xb8\xdf\xd6\x3d\x8f\x53\x38\x8c\x8b\x6e\x71\x48\xf1\x7d\xf9\xae\x93\x84\xaa\xcc\xd0\x65\x97\xb1\x70\x57\x3e\x73\x5d\xef\x0f\x53\xe3\xb9\xac\x9c\x4c\x22\x5d\xf6\xf9\x8b\x61\x67\x6f\x29\x6e\xa7\xa4\x00\xd9\xfd\x90\xa4\x1a\xb9\x77\x8e\x8c\x0a\xfe\xca\x7a\x53\xdb\x33\x19\xcb\x91\xae\x63\x22\xe7\xb2\x4e\x84\x1c\x04\xaf\x33\xbf\x33\xf5\x46\x52\x82\x66\x70\xeb\x23\xb7\xdf\xaf\x91\x81\xad\x45\x1d\x0e\xf7\x67\x4c\x3f\x9e\x19\x3e\x92\xb4\xc2\x73\x7a\x75\x2e\xa3\x25\x43\x7a\xd1\x26\x96\xec\x34\xe9\xb8\x59\xa1\xf7\x68\x62\xe1\x14\x4f\xa4\x53\xa6\xe3\x91\xeb\x91\x79\xb0\x63\xbb\xf4\xf5\x3b\x25\x29\xed\x65\x7f\xcf\x65\xb4\xc8\x41\xf0\x37\x92\xdd\xcd\x6c\x5a\x6c\x9b\x9f\x24\x54\xa8\xdb\x22\x04\xf2\x89\x9c\xfa\xbb\x64\xdf\x78\x90\x73\x3b\x17\x53\xef\xd8\xb6\x72\x9d\xcb\x68\x85\x91\x2e\x5b\x44\xaf\x70\xc9\x29\xbc\x52\x47\xaa\x30\x25\xee\x71\xad\x47\xf5\x78\x72\xef\x9b\x17\x0a\xf5\xd2\x02\x4c\x54\xa5\x5b\xa4\x55\x37\xce\x65\xb4\xc8\x41\xf0\x94\xcb\xba\x1b\xdc\x19\xe1\x21\xe6\x76\xd7\xfb\xd0\xe3\xca\x1b\xa6\xd6\xd8\x5f\xf6\xff\x0e\xeb\xda\x5a\xd6\x19\xe2\x11\xfd\x9d\x77\x2e\xa3\x75\x42\xba\xec\xc7\xd4\x07\xb6\xb3\x5b\x0b\x1e\x57\xf8\x07\x2b\x87\xdf\x1f\x8b\x95\xef\x1a\xfd\x15\x34\xd4\xb7\x6e\x6a\x6d\xfd\x6e\x31\x5e\x8b\x72\x6e\x6b\x80\xa0\xff\xd4\xb3\x1a\xfd\x54\x56\x0e\x3f\xaa\x37\x75\xf2\x1c\x99\xa9\x8a\xd9\xa8\x88\xac\x14\x7a\x90\x87\x62\x3d\xed\x55\xc3\xd6\xfa\xdd\xec\x0f\x3b\xdd\x88\x06\x07\xe2\xe0\x0d\xee\xb1\x7e\xd6\xfb\x3b\x14\xe8\xd2\x61\x4a\x86\x27\xc6\xeb\xb9\x24\xa8\x65\x33\x74\xf9\xe3\x31\x56\xb7\x70\x54\xab\x03\x30\xaf\x48\x22\xea\x82\x38\x78\xa3\xf7\x2f\xbc\xce\xee\xd5\xbd\xbd\xb5\xd1\xb8\xc9\x7e\x21\x5f\x06\xb5\xb7\x87\x38\x71\xec\xe6\xae\x2e\x8b\xa0\xd6\x65\xa6\x14\x45\x68\x97\x3a\x10\x07\x6f\xf4\x02\xe9\x3c\x04\x9b\xec\x06\x3e\xe1\x46\x51\x6e\x07\x4c\x31\xb7\xe6\xd4\x9c\x30\x6f\x3d\xb6\x5a\x2e\x19\x62\x16\x4f\xf6\xc1\x2d\x41\xd4\x05\x71\xf0\xdf\x41\x33\xb0\xfb\x9a\x0d\xdf\xda\x4e\xa3\xbb\xa2\xf1\x67\x1c\x74\x0b\x17\xbb\xbd\x5b\x02\x02\x9d\xf8\x71\x6e\x6f\x7e\xd3\xd5\x7d\x65\x85\xc2\x7f\x00\x0e\xba\xd9\x03\x82\xe0\xa0\xb6\x79\x96\x03\x8c\xa4\xa1\x69\x83\xc9\x85\x95\x6e\x0c\x96\xbd\x56\xa4\x7c\x59\xf5\x2e\xb8\xc1\xc9\x98\x46\x36\x82\xe3\xf6\x06\x2a\x21\x92\xd0\xee\xa7\x20\x0e\x3e\xf6\x4f\xe2\x78\x6b\x4a\x4f\x0f\x69\xe6\x2f\xb7\x17\xf4\xcc\xfb\x1b\x1c\x12\x30\xad\x67\xe8\xb9\xfb\x16\x45\xa5\xd4\xe7\x76\xe2\xc4\x23\xea\x82\x38\xb8\x03\xb2\xcc\x36\x16\x6c\x58\x33\x5c\xda\xc4\xde\x61\xa1\xee\x3a\x5a\xc6\x76\xce\x55\xa1\x63\xea\x46\xde\xb9\x17\x98\x02\x49\xa2\x63\x10\x75\x41\x1c\xdc\x81\x8f\x82\x25\x6d\xa8\x11\xa3\x46\x19\x1f\x24\x22\xd2\xf8\x83\xd2\xc9\x33\x25\x16\x2e\xf3\x4c\xd8\x72\x06\xfd\xf2\x6e\x49\x0a\x82\x4e\x86\x04\x71\xf0\xdf\xa1\x7b\xfc\xe8\xe6\xbc\x14\xa5\x8c\xd2\xed\x4e\x9f\x0b\xc2\x05\xa2\xea\xcf\x9a\x65\x3d\xe8\xfc\xb6\x50\x9d\x7d\xa9\xa8\xd9\x6c\xcb\x10\x0e\x80\x38\xe8\x66\x3f\xf9\xef\x0e\x80\xee\x61\x67\x39\x10\x42\x35\x7f\x9a\x29\x40\xc0\x59\x9b\x86\x1f\xb8\x76\xd0\xff\x43\x96\x1e\xff\xad\x73\x58\xb5\x4f\x7c\x9d\xaf\xac\x9d\x83\xc8\x04\x62\xec\x20\x0e\xe9\x0b\xe0\x16\x9f\x44\xd1\xd5\xa0\x79\xa7\xe8\xc7\x4e\x8a\x13\x68\x7c\x05\xe5\x06\xbf\x5e\xfa\x15\x9f\x3c\x3c\x25\x7c\xc8\x3f\x6f\x08\x6d\xde\x02\xe2\xe0\x0e\x0c\xf1\xe5\x33\x0a\xbf\x78\x3e\x20\xfc\x29\x61\x29\xc8\x4f\xc2\xf4\xb6\xf6\x0a\x01\x66\x2c\x99\x6c\xe3\x6b\x9f\xcf\x86\xd8\xbf\xa1\x23\x6b\x40\x1c\xdc\x01\x94\x70\xde\xb5\xca\x1f\xc5\x9e\x11\xa8\xf2\xfe\x5f\x59\xe7\xdd\x03\xf4\xe9\xb7\xb9\x38\x74\x0f\xbf\xc6\x53\x85\x56\x7a\x3e\x87\xde\x5d\x80\x38\xf8\xef\x10\x4d\x3b\xc8\xdf\x9a\x2d\xa0\x3e\x61\xba\x89\xfd\x55\x96\xbc\x5a\x3b\xb1\x36\x80\xd0\xd6\x6f\x92\x39\x54\x9b\x3d\xf8\xc0\xea\x35\xc2\x01\x10\x07\xf5\x01\x40\x10\x1c\x34\xa1\x38\xf3\x64\x80\xc6\x7b\x52\x62\xa5\xae\xbe\x89\x0d\x4a\x2d\x64\x0f\x0a\xdf\x2e\x17\xe5\x58\xfb\xe3\xcc\xd6\x3c\x0d\x16\xf4\xfc\xae\x56\x0f\x2d\x04\x83\x38\xf8\xd8\x7f\x94\x71\xee\x5c\xb6\xb3\x1b\x8c\x89\x6d\xcd\xa0\x5c\x9b\xe4\x78\x8d\xca\x54\x91\xfe\x78\x8a\x7c\xd5\xad\x72\x2b\xf7\xd6\x25\x32\x44\x5d\x10\x07\x77\xe0\x56\x65\xbb\x55\x72\xe3\x5a\x7a\x64\x09\x05\x65\xe3\x63\x6b\xef\x91\x84\x9f\x42\x2c\x28\x0b\x4b\xf7\xaf\x65\x70\x7b\xfc\xd8\x08\x42\xd4\x05\x71\x70\x07\xea\x29\x2f\xf3\xf4\x89\x61\x3e\xb7\x44\x51\xae\xe5\x1a\x25\x9d\xed\x8e\xec\xea\x7f\x36\xcd\xb9\xcf\x5b\x22\x6b\x31\x58\x1b\x9f\x85\xa8\x0b\xe2\xe0\xbf\xc3\x97\xc7\x19\xfb\x22\x43\x6d\x37\x08\x36\x8c\x4b\xea\xb0\xca\xbf\xb1\x3c\xfb\x14\xfd\x41\xd4\xcc\x26\xff\xeb\x6e\xaf\xae\xb9\x4d\x13\xc2\x01\x10\x07\xf5\x01\xb2\x7f\x0f\xff\x81\x66\x77\x67\x39\x20\x31\xa5\x26\xa3\xc8\x61\x18\xd7\x1e\xef\x7b\xfb\x69\xfb\x11\x09\x1e\xc9\xab\x56\xee\xce\x3d\xd2\x39\x92\x1b\xfc\x1e\x27\x59\xd0\x17\xc0\x20\x0e\x3e\x76\xba\xb0\xef\x17\xc8\xcc\x88\xf7\xd7\x44\x5b\xd6\x96\x04\xa7\x74\xec\x33\xf6\x03\x65\x7b\xe8\x27\x2f\x39\x9f\xbe\xdf\xa2\xea\x83\xfe\xaf\x40\x1c\xdc\x01\x23\x89\x40\xf3\xc4\x5a\xfe\xda\x9f\x16\x22\xa9\x55\x8c\x8b\x2a\x0b\xd7\xfb\x86\xd0\x75\xdb\x53\x9f\xca\x56\xe5\xfe\x7e\x59\xe4\x86\xa8\x0b\xe2\xe0\x0e\x94\x72\xec\x58\xb1\xd4\xf7\x19\xbc\x14\x3e\x64\x30\x55\x89\x79\xa8\xfb\x84\x4e\xc9\xb1\x7d\xf7\x92\x44\x6c\x68\x69\x82\x27\x1d\x74\x4f\x04\x71\x48\xbb\x8c\xca\xa6\x19\x1a\x05\x93\x5e\x47\xc1\xe4\xbf\x4b\xa6\x3b\xd9\x49\xf7\x6c\xe4\x9a\xa0\x97\xbb\xe0\xd5\x56\x66\x85\x5f\x3b\x9e\x7b\x08\x07\x40\x1c\xd4\x07\x00\x41\x70\xd0\x54\xfb\x2c\x07\x82\x9c\x4d\x02\xf3\x67\x71\x5e\x15\x39\xb8\x1a\x0e\x8c\x2b\xa7\xa5\x35\x59\xca\xe0\xd6\x18\x5a\xdc\x66\xc1\x2d\x9e\x2b\x9c\x81\x4e\xf2\x00\x71\xf0\xb1\xab\x94\xca\x9f\xe6\x13\x86\x8b\xb4\x11\x25\x73\xd9\xb5\xf0\x38\x8b\x86\x27\x8e\x4e\x1f\x89\xa2\xde\x2d\x57\x1b\x27\xf8\xbd\x17\x8d\xa8\x0b\xe2\xe0\x0e\x5c\xb7\x29\xc8\xe9\x56\x5f\x9e\xa9\xa5\xbb\x1f\xff\x3d\x31\x85\x8b\xd1\xfd\xd0\x94\x2f\xea\x5b\xaf\x5d\x38\x89\xab\x9b\xb2\xd1\x36\xa2\x2e\x88\x83\x3b\xf0\xa9\xe1\xa9\x7f\xfc\x27\xad\x91\xb8\x61\x96\x8a\x5a\x67\x0e\xa3\x51\x1f\x6a\xfa\x9f\x36\x5a\x7a\x93\x57\x45\x9e\x3c\x24\xfe\x03\x9d\x3e\x03\xe2\xe0\xbf\x83\xef\x9d\x03\x8a\xaa\x70\xcf\x9c\x1d\xa2\xa1\xe6\xc2\xb2\x4d\xd2\xd2\x20\xb2\x2f\x26\x44\x95\x2f\x44\xec\x2e\xd8\x61\xb7\x7d\xed\x80\x3e\x0a\x02\x70\x50\x1f\x10\xfe\x77\x07\x40\xcf\x3d\x67\x39\xf0\xfc\xa4\xd6\x4e\x55\xb3\xf2\xf2\xf3\x59\xaa\x95\x72\x03\x77\x5e\xd7\x81\xdb\x4d\x13\xa7\x02\x9f\x66\x48\x7c\x84\x92\xda\xe6\xa0\x8f\xe2\x40\x1c\x7c\xec\x62\x8b\xd9\xa3\xc1\xb1\x44\xe8\x03\x0e\xa3\x2b\x43\x36\xcb\x7a\x1a\xd6\x74\x79\x14\x4d\x09\xce\x62\xb3\x3b\x64\xc7\x7f\xcb\xa1\x97\x0c\x20\x0e\xe9\x5e\xa0\x13\x45\xfb\x60\x08\x7b\x9e\x30\x74\x9c\x61\x06\x65\x55\x68\xfb\xa6\x84\xa5\xfb\x67\x0b\x9e\x43\x5d\x69\x09\xdd\x82\xf2\x2d\xe8\x5e\x00\xe0\xe0\x0e\x10\x92\x08\x58\x4b\xc7\xc9\x6b\xdb\xdf\x6e\xad\xed\x5e\x79\x66\x55\xa0\x4f\x16\x6c\x86\x13\x3c\xe8\x76\x45\x89\x39\x54\xa0\x0e\x3a\x1e\x14\xc4\x21\xed\x8c\x2e\x10\x5c\x50\x15\x4b\xe2\xd3\xaa\x9f\xdf\xfa\x63\x59\x9a\xd8\xeb\x86\x55\xde\xb2\xa1\x0f\xf5\xbb\x69\xcf\x61\x65\x76\x5b\x21\x84\x03\x20\x0e\xea\x03\x80\x20\x38\xe8\x21\xf4\x2c\x07\x66\x3a\xfd\xaf\xd8\xb0\x76\x95\xf5\xcf\x79\x7d\x9f\xbb\x2f\xfe\x79\x67\x50\x2a\xd5\x46\xb3\x7f\x3e\xa6\x67\xc0\x7e\x6d\x19\x15\x3a\x7a\x19\xc4\x21\xcd\x07\x08\x3d\xd3\x02\xf5\x5f\x2a\x07\x8d\x77\x11\xf5\xbb\x5f\xba\xeb\x9b\x48\xfc\x51\xe6\x6d\x60\x82\x2e\xd3\xfa\x63\xac\xb8\xbb\xd0\x5c\x13\xc4\xc1\x1d\xc0\x7e\x4a\x26\xf7\xf3\x92\xbc\x6b\xab\x41\x0e\xfd\xf8\x77\x6d\x5c\x91\xaa\xaf\xa6\x09\xdb\xf7\x65\x59\xe2\x8c\x24\x37\xe5\x2f\x42\xf3\x17\x10\x07\x77\x80\x3a\x86\x4e\xc2\x5b\xcb\x57\xf3\xb2\x38\xe1\xa3\x44\xcb\x91\x1b\x44\xf8\xe5\x16\x1c\xed\xd2\x5d\x15\x06\xda\xbe\xbb\x3a\x91\xd0\x11\x99\x20\x0e\xfe\x3b\x14\x06\xc6\x38\x39\x32\x29\xff\xc5\x8c\xe3\xf5\x18\xef\x60\x89\x60\xc4\x7d\xf5\x37\xe5\xf3\x37\x47\x94\xa2\x54\x3e\x3d\xc7\x1f\x7f\x10\x0e\x80\x38\xa8\x0f\x38\x01\x82\xe0\xa0\xc0\xe0\x7f\x83\xe0\xbe\xc8\x41\x70\x32\x76\xbc\x0d\x85\xf0\xdc\xcb\xef\x3e\x36\x79\xde\x46\x13\xbf\x2b\xaf\x4f\xfc\x44\x04\x87\xf4\xde\xa1\xc0\x8d\xe4\xb7\xe9\xc3\xef\xcf\x6d\x0d\x03\x74\xa1\x33\x03\x0c\x3f\x77\x4b\xaf\x94\xef\x65\x0b\x47\xf4\x0d\xb4\x61\x14\x60\xcd\xcf\x8f\xa3\x28\x64\x5d\x8a\x21\xbf\x13\x78\x79\x25\x58\xbe\x0d\x0a\x30\x00\x38\xf8\xdf\xe7\x05\xef\xcb\x1f\xa8\xd8\x8a\x82\x3c\x02\xb7\xc3\xd0\x3f\x19\x89\x3b\x78\x39\xa3\x8f\xc5\x9e\xb8\x5c\xcb\xc6\x37\x17\x6a\x96\xbd\x05\xbd\x58\x00\x70\x70\x4f\xff\x68\x90\xd2\x69\x5f\xe4\x8b\xb5\x5f\xc0\x0a\xc6\xe8\xa9\xff\x43\xa9\xfe\x66\x91\xe2\x4e\x46\x05\x16\xe3\x74\x8e\x71\x5a\xf3\x30\xa2\x2e\x88\x83\x7b\x6a\xff\x28\x56\xf9\xd4\xc3\x53\x33\xfb\x69\xe1\xa7\xe4\x6b\x05\x42\xc6\x47\x13\x0c\x2a\x1a\x17\xbd\xe5\x9b\x5b\x56\xc7\xfb\xb6\x15\x10\x75\x41\x1c\xfc\x77\xc8\x69\xfb\xa8\xaa\xbb\xf2\x09\x7f\x90\x51\xab\xd2\xd6\x75\xda\x82\xfb\xba\x50\xe9\x9e\x84\x2a\x41\x62\x82\x3a\x46\x17\xde\x62\x0b\xb4\x73\x3d\x80\x83\x7a\x15\x20\x08\x0e\x8a\x04\x9f\x1d\x04\xc7\xed\x0a\x0d\x9b\xc6\x50\x63\xa8\xe2\xc9\x8e\x98\x2f\xf6\x3b\x9c\x10\xa0\x4d\x4a\xd2\x99\xd1\x34\x88\xd1\x7f\x5a\x95\x49\xf0\x15\x11\xaa\x06\x71\xc8\x41\xf0\xbd\xd2\x1d\x25\xb6\xeb\x3a\x5c\x58\x4f\x9f\x63\xd0\x66\xb9\xd4\xbc\xa8\x20\xb9\xe1\xd4\x48\x8c\x37\x30\xf1\x9d\x3d\x6a\xce\x8f\x1e\x51\x19\xc4\x21\x07\xc1\x89\x4e\x24\xfb\x54\xa6\x76\x31\x14\x9f\x3d\x9e\x7c\x17\xf9\xb1\xb4\xf1\xc5\x60\x91\xe2\xe9\xd1\xe9\x93\x76\xc6\xa1\xe4\xa4\x47\x83\x88\xca\x20\x2e\x40\x0a\x1b\xf6\x6b\xd4\x37\xb6\xf0\xea\xaa\xfc\x24\x11\x4d\x1e\x7a\x6a\x7e\xd7\xe8\x2f\xf1\x66\x1d\xbe\xaf\x6c\xe5\x09\x3d\xcd\x1d\xc9\xd4\x3a\x71\x21\x44\x10\x1c\xc4\x05\x48\xa1\xa0\xfc\xbf\xbf\xda\x3f\x82\xe0\x6b\x4c\xf7\x8b\xc8\x97\x69\x2f\x49\x69\x86\x49\xca\xd9\x56\x26\xc8\x0e\xb7\x8a\x1a\xaf\x78\xab\x5a\xe5\x3d\x67\x3c\x99\xa3\xe7\xf8\x67\x10\xdc\xb7\x98\x4b\xa1\xd3\x8e\xd8\xcf\xf4\x85\x13\xf9\xa1\xb1\x94\x5c\x60\xc9\xda\x20\xf6\xa3\x0c\xd5\xa8\x9e\x89\x0f\x12\x8a\x4e\x62\xff\xfc\x6f\x43\xab\xbb\x88\xb2\x73\xad\x13\xab\x4d\xb4\x23\x97\x81\x99\x6b\xd5\xfa\xc6\x2c\x81\x7f\x1b\xfb\xa3\x5c\x2c\x4d\xb4\xd2\xa9\xeb\xff\xf7\x82\xe0\xa0\xc1\x9d\x11\x04\x47\x6d\xcc\xeb\x97\x59\x55\xa4\x0a\x44\x53\xed\xa9\xce\x3b\x7e\x79\xbb\xcc\xd3\xe7\xd3\xe2\xa3\xed\xeb\xfd\xd7\xc9\x85\x32\x6d\x1f\xff\x03\x6d\xfa\xa8\xf5\xfd\x77\x9e\x70\xa0\x8c\xec\x7e\x05\x56\xbc\x78\x6f\x5d\x14\xb7\x0c\xab\xba\x60\xe8\x0f\x8e\xe6\x1d\x0d\xad\xc2\xb9\x7f\xa0\xdf\x98\x50\x19\x45\x2c\x8b\xc5\x08\x33\x63\xf0\xa8\x70\x8f\xe6\xe3\x52\xd1\x9b\x05\x42\x3d\x9b\x1f\x24\xfa\x0a\x2d\x34\x6f\x88\x42\x41\x70\xd0\xe5\xff\x1b\x04\xaf\x47\x0a\x82\x07\xdf\xe3\x3b\xb6\xb8\xf1\x46\x80\xb3\x92\xbd\x4e\xe3\x7e\xc2\xdd\xe3\x66\xae\xef\xec\x1e\x95\xa2\xd4\xd5\x38\x1f\x28\xf3\xfa\x72\xcf\x63\xe9\x5c\x1c\x39\x08\x3e\x1a\x34\x62\x50\x85\x57\xf3\xa6\x90\x3a\xa5\x45\x7b\x25\x35\xa5\x80\x38\x0e\x45\x3f\x94\xe8\x55\xe0\xe5\x5b\x46\x3f\xad\xa5\x8e\xcf\xe3\xb2\xf5\xc8\x41\xf0\x8d\x9a\x14\xdc\x99\x12\x4e\x96\xca\xdb\xde\x9b\x18\x89\x3f\x16\xf3\x67\xec\x31\x16\xaf\x5c\x4f\xb4\x45\x4d\x60\xc4\xc4\x64\x7d\x7c\x2e\xa3\x45\x0e\x82\xc7\xae\xd0\x33\xae\xa3\x9a\x95\xec\x65\x67\xbc\xb5\x37\xb1\xe5\xe9\x0b\x49\x7e\x76\xc5\x12\xe3\xfa\x46\xdd\x75\xfc\x0f\xfd\xcf\xd4\xce\x65\xb4\xc8\x41\xf0\x95\x1c\x2a\x5f\x4f\x69\xf4\x15\xfd\x4f\x39\x0e\x8f\xae\xec\x50\xbd\x6d\xaa\xf7\xb6\xa7\xd8\x1c\xbc\xd9\x85\x92\x21\xb3\xf9\xee\x5c\x7e\x64\x71\xe4\x20\xb8\xa3\x8c\x46\x17\x3f\x3d\x2f\xe9\xfa\xd4\x6f\x5e\xf7\xbe\x1f\x7b\x0e\xbd\x29\x1f\xb8\xa5\x8c\xef\x36\xe4\xf6\x1b\x76\xe2\xba\xf7\x9e\xcb\x68\x91\x83\xe0\xa8\x5e\xdc\x87\x7d\x72\xee\xef\x24\x3d\x1a\x9a\x3a\x7d\xe6\x47\x17\xd3\x1c\xa5\x59\x5e\x8f\x29\x33\x99\xee\x19\xcd\x1d\x27\x9d\xcb\x49\xc3\xe2\xc8\x41\xf0\xe6\x86\xdd\x5d\x0e\xbb\x9c\x48\xa6\x93\x23\x4f\xf2\xbc\xdf\x53\x19\xc5\x2f\xa3\x25\x08\x67\x38\x18\x1b\x14\xee\xc5\xe4\x37\x4a\x9c\xdb\x04\x0a\xf4\x9f\x7a\xd6\x04\x6a\xb0\xbd\x3e\x7c\x27\x3c\x87\x43\xcf\x92\xa8\xff\x30\x59\x92\xaf\x42\x00\xf5\x45\x1f\xde\x4e\xc3\xa6\xc8\x70\x67\xcb\x8e\xbe\x08\x62\xe2\x00\xe2\xe0\x13\x07\xc6\xa2\xa3\x01\xb2\x45\x82\xa1\x30\x9e\x5f\x8c\xa2\xd6\xce\xfe\x76\xb4\x61\xce\x8d\xb1\x51\x5b\x9f\x30\x0d\x54\x98\x7f\x8c\x7f\x87\x5e\x2c\x00\x38\xf8\x04\x4a\xc0\xe7\x37\x96\x7d\xfd\xad\x09\x9e\xcb\xb1\x95\xd2\xbe\xe5\xbe\x68\xf4\xfe\xed\xa4\x26\xa1\xd9\xbc\x78\xc9\xc4\x2d\x23\xc7\xd0\x02\x05\x88\x83\x4f\xa0\xe4\xd6\x67\x39\x99\x5f\xf6\xbd\x67\x74\x15\x1a\x6c\xe3\x65\xb6\xbe\x28\x7c\xb1\xf5\xd7\x21\x9a\x7b\x0d\xbb\x83\x39\x15\x57\x2e\xb4\x5b\x01\x88\x83\x1f\xd5\x82\x76\x7a\x92\xde\xf4\x53\x96\x3e\x27\xbb\x31\x38\xba\x7e\xe5\x98\xc4\xbf\xfb\x8f\x4d\xb6\xaa\xbb\x57\x61\xfd\xde\x55\x85\x97\xa2\x88\x20\x38\x88\xfb\x7f\x7f\x37\x5f\xbf\xa0\xff\xf4\xe7\x7f\x0b\xff\x01\xba\xe6\x59\x0a\xd0\x3b\x88\x09\x47\x5f\x88\xcf\x46\xb1\xbb\xd3\x8c\xf9\xe3\x83\x4c\x67\x19\x13\xc5\x07\x91\x3b\x68\xfb\x7d\x78\x11\x77\x12\xa4\x77\xa0\x6c\x3d\x80\x83\x2b\xd0\xb1\x74\x0b\xcd\xdf\x29\x88\xec\x93\xe0\xcd\xd9\xdd\x8a\xb1\x88\x6c\xba\xb0\xd7\x99\x7d\x76\x3a\xd2\x57\xf0\x07\x24\xc5\x16\x6c\x11\x75\x41\x1c\x5c\x01\xc1\xa3\xf5\xd6\x1c\x25\xda\xcf\x0f\xb6\x7f\x75\x7d\x2a\xcf\x35\xae\xb3\xdb\x21\x97\xcb\x4b\x97\xfd\x19\xa5\x15\xba\xeb\xe1\x6a\x00\x05\x54\x00\x1c\x5c\x81\x94\x51\xed\x77\x19\x17\x94\x35\x15\x62\x93\xd8\xe2\x9a\x83\x53\xfc\x5b\xd2\x7b\x49\x62\x52\x2f\x6b\x1a\xb1\xbc\x5c\x7f\x5d\x07\xed\x60\x0e\xe2\xe0\x0a\x3c\x52\x2d\xc2\xa6\x7f\x25\x7f\xa8\xba\xd3\xd6\x53\xfb\xc0\xdd\x62\xb9\x76\x9b\x5d\xd3\x35\xcf\xde\xc9\x2c\x76\x7e\x1f\x73\x26\x11\xda\x05\x16\xc0\xfd\x57\x81\xff\xb9\x59\xfe\x8b\x03\xa0\x5b\xd8\x59\x0e\x6c\xa5\x8e\x15\xe3\x3e\x39\xb1\x4c\x93\xfa\xc9\xcc\xaf\xcd\x5d\x2b\xdb\x8e\x3d\x7a\x68\xfa\xd8\xae\xf6\x60\xe5\x35\xdb\xf3\x27\xd0\x5a\x2a\x88\x83\x3b\x60\x2a\x5a\xc2\x7c\xdd\x63\xa2\xa2\x89\xc0\x23\xb4\xbc\xe2\xfd\xdb\x4e\xd3\xa0\xad\xaf\x4f\x13\x56\xd7\x5c\x45\xcb\x9e\xb4\x73\x26\x22\xea\x82\x38\xa4\xf0\x5f\xa2\x57\x5f\xda\xa9\xe4\x7b\x1d\x53\x5c\x6f\xa6\x1a\x1b\x76\x92\x17\x9a\x6f\xab\xc6\x52\x70\xe4\x08\xee\x31\x64\x85\xde\x83\xd6\x68\x41\x1c\xdc\x81\xf4\x83\xe1\x5b\x1c\x46\x99\xa5\xce\x78\x54\x02\x99\x65\xbd\xc5\x6e\x3c\xb8\xdf\xe7\xef\x48\x63\xc9\x56\x16\x12\x5e\x29\xa1\xdd\x40\xd4\x05\x71\x70\x07\x3e\xa3\x26\x76\xb9\xcf\x53\x4e\x09\xb6\x86\x2c\x31\x88\xaf\x0c\xf9\xde\xff\x32\x17\x94\x3a\xa1\x24\xaf\xa0\x38\xb7\xbe\x9c\xee\x8f\x70\x00\xc4\x21\x1c\xa8\x07\x04\xc1\x41\xf3\x89\xb3\x1c\x18\x98\x5d\x2e\x96\x1f\xfe\x1e\xf6\x8d\x7f\x28\xbe\x5b\x60\x4d\x99\xf2\xcf\x73\x32\xa5\xb9\xc2\xc1\xb7\x57\xee\x49\x90\xb1\x84\x11\x23\xc6\x0e\xe2\xe0\x0e\x90\x69\xf1\x89\x63\x7c\x66\x7b\xb7\x27\xa0\x40\xbb\x9e\x77\x22\xde\x72\xe7\xaf\x4f\x80\x03\xc5\xda\xae\xff\x4d\xa2\xf2\x03\x54\x28\x58\x0d\xe2\xe0\x0e\x5c\x4c\x66\xd2\x30\x32\xa1\x63\xb3\xd9\x3b\x25\xfd\xc9\x3d\xb9\xd0\xec\xc1\x59\x92\xd7\x74\x71\x9b\x7f\xd6\x9a\xcb\xf1\x57\x0a\xf4\xcc\x0b\xe2\xe0\x0e\x0c\x3e\xc9\x3c\xc0\x6c\x21\xf5\x7e\x74\x32\x65\x78\xf2\x0d\x9b\xe6\x81\x84\xbc\xed\xb8\x49\xd9\x83\x04\xdb\x7c\x1b\x33\x86\x7d\x68\x4d\x19\xc4\xc1\x1d\xd8\x3a\xbc\x17\x29\x89\x7a\x87\xcf\x32\x36\xbb\x46\x2d\x81\xd5\x5a\xb3\x5e\x8c\x8b\x7a\x3e\xed\x63\x57\x17\xba\x88\xb3\xf3\x23\x5d\x28\xfc\x07\xe0\xa0\x3e\x00\x08\x82\x83\x26\x77\x67\x39\x50\xe5\x2f\x9d\xe5\x23\x8b\xc7\xfc\xfd\xd7\xf3\x00\x51\xb2\x0f\xd9\xf2\xf1\x17\x63\xf8\x67\x0d\x5b\x8e\x70\x54\xde\x1f\xdc\xbd\x71\x19\xda\xb0\x05\xc0\x21\xad\x7b\x2b\x05\x4f\x87\x16\xe5\x92\xbb\xe1\xe9\xc6\xf8\x65\xde\xa0\x10\x35\xba\xf3\xcd\x79\x98\x31\x9b\xee\x9e\x9d\xe4\x43\x9d\xbb\xd0\xfa\x1c\x88\x83\x3b\x90\xc2\x17\xaf\xa6\x2c\xa6\xa0\x53\x1b\xc3\x7e\xab\xbd\xb9\x11\xed\x00\xb5\x3a\xed\xf6\xfb\xba\xf9\x3c\x74\x8a\xc2\x84\xb7\xbf\xa0\xbf\x15\x88\x83\x3b\x70\x3b\xb7\x4a\x2b\xfb\x41\x8c\xab\x6f\xcc\xd2\x9f\x46\xfd\xf4\xdf\x74\x98\xb2\x2d\xda\x3c\x57\xee\xd5\x30\x6f\x1c\x92\xe6\x0e\xbb\x22\xea\x82\x38\xb8\x03\x65\xe6\x8f\x7f\x09\x67\x16\x0e\x75\x96\x2c\xab\xcc\xbc\xbd\x6a\x57\x1f\x1a\xac\xc0\x23\x16\xa1\x1f\x67\x39\xd6\x82\x8b\x5d\x6d\x88\x70\x00\xc4\x41\x7d\x00\x10\x04\x07\xcd\xb4\xcf\x72\xa0\x7e\xd0\xa9\x59\x48\x56\x90\x3e\x5e\x9c\xd7\x0a\xcf\xb0\xe4\x57\xf1\x0c\x2e\xce\xc4\x53\xa9\xf8\x6e\xb5\x19\x05\x6c\xf5\x1a\x68\xa3\x35\x10\x07\x77\xc0\xf0\x26\x89\x85\xec\x31\x1a\xb7\x83\xe9\x38\x0a\xa9\xb7\xb4\xc6\xf7\x0c\x63\x2e\x65\xe7\x88\xaf\x32\x69\x44\x23\xb1\x17\x37\x52\x11\x75\x41\x1c\xdc\x81\xf2\xf7\xcc\x31\xc5\x14\xdf\x14\x1a\x7d\x08\x05\x26\xd8\xb2\x78\x29\x9a\xb9\x35\x47\x6c\xe2\x23\x31\xc8\x3b\xae\x8c\x91\x9b\x40\x75\x41\x1c\xdc\x81\x8d\x50\xd9\x3d\xc6\x89\x2a\x7c\x74\x7e\x42\x56\xa6\xb7\x1b\xf9\x6f\x30\x7c\x78\x7c\x22\xd7\x77\xc6\x6e\xb1\x26\x86\xbe\x1a\x82\x36\x83\x00\x71\x70\x07\xb4\x06\x94\x14\x3f\x25\xbb\x96\x48\x4b\x7e\xc0\x6e\x71\x15\xf5\xba\x52\xe8\xe3\x24\x8a\xf5\x3b\x82\x8d\xf6\xcf\xa3\x31\x8d\xd3\x63\x84\x03\x20\x0e\xea\x03\x80\x20\x38\xe8\xb1\xe7\x2c\x07\xd8\x67\xf5\xf5\xcb\xfc\x0a\x15\x2c\xb7\xe6\x9b\xaf\x2c\xa2\xb6\xa3\xee\x56\x64\x26\xf5\x93\x5f\x8b\x39\x66\xa7\xca\x30\x7a\x6e\x81\x18\x3b\x88\x83\x3b\xd0\x4f\x9a\x23\x6e\xd0\x1f\xc9\xba\x8d\xf9\x86\xe9\x7d\x26\xb1\xb9\x50\xa4\x3c\xd5\xef\xda\x18\x67\x02\xa5\xd6\x5b\xbc\x0a\x79\x39\x88\xba\x20\x0e\x69\x47\x70\xdc\xc3\x22\xec\x56\xa3\xbc\x6b\x6f\xbf\x3c\xef\xd8\x54\x89\x9a\xfa\xb3\xb2\x8a\xb2\x38\xc6\x77\xfd\x97\xd3\xac\xb7\x0a\x5d\x36\xa2\x2e\x88\x43\xfa\x38\x50\xb1\xd3\x39\xec\x73\x03\x93\x5b\x6c\x29\x5d\x56\xf8\x78\x59\xe1\xc4\x56\xad\xe8\xda\xbb\x5c\xa1\x69\x3e\xfe\x1c\x97\x6a\x14\xe8\xe3\x40\x00\x07\x77\x80\x97\x15\x4d\x60\xd5\x5e\x46\xf6\xca\x84\xdd\x88\xa4\xf0\xdc\x63\xce\xf7\xbc\x61\x17\xee\xb7\x15\x12\x50\x2a\x56\x7e\x9d\xbb\x0c\xbd\x0b\x06\x71\x50\x1f\x00\x04\xc1\x41\xcf\xa0\x67\x39\x60\xa2\x52\x89\x33\x15\xc4\x6f\xbb\xf9\x4e\x55\xa2\xbd\x7f\xcc\x25\xba\xfb\xc2\xe5\xdf\x42\xe2\x69\x43\x1b\xb6\xe9\xce\xbb\x7b\xd0\xda\x3a\x88\x83\x3b\x50\xf0\x76\x9b\x1e\x9f\xf1\x70\xae\x80\xf7\xb8\xf6\x5a\xf0\x51\xa1\x1c\x15\x4a\xb7\xd4\x05\xdb\xa6\xc8\x00\x0f\xa7\xae\xb4\x96\x4d\x44\x5d\x10\x07\x77\xc0\xb0\xba\xe0\x8a\xbf\x3f\x7d\xdc\x8d\x93\xd1\x88\xb7\x9d\x9e\xcc\x97\x88\x69\x48\x07\x35\x6d\x79\x05\x0c\x8b\xdd\x6e\x05\xb7\x3b\x43\xfd\x05\xc0\xc1\x1d\x08\x9f\x11\xc2\x31\xb9\xd0\x8f\xc6\xa4\x57\x7b\x58\xf9\xe6\x25\x66\x76\xfe\x54\x74\x70\x53\xca\x97\x03\x6c\x8f\xd4\xe7\xac\x17\x31\x10\x75\x41\x1c\xdc\x01\xf3\xc9\x26\x82\x6a\xfb\xfa\x68\x7b\x62\xe5\x87\xe6\xaa\xdb\x4d\x24\x68\xd6\x2f\x47\x95\x73\x95\x17\x26\x28\x54\x48\x31\xdd\x27\x10\x0e\x80\x38\xa8\x0f\x80\x82\xe0\xa0\x65\xc5\xff\x06\xc1\xeb\x91\x83\xe0\x47\x24\x1a\x87\xec\x6e\x79\x9f\x83\x6b\xc3\x6b\x37\x1b\x6f\x12\x52\x2d\x9d\xde\x46\x8f\xbe\x29\x5b\xb3\xd4\xb6\x38\xf4\xf9\x59\xe6\xb9\xac\x9c\x20\x07\xc1\x8b\x04\xea\x65\x78\x58\xc7\xbf\xb5\x37\x3a\xe6\x96\x78\x37\xd6\x68\xd6\xef\x74\xda\xc4\x8f\x78\x6f\xa9\xa1\xf9\x17\x9b\x86\x93\x9d\xcb\x3a\x11\x72\x10\xbc\x5c\x43\x7f\x9b\x9c\x3d\xb3\x2d\xf1\x52\x48\x58\x8c\x5a\x5a\x7e\x68\x52\xaf\x86\x4e\xcb\x37\x12\xfd\x4f\xcf\x79\x14\x1f\x7c\xf8\x73\x2e\xa3\x45\x0e\x82\xff\xed\x6c\xe7\xaf\x63\xc2\xc4\xf8\xfa\xa2\xa6\x38\xe2\x85\xc6\x9d\xb8\xfa\x1d\x0a\xd1\x50\xbf\x27\xf2\x2d\xfa\xeb\x83\x15\x0f\x8b\xce\x65\xb4\xc8\x41\xf0\x2e\xd5\xfd\x86\x11\x45\xa7\xbc\x55\x66\x1c\x63\xc5\x23\x23\xd5\x57\x99\x9d\xb7\x2c\xea\x4b\x14\x02\x43\x2c\x47\xb2\xfa\x84\xbe\x9e\xcb\x68\x91\x83\xe0\x91\x8c\x85\x98\x3a\x29\x73\x81\x37\xf2\xd2\x57\x35\xbc\xd0\xf1\xc8\x57\xb9\x78\x0e\x14\xd5\x34\x2f\xd6\x56\x56\x8b\x61\xeb\x9b\x9c\xcb\x68\x91\x83\xe0\x2a\x57\xae\x66\x8c\x45\xbf\xa4\x5f\x93\x0b\xf5\x8f\x4b\xd2\xe3\xe4\xa7\x20\xbc\x96\x70\xe5\x2d\x76\x82\xca\x8b\xef\x17\xdf\x25\x9e\xcb\x66\x10\xe2\xc8\x41\xf0\x11\xd9\x25\x02\x22\x2b\xe1\xb7\x3d\xea\x69\xcb\xa7\x34\xb7\x07\xdc\xcc\x4c\x3c\x72\xe4\xf6\xaa\x88\xc9\x2d\x31\xa4\x92\x45\x26\xcf\x6d\x0d\x10\xf4\x9f\x7a\x56\xa3\x7f\xf5\x6e\x3c\xc0\x8b\x20\x62\x8e\x85\x69\x41\xd0\xc8\x74\x54\xe4\x2a\xea\xeb\x23\xd7\x1b\x79\x15\xf9\x25\xb3\xc7\x59\xeb\x8a\xd0\x26\x08\x20\x0e\xde\xe8\x7b\xda\xae\xe5\x60\xa7\x1f\xf0\x4c\x27\xdb\xa2\x6a\xa6\x63\xa4\x62\x09\xd4\x51\x6c\x66\x37\xf1\xce\xe6\x79\x44\x48\xde\xb3\x4b\x47\xd4\x05\x71\xf0\x46\x1f\x60\x28\x1a\xfc\x35\xe8\xb1\xab\xad\x97\x99\x2c\x57\x3b\xdb\x96\xc1\xdd\xa5\x9a\x3d\x82\xa2\x27\x0f\x5d\x15\xd5\xaf\x69\x97\xf6\x23\xea\x82\x38\x78\xa3\x67\x7a\x4f\xa4\x2c\xab\x95\xe4\xb7\x7f\x5d\xb5\xb1\x66\xf8\xc0\x20\xf5\x34\xf9\xde\xf1\x9c\xb1\x2e\x91\x38\xf9\xa3\xc6\xe3\x20\xe8\xa8\x39\x10\x07\x6f\xf4\x52\x8d\x91\x86\x3a\xe4\x8f\x5d\x9d\x52\x23\xf8\x0b\xc6\x0b\x24\xcd\x55\x0c\xf6\xf5\x4b\x05\xe4\x71\x0a\xff\xa6\x57\xfe\xfc\x8b\x87\x68\xf4\x20\x0e\xba\xd9\x03\x82\xe0\xa0\xb6\x79\xe6\x02\x90\x22\x17\x46\x9a\x73\xb5\x05\x9e\x84\xa5\x8b\x3b\xdf\x8b\xe8\xb0\x71\xba\xbf\x18\xbc\xc1\x13\x05\x5b\x01\xd7\x3e\x5e\xfc\x6a\x02\x2d\x00\x01\x38\xb8\x03\x8f\xae\x0a\xfd\xf6\x08\x2e\xdb\x8b\x8d\xd8\x8f\x61\x36\x4e\x7e\xb9\x2f\xc2\xf0\xc1\xc1\xd7\x55\x98\x5a\xf9\xda\xbc\x8b\x49\x39\x74\x74\x1b\x88\x83\x3b\xb0\x6d\x7d\x62\xa0\xa2\x2a\xd3\x35\x3d\x64\x42\x2f\x74\x49\xce\x81\xe9\xf4\xce\xd0\x68\x34\xcd\x0d\x92\x24\x9e\x13\xff\xbf\x26\x50\xb0\x14\xc4\x21\x3d\xf8\x7d\x50\x5f\xdd\xe3\x75\x76\xbb\x4c\x2e\x2d\x38\xad\xe3\x2e\xea\x41\x47\x5b\xb0\x76\x23\xa1\x91\xab\x55\x4a\xeb\x25\xe7\x6d\x72\xe8\xc1\x0f\xc0\xc1\x1d\xb8\xb5\xcb\x50\x7e\xaf\x7e\x26\x62\x2f\xf9\x01\xc7\xb3\x3d\x86\x61\x45\xa9\x3b\xae\xdf\x95\x8f\xab\xf1\x3a\xe4\xbc\xd4\xea\x53\x82\x11\x0e\x80\x38\xe8\x66\x0f\x08\x82\x83\xee\x61\x67\x39\x40\xf2\xee\xa7\xf9\x6d\xc7\x55\x8f\x67\x4a\xda\xbb\xa9\xb5\x81\xf4\x6d\x2f\xbb\x1d\xf8\x7b\x9b\x22\xa2\xf0\x46\xa2\x14\x84\x36\xa0\xe3\x6f\x40\x1c\xd2\xee\x8f\x38\x87\x6e\x6e\x7c\x94\x7f\xf9\xc9\x7f\x93\x3a\xb1\xf3\x60\xcd\x5a\x8c\x0a\x71\x4c\xd2\xea\xc6\xce\x18\xb3\x34\xa0\x72\x41\x93\x73\x10\x07\x77\xc0\x87\xa9\x37\xc1\x78\x5c\x82\x9e\x9c\x39\x6b\x2f\x5a\xfa\x65\x08\xbe\xd8\x85\xcc\x11\x6b\x81\x90\x15\x8c\x50\xb4\xaf\x29\x8f\xa1\xaf\xc0\x41\x1c\xdc\x81\xec\x75\xa9\xe7\x41\xc3\x45\x9a\xda\xe1\x63\xb2\x92\xa2\xb7\x42\xb3\xdf\x67\x7f\x42\xc9\xcf\xfc\xe6\xc5\x9b\x49\xa8\x68\x32\x57\x8b\xa8\x0b\xe2\xe0\x0e\xb8\x7f\xae\x4e\xa8\x52\x96\xd4\x9a\xaf\x46\xa3\x75\xa4\x22\xdf\xb8\x63\x8a\x8e\x19\xa1\x9a\x20\x4c\x26\x24\x3e\x5f\xe9\x83\x7f\x0d\xe1\x00\x88\x83\xfa\x00\x20\x08\x0e\x9a\x50\x9c\xe5\x80\x7c\x1c\x59\x71\x05\xae\x4b\x49\x58\xb5\xab\x47\x9d\x77\x60\x77\x86\xe6\x8a\xe3\x46\xda\x03\x2c\xf4\x96\x79\xd6\x98\x1a\x83\x69\xc4\xd8\x41\x1c\xdc\x81\xfc\x5d\xbe\x5e\xfd\x19\xf5\x0b\xd5\x84\x2e\xee\xd8\x6b\xd8\x34\xc5\xbc\x4d\xd2\x53\x06\x3f\xfb\x7b\xd7\xc3\x28\xfa\x8f\xc7\xa1\x63\xbb\x40\x1c\xdc\x01\xfe\x34\x25\x35\xd3\xa7\x12\x8e\x05\xcb\x4e\xec\x98\x4a\x7f\x5e\x78\x97\x4d\x50\x3b\xee\x09\x71\xc5\x04\x8c\x4f\x1a\x54\xb2\xcf\x40\x01\x20\x00\x87\x74\x1c\x58\x79\x44\xed\x5a\x62\x54\x78\x77\x99\x58\x10\xd3\xab\x0f\x51\x1d\x52\xcf\xe2\x2e\xe0\x0d\xaa\x79\x31\xe0\xe9\xa8\x7e\x8d\xea\x41\xd4\x05\x71\x70\x07\x98\x1e\x12\x5a\x1c\x1a\x18\x7d\xfa\xa0\x2f\x8f\xcd\xaa\xf7\x0a\x63\x10\x0b\xaf\x76\x02\x8d\xf8\xef\x88\xea\x1c\x3b\xcb\x74\x47\x3f\xc2\x01\x10\x07\xf5\x01\x40\x10\x1c\x34\xbb\x3b\xcb\x81\x9e\xdc\xf9\x2f\x6c\x03\xb4\x5f\xbe\x13\x38\xf0\x5c\x24\x88\x8d\x3c\x61\x97\x76\x65\xc3\x2a\xec\xfa\xfd\xf3\xd7\xf5\xa0\x56\x4a\x28\x08\x0e\xe2\xe0\x0e\x30\x85\x2b\x6e\x53\xbc\x39\x7d\x91\x20\x36\x24\x74\x35\x82\xf5\x42\x5d\xf7\xba\x7b\xc2\xa6\x2f\x46\x46\x1b\x76\x81\x71\x3c\x27\x11\x74\x7f\x05\x70\x70\x07\x3a\x3f\x88\xa8\xa1\xdc\xb0\x37\x96\xf3\x52\x5c\xad\xef\xd1\xe1\x0d\x0f\x3b\xbc\xf9\xa9\x6d\x74\xb5\x57\xdb\xed\x80\xe7\x7a\x1b\x0b\xb4\xdb\x0c\x80\x43\x7a\x19\xf0\x65\xe6\x85\xff\xbd\x8f\xe4\xfb\x2b\x9a\xa3\xc7\xaf\x2e\x84\xf6\xd9\x70\xb9\x74\x5d\xd3\xfa\x13\x17\x8d\xd5\x7f\xfd\xbe\x3a\xb4\x2b\x0c\x88\x83\x3b\xf0\xf4\x62\x80\xe6\xd1\x3d\xde\xd7\x81\x95\xf6\x3f\xdd\x66\x3e\x1e\x68\x0c\x2c\xce\x2e\xcb\x3a\xdf\xcf\x91\x97\x48\xfb\x9a\x70\xc2\x84\x70\x00\xc4\x41\x7d\x00\x10\x04\x07\x4d\xb5\xcf\x0c\x01\xc7\xf9\x63\xb1\x2e\x3f\x23\x9e\xf7\x6b\x63\xa5\xe2\x17\x50\x5b\x11\xe0\xbc\x30\x71\x2f\xe7\xae\xe6\x30\x07\x07\x97\x77\x83\x1c\x14\x02\x06\x70\x70\x07\x06\xcc\x39\x15\x3a\xb1\x3c\x72\xee\xee\x63\xad\xd6\x2f\x4f\x50\x67\xe9\xde\x7d\x72\x58\xad\x1a\x78\x49\x5c\x72\xe1\xeb\xcc\x3a\x14\xa8\x04\x71\x48\x3b\x01\x28\xb4\xec\x09\x6b\x1f\x89\xb6\x7e\x1a\xaf\x8e\xcf\x9f\x2b\xd6\xee\xa0\xf1\x7e\xe3\xd7\x9c\x7b\xf9\x13\xd9\x1a\xaf\x8b\x12\x15\x14\xd8\x03\x70\x70\x07\xf0\xea\x5f\x57\x5e\x7d\xac\x67\xea\x81\x76\xdc\xe3\xf1\x22\x88\x2c\x3c\xe9\x0f\x87\xda\xd8\x8c\x4e\x07\xfa\xfb\xca\x4c\xe9\x1d\x68\xe3\x31\x10\x07\x77\xe0\xed\x5c\x2d\x03\xcb\x4a\x97\x6f\x0a\xc9\xfe\x94\x87\xb9\xc5\x7b\xa5\xdc\xa0\xb0\xe1\xc1\x03\x5a\x7d\xa1\x64\xba\xb2\x35\x45\x41\x84\x03\x20\x0e\xea\x03\x80\x20\x38\xe8\xb9\xe7\x2c\x07\x6e\x62\xb5\xd0\x33\xdf\x1c\x55\x15\xeb\x1b\x19\x5d\xc5\x8c\x34\x20\x4d\x65\x41\x17\x52\xb8\xf7\x61\x35\x88\x3f\xb4\x99\xb5\x67\x0a\x31\x76\x10\x87\x74\x4a\xcc\x23\xa6\xe8\x81\xa9\xa4\x98\xf8\xc2\xfa\x77\x7e\x68\x5f\xef\x13\xc7\x5e\xbd\x6c\xe5\x32\x9a\x38\xd4\xb3\xd9\x82\x35\xa5\x07\xed\x0e\x05\xe2\xe0\x0e\x2c\xcd\x8a\xf3\xb9\xac\xcd\xb0\xff\x59\xf1\x91\xa0\x6f\x11\x56\x1d\x52\xfe\x69\x16\x69\xf3\x7e\xe1\x23\xf1\xa2\x70\xa4\xd3\x5f\xe8\x1e\x03\xe2\xe0\x0e\x10\xc5\x5f\xc6\x2a\x61\x9b\x49\xa6\xd4\x9d\x72\x98\x4d\x60\x7a\x85\x26\x3f\x66\xb7\x26\x10\x40\xd0\x4b\x40\x97\x1a\xc6\x2f\xed\x8d\xa8\x0b\xe2\xe0\x0e\x9c\x98\x74\xe2\xb6\x1d\x9a\xb8\xd7\x27\x9a\x98\xb6\x59\xde\x0c\x9b\xeb\xfb\x90\x8c\xe7\xcc\xfe\x5b\xbf\x25\x90\x25\x59\x7f\xb9\x00\xe1\x00\x88\x83\xfa\x00\x20\x08\x0e\x7a\x08\x3d\xcb\x81\xcd\xbf\x18\xf4\x1c\x7b\x1f\x9f\xd3\x3a\x31\x3c\x21\x99\xef\x7e\x32\xe9\x36\xc1\x5a\xf6\x57\x42\x86\xed\x8b\x90\xf4\x33\x52\x0a\x2b\xc4\xd8\x41\x1c\xdc\x81\x1d\x36\x5b\x5a\x8f\xb1\x52\x8a\x53\x39\xbe\xc5\x7b\xc4\x72\x1a\xfc\xf9\xf4\x49\xe2\x32\xb7\xea\xa7\x29\xe8\x5f\xbc\x99\x52\x61\x45\xd4\x05\x71\x48\x1f\x88\xca\x2f\xcf\x9b\x14\x66\xa5\x6f\x16\xe6\x13\xd2\x68\xa0\x8b\x9e\x9a\x04\x97\xf0\x90\xcc\x7d\x8b\xd3\x5b\xca\xdf\x31\x8f\x87\x8e\xf1\x04\x71\x70\x07\x7c\x9e\xd4\xd9\x51\xa5\x2b\xc9\xe9\xe4\x4b\x3e\x6f\x8e\xa6\xa2\x79\xe2\x6c\xb9\xd1\x63\xd1\xff\x1d\x63\xe4\x7b\x32\xda\xe7\xd0\x30\x68\xae\x09\xe0\xe0\x0e\xe4\x24\x60\x51\x67\xc4\xd9\xdc\xce\xb4\x0f\x9d\xd2\x0b\xd1\xd3\x75\xaa\xd4\x95\x8c\x57\xfb\xf0\x94\x7b\x3f\x5d\xbd\x3d\x30\x0c\xda\x11\x04\xc4\x41\x7d\x00\x14\x04\x07\x05\x06\xff\x1b\x04\xaf\x47\x0e\x82\xdf\x24\x93\xbb\xd5\xaf\xfa\xdb\xc1\xb5\xeb\xcf\xb3\x9b\x3f\x8d\xf6\x79\xa9\x46\x77\x84\x19\x3c\xc4\xd4\xdc\x65\x4a\x45\x7a\x5c\x59\xcf\x6d\x0d\x03\x74\xa1\xb3\x3c\x3d\x52\x48\x88\xa8\xca\xfe\x28\x8b\x55\x96\x45\xaa\xc6\xbc\xd7\xaa\xdf\xb8\x84\xb2\xc8\x4c\x6d\x98\xbb\x59\xcc\x50\xb1\x36\x0b\x7d\x74\x0e\xe2\xe0\x9e\xd2\xa0\xe9\xa3\xba\xbd\x36\xbe\xeb\x10\x23\xef\xaf\xfa\xd2\x91\x7b\x23\xc9\xef\xaa\xe6\x98\xf7\x05\x13\xb6\x96\x78\x4d\x4d\x0c\x68\x77\x11\x10\x07\xf7\xd4\xc6\x1f\xff\x40\x55\xc7\x72\xc0\x85\x74\x32\x6b\xa5\x9b\xbf\xd0\xe6\x62\xdb\x2b\xfb\xd1\x13\x57\x3e\xc1\x95\x35\x0c\x6d\x5a\x6a\x68\xb7\x31\x00\x87\x34\x67\x29\x18\x66\x4e\x1a\x90\xfe\xbc\x1c\xd6\x6d\x68\xe7\xce\xb5\x76\xb2\x59\x73\xc3\xe8\x84\xd0\xc3\x84\x2f\x2a\xe7\x6b\xe3\x7b\x68\x67\x74\x10\x07\xf7\x74\x0f\xf5\x36\xf3\x82\xe6\x6d\x4e\x35\x72\x33\x99\x97\xcf\x13\x67\x3f\x8c\xaf\x0a\x93\x87\xea\x3a\x2b\x7d\x4b\xab\x71\x90\x14\xcc\x80\x4e\x31\x01\x70\x50\xaf\x02\x04\xc1\x41\x91\xe0\xb3\x83\xe0\xa9\x96\x69\x28\x36\x94\x5f\xe4\x7b\x0a\x30\xee\x48\xfc\xff\x98\xfb\xf3\x70\xaa\xbe\xf8\xff\x1b\x27\x84\x0c\xc9\x2c\x84\xcc\x53\x94\x79\x96\x64\x48\x12\x8a\x0c\x99\x33\xcb\x4c\xc8\xac\xcc\x92\x79\x2a\xf3\x3c\x4f\x99\x33\x65\x4e\x44\xe6\x99\x48\x08\x49\xe6\xe1\x77\xdd\xdf\xef\xfb\xec\xfb\xfd\xd9\xc7\xef\xbd\xae\xfb\xba\xfc\xf1\xf9\xff\x71\xbd\xf6\x59\xe7\x3c\xce\x6b\xaf\xbd\xf6\x73\xaf\xbd\xf8\x8d\x85\xa0\x5b\x38\xfa\x0a\x9e\x54\xe2\xf1\x40\x52\x83\x69\xed\x81\x37\x22\x54\x0d\xe2\x90\x83\xe0\xdf\xac\x3a\x14\x8a\x9d\x1d\xca\xf5\xde\xe0\xdc\x71\xf6\x3b\x10\x0a\x14\xc5\x9c\xf5\xe3\x6e\x9a\x14\xfc\xb0\x87\xa1\x59\xcf\x51\x8c\xa8\x0c\xe2\x90\x83\xe0\x6d\x7d\xac\xd8\xc6\x3d\x1e\xab\xa4\x36\x7b\x57\xc7\xe2\x9d\xba\x7e\x08\xd3\x8e\x73\x2d\xd1\x27\x10\x2e\x5c\x91\x64\xbe\xe5\xda\x8a\xa8\x0c\xe2\x7c\xa5\x69\x61\xdf\x86\x70\x59\x6d\x70\xe3\x81\xe1\xfd\xc0\x23\xf3\x95\xf0\x96\xc9\x84\x3f\x28\x04\x3e\x77\x3e\xba\xf5\x36\x64\xb4\xc8\xde\x19\x37\xdd\x42\x04\xc1\x41\x9c\xaf\x34\x0a\xca\x85\xff\x19\x04\xc7\x3b\x6c\x18\xba\xdb\x6d\xbc\x1f\xf0\xc3\x41\x8a\xbb\x5d\xda\x20\xc8\xd8\xe4\xd2\x35\xeb\xc3\x27\x0e\x92\x5b\xc1\xe6\x17\xc3\x63\xff\x1d\x04\xbf\xf0\xbb\x52\xad\x35\xd8\xb7\xe4\xda\xbc\xca\x09\xc6\xbb\x92\x28\xcc\x7b\x94\x35\x23\xe6\x7e\xdf\x7f\xfc\x59\x0a\x98\xef\xe7\xbb\xfd\x2f\x74\xe7\xfe\xe7\x4b\x0d\xe1\xeb\xd4\x0b\x4b\x06\x72\xf9\xdf\xec\x1a\xa9\xbc\xa6\xcb\xac\x33\xf7\x1d\x96\xe3\x5f\xd3\x7c\x9b\x4e\x23\xf8\xdf\x17\x04\x07\x0d\xee\x8c\x20\xb8\x7f\x48\x05\xfb\xe9\xd8\x04\x8d\x15\xd1\x70\xb5\x6c\x6e\xef\x85\x37\x8d\x8f\x15\x19\x56\x22\x3b\x5c\xf2\x1e\xd0\x9a\xb0\x3c\x55\xfa\x17\xea\x17\x84\x3d\x81\x65\x7f\xcf\xec\xc9\x09\x2e\xc9\x77\xd7\xc1\xb4\x96\xab\xa8\x1c\xb3\x7c\x5f\xc8\x37\x36\xd0\xfb\xba\x9a\xab\xd6\xff\x1d\x60\xb4\x76\x6b\xa5\x73\xbe\x45\x9f\xc3\xfa\x74\x62\x98\xf9\xf0\xb4\xf5\x33\x09\x69\x15\xcf\x1e\x2e\x65\xee\xcb\x9a\xc5\x50\x7e\x1a\x28\x08\x0e\x3a\xfc\x3f\x41\x70\x14\x19\x78\xff\x9f\xb7\xe6\x96\xa5\xa4\xb0\xb6\x10\xbe\x8d\x7b\x2a\x9b\x3f\x3f\xeb\x17\xd0\x1e\xf9\x67\x84\x43\x93\x4f\x44\xe6\xf4\xa5\xd5\xd3\x73\x79\x99\xa6\x17\x72\x10\xbc\xd6\xfa\xb6\xc4\x2d\xcd\x72\xf7\xd5\x0e\x7a\x82\xc7\x97\x9b\x22\x5e\xb4\x75\x7a\x86\xf9\xea\x6e\x29\xdf\xf0\x42\xa1\xb4\xa5\xf3\x3c\x8f\xc3\xa2\x88\x21\x1d\xd6\xcc\x44\xc5\x8f\xb8\xf4\x38\x66\x11\x65\x34\x1e\x9d\x66\x59\xb3\x23\x29\x7e\xb8\x86\xfa\xeb\xda\xb0\xe5\xa5\x7a\xe6\xf7\x75\xf2\xe7\x32\x5a\xe4\x20\xf8\x07\x31\x5b\x02\x9f\x37\x1b\x3f\xa2\x93\x9c\x8a\x93\x23\xd5\x87\xfd\x7d\x8e\xbf\x0b\x4e\x65\x57\xb2\xa7\xa0\x0d\x86\x1e\x97\xd5\x9c\xcb\x68\x1d\x90\x0e\x3b\xbe\x22\x3f\xda\xe6\xdc\x72\x03\x05\xff\xbe\xfd\xc6\x1d\xb4\x54\xe7\xe6\xad\x3e\xaa\x58\x3b\xed\x27\x3e\x2f\x0b\x4f\x8b\x55\xcf\x25\x91\xed\x85\x1c\x04\x97\xbc\x59\x96\xec\x69\xc9\x2a\xe9\xff\xbc\x8f\x4b\x36\xe2\x0f\xc5\x7d\x19\xc7\xef\x7a\x9b\x72\x74\xf4\xd3\x97\x5a\xf3\xa9\x85\x75\xcf\x65\xb4\x89\x48\x87\x3d\xf4\x49\xf0\xb2\x20\xc2\x09\x9e\xae\x0d\x7a\xdd\x40\xa0\x15\x59\xd2\x57\x5d\x9a\x37\x18\x30\x2c\x74\xf5\xc4\xf1\x7b\xf9\xe7\xf1\x73\x19\x2d\x72\x10\xfc\x89\x13\x79\xcf\x2f\xee\x45\xa3\x5f\x07\xf2\xd3\x2b\x24\x1f\x0a\x8f\x6f\xec\xb8\x64\x15\x8b\xce\xe3\x47\xd6\xc7\xea\x53\x0e\xfa\x9c\xdb\x04\x0a\xf4\x4f\x3d\x6b\x02\xf5\xf3\x15\xe3\x1c\x5e\xd0\x67\x21\x5b\x67\x85\x16\xe5\x2f\x33\xd7\x52\xd9\x77\xa2\xb4\x89\x14\xb1\x7b\xae\xb4\xa5\x69\xa3\xc5\x89\x20\x26\x0e\x20\x0e\x3e\x81\xba\xa9\x18\x3c\x5f\xfe\x27\x82\xa4\xf4\xeb\x9f\xfd\xfd\x03\x2d\xfc\xb1\xeb\xe5\x1a\x33\x0e\xab\x7f\x07\xf0\x22\xee\x8c\x16\x4f\x40\xbb\x0c\x81\x38\xf8\x04\x6a\x7c\xc1\xb4\xd6\x43\x8d\xe4\xca\xd8\xcf\x05\xbc\x98\x5e\xbc\xe9\x05\xb4\x0f\xab\xea\x12\xb6\x81\x82\xe8\x42\x2b\x36\x22\x24\xba\x88\xba\x20\x0e\x3e\x81\x22\xb8\xce\xef\xc0\x4c\xf5\x21\xd5\xe6\x81\xda\x7c\xfc\xc3\xf7\x3b\x85\x49\xa8\xc3\xeb\x5d\xaf\x6f\xa6\xe2\x47\xed\x10\xb9\x91\xc4\x22\xea\x82\x38\x5f\x29\x14\xc9\x7f\xd7\x65\x78\xd5\x64\xf9\x85\xb9\xcb\x49\x56\x5e\x1d\x2d\xf8\x49\x5e\xfd\xe7\x9f\xc6\xa3\x62\x5f\xf2\x39\x0e\xf5\x74\x51\x33\x13\x7e\xa3\x23\x82\xe0\x20\xce\x57\x0a\x85\xd6\xcb\xfb\xd5\xff\xe9\xcf\xff\x71\xad\x07\xea\x9a\x67\x29\x70\x97\xed\x5b\x10\xe5\xcf\x4f\x09\x3c\xbd\xe6\x84\x25\x0b\xe8\x2e\x37\x4b\x5f\xe1\x97\x15\xfd\xf8\xb1\x17\x1a\x1d\xe3\x4a\x8e\x46\x04\x85\x68\x00\x1c\x5c\x81\x59\xba\x49\x14\xf2\x0a\xf9\x30\x56\xb3\xa0\x93\x3c\xba\x45\x52\xa5\xeb\xcb\x5b\x23\x51\x4d\xcd\x2d\x8f\x17\xa7\xb0\x50\x5a\xa1\x10\x0d\x88\x43\x5a\xff\x97\xb7\x37\xf4\xf1\x56\x2a\xd7\x21\x2a\x09\xbf\x10\x20\xdc\x5b\x67\xe5\x45\x5a\x16\x28\xc0\xdb\x14\xd8\x91\xef\x60\xe9\x17\x01\x5d\x93\x01\x38\xb8\x02\xbb\x3f\x86\xcd\x74\x0f\x16\xb1\xbe\x77\xc4\x05\xb5\x2e\xf4\xac\x8d\x92\x90\xdd\xea\x9b\xfb\x9c\xd1\x9b\xe9\x5c\x9f\xbd\xd2\xd8\x85\xa8\x0b\xe2\xe0\x0a\xfc\x7c\xee\x13\xaa\xe5\x9e\x57\x58\xa9\x16\x4d\x95\x8d\x4b\x8a\x2d\xf3\x98\xcd\x3c\x4c\x84\xeb\xa2\xdb\x90\x7c\x12\x8b\x0b\xd1\x0d\xc4\x1c\x1a\xc4\xfd\xa3\xc0\xff\x3d\x59\xfe\x87\x03\xa0\x53\xd8\x99\x6f\x56\x9a\x33\x63\xbd\x6d\x4f\xa0\xf4\x44\xc0\x2c\x15\xe7\xd1\x17\xe2\x9e\x4b\xf3\x1f\x65\x8d\xde\x1d\x06\x39\x18\xfd\xc1\xba\x69\x0d\xbd\x05\x11\xc4\xc1\x1d\xb0\xd9\x8f\xca\xb2\x6f\x12\x2e\x9f\xca\x22\xf6\x53\xae\x3c\x09\x18\xcb\x55\x32\x7a\x8e\x1a\x39\xe5\xd0\x13\x23\xd3\x62\xe0\x04\xbd\x59\x0c\xc4\x21\xed\x04\x8c\x7e\x7b\x5d\x4b\xa9\x3a\x97\xe5\xaf\x4e\x06\x4e\xa7\xea\x35\xb1\x05\x16\xf3\xbb\x37\xed\x43\x7b\xe7\x5a\xdb\x25\xd0\xd2\xc7\xa1\x9d\x80\x01\x1c\xdc\x81\x9e\x3a\xf9\xf6\xba\xce\xbe\x1e\x4e\xac\x3d\xb7\x38\xeb\x4d\xa3\x26\xa3\x9c\xeb\x5f\xcc\xf8\x34\x2d\x7c\x03\x2f\xe7\xa9\xfa\x5c\x87\xd6\x94\x01\x1c\xdc\x81\x20\xb5\x9a\x67\xce\xc3\x42\xf3\x34\x6b\x37\xe4\x38\xf4\xa2\x93\x8f\xda\xee\x8c\x13\xff\xd5\x90\x5b\x9c\xa1\x78\xda\x6d\x53\xa7\x87\x70\x00\xc4\x21\x1c\xf8\x3f\x33\x97\xff\x70\x00\x34\x9f\x38\xcb\x81\xbc\xf5\xb0\xf1\xb6\xde\xf0\xb8\xd6\xa1\xef\x35\x56\x2e\xca\x57\x34\x47\x50\xb4\x77\x16\xfd\x93\xae\xd0\xc4\x34\x55\xfe\x92\x85\x1e\x06\x00\x71\x48\x01\xd0\xf0\xcc\x88\x3c\x8e\xce\x85\x28\xed\xbc\x56\x93\x32\xf9\xdd\xb5\xbf\x0a\xd8\x58\xda\xc3\xaf\x9f\x1b\x8a\x6b\x2d\x75\xbf\xaf\x84\x02\x5a\x00\x0e\xee\x40\xd1\xd5\xda\x75\xef\xca\x5f\xe2\x6b\x5f\x1c\x4c\x45\xfd\x08\x63\x9a\x03\x58\xd7\x7e\x6d\xd1\xb0\x58\xf8\x5d\x17\xa6\x36\xa6\x82\x76\xad\x05\x71\x70\x07\x74\x9a\x94\xd5\x94\x99\xf5\xb1\xb6\x47\xed\x7d\x9a\x8a\xb3\x92\x8d\xcb\x76\xa4\xe3\x9f\xb1\xd2\x1e\x86\xfe\x51\xa1\x25\xcd\x5e\x83\x3e\x2f\x80\x83\x3b\x80\xd9\x83\xc7\x78\xda\xa6\x39\x48\xd9\xed\xc9\x2a\x61\xc1\xe8\xa8\x71\xbd\xef\x57\x92\xa2\xf4\xde\xed\x9b\x72\xbd\x8c\xbf\x4e\x6d\x10\x0e\x80\x38\xa8\x0f\x00\x82\xe0\xa0\xc9\xdd\x59\x0e\x28\x6d\xed\xa9\x8a\x37\xfb\xdd\x8f\xfd\xea\x45\x6b\xd2\x18\x68\x5a\x62\x36\x59\x29\x11\x59\x51\xe0\xa3\x24\xc6\xbd\x14\x29\x0a\xbd\xb9\x13\xc4\x21\xbd\x18\x43\xe3\xa2\x5f\xcd\x88\x03\xe7\xc3\x57\x3f\xef\x55\xf3\x30\xd3\x7e\xdc\x92\x32\xb1\xaa\x1a\x78\x9a\x5e\x15\x5c\xa7\x14\x48\x09\xbd\x75\x1d\xc4\xc1\x1d\xd0\xa6\x39\xaa\x3c\xc1\x0e\x35\xed\x3c\x69\xd2\x2c\x4f\x54\xf9\x81\x67\x58\x9f\xd3\x40\x50\xdc\x60\xf9\xf9\x02\x4e\x2d\x7a\xd9\x14\xa2\x2e\x88\x83\x3b\x70\x9f\x79\x5e\xba\x99\x3c\xb7\x28\xd8\x30\xa5\x7c\xfc\xe2\x97\xf0\x38\x6f\xcd\x19\x4f\x0d\x3d\x54\x2a\x29\x7c\xda\x45\xd4\x8d\x4f\x88\xba\x20\x0e\xee\x80\x97\xbf\xdd\x9f\x29\xa1\x90\xf8\xd3\xd6\xf8\x0b\x73\x05\xdc\x0c\x5e\x61\xc1\xb1\xf1\x87\xb2\xcb\x7b\xd6\xdf\xee\x19\x5e\xd1\x63\x85\x36\x82\x01\x70\x50\x1f\x70\xf8\x6f\x07\x40\x33\xed\xb3\x1c\x40\x3b\x7c\x15\xf1\xe9\x91\x21\x26\x91\xb2\x9e\x85\xfd\x93\xe7\x01\xb9\xbf\x07\x45\xee\x5b\x97\xfe\x20\x7b\xe4\xaa\x99\xba\x74\x1b\xda\x6c\x0f\xc4\x21\x6d\x88\xc6\x38\xe7\xed\x41\x52\x71\xf9\xab\xd3\x2d\xcf\x57\x59\x6c\xd3\x66\x8e\xb1\xdd\x38\x07\x06\xaa\x09\x59\xd4\x8c\x22\x65\x0c\x47\x88\xba\x20\x0e\xee\x00\x6d\xd9\xbb\x9d\xcf\x72\x3e\x15\xaf\x72\x13\xba\x14\x84\xae\xae\x49\x7f\x60\x4e\xa3\xb8\x6a\xea\xe3\xad\x28\x19\x97\x2e\xaf\x09\xad\xff\x83\x38\xb8\x03\xba\x9a\x52\xfa\xe5\x06\x75\xa9\xef\x8b\xfe\xf0\xda\xba\x7d\x1f\x5b\x5b\xca\x56\xe1\xc0\x2e\xd5\x5a\x57\x6b\x79\x62\xd5\x2b\xb3\x00\x6d\x34\x05\xe0\xe0\x0e\xd0\x84\xbf\x2f\x53\x57\x2e\x91\xfc\xb1\x5c\x2b\xf6\xa7\xad\xbd\xef\x2a\x75\x43\x27\x9a\x0a\x49\x68\xee\x8b\x4d\xd6\x24\xc6\x9b\xef\x11\x0e\x80\x38\xa8\x0f\x00\x82\xe0\xa0\xcb\x9e\xb3\x1c\x08\x9a\x36\x23\xbf\x65\xd9\x87\xbd\xb8\x4c\x25\x76\xe4\x50\xc8\x10\xf9\xb2\x83\xde\x6e\x35\xf0\x33\xf6\xb7\xf5\x92\x7b\x31\xac\xd0\x0e\xfe\x20\x0e\xee\xc0\xd5\xa9\xa4\x23\x57\x57\x96\xc4\x84\x04\xeb\x1e\x8c\x05\x81\xe5\x41\x52\x94\xda\x92\x7d\xa6\x3f\xf8\xab\xf3\xb4\xcc\x12\xdb\xd0\x34\x1b\xc4\xc1\x1d\x98\x53\x40\xcf\x97\x51\xd6\xe3\xa6\xab\xee\xf0\x26\xc0\x5c\xf2\x72\xa9\xdc\x91\xcb\x25\xb1\x73\xbb\xaa\xcf\x92\x65\x6d\xdc\x0a\xe5\x77\x40\x1c\xdc\x81\xf7\x77\xa5\x32\xb7\x64\x2a\xf3\xd0\x7d\x48\x68\xec\x7f\x48\x87\x86\x11\xb2\x87\x6c\xd4\xb8\xe0\x28\x92\x0f\xa7\x58\xb2\x13\x42\xbb\xcd\x83\x38\xb8\x03\x94\xb1\xb2\x0f\x43\x48\x2b\x37\xb9\x4b\xf5\x42\xe8\xa2\x1b\x4b\xb8\x69\x76\x68\xb3\x2e\xc5\xbc\x5b\x6e\xda\x96\x17\x28\xa9\x85\x1e\x0e\x04\x71\x50\x1f\x48\xfc\x6f\x07\x40\xd7\xa0\x67\x39\x80\xba\xfe\xac\x5d\x51\xa7\x79\x38\x48\x9d\xf1\x20\xae\xe9\xcb\xd7\x87\xe4\x1b\x68\xd2\xa6\x3c\x07\xdf\x1c\x63\x5d\xb9\x08\xfc\xa1\x87\xed\x40\x1c\xdc\x01\xd2\xc3\xcd\xd7\xa8\x54\xc7\x6f\x0e\x6f\xd6\x1f\xbc\x26\xa4\x64\xa0\xc3\x22\xd9\xe2\x30\x4a\xef\x1f\x6f\xeb\x79\x1e\x34\xe5\x8b\x89\xa8\x0b\xe2\xe0\x0e\x14\x27\x31\x1d\x06\xe8\x18\xb8\x8a\xad\x36\x54\x25\x95\xa2\x5d\x77\x4e\xb9\x32\xcd\xde\x4c\x68\x77\xad\x66\x59\x80\x3b\x9d\x16\xda\xbc\x0b\xc4\xc1\x1d\x58\xa6\x0e\x68\x6d\x33\xee\xbf\x8b\x83\xf2\xba\x4c\x4c\xce\x5a\xfd\xe9\xe5\x67\x14\xbb\x11\xc3\xc7\x68\x11\x0c\xc7\x75\xa1\x86\x14\xd0\xfd\x45\x00\x07\x77\xa0\x44\xec\x6b\x54\xa5\x1f\x29\x8e\x28\xc6\xec\x51\x37\x07\x9f\xb7\xf2\x3a\x4a\x35\xf7\x07\xa9\xa7\x3f\x56\x14\x7e\xdb\xdd\x3d\x85\x82\xe0\x20\x0e\xea\x03\xa0\x20\x38\x68\x59\xf1\x9f\x20\x38\xca\x00\xd2\x12\x86\x6e\x35\x73\x72\x7d\xad\x60\xf4\xdb\x54\xa5\x67\x52\x1b\x78\x3a\x3f\x6a\x98\x3a\xf3\x17\x4a\xf7\x26\x5a\x7b\x4d\xe8\x3e\x66\x9d\xcb\x3e\xca\x5e\xc8\x41\x70\x87\x6c\xe7\x7b\x44\x3e\x0f\xf3\x9e\x1b\x5d\x7f\x7b\x68\xee\x9e\xf1\x75\x63\x2a\x07\xcb\x78\x9c\x2a\x62\xa1\x6a\x61\x5b\x8e\xea\xe7\xb9\xac\x13\xed\x23\xaf\x13\x8d\x3e\x2b\xbe\xf7\xf1\x45\x1c\xba\x04\x23\xcd\xe7\x6f\x64\x47\x5f\xbd\x8a\x4b\x5c\x2e\x93\xf9\x10\xd2\xb1\x46\x0f\x49\x45\xb0\x9e\xcb\x68\x91\x83\xe0\xf7\x48\xb4\x22\xa5\xc8\x08\xad\x6d\x7a\x8b\x9f\xf3\xb3\xa2\x49\xdd\x95\xef\x4e\xc3\x7c\x11\x40\x47\xa9\x28\xb9\xbc\x3d\xd2\x3f\x73\x2e\xa3\xe5\x46\x3a\xac\x1d\x4e\x43\x20\x37\x8a\x55\x89\xf2\x77\xb5\x5e\x0a\x16\x21\x93\xf7\x1f\xe3\x38\x5f\xa9\xc9\xd1\x65\x17\x47\x75\x66\x44\x3a\xe2\x9e\xcb\x68\x91\x83\xe0\x8f\xb9\x37\x5f\x58\xc7\x8d\x31\x16\xdb\xc6\xb2\x68\xb2\xd0\x8c\xda\x28\x7b\x5b\x09\xd7\x6e\x13\x3b\x5a\xe8\xfa\x57\x5c\x8a\x3c\x97\xa5\x47\x14\x75\xa4\xc3\xae\xeb\x47\xde\x94\x8f\xdd\xe1\x7d\xba\x67\xb8\x8e\x27\xc1\x4b\x96\xa8\xe7\x42\x35\x73\x6d\xe8\xf2\xc6\xe0\x4a\x91\x2f\x29\xef\x85\x73\x19\x2d\x72\x10\x3c\xcb\x04\xad\x27\x52\x2a\xe2\x1b\x59\xd5\x4b\xce\x02\x89\x68\xe7\x0e\xac\x94\xb4\xc0\xa4\xf2\x8f\xda\x41\x6e\xd2\x93\xaf\xe8\xee\x9e\xdb\x1a\x20\xe8\x9f\x7a\x56\xa3\xbf\x80\x9f\x23\x7c\xad\xba\x55\x86\xce\xf1\x7e\x46\x6d\x6d\xd3\xe2\x98\x8a\x85\x00\x0a\xea\xf7\xb9\xbf\xe3\x79\xfe\xde\x15\x01\xd0\xae\x57\x20\x0e\xde\xe8\x5b\x62\x42\x7c\x43\xe2\xef\x05\xa3\x3d\xf5\x79\x20\xca\x1d\x74\xad\x4d\xfd\x33\x2b\xc9\xe4\x42\xad\x78\xc3\xca\xc5\xb6\x45\x2c\x3f\x44\x5d\x10\x07\x6f\xf4\x72\xb2\x0b\xea\xbb\xcf\x63\x59\x92\x88\xab\x13\x76\x9c\xf3\xaf\x0c\xde\x08\x38\xcd\x8d\x9e\xdd\x78\x25\xfd\x29\x52\xc7\xc5\xd6\x0a\xda\xb4\x01\xc0\xc1\x1b\xbd\xba\xdb\x89\x08\x6e\x2a\x33\xd7\x8b\xe5\x3f\x82\x9e\x92\x86\x97\xbe\xde\x46\x67\x38\x9d\x79\x6b\xb7\x37\x75\x5d\xfc\x11\x03\x01\x14\xfe\x03\x71\xf0\x46\xaf\x95\x2f\x2c\x9a\x9f\x23\x1c\x3e\x9e\x14\xb6\xae\xfb\x79\x61\x0c\xe3\xb4\x30\xcf\x60\x2b\x46\x8d\x66\xd9\xf7\xb2\xfd\x66\x74\x3c\xa2\xd1\x83\x38\xe8\x64\x3f\xf0\xdf\x27\x7b\x50\xdb\x3c\xcb\x01\xd5\xa7\xb7\xde\xbc\x60\xf5\xbd\xcc\x3c\x44\xb6\xf4\xe5\xe3\x3e\xc6\xbc\xac\x3b\xaa\x41\xf4\x3b\xb5\xd7\x69\x62\x94\x6b\x75\x74\xd0\xce\x7f\x20\x0e\x69\xf7\x53\x5f\x9e\x04\x7b\x14\x7d\x96\x6b\x22\x2e\x13\xbf\x54\x22\x38\x76\x24\xf3\x4c\x73\x63\xd1\xa8\x3a\x1e\xaa\x30\x28\x2c\x93\xb6\x21\xea\x82\x38\xb8\x03\xae\x62\x8f\x7b\xc6\x54\x62\x2d\x5c\xcb\xf3\x52\x06\x6c\xcb\x5a\x0c\x66\xfa\xae\x1e\xbd\x37\xef\x4f\x89\xbc\x35\x12\xeb\xe3\xcc\x87\xa8\x0b\xe2\x90\x5e\x07\x26\x44\xdb\xe9\xf1\xba\xbe\x8a\x52\x80\xb9\xf8\x77\xeb\x08\xef\xd6\xf3\x6b\x45\x8f\xb3\x2a\x1a\xab\x68\x38\x0a\xc3\x37\x58\xa1\x27\x20\x41\x1c\xdc\x81\xd1\x85\x65\x0f\xeb\x4c\xb7\xda\x48\x4a\xb5\x75\xba\xa5\x70\x13\x9b\xb1\x2c\x2f\x5e\x4c\x17\x87\xcc\xa6\x9c\x1b\x94\xaf\x85\xfe\x20\x1c\x00\x71\xd0\xc9\x1e\x10\x04\x07\x9d\xc3\xce\xdc\x0d\xfa\xb1\xfc\xaf\x39\xba\xd1\xdc\xeb\xc7\x6a\x97\x19\xd4\xef\xb3\x54\xac\xcb\x3e\xed\x2e\x52\xa1\x14\x50\x11\xa7\x5c\x4d\x96\x12\x80\x02\x5a\x00\x0e\x69\x07\x50\x56\x0e\x0f\x23\xaf\x49\x7e\x67\x37\x9a\x45\xff\xf9\x9c\xbc\x8c\x3d\xc5\x71\xd9\x78\x66\x82\x6b\xe3\xc5\x17\x25\x96\x29\xdf\x43\x3b\x80\x02\x38\xb8\x03\x5f\x88\x38\xd5\x9d\x59\x6d\xc2\x2c\x02\x74\xb5\xaf\xef\xa1\x34\xdc\x24\xfc\x2b\xa2\x4c\x57\x45\xfe\xc1\xf6\x63\xbb\x82\xe3\x57\x6d\x28\xb0\x0a\xe0\xe0\x0e\x70\xf2\xf0\x8c\x34\x3b\x10\x4f\x4c\xe8\x30\xdf\xcd\xdf\x7c\xfc\x60\x34\xe8\xad\x9c\x8d\xf0\x91\x5e\x3c\x8a\x5d\xcb\x72\xc3\x75\x61\x44\x5d\x10\x07\x77\xc0\x78\xed\x38\xb4\xe5\xdb\xfc\x45\x65\xe9\x25\xcc\x4f\xad\x8e\x9a\x9d\x8f\xf5\x31\x97\xd3\x6a\x42\x29\xf1\x89\xac\xbf\x64\xbd\x0e\x85\x76\x04\x01\x70\x50\x1f\xd8\xff\x6f\x07\x40\x13\x8a\xb3\x1c\x50\xc6\x61\x4c\xe6\x62\xaf\xa3\xdc\xf4\x7a\x25\x9f\x61\x11\x90\xcb\x7b\x13\x2d\xf6\x47\x72\x6c\x6c\x7a\x7f\x5f\xd2\xad\x3f\xfc\xd0\x4e\x85\x20\x0e\xee\x80\x80\xef\xb8\xee\x47\x1b\x1c\x4c\xfd\x58\xca\xb8\x8b\xa5\x37\xf5\x7e\x7f\x89\xb7\x7c\xb1\x2b\xb7\xc5\x40\x41\x78\xe5\xf4\xa5\x49\x29\xf4\x80\x05\x80\x83\x3b\x70\x6c\x92\xbf\xce\xd4\xbf\xb8\xb9\x46\xda\x7c\x4d\xf9\xb0\xb0\x97\x2a\x3e\xec\xae\x6a\x13\x6f\xb4\x31\x99\x0a\x27\x4f\x78\x07\x14\x7c\x01\x71\x70\x07\xde\xa6\x4a\xf2\x8a\x39\x38\xb0\x77\x88\x92\x8a\x54\x51\x31\x38\xd5\xfa\x5d\xf6\xdc\x9c\x71\xed\xb6\x5d\x24\x10\x17\xaf\xb3\x81\x9e\x82\x05\x71\x70\x07\x3a\x97\x6f\x6b\x51\x08\xf2\x3d\x32\x60\x54\xdd\x91\x26\x1c\x1b\x5a\x69\xea\xa5\x7f\x15\xce\x28\xdc\x50\xda\xb2\x9b\x36\x97\x2f\x8e\x70\x00\xc4\x41\x7d\x00\x10\x04\x07\xcd\xee\xce\x72\x20\x6c\x84\xe0\x5a\x29\x75\x27\xf9\xde\x69\x8b\x47\x81\xa5\xb1\xf6\xdd\x51\x63\xc6\x0f\x5d\xcf\xbe\xfa\x5a\x8e\x55\x75\x06\x74\x42\x37\x6e\x40\x1c\xdc\x81\xe1\x8f\xd8\x05\x35\xa8\xcd\x69\x74\x77\xcb\x3c\xbe\x0a\x8b\x18\x4e\xa6\x73\x9f\xbe\x89\xa3\x54\xff\xfa\xfe\x7b\x23\x56\xdf\x01\xb4\x58\x07\xe2\xe0\x0e\xc4\x7f\xab\xea\x36\x7e\xd5\x9a\x9a\xe1\xbd\x53\x5a\x14\x18\x37\x96\x28\xde\xa5\xaf\x5a\x76\xb9\xf1\xce\x4c\x48\xcf\xcb\x9b\x28\x54\x88\xba\x20\x0e\xee\x80\xb4\xcd\x24\x55\x31\x79\x99\x9d\xe0\xbb\x2f\x24\xc1\xdb\x5a\x46\x99\xaa\x89\xe6\x27\x0e\x78\xce\x85\xa1\xfd\xaf\x84\x7c\x95\x3c\x11\x75\x41\x1c\xdc\x01\x39\x32\xec\xd5\xa6\x8f\x66\x86\x5f\x2f\xd6\x27\x84\xa2\xf1\x61\x28\xdc\x92\xd9\x23\xbb\xbe\xc3\xd9\x17\x4e\x80\xe3\xc0\x71\x07\x7a\x2d\x20\x88\x83\xfa\x00\xf7\x7f\x3b\x00\x9a\x6a\x9f\xe5\x80\x0c\x0e\x55\xbe\x0f\xf9\xba\xcd\x1a\xd3\x7d\xfa\x72\x0d\x8b\x19\x7f\x74\xca\xb1\x6d\x0f\x4e\x19\xcd\xa2\x46\xd9\x47\xa8\x51\xd0\x4e\x18\x20\x0e\xee\x40\x58\xdc\x12\xd1\xed\x69\x5b\xfc\xf9\x1f\x1e\xab\xa6\xf8\x18\x7f\x9c\xb4\xf4\x3f\xe1\xb9\xd3\x0d\x27\x49\x05\x1c\xf1\xd5\xbe\x84\xe6\x9a\x20\x0e\xee\xc0\xe6\xa5\x4f\x9e\xe3\xdc\xe4\x8d\x21\xc9\x26\x64\x07\x97\x2e\xea\xb3\x26\x5a\x25\xf6\xea\x3a\x0e\x28\x56\x2e\x9f\xf4\xc8\x92\x41\xaf\x84\x03\x71\x70\x07\xb0\x5f\x0c\x61\xfd\xf2\x37\x34\x4e\x6e\x79\x2a\x99\xff\xd8\xf5\x8e\x65\xd0\x63\x29\x0e\xb5\xee\x5e\x0e\x8e\xe6\x87\xe3\x6a\xf8\xd0\x39\x11\xc4\xc1\x1d\x78\x8c\xbe\x9a\xc1\xf6\xa1\xbe\xc4\x60\xbd\x3f\x88\x54\x27\xb2\xf2\x22\xe3\x86\x3c\xb6\x5d\xce\x70\x4a\x7d\xc8\xcc\xdd\x77\x7e\x3c\xd0\x6e\x10\x00\x0e\xea\x03\x80\x20\x38\xe8\xba\xe7\x2c\x07\xb4\x49\xdd\x36\x6d\xd4\x9b\x7e\xa7\x76\x15\xf4\x75\x27\xd7\x54\x1f\xb9\x5d\x6d\x9e\x91\xdd\xd4\x89\xbf\xc9\x13\xe5\x66\x10\x08\xed\xda\x00\xe2\xe0\x0e\x28\x8e\xfe\xf2\xe3\x63\x09\x29\x27\x69\xee\x37\xe5\x27\xae\xd7\x69\x35\xb9\x68\xa7\xe0\x44\x39\x1a\xbf\x44\x93\xb5\x60\x41\xb5\x8a\xa8\x0b\xe2\xe0\x0e\x74\xdc\x77\xbb\x63\x70\x57\xa6\x91\x69\xde\x35\x28\xc2\xf4\xeb\x9b\x8f\x68\x51\x53\xb7\x07\x88\xa9\x6d\xda\xda\xa8\xbb\x35\x25\x0c\x11\x75\x41\x1c\xdc\x01\xbf\x30\x83\x5e\xcf\x08\xe2\xa1\x0d\x94\xac\xda\x37\x36\xa9\x7c\x9f\x99\x2e\xe7\xd3\xb8\xea\xca\x31\x24\xe2\x74\xde\x14\x89\x91\x45\xd4\x05\x71\x70\x07\xc4\x45\xf7\x82\xfa\x1b\xb0\xb1\xb7\xc3\xde\x3d\xf1\x68\x08\xd0\x6f\x4f\xd5\x55\x13\xf4\x43\x19\x70\xce\x5f\x14\xc7\xda\xbd\xe1\x8f\x70\x00\xc4\x41\x7d\x40\xfd\xbf\x1d\x00\x5d\x84\x9e\xe5\x00\x0d\xd5\x2c\xd7\xe3\x94\xb7\xef\x1c\x3c\x86\xc4\xd9\xf5\x38\xb0\x84\x46\x63\xee\x86\xff\xaa\x66\x58\x18\xb0\x5d\xf3\x29\x8c\x87\xde\xb8\x01\xe2\xe0\x0e\xfc\x55\x1f\x34\xce\xbf\xfa\x7a\xab\xe1\x40\xf9\x43\xe3\xd5\xf4\x89\x22\x82\xd9\xf8\x0b\x1a\x06\x27\xda\x41\xe3\x47\xa6\x44\x82\xae\x88\xba\x20\x0e\xee\x80\x9d\x93\xc7\x0d\x12\x42\x5b\x9d\x41\x66\x35\xae\x45\x74\xc9\xd4\x1f\xd8\xaa\x1d\x0f\x7d\x24\x7c\xe5\xf2\xd2\x4f\x48\xbf\x33\x17\x21\xea\x82\x38\xb8\x03\x85\x77\xc2\x5f\xd4\x71\xe6\x8c\x64\xb1\x66\x3d\xd0\xf5\x09\x7e\x4b\xbb\x2a\xbe\xe4\x25\x26\xf5\x5c\x71\xa5\x96\xa2\xb9\x99\xf1\x26\xa2\x2e\x88\x83\x3b\xa0\x5a\xec\x49\xcd\xd7\x51\x47\xe3\x87\x76\xdd\xc4\x3e\x36\xc6\x6c\xf9\xb1\x16\x91\x44\x1e\xd1\x78\x6e\x6d\xa4\x36\x3d\x8a\x0f\x29\xf4\xb6\x28\x00\x07\xf5\x01\x50\x10\x1c\x14\x18\xfc\x27\x08\x8e\xe2\x81\xb4\x86\x11\x54\x50\xf0\x93\x40\xa1\xde\xf9\xa1\x70\xcb\x53\x0d\x9e\x87\x84\xbf\x9e\xdf\x39\x7c\xfa\x43\x4a\x46\xb8\x89\xc5\x5d\x63\xf2\x61\xd4\xb9\xad\x61\x80\x0e\x74\x96\xa7\xcd\x8c\xbc\x15\x81\x8b\xc3\x27\x7f\x99\x62\xb4\xb5\x29\xde\x8e\xad\xd0\xa5\x0f\xde\x76\x21\xf9\xdc\xdc\x8c\xfb\x53\x0c\xe5\x69\x2d\xe2\xf7\x01\x71\x70\x4f\x33\x8f\xb7\xf2\x6c\xab\xd0\x69\xba\x9b\x8d\x7b\x72\xc7\xf9\xfc\xe9\xfe\xb0\x0e\x85\x3a\xad\xcf\xfe\x2d\xe7\x1c\xc9\xb5\xb4\xf3\x45\xd4\x05\x71\x70\x4f\x99\x6f\x9b\x4a\x1a\x7d\x77\xa2\x77\xf6\x30\x9c\x88\x21\xd4\xd9\xd2\x7a\x1e\x62\x5b\x5d\xce\x7e\x50\xb3\x30\x59\x7b\x4b\xbe\x0b\xf2\x14\xc4\xc1\x3d\xf5\x92\xb4\xd2\xed\x52\x1d\xfd\xa5\x28\x9e\xa5\x38\xbd\xfa\xd0\x52\xdb\x3d\x7c\x6c\xc4\x43\xb1\x3a\x68\xac\xcf\xee\x91\xde\x1a\xf4\xe0\x12\x88\x83\x7b\x1a\x5f\x70\x64\xcb\x6d\xa4\x51\x4c\x98\x75\xcb\xd8\xec\xa3\x9a\xbc\x79\x46\xc3\xfd\xbf\x57\x14\x5e\xe4\xe2\x2e\xc5\x3f\x2f\x08\x28\x43\x78\x0a\xe2\xa0\x5e\xe5\xf1\xdf\x41\x70\x50\x24\xf8\xec\x20\x38\x5e\x55\x95\x3b\xca\x1d\x14\xb5\x5f\x32\x9a\x2b\xbd\x35\x61\x5a\x2f\xf1\xad\x82\x02\xd3\x8d\xdc\xbb\xc8\xd1\x57\x05\x99\xcb\x49\x10\xa1\x6a\x10\x87\x1c\x04\x2f\xef\xca\x9e\x9c\x78\xa2\xf8\x83\xf4\x42\xdb\xa3\xcb\x17\x6a\xf1\x6f\x19\x2b\x8a\x49\x84\x8d\xfb\xae\x5a\x73\xd9\xdd\x4d\x14\x91\x43\x54\x06\x71\xc8\x41\xf0\xc2\xb8\x94\xaf\x18\xa3\x5f\x62\x5e\x6a\x6b\x62\xa3\x52\x4f\x7c\x26\x2d\xcb\xa6\xe7\xc7\x12\x57\x6d\x9b\xe7\xc4\x4b\x16\xcc\x23\x43\x54\x06\x71\xbe\xd2\x5e\xb0\x6f\xa3\x6b\x9c\xb2\xeb\xb8\x6e\x47\x75\x8b\x6e\xaf\x81\xa6\x71\x2e\xd8\x54\x8a\x39\xf9\x43\x42\xb1\x49\x93\x17\x8f\xb4\xca\xef\x41\x0e\x44\x10\x1c\xc4\xf9\x4a\xa3\xd0\xa2\xfc\xcf\x20\xf8\x6b\xb2\xc8\x3b\x14\x29\xe9\x24\xef\xab\x6f\x3b\x8c\x94\x4a\xa1\x16\x92\xe6\x65\x7b\x90\x8a\x7d\x63\xfa\x41\x76\x4d\x6c\x92\x7c\xe2\xdf\x41\x70\x7a\x23\xa7\x65\x22\xd9\xbf\x0f\x6b\x14\xef\x19\xd7\xb6\x08\xa0\x5d\x95\xde\x54\x89\xca\x2c\xb6\x62\xff\xc3\x16\xf5\xcd\x91\xf4\xdf\xfb\xaa\xe4\x0e\x65\xe0\xb9\x8a\xbe\x9a\x44\x63\xf3\xf1\x2e\x7e\x64\x1e\xa1\xf3\x6e\x97\xca\xa6\xa4\xfd\xf5\xf1\x96\xe0\x50\x05\x11\x2d\xee\xff\xbe\x20\x38\x68\x70\x67\x04\xc1\x09\xb2\x1f\x10\x90\xa1\x10\x5f\x55\xb4\xe7\x64\xf9\xc9\x3a\xa0\x90\x27\x98\x3c\x25\xcb\xbe\x32\x67\x46\xd5\x79\x70\x33\x9d\x3c\xef\x5f\x68\xd3\x2f\x2e\x8b\x6c\xfb\x17\x3a\x33\xce\x93\xd3\xd7\x1f\x3d\x57\xf2\xdd\x49\x23\xbc\x1b\x2d\xe7\xfc\x02\x7b\x9d\xd5\xf1\x8b\x6c\xf9\xbf\xd0\x15\xa7\x50\xc2\xdb\xe2\xfb\x7a\xa1\xe9\x74\x87\x29\xe8\x18\x27\x97\xdf\x36\x78\xe6\x90\x6e\xa7\x84\x18\x31\xba\x05\xfa\x61\x6b\x42\x41\x70\xd0\xe1\xff\x09\x82\x4b\x22\x05\xc1\x47\x3f\x5c\xb4\xc0\x6a\x97\xdc\xd3\x7b\xc0\x5c\x53\x53\x21\x60\xf6\xf6\x9e\x5f\x3a\x87\x31\xd5\xd3\x6d\x85\x24\xd7\xe1\x4e\xda\x81\xf3\x58\x3a\x6f\x42\x0e\x82\x6b\xf4\xbc\x3e\x2e\xca\x0c\xc5\xb3\xe1\xc8\x26\x7f\xa6\x31\xfd\xb5\xbe\x44\xb6\xee\x22\x77\x85\xcb\xdf\x0f\x92\xc1\x37\xa6\xae\x3a\x9e\xc7\x61\x25\x91\x83\xe0\x69\x0f\xe6\x1d\x98\xc3\x23\x32\x6f\x5e\x21\x44\xf3\xcc\xf2\x90\x12\xe0\x67\xc2\x6d\x6f\xc1\x23\xf2\x76\xa4\x49\x69\xf0\x6d\x3f\x39\x97\xd1\x22\x07\xc1\x51\x9e\x38\x3d\x70\xb8\xc3\x3d\xf4\x52\x87\x06\xb7\xa4\x38\x0e\x45\x22\xe2\x1d\xca\xe1\xed\x0f\x4c\x46\x8c\xeb\xaa\xd3\x63\x85\xef\xcf\x65\xb4\xc8\x41\x70\xd9\xcc\x3c\x25\x9d\xfb\x1e\x99\xdb\xcc\x71\x8d\x17\x77\x15\x28\x64\x3b\x82\x1b\xbb\x7f\xe0\x8b\x7a\xe2\xcc\xb9\xd8\xbe\x94\x65\x3e\x97\xd1\x22\x07\xc1\xdf\xe0\xf2\xc7\xdb\x7d\xe4\x8f\xb2\xcb\xb5\xde\x3b\xc0\x4d\xd1\xe0\x2e\xfe\x2d\x1d\x79\x84\x75\x8d\x5d\xd0\x2a\xba\x5e\x30\x92\xf3\x5c\x46\x8b\x1c\x04\xaf\x2f\x20\xc8\xbb\x2d\xe6\x80\xe9\xe4\x9b\xe6\x59\xb8\x5a\xb0\x5e\x34\x64\xe3\xd7\xc2\xa7\xed\xd7\x22\x20\x35\x16\xa4\x21\x71\x2e\x77\xda\x9a\x90\x83\xe0\x68\xdb\xf1\x86\x06\xaa\xf7\xbb\xb2\x67\x4e\x4d\x67\xf2\x89\x54\x38\xb1\x03\x89\xb6\xf9\xee\x0a\x5f\xbb\xcf\xdc\x21\x8e\x3d\xf0\xe6\xdc\x26\x50\xa0\x7f\xea\x59\x13\xa8\xb6\xbd\x12\xb6\x71\x43\xac\x83\xc5\x5d\x95\x81\xf2\x2e\x32\x91\xc3\x70\x72\x2f\x4c\x29\x49\x6b\xa3\x23\x2c\x86\x55\xcd\x07\xe5\x88\x89\x03\x88\x43\x4a\x01\x4f\x28\xdc\x73\xc0\x27\x10\xe6\x9d\xb9\xa0\x89\x5f\x91\x17\x76\xd5\xfd\xfa\x8d\xaa\xc9\x59\x8f\x88\x3e\x5c\x77\x8f\x82\x56\x28\x60\x0e\xe2\xe0\x13\xa8\xa0\x92\x55\xa1\x26\xf5\xde\x53\xe1\xf9\x93\x6a\x2f\x46\x45\x94\x5a\x9e\x1c\xc3\xbe\x09\xcd\x7e\x2a\x76\x5f\x9a\xe6\x5d\x7d\xe8\x95\x42\x20\xee\xff\x99\x90\xfc\xbb\x6e\x88\x5c\xc4\x53\xdb\xd6\x69\x9e\x71\xa3\xcf\x5b\x2c\xd1\x87\x32\x69\xb1\x71\xef\x07\x37\x49\x9c\xe9\xae\x3a\xb9\x7f\xf5\xcb\x9a\x40\xd4\x05\x71\xbe\x52\xe8\xff\xe3\x7b\xc0\xec\x7a\x1e\x12\xc8\x1d\x64\xe4\xb2\xd6\x99\xb0\x49\x9c\x4d\xf0\x7e\xd4\x26\x02\x7d\xaf\x89\xf4\x9d\x93\x2e\x93\x6c\xff\x60\x3b\x22\x08\x0e\xe2\x7c\xa5\x50\x2e\x78\x79\xbf\xfa\x3f\xfd\xf9\x3f\xae\xf5\x40\x5d\xf3\x2c\x05\x92\xd1\x7b\x77\x6b\xcc\xde\x31\x6f\x3c\x42\xbd\xf8\x21\xb5\xb7\xf5\x0a\x6d\x62\x26\xf6\x04\xe1\xc2\x9c\x03\xfe\x77\x0d\x72\x17\xe8\x21\x7d\x10\x07\x57\x20\x2b\x5c\x56\xd7\xca\xf8\xe1\xc8\xc3\x89\x26\xc7\xe2\xe9\xe4\xa8\xf5\x5a\x27\x46\x3f\x23\x23\xf5\x00\xda\xaf\x9b\xe9\xaf\x9c\xa0\x57\xc0\x83\x38\xb8\x02\xac\xd1\x1e\x5e\x64\xae\xe8\x05\xfe\x1c\xbc\x62\x17\xe7\x6c\x70\x70\xc4\xe3\xd0\xe8\x2a\xf8\x0e\x5c\x37\x09\x25\xeb\xc6\xbe\x41\x6b\x3e\x20\x0e\xae\xc0\xec\x81\xab\x19\x7b\x26\xcd\xb3\x93\x2d\x9e\xe7\x4b\xab\x9e\x75\xc1\x7e\x4b\xa4\x73\xa5\x97\x65\xa7\x1e\x8f\x7e\xfd\x92\x37\xa2\x02\x29\x0b\xe0\xe0\x0a\xd0\x92\x5a\x9d\xbc\x5e\x10\x89\x37\x7f\xc1\x24\x10\x1b\x1c\x42\x4c\xf2\x64\x3a\xf1\x83\xee\x06\x5d\xf2\xd0\xf5\x82\x65\xa6\x2f\x1b\x88\x39\x34\x88\xfb\x47\x81\xff\x7b\xb2\xfc\x0f\x07\x40\xa7\xb0\xb3\x1c\xa0\xab\x6d\x0c\xbc\x89\xd2\xb6\xf0\xa9\xee\x0a\xb5\x95\x34\xb7\x68\xd9\x56\xcb\x65\x95\xe0\xd6\xdd\x16\x59\xf9\xee\x37\xb8\x86\x8a\x88\xb1\x83\x38\xb8\x03\x3c\xa2\x31\x38\xf3\x38\x6d\x5b\xf8\x7f\xf9\x24\xe5\xbe\x96\x3c\x8d\x1d\x78\x36\xe0\x3e\x77\x25\xfd\xd0\x7e\x72\x75\xd1\x35\x10\xda\x60\x06\xc4\xc1\x1d\xf0\xc7\x62\x17\xeb\x78\xe4\x15\x71\xeb\xfa\x15\x81\x72\xb1\x38\x5b\xaa\xa2\x0f\x06\x06\xd7\xdc\x19\x49\xb1\xc4\xe8\x2a\xda\xd4\xa1\x5d\x1a\x41\x1c\xdc\x01\xf5\x35\x75\x34\xee\x6d\x0d\x27\x6b\xd2\x08\x5c\xeb\x97\x95\xcd\x56\x31\x77\x47\x86\xef\x11\xe1\x6b\x87\x0a\xa6\x5c\xd8\xf5\x0f\x82\xee\x05\x03\x38\xb8\x03\xe9\xe1\x2c\x9e\x8d\x2e\xe2\x0a\x12\xf3\xa3\xbb\x1e\x9f\x1f\xbd\xb3\xe0\x0d\x7e\xf4\x57\xb3\x15\xc3\x88\x9c\x39\xad\x44\x69\xd8\x14\xe1\x00\x88\x43\x38\x20\x09\x08\x82\x83\xe6\x13\x67\x39\x20\x48\xd2\x1b\x19\x80\xca\x53\xe8\xa2\xce\xa2\x15\xf5\xe3\x05\x7b\xab\x6d\xb9\x4d\x7e\x4f\x9b\xce\x48\x61\x1c\x81\xa9\xe2\x09\xf4\x12\x07\x10\x07\x77\x80\x65\x7f\x3d\x9d\xd9\xc7\xda\xf7\x8b\xed\x11\xcd\xdb\xfb\xe5\x8e\xb7\x16\x54\xa4\x54\x35\xd2\x2a\xfb\xb1\x51\x92\xd9\xcb\x12\x39\x11\x75\x41\x1c\xdc\x81\x14\x22\xd2\xa6\xe1\x94\x85\x0b\x95\xbf\x85\xe7\x7c\xf0\x52\xa5\xa3\x63\x0d\x31\xd4\x68\xf3\x32\xe3\x23\xfa\x25\xf7\x8d\x03\x62\x10\x75\x41\x1c\xdc\x81\x87\x32\xc7\x57\x25\xd6\x51\xc5\x0d\x7f\x89\x8b\x05\x12\xe2\x8c\xbd\xbc\x38\x4b\x8c\xcd\x92\xc1\x20\xf2\x13\x8f\x2f\xfd\xcb\x06\x0d\xa2\x2e\x88\x83\x3b\x10\x61\x72\x31\x2b\x82\xc2\xdb\xb9\x51\xeb\x67\xb4\xe0\x70\x53\xdd\x6b\xdc\xac\xe6\x3b\x3a\x32\x01\xb1\xad\x0e\xeb\x6e\x6d\x8a\x82\x08\x07\x40\x1c\xd4\x07\x00\x41\x70\xd0\xe4\xee\x2c\x07\x5e\xde\xab\xc7\x39\xc6\xa9\x8f\x1d\xc1\xe1\x3f\x0d\xd8\x4c\x7c\xdb\xcf\xf8\x3a\xd2\x4c\xb0\x62\x93\x41\xe2\x53\xee\x03\x47\x12\x68\xd3\x1e\x10\x07\x77\x00\x37\x0b\x37\x9f\x60\xd7\x31\x72\x69\x7c\x23\x79\xdd\x3c\x3d\xa7\x10\x25\xf8\x3d\xee\xbc\xc9\xca\x9f\x0f\xb6\x2a\x3d\xe8\x85\x55\x88\xba\x20\x0e\xee\x00\x67\x1c\x9a\xf8\xb7\xf1\x28\xb3\x8b\x71\x6b\xd9\xb9\x03\x4a\xaf\xc8\x47\x34\x16\x8e\x62\xbe\x6c\x0e\xfd\x26\xfd\x5b\x4b\x21\x0e\xed\x36\x0f\xe2\xe0\x0e\xb8\x4f\x6e\xe7\x56\x61\x8a\x99\x0a\x2f\x4e\xb9\x44\xe8\x9c\xee\xdb\x30\xaa\xe9\x8b\xdc\x56\x55\x71\xb9\x29\x2f\x11\xd6\x51\x02\xdd\xb7\x04\x71\x70\x07\x7c\xd9\xab\xc3\x9b\x38\x33\x17\x86\x69\x26\xbd\x93\x19\x51\xdf\x92\x17\xf1\xee\xa2\x32\x7b\xa8\x28\xcf\x67\x49\xba\x6d\xf3\x69\x21\x1c\x00\x71\x50\x1f\x00\x04\xc1\x41\x33\xed\x33\x1d\x68\xe8\x8d\xfd\x1b\x7d\xbf\x45\xeb\xa2\x69\x45\xcc\x70\xca\xc3\x5c\x9e\x16\x55\xf6\x02\x6f\x21\x92\x67\x43\xfd\x81\x99\xd5\xce\x90\x03\x00\x0e\xee\x00\xd5\x51\xde\xfe\x7e\xae\xeb\x77\x46\xa9\xbe\x2b\xc9\xdd\x46\x9e\xb1\xd7\xdf\x11\xd8\xc9\x2f\x2c\xa8\x4e\xed\x63\x33\xa7\x46\xe5\x21\xea\x82\x38\xb8\x03\xfb\xfb\xf3\x0b\xa4\x05\x31\x2b\x35\x06\x3f\x6e\x11\xaa\x84\x8b\xa0\x19\x52\xb9\xb4\xf0\xd9\x75\xad\xb8\x5d\xe5\x11\xa3\xb6\x84\x7e\x2b\x10\x07\x77\x20\x38\xfd\x30\x4c\x25\xe9\xef\x17\x4a\xf5\x48\x5c\x67\x07\x5e\xcc\x82\x1d\xfc\x4b\x4e\x89\x4e\x33\x4d\x8b\x73\x94\xb6\xc3\xd7\xeb\x10\x75\x41\x1c\xdc\x01\x8d\xa0\xcf\xf7\xe8\x56\x52\x63\x5b\x19\x12\x50\xae\xfc\x5e\x34\xa6\xc6\xa9\xce\xc7\x51\x7e\x38\x70\x43\x52\x8b\x7b\xfd\x12\xda\x0b\x84\x03\x20\x0e\xea\x03\x80\x20\x38\xe8\xb2\xe7\x2c\x07\xae\xb6\xae\xa9\xf9\x85\x3c\xd3\x53\x7c\x93\x5b\xf0\x31\x24\xd4\x98\xac\x28\x96\xf4\x27\xb3\xc9\x53\x06\x46\xff\xc2\xc2\xbb\xa3\x92\x50\x60\x1b\xc0\xc1\x1d\x18\xdc\x1e\xd1\x27\x11\xba\x45\x37\xd0\x1f\x77\xbb\xfb\x61\xe1\x65\xba\x2e\x8f\x32\x9c\x86\x16\x51\x9f\x60\x8e\xd6\xe0\xa3\x3b\x42\x88\xba\x20\x0e\xee\xc0\xfc\xfc\xbb\x18\xc7\xed\xfe\x7a\x57\xf6\x22\xf4\x94\x96\x44\xe6\x67\x55\x31\xef\x84\x02\xf8\xe5\xe4\x37\x12\xb9\x45\xbd\x1a\x20\x07\x40\x1c\xd2\x9c\xf0\xa5\xb9\x9e\xca\x8e\x8f\xf3\x5b\x8a\xe3\x6f\x77\x5a\x2f\x98\x93\xf1\x63\xe3\x5a\x3f\x49\x6e\xa5\xb8\x76\xd1\x26\xe6\x6e\x03\xf4\xb6\x59\x10\x07\x77\x00\x35\xf6\x31\x6e\x85\x4b\x4b\x9d\x10\xdd\xab\xc2\x94\xb8\x4d\x11\xcc\x69\xfb\xae\xd9\xbc\x96\x71\x72\x66\x4c\xd9\x7a\xe7\x90\x67\x08\x07\x40\x1c\xd4\x07\x00\x41\x70\xd0\x35\xe8\x59\x0e\xf8\xd4\x0d\x31\xc7\x46\x7d\x75\x47\x23\x60\x5e\x71\xae\x10\x27\xe5\x48\x90\x44\xff\x6e\x20\x7d\xe4\xa7\x59\xb6\x5a\x67\x79\x1a\x89\x18\x3b\x88\x83\x3b\x60\x49\x4e\x3f\x3b\x35\x41\x1b\xd0\x48\x5f\xc5\x11\x6c\x77\x4d\xe3\x86\xda\xbd\xcf\x1c\x06\xdb\x58\x02\x3a\xee\x4e\x5c\x3d\xb8\xd0\xff\x0a\xc4\xc1\x1d\x78\x61\x58\x2d\xb4\xfa\xa0\x6d\xfb\xd2\xa2\x31\xe6\x13\x66\x94\xad\xde\xe6\x1c\x85\x2f\xe5\x5c\x65\x8f\x76\x56\x9d\x15\x1c\x55\xa1\xfb\x96\x20\x0e\xee\x80\x89\xb2\xb3\x5b\x2b\x4f\xff\x63\xf3\xd0\xc8\x4f\x8c\xa2\xd3\xba\xb1\x92\xa4\x39\x72\xa1\x7e\xab\x45\x89\x1c\x74\xec\x91\xd9\xd0\x86\x96\x20\x0e\xee\xc0\xb0\xdb\xf7\xbb\x78\x94\x2d\x69\x78\xad\x9e\x75\xf5\x53\xd8\x93\x61\xd5\xc9\xeb\xe9\x79\x43\xe8\xba\x8f\x1f\x49\x1e\x1a\xf3\x41\x0f\x84\x80\x38\xa8\x0f\x80\x82\xe0\xa0\x65\xc5\x7f\x82\xe0\x92\xc8\x41\x70\x62\x8d\x54\x76\xc7\xd6\x50\xf7\x3f\x93\x69\x55\xc5\x46\x29\x36\x53\x1c\x5e\x9d\x76\x8d\xaf\x87\x07\x0c\x9b\xc8\xc3\x1c\x5f\x7d\x3c\x97\x95\x13\xe4\x20\x38\x93\x09\xed\x95\xeb\xc5\xd4\x84\x68\x3f\xdb\x93\x68\x4c\x0f\xca\x65\x9f\x6b\x85\xaf\xa3\x28\x84\xd4\x4a\x2e\xcb\x0c\x2c\xd4\xd4\x9f\xcb\x3a\x11\x72\x10\x7c\x5d\x80\xcd\x7d\x51\x5a\xd3\xcf\xd1\x3e\x9e\xb1\xcd\xd3\x9f\xa5\x79\xad\xb4\x72\xcf\x34\x6a\x52\x66\x21\xbe\x1d\x33\xe3\xc5\xb9\xec\x41\xd1\x84\x1c\x04\xc7\x27\x24\xba\x32\xf1\xf8\xa7\xa0\xf5\xaf\x3d\x5d\x71\x12\xf6\xf2\xaa\xcf\xc7\x9d\xfd\x11\x43\x6b\xab\x04\xad\x86\x3a\x8c\xc3\xe7\xb2\x18\x27\x89\x1c\x04\x57\xbb\xbc\x5c\xcd\x55\x1d\x2c\x34\xee\x9d\xc8\x7c\x3a\xbf\x56\xb5\x52\xb3\x93\x3e\x6b\xf6\xab\xf1\x0e\xff\x35\x59\xff\xba\xe8\x73\xd9\x23\xbb\x09\x39\x08\x5e\x85\xb3\x9d\xe5\x72\xb0\xf7\x22\x29\xba\x52\xc0\x49\x68\x74\x4d\xc9\x59\x30\x1e\xd7\x24\xf9\x4f\xcb\x35\x3e\x4c\x9e\x42\x52\x9d\x73\x19\x2d\x72\x10\x3c\xb2\xd8\x1a\xeb\x0d\x8a\x7b\x48\x4f\x32\x13\x81\x4d\x43\x47\x29\x25\x86\x92\xcd\x9d\xeb\xa3\x89\x84\x8b\xd2\xef\x4d\x9d\xa9\xce\xc7\x64\xe4\x20\xb8\xdb\x8a\x66\xe3\x85\x35\xb1\x01\xe2\x6a\x89\x87\x13\x0e\xfe\xdc\xb7\xbe\x79\x1e\x57\xf6\x65\xa8\x72\x85\x27\xf1\xbc\x94\xd9\xf8\x73\x6e\x6b\x80\xa0\x7f\xea\x59\x8d\xde\x57\x58\xe5\x96\x8e\xed\xa9\xbf\xdf\x44\xbd\xd0\x57\xac\x36\x95\xd2\xb8\x35\x9c\xe7\x74\x44\x2b\x63\x65\xc7\xe8\xa6\xef\x2b\xcb\x10\x0d\x0e\xc4\xc1\x1b\xfd\x8e\xa9\x10\x6e\xd9\xd8\xb2\x50\xbe\x9e\x0d\xd3\x6c\x48\xed\x9f\xb9\x3f\xce\x12\xd7\x30\xee\xe4\xe2\x51\x39\xa0\x31\x13\xba\xaa\x22\xea\x82\x38\x78\xa3\x77\xd0\x2b\x27\xe2\x65\xc1\x60\x48\x19\x8b\x57\x99\x13\xc8\xcf\x28\x7d\xdf\xf2\xa2\xef\xf1\xc3\xed\x4b\x39\x79\x1c\x63\x7b\x63\x2c\x88\xba\x20\x0e\xde\xe8\x27\xee\x67\x58\x11\xd2\x05\xbe\x2c\xf1\x93\x58\x9b\xda\xc9\x89\x73\x34\x50\xaf\xbe\xa3\xa1\xfd\xa9\xe6\xbe\x8f\x04\xe6\xa1\x2d\x74\x31\x01\xe2\xe0\x8d\x5e\x90\xf5\x59\x89\xee\x84\x78\xdd\x52\x68\xe2\x0a\x97\xe1\x8f\x37\x87\x29\x8e\x28\xa7\x14\x8c\x46\x65\x2f\x5f\xbd\x94\x97\xec\x0e\x46\x34\x7a\x10\x07\x9d\xec\x01\x41\x70\x50\xdb\x3c\xd3\x81\x45\x0a\x6d\x03\x89\xe1\xe4\x06\x74\xcb\xe0\x3f\x05\xf3\x37\x48\xc9\x62\x6f\xe3\xa5\x59\xca\x3d\x5c\xfc\x3c\xc8\x5c\xdf\x7e\x17\x72\x00\xc0\xc1\x1d\xc0\x8c\x3e\xbd\xfd\xa7\x37\xcc\x3f\xc9\x9e\x8a\xec\xab\xed\x37\xd1\x7e\x52\x35\x77\x4f\x67\xac\xa7\xd3\x05\x06\xe1\x61\xfd\x6f\xa0\xa7\xcb\x41\x1c\xdc\x81\x86\x97\x0f\x1e\x37\x7c\x14\xa9\xd7\x64\x17\xfc\x9d\x7c\xc0\x16\xab\x18\x4d\x34\x28\xed\x13\xcf\xfa\x5e\xc0\xe7\x43\x56\xe4\x1c\xf4\x54\x29\x88\x83\x3b\x20\xbb\x70\x4d\x6b\x91\x60\x5c\xf8\x62\x72\xae\xf9\x8a\x34\x9f\x27\x8f\xc9\xb0\x9f\xfc\x73\xaa\x2f\x1f\x9e\x4c\x5d\xde\x8b\x24\x81\x76\x40\x04\x71\x70\x07\xa8\x59\x77\x02\x3a\x7b\x3d\x6a\x70\x86\x05\x33\x27\x4a\xb3\xf1\x5c\xdd\xa6\x14\xd9\xaa\x7d\xb6\x22\xd6\xc9\xb2\x2b\xd9\x2d\xa1\x05\x20\x10\x07\x9d\xec\x01\x41\x70\xd0\x39\xec\x2c\x07\xe6\x3f\x4f\x59\x9c\x88\x26\x1d\x07\x2b\x74\xfe\xce\xd9\xb7\xae\x7f\x3b\xfe\xfa\xc9\xd8\xeb\x4a\x15\x94\x0a\x67\x51\xc9\x9a\xf9\x7c\x68\x12\x0d\xe0\x90\x36\x85\xe9\x41\x89\xe0\xa0\xbf\x39\xaf\xa6\xd5\x27\xd1\xff\x87\x78\x22\xbf\x96\x57\xe0\xa7\x7a\xa3\x7b\x57\x52\x23\x8a\x2f\xa5\xc0\x77\x68\x53\x18\x00\x07\x77\xc0\xc9\x3c\x59\x89\xe8\x9e\x7e\xc9\x8b\xb7\x4b\x7d\xe6\xa8\x01\x59\xd1\x0a\x0e\x34\xbc\x71\x55\xb4\x4c\xb4\x8c\xe3\x57\x4a\x69\x5b\x10\x75\x41\x1c\xdc\x81\x97\x0d\xc5\x7e\xb2\x32\xa5\x84\x75\x97\xd3\x4c\xd3\xb4\x02\xdd\x9b\xd7\xf2\xcc\x77\x43\xbb\x2c\x27\xb0\x5b\xb4\x0f\xc6\x16\x09\xfe\xdf\x0b\xe0\xff\xe6\xe0\x0e\x48\x07\xb8\xbf\x26\xde\xbe\xba\x5e\x9a\x1c\x87\xf9\xfa\xb4\x7e\x95\x4f\x5e\xfd\xa1\x41\xf2\xfe\x50\x47\xf6\x5e\xc4\xac\x6c\xb5\x2b\xf4\x66\x00\x00\x07\xf5\x01\x40\x10\x1c\x34\xa1\x38\xf3\x09\xe0\xe4\x10\x29\xae\x47\xfa\xef\x44\x48\xe8\x2f\xa1\xbd\x8f\x4c\xbf\x6a\x4b\xc4\x2c\x3c\x91\xaf\x1f\x3f\xba\xd2\x51\x66\x72\x09\x0a\x68\x81\x38\xb8\x03\xbc\xd8\x4c\x58\xa7\x71\xf1\x34\x9c\x2f\xcb\xe8\xfd\x69\x5f\x8f\x2d\x60\xe4\x71\xde\x92\xd1\x57\xb2\xb5\xb7\x47\xa3\xee\x9a\x86\x02\x2a\x20\x0e\xee\x00\x9d\x14\x43\x1f\xf1\x77\x0f\xa6\x46\x9f\x04\x86\xc7\xe2\xba\xed\x52\x82\x83\x49\xf3\x9a\xbb\x4b\x03\x57\x4d\xc3\xa2\x18\x19\xa0\x9d\x80\x41\x1c\xd2\xb9\x40\x95\xa5\x61\xcc\x30\x7b\xa5\xbd\xc7\x4e\xab\xc6\xaf\xab\x46\x52\xe3\x46\xb6\x38\x6f\x4b\x67\x4e\xdb\x75\x82\xec\x13\x02\xe8\xad\x13\x20\x0e\xee\x40\xa3\x64\x78\xa9\xa1\xec\x0d\xaa\xa0\x71\x83\xbc\x70\xe5\x61\xb5\xcd\x9d\x0b\x15\x6b\xfd\xfb\x81\xc1\x31\x21\x96\x05\x28\x4c\xd0\x43\x41\x20\x0e\xea\x03\x80\x20\x38\x68\x76\x77\x96\x03\x81\xa8\x64\xfe\x6c\xdf\xf8\x32\x06\x18\x48\x7d\x98\x86\xfc\x67\xa6\x17\xd3\x52\x6e\x14\xd0\xb6\x5e\xc1\x8f\xdf\xde\xcd\x68\x86\xde\x8c\x01\xe2\xe0\x0e\xdc\xc6\xa2\xc6\x28\x97\x14\x32\x93\x89\x0f\xc7\x6b\x12\xbb\x1e\x75\x7f\x28\xbe\xd8\x3c\x2d\x8e\x9e\xfb\x6a\x93\xcb\xf3\x5c\xa6\x7d\x44\x5d\x10\x87\x14\xfe\xe3\xf7\xbb\x17\x7e\x81\x8d\xd8\x96\x59\x98\xe3\x18\x8f\x7f\x77\x45\x2a\x88\x97\x40\xe4\x3d\xf5\x22\xca\xca\x4d\x82\x23\xf2\x76\x28\xfc\x07\xe0\xe0\x0e\xac\xf6\x53\xb9\x4a\xd1\x29\xd1\xde\xae\xd6\x5d\xd7\x48\x4d\x25\xe8\xbf\xd7\xcc\x7a\x8b\x58\x2e\xac\xbf\xfc\x51\x81\x9b\x1b\xe9\x35\x44\x5d\x10\x07\x77\x80\x66\x39\x7c\x39\xe4\xe7\xac\xed\xe1\x16\x2a\xb1\xc8\xc6\x5e\x76\xfd\x6c\x15\x71\xbd\xe0\xca\xe3\x68\xcd\x72\xec\xc7\x1c\x09\xd0\xab\x21\x41\x1c\xd4\x07\x00\x41\x70\xd0\x54\xfb\x2c\x07\xcc\x29\x87\xab\x66\x5d\x8f\xae\xcf\x6b\xe1\x7a\x1e\xec\xdc\x8b\x7c\xf8\x79\x19\xcd\xdf\x21\xbd\x5d\xfa\xcd\xfd\x5a\x59\x57\x1c\x68\x2e\x04\xe2\xe0\x0e\x28\xa0\xca\x94\x0b\xe1\xbe\x32\x54\x0d\xcf\xb9\xa8\xa2\x1b\x60\x24\x10\x47\x1d\x1d\xe1\xcb\x73\x62\xf3\x88\x73\x3c\xd1\x9f\x02\x0f\xda\x71\x08\xc0\xc1\x1d\x90\x8a\x4c\xcf\x96\x8b\x60\xab\x91\x74\x3f\xcd\xd4\x6e\x61\xbb\x33\x17\xe2\xb4\xfc\x89\xff\xda\x7a\x75\xa4\x85\xac\x7b\xed\x2d\xe8\x81\x10\x10\x07\x77\x80\xc3\x32\xb6\x98\xf5\x66\xe0\x84\x02\xad\xe8\x77\xcc\x5f\x63\x9b\x93\xea\xd2\x2f\x12\xde\x05\x18\x3b\xec\xbd\xf1\x68\x46\xbb\x0f\xbd\x75\x02\xc4\xc1\x1d\xc8\x9f\x98\xdb\xf2\x41\xf7\xae\x5d\x91\x6b\x6b\xa6\x46\x95\x1c\x79\xf2\x4a\x39\xf9\x24\xff\x5b\xf6\x37\x6e\x8d\x29\x62\x7a\x5d\x4b\x84\x03\x20\x0e\xea\x03\x80\x20\x38\xe8\xba\xe7\x2c\x07\x1e\x3a\x61\x48\xa7\x7d\xea\x5a\xbf\x6e\xe7\x3f\x1a\xa8\x4e\x69\x3c\x36\xca\xc6\xf1\x7a\x9c\xe7\xf5\x04\x99\xc4\x83\x94\x57\x3d\x58\xd0\x8d\x10\x00\x07\x77\x80\xbc\xbf\x4b\x90\xa2\x48\xfe\xe6\x54\xea\xa2\x17\x49\xcb\x50\x7c\x76\xb7\xc9\xaf\x99\xee\x1c\x9f\xa4\x12\x09\xbd\x39\x51\xd6\x31\x44\x5d\x10\x07\x77\xe0\xda\x46\xdd\x88\x11\x93\xfe\x66\x32\x77\x94\xb2\xa3\x19\xbf\xe0\x6d\x4d\x45\xe7\x89\xdd\x54\x1b\x36\xd3\x82\xcf\x1a\x68\x66\x0f\x11\x75\x41\x1c\xdc\x01\x0a\xcb\xcb\xb9\x8f\xbe\x4d\x11\x9c\xcc\x1f\xb0\x1f\x59\x69\xcd\xbd\x74\xd4\x3c\x60\x16\x52\x18\xb5\xd6\xbc\xf5\xa0\x4d\x9c\xfd\x17\xa2\x2e\x88\x83\x3b\xc0\x16\x76\x7a\x03\x9d\x03\x7d\x0a\x47\xc2\xb4\xaf\x82\xad\x7e\xeb\xe0\xd4\x4d\x73\xf3\x81\x61\xd4\xb5\xb1\xf7\xe4\x95\x5e\xb7\xd9\x11\x0e\x80\x38\xa8\x0f\x00\x82\xe0\xa0\x8b\xd0\x33\x17\x82\x27\x32\x09\x6e\x36\xb8\xfc\x8d\x90\xd0\x19\xee\xfa\x2e\xeb\xb4\xce\x7f\x09\xb5\xbc\xcd\xe8\xc7\x9d\x0f\x34\xbc\xd6\xbe\xab\xd0\x43\x36\x20\x0e\xee\x80\xc9\x85\x6f\xbb\xdd\x6a\xca\xb1\x29\x5c\xf9\x09\x0a\xb1\x8f\x24\x92\xd2\x2a\x4d\xa9\x73\xc2\x48\xab\x99\x28\x47\x03\xb8\x84\x96\xa1\x45\x35\x00\x07\x77\x20\xb9\xf2\xed\x5d\x76\xef\x06\x6c\xa2\x01\x0a\x8a\x54\x2d\x8c\xc1\xb5\xec\x03\x45\x36\x8d\x4b\xa8\x25\x66\x05\x46\x6c\x3e\x43\xd0\x39\x06\xc4\xc1\x1d\xd0\x6e\x4b\x1c\x10\xff\x61\x2e\xde\x11\x3d\x46\x10\xf3\xe9\x6f\xe5\x9d\x77\x5b\x84\xc2\x98\x8d\x55\x76\xe9\xef\x23\x7e\x15\x62\xae\x43\x0f\x45\x00\x38\xb8\x03\x73\xcb\x1e\x3f\xe3\xa7\x82\xd4\xf4\xe8\xdd\x5b\x55\xf2\x5f\x91\xf8\x93\x4f\x17\x76\x7f\xb8\x58\xbf\xf8\x95\x7a\x41\xc3\x9a\x1b\x5a\x08\x06\x71\x50\x1f\x00\x05\xc1\x41\x81\xc1\x7f\x82\xe0\x92\xc8\x41\xf0\x72\xa7\x07\x3a\x5c\x81\xdd\x44\xe6\xf4\x52\xb9\x87\xd6\x75\xfb\x27\xce\x96\x91\x86\xa9\x65\x99\xa6\x43\x69\xed\x18\x45\xb6\x52\xe7\xb6\x86\x01\x3a\xd0\x59\x9e\x46\xfe\x3d\x2a\xba\x31\x67\xe7\x83\x4d\x92\xc7\xcf\x13\xb3\x8b\xf3\x29\x41\xf4\x54\x8f\x49\xab\x36\x3f\xfe\xf2\x8e\x6d\x54\x58\x27\xe2\xf7\x01\x71\x70\x4f\x3b\x6a\xb9\x82\x89\x0e\x5c\xe4\x78\x7d\x86\x32\x9e\x3d\x71\xbb\xec\x38\xe0\xf1\xf4\x52\x56\x6a\x9e\x9e\xec\xd1\x87\x2f\x3d\x21\xd0\x6e\x28\x20\x0e\xee\x29\xc5\x1e\xb7\x22\xc1\xdd\x21\x9c\xf9\xe5\x0f\xcc\x5c\x19\x9d\x89\x3f\xd3\x30\xb1\x85\xd3\x93\xe7\x4d\x36\xe7\xb6\xdf\xad\x68\xdd\x87\x7a\x0a\x80\x43\xea\x55\xdd\x7e\x03\x5b\xb7\xd0\xd8\x82\x6b\xf6\x68\xbd\x4e\x8a\x94\x4c\x67\x77\x4d\xa6\xdc\xbe\x98\x4a\xad\x15\x9f\x4c\x59\xe9\x41\x37\xc5\x41\x1c\xdc\x53\x3b\x8f\x57\x41\xef\xb1\x0e\x22\xcc\x7e\xc4\x7d\x73\xc8\xbb\xff\xa8\xca\x50\xd3\xee\x11\x2f\x99\x98\xce\x45\xd6\x79\x1f\xc6\x21\x0b\x84\xa7\x20\x0e\xea\x55\x80\x20\x38\x28\x12\x7c\x76\x10\x9c\x8b\x74\xf5\xa9\x0c\xcb\x90\xda\xd7\x94\xa3\xdf\xa3\x93\x9c\x8b\x03\x5d\x95\x39\x3b\xfa\xc6\xc3\xcc\x43\xc7\x97\xa7\x49\xaf\x47\x22\x42\xd5\x20\x0e\x39\x08\xfe\xf8\x7a\xb8\xc5\x7c\x29\x8a\x96\x42\x71\xc1\xc7\xe4\x37\x7a\x74\x8b\x28\x5b\xd5\xb7\x3c\xd7\x4a\x52\x7e\x4f\xa5\x9c\x46\x91\xa0\x21\x2a\x83\x38\xe4\x20\xf8\xe8\x6b\x16\x85\xfb\xd7\x6b\xfa\x33\x64\x0b\x71\xbc\x1e\x10\x75\xc8\xb5\x30\xa1\x07\xa9\xd6\xba\x71\x2a\xcd\x67\xc8\x79\x2e\xb7\x21\x2a\x83\x38\x5f\x69\x94\x0b\xb0\xca\x3b\x95\x74\x66\x8d\x76\xb2\x64\xee\x0c\xbb\x9d\xa6\xe4\x3b\x63\x6c\x97\x53\xfe\x74\x7b\xb9\xfb\x31\x8f\x3e\x74\xd6\x13\xfa\x80\x08\x82\x83\xb8\xff\x5b\xf9\x7f\x04\xc1\x33\x47\xa8\x15\xfa\xdb\xb9\x44\x2a\x2b\x6e\x18\xee\x2a\xc4\x59\x8d\x46\x75\x19\xaa\xe8\xce\x0c\xbf\x11\x60\xbb\x4f\xfe\x91\xdf\xf5\xdf\x41\x70\x91\xac\x8d\xd7\x4f\x51\x9b\x17\x3a\x19\xd8\xfb\x6b\xee\x63\x14\x93\x68\xa9\xee\xf9\xa1\x34\xcb\x77\x13\x4b\x99\xaf\xe7\xd4\x4c\xfe\x0b\x5d\xde\x7a\xf3\xa8\x4d\x62\x94\xaa\x41\x6e\xf1\xe2\x6a\x77\xb7\x44\x1f\x7f\xde\xe2\x12\x37\x86\x7a\x67\x2e\x0b\x47\x2d\xe6\x78\xec\xff\xbe\x20\x38\x68\x70\x67\x04\xc1\x43\x1e\x97\xae\x5b\x1a\x5f\xc9\xd2\x9f\xb8\xa5\x92\xf7\xd6\xec\xf4\x64\x6a\x8c\x2f\xdd\x59\x4a\x96\x63\xc3\xe7\xfe\xbb\x26\xcf\xc1\x7f\x5f\x31\x75\x44\x45\x06\x4f\xd8\x0b\x4f\x6d\x4c\xfa\x5e\x32\x62\x4a\x7a\x68\xa2\x7d\x41\x30\x2c\x4e\x3b\x38\xf8\xe0\x01\xdf\xd6\xc2\xbf\xc7\xe6\x37\xc8\x99\x66\xbf\x69\x7c\x31\x39\xb2\xe2\xfb\xfb\xdf\x4f\x45\x6b\x38\x07\xb7\xde\x3e\x65\x42\xdb\xbf\xd1\xf5\x44\xe1\x19\xc3\x0a\x14\x04\x07\x1d\xfe\x9f\x20\xb8\x17\x52\x10\x9c\xf4\xc2\xa7\x8b\xce\xc1\x27\xae\x2e\x32\x27\xf9\xcd\xee\x1f\xf0\x4f\x49\xe5\x52\xff\x10\xbf\xac\xbf\xbd\xeb\x53\xd9\xa8\x57\x28\x79\x1e\x4b\xe7\x28\xb7\x90\xee\xc6\xf4\x91\x33\x4f\x5a\xe6\xd3\x7c\xa1\xd0\xd3\x6e\x15\xf2\x8f\x94\x6f\x78\xad\x5e\x32\x5c\xcd\x16\xd0\x7c\x22\xbd\x8a\x29\x36\x6f\x72\x1e\x87\xf5\x42\x0e\x82\x1b\x69\xaa\xaa\xdd\x69\x2e\x69\x70\xb5\xea\xe1\x71\xa7\x67\xbc\x24\xff\xbd\x85\x87\xcc\xe5\xe6\xa9\x78\x80\x73\x67\xa3\x75\x54\xef\xb9\x8c\x56\x03\xe9\xb0\xcd\xac\x97\xd9\xc7\x2e\xbe\xfd\x42\x67\xab\x75\x77\x77\xd1\xfa\x3d\x8a\x86\xa1\x93\x00\x3b\xd7\xc7\x66\xc2\x24\x12\xdf\x04\xf4\xe8\x73\x19\x2d\x72\x10\x3c\xc1\xec\x3a\x65\x94\x2d\xb7\xe5\x8b\x4b\x11\xe1\x4e\xba\xb9\x0f\xe8\x7c\x43\xa7\xee\x6b\xec\x04\x37\xfd\x61\x51\x4f\x78\x2e\xf2\xff\xe5\x4f\xf4\xff\x7f\xb4\xe1\x48\x87\x75\xad\x8a\x32\x97\xf5\x49\x8b\xe1\x38\xe6\xf8\xb9\xa4\xf6\xf5\x6a\xe1\x73\xdb\x92\x27\x33\xb3\x85\xfe\x01\x02\x6f\x46\xd1\x0e\xc8\xcf\x65\xb4\xc8\x41\x70\x7b\x83\x82\xdb\x2e\x17\x93\x50\xd5\xb6\x12\xab\x69\xe4\x84\x18\x5e\x3d\xa2\x2b\x7b\xc2\x5b\x39\x9a\x3d\x75\xc4\x4f\xc9\xb2\x1d\x7c\x2e\xa3\xad\x42\x3a\xec\x27\x15\xed\xcc\xa0\x93\x5a\x47\xa6\x9b\x35\x22\x5d\x54\x71\x5a\xf4\xcc\x22\x52\xe3\xb2\x4e\xf7\x02\x3a\x63\xb0\xb9\xb5\x94\x98\xce\x6d\x02\x05\xfa\xa7\x9e\x35\x81\x22\x33\x42\x2f\x40\xdd\x96\x22\x1a\x8a\x2e\x36\xf0\xd8\x89\xca\x0c\xbb\x7f\xda\xaa\xb3\xd8\xa1\x2e\x2b\xdb\xbb\x4f\xb0\x87\xda\x84\x98\x38\x80\x38\xf8\x04\x6a\x06\xfd\xc3\x1f\xa2\x83\x5a\x63\xcd\x78\xaf\x94\xb4\x80\x19\x3c\xa5\x74\x77\x2f\xcd\xa6\x75\x1c\x05\xc2\xd0\x43\xbf\x3b\x19\x51\x88\xba\x20\x0e\x3e\x81\xf2\x66\xff\xd4\x59\x9b\xe6\x85\xfb\xf2\x85\x40\xce\x81\x02\x56\xb8\xe3\xa6\x81\xd6\x97\x71\x52\x6b\x72\xd7\x9d\xac\x2b\x32\x6f\xa0\x1b\x16\x20\x0e\x3e\x81\xca\x0d\xb7\x91\x6d\xbf\x12\xd0\x71\x7d\xbc\x1e\xdd\xec\x85\xc3\xf8\x57\xe1\xf2\xb7\x83\x69\x18\xfc\x61\x97\x46\x3e\x0e\x47\x79\x42\x4f\xc0\x83\x38\x5f\x29\xc9\xff\xb9\x15\x6a\x2a\x45\xbb\x53\x5e\x3b\x8e\xbe\x59\xe6\xf7\x00\x3c\xb1\x4e\x6a\x47\x99\xee\x1c\xff\xf8\x6f\x4b\xbc\xbe\xbc\x3e\xf8\x5f\x26\x11\x41\x70\x10\xe7\x2b\x45\x8b\xe2\xe5\xfd\xea\xff\xf4\xe7\xff\xb8\xd6\x03\x75\xcd\xb3\x14\x90\xc4\xf2\x78\xd2\x7e\x73\xca\xc9\xce\xc4\x4e\xb6\x27\x70\xee\x8d\x48\x50\x9d\xf8\xe0\x0f\x17\x2e\x19\x69\x9e\x0a\xb4\x9a\x7d\x68\x83\x25\x10\x07\x57\xe0\x03\x4e\x43\xe3\xfa\xd6\x07\xb2\x28\xba\xae\x78\x76\x4f\x9d\xb0\x71\x9f\x5f\xe2\x95\x9d\x0a\x0a\x86\x57\x31\x55\x1d\x6f\x39\x43\x6f\x6d\x04\x71\x70\x05\x3e\x47\x97\xdb\x5c\x30\xea\xaa\xba\xb8\xf1\x0c\x75\x28\xeb\x65\x30\x76\x23\x77\x69\xd9\xcc\x86\xfe\x5f\x66\xd1\x1f\x46\x1f\x30\xa0\x35\x2a\x10\x07\x57\x00\x85\x10\xbd\xfa\xef\xc3\x2f\xbc\x6e\x27\x2b\x53\x77\xbc\x3c\xb8\xef\x5c\x14\x1a\xc4\x7e\xf4\x7d\xed\xa8\x2f\x8b\xc5\x46\x9f\x07\x7a\x5b\x15\x88\x83\x2b\x60\x60\x40\x3b\x10\xad\x58\x1f\xf9\x57\x4c\x18\x37\xbf\x21\x61\x4c\x9a\x01\xf7\xfa\x47\x57\xe5\x77\xaa\xec\x6c\x6b\x2f\x93\x0b\xda\x11\x73\x68\x10\xf7\x8f\x02\xff\xf7\x64\xf9\x1f\x0e\x80\x4e\x61\x67\x6e\x0a\xd6\x4b\x49\x80\xdf\xac\x3d\xb0\x6f\x52\x4a\x91\x10\x3a\x14\x16\x89\x3d\x6c\x53\x26\x9c\x32\x44\x38\x72\x43\x45\x44\x6c\x59\x1f\xda\x14\x0c\xc0\xc1\x1d\x78\x9c\x92\xcd\x39\xec\xa9\x3f\xf8\x94\x41\x2f\xc5\xaa\xb4\xa9\xfb\xab\xfc\x93\x70\x12\x99\xe7\x93\xe4\x8c\x2a\xf9\xbf\xc4\x6e\xa8\x23\xea\x82\x38\xb8\x03\x55\x0b\x36\x3d\x6d\xae\xae\x22\xb6\xb8\xe6\x5b\x14\xe9\x07\xfa\x29\xe2\x8f\x4c\x8b\x2d\xfa\xba\x4f\xde\xa5\x35\xd9\xa6\x7b\x43\x41\x35\x10\x07\x77\xa0\x4d\x39\xf0\xaf\xed\x05\xaa\xd4\x62\x0d\xdc\xbc\xfd\x4f\xd7\x44\x4b\xa2\x0a\x1e\x7f\x10\xfc\x40\x4a\x67\x5d\xd5\xa6\xac\x11\x0a\xed\x00\x0a\xe2\xe0\x0e\xd4\xfc\xb2\xe0\x15\xe7\x95\x42\x2f\xc5\x29\x6d\xa6\x71\x5b\x42\x8b\x29\x65\x2b\x76\x52\x50\x4e\x2f\xed\xc1\xc5\xb5\x39\x9e\x96\x46\x38\x00\xe2\x10\x0e\x78\x01\x82\xe0\xa0\xf9\xc4\x99\x1b\xc1\x5c\x4b\xab\xbd\x2e\x96\x8c\xe1\x7b\x59\x60\x03\xd3\x78\xb8\x5d\x69\xe8\xf6\x3a\xcb\x90\x0d\xbe\x24\x67\xf5\xcf\x05\xd7\x05\x68\xa7\x7d\x10\x07\x77\xc0\xf3\x2a\x99\xb7\xab\xa7\xd3\xee\xf5\x1f\xb9\x5e\x9e\x39\xc6\x8f\x57\x88\x2b\x7d\x52\x5d\xd7\xf0\xfc\x28\x87\xa4\xab\x0b\xc6\xa1\xcd\xbb\x40\x1c\xdc\x01\x9d\xec\xe2\x76\x3e\xf1\xd1\xa8\xb9\x90\x3e\xc7\x9e\x66\x4c\x4b\xa7\xa4\xfb\x5e\xaa\x95\x35\x9d\x5a\xd7\xd4\x98\x5a\x5b\x52\x96\x10\x75\x41\x1c\xdc\x01\x2f\x93\x05\x5c\x0e\x0a\xe3\xb7\x1d\x0d\x68\x5b\x71\x5a\x68\x9c\xc2\xf9\x0a\x4e\xf2\xde\x44\x3c\xb1\xef\xc6\xff\xf8\x91\x95\x29\x40\x0f\x55\x03\x38\xb8\x03\x2d\x5a\x4e\xc7\x7f\xfe\x0a\x92\xa7\xc7\xf8\x71\xf6\x65\xb0\xa4\x09\xd5\x62\x36\xa9\xdb\x45\xff\x76\xc2\xfe\x4e\x2e\x64\x32\xdc\x88\x70\x00\xc4\x41\x7d\x40\xe3\xbf\x1d\x00\x4d\xee\xce\x72\xa0\x98\xfd\x9b\xd6\xb3\xba\x3f\xac\x2e\x1f\x33\x5a\xa2\x6e\x0e\xdc\x8a\xec\x2c\x9e\xb0\x68\x3d\x54\x2c\xc3\x75\xe9\x78\xff\x9d\x17\x3a\x17\x80\x38\xb8\x03\x6d\x64\x1c\x62\xcb\x44\x2c\x1e\x1d\x7e\x7e\x75\x61\x7e\xf5\xea\x97\x3c\xa7\xa8\x65\x19\x92\x2f\xb1\x0f\xcf\xd2\x4b\xf7\x66\xbc\x81\xfe\x57\x00\x0e\xee\x80\xed\x10\x59\x0a\x6f\x84\xbd\x22\x17\x57\x28\xf9\x44\xe1\x8d\xc7\x82\x55\xc9\x46\xd4\x87\x71\x99\x5b\x2f\x42\x79\xe8\xa2\x9a\xa0\x7b\xcc\x20\x0e\xee\x80\xca\x55\x82\x14\xfc\x44\x49\xcb\x4f\x33\xa7\x78\x2e\xa6\xcf\x8e\xb3\x12\xe4\xda\x16\x83\x92\xfd\xd9\x7a\x05\xe8\x24\xc7\xb6\xd0\x10\x75\x41\x1c\xdc\x01\xe1\xd2\x94\x02\x0e\x6d\x5b\x57\x5e\xa1\x2a\x6e\x52\xf6\x23\x31\xa2\x27\xcb\xce\x13\x25\x65\x0c\xee\x05\x85\x8b\xde\x5e\x99\x91\x08\x07\x40\x1c\xd4\x07\x00\x41\x70\xd0\x4c\xfb\x2c\x07\x3e\x34\xb9\x7e\x6f\x12\xbd\xa7\xfe\x8d\x75\xec\x8a\xf8\x29\x85\xa3\xc6\x8d\x07\x16\xa6\x6e\xee\x77\x1d\x89\x35\xde\x13\xe8\x7f\x84\xfe\xaf\x20\x0e\xee\x80\xcb\x58\x8e\x20\xfa\x93\x8b\x0e\x28\x56\x33\x02\x79\x15\xa5\x38\x6b\x14\xaf\x0c\xa6\x35\xbb\xc2\xc7\x34\x38\xd5\x0c\xb3\x32\x37\x10\x75\x41\x1c\x52\x10\xbc\xd1\xd9\x7f\xf5\x56\xcb\xd4\x71\x15\x9f\xfe\x8f\x10\x3b\xfe\xba\xbe\x81\x91\x8e\x2b\xfc\x0a\xda\x29\xbb\xca\xa1\x57\x5f\x40\xcf\x1c\x82\x38\xb8\x03\x22\x18\x2f\xdb\xa3\xb9\x98\x5e\x0e\xb8\x4b\x54\x11\x25\x2d\xb9\xdf\xb5\xc0\x70\xbc\x24\x93\xb4\x62\x26\xd5\xa5\xe3\xaf\x8f\x67\x8e\xa8\x0b\xe2\xe0\x0e\x14\x3a\x69\x72\x62\xdf\x9d\x93\x7c\x4b\x53\xf1\x80\xd8\xa6\x5e\x01\x8d\x19\x05\x2b\xe0\x74\xd8\xb4\xff\x63\x34\x63\xb6\xb4\xae\x01\xc2\x01\x10\x07\xf5\x81\xf0\xff\x76\x00\x74\xd9\x73\x96\x03\x7d\x37\x54\x3f\x05\x57\xa8\xc8\x64\x92\xd7\x6b\xd0\xcb\xf8\x0e\xcc\x15\x09\x76\xce\x12\xcc\x8f\x1e\xb8\x25\x34\x59\xc4\x18\x6e\x22\xc6\x0e\xe2\x90\x36\x03\x6a\x8e\xaa\xc6\x3f\x51\x29\x23\x0c\x20\xd2\x30\xe5\xec\xd4\xed\xc4\x7b\x20\xdf\x21\x2a\x1b\x6e\x93\xaa\xfc\x5d\xee\x34\xa4\x1b\xda\x0c\x08\xc0\xc1\x1d\x20\x6d\x78\xf9\x67\x3d\xf6\x04\x2f\xcd\xa0\x4e\x96\xe5\xe7\xb5\xe7\xd3\xca\x12\xf7\xcb\xb4\x2e\x9c\xb2\xbc\xae\x1f\x57\xff\x3d\x06\x6d\x3a\x08\xe2\xe0\x0e\x54\x2b\x3f\xd4\x49\x93\xb8\x7d\xe7\x7d\xc3\x22\x3b\xc9\x42\xfb\xef\xb4\xab\xba\x02\x32\xfb\x37\x3d\xf7\x9b\x2c\x12\x87\x64\x6a\xa1\x37\x8f\x80\x38\xb8\x03\x3d\x44\x4b\xaa\xc4\x11\x95\xf2\x51\xae\x7a\xa8\xfd\x45\x0d\xf4\x7c\xb1\xdf\x85\xee\x2f\x63\x37\x9e\x1a\x91\x3e\x13\x5c\xc3\xab\x42\x38\x00\xe2\xa0\x3e\x00\x08\x82\x83\xae\x41\xcf\x9c\x0f\xc4\x57\x6e\x53\x84\xa6\x06\x3a\xc5\x64\x13\x70\xc9\x11\x5e\x43\xe3\xfc\xa2\xb9\xef\x13\x7e\x21\x55\x6f\xeb\x55\x6b\xf9\x77\xe8\x0d\x39\x20\x0e\xee\x40\xbd\xa2\xb0\xbb\x2e\x91\x9d\x54\x9e\x04\x4b\xb5\x99\x6e\x6b\x35\x23\x26\x9b\x1a\x67\x79\xc5\xad\x5d\xfc\xf4\xd2\x4f\x2e\x66\xd0\x9b\xf7\x41\x1c\xd2\xdb\x36\x17\xb8\xdd\xf9\x22\xc2\xd1\xdb\xfe\xac\xcb\x2c\x12\x1d\x39\xff\x16\x49\x2e\x2b\x2c\xf8\x7a\x2b\x1d\x95\xbb\x82\x4c\x22\xa4\x06\x51\x17\xc4\xc1\x1d\xd8\xb9\xcf\x1b\x1b\x95\xdb\x74\x92\xa3\x68\xbc\xf8\xe8\x82\x45\xa7\x8e\x60\xa7\x93\x95\xb5\xcc\x85\x45\x83\x12\xf5\xed\xf4\x1c\xe8\x21\x49\x10\x07\x77\xe0\x37\x8a\xee\xbe\x12\xea\x24\x1a\xbd\xe6\xb3\xa7\xcc\xdb\xcc\x1a\x25\x31\x1f\x24\x31\x55\x77\x51\x26\x7e\x93\x39\xee\x46\xf8\xd2\x23\x1c\x00\x71\x50\x1f\xa8\x02\x04\xc1\x41\xcb\x8a\xff\x04\xc1\xbd\x90\x83\xe0\xf9\xdb\xf7\xfa\xd4\xfa\xdb\xba\x30\xfa\x50\xf7\x5f\xc6\xce\x2b\x93\xd7\xbb\x88\x44\xa4\x24\x53\x49\xca\x84\xc8\x64\x89\xa9\x8c\x9c\xcb\xca\xc9\x34\xd2\x61\x25\xac\x1e\x19\x24\x19\xf2\xb4\x26\x95\xa9\x93\x5b\x2e\xeb\x76\xdc\xc6\x72\x53\x78\xcd\x97\x66\xc8\x70\x65\x6a\xad\x83\x99\x76\xfe\x5c\xd6\x89\x90\x83\xe0\x9f\x7d\xeb\xdb\xca\xc7\x89\x49\xba\x5b\x62\x96\x5c\x7b\x6c\x77\xb7\xb9\x4b\xdf\x6c\x6e\x35\x3f\x89\x6d\xc7\xd2\x73\xdc\xb0\x9a\x3b\x97\xd1\x92\x20\xdd\x68\x7b\x85\xf2\xe0\xad\xc4\x0f\xd9\xb5\x83\x05\x55\x89\x7b\x33\x22\x15\x0c\x4e\xd4\x9d\xac\xba\x3e\xef\xde\xab\x0e\x12\x4a\xba\x68\xb3\x9f\xcb\x68\x91\x83\xe0\x96\x04\x89\x2a\x96\x7f\xa3\x1a\x89\x2e\xf2\x28\xff\xbe\xbf\x9b\xb0\xe6\xff\x13\x75\xef\x21\xb5\x6b\xe7\xee\xc3\xea\x9b\x9d\xbe\x96\xe7\x32\x5a\x51\xa4\xc3\x62\x7d\x14\x92\x21\x9a\x24\x0c\x5c\x94\xe1\x6e\x3b\x09\xe2\x21\x2e\xfd\x19\x74\x3d\x63\xc6\x8e\x9f\xc6\xea\xcf\x35\xa7\xb0\x5b\x2d\xe7\x32\x5a\xe4\x20\xb8\xa1\x0e\x6a\xe5\xc6\xa1\xe1\x65\x16\x4a\x6f\xd1\xea\x93\x99\xec\x75\x7c\x4e\xd4\xc0\x9e\x85\xfc\xbf\xf9\x71\xb6\x8e\x2b\x78\x41\xe7\x32\x5a\x7b\xa4\xc3\x5e\xb4\xe6\x23\xc3\x58\x29\x2d\xb9\x8b\x9a\xdb\x5d\x46\x5f\xdb\xd2\x25\x66\x96\x5f\x12\x57\xfb\xcd\xb4\xdd\x3a\x52\xc6\x6a\x3d\xf6\xdc\xd6\x00\x41\xff\xd4\xb3\x1a\x7d\x06\xeb\x07\x54\x2c\x6d\xa5\xac\xe2\xe2\xc5\x1b\x4e\xd9\x83\x05\x8a\xea\x47\x2b\x2b\x49\x2e\xe1\x24\xec\x28\x47\xbf\x57\x85\xa1\x57\x34\x80\x38\x78\xa3\xaf\x95\x2b\x64\xba\x34\x73\x54\x28\x1d\x45\x23\x57\x18\xce\xed\xfa\x6d\xa4\x20\xc3\xa2\x7e\xe2\x04\x85\x4f\xc5\x60\xd3\xc0\x83\x10\x51\x17\xc4\xc1\x1b\x7d\x92\x56\x4e\x7b\x3c\xf1\x7c\x1b\xcb\xe2\x95\x2e\xc3\x2a\xfc\x95\x5d\xfe\xd4\xec\x4b\x5c\xe1\xf4\x0f\x76\x71\x8d\x8b\x68\x92\xa0\x9d\x0b\x40\x1c\xbc\xd1\x67\xdf\xe0\x74\xd4\x66\x1c\xe3\xf9\xde\x9c\xe3\x7d\x22\x44\xfa\x3d\x6d\xaf\x36\x22\xd4\xba\x76\x2d\xa9\x0c\x65\x4f\x53\x83\x12\x7a\x1d\x12\x88\x83\x37\x7a\xbf\xec\x6d\x96\xf6\xc1\x2a\x41\x31\xf3\x9c\xa2\x9d\x40\xe3\xd2\x28\x22\xd3\xd6\x4b\xdd\x49\xb9\xd9\x81\x64\x46\x29\xe8\x9c\x85\x88\x46\x0f\xe2\xa0\x93\x3d\x20\x08\x0e\x6a\x9b\x67\x39\x20\x62\x58\x9a\x7b\x62\x58\xf5\xca\x49\xe0\x76\x42\x59\x5a\x48\x9c\x53\x55\x0b\xe6\x91\x3b\x3a\x9d\x23\xc1\x0b\x4f\x3a\xbe\x74\xe8\x46\x3a\x88\x83\x3b\xa0\x16\xa1\xeb\xae\x89\xb9\x9e\x78\xb7\x2f\xbe\x34\xf4\x9e\x83\xae\x41\x8d\x2d\x67\x60\xe9\x76\x78\x74\xa5\xb8\x42\xef\xec\x5f\x68\x5d\x15\xc4\xc1\x1d\x40\xaf\x4f\xbe\x4d\x10\x1d\xdb\xb0\x92\xda\x65\xd1\xf7\xc3\x39\x45\xe2\xa7\xee\xd6\x3d\x73\x7f\x67\xc1\xf5\x3f\xfb\x83\x45\xba\xd3\x88\xba\x20\x0e\xee\x00\x6f\xc8\x51\x26\xde\xb7\x07\x9e\xcf\x44\x9e\x2e\x90\xa8\x62\x09\x75\x6d\xb2\x96\x39\x12\x06\x87\x87\x71\x5e\x56\xe6\xfd\x8e\x05\xbd\x71\x12\xc4\xc1\x1d\x40\xf3\x77\x7e\x5a\xf6\xa7\xab\x5f\x7d\x21\x04\xc5\x77\x5d\x6a\x71\x46\xf9\x46\x44\xdd\x85\x3d\x25\xd5\xc8\x97\x5f\x8c\x2f\x3a\xf6\x21\x1c\x00\x71\xd0\xc9\x7e\xfa\xbf\x1d\x00\x9d\xc3\xce\x72\x60\xb9\xa1\x9d\x16\xab\xd3\xa8\x99\x91\xe4\x05\x91\xee\x11\x99\x66\xab\x25\xdd\xbb\xa9\x40\x9e\x2a\xcb\xd7\xbc\xe1\x97\x27\xf5\xa1\x1d\x70\x41\x1c\xdc\x01\x8e\x5b\xa2\x1f\xe7\xfb\x35\x79\x59\x93\x78\x0c\x3e\xf6\xcd\xca\x4d\xf3\xbc\xc3\x6c\xe4\x77\x7e\x79\xc7\xbb\xce\x8a\xe3\xfb\x1d\x68\x97\x75\x10\x07\x77\x60\x87\x62\x81\x8f\x9e\x62\xcf\xf0\xc3\x42\xc5\xe8\x05\x6c\x22\x23\x9a\x47\x5d\x89\xd4\xdc\x72\x06\x3c\x24\x03\xb6\x68\x05\xc4\x57\xa0\x89\x19\x80\x83\x3b\xf0\xfc\xee\xd5\xfa\x74\x8e\x86\x3d\x29\xa9\x44\x82\xcc\x25\xc1\x18\xd4\xcc\xdb\x58\x62\x2b\xd5\x6b\xaf\xef\xe6\x16\x5a\xde\xeb\x9f\x41\xd4\x05\x71\x70\x07\x54\xdd\xf0\x71\xa7\x31\x94\xf3\x47\x8c\x39\x26\xb0\x7b\x9f\x3d\x23\xb2\xaa\xb6\x8c\x3d\x35\xc0\xe4\x19\xb4\xd1\xe1\x43\x4f\x4b\x84\x76\x7f\x04\x70\x50\x1f\x00\x04\xc1\x41\x13\x8a\x33\x77\x00\x7d\x16\xd1\xeb\x8b\x4e\x76\x74\x1c\x39\x78\xd8\x44\x86\x5d\x73\x71\x2d\x55\x9a\xdb\xa3\xe2\x6d\xf3\x95\xde\x01\xb4\x85\x40\x68\xf7\x16\x10\x87\xf4\x04\xb0\x53\x7c\xd7\xbd\xaa\x91\xb5\xa1\x39\xb6\x85\x3c\xf2\x85\x8f\x49\x77\xbc\x12\x46\xa5\x34\x5d\x7f\xf0\x86\x61\x75\xf9\x3f\x85\x5e\x0b\x08\xe2\xe0\x0e\x28\x17\x69\x79\xb4\x4d\x16\x4e\xcc\x66\xaa\x5a\x8d\x29\x5d\x69\x1d\x08\x13\x12\x36\x11\x17\x7d\x99\xd9\x80\xb9\x1f\x5d\x27\x1f\x8f\xa8\x0b\xe2\xe0\x0e\x6c\x14\x56\xf3\xb5\xe6\x76\x77\x92\xd4\x60\x8e\xce\x84\x0a\xfc\x9a\x7e\x60\xa0\xb3\x7b\x34\x70\xd7\x05\xcf\xf6\x33\xcb\x03\x1c\x09\x44\x5d\x10\x07\x77\xa0\xab\x4c\x44\xed\x12\xa3\x98\xad\x9e\x3a\x36\xdb\x9b\x9b\x2b\xaa\xa3\x7c\xd6\x9c\xa3\x4b\x41\xe3\x3b\x62\xc1\xf1\x4f\xdb\xc2\xb8\x10\x0e\x80\x38\xa8\x0f\x90\xfc\x77\xf8\x0f\x34\xbb\x3b\xcb\x01\xbb\xd5\x2c\x51\x25\xff\x47\xbb\x1e\x95\x3f\x45\xa6\x3d\x07\x3c\xd6\x1f\xcd\x1f\x8e\xd8\xec\xdf\xbd\x74\x87\x69\x63\x12\xc5\x1c\x5a\xb4\x07\x71\x70\x07\xf0\x6a\xfb\x95\x9e\x63\x5f\x28\x2c\x14\x3d\x79\xcf\x54\x28\x6c\xf9\xe9\x66\xf5\x15\x1c\x49\x8a\xee\x3d\xb1\x36\x6c\xdc\xfb\xb7\xa1\x73\x0c\x88\x83\x3b\xa0\x1b\x7d\xc5\x6d\xef\x4f\x90\xbd\x12\x8d\xbd\xc5\xeb\x45\x57\x46\xcf\xa1\xbe\x80\x18\x9b\xbe\x92\x69\x2c\x5b\x1b\x3d\xaf\x26\x68\xd7\x5a\x10\x07\x77\xa0\xcb\xa9\xd9\x66\x7c\x20\xec\xf0\xd8\xd7\x74\x57\x71\x69\x9d\x7b\xe4\x5b\xd8\x3d\x67\x7e\xf3\xee\x60\x25\x6e\x31\x81\x6a\x6a\xe8\x35\x86\x20\x0e\xee\x00\x31\x9e\x9f\xeb\x9e\x56\x47\xe4\x66\xb7\xde\x8f\x24\xc2\xde\x03\x2e\xb4\x7d\xef\xb2\x6c\x0b\x67\xeb\x82\x83\x62\xac\xc3\x11\x2b\x84\x03\x20\x0e\xea\x03\x80\x20\x38\x68\xaa\x7d\x96\x03\x2e\x84\xf1\xb3\xf5\x89\xd8\xf1\x65\x69\x01\xc2\xb7\x7a\xf0\x3b\xd1\xd3\x3c\xb0\x4d\xea\xd8\x28\xd6\xba\x43\x7e\xd7\x2e\x0b\x1c\x42\x8b\x75\x00\x0e\xee\xc0\x49\x4a\x74\x47\x2e\x16\x69\xa3\x56\x6c\xe1\xfb\x92\x39\x73\x7a\xef\xe3\xb8\x21\x47\x7c\x29\xd5\xa1\xdb\x18\x5a\x82\x18\x39\x0e\x88\xba\x20\x0e\xee\x00\xfb\x80\x72\x06\xc5\x73\x9e\x50\x33\xc6\x0f\xfc\xdd\x56\x89\x23\xb1\xac\xed\x54\x8c\xcd\xae\xe5\xc4\x56\xcb\x66\x66\xb9\xac\x8f\x11\x75\x41\x1c\xd2\xc5\x7f\x85\x58\xd0\xdb\xab\x49\x38\xd3\x22\x89\x4f\xb2\x14\x9f\x5e\xa5\xae\xd0\x6a\xb6\x8b\xbe\x77\xa9\x53\x6e\x39\x7e\x62\x90\x03\x5a\x04\x04\x71\x70\x07\x9c\xa7\x3b\xd2\xba\x2f\xb7\x27\xb2\x06\x93\xcc\xba\x51\x47\x8c\xdd\x5d\x7b\xbc\x71\x60\x77\xf8\x6b\x22\xa0\xaa\x0e\xb5\xbf\x24\x1a\xe1\x00\x88\x83\xfa\x80\xe8\x7f\x3b\x00\xba\xee\x39\xcb\x01\xa3\xee\x42\x9e\x78\x76\xa2\x8e\x68\x1b\xe3\xa2\xcb\x62\x5c\x71\xbd\xcd\xc1\xb7\x8d\x71\xb0\xb3\x97\x52\xb4\x65\xd1\x6a\x95\xa0\x07\x44\x41\x1c\xdc\x81\x63\x9c\xa3\xd5\xe7\x4a\xd7\x1f\x34\xeb\x3f\x17\x5d\x8a\x4b\x0a\x8e\xd9\x4d\xbb\x73\x57\x8f\xd7\x10\xcd\x42\x04\x35\x51\x34\xe5\x0e\xa2\x2e\x88\x83\x3b\x60\x14\x44\x3e\x6c\xfc\x20\xaf\x73\xe4\x66\x7b\xff\x9f\xc5\xb8\x42\xab\xf8\xd4\x2e\xe5\x51\x9c\x7b\x37\x1a\xa4\xed\x78\x96\xa7\xa0\x9d\xbc\x40\x1c\xdc\x01\x3f\x35\xb1\x1d\x19\x0e\xbd\xed\xe1\xf4\xf8\xd2\xdd\xb6\xb4\xbd\xc2\xc0\x84\x98\x1f\x21\x3e\x4d\xb8\x28\x11\xfc\x79\x99\xd1\x46\x88\xba\x20\x0e\xee\xc0\xec\xf1\x5f\xfb\xed\x62\x7e\xcc\x4b\x7a\x77\x1f\x7c\xd3\xcb\xee\x57\x14\x36\x27\x1d\x8a\xe3\xcb\xe0\xe7\x73\xa6\x3b\x51\xa3\x51\x40\x38\x00\xe2\xa0\x3e\x00\x08\x82\x83\x2e\x42\xcf\x72\x40\x7f\xe2\x53\xe1\x9d\x58\xd9\xa3\x65\xf7\x5f\xd2\x1a\xca\xda\x45\xa6\x4f\x6c\x99\x49\x59\x54\x1b\x84\x78\x23\xb7\xde\x5f\xa9\xfd\x81\x18\x3b\x88\x83\x3b\xa0\x69\xfa\xf9\x57\x69\xa5\x97\x39\xf6\x8c\xe8\xcf\x56\x75\xac\x42\x46\xfc\x89\x77\xaf\xd4\xf1\xb3\x43\xca\x58\x18\x9e\x55\x5e\xb0\x47\xd4\x05\x71\x70\x07\x8e\x7a\x94\x7b\x30\x8b\xf9\xb4\x1f\xad\x51\xad\xef\x1b\x51\xb9\x6d\xcb\xba\x7e\xd9\x30\xc7\x20\xb9\xd6\x88\x52\x3a\x28\x60\x0d\xbd\xca\x15\xc4\xc1\x1d\xb0\x2b\x90\x89\x36\xc3\xe7\xc0\x16\xb2\x36\x54\x0f\x49\x0c\xe9\xa5\x7f\x68\x33\xb4\x4f\x4a\xae\x51\xeb\xf8\x07\x9f\x40\x4b\x06\x7a\xe5\x24\x88\x83\x3b\x40\xf8\x76\xde\x3f\x2a\xc2\x0a\xe5\xe8\x51\x33\xef\xd0\x90\xd7\xa3\x83\xb5\x02\x43\x41\x54\x69\xc1\xdb\x81\xa3\x87\x0d\xa5\x76\x24\x08\x07\x40\x1c\xd4\x07\xec\x01\x41\x70\x50\x60\xf0\x9f\x20\xb8\x17\x72\x10\xbc\xcc\x5f\x37\xad\x38\x54\x1e\x5f\xc3\xd2\xda\x49\xf3\x9e\x8d\xe7\xa8\x1d\xde\xcc\xef\x44\x5e\xfe\x3d\x74\x3b\xb9\x21\x36\x25\xa7\x73\x5b\xc3\x00\x1d\xe8\x2c\x4f\xd7\xab\x5a\xe3\xfa\xf7\x71\x55\xe4\xd1\x25\xb6\x58\xba\x2a\xad\x37\x7e\x79\x67\xdf\x8f\x31\x72\x5e\x6a\x7b\x16\xfa\xb5\x88\xf5\x00\xf1\xfb\x80\x38\xb8\xa7\xbf\x7f\x75\x5e\x4b\x51\xd8\x3a\x2a\x74\x5c\xe8\xbb\x7b\xbf\x91\x7c\x3e\x1d\xfd\x5e\x08\x6e\x86\x74\xf0\xa4\x7f\xff\xc7\x04\xdd\x45\x44\x5d\x10\x07\xf7\x34\x47\x9b\x7c\xe9\xa1\xc7\x57\x71\xfc\xaa\x21\x13\xe5\x86\x1d\x22\x37\x8e\x9e\xb8\x0b\xa5\x14\xd7\xb2\x7c\x24\xc6\x5e\x29\x74\x42\xe7\x41\x10\x07\xf7\x14\xfd\xe1\x70\xdc\x77\x32\x4a\x6a\xd7\x5a\x92\xdf\x09\xf9\x45\x8a\xd9\xd2\x82\x26\x1b\x1a\x25\x34\xac\x9a\xdd\x45\x79\x31\x1a\xd0\x2e\x4e\x20\x0e\xee\xa9\xa2\x97\x45\xe4\xc3\xe3\xbf\xb9\x42\xd9\x5e\xc9\x43\xf6\xee\xd5\x0b\xfa\x56\xa1\x5a\x78\x23\x6f\x2c\x0c\x75\xb4\x86\x15\x72\xd3\x10\x9e\x82\x38\xa8\x57\x01\x82\xe0\xa0\x48\xf0\xd9\x41\xf0\x37\x91\x1b\xe1\x15\x85\x83\xf7\x9e\xb8\x50\x11\xec\x1d\x93\x92\x16\x7d\x24\xeb\xf4\x3c\x3a\x22\xfc\xd8\x7c\x58\x26\xfa\x0e\x2d\x01\x11\xaa\x06\x71\xc8\x41\xf0\xf6\xa0\x04\x5e\x8c\x54\x27\x86\x8b\x98\x1a\x27\xf4\xa2\x5e\xd2\xda\xc7\xf4\x4d\x1f\xc7\x7a\x9f\x7d\x6d\x75\xe1\x64\x1f\x20\x7c\x81\xa8\x0c\xe2\x90\x83\xe0\x0b\x57\xcb\x9f\x4e\x3d\x34\xa2\x35\xb1\x92\x12\x4c\xc4\x2f\x7b\x15\x20\x2e\x20\x70\x6d\x34\xb6\xeb\xd3\x1f\x9d\xde\x40\x13\x01\x11\x44\x65\x10\x87\x5c\x99\x1a\xbb\x5a\xb4\x95\x83\x15\xad\x72\x8c\x13\x2d\xf8\x41\x3e\xad\xc5\xe6\x17\x5a\xbc\x56\xb9\xfa\xb0\x39\x54\x4a\x7d\x17\x0c\x6c\x2f\x44\xac\x9b\x56\x31\x79\xcc\x31\x6b\xf7\x06\x61\x4f\x81\xa8\xd5\xf3\x4e\x5a\xc5\xc6\x2d\xa6\x2f\x07\xe8\xd4\x5e\x5e\x23\x17\xaf\x33\x5b\x70\xfd\x7b\x55\xd4\x00\xdd\xe8\x96\xb7\xef\xfd\x2b\x98\x33\xfe\xb2\xcd\xc3\x98\xaf\x2c\xa5\x67\x7b\x89\xf2\x2d\x54\x22\x2d\xfb\x03\x65\x86\xf1\x6e\xfe\x0b\xc5\x3f\x09\x92\xdf\x68\x19\x20\x2e\x26\x98\x65\x7f\xf1\x59\xfc\xaa\xf1\xe5\xa2\x53\x32\xe6\x2d\x85\x71\xcc\xa1\xa5\x23\xbd\xb6\xfd\xff\x7d\xb1\x6e\xd0\xe0\xce\x88\x75\x3b\x7e\xf3\x50\x1b\xfb\x38\xf9\xe6\xb0\xf4\x4b\x88\xf9\x47\xbe\xc5\xd4\xc9\x02\xd1\xcf\xa7\xbc\x45\x7d\x6c\x81\x87\x68\xaf\x3e\xff\xfe\x17\x7a\xb9\xc2\xfb\xd0\xe8\xb7\x3c\xcf\x1a\xf3\x69\xff\x16\x5e\x97\xb9\xad\x47\x0a\x73\x43\x51\x6c\x92\x1c\x9a\xeb\x9d\x7b\xd8\x4f\x8d\xfe\x85\x5a\x45\x9b\x5f\x65\xf2\x0e\x98\xa9\x28\x0b\x26\x8a\x5f\x0e\xd1\x2e\xa6\x24\x66\x73\x45\xf1\x9f\xd6\x72\xcc\x57\xb8\x6c\xc7\xf9\x18\x8a\x75\x83\x0e\xff\x4f\xac\xbb\x09\x79\x7f\xef\x44\xda\xba\x8b\x2d\x55\x77\xdf\x98\x44\x16\x5c\xca\x24\xb8\x8e\x2a\x27\x83\x8f\x7e\xb7\x24\xfa\x49\x2e\xf5\x4e\x15\xc5\x22\xf6\x79\x2c\x84\x4b\x22\xc7\xba\xed\xcb\x87\xb6\x97\x9a\xc5\x45\x62\xc5\x54\x37\x14\xb8\x2f\xf5\x7b\xbd\x1c\x6e\x71\x0c\xcc\xd8\xd8\x52\x89\x3e\x9e\x2e\xfd\x8e\x77\x1e\x87\x6d\x42\x8e\x75\x27\xfa\x7f\xaa\x1c\xf0\x95\x79\xf0\xcc\x23\x36\x1c\x87\xd8\xd4\x76\x7b\xa5\xee\xe0\xb5\xbb\x12\x5f\x63\x68\x8f\xfa\xbe\x40\x9d\xf3\xb9\x8c\x16\x39\xd6\xfd\xe6\xce\x78\x57\xc2\xe6\xec\x65\x89\x35\xe6\x19\xfb\x1b\xab\x12\x78\x8b\x11\x63\x93\x15\x24\xe8\xf7\x79\x5e\x08\xdc\x4e\x31\x24\x3a\x97\xd1\x22\xc7\xba\x2d\x57\x06\x33\x08\x7e\x49\x1d\x28\xcf\xea\x3d\x0c\x11\x4e\x60\x24\x2c\x3e\x1c\x35\xd1\x2b\xe9\xc3\xb8\xce\x14\x94\xd5\xbe\x30\x7b\x2e\xa3\x45\x8e\x75\x3b\x12\x44\xe6\x19\xa0\x33\x67\x38\x1e\xa0\x04\x4b\xa9\x0e\x71\x16\xb4\x6b\x05\xb6\x24\x9b\x44\x3f\xa4\xd7\x6f\xc6\xa2\xa7\x3c\x87\x09\x42\xb0\x74\x13\x72\xac\xfb\x19\x63\x89\xd8\xc3\xbf\xaf\x54\x72\x96\x46\x76\xba\x0d\x69\x31\x4c\x37\x4e\x3d\x8a\xbe\x6a\x31\x66\xad\x6c\x09\x8a\x1f\x71\x9d\xcb\xeb\x8a\x25\x91\x63\xdd\x63\x25\xd7\x86\xcb\x3f\x0b\x34\x7b\x99\x35\x5e\x68\x4d\xf0\xbe\xb7\xc6\x3b\xbc\xb0\xf6\xa8\xec\x49\x5a\x12\xa1\x52\xeb\xab\x4d\xff\x73\x9b\x0e\x81\xfe\xa9\x67\x4d\x87\xf0\x2a\xfc\xb0\x8d\xd4\x7e\x51\x12\x77\x2d\x2d\x5a\x7e\xa1\x7f\x46\x15\x6b\xee\x5c\x49\x52\xfb\xb7\xe8\x53\xbb\x14\xbf\x7c\x38\xb4\x24\x02\xe2\xe0\xd3\xa1\x06\xce\xa6\xc0\x5d\x0f\xfb\x67\xbb\x1c\xed\x9c\xdb\xda\xd1\x78\x5e\xf7\xa2\x9e\xe1\x3d\x46\xbd\x19\x3a\xf0\x78\xc2\x2d\x8e\xfe\x39\xb4\xff\x0a\x80\x83\x4f\x87\x16\x42\x7f\x47\x79\x39\xfe\xf8\xb9\xc4\xf7\xd6\x59\xd7\xc3\x84\x89\x83\xfb\xe6\xfe\x46\xc2\x03\x3c\x57\x4d\x35\xb4\x6f\x26\x3f\xa1\x97\x2e\x81\x38\xf8\x74\xe8\x93\xc7\x92\xc5\x3a\xe1\xe7\xa7\x04\x5e\x8e\xc6\x59\x34\x1c\x62\x79\x07\xbf\xb5\x34\x8b\xaa\x35\x54\xbb\x30\x97\x6e\xb2\x62\x59\x20\xea\x82\x38\xf8\xe7\x6d\xed\x28\x42\xd9\x09\xcf\x7d\xfb\xd9\xb1\xf6\xa5\x6e\x5e\x7a\xe9\x75\x9b\x86\xe5\xa4\x19\xe6\x21\xab\x70\x1a\xd3\xe4\xdd\x17\x0c\x88\x58\x37\x88\xfb\x7f\x7e\x37\x2f\xef\x57\xff\xa7\x3f\xff\x57\x84\x07\xd0\x35\xcf\x52\x40\x36\x20\xfe\xd7\xb7\x39\x4a\x0d\x4c\x7c\xf9\xfe\x4f\xae\xd6\x37\x14\xa3\xbc\x88\xb9\x86\x31\xbd\x9f\xff\x18\xae\x13\xc7\x9c\xc9\x85\xb6\xb4\x01\x70\x70\x05\xac\x0c\x5c\x58\x33\xd4\x1c\x9b\xdb\xbb\x94\x56\xe3\xaa\x6d\x1f\x75\x38\x28\x37\xc5\x3b\x48\x62\x3b\xb0\x63\xf2\xaf\xde\xa4\xca\x40\xd4\x05\x71\xf0\xaf\x74\xa6\x17\xe5\x8a\x0b\xff\x69\x22\x8d\xc7\x40\x54\x20\x0b\xc3\x54\x6e\x93\x03\xbf\xf1\xd3\x24\xdd\x32\xc6\x1b\xce\x83\x4d\x44\x6e\xd0\x13\x03\x00\x0e\xae\x00\x6d\x64\x49\xa7\x32\xee\xb2\xeb\x60\xe0\xcd\xcd\x07\x86\xb2\xf6\x42\x9f\x12\x8a\xd6\xfa\xed\x2f\x50\xfc\x65\x30\xba\x29\xbe\x06\xdd\x81\x02\x71\xf0\xcf\xab\x30\xcd\x6a\x17\x2c\x7e\xb1\x37\x59\xfa\xe7\xbc\x69\x36\x4b\xc5\x2a\x97\xd6\xbd\x97\xee\x84\xee\x0c\x24\x63\xed\x81\x23\xb7\xcd\x11\x33\x62\x10\xf7\x8f\x02\xff\xf7\x64\xf9\x1f\x0e\x80\x4e\x61\x67\x39\x60\x13\x9c\xa9\xdb\x19\x7a\xed\x5b\x2a\xdf\x83\x27\xed\x9f\xc3\xfb\xf4\x9e\xb0\x8d\xb9\x1d\x6b\x0c\x4a\x61\x94\x86\xcb\x4f\x68\x5d\x45\x8c\x1d\xc4\xc1\x1d\x58\x2e\x78\xda\x96\x1c\xf1\x49\xbb\x14\xe7\x81\x5d\x21\x79\xbf\x62\x9a\x28\x7f\x61\xc8\xe9\xf5\xce\xf2\x9f\x29\x54\x21\x9f\x13\xa9\xa1\x3b\x45\x00\x0e\xfe\x9d\x52\xa6\x76\xa7\x8f\xf4\xcb\x51\xde\x74\x20\x21\x50\x1f\x32\x36\x53\x7a\x5b\x77\x74\x85\x25\x6f\xe9\x69\x1c\x6a\xdf\xba\x71\xd1\x03\x44\x5d\x10\x07\x77\x20\x70\x66\xe4\xe6\x85\x20\xdb\x54\x97\x9b\x29\x09\x85\x76\xf4\xa4\x93\xf6\x43\x1f\xab\xf4\xdf\x5c\x26\xb4\x54\x8b\x4d\x28\x59\xa4\x84\xb6\x36\x01\x70\xf0\xcf\xcb\xd6\x25\xa2\x5f\x9b\xf0\xcd\x32\x94\x55\x2c\x8d\x5f\xa0\x70\xee\x61\xcf\xe1\xba\xf8\xba\x77\xea\x2a\xba\x96\xab\x90\x6f\xa7\x23\xf4\x28\x3f\x80\x43\x38\xd0\x04\x88\x75\x83\xe6\x13\x67\x39\x70\xf8\x88\x36\x67\xa9\xe0\x79\x72\x57\xe8\x37\xbd\x8c\xb5\xa2\x5f\x72\x8a\x5d\xd5\xd7\x77\xff\x0e\x58\x3b\x4a\x50\x77\x31\x4a\x40\xb1\x28\x10\x07\x77\x60\xf7\x85\x5b\xaa\xcf\x63\x0a\xd9\x48\x79\x1c\xe6\x17\xb2\x0a\x43\x49\x36\x3a\xf4\x3a\xb3\x8f\x08\x13\xd3\xdc\x8e\xa7\x5e\xd8\x42\x77\x0b\x41\x1c\xfc\x3b\xf5\x7a\xf9\xc3\xb7\x5c\x15\x53\xf0\x43\x5b\x00\x7b\x58\xce\xbd\x64\x7b\x5f\xc9\x7d\x02\x85\xf6\x84\x5a\xe6\x1a\x14\x8c\xc3\x13\x28\x26\x0a\xe2\xe0\x0e\x38\xc6\x4a\xd5\x5c\x23\x1b\xd3\xe7\xe6\x9e\x9c\x1d\x52\xe7\x13\xd9\xb0\xf1\x68\x16\xfa\xfa\x73\x6a\x46\xc2\x54\x56\x84\xae\x3a\x10\x51\x17\xc4\xc1\x3f\xef\x1d\x6a\x93\xe8\xbc\x83\x74\x0b\x9d\xe2\x3a\x7b\xba\xb8\xc9\xfe\x12\x6d\xec\x3c\x3e\xa6\x23\x75\x87\x22\x43\xbe\xf0\x62\xf2\x20\x84\x03\x20\x0e\xea\x03\x80\x58\x37\x68\x72\x77\x96\x03\xf5\xaa\x71\x14\xbe\x5f\x28\x1d\x1d\x82\xbe\xda\xf4\xc4\x79\x0b\x7f\x0a\x17\xc4\x93\x32\xca\xcd\x71\xcd\x2a\xbc\xb4\x15\x9f\x03\x3d\xe5\x05\xe2\xe0\x0e\xd8\xbc\xa3\x90\x0a\x0f\xc9\x5b\xc9\x68\xce\xf2\x73\x9a\x24\xc6\xd3\x46\x0f\x19\x3c\xcd\x72\x94\xcb\x11\x4d\xc8\x8c\x29\x3c\xb4\x81\xfa\x0b\x80\x83\x7f\xa7\x56\x97\x78\xdc\x32\xd5\xbb\xdd\x7e\x4b\xaf\x7b\xa5\xea\xfd\xca\xc8\xfb\x6d\x4f\x67\xec\xec\xc3\xf0\xe2\x67\x4f\x95\x1d\x05\x36\x74\x07\x0a\xc4\xc1\x1d\xe0\x5c\xf9\x1a\xb8\xb7\xac\x6d\xaa\x9e\xec\x2e\xbe\x1a\x57\x48\xbd\x6f\xda\x18\x3f\xa1\x3d\xab\xff\x6c\x76\x1b\x45\x45\x2e\x96\x08\x51\x17\xc4\xc1\x3f\xaf\x0c\xc3\xcd\xc3\x6f\x04\xe3\x8f\x3b\x25\x4f\x9a\x0f\x8e\x43\x5b\x6a\xee\x85\x8b\x5d\x3a\xea\xea\x53\x30\xa6\xe6\x78\xfe\x36\x23\x1d\xe1\x00\x88\x83\xfa\x00\x20\xd6\x0d\x9a\x69\x9f\xe5\xc0\xf0\xa7\x5e\x7e\xfa\x56\x59\xcd\x27\x74\x2f\x5f\x66\xf3\xe9\x3b\x1f\x90\xa4\xff\x79\xd8\x15\xe1\x2c\xd4\xeb\xd8\x31\xdf\x7e\x9f\x1d\x31\x76\x10\x07\x77\xe0\xd5\x05\xae\x6e\x3f\xaa\x4f\x65\x94\xcd\x14\xc2\x74\x49\xe1\x78\x7c\x0b\x43\x17\xb1\x97\xb0\xe8\xf3\xbf\x3c\xa0\xca\xa0\x8f\x85\x92\x18\x20\x0e\xe9\xee\x7e\x7a\xca\x9e\xdd\x61\xfc\x10\xbf\x7a\xfa\xde\xf1\x1b\xf1\xbd\xde\xe6\xba\xc6\x58\x35\x0b\xe2\xb0\xd8\xdf\x3f\xc7\x64\xf5\x72\xa0\x3b\x2f\x00\x0e\xee\xc0\xa5\x8a\x3b\xc7\x9c\x2d\x41\xdd\x86\x17\xf5\x70\xab\x4a\x66\x73\x2d\xdf\x1d\xfa\xcb\x7e\xb7\x58\xfa\xde\x56\x24\x77\xc1\x40\x1c\x8a\xf6\x83\x38\xf8\xe7\x7d\xe2\xf7\x82\x43\xbb\x2d\x93\x50\x77\x3e\x27\xe2\x5d\xec\x1d\xce\xdb\x17\x50\x9b\xdd\x84\x13\x52\x08\x29\x6c\x33\x5f\xe7\x53\xaa\x23\x1c\x00\x71\x50\x1f\x00\xc4\xba\x41\x97\x3d\x67\x39\x30\xb1\x48\x13\x1f\x16\x97\xc9\xb7\xc6\x67\x9e\x69\xfd\x31\xf2\xef\xd3\xcf\xdc\xdc\xcd\xba\x99\xfe\xea\x06\xc9\x9a\xd5\x14\x0d\xd0\x1e\xcc\x20\x0e\xee\x80\x5e\xc4\xda\x6e\xec\xfa\xb3\xed\x0e\x7a\xcd\x04\x92\x03\xcf\x9d\x4b\x6d\x53\xdb\x7e\x98\x0a\x94\x1e\xa5\xae\x12\x42\x4f\xe7\x1a\x11\x75\x41\x1c\xfc\x3b\x25\xa1\xba\x1f\x37\xca\xb5\x30\xa1\xd3\xb2\x3a\x2a\xa0\x4c\xaa\x3d\xdd\x98\xb5\xe9\x31\xfa\x51\x9c\x40\xab\x81\x4a\x47\xf7\x32\x0e\xa2\x2e\x88\x83\x3b\xb0\x80\xca\xc3\x75\xec\xae\xea\xae\xf1\x36\xd0\x40\x6e\x57\xcf\xa3\x6b\x6b\x72\xc8\x98\x11\x87\xe6\xa9\x5c\x7c\x1f\x2f\x21\x67\x2b\x74\xb9\x01\xe0\xe0\x9f\xf7\xca\x5f\x73\xd7\x9d\xa9\xb2\x18\x97\x5d\x3f\xd3\xa0\x5c\xf3\x63\xff\x43\xba\xc2\xfc\x11\x96\xba\x09\xc7\xeb\xb3\x41\xce\xd5\xf3\x08\x07\x40\x1c\xd4\x07\x00\xb1\x6e\xd0\x35\xe8\x99\x2b\xe5\xca\x1f\x59\xd1\xab\x3e\x3c\xfd\xad\x45\xc9\x40\x1f\x8d\x99\x99\xee\x48\x3c\x95\xcc\x79\x4d\x65\x12\xdd\xff\x9e\xf1\xf0\x8f\x05\x68\xa5\x1c\xc0\xc1\x1d\xb8\x2b\xa9\x12\x59\xf0\x77\x29\x52\x8f\x59\x6e\x92\x6e\x9f\x4c\xbd\xec\xfd\x8a\xe2\x67\x86\xcf\x62\xcf\xf7\xb8\x5b\x1b\xfb\xaf\x41\x31\x69\x10\x07\xff\x4e\x7d\x6d\x7f\x69\xe6\x0d\x31\xdb\x3e\x88\xbb\xce\xf2\x99\x4e\x74\xef\x61\xb8\x21\x1b\x01\x39\x9b\xa2\xe0\xbc\xf8\x9b\x7c\x7e\x53\x28\x35\x00\xe2\xe0\x0e\xa4\xfa\x1d\xe3\x11\xcc\x99\x1a\x3a\x2a\x38\x8e\x64\xcf\x26\x25\x90\x51\x11\x0e\xe6\xdc\x64\x7b\xf6\xd2\x84\xee\x06\x51\x75\x0a\xf4\xde\x73\x10\x07\xff\xbc\xdc\xfb\xbc\x3a\xc2\xeb\xae\x6e\x57\x6f\x12\xf0\xec\xd1\x78\xf5\xe4\xe3\x36\x52\x46\x71\x53\x53\x60\xe5\xa9\x3d\x66\x21\x9a\xc9\x42\x38\x00\xe2\xa0\x3e\x00\x8a\x75\x83\x96\x15\xff\x89\x75\x37\x21\xc7\xba\x71\xb6\x70\x26\xab\xfd\x8e\x1f\xfc\xa8\x37\xe6\xdf\xf8\x4b\xb2\x39\x87\x75\x95\x6d\xdb\xaf\xeb\x0a\x73\x92\x41\x46\x42\xe9\x53\xd1\x73\x59\x39\x41\x8e\x75\xf7\xa0\x9a\x30\x1c\x5f\xd7\x12\xe8\xf7\x6c\x7e\x5b\xfc\x17\x33\xc8\x91\x82\x52\x7e\xb6\x66\xdd\x6a\xbc\x33\xed\xb8\x24\x49\xc8\xea\x5c\xd6\x89\x90\x63\xdd\xf5\x74\x66\x2f\xa2\xfa\x24\x75\x87\x73\x3f\x5d\x25\x68\x95\x1a\x17\x90\x8e\x17\xae\xba\x91\x99\x38\x47\xa0\x1c\x3a\xe5\xf6\x7d\xef\x5c\x46\x8b\x1c\xeb\xfe\x74\xbc\xe5\x78\x64\xb6\x5a\x76\x98\x6c\x1b\x23\xc9\xef\x54\x3c\xef\x30\x20\x1f\xa8\xec\x39\x19\x33\x2a\xbc\xa4\x4d\xe3\xc9\x72\x2e\xa3\x45\x8e\x75\xdb\x10\xcd\xcc\x85\x28\xa3\xc7\x85\x0e\x7a\x0d\x04\x86\x35\xa4\xb2\x04\xff\x6a\xd2\xed\xb4\x1c\x0b\x7a\x23\x64\x13\x38\x74\x70\x3e\x6b\x80\xc8\xb1\x6e\xe5\x1b\x0a\xb9\x09\x47\xf6\xcd\xa2\x7f\xf7\x0a\x02\x4c\xc8\x72\x02\x0c\x2f\x66\x0e\x63\x90\x85\x7e\x12\xdd\xd8\xfe\x92\x40\xc1\x71\x2e\xa3\x45\x8e\x75\x0f\x05\xcb\x57\x85\x57\xbe\x61\xb6\x7a\x6b\xf0\x59\x00\x45\xed\xfb\x4c\x99\xfe\xa4\xcd\xe9\x38\x76\x46\xb8\x2b\x87\x78\x6b\x44\xd3\xb9\x8c\x16\x39\xd6\x6d\xc3\x1e\x44\x78\x80\x6b\x11\xe7\xc9\xbd\x68\x46\xc4\xb4\xd3\x91\x7d\x52\x41\xc1\x61\xa3\x32\x99\xa5\x65\x1b\xc4\x45\x6d\xca\x76\x6e\x6b\x80\xa0\x7f\xea\x59\x8d\xfe\x01\xce\x25\x21\xac\x74\x25\xd4\xbd\xcf\xe8\xb6\x0f\x8c\x48\x27\x2e\xde\x69\x19\xc3\xce\x5e\x10\xb7\x3c\x61\x50\x1f\xc0\xb8\xae\x89\x68\x70\x20\x0e\xde\xe8\x4f\xdf\xaf\xe7\xa2\xbc\x5d\xc3\xf9\xdd\xe2\x8d\x62\x48\xc7\xaa\x2f\xf3\x7a\x87\xf7\xe8\x96\x36\xc5\x5a\x14\x5a\xbd\xa7\xf7\x6f\xe8\x56\x2b\x88\x43\xda\xc7\x2f\xec\x6e\xbf\x7d\xda\x67\xaf\xc1\xbe\xec\x3f\x4d\x61\xcf\x66\xbd\x51\x6a\xae\xc6\xc5\xac\xde\xaf\x2f\x69\x12\x78\xf2\xc7\x15\xba\xa0\x04\x71\x48\xb7\x44\x47\x3a\xf6\xf3\xd9\x62\xe4\xa6\x85\xb9\x98\xd4\xfd\xa6\x33\xd0\xd9\x05\x48\xa6\xbd\x22\xee\xfe\xa9\xcc\xa6\x25\xf1\x08\x81\x9e\xe7\x05\x71\xf0\xcf\x6b\x62\xa3\x4c\x8c\x9e\x9a\x49\xc9\x68\x75\xd5\x5c\xef\x67\x0e\x87\x92\x01\xe5\x4c\x59\xcd\xe4\xd8\x26\xfb\x51\x71\xec\x6f\x51\x28\xca\x07\xe2\xa0\x93\x3d\x20\xd6\x0d\x6a\x9b\x67\x39\xf0\x66\x42\xd1\xc5\xfb\xd5\xc7\xb2\x9f\xed\x52\x62\x6f\x76\xa5\x84\xcc\x5c\x26\x45\x5d\xae\x68\x5d\x55\xc0\x2e\x2e\x1c\x1c\x20\x86\xf6\xc9\x05\x71\x70\x07\x28\x33\xd3\xe7\x4c\x1e\xb4\x1d\x1b\xfe\xa4\xf5\x55\xf0\xc2\x23\xfb\x4b\x93\xf8\x88\xcb\xc9\x71\x49\xbf\xf9\x54\xbb\xaf\xcc\x4f\x0c\x5a\xa8\x01\x70\xf0\xef\x54\x15\x07\x03\xfb\xd6\xab\x2f\xdf\x74\x78\x9e\x8d\x6c\x8d\x6f\x25\xfb\x1c\x51\xdb\xfb\xf1\x25\x54\xec\x11\x4a\x7d\x1d\x36\x3e\x81\xe2\x56\x20\x0e\xe9\xb9\xfe\x8d\xf5\xa6\xe7\x35\x6e\xc7\x8a\xf5\xdf\xcb\x51\xdd\x62\x9a\x94\xdf\x7c\xf7\xba\x5d\x61\xaf\x24\x69\xc8\x46\xb8\xf5\x51\x17\xba\x98\x00\x71\xf0\xcf\xfb\x09\x6d\x48\x72\x7b\xec\xd5\xf8\x28\xd3\x62\x3e\xbf\x35\xfb\x7c\x3d\xad\x9d\xe3\xa7\x87\x2c\x4b\x99\x83\x9f\xbf\x34\x44\x2d\x8b\x23\x1c\x00\x71\xd0\xc9\x1e\x10\xeb\x06\x9d\xc3\xce\x72\xe0\x5a\x42\xc4\xdc\xda\x67\x2d\xf3\xca\x06\x7c\x02\xf9\xf5\x90\x39\xbc\x3b\x6b\x63\x4e\xdc\xba\xb7\x53\xe7\x29\xe3\x4f\x34\x7c\x84\xa1\xff\x15\x80\x83\x3b\x30\xb0\xa0\x76\x4c\x5d\xa0\x7f\xf9\x8a\x5c\x7a\xaf\x77\xb0\x71\xfc\x6b\x1c\x9d\xef\x29\xe5\xc4\x5b\x2e\x34\x3a\x86\x83\xbb\xb6\xd0\xc2\x2a\x88\x83\x7f\xa7\x5b\x68\x63\x5a\x47\xbe\x57\x65\xf7\x3a\xfa\xea\xf9\x93\x2d\x23\x44\xe9\xaa\x54\x1c\x86\xb5\xbc\xae\xd5\x97\x7d\x70\xb8\x41\xc7\x88\xa8\x0b\xe2\xe0\x0e\x6c\x3d\x1a\x45\x0d\x9e\x65\xda\x9d\xda\x1d\x99\xe7\x35\x51\xfc\xf0\x24\xd7\xc7\x3d\x5c\x5b\xe8\x8b\xaf\x53\xd6\xd0\x17\xdb\xc4\x7e\xa8\x2e\x80\x83\x7f\x5e\xbe\x09\x81\x3c\xd2\x5e\xe5\x6a\xa5\xf1\x53\x0a\x6a\x81\xd4\xc3\xda\xf7\xdf\x77\x85\xdf\x26\xd0\x5e\x3b\xee\x73\xa0\x7d\x8a\xdd\x83\x70\x00\xc4\x41\x7d\x00\x10\xeb\x06\x4d\x28\xce\x72\x20\x57\xc1\xb0\xe6\xd5\xe5\xd7\x6d\x16\x46\x74\x16\xf7\x44\x8c\xe8\x32\x77\xb2\x87\x5c\x66\x1b\xa9\xea\x6c\x84\x7e\xbe\x3b\x61\x83\xf6\x33\x04\x71\x70\x07\xd2\x9a\xf3\x34\x5a\x42\x1c\xd1\x9d\x23\x87\x6e\xc9\xbf\xd0\x4e\x18\x6d\x78\x98\x1a\xef\xac\xa9\x31\x6b\xe6\x4d\x9a\xab\xeb\x09\xc5\xa4\x41\x1c\xfc\x3b\x2d\xeb\xcc\x79\x5e\x29\x5e\x9e\xf6\x95\xc4\xff\xfd\xd0\x2f\x4b\xaf\x7e\x22\x25\xea\x6f\x5c\x71\x37\x66\xb4\x3f\x04\x67\xe3\x3b\xeb\x20\xea\x82\x38\xb8\x03\x4e\x7d\x17\x5c\x05\x69\x51\xd7\xeb\x8c\x73\xd9\xc3\xf9\x8d\xf5\xb2\x2b\xfe\xee\xfa\x89\xcb\x55\xd8\xfa\xd2\xdd\xe8\xe5\x77\x3d\x41\xd4\x05\x71\xf0\xcf\xfb\x68\x26\x51\x1b\xc3\xe9\xbd\x91\x66\xae\xaa\xac\x67\x65\xdb\x03\x3d\xd9\x05\x37\xb6\x36\xe1\xf0\xe0\x95\xeb\x98\xd3\x37\x96\xf3\x11\x0e\x80\x38\xa8\x0f\x00\x62\xdd\xa0\xd9\xdd\x59\x0e\x78\x98\x4d\x8f\xb0\xe4\xe4\xe1\x72\x44\x5f\xdd\xb7\xf9\xa8\xeb\x64\xdf\x6a\xe8\x3d\xe1\xc6\x7d\x87\xf4\x7e\xdb\x53\x3c\x4a\x55\x68\xaf\x04\x10\x07\x77\xe0\x82\xc5\x05\x32\x0a\x41\x2d\x7d\x35\x5b\x52\x99\xb7\x66\x92\xb2\xa9\xe9\x22\x0c\xfe\x5f\xaa\xd4\x55\x2c\xc3\x1c\xa3\x57\x1d\xa1\x17\x48\x82\x38\xf8\x77\xda\x6f\xa7\x28\x3d\x49\x1f\xde\x25\x47\x45\xa7\x3d\x1a\x62\x5f\xbf\xd3\xdf\x1c\xf7\x7d\xb2\xbc\xc0\x0f\x17\x2d\x79\x39\x5a\x12\x5a\xa8\x01\x71\x70\x07\x88\xd5\xeb\xd8\xd7\x44\x9e\x5c\x51\xbd\xe0\x67\x48\xd6\x5a\xbf\xf0\x9c\x44\x23\xf5\x6e\xa3\x14\x73\xc5\xfd\xbb\x8e\x51\x42\xff\xef\xcb\xbd\x40\x1c\xfc\xf3\x76\x54\x5f\xbe\x90\xc6\x79\xd4\x90\xb1\x74\xe9\x16\xdd\xee\x13\x96\xfd\xf1\xd0\xc5\xcb\x0b\x89\xec\x76\x5a\x98\x4f\x05\x2d\x1c\x47\x11\x0e\x80\x38\xa8\x0f\x00\x62\xdd\xa0\xa9\xf6\x59\x0e\x28\xb1\x5d\x5b\xed\xfb\x65\xd6\x1e\xb4\x57\xe4\xce\x3b\xa0\xc1\xa6\x61\x86\xaf\xa2\x17\x32\xf7\x66\xd9\x69\xd8\xc2\x55\xc1\x1c\x5a\x04\x07\x71\x70\x07\xb8\x18\xb5\xf0\x03\xa5\xc9\xb8\x1e\x7f\x0c\x52\x12\x98\xdd\xa1\x77\x6b\xa1\x48\xac\x73\xb2\xb4\xbf\x98\xce\xfb\xfa\xb4\xc4\x18\xda\x7f\x14\xc4\xc1\xbf\xd3\x6d\x3d\x62\x0e\xe3\x67\xdc\xf5\x86\x1f\xa2\x84\x29\x16\xbf\x5f\x6d\x0a\xdb\x7a\xbb\xdf\xa0\x52\x36\x7a\xf4\x1c\xcf\x87\x6d\x0d\x3a\x77\x81\x38\xb8\x03\x4a\xa2\x84\xa8\x16\x1b\x9c\x72\x98\xf1\x81\xa4\x39\x0d\xc4\x0d\xe2\x5e\xa6\xd9\x5e\x2b\x45\xa5\x83\xa7\xa3\xf5\xf8\x3f\x4b\xdd\xa1\xef\x01\xc0\x21\xcd\x09\xe9\xfb\xa7\xf1\x53\x28\x57\x6e\xd3\xc7\xfb\xbd\xdf\x1e\xeb\xdb\x34\x9a\x15\x7f\xa0\x47\x9a\x39\x5b\xe1\x43\xe9\x2d\x83\x1e\x0a\xcd\x09\x01\x1c\xd4\x07\x00\xb1\x6e\xd0\x75\xcf\x59\x0e\x90\xd4\x63\xff\x88\x11\x91\xd0\xe7\xde\x7a\xe1\xf2\x35\x24\x7d\xac\xe3\x64\x6c\x6c\x7f\xad\xaf\xa1\x4c\x46\x3a\x82\x65\x77\x0e\xda\xeb\x09\xc4\xc1\x1d\x30\xae\x4a\x77\x6e\x0b\x22\x44\x33\x1c\x5a\x32\x7b\xf3\xa2\x9c\x33\x25\x54\x21\xb6\x6a\xa5\xe5\xdd\x07\x49\x7d\x8b\x29\x55\x41\x6c\x44\x5d\x10\x07\xff\x4e\x1d\x27\x66\x64\x5f\x8b\x7c\x33\xde\xde\x9b\xae\xdb\xee\x31\x7a\xfc\xac\x9e\xe5\x79\x4a\x81\x05\x66\xdc\xf7\xd1\xf9\x76\x1c\xce\x61\xe8\xc6\x0d\x80\x83\x3b\x20\x20\xe4\xb4\x95\x3f\x68\xcf\x3c\xc3\x19\xdb\x3f\xcc\xfe\x0b\xf7\x4e\x87\x43\x70\xc2\x75\xbd\xd1\x01\xc3\x0a\x8b\x56\xe3\x02\xc8\x59\x10\x07\xff\xbc\x8c\x97\x57\x0a\x9e\x4e\xf5\xeb\xbe\xcc\xf6\xac\x41\xa1\xe0\x7e\xb0\xf4\xb7\xf0\x9d\x80\x67\xab\xd9\x0b\x3d\x12\x2f\x1b\xe2\xcc\x75\x84\x03\x20\x0e\xea\x03\x80\x58\x37\xe8\x22\xf4\x2c\x07\x4a\x9f\xd3\x8b\x67\x74\x9a\x6a\xdd\x7c\xfd\x5b\xb5\xd6\x8f\xbc\x40\xd7\xde\x96\xc8\xea\xf6\xb0\x55\x7d\xe1\x77\xea\xd8\xb7\x62\xd0\x4d\x41\x10\x07\x77\x40\x68\x0d\x2b\x83\xa3\x1f\x8f\xf4\x70\x3a\x3c\x64\xe5\xd2\xe1\x5b\x2a\x81\xac\x5a\x9f\x95\x18\xb9\x2f\xd8\x9b\x49\x63\x3d\x45\xf4\x88\xba\x20\x0e\xe9\x5d\x0f\x19\xf7\x5e\x51\x1d\xe0\x69\xfc\x8a\x5b\x3d\xfa\xd1\x9c\x6c\x62\xcd\x3e\xd4\x2d\xe4\xeb\x46\xdd\xa0\x2a\x1b\x12\xab\x5c\x0f\xed\x49\x03\xe2\xe0\x0e\xc8\xad\x13\x52\x6c\x19\x58\xb1\xf5\x7d\xb2\x89\x88\x16\x2f\x6c\x14\x7a\x9b\xbd\x69\xaf\xf5\x7e\x41\xd7\xa8\xf6\xf6\x83\xc5\x0d\xe8\x05\xb5\x20\x0e\xfe\x79\x37\x3e\x31\x48\x9f\xd0\xf5\x57\xbf\x99\xa5\x0a\xc3\xd0\xf8\xfb\xc7\x8d\x9a\x5c\x20\x54\x3e\xe5\xe1\x32\x87\xed\xf0\xe6\x98\x04\xf4\x88\x0f\x88\x83\xfa\x00\x28\xd6\x0d\x0a\x0c\xfe\x13\xeb\x6e\x42\x8e\x75\x2f\x76\xcb\xa6\x5d\xf9\xdc\xbe\x5c\x3c\x1a\x79\x97\x47\xa2\x67\x6a\x42\x84\xcb\xa3\xb5\xb5\xaf\xbe\xf8\xb5\x9c\xb0\xf4\x37\x21\xd5\x73\x5b\xc3\x00\x1d\xe8\x2c\x4f\x59\xc2\x1b\x4f\xf0\x13\xec\xa9\x2f\x96\x24\x27\x7f\x2c\x96\xc6\x90\xcf\x9f\x5a\xd9\x0c\xb7\xf1\xdc\x91\xf2\x99\xcd\xd9\x7a\x09\xe5\x8d\x40\x1c\x92\xa7\x49\xaf\x9e\xac\x7c\x94\xaa\x4e\xc0\x68\xb9\x11\x5d\x6a\xce\xb4\xd0\x75\x7f\xbc\xdd\x66\xbc\x8d\x5f\xac\x9d\x6c\xf9\xd4\x04\x7a\xc9\x25\x88\x83\xff\xee\xa9\x11\xa2\x3f\x33\x46\x46\x36\x7e\xfc\xce\x7d\x12\xe4\x18\x32\xb4\xc6\x8d\xc6\x5a\xd5\xc5\xd5\x8d\x96\x72\x01\x7d\x85\x59\x11\xba\x61\x01\xe2\x90\xde\x49\xb2\x44\x47\x2d\x20\x13\x5d\x5b\xf3\xce\xc9\xc7\x85\xb8\x1d\xfb\x89\x0e\xc1\xa1\xe5\x52\x5c\x49\xab\x6d\xa1\xda\x68\xfc\x9b\x1e\x44\x5d\x10\x07\xff\xbc\x27\x59\xec\x4a\xce\x4c\xb1\xae\x6b\x1c\x54\x75\xdd\x31\x38\xcf\x7f\xc5\x0a\xd3\x46\xb4\xb7\xe0\xdc\x92\x5d\x3d\xb4\x21\x42\xc7\x46\x78\x0a\xe2\xa0\x5e\x05\x88\x75\x83\x22\xc1\x67\xc7\xba\x43\x99\x46\x98\xcb\x8f\x2f\xb8\xdc\xc8\xec\xa5\x12\xa1\xfc\xad\x87\xc3\xf1\xc2\xbd\xf3\xd7\xcb\x50\x6a\xe2\x3a\x27\x3d\xc6\xcd\x64\x44\x44\x1a\xc4\x21\xc7\xba\xd1\x63\x07\x7d\x19\x04\xe7\x8b\x42\x1e\xca\xaf\x86\xc7\x9f\x1a\x12\xee\xdd\x29\xc2\xb0\x71\xfe\xf8\x4b\xda\x91\x7f\x8d\x7d\x1b\x1f\x51\x19\xc4\x21\x87\xaf\x0f\x3f\x1e\xdd\x12\x27\x62\x11\x66\xc1\x45\x5f\x16\x61\x52\x56\xb0\xe0\xd2\x09\x60\x9e\xc6\x6e\xcd\xdc\xfd\x8b\xd5\x45\x60\x48\x81\xa8\x0c\xe2\x7c\xa5\x51\x68\xff\x67\x65\x5c\x95\x53\xbc\xe3\xc3\x88\x57\x82\xc1\xd3\x4b\x61\x57\x5d\xba\xda\x9e\xb7\xff\x76\xbd\xf1\x73\x88\x05\xa5\xd8\xc0\x5c\x04\x2f\x0d\x8a\x75\xf7\x70\xa2\xe6\x7d\x58\x97\xe5\x9f\x64\x2b\xeb\xcd\xc1\xee\xdd\xcb\xdb\xfb\x46\x76\x8d\x7c\x89\x45\x28\x67\xa6\xeb\x8a\xf1\xa6\xce\xbf\x63\xdd\x6c\x71\xbe\x66\x35\x7f\x06\x98\xe6\xa8\xb1\x7e\x59\x6f\x31\xdc\x37\x18\xbf\x98\xfa\x41\x81\x82\x01\x53\xe4\xd2\xaa\x11\xe1\x95\x7f\xaf\x64\x0e\x97\xef\x48\x0b\x8b\x6e\x6e\x3e\xad\x4e\xa4\x0d\xb6\xd8\x40\xb7\xf3\xea\x92\xc9\x0b\x8e\xb6\x1f\x5f\x37\x70\x61\x4a\xc8\x12\xfb\xdf\x17\xeb\x06\x0d\xee\x8c\x58\xb7\x31\xa9\x3a\x29\xb7\x38\x35\xa1\x79\x84\x7c\x35\xe6\x8b\xe5\xa0\x62\xb7\xf8\x27\x09\xbf\x56\x7f\x13\x91\xab\x56\x6f\x0b\x5d\x55\xf9\x17\x3a\x8d\xa9\xa4\xff\xc4\xeb\xa4\x60\x94\x35\xed\x80\x1b\xc3\xa9\x39\xc5\xf8\x67\xad\x70\x9d\xf7\x62\xd9\xcb\x03\xa3\xb0\x44\x5c\xd7\x7f\xa1\xaf\xd5\x95\x12\xfd\x55\x23\x66\xc6\xab\x2d\x85\x69\x1d\xc2\x2e\xdd\xca\x6e\x77\xe9\xd8\xbc\x47\x93\x22\x9c\x60\x52\xa3\xd0\xf0\x1e\x8a\x75\x83\x0e\xff\x4f\xac\x1b\x45\x16\xde\xcd\xc3\x0e\xcc\x13\x38\x99\x39\x75\x37\x8f\x6c\x16\x9b\xdf\xa1\x2f\x63\x12\x70\x1a\x24\x62\x04\x46\x17\xf9\xf9\x08\x7a\xe2\x69\x9d\xcb\xfe\x26\x5e\xc8\xb1\xee\x16\xb9\x27\xcf\xd2\x58\xf4\x3d\xc3\x1e\x19\x16\xbc\x8d\x2a\xc0\xfe\x34\xb8\x9e\x62\xdb\x22\xb5\xc9\xd7\xea\xad\x55\x1e\x3e\x74\x2e\x3b\x3a\xa3\x88\x23\x1d\x16\x5b\xe9\x43\x9a\xd3\x6c\x13\x4b\xdc\xe7\x53\xa1\x2b\xdf\xee\x59\xa3\x7e\x11\x0a\x0a\x16\xab\x92\xd2\x8b\x18\x13\xc6\x12\x14\xee\x39\x97\xd1\x9e\xb1\x5b\x37\xe1\x9c\xdf\xfc\x93\xeb\x19\xe9\xe3\xe8\xa7\xfc\x23\xd9\x44\x9d\x11\x18\xac\xf3\x39\xf7\x2f\x7d\xda\xa2\x31\xc5\xb2\x5b\x52\x38\x97\xd1\x3a\x22\x1d\x96\x74\xcb\xeb\xc6\x50\x95\x1f\xce\xd7\xf5\xb5\xb4\x21\x7c\x9c\xcb\xfe\x28\x8b\xae\x46\x4d\x45\x85\xc4\x1c\x3f\x23\x44\x9e\x0d\x9d\xcf\x68\x91\x63\xdd\x65\x4c\x3d\x36\x24\xbc\x0d\x3a\xf4\xc5\xa9\x9d\xce\x3a\xef\x9e\x47\xde\x19\x5d\x97\x92\x51\xe9\xc6\xd1\x31\x50\xbe\x87\xbd\x5c\x70\x2e\xa3\x4d\x42\x3a\xec\xb6\x75\xdd\xbb\x2c\x36\x2e\x43\x75\x14\x03\xca\xbf\x7b\x5c\x78\x32\xf2\x55\xcd\x2d\xe4\x11\xcb\x31\x06\x4c\x0e\xca\x16\x1e\x9a\xe7\x32\x5a\xe4\x58\xf7\xa2\xd3\x0c\x86\xf5\x7c\x88\x8b\x19\xfd\x3b\xc3\x77\x9f\x1f\x0b\xf3\xcb\x5e\x43\x1f\xc1\x09\xdf\xb2\x1a\xcd\xbe\x21\xfb\x60\xca\xe6\xdc\xa6\x43\xa0\x7f\xea\x59\xd3\xa1\xe6\xbb\x7a\x72\x2f\xb1\xe6\x56\x4c\xcd\x8a\x2f\xbf\xa7\x5b\x9f\xda\x30\xf7\x24\x62\xfb\x78\xa1\x1a\xd7\xbd\x49\xb6\x80\xd5\x00\xca\x45\x81\x38\xa4\x6d\xf9\x32\x14\x51\x85\xb6\xd7\x8f\xf2\xe4\x78\x5f\x11\xff\x46\x7d\xab\x1c\xcb\x42\x74\xe1\x6a\xc2\xff\x8f\xb9\xb7\x0c\xcb\xa2\x6b\xfb\xb7\xe9\xee\x50\x49\xe9\x50\x11\xa4\x24\x44\x1a\xa5\x94\x96\x6e\x01\x91\x50\x1a\xa4\x1b\x41\xba\x25\x14\x10\x24\x45\xa4\x43\x42\x1a\x29\xa5\x11\xa4\x43\x50\xa4\x43\x85\x77\xfb\xdf\xcf\x75\xce\x7d\x3d\x73\xb2\xb9\xde\x0f\x7c\x78\xbe\xef\xdb\x31\xae\xd3\x9d\x63\xd6\xac\xf9\xcd\x5a\x9a\x06\x8f\xe9\xc3\x92\xd6\x13\xa1\x69\x3b\x88\x83\x4f\x2f\x4c\xe6\x47\x43\xd5\x44\x63\x1f\x52\x3c\xb5\xc6\x89\xbe\x4f\x37\xde\x8b\xd2\x7e\x95\xb8\xe4\xcb\xca\x64\x16\xda\xf9\x76\x91\xbb\xe1\xd0\xd7\xa3\x00\x0e\x3e\x1d\x22\x5e\xfc\x96\x70\x62\x36\x2e\x6c\xfd\x2a\xce\x99\x59\x55\xd3\xcd\x76\x5e\x30\xd4\x67\x67\xff\xe0\xc2\x8f\xc2\xaf\xa5\x65\xfa\x50\xae\x15\xc4\xc1\xeb\x8a\xb8\x0c\xcb\xfb\x1c\x85\xfb\x86\xe4\xf2\xb1\x4c\x29\x9d\xfc\x68\xf0\x49\x6c\x58\x5d\xe1\x93\x40\x79\xf4\xb2\x4c\xaa\x26\x75\x17\x11\xeb\x06\x71\xff\xaf\xae\xaf\x5f\xd0\x7f\xfa\xf3\x5f\x9e\xdc\x40\x5d\xf3\x34\x05\x4e\x2a\x7a\xc7\xf9\xab\x5b\x19\xe6\x44\x99\xdd\x72\x9c\x08\x64\x3a\x3c\xae\x71\xdc\x79\x59\x21\x19\xbb\x46\x43\x6d\xa9\xff\xd0\x01\x7a\xfb\x06\xe0\x90\x4e\xe7\x1a\x12\x4f\x74\xbf\xc7\x37\x12\xb1\x41\xda\x92\x89\x77\x35\xef\x8d\xb0\xb0\x55\x12\x57\xf7\x9b\xce\xf2\xa4\xf0\xef\x3d\xbf\xa1\x63\xd4\x41\x1c\xd2\x1b\x12\x67\xaa\x9b\x91\x06\xbf\xfd\x0f\x3e\x32\x46\x7d\xf2\x17\x53\x2e\x34\xc7\x9a\xeb\x75\x6c\x45\x4d\x74\xf0\x32\x6e\xb4\xc9\x86\xde\xe8\x80\x38\xf8\x7f\x55\xe5\x64\x74\x76\xec\xc2\x0b\x5f\x8f\xaf\xc4\x5e\x1a\x53\x74\xb6\x0f\xbf\x7c\xbc\xc9\xc7\xd5\x8e\x16\xfa\x68\xd1\xfb\x23\xf6\x35\xe8\x84\x36\x10\x07\xaf\x6b\xf0\xd1\xee\xd0\x02\x27\x58\x72\xfa\xe9\x37\x03\x97\x89\x87\xa3\xfd\x73\x95\x47\x1a\xd5\xe8\x12\xf7\xec\x02\x22\x09\xd9\x95\x57\x11\x33\x62\x10\xf7\x8f\x02\xff\x73\xb3\xfc\x8b\x03\xa0\x5b\xd8\x69\x0e\xd0\x26\xb5\x49\x7b\xa2\xd5\x60\x3d\x90\x98\xb2\xab\x54\xb1\x79\x92\x7d\xf4\x9d\xba\x30\x4a\xc0\x7e\xea\xdd\xb9\xca\xf7\xfc\xb2\x1a\x88\xb1\x83\x38\xb8\x03\x3d\xc3\x44\x89\xad\x24\x4e\x87\x76\x5b\x3d\x3a\x56\x4b\x9b\x43\x0f\x26\x1f\xf5\xf2\xb3\x91\x9d\x54\xf7\x4d\xee\x71\x5c\xed\xb6\x47\xd4\x05\x71\x48\x51\xbe\x4c\x53\x6a\x5e\x4f\x87\xf4\x0e\x69\xdb\xba\xfd\xb6\x8c\xdd\xfe\xf6\x4a\x57\xfb\x55\xbe\x52\x27\xe2\xf1\xcc\xee\x83\xdf\x50\x7b\x01\x71\x48\xa7\x73\x4d\x30\xd9\x4f\x72\x7f\x5e\x5e\x6e\xf2\xf2\x61\xcb\x6f\x22\x73\xd3\xe3\x8b\x6e\x8c\xe8\xbc\xf8\xe7\x72\x68\x7d\x98\xef\x17\x68\x23\x30\x10\x07\xaf\xcb\x26\xde\x25\x81\x7e\x2e\x52\x20\x32\xbb\x71\x70\x5e\xf4\xb5\x7c\xb1\xe5\xc3\x02\x43\x32\x97\xcc\x2b\x2f\x7c\xdd\xae\x9e\x67\xaa\x41\x38\x00\xe2\x10\x0e\xfc\x67\xe6\xf2\xb7\xdd\xba\x01\xf3\x89\x53\xdf\xe8\xe4\x18\x88\x19\x85\x30\xdb\x1c\x93\x11\xe3\xd2\x37\x9a\xf5\x8a\xbe\x4f\x3b\xb1\x64\x11\x96\x9a\xc9\x0b\x20\xad\xb7\xb1\x82\x4e\xc1\x05\x71\x70\x07\x38\x78\x12\xd1\x69\xb4\xac\x34\x82\xae\x34\xa5\xa9\x50\x47\x8a\x30\x75\x9c\x27\x30\xf2\x33\x30\x2a\x77\x3c\x88\x64\xe2\xef\x85\xfe\x5e\x41\x1c\xdc\x81\xed\x5b\x86\xb7\x50\x43\xa4\x64\x09\xa3\x9e\xe8\xdf\xf3\xbb\x60\xd8\xee\x26\x24\x45\xa7\x3c\x22\x90\xe3\x68\x9f\xf6\x02\x27\x1d\xda\x51\x16\xc4\x21\xb5\x6c\x36\x4a\xd9\x1c\xbc\x9f\x6c\xca\xd2\x66\x5a\x46\xc4\xa2\xeb\xe7\xbf\xf6\x97\x60\x13\x9f\xb7\xd1\xb3\x7c\xa8\xc2\x55\x2b\xcc\x82\xa8\x0b\xe2\x90\x9e\xb8\xdf\xec\x0c\x07\xd5\x4a\xd8\xf7\xdb\xf8\xca\x7c\x4f\xfa\x76\xcd\x75\xcd\xff\x9b\x4d\xca\x56\x54\xe7\x34\x99\xc7\x7b\x3b\x94\x6d\x84\x03\x20\x0e\xea\x03\x80\x58\x37\x68\x72\x77\x9a\x03\x7d\x16\x65\x27\x34\xbf\x78\x68\x0f\xa5\x22\x42\x4a\x62\xf5\x72\x9e\x0b\x97\x3f\x7f\xbb\x47\x55\xe3\x7f\x2e\xd1\xb0\x37\xf4\x4e\x26\x62\xec\x20\x0e\xee\x40\xff\x7a\xd7\x2e\x1b\x97\x88\xbb\xdb\xa0\xb5\xf2\x42\xe4\x3e\x5b\x9d\x30\x9e\xc0\x56\xc5\xf0\x15\x85\x5c\x9a\x1d\x0c\x2f\x51\x68\x17\x70\x10\x07\x77\x20\x28\xbd\x97\x92\x50\xea\xc2\x7a\xc0\xbe\x78\x4a\x99\xc9\x0d\x22\xef\xfd\x5b\xc5\x6f\xd0\x6f\xda\x7d\x6d\x6d\x94\x0a\x69\x51\x63\x80\xa2\xc2\x00\x0e\xe9\xd4\xde\x50\x95\x80\xcb\x41\xf7\x65\x30\x7e\xd9\xd1\x6a\xc8\xf0\x1a\xd1\x73\x4f\x25\x8c\x1f\x67\x4f\x0a\x6d\x65\xcd\xd9\x3b\xff\xaa\x87\x62\xad\x00\x0e\x5e\x77\xfc\x83\x71\xf9\x0f\x96\x69\x4b\x37\xc3\xc7\x19\x3e\xef\x06\xbc\xb1\x9c\x95\x78\xee\x52\xce\xf9\xf2\xdb\xbc\x24\xc5\x9e\xef\xe2\x41\x38\x00\xe2\xa0\x3e\xe0\xfc\x77\x07\x40\x33\xed\xd3\x1c\xd0\x74\x90\x52\x3d\xc8\x7a\xaa\x98\xef\x75\x8d\xf1\x85\x67\xf4\xdb\x17\x18\xc7\x41\x9e\x45\x1d\x7a\xb1\x9a\x1b\xd3\xe2\x02\x4e\xd0\xe9\x97\x20\x0e\xee\x80\xab\xe8\xc1\xa6\x41\x2f\xc7\x8b\xe4\x24\xd6\xc4\x3e\x8c\x2b\xf9\xe9\x39\xca\x1a\x41\x9a\x3a\x14\x42\x7c\xaa\xc2\x02\xca\x94\x83\x88\xba\x20\x0e\xee\x00\x4a\x3b\xb7\x38\xc1\x73\x99\xdb\xbc\x1f\xde\x7c\x09\x5a\xb6\xfc\xe3\xb9\x89\x7b\xe2\x7c\x89\x47\xcd\x46\x05\x55\x2e\xf0\xe1\x24\xb4\x9a\x0f\xe2\xe0\xff\x57\x37\x6c\x52\x2d\x08\xc7\x1d\xe8\x0c\x96\x9f\xd4\xd4\x5a\xe5\xd3\x04\xd1\x3e\x69\xa3\x0c\x31\x13\x3c\xb2\x0f\x3b\xb7\xdf\xf2\xe1\x29\xa2\x2e\x88\x83\xd7\xd5\xca\x67\xd0\x8e\x0a\x50\x8b\x31\xd7\x76\xf5\x4a\x61\x24\x92\x56\xa2\xe1\xdf\x08\xd2\xde\xfa\xf9\xb9\x8e\x20\xf7\xf9\xef\x55\x14\x84\x03\x20\x0e\xea\x03\x80\x58\x37\xe8\xb1\xe7\x34\x07\xfc\x45\xe4\xfc\xf7\xd4\x05\x8a\x88\xfa\xb0\x2d\xbe\x2d\xda\x79\xeb\x4a\x10\x29\x73\xf5\x4f\x53\x17\x7b\x94\x5f\xb3\x37\xdb\x2a\x46\x8c\x1d\xc4\xc1\x1d\x78\xa8\xc1\x72\xb2\x9f\xea\xa1\xc9\x71\x9f\xb6\x7a\x02\x5f\xea\x29\xa9\x46\x47\x65\x6e\x89\x9f\x6a\xe7\x3b\x1d\x53\xb6\x0c\x1d\x37\x44\x5d\x10\x87\xf4\xd9\x54\xd0\xf1\x6a\x6a\xd2\xa7\xa6\x97\xf7\x3c\x75\x7f\x04\xf8\xf7\xf2\x95\x77\x0d\xe1\xa5\x58\x38\xe5\x53\x8b\xce\x65\x9c\x2f\x84\x92\x23\x20\x0e\xfe\x7f\xc5\x3a\xad\xb3\x87\x7d\x69\xfa\x81\xf1\xd7\x45\x46\x6a\xb6\x6d\xac\xe3\x7b\x79\x7e\xcf\x69\xd1\x15\x05\xa6\xec\xec\x50\x89\xa4\xa0\xd3\x80\x41\x1c\xd2\xe7\x63\x39\x1f\x8d\x56\x09\x48\x49\x66\x25\xf9\x1e\x78\x74\xde\x74\xc0\x79\x8e\xf6\xb1\x61\xf8\x5e\x77\x24\xef\x68\xcf\xc3\x98\x11\x28\xda\x0f\xe2\xa0\x3e\x90\xf6\x77\x07\x40\xcf\xa0\xa7\xde\x0b\x42\x6e\x93\x95\xcc\x5c\x49\xf8\x83\xa3\x82\x2b\x1d\xbb\x6e\x76\x4b\xdc\xff\x07\x0b\x56\x48\x7a\x69\x07\x51\xeb\xd2\x85\x4a\x17\xe8\x5e\x00\xe0\xe0\x0e\x58\xb9\xb1\xa6\xf9\x71\x6f\x98\x91\x98\xcf\x63\x91\x5c\x33\x8b\xe7\x71\x24\xbf\xc9\xfe\x35\x23\xbb\x8a\xaf\x4e\x2e\x0f\x05\x07\xda\xfc\x08\xc4\xc1\x1d\xe8\x26\xb8\x64\x3a\xd8\x3f\x16\x7a\xe9\x5d\x9a\x1b\xba\x1a\x01\xce\x0d\x01\xce\x69\xde\xcf\xad\xbf\x74\xc8\x0e\x92\x4a\x19\x64\x85\x10\x75\x41\x1c\xfc\xff\x2a\x31\x8d\x87\x52\x59\xdd\x53\xf8\x42\x60\x6d\x20\x65\xfa\x7d\x26\x8b\xc0\x2b\x6f\x92\x0a\x66\xaa\x84\xfd\xd3\x5d\xcd\x19\x08\x12\x10\x75\x41\x1c\xd2\x1b\x63\xff\xcf\xf1\xe3\x4a\xde\xfa\x91\x61\x47\xa1\x12\x8c\x7c\x02\x25\xf8\xf7\xa6\xa8\x04\x3b\x25\xee\x19\xdc\xf9\x2a\xee\xcc\xdd\x8b\x70\x00\xc4\x41\x7d\x00\x14\xeb\x06\x2d\x2b\xfe\x13\xeb\x46\xf9\x8c\xb4\x84\x91\x89\x5a\xef\x14\xed\x5f\xa7\xcb\x74\x62\xa9\xc0\x82\x6e\xf0\x3c\xfb\xa5\x83\x45\x34\x5e\x98\x8e\xca\x9b\x0d\x91\xb5\x37\xdd\x3a\x67\xb2\x72\x82\x1c\xeb\xce\x1f\xba\x1d\xaa\xfd\xf3\x6a\x4e\x1a\xbf\xc3\xd3\x07\x4b\xe6\x0b\x46\xf2\x17\x31\x0e\x64\xb9\xd4\xd7\xef\x97\x7f\x0f\xff\xd9\x1d\x73\x26\xeb\x44\x47\x48\x97\x3d\x5f\xe4\xf7\x88\xc2\xc6\xfd\x19\xc9\xd2\x51\x70\x34\xe7\x86\x98\x34\xd5\x52\xa6\xda\x97\x19\x7e\x76\xf2\xb8\x17\x28\x75\x95\xf7\xcf\x64\xb4\xc8\xb1\xee\x9d\x81\x6a\xec\x77\x89\x55\xe3\x1e\x74\x8c\xb8\xe6\xa8\x0f\x49\xc6\xb5\x3e\x0a\xa2\xd6\xe3\x6b\x13\x38\x4a\xa7\xc7\xa0\x7b\x29\x9c\xc9\x68\xaf\x21\x5d\x76\x39\xa9\xa8\x4a\xc3\xf4\xf7\xbe\xa1\xce\xf6\x51\x74\x8e\x1a\xe3\x51\xc4\xed\xf0\xcd\x28\x59\xa9\xe4\x31\x3e\xb1\x6b\x58\x55\x67\xb2\x7f\x86\x2f\x72\xac\x5b\xa2\xb4\x92\x69\x83\xab\x66\x3c\x31\x50\xe9\x17\x49\xa7\x02\xef\x66\x51\x50\x25\x11\x8a\x4e\x70\x8f\xb3\x60\xd9\x4a\xce\x0d\xbb\x33\x19\xad\x36\xd2\x65\x57\xc5\x98\xe7\x1f\x6c\xb5\x46\x77\xb4\xf2\x32\xa1\x65\x0c\xa2\xfc\x8c\x3d\xe0\x23\xd3\xb8\xbb\xcf\xf4\xc4\x96\x01\xeb\x48\xe4\xfb\x99\x8c\x16\x39\xd6\xcd\xb5\x58\xba\xeb\xae\x42\x32\x8a\x71\x4e\x9c\x90\xe0\x72\xde\x5d\xe1\x9c\xa8\xc5\xc8\xc4\xba\xf7\xcf\xdb\x55\x85\x65\x56\x47\x3c\xce\x6c\x0d\x10\xf4\x97\x7a\x6a\x84\xc7\xf9\xd3\xf1\xf3\x2c\xc5\xb2\xae\xa9\x03\x81\x8b\xa8\x5c\x26\xd9\xc5\x43\x2d\x7d\xbc\x8b\xc6\xc2\x71\x65\xbf\xee\x51\xc4\xb3\x41\xd1\x15\x00\x07\x6f\xf4\xeb\xf7\x24\x3a\xc4\x85\xd5\x1f\xe0\x2e\x49\x58\xfe\x24\x4e\x10\x41\x7f\xfd\x54\x3a\xd1\x4a\xf1\x96\x29\x56\x4c\x6c\xcf\x57\x53\xe8\x15\x3b\x88\x43\x8a\x6f\xf8\x3c\xfc\xb6\x84\x2f\x31\x96\x73\x62\x7e\x54\xc8\xce\x89\x4b\x51\x65\x64\xcb\x29\xdb\x36\x41\x67\xe1\xbb\xc8\xa0\xf6\xa9\x16\x8a\x6f\x00\x38\x78\x43\xce\xb2\x94\xda\x9b\x4b\x60\x40\x67\x21\xc1\xbb\xa1\xb2\x68\x4c\xa7\xfc\x66\x49\x4d\x9e\x2b\x59\xed\x83\x8b\x5a\x26\xe6\x8c\x3f\xf4\xfd\x0e\x88\x83\xd7\xc5\x57\xc7\x64\x39\x39\x7e\xed\xf8\xe5\xfc\x5b\x67\x89\xf7\xb8\x72\x4e\x61\x58\x47\xd4\xc6\xcc\x7d\x28\xf7\x72\xf3\xd8\xf1\x2f\x71\x22\x1a\x3d\x88\x83\x6e\xf6\x9f\xff\x7e\xb3\x07\xb5\xcd\xd3\x1c\xe8\xbc\x81\xb7\xc6\xef\x5f\x22\x68\x2d\xf5\x9e\x63\xe2\x6b\x6b\x9b\x22\xfb\xb4\x6a\xc5\x1a\xd6\x84\xb3\x99\x8c\xa0\xd2\xc0\x3b\x68\x5d\x15\xc4\xc1\x1d\x48\x78\x78\x3f\x52\xec\xee\x4a\xac\x99\xc8\x1d\x22\xbb\x84\x00\xdb\x94\x57\x4b\xab\xea\xf9\x8a\xe8\xf3\x5d\xb6\x97\x86\xc8\x34\xa0\x1d\x95\x41\x1c\xdc\x81\x83\x01\xf4\xaf\x5b\xd2\x6e\xe7\xc3\xbe\x9c\x4f\xd4\x91\xd2\x30\x93\x3f\x6f\xc7\x4d\x78\xfc\xab\xfa\xc6\xd8\xd4\x4f\x66\x94\xff\xc6\xce\x40\x1c\xfc\xff\x6a\x58\x4f\x94\xd5\xa7\x72\xe4\x38\xba\x56\xa2\xca\x64\x3d\xb1\xb5\x4a\x38\xb1\xfb\xcb\xa5\x9d\x22\x6f\x17\x5b\xce\x72\xde\xa9\x13\x44\x5d\x10\x07\xaf\x9b\xb0\x51\xd4\x92\xbd\xab\x65\x43\xe0\xb2\xd4\x23\x48\xba\x53\x26\x9d\x31\x63\x46\x2e\x34\x23\x55\x80\x3b\x1d\xd1\x73\x49\xeb\x02\xc2\x01\x10\x07\xdd\xec\x01\xb1\x6e\xd0\x3d\xec\x34\x07\xf6\x86\x0e\xa4\x19\xf9\xf5\xbe\x8a\x4b\x7e\x42\xbb\x3b\x49\xa0\x44\x70\xc4\x78\x39\x79\xf9\x49\x9f\x5b\x71\xc5\x2b\xfb\x64\xec\x76\x68\x51\x0d\xc0\xc1\x1d\x10\x37\x57\xd9\x57\x25\xc1\xbe\xc9\xa6\x57\x67\x76\x29\x21\xb4\x6f\xbc\xb3\x09\x63\x35\x98\x3a\x81\x45\x38\xa8\xea\x49\x8e\x4b\x2a\xa2\x2e\x88\x83\x3b\x70\xb7\x75\x51\x3b\x53\x9f\xc6\x71\xf8\x5b\x70\x58\x9e\xcb\x1f\xf7\x94\xf3\xb3\x9b\x17\x34\x9d\xb9\xd5\x4d\x3d\x0b\x2f\x39\x7b\x43\xc7\xb5\x81\x38\xf8\xff\x55\x7a\x10\x33\x97\xee\x9c\xa0\x56\x13\xea\x05\xe1\xee\xb1\x79\x5d\xac\x25\x05\xf2\xba\x67\x1c\x5b\x77\xde\xc6\xe7\x11\xbd\xd8\x80\x1e\x26\x40\x1c\xbc\xae\x8a\x57\xbe\x8f\x28\x9d\xd3\x64\xec\x23\xa7\xd9\x6e\xbe\x1f\x8a\xa2\x76\x8b\x29\x17\xac\x50\x88\x3b\x87\x4a\x0f\x6c\x0d\x82\x02\x11\x0e\x80\x38\xa8\x0f\x1c\x01\x1e\xfc\x00\x13\x8a\xd3\x1c\xd8\x38\x8a\x4a\x5c\x9a\xcf\xbe\x9e\xcd\x50\x1f\xec\xa0\x98\xf8\x72\x74\xc7\xeb\x17\x8a\xf9\xa7\xb6\xb1\x4d\x22\x72\x3d\x17\x3b\xe8\xc8\x3e\x10\x07\x77\x60\x08\x2d\x3e\x42\xc5\x94\xda\xc1\xfc\x99\xf5\x94\x47\xee\xee\x3a\xb9\xef\xad\xd8\x72\xf5\x9a\x9f\x46\x52\x0f\x0a\x2e\xba\x3e\x9e\x44\xd4\x05\x71\x70\x07\xea\x2f\x16\xb0\x0c\xbe\x73\xeb\x3e\x27\xb4\x80\x87\x99\x2f\xb0\x66\x7a\xbf\x5e\xeb\xe9\x91\xe2\x9d\x4e\xc1\xce\xc2\xc5\x67\x34\xd0\x82\x15\x88\x43\xea\xd9\x97\x13\xfa\xf7\x7f\x61\x38\xaf\x89\x85\x88\xa6\xab\x84\x6b\x9b\x3d\x58\x1d\xc6\x30\x77\x20\x7c\x2f\xa6\x4d\x55\x3a\x1b\x0a\xdd\x0b\x40\x1c\xbc\x6e\x28\xb7\x22\x6a\xdd\xe7\x89\xd4\xaf\x34\x21\x18\x05\xf7\xb6\xa4\xea\x2f\x16\xfa\xdd\x1e\xd4\x13\x90\x12\x73\x99\x99\x55\x9d\x8e\x45\x38\x00\xe2\xa0\x3e\x00\x88\x75\x83\x66\x77\xa7\x39\xa0\x2b\x89\xa1\x93\x99\xc6\x63\x3f\x9a\xcf\xfd\x66\x6d\x8b\x68\x5c\x53\x2c\x75\xb5\x30\xf3\x03\xee\xfd\xf2\xcd\x54\x73\x7c\xcb\x72\x68\x27\x55\x00\x07\x77\xc0\xba\xff\x9e\x7f\x2c\x2a\xed\xeb\x4e\x61\xb5\x4e\xcd\x88\xed\xcf\x0b\xdf\xab\x5d\x88\x56\x62\x0f\x05\xa8\xe2\xc6\xb0\xb8\x06\xa0\x97\x0c\x20\x0e\xee\x40\xb5\xa1\xf8\x2f\x4b\xd6\xc4\x0b\x6e\xc7\xb7\x92\xde\x5f\xd8\x88\xec\x51\x20\x57\xcf\x98\x9e\x35\x77\xa1\x68\x26\x5c\xb6\x52\x69\x40\xd4\x05\x71\xf0\xff\xab\x20\x03\x36\x02\x37\x85\x06\x7a\xa9\x6a\x41\x89\x94\x63\xaa\xc2\x46\x3f\x4d\xdb\xfa\xa7\xf6\xd7\x4b\xbd\xb8\xb2\x59\xc4\xb1\x6e\x42\x8b\x8b\x00\x0e\x5e\x37\x9a\x5e\x3b\x2c\x59\x80\xd1\x79\xd8\xc4\xde\x7a\xa1\x68\x9c\xc3\xf5\x99\x51\xef\xf9\x4b\xa1\x6b\x0d\xdb\xee\x56\x2f\x2e\x37\x26\x23\x1c\x00\x71\x50\x1f\xb8\xf6\x77\x07\x40\x53\xed\xd3\x1c\xf0\x7a\x63\xfe\xee\x1c\x7b\x33\x1a\x9f\x6f\xdf\x1f\xfb\xd1\xdc\xa0\x32\x6f\x7a\xfc\x98\x67\xec\x63\xc6\xa4\x87\x5d\xcf\xbc\x64\x87\x11\x63\x07\x71\x70\x07\xca\xf7\xb7\xbe\x94\x6c\x3d\x9b\x0e\x7a\x19\xca\x39\x64\xcc\xd3\xba\xf3\x83\xd8\xf4\xa7\x54\xe7\xf7\xc0\xa9\x9a\x5d\x45\xcd\x28\x0e\x44\x5d\x10\x07\x77\x20\xa9\xf7\x21\xc1\x5b\xf1\xe2\x6f\x58\x23\x14\xe4\xc7\x4b\x65\xbd\xd7\xb1\x89\x16\x6e\xe0\x44\xfb\x5c\xce\xbd\xca\x4e\x34\x67\xc1\x88\xa8\x0b\xe2\xe0\xff\x57\x74\x61\x6f\x8d\xa5\xae\x06\x7f\xe6\x90\x89\xc1\xd4\x9b\x66\x41\xa1\xc9\xda\xf5\xd7\x16\x52\x92\x79\x10\x14\x39\x59\x26\xf1\x06\xfa\xcc\x0b\xc4\xc1\xeb\xca\x4e\x59\xb0\xdc\x7c\x5e\xf4\xa0\x6d\x30\x71\x5b\xae\xe8\xfe\x43\x81\xd7\x0c\xd8\x6a\xaa\x1b\x3e\xb4\xe8\x32\x99\x65\x25\xdf\x1a\x10\x0e\x80\x38\xa8\x0f\x00\x62\xdd\xa0\xe7\x9e\x53\x5f\x08\x65\x09\xdf\x0a\x1c\x20\xf5\x52\x4b\x1c\x15\x79\x4c\x79\xf9\x25\xcd\x67\x72\xcf\xe2\x3f\x33\xde\x66\xaf\x87\x87\xe5\x64\x92\xa1\x3d\x99\x40\x1c\xdc\x01\xc1\xdd\x14\xdc\x59\x63\xfc\x43\xa5\x3d\xff\x92\xb8\x7b\x5f\x93\x35\xfb\xfd\xaf\xcf\x69\xcd\x8d\x0f\x58\x97\x52\x72\xb1\x4b\x40\xfb\x88\x81\x38\xb8\x03\x9e\x56\x76\x8f\x2e\x56\x29\xe0\x39\x53\x08\x3d\xb8\x69\x17\xcb\x25\x7b\x3d\x5a\x51\x8d\x3d\x62\x1b\xf5\x82\x98\xca\x8e\x55\x10\xb4\x27\x13\x88\x83\xff\x5f\x3d\x70\x7f\x1d\xa6\xa7\x22\x7e\x21\x20\xc4\x7c\x80\xec\xbe\x17\x5e\x77\xa3\x2f\xdd\x68\x4e\xd4\xd3\xee\x1e\xf3\x0e\xd1\x3e\x2c\x68\xd7\x7e\x10\x07\xaf\x7b\x79\xf9\x4d\x5b\xc0\x78\xcb\xe8\x52\xa1\x21\x33\x49\xde\xc6\xbe\xef\x6f\x1c\xed\x3b\x8e\x1b\xa1\xae\x06\xfd\x05\xd9\x33\x41\xd0\xe9\x1d\x20\x0e\xea\x03\xda\x7f\x77\x00\xf4\x10\x7a\x9a\x03\x9b\x24\x6f\x89\x38\xd6\xaa\xce\x45\xcb\xf0\x1c\x7a\x2f\x04\x2a\x8f\x1c\x28\x0c\x08\x1b\x17\x54\xc7\x77\x4c\xd5\x52\x84\x9a\x40\x7b\x30\x80\x38\xb8\x03\x2a\x7d\x7e\x98\xb6\xb5\x5f\xa9\x7c\x0d\x89\x6b\x17\xd1\xce\x25\x49\x4d\x58\xb4\x96\x9d\xac\xbb\xbb\x3f\x71\x2c\x7d\x33\xdc\xbf\x87\xa8\x0b\xe2\x90\x9e\x0d\xa7\x4a\x2e\xcc\x54\x2e\xdd\xe0\xf1\xad\xd6\x61\xde\x7c\xd7\x66\x82\x5f\xa3\xb7\x1e\x60\xff\xec\xdb\x3e\x8d\x61\xdf\x42\x21\x54\x17\xc4\x21\xed\xd8\xce\x9a\x52\xca\x64\x16\x60\xf2\x60\xfa\x7d\xd6\xb9\xfa\x7a\xb6\x6d\x95\xb6\x36\x95\xbc\xa1\x85\x35\x1d\xff\xe5\xb5\x9c\xec\x1d\x44\x5d\x10\x07\xaf\x7b\x30\x16\x62\x9c\xdc\xcb\xe8\x5e\xf6\x65\xa8\x9f\xf5\xc3\xd4\xae\xfe\x84\x30\x7a\xfb\x84\x73\x11\x66\xf4\xac\xe7\x82\x43\x38\x13\xc2\x01\x10\x07\xf5\x01\x50\xac\x1b\x14\x18\xfc\x27\xd6\x8d\xe2\x83\xb4\x86\x21\x54\x84\x53\x2a\x78\xfc\xd2\x22\x84\x46\x73\x95\x88\xe6\x4f\xc9\x61\x65\x92\xe6\x8d\xaf\x36\x94\xe6\x5b\x54\xfd\x5c\xbb\x3e\x4b\x67\xb6\x86\x01\xba\xd0\x69\x9e\x6e\x19\xd6\xd5\x4c\xc7\xe1\xb7\xbe\x9d\x66\x69\xaa\xec\x46\xbf\x77\x4f\x05\x47\xfa\x83\x80\x0e\xe5\x0b\x7c\xd7\xb6\xdf\x8f\x1e\x3c\x87\x3e\xc5\x04\x70\x70\x4f\x5f\x2b\x77\xae\x37\x98\xf6\xdb\x55\xb1\xf4\x6f\x53\x9c\xef\x8d\xba\xe3\x98\x1a\x80\x67\xf9\x61\xa4\x40\xf8\xe3\x10\xaa\xb4\xcb\x39\x44\x5d\x10\x07\xf7\xf4\xcf\x54\xa3\xec\x6d\xfd\xda\x12\x27\x89\x6a\x0b\xa9\x87\xfd\xb3\x07\x27\xfb\x2a\xab\x0a\xa5\x6f\xea\x9d\xe3\xda\x89\xbf\xfc\xf7\xfe\x0a\xe2\xe0\x3e\x29\xdf\x2b\x08\xd6\x0f\x4c\xdf\xce\xb5\x8b\x9f\x7e\x13\xe9\x15\xf1\x5b\xba\x39\x7c\x8f\x20\xfb\xa1\xac\xf8\xa7\x05\xf6\x99\x3f\xd0\x89\x63\x20\x0e\x5e\xf7\xb3\x09\x5a\x9f\x45\xd9\x58\x4f\xa6\x51\xe1\x1f\xa3\xd5\xd0\xd1\xe2\xfd\x07\x6a\x1d\xbb\xaf\x2c\x93\xcd\x1c\xc9\xf4\x9b\x33\xc3\x11\x9e\x82\x38\xa8\x57\xf9\xfc\x3d\xd6\x0d\x8a\x04\x9f\x1e\xeb\x26\x1c\x88\x3f\x54\xb4\x24\x32\x93\x2a\xf6\xf5\x7b\x86\xd6\x1c\x14\xf2\xd0\x7f\xa2\xc1\xba\x00\xab\xb9\x2b\xd9\xb7\xff\x1d\xe5\x34\x22\x22\x0d\xe2\x90\x63\xdd\x38\xb1\x6b\x82\x42\xc7\x41\xbb\xf4\xaf\x0f\x58\x8b\xde\xc8\x1f\x37\x49\xe0\x33\x1f\xd7\x14\x79\x87\x9e\xaf\xd9\x2f\xda\xda\x30\x44\x54\x06\x71\xc8\xb1\xee\xf1\x5b\x77\x15\x3e\xe0\xf1\x28\x8f\x64\xb1\xcb\x1a\x1b\x07\xdd\x0d\x6e\x52\xa6\x1b\x70\xaa\x7a\x52\x7a\x60\xf7\x0d\x85\x8c\xed\x10\x51\x19\xc4\x05\xc8\xfc\xbf\x5f\xf2\xdf\x95\x7d\xbe\x18\xfa\x07\xbe\x15\x45\x1f\x8c\xdb\xbc\x64\xb0\xb8\x43\x1f\x31\x66\xc0\x71\xbb\xa9\x48\xf1\xa0\x74\x6f\xb9\x9e\x7e\x9d\x00\x8a\x75\x3f\x63\xa9\x3a\x7e\xe5\xf6\xc8\xc1\x3a\x3e\xc0\x5b\xf4\x7e\xd4\xd5\xcb\x82\xb4\xdb\x3f\xbf\xe6\xa6\xa4\xe5\xf2\xcc\x10\xb5\x16\x17\xfe\x3b\xe3\xab\x57\x2c\x6f\x51\x7e\x20\xc3\xd1\x7f\x4b\xe7\xc5\xe8\x91\xb2\x9f\x97\x5b\xf4\xed\xf0\x8d\xea\x7e\xdb\x10\x8b\x05\x57\x5f\xeb\xc0\x7f\xa1\xb6\x8e\x2c\xbf\xb4\x03\x82\x08\x1e\xfc\xc4\x09\x40\x79\x6f\x26\x31\x96\x62\x2f\xba\xff\x31\xe3\x87\xd4\x7c\xeb\x5c\xb0\x26\x79\xe2\xff\xbd\x58\x37\x68\x70\xa7\xc4\xba\xd1\x83\x92\x83\xd2\x56\x83\x4b\x25\x03\x9d\x1c\x23\xd6\x1c\xd0\x72\x9d\xed\x16\x6f\xdd\x8e\xa2\x7e\xa1\x8f\x89\xb7\x92\x15\xf2\xf1\x5f\x28\x85\x92\xa4\x5e\xce\x49\x92\x31\x87\x79\x36\x67\x41\x87\x87\x5f\x2f\x49\xfd\x4f\xde\x14\x4b\x8b\x96\x98\x0c\xd6\xcc\x92\x4f\x41\xff\x42\xf1\x84\x0e\xd2\xfc\xe7\x9b\x5e\xb7\xfd\xba\x4e\x26\x73\xab\x7c\x2e\xb3\xd4\x62\x4e\xa3\x3e\xd5\x2c\x47\x9a\x95\x78\x6f\xf5\x0b\x3f\x14\xeb\x06\x5d\xfe\x9f\x58\xb7\x04\x52\xac\x9b\xcc\x3a\xa5\xcf\xe1\x1a\xb1\x53\xba\xd4\x11\x26\xab\x79\x5f\x23\xbd\x8b\xb4\xba\x42\xb7\xd7\x82\xf4\x2d\x6c\x65\x19\x63\x5c\xaa\xb3\x58\x08\x6f\x42\x8e\x75\x47\x95\x13\x0a\x12\x71\xc6\x4a\x6e\x6c\x33\xc5\xc5\x2c\x4e\xc7\xbd\xda\xc6\x74\x1c\x11\x3d\xc7\x4f\x4e\x2e\xf3\x26\x10\x33\x7e\xe7\x2c\x2e\x2b\x81\x1c\xeb\x36\x08\xce\x71\xc6\x23\xd2\xc9\x98\x70\xf9\xe1\x22\xe6\x5b\x41\xc8\x26\x32\xb3\x57\x11\xc7\x16\xe7\x51\xec\x7a\x87\xcb\x93\x41\xfb\x4c\x46\x8b\x1c\xeb\xd6\xa0\x8c\xaf\xcf\xf2\xe3\xa1\x5d\x9a\x97\xc5\x30\xdf\xff\x71\x27\x22\x4b\xed\xd7\xd1\xbd\x8b\x4a\xd3\xd3\xf9\x62\x26\x28\x8c\x57\xcf\x64\xb4\xc8\xb1\x6e\x2e\xb1\x72\x7b\xcd\x02\x89\xe0\x36\x5b\xf6\xbb\x36\x47\x41\x3d\xc2\x2c\xc6\xcb\x4e\x32\x06\x3f\x3a\xcf\x29\x53\xe5\x4d\xfd\x2e\x3c\x93\xd1\x22\xc7\xba\xa5\x5d\x5e\x56\x70\xa8\xf1\xd9\xbe\x2e\xdd\xa9\x5d\x59\x9c\xd3\x66\xdf\x6a\x26\xb9\x78\x3f\x29\x5a\x20\x7e\xc1\xa1\x6b\xb1\xa0\xf2\x4c\x46\x8b\x1c\xeb\xbe\x9c\x48\x9c\xe6\x20\xfb\x4a\xc9\xa0\xfa\xc0\x8e\xc8\x13\x27\x42\x24\x71\xa7\xd9\xb1\x80\x24\x18\xff\xbb\xd5\x9f\x64\xb1\x9c\x88\x33\x19\x2d\x72\xac\x3b\x23\x93\xc9\x96\x48\x93\xb2\xcb\xf6\x33\xa5\x8c\x44\x94\x37\x6f\x83\x73\x51\x67\x15\x1d\xfb\x46\x15\xeb\xf1\x66\x88\xee\xcb\xf9\x33\x9b\x0e\x81\xfe\x52\x4f\x9b\x0e\x11\x74\x3a\xd3\x3a\xf2\xf2\x08\x69\xc4\x08\x62\x57\x47\xe6\x11\x1a\x59\x13\x5e\x75\x19\xc4\xd5\x63\xae\x8e\x7a\x39\x1c\xb6\x0a\x3d\x0a\x81\x38\xf8\x74\xc8\x07\x0d\xd5\x69\xb0\x79\x32\xff\x5c\xbc\xc0\x90\x6e\x40\xf2\x17\x5d\xe5\xf0\x10\xc3\x13\xb9\x40\x23\x52\x2d\x13\xd6\x99\x4f\xd0\x41\x86\x20\x0e\x3e\x1d\xba\xb9\x53\x4a\x76\x7e\x87\xe2\xb0\x3f\x43\x9b\x3e\xb3\x2c\x43\xe3\xfa\x8f\xf1\x36\xe2\x17\x04\x34\xc3\xcf\x45\xee\x45\xbb\x0c\x37\x23\xea\x82\xb8\x00\x29\x14\x89\x7f\xd7\x2d\x35\xfe\x4d\xc5\x3f\x30\x93\xd3\x62\xf6\x86\xbb\xb8\xec\x65\x57\xb2\x93\xfb\x31\x7a\x42\xf6\x87\x8c\x17\x9d\x9f\xb3\x0c\xb7\xa0\x2c\x13\x88\x43\x3a\xdc\xd4\x2d\x9b\x25\xda\xfe\xb8\x0d\xf5\x08\x83\xb0\xdf\x23\x3c\x3f\x1d\x35\xfd\xe7\xdd\xc2\xd0\x64\x1d\x9e\x2d\x95\x03\xea\x00\x4e\x44\xac\x1b\xc4\x05\x48\xa1\xa0\xf9\xfa\x05\xfd\xa7\x3f\xff\x6d\x97\x5e\x40\xd7\x3c\x4d\x81\xe9\x87\x38\x66\x29\xb2\xdf\xd8\xdf\xda\xf2\xbe\x7e\x52\x5a\xcf\x22\x7b\xc3\xed\x1a\xb7\xe2\xd5\x92\x04\x36\xf5\xfb\x45\x7f\x24\xa1\xb8\x15\x88\x83\x2b\x50\x54\xac\x69\xfb\x7b\xc2\x5d\xc5\x34\x7c\x5a\xa4\xc2\x9f\x71\x37\x55\xae\xf2\x18\xb7\xb5\xbf\x35\x64\x2b\x47\x06\xa7\xcb\x2a\x14\x51\x17\xc4\xc1\x15\x50\x9b\xef\xd2\x73\xc5\x7d\xb9\x8e\x61\x2a\x2b\xbd\xd6\x68\x92\x8f\x79\x55\x30\x58\x27\x21\xf7\xe8\xd0\x42\xec\xc6\x09\xbb\xb0\x0e\xa2\x2e\x88\x83\x2b\xf0\x11\x15\xef\xf6\x1b\xe9\x62\x3f\x39\x73\x31\x7c\x8b\x1b\x4d\x23\x77\x6f\xc8\x07\xa6\xc7\xe6\xb6\x50\x11\xad\xad\xfe\x21\xdb\xb2\x40\xd4\x05\x71\xf0\xdf\x37\x04\xbb\xdc\x4e\x44\xac\x9d\xaa\xa4\x52\x46\xad\x5d\x9d\x14\x45\x9f\x25\xd4\x90\xea\x36\x6e\xdf\xbd\x3b\x1b\x65\xa2\x54\x21\x47\x88\x19\x31\x88\xfb\x47\x81\xff\xb9\x59\xfe\xc5\x01\xd0\x2d\xec\x34\x07\xb6\xaf\x30\x94\xf2\x90\x9c\xcb\x63\x32\x97\x77\xda\xd1\xf9\x5e\x24\x50\x80\xcf\xbd\x54\xf7\xcb\xc5\x87\x4b\xf0\x00\x1d\xe7\x95\x30\x14\x91\x05\x70\x70\x07\x76\xb0\x5a\x2b\x44\x1e\xe9\x65\xb6\xad\xe8\x79\x3c\xb9\xfa\x72\x89\x49\x28\x7d\x35\xb0\xea\x75\xae\xd0\xe1\x3e\xaa\x59\x3d\x26\x14\x95\x07\x71\x70\x07\xda\xa3\x8e\xa5\x7a\xe4\x84\x15\xab\x33\x1a\x5f\x2a\xae\xd0\xdc\x91\x4f\x5b\x57\x23\x5b\x4f\xb4\xbc\x9e\x1d\x5d\xbb\x7a\x8c\x0b\x45\xee\x40\x1c\xdc\x01\x87\x4f\xfe\x99\x61\xe9\x86\xfc\x26\xba\xaa\xfb\x0f\x7c\xfc\xd3\x53\xe3\xd7\xf2\x1b\xec\xf4\x86\xab\x3b\x16\x06\x43\xb9\x19\x64\xa0\x8f\xbd\x01\x1c\xfc\xf7\xfd\x9e\xb5\x58\xf3\x94\x7f\xd0\x2d\x22\xf8\xe9\xe8\xee\x1b\xa9\x3a\x3b\xaa\xd9\x26\xda\xc6\x5b\xca\x3d\x8b\x2e\x19\x99\xfa\x5d\x8b\x08\x07\x40\x1c\xc2\x01\x09\x40\xac\x1b\x34\x9f\x38\xcd\x81\x76\xae\xd1\x2b\x9b\xca\x02\x05\x53\x89\xd4\x98\x69\xf5\x9e\xb2\xa9\x9b\x81\x82\xf8\x49\xcf\x5f\xc4\xa6\x9a\xf4\x64\x88\x28\x40\x9b\x95\x81\x38\xb8\x03\xdb\xd2\xcf\xd0\x99\x5d\xe8\x28\xe3\x8f\xcc\xcc\x0c\xb0\xbe\x90\x12\x69\x50\x6c\x75\xd3\x88\xbb\x99\x70\xed\x3a\xb6\xd9\x6c\x42\x6f\x8c\x41\x1c\xdc\x01\x86\x41\x67\xaf\x14\xb2\xa1\xe9\x74\x2e\x0a\xdc\x19\xde\x74\xb9\x00\x27\x26\x92\xcb\xdb\x8f\x53\xe4\xff\x1c\x16\x7e\x8c\xe8\x7d\x8b\xa8\x0b\xe2\xe0\x0e\x18\x75\xff\x7a\xa9\x8f\xf6\xee\xa5\x23\x7b\x11\xd9\x89\x43\x67\x29\xca\xfa\xce\x40\xcc\x5e\x33\xf5\x2e\x95\x86\xdc\x49\x82\x34\x14\x69\x04\x71\x48\x51\x49\x32\xa2\x98\xd7\x3c\x5b\xbc\x91\x04\xb9\x4d\xe8\xb4\x3d\x3f\x25\xec\x97\x6e\xdd\x5a\x09\x4f\x78\x53\x85\x7f\x73\xd8\x86\x0b\x07\xe1\x00\x88\x83\xfa\x00\x20\xd6\x0d\x9a\xdc\x9d\xe6\xc0\x8b\xc4\x13\x97\x82\xd7\x0b\xa6\xbb\x2f\xca\x8c\x8a\x4f\xf4\x7b\x17\xda\x34\x1d\xb8\xd4\x70\xa8\x4a\x7b\xef\xe3\xf6\x0f\xe7\x41\x1b\x55\x81\x38\xa4\x95\x5c\x1b\xb9\x6e\xf4\x0a\x0a\x9c\xe7\xb7\x17\x86\xf9\xbc\x57\xc7\x28\x3d\x26\xd4\xcc\x02\x05\xb8\x3e\x70\xdc\x7f\x38\x38\x72\x38\x0a\xad\xe4\x02\x38\xb8\x03\xb5\xf9\xb5\xf6\x41\x05\xa3\xcc\xd3\xa1\xa3\xd4\x4c\x54\xd9\x9f\x16\xa8\x44\xf9\xa9\x0e\x9a\x56\x3e\x49\xc5\x4d\xaa\x8b\xf3\xbd\x47\xd4\x05\x71\x70\x07\xbe\x5f\xbe\x3d\x52\xc5\x89\x1f\xaf\xb0\x17\xd4\xa2\x82\xeb\x40\xbe\x6c\x55\xfb\x09\xdb\x6b\x7b\x62\x84\x38\xc6\xb1\x6c\xe6\xd2\x04\xa2\x2e\x88\x83\xff\xbe\xe4\x9f\x58\x65\x8d\x3c\xdd\xd5\xc4\x5b\x6c\x84\x0f\x9f\x0b\x5e\xa1\x7e\x55\x1a\x82\x8d\xf3\x32\x41\xed\xe3\xdd\xf9\x26\xd3\x92\x2b\x08\x07\x40\x1c\xd4\x07\x00\xb1\x6e\xd0\x4c\xfb\x34\x07\x1a\x67\x17\x30\xec\xdd\x9f\x3d\x65\x0f\x98\xbc\xa2\x58\x9c\xda\x1c\xfb\x96\x6d\x7d\x43\xf0\xa6\x0b\x7d\x68\x88\xd4\x09\xeb\x7f\xcf\x31\x04\x71\x48\x9f\x79\x35\x19\xce\x8f\x1e\x3d\xe3\x1f\xa4\x0a\x5a\xde\xdd\x1f\xd4\x7e\x3b\xe7\x43\x3e\x55\xd7\x74\xfb\x84\xf5\xfa\x60\xc9\xb3\xca\x40\xe8\x33\x2f\x00\x07\x77\xc0\x94\x31\xa1\xad\xf6\x23\xc3\x55\xeb\xe3\x89\x7d\xd3\x77\x09\x05\xb7\x75\xf9\x16\x8f\xc8\xc4\xf4\x67\xc3\x1e\x75\xcb\xc9\x58\x24\x23\xea\x82\x38\xb8\x03\x89\x4a\x39\x86\x66\x96\xaf\xee\x4d\xd0\x19\x8b\xbf\xb0\xae\x08\x12\x57\xfc\x45\x9f\xe2\x27\xcb\xed\x17\x7b\x50\x7a\xf3\xbb\x39\xf4\x49\x12\x88\x83\xff\xbe\x2e\x36\xd9\xe7\xa9\x4b\xc7\xd2\x7c\x8b\xe2\x97\x08\xbe\xa8\x6f\xd2\x0e\x30\x8a\xe3\xd9\x5c\xbf\x65\xbe\xf7\x26\xc4\x80\x37\x06\x7a\xa3\x03\xe2\xa0\x3e\x00\x88\x75\x83\x1e\x7b\x4e\x73\x60\xfd\xd5\xc7\xd1\x05\xb7\xe9\x7c\x07\x9f\x36\x09\x2b\xe3\xf3\x1f\xe4\x99\xa4\x52\xf2\x46\x44\x3e\x0d\x75\x5b\x7e\xc9\x64\x5c\x51\x82\x12\x59\x00\x0e\xee\x80\x93\xb3\x15\xe9\x93\x77\x1f\xb6\x51\x92\x6b\x1a\xdf\x39\x4d\x06\x2b\x4e\xf1\x61\xf3\x24\x12\x51\x7c\x54\xe5\xc8\xe5\xc4\x1d\x93\x40\xd4\x05\x71\x48\x67\x6f\x12\x14\x93\x19\xce\x39\xf0\x60\x75\xbb\x06\x36\x75\x5c\xf8\xb8\xe8\x84\x13\xba\xfe\x9c\xde\x9a\xcf\x5f\x94\x42\x64\x73\x46\x16\x51\x17\xc4\xc1\x1d\xb0\x7b\x8e\x32\x99\x4b\x16\x5b\x64\xfb\x47\x3a\x9f\x92\xae\x45\xe4\xe1\xd1\x40\xa2\xba\x6f\x17\x91\xd2\xd1\xb5\xf9\x73\x59\x5b\xd0\x1b\x1d\x10\x07\xff\x7d\x9f\x25\x5c\x90\x14\xf0\x4e\xa3\x65\xb8\xc7\xdc\xcf\xba\xd6\x44\xd5\x92\xf4\x5b\x29\xef\xfe\x73\xfe\x67\x32\x05\x8a\xaf\x53\xaa\xa0\x5d\xfb\x41\x1c\xd4\x07\x00\xb1\x6e\xd0\x33\xe8\x69\x0e\x84\x6f\x95\xe7\x92\xb4\xa9\x7b\xa8\xd4\xa3\x5a\x1e\x52\x92\x48\xec\xfa\x6b\xf7\x13\x60\xdb\x5f\xa1\x14\x7f\x95\xda\x7c\x9e\xc2\x1b\x31\x76\x10\x07\x77\x20\x59\x74\x9a\x85\xec\x56\x77\x59\xc2\x68\xe6\x39\xc3\x6c\xab\xec\x7b\xa2\x54\x75\xbb\xd7\x7b\x07\xc6\x47\xbf\xa9\xa0\x3e\xa8\x64\x47\xd4\x05\x71\x70\x07\xc2\x3b\xb1\x63\xa7\xfc\xd6\x51\xb2\xd9\x97\xd9\xb2\xd0\xaf\x38\x4a\xdc\x47\xb9\x13\x9b\x64\xeb\xa6\xab\x7d\xe7\x62\x14\xbf\x3f\x94\x20\x03\x71\x70\x07\x5e\xf4\xa3\x3e\x49\xc3\x3b\x5e\xfd\x71\x41\x21\x9b\x08\x65\x02\x6f\x45\xfb\xd8\xb5\x9d\x42\x57\xc8\xe8\xc2\x94\x7d\xdd\x72\x30\xb4\x81\x21\x88\x43\xda\x0c\x0b\x37\xd3\x4f\x7f\xac\x69\x0e\x55\x3b\xcb\xa7\x5b\xa1\x77\x42\x7c\xf6\x90\x8e\x2b\x5d\x78\xcc\xf4\x4b\x78\xc1\xb6\xfb\xd7\x29\x84\x03\x20\x0e\xea\x03\xa0\x58\x37\x68\x59\xf1\x9f\x58\xb7\x04\x72\xac\x7b\xee\x24\x5b\x4a\xc5\xad\x2f\x3e\x84\x70\x50\x54\xb4\xe2\xc6\x38\xc7\xb7\x31\xa2\xf6\x35\xe5\xd4\xbe\x35\x06\xcf\x81\x77\x1d\x67\xf2\x41\x7c\x13\x72\xac\xfb\xe7\x98\xa3\x75\x3f\xf9\xf6\xfa\x74\xae\x1c\x67\xf6\x20\x5b\xa2\x97\xb8\xd9\x79\x2f\xfa\xd5\x16\x36\xda\x9b\xef\xb6\xed\x70\xb6\xce\x64\x9d\x08\x39\xd6\xfd\xf1\xfb\x53\x21\x0d\x53\x5e\x3b\xfa\xf3\x42\x43\x6e\xaa\x9e\x91\xfc\xb4\xf7\x99\xae\xd2\xdd\xf3\x7f\x79\x67\xb4\xa4\x95\x45\xec\x4c\xf6\xaf\x6e\x42\x8e\x75\xe3\x5c\xde\x7a\x85\xf5\x5c\x8f\xf0\xc7\xfa\x24\x66\x66\x4e\xa5\xe7\x0f\x5d\x15\x2e\xc1\x1a\xfa\x5b\xde\x9a\xcd\x74\xcc\x9f\xd6\xb1\xcf\x64\xb4\xc8\xb1\x6e\x86\x0c\xeb\x60\xc5\xc3\x8c\x32\xfa\xba\xe9\x86\xd8\x32\x53\x52\x94\xc8\xf1\x2b\xfc\x7e\xda\xb4\xe7\x2f\x7e\xfd\xd0\x1e\xc3\xe7\x76\x26\xa3\x45\x8e\x75\x6f\x54\x9a\xaa\xe1\x7c\x29\xf1\x9a\xe5\xcb\x29\x0d\xe6\x5e\x53\x9d\x6f\xa0\xa5\xd2\x51\xe5\xce\xcf\x34\x31\x8d\x33\xd9\x20\x37\x3b\x93\xd1\x22\xc7\xba\xbf\x72\xcc\xab\x4c\xba\xe5\x6c\xae\xb3\xee\xfd\x50\x65\xda\x75\x24\xf2\x63\x43\x4b\xb7\x59\xfb\x8a\x85\x15\xdc\x7a\xf2\x48\xfe\x4c\x3e\x50\x68\x42\x8e\x75\xd7\x30\x62\xdf\xcb\x18\x2e\xe3\x9a\xd2\xee\xd6\xd1\xaa\xa4\x90\x95\x79\xe2\x3a\x32\x25\xa3\x52\xdc\x4a\xa7\x3e\x74\x3d\xf2\xde\xe6\x99\xad\x01\x82\xfe\x52\x4f\x7d\xf0\x73\x58\x33\x64\x21\xe1\xbc\x78\xc9\xeb\xde\x1c\x1b\xf7\x0d\x5e\x51\x1c\xb6\x85\x49\x4b\xcd\xa1\xc5\xc2\x29\x9b\xfb\x9d\x77\xa1\x06\x07\xe2\xe0\x8d\xbe\xd1\x6a\xdf\x70\x86\x85\x84\x6e\x97\x3f\xf9\xc7\xfe\xac\x8a\x3a\xaa\x0f\x8b\xf1\x94\x45\xf3\x67\x14\x13\xb4\x37\x8d\xfd\x56\xd0\x6e\xba\x20\x0e\xde\xe8\x6f\xb9\x2c\xcc\x73\xe8\xc8\x3e\xaf\x91\x14\xde\x1a\x62\xd7\xf6\xed\x9f\x14\x4d\x7f\x1d\xa1\x4a\x87\xd9\xab\x9c\xd4\x90\xeb\xe2\x87\xa8\x0b\xe2\xe0\x8d\xfe\xba\x57\x49\xd4\xec\x00\x26\xef\x92\x5d\x13\x69\xca\x8e\x2c\x01\xd6\x97\xf9\x9d\x22\x1c\xea\x06\x2d\xa3\xf1\x94\x73\x36\xb9\xd0\xae\x9f\x20\x0e\xfe\xfb\xaa\xda\xd5\xbc\xde\xd0\x10\x69\x16\x94\x43\x5b\x45\x8b\xba\x5b\x81\xbd\xfb\x45\xbb\xdf\xd1\xe3\x6e\x4f\x74\xd6\xf0\xa1\x29\x55\x1c\xa2\xd1\x83\x38\xe8\x66\x0f\x88\x75\x83\xda\xe6\x69\x0e\xf0\xc4\x77\xed\xae\x1b\xdd\xa0\x13\x4a\x3d\x90\xd0\x34\x09\xf4\xb1\x97\xd3\xe6\xaa\xdd\x69\xa5\xce\x28\xfc\x6d\xd4\x30\x51\x0b\xed\x48\x08\xe2\xe0\x0e\xa0\xb8\x0a\x65\xdb\x30\x27\xd0\x11\xef\xbd\x16\x8c\x1c\x88\x5d\x63\x2e\x0f\xeb\xac\xfd\xfe\x19\x93\x80\x59\x8d\x81\xb2\x94\x06\xfa\x46\x1a\xc4\xc1\x1d\xc0\xfe\xda\x25\x42\x81\xd5\xf9\x82\x8e\xb2\x63\x24\x15\x2b\x96\xff\x29\x7b\xb0\x2b\xdd\x98\x90\x09\x0b\xca\x5e\x47\x24\x09\x83\x20\xa2\x2e\x88\x43\xba\xd9\x97\x2b\xec\xb7\x3f\x4c\x4d\x50\xc8\x6d\x5a\x31\x63\xfd\x6d\xfb\xeb\x98\x97\x2a\x54\xb8\xda\x8c\xbe\xc9\x79\x20\x55\xc6\x06\x5a\xac\x00\x71\x48\xf1\x18\xf4\x68\xd5\xd6\x4e\xbe\xe0\xbc\x1e\x83\xda\xc3\x43\x54\xcd\xdf\x2d\x23\xca\xa4\xd9\x55\x45\x37\xb1\x8d\xb5\x5f\x18\x50\xa7\x23\x1c\x00\x71\xd0\xcd\x1e\x10\xeb\x06\xdd\xc3\x4e\x73\xa0\x28\xc6\x6f\xce\xaf\x26\xc0\xa0\x7a\xec\x72\xc5\xa3\xc5\x3e\x26\xc3\xc3\xa2\xae\xec\x2e\x3f\x43\xae\xef\xe6\x69\x61\x3f\xa8\xdf\x41\x0b\xb6\x00\x0e\xee\x80\xe3\x05\x3d\xdf\xde\xe5\xe8\x64\x82\x88\xfb\x34\x73\xdd\xf9\xf3\x4c\x6f\xca\x89\x7b\x9d\x95\x87\x43\xbc\x8a\x89\x97\xe6\x4d\xc7\x10\x75\x41\x1c\xdc\x01\x62\xea\xc2\x55\xed\x30\xcc\x73\xe1\x58\xdb\x04\x28\xaf\xca\x43\x4c\x0b\x5e\x6f\x8d\x18\x1b\xf1\x1c\xf9\xf7\x90\xfb\x4c\x91\x41\xbb\x89\x82\x38\xb8\x03\x09\xf4\x86\x82\x56\x99\xbd\xe3\x15\x77\x83\xa6\x73\x6e\xbf\x78\x2e\x14\x3d\xca\xe4\x7c\x69\x85\x50\x7e\x6b\x4b\xf5\x89\x42\x40\x24\xf4\x29\x02\x80\x83\xff\xbe\x49\xfd\xa1\x97\x2c\xb0\xde\x59\xb9\x62\x75\xcc\xa7\xe2\x17\xb4\x50\xe8\x77\xb1\xea\x3a\x7c\x49\xd1\x91\xae\xfa\x95\x60\x65\x29\x87\x70\x00\xc4\x41\x7d\x00\x10\xeb\x06\x4d\x28\x4e\x73\x00\x57\xf4\x03\xf1\x71\xe8\xfd\xeb\x56\xdd\xfe\x02\xcd\x97\x56\x88\x4d\xab\x42\x09\xf2\x70\x29\x95\xcf\x67\x98\xfa\x85\x54\x68\x43\x11\x7c\x10\x07\x77\x60\xdc\xd2\x71\x25\x49\x6a\x45\x8f\x10\x4d\xca\x8b\x79\x4c\xa2\x72\xf1\x85\x79\xfa\x16\x37\x7b\xbd\xff\xfb\x8a\x2a\x03\x4e\x6d\x68\x37\x45\x10\x07\x77\x40\xaf\x5b\xdb\xe2\x66\x79\x2e\x87\x61\x04\xcf\xf6\xe7\xc4\xa0\xe6\xf3\x01\x97\x4d\x5a\xfc\x5a\x6b\xe8\x37\x2c\x57\x87\xcc\xcd\xa5\x11\x75\x41\x1c\xdc\x81\x2f\x7d\xf1\xda\x7d\x95\xdf\x6c\x65\x50\x5a\x24\x38\xdf\x5c\x56\x16\xad\x48\x0d\x6b\x25\x1c\xd7\x38\xb8\xba\x8c\x5e\x1a\x2a\xa5\x86\xa8\x0b\xe2\x90\xee\xb5\x4e\x7e\x47\x7e\xd2\xfb\xf1\x5f\x7f\x7f\x29\x9d\xbe\x5c\x77\x92\x45\x7c\x51\x4f\x5c\xfd\xb1\x57\x12\x7e\x84\xac\xe0\x2d\x0e\x79\x84\x03\x20\x0e\xea\x03\x80\x58\x37\x68\x76\x77\xea\x71\x6d\x8c\x7e\x8e\x33\x14\xac\x37\x55\xd8\x84\xbe\xc5\x91\xc9\x0b\xe4\x32\x73\xbc\x9a\xe1\x88\x93\x4c\x4d\x5f\x2c\xa2\x4a\xc7\x81\xc6\x0e\xe2\x90\x3e\xef\x60\x5a\xab\xb2\x14\x37\x39\x7c\x78\xae\xaa\xb7\xb7\xce\x65\xc7\x32\xf0\xb3\x50\x3d\x5b\xba\xea\xea\x2b\x5f\xce\x9a\xf7\x9a\x8b\xd0\xe7\x1d\x00\x0e\xee\xc0\xf3\x3a\x1f\xeb\x98\x3b\xb3\xb9\x2c\x1e\xea\xa8\x17\xab\x6a\xd3\xac\x24\xc4\x17\xe8\xee\x88\x5a\x72\x5f\xb7\x0b\xdb\xe8\x59\x82\xa2\xfd\x20\x0e\xee\x80\xd8\x7d\x8a\x6b\x09\xab\xbf\x33\x78\x9e\x77\x96\xea\xd9\x60\xbc\x25\x1a\xd0\xac\xf5\x6b\xcc\x5c\xa9\x7b\xea\x18\xff\x16\xff\x12\xf4\x42\x08\xc4\xc1\x7f\x5f\x41\xd7\xa9\xbd\xc1\xc0\xa8\xb9\x06\xba\xce\xd7\x4c\x54\xfc\xcc\x9f\x9a\x84\x15\xbb\xa9\x04\x9d\x93\x63\x8d\x4e\xd0\x0d\x9c\x77\x11\x0e\x80\x38\xa8\x0f\x00\x62\xdd\xa0\xa9\xf6\x69\x0e\xf0\xab\x28\xcd\xee\xcd\xaf\x39\x0c\xd2\x7c\xb9\xbd\x8a\xd1\x50\x78\x4b\xba\x0a\x45\x90\x4a\xd3\x5e\xac\x41\xa6\x7a\xc1\x39\xe7\x13\x62\xec\x20\x0e\xee\x80\x8b\x19\x67\xd5\xe2\x3c\xed\x5b\x02\x56\xf7\xba\x87\x99\xd7\x7a\x75\xc2\xfa\xf5\xbb\xbf\x34\xe7\x8e\xf6\x8c\x13\x2c\xef\x92\x69\x23\xea\x82\x38\xa4\xbd\x1d\xee\xef\x4a\x6e\x10\x98\xbc\x78\xa5\xaa\x97\x60\x61\xfc\xf3\xd7\x03\x3b\x4b\x46\x09\xbf\x2b\x77\x9b\xc7\xdd\x36\x14\xde\x9b\x41\x11\x64\x10\x07\x77\xa0\xc8\xc9\xed\x7d\x9d\x49\x30\x3e\x36\xd6\x32\x7e\x79\x4d\xbd\x86\xb2\x76\xd7\x27\x02\x76\xe9\x81\xb6\x94\x79\x73\x86\x8c\x10\x0f\xe8\x9e\x08\xe0\x90\xf6\xd2\xfa\xb5\xf0\xbb\x50\x86\x75\x55\x39\x8a\x96\x26\xc4\xb9\xae\xe0\xb5\xcd\xf9\x2a\x3b\xa6\x84\xb0\x34\x83\x08\x9b\x14\xde\x7e\x73\x84\x03\x20\x0e\xea\x03\x80\x58\x37\xe8\xb9\xe7\x34\x07\xf6\xe3\x96\x38\xea\xd6\x8d\x51\x6b\x56\xbe\x1e\x4a\xe1\x15\xda\x98\x5d\xd3\xb9\x2a\xb2\xfa\x47\xe2\xa4\xec\x1d\x9e\x0e\xa1\x19\x19\x62\xec\x20\x0e\xe9\xf8\xd6\x27\x9f\x8c\xcf\x0f\xcb\x7e\x7b\x73\xde\x90\xe4\x4d\x75\xd4\x9f\x3c\x5d\x42\xc1\xfd\x84\x7a\x3d\x3e\x5b\x3e\x56\x61\xf6\x32\xe8\x05\x0b\x88\x83\x3b\x50\xc7\xd9\x38\xb9\x1f\xb4\x5d\xa9\x68\xf1\x3e\x7a\xfc\x25\xa3\x5d\x75\x76\xd6\x21\xce\x4d\x92\x8d\xa4\x09\x12\xd4\x60\xd4\x19\x62\x44\x5d\x10\x07\x77\x60\x82\x42\xcb\xee\xda\x46\xf4\xc7\x8a\xf2\x41\x7e\xad\xc6\xb2\xe0\x6b\x9d\xef\x7c\x50\xeb\xac\x2e\xe9\x39\x3c\xed\xd5\xb0\xfa\xef\xc9\x0d\x20\x0e\xfe\xfb\xf6\xb0\xd8\xf1\x2e\xaa\xdc\x16\x19\x9a\x68\x08\x41\xb9\xf6\x93\x99\x70\xd6\xbe\x42\xd5\xb3\xd4\x20\x7b\xef\xa2\x97\xe8\x4e\xf3\x04\xc2\x01\x10\x07\xf5\x01\x40\xac\x1b\xf4\x10\x7a\x9a\x03\x5f\x4d\x43\x07\x78\x6e\x91\xa6\x88\x6e\x86\x32\x11\xbe\x44\x1d\x5d\xb4\xa7\xba\x53\xe3\xbe\x69\xe2\xcc\xc0\x5d\xa3\xf6\xeb\x23\xb4\x0b\x3e\x88\x83\x3b\xe0\x35\xf1\x79\x20\x89\x4c\xf7\x93\x5c\xb2\xcd\x97\x91\x09\x3d\x93\xe7\xad\x2f\xe9\x53\xcf\x7d\x7c\x71\x27\x45\x86\x64\x5f\xfc\x11\xb4\x0b\x3e\x88\x83\x3b\xf0\x2b\x55\xbf\xfc\x1e\x21\xd7\xa8\xaa\x04\xfe\xa5\xed\xc0\xd4\xc9\xf4\xe3\x4d\x09\x03\x74\x7f\x19\x14\xcb\x41\x83\x0b\x6b\x0f\xe9\x11\x75\x41\x1c\xd2\x4b\x41\xab\x2f\xbb\x57\x3b\x25\x2f\xe2\xbf\x8d\xdf\xf3\x75\xd2\x88\xd1\xe5\xa3\xc0\xc1\x36\x9c\x92\x89\xf2\x51\x96\xe2\xee\x61\x85\xee\x05\x20\x0e\xfe\xfb\x66\x25\x2d\xae\x6c\x9b\x73\x8a\x6b\x4f\x8c\x8e\x9f\x34\xb4\x4a\xc6\x05\x3c\x28\xb0\x4c\xb2\x9f\xce\xa8\x2a\x72\x65\x28\xcc\x86\xe6\x03\x20\x0e\xea\x03\xa0\x58\x37\x28\x30\xf8\x4f\xac\x5b\x02\x39\xd6\x4d\xf0\xec\xc4\xeb\xda\x7e\x63\xdf\xb3\x00\xca\xb9\x3e\x8a\x5f\x13\xb5\xa2\x13\xad\x34\x3a\xb7\xdf\xdf\xe0\x5e\x46\x25\xd4\xb1\x93\x3a\xb3\x35\x0c\xd0\x85\x4e\xf3\xd4\xa5\x6d\x72\x88\xd3\xed\x89\xb9\x75\xc0\x75\xc9\x68\x2f\xd9\x02\xb2\x0b\x64\x9a\x74\xd5\x11\xee\x7b\x68\xbc\x17\x63\x68\x1c\xa0\x40\x00\x88\x83\x7b\xea\xd0\xd1\x8f\x97\x49\x56\x82\xfb\x2a\xfd\x01\xef\x92\x8e\x3c\x17\xfb\xeb\x94\x24\xd1\x6f\x3d\x84\xd7\x3e\x7d\x3b\xe8\xed\xe6\x86\x3e\x19\x03\x71\x70\x4f\x3d\x48\x97\x6e\x33\xef\x7e\x89\x3f\xbc\x8c\xee\x77\x45\xfc\x79\x36\xd3\x9b\x0f\xec\x74\xea\x01\x5c\xd1\x41\x3f\x2b\xa4\x3b\x85\xa3\x11\x75\x41\x1c\xdc\xd3\x97\xad\x0f\x4b\x0d\xb7\x12\x0a\xbb\x85\x6f\x3f\xd6\xd4\xf5\x6d\xa2\x3c\x77\x14\xf4\x64\x6a\x69\x97\xd6\xfd\x65\xa2\x12\x89\x27\xf4\x49\x1e\x88\x83\xff\xbe\x37\xc5\x85\xba\xec\x5e\xea\x2f\xa1\xbf\x5a\xc1\xac\xa7\x77\xf2\xa0\xe8\xeb\x3d\x91\x6f\x8f\xcb\x8b\x5b\x11\x4e\x59\x43\x2b\xd7\x46\x78\x0a\xe2\xa0\x5e\x05\x88\x75\x83\x22\xc1\xa7\xc7\xba\x5b\x0e\x17\x57\xf6\x48\x45\xcb\x2f\xc7\x8e\x6d\xd7\x61\x9e\x43\x7f\x8e\x7f\xbc\x50\x25\x68\xae\xf1\xf5\xad\xca\x04\xf5\x6f\x4e\x7f\x44\x44\x1a\xc4\x21\xc7\xba\x55\xdd\x7e\x60\xf8\xb0\xe1\xcb\x93\x3b\x85\xfe\x64\xcd\xe7\x78\xd2\x11\x5a\x92\xc6\xb7\xf8\xd9\xee\xad\x7c\x24\xe6\x12\xc9\xd2\x06\xa2\x32\x88\x43\x8e\x75\x1f\xee\x2c\x6b\xb4\xec\x2b\x8c\x92\xf7\xbc\x32\x7b\xea\xc8\x95\x5f\x37\xf8\xf0\x7c\xb7\x15\xbf\x3a\x75\x7e\x2b\x15\x7e\xbc\x57\x38\xa2\x32\x88\x0b\x90\x41\x41\x41\xfd\x5f\x95\x6b\x9b\xa5\x44\x0c\xc5\xf4\x5b\x72\xfd\x67\x76\x4c\x2f\x61\x99\x2d\x74\xdf\x88\x1c\x45\x23\x0c\xdb\x4e\xb9\x7b\x0f\xaf\x3a\x92\x14\x8a\x75\x73\x26\x4e\xc6\x70\x6a\x14\xec\x0f\x38\xed\x3f\x25\x4d\x0d\x4e\x36\xa9\xc6\x99\x91\x74\x38\x69\x7a\x1c\xd3\xc5\x27\xe2\x67\xaf\xf9\xef\x58\xf7\x16\xd6\x0d\x5a\x52\x6c\x8c\x2c\x65\x8d\x28\x3b\x89\x5b\xb2\x98\x5a\x4d\xdf\x93\x7e\x28\xb3\xbf\x7c\xe9\x8b\x71\x88\xb3\x17\xb9\xfc\xef\x97\xdd\x57\x87\x2b\x99\xa8\x14\x92\x2e\xd9\x6d\x7f\x13\xb7\xab\x74\xd3\x1e\xfc\x54\xee\x39\xcd\xf1\xfd\xc7\x84\x27\xc6\x2f\xd1\x9e\xf8\xff\x7b\xb1\x6e\xd0\xe0\x4e\x89\x75\x4b\x4d\x17\xea\x3d\x8c\x27\xbb\x14\x91\x88\x6b\xde\xd7\x8a\x5d\xba\x82\x1d\x1d\xfa\x9b\x28\x8e\x04\x53\x7c\x1e\xeb\xb9\xec\x60\xcd\xbf\xd0\x7b\xc2\x3c\x21\x3f\x3a\x0d\xa6\x4c\x74\x93\x56\x38\x1b\x92\x1f\xbf\x6b\x93\x69\x58\xbd\xa9\xff\x3d\x77\xa4\xb2\xa8\x65\x61\xc2\xfd\x5f\xe8\xdb\x05\x2d\x6e\xb6\x1e\xf1\x48\x6f\xe5\x8c\x43\xad\x3f\xf4\x49\x91\xb1\xf1\xe7\x99\x3a\x54\x59\xed\x2e\xd7\xa9\xa8\xde\x93\x7b\x0a\xc5\xba\x41\x97\xff\x27\xd6\xed\x8b\x14\xeb\xbe\xec\xad\x69\x6f\x91\xdc\xb6\x3b\xfa\xf0\x71\x0e\xe5\xe3\xd6\xf7\xa2\x0e\x96\xca\x3c\x46\x8b\x6e\x46\xa9\x34\x1f\x7c\x2f\xa0\x9d\xc9\x91\xa4\x28\x7c\x48\xef\x56\x3e\xd3\x19\x7e\xc3\x26\x1d\x94\x71\x29\x63\x5d\x10\x98\x77\xaf\x7f\xdc\x49\x19\xaf\xc7\x2d\x16\x2a\x1f\x2e\xb6\x3d\xd9\xea\x7f\x26\x3b\xf5\xf8\x22\xc7\xba\xe5\x71\x1c\x96\x6e\xab\xd2\xb5\x70\xe2\x33\x5d\x44\xbd\x9c\xd8\x4a\xea\xd9\xf0\x79\xf4\x8f\x1e\x7d\x7a\x9d\xbc\x74\xc6\xe0\xba\xe3\x99\x8c\x56\x17\xe9\xb2\x62\x57\x28\x78\xde\xde\x70\xf6\xc6\x6a\xbb\xf1\x70\xf8\x6e\x60\x68\xf7\x0b\x66\x31\x7a\x91\x6f\x02\x56\xdc\xa5\xd9\x62\xa5\x68\x7b\x67\x32\x5a\xe4\x58\xb7\xa0\xbf\xd5\xf7\xd6\xde\xc9\xdc\xcf\xc6\x33\xd7\xc2\xbc\x2a\x44\xe8\x1c\x29\x5c\x31\xab\x9b\xdd\x2f\x58\x85\xf5\xe7\xaf\x71\x9e\x49\x9a\x1c\x25\x06\xf9\x70\x5d\x0a\x4c\x61\x99\xc6\x80\x21\xe9\xcc\x01\x19\x94\x71\x3b\x4e\x53\x1c\x0b\xda\xa8\xcf\xb3\xaf\x88\xec\xbc\xc7\xc3\x6f\x3e\xbb\x7b\x26\xa3\x45\x8e\x75\xdb\x79\xae\x2d\x98\x1a\xca\xe1\x4c\x90\xf4\x60\x4c\xbc\xbd\xd8\xfc\xb9\x9c\x59\x7c\x24\x3b\x01\x73\xe5\x98\x53\xd1\x55\xbe\x29\xe9\x4c\x46\x5b\x8d\x74\x59\x32\x0b\x77\x41\xf7\x19\xa7\xab\x83\xf8\x5f\x25\xb9\x9f\xa9\x2f\x93\x9a\xc9\x6a\x5f\x89\x7f\x49\x2a\x13\x78\x59\x52\x6f\xcd\xed\xdd\x99\x4d\x87\x40\x7f\xa9\xa7\x4d\x87\x8e\x09\x66\xcb\x5a\x3f\xca\x95\xc6\x44\xcf\x5f\xbd\x41\xd9\x37\x9e\x1e\x4d\xa6\xd3\x26\x5d\xa8\x61\xca\x48\x68\x4a\xbf\x69\x02\x1d\xbe\x09\xe2\xe0\xd3\x21\x33\x9f\x79\x22\x0b\xfa\xb7\x0e\xc3\xc5\x22\x75\xc2\x6d\x8d\xd6\xb6\x2b\x31\x46\xcf\x72\xa6\x56\x9e\x04\x4a\x6b\x91\xb1\xaf\xf9\x23\xea\x82\x38\xf8\x74\xa8\x73\xe4\x3b\x5b\xae\xd8\xe2\xe3\xaf\xc3\x1f\x72\x37\x7a\x28\xb5\xec\x49\x9b\xef\x15\x07\x49\xb5\x34\xe8\xa8\x73\xda\x78\xc4\x42\x5b\x40\x83\x38\xf8\x74\xc8\xb3\x8c\x73\xc3\x08\xe5\x5d\xa9\x23\xb1\xec\x82\x35\xc9\x7e\x0b\xa7\xdd\xa6\xce\x9c\x78\xe1\x5a\x5a\x9f\x5d\xc1\x0e\x6e\xb8\x3c\xf4\xa5\x2f\x80\x0b\x90\x62\xf8\x5f\xbf\x43\x62\xbc\xf2\x7e\x73\x09\xf9\xb7\x05\x2c\x85\xf8\x4f\x39\x4c\x17\xaa\x5f\xc7\xed\xb9\xe9\x25\x2c\x11\xfc\xa9\xd6\xb3\x7a\xfc\x3b\x07\x11\xeb\x06\x71\xff\xaf\xae\xaf\x5f\xd0\x7f\xfa\xf3\x5f\x9e\xdc\x40\x5d\xf3\x34\x05\xe4\x47\x14\xf9\xd2\x5c\x3b\x2f\xbe\xbf\x5e\x2b\x98\x9c\x5d\x52\x98\x53\x1d\x19\x70\xa7\xf5\xca\xf1\xaa\xe5\x45\x43\x67\x9e\xfa\x47\x88\xa1\x83\x38\xb8\x02\xd2\x37\x29\x05\xb5\xea\x77\x0c\x1d\xdf\xdd\xcd\xf8\x1d\xfd\x43\x87\x2d\xf5\x81\xc8\x9b\xa0\x58\x25\x9c\x7d\x4b\x89\x62\x9f\x3c\xe8\x7c\x44\x10\x07\x57\xc0\x55\x1f\xd5\x94\x98\x5b\x90\xb5\xd0\xe2\x3c\xf5\xa2\x4c\x6a\xde\x44\xc4\xb2\x42\x54\x06\x0e\xa1\x9a\xca\xf2\xee\x7a\x97\xf0\x33\x68\xd7\x4f\x00\x07\x57\x40\xf2\x19\xd5\x2b\xea\x07\xad\x84\xac\x4e\xac\x61\x4b\x2c\xe9\x6c\x8a\x5e\xb8\x34\x95\xbe\x1c\x42\xef\x5b\x9e\x06\x6a\xf1\x04\x42\xab\x83\x20\x0e\xae\x80\xc2\x9a\x11\x71\xa8\x6c\x30\xaa\xb0\x4c\x87\xbc\xd7\x65\xf7\x7e\x73\xbf\xc5\x32\xc6\x24\x7b\x63\xaf\x52\xdb\x6b\x8f\x4c\x68\xa0\x58\x37\x88\xfb\x47\x81\xff\xb9\x59\xfe\xc5\x01\xd0\x2d\xec\x34\x07\x0e\x34\x87\x45\x9d\x44\x1d\x9e\x95\xb4\x7f\xeb\x35\x31\xd0\x7e\x85\xcd\xdd\xe9\xe1\xed\x68\xdb\xe1\x32\x9d\x53\x76\x5f\x72\xa1\x1f\xda\xfc\x08\xc0\xc1\x1d\x58\xca\x55\xd2\x6c\x88\xa3\xf5\xb2\x7a\xe7\xd7\x4a\xf6\xca\x69\xf6\x33\x06\x9b\x32\xde\xe7\x31\x2c\x46\xe5\xf0\xe4\x71\xf7\x14\x68\xa7\x66\x10\x07\x77\xc0\xc2\x04\xf5\x3a\xfe\x73\xce\x25\xc3\xf9\x4f\x04\xd8\x26\x4f\xcf\xff\xcc\xd1\xbf\xb2\x29\x1f\x84\x7d\x3c\xf8\x4d\xbe\xb4\xd0\xc3\x06\x51\x17\xc4\xc1\x1d\x50\x75\x57\xea\xbe\xd7\x74\x1e\x9b\x52\x28\x8d\x34\xe6\x55\xd8\x2a\x75\x10\xe9\xd0\x3b\x26\x4f\x96\x9b\xc2\x12\xc3\x01\xcc\xdf\xa0\xcd\x24\x40\x1c\xdc\x81\x08\x81\x40\xc6\xd7\x5a\xf9\xbd\xd2\x2b\x13\x5e\xf7\x2e\xeb\x2d\x19\x61\xe9\x84\xfb\xd5\x5d\x78\x9f\x85\x8a\xdb\x87\x3a\xa0\x91\x8f\x70\x00\xc4\x21\x1c\xf0\x05\xc4\xba\x41\xf3\x89\x53\x77\x68\x3d\xbf\xa3\x8c\xfe\x33\xcf\xa4\xe3\x7d\xa5\xb2\xf7\xa8\x55\x28\x1d\xb9\x97\xb9\xe2\x48\x6a\x68\x10\xad\xa6\x9a\xf7\x2e\x0f\x36\xb4\x43\x2b\x80\x83\x3b\x60\x8f\xaf\xfb\xd0\x29\xfc\x13\x5d\xf4\x39\xc9\xe0\x9f\xda\x2c\xcc\x94\x52\xef\x42\xb2\x0c\xe7\x18\xd6\xa8\xa6\xf7\x9d\x6b\x7e\x6d\x23\xea\x82\x38\xb8\x03\x64\xf7\x07\xbd\xab\x51\x52\x99\x9c\xe8\x9f\x14\x76\x62\xd0\x71\xbc\xa5\x2d\x36\x74\xb5\xd2\x5f\xf6\x30\xaf\xf3\x7c\xd7\xad\x0e\xed\xd4\x0c\xe2\x90\x9e\x8c\x8b\x04\xec\x4a\x1a\x54\xd0\x65\x4b\x6b\x14\x36\xfd\x85\xbe\x6a\x91\xcc\xb9\x6d\x1b\x9e\x43\xb5\x0e\xa1\xfc\x54\xad\xca\x01\xdd\x12\x41\x1c\xdc\x81\xf8\xc5\x42\xff\xba\xf5\x40\xea\x36\x4b\x6c\x63\xfc\x67\x8c\x9f\xf1\xf7\x29\x30\xc8\xbb\x9c\xfe\xb8\xf5\x1d\x4d\xd6\x98\x39\x42\x1b\x76\x81\x38\xa8\x0f\xe8\xfe\xdd\x01\xd0\xe4\xee\xd4\xb3\xcc\xc6\x45\x75\xc8\x15\x37\x8b\x4c\x45\x6c\x7f\x0c\x6e\xac\x3d\xe8\x5e\x2a\xbc\x97\xf3\x75\xd4\x91\xe1\x2d\x57\xb8\xb0\xda\xe4\x2c\x62\xec\x20\x0e\xa9\x0f\x64\x8d\x73\x56\x90\xcb\x4e\x68\xa5\x58\x97\x61\x3e\x31\x19\x76\x65\xf8\xd9\x72\x67\xc0\x78\x2e\xc3\x5b\x31\x60\x28\xf8\x04\xda\xf4\x04\xc4\xc1\x1d\xd8\x4c\xb2\x6f\xfa\x4a\xaa\x32\xc9\x82\x2f\x1f\xb1\xe4\xce\xe4\x71\x84\xaf\x7f\xeb\xdb\xb5\x86\xe9\xcc\x9b\xb5\x8f\x3a\x50\xe9\xa1\x73\x52\x41\x1c\xdc\x01\xd1\x7a\x56\x75\x19\xb6\xb0\x73\xdf\x5e\xcb\x7b\x3d\x1a\xe9\x4a\x7e\x90\x24\x3e\xee\x9d\xd5\xf7\xa6\xdd\xe0\x19\xc3\x22\x96\x3c\x09\xa2\x2e\x88\x83\x3b\x90\xf5\xeb\x70\xb7\xe6\x32\xb7\x40\xb2\xf8\x58\xe0\x5a\xf0\xc6\x57\x07\x02\x4a\x81\x9a\x6e\x2a\xd5\x40\x05\xb2\x39\xa5\xba\x2f\x7b\xd0\x2a\x1e\x80\x83\xfa\x00\x20\xd6\x0d\x9a\x69\x9f\xe6\x40\x1c\x89\xd3\xdd\xdc\xe9\xdd\x0c\xdb\x2b\xb4\x7c\x2e\xa5\x1e\x63\xfd\xcc\x04\x22\x99\xa5\xb4\x3f\xd3\xb3\x92\x2f\xbf\xd8\xb0\x49\x47\x8c\x1d\xc4\xc1\x1d\xc8\x36\x4c\x65\x7e\x2b\x8c\x6e\x31\xbb\xab\x17\xf6\xa1\x27\x35\x8a\x34\x07\xed\xe6\xec\x53\xe2\x80\x16\xa3\x44\x35\x1d\x61\xcc\x1b\x88\xba\x20\x0e\xee\x80\x64\xf0\xc9\xc5\xc3\x7c\x0b\xac\x6f\xcb\x5e\x4b\x6e\x16\x87\xd5\x57\x5a\x62\xde\x32\xd3\x12\x33\xcb\x30\x76\x99\xfb\x25\x05\x33\x41\xf7\x6d\x00\x87\xf4\x46\x87\x72\xae\x20\x65\xcc\x16\x2d\x59\x69\xfa\x7a\xc5\xb6\x9b\xb8\x17\x1b\x46\xb3\xef\x8e\x60\xa8\x99\x63\x15\x65\xb5\x66\xb1\x3a\xf4\x46\x07\xc0\xc1\x1d\x40\x5f\xef\xe2\xbd\xe1\xac\x66\xcc\x65\x10\x6d\x75\xb5\xd3\xeb\xe9\x8b\x3d\xf7\xb1\x2f\xba\x9d\x7b\xe2\x03\x3e\xd6\x5f\x47\xaa\xae\x22\x1c\x00\x71\x50\x1f\x88\xf9\xbb\x03\xa0\xc7\x9e\x53\x53\x3e\xb5\x4c\x99\x8d\xcc\xa2\xe8\x81\xd4\xbc\x65\xf8\x01\xbd\x61\xf6\x23\x65\x6e\x0b\x4c\x4b\x17\xf2\x43\x13\x07\x9f\x93\x86\x43\x9b\x9e\x80\x38\xb8\x03\xe9\x9a\x1f\x2f\xd5\x7d\xaf\x7c\x51\x68\x53\xdd\xff\x51\x69\xf1\x7e\x77\x4b\x1b\xef\x1b\x4c\x51\x67\xaa\x48\x15\x67\x25\x8a\x6f\xdf\xa0\x8d\xf0\x00\x1c\xdc\x01\xdb\x2d\xa2\x26\x3b\xfe\x69\x05\x91\x3d\x8b\x8a\xd7\xce\x66\x39\x84\xbe\x18\xf7\x3e\x63\xa7\x4d\xcd\x49\xf4\xd7\x71\xe8\x93\x40\x1b\x0d\x82\x38\xb8\x03\x06\xa3\x3a\x23\x33\x83\x36\x9e\x92\xae\x91\x73\x63\x75\x79\x28\x8a\x13\x22\x16\x39\x5a\x01\xdb\x13\x6c\xa6\x92\x0b\x57\x23\xa0\x4f\x1c\x40\x1c\xdc\x81\xaf\x5e\x03\x19\xcb\x4a\x68\xa3\x5b\xe2\x5f\x7c\xcf\x67\x75\x6b\x1d\x4c\x14\xd3\x6e\xf7\x58\x61\x18\xd6\x3e\x20\xbc\x78\x53\x56\x05\xe1\x00\x88\x83\xfa\x00\x20\xd6\x0d\x7a\x06\x3d\xcd\x01\xa6\xaf\xf1\x9a\x4f\xdb\x24\x46\xe4\xd0\x55\x51\x66\xc5\xf0\x7b\xe9\x2f\xb6\x1b\x7e\xba\x32\x4d\xd0\xae\x74\xc2\x30\x31\x9b\x07\xcd\x07\x40\x1c\xdc\x81\xb7\x05\x1f\xc7\x88\x52\x2c\x6b\x85\xe7\x04\xa6\xfb\xd8\x7b\x89\xd8\xc6\x34\x3f\x07\xbb\x4e\xb2\x2a\x08\xae\xea\x63\x47\x48\xe0\x21\xea\x82\x38\xb8\x03\xa5\x27\x3d\xc4\xfe\x45\x8f\x3a\x7c\x05\x8e\x03\xdb\x25\x29\xda\xb2\x79\x50\xd7\x0f\xdb\x7b\xeb\xf2\xab\x84\x55\x85\x3d\x49\x1a\xa1\x2f\x73\x01\x1c\xdc\x01\x56\x1b\xee\x83\x95\x0c\xad\x0e\x0c\x0d\xf9\x2b\x13\x44\xbf\xae\x5a\xde\x8b\xb9\x78\x5b\xad\xec\x28\x71\x75\x62\xef\x31\x6d\x30\xf4\xa9\x1f\x88\x83\x3b\xb0\xf1\xb0\x22\xd3\x72\x3f\x87\x6d\x3a\xff\x95\xf2\x96\x99\x80\x55\xee\xb7\x8e\x47\xd8\x6c\x75\xa6\xef\x3a\xbd\x30\x7e\x9c\x08\x31\x42\xe7\xaf\x02\x38\xa8\x0f\x54\x03\x62\xdd\xa0\x65\xc5\x7f\x62\xdd\xbe\xc8\xb1\x6e\x29\xea\xdf\x0f\xc8\x53\xd0\xcf\x3d\x51\x72\x3a\xa8\x36\xa6\x69\xc6\xa2\xd5\xf9\xcc\x82\x67\xfb\x99\xee\x9a\x31\xb3\xa7\xf4\x73\xa2\x33\x59\x39\xf9\x8a\x74\xd9\xe4\xab\x77\xf1\x83\x49\x9e\x1e\x55\xe4\xd1\xcd\xf1\xdd\x95\x7d\x75\x57\xfd\xe3\x0b\x0d\x21\x47\xbd\x47\xeb\x0e\xdd\xcc\x92\x6a\x6f\xcf\x64\x9d\x08\x39\xd6\xdd\x6c\xf2\x93\x62\x7b\xf7\x47\x2a\x3a\x13\xc6\xe3\x79\xae\x18\x1a\x74\xee\x84\x94\xcc\xd5\x93\x38\xfe\x07\x68\xe8\xe6\x86\x2d\x67\xb3\x2a\x76\x0e\xe9\xb5\x19\xea\x6e\x98\x7b\xf8\xa3\x8f\x78\x18\xce\xba\x99\xd8\x23\x68\x9c\xaa\x6a\xd8\xcc\x56\x42\x45\xae\x9f\x6e\x89\xe5\x5e\xd6\xa8\x75\x3a\x93\xd1\x22\xc7\xba\x45\xfc\x65\x75\xa3\x58\x35\x8b\xb0\x4a\xc4\x9c\x62\x8e\xbb\xb6\xba\xaa\x70\xfb\xbd\x56\x4e\x32\xd6\xbf\x0a\x31\x98\x3f\x53\xc3\x39\x93\xd1\x8a\x21\x5d\xb6\x7e\x39\x63\x9c\x4b\x4d\xff\x76\xf0\xce\xab\x1b\xec\xb3\xf5\x7e\x4f\x94\x13\xef\x30\x0b\x61\x5c\xe3\x67\x58\x9b\x9f\xff\x30\xd7\x70\x26\xa3\x45\x8e\x75\x17\x84\xc8\x7a\xa0\x5c\x3a\x54\xb4\x7a\xd2\xda\x42\xe4\x4f\x1d\x72\x81\x26\x1a\xeb\xae\x9c\x37\x75\x02\x93\xda\xc2\x37\x15\xd3\xbe\x33\x19\xad\x13\xd2\x65\x39\x95\x6b\x8f\x7e\x5f\x0a\xe4\xe8\x7b\x5d\x79\x98\x5c\x21\xba\x21\x28\xd3\x34\xc6\xe1\xb2\xc5\x59\xa6\x7e\x38\xed\xf7\x6e\xeb\x0c\xbe\x14\xd0\xfb\xff\xf7\x97\x7a\x5a\xa3\x7f\xf2\x4a\x2d\xc9\x71\x8c\x33\x40\x38\xa9\x22\x32\xa5\xbe\xe1\x8f\x9c\xa7\x46\x59\xe4\x28\x55\xd5\x43\x9e\xdc\x72\xaa\xd6\xca\x37\x88\x06\x07\xe2\xe0\x8d\xbe\xd9\xa5\xf0\x3d\xed\x35\x03\x8a\x4c\xd6\xe8\x2a\x77\xff\x1a\x87\xc2\xc6\x8d\xdb\x5b\x3a\x96\x28\x97\x97\x7f\x51\x0e\x16\xfd\x80\x5e\xb5\x82\x38\xa4\x35\xc0\x5a\x94\xb0\x4f\x65\x45\x4e\x09\xef\x5d\x17\x56\x6b\x71\x2a\x95\xae\xb7\x08\x7b\x2e\x32\xf1\x69\x5c\x1a\x2b\x79\xac\x56\x0a\x6d\xed\x00\xe2\xe0\x8d\xbe\x71\x00\x77\xe8\xf9\x97\x4e\xe9\x15\x92\x99\x0d\xcf\x22\xfc\x3a\xc5\xe3\x88\x9c\xa6\x44\x65\x4b\xaa\x85\xcc\x27\xde\x23\xa2\xa2\x50\x0c\x1d\xc0\xc1\x1b\xbd\xf2\xaf\x80\xcc\x7e\x16\x02\xc2\xd0\x99\xa7\xdf\x0f\xf1\x07\x9f\xad\xb2\xb5\x2a\xa4\x7c\x0b\xd5\xfd\x6e\x65\xd4\x1a\x32\x82\xea\x83\x68\xf4\x20\x0e\xba\xd9\x03\x62\xdd\xa0\xb6\x79\x9a\x03\xc9\x0e\x3f\x88\x2c\x4c\xd1\x12\x4d\x03\x22\xaf\xb4\xf3\xd1\x5d\x6e\x66\x0a\x4a\xb6\x9d\xa0\x29\xc7\x2c\xb8\x1b\x49\xa8\xd9\x02\xc5\x23\x41\x1c\xd2\xd1\x1c\xa4\x5f\x82\x5a\xae\x2e\x54\xf4\xc7\x30\xbf\xae\xef\x88\x6a\xe7\xf7\xac\xf3\x16\xcd\xe0\x7f\xea\xe4\xd5\x71\x43\xfe\x9c\xc3\x47\x44\x5d\x10\x87\xb4\xdb\xd9\x83\x2f\xc2\x2f\xcb\x36\xcf\x4f\x9b\xe1\xd4\x45\xf8\x3f\x12\xf8\xb5\xfa\x8d\x38\xa0\xcc\xc7\xd7\x8c\xea\xf6\x30\xd6\x68\x1f\x74\xb4\x18\x88\x83\x3b\x10\xc1\xfe\xc1\xd4\x2b\xfe\x86\x77\x8b\x4d\x36\xf5\xf1\x35\xce\x73\x61\xea\xe6\x51\x91\x42\x17\x54\x68\x35\xad\x2b\x7a\xea\x4f\x9a\x10\x75\x41\x1c\xdc\x81\x01\xe3\xb8\x1c\xa5\x20\xd6\x8f\x14\xfa\x91\xc7\xa3\x7d\xe2\x2f\x75\xf0\x19\xc7\x4c\xef\xec\xe3\xc8\x97\x3c\x67\x5c\x1f\xa0\xa3\x46\x38\x00\xe2\xa0\x9b\xfd\x57\xc0\x71\x6d\x80\x7b\xd8\x69\x0e\x28\x67\x3d\xb4\xec\xbf\xe6\xa2\x93\xdf\x77\x01\x0d\x75\xeb\xb7\x0c\xfe\xc8\x4c\xcd\x76\x61\xe9\x6b\xa6\x0e\x26\x36\xc1\x3c\x71\x31\x68\xa7\x37\x00\x07\x77\x60\xde\x37\x52\x79\xbc\xe3\x50\x61\x74\x63\x57\x75\x37\xb8\x42\xe2\x8a\xaa\x6f\xb2\xb5\xae\xd0\x54\x6d\x7a\xda\xc3\x96\xbc\x0c\xe8\x5b\x4e\x10\x07\x77\xe0\xf1\x3d\x9d\xc1\x6b\xa8\x18\x96\x8f\xdc\xdc\x32\xb7\x65\xba\x28\x83\x68\xa6\xdf\xbe\xcd\x64\xf3\x78\x40\x4f\x32\xf3\xd4\x5e\xfb\x12\xa2\x2e\x88\x83\x3b\xe0\xa3\x35\x6f\x4c\x33\xb9\x6f\xab\x5d\x75\x28\x7a\x9f\x9c\xea\x1d\x86\x51\x38\xef\xf7\x9e\xda\xed\x9a\xcd\xec\x5b\x0d\x8e\xfe\xd0\x6e\xdd\x20\x0e\xee\x40\x52\xef\x73\xc6\x3a\xdb\x9f\x1c\x9f\x32\x88\xdb\xa3\x6c\x04\x05\xdb\x84\x3f\x4a\x31\x96\x25\x0f\xc6\x12\x36\x53\x59\x71\xdc\x6d\x81\x62\xdd\x00\x0e\xea\x03\x80\x58\x37\x68\x42\x71\x9a\x03\xde\x9f\xae\x14\x68\xed\x9d\xe7\x1a\x50\xb8\x1b\x4b\x35\xef\xaa\x29\x21\xbc\xdc\x48\xb0\xd5\x3a\xd6\xbe\xa4\x25\x58\x78\xe9\x15\x74\x5c\x21\x88\x83\x3b\xe0\x56\xcb\x13\x6d\xb5\x1e\x4f\x83\xe2\xff\xb3\xd4\x82\x3f\x2d\xb4\x9d\xcc\x1a\x77\x35\x8d\x8c\x2b\x66\xeb\xcf\x87\xef\xa8\xde\xd0\x2e\xe0\x20\x0e\x69\xd7\xfe\x98\xf2\x74\x6d\x42\x47\x71\x29\xab\x92\x42\x4c\x87\xbe\x1b\xef\x31\x3f\x86\x15\x57\x6d\x37\xcd\x59\x2c\x17\xfc\x3e\x32\x82\x0e\xb3\x07\x71\x70\x07\xa6\x99\xbf\x87\xd5\xb9\x5d\xab\x1e\x1f\x0f\xb8\xb5\xba\xed\x48\x8b\xfa\xa3\x3f\xcb\xb2\xba\x95\xea\x82\xda\x48\x2f\xc5\x47\x3e\x71\x68\xaf\x1b\x00\x07\x77\x00\x27\x5b\xdc\xb5\xeb\xeb\xed\xd8\x15\x23\xe2\xa6\xe2\x0f\xa6\x57\xe7\xa2\x88\x43\x87\x06\xe5\x75\x26\x34\xe9\x64\xa7\x64\x0e\xa1\x1d\x5a\x41\x1c\xd4\x07\xce\xfd\x3d\xca\x07\x9a\xdd\x9d\xe6\x00\x21\x75\x72\xfe\xeb\xa9\x06\x89\x21\xfd\x48\xb2\x57\x8b\xa2\x17\x19\xdd\xc6\x5c\x8b\xfa\xc6\x8e\xa7\xae\x1b\xf6\xde\x7b\x60\x57\x88\x18\x3b\x88\x83\x3b\xc0\x7c\xeb\xaa\x94\xa3\x1a\x5f\x75\xb7\x5c\xf2\x67\xec\xa3\xce\xc3\x51\x62\x1b\x4f\x87\x59\xce\x94\xe2\x9c\xc6\x1e\x93\xb9\x5b\x3e\x88\xba\x20\x0e\xee\x00\x95\x41\xbb\x90\x42\xd3\xcb\xed\x89\xea\x17\x46\xfa\x36\xaa\x6d\x9a\x7b\x31\x4f\x50\x99\x69\x9e\x64\x25\xf8\x5b\x7f\x7c\x8e\x0f\xbd\x10\x02\x71\x70\x07\xfc\x47\xbc\x3c\x9a\x84\x85\xb4\x8a\x59\x14\xbb\xfc\xef\x8b\x37\xaf\x0c\xd1\xab\xe6\x0b\x2b\x7d\x6a\xdd\x2b\xd9\x3d\xa2\xe1\x87\x16\x82\x41\x1c\xdc\x81\x70\xcc\xbb\xf8\xbd\xdf\xd9\x0b\xdf\x39\x56\x3b\xd0\x85\x4d\x45\xb1\x5c\x2f\xd3\x42\xed\xc8\xff\x40\xb2\xe0\x7e\xce\xdb\x18\xff\x10\xe1\x00\x88\x83\xfa\x00\x20\xd6\x0d\x9a\x6a\x9f\xe6\x40\x89\x01\x91\xd3\xea\x83\xbd\x3d\xde\x64\x86\x72\xe7\xeb\x95\x5b\x31\xbd\x8a\x2e\xce\x73\x4d\x03\xd6\xdc\x86\x8c\x18\x06\x49\x29\x88\xb1\x83\x38\xb8\x03\xc3\x1e\xcb\x1b\x35\xbc\x24\x3f\x50\x13\x55\xe2\x8a\xb8\x12\x30\x51\x44\x2d\x0f\x35\x8c\xeb\x33\xd7\xf9\x9a\xf0\x7a\x8e\x5e\xdc\x41\xd4\x05\x71\x70\x07\x4a\x6e\x61\xe4\xe4\xb9\x53\x55\xdc\x5f\xe5\xd1\x51\x50\x9d\xc9\x7b\xf7\x41\xf6\xe1\x0d\xb4\x0b\xf9\x69\xfa\x5b\xe7\x34\x25\xd9\xa1\x7d\x08\x40\x1c\xdc\x01\x06\xe1\xf5\x13\x9f\xc2\x1b\x71\x6f\x0e\x6f\xff\x7e\x90\x5b\xc2\x84\x47\xc8\x7f\xf4\x9a\x59\xf0\x67\x8d\x7c\x94\xc9\x64\x21\x01\xb4\x10\x06\xe2\xe0\x0e\x48\x8d\x61\x4f\x7e\xec\x17\xf1\x60\x7c\xe4\x85\x23\x88\x56\xfb\xa8\x14\xb7\x4d\xfb\xf7\x8f\xd8\x50\xcb\xdf\x53\x68\xeb\x62\x87\x96\x08\x07\x40\x1c\xd4\x07\xc4\xfe\xee\x00\xe8\xb9\xe7\x34\x07\x16\xc3\x13\x73\x93\xd8\x44\x85\xce\x91\xcc\x3d\x7b\x59\x61\x4a\xf3\x65\x8f\xc3\x72\xea\xb6\x80\x91\x8e\x2c\xcf\x5b\xfb\x8f\xb6\xd0\x7c\x00\xc4\xc1\x1d\xe0\x91\x48\x5f\x10\xee\xc8\xdf\xda\xc1\xba\x56\x87\x9d\xc0\xf6\xa1\x85\xfb\x82\xd3\xdb\xc0\x5c\x52\x21\xa1\x8f\xdf\x05\x38\x9a\xa1\x53\x7c\x40\x1c\xdc\x81\x38\x19\x9c\x6c\xac\x72\x66\x66\x5e\x59\xc9\xc2\x9b\xf4\x46\x3a\xb3\x17\x6a\x70\x70\x5b\x44\xa5\x2e\x5e\x8c\x8f\x77\x91\xb1\xcf\x80\x16\xae\x01\x1c\xdc\x81\xfb\x51\x97\x2b\x03\x34\x7f\xee\x27\x5e\x13\xbb\x56\xcd\x73\x43\xab\x15\xe3\x86\xa2\xd6\x98\xb9\x89\x75\x72\xe0\xd0\xda\x4d\xb3\x6c\x44\x5d\x10\x07\x77\x60\x33\xf7\x7e\xaf\x60\xea\xae\x81\x31\x73\xb5\x46\xad\xc4\x25\x1a\x2c\xd7\x60\x75\xcb\xdc\x0e\x7e\xaf\x89\x6b\x53\x43\x33\xe6\x37\xa1\x4f\xfd\x00\x1c\xd4\x07\x00\xb1\x6e\xd0\x43\xe8\x69\x0e\x58\xdb\x6e\x7c\x8e\x77\xd9\x54\x1a\x2b\x1b\x23\x69\xaf\x73\xc6\xd6\xe8\x1e\xd4\xc6\xb7\xf3\xba\x5b\x15\x24\xfe\x70\xbb\x91\xd2\x00\x31\x76\x10\x87\x34\x1f\x50\x7c\xd5\x49\xa9\xc8\xc7\x7e\xbb\x9a\x55\x93\x43\xe7\x19\x7e\x4a\x3b\x85\x41\x77\xea\xc5\x1e\xd9\xe2\x9c\xa0\x0c\xf2\x62\xa8\xb7\x82\x38\xa4\xd3\xdc\x51\xc9\x57\xba\xf8\x48\x6f\x2e\x0d\x5a\xce\xe5\xd7\xf7\xbd\xa0\x51\x94\xbb\xda\xcc\x6f\x75\xdf\x5e\x97\xe3\xe9\x81\xc8\x23\x68\xef\x18\x10\x07\x77\x80\xe8\xa3\x22\x49\x47\x67\xac\x96\x37\x8b\x3a\x86\xa8\x1a\xbd\x6e\xba\xcf\xd0\x0b\x1b\x15\x0a\xe1\xa4\xea\x22\x2a\xc9\x76\xc1\x22\x44\x5d\x10\x07\x77\xa0\xb6\x2d\xd3\x8f\x0b\x5f\x47\xe3\xc9\xdc\xb2\x3d\xd6\xc5\xb2\x7c\xfc\xe5\x64\xde\x54\x43\x43\xae\xa7\x25\x9c\x97\x07\x87\x06\xb9\x10\x0e\x80\x38\xa8\x0f\x38\x01\x62\xdd\xa0\xc0\xe0\x3f\xb1\x6e\x5f\xe4\x58\x37\x3b\xc1\x84\xba\x0c\x57\xa5\x4f\xf0\xe5\x3b\x27\xa3\x32\x13\x5e\xca\xcd\xa2\x9e\xdb\x7b\x06\xf3\xba\xab\x07\xeb\xdd\xed\x99\x96\x67\xb6\x86\x01\xba\xd0\x69\x9e\xce\xfb\x2e\xe1\x4f\x31\x5b\x78\xdf\xb4\xf7\xc5\x4b\x27\xc7\x34\x72\x34\xec\x0d\xf9\x2a\x91\xbe\x6c\x86\x6e\xd4\xb7\xd8\x38\x95\xf2\xdf\x67\x8c\xbf\x73\x70\x4f\x43\xe6\xfb\xa8\xa3\x82\xd0\x6b\x5e\xfe\xfe\x7e\x8e\xeb\xd1\x1b\x27\xd9\x11\xd9\x6a\xfb\x6c\xb4\x12\x96\x98\xe5\xc9\x36\x8a\x21\x4e\x44\x5d\x10\x07\xf7\xf4\x81\x24\x69\x60\x6f\x85\xe0\x6c\x47\xe1\x1d\x2b\x39\xff\x80\x7d\x07\x4c\x56\xef\xb0\x40\x37\xed\x15\x75\xa1\x4d\x4e\x6f\x45\x29\x44\x5d\x10\x07\xf7\x74\x56\xe7\x8a\x74\xa6\x8d\xe1\xcf\x7d\x22\x54\x82\x13\xff\x36\xd7\x37\xd8\x83\xb7\x4a\x97\xd5\x95\xda\xfc\xa2\x9e\x2d\xe9\x07\x72\x21\xea\x82\x38\xb8\xa7\xb7\x28\x98\x51\x55\xee\xf0\xb0\xdd\x1c\xeb\xdd\x09\x6c\x88\x6e\xac\x14\x79\x7f\x3e\x26\xf5\xd2\x96\x41\x4f\xce\x2f\x2d\xf9\xfb\x9e\x08\x4f\x41\x1c\xd4\xab\x00\xb1\x6e\x50\x24\xf8\xf4\x58\xf7\xb9\xb5\xdf\x17\x46\xf1\x19\x0c\x88\x16\x05\x52\xe9\xae\x75\xc8\x79\xf4\x0e\xdc\x7a\x2d\xd3\x9f\x2c\xa8\xa6\x16\x6c\xcd\xac\x7c\x1e\x11\x91\x06\x71\xc8\xb1\xee\xbc\xd8\xc5\x54\xac\x11\xe7\x3b\x37\x0d\x35\x92\x38\xe4\x48\xf1\x8a\x98\x6a\xe2\xad\xfc\xf1\xfe\xac\x0f\x89\xba\xae\xf8\x6d\xbf\x40\x54\x06\x71\xc8\xb1\xee\x28\xde\x5f\x7d\x78\x46\x52\x4a\x49\x86\xcb\x4c\xf1\x9b\x39\xb7\x74\x36\x71\xf3\x16\xe9\xf3\x5f\x55\x59\xe3\x6d\x4b\xbc\xd0\x4d\x40\x54\x06\x71\x01\x32\x28\x28\x18\xff\xab\x72\x53\x4b\x1b\x9f\xee\x9d\x05\xd2\x9b\xa9\x23\xee\xf7\x25\x8d\x7e\x91\xfc\x6c\x24\xf0\xbd\x55\x73\xcc\x74\x51\x4c\x3a\xbd\x51\x42\x04\x8a\x75\xa7\xf6\x8c\xbc\x34\x6c\xed\xa1\x99\xa4\xc1\x59\xe6\x71\x15\x09\x50\x1a\xbe\xde\x71\xb5\x30\xc7\x96\x8c\xba\x68\xe4\x42\xc9\xf5\xbc\x7f\xc7\xba\x83\x19\x7e\xee\x1c\x35\x52\x1e\x05\xf1\x04\x4c\x7f\x95\xe6\x78\xef\x11\x4b\x94\x8c\x3b\x33\x6c\x9b\xb7\x8b\x52\x3e\x49\x8d\x4d\xf0\xef\xe0\x93\x9b\x76\x2e\x39\xc3\x2a\x57\xbf\x87\x58\xde\x45\xea\x82\xbb\x92\xb7\x76\xf0\x68\xee\x77\xac\xa8\xbd\x92\x3d\xa2\xdd\xc7\xee\xfe\xbf\x17\xeb\x06\x0d\xee\x94\x58\x37\x26\xcd\xf5\xe1\x1d\xce\xcc\xf5\x34\x7f\x2b\xf5\x73\x9f\xda\x1d\xea\x3a\xa3\x09\x7e\xe0\x3b\xa1\x27\xad\x1c\xd5\x04\x05\x8c\xfd\x7b\xd5\xfe\x84\xfa\x5c\x51\x49\x1b\xa1\xd6\xe0\xae\x51\x23\x75\xab\xb0\x2d\x9d\x41\xf4\xed\x16\xd7\xd9\x12\x47\x66\x85\xd7\x7a\x57\x08\x0c\xff\x9d\x6d\x19\x5c\x59\xc2\x61\x0f\xce\x3b\x46\x5f\xea\x9b\x7f\xf1\x4c\xcb\x62\xd8\xf2\x50\xaa\xfb\xad\xdc\xaa\xe6\x41\x5c\xe4\x03\xce\x21\x28\xd6\x0d\xba\xfc\x3f\xb1\xee\x26\xa4\x58\x77\xc8\x23\x5a\x42\x53\x74\xcb\x76\x8b\xb5\x9b\xa1\x7d\x7b\xee\x0b\xfb\x36\xc7\xd5\x17\xe2\x3d\x85\xef\x48\x69\x72\x7b\xd0\x24\xac\x9e\xc5\x42\xb8\x04\x72\xac\x3b\xa4\xfc\xfb\x5d\xfd\x70\x03\x52\x76\x62\x9c\x32\xbc\x49\x2e\xa5\x3f\x7b\xcc\x21\x76\xc3\xad\xef\x6a\x92\x26\xa3\x37\x6b\x97\x12\xce\xe2\xb2\x4d\xc8\xb1\xee\x66\x6b\x1c\x82\x8d\x48\x8b\xa0\xf0\xf0\x2d\x9b\x41\xcf\x30\xa3\xe2\x7b\xc1\xab\x4c\x86\x5b\xfa\x11\xd7\x2c\xe9\xe3\x26\x89\x9e\x9e\xc9\x68\x91\x63\xdd\xb4\x75\x65\xfc\x8f\x25\xb3\x96\x66\xa5\x2f\xb9\x76\x3f\xe9\xbe\x16\x21\xfe\xc8\xef\x96\x4d\xdd\x87\x5f\xce\x52\x3b\x0a\x5b\xc3\x56\x67\x32\x5a\xe4\x58\xb7\x46\xc4\x33\xa5\xee\x78\x6e\xff\x89\x1e\x71\x3a\x35\x26\xd5\x5f\x43\x43\x42\x7e\x72\x72\x4c\x78\xce\xe4\x11\xcd\x5e\xe5\x8c\xcb\x67\x32\x5a\xe4\x58\x77\x5c\x6e\x92\xd1\xf0\x75\x2d\x9a\x43\x36\x19\x0c\x99\xc2\x7d\xca\x3a\xda\x4c\xad\x76\x36\xd2\x09\x77\xe2\xe6\xe4\x08\x5f\xfb\xcf\x67\x32\x5a\xe4\x58\xf7\x16\x67\x9c\xa3\x9d\xd6\x64\x0d\x7f\xec\x07\x55\x96\x5c\xa2\x61\xef\x2c\x77\xca\x60\xed\x98\x83\x83\xd6\x77\x21\x77\x26\xca\x0c\xcf\x64\xb4\xc8\xb1\x6e\x5f\x8f\xdc\xae\xb6\xfe\x82\x0f\xac\xfe\x77\x70\x9b\x31\x9f\xb7\x49\xdc\x7e\xcd\x9d\xa3\x7e\x4e\xa8\xcf\xe2\xcd\x37\x14\xf7\x15\xea\x33\x9b\x0e\x81\xfe\x52\x4f\x9b\x0e\x15\x63\xb9\x2c\xfc\xbe\x85\x7e\x93\x5b\x40\x75\x06\x3d\x31\x2f\xcb\xdf\xc0\x03\xff\x31\xd5\x8d\xeb\xf2\xc5\xde\x74\xf7\x88\xbf\x42\x79\x4e\x10\x07\x9f\x0e\xe5\x07\x04\x1b\x91\x4b\x98\x33\x4c\xe6\xbf\x3a\x16\xd6\x11\x3b\xb7\x2a\x15\x1d\x21\x8b\x4e\x87\xe7\x6d\x4d\x96\x54\x5f\xd9\x0d\x7d\xe5\x09\xe2\xe0\xd3\xa1\x27\x38\x3b\x6e\x5a\x79\xb7\x9a\x68\x29\x2d\x7f\xb5\xdb\xdc\xa9\xd8\x21\xb9\xed\xd4\xfc\xa1\x98\x0c\x9b\x7e\x58\x2c\x28\x78\x0f\x5a\x1e\x04\x71\xf0\xe9\x50\xf3\x03\x67\xae\x81\x7d\x36\x2c\x42\x15\xfd\xf8\xae\xad\x62\x5b\xbf\xb2\x83\x74\x6c\x69\xec\xa7\x19\xfe\x3a\xb3\xd4\x3f\x13\x35\xa1\x57\x50\x00\x2e\x40\x0a\x05\xed\xdf\x75\xfd\xee\x73\x89\x55\x3c\xfa\x48\xad\x36\xa0\xea\x6e\x71\xc9\xed\x20\xf9\x0f\x4f\x57\x42\x67\x90\xcc\x48\xd2\x68\x7f\xb8\x6f\x8a\x27\x22\xd6\x0d\xe2\xfe\xdf\xff\x9b\xaf\x5f\xd0\x7f\xfa\xf3\x5f\x9e\xdc\x40\x5d\xf3\xd4\xdd\xba\x99\x2f\xae\xac\x75\xcb\xdd\xc3\x9b\xff\x61\xd3\xf5\x86\xe6\xaa\xb9\x8b\x05\xb3\xe2\x1a\xfe\x46\x50\xf5\xa1\x05\x4b\xc0\x76\xf8\x7f\x57\x30\xff\xce\xc1\x15\xe8\xf9\xc2\xd5\x16\xa9\xd1\xab\xf9\xe3\x37\xfb\xe6\x13\x8a\x20\xc7\x48\xfd\xe2\x3d\xdf\xec\xc1\x63\x3c\xe1\x99\x89\x4a\x45\x1c\x28\x76\x09\xe2\xe0\x0a\x14\xa0\xf1\x0e\xac\x3b\x6c\xb2\xea\x16\x93\x10\xb0\x05\x10\xb5\x26\x4f\xe0\xdb\x68\x38\x38\xed\xf7\xf8\xcb\x6a\xed\x5a\x8a\xce\x20\xea\x82\x38\xb8\x02\x4f\xae\x77\x8e\x3b\x85\x77\x6e\xf3\x3b\x96\xb6\xd3\x77\x53\x8c\x18\x33\x6c\xeb\x99\x9c\x8f\x1c\x21\x0c\x25\x9d\x96\xc2\x15\x87\x56\xb4\x41\x1c\x5c\x81\x9f\xf8\x32\xea\xb9\x41\xec\xa6\x71\x41\x35\x47\x7d\xdb\xd9\x92\x63\x9c\x8f\xb0\x8e\x8f\x3e\xdb\x7c\xca\xac\x71\xa7\xfb\x3e\x45\x85\x98\x11\x83\xb8\x7f\x14\xf8\x9f\x9b\xe5\xdf\xde\xe8\x00\x6e\x61\xa7\x39\x90\xca\xe9\x1f\x6a\x38\x74\x21\xb8\x26\x80\xa0\x2e\x84\xd6\x8a\xdf\x92\x5c\x74\x94\x73\x40\x58\x33\x64\xb7\xc0\x34\x2f\x97\x2c\x17\x31\x76\x10\x07\x77\xe0\xe0\x88\x7b\xb5\x56\xec\x64\xec\xca\x3d\xc2\xa3\xe6\x9e\xe4\xb8\xd2\x9d\xad\x61\x51\x2f\xcd\x0d\xf1\xbe\x64\x83\xf9\x77\xb4\xd0\xee\xbf\x20\x0e\xee\x00\x86\x28\x46\x18\x87\xbb\x50\xcd\xc3\x42\x43\x91\xbc\xf6\x4f\xa4\xbc\x5d\x12\x39\x69\xb2\xe9\xfe\x66\xc9\x43\xbc\xd8\xae\x34\x5f\x10\x75\x41\x1c\xdc\x01\x42\x13\x41\xc3\xf6\x96\x45\xf7\x4e\x93\x49\x1b\xb7\x2f\x7a\x99\xb9\x9f\x89\x9b\xf3\x89\xb2\xdc\x7a\x2a\x79\xf7\xa3\x96\xfd\xa0\x08\x0f\x88\x83\x3b\x50\x22\x78\x10\xd6\x49\x37\x97\x4a\xce\x9e\x6d\x36\x41\xc8\x94\xc8\xdf\xdb\x76\x19\x85\x2e\xab\x50\x8d\xd9\x6e\x84\x5c\x55\xf3\x18\xe1\x00\x88\x43\x38\xd0\x04\x88\x75\x83\xe6\x13\xa7\x39\x60\x8b\xfa\xde\xd4\x6a\xfd\xfb\x5e\x1d\x57\x62\x6f\x44\xd0\x89\xab\x87\xb2\x0a\x5b\x4a\x86\x3a\xd5\x70\xe5\xef\x1a\x31\x5d\x33\x68\xb7\x4b\x10\x07\x77\x80\x22\x35\xbc\x24\xcc\x6a\xad\x38\x2d\x9e\xf3\xd9\x45\x7f\x76\xb1\xa9\x94\xae\xfe\x65\xbf\xdc\x95\x67\x26\xac\x16\x65\x94\x78\xd0\x87\xc9\x20\x0e\xee\x80\xce\x88\xd5\x9a\x21\x73\x25\x19\x3b\x49\x77\xec\x05\x31\x2e\xf3\x5c\x75\x4c\x9c\x6c\xf4\xcf\x32\x2f\x56\x35\x0b\x7e\x44\x71\x77\x22\xea\x82\x38\xb8\x03\xfd\x74\x4f\xf4\xdd\x9a\x1d\xad\x5b\xa6\xeb\x1c\x38\x1e\x76\xe9\xed\x59\xb5\x0b\x63\x5d\x55\xd2\x59\x5b\x7b\x2c\xc5\xea\x4b\x07\x6d\x28\x02\xe2\xe0\x0e\x44\x8a\x95\x32\xde\xf7\x17\xe7\x51\xb6\xba\x6b\xfd\x80\xcc\xea\x3b\x2f\x51\x5a\x02\x85\x42\x83\x66\xe4\xcd\xd5\x67\x95\x54\xa8\xb5\x08\x07\x40\x1c\xd4\x07\x00\xb1\x6e\xd0\xe4\xee\x34\x07\xca\x08\xbc\x17\xc8\x47\x85\xe8\x0a\x03\x5e\xbf\x33\x10\x7b\xdd\xea\x9b\xb5\x16\x91\x9e\xfc\x26\xaa\xe1\xed\x88\x9b\x99\x4c\xcf\x03\xc4\xd8\x41\x1c\xdc\x81\xe0\xa2\x57\x22\xbb\xf7\x51\xb7\x0c\xcf\x75\xd1\x4a\x15\xb1\x27\x1b\xd5\xbb\x0d\x5e\xdf\xfd\xd0\x1e\x78\x8d\x4a\xe9\x1c\x5a\x1d\x74\x5e\x32\x88\x83\x3b\x70\xfd\xaa\x18\x51\x3a\x1a\x77\xbb\x80\x53\xd6\x86\xc5\xc7\xe6\xf5\x23\xcb\xf0\x88\x28\x82\x9f\xf4\x8e\x74\xbf\x3b\x51\xdc\x70\xd1\xa0\x0d\xf6\x00\x1c\xdc\x01\xca\xa3\x31\xc6\xce\xf2\x65\xc5\xfe\xb0\x39\x99\x6d\x63\x9f\xb4\x2c\x97\x77\xaf\x15\xde\x5b\x1b\xc5\x7e\x17\x93\x21\xbe\xf1\x14\xda\xa0\x03\xc4\xc1\x1d\x38\x2a\x25\xe2\x2c\x9a\x89\xc9\x1a\xa2\x8b\xb2\x5c\xed\x3f\x40\x23\xab\xa5\x7d\x6f\x12\xf9\x6d\x5f\x66\x55\xc1\xf0\x49\x4f\x38\x2d\xc2\x01\x10\x07\xf5\x01\x40\xac\x1b\x34\xd3\x3e\xcd\x81\xa3\xe9\x90\xb8\x99\xea\x9d\xda\x97\xee\xcc\x13\x97\x59\x5e\x5d\x43\xfb\xb9\x77\x11\xb7\xbf\xd7\x38\xe4\x8a\xf4\xa0\xb2\x72\x22\xb4\x49\x0b\x88\x83\x3b\xc0\x3f\xfa\xe4\x80\x72\x6b\x35\x3d\xf0\x76\x92\x27\x9a\x7d\xe5\x30\x8b\x20\xbf\x19\x7a\x6a\x5c\x54\x93\xc4\xa5\xb1\x49\xe7\xd6\x43\x68\x03\x20\x00\x07\x77\xc0\x5e\x8a\xe1\x85\x86\xca\xeb\x68\x7f\x3e\xb7\x85\x2f\x4c\xa6\xcd\xe8\x6f\xeb\x4b\xd7\x3d\x9f\xf2\xf2\x7b\x3b\x17\xce\x25\x53\xf0\x40\x9f\x8d\x00\x38\xb8\x03\xf7\xee\xb7\xe8\xde\x7f\x1b\x29\xa7\x6d\x11\xd1\x96\xe7\x68\x2e\xd4\x2b\x44\x8a\x5e\x2e\x39\x40\xfd\xcc\x52\xaa\xc0\x01\xf3\x12\xf4\x89\x03\x88\x83\x3b\x20\xe0\x93\x33\x79\x1b\xa7\x88\x91\x88\x6d\xf6\x91\x88\xd4\xc3\xc2\xa1\x4b\xce\xcc\x41\x1d\x61\x11\x3c\xa2\x1c\x7d\x8c\x91\x49\xd0\x0a\x19\x88\x83\xfa\x00\x20\xd6\x0d\x7a\xec\x39\xcd\x01\x87\x97\x15\x5d\xe4\x53\x97\x56\xa5\x1b\x2a\x6b\x44\xef\xb4\xb0\x5d\x1b\xfd\xc5\xb9\x15\x7e\x75\x23\x6c\x9f\xf5\x1a\x45\x78\x3e\xf4\x19\x06\x88\x83\x3b\xd0\xd4\x3c\xfb\xf6\x5c\x8e\x20\x91\xdc\xa0\x15\xe3\xb7\x67\x7a\x0f\x45\xc5\x32\xf7\x23\x9a\xb1\x0c\x7b\x55\x57\x5f\x6d\x9e\x33\x3e\x42\xd4\x05\x71\x48\x91\xde\x3e\x85\x60\x4d\xda\x77\xcf\xc5\x6f\x65\x3d\x9b\x9c\xf7\x75\xbe\x2f\x28\xaa\x82\x8e\x9b\x70\xa1\x4f\x06\xd7\xf9\x12\x75\x29\xf4\xef\x05\x71\x48\xbb\x75\x4b\xdd\xd9\x21\x22\xf3\x54\x3a\x97\x18\x1f\x96\xec\xdc\xa9\x7d\xd5\x50\x2e\xb2\xd8\xbf\x22\xe2\x01\xeb\xde\x17\xd3\xf1\x9b\x15\x88\xba\x20\x0e\xee\x80\x76\x58\xbb\xc9\x8d\x1b\x6a\x8f\x56\xe2\x3a\x54\x99\x48\x42\xa5\xc3\x75\x4b\xd1\xa6\x0d\x6d\x63\x9e\xf3\xb2\x78\x19\x5d\xc1\x92\x46\x38\x00\xe2\xa0\x3e\x00\x88\x75\x83\x9e\x41\x4f\x73\x40\xfd\xda\xda\xe4\xb0\x3b\x3e\x96\x5d\xd0\x2b\xea\x81\xae\xbb\x54\x41\x63\x6b\x5c\x4f\xa9\x63\x14\x89\xd8\x4b\x24\xf3\xb2\xfa\x96\x11\x63\x07\x71\x48\x9f\xf8\xe4\x3f\xc9\xbe\x68\xca\x93\x93\x35\xfe\x53\x40\xce\x61\x3b\x44\x22\xca\xbc\x2a\xf2\xa5\xc8\x71\x23\xf3\xd0\xbe\x77\x5b\x03\xf4\x77\x05\xe2\xe0\x0e\x54\x06\x37\x5d\xdc\x8f\xac\x79\xbb\x2d\x74\x41\x7a\xc6\x64\xe5\xea\x62\x6a\xfb\x11\x87\xdb\xb4\x7a\x47\x6b\x38\x55\x42\xa2\x7d\x18\xa2\x2e\x88\x83\x3b\x60\xe6\x2b\x7e\x83\x8b\xdc\xd3\x56\x4c\x38\x90\xb3\xc8\xf7\xab\xeb\x9d\xfa\xa2\x98\x68\x14\xda\x66\x91\xfb\x47\xcd\x1f\xc9\x46\x56\xa0\x2f\x94\x01\x1c\xdc\x81\xec\x81\x0f\xae\xb5\x6f\xf3\x9f\x5e\xe3\x9d\x63\x58\xba\xa2\xb2\x7e\xd5\x52\x87\xe6\x43\x86\x4f\xf2\x66\xb9\x76\x7a\xfa\x58\xda\x36\xc2\x01\x10\x07\xf5\x01\x50\xac\x1b\xb4\xac\xf8\x4f\xac\xbb\x09\x39\xd6\x2d\x24\xbc\x66\x5b\xfb\xf0\x92\xba\x0e\xf7\x27\xf2\x58\x0c\x0e\xdb\xa8\xe1\x76\xbe\xc1\x0f\x02\xee\xf7\x45\x8c\xae\xa7\xc4\xb4\x08\x9d\xc9\xca\x09\x72\xac\xfb\x92\x84\x00\x96\xdd\x6c\x22\xe5\x95\x81\x4b\x7e\x43\x73\x7d\x2f\x05\x1f\xbc\x98\x4c\x3c\xf9\xe4\x3f\x99\x7c\x0f\xaf\x89\x4f\x88\xff\x4c\xd6\x89\x90\x63\xdd\x3f\xb6\x46\x09\x48\x0b\x0b\x05\xef\xcb\x1f\x5f\x46\xa9\x5c\xfc\xe5\xaf\xad\x68\x6d\x52\xcf\x8a\xc5\x53\x15\x98\xf6\x92\x9d\x8c\xf4\x4c\x46\x8b\x1c\xeb\xd6\xe7\x28\xb9\x76\x85\x61\xb1\x6b\x2e\xdf\x85\x5b\xbe\x72\xd8\xef\x9b\xaa\x60\x08\x4f\xdb\x7b\x6b\xa6\x3b\x96\xae\x1e\x74\x51\xa6\x67\x32\x5a\xe4\x58\xf7\xc9\x65\xdd\x71\x27\x86\x1f\xb8\xb4\x21\xba\x9b\x6d\x12\x4a\x23\x19\x2b\x27\xcd\xb7\x47\x2f\xa2\x5d\xfa\xb1\xd2\x1d\x5c\x8f\x7d\x26\x3b\xb1\x4b\x20\xc7\xba\x6f\xe1\xfc\x6a\xe9\xa7\xb3\xbc\x10\xe7\x7d\x1c\x19\xfc\xa1\xac\x34\xe1\x1c\xf1\xe5\xf8\xc1\x10\xed\x62\x25\xcb\x9e\x25\xbc\x3b\x67\xb2\x7f\x46\x13\x72\xac\x5b\x67\x63\xbc\x98\xfb\x84\x2a\x22\x3e\x47\xc5\x7b\x3f\xfb\x79\xd3\x89\xc2\xa6\x8a\xe3\x90\xdb\xba\x20\xc5\x11\x76\xb3\x40\x34\xf1\x99\x8c\x16\x39\xd6\x9d\xa5\x4d\x3b\x29\x90\xc1\x39\xd2\x77\xf9\x99\xba\x5b\xef\xe2\x32\xda\x6d\x39\xed\x48\xe3\xd7\x52\x5c\xbf\xb5\xeb\xb0\x43\xc9\x9c\xcf\x6c\x0d\x10\xf4\x97\x7a\x5a\xa3\xaf\x24\x6f\xe0\x8b\xe4\x65\x67\x9e\x97\xa0\xc8\x08\x88\xb3\x3d\x10\xcc\xbc\xf1\x44\xdd\xe4\x84\xd9\xff\xb1\xcb\x92\x34\x3f\xb7\x0b\xd4\x38\x01\x1c\xbc\xd1\x2b\x9e\x90\x99\xf9\x5e\xd7\xe3\x2f\x7e\x64\xf2\x31\xc6\x50\xf7\xbc\xd0\x6c\x83\xb9\x71\xdf\xe6\xf6\xac\x6d\x6d\xe9\xa2\xb3\x11\x14\xb7\x02\x71\xf0\x46\xaf\x3f\x3b\x53\x8c\xf6\xf8\x72\xaa\xf5\xe5\xe1\x83\x1f\x6d\x1f\xc6\xb2\xd3\x18\xe9\xcb\x19\x23\xea\x07\xf9\x8a\x87\x51\x9b\xf5\xa1\xe3\xda\x40\x1c\xbc\xd1\x27\x9b\x37\x8d\x6a\x26\x45\xe2\xa8\x4a\xdd\x71\xc3\xec\xbb\xe7\x1b\xa2\x27\x60\x44\x55\x91\x76\x47\xa1\xef\x86\xee\x78\x81\x73\x25\x14\x6d\x06\x70\xf0\x46\xbf\x97\xb7\x44\x2c\x63\x7f\x2b\xfb\xb9\x75\x06\xd7\xcf\x2f\xd1\xd1\x3b\xed\x13\x5e\x1b\xdb\x0b\xae\xcd\x69\x4f\x1a\xa6\xa4\xb8\x45\x10\x8d\x1e\xc4\x41\x37\x7b\x40\xac\x1b\xd4\x36\x4f\x73\x80\x42\xac\xb0\x4f\xc8\x93\x9e\xe0\x73\x22\x5b\xc9\xf4\x97\xee\x58\x8f\xb4\xe9\xcc\x16\xb9\x90\x92\xba\x01\x57\xf1\x8d\xc8\x50\x28\xc2\x03\xe2\xe0\x0e\x4c\xb7\xac\x50\xd4\x46\x4a\xfe\x56\xbe\x99\x70\xb3\x13\x6d\x65\x7c\xc9\x88\x11\x5d\xa9\x58\x57\x0e\x23\xe5\xad\xe3\x2e\xff\x7b\xe8\xb0\x69\x10\x07\x77\x60\xf2\xcb\x2d\x55\x41\x87\xc5\x6c\x99\x5e\x39\xc9\x2a\x4b\xee\xcb\xb6\xa8\x18\xce\x69\x57\xe4\xf1\xb9\xa9\x6a\x83\x8e\xbf\x51\x6b\x20\xea\x82\x38\xb8\x03\xe5\xb4\xe7\x9e\x3e\x6e\xe4\xa9\xa2\xed\xff\xf1\x76\x95\xb7\x9e\x37\x85\xd9\x15\x2d\x40\x6a\x88\x2d\x88\x63\xbe\x02\xa3\x91\xbe\x14\x51\x17\xc4\xc1\x1d\x88\x3b\x8e\xae\xca\x8a\xca\xfd\x55\x38\xa0\xce\x49\x75\xac\xa3\xec\xf7\x22\xf8\xc1\x3b\xb5\xe5\x74\x8c\x83\x66\x93\xe3\x8f\x02\x4b\x08\x07\x40\x1c\x74\xb3\x07\xc4\xba\x41\xf7\xb0\xd3\x1c\xf0\xfb\x4c\xfb\xfd\xa3\x74\x56\x41\x96\x6b\xf4\x54\x66\x5d\xed\x15\x0f\xbd\x4b\x91\xce\x43\x04\xa4\x8f\xd4\xab\x9b\x22\x0a\x5b\xb7\x10\x63\x07\x71\x48\x5b\xbc\x5c\xba\x7d\xd3\xa4\xac\xfb\xe6\xc1\xa8\xee\x28\x4b\x55\x9e\xe1\xe2\x56\x03\x59\xeb\xb6\x24\x2a\x11\x89\x32\x01\x69\x15\xf5\x24\x34\x81\x02\x70\x48\xdf\x72\x3a\xc6\x8a\x38\xae\x4b\x8e\xa5\xc9\x76\x0f\x17\x72\x7e\x67\x7e\x85\xda\xf7\xd3\x57\x12\xbb\x2a\x3a\xc8\xb4\xba\xf9\x9e\xf1\x1a\xb4\x60\x05\xe0\xe0\x0e\xb4\x61\xeb\x7e\xed\x15\x5f\x1a\x3b\xea\x32\x23\xe0\xe6\xb7\xff\xf3\x47\xad\x7a\x89\xb3\x11\xef\xea\xcc\x90\xbd\x39\x86\x75\x2e\x74\xca\x00\x88\x83\x3b\x60\x1f\x9f\x7d\x29\x35\xe0\xe8\xc6\xc4\xa0\x8f\x30\xf3\xa8\x59\xea\x73\x4b\x73\x06\xd1\x65\xb1\xfc\x4a\x36\x0f\xf7\xc7\xf5\x94\x1c\x08\x07\x40\x1c\xd4\x07\x00\xb1\x6e\xd0\x84\xe2\x34\x07\xc2\x5e\xa1\x8a\xb0\xbc\x31\xea\xb1\xfc\x93\x99\xac\x67\x54\x23\x8d\xc2\x58\x37\x5c\x3f\xc9\x48\xc8\x4d\xfd\x5a\xde\x90\xa0\x15\x5a\x54\x03\x71\x48\x0b\xc1\x61\x17\xd1\x46\x52\xae\x6c\x3b\x07\xad\x50\x6f\x93\x7e\xae\xe6\xf6\xa6\x50\xc6\xe3\x36\x8b\x08\xda\xba\xe2\xb8\x32\x59\x09\x7d\x7f\x0f\xe2\xe0\x0e\xe4\xdf\xb5\xd6\x51\x3f\x92\x65\xaf\x1a\x64\xad\x20\x59\xbb\xab\xb6\x23\xeb\x8c\xe2\x33\xcd\xe3\xf7\x61\x9c\x1a\x8b\xf5\x9a\x27\x74\x5c\x1b\x88\x83\x3b\xb0\x69\x33\x1f\xbd\x7b\x29\xf7\x65\x83\xab\x43\x60\xf1\xd2\x4f\x3e\xb9\x15\x2e\x4a\xf3\xae\x9f\x47\x5b\x87\x4f\x88\x6c\x0e\x6e\x99\x41\xfb\x05\x00\x38\xb8\x03\x8d\x0d\xaf\xe9\xe8\x4b\x12\x35\x3d\xea\xe8\xd5\xde\x8f\x6d\xbb\xd7\x5f\xbf\x20\x56\x78\xc9\x52\x40\x8c\x3e\x4a\xaa\xc9\xd6\x6f\x16\xe1\x00\x88\x83\xfa\x00\x20\xd6\x0d\x9a\xdd\x9d\xe6\x80\x58\x59\xc4\x13\xbf\xe0\x9c\x67\xea\x11\xd5\x73\xb7\xf3\x6b\xa2\x3f\xb2\xd6\x2f\x08\xd3\x7a\xd6\x74\x5e\x31\x5d\x9f\xc6\x68\x84\xf6\x4c\x01\x71\x70\x07\x1e\xb8\xee\x8e\xcc\xe9\xee\xcb\x13\x2e\xc5\xd0\xef\x06\xb3\x72\xf3\xa0\x5d\x58\xea\x5a\x33\xa0\xf5\x2f\x7e\x6e\x48\x11\xba\xf2\xdf\x28\x13\x80\x83\x3b\xa0\x78\xcd\x13\xa7\x72\xae\xe0\x43\x85\x35\x26\xc1\xd4\xa2\x8e\xdb\xce\x28\xdd\xf4\x77\x1e\x4c\x94\x4c\x59\xdf\x3b\x17\x2d\xef\x77\x40\xf3\x0c\x00\x07\x77\x60\xcd\x62\xb0\xd5\x0f\xb3\x97\x5f\xa0\x67\xb3\x4a\x4c\xb5\xab\xa3\x78\x2f\xa7\x6d\x0b\x27\x39\xf6\x47\xd5\x0a\x6d\x42\xc3\x06\xb4\x0f\x01\x88\x83\x3b\x80\x2a\xdf\xfb\xfe\xc9\x94\xf3\x9c\x02\xf5\x67\xad\x7e\xaf\xa3\x1f\xbf\x1d\xfd\x9b\x48\x2f\x78\xf5\x8d\xa2\x06\xc6\x67\x17\x25\xf2\x21\x1c\x00\x71\x50\x1f\x00\xc4\xba\x41\x53\xed\xd3\xef\x05\x16\x3a\x7b\xe7\x73\x30\x85\x8a\xe8\x84\xa6\xb8\x98\x9e\x96\x4f\xc4\x90\x04\x57\x07\x14\xcd\x6e\x3b\xa8\x60\x69\x7d\x94\xfa\xef\xbd\xe0\xef\x1c\xdc\x81\x2e\x59\x17\xbe\x0e\x9f\x9a\xd9\x1b\xbc\xba\x2f\xaf\x46\x69\xe0\x79\x3e\xf5\x60\x1b\xba\x9d\xa2\xb9\x14\xd3\x1a\xd5\x2d\xcd\x55\x86\xa8\x0b\xe2\xe0\x0e\x08\xaf\x07\x0f\x66\xab\xdc\x3d\xae\x65\xb5\xcf\xbc\x64\x42\xac\x41\x6b\x71\x43\xdb\xc2\x3b\x21\x9f\x51\xed\x58\x7c\xca\xfa\xb7\x39\xa2\x2e\x88\x83\x3b\xf0\x3e\x3d\x96\x21\xbd\x97\xb8\x36\x4b\x1e\xb5\xaf\x28\xdd\xff\xb0\xc8\xb9\xcc\x9f\x78\x55\xa2\x0c\x0b\xb3\x42\x87\xa3\x97\x1b\x3a\x19\x06\xc4\xc1\x1d\x90\xce\x2c\xba\xe1\x18\xfe\x5d\x21\x42\xbc\x38\x83\x79\x82\x75\xd1\x09\x65\xae\x27\x53\x43\xb6\xb9\x2e\xa9\x86\x31\x3f\x33\x35\x11\xe1\x00\x88\x83\xfa\x00\x20\xd6\x0d\x7a\xee\x39\xcd\x81\xd1\x3a\x85\x66\x03\x8b\x59\x7d\x6a\xdb\xe4\x8f\x72\x9e\x26\xd2\xbe\x4c\xc3\x14\x79\xed\xe8\xf2\x91\x2f\xbf\xe7\x10\x75\xde\x81\x8e\xc0\x03\x71\x70\x07\x94\xda\x07\x6a\x2d\x67\x6d\xbc\x1b\xcf\xc9\xc6\x8d\xd3\x92\x8a\x63\x2e\x52\xc4\xbd\xa1\x90\xfb\x83\xe9\xc8\x23\xec\x7c\xfc\x10\xda\xef\x0b\xc4\xc1\x1d\xf0\x31\x7e\x4e\xb5\x41\xfe\xf0\xb9\xdc\x71\xe0\x0e\x79\xdc\xf3\x2d\xe7\xef\xbc\x57\x8b\xdd\x3a\x54\x1c\x3f\xdb\xd1\x04\x26\x36\x40\xfb\x70\x80\x38\xb8\x03\x2d\x9c\x52\x7e\x1c\x16\x06\x5d\xad\xb1\x59\xd5\x79\x74\xcb\x13\x3f\x93\x89\xd6\x1e\x95\x13\x25\x56\x17\x69\x47\x32\x66\x56\x73\x23\xea\x82\x38\xb8\x03\xa3\x6f\x79\x92\x39\x94\x27\xfd\x2b\x79\x19\x6f\xeb\x73\x1f\x89\x86\x59\x92\x28\xaf\x7e\x17\x9d\x29\x6f\xde\xf3\xbc\x32\xd5\x9b\x8a\x70\x00\xc4\x41\x7d\x00\x10\xeb\x06\x3d\x84\x9e\xe6\x40\x5e\x4e\x6f\x61\x93\xc0\xd8\x8a\x22\x86\x82\x01\x83\x62\x71\xd2\x38\xee\xee\xb5\xad\x36\x39\xf2\x44\xcc\xa1\xe4\x15\xef\x1c\xa8\x07\x82\x38\xa4\xcf\x3d\x03\xaa\x1b\xc6\x7a\xa2\x67\x73\x5f\xe7\x61\x3c\xbe\xe7\x71\x33\xcd\xdc\x8b\x33\xc6\x7f\x04\xa3\xc9\x66\xe3\x45\x85\x14\x39\xf4\x29\x31\x88\x83\x3b\x90\x83\x5a\xb1\xf7\x02\xef\xd9\x98\x49\x46\x5a\xae\xec\x4c\xb3\x12\x73\xda\x84\x88\xe2\x3b\x91\xf8\xb0\xe3\x67\xa1\xcf\x5e\x27\x92\x23\xea\x82\x38\xa4\x4f\x7e\x3d\xf5\x6c\xd4\xe7\x44\xf4\x1e\x99\xdf\x7e\x8c\x5b\x84\xcb\xf8\x66\x57\xf6\x62\x70\x79\xba\x3a\xa9\xd1\xd6\x43\xc6\x3d\x36\xe8\x93\x01\x10\x07\x77\x20\xc3\xd0\x57\xda\x9c\x51\x97\xfa\x15\xf5\x8d\x1b\x3d\x92\x6d\xaf\x9f\xc7\x1d\x33\x95\x7f\x27\x68\x79\x44\xc2\x68\xfc\x98\xaf\x49\x18\xe1\x00\x88\x83\xfa\x00\x28\xd6\x0d\x0a\x0c\xfe\x13\xeb\x6e\x42\x8e\x75\x9f\x14\x52\x92\x65\x70\xed\x09\xd9\x92\x92\xf8\xc8\xa5\xb6\xe2\x49\xd2\x71\x16\x60\x4b\x17\x3e\xa3\xec\x7f\x10\x3c\xbf\x72\x25\xec\xcc\xd6\x30\x40\x17\x3a\x75\x2f\x22\xa9\x29\x0b\xe3\xaa\x36\x6c\xef\x94\x0a\xbe\xa7\x3e\x83\x91\x5d\xd7\x04\x88\x3b\x12\xa7\x15\x93\x1f\x73\xe4\xe9\x1d\xbc\x29\x80\x3e\xe9\x00\x70\x70\x4f\x71\x97\x9f\x76\xd0\xb7\x56\x7a\x96\x27\xa2\xd1\x73\x5e\xe5\x2f\x9f\xd5\x23\xe5\x47\xf3\x18\x74\xf9\xf0\x5a\x2a\xcf\xec\x71\x83\x13\xa2\x2e\x88\x83\x7b\x7a\x0f\x9f\xfb\xb6\x02\x76\x68\x61\x03\xeb\x14\x4b\x8c\xc6\x7d\xb2\x96\xc2\x34\xef\x29\x95\xb0\x12\xb5\xa7\x8c\xde\x9b\xcc\x62\xd0\xf1\xc5\x20\x0e\xee\xe9\x2a\xad\x97\x76\xa6\xaa\x6e\xe8\x52\xd3\xc0\x07\xe2\x77\x55\xaf\x1b\xd1\xaf\xd8\x4f\xec\x7c\x53\xb9\x72\x53\x9f\x61\x31\xb1\x16\x7a\x76\x01\x71\x70\x4f\xcd\x33\x18\x5f\xc8\x24\x4a\x10\xea\x89\xab\xb3\x71\xb5\x35\x37\x6d\x4c\x27\x24\xe5\x0c\xd3\xfa\xdf\x8e\xc8\x6f\x78\xd1\x74\x1e\x5a\xc3\x00\x71\x50\xaf\x02\xc4\xba\x41\x91\xe0\xd3\x63\xdd\xcb\x2a\xc1\x36\x79\xd8\x91\x6a\x87\xc9\x2c\x53\xea\xbf\x7c\x2d\x1e\xc4\x77\x5d\xe4\x65\x42\x99\xaa\x49\x34\x77\xd3\xe2\xaf\xf6\x46\x44\xa4\x41\x1c\x72\xac\x1b\x4d\xc9\x1d\x65\xa3\x84\x0b\x83\x2e\xc1\xb0\xb6\x33\xee\xce\x71\x08\x55\x9b\x50\x5d\xe3\x31\xb6\xe8\xe5\x4c\x97\x6f\x5a\x35\x84\x88\xca\x20\x0e\x39\xd6\x5d\x7e\x7d\xac\x75\xab\x98\xf8\xfa\xf5\xef\x77\x0c\x32\x3e\xa7\xea\xf8\x3d\xf6\x2a\x7a\x5f\x3b\xb9\x93\xed\xf9\xb4\xf1\xca\x58\xa7\x12\xa2\x32\x88\x0b\x90\x41\x41\x21\xf9\x5f\x95\x45\xca\x6a\xc3\x1b\x8f\xcc\x94\xc2\x7e\x5b\x7f\x8b\x6e\xf9\x92\xba\x8d\x42\xe2\x2f\xfd\xfe\x49\x6f\x43\x4e\xcb\x2d\xe9\x09\xab\x2d\x28\xd6\xed\xfc\x65\xfc\xf8\xd5\xee\xb7\xb0\x5b\x23\x49\xfb\x19\xed\xbf\xf3\xfc\x12\xdc\xc7\x88\x75\xd2\x8c\x31\x9e\x96\x57\xc8\xd1\x35\xe1\xff\x3b\xf5\x3a\xf4\x84\xfe\x18\x45\x4b\x58\xcc\x91\xaa\xaa\x26\x8e\xff\x76\xd7\x7b\x62\x47\x9c\x78\xc2\xee\xec\x21\xd7\x0c\x51\xac\x10\xa5\xdf\xff\x42\xf7\xaf\x0a\xa9\xe9\x07\x04\xc8\xd8\xa9\xcb\xd5\x76\x5d\xb8\x2a\x4e\x59\xbe\xf2\x79\x42\x6d\xba\x9c\x4e\x54\xe8\xf2\x87\xec\xca\xcc\xff\x7b\xb1\x6e\xd0\xe0\x4e\x89\x75\x6f\x1f\x07\xe5\xf6\x12\x35\x08\x05\xb6\x98\xcb\x1d\x7b\xdd\x4d\x30\xfa\x2a\xd2\xca\xff\xaa\x53\xf2\xc8\x6c\x8a\x96\xff\x97\xcf\xee\xbf\xd0\x41\x1d\x6a\xfc\xf1\x92\x2b\x9f\xc9\xf0\xab\xb7\xc4\x2a\x9f\x78\x4a\xa6\xc9\xde\x49\x32\xfe\x93\xdc\xdd\x25\x49\xc5\xfb\xe1\xd7\xfc\xbf\x7f\x65\x99\x81\xa3\x18\x94\x06\x16\xce\x82\x7e\x54\x5c\x73\x2d\x7d\x76\x71\xc2\x0f\x5f\x5e\xb6\xdf\x7e\xfc\x7b\xed\x29\x1e\x7f\x80\x02\x14\xeb\x06\x5d\xfe\x9f\x58\x37\xca\x6d\x78\x37\x5f\x2e\x65\xa1\xd2\xfe\x65\x31\x57\x70\x39\x65\x64\xe6\x7c\x0a\xfd\xb1\xd1\xdc\xbb\x14\x51\x97\x77\xd7\x96\xd0\xeb\x1f\x44\x46\xdb\x9d\xc5\x42\xb8\x2f\x72\xac\xfb\x36\x1e\xb7\x75\xaa\x46\xac\xf8\x0f\xfd\xbd\xe9\xe0\x8f\xa2\xaa\x69\x4e\xd3\x7c\x93\x21\x8e\xbb\x66\x83\x0d\x7f\x70\x8b\xe7\x19\xce\xe2\xb2\x28\xe2\x48\x97\xad\x7f\x6d\x68\xf2\x83\xbd\x59\xc2\x66\x5f\xfd\xfc\x7c\x73\xb6\x96\x9a\x24\x61\xf3\xf0\x27\x9f\x83\x32\x34\x23\xbe\xa4\x74\xf3\x4b\x67\x32\x5a\xe4\x58\xf7\xb4\x1a\x8f\x7c\xd9\xc3\xee\xdc\x22\x63\x4c\xeb\xc6\x70\x9d\x72\x1f\xad\xbb\x2e\xaf\x36\x2a\x02\x33\xa4\x04\x1d\x17\x67\x0f\xdd\xcf\x64\xb4\x2e\xc8\x2f\xb0\xf2\x1c\xf6\x18\xb2\x7c\x66\x8c\xc3\x1c\x2f\xfa\x54\xb5\xd5\x19\x09\x27\x87\x61\xcf\x8a\x71\xbd\x7b\x2e\xb1\xd3\x47\x23\x7e\x36\x9b\x84\x23\xc7\xba\xc9\xbf\xa0\xfc\x69\x1f\x24\xee\xdc\x3f\x54\x3f\x29\x3c\xb4\xd6\xd1\x8d\x72\x1e\x38\x28\xdf\x16\xb6\x34\x49\x70\x4d\x7f\xfa\x15\xef\x4c\x46\x9b\x8e\x74\x59\x66\x8c\x8f\x62\x53\x81\xcf\x98\x2e\x5f\xa9\x94\x1e\xbe\x53\xa5\xeb\x5d\x1a\x69\xaa\x80\x3f\x44\xf4\xd2\x97\x46\xb8\x1c\xfb\xe7\x87\x33\x19\x2d\x72\xac\xfb\x97\xf1\x7e\x9d\xfe\x85\xc6\xc5\x8d\xc9\xe7\xb8\xd9\x24\x18\x2e\x9d\x01\xdb\xf3\x1b\x0b\x66\x0f\xd5\x66\x83\xe8\x29\xaa\xd8\x09\xcf\x6c\x3a\x04\xfa\x4b\x3d\x6d\x3a\xf4\xc9\x59\xc1\x91\xfe\xab\x30\x06\xa1\x66\xf7\x6d\x75\xcc\xe2\xeb\xb8\x4e\x61\x12\xbe\x1d\x3b\x86\x51\x6f\x95\x42\x4b\x63\x4e\xa0\x69\x30\x88\x83\x4f\x87\xec\x26\x1a\x26\xcb\x17\x4c\x8e\x0b\xd1\x27\xf4\x9f\xe8\xde\x7b\x44\x2b\x28\x5e\xbc\xde\xdd\x38\x6a\xe1\x89\xb6\xe5\x3b\xf1\x09\x3a\x24\x13\xc4\x21\xe5\x37\x54\x62\xf9\x78\x03\x9d\xb2\xf6\xfb\x71\xcc\x7e\x92\xda\xa2\x59\x16\x0c\x92\xa7\x60\x5e\x9a\xcc\x88\x3f\xd8\xe6\xa5\xe3\x87\xb2\xc2\x20\x0e\x3e\x1d\xba\xd9\xf8\x72\xc7\xec\x49\x5f\x34\xd5\x48\x27\xad\x83\xf1\x7a\xe6\xa6\x18\x1d\xe1\xfc\xce\x60\x9a\x3e\x45\x7f\x8d\x70\x28\x46\x2d\xa2\x2e\x88\x0b\x90\x42\x21\xf9\x77\xdd\x37\x5e\x3f\x37\x30\x17\x25\xe3\x16\x6e\x77\xb8\xc6\xb9\x7e\x88\x96\xd1\xfb\x54\x82\xf1\x63\x6f\x9d\xf8\xdb\xe8\xcd\x10\x06\xde\xef\x88\x58\x37\x88\x0b\x90\x42\x61\xf0\xf5\x0b\xfa\x4f\x7f\xfe\xcb\x93\x1b\xa8\x6b\x9e\xa6\xc0\x8b\x27\x7e\xb9\xb9\x6d\x5d\xf5\x2c\x3f\xdd\xd3\x25\xae\x7e\x2e\xf5\xd8\xcd\xcb\xb5\x9f\x79\xfb\xe1\xf0\xf7\x2d\x41\x43\xf5\x42\xe8\x29\x1b\xc4\xc1\x15\x10\xb6\xef\xa1\x77\x30\x5d\xb7\xdf\x7c\x60\x92\x31\x2e\x6b\x72\x57\x84\xc2\xda\xe5\x65\x74\xc5\x4c\xc5\x31\xa9\x17\xbd\x64\x2d\xf4\x96\x00\xc4\x21\x9d\x5f\x13\x8e\x72\x93\xca\x9f\x9d\x60\x86\x72\x4b\xaf\x3b\x7d\x2f\x9d\x4e\x99\x18\x3f\x08\x7f\xf1\x06\x6a\x33\xcd\x05\xae\x62\x33\x68\xd3\x07\x10\x07\x57\xe0\x47\xf0\x70\xb0\xe5\x11\xae\xcf\xbb\x28\x7c\xea\xdd\xf1\xc2\xd1\xc5\xfd\x1b\x9d\x2f\x4d\x17\x4f\xea\x6e\xd9\x8a\x97\xb2\xcf\x7f\x40\xd4\x05\x71\x70\x05\xf6\x7a\x93\xf9\xc8\xb2\x7e\x69\x29\x9a\x12\x12\xc6\x13\xd6\xd2\x8c\xea\x16\xb6\xc9\xb4\x99\x16\x70\x28\x27\x5d\x19\xe6\xf0\x83\x76\xe9\x05\x71\xff\x28\xf0\x3f\x37\xcb\xbf\x6d\xce\x00\xb8\x85\x9d\xe6\x80\xd4\xc4\x24\xcf\x10\xaf\x93\xf7\xc1\x5d\xc1\x55\xff\xfe\x56\xca\xef\xf2\x71\x97\xeb\x3c\x1f\x90\x8f\x94\x25\x1d\xac\xac\xfc\x81\xa2\xb7\x20\x0e\xee\x80\xe5\x70\x0d\xed\xef\xc5\xe3\xbd\x56\xdc\xed\x6e\x1f\xa1\xf0\x8a\x34\x9a\x3f\x57\x6d\xbe\xc7\xa9\x26\xb1\x9d\xe3\x49\x9e\x21\x81\x36\x51\x00\x71\x70\x07\x78\x2d\x84\x3f\xe5\x73\x75\xbb\x6a\x10\x2e\xa9\x92\x5a\x28\xe3\x14\xf0\x28\xc6\x1b\xbb\xc7\xbf\xdd\x7d\xb8\x59\x25\xd0\x94\x08\xc5\xad\x40\x1c\xdc\x01\x12\x21\x82\x9f\xcc\x3d\x07\x7c\xf3\x47\xc5\x6f\x85\xf1\x26\xc8\x73\x98\x44\xed\xd6\xc8\x3b\x23\xed\x1f\x0d\xab\x96\x6b\x39\x58\x22\xea\x82\x38\xb8\x03\xd8\x93\xec\x3e\x78\x32\x21\x3a\xd7\x6e\x95\x72\x1b\xbd\x1c\xd1\xf8\xda\xf2\x60\xe0\xc6\xee\xdc\xc2\xfb\x86\x10\x8d\x95\x94\xe7\xd8\x08\x07\x40\x1c\xc2\x81\xff\xcc\x5c\xfe\xe2\x00\x68\x3e\x71\xea\x0a\xce\xc5\x65\xfb\x82\x5f\xd1\x8d\x7f\xde\xa7\xa5\x46\x8c\xce\xaa\xbf\x76\xcc\xd7\xee\x57\xf8\x90\x5b\xd2\x4e\x5b\xd2\xbc\x9c\x0d\x39\x00\xe2\xe0\x0e\xb0\xc6\x39\x17\x33\xe9\x3b\x7f\x5a\xf4\x71\xfa\xee\x6d\xd5\xfd\xc8\xfd\x11\xaa\xc2\xc3\x8d\xf0\xa1\xbe\x00\x65\x8c\x54\xfb\xcf\x8e\xd0\x6e\x97\x00\x0e\xee\xc0\xeb\xf9\xa7\x02\xda\x59\x1e\x4d\x84\x1e\xa5\x4f\x39\x3d\x38\x29\x69\xb0\xd9\xbf\xa9\x95\x3d\x29\x9b\x4e\xbd\xba\x79\x59\xbc\xb6\x1e\x51\x17\xc4\x21\xed\xd8\xce\xe2\x68\xe7\xe1\xf1\xc1\xb8\x0a\x43\x4d\x09\x23\x8d\x57\xbd\xdf\x57\x52\xde\xde\xe8\xc2\x27\x34\xb9\x0c\xd9\x68\xe3\x0d\xe8\x1c\x37\x10\x07\x77\x20\x79\xd0\xe9\xa3\x2d\x69\xc7\xcf\xc8\x7c\x3e\x0e\x36\x65\xb4\x1c\x45\x8f\x51\xd1\x4d\xa1\x80\xb7\xb3\x86\x0f\x2f\x0c\x7b\xce\xe0\x23\x1c\x00\x71\x50\x1f\x00\xc4\xba\x41\x93\xbb\xd3\x1c\xf0\x52\x73\xca\x20\xad\xc7\xd6\x08\x8a\xd5\xbd\x5b\xc1\xc9\x3f\x7f\xb5\x37\xfc\xfd\x92\x1b\x13\xab\xbc\x05\x77\x13\x76\xc3\x46\x1c\x62\xec\x20\x0e\xee\xc0\x9b\x5f\xbd\x61\xef\xf3\x58\x24\x19\x26\x89\xd4\x15\x05\xaf\xff\x7f\xcc\xfd\x65\x54\x56\x5d\xdb\xbf\x81\x12\x82\x74\xa3\x80\x92\x92\x52\x52\x4a\x48\x88\x20\x52\xa2\x34\x92\x0a\x92\xd2\x25\x48\x23\x21\x22\x5d\x22\x48\x0a\x08\x48\x77\x4a\x2a\x20\xdd\x48\x2a\x52\x52\xd2\x29\x7b\xec\xe7\xbd\xaf\xf5\xde\xcf\xba\xd8\xce\xff\x1e\x83\x0f\xef\xf7\x63\x9c\xcb\x29\xc7\x75\xae\xb9\xe6\xfa\xad\x39\x2f\xbd\x47\x7d\x71\xd8\xf8\x88\x48\xa1\x93\xdd\xc0\xb4\x70\x30\xe9\x21\xa2\x2e\x88\x83\x3b\x30\xea\x38\x26\x57\xa4\x75\xa2\x10\xee\xfb\xf8\x19\xb6\xb4\x78\x4f\xbb\xb4\xaa\x63\xec\xe3\xbb\x86\x7e\xd3\x64\xbb\x71\x5f\x23\xa1\x8d\xfb\x40\x1c\xdc\x01\x59\x87\xcf\xe3\xb6\x4a\xb2\x42\xa4\xb9\x25\xb3\x32\xbb\x0e\x2f\x09\x95\xa9\xb3\xe9\x73\x7e\x95\x5a\x8c\xb7\xce\x62\x0a\x71\xcb\x23\xea\x82\x38\xb8\x03\x6d\xaf\x62\x02\x62\xd0\x5b\xd7\x24\xb0\x70\x4a\xcb\x4b\xf5\x70\xf7\x7c\xfb\x8c\x33\x7c\x1b\x68\x78\x8f\x19\xec\x14\xc3\xf1\x17\x10\x0e\x80\x38\xa8\x0f\x38\xfd\xdd\x01\xd0\x4c\xfb\x34\x07\xc8\x87\x9f\x0e\x5e\x6a\x3f\xf7\x84\x20\x6b\x65\x97\x36\x80\xab\xbf\xbb\x80\xae\x40\xc2\x8d\xca\xfe\x77\x7a\xa3\xf7\xe8\xfb\x65\xe8\xcd\x0b\x88\x83\x3b\x20\x2a\xf3\x08\xbd\xa6\xab\xc3\x5d\x88\xd3\x49\xa9\xdd\xf4\xe5\xb0\x9d\x30\x8b\xad\x19\x76\xf0\xad\x67\x4a\x06\x3b\x8c\xef\xa4\xa1\x95\x2c\x10\x07\x77\x40\x33\xcf\x49\xdc\xe7\x33\x39\x63\x3a\x9e\xc1\x84\x90\x45\xe9\xb4\x79\xfb\x6d\x77\x61\xb4\x1c\x81\x34\x43\xcc\x39\x0b\xd2\x48\x4b\x44\x5d\x10\x07\x77\xa0\xeb\xe0\x0a\xae\x47\x09\x81\xa3\x7b\x19\x7d\x3f\x0b\x2b\x87\x3f\x6b\x4f\xfe\x3d\xd2\xfd\xeb\xad\x8d\x16\x95\x9e\xf4\xd3\x4e\x3f\x10\x75\x41\x1c\xdc\x01\x11\x73\xcf\x07\x24\xf4\x8c\x7e\x25\xc7\xfb\x9d\xaf\x28\x6c\xe6\x62\x5f\x6a\xac\x2b\x76\x71\x85\xd8\xff\x08\x50\x51\x67\xa8\x86\x36\x69\x01\x71\x50\x1f\x00\xc4\xba\x41\x8f\x3d\xa7\xee\xd6\x5d\x70\xe2\x25\x33\xed\x32\xb0\x9c\xbd\x4b\x3e\x5c\xdf\xff\xa2\x21\xf5\xd9\xf1\xf8\x4b\x87\x83\x30\x0a\xb7\x51\x01\xc5\x49\xe8\x6b\x4f\x10\x07\x77\x20\xfd\x35\x2e\x49\xf1\x83\xfc\xce\xf6\x2f\x73\xf2\x8e\xc7\x64\xbf\x2e\xe2\xdc\x2f\x48\xc5\x68\x24\x48\x2f\xf9\x14\x66\x85\xdf\x0b\x9d\xdc\x00\xe2\xe0\x0e\x90\x4d\xc9\x7f\x37\xe7\xfd\xe2\xec\xac\xdb\xc2\x39\xfd\xb0\x72\xee\xa6\xc5\xde\x3a\xef\xaa\x55\xd3\x4e\x91\xef\x78\x40\xa3\x08\x34\x7d\x07\x71\x70\x07\xb8\x6f\x6f\x7c\xef\x12\x2c\xab\x0a\xbb\x68\x1f\x27\x7a\xa4\x18\x26\x70\xfb\x5b\xc5\x1c\x67\xba\xfe\x0b\x9b\x26\x83\xe7\xad\x9a\xd0\xe9\x1d\x20\x0e\xee\xc0\x63\xf3\xbd\xdb\xfa\x21\x49\x11\x23\x4b\x9c\x58\xe5\x4b\xcc\x87\x71\x1a\x52\x9a\xa1\x05\x1c\x0f\x07\x0b\x47\x69\xed\xd0\x24\x19\x10\x0e\x80\x38\xa8\x0f\x24\xfe\xdd\x01\xd0\x33\xe8\x69\x0e\xd0\x9d\xbf\xfd\xf6\xb9\xba\x87\xd6\xfd\x98\x28\xd3\x3b\x1a\xfd\x53\x17\xaa\xed\x92\x18\xbe\xaf\xe7\x75\x31\x6e\xcb\x04\x7e\xe6\xe3\x83\x36\xaa\x02\x70\x70\x07\xc8\x8b\x7f\x59\xdf\xa5\x4a\x51\x62\x3b\x16\xc2\xa2\xd2\x7e\x9d\x8b\x22\xd1\x38\x31\xb7\x5b\x47\x1c\xd1\x36\x60\x1e\xfd\x8e\x12\xda\xf8\x06\xc4\xc1\x1d\x18\xce\x8f\x2a\x58\xf5\x57\xa1\xb3\x0c\xda\x36\x6e\x0c\xc6\xd0\x6c\x31\x9c\x12\x1a\xd5\xb3\xfc\x52\x81\x79\x97\x2b\xeb\x67\xce\x2c\xf4\x16\x12\xc0\x21\x25\x3c\x02\x49\xfd\x6d\x67\x97\xb1\xc5\xca\xaf\x7f\x16\x98\x34\x53\x6c\x51\x6c\x4d\xba\x62\xfa\x92\x71\xd4\x47\x2b\x63\x12\x6f\x16\x3a\xbd\x00\xc4\xc1\x1d\x10\x36\xf6\x73\x9b\xde\x08\xdd\xda\xc5\xf8\x4c\xc3\x24\xfc\xd1\xe6\x78\x33\x0d\xf7\xd3\xd5\x32\xd5\x51\xc1\x2b\xcd\x7a\xee\x2f\x6d\x11\x0e\x80\x38\xa8\x0f\x80\x62\xdd\xa0\x65\xc5\x7f\x62\xdd\x28\x03\x48\x4b\x18\xf7\xce\x31\x97\x11\x73\x4b\xb5\x3c\xc0\xb4\x6d\xf4\x98\x61\x34\xf8\x2d\xd3\x55\xa8\x23\x7a\xf4\x78\xfa\xfa\xe8\xd2\x26\x13\x49\xe3\x99\xac\x9c\x20\xc7\xba\x2b\x1d\xa4\x0d\xbe\x5c\x7c\x34\x72\x99\x8c\x06\xc7\x2e\xac\x6e\x77\x9d\xc0\xc0\xf0\xc3\x03\x9a\x6c\xe7\x41\x05\x96\x7a\x2d\xb4\x33\xd9\x75\x00\xe5\x10\xe9\xb2\x5d\xd8\x9a\x3f\x17\x8f\xa2\x3b\xdc\x50\x89\xb4\x55\x83\x55\xd0\x2f\xf5\x9b\xf9\x2b\x8c\xdf\x25\x64\xa6\x7f\x37\xd6\x68\xf2\x35\xe7\x4c\x46\x8b\x1c\xeb\x1e\xdb\xcd\xb9\xa2\xdc\x2c\xfb\xd4\xcb\x38\xfe\x27\x3f\x87\x47\x3c\x27\xc9\x85\x57\x66\x35\xdb\x15\x33\x92\x7a\x8d\x44\x6f\xab\x3c\xce\x64\xb4\xbc\x48\x97\xc5\x67\x14\xdf\x99\xa8\x6d\x69\xf3\x0c\xb8\xb0\x16\xf3\xd6\xfe\x03\xb3\x64\xdc\x9d\x86\xed\x65\xd1\xc4\x93\x76\x9f\xd5\xb8\xa6\x2b\x67\x32\x5a\xe4\x58\xb7\x78\x25\xf3\xf4\xb6\xf4\x55\x5b\xdf\x51\x1d\x5f\x46\xde\xd4\xda\x14\xcb\xbd\xf6\x7b\x64\xcf\xb7\x51\x47\x99\x14\xa8\xbb\xef\x68\x9d\xc9\x68\xb5\x90\x2e\x2b\x99\xb9\x5b\xbd\x19\x50\x24\x42\xe9\xfc\x0a\x43\xb7\x57\x2c\xdb\x5a\x47\x95\x28\xd5\x9a\xef\x26\xd1\xd2\xc7\x73\xb7\xde\x0b\x7c\x3d\x93\xd1\x22\xc7\xba\xa7\xbf\xcf\x31\xd3\x85\xcd\xb6\x3c\xcd\x96\xf4\x65\x46\xad\x31\x3c\x57\xa5\x28\x5e\x5c\x51\x6f\x20\x61\x11\xec\x11\x4d\xc6\xab\x70\x66\x6b\x80\xa0\x5f\xea\x69\x8d\x5e\x44\xb6\x98\x76\x84\xb4\x8f\x48\xfa\xe1\x8a\xc9\xbc\x71\xb1\xa0\x77\x6c\xc2\xd5\xb5\x29\xc6\x2a\xd5\xca\x20\x3b\xaf\xcb\xaf\x4c\x11\x0d\x0e\xc4\xc1\x1b\xbd\xab\x91\x67\x62\x2f\x06\xe6\xb3\xa2\xfe\xe7\xa1\xab\xc2\x46\xeb\x9f\x38\x8f\x31\xec\xb9\x56\x2c\x86\x1e\xe3\x1c\x59\x88\x49\x42\x3b\xbd\x81\x38\x78\xa3\x37\x29\x0d\x17\x72\xe6\x9b\x19\x79\x17\x58\x6f\xe1\x71\x61\xdd\x82\x49\x30\x44\x37\x73\xce\xc6\xba\x77\x01\xaf\x31\xc2\xa7\x12\x3a\x18\x19\xc4\x21\xbd\x12\x55\xfd\x4e\x7a\xa2\x4b\x2f\x96\x70\x8e\x9d\x87\xec\x6e\x56\x85\x6a\x40\x86\x99\xc5\x73\x69\x1b\x1c\x71\x15\x35\x63\x4f\x61\xa8\xd1\x83\x38\x78\xa3\xa7\x63\xae\x30\x79\x73\xce\xe6\xa5\xe6\xe8\xbb\x57\x03\x94\xbf\x9c\xcf\x3f\xc8\xab\xb3\x23\x78\x1e\x6e\xba\x50\x94\x6d\xeb\x69\xd2\x8b\x68\xf4\x20\x0e\xba\xd9\x0f\xfc\xfd\x66\x0f\x6a\x9b\xa7\x39\x20\xb1\x89\x99\x60\xcc\xf9\x35\x53\xc9\xb1\xef\x23\x96\x6a\xc6\x93\x4b\xf9\x6c\x7a\x4f\x72\x6c\xc7\x39\x25\xb8\x06\x07\x8d\xb4\xa1\x85\x0f\x10\x07\x77\x40\x78\x9e\xfe\x9a\xef\x23\xed\xf3\x3d\x0e\x98\x56\x02\x2c\x03\x91\x05\x36\xb5\x4c\x6d\x5f\x25\x37\x57\x63\xbe\xf7\xa3\xf8\x54\x43\x47\x68\x80\x38\xb8\x03\xbe\x39\x23\xe7\x70\x52\xc9\x6e\xde\x5b\x74\xe5\xf5\xb8\x65\x8a\xfd\xed\xe2\x97\xfb\x9e\xbb\x63\x0a\x1f\x4d\x62\xbf\x98\x2b\xbe\x87\x1c\x00\x71\x70\x07\x8e\x62\x36\x13\x77\xd8\x5e\x59\xea\xc8\x3d\xa9\x0f\x57\x1c\x48\x41\xa3\x35\x5c\x37\xba\x13\x51\x23\xb8\x43\x77\xd4\x2f\xfe\x00\xfa\xc4\x01\xc4\xc1\x1d\xd0\x0d\xf4\xf9\x50\x57\x15\x36\x5f\xca\xf2\x81\x2e\xd6\x3b\xda\xed\x3a\x33\x17\xf3\x68\xe0\xc8\x4a\xd7\xbe\x7f\x58\xde\x0c\xe9\x22\xc2\x01\x10\x07\xdd\xec\x01\xb1\x6e\xd0\x3d\xec\x34\x07\x04\x05\xc5\x55\xdc\xe4\x7e\x37\x31\xb1\xdf\xec\x27\xf8\x1d\x38\xdc\x1c\xb8\xa7\xe7\xd4\xd4\xc5\x5d\x5e\xc2\xa8\xae\x69\x34\xe9\x82\x18\x3b\x88\x83\x3b\xa0\xa8\x70\x73\x2e\xf9\x97\xfb\x9d\x84\xd7\x4b\x8a\x0c\xc1\xf7\xd6\x39\x94\xf9\x17\xe2\x82\xeb\xd9\xa7\xb7\xdf\x5b\x97\x3e\x41\x7d\x86\xa8\x0b\xe2\xe0\x0e\xf4\xbd\x78\x4e\x9c\x17\x1a\x46\xe8\x85\x49\x44\x3d\xbf\x1f\xc5\xc4\x39\x1c\xc9\x1d\xf7\xe3\x78\x92\xa1\x3a\x46\x0d\x4d\x22\x10\x7a\x17\x00\xe2\x90\x1e\xfe\xdd\xf5\xe6\xe7\x3b\xe3\x5a\xec\x6a\xdd\xa4\x87\xe3\x04\x30\x2e\xa8\xe3\xdf\x2e\x57\x76\x4c\xa0\x7f\x11\xbe\x7b\x5f\x22\xe6\x27\xf4\xf0\x0f\xe0\xe0\x0e\x30\x94\xaf\xb3\x47\xd8\x0b\xd1\x9f\x5b\xb5\xd0\x11\x71\x41\x6d\xa6\xe0\xff\x4d\x21\xec\xcb\x7e\xc0\x6c\xec\x2a\x4e\x10\xee\xe7\x88\x70\x00\xc4\x41\x7d\xe0\xf0\xef\x0e\x80\x26\x14\xa7\xee\xce\xf9\x3d\xe7\x73\xeb\xec\x04\x9d\xfa\xda\xc7\x1c\x79\x6a\x1c\x77\xa5\x17\x91\x74\xe6\xb7\x4a\x3b\xf3\xd3\xf3\x7c\x3e\x5f\xb3\x80\x16\x6c\x41\x1c\xdc\x01\xf6\x8a\x24\x7d\xa9\xac\x26\xed\x18\x3e\x0e\x3f\x9e\xd2\xfd\x2b\xa4\x29\xbd\x75\x4a\x37\x8b\x78\x99\x48\xc8\x92\x52\xe6\x08\x62\x11\x75\x41\x1c\xdc\x01\x11\x86\xdb\x58\xad\xc5\xb4\x0b\x74\x44\xba\xa8\x5a\x3d\x1c\xae\x68\xfb\x5d\xed\xb5\x56\x41\xc6\x69\x27\x5b\xdc\x78\x99\xd9\xd0\x22\x20\x88\x43\x8a\xf6\xa3\x16\xdd\x52\x41\x65\x2f\xe3\xd9\x14\xae\xa0\x33\x65\xdf\x2b\x70\xbc\x2b\xcd\xc1\xc9\xc2\x52\x4a\x68\x9c\x5b\x96\x7c\xde\x0a\x8a\xf6\x03\x38\xb8\x03\x5b\xd7\x56\xbd\x7f\x2e\xd4\xdc\x70\x43\x27\xa2\x11\x67\xf2\xb2\xe0\xf1\xf9\xbc\xc7\x49\xfe\x99\x51\x3d\x13\x57\x36\xbe\x2c\x29\x0d\xe1\x00\x88\x83\xfa\x00\x20\xd6\x0d\x9a\xdd\x9d\xe6\xc0\xb3\x77\xbc\x9e\xd4\x92\x6d\x17\x3a\x02\x25\x93\xed\x88\x02\xad\xe5\x6b\x56\xda\x50\x38\x7e\xa4\x7f\xec\xc7\x4c\x3a\x8e\x54\x10\x83\x76\x52\x05\x70\x48\xc7\x36\xde\xd4\x65\xd6\x3c\x6e\xbf\xc8\xf2\x84\x58\xd9\x20\x11\x35\xfc\x8f\xff\xb9\xd7\xa8\xbd\x02\xac\xfb\x4c\x07\x92\x01\xe3\x7a\x50\x44\x0a\xc4\x21\xed\xf1\xe2\xa8\xbd\x4b\xd2\x5a\x4e\xe3\x12\xa1\x90\x67\x30\xc4\x93\xdc\x70\xf1\x11\x1d\x37\x29\x2b\x6f\x43\xab\xc9\x7b\xd6\xdd\xc5\x6a\x68\x8f\x17\x00\x07\x77\xa0\x6c\x2c\xc2\x9d\x37\xaf\xe7\x4e\x35\x63\xd9\x88\xab\xfa\xe8\x43\xab\x52\x73\xdd\x5b\x0b\x1f\xda\x58\x1e\xa9\xa0\x60\x3b\xc7\x1c\x43\x9f\xbb\x01\x38\xb8\x03\x33\xd8\xfd\xa5\x9e\xbc\x99\x25\x5e\x45\x3e\xe6\x93\xad\x0a\x05\xef\xd9\xaf\xdc\x7a\x26\x35\x71\x15\x9b\x72\xa4\xd0\xda\xf6\x7d\x16\xc2\x01\x10\x07\xf5\x01\xde\xbf\x3b\x00\x9a\x6a\x9f\xe6\xc0\xf9\x81\x38\x2c\x83\x16\xba\x63\x09\xb6\x73\xb9\x1d\xbd\x21\xd3\x6d\x26\x57\x6e\x05\xab\x58\xa7\xb9\xfe\x5c\xd2\x29\xeb\x2c\x26\x44\x8c\x1d\xc4\xc1\x1d\x50\xde\x73\x8a\x73\xd9\xaa\x72\xc7\x11\xf5\x43\xef\x7c\xb5\x68\x81\xf6\x5e\x90\xe0\xa6\xaf\x8a\x8c\xae\x57\x93\xc0\x72\xfe\xbe\x2f\xa2\x2e\x88\x83\x3b\x70\x87\xde\xd2\xde\xa9\x14\xd3\x9b\x62\x69\x46\x08\xff\xa0\x26\x5e\x5d\x83\xc8\xe0\xf1\xe7\x79\xac\x1a\xb1\x0f\x84\x5d\x7b\xfc\xeb\x88\xba\x20\x0e\xee\x80\x8e\xa4\x4f\xb2\x64\xc4\x4d\xd5\xcf\x02\x49\xab\x7b\x46\x3f\x19\x89\x04\xee\x61\x31\x59\xdd\xae\x1a\xfc\x33\xee\x85\x4e\x19\x0b\x6d\x23\x06\xe2\xe0\x0e\x58\x2c\xd1\x0c\xd4\xad\x4a\xa6\x3b\xe0\xa4\xa7\x6b\xd3\xb6\x84\xe6\x39\xe9\x6e\x5a\x84\xa7\x70\x97\x86\xed\xaa\xea\x50\x59\x4d\x23\x1c\x00\x71\x50\x1f\x00\xc4\xba\x41\xcf\x3d\xa7\x39\xb0\xde\xbb\x12\x46\x36\x21\xf9\x70\xe3\x72\xc3\x31\xdd\x6f\xb9\x91\x4e\xdf\x76\xc9\xd1\x89\xf9\xcf\xba\x9a\xb6\xaf\xa8\xdc\xb8\x26\x10\x63\x07\x71\x70\x07\x76\xb7\x13\x36\x66\x6f\xba\xb2\xe3\x67\xf5\x66\x3f\x33\xf3\x96\xec\x8a\xdc\x5e\xf4\x8c\x1d\x4f\xaa\x24\xaf\xd5\x76\x99\x52\x5b\x46\xd4\x05\x71\x48\x27\x37\xbc\x5d\x2b\xa1\xcc\x50\xe3\xc7\xc2\x7d\xd3\xc4\xe3\xbb\x70\xe3\xfc\xe5\x6f\x7e\x5c\x46\x31\x28\xaa\x76\xbd\x8a\x4f\x9b\x7e\x40\x27\x6e\x83\x38\xb8\x03\xf2\xaf\xde\xeb\x3e\x50\x97\x78\xee\x26\xfc\xd0\xec\xe2\x36\xbb\x42\x6c\xa3\x43\xb3\x6f\x98\x8d\xda\xbb\xfc\xc3\xdf\x32\x1a\x76\x6d\xd0\x67\x23\x00\x0e\xee\x40\x39\x19\x2b\x4b\xc9\xa3\x26\x83\x71\x85\xe2\x4d\x69\x89\xb1\x35\x96\x24\x9f\xef\x2d\x1f\x39\x6d\x1b\xf6\x56\xb7\x6f\xe7\x06\xda\x20\x1c\x00\x71\x50\x1f\xd0\xfa\xbb\x03\xa0\x87\xd0\xd3\x1c\x18\xc4\x51\x76\xbc\x17\x98\x31\x4c\x5f\xe8\x96\x7c\x41\x3a\xd7\x49\xc5\xcc\x9f\x25\x3b\xca\xda\xf3\x6e\xdf\x93\xf0\xa2\x6a\xc5\x40\xc4\xd8\x41\x1c\xdc\x81\xa8\x65\x9e\x4b\xcc\x2b\x5b\xfe\x9e\xdf\xed\xe8\x6c\xc5\xf0\xe9\x8b\xde\xe2\xf5\xe8\xde\x25\x7d\x1d\x5b\x36\x40\xeb\x2c\x64\xa1\x8f\xa8\x0b\xe2\x90\x76\xeb\x36\x75\x12\x5c\x76\xd3\xd4\xc1\x40\xbb\x76\x82\x8f\xfb\x7a\x72\x22\x34\x69\xe2\x86\xc9\xf2\xfc\x40\xb4\x38\xed\xe0\x07\xf6\xfb\x88\xba\x20\x0e\xee\x40\x04\xbe\xd8\x51\xa2\xc7\xc1\x98\x87\xc4\x07\x1d\x9c\xcb\x78\xb2\x42\xe4\x4e\x17\x46\x8a\x16\xa2\x3d\xc3\x51\xeb\x1a\xff\x24\x43\x9f\x91\x82\x38\xb8\x03\x4f\x0b\x0b\x5b\xd2\x73\x68\x4c\xe9\x31\x34\xdc\xff\x6c\xfc\x36\xeb\x51\xd4\xec\xa8\x94\x19\x7a\x35\x8c\x22\xf9\x11\xef\x40\xad\x0c\xe1\x00\x88\x83\xfa\x00\x28\xd6\x0d\x0a\x0c\xfe\x13\xeb\x46\x09\x43\x5a\xc3\xc8\xbc\x5f\xb4\x29\xa6\xf0\x3d\xbb\x57\xf0\xf6\xf7\xe7\x76\xee\x43\xaf\x1e\x65\x89\x9e\xdf\x7d\xef\x30\xaf\x57\xc9\xde\xc8\xd0\x36\x76\x66\x6b\x18\xa0\x0b\x9d\xe6\xa9\x81\xf6\xd1\xc5\x30\x2b\x86\xb8\x13\xff\xb2\x4b\x2a\xa1\x5e\xf7\xd9\xae\xeb\x1e\xbf\xeb\x2e\x8a\x68\x78\x79\xed\x7c\x60\x0b\x13\xf4\x77\x07\x71\x70\x4f\x2f\x7c\xfc\x44\xff\xe7\xb1\x38\x61\x30\xab\xc9\xcb\xbd\x83\x36\xbd\x80\x83\xd8\x05\x2c\x3d\xc9\xeb\xa9\xda\x2c\xb8\x12\x14\x3b\xd0\x11\xee\x20\x0e\xee\x29\x7e\xfd\x7b\xf1\xc8\x1f\x0e\x28\xdb\x17\x76\x6f\xf1\x6a\xf1\x3d\xc4\x11\xa2\x8f\xe1\x4c\x2f\xd0\xeb\xa4\x12\x9b\xa6\x8a\x8c\x37\x80\xf6\x8f\x03\x70\x70\x4f\xa5\x65\xca\x1d\x31\x1e\x14\x97\xc8\xae\x08\xc6\x2f\x2a\x1e\x49\x0a\x33\x26\x11\x26\xa3\xec\xe1\xd2\x3e\x0d\x40\xd3\xef\x63\x82\x5e\xe2\x83\x38\xb8\xa7\x57\xa6\x64\xbd\xa2\xba\x87\xe4\xec\xc3\x1b\xb7\x66\xa2\x14\x86\x9a\xbf\x2a\x4c\x4c\xfa\x77\xd6\x5d\x34\x35\xbb\x68\xfc\xfa\x5e\x1e\xc2\x53\x10\x07\xf5\xaa\xb0\xbf\xc7\xba\x41\x91\xe0\xd3\x63\xdd\x0d\x61\x39\xcb\xa3\xc1\x1e\xe4\x1f\x52\x79\xd0\x2a\x70\x9f\x2e\x35\xd2\x06\x85\x92\x0f\x09\x35\x97\x1a\x7d\xe5\x95\x32\xcf\x27\x41\x44\xa4\x41\x1c\x72\xac\xfb\xaa\x8a\xe4\x09\x99\x4c\x44\x92\xce\x6d\x41\x8b\x46\x56\xa2\x82\x8e\xef\x04\xeb\x2d\x72\xae\xc1\x7c\x13\xf2\x0d\xb1\xcb\x02\xd5\x88\xca\x20\x0e\x39\xd6\xdd\x60\x82\x42\x35\x7e\x97\x47\x9b\x5c\x5a\x41\xbd\xfd\xc9\xf0\xb5\x5f\x16\xaa\x63\xe1\xab\xf3\xed\x11\x68\x4a\x41\xeb\x94\x5a\x95\xd0\xbf\x19\xc0\xf9\x4a\xa1\xa0\x48\xfc\xf7\x27\x74\x63\x97\xda\x8e\xab\x77\x54\x36\xe8\xf7\x6a\x69\xeb\x67\x5e\x99\x4a\xb2\x24\x95\xc5\xe7\x9b\x7c\xf2\xe2\x93\x52\xfe\xdd\xcf\x01\xc5\xba\x17\x05\xa8\x73\x3d\x24\xca\x7f\x9f\xf0\xdf\x50\x59\x78\xed\x9b\xa8\x20\x68\xce\xb0\x36\xa3\xcd\x71\x33\xc0\x61\xa3\x84\x5a\x35\xe4\xdf\xb1\xee\xe8\x07\xb2\x3a\x1f\x84\x86\x14\x1d\xce\xab\x11\x6e\xf9\xa4\xe9\x95\x65\xb7\x72\xb4\x44\x9b\xcf\x61\xac\x5c\x4d\x5b\x89\x93\x5b\xfe\x17\x1a\xf6\xe1\xb6\xd2\x78\xd4\x0d\xaf\xbb\xb3\x2d\x8a\x6f\x5a\x99\x26\xbb\x6e\xca\xd6\x30\x5e\xb5\x50\xba\xaf\xee\x33\x29\x6f\x2b\x84\xf3\x7f\x2f\xd6\x0d\x1a\xdc\x29\xb1\xee\xd7\xf4\x5d\x8d\x9f\xf4\x5a\x46\x71\xb0\xd4\xae\xf3\xe7\x2c\x1f\x97\x87\x5c\x3b\x67\x37\xa1\x29\x1a\x7a\x41\x82\x28\x5a\x8f\x7f\xf3\x5f\xa8\x59\x9e\xf1\xd4\x75\x1e\xc5\x54\x4a\xf4\x26\x7c\xa6\xec\x99\x2e\x6f\xb1\x32\xee\x59\xf5\x73\xb6\x53\xb9\xc6\xa4\xc2\x93\x54\xae\xff\x42\x37\xe6\xbd\x86\x07\xda\x7d\x32\xe2\x9c\x50\xe4\xf0\xaa\x7b\xe8\x29\xc9\x53\x4b\x47\x9f\xb1\x91\x9e\xa4\x6e\xad\xcb\xa8\xc8\x91\x42\xb1\x6e\xd0\xe5\xff\x89\x75\x4b\x20\xc5\xba\xd3\xb2\x5f\xb2\x31\x14\x77\x7a\x8f\x92\xbd\xfe\x38\xbc\xf5\x72\xbc\x76\x77\xfc\xc1\x34\x9a\x66\x17\x1b\xf3\x16\x2e\x16\xb9\xa4\xcc\x59\x2c\x84\x7f\x42\x8e\x75\x47\x37\x0d\xde\xeb\x7e\xbe\x54\x8f\x69\xb5\x72\x3d\x97\x72\xe2\x28\x14\x5b\xbf\x73\x74\xd8\x0d\x47\xdd\xc5\x6c\x5b\x7a\x8d\xd3\xfa\x2c\x2e\x2b\x81\x1c\xeb\x9e\xe4\xa4\xbb\xfa\x35\x77\x37\xc5\xc3\x0c\xfd\xb7\x59\xed\x83\xf7\xf5\xd5\x82\x46\x09\x0c\x57\x82\x78\xa3\xe2\xae\x69\x06\xe2\xf1\x9c\xc9\x68\x91\x63\xdd\x33\x26\xfc\x3e\x2f\xeb\x87\x1f\x33\x06\xe0\x47\xe1\xb1\x7f\x2e\xd5\x1b\x5d\x8b\x3b\x77\xb3\x10\x5b\xbb\xc6\x0b\xeb\x53\x42\xd7\xfd\x33\x19\x2d\x72\xac\x7b\xbd\xf2\xe3\x75\xb7\xe5\xbb\x58\x43\x68\x25\xc6\xcf\x4d\x26\xd1\x02\x79\x7e\xf4\xfe\xde\x8e\x30\x2b\x8d\x9f\x31\xc8\x89\x7f\x1e\x72\x26\xa3\x45\x8e\x75\x9b\xd0\xcd\x52\x19\x13\x3c\xc3\xfb\xba\x5e\xf9\x3a\x88\xe4\xa3\xff\xc4\xca\xc7\x92\xc9\x89\xe1\x1f\x16\xdd\x78\x6c\x6e\x0f\x3b\x9f\x9c\xc9\x68\x91\x63\xdd\xcf\xe5\xb4\x0f\x5a\x28\x28\x43\xbc\x43\x2b\x03\xcd\xf4\x83\x58\x51\xbd\x1f\x7f\x2a\x08\xf5\xa9\xc1\xe6\xa3\x76\xb3\x49\x0e\xce\x3b\x93\xd1\x22\xc7\xba\xdb\xa4\x4f\x64\xf7\x9a\xca\x2b\xae\x15\x5d\x1d\x7c\xe8\x72\xf8\x50\x75\xf4\x22\x2f\x7a\xf9\x91\x23\xd7\x31\x95\x9a\xb2\x02\xc9\xea\x99\x4d\x87\x40\xbf\xd4\xd3\xa6\x43\xdb\x0b\xec\x9b\x31\x2d\x05\x5f\xf4\x04\x66\xf0\x8c\xa3\x1f\xec\x9c\x08\x98\x6b\x08\x14\x28\x0c\x75\xe7\xf0\xbc\xc9\xba\x92\xac\x81\x98\x06\x80\x38\xf8\x74\xe8\x9d\xed\x18\x7b\xb7\x88\xe4\xf5\xc7\xf2\x41\xfb\x72\xe9\xec\xfc\x44\xad\x7b\xe1\x3a\x9e\xb5\x99\x26\x1f\x7f\x86\x7f\xb5\x56\x87\x0e\x32\x04\x71\xf0\xe9\xd0\x92\x80\xfc\x88\x67\x17\xde\xbc\x2b\x7d\xcf\xad\xc5\xaa\xeb\xd3\xd6\x37\x2b\xdf\x91\x3c\xf5\x74\xd5\x38\xb1\x3f\xdf\x4b\xdc\xcd\x83\xa8\x0b\xe2\x7c\x25\x51\xbc\xfe\x5d\x77\xea\xcd\xb7\xf7\x85\x5f\xa7\xba\x1a\x62\xde\x16\x4b\x65\x5e\x57\x96\x5b\x4c\xbb\xcf\xe7\xa6\xc3\x3e\x30\xf9\x44\xda\xc3\x4f\x12\x3a\x14\x08\xc4\xf9\x4a\xa2\xfe\xd7\xff\xc3\x08\x75\x09\x87\xbd\x22\x7e\x50\x5b\xa6\xe2\xdc\x84\xb5\x76\xc9\xfb\x22\xcc\x9f\xfa\xce\x65\x56\x34\xfc\x6a\x2a\xcb\x1a\x4f\x38\x11\xb1\x6e\x10\xe7\x2b\x89\x82\xe6\xe5\xed\xf7\x9f\xfe\xfc\x97\x27\x37\x50\xd7\x3c\x4d\x81\x7e\xcc\x86\xc2\x6b\x1c\xf3\xdd\xcc\xbe\x1f\xb7\x7b\x8e\x4f\x4c\x6f\x2f\xcd\xe0\x75\xbf\xf4\x67\xa3\xcf\x13\x11\xd1\x5a\x5a\x80\x76\x68\x05\x71\x70\x05\xee\x78\x8d\x1a\xcc\xa0\x76\xdb\xdd\xf8\xf2\x33\x79\x42\x71\x7c\xa5\xde\xf0\x65\x88\x6c\x61\x51\x1a\x0d\x8f\x65\xc6\x65\x3a\xbf\xb7\xd0\x4a\x0b\x80\x83\x2b\xb0\x96\x87\xf1\xb2\xef\xc4\x70\x67\xd5\xed\x9d\xe6\xa8\x00\x39\x39\x03\x81\xab\x90\xc2\xbd\xe2\xfd\x46\xdc\xdb\x74\x64\x97\x77\xa1\x99\x2b\x88\x83\x2b\x40\x34\xb0\x87\xcd\x42\xdf\xcf\x1f\xf6\xee\xf7\xc1\xd0\xf1\x15\xff\x2f\x6f\x2d\x47\x7f\xef\xa5\xb4\xda\x7f\xf1\xf1\x0c\xd4\x7a\x0a\x6d\x2a\x03\xe2\xe0\x0a\x8c\x4d\x46\x73\xcd\xfc\xf0\x95\x18\xd0\x65\xf0\xb0\x67\x5d\x4b\x30\xa0\x4b\x1d\x08\x97\xd3\x95\xdd\xfe\xbc\x16\x74\x21\x63\x54\x1d\x31\x23\x06\x71\xff\x28\xf0\x3f\x37\xcb\xbf\x45\x7a\x01\xb7\xb0\xd3\x1c\xa8\xf0\xe8\xf8\x99\x59\xe7\x4b\x7e\x91\x22\x5e\xa7\x66\x31\x26\x2d\xdc\xd3\x89\xe0\xf0\xf6\x44\xde\x5b\xd5\xca\xe3\xb6\x5f\x59\x50\xdc\x0a\xc4\x21\x9d\xbf\x1a\x7d\xf9\xcd\xbe\xb5\x40\xbd\x49\x3a\xaa\x77\x49\xef\xef\x6f\x68\x58\xa4\x76\x92\x8c\x9d\x75\x1a\x46\xd4\xe7\xae\xd5\x5f\x81\x56\xdb\x40\x1c\xdc\x81\x81\x80\xc0\x47\x5d\x21\x97\xc4\x3e\xb3\x5a\x39\x57\x73\x61\xd4\x72\x88\x47\xe8\x6d\x9a\x51\x87\x95\x7e\x93\xa8\x6e\x31\x1f\x81\x56\xdd\x41\x1c\xdc\x81\x47\x62\x3b\xbf\x0b\x39\x0c\x63\xd9\x2d\xcd\x95\xa7\xbb\xdc\xa8\xaa\x63\xd2\x1c\x56\xcd\x2f\xf9\xd6\x58\xba\xef\xdd\x79\x23\xec\x01\xad\x0a\x00\x38\xb8\x03\x3c\xe9\x3d\xdb\x7b\x2f\x50\x07\x34\xfc\x2e\x07\x45\x6a\xa7\x07\x71\x9a\x35\x9a\xb9\xff\x12\x35\x7b\x31\x23\xdc\xba\x5a\x73\x08\x9d\xc1\x0b\xe2\x10\x0e\x48\x00\x62\xdd\xa0\xf9\xc4\x69\x0e\xe8\x45\xaa\x29\xcb\xd3\xd2\x2f\xb5\xf0\xa8\x99\xbd\x4d\x58\xb0\xdd\x69\x77\xc2\xf0\xe6\xdc\xfa\x1c\x6d\x52\x93\x93\xee\xb4\x05\x6d\x76\x00\xe2\xe0\x0e\x74\x6d\xb5\x73\x25\x70\x39\xff\x42\xf7\x54\x2f\xb3\x62\xa9\x9b\x8a\x11\xe4\x8b\x4d\x35\x28\xc7\x21\xcf\xaf\x26\x50\xf2\x17\x81\x36\xfe\x00\x71\x70\x07\x3a\x5e\x39\x9b\xd4\xac\x98\x87\x50\x6a\x95\x35\x58\xaf\xdc\x3e\xbc\x55\x96\x80\x76\xd7\xd2\x84\x53\x59\x7c\x81\x86\x33\xfe\x09\xb4\x99\x04\x88\x83\x3b\x90\x34\xd1\xec\x6e\x9f\x2d\xb6\xea\x74\x63\xd5\x47\xa9\xf1\x73\x49\x1a\x19\x67\xc3\x55\x0c\x26\x56\xb9\x0b\xfb\x45\x97\x24\x03\x8f\x10\x75\x41\x1c\xdc\x81\xca\xc5\x5c\x94\x77\x97\x5a\x63\x8e\x93\xb4\xc4\xdf\xeb\xee\xbc\x90\x30\xa1\x75\xdc\xad\x76\x1b\x3a\xaf\xa6\x39\xda\x52\xa2\xdb\x84\x70\x00\xc4\x41\x7d\x00\x10\xeb\x06\x4d\xee\x4e\x73\x60\x2e\x7f\x69\xb3\x8b\xf4\xbc\x0f\x69\xa1\x43\x48\x3d\xde\x70\xf7\x86\x20\xa1\xb5\x28\xbb\x0b\x76\x88\xfb\xcb\xbe\xe4\xba\x00\xe8\x8d\x26\x88\x83\x3b\x40\x78\xfb\xa8\x8f\x89\xb9\xcf\xda\xf6\xb6\x66\xc2\x33\x4a\x31\xbf\xbd\xe6\x29\x53\xec\x72\xbc\x6c\x15\xb1\x74\x1d\x01\xb2\xa7\xcf\x11\x75\x41\x1c\xdc\x01\x6e\x55\x79\x6e\x8c\xec\xb7\xdb\xaf\xa8\x89\x5d\xf7\x5a\x8e\x02\x15\x54\xf3\x49\xdb\xfe\x3c\x0c\xb1\xc1\xdb\xd7\xb8\x29\x66\x04\xc5\xc5\x41\x1c\xdc\x81\xbe\x14\x73\xdf\xab\x98\x21\xc3\x8e\x9d\xe5\x2a\x1e\x37\xbc\xb0\xc2\x0d\x92\x04\xeb\x9b\xc8\xf8\xbe\x96\xa8\xb1\x0b\xef\xe9\x60\x42\x6f\x8c\x01\x1c\xdc\x01\x4b\x95\x39\x53\x3c\x8b\x55\xda\xb0\x99\x60\xad\xf9\x7a\xa2\x55\x51\x0e\x3a\x96\xac\xa6\xe4\xe9\x4e\x17\xc2\x54\x8c\xb4\x4b\x50\x1f\x00\x71\x50\x1f\x00\xc4\xba\x41\x33\xed\x53\x37\x6b\x22\x31\xc0\x93\x73\x0a\x2b\x49\x12\x5e\xfc\x88\x2b\x3a\x3f\x72\x3c\x48\x68\x3f\xe2\x2f\x38\x93\xc2\xf2\x80\xbc\x78\x74\xe5\x03\x14\xbf\x06\x70\x70\x07\x8a\x0f\x6a\xfe\xdc\x4f\x55\xe5\xc8\x88\xaf\xcd\xb6\xd2\x79\x9b\x2b\xcd\x64\xb2\x73\xa0\x28\xad\xab\xe9\x95\x14\x4a\xf5\x8d\x1a\xda\x50\x01\xc4\xc1\x1d\x18\x21\x4a\xa7\x9e\x66\x4c\x4b\x6c\xf0\x8d\xe2\xca\xa0\x27\x6a\x91\xfc\xbc\x76\x4d\x4d\x7f\xfd\x9d\x1c\x9b\x50\xd5\xd0\x66\x10\x14\x13\x05\x71\x70\x07\xd0\xba\x38\x7b\x0d\x72\xf5\xe2\x16\x87\x14\x04\x02\x6c\x98\x03\xc4\x1d\x68\x34\x9f\xa8\x53\x46\x06\xef\x5d\xb1\xa3\x5d\x17\x24\x40\xd4\x05\x71\x70\x07\x0c\xa9\x07\xdc\x5b\xf0\x1e\x8c\x7f\x99\x7d\x43\xfd\xf1\xca\x09\xda\xe0\xdd\x1c\xb1\xc1\x69\x89\xaf\x4b\x05\x0a\x8f\x95\x3e\xc5\x05\x22\x1c\x00\x71\x50\x1f\x00\xc4\xba\x41\x8f\x3d\xa7\x39\xe0\x73\xd4\x72\xef\x4f\xeb\x93\x3d\xaf\xe0\x27\x76\xe6\xca\x84\x5c\x7c\xaf\x8c\x83\x5b\x5b\x44\xa8\x35\x33\x6c\x3e\x7e\x24\x7f\x03\x6d\x56\x06\xe2\x90\xee\x05\xe1\x68\x11\x2f\xb3\xfc\x06\xaa\xe3\x76\x86\x33\x6f\x8b\x5a\xac\xf6\xf9\x59\x4b\xcc\x73\xcf\x13\xb4\xd6\x45\x76\x62\xf0\xdd\x82\xee\x05\x00\x0e\xee\xc0\x5b\xb4\x50\x9e\xab\xee\x19\x3b\xd2\xf2\xe6\x8a\x15\x29\xe6\x65\x24\x9c\x8e\xc7\xa4\xb3\x03\xdb\xa8\xbe\x17\x99\x1e\x12\x1a\xb0\x20\xea\x82\x38\xb8\x03\x5f\x05\x48\x88\xf9\x79\x68\x14\x7f\x5c\x8b\xfd\x3d\x81\x37\x48\x1f\x95\x60\x57\x9e\x2b\xd5\xa5\x43\xd9\xe7\xb4\x9e\xe7\x5d\xd5\x8f\xa8\x0b\xe2\xe0\x0e\xe8\x34\xdc\xc9\xba\x46\xb5\xb3\xe7\x9a\xde\xe3\x45\x9b\x84\xdf\xb2\xe2\x5a\x88\x4e\x96\x9c\x48\x3a\x30\x44\xf8\x21\x35\xaf\xc1\x17\xe1\x00\x88\x83\xfa\x00\x20\xd6\x0d\x7a\x06\x3d\xcd\x01\x7e\xc7\x11\xa5\xbb\x17\xfe\x90\x7c\xff\x5d\x6b\x60\xff\x5a\xa4\xa5\x9e\x66\x75\x52\x45\xe3\x85\xf5\xb1\xc1\x3b\xa5\xec\x59\xb1\x70\xc4\xd8\x41\x1c\xdc\x81\xca\xeb\xbf\x77\x22\x14\xfb\x3d\xb8\x17\xb0\xa9\xbd\x66\x99\x4c\x8f\xa4\x7c\x0b\x8e\xef\xb5\x95\x67\xb1\x9f\x6b\xbf\xfe\x45\x77\x17\x51\x17\xc4\xc1\x1d\xe8\xf9\x25\x27\x40\xec\x21\x3d\xc4\x7f\xef\xc6\xc7\xf5\x04\x17\x85\xf2\x25\xc9\x73\x99\x31\x32\x4c\x0c\x2a\xfb\x35\xbd\xfb\x3f\xa1\x0d\x01\x41\x1c\xdc\x01\xd1\x16\xb1\x50\x06\x37\xbd\x81\x24\x1b\x0a\xb2\x4b\x5f\x07\xee\x55\xaf\x2c\x12\xd4\x1b\x3f\x88\x41\x4f\x57\xce\xf5\x7b\xfe\x11\x7a\xab\x07\xe2\xe0\x0e\xbc\xb0\x58\xa1\xad\xbd\x34\x34\xf1\xcb\x5b\xfd\x4e\x20\x3f\xb3\x57\x85\xf9\x0b\xcc\x34\x1f\x97\xb6\xd0\x9f\xe9\x7a\x22\xba\xf8\xeb\x08\x07\x40\x1c\xd4\x07\x40\xb1\x6e\xd0\xb2\xe2\x3f\xb1\x6e\x09\xe4\x58\xf7\xae\x52\x16\x7f\x0d\xd3\xfc\x40\xb0\xb8\xe8\x61\x36\x35\xe6\x27\xdb\x3b\x2a\xe2\x46\x46\xe7\x0e\x07\xe3\xf1\x3a\x3f\xd4\x6c\xc6\x9e\xc9\xca\x09\x72\xac\x5b\xe2\xc4\xd6\x14\x5d\x81\x45\x5c\xc2\x8e\xd8\xd1\xe4\x09\x6f\x05\x9a\xaf\xbb\x61\x66\x36\xee\x03\x6d\x27\xa5\x25\xb5\x97\x59\xa1\x67\xb2\x4e\x84\x1c\xeb\x76\x30\x4a\x6f\x18\xec\x44\xbd\x6f\x4a\x11\xfa\x18\xbf\x9d\x4e\xea\x3c\x65\x95\x63\x48\xc0\xd8\xc1\xf3\xc1\x47\xa2\xac\x8f\xda\xb3\xce\x64\xb4\xc8\xb1\xee\x85\x84\x76\xb6\x7c\xa1\x24\xa1\x91\xa4\xc8\xb1\xb9\xab\x33\x45\xd5\x18\xe1\x5e\x4b\xb8\xda\x59\x34\x6a\xec\x44\xdb\xc3\x12\x67\x10\xfd\x7d\x25\x25\x81\x1c\xeb\xae\x5b\xf3\x64\x34\x9c\x60\xc5\xa7\x8a\xa9\x32\x11\x64\xe0\xf0\x71\xf2\x5f\xe3\xd2\x9a\x39\x61\x09\xb5\xba\xc0\xd5\xf1\x48\xad\xf5\x4c\x46\x8b\x1c\xeb\x76\xee\xf6\xcc\x1d\x26\x41\x5f\x20\x10\xf0\x2c\x0d\xbe\x5b\xf6\x86\x75\xea\x75\x1e\x5d\x18\xe6\xb6\x76\xff\x05\x34\xa9\xa2\xd4\xe1\x33\x19\x2d\x72\xac\xbb\xd9\x51\x5c\x04\x4d\x36\x79\xb3\x20\x9c\xd8\x42\x6b\x96\x54\x6d\xf3\x58\x90\xa5\xbd\xc6\x7b\x16\x23\x49\x95\xed\xba\xca\x54\xc4\x99\x8c\x16\x39\xd6\xcd\x27\x67\xce\xb5\x78\x8b\xbb\x57\x20\x3b\xf5\xca\x58\xd3\xd2\x41\xed\x0e\x19\x7d\xfa\xca\xcd\x3e\xd7\xcb\x73\xad\xe1\x6e\x84\x9b\x67\xb6\x06\x08\xfa\xa5\x9e\xd6\xe8\x3b\xb6\x3e\x71\xbd\xbf\xb9\x1a\x33\x11\x93\x56\x38\xbc\xe2\x21\x6c\x3d\x90\xc3\xf5\x7e\x24\xae\xfc\xb9\x9d\xe5\x37\xdf\xd1\xfa\x76\xe8\x41\x0a\xc0\xc1\x1b\x3d\x71\x87\xcb\x5a\x90\xa9\x5c\xc1\xaf\x0e\x06\xdf\x7b\x4a\x44\x58\x5f\xd5\x2d\xbf\x78\x05\x0e\x0b\xe5\xb7\xfa\x2d\x47\x3d\x15\xb6\x46\xd4\x05\x71\xf0\x46\x1f\xba\x97\xa6\xe9\xc7\xb6\x78\xf3\xd7\x92\xaa\xbe\x41\xdf\x01\xe7\x45\xac\xa7\xe4\xf8\x5e\xba\x22\xf5\xee\xa8\x11\x24\xc2\x2e\xd4\x88\xba\x20\x0e\xde\xe8\x97\x52\x9b\xf4\xb1\x8e\xf5\xa3\xef\x12\x07\xe8\x5b\xd8\x0f\xf0\xe2\xcc\x1e\xb9\xe6\x96\xd9\x7d\x90\xcc\x98\xf7\x73\x94\x17\xb6\x85\xd6\x16\x01\x1c\xbc\xd1\xcb\x0f\xf8\x12\xbb\x2d\x48\x62\x08\xbe\x49\xdd\x1f\x58\x62\x2d\x4d\xe1\xc0\x0c\xf0\x4d\xaf\xd2\x34\xcf\x72\x5b\x49\x50\xad\x53\x43\x34\x7a\x10\x07\xdd\xec\x01\xb1\x6e\x50\xdb\x3c\xcd\x81\x54\x26\x59\xc2\x88\x1c\x83\x5e\x0b\x45\xdb\x62\x1b\x34\x2a\x54\xfd\x17\x24\xbc\xea\xf1\x7c\xe4\x98\x13\x83\x2f\xf0\x2c\x8b\xa0\xf8\x06\x88\x83\x3b\x10\x76\xeb\xfb\xf2\xec\xfc\x47\x1b\xdd\x41\x9c\x09\x36\xfe\xb5\xc0\x69\xa2\x35\x59\xec\xab\xdc\xb5\x0a\xcf\xc3\x96\x7f\xfd\xaa\xeb\x43\xd4\x05\x71\x70\x07\x94\xb8\xae\xa0\x32\x90\xd7\x29\x19\x5f\xbe\x22\xe2\x94\xf8\x89\x2e\x96\x8c\x52\x9d\xe8\x9c\x55\xb3\x5f\xd1\x73\xfc\xd8\xdf\xff\xbb\x93\x2a\x88\x83\x3b\x30\x1e\x9e\x8d\x57\xbe\x3c\x49\xe4\x31\x1c\x77\x60\x8b\x19\x49\x9d\xbd\x9d\x33\xdf\x91\x1d\x6f\xa7\x1c\x32\x40\x1c\x30\xca\x04\x7d\xcf\x08\xe2\xe0\x0e\x64\x99\xf8\x19\x3f\x75\x63\xf6\xd2\xe0\xcf\x89\xd4\x57\x91\x7b\x8e\x8b\xe5\x13\xf5\x3c\x4a\x36\xc6\xa2\x88\xf6\x68\x22\xa7\xec\x13\xc2\x01\x10\x07\xdd\xec\x01\xb1\x6e\xd0\x3d\xec\x34\x07\xe6\x15\xde\x04\xdc\x1d\x94\xc8\x14\xe7\x4e\xad\x1c\xd3\xb2\x71\x4b\xdb\x93\xd4\xab\x8b\x7e\x16\xd3\x8d\x9a\x10\xb8\x30\xf6\xbf\xc7\x2b\x82\x38\xb8\x03\x2d\x15\xc1\x6f\xd6\xb0\xf1\x8d\xc7\x7a\x39\xc3\x3e\xbf\x24\x6d\xee\xdb\x0b\xb9\x31\xa0\xf9\xad\x26\x0e\x4f\xd1\x02\xc3\xd0\xc2\x18\x8a\xc8\x02\x38\xb8\x03\x5d\x94\xb5\x23\x8b\xa9\x4a\xea\x18\xf8\x25\x2b\x69\x43\xc3\x84\x59\x2d\xfd\xf7\x0f\xef\x7f\x68\x22\x2a\x59\x26\x64\xfb\x2e\xab\x0c\x3d\x4c\x00\x38\xb8\x03\xd5\xac\xfc\xfb\x4c\x7e\x4f\x48\x98\xd5\x3e\xaf\xde\xd8\xd6\x92\xf0\x25\x5e\x4c\x64\x15\x75\xde\x91\x7c\x9d\xd8\xb1\x85\xd9\x0e\x7d\xd7\x0f\xe2\xe0\x0e\xc8\xd8\xd3\x68\x4b\xa4\x7d\x28\xf1\x50\x61\xf9\x18\x78\xbd\x7e\xe5\xb2\x1f\xfa\xb7\x3d\xae\x04\x97\xec\xe0\xa2\x9c\x76\xd1\x6e\x16\xe8\x20\x73\x00\x07\xf5\x01\x40\xac\x1b\x34\xa1\x38\xcd\x01\xed\xb8\x6f\x53\xa3\xd3\x62\xe7\x7f\xb8\x97\xce\x64\x5a\x30\x45\xc9\x6a\xc8\x3b\x06\x59\xfd\xf4\x5f\x0c\x21\x7d\xfe\x70\x64\x0e\x9a\x9c\x83\x38\xb8\x03\x24\xb1\x29\x85\xec\xa5\xb7\x1a\x75\x6a\x9c\x6c\xc6\x05\x38\x1f\xd1\x24\x33\xe1\x5d\x98\x1c\xb6\xe3\x59\x1c\xa0\x73\x9f\x1f\x82\xde\x07\x81\x38\xb8\x03\x0a\x64\x3c\x21\x57\x53\x32\x63\xe2\x93\x6d\x0a\xdf\x3c\x78\x81\xab\x72\x18\x4b\x9a\xa1\x43\x4e\xb4\x90\xbd\x2c\x66\xff\x00\x0b\x8a\xa1\x83\x38\xa4\x7b\x41\x07\xd3\x36\xd3\x67\x7b\xf3\x57\x47\xe5\x01\x66\x4d\x19\xa4\x28\xd8\xd1\x4c\xfa\xc5\xc9\x7f\xa6\x45\x7c\x42\xde\xed\x8c\x43\xfd\x05\xc4\xc1\x1d\x30\x5f\xb6\xdf\x58\x36\x3e\x34\x7c\xa9\x69\xc9\x49\x11\x8d\xe7\x6b\xc1\x9d\xf5\xea\xd5\xef\x46\x8d\xf1\xe1\x0a\x8e\x7a\x9c\xbb\x3f\x11\x0e\x80\x38\xa8\x0f\x00\x62\xdd\xa0\xd9\xdd\xa9\xfb\x7b\x14\xaf\x11\x90\x79\x3d\x27\xb1\xc1\xb4\xa9\x65\x66\x97\xc7\x5e\x13\x54\x30\x55\x63\x35\xed\x7a\xb2\x5d\x57\x5e\xe9\xa6\x61\x0e\xed\xef\x01\xe0\xe0\x0e\x08\x98\x9a\x9a\x3e\x36\x50\x25\xbe\x8e\x66\x78\xa3\x44\x19\x47\xe0\x65\xb3\x74\xac\xb4\x65\xfa\x68\x70\xd8\x78\xb6\x44\x81\x31\x14\x13\x05\x71\x48\xf7\x82\x8c\x84\xb6\x35\x61\x19\xd3\xf5\xba\x09\x14\x47\x21\x16\x17\x59\xe7\xe2\x78\x86\x6f\x85\x46\x5c\xbb\xe6\xdf\x96\x6b\x15\xa1\x17\x37\x20\x0e\xee\xc0\x9f\x2c\xa3\x26\x4c\x7c\x77\x8a\x46\x41\x72\xa2\x73\x18\x21\x37\xbb\x3a\x2f\xae\xe0\xba\xef\x5f\x72\xa6\x58\x16\x9c\x7b\xf1\x09\x7a\x27\x08\xe2\xe0\x0e\x14\xbe\x68\xe1\x9e\x78\x75\xfe\x98\xe9\x72\x99\xdf\x8f\xe7\xec\xd8\xbd\xf1\xe7\x1f\x11\x8d\x74\xe6\x38\x2c\xf7\x5e\xdb\x71\x11\x76\x45\x38\x00\xe2\xa0\x3e\x00\x88\x75\x83\xa6\xda\xa7\x39\xc0\xce\x76\xbd\x1a\x3f\xc7\x53\x2a\x93\xbe\x67\x57\x86\x52\x7b\xed\x99\xc4\xb6\x97\xaa\x76\x53\xb3\xbe\x57\xbb\x35\x3a\x4a\xe3\x79\xe8\x33\x0c\x00\x07\x77\x00\x3d\xb7\x56\x8d\x70\xad\xf7\xeb\xcd\xb8\xf3\x8d\xcf\x0c\xed\x3d\x2e\x36\x1b\x67\xa3\x6e\x93\x1d\x13\x7f\xfb\xf4\x12\x75\xc4\x09\x3a\x06\x11\xc4\x21\xc5\x39\x07\x9d\xdb\xcb\x1d\xf8\x2a\xcf\x5f\xe1\xbe\x62\x28\x7a\x79\xa1\x87\xad\xac\x91\xfc\xc7\x8f\xc6\x9c\x6f\x9b\x7d\x37\xcc\x86\x24\xa0\x17\x37\x00\x0e\xee\xc0\x46\xde\x5d\x26\x21\xbb\x77\x54\x89\xce\x4b\x56\xbb\x5f\xa4\x6f\xe8\x4c\xd7\x2b\x67\x55\x0a\xd4\xe4\xd4\x2c\x3f\x51\x89\xd0\xdc\x41\xd4\x05\x71\x48\x8b\x80\xa5\x69\x7a\x3e\xb7\x36\xdf\x7d\xca\x8f\x59\x14\x5f\xba\xc9\xdd\xea\xe3\x57\xf5\xfc\x8b\x0a\x0a\x9e\x1d\xab\x53\x5c\x1b\x59\x39\xb4\x08\x08\xe0\xa0\x3e\x00\x88\x75\x83\x9e\x7b\x4e\x73\xa0\x15\xcb\xe8\xfa\x6a\x9f\xa2\xad\x59\xd6\x2e\x45\xad\xb2\x43\xba\xa4\x64\x57\x3c\xc9\x24\x39\x75\x6d\xec\xf5\x17\x03\xe9\x27\xd0\x89\xdb\x20\x0e\xee\xc0\xc5\xb7\xb9\x49\xea\x39\x0f\xa9\xc7\x5b\x23\x2b\x6f\x36\x18\xbd\x2b\x7d\x67\x39\xb3\xb2\x25\xa5\xc5\xb2\x97\xcf\xbc\xd3\x5d\x01\xed\x97\x01\xe2\xe0\x0e\x98\xad\x30\x90\x31\x14\x86\xa0\xee\xeb\x1b\xfc\x7a\xbe\x7d\xeb\xb5\xf1\xaf\xbe\xb8\x92\xa6\xe0\x8d\xaa\xb0\x89\x16\xf2\x94\xfa\x68\x44\x5d\x10\x07\x77\x20\x13\xa7\xff\xdd\x1d\x16\x8a\x5b\x58\x63\x6a\xfd\x8b\x4d\xdc\x8a\xb1\xe8\x6e\x5f\xd5\x45\x63\xef\xdf\xf7\x0f\x3c\xe7\xa5\x77\xf7\x02\xd4\x0f\x01\x1c\xdc\x01\xf5\xc2\x90\x4b\xd6\x2c\x52\xf3\xe4\x09\xe3\xc5\xd7\x3a\x72\xd1\xc8\xa4\x2a\xaf\xa9\x51\xed\x1a\xd9\xac\xd8\x59\x5f\xd6\x10\xd2\x46\x38\x00\xe2\xa0\x3e\x00\x88\x75\x83\x1e\x42\x4f\x73\xe0\x46\x7a\x2c\x45\xfb\xab\xe6\x50\xd7\x41\x14\x2a\xc2\x02\x67\x11\x99\x62\xde\x1b\x61\x7a\x72\x81\xa6\xc3\x09\xb8\x7d\x0c\xbc\xd0\x7d\x1b\xc4\xc1\x1d\xd8\xc1\xc9\x0d\xf9\xe4\xcf\x5c\xc8\xa8\x6a\x5b\x3c\x5c\x21\xac\xb9\xe6\x34\xcf\x59\x76\x32\xba\x16\x9a\xae\xf0\x7b\xcf\xf5\x75\x09\xa2\x2e\x88\x83\x3b\x80\x47\x4b\x46\x11\x49\xea\x6f\x39\x21\x48\x37\x9e\x5a\x26\x7e\x59\xff\xd5\x88\x6b\x21\x01\xc1\xf7\xe7\x0a\x46\x8c\xac\x64\x9f\xc9\x10\x75\x41\x1c\xdc\x01\xc3\xd1\x99\x2f\x89\x56\x3b\x65\x3a\x69\x09\xc4\x29\x6f\xf9\xa3\x85\x1d\x75\x44\x8e\x05\xde\x61\x62\x5f\x65\xa0\x54\x6f\xc3\xf7\x41\xd4\x05\x71\x70\x07\x72\x6e\xb9\xef\x96\xdd\xaf\xea\xe7\x18\xbe\x19\xf1\xa2\x91\x3a\x93\xa4\x12\x0b\x73\x4c\xa5\x6f\xae\xc1\xec\x97\x33\xfd\x50\xb2\x3d\xc2\x01\x10\x07\xf5\x01\x50\xac\x1b\x14\x18\xfc\x27\xd6\x2d\x81\x1c\xeb\x16\x1a\xb5\x3f\xbf\xd2\x41\x17\xf8\xac\xd6\x9f\xd8\xf0\xb6\x6f\x2c\x79\x15\x66\xb6\x52\xd9\x03\x0c\xd9\xa2\x17\x2f\x7c\x1a\x93\x85\xcf\x6c\x0d\x03\x74\xa1\xd3\x3c\xbd\x52\xb2\x10\xa4\x2c\xce\xa1\xb7\x7b\x62\x3c\xcb\x52\x12\x56\x63\xea\x9b\x23\x4f\x31\x23\xc7\x40\xd2\x4a\x69\xa2\x7c\x20\x14\x84\xf8\xfb\x80\x38\xb8\xa7\xb9\x3c\x1e\x22\xdf\xd0\xf9\x1c\x18\xe6\x74\xe7\x03\x72\x8d\x08\xfa\xf1\x9a\x18\x70\x82\x7e\x2a\xf5\xca\xeb\x16\x6f\x57\xe6\x42\xa7\x4d\x81\x38\xa4\x13\x46\x94\x92\x88\x26\xe3\xa2\x5a\xd1\xe2\xb8\x94\xbd\xd7\x8e\x8b\x33\xcc\x12\x13\x36\x6d\x12\x6f\x8e\x5c\x15\x0e\xe0\x96\x3e\x0a\x86\x3e\x15\x01\x70\x70\x4f\xbd\x7a\x56\x97\xe2\xaa\xb9\x32\xee\x18\x16\xc5\x7f\x2c\x94\xe4\xb1\x0a\x2a\xd8\xf3\x25\xa5\xf9\x1e\xf6\xeb\xcf\xb3\xab\x09\x41\x31\x88\xba\x20\x0e\xee\xa9\x5f\x5f\xb0\xaa\xf5\x36\xdd\x1d\xfa\x35\xb1\xae\x87\x62\xeb\xbf\xf3\xee\xe5\x51\x5f\x4b\xdc\xbc\x62\xf1\x81\xc6\x18\x2b\xc4\x4f\x16\xe1\x29\x88\x83\x7a\x15\x20\xd6\x0d\x8a\x04\x9f\x1e\xeb\x16\x11\xd8\xa1\x57\x6b\xfd\x78\xb9\x77\x97\x88\x3c\x91\x8d\xee\x78\x02\x8f\xd7\x6e\x66\x30\xc4\xea\xa2\x6a\xb2\x91\x68\x8c\xf6\x11\x22\x22\x0d\xe2\x90\x63\xdd\xb7\xec\xd1\x2e\x26\x39\xdf\xd1\x21\x75\xfc\xa6\xe2\x65\x6c\x56\xf3\x68\x6a\x24\x22\xc2\x21\x78\xa5\x23\xae\xf1\xcf\x8f\xd7\x9b\x7c\x88\xca\x20\x0e\x39\xd6\x4d\xcc\x2d\x92\xfe\xe6\x09\xc9\x5e\x4e\x73\xf8\x8d\xa5\xee\xbd\x57\x69\x97\x39\x39\x23\x39\x33\x51\x03\x13\x08\xbb\x74\xcb\x54\x6c\x11\x95\x41\x9c\xaf\x14\x0a\x0a\x0a\xea\x7f\xbd\x18\xdd\x29\xa5\x37\xab\xb7\x93\xb9\xe8\xce\xb8\xfb\xc5\x94\x62\x67\xf4\x2a\x61\xf2\x66\xbb\x97\xfb\x0b\x96\x91\xfb\xce\x06\x42\x65\x50\xac\x7b\xe8\xa1\xf6\x51\x86\xac\x68\x06\x89\x71\xf7\xb7\x87\x14\x17\xcb\x4b\x49\x19\xcb\x6b\x7b\x7e\x5e\xb3\xa7\xce\x15\xc3\xdd\x8a\xc0\xfc\x77\xac\x7b\xe6\x2d\x25\xe1\x62\x0e\x27\xa1\x78\x68\x85\xcf\x25\x99\xb7\x1f\x46\xba\x8c\xe7\x5f\x93\xeb\x0a\xef\x0c\xee\xa9\xe8\x8e\x26\x98\xfd\x0b\xe5\x2d\x53\x24\x27\x59\x58\x2d\x3d\x6f\xcd\x9d\xbf\xfe\xa2\x72\xd1\x65\xf3\x72\xce\x21\xba\xd1\xdb\x26\x59\x9f\xe7\xe1\x66\xca\x9f\xfe\xef\xc5\xba\x41\x83\x3b\x25\xd6\xdd\xfb\x20\xee\x82\xce\xbe\x64\xbe\xbf\x17\xae\xf5\xa2\x37\xeb\x8f\xf0\x45\xde\x4e\xf2\x07\xb7\x94\xd0\xde\xe6\x71\xee\xa1\x88\x70\xff\x0b\xf5\x60\x5f\x2f\xb9\x25\xc2\x1c\x85\xd1\x5a\xd6\x4a\x69\xff\xf0\xc0\xcc\xb8\x24\xb1\x70\x7b\x52\xa8\xe3\x59\xff\xfe\x49\x47\x7f\xdd\xbf\x50\xd4\x5a\xf7\xed\x0b\x7a\xe1\xdd\xdf\x48\xfa\xc7\x85\xbe\x28\x16\xdf\x7a\x18\x50\x70\x7f\x29\xd0\xea\xc5\x50\x6e\xa1\xf8\xb9\x3f\xc9\x50\xac\x1b\x74\xf9\x7f\x62\xdd\x5e\x48\xb1\xee\xfe\x54\x3c\x59\xdd\xd7\xd9\xda\x9e\x3b\x6c\x46\x74\xfe\xc4\x1a\x86\xb4\xcf\xc5\x3b\xdf\x4e\xc9\x2a\x9f\x3f\x97\x62\x60\x72\xf0\xe8\x2c\x16\xc2\x51\xf8\x91\xde\xad\xc8\x1f\x92\x38\x53\x34\x7e\x56\x59\x5e\xa4\x26\x78\xc4\x37\xf0\x9c\x78\x21\xe4\xc3\x16\xea\x57\x74\xed\x44\xba\x1f\x6a\xd4\x04\x1a\x67\x71\x59\x2f\xe4\x58\x77\x06\x4e\xd9\x3b\xb9\x8a\x2c\x77\xac\x16\x8b\x9c\x47\xc2\x4a\x1d\xef\xed\xfa\x7b\x5f\x8f\xa5\x63\x1a\x75\x53\xa5\x7a\xc7\x15\xea\x9e\xc9\x68\xb5\x91\xdf\x24\x51\x37\x5f\xba\xc0\x13\x9a\x39\x60\xb2\xdd\x71\x6e\x4f\x9e\x7e\xcb\xcd\xc8\xe7\xa6\xf6\xc5\x1b\x38\x37\x14\xfe\x6c\x39\x1a\x91\x9d\xc9\x68\x91\x63\xdd\x6f\x52\x76\xf4\xd0\x9f\x4d\x7c\x08\x78\x63\x94\x72\xa5\x26\x3e\x9a\x38\xfe\x7c\x60\xae\x2b\x3f\x3f\xe3\xc1\x25\xd2\x81\x23\xa1\xb3\xd9\x12\x3d\x02\xe9\xb2\xe6\xd7\xe3\x1c\x56\x5d\x18\x7f\x28\x27\x87\x2d\x3a\xce\x90\x74\xb7\xd6\x26\xd8\xf5\xdf\x63\x67\x4f\x35\xd1\x4a\x19\x27\x65\xb9\x71\x26\xa3\x45\x8e\x75\xbf\x8f\xd5\x5c\x23\xf1\x0d\x1f\x8d\x51\xaf\xdd\xe4\x5b\x25\xfe\x1d\x88\xe3\x57\x9e\xfb\x05\xe5\x0b\x99\xd0\x6a\x94\x8d\xa7\x1d\xfa\x99\x8c\xb6\x12\xe9\xb2\x8b\x09\x07\x58\xd4\xea\x81\x13\xc9\xe2\x36\xe7\x59\x65\xfc\x2d\x9d\x7c\x88\x4d\x97\x29\x08\xdd\xe5\xf0\xd2\xb5\x4d\x74\x6d\xce\xe0\xb2\xda\xff\x6f\xbf\xd4\xd3\xa6\x43\xc1\x54\x44\x81\x18\x14\xb9\xa4\xbd\x65\x1d\x87\xba\x5d\x4d\x2d\xe7\x89\xde\xe6\xcf\x44\xc7\xbd\xb4\x8d\x09\x64\x1b\x54\xe6\x5a\x41\x4c\x03\x40\x1c\xd2\x74\xc8\x6e\xfa\xfa\x8a\xee\xbd\xfe\xa5\xab\xec\x4f\x83\x4d\x5c\x13\x4e\xec\xc2\x1d\xd4\x1e\xac\x12\xa5\xe7\x8d\x09\xbc\x5b\xfe\x2c\x00\x4d\x87\x00\x1c\x7c\x3a\x34\x35\x3d\x34\x34\x98\xfb\x72\x84\xd7\x1d\x7d\x4d\x2a\x49\xb5\x5d\xf1\x9e\x86\xb0\x9d\xc4\x1d\xa5\x5c\x3a\x45\x71\xf2\xcf\xd9\x5c\x50\xfc\x1a\xc0\xc1\xa7\x43\x8d\xcf\x70\x17\xf2\x15\x35\xf6\x0d\xbd\x6f\x1b\xe3\x4b\xba\xb6\x72\xb9\x75\xbf\xb8\x55\x50\xfb\xc6\xfa\x87\x8b\x9d\x2d\xbb\x20\x94\x0b\x01\x71\xbe\x92\xff\x7d\x10\xc6\xfd\x77\x9c\x1f\x95\x06\x15\x0f\xf2\x05\xdc\x72\x55\xac\xb1\x95\x67\x7d\xcb\xc4\xd7\x1f\x45\x66\x86\x0d\xd4\x85\xfd\x09\x41\xa3\x40\xc4\xba\x41\x9c\xaf\x24\x1d\x8a\x97\xb7\xdf\x7f\xfa\xf3\x5f\x9e\xdc\x40\x5d\xf3\x34\x05\xd2\xd7\x6c\x1f\xb5\xd5\xdc\xa5\x65\x23\x4f\x1e\x49\x94\x37\x14\x8c\xf8\x5e\x72\x41\x37\xaf\x4f\x35\xfd\x7c\xf8\xba\x95\x78\xa4\x17\xb4\x83\x22\x80\x43\x3a\x7b\x33\xa1\x34\xbc\x3a\x8f\x55\x96\xfc\xfd\x23\x0f\x4b\x91\xfd\x8a\x75\x39\x05\xd7\x57\x1a\x37\x3d\x06\x2c\x04\x73\xc2\xca\x51\xd3\xa1\x27\x21\x00\x07\x57\xe0\xcf\xfe\xc8\x2d\xcf\xba\x23\x81\x4e\x36\xa7\xe7\x98\x9d\x8a\x85\xc9\x31\xa6\xfc\xc2\x6a\x55\x66\x3a\xdf\x2b\xee\xff\x51\x0b\xbb\x08\xad\xb6\x01\x38\xb8\x02\xd1\xa2\xea\x87\x37\x0d\x9e\xae\xff\xb6\x09\x20\x16\x74\xb4\xc9\xb0\x9d\xe3\x25\xd4\x27\x91\x2c\xf3\xbd\x57\x82\x87\x95\x26\xc5\x80\xa8\x0b\xe2\xe0\x0a\xac\x26\xdc\x54\x7f\xe3\x47\xc5\x63\x14\x11\xa4\xab\xf2\x64\xf5\x77\xc3\xba\x48\xe1\x8e\x97\xa4\xa4\x06\xff\xf3\x42\xd3\xe9\x34\x5e\xc4\x8c\x18\xc4\xfd\xa3\xc0\xff\xdc\x2c\xff\xe2\x00\xe8\x16\x76\xea\x66\x4d\x0e\xc2\x17\x98\xdd\x73\x44\x82\xba\xe8\xeb\x30\x05\xec\x03\x92\xc5\x65\xf5\x9d\xa8\xdd\xf8\xf5\xee\x2c\x4b\x44\x7e\xa4\x85\xe2\xd7\x20\x0e\xee\x00\xff\x58\xfc\x07\xdd\x42\x49\x76\xfa\x58\x8c\x24\x4f\x6d\xd2\xe8\xae\xf3\x93\x04\x8e\xc4\x57\x86\x0d\x8b\x18\x14\xf2\x3b\x84\xaf\x40\xd1\x20\x00\x87\x14\xe5\x13\xe1\x96\x7b\x62\xf5\xf8\x3d\xa9\x9b\x0b\x59\x4b\xbc\xce\x80\x21\x7b\xaf\xa4\xcf\xcc\x7d\x96\xcf\x3a\x0f\xf5\xdf\x54\xb4\x41\x6f\x8a\x40\x1c\xdc\x81\xfe\x0b\xf4\xde\x28\xae\xfb\x1c\xfc\xa3\x95\x81\x93\xd3\x42\xe1\x35\x94\x14\x2d\x62\xd7\x0a\x43\x23\x89\xc7\x6f\x1f\x84\xf3\x91\x40\x9f\x38\x00\x38\xb8\x03\x8e\x8f\x4d\xaf\xd8\xd1\x5e\x93\xb0\xd2\xba\xa7\xf6\xd5\x24\x71\x2d\x45\xfc\xd1\xeb\x2e\x5d\xd6\x0f\x11\x72\x66\x0d\x7b\x3d\x32\xf8\x08\x07\x40\x1c\xc2\x01\x2f\x40\xac\x1b\x34\x9f\x38\xcd\x01\x3b\x8b\xf4\x92\xae\xcd\xcb\x7a\x91\x1e\x4e\xe3\xd7\x1e\xad\x4c\xd8\xa3\x32\xf4\xd4\x65\x5c\xec\x71\x70\xd2\xd8\xce\xd3\xcb\xb1\x41\x8c\x1d\xc4\xc1\x1d\x98\x35\x70\xc9\x26\x39\x9c\x69\x31\x2e\x14\x89\x0f\x1c\xf6\x3a\x2e\xf9\xd9\xfc\x49\x4d\x24\x57\x93\xa1\x20\xd8\x04\x77\x4b\xca\x0f\x51\x17\xc4\xc1\x1d\x30\x1e\x0f\x79\x86\x99\xbe\xf4\x90\x64\x56\x25\x3d\xdb\xd7\x9e\x62\x8a\x42\x9d\xd2\xa4\x96\x9f\xbc\x7c\x44\x03\xb3\xf7\xa7\x07\x74\x6e\x34\x88\x83\x3b\x80\x87\x4e\xf5\xbd\x43\x9b\x35\xf1\x28\x5e\xd0\xfd\xe1\x3c\x7a\x85\x64\xd9\xf9\xd2\x21\x32\x66\xcd\x44\x7d\xe2\xc6\x63\xc3\xff\x5d\xc5\x03\x71\x70\x07\x12\xf6\xc2\x0d\x68\x82\xf5\xac\x94\x52\xba\x92\x7e\x26\xae\xb2\xd3\x79\xeb\xf5\x73\xda\xbc\xc2\x75\x48\xc1\x92\xc0\x11\xc8\xea\x46\x38\x00\xe2\xa0\x3e\xa0\xfd\x77\x07\x40\x93\xbb\xd3\x1c\xb0\x2e\x54\x8a\x9a\x8f\xd9\xf6\xfa\xa8\xb3\xc8\x9a\x3b\xac\x8e\xf9\x33\xfd\x58\x80\x41\xe8\xee\x79\xce\x18\x22\x27\x5b\x13\x3f\xe8\xff\x14\xc4\xc1\x1d\x88\xe0\xc7\xa8\xdf\x38\x88\xe5\xba\x65\xfb\x99\xfb\xe1\x88\x85\xef\x5d\xab\xf6\x1e\xef\xb4\x77\x21\x4f\x1a\xbb\x0f\x3b\x27\x37\xe8\xa1\xcd\x0e\x00\x1c\xd2\x47\xef\x45\x0f\xcb\xab\x73\xc7\xc2\xcd\x78\x0b\xe3\x02\x3c\xf5\x6e\x5c\x19\x4c\xfa\xbd\xa0\x7d\x22\x5e\x85\xc2\x18\x6b\x3b\x7d\x00\xfd\x7b\x41\x1c\xdc\x81\x9e\xde\x4c\x63\x17\x5c\x0d\x36\xdb\x6a\x06\x76\xb9\x85\xc1\xa5\x8b\x85\x49\x69\x36\x5f\x55\x82\x0f\xfb\xae\xca\x17\xdc\x72\x81\x76\xaa\x05\x71\x70\x07\x6c\xbc\x5c\xa8\x03\xc9\xd8\xaf\x44\xc6\xe3\xba\x5f\x5a\x5c\x1e\xe7\x4c\xa3\x4f\xfe\x73\x2f\x4e\x4c\xd3\xb4\xac\xc3\x56\x68\xda\x05\xe1\x00\x88\x83\xfa\x00\x20\xd6\x0d\x9a\x69\x9f\xe6\x00\x4e\xc6\xcb\xc1\x6f\xdd\x2b\xb8\x38\x6c\x68\xe2\xd2\xab\xe7\x25\x6d\xec\x47\xfb\x1b\x47\x75\x8f\x4d\x0e\x1c\x6e\xf2\x7d\xb7\x23\x47\x8c\x1d\xc4\x21\x9d\xbf\x3a\xcc\xc4\x40\xd5\xe9\x76\x1c\xba\xef\xfd\x11\xad\x23\x26\xa8\xe3\xfe\xb6\x88\xc8\x13\x76\xd6\x2a\xe5\xea\xca\x5e\x39\xc3\x72\x44\x5d\x10\x07\x77\x80\x38\xae\x5c\xcd\x2b\x61\xab\x07\xf3\x82\x4c\x39\x67\x85\xd9\xc5\x94\xfa\xb5\x17\xc4\x59\x4b\x18\x02\xce\xc3\x7c\x8c\x43\x46\xd0\x26\x2d\x20\x0e\xee\x80\x49\x64\x7c\xfc\x25\xfe\x1b\x64\x26\x26\x19\xa6\x54\xb5\x28\x7a\x03\xbd\xb5\xa6\x1b\x8f\x52\x2f\x1b\xa4\x60\x6b\x6f\x05\x74\x5a\x40\x9b\x42\x02\x38\xb8\x03\xf5\x17\x5f\xe9\x3e\x7f\xb6\x95\x34\x9f\x38\xf6\x5d\xd6\xcd\x30\xcf\x8e\xa8\x1f\xe5\xcb\xe3\x91\x0a\xbc\x7b\x63\x28\x8b\x49\xbe\xa6\xd0\x39\xcc\x00\x0e\xea\x03\x11\x7f\x77\x00\xf4\xd8\x73\x9a\x03\xae\xc9\x7a\xdf\x19\x9c\xf6\x7f\xa0\x1b\xb4\x6f\x38\x3f\x56\x19\x2e\xdf\x16\x0c\x9f\x48\x7a\x47\xd6\xa6\xb9\x31\xf9\xc3\x8e\xff\x7f\x37\xda\x04\x70\x70\x07\x0e\x73\x5b\x8e\x93\x2c\xd7\x2f\x9f\x90\xb9\xff\x31\x3c\x08\x17\x7d\xb3\x57\xdd\xfe\x29\x8f\x5f\x01\xf5\x28\x92\x69\x3d\xc5\x0f\x05\x51\x17\xc4\xc1\x1d\x38\x7a\x1e\x31\xf9\x48\xbe\xe6\xf7\x85\x65\x94\x99\xbd\x3c\x03\xc6\x01\xfe\xf2\xe5\x80\x24\xed\x26\x2d\x1a\xa1\x68\xc6\xb2\x7b\xd0\x86\x80\x20\x0e\xee\x40\x46\x89\xb6\x09\xef\xe4\x71\x81\xcc\xd7\x2c\xe7\x9e\xb6\xcb\x1c\xbd\x6d\x94\x28\x04\x4d\xb3\x1e\x46\xd6\x85\x84\x13\x0f\xf4\x21\xb7\x40\x1c\xdc\x01\x76\x3e\xfd\x2f\xe6\x23\x77\xed\xd5\x6a\x14\x70\x92\xae\xed\x45\x9d\x68\x3f\x2d\x22\xee\xb4\x7c\x64\x52\x75\x2b\x3a\xc2\xbf\x0e\xda\xad\x1b\xc4\x41\x7d\x00\x10\xeb\x06\x3d\x83\x9e\xe6\x80\x7f\xbb\xc0\x8f\xd4\xba\xa8\xed\xe4\xc6\x90\x6d\xff\xb1\xe8\x84\x4d\x57\xb6\x5e\xaf\x63\xb9\x9f\x64\x2b\xf8\x8f\xa9\x9a\xbf\x40\xe9\x16\x10\x07\x77\xe0\xc0\xed\x3a\xee\x39\x89\xe2\xa5\x21\x41\xf3\x29\x83\x17\x96\x2d\xca\x37\x02\x3b\x09\x15\x63\x71\x7e\xab\x67\xd9\xc9\x8b\x92\x42\x73\x37\x10\x07\x77\x20\x5b\x23\x95\x23\x8e\x44\x51\x85\xea\xeb\x8d\x25\x75\x3d\x7d\xbf\xa8\x73\x28\x81\x58\xdd\x15\x3b\x17\x64\xc6\x9a\xd5\x02\x30\x32\x10\x75\x41\x1c\xdc\x01\x45\x9d\x6f\xb8\x6f\x48\x49\x8f\xb9\x71\x2f\x4a\xd0\xff\xfc\xda\x8e\xd5\xf0\xd9\xfe\x6a\xf8\x8f\x54\xa3\xa7\xcb\x09\xe2\x47\xb9\xd0\xe7\xa9\x20\x0e\x69\x3e\xd0\x9d\xd9\xfa\x3b\x72\xb6\xce\x53\x9d\x23\x87\x34\x8d\xbf\xaf\x44\xe9\xf7\xed\x89\xcf\x58\x4c\x13\xe3\xd1\x94\x27\x5b\x54\xd0\x27\x3e\x20\x0e\xea\x03\x95\x80\x58\x37\x68\x59\xf1\x9f\x58\xb7\x17\x72\xac\xfb\xe4\x81\x7e\x11\xee\xd6\xa7\xcc\x57\x0f\x19\x87\x70\x0e\x24\x99\xbf\xb9\x06\xeb\xcc\x26\x54\x78\x5e\xcc\x2a\x58\x74\xf0\xb9\xf4\xff\xcf\x62\xeb\xff\xef\x95\x93\x75\xa4\xcb\xda\x75\x6b\x1b\x50\x6e\x54\x54\xbb\xfd\xac\x99\xc6\x92\x6f\x6b\x8f\x61\x3a\x21\xbb\x18\x4a\x8a\x33\xe1\x18\x99\x9e\xc3\x75\x3e\xee\x4c\xd6\x89\x90\x63\xdd\x1b\xbf\x5a\x2e\x69\xe7\xeb\xd1\x86\x26\x7d\x1e\x66\xc8\xdf\x75\x8a\x60\x5c\x23\x5a\x92\x77\x2f\x79\x81\x51\x18\x59\x1a\x53\x27\x77\x26\xa3\xbd\x88\xf4\xda\xcc\xd4\x83\xcc\xd4\x49\x03\x45\xe5\x4a\x57\x80\xfb\x53\x31\xdd\x02\x17\xbf\xc8\xe4\xb7\xd3\xef\x2e\x1b\x65\x4b\x18\x47\xbd\x6e\xa5\x39\x93\xd1\x22\xc7\xba\xd3\x1e\xa8\xcc\x5e\x7d\x37\xcb\xd7\x1e\x15\x4c\x6a\x33\xfd\x68\xbd\xab\xc1\xc1\xc2\x8f\xa5\xe1\xa1\x57\xf9\x60\x79\xea\xe4\x08\xc3\x99\x8c\x56\x0c\xe9\xb2\x2f\xb7\x0c\xbc\x1c\xf4\x3c\xf5\xe7\x5a\x0c\x47\xa3\x78\xfa\xd9\xf6\x37\xa6\xe7\x0e\xd6\xf7\xec\x6f\xc8\x72\xec\xd6\x2d\x89\xb0\x9f\xc9\x68\x4f\x89\x75\xf3\xea\xc8\x5f\x89\x11\x67\x17\x7d\x1a\x17\x4e\xff\x87\xe9\xce\xa6\x67\xf2\xc2\x34\x7b\x68\x9d\xf0\x71\xf4\x2e\xd7\xa5\x87\x66\x67\x32\x5a\x47\xa4\xcb\xb6\xc8\xc5\x39\x29\xf7\x31\x5e\x25\xa5\x1d\x4e\xe7\x1d\x17\xfa\x46\x3b\xd6\xa2\xbc\x76\x64\xf1\x5a\xce\x8b\x90\x3b\xc6\x83\xf3\xe6\x99\xad\x01\x82\x7e\xa9\xa7\x1e\xb8\xcf\xbc\x4d\xab\xc5\x1c\xb3\xf0\x01\x5b\x96\x97\x49\x81\x97\xb6\x8f\xe2\xb6\xc9\xdb\x0b\xf7\x93\xa9\x56\x89\x26\xa5\xd7\x69\xed\x10\x0d\x0e\xc4\xc1\x1b\xfd\x3d\x4e\x92\x46\x62\xdb\xec\x37\xe1\x51\x2e\x59\x05\x4e\xb9\x04\x9f\x0e\x74\xa2\x8d\xae\x93\x35\x60\xfc\xa2\xa9\x7a\x74\xae\x11\xda\x2f\x00\xc4\xc1\x1b\x7d\x0d\xae\xd1\x24\x45\x9a\xb4\x07\x2a\xcd\x2a\xfa\xdc\x1d\x4c\xee\xfc\x57\x66\x15\x1d\x32\x33\xce\x46\x74\xe9\xee\x2c\x94\x56\x93\x88\xba\x20\x0e\xe9\x7b\xde\xb9\xd8\x73\x34\x0e\x14\x66\xf7\xf6\x66\xda\x19\xec\x65\x52\x45\x43\x50\xa2\xef\x92\xe9\x72\xca\x4f\x95\xdd\x12\x64\x72\x7c\x01\x7d\xcf\x0b\xe0\xe0\x8d\x7e\x63\xfa\x86\x59\xdf\xa8\x9f\x84\xcf\xc5\x27\x18\xb8\xba\x6a\xf7\x42\x0c\xdc\x9e\x1e\xd2\x7c\x93\x2a\x4f\x11\x49\xb5\x08\xa8\xaa\x46\x34\x7a\x10\x07\xdd\xec\x01\xb1\x6e\x50\xdb\x3c\xcd\x81\xe8\x80\xcb\x8d\xca\xde\x78\x2a\x5d\x0d\x86\x97\x4c\xdf\xd4\xd6\xe6\x6f\xf8\xd6\x73\x60\x91\x3b\x09\xa7\x5e\xee\x62\x6f\x46\x71\x83\x16\xbf\x00\x1c\xdc\x81\xee\x7a\x1b\x2d\xc9\x34\x49\x1f\x94\x47\x18\x6a\xd2\xec\x1c\x95\x95\x85\x92\xb8\x61\x15\xe9\x38\x51\x32\x3c\xdf\x6b\x0d\x55\x43\x11\x75\x41\x1c\x92\x03\x5f\xcd\x49\xe2\x77\x02\xf9\xbe\xf0\x1d\x11\x62\xf5\x67\xb0\xf0\x63\xe4\xfa\x4f\x9f\xcb\x6a\x2f\x98\x3f\xfa\x38\x5b\x2e\x09\xed\xa2\x06\xe2\xe0\x0e\x38\xef\x11\x4d\x8d\x7b\x64\x1b\x4f\x04\x39\xdd\xbe\xd9\xc7\x73\xc1\x46\x56\x84\xcc\xb0\xcf\xe2\xe8\x7a\xf4\x2f\x65\xdd\xe9\x9d\x37\x88\xba\x20\x0e\xee\xc0\x10\x15\x6a\xc7\x05\x74\x07\x5a\x93\x10\x74\xb5\xc5\xb1\x3c\x1e\x42\x15\x69\x66\xbc\x0a\xf9\xd6\xaa\xdf\xbe\x6f\x9f\xbc\x7a\x6d\x8c\x70\x00\xc4\x41\x37\xfb\xf5\xbf\x3b\x00\xba\x87\x9d\xe6\x80\xd7\xa6\x2a\xcf\xf4\x93\xf7\x44\x41\x58\x3b\xac\x07\xbc\xbf\x03\x03\x96\xfe\x30\x99\xcb\x3c\xcb\xf9\x95\x13\xf6\x67\xa9\xe5\x7a\x33\x14\x09\x00\x70\x70\x07\xde\x16\xf6\xc6\x66\xfc\xd6\x89\xfc\xf1\x55\xce\x17\xef\xb5\x81\x19\x43\x41\x4c\x08\xda\xc4\xd7\xc8\xae\xaf\x6c\x07\x5a\x77\xde\x43\x11\x1e\x10\x07\x77\x20\xef\x86\xe0\xde\xe5\x57\x2a\x96\x1c\x97\x47\xb2\x3f\x75\x9e\x14\xa2\xca\xc6\x6d\x74\xe3\xf6\xfe\xca\x55\x5b\x4e\xbc\x2a\xe4\xde\x82\xa8\x0b\xe2\xe0\x0e\x14\x7c\x8a\x67\xab\x27\xa8\x14\xd9\xe1\x93\x9c\x3e\x88\x7c\xd2\x76\x2c\x3d\x1d\x83\x6e\x74\xa8\x3a\xb2\xa3\xaa\xd6\xf5\x69\x1a\x8a\xf6\x83\x38\xb8\x03\x0c\xd9\x9f\xb4\x7f\x6e\x7b\x64\x19\x12\x78\x52\x54\xb3\x63\xbb\x33\x8b\x06\xd6\xe1\x96\x52\x75\xf3\xbe\x9f\x8b\xbe\x59\xd1\x05\x1d\xd3\x04\xe2\xa0\x3e\x00\x88\x75\x83\x26\x14\xa7\x39\x80\xf6\xd4\x10\x77\x05\x9f\x28\x82\x25\x56\xb2\x60\x74\x62\xfc\xdb\xd6\x3a\xd7\x50\xe8\xe5\xaa\xa4\xbb\x7a\x7b\xa5\xce\x5c\x2e\x51\xd0\xb7\xcc\x00\x0e\xee\xc0\xfc\x0a\xae\x56\xaa\x60\xae\x63\x62\xfe\xec\x53\xa3\x35\x22\x15\x63\x4b\x95\x37\x8a\xbf\xed\xbf\xd5\x74\x3e\x66\x22\xb0\x1c\x98\x82\x3e\x19\x00\x70\x48\x2f\x03\x74\x59\x39\xc3\x06\x3d\x34\xab\x96\x19\xaf\x7f\x9f\xa3\x93\x72\x49\xe4\x5c\x22\x6b\xaa\xfe\x30\x15\xcc\x23\x8e\x1d\xf1\xe9\x1a\xf4\x32\x00\xc0\xc1\x1d\x88\xf8\x31\x67\x72\x39\x0b\xb5\xd3\x2f\x9d\xad\x50\xfe\x73\x04\x06\xe9\xf4\x6e\xb9\x13\xc6\xc9\x2d\x46\xca\x7b\x6c\x84\xab\x65\x5f\xa0\x05\x2b\x00\x07\x77\xa0\x43\x73\xd9\xc8\x75\xf6\xfb\x68\xec\x62\x30\xfb\xd4\x8a\x1a\x53\xbe\x6f\xf9\x54\x97\x8e\x56\xff\xc9\xa6\x44\x68\xfa\x64\xfd\x1f\x84\x03\x20\x0e\xea\x03\x17\xff\x1e\xe5\x03\xcd\xee\x4e\x73\xe0\x85\x88\xf2\x79\x97\xca\x83\x5b\x54\x5c\x77\x95\xe4\x46\x24\x02\x6f\xcd\xaf\x63\x48\x3c\x25\xc5\xcb\x0f\x3a\xbe\x9f\xdf\x43\x54\x88\x18\x3b\x88\x83\x3b\xf0\xfe\x02\x5a\x4a\x11\x6a\x24\x23\x59\xa2\x01\xe1\xd5\x4c\x15\xec\x65\x8b\x9d\x67\x6b\xd4\xbb\xe1\xbf\x37\x6a\x5e\x63\x4d\xa0\x42\xbf\x2b\x10\x07\x77\x20\xa6\xf5\xfe\xbb\x68\xbe\x2d\xdd\x4c\x6c\x69\x32\x7e\x32\xa1\x49\x69\x0c\x7b\xb2\x63\x4f\x87\xc7\x83\xf6\x19\x01\x29\x49\x0d\xd0\x89\xc3\x20\x0e\xee\xc0\xc3\xc7\x63\x38\x6e\xe6\x0c\x61\xd3\x9f\xcd\xab\x22\xa2\x86\x6e\xf4\x8f\x8e\x3e\x4d\x0e\x49\xfd\x8e\x1f\xcd\x13\x73\x2d\x8c\x94\x12\x51\x17\xc4\xc1\x1d\xb8\x62\xd3\x79\x9c\xc6\x2a\x94\xc6\xe9\xb3\x47\xf3\xbc\xfc\x09\x4f\xc5\x92\x7d\xcf\xda\x37\x36\xb7\xcc\x6d\x7d\x9f\xab\xd5\x26\x39\xd0\xce\x97\x00\x0e\xea\x03\x80\x58\x37\x68\xaa\x7d\x9a\x03\x59\x45\x21\x0d\xdf\xb7\x1f\x4f\x56\x16\xbe\x99\x5b\xdb\xbd\x75\xe5\x4e\x1d\x81\xf8\x39\x05\xb6\x76\xf3\x5f\xf3\xf9\x6d\x82\x92\x50\xac\x1b\xc4\xc1\x1d\x58\x32\xdf\xd6\xd4\x12\x1e\xe2\x23\xf8\xc8\x7f\x58\xaf\xf8\xb0\xd4\x72\x4f\xb6\xc3\xbb\xe4\xab\x41\xc6\xb7\xdb\x4b\xf1\x3d\x6e\xe7\xa0\xcf\x25\x00\x1c\xdc\x01\x41\x2f\xaa\x5b\x89\x44\x86\x4f\x2e\x1c\xc4\x48\x9c\xbc\x1d\x26\x1c\x3b\x2c\xfd\x52\xc1\x3a\x47\x25\x99\xa1\x8f\xc7\x91\xa7\x20\x8e\xa8\x0b\xe2\xe0\x0e\x78\xde\x21\x7b\xe0\x53\xf7\x71\x98\x76\xb4\x25\xe5\xc9\x60\xbe\x41\x55\x47\x25\xd9\xc7\xc1\x34\x5a\xce\x3b\x46\xb1\x57\x47\x2a\xa0\x38\x27\x88\x83\x3b\x90\x76\x41\x8e\x58\xe1\x08\x9f\x36\xe2\xe8\xdc\x98\x63\x2c\xaf\x1c\x2b\xeb\x5e\xc6\x96\xf8\x7b\x4b\x87\xc1\xa7\xac\xbe\xf6\xcd\x33\x08\x07\x40\x1c\xd4\x07\xc4\x00\xb1\x6e\xc0\x73\xcf\x69\x0e\x7c\x7a\x57\xc3\xe3\x21\xbe\x9c\x70\xed\x0d\xf9\xfd\xba\xe8\x49\xe7\x15\x9a\x14\x25\xd3\x43\x92\x45\x89\xf7\xaf\x0d\x07\x7e\xbd\x82\x76\x28\x06\x71\x48\x7b\x3b\x34\x25\x66\x09\xc9\xd4\x5f\x89\x0a\x88\x78\xcd\xc2\xb1\xc8\x5f\xd4\x96\xec\x1d\xa1\x5a\xd5\x87\x65\x65\x7b\x45\xa1\xaf\x82\x0d\xfa\x1c\x0b\xc0\xc1\x1d\x58\x6c\x9c\xc0\xb1\x18\x96\xc7\xb9\x3f\x50\xc1\xfb\xcb\x8f\xed\x13\x86\xa6\xe6\x5c\xc2\xe1\xfb\x22\xb1\x49\xd6\x86\x56\x4b\x02\x77\x44\x5d\x10\x07\x77\xc0\x49\xe4\xa5\x65\x3d\x75\x5b\x52\xcc\xec\x55\x09\xf1\xb1\x18\x56\xf3\xe0\xa9\xe2\x17\xc3\xcc\xc5\x37\x7f\xe9\x25\xfe\xb1\x65\x1c\x42\xd4\x05\x71\x70\x07\xd2\x49\xf5\x84\x3e\x16\xfe\x64\xf7\xc3\x7a\x90\x5e\xdc\xe8\x1a\x1e\xb7\x28\xf2\x0c\xbd\xa4\xdb\x26\x85\xe8\x65\x6a\xa8\x82\xb9\x30\xc2\x01\x10\x07\xf5\x01\x40\xac\x1b\xf4\x10\x7a\x9a\x03\xbd\xd2\x8f\x05\xf1\x83\x54\x28\x4f\xf6\xd6\xa7\xb2\xde\xd0\x7f\x56\x42\xaf\x75\x13\x7d\x7d\xd7\xaf\x94\x95\xcd\x33\x32\xf7\xa4\x03\x31\x76\x10\x87\xf4\x89\x0f\xde\xdd\xdb\xbc\x0d\x8b\x75\x4e\x15\x6a\xe8\xaf\x1a\x24\x29\x4b\x7d\x22\xfb\x3f\xa0\x76\xcf\x71\xc8\x25\x7e\x31\x0c\xa7\x81\x9e\xb5\x40\x1c\xdc\x81\x76\xbc\xa6\x07\x45\xdf\xf1\xcf\x25\xfa\xdc\xf4\x51\xfc\x61\xb6\x83\xcb\xb5\xb1\x67\x10\xea\xb3\xe7\x2c\x15\x2c\x54\xca\xda\x09\xed\x1d\x03\xe2\xe0\x0e\xe8\xd7\x5a\x96\x65\x37\x65\xcb\xc6\x25\x4e\x92\xad\x44\x3f\xbe\x1c\x5e\xd9\xf0\x5e\x5e\x87\x8b\xe1\x47\xd5\x40\x5a\xc0\x97\x5e\x68\x6e\x0c\xe2\xe0\x0e\x18\x49\x15\x7e\x58\x4b\xfe\x32\x33\xc9\x71\x84\x55\x96\xed\x8d\xdd\x11\x6e\x7b\x7b\xe8\x76\x64\xe2\xfe\x45\xd4\xf7\x32\x0c\xdc\x3b\x08\x07\x40\x1c\xd4\x07\x1c\x01\xb1\x6e\x50\x60\xf0\x9f\x58\xb7\x17\x72\xac\x3b\xba\x5e\xa5\xfd\xb9\xcc\xec\xe6\x41\x38\x69\xc2\xf6\x23\xda\x2a\x8c\xe3\xa3\xcc\xc1\x28\x1f\x29\xd2\x26\x4f\x96\x69\xf1\xa4\x33\xf8\x10\x5f\xfb\xff\xed\x42\xa7\x79\x7a\x49\x21\x25\x5c\x79\xab\xb3\x83\xc1\xdf\xcc\xb8\x0c\xfd\x5a\xf8\x94\x91\x40\x93\x64\x44\x2e\x97\x57\x50\x6c\xf0\x0f\x19\xb9\x4b\x88\xbf\x0f\x88\x83\x7b\xfa\x79\x5d\x64\x92\x99\xa2\x5d\x38\xd8\x9f\x65\x98\x60\xee\x25\x5d\x54\x99\xa2\x83\x5b\x96\x0b\xb9\x25\x7d\xd8\x85\x4f\x86\xb2\x07\x88\xba\x20\x0e\xee\xe9\x58\x6e\xb9\xf0\x6b\x8c\x63\x2d\xd3\x37\x49\x73\xf7\x3b\xe3\x76\x9e\xa1\xc4\xd3\x3c\xde\x1c\x79\x91\xd4\xa2\xe9\x10\xb6\xba\x08\x3d\x6f\x83\x38\xb8\xa7\x02\xb1\xad\x1a\x35\xbb\x6e\xe5\x76\x3e\x47\x05\x3c\x81\xb8\xbf\xe7\x6c\xce\x35\x14\x1d\x79\xf2\x79\x3e\x0b\xff\x26\xbc\x81\x09\xdd\xaf\x40\x1c\xd2\xb3\x0b\xbd\x72\x5f\xed\x13\x53\xf2\xea\x58\x3a\x9d\x82\x65\xa9\xcb\xcc\x37\x5c\x94\xb6\xe3\xc7\x37\x96\x2c\xdc\x1a\xee\xef\x5b\x5e\x84\x9e\x5d\x00\x1c\xd4\xab\x00\xb1\x6e\x50\x24\xf8\xf4\x58\xb7\xbf\xce\x65\x6d\xbe\x5e\xf4\xbb\x1a\xfd\x18\x09\xa8\xbf\x42\x9f\xf0\xd5\x87\xb9\xf1\xb8\x4f\x2e\xed\x4b\xf2\x47\x71\x1f\x48\xd9\x23\x22\xd2\x20\x0e\x39\xd6\xed\x1f\xc2\x6f\x84\x7a\x21\xa1\xb0\xda\xd1\xcc\x9a\x7a\xc7\x92\x34\x96\x33\x4f\x81\x38\xf5\x4f\x22\xc7\x44\x23\x25\xee\x24\xa3\x21\x54\x19\xc0\x21\xc7\xba\x59\x34\x94\x2b\x46\x03\x67\xf8\x87\xae\xfc\xb9\xca\xbb\xc1\x3d\xab\x90\x29\xf6\xc2\xf3\x95\xe6\x8e\xae\x5d\xf6\xd8\x00\xf3\x85\x39\x44\x65\x10\xf7\x9f\x58\xf7\x7f\x39\x46\x8d\x5d\x71\xb3\x89\x83\x0d\xbd\x74\x94\x13\xfd\xd5\xbd\x1c\x3a\x8b\xf5\x2e\x3a\xfc\xa6\xbb\x35\x21\x33\xa8\x97\x1e\xb9\x60\x60\x43\xb1\xee\xb2\x73\x2c\xa1\xfb\xf7\xc6\xa6\x22\x51\x6f\xa9\x6f\x98\x35\x48\xc4\xa9\x54\x63\x05\xbd\xe2\xd2\xb1\xb7\x6f\x79\x76\xff\x43\x2d\xeb\xbf\x63\xdd\x4f\x53\xbd\xdf\x18\xbd\xdc\xde\xb2\xf0\x26\x73\x30\xdc\x38\x10\xbe\x7b\xc2\x77\xf1\x79\x43\xe8\xfa\x38\x83\x9e\x99\xf2\xf3\xad\xdd\x7f\xa1\x55\xb1\x18\x04\x29\xa4\x62\xfe\x35\x03\x84\xa1\xb2\x18\xcf\x0b\xc9\x7a\x1f\xc9\x7f\x1c\xaf\x6d\x50\xaf\x1c\xff\xd1\x3c\xce\x51\xf4\x7f\x2f\xd6\x0d\x1a\xdc\x29\xb1\xee\x93\x93\xbd\x26\xdb\xad\x3b\xc2\x53\x28\xa1\x7e\x1f\x37\xd6\xcb\xdc\xf6\x45\x36\x99\xbf\xaf\xd2\xbd\xde\x8f\xd8\x43\x91\xcf\x36\xfc\xf7\x1a\x50\xf8\x1b\x87\xeb\xd1\x8c\xaf\x68\xb0\x59\xe6\x65\x67\x77\x57\x70\x89\xa2\x05\x19\xe8\x72\xd7\xc5\x7f\x98\x05\xa4\x28\x32\x88\xfe\x7b\x79\xeb\x03\x95\x7d\xb5\x31\xb6\x84\xc7\x13\x62\x71\x6a\x36\x7e\xdb\xe5\x14\x47\x8e\xa1\xe2\x2f\x5d\x86\xbf\x78\xd9\xc9\xf2\xc7\x7f\x42\xb1\x6e\xd0\xe5\xff\x89\x75\x7f\x42\x8a\x75\x13\x68\x7c\x20\x99\x7e\xf5\x21\xe1\xb3\xd0\xde\x78\x91\xe5\x16\xa9\x7f\xa6\xa4\x56\xb4\xb6\xde\xd3\x65\xee\x6b\xc6\x32\x7f\x1c\x66\xcf\x62\x21\x5c\x02\x39\xd6\xed\x31\x40\xa3\x9a\xe8\x90\x5e\xf6\x2e\x2e\xfa\xb0\x49\x2a\x72\x49\x2a\x49\xb9\xac\x0a\x5b\xe7\xa2\xbb\x2e\x8d\x46\x15\xdd\x10\xed\x59\x5c\xf6\x13\x72\xac\xbb\xbc\xfb\xfa\xfc\xb1\x73\xb3\x43\x58\xbe\x25\x8e\x36\x46\x38\xc5\x3b\xbe\xca\x4c\xac\xfb\x65\xcc\xd6\x0b\x16\x86\x77\x8a\x58\xc4\xce\x64\xb4\xc8\xb1\xee\x5c\x53\x57\xba\x3b\x42\x23\xe1\xfb\x1a\xa2\xa3\xce\xa6\x43\x37\x85\x59\x3a\x49\x3e\x4e\xbe\x5e\x09\xea\x12\x46\x61\xd8\xb2\x4f\x3a\x93\xd1\x22\xc7\xba\x7f\x08\xce\x55\xe8\xa9\xfe\x3a\x47\x63\xdb\xd6\x1c\xc1\xd0\x16\x38\xbb\xe7\xb0\xbd\x22\x73\xc7\x39\xe0\x7b\x51\x1f\x21\x86\x98\xd3\x99\x8c\x16\x39\xd6\xfd\xe4\xfd\xc6\x27\x23\x25\x0e\x25\xc5\xcd\x6f\x4f\xdc\x62\x34\xb1\xd3\x04\xbd\xda\x95\x15\x6e\xca\x44\xd4\x55\x65\x51\x91\xac\x96\x9d\xc9\x68\x91\x63\xdd\xc7\x16\xb4\x71\x04\x05\x2f\x74\x95\x2e\x8f\xa2\xb8\xac\x07\x15\xc5\x95\x38\xf8\xb0\x3d\x48\xd6\xb3\x13\x11\xfd\xa4\x78\x9f\xf1\xc1\x99\x8c\x16\x39\xd6\xad\xe4\xb9\xbf\x79\xc3\xe0\xed\xb2\x55\xec\x70\xb0\x13\xab\x15\x4d\x1f\xf3\xfa\xa0\x52\x2e\xc1\xeb\xa7\x1e\x92\x4f\xb7\x87\x16\x4f\xce\x6c\x3a\x04\xfa\xa5\x9e\x36\x1d\xba\xee\x4d\x37\x60\x95\xb2\xdc\x77\x51\x44\x63\x28\xbb\x39\xcf\xaa\x27\xe7\xe0\xde\x13\xc9\x99\xef\xef\xab\x2e\x87\x14\xaf\x11\x43\xd9\x5b\x10\x87\x74\xf8\xe6\xb4\xd7\x64\x72\xf0\xad\x8e\x31\xdc\x7b\xf7\xba\xbf\x2d\x10\xc6\x9a\x9d\xf7\x69\x9e\x6d\x12\xe9\x2e\x7b\xc0\x32\x97\xc8\xbd\x81\xa8\x0b\xe2\xe0\xd3\xa1\x79\x0e\x9f\xbb\x14\xfe\x5f\x5e\xcf\xc7\xa8\xf4\x79\x39\xf6\xad\xb6\xaa\x91\x3f\xb9\xd5\x4a\x18\x26\xb6\x97\x39\x64\xfd\xb9\x41\x0e\x5a\x1e\x04\x70\xf0\xe9\x10\xb6\x82\x6b\xcc\x13\xbe\x9f\xe8\x3d\xf1\x65\x1e\xd2\x6b\xbc\x94\x2f\xef\xc8\x50\xae\x09\x5d\xe6\xc2\xcd\x3b\x7a\x9d\x50\x48\x38\x8f\xa8\x0b\xe2\x7c\x25\xff\xfb\x8b\xa9\x7d\x83\xdb\x4f\x07\xa6\xca\xac\x5c\xbf\xd0\x10\xd7\x15\x69\x38\x71\x1a\xe2\x9b\xe2\x5e\xf4\x5a\xcf\xb7\xf9\x72\x12\xd6\x14\x55\x89\x88\x75\x83\xb8\xff\xef\xdf\xcd\xcb\xdb\xef\x3f\xfd\xf9\x2f\x4f\x6e\xa0\xae\x79\x9a\x02\xbf\x6a\x23\x3c\x68\xed\x04\x3c\xf1\xd1\x9a\x92\x25\xbe\xef\x26\xbb\xca\x91\xb1\xde\x7b\x43\x17\x89\xb7\xf0\x35\x32\xc8\xbd\x14\x8a\x75\x83\x38\xb8\x02\x01\xc5\xad\xfb\x84\xc5\x8d\x29\x26\xda\xa8\x1f\xf6\xab\x1e\xe8\xec\x69\xcc\xa5\xff\x0c\x6e\xbb\x46\xf5\x87\xf0\xe0\xc2\x05\x2b\xe8\xc3\x41\x10\x07\x57\xa0\x85\x8c\x66\x67\xc0\x4f\xe5\x52\xc6\xd6\xb3\x14\xec\x77\xb2\x29\x8e\xdd\x8c\x3c\xef\xe6\x85\xda\xbe\xae\x72\xfc\x9a\xea\x2e\x80\xde\xea\x81\x38\xb8\x02\x57\xba\xa7\xe6\x3e\xed\xa3\x25\x54\x76\x0f\xde\xab\x3f\xb6\x78\x17\x3d\xec\xed\x6b\x12\x52\xe9\xf3\xeb\x32\xfe\x80\xdd\x61\x2d\x14\x3b\x03\x71\x70\x05\x1e\x97\x5b\x9b\x52\x7f\xcf\x26\x23\x7e\xe8\xf2\x4a\x52\xd6\xe5\x55\x41\xc2\x21\xea\x25\x5f\x8f\x95\xe6\x61\x3b\x3f\xdf\xaa\x6f\xe1\xd0\x81\xfb\x00\xee\x1f\x05\xfe\xe7\x66\xf9\x17\x07\x40\xb7\xb0\x53\x77\xeb\xce\xfc\xa8\xee\xfe\x20\x52\x51\x33\x76\x30\xd7\x6a\xc5\x2f\xa8\x0c\xb3\x26\x22\x58\xcb\xf3\x8a\xed\x4a\xcd\x04\xaa\xcb\xee\x6b\xc4\xd8\x41\x1c\xdc\x81\xa9\x46\xb3\xb5\x7b\x54\x5e\x4e\x28\x0f\xca\x97\x8b\x30\x7e\x89\xde\x51\x97\x98\xb1\x33\xbe\xfb\x9d\xb8\xc3\xb0\x39\x07\x4f\x16\x5a\x19\x05\x71\x48\x3b\x33\x9a\xa5\xd0\xcf\x30\x90\x59\xb2\xdc\x59\xcd\x0f\xde\x79\x8f\x5e\xc8\xe9\x8d\x77\x79\xe2\xbc\x63\x22\xdd\x4a\xf5\x63\x7d\x47\x68\x17\x4d\x10\x07\x77\xe0\x59\x8f\xeb\xcf\x72\x85\x65\x6f\xb2\x63\xdd\x8f\xd5\x3a\xc5\x3b\x25\x9e\xfb\x54\xfc\x41\x22\xde\xdf\x32\x79\xb0\x7d\x52\x58\xf0\x11\x75\x41\x1c\xdc\x01\x3c\xb6\x97\x77\xf3\xfc\xf5\xd8\x05\x7e\x15\x33\xbf\x21\x56\xe9\x5e\x2c\xf4\x9c\x95\x1a\x57\xce\x5c\x09\x78\xf8\x2b\xc6\x34\xbc\x16\xe1\x00\x88\x43\x38\xf0\x09\x10\xeb\x06\xcd\x27\x4e\x73\xe0\xe1\xa1\x21\x61\x8f\xda\x3d\xda\x2f\x85\x76\x76\xb2\x28\x7d\x4a\x43\x77\x56\x4f\x9e\xde\x4e\x2f\x3e\xbf\x3b\x85\x1d\x7f\x69\x0a\x5a\x1d\x07\x71\x70\x07\x98\x02\x7f\x95\x45\xf8\x32\x4c\x39\xc7\x2e\x9b\xf4\xbe\xdf\x9c\xcc\xec\x8c\x9b\xc5\x91\x22\x61\x14\x7c\x59\xcb\xda\xd7\x2f\x0d\xed\x7e\x0d\xe2\xe0\x0e\x48\x48\x30\x64\x2f\xbc\x7b\x98\x7a\x3d\x24\xaf\x86\x82\xf8\x1b\x49\xd6\x44\xe0\x1b\xeb\x9f\x3b\x0d\xb8\x8f\x43\x1c\xd8\xdf\x0d\x42\x1b\xea\x80\x38\xb8\x03\x65\x0b\xfb\x19\x3d\x77\x3c\xa9\x9b\xaf\x2d\xc5\xcf\x16\x77\x54\xbb\x15\xd5\x97\xd3\x0d\x56\xd6\xac\xe1\xea\xa1\xf2\x97\x32\x41\xd1\x7e\x10\x07\x77\xa0\xc0\x85\xcb\x0d\x95\x6a\x63\x4c\x1d\xaf\x5a\x57\x3e\x83\x83\xf8\xa9\x68\x8c\xcc\x55\xf1\x9a\x2b\x95\x7e\x4c\x89\x1c\x69\xf5\xd0\xdb\x7d\x10\x07\xf5\x01\x40\xac\x1b\x34\xb9\x3b\xcd\x81\xd9\x09\xe2\x3d\x32\x56\x4f\x82\xfa\x4f\x4a\xeb\x57\x5b\xf3\x42\x37\xe5\x96\xbc\x5c\xf0\x58\x9c\x65\xca\x18\xd4\x1c\x33\x56\x0f\xa1\x08\x3e\x80\x83\x3b\x90\xf6\x83\xf1\x5a\xf0\xea\xfb\x76\x5a\xde\x9b\x3b\xa9\x15\xd9\xa6\xb4\x8b\xaa\x68\xbf\x71\x2f\xcf\xe4\xbc\x7b\x1c\xe0\x2c\x97\x36\x8b\xa8\x0b\xe2\xe0\x0e\x5c\xd8\x2d\x3f\xe7\xc7\x2d\x3a\xb9\x79\xcb\x09\xef\xf8\x67\x55\xed\x80\x7a\xde\x0d\x82\xcc\x94\x3f\x61\x25\x2c\xf8\x57\xeb\x9e\x42\x6f\x1f\x40\x1c\xdc\x01\x06\x4a\xfd\x17\xfb\x3a\x72\x16\x0e\xb6\x7f\x8e\xf6\xc2\x29\xd2\x5a\x5d\x04\x8d\xaf\xe6\x70\xb5\x6e\x3e\xf0\x7a\x5b\x37\xfe\xac\x18\x51\x17\xc4\xc1\x1d\x90\xb1\xde\xca\x42\xef\x3c\xb6\x5f\x89\x7d\xc7\x83\xcb\x36\x10\xfb\x7a\x6f\xea\xce\x60\x46\xad\xdd\xfc\xc7\x1b\x29\x81\xee\x41\x27\xd0\x86\x5d\x00\x0e\xea\x03\x80\x58\x37\x68\xa6\x7d\x9a\x03\x6f\x2f\x56\x4b\x04\x47\x31\xa1\x99\xdb\xbe\x0e\xff\xc2\x9a\xf5\xf2\x58\x33\xfd\xcb\xa7\xd9\x82\x8a\xef\x7b\x44\x95\xdd\x2e\xc4\xd0\xc6\x37\x20\x0e\xee\xc0\xaf\x86\xd6\xb9\xd2\x84\x2a\x5b\x94\xda\xb1\x54\x41\x17\x9a\xad\xd6\x0c\x42\xfa\x6f\xdc\xc2\x09\xfe\x3f\x88\xbd\x67\x3f\x89\xe9\x40\xf3\x0c\x00\x07\x77\x40\xb3\xb2\x56\x86\xec\x57\xf2\x8f\x23\xed\xb7\xe1\x1f\x4c\xa7\xbe\xca\x59\x1f\xd5\xc7\x3f\x78\x57\xd3\x24\xed\x2d\x60\x54\x6b\x8c\x8b\xa8\x0b\xe2\xe0\x0e\x24\xee\x75\x25\x77\x2f\xf3\xb0\x27\x65\xd2\xaf\xbf\x2f\x4e\x0e\x9e\xe7\x51\xa3\x52\x13\x2c\xaf\xfc\x18\x47\xa5\x5f\x70\xf2\x00\x72\x0b\xc4\xc1\x1d\xa0\xff\x51\xb2\x91\x27\xfc\xbc\xee\xeb\xd5\x13\xf4\xb1\xfb\x3c\xcc\x6b\x6f\x29\xb9\x53\x14\x9e\xb2\xaf\xcc\x1e\xe3\x7f\x1b\xb8\x53\x80\x70\x00\xc4\x41\x7d\x00\x10\xeb\x06\x3d\xf6\x9c\xe6\xc0\x6e\xec\x4b\x29\x6e\xee\xb2\xc1\x90\x52\x29\x72\x8a\xe6\xfe\x8b\x27\x44\xa5\xf6\xf7\x0e\xe3\x02\xfc\x71\xa9\x76\xe2\x69\x1f\x41\x9b\xb4\x80\x38\xb8\x03\xde\x5c\x39\x25\x13\xfb\x52\x43\x5d\x38\xf5\x15\xda\xee\xd4\x76\xb6\x4e\xcb\x6f\x5c\x88\x1f\x4f\x4a\x2b\x7e\x52\x6f\x97\x23\xbe\x0a\x25\xc8\x00\x1c\xdc\x01\x06\xd9\x77\xc1\xb6\x9b\xab\xb5\xe2\x78\x57\x6b\xb8\xb0\x0a\x29\x0e\x18\x1f\x5d\x7b\xb6\x2a\xea\x9f\x79\x99\x55\xbb\xa0\xb9\x06\xda\x60\x0c\xc4\x21\xa5\x7c\xe2\x78\x8c\xcc\x8a\x7e\xfe\xbc\xc0\x1e\xb8\xb5\x70\x4d\xe8\x6a\xd3\x9a\x4f\xea\xe5\xac\xe2\xe5\x80\xca\xb7\x0b\x0b\xd7\x45\xa0\x58\x37\x88\x83\x3b\x30\xf3\x9a\x4e\x8f\x6b\xcd\xcd\x55\xf1\x45\x5d\x49\x5e\x6c\x7f\x75\xaa\x07\x85\xaf\x38\x6b\xcb\xa5\x82\xa2\xaf\x0c\xed\xfb\x37\xa1\x9d\x9a\x41\x1c\xd4\x07\x00\xb1\x6e\xd0\x33\xe8\x69\x0e\x88\x63\x96\x25\x61\xd9\x8a\x3c\xc1\x97\x49\x6c\x6d\xcf\xe0\xaf\xc4\x31\x10\x1a\x37\x09\x26\x11\x16\xd1\x6c\x1f\x57\xbc\xb9\x0e\xbd\x21\x01\x71\x70\x07\xb4\x57\x18\xf4\xd2\x35\xa4\x33\xbd\xf4\x15\xd1\xd4\x12\x08\xca\x33\xb1\xe8\x12\xd9\xdf\x4f\x39\x9b\x65\xd3\xc5\xc4\x85\x59\x42\xf3\x77\x10\x07\x77\x60\x81\xf8\x7c\xdf\x7a\x95\xa8\xde\xcc\x9c\xce\xb4\x3a\xb1\x97\x11\x61\x1b\xff\xcc\x1d\xed\x71\xce\xa6\xf9\x17\xd8\xfc\x91\xb4\xf5\x88\xba\x20\x0e\xee\x80\x07\x91\xf6\xd3\xae\xa8\x73\xf5\xb1\x43\xa9\x7b\x69\x1b\x12\x9f\xd7\xa6\xca\xee\xb9\x32\x7f\x6b\x08\xef\x35\x35\x6c\xd0\x9a\x80\x36\xec\x02\x71\x70\x07\xe6\x9c\xd9\x42\x2a\xb8\xad\xd8\xc9\xbc\x8b\xf6\x71\xca\x9f\x26\x99\xf6\xc7\x8f\x1c\x29\xdf\x48\x1b\x18\x19\x16\x0c\x88\x10\x87\xce\xe2\x06\x71\x50\x1f\x00\xc5\xba\x41\xcb\x8a\xff\xc4\xba\x3f\x21\xc7\xba\xed\x69\x42\x28\x8c\x3f\x27\x38\x4e\x18\xdd\x0f\x97\xb2\xbe\xa4\x58\x79\xf7\x21\xf6\xfc\xca\x10\x9e\xe6\xd1\x82\xbb\x4c\xfa\xf5\x80\x33\x59\x39\x41\x8e\x75\xff\x79\xa3\x95\xb0\xae\xa9\xbb\xd3\x41\x95\xc1\x1d\x91\x78\xa3\x30\x83\x5a\x6f\xe9\xfb\x4f\x75\xfd\x44\x03\x5f\x54\x4e\x92\xeb\x36\x67\xb2\x4e\x84\x1c\xeb\x4e\x68\xb4\x95\xdf\xd7\xfb\xb9\xf1\x88\x71\xcb\x4c\xc2\xca\xd1\xea\xc7\x61\xe5\x02\x2f\x67\x40\x85\xfa\x70\xe5\xcb\xbe\x6e\xe7\xce\x33\x19\x2d\x72\xac\x3b\x4c\x8f\x24\xee\x4d\x01\xc5\xb5\xcc\x1b\x0d\x94\xef\x4d\xac\x06\x1d\x8f\x51\xab\x78\x4f\xd4\x5e\x59\xe9\x2d\xed\xe8\xbf\xa9\xde\x38\x93\xd1\x22\xc7\xba\x93\x71\x9e\x72\x6d\xb6\xde\x96\xa6\x23\xdc\x3e\x98\x5c\x59\xaa\x20\xee\xd4\x8a\xbc\x2e\x2e\x41\x7d\x8b\x24\x42\xc9\x64\xa1\xed\xc3\x99\x8c\x16\x39\xd6\x5d\xd8\x81\x16\x61\x95\xf3\xe8\x85\xc2\x97\xd7\xb5\xf1\xa5\x8c\xf9\x5b\xe7\x35\xce\x59\xe5\xfa\x7f\xec\x14\x5f\xc2\x54\x3c\xc6\xd6\x3e\x93\xd1\x22\xc7\xba\x27\x63\x7b\x34\xd8\x6b\xe8\x4c\x7d\xae\x7b\xb9\x65\xfc\x61\xdb\x33\x31\x68\xd1\xc8\xf5\xc0\xc7\xc1\xd1\x7e\xc1\x7a\x49\x3a\xfe\x4c\x94\x92\x40\x8e\x75\xf7\x64\xfa\x07\xea\x4d\xef\x8a\x3b\xdc\x41\xc9\x2e\xb0\xee\x40\x51\xe3\x9d\xeb\xe6\x5e\x8e\x5f\x92\x6e\x3c\x79\x79\x59\xb4\x22\xe8\xcc\xd6\x00\x41\xbf\xd4\xd3\x1a\x3d\xe3\x7d\x3d\xb6\xfd\xa0\x44\x35\xfa\xab\xb4\xc1\x63\x8d\x4e\xcc\xd8\xfc\x5b\xa5\x96\x59\x57\xa6\x55\x59\xcb\x74\xf1\xe4\x6b\xa0\x6f\x2e\x41\x1c\xbc\xd1\x1f\x65\x0a\x34\x93\x73\x5d\xed\x09\x36\x10\xad\xf5\x8f\x1f\x47\xa5\x26\x34\x37\x3b\xb0\x3a\x3a\x27\x41\xaa\xaa\xb0\x77\xf2\x15\xba\xd9\x83\x38\x78\xa3\x7f\xfa\x4c\x14\xbd\xdf\xf9\x89\xdc\x5b\xac\x11\x6c\x53\x4d\xce\xf6\x66\x95\xe4\x9e\xdf\xa9\x3a\x69\x8f\x94\xbf\xbc\x15\x6c\xb4\x87\x5e\x89\x82\x38\x78\xa3\xbf\x6e\xa6\xb2\x58\x28\x40\xca\xb7\xb7\x10\x5d\xcc\xa4\x50\x50\xf4\x95\xa8\x1a\x1f\xbd\xb5\x85\x0e\xbb\x87\x8b\x8f\x84\xc4\x01\x7a\x48\x01\x71\xf0\x46\xdf\x80\x1e\x9f\x11\x55\xb5\x40\x66\xbc\x86\x43\x6e\xc1\xbf\xae\xab\x9d\x89\xbb\xb2\x49\x96\xc4\x42\x78\x79\x3d\x83\x4c\x4e\x13\x03\xd1\xe8\x41\x1c\x74\xb3\x07\xc4\xba\x41\x6d\xf3\x34\x07\x48\x32\x9e\xad\x6f\xcd\xbc\x0d\x59\xc4\xac\xa2\x24\xa9\x66\xfa\x76\xc7\x36\x95\xb7\xa6\x9d\x4d\xf0\x9b\x47\xf5\x72\x40\x14\x1a\x74\x3c\x11\x88\x83\x3b\xd0\x73\x83\x62\x76\xd3\x90\xb4\x9e\xe1\x7c\x54\xd3\xcf\xe9\x6f\x2f\x7d\x03\xd9\x2c\xdf\x6a\x09\x2b\x1c\xfe\x29\xda\xdd\x4a\xcf\x83\x16\x15\x40\x1c\xdc\x01\xb5\x61\x0a\xde\xeb\xc1\xac\x26\x2e\x83\xd6\xde\xf7\xcd\x9e\x2c\x54\x74\xc6\x94\x5d\x90\xa7\x2c\x5d\xd2\x59\x30\x6a\x59\x78\x79\x1b\x51\x17\xc4\xc1\x1d\xd0\x0a\xea\x6f\xbf\xca\xda\xce\x4b\xe7\x6f\xa4\xa6\xe6\xd8\xb4\x9a\x9f\xc7\xfd\xcc\x75\x61\x33\xf4\xcd\x3d\x79\x34\xf9\x56\xbb\x38\x44\x5d\x10\x07\x77\x60\x29\x25\x81\x46\xe2\x73\xf4\x0d\x0a\xcd\xb2\x62\x6d\xeb\x57\x23\xac\xd7\x72\x12\x3f\x4a\x1e\xf4\xa3\x89\x9b\x64\x46\xa5\x8d\xa1\x21\x1c\x00\x71\xd0\xcd\x1e\x10\xeb\x06\xdd\xc3\x4e\x73\x80\xec\x99\x14\x6d\xa5\x18\xea\x48\x69\xd4\xd8\x95\xc4\x5f\x75\x75\xf7\xb3\x47\x6e\x68\xbc\x0c\x5d\xc0\xec\x23\x4e\x46\x7f\xb0\xa1\x8e\x18\x3b\x88\x43\x3a\xa6\x89\x96\x4b\xed\xd2\x2b\x51\x7b\xe6\x69\x86\xa5\x13\x9e\xa1\xa8\x89\x6f\x5b\x3c\x2f\x9b\xfb\x36\x4d\xb9\x94\x1a\x05\xe5\x53\x58\x11\x75\x41\x1c\xdc\x81\x26\x52\xf2\xe6\xe7\x38\x17\xa8\x98\x24\xc2\xd1\xb9\x46\xdb\x95\x62\x7a\x64\xec\xe6\xa6\x47\x9c\x15\x65\x51\x8d\xe3\xa8\x32\x22\x11\x75\x41\x1c\xdc\x81\xd6\xd1\x1f\x09\x31\xfe\x98\x9f\xf2\x0b\x4c\x83\x99\xd5\xf7\x06\x66\x1b\x1f\xc9\x1b\xff\xf2\x20\xf6\x44\xff\xc8\x69\xf3\xed\x8a\x0b\xb4\x4b\x29\x80\x83\x3b\xf0\x3a\xc8\x2a\x98\xf1\xfd\x8a\x74\x6e\x76\xe0\x1d\x15\x72\xe2\x8d\xe9\xc4\xdc\xa3\x3d\x55\x55\x86\x87\xcb\xc2\xa8\xc3\x75\xe4\x97\x11\x0e\x80\x38\xa8\x0f\x00\x62\xdd\xa0\x09\xc5\xa9\xa7\xb7\xb2\xef\x57\x35\xee\xea\xb8\x31\x51\x24\x67\x32\xbe\x4e\x4a\x53\xab\xd0\x76\x73\x13\x2b\xdf\x10\x72\xd9\x8a\x6c\x58\xe6\xcd\x44\x8c\x1d\xc4\xc1\x1d\x30\x5d\xaf\x4e\xb6\x43\x93\x53\xb2\xdc\x9c\x29\xd1\x16\x09\xbd\xa3\x9a\xf5\xa0\x3a\x50\x90\xfc\xfe\x71\x60\xab\x44\x38\x53\x7b\x2c\xa2\x2e\x88\x83\x3b\xb0\xc1\x4d\xf0\x4d\x8b\x9c\xa5\x73\x23\xe0\x4f\x82\xd4\x9d\xdf\x7f\x58\xad\x89\x12\x5d\xb6\x1a\xf2\x22\xc6\x42\x02\x0e\x2f\x54\xcf\x40\xbb\xe9\x02\x38\xb8\x03\x6f\x1e\xc8\xdf\xe6\x9a\x0f\xbf\xe7\x40\x87\x71\x69\x83\x93\x30\x2e\xcb\xcc\x53\x2f\xc8\xa3\x59\x9c\x89\x88\xa6\xfc\x8b\x0d\x97\x12\xa2\x2e\x88\x83\x3b\x60\xa7\x17\xa4\xa4\xef\xe2\xeb\xd2\xbe\x14\x38\x91\xd2\x76\xce\x3f\x80\x3a\xf7\x8e\x28\xa9\x21\xb3\x95\xbe\x13\x1d\x67\x97\xbc\x3e\xc2\x01\x10\x07\xf5\x01\x40\xac\x1b\x34\xbb\x3b\xcd\x01\x31\x5f\x8c\x02\x77\x25\x33\x12\x9c\x3d\xfd\x65\xba\xa2\x11\x9a\x8b\x8e\x5f\x82\x6e\xb4\xd1\x89\xd0\xdc\x97\x22\x8a\xa6\x72\x4e\x43\x8c\x1d\xc4\xc1\x1d\x88\xea\x4f\xae\xd1\xd4\x89\x1f\xf1\xd6\xc9\x3d\x14\xbb\x2a\x64\xc6\x56\xf2\x2c\x79\x57\xea\x9c\x12\xad\xcf\xb8\xde\x35\x3b\x6f\xe8\xf4\x0e\x10\x87\x14\xe7\x44\xe3\xf2\x1a\x68\xa3\xb8\xf9\x21\xf4\x4b\x8c\x4b\x6a\xe7\x33\x82\xec\x83\x5e\xe2\xdc\x38\x9d\xf7\x26\x59\xcf\x92\x3c\x42\x4b\xa1\x38\x27\x80\x83\x3b\x20\x54\x96\x1f\x8e\x8e\x69\x9b\x4c\x78\x21\x62\xa8\xa2\xa5\xe3\x8f\x0f\x13\x1d\xd1\xf3\xd8\xda\xe8\xd1\x19\x2a\x7f\x6d\xe5\xdd\x14\x44\x5d\x10\x07\x77\x40\x7c\x48\x39\x94\xfe\xc2\x3d\xce\xd4\x8e\x88\x18\xe3\x92\xaa\x4b\x7d\x04\x46\x4e\x1d\x66\x4d\x72\xd8\xdb\x71\x73\x6b\x01\x63\xd0\xb1\x8d\x20\x0e\xea\x03\x80\x58\x37\x68\xaa\x7d\x9a\x03\x29\x29\xc4\xc1\x3a\xbe\x8c\xb2\x6a\x8b\x3d\xac\xcb\xd2\x87\x9a\xc3\xb4\xec\x72\x73\x19\xad\xd1\xa3\x1a\x94\x0f\xe8\x3c\x8a\xd9\x11\x63\x07\x71\x70\x07\x34\xda\x7f\xfe\x10\xdd\xe3\x4e\x92\x34\xbc\xc5\x7f\x83\x93\xc3\x5b\x35\x17\xaf\x6d\x25\x4e\x98\xa7\x79\x9b\x9c\x37\xec\xb7\x26\xf4\xe2\x06\xc4\x21\xbd\x17\x3e\xd2\x28\x78\xcc\x46\xbf\xc8\xa0\xd6\x9f\xa2\xfd\x5a\x65\x11\xcb\x21\x92\x61\xc7\xfb\xf5\xed\xe9\x67\x2f\x66\xf8\x3b\x46\xaa\xa1\xf7\xc2\x00\x0e\xee\x40\xf9\xfd\x5a\x39\x69\x0c\x35\xcb\x66\xed\x76\x97\x94\x9c\x38\xad\xb0\xaf\x65\x05\xc6\xe5\x9e\xfc\xa1\x38\x34\xd1\x34\x15\xcb\x50\x0c\x1d\xc4\xc1\x1d\x38\x94\xe6\xc3\x50\x8f\x1a\xc6\x23\xa3\xb2\x29\xdf\xbe\x14\x46\xaa\x43\x43\x53\xf4\xcc\xd0\xf5\x11\x2f\x8a\xc8\xd1\xfb\x70\x53\x7e\x84\x03\x20\x0e\xea\x03\x80\x58\x37\xe8\xb9\xe7\x34\x07\xa6\x25\xb4\xce\x53\x4a\x47\x6c\xa4\xee\x89\x64\xd8\xb4\x52\x0a\xc5\x1d\x1f\x0e\xaa\x5e\x4b\xc5\x47\x91\x12\x68\x1d\x22\x15\xfe\x84\x18\x3b\x88\x83\x3b\x50\x22\x6e\xe9\x53\x57\x7c\xc2\x2a\xc2\xfa\xfc\xb9\x2d\xc5\x33\x61\x0a\x62\x65\x93\xf0\xb1\xc2\xdd\xb7\x71\xb9\xe2\x89\x4f\x79\xa1\xfd\xb3\x40\x1c\xdc\x01\x93\x9f\x5a\xaf\x5e\x50\x1a\x1e\x88\xb6\x97\xf7\xfc\x9e\xfe\xe8\x96\x99\x1b\x1a\x73\xe0\x61\x2f\x4d\xda\x53\x18\x3b\x39\xef\x0a\x45\x90\x41\x1c\xdc\x01\x7c\xda\xfb\x1d\xd1\xca\x58\x5f\x65\x56\xf8\x3d\x8f\xd2\x1f\xdb\xb0\x15\xae\x99\x5b\xdf\x0c\xca\xaf\x52\x5d\x68\x5e\x93\xff\xed\x0d\xed\x1d\x03\xe0\xe0\x0e\x48\x73\xa7\x2d\x44\x5a\x91\xeb\xe4\x3a\xd3\x0d\xaa\x85\xdf\x7d\x20\xe3\x43\xe4\x60\x7c\xe9\x9b\xaf\xfb\x1d\x8a\xe6\x2b\x78\xda\xec\x08\x07\x40\x1c\xd4\x07\x00\xb1\x6e\xd0\x43\xe8\x69\x0e\xb8\x57\x85\xcc\xd7\xb6\xf6\x1b\xee\xb2\xe4\xed\x3f\x46\x0d\x70\xd7\x8b\x72\x8b\xa3\xf6\x7d\xcb\x1f\xb3\x58\x37\x9f\x5c\x1e\x56\x80\x18\x3b\x88\x83\x3b\x40\x26\x7e\xaf\xb8\x41\xe9\x22\x4f\x4b\x48\xe9\xa5\x91\x6a\xe3\x2e\xff\xf4\xb4\xb1\xe5\xbb\xa2\xe1\xea\x69\xd6\x7d\x8c\x57\x0d\xa1\xbd\x12\x40\x1c\xdc\x81\x4c\xd9\x5a\xab\xef\x62\x5f\xb8\xa4\xde\x2d\x8b\x8c\x29\xd3\xda\x85\x4e\x87\x33\x05\xeb\x8d\xfe\x5a\x7c\x58\x7f\x40\xf9\x93\xce\x04\x51\x17\xc4\xc1\x1d\x60\x2a\xa8\x21\xd8\x64\x1a\x22\xe5\x7b\xff\x69\x46\x09\x6b\x31\x5b\x54\xb3\x3f\x55\x9f\xbd\xd8\xf1\x75\xd5\x02\x2e\x0e\xb9\xed\x3d\xe8\x25\x26\x80\x83\x3b\xc0\xe3\x52\xef\xd1\xbb\x5c\x27\xd4\xfc\x2c\xef\x12\xaf\x98\x5d\xc7\xf8\x13\xd1\x95\xc7\xc1\x55\x3c\xa6\x3e\xba\xb7\xcf\xe1\x26\xdf\x86\x8e\x71\x06\x70\x50\x1f\x00\xc5\xba\x41\x81\xc1\x7f\x62\xdd\x9f\x90\x63\xdd\x34\x7b\x29\x44\x46\xdb\x55\x7c\xe9\xf7\xde\x12\x92\x9c\x9b\x0a\x6f\x54\xd1\xc7\x6d\x6e\x5c\x27\xa9\xbf\x66\x75\xbb\xe5\x11\xa1\xe8\x99\xad\x61\x80\x2e\x74\x9a\xa7\xdf\xf3\xc9\x52\xb8\x7b\x24\xe2\xb6\xef\x4b\x55\xcb\x94\xfc\xc9\xda\xa0\x66\xbe\xfb\x26\xda\x9a\x24\xfc\x45\x16\x0d\x45\x7c\x11\xf4\xb2\x06\xc4\xc1\x3d\xc5\x18\xe1\xe9\x69\x22\xc5\x79\xd3\x7b\xeb\x43\xc7\x85\x1b\xe8\x1c\x4d\xbe\xbe\xb2\xe5\xd6\x65\x77\xf9\xfa\x5e\x4a\x12\x96\xcc\x40\xfb\x3b\x81\x38\xb8\xa7\x87\x0c\x58\xfc\x3c\xde\xfa\xba\x3b\x3f\x3b\xd0\x9f\x3b\x6e\x62\x9b\x9e\x4c\x28\x1a\x64\xf8\xb9\x3b\x36\x04\x8e\xa0\xe4\x4d\x42\x7b\xa8\x81\x38\xb8\xa7\xea\x1e\x99\x2f\x2d\xcb\xcd\x83\x06\x2f\x65\x6d\xa0\xff\xb0\x14\xc1\xee\x9d\xe0\x7e\x65\x99\x10\x71\x73\xa7\xb0\xf1\xe5\x41\x18\xf4\x0c\x07\xe2\xe0\x9e\xca\x15\x18\x62\x47\xb5\x75\x68\xbf\x4e\x29\xbf\xb8\x95\x4b\x57\xf4\xb9\x75\xa7\xc7\x9f\x3b\xf6\xe9\x4f\x5b\x7e\xa2\x68\xa3\xca\x6b\x08\x4f\x41\x1c\xd4\xab\x00\xb1\x6e\x50\x24\xf8\xf4\x58\xf7\x40\x83\x9f\xb3\xe6\xb9\x78\x95\x29\x7e\x4a\x91\xbc\x93\xcf\xd7\xf9\x7f\x58\xcb\x60\x0a\x6b\x5c\x44\x99\x5b\xe2\xc6\x8c\x14\x6e\x44\x44\xa4\x41\x1c\x72\xac\x5b\x36\xa5\x28\x62\xfa\x9c\xb4\x99\x9b\x67\x73\xf6\x54\x8f\x97\x96\xbc\xd8\xe1\x8a\x9d\xd4\x72\xa3\xf6\x8e\x93\xfd\x27\xb1\xee\xef\x88\xca\x20\x0e\x39\xd6\xfd\x30\x26\x51\xf3\xf6\xe5\xb5\xc1\x5b\x87\xa8\xe9\x23\xdf\x1d\x74\xb5\xbe\x0c\x2b\x8c\x97\xd5\x5b\x50\x3a\x86\x8d\x5d\x65\xe1\x66\x46\x54\x06\x71\xff\x89\x75\x13\xfd\x57\xe8\x44\xf9\x04\xff\xf8\x30\xc2\x4f\xf0\xd5\xe4\x5c\x08\x95\x4b\x5b\x8b\x55\xeb\x6f\x57\xae\xc5\x41\x56\x94\xfc\xc7\xe6\x22\xf8\xa9\x50\xac\xbb\xd7\x77\xa8\x42\xad\x9f\xab\x6c\x75\x4d\xb3\x9d\x47\x6c\x17\xaf\x54\x13\x9d\x14\x55\xfa\xf1\xb3\x2f\xba\xec\x14\xbb\xcd\xc4\xd8\xff\x5e\x9e\xf4\x14\x9c\xd2\xac\xe0\x69\xa2\x52\x50\x1e\xe1\x95\xe7\xb5\x4b\x9a\x71\x30\xff\xfc\xd8\x52\xb5\xeb\x45\xf9\xd0\x97\x4f\x0e\xbb\x3a\xff\x42\x55\x4c\x8a\xd0\x58\x71\x0e\x37\x31\x39\x5d\xf3\x75\xa6\xbb\xdb\x08\x97\x5c\x7b\x5d\x23\xf9\x94\x6c\x74\xbc\xdb\x2b\x9e\x76\xa9\xfd\xdf\x8b\x75\x83\x06\x77\x4a\xac\xdb\xb4\xe7\xf3\xb3\x9d\x13\xf7\xa2\x67\x5f\xed\x77\x78\x0b\x39\x25\xe5\x50\x6a\x2e\x17\x8c\x33\xa7\xee\xdb\x14\x06\x16\x5c\xdf\xf9\xf7\xf6\xd3\x04\xe8\x1b\x97\xe7\xcb\xb4\xf0\xf8\x2e\xea\xef\x63\x2a\x0b\x53\x0f\x95\x5f\x57\xbd\x67\x4c\x36\xa1\x5a\x2c\x53\xff\x64\x49\xf1\xf0\xdf\x53\x99\xe7\x04\xf9\xbf\x8b\xd2\xc6\x55\xdd\x78\xe5\x2b\xdc\x8b\xfd\xde\xf6\xbe\x93\xc7\xac\xb9\x50\x8c\x2b\x1e\x78\x55\x13\xdb\xdb\x1c\x8a\x75\x83\x2e\xff\x4f\xac\x1b\x45\x16\xde\xcd\x1d\x75\x38\x27\xfa\x06\x9c\x37\xbf\xf9\xdc\xcd\x91\x73\xe5\xfe\x58\xbd\x6e\x8c\x12\x2a\x92\x68\xd8\xd9\x18\xb8\x8b\x62\x4e\x2c\x7b\x16\x0b\xe1\x5e\xc8\xb1\xee\xb6\xf4\xfc\xd6\x2b\x8a\xaa\x1d\x11\xab\xa2\xcf\x7a\xa9\x69\x35\x8d\x6b\xb6\x1b\x36\x4a\x17\xde\xf3\xec\x8c\x4b\xba\x92\xde\xe6\x3a\x8b\xcb\xa2\xdc\x47\xba\x6c\xa2\xa1\x23\xed\x40\x6a\xab\x7d\x7d\xbf\x94\x94\xbd\xce\x52\x6c\x49\x73\x91\xe8\xd4\xcd\xaf\x24\xd2\x16\x43\xf2\x72\x0d\x47\xeb\x67\x32\x5a\xe4\x58\x37\x0b\xa1\xb1\xe0\x5d\x77\x1d\xbe\xf6\xb6\xd6\x9b\x5d\x51\xad\xeb\xaf\x55\x04\x27\x9f\xcf\x72\xd7\xdf\xdf\x19\xe0\x30\xaf\x97\x54\x3c\x93\xd1\x3a\x23\x5d\xd6\xc2\x59\x13\x97\x14\xa7\x55\x2b\xe7\x59\xb3\x54\x10\xe7\xed\x67\x7c\x09\xe3\x85\x6f\x6b\x8d\x93\x58\x6d\x62\xc5\x31\x1e\x0c\x54\x9f\xc9\x68\x91\x63\xdd\x9e\xa2\x7b\x27\x15\x96\xc6\xc6\xc7\x9a\xd5\xf7\x1f\x8e\x8a\x79\x3e\x1d\x98\xf2\x94\x53\xfa\x40\xca\x6b\xa4\x50\x17\xe7\xdb\xad\x74\x26\xa3\x7d\x87\x74\xd9\x7a\x96\x0f\x83\xce\x92\x1b\x51\x1f\x86\xf5\xa8\x63\x1f\x85\xb0\xdd\xec\xf7\x78\xf2\x60\xf5\xe0\xc5\x9f\xed\xd4\x3b\x37\x7c\x6e\x32\x9d\xc9\x68\x91\x63\xdd\x2d\x2b\x8f\x45\x68\xc6\x4f\x4e\xea\x08\xd3\xdf\x2f\xbb\x7f\x51\x12\x0d\x61\x23\xad\xde\xc9\xf3\xff\xf1\x96\x8c\x62\x7d\xf4\x70\xe8\xcc\xa6\x43\xa0\x5f\xea\x69\xd3\x21\x53\x8d\x2c\xb7\x7c\x56\x43\x9d\x0e\x69\xe9\x45\xdb\x01\x46\xbd\xca\x2b\x66\xa3\x4f\x57\x66\xb8\x64\x84\x6c\x94\xb9\x66\xad\x3d\xa0\xe5\x36\x00\x87\x94\xdf\xc0\x14\x7b\xbb\x65\x23\xa2\x5c\x82\xa2\x8d\xd6\x51\x2e\xef\x71\x47\x44\x10\x57\x79\x6c\x8d\xbf\xb7\xd5\xb6\xff\xc7\xd7\x12\x6c\x28\xbf\x01\xe0\xe0\xd3\x21\x46\x81\x87\x6c\x39\xb3\x54\xe9\xbc\x0b\xab\x57\x3d\x03\x06\xfc\xf1\xaf\x5e\x38\x0c\xf2\x38\xe0\x9e\x44\x2d\xc3\x57\x26\x65\x84\x96\x9c\x40\x1c\xd2\xa1\x7b\xd3\x4c\x99\x4d\x3f\xb3\xb7\xf2\xf5\xa9\xc9\x9d\xd2\xb1\x7e\x70\xaf\xe1\x98\x48\x35\xee\x3c\xfe\x3a\xca\x32\xdf\xb8\x93\x38\x02\x7d\x45\x0e\xe0\x7c\x25\x51\xb0\xfe\x5d\x97\x78\x20\xf1\xb1\x29\x63\x4d\xb5\x8d\xda\x97\xc0\x37\x37\x7d\x9f\x7a\xb1\x7f\x70\xaa\x89\x2f\x5f\x89\xb2\x47\x35\x7c\x89\x5a\x45\x82\x88\x75\x83\x38\x5f\x49\x14\x3a\x2f\x6f\xbf\xff\xf4\xe7\xbf\x1d\xb6\x0e\xe8\x9a\xa7\x29\xb0\xf6\xb8\x5d\xd1\x51\xdd\x60\xe2\x8d\xe0\xf3\x18\x14\x31\x9a\xcc\x9e\x4b\x1a\x4e\xfe\xb9\x71\x81\x3a\xc4\x75\xfb\x9a\xf2\x92\xd0\x13\x16\x88\x83\x2b\x60\x3f\x35\x32\x24\x42\x59\xb1\xf5\x63\x3d\xb7\x5b\x4e\xeb\x5c\xac\xb7\x53\x89\xd7\xb7\x96\x59\x94\x7b\xdd\xf2\x74\x9e\x09\x0b\xd0\x13\x16\x88\x83\x2b\xd0\x1f\xd7\x72\x8b\xe0\x51\x86\xa6\x21\xda\x98\x49\x85\x68\xca\xb5\x55\xcd\xc6\x5c\x8d\x32\x39\xbe\x72\xc7\x8c\x85\xbb\x62\x8e\xc7\x88\xba\x20\x0e\xae\x40\xf6\xc6\x21\xc6\xcf\xd8\x79\x8b\xd1\x0f\x18\xfa\x63\x5d\xca\x06\x4b\xd2\x5b\x7d\xad\x0f\xee\x6d\x2c\xcf\x7e\xa0\xb1\x7c\x71\x19\xda\xa4\x02\xc4\xc1\x15\xf8\x31\xed\x1a\xba\x73\x4d\x98\xb3\x4d\x4c\x7f\x9d\xe7\x4f\x8e\xb8\x86\x1b\xda\xd6\xcf\x3b\x64\x6d\xed\x8d\xb6\xd2\xc4\xbc\xb9\xe7\x11\x33\x62\x10\xf7\x8f\x02\xff\x73\xb3\xfc\x8b\x03\xa0\x5b\xd8\x69\x0e\x84\x7e\xbd\x99\xa6\xdc\xa5\x69\xaf\xb5\xbc\x7e\x8c\xfe\x47\xea\xc3\x0f\x8e\x40\x62\xf5\x0d\x0f\x9d\x23\xae\xf9\xf2\xde\xad\xfd\x78\xc4\xd8\x41\x1c\xdc\x01\xca\x48\x2d\xbb\x3c\xbe\x5b\x49\xf7\x3a\x5f\x76\x16\x61\xa1\xdc\x71\x75\xc2\xee\xef\xf3\xa7\x7a\x55\x90\x1c\x47\xca\x6a\x8e\x51\x83\xa8\x0b\xe2\xe0\x0e\x44\x5e\x5a\x90\x17\x95\x0a\x7e\x22\xda\xe6\x62\xbe\x33\xea\xa1\xe7\xb7\x7e\x2f\xa9\x18\x37\xb3\xdc\xfb\xc2\x9c\x53\xe1\x89\x38\x74\x5e\x32\x88\x83\x3b\x50\x21\x4d\xf0\xe0\xc5\x62\xa6\xc8\xf1\x2d\x43\x42\x57\x99\x0d\xbf\x4e\x96\x42\xff\x8a\x30\x82\x08\x09\x7f\x0d\x03\x0f\xaf\x78\x27\x28\xde\x0e\xe0\xe0\x0e\x28\x2c\x8c\xa3\x36\xaa\x30\x9b\x1f\x28\x14\x5c\x5b\x20\x5f\x1f\x61\xe0\xe5\xe0\xde\xbb\xe9\xf7\x4b\x7e\x47\xdb\xfe\xab\x12\x1d\xb4\x43\x2b\x88\x43\x38\xf0\x9f\x99\xcb\x5f\x1c\x00\xcd\x27\x4e\x73\x20\x76\xaa\x12\xab\xea\x3b\x09\x0d\xb5\x16\x1e\x76\x61\x34\xa9\x51\xb3\xf1\xf9\x90\x82\x0d\xb3\x54\x27\xc3\xb2\x23\xfd\xaa\x1b\x5d\x88\xb1\x83\x38\xb8\x03\x96\x4f\x19\x75\x24\x3d\xd5\x0f\xab\x7c\x9c\xc9\xcc\x5c\xa3\xb8\x51\xf3\x4e\xba\x9c\x35\x3a\xbd\x58\x17\x8b\x69\x6f\xc4\x17\x77\x22\xea\x82\x38\xb8\x03\x95\x7c\xe4\xe5\xe3\xea\x77\xf9\xbe\x89\x39\x3d\x71\x7e\x83\x7f\x7b\x9b\x33\xec\xab\xd8\x40\x10\xe3\x79\xc2\xf5\xe2\xaf\x18\x93\xe3\x88\xba\x20\x0e\xee\xc0\xbc\x58\x49\xd4\x6d\x32\x73\xca\xa3\x29\xfa\xd7\xcb\x5b\x6f\x1a\x45\x37\x28\xe9\x3f\x7c\xc8\x0c\x44\x8f\xde\x63\xa4\x29\x56\x84\x76\xe9\x05\x71\x70\x07\x2c\x3e\x76\xab\x1f\x58\xde\xd7\x5e\xbf\x83\x5a\x41\xfa\x1b\x37\xff\x4e\xa2\xb1\x09\x99\xa2\x5a\xb8\xd0\xa3\x0c\xdc\x3b\xe1\x9e\xd3\x08\x07\x40\x1c\xd4\x07\x00\xb1\x6e\xd0\xe4\xee\x34\x07\x36\x73\x74\x95\xe5\xe3\x8b\x1c\x25\x27\xbe\x92\x68\xf3\xc8\xbd\xe6\x66\xe8\x7c\xac\x55\xd9\x23\xd3\xa5\xbe\x7a\xeb\x5d\xcf\x26\xf4\x56\x0f\xc4\xc1\x1d\xf8\xf0\xeb\xfe\x25\x8e\xca\x64\x61\x1b\x8f\x80\x64\x8e\x4a\xa7\xc1\x72\xe9\xa6\x63\x5d\x8e\xe4\x0b\x65\xf3\xcc\x68\xb7\x95\x8d\xb2\x10\x75\x41\x1c\xdc\x01\xaa\x73\x92\x74\xb2\x66\x4a\x0d\xd4\x2c\x7d\xaf\xd6\x0e\xd4\x51\x57\x3e\xd6\x6e\x3c\xe1\x94\xc5\x23\xbc\x44\x3e\x93\x1f\x65\xbc\x84\xa8\x0b\xe2\x90\x3e\x7a\xe7\x7e\xdb\x26\xf9\xa8\x35\xdb\x46\xf3\x4b\xa7\x13\xf6\xc8\x3b\x6a\x52\xf9\x00\xaf\xc7\xc2\xc4\xfb\xbf\xe2\x1e\xb8\x30\xe7\x43\x3b\xb6\x83\x38\xb8\x03\xce\x2a\xd3\x0f\xbb\x03\x2f\x77\x91\xea\xb2\x58\xe3\xd7\x8d\x06\x38\xba\x91\xcd\x10\x87\xd3\x8a\xb8\xc9\xf3\x17\x29\x38\xb3\x5f\x47\x38\x00\xe2\xa0\x3e\xe0\xfc\x77\x07\x40\x33\xed\xd3\x1c\xb8\xa6\x69\x38\xb9\x25\xed\x2a\xe4\xf6\x55\xad\xbc\x52\x41\x93\xf0\xc9\x75\x8c\xda\x4d\x01\xbc\x97\x23\xb4\xa9\xf4\x17\x16\x7e\x42\x3b\x2a\x83\x38\xb8\x03\x7f\xd6\xf4\x2d\xe2\xf1\xce\xfd\x18\xda\xc2\x37\x50\x5a\xc4\xa2\xa8\x2a\xaf\x4a\xc5\xbc\x11\x29\xef\xe2\xf0\xac\x67\xee\x99\xc2\x67\x68\x63\x2d\x00\x87\x14\xed\x27\xc4\xf4\x29\xbb\x15\x18\x90\xfd\xc3\x3a\xa9\xfc\x65\xfa\x37\xfd\x5e\xd3\xaf\xb9\xd2\x98\xd1\xfc\xd8\xa3\x14\xeb\x22\xb3\x4c\x50\xb4\x1f\xc0\xc1\x1d\x48\x4b\xd0\x7f\xca\xca\xd5\x8c\xd5\x7b\xbf\xf2\x77\x89\x01\xff\xc0\xd1\x35\x31\xfe\x75\xfd\x84\xf0\xca\x20\xa9\x5b\x83\x61\xcb\xd0\x86\x80\x20\x0e\xee\x40\x34\x8e\xab\x07\x6d\xfd\x95\xb7\x78\x6b\x12\x5e\xfb\xe2\x0c\x1f\x06\xb2\x0e\x49\x34\x8f\x1a\x7f\x53\xaa\xfb\x33\x98\xbb\x55\xdb\x20\x1c\x00\x71\x50\x1f\x00\xc4\xba\x41\x8f\x3d\xa7\x39\x30\xb0\xca\xb9\x4e\xf7\x23\x48\x8e\xf4\x9b\xfa\x17\xa9\xfa\x1a\x94\x19\xe9\x9a\xf4\xa1\x9c\x63\xbb\x4f\x7b\x24\x1f\xf5\xd7\x7f\x41\x67\x59\x82\x38\xb8\x03\xe1\x01\x01\xdb\x31\x29\x7b\xe3\xcc\x99\x94\xaa\xc7\xd2\x1f\xf1\xdf\x90\x6b\xbd\xd5\x9d\x1e\x2b\x57\x28\xc8\x66\x23\xe3\xa9\x0b\x40\xd4\x05\x71\x70\x07\x02\x09\xb9\x8d\x4b\xaf\x6d\x09\xd8\x93\xa8\xf3\x28\x93\xe0\xa6\xee\xcb\xfa\x71\xdd\xd8\xf2\x6b\x0e\xf4\xd8\x5a\xba\x51\x1e\x06\x6d\x52\x01\xe2\x90\x56\xf3\xa5\xe4\x26\x63\x64\xe6\x68\xb5\x99\x9c\xad\xce\x57\xc6\x31\x3d\x58\x99\x27\x19\xe6\x98\x53\xbd\x76\xd0\xfc\xf3\xa0\xe4\x06\x1e\xb4\x9a\x0f\xe0\xe0\x0e\x54\x08\xbd\xd2\x7e\x7e\x6e\x91\x7c\x93\x84\x11\x8d\x97\xb5\x22\x4d\x56\xc0\x2e\xd3\x5a\x96\xef\xd1\x25\xbf\xad\xf5\xe6\xf3\x92\xd0\x9b\x5d\x10\x07\xf5\x81\x77\x7f\x77\x00\xf4\x0c\x7a\x9a\x03\x6d\x62\x61\xe8\x25\x3b\xb6\x8b\x92\x7e\xc3\xdf\x37\x87\xae\xcc\xd3\x8e\xaa\x70\x3a\x4f\xf6\x90\x6d\xea\xdd\xcd\x53\xd0\x76\xaf\x43\x8c\x1d\xc4\xc1\x1d\xa0\x7d\xf7\xe0\xd1\xa3\x2a\xf5\x0f\xb5\x2f\x07\x64\x82\x08\x6c\x29\xa6\x1d\x48\x6d\x53\x22\x09\xfa\xa4\xcb\x94\xb9\xb2\x62\xd3\xda\x11\x75\x41\x1c\xdc\x01\x0c\x1c\xe6\x11\x4e\x31\x41\x1c\xbe\x95\x43\x76\xc5\x3f\x8f\x58\xa8\x26\x1f\x2c\xa5\x34\x2f\x5f\xb7\x4d\x73\x27\x77\x1b\xcf\x86\xbe\xcc\x05\x71\x70\x07\x1e\x2b\x08\x68\x5d\xa1\xd4\xf2\x4f\x24\xda\x33\xa8\x94\xee\x13\x3b\x3e\x4e\x17\xb0\x60\x8c\x3d\x11\x63\xed\x7d\xfc\xe3\x67\x31\xf4\x85\x32\x88\x83\x3b\xb0\x10\xa9\xac\x18\xd2\xd5\xe5\xac\x8f\xc2\xf7\x35\x2f\x06\x43\xe4\x12\xcd\xdd\x6a\xb5\xed\xe5\x5a\x4f\x7c\x52\x63\xd6\x5a\xac\x05\x84\x03\x20\x0e\xea\x03\xa0\x58\x37\x68\x59\xf1\x9f\x58\x37\xca\x20\xd2\x12\x46\x98\xb0\xd2\xfa\xfb\x27\x95\xe4\xae\x77\xf3\xb1\x6e\xfc\x7f\x98\xfb\xeb\xa8\xac\x9a\xb8\x8f\x1b\xa5\x43\xba\x41\x10\x30\x10\x44\x42\x90\x06\xe9\x90\xee\x94\x46\x42\x4a\x44\x90\x90\x2e\x83\xee\x10\xa4\x41\x40\xa4\x1b\x49\x01\x95\x46\x1a\x44\x40\x4a\xa5\x91\x12\x84\xb3\xd6\xf3\xde\xd7\x3e\xf7\xb3\x2f\xd6\x3d\xef\x59\x8b\xb5\xce\xf3\xff\x67\xcd\x66\x36\x9f\xeb\xb7\x67\xcf\xfe\xce\x8c\x64\xb2\xfb\x50\xc2\x1b\x9a\xad\x6e\x87\xc1\x92\x05\x3a\x7b\x6e\x12\xba\xa2\x73\x99\x39\x41\x8e\x75\x3f\x6b\x71\xe0\x90\xa0\x42\x21\xa2\xe2\x88\xbe\x6c\xbe\xa2\xeb\xc0\x23\xa7\xb5\x77\x1c\x91\x33\x64\xdf\xc8\x81\xc3\xfd\x97\xf3\x5c\x76\x94\x40\x39\x46\xba\x2c\x6b\xfc\x3c\xda\x3c\x16\xed\xeb\x1f\x3f\xb2\xa8\x72\x53\xd5\xd2\xef\x5b\x64\x53\xe9\xab\x65\xbd\xe4\xf4\x74\x9f\x9a\x79\xb8\x77\x2e\x7b\x93\xfb\x21\xc7\xba\x2b\xd6\x87\x28\x38\xf7\x70\x5e\xc6\xec\x29\x12\xe1\xf9\x5d\xc2\xe0\x7e\x15\x68\x23\x76\x77\xd9\x50\x71\x55\xaa\xb8\xc4\xa8\xb8\xf6\x5c\x7a\x7b\x1b\xe9\xb2\x26\x6c\xeb\x98\xad\x4a\xa9\xaf\xea\x9f\x93\x26\xcd\xde\x94\xdd\x5f\x12\xfa\x6d\x46\x5e\xef\x26\xb7\xcd\x23\x8b\x39\x37\x55\x27\x7c\x2e\xbd\x45\x8e\x75\x3b\x7e\xc6\x21\x13\x74\x9d\x60\xaa\x3f\xca\xa4\xd2\x95\x1f\x26\x12\xc4\xc3\x13\xfb\x30\x37\x2a\xd3\xa3\x63\xd8\xa8\xa1\xfc\xa4\xf2\x5c\x7a\x6b\x80\x74\xd9\xed\xdf\x6f\xe2\x06\x98\x54\x53\x0a\x3d\x52\x85\x8b\x2d\x2d\x6f\xbd\xd4\x71\xf1\x0f\x50\xc6\xfc\xab\x31\x14\x65\xf4\xfc\x23\xa6\xdf\xb9\xf4\x16\x39\xd6\xad\xe6\xf0\x37\xfb\x66\xc4\x70\xce\x7c\xa8\xd4\x94\xa7\x63\xb9\xf8\xed\xed\xcc\xcc\x8e\x59\x3e\x87\x0c\x21\x26\xc6\x5e\x69\xb9\xa6\x73\x9b\x03\x04\xfd\x52\xcf\x2a\xf4\x73\x07\x7b\x9c\x09\xab\xc7\x84\xbc\xd1\xeb\x78\xd5\xa9\xf4\x4f\x16\x1e\xdb\x5f\x53\x0e\x19\xcf\xd0\x8e\x62\xc1\x2e\x5f\x33\x87\xe6\xea\x40\x1c\xbc\xd0\xfb\xc9\x3c\xb5\xdd\xcd\x29\x34\x09\x7c\x79\xba\x6a\xbc\xfb\x39\x38\xdc\xea\x7d\x63\x75\xdf\xe1\x93\xc5\x4b\x6a\xf8\x6c\x64\x42\x26\x88\x76\x41\x1c\xd2\xcb\x7f\x67\xb6\xa3\x7a\x0e\xe3\x7b\x97\x43\xfb\x40\xfe\x5f\x1c\xdd\xe6\xf1\xfb\x97\xe8\xcd\x9b\xab\xd4\x27\xfe\x16\x3c\x28\xb3\x83\x8e\x91\x00\x71\x48\x9f\x44\x0d\xc7\x13\x1a\x9e\x60\x62\x54\xe5\xdb\x30\xa4\xe1\x47\xf6\x50\x94\xb0\x71\x6f\x54\x1e\x67\x98\xdc\x53\xd2\x13\x23\x92\x81\xd6\x07\x82\x38\x78\xa1\x7f\x49\x1f\xd3\x97\x8b\xde\xe7\x6c\xf3\x66\xdd\x66\x2d\xa6\xe8\x98\x98\xc4\xf3\x4b\x6e\xf8\x50\xa2\x55\x12\x09\x06\x7d\x3b\x2b\x1e\xa2\xd0\x83\x38\xe8\x61\x3f\xf2\xdf\x0f\x7b\x50\xd9\x3c\xcb\x01\xcc\xdc\xca\xf0\x8a\x6e\x1a\xaf\x8a\xef\xf7\xe8\xf9\xae\x89\x89\x52\x36\x7c\x9e\xb7\xb2\xcc\xe0\xd9\xef\x5c\xf3\x2c\x6d\x4b\x22\x81\x1e\x9e\x00\x0e\xee\xc0\x6b\xee\x64\xd4\xbe\x67\x84\x06\x7b\xe4\x94\xac\x73\xd3\xbf\xe7\x2e\xbb\x3e\xf9\xf9\x78\x1c\x2f\xaa\x7d\x48\xb2\x4e\x7f\x72\x1e\xda\x51\x19\xc4\xc1\x1d\xe0\x5e\x17\xc5\x2b\x64\x1a\x62\xb2\x7c\x3c\xe5\xae\x5c\x94\xa5\x6a\xd5\x39\xe4\x5b\x44\xbe\xeb\xe0\xe9\x78\x9f\xfd\xea\xe8\x36\x14\xe9\x05\x71\x70\x07\x08\x63\x79\xe5\x44\xcc\x27\x34\x62\x82\x87\xb6\x9e\x84\x76\xf5\x9e\x7e\x7a\xc1\xa5\xe7\x13\x8b\x85\x93\x7a\xe9\x0d\x45\xfb\x96\x20\xa2\x5d\x10\x07\x77\x80\x02\x6b\xb7\x82\x3e\x20\x8b\xf3\x45\x31\xb3\x8a\xed\x75\x72\x8d\x46\x2a\xfd\x65\xad\x7b\x1d\x27\xe2\xfe\x2c\x3e\x3a\xaa\xe3\x13\x08\x07\x40\x1c\xf4\xb0\x07\xc4\xba\x41\xcf\xb0\xb3\x1c\x60\xf6\xa1\x09\xbf\x46\x2c\x90\xe0\x52\x37\xec\x5b\x8b\x52\xdf\xff\xb3\x93\x3e\xf8\x86\xa3\xfe\xa6\x49\x74\x0b\x93\x9e\x24\x99\x28\xa2\xef\x20\x0e\xee\x80\x94\xa8\xf6\xb5\x38\x22\x23\x93\x7e\x2b\x67\xff\xca\x93\xa7\xf5\x37\xef\x7d\xbb\x4a\x9a\x24\xba\xf9\x6d\x63\x78\xf7\x52\xbf\x29\xb4\x03\x34\x88\x83\x3b\x10\x70\xa1\xce\x6d\x85\xf2\x84\xc0\xab\x20\xd6\x4f\x53\x26\xed\xea\xd8\x04\x61\xc0\x83\x17\x41\x27\x3d\xad\x01\xa8\xf3\xa9\x18\xd0\xe4\x22\x88\x43\x9a\x00\x7a\xd3\x77\x93\xcd\x9a\xba\xf6\x66\x19\xfe\x07\x9b\xa3\xa5\x4b\xbc\x47\xdf\x2c\xd4\x0c\xba\x8d\x37\xfd\xef\x4c\xd2\x18\x3d\x85\x96\x8d\x80\x38\xa4\x09\x20\xf4\x12\x1d\x43\x86\x46\x55\xef\x2b\xef\xd2\xb4\x30\xc6\x68\xc4\xaa\x1f\x25\x5c\xbf\x8a\x8e\x1e\x89\x72\x81\x21\x6c\xf1\x44\x12\x9a\x00\x02\x70\x50\x1d\x38\xfe\x6f\x07\x40\x03\x8a\x33\x8f\x6b\xb3\xe2\x27\x37\xcc\x79\x2e\x46\x34\xd1\x43\xdd\xa1\xa1\x1c\x19\xdd\xcf\x63\xc7\x22\xe7\xcc\xe2\x16\x53\xec\xf1\x36\x9f\x3f\x04\xd1\x77\x10\x07\x77\x20\x0d\x77\x0e\xab\x8c\xbd\xcf\xb9\x20\x5d\x63\x1b\xef\x88\x81\xa1\xb1\x5d\xab\xf0\xfa\x50\x76\xee\x2a\x43\x6b\x13\xa5\x99\xd5\x09\xb4\x46\x1a\xc0\xc1\x1d\x78\xd3\xab\xac\x63\x73\x51\xf1\xc5\x04\x9b\x08\x0e\xbd\x81\xbb\x8c\xc9\xd8\xd7\x34\x2a\xff\xeb\x94\xbd\xc1\xa4\x4f\x7a\x2a\x3d\x0c\x10\xed\x82\x38\xb8\x03\xa7\x2a\xf9\x22\xf2\xb6\x8a\x1a\xeb\x5d\x6c\x3d\x35\xeb\x26\xa4\x1e\xf8\xeb\xa9\xf3\xf1\xea\xc7\x42\x54\x5a\x6a\x9f\x1b\x68\xa2\x10\xed\x82\x38\xb8\x03\xe5\x97\x1c\xdb\xd8\x6d\xbe\xce\xbc\xb8\xc7\x85\xf1\x6a\x67\x9c\xc0\xbb\x62\x26\x2a\xfb\x51\xa5\xdf\xc4\xd7\x05\xd2\x46\x56\x7e\x76\x84\x03\x20\x0e\xaa\x03\x80\x58\x37\x68\x74\x77\xe6\x4e\xcd\xd8\x62\xe8\xc9\x65\xe9\x57\x66\xb8\xda\x74\x87\xcd\x89\x4d\xa5\x12\x52\xcd\xb2\x82\xd8\x9e\xae\xf9\x8e\x66\xb9\xd8\xb0\xe9\x41\xf7\x14\xc0\xc1\x1d\x10\x36\xa7\x17\xe6\xd5\x90\xe8\xf3\xce\x9a\xab\xc3\x66\xb9\x43\xde\x87\x8a\x3b\x33\xf5\x87\xfb\x71\xc4\x34\xfe\x55\x26\xfe\xc4\x62\x44\xbb\x20\x0e\xee\xc0\x42\x40\xf9\x4d\x73\xb5\xfb\xcf\x34\x2e\xc4\x14\x7f\x40\x93\x25\x6c\x1c\xdd\x2e\x62\x7c\x9f\xdb\x22\x1f\x88\xe6\x17\x21\xb4\x20\x00\xed\x45\x01\xe0\xe0\x0e\x68\x1f\x85\x49\x1a\xbe\xac\x6f\x12\xdd\xf8\xfc\x34\xf8\x36\x77\xee\x9f\x65\xbe\xa0\x23\x9e\x32\x52\x62\x5f\x3d\xa3\xe9\xf1\xf7\xda\xd0\xd2\x21\x00\x07\x77\x80\xa3\xb6\xcb\xcf\x3e\x56\x4d\xa3\xe6\xd7\x24\x6d\x16\xa5\xc8\xac\xe3\xdf\xe8\x5a\x53\x1d\x71\xe9\xe5\x3e\xbc\x58\x82\xfa\xb6\x46\x84\x03\x20\x0e\xaa\x03\xb7\xff\xdb\x01\xd0\x50\xfb\x2c\x07\xb4\x45\x0c\x47\x62\xeb\x35\x4e\xcc\xfe\x88\xb8\x5f\xfc\x6b\x79\xeb\x30\x05\x9d\x9e\xa0\xd7\x8e\xaf\x60\x6e\xfc\x39\xb1\x33\x89\x03\xd4\x77\x00\x07\x77\x00\x8f\xe8\x27\xf1\x11\x96\x06\xbd\x52\x1a\xe5\x10\x59\x58\xf6\x33\xd9\x0b\xa5\x71\x74\x5b\xa5\xf7\x9c\x3e\x0c\x04\x85\xf9\xe1\x1a\x23\xda\x05\x71\x70\x07\x64\xf2\x86\x2a\x79\xd7\x89\x98\x3d\xc2\x37\x77\xbc\x6d\xf6\xbd\xf4\xe4\x79\xaf\x34\x1e\xf3\x29\x57\xbe\xdb\xdd\xe0\xae\x5c\x87\x76\xed\x07\x71\x70\x07\xf8\xad\x54\xc8\xff\x0a\xef\x92\xbf\x62\x9f\xa1\x1e\xb8\xc8\x37\xd1\x66\x22\xc5\x1a\xbc\x61\x24\x4d\x68\x5d\x27\xa2\xf5\xf1\x13\xf4\x31\x00\xc4\xc1\x1d\x40\xb3\xf6\x51\xd9\xdc\xa4\xb8\x70\x5a\x66\xf4\x65\x9e\x34\xd8\xa0\xd4\xd6\xb3\xda\xaf\xa7\x5f\xde\x47\x8a\x42\x2d\xc7\x93\xd7\x0d\xe1\x00\x88\x83\xea\x00\x20\xd6\x0d\x7a\xef\x39\xcb\x81\xdf\xba\x33\x1c\x0e\x96\x5e\x52\xc6\x32\xc5\x6f\x32\xc5\xf7\xa5\x72\x83\x6e\x64\xed\x0c\x12\x14\xd2\xf9\xcc\xe8\x6c\xa0\xff\xc2\x41\xf4\x1d\xc4\xc1\x1d\x68\x22\x2a\xf1\x19\x8a\xf1\xb6\x5a\xc3\x95\x21\x37\x42\xf7\x93\xb7\x63\xc7\x74\xdb\x5f\x93\x24\xa6\x48\xd7\x52\xc8\x2b\x52\x23\x42\xb4\x0b\xe2\xe0\x0e\x7c\x17\x1e\xdc\xf1\x5e\x9b\xf8\xbc\x42\x9c\x38\xff\x81\xf0\x4d\x00\x07\x97\xa9\x9c\xaa\x61\x20\xa3\x2f\x5e\x72\xcc\xed\x5a\xe1\x55\x44\xbb\x20\x0e\xe9\xc3\x30\x0e\xc5\x0d\xa1\x1b\x65\x03\x05\x59\xb9\x58\x0a\x27\x0b\x52\x0f\xf7\x8d\x08\x7c\x99\xc3\xf2\x15\x23\x2a\xd6\xd9\x2e\x98\xde\x85\x3e\x0c\x03\x38\xb8\x03\xfd\xda\x4a\x93\x18\x38\x64\xa4\x62\xd3\xcb\x72\x2d\x3f\x39\x48\x7e\xdd\x7f\x29\xe4\x99\xaa\xa0\xf1\x81\x5e\x68\x70\xbb\xf7\x64\x1c\xe1\x00\x88\x83\xea\x80\xc1\x7f\x3b\x00\x7a\x09\x3d\xcb\x81\xe3\xe1\xd9\x07\x24\x95\xbc\x72\xdc\x23\x03\xef\x9e\x7e\x50\xd6\xdd\x64\x75\xf6\x7a\x44\xe2\xec\xc5\x5f\xd9\x8f\xe1\x9f\x8c\x05\xc5\x44\x41\x1c\xdc\x01\xd9\x5e\x3b\x5b\xff\xef\x66\x15\x22\x4e\x54\xa3\xf5\xc7\xba\x03\xdc\x24\xa1\x9f\xae\xdd\xa4\xce\x3c\xc8\x5a\x79\x5f\x4a\x84\x0d\x3d\x0b\x40\x1c\x92\x03\xa4\x47\xa9\xbc\xe9\x0b\xab\x3c\x8a\x66\x7e\x13\xe1\xe9\x1b\xc3\x3e\x18\x62\x7a\x73\x07\x73\x78\x4b\x1f\x1b\x8d\x0f\x42\xa1\xd3\xe7\x41\x1c\xd2\x72\xcf\xd6\x74\x9b\xe0\xe8\xb1\x9f\x36\xf7\x1b\x4e\xbe\x3c\x16\x69\x30\xf3\xd4\x08\xfe\x6c\xf0\xa9\xb0\x8e\xd4\x65\xce\x59\xee\x04\x0d\x5a\xee\x09\xe0\xe0\x0e\xd4\xe9\x46\x5a\xf5\x8c\xea\xbc\xda\xef\xb5\xbc\xdb\xa9\xf1\xe7\xe0\x2d\x73\x1b\xf6\x7c\x7b\x7d\x9a\x4e\x2d\xc1\xb3\x1b\x52\x23\x6b\x08\x07\x40\x1c\x54\x07\x40\xb1\x6e\x50\x60\xf0\x9f\x58\x37\x4a\x34\xd2\x1c\x46\x31\xfe\xb5\x66\xa2\xe9\xc4\x22\x22\x3b\xc7\x52\x39\x19\x8a\x3e\xb1\x9d\xb1\xd6\xb4\x4d\xac\x52\x15\xf1\x95\x38\xd7\xcd\x2f\x93\xe7\x36\x87\x01\xba\xd0\x59\x9e\xbe\xf8\xa3\x5b\x7c\x33\x90\x49\x7f\xd2\x6a\xc2\x37\x53\xe3\xa0\xd4\xbc\xc8\xc7\xf8\xfb\xa1\xcb\x98\x6b\x0a\xce\x2c\xf3\x38\xf7\x0f\xc4\xff\x07\xc4\xc1\x3d\xc5\xd6\xb1\x2e\x79\x1f\xd1\x2f\xab\x35\xe8\x32\xb2\xdb\x9a\xd9\x8d\xca\x41\x44\x85\x53\x63\x78\x2a\x38\xbd\x30\x76\xeb\xad\x27\x14\x62\x01\x71\x70\x4f\x8d\x27\x27\xf5\x35\xb8\x43\x44\x4b\xcb\x36\x6f\xe3\x48\xff\x1a\xd8\xa3\x88\x36\xd6\x46\xb3\x59\x8d\x95\x67\x8e\xfc\x6a\xe5\x0e\x3d\xaf\x40\x1c\xdc\x53\x71\xae\x3a\x07\x7f\xe3\x17\xc5\x8f\xf7\x8f\x6e\xbf\x1c\x6e\x6f\x29\x08\x89\x79\xf8\x5e\xb7\x3b\x48\xa4\xa8\x96\xc1\xd4\xce\x0e\x3a\xbe\x18\xc4\xc1\x3d\x15\x59\xe9\xf3\xeb\x55\xe3\x74\xbb\x67\xaa\x3e\x43\x57\x90\xbc\x1c\x7b\x03\x27\x29\xa7\x67\xa8\xf0\xed\xd4\x89\xad\x8b\x45\x5f\x08\xc2\x53\x10\x07\xd5\xaa\xe8\xff\x8e\x75\x83\x22\xc1\x67\xc7\xba\x4d\x5e\x26\xde\x56\xfe\x7d\xbf\xee\x02\xfe\x14\xe7\xf1\xcf\xeb\x38\x1a\xdb\x8b\x91\x5f\x54\x67\xf9\xfc\xc4\xe2\xbf\xed\xd3\x5b\xa1\x23\x22\xd2\x20\x0e\x39\xd6\xad\x69\x30\x6e\x23\xbf\x21\x1f\x85\x4d\x48\xa5\x8f\x2f\x34\xe1\xf8\x62\xd4\xc5\x19\x55\x8c\x6f\x8e\xc1\xa1\x79\xe7\x08\x97\xe1\x08\xd1\x32\x88\x43\x8e\x75\xd3\x08\xb2\xf1\x75\xaf\xc5\x8d\xd7\x62\xa6\xf9\x9a\x29\xd9\xfd\xa8\x9a\xd3\xc6\x7b\x28\x56\x15\x4f\x74\x58\x56\x33\x57\xb3\x77\x01\xd1\x32\x88\xfb\x9f\x58\x37\xe3\xbf\x5b\xf6\x9d\x36\x0e\x08\x2a\x13\x46\x1f\x8c\xdd\x62\x35\x5a\xfc\x4d\x1f\x36\x6e\xc4\x72\xb7\xe5\xad\xe2\x41\xe9\xde\x72\x23\xfd\x2a\xbe\x5f\xf0\x3f\xb1\xee\x75\x6b\x4d\x8a\x82\x9e\x06\xb3\x3b\x9f\xa4\x46\xb5\xf6\x7e\xd7\x1a\xdd\xe4\xcc\x4f\xcd\x3d\xa8\xc5\xce\x2d\xd8\x9f\xeb\x62\x4e\xf9\xff\x65\xd7\x89\x7f\xcf\x29\x29\xcf\xf5\xa2\xb7\xb8\xd0\xaf\x3e\xd8\x51\x28\x3a\xe9\x60\xb8\x5f\x81\xd1\x8e\x9d\xbb\xdb\x54\x67\x39\xa1\x5a\x1f\x3d\x31\x2b\x2e\xfe\x3f\xff\xf1\x7f\xff\x2a\xfe\xff\x12\xea\xe6\xfe\x7f\xf7\xe7\x06\x61\xa2\xa0\xfc\xcf\x4d\x46\xf1\x83\x02\xf1\xea\x3b\x8d\xb4\x11\x68\xaa\x44\x0c\xc1\x57\x2c\x57\xf0\x3c\x34\xd6\x64\xe5\xaf\x98\x14\xdf\x52\xa9\xaa\xd9\xff\x90\xa0\xfb\xe2\xc5\xbf\xef\xdc\x9b\x5b\x74\xb3\x35\xdf\x4d\xac\x8d\x2b\x30\x23\x1c\xf2\x1b\xaa\x8a\xee\x0c\x4c\x36\xce\xb7\x6d\x0b\xd6\x59\x8b\xd4\x75\x7f\xfb\xf7\x41\x91\x29\x56\x25\x61\xa7\x35\x98\x4a\x0d\x06\x0f\xa3\xbb\x9f\x89\x6f\xd2\xd5\xf1\x5d\x08\xde\x2f\xa0\xb9\xd6\xaf\xa4\xf4\x9e\xfa\xcd\xfb\xff\x7b\x81\x78\x50\xe7\xce\x08\xc4\x97\xfe\x9e\xc7\x1f\x7f\x45\x3a\xad\xf9\xe8\x3b\xfb\xb3\x0a\xfd\x4f\x94\x12\x06\xb5\xaf\x0c\x4a\x6f\x15\xe5\xae\x6c\x51\x4b\x45\xfe\x3b\x17\x9b\xd9\xce\xda\x28\xcb\xf9\xe8\xca\xd8\x87\xcb\x45\xc1\x54\x93\x44\xbe\xe6\x97\x7e\x0c\x66\x3d\x41\x49\xee\xba\x20\x10\xf6\xe6\xce\xbf\x6f\x9d\x48\x7a\x52\x92\x38\xbf\x5c\xc3\xec\xa7\x5a\x79\x7b\x96\x85\x7b\x35\x7a\x26\x98\x57\xda\xa6\x58\x58\x05\xe7\x9f\x10\x5c\x93\x28\x85\x02\xf1\xa0\xcb\xff\x13\x88\x17\x47\x0a\xc4\xd3\xb4\x13\x90\xf2\xbd\x7b\xa6\x3f\x2f\xcb\x37\x7b\x23\x37\xb4\x55\x30\xe9\x01\xda\x27\x56\x5f\x91\xfc\xeb\x05\x6d\x0b\xcf\xb6\x0d\xce\xe3\x13\x42\x0b\x72\x20\x7e\xbb\xfb\x35\x6d\xe2\xcd\x58\xba\x2e\x61\x91\x57\x3c\x28\x81\x61\xef\x30\x6f\xc4\xaa\xa1\x5c\xc3\x47\xd9\xc7\xd2\x1e\xbe\x14\x9e\x77\x1e\x97\x15\x47\x0e\xc4\x13\xce\xbf\x50\x3b\xbc\xc1\x3f\x9a\x46\xb3\xeb\x19\x39\x7b\x0b\x97\xf7\x30\x75\x3e\x9d\xf2\x8e\x6a\x61\xe0\x13\x8d\xe4\xe7\xda\xec\xe7\xd2\x5b\xe4\x40\x3c\xbe\x61\xbb\xc4\x4d\xb3\xbb\xbd\xb2\x12\x3b\x1d\x22\x7e\xd5\x11\x3c\x56\xc6\x6c\x13\x2c\x22\xa6\x31\xda\xc3\x5f\xf1\x23\x29\xfa\xcf\xa5\xb7\xc8\x81\x78\xc7\xcb\x6f\xd6\x71\x57\x2a\x1f\x79\xec\x64\xc7\x51\x3c\xb4\x62\xd0\x34\xe7\x99\xc6\x67\x17\xb7\xcf\xa3\x97\x55\xc7\xb7\xe6\x90\x3d\x97\xde\x22\x07\xe2\x8b\x68\xa2\x04\x4a\xcd\x8b\x55\xea\x97\x87\x56\x59\x54\x54\x25\x6f\x87\xba\x97\x56\xa8\x32\x6b\xfe\xb2\x93\x60\xd2\x2d\x21\x7f\x77\x2e\xbd\x45\x0e\xc4\xd3\x3c\x63\x5c\xda\xa0\x1e\xda\xef\x5c\x33\xe6\x23\x74\x50\xfc\x59\x9f\x81\xb7\xc9\xbe\x71\xf5\xd6\x27\xf7\x96\x00\x45\x25\x83\x5b\xe7\xd2\x5b\xe4\x40\xfc\xb1\xd9\x07\xeb\xbc\xc2\x64\xcc\xf4\x57\x2c\x19\x2d\x3f\xfe\x52\x8a\x2f\x73\x4a\x75\x5f\x33\xe4\xf1\xae\xff\x30\x3b\x24\x71\x8a\x73\x6e\x03\x49\xd0\x2f\xf5\xac\x81\x64\x8f\xc7\x5a\x15\xc9\xc5\x7b\xf1\x7b\x23\x78\xd1\x55\x66\xcb\x0b\x39\x3b\x8b\xd1\x64\x72\x0a\xd1\x7e\x8b\x33\xec\x8d\xa9\x6d\xd0\x59\xe2\x20\x0e\x3e\x90\x8c\xe7\x9f\xd4\xa2\xb5\xdd\xd8\xbe\xc2\x21\xaf\xd3\xb5\x73\xcc\x71\xd8\xfe\xf0\x71\xdc\x1d\x66\x8c\xad\x1e\x4c\x8d\x5e\xd1\xf2\x60\x44\xbb\x20\x0e\x3e\x30\x53\xc4\x4b\x53\x91\xff\x88\x7f\xb0\x20\x52\xa0\x53\xb8\x32\xe9\x90\x2a\x7e\x45\x61\xf5\x15\xd9\x8e\x21\xc7\xb5\x9f\xb7\x0f\x1b\x25\x10\xed\x82\xb8\x40\x49\xd4\xff\xf5\xf7\x4e\x61\x69\x8a\xce\x3f\x35\xb8\xba\xaf\x6a\xde\xe8\x30\xd0\xf0\x63\xea\x29\x7a\x5c\x06\xc3\xc8\x4e\xa0\x12\xfa\x65\xf3\x5c\x61\x74\x44\xbb\x20\x0e\x7e\x1f\x12\x69\x27\x35\x2e\xf7\x31\x45\xe7\xdf\x47\xed\x92\xd9\x59\xe4\x7c\x46\xa0\x6d\xb7\xc4\x9b\x46\xbf\xef\x7d\x20\xe9\x99\xa1\x82\x8d\x08\xc4\x83\x38\xc4\x3e\xe7\xe2\xff\x1d\x88\x07\x55\xcd\xb3\x14\xe0\xe8\x64\x7e\x1b\x15\x2e\xa9\x68\xf5\x03\xeb\xc9\x74\x5f\x3d\x71\x12\x13\x3b\x6b\x2a\xf5\x94\x4e\xfb\xdd\xa7\x6d\x1d\x39\x22\x1b\x88\xae\x83\x38\x78\xd7\xef\xa3\x9b\x84\xb0\x3c\x23\x62\x2e\xb6\x75\xa6\xcd\x70\x3b\x70\x72\xb9\x8f\x5b\x73\xea\x97\xdb\xd9\x7b\x79\x7d\x3d\xd0\x6e\x07\xfa\xbe\x02\xe2\xe0\x0a\xe8\xfc\xb9\xee\xde\x47\x1a\xf5\x65\xbe\x64\x81\xf1\x8a\xf4\x13\x12\x77\xde\xcb\x7e\x4f\x7f\xae\xc9\xfc\xfc\xaa\x81\xba\x97\x2a\x0e\x6d\x9d\x04\xe2\xe0\x0a\x84\xd7\xeb\xde\x09\xe4\x31\x6a\xd9\x3d\x36\x08\xcd\xfd\xb5\x5d\x60\xec\x66\x6a\xe2\xad\x27\x83\x1d\x33\xc0\x99\x15\x4d\x5e\xff\x1d\xd1\x2e\x88\x83\xdf\x07\x4f\x3d\x52\x8f\x6c\xcb\x0b\xa2\x59\x1f\x87\xd7\xb2\x58\xbd\x75\x63\x44\x66\x3e\xaf\x8d\xb9\xae\xf0\xc9\x6e\x8c\xdf\x5b\x7e\x24\x8d\x78\x97\x00\x71\xd0\x12\x51\x40\x20\x1e\xf4\x08\x3b\xcb\x81\xc5\x3e\xa6\x84\xa7\x6b\xee\x41\x69\xfe\xd6\xdb\x89\xb7\xb5\x1e\x6f\x4e\xba\x2b\xea\x8f\x48\x78\x34\x5d\x75\xe6\x89\x4e\xad\xf1\x45\xf4\x1d\xc4\xc1\xfb\x4e\x7a\x64\x90\xbe\x2a\xe4\x28\x17\xed\x64\xa7\x19\xe5\x21\x51\x30\xe0\x12\x8c\x81\xf3\x30\x66\x3c\x2a\x48\xe6\x4e\x13\xfe\x46\x09\xb4\x7d\x16\x80\x83\x3b\x10\xd3\xa7\xb7\xf7\xcd\xbc\x70\xef\xa2\x83\x83\xca\xa3\xd5\x3d\x5e\x1f\xc1\xe5\x95\xd7\x39\xae\x5a\x05\xd6\xe2\x25\x9e\x6c\xb6\xad\x88\x76\x41\x1c\xdc\x81\x8d\x87\x1c\x15\x53\xe1\xd2\x94\xb3\x19\x19\xed\x86\x16\xa6\xf8\xfe\x89\x79\xf1\x34\xbb\x8d\x97\x12\xb4\xfe\x58\x88\x9a\xed\x41\xed\x82\x38\xf8\x7d\x70\xdf\xc6\x76\x2d\x7d\xfc\xd3\xb2\x67\xf0\xeb\x6e\xbc\x90\xff\xb5\x97\x06\x77\x15\x22\x3b\x27\xc3\x1e\xc7\x1d\x18\xbf\xab\x7a\xfb\x1c\xe1\x00\x88\x83\x96\xb3\x03\x02\xf1\xa0\xf1\xc4\x59\x0e\x60\xc7\x37\xd1\x3a\x93\x49\xe8\xca\x7e\xcc\x8c\x8e\xcb\x94\xa1\xfd\xf1\x4d\x7a\xe6\xb4\x97\x5c\x48\xb7\xd1\xfc\x89\x2b\x7d\x20\x74\x4a\x1f\x88\x83\xf7\x9d\x67\x83\x77\x42\xbd\x36\x79\x28\x4a\x30\x81\xcf\xb7\x3a\x32\xe3\xfd\xb3\xe0\xd9\xa2\xfc\xc6\xab\x73\xd3\xa7\x2f\x3a\x89\x34\x8a\x10\xed\x82\x38\xb8\x03\xcb\x25\xf8\x6f\x70\x2e\x05\x08\xd6\x64\x7a\x88\x8c\xb4\x95\x96\x76\x7f\xc1\x7f\x51\x5d\xc1\xfd\xa2\x3e\xef\xc9\xbb\x90\x82\x48\x62\xe8\xbb\x25\x80\x83\x3b\x20\xa4\xf3\xb3\x72\xb9\x80\x55\x64\xfc\x7d\x75\x11\x63\xc8\xed\xeb\xaf\x74\x46\x16\xb6\x45\x12\x6a\x9d\xa6\xbc\xf0\x31\xab\x59\xdc\x11\xed\x82\x38\xf8\x7d\x08\xd0\xd1\xd1\xb3\x6e\x94\x7e\xf4\x27\x36\x39\xe5\xc1\xcb\xd3\x54\xae\x98\xbb\xb8\x4e\x28\xfa\xab\x86\x1f\x87\x96\x26\xd3\x45\x75\x10\x0e\x80\x38\xa8\x0e\x00\x02\xf1\xa0\xc1\xdd\x59\x0e\x64\xf9\xa0\x18\x7e\xc0\xdf\xd6\x79\xb7\x1b\xeb\x18\xab\xa7\x32\x37\xaa\xea\x58\x8a\x75\x3b\xa9\xac\x86\x21\xd3\xc5\xe8\x2e\xc7\x2e\xa2\xef\x20\x0e\xe9\xc4\x4a\x7d\x12\x21\x7e\xa9\xd7\x9e\x7a\x91\x55\x4f\xfc\x8a\xd1\x1c\xe4\x1d\xb7\xba\xae\xdc\x4f\x91\x75\xc7\x12\x56\xae\x7f\xf2\x17\x0a\xc4\x83\x38\xb8\x03\x41\x1b\x33\xc9\x7c\x9b\xd6\x7c\x0e\x0c\x41\x96\x6f\x12\x29\xb2\xf6\x67\xbf\x74\x32\xb8\x54\xbd\xee\x18\x7a\xbd\x56\x63\xbc\xc2\x8c\x68\x17\xc4\xc1\x1d\xd8\x26\x6c\x94\x8d\x0a\xac\x32\x0c\xe4\xbf\xcb\xa3\x4e\xe2\xfc\x01\xdf\x9e\xb1\x34\xa1\x6c\x62\x22\xb1\xdc\xef\x56\x53\x7f\xeb\x00\xb4\x7d\x16\x80\x43\xfa\x2d\xbc\x6f\xb0\xad\xc3\x7b\xe8\x14\x90\x56\x95\xc5\x9c\xfb\xde\x1d\xbb\x29\x42\xc2\x8a\xe4\x88\xd9\x20\xdc\x46\xda\xcd\x55\xad\x10\xe1\x00\x88\x83\xea\x00\x20\x10\x0f\x1a\x69\x9f\xe5\xc0\x67\xb7\x08\x85\x9e\xb1\x01\x9a\x86\x9a\x0f\xc1\x44\xd2\x44\x9c\x45\x8c\xd8\xd5\x53\xec\x28\x5e\x45\xb6\x23\xe6\xe6\x6e\x16\x90\xff\x20\x0e\xde\x77\xc2\x4e\xcf\xca\xf1\xe9\x5e\xd4\x78\x82\x0c\xdd\xee\xba\xfd\x32\x1e\x25\x1c\xde\x4f\xcf\x71\x02\xf2\x52\x02\x4a\x6e\xc7\x79\x39\x42\x59\x13\x00\x07\x77\x80\x4c\xe2\xfd\x6c\x95\xfc\x15\x67\x9d\x1a\x22\x83\x1c\x86\x32\xc9\x48\x25\x03\xde\x74\xb3\x1d\x33\x53\x76\xc9\xa6\x98\x34\xb6\x09\x44\xbb\x20\x0e\xee\xc0\xdf\xf5\x1b\xbc\x4f\x7b\x66\xc3\x9e\xd5\x38\x2e\x7d\xff\x88\x75\x61\xe2\x42\x0a\x7b\x4b\x4a\xe2\xd1\x35\xa5\x37\xb3\x8f\xe4\x73\x21\x67\x41\x1c\xfc\x3e\xe8\x7c\xb5\x44\x9b\x2f\x58\xde\x0a\x69\x0c\x54\xe9\x2e\x52\x21\xb7\x79\xe1\x42\xb9\xee\xdf\x70\x51\x64\xa1\xe3\xd1\x5b\x4b\x31\x59\x84\x03\x20\x0e\xaa\x03\x80\x40\x3c\xe8\xb5\xe7\xcc\x6f\xe2\xa3\xa3\x14\xf4\x0a\x17\x19\x34\xeb\x13\xd3\xb5\x9a\xc5\xc6\xa6\x79\x0f\xa5\x6f\xc9\x7b\x98\x73\xa7\x7c\x23\xc0\x35\x09\x85\x4e\x98\x05\x71\xf0\xbe\x07\x8a\x26\x3d\xa2\xcf\x39\x12\xcc\xa1\xa1\x4e\xed\x33\x51\x27\x97\x7b\x77\x4b\xfd\xf3\x05\x1e\x35\x9d\xbc\x8a\x95\x95\xa7\x2a\xf7\x10\xed\x82\x38\xb8\x03\xdf\xea\x4d\x97\x87\x8e\x6e\xaf\xaa\x0a\x90\x04\xcb\x72\x6f\xd0\x74\xfa\x6e\x9f\xec\xd2\x75\x87\x61\x17\x39\xd1\xcd\xa3\xca\x42\xc3\x77\x10\x07\x77\x40\x6c\x5d\xa5\xe2\xa8\xa4\xc7\x14\xcb\xa5\xfa\x40\xd3\xa2\x81\x7b\xbf\x47\x53\x76\x00\xc3\x44\x6e\x4a\x57\x7b\x79\x5c\x27\x03\x5a\x70\x03\xe2\x90\xe6\xd9\x15\xb5\x72\xed\x57\xe5\x6e\xad\xf4\x5f\x18\xac\xac\x9d\xe2\xcf\x61\xc1\x54\x7c\x18\x72\x29\x80\xad\xae\x0a\x63\x28\x96\xed\x18\xe1\x00\x88\x83\xea\x00\x20\x10\x0f\x7a\x07\x3d\x73\x91\xa4\xa0\x5f\x89\x68\xa1\xc4\x7b\x8b\x9b\xa4\x54\xe8\x9d\x9e\x83\xb9\x3f\x2a\xff\x90\x28\x5c\xd2\xb6\x39\xc5\x59\xb7\xcd\x48\x81\xce\x25\x00\x71\xf0\xbe\x6f\x32\xd0\x0b\xbb\xf7\xb6\xfb\x6a\x92\x8c\xdb\x0f\x16\x17\xf7\x2a\x3a\x6a\x62\x2b\xf4\x8a\x5a\x87\xb8\x6c\x62\x78\x0a\xc6\xc9\x22\xda\x05\x71\x70\x07\x2c\x4d\x5d\x59\x56\xb6\x89\x0c\x50\x6a\xa2\xa8\xbf\xcb\xe6\x74\xcd\x97\x3d\x52\xda\x68\xe8\x1e\xf0\x30\xff\x46\xc0\x8e\x96\x93\x87\x68\x17\xc4\xc1\x1d\x78\x81\xe6\x14\x3b\xd6\x80\x7d\x69\xf9\x38\xd7\x1b\xad\x2d\x80\x3b\x4b\xc2\xc0\x39\x24\xff\x7d\xeb\xfc\x34\x6a\xb9\x60\x4b\x02\xb4\x85\x0e\x88\x43\xfa\x2d\x04\x28\x74\x51\x5a\x7c\x0f\x48\xfe\x55\x64\x27\x31\xe3\x8f\x73\xf9\xfe\xbb\xf0\x3d\xd9\x10\xef\x28\x8b\x7e\x86\x63\xdb\xf5\x62\x84\x03\x20\x0e\xaa\x03\xa0\x40\x3c\x68\x5a\xf1\x9f\x40\xbc\x38\x72\x20\xfe\x18\x3f\x7f\xd8\x63\x34\xea\x28\xfe\x78\x81\xc5\xbb\xb8\x9e\x17\xdb\x62\x9f\xd5\xff\x40\x58\xd3\x23\xa1\x7d\x22\x3d\xc0\xfd\xc7\xb9\xcc\x9c\x20\x07\xe2\xbf\xf6\x2e\x27\x10\xac\x9f\x56\xba\x2c\xdd\xb1\xa5\xfd\xe3\xd6\xe5\xfd\xea\x71\xbf\xc1\xa8\x85\xcd\x86\x2c\x41\x9e\x96\xdb\x9d\xf2\x73\x99\x27\x42\x0e\xc4\xa3\xdc\x63\xf9\x14\x48\x25\xe2\x9c\x5d\xb5\xf7\x8a\x9c\x50\x3e\xbb\x3d\xf0\xa8\x05\xd5\x5c\x24\x52\x03\x23\xb6\x36\xdf\x53\xa9\xe3\x5c\x7a\x8b\x1c\x88\x97\x50\xc1\xf9\x22\xd7\xa3\x64\x1a\x49\xae\x44\xca\xf7\x62\x51\x45\x8e\x6f\x94\x0f\xad\xc2\x92\xf9\xfa\xe2\x4e\xf4\x2a\xe6\x04\xfd\xb9\xf4\x16\x39\x10\x8f\xc5\xe1\x2a\x69\x43\x1b\x2f\xd2\x4c\xf4\x7a\x4d\xf7\x80\xf2\x58\x68\x1d\x9b\x9d\x3b\x07\xdf\x8e\x0a\xf7\x56\x1c\x15\x9b\x2d\xcf\xb9\xf4\x16\x39\x10\xcf\x96\x46\x3e\x64\xb5\xf9\x27\xce\x94\xb1\x0a\x47\xfe\xc2\xa3\x62\x2d\x7c\x61\xe7\x94\x28\xca\xe7\x0f\xf2\x9e\x6c\xec\xe9\xcc\xbe\x3e\x97\xde\x22\x07\xe2\xd7\x25\xfa\xac\x47\xb3\xd5\x9f\xbf\x61\x5b\x57\x8a\x59\x69\x63\x92\xbc\xae\x67\x13\x77\x37\x7a\x44\x50\xf9\x17\x9d\xd1\x44\xf3\xc9\xb9\xf4\x16\x39\x10\x7f\x77\x49\xc1\xb0\x4e\xfd\xcd\x91\xe6\xa8\xb2\xeb\x9d\x03\x93\x0f\xa2\xb8\x73\xfb\x72\x8f\x39\xaf\xe0\xd6\xcd\x0c\xd8\x5d\xd9\x75\x3f\xb7\x39\x40\xd0\x2f\xf5\xac\x42\xbf\x94\xbb\x3a\x18\xd4\x2e\xf4\x3e\x32\xce\x53\x03\x0d\x37\x91\xaa\x40\xd1\x8c\xe2\x45\xef\x17\x13\xe3\x7b\x29\x11\x3a\x6d\x8c\x17\x11\x05\x0e\xc4\xc1\x0b\x9c\x7a\x69\xfe\xd3\x38\x3d\x3a\xdb\xce\xf5\x2a\xfa\xd0\xf2\x12\xcd\x93\x8c\x5f\x8d\x76\xa8\xad\x61\x0e\x3f\x34\xa5\x39\x28\xaf\xf0\x21\xda\x05\x71\xf0\x42\x2f\xff\x16\xff\x4e\x4c\x89\xe1\xab\x31\x9e\x0d\xd9\x7b\x29\xbf\x9e\xff\x64\xe5\xa1\x1f\xa8\x24\x50\xb2\x1f\x6c\x93\x57\x0c\xf1\xaa\x47\xb4\x0b\xe2\xe0\x85\xfe\xf5\x9a\xeb\x3e\xe7\xad\xb7\x5a\x9f\x83\x5d\x6d\xf3\xe4\x78\xf5\xf0\xd8\xbc\x74\x35\x8a\x17\x53\xf9\x3f\x60\x3e\x44\x73\x5d\x86\xc2\x5a\x20\x0e\x7e\x1f\x50\xbd\xf0\xc4\x38\xb0\x77\x5d\x3f\x1b\x35\xd7\x71\x67\x3a\x3d\x55\xa9\xb9\xa3\xc2\xfa\xdb\x03\x65\xf0\xef\x65\x29\xc3\xb7\x21\xf4\x88\x42\x0f\xe2\xa0\x87\x3d\x20\x10\x0f\x2a\x9b\x67\x39\x40\x71\x9b\xc2\xee\x1d\x51\xbd\x79\x3e\x19\xd1\x22\xc5\x78\xd3\x1f\xfe\xe2\xf0\x6a\x92\x8d\xe7\x89\x6c\xdd\xf2\xae\xcd\xf6\x15\xd0\xe1\x46\x20\x0e\xde\x77\x22\x63\x5e\xe1\x0a\xec\xa7\x79\xb7\x2f\x94\x44\x60\xfb\xc9\xa0\xbb\x2a\xf5\x3d\xcf\x7f\xe3\xe4\xcd\xc9\x58\xf9\x85\xae\x6c\xb3\x16\xd1\x2e\x88\x83\x3b\xa0\x72\x97\x82\x5d\x86\x43\x6f\xf1\x41\x22\xdd\x71\xf7\xbe\xef\xdb\xbc\xb9\x5d\xca\x27\x4c\x9d\xf6\x3f\x9c\x1a\x87\x2f\xcd\x7c\x6a\x43\xb4\x0b\xe2\xe0\x0e\x3c\xba\x17\xfe\xf3\x9e\x46\x63\xf3\x9f\x3a\x0c\x71\xd9\x3b\x73\x03\x3c\x86\x51\x2b\x13\x4d\x25\x76\x6e\x93\xc3\xed\x47\xde\x15\x3c\x88\x76\x41\x1c\xfc\x3e\x74\x1f\x07\x7c\x26\xe3\x67\xf8\xe9\xe6\xba\xe7\xba\x66\x13\xee\x24\x3b\x70\x33\xb6\xde\x86\x51\x4e\x24\xbf\x37\xfb\xaf\x26\x05\x74\xb0\x0d\x88\x83\x1e\xf6\x80\x40\x3c\xe8\x19\x76\x96\x03\x81\x14\x21\xeb\x38\xba\x69\x86\x8e\xd7\x7b\x9e\xe7\xa5\xfb\xb3\x0f\x4f\x7c\x60\xa7\xf9\xb8\x9e\xc0\x1f\x96\xa4\x6b\xcd\x60\x6e\x0f\x0d\xce\x01\x1c\xbc\xef\xc5\x3e\x2e\x9c\x17\x23\x30\x2f\x4f\xd8\xb9\x69\x26\xc4\xc9\xbc\x2d\xf1\x67\x35\xbb\xd9\x7d\xe8\x94\x49\xdf\x73\x81\xde\xa5\xd9\x12\xd1\x2e\x88\x83\x3b\x50\xa9\x7e\xb1\xd7\xcb\x2b\x67\x2b\xcd\xec\xbe\x42\xe3\x6d\xd6\xdd\x86\x34\x7b\x34\x96\xee\x09\xe5\x95\xb7\x78\x7a\xf5\x7d\xcd\x92\xd0\x7e\xa9\x00\x0e\xee\x00\x35\xe5\xf8\x9c\xf0\xa9\x52\x14\x59\xff\xbd\x34\x1a\x0f\xb6\xfb\x0f\x2a\x08\x98\x79\xbf\xdc\x50\x9f\xde\x36\x0c\x0e\x1d\x13\x1a\x46\xb4\x0b\xe2\xe0\xf7\x01\x57\xed\x6e\x04\xae\x21\x15\xe1\xb3\xcc\x6f\x57\xea\xf0\xfe\x6c\xfa\x8e\xfd\xe4\xbc\xf5\x0b\x57\xc8\x6b\xb6\x95\xfe\x35\x3a\xfb\x75\x84\x03\x20\x0e\xaa\x03\x80\x40\x3c\x68\x40\x71\x96\x03\x4f\x22\x87\xe8\x24\x54\x75\x3e\x8a\x12\xea\x11\x93\x45\xbe\x57\x53\x7e\xbe\x13\xd4\xae\x63\x35\xf0\xb1\x76\x95\xeb\xe6\x44\xdc\x75\x44\xdf\x41\x1c\xd2\x41\x77\x47\x2c\x85\x36\x7f\xef\x84\xf6\x35\x68\xdf\xb5\xb1\xb8\xb0\xb3\xeb\x1f\x34\x9b\x3c\xe5\xcf\x4a\x50\x16\x43\xff\xcc\xf1\xe0\x10\x5a\x5d\x0e\xe0\xe0\x0e\xa8\x2e\x8e\x8d\xdf\x0a\x15\xbd\xc4\xb7\x88\x42\xe8\x9e\x52\x3e\xf8\xda\xcd\x86\xa1\x76\xdd\x71\xd9\xb7\x8d\xfe\x01\xb1\x90\x16\x74\x20\x17\x88\x83\x3b\x70\x72\x91\xfe\x65\x85\xb1\xf6\x01\xa3\x57\xfc\x7a\xad\x51\xf9\xf7\x72\xc6\x9b\x94\xa5\x46\x0a\x05\x6e\xd3\x9f\x2d\xd0\xb0\xdb\xa1\x5d\x01\x40\x1c\xfc\x3e\xe8\x1f\x97\x5e\x08\x76\x0e\x8f\xbd\x1b\x1c\x12\xdc\xc8\xda\xa8\x31\xd4\x2c\x5a\x47\x4e\x23\x9f\x4a\x2f\x12\x23\xa5\x2c\x17\x04\xed\x88\x00\xe2\xa0\x3a\x00\x08\xc4\x83\x46\x77\x67\x39\x10\xa6\x59\x8c\x76\x8d\x97\x90\x79\xfe\xe2\xad\x2d\x62\x66\xc3\x25\x4c\xdd\xd0\xa3\xe1\x2b\xef\x8a\x0c\x1f\x5e\xd2\x67\xf6\xac\xe6\x44\xf4\x1d\xc4\xc1\xfb\x7e\xc5\xa9\x70\x7a\x9f\x07\x5b\xb6\xe0\x50\xf6\xea\x0d\xcf\xcc\x6b\x19\x6d\x37\x3d\xee\x18\x3a\xd7\x74\xbf\xce\xd1\x0f\xe2\x5a\x82\xce\x3d\x01\x71\x48\xa1\xc2\x0d\x2c\x6f\xe7\xc8\x23\x2b\x0a\xa7\x4d\xf6\xfa\x67\x85\xf4\x9c\x9c\x6a\x0f\x16\x1f\x09\xe8\x7f\x51\x0c\x59\x26\x28\x0e\x81\x82\xeb\x20\x0e\xee\x40\xca\xe4\x8d\x01\xe9\x3b\xaa\x0d\x56\xe1\xc9\xa1\x13\x1b\xaa\x17\xac\xc5\xd3\x6b\xd5\xc2\x52\xae\xae\x92\xfd\xf6\x0b\x5b\x4d\x83\x16\xdc\x80\x38\xa4\x0f\x63\xae\x7e\xae\x15\x7c\xed\x59\x93\xa5\x12\x3f\x43\x7d\xe2\x3d\x4d\x8b\x47\x16\x79\xeb\xfe\x2c\x7c\xe2\xf2\xfa\xb2\x89\x7f\xd0\x85\x70\x00\xc4\x41\x75\x00\x10\x88\x07\x0d\xb5\xcf\x72\xe0\x46\x40\x87\x23\xce\xa5\x0a\xfa\x86\xfe\x2b\x8f\xfd\x9f\x9b\x54\x3a\x5f\xe4\x99\xc8\x18\x25\x7f\x64\x26\x42\xda\xd5\xe7\xaf\xaa\x89\xe8\x3b\x88\x83\xf7\xdd\xbc\xec\x48\x9e\xf2\x7a\xcb\x90\x51\xa1\x01\xd1\x54\x8a\xe7\xd1\x42\xb4\x3e\x2a\xc3\xcc\x18\x3f\x35\xad\x21\x21\xce\x93\x04\x68\x91\x24\x88\x83\x3b\x40\x7f\xa1\x07\xd3\x14\x4d\x51\x8e\xa8\x49\x70\x6a\xaa\x51\xf4\xd4\xf0\xce\xf5\x97\x7d\xc6\x61\x56\xdd\x61\x76\xb1\xb1\x05\xeb\x11\x88\x76\x41\x1c\xdc\x81\x77\x7f\x35\xcc\x8b\x53\x1b\x6f\x94\xb1\x5a\xc9\x86\x4b\x39\xbb\x15\x75\xf9\x61\xbf\xd4\x30\xcd\x14\xf9\xa6\xf6\xe7\xb9\x40\xd3\x29\xa2\x5d\x10\x07\xbf\x0f\x7c\xa1\xd3\x6f\x83\xca\x96\xe7\x05\x32\xd6\x93\x69\x5d\x71\x96\x88\x62\x46\x0b\x7e\x17\x66\xab\x2c\xdb\x4c\xf7\x34\xf4\x49\x42\x07\x5e\x82\x38\xa8\x0e\x00\x02\xf1\xa0\xf7\x9e\xb3\x1c\xd0\x75\x4a\xd8\x9b\x67\xa1\x26\x7c\x8a\xd1\xe2\x86\xfd\xb9\x28\xf6\x46\x6b\x61\xbc\x7e\xdd\x5a\xc2\x6b\xd7\x91\x81\xb6\x3b\x26\xd0\x19\x12\x20\x0e\xde\x77\x03\x99\x82\xb1\xc1\x47\x72\x7e\xed\x78\xb1\x53\x9b\x76\xb4\xf5\x2a\x5c\xfb\x5f\xd1\x66\xe6\x34\x1a\x7f\xda\x52\x48\xf4\x9b\x43\x93\x8b\x20\x0e\xee\xc0\xdd\x66\x8a\xb2\xb6\xfd\x9a\x63\x3c\x79\x9d\x7a\x9c\x7a\xbc\x35\x26\xb9\x3d\x54\x45\xcb\x67\x94\xf3\xc9\x3c\x34\x43\xe1\x2e\x2e\x88\x76\x41\x1c\xdc\x01\xc9\xd9\x29\x49\x09\xde\x0d\x72\xcb\xaf\xc4\x99\x8d\x19\x31\x5b\xe9\xbf\xd9\xfd\x3d\xbb\x53\xa5\xa7\xed\x7e\xe2\xd1\xf8\xa9\xa8\x23\xda\x05\x71\xf0\xfb\x60\x2c\x60\xbc\xc4\xd5\x9b\x66\x91\x4b\x46\x31\x27\x80\x33\x75\xfb\x3a\x47\xfc\x5c\x1d\xd6\x40\xee\xc2\x8e\x36\xbd\x84\xf7\xeb\x17\x08\x07\x40\x1c\x54\x07\x00\x81\x78\xd0\x4b\xe8\x59\x0e\xe0\xb9\x4c\x92\xa8\x8c\x2d\xbf\x2f\xfb\xc9\x45\x35\x77\xff\x5d\x73\x5e\x3f\x59\xba\x9a\xa2\x43\x76\x92\xd3\xb8\x82\x76\x6a\x1d\xf4\x31\x00\xc4\xc1\xfb\xbe\x90\x57\x84\xb3\xa3\x57\x1e\xdb\xcd\x67\xa3\xdf\x7e\xe9\xe3\x16\x26\x89\xa5\x79\x9b\x3c\x07\xbb\xc2\x43\x43\x2d\x09\xce\xba\x25\x68\x11\x13\x80\x83\x3b\xf0\xf8\xd3\x20\xab\xff\x7b\xb7\xae\x08\xbe\x9c\xe3\x30\xb7\x0c\xab\x62\x06\x89\xab\x38\x58\x9a\x4a\xab\xa7\x77\xa6\xae\x0d\xd7\x42\x67\x76\x81\x38\xa4\x49\xc0\xde\x96\x99\x45\xb6\x9c\x0a\x5e\xef\x1b\x44\xd7\x5a\x14\x3a\x2d\xcd\xf6\xe7\xb8\x73\xeb\xb8\x18\xba\xbf\x09\xec\x3f\x63\x85\x16\xf4\x81\x38\xf8\x7d\x40\x31\x4f\x91\x93\xec\x11\xf8\x56\xd6\x5e\x6b\x85\xb1\x73\x1c\xce\x62\xea\x75\xfb\xa0\xd9\x4d\xcd\x75\xd7\xa6\x9f\x97\x87\x60\x1d\xe1\x00\x88\x83\xea\x00\x28\x10\x0f\x0a\x0c\xfe\x13\x88\x17\x47\x0e\xc4\xeb\xbe\xa9\xa1\x17\xbe\x6f\xca\xd4\x9c\xa4\xf1\x14\x57\x2c\x32\x57\x4f\xa8\xfa\xf5\xbc\x61\xbb\x57\xe1\x6c\xec\xc6\xed\x3a\x8f\xf3\x5b\xd4\x0f\xba\xd0\x59\x9e\x4a\x5f\xc7\x90\x7b\x14\x74\xf9\x76\x7a\x98\xc7\x28\x6a\x2f\xef\xa3\xaf\x4d\xe8\x7c\xfd\xd4\x4e\xde\xaa\x4d\x0c\x37\x7e\xf9\xe2\x54\x23\xfe\x3f\x20\x0e\xfe\xff\x11\x70\x9f\xc0\xb2\xaf\x2a\x32\x7b\xfb\x25\xac\x25\x2d\x23\xaf\xf8\x95\x4e\xdd\x3d\xa6\xe5\x7b\x2c\x83\x4e\x98\xfa\xa1\xa6\x17\xff\x20\xda\x05\x71\x70\x4f\xdb\x73\x5c\x33\x03\x51\x4a\x19\x9c\x19\x77\x48\x5b\xe3\xa5\xba\xa2\xa8\x5e\x57\x87\x67\x91\x17\x71\x30\x0e\xe4\x34\x8b\x9a\x42\xbb\xb7\x80\x38\xb8\xa7\x1f\xc7\x8b\x3e\xd4\xa8\xad\x08\xb8\x5d\xdb\x76\xef\xf6\xac\x94\xe0\xe7\xd7\x6c\x9d\xfa\xb9\xf3\x49\xca\x6d\x20\x4d\x9c\x6c\xda\x14\xd1\x2e\x88\x83\xdf\x87\x84\x69\x03\xb3\x59\xf5\x0d\x0a\x11\xbf\xd6\x37\x3b\xe5\xdc\x27\xc4\xab\x2b\x15\xa2\xd9\x1b\x4f\x86\xd8\x4e\x8c\xff\xb0\x3b\x3f\x45\x78\x0a\xe2\xa0\x5a\x05\x08\xc4\x83\x22\xc1\x67\x07\xe2\x0f\x88\x2d\x92\xe6\x17\xe2\x43\x4b\xdc\xe8\x70\x83\xd8\x8f\xe8\xdc\x46\x9e\x55\x85\xf3\x4b\x8d\xb8\x2b\x7b\x79\x8c\x59\x10\xa7\x21\xc2\xe5\x20\x0e\x39\x10\xcf\x24\xab\x27\x66\xbc\x9f\x7b\xdf\xdd\xe5\xd1\xd2\x23\x79\x1a\x9e\x34\x8a\x81\x2f\xcf\x7f\xbc\xaf\xfe\x99\xf3\xb0\xc7\x52\x49\x19\x03\xd1\x32\x88\x0b\x94\x46\x21\x86\x45\xed\x47\x2e\xd7\xa0\x3f\xb7\x0d\x35\x93\xb3\xe5\xa2\xf2\xc4\xf9\x45\xab\x82\x26\x92\x72\xd3\x92\xca\xa8\xe4\xc3\xa4\x2a\x9a\x92\x3e\x14\xb5\x07\x70\x81\xd2\x38\xb0\xbb\x21\x54\x5e\x1f\xda\xfc\xc7\x42\xe9\xc5\xb1\xed\xcf\xa8\xb6\xe9\x94\x1d\x14\xe2\x00\xa9\xa6\xa7\xbd\xef\x73\xda\xe4\xa4\x26\x6d\xb6\xa1\x58\x37\x85\xfc\x91\x4e\x95\xee\x03\x35\x2a\xa9\x10\xa6\xe2\x82\xb0\xe3\xdf\x86\xcd\xc3\x4d\xe8\x7b\xee\xed\x5a\xfb\xe1\x1e\x4b\xbe\xa4\x2f\xff\x57\xea\xe2\x42\x33\xdd\xb5\x8a\xdd\xc4\x3e\x0d\xcf\x36\x86\xb6\xd8\xb6\xfa\xd8\x39\x16\x33\x6f\x9e\xf1\x65\x5d\xe9\xe8\x19\x29\xb1\x7f\xa1\x15\xd4\x62\xad\xa9\x92\x6c\x5f\x0b\x65\xb2\x05\x47\x94\x02\x75\x69\xb2\x8d\xaf\x51\x55\xac\xa8\x34\x4e\x58\xff\xb0\x7d\xa7\xa9\xf4\x7f\x2f\xd6\x0d\xea\xdc\x19\xb1\xee\x2c\xf1\x9f\xb3\xc7\xb8\x9f\x1d\xa8\xbf\x85\xf4\x08\x4d\x72\xf3\x4a\x8a\xdc\x95\xef\xe4\x7d\x58\x62\xfb\xdd\x8b\xce\x4b\x5d\x20\xee\xdf\x41\x3b\xd7\x39\x2e\x02\xbc\x55\xaf\xfb\x2a\x11\xfd\x26\x09\x9a\x9b\xc2\x3f\x9b\x48\x64\x5e\xb5\x84\x5b\x5e\x9c\xbc\xfa\x67\x07\x87\xee\x5f\xa8\x45\xfc\xb1\xa8\x7e\x31\xa6\xe1\x85\xcb\x32\xef\xdf\x86\x3f\x7b\x4b\x12\xbe\x2c\x33\xa2\x35\x3f\x53\x1a\xea\xda\xb6\x63\xad\x97\x0c\xc5\xba\x41\x97\xff\x27\xd6\xed\x87\x14\xeb\x1e\xa3\x99\xea\x52\x9e\x2c\xbe\xcb\xa2\x34\x5d\xba\x22\x40\x4d\x6e\x8b\x59\xd2\xda\x3c\x92\x33\xfd\x7a\xf0\x85\xe7\xc7\xe6\x9b\x14\xe7\x31\x11\x8e\xc2\x8b\xf4\x6d\x65\x28\xd3\x36\x8b\x70\xbf\xfa\x3e\x3d\x77\xbe\x6c\xeb\x33\xe1\xe7\xc5\x4b\x8d\x51\x05\x34\x15\x37\xb4\x28\x8c\xf2\x8f\x02\xbf\x0b\x9e\xc7\x65\xfd\x90\x63\xdd\xc4\x09\x43\x05\x65\xe8\xba\x0e\x7a\x4c\x3f\xa8\x5c\x32\x17\xc6\x0f\x07\x4b\x2e\x94\x28\x12\xe5\x91\xe1\x8e\xe8\x9a\xcc\x7a\x53\x9f\x4b\x6f\x0d\x91\x2e\xdb\x4f\xca\xd5\xf0\x32\x45\xd4\x99\x6b\xd6\x67\x86\xe0\x7e\xff\xad\xef\x01\x1c\x4d\xb1\x28\xf7\x6a\xca\xf9\x16\x04\x32\x6d\xb7\x5b\xce\xa5\xb7\xc8\xb1\xee\xc1\xf8\xf1\x1b\x3a\x18\x42\x5d\x43\x6f\x7d\x35\xd7\x8e\x24\x7f\x05\x71\xb0\xa4\x9c\x46\x27\x1d\x3e\x53\x14\x3e\x9e\xcc\x1a\x19\x39\x97\xde\xc6\x22\x5d\x96\xf4\xa5\xdc\xea\xc5\x88\x18\xf5\xab\x9a\xfe\x26\x93\xb1\x47\x7a\xda\x27\x55\xd4\x23\x37\x22\x3f\x13\xde\x14\xaf\xdc\xc4\xcf\xb0\x3c\x97\xde\x22\xc7\xba\x8d\x7f\xcb\x27\xa1\x1e\x99\x63\x30\xb0\x1f\xf8\x15\x3e\x36\x58\xa7\x79\x43\xd2\x52\x53\xed\xa8\x27\xc5\xd1\x18\x32\x4a\xbb\x4b\x70\x2e\xbd\xad\x47\xba\x6c\xf1\x53\xe6\x07\x85\x78\xe6\x33\xaa\x0a\xaf\x66\x95\x6e\x07\xb6\xc8\xbf\x75\xc2\x48\x6c\x92\xce\x9f\xf1\xe9\xf8\x3e\xc2\xe6\xfe\xe6\xdc\x86\x43\xa0\x5f\xea\x59\xc3\xa1\x34\x36\x3a\x82\x39\x4f\xba\xcb\x65\xc9\x0a\x77\x99\x03\x9a\x6c\xb3\x1e\xb3\x4e\xe0\xd5\xbb\x60\xa5\x0d\x1c\x0c\x93\xcd\x5b\x7b\x43\xfb\x4f\x00\x38\xa4\xfd\x6d\x16\x5d\x33\xa8\x1e\x4f\x96\x87\xa8\xd8\x8f\x67\xf7\xc6\x69\x6d\x12\x9c\xe4\x05\x30\x84\x8c\x1e\xb4\x5c\xf0\x68\x1f\x69\x82\x36\x4c\x05\x71\xf0\xe1\x10\x5e\xe0\xfb\x2f\x02\x93\xcf\x28\x5f\x4f\x7f\xd8\x73\x43\xbf\xbf\x4c\xf6\xa2\xed\x6b\xbd\x24\xc9\xef\x8f\xa5\xd4\xb1\x57\xbe\x09\x51\x41\xaf\x19\x00\x0e\x3e\x1c\xba\x5a\x39\xeb\x4f\xb6\xe0\x70\x7f\x92\x1a\xb7\xbc\x2b\xea\x70\xa9\x5b\xcd\x5d\x9d\xcb\xc0\xb3\x74\x27\x38\x6f\x78\x60\xfa\x0e\xb4\x77\x12\x88\x83\xaf\x67\x1c\xb3\xa4\x1e\xf6\x4f\xb1\xac\x88\xd9\xfd\xdd\xe8\x39\xcf\x59\xa5\x8d\x3e\x86\xf6\x8a\xf3\x2d\x6a\xa2\x6e\xe5\xef\xd8\x13\x66\x69\x44\xac\x1b\xc4\x21\xf6\x39\xf7\xfb\xef\x58\x37\xa8\x6a\x9e\xa5\x00\x4a\x21\x9a\x3e\x9a\x17\x36\x16\x83\xf5\xe7\xd3\xe8\x7c\xe3\x37\x0e\x74\x77\x68\x6e\x8b\xbd\xda\xa5\xf0\xa9\xae\x71\x73\xff\x08\xbd\x0d\x83\x38\xb8\x02\xd2\x49\x12\xcd\x68\xa4\x19\x25\xd6\xe1\xf5\xdd\x2e\x14\x6c\x09\xdf\xa2\xcd\xb0\x0d\x44\x94\xde\xca\xc9\x44\x65\x93\x7d\x4c\x80\x66\xdb\x40\x1c\x5c\x81\x01\x4f\x7a\xa9\xaa\xbb\xa2\x0b\xda\xe1\xd4\xdd\xd4\xf2\x31\xed\xb7\x92\xfc\x57\x07\x73\xf6\x09\x06\xd2\x7d\x68\x1f\x47\x63\x42\x5b\x1c\x81\x38\xb8\x02\xde\x63\xd8\xdf\x2b\x06\x37\x3d\xa5\xe4\xa4\x72\x3b\x06\x14\x50\x47\x9e\xbf\xd1\x92\xaf\x95\x9d\x16\xec\xd4\x25\x91\x09\x9e\x83\x4e\x55\x03\x71\x70\x05\xec\xb8\x06\xd1\xbf\x8a\x44\x52\x3a\x59\x2d\x77\xae\x32\xc9\xfc\xbd\xe1\xf3\x50\xa1\xb8\x7b\x63\x3e\x45\x94\xf0\xbe\x5f\xf8\x44\x0e\xb4\xbd\x0d\x80\x83\x96\x88\xf2\xfe\xf7\x6c\x3e\xe8\x11\x76\x96\x03\xaf\x6a\x67\x0f\x31\x5c\xc6\x9f\xd2\x7f\x5a\x50\x79\xf3\x5e\xa8\x3b\x6e\xb4\xba\xc0\xeb\xe5\x68\x52\x54\xa6\x36\x2f\x19\xd9\x28\xf4\xe5\x05\xc4\xc1\x1d\xf8\x66\x54\xb8\x89\x6f\xdb\x70\xdb\xe2\x9a\xaa\xc2\x05\x79\xfb\xee\x86\xe7\x76\x77\xab\x4f\xef\x89\x53\xe5\x1d\x78\xa8\x99\xc8\x41\x5f\x4a\x41\x1c\xdc\x01\x41\xdc\xf1\xaf\x7c\x24\xa3\x1a\x8c\x56\x1b\xcd\x2e\x65\x49\xd7\x63\xde\x09\x86\x62\xfe\x58\x61\x68\xce\xf5\xc9\x6d\x1a\xd4\x86\xf6\xb6\x05\x71\x70\x07\xd2\x3d\xee\x87\xd4\x6e\xcf\x44\x5a\x61\xbb\xa9\x3d\xf9\x69\x8d\xaf\x64\x69\xf5\xa8\x33\xab\xa2\xf6\xdd\x47\x12\x92\x96\xab\x9f\xa1\xed\x6d\x40\x1c\xdc\x81\x8d\x19\x7c\xd5\x8a\x99\x5d\x82\x16\xa5\x51\xcb\x4e\x39\x0c\x6b\x7b\x6f\xa9\x14\xb3\x49\x32\xca\x34\xef\x8b\x6e\xcd\xf2\x95\xd3\x08\x07\x40\x1c\xb4\x9c\x1d\x10\xeb\x06\x8d\x27\xce\x72\xe0\x4f\x60\x42\xd0\xb8\x62\x94\x5e\x0a\x81\xe2\x90\x1a\x2d\xbd\x8b\x8e\xab\x29\xfa\xee\xfe\xb0\xd9\x6e\x80\x53\x34\x9d\xdc\xbb\x7e\x44\xdf\x41\x1c\xdc\x81\xab\x59\x62\xdf\x33\x0f\x26\x42\x2a\x95\x3c\x5f\x95\x10\xc7\x08\xa1\x16\x3f\x7b\xb2\xb1\xf1\x2d\x97\xb6\xa8\x2d\xd6\xd2\x74\x13\x5a\xe1\x03\xe2\xe0\x0e\xf4\x58\x0a\xcb\x24\x9f\x5e\x74\x69\x25\x9d\x5b\xdb\xac\xb4\x17\xe9\x11\x70\xef\xbb\x5a\x95\x36\x1e\x83\x35\xf0\xa9\x9d\xb6\x17\xaa\x2f\x20\x0e\xee\x80\xfd\xc5\x0a\x4b\xbc\x0b\x61\x29\xb7\x55\x14\x9a\x9b\x54\xb0\xa4\x2e\x30\xd8\xb0\x5d\x73\x52\xcb\x18\xa8\x9e\x51\x17\x6b\x0a\x82\xbe\x6c\x81\x38\xb8\x03\xba\x7a\x68\x7e\xc2\x79\xa9\x5b\x34\x8a\xe5\x6f\xd5\xf6\x7c\x92\xf0\x6c\x7c\xea\x59\x9e\xc7\x62\x3c\xfe\x70\xe5\x5a\xe6\x38\x6e\x0f\xc2\x01\x10\x07\xd5\x01\xc3\xff\x76\x00\x34\xb8\x3b\xcb\x01\xad\xc0\x74\xfe\x2f\xc6\x11\x8d\xa6\x94\xa7\xf8\xb9\xcb\x77\x89\x66\xcd\x5b\xd9\x74\x96\x05\xc4\xa3\x66\x02\x8e\xed\x0f\x5a\x8e\x10\x7d\x07\x71\x70\x07\x3e\xcd\x06\x30\x66\x38\xbf\x75\xd4\x25\x2a\x89\x13\xf0\x73\x9b\x15\x5e\x71\x52\x9c\xdf\x08\x7f\x56\xfe\x30\x92\x9e\x5e\xae\x78\x1d\xda\x33\x17\xc0\xc1\x1d\xd8\xc5\x61\x3f\x38\xb2\x7e\x3d\x6f\xd6\x4a\x8b\xce\xfe\x6b\x4b\x28\xf0\xf9\x0b\x82\x41\x7b\xec\xec\x1a\x46\x51\x19\x32\x19\x62\x52\x44\xbb\x20\x0e\xee\x00\x61\x97\xac\x3f\xbb\xc8\xe5\x4f\x27\x37\xb1\x7e\xa2\x19\x6c\x5d\x53\x51\xc8\x7f\x7a\x8d\xa0\x2c\x5e\xf5\xe1\xf3\xbf\x1f\x26\x6f\x25\x40\x11\x64\x00\x07\x77\xe0\xeb\x6d\x93\x27\x3b\xeb\x94\x7b\x96\x7e\x42\x63\x86\x84\x28\x34\xe3\x6e\xee\xf7\x72\x5f\x6e\x4f\x9e\x36\x3b\x25\x14\x53\xc8\x8e\x22\x1c\x00\x71\x50\x1d\x00\xc4\xba\x41\x23\xed\x33\xf7\x39\xff\x93\xc2\xeb\x37\xed\xec\xf8\xc6\xe3\x19\xda\xcb\xbd\x97\x16\x41\x1d\xcb\x1e\xdf\xdb\x88\x9b\x98\x98\xad\x3d\x42\xa9\xd4\xa0\x2d\x0f\x41\x1c\x52\xa4\xdd\x39\x7c\xb2\xac\xc0\x82\xc6\xea\x47\xae\x70\x46\xd2\x6a\x41\xc4\xa7\x09\xa6\xc5\x13\x75\x9b\x6b\x8f\x66\x06\x04\xdc\x4c\xa7\xa0\xe5\x1d\x00\x0e\xee\x00\x6a\xc0\x88\xc9\x3c\xa9\xeb\x00\x35\xbf\x1a\x53\x62\xa1\x9a\x10\xf6\x46\x42\x93\x98\x2d\xbe\xa4\xbd\xcf\xc5\xa7\x4e\x93\x1b\xf2\x88\x76\x41\x1c\xdc\x81\xc5\xb1\x90\x97\xdf\xb0\xfb\x8e\x38\xf0\xbf\x45\x64\x73\xf0\xaa\x7f\x92\x64\x45\x1d\x7f\xf9\x8d\xc4\x6b\x7f\xce\x26\xeb\x3d\x1e\xb4\x6c\x04\xc4\xc1\x1d\xc8\x7b\x56\x8e\xc7\xa9\xf0\x85\xb1\xbe\x29\x35\x80\x32\x0a\x8f\x70\x29\x3a\xb9\xbe\xb0\xae\xc5\xc5\x55\xd8\x4f\xdb\x97\xa5\x47\x09\xe1\x00\x88\x83\xea\x40\xec\x7f\x3b\x00\x7a\xed\x39\xf3\xf8\x23\x56\x7c\xb7\xb1\xd6\xcd\x74\x52\x32\x9d\x2e\xca\x9f\xdf\x36\x3a\xc2\x2f\x8f\xc4\xd5\x10\xc6\x67\xb6\x5f\x5c\x7a\x11\x85\x3e\x8f\xe8\x3b\x88\x83\x3b\xf0\xea\x72\x69\x26\xb9\xc5\x8f\xa1\xd4\x7e\xed\xe8\xaa\x44\x77\xbc\x5b\x7a\x5b\x6f\xbb\xba\x8b\x08\x95\xde\x6e\xdc\x89\x6d\x30\x84\xe2\xd7\x20\x0e\xee\x80\xeb\x76\x28\x8b\x7f\xfa\xcf\xd4\x4a\x81\x02\x2e\xe7\x6d\x54\x9e\x69\xf2\x55\x2c\xee\x1f\x0f\x6e\xbd\xc2\x7e\x72\x6f\x36\x44\x1e\x3a\x9f\x04\xc4\xc1\x1d\xf0\x0d\xe5\x12\x5b\x22\xea\xd1\xb8\x7e\x53\x46\xb7\xf1\x4b\x87\x85\xa0\x76\x62\xef\x77\x23\x92\x7e\x1a\x7f\xbf\xa5\x43\xce\x8b\x50\x32\x0d\xc4\xc1\x1d\xf0\x7b\x90\x3e\x3f\x99\xfa\x86\x66\xf3\xef\xa9\x0c\x56\xff\xbc\xf7\x62\x50\x26\xbf\xe1\x5b\x85\xc3\x16\x91\x86\xfd\x0f\x11\xa7\xd0\x3e\xe7\x20\x0e\xaa\x03\x80\x58\x37\xe8\x1d\xf4\x2c\x07\xe2\xde\xd3\xbe\x6a\x3b\x11\x89\x48\x9b\x2c\x72\x4c\x8a\x89\x6b\xac\x50\x5d\x1a\xd1\xfc\x7a\x5f\x35\x50\xbc\x89\xb4\x4e\xa6\x7a\x10\xd1\x77\x10\x07\x77\xe0\xae\x4f\xc8\xd0\x85\xaa\xcc\xdf\x69\xdd\x89\x09\xfe\x21\x1c\x58\x57\x02\xdd\xe2\x68\x50\x02\x6f\x5c\x9e\xdf\x56\xa5\x7c\x9b\xc1\x00\x7d\x7d\x03\x70\x70\x07\xa6\x93\x9c\xa6\xd9\x05\x02\x12\xf6\x2e\xdd\xfe\x70\x52\xae\x42\x6e\x19\x84\xa7\xe7\x63\xa5\x11\x16\x47\x7d\x73\x0d\xcf\xfe\x7d\x24\xa2\x5d\x10\x07\x77\xc0\xd2\xe3\x1b\x4b\x54\xef\x63\x16\x65\x27\x46\x87\xd8\x07\x1c\x82\x61\x68\x45\x2c\x3e\x4b\x97\xad\x96\x24\x82\xaa\xaf\xe7\x9f\x98\x41\x71\x71\x00\x07\x77\x20\x62\xc9\x38\x46\xd2\x75\xd9\x76\xdd\xd5\x44\xd5\xed\xf2\x25\xba\xe1\x07\x38\x13\x16\xfd\x8a\xa4\xbe\xfc\x84\x5b\xa4\x12\x97\xa0\x99\x72\x10\x07\xd5\x81\x7a\x40\xac\x1b\x34\xad\xf8\x4f\xac\xdb\x0f\x39\xd6\x2d\xd5\xf7\x50\xe6\x97\xed\xc5\x76\xa3\x37\xed\x2f\x4e\x5b\x77\x33\xc4\xe8\x9b\x2d\x8d\x9f\xf2\xfc\xb0\x4e\xac\xb4\x9f\xd6\xb8\x75\x78\x2e\x33\x27\x5b\x48\x97\x8d\x76\xc7\x9c\xae\xe4\x2c\x18\x1b\x8d\xdf\x97\x4d\x67\xc4\x2d\x9c\x0c\xd0\x15\x54\xe7\x51\xbd\xc8\xbf\x13\x97\x4d\xe3\xda\x77\x3e\xf3\x44\xc8\xb1\x6e\x67\xe9\xef\x04\x59\x65\xc6\xb9\x57\x4e\xbd\xaa\x7a\x22\x52\xb5\x7c\x1f\x85\x2a\xfd\x8c\x3e\xcd\xde\xc8\x0c\x90\xec\x63\xcd\x48\x3e\x97\xde\x52\x23\x7d\x36\x2b\x78\x75\x61\xf8\x51\x2e\xcf\x56\xa2\x4a\xeb\x56\x9c\x91\x92\x9a\xe3\xe7\x68\x1a\xcb\x42\x8b\xcd\x5a\xad\x78\xcc\x77\x8a\x1b\x34\xe7\xd2\x5b\xe4\x58\xf7\x27\x55\xb4\x94\x2b\xe6\x51\x85\x02\x46\x7c\x13\x01\xdb\x5c\x74\x68\x07\xb8\xb1\x47\xf6\x6b\x1a\x3e\x11\x0e\xac\x76\x09\x9f\x31\xcf\xa5\xb7\x62\x48\x97\x4d\x61\x26\x36\xbf\x9f\x6c\x5d\x68\xf7\x61\x9c\x98\x21\x85\x4f\xcd\x73\x73\xf4\xaf\x41\xdf\xb5\xde\x6e\x59\xfb\x16\x7c\x77\x86\xc0\x73\xe9\x2d\x72\xac\x7b\x80\x00\xdf\x4c\x60\xc1\xa1\x30\x09\x4f\x96\xe8\xab\xa6\x36\xed\x0b\x2a\xd1\xab\x07\x82\x1f\x34\xbc\xea\x6c\xef\x7b\x8e\x4a\x9e\x4b\x9a\x1c\xe5\x09\xd2\x65\x5f\xf5\xfc\x89\x3b\xbd\x3a\x31\xca\x1c\x51\x1a\x3e\x82\xcd\x67\xbd\x76\x91\x5b\x06\x4f\xae\x49\x54\xc3\x2f\x19\xcd\x6a\xf8\xeb\x39\xcc\x66\xdf\xfb\x7f\xf7\x4b\x3d\xf3\x80\xab\xa4\x22\xa6\x9b\x98\xe2\x94\x53\xef\xf4\x3c\x5f\x5a\x7e\xf8\x14\x2d\x1d\xf7\xb7\xe3\x36\xbd\x49\x84\x59\x0a\xa9\xaf\x67\x0b\x74\x90\x03\x88\x83\x17\x7a\xda\xe1\x68\xe7\x40\xd3\x44\xdf\xdc\x90\x60\xe1\x49\x46\x4c\x41\x34\xfc\x6f\x13\x2f\x33\x09\x5e\xff\x40\xe5\xf3\xd4\x7d\x7b\x79\x13\xd1\x2e\x88\x83\x17\xfa\x28\x0b\x7e\x34\xb4\x81\x8e\x50\xa5\xbb\x83\x6d\x72\x2f\xc7\xb7\x22\x64\x7d\x43\xf2\x59\x7e\x63\x0b\x6a\xbe\xce\x61\x2a\x5d\x83\x0e\xe6\x03\x71\xf0\x42\x8f\x91\x11\x60\xe9\x7e\xb4\x79\x43\xeb\x78\x80\x80\xca\x78\x31\x40\x9d\x7c\xe6\xde\xf0\x85\xf2\xbd\x78\x7b\xdd\xe4\x67\xbb\xf9\xd0\x71\xfd\x20\x0e\x5e\xe8\x09\x2f\x4b\xcc\xb6\xf4\xdb\xdb\x94\x89\xf5\x48\x75\x37\xc7\x4c\x38\xf4\xd4\x29\x13\xa0\xf3\xd2\x06\xd2\xaa\xef\x07\x63\x78\xb8\x22\x0a\x3d\x88\x83\x1e\xf6\x80\x58\x37\xa8\x6c\x9e\x79\xb0\xcd\xb4\xd6\x61\xd5\xe7\x68\x81\x5c\x21\xff\x27\xea\x72\x38\x41\x11\xdc\x8a\x9d\x21\x98\x12\x94\x1f\xff\xb0\x51\x0c\x12\xe7\x43\x87\x07\x82\x38\xb8\x03\x5f\x6e\x94\xd1\xdb\xcd\x6b\x53\xfe\x8a\x27\xad\x54\x67\x9b\x7c\x89\xf7\x04\x83\x73\x9f\xd0\xe7\x88\xe5\xc0\x31\xa1\x8c\xc1\xa1\x12\xd1\x2e\x88\x83\x3b\xb0\x59\x54\xd5\xf3\x8e\x6f\xf9\x7d\xd7\xc5\xbb\x9d\xf9\x76\x0d\x2b\x78\xa9\xe4\xfd\xf8\xd4\xcb\x1a\x7f\xb4\x30\x98\x49\xae\x08\xed\x40\x6b\xc3\x00\x1c\xdc\x81\x89\x13\x61\xa9\xd5\xa0\x26\xb4\x6c\x17\x7c\x7c\x72\xda\x00\x22\xa3\xd4\x16\x59\x4d\xba\xeb\xae\xa1\x32\x2f\x7b\x0b\xa9\x03\xa1\x78\x3b\x88\x43\x3a\x88\x07\x5f\xe2\xd2\x85\x80\x5b\x25\x94\x8e\xec\xfa\x4d\xaf\x62\x29\x95\xf3\x2e\x4b\x70\xdf\x62\xd3\x2a\xe7\xc3\x3e\xe8\xb8\x1a\xf5\x19\xe1\x00\x88\x83\x1e\xf6\x5b\xff\xed\x00\xe8\x19\x76\x96\x03\xea\xd5\x02\x79\xd8\x74\x23\x0d\x6f\xfc\x99\x09\x4f\x1f\x1b\x18\xde\x73\x97\xb9\xa5\xac\x1b\xa3\x4e\x5f\x29\xb0\x19\x76\xe5\xaa\x1b\xb4\x0c\x03\xc0\x21\x1d\x6c\xc3\xd5\xf6\xfa\x26\x9f\x27\x46\xb4\x6b\x5f\x6a\xf4\x09\x89\xfc\x9a\x1c\x7e\xd6\xf3\xd7\x79\x37\x78\x2e\x98\x4f\x87\xbe\xf0\xf1\x43\xb4\x0b\xe2\xe0\x0e\xb0\x65\xc4\xf1\x4b\x61\xa5\x3f\x7c\xe0\xca\xf0\x5c\x4d\x31\x87\x78\x8c\xcf\x47\x27\x85\xf4\x51\xa1\x94\x1d\xc5\x1c\xb1\x27\x37\xd4\x2e\x88\x43\xfa\x16\xb0\x26\xfb\xfd\xd8\xc7\x39\xfd\xca\xe3\x67\xb3\x22\x12\xc3\xa7\x1c\xbd\xe1\xe8\xe4\xb1\x8f\x3b\x3e\xe9\xe6\x6d\x0f\xdb\x97\xbc\x87\x26\xac\x00\x1c\xdc\x81\x99\xac\xba\x93\xc7\x24\x15\xbb\x37\xaa\x79\x82\x1e\x2a\xf9\x3e\xb9\xac\x6d\xe9\xf7\x59\x75\x8a\x8f\xe7\x3b\xee\x55\x8c\xfa\x21\x21\x84\x03\x20\x0e\xaa\x03\x80\x58\x37\x68\x40\x71\x96\x03\xfd\x29\x2a\xb4\x04\x26\x3e\xda\xaa\x5d\xb4\xd7\x57\x39\x4f\x6d\xc7\x7a\x2e\xdc\xc1\x35\xcc\x98\x8e\x5f\x7d\xba\xcc\x66\xad\xe2\x8c\xe8\x3b\x88\x83\x3b\xf0\xc2\x22\x4c\xac\xf9\x6e\x91\x15\x53\x67\x51\x73\x99\xc7\x5d\xc6\xcb\xa5\x6d\xb5\xa7\x14\x03\x84\xcf\xbc\xb8\x24\x70\xae\xca\x32\x42\xb1\x28\x00\x07\x77\x60\x6e\x4e\xaf\xcc\xa5\xa4\x29\xe2\x69\xaa\xea\x75\x55\x03\xfb\x76\xaf\x5a\x17\x99\x42\x2c\xfd\x03\xf9\xe6\xa9\x2d\x7c\xea\x2b\xd0\x84\x2d\x88\x83\x3b\x60\x6c\x9a\x52\x3a\x6c\xbc\x7a\xeb\xcb\x87\x72\xb2\x1c\x1e\x9a\x7b\x53\x3f\xb6\x1c\x1e\x8f\x3d\x75\x96\xcd\x0e\xbf\x3a\xa9\xeb\xa0\x0c\xed\x43\x09\xe0\xe0\x0e\x14\xd1\x54\x55\x34\x73\xa1\x75\x78\xfa\x74\xb7\x84\x4f\xdf\xf6\x6e\x39\x51\x61\xd0\xe2\xc7\x46\x71\x7c\xaa\xc7\xfe\x66\x89\xb6\x09\xe1\x00\x88\x83\xea\x00\xf5\x7f\x47\xf9\x40\xa3\xbb\xb3\x1c\x30\xf7\xae\xa2\xd9\xaa\x0d\x49\x7f\xfa\xa1\xb6\x45\x90\x23\xe9\x8e\x7e\xf9\x43\x4d\x67\xcc\x42\xdb\x90\x77\x6f\x54\xa6\xf5\xab\xab\xa0\xe8\x2d\x80\x83\x3b\xe0\xe3\x39\xf6\xf7\xaf\x53\xff\x8e\x2e\x1b\x03\x87\x40\xea\xaf\x27\x4f\xaf\x1c\xe0\xb5\xa2\xa9\xbd\x48\xea\xd1\x1d\x2a\x25\x55\x85\xea\x0b\x88\x83\x3b\x60\xd8\x97\x8d\xda\xdb\x70\x22\x32\xfb\x87\xe6\x1e\xef\x3b\xae\x4b\x78\x21\x98\xa3\xd5\x33\xae\x92\x0c\x56\xd3\x1e\xd7\x0a\x35\xf7\x11\xed\x82\x38\xb8\x03\xa9\x7e\x0e\xdb\x58\xf1\x63\x8d\xda\xd2\x4d\x7f\x4a\x84\x9e\x38\x1f\x7e\xdd\x12\xbd\xe5\x50\xcb\x9a\x67\x58\xfa\x64\x2c\x26\x0d\xda\xdb\x16\xc4\xc1\x1d\x20\xc7\xf4\xd5\xfe\x64\x24\xb7\x6b\x33\x57\xbc\xf3\x8b\xed\xf6\x61\xc8\xf5\x09\xcd\xa0\x2d\xd4\x5c\x4a\x4c\x6b\xd1\x56\xc5\x15\x43\x84\x03\x20\x0e\xaa\x03\x80\x58\x37\x68\xa8\x7d\xe6\xba\xfe\x7b\x6c\x32\xa6\x2f\x5f\xbc\x99\xbe\xb9\xc9\x8d\xcd\xc2\x3f\x5b\x25\xb1\xcd\xed\x2d\xed\x65\x71\xba\xda\x50\x7e\x29\x78\x32\x09\x5a\xd7\x0f\xe0\xe0\x0e\x98\x19\x35\x34\xd1\x4f\xad\xd5\x7e\x1d\x5f\xcf\x6e\x90\x36\xd1\x98\xb7\x4c\x96\xbe\x2e\x26\x78\x88\x5a\x7a\x95\x55\x23\xf3\x14\x9a\x58\x05\x71\x70\x07\x96\x18\x1d\x78\x67\xb6\xe5\x3c\x1f\xeb\x38\xc8\x78\x39\xdc\xee\xb0\x52\xf1\x35\xeb\xe5\xed\x99\x34\xe0\xef\x15\x79\x61\x5a\x0f\xd5\x01\x10\x07\x77\xa0\x31\x3c\xd3\xc7\xd7\xf2\x88\xbf\x5e\xa9\xcd\xd7\x97\xf2\xae\xbf\x21\xff\x50\x52\xc3\xc9\xe7\xcd\x8d\x9c\xcc\x6a\x2b\xe9\x38\x68\x9f\x13\x10\x07\x77\x40\x58\x37\xdd\xff\xc7\xed\xc8\xfd\xe0\xa0\xd9\x3c\x5d\x06\xae\x1d\xc9\x62\x46\xae\xef\x43\x52\x3c\x3d\x6f\xa5\x68\xe9\x6c\xfe\x12\x22\x1c\x00\x71\x50\x1d\x10\xfb\x6f\x07\x40\xef\x3d\x67\x9e\x7d\x13\xbc\x6f\x9a\x68\x16\x29\x61\x8d\x47\xfa\xf9\x56\xab\x07\xf3\x46\x1d\x3a\xce\x5b\xa5\x97\x25\x9a\x3a\xc1\xd4\x0b\xa9\xc3\xd0\x47\x41\x10\x07\x77\x20\x08\x55\xb5\x59\xcb\xa7\x3c\x2e\xd2\xd0\x38\x89\x31\x2c\xad\x70\xb3\xd7\x67\xef\x3e\xab\x77\x8e\x58\x95\x38\x5a\xc6\x20\x67\x32\xb4\x17\x0b\x80\x83\x3b\x90\x1c\xec\xa9\xf4\x4a\xfc\xeb\x67\x83\x06\x06\x46\xba\xf4\x9a\xa9\xb6\x50\xda\x55\x8f\x83\xd7\x52\xbf\x1d\x1f\xa2\xa2\xdf\xb5\x84\x26\x6a\x40\x1c\xdc\x01\x2c\x4b\xf1\x6d\x3a\x3c\xbd\xf8\xb0\x26\x31\x56\xba\x97\xb2\x3a\x51\x26\x87\x5d\x19\x84\x5e\x5a\xe1\x9d\xd6\x68\x0d\xa5\x53\xd0\xf2\x0e\x10\x07\x77\x60\x75\xab\xbc\x94\x7c\x46\x1a\xd5\x89\xbc\x75\xc5\xca\xfb\xb3\x03\xda\xce\x35\xab\xc7\x6c\x87\xe8\xaf\xe5\x2b\x15\x04\xd4\x95\x7e\x22\x1c\x00\x71\x50\x1d\x00\xc4\xba\x41\x2f\xa1\x67\x39\xe0\xec\x69\x4c\x9b\x63\x20\xf5\x87\x67\x2d\x3e\x7c\x4a\x86\xf6\x93\xad\xdc\x17\x32\x8d\x92\xe8\x99\x78\x0a\x37\x3a\xce\xab\x5e\x0d\x88\xbe\x83\x38\xb8\x03\x64\x01\x5d\x5c\x97\xd0\x54\xd6\xad\x05\xf1\x9d\x6d\x87\x0b\xde\xde\xe5\x14\xee\xfc\xe6\x38\xd8\x14\xc2\x3f\xfd\x57\x7e\x71\x1b\x3a\x54\x19\xc4\xc1\x1d\x28\xd0\xc6\x8d\x6a\x97\x91\x44\x0b\x19\x1b\xde\x5e\xa0\x6a\x78\xe8\x47\xa3\xc5\xef\xd7\x6b\xac\xd4\x2c\x28\x38\xd7\xb5\x75\x50\x81\x68\x17\xc4\xc1\x1d\x10\x1e\xca\x3c\x1a\xa8\x33\x33\x57\x99\xbd\xf8\x30\xa5\x48\x36\xed\x24\xa6\x6e\x6a\xba\xf5\x4e\x12\x41\xac\x92\x5d\x94\xdb\x2a\x14\x43\x07\x71\x70\x07\x9c\xf6\x4c\xaf\x2a\x64\x2f\x9b\x30\xb5\x4b\x1f\xad\x71\xbe\x0d\x0f\x67\xe8\xf9\xc6\xc0\x6d\x66\xaa\xf4\x7c\xdf\x71\x26\x88\x48\x0f\xe1\x00\x88\x83\xea\xc0\x13\x40\xac\x1b\x14\x18\xfc\x27\xd6\xed\x87\x1c\xeb\xbe\x98\x2a\x25\xcf\xd2\xd7\x95\xd7\xb8\xc7\xcc\xcb\x33\xae\x5d\xe8\x12\x57\x76\x2c\x4e\x45\xc4\x88\x2d\x30\xa1\x68\x41\xba\xbd\x79\x6e\x73\x18\xa0\x0b\x9d\x79\x40\xb3\xb9\x05\x29\x3d\x6e\xcb\x40\x3e\xba\xfe\xbb\xb7\x18\xfa\x02\x95\xed\xa2\x0a\x28\x3f\x47\xb5\xa2\xf5\x55\xc3\x2d\x2f\x69\x40\x41\x03\x10\x07\xf7\x34\x92\x2d\x2e\x59\x46\xd3\xf5\xd1\x01\x3b\xd5\x78\x75\xfd\xe7\x77\xb4\x55\x5f\xba\xe8\xb3\xdb\x70\xda\x8d\x57\xab\xda\x57\x36\xa0\x7d\xde\x40\x1c\xd2\x47\x2b\x11\x09\x9b\x32\x37\x85\x45\xa2\x1a\xa2\xb4\x84\x8f\x45\x0e\xa1\x24\x14\xdf\xd7\xdc\x1f\xe4\xdc\x63\x4d\xdd\xba\xef\x15\x0b\xb5\x0b\xe2\xe0\x9e\x12\x0f\xdb\x7c\x5f\x0b\x4a\x37\x51\xd5\xe3\xa6\xbc\x65\x26\xc5\x58\x63\x7b\x7d\x70\xb9\xb7\x38\x67\xd3\x62\x70\xcf\x26\xef\x56\x33\xa2\x5d\x10\x07\xf7\xb4\xde\xf5\xfd\xe7\x2f\x6a\x29\x21\x9c\x7a\x89\x21\x17\x05\xed\x29\x1e\xea\x3c\x65\x62\x0f\x3b\x91\x70\x64\xff\xd4\x9b\x3a\xd6\x93\x8d\xf0\x14\xc4\x41\xb5\x0a\x10\xeb\x06\x45\x82\xcf\x8e\x75\x67\x6b\xe0\xbd\x21\x7e\xca\xf1\xf5\x84\x4d\xaa\x0e\x9b\x0b\xe5\x61\x15\x7d\x15\x99\xb3\xf3\x3c\x0b\x39\xad\xd1\xcf\x85\x02\x72\x65\x44\x44\x1a\xc4\x21\xc7\xba\xf9\xf6\x52\xfb\x9e\x5c\xc3\x20\x26\x99\x1c\xc0\x98\x56\xfe\x95\xa2\xa3\xe6\x8d\x1b\x23\x20\xcb\xd7\x68\x8a\x46\xd8\xd6\x72\x29\x1d\xd1\x32\x88\x43\x8e\x75\x57\xbb\x2d\x25\x84\x5f\xbd\xc1\xe9\x9b\x81\xed\x1d\x13\xc4\x61\xe7\x1a\x15\x52\xfa\xe9\x54\xea\xbd\x6b\x36\xa5\x5c\xed\x57\x8f\x00\x44\xcb\x20\x2e\x50\x9a\x11\x76\x37\x3e\x4d\xd2\x7e\xfa\xdb\xb0\xa7\xb9\x7d\xf9\xe0\x3d\x43\xf3\x5c\xa8\x8d\x24\x73\x7a\x75\x4a\x89\x75\x8b\xdf\x6d\x69\x8d\xad\x2f\x6c\x50\xac\xdb\x63\xa3\x86\x36\xfe\xca\xdf\x79\xbf\xbb\x55\x0f\x9f\xdb\xf1\x88\x78\xa7\x49\xd3\x05\x18\xe8\x97\x6d\xbd\xed\xbf\xc5\x95\x64\x5c\xf4\xef\x58\xf7\xd0\x8e\x4e\xff\xeb\x2f\x99\x89\x4f\x4c\x5f\xd3\x61\x65\x8b\xbc\x73\x5c\xaf\x62\xe7\xe8\xd6\xdb\x8b\x9a\x55\xe7\x95\xb9\x74\x7d\xfd\xdf\x5f\x0d\x2a\x71\x44\xc8\x27\x35\xef\x76\xda\xae\xbf\x7e\xe1\x9f\xaf\xd9\x2b\x94\xe0\xec\xba\x94\xad\x22\x60\xda\x98\xfa\x25\x0f\x75\xee\xff\x5e\xac\x1b\xd4\xb9\x33\x62\xdd\x22\xcb\xbc\xcd\x45\x6c\xdc\x6d\xfa\x39\x39\x31\x61\x2f\x99\x43\x92\x67\xb2\x02\xcc\x51\xee\xe3\xd2\xe5\x79\xc6\xc4\x5d\x8c\x99\xfb\x17\x1a\xd3\x41\xe1\x53\xda\xca\xf7\x5d\x50\x1e\xfd\x35\xd9\x6d\xe7\xae\x60\xf6\x9b\xf4\xf6\x4e\xc2\x1f\x1c\x97\x22\x97\xc3\x63\xaf\x4a\xfc\x0b\x25\xe1\x66\xf1\xea\x13\x7c\x75\xd4\x80\xc5\xff\x28\x62\x74\xc5\xd0\x04\xe7\x61\x92\xf7\x4d\xc6\x1e\x96\xf7\x32\x01\xb7\x7b\xdd\x30\xa1\x58\x37\xe8\xf2\xff\xc4\xba\x5b\x90\x62\xdd\x3b\x98\xee\xc4\xcd\x6f\x24\xd0\xf6\x0d\xe8\x29\xbe\x8f\x15\xcc\x5e\x42\xd1\xea\x5d\x70\x8b\xc6\x5b\xbc\xb6\xb4\x28\xda\xf4\xeb\xe3\x79\x4c\x84\x8b\x23\xc7\xba\x5f\xeb\xc5\x56\x27\x62\xce\x71\x76\xad\x06\x29\xcd\xa8\x8d\xa0\x0c\x92\x2b\x8e\x1d\x2c\x26\x15\x75\xe3\x56\x3d\xc1\x99\xa6\x3e\x97\x73\x46\x5b\x90\x63\xdd\xf9\xdb\x92\x3d\x47\x52\xd4\xa9\xf7\x45\xd8\x77\x4b\xcb\x0d\xc2\xdf\x17\xa1\xc6\xdf\xf7\x95\xee\x32\x9e\xe4\xec\xc8\xa9\x31\xc7\x3f\x97\xde\x22\xc7\xba\xf3\xf6\xbc\xd3\x7f\x98\x9d\x28\x6c\xe1\xd4\xfb\x48\x3f\x72\x61\x7e\xac\x9d\xfe\x61\xef\xa7\xef\x41\xc4\x7c\xdd\x8c\x92\x7d\xe4\xc6\xb9\xf4\x16\x39\xd6\x6d\x23\x9e\x1d\xeb\x14\xb7\x88\x3b\x73\x9d\x2e\xbb\x69\x6b\xec\x39\x66\xa7\xe4\x60\x52\xdb\xa3\x36\xdf\x96\x2e\x2d\x1e\x8f\xb9\xf0\x73\xe9\x2d\x72\xac\x5b\xef\x85\xe7\xc6\xf3\x32\x73\xdb\x1b\x5d\x45\xb6\x71\x64\x99\x5d\x29\xd7\x2f\x58\xfc\xba\xe4\xa4\xf6\x48\xec\xc6\x47\x4f\x0f\x7d\xe7\x73\xe9\x2d\x72\xac\x7b\x73\x7d\x7d\x14\xf7\x66\xdc\xae\x7b\xa1\xff\x3b\x23\xc6\x50\xf5\x7d\xea\x68\x99\xcf\xf1\x9e\x09\x26\x2a\xfe\xb8\x44\x85\x8b\xe7\x12\xd9\x17\x47\x8e\x75\x53\xea\x12\x62\x6d\xcc\xbd\x97\x7c\xd0\x84\xf7\x22\xcf\x80\x75\xae\x94\x31\xb5\xab\x00\xbf\x33\xe5\x8a\x4f\xfd\x15\x93\x77\x41\x01\xe7\x36\x1c\x02\xfd\x52\xcf\x1a\x0e\x91\x44\xfd\xda\x72\x1d\xb9\x7f\x3a\x23\xb3\x31\x1f\x44\x46\x23\x19\xe9\x26\x52\x19\x9c\xc4\xd0\xb5\x38\xe7\xbc\xee\x6f\x6b\x05\x1d\xf7\x03\xe2\x90\xa6\x72\x63\x97\xd4\xb8\xcc\x4b\x74\xff\xb6\x27\x7d\x60\x12\x29\x7d\x8e\xf5\x1b\x7f\xfb\x22\x86\x98\x9c\xc8\x8e\xc4\x30\x1b\xb1\x97\x10\x34\x95\x0b\xe0\xe0\xc3\x21\x23\x2c\xf7\xdf\x3b\x23\x4e\x81\x0d\x71\x9b\xe5\x68\xd4\xd8\xb1\x6c\xa7\xbf\x82\x8a\x7f\x29\x72\x59\xe9\x31\x63\x26\x72\xa2\x43\x53\x2d\x20\x0e\x3e\x1c\x22\xfa\x35\x7f\xfb\xd1\xc9\x67\x12\x59\xf9\x9b\x4f\x78\x7b\x8b\xb9\x2a\xaf\x0f\x8b\x56\x77\x0a\xf3\xdd\x7f\xb1\xe1\x3a\x2a\x6a\x0f\x65\x1a\x41\x5c\xa0\x24\x8a\xf8\xff\x8a\xa1\xd3\xb7\xbc\x0f\x0f\x0e\x7e\x25\x77\xb1\x83\x0e\x6b\xed\x8b\xa4\xcf\xa2\x56\x1e\xe7\x0d\xb6\x6f\xae\xd6\xbe\xe4\xba\x53\x4f\x7b\x10\xb1\x6e\x10\x17\x28\x89\x82\xe6\xe7\x1f\xfc\x3f\xf5\xf9\x3f\xde\xdc\x40\x55\xf3\x2c\x05\x84\x08\x9a\xf7\x04\xbb\x09\x35\x28\x13\xc7\x5b\xff\xda\x3e\x5f\xb1\xd1\x8e\x68\xec\xd4\xd1\xd0\xf9\x60\xd8\xfa\xc5\x89\x73\xc9\x07\xda\x9d\x16\xc0\xc1\x15\x98\xe4\x6e\x1e\xbf\x1a\x8f\x6f\xca\xf5\x05\x4f\x2d\x65\xc1\x5b\xc7\x2e\xfe\x40\x1a\x07\x0b\xb3\xc3\xd3\xe8\x70\xf8\xed\x60\x1c\x74\x4a\x19\x88\x43\xda\xa9\xd9\x36\x38\xc5\x78\xef\x42\xdc\x55\x9e\x54\xbe\x5f\x94\xe8\x1a\x0f\x12\xd3\xa7\x4a\x24\x52\x96\x0e\xc7\xd8\xe3\x8a\xdd\x71\x09\x11\xed\x82\x38\xb8\x02\xb1\xf9\x8d\xf6\xba\x39\xa1\xa1\xca\x9f\xd6\x27\xc2\x0f\x6d\x95\x2e\x1f\xf4\xdc\xcc\xba\x36\xb7\x57\x4c\xe0\xa3\xd9\x19\xcb\x04\x7d\x29\x02\x71\x70\x05\x44\x33\xac\x63\x2a\x71\x98\x3a\x96\x1b\xe7\xbf\x7e\xd2\x9b\x7f\x38\xc3\x88\x1b\x78\x40\x24\xb2\xf8\xce\xad\xb2\xc5\x45\x42\xbe\x17\x31\x22\x06\x71\xff\x28\xf0\xff\x3c\x2c\xff\xc3\x01\xd0\x23\xec\x2c\x07\x28\xe7\x69\xad\x15\xaa\x59\x19\x31\x50\xe9\x02\x71\xe7\xf1\x3a\xc8\x3b\xda\x05\x78\x88\x24\x9e\xb5\x5e\xd1\xec\xac\xf0\x60\x82\xde\xb2\x41\x1c\xd2\x49\x75\xf3\xba\xa5\x26\xad\xa7\x1c\x35\xca\x7f\x09\x2b\xaa\x51\x7e\x2e\x9f\x66\x0d\xb1\xbc\xa6\x1a\xdb\x74\x22\x2c\xbc\x40\xe5\x09\xfd\xaf\x40\x1c\xdc\x81\xea\xd9\x6b\xf3\x8d\xf7\x87\x49\x73\x4e\x53\x7c\x7f\x7f\x16\x8d\x2a\x37\x7a\xfd\xc3\x9b\x9d\xb1\xe3\x67\x7a\xda\xa0\x2b\x25\xf7\x38\xa2\x5d\x10\x07\x77\xc0\xc1\x85\xdb\x40\x36\xf6\x6f\xc0\xba\x39\x36\x7b\x3c\x4e\x9e\xe9\xe2\x6a\x84\x1a\x17\x39\x91\x75\x32\xd5\xf5\x13\x15\x53\xfa\x02\x44\xbb\x20\x0e\xee\xc0\x60\xab\xc9\xbb\x63\x89\x43\xd5\x64\x35\xfa\xa2\x26\x12\xb6\x4b\x5d\xd6\xbf\x07\x2f\x9d\x0e\xfe\x20\xdd\xbe\x9b\xed\xe2\xf3\xd4\x08\xe1\x00\x88\x43\x38\xd0\x02\x88\x75\x83\xc6\x13\x67\x39\x70\x18\x62\xca\x4c\xd9\x13\xff\xc5\xae\xfa\x3d\xd9\xe7\x77\x2c\x9a\x18\xf2\x4c\x6d\x77\x07\xaf\x19\x26\x6c\x79\xb6\x0a\x68\xf0\xe6\x22\xfa\x0e\xe2\xe0\x0e\x28\xad\x8d\x4c\xf4\xb8\x2c\x18\x63\xbf\x24\x8b\xf6\x19\x98\x18\x5a\xf9\xfe\x2c\x61\xfe\x88\xdb\xf2\x52\xf5\x94\xd5\x74\xe5\xe9\x0b\x44\xbb\x20\x0e\xe9\x24\xd8\x30\x14\xfd\x8d\x84\x4f\xef\x57\xae\x96\x95\xa5\x48\x33\xac\x30\x47\xfd\x72\x78\xc3\x50\x3a\x42\xf0\x27\xc0\x38\x3e\xca\x8a\x05\xd1\x2e\x88\x43\x5a\xf0\x7c\x95\xfd\x47\x98\xee\x25\xfe\xc9\xc3\xf0\x8b\x83\x0e\xcc\x15\xd3\x25\x93\xa4\x27\x75\x0b\x2b\xdc\x35\x06\xd7\x4c\x8e\x02\xa0\x4d\xa0\x40\x1c\xdc\x01\x3f\x3b\xd9\x30\xaf\xa6\x1b\x97\x0b\x15\xb8\x71\x17\x24\x5b\x02\x7f\x1b\x65\xe1\x46\xe1\xa2\x8c\x76\xb9\x79\xdb\x32\xf4\xb2\x4b\x41\x51\x3e\x00\x07\xd5\x01\x40\xac\x1b\x34\xb8\x3b\xcb\x01\xa2\x4d\xeb\xba\xd7\x74\x8f\x64\xae\xd9\xa3\x14\xc4\x3a\x35\xc9\x78\x31\x11\x1d\x49\x68\xaa\xef\x25\x86\x3e\xfc\x25\x4a\xa8\x0e\x9d\xdc\x0c\xe2\xe0\x0e\x1c\xe0\x61\x62\x7e\xa4\x50\x19\x6b\x37\xec\x4b\x19\xd1\xce\xd8\xee\x09\xb3\xbc\xf3\x22\xbc\x47\x90\xbf\x41\x4f\x73\xb1\x28\x17\x3a\x11\x17\xc4\xc1\x1d\x30\x93\xaa\x49\x28\x3b\x46\x49\xfe\xd2\xcc\x1d\x6f\xac\x8b\x46\xa5\xcc\x7a\x22\xc5\x8d\x46\x28\x13\xa7\xa0\x25\x42\x70\x73\x15\xfa\x7b\x41\x1c\xdc\x81\x20\x49\x03\x8b\xc7\x0c\x2f\x97\xb3\xfc\x84\x5e\xf5\x96\xf8\x16\x06\x1c\x6b\x68\x54\xf4\x37\x72\x0e\xfd\x9a\x3d\xba\xa2\x81\x1a\x0d\xcd\x3c\x03\x38\xb8\x03\xbc\x57\x78\x04\xd9\xf7\x2f\xdd\x79\x7a\x83\xaa\xfb\xe5\x98\x8e\x9d\xe0\x50\xc5\xe2\x75\xd4\xee\xba\x72\x83\x6d\x66\x32\x87\xd5\x1b\x08\x07\x40\x1c\x54\x07\x00\xb1\x6e\xd0\x48\xfb\xcc\x53\x4b\xa7\x33\xc5\xd0\x9a\xda\x55\x4c\x62\x85\x0d\xd4\xdc\xa3\xa6\x88\x04\xdf\x07\xcd\xa4\x33\xc7\x25\xab\xa3\x88\xe2\x1f\x7b\x40\x33\xa3\x20\x0e\x69\x73\x12\xca\x86\xfd\xc0\xa3\xd6\x8e\xd1\x4f\xcb\x33\x2c\x0c\x3e\x16\x54\x78\x6a\x54\x0f\x87\x3f\x47\x2e\xac\x28\x9a\x5c\x35\x4e\x85\xbe\xec\x82\x38\xb8\x03\xf1\x1f\x16\x7b\x6f\x19\x47\x06\x88\x2c\xbb\xc4\xf6\x2d\x56\x3c\x97\xc2\xa2\x6b\xd3\xa0\x65\x60\x70\x5d\xff\x98\xe7\xff\xc6\x3d\x03\xd1\x2e\x88\x83\x3b\xc0\x48\x29\xba\x13\x4d\x98\x64\xf0\xe7\xf9\x21\x83\xd4\x4f\xed\x26\xb1\x7d\xe3\xdc\xd2\xae\x5b\x0f\xb8\x85\x2a\x1a\x67\x30\x3b\xaf\x22\xda\x05\x71\x70\x07\xde\xa0\x18\xbe\xcb\xd2\xa5\x2f\xa1\x3d\xd2\x2b\x4f\x6a\x7e\x8c\x47\x97\x6a\xe3\x8e\xa3\x7a\x8d\xcf\x94\x7c\xcf\x9f\xab\xf8\x47\x33\xc2\x01\x10\x07\xd5\x01\x40\xac\x1b\xf4\xda\x73\xe6\xe9\x1d\x8e\x24\x65\xfa\xaa\x56\x9d\xf5\xfc\x6a\x46\xbb\x1f\x4d\x56\xfd\x34\x37\x38\x65\x3f\xce\xfd\x20\xca\xdb\x99\x38\xd4\x3e\x11\x86\x22\xed\x00\x0e\xee\xc0\x87\x5f\xb8\x55\xf2\xe2\x7d\x05\x07\x9e\xb8\x13\xa9\x41\x77\x98\xf1\x2a\x8b\x3f\x45\xc9\x47\xbe\x1c\xbc\xe0\x48\xa6\x39\xd8\x03\x6d\xfe\x02\xe2\xe0\x0e\xe8\xa1\x2d\x26\xcc\x9d\x78\xc6\xaf\x57\xfe\xfd\xd9\x9d\xa5\x2a\x40\x2d\x52\xce\x56\x5e\x4e\x8e\xce\x71\xb8\x63\xd9\x19\x2a\xa2\x82\x68\x17\xc4\xc1\x1d\x50\x08\x7a\x10\x2a\xe9\x27\x24\xf3\xcc\xa5\x5b\xf2\xba\xf0\xbc\x36\x57\x01\x13\xea\xf0\x9d\x9b\x32\x8f\xfd\xf1\xba\x79\x86\xf6\xa1\xa8\x30\x88\x83\x3b\xf0\xc0\x8d\x7f\x8c\xb7\x4c\x4f\x4c\xe8\xcd\x6c\x12\x9d\x59\x6d\xb6\x8d\x93\xfc\xb3\x57\xab\xd4\x0f\x5d\x2d\x4b\x3a\x06\x95\xd6\xd3\x10\x0e\x80\x38\xa8\x0e\x00\x62\xdd\xa0\x77\xd0\xb3\x1c\xd8\x8b\x49\x1f\x26\xb1\x49\xe3\x50\xcf\x30\xeb\x60\x99\x96\xb3\xd4\xb9\xb3\xd2\xbb\x8f\x9d\x10\xc3\x3c\xf0\xfd\xdd\x0d\x2e\x4f\x6a\x44\xdf\x41\x1c\xdc\x01\x1c\xc5\x38\xc1\xce\x54\xeb\x4e\x6d\x52\x47\x46\xbc\xed\xc7\xd7\xe6\x6a\x32\x98\x4f\x7e\x7c\x55\x6b\xc6\x21\xbb\x6d\x1c\x67\x09\x25\x26\x40\x1c\xdc\x81\xd5\x67\x3e\x1b\xe1\x58\x41\xab\xe8\x95\xf8\x38\xac\x05\x37\x19\x6e\xf0\x49\x5f\xcd\x27\xed\xc5\xf5\x5c\x97\x50\x26\x99\xbd\x0c\x6d\xd8\x02\xe2\xe0\x0e\xac\x78\x13\xc9\x68\xc7\xe9\x46\xfc\xd6\x89\xa4\x66\x50\x2d\x70\x09\xad\x40\xe7\x60\x1a\xab\x1d\x3e\xb4\x4b\xfd\xc0\x6a\xf6\x57\x03\xd1\x2e\x88\x83\x3b\xb0\x19\x7a\x21\x3a\x6e\xb1\x25\x56\xac\x52\x08\x8d\x39\xda\x21\x24\xb6\xd6\xb8\xa7\x9c\xa1\xa3\xa3\x24\xa9\x4f\x56\xd2\xbc\x85\x1b\xe1\x00\x88\x83\xea\x00\x28\xd6\x0d\x9a\x56\xfc\x27\xd6\xdd\x82\x1c\xeb\x8e\xc1\xfe\xb8\xc4\xec\xf8\x3d\xc4\xe0\xb2\xb7\x41\x0d\x2e\x01\x4a\xb6\x10\xd1\x5b\x96\x3b\xd9\xf7\x55\x67\x8e\x1c\x6b\x96\xad\xcf\x65\xb7\x6e\x71\xe4\x58\xf7\x4a\x88\x27\x36\x9b\xb2\x04\x06\xbb\x57\x6f\xca\x40\xe9\xc0\xb1\xfb\x8b\x91\xa8\x37\xc5\xb2\x24\x87\x47\xa2\x9c\x1f\xe6\x8d\x1d\xcf\x65\x9e\x08\x39\xd6\x4d\x4c\x27\xa7\xca\xdc\x68\x77\x2f\xe6\x8b\x9a\xa0\x1a\xc6\x64\xd4\xeb\xbe\x8a\x09\xff\x5b\x28\x27\x0f\xc6\x0c\x7d\x0e\xa4\x46\xcf\x65\xb7\x6e\x71\xe4\x58\xf7\x54\x8a\xa8\xc9\xe8\x73\x11\x7a\xb7\x5b\xd1\x43\x3b\xb5\x98\x35\xd2\x5d\xa8\xa9\x81\x13\xee\x44\x33\x49\x47\x3b\x18\x1d\xd3\xe3\xe7\xd2\x5b\xe4\x58\x77\xd7\xe0\x70\xf1\x12\x6a\x40\x92\x4a\x58\x0a\xd7\x70\xea\x01\x63\x57\xb1\x60\xb8\xf9\x82\xa8\xfe\xfc\xca\x1a\x3d\xd6\xca\xe8\xf7\x73\xe9\x2d\x72\xac\xdb\xb9\x85\x47\x0b\xd5\x65\xd9\x7b\x77\x3f\x56\x70\x31\x58\x62\xbe\x36\xad\xd5\xbd\xfc\x72\x62\xdc\xcb\x26\x2c\x29\x77\x6f\x2b\xa3\x73\xe9\x2d\x72\xac\x3b\xe5\x57\x8b\x69\xec\x9d\x59\x0f\x4b\x41\x52\x51\x73\xdc\x7b\xdd\x5d\x66\xad\xea\x02\xb5\x45\x18\x9f\xd8\x65\x1e\x3f\x09\xcd\xf7\x38\x97\xde\x22\xc7\xba\x9f\x4f\x7d\x0f\xb1\x6d\x2d\x7c\x3c\x97\x7e\xcd\x48\xd8\xe1\x13\x87\xab\xa9\x1f\xc3\x06\xbd\x44\x66\xff\x9f\x47\x29\x7d\x7e\xcf\x79\xcf\x6d\x0e\x10\xf4\x4b\x3d\xab\xd0\x8f\x2e\xb4\x48\xc4\xdd\x65\x65\xce\x8b\x0f\xfc\x6b\x74\x50\x94\xee\x54\x7e\xea\x36\x36\x44\x5f\x9a\x2c\xcd\x28\xd1\x56\xd7\x0c\x1d\xab\x06\xe2\xe0\x85\xfe\x87\xd6\xd0\x36\x26\xda\x4f\xc2\xf4\xe5\xd6\x57\xb6\x5f\xc4\x4b\xc7\xca\xaa\x0d\x7b\xff\x86\xb8\xf6\x1a\xcf\xb1\xf1\x36\xa6\xf0\x22\xda\x05\x71\xf0\x42\x6f\xec\x6f\x8a\x4b\x10\x96\xa6\x20\xa9\xac\x7d\x7f\x61\x1c\xc3\x3b\xa5\x71\xc8\xea\x55\x7f\xad\x4a\xb9\x8d\xa8\x0d\xfa\x6c\x34\x1b\x34\x90\x04\x70\xf0\x42\xef\xe2\xfc\xb0\x62\xd7\x24\x6f\xd3\xf2\xde\xcb\x15\x2f\xf1\x08\x14\xc5\xb1\xa9\x19\xf7\xdf\x98\xf3\xc9\x5c\x16\x81\xd5\xaf\x9f\x43\x93\x20\x20\x0e\x5e\xe8\x7f\x58\x3a\x60\x06\xfe\x9c\x4e\x59\xc6\x34\x5b\x57\x78\x94\x92\x6c\x72\x61\xfa\x13\x41\xe4\xd8\xcf\x9a\xfc\xa6\xeb\x78\xaf\x0f\x9c\x10\x85\x1e\xc4\x41\x0f\x7b\x40\xac\x1b\x54\x36\xcf\x72\xa0\xb3\xeb\xa2\x8d\x15\x95\xbf\xd0\x69\xb9\x14\x95\x16\xbb\x29\x17\xee\x6a\x51\x57\xce\xc5\x37\x0e\x71\x98\x64\x7e\x81\xc4\x7b\xd0\x7a\x3b\x10\x87\xb4\x4b\x75\x3e\xa7\xc2\xa5\x8a\xba\xd5\xa3\xd4\xac\x4c\x61\x77\xfa\x58\x19\x72\x25\x7e\x2d\x0b\x8b\x57\x57\x1e\xa3\x3c\xd8\x8e\xb8\xac\x8b\x68\x17\xc4\xc1\x1d\x40\xbb\x5a\x7d\xf7\x8e\xf4\x1f\x51\x7a\xd9\x0d\x3c\x42\xcb\xa3\x28\x52\x4d\x19\xf6\xc7\x45\x82\x3e\x86\x7f\x5f\x0b\xee\xf7\x8f\x74\x21\xda\x05\x71\x70\x07\x2e\xc7\x37\x36\xd0\xcf\x0c\xc5\x49\xb1\xa9\xdd\x5d\xc7\x0d\xfc\x75\x7b\x93\x31\x31\x32\x5c\xd0\x9b\x99\x97\xa9\x37\xa9\x46\x14\xda\x49\x12\xc4\xc1\x1d\x48\xe7\x40\xbf\xc7\xe0\x5a\xbb\xd6\xeb\xb5\xe4\x75\x10\xae\x20\xb9\xf5\xe6\xda\x66\xa2\x66\xaa\x24\x8a\xc1\x76\x6e\x67\x99\x0b\x34\xe8\x07\x71\xd0\xc3\x1e\x10\xeb\x06\x3d\xc3\xce\x72\xe0\x63\x6e\x76\xd4\x58\xb1\xd5\xf6\x2a\x4e\xb8\xfb\xf7\x01\x54\xd1\x3a\x51\x6a\x5a\xf4\x6b\x2d\xa5\xb6\x7e\x91\xea\x01\x49\x72\xa8\xd0\xc4\x07\x80\x83\x3b\xe0\x94\x13\x7d\x25\x23\xce\x99\x69\x73\xcf\x5d\xf3\xc7\x0b\x62\x3a\xc3\x87\x06\x6e\x07\xbd\x9b\x51\x7a\x7a\x98\xae\xab\x7b\x68\x50\xec\x12\xc4\xc1\x1d\x70\xfa\xf8\xc0\xce\xd8\x81\xd6\xb2\x7a\x2a\x1d\x87\x58\x50\xa4\x7f\xa1\x69\x98\x37\xcc\x36\x5a\x77\x4a\x25\x51\xca\x2c\x6a\x0b\x5a\x7b\x0a\xe2\xe0\x0e\xbc\x75\xd8\x8d\xbe\xf6\x18\x4b\xc2\xdb\xdb\xda\x55\x7c\x7b\x8f\x4d\x83\xd8\x9e\xe7\xdb\xac\x27\xed\x67\x17\xb5\xc7\x76\x54\x9d\x0e\x88\x76\x41\x1c\xdc\x01\x1c\xdc\xc8\x64\x16\x63\x27\x72\xfb\x2e\xe5\x5f\x8f\xc5\x58\x67\x96\x0f\x5f\xb7\x27\xb2\x2f\x1c\x37\x38\x11\x93\xed\xe3\xcf\xbe\x41\x38\x00\xe2\xa0\x3a\x00\x88\x75\x83\x06\x14\x67\x39\xf0\x5a\xd6\x70\xdf\x01\x87\x70\x39\x4f\xe6\x4d\x5a\xc9\x8f\x4c\xe3\xd2\xb6\xf5\xd2\x3d\xfd\x1f\xf1\x7e\x25\x58\x1b\x3c\x4c\x41\x0b\xd0\x76\x3c\x00\x0e\xee\x00\x9a\xde\x5d\xc7\x24\xa6\xc6\x34\xa9\x28\xaf\xdd\x07\x3e\xaf\x1c\xf2\x7a\xa3\x71\xa7\xc5\xf6\xde\x1b\xba\xa6\x5c\x53\x30\x1d\x5f\x84\x7e\xaf\x00\x0e\xee\xc0\x9e\x39\xb5\x6c\xf2\x05\x7c\xd4\x8a\xf1\x57\xea\x2a\x85\xe4\xd2\x96\x05\xbe\xbb\x3c\x58\x8c\xe2\x4d\x7a\xdf\x47\x57\x4f\x31\xa1\x65\x18\x20\x0e\x69\x4d\x37\xbe\x83\x5c\x8b\x5a\xf9\xfd\xca\xce\xbe\xf5\xc5\xba\x35\x7b\x17\xee\x6a\xb5\xa8\x85\xbf\x1b\xdd\x71\x74\x71\x52\x4a\x11\xd0\xbe\x21\x20\x0e\xee\x00\x3a\xad\xd2\x7e\xfa\x4e\x60\xc6\x5e\xd0\x48\x1b\xee\xcf\xf6\xf5\x0f\x36\x3e\x1c\x33\x96\xb3\xa2\x6b\x57\xc6\x59\xa4\xbd\x13\x0c\x10\x0e\x80\x38\xa8\x0e\x00\x62\xdd\xa0\xd1\xdd\x99\x4b\x7c\x9a\x59\xb5\x4b\xf6\xb7\x17\xd8\x5f\x54\x7d\xf8\x35\xde\xc8\xdc\x90\xb4\x9c\xb1\x5a\x25\x10\x78\x34\x80\xe3\xaf\x2a\x1c\xf7\x05\x5a\xe2\x03\xe0\xe0\x0e\x1c\x91\x2b\xd3\x97\xfc\x7e\xd0\xb5\xa4\x6c\x26\x55\x4b\xf9\x20\x41\x72\xad\xdf\xc9\xee\x2b\xbb\xce\x9c\x4b\x59\xba\x5e\xe2\x25\x35\x44\xbb\x20\x0e\xee\xc0\x0b\x63\x3a\xae\xaf\xb4\x4a\x11\x69\x57\xdf\x2d\x1f\x15\xf3\x4e\x6b\x61\xf0\xd4\x32\x5e\x8f\xa7\xca\x9a\xe4\x1a\xff\x3e\x67\x0e\x6d\x21\x05\xe2\xe0\x0e\x1c\xf4\xfa\xe5\x07\xbf\x8f\x9b\xcc\x94\x09\xaa\x65\x64\xcd\x36\xa9\x1e\xf5\x5f\xbf\x7a\xd8\xe6\x6a\x81\xa5\x4b\x10\x8e\x9f\xf5\x09\x9a\xb4\x04\x70\x70\x07\x5c\x88\x25\x7e\x3e\x13\x33\x5e\x7f\xa8\x4f\xd6\xf0\xa6\xb7\xf8\x66\x60\xa0\xa7\xb2\xb7\x12\xee\xb3\xd3\xa9\x0e\xee\x7a\xfa\x20\x7c\x84\x03\x20\x0e\xaa\x03\x80\x58\x37\x68\xa8\x7d\x96\x03\x75\x35\x89\x96\xc5\xa8\x71\x78\x1f\x5b\x5e\xba\x69\x90\x77\xe4\xc8\xcc\x7d\xf7\x39\xb9\x98\x28\xd9\x1f\xcf\xe1\x4b\xbb\x74\x77\x06\xd1\x77\x10\x07\x77\x80\x2d\xf7\xbe\x7f\x43\x17\xb5\xad\x52\xe0\xf4\xb2\xa2\x93\x7a\xd5\x9b\x25\xd9\x1a\x4f\x89\xfd\xe7\x44\xca\x96\xce\x4b\x7d\x0f\xa1\xff\x15\x88\x43\xfa\x2e\xfc\x1d\xe7\xd8\x51\xca\x44\xcd\x62\xd1\x05\x0b\x53\xd0\x1c\xbb\xe9\x5b\xbc\x08\xae\xe8\x03\xbb\xa1\x90\xb1\xc7\x57\x6c\x62\xac\xa1\xef\xc2\x00\x0e\xee\xc0\x60\x5f\x55\x9c\xb5\xfa\xd0\xdb\x0b\xbe\x3e\x5c\xf4\xe2\x3b\xb1\x54\xaf\x69\x13\x9d\x15\x7f\xdd\xd6\x9f\x62\xfa\x41\xbe\xad\x07\x8d\x8d\x41\x1c\xdc\x81\x12\x9f\x72\x56\x9e\xdf\xfa\x91\xcd\x25\x26\x39\xa3\xc3\x4a\x12\x43\x17\xd2\xa6\xd6\x8a\x69\x5e\x0f\x6d\x54\x1e\xe6\x59\x86\x64\x21\x1c\x00\x71\x50\x1d\x00\xc4\xba\x41\xef\x3d\x67\x39\x50\x55\xc7\x34\x23\x8e\xda\x15\x6d\x4d\x36\x24\x46\x7a\xc7\x4f\x54\xe9\x58\xc6\x29\xdc\xb9\x22\x58\x3c\xe8\xc5\x25\xd3\xb8\x34\xe8\x23\x1b\x88\x83\x3b\xf0\x4e\x34\x98\x1a\x85\xe9\x69\x2f\xe5\xef\x48\x7d\x07\x11\x55\xd2\x25\x0e\x19\x91\x51\x8c\x2a\x79\x02\x5b\x7e\xa5\x28\x3c\x71\x68\xf9\x24\x88\x83\x3b\xf0\x9d\xc0\xde\xc3\x5f\x78\x2e\xe2\x21\x15\xe6\xab\xd6\x1b\x4f\xef\xe5\xbf\x56\x8d\x64\xcf\xd9\x37\x21\x37\xb1\xf0\xc4\x8c\xe1\x81\x8e\x71\x06\x71\x70\x07\xc4\x69\x79\x05\xbf\x06\xb2\x7f\xfd\x60\xcf\xd1\x9a\x9f\x58\xff\xa3\x82\x36\xb0\xbe\x4a\x7f\x38\x51\xe1\x77\xd2\x08\xdb\xc0\xe3\x44\x44\xbb\x20\x0e\xee\xc0\xa7\x17\xc7\x2e\x28\xed\x54\x32\xb7\x1b\xb3\x39\xec\xe9\xd7\xfa\xca\x4f\x1f\x5e\xb0\xdf\x31\xb9\xa1\x84\xaa\xb1\x88\x6f\xf4\x80\x05\xe1\x00\x88\x83\xea\x00\x20\xd6\x0d\x7a\x09\x3d\xcb\x01\x3a\x01\x7a\xdb\x85\x31\x27\x01\xce\x6d\xac\x11\xa3\xcf\x2f\xf9\xab\x23\x14\xea\xd8\x9b\x83\x2a\xee\xad\xab\xcb\xa2\xc5\x34\xc7\x21\xfa\x0e\xe2\xe0\x0e\xc8\xf1\x9b\x3e\x32\xb6\xc6\xd3\xb5\xc0\xc1\xab\x36\xcc\x08\xde\x2b\xf8\xc5\xb6\x61\x9f\xff\x36\x54\xe8\x17\x2b\x9f\x30\xc1\xc2\x4d\x44\xbb\x20\x0e\xee\xc0\xc3\xb9\xa3\xe3\x9b\xf7\xec\xfe\xd2\xc4\xdd\x51\xe0\x27\xe2\x90\x8d\xb8\x89\xb5\x72\xf1\xbd\xf2\xbb\x69\xfd\xa8\x4c\xd3\x53\x03\x28\x2e\x0b\xe2\xe0\x0e\x2c\xec\x07\x73\xf0\x5f\x2b\x9d\x49\x4e\xb8\x7c\xd2\xf4\x74\xda\xc9\xf8\x5b\xb7\x7e\x15\xfe\x60\x84\x30\x8b\x7c\x70\xaa\x70\x19\x74\xda\x08\x88\x83\x3b\xa0\xee\xd6\xf4\xb5\x21\x21\x50\xd8\x68\xdd\xb8\xcb\x96\x4e\xa3\xfe\xd3\x6e\xc0\x23\x4c\x33\xcf\x4a\x65\x65\xae\x03\x6a\xd3\x8b\xd0\xbb\x21\x88\x83\xea\x00\x28\xd6\x0d\x0a\x0c\xfe\x13\xeb\x6e\x41\x8e\x75\x6f\xd6\x1f\x5b\x99\xa8\x71\x9a\xdf\xd6\x8d\x64\x32\x47\x4f\x7f\x9e\xc2\xd9\x79\x9d\xf5\x82\xe8\xf6\xf2\x10\xae\x43\x1a\x97\x9f\xc2\xb9\xcd\x61\x80\x2e\x74\xe6\xc9\x02\xcf\xb4\x13\x59\x7b\xd6\xc5\xc4\x7a\x3a\x58\xb6\xb7\x9f\xdd\x60\xb3\x24\xa1\x95\x9f\x6b\x4b\xc7\xa4\xf4\xaf\x88\xfb\xe5\x12\x86\xf8\xff\x80\x38\xb8\xa7\xcc\x76\x7c\xbe\x9a\x33\x0c\xd8\x77\x94\xb2\x1e\xe4\x18\xd8\x7d\xe3\x49\x66\x5c\x7e\x29\xfc\xc0\x85\x64\x29\x6f\xf8\xa4\xc4\x10\x7a\x1f\x04\x71\x70\x4f\x25\xef\xf8\xd9\xe6\x9f\xf6\xc4\x0b\xfd\x18\xfd\xba\xe3\x2f\x78\x3b\xa8\x51\xb4\x7f\xe9\x4a\x68\xed\x51\xb6\xab\xec\xd5\xdf\x28\x4e\x88\x76\x41\x1c\xdc\x53\xce\xe3\xae\xad\x97\x8b\xcd\x14\x98\x03\x93\x82\xa3\x66\x7e\xaf\x08\x92\x87\x50\x15\x82\xe5\x82\xf7\x33\x77\x15\xec\x0d\x1f\x42\x7b\xa6\x80\x38\xb8\xa7\xcd\x5e\xa9\xef\xd0\x57\x2a\x36\x15\xa5\x1a\x5d\xde\x71\xa6\xa4\xc7\x4c\x4b\x8c\x4d\x7c\xc2\x20\xc4\x64\xa9\x98\x1d\x24\x61\x65\x45\x78\x0a\xe2\xa0\x5a\x05\x88\x75\x83\x22\xc1\x67\xc7\xba\xdf\x3d\x50\xde\x9f\xaa\x8a\xe5\xfb\xac\xaa\xf4\x65\x78\xc6\x91\xaf\x62\x01\x37\x82\x0e\x77\xd6\xb9\xec\xa0\xdc\xa5\x39\xc6\xef\x39\x22\x22\x0d\xe2\x90\x63\xdd\x74\xb1\x46\xa6\x14\x7d\xe3\xb8\x39\x8e\x0f\x25\xe4\xf7\x3c\x3b\x23\x8d\x68\xb1\x15\xef\xc5\xb5\x2d\x7a\x44\x68\xe2\xb2\x17\x3c\x42\xb4\x0c\xe2\x90\x63\xdd\x1e\xfc\x4e\x58\x99\xb6\x06\xe3\xcf\x58\x89\xff\xb0\x3a\x69\xf9\x17\x5a\xab\x89\x7e\x08\x1c\x59\xac\xbb\x88\x5e\x41\x5f\xe4\xfb\x07\xd1\x32\x88\x0b\x94\xf6\x83\xdd\x8d\xf1\xbd\xaa\xcb\x0f\x9a\x9d\xe5\xa8\xbc\xaf\xed\x7f\xb4\xa1\xde\x9b\x60\x25\xca\xd8\xf9\xec\xe7\x1d\xc4\x3c\xae\xe6\x66\x2a\x58\x0d\xc5\xba\xbf\xf6\x4f\x9f\x3e\x0d\x97\xd6\x37\xc0\xdf\x7e\x28\xa0\x49\x49\x44\xad\xf4\xf0\x8e\x5f\x9f\x45\x7f\xd0\x0b\x19\x3f\x1f\x49\x4c\xe7\x7f\xc7\xba\x1d\x24\x58\xf4\xf1\x74\x9e\x5a\xe5\x0b\xed\x2c\x24\x58\x8b\x52\x88\x4b\xcd\xe8\x35\x89\xcd\x08\x52\x06\xbf\xb4\x89\x79\xf8\xbf\x66\x32\x35\x1c\xc2\x2f\x99\x4a\xcf\xa0\x3f\x5b\xed\x92\x7b\xaf\x9b\xd7\xe4\xb5\x28\xe4\x35\x3b\xeb\x36\xe7\x7c\x37\x92\xa4\xc3\x77\xff\xd6\xff\xbd\x58\x37\xa8\x73\x67\xc4\xba\x2f\xcc\xca\xb7\xe8\xa2\x9f\x14\xb0\xfb\xde\x5a\x33\x78\x91\xfe\xaa\xc4\xa2\x30\xd2\x48\x83\x7c\xae\xc3\xcc\xe6\xf7\x73\x4f\x91\x7f\x6f\x3d\x73\xd8\xa6\xa0\xbd\xf0\x86\x4a\x78\xc0\xa8\xe2\x66\xd4\xef\x57\xc3\xf4\x38\x8e\xeb\x6a\x8b\x0c\x3e\x4e\x4b\xfb\x33\xf5\x62\xd6\xff\x3e\x29\x92\x9d\xd5\x50\xe9\xc7\xbb\xb9\x95\xdd\x6b\xa4\x6b\x46\xa1\xa5\xb7\x57\x88\x4a\xaf\x38\x3f\x61\x1a\xbb\x9c\x49\xc7\x2b\x7e\xc3\xda\x14\x8a\x75\x83\x2e\xff\x4f\xac\x1b\x45\x01\x5e\xcd\xcd\x1b\xbf\x84\xcc\xed\xd8\x6b\xf6\x57\x7e\x27\x7d\x1e\x76\x2d\xe4\x4b\x2f\x29\x91\xa8\xbb\x47\xc4\x16\xa6\xb7\xb3\xdb\x12\xf5\xd2\x79\x4c\x84\xfb\x21\xc7\xba\x17\xfc\xa9\xaf\xd8\xad\xd6\xe8\xb7\xbd\xe1\x24\xc9\xbe\x2d\xd7\xe1\x48\xbc\xda\x14\xdb\xed\xc0\xb4\x98\xbf\x3f\xf9\xfd\x95\x2f\xdd\x79\x5c\x16\x45\x1d\xe9\xb2\xed\xef\x75\xfd\xbb\x85\x57\xe3\x27\xb2\x3e\xae\x17\xe6\xef\xc9\x10\x1c\x2d\x6a\x07\x6d\x8a\xc8\xd7\xaa\xbb\xc5\xfa\x64\x4b\xa3\x9e\x4b\x6f\x91\x63\xdd\x24\x02\x16\x34\xaf\x26\xdc\xf0\x7e\x5f\x9c\xdb\x5f\xd8\xc0\x1b\x5a\x8f\xba\xb0\x9e\x2e\x59\x93\x5b\x2e\xf0\x74\x55\x6d\x8f\x43\xf3\x5c\x7a\xeb\x8e\x74\xd9\x32\xcd\x47\x4c\xa3\x51\x26\x0d\xf6\x9d\xb3\x0b\x9e\x0f\x9c\xd4\xb8\x5f\xee\xdf\xbe\x29\x5e\x28\x35\x5b\xfd\x5d\x72\x82\xd3\xe6\xf8\x5c\x7a\x8b\x1c\xeb\x5e\xc6\x5b\xbb\x37\x5e\xa9\xc1\x31\xe2\xf7\x5c\xa7\xe3\x73\xf8\x8d\x02\x4b\x35\xc3\x5e\x35\x3a\x8c\x66\x95\x98\x18\xf4\x6f\xe6\xc6\xe7\xd2\xdb\x74\xa4\xcb\x66\x2b\x07\x08\x1b\x25\x8f\xde\x73\xcb\x72\xd5\x4a\xd1\x3d\xe1\x5c\xa4\x53\x38\x3a\x7d\x8e\xab\x68\xe3\x47\xc4\x68\x1d\xe6\x30\x77\x2e\xbd\x45\x8e\x75\xe7\x0c\xb2\x8a\x4e\xee\x27\x78\xf2\xd4\xb8\xcf\x8f\x6d\x5e\xae\x4a\x46\xad\x12\x1b\x62\x89\x6f\x2e\xdc\x3c\xf0\x71\xa0\x8d\x33\x39\xb7\xe1\x10\xe8\x97\x7a\xd6\x70\xa8\x09\xf7\xe6\x9d\x85\x56\xed\x9a\x9a\x4d\xa6\x90\xf5\xcd\xc5\x08\xeb\xeb\xee\xe2\xce\x45\x37\x4f\xf6\x7e\xc6\x97\x4f\xe4\x8b\x40\x71\x66\x10\x07\x1f\x0e\x65\x10\x06\xce\x13\xb0\x3c\x7c\x4a\x1b\xa2\xea\xf5\xcb\x8d\xa1\x7f\x79\xbf\xc6\x58\xde\x6a\xe9\x76\xef\x89\xdf\xfd\x89\xe1\xdf\x17\x10\xed\x82\x38\xf8\x70\xe8\x6d\xf1\xbc\x31\x43\x6e\x69\x0a\x27\xf1\xa6\x4d\x3c\x9a\xd4\x9c\x95\xef\x17\x22\xd7\x43\xca\x2d\xa7\xee\xb9\x4c\xc5\x0f\x47\xd0\x96\x8f\x20\x0e\x7e\x1f\x8a\x52\x8e\x49\xf7\x35\xd0\x66\x7f\x33\xbb\x8b\x73\xf2\x8f\xb3\x2c\xaf\x7a\xac\x1d\x99\x8c\x0e\x1f\x88\x7f\x09\xff\x10\x86\x07\xad\xc6\x04\x71\x81\x92\x18\xff\x7b\xbb\x62\xfa\x98\xa9\x2d\x83\xbe\x8f\xfc\x8b\x9b\x5f\x33\xc8\xd2\x2e\xdf\x62\xa8\xb9\xd9\xac\xbd\x9b\xd0\xd0\x9d\xf3\xee\x68\xcc\x30\x14\x11\xeb\x06\x71\x81\x92\x8c\x28\x7e\xfe\xc1\xff\x53\x9f\xff\xe3\xcd\x0d\x54\x35\xcf\x52\xc0\xa8\x4f\xbf\x0a\xeb\xde\x71\xb8\xb3\xa0\xf3\xd2\x4b\x9b\x4c\x29\x4f\xf6\x3e\x3c\xc7\x9f\x37\x07\x3d\x33\x7e\xec\x72\xa8\xfc\x84\x76\xd3\x05\x71\x70\x05\x4e\xfb\x99\xe7\xb1\x39\x3f\x35\x3e\x99\xe4\xdf\xce\x13\xf2\xf1\x92\xde\x24\x78\x24\xa8\x56\x60\xc7\x2e\xff\x73\x20\xc5\xe9\x12\xd4\x2e\x88\x83\x2b\x20\xf0\x30\x03\x9d\x50\xfd\xf1\xaa\x15\x55\x6b\xeb\x3b\x7f\xb3\xee\x1e\x52\x17\xa9\x57\x41\x7f\x7e\xcc\xd3\x9c\x8a\xe2\x25\x3f\x32\x42\xb4\x0b\xe2\xe0\xf7\x01\xbf\x05\x33\xe4\xd0\xdf\xe9\x8f\x51\xef\xc9\x28\xb5\x90\xa3\xb0\x00\x13\x0a\x06\x2a\x87\x85\x10\xc9\x83\x90\x84\xf0\x3f\x1f\xa1\x33\xc7\x40\x1c\x5c\x81\xcc\xa2\x12\xd4\x77\xa6\xab\x25\xc4\x1d\xbf\x03\x4a\xb9\x32\x5f\x95\xcf\x5c\x56\xb6\xa5\x28\xca\xec\x6f\x5c\x78\x82\x52\xe6\x9c\x8f\x18\x11\x83\xb8\x7f\x14\xf8\x7f\x1e\x96\xff\xe1\x00\xe8\x11\x76\xe6\x86\x5d\xe8\x1c\x68\x62\x25\x34\xce\x29\x0c\x47\xfa\x53\xe2\xfc\xe5\x02\xf4\xf9\xf9\xa1\xd5\x3b\x46\xa1\xa9\x8a\x57\xb6\x84\xe9\x28\xa1\x0d\xbb\x00\x1c\xdc\x01\x9b\x0f\x31\xca\xac\xee\x5f\x2f\x3d\x56\x17\xa3\x09\xd9\xc6\x7c\xa7\x54\xea\x23\x4f\x47\x82\x59\xe7\x2d\x74\x69\xae\xee\x1e\x5f\x20\xb4\xeb\x27\x80\x43\x3a\x87\x79\x2d\xe9\x7e\x10\x7d\x39\x06\x1a\x69\xcb\x6e\xfb\xbd\x02\xbf\x02\x99\xc1\xee\x4b\x23\x2d\x53\x2b\x16\xfb\xc5\x8a\xa4\xe5\x3d\x88\x76\x41\x1c\xfc\x3e\x5c\xa7\x6c\xf6\x8c\x11\x92\x78\xc2\x51\x4f\xf8\x37\x7e\xeb\xe2\x5e\xab\xbe\x0c\x71\xb2\x47\xb0\xff\x6d\x2e\x11\x2a\x9e\x6f\x6f\x73\x10\xed\x82\x38\xb8\x03\x8e\xd2\x25\xe6\x37\xb0\xed\x32\x56\x83\xa2\x0d\x9a\xd4\x3f\xf2\x1e\x48\x4b\xab\x08\x5d\xb9\x6f\x4a\x16\xb4\x9d\x73\x59\x2e\x5c\x05\xe1\x00\x88\x43\x38\xf0\x3f\x23\x97\xff\x70\x00\x34\x9e\x38\xd3\x01\x9f\xbe\x89\xf1\x99\xb5\xd1\x6f\xaf\xfa\x94\xf3\xe7\x73\x04\xaa\x47\xf8\x0e\x92\x8c\x7b\x23\xa9\x9e\xe3\x3d\x76\xa6\xc7\x82\x22\x6c\x20\x0e\xee\x40\x45\x83\x35\xe9\x46\x98\x1a\x6e\x07\x83\x4b\xd6\x07\x36\xbb\xe7\xf3\x4f\xf9\x35\x74\x32\x18\x43\x37\x8d\x4d\x27\x7f\x30\x5f\x84\x16\x10\x83\x38\xb8\x03\xb8\x9a\x3f\xee\x24\x3b\xae\xc4\xa8\xbf\x4d\xfa\xc6\xcf\x6c\x44\xe2\x73\x75\x22\x7b\x94\x21\xd1\xaf\x9a\xc9\x2f\x6e\x85\x54\x1f\x72\x00\xc4\x21\x9d\x43\xdb\x7a\x4c\xf4\xf7\xc5\xee\xa5\xa1\x70\xe9\x3d\x0a\x99\x57\xfd\x9c\x45\x87\x98\x92\xc5\xc6\xaa\x6d\xf8\x5f\x2d\x28\xb3\xf1\xdf\x22\xda\x05\x71\x70\x07\x88\xbf\x6d\x3e\xcb\xfb\xf1\xa5\x9a\x20\xad\x5f\xae\x5e\x3d\xc9\x96\x91\x96\xd2\x4b\xe5\xe6\xbb\x8d\xce\x47\x8a\xec\x22\x03\x62\x87\x08\x07\x40\x1c\x54\x07\x00\xb1\x6e\xd0\xe0\xee\x2c\x07\x72\x0f\x5d\xc6\x4c\x24\x7e\x96\x04\x1c\x75\x59\xed\x89\xb0\xe7\xf6\x10\xd5\xd1\xe0\x30\xc7\x45\xba\x5e\xbc\xf2\x5b\xbf\x24\xed\x0e\xa2\xef\x20\x0e\xee\x80\xe8\xe1\xc2\xdf\xbe\x98\x5a\x47\x1e\xf6\x16\x6b\x07\x65\x85\x0c\x7e\xfc\x76\xfb\xd8\x13\x17\xdf\x7a\xbc\x04\x13\xba\x18\x9a\x74\x44\xbb\x20\x0e\xee\x40\x8d\xf0\xdd\xca\x1f\x3e\x68\x2a\x0a\x8c\x42\x7c\x8e\x19\x1f\xe7\xa5\x29\x1f\x57\xc6\x6b\x8c\xed\xbe\xb1\xf5\x32\x93\x68\x1d\x86\x36\x99\x03\x71\xf0\xfb\xd0\x65\x46\x6c\xbb\xf5\x52\xda\xd8\xee\xde\xab\x62\x4f\xc5\xcb\x8c\x9f\x68\x96\xa2\x07\x4a\x75\x67\x93\xc8\x43\x1c\x26\x58\xb2\x74\x10\xed\x82\x38\xb8\x03\x47\xba\x11\x14\xca\xf9\x8a\x74\x56\x95\x99\x6f\x47\x64\x4f\x52\x4e\x13\x43\x70\xac\x28\x9b\x1f\xb9\x7b\xbd\x71\x3e\x2a\x38\x0c\x41\x38\x00\xe2\xa0\x3a\xe0\xfe\xdf\x0e\x80\x46\xda\x67\x39\x90\x70\x85\xf6\x5b\x85\x43\x81\x84\xcb\x15\xf3\x1a\x32\x19\x2b\xab\xba\x3e\x4a\x45\x0b\xbb\xfc\x44\x99\x6e\x62\xba\x27\xdb\xcf\xef\x21\xfa\x0e\xe2\xe0\x0e\x44\x47\x3e\x29\x6f\x6c\x1e\x8b\xbc\x35\x44\x65\xf1\xda\x6a\xe0\xfb\xb5\xba\x69\x36\xcc\x12\xf2\xd3\xf7\x0a\x4a\x14\x7c\xf7\x27\xc5\x10\xed\x82\x38\xb8\x03\x0d\xdf\x29\x1e\x15\xac\x77\xb7\xe2\xa9\xb2\x26\xf2\x3c\x0d\xeb\xfc\x83\x93\x31\xcc\x1b\x43\x1d\x38\x73\x89\xac\xbf\xda\x2d\x4a\x1f\xd1\x2e\x88\x83\xdf\x87\xbf\xdc\x57\xad\xe2\xef\xff\xb9\xb4\x90\x21\xf6\x6c\x36\xa8\x92\xbe\x49\x3b\x5f\x29\x99\xea\xf6\xdd\x22\xcc\x17\x37\x4c\x79\x4c\xb1\x11\xed\x82\x38\xb8\x03\xfe\x28\x2b\x3e\x21\xb3\x8b\x56\xc6\x6d\x3d\x0f\xdf\x8e\xd5\x75\x2b\x6a\xd8\x06\xe0\xed\x77\xa8\x94\x35\x72\xf2\x65\xbe\x0e\x2f\x42\x38\x00\xe2\xa0\x3a\x00\x88\x75\x83\x5e\x7b\xce\xdc\xa4\xa5\x64\xea\xd1\x5b\xc2\x24\x5e\x63\xbd\x86\x3f\xfc\xd6\x23\xd5\xd4\x0c\xba\x32\x6c\xf3\xc6\x2f\x97\xc4\x3e\x6a\x84\xda\xa7\xb1\x43\x9b\xb4\x00\x38\xa4\x8d\x7a\xe2\x71\x83\xbc\xbf\xef\x3d\xfe\xea\xa5\x53\xf8\xae\xab\x46\xef\x43\x77\xab\xc0\x98\x31\x9e\xb5\xca\xee\x37\xc7\xad\xcf\x3e\x29\xd0\x72\x09\x00\x87\x74\x88\x4f\xdb\x86\x20\x55\x97\x80\x39\xaf\xef\xf7\x91\xfd\x94\x1e\x5c\xb6\xda\xaf\xd7\xb3\xa6\xb9\xb0\x14\xd3\x50\x83\xc4\x7c\xef\xe5\x21\xda\x05\x71\xf0\xfb\x30\x54\x83\x3d\x7e\x9f\x9a\x2e\x8b\x35\x45\x50\xc4\xd3\x72\xa4\xa5\xd4\x5c\xec\x87\x6d\x48\xfd\xe9\xd3\xf0\x2c\x66\x99\x26\x2a\x19\x44\xbb\x20\x0e\xee\x80\x7b\x87\x0a\xca\x82\xbf\x96\xdd\x41\x43\x9a\x8f\x08\xda\x3c\xcd\x40\xd8\x32\x2f\x67\x18\xab\x89\xed\x11\x4a\x6b\x85\x8f\x44\x3a\xc2\x01\x10\x07\xd5\x81\xf4\xff\x76\x00\xf4\x0e\x7a\xe6\xb9\x96\x77\x78\xd4\xa4\x2b\x36\xc8\x5b\x85\xc8\x76\xdd\xb9\xf4\x3a\x08\x6d\xb4\x13\x84\xa7\x7d\xd2\x1e\x51\x5b\xdd\x55\xf5\xa0\x83\xce\x89\x04\x71\x48\xe7\xaf\xca\x4e\x35\x39\xf4\x88\x7f\x7e\x1f\x74\xe7\x7e\xeb\xd6\x07\xce\xe1\x5f\x4e\x0b\x8a\x19\x2e\x6e\xf6\x81\xac\xdc\xd9\xe6\x2a\xff\xdf\xf3\x57\x01\x1c\xdc\x81\x6e\xfc\xb0\x27\x2c\x77\x9b\x5f\x98\x10\x68\x3b\x06\xf1\x28\x53\x61\xfd\xa8\x56\x4f\x5e\xfe\x93\xd9\xcd\x90\xff\xa1\xd0\xb2\x00\x1a\xbf\x80\x38\xf8\x7d\xf8\x4a\x39\xa1\x85\x25\x2b\x72\xc9\xb2\x26\xca\x3f\xec\xad\xd2\xbe\x0b\x95\x15\x21\x5a\x62\xb2\xd1\x27\xc6\x3d\xee\x5b\x41\xdf\x1f\x23\xda\x05\x71\x70\x07\x4e\x1d\xbd\xa7\x51\x8f\xa4\xa5\x2e\x7f\x48\xd4\x62\xe4\xeb\xc8\xab\x93\xb9\xf8\x67\x86\x89\x26\xe7\xa5\x58\x3c\x9f\xc5\x8d\xda\x56\x84\x03\x20\x0e\xaa\x03\xa0\x58\x37\x68\x5a\xf1\x9f\x58\x37\xca\x28\xd2\x14\x46\x66\x14\x59\x73\xa7\x8f\x02\x2e\x1a\x25\xa1\xfe\x80\x32\xd6\x1e\x79\xb8\x23\x35\x59\x71\xe4\xef\xc6\xf8\x24\x6c\x7a\x2e\x93\x9b\xe7\x32\x73\x82\x1c\xeb\x16\x89\x35\xc4\x59\x63\x96\xbf\x5f\x93\x57\xb5\x58\x47\xc1\x1b\x17\xca\x10\x5e\x70\xb0\xf4\xc0\x70\xc1\xb1\xa9\x74\xc4\xc3\xc1\xfc\x5c\xe6\x89\xfe\x22\x9f\x61\xc7\x91\x88\xa1\x2e\x49\xb5\x73\xfd\xbe\x8f\x95\xfd\xc7\x82\x53\x7e\xb6\x4c\x43\xc6\x2f\x44\x31\x94\x9f\x77\x88\xa7\x8e\xb4\x4d\xcf\xa5\xb7\xc8\xb1\xee\x37\x7f\x5f\xa5\x24\x56\x37\x77\x47\x84\x62\x0c\x07\x34\xd3\x71\xf3\xab\xe3\xe8\xae\x7d\x3f\xea\x4f\xc7\xf1\x0d\x17\xff\x16\x59\x71\x2e\xbd\xe5\x41\xba\xec\x4a\x25\x46\x01\xb1\xcb\xf2\x35\xb9\x2c\xb5\x1b\x6d\x16\xdb\xa9\x4b\x2c\xa7\x84\x9e\xbb\xd7\xe7\xbe\x94\x5d\x7a\xec\xc7\xa3\x5c\x75\x2e\xbd\x45\x8e\x75\x7f\x24\x97\x76\x2b\xee\xda\xc4\x2b\x53\xcd\x98\x27\xb0\xd9\x2c\xf4\x2d\xb5\xa2\x1f\xbd\x7f\x6b\x29\x5e\x5c\x31\x61\x6b\xa8\x53\xf6\x5c\x7a\x7b\x0f\xe9\xb2\xed\x35\x8c\x25\x21\x5e\x5d\x5b\x63\xdc\xb6\x83\x45\x74\x05\xbf\x1b\x52\x6d\x47\x25\x35\x3b\xbd\x4a\xdd\x32\xc7\x06\x31\x6b\xae\x9c\x4b\x6f\x91\x63\xdd\xba\xca\x75\x95\x9e\xfd\x82\x7e\x9b\xbb\x8d\xfe\xcd\xc9\xe8\x23\x2a\x28\xef\x24\x54\x13\x74\x29\xe6\x98\xee\x3a\x05\x2d\xae\xf5\x9f\xdb\x1c\x20\xe8\x97\x7a\x56\xa1\xe7\xf0\xbb\x90\x6c\xfa\xa2\xfe\x1b\xf3\xcb\x9c\xb6\xb0\xc1\x99\x61\x6b\x5c\x73\x69\x97\x8c\xaa\x7a\x2d\xf2\xbe\xc7\x87\xea\x13\xd0\x89\x7d\x20\x0e\x5e\xe8\x67\x5d\x29\xba\x24\x7f\x05\xe2\x7a\x8f\xb7\xf9\x0a\x6e\x87\x1e\x8d\xab\xb7\xdc\xfa\x6d\x37\x7f\x92\x26\x88\x8d\xb9\x86\x2e\x3a\x81\x68\x17\xc4\x21\x45\x7a\xb5\xb5\x71\xaf\x86\x5b\xb4\xa1\xae\xd5\x97\x6f\xcd\x7d\x7b\xad\x12\xf0\xf8\xa3\x19\x7d\xa6\x4c\x7a\x66\x67\x68\xf8\xeb\x91\x32\x28\x22\x08\xe0\xe0\xf7\x61\xf2\xe9\xd3\xbd\x3a\x47\x83\x67\xa4\xe6\xf1\xf1\x1b\x7e\x74\xa5\x0e\x2f\x43\x2a\x5a\x53\xcc\x4d\x48\xaf\x27\x7b\x6b\xe8\x51\x79\x42\xfb\x10\x00\x38\x78\xa1\x47\x9b\x9b\x4e\xb3\xb5\xff\xbc\x46\xb1\x7e\x14\x7d\x19\x15\x33\xa5\x71\xee\xb3\x0a\x8b\x89\x88\xc1\x4e\xe0\xcd\x36\xbc\x17\x05\xd4\x88\x42\x0f\xe2\xa0\x87\xfd\xe8\x7f\x3f\xec\x41\x65\xf3\x2c\x07\x56\x96\x0e\x84\x64\x06\xe6\xb0\x89\xd5\x9c\xe5\xd0\x9f\xac\x49\x3c\x62\x9e\x57\x4b\xb4\x0a\xdc\x4e\x57\x5d\xa9\x5d\xe5\xeb\xf8\x0c\xad\x5d\x02\x70\x70\x07\xf0\x34\x0c\x4b\xc3\xbd\xf6\x54\x3f\x2a\x59\xf9\xa1\x85\x8d\x1d\x18\xa8\xb9\xc9\xe2\xc9\xd2\xe4\xff\x54\xfc\xd1\x94\x37\x74\x50\x0b\x0d\xcc\x00\x1c\xdc\x01\x87\x56\x46\x62\xb2\xe5\xcd\xc8\x82\x69\xb3\xfa\x39\xf6\xbe\xb8\xb7\x55\xc9\x62\xc1\x38\x66\x4f\x2f\xfe\x2e\x93\xdb\x3e\xae\xcb\x82\xd6\xdf\x03\x38\xa4\x79\xe0\x16\x34\xb1\x64\xe6\xfb\x21\xbf\x8c\xd0\x72\xbf\x84\x33\x25\xa3\x9e\xa2\xb1\x47\x3c\xcc\xce\xc1\xf5\x78\x54\x89\x99\xbf\xdf\x01\xcd\x03\x03\x38\xb8\x03\xda\x87\xe8\xc6\x39\x04\x93\xc4\x33\xf6\xcf\x8d\xb8\x3e\xe5\x1b\xb5\x19\x36\x36\x60\xb4\x4b\x47\xac\xbb\x52\x57\x90\xea\xde\xf8\x8d\x70\xe0\xff\xc3\xdc\x5b\x86\x65\xd1\xc4\x7f\xdf\x74\x23\x08\x82\xd2\x28\x29\x8d\x22\x88\x80\x80\x02\x2a\xdd\x25\x2d\xa0\x74\xa7\x74\x97\x34\x52\x4a\x8b\x20\x82\x88\x94\xb4\x34\x0a\xd2\xdd\x21\x29\x92\x82\xa4\xcf\x71\xff\xef\xeb\xdc\xe7\xfa\xef\xc9\x71\xcd\x1b\x5e\xdc\xef\x3f\xc7\x2c\x33\x7c\xce\xdf\xce\xce\x7e\x77\x06\xc4\x41\x37\x7b\x40\xac\x1b\x74\x0f\x3b\xcb\x81\x8f\xd6\x85\x17\xbd\xb0\x6a\x2d\x4c\x64\x5e\x57\x71\x0b\xab\xfa\x1d\x07\x65\xd7\xac\xc6\x0c\x4a\x6f\x06\x35\xd4\x57\x50\x47\x42\xfb\x7b\x80\x38\xb8\x03\x3d\xca\x12\x2b\x92\xe1\x8c\xc7\x79\xae\x94\x37\xac\xd0\x1b\xb2\x64\x48\xc7\x33\xe6\x3e\x7e\xbd\x28\x41\xcd\x70\x81\xaf\x72\xec\x19\xa2\x5d\x10\x07\x77\x40\x4c\x6a\xec\xb4\x57\x8e\xeb\x19\x73\x78\x64\x46\x0f\xa3\xa6\xb8\x5c\x5e\x2a\xae\xd3\x95\x67\xb9\x5d\x33\x44\x3b\xf2\x51\x1c\x3c\x50\xdc\x0a\xc0\xc1\xc7\xa1\x7a\x4e\x82\x5f\x34\x0e\x85\xa1\x45\xd4\x29\xe1\x41\xb3\x1d\xab\x68\x09\xae\xcb\x36\xed\xb3\xfb\xab\xdf\xef\xed\x3a\x51\x58\x43\x0f\x3f\x20\x0e\x69\xd2\xef\xda\x6a\xf5\xe8\x07\x8e\x1d\xdd\x8b\xe8\xc5\x86\xbf\x95\x7f\xf7\x1d\xea\xdf\x15\x29\x98\xf4\x17\xa7\x34\xce\xeb\x0f\xdd\xfd\x00\x4d\xfa\x01\x1c\x54\x07\x4e\xfe\xdb\x01\xd0\x84\xe2\x2c\x07\x4c\xda\x1d\xcc\x7c\x4c\xa3\x2b\x50\xd7\xde\x1f\xe2\xec\x53\x56\x38\x29\x7d\x23\xe1\x5a\xde\xce\x3a\xc1\xd0\xd2\x57\xc8\xa6\xc0\x41\xf4\x1d\xc4\xc1\x1d\x70\x24\x15\xb0\x7c\xcf\x5c\xe3\x87\xc2\xe5\x26\x36\x92\xf2\x4b\xf9\x87\xf6\x7b\x25\x59\xec\xf2\x00\xf1\xdc\xa4\x64\x7c\xc6\xd3\x41\xe8\x93\x19\x00\x87\x34\xe9\x77\x12\x4d\x27\xe8\xb4\x66\xc0\x20\xa7\xf6\xd5\xa4\x8b\xce\xd6\x30\xbf\x26\xb3\xac\x8f\x1b\x58\x3b\x9a\xd5\x1f\x94\x85\xbb\x0a\x4d\xfa\x01\x1c\x7c\x1c\x56\xf3\x74\x32\xa2\xff\x62\x1e\xf6\x6e\x11\x97\x3d\xbb\x7b\x78\x37\xe6\x22\x73\xfe\xab\xeb\x5a\x11\xc6\x95\x37\x38\xde\xde\x49\x83\xbe\x6b\x06\x71\x70\x07\xf6\x26\x3a\x17\x49\xea\x45\x3b\x6d\x1a\x6a\x68\xd1\xb1\x84\x52\x4b\x9b\x24\xec\xc3\xd2\xdc\x8e\x0a\x7b\x96\x6d\x95\x13\x3a\xde\x20\x1c\x00\x71\x50\x1d\x00\xc4\xba\x41\xb3\xbb\xb3\x1c\x48\xcf\xca\xc3\xe7\x4c\xc6\x62\x79\x1a\xfc\xeb\x8f\xfe\x9a\xcf\xd6\x2a\x3a\x97\x04\x33\xe5\x97\xf8\x65\xa6\xaf\x2e\x6e\x1a\x77\xa1\x48\x3b\x88\x83\x3b\x90\x30\x52\xcb\x7f\x89\x8d\xea\xe7\xc3\xb4\xc1\x80\x60\xd3\x89\xfc\xa2\x76\x3a\xdc\xf9\xd8\x56\x33\xa1\x7d\x8d\xcb\x3b\xd4\x34\xd0\x7e\x19\x20\x0e\xee\x40\xeb\xca\x68\x0b\x5b\x17\x67\x74\xa2\x16\xcf\xbb\x78\x9b\x2a\x8d\x15\x3e\x61\xc9\x9b\x68\x57\x36\x6c\x6a\xac\xa7\x8f\x7f\x3a\xaa\x42\x9f\x24\x01\x38\xf8\x38\xec\x2b\x37\x5f\x58\x18\xdd\x77\x25\xb9\xe6\xed\xb8\xf2\x85\xd7\xdf\xe2\x66\xe7\xa9\x05\xad\x43\xb6\xbb\xe1\x0a\xbd\xf7\x3c\x0b\x14\xe7\x04\x71\x70\x07\xca\xd3\x0d\xc3\x84\x0f\x5b\xb5\x98\xda\x19\xf0\x47\x5f\xea\x57\x6a\x68\x1b\x26\xd8\xe3\x65\xb4\x7e\x25\x8c\xd0\x6d\x61\x2a\x49\x44\x38\x00\xe2\xa0\x3a\xc0\xf7\xdf\x0e\x80\xa6\xda\x67\x39\x90\x95\x67\x17\xff\xae\x3a\x87\x6c\xab\x42\x44\xd8\x9f\x02\xbf\xac\xb8\xbd\xd8\x80\x67\x5d\x2f\xed\x82\x8f\xc5\x9e\x19\x63\x03\x74\x54\x1d\x88\x43\xda\xad\x3b\xdc\xdd\xd7\xea\x39\x6b\xf3\xe2\x98\xaa\x80\xee\x9b\xdb\x3e\x6b\xa9\x3f\x1f\xfd\x38\x0a\xcd\xd8\xe4\x1a\xf7\x21\x36\x0d\x86\x76\x82\x07\x71\x70\x07\x0c\x86\x2f\x54\xf0\xad\x3d\xe4\xfb\xed\x5d\x98\x50\xa1\x22\xa3\xae\x58\x48\xf0\x4b\x84\xcc\x84\x37\xc9\x7c\x5f\xe8\xe6\x44\x12\xf4\xe9\x10\x88\x43\x7a\x39\xca\x1b\xe7\x24\x67\x81\x65\xa3\x46\x85\xfe\x4d\x8d\x3c\xbe\xa5\x44\x24\xba\x5a\xdb\x30\x81\x63\x21\x6c\x60\xa1\xb7\xba\x17\xda\x5d\x1c\xc4\xc1\x1d\x10\x21\xad\x23\xf3\xc4\x7b\xfc\xa0\xfb\x67\xa6\x8b\xe7\x46\xac\x3c\x13\xee\x9c\x4b\xb3\x73\xda\x01\xc3\x81\x85\x00\x66\x40\x09\x14\x93\x03\x71\x50\x1d\x00\xc4\xba\x41\xcf\x3d\x67\x1e\xd9\x37\xee\xbc\x71\x32\x33\xf5\x62\xac\x70\xe2\x97\xd4\x74\x83\x59\xd4\xa1\x2a\xbb\xd1\xed\xcc\x12\xec\xe8\x04\xec\xbf\x1f\x8a\x5f\x41\x2f\xef\x00\x1c\xdc\x81\xa4\x42\x14\x0f\x9e\xc6\xd5\xb9\xf5\x64\x32\x3d\x76\xbd\x47\x03\x96\x09\xf1\x35\xb7\x5f\xcb\x4c\x1a\x93\x93\x59\x8a\x68\xcc\xd2\x20\xda\x05\x71\x70\x07\xc8\xe4\xe4\xa9\x76\x95\x23\x2f\xdf\xc4\xb3\x5a\x14\xbd\x6b\x93\xff\x09\xdf\x44\xdb\x05\xa3\xbe\xbb\xec\xf3\xc8\x65\xa1\x85\x1a\x68\x67\x75\x10\x07\x1f\x07\x9f\x81\x14\xcb\x12\xf1\x2f\xd6\x64\x58\x5d\x0e\xb8\xfc\x51\xfd\x18\x1c\x81\x95\x05\x9d\xfe\x61\xb3\xc3\xf5\x9b\x77\x42\x66\xa0\x17\x42\x20\x0e\xee\x40\x63\x66\x2b\x15\x6d\xf5\xcf\xdb\xc7\xcb\x02\x9c\x34\xd5\xb7\x2c\x8c\xcb\x26\x39\x98\xa3\xa6\xa5\x73\xf7\x27\x2c\xbe\xa1\x0f\x32\x22\x1c\x00\x71\x50\x1d\x78\xfc\xdf\x0e\x80\x1e\x42\xcf\xbc\x17\x88\x36\xbd\x61\xdb\x15\xca\x21\x70\x4e\x0f\x7b\x71\xbb\x3d\xa5\xf6\xeb\x0a\x8b\x1d\xc9\xac\x13\x49\x70\x94\x1d\x63\x1a\x3a\x74\x22\x0a\x88\x83\x3b\xb0\xfc\x86\x7d\x83\x78\xca\xbc\x3f\x30\x8e\x56\x65\xfc\x78\x53\x3c\x18\xf5\x4f\xcf\x71\xdf\xe7\xbd\x32\xe5\x24\x63\xb5\xdf\xac\x4f\xa0\xe7\x0d\x00\x87\xf4\x42\x68\xa1\xf3\xef\x9e\xb3\x64\xab\x35\xe1\x07\xac\x9e\x72\xa9\xd0\x67\x4c\xe3\x94\x7b\xcf\x54\x9d\x97\x94\x79\xaf\xfc\x61\x4f\x81\x4e\x07\x02\x71\xf0\x71\xa0\xc3\x6e\x76\x6e\xd2\xf7\x9c\x6b\x56\xe6\x8c\xaf\xc3\x6b\x55\x1d\x89\xff\xd8\xf7\x0a\x4d\x1d\xed\x69\x65\xa7\xae\xe8\x07\x57\xe8\xe8\x42\x10\x07\x77\xe0\x59\xa7\x5a\xcc\x0a\xf7\x1f\x3c\x05\xb7\x18\xee\xa8\xc3\xfe\xbe\x6f\x32\x4d\x17\xaf\x86\x95\x63\xb5\x27\xa3\xc8\x97\x91\x3f\x69\x41\x38\x00\xe2\xa0\x3a\x00\x8a\x75\x83\x02\x83\xff\xc4\xba\x51\x62\x91\xd6\x30\x24\x8c\x0a\x0e\x83\x08\xdf\x5f\xe5\xbd\x8a\x52\x15\xe7\xfb\x51\x13\x4b\x5a\x53\x70\xb6\xc7\xf4\x65\xa0\xd5\x4e\x99\x2a\xfa\x85\xf2\x73\x5b\xc3\x00\x5d\xe8\x2c\x4f\x99\x76\xbc\x69\x39\xd0\x6c\xf4\xfa\x29\x1e\xb7\x75\xba\xdc\x5f\x77\x1d\x4c\x5b\xd1\x5d\x14\xad\x72\x7d\xf9\x23\x74\x1b\x6f\x92\x17\xf1\xff\x01\x71\x70\x4f\xb1\x66\xaa\xf3\xdc\x2a\x46\x85\xd9\x83\x7f\xbd\x78\x6a\x3d\x3d\xbd\x98\xb5\xca\x16\x95\xa5\xf6\x6c\x9a\x5e\xc7\xe4\x09\x4a\x3d\x1b\xa2\x5d\x10\x07\xf7\x14\xdb\xb8\x8b\xc7\xdc\x35\x74\x59\x7f\xd1\x87\xf0\x52\xd9\x65\xcc\x61\x3e\x03\xdc\xbe\x77\x38\xda\xaf\xed\xb0\x96\x52\xcd\xc5\xa0\xd3\x30\x40\x1c\x7c\x1c\x46\xf8\x03\x8c\x13\xbc\x62\xe7\xe9\xd0\xd4\x2d\xdc\xed\xba\xfa\xa8\xd1\x4c\x7e\xb9\x46\x7a\xa3\x7f\x34\x5d\xcc\xc0\x22\xd3\x84\x5e\x58\x80\x38\xb8\xa7\x2d\x53\x56\x45\x2c\x71\x98\x21\x05\x0f\x3f\x7a\x6a\xac\xbb\xbd\x9e\x56\x0d\x6b\xb0\x1b\x7e\x1c\x6a\xc1\x91\xf2\x26\x53\x8e\x08\x3a\x6e\x1c\xc4\x41\xb5\x2a\xf6\xbf\x63\xdd\xa0\x48\xf0\xd9\xb1\x6e\x99\x62\x69\xe5\x3b\x04\x42\x44\xfc\x5e\x2f\xea\x1f\x93\xb5\x89\x36\xb5\x78\x3e\x76\x28\xb4\x5c\xa9\x2c\x51\xd6\xc4\x75\xcf\x5a\x43\x44\xa4\x41\x1c\x72\xac\x9b\xd1\x72\xf0\xb6\x4e\xc5\x73\x63\x1e\xd5\xa4\x83\x56\x15\x4e\x12\xee\x5b\x84\x98\x66\x0a\x87\x53\xea\x9f\x0f\xbb\x62\x9c\xbc\x68\x10\x2d\x83\x38\xe4\x58\xf7\x92\x46\xaf\xfd\xda\x35\xba\x59\x91\xbb\x52\x07\x13\xb6\x91\xa4\x3a\x73\x9a\x1f\x4f\x6f\xa5\x84\x8f\xff\x74\xe8\x10\x1f\x88\x5f\x47\xb4\x0c\xe2\xfc\x25\x50\xd0\xfe\x77\xcb\x34\xb8\x95\xc2\x4d\x1c\xd7\xd1\xcb\x46\x39\xd1\xc3\xe5\x0b\xe8\x2d\x36\xbf\xd3\x13\x36\x3d\xac\x89\x9c\x45\xa5\x32\x74\xc3\xc4\x85\x62\xdd\x9f\x24\x1f\xa4\xbc\xbd\x64\x91\x93\x39\xd6\xec\x48\x34\xa8\xc8\x89\xea\xf8\x99\x9b\x0e\xdd\x34\x71\x04\xfd\x90\xbe\xc1\x24\xf3\xd1\xbf\x63\xdd\x26\x2c\x7c\xc2\x4f\xe3\x88\x38\xd1\x19\x6c\x37\x5a\xab\x67\xef\xe4\x32\x8c\x07\xa0\x4c\xde\x6b\xb2\xb4\x78\xf9\x9e\x62\x66\x22\xf1\xdf\xc9\xe1\x8a\xa8\x87\x65\x73\xaf\xe2\xb3\x29\xad\x8b\x39\x5f\x9a\x52\xea\x67\xac\x7e\x40\x71\x93\xc0\x2d\xfd\x60\x29\xf8\x35\xb6\x0b\xf7\xff\xbd\x58\x37\xa8\x73\x67\xc4\xba\xb5\x52\x7a\xde\xa7\x2a\xdd\xfe\x62\xaf\x45\xa7\xb4\xf1\x79\x55\x38\x54\x13\x15\x35\x03\x63\x71\x6f\x8b\xe0\xe1\x4e\x0d\xcb\xe3\x87\xff\xce\x9f\x3a\x3f\x61\x28\x3e\x76\xc2\xa9\xec\xd9\xf1\xbe\xc3\x63\x4f\x76\x13\x4d\x30\x99\xe3\xb7\xf0\x51\x05\x4b\xb4\x4f\x15\x9d\xc4\x93\x7f\xa1\xa8\xcb\x97\xd4\x26\xf7\x17\x7e\x0d\x5e\xb3\x5b\x66\x15\x8f\x18\x1a\x99\x7b\x6c\x7a\xcd\x81\xe2\x41\xef\xd7\x5a\xf3\xbf\xa8\x43\xa3\x50\xac\x1b\x74\xf9\x7f\x62\xdd\x62\x48\xb1\xee\xb4\xb4\xd1\x55\x33\xaa\x5d\xed\x57\x7e\x9f\xad\x95\x19\xab\x74\xdf\x32\x7d\x8f\xd0\xe0\xe7\x20\x2e\x91\xc7\xae\x7e\x9a\xf2\x58\xfb\x3c\x16\xc2\x1b\x90\x63\xdd\x23\x26\x1a\x06\x56\x1b\x76\x99\x97\x7d\x30\x03\x7a\x29\xc7\xea\x59\x51\x9f\x28\x3a\xd6\xde\xba\xff\xb8\xd2\xd6\x3e\x3d\x0c\xfb\xd2\x79\x5c\x56\x0c\x39\xd6\xfd\xd2\xf4\xc1\x90\x8e\xaf\x98\x52\xb8\x5c\x58\x40\x08\x45\xc2\xe7\x05\x67\x75\x32\xfc\x85\xcb\x7e\x63\x35\x75\x3c\x8d\x0c\x9b\xe7\x90\xc1\x0d\x97\x68\x40\x8e\x75\x57\x0d\x07\xf3\x1a\xec\x62\xfd\xc2\x7d\x20\x86\x7b\x65\x3a\x3e\x4f\xa2\xf3\x64\xbc\x41\xc2\x77\xc6\xa7\xfd\x96\x76\x76\x98\xf6\xe5\x73\xe9\x2d\x72\xac\x9b\x87\xe3\x6a\x46\x77\x4d\xd9\xa7\x92\x1f\x52\x8c\x05\xee\xe3\xad\x58\x9d\x5b\x3d\x95\xb8\xb6\x3f\x71\x4d\x9b\x4d\x8f\xbc\xa6\xcf\xe1\x6d\x43\xb8\x44\x03\x72\xac\xbb\x51\xd2\x9b\x3b\x53\x68\x9f\x78\x5e\xce\xb4\xcc\x60\x1a\x47\x5c\xcb\xc6\x7a\xb4\xff\x5d\x11\xff\xa5\xf4\xe0\xbc\xf8\xa4\x0d\xe6\x73\xe9\x2d\x72\xac\x3b\xee\xd0\x42\x32\x33\x5b\x23\x0c\x47\xdf\xd4\x25\xe7\xc6\x5e\x07\x3e\x77\xe1\x9f\x9f\x75\xdd\x1c\x17\x22\x92\x50\xb5\x75\x85\xd6\xce\xa5\xb7\xc8\xb1\xee\x92\x6e\x8e\xa6\xa8\x15\x81\xee\x5e\x61\xaa\x63\x53\xe7\xd8\xc2\xe4\xe9\xac\x47\xf2\x3c\x51\x7f\xd6\x9f\x34\x7b\x18\x07\x2d\xa5\x9e\xdb\x74\x08\xf4\x4b\x3d\x6b\x3a\x74\xfa\xee\x48\xc6\x77\x37\xeb\x58\xe8\x2e\xfb\xb6\xf3\x4c\xc3\x27\xf7\x39\x5f\xa5\xde\xcf\xe8\xe1\xc2\x77\xc5\xa6\x14\xd6\xb1\x87\x11\xd3\x00\x10\x07\x9f\x0e\xf1\x7f\xf3\x56\x0e\xbf\x7d\xf4\x9e\xf8\x51\x7e\x2f\xcb\xb8\x57\xc7\x0b\xcf\xa7\x8a\x7e\x45\x8e\x78\x49\xbd\x37\xa9\x98\xbf\x25\x2e\x23\xda\x05\x71\xf0\xe9\x10\x57\x5c\x4e\x65\x31\xc5\x8f\xef\x18\x35\x9f\x6f\x8c\x54\x0d\x79\x51\xab\x46\xeb\x2b\xb1\x78\xc5\xdd\xf8\xf5\xa7\x48\x81\xa5\x5e\x00\x7a\x05\x05\xe0\x90\x1e\xdd\x86\x77\xed\x92\x7a\xa6\xe4\x9f\xdc\xfa\xae\xe2\x4e\x16\xeb\x4f\x1e\xac\xcc\x2b\x9c\x6c\x35\x28\x8e\xea\x18\xbb\xba\xe6\x09\x6d\xf7\x07\xe2\xfc\xef\x89\xfd\xaf\x76\x51\xe6\xfd\xe9\x32\xf1\x5b\x72\x89\x0e\x68\x67\x88\x62\x96\xe9\x8f\xec\x7d\x97\x66\x58\x95\xe8\x6d\x9b\x3e\x95\xa0\x7b\xe8\xe9\x22\x62\xdd\x20\xee\xff\xfc\xbd\x3e\xbe\x81\xff\x53\x9f\xff\xe3\xc9\x0d\x54\x35\xcf\xdc\xa8\xc7\xb7\x5b\x27\xfe\x23\xb7\x1e\x39\x0e\xf9\x2e\x4f\x51\x5e\x0b\x96\x64\xdc\xfd\xd1\xa7\xd5\x24\xd8\x95\x9a\x32\x98\x97\xfc\xa1\xdd\x39\x41\x1c\x92\x02\x17\x38\x6c\x4d\x56\x05\xfa\x7d\x2f\x84\x25\x96\x92\x2f\xcd\xfb\x0b\x1c\x10\x86\xc6\xc5\x9b\x19\x85\x52\x32\x9a\x98\x38\x41\x1f\xe6\x83\x38\xb8\x02\x0b\xf3\x82\x8a\x12\x4e\x9f\x86\xb1\xb7\x8f\x7f\x14\x86\xf6\xd8\x79\x5d\x3a\x88\x6b\x7f\xe4\xff\x74\xbc\x04\xe5\xe9\x5f\x16\xd7\x23\x28\x16\x02\xe0\x90\x14\x48\x5d\x4a\xe4\xa6\xd4\x35\xcf\x21\xf2\xa6\x38\xf4\x20\xac\x66\xfa\x41\x74\x31\x8f\x4e\xd1\xd9\x6c\xd8\x66\x32\xec\xb4\xf3\x2a\xa4\x00\x80\x83\x2b\x90\x5b\x10\xe5\x3e\x68\x3a\xd6\x13\x71\xa2\x39\xa1\xcc\xa2\x2e\x54\xb8\xed\x1f\xc0\xf2\xf6\x9e\x9c\xa8\xa7\x70\x69\x47\xe2\x48\x2a\x62\x46\x0c\xe2\xfe\x51\xe0\xff\xde\x2c\xff\xc3\x01\xd0\x2d\xec\x2c\x07\x66\x14\xed\x5b\x39\x58\xdd\xaa\xfe\xae\xb3\xfd\xcd\xb2\x75\xe1\x89\xcb\x63\xd2\xc8\x4e\xc3\xec\x78\x5d\x99\xbf\x58\x27\x25\x00\x6d\xae\x0f\xe2\xe0\x0e\xe4\x4c\xf0\xa8\xaf\xd9\xea\xbf\xe9\xca\x8a\xbd\xdb\xff\xf2\x92\xb4\x84\xec\x47\xcd\x62\xe9\x86\x96\xc1\x13\xd2\xd9\xed\x90\xdf\x0f\x11\xed\x82\x38\xb8\x03\xa2\x43\xcb\x02\x5f\x8b\x85\x6a\x3b\x37\x17\x3f\xe8\x84\x34\x35\x16\xfc\xc8\xc7\xb8\x49\x9e\x87\x97\xd7\x54\xbc\xbd\xe5\xb3\xab\x82\x68\x17\xc4\xc1\xc7\x61\x78\x9a\x78\xdb\xcc\x1c\xed\x57\xd7\x6f\xbb\xc5\xc7\x05\x6a\x0e\x6d\x44\xf3\x82\x5f\x1d\x85\x9e\x85\x2f\x11\x4c\x62\x8a\x29\x40\x5f\x8d\x80\x38\xb8\x03\x15\x76\x05\xc2\xdb\x3b\x57\xd8\xe9\x0a\xb5\xf4\x37\x2f\x59\xbc\x66\x12\x0b\x0d\xf2\xe1\x9b\xfb\x1a\x72\x44\x47\x7a\x90\xcf\x11\x80\x70\x00\xc4\x21\x1c\x10\x03\xc4\xba\x41\xf3\x89\x33\x0f\x6e\x10\x71\x21\xd4\x76\x77\x75\x7e\xa4\x4b\x7b\x89\x5d\x6b\x91\x76\xb7\xa0\x9d\xbb\x8b\xbd\x55\x17\x6b\x62\x7e\x40\x99\xb6\x44\x09\xd1\x77\x10\x07\x77\xe0\xb1\x71\x9a\x5f\x6d\xfe\x9e\x27\x49\x9d\x84\xd4\x33\x2a\xdb\xa2\x6d\xc5\x54\xc1\xaf\x03\x5b\x5f\xdb\xb3\x07\xb7\x55\x34\x97\xa0\x0f\x88\x41\x1c\xdc\x01\x01\x53\x5c\xca\x47\xb7\x30\xf8\x6b\xb7\x7e\x85\xde\x8e\x6e\xe0\xd0\x97\x62\xa6\x6a\x13\xde\x6e\x3e\x31\x63\x9a\x22\x8c\xaa\x71\x42\xb4\x0b\xe2\xe0\xe3\xd0\xf1\x34\x20\xe8\x5b\xf6\x8a\x67\xd8\xed\x11\x14\xe9\x5b\x5d\xdf\x8f\xb1\xee\x60\xca\x45\x70\xc9\xb2\x7d\x48\x42\x35\x28\x09\xe3\x42\xb4\x0b\xe2\xe0\x0e\x38\x99\xb3\x3d\x76\xa9\xfe\xe1\x87\x5a\x92\xfb\x39\xfd\x8f\x7d\x62\xd6\xa7\xb0\x0c\x26\xd5\xf7\xc5\x84\xba\xd7\xd1\xf0\x2f\xb0\xed\x23\x1c\x00\x71\x50\x1d\x00\xc4\xba\x41\x93\xbb\xb3\x1c\x90\x7d\xe6\x23\xac\xa9\xf7\x63\x20\x5f\xa8\xdc\x70\xe1\xf7\x96\x8d\x62\xe1\xfb\xc1\x03\x54\xfb\xd1\x41\xb4\xdb\xc6\xfb\xf8\x0a\x4d\x88\xbe\x83\x38\xa4\xf3\x57\x39\xaf\x25\x55\xdb\xe3\xcf\x64\xe7\x98\x47\x94\xdc\xc8\x6d\x99\x4b\x60\x78\x5e\x5c\xaf\xe4\xd6\xab\x74\x81\xf1\x71\x7a\x00\x74\x46\x26\x88\x83\x3b\x50\x73\x95\x40\x26\xdb\x87\xb9\xfa\xc1\xf1\x00\x4b\x83\xb2\x97\x9e\x5e\x86\xe2\x7d\x9c\x4f\xcf\xa4\x16\xa2\xae\x1c\x8a\xa2\xf0\x27\x20\xda\x05\x71\x48\xf5\x50\x24\x6a\xde\x33\x08\xed\xa6\xae\xaf\x84\x2c\x76\x5f\x35\x66\xb3\x80\xeb\xe4\xaf\x9c\x9f\xc2\xa5\xc2\x17\x54\xb3\x38\xe5\x24\xa0\x7a\x08\xe0\xe0\x0e\x18\x96\xe1\x3c\x65\x3f\xcd\x8f\x4f\xbd\xc8\xfb\xbd\x65\x74\x4c\x84\xe8\x65\xa3\x70\xa2\x23\x11\x46\x3f\x49\x6c\x08\xd5\x76\x47\x2f\xc2\x01\x10\x07\xd5\x01\x40\xac\x1b\x34\xd3\x3e\xcb\x81\xe9\x6b\x81\x0e\xd3\x37\x59\xa5\x6c\xb2\x9b\xf9\xf7\x7b\x93\x5f\x44\xeb\xd6\x67\x04\x8b\x6c\xa4\xa5\x37\xf4\x7c\xc8\x43\xbf\xed\x87\xe8\x3b\x88\x83\x3b\x90\x7e\x8c\xb5\x7e\x32\x4b\xe7\x4d\xf2\xed\x28\x93\xa2\x5a\x32\x88\x8c\xb7\x82\x30\xfd\x5b\xf1\xcd\x80\xf9\xbd\x8a\x66\xfb\x10\x42\x68\x85\x18\xc0\xc1\x1d\x50\x31\x71\x51\x5c\x41\xf9\x3b\x8e\x31\x45\x1d\x91\xb5\x6b\x79\x21\xfa\x7a\x40\x9b\x76\x88\x46\x85\xde\x6e\x07\xce\x87\xe3\x30\xe8\x5e\x00\xe2\xe0\xe3\x60\xec\x71\x2b\xc9\x3b\x5c\x4c\xed\x96\x15\x1e\xbe\xff\xdb\xcf\x09\x38\xee\x6a\xa5\xb1\x93\x87\x72\xa8\xe6\x5c\x59\x9d\x26\xb2\x0f\x10\xed\x82\x38\xb8\x03\xbb\xef\x62\x17\x9c\x4a\xd7\x7e\x55\x34\x3d\xb7\x2d\x23\xdc\xac\x65\x2e\x76\x37\x28\xf4\xaf\x7e\xd9\xad\xc0\xff\xe8\x91\xd6\x55\x1b\x84\x03\x20\x0e\xaa\x03\x80\x58\x37\xe8\xb1\xe7\x2c\x07\x18\x08\xdc\xf7\xa3\x43\x15\x89\x64\x0d\xfa\x2c\x3e\x95\x49\xa8\x8a\xdf\xe4\x0b\x89\xee\xb1\x11\xb8\x16\x9d\x60\x96\x1f\x95\x07\xbd\x25\x03\x71\x70\x07\xa2\x29\x32\x16\x6d\x98\xe5\xed\x4b\xea\x9b\xe9\x33\x98\x4d\xd7\x03\xfd\xac\x85\xe6\x94\xee\x8b\x14\xdb\x94\x6e\xcb\x3e\xf1\x82\x3e\x9b\x02\x71\x70\x07\x0a\x26\x7f\x72\x6c\x93\xd3\xfb\xf0\x7c\x31\xfa\x68\x6a\xa2\x69\x7c\x48\xce\x5e\xae\xdf\x11\x22\xfe\x92\xf8\x5d\xf8\x9b\xc4\xbb\xd0\xbd\x0b\xc4\xc1\xc7\xc1\x37\xe2\x67\xe3\x0b\x67\xcd\xd5\x9d\xb8\x8f\x02\xef\xed\xb0\x82\x3e\x7f\x49\x6a\x5e\x9b\xb9\x53\xe0\x75\x94\x6a\x43\x9c\x8b\xb1\x8b\x68\x17\xc4\xc1\x1d\x50\xfa\xac\x23\xf6\xe1\xa7\x00\x4f\xed\x0e\x3f\x45\xcb\x61\xa3\x69\xed\x72\xb5\xd0\xeb\xd4\x22\x99\x26\x1d\x8a\x8f\x29\x1c\xdf\x55\xa1\x4d\x5a\x00\x1c\x54\x07\x00\xb1\x6e\xd0\x33\xe8\x59\x0e\x04\xc7\x60\x91\xd2\x54\x24\x9d\xa6\x32\x5c\xdf\xfe\x11\x72\xf7\xed\x43\xd3\xcb\xf7\xee\x9a\xb5\xf0\x61\x16\x1b\xca\xca\x94\x8a\xfc\x45\xf4\x1d\xc4\xc1\x1d\x90\x6c\x65\xeb\x7d\xb0\x5a\x67\x10\x1c\x59\xa2\x6b\x89\xe7\xb6\x17\x91\xcb\xb4\xbf\xe1\x4a\x91\x2c\x13\xdc\x83\x62\xa8\x7c\x01\xba\x6f\x83\x38\xb8\x03\x1b\x0f\x0a\x89\x88\x43\x16\x12\x47\x16\x18\x48\xae\xb4\xac\x1c\xa5\x3c\xe3\x0c\x3a\xee\x37\x2b\x8b\xbc\x15\x61\x31\xe0\x5e\x0f\xa5\x11\x40\x1c\x7c\x1c\x8e\x97\x37\x69\x19\x5e\xae\x1b\x0a\xe6\xff\xb5\xd1\x0f\x5f\x8d\x38\xca\x4d\xfd\xfd\x9b\x23\xfe\xc7\xc8\xb2\x50\x81\x78\xad\x0e\x94\xf0\x00\x71\x70\x07\x36\x45\x45\xad\x38\x37\x93\xae\x66\xb9\x91\x8f\x3c\x2f\x9f\xd3\x37\xd8\x5a\x2a\xa1\x63\xf4\x17\xb9\xcc\x16\x27\x96\xd1\x6f\x49\x0d\xed\xd6\x0d\xe0\xa0\x3a\x00\x8a\x75\x83\x96\x15\xff\x89\x75\x8b\x21\xc7\xba\x17\x6f\xe5\x5d\xa3\x53\x5c\xca\x09\x26\x22\xaa\xa6\x0e\xec\x97\x40\xd9\x60\x6e\x7e\xb7\xf8\x78\xe0\x63\x30\x5a\x49\x90\xcd\x12\xce\xb9\xac\x9c\x20\xc7\xba\x37\x59\xfb\xab\x0b\xa6\xa3\x86\xae\xff\xfc\xce\xce\xe3\xed\x47\x51\xf0\x50\x17\x65\x03\x9f\x84\x60\xc4\xa8\x42\x33\xa1\x54\xf2\x5c\x76\xeb\x16\x43\x8e\x75\x6b\xdd\xd8\x67\x67\xb9\x39\xb4\x3c\x2e\x8b\x97\x6e\x4a\xe2\x6d\xcb\xcc\x72\x94\xb0\xb7\xc0\x35\xea\x51\x7a\xe5\x51\xff\xea\x8e\xf7\xb9\xf4\x16\x39\xd6\x6d\xc2\x3a\x18\x6b\x59\xc7\xb6\xe4\xc5\xed\xc8\xb7\xfb\x20\xb3\xd7\xe0\x14\x23\x44\xef\xba\x16\x8b\x13\xb7\x61\x54\xaf\x31\xaf\xc9\xb9\xf4\x16\x39\xd6\x3d\xc7\xbd\xa9\x25\x39\x71\xfd\xd3\xa5\x81\x27\xcc\x1c\xdd\x02\x2a\xbc\xca\xef\x7c\x6e\x26\xdc\x14\x2c\x0e\xa6\x74\xa8\x7d\xa1\x47\x7e\x2e\xbd\x45\x8e\x75\xeb\x32\x48\x1a\x61\xdc\xd0\xc2\x7f\xc1\x50\xf5\xad\xd1\x73\x42\x33\x57\x28\xc8\x2f\x04\x0d\xb3\xdf\x23\x7f\xcc\x6d\xcc\xad\x3d\xee\x5c\x7a\x8b\x1c\xeb\x6e\xe1\x98\x7a\xcf\xb7\x41\xe8\x7c\x63\x93\x6b\xc3\x7a\xc9\x93\x91\xca\x74\x94\xeb\x05\x8d\x9a\x34\xee\x92\xbe\x92\xe0\x5e\x50\xf8\xb9\xf4\x16\x39\xd6\x1d\x16\x33\xfe\xe5\x49\x90\x1a\xe1\x89\x62\xc6\xac\x19\x61\x7d\x93\x37\x9e\xa7\x4e\xa0\xe3\x8b\xb9\xc2\x85\xa5\xdd\xe3\xac\x77\xa7\xe7\xb6\x06\x08\xfa\xa5\x9e\xb9\x06\x88\x11\x1e\x8a\xfa\xe3\xa6\x6b\x5a\x1f\x3d\xa1\x5e\xe5\x73\xaf\xbc\xae\x96\x94\x3f\x5c\x6f\xc6\x15\xd4\x2c\xe7\x1b\x9f\x68\x43\xbb\xd3\x82\x38\x78\xa1\xe7\x32\x0f\x6e\xa3\x8b\xbc\x13\xb9\x31\xc9\x7b\xf7\x46\x6d\x9c\x86\xef\x05\xcf\xa1\xe5\x59\x8a\x54\x86\xb9\xae\xbb\x57\xaf\xca\x86\x43\x6b\x75\x00\x0e\x5e\xe8\x49\x8f\xd6\xe4\xa5\x51\xaf\xe8\xd5\xe8\xa3\x04\x7a\xf8\xbd\x23\x73\xc4\x8b\x28\xf8\x62\x34\x79\x83\x93\xe6\xcd\x65\x06\x9b\x30\x28\x6e\x05\xe2\xe0\xe3\x30\xea\xa0\x7f\x98\xb3\x73\xdf\xcf\xa6\xae\xf1\x9d\x58\x43\xe0\x0a\x81\xc0\xf6\xc9\x68\x9e\x5e\xc4\x81\x74\xad\x77\xc9\x9a\x23\xb4\xb6\x08\xe2\xe0\x85\xbe\xf0\x12\x5e\xcb\x44\x66\x90\xe5\x4b\x5c\x4f\x54\x0d\x81\x36\xa5\x0a\x54\x5c\x16\xac\x81\x9e\x25\xac\xb9\x92\xc7\xeb\xbe\x54\xcb\x88\x42\x0f\xe2\xa0\x9b\x3d\x20\xd6\x0d\x2a\x9b\x67\x39\x90\x7a\xe1\x37\x8d\xb3\xd6\x83\xbc\xc2\xc8\x8a\x60\x09\x37\x5c\xfd\x17\xbe\x56\x5b\x2d\x56\xa4\xf7\xd1\x71\x4e\x0a\x2c\x1e\xf7\x40\xdf\x30\x82\x38\xa4\xdd\x39\x33\x89\x72\xe9\x37\x36\x72\x3f\x5d\xbe\xc2\xb7\xf8\x25\x27\x59\x26\x2b\x5c\xd4\x16\xc7\x45\x64\xf7\x68\xfe\x16\x4d\x16\x7b\x24\xb4\x3b\x27\x80\x83\x3b\x30\x65\xb3\x33\x38\xc9\x11\x3d\xb3\x74\xad\xeb\x32\x46\x95\x8d\xee\x9f\x71\x09\x97\x37\x3c\xaa\x21\x7a\x9a\x77\x44\xca\xed\x49\xa1\x4f\x11\x40\x1c\x7c\x1c\xb4\xbf\x8a\xd0\x06\x3c\xa2\xf6\xfa\x66\xb6\x30\xe4\x75\xc4\xea\xaa\xc6\xb7\x47\x74\xc7\xc0\xca\xe1\xfe\xd5\x6a\x45\xee\xc1\x24\x68\x87\x4a\x10\x87\xe4\xc0\x8e\xcf\x0a\xb5\x5c\xbe\x60\xe0\x2c\x35\xfa\x7e\xc2\xd2\xb4\xec\x7b\xe9\x0e\xb4\x38\x93\xb2\xc6\x3e\xad\xe4\xf4\xa8\xec\x64\xc8\x01\x00\x07\xdd\xec\x01\xb1\x6e\xd0\x3d\xec\xcc\x6f\x39\xd9\x76\x5d\x19\xb2\x2c\xbf\xb3\x57\xdd\xda\xb2\x74\x31\x13\x0c\xf6\x0c\xb6\x20\xe6\x25\xa0\xb6\xf4\xd7\x0e\x59\x49\xf6\x80\xe2\x91\x20\x0e\xee\xc0\x8e\xdb\x1e\x4e\x97\x5a\x10\xaa\xb7\x14\xd9\x73\x07\x7d\x96\x76\xcf\xa0\xa3\x46\x89\xb0\xd7\x2f\x56\x47\xef\xbd\xd5\xba\xa9\x07\x7d\xd3\x0d\xe2\xe0\x0e\x1c\x08\xd4\x94\x84\xda\xcc\x11\xe4\xfa\x8b\x1d\x7f\x44\xa5\x94\x64\xff\x38\x2a\xb2\xf2\x93\xca\x9d\x39\x62\xc0\x2e\xfa\x02\x0a\xb4\xb8\x08\xe2\x90\x16\x01\x5d\x93\x86\xe3\x02\x46\xe8\xf4\x30\x4f\x8a\x82\xb0\x2d\x09\x66\x77\xbb\x9b\xb8\xc4\xdb\xc3\x7e\x3e\xfb\x69\x9f\xe3\x4d\x6a\x08\x2d\x02\x02\x38\xb8\x03\x5e\xf2\x38\xda\x45\x54\xc2\x9f\xd3\xe6\x3b\x27\x5e\xe0\x5f\xa7\xba\x74\x57\x5b\x6e\x35\x3e\x86\xb1\xaf\x8d\x52\x77\x57\x9c\x74\x1c\xe1\x00\x88\x83\xea\x00\x20\xd6\x0d\x9a\x50\x9c\xe5\x80\x75\xb9\x21\xdd\x46\xc3\xd8\x9d\x2f\x7e\x5f\xbd\x05\xbf\xa5\xd9\xf3\x47\x4d\x29\xac\x9b\x70\xbc\x79\x36\xe1\xe0\xbf\x7b\x6f\xbc\x1d\xd1\x77\x10\x87\xb4\xeb\xa1\xdb\x61\x06\x1f\xd3\x25\x07\xed\xdd\x36\xd7\x2b\xe3\x29\xae\xc5\x94\x85\xf2\xe1\x4f\x37\xf6\xbb\x9b\xbf\x98\x04\xed\xf7\x43\x7b\x30\x80\x38\xb8\x03\x61\x3a\x85\x49\xdb\xfd\x72\x4d\x1f\xc2\xac\x71\x23\x16\x51\x28\xd4\x97\x67\x31\xf0\xd9\x51\xe3\x82\x5b\x3f\xae\x66\x2f\xde\x86\x8e\x6b\x03\x71\xf0\x71\x98\x73\x22\x67\x08\xe5\x9a\x2c\xd2\x78\xdc\x7d\x97\xc5\xc6\x4b\xc0\xad\xe1\x41\xb3\xd2\x78\x5f\xd8\x9d\x77\x58\xce\xb6\xa6\xa5\x13\x88\x76\x41\x1c\xdc\x81\x1c\x2e\x3b\x5d\xff\x9c\x7a\x87\x9e\xb1\x2a\xf4\x6f\x5e\x98\x5f\x6a\xfc\x2e\x2b\x4c\x25\x7f\x16\xbd\xad\xa1\x97\x1d\x84\x73\x97\x1f\xe1\x00\x88\x83\xea\x00\x20\xd6\x0d\x9a\xdd\x9d\xe5\x80\x9d\xc2\xe5\x88\x77\x16\xf7\x55\x6b\x4a\xf0\x45\x4f\x5a\x83\x96\xed\xdf\x04\x4e\x30\x9b\x39\x75\xb3\x76\x70\x1b\xd4\x12\x62\x43\x2f\x42\x40\x1c\xdc\x01\xf2\x0f\x4a\xcc\xdb\x71\x81\x81\x35\xd4\x51\x8d\xcf\x83\xcd\x31\x67\x8a\x99\xd8\x6f\x5d\xc7\x14\x09\xbb\x41\x3f\x70\x7a\x67\xe0\x11\xa2\x5d\x10\x07\x77\x60\xf1\x9a\xd4\x21\x55\x4c\xeb\xf5\x5e\x87\xd7\xd7\x0e\x31\x9a\x68\xfe\x0e\xb7\xf9\xb1\x38\xb3\x6c\xc5\x64\x94\x60\xff\xfe\xf4\xdc\x0d\xd1\x2e\x88\x83\x8f\x83\x59\xeb\xf5\xcf\xbf\x5d\xaf\x3c\x68\x51\x3a\x41\xab\x79\xc0\x1d\xd8\xf0\x7e\xd9\x2c\x92\xf9\xf5\xc0\x52\xe5\x7d\x5e\xdd\xa7\xbc\xd0\x42\x18\x88\x83\x3b\xb0\x6d\xc7\x4e\x63\xed\x30\xd2\x12\xbd\xae\x83\xc6\x32\xb8\x47\x30\x91\xb5\x82\xf7\xf2\x9e\xd0\xe2\x64\x98\xcd\xa8\xed\xd5\xfe\x38\x84\x03\x20\x0e\xaa\x03\x80\x58\x37\x68\xaa\x7d\x96\x03\x6f\x1d\x82\xee\xc9\xa9\x08\xb0\x87\xac\x75\x98\x32\xd4\x0f\xa0\xca\x1e\xd7\x36\x5d\xa2\x56\xad\x0e\xa8\xc1\x6b\x26\x94\xac\x2a\x40\xf4\x1d\xc4\xc1\x1d\xb0\x09\x7f\x2a\xf3\xfd\xe7\xcd\x9a\xcf\x98\x19\x84\x5a\xb8\xd5\xaf\x79\xd7\xfc\x42\x9c\xca\x69\xd9\x09\x52\x92\xd7\x89\x6a\xc3\xa1\x97\x82\x20\x0e\xee\x00\xad\xa2\xfa\xc9\xf0\x41\x4a\x6c\x29\x59\xa5\x27\x99\x38\xd3\x2a\x5e\xd5\x3c\xce\x7c\x24\xf3\x87\xfe\xdf\x83\x4a\x9e\xc9\x7c\xd0\xae\xda\x20\x0e\x3e\x0e\x6a\x64\xda\xa2\x89\x66\xe6\xb8\x8e\xf3\xc7\x1e\x32\x5d\xce\x4b\xfb\x0c\xa1\x6a\x32\x8d\x07\xe8\xf9\xf9\x39\x7e\x11\x72\x3f\xa0\x98\x28\x88\x83\x3b\xc0\xa8\x25\x44\xa1\xff\x03\x5b\xf7\x8a\x48\x51\x60\x86\xae\x01\x71\xfd\x5d\x1c\x6d\xc3\x31\xfe\x83\x9b\x97\xa6\x5f\xdd\x2f\xc5\x7b\x88\x70\x00\xc4\x41\x75\x00\x10\xeb\x06\x3d\xf7\x9c\xe5\x40\x5f\x9d\x19\xfd\xfc\x28\xee\x5b\x99\x9e\x7e\x49\x37\x6e\x09\xd9\x13\x59\x1c\xb4\x39\xc1\xe0\xd1\x56\x8d\xdb\xbe\x97\xbf\xe9\x92\x41\x7b\x1a\x00\x38\xb8\x03\x8b\x07\x46\x2f\x74\xd2\xe2\x3c\x69\x0f\x33\x78\xd7\x4b\xab\x6b\x5e\xfd\xed\x6e\xbe\x49\xa8\xa4\x7e\x95\x17\xf7\xd9\x41\x86\x84\x1d\xf4\x7b\x05\x70\x70\x07\xcc\x32\x19\x28\xbb\xf8\xfc\xee\xa7\x72\x1e\x17\xcc\x1b\xab\x87\xe1\xde\x41\x47\x4b\xd7\x7f\x15\x2f\x8d\xba\x7f\x1a\xeb\x9f\x06\xed\x17\x00\xe2\xe0\xe3\x90\x3f\x2b\x6c\xab\x5f\xc9\xff\xc1\xf4\x45\x12\x17\x8b\x85\x7a\x22\x65\x66\xb9\xb7\x1f\x2f\x36\xe5\x4f\xd2\xde\xb7\x5f\x0c\xae\x42\x0b\x61\x20\x0e\xee\x00\xbe\x44\x44\x44\xee\x28\x5d\x6a\xd6\x6d\x5a\x81\xe9\x07\x2a\xe6\x1d\x72\x56\x4b\xac\x85\x7f\x3e\x2b\xfa\xcc\x13\xdf\xe1\x29\xa4\x47\x38\x00\xe2\xa0\x3a\x00\x88\x75\x83\x1e\x42\xcf\x72\x60\xee\x8f\x1b\xe1\xd6\x06\x9d\x34\xf5\x9d\x05\xd7\xd7\xfa\x09\x3c\x81\xed\xa1\xba\x63\x4d\x61\x3e\x4e\x6e\x15\x76\x61\x01\x17\xa0\xfb\x36\x88\x83\x3b\x20\xd1\xf0\xd9\xbd\x5c\x2f\xb3\xeb\x57\xd1\x5e\x89\x9e\x6a\x6d\xa9\x85\x60\x9f\x66\xb2\x22\xc6\x0a\x87\x8e\xb7\x42\x23\x2f\x66\x31\xb4\x67\x04\x80\x83\x3b\x20\x98\xe4\x9e\xde\x28\x97\xe4\xaf\xe1\x31\x1d\xd5\x31\x3a\x34\x60\xba\x6b\xf9\x95\x56\x50\x90\x5c\xd2\x60\xd1\x22\xa7\x3b\xec\x3e\xa2\x5d\x10\x87\x74\x7c\x25\x85\x5c\x21\xc3\xce\x41\x81\x59\xce\xb2\x29\x3f\x27\xd3\xc5\x1b\x9f\xac\x31\x6b\x17\xa2\x14\xdb\xdb\x95\x97\x9a\x0b\x7b\xa0\x76\x41\x1c\xd2\x0b\xa1\x67\x52\x63\x3d\x53\x68\xd1\x39\x4c\x8f\x9e\xbc\xd2\x21\x16\x7c\x3e\x17\xd8\xba\xa5\x4c\x56\x79\x78\xfb\x3e\xee\x46\xe5\x42\x04\xf4\x42\x08\xc0\x41\x75\x00\x14\xeb\x06\x05\x06\xff\x89\x75\x8b\x21\xc7\xba\x39\xba\x51\x37\x4b\x84\x2e\x3d\x28\x8c\x2f\xd1\x9d\x64\xe0\xb3\xb2\xb9\xea\x3e\x3b\xab\x79\x1f\x4b\x5d\x59\x52\xa2\xc6\x6a\xc1\xe3\xdc\xd6\x30\x40\x17\x3a\xcb\xd3\xdf\x01\xf3\x9a\x9a\xdd\xef\xba\x43\xec\x97\xe3\x74\x59\x94\x15\xbe\xb3\x4a\x1b\xd0\x31\x5f\xba\x88\x5f\x6e\xce\x98\x8c\xcf\x0e\xd5\x14\x10\x07\xf7\x34\x0e\xd7\xd6\x7a\x33\xcb\x6e\xfb\xa5\x52\x19\xf1\x6e\x58\x0e\xc7\x20\x96\xe8\x70\x77\x0a\x9a\x14\x29\xbe\xc2\x1c\xa6\xda\xbd\x01\x44\xbb\x20\x0e\xee\x69\xe7\x0f\x22\x4d\x0c\x37\x45\x01\x11\x97\xc9\x75\xbb\x87\x17\x5c\xc4\x32\x25\xdf\x60\x11\x45\x6b\xdf\x8d\xa5\xbe\x5d\xaa\xf9\x3c\x04\xd1\x2e\x88\x43\xda\x97\x2e\xd9\x45\x57\x56\xd7\x74\x69\xf1\x78\xd7\xe2\x41\xb9\xb3\x29\x4d\xb4\x7b\xe9\x03\xbc\x0e\xae\x30\x67\xfa\x13\x01\xfe\x5f\xd0\xa7\x73\x20\x0e\xee\xe9\xc3\x72\xc7\xee\x5e\x4e\x0f\xcd\x28\xc9\x88\xbe\x2f\x1c\xa6\x2e\x7a\x1a\x51\x37\x9c\xf3\x7e\x64\xe5\x68\xac\xae\x59\x4d\xfa\x4f\x23\x3c\x05\x71\x50\xad\x02\xc4\xba\x41\x91\xe0\xb3\x63\xdd\xa8\x8f\x51\xff\x7a\x3a\xa8\xce\xc4\x26\x8c\x8f\xe5\xd0\xa1\xf8\x7b\xf1\x57\x33\x10\x77\x9c\xe2\xcd\xed\x3a\x4f\x5d\x58\xa2\x34\x40\x44\xa4\x41\x1c\x72\xac\x5b\x22\x4b\xfc\xb0\x3d\x49\xca\xdd\xbb\xac\xe6\xae\x22\xb3\x52\x48\x99\xbc\xd2\x29\x45\x24\x4a\x68\x96\x98\xbc\x29\x21\xc7\xad\x8b\x88\x96\x41\x1c\x72\xac\x5b\x35\x02\xeb\x38\x6e\xfe\x44\xec\xbd\xd9\x5c\x24\x63\xae\x84\xc9\xe8\x85\x79\x4a\xa2\x69\x63\x7f\x99\x0f\x15\xd5\x12\x57\x27\xd0\x11\x2d\x83\x38\x7f\x09\x14\x9c\xff\xdd\x32\x81\xf2\x5f\xc2\x93\xa3\xd8\xc0\xdb\xe1\x53\x8b\x91\x94\x6e\x1d\x2d\xd6\xad\x5b\xee\x5c\x2b\x83\xac\x28\x1f\x8c\xcc\x85\x08\xb3\xa0\x58\x77\x68\xf6\xf4\xb2\xc0\xf3\x1b\x1e\xde\x96\xe3\xef\x2d\x5f\x68\x77\x75\x52\xad\xcf\xdf\xdf\x7b\xfe\xd6\xa6\xeb\xdb\xfd\xb2\x0d\xe3\x81\x7f\xc7\xba\xd3\x6d\xd9\x3f\xfb\xef\x56\xb3\x19\x33\x6a\x1a\xe7\x32\x14\xbc\xd0\xcd\x34\x4c\xfa\x7d\x40\xd1\xc9\x19\x38\x3a\x2b\x4e\xe5\xd6\xf6\x2f\xb4\x21\xec\xf3\xb0\xb4\xda\xe1\xaa\xbd\xb5\xeb\xe3\x1f\x9e\x43\xba\x7b\xfd\x4b\xe2\x3a\x0e\xdf\xf0\x2d\x5e\xe3\xac\x54\x45\x7d\x97\xfa\x7f\x2f\xd6\x0d\xea\xdc\x19\xb1\xee\xe0\x05\xf9\x80\x3a\xcd\x1b\x36\xf7\xe4\x0e\x0a\x83\x35\x63\x03\x7e\xaf\x86\xc7\x8a\x13\x10\xe0\xf0\xac\xf9\x5e\x72\x3f\x3e\x60\xf8\x77\x60\x65\xab\x77\xff\x05\xcb\x63\x86\x45\x55\xcd\x57\x83\x81\x6f\xae\x38\x6c\x60\x3e\x91\xbc\xbe\x95\x3a\xf6\xae\xc7\x5c\x89\x3b\x27\xe4\x5f\xa8\xe3\x5a\x97\x31\xcf\xcb\xec\x65\x9a\x4f\x8f\xfa\x6d\x6b\x85\x9d\x37\xb9\x46\x8d\x87\xbb\xfe\xcc\x60\x0c\x5c\xf3\xff\x1c\x97\xc3\x0e\xc5\xba\x41\x97\xff\x27\xd6\xed\x83\x14\xeb\x8e\x9a\xe0\x5a\x1b\xc1\x9a\x92\x79\x25\x44\xd3\x27\x3c\xf8\x27\xfe\xf5\xe6\x71\xb3\x9c\x93\xde\x97\x06\x75\x56\xfe\x00\xac\xd3\xb0\xf3\x58\x08\x47\xe1\x47\x7a\xb7\xf2\xb5\x4c\x89\x86\x56\x4b\xd3\x52\x6e\xce\x3e\xff\x4e\x68\x80\x9b\xf6\x1f\x85\x9f\x1e\xf5\xf4\x66\x2b\x61\xb7\xfd\x2a\xa2\x2f\x3f\x39\x8f\xcb\xfa\x20\xc7\xba\x47\xda\x32\x5a\x72\x33\x2a\x7d\xb7\x47\x09\x4c\x58\x8c\x96\xd1\x99\x88\xee\x67\xda\x4b\x76\x9a\x25\x6f\xf9\xf2\xb8\x09\x30\x0d\x9f\x4b\x6f\x75\x91\x2e\xab\x2d\xe9\xdd\x79\xeb\x75\xb8\xc2\xf7\xfa\x9b\x6c\x77\x57\x42\x7f\x3f\xfb\xd5\xc1\xde\x32\xf2\x5a\x33\xb0\xc4\x52\x12\x23\xd2\xb2\xfa\x5c\x7a\x8b\x1c\xeb\x56\x8e\x41\x65\xd7\x32\x30\x7a\x9f\xf2\x48\xb0\x4a\xb1\x3d\x65\x0e\xf5\xa6\xdb\xdf\x82\x9e\x18\x34\x5a\x4b\x86\x5f\x85\x3b\x89\xae\xe7\xd2\xdb\x78\xa4\xcb\xd6\x31\xaa\x17\x67\x58\x56\x49\xa7\x9b\xb6\x86\xe5\x5e\x7b\xd7\x2a\x7c\x8f\x5b\xe4\x82\x02\x5e\xc0\x13\x86\x3a\x74\x32\xeb\x32\xa5\x73\xe9\x2d\x72\xac\xbb\x5d\x11\xa7\xe4\x10\x45\xd2\x6b\xea\x92\x3e\x29\x16\xd1\x1e\x71\x58\x09\x89\xb4\x54\x66\x80\x5f\xab\xf6\xe5\xd7\xb8\xd9\x97\xce\xc7\xe4\x6a\xa4\xcb\x86\x63\x8d\xe0\x59\x31\x0a\xdf\x57\xc3\x67\x3a\x3c\x56\x51\xd6\x7e\xd0\xfc\xf9\xa6\x8a\x10\x45\x40\xe2\xab\x04\x3a\xbb\x2f\x34\x1f\xce\x6d\x3a\x04\xfa\xa5\x9e\x35\x1d\x32\xba\xcc\xac\xc7\xbb\xe3\xe1\x18\xfc\xb2\xf3\xd8\x9a\x6a\x96\xf1\x43\x9e\x39\xb9\x68\x9f\xad\xeb\x2d\x9c\x68\x8a\x2f\x7f\xd4\xa1\xfc\x06\x88\x43\xda\x96\x8f\xd4\x26\xf9\x78\x73\x4b\x9d\xe5\x01\x59\x47\xba\xaf\x5c\xb8\x52\x8d\xd2\x00\xc9\x9a\x44\xd6\x62\x4f\xea\x49\xf9\x85\x5a\x28\xcb\x07\xe2\xe0\xd3\xa1\x8b\x3f\xef\xbc\xef\x38\x12\x39\x45\xc7\xf6\xf3\x5a\xb9\xd4\x5f\xf2\xcb\xb0\x43\x6e\x62\xe6\x4f\x39\x8e\x90\x3d\xbd\x23\xb1\xc7\x10\x94\x3d\x04\x70\x48\x5f\xa7\xe3\xd4\x2a\xe1\x7c\xfa\x51\x3c\x81\x56\x58\x61\xaf\x89\xfb\xc7\xf9\xc0\xd7\xc3\xcc\xdc\x27\x69\xeb\x69\x49\x47\xfd\x97\x22\x71\xe8\xeb\x74\x00\xe7\x7f\x0f\x05\xed\xdf\xed\x6a\xf5\xa4\xa0\x8f\x56\xe7\x4d\xfb\x93\xb6\xfe\x0c\x26\x68\xfc\xf1\x0a\xcb\x73\x7a\x5f\xbb\x51\xbf\x9d\x7e\x95\x83\x52\xc0\x5d\x12\x11\xeb\x06\x71\xfe\xf7\x50\xe8\x7d\x7c\x03\xff\xa7\x3e\xff\xc7\x93\x1b\xa8\x6a\x9e\xa5\x80\x66\xc3\xe2\x40\xe5\x2f\xb1\x99\x97\x41\x13\xc5\x8d\xf9\x58\x18\xfe\x78\xfd\xd1\x4c\x79\xd7\x72\x4f\x66\x1a\xe5\xaf\x62\xcd\x99\x22\xba\x0e\xe2\xe0\x0a\x98\xb2\xd2\x5f\x43\x47\x4b\x55\x12\xc7\x0a\x5a\x5a\xbb\xf5\xae\xed\x7b\x78\x78\x93\x88\xf5\x03\x03\x21\xaa\xb9\x06\xe5\x74\x5c\x22\x44\xbb\x20\x0e\xae\x40\xc3\x72\x69\x1b\xdd\x6e\x7b\x96\xe2\x4f\xe7\x0c\x43\x3c\xe2\xc5\x84\xb7\x8e\x7f\x69\xb9\x35\x5f\x15\xdb\x87\x4f\x54\xea\xa9\xa4\x22\xda\x05\x71\x48\x51\x26\x7c\x69\x29\xf1\x53\xb2\xd9\x51\x52\xf3\xe0\xd1\xa6\x80\xc2\xa6\xb8\xb7\xd2\x03\x99\x7a\x54\x9f\x37\xde\xe1\xea\xf8\xd3\x40\x1f\x91\x83\x38\xb8\x02\xa4\x8f\xaa\x53\xaa\x8f\xb2\x2c\x65\x1e\xfd\x9e\xb6\x12\x3b\xa8\xfb\xde\x78\x17\x3b\x3a\x41\xfd\x2e\x67\xa5\xc0\x5f\xd5\xb4\x6e\xe8\xa3\x6c\x10\xf7\x8f\x02\xff\xf7\x66\xf9\x5f\xd1\x7e\xc0\x2d\xec\x2c\x07\xfe\x12\x35\xba\x68\xed\x13\xed\xe9\xd1\xec\x53\x6d\x1d\xf3\x4d\x18\x6c\xd2\x79\xc4\x84\xef\xd4\x59\xa1\xf4\xfe\xd4\x7c\x10\x09\x6d\x50\x03\xe2\x90\x22\x3c\x6c\x25\x4f\x03\x2f\x5e\xf8\x34\x2a\x68\x4f\x39\x2a\x77\xba\x5f\x2f\x8f\x99\xb5\xf3\x34\xd6\x28\x43\xea\xc2\x4a\xf0\xf5\xaf\xd0\x4e\x87\x20\x0e\xee\x80\x78\x70\x6a\xe5\x1d\x53\xbd\xda\xe0\xc3\x15\xb6\xac\xb7\xef\x4a\x06\xcd\x45\xdc\x64\xeb\x3b\x24\xdf\xbe\xe8\x9b\xfa\x91\x16\x0b\xb9\x05\xe2\x90\x36\xec\xea\x90\x33\xc2\x3e\xcc\x16\xf2\x7e\xfe\x44\xe0\xbb\xca\x49\x89\x05\xaf\xa0\x60\x28\xcf\x83\xb7\x4a\x8b\xda\xdc\xde\x98\x97\xa5\xa1\x0d\xbb\x00\x1c\xdc\x81\x55\xb6\x62\xdf\x5c\xdd\x8b\x77\x8c\x8a\x7c\xa5\x03\x62\xa3\x46\x9a\xbe\xde\xee\x9d\x75\xc7\x19\x13\x36\x21\x79\xd4\xd4\x2d\x14\x89\x70\x00\xc4\x21\x1c\xf0\x01\xc4\xba\x41\xf3\x89\xb3\x1c\x30\x95\x5f\x78\x72\x3f\xf8\x5d\xea\x33\xc1\x07\x02\x14\x37\x93\xb7\xa3\x68\xbb\xd2\xc6\xc2\xaa\x50\x31\xee\x33\x7e\x76\x30\xce\x87\xa2\xfd\x20\x0e\xee\x80\xee\x5f\x4a\x1d\x99\x8c\xfb\xe5\x99\x9d\x65\x8b\x1a\xbb\x0f\x3f\x3d\xaa\xc0\x77\xfa\xe6\x65\x65\xfe\x69\xdc\x36\xa0\x56\x42\x2d\x1b\xda\xf0\x02\xc0\x21\x6d\xd6\xb4\xb3\x52\xe1\x9c\xe3\xcc\x33\x2d\xd9\xd4\x8d\x67\xef\x9a\x10\xb3\xa0\xe8\xde\xfe\x64\xcf\xe3\xa6\xf7\xb7\x8e\x42\x39\x0b\xe8\xc9\x18\xc4\xc1\xc7\x81\x6a\xa3\x08\xf3\xa2\x51\xc3\xee\xe7\xf0\x56\x65\xca\x87\xcb\xa6\xe5\x7d\x8e\x1d\x75\x82\x94\x39\x22\x69\x8a\x91\x9d\x53\x76\xfa\x88\x76\x41\x1c\xdc\x01\x39\x4b\xaa\x8f\xa8\x72\x4f\x16\xa6\x2a\x6e\xb7\xd9\x8b\xce\xd1\xe8\x9b\xd0\x8b\x1d\xe0\xc8\x10\x1d\x58\x5f\x8b\x0b\x4e\xcc\x77\x41\x38\x00\xe2\xa0\x3a\xa0\xfb\xdf\x0e\x80\x26\x77\x67\x39\x80\x16\xd6\x6f\xf9\xcb\x20\x28\x26\xf1\xfe\x74\xc1\x6c\x5e\xee\xc2\xd7\xd7\xdf\xe3\x6b\xbf\xe6\x38\xf7\x94\xde\x11\xcd\xf1\x20\x84\xce\xb4\x05\x71\x48\x6f\xf7\x7f\x32\xb6\xce\x9f\x2a\xbc\x36\xe4\x6c\xf3\xfc\x66\x2b\xf0\x5c\xf4\x58\x77\xb6\x65\x9c\xfe\x77\xc4\x0f\x05\xae\x1f\x82\xb3\xc2\xd0\xdb\x7d\x00\x07\x77\xc0\xdd\xff\x55\x9b\x41\x57\xc1\xad\xfa\xab\x0a\x7f\xac\xea\xd8\xd1\x45\x69\xf0\x0d\x65\xaa\x30\xf2\xdf\xc9\xd0\x1c\x4e\xec\x24\x62\x20\xda\x05\x71\x48\xd3\x22\xc5\x4f\xb8\x68\x0f\xb4\x5e\x36\x94\xad\x8a\x18\x5d\x31\xf0\x1d\x08\x4e\xcd\x9d\x5c\x0c\xce\x69\xc1\x7d\x69\x17\x31\x34\x09\x9d\x08\x01\xe2\xe0\x0e\x58\x6a\x88\xbe\xbf\xeb\xeb\xc5\x19\x73\x33\xcc\xfc\xaa\xd4\xa9\x4a\x37\xa5\xbb\x81\x42\xa9\x23\x15\x95\xe4\xfc\xbb\x4b\x77\x5f\x92\x22\x1c\x00\x71\x50\x1d\x00\xc4\xba\x41\x33\xed\xb3\x1c\x18\x37\x8b\xec\xce\xac\xde\x16\x8d\xff\x8d\x7a\x91\x7f\xe7\x45\x83\x51\x52\xcb\xe5\x91\xe7\x5b\x2b\x4e\x18\xda\x22\xba\x93\xd9\x50\x8c\x11\xc4\xc1\x1d\x60\x5f\x1b\xa2\xb1\x92\x9e\x34\x1b\xe7\x11\xb3\xba\x1c\x52\xd9\x66\x57\x96\xdb\xdd\x7d\x8d\x5f\xf2\x95\x5d\x86\xb3\x7f\x55\x40\x1c\xa2\x5d\x10\x07\x77\x20\x71\xa0\xc8\xf1\x56\x28\x91\x60\x82\xa7\xa3\xdc\x51\x88\x43\x60\x50\xf9\x92\xd0\x4d\x56\x26\xaa\x8f\x97\xb2\xd2\x14\x50\xeb\xa0\x84\x07\x88\x83\x8f\xc3\x44\x7c\x30\x2d\x6d\xeb\xbd\x8e\xc3\xdf\x3e\xde\x95\x5c\xcc\xaa\x9d\x82\x03\xb1\x61\xfb\xaf\x32\xff\x4e\xfc\xea\xb8\x56\xc1\x48\x80\x68\x17\xc4\xc1\x1d\xa8\xce\xc2\xda\x97\x20\x98\x0b\xd1\xf4\x10\xda\xbb\x23\xa5\x97\x57\x66\xfd\xfe\x91\xd7\x48\xb9\x74\xe4\xca\x73\x07\x32\x16\xbb\x1c\x84\x03\x20\x0e\xaa\x03\xf1\xff\xed\x00\xe8\xb1\xe7\x2c\x07\x50\xb8\xc8\x6b\xcd\xfe\xe8\x6a\x2b\xe0\x74\x57\xd6\x72\x67\x60\x72\x25\xfe\xed\x6f\xb4\xe2\xc8\xa9\x5f\x12\xfb\x76\xb4\x10\xe0\x8a\xe8\x3b\x88\x83\x3b\xd0\xd2\xa4\xea\x31\xb3\xa0\x77\xf4\x6d\xaf\x5d\x32\xb9\x2d\x4a\xa9\x36\xb8\x75\xea\x92\x35\xc7\x93\xf6\xa1\x93\x47\xb9\x6e\x24\x50\x6a\x06\xc4\xc1\x1d\xe8\xa7\xc6\x65\x69\x77\xf9\x66\xec\x31\xa1\x80\xcd\xac\xf4\xa4\x31\x3f\xa1\x99\x79\x6b\x6f\x3f\x7e\xed\xd1\x5c\x54\xf6\xa5\x49\x68\x35\x13\xc4\xc1\xc7\x21\xf3\xef\x40\xbf\xc0\x63\x71\xf3\x14\x31\x3e\x46\xdc\xd0\xe7\xb3\xc4\x52\x3e\x9b\x49\x95\xf9\x39\xa8\xd4\xe4\x1a\x95\x36\x15\x9f\x11\xed\x82\x38\xb8\x03\xc2\x86\xa6\x14\x7a\x7e\xf4\x75\xec\x3b\xde\x94\x6a\xf3\x97\xde\x0d\x62\xe5\x3e\x63\xbc\x6e\xf3\xbc\x5f\x74\x92\x42\x8f\x2c\x33\x09\xe1\x00\x88\x83\xea\x00\x20\xd6\x0d\x7a\x06\x3d\xcb\x81\x5d\xd4\xb7\xbf\xf7\x87\xee\x3d\x79\xff\xee\x97\xab\x7d\xbe\xb7\x94\x1c\x79\x0c\xe9\xfc\x7a\xcb\x71\xdb\xcc\x1e\xbd\xa4\xd8\x22\x14\x95\x07\x71\x70\x07\x6e\x6c\xfd\x11\x68\x2e\x4c\xd3\x17\x2e\xaf\x7f\xc3\x93\xca\x24\x2a\x3e\x36\xe0\x98\x3b\xd7\x90\xc8\x49\xc2\x6b\x70\xd2\xf4\x07\x4a\x7a\x81\x38\xb8\x03\x8f\x4f\x67\x3c\xe2\x9c\x15\x8b\xa6\x6e\xd1\x5d\x1b\x53\xa3\x5a\x8d\x4c\xfb\x59\x50\xa4\x40\x99\x5e\xa3\x4b\x86\xdd\x86\xb2\x60\x03\x7d\x3e\x06\xe0\xe0\xe3\x20\x3f\xb6\xf8\xd0\x2d\xd1\xe6\x26\xe3\x86\x81\xda\x1f\x34\x57\x87\xea\x67\xca\xc4\xef\x9e\x73\x99\x8a\xb0\x55\x3c\xf5\xef\xa2\xad\x46\xb4\x0b\xe2\xe0\x0e\x7c\x71\x9d\x29\xc3\x66\xf9\x29\xac\x47\x71\x5f\x27\x34\x4c\x21\xce\x66\x7d\x27\x45\x24\xc4\xbe\xd3\xc6\x59\x5c\x21\xbb\xd9\x0c\x7a\x2e\x00\x71\x50\x1d\xa8\x06\xc4\xba\x41\xcb\x8a\xff\xc4\xba\x7d\x90\x63\xdd\xc3\x75\x4c\xc3\xec\x2a\xdc\x15\x6b\x7a\xb2\xfc\x11\x79\x4d\xbe\x98\x7a\xb7\x26\x2f\x2a\x58\x77\x52\xdf\xf7\x23\x94\xc6\x0b\xe7\x3d\x97\x95\x93\x6d\xa4\xcb\x4e\x6b\xd4\xe6\x9e\x18\x7e\xb5\xf1\x9d\x49\x3e\xf4\x0d\x88\x3e\xa8\x36\x4c\x59\x52\xe5\x0b\x25\x70\x72\xa5\x7d\xdd\x8f\xef\x52\x78\x2e\xeb\x44\xc8\xb1\x6e\x1d\xc5\x14\xb2\x3a\x9a\x79\x4d\x76\xb2\xa6\x54\xd1\x56\x0e\xc2\x45\xb1\x70\x7f\xfa\x83\xb8\x10\xd9\xe9\x9f\x58\x33\xe9\x14\x7e\xe7\xd2\x5b\x0a\xa4\xd7\x66\x6b\x94\xd2\xce\xed\xdf\xdc\xe4\x5f\x45\xe0\x25\xa2\xdf\xfd\xd6\x96\xa3\xf2\x25\x90\x90\x9e\xfe\x20\xf7\xa4\xd7\xed\xb4\x56\x3f\xef\x5c\x7a\x8b\x1c\xeb\xb6\x24\xdb\x1a\xab\xd9\xaa\x66\x63\x3d\x6e\x37\x7c\x1c\x11\x35\x76\x34\x71\xef\x6b\xcd\x74\xa9\x4f\x95\x4b\xdf\x94\x9e\xa0\xcc\xd4\xb9\xf4\x56\x11\xe9\xb2\xb9\xb7\xfe\x3e\xea\x38\x48\xa7\x9d\xde\x38\xf2\xc3\x2a\x3d\x5a\x93\xab\x8a\x0d\x2a\x14\x1e\x4e\x2c\xb3\xfc\x9d\x21\xf1\x83\x96\xff\x5c\x7a\x8b\x1c\xeb\xa6\x46\x79\xf6\x58\x77\x56\xc4\xcd\x82\x26\xef\x80\xa7\xeb\x43\x94\x0d\x0a\xba\xca\x75\xf6\xc0\x92\xdc\x27\xa8\xe2\xbb\x1f\xca\x0c\xcf\xa5\xb7\x2e\x48\x97\x1d\x7d\x36\x5c\x95\x8c\x93\xd2\x48\x4c\x62\xbe\xf0\xfa\x84\xa2\xe8\x4b\x89\xdd\x3b\x1e\x62\xb2\x49\xac\x32\x3a\xca\x11\x1b\x4b\xaa\x73\x5b\x03\x04\xfd\x52\xcf\x2a\xf4\x55\x36\x8c\x8b\x0f\x02\x0d\x37\x68\xb5\x86\x7c\xba\xae\x8d\x3f\x77\xea\x6e\x4a\xe2\xd0\x1b\x1c\x55\xb9\x6a\xdb\x52\x68\x5d\x45\x8f\x28\x70\x20\x0e\x5e\xe8\x31\x30\xe3\x63\x8a\x98\xd1\xc9\x48\xad\x79\x62\x0c\xbb\xda\x9a\xd4\x39\x88\xec\x1a\xc2\xba\x76\x89\x13\x72\x1b\x39\xf3\xdc\xa0\x83\xf1\x41\x1c\xd2\xf1\x2c\x78\x0c\x5c\xbd\xfb\x37\x52\x27\xf1\xc4\xdd\xbe\x67\x37\xf4\xd5\x9a\x1f\x78\xa8\x90\xa5\xed\x0f\x60\x4f\x38\x6e\x1b\xf4\x18\x43\xbb\xe9\x02\x38\xf8\x38\x74\xf6\xe7\x92\x34\x69\x39\x52\xb1\x27\x75\x3a\xac\xf7\xd3\xa3\x6f\x17\x3b\x19\x39\x39\xc9\xd3\xd8\x17\xfc\xdc\x28\xf5\xbb\x0f\xed\xca\x07\xe2\xe0\x85\xfe\x83\x7f\x08\x3a\xf5\xe7\x99\xd3\x2f\x8a\x5a\xa4\x9c\x14\x76\xf9\x4f\x36\x59\xe7\x36\x1d\x8a\x0a\x31\xcc\x1f\xd8\x2c\xd3\x74\xfe\x85\x0e\xdc\x07\x70\xd0\xcd\x1e\x10\xeb\x06\x95\xcd\xb3\x1c\x68\xd9\x67\x56\xc7\x47\x67\xbf\xff\x2d\x3d\x31\xd4\x71\xf3\x48\x59\xd6\xcf\x55\x3d\xd5\xad\xcd\xf7\x82\x14\x91\xdb\xc7\x1a\x3f\x68\x5b\x0b\x10\x07\x77\x40\x9b\xdc\x18\xd5\xaf\x6f\xde\xe4\xb9\x30\x4e\xd7\x8e\x76\x7e\xf5\xd2\xe7\x69\x53\xf5\xb1\xf9\xca\x30\xdc\x47\x4f\x24\x17\x6f\xb6\x41\x31\x69\x00\x07\x77\xe0\x03\x1e\xaa\xfd\x53\xbc\xb7\xc1\x44\x4f\x08\x6c\xa6\x64\xdc\x48\x7e\x0b\x85\x5d\x58\xc6\xb1\xfc\x4a\x63\x62\x38\xd7\xb7\xa6\x45\x89\x68\x17\xc4\x21\xfd\x16\x78\x89\x57\xee\x67\x99\x5a\x73\x3d\xff\xd0\x99\xfd\x5c\xaa\x94\x75\xef\x7d\x02\x36\x96\xfc\xf1\xef\x57\x9c\xe4\x03\x23\xb9\xd0\xb7\xa7\x20\x0e\xee\x40\x67\x0d\x2d\x57\x9f\x09\x1f\xdd\xdf\x3a\x5e\xe6\xc4\xdb\xbf\x36\x62\xb9\x82\x88\xcc\xbe\xa6\x08\x14\xcc\x0c\xbc\x24\xef\x51\x99\x41\x38\x00\xe2\xa0\x9b\xfd\xf6\x7f\x3b\x00\xba\x87\x9d\xe5\x00\x2d\xe5\xbb\xf0\x09\xda\x7b\x8a\xcd\xdf\x6c\x85\x34\xd9\x22\xf0\xf7\xb1\xf7\x03\xc7\xf1\x9f\x3e\x2b\x4a\x2b\x7a\xb1\xf9\x25\x09\xfa\x5f\x81\x38\xb8\x03\x1e\x21\xdf\x3e\x6d\xd9\xa9\xc4\xe2\x3c\xc6\x51\x3a\x8e\xa7\x3c\x18\x35\xe3\xb9\xfd\x6a\xe8\xee\x52\x71\x8a\x9e\x43\xe7\x30\x56\x39\xa2\x5d\x10\x07\x77\x60\x72\x77\xe4\x60\xb0\x48\x46\x7e\x8b\xad\xf6\xf7\x77\xe9\x05\x1d\xc3\xc1\x63\x01\x0e\x81\xf0\x1f\xb3\x2d\x7b\xea\xc9\xfd\x4f\xa0\x05\x5b\x10\x07\x1f\x07\x45\x5e\x26\x2f\xda\x3b\x7e\x0a\x69\x42\x1f\x36\xf7\xa7\x0a\x73\x1b\x8e\x63\x5f\x7f\x67\x76\xe8\x73\x90\x39\xf8\x51\xa3\x94\x0f\x1d\x2f\x07\xe2\xe0\x0e\xf8\x4c\xf7\xcd\x06\x4f\xdf\x22\x99\xb2\xb4\xe0\x5b\xc8\x72\x47\xed\xdd\x6e\x73\x20\x7c\x80\x7a\xe3\x5a\xc5\xf5\xa1\x1b\xe8\x9e\xd0\x02\x10\x88\x83\xea\x00\x20\xd6\x0d\x9a\x50\x9c\xe5\x80\xc5\xc1\x64\x89\xc7\xa1\x6f\xe3\x98\xea\x9b\x51\x4c\xbe\x34\x1f\xd5\x2c\xa5\x83\x17\x1a\xb8\x66\x3a\x57\x1d\x25\x5b\xc7\x12\x17\x10\x7d\x07\x71\x70\x07\x9e\x92\x4b\x3b\xd8\x45\x84\x14\x5e\xfe\x15\x51\xdb\xfa\xbb\xe4\x5a\x5d\x3e\x3f\x5a\x7a\xea\xb7\x74\x11\xf4\xb9\x58\xdc\xf6\x75\x1d\x44\xbb\x20\x0e\xee\x00\x41\x8d\xcb\x07\x4b\x4b\x37\x43\x5a\xbc\x23\xaa\x9e\x12\x3e\x1a\x9d\x4e\x63\x66\x7b\x2b\x1a\x12\x16\xd3\xfc\xf5\x12\x27\xee\x17\x88\x76\x41\x1c\x7c\x1c\x04\x48\x02\x02\x9f\x60\x15\x46\x95\xcb\xd9\x3e\x73\xbc\xbd\x45\x71\x11\xf5\x5b\x62\xeb\xe3\xad\x66\x82\x5d\x03\x97\xa9\xfe\x18\x6f\x68\xcf\x08\x00\x07\x77\x80\xe4\xe9\xa3\xc7\xe3\x9c\x53\xeb\xb7\x85\xf3\x62\x17\x1d\x9f\x52\xc5\x63\xb7\x90\x5f\x33\x56\x5d\xe0\xe0\x24\x10\x64\xfe\xf1\xa6\x1f\xe1\x00\x88\x83\xea\x00\xc5\x7f\x47\xf9\x40\xb3\xbb\xb3\x1c\x20\xea\x7b\xfd\xfa\xcf\x8f\x14\xd2\xde\xcb\x6e\xcc\xa7\xb3\xbc\x7b\xef\xcd\x28\x24\xf3\xbe\xd2\x50\x94\x94\x3d\x17\x91\xf2\x3b\x19\x43\xf4\x1d\xc4\x21\x2d\x00\xa9\x38\x45\x75\x7c\x2f\x09\x76\x95\xf2\x97\xb1\x96\x6f\x38\x45\xf5\x37\xb8\xdf\xd3\x71\x73\xa7\xbf\xdd\xc2\xec\x8a\xeb\x4d\x68\x81\x19\xc4\xc1\x1d\xa0\x3b\x71\x7a\x1b\xb2\xfb\x9a\x28\xd5\x0d\x87\x98\xbb\xe8\x3d\x7a\x85\x6b\x05\xb6\xe1\xac\xaa\xae\xf9\x52\xa5\x5d\x1e\xd6\x15\xe8\x73\x2c\x10\x07\x1f\x07\xf6\x30\x8e\xdb\x65\x7b\x6e\xa3\xdd\x95\x44\x8a\xca\x98\x62\x44\x4f\x6f\x8d\x58\x5e\x0c\x37\xfb\x50\x2b\x65\xd6\x15\xcd\x94\xf4\x0b\xfa\x7b\x01\x1c\xdc\x81\x90\xec\xb0\x2b\xa9\xd9\x32\xfa\xb9\xc1\x9d\xb2\xda\xef\x88\x06\xc7\x30\x49\xef\x57\x1e\x7d\xf8\x71\x9d\xea\xeb\x47\xde\x6b\x25\x82\x08\x07\x40\x1c\x54\x07\x00\xb1\x6e\xd0\x54\xfb\xcc\x13\x5c\xc4\x2a\xf3\x05\x94\xeb\xc2\xc6\xff\xd2\x3e\x92\xbc\xd2\x8c\x5f\x30\xe6\x66\xf0\xd9\x67\xe5\x8b\xc9\x56\x71\x74\x85\x4f\x06\xf4\x99\x17\x88\x83\x3b\x30\xa1\x91\x38\xe0\x49\x4a\x4e\x40\xbf\xf9\x98\x44\x0d\x85\xd5\x2d\xb1\x4a\x37\xbb\x59\xaf\xd8\xe2\x0e\x86\xb7\xe3\x70\x39\xbb\x1a\xb4\xa8\x06\xe0\x90\xf6\x78\x89\x40\x91\x97\xf5\xa3\x6c\xf3\x5b\x9d\x8f\xaf\xe3\x30\x21\x4d\xe6\x34\xb7\xd7\xbc\xd8\x84\x97\xbc\x9a\xa8\xeb\x5a\x9c\xcc\x00\xfd\x5e\x01\x1c\x7c\x1c\x32\x88\xfd\xbf\x2f\x53\x26\x18\xce\xca\x75\x10\xd2\x30\x61\xbf\x5a\x9c\xfe\x26\x95\xf6\x22\x26\xfa\x15\x36\x35\xe5\x8d\x14\x2c\x6d\x44\xbb\x20\x0e\x69\x11\x90\xe0\x1b\xba\xa4\x27\xba\xa7\xcd\xbc\x67\xdc\x80\xc0\xe2\xfa\x81\xa8\xc2\x86\x1d\x59\x09\xbf\x62\xb2\x94\x95\x30\x01\x16\xb4\x6b\x3f\x88\x83\xea\x80\xe2\x7f\x3b\x00\x7a\xee\x39\xcb\x01\x73\x1d\x3f\x9d\xb0\x52\x11\x77\xb5\xd5\x6d\x4e\xfc\x70\x7b\x3b\xca\x8b\xad\xf9\xf2\x77\x6f\x49\x7a\x59\x0c\xd6\x2d\x1e\xb8\x40\xcf\x05\x20\x0e\xee\x80\xcc\x9a\x90\xda\xfa\xce\x8a\x40\x1e\x0a\x0f\xdf\xdb\x09\xfc\x80\x96\x31\xc5\xfb\x5d\x6e\xe6\x9f\x7d\x57\xa2\x51\x99\x37\x93\xc2\x10\xed\x82\x38\xb8\x03\x84\x5f\xf1\x72\x9c\x7c\xc8\x31\x93\xad\x3a\xaf\x27\x04\xa5\x3f\x2b\xb3\x10\x54\x0e\x94\x33\x48\x63\x8e\xd8\xbd\xfb\xe0\xbd\x24\x16\xa2\x5d\x10\x07\x1f\x87\x7a\xb3\xd8\x4b\xef\x97\x5e\x33\x6c\x19\x13\x12\xe2\x64\x5a\xf5\x7c\x47\xc7\xf7\xf3\xf9\x15\x7b\xe1\x2b\x33\x47\x71\x96\xd8\x1e\x14\xed\x07\x71\x70\x07\x44\xd9\xbd\x9d\xca\xbb\xbc\x95\xb5\x87\x23\x53\x39\xf9\x18\xf9\xa3\x7b\x3f\x19\xbc\x67\xb8\x35\xe4\xee\x66\xc9\x78\x89\x82\xd2\x1c\xe1\x00\x88\x83\xea\x00\x20\xd6\x0d\x7a\x08\x3d\xcb\x81\x6d\xb2\xb5\x38\xfb\x0b\x77\xdc\x83\x2f\x0d\xd6\x5b\x5d\xfd\xe6\xcb\x6f\x9d\x9d\x6b\x9f\x4b\xe9\xa2\xf7\x87\xed\x66\x04\xce\x38\x74\x7c\x2b\x88\x83\x3b\x90\xf7\x3b\xe5\x15\xeb\x6d\x2d\x54\xcb\x58\x03\xf2\x4d\xa1\xb9\xc4\x21\xf3\x9d\xfc\x92\xac\xfb\x99\x34\x3e\xdd\x75\x21\xd6\x77\xa1\x93\x56\x40\x1c\xdc\x01\x5b\x05\x7e\x8f\x84\x71\xbc\xed\x87\x6f\xac\x28\x05\xd5\x5d\xdb\xb8\x0d\x71\xc3\xe2\x44\xe9\xd5\x99\x8b\x04\xda\xd2\x1d\x55\xa1\x7d\x7e\x40\x1c\x7c\x1c\xca\x3a\x7d\x19\xdb\x1b\x4e\xa9\x25\x97\x68\xc7\x15\x51\x26\x0d\x2c\xe6\x8b\x13\x09\x56\xe2\x48\x7a\xbe\xd0\xbf\xf0\xac\x13\xf9\x83\x68\x17\xc4\x21\x3d\x1b\xbe\x79\x1f\x21\x1a\x3d\x42\xc0\x58\xb2\xad\x79\x39\x88\x3d\xac\x20\x96\xfd\x1d\x29\x2b\xb3\xff\xe8\xf7\xa9\x02\xea\xb4\xa2\x1b\xd0\xb3\x21\x80\x83\xea\x80\x0b\x20\xd6\x0d\x0a\x0c\xfe\x13\xeb\xf6\x41\x8e\x75\x4f\x2f\x91\x7c\x9e\x42\xb9\xe6\x7a\xc8\x16\x97\x28\xf8\x23\xdb\x3b\x30\x59\xfc\x48\xd3\x90\x66\xad\x4b\x88\x74\x8f\xa6\x5f\x94\xef\xdc\xd6\x30\x40\x17\x3a\xcb\xd3\x90\xf2\xe1\xb0\xce\x4b\x89\x4e\xb7\x6a\x95\xf2\x08\xcc\x37\x07\x4f\x89\xe4\x4f\x14\x54\x3a\x3e\x7c\x22\xec\x91\xcf\x65\x34\x86\x5e\x32\x83\x38\xb8\xa7\x7c\x1f\x93\x4e\xd1\xa6\x7e\x93\xe7\x99\x7a\x1f\x48\x65\x17\x72\x06\x97\x2f\x3f\x0c\x1e\x90\x1c\x35\xc5\x6d\x76\x58\xcb\x90\x9d\x47\xb4\x0b\xe2\xe0\x9e\x7a\x32\xb9\x2f\xff\x10\x5d\xa4\x49\x8b\x1a\x96\xe9\xe4\x76\xf1\xc4\xa8\x51\x74\xdc\x61\xa1\x67\xd4\x73\xf6\xf0\x5d\x4e\x53\x81\x3e\x1d\x05\x71\xf0\x71\xf8\xa0\x69\xd9\x99\xbe\xf9\x7c\x43\xa7\xfb\x69\xd8\x6c\x0f\xd7\xb2\x8e\xe8\xc9\x85\xe4\xba\x76\xdc\x3b\x7f\x75\xbe\xa6\x5c\xec\x84\xee\xaf\x20\x0e\xee\xa9\xa4\x9c\x15\x7e\xca\x9a\x8c\xfe\x9a\x87\x10\xd7\x0f\xb9\xdf\xf6\xa9\xe8\xa6\x09\x1e\x05\xd6\x19\x2f\x0c\x50\x97\xf2\x62\xe6\xe3\x11\x9e\x82\x38\xa8\x56\x01\x62\xdd\xa0\x48\xf0\xd9\xb1\x6e\x52\xb5\xa5\xa6\xde\x62\xce\x5e\x45\x82\xbb\xf9\x3d\xd1\x44\x35\x5d\x99\x78\xe9\x5a\x73\x34\x98\x1e\x89\x2e\xaa\xd1\x82\x52\x3d\x88\x88\x34\x88\x43\x8e\x75\x4b\x39\x84\xc5\x2a\x66\xbc\x10\xb3\x21\x16\x67\x15\xa6\x26\x4e\x74\xc5\x5f\xac\x26\x3d\x21\xa7\xdf\x9c\x72\x29\xe4\x4b\x79\xf6\x12\xd1\x32\x88\x43\x8e\x75\xb7\x13\xb1\x13\xd7\x46\x53\x3d\x72\x8c\x93\x62\xca\x32\x4c\x42\x91\xfc\x34\xc3\x53\x5c\xe6\x84\x9f\xa8\xcf\x8d\x7d\xe2\xaf\x57\x80\x68\x19\xc4\x21\xb7\xec\x3d\xa1\xe7\x17\xf0\x51\x08\xbd\x37\x6e\x8b\x4d\xf7\xc7\x2e\x6d\xc4\x88\x2e\xeb\xc3\x86\xf7\x32\x7f\x8a\xf7\x96\x6a\x68\x7f\x12\x40\xb1\x6e\x72\xcf\x8b\xd7\xf4\xf0\xf0\x55\xd7\x4f\x4e\x43\x78\x34\xfc\x64\x94\x8c\xec\xc7\x5e\xb9\xae\x28\xbe\xa5\x1c\x18\x5d\x5c\xba\xaf\xf4\xef\x64\xa4\xa0\x76\xff\x2b\x2e\xea\x62\x7e\x47\xbd\x42\x57\xa6\xba\x5b\xa5\x57\x30\x43\xbb\xaa\x99\x48\x92\xc4\x49\x9a\x33\x07\x6d\xa3\x3d\xff\x3d\x77\xb2\x67\x40\xbd\xcf\x4e\x26\xbd\xf5\xbd\xa0\x61\xc8\x50\xf4\x6d\xb9\x89\x08\x46\xc5\xa7\x2a\xec\xa1\xa7\xa6\x2a\x03\x1f\xfa\x7f\xfe\xbf\x17\xeb\x06\x75\xee\x8c\x58\xb7\xf7\xba\x8c\xaa\xbe\xee\x5d\x4e\x83\xad\xb9\x86\xa1\xa0\xac\x48\x5a\x76\xcb\x8f\x8d\x5e\x36\x59\x0d\xc9\xd2\xab\x0b\xf6\x07\xff\xde\x8c\xa5\x4b\x6d\x95\x58\x26\x2e\x60\x30\xc0\xff\x07\xd9\xef\x68\x8b\x54\xc6\x14\x2d\xa5\x26\x45\xdd\xa6\xe4\xbb\xfc\x1e\x22\x2b\xfa\x83\xff\x7e\x04\x6b\xfa\xd1\xb0\x16\x4a\xad\x20\x8d\xa1\x79\xeb\x77\x3d\x51\xfe\x34\x86\x40\xde\xa5\xd9\x4d\x1f\xbf\xd4\x60\x5e\xda\xc9\x82\xb7\x50\xac\x1b\x74\xf9\x7f\x62\xdd\x0d\x48\xb1\x6e\x3a\x19\xb7\x56\x59\x23\x2b\x22\xc6\x37\x24\x98\x28\x2c\x85\xbf\xde\x87\xb8\x1f\x74\x7b\x0a\xdd\x58\xd6\x7d\xd5\xdc\x79\x4c\x28\x72\x1e\x0b\xe1\x62\xc8\xb1\x6e\x91\xae\xa5\xc0\xf2\xe0\xed\xeb\x63\xe6\xea\x86\x71\x6d\xad\xb9\x31\x8f\x83\x52\x59\xd4\x7f\x5d\x56\x27\x6f\x62\x11\x1a\x60\xd6\x38\x8f\xcb\x36\x20\xc7\xba\x4b\x09\x5f\x57\x3a\x5e\x70\xaa\x9c\xad\x4a\xc1\x49\xa6\xfa\xcb\xe3\xf4\xe6\x13\x63\x9e\x2f\xad\xaf\x88\x03\xa9\xd1\x75\x21\xf5\xdd\x73\xe9\x2d\x72\xac\xfb\x93\xc1\xb3\xba\x20\xdb\x06\xb5\x2f\x7e\x28\x2f\x67\xbe\x86\x17\x87\x18\x1e\x95\x55\x2d\x07\x6f\xf1\x68\x2c\x13\x49\x99\x53\x86\x9e\x4b\x6f\x91\x63\xdd\x2c\x8e\xbf\xd8\xd4\x9e\xdd\xca\xbb\xca\x1f\x71\x94\x39\x59\x1c\xd8\x8b\x46\x9f\x39\x1f\x70\xa2\x87\x15\x12\xf3\xf0\x05\xe1\x48\xff\xb9\xf4\x16\x39\xd6\x4d\x26\x9f\x9a\xe8\xed\x4d\xf8\xe6\xc5\x11\x1f\xcb\x9e\x07\x2b\x7f\xae\xb0\xdb\xf5\x4b\x8d\x6c\xf8\x0c\xec\x6f\x53\x92\xd6\xe3\x75\xcf\xa5\xb7\xc8\xb1\x6e\x0b\xb7\xbb\x8d\x5f\x98\x7a\xe8\xd2\x37\xe5\x8c\xbe\xe8\xb1\xcf\x7c\x2a\x52\x4f\xad\x12\x29\x7e\x8a\x81\xff\x9a\xf9\x72\xd1\x25\xb1\x73\xe9\x2d\x72\xac\x3b\xe0\x48\xbb\x97\x66\x33\x45\x34\xda\x42\xc8\xae\x48\x7c\x51\x0b\xfd\x62\xff\x5a\x92\x09\xe3\xfd\xb6\x63\xab\xf4\xa9\x3f\x21\xf8\xe7\x36\x1d\x02\xfd\x52\xcf\x9a\x0e\xa1\x92\x5f\xc0\xc4\xef\xbb\x8a\xd2\x22\x7b\xbb\x5e\xa0\x80\x31\xd9\xff\x5a\xa6\x9e\x97\x21\xfd\xf7\xb7\x94\x99\xf5\x53\xf5\x99\xd0\xab\x17\x10\x07\x9f\x0e\xdd\x4b\x5a\x79\xc2\x7c\x58\x15\xb8\xf7\x68\x8a\x7c\xd7\xd6\xb6\xc6\x5f\x25\x22\xf0\xa9\x4b\xe8\xe2\xfd\x2f\xf7\x70\xa9\x4c\x7b\x4d\x10\xed\x82\x38\xf8\x74\xe8\x19\xd7\x3a\x76\x3e\xd5\x1b\xe5\xdc\x57\x23\x6e\x96\x2b\xd1\xa3\xa4\x9a\xc7\xd7\xdf\x3f\x77\x7f\x4d\xb7\x7f\x84\x2a\x90\xc7\x0f\x65\x83\x40\x1c\x7c\x1c\x76\x0e\x2a\xab\x08\x2b\xef\x06\xae\x60\x0c\xbe\x4c\xad\xc1\x40\xdf\x9a\x14\x0d\xa4\x5b\x8e\x5e\xa4\x4b\x15\xfd\x31\x7e\x5c\x36\x03\xed\x28\x02\xe0\xfe\xcf\xb4\xe5\xdf\xed\x16\x33\x3d\xf8\x70\x2d\xaa\xb2\x22\x55\xf2\x55\xe9\xb3\x68\xd1\x7b\xc7\xba\xf3\x2c\xe3\x04\x9f\xa8\x52\xb2\x09\xa2\x4a\xd9\x26\x19\x11\xb1\x6e\x10\xf7\x7f\xa6\x59\x3e\xbe\x81\xff\x53\x9f\xff\xe3\xc9\x0d\x54\x35\xcf\x52\x80\x2e\x79\xbf\xf2\xd1\xda\xc2\x02\xda\xe8\x6f\xaa\x65\xee\x87\x41\xce\xcf\xde\x12\xf6\x88\xdb\x0e\x9b\x64\xe1\xbf\xea\xc1\x3f\xd9\x84\x56\xc5\x00\x1c\xd2\x99\x7b\x4a\x0a\xa1\x5f\xd4\x97\xcd\xa5\x1b\x6d\x66\x17\xb6\xac\xb7\xcd\x3b\x23\xbd\x89\x1c\xcd\xf4\x32\xed\x23\x5b\x53\x39\x8c\xa0\xf3\x6b\x40\x1c\x5c\x81\x2f\x7a\x9f\xb0\xf9\x4e\x0c\x77\xe9\xcc\x0d\xc4\x9f\x5e\xef\x71\xa0\x1e\xcc\x8b\x0f\x49\xf2\xac\x1a\x2f\x99\x8f\xc7\x8f\x4b\xa2\x46\xb4\x0b\xe2\xe0\xe3\x50\x27\xce\xb8\xb1\xb1\xa7\xdb\x47\x9f\x3c\x6a\xff\x33\x35\x6e\xe9\xc9\xeb\xcc\x8b\x61\x9d\xea\xf8\x06\x66\xe5\xac\x1d\x28\x77\x3b\x10\xed\x82\x38\xb8\x02\x55\x0b\xef\x73\x8f\x5b\x3a\x03\x35\x27\x49\x1c\x82\x64\x47\x5d\x7a\xd8\x32\xfe\x30\x6b\xad\xff\xb9\xdf\x3d\x6d\xe0\x29\x80\x49\x8b\x98\x11\x83\xb8\x7f\x14\xf8\xbf\x37\xcb\xff\x70\x00\x74\x0b\x3b\xcb\x81\xb5\xda\x40\x66\xb3\xe4\x8a\xd7\x02\x24\xd2\xa1\x7f\xae\xdb\x3d\x79\xaa\xaf\x3a\xbc\x8e\x66\x9b\x5a\xb9\xfe\xf6\xc7\x7b\x65\xad\x29\x44\xdf\x41\x1c\xdc\x01\x23\x7a\xef\x67\x37\x63\x32\x26\x3c\x38\x74\x64\x55\xeb\xc2\x2f\x79\x6d\xf4\x76\xe2\xdf\xb7\xe2\xc5\x97\xfd\x34\xe7\xb1\xf8\x0e\x1d\x8a\x47\x02\x38\xb8\x03\x38\xfd\x81\x71\xf6\xaf\x96\xd4\x68\x29\x2e\x2b\x0b\xa8\x59\x6d\x39\xf0\xfd\xde\x40\x17\xe5\x26\xf9\xb4\x28\x6e\xa6\x4f\xdf\xdb\x8d\x68\x17\xc4\xc1\xc7\xa1\xe1\x8d\x96\x87\x4e\x5d\x52\x82\x3b\x41\x67\xd9\xa7\x24\x69\xaa\x61\x9b\xac\x61\xc3\x76\xae\x45\x5e\xb9\x44\x63\xdc\xa8\x7b\xd0\xd3\x3b\x88\x83\x3b\x90\x61\x6c\x6a\xfe\xbe\xbe\x79\xe2\xca\xf6\xbc\xfe\x11\x4a\x46\x9c\x7d\xbc\xf3\x2f\xe9\xac\xcf\x73\x2a\xb3\x11\xcc\x7c\x1b\xdd\x9f\x11\x0e\x80\x38\x84\x03\x0d\x80\x58\x37\x68\x3e\x71\x96\x03\x01\x13\x76\x18\x43\x86\xcc\xc5\x29\xe9\xeb\x79\xef\x94\x9f\x4d\xca\xcf\x0b\x3b\xdc\x18\x15\xde\x74\x95\x51\xa4\xaf\x7e\x2e\x04\x1d\xdc\x00\xe2\xe0\x0e\x94\x89\xda\x8f\x1d\x7e\xf4\xda\x0d\x88\xd9\x1a\x70\x5b\xff\xfe\x32\x3b\xf6\xc6\x54\xab\xf3\x86\x4e\x83\x3a\xaf\x4a\xa7\x91\x28\xb4\xb9\x1a\x88\x83\x3b\xb0\x6b\x94\xb6\xec\x15\x63\x57\x8f\x99\xfd\x51\xfd\xf4\x31\x6d\xab\xa8\x66\x18\xdb\x8e\xd1\xbd\x7b\x72\xd8\x63\xaa\x4b\xad\xce\xfe\x50\xec\x0c\xc0\xc1\xc7\x21\xf2\x6b\x1e\x49\xb7\xf6\x83\xec\x4e\xd3\x92\x8f\x73\x4f\x45\x36\x82\xc3\x7c\x95\x53\x59\xd9\x77\xa7\xf1\xfc\x19\x0a\xb1\x9f\x40\x67\x87\x83\x38\xb8\x03\xae\xd2\xd7\xb7\x9d\xa3\xe4\x19\x52\x35\x1e\xc9\xca\x4d\x7c\x78\x7c\xd4\x43\xf0\x52\x03\xed\x6d\x99\x9f\x7f\x5b\xde\xf0\xc6\x91\x02\x74\x06\x2f\x80\x83\xea\x00\x20\xd6\x0d\x9a\xdc\x9d\xe5\x00\xe7\xed\xee\x49\xea\x08\xf5\x17\x8d\x1f\xe5\xa3\x8b\x85\xf1\x0c\xcb\xbe\x29\x72\xe8\xd6\x5b\xd8\xe5\x2a\x3f\x7c\x54\x34\x55\x7d\x1b\xd1\x77\x10\x87\xf4\x95\x97\x44\x63\xb8\x0b\x96\x54\x1c\xa9\x8f\xfb\x76\x86\xd4\x34\x9f\xc5\x0d\x21\x7d\xc6\xed\x66\xe7\xf0\xd8\x87\x58\xa1\xad\x9e\xd0\xca\x28\x88\x43\x4a\x78\x88\xd5\xe7\x6a\x87\xdf\x8b\xd1\xff\x4d\xa6\xc9\x86\x47\xe1\xaf\x4e\xd8\xc2\x6d\x52\x72\x40\x23\x44\x9a\x7b\xef\xd2\x4d\x6a\x28\x82\x0f\xe2\xe0\xe3\x10\x4f\x8b\xf1\x30\xc2\xba\x60\x23\xf4\x55\x6d\xe4\x7e\xde\xa4\xfa\xdb\x16\x3c\x8e\x34\xd9\x44\xfd\xf6\x9a\x50\xab\xb0\x14\x82\x1e\x44\xbb\x20\x0e\xee\x80\xf8\xe4\x37\xd4\x5c\x6b\x9a\x19\x72\x6a\xcf\xde\xd1\xb1\xef\x1b\x11\x5f\xef\xf2\x5e\xe9\x70\x4c\x0f\xb2\x37\xbc\xd0\x76\xf3\x81\x15\xc2\x01\x10\x07\xd5\x01\x40\xac\x1b\x34\xd3\x3e\xcb\x01\xd7\x19\xed\x72\xca\x9c\xa1\x17\x36\xd9\xe6\xfc\x03\xe1\x86\xb6\x52\xba\xb7\xd5\x9e\x7c\xab\x72\x9d\xbd\x18\x6d\x26\xf6\x1d\x17\x8a\x47\x82\x38\xb8\x03\xd7\x3a\x35\xb4\xae\xbf\x3f\x71\x6e\xa9\x19\xc5\xdc\xa0\x3a\xf8\xc3\x9a\xd7\xb7\xf6\x5e\x90\xd5\x71\x66\x7d\x5c\xd8\x06\xcd\xb6\x19\xd1\x2e\x88\x83\x3b\xd0\x62\xfd\x0e\xd5\x2a\x03\x47\xe4\xc2\xe3\xa1\x03\x1e\xd1\x8b\x8d\x77\xd0\x6e\xa0\xa8\x12\x5d\x97\x6e\x6c\x45\xd1\x7f\xf7\x45\x82\x15\x4a\xa4\x00\x38\xf8\x38\xb4\x6f\x0f\x54\x2c\xc9\xe7\x10\x9b\x34\x5b\xe2\xf1\x7c\x55\x30\x65\xa8\xa5\xf2\xbc\x35\x81\x23\xae\x7e\xc9\xbb\xe4\x89\x3d\x2f\xe4\x2c\x88\x83\x3b\x60\xbe\xac\x83\x76\xd4\x96\x64\x24\x1b\xee\x33\xef\x7e\x37\xc0\x4f\x78\xcd\xc3\xd3\xa1\x98\x71\x7d\x84\xe2\xdd\x0a\x51\x85\x44\x11\xc2\x01\x10\x07\xd5\x01\x40\xac\x1b\xf4\xd8\x73\x96\x03\x4b\xfb\xdc\xd7\x4e\x3c\xfb\xf5\xf4\xed\x23\x96\x5f\x6e\xc5\xa7\xa7\x31\x59\x71\xd3\x6f\x1d\x7f\xc7\xfd\xeb\xab\x1f\xc7\xde\x13\x83\xe8\x3b\x88\x83\x3b\x30\xeb\x8b\xaa\xd0\xe3\x8d\xf5\x85\x96\xe1\xb1\xba\x39\xe1\xcc\xad\xe0\xbe\x31\x5b\x93\x34\x19\x99\x59\x87\xcf\x93\x05\xa5\xda\xd0\x63\x01\x88\x83\x3b\xb0\x6e\xfd\xbd\xc4\xc6\xb8\x8f\x7b\x84\xcb\xff\x6e\xc8\xab\xfe\xe1\xb9\x17\x9f\x85\xdd\x43\xd3\x13\x2a\x6b\xa3\xae\x7c\x24\xb6\x82\xbe\xf6\x04\x71\xf0\x71\x10\x0a\x18\x6b\x89\x17\x36\xea\xa0\x0f\x5c\x6c\xc8\x27\xd1\x70\x15\x45\xdd\x74\x45\x75\x29\x7c\x12\xc9\x37\xe0\xe9\xc4\x22\x73\x80\x68\x17\xc4\xc1\x1d\x68\xd5\xcc\x8b\x3c\x58\x57\xea\x72\xee\xeb\xc5\xab\xa2\xc4\xdc\xc4\x2a\xb8\x93\x2a\xbf\x98\xaf\x74\x37\x5d\xc8\x2d\xb4\xa1\x21\x10\xe1\x00\x88\x83\xea\x00\x20\xd6\x0d\x7a\x06\x3d\xcb\x81\xf6\x78\xf2\xd5\xe6\x9b\x13\xad\x85\x89\xbd\xf9\x75\xdb\x6d\x74\xf3\xfa\x81\x82\xef\x1e\x2d\xc5\xe5\x26\x11\xcd\xb2\x4e\x68\x42\x6f\xc9\x40\x1c\xdc\x81\x72\xd7\xd4\xcb\x0b\x7c\x3f\x69\x62\x18\x57\xc2\x2d\xc7\x99\xb6\x22\xba\x67\x49\x46\x89\x89\xcc\xd7\x24\xa9\x78\xef\x59\xef\x43\xf3\x77\x10\x07\x77\x80\xbc\xff\x61\x72\xa4\xe1\xa9\xab\x85\xd7\x45\x89\x37\x35\x85\xe8\x78\xb8\x03\xb7\x63\xaa\x34\xb3\x35\x9c\xb3\xe4\x71\xc9\xb0\xa1\xf3\x92\x41\x1c\x7c\x1c\x42\x51\x3a\xd9\x8d\x6e\x1a\xea\xaf\x7e\x4c\x66\xfd\xd9\xb7\xfe\xa4\x2a\xb6\xf0\xb2\xcd\x23\x6b\x5b\xdf\xa1\x93\x6f\x05\xc5\x9c\xd0\xae\xfd\x20\x0e\xee\xc0\xc7\x9f\x59\xf2\x03\x9f\x75\x46\x89\xe7\x64\x7e\x69\xcf\xd6\x62\x9d\x64\x6b\x4d\xac\x88\x3f\x78\x36\xd3\x93\x2a\xfe\x90\x30\x09\x1f\xe1\x00\x88\x83\xea\x00\x28\xd6\x0d\x5a\x56\xfc\x27\xd6\xdd\x80\x1c\xeb\x76\xdc\x7e\xe6\xfb\x50\xb1\x9e\xf2\x8a\x9e\x52\xc1\xc1\x2b\xb3\x24\x73\xfa\x07\x2d\x6e\xbc\x07\xf9\xe4\xf3\x14\x6b\x75\x84\xfd\xe7\x12\x86\x15\x43\x8e\x75\xd3\x36\xfa\x6f\xcd\x27\x44\x18\xeb\xa1\xa7\xfb\xb7\xa8\x1f\xf8\xe0\x36\xc5\xbf\xfd\xb0\x45\xca\xec\x39\xbe\xea\x5d\x18\x7a\xe3\xf1\xb9\xac\x13\x21\xc7\xba\x43\xcb\x1d\x92\xb1\x4f\x22\x07\x39\xba\x7c\xa7\x15\xe5\x33\xdc\x4b\x85\xb4\x2e\xbc\xf4\xfe\xd8\x67\x21\x26\x93\x74\xec\xe5\xde\x72\x2e\xbd\x45\x8e\x75\xa3\xdc\xc1\xa2\x90\x50\x0d\x70\x60\xc1\x2d\xda\x3c\xdd\x20\xf7\xd9\xe2\x78\x75\xa2\x75\xc2\xf1\x29\x30\xf0\x9b\x73\x21\x5f\x01\xf6\xb9\xf4\x16\x39\xd6\xcd\x27\xef\x10\x6a\x6b\x54\x19\x88\xb2\x36\xa4\x60\x38\xe6\x50\x17\x29\x7e\x69\xfd\xe2\x5e\x85\x47\xba\x4e\x6f\x6e\xb2\x51\xdf\x39\xec\x3a\x10\x2e\x21\x86\x1c\xeb\x36\xd0\xb2\xcd\x36\x8a\x5a\x4b\xd7\xb8\x96\x8b\xe2\xb7\x5d\xc0\xac\xf0\x68\x7c\xa4\xcd\xc3\xe2\x8f\xc5\xb8\x34\x3d\xa6\xf4\xf5\xf3\x59\x03\x44\x8e\x75\x6b\x65\x97\xb1\x68\x37\x6e\x90\x3f\xfd\x19\xfc\x61\x75\xd3\xfa\x64\xdd\x3e\x71\xb3\x27\x2c\xea\x3b\xf7\x17\x1e\x4d\xa3\x47\x2e\xcb\xe7\xd2\x5b\xe4\x58\xb7\x6c\x9b\xdb\x0d\xa1\x62\x85\xe2\xab\x84\xd3\xfa\x0e\x53\x51\x2a\xd3\x1a\x3b\x3f\xdc\xef\xaf\x27\x24\xc9\x53\xeb\x10\x71\xc6\xfa\x9f\xdb\x1a\x20\xe8\x97\x7a\x56\xa1\x4f\xc9\xac\x0d\xff\x7b\xad\xa1\xe3\x7e\xba\x12\xd1\x77\xce\x65\xbd\x7b\x05\x6e\x79\x3d\xbf\x75\xcc\x9b\x2a\x43\xdf\x5f\x19\xbd\x03\x7d\xc3\x05\xe2\xe0\x85\x7e\xce\xe1\xa1\xba\xdf\x17\xa2\x86\xd2\xc1\x03\xeb\xe1\x59\x07\x3a\x9f\x57\x4a\xa5\x84\xd2\xd7\x76\xcc\x0a\xb0\x53\x4e\x15\x45\x1d\xa1\x9d\xde\x00\x1c\x52\x7c\x43\x24\xfb\xa9\xae\x19\xc6\x82\xfd\xaf\x7b\xc9\xdb\x65\x1d\xf4\x6c\xd3\xa5\x3b\xc6\x56\x3e\x1d\xb5\x65\x2f\x4f\x69\x9d\x07\xa1\xe3\x59\x40\x1c\x7c\x1c\x8e\xb2\x77\xe9\xae\xb6\x61\xa1\x24\x5f\x7d\x60\x77\xcc\x92\x45\x6a\xfe\x7a\xea\xa2\xd8\x0d\xb4\x8f\xfc\x5f\x8d\xbf\xb2\x62\x53\x42\xbb\xfd\x81\x38\x78\xa1\x27\x3e\xc6\x6a\x08\xb2\x3b\x9e\xe7\xc5\x2e\xbf\x48\x90\xfd\x60\xb6\xa0\x5d\xdd\x65\x62\x4b\x5c\x8d\x59\xce\xe3\xc2\xe4\x85\xdb\x22\x88\x42\x0f\xe2\xa0\x9b\x3d\x20\xd6\x0d\x2a\x9b\x67\x46\x7a\x3b\x9d\xd2\x89\xde\x7f\x1b\xc1\x49\x26\xc7\x9c\x13\xb9\x6c\x39\x8b\x89\x65\xe2\x2a\x1c\xa4\xf0\xb7\x5b\x53\x15\xe3\xe7\x88\x11\x14\xe9\x05\x70\x48\x31\xae\x22\x75\x56\x8e\x3b\x6e\x5e\x3d\x0b\xe3\x6d\x79\xa1\x59\x24\x87\xd7\x5e\xbc\x21\x95\xb8\x6a\x40\x91\xd9\x10\xdc\x93\x13\x79\x01\x8a\x71\x01\x38\xa4\x5d\x7a\x05\x9e\xa0\x05\xa6\x1c\xae\xe6\x73\x64\xd8\x0c\xa9\xf8\x1f\xc4\x0d\x63\x4d\x65\x85\xb8\xd6\x52\x2d\xba\xbe\x9f\x48\x9a\xbf\x04\xed\xd2\x0b\xe0\xe0\xe3\x40\xfe\xd0\xd6\x33\x85\x60\xab\xb1\x78\xfe\x9a\xc0\x74\xc4\xb0\x3a\x9a\x6b\x77\x4a\x88\x82\x44\xc6\xa7\xcf\xc6\x2c\xd2\xf8\xb5\xd0\x0e\xd0\x20\x0e\xee\x80\xb0\x2f\xb6\x8b\xe7\xd8\xd3\xbe\xed\xaa\x4a\x61\x1e\x25\x8f\xfe\xde\xeb\x31\x65\x85\x23\x47\xcd\x5b\xf9\xce\xa8\xdf\xed\xa7\x86\xa0\xef\xf8\x00\x1c\x74\xb3\x07\xc4\xba\x41\xf7\xb0\xb3\x1c\x08\xf4\xb8\xc2\xf6\xe4\xed\x55\xd6\xd5\xc8\xe0\xaf\xab\xa9\xe5\xf7\x53\x76\x63\x24\xdb\x1d\xdf\x07\x58\x35\xbd\x66\xbd\x53\x76\x44\x8e\xe8\x3b\x88\x83\x3b\xf0\x77\x56\x94\x61\x4d\x32\xd3\x4b\x98\x9f\xe9\x2d\xc1\x47\x7b\x6d\x5c\xd9\x84\x5d\xa9\xe7\x02\x62\x1a\x9e\x61\x1e\x41\x35\x94\x8d\xd0\x9e\x11\x00\x0e\xee\x00\x31\x86\x05\x3d\xfe\x2b\xa9\xe6\x05\x85\x92\x26\x7e\xf1\x0c\x3a\x9c\xf4\x5f\x82\x9b\xca\x06\x85\x3b\x43\x06\xdf\x77\x6d\xbd\xa0\xe3\x59\x40\x1c\x7c\x1c\xfc\xbe\xf6\x46\x18\x78\x3e\x62\x1c\xf0\xd2\xc6\x2e\xd0\xe3\x49\xc7\xf2\xc3\x7b\xe9\x6f\x75\x63\xc9\x98\xf5\x92\xfb\xb4\x89\x17\xf4\x2d\x27\x88\x83\x3b\x90\xbc\xd8\xbe\xfb\x6b\x60\xd8\x87\x99\x60\x24\x5e\xb1\x49\xbe\xd6\xe8\x66\x1d\x5a\xcf\xdb\x7b\x83\x1d\xc1\xe3\x01\xaf\xf5\xf5\xc5\x10\x0e\x80\x38\xa8\x0e\x00\x62\xdd\xa0\x09\xc5\x59\x0e\x28\x3c\x34\xf9\x3b\x5b\x80\x6f\xc2\xf0\x81\x9e\xcb\x4f\x3f\x8a\x8f\x77\xf4\x88\x4b\x73\xdb\xd4\x58\x4e\xad\xec\xaa\x1a\xee\x10\xf4\x1e\x04\xc4\xc1\x1d\xf8\x5a\x3c\xb1\xb7\xea\xc2\xb5\xfe\xfc\xda\x15\x01\xbb\x60\x6c\x7d\x2c\x3e\x09\x67\x33\x5d\xaf\x6a\x6f\xde\xc1\x2d\xf2\x8f\x4f\xa1\x7d\x43\x40\x1c\xdc\x81\x47\x9d\xb9\xbb\x17\x17\xfa\x56\x33\x1d\xb5\x7d\xd7\xb2\x7e\xa4\xb0\xf2\x48\x3e\xbf\x91\xfc\xb7\x20\x24\xa2\x8f\x2c\xdc\x6b\x13\x8a\x75\x83\x38\xa4\x28\x9f\xfb\xca\x8c\x00\xbb\x15\xde\x8d\xa7\x22\x2b\x39\x76\x33\xde\x9b\x0d\x1a\xaf\xb5\x2f\x87\x17\xdc\x46\xb9\x20\x91\xea\x3d\xbd\x01\x45\xf9\x00\x1c\xdc\x01\x1a\x56\x1c\xa5\xaa\x97\x19\xf9\x7c\xcd\x23\xaa\xae\x8b\x82\xab\xfd\xed\x8a\x5a\xa2\x3c\xe8\x9d\xbd\x31\xa8\x3c\x9f\xba\x99\x29\x10\x0e\x80\x38\xa8\x0e\x00\x62\xdd\xa0\xd9\xdd\x59\x0e\x84\xf1\xe0\x47\x7b\xcd\x19\x07\x55\x14\xd6\x0d\xed\x57\x12\xe3\xa4\xb1\x2e\x1a\xd2\x4c\x11\x32\x77\x70\x9f\x24\xe3\xab\x0d\x9c\x42\xb5\x15\xc0\xc1\x1d\xf8\xd3\x21\x9a\xb6\x3b\x6e\xa6\x41\xb5\xbe\xf5\xe7\xd4\x79\x8b\xa5\xf9\x02\xc1\xf6\x05\xe5\x21\x6a\x0b\x01\xb3\xbf\xb3\x91\x33\xf6\x88\x76\x41\x1c\xdc\x81\x71\x47\xd4\xb4\x9f\xca\x4e\xa1\x3f\x4f\x1f\x62\x05\xac\xd1\x8a\xda\x18\x09\x49\xdd\x33\x59\xe0\x34\xdc\x1f\x28\x30\xee\x4f\x85\xe6\x19\x20\x0e\x69\x11\xf0\x7b\xac\xee\x34\x3b\x5b\x51\x7e\xe3\x5a\xf9\xfb\x15\xdb\x72\x8e\xcd\x6d\x41\x02\xdc\xef\x24\xf1\x47\x37\x3f\x35\x05\x08\x43\x7b\x3b\x80\x38\xb8\x03\x1c\x86\xd1\xd3\x6e\xc4\x02\x7f\xc9\x5f\xcc\x64\x3a\x52\xa3\xb6\xe3\xec\x63\x68\x1a\xa5\x9e\xa6\x31\x5d\xe1\x46\xf3\xf2\x60\x89\x45\x38\x00\xe2\xa0\x3a\x00\x88\x75\x83\xa6\xda\x67\x39\xa0\x18\x57\x4a\xf0\xbe\xb4\xc6\x24\xe1\xf2\x83\x8f\x92\xab\x63\x6e\x7b\xc4\x1d\x9d\x3c\xd7\x14\x16\xed\x9c\xd1\xc2\x4a\x62\x08\x0d\xa0\x4f\x5b\x00\x1c\xdc\x81\xe6\x98\x28\x8c\xa2\x4e\x66\xe6\x9f\x7e\xf7\xfc\x70\x51\xf6\xec\x7c\x64\xf3\xdf\x94\x9d\xbe\x28\x63\xeb\x5d\x15\xd0\xe6\x26\x85\xbe\xbf\x07\x71\x48\xfb\x7b\x58\xdf\xc6\x96\xc9\x19\x11\x1f\x20\xba\xbc\x81\xe9\xe5\x79\xd4\xd7\x85\x2d\x19\x1f\xef\x53\x73\x52\xe8\xbc\xac\xe1\x6d\x07\x7d\x36\x02\xe2\x90\xbe\xeb\x7f\xb5\x13\x5c\x1c\x7e\x5a\x3e\x68\x82\x43\x40\x84\x7b\xe0\x26\xee\xef\xd2\x91\xe6\xe7\x34\xf7\x52\x2e\x7b\xa7\x7a\xd2\x0a\xfa\x2d\x80\x38\xb8\x03\xfd\x77\x1f\x54\x51\x6a\x53\xb6\xb1\x72\x61\x13\x76\x3c\xfc\xdb\x96\x15\xba\xb2\xf8\xc6\x29\xd3\x8a\xe0\xaa\x8d\x98\xce\xdf\x38\x42\x84\x03\x20\x0e\xaa\x03\x80\x58\x37\xe8\xb9\xe7\x2c\x07\xf8\xeb\x56\x77\x43\x94\x93\xa3\x5a\x4b\xb7\x6a\xcd\x3e\x0e\x56\xca\xbd\xce\x11\x78\xc2\x69\xe2\x4c\xad\x54\x7e\xd9\xac\xd8\x0e\x7a\xd7\x0e\xe2\x90\x8e\xec\xfb\x48\xa3\x81\x17\x93\xb2\x54\x22\xc0\xfb\x5a\x75\xb6\xe9\xf6\xd1\xd3\xbc\xf2\x1d\xba\xf4\xdb\x25\x16\x16\xc3\x99\x81\x53\x8c\x88\x76\x41\x1c\xd2\x8e\xed\xba\x02\xb7\x73\x4e\x51\x09\x5d\x9c\x2c\x9d\x13\xd8\x99\xd3\xa6\x45\x65\x55\xe8\x27\x4a\x68\x44\xd0\x89\x1b\x06\x6c\x6d\x3e\x40\x73\x58\x00\x07\x1f\x07\x6f\x03\xed\x2f\xdf\x22\x3b\x2c\x67\x14\x8c\xdf\x57\x1e\xe4\xff\xae\xae\x34\xb8\x6b\x1a\xb8\x7c\xc1\x7b\x42\xb2\x27\xd0\x33\x09\x7a\x29\x08\xe2\xe0\x0e\x34\xad\x7c\xf1\xa3\xa8\x23\xd9\xe9\x7a\xb3\xcf\x92\xf7\x82\xd2\xee\xba\x8c\xfd\xdd\xee\xbb\xa7\x2a\x7a\xb6\x1f\x7f\x7c\x96\x65\x51\x43\x38\x00\xe2\xa0\x3a\x00\x88\x75\x83\x1e\x42\xcf\x72\x80\xc7\x4c\x63\xee\x31\x4a\x8c\xcc\x45\x5e\xec\x25\x47\x7e\x5e\x0d\x1c\x43\xe6\x1d\x33\x46\x2f\x9f\xc7\xb8\x91\xfa\xfb\xb8\x05\x16\x88\xbe\x83\x38\xb8\x03\x2b\xde\xef\x5d\x4f\xae\x94\x10\x63\xdd\x6a\xfc\xe3\x90\xcd\x8a\x19\xbe\xef\xff\x4a\xc7\x86\xa9\xe7\xc1\x6c\x8e\xd0\xf2\x35\x1c\x68\xf7\x6b\x10\x07\x77\x00\xff\x71\xac\xc2\x24\xf5\xdb\xfb\xf1\x05\x1c\xdf\x8c\x0d\xd0\xde\x3c\x44\x13\xf3\xbd\x89\xa1\x7a\xbd\x74\x9f\xaf\x5b\xd1\xb5\x03\xfa\x2c\x13\xc4\xc1\xc7\x81\x60\xe0\x8d\x67\xf0\xd8\x53\xee\x1b\x0f\x28\x5f\x36\x31\x0f\x64\x5d\x53\xaa\xb9\x2c\xa5\x70\x5d\xef\xba\xa5\x20\x93\xda\xdb\xed\x42\xe8\xf3\x31\x00\x07\x77\xa0\x57\xd9\x96\x94\x25\xfd\x95\xe5\x23\xb1\xc8\x7d\xbd\x26\x7b\xe2\xf6\x07\x26\xc2\x6c\x52\x9d\xec\x37\x5e\xe6\x4f\x3d\x3c\x12\xed\x44\x38\x00\xe2\xa0\x3a\x00\x8a\x75\x83\x02\x83\xff\xc4\xba\x1b\x90\x63\xdd\x4b\x56\x8e\xa1\x6e\x0b\x8f\xe2\x4e\x26\x54\x43\x9b\x8d\x25\x3e\xff\x79\xf5\x4e\x8c\xed\x7b\x37\x39\x1a\xc6\x4b\x7d\x5f\x4b\x2a\xf9\x73\x5b\xc3\x00\x5d\xe8\x2c\x4f\xdd\x0f\x7a\x42\xab\x4d\xa5\x75\xff\x4a\xb8\xe4\x46\xfc\x5a\xc0\x14\x93\x71\x4d\xc6\x4d\xe3\xe8\x29\x7c\xfc\xb3\xb5\x34\xff\x8b\x2c\x54\xff\x01\x1c\xdc\x53\x21\x4c\x2d\x2a\xf4\xb7\x4e\x15\xa2\x5c\xb3\xd8\xd2\xe4\xad\x1d\xc5\xa9\xe3\xd5\x9a\x84\x1d\x14\x47\xc6\xe4\x04\x49\x49\x7b\xd0\xdc\x02\xc4\xc1\x3d\x1d\x92\x46\xa9\x94\x8f\xf7\x9a\xfc\xe4\x50\x19\xf3\xa1\x3b\xb2\xa3\x7d\xcc\xda\x83\x30\x88\xad\x21\x6b\x58\xf1\xa6\xd5\x7d\xe9\x2f\x88\x76\x41\x1c\x7c\x1c\xb6\x98\xda\x32\xcb\xe5\x15\xf7\x99\x0e\x36\x43\xb2\xf3\x1e\xe3\x6b\xa4\x5b\x75\x15\x3b\xfb\xaa\x98\xbf\xa3\x7f\x45\xf5\xcc\x01\x8a\x8b\x83\x38\xb8\xa7\xe1\x2c\x35\x64\x12\x24\x8f\x85\x93\x47\x19\x92\x0c\x1a\x3f\xd5\xd9\xbe\x61\xf5\xc5\x24\x4c\xcd\x3b\xf2\xb6\xef\xd9\x93\xb5\x86\x4e\x97\x00\x71\x50\xad\x02\xc4\xba\x41\x91\xe0\xb3\x63\xdd\x42\x09\x24\xf7\x0c\x57\x9c\xe9\x37\x64\x70\x8c\x34\x12\x67\xcc\xbb\x95\x30\x27\xba\xf4\x4c\xf2\x1b\xd1\x18\x14\x64\x5b\x9f\xc5\x22\x22\xd2\x20\x0e\x39\xd6\xbd\x65\x5c\x1f\x71\x4f\xfd\x98\x4f\xdc\x23\xe9\xae\xd8\x35\xaf\xe4\x90\x5b\xee\x89\x98\x5f\xe8\xdd\x1e\xde\xd6\x4e\xdc\xfc\x12\xf4\x0a\xd1\x32\x88\x43\x0e\x5f\x4b\x5c\x97\xb3\xfd\x19\xc3\x19\x64\xb0\xe2\x71\x61\x7e\xf6\x99\x4b\x55\x3b\xee\x0c\x8d\x65\x7a\x57\x8b\xd7\x4f\x75\x6f\x21\xd1\x65\x68\x1f\x70\x00\xe7\x2f\xf1\x7f\x46\xf2\x7f\x05\x8f\xbe\xdc\xbb\xa3\x27\xa2\xd3\x98\xeb\x37\xb3\x6b\xc4\x86\xf5\x64\xe1\xab\x70\xe4\x30\x1a\x61\xe8\x4e\xb2\x82\x06\x5e\x65\xe4\x45\x28\xd6\x5d\xbc\x42\x24\x19\x69\xff\xac\x09\xeb\xaa\x8f\xca\xec\xa0\x26\xa6\x7e\xe1\xe1\x8a\x4d\x1c\x8a\xaa\xf5\x75\x2a\x8b\xda\x9a\x4e\xbb\x7f\xc7\xba\x4b\xc7\x2f\x50\xaf\xe9\xd5\xfa\xf0\xfc\x22\x3c\xec\xf3\xf1\x6c\x65\x98\x57\xae\xdd\xff\xe5\x25\x38\x6f\xfe\xa0\x1e\x73\x10\x25\xed\x5f\x68\xdf\x45\xbc\x75\xad\x24\x8b\x4d\x91\xd8\xeb\xcf\xaf\xe2\x4a\xbb\x87\x4f\x1c\x31\xd9\x15\x11\x77\xa9\x32\x11\x26\xa2\x92\x4b\x69\xfe\xbf\x17\xeb\x06\x75\xee\x8c\x58\xf7\xce\x13\x9e\x09\x9d\x38\xca\x27\xa6\xc1\xbb\x43\xcc\x45\x9d\x98\x8a\x42\x13\xbc\x8b\xe8\x4f\x86\x7f\xb6\xb4\x44\x7a\x69\x5f\xb9\xf8\x2f\xd4\x0e\xf7\x82\x88\xe0\x7a\xd4\xd3\x11\xff\x77\x6f\x22\x65\x35\xbc\x9c\x75\xc9\xbe\x13\x45\x39\xca\x35\x96\x11\x0b\x16\xc5\x9c\xfc\x7b\x94\xa9\x68\x52\xc4\x96\x0c\x9e\xf2\xac\xef\x58\xdd\x08\x08\x7b\xe5\xec\x18\xcc\x5c\x96\xe5\x8f\xdf\xf0\xbe\x4e\x20\x96\x51\x85\xa3\x0e\x8a\x75\x83\x2e\xff\x4f\xac\x1b\x45\x06\xe9\xdd\x8a\x6b\xd2\xdb\xe3\x24\xc7\xd7\x3d\x6b\x0f\x51\x1d\x5a\x15\xea\xd8\x4c\x93\xfc\x6e\xfd\x56\x30\x91\x4e\xcd\xb1\x24\x7b\xb7\x50\x72\x1e\x0b\xe1\x3e\xc8\xb1\x6e\x79\x3c\xa6\x1a\x87\x02\xaf\x5b\x43\xb9\x02\x7f\x5b\xa7\x18\xe9\x06\x5f\xf2\xca\x5e\x7a\x89\x52\xf5\xe8\x96\xbe\x09\x2f\xf9\xc8\xb9\x1c\x49\x8a\xa2\x8c\x7c\x00\xab\xa9\xf8\xa4\xa0\x08\xe9\x57\x39\xba\x98\x65\x59\xf4\x8a\xae\x18\xf5\x37\x44\x2e\xdf\xef\xb9\x7b\x5c\xad\xe5\x4a\xa9\x77\xff\x7c\x2e\xbd\x45\x8e\x75\x7b\x3c\x90\xee\x76\x51\x3c\x3d\xb1\x0a\xf5\x3d\xee\x8b\xd9\xa6\x11\xb8\x29\x92\x7b\xe8\xa8\xe7\x7d\xa4\x1d\x98\x92\x3e\x7d\x74\x2e\x89\x63\x14\x37\xe4\xdd\xba\xaf\xa0\x11\x9a\xa3\x1e\x66\x93\x97\xbb\x56\xa0\xde\x0c\x3c\xfe\xa3\xc6\x2f\xcf\x81\xe7\xcf\xd5\x90\xf0\x06\xbd\xeb\xb7\xce\xb9\xbc\xc0\xf2\x41\x8e\x75\x7f\x4d\x3d\x75\x53\x0f\xe9\xe2\x5f\xa4\x36\x79\x8a\xe6\xf6\xc0\xe3\x9a\xf0\x1f\x8c\xcc\xf6\x45\xcb\x67\xef\x50\x3b\x97\xd6\x6f\x7c\x3f\x97\xde\x16\x23\x5d\xd6\x98\x45\xd9\x2a\xa5\x53\x49\xe9\xa7\xfc\x8f\xae\x14\x21\x05\x53\x94\xdd\x09\x15\x9a\x9c\x8a\xde\xc9\x6a\x17\x7a\x67\x79\x76\xa6\x73\xe9\x2d\x72\xac\xfb\x92\x3d\x2f\x37\x0a\x9b\xaa\xe0\x64\x89\x22\xb6\x9c\xd3\xf5\xb4\xe2\x11\xfa\x4b\x77\xee\x2f\x9b\xcb\xfb\x16\x88\x2e\xf3\xf0\xb4\x9d\xdb\x74\x08\xf4\x4b\x3d\x6b\x3a\xa4\xe3\xc5\x1b\x74\x1c\x2b\x4c\x4d\x13\xa5\x60\x2d\x98\xc8\x75\x18\x25\xb1\xd9\xfd\xb9\xcb\xaf\x8b\x90\xc3\xee\xbd\xa6\xfd\x01\xb4\x8c\x07\xe2\xe0\xd3\x21\xfc\x67\x3a\xe9\x23\x02\xd7\xc9\x50\x3c\xab\x6f\x3a\x1f\x3d\x5c\xd9\xa4\xd2\x9a\x14\x74\x16\xab\xf0\xe9\x9a\x7c\xe8\x29\x81\x0e\x6d\xcf\x09\xe2\xe0\xd3\x21\x3e\x3d\x9c\x17\xa4\x4e\x01\x57\xf2\xf0\x31\x0c\xf9\x2f\x84\x7e\xb0\x2e\xd2\xde\xc6\x53\x50\xf3\x1e\xae\xb3\xc2\x96\x79\x26\x4f\x02\x7d\x3d\x07\xe0\xfc\xef\x61\xfc\xaf\xbf\xd7\xb1\x99\x99\x2d\xfc\xb0\xe9\xb0\xee\x2a\x89\x8a\xd8\x8b\x90\xd8\x5a\x81\xfc\x71\xdb\x3b\xbe\x2a\x53\x7f\x2c\x1f\xc5\xba\x57\x45\x20\xda\x05\x71\x48\xdb\x9f\x62\x77\x30\x3f\x99\xbf\x8d\x36\x9f\xdd\xb9\xb3\x53\x5b\xf1\x14\xd3\x83\x65\x4c\x66\x2f\xfd\x3d\xf6\x70\x39\x0e\xd6\x26\x79\x0d\x22\xd6\x0d\xe2\xfc\xef\xd1\xa3\xf8\xf8\x06\xfe\x4f\x7d\xfe\x8f\x27\x37\x50\xd5\x3c\x4b\x01\x8a\xee\x84\x5f\xf1\x0f\xcd\x25\xfd\x8d\x78\x3e\xe3\x73\x10\x38\xb9\x59\xc4\xa2\x5c\x92\x66\xe0\x9b\x50\xb6\x51\x8a\xe5\xcb\x81\x66\xae\x20\x0e\xe9\xc9\xad\x55\xf9\xe1\x69\x6e\xa0\x56\xc6\xb1\xba\x83\x88\x72\x27\xdd\x90\xa2\xf5\x17\x0c\xd2\x25\x66\x9f\xf0\x9c\x13\x61\xfb\x0b\xd0\x01\xf6\x20\x0e\xae\xc0\xde\x51\xfd\x50\xff\x7a\x98\xa1\xd5\xca\xa9\xcb\x63\x83\x83\x3b\x38\x74\xce\xeb\x6c\x2e\x9c\x6d\x19\xf3\x8d\xdf\x85\xdd\x1e\xcd\x21\xda\x05\x71\x70\x05\x26\x8b\x2b\x35\xfe\xe4\xd6\x96\x3d\xd1\xdd\x6c\x7d\x85\xa6\x76\x9f\xa4\x3d\x7b\xd6\xcd\x4b\xb7\x46\x15\x5d\xc2\x63\xc3\xf5\x2d\xb4\xeb\x27\x88\x43\x3a\xe3\x98\x39\xe7\x4e\xfd\xbc\xba\x57\xf8\xe9\x1d\xc3\xa1\x97\x57\xe9\x34\x84\x31\xd1\x0f\xfb\xbb\x98\xbc\x1d\x2d\x5f\xfc\xbe\xe1\x1d\x8d\x98\x11\x83\xb8\x7f\x14\xf8\xbf\x37\xcb\xff\x5a\xc1\x01\xdc\xc2\xce\x2c\x03\xb3\x57\x3e\x67\x24\x49\xca\x14\x18\x51\x4e\x7e\x0b\xfc\xae\xf3\x12\x8b\xb5\x44\xba\x88\xf7\x97\x80\x62\xa6\x8c\xb7\xd3\x18\xb4\xd9\x01\x88\x43\x8a\xf6\x6f\x35\x1c\x16\x3a\x8b\x66\xcf\x96\x64\xac\x45\x6a\x8b\xcf\x79\xa8\xd5\x0e\x27\xae\xbd\xa3\x59\x19\xc4\x77\x78\xd8\xfc\x43\x13\x8a\xf6\x03\x38\xb8\x03\xa6\x79\x64\x4e\x5b\xb2\x3c\xa2\xdd\x7f\xf7\xf2\x5f\x7d\xc5\x13\x7b\xab\x2b\xe7\x2e\x15\xd3\x79\x31\xd0\xc9\x3b\x99\x8e\x89\x0b\xda\xf5\x13\xc4\xc1\x1d\x68\x64\xc9\x97\x9b\xf2\x0b\x15\x14\xd4\x4b\x1c\xcd\xbb\x46\xd2\x44\xbf\x65\x3e\xcb\x26\x82\xdd\x1e\x2e\x75\x93\x6e\xf1\x46\x02\x14\x13\x05\x71\xf0\xf1\xbd\x28\xe1\x25\xf9\xe2\x69\xea\xad\x2f\x52\x4e\x09\xa1\xc5\x0c\x32\x7b\xd1\x8c\x14\xe4\x25\x63\x8e\xc3\xb4\xa5\x0a\x91\x05\x3e\xd0\x0a\x0e\x88\x43\x38\xf0\x3f\x33\x97\xff\x70\x00\x34\x9f\x38\xcb\x01\x9a\x3b\x2d\x59\x8e\x73\xc3\xdc\x8e\x7c\x45\x4d\xc5\xc5\xd3\x39\x52\xc5\x2f\x92\xc6\x7c\xee\x72\x1d\xfe\x4a\x1c\x3a\xf5\x3c\x72\x42\xf4\x1d\xc4\xc1\x1d\xb0\xa0\x19\x7a\xbc\x48\x96\x79\xc4\x7e\x50\xe4\xc8\x49\x29\xa5\xa3\x55\xbd\x5f\xf8\x2d\x3d\x39\x2b\x48\xd2\x6d\x8e\x35\x29\x33\x19\xda\x00\x08\xc0\xc1\x1d\x48\x4a\xe4\x1e\xf3\xb9\xe0\xa1\xfe\x58\xe9\x4b\xbf\x1a\xd6\x4c\xd3\x13\x6d\x0a\xac\xe6\xea\xc7\xf2\xce\x51\x3f\xa5\x8d\xd4\x6e\xc5\x23\xda\x05\x71\x70\x07\xec\xc8\xa7\xb7\x5a\xd4\x02\xb2\x2d\x0a\xec\x06\xdf\x2e\x70\xdb\xf0\xd8\x74\xbc\xfa\x4e\xa3\xa4\x27\x1f\x2e\x21\x98\xc2\x53\x7e\x0d\xd1\x2e\x88\x83\x8f\xef\x3b\x2c\x6f\x66\x69\x67\x3a\x8d\x0c\x5d\xea\x1d\xe5\x52\x12\x6b\xbf\xa7\x9c\xc1\xee\x2b\xaf\x88\xf8\xd3\xbb\xd5\xea\x0f\x07\xea\x11\x0e\x80\x38\xa8\x0e\x80\x76\xeb\x06\x4c\xee\xce\x72\xe0\x50\x4f\xe1\xb1\x51\xb2\x19\xcb\x57\x8f\x4f\xa9\xdc\xcc\xcf\xa6\xab\xec\x69\xc3\xfe\x52\xa3\x3b\x1c\xc4\xcc\x5a\xca\x38\x64\x24\x21\xfa\x0e\xe2\xe0\x0e\x14\x96\x49\xf3\xe4\xe1\xd6\xa7\x5e\xf4\xff\xe4\x56\x58\xd8\x73\x11\xdf\x57\x5d\xa1\x94\xea\x5e\x7c\x27\xba\x42\xc0\xdf\x97\x24\x50\x62\x02\xc4\xc1\x1d\xf8\xb3\xbe\x77\xd5\x6b\x53\x72\x72\xad\x0a\x6d\xd3\x86\x82\xb8\x8f\xbc\x76\xc8\xc2\xb1\x0a\xf5\xcd\x9d\x42\x9f\x43\x01\xd9\x44\x05\xe8\x4d\x11\x80\x83\x3b\x10\x38\xb4\x3b\x2f\x2a\xef\xb0\xf3\xfb\xe2\x55\x9c\x71\xf9\x13\xed\x83\x91\x5f\x8d\xde\x47\x09\x33\x61\x3e\x34\x6b\xa4\x6f\x30\xa0\xc3\x46\x40\x1c\xd2\x4e\xd8\x6f\xc5\x28\x35\xcd\x27\xf0\x2f\x0d\x04\x05\x12\x47\x04\x86\xe0\x66\x48\xd5\xa3\x72\x09\x34\xe7\xed\xba\x29\x12\x32\x1b\x43\x1b\xf7\x81\x38\xa8\x0e\xb8\xfd\xb7\x03\xa0\x99\xf6\x59\x0e\xc4\x3e\x55\xd7\xc9\x63\xc3\xd3\xaf\x0b\xf9\x71\xf8\x9a\x30\x72\x76\x1e\x35\xf3\xd2\x9d\x5a\x2c\x86\x4d\xce\x70\x7d\x85\x4a\x0b\x34\x44\xdf\x41\x1c\xd2\x39\xcc\xac\x6a\x8d\x5f\xab\x56\x54\xcd\x12\x2d\x7f\x67\x96\x5c\x1f\x21\x57\x13\x79\x10\xe9\x67\xbe\xc8\xff\x53\xd3\x50\x18\x73\x03\x3a\x2f\x19\xc4\xc1\x1d\xf0\x33\xf5\x4b\x61\xcd\x7b\x41\xed\xa7\x71\x38\x99\x17\xf4\x94\xdd\xee\x13\x99\xa9\xed\x7a\xad\x41\xf9\xf1\x8a\x49\x95\x3e\xe7\x6b\xe8\x2d\x3c\x80\x83\x3b\x40\x2a\x4f\x28\x1f\x37\x22\xa6\x68\x9b\xf8\xf6\xe3\xd5\xb4\xc4\x41\x73\x41\x71\xe9\xd7\x68\x9c\xa5\xc3\xe9\xc4\x0c\x46\x2d\x5f\xa1\x29\x2c\x88\x83\x8f\x6f\xd3\x8a\x9a\xaa\xb2\x82\x9c\x8d\x98\x0f\x1a\x95\x21\x66\x81\xc1\xe1\xcd\x47\x5c\x6f\x17\xb7\x9f\x93\xd9\x90\x9b\x66\xd6\xd2\xc8\xff\xff\xab\xf9\xff\xcd\x41\x75\x00\x10\xeb\x06\x3d\xf6\x9c\xe5\xc0\xb2\xb1\xab\x96\xb1\x19\xd6\x75\x79\x1d\x8b\xc9\x40\x91\x05\xc5\xd7\xa2\x5e\xfc\x6a\xcf\x0f\xbc\x15\x08\x17\x97\x07\x69\x47\x96\x10\x7d\x07\x71\x70\x07\xda\xac\x86\x2e\x77\xe1\x8a\xac\x3b\xec\xd5\x5b\x12\xc5\x18\xa1\x70\xf6\x75\xaa\x1a\x28\x25\xcf\x4a\xf6\xca\xda\x4b\x68\x3f\xd7\x43\xb4\x0b\xe2\xe0\x0e\xbc\x8c\x1c\x78\x47\x12\x85\x47\xa6\x42\x42\xd6\xce\xbf\xdb\x79\xbc\x3f\x54\x87\xba\xd6\xdc\x2e\x99\xfc\xd4\x98\x82\x4b\xe6\x2a\x34\x77\x03\x71\x70\x07\xc2\xe8\x3f\x70\xcc\xcb\x74\x85\x2b\xb2\xcc\x7f\x5f\xd7\x0a\x4c\x08\x15\xf8\x94\x41\x91\xca\x57\x63\xf0\xfd\x24\xca\x89\x88\x1e\x4a\xbc\x81\x38\xf8\xf8\xae\x6a\xd6\x93\xbd\x36\x7f\xd1\x4b\x24\xf6\x27\x96\xeb\xed\xe7\xab\xa5\x9f\x37\xf3\xfb\x38\x46\x50\xd3\xa6\xb1\x3f\xb1\x71\x2c\x35\x42\xa7\x77\x00\x38\xa8\x0e\x14\xff\xb7\x03\xa0\x67\xd0\xb3\x1c\x10\xa1\x54\x32\x1d\xb3\x63\x10\x49\xdd\x2d\x1e\x19\x98\xa8\xb9\x2c\xe6\xf1\x2c\x2c\xa1\xb4\x9f\x96\x54\xf9\xf0\x05\xf5\x55\xc6\x0a\x44\xdf\x41\x1c\xdc\x81\x1f\x6b\xed\x91\x65\x46\x17\x82\x3e\x94\xde\x9f\xc7\x56\xc1\xfd\x32\xd5\x4f\xa0\xdc\x5f\x3d\x9b\x4c\x38\x3f\xe2\xa0\xa7\xf2\xb0\x1f\xd1\x2e\x88\x43\xda\xad\x7b\x2c\x72\xeb\x2f\x7e\x93\x1e\x96\xc8\xf3\x8c\x70\x8d\x80\x51\xc6\x3e\xaf\xfa\x8d\xb6\x72\xcd\x0d\x69\x2a\x87\x31\xf7\x5f\xb1\x88\x76\x41\x1c\xdc\x01\xdc\x15\xbe\x13\xbe\x36\xee\x80\x55\x14\xef\x50\x1a\x52\x5f\x82\x9d\xeb\x58\x1a\xe4\xb4\x42\x5f\x63\xcd\xab\xf5\x35\x68\x3d\xfa\x10\xed\x82\x38\xf8\xf8\x16\xff\xf8\x50\x94\xc3\xcf\x9c\x30\x3a\x30\x86\xee\xaa\x63\xe7\xed\x42\x7d\x38\x27\xa6\xfe\xeb\xef\xf2\xe7\x94\x59\xdf\xa2\x07\x17\x10\x0e\x80\x38\xa8\x0e\x80\x62\xdd\xa0\x65\xc5\x7f\x62\xdd\x28\xc3\x48\x4b\x18\x29\x7d\x4f\x16\x39\x82\xfa\x4c\x31\x4a\x75\x67\x0c\xeb\x3c\x52\x62\xf4\xfc\xe9\x3e\xea\x1f\xb0\x9e\x56\x9b\xfc\x15\x18\x0a\x20\x3c\x97\x95\x13\xe4\x58\xb7\x7b\x6d\xe7\xd5\xaa\xb0\x41\x03\x77\xed\xab\xcf\x7a\x1b\x16\xaa\xd4\xbe\xa8\x6c\xa3\xfb\x2f\xb5\x46\xab\x7b\xe1\xeb\xfb\xb6\xe1\x9d\xcb\x3a\xd1\x29\xd2\x65\x6d\x76\x22\xe4\xf4\xaf\x79\xde\x92\x9c\x3b\x54\xe3\xee\xa0\x25\x77\x2d\xf8\x3c\xd0\xa0\x9a\xcd\x71\xbd\xdc\xb9\xd0\xd6\xc2\x44\xe6\x5c\x7a\x8b\x1c\xeb\xb6\x49\xa2\x0c\x7f\x71\x72\xf8\x73\xde\x6a\xb3\xed\x2d\x3a\x53\xa2\x5c\xaf\xad\x5c\xb0\x94\x82\xa2\x82\x75\x5b\x6a\xc5\xad\x47\xbf\xcf\xa5\xb7\xb7\x90\x2e\xbb\x5f\x99\xcb\xf7\x3d\xd3\xb9\x6d\x81\x9c\xb3\xd8\xc2\xcc\x41\x7d\xcc\x92\x7c\x3f\x24\x70\xd4\x7a\xf3\xce\x29\x83\xbf\x6d\xdc\xf9\x6c\x12\x8e\x1c\xeb\x7e\xb2\x70\xdb\x80\x9a\xce\x82\x43\xec\x53\xe5\xaa\x78\x4b\x01\xee\x95\xab\xbd\x38\x4d\x32\x41\xec\x49\x6b\xdf\x9c\x89\x6f\x73\x9d\xcb\xb6\x1d\x28\x3a\x48\x97\x65\x9d\xf4\x71\xaf\x17\x7a\x25\xf2\x93\x71\xf3\xee\x9f\x3b\x95\x6b\xec\x07\x13\x51\xc9\x2b\xc7\xc9\x71\xec\x1d\xbb\xe9\x46\x31\x72\xe7\xd2\x5b\xe4\x58\xb7\x3c\xd3\xe4\xb4\x69\xf3\x8d\xb6\x50\x82\x80\x97\x25\x5b\x1a\xc7\x12\x7f\x92\x58\xf7\xe9\x74\xfd\xba\x22\x79\x76\xdd\x09\x97\x67\xce\x6d\x0d\x10\xf4\x4b\x3d\xab\xd0\xd7\x9a\x63\x7f\xc0\x76\x1e\xcc\xbd\xe8\xce\xf8\x32\x8b\x9a\x75\xcf\x32\xe8\xcb\x28\x5e\x66\x75\x5b\x3c\x05\x83\x39\xc7\x2c\x73\x00\xa2\xc0\x81\x38\x78\xa1\xa7\xa6\x24\x4b\x6f\x55\xde\xc6\xb4\x79\xec\x8e\x7a\x49\x01\x4f\x52\xf2\x39\x99\x9f\xf2\x8b\xd6\xa0\xc0\xed\x64\x9d\x44\x8c\x3e\xe8\x7b\x18\x10\x07\x2f\xf4\xbd\x75\x65\x79\xe1\x02\xe4\x7d\xf9\xa3\x73\xd9\x07\xab\x21\xe1\x6b\xbd\x2c\x52\xea\xf7\x16\x9f\xba\xb4\xb5\xf0\x7f\xa1\xea\xae\x45\xb4\x0b\xe2\xe0\x85\x7e\x65\x7b\xcb\xba\xc0\x94\xc2\x5f\xb6\x58\xb8\xea\x11\xa6\xe5\xa3\x3d\x3e\x9a\x7c\xf5\x9d\xc7\xb7\xde\xd2\x13\xe2\xbc\xeb\xa4\xbd\x08\x2d\x58\x01\x38\xf8\xf8\x56\x96\xb3\x39\xc5\x3c\xbf\xea\xe8\x3a\x61\x9b\xeb\xfc\x50\xe8\x85\xcf\xba\x78\x37\x85\x86\xfd\x9f\x16\xd7\x91\xc7\x9a\x2d\xc1\x0c\x88\x42\x0f\xe2\xa0\x9b\xfd\xf0\x7f\xdf\xec\x41\x65\xf3\xcc\x05\xa0\x9d\xd7\x2a\x2a\xb6\x7b\x37\x6a\xb8\x4f\x65\xeb\xb1\xed\x84\x6f\xfe\xd6\xed\x0d\x4d\x69\xdd\xef\x5b\x7f\xfa\x7e\x5a\x42\x19\x3a\x6c\x1d\xc4\xc1\x1d\xd8\x92\xe7\xcd\x70\xc5\x30\x68\xb7\x7d\xc0\x4f\x5d\x29\x59\x39\xf4\x30\x36\xb1\x1a\x07\x4f\xeb\x46\xb6\xe5\xc1\x05\xfd\x85\x6c\x68\x02\x05\xe2\xe0\x0e\x44\xbd\x4b\x31\x72\xa0\x8f\x48\xcf\xf5\xe3\x7f\xff\xe1\xdb\xa4\xf8\xbd\xca\x80\x1d\xaa\x35\xf7\xd4\xc9\x97\xce\xd5\xcd\xf5\x04\xd0\x83\x2a\x88\x83\x3b\xf0\xdd\x25\xf4\xb0\xc4\xbf\x93\x7d\xf5\xee\xa7\x45\xd3\x9e\x88\xe1\xf6\xc6\x90\xf5\xba\xc5\x4e\xcc\xf5\xe7\xbf\x29\x3c\x42\x79\xa0\xbd\x1d\x40\x1c\x7c\x7c\x1f\xb1\x46\x97\xa4\x5d\x63\x16\x26\x73\xeb\x7e\xd5\x55\xd0\x85\xbe\xbf\x53\x26\xab\xd4\x71\x93\x06\xff\x65\x31\x21\xb5\x5a\x18\x13\xc2\x01\x10\x07\xdd\xec\x01\xb1\x6e\xd0\x3d\xec\x2c\x07\x18\xd6\x5d\x16\x02\x4d\x73\x25\x68\xdf\x28\xdd\x24\xf4\x65\x62\xbb\x7a\xe7\xbe\xce\x71\x7e\xad\xc6\x6d\x5f\x82\x37\x6a\x2b\xf7\xa0\x63\x49\x40\x1c\xdc\x81\x77\x1c\x14\x9d\xa5\x9d\x18\xbf\x88\x55\xd6\xc2\x27\x04\x4e\x58\xe4\x55\x9e\x7c\xf8\xb6\x3f\x81\x8f\xc7\x9d\x2f\xa7\x22\x7f\x0a\x45\xe3\x40\x1c\xdc\x01\xaf\x9e\x02\x09\xf4\x6f\xd6\x59\x6a\xa4\xa8\x85\x89\x66\x5e\x7f\x49\x09\xa9\x3d\xdb\xae\xeb\x44\x0e\xaa\x57\x4d\x06\x28\xcb\xf3\x22\xda\x05\x71\x70\x07\xc8\xf2\x86\x12\x7c\xff\x10\x6b\xcd\xda\xa7\x66\x85\xba\xeb\xfd\xf2\xe7\x29\x73\xed\x7d\x19\xa5\xd2\x4d\xa0\x91\x70\xb9\x84\x3d\x05\xd1\x2e\x88\x83\x8f\xaf\x24\xa7\x7c\xf9\x72\xbe\x75\xf3\xb7\x65\x15\x01\xcf\x6c\x9b\x22\x7b\xad\x64\x8e\xfc\x81\xe6\x25\x7f\x8e\xa2\x00\x45\xcf\xfb\x7a\xd0\x8e\x77\x00\x0e\xaa\x03\xa7\x00\x07\x00\x13\x8a\xb3\x1c\xd8\xf4\x8c\x4b\x62\xd6\x25\x79\x3d\xf6\x7d\xc1\xa8\xfa\x0d\x7e\x5a\x4e\x04\xcb\x1a\x03\x6b\x9c\xa1\x5c\x04\x47\x83\x9f\xb1\x1c\x74\x94\x0e\x88\x83\x3b\xe0\x25\x80\xb9\xde\xd1\xc5\x69\xd6\xa1\x9b\x31\x2f\x1b\xf2\xbc\x2d\xad\x5e\xcf\x70\xa3\xe6\x47\x53\x8d\x6b\x56\x82\x59\xf4\x55\x2f\xe8\x7f\x05\xe0\xe0\x0e\xa4\xc6\x98\x11\x74\x98\xec\xa2\x6e\xde\x90\x7b\xb6\x1f\x12\x1d\x4d\x8b\x1f\x8b\xbf\x12\x37\xdf\xbb\xe4\xa2\xf7\xb2\xc6\xbb\x0a\xda\x87\x00\xc4\xc1\x1d\x18\x19\x3c\xba\x97\x38\xff\xf9\x32\x29\x9b\x12\x51\xe4\x43\x6e\xcb\x9f\x3a\x5c\x65\xf4\x35\x76\x52\x73\xd7\x3c\x7c\x36\xec\xde\xdf\x40\xb4\x0b\xe2\xe0\xe3\xfb\x5b\xdb\x4e\xad\x1b\x3b\x20\x4e\x9e\xf4\x97\x0a\xf5\x4e\xc1\x18\x4d\x14\xd5\x6e\x2a\xef\x68\xe1\xd4\x92\xf5\xfb\x21\xc3\xb8\x4d\x84\x03\x20\x0e\xaa\x03\x80\x58\x37\x68\x76\x77\x96\x03\x9e\xa8\xbc\x75\x0f\xfc\xea\x7f\x96\xbe\xe1\xe6\x1c\xfc\xf0\x72\xa8\xfd\x30\x53\x55\x8a\x5c\x38\x9b\xdc\xd9\x4e\x80\x03\xd5\x1b\xda\xf1\x14\xc4\xc1\x1d\x88\x99\x33\x96\x18\x1e\xd7\x1a\x19\x0f\xcb\x9f\x9d\xbc\xb2\xa4\x22\x85\xb9\xa9\x9e\xd4\xe4\xc4\x49\x43\xac\xbf\xc7\x66\x97\x00\xfd\x5e\x41\x1c\xdc\x81\x90\xe6\x19\xee\x41\x66\x3c\xb6\xe0\x0d\xf5\x8a\x7e\x05\x95\x65\x42\x6b\xf3\xe0\x8e\xa9\x2b\x4b\xf7\xe2\xa7\x52\xb4\xb0\xb9\xa1\x88\x14\x88\x83\x3b\xc0\xd6\xf6\xfc\xbe\xdd\xe0\xe6\x23\xea\x40\xac\x5f\x93\x55\xec\xde\x99\x52\x53\x66\x0c\xf8\xef\xfa\x33\xc3\x1d\xeb\x8d\xda\x71\xa0\xfd\x0d\x40\x1c\x7c\x7c\x29\x85\x9a\xc4\xbd\x6b\xe5\x89\x69\x7d\xe9\xfb\xdf\xb5\xb9\x6e\x1c\x70\xb7\xcc\xe8\x28\x15\xc9\xa6\xd3\xc7\x1b\xe7\x0f\xb0\x51\x21\x1c\x00\x71\x50\x1d\xb8\xf5\xdf\x0e\x80\xa6\xda\x67\x39\x70\xc9\x0e\xff\x62\x84\x42\x2e\xc7\x58\xc9\xd8\xee\x1e\x51\x14\xb3\x6e\x8a\x4d\xe8\x67\xca\xa7\x6c\x84\x3e\x68\x2d\x69\x3b\x63\x64\x88\xbe\x83\x38\xb8\x03\x93\xe6\x8d\xe9\xa7\x14\x8e\x18\xd7\x46\x5a\xc6\x1a\xa6\xbf\xdc\x35\xc1\x21\x76\xc2\xb6\x8f\xbb\x28\x98\x66\x2a\x76\x5d\xb0\x2f\x10\x7a\xc9\x06\xe0\xe0\x0e\xdc\x16\xaa\x1d\x6d\xa2\x91\x75\xc5\x4e\xfd\x54\xb1\xc2\x7e\xc0\x26\xbe\x15\x90\x41\xf2\x60\xeb\xc9\xf2\x76\x87\xf3\xba\x79\x51\x11\xa2\x5d\x10\x07\x77\xa0\x27\x25\x3b\x97\xdf\x94\xf9\x8f\x55\xa9\x24\x25\xc6\xdd\x83\xdf\xa3\xcd\x59\x11\x7f\xaf\x60\x0d\x0c\xe7\x67\x6f\x35\x48\xe7\x40\xfb\x10\x80\x38\xa4\x87\xff\x6b\x99\x65\x5d\x9a\xe6\x78\x4f\xaf\x74\x5d\x95\x75\xf8\xf0\x51\x63\x15\x6b\x3c\xd2\x9f\x14\x35\x6b\xc8\x6c\xfc\x3e\x37\xc7\xff\xc7\xdc\x5b\x85\x55\xb5\xf6\x6d\xbc\x74\x77\x77\x0b\x28\x21\x5d\x22\x92\xd2\x20\x28\xa5\xd2\x5d\x22\x25\xdd\xd2\x08\x48\x83\x74\x77\x23\x20\xdd\xdd\x5d\xd2\x5d\x06\x21\xbd\xaf\x6f\x7f\x2f\x6c\xd7\xd0\xf1\xcd\xf7\x60\x1d\xec\xb3\x75\xad\xeb\xf6\x66\x8c\x67\xfe\xe6\xff\x89\xfb\x3f\xc7\x88\xbc\xdb\xfc\x43\xd0\xdd\xd5\x01\x08\x6d\xdd\x90\xf6\x3d\x7f\x63\x80\xef\x80\xe4\x28\xe0\x9a\xe7\x51\x1b\x69\xed\xf6\xa4\xb9\x8f\xef\x47\x85\xa3\x25\x47\x0a\xc1\xc8\xb3\x53\xce\x6f\x59\xb4\xef\xee\x0e\xc1\x21\xe9\x80\x0c\xac\x4e\x94\x18\x04\x07\x99\xb2\xd3\x6b\xbf\xfb\x51\x86\xce\x80\xe0\x3d\x92\xe4\xe2\x6a\x10\xd4\xf9\xfd\x39\xf5\xf0\xa6\xfb\xcb\xbb\xd7\xc0\x41\xd2\x01\x19\xa0\xda\xd5\x2c\x2b\x42\xf1\x90\x1c\x91\xcd\xc1\x51\xee\x29\x8b\xc6\xc8\xc9\x26\xc0\x94\x7e\x85\x34\xd3\xd7\xe5\x22\xc7\xeb\x96\x78\xeb\x0b\x49\x07\x64\xa0\x99\x6f\x3e\xea\x7d\x15\xae\x60\xaf\xd4\x03\x73\xa7\x30\x67\x9d\x92\xed\xc7\x18\x0a\xcb\xa8\x47\xcd\x53\x9a\xda\x16\x4c\xda\x77\x21\x03\x24\x1d\x70\x7c\x85\xbe\x67\x8b\x09\xea\x6b\x2f\x1e\x4c\x69\xfb\xfc\xac\x7d\x86\x24\x53\x31\x90\x8e\x3b\x55\xeb\xc4\x29\xe9\xec\xb5\x21\x4e\xe8\x73\xcb\x00\x24\xdd\x5d\x1d\x78\xfd\x7f\x33\x00\x69\x13\xfa\x37\x06\x56\x79\x9b\xdb\x74\x51\x1a\x15\xb1\xcb\xb6\x99\xa2\x12\xe3\xc2\x62\xb2\x90\x74\x09\xdb\x09\xa2\x4a\xd0\x14\x10\x52\x87\xf0\xee\x6a\x36\x24\x1d\x90\x81\xac\x9e\x5a\x96\x0c\x0f\x15\x12\x24\x25\xcf\xe7\xcd\x94\xda\x64\x8b\x45\x8a\xdf\x02\x4b\x27\x48\x0d\xda\xe0\x63\x8b\x0f\x15\xef\xde\x08\x01\x49\x07\x64\xc0\x8b\x44\x61\x40\xea\x9c\x10\x2e\xa2\xd2\xa4\xc3\xf9\x0a\x65\x94\xb0\xf1\x61\x5f\xba\x74\xcc\x30\xd5\x91\xdf\xfb\x0d\x07\xa9\xb7\xb7\xbe\x90\x74\x40\x06\xe8\x9b\x8c\xe5\xef\x7f\xac\x91\x0c\xd5\x9f\xf4\x8a\xd8\x1e\x37\x5b\x8a\x37\xcf\x67\x56\x89\x73\xd6\x95\x77\xaa\x0e\x88\x2d\xbd\x7b\x8d\x33\x24\x1d\x70\x7c\x8b\xa5\xa4\x1b\x1a\xe0\xac\x5f\xaa\x61\xed\xb6\xb6\x4f\xa7\x26\x4f\x2e\x1a\xf9\x3e\x3f\x38\xc6\xa6\x7c\xa1\x14\x96\x1e\x1c\x79\xf7\x33\x2f\x48\xba\xbb\x3a\x00\xa9\xad\x1b\x52\xc3\xe0\x7f\xda\xba\xa1\x22\xff\x38\xc3\xa0\x59\x4f\x15\xb8\xc1\xe1\xf5\x46\xae\x60\xb6\x81\x4a\x73\x0b\x37\xe4\x3d\x61\xd5\xa8\x28\xaa\xb5\x42\x4f\x0c\xd9\x33\x70\x51\xfa\xd7\xce\x30\x20\xfd\xa1\xbf\x86\xd7\xaf\xcd\x31\x1b\x0c\xde\x0b\x7a\xec\x98\xbb\x91\xd4\x6d\x08\x09\x71\x6e\xbe\x10\xaa\xb9\x40\x66\x45\x30\x4e\xa0\xf4\x7c\x7b\xf7\xca\x79\x48\x3a\x20\xa7\x22\x9e\xcc\xef\xd2\xfc\x14\xb7\x38\x9e\x6d\xa6\x62\x7a\x7f\xb9\xa4\xf5\x9c\x3a\x4d\x5a\x31\xcf\x43\x99\x21\xe1\xbc\x7a\x1d\xa1\x71\xeb\x0b\x49\x07\xe4\xf4\xec\x02\xa7\xaa\x2b\xbc\x85\x4c\x52\x82\x45\x76\xb1\x7e\x85\x4c\xe3\x26\x1e\x65\x11\x13\xed\x89\x63\x73\x81\xcd\x3d\xd8\xa1\x82\x5b\x5f\x48\x3a\x20\xa7\xc5\x91\xeb\xb1\x5f\x2a\xef\xf7\xa4\xaa\x7a\x29\xd5\xea\x7d\x1d\x60\x77\x17\x69\xd7\x32\x42\xf1\x8b\x87\xbd\x48\xc6\xda\x9d\xbc\x7b\x96\x22\x24\x1d\x70\x7c\xcb\xd3\x30\x0f\xde\xc2\x86\x29\x7f\x4b\x09\x0a\xf9\xbc\x6b\xfa\x9a\x76\x40\x3a\x5e\x7c\x2a\xf1\xe1\x38\x6a\x8c\x87\x99\x5c\xab\xf4\x2d\xa7\x90\x74\x77\xb5\x2a\xf2\xff\x6e\xeb\x86\xd4\x12\xfc\xf7\xb6\x6e\xb7\xe7\x92\x9e\x8a\xf7\xaf\x47\x17\xe6\xe2\xa5\xc9\x72\x15\x8a\xaa\x30\xeb\x5c\xbe\x65\x2c\x3e\x4e\x6f\x58\xad\xc4\x37\xad\xae\xbe\x6d\x91\x86\xa4\xfb\xb3\xad\x9b\x8d\xd6\x05\x81\x9f\xf3\xc6\x82\xd9\xc7\xf1\xeb\x53\x27\x8b\x27\x72\x67\xac\x17\xfd\x82\xf2\x98\x26\x16\x86\x4d\x32\xf6\x0f\x2d\x6f\x9d\x21\xe9\xfe\x6c\xeb\xae\x90\x0b\xae\x50\x5e\xdb\x4d\xa8\x8b\xb6\xac\x69\x0a\x8c\x16\x5f\xfe\x5e\xda\x72\xd6\x2a\x1f\x8e\x70\x4f\xc4\x2f\x02\x97\xc1\xef\xd6\x19\x92\xce\x47\x1c\x0a\x0a\xfa\x9f\xf3\x56\x6b\x07\xe7\x4b\x85\x35\x6c\xa1\x84\x49\x27\x43\x11\xed\x0b\xac\x6f\x4d\x68\x9e\x92\xb5\xd7\x34\x94\x8f\xc5\x92\x9a\x84\x05\xee\xda\xba\x8b\x5f\x57\x3e\x8d\xf6\x77\x94\xae\x21\x3d\xdf\x78\xd9\x2d\xde\xdd\xc0\x83\x6e\x79\xdf\x84\xdb\x63\x11\x27\xa9\xc8\x04\xb7\xfe\xf0\xf7\x86\x63\xe4\x94\xb5\xce\xf0\x9d\xab\xf3\x27\x1a\xf6\x30\xcc\xd4\x2f\x5e\x7e\x7d\x20\x75\xcf\x49\x98\x2a\x59\xe1\x11\x6f\x23\xd7\xd2\x80\xdf\x6f\xd2\xc8\x17\x4f\x61\x03\x9d\xc8\x5a\x9a\x9a\x34\x39\x9f\x92\x97\x7e\x89\xfd\xc0\x67\x2b\x22\x46\xa9\x9d\x5d\xfd\x11\xf5\x6c\x0f\x23\xff\xff\x7f\x6d\xdd\x90\x6e\xee\x2f\x6d\xdd\xfe\x23\xc9\xd9\xc3\xdf\xc5\xb4\xc8\x44\x4b\x3d\x54\xe1\xd3\x12\xa7\x6b\xca\xbb\x53\x17\x0f\x2b\xdb\x17\x53\x85\xf2\x79\xf4\xc5\x7e\x93\x52\x54\xbd\x98\x8a\x09\xd0\x15\xea\x34\x62\xd2\x51\x2a\x80\xbb\x17\x94\x99\x42\x2a\xbe\x9b\xa3\x49\xaf\x96\x62\xa3\x46\x78\xb5\xf3\x7b\x63\x2e\x5c\xbc\x39\x89\x9b\x59\x83\x5e\xd1\xfe\xfa\xe5\x0a\x22\x43\x59\x88\x70\xb4\xdb\x41\x72\x17\x02\x25\x62\x5a\x72\xa3\x32\xd6\x5d\x5b\x37\xa4\x3f\xff\x9f\xb6\x6e\xe1\x3f\xda\xba\x9f\x11\x05\xf5\x3e\xb7\x87\x5f\xde\xd6\xeb\x73\x9c\x0c\x78\x59\x3a\xd8\x99\x35\x64\x46\x40\xb5\x90\x2a\x58\x42\x28\x69\x3e\xd9\xf7\x6f\x1c\x84\x37\xff\xd9\xd6\x8d\x28\x71\xff\xf5\x0d\x4d\x2c\x35\xb1\xad\x75\x8e\x4f\x39\x09\xea\x85\xfe\xc9\x25\xa1\x8a\x66\xa4\xe5\x63\x6a\xcd\x85\xfd\xb8\x9f\xff\xc6\x9f\x15\xfe\xb3\xad\x5b\x6e\xa9\x28\x63\xf1\x5d\x0b\xbc\x57\x40\x0e\x59\x95\x2f\x14\x74\x53\xcc\xda\x8e\x76\x86\xd7\x89\xae\x33\xc9\x32\x33\x36\x8c\xdb\xbf\x72\xb7\x7f\xb6\x75\xcb\x1c\x57\x19\xae\x6f\x73\xcc\xb7\xcb\x9f\x2a\x72\x7e\x43\x62\x9a\xe7\x2e\x8c\x8c\x18\xe5\x25\xc6\x72\x92\xfb\xbe\xfc\x3e\xf8\xe9\xbf\x72\xb7\x7f\xb6\x75\x9f\x3c\x23\xed\x38\x3b\x4d\x2c\x9e\xc8\xcd\xed\xac\x3a\xf7\xd1\xcb\x25\x71\x9c\x43\x94\x9e\xe8\x3e\x3c\xb9\x8f\x86\xa7\x71\xfa\xaf\xfc\xd9\xe6\x3f\xdb\xba\x15\x1e\x85\x1f\x77\x93\x19\xce\xb7\x12\x96\x96\xa2\x13\x6a\xd6\x88\x41\x09\xe8\x3b\x20\xbc\x54\x5e\x66\x5f\x1a\x0d\x20\xad\xf2\xfd\x57\xee\xf6\xcf\xb6\xee\x91\xe1\xba\xa8\xae\x06\xe8\x30\x49\xe8\xf9\xdc\xfb\xfc\xee\x11\x31\xba\xaa\x75\xdf\x52\xe4\x84\x95\x02\xd1\x4e\x34\x1d\xb5\xa2\xfe\x95\xbb\xfd\xb3\xad\x5b\xc3\x76\xbe\x31\x6f\xe3\xf5\xa8\xc5\xfe\x9b\xe3\x60\x92\xe9\x93\xf4\xe9\xfd\xfb\x86\x9b\x71\x9a\xf4\xab\xe4\xa4\x34\x49\x5b\xd1\xff\xda\x72\x08\xd2\x37\xf5\x6f\xcb\xa1\x5f\x67\x98\xcf\x06\x51\x68\x4a\xea\xa1\xd5\x0b\xdd\xc8\x6e\x54\xfc\x0b\xd6\xe7\xc8\x46\x4c\xcd\xc5\x8c\x84\x31\xf4\xde\x0c\x8f\xdc\xf5\x45\x41\xd0\x01\x97\x43\x6d\x42\xc7\xfb\xda\x1e\x0f\xca\x0a\x08\x78\xd8\xb2\xb7\x19\x7e\x4e\xb0\x4d\x54\xf1\xd9\x05\x12\x33\x4d\x6a\xdc\xcf\xb4\x60\xbc\x7b\x89\x17\x24\x9d\x8f\x28\x14\xdc\xef\xbe\x17\x6f\xfc\xdc\x4f\xe9\x82\x95\x77\x28\x34\xbc\x6c\x2e\xe2\x92\x63\x94\xa6\x44\xd1\xb4\x8e\xd6\xf1\xde\x3e\x7e\x42\xe0\xef\x79\xf7\x2b\x4f\x48\x3a\xe0\xf5\xca\xa4\xd2\x17\x69\x1c\x5e\x0c\xc4\xe2\xa5\x97\x64\x14\x96\x7e\xeb\xc4\x68\x10\x89\x39\x7a\xd7\x64\x4f\x27\xd3\x23\x18\xbb\x75\xf7\xf4\x17\x48\xba\x3f\xfa\x39\x09\x94\x3e\xff\xd2\xee\x3d\x67\xe3\x5a\x1b\x99\xc6\x51\xda\x65\x56\xc2\xf7\x1c\xfe\xb1\xd3\xcf\xfc\x20\xe5\x7b\xcb\x49\xcc\xd4\x6d\x5b\x37\x24\xdd\xff\xf8\x7a\x7a\xf9\xfe\xbf\xf5\xf9\xff\xd8\xb9\x41\xaa\x9a\x7f\x43\x40\x20\x3c\x29\x3b\x3a\xb8\xff\xdb\xb3\xdc\x80\xc7\xc4\xba\x16\x5d\xb8\xef\x58\xe4\xa2\x3a\x5f\xf6\xe5\x9d\x3e\xcf\x4a\x59\xd0\x30\xbd\xbd\x75\x48\x3a\xe0\x90\x62\x45\x74\x11\xd5\x3d\x79\x9f\x6e\x98\xf6\x6e\x99\xf4\x83\xeb\xaa\x9a\xe1\xc5\x5b\xc2\xca\x8a\x16\x46\xe4\x7e\xa3\xbc\x80\x87\x77\x6d\x21\x90\x74\x40\x04\x6a\x39\xeb\x8f\x09\xb4\xb9\x71\x33\xa6\x73\xf5\x89\x95\xb8\xa9\xf6\x9e\xc6\x85\xfb\x32\x29\x69\x91\xe1\xcf\x56\x5d\x14\xe0\x78\xdd\xfa\x42\xd2\xfd\x91\x3e\x54\xcb\x79\x91\xcf\x04\x5f\x6e\x3d\xcb\x2f\x19\x16\xf9\x66\x1b\xf2\xfc\xb8\x59\x35\x43\xfb\x51\x0e\x6f\xe3\x42\x97\x1a\xde\xdd\x89\x36\x24\x1d\x70\x7c\x71\x99\xec\x64\x6e\xa2\x77\xb7\xc2\x27\x7b\xcc\xfc\x74\x36\x1d\x74\xeb\x92\xe1\x6a\x87\x6a\xc2\x6d\x3f\xa9\x3c\x3d\x17\x44\x40\xb9\x5d\x11\x43\xd2\xfd\x07\x81\xff\x9d\x2c\xff\xaf\x1f\x65\x43\x98\xc2\xfe\x7a\x92\xcb\x69\x7f\x6f\xed\x6b\x1f\x36\x2b\x8e\x1c\xdb\x6e\xd8\x30\x85\x12\xea\x97\x1f\x16\x6c\xbc\x3f\xf9\xbc\x55\x2f\x9b\xeb\x48\xee\xde\xbd\x09\x49\x07\x1c\x53\x6d\xb7\x2e\x19\x93\xfc\x01\x8c\x21\x3f\x34\x9f\x07\x88\xca\x38\xb0\x7a\xd5\x8f\x5e\xee\xea\xac\x60\xda\xa1\xa6\x76\xd1\x5a\xde\xbd\xc3\x0b\x92\x0e\xc8\x80\xff\x0f\xfc\x84\xf8\x00\x2c\x49\x1d\x45\xca\x5c\x45\x94\xb6\x05\xa1\xb5\x44\x94\x7b\x30\xfe\x16\xf8\xfc\xad\x2a\xfe\xae\x66\xf7\x6f\x7d\x21\xe9\x80\xd7\x1b\xaa\x39\xaf\xf8\x96\x22\x48\x45\xe8\xc8\xec\x25\x7d\x84\xfc\x45\xe0\x74\x99\x88\x17\xa7\xe9\x20\x8a\x3d\x1d\xc9\xfd\xcc\xc9\xbb\xdd\x3b\x24\xdd\x1f\xa7\x78\x62\xe9\x8e\x5c\x98\x9d\xf6\x51\x5c\xf2\x9d\xdd\x38\xec\x4f\x7e\x4a\x7c\x45\xc4\x48\xda\xfc\x10\x67\x68\x24\x97\x74\x4d\xea\x71\x77\x8a\x07\x41\x77\xcb\x80\x30\x84\xb6\x6e\x48\xeb\x89\xbf\x31\x00\x0f\xc5\xee\xcb\x84\xaf\xfd\xae\x36\xbd\xd5\x72\x5d\x80\xb4\xf7\x3c\x87\x20\xb9\x28\xc7\xa6\xab\x89\x81\xe6\xfb\x3c\xed\x23\x89\xdb\x7b\x87\xa4\x03\x8e\xe9\xda\xa0\x4e\xeb\xe8\x5a\xba\xe3\x8d\x5f\xaa\x56\x06\x7a\x6c\x4a\x28\xec\x4b\x0e\x4f\xdf\xcf\xc5\x17\xc6\x1d\x78\xf6\xe4\xde\x5f\x6e\x7d\x21\xe9\x80\x0c\xb4\xf5\x71\x04\x1e\x91\x1b\x17\xed\x79\x3d\x18\x5e\xf0\x22\xed\x37\x97\xbc\x90\x3d\x74\x9b\xce\x78\x5d\xe1\xb4\x2e\x65\x42\x71\xf7\xc3\x7c\x48\xba\x3f\xde\x17\xbb\x3f\xf8\xfa\xc7\x29\x2c\xb1\xd9\x9c\xfd\xcb\x5f\xdf\x0c\xa6\x24\x4b\xdc\x16\xe4\x42\x27\x14\x22\x54\x5f\x31\x97\xd5\x5b\xf0\xdc\xfa\x42\xd2\x01\xc7\x37\x9e\x95\x5f\xf1\x49\x84\x8a\x94\x47\xad\x21\x4e\xeb\xd5\x93\x5a\x37\xf5\xf4\xfb\xaf\xde\xb2\xf6\x65\x2e\xb3\x84\x4e\xaa\xc8\x92\xdf\x3d\xac\x09\x82\xee\xae\x0e\x40\x68\xeb\x86\xb4\xb8\xfb\x1b\x03\xa7\x2c\x67\x71\x29\xd6\xed\x8a\x53\x8f\xbf\xa4\x7e\xca\xa4\x2f\x4c\x60\x1e\x3f\xfd\x11\x33\x70\xe4\x2e\x06\xdd\xa0\x2c\xbe\xec\x7f\x7b\xef\x90\x74\xc0\x31\xbd\x20\x42\x64\xe9\x6f\x65\x57\x22\x79\xb3\xa8\x37\xc5\x87\x4d\x8a\x7b\x7e\x16\x7d\x5f\xc6\x6b\xd8\xba\x10\x2f\x8b\x60\x24\xf4\xee\xe9\xfa\x90\x74\x40\x06\xce\x45\x4e\x19\xbe\x23\x2c\x2f\xf3\xef\x71\x16\x7b\xc6\x6b\xc3\x8b\x0a\x57\x48\x4d\xb6\x3d\x0d\x2d\x44\xdd\xda\xa5\xf8\x59\x7f\xf7\xe3\x74\x48\x3a\xe0\xf5\xb6\x1c\x0a\x1a\xfa\xc3\xc1\x45\xe9\x2b\xff\x58\xc7\xde\x18\x1c\x5a\x1b\x80\x6d\x1b\xb5\xf1\x70\xe8\xa9\x2e\x2c\x9f\xf2\x72\xbe\x7b\xcb\x00\x24\x1d\x70\x7c\xb9\x67\x73\x1f\xbc\x2d\xb5\xbd\x11\x0f\xcf\x96\x7c\xe7\xe9\xa8\x90\x24\x28\x82\x4c\xba\x9b\x3b\x07\x23\x8d\x47\xe7\x0b\x2f\x2f\x7b\xcb\x00\x24\xdd\x5d\x1d\x80\xd0\xd6\x0d\x69\xa5\xfd\x37\x06\xd6\x1a\x28\x73\x31\x57\x19\x44\xe1\x9f\x56\x10\x56\xb6\x12\xa1\xd5\x3f\x91\xa7\xa1\xb6\x51\x25\x18\x8d\x49\xbd\x66\xe3\x55\x0d\xbe\xfb\xbe\x42\xd0\x01\xc7\x34\xce\x2e\x85\x0f\x9a\xb9\xba\xeb\xea\x38\x64\x6f\x23\x14\x3f\x1a\x3d\x53\x19\xe3\x3b\x56\xb3\x59\xaa\x9f\x5c\x25\x4d\x04\x29\xd1\xdd\xcf\x30\x20\xe8\x80\x0c\xb4\x5c\x51\xf1\x3e\x89\x26\x59\x6d\x46\x8a\x4e\x65\x6c\x16\x39\x27\xe1\xdc\x51\x61\xef\xa3\x3d\x7a\x81\x51\x17\x14\xf6\x2c\x9a\xf8\xee\xb3\x82\xa0\x03\x5e\xef\xf1\x0f\xe4\xa5\xd3\x66\x44\x7d\xd9\xc9\x35\xd4\x72\xd9\xac\x67\xd9\x2f\xb5\x62\xc8\x3d\x62\x36\x7f\x4e\xbc\xce\x7e\x22\x5b\x98\x7f\xeb\x0b\x49\x07\x1c\xdf\x31\x54\x8d\x58\xe5\xa8\xfb\x93\x84\x81\xb9\xdf\xbe\x29\x0b\x05\xc4\xb8\x9a\x4d\xed\x3f\x9e\xfd\xb1\xb7\xe2\x62\xec\xef\x8d\x86\x77\xf7\xa0\x1e\x08\xba\xbb\x3a\x00\xa1\xad\x1b\xd2\xb6\xe7\xaf\xef\x61\xbe\x86\xe5\xf5\x73\x81\x7a\xa5\x4b\x59\xff\x95\xad\xa2\xcd\xd8\x5c\xf7\xc9\x8a\x72\xa0\xed\x43\xcd\x40\xce\xbe\xe7\x3c\x75\x27\xb7\xf7\x0e\x49\x07\x1c\xd3\x10\x9d\x7a\xb2\x90\x1e\xdc\xb7\xe3\xb5\xf2\xc1\x12\xa5\xaf\xb6\x58\x8a\xd9\x28\xd4\xa4\x36\x7c\x79\x7b\xd2\x2a\x8c\xd3\x3f\xdd\x3d\xbc\x11\x92\x0e\xc8\x00\xe2\xac\x32\x92\x93\x57\x2e\x5e\x6c\x80\x56\xef\x31\x5f\x39\xc9\xb9\xcf\x5a\xde\x97\xa5\xee\x22\x7f\xb6\x5c\xaf\x93\x5a\x46\xce\x5b\x5f\x48\x3a\xe0\xf5\xda\x7c\xed\x2b\x93\x53\x9b\xad\x2b\xa1\xd8\xf6\x11\xac\xd2\x26\x9a\xa2\x72\x46\x5a\xe6\xde\x62\xd1\x6d\x29\xce\xbe\x18\xe2\xbb\x7b\x80\x21\x24\x1d\x70\x7c\xad\x09\x5d\x06\xc5\xe0\x82\xa2\x3e\x91\xe9\x7f\x96\x6c\x94\xee\x74\xeb\x5c\xeb\x25\x6a\x1a\x2a\x26\xf1\x98\x1f\x8e\x4d\x54\x7b\x75\xcb\x00\x24\xdd\x5d\x1d\x80\xd0\xd6\x0d\x69\x0f\xfa\x37\x06\xae\x35\xf2\x1c\x67\x05\x83\x7d\x09\x8d\xfa\x79\x9e\x57\xf5\x3e\xf7\xa3\xcc\x53\x16\xb1\x71\xf6\xfe\xf4\x70\x8b\xfa\x30\x71\x0b\xe9\xf6\xde\x21\xe9\x80\x63\x5a\x7d\x32\x7c\x7e\xf2\x36\x82\x3e\xb7\xf5\xc6\xe0\x11\xc5\x5a\x2c\x0a\xee\xd5\x1c\x42\x4c\x3d\x69\x79\x11\xc3\x0f\xe3\x4b\xdc\xee\x5b\x5f\x48\x3a\x20\x03\x9c\x8e\x62\x0b\x24\x47\x73\xf3\xd6\xf3\x3b\xe4\x43\x8e\xda\x2d\xe2\x1c\x27\xf2\xad\x9c\x4c\xe1\x2f\xe7\xd4\xfd\xc2\x4e\x39\xef\x4e\xca\x21\xe9\x80\xd7\xab\xfc\x05\x9a\x8c\xb4\x45\x50\x21\xcc\x16\x5f\xce\xfb\x8c\xf6\x3d\xef\xda\x13\x67\xe3\xd2\x24\xa3\xbd\x08\x01\x35\xcd\x71\x91\xbb\xb7\x8d\x40\xd2\x01\xc7\x17\xd5\x92\x34\x8a\x48\xe0\x03\x7c\x16\x93\x32\x3c\xe5\x2f\xc9\xc4\xfb\x84\x46\xc9\x2f\xe6\x1a\xa3\xd8\x84\x96\x44\x9a\x77\x58\x0b\x6f\x19\x80\xa4\xbb\xab\x03\x90\xda\xba\x21\x1d\x2b\xfe\xa7\xad\x5b\xf8\xcf\xb6\x6e\xaa\x65\xf7\x09\x49\xeb\x8f\xd8\x87\x44\xb6\xfb\x74\x6a\x94\x7e\xec\x03\xec\x43\x79\x22\x5e\x91\x21\x06\x5d\x05\x12\x3a\xc5\xff\xca\x61\x5c\xf3\x9f\x6d\xdd\xd0\xf3\x52\x78\x70\x35\x0e\x6f\x22\x95\x96\xf9\x75\xe8\x8c\xf9\x8e\x23\xa1\x9d\xca\x87\x9a\x4e\x0e\x34\x66\xad\xe5\xf9\x65\xdd\xff\x95\x73\xa2\x3f\xdb\xba\x4f\xb3\xe1\xd7\x71\x22\x57\xb5\xba\xc5\x4e\xe2\xbb\x65\xcc\x94\xe0\x5c\x3e\x5c\x45\x0f\x43\x87\x99\x0e\x62\x1a\xa2\x23\x86\xa1\xfd\x2b\x77\xfb\x67\x5b\xf7\x8b\xf3\x4a\x1f\x97\x4c\x4b\x69\x0d\x26\x34\xc6\x09\xae\xa0\xcd\x13\x35\xda\x21\x6c\x2f\x8e\x31\x85\xbd\x87\xdb\xd1\xad\x02\xff\x42\x6c\x16\x2c\x2e\xfc\x67\x5b\xf7\x46\xec\x7c\x19\xa6\x07\x86\x50\x0d\x8b\x6d\x60\x2c\xf4\x78\xbf\x50\xf5\xec\xc1\x7a\x5a\x0c\x3b\x67\xb4\xb1\xee\xaf\x77\x50\x6b\xff\xca\xdd\xfe\xd9\xd6\x3d\xeb\xf0\x66\x89\x84\xf5\x1d\x9f\x75\xed\xf3\x3c\x1a\x2f\xa2\xcf\xdf\x2d\x64\xa9\x60\x56\xee\xc7\x13\x1c\xb3\xfe\xd8\x58\xbc\xf9\x57\x9e\x16\x22\xfc\x67\x5b\x77\x5f\xd1\x4f\xec\x73\x63\x11\x57\x0d\x09\x95\x9e\x45\xe7\x11\x6c\x19\xf8\x97\x53\x96\xf1\x06\x26\x08\x69\x0a\xc1\xad\x7a\x3c\x06\xff\xca\xdd\xfe\xd9\xd6\xad\x73\xaf\x1e\xc6\xf0\x49\x6d\x8f\x59\x10\x93\xc6\x83\x2d\xfe\x24\x7e\x94\x78\x7b\x4e\x0f\xdb\x78\x2e\x12\x23\xc7\xf8\x64\x17\xb6\x7f\xed\x0c\x10\xd2\x37\xf5\x6f\x85\xbe\x3c\x6e\xa2\x3c\x7c\x92\xc8\x41\x5d\xe0\xbd\x9d\xf8\xe4\x44\xdd\x4d\x59\x94\x6f\x6b\x69\xf0\x61\xcd\xaf\x86\xb0\xe3\x49\x82\xbb\x82\x0c\x49\x07\x2c\x9c\xb1\x6e\x6c\x4d\x26\xeb\x73\x5f\x58\x08\x26\x83\x06\x58\xa9\x9f\xb7\x44\x16\x0e\x87\x29\xf8\xcf\x34\xa4\x61\xe0\x2f\x3d\xcd\xf5\xb8\xf5\x85\xa4\x03\x16\xfa\x27\x06\xaf\x9e\x89\x3e\xe6\xbf\xa0\x47\x2f\x5b\xa5\x26\xca\x9e\x52\x56\x6b\xf5\x5a\xb5\x97\x3e\x7e\x12\x4c\x5f\x20\xf1\xf5\xe7\xdd\x61\x05\x24\x1d\xf0\x7a\x79\x75\x49\xae\xcd\x1c\x4b\x1c\xb9\xaa\x4c\x7b\x36\xcf\x7e\xdd\x43\xa2\x5b\x5d\xb8\x61\x1b\x31\x4c\x1d\x44\xed\xdb\xf7\x50\x3a\xbd\xf5\x85\xa4\x03\x8e\xaf\x28\xe5\x39\xe2\xb2\xda\x2f\xc9\xc0\x5d\x8f\x0a\x97\x6e\xb1\xca\xc8\x12\x49\x3a\x27\x5a\x1f\xee\x78\x37\x2b\xe4\xa5\xd6\x00\xf5\xdb\x42\x0f\x49\x77\x37\xd9\x43\x68\xeb\x86\x54\x36\xff\xc6\xc0\x32\xba\x6f\xf4\x48\x94\xee\xe3\xad\x9c\xa5\xaf\x01\x2f\xc7\x38\xf7\xde\xa4\x9b\xe5\xd6\x0b\x28\x9b\xe9\x90\x17\xc3\x84\x9a\xde\xbd\xfa\x0a\x92\x0e\x38\xa6\x30\xc8\xfb\x0c\x3e\xcb\x3f\x97\x7e\xb9\x7f\x91\xd8\x96\x80\x7a\xdc\x9c\x5d\x09\x6d\xfb\xbd\x7e\x02\x66\xaa\x1e\xd5\x05\x45\xe1\xee\xc9\x8c\x90\x74\x40\x06\x62\xf4\xd7\x91\x17\xa9\x91\x15\xf4\x7b\xe3\xb7\xa5\xf2\xba\x43\x58\x4e\xa6\x7c\x53\xb5\x31\x8c\x88\x0f\xdc\xf7\xe9\xf5\xfd\x0d\xee\x7e\xc7\x07\x41\x07\xbc\xde\xee\x9d\xcc\x16\x3a\xac\xa9\xc6\x44\xed\x1d\x82\xd0\xca\x4f\x34\x68\xe8\x6d\xb6\xcc\x1b\xf9\xec\xdb\xb4\x92\x76\xc5\x48\x81\x77\xbf\x41\x87\xa4\xfb\xe3\x6d\x90\xba\xde\xe3\xe1\xf0\x05\xba\x7e\xe4\x3b\x7a\x1c\x75\x9c\x39\x62\x94\xdf\xa3\x64\x8c\x3f\x38\xa6\x8e\x58\x8e\x0a\x06\xae\x50\xdd\x32\x00\x49\x77\x37\xd9\x43\x68\xeb\x86\x34\x87\xfd\x8d\x01\xd7\xf2\x4d\x01\xb2\x8e\xe9\x97\xc8\x0f\xd6\x29\x25\x92\x4a\x5d\xdc\x08\x98\x97\x22\x97\x2e\xa7\x91\x5a\xa8\xd3\x5f\x2b\x51\x96\xdd\xde\x3b\x24\xdd\x1f\xaf\x67\x29\x27\xe4\x6b\x0c\x72\xc2\x89\xdc\xb7\xe4\x3c\x8e\x08\x9a\xd2\xee\xae\x7d\x01\x5b\x70\xc2\xb2\xb4\xaa\x84\x17\x94\x85\x9c\x7d\xeb\x0b\x49\x07\x64\xe0\x54\x32\x69\xf2\x08\xe9\x0b\xc9\x61\x42\xf7\x23\xa3\x3d\x43\x6f\xa8\x9b\xf6\x92\xc1\x42\x92\x12\xe1\x24\x93\xcb\x1b\x95\x88\xbb\x17\xa4\x43\xd2\xfd\x71\x00\xb4\xeb\xb6\xe1\xf9\xe1\x01\xdb\x28\xc2\x3e\xd3\x8f\xa8\x07\x98\xd4\x7c\xf6\x8e\x8b\xf8\x24\x83\xe9\xcf\x58\x2b\x36\x3d\xe2\xee\xea\x0b\x24\x1d\x70\x7c\x3d\xb9\xc8\x6f\x7e\x29\x15\xc7\xba\xd7\xb2\x7c\x3b\x1f\x25\xed\x28\x89\x96\x22\xbc\x39\x7f\x49\xd6\xb8\xce\x30\x60\xfb\x46\x1b\xf7\x96\x01\x48\xba\xbb\x3a\x00\xa1\xad\x1b\xd2\x82\xe2\x6f\x0c\x78\xb9\x36\xa7\x8a\x9c\x95\x59\x31\xa9\x66\x5e\xe7\x5c\xc1\x7f\xe1\x47\xdd\x38\x93\x5c\x55\xdf\xb5\xd4\xd0\x54\xd3\x5d\x2e\xba\x5b\x44\x43\xd2\x01\xc7\x34\x9d\x2e\xb4\xf8\x72\xc0\xf3\x40\x92\xa7\xa5\x0f\x4a\x60\x37\x6a\x2b\x9f\x28\xa4\xe8\x88\x15\x5e\xc3\xa2\x22\xf7\x92\x16\xf5\xee\x89\xed\x90\x74\x40\x06\xde\x96\x74\xa7\x68\x4f\x64\x23\x3e\x13\x5d\x21\x7d\x5d\xc9\x45\xef\x55\xc0\x58\x27\x2f\xeb\x96\x13\xf5\x51\xad\x57\xb6\x24\x2e\xe0\xd6\x17\x92\x0e\x78\xbd\x88\x9d\x03\x97\xcd\x3f\xfd\x0b\xe3\x57\xf1\x28\x84\xab\x28\x65\x06\xf5\x70\x9a\xbf\x26\x45\x8f\x34\x76\x43\x61\x6a\x85\xd4\xa1\xdc\x6d\x28\x21\xe8\x80\xe3\x7b\x68\xdd\xaa\xc1\xa4\xd7\x8b\xdb\xa4\x26\xa9\x93\x33\xb5\xcc\xd7\xc5\xa7\x47\xa1\xa2\x7f\x5f\x9c\xfb\xbc\x7d\x06\xe9\x83\x6a\xcf\x2d\x03\x90\x74\x77\x75\x00\x42\x5b\x37\xa4\xd5\xdd\xdf\x18\xf8\xe8\x3a\xae\xda\xf9\xe9\x9a\x9a\x68\x27\xc7\xf5\x95\x92\x21\x81\xd9\xc3\x45\x65\x2a\x4e\x9c\xb4\xd5\x6d\xd1\x9b\xc5\x1e\xe8\xbb\x96\x5e\x48\x3a\xe0\x98\x9e\xd0\x31\xe6\x4c\xb0\x53\xe1\x18\x79\xcc\xa1\x4a\x2b\x19\x2e\xa5\x7d\xdc\x80\x96\xcf\xa8\x69\x34\x1c\x9b\x47\xe0\x99\x2c\xdc\xbb\x7b\x1e\x0f\x04\x1d\x90\x81\x04\xb6\x57\xa4\x7b\x41\xa6\x2f\xf6\xf2\xb5\xbe\x32\x49\xc2\x36\xe6\xec\x33\x74\xdd\x84\xee\x4e\xb6\xec\x67\xc0\x27\xcc\xf1\xc2\xdf\xfa\x42\xd2\xfd\xf1\x68\xaa\x2d\x26\x6b\xe6\x5d\xee\x93\x69\x73\xc1\xcf\xa9\x6f\xba\x7f\x60\xc6\xbd\xa9\x7a\x88\xe2\x60\x20\xb9\x80\xac\xbd\xbd\xde\xb4\x7f\xf7\x68\x2a\x08\xba\x3f\xde\x06\x60\x90\xec\xf1\x33\x77\x5f\xcd\x8c\xb9\x31\x15\xfe\x2d\xaa\x44\xed\x0e\xd7\x96\x47\x06\x0e\xb3\x2b\xe2\x50\xdf\xd5\x13\xed\xbb\x03\x20\x48\xba\xbb\x3a\x00\xa1\xad\x1b\xd2\x52\xfb\x6f\x0c\xe4\x8e\xa5\x20\xcf\x17\x92\x33\xc9\xf2\xf1\x85\x50\xbf\x59\x12\x6f\xd2\x34\xcf\x8c\x34\xc1\x95\x43\x7c\x16\xe2\x89\x0a\x6b\x99\x77\x7b\xef\x90\x74\xc0\x31\xed\x28\x4e\xea\xa4\x8b\x49\xb5\x2b\xa0\x6c\xfd\xc5\xf7\xc5\x79\xd7\x39\xea\x60\xa2\x13\x2a\x4f\x3c\xcb\x8e\x7b\x35\x69\xaf\xee\xd3\xad\x2f\x24\x1d\x90\x81\x2f\xdb\xb2\x94\xc8\x5f\x67\xe8\x26\x15\x68\xcf\xe4\x8a\x2e\x49\x2d\xe6\x8d\xc8\x27\xc6\xc3\x17\xf5\x77\xc9\x6a\x5f\x38\xa6\x71\xdf\xfa\x42\xd2\x01\xaf\xf7\xb4\x81\xb6\x31\x32\x05\xf6\x54\xd3\x2e\x36\x65\xd6\x2f\x9a\xd6\x65\x53\xe6\x2c\x2b\x90\x50\x9c\xe4\xe6\xc1\x70\x90\x64\xfb\xdd\x9b\x1b\x20\xe9\x80\xe3\x5b\x69\x69\x20\x5a\x9d\xc3\x24\x75\xd5\xf3\xd5\x4d\x69\xae\xc0\x81\xc2\x68\x74\x02\xf7\x3e\xdb\x51\x53\xe2\xe7\x6b\xc3\x3e\x7c\xc9\x5b\x06\x20\xe9\xee\xea\x00\x84\xb6\x6e\x48\xfb\x9e\xbf\x31\xb0\x5f\x8f\x36\xc2\x42\xf6\x23\xb8\xea\x1e\xe3\x29\x7f\xef\x3d\x2c\xd3\x25\x72\xc1\x30\x4c\xa1\xeb\xc1\xf7\x2a\xc3\x78\xa7\x9f\xef\x9e\x52\x0d\x49\x07\x1c\x53\x0d\x05\xbe\x61\x69\x55\x87\xcc\xd2\xe2\x81\xb6\x97\x13\xc6\xf7\x3e\x3d\xe2\xa6\xd8\x9c\x3f\x49\x40\x1b\x10\xf6\x1e\x8e\xee\x42\xbb\xf5\x85\xa4\x03\x32\xf0\x73\x89\x1f\x5d\x56\x8a\x02\xee\xf1\xa3\x25\x14\x86\x7b\x06\x8c\x01\x7d\xfa\x68\x0a\x9c\x0f\xb3\x58\x3a\x58\xd5\x61\xae\xf2\x54\x6f\x7d\x21\xe9\x80\xd7\x2b\xf1\xf1\xbd\x92\xa0\x77\xf8\x7d\xdc\x50\x49\xfd\x3e\x2e\xeb\x1e\x7d\x4f\x27\xc6\x06\x28\xbc\x51\xb8\xc6\x12\xde\xc0\x53\x3a\x85\x5b\x5f\x48\x3a\xe0\xf8\xc2\xa9\x51\xb4\x25\xba\xd7\x2c\x05\x7a\x4f\xaa\xa6\xd6\xcb\x89\x2a\xaa\xf1\xe6\xb4\xf8\x1c\x35\x73\xdf\x3c\xad\xe4\x5d\x9b\x35\xbd\x65\x00\x92\xee\xae\x0e\x40\x68\xeb\x86\xb4\x09\xfd\x6b\x28\xc8\x9c\xee\x3e\x58\xed\xff\x44\x15\x95\x1d\x45\x4b\xa5\x6f\xbf\xd1\x3a\x80\x77\xbd\x83\x62\x34\x5e\x89\x0d\x77\xd9\xe1\x11\xff\x5d\x28\x08\x41\x07\x1c\xd3\x42\x24\x57\x72\xe1\x0e\x4d\xba\x2b\x29\xf7\x4c\x7e\x52\xe2\xc0\x77\x43\xf7\x26\xa6\x3a\x15\xe5\x42\x42\x08\xa0\xea\xbd\xb9\xee\x9e\xda\x0f\x49\x07\x64\x80\x6d\xcd\xca\x52\x25\xe3\x43\x6d\x81\x39\x4d\xb0\xe1\xd9\x5e\xac\x75\x8b\x8e\x49\x50\x68\xb6\x18\x7f\x88\x01\x82\xdd\x85\xe7\x5d\x20\x04\x49\x07\xbc\x5e\x22\x38\x19\xeb\xbd\xa7\xea\x63\x28\xcc\x49\x99\x96\xbd\x54\x05\x63\x3a\x89\x4d\x92\xd3\x4d\x0d\xa5\x99\x42\x36\x9f\x37\xcc\xef\xfa\x43\x20\xe9\x80\xe3\xab\xed\xcb\x6b\x33\xaa\x8b\x54\xf4\x4b\x46\x3a\xe2\xcb\xaf\xd5\x14\x02\xd9\xc2\xb6\xb7\x59\xaa\xf6\x8a\x0e\xf4\xf1\xab\x56\x9b\x15\xb7\x0c\x40\xd2\xdd\xd5\x01\x48\x6d\xdd\x90\x1a\x06\xff\xd3\xd6\x2d\xfc\x67\x5b\xb7\x95\x95\x50\xb2\x33\xa1\xe1\x10\x59\x88\x8d\xc2\x49\x59\xaa\x16\x01\x81\xa0\x73\x5f\xd1\xaf\x4b\xc9\x29\x28\xec\x59\x2c\xed\x7f\xe1\x69\x07\xaf\xfe\xbb\x3f\xf4\x37\x4e\x9f\x1f\xe8\x04\xb5\x7d\x3d\x80\x1b\x5b\xe9\xf0\x94\x31\xfe\x76\x73\x56\x78\xf9\x65\x73\x8b\x2b\xcb\x20\xf2\xbd\x90\xa9\xcd\x23\xa8\xdb\xcf\x07\x92\x0e\xf8\xb9\x1f\xd8\xdb\xa1\x1d\x65\x2f\x67\x92\xe8\xe0\x1a\x7a\x3e\x6b\x74\x81\x0b\xcf\xd4\x9a\x2a\x50\x60\x96\xdf\x4e\xa0\x3f\x65\x5e\xbb\x7b\x5a\x3d\x24\x1d\x90\x53\x78\xd6\xa6\x88\x57\xcb\x27\x21\xdc\x99\x19\x8a\x07\x85\xc3\xc1\xb3\x51\x26\xbd\x78\x92\x36\xf5\x4b\x1d\x3b\x51\xdc\x34\xc1\x77\x4f\x7f\x87\xa4\x03\x5e\x6f\xa7\x72\x52\xfd\xa8\xb0\xf4\x5a\xec\xea\xd4\x4b\x7b\xd8\xef\x3a\xe3\x2f\x6b\x36\xf8\x2f\xf1\xcc\x0e\xa2\x1e\x3e\x69\x2a\xcd\xbf\x0b\x58\x20\xe9\xfe\xd8\x17\x7c\xf5\xaf\xf4\x90\x78\x71\x44\x97\x76\xef\xe0\xb5\xef\xdb\x8a\x6a\xad\x97\x74\xe5\x9d\x3d\xa2\x71\xc3\x59\xef\x1a\xdc\x66\xaf\x6f\x39\x85\xa4\xbb\xab\x55\x10\xda\xba\x21\xb5\x04\xff\xbd\xad\x3b\x9a\x76\xac\xc4\xf4\xeb\x27\xcc\xf8\xa6\x5f\xe4\x56\xe8\xe5\x0f\x6a\xac\x18\xa2\xcc\x25\xb5\x3e\x2b\x0b\xeb\x3c\x0f\x7a\x4b\x5b\x7c\xdb\x22\x0d\x49\xf7\x67\x5b\xf7\x82\x60\x84\x67\x8f\x4d\xdd\x47\x39\x54\x3e\x1c\xeb\xd6\xb9\x02\xad\x7e\xdf\x15\xf8\x8e\x72\x82\xbd\x66\x9d\x3d\xa5\xe1\x6b\xff\x5b\x67\x48\x3a\x1f\x71\x28\x98\x7f\x3a\x73\x3c\xb4\x9e\x16\xa8\x83\x93\x4f\xc6\x2c\x6d\x4d\x7d\x29\xfe\x65\x84\x0c\x3d\x39\x42\x33\x33\x2f\x5a\x7a\x61\xe5\x85\x78\x88\xcb\xad\x33\x24\x9d\x8f\x38\x14\x14\x14\xf4\x3f\x1a\xbb\xca\xbf\x04\x37\x9d\xeb\xcb\x05\x5e\x9a\xed\x84\xb7\xce\x27\xfc\x84\xc2\xf2\x16\x6b\x74\x19\x68\xc8\x6c\x95\x14\x9b\x35\xf9\xe1\x49\x06\xad\x02\x85\x66\x64\x6a\xf1\x90\xe7\xa1\xad\x93\xad\x9d\xa1\xe5\xef\xff\xcd\xf0\x9f\x49\xad\x74\xa8\x95\x6a\x70\xef\x95\x2b\x99\x5e\xfb\x38\xf1\x63\xbe\xb5\xdd\xcc\xd0\x00\x7c\x9b\xc4\x4d\xed\x44\x94\xd2\xb5\x96\x66\xcf\x07\xd0\x2a\x50\xb8\xff\xf9\x87\x76\x56\x36\xba\xc6\x86\x96\xba\x36\xe6\x86\x76\x7f\xf9\x5f\xa5\xff\x69\x23\x2f\xa8\xac\x2d\x84\xa6\xe6\xa6\x1e\x16\xca\x5f\xcb\x65\xe4\x48\x58\x87\x5e\xdf\x9c\xc9\xdc\x6d\xdf\x37\x7e\xd0\xbf\x03\xf3\x8a\x25\xf8\xb7\x9b\xb0\xe7\xf1\xf4\x3b\x8f\x68\x7d\xae\xe6\xd5\x66\xa7\xad\x2f\xa3\x56\xd9\xf4\x03\x6e\xf1\x45\xf8\x59\x2e\x4f\x80\x56\x31\x53\x8e\xc7\x6f\xd2\xed\x47\xdc\xfd\x96\x56\x99\xf1\x8d\xbe\xf9\xf8\x50\xec\x4e\x7e\xb6\xf1\xf6\x5a\xd5\xd3\x33\x91\xdf\xd3\x9a\x5d\x1f\x97\xfe\x08\xfb\x4d\x4a\x92\xb8\x15\x78\x61\x11\xc6\xac\xef\x06\x35\x38\x3e\x9b\xf8\xcd\xbc\xda\x95\x4f\x2d\xbf\xa3\x0a\xc1\xa1\x0e\x35\x23\x59\xe5\xf7\xe6\x74\xa2\x6b\xb3\x7e\xdd\x8c\x0c\x73\x34\x5e\x41\x19\x81\xd0\x6c\x59\x2f\xa6\x1f\xbd\x9f\x94\x3d\x9f\x85\x27\x3a\x8e\x23\xa9\x04\xfd\x9e\x06\xcc\x1e\x5c\xb6\x46\x6f\x4b\x0f\xee\xbf\x3d\xf0\x4a\x55\x77\xea\xb7\x80\x39\x1c\x79\xd7\xa5\xe0\x69\x10\xf5\x5a\x4d\x1b\xab\xae\x82\x18\xe1\xf7\x7a\x8a\xfd\x88\xac\x03\xb7\x03\xb7\x2a\xb5\x0a\x23\x20\xf4\x19\xbb\x81\x47\x3e\x54\xf9\x7a\x37\x4c\x5c\x1c\x6e\x9b\x99\x12\x14\x62\x10\x95\xb0\xb0\x70\x10\xf4\x7f\x37\x0a\xef\xe1\x61\x88\x11\x84\x7d\xc4\x61\xff\xe7\x4b\xf4\xdb\xdf\x40\x9b\x2a\x8f\xaa\x80\x49\xa9\x68\xc1\x40\x23\x7d\xa2\xc4\x72\x4f\x62\x72\x63\x84\xaa\xb5\x6e\x62\xbc\xc5\x58\x80\x84\x08\x89\xe9\x37\xa9\x48\xcc\x39\x46\xd4\xf1\x1b\x77\xb3\x27\xcf\x4e\x5e\xcd\xb7\x11\xcf\x3c\x64\xb4\xbf\x2f\x15\xa7\xa2\x6f\xc3\xa9\x31\x46\xfb\xb1\xd6\x33\x0c\xf5\xbf\xf3\xf4\x11\xbf\xb9\xb9\xb9\x89\xa3\xfa\xcd\xdb\xe7\x52\xf7\x7d\x29\xba\xd9\x5c\x07\x0a\x8a\x4a\xcb\xde\xd7\xfc\xae\x01\xd8\xfc\x97\xe5\xd7\xe9\x25\x30\x2d\xa4\x83\x92\x05\xb8\xbf\x1f\xbe\x10\x88\xa9\x6f\x7a\x88\x0e\x3c\xf3\xc8\xba\x90\x49\xbe\x2c\x3f\x5c\x7a\x91\x68\xa8\x8a\x9a\x4d\xcb\x5e\xee\xa1\x02\x8b\xa0\xf3\x7b\x1b\x31\x46\x38\xcb\x61\x2d\x5f\x7b\x62\x67\x1b\x66\xef\xab\xed\x81\x7b\xe5\xfb\xe5\xe5\x75\x05\x44\xfd\xa2\x63\xce\x6c\x91\xce\xdf\x7e\x9f\x1e\xb8\xcb\x36\x4e\xdd\x3e\x44\xda\x58\x4f\x32\xb8\x6c\xf6\xe6\x95\x99\xa9\x37\x19\xb9\xf8\x32\x34\x9e\xcd\x84\x2d\x97\x6d\xb7\xff\x1e\x23\xda\x89\xf9\x59\x99\x54\xb4\x2f\x36\x43\x51\xd5\x2b\xf5\xcd\x48\x59\xda\x8c\x0b\x9f\xb5\x44\x2e\xb9\xbd\xeb\xb0\x7f\x76\x38\xf3\xfb\x66\x9e\x9c\xaa\xda\x53\xc9\xbf\x35\xdc\xd2\xf8\x54\xf2\xe0\x04\xfa\x5e\x74\x0b\xf7\xfb\xa6\x11\xc6\x27\x0f\xbb\xf4\xf5\x58\x1b\x7e\xfc\x26\xad\xf7\x18\xfc\xce\xa2\x06\xa3\xd5\x08\xcb\x7b\x51\x2d\x72\x05\xd7\xad\xdb\xae\x65\x15\x30\xf2\x6b\xfc\x53\x5e\x78\xc2\xe3\x67\xbf\x3f\xd7\xa5\xd0\xe1\xeb\x08\xb4\x3e\xa9\x1f\x9d\xfb\x88\x8e\x39\x7b\x72\x41\xcb\x13\x52\xb9\xfc\xe7\x04\x56\x65\xe5\x6f\x98\x30\xa6\x16\x18\x7f\x93\x9a\x47\xe0\xcf\xd1\x69\xe9\x52\xd0\x54\x39\xc0\x3e\x54\xb2\x55\xaf\xa8\xb4\xee\x38\xac\xf0\x40\x14\xbf\xc8\xf3\xc8\x13\x46\x1f\xf9\x4d\x3a\xa0\x2e\x55\xdc\x64\x4b\xe3\xdf\x28\xa9\x54\xdf\xbd\xa2\x12\x8f\xe0\x84\xb2\x14\x5e\x21\xf8\xd5\x83\xeb\xfd\xd9\xe6\x68\x3a\xf9\x6f\x52\xc3\x2b\x31\x89\xe2\x58\x69\x2b\xbd\x19\x64\x9b\xd3\x99\xa0\x65\x6f\x71\x12\x77\xbd\xd2\x8b\x32\xe9\x54\xdc\x88\xba\xb2\xbc\x96\xdf\xa4\x7c\x68\xbc\x57\x91\x0e\xaf\x2e\x0b\x92\x55\xe5\xe6\x7a\x68\xa9\xcb\xc4\x5f\x68\x0f\x2f\xc9\xbe\x52\xc4\x2a\xc0\x2b\xc7\x91\xc7\xfa\x4d\x6a\x52\xc3\x4b\xda\x55\x90\x18\x6c\xdc\xde\xa5\xe2\xf2\x9c\x90\xa0\x95\x73\xff\xde\xd0\xbc\x6f\x36\xbc\x95\x6f\x7e\xd5\xbb\x07\xc4\xbf\x8f\xeb\x9b\x17\xd3\x5f\xd5\x2d\x10\xb5\x34\x25\x61\x9d\xf2\xd6\xd6\xb9\x94\xe6\x66\x86\x9e\x89\xda\x76\x6e\x36\x66\xbf\x7b\xe9\xfc\xf8\xf7\xbe\xdd\xa7\x9b\xa7\xb4\x62\x1e\x0b\xcf\x25\x66\xfd\x0a\x54\x7e\x2c\xa0\x53\x68\x73\x48\x9d\xec\x57\x7c\xa0\x0f\x63\x38\x35\xb4\xf8\xfd\xe9\xef\x1b\x66\xbc\x26\x27\x99\x2e\x8a\xf4\x54\x36\x4f\xb5\xbe\xb6\x37\xbc\x11\x3b\x3d\xe1\xfb\x64\x4e\x9e\x00\x35\x59\x53\xda\xd9\xf1\xe4\x37\xe9\x7b\xe6\xcf\xf6\xcd\x4f\xad\xab\xed\x0e\xbd\xf4\x58\xc6\x16\x5e\xfb\x61\x71\xde\x3c\x1c\xf6\xfc\x22\x87\x7e\x39\xbe\x54\x6b\x96\xfe\x9b\xf4\x71\x5e\xff\xb6\x86\x63\x70\xf9\xcd\xfb\xb2\xef\xf9\x1e\x5b\x04\xc3\xef\xdc\x6f\xbe\x7b\xce\x5f\xe3\xb8\x1c\x4f\xf6\xda\x38\x73\xfe\x7e\x0e\x5a\x86\xf5\x5c\xb9\x9d\x0c\xa3\x6c\x64\x20\x4e\x49\xb1\x60\x5d\x97\xb2\x2a\x23\x5c\x1c\x61\x7a\xae\x7b\xb5\x3d\x85\xff\x81\xc4\x6f\x52\xd5\xf8\xe4\x7c\xa5\x12\x34\x07\x71\x45\x51\x2b\x8d\x1d\x8f\x0d\x8d\x1c\xe8\x0f\xba\x91\xf8\x7b\x9f\x15\x4e\x25\xce\x6b\x9c\x69\x7e\x3f\xb9\x4f\x7b\x2a\x40\x14\x5a\xb3\x1c\xa9\x67\x64\x39\x3f\x10\xe7\xd3\xfb\x62\x4f\x53\x9d\x39\xd7\x26\x66\x3c\x5a\x35\x89\x2c\xda\xfa\x37\xa9\x16\xf6\xc2\x7d\xb9\xb3\xdd\x9d\x3d\xb3\xbc\xb4\x8c\x95\x8f\x87\x07\x7b\x97\xbf\xaa\xe7\xe9\x78\x52\x32\x3b\x3c\xbc\x31\x83\xed\x7e\x93\xbe\x39\x6c\xd7\xe0\x55\x8d\xfc\xb6\x6d\x6f\x32\x5c\xf4\xaa\xd7\x2f\x6d\xbd\xf3\x63\x77\x38\xc7\xb0\xf0\x5b\xa8\x6f\x9b\x0f\x43\x7f\xff\x6e\x8d\xf5\x1d\x6e\xf3\x97\xc5\xbd\xc8\x8a\xe2\x13\x30\x74\xbc\xce\x9b\xce\xdc\x31\xee\x10\x60\x25\x24\x47\x43\xd1\x65\x2b\xf4\x6f\xfa\x4d\xba\x4e\x94\xc1\x37\xd3\x4d\x62\xe1\x88\x3a\xc4\x01\xad\x5b\x5d\xfd\xda\x69\xf1\xe6\xa4\x08\x5a\x03\xa6\x87\x3b\xea\xec\xd9\xdc\xef\x3f\x6c\xa1\xdb\x95\xe2\x71\x96\xb6\x9e\xb0\xb5\xed\x62\xe9\x61\x63\x4b\xfa\xd6\xe7\x4e\x26\x1e\x2c\x1f\x7b\xb2\x0c\xb3\x63\x6a\x6a\xce\xf0\x9b\x54\xa5\xb2\x2f\xf2\xca\x1e\x4b\xeb\x86\x27\xb5\x7b\x4f\x35\x32\x2b\xb1\xbe\x30\x79\x4a\x63\xe8\xa3\xed\x2f\xbb\x8b\x3d\xff\xfa\xde\xdf\xa4\xf7\x02\xec\x73\x3a\x91\x1f\xfa\x3e\x0c\xec\x19\xa5\x8b\xce\x86\xff\xd0\x28\x17\x83\x17\x15\xc1\xd7\xc0\xdb\x74\xcf\x4a\x62\xeb\xe0\x37\xe9\xf8\xdc\x69\x51\x2c\xb3\x4e\x28\x65\x7e\xf3\xf0\x0f\xc3\x4d\xbd\xaa\x62\x7b\x0e\x57\xb4\xc5\x39\xc9\xb4\x17\x7d\xcd\x11\xfd\xea\xbf\x49\x2f\x4f\xcb\xd2\x2d\x2b\xf6\xc7\x34\x84\xc5\xfc\x4f\xea\xe0\x54\x1a\x0c\xbe\xae\xb9\x49\x2a\xa4\x21\x7e\x6e\xd4\x17\x0f\x12\xfa\xfd\xc9\x58\xa5\x53\x46\xe8\xf7\xfc\x32\x90\x83\xd0\x57\x50\x4a\xa8\xca\xc4\x9b\x96\x5a\x4d\x93\x92\x8f\x91\x3b\x2a\x36\xae\x4b\x4c\x3e\xff\x3e\x9d\x49\xec\xa4\xd5\x3a\xe8\x08\x37\xe8\x7d\x7e\xe5\x52\x18\xa8\x60\x1e\xf4\x92\x40\x96\x96\x78\x74\xa7\x9b\x95\x08\x5a\x67\xed\xa6\xc2\x73\x1d\xfb\xbf\xab\xae\xff\x5b\x90\x3d\xe3\xa8\xfe\x67\x5e\x65\x84\x82\xf6\x5a\x81\x8d\xa0\xa2\xe2\xbc\x88\xd3\x5b\xc0\xc3\x6d\x33\xeb\x20\x9b\xfa\x41\x48\x6d\x93\x56\x3a\x95\xb2\xdf\xc1\x1f\x72\x13\xb4\x49\x73\xf8\x6b\x89\x95\x84\x0a\x0a\x0a\xea\x58\x14\xca\x40\x0c\x6a\x0b\x51\x97\x0d\x8a\x04\x8a\x30\x07\x5b\x58\x58\xf8\x1f\x26\xde\x27\x72\xe2\xdc\xa1\x64\x69\xae\x1e\x6f\x08\xa7\xe1\x0d\xc6\x5e\xad\x90\xfd\xfa\xd9\xc0\x6d\xfc\x0d\xd5\x35\x67\x0f\xe3\x86\xfb\x9f\x26\xec\x7f\x37\xa1\x08\xe6\x57\x28\x67\x1e\x2e\x8a\xb3\x17\xb7\xcd\x0d\x71\xb3\x2f\xe5\x5b\x95\x7a\x78\x7e\xa5\x35\xe3\xeb\xe4\x48\xd1\xa6\x06\xf7\x4f\x13\x8e\xbf\x9b\x50\x2d\xa6\xce\x77\x3e\xc5\x9c\x23\x4a\xa2\x12\x60\xf9\x6c\xbf\xb5\xc2\x02\xfb\x04\x36\x98\xcd\xf5\xc2\x4f\x59\xd1\xf1\xbb\x12\xca\x3f\x4d\x38\xff\x6e\xf2\x31\xc4\xab\x15\x37\xe1\x13\x8e\x6b\xde\xce\x8a\x7b\x6b\xe9\x14\x7f\xfb\x7c\x13\x53\xe9\xa2\x7c\xee\x10\x31\xd5\x68\x89\x10\xd5\x3f\x4d\xb8\xfe\x6e\xa2\x59\xc2\x5a\xc0\x75\x9a\xe4\xbb\xea\x90\x5b\x97\xab\x67\x89\x11\x9c\xa1\xaa\xf1\x61\xb5\xfd\x3b\x4c\x76\x35\x6f\x0d\xaa\x0d\xe2\x3f\x4d\xb8\xff\x6e\xf2\x82\xc0\x4d\xea\x11\x61\xe5\xdb\x11\xa1\xe2\xac\x97\x11\x45\x81\x43\x1a\x02\x0f\xed\x69\x8c\x13\x25\xc7\xde\x3e\x3c\xff\xc8\xf2\xe0\x9f\x26\x3c\x7f\x37\x61\x3f\xcf\x21\x6e\xf0\xf5\x31\xc1\xda\x78\x4b\x5b\xd4\x04\x3f\xff\x0a\x8d\x98\xa9\x4d\xa4\x71\xae\x59\xba\x79\x4f\xae\xcf\x9a\xe8\x9f\x26\xbc\x7f\x37\x99\x27\xc4\xad\x88\xad\x5a\xa2\xa4\xb9\x92\xec\x17\x2f\x1d\xfb\x36\x68\x74\x2f\x5c\xdd\xd4\xed\x14\x29\xac\x93\x2a\x6b\x30\x8e\xed\x9f\x26\x7c\x7f\x37\x41\x7a\x9f\xae\x9c\xf0\xe3\x70\x89\x7e\x2b\xc6\xbc\xbb\xcb\x75\x39\x26\xe2\xa6\x12\xd6\xd7\x90\xb3\xf3\xb2\xab\xe7\x17\x8e\x3b\xcd\x3f\x4d\xf8\xff\x6e\x42\xeb\xd6\xd2\xe9\x62\x6c\xdb\x83\x83\xb7\x4f\x6c\x65\x65\x44\xd2\xea\x99\x34\xcd\xb6\x43\x37\x4b\xf4\xee\xf3\x7b\xb9\xf1\x34\xb4\x7f\x98\xe8\xb1\x83\x20\x8b\xe7\x16\xe3\xf3\x2b\xc2\x25\x46\xab\x2f\x46\xc6\x11\xe6\xfd\x85\xe0\x1b\x56\xad\x7a\xe3\x66\xf3\xb1\xc0\x45\xe9\xe7\xbe\xf6\x02\x00\x17\x10\x66\x5d\xe5\xfb\xbd\x9f\x48\x19\xf8\x07\x38\x0e\x65\x26\xae\x3e\x20\x68\x2c\xd4\xb7\x57\x55\xd4\xb0\xab\x57\xed\x15\x44\x46\x70\x80\x05\xb8\x80\x40\xeb\xb2\xd4\x36\x17\x5b\xde\x53\x26\x83\xe1\xef\xba\xcf\xe8\x62\x80\xb1\x94\x72\xd3\xf7\x29\x26\x31\xdb\x36\x63\xc6\xbf\xe6\x21\x05\xc0\x05\x84\xda\xeb\x5c\x5d\x3d\x23\x74\x12\x12\xbc\xba\xcd\x2f\x16\x85\x97\xb3\xa9\xa3\x95\x04\x30\x1b\x06\x39\x2b\x31\x5d\x43\x08\x8d\x4e\x58\x00\x17\x10\x6c\xfb\x89\x28\x73\x1e\xd4\x88\xbd\x24\x08\xa3\xff\x65\x9a\x2f\x24\x90\x95\xee\xaa\x46\x16\xee\x95\xc6\xc0\x3c\xae\x03\x95\x17\x8f\x03\x70\x01\xe1\x56\xfe\xd9\x96\xc6\x4b\x49\xe4\xf6\x9f\xd7\x4c\x73\x9b\x32\x56\xeb\x7b\xa9\x11\xf0\x7d\xd5\x21\x99\x17\x6a\xfc\x3c\xaf\xfb\xb3\x39\x01\x2e\x20\xe0\xc6\x6c\x30\xd7\x04\x74\x3d\x37\x1c\x3f\x3a\xb7\xc2\xe2\x8b\x8f\xab\xe7\xb5\x3a\x3b\x5e\xc4\x51\xff\x56\xd0\x68\xc5\xac\xea\x0c\x03\x70\x01\x21\x17\xc3\x05\x7a\x5f\xc9\x65\x8b\xa9\xca\x31\x1a\x85\x6a\xf2\x73\xb7\x89\x35\x35\x69\x4c\x36\x07\xad\x5c\x75\xfb\xbc\x35\xbb\x1a\x19\xc0\x05\x04\x5d\x56\x47\x66\x15\x55\x15\xf4\xdd\xe7\x18\xd4\x76\xe6\x0c\x70\xda\x88\xac\xa6\x83\x32\xdf\xcc\x1c\x04\x9d\x9a\x96\x9f\x09\x90\x40\x01\x5c\x40\xd8\x1d\xf3\x56\x89\x49\x5e\x55\x96\xda\x62\xdc\x55\x16\x0e\x64\x10\x40\x56\x4a\x0a\xb9\x21\xd4\xc6\x7f\x88\xda\xc7\xc4\x3d\x9b\x44\xfd\x4f\x17\x0e\x10\x76\x69\x3c\x3e\xab\x41\x25\x5b\xd4\x6b\xe7\x9f\x04\x62\x52\xe3\xd8\xce\xab\x79\xd5\x26\xc3\x85\x68\xb2\xbe\xf2\xf7\x44\x6c\x87\x82\x03\xb8\x80\xb0\x6b\x15\x8c\x26\x16\xbf\xbd\xf6\xde\x7b\xe5\x1e\x9f\x13\xf6\xc9\xd1\x25\xcf\xb7\x36\x7b\x1d\xfe\x56\x5c\xa2\x0b\x59\x2a\x51\x07\x1a\x80\x0b\x08\xbb\x1e\x4e\xdf\x91\x5f\xbe\xd7\xab\x2c\x72\x16\x7d\x23\xee\x28\x13\xa2\x86\x16\xfb\x31\x9a\xc1\xf6\xb8\x5f\x7b\x35\xe0\x86\x0b\x4e\x08\xe0\x02\xc2\xae\x60\x56\x27\x2c\x2e\x0c\x66\x1d\x6a\xef\x4c\x40\x3f\x34\xf7\x3b\x4b\x37\xfe\x71\x0c\x34\xe2\xe6\x65\x86\x8a\xed\xad\x53\x28\x7a\x80\x0b\x08\xbb\x9d\x57\xdb\x64\x4c\x41\xa5\x34\x41\x31\x26\x65\xd2\x88\x9e\x39\x4c\xbc\x23\xb6\x0c\x32\x0a\x6c\x62\x2a\x3b\x92\xf9\x66\x41\xe4\x00\x17\x10\x76\xbb\x2f\xa7\x8b\xaf\x97\x57\x87\x24\x74\x5c\xf4\x2f\xb5\x64\xe3\x94\x71\x60\xc8\x9f\xcb\x47\xc4\x34\xb2\x86\x7d\x61\x83\x5e\x15\x04\xb8\x80\xb0\xcb\x86\xfb\x4b\xbd\xd7\xbf\xcc\x80\xbb\x8c\xce\xcd\x6f\x9f\x36\x29\xc4\x63\xc7\x0c\x29\xae\x34\x9a\xfe\xcd\x16\xd5\xb1\xde\x53\x0c\x80\x0b\x08\xbb\x7b\xaf\xb5\xcf\x90\xde\x2a\xbd\xa8\x1f\x58\xbd\x56\x2f\x51\x66\xfc\x06\x1b\xdb\x43\xf5\x68\xd8\xf0\xf5\x62\x13\x74\x65\x76\x3b\x3c\xc0\x05\x84\x5d\x82\x51\x7d\x7e\x9d\xc4\x97\x4c\x72\x66\xba\x8f\x8a\xe0\xe6\xf1\x2d\xfd\xcb\x99\x47\x73\x27\xee\xe1\x4d\x0e\xbd\xd5\xd0\xdf\x07\x54\x29\x0e\x10\x76\x25\xed\x5f\x62\x75\x95\x1b\xbd\xe1\xd9\x41\xac\xfe\x89\x77\x6a\x66\xa7\xc5\xd9\x4d\x3c\x19\x1c\xdb\xac\x94\x0d\xc7\xeb\x76\x40\xfa\x4f\x17\x4e\x10\x76\x35\x9b\x5d\x57\x09\x25\xd5\x0d\x5b\xc3\xda\xa2\x4c\x42\x8c\x7c\x29\x70\xe0\xcc\x37\x29\xbd\x27\x60\x55\xec\x60\xae\x0c\x3e\x3d\x06\xb8\xfc\x7f\xec\x1e\x62\xff\x77\x3b\xc3\xbf\x2f\x73\xf8\x74\x26\x56\x53\x75\xe2\xc2\x63\x93\x6c\x07\xf1\xfb\x33\x04\xc5\xd3\x82\x89\xc4\xf1\x76\xa6\xbc\xb3\xd2\x0d\xaf\x52\x86\x09\x00\x7f\x16\x04\xf6\x14\x9c\x50\x7a\x98\x8b\x5d\x9a\xd7\x50\x5a\x9f\x91\x9d\xcd\x79\x8a\xaf\x71\xe7\x85\xc4\xf5\x33\x1f\x07\xdb\x96\x87\xbe\x14\xc1\x04\xb8\x80\xc0\xfe\xfe\xd5\x3a\xe9\xd8\x5e\xf4\xdb\xd8\xfb\xaf\x4f\x3b\x56\x94\xa5\xc8\x2e\x1a\x25\x24\x12\x1c\xed\x0e\x22\xf5\x53\x0e\x13\xef\x3d\x02\xb8\x80\xc0\x7e\xfd\x73\xda\x20\x26\x60\xce\x5d\x8f\x14\x3f\xa7\x22\x16\x96\x80\x82\xbf\xc0\xae\xc5\xb8\xe5\xac\x04\x95\xf9\x81\x4c\xdb\x15\x60\x02\xe3\x04\x81\xfd\x55\x8d\x4c\xbc\x9f\xb3\x8c\x0d\xd6\x0c\x57\x85\x04\xf1\xe6\x42\xa6\xf9\x80\x65\x8b\x28\xd6\x75\x3a\x4b\x5f\x26\x8a\x07\x0a\x60\x32\xe5\x04\x81\xbd\xea\x19\x4f\x56\xe3\x44\xac\xc0\x46\xe9\x92\xce\x52\xab\x4f\xf1\x71\x0d\x1d\x36\x07\xcb\x04\x5e\x24\xc9\x0c\xdf\x31\xdc\x3b\x46\x80\x0b\x08\xec\x24\xe7\x6c\x1b\xda\xd1\xbe\x22\x21\x9a\x98\x29\xc5\xc4\xbd\xd3\xf5\x24\x3c\x84\xbf\xd8\xd6\xef\x49\x13\x64\xd7\xce\xef\x2b\x30\x03\x5c\x40\x60\x8f\xeb\xf1\xbe\xf4\x13\xb5\xb6\xfe\x6e\xf1\x78\x7a\x61\x4a\xab\x31\xcb\x1f\xbe\x34\x01\x5f\x47\x8e\x8c\x26\x9b\x2e\xb7\xf3\x10\x17\xe0\x02\x02\xbb\xf0\xa9\xd7\xf0\xde\x88\xa8\x61\x15\x2b\x65\x9b\x6e\x86\x38\x81\xdc\x29\x9a\xde\x7e\xf3\xf7\x45\x78\x0c\x95\xb0\xea\x64\x43\x40\xa1\xe6\x02\x81\xfd\xc8\xf3\xd4\xd4\xa8\x95\xf1\x93\xb7\x8d\xc9\x12\xa6\x42\x9f\x4d\xa5\x6d\xb9\x05\x6f\x6f\xe4\x7c\x6f\x43\x45\xa3\xbb\x13\x0d\xa0\x20\x71\x81\x14\x6a\x47\x8c\x79\x4c\x62\x84\xce\xc1\x82\xee\xd1\x73\xd4\xaa\x9e\xf8\x26\xbf\x53\x07\x23\xc6\xd9\x01\xa4\x92\x91\x1e\x7e\xc4\x72\xc0\x1d\x71\x81\xb0\xeb\x69\x45\xb3\x41\x84\xa2\x86\x8e\xc4\x7f\xb2\x12\x9e\xc4\xa8\xda\xda\x3a\xb0\x78\x4f\xfe\xf8\x92\x5f\xfe\x82\x55\x14\x47\x08\xc0\x0b\x17\x08\xbb\x3b\x36\xd6\xed\x54\xca\x5d\xa5\x94\xb4\x9c\xce\xc9\x25\xc1\x45\x32\xa5\x1e\x1e\x6f\x4d\x76\xbf\xcc\x93\x67\x6f\xf4\xf2\x09\x03\x8a\x00\x17\x08\xbb\x8d\x09\x84\x28\xd9\x5c\x1d\x75\xb2\xd3\xe6\xaf\xad\x69\x94\xb8\x0c\xda\x08\xcb\x69\xaf\x6f\x36\x48\x22\x22\xc9\x43\x9e\xd6\x12\x01\x5c\x40\xd8\x85\x62\xef\x1b\x08\xe4\xf7\x51\xe6\x42\x4e\x27\x50\xa5\x64\x42\xc0\x64\xd4\xdb\xd0\x29\x66\xfe\x15\x29\x91\xfd\x9c\xbf\x4f\x85\x15\xe0\x02\xc2\xae\x4c\x74\xcb\x57\x7f\x3c\x9c\x9b\x79\x57\xd9\x72\x2a\xb1\x1c\xfc\x70\x82\x5f\xab\x11\x59\x43\x1d\x72\xef\x0d\xfd\x71\x72\xab\x00\x8b\x2f\x2e\x10\x76\xf7\xfd\xa4\x4e\x5d\xf3\x48\xa8\xb1\x14\xc4\xe0\xe1\x4b\x42\xcf\xae\x8e\x69\x59\xbe\xac\x87\x9d\xae\x52\x51\x6f\xe5\xce\xa5\x00\xaf\x05\x84\xdd\xd9\xde\x54\x8b\x96\x89\x10\xdf\x7a\x8c\xf0\xcb\x59\x72\xbf\xc3\xaf\x51\x89\x24\x0a\xd0\xa7\x37\xcd\x6c\x71\xa6\xaf\x95\xe2\xb9\x00\x2e\x20\xec\xa6\x8f\x7f\xcb\xd6\x61\xa6\x6f\x1a\xb7\xe7\xb9\x74\x1b\x11\x6c\xab\x3c\x1a\xe4\xf9\x7e\xd9\x35\x39\x3f\x38\x96\x94\xbf\xa9\x06\xa0\x8e\x1b\x84\x5d\xba\xef\x30\x6a\x58\xef\xe0\xd9\x8d\xf1\x5e\x76\xf5\x13\x19\xca\x42\xa7\x8e\x2f\x9b\x41\x2d\xd8\xf8\x04\xbc\x8a\x41\x7a\x4b\x00\x98\x7a\xb8\x41\xd8\xed\xa6\x5e\xd9\xf6\x0f\xe4\x90\x2b\x4c\x44\x22\xf0\x7d\x44\x85\xf9\xe0\x21\x8c\xd1\xaa\xce\xdb\xad\x8a\x94\x3a\xa2\x95\xd7\x6a\x24\x00\x17\x10\x76\x4b\x59\xa8\x05\x85\x13\xa7\x4d\x64\x3c\xe6\xd4\x77\xa5\x2b\xfa\xa7\x2f\xb0\x62\x7e\x50\x94\xf2\x57\x09\x6b\x93\xa3\x4d\xad\xf0\x00\x5c\x40\xd8\xb5\x5e\xb0\x70\x2d\x62\x0a\x12\xbb\x16\x16\x6d\x40\x62\x3a\x47\xea\x27\x15\xe3\x2b\x30\x63\xdf\x1e\x5b\xc3\x47\x42\xe0\xd4\x42\x06\xb8\x80\xb0\x4b\xa2\x8b\x4c\xfb\xbe\x94\x98\xfd\xf5\x5e\xf2\x3a\x8c\xba\x9a\xf2\xfd\x19\xc1\xc9\x38\x8b\xcb\x48\xa5\x2b\xc4\xfd\xe2\xb4\x5f\x54\x00\x17\x10\x76\x23\xd9\x8f\x8c\x90\x4d\x3e\x5d\x64\x6f\x2f\xd5\x31\x84\x25\x3e\xab\xf7\x8d\xe3\x7a\x7e\xba\xbd\x3f\x0d\xb5\x8a\x82\x60\x5d\x08\x98\x03\xb8\x41\xd8\x65\xfa\xdc\x7a\x69\x4a\x85\x3c\x2e\x5b\xb3\xda\x49\xa6\x7b\xde\x45\xf6\x11\x2f\xe7\x68\x7c\xfb\x2c\xe7\x4d\x92\xf4\xd7\x57\x27\x80\x25\x3f\x37\x08\xbb\xda\x82\x09\x30\xad\x42\x55\x16\xeb\xc3\x83\x78\x56\xb1\xe6\x17\xb3\xe6\xc8\xb6\x93\x8e\xb4\x1a\x1c\x1f\x93\x43\x45\x84\x0b\x00\x73\x00\x37\xd8\x02\x99\xe5\xbd\xdb\x3b\x81\xd8\xd9\xca\x6c\x47\xf6\xde\x10\x4a\x8c\x52\x45\x1c\x59\x11\xa1\xf1\x4b\x07\xc6\xad\x7b\xe1\x31\xf8\x80\x8a\xc9\x0d\xc2\x6e\x1f\x72\xd1\xc5\xd1\x1a\xfd\x52\x31\xf7\x04\xd9\xa8\xf8\x42\x8a\xfb\xa9\xd5\xcf\x86\xe6\x5d\x1e\x61\x3e\xd6\xac\xc5\x67\x43\x80\xfa\xc2\x03\xc2\xee\x4f\xc9\x59\xff\x69\x52\x78\x6d\xf8\x31\xb5\xf3\x57\x2f\x0c\x26\xd1\x88\xa5\x1c\x29\xbb\x14\x45\x0f\xf9\x47\xb8\x05\xa0\xc4\xd9\x01\x2e\x20\xec\x52\xbd\x41\xd5\x2d\x71\xee\x23\x7c\x84\x24\xe3\x26\xa9\x42\xfe\x18\xfa\x93\x41\x6f\xfb\x88\xa1\x44\xf7\xc3\x95\xc8\xdd\x0d\x72\x5e\x80\x0b\x08\xbb\x1b\x14\x6f\x8e\xfc\x5b\x25\x13\xba\x1c\xde\x2e\x56\x88\x9a\xb4\xed\x7c\x54\xec\xdf\x93\xdf\x5e\xe0\xff\xd2\x30\x44\xf3\xce\x8c\x09\xe0\xc2\xf9\xc7\x82\x07\xd2\xf9\xf6\xdf\x17\x3c\xd0\xb4\x18\x95\x3e\x37\xfb\x3b\xf7\xc2\xa4\x4b\x14\x54\x3e\xda\x8c\xda\xaa\xa1\x10\x62\x8e\x35\x26\x4c\x89\x0c\x7e\xbc\xe7\x0e\xf8\x38\x78\x40\x60\xe7\x73\x44\xd4\xcc\x71\xcd\xca\x95\x2b\x82\x3d\x46\x94\xf1\xd5\x5b\x68\xca\x76\x1f\xca\xcb\xb9\x0a\x88\x91\xfc\x32\xdb\xd8\xfe\x00\xe0\x02\x02\xfb\x4f\x11\xe6\xa8\x42\x32\xe6\xb1\x2d\x2d\xe7\xe0\x52\xa7\x9a\x5f\x45\x53\xb1\x70\xd3\x91\x58\x82\x66\x87\x3a\xe1\xfc\x0d\xb1\x80\xb5\x30\x0f\xd8\x31\xc6\xeb\xee\x72\x46\x6e\x85\xd7\x02\xf5\xbb\x4c\x9f\xea\x51\xd9\xb4\xfb\xaf\xe9\x28\x2d\x36\xa0\xd6\x52\x9e\x97\x7f\xfb\xf9\xe6\x3e\xc0\x05\x04\x76\x74\x56\x4f\x51\x4e\x27\x4e\x6d\x37\x54\x66\x5a\x2e\xa1\x8e\x85\x11\x25\x6c\x58\x73\xcb\xf7\xda\xb1\x38\xd3\x4b\xf7\xd4\x96\x58\x00\x2e\x20\xb0\xd3\x9a\xd2\x8d\x2a\x60\xce\x18\x49\x0b\xe5\x57\xbd\x5f\xeb\x7b\xb8\xec\x66\x8d\xbb\xdb\xb1\x87\xda\x44\xf3\x10\xea\x93\xfa\x5b\xc0\xfe\x96\x07\x04\xf6\x29\x28\x7f\xa1\x52\x4c\xf5\xf9\xd3\x24\x43\x96\x92\x80\x28\xd5\x3d\xdf\x9a\x74\x2d\xb5\x11\xec\xfd\x77\xf8\xa8\xce\x3f\xb4\x00\xcb\x49\x5e\x10\xd8\xa1\xdb\x94\x06\xf3\x5a\x8d\x78\x7c\x0a\x0b\xb1\xd0\x7d\xea\x2d\xe9\xba\x61\xa2\x1e\xac\x4d\x9f\x32\xd4\xcc\xde\x23\xf0\x23\x64\x03\xb8\x80\xc0\x6e\x68\x3f\x49\x17\x1d\x9a\xe0\xed\x9c\xc0\x47\x8c\xfa\xe1\x3e\x47\xac\xe4\x22\x25\xbe\xf7\x67\xa4\xc5\xa1\xa3\xb4\xd7\x04\x3e\x80\x71\xe1\x05\xdb\x0d\x92\xeb\x58\x47\x56\xf9\x8f\xda\xad\xb3\x21\x1e\xa0\x3a\x2e\x77\x7c\x4a\x55\xbb\x6f\x3f\xc8\xba\xac\xa6\xa7\x34\xff\xc1\x16\x1f\xe0\x02\x52\xa8\x45\x62\xb6\x43\xe5\x29\x5d\x5e\x1f\x98\xed\x9d\xe0\x27\xd4\x9f\xda\xf7\xfb\x27\x52\x38\xb9\x1e\xd4\x71\x22\xf8\xe1\x65\xec\x00\xa6\x41\x5e\x10\x76\x25\xeb\xbd\x93\xbe\xb6\xac\xf5\x96\xf6\xad\x5d\x2d\xaf\x76\x26\x3a\xbf\x24\x0c\xe7\x9f\xae\xff\xe2\x3d\xaf\x66\x6a\xe8\xf6\x1c\xb0\x28\xe5\x05\x61\x37\x73\x51\xa7\xe2\xd3\xc0\xcf\xa1\x61\xb3\xf9\x02\x76\x77\x95\x08\x2f\x68\xf5\x3d\xdb\xb9\x8a\xb6\x9f\x88\x0c\x42\xb3\x4b\x65\x80\x72\xcf\x0b\xc2\x6e\x66\x4a\xb1\xcd\x77\xf7\x6f\xd8\xb3\x05\x2d\x69\x9c\x6e\x89\xfd\x3f\xd2\x47\x0e\x3f\xe4\xfe\x54\x3b\xbf\x78\x0a\x6b\xf8\xc2\x18\xc0\x0b\x2f\x08\xbb\xa1\x12\xae\x7a\xbf\xbc\x76\x60\xe6\x86\x7e\x92\x0f\x3e\xaf\x70\x6a\x7d\xfa\x19\x4b\xc6\xe7\x1c\x2a\xbc\xae\x1f\xd1\xe5\xf2\x82\x16\xe0\x02\xc2\xae\x0a\xfc\x73\xfa\x09\x69\x65\x4c\x23\x58\xe9\x1c\x04\xd2\x20\x6c\x43\x69\xf2\xb9\x49\xb1\x37\x8c\x61\xd1\x4f\x1b\x1f\xc9\xeb\x00\x47\x17\x84\x5d\x15\x16\x3d\x26\xe1\x84\xa1\x27\xbc\x18\xf1\x9f\x2b\xd4\xc2\xae\x4b\xab\x9b\xe1\xd8\x10\xf2\x0b\x1c\xf1\x1b\xd4\xcb\x87\x3a\x01\xdf\x69\x3e\x10\x76\xd5\x39\xbf\x9d\xd5\x61\x4e\xc9\x5f\x5d\xcc\xf6\xae\xbd\xaa\x7b\x87\xf5\xf8\x4b\x25\x3a\x26\x79\xeb\xd9\x4e\xdd\x50\x72\xed\x1c\x3a\xc0\x05\x84\xdd\xba\x7b\x25\x55\xde\xeb\xcc\x29\x52\xfb\x0a\x35\x6d\x9e\x0e\x82\x1c\x63\x73\xc9\x87\x9d\xbb\xef\x60\x3a\x04\x44\x39\x14\x07\x01\x0b\x64\x3e\x10\x76\xf3\x87\x23\x74\x5a\xdb\xc6\x6b\xe3\x9e\x56\x9f\x3a\xd6\xed\x6f\x17\xa2\x58\xac\x77\x0a\x57\x18\x3a\x27\x55\x1e\xbc\x0d\xd1\x04\x9c\x36\xf1\x81\xb0\xcb\xd9\x33\x42\x38\x37\x1f\x64\x79\x04\xed\xbc\x75\x6d\xb1\xf5\xe4\x5b\x7c\x8d\xed\x04\xc1\x7e\x21\xac\x37\x75\xe9\x1e\xfe\x2c\x60\xaf\xcd\x07\xc2\xee\x87\x05\xe9\x52\xf1\xda\x1d\x7d\x72\xe5\x19\xca\x5d\x8a\xef\x2a\xcb\x6b\x21\xee\x9a\x42\xb2\x2f\x4e\x04\x08\x38\x7f\x95\x3d\x47\x02\xb8\x80\xb0\x6b\xea\x36\xf8\xb0\xa7\x4e\xd7\x9b\xc7\xe7\xeb\x8e\xcd\x2b\x76\xd8\xec\xce\xe5\x6e\x67\xd9\xc2\xe8\x5c\x3d\x6b\xb6\x2b\x8e\x7c\xc0\x92\x9f\x0f\x84\x5d\x7b\x94\x07\x1f\xa2\x68\xfd\xdd\xbf\xe0\xaf\xa8\x27\xab\x18\xc7\x77\xc5\x59\x8e\x6d\x7a\x66\x97\xb8\xc8\xe4\x07\x48\x0a\x44\x23\x00\x5c\x40\xd8\xb5\x7d\xc2\x40\x1d\x71\x88\x88\x23\x3c\x98\xfd\x56\x41\x0d\xd1\x13\xf1\xfa\xf1\x66\xf2\x06\xb5\x8a\x74\xfc\x67\x69\xe3\x4e\x7a\xc0\x06\x9c\x0f\x84\xdd\x7a\x51\x1f\xc6\x6d\x76\xba\x1b\xed\x1d\x71\x58\xf4\x6b\x8e\x4d\xb9\x17\xfe\x8c\x11\xf1\xfc\x1a\xcb\x21\xd0\x69\x78\xcc\x81\x80\x5a\xc7\x07\xc2\xee\x64\x46\x4a\x8d\xdb\x11\x86\x0a\x35\xd5\xb6\x72\xde\xfd\x54\xc5\x0b\x9a\x99\xe2\xb8\xc0\x89\x68\x04\xb2\x26\x5a\xa4\xa5\x52\xc0\xc4\xce\x0f\xc2\x2e\x7b\x2f\xa1\xa6\xa6\xd2\xd7\x2d\x0e\x91\x73\x87\x7d\xa3\x5a\x45\xed\x55\xaa\xaf\x7a\xb4\x43\x35\xfa\xde\xa9\xdf\x06\x14\x83\x00\x27\x82\xfc\x20\xec\x56\x29\x2d\x84\xf4\xe5\xf6\x55\xe4\x72\x8c\xf8\x35\xc7\xf0\x32\x1d\x6c\x4e\x69\x22\x6e\xed\xbd\x57\xdd\x3b\xbf\x7c\xec\x4c\x02\x58\xaa\xf0\x83\xb0\x8b\x56\x5a\x2a\x59\x1f\x64\x5c\xd1\x11\xf5\x0b\xf5\xdd\x26\xcd\x12\xf3\x28\xd4\x8a\xd1\x92\x8c\xc4\x8b\x72\x41\xca\x84\x96\x14\xc0\xb8\xf0\x83\xb0\x4b\x46\x3a\xc5\xe8\x3a\x78\xe2\xf6\xf5\xd3\xf0\x53\x2a\x97\xe3\x69\xf6\xa2\xd3\xfe\xd0\x47\xdc\x26\x3f\x87\xf3\x2f\x33\x5e\xd9\x02\x36\xe0\xfc\x20\xec\x26\x46\x47\xf8\xd4\xab\x2f\x5e\xd8\xf2\xa1\x3e\x31\x51\xcf\x9a\xd6\x18\x49\xc9\x4c\x0c\x1b\x82\xa7\xa3\x7c\x23\xdf\x7c\xac\x0e\xd8\x38\xf0\xff\xc6\x2e\xce\x7f\x97\xd2\xff\x7d\xc1\x93\x8b\x65\xbd\x3f\x7c\xfa\xc8\x33\x82\xdd\x69\x96\x8e\x2a\x11\xed\x32\xbd\xb6\x90\x51\xc5\x2f\x2b\x87\xe8\x33\xc3\xf2\xfc\x6b\x06\xc0\x9f\x05\x81\x3d\xfc\xa6\x3d\xaa\x1f\x27\xf7\xfb\xe9\xb3\x03\xa2\x85\xa5\x1f\x97\x01\xe3\xe3\xc4\x6e\xdb\x70\x1c\x57\x3d\xad\x6b\xbe\x8a\xbd\xdc\x00\x17\x10\xd8\x7f\x3d\x63\xf7\x82\x7e\xfe\xaa\x0f\xdf\x91\x92\x0c\x7d\x09\x29\xb4\x68\x1e\xc9\x9d\x1e\x45\x02\xb6\x9d\xe5\x83\xdf\x8f\x92\xaf\x80\x75\x39\x3f\x08\xec\xcd\x0f\x25\x3e\x4c\xd1\x9f\x3c\x88\x27\xf5\x11\x70\x88\xd1\x41\x16\x1d\xf3\x32\xec\x47\x8e\x53\x09\xa7\xc0\xe4\x10\xa4\x8b\x03\x7e\xa8\x20\xb0\x07\x2e\x44\x3a\x47\x72\x7c\x0e\xaa\x58\x70\xdf\x76\xd6\xea\x48\x38\x15\xd0\x43\x5a\x68\x3a\x6d\xf9\x74\x74\xc4\x2e\x96\x55\xf9\xcf\x89\x5d\x9f\x9d\x0d\x84\xf6\x5c\xba\xef\x3a\x46\x3d\x9e\x75\x03\xf8\xed\x15\x83\xcb\x8d\x7e\x11\x44\xfa\x87\x66\xcc\x2b\x47\x62\x22\x38\xc4\xe7\xd3\x6c\x98\x40\x1b\x10\xdc\xa7\x98\x63\x1d\xc5\xaa\x7f\x11\x64\xbf\x95\xc6\x51\x49\xf7\x73\x2d\x3e\xdb\xb5\x76\xfd\xe6\x91\xca\x6f\xee\xa6\x1f\xdc\x6f\xc5\x0e\xb4\x01\xe1\xdd\x97\x1f\x16\x71\x22\x3c\x45\x3f\xef\x75\x0a\xc2\x53\x17\x25\x91\xb7\xb3\x49\xf3\x36\xac\xfb\x70\x0c\xc8\x16\xdc\xb6\xa3\x94\x30\x40\x1b\x10\xe0\x7b\xab\xe0\x46\x3f\x2f\x06\x16\xec\xb8\x56\xe6\xb3\x93\x9a\x1c\xd3\x69\xc7\xd7\xb0\xaa\x92\x64\x6c\xe3\xb2\x70\x3c\x1b\xb3\xc3\x07\xda\x80\x10\xaf\x5f\x1e\x25\xa3\xcd\xe9\xd8\x1c\xec\xd3\xe6\xbc\x22\x3e\xeb\xaa\x0b\x9f\x47\xc9\x9e\x2b\xf1\x84\xa2\x33\xd0\xf5\x51\x44\x11\x0e\xd0\x06\xec\xe0\xd9\xad\x84\xe9\xca\x21\xdb\x9b\xde\x88\xfa\x7c\x70\xa0\x5f\x4e\xac\xce\xab\x8e\x8b\x8a\x65\xc0\x0b\xde\x78\xa8\x3b\x0c\x0d\x0f\x68\x03\x82\xf0\x67\x9c\x4f\x34\x70\xec\x50\x8f\x25\xe9\x95\x8c\xee\x19\x36\x49\x0e\x5c\x29\x05\x07\x76\x58\xe1\xc1\xe0\xad\x57\xf1\xc5\x37\xa0\x02\x6d\x40\x18\x5e\x39\x31\x79\x20\x51\x66\x3d\x9e\xfe\x1a\xfb\x42\x66\xab\xd3\x73\x2b\xab\x36\xe7\xe0\xe2\x1d\xd3\x67\xd2\x4a\x29\x18\xc5\x1c\x14\xa0\x0d\x08\xc4\x7c\x68\x3d\xcf\x96\xa7\x39\x49\x36\x70\x84\xb8\xba\x8e\x83\x1a\x2c\xbf\x1a\xce\x94\xd2\xc8\x38\x8e\x31\x2b\xd6\xd5\xa2\xd8\x31\x03\x6d\x40\x28\xc6\x16\xa1\xb1\x7b\xff\x6e\x86\x58\xda\xe7\x67\xf7\xbc\xbe\x83\x36\xeb\x74\x52\xa0\x37\x79\x3f\x55\x8a\xf6\x6b\xa1\x31\xd9\x34\x78\x80\x0d\x58\xea\x57\xf3\xc1\xba\xa2\xe2\x99\x68\xba\x78\x16\xd9\x53\xf5\x46\x3b\x28\x8b\xd1\x7e\x21\xa7\x16\x44\x27\x18\x19\x51\x1d\x2e\xdf\xea\x7b\x40\x1b\xb0\x13\x39\xa8\x14\x95\x7a\x2c\x64\xc7\x01\xdb\x04\x1c\xaf\x70\x14\x24\x02\x83\xc6\x76\x5d\xcd\x60\x38\xd7\xf5\x13\x74\x6c\x24\x1a\x3a\xa0\x0d\x08\xc5\x19\x3e\x3d\xf4\x42\xe1\x76\x46\x7c\x45\xda\x9d\xc6\x02\x96\x5e\x13\x67\x0b\xaf\x5d\xb9\x43\x6b\xbc\xe3\xc4\x3f\x8c\xb3\x53\x91\x02\x6d\x40\x28\xf6\x71\x45\xeb\xaf\x27\xd8\x6e\x92\x55\x12\x77\x2f\xe5\xa7\x8e\xd6\x20\x21\x6d\x9f\x91\x77\xf4\x7c\x2b\x7b\x54\xe8\x5d\xac\x4e\x01\xb4\x01\xa1\xf8\xbb\xd1\x57\xe1\x0d\xf4\x72\xcb\xb7\x15\xdb\xb3\x6c\x8d\x3c\xe5\x1b\xa3\x4a\x4c\x04\x30\x3c\x0d\xca\x70\x49\xe4\x72\x2a\xd7\xf7\x81\x36\x20\x14\x13\x51\xd9\x27\xda\xd4\xbb\x36\x84\xb8\xae\xc5\x4b\xe3\xd7\xec\xc6\x1a\x64\x8b\x96\x30\x60\xc7\x5a\x2d\xea\xbd\x9a\x4b\xb7\x25\x06\xda\x80\x50\xfc\x93\xb2\xc1\x7c\x22\x47\x2c\x14\x26\x3d\xda\x98\x03\x2a\x9e\x5e\x67\x6c\x8e\x17\x71\x36\x6c\x22\x5a\xa9\x71\xff\xf0\x58\x98\x01\x68\x03\x42\x71\xfa\xd7\xf7\x2e\xae\x98\x1a\x5f\x57\x26\xbe\xda\x90\xb9\xc7\xef\x9c\x1e\x9b\x23\x4e\x55\x2c\x2c\x1e\x7a\x1b\x7d\xc2\x15\xc6\x01\xe2\x07\x96\xfe\x31\x05\xe2\x88\x66\x10\xe5\x0e\x07\xaa\x1b\xe3\xb2\xc6\x34\x13\x7d\x64\x7e\xcb\x32\x70\x59\xd3\x95\x64\xe2\x80\x0f\x3d\x60\xfa\xc7\xd5\x80\x50\x7c\x8d\xd3\x1f\x03\xc7\xea\x0f\xef\xe8\x4a\x97\x42\x51\x32\x95\x1d\x63\xeb\x0c\x75\x84\x71\x22\x6d\xa0\xfc\x05\xa3\xc8\x59\x10\x38\x36\x60\xf9\x5f\xbd\xe7\xbe\x0b\x94\xf3\x77\xc6\x4d\xb2\xcc\xb9\xed\x13\xf1\x9b\xb1\x4c\xf7\x32\xf7\x64\xff\x54\x86\xa4\x64\xda\x94\xd1\x2d\x36\xa0\x0d\x08\xc5\xb3\x8e\x8b\x6d\x5c\xac\x2c\x50\x63\x62\x1f\xb7\xe1\x22\xce\x07\x2e\x71\xdd\xb4\xe5\xba\x5e\x67\x29\x7d\x0a\x7a\xa7\xaa\xc3\x4e\x09\xb4\x01\xa1\xf8\x42\x23\x26\xdc\x7c\x1a\x4d\x5e\xc9\xb3\x86\xb0\x9f\x35\x98\x23\xb0\x0d\xad\x37\xbe\x92\xd1\x32\x3b\x76\x6a\x69\x6a\xc0\x90\x0a\x68\x03\x42\xf1\x54\x3b\x19\xac\xce\x2e\xab\x54\xc0\x2b\x8b\xb2\x54\xb1\x58\x99\x2c\xf8\x37\x4f\x74\x44\xc7\x35\x83\x86\xa6\x94\x6a\xa1\x7c\x08\x80\x36\x20\x14\x3b\x0c\xf4\xfb\x9f\x64\x78\xcd\x6a\xfa\xb9\xb2\xb3\x65\x08\x52\xfa\xc6\xde\x74\xe8\xdf\x53\xfd\x89\x1d\xfb\x45\x25\xec\xc8\x9f\x13\x68\x03\x42\x71\xb1\x78\xc7\x06\x91\x5e\xba\x5a\x9c\x39\x16\x54\x32\x61\x55\x1b\xf9\xf9\x19\x8e\x5e\x9b\x2f\x35\x02\x76\xbf\x78\xb6\xcb\x0b\xe0\x3c\x05\x96\x02\xae\x53\x8f\xb2\x88\xfa\xbf\xf5\xb1\xe1\x34\x91\x42\x1f\x17\x38\xd2\xbf\x67\xc6\xc1\x54\xb5\x51\x3c\xd5\x22\x91\x75\xb9\x7d\x00\xac\x37\xbf\xc5\x80\x61\x38\xff\x5d\x1f\xe2\xdf\x17\x43\xc8\x91\x5b\xb3\x54\x72\x37\xc1\xb3\xb9\xce\x51\x93\xfb\x5f\xce\x88\xd8\x90\x96\x32\x1d\x12\x4f\xe4\x47\x1c\x9e\x4e\xd3\x38\x00\xe7\x47\xb0\xe0\xd0\x56\x45\xcd\x30\x96\x12\xb1\x7a\x7f\x75\xf7\xb5\x78\x5e\x81\xfc\x92\x18\x03\x63\x56\xef\xa5\x44\x21\x69\x9e\x53\xa7\xcb\x0b\x72\xa0\x0d\x08\xf6\x49\x0f\x46\xa0\xe8\x29\xf1\x19\x1d\xaf\x25\x8c\x54\xbb\x85\x9a\x64\xe2\x91\xdf\xdd\x7c\xdc\x99\x7b\x1d\x57\x76\xf6\x81\x45\x8c\x0f\x60\x03\x16\x1d\xa6\x5c\x68\xe0\x76\xea\x85\x22\x06\x98\x75\xbd\x4e\x90\xca\xdf\x71\x81\x69\x49\x8e\x7d\x13\x52\xe8\x71\xfe\x16\x9d\xa9\xd7\x0d\x38\x3f\x72\x82\x60\x2f\xe0\x4f\x1e\x22\xfe\xa6\x0d\x49\xb4\x02\xe5\x2c\x40\x38\x12\xf6\x42\x7f\x34\x0e\x9e\x66\xa3\x8c\xd3\x36\x29\x69\x2e\x8d\x8e\x15\x68\x03\x56\xbc\x17\xf9\x1e\xab\xc5\xe7\x37\xd3\x9e\xbf\x7b\xc4\x7c\x9f\x60\x32\x10\xba\xf1\x30\xc0\x60\xd3\xb5\xc4\xd1\xe7\x39\xcd\x26\x1c\x11\xd0\x06\x04\xfb\xe3\x17\xdd\x50\x48\xef\x53\x25\xb0\x1e\x08\xb4\x36\xe1\x47\x9b\x0e\x97\xb9\x74\xce\xe4\x58\x27\x94\x7b\x3d\xd6\x17\xef\xde\x06\x12\x02\x96\x06\x1a\xc3\xe6\x99\xee\xab\xf7\xe1\xb0\x72\xaa\xec\x14\x28\xc5\xab\x25\xfd\x2c\x7c\x34\x95\x8f\xbb\x20\x6d\x3b\x49\x96\x4f\x3e\x87\x0c\xb4\x01\xc1\x9e\xc4\x56\x37\x79\x59\x56\x44\x58\xf5\x78\xae\xad\x38\x82\xdf\xad\x6e\xa0\x32\xc1\x9a\xa3\xdf\xc0\x4e\xb8\xc7\x60\xac\x17\x11\x88\x3d\x58\x1e\x98\xc2\xf8\xeb\x86\x50\x6c\x21\xc2\x72\x38\x85\x17\x6b\x16\x69\xbd\xd9\x82\x49\x7d\x90\x4e\x3f\x12\x93\xf7\x66\x7b\x99\x9c\x1e\x58\x59\xc0\x02\x41\x4c\xb3\xf6\x19\x84\xa1\x71\x7d\x82\x42\xd4\x44\xbb\x2a\x66\xb6\x8b\xc6\x57\xf6\xad\x7b\xf0\x5c\xa3\x2b\x65\xf1\xfb\xdf\xfb\x80\xdf\x65\xb0\x44\x70\xba\x67\xd8\xef\x6a\x1b\x35\x51\xe8\x3a\xd3\x83\xde\xda\xd6\x43\x8a\xf8\x4d\xb7\x63\x93\x1f\x94\xd4\x85\x97\x00\x8b\xb6\xf2\x23\xa0\x0d\x08\xc5\x89\x18\x9f\xc8\xcf\x42\x6d\xfd\x0f\x30\xba\x57\x30\x37\xd9\x3b\x57\x34\x39\xc2\xbb\x11\x46\x9b\x72\xc9\xfa\x9a\x2a\xbb\xed\x81\x93\x3e\x58\x26\x18\x2c\xbf\x85\x81\x5c\x56\x4a\x50\x46\xac\x77\x9e\x10\x2a\xa9\x32\xc7\x1e\x7a\x91\xc4\x1e\x37\x97\xd3\xd4\x56\x6e\xac\x12\x03\x5c\xc9\x80\x85\x82\x27\xaf\x92\x16\x2d\x9a\xbf\x5b\xe8\x63\x95\xb2\xab\x70\x7f\x0f\xe4\x3c\xa0\x5c\xda\xcd\x87\x52\xbd\xd0\xd2\x0e\xa9\x60\x69\x62\x02\xda\x80\x50\xbc\xb6\xfa\x03\xaa\x35\x36\x81\x73\xb3\xc8\xe0\x32\xa9\xe9\x61\x9d\xef\x33\x05\x9e\xc5\x55\x1a\x5d\xa4\xc3\xb1\xc4\x8f\x5a\xb3\x24\x40\x1b\x10\x8a\xa9\x6a\x61\xef\x27\x54\xf6\xc2\x09\xcd\xd6\x1e\x48\x66\x48\x05\x7e\x83\xfb\x2e\xc5\x02\x4f\x4e\x6d\x6d\x44\x79\xc0\x7d\x49\x03\xac\x37\x60\xb9\xa0\xf5\x70\x39\x6e\x62\xa5\xca\xdc\xb2\x85\xbc\x71\x9a\x0c\x81\xcc\x51\x4b\xc0\xd8\x09\x65\xdd\x89\x91\x0a\x1b\x5c\x6b\x98\x1e\x70\x25\x03\x16\x0c\x7e\x15\x39\x64\xb2\x65\x98\x0e\x98\x3c\x3e\xd9\xae\xda\xfe\x9c\xde\x60\x3a\x4b\x20\x5a\xc8\xf9\xbd\xc6\x7a\xe0\x42\xe6\x64\x83\x03\x68\x03\x42\xb1\xf6\xa7\x8e\x00\x5c\x45\x07\x45\xc5\xb9\x1e\x9c\xcd\x66\xae\x62\x79\x96\x9b\x91\x5f\xe5\x51\xb2\x68\x99\x6b\x5f\x87\xc6\x52\x81\x0b\x22\xb0\x68\x50\x28\x1b\x49\x8d\x90\xcb\xfa\x89\xce\xab\xa8\x0d\xe3\xcc\xc4\x2b\x7b\xed\x19\x85\x8b\x53\x79\x6c\x23\x76\x7e\xc4\xdc\xaf\x88\xc0\x0d\x18\x58\x36\x98\xd9\xfd\x80\x61\x9e\x34\xc7\x8b\x2e\xf8\x17\xb9\x12\xbc\xe4\xda\x43\x64\xf8\xd9\x83\x1f\xf7\xe7\x71\x33\xfa\x24\x0a\x18\x3a\xa8\x81\x36\x20\x14\xd3\x29\x2a\x85\xe5\xe9\xf6\xb5\x05\xca\x64\x27\x3d\xeb\x36\x41\x5b\x15\x58\xbd\xb7\x99\x40\xce\x39\x99\x4b\xc7\x19\x65\x65\x08\x0b\xb0\x01\x4b\x07\x79\x66\x26\x7d\x4a\x63\x13\xe3\x7f\x91\x13\x23\x9f\xc2\xbb\xea\x11\x99\x9c\xea\x3e\xb5\x28\xa7\x5f\x71\x2d\x7c\x59\x69\x59\x86\x08\xb4\x01\xa1\xf8\xab\xa3\x8a\xae\x49\x00\xd3\xb7\x3e\x69\xf9\x7d\x7c\x71\x64\xca\xc3\xd6\xcf\xbc\xf4\x2e\x12\x6f\x0e\x18\xcf\x53\x04\xa7\x04\x80\x1f\x38\x58\x3e\xe8\x82\x5f\x56\xfd\xa0\xcb\x85\x99\xc3\x53\x4f\xf6\x83\xa8\xab\xbc\x99\x9a\xde\x0b\xbe\x2b\xa8\x09\x3e\xd6\xe3\x68\x7e\x97\x27\xc0\x92\x0e\x16\x10\x26\xe9\xfb\x29\xbb\x86\xf7\x0e\xc6\xed\x25\x1f\x48\xaa\xc2\x37\xaa\xa0\xfa\x21\xb1\x30\xda\x43\xa3\xe2\x7b\x7f\x2a\x99\x6e\xe7\x01\xda\x80\x50\x3c\xc8\x03\xcf\xbf\x33\x90\x4d\x96\x53\x5a\xf0\xc9\xf1\xe8\x87\xa0\x94\xa0\xdd\x53\x65\x8c\x2f\xc1\x8b\x25\x9e\x39\x26\x62\x82\xfc\x40\x1b\x10\x8a\xd1\xbc\x4b\x05\x96\xed\x37\xaf\x12\xbe\xc8\x3a\x55\x2b\xa4\x8c\xb9\x54\xe5\x98\x3b\x25\xa8\x6e\xb2\x3c\xc0\xf4\xc6\x1c\x36\x13\x02\xda\x80\x50\x7c\x1e\x30\x8f\x22\xc9\x64\xd7\xdf\xff\x40\xbd\x13\xae\x12\x56\x3f\x92\x8d\x52\x82\xbb\x96\xab\x67\x93\xd5\xbd\x1d\x7d\x1a\x91\x10\x68\x03\x42\xf1\xee\x8a\xc5\x69\x9b\x18\x77\x6b\xdf\xe4\x35\xc1\x16\xd4\x45\xa0\x14\x92\x2a\xba\xeb\xa1\xe5\x0a\x3c\xb2\x1b\x16\xdd\x28\x15\x70\x79\x06\x96\x12\x4a\x3e\x8d\x19\x38\xc3\xc9\x9a\x74\x5e\x81\x66\x35\xad\x87\xf5\x35\x3a\x68\xc5\xc1\x1f\x2b\x8d\x0b\x23\x42\x0a\xb5\x89\xad\x27\x03\xda\xf0\xff\xb1\x20\x82\xf4\x6b\x8b\xbf\x2f\x88\x4c\x8a\x18\xbf\x11\x15\x7e\x12\x19\x09\x1f\x27\x68\x15\x59\x65\x34\x19\x7a\x35\x25\x89\x92\xa7\x65\x4f\xdf\xa6\x03\x3d\x35\x09\xfc\x68\xc1\x82\xc5\xcb\x20\x27\x15\xde\x91\xee\xd5\x45\x62\xb9\xe4\xe5\xe3\x21\xf3\xd5\xd5\x36\x63\x3b\x78\xed\x02\x64\x1a\x3d\xdb\xf1\x8b\x2f\xbc\x40\x1b\x10\xec\x05\x91\x76\xa4\xb4\xd1\x03\xbd\x4d\x65\x74\x6d\x38\xf8\x95\x9b\x44\xd5\x61\x22\x03\xf1\x3f\x63\x54\xe4\x3b\x6e\x9b\x38\x39\x3d\x01\xda\x80\x60\x4f\x63\xae\x3b\x9d\x7e\x38\xcc\xa9\x8a\x62\x95\x80\x65\x65\xc6\x4c\xc8\xa1\x31\x15\x2c\x3d\x2b\xb7\xe8\x66\x65\x31\x88\xf4\x13\xb8\x04\xe1\x01\xc1\x7e\x03\x2e\x95\xae\xb8\x88\x40\x84\x17\xc3\xa8\xc5\x1a\xa7\xfd\x6a\xeb\x92\x9d\xb9\x73\xfe\x10\x26\xe8\x07\x54\x00\x0a\x7e\x18\x70\x79\x06\x96\x15\x0e\xed\xf3\x91\x76\x97\x50\x4c\xb6\xb1\x37\xf0\x8e\xe7\xae\xb0\x97\x61\xe3\x33\x54\xaf\x9a\xaf\x33\xa9\xc5\x18\x35\x32\x52\xa0\x03\x6d\x40\xb0\x3f\x08\xec\x5b\x7a\xf4\x94\xb0\x49\xd1\xaf\x97\x6e\x45\x22\xef\x50\x2f\x3a\xa0\x91\xea\xc2\x05\xb9\x93\xe2\xf4\x7c\x60\x45\x15\xb8\xb9\x01\x4b\x0b\x4d\xf3\xbd\xd4\xe0\x0b\xde\x33\x23\xe9\xf9\xb1\xc5\xa9\x64\x78\x6d\x76\xc4\xbb\x6b\xd6\x2d\xe8\x98\x91\x7d\x30\x35\x6c\x0a\xa5\x07\xda\x80\x60\xaf\x91\x52\x5d\x8a\xfb\x25\x64\x15\x11\xd1\xa7\x40\xeb\x44\x97\xff\x4d\x92\xb3\xc9\x15\x29\x43\x09\x9e\x04\xe5\xc4\x98\x33\x16\xb0\xce\x81\xe5\x85\xb9\xc1\x47\x4c\x64\x23\x4d\xb1\xb4\xa9\xd2\xe8\xea\x68\xf8\xdc\xbc\x1f\x65\x1f\x91\xa3\xf8\x7c\x12\xa1\xc7\xd7\x6d\x31\x77\xc4\x05\xda\x80\x14\x6f\x6e\x22\xa3\x3a\x7e\x35\x06\x2b\xec\x8d\xe5\x11\xe1\x4d\x07\x6f\x7c\xa7\xe3\xfb\x1d\xd8\x7e\x06\xa7\xd9\xce\x89\x6a\xbb\xb5\xc0\xfd\x23\x58\x62\x58\xef\xe4\xe9\xb5\xf3\x7e\x1a\x41\x59\xf1\x40\xe3\xe8\x41\xac\x25\xea\x10\xc7\x42\x10\x72\xc0\x04\x7a\x7a\x7e\xff\x56\xdf\x3b\xe0\x82\x08\x2c\x32\x24\x48\xdf\xe9\x46\xfe\x94\xbd\x78\x86\xe1\x29\x58\x40\x2c\x57\xa8\xf5\x06\xca\x74\x2c\x51\x95\x0b\xc6\x5f\x85\xef\xc2\xb8\x18\xb8\x3c\x03\xcb\x0c\x0d\xdc\xf2\x6d\x10\xb9\x08\xca\x5c\x10\xe8\x75\x8a\x2e\xe0\x56\xc8\x5b\x3c\x05\x3f\x59\x79\x63\xb4\xe6\x6e\x2e\x26\xf6\xda\x00\x4f\x16\xc1\x42\xc3\x61\x6e\x1c\x4e\xf3\x9b\x2f\xdb\x29\x18\x61\xed\x62\x9f\xa2\xc3\x36\xa9\xd9\xb4\xba\xaa\xe8\x6a\xe5\xf1\x8d\x94\xed\xa5\xb4\x81\x13\x1b\x58\x6a\x98\x7b\xb4\x35\x8b\x96\x21\x71\xca\x06\x7f\x90\x70\xe9\xcf\x9f\x42\x15\xaf\xa1\xcf\x4e\xb1\x4b\x34\xaa\x25\xf1\x04\x65\xc9\x11\x78\xec\x05\x16\x1b\xbe\xfd\x02\x4b\x46\xb0\xf4\x49\xa5\xdf\x1e\xbf\xc6\x75\xf3\xa3\xa6\xe7\xfa\x94\x40\xe7\xb2\xcf\x67\xc2\xe8\x9f\x35\xc8\xe4\x09\xc0\x7a\x03\x96\x1b\x1a\x94\x52\x3c\xdf\xc6\x64\xc3\x63\x55\xa0\xff\x85\xaa\x8f\xf8\xba\x46\x1c\x2f\x3b\xe2\x24\xdf\xd8\x67\x5f\x99\x1e\xda\xd1\x10\x38\x07\x80\x05\x87\xe4\x95\xc7\xaa\x57\x6d\x74\x02\x4e\x79\x81\xb3\xa3\x0a\x24\x97\x2c\x75\xe2\x49\x42\xf7\x32\x2b\xc3\x18\xd7\x8c\x2e\x0f\x83\x81\xdf\x29\xb0\xe4\x70\xf6\xda\x58\x72\x51\x83\x23\x84\x6d\xb5\x33\x5f\x70\x16\x65\xb6\xbf\x50\xeb\xf5\x4e\xf6\x7d\xa7\xbe\x12\xf3\x9e\x52\xa1\x2c\x2e\xa0\x0d\x08\xc5\x12\x8e\xb4\x8c\x65\xec\x36\x07\xf1\xdd\x8f\xe3\x73\xa1\x1f\x4e\x85\x26\xcc\xd1\x50\x6e\x66\x4d\x66\x42\x95\x6a\x6d\x5c\xa0\x02\x27\x7d\xb0\xec\x70\xc4\x8d\x8e\x3c\xa6\x56\xb8\xce\x00\x61\x3c\xba\xb6\x78\xd3\x34\xa3\x19\x8d\x07\x27\x70\x78\x45\x2e\x52\x6c\x8c\xee\x51\x15\xf0\x68\x07\x2c\x3c\x14\xe4\xc0\x8a\xba\x6c\xde\xd9\xe4\x0f\xfb\x86\x16\xbc\x54\x36\x49\x47\x10\xeb\x96\x7a\xb0\x2d\x90\x84\x04\x43\xbb\x8c\x21\xc3\x0d\xb4\x01\xa1\x38\xed\xe4\xad\x86\x97\xfb\xc4\xce\x51\xc6\xb5\xcb\x94\x90\xc3\x1c\xf3\xa8\x90\x1f\x51\x0d\x5a\x80\xe3\x8e\x7b\x28\x31\x33\x26\xf0\x2c\x0f\x2c\x3e\x94\x5b\xe9\x6c\x69\x3e\x64\x46\xef\x13\xf1\xb5\x60\xa3\x56\x5c\x65\x6c\x6e\xfd\xae\x21\xfd\xc9\x80\xe1\x19\x95\x24\xd3\xbe\x01\xf0\x1b\x0e\x96\x1f\x26\x21\x54\x23\xbd\x9d\x3f\x9a\x62\xde\xe7\x0c\x30\xa7\xe5\x49\x79\xd9\x1a\x12\x3a\x2b\x29\xc6\xd5\x02\xe7\xe6\xe7\x7e\x65\xf1\xc7\xd8\x80\x50\x0c\x0b\xf7\x69\xfa\xb3\xeb\x8b\x41\x9a\x2e\x3b\x31\x0f\x41\xd2\x44\xbb\x50\x9b\x7c\xbb\xf2\x38\x37\x7b\x15\x0b\x72\xae\xc9\xcf\xc0\x0f\x1c\x2c\x41\x24\x61\x7b\xef\x3a\x86\x2b\x78\x93\x17\x21\xf2\xe1\xa6\xd0\x9f\x4c\x7f\x77\x79\x44\x23\xa6\x56\xca\x12\xe9\x69\x6f\xe0\x8f\xf7\x08\x40\x1b\x10\x8a\x59\xb5\xde\x2c\x8a\x2a\xb7\xba\x7a\x6a\x7d\x89\x68\xec\x1b\x3b\x84\x29\xfe\x28\x6b\xca\x77\x18\x8e\x92\x88\x5b\xf3\x55\x02\x4f\x10\x68\x03\x42\xf1\xa7\x90\xd4\xe5\xd1\xd7\x93\xb4\x62\xcf\xa6\x73\x67\xf1\x60\x2f\x5a\xf0\x4c\x4a\x67\x6c\xf6\x47\xeb\xf9\x29\x86\xaf\x68\xdf\x01\xeb\x0d\x58\x88\xf8\xdc\xe1\xa3\x5b\x84\xa3\x3d\xac\xd9\xe3\x5f\xcd\xac\x28\xe2\x78\x3a\x12\x32\x31\x41\xea\xfc\x34\x54\xbc\xed\x6e\x26\x9a\x43\xc0\x39\x1c\x2c\x45\x84\x8d\xff\xee\xa0\xbd\x2d\x24\x68\xfc\x42\x73\x84\xd9\x80\xeb\xe2\xa9\x67\x99\x74\x1e\xbd\xdb\xcd\x39\x27\xdc\x87\x1b\x14\x0d\x1a\xa0\x0d\xfb\x1f\x0b\x22\x48\xbf\x29\xfd\xfb\x82\x68\x84\xc4\xca\xa1\x7e\x2d\x27\xa6\x3a\x62\xf5\x88\x6b\xe9\x8c\x4c\x1f\x26\xe4\x71\x79\x6f\x80\xd4\x7a\x10\xb7\x19\x2e\x3d\x1e\x70\x73\x03\x16\x3c\x22\x0c\xae\x50\x9e\xed\xe6\x58\x5a\x4b\x4a\xd7\x68\x31\x05\x30\x65\x10\xa2\x5c\x3e\xe0\x19\x2e\x58\xdf\xf5\xd9\xda\x7f\xf5\x1e\x38\xcd\x82\x25\x8f\x62\x41\x76\x63\xd8\xd7\xe6\x39\x9b\x12\x9a\x16\xdf\xdd\x2b\x93\xbf\x53\x36\x92\x11\xd3\xeb\x64\xc6\x35\x08\x45\x9d\xbe\x3b\x06\xee\x1f\xc1\xa2\xc7\xad\x12\x04\x3d\xf3\x0c\xb4\xb9\x35\x7e\xdc\x05\x68\xa2\x82\x0f\xf9\xd0\x2f\x9f\x2a\x09\x7b\xb0\xa4\x48\x54\x13\x2f\xf5\x48\x03\x4f\x41\xf8\x41\xb0\x57\xb4\x1f\x91\xed\x56\x4b\x56\xf7\xd4\xc4\xee\xc6\xdb\xfd\x71\x40\x62\x77\xaa\x13\x85\x74\xd5\x55\xf9\xf2\x83\x86\xed\x58\xe0\x1f\x63\x03\x82\x7d\xe4\x31\xd7\x8a\x0d\x8a\x12\xba\x1d\x29\xb4\x0f\x0b\xfb\xf7\x52\x06\x54\x73\xe5\x2c\xb2\xeb\xc5\xd3\x07\x54\x0d\x0c\x03\x3b\xc0\xef\x32\x58\x98\x48\x09\xe3\x9e\xd3\x71\x1a\xa3\x6a\xf8\x8e\x28\xcd\xac\xf8\xe1\xfb\x1d\x2e\x2d\x3d\x56\x53\x89\xc7\xd7\xf5\x9c\xd6\x39\x4d\x87\x50\x40\x1b\xb0\xe2\x3d\x3c\x96\x83\xd3\x5b\x72\xb4\x23\xe9\x5a\x0e\x15\x4e\xd6\x8b\xb7\x8f\xbd\xc4\xf8\xa1\x7c\x53\x54\xc2\x9e\xbd\x04\xbe\x14\x78\xee\x00\x16\x27\x3a\x36\x89\xf9\x70\xb6\x12\x7e\xaf\xf1\x7f\x17\x14\x30\x1f\xc0\x0d\xa5\x8f\x99\xaa\xf1\x72\x47\xd0\x7c\x44\x71\x60\xba\x1e\x13\xf0\xed\xe1\x00\x8b\x13\xa3\x5a\x9a\x5d\xce\x3f\x3f\xc8\xd9\x1c\x0d\xdc\x8b\x79\xc8\x9e\xc8\x31\x89\x29\xde\xf4\xa3\x3c\x3e\xe2\x13\xa3\x77\x46\x13\xfe\x43\xa0\x0d\x48\xf1\x6e\x1b\xc1\x0e\x7d\xfd\xf9\x31\x75\x72\xce\x4a\x92\x46\x3a\x8c\x6b\x6b\xc1\x66\xd9\xa0\x13\xa2\xd7\x89\xf8\x89\x14\x76\x7a\x21\x1f\xd0\x06\x84\x62\x73\x75\x74\xcb\xa7\x15\xc2\x0a\x4d\x03\x0c\x5e\x0a\xdb\x85\xca\x66\xcc\x3f\x72\x6b\x25\x97\x7a\x2c\x67\x27\x39\xe1\x3b\x2d\xe0\x81\x36\x20\x14\x8b\x5a\x39\x49\xcc\xaf\x3d\x4b\x6a\x33\xab\x4c\xbb\xe9\x56\xbd\x12\x0a\x3a\xde\x87\x0f\xb9\x9f\x8c\xa7\x45\x5d\x44\x41\x81\x85\x05\xb4\x01\xa1\x98\x35\xe1\x6d\xb5\x77\x3a\x39\xcb\x33\x5d\x29\x6a\x4e\xb1\x2b\xa9\x00\xeb\x0f\x9c\x1b\x3f\x9f\x2a\x49\x89\x50\x97\xb9\x9d\x8a\x73\x00\x6d\x40\x28\xee\xb0\x84\xc1\xe2\xa4\x2b\x2d\x77\x4d\x87\x7a\xa0\xde\xb7\xaa\x16\xa5\x5e\xa1\x59\x39\xf8\xd0\x73\x32\x5b\xe9\xfc\xdd\xfc\x0a\x33\xd0\x06\x84\xe2\xc0\x1c\x81\x49\xb2\xc6\x7b\xc9\xd1\x9a\x49\x29\xde\xfb\xa7\x14\x2d\xe6\xaf\x7b\xc7\x72\x5b\xcb\x14\x3a\x9c\x31\x3d\xba\x4c\x61\x80\x36\x20\x14\xf7\x0b\x34\xca\x30\x98\x1f\x25\xa6\x10\x04\x1c\x69\xff\x90\x35\xef\xf8\x7e\x69\x8e\x31\xb0\xf0\x34\x10\xcd\xe2\x45\xe2\x1c\x36\x37\xd0\x06\x84\x62\xb7\xeb\x98\xa6\x12\x89\x47\x9f\xb6\x7a\x5b\x22\xd2\xe2\x4a\x1b\xc3\xec\x8a\xdc\xac\x3a\x7a\xe9\x3e\x60\xdf\x50\x70\xac\xf9\xe2\x01\x6d\x40\x28\x96\xf1\xc2\xc7\x2c\xe5\xd5\x51\xe6\x1a\x9f\xf9\xac\xa0\xd6\xa7\xa8\xa8\x4e\xb9\x89\x42\x25\x49\x59\xce\x11\x98\x8e\xbe\x45\x00\x38\x4c\xe1\x00\x8b\x13\xe9\x66\x32\xde\x8e\x75\xc7\x4a\xc3\xba\x95\xb7\x2d\xe3\xd4\xdb\x3d\xaa\x27\x57\x4e\xd3\xd3\xb4\xc2\xa3\x2f\x92\xed\xeb\x49\x65\x02\xda\x80\x50\x9c\x8b\x4b\x54\x61\x34\x8f\x2e\xdd\x3c\x70\x15\x39\x30\xe9\x38\x89\x77\x55\x36\x64\x68\x19\xf5\x20\x8a\x2c\xa4\x56\xe1\x19\x14\x1d\xd0\x06\x84\xe2\xf0\x93\xbe\x2f\x62\x93\xaf\x1c\xd6\xf2\xa4\x4f\x52\x0f\x1d\x9e\x2e\x5e\xf7\xfa\xea\xf4\x55\x99\xf3\x99\x38\x5e\xe7\xf7\xd9\x02\xf1\x03\x8b\x13\x55\x3c\xa9\x45\x9d\x37\x75\x1a\xe0\x95\x7d\xe2\x38\x7c\x51\xbf\x61\xf8\xe0\x24\x2e\x27\x25\x97\xa5\x9a\x2e\x7b\x26\x3b\xa8\x11\x01\x6d\x40\x28\x76\xfe\x1e\x29\x30\x7d\x98\xfe\xce\x4d\x2c\x72\x36\x22\x24\xf0\xf5\xc9\x7b\x4e\xba\xa8\x9b\x2a\x5f\xd6\xc8\x31\x5c\x9b\xf7\xb9\xf7\x81\x36\x20\x14\x1b\xed\x0f\xbf\xe1\x28\x62\x42\x09\x93\xd8\xb7\xd0\x77\x47\xd0\xbb\x62\x0f\xf5\x29\x5a\xa1\x8b\x60\xc5\x6d\x74\xc7\x2a\x16\xfa\xe3\xa6\x40\x28\xee\x7a\xbd\x3b\x14\x4f\xcb\xcb\x6e\x22\x62\x47\x3f\x4a\x96\xf5\xc3\x6e\xae\xa7\xbb\x66\x2c\x0b\xe7\x7e\x55\xf8\xdc\x07\xf4\x77\x40\x8a\xc1\xe2\xc4\x6f\x97\x43\x1e\x76\xc4\x2a\xa4\xeb\x59\x9d\x43\xa8\x4d\x04\x8d\x9f\xbf\x10\xff\xd2\xb4\x7a\x32\xfc\xed\x52\xd9\xe1\xfe\x8d\x0b\x12\xd0\x06\x84\xe2\xd8\x71\xea\x8f\x66\x14\x76\xbe\xc7\xaa\x35\x1c\x35\xd8\x87\x84\x69\x70\xcd\x8f\xb5\x33\xf3\x9b\x74\x52\x09\xd8\x10\x59\xb0\x39\x81\x36\x20\x14\x7b\x2d\x0a\x50\x1e\x50\x10\xdd\xd3\xaa\x31\xe2\x57\x75\x7e\xbd\x93\xd2\xec\x22\x5d\x22\x69\xbf\x50\xe9\xbb\x98\xb8\x4c\xe4\x0c\x07\xb0\x01\x8b\x13\x4b\x1b\x9e\x5d\xd6\xc0\xd4\x62\xb5\xd0\xcf\x30\x12\x09\x5c\xe2\xda\xe9\x08\x5a\xaf\xa6\xdc\x73\xd0\xd1\x9a\x45\xca\xeb\xa9\x04\xd6\x1b\xb0\x38\x31\x71\x92\xca\x18\x4b\x05\xcd\x56\xa1\xa6\x93\xad\x38\xe7\x20\x3f\x61\xf4\x42\xd0\x68\x3c\x44\x77\xc6\xe0\xe6\x74\xf9\x1b\x0f\x19\xd0\x06\x84\xe2\x47\xd2\x9a\x86\x6e\x4d\x55\x74\xdc\x63\x13\xc2\xbd\xfe\x11\xaa\xab\x41\xca\x2d\xed\x2e\x58\x5f\x99\xdb\xa2\x65\x88\x47\xbe\x20\x00\x6d\x38\xff\x58\x10\x41\x7a\x72\xc6\xdf\x17\x44\x1a\xe3\x07\xc6\x1a\xe5\xb4\x55\x37\x6b\x0d\x03\x11\x2e\x83\x21\x22\xb5\xce\x02\x29\x0d\x9f\x95\xfa\x84\x10\x22\xf6\xae\xc8\x1f\x01\xff\x2e\x58\xe7\x9e\x0c\xe9\x0b\x6d\xf5\xed\xf8\x39\x11\x96\x72\x9a\xf1\x5e\x58\xac\xb1\xa9\x10\x8b\x61\xc5\x60\x75\x99\x24\x0c\x8d\x75\x9e\x07\x40\x1b\x10\xec\x35\x66\x97\x8a\x8a\x17\xde\x49\xb7\x4d\x75\xd8\x24\x34\x37\x7e\xff\x1a\xdd\x84\xa9\xa5\xad\xb6\x7e\x76\xc3\xb5\x1f\x9e\xe5\x87\x0b\xb4\x01\xc1\x3e\x84\x88\xd6\xb4\x77\x76\x5a\x02\x6f\x06\x99\xab\x1a\x63\xd2\x9e\xc0\x1b\x43\x31\x68\xe1\xa5\x36\x23\x21\xa3\x34\x37\x7b\x16\x1a\xd0\x06\x04\x7b\x4e\x5b\x2d\xed\x31\x8a\x1b\x1d\x8b\x45\xbc\x06\xe1\xa9\x92\xc0\x21\xa9\xcf\x02\xf0\x14\x0c\xc5\xc8\xf3\xab\x36\x5a\xd2\x85\x5c\x40\x1b\x10\xec\x05\x6d\x59\x32\x03\x56\x14\x9b\xb6\x6d\xb5\x87\xa5\x8c\xfa\x45\x25\xa5\x54\x9e\x56\x72\x7c\xac\x51\x5a\x28\x0b\x53\xb3\x99\x05\x96\x04\xb0\x38\xd1\xe9\xb9\x13\x52\x65\x75\xde\x83\x9e\xdc\x8d\xce\xd9\x08\x2f\x9a\xd4\xe6\x0a\x85\xcf\x59\xc4\x45\x8a\x96\x06\xbd\x5b\x02\xb2\xc0\x2f\x21\x58\x9c\x78\x8c\x22\x55\xd7\x37\xf1\x1c\x77\x19\x7f\x46\x58\x6a\x19\x1e\x19\xf9\x64\xd4\xce\xef\xc1\xab\xcb\x62\x0d\x28\x4d\xe6\x05\x7b\x0a\xa0\x0d\x08\xf6\x21\xc3\x35\x78\x2b\x75\x46\x7d\xe3\x13\x6b\x95\x22\x6f\x73\xe9\xd0\xd8\xbd\xf8\xcc\x67\x2f\xd0\xf5\x67\x9f\xa6\xc9\x32\xe0\xf2\x03\x6d\x40\xb0\x67\x7d\x34\x8c\x23\xfe\x1e\xa6\xdf\x29\x19\xe3\xe9\xf2\x8f\xe2\xb7\xaa\x13\xfa\xc5\xbd\xa6\xdd\x89\x84\x97\xf7\x15\x2f\x39\x43\x81\xf8\x81\xc5\x89\x3f\xca\xe0\xd9\x4b\x73\xf1\x15\x08\xe7\x02\xb8\xf7\x4e\x05\x1a\x23\x15\x73\x71\x4f\xf8\x1f\x45\x9b\x3c\x76\xa8\x39\x3e\x7b\x00\xfc\xa4\xc0\xe2\xc4\x86\x97\x64\x24\xb9\xc4\x67\x58\x27\xce\xba\xd3\xc1\xc4\xc6\x8f\x3f\xb4\x3d\xfe\x5e\xc4\x23\x56\x15\x2e\xac\x1f\x92\xc0\x9b\x41\x0a\xb4\x01\xa1\xf8\x23\xef\x9b\x51\xe7\x90\xc4\xab\x7a\x8d\xce\x6c\x62\x28\xb7\x9d\xc3\x2d\x04\xcd\x30\xb1\xf2\xcf\x3a\x11\xec\x34\x56\x81\xbe\x7f\x5c\x0d\x08\xc5\xbe\x8d\x6c\x37\xc1\x6e\x01\xd7\x53\x9c\x64\xd2\x1f\x35\xd4\x78\x4c\x7a\x1b\xfa\x9a\x71\x67\x32\x16\x68\x52\xf5\xc9\x45\xcc\x78\x81\x36\x20\x14\x57\x3d\x2b\x94\x39\xaf\xd9\xc5\x9c\x41\x7b\x30\x18\x94\x2b\x11\x6b\x2b\x8c\xbd\xfb\x4a\xf9\xd7\xa4\xa9\xf9\xab\xfd\xd6\xdc\x03\x1e\xa0\x0d\x08\xc5\xf4\xa1\x4d\x15\x48\xbe\x12\x71\x01\xce\x4a\x69\x3f\x34\xa5\x52\xbc\x26\x17\x94\x66\xa2\x9c\xd0\xa5\x31\x52\xc9\xde\x32\x50\x53\x01\x6d\x40\x28\x0e\x7a\x3e\x1d\x13\x8d\x88\xdc\x5e\xa2\x4b\xf9\x99\x6e\x03\x3e\xf6\xb1\x0f\xc6\xc3\x31\xd8\x9a\x0a\x02\x1a\x2f\x9a\xf7\xef\xfd\x81\x13\x1b\x58\x9c\x48\xfd\xee\x61\xdd\x3e\x7b\xc9\xd1\x5c\xb7\x2a\x66\x90\xbc\xeb\xb2\x20\xb7\x12\x31\x21\x86\xe5\xb0\x93\xe3\xc3\x6b\xf6\xa9\x74\xe0\x12\x04\x2c\x4e\x5c\xfa\x1c\x97\x14\xff\x95\xca\x5c\x84\x45\xa4\x6c\x3f\x79\x25\x58\x49\xdb\x22\xaf\x2b\xb0\x83\x4e\x56\xba\xef\x08\x8a\xad\xe4\x31\xd0\x06\x84\x62\x2d\xd3\x63\x04\x7e\x76\xd6\x1a\x7f\x9a\x23\x7f\x9b\x4f\x3c\xbd\xcd\xbd\x01\xdc\x59\xf4\xfb\xf8\x0c\xdc\xfa\x8d\x02\x2d\xc6\x38\x40\x1b\x10\x8a\x67\x1b\x6c\xdb\xb4\x10\xac\xd6\xbb\xd3\x4c\xe7\x77\x67\xed\x42\x14\x9c\xd9\x79\xb3\x2a\x4f\x10\x30\xf3\x1f\x44\xce\x18\xca\x00\xab\x1f\x58\x9c\x68\x16\x78\x5a\x3a\x0e\x8d\x4e\xa5\x12\xc1\x9b\xe9\xbd\x34\x84\x28\x7b\xed\xde\x92\x54\x49\x7c\x65\xf8\xc4\x73\x0c\xd5\xd6\x16\xc8\x0d\x58\x9c\x18\x35\x3c\x29\xad\xe5\x34\xc1\xf9\x75\x8b\xf2\xb9\xa1\x96\x82\x8e\x4c\x62\xb1\x45\x76\x26\x59\x20\xf3\x46\x48\x08\x0e\xd5\xb9\x20\xd0\x06\x84\x62\xe4\xe9\x44\x36\xf6\x10\xcc\x96\x6b\xcd\xb7\xbe\xfe\xb3\x53\x13\x31\xda\x6d\xd9\xed\xaf\x27\xbc\x72\xda\x44\xa8\x79\x65\xed\x81\xdf\x29\xb0\x38\x51\x80\xfa\x07\x8d\xfa\xda\x37\x44\x9c\x8b\x24\x11\x3f\x63\x68\xcc\x6c\x27\xf2\xd8\x8c\x8d\x4e\xdf\xf1\x3a\xf7\xcf\x21\x4c\x79\xc0\x0d\x18\x58\x9c\xb8\x37\x95\x79\x21\x91\xfa\x54\x21\xda\x86\x2d\xf7\x80\x4e\x4f\xad\xf8\xf9\xae\x87\x41\xf2\x3a\xad\x96\xac\xe4\x70\x68\xcd\x3b\x60\x11\x05\x8b\x13\x67\x75\x87\x78\x96\x69\x4f\xdf\x53\xe9\x36\xe8\x37\xbf\x97\x4e\x5c\x78\x98\xe5\x54\x1e\xf6\xde\x72\x68\xcc\xa9\x12\xf5\xf1\x32\x70\x5d\x05\x16\x27\x7e\xb9\x78\x15\x45\xe1\x3c\xac\x80\xd0\x22\x5f\x6f\x57\x4d\x5f\xe2\x64\xdb\x57\x2c\xcf\x7e\xca\xcc\x13\xaa\x36\x1c\x37\xf3\x49\x00\x68\x03\x42\xb1\x5a\x56\xc4\x1b\xb5\x19\x76\xf1\xb9\x91\x2d\xe5\x2e\xeb\xe7\x35\x91\x26\x8a\xb3\xe7\xbc\xf8\xd3\x87\x74\x8d\x0f\x65\x37\x3d\x81\x93\x2f\x58\x9c\xe8\xf5\x76\x15\xb9\xac\xd3\x28\x69\xc7\x44\xb1\xc4\x43\x6f\x5c\xf5\xd5\x51\xb5\x41\x2b\xc5\xcb\xa8\x1f\x41\x7e\x67\x2a\xe2\xd4\xc0\x92\x0e\x16\x27\x26\x22\x87\xf3\x22\xcd\xe7\x62\xce\x07\x2c\x09\xfa\xc4\xb1\x3b\xb1\xec\x4d\x21\x1f\xc0\xd9\x76\xba\xde\xd3\x2b\x48\x85\x36\x67\x03\xda\x80\x50\x9c\xc0\x40\x64\xf4\x29\x90\x63\x2c\xa1\x2b\x59\xe1\xfc\x31\xab\xe1\x84\x50\xd2\x0b\x8d\x0b\xdf\xac\x7a\x4b\xac\xa1\x8b\x89\x02\xe0\x3e\xee\xb7\x38\xf1\x76\x41\x04\xe9\xf9\x60\x7f\x5f\x10\xf1\x1f\x63\xf0\xd6\xa5\xff\x7c\xed\x11\xd6\x2e\x82\x9e\x62\xd3\x07\x9b\xbd\xe1\x9c\xb7\x65\x93\xc2\x7f\xf6\x09\x6e\x66\x16\x1b\xb8\x2c\x04\xcb\x1f\x0f\x35\x13\xfa\x6e\xba\x65\x4f\x8f\xae\xdb\x9d\x7d\xd2\xb4\xc9\x54\x03\xcd\x22\x85\x11\xc8\x89\x72\x0e\x2a\xbf\xe5\xbd\x17\x00\xee\xad\xc1\xf2\xc7\xa2\xbe\x2f\x8f\x49\x70\x91\x32\xe7\xd7\xdd\x05\xfa\x4c\x14\xf6\x69\xae\x0a\xca\x45\xd9\xd5\x33\x32\xd4\x0f\xcf\xcb\x8e\xe2\x81\xd8\x83\xe5\x8f\x25\x9e\xc4\x45\x06\xf4\x70\x7b\x35\x46\xb9\x8b\xd2\xe7\x49\x44\x54\x6c\x30\x04\xfc\x6b\x9f\x4a\x1f\x87\x38\xd3\xb0\xa1\x25\xa2\x03\x6d\x40\xb0\x1f\x90\x0c\xdc\x31\x54\x3a\x7f\x22\x26\xeb\x6e\x54\x58\x5a\x13\x24\x62\x40\xee\xa4\xda\xbd\x92\x61\x95\x94\xe0\x33\x5b\x61\x04\xdc\x86\x82\xc5\x89\x6f\x5e\x0d\x49\xa1\xda\xc3\x37\xe5\xc2\x6f\xb4\xae\xc3\x9d\x61\x56\xb0\x2f\x39\xf8\xc5\xc9\xc1\xbd\x91\x60\x74\x71\xba\x91\xc4\x00\xda\x80\x60\x8f\x4b\xae\x1c\xf4\xe2\xd5\x65\x2d\x8e\x97\x17\x79\xfd\x74\x91\x2f\xe9\x50\x1b\x7f\x80\x73\x28\xa3\x63\x19\x06\x25\x65\x22\x26\x2c\xd0\x06\x04\x7b\xd4\xf5\xb9\x8c\xd3\xd6\x1a\x6e\x9b\x22\xc1\xb7\x84\xd8\x66\xf2\x30\xcc\xf3\x44\xe2\x8a\xe4\x35\xd9\x9d\xb5\x8b\xad\x99\xc9\x8c\x40\x1b\x10\xec\x1f\xf0\x23\xb8\x66\x7d\xb7\x78\xee\xdb\x7b\xa0\x53\xe3\xf5\x11\x9d\xae\x72\xcc\x6a\xbf\x69\x75\x62\x27\xe9\x57\x2c\xbf\x2a\x16\x39\xd0\x06\x04\xfb\x43\x7d\x71\xcf\xe3\xd6\xa3\x67\x1e\xdd\x22\x9e\xf5\x48\x5a\xcf\x52\x7e\xca\x06\xc0\x5a\xd2\xf0\x31\xc6\x05\x7e\x4b\x97\x22\x07\x96\x04\xb0\x38\x11\x47\xad\x32\x87\xaa\xf9\x7d\x01\xa6\x71\x2f\x7e\x2e\xd3\x81\x21\x8d\x37\x8f\xc4\x68\x8e\x5a\x9e\x15\xcd\xb4\xc5\xcb\x80\x47\xd0\x40\x1b\xb0\x85\x74\x99\x6c\x20\xda\xa6\xae\x67\xa5\x14\x71\x27\x61\xea\x40\x3e\x5a\xea\x03\x21\xec\x61\x2c\x8d\x01\xc3\x58\x2a\x8e\xa6\xae\x3f\xae\x06\xac\x78\xa7\x50\xe3\x52\x18\x58\x2e\x9d\xb5\x8b\xef\xbc\x8b\x87\xc1\x56\x27\xab\x1e\x3f\x11\xa8\x70\x09\x53\x9f\x80\xf2\xe6\x5b\x24\x00\xda\x80\x50\x7c\x03\x8b\xaf\x25\xef\xa7\x43\xef\xe0\x51\x79\x53\x86\x08\x4f\xbb\xf5\xa1\x0a\xef\x05\xbe\xd0\xa6\x65\xa2\x7d\x5d\x59\x2e\x05\xb0\xb2\x80\xc5\x89\xa5\xaf\x7e\xba\x96\xc6\xb0\x04\x61\x25\x86\x04\x24\xe7\x64\xef\x6c\xd0\xe7\x95\xc3\xe8\x76\xc6\xdc\x73\xa9\xd9\x6d\xaf\xb2\x07\x64\x5d\x1c\x60\x71\xa2\xca\x7d\x46\xd4\x5f\x70\x3d\x65\xfb\x45\xf8\xa7\x3a\x0f\x97\x7d\x35\xd8\x69\x4c\xdc\xd2\xcc\xf5\xb8\xb9\xaa\xa4\xd8\xf5\xc9\x80\x55\x17\x2c\x4e\xe4\x1d\x5c\x0f\x79\xad\xab\xc0\xbf\xbb\xa8\x41\x21\x15\x99\xe0\xcb\x74\xd8\x9b\x83\x78\x36\x50\x7e\xa2\x2d\xba\x82\x6b\x15\x84\x08\xb4\x01\xa1\xf8\x1a\xd7\xb3\xc4\x7a\xbd\x88\x7a\x82\x65\x71\x6e\xe3\x3e\x3a\x3b\xbe\x7e\x8c\xf6\x47\xbe\x59\x7a\xd6\xa4\x27\xfd\x5a\x0f\x8b\x84\x80\x36\x20\x14\xd7\x17\x4b\xf7\xed\x9b\x25\xf3\x14\x13\x68\x14\x7c\x89\xbe\xa1\xfa\x5a\x9f\xe4\x54\xad\x17\xd4\x0b\x4b\x98\x18\x43\xf9\x64\x10\x38\xb1\x81\xc5\x89\xaa\x8f\xf8\x3e\x1c\x77\x0d\x98\x3f\x18\xc6\x69\x90\x36\xc3\xa5\x3d\xe3\xfb\x55\x0c\x9d\x75\x69\x65\x40\x99\x64\xed\xf8\x78\xfa\x09\xd0\x06\x84\xe2\xf3\x76\xd4\x0f\xcb\xa2\x4f\x2c\x0b\x02\x8a\x1c\x9f\xff\xa4\x94\x90\xe0\x22\x0c\x54\x21\x57\x4b\x7f\x9f\xc4\x97\xec\xc3\x21\x0f\x5c\x3b\x80\xc5\x89\x1d\x4f\x34\x0b\x6b\x9e\xf9\x2a\xd1\xba\x64\x8d\x64\xa3\x2c\x1f\xb4\x37\xcb\x9f\xba\x90\x86\x51\xe4\x7b\x45\xaf\x6a\x51\xbc\x02\x7e\x35\xc1\xe2\x44\xea\x7b\x88\xf2\x05\xe6\x42\xcf\x99\x5b\xcf\x9d\x3b\xef\x15\x3f\xd4\x55\x3b\x46\x12\xb5\xf6\xa1\x80\x7e\x3d\xa8\xfa\xee\x97\x21\xf0\x84\x08\x2c\x4e\x7c\x43\x22\x2a\xfd\xdc\xb4\xd2\xc8\xd6\x4a\xde\x22\x50\xb8\x83\xbd\xca\x30\x78\x8f\xf7\x74\xc6\x48\x6c\xc7\x5b\xd3\x7a\x4f\x1a\xb8\x02\x06\x8b\x13\xf9\x51\xc9\xd3\x8a\xfb\x86\x64\x7e\xc9\x0b\xe2\x49\xd6\x89\x96\x27\xc1\xa2\xb0\x14\xb4\xcd\x2c\xe1\xfe\xa2\x61\xef\x8e\xa4\x07\x74\x50\x72\x80\xc5\x89\x3a\x5e\x56\x32\x35\xf5\x33\x07\x0f\x12\xbf\x28\xfd\x64\x55\x43\x98\x3d\x3e\x86\x47\x27\xeb\x5f\x58\x98\x96\x58\x62\xcd\xbe\x02\x7e\xc3\xc1\xe2\xc4\x68\xbb\x86\xf5\x4f\xc9\x0a\xcd\x9d\xf5\xc4\x94\x53\xdf\xa2\xab\x4d\xbd\x27\x5c\x42\x9c\x8e\x48\xac\x79\x0a\x74\xcf\x67\x9c\x58\x81\x36\x20\x14\x3f\xfb\xb0\xc1\x96\x48\x81\x07\x6b\xef\x9b\xc0\x1d\xcf\x92\x66\x26\x6c\x05\xf7\x18\x6f\x20\x6a\x47\x5c\xf5\x0d\x7a\xba\x7f\x27\x32\xd0\x06\x84\x62\x24\xb8\x03\x32\x49\x22\x27\x75\xe1\x08\x53\x3b\xd4\x69\xf3\x18\x29\x7a\x75\x3d\x04\x94\x7b\x5f\x28\x36\xef\xef\xae\xe2\xc4\x63\x03\x6d\x40\x28\xbe\x5f\x12\x25\xd3\x23\xaf\x1b\x23\xd8\xe3\x10\xab\x14\x64\xec\x6d\xd3\xc1\xab\x29\x12\xf5\x01\x73\x53\x43\xff\x63\xaf\x8b\x1d\x70\xf2\x05\x8b\x13\xe9\xe1\x30\x99\xc5\x24\x3b\xd9\x3f\x3d\x2c\x7f\x54\x4e\x01\xe3\x13\x8a\x49\x6f\xb3\x19\x95\x8c\xd2\xd2\x8b\x87\xa5\x45\x44\x0d\xac\x7e\x60\x71\x62\x05\x9e\xeb\x5a\xf0\x17\xd8\xf7\x88\xd6\xe3\x55\xf3\x5f\x7c\xf7\xae\xef\x23\xf0\x28\x53\x76\xa4\xa5\x48\x57\xc6\xe2\x65\x87\xfe\xf1\x49\xfd\xd9\x54\x0d\xe9\x29\xa8\x7f\x5f\x10\x45\x63\x2f\x6c\xa1\xcf\x16\x63\xc5\x96\x05\x08\x79\x34\xa4\xb7\x4d\x64\x6a\x50\xf2\x26\xbc\x2c\xcb\x7d\xb2\xc5\x12\x12\x29\x04\xdc\xdc\x80\xe5\x8f\x11\x29\x79\xcb\xf0\x5e\x8e\xac\x67\x29\x9b\x2a\x19\x91\xf2\x75\xf7\x86\x58\x10\x1d\x92\xad\xf3\x17\xe7\x8b\xac\x89\x0a\x9f\x03\x77\x25\x60\xf9\x63\x61\x4b\x46\xec\x23\xb6\x0d\xeb\xed\xfb\xac\x30\x4f\x3a\xc3\x86\xe4\xc2\x3f\x6c\xa1\x59\xcd\xa2\xcb\xd1\xc4\xa6\x58\x5f\x5c\x00\x07\x13\x2c\x7f\x4c\x38\x62\x18\x45\x11\xc2\x43\x7f\x78\xb6\xf3\x39\x73\xfb\x6d\x03\x77\x66\xe2\xe9\x0a\x62\x81\x72\x4c\x90\x18\x3f\x9b\xfd\x0f\x60\x65\x01\xfb\x19\xe3\x80\xb5\x4b\x43\xe2\x8d\xf3\x02\xfc\x37\xad\xae\x15\xd6\x85\x92\x27\x6a\x4d\x69\x85\x6d\x96\xa9\x9a\xe4\x22\xcb\x93\x2d\x1c\xc0\xca\x02\x16\x27\xd6\x4c\x35\x6f\xce\xc8\x54\x4e\x62\xbc\x25\x83\x55\x79\xfa\x6c\xbb\xe1\x51\x4d\x41\xb9\x31\x16\x66\x85\x9b\x13\x09\x79\xda\x0e\x70\xb6\x06\x8b\x13\x0d\xac\xb1\x91\x93\x71\x7a\xa5\xbe\x42\x7f\xa9\xbe\x0c\x58\x96\xaa\xf1\x65\x44\x5f\x75\xff\xc9\x44\xd9\x23\x61\x7e\xfd\x03\x03\xb8\x9b\x05\x8b\x13\xd1\xf8\x37\x8a\xac\x12\x9e\xdb\xaa\xaf\x9a\x1c\xd9\x6c\xdc\x47\x70\xbf\x31\xbd\xbf\x28\x5a\x4a\x90\x9d\x12\x2d\xeb\x5c\x6b\x8e\x0a\xb4\x01\xc1\x9e\xcb\xa0\x35\x83\xa3\x04\xc6\xea\x83\x33\x6f\x52\x56\x18\xe5\xbb\x32\x4c\xc1\xa9\xb2\xb3\x17\xe1\x2e\xbd\x72\x3f\xbc\x25\xa8\x58\x80\x36\x20\xd8\x9f\x18\x3d\x36\x33\x55\x5b\xcf\xaa\x66\x9d\xe6\x27\xd3\xd0\xf2\x79\x43\x68\x18\x19\xa6\x58\x50\xc0\xec\x54\xf6\xbd\x76\xd8\x9d\x04\x68\x03\x52\xbc\x7d\x65\x32\x78\xe5\xe1\xbe\x66\x5c\x84\x3f\x4b\x85\x6b\x26\x95\x64\x1c\xd4\xdc\x46\x4e\x5f\x4a\x0f\x08\xef\xdd\x95\x9b\x32\x03\x86\x0d\x60\x71\xa2\x4b\xa8\x3e\xaf\x64\x67\xff\x63\xe8\x34\x6c\x0d\xd2\xa7\x49\xcf\xf5\xb7\x1d\x52\x61\xb4\x53\xd9\xe1\x53\xa0\x93\xf1\xbe\xfe\x00\xce\x01\x60\x71\xa2\xcd\x93\x8f\x1e\xc3\xcb\x54\x56\x98\x7a\xcc\xbd\x04\x8e\xab\xb0\x25\x1d\x22\x5d\xdf\xe2\x82\x7d\xbb\x1d\xe4\x69\x3e\xd2\x2b\x00\x4e\x88\x38\xc1\xe2\x44\xb4\x09\xdf\x9e\x6a\xf1\xaa\x05\xe1\xef\x96\x9e\x7b\xc9\x42\x2d\x59\x43\x7c\xb1\xa5\x9a\x3e\x1c\x69\x2c\xca\xd5\xc8\x3f\x3d\xe0\x81\x36\x20\x14\x2b\x8f\xfc\xd2\xb9\x97\x9c\x8e\xf8\x2e\x30\x2e\x46\x66\x84\x22\x87\x7f\xec\x8a\xaf\x26\x52\x79\xd1\x22\x56\xc2\xb1\x86\xbf\x91\x06\x68\x03\x42\xf1\x61\x62\x9f\x16\x9c\x33\xa6\x35\x17\x77\x2d\x83\x45\x78\x19\x4f\x39\xf9\xee\xc5\xbd\xc3\x1f\xff\x0f\x61\x67\xd9\x57\x45\xb7\x07\x50\xba\x3b\xa4\x3b\x45\x42\xe9\xee\x46\x01\x69\x90\x54\x42\x90\x90\x12\x90\x6e\x91\x92\x6e\x04\x29\x49\x09\x69\x04\x44\xba\x95\x94\xee\x06\x11\xa4\xa4\xee\xfb\xed\xb3\x7f\xf7\x0b\x2c\x0e\xe7\xac\xd9\xf3\x9f\x59\x13\x09\xbc\x9f\x5a\x13\xd6\x7d\xee\x11\x83\x18\x58\x4e\xbc\xb8\x5e\x38\xed\x88\xeb\xd7\x63\xf9\x1b\xd3\xf7\xc5\xb6\xac\xce\x77\x2c\x9c\xab\x91\xd7\xba\x7b\x7f\x3d\xdb\xe1\x3c\x9e\x01\xc4\x40\x2c\x6e\x78\xe8\xcf\x54\x81\xfe\x02\xa9\x68\xce\xcd\xcf\xd9\x8f\x7a\x91\xa1\x6d\x7d\x84\x27\xa7\x53\x9c\x39\xca\xf5\x9b\x55\x06\x9d\x24\x88\x81\x58\x1c\xfb\x3c\x27\x3f\xfe\x17\xef\x62\xd2\xdf\x3e\x95\x38\x65\x5a\xc6\x24\xbd\xb5\x4e\x82\x85\x1b\x9e\xb3\xbc\xcb\xf5\x43\xa4\x54\x44\x10\x03\x1d\xa4\xa9\xf7\xf3\xdd\xf0\xfd\x9e\xb9\x62\xb0\x73\x09\x3e\x98\x58\x30\xb9\x76\x48\xe0\x6a\x19\x46\x0f\xc9\xf5\xe4\xec\x10\x64\x02\x31\x10\x8b\x39\x25\x84\xbf\xd5\xb2\x3c\x69\x2f\x65\xcf\xee\x25\xf3\x7a\xbd\xc3\x12\x7b\x19\x93\x42\xea\x85\x99\x23\xf3\x6b\x77\x28\x3f\x80\x1c\xc4\x40\x2c\x56\xc0\xe3\x0c\x7b\x2d\xb3\x69\x28\x8f\x8a\x33\xa8\x26\xca\xbb\xf2\x9a\x9e\xbd\x21\x40\x26\x72\xea\xfd\x87\xda\xae\x0f\x69\x78\x18\x20\x06\x62\xf1\x1f\xbc\xe1\x06\xc1\x24\xfa\xea\x6f\xbd\xbb\xe8\xad\xc8\x2f\x4e\xfb\x4e\xa9\x1e\xd6\x89\xfa\x5e\x25\x45\xe0\x20\x58\x62\xa3\x80\xbf\x14\x2c\x27\xaa\xe1\xbd\xbd\x2f\xec\xac\x1e\xd7\xed\xe8\x7e\x74\x5a\x60\xd1\xcc\xdf\xb1\x12\x5f\x63\xb4\x42\x43\xd1\xfc\x39\xb7\x9e\x0d\xbc\x8f\x94\x0f\x96\x13\x6b\x28\x1f\xaa\x87\x9b\x27\xdc\xe9\x7f\x66\x74\xee\x73\x81\xc5\xaa\xcf\x41\xa6\xc5\x8e\x84\x4b\x13\xd8\x23\x4f\xee\x43\x69\x4e\x01\x62\x20\x16\xff\x38\x96\x31\x6f\xbe\x7f\x9c\x1c\xd4\xb0\x40\x70\x97\x56\xf9\xfe\x9f\xb5\xc1\x38\xe2\xdb\x3a\x44\x0a\x82\x26\x86\x92\xe7\xfc\xe0\x77\x03\xcb\x89\x7b\x98\x46\xaa\x4c\x8c\x53\x13\xf4\x19\x3f\xda\xe2\x7d\xdf\xca\xf4\x6f\x75\x6e\xdf\x48\x6e\x47\x2d\xcc\x4c\xfd\xd2\x8e\x28\x21\x01\x31\x10\x8b\xdb\x58\x1d\x50\x34\x5a\xd3\x6f\xa7\x1a\x58\x1f\x58\x48\xb1\x20\xc9\x88\xf9\x79\x6a\xc7\x26\xc8\x38\x48\xcc\x64\xea\x47\xfd\xc6\x05\x31\x10\x8b\x43\x43\x31\xed\x3d\x1d\x88\x5d\x63\xbc\xba\xbf\xc6\xcf\x9f\x8f\x86\xc5\xdf\x51\xad\x4e\x6d\x3e\x6d\x23\xc3\x2f\x92\x3f\x5a\xe5\x03\x31\x10\x8b\x37\x2a\xba\x9c\xc8\x92\x0b\xe8\x49\x4e\x76\x8a\x94\xe4\x2e\x99\x04\xe3\x4e\xf5\x49\xff\x58\x87\x6c\x28\x47\x7d\x51\xae\xee\x10\x03\x31\x10\x8b\x9f\x0f\x27\xb7\xe4\x94\xfc\xd8\xe2\x46\xbe\x25\xae\x63\x70\x28\x61\x14\x16\xd3\xe0\x54\x5f\x72\x54\x45\xa2\x21\x75\x39\xb7\x40\x01\x31\x10\x8b\xd5\x6a\x86\x22\x5a\x0c\xea\xdd\xd0\x83\xb8\x72\x3b\x72\xab\x76\x0d\x90\x7a\xd1\xe2\x83\xf4\x59\x64\x98\xb2\x52\x09\x0a\x8c\xc0\x6d\xea\xc1\xbf\x17\x55\xff\xbf\x67\xbd\xff\xf7\x40\x44\xb1\x54\xbd\xe9\x9f\xfc\xe2\x2d\xc7\xb3\x3f\x3a\x52\x1e\xb3\xdf\xd1\x6d\xd5\x02\xde\x3e\xba\x55\xc9\xbd\x53\x46\x42\xf4\x42\x11\x5c\x75\x61\xfd\x71\x67\xed\x48\x91\x3f\x5c\xa5\x7a\x78\xa6\x2d\xd5\xe2\xa3\x7e\x6f\xa8\x85\x6a\xea\x27\x7f\x05\xea\x0a\xd6\xa9\x22\x8b\x24\x76\x66\x10\x03\xd1\xfe\xb6\xa5\x81\x29\x8c\xd0\xef\xbe\xc7\x67\xc6\x4d\x65\xdc\xe3\x40\x2c\x53\xde\x12\x96\x35\xc2\xa2\xd0\xa1\xa9\x9f\x7f\xd7\xb1\x84\x41\x0c\xec\xf8\x51\x79\xb1\x6b\x76\xc0\x47\xb2\x98\xb1\x4f\x62\xa5\xe1\x40\x80\xe3\x9d\x89\x6f\x78\x75\x59\x42\x58\xcc\xf1\x16\xc6\x62\x0c\x37\x88\x81\x68\x5f\x8f\x5d\xf6\x71\x8e\x0e\x67\x0a\x93\xbc\x67\xfc\xce\x66\x2a\x52\xe8\xe3\xe3\x9c\xa1\xa2\x30\x6d\xad\x34\xea\x98\xd7\x31\x32\x74\x20\x06\xa2\x7d\x17\xfd\x72\x2e\x8a\xff\xae\xbd\x33\x72\xde\xdd\x47\x58\x05\xfd\x36\x79\xb1\x94\xac\xb1\xaf\x71\xda\x0c\xad\xd9\xa4\xef\xbf\xfc\xe7\x9f\x82\x68\xff\xf9\xd9\xa3\x26\x3b\xba\x7c\x6a\x4a\x04\x92\x84\xfc\x27\x09\xbe\x4f\x59\x3f\x74\xbe\x2b\x1a\x16\xf9\x98\x5f\x88\xfc\x59\x7b\xe5\x9f\x5f\x0a\xa2\xbd\x0b\x12\x2b\xa1\x7d\xb5\xb8\xe0\xdf\xcc\x8f\xbb\x1f\xf2\x30\x77\xbb\x0d\x71\xce\xbf\xae\xbf\xaf\x51\xc9\xb8\xff\xc2\x73\x5a\xee\x1e\x88\x81\x68\x2f\x66\x8d\x1f\xa8\x3a\xe6\x96\xb4\x43\x84\x67\x91\xd5\x92\x6b\xab\xce\xf2\x45\x70\x2d\x58\x8e\x2c\xde\xb7\xf0\x27\x65\x6b\x95\x00\x88\x81\x68\xcf\x3f\x92\xa5\x7d\xcc\xc5\xcc\x49\x58\x40\xa8\x96\xd6\x65\xf3\xe1\xcc\xb8\x3d\xc0\xed\x0b\x5a\xf9\x8d\x15\xa2\x5d\x94\x01\x33\x3a\x88\x81\x2c\xde\xd3\x17\x35\xb6\xde\x7f\x31\x25\x06\xd0\x95\x76\xcd\xf3\x99\xb3\x5b\xee\x49\xb2\xac\xff\x96\x92\x26\x5e\x8c\x14\x51\x8b\x39\x03\xbf\x1b\x58\x4e\xac\x7e\x65\xb0\x3c\xeb\x64\xe9\x8f\x7d\x84\xaa\xe6\x2f\xb6\x13\xca\x52\x99\xf6\x0b\xd9\x8b\x52\x4c\xea\xf8\xb5\xe6\x85\xb1\x1d\x3d\x88\x81\x58\x7c\x13\x2f\xb1\xbc\xd3\x80\x36\xf9\xcd\x19\x97\xbf\xe4\xde\x15\x6e\xfb\x75\x93\xc5\xfb\x1e\x7a\xca\x1a\x84\xfc\xf4\x1d\x2e\x6e\x6c\x10\x03\xb1\x78\x7a\x7f\x4d\x21\x27\xcc\xf5\x2d\x59\xb7\xda\x07\x6e\x79\xec\xe7\x8a\x8f\xd7\x32\x8d\xac\x28\x31\x9d\x79\x84\xb3\xd1\x1e\xa3\x90\x82\x18\x88\xc5\x77\x34\x95\x05\xa7\xb1\x33\x45\x77\x6a\xed\xd0\xc7\xb9\xce\xb1\x88\x44\x90\x36\xff\x06\xf6\x13\xa8\x04\x3b\x8b\xc7\x24\x5f\xf0\x80\x18\xd8\x23\x41\xc8\x63\xd8\x6b\xad\x8c\x77\x8e\x9b\x09\x4f\x64\xd7\xc3\x8c\x31\xc2\x34\x69\x35\x2e\x25\x88\x88\x67\xdf\xa9\xf0\x34\xf4\xb2\x81\x18\x88\xc5\xf7\x9a\xbb\xdf\x24\x4b\x18\x10\x17\x55\x52\xc8\xb5\x08\x4c\x77\x1e\xa3\xe5\xf7\x35\x6b\xba\x5e\x53\x07\xbd\xfb\x8d\xd0\xea\x4e\x00\x62\x20\x16\x57\xad\x0e\x21\xdf\x61\xd9\xa4\xed\xbb\xca\x7b\x6c\x3a\x81\xc8\x28\xfd\x7d\x8d\x67\x03\x27\x9b\xc7\xd7\x58\xfa\xf2\xab\x38\x96\x08\x88\x81\x58\xcc\x9c\xbd\xcd\x99\xaa\x6a\x2a\xad\xdf\x96\x74\x27\xed\x5e\x8f\x15\xc1\x3e\xa3\x52\x99\x5f\xd4\x03\xaf\xf5\x22\xed\xe0\x4e\x54\x42\x10\x03\xb1\xb8\x83\x5b\x5c\xe9\xa1\x63\xbb\xaa\x39\x77\x47\x21\xf9\x5a\xd1\x9f\xe5\x4e\xdd\xcd\xd8\x60\xe4\xb2\x68\xdd\x8d\x4f\x52\x02\xa3\xe0\x24\x03\xcb\x89\xbe\xc1\x6d\x1c\x48\x8d\x76\xe7\x9f\x92\xbc\x37\x32\xb5\xe5\x06\xc3\x4e\x2f\x5d\xad\x17\xe8\x67\x46\xa8\xce\xee\xe2\x9a\x3e\x07\x4e\x09\xf2\xc1\x72\x62\x33\xe3\xb4\xc7\xf3\xb8\x01\xe1\x58\x5f\x46\x6d\x15\x4b\xc7\x31\xa1\x91\xaf\x04\xe8\x26\x93\x65\xa6\x59\x56\xd7\xbd\xbc\x4f\xc1\xbd\x35\x2c\x27\xf6\xf0\xe6\x8d\x6f\x36\x18\x19\x84\x04\xeb\xc9\x77\x79\x52\x3c\x97\x3d\xcf\xa0\xdc\x33\x23\xaa\x09\x9a\xa8\x59\x15\x5c\x30\x00\xb7\x29\x58\x4e\x54\x2a\xdd\x2e\x8b\x08\xd5\x18\x71\x6d\xe5\x3e\x68\x4a\x42\xde\x2b\x4d\x3f\xe7\xd9\x93\xfb\xab\x12\xbb\xe1\xb0\x35\x23\xa4\x00\x4e\x32\xb0\x9c\xa8\xa0\x3b\xd2\x9a\x86\xc3\x68\xdc\x11\xe4\xda\x7e\x97\xc7\x95\x17\x09\x47\x5a\x4c\xd1\x5a\xf6\xf7\xb1\xd3\xd1\x18\xab\x08\x2d\xb8\x7f\x84\xe5\x44\x35\xe4\x3b\x47\xb7\x47\x06\xb8\xb9\xc6\x85\x91\x02\x1f\x62\x4c\xe7\xd0\x8a\x54\xd7\x26\x5f\x66\x45\x13\xbd\xa8\x15\xe2\xba\x01\xc7\x7a\x58\x4e\xd4\xfc\xad\xeb\xbf\xe6\xf9\xe5\x16\x2d\xa1\x05\xc1\xea\x19\x7e\x6c\x99\x8a\x27\xce\x3c\xb2\x5f\xbf\xdb\xaf\xa8\x82\x8f\x2c\x2a\xe0\x22\x0a\xcb\x89\x4f\xbe\x61\x60\xd3\xfb\x5b\x4f\xae\xc4\x15\x08\xc4\x99\x51\xf2\x2a\xa7\xf8\x6d\xe2\x04\x64\xc5\x19\x7e\xbd\xbd\x7f\xe4\x23\x05\x5a\x0c\xcb\x89\x58\xc6\x16\x94\xc2\x37\xa1\xc4\x58\x25\xed\xab\x86\x4a\xcc\xb6\xb8\x1d\xf2\xef\x36\x43\x83\x49\xbf\x36\xed\x8e\x34\xde\x35\xe6\x02\x31\x10\x8b\x49\x88\x38\xd3\xab\xdc\xa4\x63\xbb\x8b\x7d\x7c\x12\xd9\x66\x5a\x9c\xd1\xb9\x0f\x54\xfa\x3b\xcd\xd7\x37\xfb\xb2\x3d\x5b\xb2\xfe\xf9\xa7\x20\x16\x0f\x76\xc7\xd2\x59\xc6\x3a\xd7\xf0\xa5\x29\x78\xa1\xa5\x3a\xbe\x4e\x7a\x8c\x1e\xb9\x41\x46\x1a\xa8\xfb\xcd\xfd\x26\xb9\x2d\x09\xdc\xc2\x61\x39\xf1\x4a\x64\x36\x37\x29\x5b\x49\xf7\x6d\xfa\xd9\x92\x28\x5a\xf8\xfa\xdd\xb5\x6a\x35\x93\xf8\xfb\x4f\x67\x53\x1e\xb8\xb1\x25\x80\xcf\x2e\xe1\x13\xf8\xf7\xa2\xea\xff\xf7\x46\x9b\xff\x1e\x88\x06\x11\x69\xe9\xb7\xbd\xe9\x8e\xb5\x47\x86\x17\x77\xa8\x5a\x29\x90\xba\x1e\xbf\xa1\xfe\xd3\x16\xd7\xd8\x5e\xfe\xe9\x0b\x27\x25\x78\x1c\x00\xeb\x8f\x33\x3e\x5c\x39\xd3\x0a\x47\xd5\x64\x9a\xab\xa6\xa8\x2b\x6a\x23\xda\xed\xf3\x4e\x17\x06\x11\xd1\x82\x9e\x3c\xd1\xc4\x13\xbe\xe0\xe2\x0d\xeb\x8f\xb4\xfa\x69\xb9\xe6\x84\x57\xf6\xba\xb2\xe9\x8a\x96\xf7\x2a\x49\xd8\x3e\x07\xb4\xc5\x50\x56\x29\xe2\x64\xb5\xcd\x77\x49\xb6\x22\x80\x18\x88\xf6\x6f\x2e\x03\xde\x09\xf0\xb8\x14\x3d\xf5\x4f\xd3\x36\xad\x5b\x52\x19\x99\xce\xfc\x15\x6c\x46\x16\xc5\xf7\xab\x2c\x13\x43\x18\xfb\x9f\x4f\x03\xbb\x1c\xb5\x86\x87\x23\xec\xce\x30\xa6\x2e\x9b\xd8\x0b\x1e\x9e\x9c\xab\xd3\xa6\xc4\xe4\xd6\x8f\x16\xbf\x87\xfa\xea\x4e\x8c\x70\x56\x41\x5f\x61\x39\x31\x4e\xe6\x8e\x5b\xb3\xde\x66\xea\xb5\xfa\xa6\x41\x9e\x60\x8b\x60\xa7\x92\x45\x85\x53\xfe\x15\x0d\x0b\xdf\x84\xd5\x49\xbf\x2c\xe8\x2b\x2c\x27\xc6\x9f\x8b\xf2\x20\x04\x90\x48\x0f\x4d\xd6\x78\xbb\x60\x7f\xcc\xb2\x40\x0d\x62\x75\x3c\xca\xe0\x70\x33\xe9\x18\xcd\x98\xd0\x01\x27\x6f\x58\x4e\x5c\xdd\x08\x7f\xa1\xf2\x20\xa1\x2e\xde\xb4\x5c\xb2\xb0\x6d\x68\xf2\x12\x1b\xd5\x90\x0e\xb1\x9f\xc8\xb3\xfd\xb9\xab\x06\xe9\x26\xb8\x63\x83\xe5\x44\x8d\xc4\x13\xeb\x8b\xbd\x60\xee\xf8\x7e\xe4\xca\x74\x6f\x2f\xce\x25\xb5\x52\xc3\xe8\x9c\x55\xee\x2f\xc6\xe4\x65\x9d\x98\xbe\xe0\xe2\x0d\xcb\x89\xc4\x9a\xe9\x78\x17\x4b\xef\xa9\x5e\xe5\x71\xf5\xdf\x08\x57\xa2\x9f\xbc\x52\xdf\x48\x41\x5f\xb9\x33\x43\x7e\xc2\x72\x45\x26\x00\x8e\x20\xb0\x9c\xc8\xfb\x76\x37\xa5\x6d\x44\x05\x1d\x63\xf7\x98\x74\x20\x68\x47\x7d\x53\xfb\xd6\xc1\x06\x59\xeb\xa3\x30\xbb\x69\xb3\x13\xf1\x13\xf0\xc0\x0f\x96\x13\x0d\x4d\xe5\x9d\x5b\xaa\xa5\xef\x8e\x9e\x91\x8b\xe7\xd0\xf7\x7a\xde\x63\x3b\x27\x9c\x44\xa2\x65\x94\xba\xb0\x5c\x6b\x64\x25\x06\x8f\x66\x61\x39\x31\x2e\xe0\x91\x42\x7d\xab\xb6\xed\xe4\xcf\x30\x6b\x91\x04\xd4\xef\x9f\x48\x08\x3d\x17\xbc\x48\x37\x14\xce\x43\x9b\xf4\x1d\xc1\xdb\x60\xf9\x60\x39\x31\xee\xac\xfe\x81\xfc\x23\x7e\x25\x39\x3a\xfb\x8d\x5e\x0f\xd1\x83\xe6\xec\x22\xbc\xfa\x1a\xe1\x83\x93\xea\xd6\xf6\x48\x29\x59\x70\xc7\x06\xcb\x89\xcd\xeb\xe9\xd3\x3d\x1e\xf8\xd1\x4b\xdf\x0a\xe5\xa9\xab\x65\xcb\xcb\x39\x12\x1d\x3d\xbc\x99\xba\x12\xb6\xa9\xfd\x65\x32\xdf\xd1\x80\x18\x88\xc5\x84\x24\xa5\x94\x7d\xed\x95\xdf\xee\x12\x94\xe2\x6e\x35\xcd\x59\x7c\x4c\x1b\x67\xf4\xe1\xaa\x95\x9a\xf8\x29\xa0\xf9\x67\xf0\x07\x2d\x88\x81\x58\x9c\xd0\x40\xd6\x5a\xcf\xed\x3c\xac\xcd\x83\x2e\xe7\x73\xfa\xcc\x6e\x42\x95\x65\xd3\x9d\xcb\xf6\xc1\xbb\xbf\x3e\xa4\x07\x5c\x49\x0f\x40\x0c\xc4\x62\xdc\x5d\x9a\x47\x89\xf4\x8d\xdb\xe8\x39\x85\xb1\x38\x2a\x39\xb8\xc8\x0c\x54\x84\xec\x0d\xc7\x9e\x6f\x78\xe4\x79\x98\x82\xca\xa8\x41\x0c\xc4\xe2\x80\x3d\xff\x9e\x03\x87\xf9\xc8\x7e\x4e\xa9\xb0\xfd\xf5\x2b\xcd\x91\x35\xbf\x09\xac\x79\xec\xa2\x2c\x29\xac\x6d\xb9\x80\x78\x70\x6f\x0d\xcb\x89\xbc\x9c\x66\x4b\x93\x49\x64\x0d\x3d\x99\xfa\x65\x5b\x6e\xc7\xb5\x86\x7e\x76\x77\x86\x3b\x0d\x69\x85\xde\x5b\xcf\xa7\x5b\xa4\x83\x5b\x38\x2c\x27\xee\xe0\x0e\xa0\x09\x6d\xd6\x6d\xed\xdb\xfc\x90\xd2\xa0\xcb\x90\x7a\x5f\x8c\xc9\x89\x6e\x11\x12\x12\x5b\xb0\xca\x86\xeb\x84\xc9\x0e\x62\x60\x8f\xf9\x90\xa2\x58\xc1\x4e\xbd\x50\x9f\x27\x34\x21\x7a\xf7\xa0\xa3\xce\xfd\x35\xf5\x84\x79\xe4\xe2\x21\x6f\xe9\x5e\x6d\xc6\xc5\x2f\x70\x02\x86\xe5\x44\xb4\xdd\xbe\xf8\x3f\xcd\xc9\x57\x95\xbd\x8c\xd8\x85\x2c\xcb\x36\xcc\x68\xd8\xa5\xee\xec\x33\x23\xeb\xa8\x05\xe1\x17\xa5\x48\xe0\x79\x4e\x58\x4e\x2c\xc7\x3e\x9f\xf4\xe4\x25\xb8\xc9\xe4\x8c\x31\xb1\xa6\x72\x89\x64\x0d\x6c\xe8\x2e\x32\xa4\x18\x79\x67\xfd\x5c\x21\x2a\x2d\x84\x12\xc4\x40\x2c\xa6\xcd\xa2\xea\xcf\x56\x6b\xcf\xb2\x31\x62\xcb\x33\x7d\x50\x42\x57\xaa\xdf\xeb\xfd\xa1\x7c\xcd\xe2\x91\xc0\xbd\xec\x8b\x2e\x64\xf0\x88\x1b\x7a\x77\x62\x40\x5e\x72\xe7\xe3\x75\xbd\x36\xa9\x1a\x96\xa8\x23\x3a\x77\xca\xca\x3f\xa9\x98\xe7\xd9\x9f\x22\x7a\x06\x76\x33\xd5\x8c\xc1\x09\x18\x96\x13\xad\x29\x29\x98\x55\x1c\xd2\x66\xf9\xee\x04\x71\x1f\xe1\x3f\xc6\xd4\x34\xee\xa0\x7b\x7f\x1f\xa9\xb9\x23\xce\x90\xf8\x0e\xda\xa3\x7f\x7e\x70\x88\xc5\x45\x6a\xe8\x08\xda\x3b\x4f\x18\x3f\x8c\x09\x37\x3e\x77\xe1\xe0\x4f\x13\x16\x46\xe5\x35\x09\xd7\xb5\x6a\xd5\x73\xf1\xa2\x6a\xf9\xe7\x2b\x86\x58\x1c\x42\xa2\x1e\xbd\x2f\x9f\xdb\xa3\x14\x7f\x25\xec\x3e\xae\x72\x16\xae\x86\xa9\xcf\xf6\x9a\xaf\xb3\x18\x63\x57\x94\xc7\x7a\x0b\xb8\x5f\x9e\x0f\x96\x13\x2f\x90\x12\x43\x98\xe6\xa9\x9d\x63\x3e\x84\x88\x6e\x4e\x87\xa1\xae\x60\x2c\x2b\xf7\x32\xa0\x1c\x85\x84\xdb\x27\x7a\xd8\x66\x60\x82\x18\x88\xc5\xd8\x2f\x5e\x71\xe6\x9b\x33\x1a\xcf\xd5\xef\x62\x5b\x25\xf6\xea\x4d\xa3\xbd\xb6\x8a\xe1\xd1\x95\xa4\xc0\x1e\xa1\x7b\x7a\xf9\x10\xdc\xc2\x61\x39\x51\x61\x6e\xe0\x7b\x75\x5a\x3b\x5b\x9d\x73\x99\xca\x9e\x5d\x02\xe5\x2d\x67\x90\xab\x00\x95\x45\x3c\xad\xe8\x06\x33\xf7\x1d\x7f\x70\x20\x12\xfe\xf7\xa2\xea\xff\xf7\xde\xbe\xff\x1e\x88\xae\x1d\xfa\x84\x36\xad\x68\xd2\xab\x6d\xb2\xbf\xbc\x6b\xcc\x74\xb5\xa4\xbd\x30\x88\x68\xff\x8c\x25\x24\x72\x45\xaf\xcd\xff\x16\x3c\x9a\x85\xf5\xc7\xef\x0c\x1c\x31\x9f\x52\x9e\x47\x9b\x98\xeb\xd1\x3e\x9a\x7f\xef\x4e\x1c\xb5\x92\x43\xde\x9d\xa8\xfe\xe8\x76\xa8\xa6\xda\x30\x00\x3c\xd2\x87\xf5\xc7\x08\xf6\xbb\x9b\xeb\xda\xc5\x77\x4b\x0b\x52\x28\x94\x86\x7d\x82\xef\xa1\x3e\x1b\xf5\x57\x0b\xe3\xc8\x8c\x5f\x61\x17\x3d\xb7\x00\xb7\x1e\x58\x7f\xc4\xfd\x12\x2e\xee\x66\x97\x86\x36\x85\xd8\x65\xf2\x2c\x3b\xdd\x8c\xcf\xe0\x00\x71\xb4\xa5\x9f\x7a\x38\x4d\xd2\x6f\x51\x28\x0b\xdc\x07\xc0\x6e\x67\x9c\x41\x9a\x1d\x33\xf0\xd3\x4e\xac\xa8\xe3\xae\xf5\x5c\xcb\xe9\x88\xdf\x1d\xac\x57\x34\x99\x28\x62\xf0\x5b\xa6\x89\x18\x3e\xfb\x07\x03\xd1\xbe\x9f\xb8\xfd\xd3\xc1\xb3\x5a\x6c\x24\xcf\x08\x6d\x21\x8b\x48\x3f\xc3\xb5\x6d\xf3\xcc\xcf\xf4\x37\x28\xc4\x15\x3c\xfc\xc3\x8b\x1c\x20\x06\xa2\x7d\xac\x86\x8b\xe5\x9d\x96\x80\xae\x26\x2c\x19\x7d\x57\x3d\xdf\x32\x11\xbc\xe2\xd5\x9c\xc3\x1f\x41\xcb\x08\x8a\x85\xfd\x0e\x6c\xe0\x08\x02\xcb\x89\x61\xa7\x96\xed\x88\x32\x1e\x99\x4c\x68\x81\x49\x5b\xe9\xcb\x26\x16\xcd\x21\x4f\x9a\xbd\xbc\x4b\x95\xb3\x68\x8c\xbe\x85\x7f\x00\xb7\x65\x58\x4e\xc4\x4d\xd6\xfe\x53\x2d\xa2\xa2\x68\x70\x8c\x33\xba\x6e\x9e\xb4\x72\xde\x8b\xbe\xc1\xc1\xfe\xe7\xf5\xc8\x29\x2d\x91\xa4\xee\x38\x38\x82\xc0\x72\xa2\xd9\x56\xca\x48\xb4\xf6\x82\xdf\xd5\x57\x17\xd1\xf6\x39\x89\x85\x3b\xb6\x72\xbd\x38\xbc\x3a\x17\xb4\x7d\x91\x95\x07\x51\xd3\xe0\x92\x00\xcb\x89\x43\xb1\xeb\x7c\x6a\x1b\x4a\x68\xab\x24\x59\x37\xbf\x22\xbd\x39\x59\x7b\x8a\x04\xe7\x06\x8b\x6a\xc5\x66\xdb\x87\xb6\x62\xc2\xff\xf9\xa7\x60\x8f\x89\x5c\xfe\x7c\x5a\xd7\xb2\xbc\xc4\x85\xc3\x1e\x6d\xf2\x52\x0c\xb3\xbc\x79\xbc\x37\x31\xcd\x4a\x71\x8e\x8f\xde\x05\x39\x48\x17\x1c\x16\x61\x39\x51\x5c\x7d\x5a\xf4\x4f\xbe\x6a\xad\x79\x04\x7a\xa9\x78\x7c\x92\x5d\x1b\xcf\x4c\xb7\xc5\xa9\x1a\x59\x94\x5e\x07\x46\xc8\xc6\x3f\xc7\xd6\xb0\x9c\xf8\xe9\xc1\x75\x5d\xf5\xe2\x67\xae\xa1\xfb\x76\x4e\x46\x99\x27\x51\x0f\xe9\x74\xb2\x63\xb9\x98\xbd\x83\x55\x2e\xa9\xe8\x3e\x93\x83\x23\x08\x2c\x27\x3e\x35\xf7\x4f\xfa\x44\xfa\xad\xd0\x44\xe8\x6d\xfe\x71\x18\x4f\x2b\xfe\x90\x5b\x0e\x3d\x39\x05\x56\xf8\xa1\xe5\x61\x8c\x76\x2d\x78\xfa\x02\x96\x13\x6b\x29\xbc\x2a\x4e\x84\xea\xe3\x6d\x48\x9e\x47\x8e\x66\xe3\x7d\x7f\xff\xa5\x6d\xc9\x56\xf1\xcd\x80\x96\x4c\x17\x71\x36\x1e\xd9\x3f\x3f\x38\xc4\x62\x77\xc7\x96\xcb\x22\xb9\x35\xce\x48\x94\xa4\x9f\xf1\x04\xe4\xed\x5f\x3f\x7c\xec\x78\x93\xec\x78\xe0\x32\x15\x2c\x66\x1e\x8c\x03\xac\xba\xfc\xb0\x9c\x48\x42\xe4\x6d\xd1\x18\xc5\x80\x7e\x5a\xe8\xf4\x46\x45\xca\xca\x6d\x9b\x9c\xa5\xa8\x65\x55\x6f\x17\x05\x9b\x00\xf5\x23\x06\x38\xba\xf2\xc3\x72\xa2\xf4\x63\x59\x2d\xe5\xa7\x3d\xdf\xe3\x66\x8f\x73\x77\x29\xe5\x89\xd7\xb2\xa9\x59\x1d\x6a\xed\xd9\x77\x25\x66\xbd\x94\xa4\x8d\x79\x40\x0c\xec\xed\x17\x6f\x23\x65\x10\x7e\xc4\x56\xc9\x94\x6c\xa4\x61\xdd\x39\x9a\xdf\xb8\xd6\x15\xcd\x52\x33\xf4\xee\xce\xc4\x1d\x41\x5d\xa3\x21\x01\x31\x10\x8b\x0d\x3e\x96\xc8\x3d\x74\x93\xdf\x69\x0f\x43\xd3\x7e\xf0\x85\x0f\x55\x3b\xa4\xd5\x29\xc4\x38\x1e\x9b\xd7\xd9\xa9\xeb\xa4\x5c\x0e\x05\xc4\x40\x2c\xd6\xfa\xba\xf4\x84\x8a\x78\x6d\x08\xef\xad\xff\xd2\xaa\xed\x3a\x23\xb9\x7e\x16\x4a\x5a\x79\xb3\xab\x87\x75\xcc\x3d\x2d\x6f\x5f\x4a\x10\x03\xb1\x78\xb8\xb1\xd6\xea\xaa\x40\xf9\x2a\x72\xef\xa1\xec\xd3\x78\xf6\x44\x66\x6c\xed\x39\x51\xd5\x82\xf3\x85\x0f\x67\xcd\x71\xe8\xfa\x7c\x20\x06\x76\x6b\x39\xe3\x0b\x9b\x6f\x6b\x52\xde\x9e\x2e\x1e\x76\x04\x48\xab\x32\x4d\x7d\x2a\xaf\x5d\xf8\x48\xd1\x9d\xc2\xeb\x7f\xad\x9b\x90\x20\x80\x18\x88\xc5\xe1\xe5\x0c\x4d\xbf\x87\x7f\x77\xaf\x6e\x90\xb5\xae\xb4\x1d\x9f\xc4\x65\xd2\xf5\x2a\xa5\xb6\x35\xef\x2f\x7e\x96\x66\xc3\x02\x1f\xe8\xc9\x0f\xcb\x89\xf4\xbf\x04\x65\x1b\xfc\x58\x31\xd7\x5d\xe6\x4b\x7e\x10\x26\x39\xef\xfc\x3e\xc1\xfa\x3a\xf0\x79\xff\xc8\xee\xc8\xee\x01\x4d\x3e\x2d\x88\x81\x58\xac\xcc\x15\x94\xc6\xcc\x6b\x19\x73\x2b\xa7\x6c\x46\x9f\xe1\x4e\xb8\x8a\x92\x1c\x5e\x12\xf0\xe6\x9b\xce\x2b\xcf\x8e\x1b\x8f\x18\xe0\x8a\x26\x7e\x58\x4e\x44\x35\xb4\xce\x3d\xa3\xce\x70\xae\x6c\x32\x3e\x58\xcc\x0a\xc7\xed\x5d\x4b\x9d\xf8\x1b\x19\xcf\xc9\x14\x71\x53\x33\x1d\xd7\x26\x0c\x62\x20\x16\xbf\x0c\xde\xf5\x72\x46\xe8\x5b\xd9\xf8\x20\xed\x8e\x30\xf8\x6c\xad\x63\xb0\xa8\x75\xf8\x76\x21\xec\x1a\x51\x81\xdb\x7b\x5d\x91\x02\xc4\x40\x2c\xde\xeb\xff\x21\x27\x9b\xa1\xf1\x40\xf8\x0d\x31\xb9\xb8\x59\xd6\xf7\xaa\xef\x1d\x8e\xbe\x2b\x12\x0b\x95\xbd\x27\x1c\xb3\x14\xb7\xc8\x20\x06\x62\x71\x99\x67\x88\xf3\x70\x23\xb9\x29\xc5\x9b\xdc\x80\x5d\xf7\x35\x72\x0c\x3f\x76\xc9\x8a\xfd\xb6\x8e\xa5\x78\x1b\x57\x92\xfa\x51\x2c\x10\x03\xb1\xf8\x64\xd0\x2a\x56\xfb\x97\xe1\x07\xff\x2f\x39\x22\xa5\xb3\x0b\x41\x3d\xc9\x6d\x36\x18\x91\xec\x9e\x97\xd6\x0f\x6f\xc8\x9e\x19\x22\x81\x98\x7f\x2f\xaa\xfe\x7f\x6f\x27\xfe\xef\x81\x68\x51\x51\x4c\x90\xa7\xc4\x04\x6f\x8c\x52\x6f\x86\x2e\x90\xe5\x5c\xc7\x97\xef\xd1\xeb\x30\xed\x48\x86\x65\xd1\x18\x56\x8f\x37\xe8\xe0\xdf\x85\x68\x4f\x7b\xe0\x31\x50\xd1\xdb\x6a\x8d\xec\x7f\x81\xc3\xde\xbe\xad\xbc\x37\x95\x1e\xe0\xd0\x14\xb0\xd7\xfd\x33\x48\x3e\x28\xd4\x15\x1b\xc4\x40\xb4\x47\x7e\x23\x65\xfe\x0a\xd7\x2e\x94\x2b\x01\xe9\x2a\x6e\xdf\xf8\xc0\xd9\xbc\x82\x6a\x4a\xe4\xdb\x49\xc8\x25\x62\x71\xe5\x16\x78\x0b\x14\x3f\xac\x3f\xe2\xe3\x2f\xa0\x0f\xc7\x5d\xf7\x79\xba\x18\x75\x19\x5c\x96\xad\xe5\x94\xa9\x23\xd5\x22\xce\xde\x32\x25\x0f\xe3\xe1\xde\xa4\x3d\x00\x31\x10\xed\x85\x04\x54\x92\x03\x33\xfb\x0a\x8b\x6f\x59\x58\x0b\x48\x43\x96\xd4\x3f\xec\x1a\x5a\x79\x8f\x3f\xce\x9a\x34\xe2\x44\x71\x73\x05\x17\x28\x58\x4e\xb4\x8e\xe1\x18\xa0\x4c\xf7\x34\xf2\xac\x7d\x20\x6e\x5b\x79\xfd\x99\xa9\xe1\xdd\x58\xff\xfa\x1c\xf7\x2f\xdf\xc3\x33\xcc\x1e\x17\x51\x10\x03\xd1\xfe\xcb\x8f\xbb\x23\x31\x46\xa9\x82\xa3\xc5\xa7\x57\x87\x4f\x58\x4c\x62\xba\xdf\x4e\x51\xe8\x26\x35\xc4\x62\xc9\xec\xc9\x70\xd7\x80\xbf\x14\x2c\x27\xaa\x56\x25\x2e\x6c\x7d\x34\xe9\xb4\x4c\x23\x1f\xec\xa5\xb9\xa3\x91\x7c\x7d\x79\x29\xf1\xc7\x43\x60\xd8\x33\x30\xc8\x18\xa7\x9e\x1f\xc4\x40\xb4\x7f\x2e\xdb\xde\xf4\xc5\x4f\x5b\xf7\x50\xe4\xfe\x60\xbc\x20\x1a\xc2\xf7\xbf\x8c\x27\xb2\xa2\x97\x8c\xb8\x2a\xf9\x17\xeb\xf8\x8d\xd4\x20\x06\xa2\x7d\x7c\x5a\x81\x5d\xf9\x9b\xb8\x4a\xe6\x5c\x26\xaf\xf4\xe7\x7a\xea\x5f\xf2\x1e\x64\x5a\xd5\x14\x77\x64\x78\x5b\x63\x9b\xf0\x30\x4a\x82\x18\xc8\xe2\x7d\xfd\x5e\xe9\x27\xea\x75\x42\xb0\x74\x53\x34\xd2\xcb\x65\x5e\x9b\xe6\xa1\xe7\x48\xed\x4f\xef\xaf\x06\x51\xb6\x48\x2f\x8e\x32\xdd\x05\x31\x10\x8b\xe3\xa5\x78\x07\x71\xbb\x31\x0b\x1d\xdb\xeb\x13\xbe\xca\x75\x64\x7e\x3d\xe6\x1e\xc1\x16\x4e\x5e\xa9\xed\x41\x7b\xc4\xb7\xc6\x45\x00\x62\x60\x8f\x89\xa4\x99\x9d\x88\x0f\xc0\x43\x44\xca\xaa\x4a\x8c\xfa\x93\x38\xc9\xb1\x4a\x9b\xbc\x9f\xe4\x68\x6a\xaa\xb0\xc3\xf5\x3b\x4f\xe8\x1f\x6f\x20\x16\x8f\xec\xa4\x64\x49\x1f\xb3\x9e\x2e\x86\xf9\xe6\x78\x7f\x97\xbe\xfe\x42\x86\x8d\xc1\x8a\xed\xa8\x3d\x1d\x59\x68\x45\xf3\xf4\x3e\x3d\x88\x81\x58\xfc\x64\xdb\xe2\xe7\xce\x83\xca\xcc\x0e\x5f\xad\x42\xe5\x58\x84\x28\xc7\xd6\xcf\x27\xc5\x61\x6f\xbb\xab\xc7\xa7\xb9\xb9\x25\x11\x80\xf1\x8c\x1f\x96\x13\xcf\x32\xdb\xdb\xf9\x2d\xff\x20\x63\x7f\xe6\xc1\xa9\xab\xd3\x58\x49\xfd\x64\x9d\xbe\x19\x3f\x24\x5f\xc6\x15\x70\x67\xfd\xcc\x05\xf4\x06\x96\x13\x7f\x72\xfe\x58\x3f\x11\x42\x3c\x2b\xb0\xcf\x22\xbf\xd6\xb7\xd6\x0f\x58\x5a\x54\x50\x8f\x0d\xf2\xfc\x1d\xfc\x07\x8f\x15\x43\x40\x08\xc4\x40\x2c\xc6\xca\xaa\xff\x4c\xf9\xd3\xe9\xc4\x53\xed\x7e\xad\xfd\x4f\x85\x57\x93\x1c\x44\x6f\x07\xbe\x25\x9c\x69\xf2\xeb\xc9\x15\xee\xac\x82\xfa\xc1\x72\x62\x70\xda\xe8\xde\x8d\x7f\xfd\x8a\x10\x22\xb7\x32\xf3\xf2\xee\x03\xb9\x42\x42\xd2\x4b\xcb\xfb\x72\x9e\x56\xf7\x7f\x1d\x87\x63\x91\x81\x18\x88\xc5\xa6\xf6\x72\xc3\xf5\xdb\xd4\x2f\x62\x74\x31\x9c\xaa\xeb\x07\x90\xd1\xd4\x30\x7d\xc6\x89\x10\x28\xd1\x45\x7e\xb7\x08\x52\xfa\xdd\x01\x31\x10\x8b\xc5\x70\xdd\xe6\x2b\x3b\x3f\x99\x60\xee\x3e\x3e\x41\x2e\x71\x31\x79\xda\xf3\x32\xa1\x8a\x60\xcf\xb0\x1e\xa9\x37\xd5\xba\x81\x1e\xfc\xc1\x61\x39\x31\x48\xa3\x8c\x11\x9f\x36\xe0\xd5\x13\xfe\xe2\x90\xd3\xe5\xd1\x5c\xda\x7a\x35\x4c\x1d\xe9\x70\x5a\x3d\x24\x35\x34\x3d\x03\x79\x70\x63\x80\xe5\xc4\xfb\x6f\xb1\xd9\xc5\x59\x23\xbf\x86\x87\x69\xf9\xbf\x0a\x44\x4e\xb1\xb8\x7b\xe9\x87\x77\x25\x87\xc5\x1e\xc9\xc3\xf5\x08\x87\x01\x9c\x64\x60\x39\x91\x13\x25\xdb\xb9\xcb\x96\xb0\x4b\xf3\xa6\x47\x48\xc2\x80\xf3\xd8\xac\x36\x7d\xea\x6a\x80\xf9\x5d\xf8\x68\x6e\xe1\x18\xc6\x14\xb8\xd3\x87\xe5\xc4\x11\x91\xd1\xb6\x29\xde\xf7\x45\xd6\x52\x94\x23\x4a\xb7\xb5\x45\x5b\x46\xa1\x38\xf8\x96\xf4\xbe\x4c\xe1\x42\xdf\x87\xac\xe6\xc1\x3d\x03\x2c\x27\xbe\x74\x8c\x09\x7f\x83\x7e\xa5\x80\x47\x7b\xdf\x92\x0e\xbf\x88\xa9\x94\xc3\x9b\x34\xc6\x3a\x3f\x35\xe8\x50\x31\xa8\xa9\x60\x4b\x02\xc4\x40\x2c\x7e\x51\x85\xc2\xc4\x8a\xf8\xfa\xf4\x29\x31\x7a\x6b\x3f\xfb\x84\xcf\xdf\x83\xfa\x12\x46\x81\xa5\xe8\x4a\x24\x62\x9e\xda\x1e\x52\x70\x0b\x87\xe5\xc4\xd6\xf9\xd9\xcb\x1d\xf2\xef\x2d\xd1\x13\xbf\x82\x04\x64\x59\xbc\x3c\x6d\x5e\x9e\x7c\x7c\xc2\x18\x78\xee\xb7\x64\xf7\xd8\x39\x90\x17\xc4\xc0\xde\xdf\xb9\xf8\xc9\xaa\x53\x37\x75\x9e\x69\x4f\xe8\x4a\x3f\x9d\x04\x47\x9e\x3f\x96\x3d\x74\xa7\x3e\x41\xbb\x6c\xf8\xcc\xf0\x9b\x86\x20\x88\x81\xbd\x04\x11\x85\x7e\xc9\x82\xce\x79\xa5\x76\xc8\xdd\x7e\xb2\xac\xf0\xc4\x3e\xf1\x27\x25\xe3\x14\x96\x3a\x57\x2e\x03\xf1\x83\xea\x0c\x0e\x10\x03\xb1\xb8\x30\x37\xfd\xb7\x80\xd4\xd9\x48\x30\x81\x8f\x7d\x62\xb5\x9d\xc2\x1d\x51\x3a\xf5\xc6\xbf\x1f\x74\xcb\x2c\x36\x12\xeb\x75\xdf\x82\xeb\x0d\x2c\x27\x1e\xaf\x99\xfa\x11\x2d\xd9\xbe\xca\x76\xeb\xc9\x1e\xcf\x8d\x5d\x2e\x9d\x60\x31\xa7\xfa\x2b\xf1\x74\x54\x80\x54\x59\xaa\xcc\x10\x3c\xe4\xe1\xff\xf7\xa2\x6a\x55\xc5\xcd\x33\x26\x39\xff\x79\x6d\x85\x99\xb0\x52\xdd\xa3\x79\x5c\x5a\x33\x5e\xe5\xd3\xfd\x9a\x68\xd6\x58\xb6\x33\x2b\x7b\xab\xff\x1e\x88\xe2\xda\x06\xed\x84\xf1\xcf\xb4\x64\x4c\x05\x12\xcc\xa3\x62\x7d\x2a\x36\xbf\xff\x7e\x4a\xf5\x6a\x75\x7c\x53\x7e\xf2\xa7\x76\x1d\x1a\xf8\x77\x21\xda\xb3\xf8\x5b\x7d\x72\x7e\xa5\xd5\x20\x95\x45\x7b\x1d\xd8\xfb\x01\x9f\x7b\x7a\xf7\x66\x52\xb8\xbc\xc3\xad\xf6\xeb\x45\xd2\xe5\x27\x76\x10\x03\x7b\x3f\x73\x4d\x98\xc9\xe4\x8f\xda\xb0\xa6\xa3\xfa\x22\x22\xbc\xdf\xe8\xaa\x25\x3c\xdf\x69\x6f\x5e\x7e\x26\x12\x2b\x55\x20\x31\x5c\x01\x77\xfa\xb0\xfe\xa8\x83\xf8\x5e\x3c\x5b\x26\x55\xb7\xc5\x7e\x62\x08\x97\x78\x6a\x30\x63\xd0\xd7\x35\x4a\x67\xd0\xf0\xd7\x29\x92\xfd\x91\xf2\x2c\x21\x88\x81\x68\x4f\x57\xf5\xd9\x6d\x67\xfd\xb9\xe7\x3e\x66\x8d\xfe\xd8\xaf\x10\xc6\xb1\x02\xa3\x68\xf7\x29\x12\xe7\x1a\xab\x1c\x9c\x79\x5b\x01\xd0\x57\x58\x4e\x14\x48\x18\x49\xdf\x72\xc8\x4f\x65\xb7\xf1\xec\x76\xa8\x2d\xaf\xba\x12\x7b\x49\x10\x51\x59\x15\x60\xe0\x87\x7c\xf7\x87\x67\x1a\x38\x10\xc1\x72\x62\x9a\x66\x66\x31\x5b\x08\xbd\x5d\x28\x81\x7d\x78\xf8\x68\xbe\x0f\x6f\x70\x3e\xbb\xb8\x9d\xb9\xf7\xa7\x50\x44\x25\x74\x2c\xf0\xc1\x0c\xfc\xb0\x9c\x98\x9d\x91\xc5\xc8\xde\xa1\xdb\x19\x8d\x8f\xf5\x69\x67\x88\x2f\xde\xaf\xd5\x27\xb6\x71\xff\x61\xf9\xc1\xc8\x23\xfa\x98\xfc\x17\x0c\x20\x06\xa2\x7d\x9e\x5f\x68\x57\x29\xb3\xf1\x82\x7c\x3a\x12\x5b\xde\x5a\x83\xd0\xa3\x79\x89\x77\x93\xbb\x88\x53\x75\x96\x21\x34\x84\xef\x97\x39\x41\x0c\x44\xfb\xfd\x83\x73\xb3\xb6\xea\x41\xd3\x82\x16\xe1\x35\x25\x5e\xdb\xe7\xdd\x96\x92\xbc\x2b\x82\xe3\x29\xc7\x7b\xec\x91\x6a\xb7\x5b\xe0\xca\x02\xcb\x89\xfc\xc4\x6d\x53\xdf\xae\x7e\xe8\x0c\x3b\xb2\x97\xd0\x1f\x1d\x78\xf1\x6e\x60\x89\x09\xdd\x5e\xf9\x70\xac\xb8\x0b\x17\x1f\x80\xf7\xbc\xf1\xc3\x72\xa2\x9b\x84\xd9\x07\x11\x25\xea\xf9\xd5\xb9\xdb\xce\xf7\xad\x5e\xc6\xa3\xe9\x4c\x4d\x82\xbb\xad\x8c\xa2\x45\xd6\xa6\x48\x13\xa6\xe0\xb6\x0c\xcb\x89\x0f\xbe\xca\x24\xe6\x25\x16\x2a\x6c\x1d\x17\x67\xca\x64\x68\xf3\x78\x7b\x3f\x4b\xb0\x5c\x5d\x38\x26\xfa\x36\x31\x7e\x5a\x10\x08\xc4\x78\x7e\x58\x4e\xdc\xdf\x41\x0f\xc0\xe3\xb9\x76\x51\xd1\x33\xfe\xec\x1a\x46\xf2\x43\x44\x84\xe6\x29\xaf\x02\x6a\x02\x23\x9f\x98\x02\x33\xee\x3b\x2a\x10\x03\xb1\x18\x6d\xbe\x86\xba\xec\x4a\x3d\xb5\xcd\xfe\xd7\xeb\x25\x2a\x95\x5a\x19\x7a\x81\xdf\x26\xd7\x98\x58\x1c\xd7\xde\x04\x9b\x9a\x5e\xe0\x8e\x0d\x96\x13\x2b\x5c\xaa\x08\xe6\x3e\x85\xab\xd8\x3f\xd8\x2c\xd4\xbd\xfe\xf1\x24\x41\xaa\x8e\xde\x12\xbb\xb4\x53\xa1\xd4\x7d\x4c\xe9\x84\x1a\x1c\x16\x61\x39\xd1\x54\xa5\xcf\x97\xe8\xc0\xe0\x7a\x80\x85\xe6\xde\xd8\xd8\x93\xa7\x4f\x55\xaa\x27\x0c\xeb\xc9\xd0\x02\x66\x42\x73\x57\xef\xa0\xd1\x81\x18\x88\xc5\x54\x3f\xdd\xf3\xde\x5b\x8f\xcf\x0a\x63\x2c\x8c\x2a\xb6\xef\xde\x2d\x54\x51\x7c\x21\xae\xf3\x6b\x6e\x1f\xc7\x3e\x53\x4b\x21\x4d\x1c\xc4\x40\x2c\x76\x6d\x45\xe2\x38\x49\xdc\xec\x60\xb5\xfd\x60\x5a\xca\xd0\x25\x4d\xbc\x88\xe6\xf5\x28\xfa\x91\xb6\x00\x8a\xf1\xfd\x57\x3a\x84\xe0\x3e\x00\x96\x13\xb3\x4c\x31\x35\xa5\x31\xf9\xa3\x69\x1a\x2a\x15\xbe\x64\x9d\xe6\x2e\x30\x89\x14\x87\x61\x10\xd5\x51\x91\x95\xe3\x85\x7e\x89\x02\x87\x45\x58\x4e\x54\x9b\x79\x83\x27\xe2\x21\xf7\x7b\xc6\xf9\xdc\x03\x27\x2c\x0d\x35\x73\x83\xd5\xeb\x3c\xae\x51\x66\x7d\x38\x89\xdf\xd2\x8c\x04\x3c\x0b\x02\xcb\x89\x36\xfe\x9f\xd6\x4b\x14\x16\xd1\xb8\xe6\xa2\x87\x79\xee\x48\xb5\x9e\xba\x22\x45\x93\x29\xa0\x0e\x8a\x14\xe6\xb5\xcb\xe7\xf9\x83\xdb\x14\x2c\x27\x4a\xd4\x64\xb8\x32\xc8\x1e\x6b\x3d\x14\x90\xaf\x29\x15\x2e\x70\xd9\x36\x5e\xfb\xc2\x35\xed\x9d\xe8\x7f\xef\x6e\x37\xb3\x06\x16\xb8\x31\xc0\x72\xe2\x16\x39\x77\x7c\xb8\x86\xa3\xc6\x5e\x82\xe2\xe8\x21\x43\x31\xce\x49\x6c\xb0\x4f\x2b\xee\xab\x13\xe4\x8b\xf9\xca\xbf\xab\x25\xff\x60\x20\x16\xe7\x11\xb6\x5e\x37\xa9\x3c\x89\x7b\x56\x9e\xc0\xe9\xd5\xe2\x84\x7e\x32\x22\xd8\xdd\xd2\x32\xe4\x6e\xee\x7a\xaf\xec\x6c\x59\x1b\x5c\xb6\x60\x39\xd1\x27\xe0\xd9\xfe\x0f\x84\x97\x75\xe9\xdb\xcd\x65\x2b\x63\x2f\xeb\x2f\x6c\x75\x90\x9f\x21\x13\x44\xbe\xf5\xe7\x21\x3a\x95\x5e\x14\x01\x31\x10\x8b\xcf\xee\xcf\x70\xf9\xda\x13\x48\x7c\xce\x7e\x39\xbc\xad\xfa\x58\x76\x6b\x6f\xe5\x2e\x95\x87\x42\xc5\xa5\xd0\x59\x72\xfb\x8c\x26\x78\x1c\x07\xcb\x89\xf9\x14\xab\xe7\x2f\x39\x8e\xea\xf7\x4b\xaf\xb4\xa4\xda\xf4\x37\x9e\x68\xfb\x51\x7f\x66\x0e\x91\xa4\x4c\x27\x41\x1c\x46\x2f\x03\x37\x4d\x58\x4e\xd4\x7e\xaa\x8c\xef\xf1\xc5\xe0\xa2\x0b\x43\xe0\x63\xbb\x4b\x18\x13\xdf\x7c\x75\xfc\x3e\x4f\xf6\x68\xd2\xd0\x41\xd7\x95\xdb\x1d\xf0\xd4\x0e\x2c\x27\x22\xdc\xd4\xfd\xf6\x39\x63\xc2\x54\xe2\x59\xef\x60\x68\x7c\x2d\x36\xf6\x0c\x1f\xc5\xed\x45\xc7\x4c\x2a\x8e\x14\x03\x56\x2b\xdb\x3f\xdf\x0d\xc4\x62\x14\xfb\xe1\xd9\xb5\x6f\xab\xc1\xf3\x61\x6e\x0f\x88\xf8\xd4\x2a\x49\x4f\x89\x04\xe3\xf7\x6a\x02\xea\x2e\x66\x1f\x97\xa9\x5a\x82\x63\x3d\x2c\x27\x96\xa6\x3e\x41\x43\xd9\xc3\xed\x2a\x2e\xe9\x0e\xcf\x8e\x7f\xe7\xf6\xcd\x23\xbe\x77\xe7\x73\x12\x2f\x4a\xfe\x69\x60\xf2\x97\x4a\x29\x10\xf3\xef\x45\xd5\x1b\x76\x42\xcf\x4f\xf3\xbd\x35\x58\xe9\x5d\x14\x4d\x17\x3a\xbf\x38\xca\x9d\x9d\x0a\x67\xbc\xa0\x49\x47\x98\x6c\xa8\xec\xee\x92\xfa\xef\x81\x48\xe8\x19\x9a\xd4\x08\x41\xde\x3a\xba\xdc\x53\x3f\x25\xf7\x55\xff\xd3\x24\xce\x97\x0f\xd0\x72\xaa\x1e\x31\xe3\xb8\xda\x1f\x65\x80\x7f\x17\xd6\x1f\x05\x89\x07\xaa\x2f\x6b\xb5\x46\x3e\xf7\xbe\x5f\xd1\xd4\xa5\xbb\x93\x86\x2f\x7f\x2c\x34\xd0\xa7\xab\x89\xef\xb2\xba\x55\x2e\x0b\x0e\xa9\xb0\xfe\x98\xd8\x63\xf9\x4e\x8a\xd5\x16\x37\x43\xe4\x76\xcd\xcf\x54\x8a\xef\xbd\x0d\x7f\xfd\xda\x4c\x37\xde\xd9\x64\xe8\xfc\xa5\xd3\x2a\x31\x88\x81\x68\xcf\xc5\x59\x65\x32\xc1\xb0\xc3\x4a\xb4\x36\xc5\x89\x8b\xa1\x20\xdd\x8b\x7c\xb8\xd9\xbd\xdc\x4d\x8a\x7c\xc6\x76\xc8\xcf\xa9\x0c\xfe\xb4\xb0\xdb\x19\xb1\x59\xce\x1d\x35\x8a\x38\xdb\x8a\x52\x98\xb7\x2e\x11\x9d\x94\xd2\x8c\x3e\xbe\xff\xf8\xa7\x75\x29\x7f\x22\x49\x15\x75\xf0\x06\x3c\xd1\x04\xcb\x89\x99\x0b\x24\xea\x5d\x07\x35\xee\xe8\x58\xf9\x78\x92\xf6\xd4\xc3\x89\x6a\xc7\x2d\xbb\xaa\xc5\x02\x24\x8b\x79\x94\xf3\xdf\x85\x10\x41\x0c\x44\x7b\x17\x37\xc9\x1a\x96\x8c\x85\x65\x94\x62\x0b\x87\xd9\x95\xc1\xb0\xe4\x7e\x0b\x04\x63\x67\x2e\x07\xf2\x03\x86\xa3\x0c\xab\x30\x70\x1f\x00\xcb\x89\x4c\x09\xfa\x5a\x44\xd7\xeb\xab\x55\xc7\x24\x7e\xd2\x3f\xbf\xd2\x4e\xa9\x99\x7f\x29\x2d\x60\xbd\xc1\xff\x98\x28\x12\x61\xf5\xe5\x1f\x0c\x44\xfb\xa4\x78\xf5\x78\x73\x53\x0c\x55\x53\x12\x04\x79\xea\xae\x17\x7a\x9e\xe7\x2f\xc4\x9a\xe9\xc6\x3f\xe2\x65\xdf\xa6\x14\x23\x5b\x71\x81\x18\x88\xf6\xe6\x17\xc5\x58\x37\xe8\x2d\xe2\x95\xbe\xf3\xdb\x96\xee\x98\x74\xee\x9c\x33\x73\x0f\x87\x6c\xff\xfe\xed\xc8\x4e\xf1\x33\xfa\x0b\x1e\xa2\xc3\x72\xa2\x63\xba\xbe\xde\xcd\x62\x90\x08\xf5\xcc\x5c\x61\xe6\x41\xf6\xf9\xf8\xd8\x2b\x1e\x44\x61\xec\xaa\xa7\x1d\x56\xbc\x31\xec\xab\xe0\x2f\x05\xcb\x89\x3a\x0f\xcd\xe9\x92\x50\xbd\xf3\x6c\x43\xe7\x33\xb1\x8a\x13\x3a\xe4\xa2\x13\xc4\xcc\x3d\x0e\x0c\xfb\x23\x9f\x09\xd5\x7e\x2f\x25\x07\x31\x10\x8b\x89\x92\x6c\x62\x3b\xff\x6a\x51\xbd\x44\x7e\xbc\x42\xed\x2b\x2f\xb7\x84\x53\x4e\x9a\xab\xeb\x6f\x90\x4a\x7b\x9f\xdf\xe6\x5a\xf8\x3e\x88\x81\x58\x2c\x49\x11\xac\xe6\x19\x81\xdf\x20\x52\xea\x14\x81\xc1\x34\x31\xb3\xff\x11\x95\xfc\x06\x31\x74\x21\xb7\xcc\x4d\xb8\x6f\xf2\x31\xb8\xce\xc1\x72\xa2\x74\x4a\x0a\xb9\x12\xb5\xc1\xe8\xd9\x47\x35\x62\xb6\x9d\x6f\x8a\x73\xf3\xab\xa8\xb9\x7c\x38\x2a\xa7\xfd\x6b\x9e\xcd\xd2\x7b\xe0\x78\x06\xcb\x89\xb1\x79\x1f\x1d\xc7\xb8\x98\xf0\x39\x27\x10\x5e\x66\x51\x7d\x57\x52\xdc\xd6\x2d\x0d\xfe\xab\xd3\xed\x18\x53\xce\x1a\xd7\x4c\x0a\x1e\xb1\xc1\x72\x22\xf2\x6f\xdd\x54\xc3\x24\x66\x41\x33\xb3\xb2\xad\xef\x7c\xc6\x88\x72\xe5\x92\xf9\xd4\x49\x95\x2a\x51\x35\x9a\xa7\x56\x63\x6e\xe0\xa9\x64\x58\x4e\x9c\x26\xeb\x13\xeb\x21\xba\xa7\xc1\xd7\xa6\x1c\xf6\xea\xc1\x3e\xb2\x83\x85\x71\x2c\x43\x99\xf7\x9f\x95\x38\xfb\x82\x82\x7b\xe5\xe0\x42\x01\xcb\x89\x14\x76\xb3\xce\x3e\x7a\xc4\xcb\xdf\x5f\x44\x18\xa8\xde\x15\x5f\xe0\x93\x3c\xa6\x4d\x8b\x4e\x1c\xc1\x1c\xe6\x7e\xd5\x87\x10\x08\x1e\x80\x41\x1f\x76\x7a\xd4\x60\xd5\xa7\xc8\xc3\xe0\x3e\xb5\xf2\x64\x8e\x11\xb3\xc6\x9a\x55\xdc\xb1\x9a\x1e\x13\x69\x3c\xe6\x59\x38\xf5\x4e\x05\x38\xe5\xc1\x72\x22\xe1\x3c\xca\xb1\x4e\x9a\xe6\xf8\x93\x46\xe1\x46\x59\x09\x64\x2f\xcb\x9e\xb4\xbd\x26\x9f\xf9\xb8\xf9\x37\x18\x75\x6f\xd5\x4f\x80\xd9\x41\x00\x96\x13\x43\x65\x4e\xf7\x82\x5a\x66\x1f\x9c\xe1\x58\x44\xbb\x2d\xaa\xe4\xcd\x27\xb6\x62\x8b\x71\xf0\xc8\xfb\x9e\xde\x60\x0c\xe7\x63\x0b\x81\x18\x88\xc5\x46\xc3\xec\xf6\x9c\x68\x61\xee\xa2\x47\x4b\xa4\x8e\xfd\x39\xd9\x9d\xac\xf2\x71\xdd\x62\x06\x17\xee\x48\x97\x68\x92\xdc\x0b\x64\x20\x06\x62\xb1\x70\x0c\xf2\xa7\x7b\xf7\xef\x7b\xb0\xa9\x18\xff\xe2\x89\x24\xb0\x2e\x64\x40\xd7\x0e\x99\x8f\x8a\xc7\xa2\x56\x61\x5a\x0e\x08\x12\x03\x31\xb0\xb3\x20\xa2\x14\x2f\x39\xd2\xbe\xf6\x7e\xce\xf1\xc1\x7b\x56\xb5\x22\x45\x39\x1c\x41\xc5\xce\xdb\x57\x2a\x21\x71\x72\xf2\xfa\x45\x29\x2f\x88\x81\x58\xfc\xbc\x88\x05\x45\xd6\xa1\xf5\x4f\xf4\xad\xc0\x81\xdc\xa5\xc1\x82\xc2\xe7\x41\x3a\xdb\x6b\x8b\xc9\xe0\xa2\x98\x99\x5f\x1f\x3f\x62\x82\x18\xd8\x5a\x3c\xf2\xb0\x87\x34\x7f\x6c\x25\xae\x4a\x62\xbb\xf4\xab\xad\x22\x65\x06\x2f\x6b\x0e\x31\x7d\x54\x28\xef\xd1\xa7\x6b\x91\x46\x71\x10\x03\xb1\xf8\x67\xc2\x3a\xbf\x0f\x91\xb9\x69\x17\x49\x2b\x87\x88\x04\xe9\x88\x69\xad\xe8\x55\x37\x75\x4f\x30\x7d\xde\xd6\x95\xec\x4d\xdb\x7d\x10\x03\xb1\xd8\xe9\x3a\x50\x74\x9c\x33\xf4\x4c\x66\x27\x2f\xbe\xc1\xff\x45\xde\x2f\x99\xc3\xa3\x35\xb6\xda\xf2\x38\x2f\xba\xcb\xe4\x5c\x4a\x04\x10\x03\xb1\xf8\xed\x8b\x7c\xa5\x69\x2a\x2f\x0e\x64\xf2\x9a\x76\x99\x88\x71\xe3\xd8\x85\x14\xab\xea\xa9\xa0\xaf\x9b\x0f\xff\x52\xd1\xbe\x18\x11\x01\x31\x10\x8b\x8b\xa8\xb5\x08\x72\x51\x57\x7e\xd1\xea\xb5\xd6\xdc\xea\x95\xa3\xe4\xf8\xaf\xbf\x73\xf6\xd3\x3f\x9b\xb6\x6b\xdd\x41\x17\x3b\x02\x86\x45\x01\x58\x4e\x8c\x6b\x56\xf5\x0d\x0a\xdb\xfe\x25\x9c\xce\x80\x58\x55\xeb\x2d\xa9\x20\xf4\xdc\xc0\x31\xce\x63\xcc\x84\xdb\xbf\xca\x5d\xea\x48\x18\xc4\xfc\x7b\x51\x75\x08\x67\x9d\x7b\xbb\xa2\x73\xbd\xdb\xaf\xc0\xa7\x5c\x63\xf3\xc6\x61\x04\x7c\xb7\x3c\xa3\x01\x4d\x0f\x71\xaf\xc6\x97\x1a\xed\x3e\xfc\xf7\x40\x64\xb9\x55\x6f\xc2\x89\x92\xf1\x72\x6f\x31\xed\x89\x33\xb5\x8e\xb6\xe7\x08\x6f\x1b\xeb\xd8\xfd\x16\xe9\x26\x95\xb2\x1b\x4d\x7a\x50\x34\x58\x7f\x1c\xd1\x41\xfa\xd1\x76\x58\xd2\xf7\x66\xcb\xa7\x3f\x62\x69\xfb\xf2\x29\x32\x53\x39\x41\xb9\xc5\xdc\xea\x7a\x60\x5c\x4f\x8a\x15\x1a\x88\x81\x68\xaf\xc7\xf2\x43\xb5\xa7\xe1\xc9\x6a\x25\xe2\x74\x55\xc7\xb1\xa7\xd2\x98\x72\x74\xa7\xf7\xcb\xaf\x56\x5f\xe9\xff\x54\xd8\x06\x56\xf0\x83\x18\x88\xf6\xf5\xa9\x6c\xca\x71\x76\xce\x16\x7c\x0f\x9a\xbe\xef\x92\x77\x69\xce\x3d\x6b\x75\xb3\x53\x98\x4d\x4c\x1b\x45\xd1\x5d\xbd\x90\x00\x57\x16\xd8\xed\x8c\x88\x6f\x8c\xd4\x27\xb2\x62\xb8\xe8\x5f\x32\xeb\xe2\xab\x87\x20\xef\xa2\xfd\xf9\x6e\x85\x16\x2f\xdd\x14\x51\xf6\x74\xbf\xea\x25\x09\x88\x81\x68\xef\xb9\xff\x52\x78\xd8\xa5\xa6\x21\xbe\xec\x48\x87\x34\xba\x4e\x00\xff\xc3\x16\x7e\x55\x08\x5a\x22\x45\x24\x6e\x40\x39\x16\x17\x2d\x88\x81\x68\x9f\xd8\x70\x7e\xc7\xf0\x0b\x93\x05\x76\x23\x29\x82\x33\x03\xae\x36\x62\x64\xda\xa0\xf3\xca\x99\x78\xdc\x51\xc7\x34\x23\xad\xa1\x14\x88\x81\x68\xff\x3e\x7e\xfa\x62\x51\xcc\x05\x29\x97\x91\xe3\xe1\xc2\x15\xbf\xad\x21\xf5\x4c\xdb\x08\x36\xed\xd3\x85\x98\xed\x64\xc5\x56\x45\x3a\x10\x03\xd1\xfe\x27\x23\x86\x55\x90\x93\xe2\x1c\x8e\x44\x30\x4b\x3c\x56\xf0\x3a\xf2\xd6\x62\xd0\x66\x5d\x2f\xbd\x95\xc9\xdf\x6c\xe1\x01\x12\xa0\x59\x08\xc0\x72\xe2\x6a\x8c\x96\x8a\xaf\xd9\x66\x62\x34\xc5\xec\x9d\x65\x49\x63\xe6\xb3\x30\x1e\x1d\x5f\x2b\x73\x2b\x8f\xde\x8c\xe5\x57\x11\x93\xf7\x40\x0c\xec\xa6\x5c\x14\x4f\x9b\x49\xed\x44\x81\x71\xda\x9f\xa7\x13\xc1\xfb\xe5\x24\xb8\x4d\xb2\xe7\x87\xc8\xd2\x7e\x77\xcd\x96\xe7\x1a\x0c\x88\x41\x0c\xec\x14\x76\x42\xf3\x42\xf1\x7e\x69\x8c\xb0\xd9\xa3\xa1\x16\xfb\x7c\x79\x91\xd2\x65\x52\xd6\x51\xea\xdd\x53\x51\xb3\x1a\x4a\x91\x04\x4e\x10\x03\xb1\x98\x4d\x5a\xdd\x94\xa4\x50\x8d\xb3\xfc\x2d\x37\xfb\x1d\xf1\x03\x17\xc1\x6b\xae\xa3\xbe\xe0\x67\xea\xce\x5b\xce\x2b\xf9\x37\xa3\x48\x20\x06\x36\x82\x34\x16\x50\x22\xc4\x8d\x7a\x4f\x6c\xee\x1c\x2e\x5a\x74\xc8\x4b\x48\xf6\x0f\x34\xd5\xa4\xa6\xaf\xf7\xff\x6c\xba\xb7\xd6\xc3\x08\x62\x20\x16\x93\xc6\x49\x16\x74\x1e\xe6\xae\xf0\x44\x6f\x93\x4f\xe4\x88\x4b\xc6\x8a\x60\xe3\x90\xbf\x1d\xa9\x35\x63\x24\x2a\xf7\x3d\x1f\x64\x02\x31\x10\x8b\x85\x12\xaa\x2a\x0a\x90\x9b\x98\x9f\x70\x34\x91\x3d\x96\xf6\x47\xda\x22\xd0\xeb\x3e\xdb\x98\x08\xd2\x72\x6f\xe6\xe7\x79\xa7\x23\x08\x62\x20\x16\xef\xb3\x19\x70\x7e\x40\x58\xea\x8e\x3b\xf5\x9a\xd0\x6c\xa8\x45\xe3\xf1\xb4\x1e\x16\xdb\xd6\x23\x71\xbe\x0d\x96\x16\xa8\xa9\x00\xf7\xd6\xb0\x9c\xc8\xe1\xa3\x47\xf9\xe9\xfc\xcd\x13\xdc\xf1\x5c\x6f\xf3\x54\xbd\xa7\x6f\xf8\x02\x5d\xaa\xcb\xc9\x37\xdf\x67\xfd\x7d\xd6\xcd\x63\x43\x03\x62\x60\x39\x71\x14\x6b\x54\xa2\xa2\xf0\xc5\xcc\x55\xd0\x35\x41\xc4\xb7\x3f\x37\x16\x21\xc2\x48\x1b\x2a\x53\x09\x34\x81\x64\x51\xa9\x04\xc0\xd1\xac\x00\x2c\x27\x36\xbd\x64\xd5\xf5\x68\x76\x3e\x3d\xe5\x7c\x9e\xf9\x69\x65\xf8\x39\xcb\x2f\x11\x6b\xb2\xac\xcc\x8d\x0f\x9b\x33\xb4\x5f\x27\xa6\xf0\x40\x0c\xc4\xe2\xc8\x5c\xd3\x2b\x9b\x4a\xa2\x40\x0f\x94\xb1\x37\xc3\x7e\xc1\x6b\x8d\x9a\xce\x48\x8a\xd4\x01\x7a\x9c\x34\x24\x29\x36\xac\xdb\xe0\xc6\x00\xcb\x89\xfa\x24\xb5\xda\x0c\x3f\xf6\x30\xf9\x46\x2f\xcb\x73\xc3\x11\x7c\x2f\x86\xe2\xf7\x52\xd8\x79\x0d\x70\xa7\x27\x57\x0f\xd3\x69\xa8\x40\x0c\xc4\x62\xb5\xdd\xd5\xed\xad\x13\x7b\x79\x54\xea\xd4\x2b\x4f\x82\x8f\xfb\x12\x3a\xc8\x45\xad\x64\x3d\x36\x01\x1d\xf4\x14\x8f\xfb\x2e\xc0\x2d\x1c\x96\x13\x69\x84\x4a\xa8\x8e\x63\xfc\x4a\xee\xc9\x4c\x6a\xc4\x9d\xbc\x25\xc1\xfc\xe9\xda\x74\x73\xf6\x9c\x45\xda\xcf\x9c\xcf\xf9\x63\x23\xb8\x83\x81\xe5\x44\xa6\x2c\x0b\xee\x97\xdf\x16\xe8\xc9\xa3\xc3\x7f\xdd\xee\x0d\xfd\x51\x40\x4b\x67\xec\xc7\xac\x3c\xe9\x69\x4e\x93\x74\x69\x53\x01\x97\x2d\x58\x4e\xbc\x87\x8e\x36\xa7\x4d\xaf\x5a\x27\xfb\xb4\x8f\x20\x2a\x85\xc9\xc8\xe7\x6d\xf3\xa3\x5d\x86\x2d\xaf\xe9\xa8\xa2\x68\xf5\x7d\xf0\x31\xca\x02\xb0\x9c\x98\xd0\xf2\xec\x4f\x16\xae\x8a\xa9\xb2\xe1\xd0\x53\x14\x5e\xe6\x6a\xcd\x2b\x3c\x6c\x5d\x29\x4f\x79\x0d\x24\xd5\xf9\x41\xb2\x13\x2e\x10\x03\xb1\x98\x67\x6c\x5c\xe6\xee\x87\x2b\xaa\xfb\xc8\xea\xfe\x45\xf7\xde\x46\x6b\xa2\x3d\x3d\x28\x7f\x60\xd5\xe4\x10\x64\x78\xa4\xff\x80\x14\x0b\xc4\x40\x2c\x0e\xfa\x43\xf5\x57\x45\x75\x87\xc3\xd8\x16\x2f\x76\xc3\xaf\xf8\xae\xda\x82\xe0\xe2\x66\xe8\x6c\x84\x87\xc5\xea\x23\xfc\xb6\xcf\x40\x10\x11\x80\xe5\x44\xf6\xc9\xfe\xbc\x99\x31\xc2\x35\xe2\xfc\x8d\xf9\x1b\xad\x0b\x17\xc7\xf7\x14\x38\x6a\x2a\x5e\x2f\xa8\x46\x68\xfc\x96\xee\x7b\x83\xde\xc0\x72\xe2\x97\x77\x0b\x73\x52\x48\x09\xa2\x9f\x5e\x47\xc5\xa2\x3b\xf7\x24\xa0\xa8\x38\x78\xa2\x5e\xd8\x95\xe0\xfe\xf5\x14\xfb\x8b\x9b\x02\x6e\xe1\xb0\x9c\xd8\xd0\xee\xbe\xe7\xe3\xb2\x6f\x18\x93\x43\x5f\xbc\x11\xa4\x8e\x6f\x10\x28\x56\xd4\x30\xa1\x18\x3c\x2f\xea\xe7\x5f\x4b\x2c\x03\xce\x9c\xfc\xff\x5e\x54\x2d\x51\x3c\xb8\x6d\xe8\x19\x59\x7d\x1b\x52\xf5\xbb\xc4\x7f\xeb\xce\xe8\x2b\xbf\xdb\xdf\x01\x73\x37\x44\xde\x27\x93\xfd\x2e\xaf\xf9\xfe\x7b\x20\x7a\x7a\x88\x28\x9b\xe5\x4c\xb2\xd0\xfa\x0e\xc3\x74\x7f\xda\xd6\x40\x35\x47\xa8\x48\xb7\xba\x00\x9d\x9e\x2a\xae\xc8\x5f\xb6\x94\x12\xfc\xbb\x10\xed\x9b\x12\x04\x87\x17\x25\x1f\xce\x12\x6c\x6a\x15\xec\x20\xca\x1b\xa2\x46\xdd\xf5\xcc\x18\xe1\x99\xc5\xf8\xee\x64\xcb\x16\xe4\x07\x2e\x09\xb0\xfe\x48\x27\xe9\xc7\xca\x1f\xae\x12\xd7\xa7\x17\xc9\x78\xb6\x33\x33\xc5\x89\x98\x35\xe3\xbc\x8d\x16\xb6\xa8\x61\x4f\x2a\xfb\x10\xbc\x9b\x56\x00\xd6\x1f\x9d\x46\x4b\x16\x69\x92\x28\x4b\x5b\x78\xfa\x28\xb3\x59\x3b\xcc\x84\xf4\xe2\x8a\xe5\x89\x75\xe3\x71\xa5\xc5\x9e\x5f\x11\x7e\xfc\xe7\xa7\x85\x68\xff\xd5\x33\x6e\x74\xea\x95\xad\xf1\xfa\x66\x1c\xdf\x93\xf1\x1f\x9b\x3c\xb8\x0f\x44\xcf\x5f\xb1\x19\x2e\xc9\xb5\xdc\xdc\x3d\x02\xef\xb3\x10\x80\xe5\x44\x66\x6e\x3f\x47\x45\xa3\x82\x5f\x6d\x2b\x36\xb3\x62\xda\x3c\xee\x23\x3d\x85\xef\x69\xe6\x95\x6b\x27\xb0\x62\x5d\x76\x3f\x20\x81\xc3\x22\x2c\x27\xe6\xba\x52\x10\x88\x34\x84\xe2\x99\x11\xfa\xbf\xd1\xae\xec\xcc\x0f\xfb\x86\xee\x32\xff\x71\xc2\xb0\xa8\xd0\x84\x6a\x34\x34\x0d\x3c\x0e\x80\xe5\x44\x8a\xce\xf5\xb7\x0b\x4f\x88\x48\xd1\x4d\x26\xfc\xef\x7e\x7f\x56\x35\x5b\x61\xca\xa8\xa3\x20\x5a\xf1\xc7\x8b\xfc\x91\x51\x27\x78\xe3\xa9\x00\x2c\x27\x8e\x8e\xc6\x36\x66\x08\xcc\x3d\x59\xa8\x2a\x33\xe6\x48\xc9\x78\x12\x9a\x1f\xfa\x38\x3c\x48\x69\xcd\xe9\xfb\xf7\xfe\x6b\x27\xa1\x7f\x3e\x0d\x44\x7b\xdd\xe4\x6f\xb8\x84\x28\xe2\x28\x4d\xd9\x85\xdc\xd9\x03\x12\x19\x74\x0f\x6c\x22\x29\x1b\x8d\x84\x08\xcd\xcd\x87\x94\xb6\x22\xc1\xc3\x50\x58\x4e\xfc\x90\xe6\x39\xcf\xd7\xda\xcf\x4b\xb7\x5c\x98\x43\xed\x85\xe6\x7d\xe8\x89\xa0\x79\x29\xea\x29\xbb\xf6\x4a\xc3\x2b\xd9\x79\x1c\x5c\x59\x60\x39\x71\x88\x8a\x45\xbb\x1d\x83\x89\x6a\xea\xd3\xc7\xdd\x26\xaf\xeb\xe9\x94\x76\x21\xa4\xfb\x09\xa3\x07\xac\x1a\x83\x37\x8b\x9f\xbd\x18\x40\x0c\xc4\xe2\xd3\xa1\x22\xe7\x1f\x58\x2d\x53\x79\x59\xf9\x74\x44\xd8\xad\x4c\x05\x38\x1e\xfd\x9f\xfa\x3c\xbd\x78\x05\x10\x14\x6e\x3f\xe8\x81\xde\xc0\x72\x22\x82\xe0\xf3\x55\x1f\x82\xe0\x3a\x93\x8e\x9d\xf5\x28\xe9\x6f\xf1\x58\x22\x7c\xe6\x1a\x19\x85\xf2\x0f\x73\x7a\xd3\x84\xe3\x10\xc1\x09\x18\x96\x13\x8d\xd0\x9f\xeb\x0d\x6f\x57\x65\xf8\xe5\x73\xc5\xa6\x67\x69\x1c\xa5\xcc\xad\x96\x8c\x63\x3c\xf1\x2f\x29\xcc\x2a\x11\x09\xa4\x02\xe7\x2a\x58\x4e\xc4\x43\xfd\x4e\x82\x82\xde\x1f\x2b\xa5\x95\x77\xe7\x44\xca\x9c\x39\x8d\x4a\xd4\x91\xa2\xcd\x75\xbf\xcb\x25\x96\x55\x25\xf5\x35\x05\x88\x81\x58\x8c\xe1\xf2\xd0\xa3\x1e\x67\x21\xcd\xbb\x8e\x80\x90\xf5\xec\xba\xbe\xa7\x4e\xa9\x3c\xee\x86\x4e\x8b\xb9\x4b\x0b\x9f\xa4\x52\x1d\xdc\xe9\xc3\x72\x62\x23\xce\xf5\xfd\xd2\xe4\xa8\xa4\x60\x6d\x2a\x2f\x81\x9a\xc6\x1f\x64\x79\xa3\xcd\x69\x6d\x4a\x51\x23\x05\xa5\xfd\x52\xd9\xbf\x70\x41\x0c\xec\x49\x63\x8d\xa1\xcf\xde\x04\x7e\x60\xb6\x76\x88\x5c\x7a\x16\x23\xf9\xf0\xbe\xf4\xc6\x5c\x0d\xae\xe5\xa9\x26\xab\x71\x8b\x4a\x80\x18\x0b\x88\x81\x58\x1c\x55\xf4\x1c\x45\xbd\xa8\xc8\x8f\x01\xcd\x07\xc5\x0a\xf1\x79\x3b\x6f\xfc\x5b\x9d\x42\xab\xf2\x28\x6e\xe2\xfb\xb7\x91\x23\xe8\x18\x20\x06\x62\xb1\xbe\x5b\x7c\x1b\x96\xff\xfb\x30\x0f\x4e\x64\xd5\x49\x6b\xdd\x8e\x37\x29\xe6\x81\x4c\xa1\xcf\xf0\x1a\xde\x61\x6b\x9b\x98\x3a\xde\x01\x31\x10\x8b\x13\xad\xd6\x8a\xeb\xba\xa4\xe2\x2f\x5d\xcc\x7f\x9e\xed\x45\xa7\x99\x0b\xe6\x24\xea\x04\xe8\xee\x4d\x31\x39\x52\x5a\x68\xb6\x11\x80\x18\x88\xc5\x2c\x1c\x2d\xc9\xdf\x57\x9f\xc4\x7c\x0d\x56\x45\x91\xb8\xc0\x0d\xe7\xcd\x37\x8b\x3c\x92\x6a\x71\x1c\x49\xe2\xd0\xfb\xc0\x8a\xc1\x01\x62\x20\x16\x27\xc5\xa6\xfb\x50\x30\xdd\x18\x1e\x27\xaa\xe2\xdd\x7c\xfe\xd4\xab\x87\xf2\x98\xd8\x43\x2d\x23\xe9\xa6\xd3\x9a\xc5\x2e\xf5\x11\xb8\xb7\x86\xe5\x44\xf1\x30\xf9\xb1\xab\x83\x91\x91\xab\x9c\x89\xd3\xc4\x5d\xc2\xfa\x67\x63\xb5\xcb\xeb\x6c\x0f\x19\x8b\x62\x4d\xd9\x88\x25\x0a\xc1\x4d\x13\x96\x13\xb7\x70\xb6\x7d\xed\x05\x02\x91\xc8\x96\x7c\xfb\xfe\xe0\x90\x12\x19\xa5\x25\x7f\x46\x3d\xd8\x43\x15\xfc\x79\x66\xa7\xcc\x1a\xfd\x00\xc4\x40\x2c\xc6\xa9\x4b\xb3\xa9\x7b\x96\x43\x83\x66\xa5\x66\x58\x20\xb4\x9a\xba\x49\x91\x4b\xd9\xd4\x9d\x89\x77\xf0\x92\xdb\xef\x8e\xe4\x23\x70\x6f\x0d\xcb\x89\xbe\xa9\x05\xcc\x82\x54\x8f\x56\xda\xe5\xb6\xe9\xb2\x72\x5e\x68\x6b\x38\x1b\x67\xd4\x98\xbd\x6e\x72\x6e\xd8\xfb\x5d\xb9\x42\x0e\x1e\x80\xc1\x72\xa2\xcd\x66\xdd\xdb\x6d\x39\x87\xf0\xf2\x8f\xb9\x9e\x52\x3c\xa7\x98\x8e\xfd\x77\xf7\x9c\xa9\xa5\x75\xc2\x66\xb1\x2c\x5b\x1b\xe5\x70\x40\x0c\xc4\xe2\xbb\x97\x03\x3f\x0b\xfa\x65\x07\x88\x2d\x83\xeb\x66\x89\x9f\xea\x1f\x8b\x87\x6e\x2b\x7d\x2d\xbb\xd7\xa8\x51\x4c\x99\x62\x32\x01\x0e\x8b\xb0\x9c\xb8\x7b\x46\xd9\xef\x2c\x61\xa5\x5d\x5e\x4c\x98\x3b\xec\xb9\xe8\x6f\xc8\xc8\x23\x88\xf7\xb0\x77\x95\x91\x35\x49\x3d\x0f\x01\x09\x3c\xc8\x80\xe5\xc4\xf1\x19\x39\xf4\x83\xef\xce\xe3\x84\x2c\xc3\x23\x48\xc3\xee\x1a\x61\x14\x1d\xd7\x0f\x9e\xa7\xd0\xb4\xec\x12\x1c\xe4\x65\x35\x8b\x82\x98\x7f\x2f\xaa\xae\xab\x22\xd0\xd6\xea\xa4\xc6\xab\xfa\x3e\x94\xfa\x58\xa3\x74\xdd\x82\xae\x36\xef\x9d\x3c\xda\xf4\x6c\xef\x6a\xe7\x7b\x11\x0e\x85\xff\x1e\x88\x3e\x73\xde\x7f\x7f\x26\xfe\xee\xfb\xb8\x19\x72\xb2\x80\xfb\x86\xfa\xd0\x2b\x79\x62\xf9\xfa\xb4\xac\xcf\x25\x7c\x33\x8f\x44\x7c\xc0\x73\x88\xb0\xfe\xb8\x5a\xff\x27\xbb\xec\x8e\x4a\xda\x83\x30\xc2\x4c\x35\x8a\x9f\xdb\x3d\x01\x92\x71\xa6\x07\xe2\xba\x4b\x72\x28\x27\x7f\xbe\x37\x80\xda\x43\x5f\xb6\x68\x1d\xa6\xff\xed\x10\x91\x4e\xf0\x90\x92\x9b\x7f\x4c\xd6\x3a\xb2\x26\x48\xfc\xd7\x13\xef\x9c\x09\x7f\xc4\xd7\x4e\x7b\x8e\xe0\xae\x04\xd6\x1f\x47\x14\x19\x5f\x97\x78\x50\x7d\xe7\x68\xa8\x1d\x7f\x91\xcf\xe8\x51\xc8\x56\xbb\xdb\xa3\x24\xb4\x4d\xca\xa8\xae\x19\xf4\xb5\x88\x0d\xc4\x40\xb4\x17\x2c\x11\x2e\xbf\x8d\x18\x7c\x4c\xc4\xc4\x45\xf6\x6b\x8c\xf6\x89\xf3\xd1\xdb\x74\x1c\x6e\xa3\xf1\x02\xfc\x3e\xef\x6b\x1d\x46\xf0\xa7\x85\xe5\x44\xa6\xef\xbf\x3c\xd6\x6e\xfb\x66\x1e\xbd\xbf\x7b\x8f\xee\x61\x88\x37\xc1\x6e\x90\xc5\xcf\x69\x32\x13\x86\x6a\x4a\x0b\xba\x86\x4c\xf0\x18\x09\x96\x13\xeb\x55\x72\x58\x5e\x39\xeb\xef\xed\x23\x29\xff\x56\xeb\x2f\xb7\x3d\x8d\x3d\xbf\x2d\x31\xc6\x99\x1e\xca\xcf\x9e\x50\x0f\xaa\x02\x8f\x91\x60\x39\xb1\xa4\xb1\xc2\x96\xb7\x29\x77\x57\x29\x42\x5c\x8b\x26\x85\xeb\x91\xc5\xeb\x8f\xe7\x4f\x6d\xd3\xf4\xb3\x05\x0f\x0f\xbf\xd3\xbd\x45\x04\x31\x10\xed\x03\xf8\xd4\x4f\xeb\x6c\x36\x1a\x16\x47\xa2\xbf\xee\xe3\x48\x3a\xed\xad\xda\x60\xa9\xfe\x3a\x5c\xec\xd8\xd5\x95\x79\xbf\xfd\x10\xdc\x3f\xc2\x72\xe2\x8e\xab\x28\x8b\xbe\x88\x9d\xd0\x42\x71\xfa\xc9\xf5\xb3\x17\x91\x14\xbc\x06\x0a\x7b\x23\xaf\x15\x3b\x2e\x37\x95\x86\xc7\x7b\xc1\x61\x11\x96\x13\xa7\x52\x22\xf7\xad\x39\x5a\x63\x74\x6a\xa9\x72\x6c\xa9\xa5\xd7\xd2\xa3\x2c\x11\x2d\x79\xfc\x18\xd0\xef\x94\x3c\xa7\x9c\x7e\xcb\x07\x62\x20\x16\xb3\xdf\xe3\x7c\x1e\xe7\xda\x28\x15\x35\xd6\x63\x8b\x22\x72\x79\xf2\x56\x90\xc1\x5e\x71\xfd\xee\x97\xa0\xdc\xee\x46\xa1\xd1\x37\xe0\x58\x0f\xcb\x89\xc7\x45\xb9\x03\x68\xc3\xba\x8e\x71\x81\xdf\xbf\x4d\xba\x33\xa0\xe4\xee\x84\xb0\x64\x73\xfc\xf9\x9a\x25\xaa\xea\xcd\xd1\x4a\x0e\x9e\x34\x86\xe5\xc4\xae\xac\x09\x23\x01\x8a\x9c\xdf\x4f\x2b\x0e\x8b\x70\xde\x11\x26\x7e\xb5\xfa\x7c\xf6\x59\xdc\x49\xf5\x7e\xa2\x46\xd5\x29\x8b\xb0\x00\x88\x81\x58\xcc\x66\x13\xc0\xaa\x1c\x63\x6a\x80\xb6\xfc\xc8\xc1\xd2\xa4\x80\x4f\xb4\x22\xc2\x44\x38\x85\x7f\xc0\x7c\x9a\xf9\xc4\x98\xe2\x04\x5c\x59\x60\x39\xd1\x73\x7d\xa1\xbe\x80\xfe\x7e\x36\x33\x49\x1a\x8a\xaa\x0c\x2f\x76\xa8\xa3\x3e\x75\x83\xe6\x5f\x5d\xf6\xd3\xae\x2f\xab\x9e\xcc\x44\x20\x06\x62\x31\x15\x89\xa7\xf0\xad\xfe\x76\x4f\x01\x33\x0e\xfe\xde\x36\x7d\xcd\xe4\x81\x8a\x20\x7b\x07\x81\x8f\xeb\x63\x34\x0e\x73\xa5\x5c\x70\xf1\x86\xe5\xc4\xee\xfb\x3a\x45\x02\xa5\x9b\xcb\x5f\xa9\xd0\xd3\x65\xe4\xfc\xb6\xdf\x78\xa8\xde\x09\x68\xe5\x97\x26\x0b\xab\x8a\x9e\x97\x38\xfa\x07\x03\xb1\xd8\x4d\xb0\x93\x3e\xcf\xf8\x98\xcf\x7c\xab\x28\x2e\x61\x7e\x76\x02\xe1\x97\xd6\x28\xf7\xf3\x8c\xa3\x92\x57\xd3\xd6\x43\x13\x33\xe0\x6e\x16\x96\x13\x8d\x17\xa2\xd6\x27\x54\x56\xd2\x34\x3f\x0c\x37\xa4\x23\x63\x26\xd6\xcc\xce\x51\x05\xee\x21\x5c\x26\xfe\x0d\x9e\x2b\xfe\xe8\xcb\x0d\x62\x20\x16\x8f\x6c\x3d\xb1\xa3\x32\xaa\xae\x78\x5a\x7b\xef\x7d\xbc\x7e\x1e\x13\xc6\xe0\x6e\xe0\x84\x74\xe8\x5e\x5c\x5a\x48\x42\xe2\xb9\x1f\xe8\x0d\x2c\x27\x06\x9e\x6e\x19\x61\x56\x12\xed\xd3\x51\x8a\xb0\x08\xff\x20\x20\xab\x60\xae\xd1\x4f\x97\x74\x33\x13\x47\x90\xf9\xca\x73\x58\x03\x1e\xe3\xc2\x72\x22\xc9\x74\xcc\x6b\x79\xf9\xc2\x89\xf4\xd9\x5f\x9f\x17\xb9\x83\x0a\x25\x3a\x28\x86\x31\x85\x2b\x18\x0c\xcd\x5f\x5d\xbf\x78\x9c\x09\xee\x1f\x61\x39\xf1\x25\xaa\xb8\x47\xd4\x62\x3c\x22\xb2\x5d\xc8\x64\xf6\x00\xee\x9b\x76\x29\xfc\x37\x6c\x3f\xd8\xc4\x11\x89\x23\xe3\xbc\xf3\x9b\xc0\x13\x94\xb0\x9c\x98\xec\xe6\xa6\xcb\xc2\x12\x9b\xc4\x8f\xb3\x4b\xd6\x4c\xf6\xe0\x35\x05\xdf\xec\xa3\x12\x93\x09\xce\xe8\xbb\xa8\xcf\xfd\xe9\x1d\x81\x29\x4f\x10\x96\x13\x9b\x03\xa3\x48\xde\xf0\x34\x5d\xb6\x56\x77\xcf\xff\xce\x9f\x5c\xae\x0e\x10\xb5\xb3\x78\xb7\x82\xdf\xd7\x5c\x4a\x62\x7e\x64\x8e\x04\x62\x20\x16\x73\x71\xb8\x76\xb8\x53\x97\x23\xd8\x91\x1e\xb6\x66\xac\x9b\x99\xc7\xf7\x92\x54\x7c\x89\xc0\x0b\x5b\xde\x3b\x63\xd4\xff\xcb\x88\x01\x62\x20\x16\xc7\x6a\xdf\x29\xc7\x0d\x89\xfb\x44\x41\xc9\xcf\x42\xc0\x47\xf1\x51\x20\x12\xb9\x93\xa4\x5c\x75\x77\xe3\x5d\x63\xbb\x1e\xc3\x9a\x30\x88\x81\x58\xec\xa1\x41\xbd\xf1\x52\x28\xf3\xf9\x4e\xad\xf6\xcf\x5a\x5a\x5a\xa3\x08\xb1\xf1\xa6\x54\x2e\x7f\x29\xec\xe2\xdc\x79\x91\x8b\x3e\x16\x10\x03\xb1\xd8\x51\x9c\x37\xdb\x95\x0f\x55\xa2\x4f\x97\x6a\x7e\xd7\x8f\xfe\x7c\xc1\x89\x5d\x3d\xf5\x12\x07\x57\x99\x14\xe5\xe6\xe4\xc4\x1a\x0b\xc4\x40\x2c\x76\x9c\x47\x75\xc0\xa9\x92\x0b\xc7\x97\x92\xbe\x0a\xb0\xf2\xdc\x8d\x92\x0c\x4c\x7e\x6a\x3c\x54\xb4\x6c\x56\xd4\x45\xdb\xc5\xc4\x08\x62\x20\x16\xff\xe0\x2c\xc9\x62\x29\x36\xcc\xfe\x71\x1a\xdf\x51\x41\xb2\x7c\xbf\xbf\x3f\xbd\x45\x6c\x87\xf6\x9d\x01\x77\x55\xc1\xaa\x54\xd7\x3f\x5f\xf1\xbf\x17\x55\xeb\xa5\x65\x97\x3c\xfe\x84\xe3\x21\xaf\x21\xeb\x64\xb8\xe3\xbf\x61\x58\x84\x18\x6d\x91\x40\xba\x57\xa7\x7e\xa6\xf0\xb7\xe1\x35\xe3\x7f\x0f\x44\x33\x0e\xac\xd8\xfe\xaa\x64\xdc\x41\x18\xd1\xec\xda\x3e\xb4\x16\x43\x1e\x04\x42\x53\xc6\x85\x0b\xf7\x56\x32\xd8\xbd\xaa\xde\x10\x83\x7f\x17\x36\x82\x64\xb7\x8f\x84\xbc\x78\x99\xa7\xfc\xec\xbb\xbf\xe7\x3d\x04\x77\xe9\x70\x76\x44\x23\xd3\xdb\xdc\xba\x9c\x90\xe5\x91\x3a\xe4\x7f\x3e\x3e\x44\xfb\x46\x93\xa2\xc5\x47\xfa\xeb\x29\x03\xf1\x3e\x7a\xcf\x59\xd7\x7f\xeb\x84\x7d\x5e\xf9\x1b\x57\x7d\xb2\x29\x47\xf1\xf4\x71\xdf\x11\xb0\xf5\x08\xc2\xfa\xa3\x8e\x07\x16\x8f\x1d\x0f\x1b\x59\x1e\x76\x4c\x76\x9d\x6e\x24\xf7\xeb\x02\xaa\x6f\x0d\x37\x46\x54\xfa\xa8\x5a\xe7\x44\xbb\x1a\x94\x20\x06\xa2\xbd\x9d\x9a\x67\x3b\x5b\x21\x27\x1d\x69\xd7\xc6\x6e\x4f\x40\xdc\xe8\x87\x9c\x30\xcf\x9f\xfd\x1a\x59\x67\x2f\x0a\xce\xeb\x0b\xc2\x04\x40\x0c\x44\x7b\xa3\x41\x4c\x0b\x55\xdb\xc7\xcf\x92\x27\x13\x4a\xf2\xcf\x52\x4b\x1a\xd7\xb4\x1e\x2d\x76\x62\x48\xa5\x09\xa0\xdf\x12\x0f\x06\x80\x1b\x21\x2c\x27\x32\x7c\xa7\x7b\xb7\x49\x8b\x20\xfc\x48\x4a\x77\x7b\xef\x30\xba\x8a\xd5\x46\x87\x8a\x50\xe8\x68\x25\x20\x6d\x97\xd1\xb7\x62\x9f\x0d\xc4\x40\xb4\x5f\xbe\x32\xad\x56\x8f\x7c\xb7\xe4\xbf\x96\xaa\x86\xc9\x4b\xae\xcf\xdf\x95\xd2\x75\xb3\x94\x4e\x45\xa7\x88\xc1\x8f\xc6\x17\x25\x0a\x62\x20\xda\xcb\x27\x06\xf9\x89\xc9\x7c\x24\x53\x8b\x3e\x36\x9e\x50\x0a\x59\xe9\x20\x75\x4a\x31\x74\x95\xfb\xad\x58\x5b\xcc\x65\x96\xb7\x83\x0d\x62\x60\x6f\x3a\xba\xb7\x93\xbd\xfb\x9a\xeb\xfe\xe6\x58\xc1\xe4\xcf\xc5\x4a\xd7\xb3\x9a\x19\xee\x69\x86\xc8\xe6\x8c\x34\xda\x0a\x22\x9c\x41\x74\x10\x03\x59\xbc\xed\x14\x98\x15\xa9\x69\x70\x82\x7c\x67\x06\x10\x90\x0f\xf2\x89\x66\x0e\xb8\x3d\x56\x03\x16\xa3\x43\x51\x1c\xdb\xb8\x46\x4a\xfe\xf9\x8a\x61\xb7\x06\xbc\xda\x62\xf8\x2b\xcc\x8c\xd9\xea\xcd\x70\x8d\x24\xaf\xef\xc9\x30\x99\xf8\xc5\xf4\xe4\xfc\xf7\xbb\x1e\xfa\x6b\xa3\xd9\x02\x44\x10\x03\xb1\x58\x1c\x2d\x9f\xd6\xa3\xe2\xc5\xdf\xc9\x17\x53\x46\xda\xe6\x8b\x2b\x29\x9d\x96\xaf\xf9\xd6\x51\x3e\xe0\x37\xa5\xe1\x23\x19\x66\x01\x8f\xc1\x12\x84\xe5\x44\xba\xda\x82\x74\x77\x0c\xcc\x87\x56\x5f\xdc\x4a\x91\x48\x30\x53\x47\x50\x25\x35\x75\xe5\x3e\x5c\xcd\x0f\x53\xb2\x11\x21\x80\xef\xeb\x12\x84\xe5\xc4\xa2\xb2\xd0\x5f\x5e\x9a\x9e\x9f\xd9\x5c\x59\x11\x7a\x33\x3b\xfb\x64\xa4\xb5\x06\xfe\xf8\x8c\x56\x0c\xb6\x13\xd1\x30\xc9\xae\x89\x83\x18\x88\xc5\x97\x31\x66\x03\x33\x06\xc4\x25\x1b\x91\x4e\x59\x75\x2f\x56\x68\x54\x7f\xee\xe3\xd9\x65\xf0\x2a\x22\x2d\xb9\x4f\x92\xc8\x69\x32\x83\x18\x88\xc5\x9c\xde\x15\x89\xe4\x48\x01\x08\x07\xbf\x9f\x0b\x5c\x06\x8f\x73\x3a\xe8\x27\x6e\x7f\x91\x8c\x09\x73\xbe\x42\x43\xad\xd1\x7f\xc2\x07\x62\x20\x16\x53\x12\x1c\x15\xe4\x04\x33\x7d\xa1\x1f\x46\x17\x72\x43\x2b\x20\x2e\x1f\x9b\xad\x34\x63\x21\xbb\x70\xef\xfa\xa1\x47\xeb\xf6\x09\xf4\x06\x96\x13\x1f\x8d\x56\x1d\xa3\x3e\xa4\xeb\x4b\xe2\x69\xec\xa8\x6e\x56\xa7\x90\x9d\xfb\xec\x2d\x46\xeb\x5b\xae\xa7\xb9\x6e\x12\xcd\x9d\x48\x02\x62\x20\x16\x57\xe6\xdf\x24\x16\xef\x0c\x34\xa6\x3e\xbc\x3b\x1d\x38\xc9\x9f\x7b\x27\xa0\x91\x54\xdb\xf2\x2b\x15\xfe\xd7\x11\x46\x7a\xf4\x40\x7c\x10\x03\xb1\xf8\xe1\x87\x16\xa3\xc5\xeb\xbb\xb2\x88\xcb\x64\x6d\x7f\xf1\x6e\xa6\x42\xae\x2f\xd6\x02\xb0\x3d\x62\xf7\x50\xb6\xbd\xb9\x5b\x72\x24\x40\x0c\xc4\x62\xba\x86\xdc\xa8\x92\x7d\x0f\x8e\x2e\xb4\xaa\x37\x9d\x4d\xd1\xf7\x3a\x95\xc8\x6a\xe9\x73\xfc\xe5\xed\xce\xf3\xf4\xdf\x21\xec\x73\x81\x18\xd8\x03\x12\x4a\x28\x15\xd6\x32\xd3\x59\xb3\x36\x9a\xbb\x73\x74\x84\x6a\xad\x16\x1b\xe4\x24\x9d\x4a\xd6\x05\x25\xda\xd3\x2c\xec\xf2\x80\xb3\xf5\x82\xb0\x9c\x78\x2f\x01\xcf\x84\x64\x6e\x2e\xf7\x0f\x06\xfb\xad\x13\xe5\x79\x8f\xa6\x2f\xae\x89\xda\xeb\xe7\x9e\xcc\xce\x7d\x66\xa2\x93\x61\x64\x20\x06\x62\xf1\xb0\x7b\xd5\xf5\x2b\xaf\x29\x46\x91\xc5\x6e\x04\x19\x1f\x57\x99\x8b\xd8\x03\xa4\x7e\x8c\x96\xd0\xc2\x5a\x8c\x85\x56\xcb\x21\x70\x6f\x0d\xcb\x89\x1f\x76\x2a\x23\xf5\x10\xf0\x49\x75\xb3\x8e\x96\x1b\x53\xa4\x71\x8e\xb2\xe9\xbc\x75\x65\x18\x29\x0f\xfc\xc9\xcf\xc5\xd6\x38\x11\x40\x0c\xc4\x62\xba\x57\x92\x9f\xfb\xe5\xe4\xcd\xef\x67\x0c\x91\x84\xd6\x7d\xb5\x73\xb9\xd8\x42\x7d\x45\x89\x9b\x3b\xac\x13\x54\x98\x28\x4f\x0b\x6e\xe1\xb0\x9c\x98\x6b\x5f\x31\xf2\x9a\x3d\x4f\x3f\x98\x65\x9d\xdc\xd2\x6b\xb4\x72\x15\xdd\xe9\xe2\xad\xd1\xd1\xc4\x6e\x5c\x52\x04\xb9\x3a\xf8\xe2\x22\x41\x58\x4e\x7c\x20\xd3\xeb\x54\x2c\xaf\xde\x6a\x81\x2b\xb9\x14\xce\xf9\xe6\xcb\x57\x86\x97\x1f\xb1\x59\x0b\xb7\xb2\x6f\xca\xe9\x4b\xe5\x16\xc0\x81\x08\x96\x13\x49\x42\xe5\xf0\x9f\x9c\xbd\x42\x97\x73\xec\x9b\x4c\x14\xde\xe0\xda\xfc\x5b\xee\x9f\x42\xed\x30\x91\x9c\x8b\x82\xbc\x1b\xf7\x10\xdc\xa6\x60\x39\xf1\xe1\x7c\x26\x56\x1d\x5a\xdc\x91\x3f\xe2\x70\xac\x23\xba\x19\xef\xf5\x23\x6b\xad\xe7\x54\xf6\x3d\xc8\x58\xca\xf2\x58\x0c\x17\x38\x20\x06\x76\x45\x13\x89\x39\x7b\xdc\x7a\xa1\xa4\xbc\x6e\x03\x3e\x41\xbd\xa7\xb9\x5f\xdd\xc0\xcc\xc1\x9e\xa5\xb2\xf2\xfb\x1a\xc1\x15\xff\x3a\x5a\x10\xf3\xef\x45\xd5\xcb\xb9\x8a\xa2\xe4\x31\x0d\xcb\x09\x4f\xad\x1d\xe6\x86\x52\x83\xfb\x75\xf6\x4c\x0c\x38\x3f\xba\x24\x8f\x27\xe9\x65\x51\x27\x39\xff\xf7\x40\x74\x92\xf6\xa3\x28\x50\xdf\x42\x28\x8b\x9d\xaa\x76\x47\x04\xe3\xbd\xb9\x5d\x39\xdf\xc9\xfb\x57\x05\x8d\xd1\xc8\xb2\xf8\xee\x32\xa0\x68\xb0\xfe\xc8\xbc\x9c\x6b\x85\xcd\xd2\xdb\xcf\xe1\xc6\x66\xf8\xf8\x61\x32\xd7\xe4\x7b\x09\x2b\x41\x77\xba\x68\x54\xd4\xf1\x3e\x4b\xc5\x3e\x0e\x10\x03\xd1\x3e\xce\xf7\x90\x90\x6b\x25\x43\x58\xfe\x48\x39\xbc\x8c\x84\x62\x5f\x70\x14\xa5\x80\x37\x32\x47\x20\x52\xe8\x45\xff\xf5\xb0\xae\x18\x88\x81\xbd\x23\x46\xc0\xa4\xaf\x87\x88\xb8\x59\x5a\x67\xb9\xfb\x26\x54\xce\xeb\xc3\xb7\x95\x2d\xdf\x50\x86\x8a\x07\x01\xfc\x78\x6b\xdf\x38\xc0\x55\x17\x76\x3b\x63\xf8\x27\x0b\x7e\x4e\x55\xcb\x77\x84\x9e\x28\x14\x6e\x63\x18\x21\xc9\xca\x4a\x23\x05\xfd\xde\xcf\xa8\x09\x87\xc6\x4d\x04\xf5\xc0\xb9\x0a\x96\x13\x25\x36\xe3\xd6\x7a\xf2\xc7\xfa\xa2\xaa\x87\x7c\x5a\xdf\x27\x5b\xf4\x3a\x5d\x8b\x76\x3f\xa7\xeb\xdb\xc9\x3e\x29\x7b\xdb\xae\x0c\x8e\xcc\xb0\x9c\x58\x23\xd8\xf5\xa3\x77\x72\x2b\x96\x4e\x8a\x25\x4b\xf8\x1d\xe9\xba\x78\x8c\x28\xf1\xbc\x9c\x0a\xd5\x6c\x74\x21\xc3\xd4\xe7\x62\x3c\x10\x03\x7b\x65\x68\x32\xe9\x61\x46\xb7\x2b\x62\x63\xdb\xa1\x93\x48\xf4\x1f\x9b\xb1\x63\x72\x13\x3d\x82\xa5\x67\x18\x13\x88\x38\x88\x64\x9d\xd4\x20\x06\xa2\x3d\x6e\x94\x47\x4f\x91\x8e\xa8\xa1\x34\xcf\xfb\xd5\xb5\x89\x10\xfd\xcc\xbc\xc2\xd2\xad\x39\x1c\xc3\xdb\x8b\x79\x9f\xc9\x74\x73\x5e\x10\x03\xd1\xbe\x70\x52\x9b\xe8\xd5\xa7\x0d\xab\x12\xca\x4c\xe7\xb3\xab\x9a\xb3\x3d\xc6\x87\xa6\xfd\xa4\x0d\x5b\xdc\x15\xcf\xe3\xa6\xd4\x87\xc0\x8d\x10\x96\x13\x3f\x48\x15\x68\xec\x15\xb3\x11\x95\x2c\xec\x17\x74\xf6\x22\x7f\x16\x1c\x08\x7c\xd8\xc6\x41\xbb\x7b\x86\xeb\x20\xad\x2e\xa7\x08\x1e\x3f\xc2\x72\x62\x52\x37\x91\xa4\xa7\x73\x43\xd4\x6e\xe8\xdd\xa6\x2d\x99\x40\xfb\x55\x03\xec\xcf\x89\xb5\xc9\x99\x22\x1e\xbc\x46\x34\x57\xe7\xe0\x11\x1b\x2c\x27\x86\xe8\x55\x91\xa4\x54\xbe\x98\x27\xbb\x1d\x54\xab\x4e\x30\xe3\xf9\xe9\x29\xd9\x39\x6d\x60\x6a\x44\x20\x70\xd0\xd9\xef\x35\x01\x8e\x67\xb0\x9c\x98\xfb\x93\xbe\x85\xbe\x2b\xfb\x93\x94\xce\xba\xae\xfb\x9e\x7e\x56\x00\xea\x40\xc5\x93\x9f\xe8\x19\xbf\x03\xdf\x7b\x1a\x24\x88\x81\x13\x30\x2c\x27\x5e\xe9\xf8\xaf\x76\x26\xf6\xfd\x20\x67\x93\x73\x6b\x29\x0f\xcc\x4a\xa2\x9f\xbd\x37\x26\x89\x49\xa5\xfb\x99\x33\x36\xde\xee\x05\x3f\x88\x81\x58\xac\x6d\xe3\xd2\xd3\x4f\xb9\x84\xe4\x2e\x5c\x23\xe5\x8b\x43\x39\x84\xc7\xf0\x64\xc6\xef\xfc\xca\x03\x73\x07\x37\x13\x53\x29\x9d\x02\xc4\xc0\xee\xeb\x5a\x7c\xd9\x68\x18\xa9\xe8\x3a\xc2\x62\x50\x71\x1c\x11\x81\xb5\x26\xd2\x87\xfd\x4d\x2a\x76\xbc\x2b\x26\x3d\x7b\x86\x95\xf8\x9f\x7f\x0a\x62\xf1\x17\xc2\x39\xdb\x65\xb5\xec\x5a\xbf\xa7\x3f\x3f\x0c\xb8\xcd\xe3\xc4\x6a\xa7\xbf\x2a\xfc\xab\x8e\xf3\xfc\x68\xb2\x59\x75\x79\x09\x0d\xc4\x40\x2c\x8e\xda\x8e\xf1\xf9\xe6\xa7\x86\x43\xac\x45\xd6\x6b\xf5\x4a\x21\xf3\x61\xd4\x2d\x03\xe9\x8d\xcc\xab\x82\x37\x8d\xec\x62\x14\x91\xc8\x20\x06\x62\x71\xc6\xf3\x8d\x98\xb4\x34\x11\x74\xd5\x2a\x59\xfc\xc8\x2f\xb2\xaf\x54\x10\xa5\xc7\x71\x53\x3d\x79\xd1\x82\xf3\x35\x5e\x5b\x16\xd0\x80\x18\x88\xc5\x51\x81\x5c\x22\x37\xad\x06\xab\xed\x37\x66\x4a\x0a\x33\x71\x0d\x4c\x4f\xf7\x18\xa5\x34\x49\x07\x6c\x6b\xfd\x7d\xe4\xc2\xb7\x81\xd2\x2f\x08\xcb\x89\x52\xe3\x22\x18\xdf\xcb\x2a\xd9\xf4\x18\xc9\x1a\xd7\x84\x06\xe9\x78\x65\xdf\x8c\x35\x49\x98\x66\x89\x59\xba\xdd\x3d\x65\x41\xb8\x0b\x62\x60\x23\xc8\xa6\x07\xe5\x6d\xda\xb8\xf1\x16\x7f\xa9\x8e\x43\x73\xd1\x85\xfe\x96\x6e\x17\x6e\x75\x23\x4d\xf6\xaf\xbe\x94\xc9\x5a\x14\x70\xa1\x80\xe5\xc4\xba\x12\x07\xcd\xf7\x34\x1a\x29\x8c\x5a\x5c\x6f\xfe\xfa\xfa\xd9\x0d\x32\xb8\xf6\x68\x8a\xa3\x26\x2d\x59\xab\x2d\x71\xbd\x37\xf8\xe7\x9f\x82\x58\x7c\xd2\xc5\xdf\x5b\xd3\xf0\x2e\xc8\xdb\xaf\xf2\x11\xf2\x94\xe4\x68\x65\x53\xd7\xe5\x74\x82\xcb\x9a\xe8\x27\x07\xac\x4d\xb6\x53\x70\x74\x85\xe5\x44\x92\x8d\xe5\xef\x1b\x3e\xfa\x72\x65\x6f\xcc\x6c\xda\xb9\x75\xc5\xb8\xb0\x95\x5f\x4f\x69\x2f\xdc\x3a\xca\x2a\x73\x87\xb2\xb2\xfd\xf3\x69\x60\x0f\x3b\x8d\x2a\x0a\xb8\x8f\x9e\xc4\x9a\x54\xbc\x69\x83\xdd\xc2\xce\xf3\xf5\xdd\x0f\xf3\x52\x6f\xbf\x1b\x2c\x74\x87\x2c\x8d\xf7\x21\xe0\x40\x04\xcb\x89\xb1\xb8\x61\xc1\xc1\x0b\x99\x18\x14\x2f\x28\xec\x7e\x07\xa7\x5b\x11\x15\xe7\x3e\x0a\x13\xd0\xed\xd0\xb5\xd2\x2e\xff\x8b\xa1\xf6\xcf\x2f\x05\xb1\xf8\x93\x0c\x25\x8f\x8f\xbf\xf6\xa8\xc1\xa3\xef\x02\x8e\xc7\x07\x3a\x86\x4a\x66\x1d\x56\xdb\x5f\x6b\x10\xdc\x43\x91\x5c\x8a\x95\xfe\xc1\x40\x2c\xb6\xea\x7a\x87\x9a\x38\x78\xce\xd8\x86\xb5\x8d\xb8\x50\xa0\x7a\x47\xf6\xfc\x75\x42\xa1\x18\x17\xcd\x7c\x72\x60\x73\x55\x95\x00\x38\xc9\xc0\x72\xa2\x66\x70\x97\xb1\x2c\x53\x18\xba\xaa\x97\x57\x6c\xfd\x7d\xd4\x9f\xfd\x38\x05\x79\x0f\x50\x7a\x19\x48\xf4\x4a\x83\x35\x64\x29\xc1\xef\x06\x96\x13\x99\x7e\x1d\x09\xe8\xa7\x96\x09\xdf\xab\x76\x4c\x79\xaf\xcb\x34\x1e\x3f\x73\x58\xf0\x94\x34\x22\x85\xd5\x74\xa5\x93\xb4\xe3\x0b\x27\x88\xf9\xf7\xa2\x6a\x53\xc2\xf9\xbb\x0f\x2f\x76\x77\xf6\xec\x8a\x73\xf3\x56\xe2\x7e\x1d\xec\x5d\x9d\xd7\xcf\x31\x0b\xbe\xcf\xef\xf2\x0f\xc2\x8f\x74\xfb\xef\x81\x88\x0a\x61\x9f\x76\x7c\xd0\x66\xe4\xbe\x5c\x47\xe9\x29\x91\x73\x30\x6d\xe9\x89\x4c\xbd\x48\xf2\x0d\xc6\xd4\xc1\x3a\xda\x58\x98\x10\xf8\x77\x61\x2f\xeb\xd7\x88\x48\x6d\x95\xbd\x52\x54\x98\xc3\x7d\x6c\xa3\x5c\x4d\xef\x49\x67\x4f\x24\x27\x39\xbc\x3e\x65\x53\xb2\x8b\x84\x59\x06\xee\xad\x61\xfd\xf1\x41\xb3\xed\x1f\x77\xe2\x9b\x1b\x57\x4a\x22\xa9\x38\x6b\xea\xd0\x4e\x6b\xab\x32\x29\xec\x94\x99\x77\xa4\x4f\x8f\x85\xc5\x5e\x80\x47\x25\xb0\xfe\xa8\xa8\xa9\x7c\xad\xf0\xe5\x35\x29\xd2\x52\x52\xc3\xee\xa7\x99\x44\xd2\x45\x45\x41\x3c\xff\x9a\x5d\xd1\xd9\xe0\x59\x2f\x73\x02\x70\x37\x0b\xbb\x9d\x11\xf9\x50\x45\x47\x7c\x30\x57\xf5\xa4\x8a\x71\xec\xe5\xa7\x5f\xf7\x3d\x7e\x66\xc7\xe2\x23\x8b\xd6\xd4\xff\xf6\x1c\xe4\x93\x1a\x04\xcf\x9e\xc1\x72\xe2\x38\xf9\x1b\xaf\x88\x3d\x46\x4b\x21\x3d\x3a\x89\x60\x3c\xd6\x8f\xb1\xd4\x76\x22\x6f\x96\xd2\xd7\xcd\x37\x1b\x92\x2f\xe2\x16\xc1\xe3\x00\x58\x4e\xec\x4f\x10\x91\xcc\xd8\xaf\xe4\x37\xb3\xa0\xe9\x7c\x5c\x67\x36\xac\x7a\x1a\x4f\xe1\xee\x6d\xf4\xdb\x38\x60\x7f\x3e\xc7\xea\x02\x13\xc4\x40\xb4\xff\xe6\x94\x39\x7c\x87\xef\x59\x54\xfc\x5a\xee\x47\x31\x73\x9e\x77\x69\x7f\x87\x29\xde\x21\x7e\xcf\xb5\x7c\x16\x6a\x18\x2d\xf8\x1d\xdc\x7a\x60\x39\xf1\xfe\x2b\x63\x6d\x84\x3d\xbb\x34\x3d\x8f\x0b\x25\xd7\x55\x5d\x93\x82\x78\xf6\x69\x6a\x9d\x4a\x8d\xca\xce\x09\xa1\x51\xa5\x16\x70\x65\x81\xe5\xc4\xd2\xd4\x73\x93\xf2\x88\x87\x5f\x3e\xe0\x98\x2c\xec\x3e\xbe\x28\x92\x2c\x78\xea\x18\xf4\x98\x63\xe0\x98\x68\x0f\x8f\xf4\xc6\x09\xfc\x34\xb0\x9c\x78\x82\x60\x8f\xfb\xae\x7e\x36\xc5\x10\xbd\xcc\x5a\x2c\x96\x62\xa0\xc2\xaf\xd3\x18\x7b\xf3\x91\x1c\x19\x42\x52\x66\xc4\x62\x3c\x38\x82\xc0\x72\x62\x75\x93\xee\x98\xe9\xf0\x90\xd2\x41\xbe\xef\x9b\xd3\x77\x9c\x01\xfe\x21\x54\x03\x6c\xa1\x56\x3f\x34\x76\xde\x15\xbe\x72\x93\x07\xcf\x73\xc2\x72\xe2\xc3\x0d\x06\x61\xbc\xce\x42\x92\x5b\x87\x4e\x35\x96\xaa\x41\xf4\xb1\x3d\xeb\x59\x91\xb7\x77\x12\x8d\xa2\xd8\x39\x0a\x43\xfc\xc1\xc5\x1b\x96\x13\x6d\x92\xbc\xf2\xa6\x67\x0a\x43\x03\x15\x2d\x62\xf8\xe2\x1b\xf4\x09\xc5\xe7\xb6\x9e\xfd\x72\x25\x4b\x5b\x16\xff\xe8\xf9\xdb\x10\x1c\xcf\x60\x39\xf1\xfb\xb1\x78\xa6\x47\x34\x6d\xba\x3c\xb6\x22\x27\x45\x91\x8e\x9f\x81\x62\x61\x68\x4c\x71\x0d\x86\x49\x08\xd7\xcb\x95\x05\x59\xf0\x20\x03\x96\x13\x57\xde\xf3\xdd\x5a\x94\x7c\xec\xe0\xa5\x92\x55\xb1\xf2\x43\x26\xb4\x62\xad\xd0\x54\x45\xdd\x5e\xce\xa8\xfc\xf4\x82\xb9\xff\x21\x78\xa4\x0f\xcb\x89\x4e\x6b\xc8\xa4\x64\x0d\x6d\x12\x8a\xa8\x24\x42\xf9\x0b\x0a\xed\xb5\x01\x87\x93\x2f\xbc\x95\x6b\xfd\x8f\x05\x8e\xd5\xfd\x48\xc1\xf3\x55\xb0\x9c\x38\x2a\xfb\x1e\xe1\x72\xc1\x85\xd8\xc6\x3d\x29\x31\x7a\x19\x85\x5d\x77\xb7\x69\x6c\xef\xf7\x5d\x3a\xc4\xba\xd4\xdc\x09\x21\x2e\x70\x20\x82\xe5\xc4\x1b\xef\x90\xa2\x5f\x17\x97\x27\x7c\xcb\x0e\x6c\xe9\xd5\x82\x31\x8c\x0f\xba\x13\xe7\x12\x84\x57\x72\x5b\x5b\x04\xc9\x58\xb3\x80\x28\x2e\x08\xcb\x89\x2f\x35\x7b\x95\x5b\x5f\xbb\x1f\xcb\xa3\x4e\xd7\x94\xff\x30\x4d\xbf\x2b\xf3\xed\x86\x4e\xf2\x5e\x4a\x43\xa7\x26\x7e\xcd\xce\x2c\x38\x3b\xc0\x72\x62\xbb\xa1\xca\xf2\xa4\xa2\x62\xf1\x75\x7d\xc4\x43\xa7\xf0\x6f\x2f\xd3\x2c\x42\xc6\x45\x99\xbf\x62\x6c\x5f\x4b\xe1\x61\x31\x11\x82\xc7\x71\xb0\x9c\x48\x3c\x45\xbd\xfb\xe9\x35\xa2\xb2\x16\x65\x15\xf6\x4f\x04\xe2\x3c\xcb\x7e\x97\xd5\xb4\x84\x38\xc5\x71\x77\x03\x8a\x36\x89\xb7\xe0\x94\x07\xcb\x89\x18\xca\x56\x1f\x13\xf9\x6a\xe4\x54\x30\x52\x75\xbf\x7f\xcc\xd8\xdb\xd8\x39\xde\x61\xca\x39\x23\xf7\xc4\x63\xab\xa9\x4d\xd2\xe6\x01\x31\x10\x8b\xdf\x3a\x35\x0a\xcf\xa1\x47\x14\xd8\x5a\x0e\xf0\x99\xdf\xb8\x1e\x95\x70\x9e\xe8\x5e\xd3\x08\xbc\xec\xa9\x19\xf8\x6c\xfc\xdc\x0f\xdc\x18\x60\x39\x71\xc2\x29\xce\x25\x57\x3b\x66\x56\xaa\x3c\x68\x6e\xb4\x80\x74\x6b\xf5\xcd\x5f\x14\x89\x3a\xa2\x98\x92\x55\x0b\xf4\x22\x39\x4a\x70\x11\x85\xe5\xc4\x02\xbe\x75\x63\x1f\xbb\xc8\xfd\x87\xe6\xec\xd2\xdb\xaf\x4a\xe5\x1a\xc6\x34\x6b\x10\x42\xc5\x3f\x91\x7b\xdf\x7b\x40\x1a\x8f\x83\x0b\x62\x20\x16\xc7\x31\xbc\x23\x1d\x5c\x0f\x75\x4f\x4f\x6e\xb8\x57\xf8\x83\x8a\x39\xec\x0d\xe2\x4b\x43\x67\xb9\x5e\x04\x06\xa4\x17\xc3\xf4\xbd\xe0\xe9\x52\x58\x4e\xe4\x10\x60\xa4\x0b\x18\xbc\x1d\x21\x2e\x8a\x63\x2e\x8e\x58\x63\x57\x98\x0b\xd2\x0d\xd3\x33\x9b\xbb\xbe\x4f\xf8\xf3\xb9\x4d\x30\x78\x46\x1a\x96\x13\x55\xcf\xb6\x33\x16\xc8\x8d\x4b\xf3\x56\x76\xa5\x47\x51\xcf\x93\xaf\xd7\xf8\x5f\x39\x24\x86\xd4\x71\x52\x19\xcf\x85\x11\x2d\x01\x18\x21\x58\x4e\xac\xdd\x21\x93\xda\xd2\x30\xaa\x59\xbe\x74\xaf\xf5\x67\x2e\x32\xc6\xc3\x91\xfd\xb5\x47\xc0\xdb\xfd\x40\x20\x2a\xf7\x1e\x6b\x25\x3a\x88\x81\x58\xdc\x9a\xca\x37\xdc\xed\xd0\x5d\x4f\xa2\x35\x86\x1d\x46\xb6\xed\x1d\x5f\x61\x40\xe0\xe0\xa9\x88\x63\x3f\x21\x30\x72\x34\xb0\x21\x01\x62\x20\x16\x73\xe3\xa3\x7c\x6d\x8e\xaf\x3d\x3d\x54\xf8\x5a\x35\xdd\x14\x96\xc8\x1f\xfb\x28\x34\xdf\x7e\x18\xd5\xba\x20\x7a\x56\xb0\xf4\x99\x20\x88\xf9\xf7\xa2\x6a\xc7\x5f\x9d\x86\x42\x7a\x09\x87\xdb\xee\xcf\x47\xcb\x9f\xf4\x87\xe5\xae\x77\xc7\xf5\xbe\xe3\x1d\x95\x7e\x89\x70\xb8\xc9\x13\x73\xf8\xdf\x03\xd1\x97\xd3\x9e\xe9\xe6\x81\xdf\x4d\x46\xe1\x77\xf8\x2a\xe6\x36\x70\x30\x34\x87\xb6\xeb\x22\x90\x57\x06\x3e\xc9\x07\x14\xf0\x74\x50\x80\x7f\x17\xa2\x7d\xbf\xf7\xef\x46\xbe\x1d\xbb\x76\x17\xc2\x09\xe6\x2b\xd1\x9b\x1b\x7c\xc7\xfb\x7f\x84\xe6\xa9\x8b\xe8\x6a\x05\x9c\x79\xed\x0e\xfe\xf9\x4d\x20\xda\xcb\xb6\x53\xb1\xbb\x12\xa2\x70\x09\x68\x0e\xf7\x6a\xae\xad\xab\x22\x60\xd4\x52\x2f\xa9\x70\xc7\x69\xdd\x71\xd7\x7b\xa6\xf4\x4c\x14\xc4\x40\xb4\x17\x39\x27\xc4\xda\x8f\x17\xa3\x29\x92\x40\xed\x5b\x2b\x78\x99\xa5\x99\x6f\xcb\xc4\x23\x43\x1a\x3c\x7b\xda\xda\x7f\x56\x37\x26\x05\x62\x20\xda\x5b\xaa\xec\xf4\xa4\x1b\x6b\xe1\x28\x0f\x3d\x75\x60\xf3\x6d\x8d\x71\xff\x44\x45\xdc\x50\x9b\xa4\x6e\xf2\x70\x62\xe9\xb9\x7b\xcc\x3f\x86\x40\xb4\xef\x8d\xb7\x22\xd3\x2a\x8b\xc9\x42\xdf\x72\xaf\x5b\x3e\xdd\x15\x0c\x15\x7d\x36\xa1\x17\x83\x60\xbd\xa7\x10\xfb\xa7\xbf\xf1\x03\x23\x88\x81\xdd\xce\xd8\x8e\x45\x1a\x83\xcf\xe9\x28\x77\x8d\xfe\x29\xb1\x21\xc0\xd0\xb9\xa9\x4d\xb3\xa7\xa2\x6b\xc1\xd5\xf7\xc1\x13\x8b\x6b\x1c\xe0\x6c\xaf\x10\x2c\x27\x12\xd2\xbd\xee\x5d\x43\x0a\xa8\x47\x41\x8c\xb9\xf3\xd7\x22\xd0\xdf\xb0\x73\xa4\x61\x23\xd0\x1d\x9d\xbc\x32\xce\xc9\x46\xb4\x5b\x12\xc4\x40\xb4\xf7\xb4\xef\xab\x5e\x20\x5f\xd1\x94\x35\xc6\x5c\xaf\x36\xb6\xcf\x63\x27\xda\x19\xc8\x2d\x17\x61\x4e\x73\x46\x08\xbd\xd2\xe5\x65\x06\x31\x10\xed\x85\x8a\xf9\x09\x43\xbf\x35\x15\xe9\x4e\x90\x4b\x37\x3c\x7d\xb5\xe1\x24\xf0\x46\x6c\xf1\xc2\x2e\x70\x2f\x0e\xd7\x2d\x9a\x2e\x9b\x0d\xc4\x40\x16\xef\x6f\xe5\x1f\xdd\x72\x03\xfd\x6d\x33\x5f\xec\x5b\xd9\x86\xf6\x0e\xb8\xe7\x90\x38\x6d\xee\x39\x62\x51\x05\x9b\xa2\xda\xbf\x54\xfc\xe7\xbb\x81\x58\x9c\xf1\x63\xa5\x66\xf7\x9e\xac\xe8\xe3\xce\x1e\x33\x94\x0b\xd9\x0d\x89\x0a\xa4\xe1\x61\x0d\xfd\x30\xf3\xc3\x04\xc4\x95\x12\xab\xbb\x20\x06\x62\xb1\x37\xd3\xad\x40\xa3\x73\x91\xcd\xba\x29\x7f\x24\xcd\x25\xb7\x6a\x31\x76\x2c\x97\x92\xcd\x5b\xa1\x8d\xb6\x83\x5a\x5a\xb7\x68\x7c\x10\x03\xb1\x98\xde\xbb\x52\xe4\x98\xfc\xa5\x3c\x61\x70\x97\x2e\x5d\x9e\xd9\x68\x38\x45\xd8\xcf\xfb\x4e\x08\x32\x91\x5c\x1e\x83\xdd\xc5\x2e\x9c\x20\x06\x62\x71\x70\x2c\x32\x66\xf2\x36\xbe\x15\xcd\xf7\x6b\xc7\x1f\x1d\x85\xe7\xd7\x7a\xb9\x8c\x6f\x76\xb9\xe7\x42\xdf\x7f\xc6\x7b\x10\xb1\xca\x0e\x62\x20\x16\x3f\xbc\xc7\xba\xdb\x95\xc4\x11\xd8\x49\x67\xfc\x32\x22\xf0\x45\xe2\xc4\xc9\x0b\xf1\xe8\xbe\xf6\x05\x41\xfc\x2a\x92\x7c\xab\x53\x1c\x10\x03\xb1\xd8\x15\x4b\x65\xe1\xec\xb2\xb2\xb1\xcd\x50\x97\x77\xdb\x3e\x74\x2f\xbe\x6c\xf2\xee\xc5\xeb\xc7\x1d\xb6\x48\xb9\xe3\x16\xbd\xe6\xe0\x16\x0e\xcb\x89\xcd\xc4\xaf\x3f\xa2\xa2\x32\x63\xf0\xf5\x0c\xb2\xb7\x68\x24\x7e\x68\x34\x1c\x53\xb4\xba\x4c\x6d\xc5\x8b\x73\x31\x74\x3d\x24\x06\xff\x29\xe8\xbb\x13\x45\xee\x45\x26\xf9\x5e\x05\x7e\xe1\xdf\x96\x11\x7f\xf1\x84\x7b\x55\xec\xe8\xde\x38\xf5\xe1\xfa\xfd\xb3\x17\x06\x89\xd1\x0f\x44\x40\x0c\xc4\x62\x3a\x03\x6d\xc6\xf1\xeb\xcf\x1f\xfb\x59\x3b\x2b\x03\xee\x3e\x65\x6a\x78\x30\x14\x33\x69\x13\x8d\xd2\x8c\x22\x5b\xe4\x9f\xbc\x47\x0b\x62\x20\x16\xbb\xb3\x7b\x08\x4a\x98\x63\xaa\x1d\x9a\x3e\xcd\xee\x56\xbd\xf3\xfa\x95\x64\x31\xe5\x4a\x7e\xd4\xe3\x90\xd9\x14\x36\xd4\x0e\xf0\x0d\xd9\x42\xb0\x9c\x88\x16\x84\xc7\x8f\x96\x49\x9a\xbb\xea\x79\xeb\x1a\x17\xd7\x72\xa3\x17\x82\x8d\x37\x26\xe2\xcf\x1a\x4e\x85\xa6\x29\x3c\xf6\xed\x01\x88\x81\xdd\xd7\xa5\xf1\x63\xd7\x36\x60\x69\xc1\xfc\xd9\x52\xf2\x9b\x82\xb3\x1e\x0b\xef\x50\xfc\x67\x6b\x9b\x14\xf7\xfa\x3c\xbb\x66\xdb\xb7\x18\x40\x0c\xc4\x62\xa5\x31\x72\x05\xb4\x7c\x33\x3e\xe9\x32\x5b\xe2\xec\xa9\xeb\x39\xc2\x39\xb4\x44\xba\xc0\x82\x7a\xbe\x70\x31\xbf\xf9\x8d\x98\x7f\x7e\x29\x88\xc5\x15\x1e\xce\x7a\xca\xfa\xe1\x7a\xd8\xc3\x9a\xea\x83\x05\x68\x5e\x02\x07\x32\x2b\x45\x7f\x16\x24\x6c\x27\x9b\xf1\x89\xe7\x3e\x52\x83\x18\xd8\xbb\xf7\x8f\x7e\x32\xfb\xec\x7f\xab\xbd\x2e\x72\x49\x44\xeb\xed\xc1\xec\xf9\x72\x6a\x66\x56\x62\xb4\xb9\x32\x4c\xf1\xad\x51\x36\xf9\x9f\x4f\x03\xb1\xf8\x0a\x99\xc5\xa8\x85\xb9\xef\x8d\xd9\x4e\xc0\xab\xe1\x4b\xee\x78\x8f\x0c\xa6\x6b\x5f\x5f\xe7\xd9\x46\x2f\xd2\x21\x1a\x4b\x4c\x70\xaf\x09\xcb\x89\xe8\x6b\x78\x83\xa8\xdb\xe1\xf4\x18\xd9\x39\xc5\x4e\x0c\xf1\x8f\x54\x9c\x69\x7f\xbf\x52\x4d\xb2\x1a\x44\xf2\x17\xa5\xfb\x41\x0b\xae\x7e\xb0\x9c\x68\x26\xde\x8a\xa7\x2b\x67\x37\x74\x68\xe9\x30\x19\x9c\xda\x8c\xbb\x8a\x6a\x23\xed\x37\xbf\x64\x90\x17\xe2\x71\x97\xd7\x35\x19\x5c\x6f\x60\x39\x91\xa6\xc6\x89\x38\xd9\x92\x4e\x10\x7b\x58\x83\xee\x51\xc1\x0a\x46\xd0\xa2\xb9\xff\x7b\x97\x4c\x77\x43\xea\xed\xf7\x76\x9a\x86\xff\x7c\x1a\xd8\x93\xaa\xa3\x7e\x07\x32\x2c\xd5\x4d\x5c\xbf\x91\xf4\x58\x2c\x74\x4c\x52\x46\xc6\xc4\x1e\xc1\xc6\xe5\x73\x08\x0a\x52\x4d\xe0\x68\x14\x06\x31\x10\x8b\x6b\x7d\xa9\x1a\x5e\xce\xdd\x6c\x94\x3d\xf9\x56\xae\xa3\x38\x55\x50\xff\x7b\xc8\x3e\xe2\x7b\xea\x60\x0f\x96\x2a\x77\x83\x0d\x27\xb8\x50\xf0\xfd\x7b\x51\xf5\xd8\xc0\xaf\x6d\x91\xaa\x54\x9d\x82\x44\x61\x51\x2b\xcf\x9b\xe2\xe9\xfc\x1d\x9b\x2e\x51\x6e\x32\x1a\x1c\x2c\x8b\xfb\x65\xe1\x6d\xff\x3d\x10\x3d\xf9\xc5\x60\x69\x75\x5b\x12\x97\x7b\x26\xf1\x35\xc1\x9a\xa9\xe8\x78\xee\xf9\x9e\xdc\xfb\xa3\x81\x91\x41\x32\x0d\x34\x5a\xca\x7f\xbe\x4c\x88\xf6\x48\xf4\xcd\x41\x78\xc4\xb4\xbd\xba\xcc\xa1\xe8\xb5\x11\x45\x6c\x31\x09\x22\x9d\xb7\x42\x21\x36\x93\x03\xd8\x8c\x3f\x09\xf1\xa9\x40\x0c\x44\x7b\xba\xb0\x72\xad\x7c\xdf\x65\x43\x42\xdc\x96\xc7\x18\xe3\x81\x67\xc1\xe2\x86\x07\x69\x5a\x58\x77\xa7\x38\xa8\x77\xa2\x97\x9e\x20\x81\x18\x88\xf6\xf7\x64\x8b\x88\x34\xd5\x4e\xe8\x5d\x0b\x86\x5e\xa2\x99\xa2\x46\x54\xbc\xc4\x34\x4c\x90\x4b\x7a\xe6\x3f\x60\x13\x26\xc5\xf5\xe3\x1e\x88\x81\x3d\xa0\xfd\xf5\x53\xcd\x8c\x17\x19\xbf\xc5\x7f\xbc\xa4\x42\xe1\xa4\x63\x7d\x21\x1e\x29\xb5\xa4\x78\x70\x88\x4d\x81\xfd\xe9\x61\xee\x5f\x50\x7b\x58\x4e\x24\xb0\xd3\xd8\x9c\x16\xb4\xd9\x4c\x9a\x97\x3a\x35\x9b\xf0\x1d\xf8\x84\x9c\x96\x17\xbb\x9b\x5d\x66\x7f\xff\xbc\x28\x3d\xe1\x90\x07\xc4\x40\xb4\xf7\x21\x8b\x71\x5f\x59\x9b\x10\xc4\x0b\x7f\xfc\x50\x7a\x3f\x96\x25\xf5\xb0\x8c\x28\xa5\xba\x5f\x6b\x4f\x05\x97\x85\x8f\xef\x37\xb8\x40\xc1\x72\x22\x0e\xa5\xac\xb7\x7b\xb4\x31\xee\xa5\x9b\x83\x1f\x81\xb2\xd5\x4f\x7c\x7b\xfb\x5b\x8c\xb9\x7c\x06\x59\xf1\xda\xaf\x1c\xd4\xc1\xe0\xca\x02\xcb\x89\x1f\xe2\xbe\x1b\x1b\xdc\x48\xd2\x6e\xea\x17\x2f\xae\x38\x0d\x30\x0a\x4d\x51\x3f\xeb\x55\x38\xbb\x19\x2a\x78\x84\x92\x5e\x25\xc7\x0d\x62\x20\xda\xbb\xde\x09\x67\x26\x5f\x8d\x98\x30\x69\xfd\xba\x39\x46\x74\x9d\x31\x1e\xce\x34\x3c\x44\x6b\xe2\xd8\xa2\xb5\xe5\x9c\x14\x31\x4b\x04\x62\x20\x8b\x37\x51\x9f\x1c\xb7\x55\x3d\x1d\x95\xd7\x13\xf2\x01\x17\x69\x6e\xf4\xf8\xf2\x80\xab\x22\xc4\xc5\x58\xad\xae\x3a\xe5\x8f\x7f\x7e\x62\x82\x18\x88\xc5\xc5\x3a\xa4\xbb\xaa\xa2\x68\x59\xaf\x23\x86\x4b\x47\xcf\xfe\x50\x7e\x67\xab\xef\xc6\xfb\xdb\x4a\x66\x73\x66\x7a\x6f\x9a\x91\x1e\xdc\xb1\xc1\x72\x62\xae\x3c\x5a\xfd\x3d\xf9\x4f\x49\xd4\x37\xa8\x8a\x71\x03\x44\xae\x1d\xcc\x9a\xa6\xfe\xf3\xb6\xab\xe6\xea\x3f\x58\x2e\x16\x28\x89\x41\x0c\xec\xba\xbc\xbf\x7a\x64\x55\xbb\x08\x8e\xb3\xbd\x2c\x4a\x7a\xd8\x64\x32\x4e\x77\x15\x13\x79\xd1\x64\xd2\xf6\xc6\x9b\xcc\x4c\x9a\x31\xc9\x40\x0c\x6c\x90\x4e\xe4\xfc\xc3\xbe\xe0\x6e\x74\x87\xb7\x84\x63\x73\x62\xf9\xdd\x2b\x37\x5e\xa3\xc9\x9e\xac\x34\x82\x31\x35\xa5\x9b\x0d\x76\x70\xae\x82\xe5\x44\x09\xe6\x57\x19\x38\x8f\x24\xe4\x82\x46\x69\xba\x51\x2f\x45\x56\x68\x50\x77\x18\x70\x3f\x2e\xf8\x6e\x76\xd2\x2d\xea\x96\xdb\x83\xcb\x25\x2c\x27\x5e\xd9\xc5\x3d\x99\xb8\xa7\xc7\x49\xde\x75\xf9\xe5\xaf\x2f\xa7\x4a\x40\x0e\xdd\x79\x7e\x86\xd0\x3c\x72\x67\x5d\x70\x9e\xf8\x28\x0d\x88\x81\x58\x7c\x54\x1e\x23\xfc\xa5\x69\x30\xf4\x54\x4c\xff\xc3\x6b\xf7\xad\x17\x6f\xae\xf3\x8d\xc4\xd7\x86\x84\x8c\x6f\xe8\xaf\x5c\x58\x1a\xb8\x40\x0c\xc4\xe2\xd5\xd8\xe0\x63\x77\x4f\xf9\xcc\xcd\x60\x4d\x0a\x0f\xd6\xb6\xc1\x6b\xd6\x90\x4e\xed\xbf\xcf\xf2\xbe\x3f\xef\x46\xf9\xeb\xbf\x46\x0e\x62\x20\x16\xef\x15\x3a\xae\xd2\x62\x29\x35\x31\x5b\x13\xa2\x5c\x25\x9b\x22\x5e\xd7\x91\x28\x7c\xd2\x31\x7c\x47\x32\x63\x6e\x58\xdd\xf3\x0b\x3c\x1c\x84\xe5\x44\xae\xb0\x84\x89\xa2\xd9\x5c\x66\x3d\x95\x73\xa1\x0b\xe5\x9f\xc6\x16\xcb\x2c\x41\xbb\x7d\x57\x16\x47\xbd\xaa\x1e\xd8\x11\x96\xe2\x20\x06\x62\x71\x09\xba\x9c\xbe\x06\x7e\xc8\xad\xd6\x89\x85\xa5\x00\xa1\xd1\xd5\x5d\xe7\x51\xe5\x52\xb9\xb0\xd4\xdf\x58\x27\x0e\x1d\x3e\xdd\xe0\xae\x04\x96\x13\xbb\x1d\xdb\xff\x1a\xda\x44\xee\x17\x54\xb8\xcb\x90\xff\xa2\x4e\xa8\xcc\xd7\x88\x5d\xd0\xf2\x72\xa0\xd6\x90\xfe\xb4\x4b\x06\x3e\xbf\x4a\x08\x96\x13\x8d\xb4\x3f\xe4\x78\xc9\x56\xb4\xf6\xda\xd5\x25\x25\xf6\x35\x6d\x12\xca\xe4\xbc\x55\xa7\x31\x41\x4c\x95\x65\x41\xce\x9b\xd2\xfd\x07\x03\xb1\x98\x89\x42\x79\x8a\x52\xe0\x81\x40\xa3\x21\xe3\xdd\xb0\x1d\x77\xd4\x58\x84\xb8\x71\xc3\xb4\xed\x37\x5c\xdd\x79\x94\x9e\x34\x07\xc0\xf5\x9c\x42\xb0\x9c\x98\xa5\xce\xa5\xf0\xf4\xb1\x03\xd3\x57\x1a\x8a\x0c\x1d\xe7\x1a\xcf\x9c\x77\x39\xd8\xef\x89\xb8\xa6\xe8\xae\x08\x49\x24\xd8\x33\xc1\x4f\x03\xcb\x89\x7b\x08\x56\xf7\xb2\x7e\xb4\x0d\xed\x0d\xaf\x7b\xdb\x6a\x0a\xd1\x0a\x7c\x20\x67\x2d\x31\xdf\xaa\xed\x27\xf3\xc7\xaa\x0a\xd2\xc1\x00\x31\x10\x8b\x59\x71\xaa\xe2\x89\x56\xcc\x30\x26\x30\xd4\xe6\x24\x03\x35\x6e\xf4\xc9\x33\x7a\x8c\x6f\xf7\x2d\x6a\x39\x96\x1c\x6b\x32\x10\x49\x40\x0c\xc4\xe2\x67\x68\xea\x6f\x99\x53\x66\x57\x1a\x99\x9d\x9c\xa7\x5a\x3d\x16\xbe\x46\x84\x69\x9a\x5f\xb9\xfb\x3f\x8a\x73\xb6\x4d\xd2\x01\xdf\x00\x2a\x04\xcb\x89\x43\x33\xe1\x99\xaf\xd7\x65\x0e\x6f\x0d\x64\xed\x65\x04\xad\x9b\xa7\x27\x5c\x30\x6e\x42\x7c\x1c\xa9\xd9\x08\xdf\x58\x2a\xa6\x83\x3b\x5f\x58\x4e\x34\x67\xab\x98\xdf\x0b\x36\xec\xfd\x3a\xfd\x40\x9f\xd9\xa3\x0a\xbb\xb3\xe6\x03\x13\x45\xea\x9d\x88\x51\x32\xa6\x9b\x6e\xdd\x07\x84\x20\x06\x62\xf1\xaf\x60\x9d\xb8\x86\x7c\xbe\x9a\x43\x49\x06\x96\x57\x38\x81\x4e\x2b\xf4\x36\x2d\x5f\xd8\x1b\xcd\xa6\x0a\x88\x5b\xb4\x3c\x0f\xc1\xd1\x55\xf0\xdf\x8b\xaa\xd7\xc9\xf3\x84\x7f\xf6\x52\xda\x7b\x62\x8f\xf0\x22\x5a\xd4\xd7\x1b\x7b\x2d\xde\x9e\x96\x23\x1a\x22\xf5\x09\x24\x5e\x68\xce\xee\xfc\xf7\x40\x74\x37\xf5\xba\xbf\x05\x87\x17\x13\xb7\x71\x70\xa1\x79\xa1\x4c\x32\x59\x76\x6c\x2d\x85\x51\x7c\xfa\xa9\x89\xa7\xab\xd6\xb7\x03\xf0\x64\x0a\xac\x3f\x66\x1b\x0f\x2f\xea\xf9\x3d\x4e\xef\x19\xbe\xb4\x58\x0f\xd3\xb8\xcb\xcf\x97\x96\x13\x2a\xf5\xf6\xe6\xb1\x25\x01\x83\x6d\x17\x0b\xb8\x0f\x80\xf5\xc7\xc2\x96\xe9\xbb\x73\x9c\x09\xd6\x93\xaa\x74\xb3\x34\x13\xbb\xb5\x1b\x22\xd1\xf5\xd9\x4d\x37\x7d\x24\xe7\x23\x67\x37\x2e\xa1\xc0\x93\xaa\x84\x60\xfd\x51\xcd\x19\xc9\xc7\x01\x5f\x44\x14\x37\x98\xe4\x50\xe7\xe2\x1e\xd6\x13\xf3\x29\x65\xab\x54\x9c\x1f\x0c\xfc\x28\x5f\xed\x87\xeb\xc0\x43\x2d\xd8\xed\x8c\xf6\x3d\xaa\x7e\x15\xc9\xcd\x3a\x63\xe8\x46\x98\xd4\xdf\x8c\xbc\x91\xf6\xb8\x13\x11\xec\xa4\xf8\x3c\xe7\x2f\xdb\xf6\xef\xdf\x01\x47\x10\x58\x4e\xc4\x47\x54\x47\x0f\x12\xc2\xce\x5c\x8f\x2e\xa5\x3a\x4c\xca\x4d\x75\x50\x79\xc6\xd7\x2f\x81\xfe\xf2\x2b\x52\xce\x08\x46\xf7\x63\x70\xd5\x85\xe5\x44\xb5\x3f\x51\x05\xeb\x4e\x14\x07\x85\xe9\xa5\xae\x89\xab\xd8\xac\x83\x18\x18\x96\xbf\xaf\x8c\x5c\x3a\x3e\x56\xd5\x53\x13\x47\x82\x73\x15\x2c\x27\x8a\x16\x3e\xe9\x3c\x40\x0d\xe1\xdd\x96\x66\x6f\x36\x6e\x1d\x6b\x7f\x55\xd5\x83\xe7\x2f\x5d\x51\xb3\x40\x58\x6f\xb1\xc3\xb7\x23\x06\x62\x20\xda\x63\x87\xb7\x2d\x3c\x7a\xe7\xf1\x6c\x53\x4f\xee\xa2\x2d\xd3\xd5\xc8\x6e\xfa\x75\xde\x36\xea\x49\x93\x93\x5f\x0a\x39\xda\xa5\x16\x1e\x88\x81\x68\x2f\xf7\x5a\xc3\xeb\x91\x40\xa7\xc3\xd3\xd2\xcf\x5c\x13\xe6\xfb\x56\x4b\x8f\x6e\x66\xe9\x9e\xff\x42\xde\xe5\x4c\xa0\x29\x23\xd0\xc3\x05\x31\x90\xc5\x5b\x2a\x41\x49\xab\x25\x4f\x77\x6b\x2a\x8e\xa1\x41\xf4\x83\xee\xc0\xa3\x19\xe9\x92\x6b\xb6\x28\x2e\xd3\xe9\xf9\xdb\xf3\x7b\x33\xe0\xf9\x2a\x58\x4e\xac\xb6\x2d\xca\x1e\x42\xcb\xe0\x7f\xe9\x6c\xc5\x1b\x53\x99\x4e\xc4\xaa\x33\x1d\xd7\x23\x78\x54\x38\xad\x46\xe1\x40\x8e\xa6\x07\x6e\x84\xb0\x9c\x38\x30\x29\xa8\xc0\x68\x53\x3a\x45\x3d\x24\x8a\x73\x9b\xbe\xd8\xbe\x9d\xf6\x7b\x7e\x38\xee\x51\x25\x21\x52\x72\xcc\x31\x4f\x2c\x78\xd2\x18\x96\x13\x65\xab\x75\xeb\xdb\x70\xbd\x84\x0e\x5f\x19\xad\xb8\x19\x2e\xd1\xad\xc4\x10\xfd\xed\x57\xcc\xfc\x92\x22\xf0\x57\x30\xb6\xd1\x03\x1c\x5d\x61\x39\x51\x4c\x6b\x26\xc3\x97\x50\xfb\x0b\xbd\xdc\xba\xe8\x3c\x29\x9a\x27\xf2\xc8\x54\x60\x9b\xa0\x05\x55\xe3\xd1\x3e\x72\x32\x13\x3e\x78\x6a\x07\x96\x13\x29\x88\x4a\xfe\xc7\xd8\x5b\x47\x55\xf5\xc4\x7f\xbf\x74\x77\x4a\x37\x48\x09\x07\x90\x06\x91\x14\xa4\x11\x25\xa4\x1b\xe9\x94\x16\x14\x29\x01\x05\xa5\xa4\x91\x46\x42\x5a\x24\xa5\xbb\x41\x1a\xa4\xbb\x3b\xee\x7a\xd6\x73\x7f\x6b\x79\xf7\xf9\xce\xfa\xdd\xff\x37\x2f\xce\xde\xe7\x3d\x33\x9f\x99\xd7\xcc\x3e\x56\x7f\x35\x31\xe5\xeb\xe8\x5c\x44\xa8\xfe\xb2\xdc\x96\xfb\x27\x5d\xe4\x69\x8a\xb3\x86\x13\x1b\xd4\xd2\x5d\xfb\xa3\x42\x31\x80\x14\x0f\xec\x8f\x6c\x4e\x20\x5a\x38\x6d\x35\x34\xec\xf6\xdf\xea\x34\xf5\x0b\x5f\xf8\xad\x52\xea\x2f\x37\xbf\xa9\xec\x2f\xfe\xb6\x0a\x5d\xa0\x04\xe9\x44\xcf\xf1\x2c\xd8\x2f\x44\x4a\x67\xce\xfc\x17\xa8\xfe\x95\xfe\x5e\xc6\xdc\x24\x07\x9c\x9c\x1b\xc5\xf7\x6d\x0a\x53\x05\x36\x91\xa0\x63\x00\x48\x27\xda\x09\x16\xf2\x1c\x29\x8d\x6a\x2b\xf6\xa0\x77\xed\x79\xbc\x16\x6f\x4b\xfe\x2a\xfb\x8d\xdc\x9e\xa6\x15\xdb\xd9\x64\x05\xf9\x80\x0c\x8a\x01\xe9\xc4\xcf\x05\xb5\x6c\x58\x56\xa2\xdf\xba\xd8\xc3\x44\x68\x2a\x8a\x8a\x35\xcf\x64\xfe\x7a\x1c\x14\xca\x9e\xb9\x47\x53\x73\x68\x43\x67\x07\x20\x9d\x38\x5f\x70\xfc\xc8\xb5\x96\x8e\x9e\x80\xe5\x3c\x5f\x03\xd3\x75\xb2\x32\x65\xb4\x30\xa3\xe8\xa5\x10\x61\x51\x84\x5a\xa8\xac\x0c\xb4\xe6\x04\xe9\x44\xd1\xf4\xe0\x90\x60\xda\xc9\x80\x5a\x46\xe9\x85\x68\x7f\xec\xca\x91\x69\x93\xdb\x27\xe9\xcf\x0e\x55\xdd\x2f\x14\xd3\x6f\x62\xa1\x6d\x0a\xa4\x13\x75\x47\x57\x22\x04\x3b\x52\x7f\x77\x84\xd2\xee\x7f\xa1\x10\x47\x52\xfc\x28\x83\x54\xd7\x48\x18\x64\x65\xfa\x69\x83\x24\x6b\x0c\xb2\x17\x44\x08\xa4\x13\x7d\x2a\xf3\xed\x78\x27\x7f\x29\x92\x96\x2c\xd1\xae\xa4\x8d\xa6\x7d\xcb\xf3\xcb\xd3\x5c\x23\x97\x28\x20\x2d\xfc\x2d\xe8\x1f\x01\xad\x1d\x40\x3a\xb1\xb1\x3f\x26\xd7\x92\x5b\xad\xea\x88\xa8\x7b\x37\x9e\x5c\xe0\x71\x2d\xe7\x43\x4e\xbc\x35\x3b\x55\x76\xd8\x04\xec\x7b\x54\x15\x0a\x14\x03\x48\xf1\x7d\xa5\x40\x63\x61\xa4\x26\xd4\xa0\x26\xf1\x7d\xab\x9f\xea\x3e\xf7\xc3\x0d\xa2\xfc\x5f\x5d\x91\xcc\x2b\xae\x6b\xb4\x18\x33\x43\x27\x19\x20\x9d\x88\x8b\xa1\x92\x4f\x80\x56\x26\x95\xb6\xb8\x88\xdc\x58\x6e\x38\x5d\x73\x43\x5b\xd6\x61\x35\x5c\x6c\x97\x40\x46\xda\xff\xe1\x15\x74\x15\x04\xa4\x13\xef\x0a\xb7\x50\x82\xa2\x95\x15\xa9\xb8\xbb\xb7\xcd\xf1\xcc\xc8\x2e\x5e\x5b\x95\x4d\x62\x50\x9c\x91\xf3\x6c\xc8\x5d\xd8\x6a\x43\xdb\x14\x48\x27\xa6\x64\x96\x4d\xa9\x97\x63\x60\xa1\xe0\x96\xa3\xca\xda\x3f\x3e\x68\x8c\x39\x76\x64\xdb\xbe\x11\xb0\xee\xed\x10\xaf\x17\x50\x80\xe6\x06\xa4\x13\xf5\x44\x28\x3d\xde\x9f\xa9\x14\x4c\x5b\xcc\xb4\x7b\xeb\x3d\x3e\xe4\x5c\xe7\x98\x15\xb1\x6b\xb6\x2d\xd2\x43\x20\xa0\xe8\xcb\xe4\x80\x62\x00\x29\x0e\x5a\x6a\x7e\x1f\x92\x2b\xc4\xe2\x18\x76\x77\x9f\x8b\x24\xaa\x79\x91\xe6\xe9\x67\x8e\x6b\x37\xac\x5e\x83\xeb\x19\x05\x1a\x2d\x4a\x28\x06\x54\x51\x50\x31\x32\x2d\xfe\x62\x6f\x5a\xf2\x12\xb7\x0e\xe7\x10\x41\xb9\x26\x43\x6a\x53\xa4\x10\x9b\x2d\x18\xdd\x0c\xd9\x63\x27\x66\x82\x62\xe0\x37\x55\x33\x6f\x3d\x11\xf4\x56\x74\x1e\x73\x75\xed\xe0\xee\xe2\xe5\x4d\xd9\xef\xf1\xa7\x96\x8d\x50\x89\x3f\x5d\x44\xda\xb4\xb1\x79\xc5\xf6\xdf\x05\x91\xc0\xd0\x4f\xa6\x50\x66\x9e\xa8\x40\xf2\x69\xd8\x9a\x9a\xa1\x3e\x13\x66\x64\x89\xb0\xd0\xe4\x6e\x1e\x3f\x97\x8c\xf5\x2b\x4a\xc8\xe4\x46\x18\xe4\x1f\xd9\x2c\x13\x0d\x8c\x8c\x47\xe3\x65\x8a\x6f\x6a\x68\xfe\x1e\x23\x6c\xdc\x10\x14\xe2\x08\x08\xfa\x11\x10\x0f\x6d\xf0\x15\x28\x61\x43\x31\x80\xd8\x77\xb0\x46\x10\xd3\xa3\xde\x91\xc4\x08\x62\xf7\x5d\x9e\x2d\x49\x2f\x89\x65\x4f\xff\xa4\x57\x66\xfd\xc5\x6a\x52\x74\x46\xf9\xe6\x3e\x14\x03\x7a\xbb\x0d\x9d\x76\x03\x3e\x72\x36\xff\x17\xfc\x47\x02\x1a\x3f\x1a\x5e\x12\x3f\x59\x48\x7a\xc9\xa8\x2d\xc0\x2d\x1d\x8b\x6f\x59\x2e\x87\x02\xc5\x80\x7e\x7b\xff\xf8\x3e\x77\x9a\x19\x75\x77\xe0\xfe\xd6\xe3\xd6\xe7\xd8\x9a\x74\x51\x12\xc2\x48\x2e\x42\x04\x52\xd5\xaf\x15\x13\xed\xbc\x61\x50\x0c\x20\xf6\xfc\x97\xd2\xb6\x3c\x29\x78\xb3\x19\xa1\xa8\x43\x15\xac\x82\xf6\xd2\xb7\x4f\x3e\x1c\x77\x27\x72\xcd\x47\xad\x13\x89\x94\xcf\x11\x42\x31\x80\xd8\xe7\x15\x67\xff\x49\xb3\x8a\x8f\x44\xf9\x11\xeb\xbc\x04\x2b\xee\xdb\xb9\x89\x88\xb6\x2e\xef\x98\x21\xef\xe4\x3f\x35\x66\xaa\x23\x80\x62\x40\xbf\xf7\xac\x2e\xa1\xb4\x4d\x6b\xe1\x4e\x2d\x19\x57\x50\x72\xb1\xfe\x5e\xf3\xae\xc9\x8d\xf8\x7e\x33\xf9\xec\xe1\x24\xf1\x63\xb4\x09\x72\x28\x06\x10\xfb\x07\x02\xfc\xa8\x97\x02\x9c\x1c\x02\x9c\x78\x1d\xcf\x8e\xe7\x17\xd7\x56\x23\xe9\xc2\xa4\x13\x13\xad\x96\x7d\xa6\x0b\x90\x91\xa9\xa0\x18\x40\xec\x5f\x8c\x8c\xd1\x9c\xc8\x22\xcc\x17\x3e\x4e\x30\x55\xd2\xfb\xab\x10\xa9\x8f\x8c\x23\x12\x84\xa2\x4f\x75\xe5\x71\xd7\xf0\xa7\x11\x13\x8a\x01\x74\xde\xd4\x8a\x34\x2b\x1b\x76\x67\x9b\xf5\xe8\x87\xac\x9c\x99\x43\xc5\xab\x23\xd9\x73\x35\x21\x1b\x92\x3f\xf8\x3a\x66\xb2\xd5\x3f\x41\x6f\x0a\xa4\x13\x89\x93\xd7\x6d\x3e\xc7\x71\x6a\x05\x2f\xcd\x44\xed\x08\x7e\x62\x38\x5f\xed\xf4\x64\xa9\x93\xe2\x56\x39\x4d\xd5\x25\x9e\xf8\x2d\x04\xc5\x00\x52\x5c\x6b\xd5\xfe\x4b\xc5\xfa\xc3\xb7\x18\x27\x1b\xda\x8f\xd2\x95\x4b\x9d\x02\x4a\xf3\x0a\x1c\x75\x9e\x43\xc6\x0f\xda\x61\x55\xd8\xd0\xc6\x00\xd2\x89\x6f\x5e\x29\x16\xd8\xd2\x85\x18\x8b\xfb\xa0\xcd\x49\x8f\x64\x50\x94\xb7\x05\x17\x7c\xb4\xe4\xe9\x22\xfc\xc6\xfc\xbc\x93\x24\x89\x12\x8a\x01\xa4\x98\xde\x2b\xdf\xcd\xfe\x77\x7f\x35\xd1\x73\x9f\x0b\x2f\xed\x26\x1d\xfe\xde\xf7\x8d\x7b\x89\x16\x2f\x56\xe4\xc9\x8f\x9b\x3d\x1d\x91\xa1\x18\x40\x8a\xc7\x17\x17\xa5\x79\xa7\xe5\x98\x49\x2e\xed\x64\x66\x0e\xe6\x5e\x34\xe3\x39\x2b\xe5\x4d\xee\xfe\xb5\xeb\x90\xfb\x24\x24\x18\x2d\x0a\xc5\x00\x52\x2c\x53\xc5\x40\xe4\x93\xb9\x4e\xc3\xe7\xb0\x6b\x90\xda\x71\x2d\xf8\x8a\xfb\x57\x4d\x32\x1b\x45\x27\x97\xf2\x5b\x7a\x81\xb0\x26\x38\x0c\x20\xc5\x4a\xfe\x3a\xe9\x28\x8c\xe9\x48\x3b\xb9\x4f\xbf\xb8\x7d\x88\xb6\x6e\x2f\xd0\xe7\xc9\xd3\x30\xaa\xdf\xc9\xe2\xd4\xee\xfe\x5e\x00\xcd\x0d\x48\x27\x0e\x7d\x75\x2e\x24\x7a\xc3\xf5\x9e\x82\xd7\xc1\x07\x43\xb5\x29\x02\x3b\x22\xda\x67\x3b\x8c\x84\x89\x4e\x82\xb1\xe0\x9b\x31\x1e\xdc\xb3\x01\x49\xf1\xcb\xe8\x25\x4d\xa9\x55\x34\xac\x34\x17\x23\xe9\x3f\x21\xb8\xb7\xf7\x71\x2e\xbd\x6d\x0d\xc9\x38\x63\x9e\xa5\xfb\x7c\x83\xfe\xa2\xbb\x30\x48\x27\x7e\x26\xd4\x99\x98\x51\xe9\x2c\x46\xc4\x2c\xd7\x3b\x7d\x6f\x7e\x1a\x58\xe6\x75\x41\xe9\xac\xe3\x36\x58\x4f\xf3\x87\x66\x92\x0d\x52\x01\x0b\x83\x74\xa2\xfa\xb3\x33\xdb\x8c\x9d\x17\x9b\x4d\x4a\xf5\x71\x7d\xaf\xea\x83\x28\x1f\x69\x21\x3c\x93\x6b\x78\xda\xd0\x8a\x23\x19\xdc\x1d\x2b\x08\xc5\x00\x52\x8c\x3f\xfa\xdc\x13\xf5\x33\x1a\x01\x65\xe9\x64\x44\x9b\xd5\xd4\xf2\x3e\xe5\xf7\x57\xe3\xed\xf9\xf7\x24\x7d\x75\xbd\x8f\xd0\x47\x1e\x42\x31\x80\x14\xff\x5e\xb8\x74\x5e\x7d\x42\x51\x49\x2f\x15\x9f\x6c\x78\x1e\xdb\x30\x9f\x8e\x98\x2f\x52\x49\xe0\xec\x87\x23\x1d\x6b\x3b\x1f\x86\x00\xc5\x00\x52\x8c\x6e\x5f\xe1\x6a\xf9\xc8\x44\xb7\x9d\x0d\x35\x37\x53\xfd\x89\x89\xe5\xd0\x92\x40\xed\xbc\x47\xcd\x87\x6a\x27\xdf\x3d\xf2\x49\x0a\x28\x06\x90\xe2\x66\xe5\x16\xc4\xcb\x84\x37\x42\x71\x84\x45\xc7\xdf\x31\x6f\x11\x9e\xf2\x2f\x4e\xe9\xdd\x61\x09\xaa\x5f\xf2\xbc\x43\x8e\x13\x25\x82\x62\x00\x29\xd6\x2e\xb4\x9c\x48\x52\x17\x0e\x38\xf8\x9a\x15\x7b\xfb\xda\x5d\x23\x4d\x33\xe1\x0d\xad\x4b\x43\x94\xa7\xab\x34\x91\x0a\xec\x3b\xdc\x4d\x01\x52\x7c\xf0\xab\xdf\xb3\xe4\xe3\x73\x2c\x13\xd4\xbd\x06\x0f\x25\x09\xdf\x2b\xc6\x00\x5f\xbe\xfc\x24\x3e\x1d\xd5\x01\xa9\xec\x7b\x18\x24\x50\x0c\x20\xc5\x95\xb1\xc3\xc6\x47\x0e\xf2\xa5\x28\x0c\x8b\xeb\x32\xc5\x83\x41\x1a\x54\x7b\x18\xd8\xd8\xef\x90\xd7\x75\x5f\xea\xce\x64\x89\xb0\x43\x31\x80\x14\x9b\xf0\xf4\x08\xdf\x96\xb0\xb1\x5e\x13\x1f\xb9\xf7\xcf\x33\x88\xbf\xaf\x69\x44\xc0\x3a\xad\xee\xd4\x3d\x72\xe8\xca\xfc\xa9\xc4\x08\xc5\x00\x52\xcc\xc2\x1c\xb4\x58\x8a\x8a\x8c\xd0\x80\x47\x35\x7b\x8b\xa2\x4a\xf3\xf7\xb3\xde\xd8\xb4\x99\xe7\x64\x7b\xa0\xf3\x85\x99\x02\xf4\x7d\xeb\xc2\x20\x9d\xf8\xe0\xed\xda\x3c\x77\xa1\xaf\x48\x86\x82\x75\x6a\x6d\xb2\x6f\xb6\xbe\x78\x22\x6d\xd5\xb1\xde\x76\x39\xfd\x6c\xda\x57\x1c\x23\x3e\x28\x06\x7e\x53\xb5\x76\x45\x4f\xec\x8d\x3b\x81\xe1\x9d\x60\x7a\xe7\xf6\xf3\xd8\xec\xe4\x5f\x45\xa9\x13\xba\x03\x9f\x5c\xcf\xdd\xae\xb6\x43\x7e\x75\xff\x77\x41\x44\x8e\x71\x53\xf1\xc0\x3f\xa1\xc2\x3e\xaf\x7d\xf5\x68\xf8\x31\x22\xd2\x69\x49\x6c\x16\xab\x2c\xcb\x72\xb4\x58\xac\xd5\x40\x12\x34\x21\x20\xff\x68\xed\xba\x48\x8d\x2d\x8c\x4d\xdd\x74\xf1\x06\x47\xbe\x2a\xbc\x83\xc0\x5f\x5a\x4b\x95\xc5\x9a\x46\x12\x51\x55\x66\xcf\xe3\x03\x07\x14\x03\x3a\x5a\xce\x39\x24\xbe\xbc\xa0\xd4\xb0\xf5\x52\x8a\x38\xbe\x22\x4a\x51\x94\xc0\x50\xea\x9c\xfd\xb5\x8c\x98\xa5\x1c\x82\xa7\xeb\x1c\x0d\x14\x03\x88\xbd\xbb\x3b\x07\xbd\x58\xff\x8c\x32\xc1\x3d\x24\x8a\x28\x1c\xae\x93\x41\xc4\x35\x5b\x7c\x5c\xb3\x70\xb3\xa3\xad\xfc\x41\x83\x7e\x7a\x28\x06\x10\xfb\xa2\xbe\x55\xbb\xc7\xa8\xc4\x53\x82\x5c\x96\x67\x3b\x12\x4d\x0e\xc5\x4f\x28\xf1\xbb\x07\xb2\x54\x73\x3e\xc3\x68\x7b\xc5\x42\x99\xa1\x18\x40\xec\x7f\xec\xec\x68\xa4\xfe\xac\xfe\xe9\xbd\xd3\xbb\x16\x23\x27\xb7\x67\x2b\x1b\x9e\xa4\x97\x13\xa3\x62\xcb\x51\xa9\xc6\xf3\xa0\x93\x09\x8a\x01\x75\xde\x6a\x79\xf5\x6a\x74\xa7\xa5\xae\x06\x6c\x37\x71\x6f\x7e\x53\x50\xd1\xe2\x24\x8e\x3b\xd0\x39\x37\xe5\x69\xa3\xbe\x7d\xc7\xc5\x0a\xc5\x00\x62\x7f\x9e\x83\x78\x32\x4e\x7e\x78\xd9\xec\xbf\xcf\x42\x72\x4b\xb4\x67\xeb\xf2\x8e\x1e\x71\x88\xb2\xbd\xf8\x74\x2a\xb3\xb0\x04\x03\x09\x8a\x01\xc4\xde\xb9\x6c\x3b\xa0\xee\x54\x25\x2a\x06\x4f\x94\xdd\xaa\xbf\x4c\xd9\xb8\xa1\x21\x41\x45\x2a\x4b\x5d\x4b\xe2\xfe\x76\x59\x84\x29\xb4\xca\x03\xe9\xc4\x14\x5a\xe7\x8f\xe1\x49\x98\x67\xa7\xa8\xa8\x08\xf3\x9e\x1d\x5c\xea\xaa\x43\xe5\x58\x7b\xa9\x5c\x88\xc5\x9b\x94\x0b\x7c\xd0\x77\xed\x08\x83\x74\xe2\x97\x44\x2d\xed\xbe\xe9\xc8\x8b\x97\x1b\x6f\x87\x91\x46\xcc\xa4\xc4\x83\xb4\x5d\x1d\x59\x5f\x8d\xf5\x46\x0d\x9a\xf3\x95\xf7\x40\x5b\x0f\x48\x27\x3a\x0a\xff\xba\x0d\x8f\x9f\x1c\x8f\x60\xf8\xcd\x4d\xd1\x18\x68\x3c\xec\x4b\xb1\xd0\x70\x2b\x34\x7e\x4f\x04\x23\xf2\xe5\xb5\x27\x19\x14\x03\x48\xb1\x65\x90\x1f\x52\xcc\x26\xf6\xd6\x02\xab\xc4\xd7\xea\x3b\xca\x47\x81\x44\xce\x34\xa5\x9c\xaf\x0d\x37\x3f\xe6\xd8\x4b\x79\xec\x71\x41\x31\x80\x14\xb7\xa5\xbb\x96\x93\x7a\x0f\x1b\x97\xb3\xf4\xde\x78\x9a\xfd\x7d\xef\xf4\x40\xeb\xf7\x00\x83\xb6\x66\x69\xeb\xf7\xd8\xa5\xdb\x12\x5c\x28\x06\x90\xe2\x70\x4f\x1b\x66\x39\xc2\xd5\x5a\x2f\xc3\xdd\x0a\x73\x1f\x8c\x6e\x36\x2a\xb4\x66\x11\xef\x38\x2f\xcc\x82\x75\x34\x9b\x27\x2c\x70\xdf\x14\x20\xc5\xaf\x6c\xc3\x27\xee\x09\x3e\x79\xf8\x6a\x24\x2d\xcd\x87\xfa\x68\xba\x8d\x19\x73\x58\x6c\xd0\x69\xda\x0c\xbd\xdf\x6b\x11\x1f\x15\xee\x11\x03\x52\x9c\x38\xaf\x6a\x23\x6f\x51\x3e\x73\xf7\x17\xad\xfe\xe0\xb3\x60\xcf\x4a\xc6\xc8\xf1\x0f\x7a\x72\x57\x59\x2e\xcb\xba\x71\x72\x29\x3a\x28\x06\x90\x62\xe1\xd7\xf8\xe4\xe4\x18\xa7\x28\x7a\x1b\x19\x71\xe6\xc1\xe6\x92\x4f\x1f\x76\x0e\xcd\x6d\x1f\x26\x61\x29\x4b\xf3\x13\x8d\x75\xc3\x3d\x1b\xd0\x9b\xaa\x89\x1b\xbd\x1f\x0f\x59\x7d\x59\xc0\x4c\x6e\xa6\xae\x1b\x23\x40\x7e\x9e\xec\x55\xe5\x74\x6e\xc7\x8f\xd4\xf0\x71\xde\xe7\x0a\x7a\x53\x20\x9d\x78\x56\xd3\x16\xc0\xb5\x19\xd5\x89\xa8\x67\xa8\xfd\x43\x16\x83\xea\xa1\x45\x04\x3b\x3d\xe6\x92\xcf\xea\x17\x41\xff\x70\x2f\xe8\xef\x2e\x0b\x83\x74\x62\xe9\x4b\x3f\xfd\xdc\x23\x83\xc6\xcd\x0c\x89\xaf\xa7\x09\xf6\x89\x8a\x38\x7d\xdf\x83\x51\x65\x91\x6a\xe5\x37\x89\xea\xef\x15\x40\x7b\x3f\xe0\x6f\x27\x5e\xc9\x35\xb9\xad\x17\x75\x26\x79\x1f\x8f\x0e\x84\xe1\x79\x7e\x5b\xa4\xd6\x65\xbc\xc3\xa0\x3a\x69\x68\x35\x95\xe0\x9f\x24\x85\x62\x00\x29\x5e\x4d\x77\xfc\x8e\xae\x53\x25\x75\x60\x2c\x37\x7c\x70\x10\xa0\xb6\xd8\xfd\xf7\x96\x69\xc0\xe8\xa4\x5d\x8c\x7e\x9f\xe8\x96\x12\x07\x8a\x01\xfd\xea\x5c\x11\x53\x7e\x09\xad\x9e\x0a\xef\x51\xfa\xe9\x73\xc6\xe0\xd3\xc7\x08\x12\xae\x9f\xf8\x11\x83\x53\x29\x1b\x0b\xbe\xa8\x86\x0a\x43\x31\x80\x14\xa7\x63\x38\xdc\x4c\x54\x7e\x47\x96\xbc\x7f\xa2\xe2\xc0\xdc\x21\x62\x33\xeb\x1f\x1a\x5c\x17\x59\xc7\x73\xb0\x4e\xad\x44\x55\x07\x1d\xad\x41\x3a\xf1\x55\x1d\x49\xaa\x78\x5f\x82\xc7\xb0\xe6\x67\x91\xe6\xef\x2c\x49\x7e\x24\x33\x84\x4f\x67\x79\x9e\x3f\x1b\x1a\x7c\xb0\xc7\x49\x26\x00\xc5\x00\x52\x3c\xac\x4e\x17\x33\x4c\x54\xaf\x32\x57\x21\xf5\x38\xd3\x71\x1b\xeb\xdc\xef\x6d\xe6\x19\x09\xef\x57\xd7\x0a\x89\x47\x3c\x48\x9f\xe0\xbe\x70\x40\x8a\x0d\x7e\x3b\x76\x19\x32\xf9\x62\x21\x5f\x2f\x4f\xea\x05\xc8\xbe\x48\xb0\x33\xba\xf3\x9f\x7b\x3f\xec\xe0\xc7\x7b\x61\xa8\xa0\x07\xad\xf2\x40\x3a\xf1\x23\xc6\x41\xfa\x7b\x1d\xa2\x39\x04\x69\x29\x1b\x52\xcc\xa4\x96\xc3\x36\x76\xab\xa6\x3c\xa2\x8d\xa7\xd9\x0f\x4b\x1a\xbd\x09\xa0\x15\x30\x48\x27\xbe\x8b\x97\x92\x42\x0d\xa6\xc9\xe9\xd7\x92\xb2\x40\xa4\x5e\xdc\x0d\x18\x94\x50\xa8\xec\x0e\xf8\xc6\x5d\xf8\xb3\xe4\xca\xe6\x1a\x3a\xab\x04\xe9\xc4\xac\x86\x96\xde\x73\x12\xfa\x1d\xc4\x8f\x1d\xf1\x99\x04\xa3\xee\x85\x0e\x0e\x71\x2b\xcd\xce\xbf\x96\xaa\x92\x9e\x1d\x29\x99\xde\x83\x62\x40\x52\xfc\xfe\x9b\xbf\xa5\x6d\x17\xfd\x1d\xa8\x0e\x75\x29\xd8\xa9\x9b\x7d\xe3\x4c\xa6\xc5\x6d\x7c\x9d\x87\xe1\x5b\x4d\x47\xb1\x54\xd0\xf8\x09\xc2\x6f\xaa\x66\x09\x75\xcf\x6d\xc7\xe4\x09\xe6\x09\xeb\x1a\x66\xfe\x92\x83\x1a\xd9\xa0\x1c\x47\xf2\x39\x46\xb8\x5e\xa8\x91\xc5\x51\x6e\x7d\xf7\xbf\x0b\xa2\xb2\x4d\xda\x53\xf7\x47\xb5\xe4\x6d\x6c\xb7\x14\xd6\x3c\x01\x2b\x58\x0f\xdb\x27\x5c\x96\x8e\x6c\x19\x74\x97\xdc\x89\x27\xa1\xaf\xa5\x11\x06\xf9\x47\xe5\xd2\x59\x1b\x3b\x0e\xd1\x3e\x03\xbf\x3f\x5e\xa6\x4f\x07\x99\x72\x49\xdf\x98\xbc\xb0\x9d\x7a\xb7\xfd\xe7\x09\xca\xea\xf6\x07\x68\xad\x0b\xf2\x8f\x3f\xc2\x03\x73\x2a\x75\x97\xc9\x9d\xec\x88\x77\xac\xc4\x19\x5d\xd0\xbe\x50\x95\xd4\x17\xec\x69\x0e\xf9\x72\xaf\x6d\x7c\x96\x83\xae\x57\x81\xfc\xe3\x9d\x92\x4a\x7d\xa8\x7e\x98\x0b\xcf\x56\xfd\xd3\x89\x8f\x5c\x0e\x39\x49\xf7\xc2\x64\x0b\x88\x7e\xbd\xb1\xee\xdf\xf2\x70\xf9\x0d\xad\x64\x40\xc7\x19\xb3\x07\xe9\x51\xb7\x89\x5d\xcb\xe2\xa7\x31\x7c\xd6\x52\x1d\x2f\xdf\xfc\xbe\xdb\x15\x0f\x4e\xa9\xca\xe8\xab\x89\x2a\x10\xb8\x82\x0e\x25\x20\x9d\x98\x31\xa4\xb8\xb0\x97\x78\x62\x57\xa7\xa5\xa9\x56\x70\xfa\x38\x15\x4d\xc6\x74\x93\x8d\x56\x3e\x14\x16\x11\x71\xba\x3f\x1b\x07\x1d\x66\x41\x3a\xd1\x2b\xf0\x30\x28\xf2\xcb\xaf\x6f\xaf\x17\x82\x74\x92\x83\xe9\xa5\xbf\x9f\x3b\xac\x7d\x7c\xd7\x43\xc7\x78\x72\xb1\xb6\x4e\xc1\x09\x59\x97\x17\x06\xe9\xc4\xfc\x7b\xa1\x8d\x02\x72\xab\xaa\xa4\x55\xb9\x7f\x8b\x90\x50\xcc\xff\x7e\xfe\x85\x5c\x1e\xe9\xc0\xc3\x17\xfb\x33\xe3\x51\x5c\x09\x74\x44\x02\xe9\xc4\xcc\xea\x2c\x9b\x3d\x29\x75\xca\x1a\x4a\x96\x66\x64\x9e\xd8\x24\xbd\x36\x32\x4c\x98\x9e\xd5\x27\xa7\x5c\x81\x1b\x1d\x21\x2b\xe8\xac\x04\xa4\x13\x6b\x31\x5a\x22\x1c\xb7\xf9\x6c\x89\x2f\xef\x5a\xfd\x77\xf5\x10\x1b\x7b\x2f\xc8\xeb\xd6\x4e\xd9\x13\x6e\x47\xd6\x0c\xe7\x83\xa0\xad\x07\xa4\x13\x23\x49\xfd\x1c\x28\x88\x6e\x76\x7c\xb4\x94\x4f\xc6\x68\xbc\x65\x6c\x4d\xab\xc2\xd9\x13\x42\x7f\x22\x32\x9e\x7c\x7c\x15\x6a\x0e\xed\xa0\x40\x3a\x71\xf1\x9b\x07\x99\x7e\xed\x1b\xb1\x21\xa9\x95\xb8\xe6\x74\x59\x34\xfe\x0c\xd9\x5c\xf6\x75\x9b\x7e\x59\x9f\x44\x66\x41\x67\x6a\xb8\x47\x0c\x48\x71\xc7\xd4\x91\xe0\x81\xd0\xc8\xfb\x09\x12\xf7\xef\xa8\x5a\xde\x89\x76\x5c\x79\xcc\xf4\x5f\x86\x91\x2c\x6d\x5e\x8f\x20\x8d\xff\x10\x81\x62\x00\x29\xf6\xa6\x7d\x3e\xfe\xb7\x39\xc0\x33\x24\x98\xc2\x21\xf7\x8f\xe0\xb7\xa5\xbc\x95\x6f\xba\x4f\xbe\x8d\x3d\x7f\xd4\xb7\x6b\x90\xc2\x06\x1d\x1f\x41\x3a\xd1\xd9\x59\xb3\x9b\x44\xcc\x59\xfd\x9d\xb5\x33\x86\x33\x3b\xff\xe3\x61\x3e\x7d\xeb\x22\x93\x71\xbf\x86\x65\x45\x39\x61\xb5\x6c\x68\xcd\x09\xd2\x89\xe1\x55\x11\x34\x7f\xf0\x10\x9f\x19\x4e\xcb\x55\x15\xbf\xa7\x37\x2c\xee\x78\x78\x14\x61\x61\xb2\xf8\xec\x69\x51\xac\x27\x21\xfa\x23\x28\x06\x90\x62\xd1\x11\xbc\xf3\x63\xff\xf2\xa7\x7b\x3f\x9f\x30\x5f\x12\xb1\x45\xa2\x0f\x1f\xec\x8b\x84\xf1\x3d\xcd\xd1\xef\x46\x68\x8f\x1d\x87\xce\x1f\x41\x3a\xf1\x80\x5d\x60\x6d\xf2\x19\x42\xd3\x3a\xb1\xe8\x9f\x67\x8e\x03\x2f\x75\xa4\x9a\x71\x02\x66\x5f\x5f\x8f\xf4\xea\x10\xd8\xd1\x22\xf0\x43\x31\xa0\x15\xe9\x0c\x6b\x6d\x21\x6b\x0e\xe4\x9e\x9e\x52\x12\x3f\xa9\x5b\xdd\xab\x03\x72\x64\x39\xd2\xde\xcb\xa8\xfc\xfb\xbd\xc9\x2a\x64\xd0\x47\x0c\xd2\x89\xa7\x38\x45\x44\xbb\x1c\x1a\xa1\x4a\xec\x38\x11\xcb\x5b\xef\x85\x45\x97\x35\xbf\x1b\x5a\x96\x86\x88\xb1\x79\xb2\xad\xb9\xa4\xe1\x43\x31\x80\x14\x53\x12\x73\xaf\xd5\xa0\x0c\x2d\xc1\xe4\x15\x5f\x5d\xe1\xeb\xef\xc7\xb5\x59\xdd\xff\x32\xf3\x13\xcf\x50\xe8\xb1\x51\x29\x5a\x3d\x27\x14\x03\x48\xb1\x2a\x75\xb8\x02\xb5\xab\x77\x01\x6d\x56\x68\x9a\xe0\xb1\x70\xbc\xe9\xc3\xda\x93\x12\x5c\xf9\x59\x54\xb3\x5e\x91\x66\xa1\x3f\x70\x18\x40\x8a\x75\x1b\x25\x4d\x7d\xc4\x11\x89\x3c\x30\xdf\x79\x08\x08\x9e\x07\x59\x17\x63\xd5\x7d\xa3\xfc\x50\xe3\x67\x18\x12\x64\x64\xd0\x02\x5d\x1f\x07\xe9\x44\xed\x06\xdd\x48\x7d\x7d\xdc\x84\x0a\xa6\x97\x18\x9f\x82\x18\x31\x6d\x17\x24\x7a\x26\x24\xe8\x5e\xa3\x09\x9d\xe2\x90\xdb\xbd\x84\x2e\xfa\x83\x74\x62\x1d\xe6\xda\xb2\x37\xbd\xda\xb2\xa5\x9f\xe6\x36\x12\x69\x42\xcf\xde\xd4\x63\xbf\x90\x0c\xf1\x11\x58\x74\xcb\x95\x5d\xe3\x26\xb4\x13\x05\xe9\xc4\x48\xa9\xdf\x41\x44\xbd\x99\xea\x99\xdf\xab\x55\x49\xac\x0f\xf1\xfb\x18\xbb\xc5\x6a\x8f\x67\x15\x16\x96\x28\x88\x3f\xfb\xcc\xa0\x41\x31\x80\x14\x1f\xf8\xdc\xbe\x8d\x3e\x9a\x10\xfc\xbb\x1d\x75\xce\xb6\xf2\xa8\xed\x62\x42\xc1\xbe\xc1\x2a\x73\x7e\x2b\x82\x3f\xe4\x9e\xe2\x17\x68\x27\x0a\xd2\x89\xbb\xc7\x0c\x28\x56\xe1\x05\x27\x7c\x1f\xf2\x1c\x8a\x64\xb1\x19\x11\xac\x22\x1c\xf9\x7d\x0e\xfd\x62\x14\x7d\x10\x36\x84\xf4\xa0\x26\x03\xa4\x13\xb5\x68\x44\xb2\xe6\x94\x3f\x78\xd5\xa2\x8e\x24\x7c\xb8\xf2\x53\x3a\x73\x32\x67\x46\xaf\x99\xbe\xf4\xdd\x7f\x56\xc8\x40\xee\x00\x5d\xe7\x04\xe9\xc4\xad\x1f\xc7\x23\xa7\xa2\xd5\x67\x34\xc4\xb2\xa5\x99\x1c\xc8\x11\xbf\xed\x24\x88\x9a\xb8\x50\x9d\x6f\xd3\x65\x9a\x82\x2b\xc7\xa1\x0a\x02\xa4\x13\xc5\xcd\x9e\x13\x6f\x6e\x08\xc7\x89\x31\xe0\x1a\xd3\xf1\xe5\x4a\x38\xa1\x15\xbf\x4c\x1f\x98\x54\x69\xc8\x5b\x28\x60\x3e\x7d\x06\x5d\x66\x07\xe9\xc4\x91\xb8\xaf\x34\xa1\x44\x03\x76\x9d\x45\xfc\x16\x13\xda\x14\x8a\x1c\xd9\x66\xbf\x79\x55\xc5\x35\xd3\xab\x1b\xbc\x92\x38\x36\xa1\x85\x89\x08\xfc\xa6\xea\xd1\xe9\xb3\xef\xf1\x5c\xc6\x51\x74\x05\x4d\x83\x87\x16\x6b\xa6\x95\xc5\xee\x7c\xbe\x38\xf3\xd3\x0a\x19\xcf\x7a\x9a\x62\x7a\x75\xfe\xbb\x20\xda\x8e\x34\xba\xc3\x35\x6c\xce\x56\xba\x38\x12\xcd\x95\xee\x78\x55\xf9\xed\x12\x5f\xe5\x85\x89\x44\x5d\x7b\xf0\xeb\xf5\x25\x6f\x6e\xe8\xff\x05\xc4\x5e\xd8\xc1\x6b\x63\x96\xac\x33\x43\xc9\x33\x7c\x32\x7b\x45\xd6\x04\x59\x67\xf6\xd6\xb6\xbb\xe8\x95\xd3\x57\x29\xa4\x52\xb1\x37\x50\x83\x02\xf2\x8f\xc6\xc2\xd5\xa5\x9b\xc5\xa7\xd2\x64\x0f\xec\xee\xbc\x44\x0f\x05\x36\xf7\xbb\x8c\x68\x4f\x79\xde\xce\x0b\x35\x8b\xdb\x0d\xe1\x42\x17\x53\x40\xfe\x71\xe1\xe3\x43\xc9\x9c\x9a\x22\x25\x9d\x0e\x62\xd2\xa5\x01\x84\x83\xf9\xa2\xa2\x6f\x73\xaf\x4c\x58\x7a\xc5\xd4\x14\x1c\x3b\xa2\xc5\xa0\x18\x40\xec\xbf\x5a\x5f\x0b\x95\xa8\x25\x8a\x6d\x99\xbe\xa7\xcd\x30\x76\xea\xeb\xac\x5d\xea\xde\x7b\xdb\xb6\x31\x2a\x53\xc5\xc0\xab\xd9\x09\xc1\x88\x80\x74\xa2\x51\x7f\xbe\xe9\x8a\x04\xeb\x14\xf9\x06\x22\xa7\x70\x8e\x20\xd6\xb0\xda\xab\x85\x37\x2b\x2a\xbf\x5f\xb4\x6b\x07\x78\x85\xa8\x33\x40\x31\x80\xd8\x7f\x93\x8d\xda\x64\xcd\x45\xc9\xd4\x6e\x51\xda\xfc\x6a\x10\xd7\xdf\x2e\x4e\x91\xdb\x7c\xb4\x34\x13\x0f\x2b\x6c\x74\x4b\xb2\xc5\x82\x62\x00\xb1\x9f\xec\x9f\xf1\x28\xcc\x0c\x1d\x7c\xf8\xfb\x6b\x97\xcf\xfc\x31\xa1\xf0\x1b\x02\xc4\xf3\x4f\x79\xef\x9e\xde\x4b\x21\x42\xfe\xec\xc5\x0d\xc5\x00\x62\xdf\xd0\x9f\xfa\x7c\xc9\xbf\xaf\xfa\x97\x34\x82\x73\xc0\x22\x9a\x94\x29\xee\x53\x43\x6e\x94\xfb\x0e\x63\xfa\x66\x4e\xb0\xa0\x49\x44\x28\x06\x74\xae\x4b\xfc\xd0\x7b\x30\x02\xc9\x23\xbf\xc9\xfd\xf1\x31\xde\x4b\x4f\x26\x4d\x2f\xe7\x5d\x71\x8e\x27\x9c\x2f\x34\xcd\xd0\x2e\xe4\x39\xa0\x18\xd0\x0b\x12\xd8\x08\x0d\x32\x25\x31\x96\x1f\xd4\x5e\x25\xbe\xf9\x5c\x63\x51\x22\x3b\x44\xa8\x6d\x96\x46\xf6\x30\x7b\xd7\xd8\x12\x65\x84\x1f\x8a\x01\xa4\xf8\x45\x8e\xda\xad\x65\xcd\xbe\x41\x4f\x8b\x80\xd0\x8b\xc0\x86\x9a\x09\x32\x3e\xde\x7b\x2a\x3d\xbd\x8b\x1b\xbb\xb8\x3e\xed\x49\x28\x50\x0c\x20\xc5\x0f\xe3\xdf\x13\x39\xec\x95\x35\x23\x29\xb0\x4b\x53\x18\x3e\x64\x0d\x1f\x73\x8f\x1d\xc0\x0c\xad\x6e\x09\x2f\xfe\x8c\x9f\x3b\xc4\x05\xc5\x00\x52\x6c\xae\xd5\xc9\x42\x42\x41\x99\x94\x2e\x96\x84\xc2\x67\xb8\x8c\x25\xab\xf1\x5e\x0f\x33\xb9\x45\xa5\x25\x36\xf3\x54\xe6\xed\x7d\xb8\x4f\x03\x48\x31\x3b\xdd\x11\xfa\xe7\x0c\xdf\x63\xfb\x1e\x92\x6b\x9a\x8d\x0b\x12\x2a\x89\xd7\x43\xa4\x3b\xef\x73\xf5\x4c\x86\xba\xbe\x2e\xbd\x87\xec\x14\x17\x01\xe9\x44\x6b\xa7\xa4\x6c\xb3\x59\x5c\x43\xfe\xad\x88\x87\x2c\xe9\xac\xc5\x68\xea\x77\x96\xf2\x6f\x33\x0b\x86\xc3\x5b\x2f\x2a\x39\x36\xe9\xa1\x18\x40\x8a\x77\x85\xbe\xaa\x5a\x8a\x06\x25\x65\x33\x79\x6c\xcf\xbe\x57\xb4\x4c\xc0\x4d\xd0\xd1\x12\x21\xf4\xbb\x54\x2f\x35\x53\xdd\x2f\x66\x81\x62\x00\x29\x26\xd9\x83\x09\x65\x1a\x45\x62\x76\x3c\x43\xd2\x21\x70\xb7\x73\x8a\xcc\x76\xef\xd4\xc4\x2f\x56\x71\xc5\x2c\x4c\x8a\xc1\x4c\x24\x82\x62\x40\xef\x68\x0a\x2e\x7e\xac\xdd\x32\xb6\xc4\xd6\xdd\x71\x9c\x82\x12\x59\x72\xf7\xdd\xaf\x63\xf0\x04\xa9\xd9\xef\xef\xe6\x50\xfc\x82\x0c\x19\x14\x03\xfa\xed\xc4\x57\x6b\xa9\xaf\x8f\x03\x74\x3a\xdf\xa9\x0b\x89\x18\xa9\xd9\x30\x3d\x91\x0c\x56\x1f\x74\x34\x69\xa5\xbb\x1b\x11\xb6\x64\xe3\x81\x62\x00\x29\x2e\x88\x1c\xe0\x88\x6c\xe2\x73\x7d\xc3\x59\x32\xe1\x23\xe8\x2b\x4c\x58\xf7\xd8\x28\x7c\x68\xb4\xed\xbe\xc7\xf4\x3a\x0d\x8d\xbd\x04\x14\x03\x48\xb1\x3c\x2c\xf7\x8f\x53\xa1\x9d\x84\x3a\x9b\xf2\x66\x93\xdf\xb5\xb9\x38\x39\xab\xaa\x58\x15\x12\x6f\xf3\xb5\x90\x06\xf9\x8e\x0a\x32\x14\x03\x7a\xbb\x0d\x3f\xfe\xf1\xf2\xab\xe5\x4e\x67\x4c\x05\xfe\x08\x1b\x96\xaa\xb4\x7e\x6a\x84\x5a\xf1\x10\x69\xae\xd1\x62\x01\x9d\x11\xe8\x0b\x12\x44\x40\x3a\x51\xb1\xb0\x5f\xe8\x09\x8d\x65\x34\x16\xe7\xeb\xec\x9c\x1a\x93\xf7\x17\xbf\xbf\x8c\x3b\xb9\x6a\x7e\x29\x5f\xfc\x3e\x82\xf7\x7e\x10\x01\x8a\x01\xa4\x58\x73\x20\xb6\xc2\x70\xcd\xa5\x30\x51\x20\xa0\xe0\x18\x73\x99\x27\x1d\x51\x03\xbd\x73\xa6\xbc\x29\x71\x51\xe9\x67\xb3\x5a\x39\x44\x43\x8b\x80\x74\x62\x40\x42\xa6\x93\x36\x5d\x3c\x12\xaf\xbd\x7a\xcd\xbb\x56\xfb\x77\xee\x33\x66\xc6\xe4\x73\xe3\x13\xc9\xb9\xc9\x04\x8f\xf1\x19\x31\xa1\x18\x40\x8a\xdf\xbe\x50\xcc\xb3\xeb\xca\xb1\x5f\xc5\x09\x8b\x0e\xd6\xf2\x91\xe6\x55\x64\xc4\xcb\xfa\x50\x64\x21\xd7\x30\x33\xdf\xa4\x63\x24\x00\xc5\x00\x52\xcc\xd9\x6a\xa5\xb7\xf3\xd9\xe4\x41\x1d\xe6\x5f\x95\xcf\x3f\x6c\x2d\xb6\xd5\xda\xd0\xd7\xc3\x33\xe7\xbb\xdf\x09\x23\xed\x73\x48\x42\x7b\x3f\x90\x4e\x9c\xc2\x7b\x39\x49\x3d\x55\xd3\xc2\xf3\x24\x3c\xb9\x00\xa1\x78\x02\x6f\x47\xfa\x5e\xf9\xa1\xae\xd7\x98\x49\x30\x5b\xe7\x4c\x19\x2f\x14\x03\x48\x31\x35\x2a\xed\x27\x3c\x61\xc9\x24\x9a\xe2\xea\xfc\x90\x2c\xbe\xdb\xcb\x7d\xff\x90\x28\x6a\xa4\xae\x9f\x35\x92\xef\x95\x1a\xbe\xe1\x42\x31\x80\x14\xf3\xa8\x8e\x0c\xb6\x7d\x68\x36\x95\xad\x21\x9d\x24\x27\x18\x9c\xde\x41\xba\x68\xee\xf6\x6d\x11\x43\xfe\x79\x11\xb0\x2a\xdb\x0b\x1d\x35\x41\x3a\xf1\xa4\xfa\x86\x63\xfb\x78\xa8\x21\x91\x2c\x26\xfe\x45\x60\x31\xa6\xf4\xe1\xde\x8b\x4f\x52\x6a\xbe\xe8\x12\x7e\x3e\x5d\x33\x27\xd0\x6e\x8b\x0f\x7e\x53\xf5\xf5\x59\x59\xa6\x7d\xf9\xce\x88\xae\x94\x4c\xc8\x69\x1d\x8a\x76\xbd\xf9\xdc\xb2\x9f\x82\x6a\x06\x7a\x55\x83\x99\x6c\xb8\x64\xde\x7f\x17\x44\x1a\x1a\x2b\x3f\x43\x08\x70\xaa\x85\x1f\xd9\x7a\x1a\x98\x88\xec\x84\xc5\x7f\x3e\xd0\x8b\xe7\x0a\xd3\xf3\x58\xf8\x36\x6c\x59\x8b\x0e\xfd\xbf\x80\xd8\x3b\xf6\x6e\x25\x36\xce\xbe\x7d\x1f\xb6\x32\x72\xd7\xfb\x9b\xfd\x17\xf9\x99\xef\x98\xec\x5e\xb3\x8c\xf3\xf1\xe1\x78\x13\x6e\x33\x01\x14\x03\x7a\xc1\x9e\x48\xc2\xb5\x69\x60\x60\x82\xe1\x79\xb5\xe1\x23\xb6\x65\xd7\x27\xe6\x5e\x2d\x69\x95\xc8\x57\xc1\x38\x6a\x36\xba\x33\xbf\xa1\x63\x00\xc8\x3f\x5a\x70\xc4\xb3\x64\x1c\x73\xce\x60\xb9\x26\x38\x86\x2e\x23\x5a\x77\xcf\x7e\xdd\xcc\x8f\xfb\x8e\x48\xd5\xe4\x87\x47\x83\x91\x0c\xed\xbc\x41\xc7\x19\xbb\x08\x0f\x0d\x42\x33\x5d\xdb\x75\x5d\xe3\xb8\xee\x52\x5c\xf8\xf1\x27\xdd\xef\x16\xaf\x5a\x9e\x05\xd7\xce\x38\x18\x57\x7e\x80\xc3\x00\x62\xff\x4c\xa9\x83\x74\xe9\xde\xa1\xfe\xf4\xe3\xfd\xa1\xc8\xdb\x09\xab\xc1\xc0\x0d\x73\x24\x7e\x67\x73\xcd\xea\x83\x9d\x7a\x99\x0c\x76\x28\x06\x10\xfb\x97\x0f\x0b\x11\x7b\xf7\x54\xf3\x0f\xe9\x07\x92\x93\xa4\xf6\x96\xdf\x51\xae\x1e\x3c\x37\x45\x0f\xb9\x95\x16\x38\xea\xc4\x7c\x00\xed\x75\x41\x3a\x31\x27\x15\xf9\x88\xf1\xb3\x4c\x1c\x43\x8c\x3a\xfa\x00\x83\xa5\x0d\xc6\xef\x06\xb6\x67\xa3\x72\xc6\x7d\x1a\x97\xbc\xdd\xf2\x63\x22\x50\x0c\x20\xf6\x28\xbe\xb3\x6c\xcc\x30\x47\x93\xf2\x73\x93\x35\x69\x2e\x5f\x27\x8d\xb0\x9a\x3b\xaf\x0e\x1f\x73\x94\x25\xcb\x7b\xf9\x3c\x5e\xd0\x9e\x05\xa4\x13\x79\x9c\x88\xf8\x51\xb0\xfa\xa9\x45\x32\x52\xc9\xeb\x97\xaa\xa2\x4a\xb5\x63\x1f\x3b\x2d\x2a\x6d\xec\xf2\xc6\x87\x22\x13\xd4\x31\x41\x31\x80\xce\xbb\xc7\x9f\x7e\xe9\xac\xcc\xb1\x52\xc6\xc5\x40\x24\x54\xec\xa1\x4b\x47\xa4\x80\xe4\xef\x61\x1f\x01\xb7\x2d\xfb\x32\x61\xcd\x3a\x68\x5b\x06\xe9\x44\xea\xc8\xf4\x76\xa2\x5a\xf9\x8d\xcf\x22\x9a\x78\xb6\x2f\x4d\x2f\xfe\x7c\xf3\x46\xa9\x9b\x78\x90\xc3\xe1\xe8\x81\xc5\x8d\xf3\x17\xee\xa6\x40\x3f\xb6\x68\x83\xd5\x31\x10\x22\x66\xc3\x33\xc7\xad\xfb\x65\x72\xb5\x99\x9e\x25\x54\x52\x8a\xfb\xe5\xcb\x4c\x67\xdb\x67\x32\x2d\xaa\x90\xd9\x81\x08\x48\x27\xee\x68\xcd\x1e\x09\x34\x6f\x6b\x88\x08\x4c\xe6\x11\x35\x78\x90\x0c\x7f\x17\xc1\x11\x9d\xeb\xd2\x5d\x98\x66\xa2\x91\x96\x90\x10\x85\x62\x00\x29\x26\x2e\xf9\xc1\xc2\x45\x80\x37\xf1\x4e\xbc\x07\x71\xfb\x67\xba\x5b\xb7\x7e\xa6\x55\x9b\x59\xd6\x39\x9e\x68\x92\xca\x35\xe2\x3d\xe8\xf8\x08\xd2\x89\xe2\x85\x61\x26\xc9\x27\xed\x3f\xb0\xfb\x6a\xdd\x39\xbd\xe9\x44\xf8\x09\xe8\xcc\x39\x91\xf8\x47\x71\x90\x96\xc8\xb1\x47\x43\xa1\x15\x30\x48\x27\xda\x9b\xf2\x8a\x5a\x75\xae\x27\x78\x86\x07\x66\x36\x06\x52\x1e\x9a\x70\x2d\xa6\xcd\x61\x60\x36\x6f\xd3\x63\xd5\x84\x21\xde\x3c\x84\x62\x00\x29\x4e\xa7\x97\x7a\xe7\xd8\x6e\x54\x79\x6a\xf2\x25\x1f\x5b\xc3\x16\x27\x5c\x88\xe1\x43\x19\x16\xa6\xc4\xcd\x5a\xa6\xa6\x54\x80\xa7\x30\x14\x03\x48\x31\x0d\xf5\x35\xf5\x0e\x7f\x45\x28\x4d\xfa\xb5\x4c\xf3\x11\xc6\x64\x10\xa6\x50\xdc\xe0\x94\xd6\x1a\x21\x0a\x96\x0d\x17\x85\x2a\x09\x14\x03\x7a\xc7\xaf\xcf\x00\x4e\xca\x49\x18\x1b\xe5\x8b\xdd\xd4\x70\x94\xc1\xca\x9a\xeb\x36\xae\xd4\x69\xb3\x40\x4a\x0c\x7f\x7a\xfa\xfc\x1c\x68\x47\x01\xd2\x89\x68\x57\xf5\xf3\xef\x54\x12\xeb\xa7\xb5\x65\x3e\xd0\x46\x16\xa7\xb2\xd6\x35\x50\x67\x3b\xce\x51\xf1\x90\x72\xd5\x93\xba\x48\x3e\x80\x62\x40\x7d\xb1\xca\x12\xea\xdc\xeb\x00\x76\x02\xd2\x36\x0c\x9f\x11\x89\x1f\xa3\xbf\x8e\x79\x53\x90\x3c\x42\x8f\x14\xe8\x9b\x70\x02\x4c\xf8\xa0\x18\x40\x8a\x4d\xe6\xbc\x2d\x44\x7b\xab\xde\x92\x8e\x4e\x49\x2a\xf4\xbc\xd6\x46\x5b\x12\x61\xe0\x13\x09\xd7\x8e\xbe\xed\x2d\x13\x5b\x1a\x87\x6c\xd5\x15\x01\xe9\x44\x8e\x08\x5f\xc6\xbb\xda\x30\x43\x01\x51\xf1\x95\x45\xc6\x89\x5f\x8a\xd3\x1f\x58\x4b\x02\xfa\x8f\xed\xbf\xbc\xda\xda\x8c\xac\xc2\x81\x62\x00\x29\x66\x16\x8e\xf9\xde\x62\x49\xe0\x59\x98\x48\x52\x65\xc5\xe2\x9b\x7b\x6c\x8a\x13\x27\xde\x29\x9d\x19\x85\x6c\x3d\xcc\xdc\xeb\x20\x08\xc5\x00\x52\x2c\xad\x27\x9a\xfe\x59\x60\x48\x8b\xa0\x6d\xc7\x7f\xaf\xd4\xe3\xd7\x47\xaa\x10\xb6\x5b\xe6\xfd\x4b\x3f\xdf\x9f\xc1\xdc\xaa\xad\xd0\xde\x0f\xa4\x13\xfb\xcc\xe8\x29\x8d\x0f\xef\xdb\x1f\x69\x3e\x6f\x3d\x92\xde\xd3\xee\x9a\xd5\x94\xf3\xd2\x38\xb8\x0e\x73\xd0\xb6\x50\x29\xc4\x46\x82\x62\x00\x29\xbe\xc6\x7f\xed\x75\xab\xa8\xa6\xc8\xb9\x49\xf1\x31\xa4\x66\xd0\x3e\x22\x53\x84\xcc\x9a\xc9\x29\x32\x45\x53\xb6\xa8\xac\xea\x1a\x5a\x3b\x80\x74\xa2\x19\x3e\xd6\x45\x99\x3c\x67\xff\xd2\xdb\x84\xc4\xcb\x62\x9f\x93\x17\xbe\xd5\x9f\x63\xe4\x52\x36\x0f\x87\x1e\x77\x52\x14\x05\xc0\xdd\x14\x20\xc5\xfa\x5b\xb8\xf3\xf8\x8f\x96\x05\xee\x4d\x7b\x34\x30\xf4\xbc\x1a\xe7\xd2\xfa\x9c\xb3\xda\x81\xd8\x63\xc5\x30\x58\xc8\x1a\xfc\x18\x3a\x86\x03\x5f\x76\x7a\xd4\xb6\x99\xda\x73\x3d\x33\xc0\x82\xed\xd6\xf1\x2c\x0b\xf6\x02\xdd\x7a\xfd\xd3\x52\xf0\xe3\xfd\x7c\xbc\xf1\x0b\xd5\x5f\xd0\xc9\x29\x48\x27\x86\xd0\x4d\x8a\xa5\x91\x6e\x91\xfc\xf5\xcb\x2e\x0b\xac\x59\xad\x88\x99\xdd\x93\x3b\x93\x1e\x78\xff\xa9\x37\x61\x0a\x8f\x58\xfa\x1e\x14\x03\xbf\xa9\xba\x74\xc2\x12\x97\xe5\x7d\x16\x66\x38\xee\x12\x56\x09\x7d\x99\x6c\xe3\x42\x8b\x4d\x4a\xea\x09\x66\x5b\xf9\xea\x6d\x89\x75\x55\xc0\x7f\x17\x44\x59\xa5\xe2\xdc\x34\xfd\xf3\x12\x88\xf4\x15\x86\x7f\xc9\xc6\x69\x44\xda\x62\x17\xfd\xa3\xcd\x07\x25\x5e\xe1\x5f\xca\x9f\x89\x41\x0b\x31\x90\x7f\xf4\xbd\x39\x33\xc6\xf4\x38\x1a\x53\x0a\xc5\xe5\x2a\xbb\x7c\xb4\x1f\xaa\xbb\x7f\xe7\x77\xb6\x54\x7f\x7d\xd8\x31\x21\x65\xe1\x02\xad\xab\x40\xfe\xd1\x09\xc1\x8b\xf3\x51\x98\xfc\x42\xd7\x3b\x9a\x1c\x3f\x0c\x84\x0b\x22\x97\x94\x9c\x02\xea\x59\xbb\x98\x6b\x96\x4a\xa4\xc1\x75\x68\xc9\x0c\xf2\x8f\xcc\xe3\x23\x51\x92\x41\x9e\x05\xc7\xa3\xc4\xd9\x1f\x7c\xa6\x15\x51\xea\x97\x34\x29\x08\x31\x47\x7e\x25\xda\x2d\xe2\xa3\x32\x40\xfb\x39\xd0\x71\x46\x75\x0f\x79\x98\xc1\xb7\x50\x56\xdd\xd2\x38\xdb\x57\x6f\x30\x86\x32\x89\x07\x8b\xd1\xb5\xff\xfe\x6a\xd9\x18\x37\x15\x60\x20\x80\x96\x67\x20\x9d\xe8\xca\x9b\xfe\x7c\xf8\xc6\x31\x94\xdb\xfa\xa3\xd9\x9b\x7c\xec\x0f\x28\x0b\x22\x3c\xec\x87\x58\x57\xdf\xba\xb4\x72\x6c\xd2\x2d\xa0\xe3\x23\x48\x27\x3a\x67\xa8\x6c\x66\x26\xbe\xcb\x54\x75\xd9\x53\x94\x98\xab\x28\x92\x99\xb3\x66\xe7\x68\x76\xf8\x8e\xf6\xba\xe2\xd4\x25\x72\x55\x08\x8a\x01\xc4\xde\xe5\x5e\xd8\xc5\x69\xcb\x83\x87\x65\xd8\x3f\x58\xa2\x73\xfb\x49\xe2\x4f\xc8\x4a\x39\xe4\xf5\xc3\x7e\x95\xbd\xc1\x17\xfe\x9e\x0b\x6d\xcb\x20\x9d\x58\x9c\xc8\x45\xaa\xa9\xa7\x87\xdc\x64\x33\x61\x74\x89\x93\x8c\x83\xe8\x3e\x37\xa0\x6c\xb9\x48\xac\x8f\xeb\x3e\x66\x60\xcd\x0c\x9d\xcd\x82\x74\x22\x45\xd0\x85\x30\x46\xf3\xab\xbe\x3b\xaa\x98\xe8\x71\x44\x0f\x9e\xba\x31\xe7\xd0\xa1\xa5\x9b\x26\x65\x17\x56\xf5\x57\xc7\xc8\xe4\x50\x0c\xa0\xf3\xce\x1a\x99\x5d\x14\xd6\x6d\x2a\x16\xf7\x8c\xd1\x99\xfb\x42\xc1\xa7\xe6\xfc\x31\xe8\xf4\x37\xa5\xe2\x20\xdd\x2b\x22\x9b\xfd\x7a\xe8\x17\x0e\xd2\x89\xfe\xc9\x3d\x9b\x9a\x9a\xeb\x26\x69\x77\x34\x68\xea\xe8\xfa\x12\x72\x71\x49\xbd\xf1\xbb\x94\xee\xbd\xfd\x57\x59\x0e\xda\x37\xd4\x50\x0c\xe8\xc7\x32\xe2\xf1\xaa\xbe\x38\xed\x5f\xdf\x8f\x74\x5b\x7f\xe1\xa6\xdc\x61\xeb\x70\xec\x13\xe2\x71\xd1\xb3\xf7\xfe\xef\x53\x7e\xf4\x8f\xcc\x50\x0c\x20\xc5\xc5\x5c\x2c\xef\x50\x45\xca\xbf\x60\xf8\xad\x26\x85\xd4\x6a\x25\xde\xdd\xdd\xb8\xd3\xfe\x96\x40\xd2\x66\x60\xe2\x9a\x5d\xb7\x81\x4e\x43\x41\x3a\x11\xcf\xb0\xcd\xed\xfd\xd6\x13\x44\x36\x89\x10\x59\xb9\xbe\xa5\xce\x94\x83\xe1\xb3\x1f\xe2\x63\xb9\x0f\x5e\x10\x9a\xb7\x17\xed\x53\x42\x31\x80\x14\x5b\x9f\xb4\x3e\xad\x2f\x79\xef\x71\x2f\x73\x0f\xd9\xd5\x5b\x41\x2b\x8e\xe0\x99\x65\xc2\x30\x5d\xcc\xb2\x92\xc1\x72\x05\xbb\x3a\xb4\xac\x07\xe9\xc4\xdd\x4c\x07\x5c\x23\xeb\x4f\x4d\x18\x38\xc7\x45\x3f\x3b\xe3\xd8\x73\xbf\x1f\x0c\x2b\xbd\xa0\x2a\xd6\xff\x49\xcd\x33\x83\x80\x01\x5d\xda\x01\xe9\x44\xd1\xef\x24\x38\x2f\x96\x86\x12\x04\x15\x45\x26\x65\xf4\x93\x54\xa7\x7f\xce\x6f\x3a\x31\x12\xe3\x3e\x96\xea\x43\x74\x32\x88\x82\x8e\x01\x20\x9d\xa8\xc3\x5c\xfd\xfa\x4b\x71\x01\x9b\xfe\x17\x87\x1c\x71\xe9\x65\xf3\x66\x23\x45\x44\xbc\x1f\x51\xc9\x91\x0e\x6f\x65\x1b\x98\xf0\xa0\xf1\x03\xe9\x44\x0d\xfe\xca\xe8\x4e\x45\xe7\xe8\x12\x7f\x0c\x72\xf6\xa0\x50\xa7\x9a\x2a\xb3\x65\x8f\x4f\x0f\x48\x0b\x7c\x70\x8d\xec\xad\x3e\x41\xcb\x7a\x90\x4e\x5c\x0e\x7a\x66\xe6\xc2\x20\xd6\xe8\xf5\x24\x5e\x21\x46\x74\x30\x01\x21\x84\x58\x58\xbb\x41\x5b\x7e\xce\x4b\xb0\xe7\x6f\x09\x2e\xe4\xe4\xa6\x08\x48\x27\xce\x61\xe0\x73\x24\x98\x04\x5e\x3a\xaf\x7f\xc1\xc6\xe6\x79\xea\x88\x61\xfa\x62\x85\xc2\xa1\xe8\x90\x41\xd4\x7f\x20\x9f\x15\x0f\x3a\xb0\x81\x74\xa2\x78\xc4\x93\x31\x62\x83\xaf\x16\xeb\x9f\xcf\x88\x16\x79\x1a\xaa\x7b\x87\x03\x55\x53\xa4\x55\x5e\x4f\xdb\x77\x3e\x41\xb6\xbe\x85\xae\x48\x83\x74\xa2\x69\x7d\x41\xe9\x7e\xaf\x6b\xbd\x23\x4b\xe0\xfa\xbb\xe9\xb6\x81\xf2\xa7\xc5\x8b\x8b\x31\x6b\xd9\xcf\x0a\x0b\x92\x9d\x8b\xc2\x61\x50\x0c\x20\xc5\xfe\x5b\x53\x5d\x3e\x13\x23\xdc\x35\x1c\x8b\xda\xb5\xcc\x9b\x43\x9d\x4b\xd7\xf8\xb7\xa1\xc9\xc7\x0f\x1c\xb6\x96\x57\x28\x33\xa0\x2b\x8b\x20\x9d\x88\x28\xf4\xba\xa5\x84\x76\xd1\xcb\x08\xd5\x34\x89\x86\x7e\xea\x45\xf9\x1e\x5d\xc1\x94\xec\x41\x74\x73\xdd\x72\x7e\xe3\xa8\x2f\x34\x7e\x20\x9d\xf8\x84\x2d\xee\xcd\x44\x2e\xa1\xe4\x8b\xc0\xbf\x37\x2f\x02\xdd\x4c\x4d\xdd\x99\x35\xfb\x2e\xd2\x65\x93\x23\x3f\x31\xf0\x9a\x2d\x42\x2b\x60\x90\x4e\xdc\xb2\x78\x15\x59\xdf\xaf\x4b\x80\x98\x72\x62\x60\x4a\xcd\x4c\x10\x9f\xfe\x61\x65\x49\xf7\x4d\xce\x8c\xdc\x39\xa5\x84\x82\x0f\x74\x8e\x0b\xd2\x89\xe2\x25\x78\xad\x1c\x3a\x9e\xdc\x0f\x58\xce\xd0\x9b\xb3\x73\xac\xd5\xb2\x75\x7d\xfc\xb1\xe4\xb9\x46\x74\x9e\xcb\x6d\x18\x49\x41\xbb\x2d\x90\x4e\xcc\x92\x4e\x4a\xfe\xfa\xe3\x64\x66\xee\x2e\x90\x00\x87\xb3\xc2\xf5\x80\x52\xab\xa1\xcf\x69\x31\xd4\x84\xd9\xeb\xea\x90\x6b\x07\xda\x18\x80\xa7\x13\x53\x59\x75\xbe\x0e\x3b\xf7\xee\x94\x61\x5c\x59\xba\x1a\xb6\xcd\xbb\xd6\x7c\x12\x3c\x5c\x0b\xfe\xf3\xc5\xfd\xbc\x9b\x97\x07\xda\x17\x83\x74\x62\x5b\x26\xfd\x57\x47\x4e\xd6\x1a\xf1\xb4\x29\x5d\x75\x93\x8a\x59\xbf\xe6\x10\x16\x46\xc4\xc6\x77\x19\x2d\x64\xcf\xea\x3a\x4a\xa1\x29\xfe\x47\x27\xe6\xfe\xbf\x05\x91\xdc\x66\x46\xad\xa7\xb1\x54\xbd\x69\x95\xbe\x4f\x51\x98\xea\xab\x70\x3d\xb2\xa7\x4c\x14\xc3\x9b\x9d\x0f\xee\x21\x1a\x2f\xdf\x95\xff\x77\x41\xd4\x16\x17\x26\xba\xa3\x63\xde\xa1\x9a\x16\xaf\xce\xc4\x94\x54\xcc\x89\x2b\xed\x6f\x37\x52\x8c\xd5\xe1\x6d\xdb\x5b\xf7\xcd\x89\x15\xfa\x7f\x01\xb1\xdf\xff\x5e\x59\x71\xb4\xfd\x39\x8e\x6f\x3a\x5f\x9e\x44\x63\x28\x4e\x3a\x48\x99\x50\x74\xe7\x10\xa1\xf0\xa7\xce\xb4\x31\x97\x0b\xb4\xf3\x06\xf9\x47\x41\xa9\x97\xc2\x8e\x2e\x93\x44\x92\x99\x0a\x4a\x1c\x66\xd7\x36\x6c\x57\x23\x4d\x33\x9f\xba\x5e\x3f\x3c\xfa\xd9\xad\x60\xde\x06\x9d\x4e\x80\xfc\xa3\x6a\xe6\x26\x4a\xde\xe7\x8f\xf2\x66\xe1\x2c\x33\xa6\xf3\xbf\xf7\x70\x7e\xa8\xba\xcc\xe2\x4b\xbd\xbb\x5d\x35\xd8\xfa\x56\xa7\x03\x9d\xdc\x80\x8e\x33\x8e\x16\x6e\x26\x3e\x7a\x26\xb6\x49\x1c\x03\x43\x3b\xdd\xf9\xd3\x24\xba\xed\xa2\x78\x4c\x13\xac\xb2\xb4\x78\xfa\x9a\xd4\x5c\x04\x6a\x97\x40\x3a\xf1\xd5\x41\x64\x68\xcd\x4b\xb1\x57\x8a\x2a\xd3\xa6\x2d\x1c\x23\x07\x3c\x69\x92\xb9\xbc\x89\xa7\xb8\xae\x85\x2f\xe8\xdc\xec\x3d\xa1\x75\x15\x48\x27\xee\xa4\xdf\x9e\x37\x0a\x72\x4a\x5d\x3f\x69\x6e\x96\x44\x48\x57\x46\xbe\x21\x21\x54\x8a\x30\xc3\xa0\xdd\x19\x59\xab\x33\x17\xc2\x80\x62\x00\xb1\xa7\x1f\x9e\x6b\x71\x46\xa6\xd0\xdf\x94\x47\x91\xf4\xcc\x70\xab\xb9\xc6\x62\x8e\x8e\x36\xe8\x0f\x22\xa8\x49\x7c\x39\x76\x7e\x0d\xed\xbc\x41\x3a\x51\x76\x6c\x45\x3d\xd0\x18\x36\x33\x34\x94\x1e\xe0\x1e\xf7\xf1\xb0\x32\x29\x58\x30\x8f\x73\x74\xe8\x86\xf3\x96\x2a\x33\x94\xe2\xff\xbb\x98\x62\x0e\xe3\x05\xf9\x44\x81\x5f\xd1\xb7\x81\x8e\x64\x6b\xe8\x98\xfd\xad\xe2\x5a\xa4\xbf\x73\xba\x0f\x74\x22\xb3\xdf\x38\x11\xe6\x57\xf7\xa7\xae\x3f\x40\x87\xe3\x00\xba\x6f\x3c\xfc\x91\xe8\x64\x8a\x7b\x32\xe8\xf2\xd9\x6f\x4f\x7d\x8e\x84\xe3\x8a\x03\xef\x05\x34\x26\x0e\x33\x2d\x54\x7d\xdf\x50\xec\x63\x87\xe3\x80\x16\x42\xaa\x4d\x86\x77\x28\x25\xc7\x7b\x8b\x06\x15\xf7\xdd\x8a\x9f\x49\x1a\x7d\xcd\x8a\xce\xef\x55\x61\x88\x0b\x50\x1a\x53\xc5\x43\x85\xe3\x00\x92\xfc\x8a\x48\xd6\x4d\xd5\x6f\x0d\xc9\x76\xaf\x95\xfb\x80\xff\xd6\xe4\x4d\xee\x45\x4a\x2f\x2d\xe9\x71\x1c\x5e\xe8\xaf\x6d\xf9\x1f\x30\x38\x0e\x20\xca\x27\xf3\x54\xc8\x0b\x39\x5a\x31\xad\x0e\xf8\x5b\x2e\x79\xde\xa3\x65\xbe\xf1\x4e\x1e\xe6\xb4\x45\xb5\xb7\xc2\x8c\x4e\xdb\x78\x14\x70\x1c\x40\x96\x67\xc9\xfc\x22\xc4\x5e\xd6\xa0\x1d\x54\x7f\x41\x1b\x13\x4d\x20\xa0\xd5\x50\x1b\xbd\x4a\x55\x6c\x8a\x99\xc2\xdc\x47\x17\xce\x78\x00\xc7\x01\x84\xf9\x1b\xf2\x1c\x72\x9e\xf2\x11\xdf\xcb\x27\x88\x13\x69\x57\x1a\xde\xeb\x8e\x59\x13\x81\xbb\x8c\xd4\x02\xba\x7d\x53\x5e\xed\xd7\xf4\x70\x1c\x40\x9a\xd3\x14\xca\xef\x8c\xc9\x76\x55\xf9\xd2\xb9\x0c\x5d\x64\xc8\x31\x06\x46\x9b\xb9\xe2\x32\x42\xf9\xc5\xe8\x86\x3e\xa0\x74\xfb\xc2\xe7\x07\x10\xe7\xe3\x29\xe5\x82\xd4\x99\xaf\x0b\x61\xe8\x7d\x83\x4f\x46\x33\x33\x3b\x9e\x67\xae\xcc\x52\xf4\xba\x99\x71\x0e\x0f\xcc\xd1\x41\xde\x7a\xf2\x7f\x38\x80\x3c\xef\xb2\x2e\x26\x3f\xa2\x39\x93\xe9\x0c\x6a\xc3\x11\x27\x19\xf3\x2f\xad\x92\xdb\xcd\xdc\x88\x4b\x2e\x56\x69\xf7\xed\x5a\xe3\x43\x83\x72\x40\x66\xf1\x98\x68\x09\x5d\xbe\x51\x72\x67\x51\x04\x56\xf6\xb9\x25\x58\xe7\x94\x26\x82\xdf\xb4\xd6\x3a\xba\x2b\x60\x93\x1f\xa5\xa6\x83\x05\x8e\x03\xc8\x33\x56\x69\x03\x66\xc5\x8e\xa8\x88\xd3\xcf\x9e\x96\xbf\x61\x53\x99\x85\xca\xee\x58\xc1\xbc\x84\x38\xb4\x2d\x8c\x07\x3e\x95\x90\x1f\x87\xfc\x3f\x1c\x40\x9e\x43\x09\x47\x45\x0d\xcd\x68\x09\xdf\x1e\x05\x6e\x14\x6d\x38\xc0\xf8\x5a\x73\xc8\xe7\xcc\xc3\x5b\xcd\x78\x52\x88\xeb\xb7\x29\x50\xe0\x38\x80\x3c\x27\xbc\x60\x18\x3f\xfd\x3d\x2b\xa9\xac\x43\xa7\x34\xe5\x11\xf1\xa8\xc6\xa6\x64\xdb\xf5\xe7\xc5\xa5\x6d\xbb\xb0\xc2\xc3\xd6\x87\xc4\x70\x1c\x40\x9e\xc9\xb2\xd2\x6d\x66\x55\x70\xce\x11\x3e\x86\xb2\x07\xb2\x24\xcf\xee\x6f\x5b\x1e\x5c\xf1\xad\xf4\x22\xe8\x8e\x0a\xd1\xe7\x6b\x31\xc2\x71\x00\x79\x26\xbd\x5f\x7c\x6b\x91\xd3\x35\x8c\xaf\x1b\x24\xad\x6f\x9a\xac\x6b\xff\xba\x65\xc4\xb7\x8e\x53\x52\x01\xb9\x79\xb6\xf7\xaf\x02\x37\x1c\x07\x90\xe7\x8d\xb7\xa7\x8f\x69\xe6\x6f\xfc\x48\x5e\xaf\x4f\xfc\x08\x4f\x33\xd0\xdd\x94\xff\x3d\xfe\x74\x8d\xd1\x5f\xae\x62\x1d\x99\x22\xfa\x1e\x1c\x07\x90\x67\x2a\x1f\x69\x75\xc6\x04\x55\xf6\xcf\x0b\x29\x65\xd5\xbc\x1c\xe3\x34\x2e\xe3\x92\xf2\x6c\x67\xfb\x1d\xe2\xed\x7f\x3c\x63\xaf\xd8\xe0\x38\x80\x3c\x47\xdd\x6b\xbd\x1f\x32\xa1\x1e\x16\xc8\xf9\x88\x2a\x69\x1b\x77\x76\x5a\xf6\xd3\xf6\xbd\x28\x4f\x4e\xb6\x0a\x46\x67\x87\xc6\xaf\xcc\x70\x1c\x40\x9e\x67\x27\x77\x5f\xb4\x7a\x9c\xef\x2b\x70\xa0\x66\x70\xbd\xce\x7a\x3e\x9b\x7d\x64\x87\x77\xb9\x40\x74\x73\x52\x9c\xa3\xbb\x53\x82\x03\xe5\x80\x1c\xe3\x22\x67\x7d\xfd\xe9\x7d\xb7\x1a\xd7\x9f\xf9\xd6\x09\x59\xb4\xa8\x64\x82\xf5\xf7\xbc\x8d\x38\x1e\xb1\x32\xe4\x62\x2f\xf7\x45\xc1\xe5\x07\x24\x19\xb7\x04\x2e\xf6\x7e\xc9\x63\xe3\x1a\xee\xa8\xcf\x73\x6f\xf0\xe5\xbe\xc1\xcd\xb1\xbd\x6d\xa3\x98\xbb\xea\xbe\x96\xc3\xd5\xcb\x10\x84\xe3\x00\xf2\xec\xf2\x2c\x0d\xd6\x50\xad\x68\x1e\xe4\x9c\x8b\xc8\xf2\x27\xf7\xfc\x6b\x58\xa7\xfb\x8b\x8d\x94\x22\xab\xd5\x20\xe5\x3b\x63\x64\xb8\xfe\xe7\x1f\xcd\x58\x81\xf6\x7f\x0b\xa5\xc7\x71\x97\x78\x9f\x4f\x1c\xfc\x6d\x1f\xa9\x9f\xea\xcf\xfc\xa6\xf8\xc3\x73\xdf\x9d\xfd\x49\x82\xb6\x99\x0b\xbf\xee\x08\xd3\xa7\xda\xff\x53\x28\x21\x23\xc4\x4c\x72\xe8\xb0\x21\xfc\xdf\xbf\xb8\xdd\xd2\x27\xd1\x99\x4e\x2d\x5d\x94\x58\x69\xb7\x72\x3b\x72\x9a\xa8\xc4\xab\xa8\x65\x4b\xc5\xb2\xfc\x6a\x88\xb8\x22\x73\x14\xf7\xcf\xa5\xda\xc1\xc8\xfc\xb0\x97\xca\xe2\x14\x73\x1b\x28\x59\x5a\x9a\x7e\x43\xad\x84\xdc\x43\x98\xe5\xe8\x6c\x1d\xb0\xee\xf5\x93\x39\xdd\x7f\x2e\xb5\x3e\x35\x10\xb4\xa0\x1a\x63\xf6\x6b\xd2\x88\x78\xf7\x5e\xf1\xca\x52\x0e\xff\x60\x83\xb8\xf4\xa1\x2d\x0a\xfb\xb8\xae\x0f\x6f\xfe\x3f\x97\x22\x57\x24\xc3\x38\x05\x08\x90\x8e\x24\x0f\x52\xe2\xae\xf7\x83\x59\x0d\x4d\x2a\xd1\xb3\x9f\x5d\x59\xaa\x9a\x0e\x1a\xf7\x64\x1b\xfc\x73\x69\x57\xdc\x71\xfb\x97\x37\xf4\x0c\xd5\xf5\x7b\x03\x6f\xa5\xf4\x60\xa3\xb2\x11\x3e\xea\x54\x92\x39\xd1\xb5\xc7\x72\x2a\x65\x26\x1f\xff\xb9\xf4\x6d\xc7\x40\xea\x2f\xac\xe4\xc1\x56\xd4\xe9\xe3\xeb\xaf\x0f\xc8\x1e\xaa\x3d\x97\x51\xba\x8c\x96\xda\xda\xfc\x13\x6d\x91\x12\xfb\xef\x13\x18\x47\xf4\xf8\xdd\x4d\xe1\xf3\x5d\xf9\x49\x9f\x9d\x04\x97\xc4\x3a\x7b\x45\xe1\x97\x44\xac\x95\xd5\x77\x82\xfd\x51\x78\xd4\xda\x9f\xff\xb9\x54\x43\xed\x0f\x6f\xf4\x26\xf7\x8b\xbe\x96\xfd\x9a\x8d\x07\x51\x54\x8b\xea\xb2\x5f\xdf\x3d\x3e\x41\xd8\xaa\x5c\x69\x87\x51\xf9\xb7\xfc\x73\xe9\x12\xe9\xad\x99\x85\x02\x6c\x7d\x9c\x7f\x2c\xb9\x59\xe0\xf9\x85\xeb\x2b\xca\xc9\x1c\xf3\x55\xf2\x23\xf3\x1b\xc9\xfd\x34\xfd\xa7\xff\x5c\xaa\x5f\xa9\x65\x29\xa6\x30\x85\x2c\x9a\xce\xa2\x8e\x3f\x18\x78\xf6\x97\x96\x83\x6c\xe3\xc3\x47\x9d\xbf\x71\x3a\x96\xf3\x96\x03\x57\xff\x5c\x5a\xea\xa9\x83\x96\xbf\xba\x9b\x25\xf4\x48\x55\xaf\xa1\xe3\xc5\xc0\x2b\xac\x04\xd6\x85\x16\x6b\x81\x6f\x09\x85\x41\x06\xe5\x57\x22\xff\x5c\x9a\x79\x14\x79\xa7\xd6\xcc\x17\x36\x8d\x60\xd9\x7a\xaa\xb1\xbc\xc7\x10\x8c\xaf\x20\xfd\xe3\x6e\xef\x4f\xf2\x37\xc7\xb2\x07\xd5\xee\xff\x5c\xea\xbf\x5f\xa0\x27\x08\xfb\xf9\x42\xb5\x39\x9d\xc8\x8d\x8d\x22\xa8\xe7\x7c\xa3\x55\x6e\x0f\xb5\xf5\xe8\xc3\x43\x1b\x95\x56\xab\xfe\x7f\x2e\xf5\x90\xb4\xf3\x8c\xb8\xdf\xe1\xce\xda\xe6\x92\x48\xe7\x31\xe4\x37\xda\x57\xf0\x65\x50\x47\xf6\xf9\x21\xc5\x4f\xb3\x3c\x6d\x0a\x97\x7f\x2e\x6d\x25\x41\x2d\xa7\xed\x8f\xf1\x7d\xc0\x20\x2e\x37\x37\x3c\x30\x59\x44\x54\xec\xb0\xd6\xd8\x88\x33\xaa\xca\x63\xca\xbc\xf9\xf1\xf1\x3f\x97\x7e\x2a\x33\xc4\x67\x2a\x7e\x3a\xa5\xf0\xd3\xf8\x53\x42\xd7\x68\x5d\xb6\x6b\x3e\x1e\x96\xd3\x09\xcd\x4f\xb5\x93\xfe\x9c\x8f\x49\xd3\xff\x5c\x8a\xad\xe2\x97\xec\xb2\xed\x3d\x53\xce\x14\xf7\xea\x91\xa6\xc7\x63\xbd\xc5\x1f\x39\x8d\xe1\xd4\x67\x41\x6d\x91\x6d\x12\xe9\x1a\xec\xff\x5c\xba\xff\x4e\xf5\x9a\x21\x60\xe9\xfe\x59\xa0\x15\x61\x17\xa9\xa4\xf3\x10\xc9\x36\x8c\x71\xae\x7e\x76\x23\xf5\x60\x4e\x35\x21\x5a\xf0\x4d\x09\xd1\xff\xbf\x36\xf0\xdf\xd3\x8b\x38\x8d\x0d\xa6\x7e\x8d\xc2\x0a\xfc\x50\x5d\x04\xf4\x03\x8b\xda\xf0\x32\xe7\x1e\x3f\x12\x21\x83\xe4\x48\x42\x39\xb7\x27\x41\x42\x70\xcd\x15\xf4\xb2\x28\x8d\x95\x6c\xd8\x23\x52\x8b\x2a\x59\x94\xa7\x52\x1d\x8f\x9d\x7c\x6b\x4d\xce\x55\x26\x6a\x28\x74\xb3\x6c\xd7\x25\x2c\x6c\xe0\xca\x29\x90\xcf\x6f\xea\x15\x0f\x51\xe7\xc2\xe0\x64\x2b\x4a\x38\xa0\x8f\x50\xb4\xce\xee\x67\xd8\xfa\x90\x52\xe0\x6a\xb1\x68\x96\x98\x17\xf6\x96\x14\x8e\x03\x18\x36\xe2\xf5\x19\x90\xbf\x7c\xde\xda\x1e\xc8\x8f\x8a\xa2\x68\xe5\xb9\xf8\x8a\x16\x83\xe0\x36\xbf\x97\x43\xd1\x74\x2e\x68\x7a\xaf\x80\x01\x8e\x03\x18\x36\x46\x5d\xbb\xb6\xa8\xec\x55\x46\x95\x5e\x27\x8c\x71\xe6\x05\x4c\x16\x55\xaa\x58\x52\x5f\xea\x3c\x2a\x5b\xc2\xd5\xd3\x38\x13\xa1\x82\xe3\x00\x86\x8d\x8e\x7d\x2b\xcd\xb3\x85\x48\xec\xcf\x4d\x04\xdc\x7d\xcb\x23\x5c\x83\x11\x8f\x36\x4b\x6e\xe3\x91\x6c\xa9\xe9\xad\x65\xc4\xf4\x04\xe0\x38\x80\x61\x23\x72\x6a\x7b\xac\xc9\x4d\xc8\xea\x98\x0b\x65\xf2\xfe\xe0\xe2\x92\xb6\x00\x81\x14\x01\x7d\x68\x5d\xaa\x4c\x40\xf9\x11\xf9\x0a\x5c\x99\x08\x72\xf4\x42\xaa\x9c\x4c\xb0\xcb\x8b\xf4\x7b\xe8\x55\x3b\x1d\x9c\xba\x8d\x41\x4e\x91\xe9\x3b\x3e\xd6\x5c\x0b\x69\x7c\x17\x57\x33\xcf\xe0\xca\x68\x90\xa4\xaf\x60\x97\xfb\x1a\x8c\xf0\x21\x53\xbd\xf8\xbb\xb7\x4b\x99\xab\xf0\xa1\x77\xdd\xc6\x4f\xf5\x0e\x14\xfe\xae\x92\x8b\xee\x96\x15\x6c\x38\x0e\x60\xd8\x60\x9f\x9a\xad\xf0\xc9\xb6\xca\x46\xff\xb6\xf2\xd4\x13\xaf\x2b\x29\x3c\x9f\x73\xf9\x29\x8a\xdc\xb0\x99\xc6\xfd\xa8\xd0\x54\x6c\x02\x38\x0e\xa0\x0c\x52\xd9\xce\x7b\x69\x61\x69\xc6\x9e\x37\x8b\x74\x34\xf9\x13\x27\xe5\xca\x30\xa8\xcf\xe3\xaf\xfd\xc7\xb7\x6f\x8c\x54\x86\x3e\x96\x10\xc1\x71\x00\x79\xbe\x9d\x29\xae\xdc\xda\x7c\x69\x5b\xb5\xf7\x40\xe1\xfd\x37\x5b\xce\x0b\x81\xca\xbc\x4d\x9f\x82\x5f\x96\x49\xdd\xfb\x55\x35\xcf\xe1\x86\x79\x90\xa8\xf7\x55\x9a\x27\xed\x7c\xd7\x48\x70\x63\xd6\xae\x9c\xa5\xbe\x5b\xdf\x91\xbf\x88\xf7\xe0\x8b\x1c\x57\x65\x93\xbb\x14\xdd\x61\x2f\x3c\x07\xf4\x1e\x61\x1e\x58\xd2\x7b\x2b\xc3\x06\x0b\xe5\xa9\x67\x42\xd4\xa6\x5f\xe6\x8b\x99\x44\xe2\x0d\xb6\x90\xd4\x02\x48\x07\xaf\xb7\x76\x11\xe0\x38\x80\x3c\x07\x34\x66\x05\xc5\xf1\xe9\x8b\xaf\xe3\x66\xcf\x36\x8a\x4a\xe2\x65\x54\x8e\xfb\x58\x34\xed\x39\x99\x4b\xa4\x49\xff\x45\x62\x80\x2b\x83\x40\xae\x5e\xf3\xa1\x9c\x50\x33\x7d\x93\x05\x77\x75\x94\x65\x27\xb2\x1c\xd7\xf9\x8c\x1d\xc6\x94\x4f\x1b\x85\xf8\x3b\x8b\xc3\x99\x93\x5c\x6a\x38\x0e\x20\xcf\x1d\xed\xb8\x1a\xdd\x71\x7a\x6a\xef\x6c\x1e\x2c\xc4\x74\x47\xc8\x39\xf9\xc4\xde\xa6\x3d\xd9\x78\x70\xf8\x5d\x38\xa6\x75\x22\x16\xee\xf9\x80\x6c\x7d\x75\x4b\xc5\xa3\xf4\x1e\xd2\xb8\x48\xb1\xa7\x8c\xf6\xcf\xb4\x16\x69\xe4\x37\x58\xbd\x71\xcc\xb4\xee\x55\x46\xf2\xc4\x74\x78\xc3\x95\x2f\x20\x5d\xcf\x72\x2b\x9f\x28\xb2\xc7\x2c\x7e\xa6\x9a\x3a\x7e\xc7\xf5\x31\xaf\x87\x51\x6d\x85\xe1\xea\xe2\xd7\x47\xac\x2e\x14\xe5\x11\x22\x49\x38\x0e\x20\xcf\x4d\xc8\xa5\x7d\x63\x68\x18\x42\xf1\xd2\xab\x3f\xa8\xea\x52\x51\x1e\xdd\xd8\x3b\x25\x8f\x52\x8a\x29\x63\xbb\xb7\xdb\x99\x6f\xc2\xf5\x63\x20\x61\x1f\x88\xf6\x27\x36\x38\xb6\xc1\x5b\xb5\xbf\x41\x44\x6b\x92\x79\x94\x46\x31\x63\x8d\x62\xbe\xf1\x69\xb5\x71\x69\x90\x3b\xa3\x2a\x39\x1c\x07\x90\xe7\x46\xfd\x9c\xf2\x74\xd7\x85\x2d\xaa\x07\xf6\xd9\xbb\x5f\x38\x65\xd3\xce\xf9\x0c\x3d\x06\x54\xa4\x2b\x3d\x1b\x60\x44\xa1\x2c\x70\xe5\x26\x48\xd9\xb7\xd0\xd5\xb4\x09\x84\x0a\x44\x75\x87\x49\x71\xbf\xc5\x31\x66\x60\x61\x57\x4d\x68\x12\x2a\x0b\xa1\xf0\x7b\x5a\xe5\xd4\xcd\xf4\x10\x8e\x03\xea\x9f\x9f\x6f\xa0\xaf\x0c\x11\x0e\x49\xa7\x0c\xb9\x2f\xbf\xdc\xe1\x65\x70\xfb\xa1\x34\x26\x37\x8e\xf2\xac\xff\x34\x29\x21\x56\x0f\xfe\xf3\x00\xf2\x2c\xd1\x2b\x33\xcc\x68\x34\x93\x40\xd2\x35\xbf\x36\x43\xa6\xf5\x9c\x6c\xe8\xcc\xe5\x80\xa8\xb7\x0b\x73\x94\xdd\x7c\x2e\x26\x48\x04\x8e\x03\xc8\xb3\xe9\x0b\xd4\x29\x34\xdd\x44\x6d\xd3\xdc\xbc\x8f\xa7\xd7\x07\xa2\x37\x18\x76\x43\xeb\xf5\x5d\x4e\x8f\xff\xcc\xe9\xe2\xc4\xa6\xc2\xf5\x87\x20\x6d\x6f\x64\xdc\x64\xbc\xb8\xf1\xd6\x51\x9a\xf2\x18\x11\x1f\x8d\x30\xa1\x8a\x28\x6c\x81\x7e\x05\x8d\x4c\x68\x65\x41\x2d\xa0\xe9\x0c\xae\x1f\x03\x79\xfb\x0f\x9c\x64\x0f\x4c\xf4\xf6\x96\x6c\x71\x56\xb5\xfc\xa9\xf2\x5f\x19\xbf\xfd\xb5\xfc\x67\xb5\x50\xe1\xc7\xce\x20\xd1\xba\xf5\x5f\x7c\x38\x0e\x68\x9a\x4a\x76\x8f\x4f\xba\x15\x89\x36\x56\x22\x75\xe5\xcc\x53\x55\x0d\x8f\x3d\x6e\x43\xed\x87\xb3\x1b\x37\x6f\xec\x45\xbb\xdb\x08\xdc\xf2\x0d\xc8\xdc\x27\x21\x48\x9b\x29\x6e\x88\x78\x85\x6e\x76\x74\x0d\xdf\xbb\xcc\xad\x5c\x4e\x62\x43\xf9\x4b\x46\xe3\xab\x73\xd9\xf2\x01\x2b\x9e\x0c\x8e\x03\xc8\x73\xf9\x12\xbb\x56\xfe\x32\x86\xbc\x47\x19\x65\x92\xa3\x64\x1f\x0a\xf1\xb3\x73\x45\x0f\xa2\x23\x18\xcf\x58\x6c\x57\x69\x85\x35\x0d\x1c\x07\x90\xe7\x0e\xe4\x01\x66\xc9\xc2\x0d\x2d\x74\x93\xf1\xc3\x95\xa4\x56\x4e\x32\x41\x7d\x6d\xfc\xf1\x91\x1e\x89\xf9\x13\xce\x9f\xf3\x2e\x70\xdf\xfb\x3f\xf2\xfe\x7f\x0a\xa6\xff\x6d\x26\xf0\xdf\x05\x13\x2e\x35\x77\xed\x5a\xed\x35\x9f\x01\x7d\x03\x11\x52\xb5\x06\x49\x74\xc7\x77\x34\x16\x96\x1c\x05\x7e\x8c\x81\x88\x2c\x7d\x5f\x51\xb8\x7f\x0c\x68\x00\x5f\x62\xe3\x6e\x0c\x36\xc8\xb6\xb1\xdf\x6f\x97\x0b\xf5\x5a\x06\x97\x2e\xe4\x4e\x9d\x37\xaf\xab\xb0\xd1\x1d\x22\x29\xa4\xd7\x89\xc1\x71\x00\x0d\x60\x50\xe4\x93\x30\x0b\xdf\x0f\x0f\x8f\xc7\x99\xe1\x51\xa7\x1d\xea\xbd\x76\x68\xdf\x31\x26\x43\x1a\xb5\xbe\xbc\x2d\x1f\x73\x0d\xe5\x81\xe3\x00\x1a\xc0\xd6\x8b\xb3\x7c\x94\xbb\x1f\x4b\x4f\xd9\x02\xed\xbf\x0f\xdb\x7c\x88\x72\xbc\xe9\x8b\x78\xa2\x41\xd5\x74\xf5\xe1\x05\xc9\xab\x07\x70\xeb\x3d\xa0\x03\xc4\x11\x2c\x0b\x75\x77\x82\xf3\xe4\x14\x8b\xb0\x99\x4e\xd9\x7b\xbf\x97\x9b\x2b\x93\x62\x3f\xb2\xee\xa2\xa9\xfc\x5a\x18\xf0\xb7\x61\x82\x72\x40\x06\x7f\x98\x46\xf4\xac\xe3\x5e\xaf\x9f\x54\x00\x7e\x9c\x53\xf6\xcc\x37\xd6\x05\x17\x5b\xbd\x31\xcf\xd6\xf3\xfd\x6a\x9a\x29\xa7\x3e\xb8\xfb\x02\x29\xfc\x34\x86\x49\x72\x65\x73\x03\xed\xbb\xf8\x4f\x7f\x49\xb6\x4d\x3c\x7e\x7a\xf8\x0d\x5a\xb7\x32\x89\xdc\xc7\xd1\xa2\x5d\x67\x68\x67\x85\xe3\x00\x1a\x80\xa5\xd1\x21\xad\x45\xe1\xad\x3e\xc1\x4a\xbb\x94\xda\xce\x9f\x95\x71\x75\xe1\xfb\xd8\x02\x4c\xc9\xa1\xe1\x05\x65\x7b\xf7\x5c\xe1\x06\x06\x90\xc4\xff\x44\x90\xfe\xf1\x61\x79\xf8\xfe\xa3\x5b\x7a\xd1\xea\x24\xec\x8d\x98\x47\x0a\x7c\x1f\xfc\x38\xb6\x5f\xeb\xf9\xeb\xe2\x77\xbc\x40\x84\xe3\x00\x1a\x40\x48\x49\x93\x3e\x01\xe3\xe2\x9e\x93\xa3\x11\x5d\x72\xf7\xe5\xa1\xb5\xde\xce\x43\x56\x75\x2f\x62\x63\x77\x35\xed\x2c\x11\x1d\x3c\x38\x0e\xa0\x43\x5f\x13\xa6\xc1\x0d\x64\x24\x91\xd7\xc6\xdf\x72\x90\x4a\xaa\x1c\xa7\xf0\x7c\x10\x2d\x2f\x42\x4e\x46\x8d\xa5\xbe\x4b\xa0\x9e\x80\x05\xc7\x01\x1d\x45\x43\x99\x9e\x0e\xaa\xf6\xe5\xe7\x7b\x44\x19\x46\x17\x85\x9b\xfa\x85\x5b\xa7\xf3\x9d\x70\x18\x63\xdf\xca\xbb\x35\xc5\xdd\x51\x5e\x38\x0e\x20\xcf\xda\x2c\x1b\x0a\x31\x3f\x0c\x7c\xe8\x08\x7e\x54\xc6\xef\x09\xbc\x21\x7d\x9d\xf4\x2c\x42\x59\x18\x95\xe9\xe8\x4b\x57\xc9\xdd\x1e\x5c\xa1\x0c\x32\xf9\x97\xa4\xce\x31\xea\x87\xda\xd1\x1a\x67\x99\xd6\x46\xfd\x33\x5a\xcf\x6b\xa4\x79\x5f\x08\xf9\x97\x73\xa6\x4d\xdd\x57\x2a\x50\x84\x5b\x77\x04\xa9\x7c\x17\xb6\xf1\x88\x18\xde\x43\xeb\xa3\xf7\x9b\x12\x84\x45\xa1\xcc\xca\x57\x63\x61\xe8\xc7\x17\x9f\xee\x56\x18\xbe\x0a\x4d\x32\x89\x43\x39\x20\x97\xcf\xfb\xfb\x9e\x4d\xe1\xbd\xda\xd5\x09\x8f\x48\x82\x3f\xe3\x21\x78\x72\xa5\xc1\xeb\x26\xde\x17\x08\xa9\x19\x58\x51\x1c\x8f\xe6\x49\xe0\x38\xa0\x23\xf1\x39\x85\xf4\x96\x5d\x9c\xee\x81\x3b\xd9\x73\x64\x18\xef\x45\xda\xae\x3a\x42\x13\x27\x3f\x48\xdf\x35\x16\x71\xd3\x55\x45\xc1\xad\xa3\x83\x6c\x7e\x0e\x45\xf7\x70\xea\x1a\x09\xea\xcb\x9b\xf6\x5c\xf2\x9e\x02\x1f\xea\xaf\xd6\x16\xa3\xaf\x1b\xea\xac\x58\xc2\x9f\x30\x0b\x5e\xc0\xad\xa7\x82\x74\xfe\xd1\x0f\xd6\x7c\xf5\xaa\x11\xec\x98\x78\x61\x7b\xe2\xac\x58\x24\x17\x51\xc5\xe5\x60\x94\x71\xc3\x41\x87\xae\x2d\xdb\x20\x39\xb8\x3c\x83\x7c\xfe\xf3\x81\x00\x7e\x1f\x6e\x87\x7b\xdf\x50\x08\x4b\xe6\x3c\xfc\xe7\x74\x11\x2a\x23\x8d\xdd\xc9\x75\xd7\x14\x19\x5f\xc7\x8c\xb8\xc1\xf5\x1b\x20\xa1\x8f\x89\x95\xd2\x88\x76\x9f\x8a\x60\x04\x4b\x46\x7e\x73\xb4\xce\x90\xcf\xcb\xf6\x37\x7e\xdd\xa4\x7b\xfe\x33\x5e\x9e\x10\xd2\x13\xb8\x09\x00\xc8\xe8\xbf\x41\x95\x9a\x71\x76\x5b\xe1\x30\x99\xf8\xae\x35\xf4\xe6\x0d\x83\x4f\xa1\x5f\x2c\x2a\x71\x86\xfe\xdb\xcc\x2d\x8c\x9b\x6c\x42\xb8\x1c\x82\x94\x3e\xae\x97\x91\x5f\xd1\xfc\xc9\x90\x62\xfc\xdd\x79\x26\x6b\x50\x10\x87\xc6\x94\x49\x2f\x5d\x2e\xbf\x44\xf1\xde\xb7\xda\x43\x63\xf8\xcf\x03\xc8\x33\x63\x06\x1a\xac\xd6\xed\xa6\xb5\xca\x9d\xb3\x66\x39\x8c\x6c\x94\xb1\x9b\x43\x14\x35\x68\xf0\x49\x7e\xc6\x45\xb6\x0e\x2a\x2e\xdc\x78\x01\x92\xfa\x6c\x18\x84\x77\xd6\x6c\xcf\xb8\x29\xc8\xf3\x2b\xee\x30\xc5\x10\xf9\x1a\xdf\x4e\xf9\x4f\xf1\x67\xbc\x12\x47\x5c\xbb\x79\x9a\x0b\xf7\x9c\x41\x56\xff\x51\xeb\xdc\x02\x73\x5c\x2d\x19\xed\xe3\x2e\xcc\xe1\x0f\xde\xfc\xb1\xc4\xf1\x48\x1f\x0f\x44\x7b\x04\xca\xbf\x3c\xe4\x49\x4e\x86\xcb\x0f\x48\xeb\x77\x7f\x9e\x0e\x7a\xfc\x3d\xba\x63\x40\xd4\x8b\x27\x25\x5b\x2c\x9d\x60\xfb\x64\x4d\x7e\xe2\x77\x5e\xa9\xd4\xfa\x53\xd9\xa5\x31\xb8\x89\x3a\xc8\xeb\x0f\xd8\xbe\x4c\x1d\x2e\x10\xce\x8c\x1e\xd1\xce\x54\x12\x9a\x8a\x53\x8c\xfa\xd2\x5c\xda\x9e\xc5\xe5\xbf\xef\xc6\x55\x1d\x3f\xc7\x01\xc7\x01\xe4\x99\x49\x41\x41\x36\x5d\xb6\xb9\x3c\xf9\xb8\x40\x82\xe2\x17\x95\xea\x12\xeb\x16\xf6\xfc\xf0\x9b\xe7\xce\xb8\x99\xd4\x2b\x25\xcb\x70\x13\x1b\x90\xd9\x6f\xc2\xc7\xb6\xef\xa0\xf2\x34\x7e\xab\xb4\x7c\x71\x1d\x9b\x28\x73\x8c\x18\xda\xee\x56\xdd\x3d\xf4\xfd\xbe\xf7\xe9\xe8\x6c\x13\xfc\x73\x06\xe4\xf9\xf3\xdb\xe3\xa4\xd1\x14\x0f\x03\x09\xd7\xc1\xcd\x00\xbe\x83\xa2\x2c\xf2\xbf\x65\xdb\xbc\x56\xd8\x06\x07\x4e\x77\x6b\x2e\x02\x70\x13\x3f\x90\xdb\x2f\x7d\x52\x71\x88\x33\xad\x85\xf3\x94\x7e\xfb\x4b\xb6\xeb\x78\x4a\xea\x5e\x6a\xc4\xbc\x68\x1f\x6a\xff\xc8\x70\xc9\x22\x2a\x31\x25\x1c\x47\x08\xae\x60\xfa\xdf\xd6\x43\xff\xbb\x60\x92\xcd\x69\xc7\x54\x30\xae\xef\x5c\x69\xf4\x6e\x1f\xb4\x58\x76\xfa\xc9\xb9\x73\xc4\xd8\x18\x6e\x87\x79\x94\xbb\x3e\x44\xbe\x8d\x0c\xf7\x8f\x01\x0d\xa0\x9d\xc1\xd1\x90\xff\x87\x64\xc7\xbd\xbf\x8f\xae\x45\x71\xe2\x50\xa6\x5a\x3c\x39\x7c\xf5\x9e\x95\xff\x51\x40\xd1\x5d\xf2\x10\x84\xab\xac\x41\xfb\x01\xc2\x92\x44\x29\x99\x96\xd6\x6f\x90\xd4\xcb\x0e\xad\x5d\x78\xc9\x60\xd3\x98\x7f\x27\xa7\x6a\x03\xdf\xe2\x7e\x26\xbc\xf3\x47\xe7\x83\x72\x40\x1b\x02\x3e\xaf\x1d\xbe\xf3\x24\x7e\xdf\xe9\xdc\x3e\x28\xd3\x22\xd6\xf7\x73\xbd\x8d\x6f\xb0\xf8\x50\xf7\x80\x6c\x1e\x83\x82\xe1\xea\x19\xdc\x4c\x1a\x74\xc0\x98\x29\x80\x55\xe0\x1b\x3e\xbf\xd0\xc2\x73\x2e\x17\x79\x77\xf3\xb0\x37\xde\xe7\x3c\xf5\x0f\x96\x0b\x99\x42\x73\xda\x7e\xe5\x93\xc2\x15\x3a\x20\xc3\xaf\x2f\xf1\xdc\x65\x63\x2d\xdf\xe4\xa1\x12\x03\x93\xed\x31\xf9\x1e\x5b\xde\xf2\xad\x5b\x91\x28\x76\x5f\xb4\x73\x6e\xf8\xe5\x0c\x5c\x01\x07\x52\xfc\x2e\xd8\xd3\x98\x46\x7f\x7e\x1f\x06\x60\x1f\x04\x2d\xb4\xc5\xa7\xf9\x34\x16\x8d\x59\x4f\x9c\x19\x94\x2e\x0d\x19\xc0\xa4\x1f\xc2\x7f\x1e\xd0\xcb\x7a\x42\x7c\x79\x7e\xf1\x1f\xb2\x66\x3c\x37\xfe\xd1\xb6\x86\x8c\x67\x66\x33\xef\xa8\xe3\x4f\xd6\x63\x1a\xb0\xe0\x91\xf9\x21\x1a\xfe\x39\x03\x1a\x40\xa6\x39\x93\xe2\x73\x9f\x09\x3e\xc5\x67\x18\x23\xc7\x5f\xf1\xda\xf7\x38\xb0\x39\x63\xd7\xe9\x24\x8d\x73\x88\x34\x96\xe9\x19\xe0\x0a\x2f\x90\xe5\xb7\x08\xf5\x94\x4d\xe7\xe7\x99\xf5\xe4\xc2\x56\x33\xf5\xd2\xae\xa6\xa8\xf2\x44\xdf\x0a\xf7\x0f\x22\x2a\x1d\x6d\x98\x6d\xc1\x85\xeb\x68\x40\x9a\x7f\x8f\xe8\xa1\xe5\x13\x29\xbb\x4a\x99\x49\x83\xc3\x4b\xef\xe0\x70\x9d\x4b\xd9\xa4\x89\x34\xa1\x6f\x89\xf6\x57\x8c\x2f\x89\x05\xe0\x66\x8a\x20\xcf\x2f\x7a\xc9\x9d\xb8\x50\xc9\xd9\x47\xa5\x2f\x7a\x72\x42\xf8\x95\x56\x1c\xef\xbb\xef\xfc\xed\x38\x42\xbb\x9a\x7c\xb0\xaf\x48\x35\x5c\x83\x04\x89\xfe\x78\x1d\x2c\x34\xd4\xed\xdf\x34\xf4\x0f\xca\xc6\xf7\xbe\x73\x12\x29\xc6\xbd\x78\xcf\x7d\x3c\x3a\x3e\x31\xf4\xf0\xbd\xd9\x93\x44\xa8\x80\x86\x81\x44\x3f\x2d\x1a\xed\x54\x8f\x54\x4f\x58\x3d\x49\x0d\xfb\x01\x6b\xf2\x07\x3e\x05\x35\xda\xf5\x6b\x6e\x1d\x77\x39\x05\x41\x62\x4d\x0b\xe8\x0a\x2e\x0c\x24\xfa\xbd\x11\x66\xf5\x77\x75\xb2\x5d\x76\x25\xf3\x31\xc2\xcc\x66\xdc\x82\x5f\x9c\x65\xbf\x9f\x7f\xe3\x87\x6a\x8a\x1e\x58\x3a\xe3\x0b\xff\x79\x00\x79\xe6\xe2\x2c\x8e\x5b\x50\x7f\xa0\xfc\xd7\xce\xd2\xa5\xe9\xeb\x5e\xfa\x07\x5d\x31\x3a\x81\x87\x17\x3b\x5a\x89\x83\x06\xef\x8b\x1c\xa0\x79\x86\x81\x44\x7f\xed\x8d\x4a\xaf\xf3\x92\x71\x68\x5f\x6a\xf5\x68\xef\x0e\xed\xbc\x4a\x00\xb7\x75\xb8\x56\xcd\x11\x6b\xb7\x9b\x24\xb6\x65\x07\x54\x20\xc2\x40\xa2\x1f\xb5\x59\x76\xff\x3d\xbf\xcc\x32\xe5\x0b\x8b\x49\x6f\xe3\x25\x8d\xfe\x34\xbc\x18\xf1\xa5\x80\x47\x76\x39\x32\x0a\xd6\x54\x79\xf0\x1c\x40\x9e\x23\xa9\x7e\xfd\xcd\xca\x8d\x44\x71\x78\xeb\x39\x10\x83\xe4\x4a\x71\x4e\x9f\xac\x90\x2d\x81\x4c\x68\x22\xe2\xf0\xfc\xca\xa3\x1c\x17\x8e\x03\xc8\x73\xe3\xeb\x1d\xb1\x12\xbf\xe4\xd1\x7b\x24\x58\xd3\x93\xc4\x33\xc5\xb6\xcc\xbf\x16\xc4\x33\x56\x27\x3f\x23\xf7\xaa\xad\x8c\x13\x43\x07\x60\x18\x48\xf4\xc7\xf6\x62\x38\xb2\x0f\x33\xf2\x5c\xb2\x49\x14\x73\xcd\x64\x46\xb3\x88\xad\x1f\x3c\x5a\x35\x58\xb5\xf8\x24\x64\x87\xbe\x25\x08\x7f\x5f\x80\x3c\x77\xd3\x61\xe4\xbe\x8b\xd1\x7f\x82\x71\xaa\x4c\xb6\xa4\x71\xcf\x95\x62\x32\x33\xbc\x1f\x05\x66\xe0\xda\xaa\x15\x89\xfc\xb6\x0a\x3a\x23\x87\x81\x44\x3f\x52\x8b\x8c\x91\xff\x5a\x41\xcc\x45\x78\xc5\xde\xc0\xc5\x1c\x52\x39\x75\xa4\x04\x3b\x32\xff\x87\x10\x83\x71\xff\x05\xeb\x23\x68\xa1\x03\x03\x89\x7e\xc4\x05\xc3\x96\xc4\x8f\x05\x6f\xc7\x6e\x22\x55\x6a\x08\x8b\xab\x45\xc5\xdf\xa5\x5d\xe8\x3f\xb6\x1c\x09\x30\x18\x14\x63\x66\x80\x9a\x0d\x18\x48\xf4\x07\x89\xe2\xde\x2f\xfb\x84\x29\xeb\x78\xfd\xa2\xc7\x75\xef\xeb\x1c\x89\x6c\x68\x4b\xf8\xe7\x4e\x09\x19\xdf\xf0\xb3\x35\x29\x0b\xe8\xb8\x03\x03\x89\x7e\xd2\x69\x9f\x77\x42\x98\x13\xb9\x6e\xac\x11\x47\xc9\xfc\x48\x44\xe6\x82\x88\x38\xea\x6a\xb0\x78\xde\xda\xa0\x81\xd1\xc3\x61\xe8\x38\x08\x03\x89\x7e\x4d\xa1\x88\xcd\x0c\xfa\xcb\x32\x99\xd5\xc6\x8d\xe8\xa3\xa8\xf4\xd1\xe5\x60\x04\xa2\xe3\x1a\xb7\xb8\x7c\xb2\x8e\x24\x33\x42\xb8\xef\x1d\x24\xfa\xe7\x9d\x8d\x09\xea\xf5\x71\x5e\x3b\xf3\x48\x93\xd3\x0c\x99\x9c\x57\x2e\xc5\x38\xfd\xd8\xed\xe2\xe3\x95\xd5\x7a\xf5\xa4\x65\x19\xda\xff\xc0\x40\xa2\x3f\xd8\xa6\xd6\xf8\xa1\x20\xa6\xc0\x34\x7d\xa0\x60\xbb\x43\x83\xd3\x6c\x20\xdd\x0a\xe2\xdf\x92\x28\x0b\x43\x85\xae\xe5\x85\x3e\xf8\xfb\x02\xe4\xd9\xcd\x5b\xba\x51\x23\xb2\x81\xd2\x8b\x85\xb9\x3e\xd4\x11\xd3\xc5\x85\x22\xfa\xe4\x97\xf5\x42\x72\x4b\x8a\xa9\x3c\x5f\x8c\x11\x74\x61\x05\x06\x12\xfd\xc5\x59\xf5\xfe\x35\x2f\x1e\x8d\x3d\x5e\xd3\x78\x1f\xf2\xe0\xd3\x97\xb3\x9a\xdf\xad\x5c\x0c\x4e\xca\xdc\x83\x89\x6a\x03\x98\x09\xf0\xcf\x07\x90\x67\x5e\x6e\xcf\x57\x26\x08\xd8\x3d\xfa\xf7\x23\x50\x8c\xd5\x35\xab\x70\xfa\x6c\x5c\xf3\xc6\x57\xe7\xc8\xc7\xa9\x14\x1e\x76\xd4\x43\xc7\x2f\xd8\x3f\xa2\xff\x7f\x0a\xa6\xff\xcd\x0a\xff\x77\xc1\xb4\x34\x6f\x13\x5e\x39\xd2\xc7\x6e\x62\x3b\x3d\xb9\x74\x8e\x1c\xa1\xa2\x5c\x50\xf1\xe1\x60\xfb\x63\xa5\x9d\x92\xc6\xda\x4e\xc7\x23\xe8\x3f\x06\xed\x0c\x10\x29\x9f\x54\x16\x43\x33\x7e\x28\xdf\x26\xf0\xc4\x2d\x78\xfe\x27\x97\x14\x35\x8e\x2a\xa7\x0d\x47\xe1\x6f\x73\xf1\xaa\xb3\x20\xe8\xcc\x0c\x06\xda\x19\x40\xea\x1c\x71\xa9\x9e\xf7\xc5\xe3\x6e\xbf\x32\xed\xe2\x40\x7b\xc2\x27\x7e\x62\x78\xa5\xca\xff\x3b\xdd\x5e\x4f\x3d\x91\xf4\x39\x54\xf1\xc0\x40\x3b\x03\xca\x4c\x34\x4b\xb5\xb9\xaf\xdc\xea\xba\xab\x6e\x3e\x49\xb3\xff\xc4\xbc\x44\xb5\xb9\xbc\x13\xb8\xdb\x27\xba\xee\x7d\xf2\x03\x8d\x0e\x8e\x03\x5a\x42\x14\x10\x1b\x16\x37\x77\xef\x0a\x14\x35\xc1\x6a\x65\x7a\x42\x62\xad\xf4\xc0\x77\xef\xbc\xf5\x34\xf3\x73\x4b\xee\x9f\xf2\x6b\x68\x65\x0d\x03\x29\xcb\xd2\xa8\xac\xc6\x97\x9f\xcb\x95\x85\xc5\x3a\x52\x0d\x18\xc4\x54\x68\xbc\xba\x52\xe9\xc4\x47\x3f\x1b\x31\x78\xf7\x48\xaa\xfe\x81\x1b\xa8\x40\xca\x72\xb9\xd3\xbc\x8d\xe8\x8a\x9e\x48\x14\x27\x8e\xbc\x39\xca\xb1\xb4\xf2\x78\x2e\xfa\x50\xb5\xaa\x94\xd9\x28\x69\x0d\x9f\xf0\x01\x17\x1c\x07\xd0\x00\x08\x87\x16\xd9\x4e\x3d\x35\x5a\xc9\x83\x3f\xe2\x13\xd5\x95\x8b\xfd\xfe\xfc\xa9\xba\x73\x43\xd6\x9e\x83\xcd\x8b\x9f\x88\x19\x11\x5a\x50\xc2\x40\xca\x12\x39\x94\x0d\xf7\xfa\x8e\x93\x80\x98\x5b\xa5\x4d\xed\xdb\x8d\xcf\x23\x31\x4b\x98\x82\xa7\xf9\x96\x3e\x43\x17\xef\x57\x2f\x02\xe8\x0a\x01\x0c\xa4\x2c\x45\xb6\x63\xf4\x02\x2e\x2e\xbe\xc8\x8d\x12\xc8\x78\x4c\x90\xc0\xac\x33\x66\x8c\x44\xff\x5e\x1a\x0f\x08\x35\x4b\xd5\xa2\xbb\xc2\xe7\x10\xd0\xa1\x0b\x24\x99\x25\x7e\x4a\xc0\x14\xd4\x44\xa8\x6b\xdb\x7c\xed\xcc\xbc\x38\xae\x78\x92\x3b\x67\xe6\xb1\xce\x40\x78\x7d\x5f\xf0\x8c\x16\xca\x01\x29\xcb\x15\xfc\xc7\xe2\x73\x31\xcf\xb1\x67\x7c\x6f\x77\xea\xe3\x77\xbb\x6c\xfd\x5b\xe4\xcd\x6e\xf7\x0c\x16\x5f\xde\x7d\x15\x77\x7d\x0f\x55\x21\x30\x90\xb2\xa4\xc6\xae\x97\x38\x36\xa1\x92\x31\xc0\x15\xa5\xbd\x57\x4c\x3f\xfc\x5a\x4d\x18\x5b\xdf\x4b\x40\x22\x16\x9b\x2f\xad\x4a\x53\x17\xba\xe2\x05\x03\x29\x4b\xb5\x07\x28\x5a\xc5\x66\x72\xa5\xef\xc9\x68\xaf\xde\x8a\x5d\x60\xbe\x71\xfa\xf1\xe6\x59\x94\xe8\x28\x07\x92\x62\x64\x80\x50\x20\x54\x5d\xc1\x40\xca\x52\xf9\x12\x47\xf7\x40\xf4\x75\x30\xf9\x93\xbe\xef\x16\x0a\x73\x5a\xed\x0c\xcf\xd4\x38\x7b\x0a\x95\x44\x52\x59\xca\xe9\x32\xdb\xa0\x4a\x17\x06\x52\x96\xa5\x55\x26\x0e\x52\x03\x4f\x99\x23\x32\x86\x72\x6b\x64\x17\x9f\x3c\x68\x55\xe5\x1c\x6e\x3a\x6f\xfb\x24\xf9\x38\x33\x2b\xf0\x31\xdc\x40\x0e\x52\x96\x87\x0b\x35\xfb\xae\x2b\x63\x3f\x39\x8b\x4d\x8a\x6b\x3a\x7d\x78\x51\xf7\x6c\xf5\x43\x46\x1a\x9a\x9f\xb1\xb4\xbe\x59\x5b\x92\x80\x2b\x50\x40\xca\xd2\x3e\xf1\x8d\x69\x93\x15\x93\xeb\x37\x06\x74\xeb\x6a\x5d\xab\xc3\x76\x23\xc6\x0d\xa5\x0f\x7a\x30\x15\x8e\x2a\xf1\xe7\x46\xf1\xf0\x1c\x40\x9e\xff\xbe\x25\xe9\xc0\x09\x7d\x7a\x54\xde\x99\xfa\xa4\x01\xcb\xda\xd4\xbb\xc6\x35\xdc\xca\xeb\x39\x99\x41\xf4\xbb\x3f\xd8\x46\x42\x70\x03\x30\x48\x59\xf2\xbd\x6d\xb9\x73\xb2\xe3\x34\x95\xc3\x88\xba\xa0\x58\xb9\x33\xa0\x62\x7d\xbe\xdf\x67\x2c\x1d\x3f\x1b\xa7\xc8\x26\xa6\x71\x0b\x9f\x43\x40\x9e\x0b\x62\xc4\x26\x91\x7c\xbe\x91\x1c\x14\xc5\xb1\x93\x7e\xbc\xa9\x48\xb7\x80\x05\x09\xff\xf6\xcc\x21\xb5\x21\x44\xd0\x27\x7d\x0b\x57\x58\x80\x94\xe5\x5b\x0e\x01\x63\x93\x46\x93\x13\x0b\xd6\xeb\xc7\x23\x02\x1f\x2a\xb0\x75\x9a\xe5\xe3\x2a\xcc\xc3\x19\x46\x24\x6b\xb0\xb2\x77\xa1\x3b\xed\x60\x20\x65\x79\xc5\x0c\x3b\xb0\xd8\xf5\x8e\xf5\x95\x74\x45\x3f\x56\x22\xbb\x88\xbb\xeb\x11\x92\x7b\x4f\x7a\xf5\x7b\xee\x95\xc9\xd8\x93\x6f\xd0\x95\x2a\x18\x48\x59\x26\x26\xf9\x4f\x8a\x53\x7f\x2a\xe3\x75\x2d\xc8\x7a\x6b\xf5\x76\x5d\x19\xd3\x16\x47\xcb\xeb\x9a\xb5\x4f\x10\x9d\xff\xe4\x54\x80\x1f\x8e\x03\xc8\x73\x08\xf1\xae\xf4\x8f\x34\x5c\x8b\xe8\x46\xbb\x47\xe6\xe2\x0f\x0b\x6d\x76\x3c\x86\x25\x5f\x92\xf7\x21\x3c\x5b\x88\x7f\xfa\x3a\x1a\xae\x9d\x82\x94\x25\x6f\x4f\xb4\x42\xa0\x67\xd0\x88\x54\x3b\x1e\xaf\x77\x7e\x3b\x57\xbb\xfa\xeb\xbc\x9c\x6f\x34\xb5\x9a\x6f\xa9\x9e\x35\xb6\x51\xc2\xf5\xab\x20\x65\x59\x51\xcd\xac\xff\x1d\xa7\x0a\xab\x3f\x53\x08\xa1\xc2\xcd\x85\xba\xe1\xce\x23\xa0\xa5\x4c\xd7\x9a\x0f\x13\xfd\xfd\xd2\xc9\x37\xb8\xf6\x0e\x52\x96\x48\x71\xec\x21\xbc\x33\x55\xc7\x4c\x4a\x8f\x2b\xe8\xf5\x82\xd2\x9f\xe2\x15\x79\x53\xf0\x47\x31\xa2\xbf\x3a\x77\xd5\x55\xef\x82\x2b\x08\x40\xca\xf2\x2b\x46\xd9\x5c\x02\xee\x6e\x54\xc1\xe9\xc3\x46\x6b\xee\x1f\x21\x45\x3e\xc1\xfc\x13\x5d\x59\xbf\x93\x0d\xd8\x4c\xdd\xba\x83\xa0\x2b\xca\x30\x90\xb2\x74\x9a\xe0\x3a\x1f\x95\xdc\xe5\x38\x53\x95\xbe\x12\x32\xf8\x6c\x75\xf7\xf3\xaf\xc5\xaf\x59\x4e\x5a\xeb\xe6\xbc\xa7\x36\x53\x53\x70\xfd\x0f\x48\x59\xee\x6b\xa8\x04\xd0\x27\xa4\x71\x56\xc7\xde\x66\x89\x39\x46\x9d\x54\x06\x15\x84\x5b\xb6\x3d\x52\x22\xd0\xaa\x9c\x28\xf0\xb7\x81\x7b\x3e\x20\x65\xc9\x14\x9d\x93\xcc\x46\x65\x96\x5f\xc4\x1c\xf6\x54\x8b\xdf\xc5\xcd\xc2\x40\x17\xc9\x8e\xaf\x61\x3d\xf3\x98\xa4\x6b\xd9\x4f\x13\xaa\xbc\x61\xff\x28\xcb\xff\x29\x98\xfe\xb7\xbd\x71\xff\x5d\x30\x31\x63\xb4\x96\xfe\x1e\xfc\xc9\x98\xf6\x2b\x53\x46\x7b\x4f\xe8\x8e\x42\x96\x73\xfe\xdc\x23\x37\xa4\x31\x71\x06\xe6\x4d\x66\x0e\x9d\xd9\xc3\x40\x8e\xb3\x2a\xe9\x17\xe1\xc3\xed\x15\x13\x0b\x65\xb4\x14\x5c\x82\xbe\xbe\x99\xc0\x81\x9a\x9f\x81\xe7\xe8\x39\xc2\xa1\xf7\xdf\xd2\x25\x40\x97\xfe\x60\x20\xc7\xa9\xa0\x96\x41\xe1\x78\x73\x23\x6c\xc3\x1f\xaa\x52\x6b\xf8\xc7\x97\xce\xb1\xfc\xea\x71\xd5\xa7\x63\x07\x8a\xce\xfa\xb9\x55\x13\xa8\x2b\x85\x81\x1c\xe7\x31\xdf\x99\xf0\x0d\x6a\xb8\x75\xdd\xe5\x1f\xca\x6d\x1c\x05\xa1\x16\x22\x26\x0f\xff\x66\x58\xdf\x9d\x9b\x3a\x66\xab\xb5\x1b\xfc\xe7\x01\x75\xe8\xc3\x9f\x45\x3e\x39\x29\x48\x97\x60\xe1\xd2\x11\xae\x2a\x13\x3c\x6b\x13\xb5\x47\x3d\xda\x9d\xad\xd1\xdc\xb2\x74\x5c\x9e\xe6\x84\xe3\x00\x1a\x40\xa6\x4c\xc3\x28\x5a\x09\x5b\x31\x5f\xac\xd4\xac\x92\x09\xe6\x1f\x11\xac\xaa\xdc\x3f\x44\xfd\x04\xf9\x07\xf9\x84\x9c\xb8\x81\xd0\x2d\xc6\x30\x90\xb2\x4c\xb8\xee\xbe\x3a\x1f\x5a\xef\xf0\x5a\x87\x95\x3e\x2a\xfd\xa1\xe9\x88\x18\x87\x76\x94\x19\x6e\x3e\xb8\xde\x5d\x71\x4e\x74\x01\x55\x72\x30\x90\xb2\x9c\xbf\xfa\xed\xa2\xb8\xf9\xb1\xc7\x8d\x15\xa7\x56\x2a\xd7\xdc\xdf\xa3\x46\x6d\x7c\x57\xc4\x52\xee\x5b\xb2\x76\x21\x8d\x20\x12\x5c\x43\x02\x29\xcb\xca\xb5\x5e\xb4\x6e\x95\x0c\xb2\x09\x9e\x80\x77\x5a\x32\x03\xdf\xdc\x57\xfc\x60\xe6\x08\x3e\x09\x18\x0f\x2b\xc9\x53\x6e\x12\xe1\x0a\x4a\x90\xb2\xc4\x8a\x89\xc2\x9c\xe3\x38\x6a\x30\x88\xf3\x14\xac\x41\x61\xcd\x5a\xb4\xac\x35\x5f\x53\xa2\x3c\x7e\x6a\x9b\x47\x4a\xf7\x2c\x1c\x6e\x80\x01\x29\xcb\xa3\x09\xe2\x5e\x6f\xbd\x6a\x89\x07\x53\xfa\x16\x58\x42\xfe\xf9\x9f\x16\xdf\xfd\x8e\x0b\x79\x7d\xd4\xcf\xdd\x8c\xef\x36\x9d\x07\x57\x98\x82\x94\xa5\x5b\x18\xa6\x6c\xfe\x60\xda\x86\xbd\x8f\x7e\xf6\xcb\x47\x7f\x64\xf9\x23\x47\x82\x27\xf8\xf4\xa9\x5a\x69\x94\xcf\x7c\x0e\x1c\xa1\x5b\x83\x61\x20\x65\x79\x29\xc9\x81\x88\xe1\xbf\xbb\xcb\x7b\xce\xbf\x55\xd0\x55\xf9\xd2\x30\x4f\x55\xc1\xb3\xda\x9a\xcd\x5a\xc7\xbe\x98\x4c\xbd\x0b\xba\x02\x07\x03\x29\xcb\x4c\x91\x35\x7c\x4d\x05\x87\x45\x42\xfd\xfb\x45\x53\x8f\x89\x31\x3c\x69\x24\xf7\xbd\x30\xd6\x97\x4e\xbe\x1b\x8b\x7e\xb9\x21\x87\xae\x2c\xc2\x40\xca\x12\xb3\xc5\xc0\xeb\xa9\xca\x58\x27\x8a\x01\x6a\x7c\xe7\x7c\xae\xfc\xdc\xdd\xc8\x79\xee\xbe\xb2\xf6\x6e\xf1\x86\x0f\x6d\x03\x3d\xdc\x00\x0c\x52\x96\x04\xb1\xbf\xfb\x36\x7f\xa5\x29\x26\x39\x2a\xf3\xf0\xc4\xb9\x6a\x15\xf5\xcb\xfd\xe4\xc8\x5b\x74\x9d\x53\x49\xfe\xb4\xed\x41\x0d\x55\x96\x30\x90\xb2\x24\x70\xd6\xa0\x6a\x63\xa7\x21\x37\x97\x6b\x35\xa6\x0d\xbb\x96\xbb\x0d\x21\xdd\x8e\x3b\x0d\x25\x59\xda\xab\xe2\xe0\xc2\xf5\x83\xee\xb1\x80\x81\x94\xa5\xb2\xb0\x48\x5a\x68\xc7\x83\x79\xde\x58\xc7\x3a\xa9\xf0\xf9\x36\x8a\x26\x7f\x6b\x95\xbf\x76\x38\x0c\xc6\x13\xa3\x42\xac\x6c\x70\x13\x00\x90\xb2\x1c\x57\x56\x2d\x1a\x29\xe1\x91\x35\xcc\xe5\x4c\xbb\xa1\x8c\x61\x39\x09\x11\x36\x69\x0b\x54\xff\x5d\xb8\x7a\xe3\x4a\x31\x3a\x03\x55\x21\x30\x90\xb2\xec\x1f\xdf\x7b\x18\x26\x78\x5d\x75\xb3\xa5\xa4\xb5\x3a\xe0\x56\xa9\xff\x61\xd9\xc7\x5b\xee\xb9\x53\x68\xf5\x3a\xd2\xc7\xac\x24\xb8\x99\x3d\x48\x59\x22\xa7\x93\x1c\x60\x60\x61\xe9\x62\x7a\x73\xe6\xbc\xf0\x3a\x55\xac\xb6\x9e\x33\xb9\xd7\x74\xb0\xcb\x7a\x10\xcd\xc6\xd6\xb1\x01\x57\x58\x80\x94\xa5\xdf\x43\x24\x4d\x01\x57\xf7\x96\x7d\x7a\x7d\xfb\xa8\xd9\xfc\xd4\x6e\x17\x8f\xf7\x4c\xaf\xc8\x4c\x16\x4c\x6f\x7e\x28\xf5\x91\xc3\x7f\x1e\x40\x9e\xc7\xee\xa8\xc6\x75\x6a\x51\x4a\x72\x59\x57\x8d\x24\xc3\x88\x09\xb4\x7a\x78\x04\x98\x47\xf7\x36\x18\x73\x90\x9d\x52\xb0\xdf\x41\x95\x1c\x0c\xa4\x2c\x57\x9f\xe7\xc9\x7b\x3d\x95\xb2\x5e\x2d\xa3\xa7\x32\x5f\x63\x3d\xc9\x3a\x67\x16\x72\x11\x61\x7c\xf6\xed\x5d\x93\x76\x12\x66\x13\xfc\x7d\x01\xf2\x5c\x1a\xd3\xa5\xbe\x93\x3b\x29\xd4\x43\x30\xaa\xad\x92\xaa\xfb\xfa\xf0\x9c\xd7\x6e\x60\x67\x1b\x0b\x01\x4f\xa7\x77\x68\x76\x0e\x2e\xcf\x20\x65\x19\x5f\x12\xb6\xfa\x56\x90\x8c\x76\x12\x7d\x2d\x69\x20\xef\x97\x3f\x9d\x81\x84\x0d\x0f\xd2\x9a\x54\xc9\x4f\xe3\xa7\xb6\x7c\x73\xd0\xbd\x35\x30\x90\xb2\xfc\x9b\x27\xa2\x9d\x95\x22\x1a\xeb\xb2\xfa\xc7\x6c\x56\xb4\xbe\x87\x16\x93\x4c\xb7\x4f\xae\x40\xd2\x8f\x4a\xe8\x2c\x03\xd1\x0b\x9e\x03\xc8\x33\x16\xaf\x93\xa2\x7d\xd5\x86\xe8\x82\x78\x5a\x23\xaf\x95\xcf\x17\x26\x92\xa8\xe0\xd4\xae\x61\x79\xe4\x31\x29\xaf\x70\xc3\x6a\xb8\xc2\x1d\xa4\x2c\xdb\xaf\x74\x83\x29\xf5\x84\x33\x18\xca\x0b\x42\xd8\x1b\xec\x46\x89\xfe\xbc\x61\x79\x45\xad\xd5\xea\x9c\x26\xf0\xee\x0b\xa5\x3b\xdc\xc2\x01\x48\x59\x9e\x97\x7d\xb5\x30\x85\xb9\xa8\x49\xa0\x14\xe1\xa0\x51\x48\xea\xf4\x0b\x3c\x63\x6a\x22\x36\x9d\xd1\xf9\xf3\xfa\x4e\x9e\xfb\x39\xdc\x04\x09\xa4\x2c\x9b\xab\xb6\x4d\x34\x8f\x5f\x59\xa5\xa0\xf1\xab\xc9\x9e\x57\xcc\xe1\xa4\xff\x79\x63\xa1\x92\xb9\xda\x38\xf6\x61\xb6\x23\xef\x0f\xf4\x08\x11\x0c\xa4\x2c\x8f\xb0\x94\xd3\x08\x68\xfa\xf0\x79\x52\x4f\x9b\x1f\x35\x29\xf8\x59\xa7\xdf\x85\x76\x93\xf1\x71\xea\xe8\x4c\x1a\x30\x4d\x58\xc1\xd5\x2d\xff\x28\xcb\xff\x29\x98\xfe\xb7\x13\x02\xff\x5d\x30\x4d\xe7\xf4\xde\xd6\x3b\x84\x2c\x5d\x7f\x78\x70\xb5\x5c\x0a\x7b\x8e\x4f\xeb\x99\x4e\x92\xfc\x0a\xff\xcd\xa6\x50\x33\xc6\xcb\x42\xb8\x82\x00\xe4\x38\x59\x0a\x1f\xfc\xe9\x17\xc2\x4e\xf1\xf3\x93\xa3\x27\xa2\xe5\xde\xd2\xfe\xfd\xb9\x90\x6c\xd6\xdb\xe5\x8c\x42\x3b\xd6\x2c\x45\x1c\xea\x26\x61\x20\xc7\xa9\xdc\xc7\x89\x81\xea\x20\x25\x1c\xd0\x61\x6c\x27\x79\x7b\x1b\x49\x7b\x9c\x68\xad\x62\x92\xee\x4c\xa0\xa0\x7c\x72\x6b\x75\x08\xd7\xf1\x81\x1c\xe7\xcf\xc5\x3d\x9f\xa5\x10\x31\xee\x1d\xd7\x34\x17\x9f\x11\x94\x0b\xdf\x25\x56\xc6\x3f\xa1\x03\xa4\xb5\x16\x37\x86\x21\x6c\x0f\xee\xc3\x71\x00\x0d\x40\x6a\xc9\xe0\x2d\xde\xbe\xa9\x9e\xf7\x84\xda\x2b\xa3\xbc\xc1\xf3\x0d\x96\xb5\x90\x20\x6b\xba\x95\x31\x49\xb9\xfb\xe2\x8c\xd8\x70\x1d\x28\x48\x59\x9a\x6f\x29\x52\x9e\x18\x1e\xda\xa6\xba\x3c\xca\x51\x64\xac\xa3\x1d\xfb\xf0\x22\x25\xb1\x72\x08\xfd\xb2\xa0\xb1\x73\x57\x8d\x09\xae\xd0\x01\x1e\x61\x7e\xda\x98\xd6\xcc\x4d\x86\xd3\x7d\xc6\x33\xc6\x3f\xb7\xff\x08\xbb\x79\xc1\x47\xce\x59\x29\xd9\xfe\xcb\x70\x51\x37\xbb\x36\xf4\xac\x19\x0c\xa4\x2c\xa3\x6c\x3a\x3f\x2d\x4e\x61\x78\xad\x9d\xd5\xba\xfe\xbd\x25\xf5\xd7\x6d\x43\x62\xd0\x60\x3c\xc9\x16\x4d\x2b\xfa\x61\xf2\x21\x16\xba\x27\x06\x06\x52\x96\x03\xad\x66\x2f\x08\x07\x7f\x7a\x10\x49\x27\x77\x69\x6e\xc6\xc0\x02\xa4\x99\x3e\x0c\x1d\x04\x57\xf6\x46\x8c\x37\xec\x3e\x1d\x85\x2b\x04\x41\xca\x92\x69\x40\xeb\xe8\xb3\x46\xe9\xc7\xf7\x9f\x1a\x67\x45\x99\xf4\x5b\xec\xd1\xc2\x30\x9f\x4f\xc7\x22\x15\xdd\x7b\xf0\xb2\x1e\xa5\x1b\xae\x23\x06\x29\x4b\xe7\xb4\x74\x34\x0e\x5f\xbf\x81\x8f\x96\xc1\xa7\x3f\x2b\x07\x0f\xd2\x5b\x85\x8c\xc8\x48\x3b\xb0\x08\x57\x4c\x86\x2f\x4a\x36\xe1\xbe\x77\x90\xb2\x94\xc5\x86\xdd\xd3\xe1\x48\xed\x6b\x48\xd0\xef\xa4\x91\x69\xc7\x3f\xc5\xb8\x40\x3c\x13\xc0\xb4\x3b\xdb\xd9\x29\x0e\x2c\x0b\x80\x6e\xba\x84\x81\x94\xa5\xc7\x7c\x47\xba\xd0\xf5\xc4\x80\x38\x7f\x60\xbf\x35\x5b\xde\xa4\x2e\x5d\x41\xed\x4c\x2e\xb6\x9f\x51\xc8\xb2\x61\x2a\xc5\x3a\x74\x33\x32\x0c\xa4\x2c\x91\xdd\xcd\x7f\xe6\xab\xee\x13\xf9\x87\xd2\x8c\x67\x91\x4c\xdc\xfb\xa8\x72\x55\x45\x93\x64\x3e\xa2\xde\x34\xfc\xed\x2b\x93\x12\x5c\x41\x09\x52\x96\xaf\x46\x4a\xcf\x6b\xad\x93\x29\x7a\xe4\xd1\x55\x99\x69\xfc\x27\x8a\xde\x09\x99\x71\xe4\x2f\xef\xfa\xfb\x8c\xbf\xe3\x9d\x5a\x84\x9b\x48\x80\x94\xe5\x65\xd8\xed\x05\x4d\xd2\x3a\xcb\x93\xe8\x59\x3a\xe7\xbc\x52\x0a\xd1\xb8\xcb\xda\x75\x36\x9e\x1e\x8a\x3f\xbe\x6b\x0f\x92\xec\xe1\x3a\x3e\x90\xb2\xfc\x6b\xd8\xd4\x73\x22\xa3\x9b\x12\x89\xd0\xfa\xe5\x47\xbb\x7b\x3f\x53\x3c\x8f\x90\x48\x18\x12\x4a\x43\x63\x08\xed\xf6\xf3\x49\x68\x41\xc9\x07\x52\x96\x11\xa4\xe5\xb1\xf4\x21\x8a\x29\x47\x17\x2c\xb7\x0f\x75\xe7\x58\xc6\x94\xdd\xd4\x8f\x30\x86\x4f\x48\xf4\x8a\xa6\xaa\x6a\xb1\xa1\x67\xcd\xf8\x40\xca\xf2\x09\xca\x54\x67\xc2\x9b\xc9\x85\x91\x13\xdb\x72\xca\x43\x5e\xfd\x79\x19\x01\x77\x41\xe5\x16\x91\x30\x6e\x4b\xed\xcf\x6b\x63\xd0\xfe\x87\x0f\xa4\x2c\x43\x1f\x0e\x1f\x64\xf5\x8d\x98\x95\x58\x54\x6c\xdd\x34\x58\x6f\xcc\x20\x70\xaa\xdb\x13\x20\xd6\x39\x8c\x3b\x96\xf0\x64\x36\xc3\xdf\x17\x20\xcf\x5d\x7d\xd4\x37\x5b\xe7\xa7\x04\x71\x05\xed\x7e\xe6\x46\x84\x7a\xce\xb0\xdc\xc8\x93\xf7\xf7\x88\xf7\xed\xab\x11\x73\x39\xd5\xa1\x13\x48\x3e\x90\xb2\x6c\x49\xd5\x9f\x6f\x1b\x1b\xcc\x35\x26\x44\xad\x10\xcf\xf8\xab\x45\x26\x45\xc3\x70\x61\xbe\xc1\xd2\x9a\x1f\xb6\xe2\x86\x67\x09\x5d\x89\xe1\x03\x29\x4b\xcb\x21\xb5\x3f\x06\xd3\x08\x78\xcd\x1f\x53\xd9\xf7\x99\xc4\xbf\x74\x95\x56\x64\x47\x50\x69\x84\x51\xc5\xd8\xcf\xbd\x61\x6f\x83\xb6\x2f\x3e\x90\xb2\xac\x94\x14\xd6\xbd\xb0\xcd\x8b\x95\x6b\xfe\xeb\x5c\x89\xc1\x20\x3d\x80\xfd\x7c\xcc\xfe\x0a\x91\xb4\xa9\x7d\xcf\xf5\x9c\x69\x12\xba\x32\xcd\x07\x52\x96\x77\xf1\xaf\x61\x2d\xdf\x3f\x11\xac\xd1\xc9\xe0\xb3\xcc\xd9\x13\x31\xd0\x4f\x15\x39\x93\x46\xe0\xe9\xf5\xf3\xcd\xa3\x96\x11\x43\x0b\x6e\x3e\x90\xb2\xd4\x40\x3e\x88\x6f\x7a\xe9\xcc\xf7\x5a\x4f\x8e\x73\x2d\x36\x86\xee\x23\x61\xd5\x16\xee\x9f\xf3\x18\x14\xd6\x5b\xce\xde\xf1\x15\x68\xe1\xc5\x07\x52\x96\x9f\x64\x66\x26\x28\x99\x79\xfd\xde\x1a\xd5\x8a\x6c\xf6\x6b\x14\x6d\x34\x08\x58\xbe\xd6\x2b\x17\x10\xe9\x29\x9a\xfd\x95\xc8\x20\x0c\xe5\x80\x94\xa5\x1b\x11\x03\xd1\xb7\x04\x2e\x05\xff\x8b\x19\x8f\xcf\xec\xa8\x8b\x76\xf7\x53\x46\x49\x39\x44\xf7\x4c\x07\x77\x71\xa5\x0a\x2e\xe1\xbe\x77\x90\xb2\x94\xfa\x69\xb8\x2c\x9e\x6c\x24\x4f\xfd\x1e\xd9\xa1\x32\x5f\xd7\xee\xec\x3b\x8f\x0c\xbb\xa6\x60\xb5\xcc\xac\x8f\xe5\xcc\x27\x42\xa8\xb1\xe1\x03\x29\xcb\x39\xd9\x0e\x17\xda\x95\x63\x61\x76\xcc\x65\xcb\xef\x79\x27\x25\xbd\x3a\xad\x5a\x64\xc3\x9a\x37\x09\x97\x23\x63\x1a\x75\x13\x50\x45\xc8\x07\x54\x96\x1c\x18\x1d\x94\x32\xde\xfd\x45\xe5\x14\x56\x09\x94\x52\x04\x29\x0e\x8c\x0b\x7f\xc7\xe9\xe4\xac\xcd\xfe\xfa\xf6\x8e\x5c\x41\xfb\x43\x3e\x90\xb2\x2c\x0f\xdd\x4a\x1c\x72\xe4\x38\x47\xda\xd6\xf1\x9d\x78\xfe\x50\x38\xe9\xed\xc0\xd9\x07\xd3\x61\x2a\xcd\x85\xfc\xc7\xd1\xb4\xd6\xf0\xcf\x07\x7e\xd3\xf7\xff\x76\x4e\xf2\xbf\x0b\xa6\x77\xb0\x34\x19\xfa\xb2\x8f\x4b\xd3\x5c\x88\x1f\xdb\xd0\x98\x0b\x32\x7f\x60\x31\x4a\x7c\x7c\xfb\x46\xc7\xcc\x9d\xa8\x71\x7e\x1a\xba\xe7\x83\x0f\xe4\x38\xf1\x3a\x7e\xdc\x8e\x64\xbf\xb7\xae\x62\xc7\xea\x44\xb6\xd2\x5f\x33\x2f\x46\x74\xbe\x7b\x23\x53\xb1\x43\x8b\x21\x13\x48\x2e\x04\xff\xc5\x00\x1a\x80\xc8\xed\x14\xea\x77\x27\xa3\xb0\x26\xd7\x1f\x79\x09\x8a\x93\x39\xe3\xaa\xf6\x32\x0c\x29\x9d\xb2\xfe\x24\x7a\x84\x2f\x4f\xef\x43\x97\xd6\xf9\x40\x8e\xd3\xc2\x46\xb5\xf3\x8a\xd8\xf0\xa7\x3a\x51\x0a\x83\x51\x5b\x43\x34\xab\xb1\x51\xc5\x39\x2e\x9e\x37\xa7\xa5\xec\x10\x1f\x5a\x10\x74\xe9\x8f\x0f\x74\x98\xf9\x83\xab\xd2\x06\x9e\xf7\x9b\x8e\x91\xa8\xce\x6a\xf1\x88\xc3\x40\xe2\x47\x79\xeb\x3f\x1d\x2b\x18\xbf\x3f\xa9\xd5\xe3\x92\x2d\x87\xee\xd5\xe0\x03\x29\xcb\xfd\xa0\xdd\x0a\xb2\x30\x5e\xd6\x93\xf1\xf2\xc7\x4e\x66\xaf\x51\x5f\x44\xd9\x57\x9c\x97\x78\x64\x3d\x2f\xba\x9f\xd6\x7c\xfe\x0e\x5a\x58\xf0\x81\x94\x65\x4a\x9b\x49\x77\xea\x20\x03\xa2\xa6\x17\x66\x7f\x84\x7b\xb8\x6b\xaa\x16\x35\x69\xca\x5a\x98\xb4\x36\xcb\xc6\x1b\xe6\x76\x59\xe8\x52\x2d\x1f\x48\x59\x26\x1c\x6d\x84\x94\x67\x1f\xeb\x28\x2f\x31\x9a\x6e\xf1\x13\xda\x4c\xf3\x19\xac\x0b\xce\x24\x5d\x63\xb9\x37\x61\x3f\x29\xf3\x82\x0e\x78\x7c\x20\x65\xd9\xfe\xb1\xf3\xc9\x7d\x77\xce\x5f\x6a\xe5\xdb\xaf\x34\xb8\x9f\x97\xe1\xae\x8c\x33\x31\xe0\x86\x6e\x60\x57\x17\xbd\x2b\x25\x96\x84\x0e\xc0\x7c\x20\x65\xb9\x20\xda\xdf\xd6\x9f\x42\x9d\xe5\xd9\x38\xd5\xfd\x5a\x72\xb9\x71\x15\xc9\xbb\x70\xab\x10\xc5\xdf\x5a\xed\x19\xf5\xf8\x3c\x0d\x5c\x87\x0e\x52\x96\x14\x8e\x6c\xe3\x8d\x1f\xc8\xc7\x33\x1f\x69\xcf\xd4\x84\x48\xbe\x28\xeb\x4e\xe2\x89\x72\x8b\xfa\x14\xab\x60\x6e\xdd\xe5\x42\x02\x2d\x70\xf9\x40\xca\x92\x4f\x9e\x8f\xfc\xf8\xf5\xa7\xe3\x97\x71\xa9\xa5\x0e\x02\xf6\xbc\xf3\xea\x91\xd4\x74\x46\x82\xd4\x4f\xfc\xd7\x3e\x75\xe0\xf8\x42\x4f\x03\xf1\x81\x94\xa5\x25\xe1\x90\xa9\xd9\x9d\x56\x06\x7a\x7d\xfa\xb2\xfd\x21\xa5\x01\x39\xef\x4b\x2d\xce\xd2\x33\xf7\x13\x2a\x82\xe6\xbb\x0b\x73\xf8\xe7\x0c\xc8\x33\xa7\x48\x7b\xb8\x0b\x71\x31\x9e\xcc\xf4\x1b\x41\xc3\xbc\x38\x1e\x4c\x97\xc2\x32\x09\xd6\x0d\xac\xe8\x8f\x4c\x63\xea\xb4\x23\xd0\xbd\x23\x7c\x20\x65\x79\x9f\x65\x8e\xc9\x28\xaa\xec\xd3\x69\x47\x46\xee\xce\x90\x6b\x9b\xf0\x57\xca\x29\xd1\xdb\xbc\x0f\x65\x61\xfb\xba\x29\x86\x59\x70\xdf\x17\x48\x59\x66\x35\xe6\x2d\x35\x97\xc8\x2e\x3f\x70\x94\x6c\x3b\x59\x57\x8e\x98\x1b\xf1\xd9\x56\x3b\x52\x5a\xc6\x68\x8c\x51\xeb\xe8\x52\x86\x1b\x60\x40\xca\x72\xd5\x73\x5f\x9e\x72\x79\xe2\xe2\x13\x89\xee\xeb\xef\xb4\x4a\x29\x2a\x69\x91\x4c\x4d\xb7\xcf\x25\x50\x28\x7a\x68\xd3\x28\xc4\xa0\x33\x69\x3e\x90\xb2\xbc\x25\xd4\xe9\x26\xe3\xaf\x2f\xdc\x42\x9e\x3c\xb9\x14\xfb\x8d\x91\xd0\x9b\x1f\xc0\x54\x92\xd4\x49\xb7\xd4\x68\xab\x10\xb9\x0c\x55\x45\x7c\x20\x65\xa9\x4f\xd0\x5e\x1b\xf6\xae\xcf\xd5\xe6\x11\x89\x84\x99\xe5\xb7\x3e\xe3\x67\xb1\xca\x11\x9a\x3f\xf6\x56\x2d\x16\x1a\xd4\x9f\x12\xc0\x7d\x5f\x20\x65\xd9\xe0\x89\x94\xfe\x38\x8f\x6d\x55\x23\x23\xc4\xb6\xae\x84\x60\x05\x63\x43\xc9\x1b\xa5\x8c\x8e\xc2\xca\xb6\xfc\xee\x8a\x5d\x0b\x3a\x81\xe4\x03\x29\x4b\xee\xc8\x52\xae\xfb\x95\x79\x8e\x9a\x8f\x26\x6a\x3e\x4f\x1d\xa0\x75\x05\xdc\x4c\x6d\xb7\xa0\xda\x5b\x6b\x45\xc5\x07\x69\xdf\xc1\xdf\x17\x68\x45\x10\xd3\x77\x17\x15\x69\xb5\x51\xc5\x24\x6c\xc0\xed\xeb\x79\x1e\x4e\x4b\xd9\xef\x81\x9e\x59\xea\x70\x09\x6d\x9e\x97\x43\x66\xd0\x95\x06\x3e\x90\xb2\x8c\xb9\x4c\x90\x2f\x48\xc9\x37\x0c\x1b\xcf\x7b\x7b\x60\x95\xf5\x29\xb4\x5f\xe4\xe5\x06\x92\x18\xeb\x2f\x65\xd6\x1b\x49\x99\x48\xb8\x7e\x1e\xa4\x2c\x6d\x8f\x25\x84\x14\xaa\xb7\xc7\xee\xc7\x34\xbc\x8b\xb6\xb1\x1a\xbf\x72\xfa\xfe\x97\x4e\x27\x15\xb9\x73\xa0\x9f\x7c\xc6\x78\x1a\xfe\xf9\x00\xf2\x3c\xda\x3d\xb3\x83\x41\xdf\x61\x5c\xa8\x2f\x9c\xf1\x54\xa3\xc8\x25\x94\x3a\xf6\x45\xd5\xd1\xd3\xd2\xc9\xb3\x84\xc7\x37\x6e\x09\x70\x05\x1c\x48\x59\xd6\xd0\x65\xf7\x76\xd4\x4d\x68\x2f\x5d\x6e\xa0\x33\xbd\xf0\xae\x53\x5f\x78\x8c\xec\xac\xdd\x8b\x93\xbc\x8d\x14\x44\xfd\xa1\x0f\xba\x32\xcd\x07\x52\x96\xb8\xb5\x4a\xa5\xe1\xf7\x3a\x54\x32\xeb\x0e\xa2\x59\xee\x8d\xec\xd6\xe2\x78\xf0\xec\x8e\xb8\x49\x1f\x4b\xe1\x48\xac\x07\xf1\xc1\xb5\x53\x90\xb2\xd4\x90\x7d\xf2\xf6\xfd\x93\x65\x87\x44\x33\x9f\x02\xe7\x71\x14\x9f\xc5\x3c\xb6\xdf\x4e\xc8\xdf\x5e\xea\xd5\x3d\xbb\x6f\x9a\xa6\x24\x01\xc7\x01\xe4\x99\x0e\xbb\x6b\xed\x4c\x3a\x22\x74\x36\xa2\x83\xec\xa4\xdd\xa0\x74\xa5\xb8\x5d\x53\xfe\x3b\x1a\x0b\xf7\x2a\xcc\xe3\xe9\x88\x2f\x74\xef\x23\x1f\x48\x59\xa2\x3e\xc7\xb5\x0a\x52\xf0\x0d\xf1\xac\xb9\xf6\xb5\x34\xe8\x6f\x47\x7a\x26\xf2\x06\x6d\xe4\xdb\x6f\x6b\xd1\x72\xf1\x73\xeb\x6e\xb8\x71\x07\xa4\x2c\x0f\x71\xd1\x83\x5d\x6c\xb6\xa6\xa4\xfe\x1f\xf6\xfe\x32\x2a\xaa\xe8\x6d\x1c\xbf\x09\x09\x09\xe9\x46\xba\x4b\x65\x66\x40\x3a\x25\xa4\x43\xba\x44\x10\xe9\xee\xee\x94\x4e\x69\x90\xee\x4e\xe9\x90\xee\x6e\xe9\x54\xa4\x25\x7c\xd6\xfa\xdf\x6b\xfd\x64\xcd\x7c\xcf\xfa\xde\xef\x9f\xfb\x85\xef\x2e\xcf\x99\x33\xb3\xf7\x3e\xd7\xbe\x3e\xd7\x39\xec\x06\x95\xdf\x6b\x0f\x53\xc1\xf3\x56\x83\xc5\x94\xe3\xd0\xf1\x43\x57\x0a\x3f\xc3\x57\xc3\x24\x3a\x40\x64\x49\xc3\xd3\x43\xb0\x94\x89\x22\x80\xa7\x44\x8a\x13\x22\x81\x52\xf6\x9e\x6f\xca\x3a\x76\xd4\x52\xa7\x78\x2c\x23\xbe\x93\x92\x0b\xf6\xfb\x81\x6d\xfa\xfe\x6f\x6f\x8b\xf8\xcf\x09\x93\x72\xdc\x41\xb6\x99\xa1\x5d\x30\xf7\x4d\x6d\x8e\x39\x71\x33\xc2\x3e\xa1\xe0\xa4\x5c\xb8\xa1\x7d\xbc\x8f\x5b\xea\x60\x1f\x25\x74\x85\x89\x13\xc8\x38\x9d\x71\x1d\xcd\xb0\x7b\xea\xb8\x22\x94\x38\xc3\xb9\x0c\x41\x9a\xa0\x65\xea\xce\x1a\x2f\x27\xe5\x46\xb9\xef\x76\x70\xe5\xb8\xd0\x4f\x39\x71\x02\x19\xa7\x0b\xce\x37\x6d\x35\x83\x61\x86\x5f\x6e\x68\xf4\x07\x87\x99\xa6\x78\x72\xf8\xa9\x2d\x1a\x53\x89\xca\x09\xc7\xd4\xcd\x73\x6c\xd0\xcd\x65\x9c\x40\xc6\x09\x8f\xcb\x9a\x1e\xa5\xf5\xfc\x16\x9e\xde\x94\x29\xce\x44\x59\x7f\x99\x4b\x63\x4f\x73\xb5\x55\xef\xb5\x5f\xde\x61\x26\x13\x08\xe6\x07\x06\x7a\x2c\x93\xad\xdc\xfd\x13\xda\x7a\x79\x69\xa5\x78\x7c\x76\xf6\x01\xa6\x2a\xb1\x21\x5d\xad\x6f\x60\x3c\x3f\xb6\x82\x32\xd6\x45\x8b\x3e\x74\xe9\x98\x13\x88\x2c\x7d\x8e\xe9\x28\x07\x13\xfa\xe2\xcd\xdf\xd7\xf9\x4d\xad\x11\x78\xca\xdf\x31\x7b\x35\x55\xa4\x1e\xb1\xad\x8e\x09\x20\xc7\xfc\x80\xbd\x2e\x80\x09\x50\x15\x3e\xbf\xb3\x77\x2d\xfa\x7d\x2d\x96\xf7\xb7\x68\xec\x4f\x9b\xe2\x0f\xb5\xa2\x44\x9b\x18\xaf\x9e\xf3\x31\xd2\xf3\xbe\xd0\x83\x7e\x1c\x97\x13\x88\x2c\x27\x05\x49\x29\x97\x90\x22\xa6\x95\x95\x05\xbd\x7e\x78\x3e\x1c\xb5\x75\xad\xec\x53\xc9\xab\x35\x5e\x6a\xec\xad\x54\x2e\x9f\x41\xf7\xb2\x70\x02\x91\xe5\xd4\x97\xc0\xe5\x2a\xfb\x77\x7d\xb1\x1d\x7e\x25\x11\xe3\xa5\xb2\xfa\xcd\xfa\x2e\xb3\xcd\x5e\x5c\x6a\x66\xb1\x46\xd6\x1f\x9b\x61\x8f\x03\x30\x01\x18\xe7\x0c\xe2\x10\xd2\xdd\x7a\x7e\x94\xbd\x3e\x63\xcc\x73\xc9\x1a\xd1\xcd\xeb\x6a\x36\xb9\x2d\xbb\x70\x64\xe2\x14\x88\x79\x8f\x00\x73\x1c\x80\x05\x1d\xbd\x42\xd2\xbf\x6e\x84\x3d\x2b\xe4\xb4\x07\xc5\x50\xd1\xa1\xe3\x9b\x93\xbf\x41\x70\x44\xc0\x6d\xb5\x8d\x28\x87\xd5\x6d\x2b\xcc\x8e\x13\x88\x2c\x73\x09\x48\x44\xbe\x53\xfd\x29\x4a\x37\x47\x32\x2c\xe7\xfe\x16\x34\x2d\x81\x54\xeb\xaa\x80\x44\x89\x06\x77\x61\x4d\x5d\x83\x0f\xb3\x10\x03\x91\x65\x3b\x62\xb2\xfb\x7d\xa5\x93\xbd\x55\x9d\x1f\x5b\xf1\x54\x86\x3f\x11\x5b\xc5\x1c\x86\xb4\x0e\x22\xc6\xed\x5f\x82\x9f\xca\xe5\x30\x89\x17\x10\x59\x52\x04\x8d\x0c\x64\x44\x68\xe2\xdd\x94\x8f\x3d\xd1\x10\x28\x3b\x90\x79\xeb\x22\x1e\x4a\xa4\x8e\x21\x96\x2d\x8a\x1e\x7b\x18\x07\x33\x7e\x80\xc8\xb2\xa8\xb5\xfb\x30\xf7\x7d\xc8\xdd\xbb\x18\xec\xbb\x5c\xa7\x74\xae\xcc\x2f\xa0\xf8\x27\x28\x83\x48\x33\xe4\x35\x84\x1c\x1e\x9d\x30\x37\x06\x20\xb2\xfc\x15\x77\x14\xa5\x74\x71\x22\x23\x50\x4b\x16\x08\xaf\x30\xa4\xc4\x8a\xb1\x3b\x14\x73\xfc\x90\xce\x9a\x15\xc9\xf8\x8a\x9e\x19\xba\x89\x98\x13\x88\x2c\x95\x9e\xcd\xad\xbc\xf1\x49\xb1\xb1\xd4\x1e\xbb\x8f\x08\x08\x38\xd5\x64\xc5\x9d\x1d\xe8\xd7\x35\xda\x12\xfa\xfb\x62\xe8\x8a\x13\xba\xf7\x91\x13\x88\x2c\x5d\xdf\xfd\x08\xb6\xb7\x72\x8f\xf2\x75\x57\x20\x78\x3a\xda\xfc\x59\xf7\xe1\x30\xea\x73\x19\x19\xdd\x4a\x6b\x4e\x6c\xda\x68\x35\x4c\xa2\x0c\x44\x96\xbc\x45\x3f\x55\x2d\x9e\xe5\x63\xc4\xc1\x8d\x1c\xfa\x28\xf0\x13\x1e\x5f\xac\xf7\x57\x9d\x57\x1a\xfe\xf1\x0f\x1e\xc1\x48\x9c\x84\x7e\xfa\x8f\x13\x88\x2c\xf3\x4a\x25\xd7\xbd\x1c\xb7\xc4\x12\x5e\xab\xad\xf9\x5c\x8c\xaa\x7d\xec\xc0\x6c\xce\x8f\x28\x7c\xa0\xb8\x2e\x0b\xc8\x36\xc8\x80\xfd\x3c\x00\xe3\x59\xb4\x08\x31\xb1\x76\x23\x7a\xf7\xb7\xdf\x08\x79\xed\xeb\x28\x1e\x7f\x51\xd9\xd2\x27\x41\xea\xdd\x1f\xe8\xfa\xb5\x5e\xd4\x21\x40\xbf\xd6\x84\x13\x88\x2c\xed\x1c\x87\x6f\x0c\xd0\x6e\x37\x98\xc8\x47\x95\x29\xb4\xeb\x15\x7f\xa7\x71\xe2\x65\x04\x08\xd7\x9e\x7e\xab\xae\xfd\x22\x74\x0c\xb3\x61\x03\x22\xcb\xbe\x97\x89\x99\x8c\xbf\x88\xdf\x70\x84\xd5\x6f\xc7\x39\x08\x89\x68\xec\x33\x48\xe3\xda\x5f\xee\x05\x34\xe5\x54\x26\xcb\xf2\xc1\xdc\x80\x81\xc8\xb2\xd6\xfb\xd9\xd3\x8d\x1f\x6e\x77\x4b\xa8\xd4\x7b\x7f\x6f\x3d\x89\xc5\x2d\x5b\xb9\x0b\xd2\x64\xc6\xdf\x7c\xa3\x2f\xc0\x7d\x4e\x05\x93\x98\x02\x91\x65\xda\xb7\xfc\xf7\x62\x77\xb3\xae\x99\xeb\x9b\x8e\xb2\x8e\x76\xa7\x65\xa3\x95\x65\xd7\xf5\x3a\x2f\x2e\xd5\x6e\x90\x4c\x86\xcb\x60\x36\xfc\x40\x64\xa9\xff\xba\xa9\x94\x1e\xae\xa9\x3c\xa5\x87\xe7\xd7\x22\x0d\xa5\xf7\x04\x42\x08\x79\xa1\xfb\xaa\xfa\x7e\x86\x82\x9e\x10\x46\x27\x74\x05\x97\x13\x88\x2c\x69\x8e\xb4\x16\x8c\xd2\x7d\x25\x75\x6f\xca\x6a\x3c\x11\xa2\xbe\x79\x9a\x46\x84\x59\x19\x1d\x2c\x4f\xb6\xb1\xde\xf9\xdc\x22\x42\xbf\x4d\x8d\x13\x88\x2c\xb7\xab\x33\xc8\x3f\xe3\xf8\x90\x2a\xa3\xa8\x17\x84\xb8\x65\xaa\x0a\xbb\x2a\x30\x2b\x3e\x5c\x9b\x61\x7e\xcb\xf8\x5d\x71\x3c\x05\x4d\xa8\x9c\x40\x64\x49\x61\x68\x85\xbf\x45\xb9\xaa\x8c\x23\x74\x70\xc2\x38\x83\x52\x55\x73\x37\x4b\x47\x1e\x3b\x7d\x9c\xe0\x68\x79\x86\xdd\xdd\x08\xb3\x21\x01\x22\xcb\x51\x9a\x6f\x9f\x16\x8e\xbb\x18\x9d\xe2\x0b\xbe\x72\x9a\xb9\x55\x44\xd2\x94\x74\x85\x28\x8b\xc1\x27\x31\xfc\x46\x91\x89\x70\x86\x59\x0f\x81\xc8\xf2\x59\xed\x50\x28\x5d\xd0\xf9\xcf\x84\x38\x3e\x71\x05\xaf\x42\xca\x41\x96\xb6\x91\x16\x3a\x3c\xc8\xd7\xb5\x18\x6b\x5a\x91\x61\x98\x84\x12\x88\x2c\x9d\x72\xa3\x1d\x5a\x4e\xaf\x8d\x43\x07\x3b\x6b\xd3\x98\x3d\x9d\x6e\xa4\x44\xd5\x10\x79\x4e\x8c\x25\xc8\x7d\x7d\xfd\x96\xf5\x60\x0a\x22\xdc\xb0\x4d\xdf\xff\xed\x9d\x59\xff\x39\x61\x9a\x63\x0b\x9d\xd1\x7f\x8d\xe2\x74\xe5\x6a\x58\xed\x45\x27\x06\x67\xa7\x7f\x4e\xcf\xa2\x7c\x80\x84\x37\x3a\xe9\xd9\xa7\x7d\x01\x93\xe9\x03\x19\xe7\x49\x5b\x85\xd5\xcd\xe2\x15\x04\x7f\xe1\x03\xfb\x64\xfe\x71\x94\xb1\x63\xf2\x9b\xe7\x7f\xf6\x67\x71\x5f\x97\x87\xf0\xf3\x6d\xc0\x94\xda\x80\x8c\xf3\x73\xe0\x0b\xff\xeb\xfb\x11\xe2\xb8\x30\x11\xc2\x06\xc7\x6a\xe7\xd7\x4c\xfa\x3c\xc1\x86\xf4\xfe\xef\xe3\xb7\x03\x3f\xd6\x97\x41\xdb\x24\x27\x90\x71\x7e\xb9\x1d\xee\x34\x14\xde\xa3\xf6\x08\x22\xa8\x3c\x4d\x12\xc9\xa7\x8c\xf0\x72\x7e\x97\xab\xfe\x19\xf5\x9c\x00\x52\x39\xcc\x00\xb3\xf0\x01\x3d\x96\x19\xca\xf6\x21\x08\xad\xbd\x70\xe5\x39\x46\x72\xf6\x38\x1f\xa2\x43\x12\x06\x99\xee\x55\x36\x85\xd3\x40\xf2\x87\x03\x34\x51\x11\x98\x4c\x16\x88\x2c\x2f\x8a\xe3\x71\x6a\x26\xe8\xdb\xe8\xe8\xf1\xce\xaa\x76\xaf\x65\x46\x2a\x3e\x11\x14\x5e\xa9\xb4\x62\xd2\xb4\xbf\xa9\x8d\xf1\x86\xd9\x91\x03\x91\xe5\x6f\xc1\x40\x9c\xbf\x4e\x8b\xcf\x1e\xb4\x8f\x20\xb1\xeb\x0d\x6d\x3e\x7c\xb3\x70\x74\xed\x16\x4d\xb6\x63\x22\x61\xd2\xb5\x3d\xd0\x24\xc7\x09\x44\x96\xc7\x6d\x5f\x63\x57\x51\xbe\xc6\x42\x8c\x82\x32\x1a\xb9\x8d\x39\x8e\xe7\x58\xbf\xbb\x91\xb1\x4a\x2e\x57\x9e\x79\x6d\x8e\x55\xc2\xdc\xa8\x80\xc8\x92\xb2\xfa\xa3\x52\xe9\xe1\x70\x6f\x50\x6b\x3c\x67\xdb\xa7\xa5\xd9\x0f\xe3\x03\x93\x3f\xf8\x82\xb0\x38\x06\x71\xe6\xa9\x9b\x7f\x42\xf7\x42\x71\x02\x91\xa5\xa3\xeb\xa6\x36\x43\x0b\x53\x14\xb5\xec\xd9\x58\x3e\xf2\x55\x12\xbd\x36\xb9\x6f\x77\x90\xcf\x1c\xf6\xeb\x1c\xb2\x66\xed\x62\x98\xc4\x1d\x88\x2c\xc7\x76\x96\x11\xce\xe2\x46\x58\x85\x26\x17\x62\xf6\x44\x39\x70\x4f\xbe\x15\x1a\xbe\xbd\x0a\x40\xad\x94\x54\xfc\xa6\x4f\xf7\x0b\xba\x39\x91\x13\x88\x2c\xc5\xab\x1c\x2e\xb6\xab\x4d\xb2\x8e\x20\x0e\xbc\x4f\xdd\x07\xad\x11\x8f\x6e\xc6\xdc\x4a\x84\x63\xdf\x7c\x36\x2e\x1f\xf0\x8a\x85\x6e\x2a\xe4\x04\x22\xcb\xf9\x64\x9e\x3a\x3e\x82\x7d\x8d\xf1\xf3\xa5\x11\x16\xa9\x3b\xe5\x0f\x3f\x87\xc9\x0e\x7b\xae\xfc\x47\x5f\x18\x15\x8d\x90\x4f\xc0\xd0\x03\x10\x59\xe6\x22\x9a\x31\xef\xd9\x6c\x82\xb1\xcd\xdd\xb7\xc1\x83\x83\x6d\x38\xf8\xd4\x04\x7e\x37\xb5\x11\xc9\x2e\x67\x7d\x44\x46\xad\xd0\x4d\xa9\x9c\x40\x64\xa9\x2f\x67\xf2\x39\x2b\xc8\xf8\xe8\xb7\x81\xbf\x2a\xbc\x60\x5b\x9b\x7f\x20\x82\xd6\x79\x7d\xde\x2c\x02\xf6\xcb\x66\x73\xdc\x44\x68\xfa\xe4\x04\x22\xcb\x0f\x09\x8a\x4c\xd5\x2e\x2d\xd7\x29\xa9\xaf\xdf\x9d\xf2\x86\x51\x71\xb1\xde\x8e\x11\xf9\x42\x98\x45\x44\xea\xef\xa2\x28\xad\x60\x6e\x9c\x40\x64\x39\xb7\xf9\x9e\x93\xf0\x34\xba\x95\xe0\x13\x9b\xd6\xef\x73\x35\x2b\x43\xfa\x07\xc5\xfa\x27\x4f\x48\xab\x27\x57\x09\x9c\x34\x9c\x61\x2a\x1f\x40\x64\xb9\xbb\xae\xe4\xd0\xbd\x41\x54\x9e\x35\x59\x6c\x7b\xea\x30\x35\x3c\x19\x1d\xf4\xca\xf5\xb9\xfe\x93\x02\xd0\x9d\xed\x32\xd2\x1a\x34\x31\x73\x02\x91\x65\xff\x37\x05\xc6\xee\xb5\x34\xb9\x53\x42\x13\xf8\xf0\xd0\xd2\x27\xc5\xe3\x1b\xd9\x9b\x74\x29\x4f\xdb\x70\x6d\x88\x18\x90\x7d\x61\xe6\x05\x10\x59\x16\xaa\x4f\xf3\xce\xb5\x2a\xb8\x52\xb3\x78\xe8\xa6\x68\xcd\x50\xf7\x77\x77\xb2\x99\xe9\x77\xef\x23\x09\x56\x51\x17\xf2\x8d\xc1\xdc\x60\x80\xc8\xb2\xe9\x96\x6d\x78\xfb\xc0\x50\x22\xd4\x4f\x2e\x52\x00\x59\x4b\xa3\xeb\xea\x62\x67\xa1\x28\x45\x5a\x17\x3b\x2b\xe9\x83\x79\x0e\xf4\x7a\x08\x02\x22\x4b\x56\x37\x7e\x46\x13\x73\x06\xf2\xdb\xde\xa4\x78\xbe\xea\x4b\xe3\x8d\x8c\xf3\x05\x04\xc4\x2b\x25\xd5\x7a\x7b\x65\xad\xc2\x63\xe8\x0a\x2e\x08\x88\x2c\xf7\x4d\x8b\xe9\x55\xef\x02\x34\xbc\xaf\x45\xcb\x83\xd2\xfd\x0c\x4e\x26\xd2\x8f\xf1\xfe\x54\x47\xd7\xa7\xaf\x10\xeb\x0c\x82\xa0\x37\x90\x20\x20\xb2\xec\x08\xfa\xed\xad\x6f\xd9\xdd\x4b\xb5\x9b\xcf\xfa\x2b\x13\xc5\xdb\x80\x24\x82\x45\xf0\x89\x96\xfb\x95\x15\xc6\x4f\xf4\x54\x77\xe8\x26\x74\x10\x10\x59\x4a\xcc\xa6\x78\xa4\x6a\xb4\x05\x63\xf5\x5f\x8a\xd3\x24\x88\x40\xdc\xef\xe9\x20\xa3\xe9\x4d\xa9\xe4\xb2\x95\x2d\xbb\x6f\x17\xa1\x29\x16\x04\x44\x96\x57\x31\xe2\x8c\x2c\x59\x38\xb9\xe5\x0d\xe5\x53\xe5\x1b\x0d\x60\x91\xc8\x5d\x6c\xb7\xee\x54\xfe\x2d\xf3\x6f\x21\x4b\x94\x71\xd0\x95\x33\x10\x10\x59\xb6\xa7\x7f\x0f\x9d\xdb\xbe\xba\xa9\xd8\x1e\x1a\xbe\xfe\x59\x94\xd4\x1c\x4f\x6c\x2d\x5e\x55\x25\x2e\x91\x53\x38\x31\xf6\x92\x1d\x3a\xc1\x05\x01\x91\xe5\xec\x26\x57\x83\xda\x6b\xe4\xde\xfb\x5f\xc1\x9a\x2f\xb5\xf5\x55\x1c\x0b\xe0\xe6\xe4\xce\x27\x67\xbb\x57\x5d\xa6\x38\xd8\x29\xa0\x49\x17\x04\x44\x96\x4e\x01\x8d\x0c\x7d\x23\xe8\xb8\x55\x18\x4f\x54\xdc\x07\x2d\x15\x1c\x6a\x1a\xd3\x27\x4d\x7d\x0e\x1a\x1d\xd5\x6c\xd0\x6b\x6a\xa0\x5b\x0b\x40\x40\x64\xb9\x4a\xe7\xf5\xf5\x2e\xad\x7a\xee\x9c\xf4\xf7\x01\x53\x1b\x41\x44\x83\x28\x46\xe7\x81\xb7\x78\xc4\x5c\xa0\x63\xd4\x34\x9b\x12\xec\xef\x05\x30\x9e\x71\x88\x58\x35\x87\x87\xeb\xc7\xfd\xb2\xd4\x47\x73\xcd\x8d\x0d\xc8\xd3\xa4\x4d\xa9\x7a\xd4\x8b\x1a\xd9\xe6\x96\x4b\xa2\xb9\xa1\x7b\x31\x41\x40\x64\x69\x2c\xd1\x8f\xec\x6e\x7b\x29\x34\xf6\xe7\xcf\xa2\xd0\xac\xe9\x4b\xa1\x9d\xf9\x1a\xb7\x7d\x1f\x48\x7f\xdb\x3b\x2f\x1d\xb7\x3d\xe8\x8d\x1f\xe8\x15\x6c\xd3\xf7\x7f\x7b\x73\xe8\x7f\x4e\x98\xf2\x66\xd8\xdf\x51\x14\xb2\xf2\xd2\xe2\x5f\xe8\x5d\xe5\x8b\xa6\xd6\x10\x2e\xfe\x7e\x5e\x59\x0a\xff\xad\xc8\x92\x56\x46\x6d\x0a\x7a\x67\x0f\x02\x32\x4e\xb7\x35\x29\x55\xab\x09\xec\x93\x57\x77\x66\x8b\x1f\xd6\xfd\xcb\x2b\x0c\xff\x84\xcc\x2a\x38\x5d\x2f\xed\xdc\xde\xf4\xeb\xa5\x40\xf7\xe8\x80\x80\x8c\x73\x7c\x2a\x1d\x21\x50\xf5\xb7\xdb\x0b\x4f\xe4\x17\x76\x02\x74\x37\x06\x9e\x94\x3c\x11\xa4\x0a\x46\xe7\xb4\xd2\x69\x43\xb7\x24\xd0\x3b\x0f\x10\x90\x71\xea\x2c\x60\x10\xaa\x55\x5b\x5e\xf4\xfd\x89\xf0\xee\xd6\x7d\xe1\x1d\x83\x68\xea\x85\x67\x80\x6c\xa6\xd2\xf2\x69\x4b\x8f\xbc\x07\x3a\xd1\x01\x01\x3d\x96\x19\x99\x0c\x66\xdb\xdb\x5f\x39\xb7\xa6\xe3\x90\x27\xc6\xf8\x85\x5c\xfb\x9d\x9d\x14\x34\x8d\xc9\x13\x84\x31\x46\x87\xa4\x9c\x0b\xdd\xd3\x00\x02\x22\x4b\x11\x5c\x9d\x21\x2b\x4a\x25\x10\x3a\x7c\x3a\xf1\x41\x62\x4e\xe8\x2d\x15\x67\xbe\x9e\x2a\xdc\xc4\x3b\x45\xbc\x30\xaa\xc0\x55\xd8\x81\x02\x30\x01\xa2\x99\x66\xc9\x19\xad\x72\xa6\x5a\x47\x9f\x76\xeb\x4b\xaa\xc7\xb3\xe0\xb5\x9a\x42\x96\xf7\x28\x1b\x86\x8d\x31\x69\xe0\xbb\xa0\x13\x5c\x10\x10\x59\xbe\xa2\x7e\x25\x0c\xcf\xfa\x54\x75\xe7\xe6\xcb\x66\xe1\xe9\xd3\xb0\x17\xba\xbb\xeb\x0d\x35\x8c\x86\x6e\xf7\x9e\xd5\x24\xd9\x08\xd0\x37\x3c\x10\x10\x59\x8a\x71\x14\x22\xa5\x1a\x16\x36\x2a\xe5\x4c\xa8\x60\x38\x39\x8f\xae\xc8\xdc\xa3\x87\x48\x91\x81\xb6\x24\xa4\x1d\xa3\x59\x64\xa1\x6f\x54\x20\x20\xb2\x64\x60\xca\x25\x90\xf4\xfd\x7a\xdc\xb6\xa9\x31\xcd\xf9\xa3\xaf\x87\x9b\xe7\x3b\x3f\x96\x50\x46\x77\x82\x56\x39\xa6\x61\xfd\x14\xf4\x8d\x0a\x04\x44\x96\x96\x9c\xce\x9a\xc5\x08\xa4\x04\xf3\x95\x89\x34\x36\xf2\xac\x31\xe1\x1a\xd6\x6c\x0c\xa8\xf0\x26\x47\xdd\xad\x94\xda\x38\xc4\xd0\x95\x45\x10\x10\x59\xe6\xf7\x8b\xbd\x25\x6d\x63\xce\x18\x24\x3d\xde\xb7\x73\xe8\xa2\x21\xd9\xa3\xd7\x75\x6d\xf0\xff\x35\xd8\x81\x9b\xbc\x63\xf1\x0d\xba\x17\x01\x04\x44\x96\xdc\x58\x36\xe7\x66\x0f\xbd\x8b\x01\x62\x43\x08\x83\xe2\xfc\x73\xed\xfc\x52\x14\xea\xc6\xe8\xb9\x36\xa6\xa9\x63\x4f\xfc\x7e\x40\x6f\x24\x40\x40\x64\x19\x58\x54\xed\x74\xfb\xb9\x27\x32\x90\xf0\x42\xa3\xc7\x73\xd5\xb4\x83\xf3\x99\x52\x2d\x3f\x23\x1a\x93\xff\x00\xf3\xf2\x8a\x24\x74\x29\x1b\x04\x44\x96\x9e\x38\x3f\x27\x88\x2a\x3d\xb2\x84\xc2\xb6\x15\xf3\x22\xbf\xe5\xbc\xf8\x1d\x51\x62\x11\xcc\xe3\x14\x1c\xa9\xcd\x32\x27\xea\x0d\x9d\x30\x81\x80\xc8\x32\x30\x14\x55\x80\x39\xa8\x87\xa7\x64\x63\x5b\xf6\xd0\x4d\x69\x83\xa7\xa3\x37\xc6\x47\xf9\x43\x1e\x1c\x9d\xe3\x0b\xe7\xa4\x6c\x98\x1b\x27\x10\x59\xde\xa0\xfb\x30\xe9\x7d\x26\x8f\xdc\x72\x27\x20\xb7\x69\xed\xaf\x5c\x3d\xb2\x3b\x57\x70\x27\xf2\x71\x3e\xdf\x39\xa9\x97\x09\x84\x3d\x0e\xc0\x78\xce\x00\x15\xa3\x07\x99\x4d\x0d\xd3\xd8\xca\x7f\x6d\x8f\xb4\xb5\x02\x85\x88\x4f\x04\x9f\x3c\x6d\x20\x80\x4f\xfa\x49\x2a\xb9\x08\xfd\x94\x25\x08\x88\x2c\x3d\x35\x8b\x43\xbc\x38\xef\x36\xf0\x7b\x90\x1b\xcc\xc8\x59\x48\x1a\xd6\x1a\x73\x74\x6f\x33\x71\x2c\x41\x22\x7e\xdc\x72\x5f\x61\xc6\x33\x10\x59\xda\x68\x7e\xf1\xd8\x9c\x3d\xbe\x6e\xd2\xad\xb4\x71\xba\x9e\x10\xca\xf3\x9c\xfe\xe2\xbd\x48\x15\xc0\x86\x43\x35\xc1\xa1\xac\x03\x33\x4f\x81\xc8\xf2\x3d\x96\xa5\xa1\x2a\xd1\x69\xb5\x37\x9a\x8c\x01\x53\xed\x7a\xc7\x86\x91\xaf\x2b\xaf\x2d\xae\xd6\x67\x48\x32\x92\x2d\xa2\x0f\xf4\xc3\x07\x20\x20\xb2\x94\xbb\xb3\xc1\x92\x29\x58\xaf\x1a\x89\x36\x51\xe0\x52\x34\x59\xda\xcb\x1c\x6f\xd1\x78\xaa\x65\x81\x4a\xea\x76\xf9\x4c\xfe\x06\xba\x07\x05\x04\x44\x96\xa4\xad\x6a\x0c\x89\xdb\xca\xf1\x77\x8d\x16\x17\x77\xca\xcb\x59\x3e\xb8\x61\x93\x8d\x3f\xdb\xee\xdd\x3b\xdd\x74\x6f\xd8\xd6\xa1\x2b\xb8\x20\x20\xb2\x4c\x9a\x18\x93\x3b\x77\xac\x21\x9d\xd1\x4f\xe8\xfc\xf5\xd6\x97\x9c\x40\x46\x66\x54\x78\xed\xcd\x81\x4b\x7b\x00\x41\x6f\x20\x2a\xcc\xef\x05\x44\x96\x26\x95\x1c\x7b\x44\x7f\xd6\x04\x64\xce\xff\xca\xca\x1d\x56\xab\x96\xef\x76\xf9\x05\x73\xd8\xd7\xba\xd6\xcd\xee\x47\xf7\xab\x42\x57\xce\x40\x40\x64\x79\x15\xaf\x88\x34\xb9\x7a\xad\x27\x11\xb8\x5f\x95\xea\x9d\x25\xb0\x50\x85\xa8\x9a\xb8\xf0\x0e\xe4\x1a\xc2\xb6\x45\xa4\xfc\x17\x3a\xc1\x05\x01\x91\xe5\xcc\x57\xc4\xa8\xdd\x63\xbd\xf4\xfc\x2e\x93\xdb\xf9\x65\x2e\x0b\x59\x13\x9b\xa9\xc3\x50\x31\x2d\x3c\x70\x3f\xd9\xe6\xed\x0e\xcc\x3a\x0f\x44\x96\xed\x68\x72\x92\x0e\x84\xc1\x48\x1c\x58\x1a\x1b\x8c\x22\x58\xfb\xfe\xa6\x64\xee\xb5\x05\xe5\x85\x96\x57\x6c\x24\xb2\x9a\xb4\xd0\x74\x0e\x02\x7c\xca\x92\xd0\x4e\xee\xe3\xbe\xca\x42\xf7\xd1\x0e\xcf\x56\x13\x7a\xa6\xf0\x4c\x17\x41\xd4\xaa\x2a\xc2\x36\xaa\xe2\x21\x96\xf4\x1a\xb4\xfc\x80\x80\xc8\x52\xda\x9f\xe5\x53\x5f\x55\xf7\x18\xfd\x97\x67\xbf\xb9\x33\x0a\x4a\x17\x3e\x48\x4c\x56\x20\x33\xfe\x60\xfa\x44\x95\x2f\x23\x6f\x04\x5d\xd1\x01\x01\x91\x65\x28\x8b\x4d\x7a\x94\xc8\x5c\x4a\x27\x4d\x84\x5c\x88\x20\x2a\xbe\x05\xde\xeb\x45\x33\x5f\x79\x0f\x11\x25\x44\x83\x6b\x43\x07\xd8\xe3\x00\x8c\xe7\x96\x0b\xdb\xb2\xa6\xcc\xda\xf6\xe3\x67\x7f\xa9\xbc\x13\x14\xdb\xce\x24\x04\x84\xa7\x65\x41\x39\x06\x74\xab\xa4\x0d\x7f\x27\xa1\x37\xd8\x20\x30\x6c\xd3\xf7\x7f\x7b\x7f\xfa\x7f\x4e\x98\x08\xde\x05\x9f\xf2\xf6\xa7\x63\x08\xc6\x1b\xf4\x4a\x8b\xcf\x58\xc2\xf1\xf6\x3b\xc4\x8e\x41\x0e\x8b\xb6\xda\x3a\xe7\x6a\xb6\x60\x4f\x0c\x30\x01\x64\xf9\x34\xd1\x99\x9c\xd6\x6e\x3f\x16\x19\x6d\x18\xbd\x1d\x9f\xca\xb9\x0e\x1b\xe9\x7e\x6d\x4d\x18\xf6\x66\x36\x4c\x83\xd6\x04\xfa\xe9\x00\x10\x90\x71\x72\xca\x30\x0c\x9e\x8e\xdf\x7f\x30\xa3\xfd\x39\x27\x6a\x15\xcc\x13\x4d\x43\xcf\x44\x5b\xd7\xe2\x93\x2f\x96\xa9\xfa\xec\xf3\x06\x74\x65\x08\x04\x64\x9c\xf5\x17\xa3\x92\x76\x98\x56\x6c\x9b\x6b\x21\x97\x08\x94\xbc\x13\x63\xb3\xbc\xe2\xf0\x28\xc4\x9d\xe5\x7d\xdc\xb1\x13\x6a\x70\xd0\xef\x7b\x00\x01\x3d\x96\x19\xc6\x6a\xc5\x20\xb8\xfe\xf6\x67\x43\xa6\x87\xba\x26\x97\xd9\x69\x2d\x95\x1c\xdc\xc1\xc5\x76\x84\xe1\x32\x93\x79\x64\xe7\x33\x98\x44\x10\x88\x2c\x13\x7f\x84\x8d\xa0\x4a\xd3\xae\x90\x62\xe0\xf3\x5f\x0a\x88\xda\xa0\x87\x06\x4d\x72\x14\x62\x8f\x98\x90\x54\xa6\x1c\xcb\x93\x40\x57\x1a\x40\x40\x64\xf9\x3b\x24\x41\x0b\x37\xad\xfe\x73\x32\x45\xfc\xa8\x0a\x52\xa3\xd7\x6d\x8b\x2d\x9b\x8c\xe9\x98\x93\x63\x1a\xa4\xe8\x57\x1d\x2b\xcc\x80\x03\x22\xcb\xe7\x37\xcd\x89\xf4\x5e\xab\x4c\x8e\x84\x24\xae\x88\x74\xef\xfa\xc2\x41\x84\x46\x6c\x24\x3e\x76\xd5\xd3\x53\x1c\x37\xcf\xdf\xc2\x4c\x6c\x20\xb2\x5c\xe1\xa3\x17\x50\xce\x69\x63\xbf\xa1\x3b\xe3\x7a\x79\x4b\x5c\xb8\xb4\x70\x2a\x91\xd3\xa7\xf6\xfc\x50\x2c\x97\x44\x2f\x2d\x0a\x9a\x1e\x40\x40\x64\xa9\x8e\x61\x56\xea\x28\x29\xae\x98\x87\xdd\x3e\x70\x7c\x76\x7e\xfd\x7e\x71\xa8\x1a\x85\xad\x2d\x82\xe8\x56\x38\x89\x58\xb9\x15\x26\xd1\x01\x22\x4b\x14\x44\xbd\x99\x94\x22\x3f\x19\xa9\x4e\x1d\x45\xdb\xed\x49\xeb\xa2\xdd\xc6\x07\x4a\xde\x28\x29\xb7\x0a\x9e\x5d\x22\x75\x39\xe8\x4a\x1e\x08\x88\x2c\x73\xf7\xf1\xfc\x5d\xd4\xc7\x36\x73\xdf\x97\xb6\x7c\x25\xba\xd6\xf9\xaa\x21\x9c\x85\x6e\x21\x97\xe3\x2b\xd3\x5f\xba\xf2\xee\x1e\x9a\xc0\x40\x40\x64\xc9\x8e\x31\xf5\x30\xfc\x7e\xd6\x69\x48\x46\x73\x72\x0e\xef\xb7\xf2\x3e\xdd\xb5\x36\xaf\x5b\xeb\x44\xff\xf6\x7b\xdd\xf2\x30\x45\x98\x1d\x30\x10\x59\x5e\x75\xec\x10\xe3\x9b\x3d\x41\x1f\x49\xb5\xc3\x29\xc0\xfa\x6d\xf1\x44\xe7\xcf\xdf\xda\xec\xb1\x7a\x7c\xb0\x56\x83\xa4\x29\x08\x66\xc7\x09\x44\x96\xd5\xfc\xa7\x64\xe0\x0f\x4f\x20\x56\x5f\x18\x88\x3f\xfa\xba\x6d\x70\xb0\xb1\xfb\xf4\x92\x25\x33\x6d\x0a\x51\x80\x62\x44\x85\xa0\xc9\x00\x04\x44\x96\x29\xa9\x25\x1a\x45\x9f\xc5\x4e\xd9\x28\x17\x63\x2d\x59\xfb\xd4\xc2\xa7\x6d\x15\x3a\x69\x6a\xf0\x49\x9c\x13\x92\xe7\x7a\x3f\xc1\x7e\x3f\x00\xe3\x59\x1b\xd4\x12\x32\x15\x22\x24\x95\xbd\x4f\x4e\xa5\x59\xb0\x5a\x62\x10\xfe\x84\x42\x64\x8e\x54\x58\x74\x3c\xa5\xa4\xfb\xb7\x00\x4c\xe2\x0e\x44\x96\x84\x02\xab\xca\x88\x2a\xdf\xdb\xfa\xf0\x33\x05\x47\x02\x1f\xbe\x70\xe7\xbf\x13\xfc\x1e\x86\x6e\x16\x61\x6b\x92\xe4\xca\x62\x09\xdd\xfb\x08\x02\x22\x4b\xde\xa7\x45\xe2\x2d\x02\x26\x42\xf5\xa8\xf1\x67\xdd\x4d\x5b\x1f\x50\xb7\x66\x2f\x4c\xca\xcd\xc3\x5d\xe0\x96\xaa\x29\xfb\x32\xa0\x2b\x79\x20\x20\xb2\x24\x51\x37\xc5\x30\xf3\x2d\x20\x27\xc4\xd7\x52\x27\x0c\xd4\x37\x11\xfd\x18\xe2\x83\xe2\xd3\x40\x1d\xb3\x3d\x4c\xb8\x35\x2f\x0d\x73\xc3\x03\x22\x4b\x04\x0e\xf7\x4c\x2c\xe9\xc5\x7a\xdb\x49\xda\x12\xee\x1b\xae\x78\x05\x8b\xea\x53\xe6\x30\x52\x3c\x94\x4f\x83\x03\xb4\x6c\x26\x30\x09\x37\xe0\x8b\x61\xcd\x66\x5d\xa9\x2e\xa2\xa6\x13\xb4\xe0\xa2\x31\x46\xe7\xeb\x66\x22\x70\x88\x9e\xc7\xce\x9c\x62\xd0\xb1\x76\x3b\xf4\xbb\xc3\x7e\xcf\x00\xe3\x99\xe3\xee\xd4\x5f\xb0\x9c\x60\x7a\x1c\x6d\xb0\x8c\xa4\x65\xdf\xe1\x53\xe9\xe1\x4f\xa4\x66\xa5\x1f\xaa\x88\xf4\xb1\x29\xb6\x83\x30\xeb\x33\x10\x59\xe2\xbf\x44\x53\xc2\x14\x50\x7d\x32\x58\xe8\xf7\x82\x45\xc6\x2b\x17\xdb\xd1\xc1\xfc\xd0\xa5\x4a\xfd\x81\xb8\x2e\xed\x29\xe2\x09\x4c\xa2\x0c\x44\x96\x4c\x0a\x67\x06\xc7\x9b\x98\xad\xfe\x7e\x7d\xab\xa1\x34\xc7\x8d\x61\x29\x06\x41\x63\x39\x43\x01\xbf\x9d\xb6\x48\x2a\x59\xe0\x60\x12\x26\x20\xb2\x3c\xa5\x45\xc1\x32\xb4\x2c\x5c\x2b\x1b\xc9\xd4\xae\xb8\x33\xe4\x01\x37\xa6\x21\x1e\x99\x58\x0f\x7b\xe7\x20\xe9\x4a\x4b\xbf\x82\x7e\xea\x13\x04\x44\x96\x4c\x2a\x7d\xd4\xb2\xc2\xd3\x8a\xb9\x70\x68\x9c\x84\xf1\x1d\x73\x33\xc9\xc5\x0f\x39\xfe\xec\x5d\xbf\xc4\xed\x69\x55\xdf\xcd\xc1\xfc\xee\x40\x64\x99\xb4\x24\x66\xb5\xbe\x15\xcc\xcc\xc3\x21\xdc\xe3\x66\xbe\x25\xf8\x8e\xba\x7d\x78\x73\x5a\x22\x37\x72\xf5\x9c\x6e\x03\x2e\x0f\x9a\xe4\x40\x40\x64\x39\xca\x61\x93\x83\x3d\x62\x16\xc3\x31\xa7\xe9\xcd\x17\x14\x5a\x1e\x4c\xf5\x04\x7d\xee\x72\xbe\x60\xf9\x6b\x7d\x2f\x31\x32\x1d\xcc\x06\x09\x88\x2c\xb7\x75\x62\x32\x6d\xda\xd4\x85\xa7\x95\x67\xf0\xed\x9b\x49\x2b\xaa\x29\x0b\xbf\xb3\x56\xb8\xd3\x2d\xab\x7f\x26\x54\x6e\x2b\x85\x59\xe7\x81\xc8\x12\x63\x2a\x71\x8b\x1d\xfc\x93\x35\x65\x96\x78\x9b\x61\x87\xac\xbb\x36\x33\xfd\x7c\xd9\x09\xec\xaf\x26\x9f\x2b\x85\x57\x32\x0b\xdd\xc2\x01\x02\x22\x4b\x89\x4c\xb1\xca\x5f\x58\x73\x59\xa7\x97\x6e\xe7\x75\xfa\x31\xca\x7e\xcf\xe9\xdd\x0b\xca\x43\x56\x4c\x29\x1e\x3a\xe3\xb4\x4f\x60\x2a\xa6\xdc\xb0\x4d\xdf\xff\xed\xaf\xc8\xfc\xe7\x84\xe9\xf9\x41\x49\x69\x67\x4b\x34\x1f\x9f\xf1\x91\x10\xe7\xf4\x7c\x96\x8e\xa4\x61\xb5\xe7\x57\x64\x55\x0b\x0c\xec\xdd\xdd\x77\xe4\xd0\x76\x0b\x02\x32\xce\x25\xee\x8d\x8b\x24\x54\xb5\x2f\xf9\x2b\xbc\x53\xd5\x95\xef\xd8\xc9\x5f\x3b\x2f\xe4\x82\x42\xf4\x42\x06\x7a\x7b\xfa\x95\x10\x61\x12\x02\x20\xe3\xa4\xd1\x16\xad\x9c\x51\x28\x53\xe1\xd9\x2e\xfb\x6e\xa0\x2e\x73\x2d\x83\x6e\x2e\x2b\x66\xb2\xe2\x71\x43\xd5\x79\x73\x1c\xfc\x0b\xa6\xa2\x03\x64\x9c\x1f\x51\xb1\x5a\x20\x82\x67\xee\x9b\x4a\xc7\x49\x14\x39\x54\x8c\x07\xe7\xd1\x9f\x6c\xec\xe7\xb0\xd0\xd8\x43\xd3\x09\xfe\x82\xa0\xa9\x08\x04\xf4\x58\xa6\xba\xec\xfa\x7b\xa7\xb8\x37\x53\x53\x64\x09\xce\x1b\xbf\x4f\xc2\x6f\xf0\x75\xee\xf4\xe7\x8d\xab\x91\x1f\x88\x42\xd9\x97\x7e\xc2\xfc\xc0\x40\x64\x29\xf9\x21\x0e\x2b\xcd\x63\xe1\x8e\xf1\x6a\x6d\xfc\x1a\x7c\x0a\xbe\x21\xa4\x50\x24\x67\xe6\x3f\x0f\x27\xd8\xd5\xcd\xd1\x44\x82\xa9\x9c\x01\x91\x25\xa6\x8d\x00\x5f\xda\x46\x29\xbb\xcf\xd7\xf6\x2d\xea\x5b\x6f\x5e\x9d\x88\xa7\x2b\xc5\xea\xad\x45\xdf\xef\x82\x89\x6e\x11\x0a\x61\x6e\x0c\x40\x64\xd9\x12\x76\x3e\x99\xc9\xa4\x26\x8a\x96\x10\x77\x94\x86\x36\x1a\xdd\xf8\xaa\xb7\x95\x62\xb7\xa4\xbf\xa6\x6d\xb5\xe6\x47\x9a\x1c\xcc\xf7\x0c\x44\x96\xc3\x59\x48\xe2\x27\x82\x78\xe9\x5a\x2a\x48\x86\x06\xc3\xec\x63\x17\x26\xbb\x37\x3f\xb2\xaa\x50\xe9\x02\x02\x21\x87\x6a\xda\x30\x09\x1c\x10\x59\x62\x89\x68\xd7\x12\x9b\x79\xf5\x98\x8f\xb6\x48\x94\xbc\x55\x20\x0c\x68\x5d\x40\xf1\x6e\x3d\x5e\xb0\xb9\xd1\x6b\xba\xfd\x72\x07\x6d\xdb\x20\x20\xb2\x84\xcf\xb1\xf8\x6e\xed\x6a\xc6\xa6\xac\x42\x63\x07\x2f\x1a\x1d\xec\xe9\x30\x5c\x96\xbe\x72\xec\x10\x4b\x68\x96\xa9\xbf\x8d\x05\x33\xb1\x81\xc8\xb2\x73\x26\x67\xb2\xf2\xcd\x4e\xbf\xa5\x97\x07\x56\x56\x60\x28\xd1\xb4\xaa\xfd\xd4\x8e\xbd\xea\x11\x9a\x77\xb8\xf1\x5e\x86\x33\x4c\xc9\x17\x88\x2c\x13\x9c\x3c\x52\x7d\x7e\x94\x8c\x7f\x6f\x6d\xb5\x25\xcc\x47\xd1\x50\xd5\xb4\xc5\xa3\xb3\xaa\xbf\xf0\x66\xee\x43\x22\xe0\x1b\x87\xd9\x49\x03\x91\x25\xaf\x02\xe2\x26\x68\xe4\xa1\x9b\x3c\x96\xcc\x1f\x17\x5d\xa3\x91\x9f\x11\xdb\x6b\xe6\xb8\x83\xdf\x93\x60\xcc\x6a\x7d\x3f\x0d\x66\x07\x0c\x44\x96\x26\xc1\x17\xfe\xa0\xbd\xae\x74\x65\x24\x7f\x2c\x59\x9a\xcc\x8f\xcb\x36\x5b\xf4\xaa\x5e\x66\x51\xa8\xce\x03\xc9\x79\x70\xce\xd0\xd4\x08\x02\x22\xcb\x33\x2f\x1e\xb2\x22\xdd\x60\x14\xb5\x14\xae\x48\x6a\x4a\x29\xbf\x0c\xfc\x9a\x64\x73\x8c\x81\xaf\x17\x38\x45\xce\x1d\x88\xf6\x30\x1b\x12\x20\xb2\x5c\xe9\x8f\xe1\x92\xc7\xab\x7b\x73\x60\xaf\x9d\xa6\xcd\x9f\x8c\x4a\xaa\x7d\xb0\x8b\xd8\xfb\xb7\x7b\x6b\xd8\x33\xad\x36\x9d\x01\x66\xe1\x03\x22\x4b\xac\x0d\x37\x8d\xd5\x17\xb8\xfc\xec\x72\x1f\x24\x86\x9f\x6a\x61\x7a\xdc\x5c\x86\x28\x79\x90\x7e\xf6\x9f\x39\x9c\xe7\x91\x7a\x01\x33\x0e\x81\xc8\xf2\x6d\x73\xe6\xd8\x86\xe6\xbc\x56\x3e\x3e\x67\x7e\xdd\x42\x99\x3f\xcd\x9b\x4e\xe4\xfb\xc5\x20\x8a\x10\x36\xfb\xd3\x2d\xab\x18\x98\x1b\x15\x10\x59\x0a\x67\xe2\xc9\x1a\x4e\x47\x87\xc2\x75\x2e\x6a\x0c\xe2\x3a\xd6\x3f\x09\x61\x19\x7d\xcf\x6d\x9f\x5d\x4c\xc9\x9e\xe4\xa1\x5e\x09\x93\xe0\x02\x91\x65\x2a\x5a\x6e\x21\xcd\xf8\x7c\x84\x5c\x1e\xa7\xc9\x35\x45\x70\x7c\x89\x8a\xfd\xb2\x94\x66\xaf\x46\x1c\xd5\x2c\x15\xed\x64\x2b\xcc\xef\x0e\x44\x96\xd3\xa3\x4f\x5e\x09\xb0\xb9\xa3\x8b\x0a\xc7\xbd\xdb\xe0\x5d\x96\x61\x75\x1e\x6f\x94\x87\x9f\x5a\xc6\xd3\x8c\xa0\x28\x74\xd7\x87\x99\x5f\x40\x64\x89\x20\x19\xb2\x5d\x5b\xf5\x9c\x62\x27\xcd\x9b\x0b\xa3\x0c\xcb\x1c\x0f\xb1\x3e\xcb\x75\x5f\xd9\x04\x43\xc3\xd4\xaa\xd4\xc6\x0d\x66\x03\x09\x44\x96\x01\x3e\x16\x7a\x57\xa3\xce\xe4\xd1\x6f\x3a\x4e\xbe\x1c\xfe\x95\xb5\xff\x62\xe4\x56\xc8\xf2\x4d\xc2\x7c\xfe\x75\xc4\x73\x84\x3d\x98\x8d\x0d\x10\x59\xb6\x9d\x98\xe6\x3f\x61\xed\x41\x19\xcc\x90\x9d\x7c\x7e\xc7\x7a\xf4\x15\x5c\xc6\xd9\x61\x22\xcb\x23\x8e\xc6\xf2\x27\xb5\x5b\x06\xba\xe2\x05\x06\x22\x4b\xfa\x14\xbf\xab\xf3\xae\xa6\xb7\x0b\xb3\x8a\x67\x6d\x76\xfe\x35\xd3\xd5\x29\xc2\xba\x0a\x97\x62\xdd\x33\x3a\xcc\x7b\x2a\x26\xd0\xd7\x05\x06\x22\xcb\x87\xed\x43\x37\x8e\x3d\x43\x5c\xd4\x8e\xd0\xf7\x43\xae\x0b\xdc\x8b\x4f\xd6\x76\x75\x3a\xc4\xf4\x42\x03\x5e\x95\xd7\xb8\xa0\x43\x13\x33\x18\x88\x2c\x2f\x33\xf4\x93\x07\x39\x6d\x67\x08\x9d\x75\xad\x45\x0d\x91\xea\xce\x0a\x28\x66\x56\xa2\x82\x97\x5e\xcd\x93\xcf\x62\xbf\x4a\x82\xee\xcd\x02\x03\xfe\x05\x58\xed\x6a\x7a\xae\x51\x26\x25\xca\x8c\x10\xcf\xce\xcf\x3a\x9f\x9c\x86\x06\xdd\x85\xa8\xf9\xcf\x9b\x53\x28\x27\x2e\xb9\x3c\xa1\xa5\x05\x0c\x44\x96\xe2\xf8\xb1\xdf\x2c\xf1\x05\x78\x29\xcb\xd1\x1c\xd0\xd1\x89\x99\xf7\x46\xe3\xb1\x42\x57\xd5\x8c\x79\x45\xad\x37\xd8\xb1\xeb\xa0\x37\xb4\x60\x20\xb2\xec\xe7\x0b\xb7\x1a\xd3\x2a\x93\x9c\xb0\xcc\x55\x9c\x7b\xf5\x79\x68\x81\x58\xfe\xc3\xc4\x9c\x87\x91\x33\x9c\x4e\xfa\xfa\x9f\x51\xe8\xca\x2b\x18\x88\x2c\xbf\x94\x19\x3d\x3b\xfa\x8a\x90\xbb\x3c\x14\x46\x19\xed\x69\x35\x27\xbc\x85\xcd\x12\x1b\xca\xd5\x5d\x6a\xdb\x5a\xd6\x8f\xf8\x0c\x7a\x3c\x83\x5f\xc2\x36\x7d\xff\xb7\xbf\xa5\xf7\x9f\x13\xa6\xfe\x5f\x9b\x58\x56\xad\x60\xdf\xf7\x0a\x86\x89\x01\xaf\xba\xe9\x48\x2a\xdc\xe1\x18\x93\xbc\x63\x4a\xfa\x93\x5f\x73\xa4\xf0\x42\x4f\x6c\x30\x90\x71\xd6\xdc\xac\x9d\xe7\x78\xc8\x7c\x4b\xf5\xb5\xb6\xc5\x6e\x1a\x10\x3d\x92\x76\xc6\xab\xa6\xb4\xfe\xa4\xc2\xc4\xb2\xb1\xbb\x85\x0a\x4d\x7b\x60\x20\xe3\x74\x8c\x33\xdb\x48\xfb\xa3\x26\x1d\x59\x37\x58\x3e\xcc\x00\xde\xc6\xfe\xe2\x8b\xc6\x56\x19\x20\x20\x4e\x5c\x70\xe6\xef\xe3\x0d\x4d\x21\x60\x20\xe3\x7c\x99\x1c\xc5\xb3\x83\x6f\x58\x86\x51\x1e\xde\xbe\x32\xbf\x7c\x4f\x8b\xbf\x30\xb1\x8e\xc8\xac\xdd\x56\x2f\x36\x4f\xb8\xf2\x09\x7a\xc7\x00\x06\x7a\x2c\x93\x2b\x3f\x4f\x3a\x20\x5a\x31\xee\x29\xc3\x45\x1b\x86\x6a\x71\x30\xcd\xd0\x94\x28\x4a\x95\x12\x22\xfe\x46\x55\xc0\x86\x39\x33\x74\xcf\x10\x18\x88\x2c\x91\xcf\x5f\x18\x1b\xe0\x0d\xa5\x75\x28\x56\x56\x99\xa3\xc5\x59\x69\x33\xc1\x23\x12\xe1\x7e\x48\xa3\x2c\xdf\xec\xbc\xa0\x11\x84\x6e\xd6\x06\x03\x91\xe5\x04\xc2\x2e\x02\x3f\x7a\x92\xcd\x75\xef\x73\xba\x89\xdc\x35\x25\x15\x87\x46\x9d\x2a\x4e\x56\xc9\x43\x59\x56\x45\xfa\xd3\x1e\xd8\xeb\x02\x98\x00\x14\x15\x46\x87\xa6\x1a\x4c\xaf\x66\x7f\xdc\xc7\x90\xe1\x20\xfd\x4c\x62\x21\xb0\x6c\x3a\x18\xfe\x68\xb2\xed\xf9\xfc\x96\x7b\x13\xba\xd2\x00\x06\x22\xcb\x9b\x77\x4f\x9e\x09\x71\xad\xf6\x0e\xad\xf3\xcb\x7c\x61\xc9\x96\xd4\x3c\xa1\x89\xee\xfa\x42\x54\x4a\x6f\x56\x8e\x48\x46\x6d\x08\x9d\x78\x81\x81\xc8\xb2\xd2\xfb\xbd\xe9\xc9\x12\xa6\xd6\xb4\xfa\x06\xdd\x25\xaa\xc5\xfc\xf5\x86\xdd\x4c\x68\xfd\x34\xa4\xfe\xf5\x36\x0b\xba\x7a\x18\xf4\x4e\x11\x0c\x44\x96\x28\x7d\x17\xaa\x11\xc5\x0d\x16\xc7\xee\x3a\xa4\xc6\xfd\x35\x96\xb6\x1f\x28\xe2\xcf\x9c\xac\x18\x6d\x90\x77\x48\xef\x28\xe6\x61\x16\x3e\x20\xb2\xac\x56\xd8\x52\x1d\x98\x88\x71\xaa\x21\x13\xd7\xc5\x9e\xbf\x58\x04\xf5\x56\xe7\xbc\x9b\xa0\xa4\xdd\x77\x55\x92\xd0\xe0\x05\x41\x27\x5e\x60\x20\xb2\x64\xdd\xb2\xb4\x09\xf5\xde\x2c\x7d\x06\x8a\xbe\x69\x1c\xe4\xf7\x3e\xb0\x1b\x51\xce\xb0\x96\xb4\xac\x2a\xf3\x4e\xc3\x8e\x41\x87\x4e\x94\xc1\x40\x64\xd9\x57\xb6\x99\x62\x27\xa0\xd8\x58\x80\x41\xf3\x9e\x42\x99\xf7\xd4\x19\xaf\x93\x91\x6a\xca\xa4\x97\x8c\xdf\xa1\x11\x4e\x5c\x13\x66\x9e\x02\x91\xe5\xec\xc1\x04\xab\x49\xdf\x38\xdf\x61\x4a\xb8\x15\xbd\xde\x50\x5f\xe7\x65\xc6\x24\x0e\x91\x57\x78\xb2\x52\xf2\xea\x35\x07\x2f\x74\x2f\x02\x18\x88\x2c\x75\x0f\x8b\xd1\xcc\xfb\x3c\xb1\xec\x7e\xf8\xcc\x5e\x97\xa9\x8e\x75\x3d\xf7\xe2\xce\x45\xf0\x27\x92\x19\xa2\x72\x6a\xc2\x1e\x82\x4e\x50\xc0\x40\x64\x99\x98\xdb\x47\x4e\x7b\xd7\xa9\x61\xa0\x29\x66\xdb\x35\xdc\x52\x13\x9d\x99\x46\x68\x5b\x17\x8d\x36\x8b\xbd\x32\xa9\x80\xd6\x0d\x5d\x69\x00\x03\x91\xe5\xfd\xd7\xc4\xfb\x20\x6a\x96\xa4\x82\x29\x83\x85\x79\xcc\x9a\x26\x4b\x1f\x52\xc2\xd0\xc1\xe3\x3a\x84\xd1\xb6\x3e\x82\x76\x47\x68\x4a\x03\x03\x91\xe5\xec\xd5\xc9\x9a\xf8\x7b\xa3\xe8\x5d\xb8\x67\xe5\x7a\xdf\x82\x13\xb5\x52\x13\x8f\xcd\xc9\xed\x7d\xe5\x8a\xfa\xb7\x78\xeb\xa9\xa1\x2b\xe5\x60\x20\xb2\x44\x55\xcd\x0a\x0b\x56\xc9\xe4\x34\x1a\x2c\xea\x88\x11\xcf\x70\x47\x97\x13\xfa\x42\x3e\x64\x2d\xd4\x7d\xe2\xb9\xca\x92\x70\x06\xb3\x6e\x00\x91\xa5\x87\x24\x19\x04\x71\xc3\xd3\x5e\x6e\xbb\xee\xdb\x5c\xe8\x5d\xaa\xa5\xca\x73\x47\x22\x38\xb3\xef\x27\x26\xe5\x4f\xd7\x3b\x37\x61\xbf\x67\x80\xf1\x5c\x7f\x20\xd6\xeb\x40\xc7\x13\xaa\x36\x7c\xb7\x44\x98\x90\x71\x4b\x84\xfd\x97\x15\x7d\x31\xac\xea\xcd\x05\xf1\xc4\xf6\xf5\x07\x98\x79\x0a\x44\x96\x89\x1d\xb8\x6b\x14\x17\x97\xdf\x03\xed\xc6\x6f\x6b\x92\xc8\xe0\x8b\xe0\x7a\x48\x85\x7c\x93\xd6\x13\xea\xac\x73\xb7\xa5\xf2\x60\x6e\x78\x40\x64\x49\x60\x13\xe6\xe7\xf9\xed\xea\x43\xd3\x99\xae\x9a\xef\xf9\x10\xa7\xa1\x1b\x75\xa8\xee\xd9\x86\xfd\x1d\x2b\x93\xec\x6c\xa0\x14\xcc\x38\x04\x22\x4b\xd6\xef\x4b\xa1\xae\x4b\x17\x67\x39\x85\xca\x2b\xd9\x54\x23\x8e\xee\x07\x35\x17\xbd\xc2\xf3\x88\x48\x83\x05\x97\x53\x5d\xeb\xd0\x4f\x11\x82\x81\xc8\x72\xbd\xfc\xd6\xfb\x6c\x77\xde\x84\x99\x94\xff\x2b\x53\x73\x81\x0b\x57\xb6\x98\xe1\x14\x29\xa7\xfd\x70\xfd\x4c\xa6\x6f\x04\x4c\xc5\x1d\x0c\x44\x96\x21\x2a\x91\xbd\x44\x9e\xd6\x0d\xf2\x3c\xc2\xf9\x38\x4c\x6b\x3c\x3f\x5a\x3e\x0a\xc6\x1f\xa5\x7f\x65\x25\x92\x97\xc5\xfc\x53\x08\xdd\x73\x06\x06\x22\x4b\x7f\xc3\x7d\xf6\x7a\x9f\x01\x29\xe9\xd5\x56\x4c\x93\xbb\x8b\x6f\xa7\xf4\x6d\xdb\x0f\x35\x94\x04\x52\xd1\x74\x6a\x1a\x31\x39\x30\x09\x13\x10\x59\x5e\x7e\xc5\x35\x38\x5b\x8d\xf3\x8a\x90\x17\xa8\xe8\x6d\xe4\xbb\xb5\x72\x10\x39\x18\x8a\x08\xfc\x16\xe1\x8e\x70\x81\xc8\x3a\x07\x5d\x09\x06\x03\x91\xa5\xdc\x27\xad\x18\x12\xf3\x07\xb7\x34\x36\xc3\xdc\x26\xc6\x4f\xaf\x43\x24\x10\xbe\x21\xe3\x53\xe7\x4f\xd1\x92\xff\x96\x38\xf2\x81\x7e\xc8\x03\x0c\x44\x96\xb2\xf3\x84\x89\x62\x67\x88\xd7\xe3\x91\xf1\xef\xfd\xf9\xc6\x2b\xc2\x42\x69\x72\x95\x39\x78\x75\x35\xb5\xc1\x3e\x6e\xd3\x2b\xd0\x95\x4e\x30\x20\x59\xf2\xbd\x9c\xfc\x9b\x20\x90\xfc\x46\x1a\x59\xd8\xba\x14\xe5\x29\xe6\xc5\x1f\x7c\x41\xce\x5a\x44\x96\xf2\x83\x7a\x17\x22\x72\x98\xf1\x0c\x82\x6d\xfa\xfe\x6f\x7f\x51\xf8\x3f\x27\x4c\x0e\xf1\x88\xae\x9e\x44\xa1\x1b\x8c\x70\xd2\x75\x13\x31\x36\x47\x4d\x5d\x04\x7f\x08\xda\xc7\xa7\x39\x9e\x62\x92\xbe\xe0\x38\x87\x99\x00\x40\xc6\x19\x99\x9d\x32\x63\xd0\xa9\xe9\x49\xa8\xcd\x55\x2c\x6a\x98\x88\xf8\x3a\x7f\x3d\x44\xfa\x8e\x58\x60\x9a\xb2\x9d\xe1\xaf\xba\x08\xcc\x02\x01\x64\x9c\xfa\xcf\xe8\x65\x58\x63\x14\x3d\xa3\x77\x54\xe5\xf7\x10\xf2\x76\x10\x1b\x90\xe0\x84\x1d\x83\x09\x52\x5e\x46\x66\xe0\xab\x1e\x41\x57\x86\xc0\x40\xc6\xd9\xa9\x1a\x9e\x5a\xc1\xb1\xbe\xb1\xee\x4f\xf0\xe6\x7d\x4f\x05\xa5\x0c\xfb\x79\xc1\xa6\x30\xba\x90\x7f\x1a\xff\x6b\xf3\x7d\x0e\xd8\xeb\x02\x98\x00\xd8\x54\x32\x18\x12\x94\x0a\x9c\x10\x6b\xce\x75\x1a\xf9\x1e\xf2\x2c\x5b\xca\x09\x8f\x81\xdf\xdd\x7f\x75\x54\x83\xa3\xfb\xb2\x60\x12\x14\x20\xb2\x04\xf5\x31\xd2\xe8\x7b\x20\x59\x1a\x57\x1c\x70\x17\x39\x5a\xb9\xb6\x24\xc3\x23\xf0\x7d\xb1\x41\x5d\xff\x8d\x7a\x17\x49\xd0\x0d\xb3\xa0\x03\x91\x25\xde\xb6\xd2\x66\x0c\xaa\x15\x97\xb7\x5d\x53\x0a\x06\x39\x47\x10\xb7\x48\x95\x5b\x86\xac\xe2\x78\xdb\xe4\xac\x81\x82\x4e\x39\xec\x71\x00\x26\xc0\xd3\x1e\x16\x89\x69\x6b\xa6\x07\x6f\xb2\xa8\x84\x08\x84\x02\xc1\x8e\x78\x9e\xc0\x4f\xe8\x2f\xd4\xbf\x3e\xe3\x48\xaf\xe4\xb2\x84\x7e\x11\x19\x18\x88\x2c\x5b\x4e\x4e\x0e\x0f\x5f\x76\x7c\xdd\x23\x61\x45\x9c\x3d\x91\x8b\xaf\xe5\xdd\x95\xec\x95\xc7\x62\x98\xf9\x50\x91\xc0\x61\xd0\x0c\x93\xe9\x03\x91\x65\xd5\x55\x3d\x83\xce\x72\x1e\x3e\xb2\xe8\x1e\x76\x7f\x46\x9c\xc0\xf7\xa0\xee\x4b\xb4\xe7\x1f\x36\x7d\x87\x57\xe9\x69\x33\xba\xa0\xad\x1d\x0c\x44\x96\xfc\xd2\x34\xf0\xc9\x6a\x2b\x48\x14\xf9\x4c\x85\xd7\xf2\xef\x97\x67\xf5\x12\xad\xa5\x02\xba\x93\x30\xe8\x5a\x3f\x72\x90\x25\xc2\x24\x82\x40\x64\xd9\x70\x6e\xb0\x49\x6a\x47\x62\x24\x47\xfe\x9e\x9a\x4e\x39\x4d\xcf\x24\xa8\x70\xe9\x74\x9e\xae\xe6\xb0\x03\xac\xb3\xde\xc5\x0e\xdd\x2c\x09\x06\x22\xcb\xed\x7e\xb4\x4b\xd7\x21\xea\xdf\xc7\xd9\x70\xfd\xe4\x05\xc1\x10\xcc\x87\xb2\xbf\xbd\x98\x12\x1c\xb2\xf2\x06\xb5\x0c\x8a\x06\xd0\x15\x02\x30\x10\x59\xee\xf0\xdc\x17\x5e\x2d\xee\xf9\xc3\x47\xf4\xbc\xe8\x9a\xc9\x29\xb1\x1d\xe4\x60\x63\x54\x0b\xae\xe3\x1d\xb2\xae\x4e\x33\xb0\x80\x49\x98\x80\xc8\x32\x40\xc5\x31\x5a\x16\xcb\x6d\xb0\x89\x71\xd7\x2d\xda\xd6\xb4\xcf\x36\x85\x83\x84\xd5\xdc\xa3\xda\x62\x78\xe7\x26\xa1\x60\x10\x9a\x9c\xc0\x40\x64\xf9\x77\xf8\xed\x93\x77\x6b\xe4\x10\x4b\x9d\xf7\x4d\x57\x4d\xfe\x36\x35\xa6\x42\x6b\x08\x9f\x92\x73\x37\x4c\x9c\x07\x95\x51\xf9\x60\x16\x62\x20\xb2\xf4\xd4\x6f\x4d\xcc\x58\xc7\xef\x58\x94\x9b\x62\x49\x66\xd7\xa2\xcd\xa3\xf4\x36\xec\xa0\xb1\xba\xe2\x2d\x58\xdc\xb2\xb1\x3a\x85\x6e\xb6\x05\x03\x91\xe5\x07\xbd\xe1\xb7\xe4\xfd\x63\xc4\xe6\xe8\x0c\xab\xa2\x38\x91\x8a\x02\x7f\x3e\x42\x2e\xe7\x85\x50\x4e\x2f\x48\x89\x66\xbe\x89\xc2\x2c\xc4\x40\x64\x99\x41\x46\xf8\xd5\xa0\xdb\x1a\x69\x86\x13\x31\xca\x2c\xc8\x41\x20\xa5\xed\xc7\xd0\x17\x5a\x3d\xa3\xf0\x19\x73\x3e\xbd\x05\x0b\x98\x1d\x39\x10\x59\xbe\xbe\x1e\x58\xd7\xd2\xfd\xd1\x24\xdb\x7a\xe2\xb8\xd7\xfb\xc4\xf9\x35\x8e\x07\x4b\xae\x39\xfb\x1d\x93\xbd\xda\x3d\xae\xd1\x28\x34\xc5\x82\x81\xc8\x52\xa2\x9d\x0c\x0e\x52\x7a\x1f\x69\x25\xa3\x6b\x14\x79\x52\x69\xc6\xd7\xf8\xf3\xa1\xd1\x99\x6c\x08\xb3\x9a\xe9\x6e\x97\xef\x10\x26\xe1\x06\x22\x4b\xdb\x4d\xc8\x30\x92\x02\xae\xbf\xb3\x6c\x48\xcd\x84\x9c\xd3\x41\xd7\xa9\x0e\xdc\x0b\x3c\x24\x63\x54\x78\x51\x81\x37\x61\xf9\x30\xeb\x18\x10\x59\x4e\x6e\xf0\xbc\x75\xa2\x6b\xfb\x39\x7b\xa0\x77\xa9\x0a\x6f\xae\x8d\x6e\xb7\xc0\xe5\x20\x6b\x4f\x72\xc4\x15\x66\xd8\xcf\x70\x02\x5d\x31\x05\x03\x91\x25\xed\x04\xaa\xb1\x49\xe0\x26\x29\x9b\x50\x4e\xe1\xef\xb0\x74\x74\xad\x70\x05\x8c\x4c\xf5\x7c\x4e\x47\x1c\x9b\x5e\xa4\x97\x6c\x30\x89\x32\x10\x59\x0a\x37\xf4\x10\xb4\xc3\xe7\x4b\x59\x0d\xc9\x99\x7e\xa7\x25\x49\xfc\x73\xfe\xba\xc3\xcc\x5f\xd2\xec\xa7\x79\xc6\x3d\x1a\xa7\x0c\x4c\x82\x0b\x44\x96\xb4\x62\x0e\xaf\x19\x70\x7f\x99\x7d\xb9\x96\xd9\x33\xcf\x1a\x7a\x26\x64\xda\xdc\x03\x77\xa9\x83\xf9\x82\x4c\x0c\xe4\xb2\xb1\x0a\x53\xa9\x02\x22\xcb\x87\xa4\x0f\x02\xf3\xd7\xa2\x76\x72\x0e\x4e\x62\x9e\xdf\xba\xb2\x3b\x6e\xa7\x0a\xb9\xe0\x31\xa9\x50\x24\x9a\x74\x6f\x27\x21\x30\x09\x13\x10\x59\x3a\xb9\x58\xc9\x88\xdb\xad\x79\x2c\x92\x09\x70\x3e\xa9\xef\x71\x89\x6d\x0e\x59\xbb\x8e\xa3\xa5\xce\x3e\xfe\x3a\x76\x35\x46\x03\x93\x50\x02\x91\xe5\xdb\x2f\x24\xe7\x7a\xcc\xf9\xfc\x65\x44\x3e\x17\x89\x3f\xa4\x86\x0c\x1e\x12\xd7\x97\x4b\x97\x9c\xd6\x9c\xba\x4c\x8d\xd5\xbe\x42\x57\x82\xc1\x40\x64\xc9\x73\xef\x2d\x4f\xf1\x2d\x7b\xbb\xad\xaa\xe9\x28\xfd\x33\x97\x0b\x81\xe8\xf8\x2b\x03\xe3\x61\xcf\x3c\xab\x02\x83\x38\x84\x1c\xd8\x71\x08\x30\x9e\x83\x65\x82\x02\x62\x27\x7b\xbf\xaf\xd6\x09\xad\xea\xee\x51\x66\xb4\xac\xe5\x90\xa8\x96\x7a\xf0\xec\xc2\xcb\x2a\xc1\x7d\xce\x82\xee\xa5\x03\x03\x91\x25\xb8\xec\x20\xa4\x6e\xe7\x5d\xe5\xdf\xa7\x7e\x2a\x75\xc9\x04\x58\x9d\x51\x44\x36\x26\x6f\x58\xa7\xff\x90\x2a\xf7\xde\xa3\x8e\xc1\xdc\xdf\xb9\x61\x9b\xbe\x7b\xf0\x91\x6a\x28\x46\x63\x3d\x38\xa8\xf9\xdf\xac\x4e\x8e\xcd\x97\xe2\x96\x5b\xed\xb6\xb7\x63\x4c\xcb\xbf\x30\xa4\x3b\x88\x16\xf9\xcf\x09\x93\xab\x41\x46\x6c\xa4\x4e\xae\x42\x2d\x13\x3f\x9d\x3e\x36\x5d\x17\xc6\x08\xad\xd6\x91\x9f\xf6\x33\x5a\x12\x7c\xdb\xdb\x75\x77\x98\x1b\x0c\x90\x71\x72\x51\xaf\x6a\xec\xe7\x2f\xbe\x24\x97\x0e\x08\xc8\x82\x28\x1c\x74\x51\x4f\xe2\x84\x08\x7e\x0f\xa6\xfd\x93\x5b\x5a\x42\x81\x06\x33\x91\x80\x8c\xd3\x7b\x86\xfd\xb0\x98\xe7\x1c\x7d\xe9\x43\xff\x57\xba\x4d\xf9\xea\x96\xeb\x2d\xbc\xb1\x46\x6c\xf9\x79\x7e\x3f\x65\xa6\x2c\x1c\x98\x09\x00\x64\x9c\x7b\x9f\x84\x65\x70\x9a\xb8\x18\x16\x4c\xdb\xd8\x37\xb2\x1b\x27\x71\xc7\x7c\x54\x96\x43\x41\xd8\xbf\x40\x24\xbd\xb6\x8e\xca\x30\x37\x72\xa0\xc7\x32\xdd\xfc\x74\x7c\x7e\xb2\x67\xb5\xa9\x48\x88\xd2\xb4\x07\x3d\x9f\xb3\x18\x96\x41\x49\xa5\xea\x53\x0d\x2a\xb4\x11\xd6\xd3\x65\x87\xee\xf1\x02\x03\x91\x25\xe9\x8f\x5e\x09\xdd\xfc\x78\x46\xc4\x0f\x74\x09\x03\x3b\x8e\x34\xeb\x1e\xda\x5c\x6c\xa6\x51\x05\xde\x02\xa9\x02\x42\x41\xbb\xd0\xc4\x03\x06\x22\xcb\xd6\x70\xd7\x6b\xb7\xc6\xf3\x8d\xca\x4f\x1d\x7f\xac\xdb\x94\x3f\x86\xc6\x5b\x7c\x4c\xe3\xf8\x28\x90\x54\x8f\x7b\x21\xdb\xf0\x1c\xa6\x52\x05\x44\x96\x15\x42\xdf\xa8\x3b\x9b\xce\xbe\x26\xac\xea\x9f\x27\xf7\x5e\x24\x11\x89\x7c\xad\x0a\xfc\xb2\x2c\x2d\x3a\x71\x57\x2a\xc0\xfa\x12\x9a\x42\xc0\x40\x64\xc9\xcc\x47\x93\xa8\x51\xeb\x1e\x34\xfe\x29\x9f\x99\xd3\xeb\x9d\xd1\x80\xf6\x31\x2e\xc5\xd9\x95\x67\x44\x30\x9f\xbc\xaa\x4f\x35\xcc\x04\x00\x22\xcb\x2f\xcc\x68\xd2\x2f\x2e\x8b\x06\x7d\xf6\x02\xfd\x8b\x93\xdf\x22\x8c\x52\xd3\x4a\x92\x1c\x26\xb6\x7d\x44\x34\x71\x15\x5e\xd9\x81\x29\xf9\x02\x91\xa5\x8a\xae\x92\x13\xc6\xf7\x30\x4c\xf6\x3a\xd5\x37\xfa\xfc\x9c\x68\x22\xbe\xf8\xd7\xa2\xa7\xbb\xea\xb9\xcb\xc6\xd8\xc9\xc6\xb3\xd0\xa5\x7e\x30\x10\x59\x9e\x5f\x5e\xf3\xcf\x51\xf7\xcc\xac\x72\xe6\x5e\xcb\x94\xbd\xb9\x34\x6d\x87\x20\xff\x59\x40\x68\xa1\x0b\x4f\x48\x6f\x65\xa3\x81\xf9\x9e\x81\xc8\xd2\xc3\x43\x46\x7c\x72\x21\xe5\xdb\xfa\x87\xe7\x6d\xd8\x28\x24\x39\x56\xbb\xaf\xce\xb4\x8c\x5b\xfe\x16\xba\x8f\x64\x36\x87\xea\xc2\xec\x84\x80\xc8\xf2\xe9\xc1\x27\xd6\xca\x7b\x2d\x1f\xce\x8b\x9c\xfd\x71\x5d\xba\x55\x0a\x51\x3d\x62\xd1\x84\x33\x86\x98\x1f\x5c\x93\xbc\x39\x6c\xd0\xbd\x23\x60\x20\xb2\x0c\x80\xff\xf8\x3a\x65\xdd\x98\xfe\xa0\xe5\xcb\x07\x83\xa0\x4d\x30\xa1\x32\x32\x7a\xea\x9f\xc6\x17\xf1\x3a\x88\x99\x62\xfd\xd2\xb0\xd7\x05\x30\x9e\xf7\xa9\x95\xf7\x15\x3f\xbc\x55\xf6\xa0\x88\xd3\xd6\x22\x98\xbb\xfb\xf9\xe5\xc4\x5d\x0e\x6b\x66\x79\x21\x8e\x9e\x8d\xe0\xbb\x3f\x4c\xe5\x03\x88\x2c\x07\xd1\xc6\xc4\x5b\x97\xde\xa8\xcf\xdb\xdd\xab\x62\x26\xd8\x3f\xd0\x19\x13\xbd\xe6\x49\xaa\x8a\xac\xa9\x9d\x61\x26\x41\x8a\x82\x7e\xaa\x11\x0c\x44\x96\x9a\x3e\x58\x0c\x6f\xec\x95\xd0\xd5\xd7\xf7\xe3\x18\xf1\x64\x3d\x7c\x66\x6e\x1c\xa4\x92\x9d\x52\xbe\xaf\x92\x4e\x4a\x1b\xfd\x84\xee\x1d\x01\x03\x91\x65\x64\x5b\xc4\x8a\x1b\x9c\x38\x49\xee\xd8\xd1\x68\xa7\x4a\x3e\x69\x9a\x8d\x13\x01\x27\x26\x56\x1d\xf1\x56\xed\xc6\x8d\x13\x1b\xcc\x7c\x07\x22\x4b\x95\xd8\xd3\x08\xd0\xb9\x4c\x89\x95\x5c\x37\x83\x7b\x87\x40\xaa\x59\x63\xba\x90\x67\x60\x39\x8e\xcb\xb7\x97\x58\xe5\xa3\x5a\xd0\x94\x0f\x06\x22\xcb\x55\xc1\x11\xc7\x6c\x2e\xac\x42\xb4\x1f\xb4\x0c\x32\xd7\x95\x72\xbb\x46\x59\xf8\xde\xa7\x04\x45\xb4\xb7\xab\x9f\xf7\xf4\xfc\x60\xd6\x67\x20\xb2\x24\xeb\x33\x59\x69\xfd\xf0\xe6\x54\x37\xde\xc8\x4a\x50\x8d\xa5\x2e\x8d\xbf\x57\xe4\x57\x94\x19\x99\xfc\xe2\xe6\xe8\xce\x18\x0b\x74\x2f\x14\x18\x88\x2c\x25\xb9\x74\x09\x22\x77\xc4\xab\x8a\xba\xee\x3b\x35\xc4\x1d\xb6\x15\x38\x19\xaa\x23\xe2\xe5\xce\x04\xbe\x08\xf0\xbd\x36\x0e\x81\x49\x04\x81\xc8\xd2\xd5\x1a\x29\x6e\x6c\x0a\xd9\xc8\x18\x62\x98\xdb\xdd\xa9\x86\x74\xa2\x04\x8e\x3b\x68\x49\x17\x2d\x26\x20\xae\x6f\x78\x4d\x06\x53\xb1\x00\x22\xcb\xcc\xe6\x7c\x22\xac\x78\x1a\xd3\x2f\x77\x98\xda\xcc\xa5\x1a\xd1\x97\x67\x6a\x1a\x5c\x7e\xef\xde\x49\x5d\x7e\x56\xf8\x23\xca\x0c\xfd\xda\x0e\x30\x10\x59\xf6\x30\x85\xe4\x6b\x95\xa5\x93\x67\x78\xba\xce\x52\xb1\x9c\xd1\xc2\x5f\x9f\x90\x56\x93\xc5\x10\xd1\x76\xbc\x62\xfb\xf9\xc3\x04\x26\x61\x02\x22\x4b\xfe\x19\xac\x04\x5a\x97\x83\xb3\x8a\x32\x2c\x3d\x5e\xcb\xcf\xe6\x79\x6f\x9d\xa3\x6c\x7c\xf6\x73\x3a\xad\x04\xd1\xf7\x49\x61\x5e\x10\x0a\x06\x22\xcb\x29\x2e\xc7\xf3\x2c\xc9\x80\xd9\x5a\x48\x42\x4d\xe1\xb9\xb7\x31\xaa\x75\x8f\x7c\xcb\xac\x5f\xc3\xc7\x73\xf5\xfd\xf2\x76\x0f\x98\x8d\x16\x10\x59\x92\x87\x80\x39\x78\xe8\x03\x1c\x55\x76\x17\x88\xf2\x17\x47\xd0\x49\xbf\x60\xef\xd3\xa7\xb0\xfa\xcd\xa0\x4a\x62\x16\x62\x6d\x43\x8f\x43\x08\x10\x59\x5e\x8b\xb8\x0a\x18\x52\xd5\x93\x75\x4e\xc8\xa7\xd3\x0d\x2f\xed\xdb\xe2\xe0\x7c\x6f\x70\x8d\x8b\x39\xaa\xd2\x0c\x5e\xa7\xf9\x05\xfd\x50\x0e\x04\x88\x2c\x33\x04\xb8\xb4\x7d\x07\xcd\xce\x6c\xbe\x8b\x3a\xa6\xff\x79\xee\xa3\x1a\x83\x35\xb9\x17\x3f\x58\xd7\x71\xed\x48\xc3\x69\xd8\x03\xfd\xbb\x43\x80\xc8\x52\x6d\x5e\x20\x3a\xbd\x44\x30\x2e\xfc\x36\xd1\x43\xa6\xd1\x5b\x05\x4f\xde\x51\xfe\x2d\x43\xcd\x76\x44\xfc\x0b\xb2\x5a\xb3\x28\xe8\xd6\x14\xc8\x4b\xd8\xa6\xef\x98\x2a\x3d\x2c\xda\x72\x99\x45\xc9\x66\x83\x98\xe4\x81\xe9\x96\x3c\xfb\xa2\x67\x68\x36\x17\xcf\x9b\x15\x2e\x46\xf3\xa3\xbf\x2c\xfd\xe7\x84\xe9\x30\xf2\x25\x26\x84\xb2\xf4\x96\x8a\x91\xba\x99\x6e\xac\x90\x3a\x87\xbd\xab\x6b\xd7\x0e\x5e\x6a\x5e\xbb\x4e\x45\xb5\x3a\x16\xfa\x87\x81\x00\x19\x27\xf7\x70\xf9\xd7\xb2\x88\x07\x4e\x44\xbe\x4f\x3f\x85\x95\x1b\x9a\x30\xe9\xd0\x4a\x5d\x11\x07\xb0\x83\xcd\x55\x46\xd1\x1b\xa5\xa0\x13\x1d\x08\x90\x71\x0a\x78\x99\x63\xe2\x57\x95\x72\x1d\x57\x30\x23\x9b\xea\xbd\x5f\x94\xf9\x84\x1d\xa1\x94\xf7\x75\x8d\x2c\xad\xb6\xf4\xb7\x0d\x3f\xf4\x53\x21\x10\x20\xe3\xac\x9d\x4f\xfb\x28\x4b\x54\x95\x9e\x15\xf1\x95\xd6\xfa\x23\xc5\xb1\x09\xf5\x5c\xc0\xfc\xd3\xd9\x9b\x93\x28\xab\x77\x7f\xbf\x28\x42\x2f\xc4\x10\xa0\xc7\x32\xed\x86\x5f\x49\xa0\xc3\x6b\x5e\x24\x08\x48\xb5\xef\x52\xad\xa1\xd8\x68\xab\x2e\xe1\xf7\x73\x3c\x29\xe0\xa3\x93\x0a\x9f\xe0\x86\xde\xb9\x42\x80\xc8\x32\x20\x8e\x52\xa1\x53\x2b\x9b\xb7\xf4\xc7\x5b\xd3\x80\xf4\xec\x85\x52\xfa\xe6\x10\x9a\xde\xd2\x0f\xe4\x17\x1f\xba\x28\x37\x4b\xa0\x9b\xef\x20\x40\x64\x99\xf0\xaa\xe2\xdb\x34\x92\x6f\x24\x0f\x45\x71\x60\x1f\x9c\xcb\xfa\x26\x12\x3e\xcb\xa2\x80\xa7\xd6\xf2\x25\xfd\x18\x3c\xd8\x04\xfa\xbd\x1a\x10\x20\xb2\xdc\x73\xc6\x77\x12\x17\x66\x6f\x8d\xbf\x36\xc9\xe4\xe1\xc9\x6e\x61\x21\x35\xbe\x62\x4c\x39\x62\x34\xb7\x8f\xff\xea\x9c\xd3\x05\xbd\xe3\x84\x00\x91\xe5\x4c\xf9\x33\x35\x08\xd8\xd1\x5f\xab\x92\x26\x47\xb4\x76\xe1\x00\x2f\x60\xfc\x47\x96\x41\xc3\x9b\x84\x64\xdd\xdb\xba\xe6\x03\xe8\x9d\x10\x04\x88\x2c\x9b\x06\x1c\xcc\xb8\x65\x5b\x42\x47\xb8\xa8\x03\xe1\x6e\xa3\x0e\x9a\x8c\xcf\x42\xe9\xd5\x8f\x11\x38\xcf\xea\xcb\x13\xd1\x1f\xa0\x13\x4a\x08\x10\x59\xfe\x76\x0d\x58\xbb\x66\xa4\x7e\x69\x6d\xdb\xbb\xe3\x52\xe4\xdc\xf5\x0a\x3d\xab\x37\x25\xb4\xfc\xd4\x4d\x36\x72\xc9\x92\x2a\x18\xba\xf2\x01\x01\x22\x4b\xed\x67\x15\x78\x3e\x5c\xe3\x65\x6b\x2b\xb3\xee\x92\xe2\x38\xc4\x57\x4e\x10\x1f\x37\xb3\xc9\x56\x55\x9b\xcf\xce\x8a\x85\x81\x30\xf3\x02\x88\x2c\x25\x6a\xee\x0a\x8e\xb5\x63\xda\xee\x75\x43\xd2\xf6\x47\x3a\xe4\xf2\x09\x5e\x60\x64\xd1\xc4\xf0\x83\x25\x72\xc2\x28\x1d\x26\x61\xe6\x05\x10\x59\x86\xcb\xaa\xdc\x18\xe3\x97\xf3\x45\x34\xc2\x27\x32\xc7\xfd\xee\xc1\x6b\xb4\x46\x2c\x27\xd0\xb4\x8a\xe9\xd1\x47\x15\xeb\x8a\x86\xee\x35\x84\x00\x91\xa5\x47\x9b\xa6\xca\x90\xc7\xe1\x80\x3e\x42\xac\x9f\x1a\xb7\xc3\x42\xb1\x1b\x5a\xc1\x6a\x6c\x2d\xb9\x4b\x00\x7f\xd0\xec\x5c\x19\x74\x65\x11\x02\x44\x96\x36\xbb\x02\x11\xc5\x79\x0f\xf4\x3d\xa5\x14\x9a\xcf\xc4\xe3\xe5\x8a\x50\x93\xac\x8f\xbb\x2d\x06\xb4\x49\xfe\x22\x1f\x07\xad\x43\x57\x3a\x21\x40\x64\x79\x3a\x85\x44\x9d\xd7\x2f\x46\x6b\xd5\x5d\xe8\xab\x71\xf1\xd1\xb3\xbd\xa9\xa1\xa7\x0a\x67\xf7\x73\x95\x3f\xdc\xf5\x11\xba\x0f\xcc\xf7\x0c\x44\x96\xe2\x4f\xb3\x65\xdf\x89\x51\xed\x7d\x66\xec\x88\x69\x23\x0e\xda\x34\xf7\x7d\x31\xf3\x76\x17\x53\x12\xeb\x94\x29\x10\xfd\xa4\x05\x3a\x81\x83\x00\x91\x65\xf5\x8c\x7d\xd5\x69\x64\x14\xc9\x67\xf5\xbe\x92\xa8\x1b\x46\x4d\x54\x3d\x2d\xc3\x44\xaa\x0a\x8f\x30\x39\xf6\x41\x94\x8c\xa7\xd0\x3b\x57\x08\x10\x59\x66\x7d\x96\xd5\xfb\xbe\x9a\x5e\x2e\x8b\xcd\x2b\xf6\x0a\xce\x74\xe7\x43\xe6\x6e\x71\xbd\xad\x65\xe6\xef\x14\x91\x41\x0e\xc3\x46\xe8\x3f\x19\x04\x01\x22\xcb\x2d\xba\x66\xdc\x3c\x6c\x04\x90\xb8\xf6\x9d\x11\xba\xab\xde\x73\xd1\x9f\x36\x51\x6c\x1d\x97\xcd\xb3\xcc\xb5\x25\x75\xe2\xd4\xd0\x15\x77\x08\x10\x59\x2e\xa7\x32\x9b\xda\x7c\xa1\x0e\x3e\xb7\xcf\xa5\x8f\x99\xab\x3a\xa7\x3b\x4e\x7f\x3f\x2f\x65\xa3\x38\x62\x57\xfc\x6b\xd5\x26\x1c\x7a\x63\x03\x01\x22\xcb\x6a\x85\x2e\x45\xf5\x4e\x24\xcf\xe4\xb0\xba\xfb\x0e\x17\xf8\x07\x9a\x7a\x8b\xc6\x6d\xb1\x41\xf8\xcb\x7b\x73\x14\x39\x4b\x53\x98\xdf\x1d\x88\x2c\xb9\x8a\xed\xeb\xb6\x06\xda\xe0\x9f\x41\x2e\x7e\xff\x54\xd9\xc8\x82\xf7\xd3\x1d\x36\xc2\x13\x4e\xde\x17\xec\xbc\x51\x8c\x3a\x80\xb9\xe1\x01\x91\xe5\x22\x53\xf5\x65\xb6\x6a\x05\xeb\x76\xec\xa4\x36\xaa\x32\xf6\xf9\x54\x6d\x09\x7a\x7d\x5c\x3d\x9f\x7c\x09\x6f\xe1\x65\x16\xcc\x43\x15\x10\x20\xb2\x14\x47\x5d\xa8\x9f\xb6\x4c\x28\x7c\xda\xd3\x7d\xfe\x6b\x34\x29\xe5\x93\x78\x0c\xb1\xb0\xd0\x9d\x9e\x9e\x84\x21\x3f\x6e\x70\x36\xcc\xfc\x02\x22\xcb\x62\x26\xe9\xf8\x0a\x4a\x9a\x46\xa9\xe4\xd3\x5a\x63\xa4\xbb\xb5\x5d\x4c\x4e\x8b\x28\xae\xd2\xfc\x84\x76\x14\x43\x04\x57\x98\xde\x3e\x08\x10\x59\xc2\x6b\x14\x97\xcf\xe4\xf6\xf9\xff\xdd\x5f\xf3\x45\xe4\xfc\xdd\xa9\xc5\x68\xcd\xf0\x64\x8c\xc3\x5f\x85\x54\x52\x79\x2c\xc8\x11\x26\xd1\x01\x22\xcb\x1f\x7a\x28\x6a\x2c\x99\x11\x47\x02\xc1\x45\x2b\x77\xe3\xeb\xa9\x11\xdf\x59\x37\xa2\x78\xcc\x30\x3c\xb9\x5b\xec\x23\x2a\x2f\xa0\x5b\x5c\x20\x40\x64\x69\x7d\x91\xa3\x6b\x9d\xfb\x69\xed\x2b\xc2\xe7\x29\x2c\xc4\x37\x4f\x74\x36\x57\x4e\x97\xf4\x11\x6a\xee\x17\x6b\x8e\x9f\x85\x7e\x84\x16\x00\x08\x10\x59\x0a\x14\x21\xc9\x64\x9f\xfc\x0a\x40\x5b\xf0\xc3\x78\x47\xb2\x2c\x41\x07\x5a\xde\x29\x78\xcb\x39\x9f\x59\xf3\xe6\xa3\x90\x6d\x0c\x74\x65\x11\x02\x44\x96\xf4\x89\xa5\xf7\xda\x78\x42\x42\x03\x3e\x5b\x72\x96\x7b\xbb\x20\x81\xef\x62\x8c\x78\x6c\x81\x98\xf2\xe8\x31\xd4\xad\xa3\xe6\x30\xe3\x07\x04\xdb\xf4\x8d\x2e\xe7\x99\x66\x77\xe4\xb6\x5c\x43\x9b\x68\x2e\xa4\xec\x24\xa2\xb5\x51\x9d\xdf\x1e\x46\x7e\xe5\xd7\xfb\xb9\x57\x20\x4b\x89\xf9\x3f\x27\x4c\x3d\xc5\x53\x1e\x81\x75\x57\x9b\x1d\x25\x60\xd4\xe0\x6b\x8a\xfa\x8a\x0d\xeb\x81\xea\x0c\xbc\xe2\x8f\x0a\x1f\x88\x8f\x89\x7c\xa1\x7b\x3e\x20\x40\xc6\x59\x1d\x11\xf7\x11\x7f\xe2\x95\x4a\x00\x7c\xc5\xb4\x90\xdd\x40\x0c\x2d\x95\x9d\x40\x9d\x67\x8d\x63\xad\x85\x35\xba\x75\x03\x05\x74\x0f\x0a\x04\xc8\x38\xe7\x55\x66\x51\x46\x89\xd2\xcf\x36\x7a\xec\x7c\x7f\x99\x22\x2e\xc1\x5b\x45\x5f\x13\x93\x16\xb1\x9f\xb6\x3b\x25\x53\xd0\xd9\xc0\x2c\x10\x40\xc6\xa9\x50\x32\xe6\x7c\xf9\x76\x9a\x5a\xbe\x0b\xce\x48\xef\x23\xe9\xeb\x58\xcd\x1f\xcf\xe3\x30\xfc\x0c\x74\x63\xab\x2e\x44\x84\xd2\xa0\x9b\xd0\x21\x40\x8f\x65\x8e\x9f\xfa\xee\x23\x0d\x50\x0c\x29\x5e\x53\xba\x1f\x9c\x71\xdf\xd4\xbd\x97\xd3\x8d\x5f\xb3\xeb\x78\xc3\xf5\x94\xad\xef\x07\x1f\xcc\x71\x80\xc8\x12\xab\xcf\x62\x3f\x17\x3f\xce\xf5\x3a\x3a\x6b\x7b\x16\x82\x7c\x90\xed\x6f\x16\xe6\xcb\x2d\x91\x72\xda\x26\x53\x57\x59\xcd\x0d\x4d\x21\x10\x20\xb2\x74\x9a\x3f\xa3\x42\x72\xad\x2d\x52\xad\x0b\xb5\x66\x81\x67\xb8\x3a\xd5\x54\xc8\x63\x73\x96\x22\x45\xfd\x9a\x63\xd9\x52\xc0\x02\x93\x58\x00\x91\xe5\x3d\xa3\x7f\x0b\xc7\x36\xea\xf9\xef\xac\xcb\xcf\x9d\xd1\x1a\xb6\xef\x7d\xe1\x08\x9f\x20\x8b\x6f\x6b\xb0\xd7\x4b\x73\xf2\x44\xc3\x24\x16\x40\x64\xf9\x7e\x1d\xc2\x4f\x46\x8c\xf5\x8e\x9f\xdc\xa3\xbb\xe7\x98\x86\xfa\x60\x4e\x85\x55\x80\x55\x88\x74\xbb\xce\x40\xe8\x39\x66\x07\xec\x75\x01\x11\x4f\x0b\x71\xf7\x2c\x31\xfb\xb5\xc8\x72\x5c\x62\xc6\x83\xbb\x28\xad\x06\x86\xb5\x08\x6f\x07\x5a\xe2\xe0\x34\x13\xbf\x84\x10\x74\xe5\x03\x02\x44\x96\x14\xbe\x4c\x5c\x5d\xb3\x27\x26\x81\x7b\x79\x23\x63\xaf\x7e\xaf\x98\x6d\xb9\x94\xbf\xfe\x23\x97\xce\xfe\x77\x3c\x7f\xb6\xcf\x14\xba\x17\x01\x02\x44\x96\x47\x0c\x38\xe2\x88\x19\x8a\xfc\x58\xef\x3b\x9e\x83\x55\xf3\xa3\x2c\x90\x87\xa3\xbc\x55\xba\x3f\xe9\x7d\xf9\xf0\xf6\xd3\x49\x3a\xcc\x8d\x13\x88\x2c\x11\x4f\x68\x13\x30\x8b\x31\xd0\x4c\x88\x27\x28\xab\xdd\x46\x5e\x29\xbc\xa7\x34\xf5\x55\x0f\x74\x44\x17\x3a\xa5\x15\x8b\x3a\x82\x3d\x0e\xc0\x78\x6e\x14\x1a\xfb\xd4\x18\x23\xef\x80\x9b\x66\x27\xcd\x5a\xcd\xc9\x23\x4f\xb8\x1b\xd9\x74\x74\xa0\xa8\xa6\xce\x2a\x0e\x22\xfc\x09\x33\xbf\x80\xc8\x92\xb3\x3e\xb2\x53\x2a\x3b\xab\x24\xe2\x68\xaa\xed\x73\x7e\xe2\xcb\x79\xd5\x32\xda\xab\x0f\x19\x5f\xbd\x99\xa7\x57\x04\xe8\xcb\xa0\x2b\x79\x10\x20\xb2\xc4\x31\x36\x50\x4f\x7a\xce\xee\x62\x4e\x5b\x5b\x10\x2f\xd1\x2a\x1f\x83\x85\xa9\x4c\xcf\x0a\x8f\xc0\x9e\x6e\x61\xa1\x30\xd5\x0e\xdd\x63\x01\x01\x22\x4b\x3d\x9c\x92\xd2\xdd\x7d\x99\x77\xc9\xc6\x07\x45\xf2\x83\x54\xdf\xf4\x90\x31\x08\x6f\xc7\x59\x76\xf9\xa2\x9f\x37\x7d\x1a\x7a\x0a\x93\x30\x01\x91\x65\x69\x13\x35\xa9\x32\xe6\x88\xd2\x05\x16\x73\x64\x33\x3a\x4e\x0e\x35\xe1\xf3\x65\xb6\xcf\x5e\x52\xd3\xfd\x7f\x4f\x35\xc5\x3f\xc1\xac\x1b\x40\x64\xe9\x3f\x56\x00\xc7\x48\x16\xc3\xa9\xf1\x85\xfa\x4e\x5f\xac\xdd\x32\x38\x44\xfd\x09\x13\x78\xa4\x3d\x40\x35\xd8\x6a\x86\x79\x1e\xba\x17\x13\x02\x44\x96\x34\x2f\x2b\x1a\xeb\xb1\xfd\x4f\x16\x84\x70\x7c\x75\x8d\x71\x5f\xd2\x0b\x63\x05\x75\x4d\x88\xac\x3d\x5b\xdb\x93\xcb\xf3\x87\x40\x53\x23\x04\x88\x2c\xb1\x62\xd8\x3b\x9c\xef\x14\xda\x52\x1c\x2b\xd8\xbb\x02\x52\xb1\x0a\xf9\x9e\xef\x56\x05\x6d\x2c\x2e\x73\xbc\xb0\xfc\x9b\x99\x0a\x93\xe0\x02\x91\x65\x46\xb8\xad\xae\xe7\x42\xdf\xf8\x48\xa8\xe0\x5b\x4e\x85\x6f\xd7\xfb\x74\xf1\x8d\xe4\x86\x43\x15\xa4\x10\x1e\x99\x94\x56\x44\x98\x8d\x0d\x10\x59\x2e\xc7\x3f\x75\xe2\x92\x01\x2b\x0e\xd9\x64\xe5\x67\x3f\xf9\x65\x61\x6b\x01\x57\x20\xe5\x13\x70\xa2\xc4\x4a\x78\x3c\xdf\x2c\x06\xb3\x11\x05\x22\xcb\xbe\xba\xf4\xf5\x02\x3b\x5a\x21\x43\x4d\xf4\x13\xa3\xc0\x21\x4f\x09\x62\x7b\x0a\xca\xf9\xa1\x0a\xb3\x37\xb3\xf6\x4b\x15\x60\x68\xe2\x81\x00\x91\xe5\xd3\xb0\xdc\xeb\xe1\x48\x92\x1b\xbc\xe8\x55\x39\xdc\xe8\x4d\xfe\x97\x83\x86\xb5\x3f\x69\x79\x2a\x03\x75\xd3\xc8\x23\xde\x8a\xc2\x1c\x07\x88\x2c\xaf\x73\xcf\x0b\xe0\x0c\xee\x30\x97\xf8\xd2\x86\x55\x7b\xd8\x43\x7e\x48\x8d\x1b\x47\x4f\x96\x91\x68\x8b\xa5\xa0\x0e\x2b\xc1\xfc\x91\x5a\x08\x10\x59\xb2\x7c\xc4\xf7\x4a\x06\xa5\x64\x1b\x94\x1a\xae\x2a\xe5\x9d\xbb\x1e\x36\x39\x13\x05\xb4\xc8\x4f\xea\xcc\xe5\xcf\x28\xcd\x66\xc1\xdc\x2f\x80\xc8\xd2\x0a\xa4\x9e\x69\x60\x4a\x96\x59\x79\x74\xf9\x8a\x53\x7c\x4b\x74\xe8\x34\x5c\x4a\xf8\xca\x94\x25\x58\x83\xd1\x41\x80\xbd\x05\x66\x5d\x05\x22\xcb\x8c\x97\xec\x68\x68\x6f\xac\x75\x4e\x7d\x4c\x94\xdf\x09\xb6\x3a\x7f\x91\xbd\x06\x91\x15\x75\xd6\x8f\x3b\x47\x5f\x6a\x7c\x8a\x84\x59\x0f\x81\xc8\x52\xec\x65\x96\xaf\x20\xd6\x9d\x88\x51\x14\x3f\xc2\xbd\x3e\x1a\xfc\x14\xe3\xc7\xa0\x41\xd9\xa1\xa5\x3a\xfb\xec\x2d\x87\x7a\x54\x98\x84\x1b\x88\x2c\x93\x76\x35\xdf\xdd\x30\xbc\x80\x5f\xda\xa1\x44\xd4\x1f\xfb\x1a\xa7\xf5\xb4\x72\xb6\x5a\xf9\xe8\x48\xe4\xf6\x88\x7d\xa6\xe2\x3d\x74\xcf\x19\x04\x88\x2c\xa7\x9e\x53\x15\xca\xdf\xba\x8e\x54\x44\x3a\x76\x27\xf5\x99\xaa\xa2\x7e\x7f\x6d\xf7\x77\x68\x64\x28\xfe\xe5\x5e\x6a\x4f\x6c\x02\x4c\x21\x83\x0b\xb6\xe9\xfb\x57\x80\xfc\x1d\xb5\xf7\x0f\xa6\x2b\x5f\x13\x9c\x01\x02\x41\xdb\x09\xfc\xa3\x57\x34\xab\xdf\x56\xf6\x33\x4e\x57\xe5\x93\xa3\xb8\xfe\x73\xc2\xc4\xaf\x2f\xea\x2b\x2e\x89\xb3\x48\x82\x54\xc1\x87\xba\xfd\x52\x23\x4d\x5b\x3a\xba\xd3\xa1\x39\x7f\xf7\xf6\x53\x2b\x7e\x78\x2e\xec\x05\x00\x4c\x80\xcf\x84\x5f\x11\x3c\xcc\xf3\x2b\xe1\x34\x05\xd6\xe3\xd6\x15\xea\x05\x7c\xa3\x85\xf8\xdf\xe9\x13\xc5\x17\x8b\x78\x0c\xfb\x0d\xc2\xdc\x18\x80\x8c\x53\xcf\xcd\xe3\x07\xc5\x96\x8d\xf7\x91\x3d\x79\x00\x5a\x97\xd3\xaf\xaa\x40\xb4\xfd\x9c\x5c\xf8\xd3\xe9\xa2\x19\x3b\xf0\xe1\x0a\x4c\x25\x06\xc8\x38\xe9\x8a\xf2\x2c\x28\x7e\x69\xf8\xbd\x5c\x3b\xbb\x70\x09\x16\x0b\x18\x0c\x8b\x26\x14\x3c\xea\x20\xa9\x3c\x7f\x73\x97\x6e\x44\x04\xfd\xb4\x02\x04\xe8\xb1\xcc\x90\x9d\x20\x77\x53\x37\xe2\x5b\xfd\x49\xd2\x86\x1c\x22\x54\xf6\xb7\x8b\xb1\x7d\x5b\x51\x49\x8a\x27\xb9\x5f\x04\x66\xa4\x38\x60\x06\x2e\x10\x59\xc6\x6e\xce\xa1\xbc\x5a\xc5\x12\x65\x95\xde\xfb\x65\xa0\xe0\xb1\x42\xda\xca\x6d\xf7\x85\xb3\x2e\x3c\xa6\x20\x3e\xec\x99\x33\x3b\xcc\x44\x02\x22\xcb\x4c\x42\x21\x07\x83\xde\xf4\xeb\x46\x67\xeb\x33\x19\xfe\x1f\x1f\x23\x94\x47\x26\xef\x16\x18\x6c\x5d\x07\xbd\x17\x50\xdf\x06\x40\xbf\x18\x0d\x02\x44\x96\x21\x2a\xac\x60\x86\xaa\xda\xdf\xca\x1c\x54\x3f\x1d\x3a\x0e\xd1\x34\x23\x7f\x99\xc8\x41\x32\xb8\x9e\xac\x9b\xb7\xe1\x2c\xc6\xc0\xdc\xa8\x80\xc8\x72\x92\x9e\x17\x51\x64\xdd\xb6\x66\xad\x78\x8c\xe9\x94\x63\xcd\x84\x21\x7d\x9c\x55\x61\xfa\xd5\x92\x87\x04\xdc\x2d\xe3\x84\x33\xcc\x82\x05\x44\x96\x70\x82\x66\x63\x06\x6a\x01\xc9\xd4\x0c\x0b\x7e\x90\xa4\x48\x81\x77\x3f\x7f\x86\x9f\xb7\xe8\x74\xdc\xc5\x68\x1e\x88\xb3\x8f\x40\xf7\x8e\x40\x80\xc8\x52\xbd\x43\x92\xa4\xc7\x6d\xd2\x5c\x29\xd9\x49\x87\x81\x1d\x25\x93\x29\x37\x31\x63\x05\xc2\x5b\xa2\x98\x97\x5e\xe1\x51\x85\x00\xfd\x94\x13\x04\x88\x2c\x79\x92\x04\x56\x3f\xff\x70\xd7\x09\xeb\xc9\xa5\x0f\x6a\x40\xa5\x30\x7c\xee\xf2\xb4\xa8\x4d\x97\xb4\x3a\x58\x93\x54\xc0\x71\x19\x66\x87\x07\x44\x96\x74\x08\xb7\xb6\xe1\x3b\x52\x93\x02\x96\x95\x32\x25\xb1\x64\x7c\xe1\xf1\x28\x8b\xdd\x3f\x35\x67\x0a\x7f\x5b\xcc\xbc\x2f\x10\x83\xa9\x34\x00\x91\xa5\x09\x05\x7b\x35\xd2\x8f\x21\xdc\xaa\xd8\x6c\xe3\x40\xf5\x75\x1f\xa4\x64\xed\x14\x24\x57\x8e\xc0\x88\xf7\x69\x29\xd1\x96\x1e\x30\xf3\x02\x88\x2c\x4f\xff\x96\x5c\x87\x6d\x4e\x06\x7c\x7c\xd9\xb6\x8e\xb6\x52\xda\x4e\xa9\x7c\xc4\xff\x06\xe1\x4d\x29\xad\x79\xa4\x12\xb8\x54\x0a\x26\xd1\x01\x22\xcb\xdc\xd2\xd8\xa6\xdd\x55\x1a\x33\x63\xad\x33\x41\x2a\x36\x54\xd1\x28\x29\x19\xc1\x3c\x3b\x7f\xce\x86\x4e\x4a\x15\x61\x2f\x7c\x98\x9d\x3d\x10\x59\xae\x63\x7f\x37\x1f\xb9\x18\x5a\x50\xa8\xc3\x19\x6d\xb4\x76\xdb\xf4\x92\x37\xc7\x66\x66\x24\x7e\x22\xec\x8b\x58\x1c\xde\x6f\x06\xfd\x7e\x29\x08\x10\x59\xde\x75\x0f\xc5\x9c\x48\x1a\xe9\xc7\x6b\x8e\xbc\x7b\x33\xd6\x7b\x88\xf7\xc4\xec\x28\x24\xb7\xbf\xf5\xd6\x60\x99\xce\xda\x71\x0e\x26\x21\x00\x22\x4b\xbe\x3b\x96\x81\x89\x81\x96\x3f\x41\xf3\x76\xc1\x99\x39\x54\x12\xef\x9a\xb1\x16\xa6\x1a\x56\x06\x1d\x59\x5e\x10\x1f\x44\x62\xc2\x24\x04\x40\x64\x79\xb4\x39\xfd\x39\xba\xe9\xe4\xca\x65\xce\x5f\xb0\x6d\xce\x58\xa1\xb7\x4f\x1d\x65\xbd\x5a\xd4\xab\x3c\x40\x40\xec\x25\x17\x23\xcc\xba\x01\x44\x96\x36\xb1\xdb\x98\x36\x15\xe1\xab\x4d\x2b\x1c\xd3\x42\x5e\x3b\x2e\xd7\xaf\x5a\x0e\x32\xe4\xc8\xdc\xd9\x6b\x8f\x58\x91\x5f\x7f\x86\xee\x89\x81\x00\x91\xe5\xd7\xe6\xe0\x69\x1b\x79\x97\xb7\x83\xd7\xd9\x7f\x6a\xce\xaa\x8f\xcf\x70\xc6\x71\x0b\x58\x92\xdc\x5d\xe8\xa7\x1c\x6a\xf9\x3f\xc0\x7e\x3f\x00\xe3\xd9\xdd\xdf\xdb\xed\x39\x79\x99\xf3\x0f\x97\xf2\x3a\x0e\x5f\x47\x27\x37\xa9\xb4\xa2\x7c\xe6\x3f\xca\x29\xc6\x82\x38\x4f\x64\xaf\x60\x2a\x0d\x40\x64\x89\xb2\xfe\x3a\x06\x39\xdd\x35\x69\x41\xd1\xb7\x4c\xaf\x7a\xb0\xd5\x7b\xfe\x8d\x28\x3d\xb2\xc3\xd3\x36\xd2\x27\x19\x46\xa5\x69\xd0\x3d\xaf\x10\x20\xb2\x3c\x5d\x24\x72\x9f\xee\x70\xc5\xf2\x75\xff\x9d\x67\xbf\xb0\x44\xcc\x67\xc4\x87\x2f\x52\x70\xc7\x2f\x9d\xd0\xb4\x56\x56\x9b\x0b\x4d\x60\x10\x20\xb2\xe4\x8a\x1d\xa7\x25\xf9\x34\x2c\x4a\xfe\xb6\xd8\x38\x2e\x40\x6e\xf1\xa7\x41\x99\x1e\xba\x43\x0a\x08\x39\xd7\x57\x19\x19\x14\x0a\x4d\x96\x10\x20\xb2\x2c\xc3\x79\x89\xe4\xdb\x64\x7b\x9f\xde\x7c\xc2\x98\xfb\x06\x09\xf2\xf4\xdd\x51\x20\xd7\x22\xd6\x3e\x17\x19\xd5\xf0\xee\x24\x18\xa6\x02\x07\x44\x96\xd9\xb4\x23\xfd\x66\x2f\xf5\x17\x5e\xc2\x4f\x65\x4b\xc5\x15\xfb\xf3\xc7\xd6\x5f\x3d\x65\xc3\x1b\xc9\xb1\x4a\xc1\xa7\x6e\xab\x83\x49\x94\x81\xc8\x52\x9a\xe9\x58\xf6\xa3\x07\xc7\x0b\x5f\xf5\xa4\x1d\x7c\x5c\xe7\x40\xdc\x7b\x15\xd0\x5c\xfb\xba\xdb\x08\x96\x5f\xc9\xd3\xbc\xbf\x30\x94\x06\x44\x96\xf5\x62\x91\x07\xb6\xfe\x3a\xcb\xfe\xc6\x63\x1f\xdb\x27\xc6\x9f\xf6\xcc\x16\xdd\x5d\x83\x67\x3e\x4c\xd1\x1b\x20\x1d\xc7\x6b\xc2\x6c\xd4\x81\xc8\x32\xe1\xa5\x2d\x41\xbd\x48\xe6\xac\x1e\xfa\x69\x2a\x89\x82\x52\x1c\xa2\x0e\xf5\x0e\x56\xe8\xfa\x38\x8b\x0c\x66\xbc\x95\xd7\x20\xec\xe7\x01\x18\xcf\xe5\x0f\x3e\x02\xd1\xf2\x59\xe7\x6f\x66\x11\x45\x43\x63\xbd\xdf\x86\x78\x98\xb2\x38\x99\x22\xc5\xec\x4e\xe7\xba\x9c\x45\x19\xc0\x54\x94\x1f\x91\xe5\x11\xea\xff\x24\x4c\xfb\x7c\x90\x61\x4b\xeb\xaf\x29\x6d\x81\xc5\x04\x70\xaf\x5c\x83\xec\x53\x1c\xf5\x1a\xe6\x17\xe2\x4e\xb3\x3b\x3c\x04\x2a\x7f\x47\x05\x20\xc3\x93\x20\x0b\xfb\x4b\xfd\xfd\xfb\x17\x1e\x0e\x0e\x0e\x2e\x99\x64\x9e\x45\x83\x11\xee\x7f\xfe\xb3\x0c\xad\xfc\x1f\xa4\x86\x81\xbb\xb2\xf1\x33\x1c\xcd\x59\xa2\xba\x43\x49\xb5\xbb\x0c\x89\x0b\x02\x96\xdd\xc1\x95\xaa\xb9\xd7\xd8\xff\x17\xfa\x7f\xa1\xff\x17\xfa\x7f\xa1\x3e\x35\x08\xff\xbb\xc0\xff\x6f\x9d\xf9\xfb\x3f\x5b\x34\x61\x7f\x38\x2a\xaa\xff\x7f\xfe\x17\x89\xfe\x3f\x5f\x1a\x69\xda\x5e\xe8\xad\x45\x14\xdb\x07\x4f\xb8\xd1\xe9\xc5\xb4\x5f\xe6\x0d\x1e\xaf\xd5\x8b\x7b\xeb\x90\x9d\x5b\xd0\x73\x33\xde\x05\xf9\xfd\x7f\x7b\xda\x64\xaa\x47\x3f\x88\xb1\x31\xd7\x6e\x1e\xa1\x19\x0d\x85\x98\xf1\xe6\x03\x49\xca\xbb\x0e\xb3\xa1\xbc\x4b\xa3\x9a\x5f\x12\x70\x07\x5f\xbb\xfe\xf2\xbd\x7b\x14\x3a\x08\x8e\x74\xd8\xfe\x23\x81\x97\x90\x3d\xc6\x6d\xcd\x8b\x9a\xb7\xba\xee\xda\xe5\xb4\x6e\x70\x52\xa6\x14\x6f\x36\xf2\xf1\xde\xfd\x51\x28\xcd\x98\xdb\xfa\x77\xd7\x86\xb3\x1c\x4a\x6c\xb4\xe1\x34\xf6\xd5\x65\x94\xe0\x78\xc2\x24\x88\x53\xbe\x88\x72\x6a\x2d\xfc\xdc\x9b\x47\xa1\x97\x26\x81\xcd\xbd\x5d\xab\xc5\xd1\x38\x5b\xea\xfe\x4f\x1a\x53\x9b\x04\x7f\xd8\xfe\xba\x9a\xfe\x88\x45\xba\xcd\x00\xe6\x28\x40\x7f\x14\xfa\x34\xf9\x54\xb7\x8c\xd1\x04\x95\x66\xd2\x8f\xc8\xbc\x97\xe0\xfb\x1d\x42\x4e\xbf\x32\x76\x63\x64\xa2\x13\x3f\x3d\xff\xf1\x4b\xd9\x47\xa1\x76\xb2\x0e\xc3\x1e\xee\xe2\x19\x79\xf4\x26\x96\xad\x31\x58\x3e\xee\xab\x1e\x5f\x91\x79\x91\xf5\xa3\xc6\x2e\xa8\xe1\x90\xf3\x11\x1e\x85\x26\xf7\x9e\x60\x18\xa9\xcf\x1d\xda\x62\xf6\x81\xb8\x9c\x2e\x9f\x2c\x53\x92\x6f\x9b\x0a\x1a\xc8\x4e\x31\x3d\xe5\x7e\x2f\xa9\x39\xf1\x28\x74\xd6\xca\xb2\x60\x2c\xce\xe7\x2e\x5b\x6e\x21\xa5\x95\x91\xf7\x2d\xf1\x85\xd7\x3e\x5c\x92\xaf\xc1\x28\xc2\xa8\xdf\x04\xe1\x5d\xdd\xa3\xd0\x08\xbb\x77\xa9\x62\x6a\x49\x53\x76\x3c\x44\x04\x74\x7b\x5e\xf8\x1c\xf0\x28\xc6\xc7\x32\x46\x8b\x8b\x93\x56\xc4\x77\x16\x69\xc8\x8f\x42\xb1\x71\x98\x07\x7c\x20\x3f\x89\xd1\xa8\xb4\x52\x59\x1d\xf7\x3f\x6f\xee\x6c\xd5\x79\x68\x34\x98\x8a\x74\xc4\x79\x1c\x70\xf9\x33\x3d\x0a\x25\xe8\xf8\xcc\xfa\x96\xdb\x40\xe5\xa1\x94\x73\x74\x7e\xdb\xac\x5a\xb5\xd4\x47\xab\x78\xbe\x30\x65\x9d\x79\x8c\x7e\xf7\x44\xb2\xf9\x71\xa8\x41\xfe\x38\x46\x96\x8e\xeb\xae\x42\x31\x99\xf8\xeb\x68\xe5\x2d\x4a\xd5\xbc\x23\xee\x05\x7f\x02\x3d\xc7\x3e\xfc\x4b\x8f\xcc\x47\xa1\xaf\xec\x47\xe5\x0f\x5f\x15\x1f\xdc\xec\x2d\x38\xad\x64\xd2\x06\x3e\xe5\xdb\x5f\x98\xb7\x98\xe6\x77\xbf\xa8\x1f\xb0\x4c\x12\x71\x79\x14\x6a\x51\x1b\x5d\x59\xd2\x60\xf7\xca\xf6\xaa\x45\x11\x2b\xd3\xdf\x53\x98\xef\xf8\x82\x5b\x25\xd2\xb3\x1d\x5b\xbf\xcb\x9d\xd4\x4d\xf7\x51\x28\xd2\x81\x79\xc6\x8f\xbd\x3c\x5e\x3f\xc2\xe3\x2c\xc5\xe7\xf6\xdf\x3c\x76\xb1\x52\x29\xb1\xdf\xbf\x66\xac\xda\xcd\xfa\xf6\x91\x8a\xfe\x51\xe8\xcf\xca\x5e\x19\xe7\xd5\xe0\x37\xf9\x54\x47\x36\xfd\x78\xd7\x29\xc9\x05\xc3\x9f\x30\x10\xab\xb4\xdf\x06\x5c\x4b\x26\xda\xd4\xb9\x3d\x0a\xb5\x56\x3c\x64\xbb\x3f\x40\xba\xae\x2b\x9a\x4f\xca\x7d\xeb\x40\x98\xee\x6d\xec\xa0\xb3\x18\xe4\xb7\xb4\xf8\xee\xdb\x09\x7e\xe7\xee\xa3\x50\xcc\xb0\x2b\x8c\x67\x75\x9f\x1a\xc2\x67\xcc\x18\xb5\xca\x22\xd6\x65\x76\x6d\xe5\x58\x39\x15\x79\x73\xce\x70\xd0\x42\x33\x2d\x3a\x1e\x7f\x00\x34\x06\xf2\xbb\xb1\x81\x84\x46\xbc\x22\xc5\x28\x7e\x92\x1d\x9a\x98\xc4\x32\x9c\x64\xcb\x20\x19\xe5\x71\x92\x2a\x91\xfa\xfe\x47\xa1\x88\x9d\x36\xda\x89\xd2\x07\x2d\x28\x26\xb4\xb9\x93\xe5\xd5\xd4\xbe\xae\xc1\xb5\xbf\x70\x99\x92\x82\x8a\x90\x82\x92\x17\x4c\xd2\x1f\x85\x36\xd2\x07\xbb\x33\x0a\x8b\x88\x5f\xf5\x25\x28\xec\xed\xe6\x2c\xeb\x04\xf0\xf1\x23\x27\x05\xdb\x6a\x3c\xd4\xa8\xe7\x1b\x69\x41\x1e\x85\xba\x65\xa4\x73\xb2\x9c\x87\xde\x09\xa3\xe2\x66\x99\xe4\x9b\x22\x1d\xb9\xfc\xc9\x92\x9f\x74\xde\x7c\xf1\x5b\xf3\x23\xa9\x75\x21\xe6\xa3\xd0\xe3\xc9\x94\x86\xc6\xbc\x74\xb6\x15\x64\x76\x16\xe9\x4f\xfd\xec\x05\xdb\x65\x67\x6e\x6a\x31\x15\xa9\x88\xdd\xe1\xc2\xcc\x16\xcf\x1e\x85\x4e\x21\x99\x2d\x17\x4d\xbb\x07\xc6\x8a\xb8\x2a\x9b\xea\x5f\x77\x9d\xa5\xc6\x50\xd6\xa2\x52\x1c\xd7\x7c\xfa\x7e\x54\xa0\xaf\x3c\xfc\x78\x10\xca\x31\xd7\xca\x30\xfe\x45\xe1\xd6\x7b\x9f\x35\xf4\x56\xe6\xd7\x7b\x03\xe5\x3b\x75\x85\xf8\x6c\x6e\x36\xba\x2e\x75\x82\x07\xce\xc7\x13\xa6\xf5\xac\x3c\x28\x47\xd7\x3b\xdc\x3b\xcd\x41\x6d\x33\x2b\xac\xf6\x84\x92\x30\x64\xcf\x7d\xf6\x5e\x91\xf4\x88\x82\xfd\x5c\xe2\x51\x68\x7c\xde\x42\xb8\x66\x24\x23\x26\xd2\x40\x03\xa8\x6c\x56\x06\x42\x44\x5e\x5b\x1f\x4a\xbc\x78\x05\x4e\xe7\x26\x56\x4c\xe1\x09\x7b\x14\xca\xa7\x4f\xeb\xe9\x55\xd4\xfb\xa6\x75\x07\xbe\x40\xf9\xf9\xa0\x27\x7d\x83\x1f\x5e\x84\xf5\x37\x14\x9e\x64\xb8\x2e\x71\xd6\x1b\xb2\x47\xa1\xf6\xee\x7d\x24\x74\xe3\x38\x49\xec\xbf\x4a\x3a\xd4\x16\x63\xb4\x59\xea\xf4\xda\xed\x55\xa4\x91\x6f\x5e\xbf\x18\xca\x43\x5d\xbf\x7d\x14\xaa\x37\x45\xc9\xd2\x13\xea\x47\x2e\xd9\xa7\xa0\xcf\x8a\xb0\x4e\xa2\x35\x65\x37\xb5\x37\x8f\xf2\xde\x90\x0b\x97\x02\xb1\x53\x75\xf0\x51\xe8\x22\x44\xf2\xd9\x85\x39\xfb\x88\x78\xad\x30\xbf\xb6\x22\x76\x93\xb2\xdf\x46\xad\xd1\x82\xbd\x6a\x0a\x1b\x5b\x1c\x85\x1a\x56\xec\xa3\xd0\x62\x99\xa2\x2b\x4c\x2a\xc9\xf4\x4b\xb8\xf9\x25\xa2\x1e\x8b\x9a\x00\x5f\x4d\xa9\x96\x3c\x19\x9c\x39\x2c\xbb\x62\x54\x94\x8e\x9c\x07\xec\xff\xdd\xe2\xea\x27\xde\xfe\xd0\xde\x9e\x4c\xfe\xe8\xd0\x2f\xf1\x8b\x0e\xfa\x3b\xec\xf7\x97\xe9\xf4\xd3\x5e\xc6\x89\x2f\xa6\x80\x98\x3d\x0d\x0b\x66\x84\xe7\x5e\x2e\x70\xe2\x91\xc3\x3f\x9e\x60\x52\xad\xa1\x33\x33\x29\x34\x3e\xa3\xb2\x26\x97\x2e\x2e\x23\x89\x5c\xa1\x7a\x74\x7d\xfd\x4b\xa8\xbb\x5c\x1c\xda\x1a\xd1\xe7\x7f\xfc\xfc\x34\x18\xfe\x27\x32\x15\x81\x9e\xf9\xca\xbb\x32\x96\x76\x9e\xba\x6e\x64\x89\x2a\x65\x66\x06\x9b\xee\xae\xac\xc0\xa6\x71\xbf\x19\xd1\x6b\xf0\x2e\xf4\xf2\xff\x45\x36\x90\x9a\x5d\x1b\x72\x2f\x9e\x50\xd6\x86\x38\x38\xfc\xb0\xc6\x1e\xce\xa8\x88\xa8\xe3\x0b\x54\xb5\x57\xed\xf3\x8e\x10\xad\x4e\xb9\xfc\x77\x50\x4d\x46\xb1\xac\x68\x27\x29\xe4\x59\xc9\x9d\x57\x7b\xaf\x21\xed\x78\x38\xc2\xd6\xcd\x65\xae\x4e\x59\x5f\xff\x54\x4a\xac\x35\xcd\xff\x3b\xa8\xe3\x84\x19\x71\xff\x70\xde\x91\xbc\x91\xd2\x78\xb4\xfb\x98\xc0\x69\xf9\x0f\xf2\xf3\x0c\xfd\x89\xec\xb5\x94\xad\x8a\x43\x97\x57\x97\xfe\xff\x2f\x94\x50\x47\x9c\x15\x33\xf4\x7b\x83\xc4\x7d\x98\x64\x7d\xa1\xee\x54\x7d\x8c\x44\x64\x93\x9a\xbb\xf7\xac\x07\xa9\xf5\xbc\xaa\xd4\xd1\xbf\x83\xfa\x55\x7f\xc4\x65\x26\x85\x98\xeb\xb2\x3c\xcb\x08\x96\x5c\x61\xb9\x74\x99\x21\x7d\xed\x2b\xd3\x32\x23\xf7\xcc\xfb\x9b\xec\x8e\xef\xbf\xc8\xc6\xa7\xe8\x22\x04\x23\xb2\x03\x8b\x67\xec\xcf\x1a\x35\x31\xdc\xc6\xb6\xa2\xc7\xd7\x33\x49\x8d\xaa\x54\xb3\x7d\x91\x10\x1c\x30\x1e\x5d\x53\x3d\x7c\x5e\x38\xbb\xf2\x40\x0a\xf8\xd4\x95\x92\xfc\x72\x07\x3d\xe3\x9b\xd2\xd7\x84\x4e\xbc\xe9\x81\x37\x0e\xdc\xcc\xda\x5b\xdb\xff\x0e\x3a\xc5\x48\x1a\x4e\xd7\x86\x6c\x48\x9e\xc6\xf0\x1b\x74\x12\xe6\xb5\x5b\xf3\xc7\xac\x9d\x7a\x5b\x94\x64\x79\x62\xfb\xf8\xa8\x89\xff\xd2\xf7\xff\x85\xce\xd7\x32\x35\xb4\x53\x6e\x55\xbc\xef\xd8\xb7\x0c\x36\x96\xd6\xf9\xf1\xa4\x7f\x88\x83\x58\x5e\x2a\x6d\x09\x31\x9b\xa4\xf0\x20\xea\xd1\xe5\x6b\x85\xd7\x0c\xd6\x09\x05\x4e\x1b\x87\x16\x8a\xa5\xdc\xe4\xc7\xae\xfb\x5e\xab\xa0\xbb\x42\x30\x4a\x03\x69\x23\x0f\x51\x5a\xb2\xff\x9d\xdf\x2b\xc2\x00\x3f\x2c\x45\xaf\x9b\x1b\x05\x37\x7c\x6b\x1a\x95\x91\x2c\x63\x7e\x26\x95\xd1\xca\x86\x5b\x44\x8c\x10\x37\x1f\x14\xf9\x2f\xb2\xde\x41\xf8\xfd\x3c\xfb\xa5\xab\x02\x69\xd5\x57\x71\xe6\x1a\x72\xcf\x83\x92\x93\xfc\x8e\x2f\x57\xd8\x4a\x28\x0f\x5b\x4f\xc8\xdf\x3c\xba\xfc\xb1\xb5\x1f\x4f\x36\xcd\x09\xa4\x6b\xb1\xc3\x7f\x6b\xda\x71\xee\x0f\x65\xe6\x88\x1a\x6b\x06\xf8\x79\x1c\x7c\x52\x6b\xb9\xd1\x26\xff\x77\xd0\x4b\x25\x4e\x84\x43\x95\xf4\x10\x8d\x6b\x0f\x4d\xba\x11\x6b\x47\x67\x8a\xf9\x06\x4b\xc2\xef\xc4\xdf\xb5\x74\x4b\x96\xbe\x6c\x4f\x3d\x3a\xa8\xdb\x52\x52\xa0\xee\x5a\x11\xc7\x7b\x16\x31\x17\x43\x7e\x36\xbf\xcd\xb1\x6f\xed\x20\x01\xd1\xc3\x83\x6f\x23\xa1\xaf\x7f\x80\x7c\xfe\x1d\x74\xd1\x93\xb9\xf2\x0b\x3d\x77\xaf\x70\xda\x18\x88\xa8\x49\x5c\xf9\x7b\x9d\x2c\xdf\x84\x7e\x1b\xb2\x43\xca\x1c\x6f\x70\xfc\x13\xaf\xcb\x47\x83\x3f\x21\xee\xdb\xc0\x99\xde\x5b\x89\x8f\x66\x7d\x32\xc9\x4b\x7b\xc5\x49\x64\x76\xc2\xa7\x66\xc5\x2a\xfe\x4c\x47\x4f\xdf\x58\xf4\x16\xfd\xfb\x4e\xa5\x2b\xa4\x8b\x3e\xb4\x6c\xd4\x67\x9b\x95\xcc\x22\x4f\xf6\x93\x83\xdd\x29\x89\x89\xa4\xe7\x55\x7b\x13\x87\x11\xbc\x30\x4d\x06\xff\x9d\x5f\x43\x9b\xa1\xea\xd5\xa0\x15\x0f\x98\x4d\xce\x9a\x93\x2f\xce\x41\xfa\xc3\x1e\x97\x9e\x57\xd1\x6f\x89\x56\xf8\x64\x71\x91\xdd\xcf\xff\x22\xeb\xf2\xf6\x50\xdd\x04\x04\xd9\x8a\xb9\x19\x25\xfc\xa4\xea\xac\x89\x34\x39\xae\x5b\x7f\xef\xd8\xad\x0f\xc4\xbf\x44\x45\xf9\xc8\xf8\xe8\xf2\x91\x1e\x9a\x33\x73\xcf\x7f\xe8\x63\xc8\xf6\xd9\x8a\xa2\xda\x5f\xa0\x18\x9f\xb1\x5f\x93\x61\x4d\x88\x14\x7f\x27\xb8\xaf\x34\x7e\x74\x50\x83\xb4\x6d\x4a\x9f\x7b\xeb\xbb\xbf\xf1\xc9\x07\xe9\xb3\x83\x90\x63\x3e\x02\xce\xf0\x7a\xff\xd9\x77\x63\x4f\x55\xb9\x68\x3a\x4a\x1f\x1d\xb4\xff\xfb\xab\x75\xf6\xde\xe1\xbf\xfb\x91\xc8\x4a\xa9\xb3\x9c\x16\x4b\x8a\x1b\xbf\x3a\x5e\xa6\x2b\xca\x22\x3b\x21\x9f\x3f\xb3\xe7\xfa\x77\xd0\xcd\x29\xe2\xa7\xcb\x0b\x1f\x25\xd4\xc1\x4c\x95\x74\x28\x61\xfb\x49\x46\x06\xc1\x72\xd4\x05\x0b\xbf\xbb\x9b\x3a\xa2\xf6\x3b\xd1\x1f\x8d\x53\x5c\xb8\xf9\xfb\xf9\x0c\x56\xea\xcf\x49\x41\x79\x73\x2c\x90\x16\x26\x31\x9a\xa2\xbe\xb5\x46\x4c\xa2\x9f\xb9\xf2\x5c\x95\x3a\xd3\x8f\x42\xf1\x69\x20\x1f\xfa\xf4\x76\x2f\x42\x34\x65\xb0\xb6\xd3\xa8\x4f\x67\xf5\xfe\xe8\x7c\x7f\x32\xdf\x0f\xbe\xc3\xc0\xa0\x1c\x90\x8c\x7a\x14\x9a\x7d\xb0\x1d\x5d\x7a\xfd\xbb\x8a\xdd\x22\x83\xec\x7e\xda\xac\x15\x74\xa3\xf1\x41\x63\xbb\xca\xe7\x5c\xe6\xe5\xf7\x0c\xc7\xc3\xe5\x47\x57\xa5\x21\x4a\xfe\xbd\x44\xac\x6b\xb7\x81\xa0\x32\x7f\xc7\x82\xd0\xcb\xf4\xd7\xf7\xec\x2a\xf7\x10\x8f\x3e\x7e\xd3\x73\x72\xd3\xd1\xbb\x7f\x57\x35\x88\x3b\xe9\x9b\x58\x3e\xf9\xb0\x0f\x4f\xf8\x37\xe2\xe3\xac\x22\xe2\xd4\x46\xfb\x77\x6f\x5b\x06\x8d\x68\x1d\xa5\xa4\x92\x9b\xb3\x47\xe7\xe7\x76\xc9\x79\x98\x56\x3c\xeb\x6f\x59\xe9\xb2\xeb\xf3\x2b\x4e\xa7\xc4\x25\x26\x19\x23\x21\xa4\xc4\x16\x9f\xf9\x30\x1c\xa1\xb7\xf5\xe8\xfc\x62\x97\x9f\x59\xc5\xf6\xcd\x37\x52\x31\x44\x9c\x5c\x54\x35\x26\x31\xe2\x34\x89\x59\xde\x9a\xd5\x54\x26\x99\xe6\xea\xd8\x72\x36\xff\x3b\xbf\x9c\xee\xcd\xcd\xb8\x79\x59\x06\x2f\xfc\x59\xb0\x3c\x6f\x9d\xb9\x7e\x4a\x25\xbb\x95\x5d\xac\x41\xfc\x31\x7e\xa6\xef\x5d\x13\xdd\xa3\x29\x4d\x13\xf4\xd3\x3c\x7d\xc4\x50\xa3\x25\x9e\x28\x78\x25\x60\x68\x55\xcf\x4d\x5d\x9c\x16\x95\xc5\x33\xec\x67\x38\xba\xfe\x77\xe3\xa8\x7f\x07\xcd\xc0\x58\xfe\xf2\x79\xe2\xbe\x68\xf1\x54\x58\x1b\x47\x75\x80\xea\xd9\xfc\xde\x94\x56\x7a\x1f\x25\x69\x79\xd4\x6c\xf0\x49\xab\xe5\xbf\xc8\x0e\xde\xc2\x65\x32\xcf\x2b\xa6\xa3\x66\x7f\x2f\x2e\x3d\x05\x7d\x4c\xae\x22\x8e\x9a\xdf\xc1\x66\x2b\x33\xed\x89\x0b\xf7\x71\x3f\x1e\x9d\x9e\xf8\x57\x5f\xfa\x7d\x59\xa7\xc7\x0d\x25\x8b\xd5\x83\x18\x16\xdf\xe9\x9e\x0b\x56\x0d\xe1\x9c\x7b\x6d\x38\xf3\x69\xdd\x28\xc2\xef\x47\xc3\x6f\xa1\xce\xab\x09\x6e\x8c\x55\xf1\x73\x27\xed\x2b\xdf\x12\x2c\xbf\xcd\x48\x94\x8b\x23\x1d\xaf\xf5\xfc\x91\xc0\x16\x32\x32\xbb\x7f\x91\x2d\xed\xa8\x64\x66\x61\x7f\x87\x8e\xe8\x40\xb2\xee\xe1\x08\xc2\xe3\x0d\xc1\x06\x28\x12\xfb\x7b\xae\xf9\x67\x0e\x36\x92\x2f\xd1\x1e\x9d\x1e\xd4\xaf\x90\x4d\x0b\x96\xab\xde\x62\xad\xa0\xa9\x5b\x66\xf9\x45\x31\x9f\x61\x58\x29\x1a\xe8\x89\xc5\xb8\xcd\xf8\x5c\x1c\xeb\xeb\xbf\x83\x2e\x9b\xa5\x4e\x3c\xc7\xb9\xa4\x89\x8c\x78\x18\x6c\xc1\x14\x19\x44\x35\x8e\x29\x78\xf2\xba\x7a\xac\xdb\x35\xc2\xf1\xa3\xe3\xb9\xe1\xbf\xc8\xad\x06\x0b\xa1\x28\x31\x16\xfd\x9f\x9f\x6a\x7e\x81\x25\xde\x16\xa4\x3e\x75\x4c\x74\xea\xb1\x26\x0e\x4c\xd9\x71\x9a\xf0\xd9\xcf\x79\x7c\x8f\x52\x21\xd5\x5a\x44\x7b\x11\xee\x7d\x28\xea\x20\x84\xf1\xba\x99\x99\x97\xed\xa7\x80\x76\xf1\x4e\x03\xb5\x10\x63\x21\xdd\xa6\xf0\xbf\x83\xee\x3d\x54\x1e\x9b\x52\xa4\xb1\xca\xbb\x23\xbc\xf0\x1b\x03\x7b\xc5\x7d\xc5\x59\xb0\xcb\x0b\x5b\x27\x7f\x32\xd9\xfc\x39\xd5\xcc\xf6\xd1\x88\xa2\x8e\x83\x7f\xaf\x50\xbe\x4f\x6d\x5c\xa8\x99\xb1\x61\x87\xfd\x2e\x58\x30\x92\x6e\xe3\x1e\xb1\x3b\x82\x3d\xd3\x20\x7d\x9f\x04\xf4\x28\xd4\xe0\x41\x55\x9d\xbf\x17\x89\x13\x7e\x67\xf9\x07\x51\x02\x53\x74\x8e\x60\x93\xa9\x88\x95\x39\x5a\x85\x46\x5c\xce\xba\xd4\x48\xc8\xa3\xd0\xb3\x5f\x87\x22\x70\xfe\x84\x3b\x91\x2c\x72\xaf\x77\x58\xb0\x70\xfb\x92\xf3\xcc\x7b\x5d\xba\x9e\x22\xa5\x08\x4b\x4e\xae\xee\x24\x3f\x0a\xbd\x35\xc3\x4d\x33\xa2\xdd\x90\x36\x32\xc2\x7d\xfb\x57\x4f\x81\x76\xd9\x3d\xc9\x37\x9a\x4d\xff\x2e\xe0\xad\x67\x5d\x5e\xc8\x47\xf5\x4b\x3f\x84\xff\x5d\x32\xe1\x27\x86\x80\x20\x1e\xf0\xef\xc0\x2b\x72\x97\x4a\xfe\x32\x5f\xe6\x99\x64\x79\x1a\x2a\x0c\x25\xc9\x8d\x71\xdf\x6a\xb4\x2f\x88\x8c\x04\x07\x1e\xf2\x2b\xcc\x84\xb8\x3e\xfa\x66\xd1\xe9\xfa\xcf\x02\x73\x4e\xbb\xe5\xfc\x7f\xec\x8e\x3c\x49\x1c\xfa\xa0\x28\xc7\x5b\xbc\x39\x2a\x8d\x4d\xaf\xba\x51\x50\x09\x7e\xf7\xef\x9b\xa5\x2c\xd1\x48\x32\xfa\xd4\x06\x16\xb9\xa0\x0d\x79\x3e\x5e\x87\x22\xb4\xbe\x85\xe7\xf0\x82\x83\xc5\x8f\x31\x58\x25\x68\x09\x7c\xf0\xe8\xc2\x46\xc2\xb2\x50\x9b\x90\x42\x4b\xf8\x36\x2f\xd0\x88\xf1\x98\x4c\xd1\x8b\x66\x27\xe3\x10\x39\xd0\x8e\x3d\xd9\x93\x44\x3e\x77\x13\x3f\x0a\x4d\x08\xad\x33\xfd\xe1\x20\x18\xcb\xc2\x7b\x2d\x92\x6b\x75\xc0\xba\x58\xd7\x30\xfe\xc2\xd2\x38\x4d\x8c\x6a\x27\x32\xd0\xd2\xb1\xf3\x72\x01\xfe\x7f\x99\x25\x89\xe3\xc3\xc1\x75\x3c\xfa\x12\x50\x88\xbd\x4f\x34\x38\x4e\xc4\x40\x2f\x24\x0d\x2c\x16\xc4\x6d\x2f\xb8\x12\x33\xca\xe1\xd2\x9e\x63\xd8\xfd\xa9\x6a\x6c\x8c\x90\x7d\xf4\x21\xdc\xce\xed\xaf\x90\x19\xef\x31\xa5\x62\xe7\x22\x5a\x2b\x56\x7e\x9e\x71\x55\x64\x57\x77\xcc\x06\xfa\x21\xd7\x9c\x9d\x3e\xd8\xe2\x3f\x0a\xf5\xf6\x48\xa7\x66\x9e\xf7\xcc\x6f\x9f\xbd\xc2\x90\x6e\xb1\x68\x99\xe2\x0f\xfa\xdc\x5b\x86\xa4\xce\x13\x8b\x61\x38\xc8\xd6\x20\xf6\x28\xb4\x9a\x60\xa3\x2a\x20\xf5\xe4\x5e\xb7\xf7\xb0\x8e\xc6\x91\x92\x84\x51\x92\x82\x47\x3c\x39\x2f\x02\x3d\xdb\xcc\x3b\xcf\x8d\xdb\xf8\x32\x00\xe1\x7f\x77\x0f\xf4\x13\x57\x86\x13\x7e\x12\xf8\xef\xc8\xbf\x7e\xa2\x7d\xe2\x30\x3d\xa8\xd3\x57\xf0\x24\x16\xa4\x6e\x68\x89\x12\xe8\x24\x88\x64\xfa\x56\x65\x84\xc9\x3b\xaa\xe3\xfd\x04\xeb\xd1\x87\x80\xb7\x8d\x12\x15\xaa\xe1\x30\x95\x18\xf0\x0a\x7f\xd5\xef\x11\xf0\x77\xf0\x99\x58\xca\x68\x70\xa0\x33\xb1\x75\x75\xb7\x9c\x72\xef\xe3\xfb\xc6\x22\xe2\xfd\xfe\x91\x5f\x7c\x76\xb8\x21\x8a\xb5\x72\xf2\xe1\x14\xf2\xa2\xe0\x55\x7c\xcc\xe8\xee\x4c\xd8\x68\x11\xd6\x6c\xc9\xa3\xd0\x10\x21\x65\xbe\xca\x3e\x47\xb9\x0a\x35\x1f\x41\x49\x25\xf4\x6f\xde\x20\x03\x93\xe0\x59\x8a\x13\x2d\x23\xfe\x24\x88\xed\x1b\x9b\x47\xa1\x9b\x09\x64\x36\x85\xaa\x09\x9d\xcb\x5f\x10\xcf\xd7\x96\x79\x5c\x28\x3f\x3f\x90\x67\xb4\xbe\xe0\xfc\xfe\xfb\x7a\x89\x72\x58\xbf\xe5\xb2\xfc\xd9\xff\xae\x2c\xe1\x27\x7e\xb5\x66\xfd\x37\x99\xfc\xdf\xa2\x44\x8b\x16\x7e\xf3\x6c\xfc\x44\x4b\xe1\x21\x09\x0d\xdc\x6c\xa1\xfe\x29\xc2\x59\x7e\xaa\xcd\xcf\x3a\x24\x93\x2e\xd3\xf6\x6c\x98\xee\xdf\xd8\x7d\xbd\x49\xea\xc0\x0a\x4e\xf9\xed\x05\xc7\xc0\xcc\x7c\x4b\x9b\xe4\xae\x7d\xcf\xf0\xa9\x0b\x6d\xae\xb0\x48\x7a\xa7\x7e\x27\x1d\xf5\x5f\xe4\x0c\xe7\xa7\x99\x65\xe5\x02\x3e\x61\xf2\x4e\xe6\x9b\x19\xbc\x7b\x81\x91\x8b\xd8\x12\xd7\x8d\xe3\x37\x21\x55\xeb\x34\x5f\xab\x68\x1f\x5d\xd9\x7d\xe7\x97\xd2\x3e\x6e\x0c\x9b\xaa\x66\xcc\xd9\x6e\x3e\xed\xcf\xb3\x5e\x33\x4f\x9f\xb1\x26\x9f\x22\xdc\xf7\xa7\xa3\x8b\x0a\x51\x3e\x9a\x65\xe4\xef\xef\x49\xee\x32\x19\x1c\x73\x94\x59\x50\xad\x9e\x0f\xa8\x04\x44\xa3\x63\xbc\xda\xe6\x88\x58\x40\x57\x4c\xc1\xda\xc4\x8a\xf8\x77\x7e\xce\x17\x21\x09\xbf\x9a\xae\xc2\xaf\x33\x42\x3b\x38\x0e\x43\x1a\x3f\x5e\x45\x05\x0c\x6a\xf5\xb6\x0d\x6a\xa7\x1e\xda\x98\xe4\x3e\x3c\x3a\xbf\xd4\xb3\xf1\x3f\x83\xd2\xf9\x8e\x86\x91\xf4\x6f\x99\x7b\x2e\x34\xd6\x52\xba\x5d\x4e\x96\x45\xac\x1d\xa8\x56\x37\xcb\x3c\xb7\x13\x1f\x9d\xdf\x9c\xcd\xfe\xd9\xfb\x9e\x1c\x57\xeb\x9c\x39\xf1\x0d\xf8\xe4\xfe\xcd\xad\x02\xb9\x6e\xad\x7e\x9d\xe7\xf0\x31\x68\x29\x5a\x98\x6e\xff\xce\x1f\xd7\xa0\x11\xb9\x25\xb7\xcd\xb9\x65\x7b\x48\x8e\x74\x48\x15\xf7\xb1\x0f\xdc\xd0\x4a\x39\xf6\x76\x49\x2d\x85\x7f\x8a\x17\x5b\xfc\xd1\x41\x49\xc5\xb5\xc2\x11\xa5\xb1\xb4\x8a\x71\x33\x73\xde\x59\x6e\xf0\xac\xfe\xb1\xbb\x9d\x9d\x4c\x0f\x67\x8a\x20\x67\x23\x0f\x98\xaf\xfa\x77\x50\x0a\x3b\x27\x12\x97\xe7\xf1\x67\x93\x74\xfd\xdf\xaf\x85\xe1\x5f\xb0\x4d\xbc\xcd\x1f\x74\x77\x4d\xe4\x47\x50\xbd\x51\x61\x3d\x29\x7a\x74\x51\x53\x92\xb5\x47\x74\x1c\xe2\x93\xd3\xf7\x92\xbb\x61\x84\x96\x82\xac\x32\xe8\x22\x72\x73\xa6\xe6\x85\x55\x12\xed\x5a\xfd\x6f\xdf\x3c\x0a\x6d\x17\x5b\xf5\x34\x99\x09\x0e\x23\x58\x46\x6a\x0f\x5e\xa9\xb2\x13\xbe\xab\xf3\x5c\x52\x92\xe2\x93\x3c\x14\xba\x53\xd8\x48\x56\x7b\x14\x1a\x47\x80\x55\x4c\x62\x26\x3c\x69\x21\xf3\x9c\x77\x35\x76\x9d\x70\x80\xf7\xef\x1d\x66\xb9\x20\x6d\x40\xe1\x00\xb7\x96\xfd\x12\xe1\xa3\xab\x62\x7c\x59\xd8\xf5\x71\x40\xb7\x53\xcc\x52\xdd\xc6\xa5\x84\xaa\x5c\x5a\xdb\x96\x9c\x2d\x54\x67\xb9\xd3\xbd\x11\x69\xd9\xf2\xe0\xd1\x82\x58\x20\x6b\x7d\x16\x3e\x8e\x02\x49\x1b\x76\x6f\x6b\x90\x65\x58\x8f\xec\x5f\x71\x0e\x7a\xc6\x67\x2c\x8f\xe9\x23\x90\xf2\x29\xab\xe5\xd1\xf9\xed\x8c\xc9\x66\x0c\xaa\x2d\x5d\x7b\x7f\xb9\x9c\x7b\x7a\xab\xbe\x9e\xf1\x35\xcd\xbb\xfd\x1e\xb2\x82\xff\xe7\x24\x60\xe3\x58\xfb\xf1\x02\x53\xd3\x96\xed\x0c\x1e\x67\xdb\x17\x93\x4e\xef\x62\x22\x76\x9c\x41\xc2\xae\xb5\xd3\xe8\x6e\x9f\x35\x6a\xf3\x17\x5c\x7b\xbd\x13\xf1\x28\x54\x3f\xe8\xf4\xc5\x97\x6f\x69\x66\x27\xe2\xcd\x33\xd8\x38\x17\x2a\x51\xa7\xe1\xd4\x82\xaa\x8c\x64\x13\x3f\x71\x9e\x06\xdb\xa6\x8b\x3c\xba\x2a\x17\xbe\xf4\xd9\xa4\x07\x3f\x86\x84\xca\xcc\xd8\x68\x77\x53\xb8\x1a\x79\x91\xf7\x11\x45\x09\x0c\xa8\xbd\xfd\x4e\x5e\x86\xf5\x71\x8f\x52\xb2\xcc\xab\xe3\x27\xe8\x65\xc6\xf3\x7b\xb1\xad\xef\x90\x35\x8b\x7e\x59\x5d\x0f\x4b\xe4\xcc\x3c\xad\x72\xa0\xae\x1c\x8b\xa4\x3e\x7c\x94\x14\x64\x28\x55\xbd\x11\xb1\x62\xae\x4d\x65\xb6\xea\xa3\x26\xdf\xd2\x4c\x4a\x16\x7c\x47\xb1\x32\xbb\x24\x40\x6e\x31\xa0\xab\x91\x82\xf6\x28\x7b\x3d\x5f\xb1\xe3\x1a\x95\x61\x35\x50\x48\xbd\x61\x95\x85\xaf\x9a\x3b\x78\x29\x10\xe0\x35\x38\xde\x06\x7f\xac\x40\x71\x41\xec\xff\x2f\x72\x5b\x9f\xd4\xf8\x43\x3f\xc7\xd3\xa1\x67\xfa\x5f\xbe\xad\x52\x5d\x8d\x7f\xa2\x1f\xb8\xea\x41\x0b\x57\xa6\x88\xc8\x4f\xa0\x36\x8e\x79\x74\xf9\xb4\x95\xd9\xe7\x2e\x37\xaf\x1b\x5a\x33\x5e\xd5\xeb\xcb\xee\x5a\x53\x07\x0c\x0e\x0c\x46\x0d\x8b\xd6\xc5\xad\xba\x97\x2c\xd4\x59\x3d\xba\xfc\x67\x1c\x0b\x5e\x0d\xc8\xa9\x8d\x57\x3b\x6d\xd7\xe2\x88\x38\xd1\x18\xb8\x0f\xfb\xd9\x9e\x1a\xa8\xd3\x38\x26\x88\x2c\xa0\xfc\x4f\xff\xce\x4f\x1e\x66\x38\x60\x2d\x71\xec\xb1\xb2\x81\x78\x6c\x05\xb2\xa1\xc4\xdc\x74\x8b\xdb\xf3\xb4\xec\x47\xe3\x6e\x7e\x83\x39\x1c\x3f\xf5\x78\xef\xf2\x71\x20\xbe\x08\x79\xea\x82\xe8\xc5\x26\x5a\xdf\x6a\xdd\x86\xd4\xce\x17\x3a\x5b\xf9\x76\x93\xe0\xd1\x12\x9d\x58\x7c\xc4\x86\xbe\x7f\x1f\x75\x12\x5d\x5a\xad\x0f\xfd\xd0\x24\xdd\x9f\x0b\x8b\x5e\x9f\x53\xac\x62\x50\x51\xf9\x46\x2c\xf8\xf9\xb3\xd0\xa3\xce\xf5\x64\xef\x57\x8f\x3e\xea\x78\x92\xd4\x05\xdf\xec\xba\x34\x47\x51\x18\xb2\x8f\x69\x76\xc4\x75\xf3\xf8\xcc\x5b\xba\x0f\x35\xc2\x9c\xb5\x09\x1a\x1d\xb8\x24\x8f\x52\x1d\x8f\xe1\x6c\xe1\xca\x92\xc9\x2a\xa6\x37\x1a\xaf\xdf\x82\x2d\xd1\xc6\x68\xcf\xa7\x62\x4d\x70\x52\xf2\x47\x78\x25\xdf\xce\x3f\x9e\x55\x12\xff\x3f\xc6\xfe\x2a\x2e\xc8\xe7\x79\x1f\x87\xe9\x94\xee\x6e\x90\x06\x69\x10\x90\x94\x94\x6e\xe9\x94\x46\xba\xa4\xbb\xbb\xbb\x4b\x1a\xe9\x12\xa4\x41\x52\xba\xbb\x91\x16\x84\xe7\xe0\xf9\xfe\xdf\xec\xe7\xc8\xdf\xf9\xf5\xba\x76\x66\x76\xef\xd9\xd9\x99\xd9\xbd\x11\x5c\x6f\x8e\x39\xf2\x49\x0b\xd4\xa1\x23\x17\xe0\xc2\x47\x67\x07\xb5\x04\x24\xc3\xf2\x69\x1f\xca\xfa\xb8\xb9\x39\x20\x04\x00\x28\xab\xdd\xfa\x66\xc7\x10\x17\xa9\x8e\xfe\x15\x6a\x90\xdb\x7c\x7c\x20\xf2\x2d\x5a\xd2\x00\x21\xe4\xce\x07\x3e\x7d\x47\x29\x9a\x45\x00\x8a\xea\xac\x40\x80\xb9\xb1\x24\xc1\xfa\x1e\xd9\xbd\x41\xad\xcb\xbf\xc6\x82\x6e\x9e\xfa\xf9\x5b\x64\x04\x6b\xff\x4f\x2c\x18\xf6\x0f\x00\xd4\x16\xfe\x37\x27\x94\x84\x85\xf8\x8d\x79\xfe\x0d\xfe\x1c\x3c\xaa\x99\x2b\xa9\x75\x91\x98\xa0\x7a\xa6\x5e\x69\x91\xf6\x72\x6f\x03\x60\x80\x30\x2a\x12\x95\xfe\x07\x98\xd2\xcc\x8a\x16\x95\x74\x8f\xc7\x87\xbf\x17\x21\x0c\x2d\x36\x10\x73\x66\x3c\xa1\x04\x28\x71\xd3\x6f\x5f\x0c\x90\xb7\xd0\x28\xf7\xd5\x3b\xdc\xe3\x67\x25\xec\xf2\xc7\x05\xf8\x62\x4c\x8c\x9a\xb0\x7d\x4a\x88\x31\x98\x9c\x50\x36\xfc\x3a\x7e\x4c\x80\x54\x3a\x80\x1a\x3d\x58\x25\x50\x6a\x5f\xc5\x90\x69\x27\xe5\xae\x2d\xb9\x48\x27\x5f\x28\xd0\x6f\xfd\xda\x94\x59\x95\xc1\xbc\xe3\xd7\x0b\xe9\x66\x23\xf3\xcf\x69\x41\x7b\xc9\x08\xf2\x0e\x04\x6e\x2f\x42\x27\x0a\xff\xea\x8c\x1f\xc1\xf0\x86\xf3\x7d\x38\xc5\x6c\xed\x31\x4c\x80\x52\x7a\x85\x36\xc9\x05\x3e\xc4\x58\x8e\x29\x9c\xb1\x89\x66\xfa\x51\x7c\x53\x70\xd2\x91\xad\xd3\x32\x88\x02\x3f\x62\x36\xcf\x0e\xd0\x81\xf1\xbf\xf0\x36\xe3\xb3\x38\x92\xe7\xfc\xdc\xa5\x5e\xc6\x6e\x73\x2f\x4b\x64\xed\x3d\xf6\x73\xd7\x9f\xf5\x4f\x14\xea\x19\x33\x5c\x00\xb2\x1c\x01\xd4\xbc\xad\xa1\x9d\x6f\xd0\xde\x7a\x4e\xdf\xcf\xd8\xcc\x84\x1a\x43\x3e\xff\x4e\x3c\x76\x83\xd1\x55\x68\x37\xc7\xc1\x72\x0d\xfc\x2f\x20\xfa\xd7\xea\xf3\x17\x7f\xe7\xeb\x8b\x0e\x04\x44\xd8\x49\x5e\x22\x48\xa7\x91\x34\x12\xf3\x43\xc4\xd9\x95\x5a\xd8\x03\x9b\xe2\x39\xb2\xf8\xba\xaf\x8c\xc4\xdf\xe1\xe1\x4b\xd5\x81\x87\x2d\x2c\xcf\xfe\xba\x02\xc2\xb5\xb7\xd3\xd1\xfd\x3c\x85\xb8\x62\xc7\x21\x2e\xcf\xe9\xaf\xf0\xb2\xbd\x4c\x94\xac\x0c\x89\x1a\x0f\xc9\x01\xe8\xd3\x7a\x10\xa6\xa5\x72\x0c\x11\xa7\x96\xbf\x31\x04\x84\xe3\x77\x71\x99\xcf\xa4\xcc\xa5\xd5\x24\xe1\xd7\xfc\x10\xaf\x1e\x6a\xab\x40\xd7\xf6\x43\x71\x12\x7e\xe1\x7d\x20\x95\xc3\xef\xfd\x19\xdd\xdc\xfa\xb6\x4e\x01\xfe\xab\xa0\xaf\x9b\x5c\x39\xfa\x64\x45\x9f\x77\x90\x6e\x7e\xa1\xfc\xdf\x59\xeb\x1f\x65\x07\x7f\x71\xd7\xa7\xb3\xaa\x54\x82\x17\x6a\xae\xc3\xea\x09\xb5\x4e\xbc\x67\x5a\xea\xc3\xc1\xea\x88\xa0\x8c\x98\xf8\x9c\x05\x3c\x6a\xea\xa2\x49\x51\x6e\x2a\xab\xa2\x68\x70\xd5\xce\x7e\xa5\xcc\x69\x0e\xe8\x90\x5b\xea\x83\x56\x78\x75\xda\xf5\x3b\x52\x48\xd3\x61\xfa\x2f\x91\x88\x4d\xd6\x25\x7a\xf4\x6b\x34\x6b\x30\x8e\x4d\x40\xfe\x9e\xb4\xe7\x4b\xd0\x98\xb4\xfe\x6b\x75\xe3\x0b\x53\xd2\x5f\xc3\x51\xe9\x59\x03\x0e\x0f\x7a\x5d\xf4\x6e\xb9\x4f\xd9\xc0\x04\xc7\xa9\x43\xfb\x73\xcb\x8a\x17\xf8\x94\x1b\xe9\x37\x89\x97\x71\x4d\x1e\x51\xa9\xe4\xb3\x07\x17\xd3\x11\x37\xb8\x2b\x20\x09\x01\x19\x9f\x9d\xcd\xd8\xdb\xa2\x4c\x2d\xe7\x76\x25\xe4\x0d\xd7\xcb\x1d\x91\xef\x25\x42\xbf\x65\x9d\x53\x7d\xa3\x6c\x12\x25\x92\xc5\x94\x7b\x40\x0f\x13\x2a\xd4\x8b\x66\x53\x68\x71\x8f\x49\xfd\x90\x12\xe3\xf1\x27\xe6\xca\x95\x77\xdc\x2f\x8c\x65\xc3\x42\x41\x4a\xb3\x39\x42\x69\xeb\x45\xd4\xdf\x15\x6a\x54\x26\x1c\x52\xf6\xc9\x27\x9e\x09\x72\xe8\x1d\x7d\xb7\x0e\xbe\xb2\x3a\xcf\x4b\x61\x66\xd5\x4b\x89\x43\x19\x70\x67\x80\x56\xfe\xe5\xa7\xdb\x01\x5e\xc8\x9f\xe6\x2c\x22\x47\x79\x0a\x0b\x8f\x77\xb3\xae\xa8\xc4\x08\x19\x7a\x5c\x79\x3b\xfb\xf6\xd3\x19\xa3\xc1\x65\x8b\x0a\x53\xcf\x18\xeb\xed\xd4\x49\xf1\xe5\x56\xb7\xe2\x97\xa1\x3c\xde\xee\xfb\xfe\x94\xc0\xf8\x3f\x3c\x4a\x54\xde\x8c\x05\x80\x33\xba\x9a\x8d\xd1\xc3\x6a\xdf\x50\xf8\xdb\x5e\x1c\x2a\x9e\xd6\x34\xa3\xdf\x7e\x9f\x2a\xe1\x79\x3f\xd6\xe1\xc3\xf6\x8b\x2e\x8f\x8d\x17\x20\x25\xb2\xcf\x46\x3b\xdf\xda\x81\xe5\x55\x7c\x47\x36\x9d\x21\x5a\xbf\xbb\x2c\xb1\xe0\x5e\x04\x7b\x80\xac\x92\x5e\x7e\x36\x50\x09\xf7\x42\xfa\x67\xe5\xe3\xad\xe1\x54\x15\xee\x47\x31\xfe\x64\x4a\xf2\xa2\x8e\x50\xf9\x02\xf8\xb3\x74\x28\x4e\x3c\x74\x41\xfc\x18\xc3\x99\x6b\x40\xa9\x73\x3b\xa6\x9f\xc4\xc4\x1b\xac\x2b\xa3\x74\xf5\xc7\x8f\x29\xd5\x69\x98\x81\xc3\x86\xe2\x17\x6d\xbb\x7e\x13\x7c\x93\x79\x94\x9f\x81\x6d\xeb\x6d\x5a\x4b\x72\xb3\x26\x92\xbb\x89\xe8\x98\x06\xca\x93\x82\x59\x54\x5e\x9d\xfd\x27\xb8\x79\xc9\xf8\x40\x6f\x53\x5a\x08\xcc\x9e\x97\xf1\xdf\x7f\x50\xd3\xb1\x78\xda\x63\xef\xd5\xc6\xe2\xc2\xd8\x8a\xfd\x79\xc2\x8d\xd1\xa1\xdd\xe3\xdf\x3f\x7f\x07\x19\xb1\xc1\xc2\xf3\x05\x40\xe6\x42\x79\x75\x2f\x29\x5c\x34\x2c\x4e\x0f\xaa\xe1\x2b\xd0\x9f\xc1\xeb\xb4\x40\x70\x68\xf8\xdc\xfb\x45\xd6\xa6\xde\x35\xd8\x01\xc3\x2b\x33\xfc\xf4\xf9\x88\x58\xa1\xd2\x54\x10\x63\xe5\x9e\xc1\x23\x95\x69\x55\xc2\x88\xb4\x99\x87\xe0\x90\x91\x8c\x0d\xb5\x8b\x7c\xfa\x42\xaa\x26\xc7\x68\x8d\x56\x51\x5c\x5f\x01\xb9\x1a\x33\xd7\x76\x47\x98\xf9\xce\xc0\x8f\x88\xf0\x71\x37\x60\xcc\x1c\xb5\x22\x74\x0e\xfb\x05\x19\x13\x9f\xa5\x8f\x02\xa9\x53\xf8\xd6\x89\x95\x21\x4a\x8f\x70\x89\x7f\x12\xd5\xb5\xbf\x8c\x17\x63\xe1\xcb\x6d\x5e\xe6\x85\x67\x03\xb8\xa6\x28\x8a\x57\x24\x1e\xba\x59\x59\xed\x26\xf1\x44\x4d\x50\xf3\xde\x6d\xc0\x1d\xd3\xc3\xdb\xf2\x20\xe2\xd4\xad\xb7\x61\x62\xb4\x5d\xbd\x48\xaa\x17\xe7\x9e\x74\x10\xc6\xbc\xab\x38\x34\x0b\x1f\xe0\x6c\xd9\x26\xf4\x58\xed\x09\x3b\x80\x87\x82\x2a\x63\xfb\x0c\x35\xd0\x43\xfa\x32\x7e\x34\xe1\xf7\xb4\xf7\x16\xcc\x58\x0f\x45\xb2\xc7\x5e\xa9\x93\xdf\x2f\x09\xe4\xd8\x83\x3b\x63\x82\x04\x02\xf4\xf3\x35\x2f\xc2\x8a\x5e\x90\x9d\xa8\xbc\x58\xb5\xa4\x09\xc1\x02\x3a\xd6\xb2\xa5\x34\x89\x3e\x6f\xf6\xe0\x52\xf8\x1a\xd7\xde\xaa\x06\x3b\x91\x4a\xab\x3c\x3a\x02\x53\x3a\x88\x71\x6c\xe3\xea\xb9\xe8\x28\xa9\x63\xe5\xfe\xe6\x2e\xd4\x9f\x81\xd2\x70\x31\x5a\x5b\x2c\x21\x88\xb6\xb7\x99\xca\x32\x8d\x06\x80\xb6\xad\xed\x10\xac\x7d\xf9\x49\x7c\x23\x61\x9f\x90\xd8\x98\xee\xe1\x47\xa6\x3a\x29\xca\x3f\xde\xc4\x1a\x78\xfe\x4d\x61\x1a\x5a\x0f\xdc\x89\x52\x7e\xf5\xbc\xdb\xd4\x51\x46\xe9\x3f\xa4\x13\x55\xd5\x8b\x63\x72\xcb\xe1\xb6\x4c\x7b\xfb\xc3\x8f\xb9\x31\x67\xbc\x9a\x0c\x3c\x9b\xf6\x6c\x60\xa6\xda\x2b\xce\x1e\x8e\x20\x4e\x6e\x36\x96\xbb\x94\xef\xe1\x4d\x4b\x2c\x78\x4c\xf5\xb2\xfe\x0c\xab\xd6\x8b\x08\xac\x00\xad\x9a\x52\x71\xb0\xbe\x0f\x33\xcc\x66\x35\x05\xc5\xf3\x3a\xc4\x34\xb9\xa1\x61\x9a\xef\x23\x59\x7e\x8a\x99\xc9\x69\x08\xab\x86\x6f\x2d\x10\x36\xd7\xbf\xc2\xd3\xb9\x82\x8f\x0e\xf9\xa4\xa1\xa2\x3b\xc1\x00\x11\x95\x56\x2c\xbc\xe0\xe2\xe3\xe4\x13\x7b\x96\xe4\x82\x44\xed\xf9\x62\xab\x6b\x9c\x7e\x39\x4f\xfe\xce\x8f\xd4\x1e\x41\xd4\x88\x58\x03\xc6\x90\xad\x66\x8f\x0f\x08\xb9\xb3\x5f\xa9\xdd\xb2\xda\x8d\x37\xe7\xc0\xf1\x33\x3f\xe8\x6f\x7d\xae\x69\x74\xac\x81\x8e\x9b\x42\x92\x65\x97\x0e\xa9\x08\xab\xc2\x15\x8e\x9c\x70\x1a\x33\x46\x87\xbc\x61\xc8\x7f\x99\x55\x4f\xda\xaa\x4c\x51\xa3\x8a\x40\x93\xe2\x7a\x5a\x05\xb3\x1e\xdf\xc4\xf6\x1c\xee\xd4\xb2\xe8\x2d\x69\xf6\x0d\x59\x16\x69\x22\xbe\x97\xf1\x3d\x8f\x07\xd8\xf3\x02\x60\x36\x1f\x84\x4f\x7c\xdf\x6e\xf6\xc0\x95\xd5\xd6\x8a\x3e\x19\x65\x2a\xd9\x43\xcf\x69\xf6\x46\x10\x67\xbd\x20\xf3\xe3\x88\x34\x69\xf1\x02\x2a\x9e\x5a\xb8\x60\xea\x1c\x13\xec\x32\xe0\xfe\x7c\x64\xd5\x6d\xfa\xc5\xfc\x21\x73\x1b\x37\x19\x43\x0a\xf8\xfa\x9b\x49\x02\x65\x97\xf2\xfe\xe4\x06\x91\x2b\x1d\x2e\x37\x88\xef\xc5\x58\xd9\x41\x6d\x0c\x05\x71\xd2\xbc\x23\x1c\x95\x3b\x97\x3c\x7b\x21\x6d\xf9\xdd\xdd\x49\xf5\xf6\x03\x3f\xa5\x4f\xdd\xf5\x09\xe2\x8d\xb9\x26\xa3\xcb\xa6\x8e\x8a\x21\x7e\x4e\xe8\xe3\xe9\xb7\xe1\x34\x34\x80\x54\xc9\x41\xa4\xde\x67\xa9\x1b\x8b\xaf\x72\xbf\xb9\x4a\xfa\x28\x03\xd1\x76\x38\xb4\x9f\xbd\x7e\xca\xe7\x67\x67\xea\xf4\xed\x39\x90\x9e\x72\x87\xa9\x4c\x37\x12\x2f\x70\xae\x9b\x57\xb3\x45\xde\xa7\xc9\x93\xfc\x89\xc9\x7e\x44\x64\xd3\xc1\xbc\x64\xa7\xf9\x7a\x89\x8a\x05\x20\x4d\x34\x32\x1a\x28\xa7\x0c\x9d\x2c\x63\xf3\xfc\x8e\x43\xad\xc2\xf9\xda\xda\xda\xe9\x5e\x14\xb6\xa6\x88\x5e\x6e\x7b\xc7\x51\x0a\xf0\x13\x4b\x11\xaa\xf9\xe8\x35\x82\xf7\x95\xd4\x9b\xc7\x91\xa6\x56\xa9\x39\x3e\xe1\x26\x03\x1c\xdb\xfb\x7a\x9b\xdb\x79\x9b\x82\xc3\xc3\xff\xed\xd9\xff\xf2\xe7\xfe\xe2\x90\xe4\x10\xb0\xc0\x9e\x9d\x1c\x64\xfc\xfe\xb5\x3a\x0b\x7b\xf1\x5b\x28\x2f\x92\x02\x05\xbd\xdf\x98\xc2\x7c\xcf\xbf\x86\x74\x5d\xb0\x61\x54\x46\xef\x3e\x89\x03\xab\xd5\x30\x4d\x9f\x69\x87\xc4\xca\x75\x91\xc9\x83\x6d\x8b\xc7\x65\x0e\x61\xa4\x67\xc7\x1f\xbf\x16\x6a\xa5\x3d\x68\x88\x53\x21\x16\x17\xdc\xd7\xda\x74\xe0\xc9\x92\x24\xf9\xab\x9a\x52\x64\xb2\x7b\x94\x1e\x21\x7f\x2c\xc2\x40\x8d\x31\x9f\xf5\xa6\x32\x5f\x89\x36\xd6\x66\x03\xd0\xef\x72\x2a\xd3\x4d\x76\xa8\x25\xdb\x09\x81\x04\x81\xec\xe9\x56\x81\x34\x08\x69\x26\xb3\x5f\x32\x8c\x8d\xf7\xf7\x92\x95\x02\x4e\x6f\xe6\x21\xff\xdf\xdc\x8a\xbf\x18\x3a\x2c\x18\x8d\xd4\x48\x7c\xfc\x52\x43\xb2\x31\x43\xe3\xf9\x38\x4f\x49\x84\xd7\xb5\x26\x56\xcb\xa9\x7b\x8d\x8d\xc9\xc9\xbd\x1e\xda\xc4\x3c\x20\x0c\xc8\xc0\xa7\x59\xfc\xcc\xf5\x9c\xf3\x3e\xeb\xbd\x2a\xa2\x95\x0b\x6e\x64\xdb\x0e\xf7\x49\x36\xf1\x34\x42\x59\xd7\x34\xce\xc1\xfb\xcf\x89\x00\x34\xf1\xfa\x06\x0a\xf1\x67\x2c\x1d\x81\x0f\x8b\xe9\x09\x83\x90\xc6\x30\xc9\x13\xf5\x0d\xb2\x4a\x98\x03\xca\x15\xae\xdd\xb2\xf1\x2d\x00\xd5\xca\xa7\xec\x55\x41\xca\x85\xdc\x57\xfe\x69\x98\x91\x8e\xa9\xbe\x6e\xe7\xc8\xf2\x6d\x7a\x18\x92\xba\x55\x5e\x27\x82\xbe\x72\xf1\xbf\x49\xfb\xe7\xa7\x2d\xee\x0b\x85\x00\x03\xa8\xa6\xb8\x56\xca\x0d\x77\x65\x14\xe0\xe5\xb4\xfa\x28\x53\x79\x81\x28\x40\x8f\x12\x57\xa7\xae\x49\x3e\x17\x0e\xc1\x76\xd3\x7e\x99\x09\x08\x91\x39\x05\x65\x7e\x06\x57\xfb\x7c\x97\x7b\x2b\xa9\x86\x78\x64\xc0\x56\x2e\x48\x1d\x2c\x80\x4b\xd5\xad\x9c\x4d\xaf\x56\x7a\x08\xba\xc3\x16\x15\x79\x85\x53\x6c\x3b\xc6\x2f\x99\xb9\x8f\x73\x5a\xb9\x44\xd4\x22\xc7\xad\x90\x75\x34\xdf\xa1\xba\x0c\xed\x45\xfd\x37\xc1\xa5\xf0\xf0\xad\xc0\x3f\xbe\x51\x11\x9f\x06\xd1\xae\xc2\xe6\xf7\x39\x44\xf4\x13\x4d\xa3\x94\x6c\xd5\x71\x8d\xb4\x58\xcf\x14\x9f\x5c\xcd\xcd\x57\xa8\xff\x37\xaf\xe1\x2f\x36\x04\xf5\x2e\xf8\x85\x58\x5e\x8e\x3f\xdd\x23\x25\x26\xfa\x8c\x83\x7c\x8d\xeb\x73\x95\x8c\xe0\xb9\x01\xd2\xb9\xe4\x2b\x5e\x6f\xfc\xf4\x94\xa2\xcf\xfd\x51\x80\x0c\x08\xd1\xe9\xcf\x9e\x39\x57\x9d\x71\x90\x96\xf2\xc1\x43\x7b\x5d\x2d\x7f\x4c\xa7\x76\x1b\x82\x92\xf4\x6d\x50\x04\xa6\x9b\xe0\xc3\x00\xe8\xe3\xd6\x45\x66\xfc\x9b\xa8\x7e\xa6\xe4\x0e\x71\x15\x2d\x86\x8d\x27\x55\xf8\xac\x91\x04\x5c\x39\x07\xa8\x95\x93\xe9\x9c\xb7\x9b\x00\x54\xf6\x98\xf3\x50\x36\x68\x7d\x24\x70\xa7\xca\xd9\x58\xc6\x70\xc9\x8b\x84\xd2\x18\x6a\x5b\xad\xe8\xbd\xee\x1c\x16\xea\xaa\xb6\x17\x00\x5d\x94\xa8\x60\x2d\x81\x83\xe3\xf6\x0a\xae\x66\x6a\xed\x5f\xbd\xc4\x68\xb4\x5a\xa9\x76\x8a\xd7\x33\x88\x0d\x2e\x2e\xe4\xce\x31\x05\xa0\x12\x17\x8b\xc1\x1f\x09\x5a\x2e\xb9\x7c\x68\xb9\x1c\x6a\xf3\x56\xef\x75\xab\x36\xb4\x05\x2c\x39\xfc\x37\x82\x3a\xc8\x9e\x8e\xd6\x6f\xe6\xfe\x2f\x30\xfd\x57\x93\x8b\xbf\xb8\xfe\x99\x67\x76\x2a\xfe\x0b\x75\xac\x4c\xb2\x2e\x17\x9c\x96\xe5\x45\x66\x38\x2d\x31\xf1\xa3\x52\xef\x41\xe1\xe8\x21\x61\xa6\x2b\x02\x31\x62\x63\x13\x93\xe2\x3a\x18\x17\x1d\x97\xbf\x9e\x0d\x09\x99\x61\x6a\x57\xe5\xc3\xe6\x86\xf9\x16\x39\xc1\xc9\x9c\x66\xf1\x44\xce\xab\x67\x1e\x32\x6a\xe5\x04\x24\x69\x8a\x8b\xc5\xbe\xce\xbc\xeb\xb6\xd6\xd5\xa4\x91\xe1\x96\xd3\x75\x45\xb8\x55\x56\x6e\x7e\xd6\x3a\xb8\xf5\xf8\x4c\x4e\x15\x2c\x0e\x5a\xc1\xf3\x39\xe8\xc3\xea\x35\xde\xdf\x80\x8e\x10\x55\xfe\x74\x4d\x42\x8b\xe7\x0d\x7b\x3e\x17\x7b\x8c\x2d\xa4\xe8\x30\x66\x6f\xa9\x4f\xe0\x21\xb1\x74\x50\x30\x37\xa8\x90\x97\x4b\xb3\xe3\x83\xfc\x77\xdd\x24\xae\xe2\x6f\x48\x19\xb5\xd8\x6f\xa9\x04\xeb\x8f\x09\xe4\x8c\x2b\x81\x18\x06\xee\xb8\x82\x05\xef\x9c\x43\x6b\xbf\x77\xd2\x37\x45\x8c\x78\x7a\xf1\xd6\xe3\xf7\x75\x1e\xed\x9a\x38\x82\xcb\xef\x8b\x2d\x72\xfd\x17\x51\xe1\xe7\xae\xb3\x69\x3b\x14\xe4\x2c\x7a\xfd\x28\x33\x22\xc9\xcd\x29\xfe\xd0\xb8\x50\x78\xf4\xe0\xd3\xb3\x63\xf1\x24\x86\x79\x90\xbf\x20\x29\x66\x3b\x42\x65\x6d\xeb\x2e\x0a\xdd\x50\x71\xb4\x63\xb2\xfa\x26\xad\xde\x3b\xae\x63\x0d\x23\xbd\x47\xb8\x48\x81\x32\x11\x8f\x00\x24\x2d\x10\xc8\xec\xdf\x99\x4c\x46\x37\xd1\x12\xf6\x10\xb0\xcb\xf2\x6c\x87\x9a\xb8\x45\x19\x1d\xc8\x54\x84\xf5\x39\x0d\x40\xb8\x60\x05\x9d\xf8\x53\x7f\xc4\x71\x6f\xd8\x08\x74\xe9\xcf\x3e\xe4\x12\xc7\x4f\x7f\xbc\xd9\x4c\x3b\x17\x78\xc2\x49\xc2\x2d\x16\xf6\xda\x98\x19\x5f\xc6\x7f\x10\xe2\xa7\x8b\x1d\x34\xe4\x43\xa5\x7f\x2e\x74\x95\x6b\xad\xa4\xce\x35\xc4\xbd\xf6\x3d\x24\x65\xf4\x58\xe0\xcc\xd0\x4e\x92\x05\x48\xf1\xc8\x7d\xfa\xab\x2f\x53\x7f\xbc\xb6\xf8\x74\xc9\x1a\xa6\xef\xf2\x8e\x27\x9c\x4b\xc8\xb7\x44\x60\xcd\x84\xbc\x6e\x8f\x4f\x93\xe6\x85\x54\x01\xa2\xf5\x03\x2d\x4e\x62\xa4\x04\x75\x77\x6b\x75\x51\x30\xde\x7b\x24\x49\x91\xe2\x9d\x1f\xc8\xa6\xbe\x24\xcd\x3c\x65\x49\x60\x2d\x0e\x4a\xe8\x2b\x9d\x97\x38\x4a\x7b\x4f\xd8\x1a\x06\xa4\x3c\xd5\x62\xb6\x47\xc9\x17\x04\x86\xa9\x57\xbd\x4a\xa1\xc3\x59\x01\x7d\x38\xe0\xa4\xaa\x28\x71\xb4\xcf\x1b\xc8\xa3\xef\xbc\xb2\xb3\x7c\x34\x6b\x08\xbc\x14\xc5\x13\x10\x32\xca\x68\x19\xb6\xb8\xe2\x98\x6b\x26\x01\x66\xaa\xa2\xea\xf7\x73\xe8\xd2\xb9\x21\x9e\x9e\x20\x27\x54\x82\xe3\xee\x48\x99\x3a\xb4\x6e\xed\xd6\x71\xb2\xfe\x4e\x7d\x51\x5a\x36\x1d\x90\xa3\xc1\x51\xef\x64\x21\xa5\xff\x70\x77\x7e\x4d\x71\xd3\x1d\x03\x9d\xa3\x4d\x92\x1d\x00\xcb\xfc\x5a\x44\x4a\x25\xdc\xce\x65\x74\x1b\x08\xcb\xa1\xf3\x5d\xd3\x0f\xaf\xcd\xdd\xd8\x95\x75\x05\xec\x14\xa7\x74\xe7\x23\xdf\x59\x17\xfa\x3f\xce\x44\x1b\x4a\x4c\x63\x55\x11\x02\x92\x7e\xd4\x45\xf4\xf8\x5e\x70\x49\xa8\xd8\x9b\xa2\x3a\x1c\xf1\xc7\x4c\xf0\x4d\xc2\x95\xdd\x1a\xf6\x7a\xe2\x61\xc5\x8c\x43\xbd\x63\x1c\x20\x29\x76\x54\x35\xb4\x1d\xeb\xc0\x30\x27\x54\x54\x57\x4c\xca\x57\x05\xd7\xb7\x28\x39\x8c\x19\x0a\x0d\x77\xfb\xd9\x7c\xd8\x83\xe4\x22\x2f\xe3\x5b\x65\xdd\x1b\x72\x6c\x3b\x4b\x8b\x87\xfc\xe5\x1c\xd2\x0f\xee\x23\x2e\x26\x74\xf7\xd2\x66\xd4\xc4\xd5\xce\x53\xff\xe1\x89\x02\x64\x93\x02\xd4\xbf\xe9\x24\xb6\x7e\xdc\xf7\xf8\xa8\x3a\xe4\xf2\xad\x0f\xd5\xd9\xc3\x1f\x6d\x7f\x1a\xd2\x91\x4d\x8d\x40\x2e\x38\xfd\xf6\x10\x8c\xa0\x22\x97\x53\x37\x62\x3b\x69\x9d\x45\x77\xf6\x4a\x0d\xf5\x46\xbc\x10\x0f\xad\xc7\xb2\x50\x30\x89\x5e\x77\x2f\x63\xbf\xe6\xd3\xd2\x7b\x51\x6a\x1b\xcd\x00\x4a\x6d\x98\xd0\x31\xf4\x27\xec\xed\x66\xf1\xf3\xaf\x2a\xcc\xf7\xc5\xe4\xaa\x3f\xe6\x90\x58\x92\x6b\x63\x9c\x4f\x05\x01\xfd\x5d\x99\x96\x9d\x83\xcf\x44\xc9\x4e\x53\x1f\x22\xf3\x3e\xb0\xc3\xb8\xfe\xe2\xb0\x0f\xae\x5d\xed\x22\x9a\x0e\x84\xa3\x9a\xc3\x51\x03\x16\x95\xff\x07\xad\x67\x08\xd8\xd2\xba\xa5\x06\x2e\xde\xfd\xa7\xd4\xbf\x68\xf2\xcd\x86\xea\xfe\x0e\xc4\x74\x68\x51\x9f\x2e\x77\x14\x14\x81\xc0\x28\x6d\xd2\x88\xf8\xc9\x9d\x58\xa0\xd3\x7d\xa1\xfd\xc1\x86\x33\x9f\xb9\x3b\x1c\xc7\x8d\x42\xa8\x23\x76\x5c\x31\x88\x2d\xe4\x0b\x30\xbe\x8e\x46\xf0\x28\x9b\x0a\xdf\x49\x0b\xeb\xc7\x24\x51\x5f\x26\x8c\x8f\xf4\xda\xd6\x06\xc3\xc9\x9c\x0a\xeb\x12\x89\xbd\xdf\x60\x6b\x00\xfb\xe3\x54\x1f\x8b\xac\x38\x15\x59\xf8\x66\x66\xd9\x9a\x5f\x0c\x24\xd0\xda\xff\x28\x8e\x75\x95\x84\x9d\x9f\x60\xbc\xc0\xa2\xf8\xda\xf8\x32\x3e\x3d\x29\xd4\x67\x93\xe9\xe1\x54\xd3\xea\xc3\x63\x68\x5b\xaf\x6f\xb7\x14\xcc\x5b\xb7\x5d\xb9\xf3\x96\xfe\xbe\x72\x4c\x13\xb3\x64\x2f\xc8\xae\xf7\x30\x1f\x1a\x5c\x23\x5e\xed\x6d\x73\x51\x37\x1c\x99\x3e\xe4\x29\x2c\xd2\x1c\x7e\x91\x72\x54\x64\xdc\x36\xad\x21\x96\x2d\x04\x24\x55\x71\xc3\x13\x9d\x41\x29\x84\xb5\x38\xae\x6c\xbf\x93\xee\x9d\x0d\x47\x2d\xcc\x1a\xf9\xc8\x89\xd9\xdd\xd5\xc0\xc5\xda\xef\x8e\x02\x48\xaa\x18\xa9\x78\x14\x52\x94\x90\x41\xf4\xcb\x5a\xfc\xcb\xb2\x1e\x61\xb4\x90\xed\xe3\x93\xb5\x69\x00\x41\xd9\x7a\x57\x8f\x61\x03\x0e\x10\xc1\xd2\xef\x15\xee\x47\x95\x92\x5a\x4c\xb7\x84\xc2\x4a\x1b\xec\x6d\xe9\xdd\xd8\xb3\x54\x5c\x62\x06\xff\x62\xbf\xfb\xad\x12\x8a\xf7\x82\x3c\xef\x8a\x1e\x7f\x10\xf9\x9e\xbb\xfc\x4b\x90\xa6\xe1\x3a\xf8\x3c\x5d\x8c\x69\x5e\x33\x82\x7f\xbd\x2b\x99\xad\x72\x43\x06\xa5\x12\x0c\xb4\xbc\xaf\x42\x44\xc3\xbb\xe3\xd5\xed\x7c\x28\x1d\xfb\x5e\x7f\x97\x54\x44\xfc\x6a\xcd\xbb\x04\x3d\x30\x68\x01\xd3\x96\x97\xa7\x08\x48\xca\xb0\x6c\x89\xfb\x20\xfa\xc4\xe5\x3a\x5a\xbe\xdd\x90\xa7\x59\x1d\x5c\x8f\x46\x25\x5a\xd8\x8a\x23\x2c\xcf\x27\x3f\xb8\x93\xfe\xf5\x65\x7c\xbe\x03\xf9\xd3\x79\xe9\x69\x65\xac\x1b\x25\x88\xb8\xb8\x15\x95\x81\xae\x93\x80\xaa\xb0\xf4\xcd\x0f\x92\x9e\x8f\x98\x31\x27\x40\x82\x68\x75\x27\xfb\x24\x77\xfe\xc8\x60\x5f\xc9\x42\x2b\xbc\x5a\xfd\xb8\x2b\x71\xbe\x4d\x42\xaa\x40\xbb\x51\x33\x83\xc1\x59\x00\xc6\x13\x5c\xd3\x88\x23\x55\xc9\x07\x90\xaf\xd2\x87\x85\x17\xb8\xa0\x3e\xe4\x36\xfd\xbe\xb7\x5c\x60\x8a\x3a\x39\xbc\x3d\x38\xc5\x6b\xc4\xa1\x33\xf8\xff\xe2\x80\x7f\xad\x7d\x7f\x71\x5f\x72\x88\x38\xa0\x02\x85\xba\xf4\x47\xcd\x7e\x51\xa5\x93\x45\x50\xa9\x0d\x45\x20\xfc\x90\xf7\x1d\x91\xcb\x2d\xb4\x57\xda\x0d\xc6\xd3\x15\x75\xdc\x0d\x18\x67\xbd\x7d\x74\x8b\xa2\xcc\xda\x29\xb1\xd6\x5b\xa6\x4c\xfe\x63\x85\xeb\x14\x25\x1d\xef\x1e\x2e\xb4\x0d\x97\x5b\xcb\xb2\x69\x87\x02\x96\x49\xcc\x9a\x3d\xec\x8e\xb9\x8a\xba\x2b\x21\xf5\x0e\x72\x97\xed\x03\x0e\x49\x07\x8e\x08\xe8\x96\xed\x66\xfa\x16\x6c\x13\x57\xb1\x9c\x5f\x8c\x70\xec\xc1\x6f\x43\x4f\xfb\x8e\xf2\x8e\xa1\xbf\x54\x69\xe3\x49\xab\xa3\xb1\xe5\x6f\xe5\x9a\x9f\x9f\xc8\xc7\x98\xb6\x7e\xab\xe2\x2e\x60\x7c\x2f\x08\x1b\x34\xd1\x95\xf7\xfa\x63\xd7\x79\x56\x3d\xfb\x4b\x0a\x06\x3f\xbf\x46\xd0\x41\xd8\xf3\xbe\x16\x74\x49\x70\xda\x42\xa9\x06\xa0\x0b\x21\x2a\x0e\x97\x6f\x4c\xbb\x2e\x46\x1b\x09\x3a\x11\x2a\xa6\xd6\x37\x20\x7d\xb2\x87\xdf\x96\x3f\x74\x9d\x76\x05\xc2\x7b\xe7\xfc\x17\xec\xfe\xcb\xae\xfe\x62\x48\x50\x60\x44\x18\xe3\x2f\xd5\x2f\x9a\x1a\xe7\x92\x3e\x63\x00\x8d\x37\x5d\xa3\x96\x9a\xf6\x3a\xb5\x1b\xa6\xb6\x2c\x8d\xd9\x4e\x82\xcc\x92\x04\x3c\x9f\xce\xe1\xf5\x25\x04\xd4\x36\x8d\xfe\xa1\xd8\xc6\x47\x22\x68\xd3\x2c\x5f\x8c\x43\x6f\xb1\x96\x6f\x96\xc6\xf8\xfd\x57\x44\x2a\x06\xac\xc2\xd5\x0f\xb8\x27\x48\x67\x60\xc0\x32\xdb\xba\x96\x49\x79\xfd\xa5\x7b\xa0\x3a\xf6\x93\xf4\xed\x11\xb9\x23\xec\x73\x78\x8d\x6c\x71\x02\x40\x65\x66\x94\x1e\xa4\xdf\x11\x7d\x46\x44\xf5\x26\xf5\xc1\x9e\xd7\x42\xb4\xfc\x31\x18\xca\x94\xf0\x98\x1a\x37\xbe\x2f\xb8\xe1\xc0\x71\x53\xfd\xea\xff\x34\xfb\x47\x6f\xae\xbf\x78\xce\xaf\x8e\xb5\xff\xb9\x13\xa2\x63\xdc\x46\x48\x6a\x88\x72\x27\x9c\x12\x69\x20\xc2\x72\x85\x1f\x89\x03\x2b\x44\xec\xa8\xce\xb0\x60\x23\x8a\x88\x52\x94\xf0\xf4\x32\xbf\xce\xd3\x1a\xcc\x1b\x78\x61\x3d\xb9\x33\xc3\xcc\x1c\x3a\x3f\x4a\xce\xb8\x71\x7a\x0d\x08\x5a\xba\xc2\x86\x82\x9f\x5c\x7c\xf5\xf7\x5f\xe6\x77\x10\xbb\x53\x43\x18\x62\x05\x7a\x7e\x87\x45\x7b\x04\x5a\x71\x3c\x86\x61\x57\x72\xc4\xab\x73\xc1\xaf\x89\x2d\xd9\x30\x23\x4c\x08\x50\xed\x15\xa9\xfa\xab\x6a\xc2\x9b\x48\x18\xfe\xcd\x9d\xa2\x81\xbb\xf6\xa8\x91\xf7\x08\x9a\x33\x9f\xd6\x54\x11\xeb\x68\xa9\x8b\xed\xc0\xbe\x28\xfc\x2f\x81\xe9\x94\xfe\x5e\x8b\x45\xc3\x5a\x86\x7c\x08\x86\x17\x9a\x34\x21\x2e\xed\x66\xd7\xad\x88\x02\x24\x68\x7f\x8b\x1b\x14\x5e\xc6\xef\x1b\x67\x46\x1f\x87\x39\x6e\x7d\x53\xdd\x3d\x90\x38\xb0\x22\xa7\x6a\xf0\x85\xe3\xb5\x4d\x5d\x8c\x5b\xae\xb4\x59\xa4\xb5\x61\x2d\xf0\x8d\xeb\x75\xcf\x6c\x53\x5a\xca\x6b\xa9\x93\x2b\x09\x71\x84\x06\x1a\x9a\x4b\xe1\x77\x25\xd3\x9f\xc2\xe6\x69\xdc\x24\xc5\xf4\x0a\x4f\xbc\x90\x9a\xa8\xe6\xb1\x90\x19\x8d\x73\x5b\x4b\xf7\xd2\x94\xfe\xc6\x0f\xe4\x91\x2e\x9a\x28\x11\x9e\x66\x12\x93\xa8\x1d\x37\xc7\xe0\xda\x02\xba\xd2\x54\xd9\xd1\x70\x0c\x65\x67\x96\xf3\x4b\xc7\x5d\xc5\x8e\xd9\x72\xe8\x8b\x3a\x84\x15\x78\x30\x04\x7c\x9c\x23\x5d\x64\xf9\xc1\x2a\x88\x0f\x79\xbc\xf3\xe9\xce\x20\x26\xc4\x74\x91\x78\x35\x22\x47\xa3\x92\xad\x3e\x61\xca\x0f\x6c\xf6\xcf\xad\x8b\x44\x2c\x97\x4a\x93\x00\x14\xd7\xa5\xeb\x00\x02\x97\xda\x6b\x34\x6f\x45\x41\x58\x09\xf3\x27\xe2\xa9\x92\x71\xdd\x3b\xb9\xbe\x37\xc6\x2d\xa2\x3b\xc1\xdb\x14\x60\x15\x40\x23\xe6\x1b\xad\x27\xfb\x45\x84\x6e\xbc\x24\xae\xcc\x5b\xc7\xd8\xe3\x85\x96\xa4\xa6\x68\x3d\x6e\x3b\xae\x66\x12\xf9\xaa\x3b\x00\x5a\xd6\x64\xbf\xff\x66\xdb\xea\x42\x2e\x8e\xb4\xa3\x15\x26\xdd\x62\x9e\x15\x4d\x43\x8d\x9e\x58\xf0\x03\xdd\x0a\x36\x5e\x7b\x84\x33\x60\x7f\x16\xa5\x77\x99\x96\xae\x65\xf4\xba\xf5\xd8\xad\xd5\x97\xdf\x12\xa2\xda\x9c\x94\xa0\xcc\x25\x96\x75\xbf\x62\xbc\x3e\x4c\xb4\xf9\xfe\x62\x00\x5f\x43\x6a\x19\x8b\x5d\x8c\x98\x87\x11\x92\x48\x32\x27\x46\xbe\x9f\x1d\xbf\xf8\x23\xc4\xe7\x43\x07\x25\x99\x20\xb7\x37\xd1\xd1\xc1\xda\xda\x9f\x8f\x43\x0c\x03\x51\x2d\x9b\x25\x8d\xe2\xda\xf4\x8a\x67\x99\x23\x7b\xa5\x15\x54\xc3\x78\x49\xb7\xf5\x63\x4b\xf4\x1c\xdf\x01\xa8\x9a\x60\x5a\xe9\xc5\x73\xa8\x0f\x4d\x9d\x69\x9e\x8d\x52\x5b\x9e\xf6\xea\x58\x23\xaa\xf6\x2f\x6d\x13\x0b\x11\x54\x1d\x4e\xe2\x7d\xd0\x75\xce\x37\xbe\x8a\xd3\x7f\xae\x90\x47\x1b\x1e\x9b\xc7\xc3\xda\xa4\x2a\xaf\x0b\x7b\xe5\xfe\x96\x6a\xe5\xbe\xf5\x47\xc5\xda\xb1\x19\xd4\x0b\x2b\xb9\xce\xa8\x3b\xe5\x8c\x18\xdb\xc0\xa6\x64\x32\x92\xdb\x16\x4e\xb5\x7a\xca\xe9\xbc\x6c\x08\x8c\x57\x9a\x38\xfa\x07\x82\xef\x7f\x01\x01\x06\x90\x76\xef\xab\x02\x0e\xda\xe2\x8e\x39\x52\x6a\x4c\x7e\xd0\xfd\xb8\x0f\x55\xf1\xeb\xe4\x0a\x31\x7e\xb7\xd8\x4f\x38\x25\xff\x06\x80\x72\xcf\xd8\xbb\x6c\xf8\x66\x1f\xb3\xa1\xca\x4f\x63\x55\x16\x59\x26\x6b\x4a\xa2\x8a\x99\x8e\x12\xa6\xea\x6c\x3c\xab\xe7\xf5\x1c\x02\x66\x2d\x2c\x90\x74\x47\xa0\x26\x0e\xf3\x3d\x79\x8f\xea\x21\x14\x88\x6f\xb4\x6f\x87\x26\x8a\x2a\xfd\xd0\x9f\xd3\x37\xdf\x0e\xd7\x02\x44\x6e\x8d\xf5\xc1\x7b\x10\x59\x4b\xec\xbe\x1e\xca\x9a\x06\xe8\xe3\x66\x58\x95\x76\x59\x76\xf6\x8a\x0a\x30\x1f\xec\x11\x7a\xe4\x89\x7f\x00\xa4\xea\xaa\x76\xd6\x5e\xf0\x95\xfe\x83\xa5\x59\x6f\x49\x26\xd7\x61\xee\x58\x2a\xaf\xae\x39\x79\xf8\x86\x58\xd6\x91\x55\xaa\x5b\xdd\x5f\x48\xd5\xdd\x38\x98\xe8\x7e\x56\x8a\x34\x71\x2f\xc3\x89\x13\xca\x4c\x63\xb6\x0e\x95\xf1\xe1\x23\xd5\x34\xd4\x53\x5b\xd8\x17\xe6\xdb\x81\x07\xad\x67\x35\xb3\x33\x8a\x78\x93\xc4\xe0\x14\x4c\xe6\xfd\x61\x8c\xc8\xeb\xd0\x71\x3c\x89\x0e\xa1\x9d\x60\x63\xfa\xcd\x9c\x70\x30\xf9\xc6\x10\xec\x51\x2a\x81\xda\x7e\x75\x2a\xfd\xab\x9e\x7e\x74\xb3\x52\xb0\xaa\x78\xdb\xc2\x62\x35\xd8\xc5\x94\xb7\xf7\x2b\x13\x61\x08\xd8\x1d\xd4\xaa\x39\x21\xfc\xd7\xa2\xfc\xc1\x9e\xa4\xd8\xb7\x22\xf2\xa0\x95\x34\x71\x17\x33\x0c\x0e\x7f\xc6\x31\x96\x55\x5c\x0c\xc9\x0c\x28\x6e\xfa\xb9\xae\xda\xd4\xe4\xab\x9d\x55\x0d\xe5\x2e\x26\xcc\xa4\xff\xc9\xaa\x0d\x8a\x47\xd8\x2b\x26\x78\x63\xc7\xb1\x74\x52\x4f\x0d\x90\xda\x1e\x4b\xf5\x7e\xcb\xd0\x54\x17\x3f\x3c\x52\x68\xa9\xb6\x25\x64\x5a\x0c\x45\xcf\x71\x36\x59\x11\xef\xfd\x96\x45\xef\x11\xf4\x11\xf0\x15\x83\xca\x2a\x9f\x8a\x4a\x03\x61\x9d\x56\x70\xc4\x2c\x54\x13\x28\x9d\x08\x73\x78\x92\x4d\xa3\xe7\x8b\x46\x6a\x94\xbf\xd6\x04\x03\xa4\x86\x42\x2d\x4d\xed\x66\x9f\x20\x4e\xeb\xaf\x04\xb1\xa7\xdd\x98\x87\x88\xf6\xe6\xee\xe2\x53\x28\x6e\x6c\xe5\x10\xb9\x05\x09\x3e\x00\x19\x35\x8a\x2a\x19\xe5\xee\xa2\x94\x55\xbe\xed\xad\xbf\x19\x81\x14\xca\x12\x2d\xdd\x91\xad\x33\x6c\x97\x0d\xb6\x7b\x31\xa5\x76\x8f\x00\x69\x94\x6a\x88\x9e\xae\x53\xf1\x71\x0e\x51\xfe\x64\x85\x7b\x24\x45\x53\xe7\xcc\x2e\x7d\x18\x8f\x42\xa0\x65\xa5\xec\x89\x60\x2f\xe0\xd5\x0e\x0a\xb5\xd8\x8b\x9d\x3c\x64\x09\xa5\x3f\x33\x7a\x99\x0b\x50\x38\x54\x4f\x4a\xb7\xc0\x49\x49\xd1\x55\x31\xbf\xfa\xfb\x96\x66\x16\x30\x3f\x59\xba\x24\xf2\xc0\xef\x4a\x7b\xba\xf1\xe6\xb3\x6f\xa3\x4a\xa6\x73\xcc\xe5\xa7\x1f\x48\x17\x6d\x8c\x25\xf3\xeb\x22\xab\xbd\xd6\xff\x6b\x5e\xf9\xa7\xf7\x17\x47\x7f\x27\x42\x0e\x84\x0e\xc4\xac\x7c\x2a\x48\x69\xe1\xb6\xa7\xd5\x42\x61\xdc\x7f\x86\x71\x8e\x66\xfb\xbe\x72\xa0\x64\x9b\xdf\x9a\x57\x23\x4d\x6f\x63\x3b\x81\xbe\xed\x49\xe3\xd3\xec\x9a\x0c\x17\x84\x8a\x64\xbd\x55\x55\x7a\x89\x44\x5c\xd3\x7c\x97\xbd\x8d\xb0\x9e\x32\x85\x6b\x9d\x7c\x9d\x26\xb8\xb2\x7c\xaf\xb4\x42\x94\xf5\x3b\xd1\x1b\x31\x55\x6e\xb2\x45\xd8\x77\xc6\x14\x2d\x53\x33\x84\x82\x15\xbb\x7c\xab\x7c\xd8\xae\x83\x40\x56\x4e\x2b\x32\xc5\x69\xc2\x24\xe1\x08\xa4\x2c\x85\x8e\x03\x43\x67\x44\xec\x71\xc1\x67\xf7\xfe\xec\x73\x5b\x6a\x6b\x5e\x12\xd0\xb7\xa8\x22\xe6\x63\x4d\x8a\x17\xc5\xe6\x68\x77\x94\x62\xa1\xb4\xba\xf1\x24\x2f\x26\xb9\x76\xdf\x6a\x3b\x48\xeb\x72\x19\x3a\x1a\x49\xfd\x67\x85\x7f\x79\x0b\x7f\x71\x72\x04\x03\x5f\xc0\x0a\x8c\xe8\xce\x48\x31\xde\xc3\x27\x13\x9f\x20\x73\x4d\x74\xc7\x95\x56\x72\x1d\x9f\xb2\x4f\xbf\x4d\xcd\x98\xe2\x52\x19\x37\x15\x83\x1e\x3e\xfa\x89\x69\xe6\x74\x29\x38\xf4\x5c\x73\x66\x76\xf2\xdb\x89\x3b\x54\x0c\x3c\xa6\xf2\xc4\xfc\x82\x9d\x81\xc0\xcd\x33\x96\x70\x2e\x00\xed\x7f\x03\x19\x92\x3f\xc4\x8a\xfa\x76\x5c\xc3\x7f\xd1\xd5\x35\x2e\xda\xa8\x80\x4e\xbb\xc7\x65\x60\x5a\x8f\x8c\x82\xf4\x48\x0f\xcc\xa4\x94\x4c\x9e\x19\xe6\x16\xeb\x74\x3c\x05\x6c\xeb\xe9\x3e\x90\x1d\xe0\x32\xe9\xf4\xae\x6d\x9d\xa5\xe7\x16\x8c\x98\x6c\xff\x28\x80\x04\xa0\x77\x35\xd1\x41\x92\xa6\xd7\xac\x3b\x5b\x33\xf1\x31\x1b\xbb\xdd\xa4\x2a\xe1\x90\xd0\xc3\xcf\x1d\x25\x6f\x64\xa4\x27\xe1\xec\x7b\x6f\xa6\xff\xaf\x4f\xfe\x5f\xb7\x75\xfc\xc5\xff\xf0\x3c\x3f\xa7\x12\xbd\x50\x53\xba\x04\x9e\x69\x3c\xf0\x96\x0d\x1f\x7c\x64\x9b\x71\x36\x8e\xac\xfc\x03\x53\x2c\x77\x10\x71\xb3\x32\x57\xf9\x5b\x36\x7c\xad\x11\xcc\xf1\xce\x7e\x96\x52\xab\x99\x73\x96\xbd\xd2\x66\x63\x78\x4f\x0a\x8d\x77\x5f\x69\x32\xf4\x66\x65\xa8\x61\x36\xb0\xb4\x01\x07\x29\x05\xd8\x67\x9b\xb3\xc2\x5f\x3f\xad\x5f\x11\x89\x48\xcd\xa4\x0f\x67\x9e\x19\x37\x65\x8f\xff\x76\x38\xfc\x56\xd4\x20\xab\xfd\x94\x9e\x2e\x04\x90\x7e\x0c\xdc\x2c\x89\xaa\x6b\x2c\xbd\x9b\x82\x62\x4a\xf9\x12\x99\x62\x6b\x73\x9e\xaf\xa1\x10\xeb\x12\x1a\xe0\xf0\xe7\x8d\x64\x3f\xd0\x7e\x5d\xa3\x71\xc9\x2e\x92\x24\x50\xdd\xcb\xcd\x5e\x1e\xd8\xad\xc7\x1c\xd1\x62\xc3\x2f\x5b\x01\x1d\x46\x7e\x54\x96\x3a\x78\xa7\x75\x0a\x90\x0a\x6f\xfb\xfc\xac\xd1\x55\x25\x45\xda\x18\x5c\xab\x3d\xf8\x15\xec\xd5\xe3\x8d\x5f\x8a\x80\x05\x31\x71\x85\x54\x41\x7b\xc0\x15\xf7\x42\x9a\x0e\xbd\xaf\x11\x16\x87\xfb\xf3\xd5\x53\xb4\xc2\xcd\x89\x11\x8f\x2f\xd6\x64\x9e\x12\x27\xac\xd1\xf8\x6d\xd6\x2e\xaf\xbb\x38\xd8\x47\xa5\x5e\x36\xd5\xfa\xae\x5d\x2b\x3d\xc3\x21\x18\x79\xf9\xad\x54\x0b\x81\xd1\x8c\xa0\xf1\x1a\x65\xb8\x7d\x47\xec\x3c\xed\x52\x23\x31\x30\xfe\x1c\x7e\xcb\xbb\x2d\x9e\xe2\x69\xc6\x5f\xd9\xb6\xa3\x86\xbe\xb5\xf5\xae\x16\x3f\x66\x9c\x3c\x1d\x45\x75\x3b\x86\xbb\xf5\xdd\x00\x4b\xcd\xcb\x16\x70\x09\x44\x2e\xa0\xeb\x2a\xb5\x0a\x5e\x48\x25\xb8\x28\xba\x61\x39\x22\x4a\xa4\xe1\x07\xb3\xe6\xd2\x9b\xd2\xf4\x74\x00\xa4\x52\xf1\x46\x21\x89\x70\x6d\x23\x6f\xd3\xb7\x14\xbd\xd7\x2d\x03\x93\x7f\x4c\xd7\x3f\x69\x56\x73\xb3\xac\x45\x11\xea\x13\x38\xb7\x00\x6d\xa5\xef\xc9\xc9\x0f\x9d\x31\x61\xd3\xe1\xdb\xaf\x5e\x1b\x3d\x52\xb0\x62\x17\xe4\x4e\x79\x92\xe8\x86\x6f\x09\x0a\x77\x88\xf7\xc2\x80\x99\x3f\x05\x88\x2a\xf8\xda\xe7\x8b\x72\xa6\xcd\x47\x8f\xc9\xcc\x1a\xcb\x85\x2a\xf5\x76\xd7\xb8\xc8\x42\xdb\x9f\x91\x28\x51\xe2\x9d\x40\x98\x85\xf2\x8a\xd2\x33\x9c\x62\xb3\x51\x33\xa7\x62\x31\xb0\xc6\x82\x1f\x22\x69\xba\x8e\x45\x91\x21\x5a\xfe\x57\x84\x41\x8b\x2b\x35\xd0\xec\x85\xde\x3a\x7c\x31\x37\x26\x2e\x99\xe8\x05\x7f\x7a\x1f\x7e\x42\x74\xc1\xa2\x66\x8d\x8b\x23\x42\x1f\x85\xf1\xe5\xd9\xf2\x3b\x37\x30\xa7\xec\x0e\xdf\x05\xd2\xe2\x78\x5a\x05\xaa\x73\x14\x60\x39\x3c\x52\x93\x0b\xde\xf3\xd4\x8f\x1b\x36\x1b\xaa\x7d\x86\x0b\x87\x43\x51\x05\xd4\xf7\x3e\xbc\x5b\xfe\xf3\x23\x3a\x3f\x9b\x0d\x91\x81\xaf\x4f\x14\x72\x90\x5f\x99\x65\x74\xf3\x7a\x35\x35\x97\xe5\xd5\xf7\x87\xee\xfe\x17\xd2\x14\xf5\x09\xbf\xd3\x39\x42\x7a\x08\xdf\x18\x9a\x3e\x16\x9d\x51\x8f\x69\xb4\xf8\x5d\x5b\x39\xde\x8b\x73\xbb\x09\x2b\x66\x3e\x52\x40\xfd\x6d\xb6\x2d\x58\xc2\x2f\xee\xbc\x1b\x3a\xbd\x55\x77\x8b\x50\x70\x29\x23\xf5\x49\xab\x5c\xe7\x7a\xdf\x09\xde\x26\x53\x22\xa2\x83\x89\x84\xd9\x48\x22\x83\xc6\xd3\x23\xcc\x09\x17\xef\x7b\x85\x14\x69\x5a\x92\x7c\xbb\xab\xdd\x74\x4d\xf9\x1f\x6e\x87\x4d\x29\x8c\x36\x17\x80\xa8\x18\xdf\x8d\x7c\x7e\x0b\xd5\x41\x19\x84\xed\x63\xc6\x70\x1f\xba\x58\x88\xd6\x31\x4f\xea\x90\x85\xd7\x96\x39\x2b\xd5\x44\x7e\x1a\x7d\x11\xb5\x8e\x18\x9a\xe1\xd5\xa1\x32\xaa\x8f\xea\x23\x83\x67\x49\xe3\x12\x1d\x03\x74\x60\x10\x74\x4d\xd5\xf6\x1e\x0e\xbf\xca\xcd\xa4\x1f\x18\xe5\x11\x91\xe1\xcf\x37\x4b\xa6\x71\xb3\xf9\x6d\x67\x8d\x7d\xdf\xb9\x75\xe3\xaf\x90\x9b\xf5\x2e\xe6\x77\x1b\xf3\x8e\x9d\xe2\xcc\x06\x43\x27\xbb\x09\xc6\xb4\x87\xcf\x59\x6c\x4a\x9f\x4c\x76\xf5\xd8\x64\x16\x46\xfb\x72\x66\x26\x23\x06\xfa\x2d\x69\x20\x1e\xf3\x98\xcc\x3d\x5f\x58\x47\x14\x86\xda\x18\xba\x03\x7c\x7e\x62\x05\x9a\xd9\xe4\x0b\x18\x38\xec\xad\x35\x0b\x2a\x6b\xb4\xbd\x42\x2d\xc6\x8f\x5d\x9c\xe0\x04\xb4\x82\xf3\x1f\xc1\xbf\x2c\xef\xf4\x2e\xf9\x60\x73\x22\xfb\xae\xd8\x7c\x9e\xee\xf4\x15\xe1\x3d\xf4\x96\xc3\x8e\xa9\x0f\xe2\x89\x0f\x90\x1e\xf2\xc4\x88\x81\x84\xcd\x30\xe5\xcd\xa4\xc4\xf9\x70\x3a\x85\xf2\x49\x30\x56\x0f\xc1\xa2\xb3\xf1\xd3\x87\x23\xa2\x7b\x47\xed\x24\x49\x60\x51\x05\x93\x86\x12\x42\xe1\x29\x7c\x3e\x56\x2c\xff\x2e\x22\xa4\xe5\xb7\x8b\xc2\xb4\x72\xfd\x6d\x0d\xa6\xfb\x5e\xf6\x7b\x90\xf0\xb5\xc6\x0b\x69\x64\xae\x5b\x35\xba\xb5\x53\x69\xf9\xa9\x5a\x68\x3a\x6a\xe6\x13\x7d\x42\xef\x7b\x23\x78\x24\xb4\xd5\xcf\xdf\x93\x12\x9b\x3c\x7e\xbc\x20\x8f\x4e\x2a\x83\x47\x7f\xe5\x0d\xa2\x9d\x4b\x41\x6c\xfd\x6d\xcc\x85\x67\xa1\x23\x72\x66\x40\xa8\x34\x0b\x15\xaa\xb4\xf6\x16\xba\x04\x74\x72\x37\xbb\x68\x0e\x9f\x4c\x08\xb0\x0b\xa9\x27\x9b\xf8\x90\x48\xfc\xd4\x14\x41\x54\xf5\xdc\x9c\xad\xee\xb4\x46\xd5\xe5\xd9\x81\xf5\x42\x1a\xe1\x40\x3a\x3c\xfb\x41\x76\x72\xc9\xee\x20\x3b\x2d\xe9\x44\x1c\x96\x74\x6b\xd2\xfe\x8d\x62\xa7\x48\x54\x0d\x99\x87\xf8\xbd\x3e\x40\xda\x6d\x47\xf0\x28\x86\x50\x50\x5c\xb9\xae\x0b\xf3\x7b\x4d\xe4\xf3\x1d\x6d\x2b\xb1\x62\xf9\x2a\x44\x84\x3c\xca\xe2\x6e\x94\xbb\xf6\x0b\xe9\xa1\xe3\x27\xc3\xa1\xe8\xf4\x9b\xae\x7b\xbf\x21\xc7\x74\xd2\x76\xd8\xe3\x70\x55\x89\xb4\xc4\x25\xed\x57\x1a\x0c\x47\x63\x03\xbd\x80\xa1\xe8\x06\x65\xce\xb5\x23\xbe\x37\x28\x1a\x65\xe7\x21\x5a\x50\x88\xd1\xab\x5e\x7d\x4b\xb9\xbe\x34\xc7\xca\xa7\x8d\x2c\x2c\x49\x3b\x7f\x21\x2d\x48\x0f\xbb\xac\x1b\xa4\x5b\xb0\x94\x1c\x60\x43\x96\x2c\xc4\xa5\x31\xb6\x7c\xe4\x6a\xa1\x7b\x8a\x3c\x23\x0d\xfc\xf1\xbb\xaa\xf2\x05\xd9\xf0\x55\xad\xd4\x3d\xf9\x2e\x86\xcc\xb4\x36\x8c\x7a\x5a\xb8\xec\x50\x7f\x47\x15\x71\x28\xd0\x2a\xb7\xd1\xb1\x2d\xb9\x68\x0e\x2c\xc5\x85\xaf\xaa\x1c\xad\x10\x99\xa5\x89\x30\x2e\xf2\x21\x7d\xeb\xa8\x13\xf7\x84\xb1\xcb\xfb\x54\x95\xd4\x40\x4f\xbf\xe4\x39\x59\x75\xf3\x42\x3a\x59\x98\xe7\xef\xad\x47\x56\x3d\xa1\x6a\xf0\x0b\x4a\x0c\x8b\xaf\xf7\x12\x76\x7a\x4e\x45\xd4\x9c\x1c\x63\x83\xc0\x25\xe7\xdb\x26\x40\xca\x71\x1a\x7d\xa7\xeb\xa1\x57\x37\x1e\x8b\x23\xd0\xf1\x2d\xa9\xc6\x4f\xe8\x68\x76\x4c\x5a\x15\x89\x97\x85\x12\x41\x90\xcb\x4b\x13\xc8\x36\xc8\xfb\xaa\x5f\x9d\xb5\x1c\xaf\x68\x3c\x96\xfb\x6d\xaf\x3c\xd5\x26\x7c\x6f\xe2\xf9\x45\x28\x50\x23\xb2\x69\x2f\xe7\x47\xba\x0f\xf6\x81\x38\x39\x8a\x5e\x3e\x99\xb2\xd7\xc7\x39\xff\x3d\x1b\xaf\xe6\x87\x0c\x2c\x75\x70\xd7\x92\x78\xcf\x5c\xca\x46\xcc\x9e\xc7\x63\xf2\x42\x5a\x84\x6e\xa2\xcc\x65\x2a\x7b\x76\xf5\x37\xbb\x0d\x7b\xe2\x0b\x9b\x41\xa6\x2e\xd1\x69\xb6\xd7\x4e\xab\xbb\xbd\x35\x75\xe3\x39\x48\x1a\x6b\x2c\xd6\x00\x93\xc8\xb0\x41\xfc\x4b\xa7\xc3\x72\xbf\x95\x38\x5e\x67\x6c\x2d\xdb\x38\x12\xcd\x45\xed\x53\x48\x68\x73\xc2\xd2\x0b\x69\x32\xb1\x5f\x5d\x76\xb9\xc6\xcd\x98\x0d\x65\xdd\x5c\xc7\x6b\xa8\x2e\x98\xa4\x0c\x52\x4d\xe7\x3d\xcb\x8b\x25\x54\xb9\x0b\x04\x41\x80\x54\x23\x49\xbf\x5d\x51\xea\xf3\xe0\xec\xe2\xed\xf5\xb0\x6b\xa9\x09\x35\x3d\xae\x3b\x54\x6a\x56\x34\x75\x60\x9c\x08\x85\xbd\x14\x10\x8b\x1a\x29\x22\x91\x2b\x7b\x6d\xbe\x19\x63\x16\x98\xd1\xab\x97\x1f\x96\xd1\x88\x8d\xfd\x6c\x21\x31\xb9\xac\x46\x1c\xea\xfe\xab\x16\x3c\xe1\x09\x09\x2a\xab\xb2\xd7\x98\xfd\x20\x63\xcd\x85\x99\x96\xc0\xd8\x10\x32\x22\xf0\xdb\x74\x7a\x4f\xca\x4b\xda\x90\xf3\xc6\x81\xc0\xfe\x85\x54\x0e\x13\xcb\x5d\xa6\x14\x4b\xf2\xe6\x4b\xf4\x2c\xa4\x69\x0f\x74\xbd\xed\x23\x22\x5c\x22\x32\x71\x8c\x75\x5c\xf2\xd0\xe0\x6b\x81\xff\x42\xab\x7f\x79\x13\x7f\x71\x48\x29\x88\x40\x20\xb4\xba\x7f\x80\xa2\xfa\xba\x31\x88\xd7\x32\x7e\x42\xb9\x45\xd0\x39\xd5\xfa\xcc\x8c\x49\xa3\xfc\xf8\x76\x75\xd2\x13\x9e\x74\xef\x3b\x18\x35\x2e\x1e\xa6\xc4\xa1\x5a\x9a\xfb\x3a\x19\x9e\xad\xf7\x08\x6e\x53\x92\x15\xfb\x99\xc1\x2d\x0e\x6f\x36\xf7\xcc\x7c\x46\x0e\xa1\xac\x07\xbb\x11\x18\x9c\xba\xef\xb5\x85\xb3\x6d\xbf\x65\x3e\x7b\xf6\xb5\x4f\x27\x06\x37\x8e\x09\x6e\x1f\x11\x25\x6b\xb1\x71\xe0\x91\x69\x81\xf1\x12\x16\x56\x94\x56\xb9\x65\xcd\xe3\xf7\x0b\xad\x5c\x7a\x0c\xc6\x2b\x73\xcb\xbc\xe0\xcf\xf7\x73\xcc\x5d\xd6\xee\x57\x99\x65\xaa\x07\x00\x74\x93\xf8\xcc\xc4\x02\x6f\x59\x7a\x65\x66\x6b\x3c\x32\x83\x63\xba\xbb\x24\xe2\x53\x32\xb5\x6c\x18\x5d\x48\x6f\xa3\x5b\x65\x87\xe4\x4d\x19\xda\xff\x1f\xf8\xaf\xdb\xcd\xfe\xe2\x67\x55\x0f\xf7\x60\x4b\x54\xb0\x40\x29\x63\x0c\xb6\x33\xd6\x66\xe4\x20\x79\xa1\x8f\x89\x22\xe4\x46\x17\x0a\xe7\xd7\x6a\x28\x18\xd5\xc4\xc3\xb7\xd4\xcb\x68\xc0\xd7\xed\x23\x8f\x3e\x2e\x8d\x9c\xc6\xea\xa7\xdf\x34\x2f\x59\x18\xe8\x84\xbf\x9c\x2e\xcb\xb8\xc9\x86\x12\xcd\xf2\xc7\x94\x31\xe8\x4d\xf0\xcb\xac\xf9\x4d\x31\x7b\xac\x92\xfc\x16\x92\x12\xce\xba\x2b\xf0\x4e\x43\x23\x25\x80\xa0\x35\xfb\x99\x54\xe2\xfa\x75\x26\x35\x9b\x8e\x00\x38\x6a\x86\xdb\x7f\x35\xb9\x19\xb5\x5c\xa4\x20\xc8\x96\x08\x16\x63\x56\xb9\xea\xc5\x5e\x43\x46\x31\xf0\xfe\xb6\xe2\xa9\x15\x1c\x63\x0b\x1a\xe1\xb3\xf7\x63\x96\xd2\x9b\x5d\xf3\x47\x8d\xd9\x09\xf6\xf3\x94\xb5\x2f\xa4\xc8\x4d\x6b\x1f\x2a\xe9\xda\xa1\x44\x50\x38\xc5\xb0\x52\x80\xf5\x45\x6a\x06\x8f\x19\x8e\x73\xd5\x0e\x1b\xaf\x2a\x93\x1f\xca\x33\x38\xa8\x89\xd6\x24\x67\x64\x95\x73\x6a\x32\x1c\xc8\x85\x93\x0a\x5c\x83\x91\x55\x09\xde\x64\x4c\x2c\x51\x26\x21\x27\xe1\x4c\xd5\x32\xbe\x25\x65\x3d\xfb\xaa\xe6\x83\x2c\x4d\xf0\x90\x20\xaf\x0a\xc5\x0d\x36\x24\x71\x70\xf7\x24\xd7\xa4\x18\x27\xf4\x6e\xd7\x6d\x35\x3c\xfb\x0e\x2d\x41\x67\xa4\xa3\x43\x92\x5b\xb1\x41\x64\x1c\xfc\x54\x26\x00\xfa\x1c\x24\xca\x17\x12\x07\xa0\xca\x53\x38\x10\xd7\x90\x4c\xfa\x30\x09\x33\xf2\x37\x67\x7e\xa1\xf6\xbc\x97\xf1\x5b\x87\x22\xa4\xcd\x05\x8f\x7a\xde\xdd\x9d\xfe\x1f\x42\xc6\x82\x7f\x49\x68\x98\x2f\x75\x07\xb3\x59\x9c\x15\xcf\xd7\x9d\x9d\x9a\x73\xc3\x7e\x81\xdb\x86\x85\xba\x03\x0e\xe5\xa3\x9e\x3b\x06\x4f\x0a\x7f\xb5\x4d\x46\x7b\x43\xd9\xe0\x77\xec\x3f\xb7\xc1\x59\x1b\xf4\x76\xd1\xa4\x9e\x6d\x05\x46\xed\x83\x7e\x10\xce\x31\x80\xe3\x66\xd6\x8c\xbe\x6d\x87\x54\x69\xf4\xc8\xea\x98\xe8\x47\x04\x02\x7a\xd7\x03\xf6\x77\x55\x6c\xa4\x5f\x88\x04\x17\x2f\xa4\x39\xa2\xbf\x95\x94\xde\xdd\x16\xdd\x84\x7c\x31\xc2\xe4\xd4\x42\xf9\xae\xf7\x31\x07\xa9\xcc\xfa\xec\x74\x61\x02\x33\xd6\x92\x37\x1d\x98\x7d\x39\x25\x66\x95\x8a\x50\x87\xdb\xc1\x70\xb7\x00\x82\x50\x11\x7d\xaa\x52\x72\x8b\xf8\x80\x5d\x21\x69\xfc\x6c\xe4\xc4\xc2\xfb\x27\x60\x67\x75\xd8\xf6\xd2\x5b\xfd\x34\x63\x2d\xe2\x16\x82\x61\x91\x78\xf4\xe4\x27\x7a\xc0\xce\x22\xc2\x28\xbd\x2a\xd1\x70\xea\x9e\xcd\x70\x03\x68\x8f\x94\x91\x8e\x7c\xc1\xd4\x47\x35\x30\x1e\xdc\x2e\x42\x8f\x99\xc1\xc5\xf8\xb3\xb0\x7e\x36\x6a\x49\x4e\xde\x23\x34\x07\xbc\x57\xf8\xea\x91\x95\xb7\x03\x81\xa9\x45\x25\x8c\x05\xc7\xc2\x1c\x47\xb0\x13\x97\xba\x5a\x0d\xaf\xc2\x45\x23\x44\x1c\x4e\xc4\x94\x34\x07\xe8\x72\xfa\xc1\x8b\xdf\x85\xef\xd5\x1a\xac\x38\x60\xf6\x07\x45\xf1\x8b\xff\xa7\xf6\xb2\xec\x66\xf4\xf7\x6f\x60\x0d\xb3\x31\x84\x44\xa8\x00\x9d\xb4\x8e\x14\x1e\x9b\x29\x55\x33\x25\x62\x0e\xa0\xf0\x14\x94\x6d\xe0\xf8\x7f\x06\x68\xd6\x6d\xc6\x74\xef\x7b\x63\xb1\x0e\x0e\x03\xe9\xf4\xa0\x32\xf4\xf0\x9f\xa3\xa6\x26\x1f\xbe\xab\x7d\xbe\x5d\xfb\xbb\xbd\xa5\xec\x4e\xe9\x45\x87\xfb\x2d\x3a\xe1\xc6\x9b\x8c\x91\x23\x1f\xb8\x80\x79\x12\x7b\x7a\xf7\x7a\x92\x54\x6c\xfa\xf4\xd7\xd4\x9e\x0e\xdd\x56\x3b\x71\x58\xf2\x5a\x3a\xd5\xe7\x36\x81\x33\xd3\x8d\x08\xb0\xdd\x95\x27\x9d\x95\x55\xd3\x9f\xdf\x3c\x14\x6f\x31\x47\x7c\x0d\xce\xe2\x9d\x9e\x56\xf4\x54\xe8\x37\x39\xcb\x19\x0b\x3c\x5f\x35\x3c\x57\x40\x7d\x93\x58\xc4\x83\x15\xbc\xf3\x1f\x3c\xcb\xd7\x05\x19\x64\xd8\x0d\x2b\x8e\x2c\x77\xe7\x6f\x3f\xc5\x2c\xc7\xa5\x70\xe2\x72\x6d\xa6\x03\x65\xaf\x64\x78\xd2\xc3\x05\xa9\xcf\x4b\x2d\x7f\xba\xf8\xad\x73\x70\x77\x96\x7a\x72\xa6\x38\x7e\x53\x3b\x28\x49\x92\x18\x70\x15\xbe\x06\xd4\x8f\x6f\xa4\xfb\x9b\xf8\xb4\x7c\xde\xbe\x53\x27\x84\x12\xf9\xdc\xb8\xac\xa0\x92\xe3\xc4\x70\x21\xc6\xef\x1b\xe5\x3a\xb5\x1c\xf9\x06\xe8\xf7\x87\x3e\x22\xbd\xd9\xe2\xdb\x74\x61\x58\x9b\x58\x59\x1e\x31\x26\xd6\x8f\xac\x09\xca\xf1\x62\x8d\x7c\xf8\x43\x0b\xb3\x44\x04\xff\x82\xec\x8d\xf2\xea\x53\x5a\xfa\x41\x40\x09\xef\x44\x1a\x9c\x10\x60\xa0\x99\x50\xac\xad\xf6\xfc\x89\x57\x68\xab\xef\x26\xa2\xb6\xc9\x10\xd0\x89\x9e\x1a\x6a\xca\xea\xed\x37\x17\xeb\x15\x38\xa2\x9a\x1b\xf7\x58\xd1\x9b\xe4\x78\x75\xf5\xa3\x3f\xa4\x54\x64\xe1\xdf\x07\xb2\x50\x5e\x48\x35\x76\xc6\xd5\xfd\x1a\x9d\x85\x91\x9e\x24\xb5\xe8\x27\x46\x3b\x0c\x29\xcb\x48\x75\x0e\x2f\x27\xb5\xae\x1a\x57\x22\x9e\x7e\x80\x97\x8a\xaa\xe6\xbc\x8d\x24\x7f\xeb\xa0\x2c\xf4\x6d\xf5\xee\xd8\xde\xaf\x39\x06\xe1\xd1\x57\x78\xde\x7f\x47\x43\x5d\x8e\x29\x93\x28\x01\xf3\x7c\x22\xb1\x93\xd1\x8b\x09\x39\x78\xac\x61\x5f\x26\xe3\xab\x61\xc3\x0b\x8c\x75\x13\xec\xf2\x07\x70\xc3\x08\x59\x7f\x5f\xdc\xd7\x8d\x00\x96\x62\xef\xc9\x35\x41\xc6\x5a\xc5\x09\xff\x5b\x13\xd3\xe0\x54\x5c\x4c\xb0\xb4\xd6\x80\xb3\x4e\xe4\x24\xfb\x09\x87\x5a\x5e\xad\xc8\xee\x45\x54\xfb\xbc\xe9\x1c\x24\xed\xed\x03\xb5\x56\xc3\x9e\x8d\x3f\x2d\xbb\x62\x3a\x7c\xe2\x22\x9f\x63\x20\x54\xf9\xd4\x29\xcd\x28\x91\x80\xfd\xb2\xee\x89\xc3\x4e\x9c\xf0\x90\x9a\xad\xb7\xc8\x15\x35\xa2\x10\x15\x8b\x70\xaf\x5e\x65\x8e\xe8\x06\x22\x69\x08\xfb\xa6\x28\x44\x0a\x18\x9e\x6c\xc3\xed\x22\xa8\xa5\x30\x69\x61\x77\x28\xc1\x01\xd9\xb3\x31\x88\x5b\x4c\x30\xa8\xc3\x26\xc8\xaa\x38\x76\xe9\xb3\x52\x26\x50\x9e\x5e\x60\xb8\x5c\x2c\x77\x4b\x68\x65\xb4\xd7\xa1\x80\x63\xd8\x92\x28\xd7\x90\x2a\x1e\xde\xf2\x10\x7a\x63\x52\x2b\xd3\xcf\x8b\x0e\x64\x79\x9e\x83\x4d\xfe\x8e\x9f\x1f\xdf\xf2\x3d\xd4\x91\x87\x17\xc6\x54\x88\x56\x3d\x7f\x42\x2d\x0b\x87\xfe\x6a\x8c\x8c\x4e\xb4\x62\x08\x96\xb2\x28\x45\x74\xd0\x12\xbd\x78\x50\x07\x76\x77\x7d\xcf\xc7\x1f\x6e\xf5\x92\xe7\x1f\xd1\x08\x05\x53\xd5\x96\xba\xf0\xa6\x27\xb7\x13\x00\xe8\x14\x8b\xc0\x66\x29\x1b\x91\x9f\x5f\xee\x6f\xc9\x72\xe9\x96\x38\x08\x9c\x2a\x82\x3c\x89\x9a\x12\xe1\xc9\x02\xe4\xb8\x4a\x7b\x15\xf0\x56\xe9\x2f\x9c\x16\xbd\x66\x16\xaf\x0d\x1f\xfc\xf4\x32\x3b\xf5\xb8\xd2\x47\xa2\xf4\xf0\x8f\x81\x54\x29\x4a\x35\x28\x68\x9c\x68\x60\x86\xc7\xee\xeb\x21\x2c\x67\xe8\xa2\x4f\x84\x2b\xcf\xa0\xf1\x4a\x73\x8a\xb5\x4d\x96\x6c\x59\x3c\xc7\x28\x8e\xff\xbb\x3b\xcc\x18\x32\xf0\x04\xb4\xd1\x6f\x87\xad\x38\xb9\x0c\x49\x85\xcd\x7f\x46\x2e\xf0\x41\xcf\xf7\x0e\x3d\x27\x10\xa1\xa4\xd0\x95\xe7\x96\xd6\x1f\x8a\xde\x09\x3c\x81\xf0\xfb\x3a\xb9\xd5\x14\x26\xd2\xa7\x04\xb6\x54\x37\xed\x2c\xfe\xc9\x6b\x5d\x22\x47\x26\x9a\xca\xfa\x40\x0a\xcd\xb7\xe9\x13\x1a\xf5\xb2\x54\x6b\x0a\xbc\xd1\xbb\x79\x29\xe9\x66\x52\xd3\x9a\x9d\x24\xb9\x45\x32\xf0\x6a\xbe\x36\x3c\xf7\x5c\xd2\x4a\xf5\x53\xaf\x0a\x7f\x26\x01\xd6\xff\xde\xc3\x47\x6d\xdd\xbf\x0a\xc8\xd5\x53\xd2\x97\xf5\xc9\x51\x70\x9f\x47\x36\x0b\x30\x0b\x52\x18\x4f\x51\xb4\x29\x46\xbd\x39\xfe\xeb\x17\xfa\xe7\xe0\xe2\x90\x50\x50\x90\x40\x75\xe8\xc9\x56\x9f\xcc\xba\xc0\xa6\xe3\x3d\x01\x07\xf4\xfa\x93\xbc\x29\xa1\x2d\x86\xd6\xc7\x9a\x85\xd9\xf4\x44\xe8\x7d\x65\xd3\x09\x28\xc0\x08\x5f\xcd\xaf\x34\x0f\xd9\xfe\xa2\xb5\xf7\x35\x1f\xd0\xee\x3b\x8f\x45\x71\x05\x93\x93\x6a\x05\x27\x3a\xa8\xfc\x3d\xe5\x20\x8d\x5f\x05\xa0\x6b\x2e\x2e\xee\x8a\x45\xf2\xfc\x83\x69\x64\x23\x5b\x83\x4b\x99\x3e\xd9\xb0\x22\xed\xf7\x74\xaf\x8c\xab\xae\xbf\xcc\x5a\xc4\xa0\x00\xd0\x37\x30\xfd\x46\xf5\x37\x87\xce\x4e\xb8\xfd\xf8\x1f\x24\x46\xc6\xc4\x39\x74\x0b\xc3\x68\xbf\x7c\x70\xfc\xb6\xf4\x73\x8d\x3d\xcd\xe4\x26\xe0\xff\xfa\x5f\xfe\xf5\x70\x8a\xbf\xb8\xf7\xaf\xbb\x67\x30\x0a\x49\xeb\x21\x3d\x6e\xf3\x47\xba\x7c\xb2\x85\xab\x1d\x57\x88\xd9\x3e\x7c\xcc\x89\xc2\x88\xf9\x1a\x8c\x22\x6b\xb6\x6f\xa7\xb8\xf1\x03\xec\x4a\xc3\xb3\x7d\xc3\xb3\xc9\xae\xab\xf3\x2a\x6e\xa7\xb6\xe1\x6f\x3e\x2a\xee\xb9\xb6\xfa\x34\xfe\xc1\xc7\x3b\x0d\x35\xd8\x55\xef\x15\x00\x7a\xe8\x26\xfc\x5a\xff\xc6\x92\xc2\x9b\xbe\xd4\x34\x04\xdd\x9c\xc3\xd1\x24\xea\x17\x85\x48\x59\xaa\xef\xb3\x71\x21\x0f\xa1\x61\x04\xe0\x8b\xde\xd0\x14\xd9\x67\x13\x33\x38\x48\x68\x59\x55\xca\x95\x28\xf3\xc9\x23\x23\xf0\xbb\x1c\x0e\xaf\xe4\x48\xe6\x30\xc7\xd4\x33\x4f\x02\xc5\xea\xa5\x8f\xbf\xec\x86\xa1\xe8\x3e\x2e\x34\x9d\x94\x21\xc9\x4f\xbc\x11\x21\x1d\x7c\x6d\x4e\x82\x50\x6f\x65\x61\xdb\x7b\x54\xa8\xfa\x3f\x0b\xec\x77\x3f\xab\xf8\xa2\x3d\x51\xd8\xb3\x18\x64\x78\x42\xaa\x64\x2c\xd9\x43\x8c\xbf\x86\xa3\xdf\xf6\xf3\x5d\xe2\x24\x0f\xee\xea\x8b\xa8\x97\xf0\x42\x08\x8f\x13\x15\x5a\x1a\xf2\x52\xd2\xdf\x14\x6a\x3b\x85\xa6\x46\xb9\x62\x83\xce\x95\x87\xe9\xe2\x45\x0d\x75\xf2\xc0\x06\x9c\x1e\xe5\xe3\xc2\x82\x0e\x16\x9e\xc0\xe8\xda\x80\x4a\x1d\x88\x36\x67\xa3\x41\x09\x2c\x2e\x9a\xc2\x77\xad\x0f\xde\xdc\x35\x57\x3b\xa0\x00\x46\xc7\xec\x56\xd3\x4d\x1a\x56\x42\x13\x3a\xf1\x8f\x9a\xec\x10\xb7\xb5\x12\x17\xa6\x96\xcf\xe8\xaf\x7d\x5c\x60\xe8\x0a\x22\x4b\x5e\x5c\x0c\x4c\x9a\xed\x06\xe2\x0d\x82\xf2\x7d\xce\x8f\x45\x6a\x06\x6a\xe4\x90\xd5\xbf\xbc\x76\x76\xd2\x15\x54\x04\x81\x38\x74\xdb\x6a\xb1\xc0\xdd\x33\xc6\x98\x4b\xc2\x41\x14\xea\xa2\x58\x4f\x18\x6e\x52\x38\xe5\xb5\xad\x74\x95\x26\x3f\xb1\xfa\x66\xd9\xe6\x55\x87\xfe\x29\xa6\x17\xe4\xdf\xe8\xf0\x3f\x61\xdf\x9c\x23\xba\x05\x7b\x7f\xd7\x68\x38\x74\xdd\x5a\xf7\x4f\x9b\xe9\x8a\xcc\xea\xb1\x65\xe3\x78\xb9\x60\x89\x01\xf6\x3f\xdb\xe2\x91\x2d\x91\x51\x65\xac\x6f\x27\xbb\x8f\x87\x7a\x23\x52\xee\x6f\xb3\x03\x29\x4f\xbc\xee\x27\x70\xf9\xa6\x11\xab\x67\x08\x68\x21\xc7\x09\xb9\xc0\x62\x26\xed\xd5\x50\xe6\xdf\x63\x47\xeb\x62\xe3\x47\xcb\x70\x22\x49\x65\x3b\x9a\x4b\x4d\xd7\x8e\x8c\x69\x2d\x00\x2c\x05\x0f\xdd\xe5\xc4\x88\xfe\x2b\xbe\xb3\x4a\xc6\x75\x8f\xe6\x13\x94\xcd\x8c\x64\xbf\xf7\x9f\xd6\x99\x13\x0c\x09\x4e\x7d\xbb\x9a\x3e\x30\x85\x9b\xb8\x8c\xba\xa6\x71\x7e\x2b\xc4\x70\x88\xf3\x8b\x6d\xa9\x19\xfa\x92\x61\x58\x1e\x09\x7f\x93\x53\x66\x7d\x07\xab\xa4\x32\x07\x70\xc6\x46\xd5\xac\x69\xb0\x36\x76\x86\x39\x75\xb3\xdb\xb6\x0b\xf0\x4c\x30\x45\x12\xd4\x5f\xca\xd2\xa6\x24\x82\xf2\x4e\x7d\xb0\x8a\x80\xc3\x8b\x43\xed\xcd\x6e\x28\x26\x13\xce\xe0\x5b\xa2\xed\xe3\x7c\x05\x41\x84\xb3\x45\xc8\xe6\xd4\xfc\x0c\xaa\x48\xf2\xe8\x2f\xa4\x84\x7a\x2f\xc8\x51\xfd\x91\xab\xb5\xc6\x8f\x72\x53\x32\xad\x38\xf3\x21\x11\x5f\xb2\xde\x43\xcc\x62\x6e\x67\xc8\xae\x30\x38\x25\x30\x06\x10\x2e\x81\x15\x1f\x21\xa7\x98\xb8\x18\x6a\x53\x6f\x93\x60\xc6\x69\xf5\xd7\xd8\x38\xd5\x28\xb1\x2a\x89\x14\x96\x7e\xf0\x57\xfb\x32\xc5\x57\x69\x00\xf4\x62\x51\x37\x3c\x7e\x03\xca\x78\x59\x7f\xad\xe2\x5b\x47\x71\x65\x5c\x70\x10\x05\x4e\x77\xc1\xf0\x30\xfe\x0d\xd5\x55\x1f\x39\x2f\xb8\x52\xce\xe8\x21\x57\x42\xea\x3a\xee\x74\xab\x6f\xa1\xf0\x21\x9e\x55\xc9\xf4\xb0\x1f\xd9\x1a\x15\x4a\x0e\x85\x70\xf0\x7f\x17\x75\x20\xbf\xe8\x1f\xf6\x3e\x64\xba\x08\x01\x6a\x12\x93\x39\xfd\xb6\x20\xb1\xdc\xec\x00\xf1\x2f\x22\xfc\x40\x2e\x79\x48\xc4\xb5\x21\x76\x7b\x35\x70\xf5\xad\xe5\x58\xb4\x99\x73\xe6\xc7\x04\x1b\xac\xd2\x73\xf6\xc8\x48\xe1\xe7\xc1\x4a\xb7\xc3\x90\x2e\xa6\xc5\x8c\xa8\x35\x58\x0d\xae\xea\x17\x64\x3f\x09\x9c\x91\x84\xd4\x64\x73\x9e\xf7\xf7\xc6\x3d\x9c\x6c\x49\x47\x12\x2d\xf5\x3f\x6c\x28\x02\x52\xec\x50\x7f\x52\xe3\xdd\xbe\x80\xd5\xc1\x1f\x35\xa7\xa5\x32\xc1\x05\x10\xfb\xd6\x4d\xca\x70\xd5\x6a\x89\x1f\xe8\x95\x63\x7e\xd8\xb2\xc5\x4d\x1b\x44\x9d\x88\x29\x24\x03\xcd\x12\x66\xf5\x1a\xa5\x9f\x32\xbc\x6f\x91\xf2\x1b\x69\x53\xa1\x8c\x0b\x25\xd5\x75\x07\xa1\x95\xa5\xcb\xb0\xee\x35\x7e\xcc\x87\x71\x02\x96\x72\x42\xc5\x31\x6b\x2b\x2f\x82\x42\xd8\x7c\xb2\x18\xee\x40\x4c\x68\x52\x7a\x97\xd6\x48\x8b\x8d\x8f\xb4\x32\xd8\xb9\xfe\xb5\x4b\x14\xb4\xd4\xed\x7d\x62\xcf\x05\xe7\x2c\x33\x0e\xb7\x0d\x32\xda\x54\x13\x15\x9a\x8b\xe2\xf8\x72\x24\xbf\x00\x01\x62\x4e\xe3\xc3\x2c\xb1\x2b\x10\xb4\xb1\xb1\xa4\x7c\xf3\xe5\xe2\x4c\x38\xcd\xa7\xfa\x92\x2f\x83\x2a\xdc\xc9\x68\xe2\x2d\xb1\x3a\xdb\xc1\xde\x28\x0d\xe7\xa1\x0d\x88\x7a\x15\xc8\x44\xea\x90\x72\x37\xd8\x97\xf6\x25\x97\x24\xcf\x40\xcf\x3f\x18\xe3\xfd\x47\xbd\x3b\x7e\xab\x49\x8e\x74\x54\x58\x55\x04\x40\x54\x66\xc8\xa1\x29\xfc\xbc\x18\x45\x3b\xd8\x9e\xad\x27\xc1\x28\x83\xed\x22\x6c\x9b\xa7\x4f\x0f\x4b\xd9\xe9\x67\x93\xb4\x2e\x26\x3e\x60\xcc\xac\x88\x8e\x13\x80\xf0\xdd\x70\x14\x8f\xf5\xa2\x15\x19\xc1\x6f\xbd\x10\x7d\x9b\xbb\xaf\x5a\x9a\x64\x6e\xb7\x5e\xc1\xc3\x13\x78\x5e\x65\xc5\x69\xd7\xc2\xac\xdd\xcb\x98\x5b\x84\x40\xe3\x86\xce\x49\x1e\xcd\x9c\x0f\x97\xcd\x60\x85\x35\x6d\xc8\x8c\x27\x38\x36\xda\x02\xec\x7e\xd0\x2a\x8b\x67\xae\xdf\x62\xec\x94\xa9\xbd\xed\x86\xc9\x49\x0c\x37\x5b\x67\xdb\x55\x71\xdb\x24\xc9\x2f\x39\xc1\x61\xa3\x40\x00\xbe\x14\x31\x9c\xb9\xd9\x0d\xc7\x16\x25\xd7\x72\x3a\x92\x51\x45\x1f\xb6\x75\xbd\x2c\xfe\xfd\x3e\xe1\xb2\x3f\x29\xf5\xa8\x65\x7c\x9d\xc0\x75\xaa\xf4\x1d\xba\xc9\xb2\x09\x7b\xa8\x71\x3a\x28\x05\x31\x81\x07\x75\x85\x91\x0b\xc8\xb2\x35\x0e\x24\x1d\x6c\xfc\x58\xf8\x9f\x0a\x3c\x2f\xc8\x1f\x71\xe4\x28\xf5\x4b\x06\x7b\x09\x12\x05\xc2\x09\x30\xa1\x22\x8e\x41\x6f\x8e\x7c\x71\x9b\x3f\xe1\x94\x62\x25\x9b\x14\x7e\x34\x7d\xd9\x5f\xff\xe1\x7b\xfd\xc5\xa1\xfc\x21\x10\x80\xfd\xd5\x9a\xa6\xee\xd6\x49\x5b\x67\xea\x5e\x64\xf3\x13\x25\xfe\x15\x4f\xfb\x65\x74\x94\x67\x67\x05\xe1\xe5\xeb\x3a\x77\x2a\xe1\x2d\x2d\xc0\x06\xb9\x8f\x68\x73\x08\x81\xc2\x70\xbe\xe1\xf0\x58\xdd\x6d\x0a\x3f\x5a\xd1\x32\x10\xa9\xb1\xdc\x52\x71\x6e\xbe\xff\xb1\xf3\xad\x02\xbb\x92\xb5\x95\xa5\x02\xbf\xc1\x23\xc5\x55\x3f\x73\x40\x76\x12\x18\x72\x5c\x0b\xde\x66\x10\xe4\xe9\x06\x32\x9b\x20\x64\xdf\xdb\x66\x82\x4d\x98\x6f\xfb\x5e\x15\x2f\x38\xc0\x5e\x30\xa7\xc0\x19\x60\xed\xe5\xde\x0c\x7e\xcf\x93\xcd\xdd\xb1\xb4\x77\x56\x4c\x38\x54\xb7\xa5\x5a\xf9\xaf\xaf\xe4\x5f\x5e\xdd\x5f\x0c\xd1\xd7\x17\xd0\x2c\x44\x34\x81\xae\xcb\xdd\x2a\x32\x5d\xd5\x4d\x6d\xce\x33\x98\x29\xea\x30\xbd\x8c\x4d\x6b\x36\xf2\xcd\x1b\x1a\x5d\x09\x5b\x65\x16\x40\x86\x38\x24\x19\xa1\xf4\xce\xfc\x71\xdc\x04\xd7\xc4\xa5\x83\x99\xcb\x07\x0e\x7b\x6b\xef\x9f\x9e\xc8\xf9\x6c\x0e\x54\xf6\x86\xbe\x0c\xe0\xbd\xbe\x15\xea\xfe\x3f\x73\xe1\x91\xb7\x27\x8d\x9b\x2a\x48\xb8\xa3\x6d\x73\x71\x09\x18\xbb\x5c\xaf\xc2\x50\xde\xc5\xa3\x65\xa9\x91\x00\xd0\x4a\x67\x61\x16\xca\xeb\x44\x7d\x78\xed\x06\x09\x92\x3c\xf9\xdf\x75\xd7\x88\x59\x95\x52\xcb\x4c\x99\x0c\x2d\x54\x7a\xbd\x36\xbc\xff\x4d\xda\xbf\xbc\x90\xbf\x78\x1f\xc4\xff\x4c\xda\x20\x73\x40\x50\x2f\xf7\x00\x5c\xc0\x3c\x5e\x96\xa4\x5b\xe6\x42\xc8\x49\xff\x6f\x82\xa6\xa1\x27\xd3\x3d\x85\x0c\xc5\x61\x48\x7d\xd0\xbc\xbe\x3d\xd4\xc3\x4e\x3c\x1e\xc4\xc5\x42\x04\x84\xc6\xcf\x39\xe3\xeb\x66\xef\xd4\xec\xf7\xe1\x1a\x55\x9e\x54\x69\x6c\x20\xc1\x99\x38\xac\x1b\xc8\x3b\x6c\xa9\x9e\x0b\x7d\xae\xb8\xdd\x26\x6d\x8b\xa6\xa0\xb4\xf9\xeb\x7a\xa6\x9b\x92\x54\x25\x9b\x09\xeb\x90\x78\x0f\x40\xdf\x79\x97\x1a\x6a\x04\x77\x4b\x1f\x2a\xd6\xe4\xbd\x72\x6c\xfa\xad\xcd\xc7\xff\x37\xd8\xdf\x10\x55\x6a\x01\x3d\x10\x59\x6f\xcd\xe7\x3f\xd5\xfe\xe9\x36\xc4\xdf\xc5\xfa\x42\x00\xaa\xe9\xff\x34\x4f\x85\xc3\xa3\xa8\x21\xe8\x81\x85\x76\x52\x67\x1c\xa3\xf4\xc2\xb6\x94\x8c\xdc\xed\xcb\x6f\x41\xd6\x7d\x7a\xd5\x08\x76\xea\x3f\x69\x0f\x7e\x21\xea\xaa\xec\xb5\x0c\xd0\xb3\x2d\x97\x51\x80\x33\xb8\x38\xdb\xdf\xa0\xf9\x35\x46\xa2\xf6\x4a\xca\xc2\x3d\x17\x3c\xf4\x2c\x53\x24\xc7\x24\x9f\x15\x53\x98\x2f\xe7\xea\xd6\xe0\x46\x0f\x7a\x48\x2f\xa9\xbd\xb6\xcd\xd6\x24\x69\xbf\x23\xed\xf1\xac\xf4\x01\xa0\xc3\xca\x31\xb8\xed\x3f\x95\x67\xc7\x52\x85\x33\x7e\x7f\x0d\x67\x40\xa3\x94\x5f\x88\x8d\x80\x1f\xec\x93\x87\xea\xd9\xc1\xfa\xed\x75\x53\xfe\x7f\x59\xa7\x7f\xbd\x7e\xe7\x2f\xfe\xd0\xb1\xa6\x9f\x4a\xf8\x42\xed\xd0\x9e\xc3\x9f\x2c\x2c\x89\x3f\xfb\x7d\xfd\x29\xfb\xae\x41\x7d\x61\x2c\x46\x4e\xdf\x33\x51\xf6\x8f\xcf\xab\x35\x7c\x8a\x36\xd0\x89\xe9\x7e\x48\x23\xd8\xf5\xb9\x36\xa5\x5a\x65\x0b\x44\x27\x22\x17\x87\x49\xfe\x46\xd3\x3f\xd0\xf0\xc9\xd8\xfc\x00\xaf\xb2\x3d\x13\xd8\x6e\xcc\x52\x68\xea\x6e\x21\x23\xb9\x2f\xab\x60\x09\xb3\x25\x47\xce\x11\xdd\xa5\xeb\xd5\xc9\xc6\x6f\x34\x2f\x0a\x39\x04\x56\xa9\x47\x00\x52\xd3\x2a\xa9\x59\xdc\xa7\x38\x89\x8e\x90\x5d\x36\x66\xf1\xdd\x6f\x74\x77\x41\xb1\x58\x24\xa8\x1e\xe9\xdf\x96\xa1\xed\x07\x8a\x81\xb7\x5f\x2c\x10\xb5\x63\xb2\x74\x46\x34\xef\x91\xc4\xc4\x32\xa2\x30\xfd\x53\xd6\xf2\xef\xe6\xd8\x74\x05\xf8\x14\xff\xa0\xaa\x85\xef\x53\x81\x49\xdd\x36\x25\x19\x0a\x25\xab\x3d\x4e\x4d\xf2\x34\x6f\x24\x57\xc7\x95\x01\x8a\x6a\xde\x81\x13\xb7\x03\x01\xed\x32\x91\x87\x24\xc8\x17\xd2\xcc\x5a\xad\x2d\x59\xbb\x0b\x6a\xab\xb9\x65\xba\xcb\xc9\xda\x28\xb6\x60\x2a\xc2\xce\x8a\xad\x0e\x64\x3c\x1e\xcd\xe0\x6c\x1d\x59\x60\x12\x8c\xd6\x90\xdd\xa7\xa8\x8b\x31\xdb\x88\x2f\x76\x21\x90\x47\x83\xa5\x4a\x86\xc2\x90\x57\x2e\xfe\x7c\x9f\xae\xe1\x22\xd8\xb7\x04\xe7\x4b\xa0\x77\xe3\xcd\x89\x37\x05\x17\x14\x03\x6a\x6e\xae\xad\x16\xa2\x3d\x41\x37\x19\x86\x3f\x43\x2b\x55\xb4\xd1\xeb\x42\x63\xa1\x39\x30\xdc\xf5\x28\x4d\xc8\x3b\x0f\xca\x9d\x69\xef\x62\x5d\x84\x44\x1e\x84\xea\x43\x56\xe7\x19\x29\x97\xa3\x57\xd7\x5b\xba\xc8\x9c\x28\x00\x8c\xea\xfe\xde\x4d\x45\x1f\xfa\x2e\x29\xbc\xf2\xdd\xd5\xdf\x66\x72\x31\x87\x14\x86\xa1\x13\xa1\x37\x3a\x47\xcf\x1c\xad\xb8\xae\x64\xc0\xf8\x7d\x6a\xdc\xd3\xa7\x04\xea\xd8\xcb\x31\x46\x07\x84\x82\xb6\xae\x4f\xec\x4d\x4f\xc9\xcd\x7d\xbb\xcf\x79\x73\xd8\xbf\x62\x19\xc1\x9d\xc1\xef\x11\x13\x87\xe3\x1b\x9c\x31\xa9\x6d\xa6\x92\xe8\xea\xf2\xd9\xee\x2d\x2b\x45\xf1\x26\x35\x97\xd7\xf1\x4c\x02\xc1\x5a\x92\x39\x90\xff\x7e\x22\x25\x76\x09\x0a\x73\x9b\x53\x54\x52\x54\xb7\x73\x94\x0f\xc5\x77\x1c\xe3\x7f\xa2\xcd\x66\x70\x98\x4f\x92\x44\xcb\xf9\x9f\x18\x02\xd2\xdc\x12\x73\x6d\x5b\xbd\x50\x77\xa0\x5f\xcd\xf9\x7a\x72\x99\x92\xa9\x10\x59\xf1\xe4\x68\x31\xc3\x2d\x41\x18\x5a\x1f\xdc\xc3\xb5\x72\x18\x11\x6f\xa9\x4a\x6f\xae\xa2\xae\x09\x9b\xcd\x2e\x5f\xf7\x24\xd7\xd7\x18\xaa\xd2\x6e\x6b\x88\xa0\xa4\xeb\xc7\x60\xc0\x02\x69\x62\xde\xec\x0f\xcc\x3a\x51\x2a\xc2\xdf\xdf\x74\xaf\x65\x7f\x63\x99\x7e\xfc\x43\x46\xaf\x1b\x2f\xcf\x0d\xc3\xef\xae\x5c\x3e\x80\x01\xb2\x32\x72\x51\x98\x06\xa6\x16\xa0\x7f\x68\x9a\x47\x83\xe4\x7d\x2d\x6c\xc9\xc0\xbc\x6f\xcd\x98\x46\x27\x66\x46\xda\xa7\x60\x37\x4c\xf0\xa2\x3f\xc2\xe2\x3c\x14\x06\x6a\x31\x1d\x9d\xf1\x3c\x7c\x4a\xd9\x86\xfa\x58\x22\x9f\xe5\xde\xbe\x0c\xd4\xdb\x61\x4b\xaf\x6f\xe5\x0f\x40\xdb\x4c\x82\xfd\x77\xa8\xa5\x88\x37\x78\x9c\x92\x36\x77\x03\x50\x81\x0e\x75\x6a\xac\xa3\x45\xde\x09\x31\x53\xc9\x0e\x58\x5a\xe9\x3a\x68\x2f\xc8\x5f\x59\xf0\xf1\x6f\x3d\xeb\x49\x52\xaa\x96\xf6\xde\x0e\x08\x93\x7b\xe4\xb2\xe4\x73\x9b\x9a\xb7\xfa\x99\xed\x12\x66\x78\x90\x83\xed\xee\xdb\xf0\xad\x03\x06\x67\xc5\xb2\xf3\xf5\x58\xe5\x67\xee\xad\xa5\xfa\x83\xaf\x87\x11\xcd\x49\x33\xc7\xe5\xaf\x3d\x8d\x2c\xb7\xad\x81\xcb\x65\x6a\xbf\x7c\xb0\x85\xf2\xab\x90\x12\xbe\xc6\x51\xfb\xf5\x46\xb0\xaa\x9a\x61\xec\x29\x45\xd4\x23\x72\x58\xd9\x0a\x34\xe2\x0c\x01\xa4\x9f\xe8\xea\x6b\x4c\x9c\x03\x4f\x1c\x0d\x79\x9a\xd2\x38\x12\x13\x0b\x35\x88\x2f\xc2\x42\xa8\xed\x71\x33\x19\x7b\x07\x0c\x66\x79\x81\x68\x27\xbf\xbe\xed\x22\x42\xc6\xdb\x18\x41\x63\x53\x25\x85\x53\xfd\xfb\x01\x56\x1d\xb6\x78\x28\x0c\xcd\x0e\x72\xf8\xfa\x5c\xca\x1b\xd0\xa6\x5e\x69\x91\x9f\x7b\x21\xe9\x16\x42\x7e\xab\xcd\x88\x60\x8f\x7b\x6a\xf8\xd7\xb7\xca\xb1\x36\x9d\x98\xa9\xe2\xde\x47\x5a\x37\x5b\x01\xd0\x3d\x4f\x99\xda\xcc\x2d\x4b\x26\xf1\xc6\xbb\xe4\xbf\x6c\x76\xd1\xdb\x5f\x71\xb6\x55\x08\x33\xf8\xe3\x3f\x4b\x15\x86\xc7\x48\x33\xbe\x88\x9a\xf2\x73\xc5\x7b\xe9\x97\x3f\xdc\x17\x51\x05\x61\xf4\x59\xd8\x2f\xba\x74\x94\x77\xe8\xdd\x8d\x8a\xb0\x39\x3a\x71\x79\xb5\x28\x40\xf9\x65\xd6\x15\x89\x04\xee\xc3\x68\x07\x4c\xde\x48\x05\xbc\x4e\xea\xd1\xf9\xb1\x77\x40\xbb\x38\x17\x64\x6f\x47\x7a\x67\x9b\xdb\xd0\x7b\x30\x30\x63\xe7\x88\x76\xd6\x4d\x98\xdf\x59\x67\xe9\x10\x49\xa7\xc4\xee\x6b\x7e\xff\x8c\x0a\xc1\xdf\x28\xa2\x93\x2f\x45\x77\x78\xaf\x0c\x2c\x7f\xc7\xb7\x6f\x2b\xd9\xd1\x2d\x82\xac\x52\x4c\xce\x46\x9c\xa0\xc2\x93\xa4\x15\x51\x53\xc7\xd4\x24\x0e\xf2\x0a\x8a\x9b\x65\x61\x81\xcc\x57\xca\x3b\x34\xb2\xdf\x8c\x0b\x39\x63\xbc\x42\xc2\xe1\x0c\x66\x97\x91\x13\xa4\x34\x62\x5c\x24\x9f\xcf\x06\x96\xda\xdf\x96\x8d\xc9\xbc\x20\x4f\xa7\xc2\x42\x82\x52\x30\xdb\x49\xe5\xbf\x7a\xa4\x4d\xe6\x69\x1e\xc1\x22\xaa\xf3\x7a\x0e\x7a\x30\x97\x77\x4b\xc3\x33\xc8\x82\x0d\x8e\x02\x9f\xde\x8d\xe2\x30\xae\xaf\xf9\xae\xdd\xa1\x67\xa2\x42\xc0\x40\xd2\x51\x88\x10\xc3\x22\x38\xf9\xcd\xc6\xe9\x53\x32\x64\x0a\xbf\x90\xba\xfc\x41\x52\x36\x78\xdc\x12\x95\xb5\x53\xb7\x16\xbe\xd2\xe1\xba\xa5\xeb\x32\x39\x91\xe6\x57\xce\xbd\x32\x73\x17\xf0\x59\xed\x02\x48\x2b\xd9\x6d\x22\x95\x43\x3f\x3f\x2c\xa0\x2f\x35\x13\xd4\x89\x9e\xf8\x34\x68\xc1\x37\xbf\xd5\xda\x46\x93\xe9\x7a\x65\xae\x72\x05\xe4\x52\x7f\x43\x84\x3f\xa6\x0e\xf5\x0f\xcf\x0e\xe8\x69\x42\x99\x5f\x6f\x4f\xcc\xd7\x77\x16\x85\x77\x59\xcd\x31\x7a\xc1\x19\x76\xb7\x25\x01\x36\x15\x94\x48\x19\xd7\x78\x43\xcb\xcc\xeb\x1b\xe2\x13\xa3\xc3\xb3\x6b\xe0\x92\x73\x37\xce\x1d\x6e\xb6\x99\x2f\x20\x4d\xb5\x96\x62\x01\x3e\xde\x90\xc2\x41\x74\xfb\x31\xaf\x9f\xd7\x11\xcd\x40\x4c\x0d\xdb\xe8\xdd\x69\x2e\x9c\x6e\x58\x41\x4c\xa0\x92\xea\x27\xab\xfd\x84\x1a\xe0\x04\xef\xc6\x76\x48\x65\x4d\xa6\xeb\x7c\xb3\xea\xad\x9b\xdc\xb6\xe3\xaf\xa8\x3f\x05\xa3\x93\x87\xb6\x0f\xa1\xb9\x10\xcd\x54\xad\x04\x90\x92\xf5\x1f\x9c\x15\xc1\xa6\xe5\xa6\xb9\xdb\x91\xfb\xd3\x95\x67\x4f\x73\xd9\x6e\x22\xc7\x6f\x37\x4f\x94\x60\x91\x16\x4e\x13\xbc\x7e\x21\x2d\xa4\x3b\xd0\xb7\xa3\xf3\x8d\xe9\xea\x39\xab\xc6\xd0\xf2\xe4\x20\x61\x59\x77\x2d\xe3\x18\xea\x26\x2a\x61\x2d\x5c\x2b\x7d\xd6\x00\x66\x5f\xf5\xaf\x31\x8d\x91\xff\xd0\xf2\x76\xde\x5b\xbc\xae\x52\x7f\xc6\xd0\x8d\xf1\x07\x0d\xf6\x88\x6a\x66\xa8\x5c\x55\xbf\xc6\xa1\x72\x20\xd8\xcd\xe2\x9b\x64\x67\x56\x39\xf8\xd1\xe1\xf6\xfc\x0d\x09\x32\x7a\x94\x5d\xd5\xee\x8b\xa9\xed\xb2\x12\x3f\x9b\x60\x41\x6d\x2f\xd0\x98\xfe\x87\x09\x95\x27\xa0\xcc\x9e\x8e\x13\xd5\xeb\xc3\xf1\x3c\x79\x07\xbf\xb8\x49\x17\x2e\x5b\x90\xc2\x57\x13\x4a\x34\x12\xef\xc1\xb2\xff\xea\x64\xff\xf2\x7c\xfe\xe2\x30\x6c\x08\x08\x40\x9d\x0c\xa5\x95\x72\xa5\x79\xd3\x9d\x37\x65\x6a\x9e\x84\xd6\xde\xd2\x29\x1b\x66\x9d\x9b\x7b\xc8\x82\xf1\x5d\xbc\xb7\x48\x44\x87\x93\x11\x98\xa6\x1b\x3c\xc9\xcb\x56\xdf\xd4\xf2\xf6\x80\xc2\x9d\x0d\xe9\x08\x24\x13\x40\xca\xdd\x89\x2f\xee\x1e\x6a\xb0\x19\xed\xf3\x37\x07\x5f\x11\xca\xfd\x93\x45\x22\xe6\x3c\x82\x66\x12\xdb\x6c\xd6\xf2\x44\x8c\x91\xcb\x9d\xa8\xf2\xa9\x7e\x6c\x21\x3c\x39\x2b\x3c\xe3\x6d\x03\x06\x00\x65\x7a\x0a\x9c\xb4\x24\x93\x2f\xe6\x2a\xa9\x5c\x78\x8d\xf2\x33\x61\x6e\x32\x7b\xf7\x51\xd8\x32\x2e\xf4\xeb\x33\x77\xf2\xc7\xa0\x66\x00\xda\xd0\x1e\x32\x36\xd2\x09\x6d\x74\xa5\xa3\x16\xe4\xc9\x22\xd4\x6a\x7a\x2c\xd7\x6e\x54\x7d\xeb\x91\x15\x1a\x4f\x55\xc2\xa0\x36\x75\x53\x0d\xf5\xff\xe6\xa9\xfd\xc5\x29\x61\x60\x30\x81\x2b\x6d\x3a\x8a\x19\xd3\x71\x1f\xf1\x56\x0c\xa3\x68\x7b\x65\x19\xb7\x6f\xdc\xae\x69\x94\x5d\x03\x68\x9d\x5b\xf6\xfe\x5c\xc6\xe0\x2d\x82\x37\xf0\xf0\x7e\x84\x08\xcb\xe3\xae\x9a\x25\x2b\x59\x93\x8e\x24\x68\xae\x33\xaa\x0e\xd4\x50\xc9\xb6\x8b\xac\xb4\xb9\x41\xcf\x76\xa2\xc9\x80\x97\xf5\xe0\xc8\xf1\xfd\x6a\xff\x62\x45\x74\x6c\x60\x3e\x10\x99\x0a\xbe\x75\x89\x47\x0f\x5f\xd5\x9b\x1f\x7b\xaf\xaa\xd1\xfd\xc1\x0e\xac\x7e\x7d\x81\xab\xb4\x16\x7f\xf4\xca\x83\xbc\xda\x9d\xd6\xce\xcc\xf5\x8f\x46\x36\xea\xbd\xff\xcd\xf6\x4b\x47\x3a\x16\xe1\x49\xbb\x1a\x6c\xca\x53\x2f\x2a\x27\xee\xf6\x7e\xe6\x6f\x26\x3f\x58\xf1\x79\x23\xb8\x83\x7a\x24\x6e\x6b\xe3\x22\x15\x3a\x94\xf9\x70\x24\x92\x74\xee\x0b\xbe\x4d\xe1\xf7\xae\x5d\x27\x5b\xe9\x84\xd3\xd3\x4e\x4f\xf1\xac\x74\x33\xb6\xa9\xdf\xd8\xda\x3d\x1e\x0b\x9e\x39\xfc\x07\xcb\x89\xd9\xe5\x7f\x57\x00\xff\xe5\x86\xfd\xc5\xa1\xa0\xa1\xd0\x81\x65\x53\xc2\xf2\x68\x93\x72\x74\x86\x52\x2b\x7d\x04\x41\xa3\xa4\x45\x81\x1d\xc6\x9d\x75\xae\xe7\x22\x0d\x9f\x1f\xc7\x10\x27\xd8\xc8\x08\x08\xf1\xfa\xd7\x8c\xc3\x9a\xfb\x92\x6f\xaa\xcd\x07\x7f\x34\x6c\x5a\xea\xcb\x8e\x0c\x77\x1a\x95\x73\x3e\xfb\x26\x0b\xda\xfa\xef\x52\x0b\x00\xd4\xfa\x22\x10\xe5\x4b\x00\xd4\x6b\x9d\x58\x5f\x57\x88\x27\x89\xcf\xed\x52\x7e\x10\x4c\x49\xdf\x0c\x84\x99\xff\xae\xd6\x06\x77\xb5\x00\x9f\xae\x8d\xc1\xb9\xae\xca\x84\x0f\xdf\x3b\x3a\x7c\xd6\x37\xed\xe3\xe7\xe1\x35\x79\x2c\x47\xb0\xee\xab\x96\xe2\x8e\xc6\x08\xd3\x4a\x63\x2f\xdf\x4e\x06\xe1\xd5\xfb\xd6\xd6\xdf\x95\x18\x7f\xdb\x9c\x9e\xd6\xcb\x36\x1c\x1b\x94\x71\xa6\x7b\x1c\xe9\xf3\xd6\xb3\x0f\xdd\xac\x8f\xc0\x47\x11\x4e\x08\x88\xcd\x2f\xc3\x28\xf6\xb2\x8a\xf5\xcc\xde\x49\x5f\x32\xd4\xb4\x9e\xec\x98\xa8\x8d\xea\x92\x3b\xd3\x1d\x31\xf3\xc0\xbe\xbc\x43\xf6\xcf\xbd\x48\x1c\x01\x13\x06\x8c\xf6\x7d\x58\xd1\x48\xd3\xed\xe9\xbe\x50\x63\x9f\x14\x9d\x8e\x75\xb0\x52\x24\x4e\x3a\x24\x25\x37\x6f\xdc\x0d\x31\x1c\xbf\x61\x20\xca\x02\x84\xc0\x40\x5d\xdf\xe9\xd9\xbe\x4d\xd1\x71\xdf\x1a\x27\x1f\x3b\x5e\x2e\x70\xfe\x3b\x6a\xf1\x81\x75\xa4\xa5\x21\xfc\xca\x4a\xf0\x18\xb4\x97\x91\x00\xd9\x75\xe4\x92\x15\xa2\xc9\x1b\x72\xc8\x0b\xec\x86\x83\x94\x9e\xc0\xee\xa1\xa3\xc9\x9b\x84\xc4\x0d\x8b\x78\xb5\x47\xf0\xf1\xa1\x69\xbc\xe8\xa7\xe2\xad\x18\x7f\x0e\xbb\xee\x3d\xc1\x3f\xb4\x3b\xf3\xc2\x23\x69\x71\x23\xe6\x51\xe2\xd1\x4f\xf9\xd8\x1b\x8f\xa5\x37\xf3\xff\xf7\x02\xd7\xbf\x1e\xb0\xf6\x17\x7f\x7e\xfe\x76\x9d\x4a\x0c\x1c\xff\x6e\x57\x49\xd1\x07\xdd\xd8\x99\x3e\xca\x7a\xe8\xed\xdb\xee\xbf\x82\x36\xc6\xf5\x9f\x29\x67\xb8\x87\x13\x8b\x2a\xf6\x5a\x30\x03\xa4\x28\x5c\x87\x1a\x58\x88\xa2\x7a\x60\xf3\xda\x61\xd4\xf7\xa6\x9e\xcc\x81\x8c\xd0\x0f\x5a\xe2\xd6\xcf\x35\x35\xe0\xa5\x88\xa9\x05\xab\x67\xce\x7b\xf7\x08\x36\xb4\xf8\xc5\x6d\xeb\xd8\x16\xd7\xe4\xf1\x33\xed\xef\xf2\x93\xe4\x13\x2b\xe6\xba\x3f\x4f\x5b\x41\x8b\x56\x49\x03\x50\x88\x94\xf9\x28\xbc\x8f\x44\xa2\x9d\x63\xa2\xb5\x56\x50\x2e\x8b\xaa\xe1\x8a\xc2\xa6\x3c\x95\xcd\x83\x7e\x72\x1b\xd2\x74\x9d\xaa\x00\xd4\x7e\x32\x4c\x51\x54\x8e\x86\xd7\x35\x2a\xff\x79\xe7\x29\x0c\x82\xea\x18\x06\x86\xc1\xd4\x75\xca\xd1\x0e\xcf\x71\x28\x4d\xe2\x7f\xd2\xbb\xc9\x5b\xbc\x82\x09\xbc\xe5\xa1\x5e\xee\x68\xe5\xcc\xbc\xbb\xb5\xbb\x6a\x26\xf4\xd0\xaf\x30\x3a\x9f\xad\x47\xfa\xf6\xe6\x74\x81\x9c\x19\x89\x50\xf4\xdf\xb7\xca\xc5\x11\x17\xe9\x82\x11\xe8\xbb\x26\x99\x19\x8d\x8a\x74\x02\xf9\xd5\x44\x99\x03\x0e\x01\xc5\x49\xc4\x40\x41\x9a\xe9\x5b\x89\x4a\xd5\xdd\x78\xeb\x5a\x97\x70\xc2\x4c\x97\x85\x4a\xf1\xa6\x4c\x76\xc7\x1f\x4e\xb8\x25\x93\xce\x39\xc3\x57\x06\xa2\x40\x68\x46\xf7\x19\xc9\x5e\x5c\x00\xdb\xe1\xbd\xd1\x57\x7e\x15\x5a\x82\x9c\x83\x0c\x34\x9e\xfd\xeb\xf3\x2e\xf7\xa7\x08\x38\x14\x6a\xf0\x7e\x1d\x4a\xac\x73\xa4\x7a\xd5\xe4\x9e\x0f\xe3\x03\x99\xdd\x94\x21\x02\xaa\x36\xde\xeb\xd6\x2f\x9f\x15\xca\x0a\xb1\xaf\xbf\x63\xaf\x17\x01\xd0\x78\xe3\xa2\x9d\x0c\x13\xb1\xd1\x8d\x1c\xf7\x22\x51\x82\x90\x6b\x4b\x9a\xcb\xd4\xd2\x4a\x64\xb6\xb0\xbc\xc3\xcd\xc3\x93\x16\x2d\xb0\xcc\xbc\xe1\xa2\x2f\x43\x13\x0a\x41\xa2\xcc\x27\xc7\xb1\x9b\xad\x9d\x33\x95\xbc\xb8\x55\x95\x9a\x45\x35\xcf\xac\xf1\xb5\x78\x64\x04\xe8\x4b\x8a\x57\x6d\x37\x12\x40\xd4\x7a\xce\x15\x33\x40\xe0\x8d\x73\xf3\x44\xb3\xfe\x8e\x5f\xa5\x7f\xa8\xa1\x37\xff\x6d\x97\xf3\x14\x7c\xd8\x48\x08\x71\x6f\x47\xe2\x4f\xfa\xa1\xa0\xe6\x87\xc8\x07\x34\x68\x5b\x15\xbb\xd8\xaf\x2a\x0c\x29\x63\x38\x04\x1c\x5e\x85\x82\x0d\xc0\xc9\xa4\x80\x3c\xe3\x75\x62\x47\x63\x17\x8a\x44\x4c\x11\xd3\x65\xb5\xd3\xa8\x6c\x57\x42\x23\x1b\x7e\x44\xe5\x04\xd3\x40\x65\xb1\x0b\x78\x69\x8d\xb7\xfc\x54\xff\xe7\xfd\xce\xf3\x4e\x42\x68\x5e\x3e\x57\xab\x3b\x0f\x6b\x78\xa1\x79\x40\x57\xe7\x7d\x15\xf4\x7b\xb2\xe3\xc3\x26\xe0\xb1\x20\xba\x12\x0a\x7a\x71\x9b\xf5\xb0\x4a\xa2\x39\x3d\xd6\x6d\x16\xcb\xdb\x12\x63\x4d\xf8\x27\x51\x75\x4f\x0c\x4d\xd9\xa2\x85\xd0\x17\xe4\x2d\xdf\xca\xdb\xd8\x13\x8f\xd0\xed\x66\xee\xf4\xb5\x69\x29\xb3\xea\xeb\x04\x53\xc8\x48\x98\x96\x9b\xd9\x0a\xc9\x87\x14\x7c\x70\x51\x4b\x21\x78\x19\x63\x51\xda\x73\x7e\x90\x34\xad\x73\xdb\x34\x4b\x77\xcf\x6a\x34\xb0\xb0\x53\x76\xe8\xb4\xcd\x35\x6c\x83\x26\x9a\x00\x3b\x4d\x57\x3e\xd8\x37\xb0\x53\x3d\x43\xf9\x2a\xa0\xce\xf0\x28\x85\x0b\xbd\xe1\x0d\x8c\xbe\x3e\x2f\xf0\xff\x2d\x1b\x2c\xcc\x30\x7d\x04\xbc\x26\x30\x4c\x44\x4c\x53\x6b\x39\xff\xd6\xb5\xe6\x5e\xce\xc5\x42\x2f\x2b\xe6\x20\x81\xb0\x36\xf7\xd7\x9b\xbe\xfc\x88\x50\x5c\xcd\x43\x40\xfd\xa4\x3c\x9f\x74\xd7\xe5\x69\xdf\x56\xef\xf7\x67\x0b\xbb\x37\xf4\x8a\xb7\x5a\x26\x19\xb9\x5a\xce\x0e\x89\x98\x86\xd7\x50\x0b\xf7\xc0\x19\xea\xd0\xf6\xc6\x9d\xf4\xcf\x31\x77\x9e\xdb\x2c\x81\x6f\x77\xab\x4c\x3e\x32\x44\x1d\xd6\x9a\x10\x22\xb1\xe6\xf0\x72\x2d\x25\xd0\x41\xf5\x44\x45\xa9\x8e\xa1\x28\xf3\x13\xef\xa3\xd5\xe7\xf0\xa0\x11\x0a\xb6\xe8\x37\x86\x47\xed\x75\x6d\x29\x8e\xbe\x1c\xc4\xa5\x77\x60\x64\x66\xa2\xdb\x47\xf4\xf8\xc5\xc5\xf7\x58\x92\x97\x62\x29\x64\xfd\x5e\xed\x9c\x01\x0f\x6a\x27\x6d\x1d\x25\xec\x55\x82\x2b\x05\x2d\xf0\x24\x6f\xc3\xa0\x51\x69\x4d\xab\xc2\xb8\xea\x57\xbe\xd3\x26\x56\xb8\x37\x79\xf6\x07\x8e\x1f\x58\x8c\x3e\xaa\xa8\x08\xe8\xa3\xcc\x13\x81\xed\xec\x8a\xe6\x50\x66\x53\xc5\x8b\x61\xaa\xc5\x32\xd0\x59\x8e\x92\xd3\x8a\xb9\x2e\x39\xbe\x5f\x2d\x0a\x31\x87\x15\xe3\x5a\xdd\x7f\x02\xef\x53\xb8\x65\xb3\x88\x90\x75\x0c\x08\x78\xe4\x99\x9c\x10\x9e\x38\x99\xa1\xb8\xdd\x10\xb7\xad\x50\x37\xd5\xb4\xa5\x1a\xc4\xad\x28\x83\x01\x8c\xe6\x53\xbb\x70\xa6\xa8\xc1\x4f\x88\x27\x58\xfc\xe5\x14\x39\xa8\xbe\xfd\xf9\x6d\xb7\x92\xe9\xd3\xd4\xa2\x24\xf8\xd7\x3d\x63\x91\xc0\xf8\xac\x5a\xa2\x4d\x7a\x06\x88\xf5\x2e\x9f\x03\x3e\xda\xe7\xe3\xbe\xff\xdc\x73\x76\xa4\x2a\x12\x97\xfb\xd5\x4a\x73\xff\x0a\x81\xdd\x0b\xa8\x08\xbf\xc6\x87\xb0\xf7\x4e\xe9\xc9\xde\xf7\x7b\xcd\x61\x8f\x3c\x53\xe2\xa3\x72\x48\x40\x23\x73\x09\xdf\x8c\xfd\x51\x42\x71\x0b\xf4\xc1\x3a\xeb\x2e\x0f\xb0\xd2\xef\xe0\x18\x48\x1b\x4e\xd9\xe8\x7b\xae\x66\x13\x14\xba\xd5\xbf\xce\x96\x31\x3f\xa0\xc8\xed\x2f\x5f\x82\x8d\x8e\x9c\x44\x5d\xe9\x75\x4a\xd8\x2b\x0e\xfd\xa1\xac\xe6\x0d\x35\x28\xdd\xe2\x6b\xef\x58\x10\x9e\xfb\x52\x7f\xad\x10\x3d\xb0\x7d\x19\x7c\x19\xff\x2b\x17\xcd\x52\xfd\x46\x37\x6b\x78\xbd\x8e\xd5\x36\x92\xff\x68\xd1\x57\x8e\xf3\x06\xc8\x2c\x16\xe2\x7e\xe5\xbe\xe3\x7b\x17\x30\x83\x60\x24\x07\x29\xdd\xa4\xfd\x69\x6f\x4c\x53\xb0\xe2\xf5\x5e\xe5\xb3\x9b\x0a\x2d\xaf\x03\xd4\x29\x09\x75\x98\x1b\x54\x8b\x5f\x18\xf8\x96\x8a\x8a\x39\xe3\xbc\x55\x09\x1c\x04\xf5\x46\x61\x71\x82\xc8\x6f\xd4\x82\xaf\xd5\x99\x4d\x32\xb8\x4c\x85\x86\xc8\x74\x32\x0d\x01\xf1\x00\xb4\x2b\xcb\x60\x6e\x95\x47\x6b\xf2\xb6\x5e\x91\xaa\xd8\xd0\xb9\xc0\xfc\x38\x84\xca\xbf\xce\x76\xc2\x78\x1c\xdb\x9d\x4f\x0e\xf1\x01\xd0\x2a\xf0\xce\x57\x82\x02\x11\x11\x46\x80\x92\x6a\xc9\xca\x6d\xf8\xb9\x42\x99\xe7\x68\xe6\x1e\x86\xaa\x7a\x28\xe4\x99\x87\xef\xc0\x14\x68\xb4\x5e\xf1\x58\xc1\xe0\xa0\x39\xc0\x73\x14\x56\x9e\xc7\x86\xe9\xeb\x37\xac\x3f\x0d\x87\xed\x2c\x19\x24\xc6\x9b\x59\x45\xfa\x09\x7e\x53\x09\x23\xd8\x03\x0e\xb4\x3b\xbe\xa6\xce\x39\xaa\x70\x03\x93\x4d\x99\xd5\x8e\xf4\xdb\x9c\x44\xd9\x42\xc8\x91\xdb\xdf\x1d\xcc\x00\x97\x92\x5c\x22\x4e\x04\x3f\x3e\xff\xfb\xc9\xca\xcd\xed\xf1\xa6\x06\xdf\xe0\xb7\x1f\x92\x36\xd3\x51\x0e\x04\x43\x8f\xce\x90\x41\xe4\x15\xe8\xfc\x15\x11\xf6\x3e\xfa\x91\x4d\x90\xc0\x71\x9a\x1b\x6b\x76\x65\x78\xae\x5f\x48\x07\x9e\xca\xfd\xf5\x2e\x99\xa8\x3e\xd7\x0e\x65\xf8\xf8\xa2\x3f\xc1\xdf\xbd\xb2\xb7\x81\x9b\xc8\x05\xcc\x1c\x96\x43\x91\x82\x76\x39\x27\x93\x73\xe6\x29\x46\xda\xed\x82\xe1\x22\xa4\xce\x05\x5f\xff\x0b\x1a\xfe\xb5\x9f\xf8\x8b\x23\x91\xff\x4f\x8a\xb0\x5f\x64\x34\x79\x5f\x61\x05\x17\x66\xe9\x07\x24\xc7\x89\x9d\x29\x64\xc5\x0a\x67\xad\xdf\xc7\xcb\x9a\x01\x48\xca\x02\x58\x58\xf0\x7a\x00\x27\xb5\x3c\x04\x87\xbc\x6a\xf9\x69\x90\xd5\x05\xfe\x7b\x17\x2d\x73\x22\x45\x41\x0d\x79\xf2\x8f\x90\xf2\x6f\xee\xe8\x57\xcb\x41\x77\xd5\xc6\x21\xe0\x7c\xca\xce\xa2\x48\xe9\x55\xf0\xe3\x22\x37\x9d\x9c\x98\xc1\x82\x97\x5e\xde\x24\x71\x8f\xba\x9d\x28\xce\xe1\x78\x14\xfc\x60\x48\xda\x4d\x6f\x65\xd5\x26\xa1\xef\x38\x98\xcf\x04\x8a\x22\xc2\x0c\x04\x76\x92\xcf\x44\xaf\x1c\x60\x27\x26\x78\xd5\x4c\xc9\xff\x53\xed\x5f\xd6\xf2\x17\x7f\x07\x01\x21\x01\xe6\xac\x2b\x5e\x6d\x8d\xac\xcb\xbb\x75\xc6\xfb\xc2\xea\x88\x30\x76\x90\x8d\x70\x3f\x7e\x81\x86\x2d\x40\xe8\x13\xa1\x72\xc5\xcd\x1d\x03\x77\x77\x99\x9e\xed\xb1\x7a\x7f\x6f\xb2\xc4\xbf\x9b\x2c\xd2\xfb\x42\x65\x35\x30\x92\x71\x83\xf4\x6e\x4e\x9d\x6f\x85\x11\x39\x06\xc0\xf4\xf6\xe2\xc5\xc4\xdc\xc7\xad\x29\x84\x28\x2c\x75\x9a\x45\x5a\x55\x08\x37\x1a\x39\xab\xbf\xfb\x3c\xc9\x1a\x57\xc4\x30\xce\xdd\x3d\xdc\x60\x23\xc9\x23\x4e\xea\x9c\xd3\x5a\xce\x96\xe4\xac\xb6\x39\x82\xe1\x51\x0e\xea\x8e\xf4\x67\x2d\xd2\x47\x0c\x91\xfb\x99\x80\x4d\xde\xb5\x9b\xf2\xff\x8b\x87\xfe\xf5\x97\x0e\x7f\xf1\xe5\xae\xb5\x45\xf0\xb5\x87\x31\x95\xf3\x98\xd7\x21\xeb\x22\x7a\x24\x09\xc2\xd7\x81\x19\x38\xb1\xfe\x53\x03\x25\x12\x0f\xb6\xfc\x7e\x3b\xbb\x66\x9d\xc4\xda\x80\xeb\x16\xd1\xa8\x6b\xca\x34\xaf\x49\x6d\xa0\x82\x66\x74\x55\xf8\x03\xbd\xa5\xa8\xd7\x92\xc9\xb0\x97\x4c\xfd\x1b\xd6\x32\x9e\xdd\xf9\x3d\x50\x42\xe4\x60\x13\xf2\xf5\x9f\x2a\xfa\xd5\x2e\xce\x5e\x2f\x49\x20\xe7\xdc\x21\x2c\xfe\x78\x18\x63\x5f\x40\x55\x00\x89\x58\xc4\x3f\xf0\x82\xdc\xd4\x30\x77\x2d\xf1\x08\x69\xb6\x79\x1f\xa9\x86\x34\x3e\xf4\x99\x14\xc3\x33\xe7\x5a\x2b\x87\x2a\x3d\x45\xae\xec\x37\x79\xce\x57\xc0\x08\xe8\x70\x34\x1f\x0d\xc8\x86\x25\x58\xa8\xb6\xf6\x65\xaf\x95\xf2\xab\xdd\x4c\x94\xa9\xbe\xfe\x61\xcc\x98\x3a\x3b\x2d\x8a\xbb\x14\x03\x24\x65\x75\x6c\x1f\xaa\xc8\x41\x23\x78\x36\xf6\xc8\x85\x42\x82\x82\x5d\x47\xf9\xbe\x2e\x97\x0d\x31\xae\x04\xb5\x13\x46\x17\xf7\x0a\xc8\xa9\x08\x55\xbe\x7e\x0b\xc9\xfb\xca\x94\x85\xc7\xe8\x2d\x77\x54\xe8\x23\xe2\x07\xc8\x59\xb9\x4d\xc6\x87\x9f\x6f\x55\x4c\xa0\xc8\xbd\x94\x5f\x90\xa1\x58\x67\xfa\xbb\x1a\xe9\x01\xda\x5e\x24\xf5\xa6\x94\xf6\x91\xa8\xb7\x59\xd2\x46\xdf\x21\x6a\xbb\xa9\x16\x20\xea\xf5\x30\xb7\x01\x49\xd3\xb3\xf5\x6f\xbe\x6a\x98\xb3\x64\xc2\x43\x4e\x04\xc3\x86\x4f\x45\xfc\x44\x80\x31\x9d\xf5\xc5\xb0\x97\x27\x4b\x77\x49\xb9\x84\x07\x3f\xdd\x9b\x93\x4f\x27\x7a\x97\x33\xbc\x22\x96\xa7\x4f\x1a\x82\x0b\x5a\x4d\x97\xe9\xdd\x4f\x42\x46\xa2\x6c\x84\x9e\xb2\x69\x56\x8e\x39\x2f\xae\x63\xb3\xa6\x4e\xd3\xbb\x08\x2b\xb3\x93\x43\xd1\xdc\x7d\xb0\xf1\x89\x5f\x03\xf3\x95\xe3\x62\x2d\x6c\xaa\x57\x52\x23\x25\xf9\x2b\x5b\x20\xfd\x12\x7f\x65\xf6\xf7\x2f\x89\xca\x66\x66\xd0\xdb\x8d\xc6\x0a\x61\x45\xd6\xd1\xb5\x5b\x2b\xae\xfb\x20\xfd\x4e\x71\xb3\xb0\x71\x4a\x30\x51\xc6\x15\x76\xa4\xc0\x5d\xb5\x40\x25\xb9\x07\xf5\x6e\xd8\x30\x99\x63\x3f\x9b\x25\xb5\x55\x17\x52\x28\x27\x38\x3a\x54\x34\x12\x38\x99\x4c\xa5\x5c\x7c\x6c\xd0\xe8\x91\xf5\x4f\x72\xc6\x5e\xab\x6b\xe2\x75\xa7\x6f\x0b\xa8\x39\x79\x34\xf7\xe9\x14\x2a\x64\xd1\xfc\x34\x0d\x96\x2c\xf2\x2d\xba\x16\xd6\xcf\x83\x83\x33\xd0\x27\xde\x77\xf8\xac\xfa\xb9\xae\x84\x4d\x8d\x1e\x57\x52\x43\x4b\xfb\xe6\xbc\xba\x1c\x07\xa0\x7b\x88\xdb\xe2\x9e\x27\xd0\x29\x4a\xcd\x6d\x46\x79\x21\x33\xfd\x9f\xeb\xb2\x3f\xed\xe0\xd6\xdd\x0c\xd2\x44\x56\xe6\x3f\xca\xe5\x81\x93\xda\x41\x53\xfd\xe5\xdb\xdd\xe4\x0e\xeb\xfc\x62\xb4\x94\xf3\x86\x61\x4a\x6b\xeb\x7b\xb2\xb3\x03\xcf\x3e\x06\xa1\xe6\x0e\x5a\xe0\x45\xda\xa2\x80\xf9\x38\x98\xfc\x56\x45\xfa\xc2\x64\xbf\x0d\x0f\x06\x15\x1e\x02\xa3\x53\xc9\x7c\xe7\xd7\x27\xa4\xf9\xcd\xe5\xee\x01\xc0\xad\xd5\x46\xdd\xbe\xf9\x67\x5a\xc1\x0b\x84\xe9\x8e\x00\xc5\xa3\x50\x92\x99\x09\xfc\xd0\x1c\xf1\x84\x98\xf6\xb9\x15\x2c\x92\x5b\xb7\x70\xc0\x52\x53\x49\xbf\x0a\x43\xe0\xc2\x28\x65\x22\xa2\x0c\xc9\xe8\x62\xa5\x0c\x60\x7b\x12\xda\x66\x60\xf4\x8a\x8c\xa2\x23\x83\x42\xb1\x81\x2b\x32\xeb\x7d\xd2\x63\x66\x89\x38\x8c\x1f\x99\x3b\xed\xf5\x94\x98\x43\x43\xf7\x43\x51\x7e\x78\xb6\x88\xfb\x9b\x99\x3d\x79\x7d\x5a\x06\x5f\xb9\x24\xcb\x60\x26\xd9\x0a\x44\x99\xe2\x74\x4d\x7e\x67\x13\x48\x5f\x7d\xdc\x3a\xc7\xac\xf6\xaa\x18\x52\xf4\xcb\x23\x6b\x9b\xb2\x8a\x00\x30\x3e\xf5\x8c\x79\x57\xf6\xf9\xc8\xbc\xe6\x4f\x9f\x39\x6b\x01\xba\xac\x50\x5b\xc7\x01\x6b\xb2\x2b\x6a\x99\xd0\x95\x06\x09\xf2\x0a\xe0\xd2\x2e\x37\xcc\x81\xd8\xb9\xf4\x53\xf2\xe5\xb2\x8b\x0d\x35\x0d\xbd\xef\x22\xac\xc2\x5f\xd7\x14\xd9\xe4\x61\x92\x0f\x85\xda\xb9\xd4\x08\xe0\xed\x3e\x0f\xcb\xc5\xe9\x4f\x45\x12\x4a\x8f\x11\x43\x28\xab\x0f\x18\xc6\x37\x05\x93\x71\x26\xb4\x3f\xd0\xca\x7e\xf1\x0a\xad\x0a\x03\x96\x3a\xe5\x83\xb9\xe5\xa0\x5d\x57\x7c\xb2\xb1\xe0\x44\x66\x66\xb9\x78\xd7\xc0\xa8\xe7\xbc\x70\xdb\x55\x91\x10\x78\xc6\x47\xf4\x3f\x3e\xb0\x2f\xe0\xcd\xec\x66\x1c\xd2\xda\xeb\x87\x4e\x2f\x13\xe7\x73\x71\x77\x0b\x7e\x09\xe9\xfd\x53\xf6\x9e\xe0\xcf\x9e\xc9\x34\x87\xe0\x13\x0a\x51\x21\xda\x8d\x13\xe4\xbd\x89\xc5\x95\x69\x04\x8e\xcd\xd3\xa7\x6e\x77\x69\xc4\x63\xb7\xe4\x75\xda\x05\x5f\x15\xfa\x4f\x5f\x81\x4f\xc7\x9e\xf5\x98\x43\x68\x34\x3d\x4b\xe6\x44\x84\xf9\x6d\xc9\x1b\xfd\xb6\xe7\xdf\x8e\x80\x8b\x63\x0f\xb5\x9d\xff\xe1\x61\xfc\x87\xa9\x07\xd0\x0a\x1e\xc5\x80\x89\xf6\xf3\x36\x73\x58\xca\x05\x33\xb6\x7a\x7d\x5d\x10\x86\x96\x81\x9e\xc4\x7b\x7f\x68\xef\xd3\xc0\x77\x7a\x1a\xea\x2f\x5a\x71\x9a\xac\x92\x09\xf4\x3b\x94\xb1\xdd\xab\x8a\x55\xfb\x0d\x27\xc7\x15\xe8\x06\x8d\x6e\x79\xa5\x04\x47\xe6\xae\xcf\x75\xb7\xcf\x03\xa4\xef\x47\x12\xda\x52\x9c\x63\x69\x0f\xd0\x67\xa2\x7b\xdc\x3f\x1c\x7d\xde\xaa\x73\x2f\xb1\xd2\x62\x23\x5f\x26\xa1\xf4\xca\x94\x31\x04\xba\x1e\xaf\x51\x7e\x30\x66\x7d\x24\x6d\x99\xc5\x17\x38\xd2\x9c\x0e\x08\x36\xc4\x6f\xf9\x3e\x2b\xd5\x10\x07\x7d\x51\x7f\xb7\xd9\x47\x0f\x90\x66\x49\xdb\xf6\xec\x19\x97\x1d\x4c\x1e\x6d\xab\x17\x72\x79\x70\x9b\x48\x85\x64\x1a\x1f\x3a\x18\xa0\x9c\xc6\xda\xe4\xd5\x94\xa8\xbc\x90\x8e\x98\xc1\xcf\xe9\x5b\x5c\x50\xdc\x68\xa8\xc2\xe5\x4b\xdd\x9a\x7f\x32\x64\xd6\xf5\xbd\xb8\x81\x47\x1a\xc2\xe9\xab\x79\x97\xda\x02\x7c\x28\x48\x49\x70\x35\x15\x7d\x58\xc4\x70\xdb\x45\x55\x51\x38\xfc\x0f\x07\x0e\x1f\x61\xc9\xbc\x7f\x68\xe6\x11\x7c\x62\xe0\x48\xba\x94\x7c\x21\xed\xf9\x10\x53\x9a\x58\x78\xad\xfd\x36\x6d\x30\x99\xa2\x78\xdd\x6a\xe5\xe9\xbe\x72\x4b\x47\xfc\x9d\x6f\x27\x05\x0e\x0a\x5f\xfc\x2b\xe0\xeb\x77\x97\xc1\xb3\x42\xce\x76\x9e\x65\xd9\x37\xd5\x4b\xe2\x61\x19\x39\x35\xbe\x8b\x73\x75\x16\x1d\xd2\x28\x5b\x6a\x97\xa3\x70\x01\x26\x8a\x05\x6b\x35\xbf\xf1\x7d\xc9\x98\x1b\x59\xd4\x20\x0d\xf4\xb0\xaf\xd6\x96\x1f\xb7\xd4\x3a\x41\x28\xec\x2c\x79\xa5\x59\xb6\x9f\x30\x20\x29\x1a\x57\xf1\xee\xba\xb8\xbd\x7b\xb0\x68\xfb\x68\x97\xd9\xdf\x0f\xf0\x49\xd2\xb8\xe6\xc9\xba\x96\xfc\xe8\xfb\xa3\x15\x31\xb6\x40\x88\xcf\xc6\x0c\x79\x6d\x2f\x04\xb9\x17\x84\x63\x86\xbc\x8a\x6f\xf5\x19\xe3\xac\x6c\xe5\x3b\xfe\x99\xbf\xce\x6b\xfe\x2a\xb8\x70\x01\xa0\x27\x27\xea\x32\x16\x6b\x4b\x6c\xfd\x9c\x5a\x34\x0e\x25\x8b\x7a\xaa\x5a\x20\x5c\x20\x9d\xde\xcc\xdf\x9d\x18\xcb\x80\x47\x9c\x21\x82\xf9\xbf\xca\xf5\x3f\x3d\xaf\x58\x37\xfa\x3b\x20\x0a\xf8\x9c\x6d\x4e\x4a\x92\xf1\xd1\x90\x5b\x0b\x57\x25\x57\xdf\xb5\xb1\x5f\x25\x8d\xe6\x8b\x19\xbc\xf4\x8a\x21\xe4\x61\x3c\x43\xa5\x01\xe8\x00\x73\xe0\x12\xdb\x30\xa1\x73\x82\xb5\xad\xf4\x84\x52\x76\x3e\x2a\x61\xaf\x4d\xde\xf4\x9e\x09\xca\x0f\xb9\xd9\x46\x2f\x22\xad\x03\xd0\x34\xba\x63\x94\x72\xe8\x82\x4f\xad\x99\xa1\x1b\x5b\x1b\xaf\x69\xf8\xb2\xbd\x9e\xc2\x88\xe0\x17\xa8\x9e\xc6\x6a\x92\xba\xf9\xc0\x84\x4f\x22\xb1\x82\x28\xfe\x03\x3e\x7a\xcd\xf4\x4a\xb7\xcb\x90\x40\x37\xb1\x31\x13\x47\x5f\xbf\x47\xad\xb3\xb5\x28\x8f\x87\xc3\x4c\xcd\xcd\xec\xff\x17\x05\xfc\xe3\x07\x5c\xfe\xe2\x37\xbb\x4f\x4f\xff\xf3\x22\xc2\xb6\xf7\x18\xf2\x0e\xce\xdb\x0d\x76\x23\xcd\x5f\x48\x35\x4b\xec\x48\xb9\xd3\x27\x8d\xfe\x5b\x46\x65\x9e\x6c\xc3\xc6\x75\xb7\x16\x2f\x4b\x16\x9b\x50\xcd\x26\x3f\x74\xd8\x6a\x90\x33\x44\xa0\xef\x1b\xaa\x94\xb1\xea\xde\x51\x78\xa6\xcd\xb9\xb5\x66\x51\x6e\x56\xc5\x39\xf0\xab\x0c\x15\x29\x8e\x16\xe4\xbd\x50\x75\xa8\xa6\x21\x42\x28\x15\xaf\xb6\x48\xba\xcd\x09\xde\x57\x10\x99\xf2\xed\x29\x1b\xdb\xee\x4f\x96\xe0\xc7\xe5\xf2\xda\xa5\xe3\xbd\xa1\x57\x88\x47\x57\xf0\x72\x9c\x89\xe1\xb4\xba\x65\x74\x53\xc9\x08\x13\x9c\xa8\x74\xb7\x55\xc1\x37\xe0\x04\x73\xda\x0e\x45\x9d\x02\x93\xd1\xd4\x5b\xa2\x58\x7f\x40\x14\xc4\x65\x2b\x99\xd1\xb1\xca\x54\x1c\xa4\x3a\x91\xb3\x9e\xf0\xbe\x10\x7c\xc1\x16\x67\xa4\x76\xa2\xf7\xd5\x16\xbe\x8b\xa1\x84\x09\x1c\x92\xd3\x4e\x43\x69\x14\x1a\x17\x52\x6c\x25\x7c\x32\x9d\xc4\xf6\x27\x7e\xdd\x17\x52\xbd\xb6\xff\x1f\x63\x5f\x15\x17\x64\xb0\xbc\x4d\x23\x29\xdd\x48\x2a\x48\x77\x49\x77\x37\x22\x12\x92\xd2\x20\x20\x1d\xd2\xdd\xdd\xdd\xdd\xdd\x8d\x28\xdd\xdd\x2d\xdd\xf9\xdd\xfc\x7f\x87\x3d\x57\xe7\xbb\x9f\xdf\xec\xbb\xbb\xf3\xee\xce\xce\xcc\xf3\x8c\xa4\xf6\xfc\x36\x36\x82\x3c\x87\xa4\xad\x0d\xf9\x10\x65\xa9\xf0\x87\x80\xe3\xaf\xd2\x31\x76\x1e\xea\x99\xc5\xa3\x85\x4b\xa0\x17\xe2\x79\xd3\x3b\xf4\xdb\x54\xbe\x18\x1e\x2d\x8a\xc0\xc5\x91\x2f\xe3\xd4\x6b\x68\x61\x0b\x0a\x8a\xea\xba\x63\x56\xcb\x1c\x29\x15\x7c\x16\x2a\xf6\x8f\x87\x5c\x50\x25\x3a\x54\x17\x54\x41\x8a\x35\x46\xc8\x48\x8a\x37\x78\xdb\xc4\xf7\xd8\xf0\xf1\x52\x70\xe0\xc7\x00\x5e\x48\xbc\x4a\xa3\x76\x00\x0a\x12\x0b\x8c\x4d\x4c\xea\x50\xf7\xb7\x15\x6f\x2a\xdb\x9c\xc6\x41\x2d\xfa\x72\xa4\xdd\x88\x56\x4b\x8f\x53\x60\xfc\xd0\x70\x5c\xc3\x30\x5e\xbe\xf6\xe2\xa4\xd2\x1a\xf5\x51\x5d\x07\x23\xd3\xf4\xb8\x5f\xb6\x05\x55\xaa\xf8\xb7\xcb\x95\x27\x50\x3f\xc1\x84\xc1\xb5\xb5\x9e\xd6\x6c\x25\xd7\x5f\x37\xfb\x14\x71\xec\xda\xd9\x36\x1d\x07\xb9\x3d\xe2\xfe\x8b\x2a\x7d\x49\xd3\x96\xe8\x09\x20\xb6\xbf\x84\x5a\x15\x4c\xa5\x23\x50\x31\x2c\xf3\x91\x6d\x98\x23\x77\x43\xea\x8c\xc6\x41\xa3\xc1\x56\x1c\x21\x3a\xdf\x40\xf5\x47\x1e\x08\xf2\x27\x94\xcc\xaf\x2f\xf2\x49\x42\xc4\x0e\xd7\x81\x82\x28\xba\xe5\x67\x45\x4b\x36\xfc\x4e\x19\xbb\x13\x25\x1c\x2c\xbf\xd1\x33\xb4\x05\x22\xb0\x14\xca\x37\xa3\x1f\x67\x56\x30\xff\x15\x4d\x99\x09\x9d\xd2\x15\x59\x3b\x7e\xdf\xb9\xd5\x3e\x30\xa4\xd8\xb1\x67\x57\xc2\x95\x01\x6a\xaa\x7b\xb5\xf5\xac\xfd\xc8\xdf\x56\xeb\xc1\x24\xee\x9e\xcf\xd5\xdb\xf1\x60\xd7\x13\xf0\x5e\x38\x67\x65\x14\x18\x21\xb0\xf7\x8f\x01\x0f\xc8\x16\x21\xa9\x9c\xe6\xda\xea\xaa\xd4\x26\xb6\x79\xdc\x81\x0a\x58\xd5\xc0\x03\x62\x33\x4f\x63\xe3\x79\xc8\x46\x48\xcb\x8f\x05\xc0\xf4\xa9\xbd\x0d\xba\x1a\xa0\xdd\x99\x65\x33\x8c\x9a\x6d\x1f\xba\xd8\x45\xc9\x06\xb6\x96\x5c\xf0\x6b\xad\xae\xb8\xb7\x52\x65\x2b\x57\x00\xb4\x10\xcd\xa5\x9d\x55\x86\x9a\x0b\x3d\xc2\x6e\xd3\xe9\x70\x74\x10\x4e\xf1\xf7\x15\xa9\xfe\xd0\x89\x41\xe6\xbc\x71\xdb\x7c\xfe\x1b\x40\xa9\xa0\xfe\x6f\x95\x8b\xa4\x42\xf5\x18\x22\xe1\x33\x96\x2e\x9e\x96\x95\xfc\xbf\x1e\xef\xc9\x0e\xc6\x28\x94\x67\x68\xe4\x52\x73\xd6\x5e\x95\x5e\x7c\x7b\x38\xba\xef\xc1\x3e\x6c\x15\x54\x5d\xd5\xae\x76\x4c\x14\x53\xee\x5e\x94\x80\xa6\x7a\x42\x9e\x7c\xfb\x65\x64\x6d\xf3\x2b\xa0\x54\xb6\x05\x49\x38\x0d\x03\x75\x70\xf2\xea\x12\xd9\x90\x54\xa5\x28\xe5\xa3\x1b\xb5\x2f\xaf\xcb\x53\x46\xd1\x3a\xd7\xef\x0a\x38\x20\xce\x66\xda\x39\x30\x17\xda\x83\x25\x56\xef\x2d\x4e\xad\x6b\xdf\x98\x52\x3f\x96\x62\x4c\x9e\x8c\x39\x97\x6a\x55\x56\xbb\xcf\x13\x05\xb2\xb2\x7f\x66\x58\xfd\x6b\xf4\xbe\xb8\xe3\x67\xbf\x0c\x8f\xa7\xec\xb0\x0d\xd3\x40\x38\xea\x87\x4e\x04\x29\x51\x27\xc6\x3f\xb5\xd4\xe7\x20\xdf\xcd\x70\x65\xef\xcf\x7d\xfc\xb1\xa3\xbb\xe6\x2f\x92\x10\xf7\xfa\x2d\x4e\x11\x2d\x43\xb4\x0e\x0a\x88\x36\x4f\xde\xf0\xde\x14\x2d\xf2\x20\x52\x93\x2a\x37\x38\x9b\xa4\x2b\x95\x13\x41\xd3\x76\xdb\x25\xc6\xdd\x94\x68\x8a\x09\xfa\xbb\x60\x9e\xa3\xba\xfd\x35\xca\xdb\x17\xa0\xa4\x3c\x02\x13\x83\xd1\x83\xb5\x6d\xc3\x8e\xae\x68\xd6\x1d\x4b\xa0\xd8\xa1\xa4\x93\xd8\x8d\xc3\xe4\x5b\x74\x97\xba\xc4\x9e\x85\x31\x3f\x60\x28\xf0\x8f\x41\xc3\x3f\x9b\x0b\x8c\xf7\xdb\x64\xaf\x33\xe0\x0e\xe1\x7c\x3e\x9d\x50\x15\xb8\xd8\xee\x3a\xb5\xc4\x4a\xc8\x1d\x65\x01\x8c\x6b\x3c\x27\x32\xc8\x36\x99\x26\x9e\xce\x97\x0c\x39\xbb\xb5\x1d\xa9\xef\xc5\xd7\x3a\x19\xd2\x5a\x84\x9e\x71\xf6\xaa\x2f\x7a\x04\x01\x3a\x96\x8c\x04\xdf\x01\xb8\xe3\xee\x9c\x4f\x3e\x87\x07\x2e\x92\x58\x35\xb6\x81\xc2\x8a\xb9\x33\xae\xa2\x21\xa4\x4a\x7d\xf4\xad\x74\x86\xe0\x11\x3c\x30\xe6\x9e\xae\xf7\x46\x00\xc2\x76\x36\xdc\x0b\x5a\xb3\xec\x9d\xa7\xdc\xbf\x92\x3f\x85\x16\x43\xfc\xce\x8a\xec\x35\xf5\x20\xba\x3e\x56\x6a\x21\xad\x9a\xa6\x04\xf1\x43\x0a\x86\xf1\xdc\xc9\xbf\x35\xac\xa2\xb2\x47\x9f\x26\x0f\xf4\x5f\x12\x05\xae\x3c\x50\x15\x7f\x41\xcf\xde\xc5\x2a\x5e\xe8\x2e\x90\x97\xce\x9c\x75\x90\x5c\x87\xa0\x90\xc0\xf0\x8c\xdf\x81\x6f\xec\x28\x45\xa9\x08\x2f\x62\x4b\x62\xc3\xea\x75\xfe\xd0\xed\x1f\x36\x52\xd9\x33\x56\xf3\x9b\x90\xd3\x5b\xc7\xc8\xdf\xd8\x09\x59\xc5\xb7\x3d\x84\xab\xbc\x23\x33\x40\xb0\xa1\x17\x05\x7a\x7f\xe9\x52\x5c\xc9\x45\xc0\x2e\xd3\xa7\x11\xf5\x5b\x1d\xeb\xfd\x4a\x9f\x46\x96\x7c\xf7\x6e\x87\x32\x99\xbf\x06\xf7\xc7\xf4\x90\x30\x21\x90\xab\xa7\x6e\xbd\x44\xb1\x29\x2b\x3a\xd3\x1b\xd8\xa3\xa2\x0a\xdf\x76\xc9\x59\xc2\xf5\xa6\x24\x32\x86\xa1\x90\x38\x39\x83\xba\x00\x2f\x6c\x09\x97\x52\xa1\x32\xb2\x5c\x8f\x72\x6f\xe2\xf4\x5c\x9e\x2c\x2a\x97\xf8\x5f\x2c\x3e\xce\x26\xf6\x9b\x8f\xfa\x0b\x55\xdf\x18\xd3\x80\x9d\x52\xb1\x37\x1c\xaa\xad\x9d\x79\x3f\x45\x2f\x29\xa6\x99\x85\xef\x73\x5a\xb4\xca\xa1\x46\xa2\x28\xe8\x75\x09\x09\x41\x56\x42\x06\x20\x5f\xac\x9f\x6b\x98\xa0\x29\xf6\x3a\x6f\xbe\xa5\x39\x31\x4c\xcc\x24\x60\x04\xaf\x93\xec\xab\xb5\x65\xb5\x3b\xba\x37\x68\x91\xc5\x02\xa0\xca\x9f\x0b\x4b\x32\xcb\x4b\xbb\xcd\x36\xd5\xa8\xa5\xf7\x7e\xde\x3d\x67\x6a\x89\x7a\x91\x21\x4b\x76\x6b\x4b\x5c\x21\x32\x08\x49\xc8\xc0\x97\x2e\xb6\xc3\xb0\x32\xd0\x84\xb4\x79\xa0\xbf\x70\x2e\xe1\x8e\x15\x9c\x5d\x5d\x4c\x53\xcc\x9c\xfd\x88\x3c\xfd\xb0\x2b\xb0\x6a\x36\x0e\x18\x6a\x00\x3d\x37\xc6\x3b\xab\x2e\xb3\xb8\xe0\x29\x3a\xac\x90\xe3\x35\x64\xa5\x30\xa1\x2b\x7d\x13\x5d\x33\x85\xf3\x93\x0c\x86\x1e\xa0\x8a\xef\xa0\xce\xdb\x7a\x2a\x96\x05\x17\x11\xed\x36\xd9\x5e\xa0\x55\x4c\xf6\x87\xca\x2e\xef\x21\x7a\x0e\x2e\x5c\x87\xd0\x1d\x84\x37\xed\x7f\x1c\x86\xff\x79\x47\x8a\x90\xc2\x81\x14\x4a\x79\x0b\x1c\x08\x6a\x69\x17\x61\x0a\x02\x3a\xb6\x5c\x69\x73\x27\x91\xe7\x0d\x45\x88\x34\x44\x87\x85\x63\xc4\x5f\xe6\xef\x0b\x0c\xc0\x92\xdf\xdb\xe8\xf6\x30\x13\x11\x55\xb6\xc3\xc7\xc4\x5c\x7f\x51\xe8\x3f\xad\x91\xd2\x30\x73\xf2\x6e\x45\xe2\xc8\x81\xb4\xb5\x21\xf5\x60\x6a\xdf\x88\xbd\x10\x9d\x61\x08\xd5\x94\xa6\x0d\xfa\x10\xba\x5b\x4a\x55\xe3\xdb\x43\xd1\xc7\x45\x4c\xdc\x22\xdf\x28\x42\xa7\x6b\x50\xeb\xb6\xbb\xdf\xa4\x2a\xaa\x98\x1a\x3e\xdb\x00\x0f\x1c\x8e\xb1\x4a\x07\x84\xc2\x1e\xfb\x2d\x8b\x3f\x49\xd0\xa0\xdd\xc4\x83\xcb\xf5\x7f\x22\x22\xff\xcb\x54\xbd\x45\x05\x3d\x61\xc0\xfa\x7f\xd5\x76\x16\x0a\x87\x40\xf6\x0b\xc4\x41\xab\x6f\xdf\x9f\x3e\x90\x9a\x6a\x3e\xa8\x4f\xb4\xd2\xaf\x05\x8b\xd7\x13\x3a\xac\x87\x40\x83\x89\x58\xeb\xd5\x3d\x78\xa4\xc3\xa9\x83\xeb\x45\x8f\xe3\x55\xfd\x00\x14\xfc\xc0\x66\x44\xaf\x52\xf2\xf4\x95\xc5\x63\x7b\xbf\x0f\x20\x62\x7b\xdc\xdc\x01\x25\x66\x8a\xc7\x7e\xd9\x23\xd2\x99\xdd\x9f\x49\xbd\x21\xba\x13\x7e\xa0\x66\x80\x97\x78\x99\xa0\xda\x81\xdc\x3a\x18\x9c\x1a\x05\x71\x2a\x1b\x03\xfc\xfd\x58\xf3\x9d\x9f\x5b\x7f\x65\x0b\x73\xdf\x48\x81\x9e\x08\x9a\x54\x08\xe5\x62\x8a\x31\x84\x54\xc1\xf5\xd4\xff\xf9\x42\xff\xab\xc3\xa8\xb7\xa8\xdd\xbf\x17\x73\x30\x22\x82\x1d\x46\xdf\xa0\x6f\xdc\x3e\xe1\xdb\x8f\x1d\x44\x88\xa7\x79\xcd\xaa\xaf\x30\xd3\xa6\xe7\xde\x23\xb4\xd2\x25\xe0\xa8\xdd\xab\x0d\x18\xd9\x5b\x01\x42\x7d\xf8\x07\x05\x3c\x54\xb9\x58\x9e\x8b\x0e\xa6\xa5\xe0\x44\xfc\x85\xd3\xdb\x5f\xa8\x19\x67\x5d\x74\x8d\x17\xbd\x1d\xaf\x46\xa6\xc9\xb6\xa4\xf4\x9e\x12\x87\x9d\x73\x66\x72\xf6\x61\xc0\xb9\x93\x59\x55\xe9\x47\x70\x8a\x71\xee\x01\x03\xc3\xae\x86\x33\x33\x0d\x58\xba\x55\x4d\x9f\xb7\xba\x5c\xe9\x67\xf5\x26\xe9\xf4\x46\x2d\xce\xd9\xf2\xdd\x1c\x6e\xb7\x56\xac\xd1\x13\xa6\xb2\xfe\x19\x21\x15\x90\x9f\x79\x51\x3b\xf2\xaf\xa2\x0d\x38\x08\xee\xc3\xd5\x18\x47\xb7\x1d\xcb\x45\x5c\x54\x4e\xc5\x15\xea\x14\x5d\x3a\x9a\x8b\x3e\xe3\x82\x02\x51\x88\x9c\x8c\xbd\x59\xb5\xf6\x27\xe8\x1a\x02\x67\x1c\x97\x01\x22\x69\x47\x67\xb4\xd2\xc9\x07\xc4\x29\xe1\x65\x17\x54\x03\xa4\x3b\xaf\x4a\x19\x3b\x0d\x59\xc6\x89\x1b\x64\x33\x0f\x13\xae\x4f\xaa\x6b\xa0\xe5\x30\x77\xd5\xfc\xd7\x6b\x58\xa9\x36\x71\x7e\xae\xa8\x21\x3e\x02\x9b\xa0\x7c\x25\x1d\xea\x64\xcc\x4a\xb2\xd5\xdd\x78\x45\xdf\xdd\x8f\xa2\x14\xac\x03\x63\xfb\xd5\x44\xf7\xf1\x2f\x69\x7a\x53\x4e\x21\x08\x58\xdc\x4f\x60\x24\x3a\x9a\x24\x3a\x8b\xa1\xa9\x9d\x5f\x5f\x40\xa5\x1b\xc3\xe4\xf5\xeb\x7c\x4e\x26\x2c\x4d\xcf\xda\x69\x0a\xc2\x06\xe2\xee\xff\x24\x1f\x85\xd5\x33\x07\x9c\x23\x87\x7a\xd4\x4e\xdb\xb6\x04\x3a\x5c\x83\x9f\x16\x7c\x2f\x7e\xe8\x7f\x91\x95\x90\xca\xf1\xef\x04\x4e\x23\x82\x7f\x82\xb9\xd2\xec\x41\xdd\xa7\x4b\x6f\x28\xd0\xed\x36\x79\x14\xcf\x68\xc8\xf2\xa6\xd1\x82\x16\x2f\x3a\x94\x0b\x08\xea\x00\x68\xa7\x6c\x3e\xa7\x25\x45\x09\xea\x37\xbe\xd0\xe5\x9d\x5c\x8d\xbd\xae\xd5\x8c\x4f\x38\xc4\xb4\xa3\xd0\xf9\x58\x01\x2a\xe3\x92\x2a\xac\xaf\x92\x96\xeb\x32\x2b\x11\x5a\x24\x07\x17\xdf\x02\x8d\x73\x4f\xf8\x9c\x4f\x3e\xa5\xcd\x9f\x0a\xeb\x59\x4f\xd0\x23\x53\x85\xce\x18\x19\x83\xc3\xc3\xb4\xeb\x55\x9d\xce\x0b\xb8\x5d\x31\x72\x6d\x51\x85\xc3\xed\xd4\x31\xff\xdd\x9a\x41\x1c\x19\x20\x58\x7a\xbb\xc5\x90\xf7\xe1\x55\x29\xcd\x14\x79\x2b\xd5\x24\x4d\x84\x47\x10\xc7\x64\xc3\xed\x56\xca\x11\xd9\xa2\x3f\xaa\x67\xf4\xcb\x3c\x92\x2a\x63\xa5\xd2\x0a\x20\xb9\x63\x4d\x6f\xd4\x8e\x5f\x62\x56\xef\xe2\xbc\x1e\xc4\xb4\x98\x6b\xd0\x8e\xcc\x42\x09\x71\x29\x13\x67\xc4\x65\xe5\x51\x9c\x70\x0e\x2c\xe9\xa2\x5d\x60\xf5\xdb\x35\xae\x4c\xe4\x84\xbb\xb6\x22\x46\x68\x6a\x8a\x2a\xea\x35\xdb\x19\x9a\x5f\x45\x07\x84\x26\x6a\x0e\x48\xde\xaf\x4a\x1f\xaa\xfd\x0e\x3b\x76\xdb\x4a\x0d\x3f\xbe\x7d\xb6\x9e\x27\xee\xb9\xb1\x34\x7a\xce\xc4\x33\x52\x86\x49\xf2\xfd\x51\xac\x27\x07\x07\x28\xf5\x24\xc2\x80\x2d\x1f\xb0\x43\x20\xbd\x80\xfb\xe3\xc8\xea\x6d\xeb\xb1\xfe\x70\x1a\x9a\x96\x1d\x6d\x8c\x73\x24\xde\x1f\xcc\x41\x0f\xf8\x37\x3b\x1a\x7a\x85\x6b\x91\x47\xbd\x39\x4e\xb9\x61\xdb\x06\xc6\xc3\xb9\x8c\xf5\x9f\xdd\x26\x94\x4b\xc6\xe6\xb4\xa0\x29\x44\xa7\x00\xa5\xcc\x6c\x82\x65\x74\x0c\x5e\xfd\x15\x2d\x65\x5a\x73\x1e\x01\x11\x47\x7a\x95\xfc\xba\x58\x9e\xb5\x3e\x59\x0c\x7f\xac\xa1\xd5\x1d\x5e\x95\x0e\x35\x7c\x35\x1a\xf6\x6f\x6c\xfb\xe4\x16\x69\x83\x72\xcb\x20\x79\x56\x3e\x0e\x9f\x23\x8b\x98\x5f\x39\x29\x3b\xca\x16\x97\x3c\x01\xde\xaf\x7e\xd0\x93\xd2\x84\x3a\x7b\x72\x50\x0c\xbf\xf2\x48\x8a\x45\x6f\x89\x6c\x50\xf4\xc9\x20\x25\x72\x75\xfb\x2c\xfa\x4e\x03\x84\x2c\x01\x70\x1d\x47\xd7\x45\xcb\x5e\x96\x34\x11\xea\x35\x7f\x94\x38\x9a\xf5\xd5\x3d\x4f\xe9\x3b\xa9\x68\x82\x13\xdb\x87\x04\xe9\x54\x7e\x10\x07\x18\x61\x4a\x27\x6f\xfa\xd7\x5f\x27\x07\x43\x26\xd9\x68\x2d\x73\x99\xe1\xe1\x0e\x5b\x90\xee\x50\xc4\x56\xda\x22\x03\xbe\xc7\xa3\x13\xb0\x53\xd6\x3f\x24\xda\xf6\x58\xff\xfc\x15\x63\xb3\x7b\xb5\x73\xad\xe9\x8c\x4d\x4e\x6c\x16\x10\xf7\xf5\x65\x4a\xd2\x58\x97\xf9\xc1\x5e\x70\xf4\x5f\x66\x14\xef\xa0\x75\x7f\xd7\x7e\x76\xcb\xc5\x4a\xff\xad\xe9\x1c\x76\x3d\xd9\x23\x4b\x74\xb3\x06\x31\xab\x84\xc5\x84\x04\xf4\x07\x19\xfa\x81\xf3\xf4\xce\xb1\x7d\xfe\x8f\x73\x44\x2c\x4a\xf0\xa8\xde\xee\x6f\x16\x7e\x36\x0a\x04\x4f\xb3\x21\x21\xa1\x2c\x0b\xaa\xdf\xa0\x77\x7f\xdb\xff\x79\xff\x5c\x65\xd7\xea\xba\x80\xc0\xe4\x2c\xc9\xa7\x73\xdb\xe1\xf7\x9b\x14\xba\xd1\x58\x55\x11\x45\xe2\xbe\x1e\x59\x20\x1c\xb6\x2d\x68\x84\x65\x75\x5e\xb1\x76\xcd\x3a\xd0\x4d\xa1\x14\x88\xcf\xec\x9a\x85\xe8\x4a\x11\xda\xeb\x00\x09\x8f\x0e\xd9\x52\x07\x98\xb4\xe6\xdb\x74\x77\xe1\x08\xb3\x39\x92\x59\x3c\x83\x12\x83\xd8\x40\xfb\x1f\x01\x19\x03\x9f\x68\xad\x3d\xe7\x7e\xfb\x42\xc4\x33\x02\x8d\x00\x4d\x17\x7f\x3d\xe4\x2d\x7d\x7d\xf8\xfd\x8c\x33\x21\xf7\xd7\x57\xf9\xbc\x9f\x9f\x55\x7b\x76\x8f\xef\x7c\x5d\x40\x23\x2a\x24\x2a\x1d\x28\x5b\x3b\xc4\x72\xdf\x57\xd7\x7f\x8f\x9a\x9a\x73\xd2\xc1\x23\x83\x24\x29\xe7\xde\x25\x3e\x94\xd6\x37\x73\x1f\x7a\x12\xca\x17\x4b\x0b\x36\x97\xfc\xfb\xb3\x64\xbe\x74\x58\x30\xaf\xbb\x7e\xb9\xf9\x6f\x65\xd5\x5e\x0f\x86\x2c\x03\x6c\xc1\x85\xac\xb1\x85\x9d\x5c\x00\x1f\xe0\xde\x2d\xc5\x6e\x17\x5c\x43\xd9\xa0\x38\x29\xe2\x72\x25\x7a\x47\xda\x05\xaf\x99\x51\x5e\xe1\x2a\x4b\x70\x15\x58\x2c\x8f\xbe\x45\xa8\xf8\x2f\x43\x49\xa8\x5b\xc0\x3a\x3e\x64\xfa\x38\x71\x40\xac\xc9\xf8\xe9\xf8\x3c\x43\x7b\x5d\x61\xb3\x11\x3e\x29\x4b\xc4\x73\x51\x3d\x4d\x02\xc8\x0e\xd5\x17\x40\xe0\xa5\x8e\x2c\xc5\x6a\x39\x22\x6e\x77\x15\x29\x1f\xe8\x1c\x9b\xe3\x53\x9a\x14\x2a\xb4\x6a\x70\x91\x56\x73\xf2\x02\x9f\x1a\x3d\xa6\x76\x5b\xd2\x69\x08\x47\x1a\x2b\xb4\xe8\xcd\xb1\x6f\x6c\x41\x77\x26\x68\xd8\xbf\x73\x1d\x96\xb9\xee\x5f\x1b\xb8\x03\x30\xba\xde\x69\xc8\xee\xa9\x6f\xd9\x77\xbe\x0d\xd0\x38\x47\x89\x4e\xec\xfd\x9c\x23\xd4\x64\xd4\x96\x00\x1b\x98\x70\x95\xf4\x83\xfb\xa4\x04\x50\x2a\x4e\x80\xfb\xa1\x4c\x78\xf7\xbe\x4c\x1f\xfd\xda\x34\xc1\xca\x86\xf2\x5b\x82\xeb\x55\xb8\x98\x4c\xf2\xa5\xd3\xfe\x20\xb4\x0a\xb0\xa7\xa3\x3f\xb9\xbf\x63\x48\xfe\x9a\x33\x6f\x30\x57\x1a\x55\xed\x99\x29\xce\xe2\xdd\x85\x0f\xc1\xe5\xe4\xfc\xa4\xec\x37\xd5\x84\x04\x26\xd2\xde\x26\xc3\xb1\x68\xb6\x17\x72\x50\x46\xf4\x1c\x8d\x3d\xc2\xb5\xaa\xda\xb0\x9d\xd7\x39\x89\x31\xf5\xff\xdb\x34\x73\xad\x55\x02\x41\x6a\xa9\xdf\x34\x77\x3c\xd1\x43\xf2\x0e\xe2\xcb\x2a\xe3\x6a\xd0\xf8\x63\x71\x23\xcb\x5a\x6f\x8a\x93\x74\x18\xcc\x4d\xa8\x50\xb2\x0e\xff\xe3\x30\xfc\xaf\x7f\xcf\x5b\x14\x06\x02\xca\x1b\x70\x18\x56\x89\x04\x22\xcc\x9b\x3f\x4f\x64\x66\x42\x70\x53\xb0\xf1\x43\x46\xf1\x73\x4d\xc2\x11\x44\x6c\xa3\x66\x9e\xb5\x5a\xeb\xa5\x30\x03\x1f\x01\xcb\x6e\xb4\x38\x59\x6b\xf9\x49\xb2\x1b\x3f\x79\xe9\xd4\x82\x10\xe9\xc4\x68\x3f\xc2\xc0\x2a\x6b\xef\xaa\x59\x77\xa7\x6a\x18\xf4\x02\x56\x57\x7b\xbb\x30\x95\x74\x7c\x39\x60\xab\xf5\x3f\x22\xae\x7f\xf6\x1a\x73\x4c\x76\x20\x25\x23\xa0\x63\xab\x9f\xac\xbb\xcb\x87\x03\x44\x73\xce\x2a\x8f\xad\x03\x63\xc6\xb4\x65\xf2\x1a\xaa\x7d\xff\x4d\xfb\x62\x35\x5d\x7e\xd6\x7e\xcf\x17\xcd\xb5\x96\x0e\x6b\xa4\xf2\xe7\x75\x6a\xff\xc3\x5a\xbc\x45\x05\x21\xd0\xa1\x80\xa9\xb1\x2e\x2c\xb9\x5d\x1b\x52\xe3\xca\x4b\x3d\xfd\xd5\x0d\x62\xba\x1f\xa3\xe2\xd3\x63\x47\x1b\x49\x19\x9f\xcb\xa8\x39\x11\xac\x04\xc3\xbd\x55\x9e\x9c\xd3\x5c\x24\x08\x09\xf5\x66\x7b\xa7\xa7\xfc\xe8\x23\x81\x02\x90\x42\x4b\x51\x23\xae\xa1\x44\x9d\x61\xab\x61\xfb\xc3\x60\xed\x07\x77\x9a\xa1\x7e\xef\xa0\x71\x3a\xb2\x1e\x9c\xea\x43\xe3\xaf\xc5\xf0\x24\xab\x8b\xee\x65\xa3\xae\xbb\x92\x10\x15\x7e\xd2\x76\x40\x14\xd1\xa4\x83\x57\xaf\xf6\xd6\x9a\x48\xf8\xbe\x8c\x69\x49\x8f\xb8\xf0\x09\x27\x36\x3f\x45\x44\xba\x52\x32\xea\x98\x3d\x01\x33\xea\x3f\xd9\xa1\xff\xd5\x42\xdd\x5b\xd4\xb8\xed\xf1\x17\xe8\x0b\x6d\xcd\xa5\x93\x87\xcb\x85\xd7\xf8\xe8\xaa\x77\x5f\x3b\x16\x0e\x0f\x1d\xe1\xd1\xd8\x50\xaf\xa2\xff\xe6\xc1\x92\xd0\xfa\x1e\xf3\x19\xec\x9f\x8c\xd1\x66\x4c\xf8\xac\xa0\x9a\x92\x45\x31\xd5\x24\xb1\xbf\x74\xa8\xfd\xcf\x0c\x25\x3b\x20\x21\x58\x2a\x76\x6a\x1a\xa2\x9e\xec\xd5\x76\x05\xb2\x2f\x7f\x36\xb9\x43\xb5\xf7\x95\x6e\xb0\xf7\xe1\x9a\xc7\x37\x58\x48\xc9\xd5\x95\x63\x68\x5e\xf7\x29\x2d\x1f\x88\xfc\x4c\x7a\x95\x94\xa6\x5b\x0a\xb6\xcd\xcf\x34\xe3\x68\x58\x50\x23\x37\xe4\x73\x79\x7b\x43\xcd\xf0\x6e\xe8\xe2\x81\x22\xb9\x6b\x2a\x76\x24\x0b\x4c\x24\x28\xaf\xef\x93\x20\x3a\x7f\x4e\x7a\xfa\xa0\xd5\x49\x7d\x6e\x08\x0d\x91\x9e\xff\x6b\xcf\x2a\xf5\xe6\x1f\x56\x0c\x8a\x7c\x1f\x0a\x88\xda\x24\xa3\x93\xbe\xd0\x66\x8c\x78\x36\x24\x5e\x3b\x31\xeb\x0a\xb0\x09\x6d\xef\x80\xaa\x3a\x7f\x41\xb4\x0a\xf2\x4b\xd9\xfd\x96\x70\x0a\xfc\x90\xe5\x22\x30\x99\x7a\x8a\x86\x2f\x7a\x67\xa6\xd8\xf0\x8b\x9f\x22\x48\x0c\xcd\xfa\xb7\xb2\xa0\xac\xf3\x48\x13\x09\xb4\x75\xa5\x81\xce\x17\x2f\xc8\x8f\x98\x62\xff\x94\x8d\x3b\x8b\xa4\x0b\xc5\x21\xd5\x3f\xe8\x11\x38\xdb\x23\xca\x26\xcf\x7c\x65\x1f\xc4\x73\xce\xe2\x03\xcb\x05\x60\xd6\x4f\x65\x74\x02\xda\xc9\x2a\xcc\x3e\x46\x0b\xb6\x38\xd1\xf2\x7d\x67\x1f\xcb\xdc\xe5\xce\x6c\x0f\x1e\x64\xc7\x5b\x63\x8d\x7e\x55\x1a\x94\x0c\xd7\x79\x13\x4c\x6e\x56\xe8\xe8\x9e\x50\x62\x74\x41\xf5\x3c\xd3\x19\x2a\x3e\x10\x6a\x94\xfb\xf1\xa4\x07\xf2\x8d\x2c\xd8\xec\x15\x42\x11\x4d\x19\x87\xf6\x79\x01\x27\xc1\xd1\xce\xed\xa8\x17\x07\xc5\x0a\x26\x8a\x47\x3b\x20\x7a\x62\x14\xd6\x63\x1d\xd2\x09\xc0\x37\xe1\x63\xa7\xd2\xe0\x53\x75\x5f\x6f\xad\x8c\x0e\xc2\x9d\xaf\xa6\x7f\xf8\xb7\x2d\x36\x11\x14\xfe\x23\x8a\x21\xff\x8d\x05\xe1\xf1\xc8\xab\x24\x75\x50\x36\xbb\x21\x41\xb5\xb0\xc1\x9d\xfc\xe2\xf8\x8b\x7b\x5e\x89\xf1\xda\xf7\x14\xda\xf7\xd1\x85\xf4\xd3\x48\xc6\xfa\x9d\x20\x43\x5d\xf8\xd3\x8a\x39\xae\x88\x1c\x49\x8f\x29\xb3\xa2\x47\x39\xaa\x95\x1d\x4d\x3c\xa4\x13\xca\xe3\x4a\x8e\x8c\xc8\xf7\xa7\x71\x7a\x2a\xe0\x4b\xf9\x6c\xb5\x93\x0d\x9d\x8e\xa4\x1e\xfb\xd6\x72\x28\x0d\x64\x29\xeb\xaf\x27\xc2\xe8\x34\x23\x70\x76\x2a\x1b\x22\x1a\x0d\x33\x80\x26\x7c\xa9\x0e\x9a\xa3\x0b\x45\x0f\x59\xd7\xfb\x14\x39\xa3\x7b\x11\x7e\x64\x36\x75\xe7\x36\x3f\x7f\xd3\xc1\x69\x11\x1f\x98\x2a\x0d\x01\x98\xb5\x5d\x8a\x6a\xb8\x9a\x1f\x69\x7b\x04\x66\xbe\x32\x6d\xb5\x6d\x79\x98\x51\xd3\x70\x3a\x90\x2c\x5d\xc3\x09\x59\x2d\xd6\x4d\xb3\xf7\x60\x72\xe0\x67\x2f\x91\x46\x16\xf1\x9b\x5d\x92\x2f\x7b\x87\xd5\x7d\x8d\xb5\x62\x7e\x2d\x02\x7c\xe7\xd6\x16\x6f\x4f\xc3\x33\xc2\x32\x80\xe4\xc0\xed\xd0\x3f\x5e\x34\xe3\xac\x3f\x06\x63\x0b\xaa\x3a\xa5\xff\xde\x75\x33\x3e\xda\x41\x55\x31\xba\x08\x2a\x95\xa9\xfd\x3d\xa6\x03\x81\x90\xcc\x3b\xdc\x1d\xf2\xd7\x11\x2c\x22\xfa\xa2\x34\x9f\xd1\xe1\xe5\x48\x26\x0e\x78\xb3\x1c\x53\xb7\xcc\xe5\x02\x56\x2b\xac\x5d\x39\xc1\x33\x4b\xfc\xda\x04\xd3\x03\xf9\xab\x1f\x97\x4a\x09\x74\x11\xf6\xca\x9f\x66\xd2\x2a\x7a\x49\xdc\x99\x8f\x65\xd2\xb9\x1d\xcd\xd5\xbe\x20\x83\x56\x67\xbd\xac\x77\xb7\x40\xff\x77\xbd\x97\x5a\x04\xf6\x2f\x8f\xb9\xcd\x85\x2f\x6b\xbf\x98\x4d\x56\x0a\x79\xcf\x08\xe7\x0f\x41\xbc\x83\xe9\x48\xe3\xc6\x0b\x77\x7b\x48\xcd\x02\x17\x96\x55\x70\x0c\x39\xc4\x84\xaf\xd8\x16\xc2\x91\x09\x6f\x37\xe4\xa0\x31\xdc\x31\xe8\x8a\x43\x13\x60\x24\xe9\x7d\x3a\x92\x19\x9a\xa7\x24\x3b\xe8\x27\xde\xfe\xde\x43\xc5\xe5\xfe\x7b\xd6\xcc\xeb\x6f\x7d\x14\xfc\x09\x92\xdc\xeb\x02\x88\x58\xe9\x32\x6d\xee\x7e\x7c\xf3\x8f\xb4\xd0\x6d\x64\xd8\x62\x46\xe9\x62\x9c\x9a\x78\x75\xf9\xf9\x02\x4a\x33\xc1\xe6\xd9\x03\xcc\xf9\x48\x95\xad\x9f\xbd\x54\x99\x12\x61\xcf\x87\x49\xf4\x14\xf9\x40\x89\x92\x88\x68\xa6\x5d\x4d\x18\xf4\xb7\xca\x8b\x9d\xd6\x48\xd1\x03\xe3\xbf\x87\x19\xea\xf8\xe4\xb1\x2a\xce\x83\xc0\xef\xd3\xde\xf8\xc0\xd9\x22\x3c\x25\x96\x38\x7c\xde\x12\x73\x36\xa2\x63\xc9\xb4\x07\x78\x0e\x1d\x9e\x16\x6f\x07\x3e\x6d\xb8\x64\xb9\x3f\x6c\x90\xa3\xed\xf6\xaa\x8a\xf7\x7c\x14\x99\xaf\x17\x93\xbb\xec\x27\x48\x60\x9e\x00\xf9\x60\x68\x74\xad\x44\xe5\x2a\x1a\x58\xd7\xc9\x70\x8d\x99\x6f\x97\x49\x42\xe6\xa4\x6f\x34\xb5\x7f\x7f\x51\x15\x83\x85\xe6\xbf\xdf\x07\x80\xb0\xaa\x5e\x01\xe9\x35\x9e\xfa\xb7\x53\xa2\x0f\xe6\x74\x5d\xfb\x54\x3c\x1d\x91\xc8\x52\xcf\xc5\x18\x68\x5f\x26\x34\x54\xee\x08\x80\xc6\x9a\x66\x0a\xd7\x47\x12\xe4\x7d\x0d\x88\x4c\xda\x3e\x55\x31\xb4\xdc\x08\x30\x85\x44\x1f\x21\x0b\xf7\x1d\x53\x82\x39\xff\xa9\xad\x80\x1e\x1e\x12\x8e\x7a\x56\xbc\x02\x6c\x37\x8d\x47\x43\xc2\x18\x74\x05\xef\x0f\xe2\xe6\xc9\xf1\x4f\xa4\x2d\xe7\xc7\x7f\xcf\x32\x85\x98\x01\xaa\xb7\xc3\xa3\x62\xd7\x1d\x56\xd5\x7d\x5a\x48\xc6\x89\x96\xf9\xc4\x81\xa3\x51\xea\x50\x09\x1b\xf3\xa1\x79\x03\x81\xb8\x7e\xd1\x38\x71\x30\x7e\xed\x24\x1c\x13\xea\x18\xfc\xed\xdf\x1f\xb1\xb4\x45\x5c\xa9\x37\xa7\xa1\xd2\x70\x4d\xe2\x90\x5c\xfe\x0e\xe4\x11\x2d\xdf\x22\x00\x92\x50\xa6\xb1\x76\x21\xe5\x02\x72\xed\xaf\x0a\x57\x8a\x4e\xb5\xab\x37\xde\x5f\xbb\x3b\x07\x16\x64\x08\xbc\xde\xbc\x99\xa0\x7f\x20\x01\xaf\x4c\x06\x6e\xda\x9e\x95\xc0\x7b\x38\x2c\x37\x6a\x29\x62\x9c\x86\xd2\x08\xb8\x4e\xa4\xa4\x5b\x41\xdb\x9c\x55\x9b\xdb\xcf\x56\xea\xe0\x9b\x11\x89\xc0\x0d\xe6\x66\x03\x52\x4d\xb0\x53\x3a\x7e\xbd\x27\xf6\x2d\x7b\x29\x8d\x44\x5f\x0c\x25\x34\x01\x8e\x84\x1e\x92\x81\x26\xc0\x9f\x37\x74\x8b\xfa\xb1\xa7\x4c\x2a\x17\x35\xec\x06\x17\x73\xdc\x2d\xb2\x52\x3e\x3d\x2d\x51\xe0\x9c\x3b\xc3\x66\xf3\x34\xb8\x96\x1a\x0c\x4a\x07\xcb\xce\xb7\x04\x2c\x78\x61\x3f\xf6\xed\xf2\x3c\x04\x0f\x6f\x97\x42\xdb\x9a\x4d\x6f\x1f\x7a\x6d\xba\xfe\xe4\xd0\x88\x20\x02\x5a\x46\xa4\x36\x19\x19\x88\x20\x48\xef\xe6\x86\x11\x74\x4f\x29\x0e\x54\xfe\x6e\x19\xea\xd4\xfa\x82\x46\xc9\xb0\x36\x3d\x0a\x45\xa0\xe8\x0b\x06\x7b\x8e\xf1\x7a\xaa\x32\x3a\xc4\x24\xb1\x72\xb9\xf5\x9c\xea\xea\xc9\xbe\x36\x6d\xee\x2b\xd0\x93\xa4\xa6\xc2\x3b\x0e\xd6\x68\x2b\x01\x59\x7c\xfd\xc7\xcc\x4e\x47\x77\x18\x0e\xf4\x16\x16\x3c\x7d\xe5\xa6\x47\x45\x47\xb5\x79\xa9\x1a\x13\xcb\xea\x91\x21\x82\xc6\x0e\xb4\xeb\x67\xf4\xff\xf3\x42\x0e\xcc\xd3\x37\xf6\xf2\x78\xbc\x71\xfe\x65\x2a\x12\xdb\xb5\xb9\xed\xbe\x4d\x21\x41\xd3\xe3\xa2\xaa\xda\xcd\x6c\xfb\x4e\xfa\xde\x5b\xf4\xe5\xa5\xed\x25\xf1\x1d\x50\x5a\x73\xa1\x08\x2b\x7f\xbe\xef\x13\x85\xfa\xfd\x93\x15\x33\xdd\x57\x2b\x4c\x2f\xab\x7d\x19\xe8\x98\xae\x9f\x2a\x99\x82\xf2\x88\x5a\x80\xb5\x32\xcc\x6e\x5f\x2d\x24\x84\x5f\x1f\xac\xdb\xc5\x20\xef\xbd\x69\x85\x6f\x75\x3d\xc8\xd3\xa8\x57\x23\x32\x99\xff\xfe\xe4\x90\x37\xf9\xfa\xbd\x5f\xba\x51\xb2\xbf\xa0\x32\xbd\xff\x8b\xdc\x55\xc4\x5e\xa9\xf6\x31\xfe\xdf\xd0\x3e\xb9\xee\xbb\x0d\x47\x47\xe4\xe3\x5b\xcb\x1f\xe8\xaf\x92\xde\x9e\x73\xff\x7a\xb1\x2a\x25\xa9\xd8\xb1\x4a\xf8\xb6\xbf\xbe\xd5\x32\x73\xe7\x9c\x93\x87\x78\x4c\x82\x8d\xfc\xa6\xc5\x67\x7b\x0f\x42\x3e\x3e\x98\x98\xd0\xd5\x8f\xbb\x4c\x65\x63\xf1\x3e\xbc\x61\x7a\xe1\xbd\x95\x80\x18\xad\xaf\x12\x43\x51\x38\xc7\x80\x69\x30\x06\x52\xc9\x09\xce\x6a\xc2\xec\xd4\x31\xe4\x18\x3f\x72\x2c\x82\x6e\xdd\x1f\xfb\xcd\x68\xb4\x6e\xbe\x1d\xc0\xd7\x6b\xdf\xbc\x68\x41\x84\x03\x61\x83\x3c\xd4\xf6\xf7\xcf\xf6\xf5\x9a\x2b\x48\x96\xa4\x71\x91\x81\x31\x4e\xe6\x5a\x7a\xc4\x63\x82\xcd\xe4\xc5\x08\xa7\xac\xad\xd0\xcf\xc0\x6e\xe1\x23\xbd\x25\xe3\xd2\x20\xdd\xc8\x84\x7f\x37\x06\xf9\x87\x9e\x61\xda\x50\x0d\x9e\xe6\xd7\xba\xbf\x60\xfd\x5e\x61\xc4\xb8\x74\xd1\xab\xd2\x39\xb8\x7b\x69\xea\xde\xf8\xbf\x7b\x81\x9f\x8c\x83\x24\x0d\x78\x0e\x08\xe5\x9a\x92\x8d\x0b\x15\xa6\x99\x26\x38\x59\x53\x8e\x41\x9e\xde\x43\x1e\x23\xa6\x59\x0e\x9d\xcf\x8d\x4d\xf5\x17\x17\x4a\x71\x02\x1c\x2b\x27\x18\x02\xea\xcc\xb0\xbb\xb0\x0f\xdb\x68\xc7\xa6\x81\xc0\xf8\xd6\xc7\xad\x2b\x61\x30\x09\x03\x42\xac\x19\x6c\x42\xe6\x83\x19\x7a\x94\xa4\xb6\xd5\x90\xcb\xf2\x69\x94\xcd\x72\xe4\x4a\x28\x00\x33\x5c\x8d\x9d\x4a\xb2\x6e\xed\x3f\xb1\xd4\x09\x38\xf7\x07\x52\x4b\x1c\x4d\x26\x7d\x3c\x47\x97\x9c\xe8\x7b\x79\x73\xb4\x29\xeb\x47\x3d\x60\x4d\xdf\x4d\x06\x79\xff\xe0\x11\x63\x0f\x9a\xb0\x89\xb1\x7c\x2a\x58\xfb\x83\x76\x51\x38\xdc\xca\xf4\x21\x63\x38\x31\x98\x09\xca\x0d\x78\xe2\x73\x18\x6c\x5f\x1f\xd2\x33\xa5\x8e\xfb\x2b\xbf\x91\x1d\x50\x6c\xb8\xcf\x7f\xa7\x2a\x9c\x2f\xfc\xef\xed\x5a\x08\xf2\x57\x69\x9f\x96\x57\x49\xff\xcc\xd6\x7f\x73\x76\xdc\x36\x8e\xe2\x6d\xcc\xad\x9e\xd8\x7f\xd0\xa2\xf2\xa2\xd7\xb5\x97\xd6\x1c\x91\x43\x66\xed\xe9\x08\xb4\x80\xe9\xd7\x05\x18\xe2\x31\x8b\x38\x12\xae\xbe\x7c\x66\x8b\xee\x71\xdd\xb7\x9b\x72\x69\x5a\xe8\x13\x7e\x74\xff\x48\xc7\x4f\x7e\x41\x20\x0b\x46\xdb\x59\x48\x0f\x6b\xdb\x56\xf5\x97\x49\x78\x69\x32\x65\xfd\x11\x96\xbc\x06\xc7\x6f\x0d\x6e\x0a\x59\xea\x4c\xd8\x42\xa5\xb9\xd9\x5e\xc7\x47\xdb\x57\x23\x8e\xab\x14\x39\x7a\x7f\x79\x8c\xfe\x25\x53\xfe\x17\x97\x3b\xf3\xee\xa0\xc8\x2c\x9a\x3b\x9a\xd0\x1b\x09\x42\x0b\x80\xc0\x90\xf5\xa2\x3f\x7e\xc3\x57\xfe\x9b\x38\xf2\x8b\xfa\x41\xbf\xec\xc4\x62\xa9\x79\x87\xc1\x3d\x14\x1e\x26\xcc\x5e\xe6\x1f\x6d\x2b\x10\xde\x1e\x95\xb7\x71\xe0\x70\x64\x42\x0c\x7d\xd8\xd1\x83\x9b\x23\xdc\x46\x2d\xeb\x30\x32\x38\x4a\x57\x21\xa5\xde\x2c\x33\xd8\x51\x1b\x03\x1e\x40\x71\x44\xb2\x0a\xf6\x61\xee\x93\x2f\x85\x25\x9d\x1d\xad\xfa\x4c\xe2\x67\x99\xae\x33\x06\xe8\x51\x42\xd6\x7c\x23\x27\xac\xd3\x40\x78\x2d\x7b\x53\x3f\xff\x41\x1a\x59\x81\xbf\xad\x5a\x95\x73\xfc\x0e\xca\x66\xd5\x2d\x11\x8a\x58\x96\x95\x9d\x36\xe8\x85\x3a\x2f\x16\x2c\xea\xdd\xf8\x58\xf6\xaf\x46\x9f\x0d\x2b\xf2\x84\x30\x4f\x28\x46\x39\x3c\x9f\x46\xff\x14\xf1\x71\x72\xb5\x62\x3b\xf8\xc6\xc8\xa3\x1b\x78\xe2\xb2\x20\xe1\x44\xda\x21\x1a\x7e\x62\x52\x51\x2f\x76\x99\x95\x83\xa7\x8b\x65\xe4\x66\x3c\x27\x33\x24\xa7\xe5\x9b\x36\x9a\x07\xf9\x4b\xbb\x8d\x85\xfc\x24\x72\x32\xbb\x17\x1c\xa1\x77\xcf\x3f\x74\x35\x86\xb8\x8f\x1e\x55\xce\x6b\x5c\xe2\xcb\xe4\x64\x50\x6a\x53\x00\xb9\xa6\x65\xc8\xb5\x40\xca\x65\xa9\x3e\x4a\xd4\x00\x34\x9b\xa7\xac\x12\x26\x62\x12\xb1\xa6\x42\x1c\x89\x0f\x90\x57\x8d\x38\x85\xb9\xe6\xc0\x4a\xd9\xf9\xfc\xcb\x55\x91\x86\xb9\x53\xd4\x97\xa0\x6c\x6c\xd8\xa1\x39\x93\x79\xd7\x6e\xf0\xad\x60\x19\x0f\xd1\xa2\x45\x4e\x3c\x10\x0a\xd8\x53\xf6\xde\x6b\x74\x5a\x9e\xec\x82\xde\x27\x83\x7b\x84\x06\x39\xad\xbf\xe6\x8b\x8c\xdd\xc4\x32\x69\x1d\xb5\x76\xc4\x7f\x8e\x3b\x3c\x81\x54\x67\xc6\xca\xac\x48\x6d\x52\x9a\x2e\x16\x14\x31\xfa\x41\xed\x6d\xe7\xc7\x89\xfd\xa1\xfd\xa0\xa1\x72\xf3\x4f\x2c\x3f\x43\xd5\x43\x5e\x25\x4b\x3e\x24\x38\xe6\x15\xfa\x51\x1d\x5b\xff\x24\x19\x80\x75\xd4\xa6\x1a\x2f\x1d\x72\x11\x7c\x67\xf4\x84\x9b\xd9\xd4\x19\xc8\x08\x06\xdb\xbf\xec\x29\xdc\xba\xce\x26\x48\x3d\x21\xa1\xb2\xea\x05\x72\x23\x34\xc2\x40\xe8\x2a\x5c\x52\xdc\x61\x44\x6a\x15\x1c\xa0\xbc\x07\x30\x7c\xa6\x9b\x0c\x2a\x96\x69\xfc\xf9\xf1\x6e\x14\x5b\x59\x33\x82\xcf\xd4\x73\xb5\xf0\x4e\x17\xd2\x55\x5b\xe9\x0a\xe4\x3b\x31\x8a\x84\x80\x52\x0b\x57\x4f\xea\xbe\x8a\x2a\x08\x34\x3d\xfb\x8d\xf2\xd2\x70\x7e\xdc\x7f\x7c\x7b\x8d\xcc\x46\x14\x21\xbe\x65\x70\x46\x41\x5a\xcb\xaf\x4a\x9f\xf4\x45\x65\xaa\xa9\xd7\xea\xc2\x1c\x21\x7f\x7f\x0c\xc7\xa3\x7b\x11\x9b\x48\x59\x0d\xf7\x30\x79\xe3\xfc\xfe\x81\x7a\xb6\x28\x1f\x58\x53\xbd\x9e\x0c\xd8\x68\x1b\xcc\x6f\x21\x65\xd0\xe3\x82\x01\x7d\x03\x8b\x67\xab\xc2\xdb\xd6\xbe\x0a\xfb\xd1\x7f\x06\xaa\xd4\x07\x5b\x01\x51\x82\xd3\x45\x98\x5b\x06\xa7\xc4\xee\xcd\x62\xa1\xba\x38\x98\xbd\xd1\x50\x91\x12\xb7\x56\x61\x85\x18\x17\x0f\x54\xd4\x2c\x34\xf7\xff\xee\x7a\xd9\xa7\x3a\x97\xdd\x51\x45\x53\xc8\x22\xb1\x49\xcc\x6f\xeb\xb0\x80\xac\x41\xe5\xda\x86\xc8\xda\x64\x6a\xfa\x81\x7d\x99\x0b\xa8\xb7\xfb\xeb\x41\xfa\xa3\xe5\xa9\x22\xf0\x34\x31\xb7\x7a\x7b\x70\x6e\xc5\x9f\x60\x4f\xed\x7d\x6f\xc1\xe2\x03\xe3\x5b\x8b\x4b\xf7\x7b\x10\x24\xee\x87\xd4\x00\x29\x22\xad\x81\x69\x1a\xfd\xc3\xee\x25\xe6\x6b\x76\x05\xa1\xc4\xda\x6e\x9c\x65\xc0\x87\x88\x45\x0d\xf8\xbb\x59\x60\xff\x91\x1e\x76\xdf\xbc\xb8\x54\x42\xd8\x87\xa8\x72\xa2\x8f\x1d\xb2\x28\x2a\xb8\x1c\x46\x64\x32\x0c\x6e\xdc\xb1\xdb\xbd\x5f\x1b\x06\xa8\xdb\x70\xf3\x57\x18\xa2\x0e\xb7\x34\x2b\x1c\x2a\x3a\xbe\x5d\xde\xcd\x63\x71\x2e\x8d\x1d\xe3\xeb\x0e\x86\xcd\xf1\x47\x0b\xe2\xf4\xc5\xbd\x4a\x9e\x59\xd9\x32\x87\xbc\x9d\x7b\x28\x96\xd4\xca\x6f\x5e\x2f\x19\xa3\x81\x39\xd0\x0a\x26\x4e\x22\xa8\x8a\xee\x70\xa8\xef\xcc\x00\x09\x3c\x5d\xad\xba\x36\x89\x73\xaa\xf0\x97\x25\xee\xa0\x37\x8f\x7e\x1b\x62\xb0\xfd\x6b\x83\xd5\x3a\xde\xb2\xfa\xb6\xf9\x99\xa9\xf2\x16\x60\xe3\xab\x18\x08\x69\x0a\x53\xfb\x3b\x71\xb3\x36\x21\xa3\xe2\x2a\x0a\x79\x7b\x15\xd8\xa3\x54\x26\x5f\x8b\xc8\xd9\xbf\xb4\xec\xf8\x19\x2c\xa2\x10\x75\xbb\x88\xa5\xff\x4e\xfc\x1b\x73\x40\x7b\x88\xfb\x70\x93\x23\xf0\xf0\xbb\x41\x9e\x6e\xea\x1a\xd3\x72\x87\x0b\x42\xad\x28\x06\x20\xea\x66\x79\xba\x2e\xa1\x35\xc2\xff\xb1\x40\xa8\xe0\xe4\x63\xef\x81\x8c\x92\xdc\x1f\x7c\xd4\xb0\x77\x16\xdc\x5c\x6c\x63\xee\xbe\xd0\xe0\x33\x55\x91\x51\x26\xee\x10\x5b\xf8\x1d\x9d\xb7\xc4\x91\x75\xc0\xfa\x79\xda\x2f\x26\x74\x3e\xaa\x59\x28\x7c\x78\x52\x92\x61\x8a\xda\xd7\x4f\xe5\x15\x73\x5e\x99\x8e\x89\xfd\x8c\x7e\xb5\x2e\xd3\x34\x82\xbf\x19\xee\xa6\x61\x9d\xc2\x99\x5b\xe4\xd1\xbd\x87\x2f\x92\x4a\x72\x09\x54\x91\x75\xa0\x73\x56\x38\x47\x96\x77\x1e\x56\x32\x11\xcf\x2d\xf7\xce\x71\xb8\x3d\xf3\x94\x25\x55\x21\x4f\xdb\xe9\xfd\xec\xa3\x18\x00\x2d\xa5\x12\x65\xa1\x60\x63\xb1\x1e\xff\xef\x15\xdc\x14\x51\x44\x1f\xe2\x07\x9b\xe9\x89\x12\x27\x42\x3c\xc9\xa7\xde\x83\x9a\xad\x31\x53\xa0\x01\xb6\x74\x37\x66\xdb\xd3\xfb\x99\xe0\x7b\x8a\x8d\x00\xe9\x8b\x80\x8e\xcc\x8a\x74\x3a\x55\xfc\x02\x04\xd3\x9c\x37\x17\xa1\x07\xc0\x3b\x29\x9c\x3d\x92\x60\xd3\xe4\x22\x31\x6a\x4b\x2a\x4d\x17\x9a\xd0\xc9\xa5\xbc\xae\xfe\x1d\x2b\x55\x72\xd7\xa1\x88\xb6\x50\x15\x31\x58\x45\x65\x45\x8c\x7c\xbb\xb0\x37\x2a\x59\xb5\x43\x2a\x82\x2a\x40\xfe\xc6\x52\xd1\x9e\x95\xa4\x41\x02\x21\xa9\x05\xfe\x83\x3c\x3f\x0d\xdb\xb5\x0f\xd4\xff\x9f\x45\x7b\x8b\x28\x92\x83\xec\xe0\x18\x31\xad\xd8\x62\x79\x12\xdd\xac\x3c\x78\x16\x9c\x62\xc4\xac\x7a\xc8\x12\x9b\x52\x5e\xe7\xf6\x3d\x0a\x7a\x91\xf5\x51\x2b\xce\xe0\xb9\xd6\xd9\x6d\x55\x56\x59\xf5\x28\xcc\xaa\x88\x37\x8e\xe6\x54\x2c\x4e\x7c\x61\xb0\xd1\xe5\xa9\x1c\xc7\xb3\x2f\xe1\x06\xb5\x26\x09\x82\xe8\xcc\xcd\xac\x32\xda\xa6\xab\xc5\x58\x5b\x11\x12\x5a\x23\x92\xde\x7d\x45\xf3\xfa\x59\x12\x97\x41\xf1\x2d\xef\x77\x5a\x27\x0c\x18\xe6\xf2\x5a\x33\xe9\x45\x9c\x8f\x4a\xfb\xf9\xec\x80\x24\x7c\xdf\xff\x7d\x69\xe8\x60\x71\xe4\x8b\x05\xa7\xe7\x3f\x85\xb1\x08\x3b\xa5\x02\x90\x43\xcc\x82\xc5\xdc\x92\x96\x97\xde\x4d\xf0\xaa\xf2\x6f\x19\x0a\x35\xfb\xb0\x29\x3e\xf2\x17\x31\x68\xe5\xb2\x94\xbb\xb1\xe0\xdb\xfe\xff\x64\xfc\xfe\xe7\x66\x89\x40\xbd\xa1\x06\x42\x41\x06\x9b\x0f\x84\x53\x75\xef\x61\x84\x12\x67\x22\xd0\xcb\xcc\x6f\x02\x17\x3c\xdf\x26\x2e\x0f\x7a\xae\xd9\xee\xf0\x77\x97\x39\x81\x8b\xe0\xe3\xfa\x4b\x17\xeb\x5f\x1d\xa4\xd8\xe6\xd2\x99\x31\x92\xaa\xdb\x02\x81\x4c\x31\x17\x99\xaf\xa3\xc9\x37\xe9\x31\x9b\xe0\x36\x08\x40\x34\xbf\xfa\x07\x13\xfc\x1d\x03\x0c\x29\x2c\x3a\x45\xb4\x43\xb4\x7d\x46\x1c\xe5\x02\x16\xe4\xc9\xf7\x77\x57\xb4\x4e\x84\x50\x32\x20\xe5\xe7\x09\x3a\x42\xee\xee\x66\x4d\xcd\x35\x8b\xaf\xa9\x15\xa9\xa9\x52\xcf\x56\xd4\x0d\xe7\x9f\x42\xfc\xc6\x56\xad\x09\x1a\x6e\xba\xb8\xeb\xd9\xff\x0b\x05\x9d\x54\xf6\xc9\x38\xae\x04\x88\xe5\x93\x1e\xfd\x18\xc0\xbc\x4d\x4a\x2c\xf8\x63\x82\x0c\x5d\xa5\x29\xed\x7b\x2b\x11\xff\xa3\xce\xc5\x5b\xd4\xfa\xe1\xee\xbf\x78\xcf\xef\xe5\x45\xdf\x36\x94\xdd\x94\xb7\xc8\x87\xdc\xb7\x8e\x5e\x2a\xcf\x5f\xcf\x23\xc3\x33\xe1\xed\xfb\xc0\x8a\x8b\x3b\xd7\x62\x63\x82\x46\xee\xc1\x8d\x45\xbf\xfc\x33\x02\x86\xd9\x62\xfc\x88\xa3\xc2\x09\x91\xa0\xa5\x8a\x2a\x11\x07\x4b\xb4\x8b\xae\x33\x8b\x21\xdd\x77\xe0\x55\xab\x61\x46\x51\xef\x76\x96\x5f\x73\xd1\xf9\xf8\x67\x84\xf7\xe8\x7a\xa3\xcb\x57\xf3\xfe\x10\xe1\x5f\x0f\x8b\x12\xad\x02\x43\x4b\x15\xc1\xbe\x68\x94\xf4\x29\x0c\xbd\x9c\x2c\xb7\xb9\xf2\xf3\xb4\x67\x0a\x0c\x21\xa3\xd3\x36\x76\xab\x18\x0d\x27\x99\xc6\x38\xae\x3c\xde\x40\x59\x5b\x52\x52\x05\x22\xfb\x61\x2f\xc4\x64\x3f\xee\x24\x84\x34\xee\x51\x7a\x35\x56\x74\xef\x4b\x26\xe4\xa5\x49\x3d\x9e\x2e\xbb\xfa\x2f\xd0\x13\x17\xab\x1b\x9e\xb0\xe4\x6a\xd9\xa4\x25\xec\xb8\x76\xca\xc3\x39\xa9\x41\x38\xa2\x65\x9e\x58\xb8\x9c\x5c\xc8\x0e\xab\xbb\x03\xea\x19\xea\x6c\xfa\xbe\xdf\x7e\x3a\xbe\x10\xdc\xd0\x4a\x87\x40\x74\x21\x81\xbb\xfc\xd8\x50\x5d\xef\xfe\x22\xc8\x14\xb9\xeb\xad\xd0\x99\xf9\x2a\x39\x05\x95\x2f\x83\xff\x36\xe8\x8e\x51\x9c\x32\x85\x7a\x72\x3d\xc6\x95\x21\x74\xf9\x9a\x9b\xe5\x5d\xde\x61\x24\xfe\x5c\xdd\xcf\x75\xb0\x12\xbe\xe5\x0c\x09\x53\x2a\x2a\x8b\x63\xa5\xd9\x56\xff\xf3\xcd\xb3\xc9\x91\xc6\x1d\x8f\x61\xc7\xcb\xef\x7d\xed\xe9\x91\x14\x38\x10\xb9\x40\x26\x13\x89\xe8\xf5\xb8\x58\x43\x28\xe0\x05\x41\xf5\x50\xc3\x9c\xb3\xf3\xed\xe6\xe5\x51\xc5\x0b\x7b\x5d\xd6\x38\xda\x63\x18\x3c\x0e\x69\x29\xca\x64\xa7\x8b\x9f\x30\xa1\xa5\x7b\x04\xd4\x5b\xe1\x2c\x21\x30\x69\xa2\x03\x78\x3e\x8a\xf2\xb4\x9c\x64\x4b\x9b\x24\x25\x83\x05\xa0\x45\x90\x4c\xed\x5d\xe3\x49\xe7\x3f\xf0\x2c\xb3\xb7\x2d\x74\x94\x66\x2b\xed\xb5\xb2\x8f\x68\x75\x91\x84\x2f\x45\x2e\x07\x00\xe6\xed\xae\x0b\xca\xeb\xc4\xc3\xf6\xb7\x73\x9a\x3d\xe6\x25\x27\x49\xfc\x1a\x93\x93\x2f\xd0\x98\x19\xde\xca\x2b\x2b\x46\xaa\xa4\x1d\xee\x20\xa3\x05\x9c\x65\x7e\x17\x92\xf7\x9d\xc3\x17\x1f\x47\xa7\xd0\x23\x9a\x19\x01\x9f\xc7\x9d\xb9\xe3\xcd\xfd\x8a\x63\x56\xdc\xbe\x22\x60\x51\x83\xf9\x90\x69\xd6\xa7\x67\xba\x90\x57\x33\xba\x53\x37\xf6\xfd\xa2\x52\x2f\x8b\x08\x09\x93\x7c\x3b\xee\x57\x0b\xb8\xb9\x10\xba\x81\x49\x95\x50\x7d\x8a\x0f\x6f\x52\x53\xa7\x50\x5c\x72\xd3\xe5\xcf\x1f\xd0\x1a\x99\x81\xf2\x40\x09\x16\x5c\xc2\xfd\x7b\x4f\x15\x89\x0e\xfe\x30\xd3\x36\xf2\x7f\x62\x55\x92\x2f\xa8\x2c\x92\x1d\xf2\x97\x86\x26\x23\x32\x3e\x7d\xcd\xc5\x3b\xe9\x3f\xac\x15\xf3\xd3\x4b\xdb\xe0\x05\xf6\x1f\x5a\x3e\x97\xc8\xe7\xb6\x2c\xf6\xa9\x48\xc5\xd5\x28\x6c\x2e\xd6\xd8\x5e\x34\xf6\x5b\x4d\x38\x29\x07\xa2\xd6\x48\x73\x0f\x3f\x80\xd4\x16\x09\x43\x0b\x5d\xbc\xd8\x7f\xa9\x72\xe3\x9a\x4d\x8a\x91\x99\x40\x93\x1f\xd5\x55\x23\xdf\x5c\x18\xae\xa0\xcc\x13\x5f\x5b\x01\x5a\x1b\x5b\x5d\xbb\xc9\x5a\x63\x73\x07\xa2\x21\x66\x0c\x34\x98\x7a\x62\x54\x38\xfb\xd7\xb0\xdf\x92\xa0\xcf\x4e\x0f\x8c\x2a\x7c\x74\x05\xe1\xa6\xdd\xd1\xaa\x70\x26\xb3\x5d\xe7\x56\xd1\x30\x53\x10\xf9\x30\xbb\x46\xab\xeb\x69\xf1\xb7\xfa\xec\x74\x78\x3b\xe9\xf3\xe1\x73\x25\xc0\x97\xd2\x6f\x4d\x99\xa2\x44\x08\x66\x9f\x55\x8e\x07\x59\x3d\xca\x08\xe4\xd6\x7b\x15\xa5\xc3\xb3\x39\xa4\x24\x7d\xf4\x39\x34\x9c\x04\x68\x1a\xbe\x22\x13\x1b\xa2\x0c\xe1\x1b\x8d\xd3\xc7\xcf\xfe\x48\xfb\x18\x30\xd1\x93\x5d\xfb\xa3\xed\xeb\x4f\xe7\x54\x3a\xa6\x84\x74\x01\xe8\x57\x49\x1b\xaf\x39\x0a\x7c\x67\x5f\xaa\x69\xc4\x79\xc8\x78\xf3\x07\x3b\x42\x75\x9a\x7f\x15\x88\x21\x6c\x43\x33\x5e\x8b\x88\x85\x5e\xa8\x20\x16\x4f\xec\x8c\x93\xd6\xf8\x82\x8c\x7e\x4b\x08\x9e\xfc\x24\xee\xc3\x16\x19\xbf\x57\xc6\x5b\x58\xe6\xe2\xde\x8e\x3d\x94\x5f\x5d\x72\x60\xae\xb9\xaa\x29\x1c\xda\x11\xfe\xf7\x4f\xed\x6c\xf9\xe1\x8a\xa8\x9f\x5e\x72\x9a\x8c\x2b\x09\x7f\xcf\xee\x75\xda\x7d\x2d\x3d\x1b\x37\x80\x00\x0f\xe9\xcf\xf2\x42\xef\x9d\xbc\x41\x57\xcc\xb1\x9c\xf4\x0c\x47\x0e\xd1\x89\x00\x0e\xdb\x03\xf1\x04\xc8\x2c\x24\xe5\x60\xa4\x77\x20\x39\xad\xd7\x3a\x53\xe7\xd9\x2a\x7a\xe0\x70\xc6\x74\xb0\xfd\x8c\xe0\x35\x2b\xdd\xa3\x41\xce\x76\xae\x6c\xba\x79\xfe\xb9\xc2\x35\x00\x9b\x1b\x86\xb9\xea\xcd\xbb\xe5\xe4\x25\x3f\x7b\x42\xa7\xf6\x76\x3f\x1d\x86\x10\xfb\xf3\x01\x5d\xb7\xba\xd2\xad\x69\xe1\x2f\xbc\x0a\x98\xc0\x0e\x3e\xdc\x18\x6c\xa5\x58\xbe\xf8\x94\xe5\x36\x12\xac\x51\x7f\xef\x9e\x67\xfd\x3b\xf8\x6c\xa9\xcb\x3c\xf1\xf6\xea\x6c\x95\xcc\x12\x2c\x92\x89\x30\x97\x8b\x50\xb7\xb2\x4b\x3e\xec\x99\x37\x9f\x8d\x3d\x5e\x37\x76\xe1\x70\x44\x8f\x4b\x24\x0f\x2b\xc7\xb3\x63\xbf\x5e\x05\x76\x4a\xda\x45\x54\x79\x27\x2b\x80\x7b\x47\xb6\xb3\x0e\x8a\x64\xc4\x39\x3e\x81\x4f\xf8\x1c\x55\x79\x56\x65\x79\x9a\x41\x67\x91\x34\x00\xd8\x29\x03\x41\x54\xf8\xcb\xd3\x0e\xf5\x40\x58\x0a\xd8\xb9\xee\x30\xce\x73\x26\xac\x29\x15\xcb\xe5\x97\x88\xc7\xcd\xfc\x51\x5a\x60\xa7\xcc\x6b\xba\x1d\xae\xb9\x9c\x75\xed\xd6\xda\xb1\xf5\x8a\x53\x70\x5b\x90\x3e\xf7\xd6\x57\x0a\x79\x8c\x55\x87\xa2\xbb\x30\x50\x80\x04\x3c\x76\xec\xcd\xc9\xad\x91\xf4\x6c\xb7\x3c\x19\x24\x6e\xfc\xf2\x74\x05\x07\x6b\x25\xf1\x11\xf2\x2c\xc5\xdd\x57\x02\xfe\x65\xa9\xe0\xa3\x79\x69\x95\x49\x5a\xdf\x27\xb2\x01\xb1\xd0\xca\xeb\xf3\xee\x7a\xeb\xac\x26\xcc\xe9\x5e\x8c\x7c\x41\x08\xad\x55\x46\x4a\x4e\x41\x1a\x78\xa6\x5b\x1a\x95\xb8\x98\x5e\x87\xfb\xe7\xec\x9f\x06\xa2\x95\x61\x7b\xdb\xf0\x9d\xcb\x9a\x2b\x8a\x14\x6c\xcc\x1d\x92\x67\x41\xa8\x03\x5b\x85\xc9\x42\x16\xf8\x10\xd3\x3b\x3a\x32\x49\x52\xa6\xc3\x15\x6d\xf0\x45\x86\xeb\x2d\xe7\x45\xf5\xd4\xdf\xc2\x3a\x03\x5e\xa1\x15\xe0\xd9\xf8\x0c\x19\x18\xdb\x7d\x76\xf2\xf9\x0f\x49\x24\xc1\x04\x9b\xae\x6a\xa5\xd2\x5a\xd2\x47\x93\x83\xbc\x30\x77\x03\x88\xae\x40\x76\xb0\x1d\x58\xc1\xb0\xe8\x57\x71\xb1\x25\x96\x34\x72\x88\xed\x2e\x8e\x68\x77\x13\x08\x3b\x19\x27\x5b\x8a\x34\xf5\x48\x0d\x08\x1f\x77\x13\x1a\x10\x28\x90\x59\xd5\xb0\x71\xe3\xf8\xb8\x77\x18\x9d\xfd\xc7\x90\xaa\x68\xca\x7c\x02\x33\x61\xc4\x3d\xbf\xb5\x29\x1a\x87\x62\x29\xa2\xf7\x75\xfc\x66\x38\x67\x3a\x47\x62\xd3\x36\x6d\x69\xab\x12\xb1\x2f\x99\x52\x48\xa2\x7b\x59\x3b\x37\xcb\xea\x98\x05\x8d\x8b\x39\x29\x6f\xc8\x01\x44\x8b\x49\xe0\xde\xb8\x91\x22\xc6\xda\x8b\xbd\x73\xe1\xc3\xbf\x00\x17\x4d\xab\x3a\x54\x9a\xbc\x2c\xd5\xb7\x02\x18\x7e\x3f\xaa\x20\xfe\x93\x3e\xfa\x5f\x57\x9f\xb7\xa8\x20\x9c\x20\x88\x9b\xe2\x23\x51\x89\x43\xc4\x3e\xaf\x7a\x89\xf1\x33\xc0\xfb\x82\x48\x3e\x27\x15\x5c\xbc\xfc\xad\x63\xe4\x74\x1a\xe9\x25\x59\xc9\x18\x44\x50\xc3\xc4\x93\x0c\xfd\x52\xab\xbc\xb8\xe0\x7e\xe3\x79\x8a\xe7\x3f\xbb\x7b\x16\x2c\xd9\xfe\xb9\xa9\xc5\x86\x93\xad\x8a\xec\x6e\x12\xec\x95\x62\x6e\xe9\xc7\x9c\xa8\xe8\xed\x54\xdc\x10\xca\xff\x3c\xe3\x59\x85\x36\x73\x55\x85\xc5\x96\x5f\xf3\xb0\x1e\x5d\x7a\x66\x89\x09\xa6\x8f\xc6\x7f\xce\x18\x32\x7e\x96\x16\x72\xbe\xe9\x08\xaa\x66\x45\x64\x28\x0a\xed\x9b\x99\x88\x7b\xd1\xdb\xab\x42\x18\x86\xde\x31\xd0\xf8\xcf\xd4\xfe\xa7\x05\x88\x66\x42\xfd\x17\x8e\x5c\x24\x9c\x6a\x96\x17\xa9\x23\x70\x34\x17\xeb\x7e\x76\x08\x57\x77\xd4\xe9\xe6\x64\xbe\xac\xe0\xba\xe1\x6d\x4a\x0a\x87\x07\x19\x08\xf5\x7d\xb7\x56\xf0\x64\x21\x24\xaf\xf6\xdd\x6a\x96\xe3\x56\x38\x34\x7d\x65\x74\xb3\xf9\x3b\x62\x1e\x3d\xeb\xc7\x6a\xe5\x8a\x4f\x4d\x84\xe0\xb3\xe8\x58\xd9\x5a\x0b\xef\xb4\x0b\xfa\x47\xb9\x47\x06\xd1\xc3\x9b\x16\xf7\xf5\x22\xc1\x9a\x30\x27\xfa\xbd\x9a\x83\x4f\x78\x5c\x7a\xa0\xfb\xc8\x84\x9b\x2c\x32\xc6\xe5\x1b\x4b\xc0\xfd\xfb\xe1\x62\xda\xf1\xcf\x7b\x4b\x93\xaa\x38\xba\x77\xd6\x9d\x39\xd5\x54\x3e\xa4\x3d\xd7\x33\xff\xe7\x0e\x59\x2b\x1e\xd2\x3d\x1d\xc0\xde\xd6\x15\xcd\x25\xe4\x48\xff\xc4\x49\xfb\x65\xf4\x53\x6b\xc1\xdf\x7b\x71\x41\xad\xed\x18\xab\x6b\xd7\x5b\x54\xe0\xe4\xe6\x5b\x22\x01\x90\xc4\xd1\x6a\x7e\x7b\x64\x16\xe9\xb0\xfc\xb8\x7a\x50\x77\x06\x8f\xa4\xdc\xf8\x4f\xfa\x34\x8b\x49\x5f\x20\x8f\xe1\x8a\x85\x68\x06\x60\x6d\xd2\x40\x97\x8c\x55\x73\x5f\x39\xfd\x1e\x48\x35\x9c\xa3\x61\xfb\x35\xf9\xc9\xca\xbf\x2d\x12\xd5\xed\x3d\xe5\x95\xc3\xd7\x2f\xee\x4f\x80\xe5\x52\xf7\xd7\x7f\xf9\x6e\xbf\xef\xe3\x5d\x23\x23\xa1\xd6\x2f\x11\x74\x86\xfe\x27\x84\xb2\x30\xdf\xe1\x42\x7a\xc0\xa0\xc5\x2d\xa3\xf1\x55\xa9\xe0\x25\xf4\x46\x7a\x3f\x2e\x8a\x17\x63\xb2\x47\xe7\x32\x45\x78\x47\x7b\x73\x2f\x75\x21\x9f\x01\x09\xb3\x63\xa9\xeb\xfb\x6c\xa0\x64\x70\xbc\xc7\xb5\x53\x7e\x51\xaf\x63\xb8\xac\x8b\x4b\xb6\x2e\x09\x12\xb3\x00\xa6\xb5\x44\x2c\x12\xe7\x3d\x06\xb3\x3b\x87\xb5\x20\xd8\x30\x65\xc7\xd6\x74\xdb\x23\x03\xa2\x1e\x4e\x39\x81\x45\x95\xe7\x65\xc7\x2a\xef\xb0\x19\x85\x85\x3f\x29\x02\x4e\x83\x61\xbe\x38\x11\xe0\xf7\x39\xb2\x38\x5a\xf8\x38\x1e\x8f\xe1\xac\x1a\x57\x84\x22\xb0\xfe\x85\x43\xf1\x4c\x5c\x3d\x2c\x50\x80\x17\xca\x8a\xfe\x0f\x23\xcf\x3c\x30\x27\x36\x98\xd5\x89\x75\x6b\xdd\x77\x29\xeb\x13\x7b\xbd\x53\x29\x8b\x8c\x34\x4e\xfc\x77\x52\xc2\xe1\xa6\xc4\x74\xf5\x2c\x64\x3b\x2f\xaf\x4a\xbf\x97\x63\x6e\x6d\xe3\x51\x86\xf1\xd9\x7d\xcd\x29\x9e\x7e\x29\x6f\x1d\x2d\x1d\x59\x36\x16\x5c\x2f\x6e\xb4\x8f\x61\x9d\xbf\x2e\x00\x8a\xc0\x49\x87\x79\x8e\xec\x3a\xf9\x9d\xb4\xcf\x56\x5c\x27\x2b\x29\xf7\xf7\x12\x2e\x53\xf6\x27\x4e\xcc\xc4\xf0\xe7\x27\x2a\x29\x91\xc1\x73\x4b\x8f\xe3\x17\x0d\x66\x10\x61\x47\x66\x51\x2b\x27\x66\xfb\xdb\xe3\xc4\x22\x1e\x5b\xf8\x0b\x14\x37\x3a\x7f\xf2\xa0\x01\x98\xf3\xd9\x57\x6b\xa1\x4b\x45\x41\x3e\x9a\x11\xf7\x46\xb7\x0e\x59\x39\xf2\xc9\xa4\x96\xc7\xab\x41\xf7\x7b\x42\xb4\xb0\xf2\x52\x22\x41\xc5\xab\x04\xdb\xf9\xfa\x0c\x4e\x70\x71\x96\xf5\xe9\xdf\xbd\xcf\xd5\x31\x4f\x76\xc0\xc8\x5a\xc8\x4a\x5a\x5f\x28\x23\xda\x40\x40\x41\x8d\x1c\xa0\x07\x6b\x1a\xae\x53\xf1\x82\x4b\xfa\x97\x7a\xce\x11\x59\x7d\x4a\xa9\x10\xa9\x4d\x69\x1d\x8f\xdb\x1f\x3f\x48\xd6\x4c\xdb\xb8\xa9\x4e\x87\x01\xb0\xad\xdb\xa6\x28\xeb\x3d\x54\x0a\xa7\x1f\xf3\xc9\x6f\x51\x58\x30\x1c\x4d\xb5\x98\xd5\x9d\xa0\xa4\xf1\x13\xaa\xb8\xcd\x3d\x65\xff\xab\x64\x73\xdd\xf4\x41\x49\x48\xd3\xf3\x36\x6b\xaa\x86\x4e\x14\xce\x02\x2b\xce\x2a\x52\x16\x45\xdf\x8b\xe0\x1b\x03\x26\x4e\x90\x47\xd4\x2e\x30\xbe\xda\x92\xe6\xfd\xd4\x31\x4f\xe5\x7d\x55\xb5\x83\x30\x95\xeb\x7b\x0c\xcc\x34\x0e\xc1\x2d\xc7\x9c\x92\xd0\xed\x77\x89\x86\x05\x80\xdf\x7a\x57\x1c\xb3\x26\x5c\x26\xea\x22\x6a\x8c\x92\xab\xd2\xd0\x88\xac\xd4\xa5\xe0\x0e\x7f\x63\xa0\x59\xf0\xc6\x8d\x3b\xc5\x9b\xe7\x37\xb8\xaa\x77\x90\xb9\xe6\x02\x5a\x8d\x14\x6f\x6c\xf4\x23\x2d\xc4\x65\xa5\x39\x7f\xc0\x6c\x15\xe2\xff\x1d\xc0\x90\x13\xf1\x4c\xdb\x12\x5b\x7c\xdd\xff\x78\xa3\xdc\x03\x07\x54\x33\x97\xf7\xd5\x2f\xd6\x73\xca\x1c\x2c\x5b\x47\x16\x36\xd9\xd6\x76\x75\x2f\xbd\xcf\x4c\xfb\xe8\x3e\x9a\xaf\xe3\xcf\xd4\xe4\xb5\x4d\x9b\xdd\x05\x7f\x61\x71\xc4\x7a\x44\xbf\xee\x2e\x52\xc1\xed\x8e\xd0\x79\x2a\x51\xce\x6d\x40\x5a\x35\x2c\x03\xd0\x28\x0b\xc1\x56\x97\xaa\xbc\x88\x08\x87\x46\xb5\x4a\x62\x82\x9f\x8b\x91\xbc\x7e\xa4\x53\x3a\x7c\x94\x24\x52\x97\x4c\x62\x51\xc1\x00\xdd\x26\xf8\x5f\x93\xc8\x6c\x63\x98\x32\xd3\x35\xdd\xf5\xdc\xb4\xd3\x6c\xd6\x04\x4a\x63\x9e\x4b\x81\xf4\x47\xb0\x44\xa3\xf3\xa8\x09\x65\xaf\x4a\xdd\x74\x15\x26\x5c\x18\xfa\x85\x10\xd4\x1b\xf8\xc4\x0a\x6b\xe2\x13\xe7\x02\xee\xb7\xcb\x91\xbe\x1a\xe0\x90\x62\x7e\x49\xe0\x04\x0c\xf5\x64\x34\x5d\xc2\x0e\xa1\xe4\x7a\xcf\x64\xbc\x7c\x96\x1f\xdf\xfc\xb8\x70\xf1\x17\xe4\x1a\x7e\xc9\x7a\x7d\x1e\x92\x44\xc4\x4f\x04\x60\xf5\x89\x84\x34\x65\xce\x91\x03\x9c\xe7\x8c\x72\x8a\xb9\x0e\x83\x94\xa0\x21\x36\x49\x5a\xb4\x9a\x12\xcf\x08\x85\x9d\xb4\xb2\xe5\x00\xca\x30\x7f\x35\x48\x09\x68\x79\x82\x90\x22\xac\xfb\x36\xf7\x8b\x77\x3f\x57\x4f\x35\xf6\xc2\x02\xbe\xba\x0e\x8f\x6c\x5c\xf8\xf2\xad\xba\x00\xbb\x0f\xb9\x1f\xbb\xeb\xd3\x37\x07\x93\x21\x6e\xea\x2e\xcf\x94\x71\x52\x51\x86\xf9\xee\x41\xcf\x68\x08\xe9\xf1\x6b\xf5\x24\x53\x46\x21\x20\x3a\x34\x84\xa2\x2e\x86\xa0\x7f\xe6\x31\x22\x18\x78\xd0\x30\x10\x9b\x90\x69\xf8\x14\xe8\x25\xea\x5e\x20\xbe\x9b\xa0\x3f\xbc\xd5\x0c\x6a\xed\x56\xfd\xad\x51\xe6\x9c\x4b\x35\xd7\x7c\x1a\x2c\x13\xb2\x6d\xcd\xac\xba\xf6\x6c\x9d\xf4\x23\x34\x37\xd5\x59\xae\x08\x11\x24\x1a\x7c\xa6\xb5\x39\x33\xac\x4c\x63\x5d\xdf\xfb\x80\xc8\xd2\xcd\x9f\x22\xd4\xa6\x72\x25\xfa\x83\x8d\x62\xef\xc1\x8c\xed\x13\x6d\xaf\x30\x18\x98\x46\x7b\x44\xae\x62\x1f\x5d\x90\x70\x1a\x81\xc5\x1b\x8e\xd3\x8a\x44\xfc\x4a\x34\x7b\xdd\x89\x38\xc9\xed\x2d\xbd\x7d\xf6\x00\x56\x53\x8e\x4d\x0c\x7c\xba\x58\x63\xb6\x4f\xa0\xc7\xdd\x2b\x49\x88\x78\xc4\x68\xd5\x19\xb3\xfb\xa1\x2b\x8e\x9c\xb8\xa5\x4c\xfd\xfc\x81\xe9\x75\xad\x36\xc3\x61\x7d\x35\x8f\x09\x39\x51\x85\x56\xa0\xc3\xcb\x8c\x4b\x3e\x07\x14\xe8\x54\xda\xd3\x6f\xb6\x08\xe0\x41\xaa\x67\xc7\x66\x00\xe3\x1b\x86\x2d\xe7\xff\xd0\xea\x5e\xc4\xfe\xbb\x21\x65\xa2\x4f\x13\xa4\x63\x37\x30\xf7\x96\xe8\x2c\x51\x47\x64\xf8\x40\xc4\x98\x1e\xa4\x16\x37\xab\xfc\xb5\x02\x99\xcd\x71\xa1\x33\xd0\x9f\x48\xe2\xaa\x14\x98\xad\x14\xe1\xf7\xfe\x6f\xd6\xf4\x8f\x0f\xcc\x19\x3a\x79\x32\x33\x20\x4d\x4c\x6b\x49\x3b\xf5\x29\x2a\x96\x7d\xcd\x0b\x8a\x32\x02\xcd\xd1\xcf\x77\x02\x90\x7c\x04\x97\x76\x6e\xb2\x7a\x1f\x88\x14\x89\x52\x80\x59\x6d\xf3\x60\xb3\x45\x0a\xad\x99\x93\x6f\xbb\xff\xbc\x9f\x0e\x91\x3f\xb3\xcd\xf3\x31\x13\xfc\x35\xa5\x8d\x1d\x36\xb2\x05\x2f\x04\x04\xb1\xcf\x32\x09\x71\x53\xf9\x4d\x9e\xef\xc3\xfb\x97\xf3\xe9\x0a\x03\xf4\xc9\xa9\x2e\xe8\x64\xf9\x21\xc7\x73\x79\x76\x96\xd3\x2f\xf0\x01\xa5\x90\x90\x23\xb8\x07\x65\xec\x06\x82\xeb\xd7\xd8\x4e\xf5\x91\xae\x2e\x13\x53\x16\x09\xe1\x8a\xed\x1b\xf7\x5b\x63\x31\x46\xa8\xc0\x4f\x4d\xac\xa0\xf1\x98\x64\x99\x06\x63\xde\x6f\x36\x9f\x87\x72\x0a\x85\xca\x94\xd4\x6b\x9a\xc4\xf3\x8e\x79\x40\x67\x77\x2a\x86\x4e\x05\xac\x28\x0b\x72\x5b\x55\x7b\xc3\x6c\xda\xc7\x11\xc7\x49\xf1\xfe\xc1\xd3\x02\x7f\xca\x30\x75\x81\x31\x1b\x2e\x4d\xca\x35\xe8\x20\x06\xc0\x82\x2a\xa2\xe1\x5e\xd8\x77\xf0\x7f\x95\x53\x5e\xe9\x7e\x49\xbe\x39\x81\x9c\x89\x8b\xdd\xac\xc0\xcf\xf8\xb3\x71\xd9\x8e\x81\x6c\xac\xff\x1f\x97\xe1\x7f\x1d\xbe\xde\xa2\xa4\x6f\x20\x02\x01\x97\xa1\x22\x69\xc3\xf6\x10\xae\x7a\xc4\xcb\x3c\x7b\x93\x24\x86\x76\x22\x71\x24\x44\x2c\x03\x11\x81\x88\xb1\x81\xec\xf4\xb8\xdb\x03\x2c\x2c\x5e\x26\x47\xe1\x2e\x5b\x65\x0e\xa9\xa2\x8e\x49\x86\x58\x1e\xd3\x80\xa2\xfc\x32\x92\x72\x53\x75\x32\xe5\xd3\x39\x0f\x1b\x68\x71\x08\x88\xa6\x59\xb9\xa0\x31\x3f\x72\xc0\x1e\x8b\xab\x5b\x6a\xb6\x3a\xf8\x87\x8c\x3a\xe8\xe9\xaf\xa1\x4f\x0c\xd2\xfa\xaa\x2a\x37\xfe\x00\x39\xc8\x5d\xde\x9c\x2b\x88\x8a\xe8\x3b\x76\xa4\x35\xfe\x92\x85\x3a\xce\x17\xfc\x0a\xe7\x4a\x8c\xbd\x99\xae\x7b\xa9\x1c\x48\x25\x55\xa0\xf3\x9f\xa9\xfd\xaf\x13\xd0\x5b\x34\x10\xed\x0d\xe8\x0d\x5d\xf9\x33\x21\xaf\x56\x1d\xf4\xb8\xae\x7d\x0b\x5a\x40\x2a\x76\xd3\x19\xc9\xb3\x8e\x8b\x75\xd6\xcf\x42\x31\x93\xbe\x9b\xa1\x07\xdb\xb1\x1c\x5e\x29\xc5\x4f\x78\x9d\xeb\x11\xa3\x5b\x75\x7b\x35\xd0\xe4\xe3\xc6\x77\x45\x57\x9f\xc2\x5d\xe8\xd6\xf8\xd8\xbc\xd3\x58\x07\x61\x1e\x24\x9c\xea\x99\x0a\xdf\x86\x42\x97\xb8\x33\xbf\x4a\xa6\xa1\x18\x8a\xd0\x49\xf0\xbe\x49\x63\x26\x60\xf6\x50\x49\x5b\x10\x7c\x0b\x3e\x36\x07\xc9\xb2\xf0\x33\x58\xc4\xcc\xbb\x03\xfb\x7a\xd9\x9e\xae\xfc\xc8\x12\x0c\x35\xe9\xe1\x64\xb5\x2b\x13\x1b\xc2\x07\x59\xa7\x27\xae\xe7\xff\x8f\x33\x1d\x25\xf8\x06\x19\xb5\xce\xa4\x21\x64\xda\x8c\xea\x6b\x59\xe8\x9a\xcc\xae\x8d\x1c\x2d\x8b\x22\x4f\xf6\x05\x3a\x62\x50\x86\x45\xa7\xb7\xe8\xcd\x0b\xc9\x09\x18\x1c\xe2\xce\xec\x28\x29\x36\x89\x84\x95\x26\xe1\xe1\x45\xc9\x11\x4f\xe0\xfe\x3a\x2d\x64\xdf\xaa\xf8\x26\x8e\x2a\x8c\x9a\xb4\xdc\xfc\x0a\xcc\xfe\xf1\x55\xc9\xb8\x36\x28\x6b\x4e\x94\x91\x32\x95\x2d\x3f\x11\x7d\xd5\x73\x66\x38\x88\x96\xf1\xb7\xd6\x65\x86\x92\x24\x72\x03\xaa\x7f\xba\x0c\x4b\x14\xdf\x52\xb4\xe5\xd3\x98\x4b\x91\xa4\x2c\x0f\x94\x88\x7b\xe0\xd8\x6f\xaf\x89\x25\xf4\xc9\xd9\xd8\x7b\xf8\xbd\x01\x5b\xcd\x11\x18\xaf\xf6\xd1\x74\x68\x1e\x58\xf5\x53\xae\x23\x39\x6a\x1c\x55\xa4\xef\x5f\x7a\x5e\x2a\xcf\x73\x99\x50\x7d\xed\x51\x33\x00\x37\xb8\x63\x32\xb1\xea\x8a\x03\xce\xa9\xe5\x27\x96\x68\x2f\x53\x8f\x1b\xfb\xb7\x82\xbb\x3f\x35\xd3\xef\xaf\x44\xa1\x37\x8c\xe1\xa1\x3e\x01\xa2\xda\x76\x35\xc7\x02\xea\xef\x1e\xb0\xff\x30\xef\x88\xee\xe4\x2a\x84\x0a\x31\x2a\x84\xa8\x91\xef\xb7\xe3\xac\x4c\x21\xf7\x69\x82\xbc\x22\xde\x55\x88\xc1\xe1\x76\x1a\x3b\x4f\x87\xa4\x2d\xb6\x71\x41\x55\x4e\x8d\xcc\x16\xf5\xab\xdd\x35\xfd\x10\x5f\x57\xfa\x32\x55\xc3\x00\xdf\x65\x93\xd1\x99\xd1\xe9\x93\x64\xeb\x90\x9c\xb0\xe0\xfe\x0d\x53\xd1\x92\x96\xfa\x34\x2e\x95\xc8\x9c\x32\xcc\xd1\xcc\xd4\x57\x73\xe0\xee\x82\x2d\x85\x2a\x37\x9b\xa5\x9e\x5c\x71\x8f\x25\xca\xd7\xf2\x32\xac\x48\x48\xc6\x63\x54\x25\x69\x79\xfe\xcb\x3d\xe7\x8c\x63\x91\xf7\xaa\xf4\x03\xa6\x8b\xd4\x1c\xdb\xc0\x72\x00\x5d\xc7\x60\xfd\xfd\xd3\xf6\xfb\x1a\x4e\x0f\xee\x64\xfc\x63\x93\x59\x82\xeb\x82\x38\x58\x20\x01\x5e\x24\x3e\x48\x87\xf2\x59\x9d\x2b\xfc\x6a\x10\x31\xec\x4e\xd5\x3e\xab\x55\x00\x53\x4d\xef\x97\x5c\xf5\xcf\x15\x06\x67\x68\x88\x67\x60\x78\x72\x6c\x3b\xbc\x84\xa8\x3f\x31\x96\x26\x8d\xa1\x4c\xf9\x3a\x12\x8c\xa8\xa4\xbf\xb2\x2d\xea\xe7\x2d\x31\x7d\x24\x0f\x28\x44\x81\x50\xb9\xfe\x17\x0d\x16\xd4\x27\xa6\xe8\x1d\x3d\x6c\xf3\xf7\x9f\xcb\xef\x84\x65\x10\xac\x0a\x1f\x0c\x45\xa6\x0c\x97\xfa\x43\x16\xbe\x43\x01\x55\xc3\x5e\xfb\x7f\xf2\xe3\x7f\x12\xe0\x63\xf0\x6b\x9c\x6a\xb8\xe2\x2b\x44\xf5\xae\x4e\xd8\x6c\xf8\xfa\x77\x1c\xeb\x48\x7e\x9f\xe0\x06\x56\x5f\xe3\x65\x12\x0a\x29\x21\x91\xd0\x00\xfd\xd1\xab\xe3\x23\x01\xd3\xc7\xb3\x22\x1a\x6b\x2a\x28\x96\x16\xf3\xba\xbc\xb3\x99\x61\x90\x1f\x01\xde\x40\x77\x50\x06\x9d\xc2\x56\x25\x0d\xa3\x4d\x49\x5a\x72\x34\x17\x49\xd3\xda\x0d\x83\x5e\xfd\x83\xec\xe7\x3b\xcb\xbf\x39\xa6\xc0\x46\x39\xfe\xba\x1e\xe9\x14\x8e\xd0\x19\xd1\x5d\xfb\xab\x5f\xba\x49\xed\x00\x6b\x18\x87\x24\x68\x92\x71\x3f\xbb\xf3\xb8\x1b\x54\x00\x74\xc5\x8b\x75\x81\xb8\xf8\xcd\x91\xde\x7d\x71\x9a\x3a\x12\x5f\xde\xb9\x39\xe5\xb1\x1b\xf6\xf3\xef\xfe\xdb\xac\x7b\x89\xe2\xc6\xc6\x3f\x60\xc0\x6d\x94\xe5\xcd\xbb\xbd\xd5\xf3\xf7\x2c\x6a\x02\x4b\x21\xe3\xfc\x23\x2b\xe6\xa9\x70\x7c\x55\xa8\x14\x0e\x4d\xf9\x09\x3e\xee\x4b\x20\xf3\x2f\x81\x79\x8a\x0a\x09\x57\x01\xef\xb9\xab\xff\x6a\x42\x09\xa1\x9b\x79\xbe\x84\x47\xe0\x71\x3e\xd4\xdc\x0d\x96\x54\xf3\xfe\xde\x3e\xe8\x64\xcd\x2f\x1d\x58\x8d\x26\xd3\xb6\x84\x0e\x6d\xbb\xef\x8d\xf6\x90\x0d\xf8\xb9\x57\x3e\x7c\x18\x12\x0e\x67\x46\x85\x74\x19\x15\xeb\x04\x44\x19\xa7\xa9\xf6\x66\xea\xfe\x62\x68\xd7\x79\x20\xd4\x73\x0e\x2f\x92\x09\x85\xca\xbd\xcb\x1a\xdd\xfb\xd8\x76\x97\x6f\x3c\x58\x97\x02\x38\x44\xff\xf0\x90\x39\x3e\x89\xdb\x76\xd0\x29\xdb\x3f\x9c\xdb\xeb\xaf\xd4\xa1\x49\x45\xf1\xe1\xf0\x92\x7d\x59\xfe\x0a\x77\x32\xfc\x00\x54\x14\x2c\x65\xcc\x62\x5e\x61\x70\x99\x52\xa1\xe1\xba\x64\x45\xfd\xc6\xa4\x6f\xbf\xf8\x99\xc1\x8e\x6f\x20\x93\xa7\xe1\x7c\x01\x07\xf8\xe3\xa5\xdb\xac\xa5\xdb\x10\xda\x24\x12\x52\x4c\x01\x30\xf9\x41\xfb\xca\x8b\x36\x32\xf2\x72\xb5\x9a\x3a\x63\x2f\xf9\xe8\x9f\x14\x28\x81\xf9\x23\x0d\xb7\x87\x22\xd3\x2e\x5d\x8d\x67\xac\x57\xd4\x87\xae\xf4\x1d\xd6\xb5\x77\x68\xa8\x54\x7e\x86\x4a\x1d\xc0\x18\x8a\x2b\x00\xef\x23\x43\x2f\x5a\x71\xaa\x6e\x6f\x6d\xbe\x96\x80\xe7\x19\xc1\xe7\x10\x43\x07\xea\x40\x39\xc5\x95\x27\xf4\xf2\xd9\x4f\xde\x17\xa9\xe6\xaf\xe3\x6f\x73\x90\x17\x68\xec\x2c\xbb\x48\x0c\xd6\x78\xc3\x95\xee\xde\x3b\x87\x36\x54\x72\xdb\xc4\xd7\x2d\x71\x51\xbc\xbc\x3c\x85\x83\x9c\x4e\x5c\xef\x7b\x03\x97\xaf\xe7\x73\x8c\x18\x83\x31\xde\xa1\x6b\xf7\x2f\xa5\xf5\x15\xcb\x1b\x99\x62\x3c\x30\x63\xe5\xe2\xd5\x0a\xa7\xbc\x2a\xdd\x13\x5e\x1a\xef\xd4\x39\x6e\x86\x26\x22\xcb\x7d\xc6\x8b\xfc\xa6\x83\xba\xe6\xe8\x40\x41\xe9\xc5\x15\x87\x02\xdb\x30\x08\x05\xd2\x4f\xb7\x7f\x26\x2f\x27\x24\xa1\x90\xd1\xe2\x8d\x5a\xb0\x85\xed\xf2\xa9\x40\xff\xd1\xda\x91\x97\x05\x6b\xc4\x92\xe6\xa8\x8c\xb5\x23\x06\xb2\x7e\xd8\xcf\xbd\xdd\x2a\x9e\x31\x19\xc0\x4f\x8e\x98\xb3\x67\x38\xc1\xa5\x93\xd7\xe0\x0c\x2b\x6f\x3c\xcc\x68\x62\xb5\xbd\x87\xae\x05\xf7\x3f\x4b\xb8\x5c\xc8\xd9\x8d\x65\xa9\xd4\xd2\x13\x49\x1b\xce\x3c\xcc\xe2\xe3\xa0\x45\x85\xae\x83\xf4\xe8\xb3\xe3\xf6\x0b\x4a\x06\xc0\x61\x9c\xb0\x7a\x5a\x7f\x9b\x4c\x6f\x1d\x8d\x3c\xe6\xee\x80\x3c\xd6\x5e\x83\x9a\x4a\xfb\xe9\x92\xfd\x61\xfc\xd7\xdd\xe4\xac\x6c\xaa\x2e\xf0\x57\xf3\xd3\xb0\x89\xd9\xab\x46\xea\x58\x97\x1d\x20\xfd\xb0\x43\xb7\xc1\x31\x96\x26\xb7\xb1\x5c\x1c\x89\xcd\x40\x19\x46\x9c\x8e\xb9\x00\x22\xde\x89\xb8\x32\x0c\x70\x33\x0a\x42\x48\x4c\x31\x6f\xa6\x0e\x9f\xb7\x38\x45\x47\x3b\xde\x15\xe8\x1f\xeb\x35\x11\x58\x7f\xd8\x03\xa2\x23\x4f\x13\x9e\xcd\xf1\xdb\xa6\x1a\xef\x37\x27\xbe\xf8\x5f\x8d\x65\x45\xe3\xb1\xfe\xa3\xe8\x2e\x65\x80\xca\xda\x5c\x35\x65\xba\x14\x07\xed\x7f\xe6\x72\x81\x1a\xf1\x32\x60\x6f\xac\xf1\x8f\x7b\xae\xd7\xbf\xc9\x2c\x1c\x81\xcb\xe2\xe4\x25\x1a\x9e\xbb\xe4\xe0\x55\x56\x23\x30\xdc\xa1\x39\x2a\x5b\xd0\x5c\x79\xd2\xd3\x73\xeb\xec\xa7\xbd\x55\x28\x40\xf3\x88\x80\x94\xc6\x68\x29\x92\x3d\x05\x41\x1b\x7a\x06\x06\xc7\xed\xb3\x31\x1f\x3c\x36\xa5\x8f\xfd\x60\xc4\xbd\xd4\xbc\xc9\xe7\x66\x3c\xee\xaf\xfa\x4e\xf0\x4f\x75\xac\x22\x79\x3c\xe4\x04\x42\xff\x73\x6b\xff\xaf\x5f\xca\x5b\x54\x10\x0a\x06\x04\x71\xfd\x29\x45\xd9\xe5\xf3\x88\x93\x4a\x51\xac\x33\x8b\x72\x59\x59\x11\xbf\xe0\xa1\x8d\x3b\xdb\x3b\x7c\x56\xb1\x48\xf9\xf9\xfe\x27\x08\x5f\xca\x94\x4c\x89\xac\x1e\x83\x86\x98\xe5\xaf\x30\x79\x7a\x97\xb5\xc1\xc4\xa1\x2f\x2c\xb2\xdb\x6a\x87\x91\x46\xfe\x93\xe0\xe5\x87\x19\x58\xe3\x4c\xce\x0d\xf1\xc6\x4c\xa5\xc3\x7b\xfc\xa5\xab\x26\x41\xbe\xac\x8b\xbc\xca\x76\x2a\xf5\xd3\x32\xa2\xf1\xb8\xe9\xe6\x8d\x0e\x48\x26\x92\xc0\x55\x1f\x08\x85\xef\x6c\xe3\xc0\x88\x76\x4e\xdc\xf7\x4d\x26\x96\x94\x34\x43\xb1\x00\x7d\x07\x72\x68\x9a\xdf\xaf\xa3\x9e\xe6\x3f\x53\xfb\x5f\x47\x80\xb7\x28\x0c\x14\x24\xc8\x57\xce\xa7\x81\x6d\xa6\xf1\xa1\x07\x1a\xa9\xe9\xbb\x3f\x4c\xe3\xe9\xbe\x9d\x5b\xa1\x14\xec\x47\x36\xed\x2f\xe8\xa9\x0a\x7c\xfe\xdd\xa0\xaf\xa5\xac\xd5\xdd\x34\x3b\x31\x97\xb6\xc6\x4e\xa4\xef\x59\x6e\x5e\x4a\x8e\xef\x9b\x22\xb4\x0e\x4d\x90\xe7\xdc\xed\x7c\x99\xbd\x05\xa6\xa0\xde\x0d\x34\x2f\x73\xc9\x22\xc2\x11\xf7\xae\x21\x4f\x28\x57\x99\xd9\x6c\xec\xd0\x92\x3d\x24\xbc\x47\x76\xe9\x65\x41\x50\x1e\x1c\x02\x44\x37\x3f\x8e\xbf\x5c\x0e\xff\xf5\xcd\xb2\xa3\x8d\x87\xf5\x42\x10\xcf\x40\x2c\xa5\x65\x55\x10\x45\xc1\x1d\xc6\x80\xc9\x3e\xc4\xd6\xbd\x9e\x85\xfc\xff\xfb\x11\xbc\x85\x63\xc1\x3d\x3b\x10\x88\xda\xc0\xeb\x8c\xcc\x0c\xaa\x85\x78\x0f\x53\x69\x4a\xbd\x94\xd0\x40\xbf\x9c\x17\xac\x4b\xee\xf1\xe6\x85\xa8\x10\x15\xcc\x1a\xf2\x9b\xa3\xf0\x65\x53\x61\xb8\x5f\xa3\x69\xb8\x34\x2f\x76\xd3\xae\xa7\x60\x95\xf0\xa3\x75\x12\x0e\xee\xc2\x8c\x96\x6f\x54\x83\xc1\xd2\xcf\x25\x3e\xe8\x4b\x76\xc2\x75\xb7\x48\x3c\x93\x1a\xfd\x21\xf5\xb5\xde\xd7\xb4\x1d\x25\xc4\xb3\x8e\x01\x55\x4b\x93\xb2\x02\x20\x48\xdc\xf1\x4c\x60\x66\xa8\x3b\x2d\x81\x2c\x46\xb8\xb1\x05\x46\xfb\xbd\xa1\xb0\x28\x44\x4a\x0c\x43\x17\x42\x71\xce\x8c\x69\x41\xb9\xdf\xf5\x34\xf2\xff\xbd\x24\x11\x3f\x10\x3d\x8e\x0e\xc5\x35\x62\x16\x29\x46\xf0\xe2\xef\x90\x47\xc5\x97\xa1\x27\x5a\xfa\xcb\x28\x8f\xe1\x57\x09\xd5\x0f\x78\x8b\xa2\x58\xbf\x7c\x8a\x7f\x3d\xbe\xc8\x58\x99\x7e\x9b\x98\x51\xb2\x4f\x95\xf0\x34\x64\x0e\x24\x8d\xd9\x6b\x25\x0d\x20\x1b\x26\xaa\xde\x1b\x74\x90\xc7\x6b\xd3\xa1\xbe\xfe\x93\xa2\xe2\x93\x54\xd1\xcd\x15\x94\x5b\x6e\xbc\x6e\x67\x3f\x27\xf9\x76\xeb\x37\x8e\x91\x98\x37\xe2\xab\x28\x9f\x6a\x03\x15\xac\xc0\xbf\xe7\x27\xb6\xbc\x9f\xc3\x6d\x34\x62\xd0\x25\x96\x64\xc8\x6f\x8f\x8b\x6a\x84\xf2\x5e\xe7\x83\x42\xce\xd0\x7d\x59\x92\xaa\xcb\x24\x44\xf0\x4c\x5a\xb2\x99\x2f\xfa\x61\xd8\xe1\xf8\x2d\x11\xfb\x2e\xf9\xec\x57\xa8\x29\x4f\x0a\x7a\xa2\x4b\xdd\x50\x53\x01\xde\xaa\x4a\xde\x7d\xde\xab\x56\x77\x0e\x6c\xce\x66\x3a\x27\x78\xbc\x05\xc2\xd2\x8d\x37\x6e\xeb\x85\x2d\x29\xf0\x2d\xba\x9f\x0f\x13\x5d\xa1\xeb\xa9\x8a\xe3\xcd\x80\x33\x89\x7b\xa9\x27\x8e\x9c\x24\x6f\x8b\xd6\x16\x57\xeb\x90\xaf\x9a\x77\xdc\x5b\x0d\xbb\x78\xd6\xab\x81\x35\xc2\x4a\x1e\xc3\x94\x08\xc0\x3d\xb8\xe5\x15\xa2\xc0\x74\x59\x8b\x06\x91\x6c\x64\xcd\x87\x52\x7c\x42\x50\xbc\x5c\xa4\x59\x83\xdd\x47\xf5\x95\x2f\x16\xa1\x1f\x00\x38\xf1\x12\x4d\x84\xfa\x89\x10\x7a\x54\x68\xe0\x0f\x32\x5b\x7d\x82\xd4\xff\x09\x70\x69\x5b\xde\x84\x6d\x84\xf1\x67\x7c\x0e\xf8\xd0\xd6\x07\x4e\xca\xf0\x66\xcb\x73\x87\x6b\x89\x8b\xc6\x8f\x4f\x4c\xdc\xe4\x9a\x83\xf2\xbd\x2a\x8d\x67\x77\xde\x05\x52\x15\xea\xbb\x5a\x18\x54\x5a\x20\x5f\xd4\x82\x60\x26\xe1\xe7\x39\x68\xfe\x1b\x9a\xde\x58\x1d\x5a\xf5\xf2\x39\x94\x1d\xa9\xe0\x5c\x86\xd5\xeb\x43\x64\xb5\xcb\x17\x29\x20\x0d\x31\x2c\xed\x6a\xbf\xf5\xb1\x6d\x36\x16\xe9\xf6\x0c\x96\xb7\x95\x34\x3f\x24\x02\x89\x99\xf1\xed\x69\xe9\xf2\xa0\xeb\xc0\x10\x3b\x50\x12\x1a\x36\x96\x61\x1c\xa2\x4f\x31\xa6\xc1\x51\x81\xdc\x0e\xc7\xd7\x98\x6a\x71\x4f\x22\x82\x91\x40\xe1\x85\x67\x37\x33\xfa\xe6\xbf\xe8\x82\xac\x33\x43\x05\xc8\x13\xa7\x9c\x5e\x42\x4d\x2f\x68\xad\xd5\x1f\x23\xa0\xe6\x1f\x0a\xf4\x4f\x6c\x27\x17\x1d\x76\x53\x7f\x57\xe3\xbc\x2e\xff\x18\x71\x2f\xc6\x42\x68\x3c\xd5\x1c\xba\x7a\x7d\x6f\xfd\xf3\x06\xc4\x48\x48\x74\x8f\x6e\xc2\x81\x1a\xfe\x28\x6f\x8c\xc0\x83\x37\x70\x27\xb2\x27\x94\xab\x23\x56\xe8\x15\x5d\x28\x75\x53\x68\x3f\x4e\xb4\x55\x77\x4b\x44\x8f\xf0\x48\x59\xad\xb9\xae\x2d\x96\x1e\x20\x02\x75\xd6\xf5\x29\x99\x27\x99\xbd\xc3\xd0\xbc\x7a\x1a\xf8\x93\x2f\x1f\x5a\x8a\x4d\x24\xdf\xfa\x0c\x12\x71\x86\x8f\x09\x06\xf4\x90\x93\x26\x03\x46\xa5\xa4\xf2\xc2\xe9\x8a\x0f\x3f\x3b\x39\xd1\x1a\xb6\xa8\xeb\xea\xd3\x87\x47\x57\xc3\xcb\x9e\xbd\x3c\x62\xad\x1d\xe5\x57\x6a\x04\x56\xd9\x53\xaa\xe1\x48\x32\x86\xdb\xa2\x47\x87\xb4\x3c\xcb\x4e\x6f\x28\xf9\x90\x1a\xec\x6e\x95\x1d\x58\xbc\xcb\x24\x4a\x0a\x86\x59\x01\x0a\x4d\x93\xce\xbe\xc0\xc4\x1a\x1d\x76\xc6\xf7\x09\x3e\xf8\x38\xb0\x7e\x81\x51\xfb\xfc\x3d\x0a\x42\xf6\xaa\x58\xdb\xf9\x73\xab\x53\xd0\x4f\xc0\xa6\x88\xef\x4e\xa8\x99\x45\xda\x1e\xde\xbe\xcb\xae\x55\x83\xae\xa5\x2f\x2b\xca\x4e\xb5\x7e\x34\xf3\x13\x10\x50\xef\x36\x70\xd2\x07\x22\xa4\x4c\x17\xd2\x09\x6b\x25\x0f\xcd\x52\x9c\x1b\x17\xe5\xb9\x34\xbf\x98\x1a\x6d\xff\x0e\xfe\xf5\x85\x60\xea\xa5\xb0\xac\xf2\x80\x24\x78\x95\x14\xfe\x4e\x3d\x34\xa0\xa0\xe1\x26\x61\x70\x7d\x14\xe6\x9e\x7b\x6f\x32\xab\xdf\x56\x47\xea\x1e\x5c\x78\xc7\x21\x68\xc0\xb3\x17\x0d\xee\x54\xb3\x3a\xa4\xa8\x98\xcb\xd7\xde\xf9\x63\xd4\x28\xeb\xe2\xe7\x75\xe8\xc7\xba\x3a\x97\x30\xd8\xf6\xb3\xc5\x8a\x7c\x3d\xf8\x9b\x1b\xa0\xce\xb7\x78\x02\x05\x45\x36\xbf\xc4\x60\x49\x68\xe2\xdc\x2c\x9d\x72\x56\x2c\xea\xf6\xa1\x27\x53\xd2\x78\xaf\x35\x80\x33\xcf\x18\xc8\x57\x90\xe6\x47\x21\x7a\x37\x93\xda\xcf\xb6\xde\x8f\x6e\xa1\x51\xce\x98\x23\xe8\x15\x1c\xfe\xad\xa7\x41\x8c\x58\x1a\xad\xc2\x4d\xcb\x06\x96\xff\x43\x3e\xd2\xe5\x8b\x7a\xb5\x94\x9a\xd4\xd5\x84\x0d\x86\x51\xfc\xd7\x51\xb1\x9c\xf3\xc0\xd0\x89\x41\xe8\x15\x1c\x6d\xdc\xe3\x22\x60\xf9\x4d\x36\x62\x1a\x1e\xa2\xbe\xf1\x95\x6d\xe0\xc2\x53\x19\x97\x4f\xec\x45\x93\x31\xf4\x89\x07\xf0\x43\xf7\x6f\xe2\xca\x49\x24\x02\xcd\xb7\x5b\x88\xca\xcd\x92\x77\xbb\x8d\x77\x46\xdf\x9a\x8f\xf4\x9e\x29\x49\x69\xff\xa0\xb6\x67\xc8\xca\x26\xed\x9d\x51\xa6\x57\x71\x66\x03\x96\x3f\xb6\xdd\xf5\xd3\xb8\xa0\x9f\xaf\x8c\x4f\x52\xec\x4d\xe0\x4e\x3f\x6b\x76\x7f\xe4\x1b\xfb\x66\x24\xaa\xb7\xec\x05\x74\x23\x18\xf6\xaf\x4a\x53\x90\x7e\x94\xcf\x29\xdc\x0c\xe5\x2f\xf0\xf7\xf9\xd4\xaf\x75\xf7\x6a\xc1\xee\x9a\x43\xe4\x4c\xa5\xcd\x43\x1b\x55\x3c\xde\x01\xb4\xe2\x87\x22\x91\x96\x43\xde\x94\xa5\xe5\x16\x0a\x1e\xe4\x11\xb8\x5b\x77\x03\xfa\x6e\x4d\x8c\xf3\x5a\x9d\x86\xef\x8b\x12\x99\x6f\xc0\xfe\x60\x6d\x1f\x79\xb0\xab\x6a\x2f\x0c\x0d\x38\x93\xcd\x20\x29\xf7\xc4\x66\xdf\xd9\x8a\x1a\x6f\xf4\xee\x16\xb8\x6e\x41\x14\x1c\x64\x56\x00\x5f\x8a\x49\x91\x3a\xb7\x02\xcf\x72\xa3\xd9\x9c\x8c\xd9\xa4\x87\xb0\x3d\x1d\x2a\x88\x0f\xeb\x02\x8d\x2f\x84\x63\xbd\xa6\xb3\xb8\x0c\x50\xf2\x35\x9f\xf9\xdd\xb7\x7d\xfb\x34\x1f\x32\xaa\xb4\x19\xf4\x12\xf3\x75\xfa\x1e\xee\x4f\x38\x1b\xfb\xd3\x04\x1f\x7f\xbd\x16\xa5\x26\xc0\x2a\xbf\xcc\x4e\xfd\xfd\x62\xdf\x87\x19\xc6\x4b\x53\x16\xce\xd6\xf8\x13\x64\xd8\x59\xb3\x8f\xa8\xd1\x6a\x92\xa9\xce\xe0\x66\x35\x49\x3e\x68\x28\x8e\x17\x88\x2b\xb0\x68\x61\xa8\xdd\x0d\x33\x93\x45\x7e\x1a\x6c\xc5\xe4\x8c\x67\xdd\x82\xa9\xd7\x5c\x63\xe1\xa7\xac\x32\x7b\x29\xaf\x93\xc2\x3b\xec\xb3\xa0\xd0\xe3\x32\x26\x35\xed\x26\x26\x63\x29\xae\x47\x28\xbe\x86\x64\x69\x82\xd3\xe4\xff\x66\xc3\xaa\x5c\x63\x64\xf0\x1f\x57\xe0\x7f\x1d\xd2\xde\xa2\xd4\x9e\x10\xe0\x8d\xc9\x51\x37\x44\x7c\xf7\xc5\x34\xcf\xce\xd0\x6f\x95\x65\x40\x89\x86\xfe\xe0\x17\x07\xf6\x27\x08\xcc\x12\xff\xf0\x77\x4f\x57\x92\x60\xf0\x71\xa9\xa0\xda\xdc\x34\xc3\x3b\x64\x96\xa4\x90\x19\x3b\x94\x82\x99\x49\xdd\xfc\xf6\x1b\xcd\xbe\x9f\xd6\x83\x81\x7f\x25\xa4\x1c\x18\x9b\x50\x66\x7f\x18\x63\xeb\xcd\x2f\x2e\xed\x4a\x40\x84\xb4\xf7\x4f\x20\x69\xb6\xcd\x24\x88\x88\x1e\x5b\xa2\xc2\xcb\x5a\xfb\xf3\x01\xa4\x15\xf1\xbe\x4c\xf2\x50\x6b\x22\x86\xa2\x43\xf5\x54\x30\xaa\x76\x6b\x53\x59\x1a\x94\xcb\xb2\x31\xb4\x89\x4d\xd4\x53\xbb\x81\xef\x7f\x85\x67\xfd\xaf\xa3\xda\x5b\x54\x37\x10\x02\x0c\xbb\x98\x85\xc9\x35\xcb\x90\x92\x29\xb0\x7b\xfe\x6b\xb7\x76\x5a\xae\x0c\x08\x8e\x8a\x64\x13\x72\x67\xa7\xd3\xe8\x92\x17\x0d\xae\x05\x4b\x0c\xd8\x27\xce\xcb\xbc\xdf\xdb\x7d\x74\xa3\x1d\x6f\xa9\x76\xeb\x38\xfd\xa1\xae\xee\xd2\x58\xf2\xef\x8b\x99\xe6\x51\x51\x98\x34\x19\x58\xc5\xda\x02\xe5\xb9\xff\x51\xda\xdb\x2c\x5a\xc7\xdf\x9f\x5e\xd2\x14\x1f\x15\x6d\x1c\x7d\xc4\xec\x5d\x2d\x3f\x86\xc3\x4c\xd5\xfe\xdf\x8f\x60\xc9\xd5\x4b\xe2\x4c\x81\x84\x3c\x7c\xc1\x84\xc1\x82\xd2\x5c\x99\xbb\xea\xb9\x88\x69\xd9\xf4\x82\xf5\xc5\x4c\xab\x84\xe2\xb4\x43\xf0\xf5\x0c\xe4\xff\xdf\xd9\xee\x2d\x2c\x0c\xe9\xf3\xfa\xdb\xc2\x32\xc7\xa8\x31\x1b\xb2\xec\xfc\x19\x55\xa7\x37\xfc\x4a\x4f\x6e\x0c\xd9\xb8\x8d\x8c\x58\x63\x82\x47\x5a\x79\x65\xf6\x66\xa2\xf5\xd5\x1a\x89\x8c\x0f\xf7\x68\x72\xdc\x83\x63\xea\xc5\x8d\x6f\x58\x1a\xca\x77\xde\x04\x32\x5f\xf6\x2e\x6d\xf5\xef\x67\x7f\x53\xeb\x1f\x38\x06\x13\x1b\xd2\x74\xe3\xb2\xda\x04\xdb\x2b\x8c\x79\x04\x34\x9a\x17\xdf\x08\x45\x8a\xa3\xf8\x74\xcb\x64\x10\xa8\x4d\x33\x50\x1c\xbf\xd3\x03\xa2\xb9\xe1\xb1\x81\xec\x47\xbe\xe6\xfc\x36\xf9\xa8\x5d\x26\x9a\xf7\x7a\x72\x42\x7b\x1d\x7b\x7f\x29\xfb\x91\xf1\xf9\x69\xba\xdc\x09\xff\xb3\x65\xff\xf3\x24\x14\x45\x83\x10\x02\x7b\x04\x1d\xf3\xfe\xc2\xbd\x76\xd6\xf4\x0a\xe7\x0b\xcf\xe5\x5b\xeb\x63\xf4\x5f\x73\x68\x40\x0d\x7e\x9b\xee\xc0\x6d\x37\x6f\xfc\xcc\x56\x0c\x56\xfe\xb9\x31\xcf\x5c\xf6\x16\xac\x3c\x36\xe9\xc6\xd6\x6d\x50\x9e\x31\xca\xd3\xcc\xea\xff\x2c\xf2\x24\xad\x0f\xbf\x3a\xae\x1d\x25\x03\x44\x59\x96\x1c\x07\xc8\x6e\x06\xb6\x96\x5c\x6d\x7f\x90\xa3\x57\x78\xe2\xf4\x94\x57\x19\x14\x50\x9f\x35\x8b\xaa\xf9\xed\xf5\x75\x82\x8e\xe9\xd2\x91\x20\x3c\xb3\x68\xcd\x32\xf1\xc5\xa4\x8a\x0e\x56\xd2\x52\x17\x5b\xc0\x38\xd7\xde\xac\x07\x41\xe5\xc4\xde\xaf\x99\x86\xb3\xff\x4c\xed\x7f\xfd\xbb\xde\xa2\x90\x10\xa4\x18\xc0\xd4\xae\x27\xf2\xd9\x66\x8f\xc7\xe0\x9f\x92\xf0\x07\xa1\xee\x82\x4c\x7d\x3d\xb2\x12\xd2\xa1\xfb\xf4\x77\x46\x87\x2b\xb5\xab\x3f\xef\x02\x1f\x71\xed\x36\x13\xe6\x32\xda\xe2\x70\x43\xe6\xf4\x67\x17\x66\x38\xed\x6c\x48\xc9\x6a\xb4\x3f\xa4\x0c\xad\x6d\x51\x29\x46\xd2\x11\x11\x10\xb5\x25\xe1\x2f\xf8\xb9\x59\x41\xa9\xb2\x79\x62\xef\xaa\x37\x0e\x59\x34\x11\xde\xfe\x0e\x96\xbb\x29\x54\xae\x20\x81\x4d\x7a\x2a\x15\x10\x85\x73\x41\x7d\x8c\xa3\x5e\xeb\x59\x87\xf6\xf8\x27\x9e\x8b\x8d\x7d\x99\x96\x61\xf6\xf0\x32\x53\x2d\xe5\xc4\x3c\x9d\x4b\x46\xc1\x73\x5d\xfa\x7f\x29\x51\xe8\xae\x1f\x9a\xf1\x52\x07\x2d\xf0\xc6\x14\x39\x13\xe5\xd5\x64\x5e\xce\x01\xb5\xa7\x18\xd4\x09\xfe\x45\xb0\xfe\x89\xf3\xc6\x69\xde\xa2\x2f\x97\xab\xed\x60\x23\x9d\x93\xf2\x73\xff\x34\xe5\xa2\xc8\xbd\xa9\x04\x34\x4e\xe5\x0c\x1f\xfa\x39\xd6\xc2\x16\x85\xd3\x10\x05\x06\x54\x19\x39\x39\xa4\x59\xe0\x2b\x64\x9e\xce\x67\xb3\xda\xd1\xc2\xf3\xd8\x55\x56\x11\x70\xd6\x2c\x3e\x77\xbe\x7c\x16\xc7\x6f\x0a\xfd\x2e\xe4\x47\xac\x59\x43\x84\x09\xb2\x08\x7d\xb1\xff\x21\xfe\x8d\x46\x54\x26\x5b\x9e\x39\xde\x7e\x85\x5c\xf9\x37\xe6\x84\xe7\xa2\x1d\xfe\x72\x5b\xca\x64\xb9\x45\x93\xfb\xab\x99\x73\xaa\x65\xb3\x19\xa6\x5f\x5d\xe7\x8d\xe2\xf4\x5e\xdd\xd9\x49\x66\xa1\xd5\xff\xb0\x24\xf1\xb6\xa8\xab\xb4\x1d\xc3\x39\xf8\x0b\xf4\xbc\x09\x0e\xd9\x7a\xe0\x4e\x3a\x88\x86\x21\x16\x72\x8a\x41\xcf\xba\x95\x42\xea\x6d\x3e\x5e\x0f\x83\x74\xdc\x83\xb3\x8e\x35\x5e\x01\xdb\x7d\xfa\x91\x25\x1f\xb1\x22\x17\x6b\x53\x33\xc1\xc2\xe3\x39\xf0\xa2\xab\xf9\xa3\x0c\xf8\xb2\xe2\x90\x68\x4d\xf4\xc4\x1d\xec\x39\x11\x00\xf7\xa8\x00\xff\x07\x12\x4b\x31\xee\x2c\x12\xdf\x28\x87\x96\x63\x81\x01\x98\x88\xf9\xaf\xe3\xdb\x85\x3b\x39\xdd\x3d\x9b\x76\xbd\xc4\x00\x3f\xa6\x7b\x67\x66\x90\x98\x76\xde\x45\x2e\x6d\x6d\xba\xda\x0a\x02\x91\x97\x04\x4e\xac\x1c\x65\xed\x33\xfe\x9b\x70\x6d\xfe\x34\xc5\x75\x40\xa9\x4e\x7e\x16\xfe\x36\x7d\x7a\x30\xbc\x54\xbb\x1a\xbc\xb6\xc8\x6f\xf4\xad\x4d\xa3\x0e\x8a\x1f\xe3\x97\xd5\xad\x22\xb7\x2e\x2a\xe1\x00\x06\x8e\x2e\x78\x76\x19\xd7\x39\xd8\x56\x8f\x1f\xdf\x99\xe1\x4f\xf3\xf8\xd0\xdc\x64\x4a\xe2\x6d\xea\xf3\xfb\x47\x24\xc1\x46\x4b\xd0\xe1\x0f\x97\x76\xea\x69\xb5\xee\x17\x2c\x0b\xbf\x34\xa1\xf8\x8e\x3d\x02\x79\x6d\x85\x70\xe7\x1c\xd2\x2a\x53\x62\xb6\x7f\x7c\xec\x9b\x05\xa6\x0f\x6b\xd1\xcd\x2b\x97\x56\x74\xd3\xcc\x4d\x57\x96\x42\xae\xe2\xcb\x6b\x87\x12\xad\x4e\xda\xd2\x94\x5c\x7c\x36\x04\x9e\xed\x0b\x81\x62\x1e\x55\xa8\x5a\x3b\x97\x2c\x11\x5e\xc1\xf4\x86\x26\x2c\xdd\x2c\xdb\x65\x05\xed\xa1\xbf\x9e\xe5\xef\x70\xe1\x19\x3a\xe5\x76\xb1\x01\xa5\xe4\x7e\xb3\x4e\x55\xec\xf2\x4c\x28\xd1\xa7\xbc\xce\xc5\x3c\x41\x8c\x29\x09\xf7\xd9\x8c\xc1\xb1\xb4\xe4\x42\xae\x93\xa8\x73\xba\xaf\x4a\xf9\x34\x31\x0e\x2d\x2b\x1b\x82\x34\x3f\x5d\xe3\xb9\x5d\x5f\x0a\xee\x63\x47\x3e\x23\x15\x65\xe2\x42\x7f\xf2\x6d\x39\x2d\xdd\x05\xc9\xe4\x58\x0b\xec\x64\x0e\x8e\x0e\x9b\xd1\xbe\xa7\xd2\x42\x95\x7e\x33\xa5\x87\x8b\xfc\x14\x74\xb6\x35\xf5\x3b\x5d\xa0\x41\x36\xb4\x0f\xe8\x70\xe8\x8b\x84\x37\xa8\x8a\xb8\x1e\x94\x18\x90\x7e\xa4\x1d\x5c\xd2\x5c\xb0\x42\x17\xa0\xa2\x89\xc5\xf3\xc4\x9c\x6f\x1f\x78\xf0\xc1\x09\x30\x94\x18\xaa\x0b\x2c\x3b\xf3\x0d\x01\x16\xa5\xaa\x1e\x2f\x67\x4e\x81\x37\x03\xab\x8b\x61\xd6\x50\x8b\x3b\xc9\x6f\x6b\xb8\xf6\xc0\x94\xac\xce\x92\x7f\x88\x47\xd0\xd8\xe8\xd5\x3a\x2c\x56\x68\x43\xe3\xd1\x87\xa4\x56\xfb\xd5\x86\x9d\x01\x0e\x9e\xa5\x0d\x76\xd6\x48\x6b\xb0\x7b\x37\x6a\x61\x31\x39\x75\x41\x18\x44\xe5\x29\x8c\x33\x5d\x0c\xdf\xf6\x47\x85\xa2\xf6\x37\xe5\x97\xa3\xac\xe4\xef\xfb\xdb\x36\x80\x96\x2b\x11\x5f\x14\x6b\xff\x3c\x04\xf5\xe1\xa8\x7e\xfc\xb6\x03\xc3\x8a\x2a\xd3\xb8\x7c\x3e\x69\xd2\x8a\x2d\xe6\x81\x5c\xd4\xa2\xf5\x5f\x6c\xdd\x78\xf5\x5c\x30\x75\xb8\x2e\xbd\x34\x5e\xa9\x1a\xd3\x64\xb1\x4e\x07\x90\xc1\xb1\x25\xbe\x9f\x02\x0e\xe4\x58\xa0\x1c\x4e\x75\x00\x7a\xcc\x28\x6d\x54\x77\x09\xf8\x50\xc2\x0e\x08\x31\xca\x2f\x91\xea\x2e\xf4\x6f\x05\xf0\x6d\x1a\xfc\xb9\x42\xa3\xd2\xe3\xf8\x1b\xa8\xc0\xe6\x72\x4f\x68\x8f\x8b\x27\xff\x8e\x14\x86\x5b\x2d\xe7\x25\xd0\xf5\x98\x52\x2e\xe6\xbf\xc2\x1f\x79\x26\x87\xef\xa1\xc6\x21\x35\x23\x81\xc4\x64\x8f\xc5\x2d\xc6\x6c\x04\x74\xdc\xc2\x2b\x75\x6a\x1b\x73\x0c\x83\x95\x5e\x5b\x7f\x5b\x7f\x95\x0e\xe2\x4a\xec\xd1\xf9\xc6\x23\xf7\x81\xc4\x68\x64\x5c\x7b\xe2\xf3\xce\xe2\x67\xdd\x4b\x01\x89\xb7\x4d\x05\x35\x36\x5a\xbd\x81\xbf\x12\x73\xeb\x68\x0b\xb9\x97\x26\xe3\x00\xb2\xf6\x41\x1b\xcb\x95\xa7\x56\x1a\x09\xa4\x66\xd2\x46\xc5\xaf\xdd\x54\x95\xa3\x1b\x3e\xfd\x70\xef\x3e\xd2\xcb\x2b\x91\xbf\x58\x55\x81\xef\x0d\x8e\x8e\x21\xff\x5d\x14\x62\x1f\x7b\x44\x7d\x4b\x08\x02\x2e\x2e\x01\xc9\xab\x00\x67\x84\x4e\x77\x5d\x75\x2a\x49\x98\x99\x3d\x90\xad\x9f\xa2\x72\xcb\xcd\x57\x79\xa2\x98\x46\x7d\x0b\x3e\xea\x91\x5e\xf7\x73\xbc\x64\x82\x06\x89\x49\xb1\x77\x86\x14\xce\xb9\xab\x0e\x88\x17\xc8\x93\x4b\xa4\x45\xab\x27\x3a\x48\x11\xc8\x48\x45\x90\xca\xf3\x09\x45\xb0\x47\xa8\x98\x29\xd5\x7f\x9f\x05\xd9\xa6\x22\x29\x30\x0b\xb2\x70\xc3\xc6\xdb\xae\x89\x3e\x6e\x0c\xc1\x70\x4e\xd0\xb9\xc7\xd7\x6c\xea\xe4\xf8\x7f\xd6\xfb\x5e\x74\xc0\xfc\x93\x42\xf2\xae\x0c\xa0\x8e\x88\x0e\x94\x8a\x40\x25\x25\x26\x13\x43\xfc\xc6\x23\x2d\xe1\xca\x33\x51\x8a\x4c\x2f\xe0\xb8\xf2\x11\x59\x5b\x52\x82\xfd\x47\xaf\x04\xa0\xd4\xfc\x3b\x95\x9c\xe4\x14\xf2\x47\x01\xd9\xe5\x9c\x15\x6f\x3b\x03\x8e\xc3\xd5\xe5\x83\x96\x11\xda\x32\xba\x31\x0a\x32\xd7\x30\xa0\x42\x6c\xda\x4a\x73\xae\x36\x42\xad\x88\xad\x32\x63\x44\xed\xc7\x8a\x5f\xa9\xec\x97\xa5\xef\xf0\x75\x1b\x65\x4c\x6f\xb8\xb9\x7a\xb6\xa8\x80\x49\xc5\x05\x30\xc6\xdd\xa2\x43\x63\xf8\xf0\xfd\x4a\x62\x11\xf9\xc7\xa7\x64\x1f\x9d\x57\xf8\xb9\xc0\x3d\x76\xc0\x73\x5a\xb7\xaa\xf5\x18\x18\xdf\x6f\x34\xe9\xe8\x8d\x8d\xb4\x93\x71\x27\xc5\x90\xcf\x37\xc3\x04\x4b\xfe\x76\xab\xb5\x71\xca\x9e\x35\x59\xa3\x95\xbd\x05\x2d\x00\x56\x3c\x49\x3c\xe4\xe2\x53\xc4\x33\xd7\x08\xf3\xfd\x4d\xd7\x7d\xa0\x62\x1d\xb9\xb3\x62\x0f\x82\xe0\x48\x47\xf6\xba\xb7\xaf\xc4\xdf\xff\x62\xb8\x41\x7d\x13\xd8\x03\x85\x26\xa0\x27\x91\x91\x50\xee\xf4\xe3\x12\x55\xc7\x07\xf7\x1b\xe7\x34\x2e\x8c\x17\x85\x5d\x10\x04\x23\xc0\xcd\x94\x61\x6f\xd4\xd5\x57\x95\xd3\xb4\xca\x60\x99\x8e\xe7\x06\xe9\xda\xcd\xb8\x10\x3d\xe4\xf4\xe9\xa0\xe5\x9f\x8c\x30\xef\xd9\x7f\x35\xd8\xb5\x0c\x8e\x56\x8f\x42\xb0\x52\x25\xd0\x19\xb6\x4e\xcb\xa7\x58\x3b\xfa\xe4\x2c\x09\xc7\x0e\x7d\x2d\xb1\xf2\x22\x43\x48\x75\x04\xb2\x6e\x72\x3b\x55\xae\x61\x6d\x3a\xfe\x53\xe5\xda\xed\x1c\x80\xc2\x16\xb2\x39\x72\xa3\xf5\xc3\x0d\xf3\xb2\x73\x72\x59\xa7\xed\x1d\xe1\x07\xfe\xff\x89\x32\x6b\x91\xcf\xc9\x6c\xc4\x15\xe7\x47\x84\xdf\x89\x10\x8a\x54\x59\x18\x7a\xfa\xc9\x55\xe4\xaf\xbf\x2f\xf8\x9c\xb0\xaa\x5f\x97\xfc\xdf\x6d\xd9\xf8\x3e\xc0\x95\x4a\x50\x48\xf4\xa6\x3f\x4e\x61\x6f\x37\x7b\x49\xcb\xf7\x13\x2f\x5c\x42\x80\xcd\x97\xe7\x1a\xf5\x7c\xc3\xaf\xec\xde\xa2\x37\x8f\xf7\x2d\x89\xf8\xaf\x1f\x01\x61\xf2\x3c\xa7\x24\x1f\x5a\xfe\x9c\x97\xd5\xf6\x53\xd1\x57\xe1\xb2\x19\xb6\x27\xf2\xcb\xc2\x48\x6b\x62\xd8\xc5\x47\x96\x1d\xe0\xd5\x77\xf7\x8c\x7d\xc6\x42\x35\x29\x33\x04\x85\x57\x38\xcf\xbc\x61\xcd\xe9\x70\xb8\xf0\x64\x83\x2e\x4a\x89\x73\xac\x77\x17\xf6\xf8\x1b\x74\x04\xc6\xaa\x74\xd5\x3f\x88\x16\x51\xa6\xba\x54\x5a\x60\xf2\x7c\x33\x3d\x92\x31\x16\x6e\xe2\xe7\xe7\xd7\x21\x0e\x78\xa6\xc8\x01\x81\xa0\x31\xfa\x3d\x7f\x6f\xa5\xc5\x65\x8c\xe5\x54\xd8\x7f\x43\x46\xed\x08\x2c\xae\xb8\x56\x99\xf6\x78\xf2\xdd\x2b\xa9\x64\x7f\x12\x04\xe1\x3d\x3a\xaa\x84\xee\x6e\xf6\x23\x8f\xe8\x3e\x9a\xed\x24\x38\xf0\x57\x19\x9e\x16\xdd\xac\x78\xfa\x3f\x29\x6c\x26\x90\x75\xcb\x5e\xe6\x5e\x3f\x35\xed\x5d\xd7\xef\xb8\xab\x3b\x73\x4e\xba\x74\x9d\x45\xb3\x7b\xf8\xaf\xfa\xa2\xd9\xc3\x04\xfb\xc8\xec\xed\xd6\x02\xbe\x34\xf3\x96\xc0\x71\x8d\xc7\xc6\xd2\x1e\xf4\xd1\x98\x36\xeb\x59\x7d\x75\x63\x38\x44\xb3\xec\x58\x2c\x3a\x9f\x6a\xdb\xe5\xb2\x26\x2e\x0c\x67\x73\x0f\x80\xac\x98\xdc\xea\xc2\x93\x56\xb2\x98\xc1\x11\x05\xe1\x75\x5c\x4b\x4f\x75\xc9\x9f\x35\x6d\x72\xe7\x7b\x97\xff\x89\x9f\x69\x8e\x40\xcd\x7f\x95\xcc\xa6\x33\x7b\xe2\x3f\x7f\x9b\xe2\xe0\xdc\xc5\x78\x89\xda\xc8\xdd\xf7\x72\xe2\x16\xef\x72\xc4\x48\x31\xb0\x89\xbc\x61\xb6\x0c\x72\xde\x91\x6b\xed\x72\x27\xbd\x5c\x40\x4c\x42\xfe\x40\x2b\x2d\x3e\x21\xdc\xce\x25\xa6\x85\x4d\x84\xc1\x24\x64\x7a\x41\xba\x19\xba\x02\x1d\x31\xee\x4b\xf3\x4d\x1b\x29\x18\xe2\xf7\xce\x4c\xa3\x77\x33\xba\x38\x15\x17\xc4\x34\xfd\x63\x70\x24\x63\x54\xbe\xdd\xd4\x7e\x34\x9d\x20\xb6\xfa\xef\x83\x55\xf5\xb5\x7b\x2a\xe2\xb7\xa5\xdb\x0c\x04\x88\x2f\xd4\x50\xbd\x08\x8d\x0b\x0f\x6f\xf5\x2b\xe6\x8c\xe8\xba\x4b\x81\x94\x85\x14\x85\x50\xf9\xd9\xf3\xd6\xa0\x39\x57\x7b\x56\xa6\xe6\x30\x65\x6b\x99\x3c\x41\xed\x48\xaa\x53\xcb\xb0\xa4\xcf\x65\x86\x3d\x2e\xb0\x52\x9c\x35\x5c\xbd\x50\xb8\x45\xc5\xa1\x69\xdd\x9a\x3b\xcb\x78\xe7\x55\xde\xd5\x4f\xd2\xff\x0a\xb1\x36\xe4\x17\xd7\xbc\xc6\x51\x30\x5e\x95\x1a\xad\x2e\x33\xcb\xc5\x13\x29\x7c\x49\xa5\xef\xc5\x52\x6f\x97\x61\x32\xd7\xf8\xfe\x64\x9d\x28\x93\xc3\x01\xed\x34\x38\xb2\x68\xfa\x2a\x79\xc3\x7f\x24\x1a\xed\x67\x20\xfc\xec\xca\xda\xc2\xda\xe1\xdf\x98\xf9\x27\xbc\x3d\x86\xfe\xa5\x28\xdd\x24\xb9\xe0\xf3\xd3\x68\x3c\x58\xc0\x15\x4f\xf1\x45\xa1\xf9\x8f\x72\xc3\xde\x2c\x4d\x29\xd6\xf2\xc8\xad\x39\x8e\x09\xe9\x34\xb5\x65\xcf\xb7\xf3\xf8\xa8\x2b\x2d\xa0\x99\xd6\x2f\xf9\x43\x7c\xcd\x41\x04\xaf\x9d\xab\xe2\x8f\xb7\x6f\x93\x95\x99\x71\x48\x9f\x4c\x42\x4e\x95\x64\x9f\xf2\xc3\xce\x66\xc7\x00\x68\x5d\x50\x02\x3d\xee\xea\x66\x2a\xcb\xe6\x66\x3a\xe1\x1c\x8c\x69\x39\x05\x89\x16\xd4\xd7\xb0\xea\x73\x76\x32\x8e\x87\xaf\xd3\x8f\xe4\xc0\xf0\xf6\x18\x31\xba\x52\xbc\xa2\xe8\x6f\x7b\x45\x8c\x59\xa4\xed\xf6\x27\x9f\xca\x5a\x96\xd5\x82\x06\x34\xef\x9b\x26\x1e\xc2\x8f\x80\xba\xeb\x19\x13\x6e\x9e\x45\x47\xf8\xc0\x0f\x50\xbf\xcc\x4e\xd1\x6e\x19\xee\x7a\x5d\xd5\xff\xb6\x2b\x11\x84\xc2\x51\x8b\x34\x7f\x6f\x02\xae\xd5\x3d\x12\x47\x35\x9a\x8a\x27\x47\x37\xcc\x4e\xc2\x6d\xb2\x3f\xb6\xd8\x95\xa7\x16\x4a\xbb\xc6\x47\xbe\xaa\xeb\xf1\x50\x73\xfe\x20\xe1\x63\x54\xf8\x81\xca\x7c\xfb\x0e\x96\xbf\x8f\x59\x85\x68\xde\xaa\xfa\xe9\x40\x9f\xea\xdd\x0e\x3c\xe7\x29\x85\x9f\x68\x5a\x31\x31\x00\x17\x4f\xa0\x98\x7b\xf3\x85\xd7\x9e\x90\xf1\x32\x5c\xea\xb1\xd1\x98\x68\x35\xf9\x3d\x49\x55\x26\x6d\xb4\x65\x22\x71\x78\x43\x12\xc7\x0e\x48\xc9\xc2\xed\x07\xe5\x1b\xaf\x7a\x4a\xf5\xb9\x73\xdc\xab\x47\x79\x6f\x5b\xd0\x5f\x5a\xfb\xbb\x15\x64\xff\x71\x5a\xb8\x56\x9b\x54\x26\x20\xca\x6a\x92\x18\x2a\xb6\x6c\x6c\x94\x62\x75\x5e\x89\xc8\x07\x3f\xc6\x67\x6f\xe2\x24\x38\x7a\xa1\xf9\x56\xb1\x91\x50\x40\xab\x18\x0f\x04\x7f\xd8\x0c\xdd\xbb\x63\xa5\x17\x52\x58\x3c\xdf\xff\x26\x5e\x62\x51\xd0\x22\xa0\x7f\x61\xa7\xb5\x17\x50\xf5\x24\xcb\x80\xf6\xb9\x03\x66\x45\xc0\xfa\x29\x3b\x5e\x70\x1b\x7b\xe5\xb1\xe7\xd0\x97\xa2\x96\x50\x54\x7f\x75\xf6\x43\xca\xf6\xcf\xf8\x33\xa2\x0b\xb7\x38\x72\xc0\xa4\x38\xb7\x25\x04\xef\x6b\xa4\x84\x72\xe1\xdf\x22\x61\x9a\x77\xf3\xea\x84\x3b\x2c\xe7\x49\x7c\x7c\x28\xe1\x14\xfc\x8e\x01\xe3\x31\x0e\x8c\xcf\x48\x13\x54\x05\xf9\x66\xf9\x89\x57\x9a\x47\xc0\x84\x49\x7d\x65\x75\x44\x13\xfb\xef\xf6\x96\x4c\x62\xc2\xdf\x95\x79\xba\x6d\x90\xd9\x80\xc0\x15\xb6\xac\x51\xa6\x0e\xe3\xec\x41\xba\xba\x5d\x9c\xd8\x3c\xa2\xef\x5c\x13\x29\x88\x8c\x7a\x43\xad\x69\xc5\xc9\x9a\x29\x08\xec\x9d\x34\x99\xbe\x28\x3c\x72\x4f\xe5\xdd\x64\xa9\xd9\xd1\x03\x43\x0b\x57\xca\x8b\x5f\xbe\x1c\x4b\xb3\x2e\x90\xac\x78\xa2\x76\x08\x1c\xd6\x7d\x0d\xbd\x5c\x5e\x63\x88\xbf\x43\x6b\x28\x8e\x33\x8b\xeb\x82\x72\x59\xa5\x3f\x11\x89\xa9\x5c\xfd\x1a\x14\x2c\xe5\x41\x7b\x4b\x0a\x02\xd6\x6c\x73\x70\xc6\x17\x79\xa7\x10\x7c\x48\x32\xaf\xb2\xd2\xbf\xa3\x54\xad\xc0\xe5\xc6\xaa\xe0\x07\x7f\xf1\x14\x4c\xc6\x25\x01\x6e\x20\xbf\xcd\xeb\xf6\x47\x7e\x61\x28\x3a\x6a\x7f\x44\x1f\x56\xef\x32\x85\x04\x15\xa7\xd2\x24\xd3\x70\x0d\x3f\x9f\xea\x6a\xfa\x2c\xb0\x2d\x56\x98\xcf\x02\x73\x00\x04\x44\x5e\x64\x4d\x4e\xdd\xd2\x7a\xb1\x3b\x2d\x11\xef\x51\xc1\x89\x39\xdb\xf7\xb0\xb0\x25\x0f\x77\x38\x4a\xb0\x91\xe8\xd0\x79\xc5\xda\x71\x05\x43\x75\x39\x1b\xc5\x64\xcb\xae\x01\xb1\xc3\xe7\x0e\x54\x87\x18\x7e\x3e\x5d\xc8\x28\xbe\xe8\x4b\x2d\x00\x5a\x1f\xe7\x5c\x9f\x6d\x20\x9f\xb6\x91\xdb\xe4\x10\x37\xf3\x7d\x34\xb2\x34\xb4\xa2\x3d\xe4\x5f\x8d\xf4\x7b\xba\xad\xfb\xe0\x2f\xc2\x60\xad\xd9\x32\x6e\x1e\x56\x85\x47\xc9\x0a\x7a\xf5\x98\x17\xb4\x61\x5b\x71\x0f\x03\xc7\x47\x23\x39\xc6\xf1\xe4\xa3\xf5\x4f\x45\x37\x00\x8d\xa6\x9b\x9b\x7e\xf4\x1b\x6c\xc2\xaa\xcc\x4c\x17\x21\x47\xc8\xe1\x61\x32\x1d\xe8\x25\xca\x46\xcd\xa9\x10\x95\xd4\xee\xdb\xa7\x2f\x31\xc0\xa4\xc4\xd0\x4a\xa8\x38\xff\x1f\x63\x6f\x15\x17\xd4\xf6\xbc\x0f\xd3\x21\x0d\xd2\x1d\xd2\x9d\x52\xd2\xd2\xdd\xdd\xad\xa4\x22\x21\xdd\x20\x29\x20\x1d\xd2\xdd\x20\xdd\xd2\xdd\x29\xdd\xdd\xcd\x7b\xf1\x7e\xff\xc7\x75\xae\xce\xef\x7e\x3e\xb3\xd7\xec\xbd\xf6\xcc\x5a\x33\xcf\x3c\xa3\xa6\x02\x97\xa0\x2d\xcd\x80\xf4\xe5\x87\x96\xe5\xbe\x32\x56\x5c\xc7\xeb\x88\xce\x34\x89\x03\xa1\xad\xfb\x06\x40\xf4\x67\x5b\x08\x6f\x98\x63\x10\x37\x54\xd1\xe1\x67\x62\x26\x05\x52\x55\x41\xfc\x13\xb3\x96\x92\xd4\xbd\x50\xd3\x77\x21\x46\x4c\x44\xff\xf0\xd0\xb8\xa7\xa7\xb1\xd3\x5f\x86\x3e\x0a\x23\x60\x66\x5a\xe6\x59\xc3\x1e\xba\xde\x67\x2a\x4c\x7c\xd9\x60\x39\xd7\xb6\x20\xb0\x2f\x40\xf1\x13\x7f\xf0\x6a\x55\x04\x79\x68\x12\x89\x9c\x31\xc8\x5b\xc9\x91\x73\x87\x67\x2c\x77\xfa\xe7\x34\xfc\xa9\x78\x0e\x74\x87\xe3\x9c\x78\xcf\xcc\x0f\x58\x0f\xe1\x41\xa2\x1f\x4c\x0d\xc9\x63\xc2\x67\x69\x07\xf1\x11\xfe\xcc\x2b\xb6\x33\xfb\xbb\xeb\xc8\xde\x97\xb8\x2a\xa1\x36\xa1\x9b\x7e\xcd\x57\xe9\xe0\x28\x1e\x56\x1a\x77\x36\x8e\x31\xdc\x37\xe1\xf1\xef\xd4\x31\xf9\x50\xf2\x6d\xac\x49\xf1\x3d\xc9\x6a\x72\x2a\x7b\x5b\x9b\x3f\xfa\xfd\x12\xfb\xfb\xc2\x2a\xd0\x5b\xf3\x58\x7f\x7d\xcd\x74\xae\x46\x08\x56\xcb\x0c\x5b\x25\xfc\xbe\x9e\x65\x97\x6f\x71\x63\x73\xc8\x26\xa3\xba\x9c\x0e\x10\x53\xb5\x55\xf5\x8c\x6f\x5d\x12\x23\x4c\xeb\x94\x47\x47\xf2\x85\xb7\x51\x69\xee\x56\x16\x91\x6a\xfc\xba\x2b\xac\x18\x86\xe0\x3d\x22\x01\x33\x7f\xac\x33\xf2\x2a\x11\x87\x7e\x23\x3f\x15\x54\xfd\xb2\xf9\xb4\xba\xeb\xbd\xd5\x23\xcc\x52\xc3\x33\x09\x19\xb5\xf6\x46\xb4\x42\xce\x00\x94\x4f\x5d\xe0\xf8\x1a\xda\xc5\x39\x8f\x46\x85\xb1\x4c\x28\xb4\x24\x6e\xd2\x28\x9a\x98\x3f\x2f\xdd\x1a\xbe\x36\xef\xc5\xf0\x09\x78\x0b\x85\x68\x79\x37\x68\xf9\x23\xf1\x70\xb2\x06\x8d\x38\x8c\x2c\x54\xe3\x73\xda\xf9\xad\x95\xa4\x74\x5f\xea\x23\x4e\x7f\xc3\x79\x0e\xd0\x36\x38\xbe\xa0\x83\xe7\xca\x65\x6c\x78\x27\xfd\x24\x75\x74\xef\xa8\x5a\x58\x17\x63\x9e\x56\x31\xf3\xe7\x17\x55\x1a\x3a\x6c\x06\x77\x31\xf0\x52\x4b\x11\x65\xbf\xcd\x7c\x3c\xb6\x62\xb8\x78\x90\x82\x26\x10\xeb\x94\x9a\x7f\x03\xc5\xfe\xf5\xfc\xad\x52\xc2\xd8\x78\x5c\xa7\x2a\x38\x37\x46\x9f\x37\x15\xaf\x70\xb6\xc2\x3e\xa2\x94\x21\xa9\x98\x6b\x2b\x29\x8f\x84\x5a\xa7\x3d\x61\xc7\x6d\x6a\xf2\xee\x4f\x25\xa2\x16\xc8\x7b\x4b\xa5\xa1\x2e\x2e\x44\x99\x52\x7f\x1d\x59\xde\x0b\x53\xa0\xbd\x02\x95\xbb\x71\x88\x90\x2a\x2e\xe9\x71\x1a\xba\x67\x1b\xba\x09\x00\x0c\x0c\xaa\xde\xd8\xcb\xd0\x1a\x86\x16\x44\x87\x12\x32\xb2\x91\x5e\xde\xee\x3f\xe7\xaa\x79\x31\x54\x62\x7d\x50\xc7\x18\xa8\xa4\xa4\x05\x3e\x6a\xff\xcf\x54\xc1\x40\xef\xba\x80\x62\x94\xd7\x36\x68\x57\x07\x7e\x65\xca\xe7\x6e\xda\xda\xf0\x92\xc1\xa9\xc9\xc5\x47\xa5\x5c\x00\xc1\xc4\x4d\x4c\x47\xa1\x83\x1b\x2d\xce\x03\x0d\x14\x56\xc3\x5b\xc9\xf5\xb9\xdc\xc8\x3b\xc3\xe4\x51\xa7\xd6\xe5\xf8\x5a\x51\x6e\x03\x60\x24\xf9\xe3\xc4\x63\x68\xd7\x58\x8a\x2c\x79\x5e\xb1\x75\x60\x68\x62\xf4\x7c\x1b\x46\xca\xa6\x4f\x9e\xac\xe3\xa5\xb3\x4a\x26\xca\x37\xb0\x13\x9c\x8e\x20\xdc\x9a\xe4\x6b\x21\xff\x88\x13\x8e\xc1\xb9\xea\xbb\x49\x91\xaa\x44\x6a\x51\x8a\x85\xa2\x29\x7b\x17\x84\x0d\xc2\x6e\x00\x34\xb3\x1f\xa8\x84\xb9\x1a\x17\x8d\x64\xe2\xee\x86\x56\xac\x12\x37\x8b\x3c\xf6\xfb\x91\x35\x5e\x6b\xce\x79\xa0\xf0\xc7\x15\x0c\x25\x98\xcc\x0f\x4d\xb2\xf7\xaa\xfc\x8a\x0c\x7b\xee\x67\xd4\x8f\xa3\x45\xb1\x83\x80\xa7\xec\x41\x25\x98\xba\x62\x63\xd1\x4b\x77\xae\x8b\x1a\x0f\xb6\xb7\xb3\x41\x6d\xc3\x15\xf3\x24\x5d\x10\x9c\x3b\x23\xc2\xda\x09\x43\x89\x78\x95\x23\xe1\xb6\x19\xb9\xa8\x68\xff\x98\xc9\x7d\x06\x70\xe9\x17\x71\x8f\x8a\x2c\xab\x44\xbd\x78\x85\x10\x3e\xf4\x5f\x4a\xc8\x15\x0e\xd2\x4c\xe3\x3c\x6a\xad\x50\x6d\xdb\x70\x2a\xd0\x05\x5e\x00\xa5\x3a\x81\xf7\xa8\x85\x50\x57\x9f\xae\xcc\xfa\x94\xf5\xed\x3f\x8a\xab\xda\x6e\xdc\xb8\xea\x85\x45\x19\x36\xf0\x69\xfc\x0e\x5f\x04\x68\x5f\xdd\x5c\xb3\xd7\xe9\xe9\x29\x74\xac\xf1\x1b\x83\x57\x1a\xcb\x76\x6c\x39\x16\x05\xdb\x35\x7a\xb4\x5b\xc3\x86\x51\xcb\x3c\xa8\xcd\xc0\xed\x6f\xe3\xcc\xd3\x85\x19\xc7\xe2\x7c\xfe\xe9\x43\x7f\x33\xa2\x54\xb6\x4c\xf5\x0c\x69\xc5\x8a\x97\x56\x05\xa4\xe0\x53\x61\xd3\x9e\x01\x00\x84\xfa\x88\x65\x7c\xe5\x43\x61\x39\x68\x3d\x5b\xb6\x72\x2b\x15\x38\x9c\x39\xed\xf8\xbe\x7f\x3d\xd5\x44\xe8\x89\x68\x9b\x7b\x0f\xb8\x85\x90\x99\x93\x94\xcf\xb3\x26\xc8\x18\xc1\xbd\x35\x42\x2f\xf6\x61\x7b\x45\xb4\xba\x55\xda\x01\x87\x75\x28\x76\xa0\x1d\x90\x71\x07\xf4\x9e\x34\x78\x72\xcb\x46\xbf\x8c\xf0\x10\xa3\x98\x5e\x65\x29\x7e\x36\xa0\x77\x22\xcb\xe6\x7b\x31\x93\x44\xff\x1c\x17\xbf\xcf\x2d\xf4\x11\xac\x8f\x19\x25\x4f\xa0\xa3\x44\xe0\x98\x39\xea\x07\x7a\x97\x51\x79\x23\xba\x4d\x8a\x8f\xa5\xa4\xfc\xf9\x32\xed\x29\x37\xd1\x48\xa6\x08\xa4\x2b\xaa\xa6\x5d\x95\x58\x55\x05\x4f\xef\x13\xfd\xec\xd7\x0b\xb0\xa5\xb4\x93\xf5\x76\xaa\xdc\x13\xe2\x62\x98\x37\x24\x21\x95\x7a\x81\x7d\x3a\x38\x1a\xc7\x0f\xb3\x58\xfc\x5b\xc7\x62\x8b\xa2\x45\x97\xf9\x92\x9c\x81\xb8\xb5\xbb\xb1\x14\xcd\x78\xf3\x7d\xc5\x8b\xeb\x29\x30\x4f\x73\x8e\xfb\xf2\x97\x08\xd3\x37\xc1\xba\x95\xa5\x15\x06\xbe\xd4\x24\xbb\x5d\xf8\x4f\x5a\x9d\x92\x4a\xfd\xad\x67\xf0\x1f\x3f\x62\x30\x03\x05\x12\xf7\x1a\x81\xd9\xd5\x10\xf2\x62\x24\xf6\x29\x9f\x7c\xcb\xcc\xe6\x41\xeb\xc0\x3f\xd0\x8b\x72\x59\x10\x7f\x8c\x10\x03\xa2\x39\x80\x2d\xb5\x43\x22\x0a\xd9\x27\x26\xdc\xae\xfa\x19\x69\xa6\xfc\xb9\xe5\xeb\x8c\xa8\x07\x76\xce\xf0\xcf\xd9\x23\x0e\x6f\xa6\x59\xdd\xdc\x7d\x70\x9a\xa9\xfc\xe7\x5a\xff\xab\x13\xa8\x1b\x83\x04\x3f\x8f\x6c\x5c\xad\x9e\xd1\x2a\x85\x66\xaf\x26\xf1\xa3\xcd\x0b\xac\xfd\x3f\xed\x70\x7f\x9f\x3f\x7b\xa0\xda\xe8\xa6\x55\xfc\x03\x42\xac\xf1\x1b\xf5\x6b\xac\x6e\xe1\x8a\xc5\x53\x3a\x36\x6c\xa6\x0a\xac\xfb\xfa\x91\x09\x42\x15\x40\x29\x62\x02\x7a\x6a\x62\x98\x2f\x7f\x4f\x7c\x75\xe2\x11\x52\xe3\x20\xb7\xd2\x47\xc1\xfc\xc4\x54\xdf\x4b\xe9\x47\xc3\x30\xd7\xa3\xfd\xbf\x4a\xcb\x9a\x99\x70\x3d\xfd\x3b\xde\x28\xf8\x17\xc1\x64\x2d\x8e\xb3\x34\x46\x70\x86\x96\x6f\x4e\x30\x2a\xd0\xc3\xa0\x66\x54\x99\x82\x39\x08\xed\xae\xac\xa6\x0c\x2a\x4d\x44\xc1\xaf\x02\x03\xc7\xbf\xf4\xd4\x50\x7e\xc8\x90\xf3\x8b\x94\x5f\x6d\xeb\x09\x55\x8a\x49\x3b\x82\x93\x31\xab\x09\x52\x93\x76\xaf\x5b\x7f\xed\x22\x36\xb4\x56\x2d\xd0\x7e\x7f\xde\x4c\xf2\x0a\x57\x1a\xe2\x60\x8c\xd2\x8c\xb4\x3d\xfa\xa0\x00\x7c\xa9\x14\xf4\xd1\x80\x5b\xe2\x9c\x4f\x61\x74\x37\x6d\x28\xe4\x49\x65\x7d\x72\xe5\x4e\x0b\xc1\x29\xce\xfb\x57\x17\x5c\xe3\x78\x29\x00\x63\xd4\x78\x24\x5f\x99\xc2\x27\xe7\xe4\x5a\xb4\x5f\x4e\xb1\xa8\xa6\x0a\x15\xd3\x66\xc4\x13\xb0\x7c\xaa\x70\x0e\x89\xda\x94\xb5\xa1\x00\xe9\xf1\x65\x47\x20\x47\x54\x08\x46\x96\x01\x52\xf4\xea\xe8\x8c\x43\xe2\xd5\xf5\x35\x2d\xf6\xe1\xb8\x3c\x97\x72\x99\xaf\x66\x29\xb6\xd7\x3f\x19\xe6\xff\x8a\x11\x7e\xe2\xc2\x14\xff\x9a\xc3\xb4\x30\x38\x7e\x4b\xe4\x00\x61\x49\x7a\x92\x7c\xc9\x76\xce\x60\xa1\x34\xea\x45\x4d\xc5\xa2\x40\xa3\xf3\x40\x24\x7a\x56\xd0\x09\x92\x36\x25\x6d\x9a\x1b\x2c\xb6\x7e\xe9\xfd\x6c\xd8\xa1\x77\xe2\x80\xe2\xa5\x8c\x97\x74\x73\x79\x2f\xbc\x31\x47\xe5\x5c\x61\x22\xcd\x0c\xce\xf1\x24\x76\x87\xc3\xbd\x09\x7b\xb4\x8f\x83\xbe\x3d\xf4\xdb\xe1\x8e\x8d\x8c\xc8\x58\xed\x61\x69\x34\xb1\xae\x89\xc3\x84\xab\x38\x03\x61\xa6\x0a\x73\x96\x14\x04\x34\x54\x76\xa7\xb4\x53\xa7\x69\xcf\x98\x32\x7b\x3a\x73\x85\x9f\xeb\x1f\x7e\x5f\xb4\x43\x5d\x99\x71\xbe\x55\xfe\xa7\xbb\xfa\xbf\xfe\x7f\x3f\x71\x48\x1f\x18\x08\xa0\xe2\x11\x17\x50\xb2\x62\xd8\xe9\x2a\x35\x82\x76\xcf\x4e\x61\x5f\x1f\x54\xad\xa0\x82\x8e\x57\xa0\xf0\x86\x33\x7e\xd2\x69\xcf\x06\x3e\x15\x88\xc2\x9d\xe6\x61\x93\x57\x03\x5a\x24\xb8\xe6\x6a\x4b\xec\xd3\x19\xce\x97\xe5\x56\xed\xbc\x11\xe9\x31\x61\x47\x8d\xcc\x8a\xb2\xe7\xc0\x72\x55\x49\xd8\x7c\xdf\x30\x9c\x0b\x4e\x62\xe6\x46\x3f\xd3\x12\x90\xa3\xf5\xb8\xba\xb6\x11\xa4\x88\x53\x9e\x44\xab\xce\xdd\xfe\x12\x06\xef\x8c\xdd\xee\xc8\x45\x9c\x1b\xdb\x3f\x33\xdf\x0f\x6b\x4f\x52\xc0\x0a\xdd\x1d\xde\x08\x72\x1c\xeb\xf9\x42\xb6\xf7\xc4\x0d\x05\xec\x5e\x4f\xfe\x0f\xd6\x71\x34\x91\x54\xff\x2b\x37\x8d\x71\x19\x8e\x89\x5e\xda\xaa\x97\x29\x7f\xab\xf4\xc2\x5d\x23\xa6\x3c\x05\xba\x2b\x5c\x98\xee\x03\xaa\x9f\x78\xa4\xfe\x8d\x6a\xdc\x5f\xcb\xf8\xca\x56\xd9\x79\x15\x0f\xa5\xe4\x52\x0a\x25\x86\xb6\x04\xe1\x24\x12\x9a\xbd\xb6\x5c\x23\xe2\x3e\x7f\xb4\x98\x5c\xee\x7a\xc1\xfe\x6b\x59\x7a\xd7\xdb\x32\xe4\x1d\xc6\x35\x87\x53\x8f\x13\x94\xf9\x5e\x9e\x3e\x23\x61\x06\xa9\xcf\xe4\xed\xb9\x4f\x15\x30\xec\x57\x8d\xdb\xc0\xbe\x95\xdf\x27\x52\xf5\xc7\x29\x8f\xa9\xfb\xf1\x10\x35\xb4\x6e\x47\xcf\xdf\x70\x71\x36\xd0\xb3\x2d\x34\x76\x5a\x14\x6c\xa4\xb1\x0f\x40\xdd\x12\xd4\x83\x37\xc8\xe5\xeb\xfb\xf8\xa5\x66\x30\x47\x36\x5d\xdb\x0e\x2b\x06\xba\xcb\x9b\xd1\x83\xe6\x2e\x84\x11\xfa\x20\xd6\x21\xfe\x4a\x0e\xfb\xa3\xf7\x06\x45\x6a\x57\x61\x93\x46\xd2\x70\x53\x68\x51\x31\x13\xef\xd6\x48\xcc\x31\xdc\xcb\x3c\x60\xb4\xca\x60\xae\xa7\x01\x7f\xb8\xe3\xf1\x4d\x3e\x73\x85\xf6\xbc\x6a\x6f\x40\xeb\x5a\xce\x28\xd7\x6d\x2f\x41\x23\x95\x4e\x4b\x6b\x42\x1f\xf9\x7c\x53\xf4\x07\x20\x12\x7d\xf3\xd3\xf5\xec\x91\xab\xca\x7c\xfa\x11\x20\x17\xf5\x33\x3d\xd5\xca\xa6\xd6\x93\x78\x01\xa9\x6e\xef\x44\x55\x47\x32\xda\x13\xe4\xb9\x59\x68\xcb\x08\x64\x73\xba\xbd\x71\x45\x91\xd1\xdf\x23\x69\xfc\x5d\xba\x6c\x18\x63\x0d\x11\x11\x8d\xf1\x61\xd9\xb1\x4b\xe4\x12\x9c\x34\x88\xd4\x38\xac\xf0\xb4\x13\x21\x76\x4a\x7e\x14\xdc\xf1\x76\xa3\x8a\xc6\x12\x12\x37\xc0\x12\xd5\x5b\xc0\x71\x43\x3b\x2d\x08\xf3\xd5\xdf\xe7\xe7\x27\x4e\x63\xc5\x45\xa0\x0a\xcc\x36\xd4\x98\x15\x39\x7c\xb6\xef\xe6\x3c\xe2\x52\x84\x29\x67\x12\xf7\x6e\x1e\x4b\x5c\x5a\x00\x92\x6c\x2b\x85\x3d\x3a\x5d\x07\x5d\x9f\x0e\x85\x4e\xa8\x47\xfd\x82\x3a\x8c\x0d\xd6\xc8\x6a\xa4\xce\x16\xab\x54\xe6\x1c\x9d\x54\x0b\xc4\x40\xfa\x12\xe8\x61\x67\x4e\x22\x4e\xb1\x07\xa4\xaa\xad\xc6\x74\x6f\x0a\x8d\x82\x50\x08\xa6\xc3\xe8\x85\xda\xdd\x50\x62\x47\x91\x5e\xa0\xb3\x38\xbb\x49\x95\x1a\x93\xbc\xba\x57\x92\x70\xf3\xf8\x7b\xaa\xf4\xe0\x37\xc7\x2f\x2e\x0a\x79\xa7\x4e\x3f\x38\xce\x35\xaa\x0d\x2a\x35\x00\xa5\xb5\x9b\x70\x48\xa1\xba\xe3\xf7\x63\x5c\x56\xbb\x2b\xbd\xae\x9a\x65\xd5\xea\x90\xe9\x43\xf2\x32\x21\x38\x8f\x59\xec\x3f\x0b\x9e\x80\xd3\x05\xec\x63\x37\x1c\xe9\xde\xb8\x92\x08\xaf\x69\x55\x68\x85\x96\x0d\x7d\xca\x8e\xce\x50\xe4\xac\xfe\xe5\x38\xc5\x4f\x41\xff\x7f\x95\x3d\x7f\x1f\x77\xd1\xfd\x28\x29\x7d\xa5\xaf\x35\x12\xfb\xbc\x90\x03\x87\x5b\x3d\x7a\xa9\x10\xc8\xb6\xf0\x21\xa8\x9e\x89\x47\x0f\xe4\x44\xf9\x75\xbf\x0b\x75\x25\xf1\xcb\x0b\x29\x18\x16\x1e\x45\xa2\xb4\xb5\x1e\x3a\x83\xfd\xe3\x49\xe2\x83\x31\x7e\x2f\x84\x3c\xea\x71\x30\x58\xe2\x41\xa9\x6f\x12\xe8\x27\xd9\x94\xec\x58\x4c\x83\xe0\xa6\x6d\x57\x3e\x13\x7e\xd1\x4d\x4b\xf2\xf7\x51\x0a\x14\x72\x43\x68\x07\xef\xd8\xb6\x51\xad\xce\x9b\x41\xfb\xf2\x5f\xfc\x2f\xb0\xdb\x45\xb6\x5e\xd0\xa6\x52\x69\x0c\x69\x07\x4f\x45\x18\xee\x64\x11\x2b\xbb\x80\xc6\x8f\x0c\xf6\x4b\x39\x59\xee\x4f\x30\x5d\xad\xa4\xbe\xc3\x3d\x9b\x4f\xa9\x2f\x3b\x22\x03\x9f\x32\xef\xb0\x11\xf4\xb3\x33\x9d\x96\xc0\x16\x89\xa8\x90\x96\x2c\xb6\x77\x28\xe9\xb6\x35\x3d\x89\x1e\xa1\x42\xb2\x91\xc7\xd1\xef\xcf\x46\xb8\xaf\x9d\xe5\x62\xbd\x47\xeb\xcb\x01\x46\xb8\xa4\x51\x0c\xaa\x98\xcc\x9d\x1b\x4c\xde\x4b\x2b\x3e\x49\xa7\xaf\xba\xea\x5b\xfd\xda\x66\x85\x8d\x0f\xdf\x78\x50\xf2\xcd\xd8\x7d\x01\xa5\x09\x01\xb3\x76\x5c\xcd\x7d\xa9\x46\xb3\x6b\x0e\x85\xbf\x87\x0f\x60\xdb\xf7\xae\xa5\x9a\xa4\x0b\xf7\xef\xae\x0a\x64\x14\x8f\x1c\x81\xff\x34\xc1\x2a\xeb\xeb\x49\x01\x4b\xc1\xfb\x0c\xbb\x6e\xd9\x09\x2d\xf3\x76\xba\xdf\x78\x6b\x0c\x6d\x87\x6b\x21\x0c\xd1\xa7\x9e\x09\x80\x52\xf4\x0d\x6e\x8f\x07\xde\xec\xc0\x3f\xf0\x6a\x05\x6f\x8d\xe6\x96\xbc\x47\x4e\x24\xff\x28\xb4\xf6\x9d\xff\x24\x54\xa0\x58\x8f\x00\xca\x11\xdf\x5f\x4e\x6f\xbf\xa7\x5d\x79\x94\x2d\x26\x66\xd8\xcb\xf6\x0a\xb8\xd7\x17\x17\xda\xb6\x46\xd5\x15\xcb\x1f\x7d\x39\x17\x22\xdc\x00\x94\x2a\x4c\x66\xb6\xed\x7b\x89\x86\xf0\x7e\xa9\x29\xb5\xd1\x4a\xce\xf4\x53\xa3\x67\x40\x12\x37\x09\xc8\xa4\x22\x9e\x99\xde\xf9\x09\x0c\xaa\x30\xb5\x65\xcb\xac\xfa\xb0\xf6\x26\x9a\x91\xd5\xff\x4a\x82\x4d\xab\x4f\x84\x6f\xa1\x35\x60\xda\x32\xba\xfc\x24\xa5\xc6\x7b\x4b\x16\xf8\xa5\x02\xf0\x6d\xa1\xb1\x52\xad\xf2\x9d\x99\x27\x71\x91\x70\x48\x09\xbd\x48\x7a\x11\x09\x19\xb6\xc4\xb0\xdb\x7f\x9f\x2a\xf9\x8a\x10\x01\x89\x40\xa5\xda\x06\x03\xd9\x1f\xcf\x56\x0b\x86\xa2\x5d\xe3\x0f\x57\x52\xa8\xf1\xef\xb3\x05\xa5\xc6\x37\x44\x6e\x3e\x0f\xb9\xda\x02\x7d\x4f\xb5\x76\x67\xaa\xf6\x9a\xb1\x59\x7b\x0a\xeb\x34\x3d\xc6\x0c\x4c\x79\x74\xbd\xd3\xa3\x0c\x75\xc6\xcb\xde\xd4\x3a\x61\x12\xdc\x20\x6f\x07\xf9\xb8\x24\x87\xd7\xcb\x15\x39\x7f\xa0\xbb\xc5\x81\x12\xf3\x58\x36\x3f\x62\xfb\x68\x8d\x66\x81\x1d\x1c\x6f\xb5\xd1\xa3\x2a\x88\x69\x11\x11\x2d\xd4\x39\x76\x0b\x11\x4e\x3c\x90\x20\x0e\xcb\xac\x2f\x72\xf7\xf4\xa5\x7e\x63\x74\x2c\xb4\xb7\xcd\x35\x60\xde\x33\x21\xf5\xf7\xf9\xfa\x5b\x54\x54\x55\xf3\x4e\x8c\xcc\x06\x13\x0c\x6e\xd5\x08\xdc\x41\x45\xb3\xf4\x8b\x7f\xa4\x8e\x43\xe6\x23\xdf\xb9\x2c\xf1\x71\x81\x17\xdc\xc4\x26\xdd\x2f\xa9\x29\x69\xd0\x7c\xc9\x3e\x2c\xb5\xde\x34\x58\xa9\xdb\xc6\x34\xba\x4b\x6d\xaf\x1e\x6c\xe0\x9c\x7a\x9a\xce\x80\xe7\xff\xc8\x31\xbb\x0f\x44\x34\x09\x7a\x0c\x3f\xb4\x8a\x77\x7e\x1a\x7c\x74\xe1\x78\x49\x2c\x2d\x46\x66\x8d\x6d\x88\x82\xaa\xeb\x07\x10\x6d\x5d\x6a\xaf\xf7\x91\x02\x0a\x2d\xa8\x2d\x35\xdf\x1c\xe1\x23\xd2\xd4\x1a\xbe\x35\x20\xda\x54\x46\xb7\x3e\xaf\xdb\x1e\x14\x61\xb4\xbb\x2e\xff\x5f\x57\xc6\x24\xac\xcd\x52\xe1\x94\x47\x60\xac\x88\x9b\x8a\xb5\xe1\x6d\xe7\x45\x4a\x0c\x69\x0d\x02\xc9\x51\xb5\x55\xdf\x61\xbe\xa1\xca\x90\x9f\xb8\xd7\x73\xdb\x03\xd8\x95\x51\xd8\xad\x8d\x40\x46\x99\x6c\xb5\xad\x8d\x73\xeb\x72\xef\xcb\x1e\xeb\xbe\x41\xf4\x0a\x41\x40\xda\x60\xb7\x7c\xe4\xb7\x02\xf9\x37\xf0\x30\x9e\x81\xea\x77\x7e\x40\x9c\x4a\xeb\x4c\xdb\x66\xa3\x72\xb4\x29\x99\x2f\x83\x1a\xcd\xae\x7d\xd2\xba\x97\x33\x85\x13\x96\x93\x0a\xb4\x49\x46\x40\x35\xdd\x42\x63\xbc\x0c\x52\xa3\x38\x77\xab\x62\x8b\x0a\x52\x1d\x16\xea\x51\xe1\xb2\xdd\x10\xc8\xe1\x39\x6f\x6f\x33\x80\x19\x91\x05\xde\xd0\xfe\xa0\xfe\x32\xfa\x49\x37\x2b\xba\x3f\x56\xac\xf7\x6f\xcc\xfb\x6a\x85\x8a\xfc\x6f\x23\xdf\x40\xca\x22\xbf\x1f\x4d\x02\x6b\x12\x7a\xa4\x4e\x79\xc7\x63\xf9\x5d\xd6\xb4\xa2\x16\x07\x3f\x2f\x79\x33\x10\xe0\x04\xb6\x66\xf8\x50\x7f\xf9\x27\x96\x23\xaa\x80\x99\xeb\xd6\xcc\x00\xa8\xe0\x32\x85\xb2\xc6\x74\x8d\x28\x29\xfe\x77\xe4\x5d\x44\xf6\x04\xf0\x6c\xaa\x6c\x12\x7c\x7f\x14\xcb\x25\x7c\x2a\xc1\x1e\xa1\xc5\xb7\xfe\x06\xae\x30\xed\xba\xc3\x9b\x04\x21\x67\x84\x98\x52\xce\x4e\x2a\x69\x75\x70\x42\xca\xbb\x7d\x8d\x94\xc7\x4b\x26\xe0\x65\x74\xa6\x78\xb1\x04\x4d\xf8\xe6\xca\x25\xb8\x8e\x25\x88\x2e\xa3\xbf\xd1\x2e\x49\x0f\xcf\xc4\xc2\x00\x83\x5b\xa7\x18\xc3\xff\xe6\xef\x17\xbb\xe2\x4f\xf2\x95\xe3\x43\xd8\x81\xf9\x50\xc0\xbb\x96\xce\xf4\xe5\x17\x96\x8e\x87\x81\xfe\x58\x26\x3f\xdd\x35\x14\x37\x36\x26\x2b\x48\x85\xe0\x5c\x34\x93\xa1\xef\x52\xa8\x3f\xbc\xb1\xf3\x59\xa3\x48\x99\xee\x3b\x79\xff\x0c\x97\xae\xc6\x1f\x7f\x01\xd8\x04\x0b\x3f\x80\x09\x83\x32\x82\x17\x82\x4b\x55\xa0\x4c\x11\x62\xfc\x36\xde\xe4\xe9\x93\x06\x62\xcc\x1b\x98\xba\xe8\x31\x56\x12\x99\x3e\xae\xd3\x47\x47\x40\x29\x0a\x1d\xe4\xed\xc1\xea\xb0\xb7\x10\xfd\xc2\x9f\xb4\x9b\x49\x21\x25\xfd\x7e\xae\xb2\xf6\x8c\x94\x9c\x1d\x9f\xc0\xc1\xde\x23\xa0\x22\x2e\xa6\x5c\xb0\x35\x9d\x89\xa8\x22\xa2\x7b\x83\xfe\x35\x4a\x4c\x2d\x59\x2a\x01\x42\xbb\x64\x91\x9d\xf0\x6c\x2a\x52\x2a\xe1\x5f\xd4\xc4\xf8\x0a\x0b\x3d\xf5\x86\xb1\x81\x5e\x28\xf5\xe1\xbf\x11\x69\x9d\x85\xbf\x8f\x67\x35\x19\x2a\x85\xd2\x6d\x6a\x43\x2c\x6a\x77\x63\x82\x7b\xa5\x55\x8a\xef\xd7\x3b\x57\x44\xc3\xaa\x99\x2e\x0d\x88\x59\x5d\xa8\x67\xc7\xc7\xd3\x4b\x5d\xbe\xfb\xfd\xab\xb0\x57\x54\xaf\x2e\xdc\x01\xec\xcb\xbd\xf7\x74\x16\xdd\xf4\x7b\x5f\xd4\x26\x78\xee\xca\xc4\x31\x8f\x09\x6c\x65\xda\x77\x26\x1a\x72\x54\xb4\x92\xa4\xbd\x43\x20\x33\x11\x42\xb1\x93\x19\x4b\xfb\xd4\xbd\xa5\x4f\xc6\x7c\xdf\x90\xb1\x85\x79\x21\x2a\x87\xeb\xbd\xa8\x60\xba\x5e\x2b\x1e\x64\x60\x7b\x2c\xe0\x86\xc2\xe7\x19\xf2\x94\x3c\xf0\x49\x27\x65\x70\x9d\x3f\x9e\xd0\x22\x06\xf8\x38\x05\x09\xa4\x9f\x7f\x73\x75\xcd\x0c\xa5\xef\x5a\x06\xfa\x62\x52\x9f\x6f\x88\x51\x82\x78\xa6\x35\x08\x9d\x58\x5a\x57\x63\x56\x5d\xd3\xe5\x26\xe7\x8d\x2e\xe1\xea\xa5\xbf\x5e\x95\xe6\xf1\x01\xac\x11\x0d\x18\x42\x18\x2e\x25\x2e\x36\xf2\xbc\xce\x1d\x1d\x67\x79\xa8\xf0\x98\xb3\x3d\x70\x5a\x07\x57\xc2\x2e\x34\x3b\x22\x7e\x2b\xb0\xff\x82\xf6\xbd\x1b\xaf\x61\x7a\x53\xfd\x15\x2f\xb6\x39\xcf\x75\x20\x53\x34\xe0\x2d\x61\x8a\xc9\xdc\x2d\x41\x0d\x09\x6f\x6d\x9e\x67\x28\x2a\x30\xdf\x2d\x9a\x5f\x97\xd5\x6c\xb2\x9e\xf8\x85\x5c\x73\xd3\x84\x90\xcd\xa3\x88\xc4\xb0\x64\xef\xe8\x2b\xb2\x1d\xad\x37\x86\x41\x36\x50\xe8\x6e\x45\x90\x99\x2c\xbc\x23\x0f\xd1\x99\xa5\xf0\x6d\xfc\xae\xf9\x4a\xd3\x34\xc4\xf4\x39\x37\x81\xfd\x40\xf9\xc6\x1b\x69\x58\x97\x1d\x30\x9f\xee\x3b\xae\x4f\x30\xb5\xf9\xb0\x74\x14\x3e\xee\x48\x57\xa3\x8c\x8a\xff\xa1\x81\x91\x0f\xf4\x6a\xa9\xe5\xed\xa1\x81\xe3\xbd\xe1\x5f\xa5\x21\xa9\x42\x3c\xbb\x1c\x13\xfa\xc1\xe6\xef\xcc\xa2\x8a\xd0\xec\xb6\xe9\xba\x87\xde\x6e\xfd\x30\x27\xcc\xc1\xdc\x95\x95\x30\xb4\xfc\x2b\xd9\x9b\xe4\x77\x07\xb1\x68\xe8\x9c\x33\x70\x8a\x26\x01\x11\x5c\x4d\x2b\xed\xb0\x71\x42\xf0\x4a\x45\x6e\xfb\x71\xf4\x90\x3e\xfe\x09\xf8\x50\x8d\xbd\x0a\xb2\xf6\x89\x6c\x3f\x71\x0f\x8e\x02\xce\xdc\x3b\xd6\xb9\x1b\x3e\x33\xdf\x2f\x77\x33\x20\x3c\x66\xe4\x2f\x4b\x41\x0a\x80\x35\x59\x25\xb9\xd0\xd1\x91\x47\x3d\x42\x68\x7d\x72\x0e\xd7\x10\x0c\xd6\xc1\xf8\x28\x5b\xe5\x06\xff\x95\x4f\x5f\xbb\x28\xb4\xc3\x56\x81\x4d\xfd\xd9\xfc\x8c\x4d\x59\x7a\xb2\x48\xc9\xc0\xf6\x85\xea\x56\xa9\x89\x29\x57\x3b\xe0\xeb\x3b\x8c\xd5\x32\xf3\xec\x42\x06\x6c\xdc\xc4\xbf\x4b\x7d\x90\xa9\xbc\xc6\x3c\xa4\xbb\xff\xe6\x6c\x25\xa9\x4f\x16\x14\x31\x38\xbe\x59\x81\x3e\x86\xf7\x36\x0f\x7d\x4c\x13\x2a\x1e\x13\xe4\x25\x43\x29\x93\x20\xb8\x8e\x3c\x16\xee\x10\x27\xe2\xdd\x0d\x6f\x7b\x46\xcc\x72\xed\xf8\x86\x42\x8b\x86\x58\xd9\xee\x48\x4f\x6b\x72\xf2\x57\xe9\x97\x57\x33\xb1\x6d\x6f\x44\x44\x28\x51\x08\x2d\x57\xb7\x13\x5a\x4d\x1d\xd0\x65\x46\x07\xee\x4a\x6a\x88\x03\xbf\xe5\x4e\x26\xe0\x03\x46\xc9\x8c\x1c\xc7\xc9\xbe\xea\x69\x7e\xc3\x65\x3f\xad\x1e\x32\x12\x35\x71\x30\x6f\x38\x3a\x1a\x64\xc9\x8f\xe2\xc9\x19\xc4\xa8\xdd\x0b\xf2\x92\x56\xad\x42\xec\xe7\x70\xe6\xa7\x7a\x18\xa8\xfa\xb8\x57\x2b\xfc\xec\x21\x24\xa9\x0d\x87\x8f\x95\x09\xe9\x79\x25\x9e\x81\x04\x14\xba\x87\x36\x8a\xf0\x30\xcb\x32\x0f\x1f\x99\x2d\x6f\x57\xa9\xce\x62\xcc\xdd\xa0\xa6\x71\xc8\x47\xa7\x4c\xdf\x34\xcb\xea\xbe\x0d\xc4\x01\xb7\xdf\xb7\x63\x88\xc8\x50\x7c\xbd\x80\xa6\xdf\x97\xae\x53\xd7\xc9\x43\x78\x0c\xc3\x44\xcd\x05\xab\xbd\x15\x9e\xe8\x18\x3d\xa7\x9d\xaf\xfe\x2e\x15\x9a\xa4\xd6\x5f\x2a\x0b\xd2\x5a\xf3\xe7\xe8\x4a\xaf\x16\xcb\xd7\x08\xec\x35\xaf\xb8\x53\xe6\xcc\xab\x0f\xfa\xdf\x27\xcf\x67\xc1\x8c\x38\x5f\x5c\xb5\xb8\xc3\x72\x45\x83\xe5\xe9\xed\x5d\x27\x3d\xc7\x58\xfa\x47\x5b\xf5\x21\x64\x49\x19\x45\x15\x32\xdf\xed\xc0\x15\x80\xc1\xb6\x2b\x01\xf2\x8a\xa5\xf2\x99\x4b\xe9\x17\xc7\x0e\xbb\x2a\x64\x3b\x2b\xe3\x11\xc7\x41\xb5\xd5\x0c\xb1\x75\xed\xa7\xda\x02\x77\xb9\x7f\xee\x77\xff\x15\x52\xfc\xc4\x7c\x11\x40\x10\x22\x39\x7c\x8a\xfc\xb0\x65\x6b\x17\x64\x42\xab\xe0\x0f\x09\x67\xdb\x62\xfc\xe2\xa8\xfa\xa1\x71\x7d\xf3\x87\x8d\x84\xbc\x4e\x4d\x90\x8d\x25\x24\x09\x47\x83\x21\xb4\xed\x86\xf2\x05\xc9\xa6\xb0\x47\xed\x11\x0a\x6f\xc3\xe1\x95\x5d\x88\x80\xbb\x61\x5e\x95\xa3\xf6\x32\x48\x9a\x71\x7c\x54\xf6\x41\xd9\x70\xd3\x29\x72\x21\x65\xce\x0a\x16\xa6\x3e\x6f\x6e\xb1\x5c\x3d\x4f\x86\x38\x2c\x3f\x2b\x64\x81\x19\x43\x08\x6c\xe0\xd0\x23\xf6\x34\x97\x65\x81\xab\x39\x6d\x6e\xd2\x63\x31\x9f\x21\xb3\x8d\x90\x1d\xe8\x18\x79\x27\x48\xf9\xe4\x78\x73\xc8\x84\xff\x4f\x3f\xc2\x7f\x39\x40\x3f\x31\xc8\x68\x08\xff\xbf\x8a\x1d\xf4\xaa\xe3\xa2\x90\xd9\x6b\x19\x9e\xf1\x2b\x6d\xed\x98\xdd\x83\x91\x71\xa0\x70\xc5\x13\x19\x78\x65\x54\xd4\x7a\xb6\x9e\x79\xc0\x49\x78\xb9\x9e\xb4\x65\x1f\x67\x6f\x21\x9f\x2d\x2e\x99\x0b\x74\xda\xd5\xb0\xbe\x93\x3f\x16\x56\xf7\xd2\xa9\x0e\xb2\xe5\x39\xf9\xfd\xf9\xfb\x1d\xf4\xfe\xb4\xa1\x9a\x09\xbe\x9c\x11\xb5\x04\x6d\xc6\x94\xd4\x66\xb0\xcb\x8b\xa5\xe5\xe7\xca\x48\xac\x04\x5a\xa7\x4d\x7d\xda\x02\xa9\xf4\x3e\xb8\x36\x43\xc2\xb8\xa8\x44\x1e\xbd\xa1\x7b\xd7\x71\x85\xd5\x6d\x92\xfc\x55\xa9\xb7\x9e\x43\x01\xba\x8e\x73\xbe\xc0\xb8\x7f\xee\x2f\x54\xef\xbf\x3c\x9b\xb8\x11\x14\x3a\x98\x6d\xd8\xdd\x6a\x21\x25\x60\xb0\x60\x5a\x78\x5b\x4d\xed\x04\xc5\x14\xd0\x06\x41\xa1\xac\xef\x13\x1e\x4b\x41\x1c\x87\x5c\x46\xc2\x04\x3a\x83\xfa\x65\xc7\x07\x0e\x34\x9a\x00\xee\x19\x0a\xb9\xbb\x7a\x97\xd1\x4e\xf7\xb6\x69\xe4\x18\x96\xa2\x64\xf9\xc0\x5a\xe7\xa8\x14\x10\xa4\x36\x8d\xc0\xf7\xfb\x63\xbb\x28\xba\x66\x6f\x01\x7d\xba\x70\x49\xb2\xb7\x42\xb0\xa1\x55\x7d\x8d\xb6\xba\xa2\x22\x1e\x77\x72\x2a\xc8\x10\x27\x7e\x5c\x74\xb4\x25\xc9\xae\x68\xca\x6a\xec\xf2\x67\x5a\x40\x6a\x42\x41\xa8\xbb\xb3\x7a\x20\x30\x42\x34\x1d\xbb\x1f\xe9\x07\xd7\x75\x19\xd4\xff\xed\xaf\xf1\x13\x8f\x16\x46\x86\x00\x18\xed\xf6\xa7\x71\x0f\x6c\xef\x07\x45\x39\x42\x7b\x11\xba\x67\x05\x7b\xa0\x1f\x52\x6e\xb1\x88\x49\xb3\x51\x51\x1d\x66\x0a\xd9\x29\x41\x72\xa2\x1f\x1a\xc1\xba\xb8\xa4\x51\xe8\xc4\xe3\x09\xdc\x3d\x53\x3d\x07\xa9\x0e\xaf\xcf\x53\xe8\xb6\xc7\xea\x3b\x93\x67\x69\x73\xc9\x01\x9a\xf8\x0b\x16\x49\xef\x81\x05\x93\xd1\x03\x2a\xcb\x53\x46\xab\x3e\x65\xbc\xc3\x77\x1a\xd8\x45\xf4\xc4\xf3\xb5\x9b\xf5\x6f\x12\xe2\xf4\x01\xcb\xe8\xa3\x68\x18\x16\x43\x37\x6a\xa6\xb5\x46\x1c\xfe\x78\xa6\x14\x5f\xd2\x21\xcf\x84\x70\x9f\x25\x7f\xba\xbd\xe4\x65\x53\xa5\x52\x07\x44\x1d\x5f\x27\x24\x36\xdb\xc5\xde\xdd\x9b\x26\x2b\xe6\xa1\xde\x1c\xeb\x0a\xbf\x85\x6b\x22\x20\x4a\x54\x7c\xe6\x1e\xcf\xf7\x4a\x49\x07\x44\x57\xcc\xa9\xd9\xd9\xe9\x91\x52\xbb\x7f\xb3\x50\xd7\xae\x1b\x6c\x16\x72\xb8\xf2\x1d\x1f\xfd\x1c\xea\x6d\x71\x24\x4c\x3e\xaa\x45\xb9\x2e\xfb\x5f\x91\x06\x5d\x9e\xae\x46\x96\xe6\x05\x9e\xc7\xc0\x38\x73\x50\x46\xf6\xd4\xd8\x48\xe5\x51\x53\x31\x2e\x8b\x87\x91\xaa\x53\x13\xfb\x99\xdd\x4f\xfc\x45\xf7\xe5\x29\x91\x08\xf8\xc0\x04\xee\x3f\xa2\xdf\x2a\x6d\x8b\x32\x10\xc7\x04\xbb\xc8\xe2\xbc\x37\x56\xd6\xa6\xd8\x7d\x5c\x78\xbe\x57\x99\x3a\x1a\x34\x01\x6f\x27\x7b\x37\x9c\x81\x5e\x56\xb8\xd0\xab\x3f\xf1\x0a\x3f\xd9\x1b\x98\x59\x78\xe2\xde\x27\xc1\xcc\x88\x09\x92\x0c\x70\x67\x63\xc9\x00\xc5\xff\x83\x49\x8c\x78\x7e\x2e\x56\xcd\x22\x62\x4f\x2d\x5d\x5f\x08\x2e\xc3\xfa\xcf\x95\xb6\xcf\x62\x6e\x3d\x35\x78\x8b\x3f\x31\x84\x69\xc1\x52\xd5\xe9\xda\x5a\xbb\x14\xa1\x21\x55\x36\x7b\x0e\xea\x56\x1f\xf3\x53\x6f\xbe\xd7\xc0\x7a\x86\x96\xed\xf6\x64\xef\x33\x9d\x08\x38\x5d\x41\xef\x87\x11\x63\xd7\xa0\x50\x5c\xec\xa7\x5b\xc9\x1f\xb1\x1a\x63\x6a\x56\x26\x68\x29\x5a\x36\x63\x2f\xf1\xb4\x08\xf1\xe6\xec\x50\x80\x28\x46\x9f\x4c\xaa\x3d\x22\xd2\xee\x33\xc4\xbc\xd2\x5b\x59\x47\x9c\xdc\xc9\xcf\x11\x2b\xe5\x27\x87\x19\x5d\x65\x3b\xd9\x86\xcb\x33\xa0\x67\x3e\x77\xeb\xd2\xa0\xce\x08\x8c\xfc\x5a\x5b\x34\xe0\xa2\x92\x4c\x98\x7e\xfd\x7b\xb9\x2c\xce\xa2\x2c\x7f\x72\xbf\xe5\x76\x11\x93\x1f\x08\xa2\x01\xbb\x84\x64\xec\x3d\x7b\xbe\xf8\xaa\x41\x08\xd5\xe6\x6b\x5d\xfe\xa9\xa9\x8e\x9c\xe1\x42\xde\xcc\x6a\xbd\x4f\xb8\x10\x60\xdf\x91\xaf\x30\x8c\xcc\x9e\x03\xe5\xe4\x91\xdf\x19\xd1\xd7\x84\x88\x7b\x0a\x23\x61\xb4\x9e\x2b\x68\xee\x67\xda\x26\x35\x2f\x6b\x94\x4b\x40\xf4\x14\x9d\xd9\x6d\x4e\x56\x30\x34\x9b\x44\x53\x47\xb2\x27\xbc\x16\x95\x51\xd1\xad\x3a\x8d\xd1\x92\xa7\x6f\x88\xa4\x64\x19\xa3\x03\x10\x2d\xb6\x37\x7d\xbf\x24\x4c\x23\xd6\x82\x8e\xf5\xfa\xbe\xd8\x64\x99\x92\x9a\xbf\xc6\x8b\x8e\x79\x86\x28\x5e\xe5\x83\xd8\x30\x1a\x08\xac\x83\x38\x9f\xab\xd2\x4f\xfb\xa3\x83\x72\xac\x3e\x67\xf2\x0c\xa7\xb5\x92\xd6\xd8\xdf\xbd\x87\xd4\xd2\x83\xd4\x80\xfb\x15\x7b\x02\x38\xc4\xe8\x1b\xaf\x92\x53\xc3\xc0\x4c\x47\x36\xef\x74\x74\x5b\x8a\x87\xe7\xc1\x2a\xcf\x93\xd9\x5d\xf2\xc1\x4a\xe6\xeb\xbe\xd6\x2b\x04\x88\xa5\xaf\x4f\xb7\x2d\x60\x7c\xea\x72\x0c\x5a\xd2\xbc\x46\x22\xb5\x49\xc7\xb8\x99\x6e\xb0\xf4\xd8\x1f\xeb\xe8\x31\x58\x6a\x89\xe0\xff\x35\xe8\x47\xf3\x44\xb6\x02\xc2\x13\x09\x35\xaa\x25\x03\x83\x46\x72\x5f\x76\x90\xa4\x02\x07\xd3\x26\x91\x6b\x41\x25\x76\xef\x3d\x6c\xd6\xd0\x5f\xa3\xe4\xca\xff\xac\xd2\x6d\x3c\xeb\x14\xdd\x37\x90\xc4\xe4\x67\x57\xec\xb4\xfc\xf4\xff\xa9\xe6\x22\x87\x72\x61\x79\x28\x3b\x5d\xe1\x01\x56\x60\xdb\xa3\xe0\x5e\xab\xd3\x07\x17\x7b\xd5\x71\x2f\x46\x98\xb2\x90\x36\xd7\xfa\x8e\x7d\x45\xa2\xec\x4d\x7d\xe6\x9e\x72\x2a\x07\x26\x42\x0d\x9a\xec\xe9\xa7\xee\xcb\x20\x38\x5b\xf3\x7f\xff\xc8\xee\xa1\x40\x05\xad\x1d\xba\xff\x59\x84\x58\xad\x8d\x21\x3e\x21\x45\x4a\x0a\x1c\x39\xa9\xeb\x0f\x37\x00\x37\xd2\xf3\x93\xb9\xd4\x10\x6e\xaa\x40\x62\xd9\xb5\x85\xc8\x9a\xc4\x36\x8f\x9c\x5a\x14\x79\xe4\xd4\xfb\xcb\x5f\xa5\x9a\x68\x8f\x2c\x3a\xb3\x79\x1a\xe6\x1d\xa1\x68\xd3\xfc\x69\x23\xa1\xd6\xf0\x35\x81\xfd\x89\xd5\x06\x53\x3c\x7b\x47\x9f\x6e\x2c\x40\xe7\xf2\x6d\x62\x65\x40\x4d\xd3\x64\x20\x31\xa7\x81\xf5\x5b\xe7\xa1\x93\x7b\xd6\x6f\x3d\x9d\xea\xcb\xfb\x5f\xef\x8b\x5d\x1e\x12\x00\x58\xeb\x9e\x4b\xf2\xc3\xbb\x01\xf3\x22\x62\xd1\xa1\x79\x31\x0b\x3b\xb5\xd8\x71\xb2\x31\xe3\xea\xf9\x2a\xb4\x4b\x14\x21\xc8\xdd\x4a\xb0\xf4\xa6\x91\x3b\xad\x97\x6a\xd7\x1f\x62\xa9\x56\x83\xc4\x18\xaa\x3f\x83\xd7\xe6\x9e\xdb\xaf\xa0\x30\x2e\xe4\xf0\xbd\x94\x78\x1a\xec\xd8\xf6\x59\x8c\x2d\xac\x57\xf0\x13\xfd\x6a\x44\x92\x88\x52\x84\x6d\x3e\x30\xfa\x32\x16\xfc\x96\xf0\xe3\xd4\x99\xbe\xad\xca\x33\x34\x01\xb0\x51\xc8\xbe\x27\xd3\x41\xa4\x9b\x25\x6e\xa3\x51\x10\xf5\xe4\x76\xf3\x9a\x5f\x8a\xca\xe2\x9e\x66\x2f\xdf\x58\x76\x57\xf3\xe8\x73\xa8\xfd\x55\x4a\x4e\xce\x76\x6f\x9b\x7a\x4e\x77\x90\x52\xcd\xb7\x67\x9a\x86\x7e\xbb\xc5\xcf\xef\x49\xe9\x55\xf6\x11\xa7\xdf\x28\x6e\xbb\x1a\xd8\x28\xed\x30\xf3\x79\xe7\xbb\x78\x46\xd2\x44\x2a\x6e\x75\xe1\x3f\x74\xbe\x41\x4a\x20\x4c\x2a\xc9\x7a\xb4\x36\x61\xe3\xda\x09\xbc\xf6\x04\xb6\x34\xc3\x9b\xbb\xc6\x76\xbf\x98\xb6\x42\xaf\xf6\x89\x86\x37\xce\xee\xef\x31\xb7\xc2\x7c\x1d\x87\x64\xc3\x7e\x6f\x7d\xa9\xb1\x68\x00\x03\xe2\xf2\xf3\x1c\x22\x27\x9a\x80\x84\xcd\xce\xd8\xae\x87\xc9\x57\x94\xd4\x5e\x9c\xdc\x67\x87\x53\xe1\xc0\x60\x33\xb1\x61\x82\x4c\x37\xc0\x28\x6b\x59\x92\x88\x68\xf2\x58\x52\xa4\x70\x2c\xfe\x9f\x2c\x23\x10\xc6\x56\xce\x1e\x35\x6f\xe6\x89\x02\x03\x88\xbf\x47\x7e\xbe\x02\x58\x31\xce\xf1\xb7\x71\x22\xa6\x55\x6d\x13\x4d\xf7\x16\x5c\x23\x1c\x71\x92\x6b\x87\x04\x35\x35\xf1\xb1\x5b\x75\xc4\x83\xca\x36\x99\x00\xc9\xfb\xa1\x9d\xb7\x95\x2d\xa5\x3e\xdc\x19\xcb\xbd\xf3\x05\xdd\xb4\x2d\x3e\x52\x1a\x05\x9d\x7d\x1e\xb7\xbc\x0a\x95\x44\xa8\xa3\x60\x3b\x65\xa9\x50\x58\x96\x0f\x82\x42\x7b\x70\xf0\x4c\xc6\x95\xb4\xbe\xdb\x91\x69\x2c\x8a\x41\x07\xaf\x96\xa1\xa9\x5c\x2c\x6f\x7c\x1a\x12\xb0\x52\xed\xed\x4d\x81\xc6\x57\xb7\x56\xf3\x26\x49\xf3\x76\x5b\x29\xbc\xd6\xbf\xcb\xf1\xc7\xc2\xa7\x69\x3d\x44\x04\xb4\x30\x14\x87\x80\xd3\xe6\xd6\xa1\x38\xe4\x74\xa1\xf4\xca\xbd\xf8\xd2\x86\x18\xa9\xd0\x24\xcb\x6b\x5f\x58\x08\xd7\xc8\xd7\x62\x21\x2e\xa1\x22\xb4\x12\x40\x72\xe8\xe6\xc8\xdb\x14\x0e\x95\x7e\x1e\x3b\xa6\x6a\x9c\xb8\x18\xe6\x6a\xf5\x23\x77\x62\x63\x22\x84\x92\x77\xd4\x21\x0a\xc7\x72\x17\x36\xb0\x52\x2d\x7d\x1c\x91\xfa\x9c\xf7\xda\x85\x5f\x0a\xf3\xe7\x24\xe2\xb1\xb8\x28\x8b\x22\x1c\x6e\x65\xd0\x9a\x14\x3f\xb9\x90\x8f\x0f\x81\x50\x7c\xf3\xa5\x55\x46\x57\xf4\xdc\xb8\x82\xd5\x79\x39\xea\x4d\xc7\x7b\x5e\x82\xda\x8a\xab\x94\x12\x7d\x9f\xd0\x92\x05\xa9\x2e\xc5\x1f\xc0\x46\x65\xa6\xe4\xa7\x27\x28\x4d\x4f\x7e\x6c\x62\x4e\x9e\xe0\x7a\xd6\x42\x0a\xa9\x6a\x6d\xfb\x65\xc3\x64\x5d\x3c\x77\xe2\xba\xb5\x07\x20\x25\x3e\xf6\xef\xc9\x74\x75\xc9\xd1\xd3\xd2\x10\xf4\xa3\x31\xec\x8a\xb2\x43\x2b\x6c\x9e\xc6\xb2\x57\x1a\x25\x3c\x5e\x26\xfb\x3d\x30\x82\x39\x7f\x79\x94\xa2\xd1\x04\x15\x83\x57\xce\xb4\xd5\xfd\xbd\x42\x5e\x1c\xae\xb6\x6d\x4a\xca\x12\x84\x27\x94\xf3\x3b\x38\xaa\xad\x60\x23\x51\x28\xfb\xe4\x2d\x5d\xc7\x6f\x07\xe5\x08\x0b\x7e\xe3\xfb\xf3\x8e\x0d\x3c\x99\xa5\x07\xed\x99\xb8\x3a\x7c\x92\xd9\xf3\x5f\xc2\x7b\xd7\x01\x50\xff\x37\xdf\xef\x27\x8e\xf0\xda\x07\x06\x38\x5f\x40\x2a\x44\x25\x60\xbd\xca\x2e\xd6\xd5\x52\x1e\xcc\xd4\xc8\x35\x3f\xef\x56\x96\x99\xcb\x48\x3f\xca\x80\x8c\xce\x93\xfb\x06\xa9\x0a\x2c\xe2\xaa\x8f\x6e\xe4\x48\x8f\xb4\x0a\x03\x47\x62\x6c\xb1\x8b\x83\xaf\x09\x4b\xcb\x56\x5d\x53\x4a\x71\xb1\x5e\xf1\x9e\xcb\x41\x0a\xac\xe9\xd8\x20\xec\x30\xd1\x08\x91\xcf\x58\x57\x8e\xc0\x99\x0f\x04\x35\xc0\xf0\x46\xb8\x97\xfb\xc5\x7d\x80\xb7\x74\xc9\x85\x84\x71\x01\xa1\x1d\x7c\x97\x6d\x94\x29\x92\x2a\x2e\xf3\x4c\x39\xbd\xbb\x18\xe8\x97\x86\x10\x57\x2c\x88\x0f\x28\x0d\xe3\x91\xab\x0d\x11\x7d\x77\x60\x83\xbb\xe3\x5c\x16\x01\xd4\xd0\x4e\xc9\x26\x13\xc2\xd6\xcb\xd5\x44\x53\x4c\xce\xf6\x08\x42\xc4\x75\xb9\x9b\x4a\x46\xcf\xea\xc3\xbe\xe6\x3f\x07\xc8\xff\xf2\xd5\x7e\xe2\xe2\x90\xff\x62\x45\xa1\xbe\xf7\xda\x91\x25\xb2\x24\x65\xf3\xa4\x56\x50\xff\x10\xf4\x13\x72\xc9\xb4\xf7\xb8\xff\x80\x60\x5a\x2f\x1a\xaf\xd2\xc2\x4e\x06\x58\x84\x3c\x51\xd1\x78\x7a\x8b\x91\x2f\xa1\x03\x42\xbb\xf9\x83\x0a\xee\xaf\x29\x44\x29\xd9\x8e\x32\xfe\xc3\xbb\xcc\x0f\x0b\x5f\xcc\x40\xbc\xc2\x5a\xd1\x46\xaa\x50\x8c\x1d\xc3\x84\xa4\x50\x33\x8f\xbc\x39\xd6\x38\xb9\x98\xdf\xba\x3b\xb1\xc6\xeb\x39\xcd\x18\x97\x9a\x69\x70\x72\x4d\xab\xbd\xb8\xa4\xe4\xe6\x53\x79\x09\x53\xe9\x95\x7d\x2e\xcb\x93\x3c\x54\xb0\xa9\xfd\xcc\xb2\x6a\xf9\xab\x63\xee\x15\x4b\x88\x8a\xeb\x52\xa4\xff\x5f\x30\xb1\xf9\xa2\x2c\xe8\xa7\xbe\x77\xb8\x77\xea\x27\x8d\x8d\xcc\xb0\x9a\x63\x52\x9c\x90\x5d\x8f\x99\x27\x25\x82\x43\x12\xa6\xcb\xf7\x7e\xe2\xc7\x96\x3f\xca\x13\x80\x86\xe1\x71\x5d\x67\xfb\x66\xb7\x70\xd8\x41\x9b\xb3\x22\x7a\xd7\x02\x26\x27\x8e\x91\xb8\xa0\x6a\xac\x3d\xda\xce\xd8\x5c\x25\x9a\x06\x30\x4f\x24\xe7\xdc\x9c\xd5\xfc\x3b\x4b\x2a\x2b\x1c\xf1\x17\xca\xc2\x22\xbb\x50\x19\xd4\xa0\x3c\xa3\xfd\x2f\x5c\x97\xcb\x0d\x42\x58\x80\x79\x8d\x56\xca\xbd\x79\x12\xf9\x7a\x1b\x35\x3a\xdc\x99\xf3\x08\x3b\x50\x49\x97\xf2\xf7\x0b\xfb\xde\x56\x31\x9f\xf6\x69\x80\xd5\xeb\x75\x40\x69\x7f\x6b\x89\xca\x26\x9b\x60\xf1\xcb\xe1\x26\x0e\x0b\x6c\x7a\xa1\x77\xf8\x3b\xea\x2e\xa9\x88\x60\x74\x69\xc6\x8c\x85\xd8\x2e\xe0\xd7\x19\xeb\x82\x96\xa5\xab\xef\x55\x5c\x44\x52\x80\x55\x5c\x8c\x12\xb5\x18\x6f\x70\xb1\xb5\xab\xe6\xf5\xba\x13\xed\x9e\xaf\xbc\xfb\x05\xce\x2a\x1e\x52\xb0\x67\xd4\x26\x35\x31\x83\x5f\x4b\x71\xe2\xb1\xed\xe5\xba\x93\x88\x51\xf4\xbb\xc8\x90\x52\xd8\xca\x19\xc0\x52\x01\x40\x46\xee\x6a\xde\x22\x92\xe2\x9f\xd0\x99\x27\x6d\xc2\x38\x4f\x13\xfd\x86\x3c\x10\x0e\x17\xe1\xe3\x7a\x33\x25\xc7\x05\xb9\xb5\xd6\x45\xc0\xee\x2f\xba\xab\xf3\x7d\x32\xcd\xcf\xd2\x01\xd8\x71\x33\x2e\x55\x8a\x37\xe5\x6b\xf3\x54\x83\x13\xea\x54\xbc\x3a\x44\x12\x62\x57\xb7\x60\xb2\x7c\x7b\x13\x0d\xcb\x78\x1d\x26\x0b\x9e\x15\xba\xb8\x89\xf7\x58\x82\x48\x0b\x95\x06\x22\x1c\xa7\x52\x94\x0c\xee\x4f\xaf\x07\xd0\x64\x71\xec\x31\x18\xbb\x2f\x37\x78\xa0\x2d\xc9\x74\xfa\xa8\xfb\x7c\x6b\x36\x1c\x5b\xd0\x37\xa5\x48\x9f\xf5\x83\xe8\xb7\x13\x81\xc8\x05\xa0\x94\x7c\x6c\x47\xd6\xdb\x7a\xfa\x82\xe0\xf0\x66\x34\xad\xc0\x63\x5a\x23\x80\x44\xaa\x70\x79\x83\xf6\xa4\xbb\x74\x05\x82\x51\x0e\x40\x0d\x48\x66\xb0\x0d\xf1\x68\x47\x4a\x34\xa0\x1a\xbb\xf8\x3d\x9e\xe4\x72\xd7\x91\x8e\xd7\x5b\x4f\xac\x78\x1c\x9c\xd7\x6d\xa2\xd3\x09\x81\x19\x0d\x75\x89\x30\x0b\xe2\x7b\xd3\xad\x0a\x76\x54\x69\xdd\x6f\x8c\x23\x75\x63\xe2\x22\xcb\xc9\xa9\x50\x2b\x01\x0e\xf9\xa7\xa4\xc0\x50\x6b\xd7\x80\x8b\xa0\xbe\x9a\xf1\x8f\x9f\x25\xb3\x25\x8a\x8b\x39\x9d\xbd\x75\x93\x20\x66\x47\x0e\x38\xe1\xbe\x8f\x04\x45\xbe\xc7\x12\xbf\x06\x5b\x00\x71\x1b\xa1\x36\x95\xb2\xd3\x08\x9f\x6b\xd4\x7a\x72\x11\xd6\xbe\xc8\xcd\xfd\xe8\x08\xba\xc8\x60\xdb\xbd\xd0\xb6\x5b\x03\xf9\xf3\xb1\xd0\xeb\x84\x0d\x19\x05\xfd\xb0\x1a\x9c\xde\xdc\x0a\x5c\x20\x9e\xe7\x88\x9f\xa6\xf3\xb7\x0d\x4f\x76\x30\x5d\x1b\x10\x1d\x03\xd1\xd8\x45\x44\x2e\x4f\x15\xff\x20\xfe\x3b\x21\xcc\xf5\xf4\x3e\x6e\x12\xbe\x0d\x4d\x8c\xb8\xeb\xd4\x1b\x15\x09\x89\x2f\x0f\xdf\xc6\xb0\x00\xa5\x9f\x06\x4c\x0d\xe6\x1a\x9d\x2a\x70\x9d\x53\xdd\x18\x7b\xa6\xb0\xb5\x77\x9f\x84\x16\xb3\x94\x7f\x8c\xee\xab\xa7\x33\x7e\x88\x06\x46\x39\xfe\xd1\x27\xf5\x5c\x6d\xd9\x32\x6b\xf2\x69\x2c\x0c\x39\xf1\x94\xe5\xd6\x47\xa0\xb5\x36\xfd\xf4\xb1\xa6\x59\x1c\xee\x09\xe3\xd6\x0f\x3c\xe1\x0d\xae\x97\x48\xf1\x27\x7d\xd9\xbe\xab\xe8\x62\x46\xd3\xe8\x81\x53\x6b\xa2\xdb\x29\xf3\x76\xd7\x35\x79\x35\x40\x47\xf0\x5a\x26\x1f\xc8\x68\xfc\xc9\x85\xc4\x20\xd3\xeb\xb7\xea\x68\xa0\x0f\x87\x26\x42\xd6\x63\x58\xfe\x36\x5d\x0f\x9f\xbf\x56\xc6\xda\xb9\xae\x57\x0c\xd6\x1f\xa3\x67\xe5\x26\xed\x7b\xa6\x30\x46\x79\x38\xcc\x2c\xbe\xd2\xa0\xec\x63\x0a\x58\x54\xff\x44\x25\xa1\x77\x0a\xf6\x7f\x0d\x45\x09\x94\x20\x92\x04\x7f\x6e\xe2\xbd\xe8\x77\xef\xd9\x16\x7f\x15\xcc\xf8\xe3\xd8\x49\x86\x69\x36\xd9\x12\x15\xe2\x9c\x54\x95\xd4\xac\x8a\x0a\x02\xac\xfd\x16\x95\x2e\x56\xa6\xf6\xe4\xda\x09\xe2\xf9\xaf\x69\x83\x74\x4f\xaf\x78\xb5\xca\x9d\x83\x2e\xbb\x18\x12\x61\x5c\x5a\xc8\xc0\x61\xc5\x30\xc7\x01\x36\xf2\x0a\x6d\x31\x87\xba\x6b\x64\x7b\xdf\x9d\x7d\xfa\x96\x11\xda\x8a\xb1\x2e\xb4\xfa\x1a\x15\xde\x34\x4d\x54\xb1\x80\x15\x38\x79\x6c\x81\x87\x23\xef\x7b\x04\xff\xda\x4a\xb3\xde\x57\xea\xc1\xd7\x62\xed\xf3\xc9\x2a\x92\xd7\x36\xae\x84\x93\x0f\xa8\xe0\x21\xe7\xcd\x0d\xfd\x91\xdb\x7d\x13\x66\xf3\x41\x91\xa6\xee\x53\x59\xfa\xeb\x39\x1c\x8c\x38\x9b\x41\x64\xac\x64\xa3\x77\x78\x69\xba\x20\x0f\xab\x0c\xcf\x8c\xd7\x87\x34\x29\x8b\x77\x25\xb5\xc9\x65\x5d\x7a\x5a\xb9\xf3\xb8\xd2\x77\xb0\x13\x72\x6f\x7f\x7d\xb6\xf0\x7b\xb9\x00\xe6\x9c\xd8\xc7\xc5\x44\x2f\xda\xd5\x9a\x16\x99\x90\xff\xd9\x52\x23\x84\x9a\x71\x29\xb7\x76\x57\x78\xd1\x36\xac\x4d\x15\x7d\xf6\xf7\x08\x01\x9e\x7f\x30\x17\xfa\xe9\xa7\xb3\xf4\x54\x6a\x66\xff\xad\xb3\xd2\xaf\x36\x87\x5a\xad\x72\x36\x1e\xde\x99\x78\x3b\xa3\xbe\x6a\xcd\x2f\x25\xc0\xf3\x35\xdf\xcf\x9e\xeb\xba\xbb\x8b\xc8\x7d\x1a\x97\x98\x9c\xa5\xf4\x34\xec\x8e\x80\x4b\xfc\x8c\x20\xe6\x56\x57\xaf\x7e\x57\xee\xe2\x0c\x34\xd6\xea\xe7\x68\xa9\xd3\x7d\x22\xf7\x8f\x44\xe5\x89\x0a\xca\x68\xee\xaf\xe4\x60\x55\xc5\x09\x8b\x6c\x9b\xc9\x19\x9d\x39\xb9\x5f\x03\xf7\x0a\xb6\xbb\x0f\x1e\x4a\xda\x16\xdf\x39\x34\xe4\xda\x67\x34\x0f\x68\x3e\x0c\x0c\xfc\x02\x14\x1f\x6b\x5f\x5e\xd3\xd7\x4a\x25\xec\xcf\xff\x2f\x1e\xff\xd7\x9e\xf2\x13\xe7\x83\x80\x00\xe3\xb1\x2f\xbe\xc1\xeb\xf0\x1e\x66\x6f\x58\x57\x9d\x0e\xcc\x5e\xad\xa0\xce\xa2\xaa\x1e\x03\xb9\x0a\x7c\x33\x94\xfb\xc3\x6e\x52\x72\x90\x4f\x0c\xb5\x55\x47\x3d\xf3\x77\x5e\x24\x0b\x67\x4a\x29\xef\x19\xa5\x83\x83\xb9\x96\xcf\xe2\x67\xfe\x4d\xa2\x67\xbe\x73\xed\x25\x6d\x10\x5e\x40\x51\xfe\xa6\x42\x12\x1a\x2a\xcf\x0b\x43\xfc\x90\x01\x3b\xf1\xb8\xb0\xb8\x32\xa5\xb4\x2c\xfa\x9d\xe1\x8b\x67\x1f\x5e\x79\xb4\x20\x20\x6a\x05\x99\x4c\xe5\x38\x31\x34\xa2\x99\x8d\x84\x8c\xd7\x86\x75\x8d\xe8\x5e\x71\x92\x49\xdf\xce\xde\x57\xd0\x6d\xf8\xe7\x71\x01\x6c\x7b\xfc\x59\x47\x75\x54\x1c\xbd\xf2\x19\x93\x58\xc3\x0b\xd5\x71\xe8\xfd\x8d\x36\x94\x69\xeb\x82\x61\x57\x2b\x5c\xe7\xb3\x50\xee\x14\xdc\x3f\x34\xfe\xff\xf5\xb6\xfc\xc4\x02\x68\xd1\x81\x97\x80\x6e\xe8\x7f\xe8\x40\x0a\x97\xbd\xf6\xea\x28\x29\x95\x3b\x68\x6d\x2a\x73\x2c\xe4\xc6\x15\x27\x70\xfe\xf0\x87\x4a\x8d\x30\x27\x38\x46\x6f\x0e\xd6\x2c\x32\x70\x43\x62\x99\x8b\x92\xfc\xb6\x1d\xef\xde\xf5\x57\x4b\xc5\x0f\xf8\x32\xcd\x18\x3a\x5a\xfd\x42\x1e\x29\xed\x50\x10\xef\x8c\x6b\x68\xf5\x3b\x3c\x41\x51\xad\xa5\x96\x32\xaf\xd2\xbc\x0d\x42\x9f\xe2\x84\xb1\xc3\xe1\x7d\x5b\x70\xc4\xd9\x6f\xe1\x1c\x2d\x40\xb4\x3f\x83\xda\x9c\x63\x3d\xe0\x48\xdd\xc7\xe6\x83\xa4\x12\xc6\xe8\x64\x72\xae\x08\x67\xeb\xb9\x81\x44\xfd\xbe\xaa\x01\x0c\x3d\x78\x33\x6f\x24\x7d\xec\x4a\xce\xda\x22\x84\xd4\x9d\xec\x76\x75\xe1\xff\xb6\xc6\xf6\x01\x9a\xf9\x17\x8f\xc3\x4c\x7e\x75\xb6\xe1\x4f\xca\x57\xd7\x3e\xff\x9b\xe5\x14\x97\x3b\x1f\xae\x1d\x49\x83\x02\xdb\x5f\xcf\x51\x3a\x23\xcb\x85\x4b\x54\x53\x17\x8a\xb7\x70\xc3\x99\xc6\x83\xa7\x94\xc4\x1b\xe6\x27\x6e\xf8\xf2\xf2\x92\x48\x02\x8c\xf6\xed\x5a\xf2\x8d\x3a\xf5\xa1\xad\x29\xef\xd1\xfd\x1e\x58\xe6\x1b\xf5\x49\xec\xa1\xd3\x59\xbb\xac\x37\xc0\xa6\xe4\x62\xa6\x1e\x98\xe6\xc3\x1e\xd4\xa8\x86\x76\x38\xd7\x1f\x56\x6e\xf7\x6d\xde\xd4\x32\x3c\xf2\x9b\xfb\xc6\xfe\xc8\xdc\x1a\x2f\xf6\x4e\x72\x0a\x3b\x1e\x50\xbb\xe6\x71\x92\x1f\xc8\x61\x0f\x7a\x1b\x75\x64\xd9\xc2\x98\x7b\xbf\x4b\xf3\xfe\x94\x4b\x34\xf0\x7e\xf4\xf6\x66\xc9\x3b\x0e\x61\x3c\x0d\xb0\xac\x81\x91\x0d\xaf\x44\x3a\x22\xb6\xbc\xb6\x1a\xc6\xde\x31\x28\x9c\x24\xe0\x12\x3f\xd0\x20\xf3\xa9\x59\x52\x62\xe0\xe1\xd6\x11\xa4\x8c\x65\xdd\x7f\x4a\x54\x1e\xe5\x2d\x73\xa3\xba\x5f\x9d\xb2\x20\xb2\xa0\x22\xc5\xd3\x9d\x0c\x12\x7e\x6f\x61\x9f\x17\xcb\x90\xf6\xe3\x2b\xe0\xe5\x1e\xd8\xc8\x91\x29\x44\xb1\x08\x89\xf7\xcd\xb5\x3c\x5e\x4c\x36\xf0\x06\x9a\x5b\xbf\x24\x3f\x51\x67\x2c\x97\x8f\x5f\x07\xd7\x03\xd8\x81\xf7\xf8\x19\xe9\x8c\x98\x4b\x68\xe6\xef\x48\x7d\xb1\x16\x59\x4e\xb2\xef\x94\x08\x6a\xfe\x40\x22\x3f\x98\x2f\xb9\x47\x3d\x81\xe1\x58\x61\x71\x34\xc6\xb1\x54\xc0\x3c\x31\xd4\x99\xe2\x0d\xcc\x9c\x6e\xfc\xaf\xbe\xc2\xb8\xf4\xc3\x80\xbd\xa7\xf5\x2b\xdf\x0b\xba\x67\x20\xc3\x1e\xf4\xe2\x88\xf7\x09\xbf\xf5\x01\xa1\x31\x3a\x8d\xc9\x9a\x4f\x62\xf9\x6b\x28\x8a\x0b\x84\x40\x77\x6e\xbc\xf3\x6b\x19\xa4\x2a\xc0\x7c\xe6\x72\xd6\xf9\x08\x4a\x6a\xf5\x0e\x0f\xbe\xed\x3f\x47\x13\x09\x0c\x79\x2d\xd5\x53\x9c\xa8\xd7\xfa\x2e\xec\x6b\x47\x7d\xb0\xde\x60\x86\x3d\x3d\xd3\xa2\x67\x67\x38\x08\xbe\xa4\xfb\x44\x35\xac\xb8\x71\x95\x4c\xf5\xc0\x6a\x95\xec\x94\x32\xbe\xce\x3b\x42\x3b\x42\x10\x88\x47\xbf\xad\xed\xde\xd5\x9a\xd4\x58\x52\x30\x46\xf5\x2e\xd1\x55\x55\xe5\xbc\x81\x70\x20\x53\x99\xf5\xdd\x34\x5c\x34\x29\x7b\xc0\xfd\xd7\x90\x0e\x28\x0f\x9b\x4e\x22\xbe\xfe\x82\xb9\x6f\xf1\x9d\xdf\x39\x57\x6e\x2f\x07\x91\xf7\x17\xa0\xa5\x06\xb1\xd5\x85\x4b\xc4\x29\x8e\xfe\x3e\xff\x95\x2a\xc5\x7c\x66\x8e\xc6\x77\x1f\xe9\x91\x97\x04\x99\x60\x5e\xf1\xb5\xaf\xd6\xb8\x51\xdd\xde\x01\xf0\xeb\x50\x7c\xda\x6d\x00\x9b\xd2\xed\x5d\xeb\x20\x61\xfe\x93\x70\x74\xdc\x02\x61\x5e\xa5\x65\xfe\xa6\x4c\x52\x29\xcb\x7a\xfb\xec\x66\xa9\x44\x2a\xd4\x92\x36\xd8\x84\xed\x4e\xbb\x5b\x9c\x48\xdd\x48\xfd\xd3\xf7\x43\x08\x5e\xc2\xae\x0c\xa6\xe7\xef\x23\xa9\x69\x9a\xce\xbe\xe1\x63\x41\x09\xe4\x14\x6a\xc0\xfe\x96\xd4\xf3\x9b\x89\xbb\x6e\xb6\xae\xd0\x32\x47\x3b\xb3\x62\xdb\xb4\xcf\xd4\xd1\x41\x66\x33\x14\x44\xc6\x70\x17\xd4\x26\xb7\x80\x8f\x7f\xf4\x55\xce\xdc\x6f\x15\x6a\x85\xd7\x84\x85\xf0\xd7\x3c\x26\xc1\xc7\x2b\x24\xff\xe1\xcc\x32\xe2\x11\x17\xe1\xae\x86\xce\x0b\xe2\x31\x1c\xd0\x39\x55\x59\xde\xe9\xa5\x71\xd6\xcc\xe3\xde\x7d\x25\xe9\x2a\x97\xa2\x63\x89\x63\x3a\x2f\x75\x15\xc6\x73\x36\xa1\x9c\x1c\xff\xab\x74\xe3\x23\xaf\x83\xd2\x84\xd0\xf7\x62\xf5\xad\xb2\xde\x14\x87\xa3\x43\x24\x22\xda\x83\xc0\x96\x0a\xbe\xc0\x08\x0b\x96\xe0\x54\x3b\x40\x69\x90\x57\xc3\x8e\x8f\x09\x0e\x22\x79\x56\xf4\xe1\xbd\x43\x24\x06\x9f\xd0\x00\x12\x34\x29\x7a\xa1\xa2\xa1\xa1\xdd\xf2\xab\x2d\xa0\x14\xda\x9f\x79\x4f\x2c\xaf\xe5\x26\x7e\xe1\x07\xf7\xe3\xdc\x4e\xc2\x3f\xec\x2d\x9d\x33\x41\x89\x36\x34\x3a\xf9\x67\x61\x8e\xb7\x53\x60\xcb\x41\xde\xeb\x60\x6d\x03\x28\x73\x58\xb9\x0a\xb3\x47\x5f\x95\xf3\xfb\xe2\xb4\xaf\xd3\x5b\x76\x5b\x46\x29\xad\x0b\x69\x59\xf5\x2c\x4b\x20\x43\xdf\x67\x78\x9a\x84\xb1\x0f\x32\x77\x6e\xdf\xdd\x2a\x3e\x20\x1c\xbf\x54\x98\x7d\x4e\x14\xef\xee\x26\x21\xad\x52\x4b\xc1\xc5\x01\x58\x3e\x7a\xad\x21\x7f\xbd\xb1\x41\x26\x47\x4c\xd7\x13\x8c\x92\x3e\x44\xc4\x6c\x6b\xa6\x36\x15\xc6\x98\x4a\xa2\x4a\xe4\x30\x7d\x2c\x02\x59\xf1\x35\xde\xf0\xf9\x10\x70\xbc\x1d\xbf\xb5\xaf\x2f\xa9\x0c\xd9\x31\xb6\x91\xbe\x26\x82\xef\xca\xe3\x72\xe6\xb0\x6f\x22\x6c\xa7\x09\x02\x37\xd5\x64\xa1\xce\xd2\xbe\x75\x3a\x57\xf7\xeb\xac\x27\x83\xd8\x0d\x66\xe5\x04\x34\xc7\x6c\xc4\x29\x58\x67\xfc\x0f\x11\xc3\xdb\x08\x59\x80\x0f\x14\xf6\x81\xea\x60\x32\xf5\xf4\x42\x86\xb9\x7f\x82\xd1\xae\x5f\xc0\x81\x64\xae\xdc\x2a\x41\x6d\xf4\x86\xfc\xe6\x2a\x7e\x94\x08\x2c\x40\xf8\x44\x41\x78\x25\xdf\x46\xf0\xa5\x8c\xec\xca\x9e\x8b\x9a\xd7\xa4\xbe\xb7\x4a\x87\xd4\xe6\xf6\xa8\xf9\xd7\x94\x5b\x11\x1c\x48\xda\x6a\x49\x64\xfe\x0d\x5a\x89\x93\x93\xb2\xc4\x40\x64\xeb\x4f\x42\x06\x34\x4b\x2c\xd6\x04\xdb\x0c\x1f\xb9\x2a\x77\x5d\x65\xa1\x98\x34\xb8\x56\x1e\xba\xf0\x2e\x7e\x56\x74\xc4\x46\xa3\x4c\x3b\x94\xeb\x7b\x6a\xba\xc4\x91\xb8\x2d\x49\x93\x8e\xee\xeb\x1b\x29\x3c\xb8\x69\xad\xbf\xaf\x15\x2a\xb3\xec\x7b\x51\xd4\x04\xdd\x8f\x08\xf3\x82\xc3\x5f\xe8\x97\xa9\xa9\x4b\x0e\x78\xfd\x39\x67\x41\x6f\xe3\x70\xb8\xb2\x3b\x61\x81\x0a\xe7\xd1\x47\x8a\xa3\x88\xef\x1c\x59\xb2\x2c\xd7\xab\x3f\x8f\x5d\x2e\xf2\xae\x71\xa6\x57\xee\x38\xe5\x0f\xad\xcb\x49\xcb\x99\x92\x41\xf2\x90\x18\xf9\x4d\x73\x99\xb9\xf8\xb0\xce\xbb\xbd\xe2\xf8\x23\xee\x53\x63\x89\xb7\xd0\xc8\xdf\xe8\xeb\xba\x8e\x79\x99\x75\x12\x81\x36\xaa\x7a\x93\x61\x69\x84\x6c\xee\x9d\x41\xc4\xa4\xc6\xce\xbd\x1a\x7e\xb5\x3f\xf7\x97\x7b\x73\x99\x70\x52\x89\x24\x51\x57\xd1\xe9\x00\xbd\xef\xc1\xe7\x4d\xb1\x2a\x02\x7e\x1a\xab\x43\x77\x2e\x98\xd0\x44\x92\x1d\xcc\xf6\xf8\x3e\x25\x8b\x35\xdc\xdb\x75\xf5\x2c\xce\x3a\x90\xa3\xcc\x53\x79\x3b\xa6\x86\x92\xd3\xe7\x2c\xf0\x36\x4f\x9c\x7e\x29\xb2\xf3\x1a\xc9\x66\xfd\x87\x00\xef\x36\x57\xf5\xd9\xec\x95\xa0\x1a\x78\x12\xb0\xda\x95\x41\x7c\x1b\x45\xd1\x3b\x8e\x70\x23\xaf\x71\x3c\x7f\xd2\x2e\x31\x1c\xa9\xb1\xb8\xa1\x2c\x4a\xfc\x96\x38\x3a\xb1\x1f\x30\xca\x62\x01\x43\x20\x40\xea\xfb\x88\x86\xf6\xf4\x93\x25\x72\xf3\x64\x3b\xa9\xa6\xbc\xc2\xe0\xa6\x08\x49\x2e\xa2\xf5\x51\x27\x35\x90\x1e\xaa\x36\xb6\xde\xff\xf2\x8a\x3e\xff\x8f\x2d\x22\x6d\xa9\xa5\xf8\x84\x70\x0a\x3a\x24\xb3\xf7\x2c\x4b\xa2\x0c\xf6\x6c\xcf\xd9\x16\x80\x37\xde\xfa\xa1\x5b\xc9\xa5\x92\x2c\x61\x18\xcd\xde\xf1\x3a\x5f\xbd\xc3\xd4\x8c\x4d\xc2\x58\x93\x06\x03\x69\xc2\x62\xeb\x0d\x6b\x4a\x37\x08\x1d\xa3\x31\xa9\xaa\x54\x17\x9a\x37\xc3\xa6\x1e\x78\xbc\xbf\x4e\xa5\x2d\xff\x59\x82\xfd\xac\x94\x26\x37\x64\xc3\xa3\x30\x92\x0d\x8c\x7d\xad\x9f\xf6\x1d\xbb\xa3\x89\x96\x2f\x95\x20\x71\x5e\x1b\x16\xac\x45\x61\xa1\x68\xe5\x69\xf9\xc6\xb1\x1d\x3f\xa2\xe0\x34\x55\x8a\x0e\x8e\xa8\x5c\xdc\x7f\x7e\x49\x85\xbb\x7b\x55\x50\x38\x48\x32\xce\x2b\x29\x79\x9e\xf2\x90\xc4\xc8\x15\x66\x8e\xd0\xf3\xbd\x8f\x9c\x9d\x12\x40\xf0\xc3\x75\x93\x10\x9f\x14\x32\xc7\x75\x9e\x5a\xda\x46\xbc\x43\x26\xba\x66\xf3\x92\x32\x2e\xd7\x80\xfe\x65\x4d\x2f\x47\x93\xfd\x0d\x50\x1a\x82\x77\x1e\xe5\x89\x7d\xcc\x80\xbc\xc7\x86\x59\xf0\x39\x7f\x88\x47\x48\xf3\xba\xad\x34\xcb\xa4\xd9\xd2\x6c\xe5\xcb\x96\x18\x40\xb3\x52\x15\x26\x7d\x36\x35\x3b\x7c\xf5\x33\xe6\xc3\xde\xc8\x11\xb6\xea\x95\x65\xb2\x66\x91\xe2\x30\x2b\xcc\x85\xdb\xca\xc4\xbc\x03\x38\x76\x55\x0d\x8d\x18\xf7\x48\xf4\x78\x40\x9f\x4f\x8c\x0a\x2e\x6f\x17\x95\x8d\xf8\xf9\x82\x06\xf1\x38\xda\xd0\x69\xd6\xdf\x2e\xaf\x06\x9c\xbb\x09\x91\x46\x66\x95\x07\xdd\x1f\x2a\x07\x3b\x31\xf7\x93\xda\x91\x8e\x8e\x75\x34\x8d\x1b\xf2\xe3\x72\x18\x6d\x72\x67\x75\x84\x28\x50\x8a\x96\x0c\x0e\xa8\x98\xc3\x42\x56\x0d\x91\x76\x4c\x86\x37\xdb\xd1\x35\xd2\xe3\x5a\xd4\x95\x92\x75\xa2\xc5\x71\x0b\x4f\x96\xa1\xa2\xfb\x27\x2d\xf2\x9f\x01\x45\xfc\x0d\x04\x04\x3a\x90\x16\xd9\x98\xaa\xb5\x3c\xcb\x92\x39\x20\x12\xa6\x99\xfa\x6a\xc8\x47\x83\xd0\xa9\xae\x8f\xb4\xbf\x69\x6d\xb0\x1e\xd6\xae\xc6\xf1\x0c\xa6\x71\xd0\x27\x28\x43\x8e\xe0\xf9\xd7\x93\x90\x04\xba\xbb\x3b\xfc\x9b\xd5\x2a\xf7\x57\xcb\xa3\xd1\x3a\x48\xcc\x32\xc2\xb2\xeb\xb8\x40\xd0\x37\xfb\x3b\xd3\xe8\xbd\x8f\xd8\xd5\xf6\x1f\x4f\x84\xb8\xf5\x90\x5d\x29\xa8\x94\xbc\x4e\xe4\x2b\xf3\xce\x56\x59\x62\x5f\x6b\x58\x28\x03\xa2\x16\x02\x08\x4d\x92\xa6\x03\xa2\x98\x67\x8a\xd3\x63\x9b\x1f\x7b\xc7\x5f\xba\xb3\x45\xb1\x67\xe0\xc3\xd5\x97\xbb\x2a\xbc\xf1\xac\xfe\x31\xed\xbf\xdc\x9a\x9f\x38\x24\x04\x3a\x1c\x60\x1a\x9d\x5f\xd6\x7a\x66\xf7\x4e\xc9\x45\x79\xeb\xfb\x87\x86\x16\x0b\xa3\x60\x3d\xe3\x7e\xf7\xac\x5a\xad\x42\xab\xef\x07\xc7\x4c\x20\xe0\xb6\xf9\xe8\xcb\xeb\x68\x2d\x75\xc5\x66\x8f\x99\xfd\x17\x4c\x03\x75\xc9\x1f\x43\x16\x1a\x7e\xa7\x88\x22\xef\x0a\x0b\xfa\x8c\x65\x40\xb6\x50\x6e\x3c\xdc\xe5\x8c\xa1\x9c\x45\x1b\xb2\xed\x36\x73\x3d\x58\xdb\x41\x53\x74\x63\xf8\xa7\xd0\x8f\xad\x4c\xd5\x44\x59\x7b\x69\x91\x80\xe8\x3e\xeb\xea\xa4\xec\xa9\x48\xc2\x07\xd9\x96\xdc\x43\x22\xac\x85\xc6\x55\xb8\x2d\x67\x42\xe4\x3e\x17\xa8\xc7\x49\x2a\x9c\x9e\xf4\x7f\x0a\xd8\xff\xe9\x05\xc5\x10\x54\xc0\x5c\x56\x3f\x7b\xb5\x57\x3f\xca\x65\xcd\x0f\x3f\xba\x89\x0d\x9e\x8d\x35\xcf\x77\xe1\xd5\xb9\xc4\x1b\xa5\xbd\xf4\xa9\x0f\x74\xa7\x06\x71\x60\x46\x2f\x19\x87\xb8\x7f\x53\x61\x56\x9e\x2e\xe9\x68\xfd\xf3\x5d\xd0\xd6\xfa\x28\x3c\x9e\x21\xdb\xf8\x01\xe2\x3e\x0a\x1e\x6c\x44\x34\x20\x4a\x86\xfb\x7e\xed\x1c\x87\x75\x62\xe8\x94\x48\xa7\x5a\x82\x71\x32\xc8\x5c\x2c\x0c\x59\x0f\xc5\x71\x4a\x42\xae\x81\xac\x1d\x05\xec\x54\xdd\x97\xd6\x49\xb7\xf3\xe1\x95\xe5\xc8\x0f\xeb\xb4\x95\xbb\x98\x29\x60\x88\xb7\xd1\x36\x4d\xf9\x34\xd5\x8c\x2d\x4e\x73\x2a\xee\xf8\x0f\xb9\x07\xbf\x21\xa5\xa7\x57\x61\x8f\x44\xf3\x36\x64\xbe\x0a\xf1\x80\xe7\x9b\x7a\x3f\xac\x6f\xf6\x2d\xf0\xbc\x89\x10\x9d\xe2\x0c\x77\x84\x7e\xe2\xde\x8f\x7f\xae\x13\x09\x80\x90\xd0\x2d\xb2\xef\xef\xfd\x54\xec\x1f\x22\x5e\x67\x0f\x5f\x84\xf6\x41\xa9\x1f\xb1\xc9\xc8\xbe\xcf\x37\x81\x5b\x6d\xa1\x7a\x2f\x0c\xe7\xaf\xa3\x0b\x4c\x93\xef\xe2\xe0\xb8\x1d\x5b\x40\xb8\x16\xb7\xc1\x78\xbb\x99\xf2\x1a\xbe\xe3\x1d\xbf\x2b\x63\x41\x6b\x96\x61\xc7\xb1\x0c\x30\x0d\x70\x29\x7c\x32\x1f\xdb\xf0\xd1\xa9\x51\x5d\x0b\xf3\xa7\x95\xb7\xd3\x4f\xe4\x5c\x0f\x4b\xe1\xaf\x21\x59\xfb\xb6\xc1\xd2\x43\x78\x00\x9b\xda\xd2\xb4\x04\x3c\xf2\x63\x7d\x61\xea\xd1\x0b\x79\xa2\xb0\xcb\xf0\x93\xde\xaf\xb6\x75\xc6\x24\xba\x3f\xe8\xa3\x2c\xbd\x5f\x19\xc0\x64\xa9\xaa\x47\x76\x3c\x81\x18\x74\x91\x17\x21\x1a\x4a\x4f\xbf\x58\x14\x2d\x99\x5b\x05\x63\xfa\x07\x2d\xdb\xac\xe0\xc1\xde\x74\x7a\x10\x4e\x6b\x2a\x49\x3e\x14\x6c\x2a\x23\x37\x1f\x16\xbc\x49\x1f\x23\x92\x94\xd6\xfe\xbd\x6c\x45\xbe\x9f\x02\xee\x33\xc2\xe6\x6d\x81\x2f\x78\x24\xc6\x68\x34\x0d\xed\xdd\xaa\x37\x13\x24\xc6\xb0\x98\x4b\x87\x32\x42\x17\xe0\x13\x44\x7d\x47\xf1\xa7\xd9\xa3\x94\xe0\x28\x64\x0b\xfc\xc9\x5a\xba\x31\xca\xdb\x8e\xca\x10\x0a\xab\x8f\xee\x0a\xc2\xa9\xa8\x17\x50\xe3\x9b\x8e\x6f\x37\x47\x2f\x6f\x04\xce\x64\x92\x4f\x80\x90\x90\x86\xcc\xe2\x89\xda\x09\xf9\xaa\xd7\xb1\x5d\x89\x86\x2a\x2b\xe0\x32\x75\xe9\x0e\x31\xe1\x27\xf5\xee\x65\x6b\x93\x5a\x65\x30\x10\xe7\x72\x5e\x49\x84\xc9\xf6\xba\x84\xc6\xc5\xcc\x32\xc2\xa8\xd4\x5b\x85\xcf\x1c\xc8\x76\xeb\x0f\xd5\xc8\x1a\xb9\x67\xfa\x5b\x36\x00\x0d\x68\xd7\x3d\xec\xcb\xaf\xcc\x9e\x4d\x50\xe8\xd5\x36\xf1\x20\xdf\xd9\x1b\xc1\x5d\x16\x0d\x4b\x4f\x95\xc8\xee\x46\x7f\x92\x6e\xd6\x94\x02\xc3\x3c\xd2\x56\xc8\x00\xae\x52\xa8\x27\x91\x63\x6b\x9d\xae\x3f\xef\x57\xbc\x61\xa7\xfe\xca\x57\xe3\x08\x9d\xc6\x5e\x1a\xfd\x30\x87\x7a\x7f\x8d\xea\x42\x43\x10\x87\xf5\x8d\x0c\xe2\xc4\xbc\xfb\xbc\xeb\x42\x76\x8d\x2b\x9c\x52\x67\x74\x98\x64\x2c\x68\xec\x73\x99\xbb\x9d\xd5\x03\xd8\xdf\x72\x4c\xa0\xe0\xc4\x99\xad\x60\xba\xfc\xe1\xd6\x13\x32\x6a\x90\x1c\x93\x11\x69\xad\x7e\x7d\x7d\xb8\x3a\xf8\x6b\x28\x2f\xe9\x3e\xb8\x80\x29\xe4\xf6\x62\x3e\x21\x14\xc7\x42\x3b\xa4\x1c\xac\xf2\x2f\x27\x7b\xdb\xca\x8f\xa1\xb5\x3e\x3a\xa7\xbf\xd0\xd1\x73\x45\xbd\x92\xff\xbe\x2a\x22\xee\x44\x07\xa3\xa3\xed\x83\x4f\xae\xa5\x98\x6c\x8a\x69\x21\x56\x57\x17\x6e\x91\x84\xce\xd4\xbb\x45\x64\xa8\xf6\x5e\x73\xbc\x7f\x5f\x80\xa3\x08\x7e\x5d\x7c\x43\xee\xe4\xf7\x70\x5e\x0a\x6d\xcc\x5b\x2a\xb4\x17\x82\x5d\x15\x46\xf8\x00\x02\x3c\x1c\xc7\xad\x14\x1e\x60\xc2\x65\xb6\xa1\x6b\x34\xfd\x62\x8e\x04\xb3\xee\x52\xb6\x81\x6a\xe5\xf6\x8d\xc8\x51\x1e\x9e\xc2\xdb\x58\xbd\x1e\x42\xa7\x71\x4d\x43\x0b\x70\xa5\xb8\x15\x5b\x15\x7d\xde\xd8\x03\x04\x61\x45\xf2\x69\x0c\x73\x9b\xe9\x49\x3e\xfd\xa2\xef\x17\x29\x9b\x4f\x10\xe0\xf4\xef\xe7\x2c\xfe\xda\x7f\x66\x81\x9e\xae\x65\x97\x40\xe2\x5d\xcb\x2b\x8a\xd8\x24\x39\xb9\x33\x86\x89\xdb\x63\xa9\x8c\x19\x69\x82\x2a\x88\xdb\xb0\x1b\x0f\x06\xa5\xaa\x93\xbb\x48\xf5\x92\x56\x12\xde\xb6\xd1\xb5\xf6\x0d\x48\x9f\x54\x1c\x1e\xfd\x4f\xf5\xf4\x7b\x48\x3f\x3c\x19\xb5\x16\x28\x41\x72\xf6\x1a\xfe\x18\x84\x78\x2e\x51\x0f\xe6\xb1\xd7\x55\xfd\x71\x1f\xbe\xbf\x58\x5d\x5e\x7a\x37\xd3\xf9\xab\x7e\x24\xdb\xc0\xca\x03\x58\xd2\x4e\x47\x32\x30\x10\x64\xac\x78\x7f\x7d\xd5\xe0\xe0\x22\xeb\x7b\xae\x18\xb3\xfb\xd6\x6a\xdf\xe7\x20\xff\xbe\x9e\xda\x29\xc2\x04\x24\x82\x90\x3b\x4b\xe5\xf8\x70\x62\xcf\xc7\x59\x66\xce\xe8\x73\x74\x5b\xd8\xa2\xce\x9c\x8e\x64\xdc\xe5\xc5\xad\x8c\xc9\xec\xf4\x64\x02\xe6\x7d\x4b\xfa\xec\x9c\x3f\xa8\x96\x8e\x7d\xdf\x46\xaf\x42\x31\xd9\xd1\xfb\xd1\x69\x4e\x01\x17\xf0\x5a\xef\xfd\xf5\xa7\x77\x12\x9e\x24\x57\xc0\xf1\x9d\x83\xbb\xe3\x9c\x4f\x6e\x17\x89\xaf\xbf\x51\xd2\xf4\x38\xc1\xfe\xad\x8d\x91\x9b\xae\xf7\x45\xcf\xa6\xbc\x7c\x22\x83\x4f\x1d\xf0\xfc\xa3\xf4\x07\xb9\x1a\xe8\x99\xb9\x7b\x87\x90\xdf\x9f\xa4\x02\xb2\x58\x45\xf8\x7d\x1a\x21\x59\xb1\x7f\x7d\xf0\xf7\x6f\xe3\xd9\xf8\x57\x6d\x9d\xfe\xf4\x15\xef\x22\xa3\x38\xc5\x78\xf2\x0e\xb6\x00\x7e\xac\xd2\x36\xaf\x94\x08\xf3\xba\x39\xae\xcc\xa6\x9e\x80\xf2\x77\xc2\xe5\xbf\x5b\x45\x2d\xee\x9e\x0b\x07\x32\xb7\xa9\xfd\x3e\x76\x4d\x1d\x41\x19\xe6\x5b\xaf\x48\x8a\x3f\x45\x86\x64\x20\xc6\x24\x36\x02\x6f\x30\xcb\xdf\xa5\x7e\xee\xdc\xbf\x67\xd6\x4d\xc8\x2a\x6c\x6b\xe4\x77\xaf\x7b\xfe\x7a\xe1\x37\x6e\xb2\xef\x93\x0a\xb5\xcd\x1d\xb8\x23\x3d\xb8\x15\xfd\x57\x32\xae\xa7\xcc\x48\x35\x66\xbc\x9c\xa3\x69\xfe\x53\x3b\x0d\xd5\x09\xd2\xdc\x6b\x77\xef\xf1\x34\xec\xdb\xbc\x37\x3d\x30\xed\xe8\x20\x92\x4d\x71\xd0\x2b\x89\x4e\x5a\xb8\x7e\x19\xf3\xa7\xb2\x7b\x9c\x33\x64\x51\x7e\xbd\xaf\xf6\x4f\xee\xce\xdf\x89\x47\x8f\xb8\xb2\x3f\x01\xa7\xd2\x92\x1e\xf5\x4c\x29\x9a\x70\x80\x45\xae\xa7\x1d\x4d\x88\xbf\x1f\x16\x26\x02\x29\x15\xee\x33\xac\x39\x43\x02\x51\x1e\x65\x89\x04\x28\x85\x65\x5e\xfd\xc3\x07\xa1\x59\x82\xc4\x55\x90\xa5\x2c\x55\x17\x88\x98\xfc\x5a\xaf\x0d\x57\x53\x09\xb6\x9f\xed\x74\x8d\xa5\x0b\xb8\xe7\x4e\x63\xec\x2b\x6e\x5d\x93\xb1\x0a\xe0\x36\x48\x48\x44\xe4\x42\x19\x28\x90\xc3\xf5\xd8\x8d\x97\x5a\xb9\xf3\x49\x89\x20\xcc\xc5\x80\xec\x2e\x51\x59\x4f\x29\x0c\x75\xd1\xcb\x83\x9b\x66\x08\x0a\xa4\xd5\x86\xfc\x8d\x0e\xad\xe8\xfb\x4e\x04\xa7\x07\x22\xcd\x3a\x0a\x27\x60\x2d\x21\xe2\xa0\xf5\x79\xce\xf7\x97\x8c\x22\x1f\x89\xc9\xb2\xaf\x91\x93\x2f\x9f\x9e\xc5\x66\x2f\x9b\x2f\x6e\x44\x6b\x08\x95\xd5\xf5\xdf\xe7\x8f\x4a\x5d\x4d\xc7\x71\xf1\x15\xe9\xac\x0e\xe9\xbd\x95\x72\x9d\xaa\x08\xd8\x7f\xea\xc3\xfe\x65\x2d\x7a\xd4\xfb\xca\x1d\xdd\x1b\x84\x7c\x6a\xa8\x4f\x97\x97\xfd\x7a\x39\x6a\x6a\x58\xd8\x5a\xa8\x19\xdc\x0a\x3f\x97\x5d\xcd\x6b\xcd\x09\xcf\x92\x45\x56\xc2\x77\x76\x85\x00\x3c\x65\xe7\x21\xd5\xec\x27\x83\x29\x65\xbd\x6c\xaa\xb9\xf6\x37\xaf\x8d\x68\x78\xcc\x33\x83\x32\x3f\x2b\xae\xed\xbe\x1a\x82\xa3\x8e\x07\x5e\xea\xf1\xe5\xec\xeb\x56\xc9\x92\x29\x1c\x57\x59\x15\x37\xf5\x3a\x2f\xb1\x3c\x79\x07\x4f\x09\x31\x0c\x4a\x2c\x3b\x32\x98\xf3\x10\x80\xb5\xf8\x94\x94\xfd\xc2\x4c\x91\xab\x5c\x9f\x9f\x72\x18\x4e\xfc\x5d\x6e\x81\xb7\x06\x92\x00\xbd\x81\xea\xd0\xc4\x8c\xeb\xc6\x64\x03\xf7\x3f\xe7\x80\xff\x0a\x7d\x7e\xe2\xc2\x10\x54\x60\xa3\xd2\xdb\x07\xe8\xf4\x71\x89\xb9\xb0\xec\x3d\x4c\x99\x7b\x3c\xa4\x94\xda\x3e\xe7\xe3\xf4\xee\xfb\xc4\x35\x45\xca\x8b\x61\x97\x3c\xc0\x59\x3d\xee\xea\x86\x6d\xb4\x62\x21\x7d\x94\x57\x53\xfa\x6a\xa9\xfa\x9a\x5c\xe9\xd9\x92\x24\x4f\x2f\xc2\xdb\x78\x87\x29\xea\x38\x1d\x3c\xe7\xa5\x1b\x55\x7e\xe5\xf9\xe3\x12\xb3\xd2\x0c\xbf\xfa\xaa\xdb\x34\x46\xc3\xb4\x64\x8d\x6f\xce\xef\x9d\x6a\x2c\xa1\x95\xa4\x64\x1d\xc8\x47\x3e\xcd\xd3\x5d\xc8\xf6\x5a\x3b\x44\x9a\x7d\x1f\xf3\xc1\xda\xd4\x85\x5b\x73\x66\x24\xc2\xa0\xb4\x23\x8c\xc7\x30\xe4\xc6\xcd\xf7\xd3\x3f\xe9\xc1\xff\x0a\x00\x7e\xe2\xd0\x54\xff\x62\xd3\x23\xfb\x22\x52\x43\x6c\x31\x86\x17\x35\xc2\x8e\xc9\x0b\xc7\x4a\x58\x9e\xbe\x45\x91\x42\x85\xe1\x74\x3a\xe2\xc9\x4c\xa6\x5b\x02\x06\x57\xdd\x90\x65\x14\x65\x3e\x9b\xe3\x76\x6e\x56\x3f\x71\x68\x8a\x1e\xf3\xea\xb6\xf9\x22\x1b\xb4\x52\xbb\xe7\x3b\x87\x79\x7a\x2d\x70\xcc\x77\x2a\xaa\xea\xc5\x48\x59\xe3\xd3\xf6\xbe\xff\xb9\x20\xf9\x59\x6a\x85\xbc\xfe\xe9\xc3\x5a\xc8\xca\x70\x3e\x4d\x38\x8f\x00\x38\xce\x23\xb8\x23\x8d\xd3\x26\xbe\x0a\x92\x12\x17\xf1\x10\x07\xc5\x5e\xd3\xbe\x3a\x94\x3f\x22\x87\x59\x19\xc5\x86\x6d\x11\x4f\xad\x83\x1a\x10\xbd\x47\x4b\x25\xd4\x78\xed\x73\x23\x4b\x68\xe0\x62\x40\xde\xe9\x32\x59\xd1\xd5\xb9\xe0\x16\x7a\xc5\xc8\x64\x5c\xbf\xdd\x11\x8a\xfe\xcf\xe7\xfd\xaf\x20\xe4\x27\xd6\x0e\x03\x9e\xcd\xcd\x18\x7e\xb9\x65\xc1\x9f\xe8\xae\x24\x0e\xc9\x9a\x51\xd2\xe1\xd5\x7f\x74\x1a\xb0\x4c\xcf\x5e\xec\x25\xd7\x6a\xdc\xca\x3e\x7b\x06\x7b\xe1\x1e\x55\x34\x61\xfa\xd4\x06\xba\x26\x30\xe9\x8d\x0b\x83\xb6\x5d\x72\xdd\xee\x09\x82\x2f\x4f\x95\xf8\x25\x3e\xad\xf0\x1b\x80\x64\x89\xb9\xf8\x35\x6a\x36\x32\xeb\xb4\x94\x5d\xaf\xf8\x8c\xd4\xa7\xa5\x8e\xaf\x3c\xd0\x72\x77\x4c\x1c\x97\x59\x6a\x2f\x3a\xb1\xee\x40\x9c\x22\xd3\x2b\x3f\xb2\xa3\x59\xb8\x06\x2c\xb5\x92\x2b\xb8\x2a\xb7\x48\x29\x5b\x86\xf0\x43\x2d\x71\x61\x59\xec\x7c\x14\x43\xf3\x58\xcb\x7f\xce\xe6\xff\x15\xb4\xfc\xc4\x63\xc9\xfe\xf5\x79\x79\x0e\x1e\x1f\xc4\x7d\xf9\x51\x66\xde\x86\x85\xbf\x35\xe4\x94\xe3\x60\xb5\x43\x21\xce\xe2\xaa\xe2\xf9\x23\x15\xcb\xed\xff\x03\x3c\x96\xaa\x7e\x69\xe2\xc2\xf2\xb9\x55\x23\xbc\x2e\x52\x7e\x69\x44\x39\x43\x27\x1a\xe9\x58\x97\x98\x64\x46\xc2\xc3\xdf\x2f\x1e\x97\x01\xc9\x1d\xbf\x2b\x0a\x46\x26\x21\x7d\x6a\xa1\x2e\x87\x36\xc0\x9a\x5e\xb5\x9b\xc3\xb4\xcf\x25\x79\xc9\xbf\x82\xd1\x42\x8f\x24\x34\x30\x01\x2b\x81\x26\xbb\x8b\x41\x39\x3a\xfa\x04\x0f\xfc\x02\xb1\xfe\x64\x3f\x3a\xde\x72\x17\x0a\x07\xef\x71\xf1\x23\xea\x21\x8e\x5d\xbe\x4e\x38\xfe\xc7\xb4\xff\x0a\x07\x7e\xe2\xa2\x10\x30\x90\x80\x69\x9f\x03\x98\x54\x93\x8a\x2a\xeb\x5a\xf1\xc9\xd9\x66\x54\x17\x56\x64\x38\x34\x9d\x5c\xb7\x6b\xb1\xce\x2e\x0a\x18\x04\xfb\x36\xc0\xc3\x39\x07\xec\x6d\x99\x8e\x55\x33\x29\x41\x94\x64\x6a\xab\x7d\xb3\x2b\xf9\x5e\x81\x71\x4a\x5b\x62\xc6\x91\xe2\x96\x50\xba\x3b\x6a\x29\x20\x7a\x81\xac\x4b\xbb\xf8\xa9\x77\x99\x89\x50\x82\x6c\x65\xf7\x15\xf4\xc2\x0a\x0b\x24\x0a\xee\x2e\x5b\xfc\xf6\xb6\x42\xb1\xf9\x37\xb0\xc8\xa3\xb5\x38\xf9\xf6\x2e\x26\x90\xf5\x3d\xc1\xb7\x4b\x7c\xa6\xe3\x14\xa4\x2f\xdb\xc9\x86\x4f\x74\xbe\x11\x6f\x73\x58\x7f\x22\x55\x89\x5e\xfb\xff\xef\x70\xee\xec\xf1\x1b\x9f\x6a\x0c\xe3\x07\xd3\x69\x71\xbb\xc6\x42\x8c\x2e\x7d\xad\x41\x9b\xb3\xaa\x34\xdc\xdd\x5b\x96\xc1\x5c\x84\xd5\x07\x3f\xf1\x1b\x6f\x8f\xa7\x44\x42\xa0\xd7\x2c\x1b\xbf\x25\x0f\x41\x9c\xc0\x14\x77\xce\xdc\xf5\x77\xa7\x55\xa4\x8e\x77\xb3\xec\x47\x8e\x60\x3e\x3b\xd1\x01\xd1\x6b\x14\x20\x8e\x1d\x14\x35\xd2\x2b\x7c\xa9\x32\x78\x76\xa0\xda\x90\x72\x49\xd6\x7e\x7a\x7f\x43\xf5\x80\xbd\x8e\xcd\x80\x43\xdf\x84\xad\xb8\x51\x07\xb8\x5c\x93\x04\xec\x5a\x3b\x64\x7f\xed\xce\x87\x46\xc2\x0f\x02\x97\xf8\x4b\x9e\x89\x7b\x29\x6f\xdf\x27\xea\xd0\x31\xf4\x4a\x3b\xc7\x01\xb8\xa3\x8a\x37\x04\x3c\x95\x83\xe1\x28\x38\xca\x42\x97\xb5\x98\xdd\x76\x3a\x9d\xad\x86\x31\xac\x4d\x9d\xbb\xd1\x56\x67\x92\x25\x1b\x40\xa7\x5d\x83\xd5\x2b\xc1\x77\xa7\x04\x94\x4b\x6a\x9d\xb0\x9e\x04\x92\x66\x2b\x45\x0e\x89\x1a\xeb\xa2\x46\xba\x6a\x9a\xb5\x58\xdd\x02\xed\x60\x76\x3f\x41\x5a\x52\x5d\xf4\xec\x42\xa4\xa5\x69\x3c\x42\xf1\x87\x0b\xae\x2d\x82\x47\x26\x9f\xa8\xa6\xba\xbb\x43\x7b\x83\x9f\xd3\x5b\x90\x4d\xc4\xb9\x66\xba\xd4\x61\x81\x4e\xcc\xfb\x57\xa9\x07\x24\x01\xda\xfb\x17\x72\x9a\x42\x03\x83\x0f\xbb\xeb\x68\x97\xad\x27\xd8\x59\x80\x68\x4e\xa7\x73\xa1\xa5\x9e\x63\xd2\x4a\x53\x85\xa9\xf7\xd9\x67\xe2\x33\xae\x5f\x8e\x3f\x05\x88\x72\x5e\xf4\xcd\x28\x2f\xde\x26\x82\x9d\xfc\x3e\xa2\x7e\xf6\x30\xe6\x83\xdf\xb9\x26\x66\x8d\xd5\x93\xab\xe5\xfc\xe9\xbb\x9c\x0c\x9c\xc7\x9e\xbf\xf8\xc3\x98\x15\xf8\xd4\xb4\xfc\xb5\xaa\x3c\xc3\xb7\x8b\x73\x86\xe4\x4b\x73\x14\x16\x56\x54\x47\xbc\x2b\xd1\xcf\x97\x90\x73\x67\xf4\x57\xab\xc3\x6b\xec\xf2\xc5\xef\x79\x01\xa5\xd6\x45\x8a\x46\x05\x42\x74\x8f\x90\x11\x7d\x73\x6b\xb7\x64\xfa\x7b\x96\x1b\x91\x93\xd6\x37\x18\xb3\xcc\xb9\xd8\xed\x6b\xd0\x03\x40\x07\xd5\x27\x01\x66\x7d\xb5\x73\xfc\x18\x0c\xec\x74\x0a\x01\xe3\x96\x21\x47\xd5\x2f\x8f\xc9\xe9\xe6\x2d\x7c\x37\xdb\x78\x02\xa6\x8d\xe0\xd9\x48\xa9\x4d\x3a\x85\x47\x7b\x3c\xcc\x8c\x8c\xc6\xaf\x28\xec\xc0\x2e\xe3\xb7\xd8\x49\xad\xaa\x3a\xeb\x43\x7a\xc5\x09\x83\x09\xbd\xd6\xdf\x8f\x2a\x12\x42\xad\x58\x00\x2d\x67\x94\x10\x32\xb5\xd2\xcd\x40\x4e\xcd\xe4\x84\xed\x04\x73\xe2\x54\xb0\xe1\x52\x70\xff\x2d\x37\x1a\xc8\xad\x18\x8b\xc9\xaf\x42\x3c\x5f\x89\x26\x30\x5e\xf1\xfd\xe6\x64\x13\x7e\xd1\x77\x56\x46\x66\xf5\x7e\xab\xd0\x72\x9c\xfb\x62\x67\x0e\x74\x8f\x1e\xa3\x25\x63\xc7\xd6\x78\x1f\x4f\xf6\x87\x9b\x7a\x95\x8f\x76\x4d\x88\x88\x3e\x5d\x9a\xb9\x2e\xfe\x66\x41\x51\x67\x9e\xe4\x35\x05\x5e\xbf\xb5\x6e\x83\xc4\xdd\xbc\x98\xba\xee\x77\x79\xd6\x8c\xc2\x5c\x4e\xa2\xa1\x3b\x11\x9b\xd9\x4d\xc7\xc0\x1b\x89\x0c\xde\xf1\x16\x70\x72\x55\x4f\x4d\xd2\x2b\x91\x0f\x58\x97\x82\xcd\xc9\xc1\x21\x35\x67\x18\xf8\xee\xb8\xaf\xa3\xcd\x19\x14\xe5\x42\xa8\xb2\x38\x4b\x25\xd4\x80\x97\x0a\xb3\xaf\x27\x6e\xd1\x6e\xc8\xf6\xb4\x17\xd2\x54\xe8\x82\x62\xe6\xcb\x9b\xc0\xaa\x83\x81\x45\xee\x34\x0b\x77\xc6\xa4\xa3\x11\xfb\x77\xa9\x4a\x95\x1f\xdf\x72\x32\xf8\x9d\x66\x40\x53\xbc\x10\x04\xe0\x8f\xa2\xbc\xe2\x61\x8d\xc7\xcb\xe0\x10\x46\x7f\x46\xe0\x39\x13\xed\x00\xb6\xbf\xd7\x01\xd9\xb7\xcf\x6b\x90\x29\x1d\x42\x6c\xd4\x95\x44\xd1\x39\x85\x1e\x62\x07\x7a\x8a\x34\xa9\xbf\x9f\xd2\xa4\x58\x57\xe0\x00\xce\x81\xe8\x01\xe1\x83\x00\x66\x74\xe4\x28\x61\xcf\xbd\x94\x65\x01\xf1\xcf\xc9\x49\xc7\xea\x27\xa4\xdf\xf6\xe5\x25\x19\xcd\x27\xad\x81\xbf\xaf\x7a\xa9\x7e\x3d\x86\x4b\x26\x7e\x5a\xd6\x7f\xec\xea\x74\x70\xe7\xb3\x53\x0f\x93\xe0\x9b\x87\x3f\xba\x17\x7c\xce\xa7\xcf\x2c\xe0\x2d\x2a\xf4\x13\x59\xaf\xb2\xdd\x25\x92\x8c\x87\xcf\xe3\x5a\xbd\x90\x31\xcc\xd3\xb6\xc6\xce\x80\x9e\xc2\x37\x26\xc9\xd0\x08\x94\x91\x29\xc0\x7c\xb4\xf2\x7e\xf2\x65\x9e\xca\x7d\x6b\xb7\x30\xab\x0c\x28\x48\x3d\x34\x64\xf8\xe8\x4a\xe7\xcf\x72\x0f\x0b\xce\x5b\xae\x91\x26\x00\x7d\xf6\x81\x3f\xe6\x90\xe5\xac\x1a\x9b\xd3\xf3\xd7\xcb\x07\x01\x48\x09\x46\xc8\xe2\x58\x08\x3e\x39\xed\x18\xb7\x68\x9a\x36\x87\xa3\x1a\x30\xc6\x8c\xae\x2e\xb0\x27\xb2\xe4\x19\xbc\x16\xfc\x1e\xc4\x2f\x33\x13\x89\x28\xb7\xef\xe2\xbb\x94\x39\xce\x3d\x53\x45\xcf\x5c\x0e\xa6\x5e\xbe\xf7\x1a\xda\xcc\x9f\x40\xbe\x9f\xfa\x6e\x2d\x68\x47\xa0\x40\xc2\xb8\xac\xfe\xa9\xf5\xbc\x78\x14\xe2\xa6\x3d\x2b\x24\x8c\x1f\x0c\x72\xf0\xf1\xfe\x88\x15\xa4\xe1\xa7\x31\x33\x44\x45\x7d\xbf\xdd\x4c\xf1\xf7\x29\x64\x21\x89\x75\xb5\xaa\x0e\x29\x88\x1d\x39\x63\x20\xc1\x4d\x5d\x37\xfa\xe9\x76\xb1\x3c\x79\x38\xb7\xb3\xd8\x42\x2c\x9d\xd8\x78\x0c\x7e\xe4\x78\xde\xd0\x9e\x29\x78\x54\x48\x7a\x6b\xd3\x4d\x05\x10\x1d\x2f\x12\x39\x29\x41\xf0\xe1\xfb\x5d\x8b\x4a\x71\xcf\xe0\xe4\x65\xb1\x46\x11\xc8\x28\x91\x95\xe8\xea\xbb\xfb\x41\x71\x0d\x49\x06\x38\x94\x0c\x18\x37\x72\x32\x15\x1c\xd9\x9b\x60\x2e\x47\xa2\x2d\xc4\xaf\x57\xba\x95\x2e\xec\xf5\x15\xdf\x7d\xbb\x0c\xad\xd6\x4a\xde\x06\x2e\x87\x01\x9f\xe3\xd7\xdc\x5e\x23\xa3\x0c\x62\x5f\xc6\x31\xe1\xa5\xce\x1d\x36\x94\xf4\x7e\x1b\xe8\xae\x54\xcf\xf0\x0c\x31\x6b\x03\x73\x65\x67\x54\xda\xc8\xa3\x47\xd4\x86\x03\xa7\xac\x35\x0a\xe3\x7c\xc6\x87\x4a\x3e\xfa\xc2\xaf\x22\xb7\x94\x9d\xda\x25\x3f\xe3\x09\x81\xb0\x5b\x6b\x8e\xa4\x86\xb8\x4c\xb1\xed\x01\x02\x43\x6c\x23\x85\xe1\x9d\x43\xa7\xa9\x6b\xe7\x7c\xc4\x23\xe9\x06\xf4\x89\x22\x25\xa4\x0d\x90\xa1\x81\x7e\x03\x6f\x0c\x39\x63\x3c\x46\x5b\xf6\x6d\x1e\x36\x1f\xe9\xda\xa3\x35\x3f\xa6\x59\x04\x5f\xa5\xf6\x33\x87\x12\xf5\x8e\x06\xb0\x57\x05\x62\x39\x56\xbc\xeb\x37\xf4\x43\x92\x93\xa0\x59\x22\x06\x4f\x87\xa9\x84\xae\xed\x16\xab\x73\x22\x89\x71\xbf\xfb\x63\xd5\x01\x33\xf6\xde\x2d\x09\x10\x59\x42\x71\x11\xcd\x72\x31\xe3\x3a\x3e\x4a\x94\x7b\x19\x55\x3f\x1d\xc8\x6c\xcf\x54\x93\x07\x4e\x57\xd1\xaa\x6e\x02\xf5\x3a\x77\x4d\xac\x46\xfe\xaa\x98\xbb\x95\xf0\x8c\x89\xcd\x61\x8f\x73\xf8\xb0\x4a\x07\xdb\x9e\x49\x8a\x56\x3e\xea\xf5\xdd\x70\x90\xcd\x15\x9f\x4b\x98\x94\x44\x52\x34\x10\x45\x94\xc9\xbf\x3b\x6a\x7b\xff\x91\x1a\x91\x7c\xbf\xbc\x45\xeb\xdd\xfd\x4e\x43\xf2\x13\x54\xe8\xbf\x20\xd2\xe8\x0b\xfa\x8d\xf1\x1c\xad\x45\xbc\x10\x8f\x34\x95\xf8\xf6\x0a\x3f\x4d\x38\x99\x62\x9b\x6a\xbf\xa6\xf2\x3b\x4b\x05\x59\xed\xfc\xbf\x43\xd9\x7f\xb9\x34\x3f\x31\x68\x18\x28\x20\xbc\x07\x38\x8c\x05\xa3\xd5\x7d\x86\xa9\x39\xb5\xfe\xb2\xde\x91\x81\x55\x26\x5f\xab\x85\x85\x1f\xe5\xac\x84\x31\x1f\x67\xa2\x05\x0f\x32\x45\x52\x96\xd2\x1d\xd3\xaf\xd0\xd6\xb6\x20\x1f\xa1\xb8\x4b\xad\xf9\xe8\xb4\xe9\xd5\x2b\xee\x3d\xbf\x20\xb6\x42\x1e\x0d\xbd\x55\x06\xe7\x3c\xa2\x36\xcb\xf3\xf5\xcc\xe2\xbd\x69\xa4\x74\x31\x51\x95\xf5\xc7\x7a\xda\xa1\x9f\xbc\x3f\xa0\x4a\x96\x4b\x34\x4e\x6a\xd9\x0f\xe8\x03\xc9\x14\x5e\x99\x0d\x6e\x7b\xe2\xb4\xed\x3b\x7c\x80\x5c\x6f\x0c\x89\xe8\xce\xee\xd0\xd4\x0a\x58\x17\xe3\xfe\x92\xc7\x37\x8e\xaa\xfc\xf7\xb8\xf9\x5f\xfb\xda\x4f\x4c\x18\x1d\x1c\x89\x66\x27\xa5\x06\x41\x34\xbb\xbc\xf0\x38\x14\x4d\x53\xcb\x54\xf1\x1c\x8d\xa2\x5f\x89\x05\xd1\x54\x47\x86\x8f\x33\x5f\x70\x58\x70\x01\xfe\x5e\x96\x72\xe7\x9d\x28\x67\x6f\x21\x09\x3c\xd3\x7c\xc3\x8b\xb9\x4b\xef\x5f\x72\x0a\xb6\xea\xd5\x56\xc8\xbb\x5f\x5f\xf5\xc2\x82\x13\xec\x94\x22\x05\x84\xe6\xf1\x48\x38\x84\x79\xe7\x32\xa8\x50\x32\xdc\x92\x60\x9e\x02\x5c\x4a\x99\x7f\x1e\xa2\xac\xe5\xda\xd2\xb2\xd5\x82\x98\x23\xca\xeb\x07\x1a\xb3\x8d\x76\xfa\xca\x5d\x71\x8d\x57\x26\x24\xa8\xbe\x21\x84\x72\x3c\x70\x03\xe6\x55\xdb\x30\xd9\x73\x18\xa6\xff\x58\xf6\x9f\xbf\xa1\xb8\xb0\x14\x04\xd8\x17\x33\xd0\x22\x59\x8a\x3f\xbe\x66\xf4\x95\xab\xbd\x2b\xf1\x17\x0d\x55\x00\xc7\x33\x1a\xed\x72\xdb\xf8\xca\x6f\x31\x7b\x6c\x99\x02\x10\xb2\xc9\xb9\xcf\x4f\x8a\xc2\x58\x8e\x7e\x91\xfc\xc8\xa9\x19\x99\xcc\xfd\xca\xde\x3d\xaa\xe2\x94\xe9\xd6\xbb\x24\xd4\x62\xe4\xbc\x44\x1a\xf0\x87\x05\x28\xef\x1c\x10\x8a\x45\xcf\x22\x1a\x26\x22\xbc\xc2\xbf\x37\x10\xce\xbc\xd3\x80\x75\x7d\x97\x79\x41\xaf\xe3\x61\x57\x4c\x0d\x30\xc6\x75\x33\x62\x6c\xb7\x25\x88\xd8\xea\x19\xcc\x62\x0b\x7d\x3a\xf5\x8d\x64\xd6\x24\x48\x2c\xad\x58\x20\xea\xd4\x3a\x0a\xba\xc7\xed\xfe\xe7\xb4\xf9\x5f\xbb\xd6\x4f\x1c\x13\xc2\x07\x9c\xad\x52\xdc\x50\xba\x92\x65\x6b\x42\xa4\xb2\xb4\x7c\x60\xbd\x4d\xb0\x7d\x49\x85\xf1\xd1\x48\x8c\xfc\x18\xaa\xec\x11\xcf\xe1\x06\x1f\x64\x22\x3c\x35\xb1\xd6\xd3\xcd\x66\x46\xd9\x31\xfa\x25\x88\x3b\x44\xa8\xb3\x60\xa8\x1b\x6c\xfc\xa6\x0f\xb6\x3d\x65\xb6\xb3\x93\x8a\x10\x9c\x67\xcb\xb5\x74\x52\xc4\x93\xc9\xd7\x85\x72\x5c\xda\xd2\xac\x23\x20\xe4\x68\x40\xa6\x12\x4f\xfd\x49\x4c\x80\x5f\x6f\x79\x76\x2b\xc1\x0d\x10\x6d\x97\xd0\x7a\x14\x88\x87\x63\xc0\xe4\xb3\xe0\xd7\x3b\xe6\x8d\x79\xd9\xc8\xa7\xfe\xba\xeb\xe0\xde\x23\xbd\xe1\xfd\xe5\x0d\xbd\xcb\xf5\xdc\xff\xda\x8a\x0d\x26\x49\xe9\xbb\x43\xfd\x88\x24\x7f\x2b\x1a\x32\x40\xad\xe2\xeb\x4c\x3a\x4d\xee\xce\xc1\x1b\x9b\x70\x63\x92\x40\x77\xa8\x0d\xf8\x89\x0f\x9c\x3c\xbc\x80\x3c\xcf\x12\x39\x4d\xae\x52\x75\x2c\xc3\xb0\xac\xf5\xa7\x6d\x2c\xb3\xea\x68\x36\x44\xb5\x7f\xc8\x9d\xe3\x75\x56\x58\x91\xf2\xa5\xe0\x40\x34\xaa\x27\xba\xf1\x0d\x77\x43\x4c\xdc\xc5\xcf\x25\xf6\x97\x57\x4c\x16\xf9\xf2\x01\xfb\x72\x75\x1a\x2e\x15\x2e\xc5\x28\x1e\x9d\xf4\x20\x7f\x67\x97\xc4\x86\xc0\x52\x5c\xf5\x74\xc6\x89\xcd\x51\x57\xcf\xca\x37\x92\x5c\xc1\xae\x32\xa9\xf2\x77\xaf\xb6\xa6\xed\xc9\xa7\x09\x40\x66\x07\xd4\x48\xaf\x98\x32\xa8\xdb\xb1\xe4\x8f\x26\xce\x5a\x53\x63\x2b\x17\x49\xaf\x25\x3c\x91\x58\x1e\xe1\xb2\xbe\x29\x5f\x9a\x15\x03\x98\x0b\x53\xa3\x61\x23\xcf\x1d\x2f\xc5\x58\xa7\x35\x5b\x9a\x81\xb4\x1a\xdb\x6c\xcf\x9a\x67\xdb\xd7\xdb\x5a\x7b\xd2\xbd\xb3\xe5\x6f\x00\xf6\xe2\x25\xf5\xc3\x68\x5e\xc6\xcf\xba\xda\x13\x61\x4a\x3c\x23\xd4\x2e\x6b\x96\x44\x48\x5e\xfd\x63\x9a\x5f\x9b\xa9\xe8\xe4\x37\x7e\x6b\x81\x3e\xec\xb2\x4e\xa2\xed\x5a\xf2\x09\x7a\xac\x4b\x9e\x7e\x25\xbf\x0a\x1f\xa3\xde\xdf\xf8\xa0\xf3\xf8\x4d\x0d\xa9\x72\x72\xde\x1b\x7d\x9d\xbf\x46\x25\x5b\x54\xc7\x7a\xc2\xd2\x2c\x1d\xd4\x96\x5f\xff\x8a\xfb\x76\xc2\xfc\xf6\x85\x47\x87\xf9\xfd\x3c\x44\x36\x86\xa5\x1d\x6a\xaf\x24\xa8\x75\x39\x74\xee\x93\x8e\xbe\xaf\xa7\xa6\xd8\xc5\x3d\x32\x52\x47\xe2\x97\x9a\x27\x46\xfd\x31\x39\x6b\x34\xfe\xf7\x67\x16\x07\xd6\x09\x7f\xed\x9f\x90\x2a\x4b\xe6\x75\xb9\x64\xa4\x0d\x8a\x28\x24\x99\x37\xa1\xe3\xc6\xfd\x4e\xb8\x1a\x39\x4e\x89\x41\x97\xb1\x91\xe3\x89\xec\x05\x80\x1e\x66\x77\x8a\x91\xdf\x71\xc1\xa6\xd3\xcc\x0e\xd7\x8e\xf3\x16\xc2\x71\x98\xef\x90\x7b\x37\xe6\x3f\xa5\x5c\x51\xca\x7f\x34\x04\x2a\xf9\xc7\xef\xef\x87\x50\xc3\xdf\x68\x36\x9c\x08\xa7\x7d\x72\x3d\x55\x78\x79\x93\x9b\xa6\x90\x99\x9b\xd0\x14\x49\xba\x41\x97\x8f\x03\xa2\xb7\x33\xf7\xbd\x0c\x1c\xb4\x46\xa3\x04\x8d\xe6\x61\x5a\xc4\xab\x94\x50\x52\x22\x8c\x49\xb9\xfd\xf9\xba\xef\xb1\x50\x62\xe6\xe8\xc0\xfe\xeb\x33\x56\x43\x28\xdf\x25\xcd\x9a\xc8\x25\x4e\xcc\x2a\xc8\xd7\x8c\x52\x42\xf5\x6b\xe6\x14\x42\x1f\x32\x43\x73\x5e\xfb\x87\xa4\x4b\x03\xa2\xde\x41\x9f\xc8\xb8\x96\x9f\xbf\xbf\xbb\x6c\x0c\xdf\x3d\x9d\x73\xe8\x97\x93\xe3\xe9\xf4\x6d\xd7\x38\x09\xf8\x10\xc0\xc3\x97\xe3\x04\xbe\x2a\xab\xb5\x19\xea\x0b\x25\xe7\x4c\xce\xde\xd4\xf0\x07\x1d\xc2\xdd\x87\x10\xe4\xcc\xf3\xfe\x03\x1d\xc1\x89\x91\xb8\x8d\xec\x6f\xd4\x7f\x7d\x01\x99\x56\x7c\xb3\x85\x4f\x51\x0d\xdd\xfd\xb8\xa6\xd5\x99\x52\xf4\x96\x7b\x04\xce\x28\x2d\x91\x80\x62\xf5\xb0\x0a\xdc\xd0\x8d\x05\xc0\xdd\x93\x47\x9b\xd2\x2a\xd5\xfb\x2e\x49\xc0\xac\x40\x39\xf8\xae\xd0\x8e\xfa\x3d\xf3\xbd\x20\x33\x9a\x52\xa7\x8d\x37\x2a\x44\xf7\x09\xd8\xc9\x06\x1b\x9f\x7c\x51\x97\x6a\xbc\x32\x4f\x23\x78\xcc\x7e\x67\xa5\xf7\x13\xe2\x6e\x5f\xb4\x75\x21\xe9\x96\x62\x6d\xe8\xcc\xbd\x1e\x10\x25\xa1\xf5\x9a\x34\x1f\x1b\xf4\x5f\x4f\xf7\xde\x0b\xd1\xad\x40\x70\xf5\x6f\x5a\x08\x57\xef\x19\xe0\x59\xa2\x72\x70\xf0\x66\x81\x05\x76\x75\xf4\x04\x4a\x57\xba\xf8\x80\x9c\x58\x9a\xeb\x9c\xb9\xe8\x93\xd3\x2e\xa4\x8a\xa9\x67\x42\xc4\xdc\x3a\x7f\xd2\xba\x49\xdc\x3c\x30\x18\xf1\x47\x37\xaf\xbf\x72\x53\x7d\x55\xbb\x13\x2e\x8f\x3b\x4e\x15\xb3\xdf\x65\x63\x41\x14\x7c\x21\xa1\x79\x84\x37\x94\x45\xd9\x2d\x50\x36\x68\x09\x80\x50\x3e\x93\x75\x10\x08\x55\xe9\x37\xf0\xb3\x32\x26\x56\x87\xa3\xa3\xcb\xf9\xb9\x2d\x13\xce\xc3\x59\xd9\x16\x47\x60\x09\xce\x9e\x4e\xcc\x6a\xec\xc7\xcd\x98\xc9\x62\xe5\xfb\xe2\x8b\xd5\x8c\x2a\xb1\x77\x5b\x6c\x6d\xad\x8b\x1c\x7d\x26\xfc\xde\xf4\x87\xfc\x19\x40\x97\xc2\x5c\x95\x0a\xbd\xe4\xad\x6a\x28\x0c\x3f\xe6\x82\x6e\xa8\x6d\x02\xeb\x58\x81\x92\x7d\xc7\x83\x08\x05\x31\x5d\x2f\x31\xe0\x04\xb4\x8a\xd2\x99\xc3\x4d\xa8\x76\xb8\x79\x39\x13\xea\x06\xeb\xbb\x29\x14\xac\x38\x9a\xc9\xb4\x7d\xa6\x83\xd3\x14\xae\x62\x48\xf9\x20\x03\x38\x6d\x31\x03\xcb\x88\x1d\x52\xbb\x94\xc5\xd5\x74\x5b\x5d\xd8\xf2\xf2\x0e\x81\x3f\xcd\x04\x3e\xfd\x01\xf8\x51\x4f\xd0\x75\x1a\xe3\x53\x7f\x95\x5a\x94\x1f\xbe\xc9\x8d\x42\x9f\xf5\xc1\xeb\xe3\x7c\x47\x72\xdf\x48\xcb\x38\x70\xa3\x3e\x40\xa4\x2b\x6b\x56\xc5\x98\x30\xba\x0e\x4e\xdf\x35\xf8\xf8\x58\x3d\x13\x39\x1d\x9b\x20\x78\xd2\x3f\x6a\xee\x1a\xf0\x66\x25\xe7\x6c\x39\x7b\xa2\xe0\x58\x64\xeb\x79\x23\xc0\x50\xff\xaf\xd2\xac\x23\x43\x4f\x84\x73\xbf\x1d\xd8\x0e\x6c\x95\xbd\x5b\x7b\x3a\x6c\x3d\x3a\xba\xe9\x9e\x6a\xe8\xe7\x6f\xb9\x99\x73\xc2\x4e\xd6\xc0\x27\x15\xeb\xf8\x39\xe2\x72\xa2\xa0\xe6\xe2\xbd\x15\x42\x3d\xc8\xd1\x00\x39\x74\x5f\xae\x56\xe1\x7e\xa4\xda\xfc\xe5\x75\x49\xc2\x57\x30\x72\x16\xcd\x58\x47\x5e\xb6\xf5\x43\xd9\x7f\xc0\xda\x8a\x1e\x93\x49\x84\x45\x7c\x2f\xac\x2a\xf7\x86\x4b\x5e\x08\xfe\xce\xe5\x9d\x24\x98\xf8\x30\x9c\x8a\x41\xc1\x1e\xe4\x14\x0f\xf2\x6e\xb6\x46\xbb\x28\x4c\xda\x53\xf8\x1c\xff\x2b\x58\x7a\x5d\x8a\xdf\xd9\x62\xa3\x00\x16\xe4\x0b\x61\xe9\xe8\x25\x3c\x28\x5c\x61\x1f\xa1\x5d\x37\x3b\xab\x7d\xa9\xc2\xc1\x62\x6e\x15\x1f\x2c\xca\x5f\xab\xa2\x93\xc0\x86\x0a\x25\xff\x6b\x95\xb8\xf1\x97\xd3\xda\x07\x29\xaf\xb5\x0c\xcd\x88\x36\xb1\x03\xdc\x76\xcc\xd7\x73\x9c\x06\x66\x71\xfd\xf0\xb0\xdf\xbf\x9b\x24\xde\x02\xcf\x27\x3f\x76\x9f\xb1\x59\xee\x8c\x7d\x18\xa4\xf6\x64\x70\x38\x17\x3f\x1a\xc5\x0a\x20\xf4\x9b\xee\x91\xb5\x91\x08\xe7\xa0\x47\x02\x81\xad\x16\x04\xde\x0a\x93\x1f\x4c\x0b\x79\x8a\xb1\x75\xdc\xc2\xce\x59\x5b\xf3\x35\x45\xf4\x22\x6d\xbc\xc2\xaa\x25\xa8\xe8\x7e\xc5\xa1\x02\x9b\x4a\x4f\xae\x49\xa4\x6a\x25\xce\x10\x62\x82\xdf\xe2\x60\xc2\x45\x61\xd8\xad\xe9\xd7\x07\xc6\xf0\x91\x6f\xef\x23\x1c\x15\xca\xf0\x81\xab\x51\xb0\x54\x52\xb2\xb7\xf9\x86\x5b\x5f\x94\x42\x8e\x44\x54\xd8\x62\x62\x63\xd9\x9b\xd5\x71\xfc\xcd\xb5\x0f\xb6\x3e\xf1\x32\x67\xc0\x98\xec\x72\x43\xad\x84\x30\x87\xea\xcb\x89\x34\x49\xed\x74\x2e\xf3\xe7\x1b\x5e\xde\x68\x45\x2d\x1e\x99\x4a\xd5\x01\x17\xe9\xcf\x46\x33\xff\x04\xed\xff\x72\xd3\x7e\xe2\xe4\x10\x10\x78\x40\xd0\x26\x96\x19\x80\x1a\xe7\x27\xe3\x7a\x21\x25\x15\x2e\xed\x09\x14\x0f\x0d\x5d\x0b\x80\x19\x62\x6b\x4e\xca\xe2\x26\x97\x23\x9d\xb5\x05\xde\x41\x54\xfa\x61\x5a\x42\x7b\x52\x5f\x0b\xdd\x3c\x42\xde\x1d\x35\xe9\x3b\x57\x87\x2f\x11\x89\xa9\x33\x55\xf6\xd8\x2d\xd9\x0c\xc2\x20\x44\xe4\x42\xce\x06\xb5\xe3\x29\xfb\x64\xaa\xd8\x92\x9f\x65\xa3\x43\x14\x66\xb8\x6d\x83\xac\x37\xf1\x6e\x2b\x7d\xf2\x24\xf8\x87\x05\xd8\x9c\xf9\xa1\xa8\xeb\x8a\xd6\xba\xa4\xf0\xf2\x7e\xda\x0b\xcd\xa5\xcf\xf8\x3e\x49\xc3\x9a\x02\x31\x2d\xe0\x74\xda\x80\x02\xa1\xc8\x4a\xe9\x1f\xd3\xfe\x2b\x56\xf8\x89\xc3\x40\x88\x93\x01\xa6\xd5\xdb\x45\x2d\xe4\x43\x53\x8b\xf9\x3a\x04\x51\xb1\x46\xbe\xc0\xad\x11\x19\xfa\x78\xfb\xf5\x1a\x17\xf6\x13\xa7\xbe\x16\x8c\x01\x77\xc2\xca\x77\x28\x54\x74\x09\x32\xbb\x8d\x3a\x66\x3e\xfb\x7c\xe6\xdd\xdf\x18\xc4\x44\x41\xaf\x3f\xe8\xfc\x92\xfc\xf3\xde\x7d\xc6\x17\xac\x1f\xbd\x8a\x37\x46\xb9\x74\x4e\xc5\x8d\x34\x91\x2c\xf7\x79\x83\x54\x10\x48\x2d\x6c\x18\xe4\xed\x98\x44\xad\xa0\xdc\x38\xba\x93\xa2\x0b\x88\x46\xa8\xa9\xfb\xfa\xe0\xca\xf0\xf5\x07\xc2\x14\xff\xec\xf6\x09\xc2\x32\xeb\xcf\xde\x77\xab\xff\x1a\x97\x8c\xba\xe4\xb9\x24\x50\xfe\x8f\x69\xff\xe9\xdb\xc5\x85\xa1\xa0\x84\x41\xa8\x44\x6d\xb3\xcb\x4a\x7c\x63\xf7\x88\x58\x79\x6d\x52\x34\xe1\x7c\xe8\x93\xb4\x3d\x3d\x12\xd5\x7b\x2a\x21\xa9\x34\x95\xd2\x13\x70\x76\xcd\x39\x7b\xf9\x9f\x91\x81\x9d\xe8\x92\xb0\x45\x5b\xce\x7c\xe1\x52\x1d\xfb\x8a\xb7\xcf\xd0\x5a\xa4\x32\xd4\xf1\xaf\xd8\xe1\xf1\x41\xa8\x84\xd2\xc7\xc9\x9d\x4f\xef\xe1\xf5\x71\xd4\xb9\xcf\xbf\xd8\x2c\x6f\xf7\x63\xee\xe7\xc7\x2b\xf6\x2c\x07\x96\xab\x88\xa7\x88\x20\x82\x05\xdf\xee\x8d\x4d\xf8\x08\xf8\xcb\x03\xe7\x14\xf4\x93\xc9\x4f\x06\x9d\xd1\x8e\x57\x78\x63\xab\x9f\xd2\x53\xd6\xd3\x43\x9c\x7c\x44\x4a\xaf\x0b\xfe\x87\x43\x5d\xe0\x92\x44\xbd\xb2\x65\x1a\x16\xaf\x11\x16\xd0\x55\x42\x6f\x50\xf1\x5b\xab\x31\x9b\x77\x56\x4b\x62\x64\xfc\x4e\xa2\x81\x16\xeb\x27\xde\xf0\xfc\xf2\x92\x48\x04\x34\x14\x8a\xf6\x54\x1a\x6f\x41\xaf\xdb\x97\x40\x58\x95\xcc\x8a\x0b\xf6\xb1\xb4\xc0\xb4\x52\x6a\x61\x30\xa1\x7c\xf9\xb2\x07\x0b\xa3\x03\x34\x14\x7e\x9e\x95\x2f\x57\x2e\x71\xd8\x69\x5b\x5d\x69\x59\xd8\x35\x36\x75\x08\xa6\xc8\x52\xc4\xa8\x9e\xb8\x88\x4f\x09\xc4\x66\x35\x03\xd6\x0b\xbb\x4f\xc6\xba\xa8\x4f\x41\x98\x22\xd9\x23\xd0\xef\x3f\x6e\x48\x74\x75\x19\xca\x2d\x2f\x1a\x75\x8f\x2a\x31\x87\x5f\x2d\xb4\x09\xb8\x9a\x8c\x80\x8d\xa5\x82\xd5\xf5\x0a\x8a\x93\x1c\x94\x69\xbc\x88\x31\xbe\x8c\x3e\x03\x6b\xd3\x7d\xdf\x12\xc1\xfa\x9a\xf7\x5f\x08\xe3\xfe\x3e\x7f\x20\x6f\xe2\xe3\x20\x55\x13\x9c\x3a\x06\x1f\xd2\x56\xe6\x81\x87\x05\x42\xfd\x12\x34\x92\x68\x7c\x63\x23\x31\x06\x77\x6b\x8c\x2d\xa0\xf4\x2b\x85\x6f\xa1\xea\xa2\x17\x26\x1b\x97\x47\x01\x52\xc8\x3c\xb9\xda\xa9\xf2\x1f\xf6\x47\xcc\x99\xbe\xdb\x36\x2b\xf1\x44\x46\x00\x09\xb8\xf7\x7a\xf8\xa7\xad\x63\x7c\x84\x94\x0a\x9e\x37\x1c\x6d\x48\xe7\x74\xc9\xed\xdb\x27\x6e\x97\x00\x1b\x3c\xff\xec\xa9\xa5\xa3\x67\x40\x29\x61\xc5\xbd\x0a\xa1\x12\x5e\xdf\x9a\xc8\xeb\xe5\x77\xca\x73\x30\x53\xb2\xc6\x48\xf5\x13\x3b\xdc\x53\x5d\x90\x93\x6d\x30\x96\x40\x07\xcd\xe9\x64\xce\xf0\x10\x43\xd5\x1b\xf1\x66\x8c\x48\x1c\x49\x0c\x56\xf2\x71\x77\x8f\xfa\xbe\xef\xe2\xe4\x71\x0b\x2b\x7a\x5c\x04\x20\x51\x3c\xb2\xc3\xa3\xfd\x52\x10\x41\xc2\x39\xec\xc4\x31\xb2\xc7\x8d\x6d\xe9\x4c\x42\x2f\x7e\xe5\xea\x66\x13\x97\x27\x5f\x57\xb4\x1c\x30\x18\x6d\xd8\x8a\x99\x83\x56\x1a\xaf\x0a\xe2\x96\x07\x2f\xa7\x65\x7f\x00\xa6\xf6\x83\xfd\x6f\x4e\x8e\x63\xe9\x4f\xb6\x19\x2a\x82\xa9\x60\xb3\xb8\xcf\xbb\x30\xba\x12\x54\x89\xce\x85\x2f\xd7\xec\xda\x96\xde\x3e\x31\x4a\x6e\x19\xfc\x6a\x31\x68\x8e\xf6\xef\x7d\x0c\x6a\x44\x00\x82\xd6\x2c\x18\xf4\xa5\xf8\x1b\x15\xee\xbb\x33\x9e\x81\x32\xa2\x68\x94\x38\xe5\x62\xc9\x67\x4b\x01\xa7\x76\xe4\x17\xbb\xea\xf5\x05\x33\xc0\xd1\xea\x1f\x0f\x7f\x18\xc2\x41\xea\xf5\x41\xdc\xff\xc6\xf9\xa3\xe5\xcc\xee\x65\xd6\xce\x67\xe7\x69\x33\x96\xfb\x1a\xd9\x6d\x4e\x0f\xe0\x32\x6d\x27\xfd\xf6\x04\x29\x87\xfc\x8d\xee\x44\x77\xe7\xff\x63\xec\x4c\xe3\xa9\xfa\xbe\x3f\x6e\x9e\x65\xa8\x90\x29\xa4\x94\x90\x31\x53\x92\x43\x28\x11\x25\x25\x24\xb3\xcc\x4a\xa4\x4c\xf7\x28\x64\x9e\x32\x13\x21\xb3\x64\x9e\x33\xcf\x99\xe7\x14\x2a\x43\xe6\x94\x79\xfa\xbf\xfa\xdf\xdb\xf9\xee\xdf\xa3\xd3\xf3\xf5\x39\x7b\xed\xb5\xd7\xd9\xeb\xbd\xf6\x3d\xe7\xdc\xcb\xad\xc1\x01\x3d\x5c\x87\x8f\x13\x55\x32\x51\x9a\x69\x97\x95\x13\xbb\x71\x00\x5f\x53\x1f\x7b\xf0\xe4\x9e\xb3\xe3\x46\xdf\xfa\x78\x11\xf1\x1a\x13\x9f\xa3\xde\xc1\x89\xcd\xb5\x0a\x25\x7e\xd1\xc3\x1d\x19\x64\x86\x9d\x87\x81\x94\x8a\x5c\xe0\xd9\x6b\xd1\xf7\x7d\x78\xa3\xc2\x9a\x44\x3a\x89\xc6\xbd\x2b\xba\xef\x05\x41\x02\x4f\xde\x52\xd2\xcc\xdc\x9a\xf1\x07\x7a\xc0\x53\x95\xf8\xcf\x43\xa4\xaf\xe7\x55\xe1\xbd\x9f\xaf\x28\xcb\xdd\x1f\x0e\x74\x4d\x75\xa7\xb5\x51\x4a\x5c\x8e\x14\x5d\x74\xed\x3f\x09\xbc\xfa\x5d\x61\x4a\x9a\xb7\xf2\xe8\x25\xd5\x6e\x26\x7d\x4f\xdd\x37\x5d\x7b\x25\xd1\x0f\xb4\x79\x3a\xa3\x74\xde\xf7\x97\x6e\x97\x3e\x8b\x03\xde\x3b\x5e\xb5\xd1\x93\x67\xfd\xb2\x61\x79\x33\xe9\xd7\x0b\x47\x4d\x9e\x1d\xbe\x3a\x1e\xc3\x60\x7b\xc3\xfb\x2f\x79\x86\x44\xf7\x3d\x82\xc0\x27\x46\xe5\x8f\xac\x8d\x71\x94\xa5\x5d\x1f\x79\x9e\x6e\x3e\x69\xa5\xa5\xc5\xb3\xfa\x89\x42\xe3\xfe\x6c\x07\x7d\xe8\xdc\x71\x05\x47\xb6\xf3\xc0\x42\x69\x1f\x75\x1c\xb1\xfc\x62\x1d\xdb\xd2\x25\xf4\x2c\x6b\x61\xbd\xbe\x58\x3d\x5c\xce\x72\x5e\x79\x2c\x75\xdc\xe1\xf5\x50\xeb\x09\xd1\xff\xc6\x9f\x56\x83\x2c\xf2\x4c\xf8\x1d\x18\x59\x78\x0d\xd9\x4b\xf3\x48\x78\xc7\x4a\x92\x9c\x26\x8d\x2a\x28\x8e\xea\xe5\x2d\xd6\x38\x86\x83\xec\x5a\x95\x70\x36\x23\x40\x7c\x86\xc9\x6b\xbd\x7f\xa6\xe8\x04\xb5\xef\x5d\xfa\xa2\x37\x6e\x5c\xa7\x7c\x5e\x52\xce\x41\x8b\x15\xde\xda\xff\x45\x4a\xd1\xb6\xf6\x36\x67\x94\xdc\x62\x6e\x8b\x9e\x17\x63\x3a\xc3\xb2\xe9\x60\xa1\x8c\xd0\xf9\xbb\x5d\xad\x42\xbd\xf9\xef\x58\x56\xb7\xff\x1b\x5f\xdb\xe6\x75\xad\xd0\x65\xd5\xa5\x0d\xdf\xb5\xa9\xe3\x73\x6a\xb1\x87\xfa\x4e\x7f\xcd\x99\x84\x3c\x49\x5c\x0a\x34\xd4\x48\x92\x3f\x03\xc9\x4f\xe2\x77\xb4\xfc\x5e\x86\xbd\x7a\x12\xde\xb5\x58\xeb\x62\x7f\x12\x65\x13\xc9\x22\xc7\x90\x80\xed\x9b\x1a\x5d\xab\x8d\x71\xf2\x40\xa4\x22\x48\x08\x69\x28\xb7\x6b\xf9\x2f\x2b\x5a\xb3\x86\xa7\x6f\xbb\x2f\x71\x75\x35\x97\x39\x31\x8d\x52\x24\x92\x79\x57\x16\x5c\x07\xbf\xb1\x11\x53\xf6\x73\xee\xa1\xbb\x5a\x48\xd4\xb1\xfb\x9a\x32\xce\xc3\xef\x97\x0d\x9e\x19\x54\x9e\xfa\xbc\x97\x2c\x51\xff\x39\xb6\xe7\x18\xf8\xd7\xe6\x47\xc3\x30\x6d\x23\x8d\x13\x78\xbe\x39\x6f\x3f\x68\x9a\xc5\x4b\x39\x91\xe4\x1a\x1d\x3e\x82\x47\x4c\xf6\x38\x72\x4a\x3e\x81\xbc\x1c\x34\x8d\x34\xf8\xac\x36\xa9\x66\x2b\xb1\x9a\x9e\x49\xf6\xd6\x88\x5a\xfc\xfc\x28\x77\xdd\x9e\x0a\x4b\xcf\x83\xee\xf3\xd6\xf2\xcd\x6c\x80\x29\xfe\x11\xf7\x0f\x98\xaa\x7d\x7c\xf3\xe4\x94\x1e\x4d\x3a\x37\xad\x70\x91\xc7\x1e\x1d\x47\x32\x3a\x08\x19\x0c\x46\x7f\xce\x91\x79\x81\x8f\x61\x0e\x9b\x9f\xa4\x39\x1d\x28\x97\xda\x53\x1a\xdf\x33\xf1\x26\x40\x67\xe7\xed\x87\xd5\xf1\xfa\x2b\x37\xeb\x73\xe8\x4b\x5e\x38\x01\x8f\x87\x78\x4d\x93\x7a\xf3\xfa\xb7\xd0\xba\x05\x66\x86\x56\x54\xbc\xa0\xbf\x77\x2b\xe4\x31\x3d\xcf\x95\xb8\x27\xf2\x2b\x91\xa4\xe1\xdf\x80\xc7\x30\x93\x6f\x92\x55\xa7\xf4\xec\x53\x7b\xdc\xa6\x6d\x1e\xa1\x23\xe6\x7f\x2f\xb0\x79\xb8\xef\x79\xf7\x09\x32\x8e\x6a\xa9\x77\x44\xe6\xe0\x03\xf3\xb2\x2f\x2e\x1e\x3e\x7b\x82\xe8\xc2\x09\xe5\xa7\xfc\x45\x1b\xac\x27\x20\xd2\x17\x2f\xa9\x7f\xc7\x45\x66\x30\x3e\xd5\x5d\x60\x3f\x05\x7c\xbc\xe9\x5e\x71\xb4\x04\x73\x51\x4a\x9c\x43\x78\xc3\x8f\x6c\x59\x2e\x85\xd4\x29\x0a\xbe\xe7\x2c\x59\x63\x6f\x95\xbf\x9d\xa9\x35\x08\x03\x3f\xde\xf4\x22\x6c\x82\x84\xd1\xeb\xbb\x93\x70\x62\xa9\xe6\x61\x7b\xf3\xfb\x5f\x85\x0e\x4d\xb6\x6f\xaf\x79\xec\x68\xa6\xe8\xb8\x6d\x14\x83\x4f\xa1\x72\xea\x75\x3f\x3e\xb7\xc8\xa9\x94\xff\xc9\x87\xde\xc7\x56\xcf\x60\xce\x43\xef\x65\x50\xd6\x2d\xc1\x86\xf9\x08\x36\x5d\x85\xf7\xc0\x27\x81\x9e\x9f\x72\xfc\x3e\xc0\xa5\xe0\x1c\x3a\xff\x20\xc6\x9e\xd5\xbe\x2e\xb3\xf7\xc8\x94\xff\xf7\x35\x1a\xab\x50\xdd\xea\x85\x9b\x07\x0e\xc0\x9b\x05\x4a\x33\x26\x29\xb2\x3f\xea\xf1\x7e\xed\x69\x73\xca\xfe\xb8\xdb\x5a\xed\x4a\xb4\x4f\xc5\xd2\x4c\x1a\x31\x79\xe3\xf4\xb9\x9d\x2a\x90\x9b\x28\x8f\xa8\xdc\x3c\xf1\xc9\x35\x2a\x83\xf4\x5e\xba\x5f\xf2\xcd\x4f\x87\x0a\x9a\x1b\x5c\x6d\x9c\x04\xc5\x93\xcb\x86\x82\xf9\xc1\x9f\x6a\xbc\x65\x34\x0f\xaf\x4f\x5f\x4b\x7b\xf0\x2c\xe9\x93\xc6\xa7\x63\x53\xe6\x92\x8b\x4e\x3a\x97\xbf\x34\xf5\x65\x13\xbe\x21\xd2\xb9\x04\x62\xa6\x9a\x0e\xb5\x42\x2d\xdb\xe9\x56\xb9\x7c\x4c\x0a\x17\x07\x71\x21\xc9\x87\x0e\xbd\x47\x8e\x0e\xd3\x4d\xa4\xe5\x51\x91\x0d\xc3\xc0\x6f\x15\x05\x8f\xa2\x65\x8d\x7e\x0d\xcf\xd1\x2e\xa4\x2f\x91\xde\x13\x29\xab\x91\x65\x57\x94\xa5\x11\xd4\x8f\x81\x3d\xe6\xaf\xc4\xcd\x00\xef\x44\x36\x56\x24\x0b\xe5\xe8\x25\x85\x26\xd1\x18\xf6\x7c\x12\x29\x31\xd0\xe9\xe9\x99\xbd\x1c\x36\xed\xb1\x5d\xb8\x60\xc7\x72\xf9\xce\x1d\x60\x4d\x45\x3f\x88\x8e\x79\x94\x27\x84\xff\xda\xfb\x42\x6d\x95\xfc\xe4\x9e\x8f\xc8\x13\x71\x42\x42\x4c\x71\x5e\x0f\x2f\xdb\x25\x2d\x1e\xe0\xaf\x3c\x5e\x27\xf2\xc7\xd7\xcb\x49\xb7\xde\xae\x30\xa2\xb9\xaf\xcf\x28\x91\xfa\xd8\x2b\xcb\xae\x59\x1b\x9f\xa5\xd1\x6c\xa0\xb3\xac\xfb\x08\x30\x27\xf9\x1d\xe1\x23\xda\x72\x4e\x71\xbf\x9b\xf8\x83\xe9\x5c\xd9\xbc\x3e\x4a\x6c\x1f\x9c\xa5\x79\xf7\xbd\x9e\x30\x43\x69\x99\x4b\x1d\x28\xbd\xa9\xf2\xa3\x7a\xdd\xd9\x4b\xbd\x0e\xbe\xe2\x0b\xd6\xef\x72\x6d\xd6\xbf\x86\x59\x19\x27\x36\x5f\x3b\x77\xa2\x42\x99\x42\xf2\x80\x0e\x78\x36\xc4\x0b\xaa\xcd\x3d\x4a\x43\xeb\xb1\xac\x56\x63\x7c\xad\xa3\x92\x46\xb4\xc7\x27\xad\xdc\xd6\x52\xc3\xfb\x48\x3d\x2f\x9b\x63\x36\x72\x92\x87\xb6\x49\xc1\x0a\x1c\x1c\x44\xe0\x49\x5e\x4d\xb4\x81\xf8\xf1\xce\x77\xb3\x4d\xa9\x4e\x9a\x89\x0a\xf5\x73\xe3\x2f\x22\x9f\x7d\x0a\xac\xed\x79\x1b\x4b\x2b\xbc\xb0\x76\xbd\x19\x7c\xe8\x49\xe6\xf3\x11\xdb\xcb\xef\xf4\xee\xff\x60\x1c\xba\xc7\x7a\xb2\xe5\xf1\x77\xf6\x6b\x86\x03\x24\x65\x09\xbc\x0f\xcb\x42\x64\x9b\xa5\x81\xc0\xa6\xed\xcb\x1c\xf3\x88\x38\x96\xce\x82\xf1\x2a\xa3\x20\x16\xa8\x13\xab\x7c\x2b\x7e\xf3\x7d\xf8\xa9\xcb\x7b\xc2\xb2\x3c\xb7\x4e\xa9\x00\x9d\xe6\xb7\x8d\x70\x31\x5a\x86\xf1\x1d\xa1\x19\xbe\x68\x12\xda\x7b\x81\x67\x60\xa3\xd4\xa5\x93\x97\xdc\xef\x79\xd3\xbd\x67\x88\xe3\x5e\x4f\xa5\xc7\xb5\x64\x2a\x19\x1b\xd4\x1c\x4a\xf1\xeb\x78\xc3\x9f\x18\x1b\xac\x0a\x9e\x63\xb4\x95\x2b\x52\x55\xe8\x86\x68\x1e\x66\x92\x91\xd6\xbc\x81\x15\x96\xf7\x17\xdd\xc1\xaf\xe8\xd9\xce\xec\x3e\xcf\x71\x16\x18\xd8\x9a\x3d\x3c\xe1\xbc\xa0\x3b\x6e\x7b\xfd\xb3\x4f\x67\xb0\xe1\xfc\x80\x17\xc3\x90\x47\xcb\x3e\xf8\x51\x89\xa5\x7e\x11\x7c\x9f\x60\x9a\xcb\x1b\x06\x15\x89\x0f\x8d\x6c\x2e\xf5\x3e\xff\xd1\xe0\x7f\xce\x2c\x36\x83\x60\x6b\x32\xdf\x4f\x21\xec\x3f\x7f\x7f\x5f\x9e\xa3\x93\xeb\x90\x9a\xcb\xbe\x76\x70\x5a\x6c\x44\x8e\xc4\xd0\x52\xf5\x7e\xcc\xfe\xc1\xe1\xfb\xef\x8b\x55\xed\xa5\x03\x4d\x80\x44\xb8\x69\xcf\x6e\x34\x7a\x7e\x8f\x39\xe6\x7a\xc1\xc1\x7b\x9a\x2e\x81\xdf\x81\xc2\x9e\x01\x8b\xd7\xb7\x73\xc6\x04\x7b\xf5\xbe\x70\x9f\xf9\xef\xa2\x6f\x97\x74\x95\x86\x95\x6a\x29\x85\xd8\xcd\x2c\x8d\x47\x8a\x57\x7a\x1f\x1c\x27\x11\x3d\x2b\x7c\x26\xd5\x89\xc3\x78\x87\x6c\xd8\xf8\x3f\xcb\x51\x76\xcf\x59\x78\xf5\xb9\xd3\xe5\x93\x2f\xdb\xdf\xf0\x1d\x5b\xe7\x3d\xe9\x94\xd9\x5d\xc1\x01\x87\xe6\xc8\x77\xe2\xf9\xa5\x80\x9f\x4a\x28\xea\x5c\xad\xf3\x15\x17\xd3\x30\xdf\x7a\x20\x6b\xf3\x76\xea\xf6\x75\x95\x9c\xbc\x88\xfa\x67\xf2\x57\xa9\x1b\x9d\xf7\xf6\xbc\x7b\x01\xd3\x83\xa1\x73\xce\x9a\xf0\x55\x45\xf1\x71\x0d\xfe\x83\xec\x0c\x3c\x51\x99\x8b\xd1\x4f\xae\x98\xb7\x14\x78\x86\x68\x53\x5c\x25\x8d\x00\x4c\xfd\x12\xba\xb6\xc2\xa9\xc3\x5b\xbf\x1c\x90\x19\xf9\xbf\x3f\x9f\x81\xe7\xb1\x47\xa4\x97\xfd\x9b\xd2\xbe\x6a\xb4\xb9\x38\xa8\xd2\x04\x08\x6a\x2c\xc1\x47\x09\xe1\x1b\x55\xca\x26\x55\xd4\xef\x56\x6c\xd2\x7d\x68\xe2\xc2\x2b\xb3\x23\xc6\xa5\x1c\xfd\xf1\xc2\x22\x16\x96\xbc\xff\x9b\xd5\xa4\xf7\x0c\xb4\xb6\xd5\xbc\xc3\xd7\xfa\xe8\xa4\x29\x2b\x05\xfd\x1b\x53\xbc\xa3\x31\xc5\x34\xde\xee\x8c\x81\x4c\x02\x6a\xe3\xb5\xe0\xf7\x2f\x92\xba\xd4\x95\xac\x02\x4a\x75\x44\x3e\xcb\x11\xfc\x90\x98\xe0\x0d\xf5\x38\xf7\x76\x75\x71\x4b\xe9\xdc\xfa\xbb\x71\x55\xb1\x04\x60\x6f\xb7\xd7\xc8\xac\x66\xf3\xae\x0f\x23\x12\x7e\xdb\x41\x7c\x89\xf9\x13\xd1\xf2\x51\x91\x92\x0f\xfe\x27\xfc\x7c\xd3\xe5\xa5\x77\x93\x81\x8b\x5e\x1e\x93\x93\x96\x89\x2a\xde\xb1\xe3\x9c\xe2\xf9\x4d\x7a\x45\x36\xca\x54\xcf\x84\xfc\xfe\x89\x85\xca\x87\xe6\x6d\xe7\x96\xa8\xb2\xfe\xbb\xe8\x8d\xcf\x9f\xb5\xa6\xb7\x3e\xf0\x3e\x31\x5a\x28\x21\x60\x65\xed\x37\x2a\x5b\x33\x79\xb9\xc9\xce\x38\xaf\x9e\x49\xa5\x28\xdc\x09\x7e\xc3\x2c\x88\xe6\x90\x18\xe4\x62\x50\xd1\x39\xf0\xc3\xcf\xcd\x3f\xe1\x7e\xe6\x61\x0f\xa6\x66\xa3\xc1\xea\xd6\x0f\xa2\x8f\xee\xdb\x67\x03\x7b\x5b\x7e\x53\x81\x9f\x6c\x66\xbb\x74\x8d\xe2\xbb\x40\xf5\x9d\x6b\x27\x75\xa7\x93\x67\x25\xac\x58\x6e\x17\x53\xa4\x93\x9b\xb8\x7e\xdc\x05\x72\x0a\x52\x0a\xd2\x18\x11\x1e\x30\x1e\xa7\x65\xb8\x7b\x6f\x40\x75\x44\xec\x8a\xb1\x86\x5b\x6c\x58\x8a\xfd\xa7\x2a\x22\x2e\x92\x35\xf6\xff\x2e\xaa\xe5\xfe\xf5\x96\xf2\x21\x13\x12\xdb\xaa\xcd\xd6\xdb\x02\x56\xea\x1f\x39\x9b\xa9\x89\xe9\x3a\xc5\xec\xd4\xad\x7b\x1d\x7e\xad\x01\x2f\x71\x66\x92\x70\xee\x49\x5c\x6f\x9a\x8f\xa6\xe1\xa9\x49\x6f\xb3\xce\xcc\xa3\x6c\x8b\x8a\x4b\x3d\xcc\x44\x73\x6f\x8b\x7b\xc1\x44\xf0\xc4\xff\x3c\x4d\x39\x3c\xa4\xb1\xf5\x7b\xb8\xaf\xf6\x54\x42\x86\xd4\x9d\xeb\x8c\x23\x3a\xdf\xd9\xf6\xea\x79\x99\x28\xed\x5b\x2c\x53\x37\xc7\x26\x81\x3f\x5c\xa6\xb2\x2b\x53\x38\xcf\x7d\x51\xab\xeb\x85\xc9\xc3\x1a\xf7\xdc\x7a\xad\x8c\xde\x48\x2d\x5d\x16\x0d\x7a\xbc\x8b\x6d\xca\x6e\x99\xff\x8d\x7f\x4c\x44\xa2\x91\xe7\xe7\xf5\x31\x33\x06\xde\x1f\x8a\x31\xf7\x4b\x2f\x6e\xc8\x74\xa8\xbd\xb8\xd6\x6c\xde\xc4\x33\x6d\xf7\xa3\xee\xd3\x7f\x96\xd7\x08\xa3\x1c\x95\x1e\x4a\xd0\x29\xa7\x2a\x4c\x4e\xf0\xca\x0e\x11\x8c\xaa\x65\x59\xd4\x8d\x14\xe3\xe3\x63\x8e\x9c\x2e\x97\xf1\x00\xa2\x9f\xba\xaf\xde\xb1\x6a\xe3\x5b\x70\x10\x71\xed\xbd\x49\x65\xea\x4a\x14\x9d\xca\x86\xf7\xf1\xf7\x94\x29\x7c\xad\xd7\xe9\x4d\x14\x01\x5a\x6d\x8d\x77\x96\x1f\x2f\x33\x0a\xe8\x31\xc7\xbb\x4a\x52\x9e\x10\x63\x66\xcf\x2f\x4b\xa0\x79\xbf\xa3\x0f\xbf\xd5\x5a\xcd\x35\x02\xfc\x3f\x25\xdd\x2e\x61\x26\x69\x89\x16\x85\xdf\x89\xdb\x1b\xa3\xfa\x15\xc9\xd5\x41\x72\x3c\x1b\x5f\x5f\x68\x95\x8c\x37\xd1\x73\x1b\x3c\x5a\x02\x1a\xa0\xfb\x8a\x15\x11\xaf\x9e\xee\x5a\x2d\x4a\x7d\x6f\x28\xeb\x8f\x74\xd5\xe2\xdc\x25\xca\xcd\xcf\x48\xd9\x4a\xd6\x70\xe8\x38\x85\x0f\x5c\x14\xba\x8e\x27\xf4\x6e\xc5\x46\xe9\x77\x9b\x54\xa9\xde\x50\xd8\xd0\x09\x26\x8b\x8d\xba\xe7\x9c\x97\x74\x9d\x97\x5d\x52\x0b\x9f\x02\x4f\xe8\x0d\xa8\x68\x4c\x2d\x9b\x86\x84\x14\x6f\xdb\x38\xc7\x86\xad\x15\x1e\x3f\xf4\xe9\xdb\xba\xa1\xa3\x09\xc5\x4d\x4d\x67\x6a\x53\xf6\x1f\x40\x9e\xf0\xbf\xee\xf2\xab\x6d\x50\x6b\x7b\x3f\x84\xaf\xc9\x77\x9e\xb1\x2a\xc1\x4a\xab\x2e\xe8\x03\xd7\x9b\x38\xba\xd7\x1d\xcf\x42\x24\x49\x01\x04\x55\x94\xe8\xbb\x39\x78\x22\xe8\xc9\x25\x29\x09\x36\x3b\x49\x15\xbb\x8e\x89\xab\x05\xf3\xbf\x59\x5f\x55\xce\x40\x67\x09\x0e\x01\xbb\xd4\x8e\xe7\x99\x7b\x82\xe9\x96\xf6\xd2\x2f\xf5\xc6\xfc\x27\x38\xa6\xe5\xde\xbc\x27\xcc\xa6\x5f\x74\xdf\x6b\xc5\xef\x78\x4a\x10\x03\x7e\xe9\x92\x21\xe9\x3c\xde\x53\xa6\xa6\x5d\x09\xa3\x57\x77\x34\xa7\x0c\x2f\x1d\x52\x76\xd8\xca\xe8\xac\x39\x2f\xfd\x9a\x32\x2f\xad\x30\xda\x04\x48\x53\xb3\xeb\x72\x14\xa4\xce\x9f\x99\x29\xac\x92\x1e\x12\x4b\xb2\x6d\x9f\x71\xac\xa6\xee\x3b\xb7\xae\x71\xed\x5e\x28\xf9\x48\xc6\x04\xb0\xf5\x60\x8a\x29\x33\x6e\xcf\xd3\xb7\xe5\x5d\xe9\x7e\x92\x24\x20\x6c\x6c\xfa\xd5\xe7\xa6\x24\x4d\xd4\x4e\xf5\xa3\x32\x95\x50\x3e\x63\x57\x60\x7c\xc7\xde\x77\x6f\x2d\x58\x37\x4b\x6e\xf0\x51\xdf\x10\x96\x60\xfd\x11\x30\x10\x51\xcb\x47\xb2\xf3\x95\xe1\x68\x9e\xbe\xb8\xe3\x35\x0d\xa0\x03\x58\x0d\xcf\x88\x52\x24\xbb\x9e\xf1\x8a\x41\x93\xc5\xff\xde\xaa\x9c\x93\xab\xe2\xa0\x51\x6a\xf5\x14\xb1\x75\x30\x3d\x74\xe2\x0a\x78\x26\xe6\xf5\x0c\x73\xc9\xa2\x77\xfd\x71\x7e\xb0\xc6\x89\xc0\x09\x2a\x91\xd0\x2a\xd7\x94\x8d\x8d\x32\x92\xba\x8f\x62\x6c\xdf\xee\x34\xfe\x77\x51\xbd\x92\x6a\xce\xee\xd8\x2d\x85\x84\x24\x9e\xd9\xe9\xc5\xae\xd3\xe7\x9f\x1d\x59\xbb\xf5\xfc\xfc\xe4\x4b\x7a\x43\xc7\x3b\x47\x2d\x47\xff\xb3\xac\xfc\xbd\x7f\xcd\x95\x5a\x79\x43\x67\xe6\xb7\xb6\xde\xa7\x29\xc1\x36\x72\x6a\x92\x7a\x05\xeb\xcd\xab\x0c\x9f\x44\x58\x78\xd2\x1c\xc0\x3f\x33\x20\x1d\x60\x1a\x9e\x3d\x35\xf1\x5b\x57\xc2\x76\xe3\xcb\xf4\x97\x1c\x23\x4f\xbf\x7d\x7f\xea\x94\x23\xb9\x26\x77\x7f\x44\xab\x02\x00\xa8\x54\x13\x97\xbd\x60\xdc\xd0\x35\x8c\x09\xf2\x76\xbd\x32\x66\xdf\xa0\x58\xca\x9b\xa6\x26\xd8\x5d\xd6\x22\xb2\xca\xba\x27\x1d\x09\xcc\x89\x65\xed\x82\xf4\x45\x2d\xb7\x33\x85\xd6\xa7\xa6\xe8\xd4\xe6\x92\x61\x3f\x95\x49\x67\x0e\xe7\x82\xef\x37\x68\x1f\xbe\xad\xb5\x06\x4e\xef\xce\xd2\x8a\x1c\x91\x5b\x92\x34\xac\x7a\xa9\x3b\xbf\x48\x7d\x86\x90\xf5\xed\x87\xf0\x98\xa0\xfe\x98\x63\x15\x74\xdb\x25\x9d\x9b\xc0\x9f\x09\x5c\xc9\xff\xda\x7a\x49\xa1\xc5\xfd\x29\x8d\x22\x6b\x7c\x42\x32\xcb\x42\xd4\x30\xaf\xb9\xdd\xe9\xc2\x4f\x31\x8e\x05\x97\x06\xaf\x88\x00\xc3\x1f\x7b\x25\x4b\x72\x21\x79\x7c\x8c\x5a\x3f\xb3\xf1\x80\x98\x88\xc9\xc6\xcf\xdd\xf8\xd0\x2f\xa3\x96\xb9\xcb\x32\x16\xd5\x6b\xbb\xc0\xd3\xa1\x97\xa9\x2b\x1a\x34\x8f\x97\x49\x3b\x50\x25\x69\x3c\xda\x99\xb4\xf9\x3d\x36\x1c\xa2\xc1\x6e\xda\xd8\x53\xda\x34\x99\x34\xf8\xe0\x3c\x70\x74\xce\x74\x5b\xa2\xf9\xbc\x69\x63\x08\x2d\x75\x47\x1f\x21\x79\xf4\xd3\x9f\x72\xe2\x2b\x94\x07\x66\xeb\xf7\x67\xfb\xae\x57\x39\x81\x3f\x5d\x04\x24\xd8\x28\xf8\xcf\xd3\xe5\xbc\xca\x21\xb4\x4b\x93\x1e\xda\xfe\x41\x28\x66\x56\x33\x29\x69\x7c\x47\xe1\xc6\x8d\xce\x4c\x0f\xf0\xa3\x6e\xef\x19\xae\x5b\xea\x54\x4e\x99\x15\xf1\x6e\x74\x7c\x09\xa8\x2e\xd7\x79\x99\xb8\x90\x61\x6a\x37\x71\xed\x66\x96\xf3\xf5\xd4\x57\xbd\xc0\xa4\x78\xc3\x8b\x57\x9d\xbc\x8f\x6e\xe8\x14\x1a\x59\xb8\xb3\x92\x12\xea\x19\x56\x64\x0a\xdd\x7c\x7b\xdb\x37\xbf\x4c\xa8\x22\xda\xdf\xf7\x3f\x57\x63\x8c\xe7\xf2\x56\xba\x5b\xae\x38\x3e\x74\xce\x9e\xc0\xa4\xc5\x61\x0a\xf5\xcf\x33\xd1\xa4\xcd\xb1\xc8\x19\xac\x7a\x45\xb7\x01\xa7\xac\x03\x9b\xfa\x50\x85\x4f\x8d\xe1\x55\xee\xc8\xc7\x67\xb3\xdf\x3f\x78\x44\x15\x3f\x68\x39\xfd\x81\x92\xaf\xba\xbe\x58\xe2\x77\x19\xc9\x7f\x4f\x0e\xa2\x6c\xd0\xb0\x02\x31\x11\x1e\x78\x0a\xc7\xc4\x15\xd6\x7f\x42\x7b\xfb\xc2\x23\x46\xc2\x71\xee\x56\xa1\xd6\x02\xfa\x60\xdb\xa7\x87\xa8\x15\x6f\x5d\xef\xad\x51\xe4\x1d\x00\x1f\x64\xb5\x1a\xe1\xc6\xcb\xb9\x64\x4f\x95\xe7\xd8\x65\x72\x72\xac\xae\x48\xde\x52\xc5\xad\x29\xeb\xf0\x79\x9b\x61\x4b\xf3\xe3\xfb\x2b\x5a\x80\xa9\x72\xd6\xca\x3d\xbf\x39\xa2\xf7\xe1\x4f\x1d\x3b\x6c\xb4\xb9\xde\x2d\xe4\x48\x1e\xf4\xb1\x72\xf8\x67\x2d\x37\xf5\x5f\xe3\x53\x07\xcf\xf6\x68\xa8\x67\x0d\xaf\xe2\x63\xc6\xa6\x98\xb7\xac\x78\xfb\xaf\xdd\xbc\xa6\xae\xff\xfd\xd1\x40\xe2\xb1\xce\xb2\xd5\x55\xd7\x13\x5a\xc1\xeb\x32\x38\xf4\x59\xda\xad\x7b\xf5\xe3\x4a\xe7\xa2\xdd\x12\x26\xf1\x8e\x73\x87\x15\xc1\x72\x8f\x63\xb3\x9a\x87\x71\xb8\xee\x6d\x7d\xda\x8a\x02\x58\x89\x16\x0f\x1f\x0f\x0f\x0f\x0f\xc6\xc0\xf2\x78\xb3\xa4\x97\x30\x30\x84\x67\x7c\x29\x10\xf7\x15\x18\x3a\x69\xd6\xc6\xc3\x8d\x87\x8b\x12\x8b\x0e\xf9\x04\xaa\x0b\x19\xbb\x67\xe2\xe5\x4f\xb5\x10\x44\x45\x1d\xae\xb7\xd0\xc0\x23\xf5\x85\x15\x0e\x0e\x0e\x0e\xa2\x38\x80\x62\x57\x56\x15\x42\x83\x89\x4b\xa5\xe3\xc9\x66\x0f\x4e\xcf\x65\x78\x46\x34\xad\xd4\xda\x58\x96\x3c\xf7\xc5\x51\xfc\xcb\xc5\xc8\x97\x64\x80\x29\x2b\x46\xcb\xf7\x51\x33\x21\x9e\x43\xd4\xb8\x4b\x6c\xce\xa7\x5b\xaf\x89\xf7\x06\x62\x38\xa6\x53\x6f\xc6\x75\x1c\xdc\x58\xa4\x70\x07\x4c\x17\x34\x7d\x02\xb5\x12\xb3\x08\x2e\x64\x73\xbc\xc5\x57\x99\x1f\x38\xc5\xff\xe3\x97\x5a\xb3\x80\x49\x04\x51\x04\xdb\xdb\xbd\x5a\x23\xc0\xb4\xe6\xc2\x43\x0f\x5d\xe2\x8c\x67\xa1\xe9\xfc\x35\x77\xbd\x53\x5e\xf6\x4d\x09\x1b\x8e\x5c\xb5\x23\x59\xd4\x50\xe7\x6f\x10\xb4\x37\x01\x4c\x25\x9f\x6a\x1f\x0b\xbb\xc4\xb8\x5e\xbf\xc9\xdb\xbf\x90\xb4\x37\xe1\xaa\xe1\x6e\x95\x33\xb0\xf2\x10\x2e\xb7\xc2\x50\x55\x2c\xd0\x03\xa6\x1f\xa4\x3c\x47\x1c\xf5\x23\xf0\xcb\xaa\xca\x79\x3b\x44\x12\xaa\x3f\xdc\x8f\x6a\xba\xc1\x9d\xfc\x68\x80\xfe\x52\xa8\xb7\xd0\xc8\x2d\xc0\x14\x4f\x04\xbe\x7b\xec\x15\x29\x95\x2f\xe7\x73\x7a\xb7\xb9\xfc\x14\x52\xfc\x37\xad\x66\xab\xc4\xd4\xe7\xf1\x9e\xb9\x94\x8c\xad\xf0\x03\xa6\x56\x8a\xa2\x8d\x26\xd7\xa9\x36\x86\xbf\xf5\x13\x4e\x92\x48\x65\xfd\x96\x0d\x50\x77\xfc\x7a\x38\xd5\x34\x25\x60\xa8\xef\x1a\x09\x23\x78\x92\x92\xd9\xb8\x56\xd3\x76\xf3\x70\x89\x08\x55\xf8\x4c\x2f\xe1\x37\xab\xfd\x17\x94\x06\x51\x81\x2c\xcf\x84\x2c\xc2\x56\x78\x2f\x78\x03\xa6\xa7\x77\xec\x6a\x1e\x9e\x4f\x38\x88\xa0\x75\xfa\x6d\x79\xca\x30\xf7\xdb\xb4\x57\x9d\xb6\xf2\xe3\xc0\x53\xbc\x33\x32\x49\x1f\x5b\x54\x00\xd3\x78\x26\x2a\x9a\xf2\x77\x79\xdb\x24\xa3\x75\xbf\xfb\x22\xce\xd8\x51\x73\xa6\x2f\xa9\x8e\x77\x7d\x89\xe9\xce\x15\xc0\x4f\x39\x6a\x06\x98\xf2\x0d\xef\xdf\xcc\xe0\xf9\xcc\xa9\xc0\x45\x62\x1f\xc5\xa2\xc6\x8e\xdf\x3f\x61\xcf\x12\x79\x4d\x8c\x37\xb8\xbc\xff\xc4\xc2\x22\x2b\x60\x5a\xef\x70\x24\x9a\x7f\xfc\x43\xdb\x96\x69\x98\x84\xb4\x6d\xd0\x9d\x20\xf5\xe6\xda\x3d\x3b\xee\x45\x8b\x03\x8d\xcd\xc1\x73\xfb\x39\x80\xe9\x23\xa2\x6c\x1a\x49\x5e\xa5\x92\xbb\x5f\x4f\xad\xfa\xb6\x67\x85\xe0\x7f\xdd\x1f\x1a\xf4\x22\x14\x91\xb0\x7c\xdb\x52\x9f\x1f\x34\x01\xbe\x93\x65\x5a\x68\x46\xd7\x27\x98\xb3\x1a\xc6\x7a\xcd\x36\xb7\xc6\x40\x93\x5a\x3d\xf7\xa7\x59\x49\x5c\xae\x17\x4f\xfa\x9b\x9d\xe3\xb4\x80\x29\xd3\xea\xf7\xd5\x1b\x78\x8c\x62\x7c\x63\xf3\xd9\xa6\x5c\x5b\x76\xb7\xbb\xaf\xf5\xd9\xb7\x0b\x14\x5d\xbb\xd9\x4c\xba\x9c\xf6\x54\x1c\x30\x0d\xbf\xff\xa0\x7a\x55\xc7\x32\x22\xc6\xca\xe4\x88\x34\xb3\xac\x61\xca\xd3\xda\xd3\xb3\x83\xda\x01\xbe\xaf\x1a\x7a\x23\x35\x7a\x3f\x01\xa6\xa5\x15\x4f\x7f\x38\x9e\xf2\x48\xe2\xdd\xfc\x10\xdd\xcc\xbe\x29\x6a\xaa\x12\xe2\x9f\x96\x74\xf1\x27\xec\x39\x50\x5b\xf8\x58\xe2\x2e\x60\x3a\x82\xaf\x95\x1e\x25\xa7\xcf\x1d\x4e\xa8\xa2\xfd\x79\x4c\xa0\xec\x88\x97\xa6\x36\x9b\x34\x4b\xb3\xb4\x46\xdd\xa5\x33\x9b\xac\xaa\x80\x69\x64\x51\xc7\xee\xb7\x8b\x52\x2a\x0b\x9c\x2c\x8d\x2a\xca\x2b\xc4\xad\xb3\x76\x75\xca\x64\x96\x9d\x3f\xa5\x5b\x7d\x98\x5f\x05\xd1\x01\xa6\x4f\xed\x2f\xce\x2f\xee\x6a\x24\x57\xd6\x9d\x0c\xf4\x5d\x7b\xd5\xf8\x32\x22\x79\xea\x88\x48\x83\x83\x3c\xcb\xe1\x28\x12\xe9\x37\xba\x80\x29\xe9\x65\x4e\xb9\x10\x9d\xd1\xbe\x0c\xdd\xda\x93\x85\xca\x17\x72\x3a\x7d\x31\x82\x1c\x11\x64\x37\x35\x3a\x64\x4e\xd5\x3e\x2b\x96\x03\x4c\x65\xdc\x7e\x7f\xe4\x3e\xf2\xf5\xd7\xfc\xa0\xe7\xcd\xac\x01\x7d\xae\xc2\x6c\xae\x6b\xeb\xe5\xda\xe3\xa4\x2f\xcf\x93\x57\x9c\x2f\xfb\x08\x98\xd2\x5a\xef\x2b\x48\x10\x5e\xd7\xd0\x37\x6e\x86\x77\x6d\x82\x12\x2c\x68\x89\x1f\x2d\xe0\x13\x6e\x4f\x14\xb3\x24\xff\x7e\xfc\x78\x01\x30\x3d\x31\xf9\xf6\x60\x2f\xbf\x53\x26\x09\x5f\x97\x51\x6a\x51\xe9\xca\x80\xad\xda\x53\xb7\xf9\xdb\xca\xee\x73\xb2\xca\x29\x65\x83\x2d\xe0\x12\xd8\xc6\x9e\x5e\x7f\x95\x3c\xba\x95\x6c\xa5\xdf\xef\x79\xd8\xf7\x01\x87\x8f\x4a\xf6\xf0\xcf\x80\x85\xf7\x8d\x9b\x41\x2f\x1f\x9e\x06\x4c\xa9\x26\x9d\x55\x0f\xd9\x0c\x70\x88\x15\x4e\x3f\x69\xaa\x7a\x17\xb4\x1e\xc7\xc6\x6e\xee\x9b\xee\xf5\x8c\xf8\xb5\xf7\x8d\x90\x9a\x31\xc0\x34\x98\x43\xde\x88\x34\x8e\x99\x9b\x7d\x90\x26\x5e\xa9\x71\xfd\xd9\x21\x7c\xe1\x31\x2e\x4b\xb2\xba\xaf\xcf\xb2\x22\x77\xf8\x99\xc1\x60\xc9\xea\x1d\x92\x22\x95\x0d\x87\x3d\x54\x98\x16\x9c\xcc\x48\xc5\x3e\xe8\xfc\x60\xda\x2e\x6f\x11\x7b\x0e\x93\x65\xd9\x5e\xea\xb3\x02\x4c\x5b\x9c\x27\x85\xeb\xc2\xea\x5b\x9f\xac\xf6\x98\xe9\x91\x66\xd5\x1d\xf2\x5d\x64\xba\x1b\xff\x26\xb1\xf8\xfc\xb8\x75\x2f\xdb\xe6\x24\xf8\x9c\xea\x6d\x86\xc6\xd7\x86\x54\xb3\x56\x3a\x7b\xef\x8e\x67\x36\x17\x9e\xc5\x7f\x29\x47\xd2\xee\xbb\x67\xf2\x9d\x47\x8c\x7b\x73\xe2\x2b\x60\x4a\x88\x4f\x61\x26\x52\xc9\x6a\x27\x21\xf2\xea\x2c\x87\xf0\xb3\xb4\x67\x05\x2a\x57\xb3\xc7\xf9\x0f\x86\x2d\xbf\x8b\xf0\x47\x6e\xbe\x2f\x39\xf4\x6f\x9b\x2b\xac\xf0\xcb\xb5\x6a\x30\xd2\x13\x86\x82\x48\xc1\x65\x6b\x48\x2b\x21\xe0\x5f\x33\xeb\xc2\xb4\xcb\x9f\xc9\x10\xef\xd9\x99\x9a\x3e\xdb\x73\xb7\x91\x4c\x8e\x84\x82\xc0\x5d\x40\x83\x18\x86\x06\xf0\x01\xf3\xcd\x86\x0e\x89\xfb\x46\x7a\xfa\x66\xfc\xd5\x94\xf8\x4a\xf7\x4f\xea\x0e\xb1\xf7\x0c\x46\xd8\x4a\x75\x8f\x94\xe5\x0f\xca\xac\xb3\xc0\xd0\x2e\x05\x60\x6e\xea\xbd\xde\xe1\x70\xec\x27\xef\x9e\xfa\xd5\x4f\xcc\xf2\xf8\x8a\x43\xf7\x3e\x24\xff\xd4\x51\x17\x2c\x38\xa6\xdf\xa3\x9f\x90\x2c\x83\x81\xa1\x12\x02\xc0\x9e\x21\xcc\xf5\xc4\x55\xff\xa2\xd8\xd8\xf9\x88\x72\x35\x91\x4d\xb7\xe7\x04\xaa\x4e\xeb\x9f\x2c\x4b\xdd\x28\xbe\x75\x6b\x06\xb4\x88\x63\x60\xe8\x35\x78\xfd\xca\xac\xd0\xf7\x27\xd6\x0f\xc2\x0d\xce\xb6\xb4\xc6\x31\x7f\xd0\xf7\xf2\x6b\xb0\xc3\x3f\xdd\xc6\xff\x58\x07\x4f\xe9\xcb\xfb\x73\xb4\x30\x2c\x07\x9a\x37\x3e\x4a\xb6\xcd\x11\x15\x8e\x26\x62\x93\x1b\xc8\xbf\xfd\xba\x59\x89\x0f\x96\x57\xa1\x7e\xf5\x93\x2f\x48\x43\xe4\x68\x25\x89\x1f\x0c\x05\x13\x83\x2f\xe5\x9d\x61\x23\xe0\x50\x5d\xbf\xab\x4d\xd2\x73\x8b\x6c\xa1\x9c\xe1\x9a\xef\xf7\x9b\x5c\xc1\xe4\xfc\x93\x2f\xbe\x35\x5d\xdb\xe9\x7d\x0f\xc3\x50\x1c\x18\x9c\x9d\x54\xef\xbd\xcf\x47\xac\xaa\xfd\xa5\x83\xce\x0b\x38\x9f\x99\xb9\x75\xe7\xa2\x1d\x95\x52\xb6\x42\xaa\x90\x88\x26\x46\x4e\x5f\x15\x86\xf6\xc1\x1a\xf7\x94\xb0\x9b\xcf\x1f\x2f\x45\x4b\x41\xd5\x77\x3c\x4b\x95\xd5\xa1\x97\xa7\xc9\x81\x3b\x23\xfc\x6e\x73\x7c\x6a\xeb\x86\xd8\x45\x07\xf0\x39\x8f\x94\xb2\x5d\xc9\xa7\xc4\x35\x62\x8d\xac\x44\x24\x2a\x9c\x57\x27\xce\x05\xe2\x85\x4d\x46\xde\xf1\xf9\xfe\xfa\x97\xef\x8f\xe7\x92\x18\x18\xea\x02\x3d\x79\x77\x56\x40\xd3\xe0\xd3\x68\x54\x5f\x59\x3f\x9e\xbe\x7c\x5b\xad\x48\x11\x91\xb7\x71\x51\xd2\xbb\xba\xe2\x24\xaf\x77\xf9\x07\x5a\x18\x18\x2a\x06\x67\x2a\xd8\xda\x53\x19\x1a\x7f\x42\xbd\x09\xa2\x3c\x7e\x51\xb5\xed\x44\x6a\x79\x64\xf6\x39\xdf\xa6\x4e\x1d\x25\xc7\xc8\xa1\x17\x56\x67\x60\x18\x2a\x23\x02\xec\xbf\x09\x7f\x69\x6f\x91\x74\x6c\x9a\xbf\xe5\x4d\xdf\x60\x8f\x89\x0f\xfc\x29\xc1\xf1\x63\x28\xe7\x97\xfa\xc8\xf8\x8b\xcf\x47\x98\x13\x61\xa8\x0e\x9c\xa9\x92\x1d\x15\x53\x80\x63\xda\xba\x8a\xe4\xfd\xf6\x06\x8b\x82\xe1\x14\xb1\xa2\xf0\x82\x5b\x2e\xd6\x39\x36\xb3\xf1\x9b\x69\xe2\x03\x18\x18\xfa\x06\x26\xa5\xb8\xfb\x91\x25\x38\xa2\x30\x81\x63\x39\xc6\xdd\xfc\xa4\x3f\xcb\xbb\xd6\x2e\x07\xb5\xf9\x55\xce\xfe\x5b\x5c\x3b\x17\x06\x45\xcc\x3d\x61\x28\x0a\xbc\x7e\xf1\xcc\xc3\x84\x50\xa6\x87\x6b\xca\x3f\xe7\xcb\xc3\xb5\xc4\x3b\x17\xe8\x99\xe7\x49\x08\xc5\xd2\x9f\x91\xbb\x18\xa7\x0f\x14\x65\xc0\x50\x22\xe8\xfd\xc5\x8d\xa7\x97\x6d\x64\x1e\x49\x13\x1c\xb3\x7e\xaa\x33\x9d\xdb\xea\xf1\xc4\x60\x2f\x14\x86\x05\xa7\xf2\x68\x98\x78\x16\x76\xd7\x61\x28\x85\x1c\x7c\xa8\x36\xec\x57\x18\x53\x6d\x60\xd2\x5c\x46\xfc\xcd\xb5\xe7\x24\xae\xd3\x09\xc7\x0e\xa6\x8d\x30\x2c\x64\x45\x4f\x0f\xea\x42\x32\x3c\x3c\x61\xb9\x47\x80\xf9\x4f\x71\xaa\x80\xaf\xbf\x35\xa6\xe9\x0a\xd4\xbb\x77\xf5\xaf\x89\x36\x34\x24\x7e\x0d\x10\x18\xbb\xfb\x8e\x40\xea\xe4\x85\x2f\x1f\x8e\xc0\x50\x31\x15\xf8\x51\xd7\x2d\xcd\x97\xcc\xf7\x4e\xa5\x7c\xc9\x9b\xab\x2c\x4e\x3f\xdd\xe0\xdd\xa4\xb4\x46\x8f\xb1\xff\x69\x29\xc6\x4d\x94\x7d\x68\xe3\x24\x0c\x55\xfc\x4f\xc6\x4f\x2f\x33\xff\x20\xf7\x5b\x71\xca\x13\xda\x77\xba\x79\xff\x72\x8b\xcb\xab\xaa\x8e\x5e\xa3\xf9\x07\xf2\xd4\xa4\xa3\xa6\x78\xfa\x18\x18\xaa\xf9\x9f\x4c\x20\x9e\xa0\x2f\x3b\x65\x82\xff\x75\x28\xf4\x5d\xfa\x71\x7c\xd6\x3a\x0e\x6a\x2a\x0e\xe3\x23\x7d\x0c\xa5\xa4\xb7\xf5\x15\x0b\xfa\x30\x30\xb4\x01\x86\x72\x42\x93\x79\xee\x86\xac\x4f\x9c\xcd\xb7\xfd\xc8\xe0\xf3\xfc\x57\x6e\x90\x47\x2c\x3f\xc2\xff\x78\x6f\x24\x41\xa9\x84\x36\x77\xf7\x39\x06\x86\x62\xc0\xe0\x28\x91\xb8\x14\x32\xc5\x78\xcb\x5c\xb1\xc8\xba\x19\x19\xf9\x96\x72\xe4\xb2\x89\x0e\x26\xca\x4f\xb2\xe7\xd0\xf7\xf8\x01\x15\x0f\x52\x18\x86\x3c\xc0\xd8\xcb\x44\x9b\x63\x98\x84\x1e\xb2\x44\x8b\x2c\xac\x6c\x54\xf0\x8b\xbb\x33\x35\x1f\xbb\xb5\xc0\xce\x54\x68\x92\x25\x31\xe6\x55\x29\x02\x43\xa3\x60\x62\x1e\x3c\x18\xb1\x73\x60\xc8\xcb\xc9\xbb\xc0\xff\x8d\x8e\x43\x9e\x71\x98\xf2\x68\x01\x87\x94\x65\xf3\xf2\x8c\xec\xb0\xe2\xe5\xc6\x20\x0c\x0c\x85\x90\x00\xf6\xcc\x0d\x09\x77\x0d\x4f\xed\xe4\xbe\x13\x74\x23\xdc\x1a\x64\xfb\xe5\xd4\x46\xea\xc6\x66\x30\xfd\x4d\xbe\x5a\x6a\xf9\x5b\xd3\x2f\x35\x18\x86\xb2\xc0\x0d\x27\xeb\xd7\xe9\xf7\x0d\x4d\xdb\x8f\xc6\x38\xf2\xa5\xd4\xcf\x74\xd3\xb8\x66\xd5\xb1\x78\xa4\xb4\x3c\x79\x2e\x6b\x2d\xc6\x76\xf1\x6c\x3a\x0c\x15\x52\x02\xe6\x97\xbc\xb8\x7e\xb3\x3d\xa4\x60\x61\xa0\xac\xd5\x65\x5d\x3a\x30\xba\x5d\xd2\xc6\xd7\x59\x1f\x2e\x59\xa2\xcb\x28\x94\x2c\x17\xd8\x0f\xc3\x50\x05\x98\xc8\xf9\x9a\x3f\x0a\xb3\x4a\x14\xfc\x86\x7f\x54\x9c\x78\xba\xa7\x22\xc4\x87\xff\xc9\xda\xd3\xfd\x49\x7f\x45\xdd\xec\xcc\x00\x63\x5a\x38\x0c\x8d\x83\xde\x53\xf7\xd8\x1a\xa7\x98\xdc\xe8\xe9\x3a\xa6\x3f\xc7\x1e\x28\xa5\x6d\xfe\x92\x88\x5a\xdc\xb0\xe1\xb9\x91\x78\x47\xc0\xdb\x7b\x1a\x36\x30\x0c\xbd\x05\x17\xf7\xa7\xf5\x2b\x31\x65\x22\xa9\x3b\xee\x86\x0f\x1e\x7e\x68\x3e\x2e\xfb\x66\xb6\x87\x88\xc3\xba\xa6\xfa\x4c\xbf\xf8\xf7\x1b\x2e\x0e\x1f\x61\xa8\x11\x9c\xac\x6e\xab\xbf\x48\x83\xda\x21\xc9\x47\xc1\xef\xcc\xbb\x6a\x65\x69\x5b\x54\x6e\xc7\x72\xe7\xbc\x92\xfc\xcc\x7c\xad\xa9\x2d\xd3\xa2\x11\x86\xa1\x20\x42\xc0\xde\xf3\xf4\x3e\xfd\x9b\x19\x8b\xf2\x4f\x18\xe9\xc2\xcf\xcb\x43\x17\x4b\x73\x08\x69\x6b\xd3\x7f\x66\x70\x1c\xba\x51\x7f\xa0\x59\x5a\x09\x43\x93\x60\x2a\x64\x99\xb5\x9e\xdf\x28\x57\x6d\x3b\x29\x26\x7e\xa8\x71\xab\xb8\x29\x9a\x5f\xf0\x40\x6a\x72\x4f\x99\x84\x2a\xcf\xd5\x39\xdc\x74\x03\x86\xa1\x3a\x30\x95\x65\xfa\xd5\xf2\xfc\x75\x22\x1e\xac\x25\x9c\x67\x5f\xe7\x88\x2f\xce\xd7\x5e\xcd\xec\x76\x94\x9d\x67\xd4\xe3\x7b\x9b\xe2\x63\xdd\x0b\x43\x83\x60\xe6\x10\x2d\xcf\xe0\x57\x91\x11\xd6\xb2\x7d\xbd\x4c\x9a\x44\x4f\x46\xe6\xd2\x3c\x1a\xea\xb3\xdf\x56\xd8\x34\xb8\x4e\xc2\xc7\x4c\xf1\x0c\x03\x43\xfd\x60\x26\x3f\x34\xbe\xda\xfd\x53\xfc\x78\x7a\xd7\x84\xb8\xfc\xd1\xfb\xbb\x55\xdd\x45\xb9\x46\x2d\x4a\x74\x79\xf1\xdf\x08\xec\x5b\x28\xf2\xfd\x04\xff\xb1\x00\xca\xe1\x63\x30\x7f\x8a\xe6\xba\xe0\x3f\x96\x40\xac\x60\x00\xff\xaf\x00\xad\x08\xe2\x04\xbb\x14\x7f\x05\x68\x55\x10\x27\x28\x21\xf8\x2b\x40\x2d\x83\x58\xc1\x6b\x8a\xf5\x73\xff\x58\x08\xff\x5f\x20\x87\x78\x84\x5a\x09\xb1\x03\x04\x13\xff\x15\xa0\x96\x42\xac\x20\x0e\x09\x12\x5a\x31\xc4\x09\xf6\xc9\xd6\xe7\xf1\xff\xad\x26\xc2\xf2\x1c\x1e\xf4\x7f\xf6\xab\x6d\x30\x49\x73\xf8\x93\xac\x3d\x44\x79\x0c\x65\x6e\x5c\x1b\x75\x92\x38\x96\xe4\xd0\x68\x44\x3f\x6d\x72\xf2\xd4\xaf\xab\x8d\x95\x5b\x5f\xa1\x37\x18\x18\xf2\x01\x6f\x49\xb7\x07\x45\x87\xce\x84\x1e\x9e\xdf\xae\x5d\x3c\x94\x1a\xa2\xda\x10\x6d\xee\x24\x97\x2f\x7c\xf1\x47\x0f\xd9\x7e\x82\x81\xe2\x27\x16\x0c\x2c\xf7\x0c\x30\xbf\x06\xed\xfb\x5c\xcf\x60\xcb\x2b\x62\x1a\xa3\x2f\xdd\xbc\x6b\x60\x7c\x32\xf8\x7e\xf9\xca\xa9\x34\x2a\x89\xd8\x54\x06\xad\x64\x69\x0c\x0c\xb5\x82\x1b\x4a\x6c\x97\x9f\xf8\xc7\x30\xfe\x7b\x9a\x36\x16\x0f\x2f\x74\xb8\xb2\x41\x55\xbc\x11\x4f\x1f\x0c\x52\x0b\x77\x25\xb2\xf6\x9c\x2a\x9a\x14\xfc\x37\xaf\x71\xd1\xd9\x26\xff\x1b\x4e\x34\xb7\x71\x02\x1f\x92\xbf\x19\x81\xe6\x38\x2e\x23\x9e\xfd\x1d\x00\xcd\x71\xdc\x00\xad\x94\x7f\x05\x68\x48\x82\x13\x74\x21\x19\x81\xca\x24\x58\x41\x31\x92\x73\xa8\x50\x82\x15\x94\x11\xfd\x15\xa0\x61\x09\x4e\x50\x47\xf6\x57\x80\xc6\x25\x38\xc1\x37\x64\xaf\x40\x05\x13\xac\x20\x0a\x19\x01\x15\x4d\xb0\x82\x44\x64\x0e\x68\x70\x82\x13\xa4\x90\xff\x5d\x68\x54\x3c\xc1\x2e\xf4\xa3\xbf\x03\xa0\xf2\x09\x6e\x19\xa8\x90\xcd\x08\x85\x50\x70\x82\x0a\x64\x73\x41\x43\x14\x9c\xa0\x06\xc9\x0c\x34\x46\xc1\x09\x36\x90\xa8\xa2\x42\x0a\x56\x10\x83\xdc\x3e\xa8\x94\x82\x15\x78\x20\xcb\x80\xc6\x29\x38\xc1\x28\x92\xac\xa8\xa0\x82\x15\x84\x90\xfc\x15\xa0\x92\x0a\x56\x90\x85\x14\x05\x54\x56\xc1\x0a\x0a\x91\x3b\x14\x15\x56\x70\x0b\x87\x64\x37\x2a\xae\x60\x05\xe3\xc8\x1c\x50\x79\x05\x2b\x78\x8b\xac\x34\x2a\xb1\x60\x05\x8d\xc8\xa4\x51\x91\x05\x57\xcd\x09\x91\xb0\xa2\x41\x0b\x56\x30\xf9\x5f\x6a\xa0\x51\x0b\x6e\xd3\x40\xd2\x1b\x8d\x5b\x70\x82\x41\x24\x97\xd0\xc0\x05\x27\xe8\x27\x5b\x5f\xa7\xf9\xb7\xd3\x52\x58\xc1\xfd\x60\xe9\x4b\xd4\x9f\x62\x05\xf2\x5d\xe9\x27\x45\xba\x75\x67\xda\x6f\xd2\x1d\xf8\x78\xdb\x2f\x6a\xec\xcc\xaf\x3d\x1d\xb1\x88\x94\xe5\x9c\xdf\xe6\xaa\x23\x8a\x7d\x9f\xfe\x67\xb3\x04\xf9\x31\xb8\x6a\xcb\x84\xe1\xad\xc4\x3e\x8d\x02\x3d\x55\xcf\xad\xdb\x9d\x09\xc7\x39\xf9\x04\x97\x19\xaf\x7a\x97\xbe\x6d\x55\xfe\x7e\x99\x0d\x03\xcb\x81\xa7\x57\x0f\xdf\x7c\x82\xbd\x0e\xcc\x22\xc2\xd6\x3f\xb9\x17\xe7\xbf\x8a\x90\xac\x0c\x5e\x5a\x56\x82\xc9\xee\xf9\x46\x74\x10\x9f\xf5\x32\xc5\xc0\x50\x15\x58\x0b\x15\x76\x7f\xbf\xf4\xd7\xec\xf2\x98\x4e\x3b\x6b\x91\x4c\x25\xc8\xfe\x72\xf4\x62\xef\xf1\x9e\xef\xe7\xa3\xdd\x26\x63\xa2\x29\x6b\x46\x61\x18\x0a\x05\x01\x2f\xd6\xfd\x61\x6f\x54\x3b\xa9\xfa\x6c\x5f\x52\xd3\xda\xd1\x56\x57\xe3\x17\xd7\x4a\x58\x74\x2b\x8b\x59\xe7\x3f\xfe\x96\x37\x8d\xae\x84\xa1\x35\x70\xb6\x78\x3c\x5c\xaf\xce\xb0\x05\x1f\xba\x17\x68\x70\xce\x6f\x8c\xdd\x8f\xa6\xb7\x84\xf6\x08\x9b\x44\x65\x68\x82\x01\x8b\x49\x63\x69\x17\x06\x96\xe3\x06\xdf\xcf\x8b\xb4\x78\x6d\x96\xd4\xee\xda\xdd\x59\x9d\x65\x59\x55\xfb\x20\xe8\xfd\xa8\xe1\xe9\xbc\x5c\x86\x3e\x9f\x65\xf2\xad\x73\x53\xf4\x9e\x30\xf4\x1e\xec\x54\xee\x15\xeb\x95\x70\x17\x10\x7c\x2c\x7b\xc1\x2c\x92\xf9\x14\xff\x23\x93\xbd\x52\x76\x54\x26\x7c\x21\xac\xe9\x7e\xe8\xcf\xd8\x4c\x73\x18\xfa\x04\xc2\xaf\x65\xd1\xf1\xaf\x24\xf6\x01\x13\x21\x92\x6a\x32\x7e\x21\x86\xca\x24\xfa\xca\x2f\x98\xec\x02\x8d\x6c\x83\x53\x8e\xeb\x2e\xe4\x27\xc3\xd0\x2a\xe8\x7c\x56\xd5\xdc\x05\x93\x67\xa7\x73\x49\x89\x8d\x8d\xfc\xdc\x9c\x45\xb8\xc7\x9a\xfd\x19\x5f\x39\x6a\x99\xf4\xf8\xde\x95\x59\x69\xa4\x81\x61\x28\x11\xc4\x1c\xc5\xb9\xe9\x60\xc9\x3d\xa3\xa3\x5a\x5f\x1e\xc8\x88\x96\xdf\x0c\x0b\x97\xb4\x39\xf3\x2d\x7a\x56\x3d\x5c\x57\x48\xc2\x97\x95\x97\x04\x86\x7e\x80\xde\xf0\x0f\xc9\x06\xc9\x64\x25\xaf\xa7\xa8\x57\x5a\x92\xb7\xf2\xf3\x0e\x84\xf9\x74\x54\x4d\x12\x52\x8c\xaa\xab\x1a\x4f\xbd\x6d\x0d\x05\x4c\x49\x24\x63\x28\x87\x5b\x78\x43\xb4\x0e\xed\xa9\xb0\x1a\x4a\x96\xb3\x98\x2c\x98\xe5\x9a\xfb\x0c\x0b\x33\xb3\x19\x34\x75\xfe\xfe\xe3\x49\x02\x88\xed\x71\x82\xf5\x51\x96\x8a\x2f\xfb\x6a\x4e\xee\xff\x32\x56\x79\xab\x5c\x91\x18\xc7\x37\x5d\xfd\x60\x83\xfb\xd2\x85\x69\xc3\xb3\x9f\x7d\x61\xa8\x0d\x34\x3f\x21\xd2\xd8\xde\x4e\x1a\x56\x65\x57\x66\x99\x64\x15\xbf\x4d\xc0\xd3\xaa\x64\x4f\xa7\xfb\xf5\x66\x42\x17\x94\xf7\x3c\xfd\xa7\x26\x06\x86\xd2\xc1\x0e\x6b\x43\xd0\xdd\x4b\x2d\xaf\xb6\xe2\xb5\x68\x1a\x3e\x97\x97\xb9\xde\x50\xa7\xb9\x0e\x51\x98\xe7\x34\x49\xb8\x45\x22\x2b\x5d\xbf\x36\x06\x96\x7b\x0c\xe6\x0c\x2d\x1d\x77\xbf\x2e\x7d\x87\x62\xd9\x72\xd9\x64\x3a\xeb\x80\x65\xb5\xec\xb7\xd3\x6f\xee\x66\x31\x8d\x91\x46\x53\x3d\xeb\xc6\x83\x61\xc8\x13\x5c\xd5\x95\x68\x1e\xf2\xe8\x02\xc5\x5f\x0f\x4a\xae\xcf\x5d\xe5\xf7\xcb\xb4\x1a\x92\xc3\x4f\xf8\x8a\x31\xad\xeb\x77\xc3\xeb\x1a\x39\x35\x0c\x43\x91\x60\x33\x6f\x59\x76\x56\xc5\x67\xeb\x8a\x6f\xe6\x91\x9f\xa6\xc3\x62\x1a\x39\x86\xb5\xed\xdc\xf2\x26\xaa\x86\xbf\xe5\x73\xaf\x43\x93\xa9\x9f\x3d\x61\xa8\x05\xa4\x4b\x8f\xe5\xd2\x78\xe7\x08\xba\x48\x72\x8a\xd2\x4e\xc2\x7c\xf1\x7b\x5a\xb7\x9a\x30\x41\x94\x24\x7b\x47\x05\x38\xee\xf7\x76\x31\x47\xc3\xd0\x38\xb8\xaa\xd7\xd8\x69\x30\xd6\xa3\xdd\x2e\xc3\x6b\x55\x5f\xc4\x74\x6e\x0c\xc4\xfa\xca\x76\x4f\x56\x2b\xc8\xd3\x39\x37\x07\x61\x6c\xe3\x0e\xc1\xd0\x14\xb8\xaa\x47\x29\x14\x2f\xc9\xb9\x27\xb6\x99\x3c\xbc\xab\x92\xcd\xf9\x26\x40\x60\xea\x90\x93\x63\xcc\xfb\x1f\x5b\x22\x2f\x2f\x43\x99\xd1\x6c\x18\x18\xda\x03\x27\x7b\x99\xee\xf2\xca\x36\xb7\x61\x67\xc3\x63\x21\xa1\xe5\xf2\x91\x62\xd5\xbc\x07\x24\x55\xc3\x99\x54\x0a\xa6\x7d\x62\xdc\x0f\xfd\x7c\xff\x2c\x2d\x78\xc3\x2a\x3a\xe4\x14\x69\xde\xe5\x77\x65\x7d\x9f\xb0\x27\xe5\x3e\x15\x48\x84\xbf\x50\x40\xa8\xd9\xcb\xf4\xdd\xbb\x60\xb7\x5e\xa8\xec\x31\x0c\x2d\x80\x39\x2c\xb8\xbc\x36\x77\x98\x85\x7c\x61\x25\xfd\xe7\xb1\xdd\x33\x4d\xe3\xf0\xa3\x1b\xaf\x2f\xc8\x57\xde\xd4\x37\x1d\x7a\xc4\xa7\x11\xfe\x0b\x03\x43\x4d\x60\x2a\xdc\xf0\xcc\x7e\x36\x2c\x6b\x34\x54\x69\xb7\x72\xe8\xb1\x7c\xe6\xee\xae\xb3\xae\xe8\x7a\xea\x7e\x32\x2d\x7b\xe1\x00\xb1\x5f\x5b\x2b\x06\x86\xf2\xc1\x54\xe8\x94\xa0\xd3\x4a\xec\xa7\x2b\x7d\x35\xff\x8e\x7e\x58\x10\x3e\x41\xf9\xe4\xe4\x73\xad\x79\xd1\x52\x97\x8c\xb6\x5a\x5a\x68\xf5\x14\x0c\x43\xb5\xe0\x74\x69\x30\x75\x03\xdb\xaa\x34\x5a\xea\x8a\xc5\x85\x12\xec\xe7\x6e\x37\x62\x62\x0a\x6c\xcc\x32\xcc\x0d\x2d\x26\x29\x97\xd8\xdd\x25\x60\x68\x1a\xdc\xfd\x8a\xb3\x7e\xd1\xd5\xf0\xde\x27\x5f\x20\x77\x20\x2f\xd4\xf0\x2b\xba\xea\x13\xe4\x54\xc8\xfd\x22\x25\xf1\x49\xe7\x9a\xb3\x40\xc1\x9f\xee\x39\x0e\xdc\x9e\x9e\x55\x53\x09\x11\x38\x17\x0b\x5c\x0b\xd7\xe8\x71\x4a\x7a\x5a\xe4\x31\x14\x4f\xb5\x15\x1e\x73\x90\xd1\xcb\xca\xf7\x52\x80\xf1\x2d\x0c\x55\x83\xde\xbf\xff\x7e\x9b\x8b\x81\xc5\x2b\x96\xe6\x92\x79\xe4\x0f\x4f\x1a\x42\xea\x10\xa3\x21\x9a\x52\x8e\x6f\x13\xf6\x3e\xbf\xeb\x33\x99\x9a\x30\x30\x14\x09\x46\xe7\x50\xb3\x53\xea\xa3\xd2\x4b\x3f\x4f\x0a\x0f\x4f\xe5\xee\x5a\x25\x33\x8a\x45\x1c\x0d\x11\x2f\xe2\x91\xc7\xff\x36\x44\x58\x77\x2f\x1d\x86\xa1\x10\xd0\xbe\x9c\xa4\x4c\x6c\xf7\xf5\xd1\x95\x4b\xea\x7a\x5f\xf8\x12\xdd\x02\x1b\xe6\x22\x3c\x1c\x06\x09\xe6\xf6\x37\x2c\x54\xa2\x3a\xa4\x6e\xc2\xd0\x17\x70\x6d\xe9\x86\x2a\x4b\x7a\x55\xaf\xfa\xcc\x05\x31\x64\x53\x0e\xee\x76\x7a\x8d\x90\xe5\x49\x5f\x78\xfa\x68\xed\xe8\xb1\xad\x40\x87\xa5\x1a\x18\x86\xb2\xc1\x60\x12\x85\x92\x9a\x54\xae\x72\x7b\x58\xe6\x56\x84\x77\xd0\x25\x53\x27\xa9\x36\x54\xdb\x67\x8f\xce\xd6\xdb\x4a\x2e\xba\x69\xc8\x1d\x82\xa1\x51\x30\x93\xbf\xd6\x97\x67\x48\xe8\x7f\x09\x72\x7e\x6f\x2c\x91\x81\xaf\x7c\xcb\xf7\x3c\xa5\xf4\xea\xe1\xf2\x86\x2b\x57\x19\x4a\x54\x87\x8b\x93\x61\x18\x2a\x01\x6f\x2c\x41\x97\x9e\x9f\x5f\x58\xe3\x57\x5c\x76\xc9\x8a\x0c\xc2\x03\x42\x6d\x9f\x3c\x4a\x90\xab\xb9\xfe\xf2\xc0\xc2\xf7\x89\xeb\x8d\x91\x2a\x18\xda\x06\xbd\x09\x99\xf7\xbe\x4c\x37\x1a\x32\xda\x9d\x91\x4c\x53\x97\xb5\x19\xd6\x61\xa4\x33\x14\x1e\xc9\x69\x37\x9a\x7d\xd1\xfa\xb1\xaf\x29\x37\x06\x86\x7e\x83\xee\x30\x99\xb8\x34\xf5\xbe\x11\xb9\xcf\xa1\x2e\x6c\x11\x22\xcd\x79\x7a\xa1\xa5\xd3\xc4\xf1\x70\x27\x85\xcb\x62\xf9\x4a\x78\x25\x45\x22\x06\x86\xbe\x80\xc1\x9c\x23\xd1\x54\x48\xe7\x98\x5f\x96\x20\x8f\x3f\xb6\x23\xc0\x47\xa2\x41\x7c\x34\x2b\x46\xdd\x26\x6d\xea\x28\xcd\xf3\x4d\x2d\xa3\x12\x18\x86\x3e\x80\x8b\xab\x82\xf7\xce\x90\xfc\xc9\x83\xb3\xdf\x6b\xf2\x46\x6d\x4d\xcc\x3f\x86\x0e\x72\x86\x0b\xf6\x13\xe4\x69\x89\x3d\x0d\x7e\xb3\xd5\x5a\x0e\x43\x43\xe0\xb9\x4e\xc6\xf7\x67\xf9\xca\x83\x2f\x53\xed\x6c\xba\xde\x0b\x9c\xae\x26\x67\x68\xbf\x50\x70\x59\xb1\xbd\x92\x68\x59\xe6\xf5\x41\xca\x89\x4b\xe7\xfe\xad\x7e\xc3\x72\x04\x7f\x50\x1e\x61\x1d\xb4\xfa\x8d\xb5\x87\xca\x08\xfe\xf6\x0a\x68\x15\x1c\x37\x80\xea\xdf\x01\x50\x2b\x38\x76\x80\x2a\x04\x39\x51\x4b\x38\x56\x10\x8a\x90\x3c\x5a\x11\xc7\x09\xd6\x08\xff\x4e\x01\xad\x8c\xe3\xa6\xc0\xfd\x77\x00\xd4\x32\x8e\x1d\xe0\x3d\x02\xf2\xa8\x85\x1c\x2b\xf8\x84\xf0\x20\x6a\x29\xc7\x0a\x56\x91\x65\x43\xad\xe5\x58\x41\x22\x82\xa8\x68\xd5\x1c\x27\xf8\x41\xb1\xbe\x4b\xf0\x8f\x45\x5d\x5e\xf7\x34\xbe\xf7\x9f\x8e\x07\xac\x5e\x25\xda\xf2\x0a\x44\xc7\x56\x0a\x33\x8d\x67\xee\x9c\x35\x66\xb0\x66\x3d\xd6\xe7\xd4\xc2\xf4\x6b\xf1\xf2\xfb\xbe\xb4\x77\xc6\xef\x08\xff\xf4\x60\xe0\x5d\x93\xf1\x73\x51\x43\xbd\x49\x90\x90\xeb\x64\x83\x64\xff\x6c\x91\xde\x6d\xe6\x9c\x96\xd3\x89\x5a\xca\x49\x02\x41\xf4\x83\x11\x18\x5a\x0c\x0c\x7d\x04\xef\x1a\x96\xab\xd4\x33\xf7\xf9\xb7\xe7\x0d\x2c\x8e\x8b\x62\xac\x47\x9f\x7d\xa7\x5a\x3a\xdb\x4d\x4e\x5b\xba\xb1\x2f\x71\xdd\xed\x3c\x73\x12\x06\x86\xbc\xc1\xeb\x9f\x71\x71\x9d\x8c\x28\x92\x2f\x53\x78\x76\x9c\xee\x80\xbb\xff\xaa\x99\x8d\x45\x43\xff\x66\x8c\xc2\xe1\x46\x4f\xce\x27\x11\xc2\x10\x06\x86\x76\xc1\xdb\xac\x97\xf2\x12\xa3\xae\xe3\x82\xb9\x46\xb8\xc0\x1c\xd4\x6a\xcb\x79\x31\x87\x6e\x67\x9e\xf1\x47\x16\xd3\xe9\xee\x41\xc1\x19\x4f\xc5\x3f\x31\x02\xed\x59\x8e\xe4\xa8\xd1\xbe\x8b\x6a\x72\x8a\xae\xf9\x78\xdb\xc0\xf7\xcb\x72\xfc\xe0\xcc\x4a\x76\xb7\xf4\x7d\xb1\x10\x2b\x61\x4d\x3f\x26\x0c\x0c\x65\x80\xf6\xe2\x26\xf7\x77\xf9\x88\x29\x72\x66\x56\x7f\x89\x9a\xce\xcd\xb4\xb0\xbe\x6a\xa4\xa2\x60\xee\x2d\xec\xdd\xdc\xe1\x38\x3e\x5b\xbd\x2f\xf8\x6f\x61\xc4\x2d\x97\x07\xd2\x46\xa1\xc5\x11\x27\xd8\x40\x3a\x0a\xb4\x40\xe2\x04\x1f\x91\xce\x0e\x2d\x92\x38\x81\x37\x32\x02\x5a\x28\x71\x82\x5d\xa4\xb3\x43\x8b\xe5\xdf\x1c\x45\x04\x68\xc1\xc4\x09\x32\x10\x01\x2a\x78\x62\x05\x09\xc8\x1c\xd0\xd0\x13\x27\x68\x43\x04\x68\xec\x89\x13\xa4\x93\xfe\xdd\x8c\x50\xe9\x13\xbb\x19\x3d\xfe\x3b\x00\x2a\x7d\x62\x07\xf0\xfc\x6f\x33\x42\xe1\x4f\x9c\x20\x12\x39\xac\x41\x05\x50\xac\xa0\x05\xc9\x3d\x54\x04\xc5\x0a\xc6\x91\xcd\x08\x0d\x42\x71\x82\x29\x64\x7f\x44\xa5\x50\xac\x60\x0f\x99\x34\x2a\x86\xe2\x16\x1a\xa9\x3a\x68\x20\x8a\x13\x2c\x20\x3b\x30\x1a\x89\xe2\x04\x4d\x48\x66\xa0\xa2\x28\x56\x90\x8f\xdc\x70\xa8\x2c\x8a\x15\xd4\x22\x93\x46\xa5\x51\xac\x60\x1a\x39\x19\x41\xc5\x51\xac\x20\x0e\x29\xb5\x68\x40\x8a\x13\x54\x23\x73\x40\x25\x52\x5c\xf2\x21\x51\x42\x45\x52\xac\x20\x04\x11\xa0\x42\x29\x56\xf0\x05\x59\x69\x54\x2a\xc5\x0a\xb2\x91\xb0\xa2\x72\x29\x56\x30\x8a\xa4\x37\x2a\x98\x62\x05\x25\xc8\x1d\x87\x86\xa6\x38\xc1\x36\xe2\x12\x1a\x9b\xe2\x04\xbf\x11\x97\x50\xe1\x14\x17\x25\x24\xac\xa8\x74\x8a\x15\x7c\x40\x56\x1a\x8d\x4f\x71\x82\x21\xfc\xf5\x31\xdc\x1b\xbf\x68\x0f\xe9\xc1\x0a\x3b\x1b\x3b\x07\x51\x7f\x5a\xd2\x58\xb0\x89\x7a\xd5\x3f\xa6\xbd\x14\xd4\x18\x27\xc1\x91\xa6\x50\x7f\xfd\x54\x46\x8c\xee\x0d\x2f\xdf\x06\x7a\xb5\x63\xb2\x5b\x5e\xf1\x87\xa6\xbf\xc2\x30\x94\x07\x22\x83\xad\x85\x7a\x70\xdf\x49\x22\xe1\xb7\x5c\xf6\x4c\x82\x8c\x3d\x52\x99\x13\xee\x37\x8a\xa9\x39\x92\x55\x97\xd7\x1f\xe7\x4c\x1e\x29\x80\xa1\x22\xf0\xf2\x8f\x86\x4b\x8f\x3e\x57\x6c\x6d\x82\x0c\xb7\x14\xcc\x3f\x0f\xc4\xe4\xd6\xd5\x92\x32\xb9\xe5\x3f\xb9\xd2\xa1\x12\x1e\xa5\xea\xf5\xd3\x13\x86\x82\x41\x7b\xc7\xa5\x34\xe6\x6f\x19\xb9\xa6\xa9\x42\x79\x24\x37\xaf\x59\x39\x2a\x5f\x70\x94\x6e\xbf\xd4\x1d\xae\x51\xd5\xea\xee\xbc\xe3\xe6\x06\x43\xa1\x60\x5b\x51\xa6\x2e\xf3\x3a\x5f\x95\x92\x1d\xbf\xe5\x73\xc8\x90\xf8\x9e\xf4\x3d\xdf\xed\x24\x3a\x12\x05\xca\x89\xd9\xec\xdc\xac\x8b\xfa\xc6\x30\x34\xfa\x3f\x2d\x60\x20\xbd\x77\x4e\xec\xd9\xfc\xb8\x71\xe6\xda\xbc\x0f\x12\x8e\x36\x42\x2d\x8c\x84\x6e\x44\x6c\x13\x78\x4b\x95\x44\x72\x41\x2e\x30\x0c\x35\x82\xfc\x95\x77\x2f\x5b\xe2\x90\x9c\xe9\xf8\xcf\x75\x9b\xa0\x8f\xa3\x6e\xca\x19\xc5\x6f\x13\x73\xbd\x9c\x1f\x5b\x7b\x4a\xb6\xe8\x1c\x3e\x26\x0b\x43\x8b\xa0\xf3\x0e\xe6\x03\xdc\x05\x3e\x41\xd5\xbb\xad\x23\x51\x46\xb1\xe9\x55\xa3\x3a\xb2\x85\x9d\x0d\x59\x50\xc0\xb5\x00\xa1\xf9\x7b\x17\xf4\x30\x30\x14\x06\xf6\x5c\x06\x2d\x4b\xd9\xee\x9e\x37\xfa\x2a\x6c\x4f\x66\x9b\x62\xaa\xcc\xba\x8e\x04\x5e\x4f\xcc\xbb\x98\x68\xa3\xfb\x35\xc9\x77\x45\xff\x26\x0c\x43\x99\xa0\x3d\x57\xab\x8a\x13\x33\x74\xb3\x92\xdd\x2e\xdd\xf9\xaa\xbf\x56\x42\x7c\x6e\x0f\xc3\xe6\x40\x81\x99\x7a\x58\xda\x75\x8b\x7b\x73\xdd\x30\x34\x01\xd2\xda\x29\x4e\xf9\xd8\x86\x13\x75\x2c\x54\x84\x2f\x66\x56\xad\x93\xcf\xe8\xc3\x3f\x0a\x6b\x1e\xdf\x13\xaf\x91\xb8\x26\x68\x10\x66\x29\x8a\x81\xa1\x02\xd0\x7e\x4d\x00\x1e\x48\x77\x6e\xdb\xdb\xa7\x87\x1f\xa8\xb1\xbb\xe5\x54\xa6\xcb\x9f\x96\x2a\xae\xfe\xca\x2a\x16\xb2\xc9\x72\x6b\xea\x8f\xfb\x89\x60\xbf\x2e\x9b\x2f\x8a\x31\x3d\xff\x98\x35\xf5\xf2\xf5\x27\x93\xbf\xc4\x49\x8f\x65\x29\x39\x5c\x79\xd9\x95\xec\x19\x45\xbb\x48\x6f\x9a\x76\xe5\x4f\x65\x06\x17\x4b\xef\x52\x55\xd4\x30\x9e\x3b\xdb\x99\x3e\x63\xe9\x15\xc5\x7b\x49\xe9\x59\x83\x69\xf9\xed\x6d\xbd\x65\xf2\x9a\x02\x85\x19\xd1\xbd\x9e\x30\xf4\x06\xec\x31\xc7\x67\xca\xea\xab\x29\x5f\xff\x76\x8e\x16\xf1\x55\x3d\xe1\xe6\x1d\xab\x78\xba\xd1\x50\xdd\xcd\x20\xa6\x90\x26\xc8\xa5\x93\x89\x14\x86\xfa\xc1\xc5\xea\xaa\x80\xb9\xc9\x96\xbc\x2c\xfa\xef\xaf\x6d\xbf\xe7\x52\x7b\xe7\xb5\x91\x8b\xdf\x31\x54\xe0\x91\x51\xba\x1e\x51\x72\xd2\xae\x0d\x86\x86\x41\x76\xec\x9a\x73\xdb\x23\xba\xb3\xa9\x6d\x38\xa5\x7a\xf7\x1a\x1c\xdf\x58\x58\xb6\x09\xf7\x12\xe9\xc5\x3a\xdc\x62\x75\xe5\x7a\xf1\xc6\xd0\x13\x86\x7a\xc0\xe8\xe8\xd7\xbe\xab\xbe\x21\x64\xbd\x64\xf9\xd8\xd5\x73\x6a\xc8\xab\xdd\x38\x9c\x6a\xb6\x95\x61\x56\x9e\x6a\xf8\x97\xb4\xcd\x59\x69\x09\x18\xfa\x02\xa6\x9a\x90\xa6\xe6\x0f\xd3\x5c\xbe\xd3\x96\xba\xce\xb4\xec\x65\x97\x98\xf8\x88\xc9\x8a\xa6\xa6\xae\x3c\x5f\x1b\x2a\xf7\x3c\xcf\x10\x75\x15\x86\x7e\x83\xb1\xf4\x67\xa9\xbb\x98\x01\xa9\xe0\x9d\xba\x3c\xf0\x9b\x55\xdb\xf6\x1a\xe5\x8d\xd2\xbb\xb3\x27\x73\xd8\x8c\xdc\x8e\x1c\xa7\xd4\xff\x89\xf1\x84\xa1\x1c\x30\x96\x53\xc4\xae\x8f\x25\xc3\xf1\x1c\xed\x7d\x5a\x03\xae\x8e\x4e\xa7\x9d\x69\x21\xc7\x2f\x94\xc8\x11\x6d\xa6\x53\xe6\xc7\xff\xdc\xf5\x13\x86\x3a\x40\xe7\x0b\x6f\x54\xf0\x95\xd5\x19\x35\xb4\xfc\x22\xe2\xa9\x6c\x14\x39\x11\x87\x57\xc5\x48\x80\xa7\xda\xff\xf5\xd2\xd2\xad\x9c\xc9\x10\x1f\x18\xea\x00\xcf\x26\x7a\x08\x6e\x62\x8c\x1f\x0f\x2b\xb4\x9c\xa1\x34\xbc\x22\x0e\xab\xce\xa4\x65\x10\x8c\x7b\x93\xac\xff\x4a\x6d\x95\xad\x6d\x48\xf0\xc2\xc0\xd0\x16\xe8\x8d\xb4\x8c\x4d\xf2\xae\x5e\xce\x32\x3e\x91\xae\xfe\x25\xd2\xb6\x97\x1a\x72\xd3\xd6\xfe\x9b\xcc\x3b\xb5\x5c\x67\x09\xee\xd2\xab\x2d\x61\x60\x28\x1a\x8c\x7d\x77\x6e\xb8\xa7\x3e\xdb\xd0\x17\x41\x22\x79\x49\x4f\xa7\xea\x85\x1b\x42\xf9\x55\xaf\x0b\xd9\xad\x7f\x9a\x5f\x57\xf3\x2d\x79\x69\x8e\x81\xa1\x4c\x30\x3a\x43\xc1\x19\x1b\x72\x0d\xdf\x6c\xcd\xed\x9c\x3a\x5b\xce\x72\x38\xaf\xb3\x9d\x6b\x54\xab\x39\xe6\xd3\x60\x3a\xf3\x35\xfe\x6c\xf9\x0e\x0c\x43\x1e\x60\xf0\x1b\xe4\x43\x83\x97\xa2\x5e\x65\x4f\x7b\xd5\x9e\x4b\xcc\xf1\xd5\xae\x7a\x2d\xfe\xcb\xb3\xd3\x3b\xf7\x94\x67\x4a\xc2\xa8\x75\xe5\x45\x18\x2a\x07\xa7\xbb\x73\xa1\x64\x71\xec\x9c\x45\x79\xf1\xbc\xf0\x53\x33\xb7\xdb\xd6\x1e\xa3\x77\x0d\x44\xba\x4a\xa8\xbc\xd6\xbe\x74\x7b\x4d\x7d\x96\x80\x61\x28\x12\xbc\xbc\x66\xc8\x74\x3b\xcb\x5a\xde\xa7\xbc\x76\xaf\xc3\x04\xbb\x23\xde\x53\xb5\x4c\xfc\x4a\xc9\x99\x21\x26\x3d\xea\xf7\x99\x15\x4c\x9d\x60\xa8\x1b\x0c\x7e\xee\xa2\x74\xd4\x9e\x0a\xcb\x7d\xbd\xcc\xb4\x30\xa7\x86\xf4\xf3\x17\x14\xa6\xcd\xbf\x0c\x07\xff\x68\xe2\x3a\x23\x42\xf2\x72\xee\x2c\x0c\xcb\xd9\x81\x8f\x59\x1e\x21\x19\xd2\x23\x59\x56\x0c\xf0\x68\x68\xa5\xe4\x94\xf0\x5a\x64\xf7\xa9\x1f\x3c\x99\x52\x9a\x90\x77\x97\x46\xb7\x76\x38\x02\x86\x5a\xc0\xd8\xdf\x98\x74\x9e\x31\x4a\xcb\xae\x3d\x25\x44\x2e\x72\xeb\xe0\xf5\xb9\x98\x12\x4d\x1b\x42\x82\xe2\xea\x65\xc5\xeb\x79\x84\x72\x76\x97\x60\x18\x2a\x04\x6f\x93\xab\x7c\xbf\x7d\x55\x87\x0f\x2b\x91\x4f\xbd\x1a\xa1\x1b\xfd\xf8\x66\x4f\xeb\x0a\x0b\x7f\x79\x00\x53\x9c\x6c\x4c\x9b\x62\xe6\xd7\x5a\x18\x1a\x03\x8f\x38\xad\x6f\x6e\xf6\x7d\x69\x1f\x60\x16\x97\x33\x1f\x2c\x0b\xa3\xba\x52\x3d\x7a\xaf\x13\xe2\xec\xd2\x2b\xfd\x62\xb1\xcb\x3e\x30\xd2\x0e\x98\xaa\xd6\x24\x74\x51\x55\x41\x93\xa6\xa4\x2e\xad\xb9\xc9\x71\xef\x7f\x10\xe5\x9d\x9e\xea\x88\x4b\xd4\xd3\x92\x15\x6d\x6b\x48\xa8\x87\x61\x68\x11\x5c\xd5\x57\x5a\xd5\xa3\x6e\xf5\x1f\xfd\xd5\x67\xf5\xe8\xaa\xf8\xeb\xb6\x92\xf9\x6a\xf5\x5e\x8b\x27\x0a\x69\xed\xf8\xee\x35\x5d\x20\x63\x80\xa1\x25\xd0\xfc\xec\xc0\xe7\xb7\x99\x15\xe4\xda\x83\x24\x72\x71\x0a\xde\xdb\x6c\x47\x2f\x64\x8a\xe7\x5a\xc9\x74\x67\xcf\xd0\x87\xf9\xce\x73\xe9\x80\x8f\x21\x92\xf7\x9f\xe1\x28\xe5\x31\xa7\x90\x08\x70\x59\xbd\x6c\x94\xbf\x12\x87\x11\x6d\x7b\x20\xc4\xbb\x50\xba\x7d\x8a\xcb\x7d\x28\x14\x03\x43\xa9\xe0\x0a\x91\x1d\x78\x8d\x1e\x2a\x37\x9c\x70\x6d\x9a\x91\x3d\x2e\xa9\x10\x39\xe5\x22\x7a\x63\xaa\x37\x9a\x3f\x67\xe3\x0a\x9f\x97\xce\x41\x06\xf8\xb8\xd7\xfa\xdc\xba\x1f\x29\x5f\xe5\x39\xe7\xcd\xb9\x27\xb3\xdf\xbd\x97\x83\xef\xed\x7e\xfe\x7a\x24\x4f\x98\x24\x96\x4b\x63\xdf\xd1\x0b\x86\xa1\x50\xf0\xd2\xb7\xbf\x8c\xd0\x30\x4e\xbf\x8f\x76\x75\x12\x1d\x6b\x63\xfc\xe6\xb4\xba\x21\x57\x5f\xc8\x78\xe2\x36\x54\x3c\x62\xe3\xc6\xfe\xcd\x06\x86\xd6\xfe\xa7\x84\x7c\x3c\xba\x1c\xa1\xa6\x3c\xc9\x40\xf5\x4c\xdd\x74\x14\x33\xb5\xb4\x15\x78\x21\xc1\xe0\xce\x72\x69\x6f\x0e\xbd\x7e\xf6\xc4\x6d\x0c\x0c\xad\x80\x47\xbe\x3f\xec\x2e\x8a\x05\xb6\x51\x33\x66\x4e\xf7\xe6\x2f\xdc\x08\x14\x9e\x8c\x55\x62\x74\xf3\x95\xbd\xbc\x8a\xd7\x16\xb7\xc0\xae\x6f\x8f\x81\xa1\x66\x70\x4f\xa5\xbf\x4e\x19\xc1\xcd\x73\xb1\xd9\x3c\x9a\x2f\x9f\x2c\xe2\xee\x49\x33\x4e\x86\x5f\x6b\x4d\xdd\x71\xf7\x7c\xed\x5f\xa8\x5e\xf7\xaf\x85\x61\x28\x0a\x5c\xfe\xa4\x6b\xdb\x22\x21\x7b\xa1\xe6\x49\x75\xf3\xb2\x84\x33\xb5\x03\x05\x01\xaa\x2f\x9e\xd6\x24\x73\x04\xea\x69\x3d\xda\x4c\x75\xdc\x84\xa1\x38\xd0\x1d\x91\xa3\xd5\x5e\xd7\xa4\xe6\x34\x17\x4a\x85\xb8\x9c\xe5\x1c\x42\x1b\xc4\x9c\x75\x1f\x5a\x7b\xa5\xab\x90\xdf\x49\xec\x8d\x7b\x2f\x8e\x81\xa1\x19\x70\x4d\x75\xa8\x8c\x7c\x0a\x87\xda\xcc\x73\x3b\xdf\xef\x65\xa8\x2a\x0b\xe4\x31\x3e\x38\x94\x78\x5b\xac\x8e\x7d\x38\x23\x23\x9f\xb2\x8b\x4d\xf0\x1f\x21\x45\x8e\x08\xf3\xff\x60\xf3\x97\x9f\x50\x29\x05\x2b\xc8\x43\x80\x0b\x8d\x53\x70\x82\x22\x64\x04\x54\x50\xc1\x0a\x82\x11\x01\x2a\xaa\x60\x05\xa1\x08\x65\xa2\xc2\x0a\x56\x30\x8a\xcc\x01\x95\x56\xb0\x82\x46\xa4\xd5\x44\xe3\x15\x9c\x60\x11\x99\x03\x2a\xb0\x60\x05\x61\x08\x8b\xa3\x12\x0b\x56\x90\x89\x08\xd0\x98\x05\x27\x98\x40\xd0\x1a\x0d\x5a\x70\x82\x02\x44\x80\x46\x2d\x38\x41\x22\xd2\xd7\xa1\x61\x0b\x4e\x90\x8e\x2c\x1c\x2a\xb7\x60\x05\x6f\x90\x06\x04\x95\x5c\xb0\x82\x7e\x64\xe1\xd0\xd8\x05\x27\x18\x46\x8e\x6a\x50\xe1\x05\x2b\xe8\x41\xa2\x84\x8a\x2f\x58\xc1\x17\x24\xf9\xd0\x00\x06\x27\xf8\x8d\x84\x15\x95\x60\xb0\x82\x1c\x24\xac\xa8\x0c\x83\x15\x74\xfc\xf7\xe4\x0e\x0a\xc5\xfc\x15\x20\xcd\x2c\x1a\xc6\xe0\x04\x5b\x88\x4b\x68\x1c\x83\x13\x44\x23\xeb\x80\x0a\x32\xb8\xfb\x01\x89\x12\x2a\xc9\x60\x05\x1e\xc8\x3a\xa0\xb2\x0c\x56\x50\x8e\x4c\x1a\x15\x66\xb0\x82\x48\x64\x04\x54\x9c\xc1\x0a\xba\x89\xfe\x1e\xca\xa1\x02\xcd\xff\x0b\xe4\xec\x90\xc3\x20\x34\xa2\xc1\x0e\xd0\x82\x2c\x03\x2a\xd2\x60\x05\x85\xc8\xfd\x83\x06\x35\x38\xc1\x18\xc5\xfa\x22\xfe\x3f\xb2\x8d\x02\x01\x07\x2d\xfe\x73\x0c\x0c\xcd\x82\xe5\xdc\xb9\xaf\x5b\x2d\xcf\x6d\xa3\xff\xfe\xef\xc5\x25\xa7\x4b\x45\x75\x49\xbd\xd5\x44\x4e\xa7\x30\x67\x87\x6a\x36\x09\xda\x1c\x0d\x8a\x30\x30\xf4\x0e\x84\xb9\x69\x99\x4e\x03\x37\xcd\x07\x5f\xb5\x92\x76\x4c\x4e\x4b\x35\x6d\xd4\xbf\x37\x36\xa1\x17\xa7\x51\x3a\xbc\x7e\xfe\xed\x63\xfd\x9b\x7f\xca\x79\x1a\x58\xce\x9f\x75\x18\xcd\xb7\xb1\x46\x5d\x1d\xbf\x72\xdc\x23\x21\xc0\xd8\xce\x0c\x9f\xf8\x62\x7c\x46\xc1\x0b\x3c\xab\xf6\xcf\xfb\xcd\x36\x1e\x18\x18\xca\xfd\x9f\x67\x28\x94\xa4\xed\x1c\xcb\xa3\xa5\x94\x61\x85\x48\x05\x37\x47\x25\xed\x15\xb3\x9b\xdb\x1e\x26\x0d\xdd\x2d\x77\x58\x9b\x5d\x4c\x4f\x09\xfe\x9b\xdb\xb8\xf8\xcc\x22\x85\x01\xcd\x6f\x9c\xe0\x1d\xb2\x64\x68\x8e\xe3\x04\x69\xc8\x1e\x89\xe6\x39\x4e\x90\x8b\x08\x50\xe9\x12\x57\xdc\x90\x5b\x0d\x8d\x2f\x71\x82\x25\x82\xf5\x0e\x82\x7f\xc3\x4c\x58\x81\x90\x8e\x00\xef\xc5\x1f\x6e\x00\xdb\xf8\x93\x82\x91\x67\x34\x8b\x64\x6e\xde\x3d\xe2\x3b\xff\x40\x80\x7a\xba\x59\x91\xdf\x2c\xbe\x85\x20\x64\x7d\xe1\x59\x07\xd5\xb1\x3e\x49\x0c\x0c\xf9\x80\x8b\xa6\x16\x62\xcb\xd1\x30\xd8\xf7\xe1\x61\xb2\xd1\x7d\x47\xa1\xa1\x8d\xfd\xae\xb5\x91\x3b\x7b\x06\xaf\x26\xed\x5f\x7d\x22\xa2\x35\x8b\xc7\xc0\x50\x35\x98\x74\xa5\x5f\xe5\x03\x5e\xf2\xea\x13\xff\xda\x64\x17\xba\xce\x18\x4a\xc3\x96\xef\x75\x95\xae\xd5\x29\x6f\x1d\xbf\xe8\xd2\xfb\x59\xd1\x4d\x0c\x0c\x65\x81\xed\xcf\xed\xcc\xbb\xdf\xa4\xba\xca\x4f\x6b\xa4\xb4\x57\x7e\xbd\x7f\xf5\x59\xbb\xf0\xb5\x68\xb3\x98\x96\x9b\x5f\xcc\x2e\xe8\xaa\xe4\xbc\x7c\x04\xc3\x50\x26\xd8\x41\x58\x4b\x28\x39\x10\x72\xbe\xf6\x5b\xe0\xb0\xa2\xcc\xd1\x9c\x4b\x7e\x9b\xa2\x36\x7b\x78\xb7\xae\xf5\xc7\x48\xae\xfc\x4c\x98\x57\x30\x0c\x65\x81\xd3\x3d\x78\x8a\xdf\xf4\xe0\x0b\x9b\x5e\x93\xfc\x20\x97\xbd\xd0\xda\xd5\x17\x2c\xc1\x2e\x29\x1f\xec\x59\xbf\xd0\x3c\x19\x6f\xe9\x51\x88\x16\xfc\xb7\xa8\xfc\x25\x30\x04\x15\xd0\xc2\x82\x13\xf8\x20\x19\x81\x16\x17\x9c\xa0\x1a\xc9\x6a\xd4\xc0\x60\x05\x59\xc8\x5e\x8a\x1a\x19\xdc\xf6\x8e\x6c\x44\x68\xb1\xf9\x3b\x02\x32\x69\xb4\x4e\x05\x27\x48\x25\x5a\x5f\xc0\xff\xc7\x86\x45\x01\x43\xf4\xff\x9f\xca\x86\xe6\xc0\xbe\x65\x26\x09\x4e\x7d\x9c\xc5\xb3\x16\xfb\xea\x43\x9d\x3b\x75\x9f\x43\xb1\x7c\x5a\xf3\x70\xa4\xfd\x49\x8a\xd7\xf5\x4a\xf6\x4e\x6b\xbf\xff\x94\x35\x30\xe9\x16\x7c\x5e\x4d\xb6\xa9\x76\x4e\x9f\x55\xbc\x91\x70\x74\x80\xfc\x74\xfb\xd9\x98\xc1\xe0\x02\x11\xcf\xbd\xc8\xf8\x21\x07\x29\x0f\x51\x18\x86\xc2\x41\xf2\x27\x7c\xdf\x49\xfc\x41\x20\x95\xf5\xe3\xf4\xcc\x61\x06\x92\xbb\x9f\xfd\x0d\x32\x6c\xda\x05\x72\x75\xc3\x36\xbd\x95\xac\x12\x08\x88\x61\xa8\x07\xbc\x7c\x75\xc0\xa4\x6b\xb2\xef\xd1\x37\x84\xbb\xb7\x13\x82\x2c\xab\x9a\x07\x3e\xe4\xf7\xab\x5d\x1d\xb6\x8c\x24\x97\x3a\xce\x57\x35\xc8\x22\xf8\x6f\x5e\xe3\xc2\x33\x87\x30\x02\xaa\xdb\xb8\x0a\x8e\xe4\x04\xaa\xdf\x58\x41\x38\xb2\xad\xa0\x79\xfe\x17\xbd\xfe\xcb\x3a\xb4\x8e\x11\xd7\x28\x20\x73\x40\xeb\x19\x71\x82\x35\x64\x04\xb4\xa6\x11\x27\x58\x41\x7e\x9e\x41\xed\x1a\xb1\x82\x66\xe4\x56\x43\x6d\x1b\xb1\x82\x28\xe4\x37\x29\xb4\xc6\x11\x27\x88\x43\x5c\x42\xeb\x1c\x71\x82\x19\x82\xf5\x44\x5a\xac\x02\xed\xdd\x74\x58\x41\x26\xd0\xfd\x20\x8a\x09\x86\xa1\x31\xf0\xb0\xaa\xd1\xd1\x0a\x3e\x61\xf1\xfc\xce\xcc\x2f\x3c\x4d\x6b\xd9\x92\x93\x0b\x2c\x8b\x1d\xaf\xdf\x3a\xb0\xac\xd3\xfc\xa2\x4f\x6e\x25\x26\x81\xa1\x59\x30\xb1\x85\x98\x49\xe7\x37\xcb\x93\x0b\x67\x84\xc4\x2e\x1b\x2b\xcf\xe7\x39\x0f\xa9\xb1\xd4\x7c\xb3\x26\x9c\x51\x25\xea\xff\xe4\x4c\xda\x0b\xc3\x10\x0c\xb6\xcc\x4b\xce\xd4\x69\xe5\x33\xf7\xd6\xd5\x2c\xae\x4b\x66\x84\x3c\xc2\x5b\xb7\x49\x71\x52\x25\x50\x7c\x1c\xa2\x78\xfb\x21\x85\x78\x7e\x0f\x0c\x95\x80\x67\x4f\x7b\x21\x1f\xfa\xd8\xea\x62\x2b\xa7\xe6\x36\xde\xab\xea\x3f\x3a\xf5\x73\x42\x90\x9f\xbc\xe8\xc9\xb2\x4e\xcb\x63\xed\x9a\x30\x5d\x5d\x18\x96\x33\x06\xcc\x05\x64\xaa\x95\x4a\x88\xc3\x0d\x5e\x7b\x3f\x5d\x7e\x92\x2f\x16\x6a\x15\x99\xe6\xdf\x78\x4d\xab\x88\xec\x71\xbd\x15\x43\xd4\xb1\x38\x58\xce\x02\xb0\x5e\x3c\x7c\xfc\x70\x0d\xbf\x93\x48\x10\x83\x00\xb1\xac\xef\x23\xfa\x46\xea\xcd\x5d\xc5\x8e\xce\xe8\xdd\x1a\x8c\xbe\x21\x5e\xf1\x81\x27\x2c\xa7\x0d\x98\xdf\x2d\x2d\x52\xa8\x67\x59\x7c\x22\x33\x8b\x67\x26\x7b\xfe\x32\x5e\x50\xaa\x7b\xb7\xbf\x4b\x73\x6e\x8b\xfe\x4b\x8f\x67\x4d\xb9\xf2\x30\x54\x09\x9e\x25\x98\xb8\xdc\x39\xe8\x18\x23\xa7\xe5\xf6\x92\x30\xb5\x19\xe2\x4e\x3b\x14\xc8\xf8\x88\xf1\xa4\x12\xc7\xcb\x4b\x4c\x6f\xcc\x74\x79\xb9\x60\x68\x14\x0c\x64\xbc\xf6\x62\x0c\xf7\xf1\x33\xce\x2f\x6d\xde\x9a\xdf\x7e\xb2\xd0\xa1\xc6\x7c\xb5\x99\xf1\x88\xef\x8c\x80\xb7\xe9\xcb\x98\xc6\x99\xb3\x30\x0c\xb5\x83\xf6\x32\x73\x94\xa3\xab\xcf\x09\xc3\x85\x59\x0e\x87\xbd\xce\xbc\x92\x78\x7b\xa9\x7f\xa7\xb6\xd3\x78\xa7\x35\x22\xa5\xa8\xee\xbc\xa2\x15\x0c\x1d\x80\x81\x9c\xb8\x5f\x23\x77\x47\x3c\xf8\xe7\x04\x47\x7b\xd6\xdd\x92\xf1\xaa\x7a\xaa\xdb\x14\x39\x8c\xc7\x1f\x98\x8f\x86\xbc\xb8\xd8\x97\x12\x0c\xc3\x72\x92\xe0\xb9\x4f\xb6\x3d\x7b\x25\x9b\xa9\x5e\xf2\x67\xe6\xf7\xa9\x8e\xcd\x66\xfd\x9d\x12\xc2\x4d\x7c\x50\x87\xc1\x8f\x49\x6a\x69\xe2\xb1\x09\x18\x8a\x00\x41\x6e\x55\x32\x59\x81\xdd\x84\x3f\xa8\xc1\xcf\x07\x62\xef\x31\x98\x76\xa5\x9f\xfc\x50\xb9\xed\x61\x4f\xe9\x7d\x40\x2a\xea\x33\xf2\x15\x86\xa1\x21\xd0\xf9\xe1\xa9\x3b\xdf\xf7\x04\xfc\x2d\xc5\x58\x7e\xea\x49\x98\x0e\x3c\xc5\xe0\xf7\x26\xf3\xb3\xb3\x07\xb2\x9e\x7e\x74\x52\xe7\x56\x80\x00\x0c\x7d\x01\xcd\x3f\x45\x9a\xd3\x5b\xeb\xe8\x77\xdf\x3e\x70\x59\x09\xeb\x0b\x74\xf8\x41\x7f\xac\xd2\xfe\x68\x4b\x68\x80\xae\x9d\xdf\x3d\x3d\x47\x02\x0c\x0c\x05\x81\xdb\x67\x0b\x66\x2a\xaa\x44\x35\xea\xaa\xe7\xfd\x2b\x1a\xfa\x2f\xfb\xf1\x26\xa4\x22\xcd\x49\x9c\x17\x94\x6e\x73\x35\xc5\x46\x38\x75\x71\x63\x60\xa8\x01\xb4\xbf\x76\x38\xff\x42\x92\x33\x0f\xb5\x7a\xc9\x3c\xe7\x73\x36\x1d\x85\x8b\x9c\x3d\xaa\xbe\x61\xb1\x31\x05\x54\x96\x12\x5e\x1b\xd9\x7e\x30\x0c\x05\x83\x08\xb1\x44\xfd\x2e\xa3\x66\x9b\x5e\xfb\xf9\xac\xb9\xe1\x38\xe1\xe4\xe0\x95\x3a\xb9\x25\xcd\x84\x57\x6b\x45\x63\xc7\xde\x95\xb2\x9d\xa5\x85\xa1\x0c\xd0\x7c\x75\xd1\x8a\xde\xb3\x4e\xf0\x8e\xe4\x50\xa0\x80\xd4\x8d\xee\x6c\x03\xd6\x0c\x5a\xce\xb1\x7b\x90\x6b\xe7\x33\x29\xa9\x57\xda\x41\x7f\x76\x2b\x90\x80\x12\x04\x9e\xfb\xab\x5e\x5e\xba\xdd\x62\xe7\xe2\x35\xb7\x6b\x6b\x10\x47\xb3\xa3\x5c\x97\xd0\x7e\x85\xdb\xe3\xb3\xba\x7d\xaa\xbf\x30\x0c\x43\x6d\x60\x78\x88\xbd\xf3\x08\x38\x3f\x14\x05\x6e\xfd\xae\x77\xb3\x5d\x9b\xe1\xf1\x6a\x09\xe9\x93\x95\x9b\xea\xb4\x70\x3b\xc8\xce\xe0\x21\x37\x87\xa1\x7d\xd0\x9d\x17\x77\x36\x38\xfc\x0f\xe7\x53\xd8\x6c\x8f\xc5\xfb\x8c\x34\xd2\x1e\x22\x73\x32\xf6\x37\x3b\xae\x68\xa5\x54\xb6\x9d\x6d\x30\xb5\x09\xc3\x72\x36\x80\xf9\x91\xad\xe7\x2d\xeb\xc4\x42\x9b\x86\x8f\xb6\xec\x3e\x5d\x3a\x32\xb2\xab\x2a\xc8\x7d\x77\x29\x63\xdc\xe6\x79\x5e\xfc\xc8\xf5\x17\x72\x30\x94\x0c\x3a\x63\x1e\xa9\xa0\x5e\x6c\xc1\xcc\xfa\x2e\x66\xb7\x24\x88\x62\x3e\x99\xb0\x4e\xf7\xde\x43\x7d\xa9\xcf\xe7\x76\xe4\x94\xf0\xef\x29\x4d\x83\x8f\xfe\x46\xb4\xfa\x8b\x78\x98\x68\x0c\x5b\x51\x18\x32\xfc\x6c\xbe\xd1\x27\xb0\xeb\xdf\xf8\x7d\xf9\x16\xfb\xc9\x05\x0e\x55\xe5\x1b\xcf\x3c\x61\xc8\x07\x74\xfc\x3c\xd1\xdc\x69\xba\xd1\xe9\x7b\x2e\x43\x2c\xbf\x93\x99\x33\xc2\xeb\xec\x5d\xb7\x58\x1f\xc7\x93\x0f\x5e\xf0\x7f\x40\xd7\xf3\x48\x00\x86\x26\x40\x70\xab\x31\xbb\x73\x90\x7f\xae\x22\xb8\xea\xe9\xdb\xe8\x67\xc7\x09\x44\x96\x8e\x06\x09\xea\xd1\x09\x52\x50\x8a\x88\x15\xd9\x6e\x35\x44\xc0\xd0\x3a\x78\x87\xac\xd9\x50\x09\x47\xf4\xfd\x14\x16\x75\xa5\xcc\xbf\x72\x43\xf5\x18\xf3\x4c\xe3\x89\x2c\x76\xf6\x8a\xe3\x5b\xcc\x62\x8a\xce\x9b\x73\x18\x18\xaa\x03\x73\xde\x4b\x54\x4d\x43\xe0\x69\xb0\xc8\x8a\xa1\x96\x34\xa5\xf6\xe0\xe9\x8b\xf4\xaa\xb6\x94\x3c\xd3\x1e\x8b\xb6\x82\x45\xfb\x0c\x1d\x7a\x9e\x30\xe4\x0d\xba\xf3\x54\xc4\xa4\xdb\x89\xeb\xd6\x07\xeb\x2d\x59\xd2\xbd\xc9\xea\x16\xcc\x80\xa2\xde\x7e\xf7\x88\xc9\x33\x09\x3c\x41\xeb\x57\xfb\x61\x30\x94\x0a\xc6\x51\xf8\xba\xdc\x8c\xd7\xeb\xfa\x3c\x12\xcf\xa4\x38\xfc\x3d\xb5\xa2\xe1\x21\xae\xa3\xe4\x5c\x52\xfb\x74\x09\x65\x92\x74\xe1\x27\x6f\xc1\x50\x11\x78\xf5\x6b\xa7\xe9\xcf\xbf\x20\xca\x58\xc4\xfb\x31\x41\x40\xd9\xca\x95\x33\xca\x97\x1a\x20\x4a\xfd\xac\xa8\x21\x20\x47\xde\x7a\x87\xb1\x08\x86\xa1\x3d\x70\x9b\xb7\x68\x2b\x1e\x3b\xc9\xcb\xde\xac\xb8\x2f\x79\x5a\xfd\xf4\xe0\xbe\x4a\xa3\x25\xdf\x1a\x5e\x4f\xef\xf6\xc5\x15\xd1\xb2\x73\x0b\x86\x30\x74\x00\x7a\xb3\x67\x3f\x43\x10\x88\x2f\x3e\x73\xfe\x75\xbc\x62\x93\xd5\xc9\xb6\x62\x2e\xd9\x0a\x76\x21\x8d\x63\x1c\xba\x74\xca\x46\xd5\x55\xbb\x18\x18\x7a\x0e\x06\x27\x7d\x3d\x6a\x72\x49\x51\x57\xa7\x5f\x9c\xe5\x1d\xe5\x95\x6c\x67\x6b\xd3\x46\x4c\x24\x17\xd5\xb8\x5b\xf0\x67\x72\x6f\x2e\x4e\x32\x0c\x0c\x0d\x82\x29\x2f\xdc\x94\x8a\x6f\xc7\x9b\x48\x49\x7a\x78\x9d\x20\x5d\xb8\x28\x56\x68\x73\xe1\x54\xd3\xe8\x87\x4f\xf1\x94\x02\x93\x91\xb7\xfa\x08\x31\x30\x54\x09\xda\x67\xf4\xbf\x48\xeb\xe1\x31\x91\x5b\xaa\xbb\x43\x79\x21\x32\x2c\x4b\x20\x44\xc2\x5f\xbc\xff\xa5\x3b\x4f\x09\x6f\xee\x17\xde\x76\x2d\x4f\x18\x2a\x01\xcb\x0e\x0b\x49\x0b\xd7\x23\x3c\xf1\xf1\x17\x86\x73\xca\xb9\x51\x5b\x8b\xe7\x39\x76\x8f\x4d\xd8\x5e\xee\xbe\x70\xaf\x9b\xf4\x42\x51\x9e\x0c\x0c\x7d\x07\x33\x0d\xb2\x2a\xd9\x5a\xdd\xc5\x2b\xd1\x96\xaa\xc6\x64\x7a\x3a\xab\x16\x3e\xff\x54\xaf\x2a\x3d\x9a\x9f\x70\xba\x3e\xda\xc5\x27\x63\x1b\x86\x96\xc0\xe0\xff\x64\xf3\x1b\x99\x92\xac\x0b\x19\xaa\x2f\x0c\xa9\x3a\xcb\x24\x7a\x66\x94\xb0\x6b\x86\xbe\x50\xf8\xc1\xc6\x0f\xff\x5b\x0a\x24\xa5\x18\x58\x8e\x0d\x30\x57\x7e\x13\xcf\x23\x54\x7e\xa2\xb1\xfe\xd2\x17\x42\x1e\x5a\x83\xf3\x0e\x3f\x39\xc5\xe2\xb5\x2e\x7e\x56\xb8\x71\x70\x38\x36\xcf\xdd\x08\x86\xa1\xd8\xff\xf9\xd9\x57\xeb\x72\xeb\x1b\xa8\x87\xb7\xef\x4a\x18\x1f\x25\x79\xbd\x5e\x7b\xf8\x89\xac\x5b\x4d\x85\xde\xc3\xac\xa4\x1f\xde\x4a\x1b\x78\xc2\xd0\x24\x38\x57\x8a\xd1\xb1\x47\x8d\x32\x64\x92\x73\x57\xef\xc7\x1c\xd6\x67\xb3\x5d\x50\x2e\x7c\xe3\x1a\xc9\xca\x7c\x79\x95\xef\xca\xb6\x51\xf2\x80\xe0\x3f\x16\x7a\x39\xb2\xff\x3f\x15\x40\x4e\x73\x50\x4b\x3d\x56\x30\x8b\xb0\x20\x6a\xad\xc7\x0a\x60\x84\x72\x50\xab\x3d\x56\x50\x82\x3c\x00\x85\x5e\xef\xff\x08\xe4\x8c\xff\xda\xa3\x55\x7c\x9c\xbd\xc5\x5f\x7b\xd4\x92\x8f\xb5\xd7\xfe\x3b\x01\xd4\x9a\x8f\x9d\x40\x25\x02\x82\xa8\x55\x1f\x2b\x18\x45\x62\x8a\x5a\xf6\xb1\x82\x76\x44\x80\x5a\xf8\xb1\x82\x03\x24\xa6\xa8\xa5\x1f\x3b\x67\xc9\xbf\x03\xa0\xd6\x7e\xec\x00\x11\xc8\x61\x08\x6a\xf1\xc7\x0a\x86\x90\x29\xa0\x95\x7f\x9c\xe0\x0b\x22\x40\xab\xff\x38\x41\x10\xd2\x22\xa0\x02\x00\x56\xd0\x80\x08\x50\x09\x00\x2b\x08\x46\x7a\x65\x34\x06\xc0\x09\x32\x10\x01\x2a\x04\x60\x05\x6b\x48\x13\x82\x4a\x01\x58\x41\x1b\x12\x25\x54\x0e\xc0\x0a\xf6\x29\xff\x66\x06\x2a\x09\x60\x33\xc3\xe6\xef\x00\x68\x28\x80\x1b\x20\x99\x00\xe9\xde\xd1\x88\x00\x96\xa7\xff\xff\x7f\x83\x82\xde\x80\xdb\xaf\x9a\xe0\xb9\xa3\x47\x72\x93\xb4\x15\x54\x7c\xfc\xca\x64\x5a\xcd\xc5\xbb\xf8\x7e\x1a\x4b\x73\x3e\x58\xd8\x57\xf8\xbc\x57\xf6\xf9\x19\x06\x86\x7a\xc1\xe2\xc1\xa4\xd4\x99\x5a\x3f\x40\x9e\x4b\xf3\x3b\xd2\xaa\x4c\x28\xd9\xc6\x61\xb0\xcc\xec\xfc\xe1\xe9\xc7\xb3\x44\x92\xa6\x1d\xd6\xdc\x79\x7f\xb2\x15\x3c\x1c\xd8\xd0\x36\x34\x79\xe1\x96\xff\x61\xf9\xb0\x63\xd7\x52\x91\x7b\x5f\x69\xd0\xf7\x1b\x9f\x1d\x4b\x48\xcb\x34\xce\xad\x31\x08\xd4\xfe\x99\x43\x00\x58\x3d\x56\xe8\x31\x06\x3b\xe9\x61\x77\x93\x07\xc9\x6f\x1a\xd1\xb1\x5d\x09\xb5\x22\xb0\x5a\xfc\x9a\x38\xcc\x7a\xbd\x3d\xaa\x46\xef\xcc\x88\xe0\xbf\xb9\x8d\x0b\xcf\x1b\xe4\xf8\x04\xcd\x6f\x9c\xa0\x17\x49\x09\x34\xc7\xff\xde\x9a\x48\x6f\x8d\xe6\x39\x4e\x10\x80\x64\x29\x2a\x92\x61\x05\x3e\x88\x00\x15\xca\xb0\x82\x09\x64\xd2\x68\x58\x86\x13\xac\x23\x07\xf6\x68\x5c\x86\x13\xd4\x21\xfb\x11\x2a\x98\x61\x05\xde\x88\x4b\xa8\x68\x86\x15\xa4\x22\x77\x1a\x2a\x9c\x61\x05\x45\xc8\x08\xa8\x74\x86\x15\xec\x21\xb5\x19\x8d\xcf\xfe\xee\xf2\x88\x4b\x68\x80\x86\x13\x3c\x47\xa2\x84\x46\x68\x38\xc1\x20\x92\x7c\x68\x88\xf6\xb7\x16\x22\x02\x54\x46\xc3\x55\x7f\x04\x17\x50\x29\x0d\x2b\xf8\x8e\x24\x1f\x1a\xa7\xe1\x04\x4b\xc8\x57\x0c\x50\x49\x0d\xbb\xe3\xb1\x21\xbf\x7a\xa3\x91\x1a\x76\x80\x58\x24\xaa\x68\xac\x86\x13\x4c\x12\xae\x87\xe2\xde\xcd\x45\xfb\x90\x20\xac\xf0\x6e\x27\x6b\x3f\xea\x18\x06\x86\xaa\x40\x82\x37\xe9\x8a\xd1\x95\xf9\xe8\xb0\x4b\xab\xf4\x3a\xf7\x86\x67\x86\x9c\xb6\x59\x86\xde\xc5\x2c\xb9\x94\x13\x16\x1e\x5a\xc7\x76\xcd\x56\x60\x18\x6a\x07\x37\xb1\x71\x62\xfa\x93\x27\x6e\x16\x3f\xe7\x62\x9a\xfc\x6e\x9e\x3e\x36\x1c\xea\x5c\x1b\x3f\x28\xe5\x39\x28\xe6\xf6\x35\x86\x93\xfd\x97\x38\x0c\xed\x80\x2d\xb4\x90\xc9\xf9\xfb\xec\xc2\x7e\x37\x98\x85\x33\x84\x68\xef\xfa\x9f\x9b\x20\x95\x58\x88\xda\x2e\xf0\xd9\x1a\x9a\xa1\xcb\xa0\x2b\xbd\x8c\x81\xa1\x4f\xe0\xe5\x5f\x16\xef\x79\x90\x89\x6d\x5c\x97\x18\xeb\x34\x2d\xb2\x6a\x0d\xfb\xf0\xf3\x90\xaf\x87\xe6\xc0\x5e\x7b\x14\x4b\xb7\x7c\x66\xff\x2c\x0c\x43\xd5\xe0\x9e\xfd\x7a\xd6\xbd\x2d\xad\x6f\xdd\xa8\x7f\xdc\x61\x70\xfb\xe5\xbe\x76\x15\x5b\x66\x3c\x95\x8b\x9f\x81\x56\xa9\xff\xa9\xf4\xc9\x25\x3c\x18\x1a\x01\x0f\x5f\xd2\xf6\x8c\x83\xbe\xf0\x50\x09\x9f\x09\x9b\x88\xf0\xcd\x11\x94\x66\x7a\x9f\xd5\x46\x75\x7f\x77\xe2\x8a\x5d\x53\xfd\x50\xee\xa4\x3f\x06\x86\x3a\x40\x66\xee\x31\xd5\xf1\x91\x2b\x3e\xd7\x4c\x55\x92\xf5\x68\x78\x20\x4d\x36\xf0\x1d\x93\x21\xb7\x7f\x12\x95\xd6\x2b\xc3\x8e\x5d\x2b\xbc\x64\x18\x86\x26\xc1\x92\x70\xba\x8f\xe8\xee\xde\xed\xa0\x22\x31\x16\x0d\x45\x39\x93\xf3\xbe\x04\x6c\x92\x2b\xd4\x9a\x43\x32\xcd\x2b\x62\x98\x49\xeb\xbd\xd7\x30\xf4\x1b\x8c\x4e\x79\x7e\xb3\x3f\xde\xc8\x73\x46\xeb\x9c\x5f\x9a\xb3\x9e\x76\xde\x7d\x77\x53\x5c\xd4\x3d\x84\x65\xde\xd7\xa6\xf2\x74\x86\xde\x1f\x80\x61\x28\xe5\x7f\x1e\x7d\xbc\x5a\x20\x6d\xc4\x6e\xa1\x49\x28\x75\x7c\x59\xc7\x37\x21\x6c\xa8\x39\x30\x67\x27\xd0\xf0\x61\xf4\xe3\x95\xd1\x8d\xed\xb2\x76\x18\xda\x01\x1b\x84\x38\xca\xe7\x4f\xed\xdc\xe3\x0a\x1d\xf4\xb9\x89\x0d\xab\x9f\xd9\xbf\x0f\x8a\x29\xac\x5b\x3e\x74\xd1\x2f\x49\xf8\x4b\x74\x75\x7a\x34\xd8\x9e\x9f\xf4\xf7\xba\x23\x6f\x71\xcc\xd6\xf9\x6a\x59\x4f\xec\xea\x97\xbd\xd1\x1e\xea\xce\x7e\x29\x9f\x6c\x4f\xcd\x4b\x31\xdd\x63\x95\x7f\xee\x17\xd0\xf3\x4a\xeb\x44\x77\x2b\x72\x5d\xbb\xeb\xdb\xf7\x3d\x53\xaf\xea\x0e\x7e\x67\x18\x5e\xd9\x64\x9c\x9e\xc3\x6b\x21\x12\xb9\xb0\x70\x73\xdd\x13\x86\x3c\xc1\x5a\xdc\x66\xf5\x5b\xcd\x5c\xff\x38\xcf\x40\x3c\x67\x40\x4d\x4b\xae\x51\xa2\xfb\x09\x51\xb3\x7b\xec\x51\xcd\x56\x5b\xb4\x55\x6e\xe3\x09\x30\x14\x0a\xae\xd3\xd5\xeb\xde\x32\xd5\x91\x17\xf0\xdc\xa6\x0b\x02\x69\x33\x8e\x7b\x54\xae\x17\x79\xc7\x85\xe7\x8f\x76\x9d\x59\x4f\x4d\x7e\xe6\x34\x08\x43\x8d\xe0\x44\xc7\xb2\x52\xdc\x14\x6b\x6e\xe9\x27\xb0\x77\xcf\xda\xb4\x18\x75\x92\x5f\x61\x6f\xe4\x5c\x9e\xb5\x70\x14\x4f\x56\x25\x6b\x9c\x57\xc3\xc0\x50\x20\x98\x35\x46\xbb\xc3\xbd\xfe\x4b\xdb\x96\x6e\x0a\xb7\x5b\x7d\xf5\xf0\xe9\x54\x3d\xb5\xae\x77\x9f\xb2\xf7\x93\x3f\x79\xf8\xe7\x8c\x6d\xd8\xcd\x3f\xe5\x15\xec\x8a\x5b\x6c\xdd\x4b\x15\x2c\x30\xfa\x3b\xeb\xc9\xf4\xd3\x42\x3b\xa7\x03\x98\xcc\x7f\x56\x2c\x59\x44\xa6\x6e\xf4\xbf\xf9\xcc\x57\xa9\x0a\xc3\x50\x15\x78\x7d\x19\xc2\xcd\x50\xb7\x1d\x39\xe3\x89\xf3\x7c\xa5\x67\xd2\x1e\x5b\x78\xfe\xa0\x89\x64\x4e\xba\x78\xf4\xe6\x6f\x25\x51\x1f\x88\xa5\x0a\x86\x96\xc1\xac\xa1\xa8\xbb\xcd\x74\x2e\xee\x62\xda\xde\xa3\x5c\x5f\xb3\xfa\xc8\x5b\xd1\x27\x6a\x62\xfb\xe8\x1f\xbe\xd6\xbd\xf3\x86\x9a\x3b\xb7\x54\xde\x13\x96\x03\x9f\xeb\x72\xab\xaa\xdf\xed\x7a\xba\xc3\x61\x72\x9e\xce\x37\x3b\x60\x6a\x69\x8e\xac\x77\xfe\x4e\x69\xaa\xb0\xea\xf3\xf1\x67\x47\x99\x95\x6b\x61\xa8\x11\x74\x26\x51\x78\xe7\x70\x26\x47\xf1\xd3\x36\x0b\x6b\x29\x27\x5e\x7e\xea\x30\x86\x7e\x16\xb6\xc2\xe6\xe8\x39\x99\x07\xae\x1b\xfe\x66\x97\x61\xa8\x1d\x3c\xef\xe8\xa7\x2d\x7d\xe7\x74\xa4\x4f\xb2\xfb\xc3\x56\xa6\x5b\xeb\xd2\x5d\xf2\x4f\xbc\x2c\x94\xb7\xec\x45\xa5\xfb\x7b\xb7\x78\x85\x2e\xde\x82\x61\x28\x1e\x5c\x2a\x21\x97\x63\x5f\x35\xb8\xd9\x6c\xa9\x6f\xbc\xc8\xba\x53\xd8\x2f\xee\x4e\xc3\x9b\x21\xbe\x62\x6e\x16\x90\x55\x65\x9e\xa9\x77\x7c\x02\x86\x7a\xc1\x1b\xbc\x9d\x87\x8e\xde\xc0\xe5\x09\x81\x6f\x7d\x64\xc3\xe0\xcc\xfe\xf1\xbc\x33\x27\x2f\xcc\xb6\xc6\x28\xf5\x64\x0e\xd7\xdf\xdf\x7c\x40\x89\x81\xe5\x4c\x01\xf3\xe2\x99\x85\x00\x0f\xb6\x35\x35\xf7\x3a\x0f\x51\xa6\x65\x0a\xdd\xd2\xdd\x1d\x87\xd9\x98\xc9\x8b\xd9\xc9\x37\xbe\x12\x7c\xda\xca\xc5\xc0\x50\x17\x98\x67\xf1\x05\x02\x8f\x84\x76\xde\xc8\x55\xa8\x50\x53\x07\xac\x7f\x3c\x27\x65\xee\x4d\x9c\xad\x36\x71\x4a\x9f\x79\x6e\x3c\x70\x9d\x9d\x05\x86\xa1\x62\xd0\xde\xc5\xb4\x43\x9b\xc1\x37\x59\x80\xbc\x9a\xf8\xd2\xc4\x19\x67\x0c\x9f\xfc\x6d\x25\x82\x2f\xb3\x85\xbe\x51\x2b\x65\x4e\xb2\xe7\x2f\xc3\x50\x39\xb8\x5b\x7e\x6f\xbe\x79\x3f\xdb\xa3\xfb\xd7\x78\x75\x51\xbf\x87\xed\xd7\xc2\xcf\xc9\x77\x2b\x18\x3e\xe8\xe5\xbf\x88\x88\xdd\xe1\x3b\xd8\xa4\xfb\x83\xad\x60\x70\x74\x64\xdd\xcd\x4a\x7c\xfc\xdb\x48\x1c\xe5\xf1\x6b\x0a\x3a\x7e\x54\xb4\xd6\x28\x3e\x62\x2b\xc2\xb3\x28\x75\x78\xd3\xf7\x9c\x20\xeb\x4f\x65\x04\x13\xf9\x80\xed\x4a\x9f\x0b\x91\x78\x40\x60\x9f\x10\x7d\x66\xde\x0a\xc1\x98\x1e\x49\xf6\xea\x7b\x72\xf5\xef\x1c\x64\xc2\x9d\xbc\x03\x26\x9e\xb0\x1c\x0f\x60\x4e\x33\x3b\x2c\x79\xd5\xd6\x37\x41\xe3\xf8\xe9\xdf\x87\x94\xdc\x5b\x75\x60\x4b\x82\x3b\x43\x53\x64\x02\x2c\x3a\x47\x8a\x4c\x5c\x8c\x60\xa8\xe6\x7f\xbe\x30\x17\xa2\xc8\x5f\xe2\xa1\xea\xf9\x63\x05\x16\xa2\x60\x88\x0b\x3c\x2a\x3a\xfc\x6b\x80\x27\x7b\x0c\xce\x19\x88\x62\xb1\x35\x63\x84\xa1\x39\x30\x36\x64\x1c\xdd\xca\x77\x0b\xed\xab\x69\x3d\x7f\x8a\x96\xb8\x9c\x0b\x79\xd0\x26\xd1\xad\x05\x2d\xb3\x52\x37\xbe\xa0\xa2\x99\x30\x4f\x82\x61\x28\x00\xcc\x1c\xea\x74\x96\x3d\x7f\x36\x81\x8c\x44\x52\x49\xbf\x52\x6a\x31\x3b\x17\x43\xc6\x9f\xc4\xa3\x1f\x8d\x17\xba\x98\xc4\x36\x63\x6e\xf5\xc2\x50\x0e\x98\xf5\x0f\xce\x44\x8a\xad\xa6\xae\xb9\x6c\xb5\x07\x3b\x62\x3e\x92\x78\x0a\xd0\x51\x34\x1b\x16\x0d\xf9\x36\xc9\xdc\x28\x98\xb5\x64\x23\x81\x61\xc8\x0f\xbc\xfc\x83\x6b\xaf\xf0\x4b\xdd\x73\xd2\xb4\x68\x49\xf5\x8d\x9f\x49\xbb\x8c\x39\x5f\x3e\x26\x25\xc4\x2c\x16\x03\xd1\x7f\x24\x18\x7e\x47\x04\x43\x11\xa0\xf7\x63\x2b\x07\xf8\x47\x1c\x1e\xd1\x5b\x1b\xc7\x49\x07\x88\x70\x75\x9e\xf3\x4d\x8f\x4a\x5c\x3f\xba\xdd\x36\xe3\x5b\xe9\x1c\x92\x2a\x82\x81\xa1\x18\x30\x31\x23\x68\x5b\xe2\x9e\xd5\x96\x47\x58\xae\x8d\x9f\x5d\x39\xfa\xe1\x4a\x92\x54\xe3\x44\xbf\x4a\xf2\xbd\x62\x6e\x6b\x03\xcf\x60\xcb\xe7\x80\xe9\x6c\xa1\x80\xd5\xe3\x55\x7a\xab\x0b\x04\x7e\x36\x57\x1d\x47\x2f\x0d\x59\x67\x39\xde\x4f\x28\xa0\x2e\x88\xcd\xe7\x15\xbd\xf3\xc3\x42\xf0\x1f\x4b\xab\x1c\x2d\xe6\xff\xcb\x31\xf2\xc8\x14\x5a\x6d\xc5\x0a\xda\x11\x70\x41\xab\xae\x38\xc1\x0e\xd2\x9f\xa2\x96\x57\xac\xe0\x13\x32\x02\x6a\x7d\xc5\x0a\xaa\x11\x5a\x43\xab\xb0\x38\xc1\x08\x72\xd4\x81\x5a\x62\xb1\x82\x0e\x04\xef\x50\x6b\x2c\x56\x30\xf9\xdf\xfb\x3f\x68\x55\x16\x2b\xf8\x8d\x44\x09\xb5\xcc\x62\x05\x29\xc8\xef\xd1\x68\x85\xf6\xef\x3a\x90\x23\x1d\x2d\x5a\xbd\x85\xe5\x6b\x2e\x5d\xfa\xd3\xd1\xb6\xff\x0f\xbe\x7c\x5f\x5f\x1b\x10\x5d\xe3\xbe\xc2\x0a\x0f\xf9\xd3\x3c\xf7\x20\xc3\x6c\xc6\x4a\xce\xc8\x28\x55\x55\x32\x5a\x32\xee\x7e\x58\xfa\x33\x0b\xf0\x96\xa9\xe7\xd0\x89\x65\xf5\xf0\x3f\xae\x94\x61\xe7\x2d\xbc\x79\xd3\xea\xdd\xdd\x83\xf4\xd8\x35\x53\x6d\x56\xe3\x8d\x8b\xa6\x7e\xa7\xe5\x31\x30\xf4\x11\xbc\x25\x3b\x13\x42\x47\x4a\x8f\xbd\xaa\x62\xf5\x37\xe5\x3c\xf3\x54\xe9\x01\xe5\x8f\xd3\x6d\xda\x81\xa3\x61\x4f\x9e\xe0\x73\xca\xd9\x78\xbe\xf8\xc3\xa8\xff\xf3\x02\x79\x82\x24\xcd\xd3\x90\xe6\x98\xc1\x77\x92\x83\x31\x72\xd1\xc5\x0f\x16\xb5\xcb\xec\x86\xde\x52\x9f\xb0\x77\x3d\x36\x96\x41\xbe\x29\xf8\x6f\x6e\xff\xcd\x6b\x24\x27\xd0\xfc\xfe\xbb\x62\x48\x73\x87\xe6\x38\x4e\xf0\x11\xc9\x09\x34\xcf\x71\x82\x58\xa4\x93\x42\x03\x1e\x9c\xe0\x3b\x92\x44\xa8\xc4\x83\x15\x78\x22\xcd\x1d\x2a\xf3\x60\x05\xa1\x48\x94\xd0\xa8\x07\x27\x68\x44\xba\x0a\x34\xec\xc1\x09\x02\x91\x9b\x19\x95\x7b\xb0\x82\x37\x48\x94\x50\xc1\x07\xb7\xe5\x21\x23\xa0\xa1\x0f\x4e\xb0\x8c\x3c\x46\x87\x0a\x3f\xff\x2f\x90\xd3\xf9\x3b\x00\x2a\xfd\xe0\x82\x84\x78\x84\xca\x3f\xb8\x64\x45\x72\x0f\x15\x80\xb0\x82\x78\x64\xdd\xd0\x10\x08\x27\xe8\x45\x0e\xd8\xd0\x20\x08\x37\x67\x53\xe4\xf4\x18\x0d\x82\xb0\x03\x74\x21\xa9\x87\x4a\x41\x58\x41\x31\x22\x40\xe3\x20\x9c\xa0\x1c\x29\x6d\x68\x20\x84\x13\x24\x23\x41\x42\x23\x21\x9c\x60\x10\xf9\xe0\x1c\x2a\x0b\x61\x83\xc4\x83\xd4\x1d\x34\x18\xc2\x0e\x50\x83\xdc\x3d\xa8\x38\x84\x15\xcc\x21\x41\x42\xe5\x21\xac\x20\x00\xc9\x24\x54\x22\xc2\x0a\x72\x90\x5d\x0c\x15\x89\xb0\x02\x3f\x64\x04\x34\x28\xc2\x09\x22\x90\x39\xa0\x51\x11\x4e\x10\x43\x89\x3c\x23\x8a\x06\x47\xb0\x02\x99\x02\x1e\xc7\x9f\xd2\x36\x07\x96\xb6\x4e\x6f\x86\xd6\x07\x9f\xc5\x1d\x13\xf2\xfa\xeb\x7b\x52\x9e\xaf\xea\x85\xad\x4a\xd3\x7e\x37\x9c\xbf\x9a\x79\x5e\xf2\xba\xbc\xd3\xde\x9f\xb5\x06\x3b\xf3\x35\xa5\x69\xab\x82\x6f\xee\x5c\xb1\x98\xf4\x84\x63\xac\x94\xa3\xeb\xe2\xc2\xf7\x47\xa5\xd5\x43\xed\x3e\x45\x71\x2b\xf3\xce\x4c\xfe\x09\x2c\x58\xda\x6e\x59\x6b\xb2\x64\x73\x99\x95\xb9\x88\x76\xee\x53\x5c\x81\x49\xc8\xfb\xa5\x6d\x2e\x0f\x9d\xd9\x0c\x58\xbd\xbc\xc4\xc9\x96\xaf\x8b\x81\xa1\x1e\x90\xf4\x5f\x5f\xd3\x91\x77\x99\x6c\x1d\x7b\xfd\x3b\x6f\xb8\x3f\x20\x9b\x8e\x42\x27\xa0\x78\x42\xd4\x24\x80\x2a\x23\x07\x0e\xec\x18\x3a\x21\xf8\x6f\x6e\xff\x4d\x0a\x24\xaf\xd1\xfc\xfe\x9b\xd7\x08\xee\xa0\x39\xfe\x37\x8b\x90\xa4\x40\xf3\x1c\x27\xe8\x21\x58\xf7\xc0\x7d\xd3\x1d\xed\x9f\x25\x60\x05\x77\xb7\x6f\xcf\xa2\x98\x30\x30\xb4\x0e\xae\x01\x5d\x90\xaa\xcd\xc6\x93\x2a\x3b\xe1\x9b\xb3\xc7\xfb\x6e\x4f\x61\x1c\xfb\x6c\x27\x6b\xfb\x12\x36\x63\xfb\x33\xa6\x1c\x3e\xae\xbe\xc1\xc0\xd0\x2f\x10\xc9\xa3\x9c\xf7\x19\xcf\xec\x18\xd2\x1d\x3c\x68\xbe\x7c\x4f\x2e\x99\x4c\x70\x59\x60\x73\xea\xf2\xd2\x0e\x29\x86\x42\xde\xbd\x31\x99\xf9\x4f\x85\x06\xd7\xc0\x3a\x30\xa2\x41\xfb\xd4\x47\x5e\xba\x49\x2f\xb1\x48\xb9\xc8\x90\xb3\x7b\x19\x9f\xd8\xae\x9d\x3e\xfa\x45\x9d\x00\xe3\x67\xbb\xe3\x81\x81\x21\x5f\x10\xe1\x03\x6f\xc5\x24\x0f\x9f\xa3\x4e\x38\x3f\x75\x4e\x3d\x9f\x59\xe1\xc2\x82\xb9\x07\x89\xfb\x31\x3f\x9b\x15\x3b\x11\x72\x4f\x4e\x51\x7c\x4f\x18\x8a\x05\xf1\x48\x30\xd5\xeb\xeb\x4d\x8e\xf0\xe0\x2a\x86\xe9\x79\xd7\x28\xb7\x26\x03\x27\xfb\x81\x63\x0b\x6f\x1c\x08\xe9\x5d\x6b\xcf\xe4\xca\xe2\xc3\x50\x25\xe8\xbe\x24\xb7\xfe\x47\xbb\xea\x53\x6b\x4f\xf0\x3a\xc8\xa4\xe0\xcc\x52\x5d\x47\x8f\x29\xda\x53\x2a\x1b\x0b\xb6\x45\x52\x5f\xdb\xae\x44\xc3\x50\x03\x98\xd1\xac\x0b\x01\xb5\x25\xa5\x63\x72\x42\x12\xca\x69\xf9\x10\x01\x97\x19\x63\x94\x95\xb8\xb0\xbb\x58\x5c\x2f\xef\x95\x51\x21\x95\xd3\x7f\x6a\x02\x78\xb8\x33\xde\xec\xfa\xe9\x5e\x54\x47\x26\xf9\x0d\x55\x03\xf5\xd0\x75\x6f\x23\xcf\xf0\xa8\xbe\x78\x76\xca\xa2\x45\x86\xcd\x0a\x46\xe2\x5f\x30\x0c\xf5\x82\xd1\xff\x1a\x4e\x76\xa2\x4f\xd9\x65\x91\x48\xed\x9d\xef\xfb\xbb\xe1\x41\xbe\x16\x66\xdd\x97\xf3\xdb\x3f\x79\x3b\x98\xad\xde\xf1\x3c\x45\x03\x43\xcb\xa0\xf7\x9f\x25\x2e\x54\xb6\x5d\xa0\x6e\x76\xc4\x34\x95\xd7\x96\x3a\xb5\x46\x3e\x36\xe9\x79\xc4\xc2\x5f\x3d\x27\x60\xea\x70\x35\x3b\xff\x4f\x67\x3c\x02\x36\x8b\x9d\xe2\x21\xef\xc4\xf9\xa5\x4a\x7f\xba\x48\xa6\x65\x45\x74\xc6\xdf\x91\x16\x79\xeb\x70\x63\x5e\xbb\x4d\x99\x6a\x84\x2f\xe2\x89\x22\x0c\x2d\x82\xde\x48\x34\x6d\xb4\xfd\x38\xee\x2a\x39\xcd\xce\xb0\x23\x5f\xaf\x6d\x69\xe2\x3b\xc0\x28\x60\x39\x72\x61\x9d\xdc\xb6\xcc\xaa\x83\x37\x0d\x86\xe5\xc0\xab\xeb\xbf\xfc\x7c\x30\xd4\xf6\x99\x94\xd9\xd5\x67\x8b\xfa\xd6\xb3\xfa\x23\x14\x2f\x73\x75\x3c\x0d\xfc\xdf\x64\x2c\xd4\xf9\x4c\xeb\x94\xc0\xd0\x27\xf0\xea\x6e\xfa\x1b\x02\x65\xfe\xaa\xe2\xad\xbe\x63\x1a\x69\x75\x9b\xcc\x7b\x05\x44\x5a\x6a\xe1\x0d\x3d\x44\x41\x47\x15\x4c\x1d\x3e\x71\xfe\xe9\x28\x40\x30\x2d\xf7\xda\xd1\xef\x88\x3a\x72\xe7\xfa\xd6\x7e\xee\x73\xc3\xa7\x7e\x8e\xbe\xde\x77\xae\x05\xd7\xb7\xdf\x8a\xa8\x76\x32\x80\x8b\xd5\x60\x18\x7a\x07\x9e\x91\xc8\x3f\xfd\x14\x67\x7d\x48\xf9\x9a\x8b\x39\x2c\xd0\xfb\x21\x2f\x28\xf9\x56\x09\x19\x4d\x4b\xeb\xd4\x25\x88\xe2\x53\xf8\xaf\xec\x9f\x30\x54\x01\xc6\x32\x94\x2c\x78\xf2\xce\x73\xd1\x3d\x8d\xab\xce\x27\xca\x12\x4c\xcf\xb9\xac\x32\x9c\xe6\xff\xc0\xc3\x4e\xc8\xf0\xad\xf2\x4d\x91\x38\xf8\x5f\x30\x87\x6a\x1b\xe5\xa0\xb4\x82\x68\x85\x93\xf5\xb1\x3e\x9b\xdb\x17\x2b\xb7\xef\x88\x0d\xb8\x5d\x60\xc9\x8c\x7d\xd5\xcb\x9a\x56\xbe\x0d\xc3\x50\x34\x98\xc3\x9a\x42\xc4\x3a\x51\xf5\xf2\x97\xcc\xa4\xde\xb0\xd4\xf7\x5a\xba\xc6\x5f\xb2\x94\x11\x91\xe1\x63\x6c\x57\xa8\xcd\x8b\x92\x48\xfe\x06\x43\x05\xe0\x39\xdc\xfe\xc0\xdc\x33\xc6\x96\xfa\xd9\xd1\xc0\x97\x5a\xac\x12\xbd\x49\x36\x0c\x93\xd6\xc6\x78\x2f\xc7\xdf\xdc\x58\xef\xd5\xa3\x0a\x3c\x02\xc3\x50\x0a\x38\x51\x49\xd7\xd5\xe6\x93\xf8\xb4\xec\xd2\x82\x49\x2c\x17\x06\x2f\x10\xb4\xee\xec\x99\xe2\x6f\x64\xb9\x08\x8c\x10\x64\xd5\xfc\x3a\x68\x83\xa1\x2f\xe0\xe5\x33\x98\x54\x48\xde\x9a\xcf\x73\xe9\x1a\x8a\xb2\x1c\xb2\xed\xea\x5e\xff\x7d\x87\xc5\x72\x93\xc9\x3c\x2c\x2d\x3c\x6d\xe3\x43\xfa\x5b\x18\x86\x92\xc1\x3b\x8a\x59\x85\x9c\x58\x58\xaa\xd2\xe1\xca\x45\x7a\x4f\x65\x19\xe9\x5f\xab\xdc\xf4\x51\x44\x2a\x99\x26\xce\x4f\xe9\x5f\x24\x8e\xbd\xe9\x81\xa1\x65\xd0\x9b\xb3\x01\xfc\x69\xae\x91\x59\x12\xe5\xbb\x92\x93\xc4\x8c\xc3\x95\x89\x35\x9a\x25\xa9\x34\x1f\x78\x4f\x3f\xa6\xf2\xfd\xda\xa3\x92\x0c\x1e\xec\x48\xbf\x8d\x34\xd7\xc9\x8e\x3a\x54\x25\xf2\xe2\xb5\x6f\x93\xc6\x41\x11\x77\x6a\x1f\x37\x4f\xc6\x0f\xe3\xc3\x6b\xbe\xed\x6b\xac\x30\x0c\x85\x80\x7b\xc7\xbc\x7f\x07\x8b\x20\x83\xb0\x4c\x6a\x51\x77\xf2\x18\xa1\x75\x6d\xe9\x62\x7b\xaf\xe3\x67\x77\xc3\xd7\x12\x05\x6d\x50\x8e\x7c\x28\x0c\xb5\x83\xf9\xb8\xc6\xcb\xb2\x55\x95\x78\xf7\xd4\x3b\x03\x53\x6d\x4a\xf5\x17\x9c\xb7\x56\xe8\x0a\x89\x75\x2c\x12\x62\x76\x2c\x3c\x76\x4f\x8f\x1b\xc3\x30\x54\x0f\x06\xa6\xf1\x7d\x1a\xcc\x1e\x6a\xcd\x7b\xb5\x58\x8c\x3d\xb8\xae\x1c\xb2\xdf\x6b\xd1\xb4\x12\xb9\x67\xff\x63\x4e\xfe\xbb\x62\xb7\xd7\x3d\x18\x9a\x06\xf3\xf1\x42\xca\xdb\x81\x42\xc1\x77\xf9\xe2\x6b\xe3\x09\x46\x7a\x79\xfd\x8e\xdd\x86\x81\x27\x63\xce\x4b\x3b\x56\x57\x55\x3d\x38\xec\xd5\x09\xc3\x72\x60\xd2\xb0\x67\xeb\xf5\xe9\xea\x7b\x86\xdc\xd5\x49\x61\x10\x69\xf4\xe7\x0c\xb2\x11\xf2\x10\x7d\xd9\xd4\x14\xe8\xb9\x3d\x57\xb8\xd6\x77\x1b\x86\x3e\x80\xce\x7f\xe6\xe2\x0d\x0e\x70\xe4\xca\x31\x4d\x0b\xcf\x88\xe2\x08\x8f\xd7\xa9\x17\x9c\x8e\xe4\x7f\xa6\x3f\x7b\x5c\xc3\xc9\xa1\xe1\xa9\x25\x06\x86\x5a\xc1\xf4\x5d\x9c\x28\xfb\x6e\x62\xcf\xda\xb5\x74\xc7\x20\x7b\xf0\x63\x4a\x62\x6b\xc1\xe0\xa3\x43\x65\x1b\x92\xed\xf3\x1a\x13\x57\xdc\x1c\xdc\x31\x30\xd4\x06\x7a\xff\x40\x22\x69\x28\x59\x86\x30\xae\x62\x22\x36\xf3\xad\x1a\xc1\xda\xcf\x92\x69\xe9\x1c\xe7\xf8\x6b\xd1\x4f\xf6\x62\x14\x17\x22\xca\x40\xcf\x4b\x48\xbe\xc9\xba\x19\x9f\xf9\x99\xd7\x75\xd4\x7e\x7b\x88\xf0\xd5\xc6\x8f\xa9\x89\xb9\x2b\x06\x02\x01\x87\x5e\x3f\x7a\x12\xc8\x8b\x81\xa1\x17\x60\x59\xde\x2a\x9e\xfd\x76\x83\x45\x8b\xe2\xad\x8b\xbd\xd1\xf8\x43\x4d\xd3\x98\xa2\xe7\xef\x06\x4d\x59\x1e\x94\xd8\x45\xae\x71\xdd\x1a\xff\x08\xc3\x50\x16\x18\xf7\xf5\x47\xa5\x52\x01\xf5\xb6\x7b\x82\x36\xc4\xcf\x45\x1b\xe5\xd5\x34\xda\xfc\xee\xb8\x5e\x6e\xd6\xd7\xbf\xfa\x23\xca\x82\x3c\xe3\x18\x0c\x7d\x07\x2f\x7f\xdc\x4c\x5c\xcb\xad\x43\xff\xdb\xcd\xb7\xdf\x9d\x02\x9f\xb6\xe6\xdb\x72\x54\x86\x9e\x3d\x70\xbd\x5b\xa1\x60\x27\xaa\x7d\x62\xea\x8a\xe0\xbf\x15\x32\x58\x8e\xe3\xff\x7f\x4c\x44\x8a\x32\x5a\x25\xc3\x09\x7e\xfd\xf7\xae\x0d\x4a\x29\xc3\x09\x3e\x22\xc0\x8c\x56\xcb\x70\x02\xdf\xff\xbe\x36\x83\x56\xcc\xb0\x82\x58\x84\x05\x51\xcb\x19\x56\x50\x89\xcc\x01\xad\xa0\xe1\x04\x0d\x08\xeb\xa0\x56\x34\xac\x20\x1e\x39\x47\x41\x2d\x69\x58\x41\x2f\xb2\x0e\xa8\x45\x0d\x2b\x58\x46\xe6\x80\x5a\xd5\xb0\x82\x11\x84\xfa\x51\xeb\x1a\x56\xb0\x88\x7c\x09\x0e\xb5\xb2\xfd\xbf\x40\xee\xbf\x4f\xa8\xa3\x94\x36\xdc\x00\x9f\x90\x39\xa3\xd6\x36\xdc\x14\x90\xa6\x1c\xb5\xb8\x61\x05\xef\x90\x16\x18\xad\xbc\xe1\x04\x15\x24\xeb\x3f\xf0\xff\xb1\xca\xc9\x93\xe0\xe1\xc1\x30\x2c\x27\x01\x1e\x76\xfb\x19\xc5\xee\x30\x34\x0c\xa7\xf0\x48\x7d\x96\x76\x3c\x96\xaa\xce\x71\xae\xe1\x7d\xb7\xe4\x39\x88\x24\xaf\x42\xd5\x71\xb6\x0f\x86\x92\xc0\x7b\xf9\xbe\x5d\xc6\x43\xad\xd7\xe9\x27\x32\x7c\x2a\x37\x6c\x84\x2f\xe6\x9e\x28\x7c\x6e\xce\x79\xa6\xe2\x64\xb3\xc9\x74\xa0\xdb\x72\xab\x32\x0c\x43\xc5\xe0\x56\xb1\x3c\xb7\xbd\x7c\xae\x39\xe0\x90\x56\x82\x28\xa7\xa0\x0a\xdb\x60\xfa\x0b\xf9\x27\xd7\x69\x1d\x14\x33\x6c\x1b\x8e\xc9\xbb\xdd\xb8\x09\x43\x23\x60\xe9\x2a\x6e\x29\xe1\x3d\x3f\xcc\x60\x6d\xc8\xee\x57\x26\x40\xf5\xf9\xe5\x19\xb6\xb6\x1f\x64\xaa\xe1\x07\x77\x5a\xf6\x09\xfa\xf2\x08\xdf\x9f\xfb\x47\xa7\xb1\xcb\x2b\xf1\x37\x96\xa8\x5e\x63\x63\x99\x84\xe0\x3b\xaa\xdb\x58\x41\x31\x72\xd0\x84\xe6\xf8\xdf\x7c\x40\x6e\x7c\x54\xc4\xc0\x0a\xa2\x91\xad\x05\x15\x32\xb0\x82\x02\xc4\x25\x54\xca\xc0\x0a\x52\xfe\x7b\x28\x00\x8d\x33\xb0\x82\x2f\xc8\x08\xa8\xa0\x81\x15\x24\x23\x93\x46\x43\x8d\xbf\x3b\x05\x31\x72\x44\x8b\x4a\x1c\x0a\xf8\x64\x24\x78\xff\x7f\x46\x0b\xa6\xe9\x0a\xa4\x95\x4c\xf1\x49\x9a\x8a\x52\x9c\x47\xea\x88\xd8\x64\xdb\x40\x3c\x86\x7a\x79\xec\x57\x42\x94\xc2\x43\x66\x62\x06\xa6\x36\x0c\x0c\xc5\x81\xc5\xb8\xf2\xf0\x61\xb9\x62\x33\xcb\x68\xdb\x1a\xd5\xaf\xbc\x47\x6e\x6f\x50\x9c\xf2\xf9\x12\x7e\xfb\x2c\x4d\x55\xb6\x3a\x7c\x93\x75\xdc\x1b\x03\x43\x6f\xc0\x62\x7f\x71\x35\x93\xaf\x94\xed\x4e\x4a\x69\x1a\x93\xd2\x28\x93\x8a\x97\xe8\x7c\xac\xab\xc1\xcf\x8b\xda\xdb\x31\x19\x2c\xbb\xcd\x67\x88\x31\xb0\xdc\x13\xc0\x1c\xff\xb6\xbe\xba\xd6\x43\x07\x41\x83\x5b\xbe\x1e\x57\x85\x16\xb7\x38\x33\x46\xa8\x2e\xab\xf0\x6b\x77\x27\xae\xc0\xe3\x99\x04\x5a\x82\xff\xe6\x35\x2e\x3c\xed\x48\x9a\xa2\xb9\x8d\x13\xc4\x21\x3b\x2f\x9a\xdf\x38\xc1\x1b\xe4\x40\x07\xcd\x73\xdc\x9d\xf6\xe4\xef\x00\xa8\xc4\x87\x1d\x20\x04\x29\xb1\xa8\xcc\x87\x9b\x33\xb2\x55\xa3\x42\x1f\x56\x50\x8f\x64\x29\x2a\xf6\x61\x05\xd3\xf8\x7f\xe7\x8c\x0a\x7e\xd8\x39\x1b\x21\xf5\x0f\x85\xfc\x70\x03\x7c\x40\xa6\x80\x86\x7e\x38\x41\x2b\xb2\x6c\x68\xec\x87\x13\xb4\xe1\x23\xb5\x00\x0d\x01\x61\x88\x23\xd8\x13\x03\x43\x99\xff\x03\x6a\x52\x2e\xc1\x57\x05\x4d\xca\x29\x02\x16\xdd\x7c\x2f\xb1\x90\xb8\xb8\xd1\x9e\xbe\xb3\x95\xf0\x8d\x2b\xfd\x95\x7c\x59\xae\x16\x84\x81\xe5\x8e\x02\xe6\xf7\xbe\xac\xb2\xd6\x73\x4f\x06\x0d\xf9\x1d\x7f\x1d\x4d\x1c\xa4\xec\xc7\x29\xc2\xe7\xe1\xe8\xfa\x4d\xfe\xbb\xf1\x0b\x8e\x97\x65\x2f\x61\x18\x0a\x02\x6f\x32\x4a\xfd\x00\x26\x5f\x79\x1e\xa3\xad\xb7\xcc\x5c\x01\x8e\x1d\x7e\xd4\xf9\x7e\xd3\x24\xeb\x77\x2b\x49\x64\xc9\x2e\x59\xd7\xfc\xca\x81\xa1\x57\x60\xbb\xb9\xa0\xbd\x23\x9d\xf0\xbc\xc2\x80\xc3\xf0\xa7\xec\xd1\xf7\x62\x2f\x5f\x44\x6f\xb0\x69\x32\xd8\xed\xed\x3f\x0c\xfa\xec\x1a\xf7\x4d\x5b\xf0\xdf\x9c\xc6\xc5\xe6\xff\x18\x3b\xef\x78\x2a\xdf\x37\x8e\x5b\x29\xa2\x48\x46\x64\x14\xc9\xc8\x4c\xca\x0a\x0f\x42\x65\xa5\x8c\x54\x46\x56\x36\x95\x59\x38\xb7\x19\xca\xcc\x5e\x59\xd9\x92\x3d\xb3\x8a\x92\xbd\x45\x65\x93\x4d\x29\x23\x7e\xaf\x7e\xe7\x9c\xe7\xfb\xf4\xd7\xd3\xff\xf7\xe7\xdc\xd7\x7d\xdf\xd7\x78\xdf\xd7\x79\xce\x79\xb2\xe1\xe6\x35\xaa\xd9\xd8\xe3\xa5\xc5\x6f\x3e\xaa\xd9\xd8\x09\x82\xe1\xd3\x42\x33\x1c\x27\x78\x0e\xc3\x04\x2a\x7f\x63\x05\x3e\x70\xdc\xa3\x02\x38\x56\x90\x03\xc7\x00\x1a\x82\xe3\x04\x93\x24\x1b\x2f\x70\x3f\x51\x43\x7b\x7b\x29\x90\x2f\xdb\xde\x4b\x8a\x66\xf2\x02\x50\x09\xf2\xea\x5c\x34\x74\x32\x51\xb9\x9e\x3d\x63\x7d\xd4\x66\x2e\xcd\xec\x51\xeb\x2e\xc3\x85\x8f\xbf\xe8\x34\xc3\x42\x64\xdb\xde\xae\x30\xbd\x90\x03\xd0\x10\xf2\xf2\x29\x64\x3e\x1c\xc8\x56\x5a\xe1\xb7\x5f\x52\xcb\x3e\xe4\x2a\xf1\xad\xcb\x97\x9f\xb1\x8c\x3e\xd6\xa0\xeb\x3e\x52\x29\x66\xe8\x9a\x5c\x01\xa0\x2f\x48\x0f\xed\x63\x4c\x0b\xa1\x0e\x39\xe0\x78\xca\xe6\x0d\xff\xa3\xa0\xa0\x04\xeb\x0f\x87\x78\xa5\xdc\x8e\xac\xc6\x5c\xec\xfb\x2e\xbb\xa2\xb7\x81\x01\x50\x3b\xf2\xd2\xc4\x45\x98\x70\x59\x4d\x64\x52\x45\xf6\x60\xca\x19\x27\x51\xb9\x8f\xdd\xf2\x46\xa9\x16\x35\x17\x6d\xf9\xa8\xb2\xb8\xac\xe6\x3e\xdb\x62\x00\xf4\x13\xc9\x1f\x0b\x1d\x5a\x7b\xca\x59\x02\xa7\xf6\x4f\xfd\x30\xd5\xbb\xde\xff\xab\x36\x8b\x95\xcf\x4d\xf3\x1d\xeb\xfa\xc9\x77\x81\x32\x0f\xec\x67\x30\x00\xfa\x81\x74\x69\x33\xc5\xf5\x9b\x5f\xa3\x68\xeb\x84\x84\xae\xd7\xab\x5a\xd9\xeb\xbe\x78\x2c\xd4\x4d\xef\xcb\xc1\xf7\x2d\x77\x2f\xb8\xb6\xe7\xfc\xf1\x3f\x61\x8f\xb4\x9f\x47\x9d\x4e\x68\x62\xb2\xdb\x37\xcb\xda\xf2\xd3\xf7\x8c\x4b\x34\x61\xfa\x39\x47\xf4\x95\x2f\x84\x52\x70\x18\x19\xf8\xc5\x9e\x52\x01\x00\x6a\x46\xda\x93\x7b\x56\x6e\x25\x43\x5f\xfd\x46\x8e\xbc\x8b\x6d\x6b\x8b\xf1\x3b\xcf\x8a\x1f\x1f\x88\x9e\xa4\xde\xd9\x89\x33\x27\xb4\x95\x1d\x54\x03\xd0\xf6\x5f\x0f\xf8\x24\xb0\x8e\xfa\x24\xca\xda\x16\xea\x59\x95\xd4\xca\xab\x70\x37\x71\x11\xd5\x56\x8d\x86\xe9\xa4\xef\x77\x33\x0a\x8a\x7e\xe7\x0f\x00\x94\x8c\x1c\x2f\x3a\xad\xe6\xc9\xf7\xa8\xd2\x9b\x84\xf6\xe7\xe2\x83\xaf\xb4\x14\xa9\x5e\x73\xe7\x3a\x1c\xed\x3f\x3e\x68\x8f\xe3\xe6\xe7\x55\xce\x07\x50\x26\xb2\x39\x76\xef\xe1\x7c\x6e\x33\x43\x65\x4b\x37\xe0\xa2\xb5\x5c\x2c\xbe\x62\x9d\x15\x3c\x7d\x77\xec\xa8\x91\xf3\xb3\x99\xca\xda\x01\xd7\x6a\x64\xe7\x36\xfe\x5a\xc9\x89\x53\xa6\xd6\x44\x26\x97\x30\xd7\x48\x87\xa9\x95\xfa\xde\xfd\x94\x11\x38\xc4\x25\x75\x75\x3c\x72\x2d\x88\xc0\x10\x03\xa0\x7c\x64\x41\xb5\x0a\x88\x9e\x4c\xae\x7d\x4e\x60\x47\x65\x57\xd1\x77\x8f\x73\x6f\x25\xa8\xed\x02\xa5\xf9\x27\xd9\xac\xf7\xad\x2f\xfc\x2e\x1a\x69\x60\x80\x2c\xf2\xfd\x9f\xc5\x89\x0f\x9d\x86\x4d\x5c\x1e\xfc\xfe\x36\x54\x2f\x44\x48\x6f\xc3\xfd\x98\x6b\x92\x48\xf2\x9c\x9d\x05\xcf\x70\x97\x02\x79\x7d\x9e\x17\x90\x55\x44\xf6\x73\xd4\xc9\xf7\x5f\x72\x70\x6c\x62\xdb\xbc\xe0\x6a\x41\x78\xc4\xca\xa7\x88\x32\xc0\x4f\xab\x25\x2a\x9b\x7d\xd9\x69\x25\x65\x5a\x1c\x40\x25\x7f\xbd\xc6\xa0\xbc\xc6\x3b\xda\x5f\xdd\x70\x61\xbd\x7b\xcc\xef\x97\x63\x5a\xa6\x68\xf7\x53\x50\x5e\xd2\xc0\x72\x93\x75\xfc\xe9\x97\x29\x52\x00\xed\x21\x6d\x4f\xf5\x65\xa1\x30\xe5\x94\xf0\x16\xc0\xa4\x0e\x66\x0c\x64\x1a\xdf\x96\x79\x76\x4c\x5d\x65\xc1\x63\xb4\xd0\xb7\xf9\x9e\x26\x0f\xd2\x1f\x5f\xbe\x6a\xb3\x0c\x5c\xdd\xf8\x51\xe5\xaf\xb0\xef\xfe\xa9\x56\x41\xdb\xec\xa7\x62\x26\xd6\xea\x37\x88\x6e\x6b\x31\x96\x7e\x60\x3b\xef\x05\xa0\x44\x64\x0e\x64\x21\x09\xa2\xda\x76\x0e\x78\x14\x9c\xfa\x68\x29\x55\x7d\xef\x2a\xc3\x99\xc6\x9b\xf7\xd3\xe6\x38\xdb\x31\x5b\x61\x1b\x0f\x27\x18\x01\x54\x80\x3c\xcf\x5b\xa3\x2d\xab\x3c\xe6\x99\xb1\x7a\xfb\x9d\xec\x2f\x3f\x09\x3b\xd8\x77\xdb\x4f\xa8\xb4\xa2\x44\x35\xe6\x82\xc0\xdb\x8c\x97\x67\x42\x00\xb4\x82\x6c\xcf\x78\x3d\x5c\x25\x61\x0d\x32\xb4\xa8\xd3\xf2\x9d\xbc\xb8\xf2\x44\x38\x96\xde\xcb\x34\xaa\xa7\xf3\xf0\xea\x25\x47\xdf\x8e\x9c\xcb\xa7\x31\x00\x5a\x42\x7a\xe3\x52\x5d\x93\x07\xcd\x83\xaa\x80\x58\x0c\x38\x75\x80\x31\xfa\x11\xcb\xa3\x3a\x92\xeb\xdd\x2f\x8d\x87\xaf\x9c\x56\x38\x79\xd6\x6b\x0d\x00\x28\x00\xb9\x31\xf3\x54\x2f\xcb\x96\xcb\x34\xbe\x72\xb5\x37\x71\xfd\xb2\xf6\xa7\x27\x93\x4a\x38\x76\xdf\xec\xda\xdd\x9f\x67\x7f\xe9\x0b\x3c\xfd\xf5\x16\x40\x53\xc8\x5c\x70\xee\x84\xc8\xac\x0d\x57\xdb\x99\x90\xb6\x0e\xbe\xa2\x70\xa1\x8a\xb8\x84\x9b\x0d\xfe\x3b\x50\x09\x51\xd3\xc9\xb1\x93\xf7\x7c\xda\x31\x00\x7a\x8d\x34\x5f\x30\x94\xe9\xda\x6c\x20\xdd\x05\x85\x47\xf4\xed\xf6\xf7\xf6\xb3\x99\xfc\xee\xc9\x30\xa3\xdd\xf9\xba\xab\x2d\x3b\x07\x49\xfb\x5e\xc1\x00\x08\x20\x53\x13\x21\x47\xea\xcc\x58\xf9\xf3\x52\xcd\xdc\x72\xe9\xf3\x6a\x57\xec\xcc\x3e\x35\xaa\x2e\xf4\x57\x49\x58\x8f\x46\x6a\xb3\x15\x78\x07\x60\x00\xb4\xf6\xd7\x7b\x35\x18\x14\x92\x76\xfd\xc2\x62\x8c\xcf\x48\x72\xb7\x38\x91\x13\x5e\xb9\x71\x31\x28\x40\xab\x24\x79\xb3\xf3\xa8\x0a\x3d\xb4\xe1\x8e\x01\x50\xc9\x5f\xb9\xec\xa5\x8f\x79\x35\xdb\xb5\x08\x82\x24\xaa\xa5\x33\x42\xaa\x69\xab\x4c\x6e\x4b\xda\xdd\x3f\xba\x2e\x5e\xb9\x76\x59\xe1\xf2\xcb\x0b\x00\x40\xbe\xc8\xd3\xda\x48\x53\x8e\x74\x7c\xb7\x7c\x51\xce\xc5\xf5\xfd\xfb\xd3\x26\x1e\x53\x56\xf5\x5e\x4d\xdd\x89\xe3\xf5\x26\xf7\x0c\xa3\x7e\xb2\xf9\x02\xe8\x0b\xf2\xe3\xd7\xc5\xbf\x5e\xad\x37\x17\xcd\x67\x10\x21\x5c\xfb\xcc\x50\xe6\xf4\xb4\xbc\x83\x85\xd7\x54\xd3\x8d\x81\x97\x88\xaa\x2f\x79\x76\xd4\x0b\x40\x5e\x48\xf3\xe7\x24\x99\x68\x49\xf6\x67\x24\xca\x31\xcd\x1a\x4f\x46\x4c\x3c\x9e\xd7\x9b\x13\xbc\xbb\xda\x1a\x17\x10\xc1\x20\x67\x45\xd4\x30\x06\xa0\x4c\x64\xa7\x5c\x4c\xba\x62\x5a\x8a\x3b\x32\x86\xdd\x50\x88\x46\x9f\x8f\x71\xc5\xaa\xdb\xff\x92\xcd\xcb\x5a\xd9\x6e\x49\x5e\xb3\x94\x1d\xf5\x52\x00\x0d\x20\x63\x84\xac\xc2\xf7\xc6\x70\xbf\xc8\x3e\xab\x59\x87\xfd\xbd\x21\x6b\x61\x76\x34\xdb\xee\x2d\xbc\x17\xcb\xb4\x97\x1a\xcb\x06\x24\x9b\xef\x03\x00\x95\x21\xad\xf7\xb9\xc5\xcf\xe6\x6c\xd9\x20\x71\x63\x8b\xa0\x83\x4a\x8f\x7d\xc6\xeb\x3e\x61\xb6\x1b\xc7\x5e\x6d\xce\xc3\xc8\xaf\x17\xa9\x34\x82\x01\xb4\x8c\xb4\x86\x2b\x20\x35\xcd\xb0\xab\xb2\xae\x29\x62\x5f\x98\xc0\xb8\x19\x47\x1d\x19\xd0\x7c\xcc\xc3\xa7\xe5\x3b\xc2\x7b\x2b\xee\x64\xa4\x2a\x00\x50\x24\xf2\x6c\x85\x07\x9f\x7c\x72\x48\x9b\x9d\xf2\x24\x4b\x2d\xda\x27\xb6\xaa\x33\xc4\xaf\x26\xa3\x77\xdc\xdd\x53\xb1\x99\x51\x9b\x72\xd0\xf6\x3d\x80\x52\x91\x71\x48\x1e\x7d\xde\xdd\x92\x8f\xcf\x93\x7a\xa8\xd8\xdc\xc7\x99\x90\x61\xe4\x13\xd5\xc2\xb0\xe0\x3a\x55\x06\x49\x6b\x8d\x93\x17\xd3\x8e\x17\x90\x45\xbe\xcc\xdc\xcb\x91\xc9\x38\x38\xd0\xed\x1c\xf3\x33\xfa\x61\xa6\x47\xa4\xd5\x5e\xb3\x8e\x8e\x77\xe6\x1f\x79\xab\x50\x6e\xa7\xf5\xd3\x5d\x7a\x07\xa0\x46\xe4\xc1\x4e\x7c\xa4\x9e\x92\xd8\x95\x35\xa8\xad\x62\xba\x29\x7a\x7f\xff\xfd\x9c\x73\xa4\x9f\x7d\xc7\x55\x0f\xb7\xaf\xef\xbf\x2e\xce\x4b\xe7\x0b\xa0\x61\xe4\xf0\xc3\xcb\x8f\x25\x2e\x4d\xfb\xa4\xb1\x67\x2e\x6e\xd4\x3c\xdd\x4f\xac\x30\x3e\x73\x5b\x69\xe8\x08\x5b\xbb\xdf\x95\x8b\x8f\x8f\x24\x17\x60\x00\x14\xf7\xd7\xb7\x68\x6c\x29\xfb\x4c\xc4\x12\x82\x65\xbd\xa3\x5d\xfb\x5c\xc3\xe8\xdd\x0e\x4b\xde\xb2\x96\xdd\xf1\x5f\xd1\x1b\xd2\x9a\xa9\x51\xaa\xff\x53\xc8\x91\x61\xeb\xe5\x75\xf0\x57\x52\x93\xce\xaf\x83\x3b\xd9\xac\x63\x8e\x15\x0d\xd9\x14\x7c\x7c\xfd\xd9\x75\x5b\x77\xad\x77\x47\xca\x19\x17\xf3\xff\x7c\x3e\x32\xae\x02\xb2\x24\xda\xb9\x5b\xb9\x7c\x5b\xac\x3b\x69\x05\x6a\xc6\x84\x72\x3f\x38\x19\x8a\x33\xfb\xf6\x0f\xa8\xda\x92\x65\x5a\x4e\xe2\xff\xca\x1c\xb5\xd2\xcb\xca\xfc\xff\xc1\xf9\xff\x1e\x94\x42\xab\xf5\x58\xc1\x10\x7c\x21\x45\xab\xf6\x38\xc1\x17\x98\x8b\xd0\xca\x3d\x4e\xd0\x0e\x77\x65\xd0\xea\x3d\x4e\xf0\x13\xbe\xc1\xa2\x15\x7c\x9c\xe0\x07\x0c\x83\xa8\x15\x1f\x2b\x78\x03\xaf\x01\xb5\xe4\x63\x05\xcd\xb0\x49\xa8\x45\x1f\x2b\xd8\x86\x4d\x42\xad\xfa\x58\x41\xf2\x7f\xd7\x0f\x94\xba\x8f\x13\x64\x52\x6c\x24\x10\xfd\x5b\xf9\x07\xf2\x6c\x6c\x32\x27\x7d\xfe\xdc\xd3\x90\x9e\x1a\x44\xf8\xd2\x48\xdf\x5c\xe0\xed\xeb\xe3\xe9\xd0\x09\xd9\x60\xde\x46\xc1\xa1\x1d\x93\x11\x06\x92\xe4\x3b\xbd\x12\x07\xed\x1b\xa9\xfe\x40\x30\xb2\xbb\xf4\x32\x9d\xe3\x23\xe7\xde\x27\x52\x9b\x8b\x5a\x0d\x7e\xe6\xa7\x80\xfc\xa6\xfb\xcd\x8c\x8c\x77\xaa\x2c\x42\x79\x63\x7e\x35\x1e\x52\x18\x00\x25\x22\xc3\xde\xb7\x44\xa0\x5c\x35\x6e\x48\xe9\x96\x80\x85\xf3\x94\xa2\xce\x44\xda\xd8\xae\x9d\x11\x0d\x6b\x44\x72\x29\x3d\xef\x11\xcf\xdb\xe1\x18\x00\xf5\x22\xb3\x90\xef\xd0\xf3\x58\x51\x20\x62\x23\x49\xaf\xe9\x76\x3c\xbe\xbf\xf0\x82\x42\xfa\xd8\xb5\xc8\x0f\x07\x9f\x6b\x73\x32\x5e\xef\xe2\x1b\xc6\x00\x28\xf5\xaf\x67\x3b\x57\x22\x5c\xb9\x13\x38\x37\xc7\xbc\xc3\x2a\xe3\x9f\xf3\x30\x18\xe4\x4d\x7c\x08\x24\x35\x63\xf5\x49\x52\x63\x16\xb2\x65\x1b\x14\xfc\xb7\x65\xe2\xf6\xb3\x11\x3e\x62\xb4\x75\xe2\x04\x3e\x30\xef\xa3\x2d\x14\x27\x48\x84\x03\x01\x6d\xa5\x38\x41\xef\x7f\x4f\x0c\xa2\x2c\x15\x27\x48\x85\x2f\xbd\x68\x84\x87\x13\xe4\xc3\xad\x07\x34\xc6\xc3\x0a\x64\xb9\xf0\xe3\x51\x21\x0f\x3b\x5e\x11\x7e\x5e\x10\x8d\xf2\x70\xf9\x0b\x8e\x4c\x34\xce\xc3\x09\xf6\xc8\x36\xe2\x89\xfe\x0d\xf7\x80\xbc\x3c\x09\x01\xe4\x83\x01\xb2\xec\x08\x2f\xda\x1f\xfe\x30\x9e\xe2\xce\x92\xdd\x8f\x53\x46\x1a\x03\x67\xf8\xc8\xde\x57\xdf\xfd\xb0\x18\xf4\x63\xa0\x48\xfe\xc5\x10\xa0\x60\xac\xc6\x00\x68\x15\x59\x0f\x3c\x96\x02\x9f\xfc\x8c\x20\x0e\x1f\xf4\x5c\xaa\x06\x56\xd6\xa3\x4e\x29\x31\xd3\x5d\xce\xfd\x5c\x96\xba\xcd\x32\xd2\x0d\xbc\x6c\x18\x00\xf9\x21\xa3\x26\xea\x85\xcc\x78\xb9\xcd\xb4\xf7\x2d\x8e\x0b\xbe\x35\x3c\xbc\x6f\x2f\x84\xb6\x6f\x37\x97\x07\xfe\x88\xe1\x73\x29\xaa\x5c\x7b\xac\x86\x01\x50\x24\xb2\x74\x4b\x87\xe5\x57\x5b\x6a\x13\x11\x92\x6d\x76\x7e\xb3\x2b\xea\x7e\x18\x34\x3e\x57\x78\xf9\x55\xaa\xbc\xbd\xac\x43\x24\x93\xef\x53\x56\x0c\x80\xfa\x90\x9f\xcf\x67\x0a\x62\x43\x0c\x56\xf7\x2f\x35\xae\xdd\x2c\x5b\x4b\xcc\x66\x0d\xa1\xe1\xda\x20\x7f\xb3\xcf\x42\xe6\x30\xb5\xa4\xa1\x84\x8f\xc0\xbf\x2d\x13\x77\x5e\xec\xf8\xed\x47\x5b\x26\x6e\xfb\x57\xe1\xf3\x42\x5b\x27\x4e\xe0\x07\x47\x0d\xda\x42\x71\x82\x48\xb8\x40\xa1\xad\x14\x27\xe8\x83\x67\x40\xe5\x79\x5c\x5c\xc2\xad\x01\x54\xa2\xc7\x0a\x0a\xe0\x5c\x8d\xc6\xf4\x38\xc1\xca\x7f\x3f\x04\x47\x83\x7a\xac\x60\x09\x4e\x46\xa8\x54\x8f\x15\x04\xc0\x91\x8f\xc6\xf5\x38\xc1\x14\xbc\xad\x68\x60\x8f\x13\xbc\x86\xd7\x80\x46\xf6\x38\x01\x80\x51\x04\x0d\xed\x71\x82\x35\x78\x0d\xa8\x6c\x8f\x4b\x16\xf0\x1a\x50\xe1\x1e\x2b\xf0\x85\x0f\x0e\x0d\xef\xf1\xb0\x03\xcf\x80\xca\xf7\x58\x81\x17\xbc\x06\x54\xc2\xc7\x95\x71\x38\xc7\xa3\x32\x3e\x56\x30\x00\x47\x1c\x2a\xe4\x63\x05\x65\xf0\x1a\x50\x31\x1f\x2b\x58\x86\x4d\x42\xe5\x7c\x5c\x88\xc2\x27\x8d\x46\xfa\xf8\x3a\x05\x77\x7f\x51\x59\x1f\x9b\x96\xd8\xf0\x13\xa0\xc2\x3e\xae\x98\xc3\x07\x8d\x86\xfb\x38\xc1\x30\x2c\x40\xe3\x7d\x9c\x20\x0e\x3e\x06\x34\xe0\xc7\x09\x26\xe1\x90\x46\x23\x7e\xfc\x0c\x44\x1b\xe1\xb8\x5f\x3a\x5a\x5d\x12\x79\x6b\xa2\x46\xf1\x73\x70\xa2\x97\x78\x8c\x54\x3c\xe7\xbb\xf4\x53\x75\xc7\x71\x9a\x74\xd3\xb4\xa7\x03\x3d\x57\x49\xe9\x81\xfc\x5e\xd2\xb2\x5b\x34\x93\x17\x90\x95\x42\x94\x06\xaa\xc2\xfc\x69\x83\xe0\x1d\xb5\x57\xe9\xae\xb1\x74\x2a\xdc\x1f\x79\x3b\x7a\x22\x24\x1e\x0c\x36\x9b\x8b\x78\x95\x59\x0e\xae\xbc\x06\x50\x22\x92\x07\x41\x90\x19\x3b\x09\xe1\xc7\xc1\x94\x9d\x0e\xd6\xfc\x8b\x71\x7c\x4b\x36\x93\x23\x21\x7e\xde\x22\x3e\xc1\xb3\x9b\xa3\x1a\x87\xac\x00\x54\x80\xc4\x3b\xfb\x0f\x12\x59\x56\xdd\xde\x8c\x89\xcb\x65\x06\x76\x4f\x9b\xe9\x94\xee\x9d\xf9\x4d\xac\xa3\x65\x60\x5c\x78\x79\x50\xe5\xe1\xa2\x23\x06\x40\x61\xc8\x7e\x56\xde\x33\x97\x35\x32\x41\x56\x85\x13\x13\xbe\xb2\xd9\x59\xcd\xd2\x27\x2b\x53\x55\xdf\x1b\xb3\x1c\xb7\xe3\xb7\x6c\x3a\x20\x18\x5d\x81\x01\x50\xe9\x5f\xaf\xd5\xb3\x71\xec\x73\x57\x55\x2d\x37\xed\xd9\xe4\x58\xb3\x61\xfb\x79\xa8\x5b\xc6\xf2\xd9\xd7\x07\x62\x09\xcc\x25\xcf\x42\xe9\x3b\xdf\x79\x01\xa8\x1c\x59\x08\xbb\x84\xbf\x36\x99\x7d\x5a\xe0\xbb\x71\xc8\xec\x32\x9d\x11\xe7\xdc\x82\xa8\xbf\x58\xcf\x4d\xae\xa9\x73\xea\xd2\xb6\xda\xd2\xe4\xa1\x00\x6a\x47\xae\x56\x73\xea\xf7\xe0\x5d\x49\xb9\x7d\x91\x31\x4f\x3e\x93\x4b\x5e\x3d\x95\xbf\xff\x4e\xc7\xc7\x54\xcd\xa5\xb7\xa1\x7c\xf4\xd7\x12\x7e\x33\x00\x68\x10\x09\x9b\xc7\xe2\x3c\x4e\x8d\xdb\xdb\x6a\x24\x1e\x74\x49\x57\xde\x0f\xf4\x57\x75\x5d\x56\x72\x0f\xde\x10\x39\x53\xc6\x6a\xaa\xd3\xe7\xe7\x05\x80\x2c\x1f\xf2\x49\xb8\x2d\x65\xe5\xcd\x95\xe9\x50\x86\x6f\x1a\xc9\x1a\x8d\x49\xe9\xd1\x0f\x9d\xce\x78\x49\xbe\xde\xcf\xa1\x47\x94\x13\xe4\xdb\xf5\x1b\x40\xb3\xc8\xa2\x4f\x33\x4d\xfe\x53\x3e\x21\x80\xe8\x6d\xcb\x63\x47\xf9\x91\x4b\x5a\xe7\x9b\x79\x65\xba\x1d\x4e\xe8\xc6\xec\x06\x32\xf3\x0e\xb3\xaf\x61\x00\x34\x88\xdc\x1b\x9f\x97\x1a\xc7\xfc\x3f\x7f\xd2\xf8\xd4\x31\xd4\x4e\x99\xf8\xa1\xe6\x11\xed\x75\x36\x91\x41\xe1\x06\xa7\xe4\x9f\x8f\x2c\xfd\x72\x7f\x01\x00\xa5\x23\x2f\xec\x36\x86\xed\x85\x4b\xf7\x37\x1e\x39\xd5\x09\xbf\xa7\xb9\xdc\x25\x43\x76\x95\xbb\xd8\x66\xab\x5f\xd6\xa1\xec\x85\xc8\x35\x96\xd4\xa7\x00\x5a\x40\x7e\x3c\xdf\xfd\x1b\x3d\x82\xcf\x03\x41\xe7\xfa\x5c\xb0\xf9\x89\x24\xdd\x0c\x03\xeb\x56\x2e\xcb\x56\x62\x6a\xc6\x01\x9b\xd5\x9b\x9f\xc6\x31\x00\x2a\xfc\xeb\xc9\xd1\xaa\x33\xfb\x9c\xc8\x6f\x6e\x46\x37\xdd\x2a\x79\x7e\xf4\xfe\xca\x57\x9e\x7e\x4f\xfb\xb3\x31\x3c\xe2\x5a\x76\x93\x47\x5f\xd9\x6b\xfc\xb9\x05\x22\xc7\x8b\x37\xd0\x58\xc5\x04\x5c\xd6\x3b\x31\x4c\xb6\xf9\xad\x4f\x88\x9e\x69\x31\xf2\xc9\x0d\x68\xe4\x57\xf6\xc4\x2f\x03\x83\xa3\x84\x8f\x10\x43\x45\x12\x8e\xfd\xa6\x27\x9f\x7e\x62\xf6\xe8\x4a\x03\xc5\x99\x9d\x2c\xca\x7e\xb6\xbc\xe1\xac\x8a\x4e\x9e\xa2\x85\x03\xe3\xe3\x7b\xfa\x00\x40\xf5\xc8\x1e\x5e\xaa\x6e\xcd\xc2\xca\xa2\xf7\x05\x21\x29\xf9\x07\x8f\x82\xae\x9e\x16\x34\xbb\xf3\xf1\x36\x73\x89\x71\xc7\xb9\xcd\x32\x3a\x76\xbb\x44\x00\xfd\x42\x1e\xeb\xcf\xd3\x06\x36\x2f\x54\xaa\xaf\x7b\x68\xce\x5f\xce\xb8\xff\xfb\x71\xee\x71\xda\x42\x27\x9a\xae\x86\x41\x11\xc9\xe8\xf6\xa6\xac\x6a\x2f\x00\xc5\x23\x0f\xaa\xe4\xc8\xe0\xc7\x23\xaa\x2f\xdf\x04\xfb\x56\x10\x14\x05\x08\x2d\x4e\x6b\xbf\x29\x38\xdf\x5a\xf9\xe5\x7a\x99\x3e\xd5\x66\xa9\x76\x26\x80\x12\x91\x3e\x19\x31\xaa\x78\x30\xc6\x98\x7e\xc8\x85\x50\xb9\xbc\xa8\x92\xc6\x37\xb2\xf0\xa6\xd8\x2d\x8b\x8b\x37\x73\xd4\x0e\x73\xc7\xdf\x58\xa5\x03\xd0\x7b\xa4\x35\x72\x27\x7b\x05\x35\x2f\xcc\x5c\xb9\x70\x7a\xb7\x42\x5a\xc6\x6c\xe4\x06\x15\xa5\xd4\xa5\xcb\xa0\x56\xa5\xd8\x8e\x7a\xd1\x29\xcd\x1e\x03\xa0\x45\x64\x2f\xc3\xa3\x7e\xad\xf2\x59\xcc\x4b\x2d\x03\x33\x43\x1a\xe9\x0d\xbd\x46\xf5\x81\xde\x95\x54\xdd\xe7\xf2\x4a\x1f\x05\x7e\xb5\x65\xb6\x1c\xc6\x00\xa8\x0e\xb9\xef\x84\xdf\xaf\x76\xc9\x9f\x31\x75\xc8\x49\x0d\x5e\x22\xd7\x1f\x57\x23\x78\x6d\x9e\xc2\x79\x3b\x4c\xdc\x5e\x59\xa3\x95\x27\x77\xb1\x01\x00\x28\x10\xe9\x36\xcc\x07\xec\xf9\x17\x03\x7d\xf5\xaf\x5b\x77\x26\x1e\x2a\xe8\x90\x1e\xb2\x26\x6c\x5b\xf7\x09\x7a\xa7\x2b\x45\xc7\xfd\x3b\xd5\x88\x03\x40\x21\x48\x73\x8e\x69\x53\xc4\xd1\x0e\xfe\xea\x61\x34\x7d\xc5\x6c\x3f\xbc\xb7\xc4\xa0\x54\xb7\x71\x9c\x41\x87\xf9\x33\x63\x00\x33\xb7\xa4\xa9\x3b\x06\x40\x55\x48\x73\x62\xa7\x7b\xdd\x3f\xb1\x92\x5c\x3d\x78\x36\x21\xfe\x68\xbd\x63\x11\x2d\x73\xac\x7e\xdb\xe9\x8b\xba\x9d\x92\x35\x4a\x1f\x93\x08\xb5\xff\x5c\xbc\x91\x19\xc7\x35\x6a\xd1\x3d\xf0\xcb\x2b\x4e\x5b\xa2\x6e\xbd\x98\x0d\x81\x43\xcc\x8f\x5b\x26\x8f\x45\x84\xe7\xeb\x2f\x25\xd3\xd2\x96\xeb\xca\x62\x00\xe4\x89\xcc\x38\xe6\x1b\x6f\x92\x0f\x5f\x49\x8b\x56\x22\x5c\xa9\x36\xe2\x2a\x3b\x74\xc5\x31\x3f\x17\x12\x94\xa9\xeb\x69\xae\x27\x77\x13\x95\x3e\x80\x01\x50\x1e\xd2\x1e\x5a\xe6\xaf\x91\xa5\x81\xad\x1f\x59\x4e\x4c\x5c\x56\x3d\x62\x22\xac\x3c\x1c\x19\x18\x78\xe9\xad\xf5\x6d\xc7\x94\x6b\xda\xeb\x2f\xd2\x90\x0f\x21\x26\x4d\x49\xd6\x6e\x57\x8d\xd2\x5e\xed\xdc\xd8\x7f\x3b\xb5\x25\x42\x40\xb2\xef\x40\xb1\x7b\x9d\x2e\x31\xc7\xd1\xa5\xd4\x8d\x22\x00\xa0\xd1\xbf\x96\x5a\xd6\xee\x78\xc1\x88\xf1\xee\xde\xdb\xdd\x8e\xd8\xcd\xd4\xfb\xca\xd2\xbd\x87\x68\x06\x8e\x71\xb4\x7d\x75\x1f\x25\x7e\xaf\x25\x00\xa0\x4d\x64\x00\x9e\x75\x13\xf6\xf5\x78\x26\x54\xcc\x9a\x5e\xb7\xdd\x91\xa9\xed\x10\x27\x66\x15\x1a\x11\xa9\x9c\x1a\x62\x16\x45\x96\x52\x9d\x29\xff\x27\xa0\xfe\xfa\x1e\x88\x8c\x2e\x87\xd4\x86\xf8\xf5\xc1\xdb\x4b\x92\xdc\x69\xad\x13\xcc\xa9\x19\x61\x4c\x3f\xb2\xc7\xaa\xc5\xb3\x7e\x1e\x6a\x96\x10\xfe\xe3\x38\x48\x37\xbe\xba\xa4\xe7\xd3\x90\x9e\xb3\xe9\xdb\x43\x72\xa6\x51\xf1\x89\xf3\xc7\xa8\x6d\xf1\x13\xca\xdd\x54\x82\xb3\x2e\x7e\xe1\x17\x84\x62\x01\x90\x95\x47\x6e\xbc\x73\x78\xb6\x24\xf1\x83\xcb\xb4\xc4\xe6\xcc\x49\x42\x3b\xf5\x2b\x65\xb2\x27\xd4\x02\x5c\x08\x92\xa0\x5f\xdd\xa9\x84\xeb\xa9\x00\xf2\x46\x9e\x53\xee\x5a\x47\x56\x69\x92\xd3\x75\x4d\x3d\xfd\x91\x52\x9f\x5e\xe2\x05\xd5\x7c\xfb\x64\x8b\x2b\x15\x27\xdd\x92\xb2\xf6\x22\x1a\xd2\x00\x90\x35\x41\x0c\x1f\xe2\x99\xd0\x4f\x77\xbb\xee\x4d\x32\x66\xd2\xdb\x76\x51\xaf\xa3\xc2\x77\xb5\x15\x52\x6b\x84\x52\x35\x9a\x7f\x5c\x50\x96\xe8\x04\x50\x37\xd2\xcb\x06\x48\xf2\x2e\xc9\x6e\xc7\x1d\x9e\xbc\x17\xef\xaa\x5d\x4a\x3f\x13\x73\xc3\x2e\x83\x6e\x8a\xf7\xc6\xec\x67\x96\xcc\x0c\x6d\xba\x50\x0c\x80\xc6\xfe\x7a\x86\x59\xd2\xb4\xed\xed\xad\x87\x8e\x06\x1b\x81\x6d\xb3\xad\xc3\x75\x94\xeb\xda\x67\xba\xa2\x45\xaf\x7d\xbe\x47\xc3\x5c\x5c\xf2\x59\x13\x03\xa0\x62\x64\x06\x99\x51\x3f\x1a\xfc\xfc\xea\x86\xc8\xf2\xcc\xb7\x06\x22\xe6\x8b\xc6\xcd\x51\x2f\x5c\x3e\xb0\x79\x5c\xca\x05\x5b\xc1\x63\xae\x9b\x62\x02\xff\x58\x5c\x65\x3d\xff\x90\x8b\x14\xbe\xea\xa3\x56\xd7\xff\x8f\x87\x12\x61\x4c\x40\xab\xaf\x38\x41\x01\xdc\x55\x40\x2b\xb0\x38\x41\x18\xfc\xec\x19\x5a\x85\xc5\x09\x4a\xff\xfb\x63\x75\xb4\x12\x8b\x15\x94\xc3\x37\x30\xd4\x22\x8b\x15\xb4\xc3\x8b\x46\x2d\xb3\x58\xc1\x20\xdc\xb7\x40\x2d\xb4\xd8\x63\xe0\xc3\x4f\x80\x56\x69\x71\x13\xcc\xc2\xd0\x8c\x5a\x6a\x71\x16\xc1\x9b\x84\x5a\x6b\xb1\x82\x74\x18\x9a\xd1\xaa\x2d\x4e\xb0\xf0\xdf\xcf\x1d\x50\xca\x2d\x4e\x50\x08\xdf\xd8\xd0\xea\x2d\xfe\x18\x88\xe0\x9f\xb4\xa0\x96\x5d\x79\x4f\x22\x82\x23\xde\x7f\x6e\x9e\xc8\x8c\xfb\xce\x41\x54\x4e\x61\xfb\x62\xfa\x69\xd7\xe0\x37\x4f\x29\x49\x85\x3d\xb5\xd6\x4f\x5c\x93\xcd\x22\x0b\x7a\x54\x95\xa0\xb7\xa7\x18\xf0\x67\x12\x64\x6c\x5e\xd1\x69\xe4\xd5\x18\x99\x8f\x67\x22\xae\x96\x2c\x88\xc9\xf7\xfe\x14\xf5\xf5\xb1\x6f\xce\xb8\x54\x15\xdb\xe7\x91\xa6\x95\xf5\x4f\x18\x00\xad\x23\xf3\x22\xf3\xe1\x43\x99\x42\x69\x75\x36\x21\x54\xcf\x8f\x2d\xfa\x71\xdb\xa9\x63\xc6\x37\x4f\x0e\x6b\x07\x57\x3b\x47\xa6\x45\xf2\x56\x70\xfc\x89\x65\xe4\xf8\xc2\xc3\x89\x34\xbd\x29\x43\xd4\x62\x6d\x9a\xa5\x69\x89\x79\x74\xcf\x72\xfb\x39\xda\x9c\x09\xce\x37\xa5\xee\xf0\x2b\xdd\xed\x4c\x11\xfc\x37\xb3\x71\xfb\x13\x00\x47\x0e\x9a\xdd\xf8\x0d\x85\x6f\x15\x68\x86\xe3\x04\xeb\xf0\x19\xa3\x59\x8e\x13\x14\xff\xd7\x2f\x43\x03\x1f\xac\xa0\x1e\x6e\x76\xa0\xa1\x0f\x4e\xf0\x0b\xbe\xd1\xa2\xb2\x0f\x56\x10\x0f\x87\x0e\x2a\xfd\xe0\x52\x1e\x9c\x2e\xd0\xf8\x07\x27\x78\x0f\x9b\x84\x06\x40\x38\xc1\x22\x7c\x0e\xa8\x04\x84\x15\xd4\xc1\xa1\x83\x8a\x40\x58\x41\x20\x1c\xcd\x68\x10\x84\x13\x84\xc0\x26\xa1\x51\x10\x4e\x50\x05\x9b\x84\x86\x41\x38\x41\x33\x5c\x18\xd0\x38\x08\x27\xf0\x84\xdd\x1b\x0d\x84\x70\x82\x3c\xa2\x8d\x79\xc2\x7f\xe4\x21\xb9\x14\x92\xff\x3f\x38\xd8\x80\xc4\x96\x0e\xc9\xc5\x39\x41\x73\x0e\xcf\xe8\xbd\xd1\x09\x8d\xf3\xe3\x99\x5f\xc8\x43\x75\x05\x3f\x25\x5a\xd3\xb3\x1f\xcc\x4d\x52\x20\x5a\xc7\x00\x59\x23\xe4\x57\x65\x32\x2c\x2c\xce\xb7\x03\x2b\xf8\x78\x0f\xfa\x56\x97\x28\x19\x97\xbb\x8f\x5b\xd5\x3f\xf0\x0e\x7b\xb6\xbb\xb1\x57\xb9\xfc\xdd\xf2\x4f\x71\x43\x7e\x7c\x82\x52\x5e\x43\x79\x9f\x48\x27\x8d\xe2\xc3\x4f\xaa\xaf\x44\xb3\x48\x16\xfc\x72\x78\xb3\x0b\xe3\xc2\x76\x7e\xef\xac\xda\xeb\xdd\xc3\x00\xa8\x12\x89\xdf\xdc\xf1\x2c\xd5\x97\xe6\xee\xba\xa6\xef\xac\xeb\x92\x35\xac\x3e\xe7\x32\x1b\x81\x6c\x2b\x1b\x0a\xcb\x36\x48\x5f\x7a\x72\x75\xe0\xff\xb0\x1e\xcd\x6a\xdc\xee\x34\xc0\x3f\x66\x45\xb3\x1b\x57\xa3\x8c\xf0\xdb\x8f\x66\x37\xbe\x90\xc3\x3e\x87\x66\x38\x4e\x50\x09\xc7\x0d\x2a\x8e\x62\x05\xa3\xb0\xcf\xa1\x01\x29\x4e\xb0\x09\xa7\x23\x34\x22\xc5\x67\x48\x78\x0d\xa8\x48\x8a\x0b\xe5\x7d\xf8\x5d\x45\x85\x52\xec\xae\xca\xc3\x5f\xf5\xa1\x51\x29\x76\x02\x6f\xb8\x37\x85\xca\xa5\xd8\x09\x4c\xf0\x13\xa0\x81\x29\x6e\x82\x6e\x38\xf2\xd1\xc8\x14\x27\x18\x83\x05\x68\x68\x8a\x2f\x0a\xc4\x1b\x81\x47\xb0\x8a\x9a\xec\xb7\x3f\xea\x3e\x68\xd2\x94\x9d\xa5\x88\x98\xe9\x26\x9e\xb0\xda\xf5\x39\x68\x18\xfd\x8c\xc9\x4d\xc8\x22\x7c\x85\x47\xd2\x0f\xc8\xef\x49\xef\x2e\x45\x33\x61\x00\xf4\x11\xf9\x5d\xdc\x19\x85\xe3\xf3\xc4\x62\x05\x4b\xa9\x1e\xe7\xc8\xc7\xdd\x43\x58\xed\x1b\x59\xd9\xc8\x5f\xaf\x9f\x75\xfa\x36\xa0\x50\x50\xa0\x34\xef\x05\xa0\x24\xe4\xfd\x26\x59\xf0\xfe\xfd\xf7\x1e\x75\xa3\xca\xab\xf5\x06\x07\xb4\x06\xdd\x47\xf7\x47\xba\xb2\x86\xf8\xb1\xb9\x1d\x75\xba\xef\x4c\x75\x46\x0f\x40\xc9\xc8\xc8\x4c\x71\xeb\x3f\x18\x17\xd1\x16\x74\xb9\xcc\xf6\xe6\xb1\x71\x09\x95\x87\xdf\xd3\x5d\xed\xd3\x05\x88\xcf\x17\x5c\x60\x3f\x39\xf3\x42\x11\x40\x95\x48\x6b\xe8\x2f\x5d\xfc\x79\xfb\x57\xe0\xf7\x30\xa5\xf8\xa8\x7b\xec\x72\x22\x39\xae\x84\x91\x25\xbe\x36\xa9\x85\x6f\x6c\xe4\xeb\x04\xa9\xff\x5c\xfc\xfa\x91\xe3\x4b\x49\xf8\xa3\x0b\xac\xd2\x9e\x97\x1c\xc8\xd8\x12\xfb\x55\x1f\xfb\x50\x52\x61\x66\x46\xd2\xd4\x4b\x5e\x7e\x7a\x7a\x7a\x2c\x33\x1e\x00\xe8\x35\x12\x5b\x06\xce\x57\xab\x5e\x9b\xde\xb8\xb9\xf5\x06\xea\xe2\xb8\xf7\x4b\x21\xbe\x65\x39\x2a\x64\x9d\x77\xb5\x3a\x21\x2d\x22\xb0\xaa\x4a\x10\x40\x9d\x48\xeb\x3d\x2e\xaf\x07\xe4\x32\x9d\x3d\x46\xb0\xbf\x2c\xd4\xc7\x75\xd7\xc2\x61\x52\x93\x7b\xf0\xd8\x77\x0e\xee\x93\xfa\xfd\x76\x83\x45\xbf\x31\x40\x56\x02\x31\x5c\x27\x8a\x30\x6c\x5d\xe5\x99\x1c\xbd\x2d\xbb\x45\x9c\x25\x35\x81\x93\x48\x8c\x4f\x29\x4f\x65\x12\x5b\x92\xda\xea\x56\x04\x1f\xa9\x17\x80\xa2\x91\x17\x90\xaf\x7a\x43\x56\x61\xde\x5e\x2e\x61\x3f\xd8\xc7\xdf\x6a\x38\x59\xb4\x0d\xd5\x77\x46\x4b\x2d\x29\x96\x5b\x2a\xd5\x7d\x31\x38\x95\x03\xa0\x64\xe4\xf0\x3b\xeb\x24\xf9\xc4\x65\xb5\xa4\xeb\x21\xee\x3f\xfc\x5e\xbc\x78\x83\x31\x08\xba\x6c\xf0\x60\xa6\xad\xa2\xd2\xef\xd3\x11\x72\x95\x0f\x00\x2a\x40\xb6\x24\x8a\xb8\x18\xbf\xff\x9e\x92\x94\xb0\x5e\xb9\x96\xdb\xe2\x77\xe0\x65\x95\x41\x1c\x73\x79\x2f\x5d\x40\x5f\xfa\xf6\xec\x99\xa7\x02\x67\x31\x00\x7a\x89\x1c\x1f\x32\x44\x66\x45\x2d\x41\x9e\xdf\xe2\xf8\x2d\x73\xe9\x9c\x5c\xcd\xd6\x60\x12\xef\x6d\x69\x5f\x53\xf9\x73\x18\x51\x55\x2a\xa2\x3a\x00\xa0\x24\xe4\xd5\x32\xbd\xcf\x8d\xa2\x6c\xe9\x9d\xe7\xa7\x17\x14\x49\x42\x1b\x61\x6b\xce\xb7\x18\xce\x54\xb9\x94\xf2\x9b\x8d\x58\x53\x5f\x7d\x87\x79\x05\xa0\x35\xe4\xf0\xda\x5c\x0b\x2b\x13\x48\x24\xf4\xc6\x1b\x6f\x9f\xed\x8a\xfc\xdd\x53\xa3\xef\x35\xc0\x6a\x08\xf7\x4c\xa9\x7b\x70\x8c\xa9\xc4\x02\x00\x50\x1a\xf2\x68\xbf\xae\x04\xfc\xb8\xad\x11\xe9\x4a\x69\xe1\x1a\x02\xb5\xc7\xc7\xbc\xbf\xcc\xd4\x3b\xb9\xe9\x1f\x6f\x59\xdc\xc8\xa3\x5f\x9b\x98\x0f\xa0\x9f\xc8\x8f\xdf\xd5\x58\x7c\xc5\x74\x78\xe0\x8b\x6f\xb2\x9f\xcf\xc4\x54\x70\x05\xad\x3c\x47\x4e\x5e\xc4\xeb\x03\xc5\xbc\x1f\x82\x77\x13\x7d\x0b\xbc\x00\x94\x85\x04\x46\x52\xf3\x9e\x7c\x48\x80\xaa\xe9\x85\xcc\x1d\xe6\xc3\x24\x91\x34\x1e\x8c\x61\x0b\x32\x0d\x1e\xfc\x5f\xd5\x87\x36\xdf\xfb\x6c\x36\x03\xa8\x10\x79\xd3\x6d\xea\xd3\x9c\x0f\x9d\xe6\x14\x0d\x13\x79\x1a\x4a\xfe\x7b\xfa\x1e\x8f\xff\x4c\x9d\x7d\xc5\x60\xf9\x73\x75\x9f\x1f\x23\x83\x49\x33\x00\x9a\x45\x1e\xd5\x3b\x0e\xb7\xdf\x4f\x57\x98\xcd\x30\x1c\x19\x69\x60\xea\x9d\x44\x94\x24\x99\xcd\x48\xcd\x9b\x5b\xd4\xb7\x33\x08\x6c\xd5\x56\xbf\x01\x00\xf9\x21\x17\x1b\x49\x00\x39\x68\x4f\x94\x58\x39\xf9\xf5\x57\x9a\x70\x4e\x9d\xcb\x0a\x7b\x4a\xc6\x21\x2d\xee\x27\x20\xe0\xa6\xd3\x4c\xa8\xf5\x0a\x40\x7b\x48\x6b\x08\x93\x33\xec\x39\xad\xda\x13\xd8\xd5\x8f\x5f\xaa\x1e\x4e\x4a\xbf\x90\x6a\xfd\xd3\x61\x25\xca\x38\x2e\xad\xa3\x25\xcb\xe6\x7c\x19\x06\x40\x51\x48\x73\x52\x18\xef\x3f\x1d\xe2\xce\xfe\x14\x6d\xdb\xf8\xd6\xd2\x41\x95\xd8\x9b\x8b\xf9\x21\x5f\xde\xf7\x2e\x8f\x63\x3e\xd4\x77\xf7\x3d\x3a\x81\x01\x50\x2e\xb2\x3e\xae\x52\x3a\x2a\x9d\xdb\xa9\x89\xfb\x52\xfc\xda\x51\x98\x9d\x42\xf9\xa2\xbc\xda\xe8\x85\xab\xc7\x8b\x05\x33\x3d\x23\x74\x3a\xef\x7e\xf8\xe3\x0a\x48\xd7\xa1\x18\x68\x4b\x5f\xa8\x90\x62\x54\xdc\x48\xf2\x70\x7b\x12\xd4\x76\xe9\x43\x58\xe3\xc9\xc8\xad\x7b\x39\x8f\x03\x9c\xaf\xdf\x62\x96\x06\xd0\x2c\xd2\xfc\x48\x69\x1b\x9a\x73\x07\xd7\x8e\xf5\x88\x3e\x3b\x7e\xb5\x53\x5f\x93\x65\x5b\x72\x99\xca\x9e\xe7\x90\x87\xf1\xee\x44\x60\x75\x0a\x01\x00\x50\x29\xb2\x83\x0b\xdd\x1f\x78\x4e\xe8\x39\xe2\xce\x20\xfb\x40\xff\xb6\x63\xb8\x8b\x14\x26\xdc\xe3\x67\xd5\xfb\xd7\xde\x6c\x8a\x8a\xb1\x9b\x91\xa6\x00\xfa\x82\x5c\xed\xe7\x1b\x66\xac\xef\x0e\xb2\xb1\xf1\x48\x9f\x67\x3a\x96\xe7\xd4\xe3\xc3\x75\xf1\x9c\x6c\xa3\x4e\x45\xa0\x0e\xf7\x05\x89\xfe\x95\xd3\x00\xc8\x2a\x21\x1b\x8f\x42\xde\xe7\x4d\x78\xb3\x43\x98\x79\x35\xc2\xb5\x68\x19\x44\x84\xf5\xce\x2d\xec\x2d\x4d\xf7\x1f\x09\x57\xf3\xfe\x9d\x5c\x6e\x06\xa0\x2f\x48\x63\x24\xe8\x22\x8e\xf2\xd7\xea\x0f\x71\x5a\x27\x6d\xdf\x4f\x23\x55\x31\x53\x66\x79\x98\x13\x5f\xb9\x17\xa2\xbf\x39\xcd\xf3\xfd\x52\x2d\x00\x50\x3e\x72\x7c\xbd\x6a\x61\x85\xa3\xef\xb9\xde\x2d\xf3\x9b\xcf\x63\x7f\xbf\xa8\xba\xa6\xd6\xe0\xaa\xb6\x6e\xf2\xd2\x3d\xb0\x4e\x4f\x49\x89\x55\x1f\x40\x23\x48\xe3\x55\x3e\x7c\x1a\x1d\x53\x66\x8f\x0c\x71\xce\xb4\xef\x00\xfe\x9b\x9f\x6f\xbc\x3e\xf2\x8c\xc4\xd8\x62\x81\xa2\x68\x8e\x4f\xa8\x79\xc3\x0b\xc8\x32\x20\x9f\xb8\xfa\x52\x25\x19\xa7\x04\x54\x9b\x9c\x26\x0f\x6b\x2a\xd4\x88\x2c\x3b\xe7\xdc\xad\xdc\x57\xa4\xb4\xcf\x90\x66\x20\x64\x31\x59\x0a\x40\x3d\x48\xaf\x3f\xe8\xae\x07\x3a\xc6\x82\x2d\x7c\x22\x7e\x2f\x0b\x3b\x68\xd9\xea\xa5\x66\x48\x58\x16\xa6\x5f\x50\x35\xb0\xdc\x4a\x5d\xe6\xf9\x0e\xa0\x11\xe4\xf0\x2c\xc2\xa3\x32\xe1\xa6\xa7\xc2\x16\x6f\xeb\x38\x13\x7a\x28\x18\xec\x97\x8c\x3f\x90\xf2\x39\xa6\x81\xb2\x6e\x2e\x36\x95\x64\x80\x03\x03\x64\x1d\x10\xc3\xdf\xb4\x98\xf9\x27\x44\x3d\x4a\x72\xcf\x1d\x4b\x74\x79\x4b\x98\x90\x2a\xf2\xf3\xbb\x4d\xf3\xde\x19\x07\x96\xf8\x37\x01\x7b\xa9\x85\x00\x40\xaf\x90\xe9\x75\xe2\xba\xf4\x37\x91\xd9\xfd\x57\x02\x36\x24\x5b\x77\xd3\xfc\xa7\x77\xc2\x75\xdb\x9e\x89\x8e\x84\x3a\x76\x49\xff\x60\x3d\x1a\x01\x00\xd4\x83\x0c\x92\xd4\xf5\x17\x22\x4f\xde\xec\x7a\xb8\x63\xc2\xa9\x1e\x2d\x0a\x9d\xf8\x35\xba\xa3\xe8\x65\x78\xe7\xf4\xcd\x94\x73\xd4\xde\x03\x6c\xea\x18\x00\x55\x20\xdd\xac\x9e\xae\xd0\x66\x6c\x26\x33\xdb\x30\xa6\xa8\x74\xc4\xb1\xd4\x67\xaa\x50\xfa\xe5\x2d\x0f\x69\xf2\xdc\x36\x02\x33\x5b\xf5\x67\xd2\xc8\xd4\x4a\x30\x37\xdd\x78\x90\xe5\xf9\x2f\xc9\x8c\x61\x67\x32\xab\x3b\x5b\xd1\xb6\xac\x9f\x27\x14\xf2\x9c\x79\x67\x6e\x0b\x0c\x9a\x6e\x78\x01\x28\x0e\x99\x6d\xd4\xa0\x83\xfe\x87\xae\x6f\x4b\x2b\x27\xb1\xc7\xc6\x70\x9c\x25\xaf\xcd\x72\xdd\xdc\x76\xbd\xd6\x59\x3c\xc1\x40\x46\x16\x22\xf9\x05\x40\x8b\x48\x4b\x20\x0e\xa5\x3b\x52\x3b\xbe\x0b\x54\xb4\x42\x07\xee\x08\x17\xbf\x69\xa5\x7b\x56\x2f\xfd\x21\x52\xcc\x4d\xc6\x28\xd4\xf7\xa4\x28\x2d\x80\x36\x91\x0b\xbd\x7e\x69\xf1\x4a\xeb\x0b\x4e\xa6\xe0\x86\x57\xd1\x1f\x17\xd3\xdf\x66\x7b\xdb\x04\x0e\x33\xbe\x54\x79\x90\x41\xde\x76\x3c\xac\x5b\x0e\x03\xa0\x65\x64\x4d\x6e\x4a\xf2\x77\xef\x59\x98\xea\x09\x4a\xa4\x08\xe4\x77\x97\xf4\xf9\xd6\x32\x4b\x54\xa2\x62\xbc\xaf\xfa\x44\xaf\xd8\xed\x59\xf7\x3f\x1b\x53\x8b\x1c\xdf\x25\x12\x70\x2f\x68\xca\xa3\xa7\xe7\x65\xc2\x41\x65\x52\x8a\x03\x9f\xde\x18\x6c\x75\xd4\x6c\x73\xf7\xbc\xcb\xaf\x15\x50\x78\xc4\x83\x2c\x0a\x92\x44\x9b\xef\x84\xa6\x1e\x29\x33\x70\xef\xbf\xef\xfc\xc5\xba\x81\x95\xb0\xcb\x3d\x6e\x29\xeb\x73\x85\xf9\x38\xfb\xd1\xe8\xfb\x5e\x00\x7a\xfb\xd7\x1b\x05\x9e\xf2\x9f\xff\xfc\x75\x4e\x3c\xd6\x5d\x3e\xe6\x73\x97\xe1\xae\xa8\x41\x4a\x87\xfd\x07\x45\x65\xab\xf8\xd0\x09\xf3\x18\xe6\x56\x00\x4d\x20\x13\xc7\x4e\x86\x99\xda\x94\xfc\x7c\xb1\x08\x5f\x19\xe6\xa0\xdc\x1c\xd9\x7e\x8b\x45\x19\x6f\x6b\xed\xf9\x11\xb1\xe5\x17\x2a\x44\x5e\x3f\x01\x34\xf5\xd7\x9b\x6d\x0f\x52\x10\xdf\x59\xbc\xdc\xb7\xdc\x57\xd8\x1d\x9a\xdb\x75\x33\xcf\xfd\xee\xfb\x53\x06\x1f\xb2\x39\xfd\x02\x0a\x23\x0f\x9f\x75\x14\xfa\x37\xa6\x01\x10\x21\x01\xe6\xff\x20\xb4\x21\xf4\xaf\x54\x83\x55\x24\x11\xe1\x15\xe8\x60\x83\x55\x24\x1f\xc4\x2b\xd0\xd8\x06\xaf\xa8\x84\xad\x42\xa5\x1b\x9c\xa2\x1f\x56\xa0\xf3\x0d\x56\xf1\x9a\x02\xaf\x40\x43\x1c\xbc\xa2\x13\xe6\x77\x34\xca\xc1\x29\x64\x25\xf0\x53\xa0\x63\x0e\x76\x8a\x68\x62\xbc\x02\x9d\x74\x70\x9b\x0b\x2b\xd0\x60\x07\xaf\x28\x38\x80\x57\xa0\xe2\x0e\x4e\xf1\x12\x56\xa0\x03\x0f\xce\x49\xf6\xe1\x15\xa8\xcc\x83\x53\xac\xc1\x0a\x74\xea\xc1\x2a\xd2\xe0\x23\x47\x03\x1f\xbc\xe2\x27\x3c\x07\x3a\xfa\x60\x15\x59\x24\x78\x05\x3a\xfd\x60\x15\x85\x84\x78\x05\x2a\x00\xe1\x14\xb3\xf0\x09\xa2\x23\x10\x56\xe1\x07\xaf\x1c\x8d\x82\xf0\x8a\x3d\xd8\x2a\x34\x0e\xc2\x2b\xa2\x60\xab\x50\x49\x08\xa7\xc8\x25\xc3\x2b\xd0\x59\x08\xe7\x25\xb0\x5f\xa1\xe2\x10\x7e\xaf\xe0\x75\xa0\x03\x11\x56\x51\xba\x1f\xaf\x40\x65\x22\x9c\xe2\x0b\xdc\x35\x44\xc7\x22\x6c\x98\x2b\xe1\xa7\x40\x05\x23\xfc\x14\xb0\x51\xe8\x68\x84\x55\xe4\xc3\x0a\x34\x3a\xc2\x2b\x46\xe0\x65\xa0\x03\x12\x76\x19\x0c\xf8\x29\xd0\x11\x09\x3b\x45\x0f\x1c\x1d\x68\x94\x04\x1b\x05\xf7\x4c\x50\x41\x09\x67\x94\x03\x7e\x0a\x74\x52\xc2\x4e\xf1\x0a\xae\x36\x68\xb0\x04\x2f\x03\x0e\x27\x34\x5c\xc2\x2b\x2a\x08\xe1\xe7\x91\xd1\xb0\x09\xc8\xef\x23\x50\x67\xf3\xc1\x00\x28\x05\x89\x95\xca\x51\x0b\xdb\x6a\x7d\x87\x62\x3a\xdf\x5d\x10\xd7\xdf\x4f\xed\xf0\x4e\xc6\xfd\xdd\x8c\x73\x7b\x60\x40\xfb\x65\x95\xc7\x3c\x4e\x1b\x18\x00\xb5\x21\x29\x81\xc6\x9b\x48\xcb\xaf\x77\xe5\xfe\x2d\x75\x5e\xb9\xf7\x3b\x06\x6a\x3d\x84\x0f\x3d\x8b\xc8\x1f\x1d\xce\xd2\xfb\x5d\x27\x9e\x79\x54\xff\xcf\xc2\x91\xb7\xfc\xdd\x17\x53\x81\x1f\xf4\x44\x92\xf7\xa5\x9e\x12\x23\xd6\x70\x30\xfd\x38\x7d\x9f\x8a\xf3\x8a\x5c\xa4\xc7\x6d\x9f\x9d\xd7\xdf\xb7\x77\xff\x14\x40\x24\x73\xeb\x2d\x2b\x1c\x9f\xb0\x74\xa7\xec\xb5\x24\x97\xe3\x4a\x90\x24\x98\x8d\x34\x3c\x5c\x70\x98\x72\xe7\xd4\xf9\x9a\x91\xc0\x49\x8b\x97\x7f\x62\x0f\xc9\xad\x81\xcc\x1d\xa7\xb9\x3d\x0f\x95\x3f\xbc\x51\x6b\xaa\xc4\x74\x59\x34\x45\xb8\x9c\xa6\xba\x74\x4b\x62\xe2\xbe\xcb\xc5\xaf\xdc\x6e\xec\x42\xff\xb6\x4c\xfc\x86\xa6\xc0\x9e\x84\xb6\x50\xbc\xa2\x0d\xce\x1d\x68\x4b\x85\x1d\x03\x2e\xf8\x68\x8b\x85\x11\x01\xce\x81\x68\xcb\x85\xf3\x13\xec\x7c\xe8\x78\x8c\x55\xc4\xc1\x35\x09\x9d\x90\xb1\x8a\x45\x38\x07\xa2\x41\x32\x5e\xb1\x09\x3b\x38\x1a\x26\xe3\x15\xcb\x30\xe4\xa1\x81\x32\x5e\x51\xfb\xdf\xf7\x69\x68\xc0\xfc\xff\xef\xd3\x48\xbd\xff\x1c\x09\xd2\xc5\xad\x1f\x96\x5e\x7b\xa1\xe9\xc4\xaa\x63\x37\x22\xce\xd7\x2b\x67\x16\xf0\xa2\x3b\x6a\x5e\xde\xa4\x5e\x20\xe4\xed\xcf\xcc\xf5\xb9\x14\x0c\x80\x02\x90\x21\xa4\xc9\x37\xbb\xb2\x61\xd1\xa3\xfa\xfa\x0d\xa5\xee\xa5\x66\xe6\x46\xd6\x98\x22\xfa\x81\xf2\x91\x20\x15\xb1\x2a\xbf\xea\x94\x69\x7a\x0c\x80\x56\x91\x2e\xab\x0e\xcd\x1f\x49\x1e\xfc\x6d\xdb\x5e\xd0\x91\x39\x68\x24\xa5\xb2\x7d\x9f\xf2\xc5\xd5\xa2\x6e\x97\xab\xfb\x83\x3a\xa1\xd5\x71\x07\x0c\x80\xca\x91\x1d\x00\x69\xca\xf0\x77\xd6\xae\x4a\x03\x47\x8e\x93\xd1\x09\x0c\x3b\x58\x0c\xd4\xcd\x65\xb3\xb3\xcc\x5e\x56\x14\x2c\xee\x22\x56\x9f\xfd\x20\xf4\x6f\x66\xc3\xee\x07\x3b\x2c\x9a\xe1\x78\x45\x00\x1c\x14\x68\xa6\xe3\x15\xab\xb0\xfb\xa1\x19\x8f\x57\x94\xc3\x45\x1b\xfd\xda\x82\x55\xbc\x85\x2b\x11\xfa\xcd\x05\xab\x98\x80\x57\x8e\x76\x79\xc1\x2b\xa6\x48\x37\x32\xa8\xb1\x12\xae\x6d\xbb\x3a\x07\xd1\xc4\xbd\x48\x2a\xa7\xef\x96\x9c\x46\xf9\x13\xd3\xbe\x0d\xba\x4a\x0f\x9f\x71\xf2\xcc\x48\xbd\x68\x6b\xb9\x02\xe4\xf5\x6b\xf7\xb6\xa3\x99\x00\x80\xda\x90\xa7\x4d\x36\xf5\x69\xec\x0a\x01\xeb\x86\xe9\x3a\xa5\x6c\xe9\x61\xd7\x93\x43\xec\xf3\x67\xc8\x26\xa2\xf9\xb2\xe3\xd9\x85\x25\x5e\x37\x34\x02\xa8\x1d\xe9\x4c\x53\x3a\x6f\xf8\x43\x92\x2c\xcd\xd4\x59\xe4\xf2\xfd\x85\x2a\xe2\xd9\x06\x4f\xe8\x0a\x8b\x55\x9b\x6c\x44\xb8\x0c\x46\xc8\x5c\xa1\xf2\x02\x50\x03\xf2\xfe\x18\xf8\xdd\xf6\x6d\x5d\x70\x8b\xc1\xe7\x0c\xd6\xf7\xc9\x45\xbf\x98\xc3\x03\x19\x9e\x46\x3d\x4e\x75\xaa\xbf\x77\x3e\x70\xe9\x7e\xfa\x29\x00\xf5\x22\xef\x84\x07\xa4\xda\x98\xc3\x3b\x72\xf9\x09\xae\x89\x70\xf4\xc7\xc4\x76\xe7\xfe\xb4\xd9\x4f\x36\x42\xaf\xd3\x57\x52\x4d\x75\xac\xe6\x47\x2b\x80\xe6\x90\xc6\xb7\x4c\x4c\x1b\x2e\x84\xfe\x20\xcd\xa6\x20\x8d\x7c\xee\x5f\x42\x1f\xe6\x9a\xc8\x44\x72\x24\xe9\x99\x08\x7d\x99\xf2\xfc\xe7\x26\x7d\x2f\x00\x05\xfc\xf5\xfb\xf7\xcc\x9d\x1c\xd1\x5b\x7e\x99\x99\x4f\xe8\x8f\xad\xbd\x0a\x57\xab\xaa\x71\x69\x26\x13\x26\x55\xed\xd4\xe3\x54\x33\x2b\x22\xf3\x06\x50\x01\xd2\x1a\x95\x8d\xa3\x65\xfc\xca\x93\xa7\x9e\xd1\xe5\x24\x6c\xc5\xdb\xaa\x3a\xbc\xab\x2a\x2d\xd5\xa1\x2c\x91\x72\x3c\x6a\x71\x9a\xf2\x60\x18\x80\x3a\x90\xc3\xc7\x3b\x2b\x3f\xe6\x75\x7b\x37\xf1\xc4\x9f\x33\xaa\x3f\x19\x29\x29\xd2\x75\xaf\x81\x4e\xc6\xce\x80\xbb\xfb\xe0\xf5\xf8\xe4\xde\x28\x0c\x80\x46\x91\xe3\x4f\x07\x91\xd5\x7f\x28\x3f\xa8\xbb\xda\x26\x9e\x28\x3d\xd9\xf3\xaa\x21\xe3\x07\x9f\xe8\xdc\x98\x60\xe5\xb3\xa1\x5c\xce\x5d\x89\x55\x0c\x80\xe2\x91\x77\x7d\xe9\x95\x96\xa3\x0c\x9f\xc7\x68\x23\xaf\x47\x86\x3d\x7b\x96\x99\xe7\x51\x56\x56\xde\xc8\x30\xb4\xff\x45\xca\xae\xf0\x4c\xa9\x4a\xb1\x17\x80\x92\x91\x9d\x87\x4a\x97\xb9\x1b\xf1\x45\xcb\xc7\xe9\xd4\xe2\xde\xee\x53\x39\xf2\xc5\xf6\x54\xf1\xe9\xdf\x1c\x5b\x92\xca\xa6\xe3\xa7\x96\x8d\xfc\x4a\x00\x54\x87\xcc\x2b\x9d\x9d\x5f\x1d\xce\xbf\xe7\xda\xd5\x6c\xb2\x7a\x55\x3b\xfe\x69\x36\x56\x64\x6c\xf9\xd8\xb1\xdd\x7c\x85\x1f\x66\xa5\xcd\x37\x45\x36\x00\xd4\x8f\x6c\x54\xe8\xcf\xdc\x26\x8d\x57\x25\xd4\x93\x57\xad\x92\x69\x7e\x55\x6e\x18\x3d\x1b\x99\x2b\x73\x4b\xdc\x2e\xe9\xb7\xc9\xcd\x10\x7d\xae\x31\x00\xa0\x45\xa4\xe7\x74\x58\x66\xca\x46\x3e\x0d\x56\x2a\xa4\xb6\x4b\x0d\xe5\x23\x7b\x1a\x36\xc1\x21\xfe\xd6\x49\x4f\x65\xac\x25\xed\xb3\xdc\xda\x67\x61\x00\xfd\x44\x1e\x55\xc3\x4f\x7a\x75\xfd\x47\x42\xbf\xac\x4e\xf4\x7e\x37\x8c\xdb\x63\xcd\x0b\x63\x6e\x14\x27\xbb\xd9\xf5\xf9\xe1\x14\xef\x41\x0f\x42\x45\x0c\x80\x06\x90\xd6\x1f\xe2\xb9\x7a\xc6\xec\x06\x57\xea\xf1\xaf\xbb\xe6\xb7\xb5\x37\xe5\x86\x8f\x2f\xb8\x1e\x83\x34\xab\x02\xbe\x39\xed\x53\xb2\x65\x40\x36\xc2\x1c\x46\x07\x49\x97\x7e\xe8\x86\x3f\xa1\x11\x4b\x6b\x0b\x92\x79\xe8\xd7\x3e\xf3\x34\x69\xfd\xf9\x3b\x75\x26\x92\x7a\x71\x01\xfa\x18\x0c\x80\xd6\x91\x1f\xfd\xf5\xa7\x54\xf0\x50\xc9\xbb\xc3\x0f\x1b\xf9\xbf\x2b\x9a\xab\xee\xfd\xfc\x74\x97\x48\xd4\xf4\xdc\x3e\x81\x1e\xd7\x13\x74\xb2\xcc\x71\x00\xc8\x6a\x20\x9f\xa3\xd2\x7a\x5f\xa7\x99\xd3\xc9\xdd\x46\xc0\xd8\xc3\x97\xff\x2e\x89\xbe\x94\x85\x49\xe9\x3c\xed\xb9\xdc\xe7\x8c\x47\x99\xdd\x7f\xd5\x02\x08\x20\x4f\xf5\x26\x93\x52\xdf\x0d\x7a\xb7\x7d\x42\xc6\x12\x1a\x3c\x15\x12\xcf\xd2\xb8\xfd\x29\x7b\x49\x64\x53\xd6\xda\x02\xb3\xf6\xfb\x9b\x2b\x7a\x01\x59\x11\xc4\x70\x9e\x9a\x87\x8d\x1b\x8f\x69\x8d\xea\x15\x46\x0e\x7c\x2c\xaa\x4e\xf9\x31\xaa\xfa\x7a\x79\xdf\x60\xc1\x6d\x0a\x92\x19\xc7\xda\xee\x14\x00\x2d\x20\x7d\xc0\xa2\xb0\xe7\x79\xbe\x67\x26\x4d\x0f\x71\xee\xfb\x1f\x12\x90\xd6\xf3\xa1\xc8\x20\xb7\xcc\x96\x97\x18\x0b\x2f\x8e\xe8\x23\x73\x0d\x00\xda\x45\x1e\xaa\xe8\xcd\x39\xad\x5c\x61\xee\xf3\xc1\x8a\x34\x5c\xa9\xd4\x64\x22\x69\x9d\xfe\x97\xd3\x9a\xb8\x23\x18\x9b\x29\x45\xef\x2e\xf4\x84\x01\x20\xab\x83\x18\xee\x74\x9f\x59\xd0\x9d\x89\xe1\x2b\xc8\xf5\x48\x6b\xe0\x3a\x77\xfd\xac\xbc\xb8\xe1\x47\xcd\x53\xfa\x2a\x12\xaf\xf9\xd3\x95\xb5\xa2\x01\x34\x85\xfc\x74\xb2\xb3\x9d\x46\x67\x9c\x76\xb4\x09\x19\x1b\x79\x4b\x39\xa3\x59\xad\x30\x3b\x5d\x13\xb6\xab\x87\xf8\x03\x4b\x4e\xd9\xe5\x38\x1e\x03\x00\xf2\x42\xba\x4c\x92\x9f\xab\x99\x2f\x6f\x9a\xb8\x65\x93\xa0\x56\xef\x1a\xbb\x92\xf3\x44\x93\x8c\x86\x7d\x6b\xd0\x82\x83\xac\x2e\x73\xa9\x5e\x2c\x80\x7a\x91\x85\xe8\x8c\x14\xf5\x1d\x26\x4b\x29\x1a\x89\xfb\x02\xeb\x43\x9a\x93\x7a\xf5\xd7\xaf\xe5\xa5\x09\xfb\x11\x14\x7d\x16\x3d\xcc\x7d\x46\x82\x12\x00\x59\xa4\x35\x86\x5b\x3b\x05\x3c\xe3\x47\x0d\x59\x33\xda\xb6\x85\x4b\x25\x24\xd6\xdc\x6c\x9e\xfe\x36\x53\x18\x90\x81\xb8\xbf\x9b\xf6\xf4\xf9\x01\x28\xf8\xaf\xb6\x3e\x4b\x90\xba\xea\x81\xf8\xf3\x6f\x7f\x46\xde\x9e\x8e\x39\x90\xa8\xf1\x76\x29\xcd\xa0\x5e\xa5\xbe\xdd\x74\xf4\x77\x41\x12\x0b\x0b\x00\x50\x1d\x32\x37\x3d\x07\x35\xc6\x84\x96\xc7\xdf\xcb\x3a\x92\xcf\x9d\x5d\x4e\x62\x49\x17\x94\xfb\xc8\x13\x7d\x86\x75\xb0\xa4\x9c\x38\xab\xff\xb1\x0e\x80\x36\x91\xc9\x40\xbe\xc8\x9e\xf9\xc7\x58\xd8\x78\xd3\x8d\x28\x83\x8b\x02\x21\xbe\x6c\xfb\x3a\x73\x0f\x6b\x33\x1d\xcd\xe7\x95\x27\xf9\x10\x4e\xa3\x89\x01\xb2\x8e\xc8\xdc\x51\xa7\x4d\x7d\xea\xed\x57\x1d\xa5\x42\x42\x79\x76\x61\x53\x82\x23\x5e\xfc\x1c\x66\xb2\x55\x14\x52\xda\xcb\x6b\x54\xcd\xd4\xba\x18\x00\xa5\x23\xbd\x4c\xe0\x92\xb0\x01\x85\xc7\xd1\xe9\x80\xaf\x6d\x24\x3a\xae\xdf\x43\x8c\xbf\x6d\x71\x44\xea\xff\xf4\x6a\x59\x72\xae\x8f\x52\x91\x22\x01\x00\x8a\x40\x72\x2e\xa7\x2e\x47\x3b\x51\x84\x75\x5a\x8b\x67\xce\xf8\x4b\x41\xc9\xda\xb3\x47\x36\x48\x6e\x9e\x22\xec\xf9\x75\xc7\xa3\x6d\xed\xd0\xd4\x23\x00\x15\x23\x37\xc7\x25\x22\x66\x47\xd5\xad\x91\xc2\xf5\xd6\xc2\xc2\xf4\xb7\x30\xf2\x67\x03\x9b\xe5\x0b\x83\x03\xfb\xb9\x2d\xb2\xc8\x63\x6a\xe2\x21\x00\x64\x0f\x21\xbf\x04\x30\x7c\x6a\xca\xd5\x50\xa0\xec\x19\x13\xe7\x29\xf4\xbc\xda\xb5\x93\x47\xf8\x58\x6e\xc5\x87\x7a\xf9\xf9\xb0\xd4\x8d\x3b\xf5\x2d\x00\x0a\x44\xe6\x82\xfa\xa4\x62\x41\xe2\xf3\x23\xf1\x6a\xe7\x0e\x3d\x5f\xb5\xfb\xa6\x77\x96\x92\xc5\xbf\xc2\x3e\xaf\x39\x8f\x25\xaf\xa1\xa1\xec\x00\x39\x00\x50\x00\x72\xb1\xfe\x4d\x6c\x15\x49\x2e\xe7\x6d\x57\x4e\xbe\xef\xb9\x51\x74\x7a\x38\x99\x72\x94\xdc\x58\xe6\x47\x9d\xcd\xd9\x0f\x15\xac\xf4\x39\xd7\x00\xb4\x8a\x8c\x91\xc2\x2b\xe7\xec\x69\x8f\x1e\x52\x1c\x17\x96\x16\x18\x93\x14\x8e\x72\xb2\x74\xbb\x9c\x98\x6a\xb3\x52\xbd\xee\x21\x76\x7a\xa2\xb5\x04\x31\x94\x28\x88\x8b\x80\xb5\x57\x29\xc1\x5a\xfa\x6e\x01\x23\x71\xa0\xed\x68\xd1\xb0\xd5\x8e\xeb\x9c\x2e\x5f\x42\xe2\xc3\xc6\x88\xb2\x49\x00\xa0\x79\xe4\x47\xbb\x25\x1f\x0b\x72\x11\x34\x63\xe0\xbb\xa1\xc9\xa0\x93\xf7\x96\x3c\xc6\xab\x80\x03\x43\xab\x72\x22\x89\xa8\x2a\x75\x81\xc7\x47\x11\x40\xbb\x48\x27\x70\xaf\x61\x27\x29\x26\x38\x20\xad\xbd\xaf\x65\xcf\x7b\xf1\xe0\xc3\xe2\xf8\x1b\xaf\xe8\x9e\x2e\x39\x44\x3d\x8a\x9e\xa6\x94\xf3\xe8\xc6\x00\xe8\x07\x72\xa1\x07\x9a\x16\xa6\x6a\x53\xbe\xb8\xbf\x2e\xf7\x7d\xa5\x69\xde\xa9\x5a\x38\xd8\xfa\xe6\xd6\xb5\xe5\xc5\xf0\xb0\xd2\x04\x5a\xc1\x7a\x16\xc4\x50\xa1\x1e\x3e\x86\x89\xfb\x7e\x6c\xc2\xe5\x92\x3d\x16\x09\xb1\xd9\x5a\x09\x76\x39\xd1\x65\x5f\x7c\xaf\xde\x36\xd9\x35\x61\xe3\xea\xc4\x00\xc8\x13\x79\xa2\x98\x03\x0e\x0c\x60\x7b\xd5\xdb\xc1\xec\x3b\xc7\xc1\xed\xb8\xf9\xf3\xfb\x26\x8e\x07\xec\x31\xde\x69\xf8\x75\xdf\x90\xb2\x95\x3b\x1a\x03\xa0\x5e\xe4\xf8\x86\x2e\x37\x45\x0a\x88\x42\x58\x8c\x58\x71\x31\x4f\xa2\xc0\x3f\x8a\xb5\xd3\xb4\x4e\x9b\x68\xee\x38\xbf\xd5\x50\x5b\xe4\xcb\x48\xa1\x7f\xc5\x0d\x22\xec\xb5\x05\x26\x34\x34\xe2\xc0\x2b\xda\x61\x0a\x44\x67\x0e\xac\xa2\x01\x86\x77\x74\xec\xc0\x2a\x7a\x61\xa6\x43\x23\x0f\xbc\x62\x0e\x5e\x07\x3a\x7b\x60\x15\x01\xa4\x70\x07\x03\x15\x3f\xb0\x8a\x02\xd8\x2a\x34\x02\xc1\x2b\x3a\x60\x05\x1a\x83\xe0\x15\xa3\xb0\x02\x8d\x42\xf0\x8a\x78\xf8\x32\x85\xce\x21\x58\x45\x32\x7c\xc5\x43\x47\x11\xac\xa2\x0e\x26\x66\x54\x1a\xc1\x29\xfa\xe1\x4b\x21\x3a\x8f\x60\x15\x8b\xb0\x5f\xa1\x21\x09\x5e\xf1\x13\x3e\x41\x34\x28\xc1\x2b\x06\x0e\xc0\x7f\xb7\x86\x06\x27\x40\x9e\x8a\xc4\xfb\xff\x4f\x4d\x65\x20\x19\xa5\x80\x51\xe6\xe3\xaf\xc7\x2d\x15\x42\x19\x93\xbc\xc9\xf5\x5e\x06\xa7\x84\x0e\x88\x53\x48\x79\xa6\x4c\x6e\x2e\x66\x0f\xf6\x37\x3d\xc1\x00\xe8\x39\x32\xa5\x86\x1e\x27\x37\x13\xf7\x14\x32\x9f\x0a\x9b\xed\xf8\xe4\xe5\x46\x2c\x10\x93\xa2\xf7\xb8\x9a\x9d\x4d\xdf\xf2\x11\xcd\x39\xba\xd6\x42\x0c\x90\xa5\x46\x0c\xff\x29\x21\x9c\xb3\x3e\xa5\x69\x10\x79\xd7\xed\xc8\xa4\xf5\xcf\xb7\x16\x9c\x5a\x12\x65\x07\x07\xef\x2c\x2c\x93\x5d\xcd\x7f\x22\xd3\x8c\x01\x50\x16\xb2\x7c\x08\xb6\xb9\x04\xf0\x7a\x6a\x3d\x4c\xdf\x3a\x77\xed\x2a\xdd\xc5\xe1\xe6\xfd\x97\xd2\x3d\xdb\x3f\x55\xe8\xf1\xa8\x34\x7e\x9d\x3f\x5c\x23\xf4\x6f\x56\xe3\xf7\x27\x03\x3e\x67\x34\xbb\xf1\x8a\xe7\xf0\xf3\x31\x68\xa6\xe3\x14\xb2\xd4\xf8\x29\xd0\x6c\xc7\x4f\x91\x05\x77\x3d\x50\x01\x11\xa7\x58\xff\xef\x8d\xaa\xa8\x8c\x88\x35\x4a\x03\x3f\x05\x1a\x25\xe2\xa7\x00\xf0\xef\xf4\xd0\x41\x11\x3b\x85\x08\x7e\x0a\x74\x54\xc4\x4e\xb1\x00\x87\x29\x2a\x2d\xe2\x14\xbb\xf0\x53\x87\xe8\xc0\x88\x35\x4a\x07\x3f\x05\x2a\x32\xe2\xa6\x98\x82\xe3\x1a\x1d\x1a\xb1\x0a\x2f\x38\xae\x51\xb9\x11\x9f\xfd\xe1\x47\xe5\xd0\xd1\x11\xbb\x0c\xd8\x28\x54\x78\xc4\x4d\x11\x0c\x2b\xd0\xf1\x11\x97\x02\xe1\x02\x83\x46\x90\x78\xc5\x26\xfc\x60\x3d\x1a\x44\xe2\x97\xe1\x88\x9f\x02\x95\x22\x71\x53\xa4\xc3\xb9\x1f\x9d\x23\xb1\x8a\x08\x38\x98\x50\x51\x12\xa7\x28\x86\x9d\x0a\x9d\x26\xb1\xcb\x38\x04\xb7\xaf\xd1\x78\x12\x37\x45\x20\x9c\xc8\xd1\x89\x12\x57\xbc\xe1\x85\xa3\x41\x25\x5e\xb1\xba\x0f\xfe\xc7\x40\x54\xb8\x84\x0e\xf8\x7b\x01\x20\x7b\x16\x91\x68\x9f\x29\x7c\x97\x25\x2f\xea\x53\xa0\xd2\x99\x24\x65\x15\x25\x59\x78\x87\x69\x7e\x3f\x97\x6c\x66\xd4\xb4\xcf\xe0\x4d\x97\x7c\x65\x05\x80\x9e\xff\xf5\xec\x7b\x0e\x97\xe7\x32\xc3\xd5\x3d\xc3\x73\xd9\x29\x6a\x0f\x36\x96\x8a\x09\x4a\x9e\x8a\x39\xdf\x5a\xa7\x6a\x3d\xeb\x22\x9c\x45\x71\x14\x03\xa0\x65\xe4\x25\x26\xa4\xf3\x67\x38\x69\xcf\xea\xbb\x65\xe1\x0b\xaf\x02\xa4\x5b\x3c\xdf\xad\xd4\x8a\xdc\xd8\x92\x8a\x62\x68\xa1\x94\xf1\x96\x7c\xb9\xfc\x27\xd3\x22\x81\x54\xa9\xcf\x8e\xd6\xd2\x65\x54\xc7\xce\xca\xbd\x6e\xf5\xd7\x51\xc7\xa5\x6e\xca\x18\x23\xf6\xba\x03\x8d\x11\xce\xea\x56\xfa\x6c\xbe\x82\xff\x6a\x35\xf6\xc4\xce\xc2\xbb\x89\x62\x37\x9c\xf6\xe1\xa0\x46\xb3\x1c\xaf\x58\x86\xe3\x07\xcd\x76\x78\x0e\xf8\x8c\xd1\xe9\x1e\xab\x98\x87\x33\x26\x1a\xe0\xc3\x19\x13\xc6\x2d\x34\xc4\xc7\x2b\x7e\x90\x6f\xfc\x26\xfa\x37\xd4\x07\xf2\x47\xa9\x20\x59\x3f\x0c\x80\x5e\xff\xf5\x2f\xf4\x5c\x59\x32\xd6\x49\xce\x9c\x5a\x44\x1b\x33\xf9\x16\xe7\x1a\xbd\xd3\xf6\x75\xdb\xf7\x50\x52\x9c\x96\xd3\x3b\x15\xce\x2a\x67\x83\x01\x50\x22\x12\x21\xee\x12\x37\x11\xaf\xd6\xb2\x07\x5c\x1a\x09\x5c\xd8\x7f\x7a\x2f\x6f\xcd\xc2\xc0\x95\x32\xbc\x7b\x37\xac\x4e\xe5\x81\x76\x74\x07\x39\x06\x40\xf9\xc8\x1b\x82\x54\xfd\xa4\x05\xfd\x59\x09\xdd\x41\x11\x56\xfa\x38\xe2\x99\x47\x87\x88\x3c\xab\x6e\x2f\x7e\xf9\xfe\x12\x9c\x98\x0c\xe6\x14\xeb\xfa\x93\xfe\x90\x5f\xcd\xc4\xed\x7b\xbc\x9c\x42\x65\x2b\x2b\xbf\x19\x2c\xc5\xf3\xa6\xff\x0d\x43\x5e\x24\x5f\x50\xd3\x12\x53\xa0\xb7\x96\xe7\xac\xba\xf1\x2e\x06\x40\x21\x48\xdf\xf6\x3c\x18\x68\x4e\x10\x70\x72\x54\x59\xee\xc9\xac\xfc\xb1\xc2\x66\x3b\x59\x9a\xb9\xcf\x72\xd7\xe5\xb6\x14\x6b\xab\xcf\x05\xa6\x14\xfc\xd9\x56\x64\x6b\x52\xe7\x63\xad\xdc\x8f\x2a\xaa\xe3\x56\xd5\x84\x9a\x9b\x8c\x23\x32\x26\x8f\xb6\xae\xaf\x48\x69\x9c\x24\xc9\xee\x3a\x11\xdd\xd3\x6b\x88\x01\x10\x06\x89\x58\x1e\x26\x11\x3f\x40\x64\x88\xe5\x98\xf3\x5d\x52\x46\x53\xc7\xc1\xeb\xc7\x86\xda\x18\x3e\x8b\x8a\x87\x6b\x9d\xd4\x7e\x72\x39\xe6\x9b\xd0\xbf\x6d\x23\xfe\xc0\x5e\xc3\x4e\x81\xb6\x91\x78\x45\x22\x9c\x8e\xd0\xb6\x12\xaf\xc8\x87\xcb\x09\xda\x66\xc2\x05\x08\xfe\xf2\x07\x6d\x3b\xf1\x8a\x10\x38\xe4\xd0\x36\x14\x76\x6e\xf8\xde\x85\xb6\xa5\x78\x05\x06\xe6\x3f\xb4\x6b\x29\x5e\xe1\x09\xaf\x1c\xed\x62\x0a\x57\x77\xc2\x8d\x7e\x4a\xac\x24\x81\x81\xe2\x70\x65\xc1\xab\x2d\xd2\xe1\x86\xef\x3d\x91\xdc\x76\x94\x27\x32\x97\x54\xbe\x74\x7c\x8e\xed\xcc\xe7\x27\x4c\xa3\x35\x03\xf2\x7b\x0f\x04\x3c\xfe\xff\x22\x98\x30\xa4\x47\x19\x5e\x2d\x10\xf4\x36\xa6\x71\x06\x53\x6d\x4e\x2c\x41\x5c\x3f\xbb\xeb\x92\x44\x0e\x32\xf8\x9d\x59\xa6\x7b\x6a\xf3\x41\x38\x3b\x1f\x00\xc8\x0b\x99\x5d\xf9\xed\xeb\x4b\x1a\x7c\x45\xe6\x1e\x94\xd4\xf4\xb3\x76\xbc\x3a\x00\xcd\x4c\xe6\x0d\x5f\x91\x4e\xcf\xce\x68\xe9\x94\xe2\xa9\xba\x07\xa0\x89\xbf\x5e\x4b\x37\x0b\x39\x7c\xd2\x3d\x9b\x50\xff\xb0\x9b\xd8\xfa\x66\x73\x49\xe4\xd6\xb1\xfc\xaa\x0e\x92\xe4\x8a\xea\xe5\x0f\xd4\x5e\x47\x5d\xff\x1c\x38\xd2\x9c\x3b\x34\x2f\x36\x43\x6a\xa4\x86\x77\x36\x0b\x78\xe3\xa5\xdb\x8d\x24\xc4\x62\x63\x5c\xe7\x30\x76\x02\xbf\x6f\xe6\x7e\xe6\x3d\xc4\x8f\x01\xb2\x4e\x88\xe1\xe2\x02\x56\x09\x27\x0d\xe5\xce\xc4\x8f\xb8\x72\x1b\x98\x3d\x6f\xdb\x2c\x2b\x8b\x51\xc1\x1c\xbf\x64\xba\xad\x5b\x13\xc8\x63\x29\x08\x00\x94\xf4\xd7\xff\xcf\xa5\x67\xcc\x4b\x8b\x0e\x44\x0a\xaa\x59\x17\x2e\x5f\x67\x5e\x48\xb1\x28\x72\xab\x77\x7e\xb3\xcd\xcb\xa1\x30\x4b\x73\x3c\xc8\x0f\x40\x73\xc8\xde\xc6\xdd\xbc\xb0\x99\xaf\x26\x73\x24\xf3\xf9\x22\xa6\x1e\xdb\x23\xfa\x93\xb7\x5d\xae\x96\x50\xb7\x5f\x25\x25\x60\x32\x56\xa1\xeb\xe1\xc2\x00\x28\x14\x39\x3e\x6b\x6e\x9c\xe6\xc4\x17\xce\x0b\x5a\x1a\x9c\x55\xa7\x54\xf3\x0f\x66\x33\x79\x3e\x20\xd2\x56\xe2\xa2\xe2\xd7\x77\x57\xcf\x76\x2b\x00\x00\x2a\x43\xa6\x97\x21\x5e\x8c\x5a\xa6\x35\x75\x2c\xd9\x39\x91\x11\x69\x5f\x8a\x17\x4d\x91\x77\x36\x08\x4d\x5b\x8a\xcc\x33\xce\xf9\x54\x27\x98\xbd\x01\xd0\x37\x64\x34\x27\x45\x26\xe9\x7a\x0f\xbf\xf5\x7b\x17\x76\x21\xb9\x4e\xf5\xa0\x52\x37\x73\x55\x99\x21\x8f\x71\xba\xa3\xa7\xfc\x40\xc1\xdd\xcb\xfc\x00\x40\xed\xc8\xe6\xe2\x95\xb9\x57\x37\x88\x62\x05\x7b\x3e\xce\xa4\xdd\x32\xa5\x09\x9b\xbf\xfe\x88\x91\xa0\x82\x52\x9c\x4b\x27\x6c\xf8\x4c\x49\x6e\x25\x3b\x80\xb6\x91\xc9\xf4\x68\xea\x9b\xbb\x83\x86\xc5\xbf\x8b\xcf\x38\xa6\x76\x57\xd9\xe9\x6b\x70\xa8\x9c\x75\x22\x09\x08\x4a\xa1\xb9\xa5\x14\xb8\x2a\x50\x86\x01\xd0\x13\x64\x32\x6d\x56\x59\x38\xc0\x2e\x69\x59\x16\xf3\xa5\xc7\x3e\x8b\x88\xab\x33\x61\x9c\x23\x97\x34\x4c\x6b\xe7\xfc\x71\x65\x8e\x7b\x3e\xd4\xed\x18\x00\xf9\x23\x2f\x58\x22\x1f\x27\x4e\xcc\xd5\xe4\xda\x9b\x2a\x2d\x58\x89\x39\x8e\x6a\xe8\x30\x6e\x72\xa4\x14\x4a\x52\x7f\x20\x31\xfa\x6d\xc5\x6a\xca\x8b\x18\x3a\x58\x24\xda\x50\x4d\x7b\x9c\xed\x9c\xd0\xe5\x0b\xbd\x7d\x52\x95\x57\xea\x1f\x4a\x29\xf8\x79\xe7\x7d\x3d\x44\xc5\xf8\x84\x20\x1e\xf9\x7c\xeb\x27\x6f\xfe\xc8\xfc\x19\xe7\x5d\x86\x3d\x91\x7b\x2f\x1c\xdd\x13\x8f\x09\x9b\x9b\xd6\x11\x5b\xf5\xe5\x24\x99\x8b\xf1\xb4\x8e\x0d\xfd\xa9\x65\x48\x0f\x5b\xe1\xea\x76\x94\x0a\x7e\x9c\xf7\x5c\xf2\x45\xba\x3f\xe5\x35\xd1\x7d\x67\xe9\x5c\x8f\xae\x0e\x76\x50\x1d\xec\x6f\xcb\x88\x2a\x94\x02\x00\x0a\x45\x6e\xa2\x86\x7a\x35\xbb\x10\x6f\xec\xc9\x56\xde\xb7\x7d\x1d\xca\x14\xa1\x0e\xcf\x9b\x79\x27\xcc\x03\x88\x69\x43\x78\xbf\xdf\x1e\xe9\x51\x00\xd0\x16\x72\x53\xda\x85\xde\x71\xed\xbf\xa0\xcf\x79\x50\x55\xe0\x01\x9d\xcc\x45\xab\x84\xe7\x1e\xd7\x7b\x78\x7b\xba\x9c\xaf\x65\x15\x61\x9a\x88\x9f\xfc\xf1\xc8\xbf\xde\x5e\xf2\x35\x26\x78\x2f\x5f\x2d\xab\xda\x24\xef\xde\x6c\x49\xdb\xfc\xc2\x9a\xe0\xe9\xe2\x73\xdf\x83\x6e\xb8\x5d\x7b\xda\x5c\xcc\x22\x0f\xa0\x7c\xe4\xc7\x4b\x3d\xbb\x47\xaa\x3d\xc6\x51\xd7\x3c\x3b\x79\xe6\x8c\xe0\x58\xdd\x10\x25\x73\x84\xf3\x05\xbb\xa3\xa0\xfb\xb1\xe5\x31\xd3\x9b\xfd\x00\xc8\xca\x22\x86\xdb\x88\xbe\xcf\x74\xf8\xfa\xf6\xea\xe6\xf7\x16\xa3\xe7\xaf\x77\x2a\x2e\xa9\x0d\xb7\x3b\xae\xf7\xd1\xa6\x2f\x4c\x4f\xd6\x1e\x83\xb2\x01\x54\x8c\x74\x30\xe9\x07\x1f\xb5\xc3\xc1\x0d\xc5\xe3\x1a\x95\x82\x94\x65\x5d\x94\x64\x84\xe2\xcc\xf5\x9e\x1d\x27\xe2\xaf\x65\x1e\x6a\x3b\xde\x15\x0b\x00\x54\x81\x1c\x9f\x7e\xca\x54\xf7\xf3\x4a\x73\x02\x59\x0b\xf5\x28\x1d\xd3\xf0\x5c\xcd\x54\x55\x28\x4f\x88\x2f\xe4\x1e\xc4\x92\xe2\x7b\x20\x21\x09\x40\x4d\x7f\xfd\xcc\x5f\x71\x3d\x45\xfe\x6a\xc7\x81\x1f\xba\x22\x34\x4b\x42\xea\xd5\xcf\xe8\x3c\xab\x8e\x79\x78\xd1\x0c\x5d\xa7\x1c\x76\x62\x13\x7b\x05\x00\xf4\x0c\x19\x4e\xc7\x2c\x3b\xa6\xb5\xfd\x7f\xcd\x4f\xad\x34\x5b\x34\x74\x32\xb7\x12\xec\x9a\xdd\xb8\xd2\x28\xe9\x11\x66\xe3\xb6\x8f\x6e\x6d\x8d\x14\x40\xcd\xc8\xe0\x36\xf4\xc0\x34\x10\x6f\x75\x7d\xe6\xb6\xe1\x7f\xa5\x6d\x5b\x45\xd0\x35\xec\xc9\xd6\x2c\x2f\x2b\x9a\x9e\xfd\x88\xcf\xdb\x2c\xfc\x03\x06\x40\xd9\xc8\xad\xe7\xba\xef\x92\x85\xe9\x38\x63\x72\x3b\xa9\x5e\x7f\xe3\x55\x67\x40\xda\x61\x32\xce\x8e\xce\x8a\x64\xba\x39\xa8\xdd\xa4\x40\x64\xf2\xcf\xbd\x11\x69\xfe\x4f\xf7\xa0\x5f\x5e\xc1\xfc\x2e\xd1\xaf\x2e\x4c\x44\x48\xa8\xc5\xb0\x6d\x39\x05\x5f\xb1\xfe\x62\x6a\x1b\xdc\x90\x94\xfa\xb9\xd6\x0b\x00\xc8\x1f\x09\x03\xbc\xd4\x35\xf3\x77\x0b\xc8\x3a\x0b\x35\x5f\xd2\x6f\x72\x25\x2a\xa8\xa8\x7d\x25\xbc\x19\xc0\x35\x29\x37\x56\x15\x2f\xee\x1f\xd5\x0f\xa0\x35\x64\x66\x65\x68\x3a\xd1\x4b\xd8\xf0\x85\xd9\xe3\x7a\x62\xbf\x72\xf6\xe3\xc7\xd7\x4f\x05\x37\x41\xea\x6f\x74\x8a\xb5\x29\x2d\x06\x7f\x33\xa5\x63\x00\x54\x8b\x5c\x2e\xcb\x2a\xd9\x98\xa4\xa2\x89\xb7\xeb\x87\x95\x94\x05\x4f\x35\xbb\x04\xae\x71\x3e\x8f\xd9\xdd\xb3\xd9\x05\xc3\x31\x0f\x02\x0f\x7c\x03\x00\xea\x42\x86\xdf\xad\xc7\xb6\xf4\xc9\xfb\x05\x8b\x69\x13\x2f\x30\x1f\x77\xb3\x35\x22\xa7\xb7\xe0\xcf\x77\x2f\xde\xbe\x28\x1a\x5c\xab\x5b\x4b\x7d\x1d\x40\x23\x48\x73\x92\x1e\x1e\x25\x0a\x1f\xdc\xbb\xce\x4a\xdb\xd4\x95\xcb\x38\xe2\x6e\x1c\xd5\x15\xab\x3e\x55\xff\x7b\xa1\x9c\xbc\x91\xfe\xfa\x61\x62\x00\xa0\x01\xe4\xee\x30\x30\x79\x9d\x34\x72\xcd\x36\xcc\xd0\x50\x18\x7b\xfd\xdd\x40\x27\x79\xd0\x5f\xd3\x88\x90\x86\xd3\xeb\xba\xba\x51\x35\xa1\x4f\x26\x80\x96\x91\x9b\x1f\x67\xd0\x36\xda\xee\xb4\xe8\xfd\x75\xb8\x86\xd5\xc6\x78\x6a\xf0\x8c\xae\xf4\xa4\xd6\xac\x60\xff\x4a\x25\x65\xaf\xe0\xf5\x1a\x56\xa1\x7f\x2c\x4f\x10\xc9\xff\x2b\x61\x18\x5c\x9f\xd1\x0b\x14\x56\xe1\x05\x43\x34\x5a\x8d\xc2\x2b\x26\x60\x6a\x40\xab\x52\x78\x45\xfe\x7f\xbf\x5c\x46\x2b\x54\x58\x85\xac\x13\xdc\x44\x40\xad\x54\xd8\x29\x92\x60\xa3\xd0\x8a\x15\x5e\x31\x07\x73\x3a\x6a\xb9\xc2\x29\x42\x61\x05\x7a\xc1\xc2\x2a\xca\xfe\x6b\x6d\xa0\xd5\x2c\x9c\xe2\x1b\x8c\x4b\xe8\x55\x0b\xab\x68\x87\x1f\x6f\x40\x2b\x5c\x78\xc5\x36\x8c\xaf\x68\xa5\x0b\xaf\x78\x02\xe3\x2b\x5a\xf1\xc2\x2b\xfc\x89\xe1\x3b\x0d\x5a\x11\x03\xf2\xcf\xd9\x3c\x0f\xfc\xb9\xd3\x74\x23\x93\x6a\xb3\xf3\x95\x49\x9f\xfc\x2a\xc0\xc0\xff\xa6\xaa\xeb\x49\x7f\x37\xe7\xed\x0d\x26\x83\x79\x13\x95\xde\xd8\x7a\xe5\xd4\x37\x8d\xa7\xfe\xa4\x25\x24\x44\xf0\xbf\xef\xd3\xfc\xe4\x23\x11\x75\xd8\x3f\x93\xde\xf6\x71\x8c\xf5\x68\x95\xb6\x5a\x00\x28\x7e\xce\xa7\xf0\x23\x24\x4e\xfb\x5c\xfd\x9f\x23\x47\xe6\x01\x66\xe3\x99\x86\x63\x77\x62\xc4\x6e\x7c\x7c\xdf\x2b\x78\xad\x9d\xb9\x77\x4c\xdc\x54\x44\x5a\x02\x64\x38\x3f\xb8\xf8\x7c\xc3\x7c\x05\x03\xa0\x72\x64\x60\x17\xa8\x4b\xbb\x49\x73\x7d\x95\x3f\xaf\x7c\x65\x8b\xd9\x63\x9e\xe3\xa9\x13\x65\xfd\x7d\x8a\xeb\xa1\xfd\x91\x34\xdf\x5a\x76\x27\xa3\x31\x00\xea\x41\x16\x58\x23\xef\x97\x73\xa2\xa9\x8e\x2b\x4a\x7e\x83\x19\x3f\x66\x1e\xba\x77\x3f\x34\x1e\x22\x21\xe3\xee\xa8\x0d\x4f\xf4\x78\xed\xf4\xec\x36\x06\x40\x55\xc8\xf5\x56\x46\x3c\xa2\x3a\xdf\x38\x1a\x72\x9f\x7a\x8d\xc5\xa9\xc0\xfc\xd8\xdb\xbb\xbf\xac\x09\x48\xbb\xb5\x0a\xa7\x9d\xa5\x29\xde\x25\x9e\xc3\x00\x68\x03\x99\x98\xe4\x6e\xef\x7e\x2f\x4e\x99\xa1\x3e\xa7\x40\x2d\xd5\x21\xc8\xe5\x39\x7b\xa7\xda\xa8\xb4\x48\x8d\xd9\x41\xba\x87\xb3\x40\xd1\x73\x4d\xe8\xdf\xb6\x11\x7f\x60\xdd\xb0\xe3\xa1\x6d\x24\x5e\xb1\x00\x3b\x37\xda\x56\xc2\x21\x07\x77\x8a\xd0\x36\x13\xaf\x28\x87\x1d\x0f\x6d\x3b\xf1\x8a\x1e\x38\x03\xa2\x6d\x28\x5e\x51\x05\xaf\x1c\x6d\x4b\xf1\x8a\x8d\xff\xde\x15\x8a\x86\x5d\x40\x5e\x90\x00\x60\x7f\x29\x8d\x74\xd6\x70\xb1\xcc\x9e\x39\x75\xfb\xbc\xd2\xe9\xa0\xb0\x45\xce\xed\xe3\x63\x06\xf1\x06\xa1\x9c\x39\xb5\x0f\xf9\x8d\xc4\x63\xfa\x22\xe4\xff\x44\x10\x12\x01\x6a\x55\xe7\x75\x4f\xf1\x46\x4a\xa8\xaf\x81\xe5\xad\xc3\x9a\xf4\xa0\x5e\x2b\x7a\xe8\x49\xf3\xa3\x44\xc8\xd2\xde\x82\x2d\x4a\x0c\x03\xa0\x29\xa4\x73\x78\x61\xea\xfb\x07\x1f\x27\x6c\x1d\xbc\x6a\xd4\x3d\xf7\xfd\x84\x18\x79\xec\xe0\x6a\x4e\xcd\x59\xdb\x72\x4a\x81\x52\x87\x7e\xfe\x3f\xf7\x8d\x41\x64\xf3\xa7\xf6\x64\x65\x0d\xd5\xf3\x72\xef\x6b\x8e\x8d\xe1\xcb\x96\x04\xfb\xd3\x4c\x26\xab\x28\x13\xdc\x8c\xec\x35\x3e\xb8\x40\x01\x54\xfb\x84\xfe\xcd\x6c\xfc\x06\x35\xc0\xae\x81\x66\x38\x9c\x2f\xe0\xdc\x8a\x66\x3a\x5e\x31\x05\x17\x2e\x34\xe3\xf1\x8a\x41\xb8\xfb\x83\x0a\xbf\x38\xc5\x3c\xec\x4c\xe8\xf8\x8b\xab\x11\x70\x36\x46\x25\x60\x9c\x62\x0b\x76\x71\x74\x06\xc6\xd5\x3a\x78\x0e\x54\x0c\xc6\x17\x60\xf8\x2b\x15\x74\x12\xc6\x16\x60\x59\xf8\x3b\x43\x34\x16\xc6\x4d\x51\xfc\xdf\x0f\x28\x50\x69\x18\xab\xa8\x80\x15\xa8\x40\x8c\x53\x34\xc1\x5b\x85\x8e\xc4\x58\xc5\x33\xd8\xad\xd0\xa8\x18\xaf\x68\x86\x41\x02\x8d\x8b\xf1\x8a\x6c\xf8\x38\x50\xc9\x18\x9f\x39\xe1\x75\xa0\xb3\x31\x2e\x3c\xe0\xde\x0e\x1a\x1e\xe3\x15\x6b\x70\x78\xa0\x02\x32\x4e\x51\x0b\xaf\x1c\x1d\x91\xb1\x8a\x2e\x38\x9f\xa3\x52\x32\x4e\x31\x02\x5b\x85\xce\xc9\x58\xc5\x00\xbc\x57\x68\xa8\x8c\x57\x2c\x93\x6d\x0c\xe1\x9e\xac\x3c\x33\xb8\xab\x99\x75\x7a\xf4\x84\xfc\x49\x52\xfb\x68\x26\x55\x16\xc2\xde\xaf\xf6\x4c\x51\x57\xcf\xf1\x84\x54\xf6\xb2\x2f\x2c\x1e\x07\xf2\x35\x3f\xf7\x96\xa3\x8f\x03\x00\x3d\x41\xa6\xcf\xab\x27\x09\x9e\xe4\x09\xde\x52\xe2\x28\xd9\xb5\x3d\xfd\x32\xf8\x8d\x47\x7c\x8c\xda\xfa\xe6\x5c\xc5\x09\xdb\x85\x1b\xd3\xef\x9e\x87\x00\x28\x02\x79\x05\xa9\xf9\xf8\x9c\x27\xf3\x67\x3e\x0d\xef\xa9\x3c\x15\xcc\xe8\xc1\x9a\x73\x5f\x4d\xba\x20\x6f\x2b\xfd\xe3\x3e\xba\xd1\xbf\x43\xf9\xab\xfe\x10\x14\x32\xdb\xe6\x04\x3d\xdd\xda\x68\xb3\x88\x0e\xe9\x88\x9c\xa3\x4e\x8d\x6a\x21\xeb\xb6\xc7\xa8\x87\x85\x5e\x38\x1b\x2c\x7c\x81\x4f\x29\xc1\x0a\x03\xa0\x55\x24\x7a\x10\x9d\x14\xee\x53\xd8\x17\xd1\x6e\x56\xa4\xc5\x31\x79\xe1\xb2\xb1\x98\xe1\x9d\x58\x99\x8e\xb5\x83\x2f\x2f\x19\x39\xec\xd9\x9b\xf2\x02\x20\xcb\x88\x7c\xd0\x53\xbb\xd8\xe3\x87\x7d\x2f\x26\xf1\xc8\x8c\xfb\xc0\x6a\x4e\x4a\x4f\xd9\xbe\xe5\xea\x02\xd1\x70\x39\xdf\x35\xef\x4f\x22\x8d\x14\x00\x1a\x46\x82\xd0\xd9\x9b\xad\x7d\x8a\x09\x8b\x42\xd7\x0f\xd1\xcd\xd3\xcb\xf1\x76\xa6\x16\x4c\x1f\x35\xd4\x1a\xa9\xa6\x31\x98\xc6\x28\xa5\x6a\xd5\x61\x80\xac\x2b\x62\xb8\xe4\xa4\x11\xed\x76\xb8\x28\x5d\x59\x17\xdf\xa1\xb7\xf5\xd9\xe3\x92\x17\xad\x3f\x3f\xa7\x3d\xd4\xcd\x41\x3e\xd5\x52\x26\xae\x19\x0a\x00\xe4\x87\x6c\xa7\x98\x6d\xff\xce\xd0\xfb\xe8\xe7\x2f\xce\xa5\x92\x56\x38\x6a\x31\x49\x9a\x76\xc7\xc3\x5e\x8c\x8f\x44\xce\xb9\xeb\x71\xfe\xba\xab\x02\x80\x2a\x91\xd6\x4c\x39\xde\xee\xb0\x82\x72\x89\x07\xaa\x25\x3f\xda\x6e\x33\x6c\x86\xb9\x3a\x1c\x50\x23\x4f\x14\x5d\x1c\x62\x2b\x8a\x65\x6a\x2c\xc0\x00\xa8\x0e\xb9\x37\x9b\xfd\xd9\xa1\x41\xba\x29\xbf\x1c\x9d\x49\x83\x2f\xd7\x3e\x9c\x7e\xd5\xa9\xb9\xd5\x91\xcd\x25\xbf\xf9\x6d\x6a\x25\x65\xed\x4d\x16\x62\xe8\xb9\x96\x81\x3b\xba\xd6\x6b\x7d\x3a\xe4\x57\x43\x14\xcc\xa8\x3d\x8d\x64\x35\xbd\xca\x67\x02\x7f\xe6\x55\xae\x05\x9e\x9e\xcc\xfb\xfc\xe7\x36\xf4\xd7\x5f\x4a\x1e\x1c\x8a\x4c\x23\x14\xd6\x79\xc8\xa0\xa3\x22\xbb\x78\x42\x3b\xaa\xef\xd7\xa5\x33\x66\x69\xb7\xdb\x5d\xf5\x24\x57\x9e\xca\xc7\x62\x00\x14\x8e\x74\x03\x8d\x5e\xdd\x5e\x8b\xbe\xbc\x7b\x7b\x6a\xe5\x07\xa0\xbc\xc4\xe4\x34\xcf\xcb\x69\xca\x3f\xbf\x1c\x68\xdf\xe9\x62\x1c\x23\x03\xff\x27\x07\xa4\x1b\x70\x6f\xfe\xb6\x58\x7a\x19\x37\x41\xbc\xff\xde\xf7\x81\x14\x9b\xcd\xa6\xc7\x3f\x77\xaa\xd8\xc3\xac\x74\xc3\xfc\xf5\xaa\x7d\x3e\x1f\xfd\x13\x93\xc8\xbb\x22\x9d\xdd\xe1\x12\x3a\xab\x2b\xa4\x0f\x5a\x1d\x46\x54\x0f\x6a\x32\x58\xcb\x4a\x4b\x8f\x9c\xcd\xfd\x59\x7b\xd9\xe8\x20\xe9\x9d\xb0\x17\x5e\x00\x4a\x42\x5e\xbc\x29\xb6\x76\x53\x73\xce\xf9\x65\xb1\xf5\xb1\x77\x9d\x60\xba\xba\x18\xc5\xc3\xc4\xfd\xb9\xa4\x36\x35\x5b\xda\x35\x57\xc0\xea\x46\x24\x80\x3e\x20\x97\x4b\xd8\x1d\x7f\x33\x3b\x3c\x96\x7f\xeb\x13\x77\x87\x4a\xd1\x7b\x28\x69\x47\xd3\x49\xa0\xf2\xe9\x74\xee\xc6\x4d\x97\x53\x8a\x63\xc3\x00\x6a\x45\xf2\xea\x25\x8a\xbc\xd7\x59\x1f\x39\x77\x0e\x19\x84\xd4\xa4\xb7\x3f\x38\x7f\xe5\xe6\x33\x4c\x97\xf4\xae\xbe\x46\xa0\x58\xaa\x9d\x64\xd5\x51\x00\xa0\x5e\xa4\x1f\x2c\x72\xf6\xfa\x3f\x5e\xad\x7a\x79\x43\xc9\xef\xc8\x0b\x7a\x42\xb1\x4c\xee\xea\x63\xaa\xb4\x0f\xd6\x55\xc6\x0d\x19\x23\xdf\x7e\x2c\x01\xd0\x1e\xd2\x0f\x62\xc5\x08\x9b\xc5\xd9\x72\xc6\xe8\xf4\x75\xd5\xe6\xd3\xf4\x8f\xd4\xfb\x28\xae\x09\x2b\x69\x33\x55\x33\x38\xe6\xa8\xb8\x7e\xf6\x06\x00\x2a\x44\x2e\x76\xe4\x99\xf6\x9c\xb9\x75\xd1\xfc\x46\xd8\xf0\xdb\x49\xf3\xd4\x9c\xc7\x19\x67\x0b\x9b\x35\xbf\x79\x75\x9e\x7a\x59\xfa\xb3\x68\x94\x18\x40\x2d\xc8\x8f\xcf\x17\x30\xd7\xdb\xbf\x94\xa5\xc5\x31\xd6\x3d\x42\x1d\x37\xc0\xea\x73\x6a\x79\xfd\xc2\x74\xc5\xc6\xb3\x87\xdf\x6c\xcb\xed\xd4\xbe\x01\x00\x45\xff\xf5\x3a\x93\x17\x63\xfb\xa4\x2d\xde\xf6\x8f\xf3\xd4\x9c\x15\x31\x9d\xbc\x50\xbb\x3e\x46\xc6\x72\x31\xe5\xde\x94\xe7\xb5\xfc\xd9\x62\xd5\x68\x00\x7d\x43\x0e\x0f\x15\x0a\x8d\xfc\x51\xe5\x3c\xdf\x24\x1f\x88\x39\xba\xce\xe8\xc2\xdc\xac\x7e\xff\xf5\xca\xf7\xb5\x95\xcf\xcd\x44\x7c\xb6\xed\x95\x00\xc8\xaa\x23\x86\xbf\x3a\xf5\x3d\xa9\xd6\x3d\xea\xf1\x9c\xf5\xf0\xd7\xfb\x64\x87\xdb\xab\x99\x8d\x8d\x8b\x22\x2f\xce\x78\x32\x9b\x1b\x1b\xe5\x41\x6a\x00\x7a\x83\x4c\x4f\x86\xbb\xa3\x4b\x97\xa6\x74\x99\x4f\xeb\xe8\x02\xa8\xa1\x33\x31\xfe\x58\x6f\x77\xa0\xc8\x8b\xc7\x15\xc5\x9f\x9d\x1c\x25\x8a\xa7\x31\x00\x2a\x45\x5e\x45\x76\xae\x05\x45\x85\x0f\xfd\xe0\xb0\xab\x7f\x59\x67\xd4\x23\xad\xbc\x7d\xc0\x75\x78\xb6\xd0\xd3\xdd\x7b\x0d\x33\xeb\x42\xfd\x4b\xcd\x0b\x40\x99\xc8\xcf\x67\xb5\x3c\x49\x3f\xa0\x25\xa3\x28\x9d\x76\xb6\xd1\x63\xca\xef\x93\x73\x25\x4b\xa6\xa4\xe5\xe0\x5a\x7e\x7a\x8b\xfb\x0d\x22\x05\x00\xa0\x32\x64\x08\xee\xf9\xdf\xcb\x02\xc4\xf2\xca\xd3\x4c\xde\x01\x3a\x2b\x33\x14\x47\x4a\x29\x36\x1a\x5a\x7f\x3d\x4a\x7a\x42\x97\x9b\xa8\xb4\x38\x03\xa0\xf7\x48\xb7\xcf\x7d\x67\x68\x58\x16\x22\xfa\xa9\xf3\x90\x98\x5b\x89\x71\xd6\xa6\xcd\xec\x4c\x10\x6f\xb1\xba\xb9\x67\xcd\x59\x1e\xe7\x55\xe3\x27\x5e\x00\xca\xfe\xeb\xf1\xb4\x36\x6a\x5f\x96\x4b\x9f\x42\xa7\x39\x27\x42\x1d\x8e\x1d\x98\xcd\xdb\x8e\xbd\x6d\x78\x75\x47\xa7\xf1\xaa\xfa\x93\xfc\xd0\x6a\x73\x00\xbd\x47\x2e\x76\x3f\x7b\x45\x09\x85\xb2\xca\xdd\xeb\x3d\x2f\x8f\x46\x18\xd3\xad\x8e\xa6\xa9\x33\x64\xd3\xbc\x5e\x4d\x7e\xe0\x16\x9b\x4d\xeb\x4c\x03\xa0\x85\xbf\x86\x9f\x02\x05\x43\x11\x36\xb2\x33\xda\xea\xd5\x4b\xdb\x85\xef\x2c\xc2\xd2\x0e\x6b\xae\x30\x7d\xb0\xf3\x30\x6d\xbd\x34\xf2\x4d\xe0\xcf\xb5\x05\x79\xb2\x27\x8a\x2b\x9f\xf1\xd9\xd3\xb3\xdd\xb8\xdb\x22\xfd\x46\x2b\x61\xe2\xc4\xb0\x9d\xfc\x13\x41\x6e\x5f\x89\x96\xe0\x4f\xef\x4c\x78\x0d\x00\x80\x9e\x22\xad\xbf\x68\x48\xf1\x24\xe8\x2b\x55\xb9\x0a\xd7\xd2\xf1\x79\xda\xa6\xa7\xaf\x8e\xb1\xf2\x6e\x1f\x75\xd7\xe7\x99\x10\x51\x8c\xbb\xfa\xe4\x26\x80\x9a\x91\x7e\xa9\xdb\x68\x3c\xe1\x35\xe3\xa0\x7a\xa2\x71\xce\x6f\xf1\x66\xc5\xd1\xb9\x11\x97\x45\xff\x30\xc6\xef\xc4\xc4\x0e\xdd\x2b\x94\x44\xbf\xfe\xb8\x3d\x72\xef\x1b\xc3\x15\x5f\x24\x59\x59\xae\x53\xf7\x6a\xd5\x45\xcd\x8a\x3c\x3f\x3d\x7a\x44\xb2\x6c\xc8\x4a\x27\xc8\xb8\xfe\x4b\xd2\x23\x86\x13\x00\xfa\xfd\xd7\x2b\xd1\x25\x9a\x6f\x91\x2a\x90\xbc\x0e\xad\xb1\xc5\x74\x8a\x77\x34\x9b\xba\xde\xbe\x4f\xfa\xf5\x7e\x68\xbb\xa7\xb3\x58\xeb\x58\xeb\x23\x2f\x00\x79\x21\xad\xa7\x67\xb1\x50\x0f\x6c\x7d\xac\x5e\x76\xfa\xe4\x2f\x0d\x4f\x35\x67\x09\x1f\x3f\x4b\x8b\xb8\xf9\x89\xb6\x24\xa1\xd3\x43\x0c\xaf\xc5\x00\xe4\x8f\xcc\x80\xd6\x1f\x63\xfb\xb2\xc9\xbe\xf0\xc6\x72\x0c\xdd\x56\x9a\x97\x76\xe6\xdf\x75\x3c\xb2\x4f\xfc\x44\xd5\x55\xa9\xcc\xb1\x0b\x94\xe1\xec\x00\x4a\x44\xee\x7d\xb6\xea\xed\xa6\x77\x89\xaf\x22\x4c\x4a\x92\x2f\xd4\xfd\x4e\xb5\x31\xe2\x2b\x94\xea\x18\x20\xb6\x60\x1b\x75\x70\xd1\xa7\x6e\xec\xf1\x02\x50\x2c\xd2\x73\x8e\xa4\xfc\xe0\x6f\x37\xd1\xdb\x9a\x76\xb1\x0b\x3d\xa5\xfc\x38\x97\x9f\xfb\xa1\xb1\xf0\xd3\x3d\xfd\x4c\x09\xba\xb3\x6a\xfc\x25\x4f\x01\x34\xff\xd7\xdf\x20\x54\xf3\x1d\x92\x72\x15\x98\x0c\xbb\x6a\x13\xe8\x3f\x58\xaa\x21\x7b\x6f\x38\x85\x45\x3f\x48\x58\x99\x4d\xfb\xb8\x02\xef\x8b\x14\x00\xad\x23\x3f\xdd\xb0\xf0\xa6\x6c\xe0\x8f\xb1\xbd\x6e\x56\x13\xef\x74\xd9\x40\x76\x4e\x4b\x85\x9c\xcb\xed\xc1\x51\x64\x37\xf6\x65\x7d\xac\x20\x6b\x47\x0c\xf5\x96\xb3\x66\x8e\x88\x01\x3c\xa6\xa2\x8b\x23\x9f\x0a\x8b\x26\xd6\xfb\x7d\x49\xbf\x70\x27\x91\x12\x32\x9e\x69\x6c\xf6\xd5\xe6\xc3\x00\x28\x1d\x99\x5a\x0f\x8b\xda\x6e\xa4\xed\xcb\x66\xca\x6b\x94\xa6\x6b\xb0\xbc\xf8\x8c\x38\x77\x8b\xd0\x2e\x65\x9d\x46\xe7\x64\x62\xcd\xe0\xba\x1c\xb2\x55\xfd\xee\x28\x63\x60\x5f\xd0\xdd\x7b\xfc\x10\x66\xf8\xe7\x9a\xcc\x07\xcf\xd9\x99\xfa\x80\xbd\x0b\xcd\x9e\x09\x47\x6b\xa8\x78\xc9\xd9\x84\xfe\x95\x50\x0e\x60\x3b\x37\x30\x70\xa1\x41\x0a\x5e\x11\x01\x63\x20\x1a\xa6\xc0\x73\xc0\xf7\x2a\x54\x50\xc1\x29\x56\xe1\xfb\x08\x3a\xab\xfc\x5f\x21\xcb\x88\x9f\x02\x8d\x56\xf0\x53\x0c\xc3\xbf\x0d\x45\x05\x16\xdc\x14\xae\xf8\x29\xd0\x89\x05\x3b\x85\x1f\xdc\x47\x43\x83\x16\xbc\xa2\x12\x06\x66\x34\x6c\xc1\x2b\xea\x48\xe1\xc7\x0b\xd1\xf0\x05\xc8\x61\xa8\x64\xbc\x31\x00\x1a\x47\x46\x70\xdb\xb8\xef\xe2\x79\xc3\xc1\xbe\x10\xc3\x05\xb9\x99\x8b\xcf\xbd\x07\x78\xf4\x86\xcc\xbf\xc6\x14\x90\xd8\xce\x98\x58\x36\x4a\xfd\x61\xcd\x08\x64\x1d\x25\xd2\xdd\x47\x1e\x2b\x64\x65\x6c\x2e\xb1\x60\x72\x6a\xe0\x96\x80\x44\x8a\x12\x65\xb6\xa2\x90\xb1\x80\x83\x03\x55\xb0\xbf\xe2\xa5\x3f\xd7\x17\x64\xd4\x84\xb7\x04\x1a\xf5\x2a\xa8\x12\x03\xae\x13\xa1\x7b\x6b\xd2\x97\x1e\xd7\xf5\xd6\xdc\xc0\x50\xd0\x05\x91\x13\x8a\x7b\x95\x58\xef\xff\x03\x31\x7f\xb1\x6f\xbb\xb1\x45\xb5\xcd\x2d\x75\xde\xa5\x11\xf7\xba\x2a\xeb\x71\xef\xb6\xcd\xe3\xef\x0d\xf9\xc8\x67\x2c\x34\x8a\xfb\xfc\x02\xf2\x84\xfe\xcd\x6c\xfc\xfe\x8c\xc3\x9d\x06\x34\xc3\x61\xff\x86\xaf\x52\x68\xa6\xe3\x15\x0b\xb0\x7f\xa3\x19\x8f\x57\xd4\xc2\x0a\x34\x86\xc4\x2b\xbc\xe0\x8b\x2a\x1a\x45\xe2\x15\xe1\x70\x9c\xa2\x71\x24\x5e\xb1\x01\x5b\x85\x46\x92\xf0\x3a\xfe\xfb\xbd\x3b\x2a\x4b\x62\x15\x49\xf0\xee\xa2\xe3\x24\x56\xf1\x01\x5e\x39\x2a\x51\xe2\x14\xad\x70\xe3\x00\x9d\x29\xb1\x8a\x5e\x38\x52\x51\xb1\x12\xa7\xd8\x83\x23\x15\x1d\x2c\xb1\x8a\x42\x78\xe5\xa8\x6c\x89\x53\xb4\xc0\x73\xa0\xd3\x25\x56\x11\x0d\x9f\x07\x2a\x60\xe2\x14\xdf\xe0\x07\x1f\xd1\x19\x13\x9b\x06\xd5\xe1\x8e\x09\x0a\x65\xe2\xa7\x78\x03\x97\x18\x34\xce\xc4\x2b\x4a\xe1\xb6\x1a\x3a\x69\x62\x15\x99\xf0\x1c\xe8\xb0\x89\x55\x94\xc1\x7d\x03\x34\xde\xc4\x2b\xde\xc3\xe1\x81\x4e\x9c\x58\x45\x36\x9c\x7c\xd0\xa1\x13\x37\x07\xbc\x72\x34\xee\x84\x93\x0f\xac\x40\x25\x4f\x9c\x62\x0e\x76\x12\x74\xf6\xc4\x2a\x9e\xc2\xeb\x40\xc5\x4f\x9c\xa2\x19\x76\x5d\x74\x00\xc5\x85\x07\x7c\x1e\x68\x0c\x8a\x57\xfc\x86\xd7\x81\x4e\xa1\xb8\x24\x0a\xaf\x03\x1d\x44\xb1\x0a\x7f\x38\x89\xa2\xb1\x28\x5e\x91\x08\x9f\x07\x3a\x8d\x62\x15\xb1\xb0\x5f\xa1\x03\x29\x56\x31\x0f\x5b\x85\xc6\xa4\x78\xc5\x3a\x39\xfc\x8d\x04\x1a\x9b\x02\x79\x22\x42\x82\xe4\x3f\x9c\x90\x89\xbc\x9e\xcb\x9e\x9c\x57\xd0\x48\x66\xbe\x97\x4b\xd3\x95\xb2\x33\xf3\x0a\xec\xb6\xc4\x2a\xd0\xcc\x4d\x09\x24\x4b\x51\x1b\x3f\x5a\x54\xc8\xc4\x00\xe8\x2b\xb2\x8e\x07\xd5\xd0\x9e\x74\x1a\xbf\x58\x49\xcb\x13\x35\x33\x16\x1b\xbd\xa6\xd3\xf1\xd9\xbe\x6c\xff\xb9\xea\x62\xa6\x1f\xde\x7b\x1e\x8e\x62\x18\x00\x75\x20\x2f\x36\xae\xe2\xaa\xfc\xa7\x22\xdd\x72\xdb\x4d\xef\x6f\x96\x92\x5e\xfc\xd2\xd4\x1a\x70\x26\x7e\x57\x7f\x63\xfa\xa6\x03\x47\xab\x81\xb1\x08\x06\x40\x7d\xc8\x8b\xcd\x97\x0d\x7f\x8a\x45\xce\xcf\xb7\x33\x9e\xf4\x59\x03\xee\x0a\x2a\x7b\x71\xa9\xba\x82\x65\x12\x39\x21\xba\xb6\xd2\xe2\x6f\xf2\x3f\x85\xfe\xcd\x6c\x38\x81\xc0\x15\x00\xcd\x70\xbc\xe2\x2b\x7c\x6c\x68\xa6\xe3\x15\x1d\x70\x50\xa0\x19\x8f\x57\xf4\xc1\x41\x81\x76\x43\xc0\x2b\xd2\xf7\x6f\x7c\x23\xfc\xb7\x9b\x02\x90\x53\x27\x22\xf0\xfa\xe3\x80\x48\xbe\x6b\x3c\xbc\x2d\x35\x5f\xfb\x80\x2c\xb3\xc5\xea\xfe\x0f\xb6\x3c\xd6\x07\x57\x74\xd9\xf7\xe7\xd8\x16\x4c\xcb\x32\x3e\xce\xe2\xdf\xb1\xc0\x00\x68\x1b\x79\xce\xd7\x18\x4c\xd2\xe2\x9e\xf9\x3e\x25\xf0\xc8\xfd\x69\xe7\xfe\x9d\xc3\xb3\xdd\xee\x0b\x75\x8e\xf4\x6c\xb8\xff\xa4\x98\xd9\xa8\x8b\x03\x00\xb2\x82\x88\xe1\xfd\x2a\xfd\x12\xa0\x51\xe6\x01\xe7\x8a\x9d\x55\xf8\x4c\x92\xbc\x2c\x9d\x70\xcf\xe5\xf1\x90\x0e\x95\xa0\xbc\xee\x31\x5a\x7e\x4b\x00\x3d\x43\xd2\x69\x97\xb7\xda\x75\x81\x2c\xc3\x07\x67\xfa\x98\xde\xe6\x8a\x3e\xfc\x2d\xcc\x5b\x71\xd9\x83\xf2\x8c\xf8\xdb\x36\xbe\x94\x3b\xa7\x62\x24\x85\xfe\xcd\x68\x38\xd4\xe0\x1a\x8c\x6a\x36\x4e\xb1\x0d\xff\xe8\x02\xdd\x72\x6c\x7d\x14\xc4\x4f\x81\x66\x3b\x7e\x8a\x67\x84\x1b\xaf\x70\xfd\xe8\xc6\x07\x47\x63\xf8\xbe\xbc\xf9\xb0\x69\x1a\x7e\x41\xc2\x36\x58\x27\x58\xbd\xb9\xfe\xb7\x1d\xc7\xa2\xc5\x9e\xc6\xaf\x7e\x81\xdd\x3c\x20\xbf\x97\xfb\x7b\x3b\x9a\x11\x00\xa8\x0e\x79\x7f\xe4\x54\xea\xb9\x95\x85\x61\x3c\x6b\x42\xaa\x5d\xaa\x1e\x40\xab\x6e\x27\xc6\x37\x99\x9a\x78\xd1\x9a\x20\x9b\x36\x90\xf7\xc6\xf6\x4f\x00\x4d\xfe\xf5\x17\x7a\x76\xaa\xc6\x71\x6b\xc5\xe2\x3e\xca\x55\x72\x1f\xcd\x1f\x6a\xaf\x35\x3c\x1f\xcd\x7c\x4b\xa5\x72\x77\x55\xea\x55\xc5\xb1\x6b\xd0\x1f\x6e\x46\xde\xc3\x6f\x24\xf6\xce\x57\x96\x75\xcc\x0a\x33\xbf\xba\xc8\xcc\x76\x4e\xd9\x44\x89\x79\x11\xf3\xea\xac\x33\x20\xa2\x59\xcd\xd5\x91\xf6\x40\x3e\x8b\x94\x2e\xbc\xea\x79\x9c\xe5\xf1\xa1\x8c\xab\x67\xf9\xf5\xa1\x63\xa9\xdf\xdf\xf8\xf1\x93\x6b\x95\x9b\x15\x5d\x63\x1e\xbd\xc4\xfe\xff\xd6\x35\x32\xec\xa3\xc3\x6e\x5c\xe7\x39\xdf\x4f\x66\x57\x73\x50\xc7\x80\x47\x34\x06\x04\x28\xf0\x17\x06\x51\xcf\x39\x3e\xca\x3d\x7b\xc0\xaf\x53\x15\x03\xa0\x1f\x48\x53\xca\xd7\x57\xf6\x27\x82\xf2\x1f\x87\xe7\xf5\x6c\x15\x0f\x57\x9d\x5c\xcb\x20\xf0\x8f\x3f\x06\x6c\xfa\x94\x14\x34\x4c\xae\x8d\xcc\x63\x00\xe4\x89\xec\x42\x8a\x9d\x12\x38\xd0\xa2\x3e\x27\x29\x47\x3f\xbb\x79\x79\x4f\x7a\xb2\xfb\x71\x3f\x33\x73\x82\x22\x17\xfd\x37\xaf\x27\x2c\xee\x25\x9f\x01\x80\xca\x90\xe3\x99\x1b\xc4\x8a\xb7\xaf\x82\xda\x93\xeb\xf7\xf7\x49\x2c\xfd\xa8\xa1\x93\x8d\xe6\xa3\x55\x5c\x7a\x19\xab\xc5\xeb\x6a\x5c\xf3\xc5\x07\x40\xcd\xc8\x2c\x44\x73\xc8\xad\xd4\xd2\x4e\xfc\x6d\x48\x43\x6c\xb2\xa0\xfa\x42\x89\x5f\xf7\xdb\xa4\xe4\x43\x8d\x44\x2d\x43\xb3\x10\xe5\xbe\x08\x3a\x2f\x20\x8b\xdc\x1d\x7b\x7e\x5d\x8f\x41\x8d\xc6\x89\x0c\x87\x0f\x93\x1e\x2a\x23\xd9\x85\xbf\x95\x9b\x9e\xf4\x5f\x7e\x7f\x5d\x20\x53\xe5\xe2\xd4\x75\x53\x00\x95\x23\x37\x47\x8e\x36\x87\xca\x6d\xa8\x74\xea\x87\x6b\xc9\xf1\x94\x87\x87\x0e\xdf\x2a\xbe\x74\xc4\x65\x63\x3c\x88\x95\x56\xe5\xcd\x76\xc4\xc4\x13\x00\xd5\x23\xdb\x72\x0a\xbf\xd2\xc6\x5d\xa3\xac\x7a\x26\xca\x6a\xef\xf6\x67\x55\x35\xed\x9c\x19\x5b\xe6\xe2\xec\x3f\xf6\xc4\x92\xd2\x87\x2b\xce\xd4\x1f\x03\x64\x2f\x22\x1f\xaa\x5e\xac\xe3\x7e\x5d\x38\x2d\xb3\xa7\x45\xfa\x42\x8b\x80\x6c\x7b\x16\x74\xa6\xeb\xa8\x5d\x09\x3e\x61\xe0\xde\x9f\x16\xaf\xb0\xea\x05\x64\xad\x91\xad\x1e\x39\x41\xbf\x2b\x24\x0a\xfa\x7a\x37\xa4\x29\x1f\x6c\x5f\x70\xbc\x6b\x74\xb7\xaa\x5c\x5b\x85\xfc\x54\xc1\x94\x66\x3a\x69\xff\x1c\x80\xfa\xfe\xfa\xf3\x50\x8c\xd8\xe2\xe7\x33\x77\xa5\xad\x7d\xd8\x98\x5e\x78\xe8\x8d\x6e\x7d\xb9\x26\xc9\x24\xd3\xed\x23\xd3\xdb\x73\xf2\xeb\x16\xc9\x16\x80\x96\x90\xe5\x85\xb4\x2d\x5a\xf1\x92\x7d\x10\xdb\xb3\x5d\x2d\x5b\xa7\x50\xd3\x2c\x02\x69\x96\xf8\x23\x49\x51\x9b\x9d\x14\x34\xa5\xee\x8a\xd0\x5b\x0c\x80\xa6\x90\xe7\xd4\x2a\xf5\xfd\xbb\x11\x77\x8b\xdd\xd6\x66\xfb\x35\xfe\x3e\xa7\x27\x83\x13\x66\xfd\x21\x21\xdc\x54\x3b\xf5\x42\x0a\xd7\x2a\x38\xca\xbd\x00\x54\x83\xec\xf5\xd8\x88\x7c\x9a\x5d\x30\x6e\xa4\x7c\x46\x40\xec\x26\xdd\xfa\x9e\xe1\xd5\xc5\xf9\x5f\xea\xd4\x01\xd4\x09\xf5\x98\xc1\x84\xe0\x7d\x31\x00\x7a\x87\xdc\xf9\x10\xa3\x41\x49\xe5\xd3\xef\x66\xa2\xe8\xdd\x09\xcf\xb7\x77\x1c\xfc\x18\x48\xe6\xd0\x43\x11\x43\x38\x14\xd6\x79\x9e\x21\xb6\x99\x0f\x40\x5f\x90\x3b\xef\x4b\x7a\x24\x30\x2e\x2e\x3d\x41\x5b\x25\xfb\xd6\x48\x7c\x7f\xc4\x37\x48\x8f\x68\x65\xa1\xd7\x76\xa8\x5a\x39\x6c\xbc\x31\x97\x0d\x00\xa8\x03\x39\xfe\xb8\x6a\x83\xaa\x9b\x03\xa7\x0b\x6b\xb4\xe6\x74\x1e\x8f\x0f\xf5\x5a\x5c\xc3\xbb\xf9\xbb\x86\xf1\xbc\xef\x3f\x61\x8e\xf4\x6a\xc6\x01\x68\xf4\xaf\x3f\x56\xad\xbc\xf0\x75\x69\xe0\xf8\xf1\xdf\x8b\xd7\x1d\x2f\xf6\x39\x1f\x3b\x70\x6e\xd2\x99\xa6\x9f\x7e\x7e\x41\x4c\x58\xb8\x7c\xce\xe2\xf2\x9f\xa0\x42\x8e\x4f\x39\x9c\xc7\x56\x24\xc7\x96\x3f\x49\xc0\xfe\xcd\x5b\x63\x78\xbc\xc0\x2b\x6b\xd8\x24\x8e\x98\x8a\x44\xbd\x86\x98\x8a\xcd\xae\x13\x03\xa0\x7a\x64\x3e\xf8\x92\x59\x19\xb9\x5f\x2b\x78\xae\x90\xc0\x4d\xda\x82\x9e\xa5\xd8\x85\xa8\xf3\xee\xc9\xb9\x88\xf5\x8a\xf2\x09\x43\xe1\xb0\x6b\x9c\x5e\x00\xf2\x46\x1e\x96\xfa\xb3\x13\xa2\x52\x53\x97\x89\xcc\xab\x19\x7d\x4b\x0f\x14\xc5\x4c\xdf\xca\x9c\x8f\x3a\x90\x26\xe9\xdf\x3c\x6a\xda\x42\xd8\x36\x0b\xa0\x5c\xe4\x6a\x1f\xb8\x10\x31\x78\xad\xc4\x9d\x3b\x90\xc8\x25\xba\x6a\xc3\xa8\x3c\xb7\x6b\xbd\xe1\xf3\x65\x4d\xfd\x4b\xc3\xd7\x23\x03\xcd\xa6\x04\x00\xea\x43\x1e\xd5\x7a\xea\xe3\xab\x0b\x5f\xbd\x75\x0a\x5f\xbf\x59\xca\x77\x75\x56\x36\x7c\x24\xad\x13\xa8\x10\xaf\x97\x90\x7b\x5f\xe7\x60\xe2\x31\x7b\x0c\x80\xf2\xfe\x7a\x9b\xb5\x8c\x0d\xeb\xe1\xc5\x53\x63\xeb\x8b\xcd\x8b\x1a\xe2\x46\xa2\x87\xd9\x86\x9b\x32\x88\xa5\x87\x5f\x83\x64\xf2\xa3\x93\x53\x45\x5e\x40\xd6\x16\x31\xdc\xe9\xad\x95\x71\x3a\xa4\x54\xde\xfd\x2c\x94\x88\xce\x6b\xde\x4f\x0e\xc4\xb5\x07\xf7\x0a\x3d\x15\x71\x62\x37\x97\x0d\x31\x9c\x06\x50\x34\x32\xe1\x5c\xa2\xc5\x64\x33\x69\x1d\xa7\xf0\x8c\xf8\x64\x90\x62\xb4\x92\x21\x5b\x2f\xbc\xd1\xdd\xf3\x54\xdf\xcf\x85\xff\x74\xd9\xf9\xba\x97\x00\xca\x46\xae\xf5\x74\x7e\xb7\x76\x42\xc0\xa3\xeb\x99\x8d\xeb\x34\xaf\x34\x2f\xf4\x9d\xe2\x1b\xbd\x43\x7d\x35\x3a\x3a\xf6\xac\x20\xf3\x75\x29\x19\x73\x00\xa0\x14\x64\xb9\x3d\x98\x63\x17\xc9\x77\x92\xeb\x41\xcd\x21\x9d\xaa\x50\x45\xd1\xb5\x72\x2a\x2d\x9e\x81\xa0\x8b\x5b\xa5\x67\xe5\xd5\x3b\x9c\xde\xab\x03\x68\x02\x59\x0f\x93\x6d\xa6\x03\x3b\x1d\x8e\x45\x8a\x26\xdd\x8a\x3d\x67\x74\xcc\x60\x5a\x98\x5f\xe3\xd5\x85\xcf\xd5\x64\x89\x87\x6a\xf7\xeb\xa6\xb1\x00\x00\x4d\x21\xfd\x38\xe3\xae\x70\xcf\x43\xda\x15\xf6\x57\x97\xdc\xbf\xcb\x93\x31\x8d\xf7\x6a\x46\xef\xe8\x2c\xbf\x24\x2a\x61\x3f\xf9\xab\x50\xfc\x92\x02\x80\xd6\x91\x07\x1b\x3a\x59\xfd\xfc\xad\xc4\x83\xb9\x28\x53\xe3\x51\x9b\xc0\xa6\xd5\xf8\xce\x33\xe6\x5b\x29\x72\xf5\x64\xb7\xc3\x18\x69\xbe\x84\x37\x03\x00\xcd\x20\xeb\x8e\x8e\x17\xe9\xb5\x2f\x8a\x0c\x57\x39\x08\x39\xca\xe5\xda\xb2\xde\x3f\x94\xad\x9b\xf0\xcf\x21\x96\xae\x8d\x9b\x79\x21\xa2\xc2\xbd\x0a\xa0\xdf\x48\x6b\x6e\xfe\x56\xe6\x6e\x9b\x21\xaf\x5d\xfc\xd5\xa8\xf6\x80\xed\x80\xe8\x97\x05\x4a\x2b\xd9\xa9\xb3\xe2\xd0\xf6\x61\xed\xac\x9d\x07\x10\x00\x90\x27\xf2\x64\x59\xf8\x2f\x32\xa7\xa4\x5e\xa6\xd4\x1d\xff\xe1\x71\x75\xfa\xc4\x0d\x2e\xea\xbb\x95\x22\xec\xf6\xdc\x8e\x67\x3f\x0c\x0b\xd3\x26\x96\x02\x28\x10\x39\x9c\xe1\x9a\xf9\x49\xda\x0c\x97\x5a\x39\x46\xaa\x40\x59\x8a\x24\x91\x0a\xff\xa7\x42\x49\x0f\x64\x98\x56\x9d\x3a\x84\x17\x4a\x43\xa6\xfe\x94\x35\xa4\xf5\xc4\xb5\x1a\xbb\x6f\x48\xdd\xdc\x69\xaa\x72\x4e\xbe\x94\x26\x13\x2a\x1b\x77\xf9\xd9\x79\x7b\x35\x67\x38\xfd\x63\x5d\x81\x89\x6d\x21\x00\xb2\xc8\x5c\x6f\xf6\x56\xed\x62\x83\xb2\xd6\x6d\xbf\xb0\x8b\x96\x33\x39\xa3\xf9\x8f\x76\x16\xaf\x16\x09\xc5\xa4\xdc\xca\x2b\x53\xbd\xaf\x1e\x37\x03\xa0\xdf\x48\x37\xde\xca\xb3\x16\x97\xb9\xfb\xd4\x30\xe4\x04\xd5\x11\x83\x2f\xda\x43\x2f\x59\x9e\x88\xde\xd1\xdd\xd7\x4f\x7c\x45\x7c\xed\x30\x61\x2d\x3b\x06\x40\xad\x7f\xfd\x1d\xf2\x00\x5d\xc4\x80\x0d\xb7\xdd\xdd\x87\x74\x21\xc7\xe6\x12\x1e\xb5\xf0\x77\x92\x8b\x3f\x61\x5b\xbb\x91\xa3\xd4\x2b\xa3\xc4\x5a\xe1\x05\xa0\xe7\x48\xeb\x63\xa7\x40\x75\x5b\x71\xfa\xf8\xf8\xf6\xe6\x3e\x6e\xe1\x7d\x4a\x37\xd2\x94\x03\x4c\x64\x09\x55\xa7\x55\x2f\xda\xb2\x32\xbc\xf6\x05\x50\x0c\x32\x1f\x33\x2a\xb7\xaa\xc4\x3a\xfe\xf2\xb4\x71\x3e\x42\x74\xed\xe5\x5e\xe8\x72\xed\x0b\xcb\x89\x7b\xed\xe4\xf5\xf4\xf4\x87\xf5\xdc\x34\x4f\x02\x68\x1e\xb9\x97\x27\x76\x2d\x63\x07\xdb\xa5\xfb\xf8\x29\x9f\x1c\x73\x14\x2b\xdd\xbd\x44\x41\x7d\x3a\x90\xf8\x34\xbd\xa7\x66\x08\x78\xf4\xcc\xf8\x8c\xd0\xbf\x82\x07\x15\xb6\x4d\x09\x37\x71\xd0\xd8\x03\xaf\x98\x84\xf1\x1a\x8d\x3e\xf0\x8a\x71\x22\xb8\x15\x8a\x46\x21\x40\xce\xd3\xd3\xff\xcf\x15\x27\x0f\xb9\xa3\xe1\x4b\xa5\xa7\x3f\xbe\x1a\x95\x5c\x27\xe8\x66\x34\x9d\x3f\x3e\xaa\xf4\x94\xe8\x90\x26\xd1\x1e\x4d\xc1\xde\x9e\x54\x7e\xd1\xa3\x23\x18\x00\x4d\x20\xa3\x25\xab\xd4\xf0\x89\xf4\x19\xda\x0b\x7c\x6c\x94\x15\xd7\x16\x45\x37\x98\xcf\x9c\xed\x8b\xb2\x90\xdc\xf5\xf9\xf4\xdb\xe6\x5b\xe3\xab\x14\x0c\x80\xda\xff\x72\xff\x8c\x2a\x63\x57\xc2\x1b\xb1\x1f\x8d\xa4\x1a\xb6\x1c\x7e\xa5\xa8\xf6\x2d\xa5\x3c\xba\xf5\xf2\x9d\xee\xec\x74\x5f\xc6\x24\xdb\x77\x0c\x80\x3e\x21\x3f\xdf\x5f\xba\x99\x85\x68\x4a\xf2\x6d\xdb\x93\xbc\x0f\xa7\xe5\x55\x7c\xe7\xde\x57\x8d\xca\xeb\x34\x55\x86\x9a\x7f\x93\xec\x36\x3b\xe5\x2b\xf4\x6f\x66\xe3\xf7\x27\xef\xbf\x07\x5a\x51\x0c\xc7\x2b\x26\xe0\x4b\x11\x9a\xe9\x78\x45\x3b\x7c\xc5\x41\x33\x1e\xaf\xf8\x04\xcf\x81\x86\x82\x78\xc5\x2a\x3c\x07\x1a\x0c\xe2\x15\x3f\xe0\x3b\x39\x2a\x0e\xe2\x14\x9e\x70\x0b\x11\x1d\x08\xb1\x8a\x32\x58\x81\xc6\x84\x78\x45\x33\xfc\x25\x07\x3a\x16\xfe\x5f\x21\xeb\x01\x3f\x88\x88\x0a\x86\xd8\x29\xca\xe1\xad\x42\x63\x43\xbc\xa2\x1e\xfe\x83\x5f\x34\x3c\xc4\x1b\x75\x11\x2f\x40\x07\x44\xac\xc0\x1a\x6f\x13\x3a\x22\x62\x6d\xea\x83\x1b\x3d\x68\x94\x88\x57\x2c\xc1\x4e\x85\xc6\x89\x78\xc5\x14\x7c\x7c\xe8\xa4\x88\x55\xd4\xfc\xf7\x7b\x54\x54\x58\xc4\x2a\xde\xc1\xa7\x81\xca\x8b\x38\xc5\x17\xb8\xad\x89\x4e\x8c\x58\x45\x07\xac\x40\x83\x46\xbc\x62\x14\x5e\x39\x1a\x36\xc2\x01\x08\x2b\xd0\xc0\x11\xf6\x2a\x38\x99\xa3\xa3\x23\x56\xe1\x0d\x9f\x20\x3a\x3d\x62\x15\xb9\xf0\xca\xd1\x00\x12\xf6\xab\xff\x1e\xe5\x43\x41\x48\x38\x85\xc2\xdd\x00\x74\x8a\xc4\x3a\xbb\x2d\xdc\xc2\x47\xe5\x48\xec\x14\xd1\x70\xae\x42\x45\x49\x9c\x22\xfb\xbf\xff\xa1\x41\x85\x49\xac\x22\x05\x6e\x83\xa0\xf2\x24\xbe\x12\xc0\x9d\x53\x74\xa2\xc4\x05\x14\xec\xec\xa8\x50\x89\x53\xac\xc3\x47\x8e\x8e\x95\x58\xc5\x0c\x5c\xd1\x50\xc9\x12\xa7\xf8\x0d\x5b\x85\xce\x96\xb8\x4a\x00\xbb\x2e\x1a\x5e\xe2\x15\x81\xb0\x02\x15\x30\xf1\xe4\x02\xff\x6d\x03\x3a\x63\x62\xdd\x0a\xee\x0b\xa2\x51\x26\xbc\x70\xd8\xd7\xd1\x38\x13\xaf\x68\x85\x8f\x1c\x9d\x34\xb1\x8a\xe7\xf0\x71\xa0\xc3\x26\x56\x11\x03\x67\x76\x34\xde\xc4\x2b\xe6\xc9\x37\x32\x8e\x62\x25\xf7\x49\x72\x0f\x8b\xf1\x28\x96\xdd\x1c\xe7\x5c\x0b\x68\xcd\x09\x25\x1c\xdf\x1d\xe8\xf7\x25\x3e\x7b\xc1\x32\xa3\xa5\xf1\x75\xf0\x57\x20\xff\x65\x6f\xcf\x23\x9a\xc5\x0b\x40\x4f\x91\x37\x3a\x8c\x9d\x9e\x70\xee\x7d\xc5\x0e\x7a\xea\xbe\xae\xc3\xfe\x82\x9d\xce\xa7\xec\x83\x9b\x8f\xed\x56\x91\xbc\x09\xd5\xa4\x75\x5c\xfe\x08\xa0\x3a\x24\xc7\x93\xf7\x78\x4b\xa6\x7f\x8f\x38\x6b\xcc\x73\xed\x17\xa5\x0e\x63\x1a\x13\x67\xad\xa4\xbe\xe7\xe5\xe7\xb1\xf6\x8c\x6f\x1e\x0c\x87\x70\x01\x68\x17\x09\x6d\x8e\xe7\x42\x65\x9b\x98\x27\xca\x5f\xc4\xd7\xc4\xcb\xef\x7f\x94\x25\xed\x92\x6e\xb9\xfb\x24\x40\x8e\xb3\xe9\x8c\xe2\xd1\xd2\xfc\x83\x5e\x40\x16\xf9\x66\x85\xa1\x82\xdc\xdf\x96\xc3\x50\x14\xe7\x8e\xc5\xe5\xf7\x39\x7e\x55\xce\x59\x44\x5b\x0c\x79\x6f\xe2\x84\x08\x28\x62\x0f\x18\x9c\x2f\x02\x50\x30\x12\xcb\x35\xea\xdf\xb3\x9f\x63\x0f\xce\x8b\xb4\x2c\x24\x23\xd1\x20\x1d\xde\xbe\xbf\xaf\xe7\xa5\x91\xed\x64\xd6\xec\x6b\x9a\x0b\x43\x95\x9b\x00\x7a\x83\x34\xc6\x52\x6a\xe3\xc0\x40\x9a\x81\xda\x6f\xeb\xdd\x98\xaf\xd9\x45\x8f\xae\xb7\x41\x57\xdf\x7f\x9b\x34\x21\xfe\x15\xf6\x60\xd4\xc8\x74\x0e\x00\xd9\x63\xc8\xc7\xcc\x02\x7b\x8d\x7e\x70\x3e\xdc\x37\x7d\xf9\x4d\x56\x3a\x73\xae\x4c\xcd\x7b\xe2\x6e\xcd\x00\xcd\x89\x3c\x42\x15\x4d\x1d\x56\x35\x19\x00\xcd\x23\xdb\x0c\xdb\x8d\x3f\x6e\x28\x74\x0d\xdd\xce\x13\x28\x79\xad\x26\x45\x30\xbb\x1d\xac\xf3\xb2\xa6\x67\x95\x50\xbd\x68\x63\xf3\xbe\xd0\x27\x75\x00\xa0\x56\xe4\x05\xca\x9a\x23\xf9\x0b\xa5\xf4\xb9\x1d\xb1\x7d\x19\xea\x64\x17\xcf\x9a\x8e\xb8\x25\x64\xa6\xe9\xf1\xc9\x5d\x71\x11\x7f\xe8\x91\x6f\x31\x03\xa0\x69\xe4\xf0\x9c\xc9\x01\x1b\x41\xf1\x8c\x13\x3e\x9e\x43\xd5\x99\x37\x82\x29\x5b\xef\x72\x8a\xdd\xd6\xa8\x75\x63\x09\xb6\x0f\xd3\x98\xba\x96\x8e\x01\xd0\x7b\x24\x5e\x63\xe4\x7e\xf6\xde\x26\xcf\xb5\xff\x92\xb9\x3c\xcc\x44\xfd\xe0\x7b\xf8\xd4\xa9\x0c\x13\x17\xcd\xce\x5e\xd1\xf0\x67\x57\x22\xb9\xea\x01\x80\x5a\x90\x9b\xf3\xbd\xe4\x4d\xd1\x3d\x8a\xc7\x34\xa2\x64\x05\xc6\x8d\xdf\x14\x5b\x78\xbf\xfe\x1c\xd8\x6b\x9e\x22\x6c\x32\x5d\xf2\x30\xa8\x6a\x5c\x05\xd0\xc6\x5f\x2f\x3a\x4a\x88\x84\xee\x90\xa5\x68\x98\x78\xa6\xad\xe9\x93\xbc\x7e\x72\xe2\xe1\x04\xc7\xab\x86\x5f\x46\x63\x2c\x3b\xd7\x7d\x2d\x3c\xa2\xff\x94\x07\xa4\x39\x14\x2f\xa6\x0a\x22\x8a\x39\x0e\xc9\x51\x7a\x30\x10\x16\xb6\x48\x49\x88\xbe\x0e\xdd\x6a\xa7\x14\xd4\x03\xec\xae\xa5\x86\x3a\xf1\xc8\xef\x3e\x42\xcc\xe9\x2d\x2a\x14\x4e\x5c\x8b\x66\x7f\x99\x92\x72\xec\x29\x43\xf7\xb0\x14\x47\x1f\x01\xc3\xef\xf4\xf9\x8a\x81\xb3\x17\xca\x31\x00\xca\x40\xde\xe5\xe8\xcf\x85\x5f\x17\x21\x56\x12\xff\xe4\xfe\x56\xec\xe3\x81\xdd\xd7\x3e\x8f\xd5\xc6\x2e\xf8\x11\x77\xf1\xd1\xa5\x1d\xca\xfa\xaa\x79\xd4\x0b\x40\x29\x7f\x75\x01\x62\x9c\xbb\xa2\x12\x46\x8f\x5c\x4e\x93\xcf\xe7\x27\x7d\x53\x31\x13\x1f\xaa\x7b\x59\x57\xf3\x7e\xdf\x2d\x65\xdf\x98\xa8\xa1\x26\x00\x65\xfd\xf5\x16\xeb\xd3\x87\x59\x09\x9e\x11\x74\xe9\xb8\x12\xbb\x26\x59\x3c\xa2\x2d\xa6\x59\x2a\xf4\x4e\xce\xfa\x60\x52\x4a\x6b\xf6\x3a\x8a\x81\x17\x40\xb9\xc8\x78\xe2\x25\xdd\x54\xda\x67\x63\xa7\x69\x28\x20\x9c\x4e\xfd\xe2\x87\xdf\xb7\x55\x9b\xec\x90\x13\x32\xe6\xd1\x17\x75\xba\x68\xf4\xa9\xf7\x63\x00\xf4\x0c\xd9\xf2\xb8\x2c\x6b\x99\xca\x96\x7f\x90\xd1\x2d\x6d\xbf\xe7\xb4\xfa\xe8\xa0\xc6\x36\xab\xc6\xa2\x17\xd9\xe4\x89\xa0\x9c\x37\xfb\x04\x1d\x3c\x30\x40\x56\x0e\x19\x21\xa5\xfb\x9c\x4a\xdb\xc3\xaf\x51\x6a\xda\xff\x9c\xd9\x7e\x77\xaf\x47\xb3\xc3\xe8\x44\x48\x0b\x71\xdb\x4a\xec\x55\x76\x8b\xcc\x2c\x2f\x00\xf9\x21\x6f\x71\x83\x3d\x7d\x3d\xc3\x95\x01\x2e\x0d\x66\xf7\x97\x7d\x47\x2a\x69\xb7\x56\xab\x6e\xab\x02\xdf\xd6\x7a\x73\x27\x95\x2a\xf1\xf6\x57\x00\x7a\xf7\xd7\x5f\x1c\x1b\xd9\xd0\xed\x25\x68\xf9\xb2\x7f\x39\x32\x81\x59\x7c\xdb\x3f\xd8\xf8\x4a\xff\xa6\x59\x96\x9e\x7f\x9e\xa2\x4e\xa1\xc8\xe5\xcf\x00\x1a\x45\x7a\x01\x1b\x99\xef\xf6\xc9\x61\x3f\x97\xab\x22\xa5\xef\x7a\xee\xe6\xda\x71\x95\x9e\x89\xd7\x9d\x96\xe3\x59\x97\xd1\xdd\xf4\xb8\x66\xf2\x0a\x00\x59\x21\x64\xe7\xbc\xb7\xb8\x9f\xc9\x5c\xe8\xfe\xde\x45\xbd\x6e\x71\x39\xf3\x15\xf7\xbe\x7b\x3d\xcd\x2e\x9f\x67\x06\x48\xbe\x86\xd6\x45\x3f\xf6\x04\xd0\x0a\xf2\xd3\xf3\x59\xa2\x4d\xa6\xe7\x8a\x9a\xa5\xe3\x64\x73\x1c\x77\x66\xdf\x16\xbc\x38\x70\x5b\x6c\x47\x28\x76\x26\xc2\xd6\x2d\xfc\x03\xbf\xdf\x1f\x3e\x40\x76\x9b\xbe\xde\x98\xd7\xca\x0c\x4e\x55\xe5\x36\x35\x5c\xad\x3f\x21\x94\xf3\xce\x7c\xb8\x55\x0c\xc3\x7d\x81\x64\x97\x62\xe7\xc3\x27\x12\x25\x0c\x80\x0a\x90\x5b\xef\xc3\x3b\x18\xba\x99\xb8\x31\xd2\xbb\x76\xba\xb8\x31\xc7\x35\xbf\xf5\x92\xe8\xe8\xc1\xaa\xe7\xb4\xc1\x18\x91\xc2\xfe\xeb\xec\x9b\x00\x40\xc9\xc8\xf1\xea\xa2\x46\xab\x57\xab\xfe\xc7\xd8\x79\xc7\x63\xf9\xbd\x71\xdc\x2c\x49\x51\xc9\xce\x96\x55\x19\x21\x23\xc9\x8d\x06\x49\x56\x03\x49\x22\xc9\xac\x50\x2a\xe3\x39\x36\x11\x92\x2d\x7b\x8f\xc8\x1e\xc9\x26\xb2\x85\xcc\x88\xac\x10\x42\xf6\xef\xe5\xa7\xe7\x74\x7f\xff\xba\xfb\xff\xbc\x9f\x73\x5d\xe7\x5c\xe7\xba\x3e\xd7\x79\xee\xe7\xb9\x53\x62\x8a\xb9\xca\x66\x1f\xf8\x2b\x9b\x49\x71\x11\xeb\x44\xb4\x47\xb1\x47\x18\x48\x4a\x69\x94\x8d\x64\x02\x64\x13\x7d\x62\xef\x93\x77\xd0\xd4\x9e\x0d\x11\x78\xa5\xed\x93\xdd\x69\x8b\x53\x79\x9d\xb9\x4c\x6a\x78\x58\x8c\x23\x16\xd4\x3f\x22\x77\x8f\x88\x04\x00\xf1\x40\x6f\x95\xad\xc3\xcd\x01\x8f\xcf\xf3\x7c\x51\xec\x47\xd9\x12\x79\x77\x53\x3c\x1d\x52\x78\xeb\x1a\x78\xdc\x25\xff\x4e\xfb\xf8\xab\xcf\x4d\xbb\x00\x52\x82\xbe\x21\xb9\xef\x78\x23\x3d\x7f\xc9\x38\xc2\x72\xa0\x30\x8d\x8f\x53\x55\x80\x8f\xca\x72\x84\xd3\xde\x30\x6d\x8f\xee\x8d\x22\x69\xad\x49\x93\xed\x44\x8f\xde\xda\x6f\xb7\x3e\x89\x3f\x8f\x7a\x13\x74\xc6\x86\xd8\xbb\xf6\xa3\x06\xe1\x92\x6e\xaa\xfe\xe5\x93\x12\x5c\xca\x81\x11\x1f\x1a\xf5\x24\xeb\x00\x92\x80\xce\xad\xfb\x99\x54\x57\x53\x65\xb5\x7a\xa9\xb4\x47\xa7\x6b\x73\xbc\x89\x6a\x38\x29\xee\xad\x0f\xc8\x71\xf1\x37\x91\x45\xf5\xa4\x46\xf7\x00\xa4\x1b\xed\xac\xed\x7d\xc9\x06\xad\x64\x41\xaa\x92\x83\x6f\xd7\x63\xe2\xac\xdb\x6f\x25\x48\xb2\x5f\x3b\x67\x9f\x29\xb5\xe0\x44\x93\x18\xfe\x4e\x11\x00\x04\xa0\x8f\xc9\x62\x96\xcd\xe8\x64\x7c\x18\xe7\x65\xdd\x35\x76\x91\xd8\x17\x27\x93\xb4\x1d\xac\x6f\x9c\x57\x4e\x1e\x63\xd2\x3e\xad\x7e\xc0\x76\x1f\x40\xa2\xd1\xc6\x93\xd3\xc4\xe6\x4f\xf6\x5a\xb3\x3b\x7d\x37\x1f\xd6\x3e\xaa\xdb\x2e\x9d\xf9\xf5\x4a\xcd\xb7\x23\x77\xb2\x18\x9d\xec\x59\x28\xf7\x15\x00\x80\x04\xa0\x43\x47\xea\x5a\x0f\xeb\xec\x3c\x31\x0d\xc3\x17\xa3\x46\xe7\x2b\x23\x8d\x69\x99\x04\xaf\x2d\x1c\xf6\x85\x89\x31\x08\x2b\x28\xf6\x50\xb5\x01\x24\x06\x1d\x39\x2e\x4a\x27\x1d\xda\xde\x3e\x4e\xf6\xd6\x51\xcf\x36\xda\x2f\xaa\xb7\x5f\x4e\xb6\x93\xfe\xbd\xbf\x21\x4b\xd1\xb7\x77\x16\x7d\x07\x49\x9c\x80\xac\x22\xfa\x4e\x36\xde\x80\x44\x34\x39\x3f\xbd\xa4\xef\xd3\xf1\xaf\x4c\xb4\xa7\x5e\x9c\x67\x78\x51\x7e\x52\x26\xe8\x1e\xfb\x5e\x9a\xa3\xd9\xc6\xb1\x00\xf1\x45\xc7\x4d\xd2\x22\xff\xb2\x48\x6e\xc1\xe7\x8a\xc9\x4e\x69\xc9\xe1\xcb\x39\x34\x21\x66\x17\x44\x0f\x6a\xbe\x64\x73\xe7\x0b\xb3\x14\x32\x79\x0c\x90\xc0\xff\x3c\x53\xa6\x9c\x47\x25\xc2\x89\x7c\xa2\xd7\x1c\x39\x2d\xb6\xf2\x88\x71\xcb\x34\xf8\x08\xff\xa4\xc9\xdc\x9b\x47\xd2\xc4\x42\xcc\xbe\x83\xdb\xea\x1e\x9d\xcf\x0c\x03\xd7\xf9\xb4\xbe\x7a\xce\xe9\xdf\xa3\x30\xa6\xe4\x39\x2b\xb5\x72\xeb\x08\x93\x50\x43\x3b\xf9\x1b\xa2\x37\x56\x8f\x32\xf6\xbf\x72\x02\xb2\x04\xe8\xaf\x34\x83\x33\x41\xce\xbb\x2d\x89\x83\xcc\xee\xaf\xd3\x79\xee\x2f\x39\x38\xcc\x0d\x39\x70\x1d\x93\x33\x3d\x93\x27\xef\xf1\xa0\xec\x30\x40\x5c\xfe\x73\xed\xc2\x76\x66\xfc\x15\xdb\x82\x83\xa6\x23\x83\x37\xe9\x0b\xfd\x9c\xea\x17\x49\x8f\x57\xae\x32\x26\x5f\xe7\xc6\xa9\xc7\xaa\xbe\xa6\x01\xc8\x20\x3a\x2a\xc7\xde\x3d\xd1\x08\x9b\x24\xa7\x58\xad\xae\xc6\xad\x1e\xfc\x30\x43\x49\x74\x8b\x5f\xcb\xa7\xf7\x57\xe4\xa3\xd7\xa1\xc5\x95\x42\xef\x00\x40\x1c\xd1\xc6\x13\xce\xc4\x3a\xcf\x5e\xcd\x2a\x7c\xf6\xfe\x34\x72\x74\xf7\xc3\x3b\x6f\xd9\x2d\xc6\xb2\xde\xa4\xb8\x98\x0f\x28\xcb\xa4\xfc\x12\x10\x01\x88\x17\xda\x1a\xc3\x76\x45\xc3\xca\x84\x5b\x64\x8b\xb1\x54\x4f\x45\xfc\x32\x3b\x73\x0a\x3a\x2e\x12\xd5\xbf\x5c\x7b\x3c\xa5\x7a\xef\x2a\x4f\x4e\x07\x0e\x20\xf1\x68\x73\x1c\x2e\x6a\xa9\x30\x67\x52\xd5\x24\x5b\x94\xd4\xa7\x5d\x9f\xf9\x71\x8b\x72\xa5\x95\x98\x44\x65\x34\xd3\xe8\xfe\x80\xd0\xe9\x1f\xe3\x38\x80\x2c\xa1\x93\xbd\xa4\xe0\xf5\x86\x8b\xec\xc9\x01\xc9\xe9\xfb\xa7\xe6\x26\xe9\xdc\x67\x9d\xf7\x57\x2a\x9e\x1e\xbb\xe0\xf9\x22\x78\xdf\x71\x8f\x74\x16\xf4\xcd\xf9\xc8\xeb\x73\x4d\xed\xe1\x1c\x2c\xfb\x2c\x7b\xd3\x3e\x88\x8e\x2e\x29\x3a\x78\x44\xef\x8a\xdc\x17\x3c\x74\xff\x26\x43\xa8\x3a\xe5\xb6\x92\xfd\xcf\xef\x17\x08\xd8\x8e\xa5\x0b\xbe\x5c\x7d\x1c\x1b\x5b\xb9\x36\xe9\xde\x7c\xc7\x78\xd3\x36\x66\x52\x91\x36\xdf\x64\xa0\xa5\x7a\x21\xb2\x19\x00\x64\x0d\xad\xb4\x12\xba\x55\xa8\xde\x5a\x1b\xaf\x1f\x1f\x45\x64\x77\x9f\xcf\x5d\xd8\x35\x1b\xc9\xb5\x2b\x7d\xe4\x93\xbf\xbe\x80\xb8\x87\x51\x9d\x25\x40\xb6\xd0\x07\x50\x30\x89\x54\x97\xd2\x2c\xfd\xc1\xdd\x32\xfa\xde\x64\xab\x8c\x63\xa4\xaf\x8c\x5a\x48\x26\xef\xeb\x58\x3c\x99\x68\xcc\xc9\x64\x1c\x16\xfa\x57\xb9\xc7\xba\xf3\x90\x0b\x6c\xbc\xb0\x15\xdf\x0e\x51\x06\x35\x35\x96\xe8\xc3\x13\x9b\xf0\x5d\xc9\xd8\xba\xef\xff\x84\x2c\x1f\x7c\xec\x0f\x53\xf9\xed\x4c\xf1\x12\x76\x1f\x98\xe2\xef\x0f\xf1\x01\x1a\x85\xad\xff\x76\x8c\xa2\xc7\x4f\x81\xa9\x00\xff\x4c\x31\x05\x6f\x0c\xb0\x35\xe0\x0e\xd1\x00\x3b\x1c\x2c\x19\x88\x27\xbe\x43\x02\x53\x08\xfe\x21\x3e\xc2\x66\x10\x5b\x0a\xee\x10\x75\xb0\x45\xc5\x52\x83\x78\x62\x09\x12\x58\x7a\x10\x4f\xa4\x13\x2f\x85\x13\xfd\x9b\x2e\x04\xf2\x64\x24\x82\xff\xff\xf1\x70\x01\xfa\xdc\xa9\xeb\x32\x13\xbf\x26\xe2\x17\x0a\xb1\xbc\xe4\x2a\x4a\xae\xd7\xd5\x4d\xf8\x83\x44\x31\x37\x6a\x31\x3d\xd6\x20\x57\xdb\x3f\xfc\x07\x0e\x20\xfe\xe8\x83\x94\x77\x44\x55\x8f\x99\xa2\x46\x73\xe3\xe9\xfb\x19\x4b\x71\x56\x07\xc1\xf7\x6d\xae\x37\x23\x08\x26\xc3\xec\x7e\xfd\x26\x90\xe5\xd3\x06\x00\x49\x43\x9f\xd3\x18\x0e\x5e\x36\x4d\xae\xaf\x9c\xf1\x34\xd2\x5e\x76\x96\x2e\x6a\x7e\xa1\x2e\x2a\x75\xe7\xcd\xdb\xc9\xda\xf9\xdd\x2f\x34\x50\x69\x01\xe4\x3b\xba\x92\x71\x85\x65\x70\xc6\xe5\xa7\x92\xf0\xfa\xeb\x8e\x0d\x14\xfb\x66\x9d\x3b\xec\x99\x44\x6a\x71\x4b\xa7\x6c\xc4\x2f\x43\xe7\x31\x8d\x3b\x0e\x20\x2f\xd0\xd5\x80\xfe\x14\x35\x92\x5a\x44\x74\x62\x61\xe4\xde\xbe\x67\x7c\x77\x1b\x92\x6b\x7b\x53\x5e\xc6\x05\x8a\xb2\xee\x9d\x92\x88\xf5\x79\x7d\x59\xe8\xdf\xbc\xc4\xaf\x67\xc1\xdf\x17\xa9\x61\xf9\xf9\x87\xf0\x87\x91\x84\xed\xe9\x0e\x91\x06\x33\x01\x96\xb3\x30\x5a\x61\xe7\x8b\xe5\x2e\x9e\x78\x01\x2f\x6d\xb0\xe4\x3f\x9e\x48\x80\x73\x60\x37\x00\x3b\x44\x0c\x3c\x11\xd8\x3d\xc0\x0e\x91\x0c\x4f\x36\x56\x1b\x00\xd7\x0a\xe6\x59\xac\x46\x00\x4f\xf8\xc0\x17\x95\x63\xf5\x02\xf8\x04\x25\x87\x9f\x02\xbb\x19\xd8\x99\xc2\xed\xef\x7f\x20\x63\xf6\x03\x3b\x44\x0d\x5c\x5c\xcc\x96\xe0\x0f\xd1\x0f\xf3\x2c\x76\x57\xb0\xe3\x86\x10\x7c\x62\x18\xa3\x2f\xc0\x4f\xf1\xf3\xef\x1b\xe4\x30\x3a\x03\x3c\x11\x0c\x2f\x0f\x31\x7b\x83\x3f\xc4\x5b\x18\x87\xd8\xdd\xc1\x0e\x11\x05\x09\xcc\x06\x01\x5f\x27\xe1\x09\xc4\x6e\x11\x76\x08\x0f\xb8\x81\x58\x5d\x02\x9e\x28\x81\xf7\x5b\xd8\x7d\xc2\x1f\x85\x00\xb7\x1c\xbb\x55\xf8\x73\x02\x61\xee\xc1\xec\x16\xfe\x10\xdd\x7f\x7f\xed\x8f\xd9\x2f\xec\x10\xe0\xaf\x6e\xc1\x6a\x19\xfe\x10\xd1\xd0\x0f\xec\xa6\x61\x87\x08\x80\x71\x85\xd5\x37\xc0\x4c\x02\xbf\x47\xc2\x6e\x1d\x76\x82\x5d\x11\x3f\x05\x76\xf3\xb0\x33\x85\x2f\x0c\x2b\xac\xfe\x01\x4f\x04\x42\x02\xab\x83\x80\xc9\x0a\xfe\x4a\x08\xbb\x89\xd8\x71\x83\x00\x7e\x01\x8a\xd9\x46\xec\x4c\xe1\x02\xd7\x16\xb3\x93\xf8\x43\x0c\xc2\xc8\xc5\xee\x25\x76\x08\x47\x98\xd7\xb1\xda\x09\x3c\xe1\x05\xad\xc2\x6a\x28\xf0\x44\x3c\xb4\x0a\xab\xa5\x80\xda\x88\x0c\x3e\x94\x8c\xd5\x5a\x00\xf9\xb3\xf2\x04\x44\xdb\x4a\xa7\x07\xad\x44\x84\x87\x45\xc5\xe9\x78\xb6\x10\xb7\x5e\x5f\xc6\xf9\x5b\x34\xbe\x4f\x95\xba\xee\x58\x90\x74\xce\x5c\x14\x62\xba\x53\x6e\xc7\x4a\x8f\x03\xc8\x2b\x74\x73\xd4\xcd\x4f\xd2\x60\x26\x77\x94\xf4\x30\x43\x61\xdb\x1e\xb5\x0f\xb9\x6f\x45\xbb\x4d\x1c\x1f\xd6\xcc\x57\x7b\x68\x32\x2d\x16\x64\x87\xe3\x00\x32\x87\x96\x2e\xcf\x42\xcf\xb5\x17\xc5\x95\xd9\xdf\xf4\x3e\xe0\xdf\xd4\x7b\xeb\xb4\xd2\xa6\x22\x81\x23\x4b\xe5\x42\x78\xe4\x6f\x7d\xa2\xf3\xbb\xb9\x70\x00\x19\x42\xf7\xf8\x2e\x79\xd3\x37\x86\x5d\x55\xf4\xa7\x26\xfa\xcc\x82\xbb\x96\x09\xe2\x24\xf9\x2f\xa6\xd9\xfd\x7e\xf9\xb4\x8d\xd2\x8c\xe7\x60\xd1\x6b\xa1\x7f\x33\x1b\xbf\x40\x3d\x50\x56\x60\x19\x8e\x27\x5e\xc1\x4d\xc0\x32\x1d\x4f\xcc\xc1\x64\x80\x65\x3c\x9e\x18\x82\x09\x07\xb3\xc1\xfb\x43\x0c\xc3\x34\x88\xdd\xe2\xed\x10\x6b\xd0\x73\xac\x2e\x0f\x4f\x6c\xed\x5a\x5a\xa2\xd8\x41\xaa\xee\xe6\x18\x1d\x68\x17\x4c\x9f\x7f\xc5\x74\xc9\x22\xa3\xec\xb6\xc6\xbe\x2b\x19\x73\x46\xf9\xe1\x19\xae\xdc\x49\x31\x6b\x2c\x54\x40\xbe\x4f\xf1\x69\xf1\x2b\x27\x80\x64\xa3\x65\xf0\x58\xe1\xf7\xe9\xf7\x63\x48\xee\xc4\x11\x8f\xe9\xaf\x47\xe3\x13\x87\x6a\xcd\xdf\x8a\xb2\x38\x68\x6b\xf9\x9e\x68\xf7\xe1\xae\x4a\x07\x48\x37\xba\x31\xcf\x63\x4f\xe4\x50\xb3\xa7\xf8\x71\x83\xce\x3d\xd4\x2a\x44\xc1\x3f\xba\xfa\x7c\xfe\x85\x9b\x5c\xb9\x7e\xfa\x21\x2a\xab\xb3\x64\x8f\x01\x32\x81\x0e\xd5\xfb\xd3\xac\x2b\xd6\x11\x14\x47\x6f\xda\xf4\xd3\x7f\x1c\x7b\xc1\xe1\x9c\x78\xe9\xf1\x91\x93\xc7\xae\x3e\xbc\xce\x68\x63\x31\x43\x51\x0e\x00\x12\x85\xbe\x1b\x6b\x3f\x3c\xd2\xcd\x1d\x7b\xb0\xd2\x54\xd6\xea\xfc\x83\xf7\x2f\x23\x92\xc8\x96\x0a\x7d\x62\x83\x3d\x55\x26\x34\x1a\x86\xbb\x73\x34\x01\x92\x81\x6e\xe3\xa9\x7a\x3d\x1f\xd3\x7e\x7c\x2b\xa2\x24\x71\x8e\x6c\xdf\x95\x67\xef\x4e\xd8\x8f\x5c\xd5\xbb\x3e\xcb\x6b\xbe\x47\xab\xb9\xf8\xfc\x72\x19\x0e\x20\x29\x68\xeb\xe5\x9f\xcc\xbc\xcc\xf6\x49\x4c\x6c\x17\xe0\xa8\x8e\xd7\x89\xde\x52\x64\x93\x58\x20\xf1\x18\xcd\x13\x75\x0c\x1e\x90\x13\x75\x7c\x8d\x03\x48\x23\x7a\x71\x44\xdf\x00\xa5\xd5\xa6\x89\x43\xef\xd3\x34\xa3\x4f\x1b\xeb\xd1\xb2\x84\xf3\x66\xb8\x09\x12\xf3\x7f\xd0\x7e\xa2\x7f\xfa\x57\xbb\x0a\x0e\x20\x1b\xe8\x1e\xc4\xfe\xc0\xdc\xb0\xd0\xe5\xfa\xb9\x4c\x5b\x5a\x95\xfa\x9b\x05\x5e\x9c\x2f\x72\x9a\xdf\x5b\x5d\x3e\x99\xb9\x6e\xc0\xb8\xc9\x89\x64\x6f\x17\x15\xf4\xf8\x56\x2d\x25\x7e\xf9\xd3\xbf\xf6\x34\xf2\x9c\x11\xd9\xcc\xdc\xcd\xec\xfa\x29\x26\xf4\xb6\x75\xa0\xf1\xde\xec\xa1\x81\x1a\x5a\xcd\x83\xdb\xb1\x8d\xbe\x45\xb9\xab\xf2\x5c\xc5\xba\x6e\xc6\xac\x97\x9f\xe0\xb3\x94\xef\x6b\xff\x88\x09\x03\x4f\xd9\x51\x4a\x67\xc9\xca\xc0\xbd\x4f\x3d\x0e\xbe\x03\x40\xf6\x12\x6a\xb8\xc1\x18\xfb\xa1\x91\x53\x6a\x55\xee\x61\x4e\x45\x5a\x63\x12\x37\x74\x24\x57\x0d\xbb\xc6\x25\x7f\xc6\x57\x46\xed\xcf\xe2\x62\x14\x04\x48\x31\xfa\x76\x4c\x13\xe7\x24\xed\xc2\x74\xcd\x34\xe2\x23\x22\x73\xd5\x53\xab\x62\xfa\x90\xaf\xb6\x54\x97\xf3\x60\xcc\xb3\xce\x57\xee\x9e\xf4\xbf\x00\x40\x12\xd1\xab\x13\xc6\xa8\x25\xa0\xe0\x52\x75\xdd\x51\xef\x5a\x96\x49\xde\x7a\xeb\xf1\xee\x74\xdb\xbb\xe4\x0d\xe3\x87\x43\xfc\x6e\x98\x30\xdd\x99\x05\xc8\x7b\x74\x5a\xa1\x24\xad\x76\x35\x28\x56\xaa\x6e\xeb\x8a\xe6\xd8\x28\x1c\xec\xbc\xf7\xb3\x24\x37\x53\x9c\x41\x48\xa6\xde\xc6\xa7\xa7\xae\x72\xd5\x09\x20\x3e\xff\xf9\x33\x02\x49\x9b\x3e\x66\x7a\x81\xd2\x19\x85\x34\xff\xdd\xb3\xce\x22\xfd\x5a\x07\xac\x0c\x28\x25\x2f\xb9\x3e\x1b\xd0\x53\x20\xbf\xaf\x02\x90\x32\xf4\xde\xb6\xc7\x2d\xf3\x27\xb5\xea\xe9\x0b\x31\xdd\x1d\xb2\x2f\xf8\x5a\x5f\xf6\xa9\xca\xac\x54\xe0\xb7\xa8\xc3\xbd\xa3\x12\x9f\x73\xeb\x03\x01\xf2\x1b\x1d\x3a\x97\x13\x87\xa7\x2b\x5f\x85\xfd\x98\x14\x91\x02\xcf\xae\x9b\x1c\xf5\x91\xa7\x57\x52\x57\xe2\x1c\x75\x38\x6a\xcf\xf9\x11\x2c\xca\xe1\x00\x12\xf1\x9f\xaf\x7d\xbe\xf3\x8a\xe8\xcc\x24\x1b\x27\xd4\x39\xa8\xf4\xa8\xe7\xdd\xfc\x69\x71\x77\xf7\xe3\xcb\xbf\x73\xb2\x36\x96\xa4\x6e\xef\xf7\xe5\x02\x00\x09\x40\x7b\x3b\xe0\x3d\x6a\xa6\xf4\xde\x94\xe7\xc2\x8b\xa5\xa4\xc5\x42\xde\xa2\x3d\x83\x57\x99\x36\x8d\xd9\x3d\x5e\x6f\x19\x17\x25\x44\xef\x65\x06\xc8\x12\x3a\x47\xbf\x78\x77\x6c\x19\x48\x79\x97\xfa\xdb\x1c\x70\x6c\x70\x2e\xa1\xb8\x92\xdf\x1b\xe2\x57\x44\xf6\x74\x68\xad\xea\x53\x85\x6e\x9e\x88\x13\x90\xd5\x45\x0d\x67\xa9\xb2\x6b\x68\xd7\x21\x96\x8b\x3f\x20\xd1\xff\xca\x5b\x43\x64\x52\x83\xe6\xf4\x28\xa2\x6e\x3f\xff\xa1\x23\x7c\xd5\xdd\x4a\x14\x20\xbd\xe8\x0c\xed\x54\x19\xb4\xd7\xdf\x77\xa2\x8e\x44\xef\x8e\x97\xec\xfb\x43\xfd\xa3\x23\xe4\x34\x17\x5e\x0a\xee\x1b\xec\x24\x9b\x58\x15\x0c\x6e\x06\x48\x3f\x3a\x2c\x27\x89\x4d\xab\x5b\x42\x9e\x19\x0f\x54\x75\xcf\xd6\x3e\x7f\xe8\x28\xcf\x51\x3c\x75\xac\xd5\x83\x50\x64\xfc\x67\xaa\xdd\x26\x89\x0f\x6a\xe8\x54\x13\x37\xbf\x9a\xe7\x20\xf7\x16\xb9\x9c\x3b\xab\xb0\x67\xd8\xf3\xd4\x29\xf7\x73\x67\xab\xa6\x23\xc6\x29\xf3\x36\xde\xd3\x75\x03\x80\xb8\xa2\x63\xcc\x9a\x63\x2f\x97\x76\x1a\x61\xe5\x4a\xbd\xd0\xf5\xf3\x5c\x92\x67\xe4\x26\x12\xa6\xca\xee\xa6\x67\x7e\xae\x5f\xdc\xb5\xc9\x73\xcf\x1d\x20\x85\x68\x4b\x8a\x66\x95\x0b\xbd\x14\xb3\x1a\x2e\xab\xbc\xf0\xb1\x70\x72\xb2\x53\x20\x7a\x84\xac\xed\xcd\x11\x9d\x7d\x69\x42\x65\x28\xee\xb3\x09\x00\x82\x43\x77\xd1\xfd\x81\x2a\xad\xe1\xfe\x9d\x6c\xbf\x55\x8a\x38\xa8\x15\x1d\xb4\x8f\x66\x21\x43\x9f\x49\xf8\xea\x92\xa4\x8f\xb0\xdf\x7e\x67\x7f\x1f\x20\x1e\xe8\xf4\x74\xbe\xf3\x22\x09\x7b\x86\x81\x63\x46\xff\xf9\xdc\x64\x55\x92\xbd\x6b\xf5\xe7\xfb\x39\xb2\x99\x42\x85\x9a\x07\x08\x14\x3d\x3f\xcf\x6f\xcb\x5f\x74\x10\xe8\xdf\x50\xce\xc8\xb3\x21\x70\xbf\x3b\x3d\x3d\x23\xd5\xee\xea\x1d\xee\x70\x64\x1f\x41\x75\xcf\x19\xc6\xe4\xc6\x0c\xf9\xb9\xf0\x16\x00\x64\x19\x51\xc3\xbd\x91\x30\x73\x07\xd2\x06\xde\xfb\x34\xc7\x57\x06\x1b\xd9\x4c\x66\x4b\x0c\x45\xa7\x1f\x67\x65\x65\xf4\x51\x55\x35\x3d\x8d\xa2\x06\x88\x0b\xfa\x3c\x71\xed\xf9\xb5\xc1\xec\xc5\x23\x70\xe6\xb0\xa2\xe1\x88\x56\x7a\x1b\xdf\xe1\x0f\x89\x33\x07\x9f\x5c\xa0\x49\xd3\x4c\xc0\xfd\x90\x3f\xe9\x04\x10\x5f\xf4\xae\xbe\xfb\x65\xef\x14\xea\x23\x22\x39\xef\x70\x74\xb7\xd6\x15\xba\xfc\x12\xd3\xb5\xd4\xe8\xeb\xc1\x3f\x28\x6d\x19\x85\x2a\xac\x1a\x0e\x00\xa4\x16\x3d\x9c\xf1\xfd\xc3\x1f\xc7\x9c\x25\xba\xcc\xd5\x2f\xd8\x37\xc8\xa7\x38\xdf\xe7\x4b\x36\x70\x2a\xb7\x13\x98\x20\x31\x66\xcb\xde\x63\x70\x0b\x20\x0b\xe8\x88\x14\x2a\x3f\x6e\xcd\x7a\xfd\x42\xbd\x45\xe2\x85\x03\xaf\x5d\xf9\xde\xd2\x3d\x68\xf3\xbc\x9f\x36\x24\xa3\xf9\x7d\x2b\x2b\xaf\x31\x47\x48\xe8\x5f\xeb\xc7\xd9\xff\x57\xaa\x6c\x28\xf1\xb1\x4b\xc8\x0e\xd1\x0d\xc5\x18\x66\x15\xf9\x43\x4c\xc0\xfa\x89\x5d\x47\x76\x88\x28\xd8\x40\x61\x95\x12\x3c\x91\x01\x5b\x7f\xac\x62\x82\x27\x52\xa0\x1f\x58\xe5\x04\x4f\x34\xc2\xb5\xc2\x2a\x28\x78\x62\x03\x6a\x0d\xac\x92\x82\x27\x02\x20\x81\x59\x54\xfe\x10\xaf\x60\x57\x80\x5d\x57\xfe\x4f\xc8\x5e\x82\x0f\xb3\x62\x55\x96\x3f\x53\x14\xc3\xbe\x1c\xbb\xb6\xec\x10\x89\x7f\x7f\x2b\x86\x51\x5e\xf0\xc4\x7b\x28\xfd\xb0\x0b\xcc\x0e\xe1\x03\xfb\x08\xec\x1a\xb3\x43\x94\xc1\x2d\xc7\x2a\x33\x78\xe2\x37\x0c\x2b\xcc\x42\xf3\x87\x88\x80\x04\x76\xa9\xf9\xb3\xe5\xd0\x73\xac\x6a\x83\x27\x96\xe0\x2b\x49\xb0\x0b\xce\xce\x96\xeb\xe2\xa7\xc0\x2e\x39\x3b\x53\xf4\x42\x5d\x8d\x55\x75\xf0\x44\x3f\x39\x7c\x07\x37\x66\xf5\x91\x67\xf5\x24\x24\x70\xc1\x01\xa4\x03\x9d\xf6\xf7\x1f\xf8\x70\x68\x0f\x47\x9f\xae\x0f\xc5\x50\xa5\xd4\x78\xde\xe1\xdd\x3d\xb1\x3d\x5a\xe2\x64\xd5\x35\x6f\xdb\x57\x9a\x12\x1b\x2e\xe2\x00\x32\x83\x56\x22\x01\xc1\x26\x86\x2e\x2f\x39\x5b\x4f\xf6\xc4\x7c\x7b\xb4\xc4\xa1\x77\x5b\x8a\x0b\x78\x32\xdd\xf9\xf1\xed\x6d\xe3\xa0\xfe\x46\xf4\x49\x1c\x40\x00\x5a\x8a\x98\x71\x49\x48\x3c\x63\xb6\x4c\x17\x31\xf2\x08\x31\x92\x77\xbd\x54\x3d\x39\x70\xeb\x41\x00\xc5\x5c\xeb\x8c\xde\xb8\xe3\x4a\xbd\x0c\x0e\x20\x7e\xe8\xf1\x48\xda\x89\x4d\xf2\xdf\xbe\xbd\x06\x1a\xdd\xef\x34\x7c\x6e\x73\x8c\xa7\x91\x7c\x7c\x10\xb9\x67\x6d\xfd\x5b\x41\x77\x5e\xa0\xdb\x2c\x0e\x20\x2b\x68\x7b\x24\x86\xf7\x10\x0c\xea\xbc\x21\x53\x2d\x09\x35\x36\x1f\x3e\xce\x69\xdb\x94\x6a\x71\x94\x4f\xd8\xa6\xb4\x7f\x04\x29\x72\x8d\x27\x17\xfa\x37\x37\xf1\x0b\xda\x01\xd3\x26\x96\xa3\x78\x62\x06\x9e\x08\x2c\x57\xf1\x04\xf8\xfb\xb6\x6b\x0c\x67\xf1\x84\x1f\x24\xb0\xdc\xc5\x13\x2b\xd0\x2a\x6c\x95\xb1\x43\xb8\xc2\x7c\x83\x29\x34\xfe\x10\x85\x30\x6d\x62\x4b\x8d\x1d\x02\x07\xaf\x5f\xb0\xd4\x06\x9e\xf0\x80\xfb\x81\xa9\x37\xfe\x10\xde\xf0\x3d\x5c\xd8\x92\x63\xe7\x9c\x32\xc2\xab\x7b\x0c\xd1\x81\x9f\xc2\x05\x26\x5a\x6c\xd9\xb1\x43\xf8\xc2\x93\x8d\xad\x3c\x76\x88\x5a\x48\x60\x89\x0f\x3c\xb1\x40\xb8\xb4\x48\xb9\x83\xd0\xcd\x8f\xcc\xab\x11\xd0\x8a\x1e\xeb\x9b\x4a\xbb\xcb\xbe\x62\x79\xad\xe5\x52\xfb\x83\x86\x13\xb9\x97\xd4\x6b\x77\xcf\x26\x3e\x3d\x05\xe4\x07\xb7\xb4\x75\x83\xe9\x9d\x00\x52\x82\x6e\x39\x2d\xf3\x87\xe8\x84\xaf\xb9\xa7\x9c\xf9\x4a\x94\x67\x47\x16\x48\xb3\x4e\xc3\xd9\xe7\x3e\x7b\x6b\xfa\x5e\xfc\xb5\xb3\xa7\x86\x2e\xac\x01\x64\x18\x2d\x01\x2d\x7c\xab\x56\xd9\x1e\xec\x5b\x3a\xdb\xe1\x63\xd6\xe2\xd5\xd2\xba\x4b\xdc\xa6\x67\x4e\xc9\x9d\xc8\x92\x54\xa6\x4e\xf7\xa1\x6e\x26\x40\xe6\xd0\x9f\x9e\xba\x8b\x7a\xaa\x2c\x39\xe9\xa9\xd8\xd0\xd4\xb1\x2a\xd2\x8d\x8a\xab\x0f\x44\x2f\x2d\x24\x52\xfb\xb5\xa5\x48\x1d\xf0\x9b\x25\x62\x01\x00\xf1\x44\x8b\xb4\x28\x83\x0b\x9d\x61\x56\xc8\xbd\xca\xfe\x80\xb5\xb4\xac\xcc\x0d\xd1\x22\xe1\x6f\xc3\x7d\x77\xcf\x70\xbc\xe4\xbc\xb3\xec\x21\xf5\x02\x20\xcd\xe8\xcc\xb1\x6c\x3f\x1c\xb8\xb4\x94\x20\x4b\x36\x42\x25\x11\x63\x99\x62\x11\xf3\xe1\xfd\xe2\xb4\x69\x98\xa7\x8a\x7f\x2e\x65\xff\x24\xee\x0b\x00\x48\x0f\x5a\xd4\x45\xe7\x34\x6a\x79\x7c\xca\xf2\x02\x24\x35\x06\xbc\x0d\x52\xe9\xcb\xe1\x19\x6c\x69\xf7\x86\x07\x9f\x5b\xa6\xd3\xce\x14\x30\xf1\x03\x64\x18\xfd\xf1\x25\x27\x9e\xbc\x31\xcc\x6f\x56\xa4\x0d\x78\xb4\xec\x4f\x10\xce\xb7\x97\x92\xbf\xbe\x21\x97\x96\x22\x33\x9c\xe7\x78\xa4\x32\xf7\x0f\x00\x64\x4f\xa1\x2f\xa6\xc6\xeb\x4b\x2b\x35\xf6\x70\xec\xd3\x89\x4a\x24\xed\x6a\x59\xcc\x95\xf6\x4b\x19\x29\xd7\xb9\x61\x6a\x13\x61\xb2\x92\x54\x41\x01\x90\x22\xb4\xde\x2d\x29\x49\x79\x38\x21\x6e\xff\xc3\x9b\x34\x58\xfa\x8e\xf8\x94\x4b\xc6\x6d\x77\x89\x8b\x74\xf1\xda\xf7\x53\x05\x4f\x18\x79\xf7\xd4\x6d\xef\x2f\x7a\x2d\x7f\x39\x39\x18\x0e\xad\xdb\x7a\xcd\x85\x4a\x9d\xda\x4f\x69\xef\x3c\xfb\xa3\x36\xc0\xde\x3b\x9a\xee\xa3\xac\xe5\xe5\xaa\x23\x51\xc7\x71\x00\x89\x43\xaf\xa5\x24\xcd\x6a\xeb\xd8\xfc\x3b\xba\x78\x4b\x8d\x4e\xc6\xcc\x34\x2e\xce\xb5\xa8\x58\xf1\x30\xe2\x5f\x03\xbb\x79\x19\x9f\x91\x36\x73\x00\x80\x74\xfc\x67\xfc\x82\xdc\xad\xbd\x7d\x23\x82\x61\xca\x16\x1f\xf7\x51\xfb\x3c\xbc\x22\xf8\x38\x54\xcd\xcd\x4b\xd6\x23\x1e\x19\xa6\xd0\xe7\xd3\x05\xc8\x3a\xda\xfc\x2e\x49\xd1\x08\xab\x53\x7b\x9e\x31\x29\x78\xfb\x91\x3c\x17\x67\xd6\x3b\x59\x9c\x43\x7d\xcd\xee\xfe\xd0\x79\x9d\x7d\x2e\x07\x63\x76\x39\x01\x59\x7b\xd4\xf0\x63\xae\xe6\x52\x6e\x53\x14\x81\xf9\xeb\xa7\x73\xe9\x18\xf4\x42\x5a\x71\x82\x44\xde\x6e\xe1\x24\x32\xae\x7b\x24\x8f\xcd\x13\x5c\x01\x48\xe6\x7f\x5e\x38\x78\xbd\xd7\x51\xe6\xb8\x53\x5c\xfb\xe9\x0e\x90\x69\x70\xbf\x6e\xc8\x27\x38\xfe\xce\xda\x75\xe1\x31\xea\x03\x0c\x2b\x4f\x48\xc2\x00\xf2\x0e\xdd\x6e\x3e\x90\x4b\x28\xd8\x90\x7c\xfd\x9d\xc8\xb7\xa9\x80\x5b\xed\x73\x39\x69\x4b\xb7\xc8\x2e\x89\x5b\xcb\x96\x97\xb6\x38\xc5\x7e\xca\x3d\xc5\x01\x24\x07\xbd\x96\xc2\xeb\x44\x72\xdf\x76\x67\xba\x54\x47\xa5\x6b\x52\xad\xd0\xef\x3e\xed\xbb\x51\x6a\x36\xbd\x7e\xf4\x6d\x0f\x85\x6b\x93\x06\x4d\x3c\x00\x48\x0e\xba\x11\x53\x0a\xa9\x6c\x2c\x2e\xa0\xa2\xe6\x56\x51\x7d\x5c\xa5\x12\xea\x66\xc7\xb8\xc6\xf5\x99\x79\x56\xf6\xde\x31\xa9\x81\x6e\x1b\x65\x1f\x80\x0c\xa1\x03\x67\x9f\x1f\xfd\x7c\xba\x35\x53\x72\xfb\x4a\x18\xf9\xcd\x29\x43\xa9\x33\x7d\x5e\x55\x6a\x43\xec\xda\xcf\xaf\xa5\xb2\x56\x7d\x1b\xcb\x07\x00\x79\x89\x1e\x6f\x91\x69\x1f\x7f\x26\x95\xed\xa5\x45\x93\x32\x85\x26\x9d\xd8\x0f\x9f\x54\x8a\x68\x5d\x07\x36\x87\x2c\x87\x3d\x74\xe2\xbe\x93\xb7\x00\x12\x8c\x1e\xce\xe4\x58\x92\xe9\x72\xa8\xe5\x4b\xc8\x87\x77\xe5\x24\xb4\x01\x64\x5c\xc5\x8f\xc2\x2f\x5e\x62\xf5\x78\xe1\x98\x32\xf1\x76\xc9\xee\xb1\x13\x40\x5c\xd1\x87\x96\x53\xe9\x06\x9d\xc6\x53\x97\x54\x3e\x72\xf7\x93\x94\x86\x57\x55\x86\x56\x99\x6e\x78\x7d\xd6\xce\x4c\x3a\x53\x9a\xa5\x39\xb0\x44\x00\x90\x34\xb4\xb3\x9a\xf2\x7b\x5b\x1b\x1b\x1e\xe4\x3a\x4e\xaa\xd5\xc8\x91\xcb\x4a\x95\x4d\x29\xd1\xbe\x24\x61\x7c\xe5\xcb\x29\x1d\x73\x63\xed\xbc\x05\x40\xba\xd1\x71\x63\x10\x57\xd4\x9f\xfb\xd1\x4a\x50\xa7\xc6\x61\x60\xc3\x6f\xc5\x70\x90\x20\xc0\x39\xa7\x94\x97\xce\xe7\xeb\x96\x56\xf6\xdc\x8f\x47\x00\xc8\xd2\xa0\x86\x7b\x74\x9c\x67\x21\x9c\x6d\x2d\xf3\x19\xae\x0a\x3b\x9d\x66\xd5\x54\x6e\xf9\xe0\xd1\x38\xe7\x58\xcc\xa0\x5e\x26\xf7\xde\x6b\xee\x3f\x01\x12\x82\x0e\x04\x15\x5b\x87\xa4\x14\x86\xe2\xd1\xc4\x8f\x87\xbb\x4b\x99\x54\x67\x6c\xa8\x0f\x4f\xd1\x16\x2e\x81\x69\xa6\x16\x8d\x30\x0b\x23\xd3\xed\xa2\x84\xee\xb0\x63\x4e\xe5\xd7\xda\xed\xfa\xb5\xb2\x7b\xa2\x30\x6e\xa5\x50\xfe\x3d\x63\xf2\x8b\x2b\x86\x89\xe9\x63\x55\x1a\xb4\xc0\xd8\x84\xfc\x25\x0e\x20\x41\x68\xeb\x7d\x67\x83\xa9\xec\x1f\x37\x46\xfb\xb3\x8e\xab\x52\x0c\xf1\x74\x7e\xbc\x2c\x2f\x70\x76\xd9\xfa\xc1\x32\xe7\xc1\x7b\x5e\x49\xfc\x46\x38\x80\x7c\x41\x8b\x27\x57\xfa\x13\x72\x11\x1a\x1d\x63\xbd\xbf\xe4\x23\x36\x7d\x06\x88\xcb\xfd\x2f\xb2\x79\xed\x4e\x39\xff\x33\x9b\x8f\x21\xee\xa7\x5e\xb7\x13\x40\x5c\xd0\x29\xe7\x01\xcf\x9b\xd0\x6a\xeb\x4d\xdb\x5e\xc9\x97\x52\x45\x26\x45\x11\x71\xd9\xea\x22\xb5\x6d\x8b\xa7\x24\x97\xbc\xe9\x4c\x75\x46\xf7\x03\xe4\x15\x3a\x30\x05\x24\xcd\x5e\x2b\xd6\x6a\x72\x99\x7c\x67\x4d\x45\xee\x66\x3c\x2e\xea\x31\x64\xbe\x79\xc9\xde\x22\xf8\x50\x57\x61\xe6\xa9\x88\x2a\x80\x24\xfc\xe7\xce\x8a\xf7\xc7\xc1\x17\xfa\xee\xc6\x93\x69\x15\x1f\x1d\x53\x92\x2d\x68\x2b\x9e\x6b\x8f\x8f\xf4\x9f\xcf\x33\x61\x7c\xe3\xb0\xb0\x8b\x67\xbb\x00\xa3\xcf\xc9\xda\xe5\x70\x35\x8f\x69\x35\xed\xb5\x1b\xc4\x79\x5a\x9f\x6e\x99\x19\x55\xe8\xbd\x67\x77\x89\x71\x5c\xf0\x8b\x8e\x2c\x28\xd7\xb6\xc0\x01\xa4\x1c\xbd\x3a\xb4\xb1\xd2\x24\x5c\x3a\x27\xba\x0d\xfa\xf4\x29\x66\xbb\x7c\x6f\x5e\x55\xe9\x0d\x3a\xed\xd1\xec\x2b\x4c\x71\xdc\xa4\x8b\x61\x7a\x00\x07\x90\xef\x68\xf3\x27\x23\xe9\x42\x6f\xae\x2d\x32\x52\x69\x94\x19\xa7\xed\xab\x59\xec\x38\x4d\xfd\x96\xf8\x6b\xaf\x79\x43\xe9\xb3\xe4\x2b\x7a\x06\x67\x01\x40\x1c\xd1\x91\x5c\x5e\x1e\x2c\xc3\xbd\x87\xb2\x58\xf8\x41\xd8\xc3\xa3\xda\xb3\x86\xc2\x09\x41\x84\xc7\x5a\x1a\x97\x71\xe7\x3c\x52\xf2\xdf\xb3\xb4\x02\xe4\x27\x7a\xf1\x59\x1c\x16\x3f\xa6\x4a\x64\x54\xde\xb2\xe5\xb1\xe1\x9e\x1f\x24\x2f\x9b\x09\x39\xfe\xf3\x04\x35\xe7\x45\xa2\xf9\x07\x57\x9f\xb1\x5d\x46\x3f\xb7\xb4\x2e\x31\x5b\x6c\x9d\xe5\xa6\xec\x18\x3d\x71\xb2\xf7\x59\xbe\x7a\x4e\x6b\x55\x10\x1f\x21\x4e\x54\xe9\x7c\x8e\xc3\x1b\x07\x04\x07\x90\x78\xf4\xd5\x89\xe6\x60\xec\xdc\xe9\xbd\x07\xc9\x92\xaa\x7e\x5c\x0b\xe9\x7b\x30\x32\x1b\x30\x39\x11\xd7\x74\x7f\x94\xd9\x48\xef\xfa\xb7\x6b\x33\xd3\x00\x20\x5e\xe8\x33\x75\x9f\xde\x98\x93\x7a\x2c\x83\xcf\x68\xf6\x99\xea\x77\x1e\xca\xef\xbc\x02\x72\xcf\x99\x24\x4a\x69\x49\x5e\x29\x6e\xb4\x6d\xa4\xfa\x02\x24\x15\x7d\xa6\xf4\x59\x6f\x3f\x8a\x20\xe7\x6a\x8e\x7e\xce\xd0\xf3\x40\xd4\x82\xe6\x56\x56\x1f\xf7\x96\x8e\xcd\x3e\xe3\x12\xd5\x80\x41\xfd\x9b\x9c\x38\x80\x64\xa1\x3f\x5e\xad\x6c\x55\x31\xf2\x10\xd1\x4a\x90\xef\x7a\xef\x59\xcf\xa3\x4f\x5e\x98\xbb\xb5\x88\xa5\x78\x99\x9c\x94\x25\xa6\x5a\x92\x74\xcb\x13\xfa\xd7\xea\xed\xb8\xf3\xbd\x27\x6c\xf4\xb1\x0b\xf8\x0e\x31\x0c\xfb\x2b\xcc\x1a\xfe\x87\x98\x83\x73\x60\x57\xf1\x1d\xc2\x13\x0a\x1e\xcc\x42\xfe\x87\x68\x86\xaa\x18\xbb\x94\xef\x10\x3d\xf0\xcb\x11\xcc\x6a\x8e\xf7\x1c\x7e\x65\x8f\x5d\xd0\xff\x4f\xc8\x9e\x82\x53\x60\x94\x74\xfc\x14\x45\x50\x4d\x62\x15\x75\x3c\xb1\x00\x17\x17\xb3\xac\xff\x21\xe2\xe0\xe2\x62\x17\xf6\x1d\xa2\x03\x12\x58\xb5\x1d\x4f\xac\xc3\x5f\x33\x62\x97\xf7\x9d\xa5\xb2\x87\x5f\xf1\x60\x16\xf8\x9d\x29\x32\x61\x57\x83\x55\xe3\xf1\xc4\x3b\xd8\xe7\x63\x56\xf9\x3f\x44\x0e\x5c\x5c\xec\x3a\xff\x87\x80\x7d\x10\x66\xa9\xff\x43\x0c\xc1\xc8\xc5\x2e\xf6\x3b\xc4\x4b\x48\x60\xd5\x7b\x3c\x11\x0c\x09\xec\x8a\xbf\x43\xb8\xc2\x53\x8e\x5d\xf4\x77\x88\x34\xe8\x39\x66\xdd\xff\x43\x74\xc3\x17\xfd\x60\x97\xfe\x9d\x20\xa1\xc1\x4f\x81\x55\xfc\xf1\x53\x84\xc0\x20\xc1\x2a\xff\x78\xa2\x10\xb6\xbe\x58\x02\x00\x4f\x04\xc1\xd3\x81\x25\x01\xf0\xc4\x17\xd8\xc8\x62\x8b\x80\x1d\xc2\x05\x26\x2b\x6c\x1d\xb0\x43\xbc\x82\xa1\x8b\x25\x05\xf0\x44\x02\xf4\x1c\x4b\x0c\xe0\x09\xdc\xdf\xff\x5c\xc3\x90\x03\x78\xa2\xfc\xef\xad\x16\x96\x20\xf8\x43\x7c\x87\x7e\x60\x4b\x82\x1d\xc2\x11\x06\x3b\x96\x2a\xc0\x13\x3f\x49\xfe\x3e\x7a\x80\xa1\x0e\x80\x3c\x09\xd1\x95\xff\x3f\x64\x39\x8f\xae\xe2\x36\xc7\x6e\xe6\x5b\xfb\x08\x9d\xb2\x7f\x40\x90\x72\x97\x6b\xfa\x5a\x51\xa3\x8c\xa6\x51\x94\xd8\xf5\x0f\x49\x0d\x5f\xd4\xf6\xeb\x4c\xe2\x00\x12\x8a\x96\x4f\x0b\x9a\xe2\x74\xdc\xf5\xb6\x77\x1a\x58\x6d\xaf\xc7\xfb\x77\x2c\x25\xd2\x14\x0a\x51\xdc\x18\xa1\xab\x2f\xde\xfb\x60\x2b\xc9\xf7\xd4\xf6\x06\xa2\xe5\x19\xa3\xc3\xcc\xed\x27\xce\x47\x4a\x68\x6b\xbc\x2a\x16\x5a\x0e\xb7\x73\x2f\xff\x32\xba\xbb\x3f\x2f\x9b\xb1\x8e\x86\x9d\xb0\x28\x5e\x7b\x3b\xad\xa3\xe5\x16\x8f\xeb\xd1\xf8\xfd\xbb\x4c\x44\x1e\xb7\x1b\x22\x07\x1e\x8b\xc5\x1b\x7e\x74\x2a\x3d\xcf\xd7\xb6\xd2\xa6\x9c\xc1\x30\x53\x72\xfc\x85\xd0\xbf\x99\x8d\x5f\xa0\x79\x78\xb6\xb1\x0c\xc7\x13\xa1\x7f\x2f\x39\x30\x4c\x87\x01\x0b\x83\x09\xcb\x78\x58\xc8\xfe\x86\x38\x96\x46\xfb\x43\xc4\xff\x7d\xf6\x0c\x53\xa5\xed\x10\x5e\x30\x0f\x62\x09\x35\x3c\x91\x0a\xd7\x0a\x4b\xaa\xe1\x89\x2c\x32\x78\x59\x13\xa0\x67\x5c\x3a\xaf\x6d\x12\x18\x6a\x6a\x48\x2d\xc5\x20\xa3\x1f\xf7\xb4\x9c\x67\xbc\xf3\x86\xb7\xe7\xeb\xaa\xb6\x20\xd5\xb6\x5e\x20\x7f\x33\xa0\x6b\xf6\xb5\x13\x40\xaa\xd1\xe1\xb7\x76\xa7\x6f\xa2\xaf\x2d\xde\x50\xd6\x9b\x32\xdc\xc9\xbe\xa6\x48\x7d\x84\x23\x3d\xe8\xc0\xe1\xcc\x8c\xa5\x9c\xa6\xb1\x4f\x34\x4b\x00\x69\xf9\xcf\x83\x29\x45\xbf\x27\xc8\xa2\x37\x46\x0d\xcf\xdc\x78\x3b\x99\x23\xfa\xcd\x9d\xfa\xb1\x91\xc2\x41\x40\xe9\x64\xa6\xc9\xb5\x87\xf5\xfe\x14\x40\xc6\xff\x13\xdc\xe6\x66\x71\x75\x5b\xb7\x97\xa9\xae\x20\xbc\x33\x79\xcf\x32\x93\x3f\x5a\x8b\x5e\xad\xbe\x16\x3f\x61\xa4\xdd\xb7\x78\x49\x7c\xd6\x09\x20\x6f\xd1\x1f\x9f\x23\x31\xd7\xc2\xf3\xb2\x7d\x28\xd3\xbf\x71\x93\xad\x70\x6f\xdf\x8f\x37\x83\x9b\xde\x66\x92\xa1\x26\x7d\x42\xb2\xaf\xa2\x65\x4f\x02\xa4\x0d\xad\xdd\x1f\xbd\xa9\xb5\x65\xea\xb9\x12\x90\x48\x9d\x75\x9e\x31\x2b\x3a\xc7\x3c\x72\xe0\xec\xb2\x35\x41\x5a\x5a\x3e\x1f\x8b\x48\x77\xbe\x28\x40\xa6\xd0\x7d\x53\xbf\x7d\xd8\x8f\xe6\x66\xd1\xaa\x8f\xc3\xcb\xdf\x82\xaf\xbe\x8b\x79\xfd\x0c\xa7\x29\x1e\x23\x51\x7f\x40\xd3\x8f\x8b\x50\xdc\xc4\xc1\x09\x20\x7e\xe8\x3e\xb1\xb6\x3f\xa2\xf4\xe5\x78\x67\xf6\x9b\x36\x26\x2e\x27\x37\x0d\xaf\x08\xa9\xd7\xee\xb7\x83\x53\xc3\x44\x86\xe6\xfb\x69\x38\xa9\x6f\x00\x24\x14\xad\xaf\x5f\x99\x7e\x0a\xf2\x18\x2d\x08\xf5\xdb\xda\x24\x60\x68\x4a\x51\xe6\x29\xc8\xad\x66\x7d\x78\x24\xb4\x7c\xb2\x60\x5f\xef\xfd\x5d\xfc\x00\x89\x44\x5f\x76\xdc\xf2\xbc\xe3\x61\x26\xae\xf6\xdc\x3b\xf4\x3b\xa9\xf8\x18\xbf\xe7\x2f\xc4\x5e\x71\xf6\xd8\x49\xe7\xe5\xf8\xaf\xe1\x97\x94\x1a\x2f\x01\x80\xe4\xa1\xad\x21\x0b\xd9\xeb\x39\xf4\x43\x60\xea\x11\x5d\xca\x1d\xcf\x21\xdb\x33\xfa\xeb\x12\xbc\x72\x31\xf9\x91\x72\xc4\x0a\x14\xe7\x29\x2a\x00\x40\x6a\xd0\x4b\x2f\x74\x9f\x73\xe1\xdc\x40\x5f\xa0\xca\x43\x62\x72\x8a\x6a\x63\x85\xa3\x2d\x9b\x9a\x45\x6f\x36\x57\xd4\x0d\xca\x08\x12\xf6\x8b\x77\xe0\x00\xe2\x8c\x3e\xf7\x74\x79\x4c\xeb\x19\xc7\x36\x93\x34\x29\x52\x8c\x3a\xf6\x5d\xac\x60\xd0\x49\xa9\xe1\xc9\x28\x3d\xe0\x59\xbb\xa8\x90\x3d\x56\x7c\x0e\x07\x90\x59\xb4\x39\xc7\x59\x98\xd9\x5c\x6e\xfb\x3c\xc8\x29\xda\x7a\x26\xce\xd4\xc4\x22\x55\x5c\xe6\x56\x1e\x5c\xf3\x4e\xc9\x51\x38\xd5\xf8\x50\x9c\xf1\x76\x5d\x47\x37\x43\x36\x51\xdf\x6e\x6a\xc5\xdf\x9c\x0a\x2a\x04\xa6\x1f\x9f\x91\xf2\x93\x5b\x5a\x26\x9a\xd3\xd8\x39\x73\x68\xd2\xb0\xb4\x33\xce\x9d\xd9\x3e\xc7\xe8\x50\xe8\x4e\x8a\x17\xfe\x75\xef\x94\x24\xd9\x4f\xb5\x7b\x5a\x05\x53\x69\x03\x9f\x4b\x7f\x08\xf1\x09\x65\x87\xae\x28\x58\x24\x28\xaa\xab\x00\x20\x6b\x82\x1a\x1e\xa2\xfd\xfb\x56\x6a\x23\xb7\xd6\x17\x5f\xb9\xbc\xa8\x47\xfd\x08\x2e\xa7\x78\xc5\x3f\xc6\xd5\xf9\x5b\xc7\x98\xca\x07\x41\x91\x6b\x00\xc1\xa1\x57\x67\xcc\x48\x86\x5c\xf3\x38\xf3\xb9\x6f\x27\x2b\x3b\x9f\x87\x45\x1d\x3c\x29\x3a\xe7\xde\x70\x4e\xbe\xcf\xa4\x95\x43\x48\xd0\x2e\x35\x03\x00\xa4\x05\x1d\x3a\x5b\xb4\xca\x3e\xeb\x6f\x63\x62\x95\x82\x0d\xb9\xfa\xce\xdb\x9d\x6e\xd6\x20\x2a\x5e\x9f\xca\xfd\xf9\xc6\x8c\x3f\xce\x3c\xab\x51\x13\x20\x3d\xe8\x1e\xba\xef\x6d\x9e\xc4\xf5\x55\x4d\x3f\xbf\xb6\x9f\x4d\x9f\x97\x16\x0f\x7f\x64\x7a\x28\x70\xc3\xb5\xa8\xe6\x25\xa7\xc5\x09\x66\x03\x2f\x4b\x1c\x40\xde\xfc\xe7\xc7\x83\x03\x9d\xcd\xd6\xc7\x53\x97\xe2\x53\x43\xd3\x3f\xf7\xd7\x6d\xd0\x2b\xba\xf1\x5a\xcd\x1e\x4f\xa8\x49\xfd\xf2\xc3\x9c\xb8\x58\xc2\x09\xc8\x52\xa3\x86\x6f\x28\xbf\x8c\xe9\x35\x2c\x1d\x13\xe3\xeb\x55\xdd\x77\xc6\x16\x49\x37\x1f\x98\x28\x74\x71\xbd\x79\xe7\x8b\x3b\x83\x13\x61\xfd\x23\x80\x14\xa1\x97\x3e\x6a\xf1\x91\xd3\xde\x96\x5d\x2d\x34\xee\xf9\x0e\x12\x37\x97\x56\x37\x84\x23\x3c\x74\x4a\x9d\x67\x83\x25\x2a\x11\x09\xe2\x96\x87\x00\xe9\x42\x1b\xbf\x32\xf4\x3b\xfe\xd5\x4a\xa2\xc0\xda\xf5\x02\x97\xd7\x84\x49\xf6\xef\xeb\x42\x71\x8a\x0a\x7d\x4e\xdc\x0d\x7d\xb2\x15\x22\x8b\x52\x00\x20\xed\xe8\x40\xf6\x1d\x2d\x4b\x5f\x4d\x8b\x8d\x74\x2a\xb7\x3d\xf5\xda\xe1\x2d\x2d\xc3\xae\x3a\xfa\x8e\x73\x08\xcb\x27\xa7\xfa\xc2\x1a\xba\x3e\x47\x80\x0c\xa1\x97\xf2\x2b\xf8\xb4\x59\x2c\x26\x2c\xf8\xa9\x4d\x39\x25\x49\x75\xb9\xeb\x7b\xd2\xae\xad\xe8\xa8\xe6\xef\x66\xac\x4f\x82\x84\x9b\x19\x12\x9d\x00\xe2\x8a\x3e\xe4\xf4\x6e\x2e\x99\x38\xd5\xc6\xad\x52\x53\xa2\xc3\x93\xa2\xe7\xe8\xc5\x6e\x4b\xe4\x28\xd0\x90\x3d\x64\x3d\xdd\x6e\xb9\xd9\x34\xaa\x0a\x90\x6f\x68\x6b\x16\xbd\xd9\xf4\x0b\xe3\x7f\xbf\xe1\xee\xb2\xd1\x49\x3e\xf0\xea\xec\x18\x8f\x9c\xea\x0d\x47\xb6\xbe\x97\x53\xb6\x4f\x8d\x12\x14\xbe\x02\x64\x12\xed\xac\x12\xf9\xd5\xc0\xf9\x96\xdc\xb6\xe4\x60\x2d\x90\x47\x3e\xa5\x79\xd9\x7a\x51\xb7\xc0\x8c\x67\xc4\xa2\x62\xf4\xb6\xe9\x49\x2f\x35\x27\x80\x78\xa1\xad\x97\x8a\xbd\xd2\xd6\xeb\x1f\x6e\x71\xc7\xa3\x9d\x24\x8d\xbd\x30\x2f\x25\xed\x6a\xe9\x11\xe6\x7b\xe3\xf5\x85\x1b\x9d\x67\xf3\x5f\x66\x03\xc4\x1b\x7d\x4a\xaa\xed\x28\x87\x49\xc9\xcc\xbe\xc8\xed\x0a\xa4\x6c\x1c\x74\x2d\xbd\x32\x74\x2b\x69\xca\xf5\xe0\xca\x2c\x6b\xcc\x7c\x77\xc5\x53\x43\x80\x7c\x43\x87\x65\xb2\x78\x4b\x65\x9e\xf5\x71\x91\x05\xad\x2f\x64\x7b\x08\x0d\x42\xf8\x2d\x97\x1b\x0e\x27\x94\x6b\x91\x97\x53\x4a\x35\x48\xe4\xb0\x3a\x01\x04\xa0\xd7\x26\x65\x32\xcb\x2e\xb6\xe7\xea\x70\x74\x41\x79\xb1\x80\xd4\x54\x91\x55\x22\xeb\x21\x95\x22\x5e\xb6\xdc\xa0\xe3\xec\xaa\x77\x2e\xfc\x06\x48\x01\x7a\xf8\x54\x46\x42\xe0\x1b\xdb\xf5\x3b\xf7\x46\xcb\x0c\x3c\xca\x1c\x6f\xec\xc5\x9d\x2c\x1f\xca\xbc\x2f\x33\xd7\xdb\x9c\xfa\xe2\x6e\x70\x22\x40\x4a\xd0\x09\x2d\xca\xf2\xc5\xa4\x34\x0f\x65\x27\x10\x50\xab\x49\x39\x60\x41\x3d\xdb\x27\x7a\xb6\xf7\xf1\x98\xd1\xf9\xef\x1d\x29\x2f\x64\xe6\xbc\x01\x40\x52\xd1\x37\x2f\xd5\x02\x3c\x3d\x11\xaa\x13\xb3\xda\x1f\x4f\xea\x5d\xbb\x68\x4d\x31\x2a\x4d\x27\xd4\xa9\xa0\x6a\x37\xd9\x75\x97\xee\x6e\xf3\x34\x17\x40\xc6\xd1\xd6\x9c\x8e\x10\xd7\xa7\xac\x6c\x56\x08\x08\xd0\x5e\x95\x1c\xbd\x14\xae\xe4\xe1\xc3\xa9\x77\xcf\x78\x36\xc0\x5e\xc3\x48\xe1\x55\x02\x29\x0e\xc8\x2a\xa1\x57\x9e\xdf\x87\xbd\xb6\x9c\xb4\xe5\x17\x71\x23\xa1\x85\xfd\xcd\x98\x89\x8a\x61\xfa\xfa\x43\x4f\xf6\x69\x19\xdf\xeb\xb4\x88\xa0\xd1\x77\x02\x88\xe3\x7f\xee\xb1\x66\x56\x8f\x74\xaa\x2b\x98\x3e\x0b\xdc\x25\x41\x76\xed\x02\x50\xec\x9b\x11\x31\x4d\x79\x4d\x9a\xc0\x92\x39\x33\x4f\x12\xa3\x03\x90\x42\xf4\x4e\x2d\x94\x44\xd1\xf6\x3f\xd0\x7a\x98\xd0\xc0\xde\x2f\x19\x1a\xab\xfe\xd1\x36\xe9\x81\xea\xcf\x63\xa9\xc7\xb4\x22\xa9\xda\x6f\x34\x16\x03\xa4\x09\xbd\x36\xc6\xe6\xb5\x19\x16\x4a\x11\x6b\x1d\xba\x62\xb7\xae\x4b\xec\xa2\xb8\x72\x86\xf3\x7b\xc4\x80\x8c\x4e\xf2\xa1\x87\x76\xc4\xa1\xdf\xff\xff\x83\x11\x74\x3a\x63\xa3\x8d\x2f\x95\xce\x60\x25\x5b\x0b\xc9\x23\x39\x7a\x47\xa9\x61\x24\x4a\x30\x3f\x73\xfd\xd6\xe9\x5d\xb5\xa9\x7a\x72\x9b\x6b\x5a\x38\x80\x4c\xa1\x33\x02\xe2\xab\xa2\x93\xb2\x99\x5f\x38\x91\xcd\x77\xbe\xe6\xeb\x5d\xf3\xcb\xdc\x5d\x3c\xe5\x3c\x07\x2c\x24\x63\x0e\x31\x07\xea\x9f\xa7\x17\xfe\xc7\xf2\x2d\x47\x48\xf0\x7f\xa5\x50\x4d\xbe\x24\xfc\x8f\x25\x1c\x8f\xb4\x10\xe1\x11\xac\x32\x0e\x91\x71\x38\x0b\x66\x25\xc7\x23\x6f\xe1\x2c\x98\xd5\x1c\x8f\xb4\x91\xe0\x11\xac\x8a\x0e\x91\x29\x42\x3c\x82\x59\xd4\xf1\x88\x1f\x31\x1e\xc1\x2c\xec\x78\x24\x94\x0c\x8f\x60\x16\x77\x3c\x12\xb9\x0b\x8f\x60\xd6\x77\x3c\x92\x07\x0d\xc3\xaa\xf1\x10\xa9\x81\xfb\x82\x55\xe6\x21\xe2\xbc\x1b\x8f\x60\x55\x7a\x88\xcc\x42\xc3\xb0\x8a\x3d\x44\xd2\x28\xf0\x08\x66\xbd\xc7\x23\xaf\x60\x7f\x80\x59\xf3\xff\x20\xb2\x26\xf8\x49\x30\xcb\x3e\x7e\x12\x1c\x5c\x30\xcc\xca\x0f\x8f\x0b\x0c\x31\xac\xea\x0f\x91\x9e\xbd\x78\x04\x4b\x00\x40\xe4\x0d\xec\x75\x30\x45\x00\xde\x7b\x6a\xfc\x24\x98\x3a\x00\x3f\x49\x11\xdc\x15\x4c\x2d\x80\x47\xba\xa0\x2b\x98\x72\x00\x8f\xb4\xc3\xd0\xc7\x92\x04\x10\x19\x82\x6b\x8c\xa9\x0a\xf0\x88\x2b\x4c\x16\x98\xca\x00\x8f\x7c\x83\x86\x61\xa9\x03\x88\x4c\x42\xf7\x31\x05\x02\x1e\xf1\x82\xbe\x60\x8a\x04\x3c\xe2\x0d\x0f\x18\x96\x50\xf8\xeb\x0b\x0c\x64\x4c\xad\x80\x47\x00\x5c\x31\x4c\xbd\x80\x47\x0a\x20\x82\xa9\x19\xf0\x48\x09\xcc\x95\x98\xb2\x01\x8f\xa4\x92\xe2\x11\x2c\xe9\xf0\xb7\x20\xc1\xfb\x32\x2c\xf9\x00\x8f\x8b\x12\x7e\x12\x4c\x01\x81\x9f\xc4\x11\x6e\x3e\xa6\x88\xc0\x23\x85\x70\x27\xb1\x84\x04\x44\x9a\xe0\x82\x61\x69\x89\xbf\xdb\x02\x6b\x2b\x96\x9c\xf8\x5b\x28\xf7\x2c\x05\xff\xf9\x13\xf1\x82\xe2\xa7\x13\x36\x47\x1d\xa3\xf9\x7e\x7f\x08\xa9\x65\xfe\x2d\x72\x57\xc9\xef\x45\x62\xf4\x99\x39\xe0\xf4\xb9\x3c\xc7\x5a\x5c\x0b\xc8\xbf\xff\xb0\x35\x18\xcc\x84\x03\x48\x0a\x5a\xc4\x7a\x5f\x9f\x89\x61\xe2\x16\xf3\x68\xfe\x41\xbe\xc4\xfe\x88\xed\xa3\xf0\x95\x12\x57\x3e\xf6\x09\xb6\xab\x6a\x3e\x4f\x8e\xbf\x4e\xe3\x73\x02\xc8\x2b\xb4\x50\x6b\xfd\xf0\x44\x8f\x35\x86\xec\x06\xb7\x76\x43\xc2\xfe\x19\x03\xe2\x30\xe1\x8b\xd9\x6b\x29\x43\xad\x5f\xf7\xed\xed\x7e\xcc\xaa\xcc\x03\x90\x6c\x74\xa3\x6a\x74\x92\x2e\x3a\xa8\xb7\x5a\x25\xe6\xb9\x54\x0f\x71\x97\x9c\xea\x4d\xba\xd3\x75\xa7\x1f\x7c\x24\xe3\x7f\x7c\xb5\xfb\xb2\xd8\x0b\x3a\x80\x7c\x45\x0f\xdf\x6c\x55\xa9\xa5\x8e\x3a\x1f\xc1\x29\x4d\x3a\x9f\xb5\xc8\xb0\x37\x2d\xe5\xc2\xe8\xf3\xf1\x53\x4e\xe6\x4d\xbf\xd5\x2c\xb7\x58\x0f\x3b\x01\xc4\x05\xdd\x2c\x6d\x0e\x8b\x54\xda\x16\x08\x64\x38\x0f\xba\x04\x29\x5d\x1e\xf0\x70\x62\x2f\x27\xb4\xb8\xc4\xcc\xf2\xd9\x29\x35\xa8\xee\x56\x69\x36\x40\x92\xfe\xf3\x7b\x06\x32\x4d\x99\xee\xe1\x7b\x9a\x3e\xbf\x96\x76\xdf\xbf\x6b\x7e\x9b\xab\x5d\xed\x53\x52\x09\xb7\x7e\x79\xca\x97\xc1\x32\x3d\x5f\x01\x80\xac\xa1\x7d\x8d\x16\xf9\xd4\x39\xaf\x18\xf7\xe1\xa9\x29\xb3\x12\x5d\xf3\x6a\xb7\xf7\x25\x92\xe9\x3d\x6f\x4a\x1d\xc6\x0a\x4c\x92\x4a\xd2\x6a\xa2\x70\x00\x99\x47\xcb\xcc\x91\x73\x93\x3a\x1d\xbe\x57\x66\x14\x8b\x49\xfd\x3d\x4f\x5e\x17\x51\x1c\xc9\x41\xd8\x18\x04\x1f\xab\x5a\x0c\x47\xe6\x38\xed\x16\x07\x00\x49\xfc\xcf\x43\x05\x4f\xcb\x70\x5b\x15\x75\x2f\xcf\x53\x1e\x56\xb0\x19\xcd\xeb\x50\xfa\xae\xf7\xf5\x4e\xe4\xb5\xf6\x59\x75\xf7\x2f\x1f\x59\x9f\xbc\x00\x48\x39\x5a\x65\xba\x71\x92\xa8\x3c\x15\x56\x76\xa2\x57\x97\x04\x99\x21\x16\x31\xde\x5f\x62\xf3\x48\x2d\x38\x8e\xd4\x3e\xfb\x2e\x4f\x73\xc9\xb6\x13\x00\xc4\x0d\xdd\xfd\x94\x18\x39\x0a\x8f\xfc\x1e\xad\xce\x5e\x94\xbb\xf6\x45\x4b\x86\xec\x45\xdd\x1b\x73\xa3\xd0\xf4\x7b\xc7\x16\x7e\x1e\x48\xd1\xbf\x12\x04\x90\x76\xb4\xb7\x6e\xa3\x6b\x22\xcb\x0f\xe4\x44\x39\x22\x87\xda\xb8\xc6\xde\x4c\xe2\x8a\x69\x7e\xb7\x08\xb4\x21\x1f\x65\xd6\x55\x78\xa5\xbf\x29\x38\x01\x24\x14\xbd\x57\x59\x12\xaa\x3d\xd1\x69\x7d\x35\x42\x2b\x45\x0e\x3d\xaa\x0f\x66\x27\x7e\x1b\x08\xeb\x52\xc9\xd7\x25\x90\xaf\xfe\xf0\xb8\xd0\x48\x02\x90\x72\xf4\xda\x3f\x77\x1c\x1a\x7a\x60\x6a\xaf\x5c\x20\xe8\xf1\xa5\x83\x45\xb6\xea\x87\xc5\xb3\x6a\xee\xd8\xf2\xcd\xa2\xf3\xaa\x5c\x26\xec\x91\x7c\x00\x69\x45\x1b\x4f\xd5\xfa\xeb\xca\x98\xdd\x3e\x7a\xb1\xdb\xc6\x8e\x61\x1e\x86\x01\x45\xc3\x37\x19\x18\x8f\xf4\xde\x49\x69\xfe\xc0\x56\x48\xae\xb6\x84\xfe\x6a\x95\x52\x99\x79\xa2\x8c\xcf\xfd\x92\x92\x4f\xa2\xf5\xe3\x68\xa3\x00\x2f\x19\xe3\xcc\xdb\x48\x25\xff\x47\x35\x89\x36\x25\x81\x42\x00\x64\x05\x50\xc3\x39\x1c\x08\x0b\xb3\x04\x8c\xc3\xc9\x75\x14\x5f\x29\xdc\xe6\xad\x11\x39\xf1\xfe\x42\xc2\xa9\x0f\x3f\xe6\xb3\x96\xa8\x72\xdf\xd5\x04\x02\xa4\x0a\xbd\x2c\xef\x13\xca\x32\x57\xeb\x59\x72\xfc\x8c\x6a\xd4\x59\x5e\xc7\xd0\x10\xc8\x79\x32\xe7\x13\x09\x1d\xe1\x2c\x62\x93\xa4\xc3\x45\x76\xe2\x80\xac\x0c\x6a\xb8\x43\x6a\x41\xdb\xc9\x0d\x31\x8e\x9b\x1a\x4f\xfc\x46\x1b\x1a\x65\xe3\x4a\xc4\x0c\xa6\x3d\x87\x32\x7b\x68\xe6\xc3\xba\x46\x3e\xd5\xa2\xaf\xa0\x8a\x4f\xdf\x2c\x9e\xaf\x67\x72\xec\x1a\xd2\xa8\x90\x68\x29\x97\xfe\x1e\x72\xbe\x62\x53\x45\x6b\x39\xcb\xc2\x28\xfe\xe6\x30\xef\xb6\x78\x46\xef\xff\xbe\xf6\xc7\x17\x8f\x88\xed\xbe\x78\x6d\x43\x5d\x98\x75\xf2\x77\x83\x4b\x93\x8c\xa5\x52\x89\x79\x81\xcb\xf2\xe1\x5e\xd3\x99\x31\x4a\xf4\xd6\x77\xce\x2c\xd4\xef\x52\x88\x5c\x91\xf2\x52\x21\x6f\xa6\xfd\x94\xb8\x6a\x92\xc5\xfc\x40\x83\xf5\xa5\x54\xb5\x41\xda\xd2\xd9\xa6\xed\xdc\x81\xde\x1c\x09\x92\xde\x8c\x5f\xf2\x93\x81\x04\xb9\x43\x51\x8e\x03\x93\x3c\x8b\xa5\x6f\xad\x70\x3d\x25\x73\x91\xdf\x1a\x54\xc2\x08\x57\x9f\x01\x80\x84\xa3\x1b\xa4\xf2\xd3\xb5\x1f\xcc\x79\x09\x7e\xfd\x92\x9a\x26\xbc\xa3\xdd\xce\x68\xc6\xc2\xf1\x6d\xbe\x7b\xe3\xac\xdf\xbc\x51\xef\x25\x9d\x74\x1a\x80\xb4\xa3\x43\x45\x7e\xe0\xe6\x2e\x07\xa2\x60\x9f\x1f\x0a\xd3\x31\x6e\x8f\x55\x29\x7d\x54\xa3\xbc\xd2\x77\xd9\x5e\x9e\xcb\x67\xd0\xf0\x2e\xa7\x6a\x72\x02\xb2\x6a\xa8\xe1\x3a\xa3\xbf\x7c\x35\xcb\xaa\xe7\x84\xbe\xcd\x0b\xdd\xd5\xd7\x7d\xae\xc9\xc6\xb1\xbf\xf2\xf0\x77\xf5\x0d\x8b\x9a\x8e\x0c\xba\xd3\xc2\x00\xf9\x80\x3e\x76\xc1\x4f\xb8\x0c\x0f\x92\x47\x1d\x9b\xb8\x95\x8f\x2c\xb6\x64\x98\x26\x5f\x3d\x12\x7a\x3d\x89\x9b\x74\xd9\xef\xda\x72\x94\xf8\x79\x69\x80\x54\xa1\x23\x8b\xd4\xc3\x99\xfa\x2d\x1d\x37\x4d\x31\xd2\x55\x5b\x62\xbc\xa2\x5f\xb4\xfc\xe3\x77\xaa\xa4\x76\x54\x61\xe1\x19\x89\xe7\xdd\x1b\x47\x70\x00\x89\x45\xf7\x9a\x1f\xe9\xc5\x3b\x0c\x72\xf7\xf6\xe0\x08\x9c\x62\x15\x4b\x0e\x88\xe7\x64\x5f\xe9\xfa\x58\xf8\x80\xf5\x3a\x8d\xfb\x57\x44\x49\x55\x1f\x07\x90\x4c\xf4\x36\x79\xd5\x5b\xe9\x57\x8f\x5e\xb3\xbb\xaa\x59\xa5\x73\xe3\xc8\x78\xa9\xee\x84\xa6\x90\xd3\x97\x2d\xd6\x07\xa6\x24\xcd\x87\x0d\xda\x54\x00\x90\x45\x3f\xa7\xf0\xda\xad\x5f\x25\x96\x7a\x29\x3c\xd6\x62\x2e\x87\x54\x50\x86\x34\xc8\x7e\x97\x69\x18\xb9\x97\x55\x68\x8c\x8d\x70\x2c\xaf\x29\x39\x40\x7a\xd1\x3b\x95\x1d\x92\xce\xd4\xfe\xfd\x24\x53\x7b\x3f\x92\xcc\x2e\x61\x6e\x24\x23\xe2\x50\xb6\x31\xbf\xcf\xe5\x7a\x53\xe0\x4d\xa7\xef\xe4\x67\x00\x90\xd5\x43\x0d\x77\x0f\xdb\x5c\x7a\x6a\xcc\x37\x61\xb8\xfe\x73\xf4\xb5\x15\x29\xed\x1b\x0f\x32\xf6\x11\x7b\x81\x81\xef\x0e\x74\xdc\x36\x31\x1a\xcc\x00\x69\x46\x67\x24\x12\xee\x5d\xda\x3e\xda\x12\x5e\xec\x4d\x53\x6a\x4d\xa2\xc2\x0a\xc5\x7c\x63\x79\x20\xc4\x76\x7e\xb7\xe1\x17\xb7\x4f\xbd\x92\x4f\xb6\xab\x01\xda\x9a\x7b\x03\x64\xfd\x4b\x73\x5f\xe9\xbf\x95\x4a\xae\x12\xdc\xd7\xdd\x4d\xcd\x10\xa7\x66\xbf\x52\x46\x11\xa4\x3d\xa6\xf3\xfb\x8c\xe9\x6d\x80\x64\xa1\xe3\xe0\xea\xb9\xec\x7c\xfe\xe0\xb5\x13\x5c\x45\xa3\xdf\x8d\x29\x67\x5a\x3a\x85\xab\x52\x2c\xe5\x3c\x17\x9b\xa4\x62\x12\x62\xb8\x36\xf7\x00\xa4\x04\x1d\x65\x36\x06\x81\x4f\x9f\xa9\x1c\xf6\xd0\x21\x55\x1b\x53\x08\x63\x29\xe0\x4f\x4e\x62\xcf\xdf\xa4\xb7\xe1\xd2\x93\xaf\xa0\x70\x5d\x2f\x75\x02\xb2\xea\xa8\xe1\xe1\xc6\xf2\x71\x88\x61\xc1\xbd\x54\xce\xbd\xdc\x91\x2a\xaf\xdf\x89\x5d\xfa\xa6\x62\xe8\xd0\x38\xdd\x1b\xc6\x34\x3c\xdf\x1a\x55\x02\x90\x64\xf4\x3e\x15\xb8\x84\x10\x56\xf6\x37\x27\x18\x96\x3f\xe5\x4a\xc1\xb5\x99\x7b\x1e\xa2\xae\xf3\xa1\x38\xee\xa5\xf6\xb5\xdb\xc5\xe2\x85\x0f\x01\x40\x06\xd0\xc3\x89\x88\x03\x9d\xdb\xb8\xc3\x16\x98\x19\x55\xf3\xbf\x32\x89\xb1\x52\xfa\xd2\xb2\xa9\x10\x5f\xe7\x3c\xe4\xd9\xa4\xf5\x66\xed\x1b\xfa\xf4\x69\xcd\xec\x19\x62\x05\x6c\xcc\xec\x65\xee\x03\x47\x7e\xe6\x7e\xe9\xe3\xf2\xd8\xb2\x2e\x5d\x5b\x5e\x6f\x65\x3b\x72\x85\x43\x74\xbb\x72\xbf\x46\x5f\xc5\xdc\xd8\x18\x5c\x68\x3d\xa6\x6e\x70\xef\x7a\xdb\xfe\xb5\x11\xfa\x59\x8e\x2b\x51\x4d\x07\x4a\x15\x23\xec\x1e\x8f\x86\x5d\x8b\xa8\x8d\xc0\x01\xa4\x14\x5d\xf5\xde\x3b\xd6\xe4\x3c\x4a\xf1\x70\x0a\x2f\x9f\xf8\xf4\x9a\x6b\xfe\x7e\xa3\xae\xd8\x95\x92\x3c\x7e\xbe\x57\xcd\xa1\x0c\x1d\x95\xa4\xe8\x25\xdc\x14\xa3\x63\xfc\x3c\xd7\x4e\x95\xbb\x7b\xa8\x2e\x96\x61\x85\x57\x6d\x46\xb6\x45\x26\x76\xec\x69\xe0\xd5\x0e\x3d\x9a\xfb\x94\x47\xb7\x35\x37\xfa\xa3\xa5\xf9\xca\xfa\x0d\x8f\x8d\xec\x5f\x0b\xaf\xc9\x7a\x7c\xf7\x3a\xee\x28\xeb\x06\xb9\x83\x4d\xf2\xc4\xb9\x35\xe1\x41\x17\x0e\x0e\xf4\x9f\x18\x4e\x74\xca\xd1\xcc\xf5\xb5\x58\xac\x9e\x23\x56\xa7\x55\x4f\xe9\x33\xe3\x55\x08\xfe\x60\xd3\xef\xa8\x68\xe5\xb1\xbe\xef\x9c\xbb\xb8\xf0\xbf\x09\x0c\x20\x47\xb4\x23\x66\x52\xa0\xf8\xc5\xd4\x18\x78\xe4\x15\xd4\x72\x98\x3a\x03\x8f\x64\xc3\x4e\x19\x4b\x6b\x40\xe4\xeb\x5f\x04\x4b\x6e\xe0\x11\x17\xd8\x93\x61\x4a\x0e\x3c\x92\x04\xfb\x18\x2c\xd9\x01\x91\x35\xe8\x3e\xa6\xf2\xc0\x23\xf3\x50\x97\x62\x8a\x0f\x3c\x92\x08\xf7\x05\x53\x80\xe0\x91\xf2\x3d\x78\x04\x53\x83\xe0\x11\x37\xd8\x60\x61\xe9\x10\x88\xb4\x43\xf7\x31\xa5\x08\x1e\x09\x85\x5b\x89\x29\x47\xa0\x2f\x70\x5f\xb0\x24\x09\x44\x5a\x09\x97\x52\x88\xff\x51\x9b\xc8\x13\x91\x1c\xd4\x73\xc5\x01\x64\x18\x7d\xdb\xfa\x79\xfc\x99\xd5\x3d\x7e\x1a\x5a\xf9\xe2\xe3\xd3\xc7\xd2\x65\xc6\xd2\x65\x27\x45\x6b\x09\xb8\x70\x2c\xa5\x86\xd6\x29\xe7\x57\xb7\x00\x40\xe2\xd1\xc9\xa9\x43\x89\xcc\x91\xca\xeb\x62\x81\x46\x80\xd6\x9e\x8a\x7e\x56\x7b\x91\x18\xb5\x33\x57\x33\x25\x73\xb2\xec\xad\x09\x75\xa4\x7e\x5c\x07\xc8\xe2\x7f\x5e\x15\x7d\xe5\xfe\x5d\xe9\x58\xa5\xc7\xce\xef\x8f\xff\xb8\x62\xdb\x63\x9f\x68\xeb\x2d\x9a\xc3\xad\x23\xd9\x5c\x6e\x56\x3e\xbc\xf7\x96\x29\x0e\x20\xcd\xe8\x2c\x72\x6a\xaf\x4a\xc0\x21\x2d\x72\xee\x59\x91\x8a\x95\xbe\xf7\xa1\xf6\x5e\xac\x0a\x84\x3d\xbe\x56\x87\x52\x7c\x04\xb4\x69\x33\x37\xee\x6c\x47\x09\x3a\x8b\xcc\xac\xf0\x7e\xf0\x13\xfd\x1a\x77\x9c\x22\x31\xed\xba\xae\x19\x77\xce\x53\x32\xd3\x30\xcd\x2c\x99\x33\x5e\xb9\x1e\x64\xfd\xb6\xc5\x00\x20\x15\xe8\xba\x10\xcf\xfc\xf5\x98\x5c\x9a\xb4\xe0\x73\xe6\x52\xf5\x89\xcf\x23\xbe\x6d\x49\x21\x31\x65\xc4\xb4\xb6\x74\x84\x22\x75\x7c\x0f\x37\x15\x01\x32\x88\xae\x52\x9c\x53\x97\x95\xbf\x73\xee\x0b\x1f\x2a\x16\x31\xd9\x93\x5d\x74\xbe\xd9\xf7\xdd\xcb\xce\x9c\x42\x5d\x59\x01\x73\x47\x03\xee\xa7\x19\x38\x20\xcb\x8e\x16\xaa\xf4\x9f\x9a\x2f\x3f\xeb\x7c\x72\x65\xd5\x96\x46\xa7\x86\xcb\xa7\xd5\x72\x6f\x4b\x50\xc6\x15\xe3\xe2\x9c\x4e\x9b\xd2\x40\x62\x69\xe1\x7f\x5c\x73\xfc\xf6\x0e\xc3\xfe\x19\x73\xd9\xf1\x48\x3c\x3c\x10\x58\x4b\x0f\x91\x45\x18\xdd\x58\xab\x0f\x91\x66\xd8\x41\x62\x6e\x00\x3c\xdc\x30\x51\x61\xee\x01\x1e\xa9\x80\x67\x08\x6b\x1f\x20\x32\x08\xbf\x2b\xc7\xda\x0b\x3c\x22\xcb\x8e\x27\x30\xe5\x3a\x9e\x10\xc0\x9b\x85\xa5\xd8\xa1\x59\x55\xf0\x49\x18\x2c\xd5\x0e\x27\x91\x59\x0a\x25\xfa\x37\xf5\x0e\xe4\xce\x12\x92\x39\x6d\xa7\xdc\xff\xfc\x77\x05\x2f\x3f\x70\xf2\xcc\x97\x12\xba\xe2\x6d\xbe\x79\xe4\x85\x50\xf0\xee\x54\x07\x65\x57\xc6\x7c\x9e\x17\x62\xa6\x11\xfe\x4c\x35\xdb\x59\x1d\x7d\x32\x76\x0d\x5b\x08\x30\x17\xea\x1a\xc9\x4d\x3d\x78\x3a\xf1\xd2\x40\x3e\x7f\x33\x31\xe4\x17\xd9\xaa\xa4\x40\x62\xe8\xc9\x49\xd1\xda\x8d\xed\xa6\x0c\x2d\x6e\xef\xfd\x68\x5c\x95\x3b\x39\xc3\xf0\xa8\xe0\x78\x25\x65\xd1\xe3\xdb\x4b\x14\x94\x4e\x26\x6e\x19\xb6\x23\x9d\x07\xec\x17\xa7\x6d\xbb\x01\x92\x84\x3e\xd8\x63\x59\x74\xf7\xc3\xf2\x8f\x90\xbc\xe4\xcf\x61\xd9\x57\x68\x6b\x2f\x9c\xaa\xe5\x65\x7b\x75\x59\xe4\xac\x95\xe0\x8d\x77\x3d\xd4\x76\x00\xa9\x44\x0f\xef\x75\x3e\x7f\xd3\xbf\x2f\x25\xb0\xa4\x33\xee\xde\x92\x65\xc1\xde\xeb\x53\x33\xb8\xac\xdd\x60\x38\x30\x7e\xab\x8b\x93\x5b\xc2\x4d\xf8\xdf\x9c\xfc\x5b\x8d\xe0\x49\xc2\xf2\xf3\x6f\xcd\x83\xd1\x87\xe9\x2a\x4c\xfa\xb0\xb4\x60\xba\x0b\x8b\x31\x3c\x49\x58\x2e\x43\xa4\x12\x22\x58\x7d\x1a\x44\xda\xf6\xc0\xe7\x91\xb0\x1a\x36\x20\xaf\x4f\x40\xf5\xff\xe7\x91\x70\xff\xe9\xc1\x85\x2e\x0f\xfe\x2e\xdf\xb5\x51\x1a\x86\x90\x96\x1d\xa1\xb5\x3d\x95\xea\xed\x73\x4d\xf0\x54\x70\xc2\x69\x61\xf1\xb0\x53\xd4\x5b\x38\x80\xe4\xa1\xeb\x04\xc7\xdd\x08\x52\x1b\xf6\x86\xce\x5f\xb7\x56\xef\x94\xaf\x2c\x1f\x3a\x53\x98\xd2\x32\x52\x29\x7e\xbb\x8b\x78\xd3\xba\xc3\xff\xe3\x1a\x0e\x20\xab\xe8\x70\xfa\x78\x2e\xdb\xdb\xe2\xd9\xdd\x7c\x4a\xd7\x5e\xae\x2a\x36\xde\x9c\x09\xf2\xa3\x74\xce\x53\xca\x49\x7d\xa5\x89\x13\xbb\x8c\x16\x6e\xe2\x00\xf2\x06\x9d\xf8\x43\xd6\xd3\x2f\x79\xda\x52\xeb\x38\x6d\xaa\x9b\x75\x0a\xa5\x3a\x07\x18\x14\x27\xd9\x06\x98\x2b\x1f\xbf\x6d\xa9\xc7\x50\x78\xf0\x9c\xf0\xbf\x99\x0d\x57\x08\x07\x77\x1b\xcb\x72\x88\xe4\xc1\x54\x8b\x65\x3c\x44\x56\x61\x80\x60\xd9\x0f\x91\x37\x30\x6f\x62\xb6\xce\x78\x64\x0a\x0a\x09\xcc\xee\x19\x8f\x84\xc3\x98\xc2\xea\xa0\xff\x8a\x22\xf8\xb0\x14\x66\x17\x8d\xcf\x69\x6a\xf8\x49\x30\x1b\x69\xfc\x24\x1f\xa0\x8a\xc4\x6a\xa6\xff\xe6\x5a\xb8\xc6\x58\xfd\x34\x44\x62\xe1\xb5\x2b\x66\x4b\x8d\x47\x32\xe1\x17\x2e\x98\x6d\x35\xde\xfb\xcb\xf8\x49\x30\x3b\x6b\xfc\x24\xbd\xf0\xe1\x6d\xcc\xee\x1a\x3f\x89\x1e\x7e\x12\xac\x06\xfb\x6f\x2d\x87\xaa\x1b\xb3\xc7\x86\xdd\x10\x0c\x30\xcc\x3e\x1b\x8f\x64\xc1\xf3\x85\xd5\x6b\x43\xa4\x04\x7e\xa3\x87\xd9\x6f\xe3\xbd\x57\xc7\x4f\x82\xd9\x72\xe3\x27\x49\x86\x87\x18\xab\xed\x86\xc8\xc0\x1e\x58\x9a\xb1\xfa\x6f\x20\x4f\x42\x44\x40\xe2\xe4\x04\x90\x20\xb4\xac\x74\x89\x6d\x5f\xeb\xe6\x1e\xa3\xb3\x9b\x35\x88\xda\xea\x9e\x3e\x47\x54\xce\x17\x7e\xcc\x21\x48\xee\xc5\x4f\xfe\xc4\xf5\xbd\x91\x84\x00\x89\x45\xdf\x7d\xec\xe7\x32\x6e\xe6\x50\xe3\x63\x3f\x38\x22\xa4\xba\xb7\xdb\x78\x74\xff\xc3\x36\xaa\xad\x2b\xe9\xef\x4b\xcb\xb8\x5a\xcf\x05\x09\xec\x05\xc8\x0c\x3a\xf5\x46\xdc\x24\xfe\xc9\xa9\xa0\xf9\x2e\x4e\x82\x77\xd7\xbb\x3a\x17\x42\x13\xaf\xb4\xe3\xab\x4b\xc1\xfe\xef\x2a\x49\xc7\xe3\x8c\x1e\x76\xe1\x00\xb2\xf5\x9f\x77\xca\xd1\xbc\x0b\xf3\x5f\x03\x21\x36\x6f\xa5\x2d\x39\x59\x70\x81\x91\xcf\x7e\x08\x24\x0c\x9e\xbf\x4c\xc4\xa3\xba\x2e\xc2\x47\xf0\x08\x07\x64\x1f\xa0\xef\x4b\x7f\xb9\x34\xb9\x89\x51\x8e\x71\xa9\xb7\x28\x85\x3b\xb3\xd4\xd5\xe8\x00\xfe\x86\xb6\x99\x8f\x76\x3f\x9a\x28\x6a\x2e\x1f\xa7\x11\xfe\x47\x1f\xf1\xcb\x19\x04\xe3\x0f\xd3\x4f\x78\x5e\x61\xfc\x61\xf9\x0a\x91\x19\xb8\xcf\x58\xee\x42\x64\x0b\x8a\x36\x2c\x97\x61\xfc\x3d\xc0\x4f\x82\x75\xd1\x02\x27\x79\x0d\xbf\xbc\xc2\xba\x6b\x81\x48\x29\x05\x7c\x11\x19\xd6\xa5\x0b\x90\xa7\x22\xc0\x11\x6e\x17\x73\x67\xb4\x36\x94\xd4\xb8\x90\xdb\x27\xe6\x98\x27\x92\xde\xce\x7c\xfd\x25\xc3\xe4\x49\x0e\x9d\x7e\xc1\x69\xdd\x6a\xdf\x3a\x46\x5b\xe6\x83\x31\x4a\x38\x20\x4b\x8b\x1a\xbe\x74\x6e\x39\xd5\x5d\xf3\x90\x6b\xb1\x29\x47\x60\x68\x65\xdf\xfc\xc5\xdd\x87\xde\x17\xbe\x31\x50\xe8\xb3\xcb\xbc\x3d\xfa\x7a\xef\x19\x1c\x40\xbe\xa0\xe3\xf5\x28\xcb\x1e\x52\x79\xa9\xe6\x26\xc3\xd8\x97\xc7\xd9\x4e\xd7\x69\x9e\xa5\xae\x55\x62\x25\x52\x3b\x35\x52\xda\x4d\x70\xab\xc8\xea\xf4\xb6\x39\xe8\x7b\xcf\xb8\x81\x76\x79\x73\x72\x95\xc0\x23\x32\x74\xc1\xb9\x15\x0e\x22\x32\xbd\x99\x96\x45\x3c\xab\x55\xdc\x17\x22\x2f\xbb\x66\x2f\x24\x08\xff\x9b\xd5\x70\x81\x9c\xe1\xb7\x7b\x58\x96\xc3\x8d\xa3\xc5\xef\x02\x96\xed\x70\x92\x2f\x30\x06\xb1\xcc\xff\x6b\x17\x2c\x33\x58\x97\x5f\x10\x71\xa5\x80\xff\xd6\x8b\x75\x0b\x06\xe4\x2e\x10\x11\xbb\xe0\x00\xe2\x82\xd6\x6d\x99\xc6\x17\x4a\xca\x37\xce\x78\x6d\x2c\x30\x46\x90\xbc\x92\xbb\xb6\x9a\xa4\xf2\x46\xa5\x5a\x3b\xde\x8a\x48\x63\xe6\x57\xe3\xa4\x25\x0e\x20\xf5\xe8\x2b\xee\x02\xba\x62\xba\xd8\x9e\x2e\x71\x92\x7b\x35\x93\xf5\x67\xda\x5e\xce\x0a\x1c\x11\x79\x63\x71\x6c\xce\xeb\x05\xd0\x7e\x46\x95\xa6\x85\x03\x48\x00\xfa\xf3\xf5\x3e\x57\x2b\x3c\xae\x0a\x20\x93\x5e\x78\x32\xcc\x5f\x28\x7d\x65\xbf\xb9\xfc\x98\x29\x61\xf6\xd9\x9b\x8b\xd2\xf4\x0f\xa5\x4c\x48\x70\x00\xd9\x40\x0b\x7b\x2b\x45\x47\x05\xcf\x17\x8f\xf7\xb8\x65\x31\x8d\xce\x68\xd9\x85\xea\x58\xbd\x26\x4e\x7f\x3b\xb7\x2e\x43\xd7\xe8\xf5\xd3\x64\x2b\x78\x5b\x57\xa1\x93\xd3\xab\x9f\x87\x16\x12\x3f\xef\xb1\xdb\xc0\xed\x3e\xcb\x72\xff\x46\x85\x5e\xa4\xd0\xc1\x4e\xcb\xca\xbd\xf6\x92\xac\x16\x33\x57\x77\x33\x0a\xff\x9b\x9b\x7f\xef\xcb\x60\x1d\xc2\xf2\x14\x22\xf5\x50\x83\x60\x39\x0b\x91\x00\x38\x0b\x96\xbf\x10\xd9\x80\x0a\x0c\xcb\xe5\xbf\x02\x74\xef\xd2\xda\x9f\xc7\xbc\xbf\x10\x5e\x4d\x0a\x96\xbd\xc5\x19\x40\xac\x74\xa3\xbf\xef\x44\x21\xb5\xab\xc6\x8d\x23\x52\x8c\xb5\x52\xaa\x15\x67\x79\x7f\x33\x29\x03\xf9\xe5\xad\xe2\xad\xe0\x23\x4e\x00\x89\x44\x1f\xbd\xc9\x35\xc2\x87\x9f\xdc\x99\x6e\xc7\x3f\xf0\x9c\x49\xf1\xcf\xeb\xab\xd0\xfa\xea\xdc\xd4\xe1\x38\x6d\x30\x7d\x7b\xad\x4d\xed\x48\x0c\x40\x6a\xd0\xbb\xbd\x72\x3a\xe7\xee\xc8\x3d\xe6\xac\xe7\x21\x16\xbe\x1a\xd1\xb6\xc7\x79\xa4\x54\xec\x9e\xc8\x47\xeb\x85\x96\xde\xdf\xb7\xcf\x75\xf9\x0c\x40\x7e\xa0\x83\xc9\x9a\x34\x8f\x6e\x28\xfc\x53\x18\x8e\x6b\xab\xfd\x18\x27\x75\xc3\xfb\xcb\x71\xcf\x9f\x33\xba\xae\xf6\x2c\x7e\x68\x31\x61\x20\x17\xc1\x01\xa4\x16\x5d\xb9\xfa\xf6\xd7\x0b\x16\xcd\xc5\xe9\x49\xdd\xec\xad\x13\xb5\x1e\xb0\x7e\x87\xdb\x9f\xad\x20\xaf\x91\x20\xbc\x1c\x50\x78\xd6\xeb\xec\xf6\xf8\x68\xf4\x75\xf6\x90\xbd\x94\xec\xab\x6c\x7e\xdd\x2d\x92\x7d\x4f\xa5\xdf\x84\x5b\x69\x3e\x72\xa4\x3e\x47\xeb\x67\xe1\x56\x44\x10\xec\x95\x36\xc1\x0b\x00\x92\x89\x6e\x32\x34\x94\xf8\xb5\xca\xe8\xfa\xdd\x95\x33\x0b\xca\xa3\xe5\xcd\x28\x6f\x30\xdc\xcc\xad\x33\xdf\x7f\x3a\xff\x6a\xc9\x8b\xae\x12\x1e\x2b\x80\xe4\xa1\xcb\x34\xf9\x78\x47\x5c\x29\x2f\x57\x9f\xd7\xf8\xb9\xad\xf6\xa7\x55\xec\x42\x1f\x4b\xfd\x02\x1b\xa5\xa3\x3d\x35\xe7\xad\x70\x54\x42\xed\x38\x80\xd4\xa1\x3f\xfe\xa1\x45\x76\x8b\x4c\xfe\x63\xbe\xf9\x81\x03\xbd\xcc\xcc\x57\x74\x16\x74\xbf\x77\x8f\xd2\x19\x9b\x31\xb0\x7e\xd0\x6c\xc9\xd0\xad\x00\x00\x29\xfe\xcf\xd3\xc3\x12\xe6\x77\x6c\x6a\x9e\x98\xfc\x60\x08\x6e\xc9\x3e\x1f\x3c\xa5\x70\x90\xb3\xe2\xdd\x82\x3d\xfd\x97\x48\xc2\xbd\xd2\xb7\x1f\x16\x03\x64\x01\xbd\x57\x25\xc6\x22\xc9\x8e\xd4\xf7\x39\x9b\x96\xe2\x8e\x9c\xd0\x9e\x8b\x25\xc9\x66\x6c\x0b\x4e\x56\xd1\x09\xb1\x33\xcf\xe4\xee\xb8\xfe\x01\x00\x24\x1c\xbd\x59\x9c\x8b\x5f\x66\x86\x8f\xe7\xec\x8b\xf3\xa7\x37\x8b\x30\xee\x32\x95\x21\x28\x1a\x4c\x3c\xf2\x98\x96\x38\xdc\xad\xce\xcd\x27\xea\x14\x40\x36\xd0\xc3\xf5\x0f\x33\x7f\xfa\x35\x36\x5c\x7f\x7a\x6d\x30\xe6\xb4\xff\xa9\xc3\x9b\x3d\x72\x54\x0b\x83\x53\xa2\x6f\x6e\xe6\x1e\x25\x3b\xa5\x5e\x84\x03\x48\x39\x7a\x73\x2b\xe6\xd2\xc9\x89\x57\xe5\xd3\x8e\x59\x9f\xe0\xfd\xbd\xf9\x4a\x7a\xc3\x71\x59\x3d\x37\x2d\x7d\xbe\xcb\x80\xbb\xeb\x41\x80\x43\x29\x0e\x20\xef\xff\xf3\x3b\xfb\xfa\x3a\xb2\xc1\xc0\xa0\x32\x6e\xa3\xe7\xb8\xbb\x65\x1c\x2b\x84\x64\xd6\xef\x4f\x73\x05\x7a\x2e\xd6\x2f\x2a\xc5\x5f\x61\x16\xc0\x01\xa4\x05\xbd\xb9\xf9\x2d\x84\x36\xad\x26\x47\x6c\x2f\x1e\x1b\x77\xab\xd6\xfa\xba\xec\x38\x2d\x1b\x90\xa3\x67\xce\xae\x3f\x2d\x7f\x2d\xc9\xda\xf4\x3c\x0e\x20\xbf\xd0\x55\xa7\xd8\xf0\xea\x70\xc8\xc2\xe6\x58\xac\xcf\xc6\x4d\xba\x65\x05\x35\xd3\x95\x74\xad\x09\x3f\xc7\x1f\x59\xb7\xd8\x94\xbd\x95\xc3\x78\xb6\x8f\x25\x3a\xb3\x04\x1f\xd4\xa6\xbf\xc3\x90\x71\x62\xd3\xc5\x7a\x69\xaa\xb0\x37\x71\x49\x82\x81\xe5\x9c\xfa\x01\x67\xe1\x0f\x95\xf3\xf9\x4f\x44\xb6\x8f\x8a\x17\x3a\x73\xb9\xd7\xb8\x50\x0e\xda\x4d\x06\x52\x1d\xb8\x57\xad\xc0\x96\x3a\x90\x25\xd4\x66\x56\xd0\x73\x62\x60\x23\xf3\x0a\x6b\x8c\x99\x5f\x20\x40\x4a\xd1\x1f\x7f\x7a\xb4\xe6\xe7\xe7\x91\x2e\xf7\xef\x75\x53\xef\x05\xbe\x50\x1e\x5c\xdf\x3c\x11\x56\xb5\x3a\x3c\x25\xbd\x71\xe1\x9a\xba\x48\x45\x1d\x40\x7e\xa3\x63\xad\x56\xa6\xbd\xaf\xa8\xc1\x4e\xae\xdf\xd5\x3e\xd6\x7b\x71\x96\x35\x4e\xed\x5b\x57\xd6\xa7\x07\x19\xc5\xaf\x97\xc3\xc5\x8f\xc9\x3d\xc3\x01\xa4\x07\xbd\xfa\x7d\x1e\x4f\x25\x8c\x45\x1d\x4c\x59\x75\x99\x2c\xf9\x70\x37\x4f\x34\x9c\x9e\x32\x6d\xb0\xfa\x76\x7e\xd4\x91\x36\x7f\x92\xec\x69\x15\x00\x88\x2b\xfa\x68\x1d\x70\x2b\xbe\x87\x73\x2d\x60\x6a\x30\x5a\x7b\x58\x86\x48\xb0\x5c\xeb\xb6\xcb\xff\x25\x72\x46\x8e\xab\xe3\x07\xc7\x71\xb2\x7e\x06\x80\xbc\x40\x0f\x17\x6e\xba\x3b\x60\x4f\x48\x72\xf1\x73\xbe\xd2\x73\x92\xf7\x56\x95\xb7\x8f\xd5\x8b\xc7\xea\xd6\x09\xf0\xde\xa2\x58\x8a\xef\xe4\xea\x05\x00\x49\x40\x2b\x0a\x05\xb1\x5e\x2d\xef\x2b\xc3\x0f\x43\x46\x95\xcc\x28\xa4\x6a\xb5\xb8\x4e\x28\x93\x47\x7a\x1d\x1f\x33\x7e\xc6\xb8\xf7\xd0\x49\x21\x6b\x80\x64\xa2\xd7\xf2\xf5\xf3\xcb\xe3\x71\x06\x29\xfc\xcc\x5e\x53\x76\x09\xc1\x19\xdd\xc5\x3e\x87\x3e\xb5\xa6\x1a\xe9\xae\xef\xb1\x75\xbd\x73\x8a\x7a\x3b\xb9\xe5\xa2\x63\x07\x88\xba\xf9\xcf\xd1\x5f\xdd\x23\xd8\xba\x95\x74\xab\xcb\x39\xd2\x44\x44\x4c\x3d\xdc\xb6\xcb\xce\x4f\xec\x58\x48\x9b\x82\xb6\x9b\x13\x40\x92\xd1\xab\xe9\xc9\xce\xf5\xa8\x3f\x4b\xc1\x72\xf8\x84\x96\xd1\x89\x53\x24\xf9\x8e\x86\x8e\xe6\x34\xaa\xcb\x45\xba\xec\x54\x4c\xfc\x7b\x90\x2f\x00\x29\x41\x5b\xef\xd6\xdf\x11\xda\xd7\x5c\x5d\x11\x3f\xff\xde\x52\x72\xda\x47\x8e\xdb\xe0\xa7\xf6\x8a\x38\xa9\xfb\xf3\x0c\x85\xaa\xcc\x95\x56\x1f\x80\x0c\xa2\xd7\x9e\xe9\x4a\x8e\xf4\xb3\xdf\x77\xf7\x0a\x15\xc6\xbe\xfa\xf9\x66\x86\xe2\xa3\xdd\x63\x84\x52\x80\x6d\x4f\x90\x14\xa7\x34\x27\xd5\x5c\x0b\x6a\x68\x8d\x99\x6b\x5e\xa4\xe6\xae\xa1\x34\xe9\x18\x77\xc3\xfb\xe6\x1a\xb7\x33\xc6\xde\x53\x88\x8f\xf0\x4d\x85\xd4\x2a\x5f\xa0\x29\xfb\xb8\xdd\x81\xa0\x83\x9e\xab\x63\x82\xde\x6d\xb5\xca\x5d\x91\x25\xf7\x38\x51\x94\xe6\xee\x0a\xf0\x3d\x8a\xcb\x65\x9c\x25\x44\xb4\xde\x2b\xd3\xb4\x43\x01\x07\x10\x37\x74\x94\xcd\x3c\x1e\x39\xe0\xf4\xac\xf5\xbd\xe7\xc3\x2a\x57\x21\xcd\x71\xab\x97\x5a\x8f\xdc\x5b\xcc\xbf\xcc\xd8\x73\x08\x5c\xe7\x56\x7d\x3b\x0e\x00\x92\x83\xde\x57\x95\x4b\xa7\x74\xea\x74\xe3\x76\xd3\x5e\xa3\x08\x28\x32\x1d\x69\x33\xca\xec\x60\x3b\xaa\xd0\xac\x90\x22\xf8\x93\x30\xa5\x14\x0c\x01\x64\x12\x9d\x13\xea\xfc\x68\x3e\x97\x23\xef\x38\xc7\x14\xea\xc3\x9f\x24\x1e\x7f\xb7\x7e\xbe\xe7\xa5\x75\x99\xad\xd4\x65\x7a\xff\xd3\xc4\x81\xd1\xcc\x38\x80\x24\xa1\x57\xa6\x79\xae\x5e\xe1\xc0\x93\x33\xd6\x69\xde\x5b\xdc\x0f\x9d\x8d\x59\x1f\x99\x56\x0b\xd9\x9d\xd7\x13\x8b\xde\xd0\xd7\x41\xd8\x77\xc9\xe0\x80\x2c\x33\x6a\xb8\xc1\xa6\x8d\xad\xaf\xb3\xd2\x89\xa3\x57\xfb\xac\x8a\x03\x85\x2e\xf6\xf1\x39\xc9\xdf\xf2\x34\x77\x61\x7d\xbf\xc9\x81\xa3\x13\x09\x04\x00\xc9\x46\x6f\x2b\x97\xdf\xa7\xfe\x01\x6d\xde\x6e\x79\x25\x67\x3a\xde\x2d\x66\x96\x32\x9e\x59\x89\x15\x87\xe0\x6b\x61\x9c\xdf\x95\x5a\xfd\x0c\xdd\x01\x52\x8d\x5e\x1c\x87\x92\x4b\x64\x99\x87\x7f\x15\xd2\x29\xe9\x6e\xed\xda\x10\x31\x4d\xc8\xb8\x2d\x96\x14\x04\x8a\x19\xa5\xba\x07\x69\x8c\x4c\x65\x71\x00\x19\x42\x7b\x4b\x5d\x53\x4d\x66\xb1\xac\x7b\xcb\x20\x54\x6c\x55\xec\x8e\x18\x2f\x6f\xbd\x08\xb9\x68\x7e\xe1\x65\x9e\x78\x03\xa1\x56\xe1\xae\x6f\x38\x80\x7c\x47\x47\x65\xe2\x40\x28\xa1\xc2\xef\x14\x1b\x17\xe2\x02\xce\xe3\xd7\xe6\x9e\x47\x34\x3a\x29\x52\x1c\xf3\xd4\x56\x49\xd6\x0d\x70\x34\x38\xe0\x8b\x03\x88\x2f\xfa\xf3\x7d\x70\x2d\xdf\xec\x06\xc8\x37\x7c\x0d\x48\xbe\x06\xc7\xdd\xe3\xf7\xd4\x73\x6f\xfd\xaa\x12\x63\xe2\x95\x40\xf5\x2a\x70\x20\xcb\x6e\xbb\xb3\x41\x07\xc3\xcb\x62\xb9\xba\x23\xbc\xcf\x9b\x2f\x31\x5c\x9e\x1e\x5b\xbb\xb5\x99\x92\x7e\xc0\x9a\xeb\xe1\xb0\xa6\xf6\x1e\x4f\xd6\xdb\xd5\x51\xef\x85\xff\xb1\x86\xcb\x91\xfc\x79\xa8\x18\xea\x4f\xcc\x3a\x8e\x47\x6a\xa0\x90\xc1\xaa\xe5\x10\xf9\x01\xe5\x12\x56\x39\x87\x48\x2d\x6c\xce\x30\x2b\x3a\x1e\x89\x86\x7d\x13\x66\x51\xc7\x23\x99\xf0\x62\x08\xab\xb0\x43\x24\x0f\xf6\xa6\x98\xb5\x1d\x8f\xd4\xc1\x59\x30\xcb\x3b\x1e\x29\x86\x08\x66\x89\xc7\x23\x0b\x70\x2b\x31\xab\x3c\x1e\x09\x87\x5b\x89\x55\xe9\x21\xb2\x01\x11\xac\x62\x0f\x91\x72\xb8\xfb\x58\xf5\x1e\x22\xef\xa1\x2f\x58\x25\x1f\x22\x2d\x70\xf7\xb1\xaa\x3e\x44\x7e\xc1\x7e\x0d\xab\xf0\x43\x24\x00\x7e\x31\x86\x59\xfb\xf1\x88\x17\x54\xf1\x98\xf5\x1f\x8f\x94\xc2\x59\xb0\x34\x00\x44\x7e\xc3\xb0\xc4\x94\x01\x78\xa4\x07\xee\x0b\xa6\x12\xc0\x23\xae\xf0\x54\x62\xaa\x01\x3c\xf2\x02\x22\x98\x82\x00\x8f\x24\xc0\x6f\x66\xb0\x44\xc1\xdf\x83\x0c\x17\x19\x4b\x17\x40\x24\x17\xc6\x18\xa6\x34\xc0\x23\xc9\x7f\x9f\x46\xc0\x92\x07\x78\xa4\x04\xfa\x82\x25\x11\x20\x32\x48\x06\x2f\x73\xb0\xb4\x02\x90\x17\x24\x39\x4b\xe0\x8c\x03\xb2\x47\x51\x45\xc2\xce\x69\x77\x68\x9c\xab\xd6\x87\x09\x87\xb4\xa2\x94\x6b\x29\xfa\xac\x47\x6f\x4d\x99\xb7\xb8\x16\xdf\xe7\xe0\xc9\x8a\xf0\x74\xdf\x6e\xc0\xbd\xd0\x5a\xc7\x57\xd1\xef\xc3\x81\x78\x01\xae\x42\xd6\x10\x37\xd3\x25\x13\x12\x8b\x0b\x6f\x17\x5f\x84\x19\xd9\x94\x8d\x45\x8a\x06\x7e\xd2\x39\x8c\x03\x48\x35\xba\xa4\xff\x34\x0f\x6a\xd0\xe1\x61\x8d\xdd\x14\xa4\xff\x45\x1a\xfa\xd2\x83\xfb\xac\x1d\xbf\x5b\x3e\xad\xc6\xfd\xec\x2f\xbe\xb7\x18\x17\x6e\xe3\x00\x32\x8e\x2e\x72\x52\xc7\xa2\xc3\xa6\xf4\x39\xbd\xbe\xc9\xea\xc9\xce\x1d\xb7\x1d\x2f\xe4\x55\x0f\xb8\xa7\x16\x58\x40\x61\x4d\x54\xf0\x4b\x5f\x47\x44\xe8\xdf\xcc\xc6\x2f\x90\xec\x51\xf8\x03\x02\x0c\xc3\xff\x9e\x41\xb8\x0b\x58\xb6\x43\xa4\x1a\x9e\x0e\x2c\xf3\x21\x32\x0e\x73\x23\x96\x66\xfb\x1b\x51\x30\x6b\x61\xca\x36\x3c\xe2\x06\x93\x03\xa6\x72\xc3\x23\x39\xf0\x0c\x62\xa9\x37\x88\x4c\x42\x5f\xb0\x04\x1c\x44\x92\xe0\xcf\xd8\x31\x45\x1c\x7e\x27\x99\xe1\x82\x61\xc9\x38\xfc\x24\xd9\xf0\x08\x62\x49\xb9\xbf\x3b\x09\x17\x0c\x4b\xcd\x41\x64\x08\x7a\x8f\x25\xe8\x20\xf2\x1d\xa6\x13\x2c\x4d\x07\x11\x5f\x38\x0b\x96\xac\x83\x48\x2c\xe9\xd2\xda\x9f\x77\x0e\x04\xe5\x7e\x5a\xff\x76\x46\x52\xe9\x07\x1b\x63\xb5\xd2\x85\x9f\xa4\x1f\xc7\x2d\x2b\x2e\x90\x99\x34\xcd\x49\x7d\x74\x67\x78\xfd\xf2\x00\x90\x97\xd9\xfa\x35\x10\x4c\x0f\x00\x12\x81\x6e\xb4\xde\x5f\x7e\xec\x28\x9e\xb7\x78\xd7\x27\x4d\x6f\xde\x2a\xd1\x80\x6d\x8a\xe7\x46\xc5\xa9\xd7\x6f\x1a\xfd\x2e\xe5\xda\x8c\x8c\xe7\x53\x03\xa4\x1c\x9d\x1c\x0c\x9f\xa8\x24\xe7\xab\xad\xbc\x8b\xd1\x48\xb0\x1c\x9d\xe5\x58\xb6\xb4\x4f\xb2\x60\xa9\x54\xd1\xa1\x6e\x3a\x9b\xc1\x5c\x72\xe8\xc0\xb6\x1f\xe8\x1b\x8c\x85\xa6\x68\xf7\xa7\x6d\xed\x94\xf4\x83\x81\x62\x4e\x5f\xa9\xaf\x95\xd4\xcb\xbe\xb8\xcb\x21\x92\xb7\x38\xbb\xba\xf6\xf6\x86\x86\xd9\x76\x6c\xa1\xcd\x61\x19\x64\x7d\x64\x73\x52\xe1\xbe\x09\xd9\xcb\x6b\x8f\x3c\xbd\x28\xbe\x77\x82\x5b\xb8\x77\x0e\xd4\x9f\x1d\x6a\xd6\xcd\x3d\x8e\x10\x6c\x9b\x8f\x6e\x57\x26\x79\x4a\x56\x25\x27\x12\x56\xdf\x3a\xbd\xf1\x34\x5b\xe8\x0b\x29\x9a\x63\x9e\x1c\xbc\x7a\x6e\xdf\xf4\x0f\xc9\xd6\xe3\x0c\x7e\x0e\x00\x59\x45\x0b\x72\xd7\xa0\x33\x39\xbf\xda\xae\xaa\x57\x3f\x5e\x0b\x52\xbb\x34\x9b\x44\xe4\xa0\x7a\x36\x6c\x94\x51\xaf\x68\x2e\xc9\xc5\xd4\x24\xb4\x0b\x07\x90\x9f\xe8\x7e\x82\xfe\xe7\xb9\x4e\x99\x21\xc1\xb3\x95\xae\x05\x3a\x3d\xa5\xe2\xe2\xd2\xdc\xb7\xd6\xce\xf7\xf0\x5a\xf7\xcd\x7f\x39\x77\xf0\x6c\x8a\x32\x0e\x20\xa9\x68\x73\x80\x32\xe5\x95\x71\xe3\x91\x08\xf3\xd4\xeb\xcf\x27\x0f\xeb\x4a\x1e\x91\x62\xec\xe4\x05\xcf\xed\xc0\xbe\x1b\xbf\x57\x3c\x7e\x0b\xa3\x86\x26\xdd\x30\x08\xbc\xf9\x76\xd7\x07\x27\xc6\x78\x07\xf3\x52\xab\x84\x87\xe5\x77\x7a\xd8\x22\x0b\x0e\x9c\xa6\xbe\xfe\x3e\x64\x5f\x58\x2c\x0e\x20\x41\xe8\x8f\x2e\xfe\xb8\x75\xf5\xe5\x27\xb5\x10\x7b\xc7\xb3\xfd\x6e\x31\x54\xa6\xb1\xab\xd3\x91\x8d\xdf\xe3\x46\x70\x3c\x1d\x13\x9e\x9f\x63\x45\x70\x00\xe9\x44\xf7\x36\xe4\xf7\x5d\x52\xc6\x0c\xee\x08\x5d\x3f\x4a\x75\xe7\x8d\x77\xcc\xfc\x16\xbb\x70\xdf\xfa\xd5\x05\x51\xf7\xea\xde\x39\xb2\x57\xa3\x0c\x00\x20\x9e\xe8\xa5\x79\x4d\x30\xd1\x20\xcc\xdf\x32\x72\x5a\xe2\x49\xd2\xc4\x79\x1b\x2e\xb3\x07\xce\x9e\x01\x4e\x79\xaf\xa9\xe7\x41\xa5\xf7\xaf\x97\x33\x00\xd9\x40\x7f\x7c\xdc\xd2\xf0\xba\x0b\x53\xe0\x87\x55\x9a\x5c\x95\xea\xd8\x92\x28\x72\x91\x6e\x8d\x5b\xc5\xe3\xe3\x67\xb2\x46\x28\x53\x2f\x2a\xdd\xc3\x01\x24\xfe\x3f\xef\x78\x4b\x3f\x54\x14\xe3\xe1\x6b\xbf\x5a\xe9\x38\xfd\xb1\x6a\x9d\xbf\xbd\x33\xcb\x99\x5a\x43\xd9\xf9\x37\xaf\x16\x4f\xd0\xc3\x72\x13\x00\x90\x00\x74\x55\x59\xb9\x99\xd5\xf9\xe5\x70\x90\xca\xaf\x77\x32\xaa\x67\xdb\x26\x16\x62\x18\x1f\x24\xe7\x13\x99\x07\x3f\x73\x69\xd7\xf8\xe6\x23\xc9\x0c\x90\x37\xe8\x8d\x8a\x19\xc9\x3b\x96\x7c\xd8\x65\x92\xb4\xf1\xd7\x91\x0e\x5e\x25\x4e\x49\x91\xc5\x34\x07\xcd\x7b\x7e\x6a\x9f\x6c\x6c\xf7\x6b\xeb\x71\xe1\x00\x12\x8c\x7e\x3a\x60\xe2\x59\x98\x55\x04\x5f\xf8\x8b\x63\xef\xb8\x3d\x3e\x4b\xf3\xae\x90\x9b\x0e\x1f\xa4\x8f\x36\x14\x76\x5a\x3f\xd4\x7f\xf1\x5e\xe1\xda\xb6\x84\x44\xaf\xce\xd3\xe2\x85\xcf\xab\x63\x34\x1d\xe1\xfd\x8f\x72\xf4\xaf\xb5\x9c\x6a\xd5\x58\xa0\x19\x39\x95\xce\x92\x2d\xb5\xbb\xbf\x58\x28\xfb\x13\x00\x88\x0f\x3a\x8e\x29\xaa\x95\xe8\x46\x8c\x45\x97\xd2\x05\xd8\xa2\xc4\x42\x46\xe2\xf7\x87\xca\x4f\x2c\x8c\x5e\x95\xb6\x77\x6e\xf5\x0e\xa6\xd7\xe1\x07\x48\x08\xba\x91\x3b\x35\x2f\x35\x5e\xed\xad\xed\xff\xcd\x51\xab\xa5\xf4\x91\xa6\xd1\xa3\x2a\x33\xe5\x7a\x2d\xaf\x8b\x7b\x93\xd9\xb8\xad\x12\xf4\x2a\xd0\x0f\x2e\xe3\xcc\x5d\xb7\xe8\xb3\xcb\x12\x4b\xd4\xae\xaa\x26\xfe\x5a\xac\xec\x6b\x0a\xdd\x65\xf6\x59\x43\xc7\x3a\xc1\x8d\x24\x77\x58\x63\x3b\x6e\xd0\x27\x30\x5d\x6e\xd4\x40\xc1\x72\x9d\x7b\x32\xc9\x4d\xdb\xe9\xcb\x2b\x55\xcd\xf0\x43\x06\xab\x57\xd7\xc3\xf6\x93\x2b\x19\x2c\xb2\xe4\x5c\xdf\x6e\x95\xd0\x0b\x6f\x20\xba\x15\x1d\xe8\x90\xeb\x13\xbf\x79\x77\x42\xb6\xee\xe3\xae\xd2\x92\x82\x46\xae\xb9\x95\xad\x70\x52\x02\xcb\x38\x0d\x05\x5a\x00\x90\x02\xb4\xe9\x37\xb5\xa3\xd2\xed\xbe\x3b\xd4\x9d\xe1\xec\x27\x1b\x79\x39\x9e\x75\xc0\xfa\x2b\x2e\x86\x51\x46\x5e\xea\x6e\xc8\xb3\x26\xee\xd8\x3c\x80\x6c\xa2\x13\x88\xd5\x34\xdb\x60\x19\xb7\xa8\xf9\x3a\xc1\xb8\x9c\x63\xdb\x01\xb7\x4f\x5e\xef\xe6\x55\xe5\xbf\xed\x4a\x29\xa2\x08\xd8\x9b\x2f\x3c\x8e\x03\x88\x0b\x7a\xe1\x55\xcd\x26\xa9\x6f\x1c\xf6\x7f\x75\xfd\xf1\xec\xa2\x07\x25\xc1\xd1\x93\x97\xf3\x88\x42\x05\xb2\x8e\x25\xbe\xf9\x78\x65\x20\xe5\xe9\x16\x00\x48\x3e\x3a\x2e\xdb\x24\xc9\x1a\xee\x38\x1b\x93\x57\x7d\xe2\x3e\x74\xfe\xcd\xb5\x1b\xfb\x6b\xd3\xa7\x79\x6e\x10\x8b\x7e\x89\x39\x5c\x42\x23\x14\x9d\x0b\x90\xaf\x68\xeb\x7b\x35\x85\x8c\x6c\xb8\x48\x59\xf4\xf9\xb4\x86\x8c\x2c\xf6\xef\x31\xbb\xe3\xe9\x40\xb8\x20\x97\xa0\xef\xa3\xdd\xbe\x45\x78\xff\xd1\xb6\xfc\xfe\xcf\x9b\xac\x0b\x42\x46\xc3\x82\x3a\x74\xe8\x9f\x9d\x13\x3d\xd0\xce\xe5\x7b\x60\xae\x57\xff\x44\x3b\x11\xef\xa6\x51\x71\x7b\x51\xea\xdd\xc8\xed\x66\xed\x3f\x6f\x5d\x51\xed\x91\x72\x8a\x52\x06\xf4\x55\x1d\xde\x13\xe5\xca\x02\x8c\xc7\x80\xf6\x11\xd1\x01\xb9\xb0\xaf\x17\x13\x2e\x74\xcd\xa6\x3a\x01\xa4\x02\x7d\x4c\xf6\xde\x11\x5d\xa2\xd6\x73\x30\xa6\x71\x94\x49\x5c\xd7\xbe\xb3\xa7\xcf\xd3\x5f\x3f\x95\xb5\xc0\x3c\x80\xe1\xe0\x0d\xbf\x2f\x9d\x5f\x00\x52\x83\x0e\x33\xb2\x26\x39\xc2\x4d\x86\xc6\x3c\x01\xf6\xea\x41\x7d\xad\xc6\x6f\x37\xab\xa9\x9d\x3e\x8e\xf1\x9b\xf7\x3e\xa3\xa2\x7c\xfe\xcc\xe5\x1e\x40\x56\xd1\x8b\xb3\x3c\xa9\x7c\x2a\x3c\x4a\xe8\xd5\xe1\x6e\xe4\xca\xcc\x95\xdd\x1f\x6b\x2c\xb8\x57\x9b\x4f\x0c\x17\x95\x1f\x91\xab\x7e\x95\xbf\x77\x3b\x1b\x17\xa2\x73\x8e\x48\xa9\x59\x6b\x6d\xf8\xe5\x76\xb5\xdf\xca\x23\xce\x9b\x3f\xa8\x1e\xb0\x56\x7d\xf7\x17\xa5\xfa\xd6\xfe\xa9\xb4\x58\x1d\x44\xda\x08\xff\x63\x0d\x91\x23\xdb\xa9\x57\x11\x50\x97\x63\xd5\x11\x88\x94\x43\xad\x86\x55\x4a\x20\xe2\x0b\xbb\x65\xcc\x6a\x82\x47\x26\xa1\x61\x98\x05\x05\xfa\x02\x55\x14\x56\x51\x81\xc8\x2a\x14\x05\x58\x75\x05\x22\x3f\xa1\xc0\xc1\x2a\x2d\x10\x49\xfd\xfb\x28\x17\x56\x8d\x01\xf2\x82\x82\x04\xff\x7f\x94\xeb\x33\xfa\x50\xd4\x4a\xbb\xef\x09\xd1\xfe\xea\x94\x23\x9d\x57\xb4\x96\xdc\x91\x09\x9e\x50\x6a\x67\xc7\xcd\x2b\x13\x67\x1c\xf2\x89\xf3\xeb\xf9\x86\x03\x48\x1a\x3a\x65\x80\xba\xc4\xae\xdd\x14\xdd\x73\x33\xa6\x4c\x4d\x8a\xfe\xd5\x07\x65\xbd\x07\xa6\x46\xf9\x4f\x3c\x91\x2e\xc7\x39\x5e\x57\xd4\x57\xc4\x01\x04\x87\x3e\x44\x7e\x3c\x81\x1d\x27\x28\x18\x9e\xb9\x37\x05\xdd\x28\x23\x71\x0a\x4e\x94\x51\xa3\xd5\x68\x59\xe8\xe3\xdd\xec\x69\x24\x38\xc9\xe6\x83\x03\x88\x13\x3a\xb9\x5f\x8a\x91\xd1\x1c\xe0\x99\x71\xcb\xba\x91\x74\xaf\x77\xbf\xe3\xe5\x5a\xa6\x64\x69\x07\x76\xc2\xe9\x00\x11\xd5\x26\xdb\x74\xff\x50\xe1\x7f\x33\x1b\xae\xd0\x67\x28\xb3\xb1\x2c\x87\x48\x1a\xd4\xff\x58\xc6\x43\x04\x07\x77\x1b\xcb\x7e\x88\x38\xc1\xdd\xc6\xaa\xf6\x10\x09\x82\x61\x88\x59\xf0\xf1\x48\x27\x54\xc0\x98\x35\x1f\x8f\x78\x42\x5f\xb0\xea\x3e\x44\x36\xe0\x2c\x98\xa5\x1f\x8f\xc4\xc3\x1b\x18\xcc\xea\x8f\x47\x02\xe0\xbe\x60\x29\x00\x88\xbc\x81\x8b\x8c\x25\x02\x20\x12\x0c\x1f\xb1\xc3\xd4\x01\x78\xa4\x05\xae\x18\xa6\x14\xc0\x23\x3e\x30\x09\x61\xc9\x01\x88\x84\x90\x2e\x4d\x11\xfe\x9b\x2e\x00\x72\x8e\xee\x8e\xdb\x47\x7d\x8c\xfc\x3f\x8f\x02\x55\x46\xcd\xba\xb4\xe9\xb9\x6b\x14\xd2\xe1\x92\xda\x03\x37\xa5\x45\xe3\xd4\x58\xd3\xcb\xcf\x36\xee\x89\xb8\xe0\xcb\xc3\x8a\x03\x48\x18\xba\x3e\xb1\x7f\x3a\xd7\x6a\xa2\x55\xfc\x82\x30\x63\xcb\x13\xe7\xf8\x5a\x5b\xfd\xc6\x5c\xaa\xf5\x3b\xb9\xe8\xcf\x74\x4a\x6d\xc1\x09\x2b\xa1\x38\x20\xbb\x0f\x35\x3c\xbb\x8f\xb2\x28\x62\xfd\xb8\x9c\xf8\x7b\x5e\x51\xe4\x58\xae\xc0\xcb\x81\x47\x49\x24\x32\x35\xac\x9a\xeb\x0d\x77\x7b\xde\x2a\x36\xe3\x00\xf2\x01\x5d\xcf\x2a\xec\xa8\xbf\xd8\xd7\x30\x46\x91\xe7\xc8\x6f\x9d\x70\x50\x60\x5b\xf7\xbc\x7b\x95\xae\x4b\xda\xfb\xf4\xba\x98\x49\xf5\x65\x5a\x36\xe1\x7f\xb3\x1a\xae\xcf\x18\xdc\x6b\x2c\xc3\x21\x12\x06\x1f\xa9\xc3\x32\x1e\x8f\xc8\xee\x83\x97\xa0\x18\xe6\xc3\x49\x3e\xc0\xad\xc6\x92\x67\x7f\x0f\x3a\xac\x6a\x98\x0a\x0d\x8f\x44\xc3\xc3\x81\x29\xd2\xf0\x48\x01\x4c\x8d\x58\x42\x0d\x22\x9b\xb0\x42\x63\x6a\x35\x3c\xe2\x02\x0f\x07\xa6\x5c\xc3\x23\xf9\x30\x9d\x60\x49\x36\x88\x7c\x85\xbe\x60\xa9\x36\x88\x94\x42\xc3\xb0\x84\x1b\x44\x8a\xa1\xfb\x98\xda\x0d\x8f\x54\xfc\xfd\xef\x16\x2c\xfd\x86\x47\x6a\x60\xc0\x60\x69\xb8\xbf\x6a\x03\xae\x18\x96\x8c\x83\x48\xe1\x9e\xa5\x45\xaa\x3f\x89\xee\xc1\x99\xa9\xe9\x75\xd5\xd8\x92\x0a\x2e\x1f\xcf\xc5\xd7\xd5\x1e\x81\xb1\xa3\xd4\x27\xab\xac\xe4\x18\x0f\x05\xef\x92\x8a\xd1\x01\xf2\x1f\x96\xaf\x6d\x05\x33\x02\x80\xf8\xa3\x6f\xf7\x52\xe8\x2d\x46\xe3\x47\xdf\xb3\x08\x8b\x3a\xb3\xf8\x77\xd8\xba\x9d\x25\x96\x4e\xb4\x6c\xb4\x9e\xa0\xe5\x7e\x6a\x44\x97\xb1\x92\x0a\x90\x4c\x74\xfe\xb9\x5e\xf4\x84\x23\xf0\xfe\x74\xcb\xe0\x63\xd5\x7e\xe5\x54\x22\x8a\xb5\x2f\x6b\xad\x67\xf2\xb7\x62\x3b\x0d\x5f\xb1\xc9\x74\x11\xde\x71\x02\x48\x16\x5a\x91\xf2\x05\xdc\x3e\x40\x19\xd3\xc7\x70\xab\x6b\xa5\x5e\x60\xd5\x90\xf8\xc9\xbd\xdd\xb9\x6c\x17\x18\x2e\xb8\xf0\x3e\xc1\xfd\xc4\x21\xcc\x00\x79\x87\x4e\x57\x2f\x6e\xff\xca\xa3\xbb\x64\x1c\x7f\xf5\x10\x53\xa3\xf5\xd9\xb0\x40\xc1\xa7\xa2\x1f\xc9\x4e\xda\x5d\xf7\x1a\x54\x33\x73\x2c\xa3\x36\x01\x48\x17\x5a\x98\x98\xcc\x3e\x06\x9d\xc1\x07\x1b\xa5\x3c\x06\xee\x34\xdc\x0a\x58\x7d\x17\xb9\x4e\xc2\x79\x81\xf5\x47\xe5\x94\xa0\xcd\xc1\xc2\x93\x0a\x38\x80\xcc\xa2\x85\xcf\xf7\x6c\x03\xd9\xfa\xbe\x29\x46\x71\x12\xb3\xa5\xb3\xa6\x02\x7c\xb7\x79\xac\x53\x92\x96\x5c\x94\xde\x2a\x13\x0c\x29\x2d\x59\xad\x39\x01\xc4\x19\x3d\xfe\x37\x8d\x9e\xe5\x90\xde\x67\x25\x93\x0b\xdf\xdf\x2d\x05\xb5\x7b\xb8\x6b\x54\xca\x59\xa5\xd7\xf8\xb4\xb0\xba\x09\x5a\xed\x22\x9c\x01\xc8\x4b\xb4\xb3\xe1\xd3\x17\xbc\xf9\xa9\x2e\x98\x0c\xe8\x55\x39\x90\xe7\x99\x0c\xfd\xac\x0c\xb7\x3a\x24\x53\x72\x62\x7a\x4d\x97\xf7\xf6\x49\x79\x00\x90\x5e\x74\xaf\x71\xe4\x6e\x71\xda\x05\x8f\x7a\x5f\x71\x16\x8d\x23\xe2\xfb\xb7\xec\x12\xaf\x6d\x8c\xaa\xbc\x76\x58\xcd\x6c\xb9\x5b\x48\xfd\x44\x6a\x75\x5b\x1b\xa2\xbd\x2d\x6a\xbf\x97\xf1\xe8\x58\xd5\xb1\x53\x01\xd7\xa9\xf8\x65\xf8\xa3\xc1\x7d\x85\x0a\x16\x2b\xb5\x13\x16\x9f\x17\x19\x29\x2e\x36\xe7\x03\x80\x38\xa3\x7b\x66\x77\xcf\x91\xaa\x9f\x07\xb9\x45\xeb\xe4\xf7\xa9\x39\x90\x69\x06\x27\xaf\xe7\x2c\x26\x7d\xa4\x99\xdf\xdd\xc5\x77\x78\x5a\x39\xb9\x14\x20\x2f\xff\xf3\xcb\xae\xd3\x4b\x81\x1a\x43\xeb\x31\xfe\x5c\xe5\xfe\xba\x0b\x8e\xab\x7d\x83\xb1\x87\x99\x71\x64\x8f\xb9\xdf\xfe\xca\x93\x92\x0d\x39\xe5\x04\x90\x50\xb4\xea\xfc\x7c\x2e\x87\x8d\xe4\xbb\x53\x59\xc5\xf9\xaa\x87\xef\x7f\x5f\x2d\x9c\x8e\x51\xb8\xff\xba\xbb\x81\xc4\x45\xe5\x63\xd0\xf3\xb9\xae\x67\x00\x89\x43\x6f\x2d\xe9\x23\x15\xe5\x23\xfe\xfd\x73\x3f\x2b\x0a\xfd\x47\xac\xdd\xf2\x1d\x2e\x04\x9f\xea\xd0\x0a\xa2\xfc\x25\xa0\xf5\x70\x8a\xfa\xa1\x34\x40\x7e\xa1\x9d\x9d\xab\x98\xb1\x28\x19\x2c\x3f\x6f\xd6\x28\xf1\x69\x5d\xf7\xc0\xb5\xbd\xdd\x4f\xc8\x7d\x07\xaf\x7b\x34\x11\x39\x8b\x09\xf5\x65\xfc\x04\x40\xd6\x16\xfd\xd4\xda\xa9\x33\x29\xc4\xaf\x34\xb5\x93\x22\x05\xc3\x9a\x89\xde\x25\x6e\x75\xc8\xc4\x96\x0b\xef\x2a\xb3\xab\xf3\x74\xbf\x67\x98\x4e\x08\x90\x4f\xe8\xba\x55\x76\x62\x31\x8e\x54\x7d\x68\x74\xb9\x44\x94\xe3\xc0\xab\x14\xb2\x21\x96\x12\x1b\x5a\xe2\xbb\xc6\xcf\xec\xcf\xf6\x8f\xc7\x96\x6b\x00\x80\xb8\xa2\x4f\x09\x93\xfa\xdb\x8f\x37\x66\x39\x86\xc6\x06\x97\x95\x9a\x6c\xa5\x4a\xee\x52\x9d\xfe\x20\x1e\x95\xfd\x0a\x17\x9f\x9d\xf4\x4a\x46\xda\x10\x20\x9d\xe8\xe1\x7d\x5d\x57\xee\x89\x24\x3c\x67\x6f\x57\x27\x7c\xe8\x97\x18\x96\x79\xf1\x6b\x99\xbe\xc2\x99\x2d\xff\x29\x6d\x15\xcf\xe3\x4a\x27\x57\x9c\x80\xac\x26\x6a\x38\x91\xf1\x9e\xcd\xe7\x11\x97\x07\x36\xae\x19\xb4\xb3\x2f\xac\x5f\xa0\x0c\x34\xea\x67\x2e\x4a\x7a\x70\xe0\x0e\xa7\xe3\x8b\xda\x03\xf1\x00\x09\x46\x7f\xba\xe6\x78\xf7\x5a\x1d\x9b\xbc\x20\xa3\xc0\x58\xd8\x43\xef\xd9\x36\xed\xba\x58\x4b\x2b\xfb\x68\x89\x02\xe6\xfc\x20\xff\xe9\x27\xc7\x01\x52\x8b\x3e\xb2\xaf\xde\x0a\xf7\x25\x86\xde\x93\x21\x88\x5d\x3c\xe5\xcb\xfa\xfb\xc3\x90\x5c\xfe\x94\x3a\x9d\xf6\x0f\xcd\x2b\x01\x41\x81\xba\xec\xf9\xdb\x35\x14\x1d\x07\xb9\x8c\x33\x37\x88\x92\x63\x8a\xa7\xcf\xb6\xd3\x88\x0c\x5b\x2c\x08\xa7\xea\x64\x1d\x8e\xfd\xe6\x1f\x48\x4c\x74\xcf\xa0\xf1\x9b\x2f\x00\xb2\xfc\xa8\xe1\xf6\x8d\x7b\xd5\x95\xe3\x6d\xad\x52\x53\xf6\x3f\x71\xbe\x69\xc4\x90\xa6\xf2\xf6\x1b\xe7\x63\xc3\x31\x2a\x2e\x06\x64\x43\xe8\x7c\x0b\x40\x96\xd0\x67\x24\xa7\x24\x57\xc9\x59\x2d\x44\xff\xd8\x91\x73\xef\x54\xc8\x49\x6e\x28\x6a\x08\xb6\x52\x8b\x79\xcd\x71\x0a\x12\x04\x6b\xf8\x96\xc5\xe3\x00\x02\xd0\x61\x73\x76\x44\xb9\xf2\xb8\xdd\x29\xef\x0b\xf4\x1a\xeb\x82\xbc\x15\x2f\x08\xa7\x7f\x4e\x7d\xf6\x96\xd1\x14\x29\x75\x59\xa6\x9e\x59\xbe\x8c\x03\x48\x2e\xfa\xf3\x63\x4c\x3b\x24\xea\xb4\x36\x59\x6c\x13\x2f\x48\xde\x99\xd1\x15\x73\x7b\x4d\x7c\x89\x47\xf6\xc4\x8b\x57\x67\x59\xf4\x23\x57\xf5\xd1\x6f\x82\xf4\x4b\x7f\xf3\x5d\x7a\x82\xab\xa3\x85\xe4\x51\xb3\xd1\x3e\x4b\x13\x83\xd3\xce\x74\xbe\xbb\xd8\xfc\xa6\x4d\x1e\xa6\x4a\xd3\xfe\x10\x41\x3f\x36\x41\x92\x78\x35\xd4\x3b\xbc\xd3\x52\x6b\xe9\x7b\x92\x75\xba\x3e\x8d\x44\x96\xfa\xae\xcf\x3a\xaf\xf7\xe7\x6f\x7d\x23\x20\x3e\x56\x8d\xbe\xbf\xf9\x60\x7e\x50\x26\x32\x6f\x52\xa3\xa7\xf3\x4e\x94\x19\x71\x2c\xf9\x3a\xcd\xef\xdf\x3e\xfd\xde\x69\x1d\x6b\x57\x4a\x9e\xf0\x9f\xd9\x56\xe7\xff\xf9\xb7\x7e\x81\xa3\x51\xd7\x38\xad\x98\xeb\x97\xaa\x8b\xdf\x1d\x14\x11\x0a\x64\x3c\xee\xfe\xf0\x91\xa4\xc3\x81\xcf\x34\xd7\xb8\xb5\x9e\x74\x02\x80\x04\xa3\xb3\xc6\x6b\x95\xfa\x43\xe2\xc4\xbf\xbe\x08\xe6\x4c\xa9\xdf\xa1\x79\x76\x2c\xc6\xda\xee\xc5\xf5\xd7\x81\x3f\xd3\xdf\x91\x85\xd1\xe5\x23\x5a\x00\x69\x40\x9f\x52\xbe\x10\x22\x7a\x2b\x3e\xad\x99\x69\x92\x1b\x9d\x36\xb6\x1f\x8b\x82\x1e\xb3\xf9\x4b\xed\xeb\x74\xba\xa8\x65\xaf\x69\xb6\x9e\xd3\x8f\x03\x48\x06\xfa\xdc\xed\x15\x23\x5d\xb8\x57\x54\x1d\x3a\x63\x98\x1d\xf0\x28\xdf\xc8\x61\x99\xf6\x42\xdf\xd6\x95\xdc\xb5\xce\xc7\x77\x7d\xac\x2f\x55\xb5\x6f\x27\x25\xf4\x75\xd5\xca\x71\x66\xd6\x37\xec\x11\x17\x17\x29\xcd\x0a\x43\xb2\xa2\x2f\xb3\x3e\x3b\xc4\x1a\x11\xa6\x31\x47\x8c\xf4\x0e\xd9\xc5\x4f\x7e\xc5\x01\xa4\x1f\x6d\xfe\x8f\xcf\x06\x8a\x92\x07\xae\x67\x1f\xe6\xf9\x3a\xe8\xee\xe3\x7c\x82\x24\x52\xd1\x55\xeb\x56\x89\xf7\xcd\x37\xef\x3b\x1c\x0e\x7a\xfc\x02\x00\xe9\x47\xef\xa7\x58\x87\x75\xd4\x75\x8f\xf1\x5b\xce\x95\x36\x2e\xc4\xa4\xe6\x7c\x97\xad\x53\x6c\x7c\x3c\xa3\x13\xf2\xf8\xe8\x9c\x78\x19\x1b\x08\x01\xb2\x84\xfe\x78\xb9\xcb\x4c\x29\x64\x17\x37\x5a\x8f\x2e\x1b\x06\x73\xe4\x9e\x6b\xf5\x30\xff\xe9\x7f\xbd\xaf\xa1\xd5\xff\x9b\xae\x91\x3b\x51\x6d\x84\x13\x40\x5e\xa0\x57\x3f\x6f\xe6\xa6\xb8\xed\xf8\xef\xf7\xf1\xa9\x7c\xda\x7a\xf1\x8a\xcc\x0b\x47\xc5\x56\xcc\x33\x9e\xcf\x9c\x1a\xfd\xbd\x75\xd8\x7e\x92\x12\x20\x63\x68\x6f\x87\x17\x3f\x9b\x1c\x5b\x0f\xbe\xda\x9f\xc9\xa1\x1c\xae\x39\xbf\x95\xef\x79\xdb\x4f\xff\xd4\x63\x22\xf7\x02\xb7\x6b\xa4\xaa\xd1\x0a\x00\xf9\x8d\x1e\x7e\xc7\x7c\x41\xfe\xe4\x5e\x03\x5d\x4e\xe5\xdf\x73\x95\xa1\xeb\x0f\xe5\x0f\xb5\x1d\x69\x4d\x66\xde\xef\x61\x94\xa5\x4f\x6c\xa4\x95\x01\x00\xd2\x87\xde\x2c\xda\x13\x29\x87\x4c\x8a\xdf\x35\xf6\x52\xb3\xa8\x1d\x16\xec\x59\x54\x5a\x4b\x68\xab\xbc\x2a\x1b\x24\xce\x7c\xfd\x08\x99\xd1\xf8\x02\x40\x96\xd1\x7b\x75\x87\xfa\x54\x65\x56\xd4\xef\xc2\x73\x54\x4a\x6f\x6b\x0f\x29\x04\xa4\xae\x47\x2a\x32\x5e\xa8\xb3\xa9\xa5\xd8\x30\xba\xf7\xe1\xf2\x0a\x6a\xe8\xb9\x42\x31\x26\x95\xb5\x3a\x5f\x0b\xa7\x9e\x1b\x2d\x0a\x34\x26\x6d\x97\x55\x9f\x5c\x92\x60\xb6\xfc\xc6\xb8\x6c\x32\xac\x75\xf2\xfd\x76\x18\xa0\x93\x80\x5f\x42\xf0\xef\x2f\x4c\xba\xd6\x2a\x7b\x76\x2f\x1e\xbd\x94\xd6\x5e\x45\xd8\x3c\x62\x03\x18\x83\x37\x63\xc2\x22\x7d\x19\xcf\x86\x08\xff\xa3\x7a\x90\xa3\xda\x51\x2a\xfe\xf0\xcb\x12\x2c\x05\x01\x91\x4c\xd8\x0b\x60\x8a\x08\x3c\x92\x05\x9b\x6b\x4c\x21\x81\x47\xde\x41\x6d\x87\x25\x26\x20\xd2\x05\x45\x27\x96\x9e\x80\xc8\x2c\x54\xf6\x98\x92\x02\x8f\x38\x43\x04\x53\x56\xe0\x91\x97\xd0\x7d\x2c\x69\x01\x91\x5e\xa8\x86\x31\xd5\x05\x1e\x49\x85\xee\x63\x0a\x0c\xe8\x0b\xec\xc7\xb1\x44\xc6\x5f\x5f\xa0\x1a\xc6\xd4\x19\x78\x24\x14\xf6\x0f\x98\x5a\x03\x8f\xc4\xc1\xdd\xc7\xd4\x1b\x78\xe4\x17\x7c\x5f\x00\xa6\xe6\xf8\x83\xc8\xda\xe2\x27\xc1\x94\x1d\xf8\x49\x3e\xc1\xf6\x01\x53\x79\xe0\x11\x57\x78\xc2\xb0\xd4\x07\x44\x3a\xe1\x0f\xfe\x30\x15\x08\xde\x15\x4d\xfc\x24\x98\x22\x04\x3f\x49\x30\xb4\x0b\x4b\x88\x40\xa4\x16\x9e\x7c\x4c\x2d\x82\x47\xc2\xe0\x4f\x7b\x30\xf5\x08\xde\x15\x7e\xfc\x24\x58\x92\x04\x4e\xb2\x04\xcf\x17\x96\x2a\x81\x08\x80\x01\x86\x25\x4c\x20\x92\xfb\xf7\x3e\x18\x4b\xa1\x00\x79\x32\x12\x32\xa2\xff\xff\x1a\x08\x9d\xbc\x8d\xa9\x4b\x65\x0f\x29\xfe\xb0\xe8\x7d\xd4\xd5\x32\x1e\xd9\x75\xa8\xf2\xae\x90\x5e\x13\xe7\x2e\xbf\xf4\x30\xae\x7d\x25\xc9\x0c\x9f\x71\x00\xa9\x42\xab\x61\x8e\x37\x5d\x6f\x73\x0d\x0d\x75\x3d\xce\x2e\x5c\x2d\x38\x13\x38\xf6\xce\x48\xf3\xaa\xb1\xe7\xdd\xbb\x77\x38\x88\xf6\xd3\x98\xcc\xfb\x6f\x7f\x3e\x7a\xfc\x95\x73\x62\x62\x36\xfc\x44\x6f\x3d\x6f\xdc\xf1\x10\xfb\x9e\xee\x77\x38\xe6\x99\x8f\x59\xf6\xf4\xb5\xdb\x77\x0f\x17\xd9\x7a\xc8\xc5\x6e\x47\x23\xba\xac\x85\x75\x1d\x7f\xee\x7a\x48\x79\xff\xa4\xbf\x31\xc9\x95\xd2\x7e\x6e\xe2\x4f\x45\x4b\x2e\x81\xcd\xfe\xbc\xaf\x3a\x34\x03\xfb\x5a\xa4\x84\xff\xcd\xec\xbf\xe9\x04\xe6\x06\x2c\xcb\x21\x52\x05\x0f\x14\x96\xf1\x7f\x67\x81\x08\x96\xfd\x7f\xcf\x20\x29\xdc\x3a\x2c\xc5\x08\xe4\xc9\xc9\x08\xfe\xff\x43\xae\x65\xb4\x58\x3f\xa8\x9e\xea\xfc\x5d\xb0\x48\x38\x62\xd1\xd6\x52\x86\x96\x7f\x5c\x46\xfc\x74\x6f\x7e\xed\x7c\xcf\x1e\x4f\xd1\xfc\x56\x56\x27\x5f\x1c\x40\xa6\xd1\xf2\x88\x3b\xeb\x08\xcb\xcb\xcf\xa6\x1c\xa2\x24\x01\x64\xc9\xd1\x2e\x69\xaf\x4f\x34\xb4\x70\x6b\x39\x6c\x06\xe5\xbd\x30\x7b\xf4\x5d\x6a\x10\x07\x90\x00\xb4\x9c\xbe\xf9\xca\xe1\x9b\xb7\x42\x04\x41\x4f\x62\x86\xb5\x3c\xff\xaa\xd2\x53\xf1\xa4\xca\x8e\x53\x2f\x59\x52\x4b\x2f\xbd\xbd\xa2\xbf\x48\x8b\x03\x48\xfd\x7f\xfe\x65\xfb\x08\x4b\xf1\xbd\xfe\x64\x87\x29\x5f\x12\xfd\xe9\x80\xcf\x36\xd3\xf6\x36\x6d\xad\x3e\xd4\xcc\x59\xdf\xe5\x5c\x5e\x8c\x38\xbc\x11\xfe\x37\xb3\xe1\x0a\x2d\xc3\xa3\x8d\x65\x39\x44\xa6\xe1\xa9\xc3\x32\x1e\x22\x01\xf0\xd4\x61\xd9\x0f\x91\xfa\x5d\xf0\xd5\xb8\x58\x0a\x1e\xc8\x5f\x20\x24\xa2\x72\xc1\x01\xa4\x04\xad\xc6\x26\xc6\x5a\xa6\x69\xe9\xed\x06\x6b\x43\x73\xbe\xfb\x30\xe5\x0d\xdd\x6f\xa4\xba\xf2\x10\xdc\x57\x1f\x2a\xfe\xac\xc5\x98\xe2\xd0\x80\x03\x48\x1f\xfa\x14\xf1\xdd\x7b\xda\x26\x69\x78\x3d\x88\x8e\xf5\xc1\xc1\xf4\xaa\x23\xa7\x0b\x0e\xa6\x1b\x25\x28\x59\x30\x8b\x55\x26\x9f\xac\x2d\x9d\xde\x8f\x03\x88\x07\x5a\x4c\x32\x78\x5f\xb7\x8a\xa2\xbf\xc3\x4b\x74\x6d\xff\xb0\x58\x81\x67\xa6\x1d\x37\x55\x1e\xff\xb9\x8b\x6b\x59\xc3\x65\xb8\xb5\x58\xcd\xed\xd0\xf0\x44\xb7\x89\x2d\xbf\xa4\xe6\x9c\xbf\x48\x98\xa4\xf3\x2e\x79\xa4\x2e\xda\x1b\x71\x30\x6e\x29\x6d\x3e\xd9\x2f\x66\xd9\xf4\x7c\x77\xc5\xea\xdb\x89\xed\xcf\x47\xdb\xbf\xf8\xfb\xe4\x29\xdb\xea\x78\xca\xb1\xe6\xda\x86\x83\xd9\x8d\x43\xce\x5f\xbf\xd5\x5e\xbe\x79\x11\x97\xbb\x7f\xc4\xfa\x27\x59\xd8\x51\xe1\x7f\x73\x13\xae\x68\x09\xd4\x09\x58\x9e\x42\xa4\x0f\x1e\x39\x2c\x67\x21\xe2\x01\xaf\x59\xb1\xfc\x85\x88\x27\xac\x48\x58\x2e\xff\x9d\x05\xfa\x82\xd9\xae\xc1\x59\xa0\x7e\xc3\xec\xd8\x60\xa9\x84\x62\x0c\xab\x6b\x83\x48\x03\xd4\x3c\x58\x8d\x1b\x44\x32\xfe\x3e\x34\x8e\xd1\xbb\xfd\x95\x7c\x70\x91\x31\xdb\x37\x3c\xd2\x0f\x7d\xc1\xec\xe0\x20\x02\x0f\x3a\x56\x17\xf7\xb7\x22\xc3\x59\x30\x1b\x39\x3c\xf2\x02\xee\x0b\x66\x33\x87\x47\xc6\xa0\xfb\x98\x0d\x1d\x1e\xf9\x0d\x11\xcc\x9e\x0e\x06\x3f\xdc\x4a\xac\xbe\xee\x6f\x36\x25\x86\x49\x0b\xab\xc1\x03\xf2\xfb\x08\x48\x1c\xb7\x93\xd6\x00\x3a\xbf\x97\xa9\x1d\xbe\x7c\xaa\x4f\xea\xdb\xca\x52\x9a\xd5\xcd\x6b\x37\x39\x7a\xc3\xde\x19\x1d\x4b\x18\x61\x94\xec\x91\x25\x78\x48\x3f\xc1\x89\x03\x48\x0c\x3a\xa9\x04\x58\xfa\xdd\x11\xb1\xaa\x1a\x0e\x4a\x3e\xa9\xff\x68\xef\xdb\xe5\x51\xc2\xbc\xc8\x0c\xba\x2d\xf6\xf0\x9a\x04\x2e\xb2\xe3\x5f\x0f\xe0\x00\x32\x82\x2e\xfd\x9a\xb2\x75\x74\x4f\x5a\x2c\xba\xe3\xce\xfe\xac\x51\x74\xe1\x35\xec\xb8\xd0\x9e\xac\xda\x15\x79\xa6\xe5\x6d\x5c\xdc\xa1\xf3\x7a\xfa\xdb\x1b\x82\xfe\xfc\x93\x13\x1d\x88\xfd\x5b\x73\xa7\x7e\xcf\x3d\x69\x63\x27\x1d\x79\x12\xf3\x5a\xcb\xce\xce\xaa\x52\xe9\x44\xcc\x24\xde\x17\xbe\x72\x1c\x07\x90\x75\xb4\xd4\xd9\x3b\x22\xd4\x9e\xf8\x4a\xac\xbe\x2d\x4a\xf8\xc3\x94\x90\x7a\xc8\x4d\x32\xe2\x19\x17\xb3\x07\x33\x1e\xeb\x76\xc6\xae\xee\xef\xdc\x85\xff\xcd\x4d\xb8\xa2\x03\xb0\x72\x60\x79\x0a\x91\x18\x98\x4e\xb0\x9c\x85\xc8\x08\xdc\x6a\x2c\x7f\xff\x86\x2d\x9c\x05\xcb\x65\x88\xac\x43\x99\x84\xd5\xcd\xff\xcd\x0d\x7b\x97\x9a\xff\x7c\xa1\xb0\x5b\x81\x4d\xd6\x4f\xbb\xa7\x3d\x59\xa7\x9c\x2b\xe7\xc2\xe9\xf4\x26\x4f\x9c\x20\x6b\x20\x99\xba\xea\x27\xe9\xa3\xe5\xcf\xf2\x64\x81\x7c\xc7\x98\xfd\x56\x30\x1d\x00\xb2\x17\x51\x1b\xd2\xf1\x4e\xd7\xc7\x40\xf2\xe2\x57\x3a\xda\x7e\x75\xcf\x26\x17\x95\x58\xe9\x8e\x96\xb7\x13\x6f\xea\x47\x72\xee\x66\xbb\xdd\x1d\x78\x0f\x90\x6a\xf4\x7d\x8d\x8d\x20\xaf\x40\xef\xd6\x9e\x42\x7b\xcf\x36\xf1\x81\xfc\xb7\xa9\x38\x75\xd3\x76\xd6\xcb\xa7\x05\x03\x82\x07\xaa\xc6\xc6\x40\x17\x00\x48\x1f\x3a\x5e\xf7\x84\xdc\xb6\xb8\xda\x19\x73\xdb\x8a\x55\xdf\xd3\x45\x97\xba\xb0\x50\xd1\x34\xc5\xa7\x6b\x24\xd2\x42\x53\x92\x4e\xac\x6d\x55\x10\x20\x23\x68\x79\x54\xf4\x96\xbf\xa8\xee\xb1\x75\xf0\xb9\x1c\xed\x12\x2a\x8e\xf3\x0d\x23\x2b\x5d\x65\xbb\xcc\x2b\x8a\x13\x45\x6a\x12\xa2\xfd\xce\xed\x77\x02\x48\x32\x3a\xfc\x5e\xfe\xc8\x3f\x79\x4a\xc6\xd7\xe3\x8b\xd1\xcb\xd7\x74\x86\xbd\xf7\xdc\xa6\xc1\x85\xf5\xc3\xf4\xed\x67\xa8\xcf\x4a\xe6\xc7\xd3\x97\x01\xa4\x18\x7d\xc3\x4e\xec\x22\x9c\x95\x96\x87\xa8\x25\xeb\xd6\x54\x50\x7c\xf4\x12\x57\x96\xa0\x19\x7e\xc8\x76\xae\x66\x7e\xda\xe5\xf0\x61\x2d\x43\x39\x80\xd4\xff\x27\x58\xe3\xf6\xba\xaa\x7b\x1c\x67\xa9\x60\xe3\x4f\xba\xfa\x95\x56\xf6\xfc\xad\x49\x7d\x56\xc7\xf0\xa1\x49\x77\xc4\xf2\x7e\xec\x85\x00\x27\x80\x44\xa1\x2b\xfe\x29\x35\x39\x3a\xd1\x13\xec\xbd\xd1\x4a\xd5\x73\xfb\x68\xe7\xda\x1b\xd8\x13\x83\x43\x07\x71\x38\x49\x66\x45\x93\xf8\x23\x9f\x59\x01\xf2\x3f\xc6\xce\x3c\x9e\xaa\xef\xfb\xff\xa6\x52\x12\x32\x64\x4a\x21\x15\x0d\x64\x2a\x94\xe9\x50\x2a\x19\x42\x29\x14\x21\x45\x28\x52\xc6\x70\xf7\x35\x25\x99\xe7\x29\x21\x32\xcf\x99\x43\x86\xcc\x43\x64\x2a\x43\xa6\x48\xe6\x79\xfe\x3d\xfa\xfe\x3e\x77\xdf\xd3\x5f\xe7\xfd\xff\x7e\x9e\xbd\xf6\xda\x6b\xaf\xf5\x5a\xdb\x71\xee\x0f\xb4\xf1\xaa\x64\x9f\x06\xd2\x79\xaf\x9c\x72\x71\xb8\x18\x5f\x77\x65\x86\x63\xc5\xa7\xd2\x8b\xbe\x5b\x7f\xcb\x2e\xea\x64\xc7\xaf\x51\x9f\x36\x80\xac\xa3\xa5\xa6\xec\x5d\xbe\xc9\xeb\xfb\x4e\x97\x4c\x69\x1f\xb5\x6d\x63\x75\x66\x31\x2a\xa8\x53\x9a\x24\xf1\x94\x8e\xc8\xca\x4c\x73\xee\x72\xf6\xc5\x01\x59\x1d\xf4\x4b\x26\x12\x0b\xc9\x83\xba\x07\x43\xaa\xdf\x3e\x1a\x38\xb5\x36\xc0\x22\xfc\x33\xe9\xeb\xdb\xec\x97\x72\xcb\x15\x07\x2e\xd4\x9c\x34\x39\x87\x03\xc8\x07\xb4\xf1\xbc\x0f\x2b\x48\xef\x3f\x6e\xe8\x7e\xd0\xe1\xe9\x61\xd4\x5d\xb7\x14\x39\x23\xc3\x6a\x9d\x7c\xe8\xb9\x8b\xe8\x65\x85\xf9\xcc\x60\x0b\x3c\x40\xf2\xd0\x72\xe8\x7d\xbc\x60\x9e\x99\xf1\x52\xe5\xcb\x87\xc1\xcf\x32\x36\x32\xcb\x6e\x84\x7e\x0b\x57\x30\xab\xbe\xf7\xc8\x81\xd2\xa5\xeb\x52\xbd\x34\x40\x9a\xd0\x6a\x85\x49\x4a\xb6\x32\x1e\xa4\xf5\x05\x29\x5d\x98\x61\x6f\xb8\x52\xae\x62\x11\x6f\xb2\x46\xce\xea\x63\x98\x71\x60\x90\x6f\x54\xd0\x0e\x20\x13\xe8\xa7\x1b\xbd\xdb\x13\x8e\xb4\xdc\xcf\x79\xf7\x4e\x8f\x95\x9e\xf9\x96\xdf\xf5\xf7\xb1\xc2\x66\xc8\x97\x8f\x27\x66\x5a\xa5\xae\xde\xcd\xcc\x00\x40\xf6\x12\xfa\x1d\xfc\xce\x81\xb3\x5b\x01\xed\x25\x26\x54\xdd\x55\xe1\x35\x7d\xb2\x07\xda\x87\xb6\xdb\xd8\x8f\x24\x2a\xd8\x18\x5a\x34\x3c\x3a\xe8\x09\x10\x57\xf4\xd3\x0f\xe6\x89\xef\xd7\xfe\xf4\x88\xe9\x1e\x39\x69\xfa\x5c\x3c\xb2\xe7\xce\xe9\x12\xc9\xad\x35\xb2\x65\x2b\x24\xff\x50\x6e\xb2\xe2\x4f\xd4\xd0\x63\x56\x5c\x93\x0b\x39\xe5\x77\x3f\xf3\x8f\xbc\x9f\x8e\x3f\x7c\xad\xfa\xdc\x5e\x46\xa5\x6c\x55\x9a\x47\x6b\xa5\x8f\x07\x0d\xa4\xe2\xf0\x40\xf6\x11\x6a\xb8\xff\xfd\xce\xe2\xaf\xfc\xfb\x2e\xaa\x35\x5e\xa0\xd1\xb4\x43\xda\x93\x8c\x4e\xbd\xbc\xc4\x5b\x78\xcb\x35\xe6\x46\x8c\xcf\x0d\xbb\x20\x80\x04\xa0\xaf\x33\xab\x92\xc4\x8a\x1f\x66\x3c\xdc\x85\x3c\x20\x8d\x12\x09\xe4\xfc\x61\x14\xeb\x46\x9e\x13\x59\x4f\x7e\xdf\xf5\xca\xe3\xfa\xc0\x1f\xd4\x00\x19\x41\xef\x51\xc0\x74\x5a\xee\x62\x62\x72\xe6\x1f\xce\x27\x52\x3c\x2e\x42\xa9\x4f\x47\x29\x2a\x16\xb4\x65\x8f\x5d\x72\x9f\x8c\xcd\x48\x5a\x12\xc6\x01\xe4\x2b\x7a\xfc\xad\xb0\x76\x29\x56\x59\x8f\xd7\x7a\xda\x7e\xb7\x8f\x18\x1a\x84\xd3\xb4\x3d\x0f\x79\x21\xfa\x7c\x3e\xab\x67\xed\xd5\xa2\x63\x81\x28\x0e\x20\xa5\xe8\xf3\xd1\x7a\xc8\x8e\xea\x64\xb8\x69\x80\xa5\xe1\xaa\x92\xf1\x63\xe1\x25\xbb\x90\x40\x47\xa7\xcf\xdd\xea\x8a\x59\x39\x0b\x2c\x3f\x12\xe8\x70\x00\xf1\xf8\xe7\xe7\x91\x7e\x3e\xa3\xac\x3b\x77\x40\x6e\xa6\xb0\xce\xb7\xdf\x43\xb1\xc9\xe8\xf8\xe5\x86\x9f\x4f\x3c\x3d\x14\x9c\x6b\x78\x15\xc4\xcf\x7e\x02\x40\x96\x01\x35\xbc\x5f\xbe\xe9\x89\xb0\x3a\x7e\xb2\x40\x95\x23\xa0\x8f\x99\x59\x28\x88\xe4\xc6\x78\xc2\x55\x3e\xde\xf8\x4b\x16\x46\x1c\x05\x2e\x97\x00\xd2\x85\x0e\x78\x46\x75\x0b\xd5\x64\xbb\x9b\x1d\xbd\x5c\xab\x6d\xcc\x40\x0c\x79\x1e\x99\x6b\x25\xbb\xe8\x1c\x1d\xf4\x39\xe2\x3c\xad\xd6\xe8\x18\x00\x08\x0e\xbd\xda\x5f\xc7\x0f\xdf\x29\x12\x3d\x21\x12\xc4\xab\xe0\xb7\xba\x7d\xa9\x5a\x74\xbb\xd2\x9a\xec\xe7\x85\xf8\x23\xd2\x4f\x14\x27\x57\xfc\xab\x00\xb2\x89\xf6\xfd\xd7\xb2\x9f\x54\xbf\x37\x23\x26\x6c\xde\xec\x7c\x90\xee\xb4\xb4\x7d\xc4\x48\xb5\x03\x3e\xc4\x87\x09\x25\x68\xa8\xcf\x3f\x9a\xe4\xc0\x01\xa4\x17\x6d\x4e\x9d\xee\x31\xe5\x12\x8e\xf6\x96\x9c\x1d\xb7\x93\xfa\x26\x37\x5c\x1b\x79\x34\x55\x9e\x97\xbd\x89\x1f\x5a\xbd\x60\x56\xb1\x56\x4f\x82\x07\xb2\xa6\xe8\x37\x54\x0f\xc7\xa5\x28\x2d\x84\x53\xde\x75\xda\x7c\x5e\x66\x2d\xfd\xc6\xf4\x85\xad\x7b\xd8\x24\xf9\xea\x1f\x85\x83\x74\xc5\xf4\xfe\x1b\x00\x49\x47\x3f\x3d\xdf\x8a\x2c\x57\xb1\x63\xcf\x56\x67\x87\x70\xe1\x1c\xd3\x8f\x47\xad\xc1\x54\x0f\xea\xab\x2a\xaf\x69\x7d\x62\xee\x69\x6f\x9e\x57\x00\xc8\x10\x3a\x35\x8d\xed\x55\x95\x39\x2f\x71\x2e\xcf\x54\x36\xbf\xa0\x28\x47\xe4\xd2\xa7\xd5\x5b\x6f\x5f\x51\x06\x56\x3b\x3f\x32\x7f\xb7\xe8\x94\x59\x87\x07\x08\x1e\x7d\xfc\x0c\xed\x77\xd8\x52\x36\x77\xdc\x6c\x3e\xcf\xb0\x8e\x2c\xbd\xe5\x57\xf9\x74\x46\x43\x84\x74\xc7\x20\x91\xe9\x21\xb5\xe9\xad\xd8\x9b\x00\x89\x45\x5b\x73\x24\xd4\x78\x7f\x42\xce\x6c\xea\x7a\x89\xdf\x9f\x69\x5a\xc5\xdb\x1c\x95\x81\xaf\x6f\xde\x39\x11\xc0\xa4\x56\x8c\xff\x33\xfe\x2b\x07\x20\xd9\x68\x57\x46\x8e\x70\x47\x28\x16\x92\xc8\x93\xf3\x2a\xe2\x8a\xdc\x5e\x58\x57\xf3\x04\x97\xfb\x0b\xe3\xee\x65\x2d\x22\x52\xf2\xb4\x0f\xc0\xdf\xb8\x41\x3f\x7e\xe1\x7d\x5d\x7c\x41\x94\x5e\xa2\x68\x84\x91\x11\xad\xcb\xe9\x41\x91\xb2\x36\xb1\xef\x51\x66\x07\x1e\x1d\xb4\x27\x39\xf1\x58\xda\x05\x0f\x90\x54\x74\x15\xe9\x75\x99\x09\xda\x1c\x11\xb8\xc7\xfb\x81\xa3\x60\xd8\xdb\xf5\x57\x59\x2f\xc9\xa5\xb7\xa4\xed\x94\xbf\x2c\xe5\x72\xe3\xdf\x5d\xf6\x03\xc8\x04\xda\x1c\xd2\x40\xa7\x6d\xc5\x57\x0f\xdc\xf9\x34\x7c\xd2\xb3\xc4\xdd\xe4\x35\x5a\x0a\x8d\x18\x58\x2a\x5d\x7f\xb1\xa9\x7e\xd1\xb5\x7f\x13\x09\x90\xdf\x68\xdf\x34\x9d\x1c\xf5\xd1\xca\xab\xd7\x3a\xdb\xd0\x51\x15\x77\xb2\xea\xb7\xeb\x70\x70\x88\xf1\xcb\x69\x0d\xda\x7b\x4e\x2d\xeb\xe3\x39\xb7\x71\x00\x89\xff\xe7\x27\x86\x7a\x77\x33\x5e\xdf\x67\xe4\x70\xbe\x30\x71\xbb\xe6\xa9\x06\xee\xde\xc5\xd1\xfd\x71\x23\x95\x0e\x34\x0e\x2f\x27\x02\x4c\x2e\x4f\xe2\x00\x12\x85\xce\xf3\xca\x78\xde\x0d\xd9\x1f\xdf\x52\xc8\x0e\xf2\xbc\xa9\xbb\xff\x30\x7b\x2f\xbb\x01\xb8\x6c\x4d\xb5\xe0\xe9\x52\x42\xf7\xfe\xe3\xfc\x1d\x00\x90\x1c\xf4\xde\xfa\xd2\x44\xbf\x97\xe0\x7a\x9d\xe3\x5e\xa5\x32\xcb\xc5\x1e\x13\x5e\x96\x50\x5b\x78\x4f\x51\x61\xea\x48\xd2\xf3\x23\x5e\x20\x26\x1d\x20\xbf\xd1\x92\x8d\xb2\xb6\xe3\xb9\x4f\xbf\xc1\x3c\xdd\xc7\xdb\xa5\xee\x2e\x5f\xbe\x94\x19\x51\xc9\x7d\x95\x15\x9d\xdf\x37\x7f\x93\xff\xad\x0f\xd3\x18\x0e\x20\xf3\xe8\xe4\x77\x9c\xe2\xcb\xb7\x3b\xd7\x3c\xd7\x1d\x15\x85\x3a\xc5\x65\x56\xab\x4a\xe3\xf8\xde\x09\x74\x7f\xba\xaf\x10\x18\xa2\xb2\xb7\x07\xb7\x21\xf8\x1f\x85\x81\x1c\xe7\xff\xbf\x97\xbb\x4a\x50\x2d\x98\xda\xe0\x7f\x04\x52\x0d\xbb\x00\x4c\x79\x40\x40\x7e\x40\x9d\x87\x25\x11\x20\x32\x02\xdb\x13\x4c\x95\x40\x40\x92\xa0\x68\xc3\x54\x0a\x04\xa4\x18\x5e\x95\x63\xa9\x05\x88\xd4\x13\x3f\xf7\x89\x25\x18\x08\x48\x0c\x6c\x4f\x30\x45\x03\xf4\x18\x5c\x0b\x96\x70\x80\xc8\x3a\xfc\x76\x27\x96\x78\x80\x9b\xaf\x43\x98\x04\x4b\x3e\xc0\x49\x3e\xc0\xa5\x60\x2a\x08\x02\x92\x07\xaf\x19\x30\x55\x04\x01\x69\x82\x4d\x33\xa6\x92\x20\x20\x13\xf0\x6b\x67\x98\x6a\x82\xb0\xfa\x4b\x84\x49\xb0\x04\x05\x9c\xc4\x95\x0c\xde\x38\x62\x29\x0b\x20\xcf\x49\x42\xb5\xc7\x05\x07\x90\x51\x74\x36\x99\x8d\x9f\xba\x20\x13\x1d\xb7\x1a\x1a\xe7\xa2\xce\x3f\x3b\xf9\xb2\x46\x7d\x55\xd0\xce\x6d\x73\xea\xfe\xbb\x8a\x0d\xe5\x0d\xe6\xac\xbf\xd9\x0a\x9d\x4d\xe8\xbf\x38\x6e\xec\xbf\x9e\x21\x3d\x7d\x6b\xc1\x3b\x26\xf2\xc6\x53\xd3\xe5\x09\x9a\x92\x90\x3d\xcc\xf7\x3e\xbd\x73\xae\x99\x2b\xd5\xc1\x01\x24\x04\x9d\xdd\x5e\xc5\x4a\x70\x9d\x14\x97\x28\x2d\xfe\x34\x39\xc2\x71\xcf\x65\x44\xfd\x26\x97\xd5\x17\xc9\x25\x07\xc6\xc1\x72\xff\xcb\x6f\x39\xe4\x70\x00\x19\x44\x3f\x9f\xc2\xc6\xf4\x84\x51\x0b\x83\x47\xcc\x83\xbb\xb6\xce\x39\xf5\x94\x9f\x84\x71\x23\x51\x9c\x57\x46\x43\x57\x24\xc8\x9e\xaa\xe4\x86\x08\xfd\x37\xb3\xa1\x87\x46\x61\xdc\x62\x59\x0e\x91\x78\x78\xa0\xb0\x8c\x87\x48\x08\xbc\x55\xc0\xb2\x1f\x22\x83\xf0\x4f\x16\x98\x22\x8f\x10\x1f\x8f\x08\x93\x60\xea\x3c\xc2\x24\x01\xd0\x2e\x2c\xad\x47\xcc\x73\xf0\x40\x61\xc9\x3d\x88\x7c\x25\x5e\xc2\x61\x28\x3e\x88\x94\xc2\x3c\x87\x29\xfa\x08\x88\x07\xfc\x42\x23\xa6\xf0\x23\x38\x8c\x01\xfe\xef\x20\x96\xf6\x23\x4c\xd2\x05\x2f\xa8\x31\xe5\x1f\x01\xc1\xc1\xd5\x63\x49\x40\x88\x6c\xc2\x6d\xc1\x52\x81\x10\xe9\x85\xc9\x14\x53\x09\x12\x56\x6f\x4a\x98\x04\x53\x0c\x12\x26\x49\x87\xab\xc7\x12\x84\x10\x19\x82\x87\x05\x53\x13\x12\x10\x3c\x4c\xa6\x98\xba\x90\x80\xc4\x42\xc3\xb0\xb4\x21\x44\xb2\xa1\x8f\xb1\xe4\x21\x31\xc2\xe0\x2c\x98\x0a\x91\x80\xa4\x42\x21\x81\xa9\x12\x61\x61\x80\x86\x61\x29\x45\x88\xfc\x26\xfe\x8c\x14\x86\x58\x24\x26\x31\x38\x0b\xa6\x5e\x24\x20\x51\x30\x55\x62\x4a\x46\x02\x92\x03\x77\x1f\x4b\x36\x12\xd7\x02\x2f\xbf\xb0\x94\x23\x44\xe6\xc9\x96\x6b\xff\xf7\x5d\x34\x49\xc7\xc5\x26\x1e\xc6\xa1\x85\xc9\x4e\xbc\x7a\xca\x37\x5d\xee\xdc\x54\xee\xeb\xcb\x45\x77\x06\x28\x5f\x9d\xdb\x5b\x7c\xae\xb0\x09\xc8\x6f\xff\x3a\x52\x1c\xca\x02\x00\x92\x85\x6e\x11\x58\x7e\xd5\x3c\x3e\x21\xae\x1b\xe3\x37\x9d\x5d\xe8\xb4\x67\xeb\x77\xb7\xc1\x4e\x31\xb9\x96\xcd\x71\x97\x6e\xbd\xa7\xb2\xaf\x8c\xc7\x00\xf2\x0b\xad\xe1\xaf\xd8\x54\x87\x5f\x5b\x32\x5f\xbb\x2d\x18\x38\x9a\x67\xfe\xf8\x0a\x2b\xfb\x81\x88\xb6\x3d\x1e\x45\xb3\x14\xb3\x9b\xe4\xbf\xdd\x25\x01\x40\x6a\xd1\x55\xf4\xd1\x9d\xaf\xd9\xa4\x5c\x41\x7c\x11\x1a\x36\x2c\x9c\x1d\x6b\x03\x06\xeb\x4b\x9b\x2c\x63\x17\xef\xea\x97\x7b\x8a\x09\x7a\x26\x88\x00\xa4\x07\xfd\x78\x52\xe9\x73\x77\xfa\x3d\x1f\x5f\xbf\xd3\x31\x7b\x38\xe9\x38\x37\x7f\x8a\x7b\x3e\xe3\xf8\x8e\x36\x3d\xcf\xb6\xed\x37\xba\x67\x0a\x7c\x78\x80\x78\xa1\x1b\x96\xbe\xec\x41\xbd\xc0\x73\xe7\x0f\xfb\xdb\x1c\x29\xbd\x98\xd9\xe6\x74\x8a\xfd\x70\x93\x5d\xc7\x8b\x45\xa6\x12\x1b\x20\x35\xc1\x2c\x0b\x90\x70\xf4\xad\x9a\x78\xad\x56\xde\x31\x04\x67\xce\xea\xcc\xf2\xdd\x44\xc8\xc1\xfa\x5c\xd9\x1d\x7b\xad\x6a\xd1\xab\x91\x2f\x14\x0f\x7c\x61\xa8\x2d\x00\x48\x25\xba\xe4\xee\xb6\x6e\x8a\x1e\xb8\x4a\xff\xc4\xfa\x8d\x42\x9f\xd9\x77\x07\x53\xf9\xa7\xa5\x0a\x79\xdf\x74\x7a\xe9\x62\xc8\x7b\xef\x33\x9c\x92\x00\x00\x71\x41\x5b\x23\x71\x46\xdc\x32\x29\xd1\xe2\x9a\x6f\xe7\x03\x1e\x8f\x44\x26\x63\xe7\x27\x85\xf7\xde\xd3\xf4\x1c\x9c\xa4\xaa\xed\x30\xb6\xf7\xb7\x04\x48\x0e\xfa\x16\xa0\x90\xe9\xa8\x5a\xf5\xea\xec\x5d\xbf\xd3\x17\x6a\x34\x56\x22\x45\x06\xa3\x9d\x43\x0a\x8d\xbe\xbd\xe7\x3b\x70\x45\xe0\x93\x96\xc6\x04\x00\x48\x24\xfa\x16\xa0\xab\x3f\x24\x4f\x8d\xee\xc8\xf7\xf0\x92\x6f\xd7\xba\x25\x55\x39\x1c\x0b\x2e\x86\x9c\x33\x1d\x39\xfe\xcc\xfd\x07\x95\xf4\xd7\x94\x1d\x80\x74\xa2\xad\x09\x9b\x5d\x58\xce\xb9\x1f\x30\xa8\x1e\xb7\x97\x5d\x57\x8c\xdb\xf7\x91\x53\x40\x07\xe9\x90\xda\xe3\x9e\x89\xd3\x27\x17\xb4\xc2\xdb\xff\x06\x36\xda\x39\xcc\x3c\x89\x89\x37\x25\x5f\x0d\x4f\x0c\x4b\xda\x2a\x36\x7f\xb0\x3e\x4d\xcd\xdd\xf4\xae\xc4\x70\xe3\xea\x9f\x58\xd1\xf7\x5d\xc7\xd5\x00\x40\xe2\xfe\xf9\x17\x6a\x9d\xcf\xdd\xcd\xf3\x8d\x25\x07\xa3\xbb\xb6\xf4\x29\x0a\x6f\x70\x15\x6a\x54\x9c\x5a\x90\xd5\x3d\xce\xe1\xf4\x40\xf2\xf1\xf0\x1b\x80\x14\xff\xf3\xb1\xd6\xa7\xcf\xfe\x48\xa6\x7d\x28\x1f\xdc\x7c\x71\x7a\x3b\x43\xd8\xd1\x6d\x77\xe2\xc1\x33\xbe\x0a\x86\x79\x94\xd7\x27\x7e\xee\x6d\x8a\x00\x00\xc9\xfe\xe7\xb3\x62\x3c\xec\x8f\x25\xbe\x7f\x3f\xf0\x83\x4d\x46\xb3\xf8\x98\x62\x5d\x30\xfd\x25\xf5\x39\xcb\x40\x9b\xef\x67\xf0\x6f\x4c\x7e\x5f\x4f\x00\x48\x1b\x3a\xd0\x8a\x42\x14\x7e\x2f\xed\x7e\x3a\x2a\xd2\x9c\x2f\xa1\xb9\xcc\x28\xbe\x6c\xa0\xb7\x9a\x8f\xf7\x99\x55\x9c\x90\xc9\x16\x13\xe9\x90\xc2\x01\x64\x0d\xdd\x9d\xb5\x59\x93\x9c\x8e\xcc\x78\xc8\x71\xee\xfd\xa2\xa5\xea\xbb\x33\x16\x22\x91\x4a\x5f\x99\xff\xa4\x9d\x2f\x8b\x26\x5f\x90\x0f\x48\x7b\x80\x03\x48\x2b\x5a\xae\x3d\xb9\x70\xe3\x54\xba\xb4\x69\xa7\x4f\x53\x41\xe9\xef\xe0\x27\x25\x0e\xf4\xe4\xaf\x6e\x06\x71\x1c\x10\x1d\x89\x4d\xec\xfe\xe0\xca\xf7\x57\xeb\xa0\xcd\x17\x7c\x46\xe7\x74\x69\x82\x33\x88\x5b\x71\xe5\x6a\x43\xaa\xd0\x35\x9f\x6f\x2f\x72\xab\xb4\x65\x4c\x87\x48\x3c\xe4\x34\x36\x02\x8d\x70\x00\x49\xf9\xe7\xd5\x58\xa3\xea\xee\x42\xdd\xa1\x86\x5e\x73\xd7\x8e\x4b\x93\xe9\x17\x92\x37\x0e\x29\x97\xf7\xa8\xde\x6c\x28\x4c\xf2\x28\x29\x33\x13\xfd\x2b\x40\xd0\x27\xe5\xf0\x52\xc3\x3d\xc9\x97\x3c\x1f\x3f\x85\x9c\xc2\x4d\x5a\xfa\x48\xbc\x89\xd7\x97\xb3\x3c\x30\xdb\xed\xaa\x74\xe8\xcc\x11\x0d\x7e\x04\x07\x10\x7f\x74\xf7\x4a\x65\x37\xae\x92\x94\x7a\x43\x9c\x65\xa2\xa9\x97\x79\xd7\x5b\x3f\x8e\x08\x09\xaf\x97\x61\x91\x93\xa3\xbd\x54\x0c\x82\x63\x3e\x0d\x00\x20\xad\xe8\xbc\x60\xfb\x66\xa5\xbc\x9c\x5e\x93\x33\xae\x86\x73\x5a\xe4\x48\x45\xfd\x2b\x97\xa9\x75\xd9\x27\xbd\xbb\xa2\xfd\xf5\xd8\x3a\xc3\x76\x49\x00\x64\x10\xbd\xbb\x35\x6a\x92\x92\x95\xd3\x67\xbf\xbe\x6a\xf7\xa0\xeb\xf2\x3e\xad\xee\x7f\x9a\xbb\xd7\xe0\xa9\xcf\x24\xdd\x92\x8a\x42\x7c\x66\x8a\x23\x1e\x20\x11\xe8\xc7\x9b\x1e\x4e\x10\x7a\xc8\xc6\x7e\x6a\x78\xaa\xbb\x46\xd5\xc5\xcb\x22\xe1\x49\x01\x29\x8d\x8b\x4f\x92\xf7\x19\xd7\x19\x12\x63\xda\x06\x80\x7c\x47\x5f\x39\x3d\x6b\x1f\xbd\xe9\x90\x62\xfd\x61\x54\x81\x73\x33\xa1\xa4\xf6\x59\xd6\xef\x66\x76\xd2\x42\x66\xdc\xce\xca\xbe\xc9\x5a\x33\xc0\x01\x90\xa1\x7f\x5e\xa6\xd5\xcb\xba\xb9\x49\xe3\xf3\xcd\xd7\xe6\xc8\x59\xe9\xdb\x76\x09\x3f\xf5\x07\xb8\x14\xc4\xcf\xfc\x2e\xc2\x0f\xc4\x0b\x70\x4d\x5f\x03\x00\x69\x47\x3f\xfe\xcf\xf3\xc6\xa1\x0b\x29\xe7\x6e\x92\x0d\xbc\x57\xb3\x8a\xbd\x3d\xdf\xc8\xab\x37\xbd\xff\x23\xdf\x11\xf9\xa6\xcf\x3a\x97\x17\xbf\x8d\x03\x64\x1a\x1d\x0b\x08\x59\x59\x94\xf0\xf7\xc0\x67\xba\x76\x2e\xf3\x02\xe1\x1c\x3b\x6c\x09\x85\x32\x47\x7a\xd2\xfa\xd4\x92\xed\x95\xf4\x77\xf6\x7a\x00\x80\x24\xa2\xf7\xf6\xd2\x2f\xd7\x0f\x6e\x4f\xfd\x2f\xaf\x8c\xd6\x5c\x2d\xae\xf7\x63\xf7\x35\xd1\x6b\x6a\x70\x0e\xd0\x97\xa1\x38\xa4\x33\x68\xd5\xa0\x05\x90\x4d\xf4\x56\xa9\x9e\xc8\xa1\xfa\x93\xfd\xa5\xe1\x39\x53\x6d\xa2\x4b\xc9\xfd\xf1\xac\xc9\xad\xfe\xc6\xfa\x5d\x2f\x06\x0b\x77\xb9\x35\x4b\xd8\xd6\xe2\x00\xd2\x86\x0e\x35\xb2\x93\xc6\x7d\xe1\xbb\xf0\x54\xa5\xe1\xf1\xaa\xa7\xed\x6e\x1e\xdc\x76\x41\xa8\xb3\xae\x45\x18\xb5\xc8\x68\xea\x78\x1f\xdc\x3c\x07\x00\xd2\x88\xf6\x0e\xa5\x6f\xae\x54\xf6\x81\xc3\x95\xaa\x36\x92\x3d\xd1\x93\x95\x3b\xb7\xf3\xec\xb7\x22\x56\x99\x4e\x51\x70\x1f\x7d\xf5\x9b\x62\x7a\x03\x20\x6d\xff\x7c\x9e\xd0\xcb\x8a\xfc\xfc\xdc\x05\xbd\xc5\x54\x8d\x79\x09\xa9\xef\x0a\x17\xa2\xa9\x94\x07\xae\xfc\x79\xe9\x8f\xd7\x51\xa2\xa6\xf4\xf1\xc6\x03\x24\x13\x9d\x77\xb6\xbf\xc4\x6e\x06\x4b\x5d\xa3\x43\x74\xf1\x24\x52\xbe\x5a\x31\x85\x8b\x1c\x82\x7a\x85\xb3\x2f\x77\x2d\x90\x50\x7e\x18\xa5\x6e\x07\x48\x1b\xda\x9a\x9d\xeb\x63\xe2\x86\xe2\xe3\x21\x37\xfc\xe4\x1a\xeb\x25\x3c\x4f\xf9\x24\xcd\x6f\x68\x6b\x9f\xeb\xc2\xf3\x98\x5d\xb4\x71\x96\x93\x04\x48\x3f\xda\x9a\x49\x31\x95\x19\x24\x36\x93\xfc\x8f\x4a\x55\x51\xe9\x83\xad\x33\x63\xa4\x1c\x5f\xca\x75\x36\x8f\x7e\x8d\xe6\x74\xf9\x70\xe9\x9e\x13\x0e\x20\xd3\xe8\xad\xfd\xa1\x3d\x52\xcb\x33\xda\x36\x67\xd0\xdf\x64\xe2\xef\x4a\xd1\x42\xd3\xce\xca\x63\xc0\x71\xe9\x91\xd7\xfa\xa1\xea\x39\xea\xd8\x72\x00\x90\x60\xf4\xde\x96\xc4\xdb\xd9\x1a\x37\x53\xd1\x89\x68\x84\xce\xe8\x3d\x3c\x97\xdb\x67\x9f\x1f\x74\x2e\xb4\x5b\x28\x59\xf2\xf5\xf0\xc5\x91\xfa\x60\x80\xf4\xa3\x1f\xcf\xa4\xe9\xd6\x58\x7a\x2e\x53\x84\xc9\xf1\xf1\x42\xf7\xa5\xac\xc7\xaa\xbc\x22\xa7\xe4\x6f\x79\x9e\x8b\x73\x52\x90\x37\x59\x0c\x7a\x81\x1a\x1a\xbc\xad\x35\x1e\x11\x04\x4a\x59\x77\xc6\xd8\x74\x7e\xcc\x47\xc5\x57\x66\x0d\x0c\xbc\xbc\x2f\xd1\xa9\x3f\xd7\x4b\x6f\x9f\x46\xf8\xa5\x07\xcc\x82\x2c\x27\xf3\xbf\x97\x3a\xa1\x28\xc3\x2c\xca\x04\xe4\x17\x94\x4b\x98\x75\x99\x80\xd4\x42\xed\x83\x55\x9b\x21\xd2\x03\x67\xc1\x2c\xcf\x04\xc4\x0b\xaa\x45\xcc\x12\x4d\x40\xc2\x89\x3f\x74\x81\x55\xa6\x09\x48\x25\x14\x65\x98\x95\x9a\x80\xb8\x40\xc3\x30\xab\x35\x01\xc9\x81\x1d\x1c\x66\xc1\x26\x20\x91\xf0\x0a\x0d\xab\x68\x43\xa4\x13\x1a\x86\x59\xb7\x09\x48\x14\xf4\x18\x66\xe9\x26\x20\x71\x10\xc1\x2c\xdf\x04\xa4\x18\xae\x05\xb3\x82\x13\x90\x6c\xb8\x2f\x58\x55\x1c\x22\x6d\x30\x2c\xb1\x0a\x39\x44\xd6\xe0\xed\x16\x56\x2d\x87\x48\x2b\xec\x15\xb0\xca\x39\x44\x42\xe0\x5a\xb0\x2a\x3a\x44\x52\xe0\x5a\xb0\x8a\x3a\x44\x46\xe0\x11\xc3\xac\xeb\x04\xc4\x1f\xb6\x17\x98\xa5\x1d\x2e\x1f\x66\x18\xac\xf2\x0e\x91\x41\xb8\xfb\x98\x15\x9e\x80\x44\xc0\x59\x30\xab\x3c\x01\xf9\x0e\x6f\x16\x30\x2b\x3d\x01\x19\x82\x86\x61\x16\x7b\x02\xd2\x0e\x67\xc1\x2c\xf8\x04\x64\x1a\x06\x0c\x66\xcd\x27\x20\x89\x70\xf7\xb1\xea\x3e\x44\x36\xe1\x56\x62\x96\x7e\x78\x5e\x88\xfd\x28\x56\xf5\x27\x20\x8d\xd0\x63\x58\x0a\x80\x38\x0b\x34\x0c\x53\x04\x10\x90\x4c\x98\xc7\x30\x85\x00\x9c\x05\x1a\x86\x25\x06\x20\xd2\x0f\x0d\xc3\xd4\x03\x70\x2b\x89\xdf\xaa\xc4\x92\x04\x04\x24\x18\xee\x3e\x96\x2c\x20\x1a\x46\x0a\x3f\x7b\x8f\xa5\x0f\x80\xdc\x1e\x4f\x0a\x57\x1c\x40\xdc\xfe\x79\x9d\x80\x2c\xa9\x57\xc1\x9d\xe6\xfa\x41\x29\x47\xca\xb4\xa0\x45\xd2\x6d\xe3\x28\xfa\xc1\xcc\xf3\x8f\x24\xef\x52\x6b\x94\xf7\x28\x4b\xff\x8d\x30\xf4\xf8\xab\x77\x29\x6f\xfa\x5c\x6f\xd4\x20\x15\x0c\x50\xe9\xd4\x11\x7e\x3b\x3d\x5d\xc7\x3f\xee\x20\x20\xe4\xed\xdc\x87\xf3\xef\x50\xb8\x8b\x03\xc8\xd8\x3f\x9f\x5f\x52\xcb\x7e\xc2\xe5\x5b\x72\x6d\xc3\x9b\xc7\x58\x7c\xfe\xfa\x7c\xcf\xd5\x2b\xfb\x25\x6d\x84\x24\x02\xbe\xdd\x48\xd4\x36\xd0\xab\xfa\x5b\xf0\xfe\xe9\xe0\x4b\x38\xbe\xba\x85\x3f\xca\xf8\x7a\x39\x29\x74\xa9\xb0\x7c\x0f\xc3\xbc\x56\x6c\x7c\xd9\x30\xa7\x47\xce\xd7\xf9\xc8\x6e\xbf\x72\x1c\x40\x16\xd1\xf6\x14\xf3\x87\x1e\x6e\x75\x57\xf9\x53\xde\x21\x1e\x66\x73\xf6\x06\x99\xab\xfa\x16\xd7\x35\x5d\x56\x35\x96\xc4\x81\xb4\xe0\xdd\xfb\xba\x84\xfe\xdb\x32\xa1\x43\xdd\xe0\xb6\x61\xad\x94\x78\x02\x89\x9f\x4b\xc5\x58\x2c\x44\xc6\xe0\x71\xc2\x5a\x2f\x51\x16\xc0\x94\x8d\xb5\x64\x88\x2c\x92\x2e\xaf\x30\xfc\x7f\x86\xce\x6c\x5b\x5e\x8c\x5c\xe5\x86\xae\xe1\x17\xb0\x69\xee\x13\x6d\x42\xb7\xeb\xd9\x1f\x52\xf2\xf5\xc1\x8f\xec\x71\x8b\xcf\x9f\xff\x01\xf2\x3b\x65\xdb\x2b\xa1\x1c\x00\x20\x1f\xd0\xdb\xc1\x7e\xde\xf9\xfa\xe7\x9f\x8b\xc1\x6f\x19\x2e\x3f\x54\x57\xb0\xa0\x6a\x51\x7f\x0a\x86\xd3\x2a\x67\x12\xde\xe4\x70\x78\xd9\x51\xb0\x03\x64\x05\xdd\x15\x5b\xf2\x49\xdc\x71\xd0\xb0\x1b\xe6\xbd\x2a\xc2\x3a\xf8\x42\xd5\xfd\xf8\xd7\xad\xe3\xda\xdb\x65\x73\x79\xf6\x97\x82\x9b\x46\x9f\xbc\xfa\x6b\x14\xfa\x0e\xa0\xbd\x71\x95\xc1\x92\x6a\x4d\xdb\xd5\xc4\xcf\xf5\x6b\xee\x8a\xa2\xba\xb2\x50\x83\xbb\xb4\xfe\xa3\x1d\x55\xfb\x2f\xdf\x47\xa6\x84\x01\x40\x70\x68\xf5\x1e\xe8\x37\xb8\x98\xa3\x37\x5e\x30\x73\xe9\x9d\xd1\x94\xef\xcd\x0f\x7d\xa9\xdc\xca\xa1\x1a\x07\x8f\x47\x37\xd0\xee\x84\xe7\x97\xbd\x04\x48\xd9\x3f\x5f\xb7\xde\x53\x7e\x8c\x84\x63\xcb\xdd\x4f\xcb\x71\x81\x69\x4f\x03\x17\x93\x8e\x8f\x99\x46\x58\x92\x98\xfa\x40\x15\x1f\x6f\xbe\xa3\xf1\xdf\xd5\xa2\xcd\x71\xd2\x8c\xbd\x29\xf5\x91\xfa\x04\x55\x96\x89\xdc\xeb\xca\x72\xcb\x0e\x8d\x5a\xd3\xf6\xdf\x2b\x12\x47\x27\xe3\x4b\x8a\x93\x25\x86\x01\x52\x86\xee\x54\xfe\x04\x32\x08\xdd\xca\x9b\x71\xc4\x31\x66\xbc\xc1\xcb\x5e\xdc\x9d\x74\xae\x79\xf9\x8d\xfb\xa9\x83\x14\x36\xa4\xaf\x0c\x17\x4c\x9f\xe1\x01\x12\x85\xb6\xfe\x2c\xdd\x2a\x9f\x08\x8d\xce\x97\x94\x9a\x9b\x4c\xe6\xfb\xbd\x0e\x32\xca\xa7\x6a\xb4\x7f\x1f\x88\xb6\xe9\x7b\x79\x3a\x48\xf3\xe2\x02\x40\xd2\xd0\x8f\x4f\x19\xbd\xdf\x74\x57\x69\x90\xbf\x8b\x51\xf3\xc8\x72\xe3\xeb\x68\x7e\x21\x6f\x39\x96\xfb\x67\x5f\x8d\x26\x59\x5c\x76\x37\x8f\x63\x00\xc8\x22\xfa\xa4\xf5\x4b\x95\x4f\x04\xdd\xa6\xe6\x27\xeb\x2b\xee\x39\xc2\x49\x5a\xf9\xfb\xd0\xdb\x7d\xd1\x83\xfc\x9f\xea\x1a\x24\xcf\xd6\x39\x2c\x97\xe2\x00\xb2\x84\x3e\x39\xdd\x38\x8d\x21\x15\xc1\x0a\x1b\x53\xff\x8d\x0b\xd5\x4f\x06\x72\x13\xd2\xe4\xb3\x49\x13\x8f\xdb\xef\x37\xba\xe2\xf5\x58\x44\x18\xc1\x01\x64\x07\x6d\x3d\xc5\xdd\x9e\xe4\xd9\x4d\x33\xca\xcf\x8a\xa2\xb7\x92\x7f\xad\xe4\x32\xf5\x5e\xdc\xbc\xc8\xbe\x5e\xf4\x5e\xd7\xb5\x95\x65\x2c\xaa\x11\x35\x54\x73\xa3\x94\x57\xe5\x40\xdf\x3e\x91\x84\xc6\x07\x3e\x7c\xe2\xf3\x31\x34\xa4\xd5\x3f\xfd\x1e\xfc\x38\x4a\xbf\x8d\xbc\xfe\x5e\x74\x1a\x00\x24\x08\xdd\x34\x1d\x7c\x7c\xb5\x37\x50\xaa\xf8\x83\xd3\x8f\x62\x65\x4a\x8d\xe6\x13\xaf\xbb\x44\xbd\x7f\xec\xc9\xb7\xf6\x5d\x74\xf1\x1e\xff\x1c\x16\x05\x90\x30\xf4\xb6\xee\x61\x3c\xa5\xd3\x22\xda\x76\xcb\x2d\x9b\xe9\x57\x3d\xe3\x4c\xf5\x6f\x3a\xe5\xe1\xd2\x6b\xc5\x57\x69\x75\x6e\x3e\x90\xd2\x4b\xd6\x40\x0d\xad\xe0\x4e\xbc\x26\x6c\x8c\x2c\xb5\x4f\xbb\x1e\x79\x6c\xbc\x9e\x1a\x63\x3f\xf0\x79\x3a\xac\xcd\x70\x56\xa1\x87\x5c\xe9\xde\xd9\x0d\x1c\x40\x66\xd1\xdd\xe4\xcd\xc8\x49\x59\xbe\xed\xb3\xdc\x5f\x75\x5e\x45\x6e\x27\x76\xb5\xee\x4e\x36\xca\xf2\x1c\x6f\xcc\xad\x53\x29\x1a\x13\x6a\x7e\x74\x07\x00\x59\x2e\xd4\xf0\xda\x7d\x29\x13\x49\xda\x8a\x77\x27\x94\x86\x03\x6e\xbd\x90\x3b\x42\x73\x88\xbf\x3f\x85\xae\x68\x8f\x55\x54\xaa\xae\xad\x1e\x45\x23\x40\x5c\xd1\x86\x37\xbf\xa2\x2c\x53\x28\xbf\x3d\x34\xae\x8c\xdf\x33\xda\x0b\x98\x2c\xf4\x7e\x76\x4f\x76\xdd\x5d\x19\xed\x64\xd8\x67\x44\xe2\xb3\x8e\x07\x88\x3b\xfa\x86\x8f\xf5\xe8\x04\xc3\xe7\x96\x6c\xdc\x4a\xc6\x4e\x57\x8c\x2e\x47\xf3\x4e\x7d\x44\xfa\xb5\x26\xdd\x1e\x0a\xfe\x37\xe9\xb6\x27\x52\x96\x01\xf2\x06\xfd\xf8\x6e\xb7\xf7\x43\xf1\x6a\x8d\x8b\x4c\xf6\xbd\x13\x63\xef\x1d\x6d\x65\xcb\x2c\x92\x32\x9f\xf3\xb9\xaa\xbe\xa9\x4e\xf8\xf3\xfd\xa4\x3a\x40\x12\xd0\x67\xdb\x4c\xd2\x3d\xb2\xb9\xdb\xe4\xd8\x1c\x99\x52\xc0\xf0\x15\xdd\x71\xbe\xe4\x05\x4e\x63\x7a\x27\xca\xed\x2b\x42\x57\x52\xaa\x37\xbb\xf0\x40\xf6\x18\x3a\xf3\xdf\xda\xeb\x73\xc6\x92\x33\xe7\x20\x67\xc3\xee\x88\x32\xbe\x38\xd6\x63\x08\xaf\xee\x7e\xb5\xa8\x4b\xa4\xcd\x67\x1d\x8c\x4f\x6a\x02\x59\x2d\xf4\x8b\x2c\xd1\x85\x35\x37\x4f\x27\x55\xcc\xde\x64\x5e\x13\xe4\xf1\x73\xf4\xcc\xa1\xf5\x37\x72\xa8\xfe\x64\xf9\x56\xca\xb4\xfa\xb2\x43\x0e\x40\xfc\xd0\xa6\xbb\x19\x05\xc7\xc6\x2a\xec\x53\xa8\x7a\x77\x58\x3b\xb8\x24\xd9\xd1\x4e\x94\x5f\x4f\x4a\xb5\xd1\xa3\xfd\x69\xc7\x63\x67\x52\xe1\x3e\x00\x90\x28\x74\xf0\x3a\x7a\xea\x87\x93\xd8\x54\x36\x93\xe6\xba\x4c\x0b\x5a\x55\x4a\x7b\xdd\xd6\x16\x32\xa0\xa6\xc9\x7e\xbb\xe9\x57\xc8\x93\x63\x5f\x06\x90\xdf\xe8\xe1\x86\xd6\x3f\x28\xc6\xc9\x35\x29\xde\xf5\xb3\x14\x6f\x8d\xb2\xd0\x9b\xf8\xd8\x79\x3d\x15\x59\xb3\x8d\x90\x15\x1d\xd0\x7f\x99\xef\x82\x03\x48\x09\xfa\x2c\x8d\x94\x84\x58\x78\x3e\x9b\x61\x5d\x3f\xa2\x5c\x71\xa7\x62\x95\xec\xbc\x5d\xda\xc9\x35\xa9\xb8\x93\x9f\xa7\x66\xd6\x3f\x0c\xbe\x7a\x02\x00\xe2\x89\x3e\x1b\x57\xcc\x29\x4f\x3d\x3e\x78\x28\x2d\x95\x46\xba\xf8\xd9\x89\x09\x1e\x91\x66\xb2\xe8\x9a\xce\xc1\xde\x59\xef\x91\xd8\x17\xf4\x49\xf9\x00\xc9\x43\x5f\xe8\xe4\x97\x72\x33\x1e\xf0\xe2\x9d\x52\xd2\xbf\xd2\x32\xb7\x77\xff\x89\x8f\x33\x5a\xd9\x35\xab\x46\x63\x4f\xa8\x5c\x72\x84\x55\x8c\xd4\xf1\x00\x79\x8b\x36\x47\xfb\x31\xfb\x8f\x5a\xa1\x98\x8f\xb1\x54\x5d\x07\x95\x35\x6c\x57\xb9\xea\x0a\x7b\x77\xf2\xcb\xf2\x9a\x59\xc4\xb9\xda\xa6\x43\xb9\x01\x92\x83\xb6\xa6\xdd\x73\xbe\x46\xe9\xe1\x76\xbc\xce\x45\x24\x23\xa0\x7a\xf1\xf1\x76\x6c\x46\xc8\xb5\x0f\xc5\x79\x0d\x49\xc3\x6c\x6e\xd1\x8c\x4b\x00\x59\x43\x9f\x3e\xfd\xb3\x75\xa4\x93\xa3\x38\xb1\xce\x5e\x67\x0b\xe3\x95\x8b\x8b\x54\x27\xb3\x66\x06\xa2\x84\xb2\x39\x18\x05\x5e\xaa\x5c\x95\x6b\xc7\x03\x24\x0e\x3d\x7e\x2a\x75\xdf\xee\x43\x24\x5f\x36\x5f\x84\x85\xfc\x4a\xdd\x7b\x41\xe4\x06\x87\x4f\xd9\xd9\x50\x8d\x28\x43\x37\x3e\x55\xf7\x08\x31\x55\x80\xa4\xa1\x83\xd8\x57\xc0\x54\x2a\x57\x91\xf7\xed\x8f\x6b\xc9\xf8\x93\x4e\x4a\x87\xd5\xc2\xd5\x66\xfb\x7d\x6a\xe5\x46\x58\x99\xf7\xdf\xee\xcc\xdf\x0f\x90\x45\xb4\xf1\x42\xfb\xf0\xc9\x7b\x03\xd3\x58\x66\x35\x63\xc3\x87\x55\xc6\x8d\xa2\xe5\xd5\x9e\x92\xb2\xaf\x34\xc7\x37\x07\xec\x39\xd4\x79\x47\x01\x07\x64\x0f\xa1\x6f\x8b\xa6\x5a\x0c\xeb\xcd\x0d\x0f\x89\xa6\x5c\x0e\x53\x34\x33\x60\x08\xb9\x3c\xe4\xe8\x1e\x75\xdd\x34\xe8\x68\xef\xe9\xdd\x4d\x2e\xcd\x78\x80\x94\xa0\x0f\xf8\x93\x7b\xc3\xef\x3d\x3e\x4c\x44\x7c\x56\x12\x88\xb7\x10\x7a\xdf\xa4\xfe\x81\x43\xd3\xde\x4b\xb0\xe9\x09\xe9\x8a\x54\xe9\xe9\x2c\x5b\x80\xac\xa0\x3d\x7f\xd2\x64\x2f\xef\xdd\xdc\x75\xee\x79\xd1\xf2\x2d\xe6\x9f\x11\xea\xb6\x5e\x89\x47\xf1\x5c\xa1\x5d\x0e\xad\x96\xca\x69\x67\x97\xac\x00\xb2\x8d\x3e\x52\x1f\x8f\x3d\x57\x3c\x8e\x74\x87\x57\x91\xcc\x6a\xdd\xff\x2a\xee\x2d\xf1\xfa\xc5\xc1\x4a\x69\xd5\xe9\xc0\xe6\x26\x45\x41\x79\x09\x3c\x00\x48\x05\x3a\x10\x1e\xc6\x6d\x64\x67\x9c\x29\x8b\x79\xf6\xd5\xea\xbb\xc3\xed\x69\xda\xa8\xc7\x3e\xa7\xf6\x79\xe6\x90\x6f\x34\x56\xd9\x76\xdc\xbf\x99\x0c\x90\xaf\xe8\x53\x72\x29\xac\x40\x20\xf6\x10\x93\xa8\xc6\xbb\x5d\x92\x8a\x8f\x67\xed\x49\xe3\x18\x4c\x7e\xa9\x67\xc6\x1a\x08\x8e\x39\x1f\x39\xb1\x11\x00\x00\x52\x88\x7e\x3c\x98\xff\x32\xe7\x70\xe7\x21\x5e\x47\x35\x83\xdb\x7e\xe0\x79\x3a\xdd\xc4\xbe\x86\x2d\x87\x84\xf6\x72\x1a\xbf\x33\x31\xe4\x0a\x06\x00\xa9\x45\x97\x3f\x7e\x9c\x53\xd1\x95\x42\xbb\x55\x13\x01\x37\xfb\x02\xfe\x64\x37\xd7\x38\x05\xdb\x79\x1c\xed\x73\xae\xdc\x27\x62\x96\xd5\x47\x54\x01\x40\xf0\xe8\x6a\x9f\x7c\xfb\xe5\xb3\x95\xe9\x1c\x2a\x92\x49\x84\xae\x7c\xd4\x7b\xed\x94\x9b\xef\x88\xe0\x54\xdb\x5e\xfc\xb5\x79\x9f\xa2\x85\x89\x0d\x80\x34\xff\x93\xfd\x4a\x2e\x91\x39\x0a\x49\x5d\x04\xa6\x62\xbc\x29\xe4\xe2\xb6\x77\x3d\x9e\x72\x3a\xd3\x0c\xab\x38\xf5\x7c\xac\x2c\x4d\x7e\x2d\x0c\x80\x2c\x3a\xcc\xea\x6c\x22\xac\x12\x4d\x49\xdf\x3c\x52\xb7\x8b\xe0\xe7\x93\xab\x48\xa8\x89\x4f\x6c\x7f\x29\xc0\x73\x35\x50\xd8\xf6\xa4\x91\x75\x2d\x40\x86\xd0\xd5\x52\xef\x38\xd7\x0e\xcb\xe9\x8b\x8f\x48\x7d\x69\x02\xf5\xce\x3c\x19\x53\x11\xef\xa9\xe3\x5d\x7b\x5f\xf2\xac\x43\x51\xc8\x23\xc5\x94\x14\x07\x90\x4a\x74\x4a\x50\x62\xfb\xa0\x91\x76\x56\x3c\xe6\x79\xd5\xc3\xd5\x76\x9c\x35\x8b\xbd\x7e\x59\x3a\x9f\x8c\x9e\x11\xe5\xb1\xb8\x94\x6c\x92\xca\x25\x1c\x40\x0a\xd1\xcf\xe7\x7a\xf4\x80\x9a\xf4\x7c\xf9\x3c\x53\x6c\x23\x2e\x80\xe1\x23\x5e\x40\x10\xcf\x69\xed\x24\xff\xf2\xc7\xde\xc0\xec\x35\x85\xdf\x7f\x6b\x5a\x0b\xda\x99\x3d\xae\x29\x12\x8a\xa2\xe2\x9a\x9b\x0f\xf2\x0f\x3d\x15\x15\xdf\x33\xb0\xcf\x7c\xd6\x5b\xc2\x66\x95\xac\x4b\xb4\x41\x94\x32\x6a\x37\x40\x56\xd0\xe6\x34\x5d\x98\xd9\x53\x52\x55\x70\x74\xae\x8d\xd1\x44\x95\xf1\x9b\xeb\x5e\x7e\x56\x97\xed\xf0\x03\x75\x56\xa2\x6c\x3c\x07\x55\x25\xcf\xff\x55\x80\xe8\x38\x76\xa4\x39\xb0\xac\xed\xe3\x20\x16\xa9\x37\x22\x49\x9f\x49\x2e\x92\x00\xb4\x99\xf1\xe7\x4f\x0c\x89\xc6\x1c\xb9\xb4\x72\x2f\x9e\x70\x1b\x88\xa9\xdf\xe4\x9c\xff\xf7\xba\x0f\x94\x97\x58\x1a\x0e\x22\x2b\xf0\x42\x04\x53\xc6\x11\x90\x45\x78\x1f\x84\xa9\xe4\x08\x08\x0e\xb6\x5e\x98\x6a\x8e\x80\x94\x11\xbf\x86\x8c\x25\xe8\xe0\xf2\xa1\x61\x58\xa2\x8e\x38\x0b\xec\x3c\x31\x75\x1d\x01\x89\x82\x6b\xc1\xd4\x76\x04\x24\x0d\xce\x82\xa5\xef\x88\x4e\x86\xcd\x05\x96\xc4\x83\xc8\x12\x6c\x61\xb0\x54\x1e\x44\x76\x76\xc1\xef\xb1\x63\xca\x3d\x79\x4e\x12\x67\xf0\xb7\xc8\x26\xa3\xb3\x53\x75\xe5\xfd\x4b\xec\xc1\x43\xc1\x4a\xd3\x86\xf9\x64\xe7\xaf\x57\x39\xdc\x50\x2f\x1f\x7a\xe3\x90\x74\x68\x9a\xb3\xe4\x83\xe5\xf3\xb3\x7f\xed\x42\x87\xbc\x59\x8c\x6d\x8d\x31\x63\xe9\x39\xae\x26\xd6\xbe\xc7\xb1\x3a\x3f\x69\x73\xbe\x77\x9c\x26\xb9\x27\xd0\xfa\xcb\xce\x53\x5d\x70\x51\x05\x07\x64\xf9\x50\xc3\xf1\x17\x0d\x73\x9e\xba\xee\x76\x8f\xd4\x3d\x76\x3a\xc0\xe5\xb4\xe9\xb4\x96\xb7\x67\x12\xbf\x5b\xab\x53\x29\x4d\xd3\x11\x71\x1a\x67\x1c\x40\x3c\xd1\x27\x70\x24\x64\xe3\x8f\xa3\xf7\xcf\x7d\x54\xaf\x95\x2e\xb2\xa9\x0b\xb6\xe3\xe7\x92\xc9\xd4\x7f\x44\xe2\x73\x59\x70\x6c\x2f\x66\x5e\x97\x08\xfd\x37\xab\xa1\x83\x92\xe1\xc5\x0c\x96\xe1\xc4\x6d\x80\x6f\xe2\x60\x19\x4f\x40\x64\xf9\x08\x93\x60\x99\x0f\x27\xf1\x84\x7b\x8d\x29\xbb\x09\x48\x10\xbc\x98\xc0\x92\xde\x10\x09\xa3\x82\x5f\xe4\xc3\xd2\xe0\x00\xd9\x25\xfb\x37\x38\x7c\xd1\xc5\xc2\x87\xfa\x86\x53\x38\x6f\x54\x99\xd6\x99\x82\x7a\x96\xac\xb2\x39\x4d\xe1\xc7\x26\xef\x8b\x03\xfc\x4a\xde\x34\xe7\x8b\x9c\x9d\xbf\x84\x03\xc8\x3b\x74\xe5\x25\x13\x3c\x9a\x37\x98\xa3\xa1\x60\xf4\x36\x77\xb4\x75\xaf\xc2\x28\xc7\xb5\xdd\x8f\xaf\x9c\x2d\x38\x11\x58\xfb\xe9\xcb\xaf\x6a\xef\x48\x1c\x40\xbe\xa0\xab\xcb\x85\xfd\xf4\x2d\x4b\xda\x1f\x5c\xa6\x3d\x9d\x68\x2f\x2e\xde\x22\x7b\xcc\xe5\xba\xcc\x0a\x0c\xaf\xcb\x17\x7e\x14\x92\x7f\xf7\x26\x0c\x07\x90\x1e\xf4\x78\x1b\x9e\x20\x3c\x67\x8a\x2a\x93\x81\xc6\xed\x8d\x50\xe1\xab\x76\xc1\x37\x5c\x56\xec\x28\x9d\xdb\x56\xf7\x9f\x88\x8f\x54\xfe\xaa\x2a\xf4\xdf\xcc\x86\xfe\xf1\x85\x39\x0a\xcb\x72\x88\xbc\x83\x29\x1a\xcb\x78\x88\x7c\x81\x1b\x87\x65\x3f\x44\x7a\x20\x82\xd9\x0b\x11\x90\x59\x18\xb6\x98\xfd\x10\x21\x6c\xb9\x08\x93\x60\xb5\x44\x70\x12\x57\xe8\x30\xcc\xae\x88\x80\xb8\xc3\xbf\xa4\x60\x76\x46\x04\xe4\x0d\x9c\x05\xab\x3b\x82\x48\x02\xfc\x70\x05\x66\x87\x44\x58\xfd\x31\xf8\x93\x00\x58\x5d\x12\x81\xd0\x22\x98\x85\xd9\x28\x11\xcc\xf2\x83\x2b\xc1\xec\x95\x60\x79\x22\x7e\x5a\x11\xa3\x5f\x82\xc8\x6f\x88\x60\xb6\x4c\x04\xa4\x04\x96\x27\xcc\xae\x09\xa6\x2c\x58\x37\xb1\x3a\x27\x88\xe4\xc1\xec\x8b\xd9\x3c\x11\x90\xb7\xd0\x30\xcc\x06\x8a\x80\xe4\x40\xc3\xb0\x9a\x28\x88\xac\xc1\xf3\x85\xd9\x47\x11\x90\x38\x88\x60\xf6\x52\x50\x36\xc0\xd0\xc7\xea\xa7\x88\xb2\x61\x17\x21\x2a\xb1\x7a\x2a\x18\x95\x87\xe0\x5f\xc4\xb0\xba\x2a\xb8\xf9\xf0\xee\x1d\xb3\xb3\x82\x32\x93\xf8\x01\x5d\xac\xee\x8a\x80\x6c\xc3\x4c\x89\xd9\x60\x11\x90\x0a\x18\x2f\x98\x4d\x16\x01\xf9\x4a\xfc\x26\x35\x56\x9f\x45\x40\x0a\xe1\x2c\x98\xbd\x16\x01\xa9\x85\xca\x14\xb3\xdd\x22\x20\x78\x28\xcc\x31\x5b\x2e\x02\xd2\x0c\xdf\x82\xc5\x6c\xbb\x08\x9b\x4f\xfc\xb1\x57\x8c\xce\x0b\x4e\x32\x04\xb5\x2c\x56\xf3\x05\x91\x4a\x98\x5f\x30\xfb\x2f\xe8\x63\x38\x0b\x66\x0b\x46\x40\x5a\xa0\x8f\xb1\xda\x30\x62\x54\x42\xc3\xb0\x3a\x31\x62\xb2\xd8\xbb\x3c\x48\xf3\xff\x99\xa3\x3f\x13\x76\xb6\xb2\x9b\x25\xdf\x91\xea\x30\x4b\x4c\x29\x5c\xfd\xf6\x44\xd9\xce\x71\x52\xf3\x8a\xd3\x6f\xe9\x2b\xf1\x85\x9d\xb5\x40\x7e\x7c\x7e\xab\x2c\x04\x07\x10\x2f\xb4\xc8\x61\xe3\xd1\xdd\x54\x4e\x1a\x0e\x1a\x39\x5c\xb5\x47\x3b\x63\xd9\xd3\x73\x2e\x39\x72\x27\x56\xf5\xe2\xf7\xc8\xbb\x11\xe1\x03\x51\xf6\x00\x20\x75\x68\x85\xbd\x71\x8a\x85\x8d\x2d\x42\xde\x24\x91\x62\xc9\x23\xdb\x67\x8f\x88\xbe\xa4\x96\xdc\x5d\x25\xb3\x92\x15\xfc\x8f\x6c\x51\xb1\xb6\x0e\x80\x2c\xa0\x05\x36\x95\xb0\xdb\x0f\xad\x07\xf7\xcd\x53\x29\xc7\xba\x95\x8c\x0e\x23\x99\xcf\xbe\x3d\xbe\x77\xc8\x09\x04\xf3\xef\xd5\x66\xbc\xab\x25\x03\x00\x12\xfb\xcf\xbf\x93\xed\xee\xd2\x31\x7a\x91\xce\xad\x15\xb1\x72\xf3\xc4\x55\x89\xe0\xe9\xef\x38\x95\x7c\x63\x79\xc1\xa5\xcd\xa0\xd3\xa4\xef\xfb\x0d\x00\xd2\x8f\xb6\x7e\xcd\xf5\xba\x5d\xa3\xd6\x0d\xc1\xdd\x12\x8e\x2d\xa1\x54\xea\x7d\x4c\x8c\x63\x97\x97\x0e\x95\xd6\x6b\x1a\x59\xec\xe8\x7a\xdd\x98\xc6\x01\xe4\xe7\x3f\xff\x5f\x45\x3e\xf4\xfa\x90\xff\xc7\x45\x1b\xfa\x34\x8e\xe8\x1b\x2e\xae\x7c\x05\xdf\x68\x0c\xb4\x3f\xdd\x5c\xf8\xb2\xdf\x7c\x97\x33\x87\x3e\x6a\xa8\x7b\x7e\x12\x73\x4f\x5e\x41\x59\x47\x1c\x5f\x33\xbb\x6f\xc6\x5b\x67\x75\xa5\xc1\xb5\x1e\xe6\xdf\x87\x06\xc5\x44\x4f\x4a\xcc\xa2\xff\xdf\xf6\xc5\x60\x2e\x9e\xf9\xaa\x9a\xbf\x2a\x6d\x73\xc0\x6c\xa0\x94\xc2\x82\xb9\xfa\xc0\x4a\xcd\x8b\x28\xf9\xe8\x8f\x7b\xdf\xd2\x68\x31\xe2\x01\x52\x85\xbe\x8f\xe2\xcd\x65\x3f\xd3\x71\xea\x98\x45\x77\xad\x4d\xd4\xae\x8b\xe9\xfd\x0c\x7a\xef\xf7\xa5\x71\x59\x5b\xbb\xf9\xa9\xb0\x89\xa8\xa6\x77\x02\xa4\x15\x7d\x4d\x70\x86\xa6\xf2\x14\x09\xbb\x2b\x9b\xe7\x5a\x6f\xb7\x60\xb9\xe4\x23\x06\xf7\x37\x41\x8f\x86\xbe\x5a\x8e\xf7\x15\x9c\x68\x9b\xf6\x7f\x0b\x90\xaf\xe8\x2b\x94\x3f\xd1\x03\x52\xd7\x2e\x6d\xc7\x3c\x38\xd4\xd3\xb3\x61\xda\x3e\xbb\x74\x75\xa5\xb2\x60\x17\x73\x58\xc3\xb7\x2f\x34\x2a\xa5\xa2\x16\x00\x20\x21\xe8\xc7\x3b\x64\x64\x7a\x1f\x70\x60\x13\x08\xbb\xc2\xf1\x68\xfd\xb7\x9c\x79\xb5\xa8\x74\x25\x4b\x8f\x4c\x7f\xce\x55\x9f\xdd\x49\x5f\x74\xf3\x00\x32\x8b\x76\xa1\xe5\x7a\x69\xc0\x49\x2b\xc3\x3d\xec\xcf\x59\x53\x0c\xd8\xdc\x93\x1f\x0a\x5c\x5c\x78\xf6\x76\x5f\xd1\xc4\x85\xcb\xdc\xc7\x5e\xdb\x7a\xfc\xd5\x55\xe8\xf1\x0d\x0e\x1f\x29\x2c\x7f\x64\xf4\x92\xce\x16\x74\xe2\x07\x94\xf5\x07\x34\xc2\x18\xce\x8f\x9e\xac\xab\xe7\x79\x25\xa9\xbf\x7b\x36\x15\x0f\x90\xd4\x7f\xfe\x86\x60\x27\xdb\xd7\xa1\xf4\x81\x82\xee\x65\x22\x97\xda\x27\x87\x33\x0e\x55\x06\x5f\x70\xc7\x8d\x39\x9e\x77\x51\x68\x4d\x38\xd4\x7a\x01\xa4\x00\x1d\x8f\xf8\x6f\x17\xf6\x26\x69\x50\xf9\xff\x4c\x95\x0c\x71\x6b\x1e\x1e\x34\x2b\x39\x37\x89\x5b\xfb\xd0\x67\x98\xb3\x9e\xe9\x67\xbc\xff\x01\x40\x36\xd1\x01\x23\x5c\xfc\x64\xe2\x61\x52\x62\x94\x9f\x6e\x7e\x89\x9c\x7e\x71\x12\x19\xb5\x1c\x47\xf8\xa5\xb7\x64\xae\x8d\x5c\x37\xb7\x32\x35\x6e\xe3\x01\x12\x8d\xde\x2a\x53\x3b\xb9\x80\x0b\x4d\xe4\x0c\xf9\xdc\xed\x7a\xa5\x9a\xe9\xf9\x64\x3c\xe4\xc5\x11\xd7\xdc\x3a\x9d\x48\xf9\xdc\x8b\x42\x52\x7d\x00\x52\x84\x36\x7e\xc9\x94\x74\x65\x55\xe8\xa2\xd6\x87\x1d\x9a\xf2\x93\xa6\x4d\x45\x31\x97\x75\xfa\xa3\xe3\xcb\xee\x29\x3f\x3b\xfa\xe7\xa3\xae\x42\x0f\x40\x7e\xa1\x2f\x74\x9e\xde\x8d\x17\x08\x2d\x97\xb2\xec\x1b\xd6\x3c\x5f\x56\x7d\xf5\xe1\x47\xc3\xcf\x49\xf9\x91\xaf\x05\xb8\x5b\x1f\xe4\xda\x2e\xdd\x3b\x0c\x80\xac\x0c\xfa\x1d\xc2\xae\xea\xd0\xb3\x1e\xb8\x12\xd7\x0b\x6a\xfb\xa9\xa2\x1e\x7c\x64\x6b\xde\x58\x1f\xf0\xde\x93\xa6\xbe\x97\x5a\x83\x34\x4a\xb8\x19\x20\x6b\x68\x63\x66\xd4\x44\x1f\x0d\x1a\x9f\xf0\x75\x00\x6d\xcd\x80\xc2\xb3\xe0\xc6\x95\x0d\xd9\x1b\x35\x25\xbc\xcb\x39\x4e\xf1\x42\x31\x4e\xbc\x38\x80\x4c\xa0\x03\x41\x63\xe9\x68\xcb\x9d\x2e\x1f\x7d\xb7\x1d\x33\x3e\xc6\xee\x01\xa6\x2a\x97\x43\x99\x09\xa5\xfc\x1d\x81\x75\x8c\xba\x47\x8d\xf7\xe5\x01\x80\xf4\xfc\xf3\x6d\x29\xb7\xa7\x62\x2f\xfd\x56\x57\xbf\x3d\xed\xe8\xcc\x74\x88\x7f\xb9\x15\x77\x6c\xe1\x42\x2c\x07\xef\xc9\x8c\x94\xf3\xca\x76\x61\xeb\x00\x99\x44\xbb\xfe\xc4\xa0\x8d\xbe\x07\x9f\xe6\x0b\x86\xdf\x24\xfe\x25\x8f\x4a\x15\xf1\x39\x3f\x4f\xb4\x7f\xef\xe2\x0e\x41\xb2\x7f\x50\x8f\x3f\x96\xc4\x01\x59\x15\xd4\x70\x97\x02\x13\x7c\xa7\x8b\xb9\xcf\xd7\xa5\xc9\x83\x7a\x54\x66\x6f\x15\x3f\x22\x45\xd1\x4a\x9c\x1d\xe5\x5b\x36\x96\xf1\x0f\xf2\x59\x71\x00\x09\x45\xaf\xd6\x76\x7b\x55\xd8\x69\xd3\x37\x62\x51\xa6\x38\x92\xab\xf4\x58\xf9\xcf\x47\xce\x1f\x39\xb7\x7b\xfc\x49\xea\x65\x52\x28\xc8\x8f\xcd\x01\x20\x4b\x87\x1a\x7e\x7b\xc6\xf7\xf7\xcd\x44\xb5\x33\x1c\xe9\xc6\x2d\x86\x81\xe7\xd6\x45\x9f\x71\xf9\xe4\xb0\x94\x7d\x71\xb9\x26\xae\x11\xc2\x70\xa5\x10\x20\xaf\xd0\x79\x69\xde\xac\xbd\xe2\xf3\xc2\x5d\x8b\xaf\xaa\x7e\x5f\xea\x2f\xb0\xde\x65\x55\xbe\xd9\x1f\x91\x60\x23\x7b\xe5\xd0\x14\x37\x27\x0f\xd3\x30\x0e\x20\x3e\x68\xdf\x9c\xf2\xa7\xac\x1d\x8e\x63\xd9\x88\x24\x17\xcc\x9b\x2a\x97\xef\x57\x1d\x56\x49\x93\x99\x4a\x2c\x8e\xf2\xef\x5c\x73\x8a\x33\x8f\xc7\x01\x64\x15\x3d\x9e\x94\xdb\x42\xe9\x9b\xe4\x6a\x43\x69\xe8\x54\x02\xc5\xc5\x76\xa6\x0d\xbd\x27\x0e\xdf\xcf\xec\x79\x98\xf0\xd5\xc7\xdf\xa4\x2c\x04\x00\x80\x24\xa0\xf7\x2a\x2e\x7c\xdf\xdd\xd6\x81\x03\xbb\x0f\x47\x39\xb4\x38\xe6\xf2\xbe\x7a\x2e\xae\x96\x8b\xf7\x4a\xaf\x27\x93\x09\xdf\x88\x91\xe5\x8b\x01\x48\x36\xba\xf5\xd5\x17\xcd\x7c\xba\xe2\x20\x71\xf3\xd0\x33\x93\xa6\x0b\x0d\xfc\x33\xf5\xe1\xd7\x2e\x54\x2d\x8e\xf0\x4c\x30\xae\x0e\x5d\xd3\xee\x8a\x00\x00\x79\x8d\xbe\x60\x5f\xd2\x8c\x9c\x96\xee\xb8\x7c\xf9\xc8\xd1\xe5\xb4\x85\x8f\x1b\x43\x61\xaa\xf7\x97\x6b\x34\xfa\x7e\x0a\xdf\x3b\xe0\xe2\x21\x8e\xb7\x01\xc8\x3a\xda\x3b\xd3\xae\xc8\x65\x7b\x01\x6a\xb7\xd2\x34\x9c\x93\xe6\x3b\x9f\x4f\x7a\x3f\x96\xd6\x34\xf3\x2c\x85\xef\x78\x35\x14\x6a\xdf\xd6\x2e\xfe\x5b\x75\xd1\x71\xcf\xab\xd4\x44\x6a\x5b\x28\xaf\xb8\x97\xbe\x24\x56\x9b\x72\xd4\x53\xb5\xe8\x6c\xa7\x5a\x35\x05\x9e\xbd\x6c\x2b\xb3\xbe\x80\x4a\x14\x0f\x90\x60\xf4\x21\x17\xdf\xdc\xb8\xbe\x7f\x87\x72\x6d\x7a\xa9\xe2\xa7\x5a\x5f\x7b\xa7\x43\xa8\xf4\x56\x78\xad\xeb\xed\x78\xce\x91\x13\xba\xb7\x92\x76\x01\xa4\x12\x1d\x69\xaf\x17\x4e\x6e\x21\x6c\x62\x22\x0e\xd2\x97\x28\x7d\x82\x2f\x54\xeb\x9e\x1e\x52\x96\xe4\xd1\x6f\x75\x39\xff\x45\x3c\xf8\xdd\x39\x73\x80\x74\xfc\xf3\x1d\x55\xca\xc2\x98\x4c\xfe\x33\x40\x71\x9c\x7d\x42\x92\xcc\x99\x26\xe8\x6d\x3d\x27\x53\xa9\xde\x00\x63\x67\xb0\x46\x10\x9d\x72\xa0\xf0\x7f\xac\x94\xf2\xa4\x24\xff\x7b\x75\x90\x7c\x59\xf8\x3f\x56\x4b\xc8\xd4\x51\x12\x18\xcc\x92\x09\x99\x85\xbd\x04\x06\xb3\x6c\x42\x26\x76\x0f\x81\xc1\xaa\x9d\x44\xa6\x1f\xae\x07\xab\x7e\x12\x99\x9f\xfb\xe0\x5b\x24\x58\x95\x14\xc8\xcb\x9c\x25\x91\xf9\xbf\xff\x76\x44\x1f\x09\x99\xfb\xdd\x5c\x65\x3c\xa7\x59\x63\xdb\x66\xab\x6f\x15\xd2\x1f\xd4\xcc\xfd\xd4\xe6\xb3\xf7\xdd\xe3\x5e\x66\xab\xcf\x53\x2c\x93\x05\x00\x20\x6e\xe8\xf1\x67\x27\x7f\x25\x87\x51\x07\x65\x6c\x4e\x45\xbc\xdb\xf6\xac\xde\xcb\x74\x27\xea\x16\x8b\x76\xfe\x84\x44\x8b\x77\xc4\x99\xaf\x66\xfe\x00\x79\x87\x1e\x2e\x31\xa4\x23\xa3\xca\xaf\x6d\x6b\x86\x6b\xa0\x4f\xdb\xeb\xc0\x53\xdf\x55\x1f\xa9\xf9\xa8\x9b\xf2\xa3\xba\x84\xe4\x2d\x73\x12\x6f\x1c\x40\xe2\xd1\xf9\x25\xff\xc2\x61\xab\x38\x7e\xee\xd2\xd3\xc1\x8b\x85\x76\x34\xf7\x22\x49\x53\xc7\x17\x34\x83\x99\x4d\xd9\x97\x07\x99\xcc\xee\xf9\xcc\xe2\x00\xd2\x89\x7e\x7e\x09\xbb\x2d\x5d\x3a\x83\x72\xc7\x44\xd6\x7e\x6a\x4a\x01\x32\xeb\x6c\x6e\xd1\x9b\x4d\xc7\xfb\x7f\x3c\xfb\x69\xb8\x2d\xed\x59\xcf\x2c\xfc\x1f\x57\x09\x3d\x3a\x4a\x46\xd8\x05\xcc\x95\x42\xc6\x0d\x32\x58\xcb\x25\x32\xef\x20\x83\xb5\x64\x22\x13\x4f\x4a\x60\xb0\x96\x4d\x64\x3a\x89\xff\x0f\x8b\x25\xa0\x80\x3c\x23\x1d\xc9\xff\xfd\xc2\x46\x02\xda\xc5\x0e\xc7\xc1\x70\xd0\x06\x73\x73\x71\x8a\xca\xec\x7d\x71\xbe\x66\x0b\xba\x6f\x5a\x61\x9b\x77\x22\x9d\xaa\x1d\x5f\xfb\x5c\x8a\x39\x88\x03\xc8\x34\x3a\xed\x18\x48\xfb\x47\x64\xa8\x93\xbe\xe2\xe5\x3e\x94\xb2\x62\x83\xaf\xa6\xa2\xdc\xc8\xb9\xed\x1e\x6f\x56\xa0\x2c\xba\xb7\x70\xe7\xc9\x0d\x1c\x40\x96\xd0\x69\xa7\x85\xc4\x6b\x3a\x98\xaa\x9e\x44\x41\x9e\x3e\xe4\x90\xe3\xf8\xe8\x09\xfc\x2e\xea\x12\x3b\x12\xce\x07\xeb\x23\x3d\x0f\x23\xa5\x57\x70\x00\x01\xe8\xac\x99\xad\x27\x24\xd3\xb9\x3c\xa5\xcb\x3f\x65\xe4\x42\x2e\x19\x9a\x72\xfe\xd7\x33\x15\x97\xb4\x27\xf1\x5d\x15\x92\x57\x85\x8e\x1e\xa7\x17\xfe\x6f\x66\x13\x5d\x94\x00\xb7\x02\xcb\x74\x22\x33\x4d\x41\x60\xb0\xcc\x27\x32\x4b\x30\xf9\x60\x2d\x81\xc8\x00\x6a\x02\x83\x29\x67\x21\x53\xb5\x8b\xc0\x60\x6a\x5a\xc8\xb4\xee\x26\x30\x98\xc2\x16\x32\x5f\xa1\xdf\x30\xc5\x2d\x64\x42\xe0\x3c\x58\x0a\x97\xc8\xcc\xee\x23\x30\x58\x2a\x97\xc8\xb8\x42\x06\x53\xe9\x42\x26\x15\x1e\x2f\x4c\xb9\x0b\x99\x02\xb8\xa7\x58\x9a\x97\xc8\x6c\xc2\x44\x8f\xa9\x7b\x21\x13\x0d\xf7\x14\x53\xfc\x42\xa6\x08\xae\x07\x53\x01\x43\xe6\x17\x6c\xa8\x31\x65\x30\x81\x91\x95\x21\x4c\x83\x25\x85\x89\xd3\xac\x41\xd3\x30\xe5\x30\x64\x26\x60\xe8\x60\x4a\x62\xc8\xf4\xc0\x10\xc5\xd2\xc5\x44\x66\x12\xde\x41\x61\x89\x63\xa2\x0b\x54\x08\xd3\x60\xea\x63\x38\x4d\x28\xbc\x87\xc0\x14\xc9\x70\x1a\x3a\xc2\x34\x58\x42\x99\x38\xcd\x2b\xa8\x44\xb0\xc4\x32\x91\xf1\x81\x5e\xc3\x14\xcc\x90\x59\x85\x0c\xa6\x68\x26\x26\x5e\xb8\xa3\x98\xca\x19\x32\xd9\x54\xf0\x20\x60\xa9\x67\xc8\xbc\x86\x49\x14\x4b\x42\x13\x99\x75\xe8\x37\x2c\x19\x4d\x64\x2a\x61\x51\xc0\x94\xd2\x90\x09\x86\x09\x04\x53\x4f\x13\xe7\x81\x09\x04\x4b\x54\x13\x99\x0e\xf2\x65\xf0\xbf\xff\x18\x0e\x7c\x12\xc1\xbb\x1c\x14\xd7\xbb\x16\x67\xaa\xdb\x81\x67\xf0\x34\xe6\xf4\x50\x4c\xed\x9e\x7b\xf3\x27\xab\x7a\xd5\xe7\x95\x25\x2f\x90\xdf\xe8\x9f\xea\xfb\xbf\x5f\xda\xad\x45\xf7\x1f\x21\x9a\x49\xb4\xfe\x41\x4f\x8f\xb7\x9d\x59\xf4\x45\x78\x3b\x32\xd2\x3d\xcb\x54\x48\xe2\xc2\xc5\x8c\xe2\x58\x72\x0b\xbe\xf0\xf8\x00\x64\xee\x9f\xcf\xa9\x29\xac\xcd\xda\x54\x06\xd1\x5d\x63\xba\x9f\x44\x27\x78\xb8\xdd\xa9\xe4\x30\x2d\x3f\x2d\xa5\xd6\x38\x8d\x51\xe5\xca\x5d\x5e\x6d\x00\x90\x44\xb4\x6e\xe8\xa3\x7c\xd1\xc0\x46\xd6\x3d\x93\xcd\xa4\x7e\x63\x77\x4e\xd0\xd3\x40\x91\x03\xbd\xdd\x88\x97\xa5\x12\xa9\x2b\x5d\x60\xd4\x69\x01\x80\xa4\xa3\x65\xc0\xbe\x08\x19\x77\xef\xae\x56\xd9\xf7\x34\xe3\x07\xdc\x79\x04\x74\xfc\xde\xda\xa7\x6f\xbe\x5a\xf2\x50\x38\x9c\xb1\xf4\xf1\xc9\xb4\xd3\xdf\x98\x44\x3f\x9e\xd2\x59\x50\xa2\x9b\x4c\xf6\xf6\xf0\xcf\x9f\x3f\xf7\x69\x3f\xaf\x3b\xd8\x5c\x21\x7e\xef\x53\x17\xe5\xc6\xbd\xc3\x76\xd4\x23\xb8\x79\x3c\x40\x6a\xd1\x37\x2a\x87\x1b\x06\xbe\xcd\x3f\xf0\x14\x4c\x13\x3a\x75\x92\xbb\xbf\x70\x26\xf0\x30\x57\x5d\x71\xc1\xf5\x2b\x16\x0b\x62\x02\x3c\x09\x9f\xef\x01\xa4\x1b\xad\x62\x34\xcc\xa3\x15\xf7\xdd\x38\xe1\xf2\x50\x5b\xcf\xee\xbd\x63\x1b\x89\xe1\xd5\xa9\x28\x66\x17\xce\x04\xda\x71\xd1\x07\x4e\x07\x07\x97\x01\xb2\x83\xf6\xa5\xf3\x48\xdf\xa3\x7e\x32\xb7\xb0\x74\xed\xd7\x67\x79\xad\xc4\xe6\xf3\x24\xd4\x0f\x56\xa4\x89\xf4\x7d\xa1\xdb\x5f\x51\x15\xa9\xaf\xf7\x37\x47\xa2\xad\x91\x62\x23\x09\xdd\xfd\xe2\x4f\x07\xd9\xf1\xc2\xb1\x6c\xd9\xa5\x47\xf4\xe4\x32\xe7\x46\xe8\x48\x7c\x3b\x58\x95\x28\x64\xa9\xc3\x0e\xfd\x4d\x28\xe8\xce\x75\x21\xca\x6a\x57\x5a\x66\xfa\xdd\xb6\x35\x03\xb0\xa3\x7d\x25\x25\xd6\x69\xe5\x6e\xc9\x50\xdd\x97\x77\x57\x8f\xeb\x15\xd9\xff\x90\xc7\x01\x59\xb4\xf5\x32\x8c\x49\x4a\xa1\x53\x37\x07\x62\x07\x3f\x4a\xff\xa4\xd3\xf1\x50\x5a\x1e\x5e\xbc\x6a\x37\xd6\x7f\x9a\xf6\xf4\xda\x67\x51\x6d\x1c\x1e\xc8\xde\x47\x0d\x37\x3e\xfa\xa9\x40\xfe\x0c\xf5\x73\xea\x07\x36\xa2\x6b\xc3\xab\x8f\x4d\xcf\xf8\x26\xd8\xa4\x48\x23\xa1\x3b\x8f\x9f\x30\x76\xd4\xdb\x02\xe4\x0d\x7a\xab\xf2\x5b\xb7\x95\xaf\x78\xe5\xec\xcc\xaa\x50\x7d\xd0\x20\xff\x1e\xbe\x61\x7d\x92\x7b\x34\x4a\xe6\x5c\x12\xcf\x41\xff\x34\x81\xf2\x0c\x80\x0c\xa0\x05\x67\x9c\x4f\x5f\x4f\x77\x15\x25\x52\x36\x2e\xee\x1b\xdd\xfb\xa8\x74\x8f\x48\x29\x65\xcc\xf4\x3d\xd7\xc1\x48\xe3\x51\xe5\xf6\x8a\x8f\x38\x80\xd4\xa2\x03\xed\x79\x52\x84\xcc\xbb\xdc\x3f\x6c\x61\x35\x99\x8c\x5d\xd4\x86\xfe\x59\xc6\x81\x39\xd4\xbc\x61\xe3\x46\xb3\x65\xca\x17\xa2\xee\xe4\xa0\x86\x06\x9f\xf8\x56\x65\x92\x11\x42\xfb\x8b\x9f\x34\xc8\x66\xfa\x35\xa9\xe7\x2a\x8b\xd3\x3c\x79\x6d\xa5\x60\xd3\x48\xeb\xe1\x63\xf4\xa6\x38\x80\xb8\xa3\x4d\x79\xf8\xbc\x7d\xb9\x6f\x97\xbd\x8e\x80\x6e\xee\x8a\xc5\x2f\x83\x4f\x36\x3e\xe3\xb8\x9e\x57\x24\x77\xf9\x52\x7c\xde\x7d\x14\xc0\xf3\xa2\xaf\x8d\x44\xee\x73\x07\x7d\x1b\x33\xac\x10\x64\x91\x37\x6f\x8f\x67\x72\x9c\xb7\x52\xcb\xe5\x64\x39\x34\x6b\x2b\xb4\xf9\xfb\x58\x67\xe4\xdf\xb3\x8e\x7e\x74\xb8\x2e\x69\xdd\xee\xac\xca\x7b\xc9\x1b\x9f\x39\x53\xd4\xbc\xaa\xf4\xc8\xf7\xa4\x90\xe6\x35\x6b\xc5\x2b\xd6\x59\xef\xeb\x3d\x3a\x8a\x03\x88\x07\xba\x33\xa2\xdb\x48\xf2\x7e\x62\x95\x41\x3b\x12\xa5\xd9\xf8\xc2\x31\xfe\xf1\x1e\x8b\x41\xcb\xef\x45\xde\xb7\x04\xcf\xbd\x1f\xa9\x6f\xd5\xa5\xc2\x03\xa4\x04\xed\x74\x86\x28\x87\xe2\x47\xdf\x8f\x84\x8e\x72\xbd\x93\xbf\xd4\xe3\x87\xdc\xec\xfd\xcc\x7f\xea\xa1\x28\xf9\x9d\x0f\x0b\x3b\x0d\x5a\xde\x8d\x00\x19\x44\xb7\xe7\xfc\xd1\x1b\xd9\xbb\xfa\xe7\xd4\x6e\xae\xbc\x37\xd2\xf3\x2f\xa2\x4c\x34\x7c\xe1\x37\xf5\x66\xf5\x7c\xd3\x56\xa3\xb4\xf8\x8b\x76\x19\x80\xcc\xa0\x03\xe6\xab\x6e\x46\x5c\x3e\x45\x70\xca\x0d\x8a\x0b\x4f\xdf\xec\xfe\xd0\x5a\x77\x64\xdb\xed\xf3\x7d\xcb\x64\x3b\x12\xb5\x7b\xe5\xa2\xa4\x08\xfa\x32\x50\x5a\xd1\x78\x30\xd0\x83\x56\xf6\xaa\xd4\xc7\xbb\xef\x64\xcb\x18\xe4\x6c\x6f\xd7\xed\x6e\x12\x10\xe8\xd7\x4b\x91\xec\xea\x39\x86\x07\xb2\xfc\xa8\xe1\x19\xdd\x3e\x9f\x18\xbe\xd8\xd0\xac\x93\x6b\xd0\xb9\xcb\xed\xa4\xf2\xb4\x05\xef\xfc\x89\xe8\xa7\xe3\x09\x0f\x79\xf3\x4d\xb7\x3b\x04\x20\x39\x68\x37\x3a\x06\x3e\x95\xbb\xb4\x1c\xc7\xdd\xaf\x39\xea\x22\x57\x2b\x2b\x73\x2e\xc9\xfe\xe9\x70\x6d\x3e\x19\xa9\x64\x42\x69\xfa\x23\x3e\x52\x80\x0c\xa1\x97\xa9\x7e\xe4\x7a\xeb\xbe\x4a\xbf\x51\x8b\x8d\x2f\xfb\x07\xb7\xf6\x85\xbe\xb0\x3a\xd1\xe0\x17\x25\xa6\x2b\xd8\xe1\xf9\xe6\x68\xc5\x53\x29\xd4\x50\xee\x1c\x12\xa6\x03\x4e\x57\xe7\x07\x3e\xba\xc6\xa6\xb3\x7a\x99\x1b\x52\x68\x5f\xcd\xaf\x4d\xd5\x0d\x0f\x2d\xf6\xbc\x78\xbb\xc0\x14\x00\xa4\x0e\xbd\x41\xa3\xd1\x62\xcc\x6c\x8e\x56\x14\xe9\xf5\xf7\xb3\x69\xfd\x28\xb7\x02\xf3\x15\xf8\x13\x6c\x72\xf2\x38\xc6\x5f\x1e\x20\xab\xa1\x74\x06\xc8\x34\x3a\x6a\x15\x23\x39\x9d\x6b\xfc\x17\x64\xe3\xfe\xec\x8f\xbf\x22\x35\xec\xd7\x1e\x30\x6e\x19\xcd\xf2\xd4\xc7\xd1\xf3\xc8\xaf\x6c\xcb\xc2\x38\x00\x90\x4a\xf4\x1d\xbf\x5a\xd0\xdd\x84\x87\xe9\x9f\x64\xa7\xa4\xf2\x94\x3e\x09\x26\x07\x1e\xe0\x7e\x4e\x9a\x7c\xbc\xa1\x2c\xfc\x88\xa8\xd6\xde\xaa\xaa\x2a\x80\x54\xa3\x17\xca\xa5\x42\x43\x4b\xff\xf9\xa5\xdc\x13\x96\x61\x07\x87\x3d\xe1\x42\x8e\x45\x35\x85\xbe\x72\xe6\xbe\x41\x31\xe7\xbe\x0a\x75\xd5\x2b\xa1\x86\xb6\x5a\x08\xfe\x19\xfe\xf4\xf4\xf1\x8c\x2d\x97\x4c\x88\xd0\xb1\x92\xdf\xa5\xd3\xb2\xeb\x23\x2f\x05\x63\xe2\x0d\x0f\x57\xb7\x87\x9f\x05\x00\x01\xe8\xbd\x6f\x13\x9c\x6b\xfc\xfa\xf4\x19\x59\x30\xee\xc7\x8f\xfa\x83\xf9\x9c\xd6\xb8\x6b\xa2\xbb\xbe\xd7\xdd\x9e\x38\xb5\x6f\x6f\xfe\x5e\xf7\x5c\x80\x94\xa2\x53\x5d\xac\xf5\x9d\xbc\x98\x93\xc3\x08\x35\x9b\xb4\x74\x57\xad\x9e\x6f\xe0\xa7\x11\x87\x39\xae\xa9\x6d\x56\xb3\xe7\xb7\x67\xb5\x92\xad\x70\x00\xf1\x45\x5b\x9e\x34\x34\x68\x15\xdf\xb3\x41\x19\x19\x3a\x14\x63\x6e\x77\xa6\xdf\xea\xdc\x6a\x89\x4e\x36\x60\x19\xe5\x8f\x35\xa0\x7d\x70\x9a\x0c\x00\xd9\xbb\xa8\xe1\x63\x86\x64\xe6\x69\xad\x1e\x86\x96\x85\xe1\x4b\x96\xd7\x8f\x46\x78\x14\xf7\xb5\xb9\xf9\x5b\x5d\x4f\xf9\xfe\xd9\x47\x57\xa5\x53\x07\x20\x8b\x68\xb7\x8f\x8d\x79\x86\x2f\xd8\x2e\x0b\xb6\x4e\x96\x46\xf8\x4e\x3b\xef\xad\x24\x37\xbe\x98\x68\x86\x18\x8f\x14\x7c\xee\x72\x4a\xb9\x7c\x1a\x00\x24\xed\x9f\x0f\x48\x66\x57\x8a\x8d\x8c\x9d\x8d\x69\x4e\x3e\x2e\xf3\x2a\xf9\x88\x8c\x0b\xfd\x07\x27\x8b\xb9\xe7\x37\x72\xda\xdb\x01\x6e\xf8\x32\x0f\x40\x46\xd0\xe1\x68\xde\x34\x5f\x2a\x7e\x40\xea\x77\x4e\x6b\x9b\xf3\x47\xc9\xf0\x45\xb3\x3b\xe1\x95\x3c\xd9\x4c\xad\xbe\x9c\x11\x93\xba\xbb\xab\x82\x84\xff\x63\x29\x95\x27\xfb\x5f\xdd\xae\x85\x3a\x04\xb3\x9e\x42\x66\x0e\x6a\x24\xcc\x9a\x0a\x99\x44\xa8\x5d\xb0\x0a\x2b\x91\x49\x87\xba\x0a\xab\xb8\x12\x99\x55\x38\x0f\x66\x81\x25\xfa\x00\x36\x73\x98\x55\x16\x32\xdd\x50\x57\x61\x95\x5a\x22\xb3\x03\x7d\x8d\x55\x6e\x89\xcc\x1a\xb4\x0d\xab\xe4\x12\x99\x50\xf8\x87\x4e\xac\xba\x0b\x19\x59\xf8\xf7\x67\xcc\xda\x0b\x91\xfb\xf0\x86\x09\xab\xfe\x42\xcb\xde\xc0\x1d\xc5\x2a\xc2\x44\x66\x00\x2a\x7f\xac\x42\x8c\xda\x51\x2a\x78\x2b\x85\x55\x92\x81\x3c\x1d\x09\x89\x9b\x0b\x0e\x20\x6d\xe8\x73\xec\x25\x39\x6e\x24\xfe\x66\xe7\xbd\x6b\xf2\x9f\x90\x04\x8a\xd9\x8a\x69\x1f\x0f\xe9\x7d\xf1\xc7\xef\x7d\x90\x7d\x1a\x7b\x96\x6f\x91\x04\x07\x10\x6f\xb4\x80\x7a\xd9\x6b\xdd\x35\x4b\x76\x3b\x00\x29\x48\xd0\x6e\x90\x73\x4c\x7d\x9d\x53\x9d\x63\x05\xee\xcd\x2e\xe5\x0a\x5b\x3b\xec\x92\xb8\xf7\x77\x3c\x5a\x40\x25\xb6\x46\x27\xf6\xde\xea\xd9\xcd\xef\xf3\xf8\xd0\x43\xdc\xfb\xa1\xfb\xe7\x99\x29\x74\xf4\x07\x8e\xf7\x9b\x4a\x18\x31\x9d\xba\xfc\x0e\x07\x90\x30\xf4\xc1\x6f\x65\xde\xa2\x0e\x34\x0e\x27\x37\x15\xa6\x7a\x59\x96\x89\xac\x50\x8f\x5e\xb9\x25\x91\x4f\xfd\x81\xe3\x6e\xf9\x89\x6b\xb4\xa7\x7e\x0a\xff\x37\xb3\x89\x2e\x6a\x83\x87\x18\xcb\x74\x22\xe3\x0d\x83\x11\xcb\x7c\x14\x03\x9b\x30\xac\x25\x10\x99\x30\xb8\xe5\x58\x02\x89\xc8\xb8\x93\xc1\xd7\x4e\xb1\xa4\x12\x90\xf7\xa5\xd8\xf3\x7f\xbf\xea\x5d\x88\xfe\x2b\x61\x74\xfa\x75\x17\xb9\xe1\xf6\x68\x56\xd9\xf4\xcc\xa5\xe6\xb2\x0a\xb5\x3f\x1b\xed\x27\x5f\x47\xcd\x93\x1f\xff\xe4\xf6\xb5\x55\xe2\x01\x0e\xc8\x3a\xa0\x15\xf9\x42\x26\x92\x6a\x41\x7a\x60\xc2\xfb\xe4\xdb\xcd\x8a\x66\xdd\x6b\x3f\xeb\xfc\xe3\x85\x37\x68\x9d\xa2\x9c\x6e\x14\xee\x25\x75\xc4\x01\x24\x0f\x1d\x51\xac\xc7\x97\xdb\xc9\x7f\xd9\x24\x0d\x4b\x3e\x9c\xd9\xa5\xfa\xcd\xe3\x71\x7c\x92\x73\x4b\xa6\x8c\x9b\x2c\x85\x62\xde\x89\x61\xda\x58\x1c\x40\xfa\xd0\x75\xaa\x87\xfe\x59\x98\x69\xc8\xd0\x55\xda\xb9\x0c\xbc\x41\xc9\xd3\x88\xce\x66\x0f\xca\x13\x8d\x59\x77\x5d\x0d\xff\x4c\x7c\x7b\x7d\x4c\x53\xf8\xbf\x59\x4d\xf4\x50\x21\x7c\x27\x09\xcb\x74\xe2\x19\x77\x20\x6c\x04\x96\xf5\xc4\x69\xf2\x60\x60\x61\xad\x80\xc8\xf4\xc1\x8e\x13\x4b\xb6\x12\x99\x60\x18\x24\x58\xd2\x95\xc8\x78\xc0\x7b\x21\x4c\xf9\x0a\x99\x12\x98\xb3\x30\x35\x2c\x64\x06\xe1\x7a\xb0\x84\x2c\x91\x99\xa1\x84\x2f\xc6\x62\x49\x5a\x20\xa7\x47\xca\xe9\x82\x03\xb2\x0f\x51\xf1\x32\x2b\xf2\x62\xc5\x29\xd4\xbc\xc7\xa6\x62\x55\x6d\x4a\xcd\x52\xf2\x2c\x9b\xd4\xd2\x6c\x7a\xcb\x6d\xe6\xfa\xee\x30\xe5\x42\xef\xab\x38\x80\x7c\xfb\x27\x63\x91\x8a\x48\x6b\x37\x1a\x49\xaf\x93\xfb\x17\x0c\x25\x92\xbc\xb0\x7f\xe0\x46\xad\xb0\x33\xc8\xfb\x61\x57\xdd\x8b\x0f\x72\x14\x3b\x38\x80\x14\xa0\xc7\x6b\xbd\xad\xf0\xb6\xbd\x1e\x32\x9a\xeb\xc6\xc5\x39\x18\x36\x6e\x64\x4a\x71\xf1\x4d\xec\x26\x03\x7d\x6e\xed\x05\x24\x29\xd4\xc1\x1a\x07\x90\x52\xb4\x8c\x9b\xe4\x4b\x79\x57\xc0\x48\x6d\x30\xbc\xee\xe5\x7f\x60\x1f\xe3\x6b\x3b\xaf\x7a\x49\xf9\xa4\xcc\x30\xad\xf9\xa5\x70\x59\xea\x93\xcf\x84\xfe\x9b\xd9\xc4\x58\x7c\x08\x13\x16\x86\xe5\x44\x9f\x7e\x83\x09\x0b\xcb\x7a\x22\x53\x00\x19\xac\x15\x10\x99\x52\x58\x3e\x31\xdb\x0b\xb8\x1c\x7e\xc2\x34\x98\x2d\x06\x9c\x26\x07\x86\x3c\x56\x9f\x41\x64\x86\xc8\x61\x5e\xc4\xec\x38\xe4\x38\x49\x8e\xff\x4d\x8b\xfd\xe8\xbc\xe5\x2e\x95\xcb\x78\x65\xee\x74\x54\x5b\x9f\xaa\xb7\xd5\x39\x53\x0a\x9d\xeb\xb9\x71\xae\x27\x76\xe7\x96\x2a\xfb\x48\xb5\x16\xfe\xca\xc6\x01\x64\x01\x5d\xa9\x2e\x09\xe4\x98\xd5\x98\x7e\xd5\x9a\xf3\x91\x3d\xd4\x96\x15\x54\xce\x66\xb4\x97\x7c\x6f\x5e\x8e\xc8\x11\x3f\x8a\x49\x81\x75\x21\x41\x1c\x40\xfc\xd0\x7d\xcd\x6a\x90\xd4\x5b\xeb\x1f\x45\x76\x9c\xed\xbb\xb4\x7e\xa8\x16\xcf\xbd\x38\x97\x57\xac\xb5\x79\xb4\xa5\xb8\x37\x76\x5a\xc6\x79\x40\x18\x07\x90\x62\x74\x5e\x1c\xaa\x11\xb0\x72\x97\x9e\xa1\x2d\x68\x1a\x7b\xfb\xfb\xe3\x97\x3c\x76\x3a\x2a\x95\x43\xe7\x1a\xb4\x86\x3e\x29\xec\xaf\x0b\x79\x14\x2d\xfc\xdf\xcc\x26\x7a\xa8\x1f\x26\x2c\x2c\xd3\x89\xcc\x02\xdc\x09\x2c\xf3\x89\x8c\x1f\x4c\x3e\x58\x4b\x20\x32\xc5\x30\x91\x60\xb6\x7f\x90\xa9\x83\xf3\x60\xf6\x80\x90\x99\x86\x3e\xc0\xec\x03\x21\x53\x09\xff\x70\x8d\xd5\x0c\x12\x99\x6a\x72\x28\xcc\x30\xdb\x42\x79\x67\x12\x9e\xbf\x59\x0e\x19\x47\x0b\xa7\xe4\x29\x5c\xfd\x95\x3f\xac\x9f\xf6\xb3\xa9\x88\x54\x06\x0a\x1d\xbd\x3e\xed\x4c\xe2\xfb\xed\x62\x5d\xde\xf3\x8c\xab\xfd\x9a\x61\x94\x38\x80\x44\xa2\xef\x29\xc2\x72\x0e\x8b\x26\xc8\x53\x9f\x0d\x54\xd3\x49\xf9\x68\x1b\x2f\xc3\xab\x6f\x2c\xd8\x98\x99\x77\x2b\xa2\x89\x4c\xe2\xd4\x5b\x4f\x7e\x1c\x40\xd6\xd1\xf7\x78\x15\x29\xf7\xf4\xad\xaf\x3a\xac\xbc\x50\x0b\x68\xce\xba\xab\xa8\xbc\xe6\xab\x5c\x39\x14\xfe\xa4\xf9\xf4\x52\x45\x29\xf7\x3e\x37\x86\xbf\xf2\x04\x9d\xe6\xac\x0e\xaf\xea\xad\xb5\xec\xbe\x17\xd9\x53\x6f\x7c\x64\x63\xf2\xe4\x33\x29\xe3\x3f\x6d\x53\x54\x5e\x51\x2b\x9a\xb6\x99\xa4\xf1\x9c\xc2\xff\xcd\x6c\xa2\x8b\xc6\xa1\x60\xc2\x32\x9d\xc8\x44\xc2\x1a\x85\x65\x3e\x91\x59\x87\x9d\x12\xd6\x12\x50\xc2\x0c\x76\x3d\x98\x4d\x3a\x64\x00\x64\xb0\x3a\x75\x54\x3e\x85\x9d\x12\x66\xb7\x0e\x19\x5f\xe2\xaf\x84\x62\xb5\xec\x30\x07\xdf\x25\x4c\x83\xd9\xb6\xc3\x69\x16\xe1\x49\xc1\x6c\xdd\x21\x93\x06\x97\x83\xd5\xbf\x13\x99\x11\xb2\xe5\xe5\xff\x5d\xa8\x53\xff\xb4\x55\xa2\x31\xff\xc6\x29\x9a\x3b\x66\x53\x53\x9a\xe1\xb3\x1c\xc9\x71\xf8\x91\xe7\x07\x37\xfb\x5d\x6f\xdd\xd5\xfc\xca\x7f\x00\xf9\x96\x99\xad\xbe\x50\x36\x54\x54\x5a\xdf\x2f\xfc\xd0\x6d\xe9\xe0\xd1\xac\x4b\xba\xe7\xd5\xe5\xa6\x58\x26\x44\xbf\xb7\xa4\x36\x72\x7e\xff\x38\xb7\xc9\xc8\xaf\x63\x45\x38\x80\x24\xa1\x4f\x89\x85\xb1\xbc\x63\xdc\xb9\xa5\x61\x07\xee\xe7\x39\x12\xe1\x4a\x74\x7b\x5a\x02\x33\x66\x6e\x0b\x4b\x08\xe0\x53\xec\x83\x17\x94\x0e\xfd\x3d\xee\x68\xad\xcc\xe0\x3d\xb3\xae\x77\xe6\xf4\xcf\x6f\x96\x0d\x05\x9b\xbe\x06\xf4\x4a\xf7\x5d\x3b\xd6\xad\x37\x5b\xe2\x1c\x25\x24\x1f\x31\xad\x9a\x00\x20\xfb\x12\x35\xfc\xcb\xf7\x55\xe7\x45\x25\x86\xef\x17\xf2\x02\x8e\x3c\xe1\x8e\x21\xe5\xf3\x5b\xd3\xe4\xb7\x6e\xed\x65\x7f\x7e\x52\xb4\xe6\x92\xbc\x1d\x40\x82\xd0\x25\xc1\x33\xd3\xa5\x32\x25\x37\xc3\x93\xc6\x31\xc0\xc0\x7c\x2f\x69\x74\xad\x5a\xb8\x13\x45\x68\xae\x0f\x45\x88\xe0\x64\xd3\x4e\xd5\xdf\x33\xee\xf5\xcf\xd7\x25\xf6\x45\xd8\x64\xf8\x24\x8b\x8a\xf0\x7f\xab\x64\x0a\x5a\x2a\xf2\xfe\x54\xb2\x7a\x6e\xfe\x41\xc1\x8c\xda\xf3\xcb\x2f\x6f\x50\x04\x00\x80\x24\xa0\xcf\xec\xeb\xc8\xee\xc6\xbe\x33\x07\x92\x7e\x06\x18\x5e\x76\xd0\x0a\x96\x2e\xee\x91\xcd\x1a\x3a\x1e\x57\x98\x72\xf5\xbb\xd4\xd3\xf8\x3c\x66\x80\x8c\xa2\xaf\xc6\x94\xb7\xb2\xaa\xe5\xbf\x9f\xb9\x74\x6b\x2e\x4f\xf8\xc4\xfd\xea\x3b\x6d\x6c\x26\x45\xbf\xf6\xb8\x3f\xf7\x6b\xe5\xba\x98\x6b\x7c\xf1\x35\x00\x48\x15\x7a\xfc\xfb\xfe\xe8\x37\x8d\x25\xa1\x22\xe2\x9b\x95\x22\xe2\xae\x32\x5a\x91\x89\x92\xe7\xc9\x5f\x23\x4b\x07\x02\xfd\x0f\x07\x1b\x56\xd6\x02\x64\x18\x3d\x7c\x58\xed\xbc\xff\xcf\x89\xa4\xcf\xea\xfb\xaf\xca\x34\x9c\x48\xda\x57\xf1\x96\x64\xd4\x3c\xa2\x7f\x36\x46\x27\xd3\x6d\x86\xd5\xfc\x6f\x81\x1d\x45\x67\x28\x69\xb7\xc9\xfd\xae\xac\xc2\xce\x77\x2a\xb7\x2e\x97\xbe\x66\x63\xf8\xae\xaa\xd4\x74\xf2\xa8\x6f\x8a\x89\xff\xde\x09\xe7\x75\x96\x1b\x78\x20\xab\x8b\x1a\xce\xb9\x27\xb7\xd3\xd7\xce\x5b\xed\x91\xb5\x7c\x01\xa3\x86\xab\xaa\x59\xd5\x39\x2b\xcb\x82\x47\xf7\x2c\xe7\xcc\x02\xee\x90\xe8\xba\x03\x24\x1e\x5d\x5e\xeb\x1e\x84\x7d\x74\x2f\xad\xf3\xa6\xf7\x7a\xaf\x74\x3a\x31\x5c\x22\x23\xe7\xcd\x1a\x55\x55\x04\xed\xc7\xeb\x92\x2c\xed\x36\x61\xa9\x00\xe9\xfe\xe7\x6b\xe3\x79\x4f\xbf\xd7\xe6\xdf\xbb\x42\x42\xff\xc7\x57\x63\xee\xb8\x61\x8a\x69\xd1\x3e\x61\x96\x97\x2d\x91\x91\xce\x24\xad\x0a\x6f\xa3\xff\x26\x0d\x74\xa0\xbd\xab\x61\xa4\x6f\x2c\x34\x7b\x76\x3a\x38\xc7\x89\x25\xb2\x70\x0e\x39\x25\x10\x7b\xb8\x25\x7a\xcf\xb1\x8a\x7a\xfa\xe7\x3d\xec\xde\x00\x20\xaf\xd0\xce\x79\xf7\xb5\x7c\xb2\xd8\x27\x5d\x2b\x9a\x5a\x12\x5c\x64\xaf\x3c\x97\x2a\xd7\x3a\xfa\x12\x17\xf6\x16\x6f\x9a\x73\xfb\x91\x90\x11\x0d\x40\x1a\xd1\x91\xd3\x79\x3f\xef\xc5\xcf\x90\xcb\x99\x5f\xe6\x9e\x09\x9c\xe5\x9d\xf8\x6c\xe7\x49\xf6\x66\x6a\x53\xfa\x32\x33\xdd\xc8\xdd\x36\xff\xdb\xcf\x00\x40\xdc\xff\x79\x9d\xb1\x2e\xcd\xea\x17\x99\x68\x62\xf1\x98\x79\xc3\x01\xfd\x12\xd7\x56\xea\x1f\x6f\xbb\x93\x3f\x05\xd2\xab\x73\x35\x26\x48\x65\xb3\x03\x64\x13\x1d\x68\x7d\x27\xf2\x6b\x3c\x18\x95\xaa\xab\x58\x35\xf9\xee\xc7\xf5\x97\x4e\x9c\x3a\xe1\xcd\x2b\x27\xe0\x41\xcf\x57\xc5\xd6\x6f\xd1\x38\x0f\x00\x52\x83\x3e\x26\xbd\x71\xe7\xc8\x70\xf9\xe6\x7c\xde\x16\xdb\x74\x02\x55\xba\x23\x43\x1c\xd6\xc9\x3c\x3d\x3e\x2f\xd8\x35\x87\x18\x1b\xbd\x9d\x8a\x00\xb2\x8c\x7e\x7c\x50\x08\x5d\x65\x81\x1b\xf9\xca\x35\xb3\x91\x19\x8d\x3c\x9b\xbc\xd0\x08\xaf\x1a\x81\x45\xf1\x4b\xf4\xec\x52\x4e\x87\x82\x4b\x3b\x01\x40\x9c\xd1\xe3\x9f\x98\x53\x9d\x2a\x7a\x71\x66\xb3\xed\xa0\x3d\x77\xb5\x43\x73\xe9\xd1\xb4\x57\xbc\x0a\x75\xd2\x3a\xec\xce\xa6\x4a\x8f\xf4\x5f\x1f\x04\x48\x13\xda\x97\x03\xbf\x1b\xc7\xd9\x1b\x0d\x6c\xfb\xf8\x8e\x8b\x49\x52\x4d\xc5\xdd\x60\x4e\x2a\xb8\x6d\x70\x69\xe4\xf0\x01\x7f\xa5\x9a\x86\x54\x6f\x1c\x90\x15\x42\xbf\xaf\xd7\x6b\xc3\xae\xcd\x6b\x2b\x79\x3c\xd1\xc7\xc4\x8a\xcb\xf0\x79\xa0\xce\x30\xbf\xdb\x52\xc1\x53\xbb\xfd\x1a\x4b\x2f\xc6\xd9\x9d\xf1\x00\xa9\x47\xfb\x52\xe4\x5a\xff\x55\x8b\x46\x95\xed\xde\x23\x37\xc9\x8e\x6e\xb7\xb0\x96\x92\xca\x86\x1e\xe8\x4e\x3d\x78\x20\x9b\xf7\xfd\xde\x8a\x32\x03\x80\x74\xa3\x87\x4b\xbd\xe7\xaa\x60\xf3\x30\x77\x50\xf7\x16\x3e\x21\x56\xbd\x99\xb4\xfb\xd8\xfa\xba\xe8\xc5\x7d\xf9\x47\xc5\x1c\xf8\x19\xef\xf7\x52\x00\x64\xf6\x9f\x1f\xe1\x30\x13\xf4\x57\xe9\x2b\x55\x1e\x6c\xa4\xa8\x78\xf1\xe0\x7b\xe0\x86\xdf\xbe\x9a\xd6\x86\xee\x6c\x2a\x97\x51\x4e\xab\x4e\xfb\xeb\x38\x80\x94\xa1\x23\xe1\xdc\x95\xa7\x78\x07\x85\x54\xa5\x8b\xc1\x79\x59\x02\xfe\x3a\xb5\xa5\xb9\xb5\xe5\x35\x0d\x63\xeb\xa5\x27\x56\x5b\x72\x3a\x39\x56\x01\x40\x82\xd0\xce\x61\x08\x92\x99\x8a\x7a\xa7\x9c\x20\x63\xa2\x28\x69\xf3\xf4\xbe\xf9\xde\xd3\x2b\x2e\x9e\x36\x31\x9e\x11\x03\x56\x0b\x01\x3e\x65\x92\x00\xc9\x44\xef\xec\xcb\x5b\x2f\xd7\xd8\x7a\xfa\xd3\x92\x1d\x3e\xb0\xaf\x17\x1e\xff\x18\xf3\x87\x07\x31\x27\xeb\xa9\x95\x9c\xbe\xc7\x7f\xcd\xcc\x40\x12\x00\xe4\x35\x7a\xb5\x7e\x3a\xdf\xa2\x38\xed\x68\x9e\xf8\x16\x4c\xeb\x5c\xad\x20\x8f\xc0\x5b\xd8\x2d\xec\xfd\xaa\x3f\x5a\x97\x7f\x74\x7c\x5b\x7c\xb7\x3e\x40\xbe\xa3\x57\xbb\x65\x27\xd8\xf4\x40\x34\xb4\x1d\xc7\xdf\x61\xa6\xcd\x40\x72\xfb\x92\xf7\xe9\x6d\x2f\x2e\x29\x06\xce\xaf\x57\x9c\x94\x71\xbf\xfa\x70\x00\xe9\xfc\xe7\xeb\x92\x77\x6f\x3e\x2a\x5f\x26\x3b\x61\xdd\x15\x6e\x71\x42\x49\x46\x6c\x4f\xad\xce\xa0\x5c\xc9\xa8\xce\x00\x0d\xbe\xf6\x59\x66\x95\x04\x0e\x20\x6d\x68\x15\xe5\xe5\xa9\x31\x67\x96\xab\x70\xa2\x86\x45\x85\x5c\x5b\x9e\xfd\x9e\x02\x37\xa5\xb0\x9b\xba\x4d\x0e\xcf\x8c\xbd\x65\xcf\x66\x9e\x35\x00\x48\xc0\x3f\xdf\xd7\x79\x4c\xbf\xbc\xef\x33\xed\xa3\xe8\xa1\x9c\x0b\xa4\x5b\x0f\x36\xc8\x73\x07\xb4\x73\xa3\xe4\x84\x49\x74\xca\xdd\xa5\x5a\x29\x26\x00\xb2\x8e\x36\x7f\xac\x45\xa2\xbc\xc3\xed\x9e\xd5\x65\xc7\xed\x17\x5c\xb1\xe6\xc5\x6c\xe2\x8b\xa9\xfb\xcb\x62\xa7\x8a\x36\x3e\xe1\x4e\x06\x5f\x70\xc6\x01\xa4\x07\xdd\x5b\xba\x72\x08\x38\xb1\xd3\x25\x76\xe0\x54\x11\x9d\xfd\x19\x89\x3f\xee\x59\x2d\xf5\x8c\x23\x27\x52\xc9\xcf\x96\x99\x1c\x5f\xd4\x2f\xf9\x7b\x6c\xd1\x9b\xc5\x35\x60\xb5\xb1\xc1\xb4\xff\x65\xfe\x40\x89\x9b\x12\xcf\x2e\xb1\x1d\x2e\xe9\xfa\xe5\xf5\x24\x51\xea\xbe\xd4\xcf\x78\xc7\x78\x51\x80\x04\xa0\x5b\x98\x56\x8d\xb2\xd5\x63\x46\xc6\xe4\x25\x5a\x8d\x39\x0d\x95\xaf\xdf\x04\x04\x30\xb9\xa5\x2b\xdd\xd9\x7d\x84\x39\xf7\x79\xac\x98\xfd\x26\x0e\x20\x29\xe8\x0c\xcb\x83\xa8\x94\x97\x31\x77\x75\x7d\xa2\x3e\x70\x90\xe4\x66\x82\x37\xc5\x15\x2d\xf7\xa0\xb9\x9d\xed\xa7\x3d\x0f\x4d\xa5\x0c\x6f\xbc\x04\x00\x49\x43\x7b\xc7\x61\x35\xc0\xe0\x68\x35\x0d\xdf\x1f\xf2\xf4\x6c\xd2\xea\x8c\x6c\x0e\xfb\x99\x3d\xcc\xc7\xef\x9c\xe3\x69\xca\xd7\x77\x59\xbf\xdd\x09\x90\x19\x74\x68\x0a\x76\xe3\x59\xc9\x52\xc4\x74\x92\x79\x82\x6f\xb2\xbe\xca\x88\x25\x7d\x26\x11\x28\x7c\xe8\x3c\xfb\xd8\xc3\x43\x0f\x0b\xbc\xf6\xb7\x12\x5e\xb9\xc4\x2a\xe2\x40\x9e\x82\x44\x26\xd3\x15\x07\x90\xb7\xe8\xc7\xbf\xa0\x7c\x1f\x46\xae\x72\x9b\x2e\xb7\xb5\x6c\x06\xa7\xeb\xf0\x8e\x45\x7f\xe8\xe4\x6e\xf3\x36\xe1\x24\xcb\x28\xe5\x9c\xfa\xbd\x75\x38\x80\x54\xa1\x57\x5b\x9d\x2d\x9a\xe6\xa4\x18\x97\x54\xa5\xf8\x3b\xa5\x91\x2c\xb1\xae\xd4\x25\xc4\x3e\x4a\xb9\x61\x5f\xdb\xcd\x6f\xc7\xa9\x86\x4b\xfd\x71\x00\x09\x42\xa7\xf0\x20\x06\xae\xa3\x6b\x46\x55\x59\x1d\x37\x7e\xd4\x17\x8b\x88\x4a\x98\x37\x57\x6c\x2f\x96\xf6\x5e\xfd\x91\xb3\x35\x4c\x37\x7e\xfc\x1c\x0e\x20\xc1\x68\x7b\x02\x65\x9e\x74\xc8\x3f\x61\xe3\xef\x35\x3f\x1f\x5d\x74\x8a\x6d\xdf\xd8\x09\xe1\xca\xc8\x48\x39\x0a\x2b\x19\x3d\xa3\x7d\x5f\xf1\x8f\x71\x40\xf6\x34\xda\xfc\x51\xaf\xd7\x61\x8f\x85\x5b\x38\x3c\xeb\xa2\x0a\xd3\x13\xc3\x84\x0f\xb2\x5c\xaa\xd1\x8f\x95\xdd\xfd\x66\x53\xfa\xb4\xa9\xf6\x21\xe1\xff\xb6\xca\xbf\xce\xf9\xdf\xbf\xef\xc1\x7e\x08\x6b\xa5\x44\xa6\x0a\x8a\x63\xac\xd5\x12\x99\x20\x28\xc2\xb1\x56\x4c\x64\x82\xe1\x5b\x3a\x58\xcb\x86\x8c\xec\x69\xc2\x34\x58\xa2\x8d\x38\x4d\x12\x34\x0d\x53\xb8\x41\xa6\x12\x5e\x17\x62\xaa\x37\x68\xda\x4b\xc2\x34\x58\x0a\x0e\xe5\x35\xb8\x3b\x98\x2a\x0e\x32\x5e\xb0\xfb\xc6\x54\x72\x90\x49\x80\x6d\x08\xa6\x9c\x83\xcc\x28\xec\x70\x31\x25\x1d\x31\x72\x20\x83\xa5\xeb\x88\xcc\x30\x64\xb0\xb4\x1d\xca\x36\xf8\x26\x1d\xa6\xc0\x83\xdb\xa3\x4b\x98\x06\x53\xe4\xc1\x69\xe2\xe1\x05\x04\x96\xd2\x23\x32\xdd\xb0\xdd\xc1\x54\x7b\x90\x09\x83\x11\x8a\xa9\xf8\x20\xf3\x0a\xba\x0d\x53\xf6\x41\xa6\x11\x86\x1b\xa6\xf4\x83\x8c\x3b\xf4\x01\xa6\xfe\x83\xcc\x26\x0c\x51\x4c\x0d\x08\x99\x1a\xf8\x12\x26\xa6\x10\x84\xcc\x32\x9c\x07\x53\x0c\x42\xc6\x19\x32\x58\x8a\x90\xc8\x34\xc1\xff\xcf\xc5\x92\x85\xc4\x70\x13\x22\x4c\x83\xa9\x0c\xe1\x34\xf5\xd0\xd5\x98\xf2\x90\x18\x6e\x90\xc1\xd2\x88\x44\x66\x16\x66\x03\x4c\x9d\x08\x99\x32\xe2\x1f\x0f\xb0\xb4\x22\x31\xbb\xc1\x10\xc5\x14\x8c\x90\xc9\x84\x61\x80\x29\x1a\x21\xf3\x1a\xfa\x00\x4b\x39\x12\x99\xef\xd0\x07\x58\xea\x91\xc8\x74\xc2\xa3\x8d\xa9\x20\x21\xd3\x06\x2f\xb4\x30\x55\x24\x64\x02\xa0\x0f\xb0\xa4\x24\x91\x59\x87\xeb\xc1\x94\x93\x90\xe9\x81\x97\xfd\x98\x92\x92\x98\x0e\xe0\x9e\x62\xe9\x4a\xd4\x7a\xe0\xad\x11\xa6\xb6\x84\x4c\x0a\xd4\x20\x98\xfa\x12\x32\x69\xd0\x6f\x58\x22\x93\xc8\xcc\x90\x2e\x0f\xfc\xef\xdf\x8f\x7d\x39\xe5\x0c\x28\x23\xd9\x78\x0e\x77\xd2\x46\x29\x54\x2f\xdb\xd3\x90\x0a\xfd\xe0\x7e\xbc\xe7\xf3\x90\x7d\x4a\xc8\xc6\x19\x36\x1d\x20\x3f\xf3\x7d\xf9\xe1\xff\xfd\xd8\x4b\x06\x5a\x60\x8b\xa5\x6e\x54\x65\x26\x74\xb6\xab\x7b\x4a\xee\x2b\x0b\x7d\xcc\x5e\x28\x5f\xe8\x14\x46\xc7\x72\xd1\xc8\x52\xe2\xee\x87\x2c\x9b\x50\x80\x64\xa3\x15\xa7\xcb\xb2\xaf\x0b\xb5\x71\xd7\x35\x81\x83\xcd\xdf\x9e\x21\x03\x06\x91\x56\x0f\x7c\x7e\x1f\xb9\x9e\xba\x49\x7f\xf6\xcf\xc7\x9c\xb4\xd2\xbf\xf5\x00\x3d\x7e\xc3\xfc\x4f\xa4\x30\x8f\xf6\x73\xfa\x94\x81\xe3\x21\x1a\x62\xbb\x78\xd2\x4d\x0f\x57\x5e\x7c\x28\xd6\xb1\x62\xbb\x86\x24\xf5\xfe\xed\x8b\xab\xd0\xed\x47\xc3\xc2\xef\x54\x12\x03\x7a\xdf\x2f\x7d\x93\x54\x4b\xa4\x7b\xec\xcc\x8f\xa8\xed\x16\x9e\x55\x7c\x9c\xad\xe1\x62\x15\xa5\x49\x22\x0b\x90\x46\xb4\x7c\x77\xda\x13\xc5\x1a\xc9\xae\x3b\xe2\xce\x63\xc3\xa0\x19\x30\x9a\x1d\x1c\x4d\x36\xa4\xff\xe9\x49\x9f\xd8\x80\x4f\xa8\x96\x40\x4a\x12\x0e\x20\x9f\xd1\xbd\x1c\x9f\x59\x47\x91\x3d\xd3\xb7\xf0\x53\xfc\x5c\x1d\x31\xb7\xbc\x42\x1f\x87\x1d\xce\x61\x7c\x78\xf5\xee\xe9\x8d\xf8\xb1\x53\xe7\x65\x42\xfe\x8e\x47\x9b\xff\x66\xe2\x04\x1d\xfd\x6a\x60\x5e\x8e\xb2\xaa\x57\x59\x1c\xde\xed\x6e\xd4\x69\x63\x0a\xfb\x7c\xcf\x77\x27\xb7\xbf\xff\xbe\x9d\xe7\xfa\xd7\x9b\xff\xbc\xa9\xba\xe5\xc9\xff\x07\x39\xc4\x76\x59\x8a\x84\xfb\x1d\xb9\x97\xcd\x47\x47\x52\xed\xf0\x18\xaf\xe7\x3e\x76\x15\x3e\x54\xa1\x23\xee\x00\xc9\x45\x9b\xbf\xb7\xe9\x17\xc3\xd9\x21\xb1\x90\xbd\x1d\x16\xd3\x6f\xa4\xa7\x38\xfd\x84\xae\xc4\x89\xaf\x50\x27\x5b\x97\xbf\x4b\x92\x4d\x99\x9e\xc0\x01\xd9\x8b\xa8\xe1\x38\x07\xc5\x84\x1d\x01\xa3\x87\x1b\xcc\x8a\x89\x37\x2d\xb5\x9b\x5c\x6c\x6b\xf4\x75\x07\x6f\x9d\xbf\x57\x26\xab\x22\x6e\xbe\xf0\xb7\x19\xaa\x43\xb7\x96\xbf\xf3\x75\xe2\xf5\x57\x4e\xaa\xcb\xab\x98\x5c\xce\x8e\x79\x65\xef\x9b\xd1\xf6\x79\x97\x7f\x9c\xc0\xdd\x4b\x6d\x91\xa9\x15\x6a\x53\x38\x80\xac\xa2\xcd\xb9\xe4\x22\x58\xd9\xf1\xf4\xb7\xc5\x7b\xeb\xf7\xbb\xa7\xd3\xb7\xf5\x95\x5c\x5f\xb9\x88\x75\x3e\x38\x0c\x6c\xbb\x52\xca\x4f\xd4\x14\xa1\x5f\x81\x4b\x4a\xbf\x39\x67\x7b\x67\x4f\x18\x0b\x0d\x15\x65\x16\x6b\x19\xdb\xe7\x4b\x0e\x01\x61\xbf\x8e\x1d\xbe\x36\x1b\x44\xd1\x98\xef\x81\x03\xb2\xe8\xeb\x0e\x9d\x1f\x08\xa5\xaa\x50\x82\x38\x79\x93\xc1\x76\xec\xa7\x00\xff\x94\xfc\xd1\x45\xf3\xaf\xe5\x1a\x5c\xe4\x67\x4b\x04\x0f\x2e\x8e\xe2\x81\x2c\x2d\xfa\x3d\x32\xbd\x86\xf2\x56\x6f\x55\xe6\x86\x39\xc5\xbd\x1e\xcf\xab\x3e\x0f\x27\xaf\x2a\xb0\xca\x9d\x35\xec\xed\xc9\xea\x2b\x10\x7b\xf7\x10\x20\x6e\xe8\x18\xee\xfb\xc9\x73\x1c\x99\x28\x0a\x6e\x74\x0f\xbb\x79\xff\xd9\xad\x3b\x67\x5a\xb6\xd5\x3b\xba\x77\x1a\x5e\xec\xde\x6f\xd1\x6b\x6c\x38\x0e\x90\x55\x74\x8c\x31\x0f\x05\x0c\x9b\x90\x15\x2b\xd5\x6a\xc6\x78\x96\x4c\xd4\x92\x27\x6f\xfb\x4e\x05\x79\xbf\x5c\x8f\x4a\x5f\x2c\xba\xc7\xaa\x68\xfc\x57\x9f\xa0\xdd\xf2\xf0\xfa\xca\x87\xa6\x0f\xe4\x73\x3f\x73\x7d\xd6\x2a\xaf\x7f\x76\xa1\xd7\x66\xa3\x4d\x2a\x10\xf4\x2e\x34\x28\x51\xdc\xa8\xfe\xc9\x89\x6e\xe6\x37\xa8\x70\xd9\x42\xc6\x47\x2a\xab\xe2\x7f\x1a\x1c\x66\x97\x3d\x76\x6b\x32\x52\x4c\xc2\xf4\x93\x82\x78\xe2\xc6\x6f\x4f\xb1\xef\x00\x20\xa9\xff\xbc\x1b\xdc\x32\x66\xa1\xdc\xc4\xda\x46\x51\xdd\xa2\x7a\x49\xb3\x31\x6d\x86\x77\x7f\xfc\xc6\xb1\xdf\x75\xbd\x5c\x66\x34\x4b\x67\x9d\x24\x00\x92\x83\xee\xc7\x90\x5c\xb2\xb1\x8f\x24\xe4\x31\xee\xcc\xf6\x07\xd3\x8e\x85\x97\xd1\xfa\x6d\xea\xd7\xdc\x28\x35\xb3\x6c\x26\xe9\x9e\x2b\x31\x66\xc5\x01\xc4\x15\xdd\x6c\xaf\x52\x79\x89\xb0\x51\xc7\xc8\xd6\xdc\xd6\xbb\x1c\x94\xd5\x98\x31\xa6\x4b\x96\x2c\x75\x7e\xb1\xbe\xc2\x73\xe6\x63\x70\xb7\x20\x15\x1e\x20\x00\x1d\x30\x0b\x56\x06\x0f\x7a\x4c\xd4\x22\x38\xf9\x26\xe5\x48\x92\xf8\xca\xc2\x32\xcb\x57\x65\xef\x4b\x49\x34\x92\x8b\x19\xb2\x71\x34\x0f\x00\x24\x04\xed\x98\x35\xc6\xb4\x47\xa2\xed\x89\x15\x02\xf6\xfd\x87\x4f\xd6\xe4\x31\x19\x2a\xe7\x1b\xb4\x6c\x51\x2c\xbc\x1d\xcb\xea\xdf\x1a\xf4\x19\x02\x48\x2b\x7a\xb1\x07\xea\x9b\x8e\x55\xe4\x56\xbb\x1d\xc5\xdb\xb3\xa7\x53\x04\x37\x4d\x51\x89\xca\xc4\x75\x54\xbf\x26\xb3\xa3\xcd\x7b\xf4\xd0\xc9\xfd\xaf\xf6\x42\x1f\x26\xbb\xf4\x79\x06\xdf\xa3\x06\x7b\x24\xdc\xab\x66\xce\x5e\xbd\xa2\x6a\x31\x68\xcd\xc3\x67\xd9\xc5\x6d\x22\x64\x53\xaf\xb0\x4b\x44\x09\x00\xd9\x5b\xa8\xe1\x95\x6d\x8d\x49\x97\x2d\x05\x1b\x15\x7f\xd0\x2b\x33\x24\x6d\x84\x96\x16\xb9\x4b\x38\x07\x0d\xbc\x98\x4b\xfe\xf2\x00\x2f\x94\xa2\x01\x64\x8d\x51\xa3\x6f\xd5\x5d\x4c\x33\x38\x7a\x5c\x7e\xb7\x04\x2d\xe3\x8d\x2e\xfe\x46\x26\x03\x9f\x3b\x1f\x18\xc2\xa8\x70\x2c\xe1\x3a\xba\x34\x17\xad\x71\x00\x89\x40\xb7\xce\x3a\x67\x1a\x86\x98\x32\x62\x1c\x15\x0d\xb4\xca\xfb\x26\x2e\xfa\x6b\xbc\xd2\x55\x3f\xa6\x14\xff\xd0\x8c\x39\x34\x8d\xfa\xc9\xca\x14\x1e\x20\xe5\xe8\x4c\x33\x1b\xef\xe1\x13\x99\xbb\x2e\x19\x7b\x84\xbb\xde\x9e\xba\xba\xe9\xf5\x43\xd2\xe2\xe1\xa0\xd2\x0f\x23\xb9\x3a\xcd\xed\xb9\x5f\x2d\x00\xf2\x0b\xed\xf9\xf2\x41\xe6\x4d\x9a\xa8\x5f\x3e\xbf\x67\x59\xb4\xd2\x26\x5d\x52\x28\x25\xce\xe7\x56\x3c\x93\x63\x34\x7a\x4d\xc9\x99\xf1\x63\xa8\x15\x20\x73\xe8\xf3\x54\x11\x3a\xe6\x17\x76\x86\x95\x37\x6d\x4d\x6a\x73\xeb\xd6\x54\x06\x9d\x96\x9f\x77\xb3\xed\xb3\x14\xe1\x3b\xeb\x8d\xfb\x1c\xe8\x16\xf0\x40\x16\xfd\xa2\xed\x83\x56\xbc\xd8\x0f\x9d\x0e\x93\xa7\xab\xac\x72\xa9\x23\xd7\xad\x82\xdf\xac\x68\x5b\x3f\x9b\xa9\x39\xf7\x80\xcf\xc1\xd6\xc9\xe7\x3b\x40\x56\xd1\xb6\x5f\xbd\xce\xff\x27\x65\x46\x26\xa5\x29\xd7\x21\xd4\x46\x76\x5a\x23\x64\xe5\x8c\x16\x13\x43\xad\x7e\xf5\x64\xcb\xd9\xbc\x00\x8d\x54\x80\x6c\xa1\x6d\xb7\xfc\x9d\xd4\x4d\x53\x62\x11\x53\xec\x11\xc5\xf2\x42\x43\xab\xcc\xad\x7d\x57\x5a\x89\x7a\xd2\xaf\xd3\xb4\x86\x7b\x78\x8c\x55\x77\x01\x80\x04\xa1\x8d\x2f\x1d\x13\x37\xd0\x36\x11\x08\xca\x70\x38\xc2\xda\xe5\x63\x7d\xec\xad\xf1\xd1\xd6\x36\xc7\xe3\x73\x54\x15\x49\x35\x76\x63\x9a\xf9\x00\x99\x44\xdf\x30\xd5\x79\x38\x86\x8f\x71\x84\xd5\x5c\xb0\x9d\xcb\x22\x67\xc8\xd5\x51\x61\xbe\x61\x71\x63\x56\xb5\xd8\xe7\x2c\x2b\xc2\x5a\x16\xe4\x0e\x00\x12\x86\xbe\x20\x53\xfb\x25\xbf\x4c\xe2\x56\xce\x71\x41\x6f\xbd\x49\x90\xef\xce\xe8\xa1\xd7\x37\x29\x6e\x78\xa4\xc9\xfd\x69\x51\x3b\x75\xe5\x95\x72\x10\x40\x62\xd1\xd6\x20\x09\xb4\x29\x9f\xc9\x4f\x9c\x3d\x7f\x5b\x80\x3f\xf7\x0c\x03\xc5\x67\x6a\x0e\xdb\xc8\x0e\xbe\xb4\x0b\xad\x49\xcf\x5a\x71\x01\xe7\x85\xff\x63\x9d\x94\xdf\xf3\xbf\xa2\x9c\x01\x05\x03\x56\xb1\x24\x32\xd9\x50\x30\x60\x16\x4c\xc8\x84\x41\x06\xb3\x68\x42\xa6\x0a\x0a\x2d\xac\xca\x49\x64\x1a\xa1\x30\xc1\xaa\x9e\x44\xe6\x33\x14\xb5\x98\x15\x94\xc8\xc0\xf5\x60\x56\x51\xa2\xaf\x21\x83\x55\x4a\x89\x4c\x2e\xbc\x1d\xc1\xaa\xa7\x90\x91\xbd\x48\x98\x06\xab\xa4\x12\xa7\xa9\x83\x7a\x1b\xab\xac\x12\x99\x55\xe2\x07\x18\xb1\x0a\x2c\x90\xa3\xe3\xd4\x73\xc1\x01\x24\x12\x7d\x56\xc6\x75\xa6\x46\x7f\xdc\x76\x7c\x76\x4e\xc4\x57\x67\xb7\x8f\xf9\x85\xf3\xaa\x64\x9a\x3f\xe9\xce\x53\x78\x18\x3d\xa8\x19\x64\xd9\x16\xc4\x01\x64\x0c\x9d\xc1\x6d\x3e\xc5\x8f\x87\xe3\xd5\x78\x7a\xad\x28\x0f\x7a\x27\x73\x2e\x24\x7f\xb8\xc6\x93\x2d\xfc\xca\xeb\xda\x1f\xe3\xf5\x88\x5f\x2d\xe5\x7f\xdb\x47\x74\xa5\xe5\x20\x9f\xe3\xd3\x59\x61\xe1\x3b\x29\x50\x7e\x4a\x69\x74\xbd\x3f\x6a\xcb\xe3\x6d\x20\xcb\xd5\xe5\xd0\xe5\x87\xb7\xba\x3e\x54\x66\xe3\x00\x52\x88\xce\x9a\xfd\xaa\xe0\xd3\x1f\x53\x13\xe1\x89\x93\x52\x0c\x34\xc8\x72\xb0\xf4\x81\x6f\xe1\x0b\xc7\xaa\xf3\xda\x86\x8f\xca\x68\x97\xce\x59\x0a\xff\x37\xb3\x89\x1e\x8a\x84\xaa\x1f\xcb\x74\x22\x33\x06\x03\x18\xcb\x7c\x22\xd3\x04\x0f\x31\xd6\x12\x88\x4c\x21\xfc\x40\x17\x96\xdc\x21\x06\x16\xfc\xac\x13\xa6\xe4\x81\x08\x2d\x3c\x26\x58\xb2\x07\x5a\xe6\x06\x57\x83\xa5\x7d\x50\xb1\x08\x53\x05\x96\xfe\x21\x32\xaf\x88\xf1\x8b\xa9\x84\xe4\x84\x9c\xff\xef\x45\x4e\x7f\xb4\xc0\xb1\x38\x6e\x4f\xa2\xd6\xcf\xfb\xb3\xf5\xaa\xf0\x1c\x23\xe2\x14\xa4\x3d\x9f\xbe\x33\x7f\xef\x94\x65\xb7\xc3\x85\xcf\xcc\xd9\xaf\xe4\x70\x00\x99\x46\xc7\x7b\xc1\x3b\x3f\xa1\x09\x06\xb5\x3a\x8b\x60\x2d\x81\x33\x39\xba\x97\x82\xde\xa8\x27\x6f\xc8\xd3\xf9\xda\x67\xf0\xbe\xb9\xa3\xde\x31\x82\x03\x48\x16\x5a\x52\xe4\xf8\x2e\x38\xb4\x5d\x91\x1a\x44\xf8\xd8\x67\x7f\x0e\x58\xef\xbc\x6e\xd9\x3a\xfe\x35\x79\x5b\xd3\xe1\xb5\x86\xe6\x42\x4c\xda\xce\xdf\x7e\xfc\x9f\x5f\x8d\x63\xf4\xce\xa2\x55\x28\x63\xbf\x1d\x7c\xa9\xc5\x2e\x92\x37\x7e\xc3\x29\xdb\xfb\x42\xb0\x21\x25\x33\xef\x82\x85\x82\x6c\x8d\x86\xf0\x7f\x33\x9b\xe8\x21\x7f\x78\x13\x81\x65\x3a\x91\x99\x86\x31\x8f\x65\x3e\x91\xc9\x82\x89\x11\x6b\x09\x44\xe6\x35\xec\x8e\x31\x65\x29\x64\x52\x61\x94\x60\x69\x53\x22\x93\x03\x7d\x80\xa5\x4f\x89\x8c\x2b\xb4\x0d\x53\xa3\x42\x06\x10\x3f\xb5\x81\x25\x54\x21\x13\x02\x73\x05\x96\x5a\x25\x32\xad\xd0\x07\x98\x8a\x15\x32\x9b\xf0\x0e\x18\x53\xb6\xc2\x83\x7f\x8b\x80\x60\x69\x57\x22\x62\x4c\xb0\x0c\x4b\xbe\x12\x2d\x8b\x80\xd7\xb9\x98\x12\x16\x32\xe5\xb0\xdc\x63\xea\x58\xc8\xfc\x82\xbb\x83\x25\x66\x89\xcc\x1c\x4c\x97\x98\x8a\x16\xba\x00\x21\x4c\x83\xa9\x6a\x89\xa9\x0f\x2e\x07\x53\xda\x42\x66\x0b\x2e\x07\x53\xde\x42\x26\x08\xde\xe6\x62\x6a\x5c\xc8\x4c\xc2\x64\x80\xa9\x73\x89\x4a\x11\x5e\xe3\x61\x89\x5d\x22\x13\x4b\xb6\x9c\xc8\xf8\xbf\xbf\x6c\xdc\xa5\x91\xa0\x94\x0e\x04\xce\x8a\x2c\x7f\xac\x1f\x52\x8a\x96\x69\x4f\xb0\xac\x17\xd5\x8a\xba\x80\x3d\x29\x4f\x64\xda\x4d\x81\xfc\xce\xf6\xce\x74\x28\x07\x1e\x20\xe1\x68\x21\x3e\x10\xea\x44\x56\x3e\x95\xfe\x55\xaa\xf1\x56\xde\x83\xcd\x76\x5b\xa4\xde\x20\x78\xd2\xab\xc6\x84\x57\x6c\x57\xc6\xb9\xdc\x5f\x5a\x00\xf9\x85\x1e\xce\xbf\x66\x36\xcd\x60\x9c\xfe\x41\x61\x9b\xa5\xa1\x46\xed\x30\x99\x40\x91\xed\xbb\xc9\xe6\xbe\xd1\x23\x2f\x9d\xd5\xb6\x45\xeb\xa3\x00\xb2\x8d\x4e\xcd\xcd\x1a\x4f\x12\x14\x33\xe9\x1b\x68\xaf\x0f\x7a\x9e\x39\x99\x62\x4e\xe9\xc7\x7f\x39\x72\xcf\x62\xa9\x94\xbf\x5c\xd0\x3b\xbe\x6f\x73\x38\x80\x44\xa1\x4b\x85\x3d\x30\x17\x2d\xab\x6c\x38\x39\x96\x64\x7b\xb8\x96\xad\xfd\xcf\x31\xf9\xc7\x25\xbb\x5f\x0e\xd1\x3e\xc9\xb2\xba\x6b\x26\x42\x0d\x00\x40\x8a\xd0\xa5\x62\x20\x6c\x43\xf3\xe4\x3b\x92\x19\x77\xf5\xce\x71\xba\x60\xb6\x47\xe7\x9a\xc5\xcc\xde\x46\xb3\xb0\xbe\x3d\x7c\x20\x69\xeb\xc7\xb4\x03\x40\xea\xd1\xe6\xdc\x72\xea\xf2\x3a\x64\x7d\xb0\xe4\x20\xdd\x6e\xb9\x27\xd3\x4f\xbe\x65\xf0\x1d\x2e\x8f\x7d\x3a\xba\x6a\x3e\xb6\x9a\xa9\xda\xbf\x57\x1f\x0f\x90\x44\xf4\x78\xb9\x94\x0b\xef\xef\x04\x53\x9b\x5e\xb8\xec\xd6\x61\x20\xaf\xb6\xd9\xa4\x9f\xce\x6d\x29\xb2\x3b\xd3\xb4\xb4\x7b\xac\xfc\x18\x59\x3f\x40\xea\xd1\x42\xed\x3e\xfe\xbd\x9b\x8a\x65\x76\x34\x5b\x8f\xd1\x26\xbb\xb4\xfd\xb0\xf6\x20\xcb\x81\xd9\x84\xbe\x7c\xaa\x26\xf7\x8c\xd5\x97\x85\xb2\x00\x69\x41\x3f\xfd\x40\x75\xcd\xa7\x97\xe4\x06\xbd\x99\xa7\x63\x73\xca\x44\x14\x45\xe8\xce\x3e\x64\x90\xdb\x1c\x3e\x14\x10\xa2\xd9\x49\x55\xf6\x50\xf4\x6f\x06\x42\xb7\xe6\x77\x6f\x8e\x45\xdf\x7b\x5f\x77\x79\xbe\xeb\x44\x0d\xff\x51\xbe\xef\xaf\xbe\x1b\xf6\xbf\x3f\x4a\xf5\x30\xb0\xcc\x2d\x21\x81\xee\x8b\x2e\x1e\x20\xbe\xe8\xe7\x9b\x16\xb4\x46\x85\x19\xa5\xb3\xde\x4f\x55\xce\x28\x9f\xf5\x48\x5f\x67\x6b\xa1\x23\x53\x4c\xaa\x47\xb4\x92\xc7\xa6\x9e\xd9\x72\x00\x64\x02\x6d\xfd\x2d\x59\xf9\xc2\x67\x75\xf9\xf1\x6f\x27\x22\x7f\xf6\xad\x7e\x62\xbe\xda\xf3\x31\x54\xe7\x97\x4c\xdc\x4a\xe8\xac\x32\xd0\xf9\xe0\x0a\x90\x05\xf4\x56\x05\xed\x6a\xba\x1d\x7c\xe0\x48\x5b\x62\xd4\xef\x0b\x21\xfb\xf2\x24\x49\x85\x9a\xea\xda\x3d\xae\x48\xfd\x94\x0e\x4c\x2d\xe6\x29\x90\x06\x00\xf1\x40\x37\xa0\x6b\x4c\x66\xcf\x18\x87\xbb\xbf\xdf\xb8\xc4\x20\xe6\x7d\xd7\x84\xeb\x23\x37\x62\x79\x56\x69\xda\xc4\xc7\x19\xa7\xb9\x41\x1e\xaf\x0d\x90\x8d\x7f\xda\xdb\xdf\xf2\x53\x77\x2f\x22\xcf\x23\x76\x05\xa4\x9d\x94\xbf\xed\xba\x15\xdb\xf0\xfa\x2d\xe8\x7c\x39\xbc\xbf\x85\xfb\xf2\x4c\x8d\x3d\x00\x48\x1c\x5a\xc4\xce\xa6\x44\x3b\x33\x4a\xb2\xad\x4d\xdf\x3d\xe9\xe9\x28\x4c\xf3\x8d\x75\xea\xfa\xc7\x1b\x64\x2f\x5c\xd3\x6e\xad\x5c\x93\x78\x68\x5d\x04\x90\x0a\xb4\x86\x19\x1c\x7f\xf5\x98\x3f\x12\xbf\x58\x5a\xd2\x25\xa1\x42\x7e\xcb\x03\x30\xbd\x3d\x74\xaa\x8f\x61\xc5\x4d\xee\xe0\x6d\x3b\xe9\x0a\x4a\x3c\x40\x86\xd1\xe6\x98\xe0\xb2\xa3\x39\x24\x73\xc3\x7a\x28\x9b\x8e\x39\xeb\x91\x15\x5b\x95\x45\xbf\xed\x53\xd9\xd2\x3d\xa2\x3a\xa5\xdb\x54\x26\xa6\x0c\x90\x35\xb4\x2f\x25\x16\xa7\x4b\x0c\xae\xac\xb3\x7a\x5b\x64\x36\x5c\x2f\x3f\x58\x42\xf6\x38\x61\x68\x84\xcd\xa4\xc9\xcb\x70\xdf\xd9\x9f\x32\xa5\x36\x00\x59\x43\x9f\x2a\xab\x3f\x57\xa2\x29\x8e\x33\xd0\x3c\x48\x8c\xed\x3e\x24\x5f\x77\xfd\x4a\x9a\x8b\xbf\xf6\x29\x65\xb3\x2c\xc1\xd5\xf7\x38\x6b\xce\x34\x00\x90\x8f\x68\xeb\xe5\x91\xc6\xbe\x86\x31\x6d\x2e\x2a\x6f\xbb\xde\x0c\x8d\x1b\xd2\x37\x2e\xe5\x47\x9e\x7e\x74\xb9\xe6\xec\x4c\x4d\xef\xe7\xd7\xb4\x43\x00\x59\x45\x3f\xfe\x04\x39\xc7\x39\xc9\xce\xab\xab\xa7\xfd\xa4\xb2\x4d\xca\x38\x18\xd7\xaa\x0e\x08\x33\xf1\x3c\x6f\x88\xf5\x57\xf8\x7c\x5c\xf1\xd2\x12\x00\x08\x0e\xdd\x6d\x87\x1e\x78\x3e\xcb\xc8\x33\xd1\x33\x7f\x6b\x8b\x21\xde\x83\xb6\xd6\xf5\x75\xfd\xaf\x23\x2f\x26\xaf\xec\xa4\xb0\x16\x4d\xb3\x76\x25\x02\x04\xa0\xe3\xcc\x93\x3a\xba\xe4\xf6\x16\x15\xf3\x0c\x5b\x57\xeb\xf1\x02\xcf\x13\x95\x9d\xbe\x26\xf5\x31\x3a\x16\x3f\x4b\x17\x46\xd4\x70\x2c\x7f\xf5\x5a\x02\xda\x39\x6f\x98\xf3\xa8\xd5\x15\xc4\xb7\x39\x2b\xcb\xcf\x7f\x9a\x29\xc5\x4d\x5c\xa6\x5d\x67\x6b\x73\xf7\x97\x8a\xed\x39\x7f\xf0\x18\xad\x04\xfa\x1d\x29\x5d\x03\xb1\x53\x6d\x1a\x1e\xfe\xdf\x26\x7b\x63\x9e\x8e\x71\x2b\x2b\xbf\x7f\x20\xe9\xf0\x35\x26\xdd\x84\xa9\x6d\x2d\xf8\xf7\x9d\xbf\xf9\x19\x1d\x94\x2a\x02\x37\x4f\x9d\x6d\x8c\x1b\xf8\x90\x32\x3d\xd5\x6f\x13\x14\x91\xd7\xea\x2f\x2e\xae\xf0\x49\xdd\x24\xd6\x7d\x3c\x2b\x87\x56\xee\x6f\xfe\x40\x1f\x29\x9b\xc0\xe4\xf9\xb4\x34\xda\xa7\x8d\x24\x2f\xa8\x3d\xd9\xca\x34\xa2\x53\x84\x8a\x6e\xcc\x4b\x9e\x8d\xbb\x51\x5c\x43\x1d\xe3\xd0\x07\x90\x1d\x74\x67\x75\x8d\x5e\xff\x94\x49\xde\xec\x5b\xfa\x1b\x3d\xb6\x7c\x7b\x55\x16\x52\x7f\xd8\x18\x34\x69\xfb\x87\xac\xe7\xfb\xf6\x92\xf4\xed\xcd\xc2\x03\x24\x01\x1d\x94\x95\x54\x95\x96\x6d\xb1\xc3\x0a\x29\xd5\xed\xda\x6a\x55\xd6\xd7\x24\x8f\x52\xee\x59\xfa\x41\x1f\xb8\xd5\x10\x93\x73\x24\xe3\x6d\x0d\x40\xbe\xa1\x1f\xff\xa4\x79\xd2\xae\x84\xe1\xa1\xff\x51\x6e\xae\x8e\xe5\x30\x97\x5b\xc5\x1b\x4b\xef\xbf\x81\xb0\x12\x2b\x8e\xde\x9f\xf9\xb7\x2c\x5d\x00\xf2\x07\xed\xf7\x40\x33\xd2\x26\x8e\x79\xef\x4f\x4f\x4f\x5d\x73\xac\xbd\xf5\xc5\xcc\xfd\xd8\xbe\xa7\x69\x37\xc3\xa9\x43\x22\x23\x35\x9f\x73\x24\xa7\x03\x80\x94\xfe\xf3\x45\x07\x65\x5b\x7a\xeb\x57\x57\xc7\x16\x71\x25\xa7\x59\xd7\x29\x8d\xf6\x9d\x57\x3c\x12\x97\x81\x17\x4a\xcd\x53\xb4\x8a\x17\x31\xfe\x02\x90\x2d\x74\xd4\xd8\x3f\x2c\xfd\xdc\x28\x26\x3d\x42\xfb\x59\xcc\x3b\x9c\x46\xa6\x53\x49\xcf\x6d\x60\x3d\x4b\xee\x55\x84\xaa\xc2\x97\xbd\x72\x69\xb7\x70\x40\x16\x9d\x8a\xe9\x49\xf7\x1f\xd0\x95\xb8\x8d\xbf\x7e\x8a\x32\xa8\x4d\x5e\xad\x4a\xf8\x17\xeb\x46\xfb\x79\x9a\xcc\x99\xc9\x34\xee\x9c\x10\x7c\x09\x00\xc8\x77\xb4\xf5\x02\xdd\x7b\xaf\x35\xfc\x68\x63\x67\x93\x6b\xd0\x9a\xfd\x56\x10\x55\x18\xff\xc4\xec\xb4\x27\x7b\xe8\x7e\xfd\x55\x91\xfb\x93\x4d\xda\x00\x99\x47\x5b\xf3\xa4\x81\x3d\xdd\x71\xeb\x87\xc4\x36\x57\x63\xcf\xae\x0d\xf7\xc3\xfb\x0b\x6c\x8c\x22\xba\xdf\x90\xb1\xfa\x4e\x1b\xa6\xdb\x68\x65\x01\x80\x34\xa2\xc7\x7f\xde\xee\x0f\x70\xe5\xbb\xe7\xe5\xf9\x5d\x71\xb1\xe9\xd9\x98\xff\x47\x7b\xee\x1b\xf4\x74\xf5\x59\xc6\xa2\xb6\x99\xb2\x23\x56\xd9\x00\x19\x44\x67\xa7\x77\x2e\x5f\xa2\x56\x4f\x70\xcd\x9a\xc4\xef\x16\xcd\x36\x6c\x12\x55\xbd\xfd\x2c\xc0\xf1\xd9\xe7\x60\x85\x31\xa9\x51\xef\x37\x7a\xb4\x00\x20\xad\x68\xeb\x85\xbf\x6b\x79\x33\xbe\xae\xcb\x7a\x6c\xfb\x52\xa8\xea\x8a\x7b\xd6\x6d\xb9\x0b\xd5\x53\x91\xf9\xba\xf4\xeb\x8e\x76\xf6\xf8\xe2\x93\x00\xe9\x46\xc7\x65\x7b\xac\x1e\xdf\xe4\x31\x1f\xd6\x14\xbf\xb2\x6f\x8c\x33\x27\xda\x8f\x6b\x7b\xe7\xd3\x64\xae\xb1\xde\xee\x2a\xdf\xc9\x0e\xbe\xd0\x00\x80\x2c\xfa\xd7\xb3\x44\xd7\x7b\x59\xc9\x9a\x04\xf6\x1f\x70\x15\xe8\x5f\x1a\x32\xa3\x5a\x9d\x2c\xce\xa6\x7e\x42\xdf\x7e\x85\x9b\x24\x5d\xfc\xfa\x2f\x66\x80\xc4\xa0\x37\xd6\x62\x9a\xd3\xec\xfc\xe7\x58\x4d\x7c\xcb\x12\x8f\x13\x3f\xd5\xb9\x34\x7f\x11\x5e\x10\xb0\x38\x23\xe2\xf7\x88\x8d\xef\xc5\xeb\x69\x00\x90\x4d\xb4\xf1\xfb\xf5\xf0\x1a\xef\x6e\x51\x27\x1e\x36\x1b\xb7\xb5\x8a\x2a\x37\xb4\xcf\x6b\x95\xbe\xd0\x18\x17\xc7\x69\x4d\x51\x6c\x41\xf5\x2e\x06\x20\x3b\xe8\x9d\x4d\xaa\x3e\xaf\x50\x38\x95\x9f\x7f\x69\xec\x69\xea\x51\x96\xbc\xab\x2a\x51\x4d\x6a\xe7\x12\x42\x7c\xc9\x7e\xb0\x95\x1d\xbe\x45\xc9\x83\x03\x48\x23\xda\x97\xec\x62\x8c\xc8\x04\x0f\x8f\xf8\x8e\xb0\xf1\x03\xa5\xd5\x78\xa3\xb7\x3a\xab\x11\x8c\x38\x19\x39\xdb\xac\x92\xa4\xea\xaa\xef\xfa\x38\x80\x84\xa3\x73\xab\xe4\xc4\x39\xd5\xe6\xac\x6a\x4b\x7d\xcb\x43\x82\x27\x01\x47\x1e\x92\xa0\x6e\xf0\x8a\x76\xbc\x4f\x70\xbe\xaf\x5b\xed\xf3\x55\x17\x00\x90\x77\xe8\xad\x6d\xd1\x68\xd7\x63\x78\x32\x57\xae\xbb\xf6\xfb\x03\x89\x0d\x97\x8f\xd6\xe4\x75\x1a\xcb\x3f\xe1\xcd\x47\xa8\x1d\xd2\x91\x52\x25\x04\x20\xb9\xe8\x43\xc8\x1c\x1a\xbc\xab\x28\xd2\x87\x5f\xf4\x7a\xed\xe9\x95\xa7\xb3\x57\x18\x3d\x0e\x50\x7e\x11\x39\x8f\x34\x47\x8a\xa8\x52\xef\x6e\x7f\x01\x80\x2c\x3a\x3b\x2d\x4d\x67\x15\xcc\xd3\x4f\xa6\xac\x9d\x4c\xb8\x78\xeb\x77\x7c\x28\xff\xb9\x57\x22\x39\x54\xcb\x5b\xe2\x35\x78\x9a\xa2\xe0\xb3\x8f\x01\xd2\x85\xce\x20\x0c\x86\xc8\xfd\x93\xc7\x5a\xaa\xef\xa7\xa8\xa5\xcf\x79\xbf\x96\x6f\x32\x52\x98\x89\x8f\x1b\x28\xc4\x39\x17\xd5\x79\x4d\xae\xf8\x02\x20\x8b\x4e\x68\xb2\xc5\x37\xf0\x17\x6b\x10\x01\x6d\xde\x7e\xca\xac\x4f\xa7\x45\xc7\xb7\x1e\xb3\x7e\x70\x79\x72\xb7\xe5\xf6\x16\xb9\xc4\xfb\xf3\xa9\x00\x69\x41\xbb\x52\xf9\x22\xc3\x8f\xf5\x5b\x33\x8d\x34\x0d\x17\xb9\x8f\xb1\x37\x1e\x56\xf4\xe9\xd1\xba\xd6\x3c\x72\xe6\xe8\xe5\x1b\x4d\x64\xfd\xbc\xfd\xa8\xa1\x13\xbf\x77\x96\xae\xbf\xa7\x24\xbd\xb9\x4b\x5b\x67\xf2\x55\xf6\x5c\xb8\x7e\xe6\x1f\xd2\xa1\xb1\x53\xa1\x83\xbf\xad\x0b\x62\x5f\x1c\x11\xfe\x8f\x7a\x4f\x9e\xee\x7f\xe2\x32\x1c\x0a\x52\x4c\xd1\x07\x99\x5f\x90\xc1\x52\x7e\x44\x66\x1b\x76\x8d\x98\xea\x0f\x32\x51\x50\x60\x63\x2a\x40\xc8\x14\xc1\x6e\x1b\x4b\x06\x12\x99\x7a\x68\x1b\xa6\x14\x84\x4c\x22\x64\x30\xf5\x20\x71\x1e\x62\x47\x8b\x21\x0a\x89\x4c\x0b\x9c\x07\x4b\x18\x12\x99\x4d\xd8\x05\x63\x8a\x43\xc8\xf8\xc2\x79\x30\x15\x22\x64\x26\x88\xaf\xda\x60\xc9\x44\xc8\x2c\xc0\x3d\xc5\x94\x8a\x90\xf1\x80\x0d\x1d\xa6\x5e\x84\xcc\x06\x6c\x1c\x31\x35\x23\x64\xe2\x60\xbf\x8d\x25\x1c\x89\x4c\x05\xbc\x41\xc1\x14\x8f\x90\x19\x86\xb6\x61\x2a\x48\xc8\xac\x41\x5f\x63\xca\x48\x22\x03\xcf\x29\xa6\x94\x84\xcc\x47\xe2\xab\x5d\x58\x7a\x12\x32\xab\x70\x1e\x4c\x4d\x09\x19\x1c\x6c\xb8\xb1\x84\x25\x91\x01\x30\x46\xb1\xc4\x25\x91\x49\x20\xde\x83\x62\xc9\x4c\x20\x4f\xef\xfc\xff\x38\x7b\xf3\x78\xac\xbe\xf5\x7d\xdc\x50\x08\x95\xa1\x22\x49\xa8\x54\x24\x63\x86\x44\xec\x54\x92\x59\x52\x48\x25\x92\x84\x14\xd2\x60\x78\xd6\x23\x32\xa4\x24\x43\xa8\x0c\x99\x32\x65\x2a\x11\x69\x30\x86\xcc\xb3\x4c\x99\x29\x54\x08\xf1\x7b\x39\xe7\xb4\xf6\xea\xf3\xcf\xea\xf7\x3d\x7f\x75\xde\xaf\x75\xad\xe1\x5e\xf7\xba\xaf\xeb\x5a\xf6\xb3\x37\xdd\x7f\x2e\x42\x03\x50\x56\x3f\x19\x52\x04\xc6\x3d\x9a\xab\x22\x55\x6d\xfa\xef\x7c\xe5\x3b\xeb\xc1\x1b\xa3\x16\x3e\xb6\x6a\x56\xe8\x98\xd7\x40\xdf\x69\x69\xb5\xa5\x62\x80\xb6\xdf\x23\x13\x7e\x49\x90\xb6\x79\x43\xfc\x6b\xd6\x35\x93\x7b\x85\xdb\xdf\xd0\x4b\xb6\xa4\x4c\x84\xf8\xcc\xd0\xa6\x9e\xaa\xf5\x7f\x94\xb9\xd4\x3f\xca\x5c\x12\x9b\x53\xcc\x2c\xcb\x89\x2b\xbd\x9f\xab\xbf\x45\xee\x9c\x54\x1b\x78\xb9\xdb\xcd\x71\x75\xda\x64\x73\x81\xb3\xa1\x61\x6b\xdc\x73\x0a\x50\x71\x40\x25\xd2\x6c\x99\xe2\x01\x97\x8d\x3b\x59\xd7\x5d\x56\x9f\x9e\x75\x53\xbe\x33\x2f\xda\xd7\xc5\x71\x96\xf5\x3c\x17\xbb\xb2\x6c\xcf\x85\xad\x52\xff\x36\x6b\x32\x42\x01\xf0\x44\xe2\x66\x8e\x54\x3f\x88\xc1\xcd\x1e\x19\x07\xde\xc9\xe3\x96\x00\x31\x2a\x0e\x7f\x86\xc1\x4a\x7e\x38\x4c\x10\xf9\x67\x09\x9c\xec\x27\x49\x03\x16\x4c\x9c\xf6\x27\x31\x8b\xf0\x22\x1f\xab\xff\xc9\x64\x84\x05\x06\x6b\x02\x20\xa6\x01\x8e\x83\x75\x02\x10\x33\x0a\x0f\x0a\xd6\x0d\x40\x4c\x3e\x1c\x07\x67\x09\x48\xcc\x6f\xf8\x8e\x14\xac\x2f\x80\x5b\x0a\xf9\x19\x6b\x0d\xe0\x30\x6d\x70\x39\x58\x7f\x00\x31\x93\xb0\x26\x61\x3d\x02\xc4\x54\x40\x0c\xd6\x28\x40\x4c\x17\xe4\x26\xac\x59\x80\x98\x6a\xb8\x1e\xac\x63\x80\x98\x66\xf8\x9d\x16\xac\x6d\x80\xa1\x3e\x0a\x9f\x71\xc7\x59\x07\x38\x4c\x24\xcc\x02\xac\x7d\x20\xe5\x06\x5c\x0e\xce\x43\x20\xa7\x07\xa6\x01\xce\x47\x20\xdb\x03\x43\x8d\xf5\x12\xa4\xbc\x85\x54\x8b\xf5\x13\x10\x13\x05\xd3\x00\x6b\x2a\x20\x26\x0b\x16\x37\xac\xb3\x80\xdb\x03\x19\x1d\xeb\x2e\xe0\x30\x4d\xf0\x15\x09\x58\x8b\x01\x87\xd9\x03\x1f\xec\xc5\xd8\x0c\x44\x74\x32\xc1\xb7\x68\xe0\x0c\x07\x50\xe5\xa6\xa1\x29\x5c\x22\xcd\x26\xd4\x5f\x7d\xde\x1e\xa3\xb8\x83\xd6\xfa\xda\xf5\x68\x9a\x78\xd3\xcd\x46\x26\xdc\xec\x5e\x33\x4e\xde\x94\x8d\x76\x9f\x0e\xcb\x04\x86\x76\x6e\xa6\x00\x15\x94\x33\xe9\x57\x79\x7c\xdd\x93\xf0\x7c\x65\x6e\x84\xef\xf1\x8a\xbb\xbf\x44\x87\x63\xad\xf7\x8a\x1d\xfa\x10\xf3\xbd\xe8\x5d\x4c\x36\x7b\xa4\x20\x05\xa8\xc8\xa0\x3f\xec\x92\x95\x8b\xa4\xfb\x0d\xea\x9e\x3f\xb1\x73\x0b\xab\xca\x1f\xa1\xd3\xbb\x31\x3a\x63\x6c\x31\x31\xee\x5b\x76\x21\xd4\xe9\x6a\x08\x05\x10\xd9\xe8\x4d\x9a\x72\xbd\xb5\xd9\x6a\xbf\x1c\x5e\x9d\x0d\x4a\x2a\x6d\x3c\x2d\xa5\xe7\x0b\xef\x58\x47\xb2\xdc\xdf\x91\x5f\xf4\xa5\xb9\x52\xc4\x9b\x5d\xea\xdf\x26\x8d\xec\x03\x7c\x70\x01\x37\x73\x72\x1f\xe0\x01\xc6\xcd\x9e\x84\xc8\xfc\xd9\x3a\xdc\x02\xc8\x99\x65\x93\xcf\xa1\x96\x5e\xeb\x96\x7c\x17\xf8\xbe\xcc\x79\xb2\xc6\xf2\x24\x63\xd2\xbb\x55\x3e\x63\xdc\x46\x8f\xa2\x23\x5f\xc8\x74\xda\xd4\x6e\x9c\xe9\x06\xaa\x8b\x0a\x5f\x5f\x87\x72\x2f\x39\x3a\x74\xef\xcc\x45\x24\xcb\x3d\x1c\x7c\xc3\xa3\xfd\x3e\x77\x6a\x5c\x4b\x98\x31\xdc\x1c\xa7\xac\xec\xdd\xd4\x17\xf2\xb2\x8e\xaa\xd1\xfd\xea\x38\x00\xc4\x73\xf4\xe6\x60\x95\x17\x47\x4a\xe0\x33\x46\x0d\xa7\xb4\xdd\xfb\x6c\x4a\x86\xbc\x5f\x08\x30\xe7\xf6\xed\x64\xb3\xef\xda\x02\x1c\x26\x1d\x6b\xb6\x03\xa2\x18\x35\xf6\xcf\x25\xbc\x07\x4c\x7c\xbd\x24\x4d\xd9\xd2\xf4\x66\x9b\xc3\x4e\x06\xd1\x2b\x0b\xd5\xb5\xe9\x26\x30\x32\x74\x96\x68\x4b\xb9\x5d\x5a\x12\x87\x68\x6e\xf8\x38\xa4\xee\x33\x32\x7b\x71\x68\xfb\x46\xb9\xf6\x65\xf3\x83\x2f\x94\x06\x0c\x32\x3b\x8f\x13\x4f\x05\x0c\x5f\x8d\x2d\x9c\x66\x88\xa1\x02\xa2\x0a\x9d\x7e\xc5\xe9\x2b\x37\xb8\xab\xa4\x5a\x5b\x28\x8e\xaa\xf1\x8b\xc9\xaf\xa2\xf2\xee\xdd\xb5\x89\x28\xbe\x39\xb1\xc1\x43\xc0\x8c\x21\x4d\x1e\x10\xf5\x68\xf7\x6d\x6c\x9d\xd5\x79\x13\x99\x9b\xb5\xab\xbf\xb9\xd8\x4e\x05\x44\xb8\xb1\x19\x7d\xbc\xb8\x6c\x9e\xe7\xaa\x61\xc0\xe2\x93\x13\x2b\x19\x01\xd1\x80\xde\x9a\x7a\x59\x6e\x8e\x4d\x6a\xa5\x9a\x1c\x69\x72\x5f\x71\xcf\x73\xfc\x23\x47\xaf\x74\xd3\xea\x97\x8a\x4c\x26\x9d\x1e\xb3\x67\xab\x58\xfd\x28\x80\x98\x45\xdb\xaf\x8a\x70\x75\xff\x79\xe3\xf2\x88\xc4\x9d\xdb\x59\xd3\x29\x03\x62\xd6\x89\x5d\x07\x25\x3f\x04\xce\x6d\xfe\xc0\x53\x5c\x97\x28\xbf\x1b\x00\x62\x0a\x8d\x4e\x7b\x8a\x5a\xeb\xda\xa4\x00\x59\xf1\x68\x5e\xc7\x1c\xd1\x85\x67\xc1\xc3\x72\xf9\xe9\xb6\x81\x27\x7b\x5f\x4d\x57\x9c\xa8\x7c\x30\x07\x88\x39\xb4\x7b\xd6\x36\x95\x6e\xad\x73\xdb\xa2\x8b\x0a\x0e\xca\xb6\xd8\xf1\x4c\xa8\xec\x34\x36\x51\x2d\x1d\xb8\xad\xb0\x23\x41\x69\xd2\x63\xeb\x04\xd2\xf4\x5e\xc1\x07\x9d\xa4\xa2\xad\x9c\x12\xf7\x17\xf9\x28\x27\x26\x44\x93\x19\x32\x1c\x4f\xb0\xc6\x8f\x06\x0f\x7b\x6d\x6c\x5c\x14\x7a\x43\x01\x44\x31\x7a\x68\x0c\xf3\x6f\x8e\xfe\x3e\xa3\xa1\x59\xf6\xed\x10\x65\x2e\x6c\xa5\xd5\xdd\x23\x63\x77\xfa\x47\xd6\xbd\x9b\xbb\x20\xf7\xf9\xe2\xe9\xee\x6e\x00\x88\x28\x54\xc7\xf2\x6e\xd0\x3c\x32\x69\x59\x7b\xa9\xf4\x87\xf1\x68\x87\xf8\x32\x9f\x37\xec\xd5\x29\xbb\xbc\x15\x6e\x70\x7e\x59\x30\xeb\x35\xe9\xaf\x05\x44\x01\xda\x3d\xe3\xe0\x88\xa3\x5e\x6f\x8f\x5a\xf0\xf1\xe1\xd1\x85\x80\x46\x8d\xb8\x57\xb7\x56\x39\x1b\xb5\xdf\x61\xef\x12\x66\xef\x94\x8a\x79\x45\x01\xc4\x4b\x34\xcb\x86\x84\x6e\xac\x4f\x76\x61\xca\xc8\xdc\x4b\x97\xac\xbb\x87\x3e\xfb\xe3\x05\x0d\xe3\x00\xfa\x73\x4e\xcf\x3e\x44\x4c\xd2\x58\x3c\xdc\x45\x05\x44\x30\x7a\xdf\xe4\x75\x97\x3a\x79\x28\xbb\xbb\x35\xa4\xe1\x49\xaf\x90\x5d\xb1\x01\xdb\xda\xf8\xcb\x39\xc2\xf7\x9e\x9b\xf4\xaf\x60\x6b\xf0\xb9\xf1\x1e\x10\xb1\x7f\x35\x6f\x8c\x33\x7c\x31\xff\xf6\xc5\x29\x75\x9a\xe9\x65\x36\xd6\x57\x86\xc2\xdc\x73\x33\x0c\x68\xa9\xbd\x05\xdf\xfd\x9e\xac\x92\x0b\x01\xc4\x3b\x34\xc9\xe8\xac\xbf\xfd\x3e\x76\x39\x6b\x58\xfd\x84\x46\xf2\x95\xe7\x59\x71\xd9\xda\xf2\x1f\xc4\x36\xa5\x3f\xf1\x72\x76\xe2\x35\xbe\x24\xa8\x47\x01\x44\x3a\x9a\x65\xbf\x5d\xf3\x59\xb9\xb9\x1e\x48\x3e\xba\x3a\xdd\xf2\x44\x49\xf1\xa2\xe8\xae\xed\xb5\xe2\xdb\x12\xea\x12\x39\x03\x95\x0d\xfa\x2e\x7c\xa3\x00\x22\x07\x8d\x4e\x06\xd7\xd6\x83\xe3\xd6\xae\x2b\xcc\xa7\x66\x78\x05\xb6\x0b\x25\x09\x6f\x11\xa5\x8a\xaa\xaf\x93\xf4\x90\x8f\x39\x69\x6e\xbf\x6b\x15\x05\x10\xcf\xd0\x2b\xa4\x2f\x23\x7b\xb3\xdb\x98\x87\xc5\x79\xf4\x52\x27\xa3\x54\x16\x63\x17\xd7\x52\x5e\xd1\x7d\xc8\xb7\x8a\xdb\xb0\xa5\xbb\x85\x7a\x78\x2f\x00\x84\x37\x9a\x37\x11\xc6\x2a\x71\xfa\xc3\xb5\x6f\xc3\x72\xb7\x7e\xa2\x65\xbf\xbc\x65\x2e\x75\x47\xa5\x8e\x73\x35\x9f\xe0\x13\x01\xfd\xf3\xd9\x85\x2c\x80\xe8\x47\xef\x1e\x2f\xb4\x3d\xac\xda\x56\x35\xa4\x6b\xe9\x7a\xee\xf9\x78\xaa\xb5\xaf\xf5\xf7\x28\xbb\xb3\xc3\x43\x6b\xc5\x07\x35\xd5\x2a\x9d\xae\xfd\xe7\x45\x6e\x68\x7b\x53\x77\x33\xf1\xf0\x58\xa7\x47\xe3\x1b\x63\x6a\xfd\x67\x37\x19\x5e\x2b\xfb\xad\xac\x44\x1b\x7e\x9e\xb9\x2d\x3e\x2b\xbf\xf5\x11\x33\x00\x84\x3b\x7a\x57\x79\xf2\x97\x7d\xc5\xf1\xfc\x1f\x3c\x6f\x2a\xf4\x3e\x7c\x4e\x0b\x8e\xd4\x2e\x12\x8c\x34\x94\x32\xcc\x6a\xc8\xa3\xdf\x6d\x72\xf7\x58\x1c\x20\xba\xd1\xd5\x5e\xa1\x33\xce\xe4\x79\xd6\xc5\x68\xab\x48\xb7\x26\x33\xb6\xc7\x7a\xc6\x96\x93\xa5\x7d\xf7\x8b\xaf\xae\x36\xdf\x95\xec\x5d\xf7\xbd\x07\x80\x68\xff\xeb\xa3\x2c\x1d\xbb\xa7\x02\xe8\xd8\xa8\xf7\x7d\x65\x27\x35\xba\xee\x7b\x34\xa9\x2a\x7c\xce\x5a\x75\x3d\x6e\x64\xb0\xfd\x42\xe8\xd7\xcd\x3b\x00\xd1\xff\xd7\x35\xb1\xc1\x5c\x62\xe1\xc1\x9e\x8f\x3b\xcd\x8a\xfb\xe4\xa5\xce\x5f\xff\x72\xe0\x89\xc6\x25\xa3\xaf\x7c\x21\xaf\x7f\x54\xdd\xf3\x79\xbd\x1f\x00\xa2\xe0\xaf\xaf\x05\xc9\x57\x9c\x6d\x68\x0f\x96\x16\x79\xfa\x6e\xc0\xe6\xe5\x9e\x60\x56\x6a\xdd\x8f\x95\x6b\x56\x46\x97\xea\xbf\xbd\x30\x6d\x20\xc3\x03\x88\x2f\x68\xf3\x11\xce\xa0\x27\x3a\xd3\xc2\x26\xca\x72\x0f\x95\x9c\x52\xb4\xea\xf5\x4f\x59\xb1\xff\x14\xa8\x54\xbd\x5d\x5f\xb1\x7c\x5b\xab\x77\x38\xd2\xd4\x8c\x8b\xe3\x77\xbf\xe0\xf7\x44\x3b\xd1\x1e\xfd\x9a\x57\x16\xc9\x52\xf2\x9d\xd6\xd5\x1b\x2a\xb6\xc8\x3d\x6d\xdf\x7b\xff\xd3\x3a\xf4\x8a\x32\x27\x78\x45\x9c\xa6\x74\x82\x6b\xe1\x59\xe5\x63\xdc\x96\x87\x1e\x94\x17\x99\xc9\x9c\x14\x2e\x72\x2b\xa0\x5b\xb9\xaf\xbf\x8a\xad\x8f\x0a\x54\xd0\xd3\x1a\x7c\xe6\xf8\x60\xc1\xcc\xc5\xdb\x56\x21\x99\x07\x06\x4d\x97\xe9\x69\xae\xf3\x2b\x0b\x8a\xdb\xe6\xb8\x3f\x0c\xa4\xeb\xdc\x56\x7f\x0c\x88\x28\x34\x7f\xd5\xa6\x04\xe5\xb5\xf7\x9c\xfc\xed\x2c\xd0\x18\xa0\x34\x5f\xb2\x76\xfd\x89\xc3\x51\x52\x36\x9c\x87\xf2\x38\x53\x87\xd7\x1a\xfe\x9c\x02\x44\x3e\xba\xc4\xad\x8a\x0e\xbd\x8d\x6a\x8c\x3c\x55\x5e\x5d\x41\x43\xde\xe1\x3e\x9b\x6a\x54\xfa\x79\x6b\x6e\x5d\x9f\x1e\x4b\xaf\xe3\x78\x1c\x14\x49\x05\x44\x3e\x9a\xee\x99\x8b\xd9\x17\x2e\x04\x68\x98\xa8\x07\xaa\x1b\x70\x35\xd9\x69\x9e\x64\x1e\x5a\x14\xee\x29\xf3\x2e\x77\xeb\xbc\x67\x1b\xfc\xc6\x04\x10\x95\xe8\xe9\x2b\xf2\xd8\xa5\xf3\x7d\xec\xea\x2c\x98\x9a\x59\x48\xd9\xaf\x44\xab\x2f\x11\x1c\xd5\x5a\x3b\x53\x1e\xc3\x97\xca\x7c\xae\x21\xbd\x0a\x10\x1d\x68\xef\x03\x1a\x4f\x0e\xfc\xcc\x5f\xf1\x29\xe7\xb1\xe1\x7b\x23\x7e\xe7\x3e\x31\xdd\x34\xcd\xa9\xa4\x8e\x75\xe2\x49\x75\x74\x4a\x09\x76\x9f\x28\x80\xb8\x8d\x1e\x8e\xa7\x12\xef\x0a\x1f\x51\x03\x18\x34\x87\x79\x7c\xae\xea\x75\xaf\xef\x31\xb3\xfa\x3e\x2c\x7c\x6b\x0d\xf7\x25\xed\x48\xb7\x1f\xdb\xd6\x4b\xfd\x23\x4f\xaa\xf2\xff\xb9\x30\x85\x52\x0f\xcb\x95\x10\xf3\x1c\x2a\x64\x1c\x61\x92\x98\x62\xa8\x5c\x71\xa4\x49\x62\x28\xd0\x2f\x63\x89\x13\x62\xaa\xe0\x7a\xb0\xec\x09\x31\xf5\x70\x1c\x1c\x85\x92\x98\x06\x78\x49\x84\xa5\x51\x88\x99\x85\x18\x2c\x95\x42\xcc\x14\x8c\x1b\x8e\x4f\x49\xcc\x1c\xf9\xcd\x16\x1c\xb3\x02\x55\xc1\xdb\x34\xff\xb9\x58\x7a\x80\xa6\x65\x0e\xa3\x8f\x1f\x8d\xae\x33\xf7\xca\xae\x20\xbe\xf9\xaf\xf6\x60\x7b\x94\xc0\xbb\x12\xb6\xcd\xb4\x4e\x27\x4d\x37\x9e\xe5\x39\x73\x9e\x02\x88\x3a\xb4\x48\xbe\xf1\x1a\x0e\x3e\x52\x3f\xb2\x51\x3f\xba\x94\x85\x2d\xff\xd0\x60\xc4\xcf\xfe\x2d\x8d\xbf\x0e\xcb\xfd\xb2\x7a\xe8\x19\x56\xd9\xce\x49\x01\x44\xfc\x5f\x1f\x25\xab\x6d\xc8\xde\x9e\xc9\x6e\xdb\xdd\x70\xce\x90\x51\xa0\xa2\x9a\xa9\xf0\x7a\x4d\x73\x69\x58\x39\xa7\x43\xf6\xf5\x4b\x6f\x77\xc4\x53\x00\xe1\x89\x52\x20\xdb\xab\xda\x15\x83\xb5\x1e\xab\x73\x0a\x0b\x22\xea\x5f\xb3\x8f\x85\x79\x80\x4d\xb5\xea\x26\x1c\xf4\x63\x23\x62\x63\x61\x3a\xa5\x52\xff\x36\x6d\x32\x44\x0f\xe0\x5d\x22\x6e\xea\x24\xa6\x0e\x9a\x49\xdc\xf4\x49\x4c\x3c\xf9\x12\x43\xcc\x12\x48\x8c\x27\x34\x86\x58\x9d\x43\x1e\x2f\xb8\x1e\xac\xd6\x81\x98\x28\xf2\xf5\xbb\x18\xc1\x43\x62\x0a\xe0\x38\x38\xd1\x43\x62\x5e\xc2\x72\x81\x15\x3e\x10\x13\x0c\x63\x80\x55\x3f\x10\x13\x0b\x31\x38\x09\x44\x62\xde\xc1\x72\x81\x93\x41\x24\x26\x1d\x96\x0b\x9c\x14\x22\x31\x39\x30\x6e\x58\x39\x04\x31\xcf\xe0\xa5\x02\x56\x12\x41\x8c\x37\xcc\x37\x9c\x2e\x22\x31\xfd\xf0\x62\x05\xab\x8d\x20\xc6\x1f\x62\xb0\xfa\x08\x62\xdc\xe1\xf9\xc1\x8a\x24\x88\xe9\x86\x31\xc0\x0a\x25\x88\x69\x27\x7f\x9e\x8e\x53\x4b\x64\x0c\x20\x06\xab\x98\xc8\xb3\x00\x4b\x33\x4e\x36\x91\x98\x2f\x0c\xf0\xce\x1f\x27\xa0\xc0\x7e\xb6\xa7\xff\xa9\xcc\xc5\xa8\x00\xdc\x3c\xc3\xbf\xf7\x7d\xed\xa7\x86\xd3\x77\xdb\x4c\x75\x7f\xea\x06\x0f\xb8\xba\xcc\xb0\x36\xf3\xdd\xdd\x13\xa5\x5b\x73\xb8\x93\xc7\x74\xe9\xbc\xa1\x72\xf7\x9a\x77\xdb\xa9\xd4\x15\xe5\xd4\xdf\xb5\x6b\x1d\x95\x2c\x58\x0c\xac\x1b\x8d\x5c\x5f\x46\x14\x84\xef\xd3\x30\x63\xa5\xa9\xd5\x12\xa2\x00\xe2\x23\x5a\x69\xeb\x98\x24\x75\x1c\xab\xf6\xfe\xd8\xb7\xec\xf4\x13\x7e\xba\xf7\x2b\x7a\x74\x8f\xcc\x8a\x04\xc8\x4e\x98\xcd\xae\x12\x61\x14\x6d\x50\xa2\x00\xa2\x1c\xed\x7f\xff\x06\x6b\xa1\x1b\xe6\xca\xb5\x72\x42\xcb\x14\xce\x44\xaf\xbb\x93\xda\x32\xdf\x67\x7f\x53\xb7\xb9\xef\xa8\x22\xab\xac\x52\xd4\x7e\xa9\x7f\x9b\x36\x52\xc9\xe0\x4e\xe0\xa6\x8e\x54\x18\x98\x8d\xb8\xe9\x93\x98\x8f\xb0\x5a\xe0\x96\x40\x62\xca\x99\xa7\x86\x69\xff\x4d\xd3\x82\xfd\xca\xaa\x34\xd4\x25\x23\x8a\xf2\xea\x95\x87\xed\x6f\x12\x17\xf4\x4c\xca\xeb\xf9\x0d\xdb\xa2\x9b\x68\x6c\xf4\x36\xd2\x97\x84\xb2\x59\xee\x3d\xdd\x60\x64\xaa\x9a\xf9\x14\x10\xcf\xd0\xcd\xe0\xc8\x38\x1b\x58\x6f\xf6\x69\x7b\x93\xb5\xcf\xcd\xad\x1c\x7d\xf4\x8e\xab\x3b\xcc\x94\x6f\x46\x7d\xb5\xc9\xbb\x39\x9a\x19\xf8\x8a\x81\x02\x88\x18\x54\x0a\x2f\xd3\xa8\xa9\x15\xeb\x16\x29\x99\x51\xb2\x9d\x98\x7f\x61\x26\x00\x5c\x4b\xc6\x42\x36\x6a\x4b\x8c\xf6\x7c\xd0\x52\xc9\x92\x16\xa3\x00\x95\xdd\x48\x73\xa6\x0a\xd3\xaa\xb9\xf9\x4b\x3a\xeb\x38\x36\x9f\x7a\x57\x52\xa5\xd0\x7d\xc1\x9d\xca\x55\x68\x64\xa0\x2b\xd8\xd6\xad\xa8\x6d\xdc\x29\xf5\x8f\x93\x26\x19\x05\x56\x39\xdc\xcc\x91\x2a\x07\xf7\x01\x37\x7b\x12\x13\x03\x2f\xac\x70\x4b\x80\x18\x95\xdd\x7f\x20\x58\x7b\x01\x21\x90\x1f\xb1\x16\x83\x8c\x00\xe4\x06\x9c\xcf\x20\x31\xf9\xb0\x8e\x60\xbd\x06\x89\x21\xdf\x79\x83\x33\x1c\x10\x53\x09\xb9\x0e\xe7\x3a\x48\x4c\x07\x1c\x07\xe7\x3c\x48\xcc\x6d\xba\xa9\xe2\xff\xbd\xd9\x50\xc7\x70\x5d\xd1\x13\x33\xd6\xc1\x8b\xc6\xbf\xd3\x36\x3d\x2b\xc9\x12\xa1\xf5\x56\x61\xf8\xe8\xf3\xdb\xe2\xcb\xb6\xdd\x5b\x66\xba\x7a\x80\x6a\xc9\xa2\xc9\xdc\x7f\x7e\x6f\x5e\x8c\x26\xf2\x6b\xab\x9c\xe7\xea\x0e\xb7\xba\x5e\xd0\x3c\xf3\xbd\x97\x71\x32\xd4\xfb\xf6\xc2\xce\x5e\x21\xc3\x13\xca\x5c\x3d\xc6\x22\x2b\xf6\x1f\x06\xc4\x20\x2a\x3f\xbf\xa5\x38\xd5\x9f\x5a\xae\xb3\x5a\xca\xe9\x1e\x0b\x53\xf9\x8a\x52\x5d\xb6\x6b\x63\xfa\xcd\x13\x0e\xe3\x32\x7b\xb7\x19\xa4\xec\x16\x07\x80\x78\x82\x1a\xd2\xea\x95\xa2\x03\x79\x62\xbe\xf4\xd6\x56\xe6\x53\x22\x59\x27\xf5\xc0\xf6\x6c\xd5\x4e\xa5\x84\xdd\x34\x6c\x5f\x45\xfb\xd6\x3c\xdb\x07\x88\x05\xb4\xc6\xfd\xa6\x1e\xe8\x5a\xe5\xb1\x3e\x65\x5c\xea\x3e\x77\xfb\xc9\x63\x66\xf5\xf5\x6e\xca\xc3\x6d\xea\x74\x07\xec\xba\x25\x2b\x2c\x55\x92\x01\x20\xfc\xd0\xfb\xa0\x94\x5e\x65\x8e\x39\xb6\xd2\xb4\xfc\x3e\x8f\x84\xeb\xe7\xbb\xd6\x51\x59\xa5\x8d\xf9\x68\x14\xbd\x29\xc1\x45\x94\x73\xcb\x18\xb9\x01\x51\x87\x96\xf4\x2a\x7d\x2b\xb5\x50\xeb\x96\xfa\xd4\x50\xeb\x1f\x2d\xb7\x42\xcb\x36\x9d\xa5\xb3\x9f\xa7\x77\x6e\x29\x69\xde\xc1\x22\xff\xeb\x8a\x0e\x05\x10\xef\xd1\xe9\xb8\xb6\x7f\xfe\x76\x9e\x36\xc9\x79\x4d\xb8\xd3\x86\x00\x82\xcf\x89\xfd\x74\x5a\x64\xcf\x8e\x30\x53\x97\x42\x29\x95\x65\x5b\xd9\xf5\x28\x80\xc8\x45\x2d\xe9\x0e\xad\xba\xca\x49\x8d\xa6\x11\xd5\x5d\x87\x9b\xcf\x5a\x18\xa9\xf5\x98\xfb\xa5\x3c\xa2\xcf\x54\xbc\xbe\x56\xa4\xf1\xae\xaa\xe8\x25\x0a\x20\x7a\x51\x71\xbe\xa3\xbc\x38\xd0\x62\x54\x86\xa3\xa6\x39\xe8\xde\xb4\x9d\xad\x7e\x7e\xa2\x69\x80\xcd\x9a\x33\xd1\x09\x3f\x19\x9c\xb8\x58\x83\xf2\x97\x28\x16\x8d\x7e\x60\x05\xad\xe5\x80\x4e\xe9\xbd\xe5\xb2\x7e\x62\x36\x59\x2b\x3f\x7f\xee\xe1\x9e\xd5\xc9\x64\x0a\x67\xf7\xeb\x53\x38\xbc\xa5\xdc\x94\x02\x54\x38\x90\xe6\x3c\x42\x6c\xb9\xfa\xdc\x5b\x67\xb9\x96\xd5\xf6\xbf\x8a\x9a\x7f\x1b\x10\xe4\xb9\xab\xeb\xce\x03\xfe\x91\x3c\x81\xb0\x23\xdf\x87\x65\x29\x80\x88\x44\xc3\x63\xee\xa1\xdd\x2e\x60\xe5\xe4\x5b\x3b\x71\x6e\xc3\xcd\x4f\xce\x3b\x04\xf7\x05\xf2\xb4\x97\x72\xb9\xad\x51\x59\x1d\xdd\x3e\xe2\x20\x4c\x01\xc4\x1b\xb4\x68\x4e\xe7\xa7\xb0\xb0\xc9\xb0\x3e\x8d\x4e\x0a\xcf\x73\x38\xc4\xbe\x2c\xa7\x38\xc8\xde\xae\xed\x90\xfd\xd1\x13\x32\xab\x4e\xfa\xd8\xbc\x05\x80\x88\x45\xc3\xd3\x21\xd5\x7b\x28\x4a\x82\xae\x97\x9e\xde\x72\x3b\x93\xd0\xa5\x0b\x46\x01\xfa\x1b\x13\x22\x34\xed\xaf\x48\x29\x08\xf4\xae\xd0\xf0\x05\x44\x19\xba\xb9\xed\xb7\xfa\x1d\x6c\xda\xd7\x08\xdf\xb1\xab\xe1\xe0\x92\x92\x3e\x31\x20\x5e\xe0\x6e\xf1\x2b\xea\x6e\xca\xe9\x10\x3e\x4e\x9b\x4e\xf9\x25\x11\xf6\xd7\xc7\x8b\xae\xe5\x71\xf7\x7f\x30\xad\xb4\x0e\x7b\x9f\xc5\xae\x79\xf0\x00\x73\x93\x20\x9f\xb3\x6e\x4d\x76\xa9\x89\xae\x7b\xea\x98\x8a\x37\x15\x10\xc1\xe8\xee\xce\xd4\xbc\x58\xbc\x2d\xe5\xb2\x59\xb9\xd1\x72\xc1\x8a\x81\xf9\xd8\xfc\x66\x7f\xab\xb9\xe9\x53\x55\x3e\xc1\x59\xae\x1e\x1f\x1f\x5f\x06\xc4\x00\x1a\xfc\xc7\xd1\xd1\x1d\xb2\x9f\x04\x5a\x53\x58\x9d\x7d\xe7\x79\x2b\xea\x7a\xcb\x2a\x3b\x0d\x86\x37\x94\x04\xe8\xb7\xa5\x49\x97\x45\x9d\x00\xc4\x38\x7a\xfb\x71\xfe\x9c\xa1\xcf\xaa\x0b\xf7\xef\xd7\xfe\x6a\xe2\x6d\x10\xda\x96\x67\x5a\x66\xcb\x30\xb5\xbf\x61\x5e\x9d\xeb\xe0\x0b\xb6\xd9\x8c\x9e\xa5\xe0\xa0\xc1\xbf\xea\xad\xb8\x3c\x22\x57\x9a\xc9\xfb\xa0\x2b\x47\xf0\x8f\x82\xdc\x90\x08\x8f\xc5\x93\x5a\x92\x85\x57\x44\x1d\xad\x35\x2f\x18\x3d\x06\x44\x03\x7a\xb0\xda\xd2\x07\xf5\xd6\xad\x93\x63\xe2\x7a\xf8\x60\x26\x7f\xe1\x81\x69\x9b\x82\x82\xa4\xe7\x51\x69\xa7\xc0\xc8\xb8\x1c\xbd\x43\x86\x04\x15\x10\xb9\x68\xf7\x4a\x2e\x1f\x63\xad\xa8\x85\x85\x17\x8f\xd3\xde\x32\xfa\x7d\x8c\x6f\x53\xe9\x7e\x5a\x17\xcf\xed\xcc\x79\xd4\x86\x4d\x2e\x92\xa5\x9b\x00\x31\x8e\xd2\xe7\xc4\x8a\x89\xd3\x53\x9e\x53\x6b\x7b\x39\x4c\xd7\x9b\x26\xc7\x1d\x10\xfe\xe5\xd3\xfb\x7a\x7f\xe5\xc4\xf7\x85\x82\xf3\x21\x54\xfe\xc7\x80\x98\x43\x9b\x3f\x7d\xf0\xd0\xbd\x51\x6b\x52\xbb\xa1\x3c\x87\x5d\xf0\x77\xcc\x2e\x05\x73\x7e\x25\x3e\xf7\x2d\xcd\x3e\x94\xec\x1b\x1b\xe8\xc7\x9c\x97\x3c\x1d\x9a\x39\xc9\x01\x57\x72\xf6\xa4\xdb\x66\xa9\x05\x0c\x6f\x69\xff\x39\xff\xbb\xb5\xab\xe5\x73\x65\x7f\x3c\x47\xab\x71\x64\x82\x53\x4d\xef\x75\x00\x08\x80\xf6\x7f\x77\x1d\xfb\xc4\x1a\xd3\x87\x6d\x0b\x15\x9b\x84\x8f\x98\xb2\x1f\x70\x2a\x61\x4c\xb8\x61\xea\xd0\x6f\xd6\x37\x2e\x62\x23\xfa\xad\x03\x10\xe1\x68\xf7\x47\x5b\xba\xd7\xf1\x5d\x9f\xd2\xb8\x97\x60\xbf\xcf\x86\xe5\xab\x6b\x48\x86\xf1\xb3\x37\xd5\x3b\xe3\xee\xd5\x5e\xa3\xa9\x1c\x49\x12\xa2\x02\xe2\x2e\x9a\x69\x8a\x49\xfb\x12\x05\xf3\xb6\xf6\x49\x94\xcc\x9e\x09\x29\xf1\x7f\xc8\x64\xb9\x2d\xf7\x8e\xc0\x51\x89\x9a\x85\x33\x9f\x12\xd3\x13\x76\x00\xa2\x12\x9d\x8d\x6f\x5b\xd5\x26\x46\x25\xb6\xcb\xcd\x71\x02\xfb\x3d\xd5\x93\xba\x75\x5c\x73\x34\xee\x7e\xcb\x8b\x0e\x3c\x75\x53\xa5\xa4\x53\xe6\x17\x20\x46\xd1\xad\xda\x5a\xb4\x86\xb5\xb8\x85\x55\xfd\xf9\x79\x19\x2f\xcb\x4d\x5f\x59\xb7\x44\x2a\x71\x6d\x74\xd6\xb1\x7a\xc5\x9f\x1b\x12\x46\xe9\x4e\xa4\x02\xa2\x0c\x3d\x26\xe3\xbe\xc1\x7e\xe7\x1c\x3f\x4e\xaf\x65\x66\x38\x72\xa5\x34\x70\xe6\xc9\x01\xbe\xa4\xc9\x9b\x3b\x0d\x06\xdb\x2b\x4e\x7f\x28\x8f\xee\x01\x44\x17\x3a\x9b\xef\xab\x1d\x4f\x4c\x32\x30\xe7\xfd\xea\xbe\x7c\x34\xd4\x2f\x31\x7c\x67\xcd\xfd\x21\x79\xcb\xf8\x31\x41\xa3\x51\x5b\xed\xe5\xdf\x22\x00\xd1\x8d\x66\x7d\xfe\x55\x59\xf9\xd5\x3f\xec\xe3\xfd\x25\xfd\xea\x77\xb7\xe7\x48\x7f\xe0\xae\x6d\x4a\xfc\x54\x27\xe3\xc4\xfe\xa9\x42\x4f\x74\x91\x8a\x34\x35\xd1\x91\xfa\xc4\xcd\xd2\xd0\x6f\xc8\xc4\x67\xe7\xa7\x3d\xa2\x79\xd9\x53\x3b\x7d\x67\xd4\x76\x8a\xed\x2b\x3f\x42\xb4\xc5\x82\x91\x02\x54\x0e\x22\xcd\x0f\x88\xbd\x0d\x62\xe1\xb1\x72\x14\xe7\x5c\x90\x52\xc9\x3f\x1f\xff\x68\x7d\x34\xcf\x79\xb7\x69\xbb\xe4\xcf\x49\x1b\x1c\x4d\xe4\xc5\x29\x80\xf0\x43\x27\xfe\x83\xad\x8a\xd8\x3d\xfb\x58\x5a\xb6\x76\xf9\xe0\xef\xb7\xb5\x1b\xbf\x8e\xdc\xf7\xf6\x7d\xd5\xa5\x51\x51\xee\x2b\x64\x2e\xd3\xda\x4e\x05\x84\x3f\xba\x4b\x12\xd3\x9b\x94\x68\x02\x9f\x9d\x4b\xe2\x3c\x52\xc4\x37\xc0\x74\x95\x2e\xaf\xea\xd2\x0f\xfa\x5b\x4e\x67\x78\xb7\xf4\x78\xa8\x08\x67\x00\xe2\x3e\x9a\x04\x4c\x22\xc3\x67\xc3\x6f\x50\xe8\x03\x15\xe8\x94\x34\x2a\xd6\xd6\xef\x69\x0d\x2a\x58\x58\x37\x6e\x9d\x23\xea\xf3\xba\x59\x9f\x97\x05\x10\x39\x68\xf5\x88\x2f\x31\xdc\xc9\x1b\xd0\x9f\x49\xac\x2e\xda\x33\x1b\xec\xbb\x72\xa2\x91\xf3\x08\xed\xc6\x4b\x6f\xbe\x6c\x57\x5d\xb5\xfb\xf9\xa1\xab\x00\x10\xb5\xe8\xae\x9e\xd2\xa2\x2b\x1e\x09\x1a\x19\x5e\x2d\x96\xda\x46\x84\x9c\xf0\x4f\x7b\xf4\xb8\xb4\x42\x80\x69\xd0\x5b\x5d\x4c\x97\x79\xbc\x6f\x00\x10\x33\x28\xcf\x1a\x5b\x26\xa6\x0d\x36\x25\xac\x6a\x76\x93\xf3\x6c\xa2\xb6\xc7\xe5\xa5\x16\xdf\x6b\xd5\x8e\xb1\x5e\xf5\xed\xa6\xf6\x44\xc3\xbb\x3f\x2f\xb7\xc6\xd2\xb1\xaa\xf2\x1f\xf5\x0e\xf5\x0f\x96\x93\x21\x66\x90\x7c\xdf\x0e\x8e\x97\x21\xe6\x09\x7c\x2c\x06\x4b\xce\x10\xb3\x00\x5d\x02\x96\xa0\x21\xc6\x0f\xde\x5d\xe0\x58\x9a\xc4\xd4\x41\x07\x83\x63\x6a\x12\xf3\x1e\xce\x0d\xc7\xd6\x24\x26\x97\xfc\xc9\x3d\x86\xb1\x49\x4c\x2f\xbc\x1f\xc0\xb1\x36\x89\x69\x87\xaf\x06\xc3\x51\x37\xc4\xa8\x70\xfc\x19\x06\xc7\xde\xe4\x30\x91\x30\x6c\x58\x06\x87\x98\x37\xe4\x9b\xdb\x70\x2c\x0e\x31\xb1\x30\x6c\x38\x2a\x27\x31\x65\x30\x0d\x70\x74\x4e\x62\xbc\xa1\x7d\xc0\x52\x3a\xc4\x04\xc3\x34\xc0\xf2\x3a\xc4\x0c\xc0\xe3\x83\x25\x77\x88\x19\x87\x96\x03\x4b\xf0\x64\xdc\xe0\xfe\xe0\x58\x9e\xc4\x34\xc0\x63\x8a\x65\x7a\x32\xad\xe1\x38\x58\xba\x27\xd7\x43\xda\x14\x0c\xe7\x93\x98\x39\x88\xc1\xf2\x3e\x79\xb4\x61\xbe\x61\xb9\x1f\x62\x00\xf9\xad\x62\x8c\x00\x20\x31\xe1\x70\x1c\xac\x08\x80\x98\xbb\x30\x47\xb1\x4a\x00\x62\x2a\xe1\xdc\x70\x72\x80\xc4\x8c\xc2\x3d\xc5\x4a\x02\xf2\xfc\xc0\x33\x87\xd5\x05\x10\xd3\x05\xe7\x86\x13\x07\x24\xa6\x9b\x79\xea\x11\xdd\xbf\xc9\x04\xa0\x2a\x58\x48\x47\x73\x6b\x29\x79\xfe\xfa\x6b\xf5\x9d\xad\xbc\xfa\x15\xba\xba\x56\xcf\x5c\x1f\x97\x77\xed\xbd\x97\x1d\xed\xe2\x3d\x93\x97\x49\xe3\xba\x31\xc3\x61\x9b\x7d\xfc\x0a\x0a\x20\xd2\x50\x3e\x77\xc9\x56\x8c\xe2\xe5\xbb\xa6\xae\xb4\x27\x80\x25\x9d\x1a\x24\xd3\xed\xb7\xaf\xe5\xd8\xeb\xe1\xe4\x67\xb9\x79\x37\x4b\x33\x4f\x6a\x51\x00\xf1\x01\x6d\xef\xea\x9c\x67\x1e\xd4\x72\x24\xca\xfc\x17\x3b\xeb\x97\x52\xcd\xe9\xb3\x6c\xeb\x55\x7e\x78\x7a\x7d\xb1\xb4\xfd\xf8\x73\x85\x0e\x25\x89\x02\x88\x44\xd4\x8c\xd1\xf6\x1c\xb7\x55\xbc\x73\xee\xac\x6f\xfe\x9b\xcd\x15\x0a\x6e\x3b\x55\xab\x9d\x84\x6f\xcd\xe5\xaf\xb9\xc3\x51\x7d\xee\x93\xc7\x3d\x45\x0a\x20\x1e\xa1\xfd\xf7\x5d\xba\x32\xd4\x78\xb1\x37\x72\x62\xb0\x6e\x9a\x69\x3f\xe7\x00\x4b\xdf\x91\x8c\x35\x05\x72\xcb\xde\xbc\x74\x98\xd1\x88\x7b\x39\x24\xf5\x6f\xcb\x44\x8e\x16\x3c\x8e\xb8\xa5\x92\x98\x34\x98\xbe\xb8\xe5\x92\x98\x0f\x10\x83\x5b\x32\x89\x49\x84\x6c\x86\x5b\x36\x89\x79\x04\x3f\x23\x81\x53\x86\x24\x9b\x1d\xfc\x33\x0c\x4e\x1c\x22\xc2\x01\x66\x2f\x56\x20\x42\x8c\x3f\x3c\xc1\x58\x95\x08\x31\xf7\x61\xd8\xb0\x52\x11\x62\x72\x20\x33\x61\xe5\x22\xc4\xd4\xc2\x53\x8f\xd3\x8c\x24\x66\x86\x65\xaa\x85\xfd\xbf\x20\x7a\x5a\x66\x4b\xa9\xd7\xbc\x97\xe4\xa4\x82\x44\xf8\x25\x6f\xc4\xdf\xc8\x3c\xa2\x9e\xdc\x29\xba\xd8\x6c\xfd\x45\x4a\x34\x64\x26\x1d\xa8\x2e\xfe\x58\x98\x0e\xdd\x00\x00\xe1\x87\xba\x0e\x89\x9f\x97\xf4\x4a\x9e\xb9\x4f\x45\x44\x8e\xaf\x34\xb9\xbd\xdb\xe2\xf5\x4f\xad\xe5\x63\x7e\xe1\x86\xe3\xae\x96\x04\x17\x87\xc5\x04\x20\x52\x51\x31\xce\x56\x14\xeb\x99\x76\x44\x7e\x90\xbf\x67\xaa\x9f\x59\xed\xdd\x87\xfd\xb3\xee\x45\x4e\x51\x07\xe9\xad\x6d\xaa\xae\x72\xed\xa3\xad\xa2\x02\x22\x00\x3d\xed\x62\xb1\xdb\xab\xeb\x0a\x6c\x86\x5e\xbe\xeb\xba\x9e\x36\x9a\xb7\xdc\x20\x6c\x9e\xc7\xc6\xb7\x52\xa7\x7b\xf9\xa2\xaa\x49\xc1\x56\x1a\x40\x44\xa1\xea\xfa\x70\x0b\x5d\x43\xb3\x43\x91\xca\x72\xc7\x3a\x06\xc1\xf6\x65\x37\xf7\x34\x3d\x09\x55\x1a\x5c\xed\x93\xdc\x7c\xa3\xd7\xd7\x77\xd7\x25\x40\x64\xa1\x67\x57\xfa\x78\xca\x59\x30\x29\xa0\x10\xb7\xaf\x58\x3f\x45\xcd\x5b\xf3\x8e\xea\xa3\x0a\x05\xc6\x04\x23\x95\xc3\x4a\xa3\xd1\xf6\x3a\x79\x00\x10\x13\xa8\xf5\xe8\xd0\x7f\x70\xbf\xf0\x06\x25\xc8\xf3\x47\xb9\x51\x86\xa3\x7a\x69\x7b\x7b\xfb\x1a\x5f\xbb\x80\xc1\xe7\x76\x1a\x71\x71\x8c\x9d\x83\x80\x98\x44\x9b\x9f\x72\xb9\x78\x4b\x48\x54\x8a\x93\x61\x90\xef\x6b\xc5\x67\x03\x5b\xe7\xb4\xf6\x0f\x57\x1e\x3f\xb8\x6a\xbf\x91\xde\x92\x63\xfb\xf6\x87\xe8\x13\x4d\x7a\x71\x3e\x4a\xed\x9b\x4f\x0a\x29\x98\x06\x6d\x9d\x29\xe1\x65\xb2\x74\xec\x0b\xd5\x5d\x61\x7c\xe2\x8e\xf5\x4a\xcf\xe7\xae\x6a\x00\x10\x77\xd0\x6b\x82\xb9\xc5\x6a\xe9\x74\xb6\xac\x12\x2b\x21\x1f\xff\x64\x93\xa1\x84\x82\x61\x17\xfd\x50\x45\xba\x1f\x80\xa9\xa4\x7b\x0d\xf7\x6b\x63\x40\xfc\x44\xc3\xde\x6a\x5e\x71\x62\x3e\x77\x36\x47\x93\xde\xff\xd0\xa2\xd1\x15\x31\x3a\x13\x95\x8f\xa7\xbd\x62\xab\x16\x3e\x4e\xdc\xe2\x88\xbd\x2e\x02\x00\x41\x45\x5d\x8d\x94\x60\x5c\x91\xb7\x70\x92\x35\x17\x0d\x23\x4f\x8a\x4e\x9b\x72\x12\xa5\x61\x7c\x5a\x49\x41\xb2\x6c\xa3\x5a\xa6\xab\xe3\xfd\x30\x40\x74\xa0\xb3\xd1\x96\xed\x28\xeb\x9b\x99\x9d\xd0\xf8\x6c\x7c\x60\xe2\xf4\x38\xf8\x6a\x35\xda\xff\x3a\xed\x5d\x9f\x7d\xc1\x7d\x99\x1a\x87\x3d\x1d\x4b\x95\x00\x6d\xef\x1e\x22\x1f\x99\x5a\x7c\x5e\x44\x4b\xa4\x3f\x55\x97\xe2\x47\x1b\x99\x33\x94\x50\xeb\x7f\x7c\xd3\x4f\xba\xa2\xcc\x58\x66\x19\x1f\x0a\x20\x46\xd0\x6d\x0d\x50\xff\xec\xa5\xe9\x32\xb7\x4a\x3e\x55\x68\x53\xff\x59\xa7\xc0\x65\xa1\x5e\xad\x89\xa7\x3a\x18\x24\x17\x32\x98\xeb\x9e\x2f\x5c\x03\x80\xa0\xa0\xfd\x1b\xc8\xaa\xb3\x28\x39\xe8\x9c\xb7\x10\x15\xd2\x27\x8e\xf0\x52\x6e\xf2\xc4\xdc\x31\x5c\x54\xf8\x7e\x50\x72\x58\xbf\xa8\x91\x86\x01\x10\xfd\x68\x74\x2c\x6f\x5a\xf6\xb6\xae\x9f\x5b\xb5\xbc\xc6\xff\x93\xf7\x7d\x81\xc8\x1e\xcd\xd5\x7b\x12\x67\xa6\xbe\xea\x28\xbe\x0f\xfb\xb8\x55\x29\x9e\x02\x08\x2a\x9a\x94\x2b\xc5\x85\x13\xbd\x4f\x27\x8f\x34\xd9\xf5\xb7\x74\xef\xfd\x1a\xaf\xec\xf0\x60\xfc\xa9\x91\xcb\xa4\x1a\x85\xc9\xb6\x85\x41\x6a\xe3\x92\xee\x45\xa3\xd9\x56\xfe\xe1\xa6\x99\x90\xc3\x7a\xa1\x9d\x4e\xd1\xdd\x4a\xbc\xab\xbd\x83\x8e\xe6\xab\x7f\x3a\xbe\x82\xd7\x5f\xce\x88\xe5\x44\x9a\x31\xd2\x54\xfd\xd6\x39\xbe\x98\xae\xe6\xf6\x0c\xee\x84\xb5\xaa\xbb\x55\x96\x4f\x64\x57\x1f\x7c\x26\xd9\x6c\x7a\x5b\xe5\xfd\x3b\xee\x37\xab\x33\xd0\xe7\xaa\x54\x2b\xcd\x6f\x75\x79\x3e\x53\xb5\x4a\xbb\x1a\xfb\xad\xe5\x51\xd9\x36\x73\xdd\x88\xc6\xb4\xcc\xef\x94\x63\x42\xc2\x53\x23\xf6\x54\x40\xa4\xa1\x56\xb2\xa4\x77\xbf\x78\xde\xcb\xa4\xdf\x5d\xf1\xf5\x59\x35\x2d\x07\xb9\xd7\x7f\x49\x3e\x47\x23\x3c\x19\xc8\xdd\x79\xbf\xc0\xd3\xe7\x4c\x21\x20\x9a\xd0\x7b\xab\x9c\x99\xae\xcc\x4e\x7e\xca\xfc\xeb\xf7\xa2\x9f\x7a\x0e\x7f\x71\x7b\x21\x60\xdb\x28\x17\x3f\x29\x14\xf5\x36\x22\xaa\x88\x4d\xeb\x1e\x20\x06\xd0\xde\x15\x40\x68\xf6\x97\xc7\x5f\xbc\x5a\x1e\xcc\x74\x51\xcf\x7c\xbf\x56\x0f\x1e\x3d\x91\x35\x6f\x97\xdc\x7d\xbc\x2d\xf2\xe9\xb7\x35\x7e\x00\xa8\x18\x22\xcd\xad\x7e\xb8\x52\xbb\xc2\xbb\xab\x05\x78\x0c\x1a\x59\x6e\xba\x57\xa9\xd8\x44\x70\x4f\xc6\x4a\x2a\xac\xed\x39\x2c\xf7\xfd\xe0\xa2\x3b\x20\x26\xd1\x04\x38\x56\xfe\x62\x05\xbd\xcd\xbc\x7b\x63\xf0\xbe\xbb\x1f\x26\xd6\xca\x8d\x55\x68\x8c\x69\xdf\x73\x93\x1c\x09\x20\x06\x27\x5e\x1e\x3d\x0b\x00\x91\x8e\x92\xac\xf1\xfc\xc2\x70\x43\xe5\x0c\xed\x9e\x1c\x8d\x0d\xc3\xbc\xb7\x3b\x4a\xad\x41\x51\x4d\x48\x73\x5b\xae\x8c\xa7\xc1\x49\x99\xbc\x5c\x40\xd4\xa1\x45\x4c\xf7\x95\xe0\x32\xbf\x5c\xf1\x8f\xc7\xe6\x75\xf7\x36\xc6\x50\xa6\xe8\x3e\xbf\x3d\x7a\xf1\xf0\xe1\xfb\x83\x0e\x66\x39\x71\xe5\xc7\xe2\x01\x20\x0a\xd1\xcb\x90\xeb\x8a\x9b\x93\x7e\x79\x0f\xb3\x6c\x9c\x3f\xe7\x35\xf4\xa2\xf8\x82\x14\x1b\xa7\xc0\x98\xa9\x44\xb8\xcd\xef\x3c\xfe\xa7\x76\x8c\xd1\x80\x18\x43\x9b\x37\x72\xb9\xf8\x99\x39\xce\x6a\x71\x5e\x4c\xd3\x97\x2c\x2b\x3b\x94\x31\xb1\xee\xc6\x26\xd6\x23\x25\x1d\x29\x4f\x27\x4e\xdb\xb2\x3b\x53\x01\xe1\x8f\xe6\x97\x89\x76\xa2\x44\xc6\xad\xa3\x7d\x2a\xf9\x87\xac\x9f\x4f\x76\x5c\x38\x9a\x7e\xb0\xcf\x48\xc4\x4d\xc3\x5c\xbe\xcc\xbd\x70\x2e\x3d\x04\x10\x15\x7f\x7d\x98\x43\x66\x83\xfa\xc0\xb7\x93\xf3\x0d\x79\xee\x5f\x43\x12\x2f\x1e\x9c\xd6\x69\xf7\x17\x77\x65\xdc\xd7\xfc\x8a\x63\xb5\x44\xaf\xe8\x5e\x40\x34\xa0\xb1\xd9\xca\xf0\xc4\xdb\xf7\x69\xc0\x71\x75\x4e\xe7\x16\x4a\xc7\xb6\x0c\x17\x55\x7a\x69\xb3\x8e\x86\xba\xef\x1f\x7d\x1d\x5d\xb2\xd9\xb2\x97\x78\xee\xaf\x97\x27\xf9\x0f\x88\x72\x3b\x34\x6f\xc8\x54\xeb\xb0\x77\xdb\xf7\xdd\xea\x4c\xbb\xc8\xc7\xec\x69\xe7\xfb\x8b\xec\xdb\x4c\x23\xb8\x4d\x43\x28\x80\x78\x8a\x9e\x26\xfe\x9b\xdb\x8a\x8f\x9a\x7c\x0c\x67\x99\xbc\xda\x2b\xa6\xa5\x76\x1f\x64\x98\x84\x27\xc7\x26\x4b\x1c\x17\xf5\xd9\xd5\x91\xdd\x1d\x01\x00\x91\x81\x56\x49\xaf\xd5\xbb\x9f\xf7\x64\xea\x88\xd7\xf3\x6a\xec\x2f\x3a\x39\x2c\xa7\xa5\x1b\x9d\xf7\xca\xe4\x6b\xaf\xd8\xeb\x2c\xf7\x0a\x69\xfd\x2d\x80\x68\xfb\x4b\xff\xe9\xcc\xbe\xa9\x8b\xb8\xd8\xfe\x6c\x5a\x33\xe4\xc8\x3e\x97\x5f\xdf\xba\x0e\xbc\xdf\xc5\xf7\xe4\x88\xcf\x01\x40\x77\x38\xd2\x60\xcd\x92\x87\x46\x13\x93\xcb\xfe\xb0\xf7\x90\xc1\x3d\xfa\xb9\xdb\x1d\x6b\xd7\x78\x69\x2d\x5b\x1f\xf0\x2e\x28\xca\xf2\xfb\x93\x9f\x53\x52\x1f\xde\xf2\xad\x9a\x04\x80\x88\x47\xc3\xf3\x32\xa6\x8b\xc2\x33\x2e\x5d\x3d\xe5\x73\xd9\xd1\x97\xd1\xa7\xe4\xfe\x43\xf1\x31\xaf\x47\xb9\x8c\x7c\x7b\x29\x89\x26\x1c\x3b\x58\x00\x91\x87\xa6\x0e\x57\xc1\x98\xb6\xc9\x9a\x77\x76\x2c\xf2\xd3\xd7\xf3\xc7\x4c\x78\x96\xf5\x29\x09\xb3\xec\x3d\x98\x3b\xdb\xe7\x10\xaa\x7a\xfe\x40\x02\x05\x10\x49\x68\x69\x52\x3e\xe2\x92\x35\xe5\xb8\xee\xb8\xaf\xe3\x97\x7b\xcc\x85\xd7\xe5\x13\xec\xce\xf5\x85\xfe\xce\xbf\x6a\x1b\x92\xb1\xbb\x57\x41\xec\x11\x15\x10\x7e\x68\xee\x1c\x9e\x7a\x3d\xf7\x46\xa8\x74\x8b\x03\x6d\xf3\x76\xad\xad\x57\x84\xca\xb4\x8e\x9d\x4d\x7d\x26\xf8\x95\xef\xd7\x1d\xc2\xad\x9c\xcb\x06\x10\x1d\xe8\x6a\xeb\x0b\x14\x35\x07\x19\x8d\xc3\x2f\x59\x65\xe6\xd6\xa4\x52\x3f\x71\xb3\x18\xfb\x5f\x8e\xd4\x97\x13\xa5\x8f\x6c\x99\x3e\xcf\xaf\x0d\x88\x69\x74\x6f\xab\xd3\x7e\x54\xaa\x57\x5f\xdb\xbc\x2f\xff\x9e\xd6\x1b\xb1\x19\x97\xad\x95\xdf\x84\x57\x2a\xc4\x58\xbf\xf8\x21\xc5\x71\xf9\x8b\x53\x06\x15\x10\x2f\xd1\xf6\x11\x67\xf6\xcc\xed\xd2\x0b\xf3\x64\xde\xcb\x6d\xa6\x9c\x57\x35\x70\x48\x55\xcb\xa8\x39\x69\x85\xba\xe1\x53\x71\x73\x9e\xc3\xfa\xc9\x80\x28\x45\xf9\x35\x78\x99\x73\xa5\x8d\x1e\x8b\x57\xee\xa9\xb3\x97\x2f\x51\x47\xe4\x1b\x4f\xcd\x77\x14\x33\x6d\x49\xe3\xa3\x0f\x7b\xd0\x72\xd6\xef\x39\x20\xba\xd0\xe6\x3e\x31\x8d\xe3\xaf\x45\x69\x19\x6e\xb1\x3d\x90\x33\x8e\xcd\xcf\xaf\x68\x05\x9f\x5c\xe8\xdc\x4d\x85\xd4\x92\x9d\xbd\xc2\x5e\x64\x52\x80\xca\x26\xf4\x39\xda\xd7\x3f\x14\x6a\xb5\xed\xd4\xce\xb1\x1a\xdd\x7c\x19\x67\x62\x54\x75\xb9\x40\x3d\x57\x81\x57\xcd\xbf\x6a\xbe\x20\x4a\x5d\x50\x5d\xea\x1f\x15\x8a\xaa\xfb\x1f\x49\x08\x4d\x10\x4e\xa6\x90\x98\x54\xf2\x37\x49\x38\xa9\x02\x31\x01\xe4\x6f\x52\x71\x7a\x05\x62\xa2\xa0\xbc\xc3\x8a\x16\x88\xc9\x82\xea\x1b\x2b\x5c\x20\x66\x02\xca\x62\x9c\x7a\x21\x31\x93\xb4\xf0\x71\x36\xac\x8e\x51\x65\xa2\xa3\x65\xf3\xa0\x00\x62\x0c\x4d\xdb\x9e\xa1\x24\x89\x07\x9c\x16\xa3\x7b\x37\x8c\x29\xb9\xad\x38\xae\x60\x20\xdd\x25\xd4\xbc\xef\x22\x31\x15\xd2\x55\x66\x7b\x23\x76\x8e\x02\x88\x12\xb4\xbd\x8a\x2d\x6f\x55\xc3\x89\x0d\x09\x66\x52\x8f\x4e\xa4\x2a\x6e\x6b\xb1\xbc\xc4\x12\xf8\x3c\x37\x21\x83\x5b\xa1\x5a\x27\xdd\x3d\x4b\x65\xc9\x46\xa0\xa7\x6e\x70\xd8\xbb\xb2\xda\x72\xec\x46\xef\x6f\x26\x7b\x43\xab\xb5\x31\x74\x42\xeb\x95\xd7\x87\xbe\x50\x51\x11\x13\x1c\x48\xe2\x6c\xbe\xb6\xe4\x9a\xd1\xfe\xe5\x13\x04\xcd\xe9\x5a\x63\x44\xde\x15\x16\x6a\xaf\x89\x6d\x5d\xd9\x94\xad\x3a\xd4\x3a\xaf\x29\xeb\xcf\x7f\xd4\x30\x96\x6f\xcc\x59\xea\xdf\xa6\x4d\x86\x68\x0c\x5e\xbb\xe2\xa6\x4e\x62\x4a\x20\x06\x37\x7d\x12\xf3\x08\xde\x1b\xe1\x96\x40\x62\x46\xe1\x38\x58\x55\x09\x31\x77\xe0\x38\x58\x69\x09\x31\x3f\xe1\x51\xc1\xca\x4b\x88\xa1\x42\x27\x84\xd3\x98\x24\xa6\x03\xce\x0d\xa7\x33\x49\x4c\x22\xc4\x60\xb5\x26\xc4\x8c\xc0\x23\x89\xd5\x9b\x10\x43\x81\xe3\xe0\x44\x27\x89\xe9\x87\x71\xc3\x09\x4f\x24\x6e\xe4\x5d\x20\x46\x7c\x92\x98\x37\xac\x53\x95\x74\xff\x26\x43\x81\x6a\x21\x5b\x24\xad\x27\x05\x10\x45\x7f\x7d\x68\x48\xed\xfb\x5d\xe9\x63\xc3\xd9\xce\x23\xfc\x12\x33\x2e\xdc\x59\x23\xe3\xcb\x0f\x36\xfa\x3c\x08\xd6\x38\xbe\xa8\x74\x90\xcf\xbb\x73\xa9\x8e\xfd\xa5\xa3\x38\x1c\x2f\xc6\x6c\x60\x59\x1b\xaf\xd8\xc3\x25\xe1\xec\x13\xb2\xc0\xe2\x9f\xca\x19\xfb\xd6\x96\x51\xdd\x3e\x92\x43\x9c\x53\x8f\x02\x88\x14\xb4\xff\xea\xb5\xfc\x9a\xeb\xaa\x37\x73\xea\xd0\x85\x5f\x4e\xdb\x70\xbc\xd1\x3a\x66\x97\xc4\x70\xf6\xb6\x73\x74\x1f\xa5\xdb\x17\x7e\xef\x54\x5c\x6a\x8f\x1e\xe3\xea\x27\x37\xbf\x26\x8a\x28\xad\x0f\xed\xbe\x18\x17\x92\x14\xea\xd2\xa4\x53\x3c\xaf\x16\x15\xcb\x41\xbb\xca\x60\xc5\x2d\x37\x8f\x70\x0a\x20\x22\x50\xe9\x12\x15\x28\xf4\xee\x5c\xd1\x80\x8e\x90\xa9\xac\x37\x33\xa8\xf4\x1d\x31\x6a\xf6\x09\xf7\x7e\xc4\x71\x25\xb9\x39\x55\x5d\xcf\x37\x87\x02\x08\x0f\x74\xfe\x31\x89\x17\x3d\xd6\xbc\xa8\xdf\xbe\xf6\xe1\x65\xcf\x6b\x35\xca\xc6\xb7\xd4\x8c\xd2\xc3\x1d\x9b\x47\x85\x4d\xf7\x5a\xf7\xb5\xaa\x76\x48\xfd\x5b\x58\xc8\x2d\x28\x82\xd5\x17\x17\x1a\x84\x19\xe0\x95\x34\x2e\x3c\x24\x26\x05\x8e\x83\x0b\x11\x82\x81\x65\x02\x17\x26\x12\x13\x01\x53\x17\x17\x2a\x12\xe3\xc1\x0c\xd9\x04\x67\x71\x80\x2a\x2d\x13\x13\xdd\x12\x9b\xdc\x41\x35\x19\x4b\xe1\x6a\xc9\x17\xd5\xfc\x77\x9d\x76\xef\x19\xcd\x4c\x6d\xba\x78\x3d\xfd\x50\x89\x3a\x2b\x97\x72\xb5\x39\x43\x96\xea\x14\x55\x7f\xe9\x1c\xa2\xdb\x3e\xbb\x71\x73\xfa\x03\xc1\x0d\x74\x76\xd1\xea\x03\xa3\x71\x85\xce\x22\xaf\x9d\xd4\xb5\x3a\xf7\x2e\x9f\xa6\x3d\x34\xb5\x90\x70\x54\x7d\x49\x1a\xfc\xf5\x14\x57\x36\xe5\x5c\x60\x4f\x91\x6c\x90\x8c\x95\x54\x58\x1a\x73\x9c\xc8\xed\x2f\x3e\xee\x6d\xfc\xcf\x94\x2e\x96\x9c\x2e\x66\xe1\xd7\x58\xaa\xf7\xa8\x40\x77\xeb\x38\xaa\x60\x76\x6a\xd8\xef\x62\x4d\x6e\x57\x92\x5a\x26\xa3\x8b\xd4\x5b\xde\x0f\xf5\x94\xa1\x11\x4f\x66\x23\xfe\x5d\xf9\x7f\x7e\x13\x80\x9b\x36\x52\x7d\xa1\x50\xc1\x4d\x1d\xa9\x3c\x70\x2b\x70\xd3\x47\x04\x11\xdc\x72\xdc\x12\x10\xa6\x83\x55\x11\x6b\x38\x21\x26\x0d\x8e\x83\x75\x9d\x10\xd3\x04\xff\xaa\x82\xb5\x9e\x10\x33\x00\x1f\x4b\xc3\xfa\xcf\x3f\x18\x15\xc3\x3f\xc3\x60\x3d\x28\xa9\x87\xc8\xab\x38\x9c\x0f\x85\x98\x74\x78\x4d\x88\x35\xa3\x10\x53\x07\xd3\x00\x6b\x48\x21\xa6\x10\x56\x0b\x9c\x2b\x45\xb6\x14\x62\xb0\xce\x14\x62\xfc\x21\x01\x61\xed\x29\xc4\x54\xc0\xb8\xe1\x3c\x2a\x89\x69\x80\x71\xc3\xf9\x54\x64\x6e\x30\x75\xb0\x5e\x15\x62\x9e\x92\xcf\xc8\xe3\xfc\x2a\xc4\x64\x90\xcf\x94\x63\x4c\x2b\x89\x69\x83\x71\xc3\x1a\x57\x88\xe9\x85\xc7\x07\x6b\x5e\x21\x26\x1e\xc6\x0d\xe7\x60\x49\x4c\x1e\xcc\x37\x9c\x8b\x25\x31\x49\x50\xf0\x60\x9d\x2c\x59\x76\x60\xbe\x61\xed\x2c\x29\xfa\x60\x0c\x70\x9e\x96\xc4\x4c\xc3\x3c\xc0\xfa\x5a\x88\x79\x09\x31\x58\x73\x0b\x31\xa5\xe4\xfb\x6a\x30\x0e\x97\xc4\x74\xc1\x77\xe4\xe2\x6c\x2e\x59\xaa\x36\x4d\x19\xff\x17\x72\xe3\xf0\xdb\x02\xcf\x41\xbb\x5b\x1b\xaf\x7f\x52\xf9\x26\x2b\x61\xa9\xc4\xf3\x70\x28\x6b\xdb\x1b\xf1\xb6\x2f\x2d\x35\x9a\x7b\xac\x85\xbc\x28\x04\x8d\x05\x2d\x8d\x32\x0d\x0d\xc2\x52\xdc\x0b\x17\x2a\xce\xc4\xc4\x58\xb3\xca\xee\x55\xdf\xe3\x1f\x77\x84\x22\x32\x59\x1e\xae\xe7\xae\x73\x2f\xc2\xb9\x9e\xc9\xc0\x87\x95\x9b\xd6\x80\x86\xf9\x9c\xd5\x45\x31\x19\x31\x2b\x5b\x2b\x07\xf2\x5f\x1e\xff\x63\xeb\xe0\xec\x4d\x02\x7d\x3b\xd7\x8f\xaa\x17\x3c\x50\xde\xf6\x7a\xc7\x81\x0a\x3a\x42\xa4\xaf\xf2\x92\x1d\x65\x67\x4f\x9e\x98\x19\xf3\x38\xfa\x8c\xd0\xf5\x21\xe1\x57\x8f\xfc\x5b\xe6\x1d\xb3\x1c\xbd\xe7\x4f\x77\x2b\x1a\x7e\xbb\x73\x3e\xe8\x73\x90\xf7\x2a\xbb\xc3\x56\x4f\x63\x9b\x92\xd7\xd3\x0f\x39\x8b\x5e\xb4\x3b\x7b\xe6\xa2\xad\x85\x83\xa8\xcc\xb9\xdd\xe6\xe2\xd2\x67\x2c\x44\xe5\xe4\x2d\xe4\x45\xa5\x25\xcc\xe4\x45\xcd\x64\xe4\x25\x44\xc5\xe5\xcd\x25\xc4\xa5\x65\xa4\x76\x5b\xc8\x4a\x84\xd2\xfe\x5b\xcf\x60\xbf\x3b\x1b\x13\x95\x02\x0c\xe8\xf6\xae\xe3\x3b\x41\x7b\x21\xbd\x8f\x91\x3b\x40\xe0\xda\x94\x50\xd4\x63\xa6\x44\xc9\xf5\xf4\x83\x14\x70\x5c\x82\x3e\x35\x6c\x9d\xe9\xba\x3d\x52\xf5\x5c\x71\x2b\x18\xe2\xb4\x6a\xe9\xae\x58\x9e\x55\x2b\xf3\xbc\x7e\x99\x5f\xac\xfa\xea\xda\xe5\x07\x3e\xf3\xd7\xd2\x3b\x2e\x2c\xcc\x1b\x9c\x89\x7a\x14\x29\xbd\x90\xcc\xce\x6d\x4e\x01\x06\xb4\xec\xf4\x05\xeb\x33\xb8\x22\x53\xfd\x5d\xed\xbe\xda\x9d\x3e\x56\xba\x25\xd0\x73\x94\xdb\xc2\xe8\xbf\x13\x13\x3f\x1b\xf3\x44\x7f\xa6\xc6\x2f\x5f\x74\x61\x7d\xb4\x6f\xa1\xa9\xe3\xd1\x2f\x87\x8f\xf7\x14\x98\xf5\xbe\xfc\x38\xb6\xdd\x8b\xe7\x0e\xe5\xff\x61\xd8\xff\x75\xdd\xcd\x30\xc6\x10\x76\x9a\xc7\xcd\xcd\x3f\xae\x55\x32\x9a\xd7\xc2\xce\x70\x46\xd9\x6c\x94\x23\xa8\xeb\xcc\x72\xb9\x57\x3d\x55\xf6\x4b\x5d\x7b\xa8\xad\xee\xd3\xa3\x24\xd2\x8e\x27\xef\x4c\xfc\x11\x5e\xb5\x4f\xdc\xa5\x7a\xc4\x6f\x28\xe1\x53\x8a\xcf\x4d\xe7\xf6\xf1\xd2\x5f\x46\xa6\xb7\x55\x87\x72\xd7\x9e\x3f\xe2\x6e\x33\x75\x4d\xab\x27\x89\x97\xd6\x80\x86\xf5\xbf\x9b\x7c\xd9\xe2\xea\x99\xcb\xe6\xe8\xbf\xc3\xff\x17\xec\x2d\xcf\x33\x0e\x9e\x09\x3d\x7a\x6d\xac\x2e\xf6\x38\x53\x16\xe0\x61\xd6\xe7\x9c\x9e\x04\x59\xb7\x9e\x6a\xfd\xbc\x22\xcb\xe7\x33\xe4\xab\xac\x4c\x73\x98\x66\x3b\x97\x85\xc0\xa9\x5f\x5d\x34\xea\x34\xb4\xd3\x47\xe2\xf7\xd8\x2f\xab\x0f\x04\xc7\x79\x96\xfe\x4f\x4c\xd8\xb5\xcf\xcf\x0f\xd0\xfc\x9f\xff\x1d\xa3\x5d\x1f\x7c\xe1\xa5\xe8\xff\xfd\xcf\x7f\x3a\xea\x5c\xa4\x51\xd6\xa4\xa1\x65\x9b\x91\x6d\x7e\x20\xac\xeb\x43\x43\x43\xa3\x49\x43\x77\x73\xac\xe9\xe9\x32\xb3\x02\x82\x86\x86\x66\xd7\x7f\xe7\xd6\x67\xe1\xab\xc8\x5d\xc9\xd0\xdd\x76\x6f\x6d\xd6\xf3\x51\x83\xb7\x9b\xa3\x35\x8d\xbb\x87\xb7\x34\xcb\xcb\x15\xe5\xc8\xdf\xd0\x16\xa3\xd2\xd0\x50\x55\x68\xdc\xdd\x5d\xfe\xdb\x3c\x54\xdc\x2d\x35\xa9\x83\xdf\x8f\x53\xa0\x40\x83\xaf\x54\x3b\x2f\x68\x67\x33\xa1\xb1\xa5\x6d\xa5\x51\x70\x29\xbd\x58\x46\x15\x1b\x40\xff\x86\x8b\xe9\xfa\xff\x47\xd3\xff\x2f\x00\x00\xff\xff\x20\x27\xf5\x96\xcf\x08\x10\x00") + +func fixtures_assetsCarForcenetCarBytes() ([]byte, error) { + return bindataRead( + _fixtures_assetsCarForcenetCar, + "fixtures/_assets/car/forcenet.car", + ) +} + +func fixtures_assetsCarForcenetCar() (*asset, error) { + bytes, err := fixtures_assetsCarForcenetCarBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "fixtures/_assets/car/forcenet.car", size: 1050831, mode: os.FileMode(420), modTime: time.Unix(1636009448, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _fixtures_assetsCarInteropnetCar = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\xdd\x07\x50\x14\x5d\xc2\xe8\xfd\x19\xa6\x09\x02\x92\xd3\x41\x40\x90\x8c\x22\x02\x92\xa3\x48\xce\x92\x73\xce\x39\x23\x49\x69\x82\xa0\x48\x14\x05\x49\x4a\x10\x04\x41\x94\x24\x41\x11\x04\x49\x92\x11\x05\x45\x82\x82\x88\x88\x20\x48\x92\xf4\xd5\xec\xde\xf7\x7b\x9d\xb9\xb7\x6a\x9f\xde\xad\xda\xaa\x47\xaa\xed\xdf\x74\x4f\x87\x73\x66\x1a\xff\xb2\x45\xce\x01\xbe\xbe\x41\x81\xf0\x84\x80\x19\x2f\x0a\xed\x7f\x7f\x9e\x80\xfd\x3c\x53\x5c\x88\xea\xe7\xa5\x88\x80\xcf\x54\x7c\xf0\x16\xdb\x9a\x02\x0d\x7d\xaf\x9b\x0e\xe7\x8b\xa7\x95\xb7\x1a\x32\x8c\x89\xfa\x5c\x43\x9c\x03\x02\xdd\x7d\x7d\xd0\x4f\x09\xfe\xd9\x5f\x48\x53\x42\xa1\x60\x33\xf6\x13\x7f\x4a\x5f\x6f\xec\x75\x4a\xbd\x74\x7c\x11\xa2\xc7\x64\x61\xfb\xd6\x22\x8d\xec\xd5\x47\x6d\xf7\x64\xb2\xbb\xe1\x6c\xab\xa7\x93\x62\x50\x8a\x70\x0c\xca\x8c\x1d\xf5\x1f\xfe\x17\x8d\x7d\xb1\xdc\x28\xb4\x3f\x0d\x3b\x55\x54\x0c\x0b\xf7\x14\xb1\x18\x3b\x81\xc6\x4c\xe6\xc3\xd6\xe7\x79\x29\xea\x59\xca\x3b\x1e\xda\x0f\xd3\x0b\xe0\x5f\xf9\x03\x01\x8a\xa8\xbf\xb6\x8b\xa3\x07\xf6\xb9\x9c\x9c\x12\xe2\x7f\xcd\xf4\x4f\x46\xaf\xa5\x8c\xe2\x50\x88\xc2\x84\xcf\x7d\xbd\x68\x7d\x9d\x48\x09\xb1\xb9\x07\x7f\x2d\xba\xe0\x9c\x24\xc7\x34\x40\x34\xf7\x31\x8d\xbe\xee\xc9\x0f\xe3\x76\xce\x22\x1d\xcb\xb9\xef\x5c\x13\x52\x92\xaf\x1b\xa5\x22\xf4\x84\xfe\x5a\x34\xfb\xdc\xd5\xc7\x8f\x3e\xb1\xdf\xa4\xe5\x68\xd5\x66\xeb\xd1\x6b\xb9\x7d\x66\x42\x49\x9b\xeb\xe3\x71\x8b\x3b\x3d\x18\xa1\x9a\x41\xaa\x2d\x66\xbb\x26\x6b\xed\x2d\x94\x0a\x8a\x70\x73\x0e\xd5\x45\xf0\x4f\x5e\xf6\x03\x37\x65\xfb\x20\xe7\x20\x77\x6f\xe7\x40\x91\x73\xc2\x12\x82\xe7\xc4\x04\xcf\x89\xb1\x9f\x13\x96\x16\x91\x90\x16\x13\x76\xd5\x75\x0e\x0a\xf5\x0d\xf0\x74\x53\x75\xf7\x72\x76\xf4\x75\xf7\x71\x36\xf2\xf5\x74\xf6\xf9\xff\xff\xe8\xf5\xaf\x3f\x5e\xf0\xf6\x0d\xf6\x09\x0a\x2c\xf6\x34\xf2\x0d\xb2\xf7\x32\x0c\xf6\xf3\xf3\x0a\xf3\x16\x39\x73\xee\xdc\xb9\xff\xf9\xbf\x8b\x8e\xbb\x8f\x73\x40\xa0\xb7\xf0\x99\xf3\xff\xfb\x43\x2f\xfd\x00\xdf\x20\x5f\x47\x5f\x2f\x6d\x7b\x87\xc0\x62\x4f\x65\xe7\x10\x67\x2f\x5f\x3f\x6f\x67\x9f\x20\x4f\xd1\xff\x5d\xca\x53\x35\xd8\xc7\x29\xc0\xde\x3d\xd0\xdd\xc7\xd5\x53\xe4\x7f\x7f\xee\xa1\xea\x1b\xec\xe3\x64\x1f\xe4\xee\xeb\xe3\x29\xfc\xbf\x3f\x76\xd5\x71\x0e\x0c\xb4\x77\x75\xbe\xac\x6e\xe4\xe6\x1e\xc8\xee\x1e\xc8\x1e\xe4\xe6\xcc\xae\xe6\xec\xe3\x1c\xe8\x1e\xc8\xae\xe4\xe5\xeb\xe8\xc9\xee\xeb\xf2\xaf\x1f\xfe\xcf\x46\xb0\x2b\x3b\x3b\x3a\xfb\x04\x05\xd8\x7b\xb9\x87\x3b\x3b\xb1\x1b\x06\xf9\x06\xd8\xbb\x3a\xb3\xff\x9f\x4d\x3f\x7b\xe5\x9f\xbd\xa5\xb1\xd0\x5f\xef\x94\xd7\x24\xd3\x77\xf5\x4b\x37\xf3\x69\x3f\xa7\x97\xfa\x96\x5b\x09\xeb\xdc\x90\x74\x71\xc9\xb9\x6b\x60\xf8\xdd\x65\x33\x5d\x53\xcf\xea\xaf\x45\x55\x9e\x0c\xbd\x62\x1f\xfc\x61\x19\xc9\xe2\xd0\xf9\x16\xc8\x49\xce\x2f\x97\xa4\x24\xd2\x07\xe4\x2d\xda\xe6\x91\x3e\x99\x6f\x6f\xab\x25\xfb\x67\xab\x8c\x51\x9e\xd7\x21\xe3\x4e\x81\x63\x2e\xa2\xbe\x13\xc7\x4d\x08\x98\xa2\xd0\xc6\x28\x1a\x17\x77\x2f\x21\x31\xa1\xc0\x7f\x6f\x92\x37\xf6\x4d\xf8\x8b\x8e\x3d\x7b\x2a\xff\xf0\x37\xd9\xf6\xd9\x6f\xda\x1f\x8a\x30\x0c\x02\x3d\x71\xc7\xb5\x30\x35\x09\xc2\x99\x3a\x05\xe7\xd7\xb9\x57\x04\x51\x9a\x28\x32\x8a\x92\x9f\xe7\x0b\x2e\xd0\xb7\xc1\x31\x4a\x28\x8b\xb8\x09\x01\x03\xec\x6a\x8f\xff\x7b\xb5\xf6\x8e\x8e\xd8\x37\xfe\xaf\x35\x66\xd9\x88\x56\x2c\x0b\x8e\x51\x05\x7e\x33\x61\xae\xb0\x5e\xe3\x98\x7f\x70\x7f\xcc\x92\x9e\x08\x2d\xa1\x3d\x10\xe4\xbc\xc7\xee\x88\xd2\x41\x11\x2c\xec\x71\xfa\xe6\x91\x17\x72\xa0\x50\x28\xec\x4a\x9d\xff\xe3\x4a\x73\x99\xd7\xc2\x42\x7d\xf4\x08\xe3\x48\x55\xc2\x9e\x5a\x68\x7c\xd4\x15\xac\x10\x5e\x65\xd1\xac\xee\x2b\x7c\xec\x19\x38\xf8\xa5\x1a\xa5\x85\x1a\x7b\x76\x9c\x7f\xba\x89\xa0\xf5\xbb\x22\x76\x95\x44\x71\x13\x02\x66\x27\xb0\xeb\x64\xf8\xf7\x3a\x43\x9c\x03\xdc\x5d\xdc\x9d\x9d\x02\x9c\x5d\xdd\x03\x83\x02\xc2\xfe\x5a\xb9\x7f\x75\x26\xd9\xac\x76\x21\x9d\xf1\x6b\x06\xff\x5e\x6f\xd7\xed\x4d\x5e\xfb\x80\x4e\x5d\x66\x97\xaf\xe3\xe9\xb7\x34\x69\x36\x68\x50\xff\x5a\x23\xf4\xff\xde\xa1\x7e\xbe\xa1\x38\x3b\x74\x21\x39\xc5\xa2\xe7\x54\xb7\x4f\xdc\x76\xa3\x71\x09\xa3\x89\x63\xff\xf5\xca\xf7\xd4\xcc\xcb\x31\x0f\xf3\x0d\x6b\xd2\x72\x9e\xcf\xa2\x14\x63\x63\x94\x50\x98\xb8\x09\x01\x3d\xec\xca\x48\xff\xbd\x32\xc7\x00\x5f\x9f\xbf\x56\xe2\x3c\xf2\xe1\xbd\x53\x46\xff\xf8\x30\x15\x88\x7a\xe5\x39\xbe\x47\xdc\x36\x14\xdf\x3f\x55\xbd\x4e\x15\xd7\xf6\x36\xe2\x80\xd1\x1c\xa5\x18\xa3\x84\x72\xfc\x8f\x7b\x6d\x46\x25\xa8\xab\xb6\xb0\xc9\xa3\xe7\xf9\x93\xcc\xba\xac\xc8\x5b\xfc\xc9\x97\xbd\x86\x57\xff\xd4\x8c\x2e\x96\xbc\x3f\x11\x9a\x4d\xfa\xaf\xd5\xb8\xfe\xc7\xd5\xa0\x5e\xc5\x9b\xfb\xfb\xb2\xbe\x78\x77\x39\xd9\x29\x6f\xb0\x40\x7c\xca\x27\xce\x31\xbf\x38\xde\x44\x39\x53\x98\xa7\xec\xcf\xc8\x30\x76\xff\x5c\x44\x7d\xfb\x87\x47\x5c\x38\x1f\x7f\xe6\x29\x6b\xd6\xab\x7b\x93\x1c\x5c\xce\x49\x65\x7a\xc9\xeb\xd1\xf3\x9e\x02\x3e\xd5\x28\xb1\x91\x58\xa7\x67\xd1\x85\xf8\x47\x1c\x2a\x6e\x42\xe0\x12\x76\xb5\xe4\xff\x67\xb5\x61\x81\x41\xce\xde\x08\xce\x1e\x94\x62\x4c\x8c\x12\x8a\x10\x7b\x40\x30\x61\xd7\x43\x8b\xfb\xf2\xec\x03\x3c\x9d\xff\xde\x5a\x1a\xfb\x17\xaa\x03\xfe\x5b\x1f\x04\x5c\x98\x3a\x0c\x2b\x69\x6b\x9b\x85\x62\xf8\xe9\x48\x57\x4c\x7a\x45\x4f\x61\xde\x99\xaf\x5d\xfc\xd7\x4e\xd3\x8f\x9b\x10\x30\xc4\xae\x8c\xe2\xdf\x2b\xf3\x0e\xf6\x0a\x72\x0f\x74\x77\xfd\x6b\x3d\xfa\xcd\x42\x1f\xb5\xbc\xea\xd6\x0b\xc7\xe7\xaa\x9d\xc4\xcf\xd3\xeb\x44\x29\x19\x7e\xe9\x35\xdc\x37\x68\x3d\xfb\x86\x8c\x6c\x54\xf7\xdf\x47\x15\x1a\xef\x40\x70\xf7\x71\xff\xfb\xc5\xac\x9d\x09\xb3\xa1\xcd\x8d\x24\x2d\x08\x11\x89\xb2\xa8\x1d\xa6\xd7\x64\xce\xdf\xba\x60\x76\xb9\x61\x5e\x20\x8c\xfd\x34\xbd\x64\xc5\xbf\x57\xe2\xf4\x1f\xdf\xc2\xb0\x79\x71\xbf\xae\x5d\x8e\xd3\x5c\x16\xf7\xa7\x2c\x19\x4a\x66\x14\x25\x39\x27\x24\xa6\x15\x18\x28\x35\x38\x62\xb6\xbb\xe5\x08\xfe\xaf\xf3\xe7\xd2\x7f\x5c\xe5\xef\xbe\x39\x21\xd6\x80\x14\xda\xcb\x8f\x42\x0f\x9a\xea\xce\x9c\x24\x63\x9d\x7e\x2e\x69\xde\xed\x87\xe1\x48\x70\x3a\xa7\x92\xf1\xe5\xdf\x2f\xcd\xe5\x3f\xae\xc7\x8f\xab\x4a\xcc\x3c\xb6\xe3\xd0\x45\x6f\xe8\x91\xa6\xf8\x5d\xc8\xfb\x42\xee\x69\xf2\xef\x76\xb6\x2f\x4d\x3f\x7d\x1b\x51\x32\x53\xc4\x79\x69\xd8\x77\x92\x00\xef\x80\x08\x70\x0e\xb5\x0f\x70\xfa\x6b\x8d\x5c\x4f\x6a\x54\xed\xb3\x8d\xc2\x56\xc6\x1e\x98\x91\xd4\xc5\x30\x93\x1a\xd2\x6e\xaf\xc7\xd4\xc5\x97\xe8\x6e\x06\x4a\xb0\xdd\x58\x42\xe9\xa0\x30\xc9\x5f\x29\x23\xb3\x93\x29\xfb\x51\x28\x54\xcc\x45\xd4\xd2\x3f\x3c\x76\x8d\xa9\x88\x58\x0c\x4d\x09\x4c\x22\x87\x72\xb3\x99\xcc\xd5\x32\xa3\x37\x3d\x5d\xc1\xb7\xea\xae\x97\x4c\x96\xf5\x6c\x24\x73\x4b\x7f\x1f\xbb\x7c\xff\xef\xb5\xfd\xdf\x3f\x59\x22\xf8\x67\x97\xe2\xd4\xbf\x5e\xc8\xd3\x33\xee\x4e\x57\x68\xcc\x1c\xdf\xb4\xc9\x35\xd9\x64\x55\xcd\x1a\xea\xff\xf4\x3f\x72\x34\x18\xfc\x51\x2f\x11\x42\x49\xf4\xc4\x57\x51\xf1\xaf\x85\x19\x98\xc2\x6d\x23\xbb\x2f\xec\x8c\x5f\xae\xbf\xb1\x9d\x12\x95\x2f\x7e\xfd\x74\x8c\x4f\x7f\x82\xfe\x5b\x8b\xdc\xf7\x07\x53\x5e\xc2\x8a\x9a\x28\x88\x6a\x3c\x3e\x0d\x3b\xda\xf9\xeb\xaf\x31\x1d\x7a\xf4\xdb\x17\x17\x7b\x92\x4b\xc8\x6a\x4a\xa7\x94\x6a\xc1\xa7\xd7\xfb\x72\x0d\xa2\xf5\xd3\xf2\x2e\xbf\x25\x31\xbe\x41\xfe\xd7\xa2\x85\xca\x5b\x5b\x4d\x67\x8b\x76\x32\x48\x19\x96\x9a\x3c\x9f\x6f\xe6\xb4\x6d\x0b\xa2\x0c\x47\x83\x23\x4d\xf5\x92\xb8\xda\x2f\xdb\xff\x7d\xb6\x66\xea\x4f\xfc\x2e\x50\xd9\x69\x90\x5b\x4d\x7a\x5f\x28\xd7\xc5\x9c\xa0\x41\x3c\xf1\xf1\x11\xeb\x94\xe5\x43\xe3\x8c\xec\x23\x9e\xbf\x16\x55\xa8\x7a\xe7\xe1\x54\x27\x5d\x57\x3e\x40\x25\xb7\xb0\xad\x1a\xab\x34\x3a\x32\x0a\x47\x96\x6f\xce\x19\xe7\xa6\xdb\x81\x77\xf7\xa4\x08\x57\x99\xc0\x5f\xcb\xff\x28\x63\x57\xa2\x4e\xfe\xea\x46\x4f\x62\xdc\xc1\x2c\x58\xb1\xf1\x98\xeb\xac\x4b\x5f\x79\x0b\xdf\x89\xa0\x27\xa5\xc6\x8a\x51\x2b\x8a\x9b\xf6\xff\x6c\xef\x25\x29\xa1\x5c\x94\x50\x2e\xd1\x5b\x66\x3c\x28\x2e\x12\x34\x0d\x7b\xf5\x69\xe3\xf6\xfe\x68\xb6\xa2\x9b\xae\x8f\x6f\xc7\xc4\x3a\x77\x2e\x2c\x9e\x64\x47\xf7\x7c\x35\x0c\x18\xec\x2e\x33\xf0\x72\x4a\x8e\x26\x66\xc6\x8e\x23\x09\xd8\xb7\xf8\xfe\xd9\x2e\x87\xa3\xf9\xff\xd9\x4e\x8e\x51\x8c\xb6\xff\x67\xfb\x38\x8e\x88\x00\x1d\xab\xae\xf8\x7f\x46\xad\x7f\x8f\xb0\xbd\x4e\x2e\xad\x4d\xbf\x2d\x65\xb3\xb4\x4f\xfa\xc6\xfb\xfc\xb8\x39\x11\xe3\x49\x07\xce\xb4\x32\x27\x61\xf9\x7c\x7a\x3e\x27\xcb\x8e\x68\xeb\x7f\xb6\x5c\xac\x3a\x76\xcd\x8a\x78\x6b\x3f\xfb\xe9\x09\x6a\xca\xbd\xce\xdd\xf5\xe9\x9a\xc7\xe6\x91\xd1\xd2\xe9\x12\x4c\xa9\x9e\x57\x4e\xfd\x39\x27\x91\x16\xe5\xdd\xa6\x5f\xd1\x62\xff\x6c\xb9\x7f\xaf\x1d\xfd\xaf\x11\xb7\x12\x14\xc9\xff\xcf\x0e\x17\x25\x28\xb2\x89\xf0\x9f\x1d\x2e\x71\x84\x68\x80\x9e\x8d\x55\x3e\xba\x8a\x42\xfd\x7d\x2e\xad\x25\x2b\x94\x91\x54\xf7\xa1\xe2\x4d\x6f\xc6\x34\x1e\x69\xa9\x5a\x11\x7c\x10\xa3\x55\x38\xae\x4e\xf9\x5b\xea\x9a\x66\xd9\xc0\xea\x5f\x8b\x4a\xad\x8d\x3e\x54\xbe\x31\x5d\xf9\x34\x37\xb0\x88\xed\xb3\x8c\xec\xe5\xb0\xa4\xcf\x16\x4f\x94\x2f\x1d\xd9\x5b\x0b\x78\x89\x0b\x7c\xf9\x7b\xb7\x8c\x4d\xed\x4c\xd2\xf6\xee\x13\x9d\x0d\xb5\xbd\xfd\x54\x6d\x23\xb8\x86\xbb\x63\x57\x82\xf8\xcd\x51\xa5\xac\x9f\x36\xac\x7a\xe5\xaf\x45\x4d\x47\x9a\xef\x93\x4a\x0f\xba\xbd\x78\x96\xbf\x20\xea\x3d\x26\xa3\xf0\xf5\xca\xd7\xcb\xf2\xa8\x39\x03\x1d\x85\x85\xd7\x0e\xb5\x77\xfe\x5a\xf4\xe6\x6b\xba\xa8\x9d\x85\x1f\xe1\x15\xd7\x85\x27\xf7\x32\xd8\x37\xf2\xaf\x85\xe6\xbd\x56\x8f\x9d\x79\x30\xd1\xfe\x7e\x54\xf9\xec\xdf\x9b\x25\xde\x08\x1d\x73\x7a\xd5\xf6\x50\x4d\x6e\x25\x3c\x3b\x67\xf0\x76\x42\x9e\xa6\x76\xfa\x03\x60\xd5\x62\xec\x71\xc0\x9b\x33\xb6\xfb\xd7\xa2\x51\x09\xd7\xf2\x7c\x1c\x2e\x54\xe7\x97\x64\xf4\x77\x71\x5e\xb7\x0c\xab\xa8\x90\xed\xd9\xd4\x3e\xc1\x03\xad\x8d\xf3\x70\x24\x0a\xfc\xb5\xa8\xe1\x1d\xb7\x6d\x83\x7b\x73\xa2\x6e\xac\x9d\x2e\x4e\xdd\x72\xc6\xbe\xde\x87\x65\x34\x73\x62\x29\xd7\x3b\x3e\xcb\x35\x74\xf3\x0c\xfc\xb5\x68\x25\xd1\xce\x66\x87\x08\x79\x97\x61\x05\xbf\x1b\xff\xf1\xf5\xfe\xdb\x1a\xef\xde\x73\x0f\x6d\x32\x6a\x10\xc7\x6b\xf0\xec\x7b\xeb\xfc\xb5\xe8\xd5\x1b\x71\x2d\x62\xc9\x91\xbf\x5f\xf2\x44\xe5\x1b\x6f\x10\xb6\x62\xb6\xf7\xbb\x48\xd8\x87\xb2\xbf\x86\x07\x19\x53\x7f\xd8\xfa\xf4\xd7\xa2\x4a\xce\x5c\xf7\xc2\x62\xe5\x82\x0c\xdf\xa1\x1b\xec\x2c\xb8\xef\x7a\x86\xfa\x98\x53\x96\xe9\xbc\x99\xb2\xef\xb2\x09\x66\xef\x3c\xf6\xf7\x5b\xe0\xfd\xc4\x38\x9e\x98\x4e\xba\xa1\x7b\x9c\x55\x82\x7b\x3f\x69\xf5\x8a\xdb\xea\x0e\x2c\x2f\x2a\xac\x78\xa5\x88\x85\x3f\x7e\xed\xaf\x45\x77\x0b\xf2\xa6\x8d\x2c\x38\xa3\x97\x1b\xf6\x1f\x4c\x8b\xf3\xb8\x15\x17\x09\x14\x8b\x91\x05\x2e\xa4\x1e\x88\xf2\x71\x0f\x2d\x7b\xfe\xb5\xe8\xe3\x32\xf6\xc2\x21\x87\xbb\x3d\x69\xa3\xeb\x2d\x67\x73\x62\x18\x59\x0a\x5c\xbc\xfb\xbd\x7f\x31\x25\xdd\xd5\x10\x8a\xa2\x1c\xe0\xfd\xfb\xb5\xb2\x9c\x6b\xcf\x8c\x37\xdd\xba\x70\xb2\x3a\x63\x01\xc3\x97\xfa\x88\x77\xf4\xa6\xb7\x99\x1b\x57\x6b\x83\x13\xb4\x28\xe1\x62\x18\xfd\x0c\xfc\xb3\x43\x30\x56\xf9\xe8\xe8\xe8\x28\x3a\x9b\x3d\x19\x45\x3c\x21\x60\xc6\x8f\x42\xc7\x7c\xc6\xc0\xdf\x08\xd8\x2d\xa7\xbc\xe6\x7e\x93\x67\x09\x08\x71\x3f\x73\xb1\x67\xab\x73\x66\xec\x89\x25\xa0\x53\x9b\x38\x97\xc8\xf4\xa8\xcd\x5d\xf7\x82\x0f\x0c\x30\x6d\x28\x66\x14\x63\xf9\x90\xa2\x3a\x8a\x60\x53\x6a\x16\x85\x42\x69\xa0\x08\x4e\xb3\x24\x45\xff\xeb\xbf\xd0\x83\x41\x5c\x83\xee\x1d\x74\x1a\x28\x4c\x73\x5a\x9b\xe9\x9b\xe9\x00\x94\x62\x32\x1a\xd7\x38\xae\xbc\x6a\xf3\x7b\xbc\xb5\x30\x51\x31\xcc\xb2\x86\x5a\x2f\x88\xb7\x7e\x3b\x97\x82\xa8\xc5\x73\xb0\x53\xb9\x84\x29\x4c\x55\x1b\x06\x98\x76\xc4\x06\x01\xae\x61\x9a\xe9\x96\xb8\x4e\x9a\xb2\x73\xac\x94\x44\x65\xc1\x31\x2e\xed\xfe\xcd\xc3\xfc\x1e\x85\x58\x05\x06\x82\xb0\x31\x5b\xc3\xaf\xdc\x30\xc0\xbc\x42\x6c\x60\x70\x8d\xeb\x64\x01\x91\x2a\x0f\xbf\xd8\x97\x33\x70\xf1\x19\x15\x09\x7a\x86\xdd\x28\xce\x58\xef\x4d\xa4\x38\xb7\xce\xee\xe6\x3f\x7a\x4f\x0b\x06\x98\x0e\xc4\x06\x84\x6b\x90\xd2\xac\x7b\x1e\x3a\x70\x1e\x77\xe6\x5a\xba\x2b\x57\x59\x45\x4b\xa0\x47\xf4\xd0\x22\xf5\xb4\xd1\xc0\x3a\x09\x0f\x2f\xe6\xba\x0d\x0c\x30\x9d\x88\x0d\x42\xbc\xf7\xe3\xd4\xb6\xb4\x49\x44\x40\xf2\xd8\xd1\x40\xd4\xbd\xa2\x92\xa3\x44\xdb\x83\x4f\xd5\xd1\x09\x53\xc3\x69\x9a\x9c\x7b\x2f\x3d\x5c\x60\x80\x79\x8d\xd8\x20\xc2\x35\x94\x3e\xfe\xae\x2c\xd3\x9e\xb7\xb1\xd9\x3a\xe6\xfe\x3e\xb1\x8d\x28\x2b\x28\x50\xc1\x27\xb5\x3d\xbe\x75\x6d\xf2\xf2\x47\xe9\x36\x3f\x18\x60\xba\x10\x1b\xc4\xb8\x06\x1b\xc6\x57\xff\x5b\x8c\x5e\x29\x2f\x73\xef\xa5\x67\x86\x0e\xbf\xf4\xa3\xee\xa5\x4c\xb9\x48\x92\xd4\xde\xd2\x49\x4a\x5a\xd2\x61\x84\x01\xa6\x1b\xb1\x41\x82\x6b\x8c\x9f\x76\x1b\xf4\x30\xba\xbe\x27\x90\x92\xb0\x53\xc3\x9b\x2e\x47\x6d\x7b\x9f\xa9\x6f\xa1\xff\x46\xe5\xe7\xd4\xa9\xf3\x9b\xd6\xf4\x30\xc0\xf4\x20\x36\x8e\xe1\x1a\x27\x24\x23\xb4\xbe\x8f\x72\x9c\xd4\xbf\x4c\xb1\xa6\xdf\x60\x7d\xe3\xeb\x94\xb2\xed\x7c\x59\xd0\x4f\x53\xf6\xe2\x8e\x7b\xbc\x1b\x7c\x30\xc0\xf4\x22\x36\x48\x71\x8d\xcb\xfe\x6c\x3a\xe1\x0a\x73\xe5\x2f\x0b\x9c\xef\xcc\x7a\x93\xbb\x67\x3f\x51\xb3\x95\xc9\x3b\x24\xee\xbd\x6b\x71\x26\x33\xf8\x0d\x1d\x0c\x30\x7d\x88\x0d\x32\x5c\xe3\xad\xf1\x57\xa1\xd2\x6d\xb9\x49\x8e\xd6\xbb\x0b\x65\xbe\x4d\x67\x0a\x69\x59\xca\x9c\xec\xe6\x48\x0b\xd9\x04\xee\x5e\xdd\xc4\xa8\xc2\x00\xf3\x06\xb1\x41\x8e\x6b\xb4\xbd\xb8\xff\x72\xe1\x73\xec\xda\xc0\xd5\x0b\x56\x6c\x37\x23\x6f\x7c\xf1\x1e\xbd\xa6\x25\xf4\x9a\x74\x40\x9d\xb2\xe0\x66\xe7\x21\x0d\x0c\x30\xfd\x88\x8d\xe3\xb8\xc6\xd4\x73\xd7\xae\xef\x76\x74\xaa\x46\x3f\x08\x0b\x7b\x2e\xb7\x62\x78\xd5\x0b\xcb\x05\x18\xf7\xe8\xa0\xaf\x9e\xfa\x6d\xf7\xc3\xcf\xc2\x00\x33\x80\xd8\xa0\xc0\x35\x9a\xab\x57\x14\xf9\xeb\xa3\x7d\xe5\x7b\x50\xe4\xf2\x44\xcc\xcc\x9f\xc4\x77\x30\x63\x89\x0e\x5c\x7e\x8b\xcc\x75\xeb\x37\xcd\x15\x61\x80\x19\x44\x6c\x50\xe2\x1a\x2c\x7f\x06\xd6\x63\xa4\x09\x64\x5e\x3d\x57\x93\x2d\xbc\x9f\x57\x93\x1f\xf6\xae\x9f\xf3\x8f\xee\xb3\xa3\x3b\x5b\xd3\x9f\x8e\x5c\xd4\x60\x80\x19\x42\x6c\x50\xe1\x1a\x6b\x17\xa9\xea\x7d\xdb\x3f\x94\xb7\xb7\x24\x85\x1f\x90\xac\x05\xef\x24\x1f\x2a\x4b\x71\x29\x2c\x45\xc8\xf9\x53\x30\x48\x2f\x3a\xc2\x00\x33\x8c\xd8\xa0\xc6\x35\x7c\x22\x7d\x9e\xdd\x79\x11\x33\x27\xf2\x40\xeb\xd6\xb7\x70\x0f\xc2\xee\x03\xa7\xdb\xcb\x2f\xf2\x5d\x43\xd6\x6e\xca\x4b\x70\x64\x32\xc1\x00\x33\x82\xd8\xa0\xc1\x35\xdc\xe5\x3f\xb9\x13\xdc\x0e\x53\xde\xf8\xfa\x7c\x56\xb1\xb1\xb2\xef\x59\x5b\x67\x7e\x68\x14\x3f\x2a\x7f\xde\x4f\x6e\x48\xfd\xe3\x29\x18\x60\x46\x11\x1b\xb4\xb8\x46\xac\xfe\x5c\xe3\xd8\x00\x1b\xc5\xb2\x67\xa1\x2a\x5d\xcf\x35\x43\x06\xd9\xf4\xda\x57\x0c\x0a\x1d\xda\xf5\x8f\x1b\xc9\x38\xf4\xb0\xef\xf9\x18\x62\x83\x0e\xd7\x78\xad\x72\xbb\xfc\x6c\xbd\xd3\x59\x8d\x94\xf9\x8e\x72\x51\x87\xe7\x41\x9f\xc8\xae\x2b\x72\x9c\xfd\x6d\xe9\x42\xa9\x44\x71\x6d\x17\x7b\x6d\x7f\x8b\xd8\xa0\xc7\xbb\x47\x1d\x88\xee\x7a\x5b\xed\x87\xb3\x97\xcb\xde\xfb\xc3\xd3\x30\x96\xc0\x26\x18\x63\x3b\xb0\x17\x7c\x45\xe8\x72\xbd\x87\xb5\x89\x3d\x0c\x30\xe3\x88\x0d\x06\xbc\x71\xc9\xa6\x4d\xa6\xec\xf3\x65\xf4\x95\xdf\x9b\x01\x2b\x23\x61\xf7\x3c\x04\xbf\x29\xde\xba\x4e\x63\x6b\xef\xcb\xac\x28\xc2\xfd\xd5\x12\x06\x98\x77\x88\x0d\x46\x5c\x43\xaf\xb0\x23\x6a\xa1\x96\x7f\x55\xe9\x90\x34\x6f\x26\xbb\x59\xbd\x64\xce\x0f\x8a\x88\xfc\x9a\xa2\x74\x67\x62\xe7\xcc\xe5\x1d\xec\x71\xf5\x1e\xb1\xc1\xc4\x84\x8b\x70\xb5\x3c\xdc\x79\x33\x64\x7c\xba\xeb\x19\x1f\xf5\xab\x5b\x7f\xa6\x26\x86\x72\x4b\xe4\x34\x37\xfa\xa6\x76\x27\x53\x3a\xf4\xaa\xb1\x3b\x6b\x02\x39\x02\x70\x91\x1c\x4a\xfd\x15\x14\xb1\xef\x7c\xd8\x0d\xb6\x41\x72\x72\x40\xf8\x3c\xf9\xae\xa1\x1b\xd5\x8b\xfd\xdb\xb7\x9f\xd9\x9e\xcd\x60\xd1\x87\x01\x66\x12\x39\xc2\x8c\x8b\x70\xde\x85\x3c\x96\x76\x9a\xd9\x88\x27\x59\xb9\x2b\x69\x78\xa7\x9f\x6f\xbf\x5d\xde\x26\x92\x4c\x77\xed\x53\x25\xbe\xdb\xdc\xa1\x00\x03\xcc\x07\xe4\xc8\x09\x5c\x24\x31\x4e\x9b\xed\x6b\x51\x6d\xef\xca\xf0\x1e\xa1\xa3\x55\xc6\xea\x29\x6f\x01\xc1\x6b\x33\x5e\x91\x3f\x95\x4f\x9a\x36\x3f\x4e\x24\x86\x01\xe6\x23\x72\x84\x05\x17\x91\x34\x7e\x6f\x34\x98\xf1\xb3\x31\xaf\x51\xf2\xfd\x99\x07\x86\xbc\xc3\x57\xf5\xab\x3f\x8e\x4a\xec\xa8\x24\x97\x04\x00\xcf\xf3\xd8\x9b\xc8\x14\x72\x84\x15\x17\x89\x2a\x1d\xa0\x1b\x60\xd0\x91\xc9\xa2\xbe\x42\xd2\xed\x61\x27\x38\xe4\xb7\xe3\xf8\x2d\x2b\x6e\xb6\xe7\xf8\xc6\x8d\x79\x9a\x54\x19\x18\x60\x3e\x21\x47\xd8\x70\x91\x9e\xeb\x53\x3a\x60\x5e\xea\x95\x19\xc1\x0b\xa6\xa3\x5f\x84\x41\x3f\x5b\x28\x1a\xef\x2c\x92\xee\xb7\xc9\x79\xf2\xbc\x33\xbf\x00\x60\x80\x99\x46\x8e\x9c\xc4\x45\x6c\x5b\xc6\x7f\xb0\x5d\x24\x54\xe8\xcb\xa5\x5e\x88\xfe\x79\x70\xa1\xcc\x7c\xdb\x35\xba\xeb\x38\xea\xf1\x1e\xe6\x60\x16\xed\xac\x0b\x03\xcc\x0c\x52\x64\x08\xfc\xb3\x09\xf1\xff\x4e\x5c\x98\xd8\x71\x5f\x55\x92\x4e\x4d\xc5\xec\xf6\xd5\xba\x32\x3d\x3e\x12\xeb\x18\xbf\x3e\xb6\x8b\x9f\x6c\x1b\x22\x07\x3d\xf7\xe2\x98\x3e\xe9\xce\x9c\xb8\x08\x03\xcc\x2c\xf2\x4d\xe7\xc0\x45\xd6\xab\xc3\x82\xb3\x46\x4e\xd5\x10\x56\x51\x7c\x58\x69\xaa\xf6\xb5\x3f\x14\x11\x29\x3f\x15\xa9\x9b\xe1\x62\xf6\x22\x90\x6c\x4e\x05\x06\x98\x39\xe4\xc8\x29\x5c\x84\x04\xee\x68\x7e\x99\x53\xcb\x51\x43\x98\x26\x65\xbc\x3f\x56\x9c\xe2\xdb\xea\x1f\xee\xff\xab\x62\xfe\xee\x17\x6b\x39\x95\x27\xde\x30\xc0\x7c\x46\x8e\x70\xe2\x22\x82\xc3\x14\xf9\x2b\xd6\x98\x43\x7e\x3e\x96\x47\x1c\xe3\x63\xfa\x8c\x2d\x57\xa7\x27\xa6\x12\xbc\x6f\xff\x52\xfe\x98\x8b\x99\xc4\x5e\x87\xbe\x20\x47\xb8\x70\x11\xed\xd7\x6d\x5e\x13\x5a\xe9\xca\x2e\x77\xd8\x2a\x2e\xee\x9d\x65\x56\xcd\x3b\x5e\xa8\x4b\x32\x7c\xc5\xa8\x6b\x01\xad\xe7\x28\xc2\x01\x03\xcc\x3c\x72\x84\x1b\x17\x09\x7c\x27\xba\xe9\xe2\xee\xcc\xcd\xc8\xf8\x27\x59\xf0\xa8\x8b\x52\xfc\xfb\x56\xb8\xfc\x08\x7a\x4c\x45\x74\x59\xb8\xb8\xa2\xc5\x00\x06\x98\x05\xe4\x08\x0f\x2e\xb2\x59\xfd\x43\x70\xa3\xf8\xe1\x68\x93\x90\x1a\x7d\xd1\xa5\x98\x30\xfb\x87\x60\x96\xb9\xfa\x0e\xa6\x61\xad\x55\xc3\xfc\xe0\xea\x79\x18\x60\xbe\x22\x47\x78\x71\x91\x72\x32\xde\x83\x94\x1d\xfa\xea\x81\x4e\xaf\xfb\xcf\xba\x56\xc3\x74\x1b\x04\xcd\xd8\xcf\xea\xfe\xe9\x7a\x74\xff\x42\x4c\xc5\xb6\x3a\x0c\x30\x8b\xc8\x11\x3e\xbc\xdd\x15\x11\x0e\x1e\x15\xd5\xa9\xfc\x20\x7d\x52\x26\x42\xfe\x45\xbc\x89\x69\x78\x7c\xe9\xfa\x9d\xac\x94\x7a\x5d\x99\xd2\x0f\x07\x92\x30\xc0\x7c\x43\x8e\xf0\xe3\x22\xfb\xa7\x0c\xb6\xa9\x56\x6f\x71\x99\x85\xb5\x8e\xd8\x1a\x6d\x0c\x5d\x8c\x9a\xf5\x99\xa1\xcd\x52\xba\xab\xc7\x36\xf6\x28\x86\x50\x1c\x06\x98\x25\xe4\x88\x00\x2e\xa2\xe5\xe4\x38\xfc\x44\x9e\x97\xfa\x3d\x90\x98\x43\x5b\x65\xf6\x8a\x28\xeb\x66\x84\xcf\x95\xb9\xd3\x9c\xbd\xed\x7f\x57\x6a\x10\x3b\x37\xfe\x8e\x1c\x39\x8d\x8b\x78\x5f\x2d\x55\x9f\x28\xb8\x39\xfc\x28\x9c\x23\xd5\x62\x61\x8f\xfa\x74\x69\x7e\x8b\xce\xec\x23\x8b\x08\x6b\xd9\xcf\x09\x0f\xd2\xb1\x97\x95\x65\xe4\xc8\x19\x5c\x84\xfb\x87\x94\x52\x07\x87\x59\x59\x8e\xd6\x89\x8d\xb2\xd0\x1d\x1b\xcc\x39\x19\xbb\x85\xfe\xd7\xc4\x55\xfd\x5a\x8b\xc0\x64\x10\x7b\x59\xf9\x81\x1c\x11\xc4\x45\xd2\xcd\xf8\xc9\x6e\x46\x06\xbc\x67\x67\x0d\xaf\x38\xe3\xfb\x92\x89\xa2\x6f\x52\x96\x4c\xfb\xaa\x15\x3d\xaf\xbe\x58\x9e\x5f\x01\x76\x08\xb5\x82\x1c\x39\x8b\x8b\x08\x3c\x95\x25\x7e\xf7\x0a\xd6\x30\x7b\xfb\x55\x40\x6a\xd3\x85\x93\xeb\x76\x88\x26\xe1\xc4\x0b\xcd\x8b\xe4\xc5\x9e\xeb\x62\xf9\xd8\x39\xc6\x4f\xe4\x88\x10\x2e\x52\xa4\x7c\x70\x97\x9b\xcf\x57\xa0\x76\xc9\x57\xd0\xe6\x49\xa7\xf4\xef\x44\xe7\xd9\x19\x05\xdb\x99\x20\xb9\xa2\xf8\x3b\x09\xf6\xd8\x91\xc7\x2a\x72\xe4\x1c\x2e\x72\xf2\x26\xe3\x67\xfa\x1c\xb2\x1b\x32\x04\xf7\x3d\x35\x15\x2f\xbe\x76\xd2\x00\xe1\x34\x75\x06\x30\xfc\x14\x4e\x35\x26\x1c\xbc\x04\x03\xcc\x1a\x72\x44\x18\x17\x81\xa4\xed\x4c\xf6\x1f\xf2\x1c\x8b\xe7\x1c\xd9\xa4\x0e\x2d\xfe\xc0\x57\xde\x3f\xd5\x71\x83\x48\x68\x3a\xdb\x85\x16\x90\xf5\x11\xc0\x00\xf3\x0b\x39\x22\x82\x77\x3f\x59\x1f\xce\x2c\xb7\x0a\x10\xbc\xa1\xa6\x7f\xb6\xfa\x51\xc3\x68\xaf\x07\x2a\xab\xdc\xaf\xe3\x96\x74\xab\xa7\x93\x82\x6f\x83\x07\x0c\x30\xeb\xc8\x11\x51\x5c\xe4\x5a\x9f\xc4\xe3\x34\xb6\xab\x4f\x3a\xe2\xaf\xf1\xd2\xa0\x1c\x4a\x5f\xa7\xdf\x59\x5a\x89\x1b\xc8\xe2\x23\x81\x45\x58\x57\x6e\x92\xc3\x00\xb3\x81\x1c\x39\x8f\x8b\xbc\x0c\xcb\xaa\x86\x2f\x9e\x6f\x57\x17\xce\xe9\xac\xb3\xfb\x64\xc4\x2f\x67\x22\x20\x17\xa3\x19\x26\xf9\x90\x62\xef\xcb\x4f\x4a\xec\xb5\xeb\x37\x72\x44\x0c\x6f\x1a\xe0\x99\x22\xe8\xb3\x47\x47\x24\xc9\xfb\x22\xfe\xb7\xd3\xa3\x45\x2a\x9d\xec\x3b\xcf\x76\x9b\x5f\x92\x2a\xb9\x47\x97\xf2\x0e\x63\x2f\x2b\x9b\xc8\x11\x71\x5c\xa4\xfa\xbc\xa1\xbb\xd4\xb1\xd7\xdf\xa6\x1f\x0a\x78\x44\x08\x7a\x9d\x97\x16\x9c\xca\xbd\xaf\x75\x3c\xd1\x57\x6d\x22\x86\xfc\xfa\xbc\x31\x0c\x30\x5b\xc8\x11\x09\x5c\x44\xb9\xae\xbd\xb2\xd2\x67\xe9\xca\xca\xa7\xe7\xa5\x4e\xb4\xce\xec\xca\xfb\x1b\x7c\xa4\xbe\xe3\x7e\xdb\x0e\x2d\x76\x11\x6c\xe7\xa9\x60\x80\xd9\x46\x8e\x48\xe2\x22\x64\x55\x31\x49\x47\x31\x99\x17\x28\x83\x18\xb5\xb7\x57\x28\x54\x9d\x3d\x4e\x8b\x6b\x91\x0e\xbd\x88\x31\xdd\x39\xad\xb6\x13\x77\x06\x06\x98\x1d\xe4\x88\x14\x2e\x52\xd7\xce\xf4\xf8\x4c\x7d\x11\xdd\xe5\x52\x76\x5b\x53\x3d\xca\x4d\x06\x3f\xa7\x5e\x5a\xeb\xbd\x1a\x0b\xea\xa0\xfe\x64\xa3\x48\x33\x18\x60\x76\x91\x23\xd2\xb8\xc8\xcc\x1e\x6d\xc8\x44\xbb\xd6\xa3\xc7\xa3\x9a\x97\x4c\x2d\xfb\x5e\xd2\x76\x18\xd0\x5f\x6d\x89\x1e\x97\xef\xf1\xad\x8b\x28\x2e\x16\x84\x01\xe6\x0f\x72\x44\x06\x17\x19\x8b\x2f\x5e\xc9\x6a\x90\x74\x4e\x34\x0a\xad\x18\x47\xf1\xae\x0e\x2f\x47\xd5\x5d\x4d\x0f\x70\xcc\xf3\xcd\x32\x88\xd8\x4f\x74\x80\x01\x66\x0f\x39\x22\x8b\x8b\x04\x37\x06\x4c\xb3\x6d\xcc\xb7\x68\xc5\xcd\x8d\x70\x18\xf3\xb0\x52\xed\x05\x3a\x93\x67\x45\x9e\xb1\xf3\x26\x70\x2a\x3b\xd0\x3d\x0d\x03\xcc\x3e\x72\x44\x0e\x17\x99\x0e\xf7\x3f\xa6\x50\xbf\xfb\x5d\x75\x2a\xe2\x06\x57\x8a\x07\x43\x67\x4b\x4f\x9d\x70\x89\xce\x0a\x5d\x7b\xa7\x9b\x5a\xe0\x96\x36\x0c\x30\x07\xc8\x11\x79\x5c\x84\x81\x62\x36\x8e\x2c\x55\xab\xe0\x68\xf2\x2a\x13\xbd\xa5\x4b\xdd\x8e\xcb\xb2\x32\x4f\x49\xe0\x01\x03\x50\xbc\xb4\x19\xf1\x11\x7b\x32\x1e\x22\x47\x14\x70\x91\xb2\xab\x1e\xb3\x7e\xfa\x29\x36\x6e\x03\x92\xee\x64\x2c\x0b\xd7\x48\x5a\xeb\x07\x77\xbf\x15\x3e\xe4\x1d\x6a\x58\x3a\xb9\x34\xc8\x0b\x03\xcc\xd1\x7f\x3b\xa1\xf9\x4f\x5f\xdb\xfd\x35\xa1\x51\xc4\x7d\x55\xf6\x2b\x86\xbe\x5a\x94\x9f\x62\x88\xbe\x0f\x75\xd2\xdc\x5b\x68\x23\x77\x8b\x40\x71\xae\xa9\x15\x24\x15\x4f\xbf\x1c\x1b\x26\xf3\x82\x01\x84\x42\xbe\xe9\x17\x70\x91\x1d\x55\x7a\xb2\xd3\x51\xef\x53\x02\x66\x0a\x37\x6d\x17\x09\x3d\x42\x1e\x59\xe7\x51\x9b\x5c\x1e\x2b\x4e\xa5\x62\x99\x90\xdd\x14\x84\x01\x84\x46\x8e\x28\xe1\x22\x26\x42\x85\xc4\x95\x14\xf4\xa7\x8d\x27\xb5\x72\x2a\x6e\x9e\x0c\x75\x3b\x67\xdf\xf5\x94\xb6\x84\xbc\x27\x93\xb1\xcf\xc2\x67\x52\x03\x06\x10\x01\x72\xe4\x22\x2e\xd2\xaf\x92\x2f\xf0\x5e\xf0\x6e\x3d\x49\xe2\xa6\x27\x2b\xb9\x4c\xcc\x1a\x18\x90\xd1\x66\x12\xe0\xcf\xfd\x75\x3a\x61\xdc\x8f\xc3\x11\x06\x10\x06\x39\xa2\x8c\x8b\xcc\xe5\x52\x65\x74\xce\xc4\x94\x71\xdf\x76\xaa\x59\x78\x6d\xf5\xf9\x5d\x7a\x6a\xb7\xe7\x83\xe3\xbf\x42\x8b\x63\xdf\x51\x52\x0f\xf9\xc0\x00\x82\x90\x23\x2a\xb8\x88\xc3\xe5\x92\xf7\xda\x3b\x44\x27\x2e\xf3\x10\xe8\xfe\xba\xf6\x31\x53\xe8\xe0\x19\xa6\x75\x7f\x21\xa2\xd5\x33\x2e\xa2\xe8\x1c\xb3\x3f\x0c\x20\x42\xe4\x88\x2a\xde\x17\x64\x39\xcc\xfc\x6b\x19\x59\x76\xd6\x65\x45\xe9\x81\xfd\x6f\x78\x7b\xbb\x7f\x6b\xd3\x51\xb8\x9f\xf5\x0a\x7f\x22\x7d\x58\xa9\xac\x02\x03\x88\x08\x39\xa2\x86\x8b\xdc\x68\x31\xae\x56\x2e\xbd\x34\xec\x62\xc8\x1f\xdf\xfb\x72\xd4\xaf\x7f\xda\xd7\xe8\x4e\x49\x50\xed\xe0\xbb\x68\xa7\xfa\x9a\x76\x57\x18\x40\xc4\xc8\x11\x75\x5c\xa4\x50\x71\xe4\xa2\xcf\x99\x5e\x9a\x11\x9d\xa8\x3b\xa6\x75\xc2\x1e\x96\x94\xfc\xea\x59\x97\x5b\xde\xde\x2f\xe9\xe0\xbf\xca\xa7\x26\x06\x03\x88\x04\x39\xa2\x81\x77\x74\x65\xc4\x6a\xcc\x0c\x05\xf3\x53\x85\xdd\x65\x6c\x59\x66\xce\x60\x1f\xc8\x78\x7e\x6c\xa2\xf2\xd0\x76\x4a\xe1\x44\x13\xaf\x92\x22\x0c\xa0\x63\xc8\x11\x4d\x5c\xe4\xfc\x8b\xdc\xe5\xcd\xb4\xe5\x25\x4f\x7b\x92\x5a\xb2\x93\x92\x06\x19\x0f\x68\x8e\x17\xf0\x94\x09\x7e\xec\xbf\xb7\xbd\x37\xbd\x2c\x02\x03\x88\x14\x39\xa2\x85\x37\xe4\x14\x19\x08\xba\x85\x7a\xf8\xdc\x43\x76\xe1\xe6\x11\x8d\x09\xe7\xfd\x8f\x8e\x32\xed\xce\x5d\x96\x41\x4f\xa9\xcc\x6c\xfd\x0d\xcf\xc3\x00\x22\x43\x8e\x68\xe3\x7d\x4d\x26\x89\x69\xe5\x4b\xa6\x1b\x0c\xdb\xd6\x12\x8d\x68\x8e\x10\x19\xb4\xe4\x0c\x1b\xe4\xab\x8a\x24\x8e\x5f\xf3\x12\x38\x31\xaf\x04\x03\x88\x1c\x39\xa2\x83\x8b\x74\x4b\xcf\xcd\x25\x67\x18\xf5\xc4\x3b\x93\x5d\xfc\x1e\xb9\xf4\x9e\xd3\x22\x55\xd2\x93\xf1\x0a\xff\x2f\x95\x04\x2a\x62\x33\x4a\x08\x06\xd0\x71\xe4\x88\x2e\x2e\x32\x7c\xea\xaa\xdf\x95\x68\x66\x56\x37\x67\x51\xf6\xe7\x97\xfa\x3c\x5a\x73\x7e\xfe\xe2\x66\xfe\x75\x4e\xce\x98\x3d\x85\x47\xd3\x12\x7b\xed\xa2\x40\x8e\xe8\xe1\x22\x21\x9e\xf0\xec\xcd\x73\x09\xa8\xdb\xec\xb7\x04\x89\xca\xae\x02\xc2\x8b\x3d\xaf\x82\x9d\x4f\xca\x5c\xc9\xf1\x0d\xdc\xac\xbe\x1f\x00\x03\x88\x12\x39\xa2\x8f\x8b\xf8\x53\x53\x7d\xf9\x56\x36\xf6\x34\x63\x93\x4f\x7c\x4d\xa2\x82\xbe\xba\xdf\xcd\x99\x6f\xc4\x6f\xb1\xa9\xa4\x32\x6b\xb1\xb6\x8c\x04\x06\x10\x15\x72\xe4\x12\xde\x9c\xdc\xfe\xc7\x62\x4f\xe3\x0b\x7d\x60\x39\xe2\xe6\x59\x56\xb2\xd2\x17\xe3\x59\xe2\x99\x23\x2a\x5d\xb4\x09\xe7\xb7\xd1\x8b\xa9\xc2\x00\xa2\x46\x8e\x18\xe0\x22\x5d\x95\x0d\xb5\x52\x70\x7b\x56\xc1\x6e\xe6\xf5\xa7\xfd\x7a\xda\x24\xaf\xac\x23\xa4\x24\x57\xad\xae\x2c\x18\x19\x9e\x9f\xb1\x39\x06\x03\x88\x06\x39\x62\x88\x8b\xe4\xbd\xcd\xde\xfa\x21\x55\xde\x1b\x42\xcc\x93\xa8\xdc\x28\xdc\x50\x61\xea\x90\x6d\x68\xcc\x62\x9d\xab\xb9\xfc\xf9\xa2\x9d\xce\x09\x18\x40\xb4\xc8\x11\x23\x5c\x64\x72\xd8\xc7\xf1\x36\xf7\xb1\x1b\xaa\x84\x37\xba\x08\x73\x82\x1f\x6a\x31\xb5\xc9\x3b\x4c\xed\x76\x56\xbd\x6a\x99\x7e\xaa\x55\x87\x7d\xe3\xe9\x90\x23\xc6\x78\xb7\xdf\x15\xf9\x98\x29\xdd\xc0\x6c\xd7\xe3\x64\xeb\xba\xe6\x46\x52\x72\x91\xad\xa7\x56\x58\x0d\x78\x3f\xfd\x48\xd3\x40\xb9\xe8\x06\xc2\x00\xa2\x47\x8e\x98\xe0\x22\x4f\x15\x38\xbe\x5a\x26\x66\x86\xc4\xe5\x4b\x57\xfe\x4a\x72\xbe\xf8\xda\x0a\x86\x54\x6d\x84\x54\x89\xfa\x17\x13\xa4\x2e\x19\xba\xc1\x00\x62\x40\x8e\x98\xe2\x9d\x8c\x87\x52\x6f\xc3\x12\x03\xdb\xb5\xdd\x18\x2d\x17\xef\x1e\xb7\xf4\x23\xec\x64\x36\xf1\xb3\xbf\xa6\x43\x5b\x6e\x1a\x59\x7a\x9f\x01\x06\x10\x23\x72\xc4\x0c\x17\x51\x89\x7b\x21\xa2\xa1\x79\x75\xa2\x71\x90\x57\xb9\x95\xba\x21\xe8\x08\x43\xcf\x75\xcf\x31\xb1\x7e\xd9\x33\x44\x45\xdb\x9f\x0a\x7b\xa9\x67\x42\x8e\x98\xe3\x22\x47\x11\xf5\x0b\x23\x49\x1d\x5f\xac\xbd\x8f\x84\x31\x0f\x35\x33\x69\x85\x1d\x8b\xd1\x34\x21\xbf\x56\xef\x1d\xcc\xb3\x5c\x01\x86\x30\x80\x00\x72\xc4\x02\x17\x41\xbd\x13\x9f\xa8\xf9\xf1\xf3\x1e\x97\xb7\x2d\x2b\x8b\x7f\x82\x1f\xa9\x10\xdd\xb4\xc9\x79\x17\x46\xea\x0e\xde\x59\x5a\x54\x19\x17\x0c\x20\x66\xe4\x88\x25\x2e\x42\x37\x3f\xcf\xbd\x14\x33\xac\x72\x16\x63\xcb\x3f\x58\xc4\x9e\x29\xc8\x74\xfa\xee\x6d\xe1\xbd\x9a\x70\x83\xc2\x6f\x17\x62\xd1\x3c\x30\x80\x4e\x20\x47\xac\x70\x91\x80\xcb\x7e\x4c\xbc\xf2\x06\x0f\xc0\xc2\xd0\xbb\x1f\x7d\xa0\xb0\xf0\x25\xed\xc7\x9a\x2b\xa2\xb6\x65\x27\xe8\xa6\x97\x6b\x0b\x99\x61\x00\xb1\x20\x47\xac\x71\x91\xd1\x9b\x2f\x18\x6a\x8c\x74\x6c\xdf\x3d\x73\x7e\xe1\x67\xed\xe7\xa8\x32\xc8\xfb\x61\xd7\x98\xb6\x8d\x76\x6d\xa3\xb1\xbd\xd3\x0e\x03\x03\x88\x15\x39\x62\x83\xf7\x50\xc4\xfa\xdc\xed\x97\x03\xef\x6b\x7c\x4e\xbf\xf5\x9c\x36\x4c\x7e\x13\xdc\xda\x47\xd6\x61\x7d\xbd\xe5\x5d\x72\x32\xa7\x04\x57\x34\xf6\xf6\xcb\x86\x1c\xb1\xc5\x45\x2a\x5e\xef\xd2\x10\xdc\x3a\x2f\x2e\x05\x42\x88\x7d\x6b\x5d\xd6\x0b\x4c\x7e\x91\x9b\xbe\xd9\xd1\x24\x95\x65\x5b\xe6\x6e\xd2\x3f\x05\x03\xe8\xe4\x7f\x3b\xa1\xf9\x4f\x0f\x17\xfe\x35\xa1\xb1\xc3\x7d\x55\x56\xe7\xcc\x79\x0d\x6e\xda\x98\x18\xd8\x7d\x6d\x4e\x3c\x69\x49\xb4\x4d\xfa\xb3\xd8\xa0\x45\x4b\x8d\xab\x5d\x2d\xa1\x4f\x48\xc9\x03\x06\x10\x3b\xf2\x4d\xb7\xc7\x45\x44\x9e\xde\xf9\xb2\xd6\x18\xff\x63\xe3\xfc\x41\x61\x83\x2c\x9b\x28\x3d\x59\x87\x5b\x19\xdd\x95\x00\xab\x11\x47\x7b\xdb\xee\x44\xec\x25\x82\x03\x39\xe2\x80\x8b\xb4\x96\xb1\x6f\x2d\x92\x6a\xc5\x1e\xad\x14\xa2\xfc\xaf\xda\xac\x4b\xbf\x79\xd4\x98\xe6\x7c\xfd\xdd\x57\xfa\xa9\xb0\x1f\x71\x0b\xa2\x30\x80\x4e\x21\x47\x1c\x71\x11\xda\xdb\x74\x56\xe1\xeb\x2a\xea\xa7\x3b\xa2\x25\x24\x58\xdc\xa7\x03\x7f\xa8\x18\x9b\x06\x5f\x2d\xbb\x42\x69\xa8\x10\x69\x47\x47\x0e\x03\x88\x13\x39\xe2\x84\xf7\xbd\xfa\x74\x97\xbc\xea\xd7\x21\xb3\xdf\xce\x87\x2b\xd3\x3e\xaa\x41\xeb\x92\xcc\xf4\x72\xa1\x0d\x59\xb4\xe1\x8d\xd9\xf6\x8b\xa9\x6c\x30\x80\xb8\x90\x23\xce\xb8\x88\xba\x26\x90\xdc\xbc\x92\x7d\x35\x27\xb3\x39\x70\x3e\xe7\x96\xab\x8f\x77\xcf\xec\x0c\x59\x33\x1f\xb4\xf5\x3d\xeb\xc2\x95\x17\xd8\xdd\xc5\x8d\x1c\x71\xc1\x1b\x3c\xb7\x15\x67\x88\x2a\x25\x3a\x3d\xf6\x7a\x46\xf2\x7d\xfc\x95\xf2\x53\x41\xfb\xdc\xb8\xc2\xef\x5c\xeb\x09\x66\x52\x41\x93\x7f\x58\x60\x00\xf1\x20\x47\x5c\xf1\x1e\x63\xe3\x1b\xa9\xd5\xb9\xa8\xc7\xad\xfc\xea\xbd\x56\xe8\x34\x73\xc0\xfb\x5b\x3f\xf2\x54\x84\x1f\xaf\x46\xa4\x58\x1b\x61\xe4\x4e\x61\x87\x37\xbc\xc8\x11\x37\x5c\xc4\xeb\xbd\x7d\xdf\xe6\xeb\x2b\x6f\xcf\x7e\x0a\x7f\xd5\xe4\x46\xb2\x5f\xd0\xbb\xad\x33\x96\xbc\x42\xec\x84\x66\xcb\xb4\x67\x7d\x41\x07\x03\x88\x0f\x39\xe2\x8e\x8b\x5c\x05\xbd\xe2\x0f\x75\x24\x08\xfa\xca\x85\xc4\x59\x2e\x58\xe6\x27\xbd\x6d\x59\x43\xc7\x95\x9d\xa8\x64\x28\x7c\x94\xe6\xc9\x8a\x9d\x2e\xf3\x23\x47\x3c\x70\x11\xa2\xa5\x19\xf7\xec\xc5\xa9\x53\x82\xca\xdd\xeb\x56\x7b\x46\xe3\x05\x4b\x9e\x6f\x99\x7e\xbb\xfb\x19\x78\x14\x90\x3c\x91\xe2\x57\x83\x01\x24\x80\x1c\xf1\xc4\x45\x00\xe9\x4b\x40\x56\x2b\x54\x2d\x4c\xe2\x2a\xb4\xee\xf5\x21\x81\xbc\x8f\xf5\x83\xd1\x19\xe6\x6f\xc7\x8b\xca\x2a\x2b\x69\xa3\x29\x60\x00\x9d\x46\x8e\x78\xe1\x22\x04\x5c\x15\x9f\x03\x66\x9e\x3d\x6b\x4e\x2d\x5c\x31\x76\x0f\x50\x8b\x56\xbc\x54\xf9\x81\xff\x4f\xfc\xef\x31\xab\x5a\xca\x71\x5d\xec\x34\xe0\x0c\x72\xc4\x1b\x17\x79\x72\x25\xa2\x73\xb0\xe3\xfa\xe8\xcc\x9b\x9a\x74\x8d\x0c\x57\x26\xa9\x2e\x16\x6f\xfb\x7b\x2c\xf4\x22\xee\xe6\xa7\xaf\xb6\x39\x63\xef\xd7\x82\xc8\x11\x1f\xbc\x8f\x30\xb2\xd6\xa2\x22\xc3\xe3\x43\x4f\xe7\xeb\x0a\xb5\x5a\x6f\xfd\xa8\x11\xfb\x10\x71\xb8\xa8\xcb\xdf\xbc\x20\x2d\xa1\xa8\xa6\x78\x0e\x06\xd0\x59\xe4\x88\x2f\x2e\xb2\xd0\x7c\xc5\x92\x5b\x13\x5d\xe1\x47\x79\xf0\x8a\x60\x51\xb7\x5e\xae\x73\xa4\x5a\x23\x40\x5c\xb1\x31\x9f\xbf\xc1\xb8\x93\x8f\x13\x06\x90\x10\x72\xc4\x0f\x17\xf9\x2d\xb3\x78\xba\x8a\xd2\xf7\x69\x71\x43\x2d\xcf\x90\x6f\x74\x6e\x44\x6f\x2c\xd9\x50\x56\x8d\x12\x63\x56\xbf\xc1\x43\x9f\x1f\x4c\x30\x80\xce\x21\x47\xfc\x71\x11\x61\xee\x6f\x94\x0e\xfa\x85\x8f\x15\x17\xf4\xf9\x0f\xd2\x25\xdc\xd4\xbb\x83\xd4\x9b\x4d\x75\x23\x7b\xe6\xa6\xae\xbd\xb9\xeb\x2f\x0f\x03\x48\x18\x39\x12\x80\x8b\xf8\xaa\x04\x7c\xae\x2a\xa7\xd6\x65\x48\xd3\x78\x76\x05\x8e\x36\xa3\x35\xb3\xe4\xd1\x2d\xe0\xbf\x4b\x74\x82\x9f\x79\xcc\x4f\x17\x3b\x35\x13\x41\x8e\x04\xe2\x22\x6a\xab\xcd\xe4\x06\x1c\x8b\x2f\xb6\x52\xe7\x44\xbd\x55\x05\x85\x62\xda\xf7\x5e\xb1\x2f\x2f\x50\xc4\xd0\xbf\xd9\xd2\xa5\x94\xd3\x87\x01\x24\x8a\x1c\x09\xc2\x45\x9c\x6d\x1c\xd4\xef\x28\x04\x8a\x0c\x9b\x48\x6e\x98\xdd\xa4\x26\xcc\xaf\x95\x4c\xe8\xfc\x14\x78\xd5\x23\x3b\x22\x73\xa0\xec\x94\x29\x0c\xa0\xf3\xc8\x91\x60\x5c\xe4\x9e\xee\xf5\x53\xdf\xe8\x6d\x9f\xcf\x8c\xb9\xd4\xb1\xfa\xe9\x10\xe6\xf6\x8b\xcc\xd6\x2a\xf3\x7c\x9f\xf4\xde\x5b\x8b\xf9\x3a\x44\x05\x03\x48\x0c\x39\x12\x82\x8b\x18\xac\x9f\xf0\x28\xbb\xf5\xda\xac\x21\x74\xcf\xa8\xa8\x6b\x28\x79\x3a\x2d\xe5\x84\x4d\xb9\x19\x49\x30\xcb\xf7\x86\xdc\xcd\x49\x6f\x18\x40\xe2\xc8\x91\x50\xbc\xd1\xca\x8b\xc3\xc4\x33\xd4\x3c\x0f\x1b\xab\x87\xbf\x9e\x7b\x74\xcc\x9f\xda\x1a\xba\x6c\xbe\x09\xa6\xf2\xc4\x7c\x9e\xda\x55\x91\x49\xc2\x00\x92\x40\x8e\x5c\xc6\x43\x54\xce\xbc\x6e\xe2\x79\x76\x82\xcf\xe7\x6b\x78\x2a\xd7\xc8\x0b\xa2\x32\x74\x69\xb9\xbb\xfc\xde\x1b\xb1\x1b\x5f\x48\x19\x76\xb1\xb7\x5f\x49\xe4\x48\x18\x2e\x92\x9f\xac\x72\x51\x48\x27\x32\x72\xbc\x8b\x69\xd9\xb5\xce\xb8\xbc\xf7\x36\x7d\x42\x29\xc6\x23\xac\xd9\xd4\x7b\x22\xaa\xe3\xd0\x06\x06\x90\x14\x72\x24\x1c\x17\xd9\x3e\x45\xed\x95\xca\x1c\x4d\x73\x02\x4a\x4f\xb6\xe4\xce\x8a\x23\x0a\xbe\x51\xc1\xd8\x1e\x7d\x31\x93\x41\x1c\x62\x0e\xa7\xd5\x86\x01\x24\x8d\x1c\x89\xc0\x7b\x42\x2f\xc9\xa6\x3a\x43\x2d\xc6\x75\x73\xae\xf4\xc0\xa6\x77\x37\xe7\xf8\x05\xe7\x11\x8d\xc5\x1d\x89\xe3\x44\x05\xb4\x6b\x7b\x89\xd8\x9b\x96\x0c\x72\x24\x12\xef\x7b\xf2\x79\xf5\x54\x69\xca\x13\x49\x0b\xd6\xf9\x62\x97\x50\xe8\x16\x53\x97\x65\xb8\xf8\x2b\x69\x8e\x5e\xe5\xc3\x4f\xfd\xb3\x42\xd8\xab\xb0\x2c\x72\x24\x0a\xef\x21\xef\x74\x36\x49\xd1\x59\x6b\xb8\xf0\xfb\xd9\xb3\x49\x13\xc3\x3d\xb3\x31\xbf\xaf\x0f\x64\x26\xdc\x2c\x6d\x71\xb5\x82\xf2\x2c\x50\x30\x80\xe4\x90\x23\x57\xf0\xbe\x27\x3f\x9a\x7e\x94\x35\xaf\x32\xd9\x99\xb0\x20\x52\x4a\xcb\x0c\x74\x58\xef\x0f\x55\x92\xff\x54\x18\x1d\x66\xbe\x93\xcd\xef\xe5\x0f\x03\x48\x1e\x39\x72\x15\x17\x21\x26\xaf\xa9\x99\x7d\xe6\xa6\x1f\x56\xb2\xcc\x9c\x56\x1f\xff\x43\x75\x6f\xe4\x5e\x54\x7f\x3e\xdb\xdd\x23\x25\x07\x2e\x9f\x4a\xec\x96\x28\xfc\xb7\x13\x9a\xff\xf4\x2b\x50\x7f\x4d\x68\xa2\x71\x5f\x95\x04\xa5\xab\x53\x47\x55\xef\x36\xf9\x4a\xc6\xbd\x1d\x91\x3c\x89\x60\xa1\xd2\x04\x3d\x63\x09\x1d\xf9\xb0\xdd\xb1\x0e\x03\x66\x6e\x18\x40\x8a\xc8\x37\x1d\xc6\x45\x82\x78\xfb\x1a\xeb\xe8\xe0\x7b\xcc\xc4\xc3\x1f\xbd\x57\x3a\xab\xdb\xfb\xab\x05\xa7\x78\x9e\x58\x27\x52\xe6\x1c\x91\xc6\xfd\xd0\x84\x01\x74\x01\x39\x12\x83\xf7\x0d\x18\x17\x39\xaf\x0b\x8f\xb2\x46\xcc\xd2\xf3\x6a\xc9\x9e\x3c\x83\x3b\x36\xc3\xdc\xb6\x1c\xa2\x5f\x04\x41\x10\x51\x0b\xf7\x23\x57\x18\x40\x4a\xc8\x91\x58\xbc\xef\xf2\xfc\xe4\x7c\x1e\x1c\x6b\xda\xf5\x8c\xf6\xf9\xee\x77\x13\x65\x70\x7f\x7f\x41\xc9\xd0\xd4\x61\xf4\x5c\xd0\xe4\xab\xec\xf3\xa3\x66\x30\x80\x2e\x22\x47\xe2\x70\x11\x46\xdb\xe1\x97\x25\xaa\x9b\x8f\x0c\xae\x49\x29\x46\x3d\x88\xf4\x50\x94\xcf\xb9\xa7\x19\x3b\xf8\xfb\xd1\x4f\x7f\xf6\x44\x1a\x6f\x39\x18\x40\xca\xc8\x91\x78\xbc\xf9\x9f\xac\xe6\xd5\xd6\x2f\xc9\xfc\x24\x7a\x66\x49\x7d\xe4\x09\xaa\x0f\xa5\x22\xc9\xb5\x42\x0d\xaf\xa4\xb3\xc5\x26\x7f\x88\x98\x08\x84\x01\xa4\x82\x1c\xb9\x86\x8b\x58\xd0\x46\xcd\x0c\xd5\x50\x6f\x2f\x30\x13\xa8\x2f\xa6\xf9\x18\x13\xf8\xde\x34\x7e\xf8\x49\x79\x53\x3d\x2f\x7e\xb3\xe3\xc5\x20\x2b\x0c\x20\x55\xe4\x48\x02\x2e\x42\x29\x2e\xa1\x42\x7a\x4b\xe8\xac\x41\xe9\xbc\xce\xa1\x85\x79\x33\x27\x24\x65\xad\x7c\x7b\x63\xe9\x9a\xec\x5a\x4e\x65\x8f\x1c\xf6\xec\x55\x43\x8e\x24\xe2\x22\x09\x56\x7c\xba\x55\x7c\x96\x5b\xba\x6c\x21\xb1\x9a\xe3\x43\xe8\xc3\xfb\x8a\xb4\x9b\xc7\x49\xbf\x4c\x1f\xc4\xb3\x4a\xbb\x9e\x70\x86\x01\xa4\x8e\x1c\xb9\x8e\xf7\x51\xea\x1c\xcf\x1d\xf5\x4b\xaa\xcf\x4a\xaf\xa9\xfe\x22\x58\x1f\x13\xb2\xda\xa3\xe1\x25\x8b\x4d\x5e\xad\x19\xde\x4d\x29\x75\x4f\xc2\x0e\x9e\x35\x90\x23\x37\xf0\x9e\x9a\x0c\x12\xd4\x8e\x79\xff\x20\xc0\x22\x54\x40\xd2\x78\xf1\xf5\xde\xf0\xa4\xf0\xc5\x4b\x45\xf7\xfa\xa5\xe9\x3e\x5e\xa2\x5e\x8a\xc2\x9e\xf1\x9a\xc8\x91\x24\x5c\x24\x92\xca\xeb\x50\x79\x82\xe4\xfe\x37\xda\xa5\x47\x69\x26\x1a\xcf\xe3\x8a\xd7\x52\x62\xec\xdc\x02\x93\x39\xb3\x45\xae\x41\xcd\xd8\xe1\x8d\x16\x72\xe4\x26\xde\x2f\x9c\xb0\x9d\xa4\x78\xf5\xf9\x15\xe6\xcb\xeb\x6a\x91\x4f\x6c\x8d\xad\x86\x89\x9b\xd9\x9f\xba\xd0\xda\x72\xe7\x5d\x99\xcb\x1f\x52\x61\xcf\x13\x6d\xe4\x48\x32\xde\x84\x26\x27\x38\x77\x07\x68\x4f\x1f\x75\xf6\xa7\x6e\xab\x44\xd5\xd6\xde\x8a\x9d\xbf\x75\x10\xd5\x53\x20\xef\xfd\x38\x2a\x77\x9c\x07\x06\x90\x0e\x72\x24\x05\x17\x29\x1d\xe8\x35\x8b\xb3\xfd\x6a\xf0\x5d\xab\xcd\xb1\xa1\x74\xf4\xa9\x80\xc9\xdb\x4a\x14\x11\xb3\x37\x0f\xab\x82\xad\xc3\x40\x25\x76\xf0\xac\x8b\x1c\x49\xc5\x9b\x64\x9e\xf2\x76\x2d\xd8\x1a\xaf\x8f\xf8\xbe\x17\x7c\xe4\x8a\x59\x10\x43\x7f\x76\x9f\xc8\xf4\xb2\xa3\x5e\xf0\xe5\xe3\xbc\xc0\x8a\x1d\xd7\xea\x21\x47\xd2\xf0\x26\x34\x37\xed\xc9\xa8\x73\xb5\x89\x82\x27\xa6\xa3\x17\x09\xe9\x0e\x87\x52\xcf\x1d\x7c\xdc\xec\x6e\xf6\xbb\xdf\xea\x1f\x55\xe4\x4f\x0d\x03\x48\x1f\x39\x92\x8e\xf7\xbd\x06\xa1\x02\x1c\xae\x18\x69\x5e\x49\xb7\x34\x71\x9d\x56\xa3\xdc\xd2\x6a\x63\x35\x26\x58\xc5\x8f\x69\x36\x22\x7e\x4b\x60\xc5\x0e\x06\xd0\x25\xe4\x48\x06\xde\x33\x54\x36\xe1\x97\x81\x79\x50\x48\xe4\xbc\x24\x41\x8f\x61\x72\x07\x07\x6f\xa5\xa0\xe0\xe7\xd6\xc7\xbc\x1d\xbc\xc6\x3f\x89\x7d\x2c\x61\x00\x19\x20\x47\x6e\xe1\x22\x4e\x14\xb3\x7f\xc6\xde\x35\x0a\x39\x78\x0c\x46\xb7\x3f\x8d\xb4\x91\xa3\x9e\xf1\xae\xf6\xe9\xa7\x5f\xa1\x32\x7a\xbb\x92\xb1\x85\x3d\xe3\x0d\x91\x23\x99\x78\x8f\xd2\x98\xae\x9d\x9a\x25\x60\x1d\xf3\x73\xac\x70\x7b\x2c\x73\xae\x4f\xfc\x34\xfb\x29\x8d\x5f\xda\x19\x6a\x11\xd1\x14\x4a\x7f\x2a\x84\x61\x00\x19\x21\x47\x6e\xe3\x22\x9f\x74\xe4\x54\x78\x9a\x64\xb8\x17\x3d\x2a\x7e\xd4\x68\x2d\xff\x79\x64\x62\x77\x99\x72\xbf\x77\x9a\x2f\xfa\xda\x67\x59\xdd\x4b\xd8\xc1\xb3\x31\x72\xe4\x0e\xde\x68\x65\x79\x8b\xcf\x7c\x40\xc0\x7c\x72\x7a\xe7\x56\x2d\x4c\x33\xdf\x55\x5b\x58\xf8\xf8\xfc\xe4\xa7\x0b\x31\x17\x8f\x58\xc9\xfb\x2f\xc1\x00\x32\x41\x8e\x64\xe1\x22\xe7\x56\x95\x6a\x4f\xbc\xa2\xe1\x82\x3e\x56\xfa\xb9\xbe\x57\x2a\x4c\xef\xdb\xec\x1d\xa4\xfd\x32\x42\xd6\xce\x42\xa9\x67\xe8\xa6\x04\x03\xc8\x14\x39\x92\x8d\x8b\xa4\xf1\xfe\x30\x6b\xc5\xac\x15\x3c\xb8\x56\x20\x56\xb8\x2b\x47\x8d\x19\x2b\xbf\xe2\x2f\x59\xf9\xe3\xf0\x71\xfc\xc3\xda\xe2\xdb\x32\x30\x80\xcc\x90\x23\x77\x71\x91\x33\x95\x0e\x7c\xf7\x43\x1d\x4f\x3c\xe5\xd3\x50\xad\x88\x7f\xc9\x74\x5c\x8a\xd2\xf5\x24\xc3\x3a\xc9\x87\x2e\x2a\x66\xc7\x0b\x2c\x9c\x30\x80\xcc\x91\x23\x39\xb8\x88\x28\xd1\x9b\xf0\x91\x7d\xe1\x55\xfd\x69\x6a\x4c\x6d\x8b\x46\xfc\xd7\x06\x5d\x3b\xe2\xde\x73\x7d\x2e\x2c\x4f\xa8\xd2\x27\xae\x62\xcf\x13\x0b\xe4\x48\x2e\x2e\xe2\x39\x6d\x78\xad\x69\xad\xfb\x74\x48\xe8\xb7\x33\xd7\x1f\x18\xb0\x3d\xfd\x44\xbc\x73\xcf\x82\x9e\x2c\xf1\x7d\x6f\x6e\x9d\x28\x2d\xf6\xe8\xb2\x44\x8e\xe4\xe1\x22\xdf\x93\x5f\xca\xdc\x17\x3a\xcd\x7f\x6f\x9c\x7a\x9c\x3c\xe1\x89\x62\xa8\x83\xe5\xaa\x12\xad\xad\xf5\xa4\xe6\xdb\x19\x1e\xb9\x20\x5e\x18\x40\x56\xc8\x91\x7c\x5c\xc4\x90\xbe\xe5\x2b\xe9\xbb\x63\x63\x12\x98\x3b\x63\x4f\xa4\x42\x9d\x06\xc4\x42\x92\x69\x56\xe5\x18\x9d\xd8\x8b\xea\x1d\xdc\x8b\xad\x60\x00\x59\x23\x47\x0a\x70\x11\x74\xfb\xa0\x67\xf4\xba\xa8\x59\x44\x43\x60\x67\xda\xa9\x0b\xe4\x4a\x40\x83\xfe\xbd\xbf\x74\xcc\x95\xcb\x19\xa3\x57\x0e\xe8\xb0\xe7\x89\x0d\x72\xe4\x1e\xde\xc7\x4a\x0f\xc3\xd8\x1f\x5d\xa8\x97\xdb\xba\x45\x5f\xbb\xaf\x9e\xeb\x58\x09\xab\xf0\x28\x2b\x13\xbf\x9d\xf7\x9c\xd6\x54\xa0\xe1\x25\x85\x01\x64\xfb\xdf\x4e\x68\xfe\xd3\x3f\xd4\xf0\xd7\x84\xe6\x3e\xee\xab\xaa\xd7\xac\xcb\x76\x68\x0e\x9b\xa9\xfd\x8c\x72\xe7\xe4\x19\xd2\x93\xdf\x30\x7d\xa4\xc1\x32\xef\x4d\xd9\x78\x3f\x91\x51\xd7\xd4\x11\x06\x90\x1d\xf2\x4d\x2f\xc4\x45\x76\x33\xd4\x7e\x6c\x88\xa6\xbe\xcb\xa2\xf8\x78\xba\x9d\xc1\x42\x53\x9e\xa1\xe6\x8f\xd9\xed\xbe\xa0\x0d\xc5\x8d\xab\x91\x57\x89\xb1\x53\x5f\x7b\xe4\x48\x11\xde\x31\x2f\xb8\xfb\x47\xc5\x8e\x09\xd3\x5f\xd9\x5a\x7b\xed\x50\x8a\x99\x91\x26\x3b\x2b\x7a\x74\x6c\x3e\xf8\x9a\xb1\x4e\xfe\x2f\x63\x65\x18\x40\x0e\xc8\x91\x62\xbc\x0f\xbb\xbe\xb4\x90\xb2\x31\xc1\x36\x21\x1b\x44\xa9\x82\xfa\x9a\x59\xc6\x0f\xab\x38\x23\x52\x3e\xba\x05\x08\xed\xd9\xd7\xeb\xb2\xea\xc3\x00\x72\x44\x8e\x94\xe0\x7d\x2b\x99\x21\xf3\xf6\xe1\xee\x7c\x52\xf0\xcf\x8b\x83\x42\xbc\x5f\x68\x0d\x3a\x85\x0f\x0d\x3f\x18\xd0\xfb\xdb\x7d\x51\x60\x6d\x1e\x74\x87\x01\xe4\x84\x1c\x79\x80\x8b\x88\x13\x1f\x04\x29\xae\x87\x4d\x37\x34\x0f\x17\xf8\x5b\x8c\xa3\x38\x03\x92\xbe\x3a\x92\xbf\x4a\x9b\x25\x23\xb8\x57\xa3\x3e\x2f\x00\x03\xc8\x19\x39\x52\x8a\x8b\xc8\xec\x67\xcc\x77\xcf\x67\xe6\xcb\x5e\xe8\x78\x63\x3c\xaf\x2a\x49\xb6\x83\xa9\x22\x89\xb6\x94\x75\x63\x53\x8b\xaf\xab\xd7\xc6\x1e\xf3\x2e\xc8\x91\x32\xbc\xcb\x76\x8e\xff\xc7\x15\xa2\xe7\x4f\x8f\x1b\xf5\x5b\xc3\x5d\xc3\x6d\x7c\x6f\x19\x07\x45\x2c\xcb\x13\x33\xeb\xfb\x77\xdd\x63\x6c\xad\x61\x00\xb9\x22\x47\x1e\xe2\x6d\x49\x31\xa9\xf9\x51\xb5\xdb\x17\xc6\x2a\x7b\xdb\x87\xe9\x25\xf0\x9f\xae\xa8\xe8\x60\xda\xb9\x1d\x1d\x6a\x97\x60\xbf\xab\x54\xbe\x30\x80\xdc\x90\x23\xe5\xb8\x48\x6e\xcd\xf6\x25\xd2\xa8\x45\x65\xa3\xdb\xb5\xcd\x5a\xf1\x8e\x02\x77\x09\x29\x39\x38\x47\xec\x77\xba\x53\xbb\x53\x7f\x5d\xf5\xa7\x83\x01\xe4\x8e\x1c\xa9\xc0\x7b\x0e\xe1\xa9\x40\x27\xc4\x3c\xc2\x1c\xc8\x3c\xa5\xb2\x59\x48\x2e\xd7\xcd\x7c\x4a\xb9\x6c\xd3\xd9\xa5\x5d\x73\xdf\xdd\xf9\x5c\x24\xf6\x7e\xed\x81\x1c\x79\x84\xf7\x3b\x34\x62\x1c\xbf\x1d\x94\x3f\xfd\xd0\x0d\x16\x6a\x3f\xeb\x73\xd2\x9b\xf3\x2b\x60\x3f\x18\x73\xa9\xda\x29\x60\xa5\x3a\x7e\x9e\x84\x19\x06\x90\x27\x72\xa4\x12\xef\x33\x74\x1d\xa9\x06\xd4\xce\x90\x88\x46\x68\xbd\xd5\x2d\x6b\xa6\xab\xab\x04\xb3\x4d\xb6\x02\x61\x79\x1c\x6f\xeb\x4d\xa9\x4b\xfb\xb1\x83\x02\x2f\xe4\x48\x15\xde\x05\x52\x9d\xb3\xa9\x34\xde\x74\x83\x4e\x47\xbb\x66\x4a\xc9\xec\x8e\xd6\xde\xc5\x90\xcd\xcf\x6b\xd6\x3f\x65\xc5\xd0\x77\xfc\x8f\xbc\x60\x00\x79\x23\x47\x1e\xe3\x22\x59\x0f\x8e\xdc\xe5\x4e\xb1\x9c\x96\x2b\x98\xa2\xf7\xfe\x31\xb8\x9c\xa7\xeb\x96\xd9\x61\xfa\x80\x35\x61\xdf\x25\xd6\x0b\x75\xf3\x24\x0c\x20\x1f\xe4\x48\x35\xde\x0d\x28\x6d\x21\x3d\x18\xde\x22\xeb\x6f\x8d\x9e\x1b\x13\xfb\x26\xe9\x7f\xc4\xf2\xdc\xb1\xcd\xe4\x56\x72\x2c\xaf\x1e\xaf\xcc\x2d\x22\x18\x40\xbe\xc8\x91\x27\xb8\x08\x37\x45\xc0\xf9\x41\xcd\x49\xde\xa5\xe2\x54\x95\x0a\x82\xeb\xec\x37\xc5\x64\x8f\x39\x9f\xf2\xf4\x18\x7d\x76\xcc\x87\x13\x75\x05\x7b\x9e\xf8\x21\x47\x9e\xe2\x7d\xbb\x3c\xa7\x1f\xf6\x2b\x24\x72\x90\xc8\xff\x72\xad\x99\x9a\xf7\x62\xfa\x24\x93\x24\xe7\x9d\x19\x21\x02\x6f\x83\x39\xed\xfb\x1c\x66\x30\x80\xfc\x91\x23\x35\x78\x9f\xc2\x89\x07\xe9\x52\x8f\x16\x8c\xd5\x5d\x24\x7a\x46\xe5\x7f\x74\x53\xf0\x83\xd0\xfb\x2c\x8d\xbc\x6f\xfc\x37\x35\xca\xbd\x17\xae\x61\xc7\x50\x01\xc8\x91\x5a\x5c\x24\xda\xea\x09\x9f\x8b\x53\x2b\x77\x03\x89\xe2\xab\x2f\x6b\xa2\xe1\x73\x32\xab\xe7\x8d\xc5\x96\x0c\x0e\xa6\xaf\x0b\xea\x24\x56\xb1\xc0\x00\x0a\x44\x8e\xd4\xe1\x22\xe6\x69\xbe\xb5\x3f\x1e\x1f\xfb\xfc\xc3\xbb\x7b\x64\xdf\xae\x96\xa8\x2a\x75\xf5\xd7\xf0\x44\x0f\x8f\x6b\x37\x99\xa0\xbe\xbc\x95\x3c\x0c\xa0\x20\xe4\x48\x3d\x2e\x62\xfc\x8d\x33\xc0\x92\x4c\x48\x5e\x95\x5b\x98\xb4\xfa\xeb\xeb\xa7\xbf\xef\x7f\x70\xab\xad\xd8\xf8\x2e\xe0\x76\x53\xbb\xcd\x97\xfb\x34\x0c\xa0\x60\xe4\x48\x03\x2e\x92\x39\xa9\x3c\x67\x6c\x47\x56\xe1\xc5\x52\x57\x96\x44\x3a\xc7\xff\xc6\x6d\x6f\xcd\x2d\x51\xe8\xd3\xe7\xda\xb3\xc1\xd5\x5d\x25\x04\x30\x80\x42\x90\x23\xcf\xf0\x1e\x2b\x78\xe6\x2f\x25\xd0\x58\xa0\xd0\x3a\xcb\x1e\x52\x64\x7c\xe7\x42\xd9\xb9\x43\xcb\xbc\xc1\x67\x4f\x3b\x56\xad\xa6\xfa\x97\x6d\xb0\x48\x28\x72\xa4\x11\xef\x3c\x49\x5b\x57\x72\x37\x6c\x3b\x7d\x91\x8a\x9d\x94\x91\xf4\xf1\xb1\x04\x02\x82\xc9\xbd\xf3\xac\xfb\xe5\xae\xb7\xbd\xb8\x12\xb4\x01\x0c\xa0\xcb\xc8\x91\x26\x5c\x64\xf6\x60\x5d\x6e\x27\x03\xad\xb7\xc9\xd9\x65\x35\xf3\x4c\x6c\xa3\xb5\xbd\x5b\x96\x45\x7f\x29\x0c\xb0\x0f\xee\x1f\xa8\xfe\xeb\x09\xbd\x30\xe4\x48\x33\x2e\x62\x53\xa2\x94\x72\xfa\x55\xdd\xf8\xe3\x70\x55\x87\xa8\xe0\xf7\x25\x8f\xd5\x8b\x87\x68\x67\x5f\x6f\xd9\x6f\x58\x17\xf0\x3d\xbf\x07\xc1\x00\x0a\x47\x8e\xb4\xe0\x22\x5b\x13\x33\x2d\x1d\x61\xdd\xef\xb7\xb2\xb9\x6e\x7b\xfc\x1a\xa8\x15\x3d\xdd\x72\x4a\x29\x68\xaf\xc5\x7a\x79\xd5\x6f\xbd\x2d\xcc\x07\x06\x50\x04\x72\xe4\x39\x2e\xf2\xfc\x46\x25\xc1\x25\xb2\xd2\xfc\x5a\x6b\x9e\x63\x11\xd6\x1e\x17\xa4\x56\xee\x9e\xe1\x1d\xa8\x88\x50\xfa\x7c\x38\xe8\x7c\x8e\x4b\x03\x06\x50\x24\x72\xe4\x05\xde\x3d\xde\xb7\x5e\x5c\x3e\xef\x64\xe0\xc1\xf1\x98\xdd\x5f\x92\x6a\xf5\x21\x7e\x0b\x56\x5e\x06\x3f\xca\x4c\x3e\x7f\x48\xa6\xee\x5c\xe7\x87\x01\x14\x85\x1c\x69\xc5\x45\x1c\x79\x66\xf6\xb7\xcc\x23\xa0\xe4\x77\x65\x61\xc9\x4f\xf5\x8a\x7b\x3f\x6e\x7a\x33\x2e\xcb\x6b\x30\xd5\x79\x10\x05\x06\x04\x50\xc0\x00\xba\x82\x1c\x79\x89\x8b\xd0\x7c\x15\xf0\x4b\x17\x49\x7b\x4c\xd5\x68\x7b\x94\x2a\xbb\xd1\x39\x67\x52\xa4\x9e\x30\xe6\x2c\xd9\xbc\xfd\x2b\x43\xef\x6a\x16\x23\x0c\xa0\xab\xff\xed\x84\xe6\x3f\xfd\x73\x72\x7f\x4d\x68\xda\xf0\x9e\x43\xf7\xa4\x6f\x4d\x93\xfb\x61\xcf\xb7\xbb\xf7\x4b\xb8\x01\x46\x33\xb4\x59\x27\x25\xf2\x2f\x54\x24\x5a\x5b\x07\xa3\x84\x58\xa4\x61\x00\x45\x23\xdf\xf4\x76\xbc\x27\x2a\xa0\xaa\xd8\x72\x4e\x3d\x94\x44\x30\xd1\xc9\x61\xdd\xbc\x8f\x77\x76\x5a\x7b\x5a\x58\xf9\x69\x75\x15\x9b\xd7\xdb\x7a\x99\x1c\x60\x00\xc1\xc8\x91\x57\xb8\x08\x67\x76\x3a\xc3\xbd\x29\xf4\xb5\xad\xe3\xe9\x05\x44\x54\x9a\x0d\x4e\x97\xc4\x48\x9b\x2a\x63\xae\xf9\xc1\x05\xc4\x62\x5b\xc3\x54\x30\x80\x62\x90\x23\x1d\xb8\xc8\xd9\xfe\xb2\x65\xe3\xf9\x56\xda\x77\xdf\xcf\x2f\xa8\x3f\x62\x3a\x2f\x1b\x23\x32\x62\xd9\x56\xc9\xae\x15\x12\xf3\xfc\x54\xeb\x24\x3d\x0c\xa0\x58\xe4\x48\x27\x2e\x22\x2f\x5a\xd0\x1a\x1e\xdd\x6c\xaf\x99\xa5\xa7\xdc\xeb\x06\x33\x11\x30\x3c\xe5\xb0\xed\xef\x7e\x95\xbc\x7b\xb5\x5b\x66\x5b\x03\x05\x03\x28\x0e\x39\xf2\x1a\xef\x77\x68\xc4\xfe\xd4\xed\xbe\xe2\xb4\xb8\x66\x23\xfb\x6b\x69\x43\x73\x92\x39\x5d\xe0\x6c\x71\x52\x35\xc9\xe5\xee\xea\x4b\x2f\x30\x31\xd8\x4b\x44\x3c\x72\xa4\x0b\x17\xd9\x79\xd0\xc1\xe8\x98\x70\xf1\xd9\xdb\xc7\xd9\x69\x66\x0a\xed\x43\x9f\x07\x50\xeb\x74\xea\x72\x76\x4f\xf3\x57\xba\x35\xef\xcf\x5a\xc2\x00\xba\x86\x1c\xe9\xc6\x45\xda\x2f\xc5\x54\x35\x39\x95\x04\x3b\x50\x5c\xd8\xea\xb8\xb7\xd5\xd4\x77\x41\xe3\x35\x01\x49\x7f\x96\xde\xfa\x99\xa2\xb8\xb1\x41\xec\xd4\x2c\x01\x39\xd2\x83\xf7\xc0\xa8\xaf\x26\x3f\xa1\x49\x8d\xab\x2e\xc9\xe0\x53\xf2\xc8\x7a\x89\xed\xb2\x47\xd4\x8d\xb4\xe0\x91\x01\xa5\xe0\xf2\x95\xad\xd7\x67\x60\x00\x25\x22\x47\x7a\xf1\x9e\xa8\xd8\x7c\x2b\x3c\x14\x9a\x8f\x1a\x1f\x60\xc5\x5c\xbc\xc8\xd7\x3f\xc0\x50\x53\xeb\x16\x6a\x29\x3c\xf1\xc6\x6c\x4e\x6a\xe0\x11\x76\x26\x7b\x1d\x39\xd2\x87\x8b\x48\xa7\x9c\xa8\x8e\x41\x65\x3a\x49\x4b\x2f\xbf\x3b\x68\x55\xe8\xc8\xb8\x11\xc0\x9f\x1b\x61\x7f\x4f\xf9\xd4\x37\x46\xf2\x59\xb5\x40\x18\x40\x37\x90\x23\x6f\xf0\x3e\xc2\x78\xc8\x1e\x53\x73\x0b\xad\x6a\xad\x42\x15\x4b\xff\x5b\x94\x2f\x26\x7a\xe4\xd6\xd6\x47\xcd\xa5\x73\x22\x56\x49\xa7\xf6\x3a\xb1\x83\x82\x24\xe4\x48\x3f\xde\x83\xd5\x1b\x26\x16\x8e\x1b\xdd\xb4\xe2\x3e\x7e\xbe\x91\xbc\x63\xe3\x15\xcb\x49\x2d\x11\xc6\x2e\xde\x0f\xd2\x45\xd4\xc6\xb2\x12\x24\x61\x00\xdd\x44\x8e\x0c\xe0\x22\xa7\x43\xed\xcb\xaf\x91\x29\xbf\xab\x9e\x96\x24\xb7\x9b\xb8\x63\x11\x9a\x24\x0f\x2b\x2f\xf6\xf6\xd3\xd7\x74\x53\xfd\xa9\xaa\xa0\x86\x01\x94\x8c\x1c\x19\xc4\x45\x0e\x54\x92\x89\xeb\xc7\xc5\x49\x1e\x0c\x46\x6f\x71\x7e\x12\xa2\x20\xb7\x4f\xf3\xb0\xf3\x2b\x55\x33\xa9\x7a\xf6\xc5\x93\x89\x50\x0c\x06\x50\x0a\x72\x64\x08\x17\xd9\x2f\x99\xb1\xcd\x8d\xf4\xa6\x51\x6b\x9a\x01\x1f\x2f\x9b\x38\x84\x7f\x24\x31\xb7\xef\x30\xa1\xb8\xa5\xe8\xfe\xfb\xb1\x4c\x3c\x76\xe4\x91\x8a\x1c\x19\xc6\x45\x7a\xe7\x13\xa3\x1b\xb4\x0e\x3c\xfe\x58\xa8\xac\x28\x71\x35\x7d\x79\x3e\x48\x5f\x99\x21\x2b\x28\xcf\x23\xfb\x22\xcb\x93\xe3\x1c\x76\x5c\x9b\x86\x1c\x19\xc1\x1b\xd7\xee\xdc\x56\xfe\x21\x79\xa1\x30\xf5\xe6\x2e\x41\xba\x37\x2f\x27\xa3\x62\xad\xad\xad\x64\x5d\xaa\xe1\x63\x20\x25\xe2\x94\x7b\x16\x06\x50\x3a\x72\x64\x14\x17\x31\xba\xc1\x98\x1b\xeb\xce\x71\x21\x67\x4a\xe0\xa0\xf4\x94\xf0\xcb\x3b\x06\xa7\x13\x5c\x42\x47\x72\xfb\xf5\x84\xb4\xcf\x36\xb2\xbb\xc2\x00\xca\x40\x8e\x8c\xe1\x22\x4c\x29\x02\xc5\xf9\x77\xfc\xbb\xa4\xce\x44\x3b\x6e\xa1\x8c\xec\x2e\x0c\x7e\x53\x6a\x3a\x49\x25\xb7\xce\x61\x5f\x56\xb6\x39\x66\x01\x03\xe8\x16\x72\xe4\x2d\xde\xa7\x0b\xcf\x2d\x0a\xd8\xbf\x88\xdd\x62\xab\xc9\x5f\xdf\xfc\xc0\xba\x4b\xca\xfb\x64\x4e\x24\xd3\x6e\xe3\xb4\x9f\x4a\xc7\x8f\x44\x0d\xec\xd4\x2c\x13\x39\x32\x8e\x8b\xb4\xf0\xf2\x28\x32\xd3\x28\x19\xe7\x8f\xa8\x36\xbe\x0c\x7c\x22\xb9\x5f\xc5\x39\x0c\xd3\xaa\x32\x0f\x90\xd8\x0d\x8c\x54\x7a\x72\xc0\x00\xba\x8d\x1c\x79\x87\x8b\x24\x3d\x8f\x54\x14\xa8\x96\x2d\x92\x18\x61\x11\x29\x69\x75\xfc\xa0\x55\xdb\xb3\x11\x63\xf5\xe3\x81\x60\x43\x82\xa9\x0e\xf3\xeb\x0b\x30\x80\xee\x20\x47\xde\xe3\x22\x1d\x99\x11\x3a\x50\xf2\x96\x35\x8f\x58\x54\x1f\x8f\x6d\xdd\x4d\xfe\xac\x93\xf4\x01\x56\xcb\x67\x2f\xb9\x31\xb0\xa7\x1f\x19\x61\x07\x12\x59\xc8\x91\x09\x5c\xa4\xfc\x2d\xca\x74\x75\xf5\xd8\xf7\xcf\xdc\xe9\x9a\x67\xf8\xca\x57\x3f\xb2\x58\x2d\xdf\x94\x2e\x8c\xd4\x37\xaf\x72\x54\x37\xb1\xc3\xee\xae\x6c\xe4\xc8\x24\xde\x9d\xd1\x6f\xbf\x6b\xd9\x50\x16\xb3\x10\x56\x2e\xe1\x4a\xb5\xf5\x9d\xd1\x41\x8f\x20\xec\xd7\x6c\x8b\xf4\xaf\xdc\x6c\x20\x2e\x43\x0e\x03\xe8\x2e\x72\xe4\x03\x2e\xb2\x16\xf2\x6c\xba\xa3\xa7\xb1\x72\x31\xd0\xbf\x38\x41\x53\xc7\x9c\x5c\x6a\x71\x53\xae\xf7\x01\xc7\xc7\xe5\xfc\x43\x32\x5e\x4b\xec\xc9\x98\x83\x1c\xf9\x88\x8b\x74\xdd\x1f\x24\x76\x38\xd1\xcc\x5d\xd7\x2a\xee\x29\x4e\xc4\xf2\x46\x85\xf0\x84\xac\xd9\xa0\x62\x5a\x69\xce\xe7\x7b\x64\x3d\x17\x25\x60\x00\xe5\x22\x47\xa6\x70\x11\xf2\xf0\xd7\xba\xbf\xde\x98\x8c\xea\x7e\xca\x53\x57\x38\x6b\x7e\x5c\xd7\xb6\xab\x44\x62\x59\xf4\x70\xe0\x05\xb7\x07\xe5\x89\x25\x32\x18\x40\x79\xc8\x91\x4f\x78\x1f\xbf\x36\x1a\x75\x29\xdc\x53\x12\xcd\x03\xae\xe1\xb2\x81\xd9\xcf\x32\xc2\x1b\x0f\xc9\x42\x57\x3f\x3a\xf7\x2d\x88\x16\x9e\xa2\xf6\x83\x01\x94\x8f\x1c\x99\xc6\x1b\xdc\xa5\x0b\xa9\x84\x3a\x0b\xde\xc9\xb6\x20\x64\x55\x24\x13\xd7\x29\x70\xa2\x7c\xbd\x7f\x77\x5b\xd2\xf3\x64\xe6\x6a\xf7\xa8\x0d\x76\xd6\x54\x80\x1c\x99\xc1\x45\xb4\x03\xc8\x49\xe7\x44\xed\x6f\x9c\x4a\xa0\x2e\xcf\x72\xb1\xff\x53\x00\xd1\xd9\x75\x39\xf8\xca\xec\x5e\xf5\x5f\x32\xb9\xbe\x84\x3d\x84\xef\xfd\xb7\x13\x9a\xff\xf4\x8f\x5e\xff\x35\xa1\x99\xc5\x7d\x55\xbc\xd2\x9c\xcd\x8a\xa7\x67\x43\x7e\xb7\xfb\x58\x74\x48\x35\xf6\x5c\xd3\xaa\xdb\x0b\xd9\xe5\x33\xb2\xdf\x38\x73\x63\x53\xff\x21\x76\x2e\x77\x1f\xf9\xa6\xcf\xe1\x22\x61\xd1\x4c\x55\xba\x5a\xc2\x57\x86\xbf\x7e\xea\xce\xd3\xb8\x6b\x54\xd8\x60\x7c\xdf\xf8\xa3\x04\xff\xe7\x76\x9a\x68\x53\x13\x62\xec\xc8\xa3\x10\x39\xf2\x19\xef\xc3\x2e\x19\x8d\xa1\xfd\x03\xa8\xb4\xb4\x6a\xa3\x24\xd2\x96\x81\x62\x09\x18\x99\x36\x56\xd5\x97\x34\x4e\xe8\x34\x10\x5f\x7e\xa6\x00\x03\xa8\x08\x39\xf2\x05\xef\x8a\xea\xa9\x7d\xe9\x01\x7a\xec\x71\xa4\x18\xdb\x44\x2d\xd3\x64\x5e\x5b\xd9\xd5\xef\xbf\x4e\x4a\x2f\x69\x3e\x8b\xfd\x48\x61\xce\xe0\x0d\x03\xa8\x18\x39\x32\x8f\x77\xcc\xa3\x74\x29\xb5\x4a\xe4\x25\x3c\x19\xb6\x48\x40\xd6\x8b\xdd\xc0\x7e\xf5\xb3\xd4\xf4\xf3\x6a\x17\x56\xce\xeb\x15\x1c\xf9\x9b\xc0\x00\x2a\x41\x8e\x2c\xe0\x8d\x06\x5b\x7d\xb2\xfe\xbc\x59\x22\xe0\xbc\x74\x8d\x62\x7e\x9c\x59\xc2\x7d\x33\x9f\x28\x64\xe2\x79\xa7\x10\xa1\x75\x93\x79\xb9\xa3\x16\x0c\xa0\x07\xc8\x91\xaf\xb8\x48\xe3\x29\xc2\x86\xa8\xa7\xee\x1a\x34\xd7\x47\x25\x85\xa9\xb3\xa7\xf7\x19\x66\x06\xb9\xce\x3f\xbe\xd6\x52\xcf\xf9\x0e\x64\xab\x61\x91\x52\xe4\xc8\x22\x2e\xc2\x5f\x70\x2b\x9d\x39\xc0\x4f\xc7\x95\x5e\xf2\x3e\x8f\xff\xd9\x4b\x26\x42\x52\xc1\x33\x4e\x4b\xb7\x92\x9a\x7f\x4b\xbc\xd8\x28\xf3\x87\x01\x54\x86\x1c\xf9\x86\x8b\x48\x16\xe6\x15\x24\xd2\x5b\xb9\x61\xc2\xc3\xea\xe0\xd6\xc5\x0c\x2e\x7f\x3f\x39\x86\x01\xdd\x9c\xad\x3f\x4e\xd6\x8d\x34\x13\x0c\x30\x80\x1e\x22\x47\x96\xf0\x76\x17\x75\x5c\xb2\x5a\x63\xe6\xaf\x5b\x2d\x37\x8a\x93\xc6\x4e\x0a\xc4\xc5\x9b\xd6\xfa\x24\x9e\x77\x50\x3d\x87\x3a\x96\x2e\x49\x83\xbd\x5f\x97\x23\x47\xbe\xe3\x22\x5e\xc4\x83\x5b\x24\x77\x7b\xd0\x9d\xc4\xa7\xeb\x26\xd6\xaf\x5e\x75\x80\x12\x72\x34\x9f\xea\xb7\x89\x9a\x24\xb6\xb1\x2c\xb5\x62\xef\x0d\x15\xc8\x91\x65\xbc\x27\xea\x07\x73\x8e\x89\x88\x86\xde\x3c\x36\x4f\xe0\xc3\xb5\x7d\xc1\xd2\x64\xbc\x4a\xf3\xfc\xe8\x87\xc2\x6f\x6d\x53\x96\xa9\x17\xd9\x59\x61\x00\x3d\x42\x8e\xfc\xc0\xfb\x08\x43\x88\xe2\x75\xfc\xa5\x91\xe8\xc0\x03\x0f\x8b\x21\xbd\x67\x71\x54\x21\x02\xe5\xc7\xbd\x73\x53\x7b\x32\x9c\x4c\xa6\x8e\xfe\xc8\xc3\x00\xaa\x44\x8e\xac\xe0\x3d\x1b\x12\x90\x7a\xca\xc9\x81\x97\xdf\x8f\x9c\xfd\x2e\xb5\x43\xbf\x53\x0e\x71\xf8\xe5\xba\x41\x37\x88\xeb\x4f\xf0\xe4\xe5\xef\x98\x53\x30\x80\xaa\x90\x23\x3f\x71\x91\x37\xaa\xa9\x2f\xa1\x3d\xb2\x38\xcb\xe0\x0f\x7e\xad\x9a\xf9\x07\x2f\xe8\x6e\xbb\xf1\xb8\xca\x8d\xf1\x0c\xc5\x70\xe9\xd8\x15\x78\xc2\x00\x7a\x8c\x1c\x59\xc5\x45\xee\x87\x7f\x7f\xfa\x4a\x8f\xff\x4b\xe3\x8a\x99\x79\x7a\x99\xb0\xd4\xa3\x1e\xe1\x2a\xa7\xc8\xbb\xb9\xac\xdf\xa8\x62\x7d\xb9\x73\x95\x61\x00\x55\x23\x47\xd6\x70\x91\x1e\x8a\x1e\xb1\x51\xcc\x5d\x8a\x00\x0b\xda\x56\x17\x46\xa7\x77\x67\x28\x0c\x52\x73\x2a\xed\xf7\xdd\x63\x35\x19\x6f\x51\x48\x61\x6f\xa5\x4f\x90\x23\xbf\x70\x91\x79\xb2\x2f\x35\x2f\xdf\xdc\x1a\x65\x16\x12\xce\x74\xe5\x4d\x8d\x18\x91\xba\xab\x2e\x10\x71\x5d\xe5\x75\x7b\xb0\x88\x78\x04\x29\x0b\x0c\xa0\xa7\xc8\x91\x75\xbc\xc7\x00\x29\x45\xae\xb1\x0c\xfd\x7c\x38\x3b\x49\x7f\x49\xe4\x7a\xda\xc0\x9c\xba\x7b\xda\x26\xc5\x7c\xbd\xc1\x94\xf6\x61\x5e\xdd\xb8\x0b\x0c\xa0\x1a\xe4\xc8\x06\x2e\x12\xf0\xc0\x06\x6e\x4f\x20\x75\xe4\xae\xb6\x70\x15\xce\x9d\x8b\x1f\xd2\x17\x99\xfa\x64\x91\xe0\xe7\xa8\xf7\x5e\xfd\x79\x43\xb0\x14\x0c\xa0\x5a\xe4\xc8\x6f\x5c\x44\xe7\xd6\xd2\x05\x8b\x84\xea\xeb\xb5\x31\x8c\xed\x0d\x12\xa2\xc2\xb7\x31\x05\xe9\x92\x91\x09\x3b\x11\x5f\xf2\xfa\x36\x4d\xbb\x08\x60\x00\xd5\x21\x47\x36\xf1\x3e\x85\x13\x61\x7c\x7a\xf3\xd6\xa3\xe2\xc4\xf4\x83\x1a\x1b\xf7\x4e\x29\x6e\x82\x3b\x9d\x2f\x68\x12\x57\x00\xdd\x00\xdd\xb9\xc9\xef\xd8\xa9\x59\x3d\x72\x64\x0b\x17\xc9\x71\x1d\xff\x7e\xc2\xfe\xfb\xab\xdf\xef\x9f\x27\x0c\xee\xc6\x3d\x90\x0b\xee\x33\xce\x92\x16\x84\x2b\x07\xf9\xa3\xe9\x5d\x04\xa9\x61\x00\x35\x20\x47\xb6\x71\x91\xc5\xbc\xfb\xed\x74\xeb\x5e\x0a\x3f\xcd\x18\xf8\x30\x4b\xb1\xb5\x0e\x8f\xce\x8e\x0c\x4c\xe7\xc6\x9c\x91\xc5\x24\x1d\x2c\xcc\xf9\xc2\x00\x7a\x86\x1c\xd9\xc1\x45\xa6\x43\x55\x78\xae\x04\x27\xb2\xdc\x18\x38\x91\x7c\xb2\xd5\x36\x36\x60\xa2\xad\x89\x78\x6e\x31\xe3\x40\x3e\xbd\x97\xe7\x58\x11\xf6\x7e\xd2\x88\x1c\xd9\xc5\x45\x12\x1f\xc4\xee\x32\x3c\x6a\x9d\xee\xbe\x23\x69\xc4\xff\xc8\x29\x69\x4e\xd6\x38\x3c\x91\xf2\x80\xf8\x27\xd5\xe5\x2b\x6e\xcc\x75\xaa\x30\x80\x9a\x90\x23\x7f\xf0\x1e\x03\x24\x5b\xe9\x1c\x18\x8d\xb3\x3c\x9c\x99\xb7\x25\x9e\x4a\xf8\x41\xd0\xe2\xa2\x1f\x56\xb8\xd8\x3b\x1d\x1b\xcc\xf6\xe0\x61\x1c\x76\x5c\xdb\x8c\x1c\xd9\xc3\x45\xa4\x76\x82\x92\x35\x0d\x0f\xdc\x8c\x5d\x9d\x65\x8e\x5b\xdc\x56\xb1\x23\xe0\x27\xbb\x9d\x1d\xdf\x6a\x61\xfb\x44\x40\x5c\x2c\xdb\x01\x06\x50\x0b\x72\x64\x1f\xef\xc9\x18\x25\xff\x8c\xa5\x9e\xb2\x54\xf7\xcb\x43\x75\xa5\xe2\x99\xbe\x87\xd7\xbe\x15\xab\xab\x64\x28\x9c\x1f\x15\xf6\xf6\xa0\x78\xad\x0b\x03\xe8\x39\x72\xe4\x00\x17\x51\x1e\xea\x64\xe3\xaa\x54\xa4\xa8\x7b\x48\x57\x35\xe7\x91\x71\x5e\xed\x02\xcf\x8d\xbd\x9a\x96\x39\x02\x49\x0e\x49\xd6\x21\x1d\xec\xfc\xef\x05\x72\xe4\x10\x6f\x4e\xae\x78\x18\x5d\xd0\xc8\xb0\xf2\x62\x50\xd3\xf4\x78\xa5\xb5\x04\x03\xb5\x27\x8d\x32\xf5\x04\xc3\xe7\xec\xad\x11\xd7\x5a\x3d\x52\x18\x40\xad\xc8\x91\x23\x5c\xa4\xa9\x09\xf6\x0a\x9d\x72\xe4\xe8\xa4\x43\x9d\x7f\xcd\x45\x92\x4e\xf3\xe1\xad\xe9\x2d\x57\x05\xb3\x60\x0f\x98\x64\xb0\xc9\xdb\x07\x06\xd0\x4b\xa4\xc8\x2a\xf8\x67\x69\x9e\xff\x9d\xd0\x00\x34\x5e\x71\x86\x44\x27\xb9\x25\x7d\x94\xee\x24\xf8\x22\x95\x63\xed\xd7\x72\x95\x88\x47\x56\x3f\x69\x4e\xd6\x45\xef\xf0\x76\x42\x77\x15\x8a\x13\x06\x10\xf2\xe2\x0c\x40\xe3\x35\x67\x4c\x2b\xd0\x81\x7f\xbc\x17\xa3\x88\xef\xa4\x3c\x97\x0a\x39\xf1\xf9\x96\xe9\xf9\x05\x71\xd9\xb7\x5a\x15\xf2\x41\x8e\x91\x07\x83\x4a\x30\x80\x90\x37\x67\x00\x1a\xaf\x3a\x03\xb4\xe7\x77\xcb\x6d\x3f\x3b\xbf\xd2\xde\x3d\x76\xf1\xd6\xd2\x54\xf6\x1f\x1e\x9d\xe2\x45\x92\x40\x8a\xb8\xf1\xe6\x2b\xf7\x78\x18\x61\x00\x21\xaf\xce\x00\x34\x5e\x77\x86\xaf\xb2\x91\x55\x91\xee\xa9\x84\xaa\xba\x81\x6b\x8e\xee\x5e\x52\x5d\xbe\x9f\x22\x99\x30\xe3\x6d\xae\x20\xfd\x3c\x89\x95\x17\x84\x30\x80\x90\x77\x67\x00\x1a\xaf\x3c\x33\xcd\xfe\x23\xb7\xe9\xf3\x46\x38\xdb\x56\x1a\xbf\xb0\xdf\xf1\xe9\x2a\x4f\xab\x4b\x5a\x4d\x19\x2c\xdf\xe3\x5e\x9b\x32\x09\xd7\x63\xdf\x17\xe4\xe5\x19\x80\xc6\x6b\xcf\x8c\x91\x66\xcb\x19\x64\xaa\x10\x52\x69\x3b\x8a\x65\xfb\xbf\xb3\xb2\x6e\xee\xaa\x65\xac\x30\xaf\xeb\x1a\xcb\xec\x92\x73\x8c\xb2\x86\x01\x84\xbc\x3d\x03\xd0\x78\xf5\x19\x97\x7c\x86\xf3\x5f\x82\xad\x38\x9e\xb0\x28\xaa\xcf\x7f\x7c\xb8\x9c\xed\xa4\x16\x39\x30\xe1\x40\x6d\xb9\x35\xfe\x29\xcf\xb8\xf7\x22\x0c\x20\xe4\xf5\x19\x80\xc6\xeb\xcf\xcc\x54\xfb\xa7\xbe\xfb\x62\x72\x29\x63\x37\xa1\x35\x7a\xd9\x43\xea\x53\x8b\x9d\xcf\xb3\xb4\xcc\x98\x0c\xff\x4d\x8b\xd7\xd2\xbb\x62\x30\x80\x90\xf7\x67\x00\x1a\xaf\x40\xc3\xfa\xdc\x96\xe4\xc9\x6c\x1f\xe6\xe5\xc3\xa2\xbb\x93\x2c\xa2\x6c\xcb\xe7\xa7\x72\xb8\xdf\x6d\xdd\x8f\x06\xcb\x3f\xd3\xbc\x2e\x6a\xc0\x00\x42\x5e\xa0\x01\x68\xbc\x06\x4d\xeb\x63\xcd\xa7\xb4\x76\xdc\x27\x4d\x5b\x09\xbc\xa5\x2e\x07\xd4\xbf\x2c\xf9\xe3\xc1\xf6\xb8\x5b\xaf\xbd\x9c\x99\x7d\x8a\x31\x5d\x1d\x06\x10\xf2\x06\x0d\x40\xe3\x55\x68\x1e\x17\x47\x7f\xa2\x45\x75\xf1\x24\x54\xdd\x6f\x3c\xd1\xee\xb0\x49\x19\xfb\x5d\x32\x4d\x55\x8c\x3c\x22\x67\x10\xb5\x5a\x63\x75\x02\x06\x10\xf2\x0a\x0d\x40\xe3\x75\x68\x84\xee\x7f\x1e\x69\x90\x4a\x5e\x18\x6d\xfe\xb1\x6a\xd4\x5e\x96\x42\xfe\x7e\xd8\x78\xd5\xf5\xcf\x82\xd5\xe7\xfa\x3f\xb2\x6f\x89\xd0\x30\x80\x90\x77\x68\x00\x1a\xaf\x44\xc3\x62\x23\xed\x29\x6a\xd7\xc6\xbc\xe5\x1b\x18\x3b\x91\xf3\x69\x6f\x3b\x57\x93\xf0\x79\x1a\xbf\x83\x3d\x6a\x48\xd4\xd6\xef\x9c\x39\x0c\x20\xe4\x25\x1a\x80\xc6\x6b\xd1\x4c\x4a\xd9\x89\x56\x9d\x10\x89\xfc\x6c\x32\x5a\xef\x67\xd0\xa3\x3a\xe2\x9d\xfc\x8e\x2d\x9b\xc5\x78\xe6\xfb\x18\x09\xba\x6d\x55\x1c\x06\x10\xf2\x16\x0d\x40\xe3\xd5\x68\x14\x1f\x7b\xab\x1c\xe5\xbd\xea\x6c\xb9\x57\x38\xf8\xba\xa9\xe2\x9e\x76\xc7\x47\xa6\x7d\x67\xf1\x5e\x86\x4e\xcf\xa8\x51\x07\x4f\xec\xf9\x82\xbc\x46\x03\xd0\x78\x3d\x1a\xfd\xc9\x24\x42\x1b\xdf\xdb\x57\x6b\x79\x03\xd9\xcd\x79\x23\xc9\x4d\x46\xd8\xed\x15\x1f\x36\x65\xd5\x27\x92\xeb\xca\xae\xf7\xd3\xc0\x00\x42\xde\xa3\x01\x68\xbc\x22\xcd\xaa\x63\x55\x7c\xcc\x1b\x96\xc0\x6b\x65\x75\x49\x3b\xbf\xaf\x85\x54\x45\x55\xd5\x38\xf9\x7b\x85\x7b\x18\x14\xdb\x4d\xba\xbe\x43\xc1\x00\x42\x5e\xa4\x01\x68\xbc\x26\x0d\xab\xe0\x8c\x11\x61\xa5\xa2\x0a\x86\xa7\x7d\xa9\xbc\x75\x30\x88\x7b\xa4\x44\xa0\xc3\xb8\x9b\xc9\x5e\xf5\xf8\x8e\x51\x61\x99\x29\x0c\x20\xe4\x4d\x1a\x80\xc6\xab\xd2\xdc\x8b\x11\x1e\xbd\x69\xb3\x5f\xe1\x43\x87\x49\x7c\xd1\x3d\x1c\x1d\xcc\x17\xe3\x9e\xe9\x09\xa5\xb2\xef\xcf\x37\x11\x32\x38\x63\x47\xa1\xc8\xab\x34\x00\x8d\xd7\xa5\x79\xfa\x5d\x7a\x58\x8c\x97\xd5\x21\xf8\xdd\x09\x9e\xb6\x2b\x51\xdf\x5d\xf8\x73\x0f\x93\x12\x15\x1c\xf4\xdf\x66\xcf\x15\xb4\x8d\xd1\xc3\x00\x42\xde\xa5\x01\x68\xbc\x32\x4d\xcc\xc9\xa7\xc7\x78\xf5\xd5\x84\x30\xb3\x9b\xa7\x57\x2b\x28\xc7\x66\x46\x44\xcf\xba\x8b\x9c\x57\xd7\xd1\x4d\x83\x96\x4b\xae\x49\xc0\x00\x42\x5e\xa6\x01\x68\xbc\x36\xcd\xd1\xdd\x35\xa7\xf8\xa2\x56\xee\x35\x31\x87\x37\x62\x1f\x64\x04\x02\x0f\x2f\x9e\x13\xbf\x10\x8e\x2e\x31\x82\x57\x0e\x3e\x96\xc9\xc3\x00\x42\xde\xa6\x01\x68\xbc\x3a\x8d\x85\x6f\x42\x47\x75\xbc\x7a\x52\xeb\x0b\xf4\xda\x55\xd6\xd1\xed\xb5\xa9\x2a\x8e\x39\x93\x38\x96\x61\x3e\x27\x2b\xbd\x5e\x52\xec\x75\x0c\x79\x9d\x06\xa0\xf1\xfa\x34\xd1\xd5\xca\x24\x91\xbe\x4f\x30\xe7\x2c\x0f\x45\xc7\x78\xb5\xa9\x9f\xcd\x0f\xc8\x5e\xb1\x53\x78\xd7\x38\xf1\x44\x3b\xbd\x9d\x16\xfb\xee\x23\xef\xd3\x00\x34\x5e\xa0\xc6\xfe\x7c\xb6\x26\x27\xcb\x79\x8d\xa8\x5f\xaf\x3e\x3e\xbc\x09\x54\x9e\x92\xf5\xfa\x4e\xd5\xbd\xe2\x83\xc5\x64\xb2\x22\x74\xcf\x88\xc2\x00\x42\x1e\xa8\x01\x68\xbc\x42\xcd\x65\xfd\xe8\xfe\x6c\xe1\x9a\x96\xc5\x8c\x97\xaf\xad\x76\x7f\x4b\x69\x7a\xdf\xf6\xe6\x9b\x11\x5e\xc4\xe8\x5e\x94\x57\x44\x45\x00\x18\x40\xc8\x0b\x35\x00\x8d\x97\xa8\x49\xb0\x47\xc7\xa6\x76\x79\x5c\x7c\xab\xf5\x6e\x37\x9f\x5a\xc6\x76\x4d\x60\x64\xbf\x76\x85\x87\xcd\x9c\xd7\x27\x07\xf4\x64\x5c\x82\x01\x84\x3c\x51\x03\xd0\x78\x8d\x9a\x35\x49\x35\xf9\xfb\xea\x9e\x44\x3c\x45\xfa\xd9\xf3\xfc\x95\xa2\x06\x57\x0c\xaa\x9a\x52\x19\xd4\x5b\x16\xd9\xc2\xbf\x92\x94\x63\x27\x3b\xc8\x1b\x35\x00\x8d\x17\xa9\x71\x37\xbf\x69\xb8\x68\x71\x4c\xb4\xb3\xcf\x3f\xb1\x4a\x55\xd3\xa7\x81\x25\xda\x73\x2a\xfd\xfb\x0d\xa9\xad\x41\x82\xe3\xe3\x3c\x4c\x30\x80\x90\x47\x6a\x00\x1a\xaf\x52\x73\x69\xea\xdd\x0d\x22\xc7\xa7\xe8\xdf\x54\x6a\x1a\x81\x27\xb4\x77\xf7\x42\x68\xa6\x63\xfd\xd4\xda\xeb\xe7\x39\xd3\xb6\xf8\x63\xb9\x60\x00\x21\xaf\xd4\x00\x34\x5e\xa6\xc6\xb7\xc9\x40\xe6\x40\x52\x62\x88\x72\x70\x7b\xb2\xef\xd9\xb1\x68\x1e\x05\x19\x2d\x51\xa3\x5b\x23\xd6\x87\x53\x41\x9e\x35\x31\xd8\x2b\x0c\xf2\x4c\x0d\x40\xe3\x75\x6a\x8c\x7f\x4c\x72\xe8\x67\xda\x8c\xbf\x7a\x69\x77\x72\x83\xf3\x83\xc4\x83\xaf\x7b\xdf\x6e\x68\xb4\xd1\x3b\xa6\x96\x65\x3f\xbe\x3e\x8e\x9d\x1f\x22\xee\xd4\xfc\xcf\x84\xe7\x3f\x05\x46\xff\x9e\xf0\xe0\x85\x6a\x4e\x51\xcb\x5d\x16\x3b\x9d\x30\x47\x4d\x39\x47\xc4\x77\xe7\xe5\x87\xdb\xee\x61\x51\x02\xaf\x6f\x47\x4d\x4e\x7d\xcf\xb9\x3e\xf7\x9a\x0d\x06\x10\xf2\x50\x0d\x40\xe3\x95\x6a\x96\xe9\xc5\x52\x54\x5e\x7c\x6a\x8e\x74\x55\x69\xf1\xea\xbc\x65\xa8\xfe\x22\xc3\xf9\xd4\x2f\x29\x78\x85\xbe\xe7\x99\xa0\xf4\x80\x0d\x0c\x20\xe4\xa5\x1a\x80\xc6\x4b\xd5\x4c\xda\xb9\xed\xec\x84\xc5\xb6\x1a\x5e\x2c\x56\x92\x88\x21\x6c\x9d\x7d\xb9\xe1\x21\x66\x19\xda\xfd\x3b\xe3\xe6\x9b\xb9\x49\x37\x0f\x18\x40\xc8\x53\x35\x00\x8d\xd7\xaa\x61\x9e\x76\x8c\x32\xd9\x75\x4c\x48\xb9\x63\x52\xfd\xe1\x30\xd2\x44\xb5\x66\xd8\xd2\x3c\x80\xbb\x22\xf3\xc2\xaf\xc9\x4b\x77\xff\x35\x49\x40\xde\xaa\x01\x68\xbc\x58\x4d\xd3\xfd\xf7\x14\x6e\xa3\x0f\xee\xaf\x2e\x1d\xba\x55\x2d\x14\x7d\xf7\x97\xd1\xe3\x7c\xe6\x66\x00\x0b\x06\xd8\x47\xae\x14\xfb\x60\x87\xef\xc8\x63\x35\x00\x8d\x57\xab\xb1\x69\xaa\x9f\x70\xa9\x61\x38\xc1\x38\x12\xea\x3c\x73\xef\x43\xa6\x69\xdf\xeb\x67\x5f\x94\x21\x7a\x6d\x03\x81\xeb\x11\x26\x23\x3c\x30\x80\x90\xd7\x6a\x00\x1a\x2f\x57\x33\xbd\x72\xbc\x28\x5f\x5c\xfa\xca\xdd\x91\xd8\x4f\x51\x67\x2a\x36\xf8\x3e\xc9\xb0\x4d\xaa\x9c\x32\x1a\x2f\xd2\x2a\x82\x55\xeb\x21\x18\x40\xc8\x73\x35\x00\x8d\xd7\xab\x59\x0a\xbb\x78\xab\x71\x53\x84\xd7\x89\x6c\x65\x32\xca\x63\x73\xe4\x46\xeb\x1c\xfd\x42\xef\xdd\x30\x73\xcb\xcf\x18\xe3\x4f\x6c\xd8\x23\x19\x79\xaf\x06\xa0\xf1\x82\x35\xb3\x8e\xa2\x07\x6e\xb3\x6a\x8f\x46\x2d\x25\xc7\xcd\xad\xac\x52\x15\x2f\x50\x7b\xe6\xea\xbc\x24\x60\xad\xd0\xb8\x39\xe5\x22\x2f\x08\x03\x08\x79\xb0\x06\xa0\xf1\x8a\x35\xba\x68\x7e\x81\xc2\x19\x8c\x6c\xe5\xaf\xe1\x71\x85\x12\xba\xb4\x73\x37\x5e\xb2\x5f\x93\xf7\xdd\xa8\xa4\xca\xbc\xd1\xaf\x29\xe7\x0d\x03\x08\x79\xb1\x06\xa0\xf1\x92\x35\x07\x7a\xa9\x1f\xea\x05\xc3\x0e\x52\x16\xbc\x0b\x3b\x88\x74\x23\x3a\x22\xa5\xac\x8c\x67\xae\x28\xa9\x2e\x62\x36\x4b\x2a\x9d\xb0\xdb\x82\x3c\x59\x03\xd0\x78\xcd\x1a\x9a\xc6\xe7\x6a\x0a\x54\x98\x92\x99\x94\x4c\xc7\x03\x27\x5b\x7d\xee\x60\xf2\xdf\x31\x4c\x42\x55\x5d\x3c\xb9\x0e\x99\xbe\x55\xb4\x30\x80\x90\x37\x6b\x00\x1a\x2f\x5a\x13\xd3\x7b\x5b\xd6\xd3\xed\x50\x33\x29\x9e\x1b\x4e\xb8\xb8\xab\xfd\xdc\x51\xb7\x41\x4b\x89\x37\x61\xcb\x93\xa2\xdc\xb9\x5f\xe8\x34\x0c\x20\xe4\xd1\x1a\x80\xc6\xab\xd6\x7c\xdb\xfb\x66\x65\xcd\x58\xf6\x67\xf2\xf0\x6e\x70\x83\xcf\xb5\xf1\xe5\xd1\x60\xc2\xf1\x85\x3b\x83\x69\x3b\x47\x26\xcc\xfc\x13\xd8\x9b\x2b\xf2\x6a\x0d\x40\xe3\x65\x6b\x9a\x39\x14\x77\xc7\xdf\x58\x47\xdf\x7f\xc6\xf7\xc7\x9e\x96\x08\xc4\x91\x3f\xfe\xe0\x62\x57\x3c\xf2\xa5\x63\xdf\x59\x21\x52\x47\x1f\x06\x10\xf2\x6c\x0d\x40\xe3\x75\x6b\x4c\x0e\x46\x8f\xee\x51\xbc\x63\x6a\xa9\xbb\x66\x31\xa0\xe1\xdb\xb8\xb8\x51\x30\x5f\x17\xdf\xc7\x42\x1d\xe8\x71\xf4\xe0\x43\xb2\x00\x0c\x20\xe4\xdd\x1a\x80\xc6\x0b\xd7\x70\xb4\xe7\x24\x91\x43\x02\x25\xee\xec\x3e\x0d\xa6\xde\x22\x72\x2c\x4b\x9f\x3e\xcf\x09\xaf\x4b\x1d\xa3\x29\xbc\x33\xe0\x72\x4e\x13\x06\x10\xf2\x70\x0d\x40\xe3\x95\x6b\xa6\x30\x0c\xfb\x1b\xce\x3b\x90\x90\x4b\xc4\xb7\xe3\x5a\xbc\x5f\xb6\xe5\x4d\x9c\xd4\xa5\xba\x56\xf9\x62\x0d\x07\x87\xe1\x18\xec\x40\x01\x79\xb9\x06\xa0\xf1\xd2\x35\xb2\xde\x1a\xfe\xef\x84\xc9\xa5\x3e\x73\xbd\x55\xb3\x88\xaa\x4a\x95\x91\x69\xaf\xd6\xe2\xb6\xd4\xac\xa5\xf2\xa1\xa0\x18\x0c\x31\x83\x01\x84\x3c\x5d\x03\xd0\x78\xed\x1a\xd9\x92\x87\xc6\xf4\x8c\x9a\xd7\x7f\x7e\xed\xd0\xcd\xf1\x4c\x42\xaf\xd2\x35\x11\x91\xee\xc8\xc5\xda\xdc\xb7\xa2\x1b\xfb\xae\xc5\x0f\x03\x08\x79\xbb\x06\xa0\xf1\xe2\x35\x5f\x57\xbc\x52\xc2\x8a\xae\x5f\x78\x37\x31\x58\x41\x13\x49\xe9\x34\x20\xa0\x73\x2f\x6a\x65\xfe\xb9\x53\xe3\xeb\x92\x68\x9d\x59\x2b\x18\x40\xc8\xe3\x35\x00\x8d\x57\xaf\x79\xf0\xa7\x24\x81\xf8\xed\x26\x49\x95\x58\xb6\xc5\xc1\xce\x03\x4f\xef\x36\x57\x49\x9d\xaf\xd6\x15\x3b\x3d\xcd\x2f\xd3\x6f\x8f\x8a\xc3\x00\x42\x5e\xaf\x01\x68\xbc\x7c\xcd\xe3\x91\xa0\xc3\x06\x83\x65\xff\xe2\x82\xd2\xd2\x1b\xb9\x29\xcc\x1e\xd6\x1d\x3f\xc3\x45\x6e\x2f\x71\x17\xfb\x25\xb1\x59\x9c\xc2\xde\xc5\x90\xe7\x6b\x00\x1a\xaf\x5f\x43\xf2\x31\x7b\xa0\x31\xd0\xa9\x57\x39\x0f\x5a\x12\x6e\x4c\x3b\x2b\xd7\x3d\x17\xa2\xfa\x24\x88\xa2\xf5\x8b\x75\x07\x3a\xff\x3a\x76\x92\x80\xbc\x5f\x03\xd0\x78\x01\x1b\x11\x05\x49\x5d\xb7\x60\x29\xca\xe2\x96\xee\xa6\x8c\x8b\x71\x8a\x46\xdb\x05\x9a\xba\x63\x7a\x3c\x09\x0b\x32\xbc\x37\xcf\xda\x60\x15\xe4\x01\x1b\x80\xc6\x2b\xd8\xf0\x7c\xb1\xab\x6b\x32\x09\x08\x3b\xb5\x1d\x5b\x43\x5b\x42\xf2\x38\xdb\xd3\x88\x1d\x2d\x3d\xaa\x03\xb2\x53\x42\x53\x5b\x89\x15\x61\x00\x21\x2f\xd8\x00\x34\x5e\xc2\x86\xc8\x2d\xe4\x4c\x9a\x59\x71\x32\x7f\xbf\xd6\x9f\xad\x29\x1b\x07\x39\xd5\xcf\xb6\x2f\xf5\x6d\xd3\x3b\xac\x7f\x7f\x59\x79\x55\x6e\x08\x03\x08\x79\xc2\x06\xa0\xf1\x1a\x36\x33\x96\xbd\x8f\x8f\x0d\xd8\x12\x0d\x52\x9a\x48\x65\x77\x17\x17\xc8\x65\x46\xac\x9f\xa0\x91\x68\xdd\xe8\x47\x6d\x15\x2f\xf5\x5d\x80\x01\x84\xbc\x61\x03\xd0\x78\x11\x9b\xf2\xf0\x2f\xc3\x96\xf2\xfa\x79\x1c\x73\x54\xa9\x97\x55\x42\x1d\xd8\xd6\x0a\x06\xc5\x1a\x35\x38\xad\x9d\xa9\xbb\x5d\xdb\xff\xf5\xbb\x96\xc8\x23\x36\x00\x8d\x57\xb1\xb1\xae\x58\xdd\x77\x93\xbf\x95\x3a\xbd\xe8\x22\xf0\x9e\xf2\x9c\x69\xb8\xa8\xd5\x88\x6a\xef\x27\xa6\x49\x1b\x2f\x19\xef\xe5\x55\xec\xd8\x12\x79\xc5\x06\xa0\xf1\x32\x36\x1d\x04\x3b\x71\x12\x1e\x5f\x9e\xfb\x4d\x30\xc1\x84\xba\xf7\x3c\xf6\x04\xc5\x66\x5a\x8e\x07\x96\xaa\xd3\x95\x3d\x19\xb3\xb7\xc6\x4e\x45\x90\x67\x6c\x00\x1a\xaf\x63\x63\x4f\x47\x7a\xec\xcf\x9b\xe3\x2f\xdf\x33\xf7\xdf\xfb\xf6\xe6\xab\x4d\x87\xef\x9d\x07\x0b\x63\x79\x9f\xbf\xd9\xff\xd8\xfd\x1a\xef\xa8\x0d\x03\x08\x71\xc7\xe6\x7f\x26\x3c\x4a\xce\x5c\xf7\xc2\x62\xe5\x82\x0c\xdf\xa1\x1b\xec\x2c\xb8\xef\x7a\x86\xfa\x98\x53\x96\xe9\xbc\x99\xb2\xef\xb2\x09\x66\xef\x3c\xf6\xf7\x84\x07\x2f\x64\x53\xe0\xb6\xfd\xdc\x44\xe5\x77\xa6\x4f\x3c\x6b\xe6\x1d\x59\x95\x62\x5f\x69\xf4\xe3\x93\x39\x9a\xe7\x84\x3d\xe2\x34\x14\x07\x7d\xc9\x61\x40\x88\x3c\x64\x03\xd0\x78\x25\x1b\x0e\x12\xae\x0e\x8d\x5a\xdb\x96\xac\x51\xbf\x72\xa6\xc1\x53\x03\x13\x2c\xa5\x55\xee\xc6\x1e\x4f\x24\xfa\x05\x23\xcb\xe1\x4a\x36\x18\x10\x22\x2f\xd9\x00\x34\x5e\xca\xe6\x8d\xa5\x79\x2d\xcb\x8a\x99\xe7\xae\xa3\xf9\x3d\xbe\x9c\x2d\x58\x3b\x87\x9e\x4f\x61\xe0\x65\x53\xfa\xcb\xd6\xae\x3f\xfb\xea\x00\x06\x84\xc8\x53\x36\x00\x8d\xd7\xb2\xf1\x67\x15\x7b\xaf\x2a\x63\x4e\x96\x99\x5e\xf5\xd0\x59\x79\xfd\x7a\x40\xe3\x36\xfb\x0e\x23\x87\x17\x49\x7c\xf0\x9f\x86\xc5\x39\x31\x18\x10\x22\x6f\xd9\x00\x34\x5e\xcc\x26\x94\x28\xb0\x4c\x6b\x7a\xd3\xde\x27\x6f\xd1\xcb\x5c\xee\xbd\xa9\xd1\xf9\x1a\x4e\x91\x1c\x3f\x1d\x73\xd2\x86\x8f\x0f\x06\xa7\xb1\x7b\x0c\x79\xcc\x06\xa0\xf1\x6a\x36\xce\xb4\x21\xd1\x47\xae\x13\xb7\x09\x53\x9a\x38\xfa\xcd\x59\x92\xc2\x8a\x72\xbe\x59\x40\x7c\x7f\xbe\x91\x9f\x0c\xd6\xf4\xdd\x27\x80\x01\x21\xf2\x9a\x0d\x40\xe3\xe5\x6c\xb6\xfc\xf2\xc6\x2a\xcb\xa5\x27\xce\xc9\x85\xfe\xb9\x9d\x57\x14\xde\x4e\x4a\xf0\x24\x7e\xec\xfb\xaf\x19\xaa\xf3\x93\xc1\x5d\x59\xc4\x30\x20\x44\x9e\xb3\x01\x68\xbc\x9e\xcd\x48\x4d\x45\x9b\xf8\xcf\x41\xfb\x9a\x8f\x68\x2a\xf3\x17\x0f\x7b\xea\x5a\x20\xf3\x48\xef\x46\x54\x44\x85\x7d\x41\x09\x7f\xbc\x3b\x0c\x08\x91\xf7\x6c\x00\x1a\x2f\x68\x53\x92\x90\xa2\xf9\xc4\xc1\xd6\x62\x9a\x4d\xf8\xf3\x5a\xf7\x76\x4e\xbd\xab\x83\x3b\xd9\x4a\xb6\x5b\x7e\x87\xc5\x4a\x6d\xed\x39\x61\x18\x10\x22\x0f\xda\x00\x34\x5e\xd1\xe6\xab\xd2\x20\x7d\x5d\x8b\xac\xfa\xc6\xa0\xf4\xac\x53\xaf\x97\xa9\xde\xf5\x7b\x70\x80\xba\xfc\x39\xd7\x84\x7d\xf6\x07\x7f\xf2\x49\x60\x40\x88\xbc\x68\x03\xd0\x78\x49\x9b\x48\xe3\x73\x2f\xfb\x18\xab\x20\xe5\xd3\x6e\xef\x5f\xa4\x5a\xf3\xa0\x44\x78\xe7\x56\x67\xa6\x8f\x9e\x7f\x12\x4b\xdd\xeb\x6e\xa1\x82\x01\x21\xf2\xa4\x0d\x40\xe3\x35\x6d\xec\x4e\x6f\x4d\x8f\xb9\x09\x95\xdd\x78\xeb\xfa\x51\xa9\x6a\x95\x2b\x68\xaa\xe5\xec\xa4\xc6\xd5\xe9\x74\x01\x07\xab\x5f\x45\x23\xa7\x61\x40\x88\xbc\x69\x03\xd0\x78\x51\x9b\x18\x1f\x4f\xde\xc4\x16\xb1\x5b\x14\x6f\xcf\x9f\x36\xc9\xb5\x66\x1b\xd7\x6a\x08\xb7\xbd\x76\x48\xf2\xa9\x6b\x4b\x63\xaf\xba\x48\x09\x06\x84\xc8\xa3\x36\x00\x8d\x57\xb5\x39\x34\x7c\xd8\xe0\xe5\x55\x70\x9e\x59\x7c\x2e\x71\x86\xdc\x6a\xbb\xd6\xd5\x8d\xda\x9a\x59\xdb\xbc\xe8\x81\xcb\x65\x96\x6f\x0e\xd8\x2b\x0c\xf2\xaa\x0d\x40\xe3\x65\x6d\xaa\x13\xcd\xa9\xa3\xef\xa2\x4e\xac\xdf\x7e\x39\xc7\xc7\x78\x7d\x5d\x2c\x17\xee\xba\x35\xf6\x74\x89\xd7\xc0\xa3\x39\x99\xa9\x82\x1a\x06\x84\xc8\xb3\x36\x00\x8d\xd7\xb5\xe9\xff\x31\x5b\xc7\x30\x60\xc5\x68\x3e\x70\x76\x45\x18\x7e\x92\x92\xfc\x75\x39\xd4\xf7\x95\x14\xbd\x96\x95\x5e\xf2\xaf\x89\x4d\x09\x18\x10\x22\xef\xda\x00\x34\x5e\xd8\x06\x2a\x33\x65\x93\xae\x1c\x8b\x0d\x68\x7c\x3d\x62\x22\xa0\x01\x7a\x93\xdf\xbd\xc3\xf0\x49\x7f\x99\x3a\x3a\x28\x52\x02\xcf\xb9\x60\x40\x88\x3c\x6c\x03\xd0\x78\x65\x9b\x3a\xb3\xdc\xec\x41\x85\x68\x0d\xe9\x0a\x37\xb7\xd8\x56\x25\xaf\x13\x9b\xbe\xdf\xab\xb7\xc3\xa8\xc2\x7d\x4b\x15\x62\x7e\xb5\xd9\xc2\x80\x10\x79\xd9\x06\xa0\xf1\xd2\x36\xdc\xde\xd0\xcb\xd2\x33\xa1\x23\xaf\x59\x9a\x74\x8c\xa2\xd5\xd4\xec\x0f\x6e\x4b\x0c\x45\x44\x87\x7b\x1e\x8d\xbd\xad\x3a\x7f\x05\xfb\xbe\x20\x4f\xdb\x00\x34\x5e\xdb\x26\x99\xe5\x6d\xaa\x50\x32\x11\x11\x37\xcb\x1f\x31\xc7\x75\xf7\xed\xfe\x42\x96\x6d\x79\xd5\x0b\xec\x14\x2b\x44\x37\x58\xcf\xaf\xb0\xc0\x80\x10\x79\xdb\x06\xa0\xf1\xe2\x36\xb7\x6d\x5b\x78\x4b\x38\x94\xfa\x84\x02\xfc\x1e\x17\xf7\xd9\x1b\x51\x46\x8b\x5c\x30\x4a\x76\x7d\xf2\xe2\x57\xde\x45\xc9\x86\x08\x41\x18\x10\x22\x8f\xdb\x00\x34\x5e\xdd\x86\xec\x8a\xae\x7a\xba\x4e\x06\x30\x6b\xa6\x85\xe5\xaf\x17\xc9\x57\x58\x2d\x3a\x08\xa6\x5a\x64\xd8\x68\x29\x70\xb9\xe7\x74\xfa\xc3\x80\x10\x79\xdd\x06\xa0\xf1\xf2\x36\xef\x79\xb8\x7f\xda\x92\xdf\x27\x99\x7b\x6c\xed\xb2\x3e\xe1\x2a\x49\xd9\x76\x86\xc2\x78\x8b\x5f\x44\x67\x3d\x58\x5c\x49\xf4\x09\x76\x0c\x83\x3c\x6f\x03\xd0\x78\x7d\x9b\x34\xf4\xf5\xb8\xbd\xfb\x5c\x33\x4c\x0b\x07\x9a\x2e\x41\x45\xf6\x7d\xd2\x02\x3e\x45\xf6\xba\xb6\x9d\x96\x90\xb1\x75\xd8\x10\x56\x41\xde\xb7\x01\x68\xbc\xc0\x8d\xa3\x5d\x58\x4e\xcd\x98\xcf\x65\x02\xe1\x24\x81\x95\x33\x89\xb1\x3c\x24\x97\x83\x4e\x05\x73\xdf\x0a\xdf\xab\x0c\xb9\x4f\xfc\x5b\x1e\x06\x84\xc8\x03\x37\x00\x8d\x57\xb8\xa9\x2b\x5b\x5b\xbe\xbf\x8d\xd9\x8a\x9e\xb7\xa4\xe0\xf6\x12\x0a\x1b\x0e\x79\x99\x27\xfe\x39\xac\x5b\x3b\x36\x48\xee\xbe\x85\xfd\x19\x18\x10\x22\x2f\xdc\x00\x34\x5e\xe2\x26\xfb\x8c\x7e\xba\xae\x4c\xdb\xcf\xac\xcf\x83\xf6\x2f\xd5\x57\x9c\x5e\x4d\xdf\x80\x17\x98\x20\xdd\xec\xc0\xa5\xc9\x2c\xf1\x44\x53\x18\x10\x22\x4f\xdc\x00\x34\x5e\xe3\x46\x73\xaf\xc0\x3e\xa4\x68\xdd\x8d\x50\xd6\xc4\xcd\x9d\x09\x50\xdc\xe8\xd0\xfa\xe2\xed\x7d\xf9\x8d\x79\x55\xf7\xe0\xc1\xcb\x70\x76\x18\x10\x22\x6f\xdc\x00\x34\x5e\xe4\x66\x3f\xcb\x20\x8a\x8d\x15\xba\xdc\x6d\x2b\xdc\x61\x11\x28\x68\x19\x6b\xf3\xe1\xbd\x71\x3d\x78\xba\x4b\x55\x26\x43\x67\x53\xe5\x09\x03\x42\xe4\x91\x1b\x80\xc6\xab\xdc\xb4\x11\x8f\x5b\x57\x6e\x0f\x25\x57\x04\x0d\xb2\x79\x3f\xc9\xa4\x0a\x95\x69\xb8\xaa\xc1\xc0\x4d\x27\x74\xf6\xde\x4c\xc5\xab\x46\x29\x18\x10\x22\xaf\xdc\x00\x34\x5e\xe6\xe6\xac\xee\x6f\xe3\xbd\xc6\xe7\xfd\xd4\x25\xfe\xed\xa9\x86\x87\x2d\x2f\xcf\x10\xac\x07\xe6\xfa\x02\xd7\x86\xa0\x70\xe9\x67\x7f\x18\x61\x40\x88\x3c\x73\x03\xd0\x78\x9d\x9b\x22\xa9\x78\xde\xca\x86\xdf\x8e\xda\x0f\xa4\xe4\xeb\x9c\x2f\x2a\xc7\xd8\xec\xea\xb5\x3d\x39\x13\x61\x99\x56\x00\x1a\xcc\x4f\x38\xc2\x80\x10\x71\xe7\xe6\x7f\x26\x3c\x67\xbd\x9f\x18\xc7\x13\xd3\x49\x37\x74\x8f\xb3\x4a\x70\xef\x27\xad\x5e\x71\x5b\xdd\x81\xe5\x45\x85\x15\xaf\x14\xb1\xf0\xc7\xaf\xfd\x3d\xe1\xc1\x0b\xdd\xb8\x6f\x0e\xed\xf7\xe7\xff\x7c\xf4\x4d\xc3\x49\xe2\x8f\x91\x06\xea\x5a\xd9\xb3\xf7\x17\x7c\xc4\x7f\x8a\x7e\xae\xa8\x8b\xb8\xf7\x01\x3b\x18\x45\x1e\xba\x01\x68\xbc\xd2\x4d\xf3\xeb\x13\xe6\x46\xed\xe1\x4c\x61\xe4\x8f\x84\xb6\x9a\xdd\x22\x4e\x56\x06\xe9\x0c\xf7\xcb\x37\x3d\x48\x67\xa3\x22\x66\x67\x3e\x09\x03\x42\xe4\xa5\x1b\x80\xc6\x4b\xdd\xf0\x9a\xf9\x8d\x34\x1a\x84\x58\x5a\x7e\x53\x0d\xd6\x7a\x20\x53\x1b\xf9\xe1\x59\x91\x9a\x28\xe7\xa6\xdc\x65\x0f\x7d\xa5\xaf\xf7\x30\x30\x20\x44\x9e\xba\x01\x68\xbc\xd6\x4d\x3f\x53\x5f\x6a\x8f\x03\xa5\xda\xaf\xb1\xb4\x7b\xbc\x7a\x4f\x5f\x69\x6a\x93\x38\x28\x59\xb9\xb4\x3f\xa0\xc9\x18\x12\x7f\xd5\x20\x07\x03\x42\xe4\xad\x1b\x80\xc6\x8b\xdd\x14\xa6\x75\x27\x6b\xf4\x3b\xb7\xf6\x2d\xd1\xa8\x6f\x0e\x77\x49\xf2\x51\x76\x70\x32\x00\xd5\x8f\xfd\xe1\xd2\x77\xea\x50\x73\xae\x30\x20\x44\x1e\xbb\x01\x68\xbc\xda\x4d\xd9\x6f\xfe\x47\x7f\x44\x8f\xcf\xaf\xc2\xaa\x92\x56\x13\xb6\x94\xea\x11\x0b\x59\x9a\xb3\xc3\xb6\xb2\x3a\xac\x25\xdd\x2f\x6d\x94\x61\x40\x88\xbc\x76\x03\xd0\x78\xb9\x9b\x4c\xd2\x3d\x37\xaf\x75\xba\x10\x0e\xc1\x3a\x35\xcf\xb8\x6e\x16\x8b\x8b\x44\x46\xb6\x84\xf4\x4b\x37\x39\x05\x63\x53\xa0\x7e\x6b\x18\x10\x22\xcf\xdd\x00\x34\x5e\xef\x86\xf2\x97\x5e\x55\x52\xf2\xea\x21\x45\xcb\x2a\x99\x46\xd1\x5b\x91\xa4\xf5\x94\xbc\x86\x53\x9f\x3a\x0e\x2b\xea\x67\xb5\x88\x73\xc5\x61\x40\x88\xbc\x77\x03\xd0\x78\xc1\x1b\xfd\x84\xa6\x37\x77\x3c\x62\xa7\x35\x8e\xc3\xf4\x4b\x67\xe6\x62\x9d\xa5\xb6\x33\x6f\xb5\x74\x16\x96\x3e\xef\x7a\x77\x69\xc3\x12\xfb\xbe\x20\x0f\xde\x00\x34\x5e\xf1\xe6\x59\xe8\xce\xed\x10\x6a\x72\xe0\xb8\xbc\x30\x4d\xa9\x97\xff\x2e\x2f\xf3\x77\xa5\x51\x6e\xc5\x11\xb9\x52\x24\xdf\xf1\xf2\x9f\x0a\x30\x20\x44\x5e\xbc\x01\x68\xbc\xe4\x0d\xf5\xc7\x12\xf2\xfc\xf7\x8f\x9b\xee\xa6\xba\x6c\x30\xdb\xa7\xe9\x1e\x26\xeb\xf1\x6e\xb3\x59\x88\x31\x1b\x87\xc5\x7f\x6b\x26\x35\x84\x01\x21\xf2\xe4\x0d\x40\xe3\x35\x6f\xb2\xab\xaa\xc2\xb2\xbf\xfa\xdb\xee\xf9\xe8\xc8\x1c\xde\xb8\x18\xca\xa2\x95\x9d\xe1\xf5\x94\x8d\x34\xe9\xc6\x10\xd1\xf6\xc2\x29\xec\xd4\x1d\x79\xf3\x06\xa0\xf1\xa2\x37\xbb\xef\x7c\xb9\x42\x7e\x9b\x7d\x49\xc9\x1a\x94\x4e\x39\x6c\x96\x89\x78\x25\x91\x73\x82\xf9\xda\xc9\xd4\x0f\xc4\x5b\xf9\x4d\x39\xd8\x81\x35\xf2\xe8\x0d\x40\xe3\x55\x6f\x86\x98\x33\xdc\xab\xc7\x48\x69\x2a\x43\xea\xde\x96\x66\x7e\x10\x8a\x7e\x9e\x26\xe7\xd5\xb7\xa1\xcc\xba\x43\x58\x7e\x7a\x5b\xcd\x09\x06\x84\xc8\xab\x37\x00\x8d\x97\xbd\x91\x61\xb2\xf2\x14\x0d\xb2\x7b\x5b\xad\xf6\x25\xa1\x05\xbd\xf7\x01\x58\x28\x58\xda\xf7\x0e\xa6\x3c\xbf\xe7\x99\xe5\x3d\xd4\xec\x07\x03\x42\xe4\xd9\x1b\x80\xc6\xeb\xde\xa8\x3c\x7c\xf5\xff\x31\xf7\xe7\xe1\x54\xb5\xfd\xff\x3f\x6e\x63\x47\x92\x29\xca\x32\x0b\x99\x87\x32\x85\xcc\xf3\x90\x39\x44\x65\x9e\xe7\x31\x44\x6c\x43\x99\x29\x22\x43\xca\x3c\x25\x54\x66\x42\xa6\x12\x99\x49\x86\x0c\x99\x93\x59\xe6\x7e\x47\xd7\x7d\xef\xfd\x76\x2d\x1d\x9f\xd5\xfe\x7d\xfb\xe3\x3e\x8e\xeb\xcf\xc7\xf5\x5a\xad\xf3\x7c\x3a\x87\xe7\x3e\xd7\xf9\xb4\x92\x5a\x31\x09\xd9\xd6\x28\x8f\x4a\xfb\x3e\x15\xe6\x35\x83\x98\x8e\x33\x4f\x55\xfa\x7c\xbd\xee\xe3\x58\x70\xc6\xaf\x4d\x02\xfa\xb9\x37\x00\x0c\x14\x7c\x73\x83\x95\x8e\xc0\x97\xee\xac\xb0\x9f\x9d\x75\xf0\x66\x5d\x30\xe7\x96\xb3\xca\xac\x81\x89\x12\xf5\x8a\xef\x88\x88\x6a\xb1\x32\x37\x02\x80\xa3\x1f\x7c\x03\xc0\x40\xc9\x37\xb7\xf0\xac\xef\xda\xd4\x6c\x35\x4c\xac\x4c\x63\x76\x58\x47\xc9\x54\xe1\xf5\xeb\x35\x89\xfb\xac\x66\xdc\xa4\xec\x58\x96\xc9\x76\x41\x00\x70\xf4\x93\x6f\x00\x18\x28\xfa\x66\xa5\x05\xcb\xf7\x09\x7b\x53\xc3\xe6\x1b\x0e\x15\xf2\xda\x1d\x2c\x26\xfc\x22\x7d\xb1\x27\x74\x99\xcf\xf6\x5e\x31\x29\x69\x2e\x0b\x23\x00\x38\xfa\xd1\x37\x00\x0c\x94\x7d\x53\x4f\xdd\xe0\xdb\xf7\x23\x61\xdf\xcb\xec\xde\xd5\x4e\x73\xcf\x9b\x5f\x84\x83\x87\xde\xf5\xd7\x9f\xd4\x4b\x4d\x7c\xce\xb8\xf4\xf0\x16\x02\x80\xa3\x9f\x7d\x03\xc0\x40\xe1\x37\xfc\x13\xce\x7c\x59\xd2\x21\x56\x1d\xb0\x14\x61\x91\xdc\xeb\x78\x61\xf4\x97\xa5\xa2\x5c\xd2\x24\x2a\x37\x3d\xb9\x03\xde\x8d\x5c\x40\x00\x70\xf4\xc3\x6f\x00\x18\x28\xfd\x46\x23\x5b\x2a\xcf\xde\x9f\xc1\x6e\x98\xa7\xc3\x7d\x9a\x21\xf4\x96\xef\xcd\x30\x2f\xbb\x55\x75\xa5\xd9\xf0\xa9\x73\x81\x16\x78\x27\x11\x00\x1c\xfd\xf4\x1b\x00\x06\x8a\xbf\x61\x66\xd9\x2f\x0a\xea\x61\xb8\x7d\x32\xf3\x87\x4a\x1d\x45\xdc\x54\x89\x97\xad\xd3\xa2\xb5\x13\x59\xcc\x65\xbd\x66\xb7\xee\xb6\x5f\xbd\x8f\x7e\xfc\x0d\x00\x03\xe5\xdf\xcc\xef\x98\xbc\x11\x79\x4b\x6b\xea\x99\xbf\x5c\xc1\xec\x13\x9a\xa3\x5f\x17\x56\xf5\xa1\xf7\xc2\x2b\xe0\x4c\xe5\x4b\x77\x11\x0c\x63\x04\x00\x47\x3f\xff\x06\x80\x81\x02\x70\x78\xed\x95\x55\x66\x7d\xf3\x0a\x35\xa9\x2e\x7e\xf4\x8f\xe0\x13\x92\x32\xd9\x1a\x56\x92\x7a\xa7\x83\x15\x78\x8e\x3f\x75\x3a\xe4\x12\x02\x80\xa3\x1f\x80\x03\xc0\x40\x09\x38\x6d\x56\xb9\xd3\x62\x74\x34\xd6\x8c\x99\x17\x1d\x8d\xcb\x5b\x76\x82\x2d\x99\x88\x1e\x57\xb8\x50\x8f\xdd\xe5\xab\xf0\xee\xaa\x81\x23\x00\x38\xfa\x09\x38\x00\x0c\x14\x81\x33\xc3\x2b\x9a\xf3\x95\x7f\xb5\xa0\xe0\xcb\x01\xa1\x5a\xc2\xdc\x62\x8f\x6a\xb5\x41\xb0\xa5\xd8\xa3\x49\x0c\xdd\x0f\x6f\x66\x02\x7f\xcd\x2f\xe8\x47\xe0\x00\x30\x50\x06\x8e\x48\xf9\xf9\xa1\xd2\x8b\xe7\xb1\xcd\xda\x77\x5c\x73\xf7\x75\x57\x2a\xe1\x99\x42\xce\x95\xe3\x1f\x59\xf7\xcf\x04\xbc\x62\x3a\x4f\x80\x00\xe0\xe8\x67\xe0\x00\x30\x50\x08\x0e\x37\x61\xda\xfc\x01\xec\x0d\xc9\xce\x03\x3b\x51\x22\xe7\x8f\x58\xd5\x72\x37\x1a\xba\xc5\x14\xcc\x23\x9d\x6b\x7a\xed\x5f\x4a\x5d\x43\x00\x70\xf4\x43\x70\x00\x18\x28\x05\x27\x89\x5e\xa2\x1e\xe3\x8b\xd5\x87\xe7\x7e\xc0\xf5\xee\x36\x87\x8d\x9c\x6a\x1e\xe2\xed\x10\xc5\xab\x97\x09\x1f\x9c\xd9\xb5\xf2\xfe\x35\xef\xa3\x9f\x82\x03\xc0\x40\x31\x38\x3a\x4c\xc1\xb0\x66\xb8\xd0\x5c\x6b\xe2\x87\xd9\xae\xed\x86\xf9\x5b\xb8\xac\x45\xc5\x22\x5d\xf9\xc1\x3e\xb4\x46\xf2\x71\x03\xda\x08\x00\x8e\x7e\x0c\x0e\x00\x03\xe5\xe0\x30\x0a\xdf\xe2\xb7\x61\x6f\x78\xa3\x60\x74\xde\x39\x53\x50\xe0\xcd\xb5\xfc\x55\xcc\xd6\x7b\xf9\xf9\xf6\x97\xb6\xde\x23\xee\xe6\x9f\x47\x00\x70\xb4\x73\x70\x90\x1b\x9e\x9d\xd4\x94\x31\x6d\x7d\x06\xff\xc5\xb2\xfd\xac\x31\x81\x0b\x56\x19\xe9\x6c\x19\xfc\xa7\x5c\xa7\xa3\x0f\x78\x59\x98\x3a\x17\x6d\x8f\x6e\x78\x40\x41\x38\x3e\x3b\xcf\x0d\x2d\x42\x84\x6d\x93\xe5\xdd\x3c\xab\xe3\x3e\x92\x8c\xea\x61\xf2\x03\x5b\x5e\xad\x9e\x70\xfd\x17\x76\x35\x2e\xea\x08\x00\x8e\x7e\x10\x0e\x00\x03\x25\xe1\x44\xe1\xae\xd3\x5d\x0f\x1c\xa9\x7c\x99\xa7\x5e\xe9\x75\xdb\xdd\x23\xfb\xeb\xf0\xf2\x67\x41\x27\xbf\x48\x75\xd6\x68\x17\xeb\x46\x49\x04\x00\x47\x3f\x09\x07\x80\x81\xa2\x70\x3e\x6c\x5e\x0b\x93\xbb\x74\x4b\x7f\x8e\x16\x93\xe4\xd4\x4f\x65\xe9\x2c\x9d\xa1\xed\x3c\x6d\x0d\xd5\x31\x8f\x81\x04\xb2\x7d\xad\x5f\x8b\x51\xf4\xa3\x70\x00\x18\x28\x0b\x87\x0d\xb3\x9a\xb0\xf1\x5c\x0e\x13\xf5\x5a\xbd\xa6\x3a\x8c\x7c\xe9\x55\x50\x79\x21\x87\x9c\x7c\x80\xc1\xfb\x99\xd8\xfe\x32\x52\x18\x02\x80\xa3\x9f\x85\x03\xc0\x40\x61\x38\x33\x92\x5b\xa4\x95\x8c\xa6\x27\x3b\x6e\xcf\x47\x51\x68\xf9\x98\x13\xe9\x9c\x79\x39\xa3\xdc\xba\x18\xfa\x06\xf7\xd2\x35\x89\x22\x7a\x04\x00\x47\x3f\x0c\x07\x80\x81\xd2\x70\x84\x82\x78\xe4\x31\xbc\x74\xa4\xb4\x34\x87\xcd\xd4\xf9\x6d\x4e\xbd\xad\xcf\xb2\xef\xe2\xae\x2f\x9c\x65\xd0\x48\x66\x71\x3a\x71\x06\x01\xc0\xd1\x4f\xc3\x01\x60\xa0\x38\x9c\x0f\x87\xc4\x98\x9f\xfb\xfa\xec\xfb\x3f\xc8\xa9\xd3\x4e\x2b\x76\x64\xa4\x64\xf1\xc7\xe1\xe3\x71\xc3\x59\xba\xdd\xe4\xb5\x0e\x34\x10\x00\x1c\xfd\x38\x1c\x00\x06\xca\xc3\x11\xaf\x1e\x4f\x7a\x70\xea\xd9\x65\xdb\x0f\xb5\xd2\xd5\x43\x5b\x53\x8b\xfe\x77\x8d\x60\xbb\x37\x76\xa8\x08\x33\x0f\xd7\x92\x2d\x31\x10\x00\x1c\xfd\x3c\x1c\x00\x06\x0a\xc4\x39\xbf\x2c\x4a\x52\xc7\xc0\x4c\x22\x4c\xfe\x2c\xe2\xab\x6e\x56\xd6\xfa\x34\xe3\xee\xd6\x41\x75\x9f\x42\x42\x9c\xb9\x0b\x75\xa7\x0a\x02\x80\xa3\x1f\x88\x03\xc0\x40\x89\x38\x6a\x55\xe7\x5f\x63\xdf\xdc\xac\x91\xbb\xf4\xe4\x06\x7b\x32\x36\xd9\x81\xd9\xd0\x7a\xb2\x68\xd6\x0e\x97\xca\x37\xd1\xa8\x61\x71\x73\x04\x00\x47\x3f\x11\x07\x80\x81\x22\x71\xbc\x0b\xeb\x1b\x96\x16\xb3\xe5\x73\xaf\x59\x88\x2e\xcd\xcd\xd2\x91\xcf\xfb\xaf\xb3\x8a\x56\x6b\x16\xf6\x08\x84\xab\x34\xc7\x50\x21\x00\x38\xfa\x91\x38\x00\x0c\x94\x89\x73\x6f\xcd\xce\xa6\x40\x64\x50\x82\x9a\xed\xac\xb4\x6b\x78\xcc\x15\x58\xec\xa0\x5d\x49\x6b\x31\x29\xf7\xc7\xbb\xbd\x45\xad\xaf\x98\x10\x00\x1c\xfd\x4c\x1c\x00\x06\x0a\xc5\xa1\x7b\x4d\x17\xe7\xe0\xf5\x65\xa8\x4f\x37\xcd\x79\xfb\xbe\xdf\xa3\x0f\xb4\x41\xe5\x67\x5e\x0d\x25\x8d\xd1\xc9\x11\x72\xe4\x28\x51\x23\x00\x38\xfa\xa1\x38\x00\x0c\x94\x8a\x63\x85\xe8\xa9\x77\x60\x34\xed\x7c\xa0\xe3\x60\x6b\x7f\x12\x1e\x72\xdb\xca\x72\xdc\x30\x4a\xeb\x66\x33\xbb\xae\x89\xd8\x43\x3f\x65\x04\x00\x47\x3f\x15\x07\x80\x81\x62\x71\x92\x69\xdd\x95\xcb\x75\x3b\xcb\x2e\x2e\x68\xde\xd9\xcc\xd1\xa1\x4d\x65\xd6\xe0\x4e\x54\xec\x3a\x31\x88\x27\xeb\xe8\xcd\xba\xfa\xeb\x29\xe8\xc7\xe2\x00\x30\x50\x2e\x4e\x17\xde\x2a\xec\xdc\x74\xf7\x98\x2d\x41\xed\x0d\xe5\xfb\x17\x67\x2d\x0b\xfd\xbc\xe9\x30\x31\x59\x53\x26\x72\xc9\x3e\xf0\x50\x4a\x23\x00\x38\xfa\xb9\x38\x00\x0c\x14\x8c\xc3\x2c\xdb\xd8\x16\x4d\x5f\xc0\x77\xf3\xf5\x22\x7b\xba\xc1\x59\x76\xcd\xb5\xf1\xc8\xe1\x5e\xea\xf5\x05\x92\x4c\xcc\x53\xfd\x95\x0c\x08\x00\x8e\x7e\x30\x0e\x00\x03\x25\xe3\x6c\xd1\xce\xc5\x5f\x3f\x37\xb7\xc7\x5c\x4d\x77\x77\xa7\xbf\x0b\xb3\xcc\xe9\xc2\x78\x5c\x4e\x1b\x5f\x13\xcf\xb0\x45\xda\xf0\x59\x5d\x04\x00\x47\x3f\x19\x07\x80\x81\xa2\x71\xc8\x85\x35\x0a\x45\x84\x97\xdf\xc5\xe6\x9d\xe2\x39\xe1\x0d\x34\x85\x29\x2b\x87\xf0\xd1\x70\x34\xbc\x6d\x8f\x9e\x63\xd2\xa0\xd1\x47\x00\x70\xf4\xa3\x71\x00\x18\x28\x1b\xe7\xe5\xba\x68\x63\x3f\xeb\xae\x40\xa2\x8f\x85\xf2\xe7\x49\xe9\xef\x59\x0b\x33\x94\x49\xb3\x38\x76\x37\x7d\xfa\x2c\xa8\x45\x19\xed\x10\x00\x1c\xfd\x6c\x1c\x00\x06\x0a\xc7\xb1\x7a\x58\x40\x6b\x6a\xea\x7e\xfb\xeb\x99\xf6\x78\x5c\x18\x03\xf7\x2c\x37\xee\xd6\xe9\x20\x8a\x7b\x77\xcf\x5f\xb1\x69\x74\x93\xfe\xf5\x57\x89\x7e\x38\x0e\x00\x03\xa5\xe3\x68\x27\xb6\x61\xe2\x05\x72\xeb\xe7\x54\x3f\x13\x2f\x0c\xef\xa9\xde\x9d\x33\x9c\xc0\x21\xb0\xd8\xc2\xea\x3e\xf5\x24\x76\xe5\x24\x23\x02\x80\xa3\x9f\x8e\x03\xc0\x40\xf1\x38\xe4\x9c\xd8\xd9\x09\x1f\x48\x03\xbb\x89\xe2\x9f\x62\xf2\xac\x96\xfe\xf4\xb8\xd1\xf0\x60\x4b\x42\xdf\x7c\x2b\x7a\x62\xc2\x83\x9e\x02\x01\xc0\xd1\x8f\xc7\x01\x60\xa0\x7c\x9c\x4f\xce\x9f\x28\xd7\xf8\xc4\x55\xcf\x84\x3d\xe7\x2f\xf2\xba\xdb\x97\x3d\xc9\xa4\x69\xa9\x77\xfa\xc9\xec\xd2\x0d\x23\xcb\xd3\x66\x52\x08\x00\x8e\x7e\x3e\x0e\x00\x03\x05\xe4\x90\x29\x1a\x49\xbd\x4a\x5a\x54\x94\x28\xba\x3e\x38\xe8\xf1\x53\xc0\xc0\xae\xb0\x82\x43\x6e\xed\x06\x23\x09\x8e\x00\xbe\xc3\xd2\x4d\x04\x00\x47\x3f\x20\x07\x80\x81\x12\x72\x4e\x61\x99\x59\xb1\xcf\xd0\x4e\x84\x91\x04\xf9\xb8\x16\xd1\xd4\x4e\x15\xf9\x09\x90\x58\x32\xb0\x3c\xbf\xf4\x95\x27\x9b\x51\xf3\xd7\x1a\x06\xfd\x84\x1c\x00\x06\x8a\xc8\x71\x3a\x7c\xfd\x6a\x9f\x56\xcd\x5a\x4a\xe2\xe2\x88\x4a\xfc\x69\x71\xce\x1c\xe1\xdd\x0f\x53\x2c\x2d\xe1\x92\x14\x5a\x8f\x4d\xcb\x2c\x10\x00\x1c\xfd\x88\x1c\x00\x06\xca\xc8\x31\xea\xbd\x88\xd7\x60\x5b\xa2\x75\xf8\xae\x47\x84\xa3\xfb\xb6\x8e\x06\xdb\xc3\x37\x12\xd6\x35\xf7\xde\xba\x60\xf9\x96\xa5\xfc\x33\x57\xa2\x9f\x91\x03\xc0\x40\x21\x39\x1f\x11\x45\x1a\x3b\xe3\x5d\x69\x8f\x9f\x18\x16\xbc\x18\x61\x17\x8e\x8c\xfa\x8e\x00\x2e\xb9\x1f\xce\xbb\xcd\x9f\xa0\x7b\x43\xcc\x8b\x00\xe0\xe8\x87\xe4\x00\x30\x50\x4a\x8e\x13\x7c\xc8\xe4\xdb\x65\x21\x72\xea\x56\xa1\x35\xed\x5d\x57\x11\x2d\xe6\x1c\xf2\xfd\xef\xe7\xdd\x9a\x0f\x82\x0b\x79\x6c\x7f\xfc\xda\xee\xa2\x9f\x92\x03\xc0\x40\x31\x39\x57\xab\xaf\xc4\x77\x84\x19\xa6\x9e\x5c\xf7\xd4\x0f\xb3\xc8\xfe\x94\x5b\x7e\x3f\x6c\x27\xff\xa5\x49\x39\x9b\xd4\xe5\x58\x6a\xc3\x5f\x23\x3f\xfa\x31\x39\x00\x0c\x94\x93\xe3\x6b\x27\xdc\xb2\x46\xba\xac\x9a\x49\xa1\x98\xc3\xe0\xa1\x3a\xfb\x6a\xea\x6d\xa5\x73\x0b\xc9\x33\x49\x63\xb6\xf9\x50\x95\x34\x7b\x04\x00\x47\x3b\x27\x07\xb9\xe1\x79\x91\x43\x97\xd6\x69\x92\xf8\x2e\xa6\x67\xad\x9a\x2b\x29\xe0\x1c\x55\xaa\x85\x7d\xbb\xfd\x2a\x79\x78\xa2\x22\xb7\x2f\x61\x07\xf3\xd1\x0d\x0f\x28\x28\x87\xd3\xe5\x4c\xcf\x7a\xc5\xe5\xf3\xd7\xe3\x18\x7c\xf9\x16\x9a\x9e\xe4\x57\x2d\x2c\xba\xd8\x86\xe4\x74\x63\x0d\xfa\x5c\xe0\x93\x3e\x8d\x00\xe0\xe8\x07\xe5\x00\x30\x50\x52\x0e\x90\xae\x9d\x97\xb3\x56\x62\x10\x3e\x54\xef\xd1\x31\x94\x27\xe0\xea\x3a\xd3\xa2\x2e\x3f\xfa\x06\x73\xef\xea\x1b\x84\x55\xe5\xaf\xad\x08\xfa\x49\x39\x00\x0c\x14\x95\x13\xe8\x42\xf3\x4c\xf1\x5e\x66\xfb\x83\x8b\x5f\x2f\xbe\x1f\xe7\x18\x8d\xcd\x98\xf0\x08\x98\xb2\xf9\x44\x58\x6b\x28\xc0\x8e\x49\xf0\x4b\xfa\xe8\x47\xe5\x00\x30\x50\x56\x8e\x50\xa5\xba\xc9\x33\x7a\xf7\x61\xec\xa9\xd5\x06\xbc\xfe\x24\xaa\xa0\xd5\x8e\xe7\x21\x9a\x55\xd7\x49\x25\x4a\x3c\x3b\x89\xcc\x7e\x6d\x11\xd1\xcf\xca\x01\x60\xa0\xb0\x9c\x45\xa3\xf4\x0c\x7c\xac\xe7\x8b\xb7\xbc\x4a\xc5\xe7\xa3\xce\xde\x10\xcd\x7e\x8c\xe0\x8a\x3f\x6b\xfa\xf5\x0e\xdf\xc4\x4d\x29\x2f\x1c\x04\x00\x47\x3f\x2c\x07\x80\x81\xd2\x72\x14\xc4\xce\x7b\x2c\x52\xea\xcb\x49\x68\x7d\xba\x97\x4e\x56\xae\x87\x5b\x31\xcf\xf5\xa9\xb1\x5b\x88\x5b\x41\x85\x66\x7f\xf0\x13\x2d\x02\x80\xa3\x9f\x96\x03\xc0\x40\x71\x39\x40\x96\xd0\xb7\x17\xb0\x96\x94\x25\xad\x0b\xe4\xee\xa5\x19\x91\xf9\x18\x87\x3e\x74\x67\x1c\xf8\x6c\x1e\x3f\x61\x90\x50\x98\xfa\xb5\xe8\x41\x3f\x2e\x07\x80\x81\xf2\x72\xb4\xbf\x58\x25\x39\x36\x71\x3e\x8c\x18\x21\x64\xbc\x17\x11\x1a\x9a\xa0\x51\x9f\xf0\x08\x53\xaf\x53\xf7\xc6\x5b\x29\xff\x22\x42\x63\x04\x00\x47\x3f\x2f\x07\x80\x81\x02\x73\x42\x07\xb2\xf4\xec\x4b\x32\xf7\x87\x76\x0c\xf4\x3e\x8d\x54\x29\x0f\x9e\xf7\x2a\xfb\x84\x7f\x62\x51\x95\xf8\xca\x57\x4c\x06\xd5\x5f\xdb\x2a\xf4\x03\x73\x00\x18\x28\x31\xa7\xfc\x2b\x01\x15\x9c\xf6\xd6\x6b\xc4\xb7\x13\xe1\x59\xd7\x1b\x0e\x24\x1d\x36\x28\xd8\x43\x84\xe9\xb7\xaf\x9c\xef\x1d\xf0\xc0\x63\x45\x00\x70\xf4\x13\x73\x00\x18\x28\x32\x67\x4f\x35\x87\xb4\x52\xcc\xf9\x75\x25\xe3\x92\xdb\x35\x5f\x4a\xec\x28\xdf\x33\x6f\x9e\x36\x96\xc8\x66\xb3\x25\x4e\x79\xd8\xbe\x97\x47\x00\x70\xf4\x23\x73\x00\x18\x28\x33\x67\x42\x41\xf5\xe5\x2d\x26\x82\x2b\x5d\xbc\x0f\xdb\xa4\xf8\xe4\x83\xf4\xf8\x49\xfd\x4a\x66\x2c\x63\x6e\x39\x3e\x1d\x89\xab\xef\x73\x42\x00\x70\xf4\x33\x73\x00\x18\x28\x34\xa7\x89\xbb\xa7\x43\xdb\xcd\x8c\x2c\x7e\x6f\xbf\xaa\x36\x68\xb3\xcc\xe2\xf5\xa5\x14\x01\xc4\xf6\xfb\xe7\x77\x1e\x0f\x34\x5d\xf4\xd1\x46\x00\x70\xf4\x43\x73\x00\x18\x28\x35\xe7\xb3\xce\xbb\xec\x8b\xc1\xec\x7e\xde\xb1\x4f\xef\x3d\x94\x5e\xa8\x4b\xe2\x21\xa0\xdc\xf1\x5c\xf0\xa6\x16\x1c\xc7\x24\xb7\x94\x27\x47\x00\x70\xf4\x53\x73\x00\x18\x28\x36\xe7\x14\x39\x83\x72\x8d\x06\x99\xdd\xf7\x01\xe5\xe6\xa8\xab\xd9\xa9\x91\xdf\xb2\x71\x95\x94\x2b\xc5\x09\x93\x2e\xeb\x1d\x3a\xbd\x31\x40\x00\x70\xf4\x63\x73\x00\x18\x28\x37\x67\x35\xd0\x50\xa7\x08\xdb\xe1\x2b\x56\xf8\xea\xc8\x4a\xad\x86\x50\x7a\x6d\xd5\xb2\xd2\xba\x91\x67\xfd\xb2\x4c\x61\xf8\x3d\x6f\x1e\x04\x00\x47\x3f\x37\x07\x80\x81\x82\x73\xec\x3a\x14\x94\xbd\x3a\xe8\x95\xbf\x70\xa7\x4b\xe2\xf9\x12\xcc\xee\xf8\x4a\xf8\x10\xe4\x99\xbe\x42\x04\xd4\x2a\x28\x5f\xb0\xfe\x35\x5a\xa2\x1f\x9c\x03\xc0\x40\xc9\x39\x77\x2f\x31\xfe\xf4\x4c\x60\x5d\x65\xa7\x13\x69\x58\x2f\x71\x8e\xb9\x3d\xee\xc4\x41\x6f\x27\xe6\x7b\xf7\xb2\x4e\x8a\x07\x59\xf5\xaf\xa5\x15\xfa\xc9\x39\x00\x0c\x14\x9d\x23\x70\xf1\x9e\x45\x8c\x0d\x82\xb0\x92\xf7\x70\x51\x78\x83\xd7\x7d\x9c\xdb\x65\x4f\x53\xd4\xd9\x80\x81\xb4\x2d\x90\x99\xfa\xad\x2c\x02\x80\xa3\x1f\x9d\x03\xc0\x40\xd9\x39\xd6\x35\xea\xfd\x67\x92\x97\xb7\x5b\xee\x54\x98\x33\x2a\x0b\xe0\x6f\xbf\xcd\x35\x91\x1b\xb8\xf9\x5e\x7f\xc9\xd4\x21\x9c\xf8\x40\x12\x01\xc0\xd1\xcf\xce\x01\x60\xa0\xf0\x9c\x2f\xb9\x08\x85\xca\x4b\x7a\x32\x9e\x38\xdd\xa1\x11\x91\x07\xa5\x1e\xc4\x9d\x57\xf1\xf9\xcb\x71\x7e\x0e\xc6\xde\x6d\xbf\x84\xff\x6b\x2b\x82\x7e\x78\x0e\x00\x03\xa5\xe7\xec\x46\xfa\x28\xf5\xe9\xc4\x3e\xe1\x54\xda\xee\x8c\x5c\x25\xf4\x79\xb1\x9b\x17\xd8\x26\xf1\x7a\x31\xed\x27\x7c\x5f\xa8\xcd\x16\x0f\x01\xc0\xd1\x4f\xcf\x01\x60\xa0\xf8\x9c\x57\x2f\xda\x9a\xc4\x8b\xb0\x71\xde\x58\xb5\xc5\x0d\xc4\x47\x6f\xbf\xd1\x55\x7b\xb4\x38\x45\xb9\x37\x36\x33\xbe\xef\x7a\xa1\x5d\x18\x01\xc0\xd1\x8f\xcf\x01\x60\xa0\xfc\x1c\xbf\xa4\xb7\x9b\x22\x5f\x18\xae\xd5\x6c\x60\x39\xe6\x33\x92\xaa\x15\xc3\xe8\x49\x03\x76\x52\xbf\x67\xd0\x5a\xbb\x85\x55\xa6\x9e\x43\x00\x70\xf4\xf3\x73\x00\x18\x28\x40\x47\xa5\x56\x2c\x54\x98\xe8\x9a\x4d\xd5\x59\x7b\x84\x4b\x49\x62\xb8\xef\xc5\x3c\x8b\x1b\x0a\x38\xd7\x4e\xb1\xd2\x85\x47\xb8\x53\xb9\x22\x00\x38\xfa\x01\x3a\x00\x0c\x94\xa0\x63\xd4\x13\xe7\xd8\xea\xf8\x3e\x5a\xc4\x2c\x6c\xd3\x8c\xe6\x67\xf8\x4b\x0d\x27\x1e\xc3\x74\xd7\x2d\x62\x6f\x2d\x85\x68\x37\xaf\x5f\x4b\x5e\xf4\x13\x74\x00\x18\x28\x42\xc7\xf0\x19\x65\xc3\xe7\x9d\x0d\x84\x4a\x8e\x50\xba\x0b\x7d\x00\x86\xe3\xfd\x46\xa2\xc9\xb4\xf6\x8c\x6e\xc2\xb0\x46\x17\x20\xfb\x02\x02\x80\xa3\x1f\xa1\x03\xc0\x40\x19\x3a\xb3\x9a\x99\x98\x7c\x3e\xe3\xad\x91\x99\x38\x11\x85\x27\xd3\xd7\x45\x2e\x53\xb7\xc4\xee\x0b\xdd\xa3\xa4\x0b\x49\x48\x55\xea\xfc\xb5\x11\x45\x3f\x43\x07\x80\x81\x42\x74\x6e\x47\xda\xc7\x9b\x3d\x94\x49\x09\x0d\x2f\xd6\xf2\x30\x77\x20\x89\x98\xfd\x79\x93\xc1\xf8\xf4\x03\x93\x72\xfb\xb5\x3c\xe1\x83\x5f\xf3\x0b\xfa\x21\x3a\x00\x0c\x94\xa2\xc3\x5d\x2b\xc3\xd6\x3d\x5d\xda\x21\xd4\xf0\x80\x59\xb2\x24\xa2\x9a\xf6\x6e\xb8\xb6\x1c\x9b\xc3\x5a\xe3\xa9\x8c\x6f\x29\x8b\xdd\x54\x08\x00\x8e\x7e\x8a\x0e\x00\x03\xc5\xe8\x34\x27\xd3\xdf\x11\xc3\x56\x91\x5e\xd1\xbc\x6b\xc9\x49\x63\x93\x17\x26\x1a\x98\xbf\x14\x5e\x3a\x12\x7e\x85\x72\x35\xbd\xeb\x0d\x3b\x02\x80\xa3\x1f\xa3\x03\xc0\x40\x39\x3a\x4d\xbe\x7c\x95\x7a\x73\xd4\x5f\xeb\x1b\xea\xe0\x83\x8a\xa1\x2f\xbe\xa6\xc7\xaf\xd4\x8a\x4a\x7f\xbc\xcf\xa3\x2a\x67\xc4\x3b\xf9\x6b\xe4\x47\x3b\x47\x07\xf5\x0d\x0f\x15\x4f\x43\x5c\xb0\xee\x96\x24\x6d\xd1\xc3\x69\x2c\x96\xe8\x02\xe6\x9e\x08\x7b\x3d\x2b\xc6\x37\x65\x66\xd8\xb3\x82\x16\x5a\x47\x37\x3c\xa0\x20\x9d\xe9\x5d\xbc\xaa\x6f\x4c\x5c\x29\x22\x09\x12\x72\xa4\x1f\x4b\x8a\x55\x4e\x7b\x6c\x5a\x2a\x30\x3a\x36\x73\x0f\x8c\x28\x87\x69\x5d\x45\x00\x70\xf4\x83\x74\x00\x18\x28\x49\xe7\xd9\x6e\x46\x38\xbd\x12\x9d\x4d\xe8\xdb\xa5\x2a\xb9\xdd\x50\xae\x81\x6a\xed\xf7\xce\x07\x8d\xae\x7d\xd7\xa9\xe2\x38\x74\x3b\xac\x10\x00\x1c\xfd\x24\x1d\x00\x06\x8a\xd2\x71\x57\xef\x90\x5d\x50\x39\xd7\x2b\xb8\x2a\x3b\xfb\x4d\xe8\xda\xa6\x90\xd6\x5a\xdb\xd2\x40\xf9\xcd\x77\x2b\xe3\x62\x71\x8f\xf8\x7e\x2d\x46\xd1\x8f\xd2\x01\x60\xa0\x2c\x9d\x96\x46\x56\x8c\x2c\xfe\x2b\x26\x8f\x1e\x24\xd6\x90\x11\xba\x6a\x19\x7e\xa3\x13\x96\xbf\x38\x91\x4b\x59\xa0\x5f\x7a\x35\xd7\x1a\x1f\x01\xc0\xd1\xcf\xd2\x01\x60\xa0\x30\x9d\x46\xa9\xad\xb8\xef\x94\xe9\x1b\xec\xfa\x9e\x6d\xcb\x84\x17\x5c\x97\x9f\x3a\x56\xe7\xc9\x7a\x1d\xd4\x14\xff\x9c\x68\xfc\xf8\x55\x0d\x01\xc0\xd1\x0f\xd3\x01\x60\xa0\x34\x9d\x94\xb1\xf6\xe7\xdf\xc2\x59\xb7\xe8\x6d\x62\x3c\x4d\xee\x61\x60\x69\x92\xf5\x69\x76\x5f\x9d\x70\xec\xc0\xc5\x6c\x88\xf2\x2e\x67\x46\x00\x70\xf4\xd3\x74\x00\x18\x28\x4e\x67\x94\xe4\x60\xc4\x7c\x93\x47\x9a\x1a\x7f\xdb\x96\xd5\x5f\x95\x75\xef\xee\x2b\xaa\x76\x87\x69\xb5\x30\x4d\xef\x07\xe6\xd7\xf2\x7f\x6d\x45\xd0\x8f\xd3\x01\x60\xa0\x3c\x1d\x5b\x78\x89\x37\x07\x16\x0c\xbb\xf0\xc1\xac\xbd\x69\xe2\x4e\x1d\xb6\x3c\x7d\x48\x7d\xc8\x6a\x9c\xe7\x36\xb1\x3f\x56\xc4\x35\x42\x04\x00\x47\x3f\x4f\x07\x80\x81\x02\x75\x6e\x03\xfa\xb1\xa9\x0e\x9c\x88\xc9\x2e\x8c\xf8\x49\xbe\x72\xcf\x47\x37\xcc\x0e\x85\xd4\x7e\xc2\x0e\xb0\x85\x0e\xfb\x8a\x4d\x7f\xb5\x18\xfa\x81\x3a\x00\x0c\x94\xa8\x13\xb0\xaa\x76\x81\xc5\xe2\xd2\x7d\x85\x8b\x73\x6e\x3e\x6f\x95\xee\xf3\x5e\x52\xc9\x48\x14\x60\x69\x63\xeb\x0b\xca\xa6\xba\x8b\xab\x88\x00\xe0\xe8\x27\xea\x00\x30\x50\xa4\xce\x25\x17\x15\x1e\x45\xad\xed\x54\x5e\x01\x97\x2f\xd7\x18\x28\x1f\x6f\xcf\x68\xe2\xd0\x1d\x20\x72\xa6\x83\xc3\x78\x3a\x30\xcc\x69\x10\x00\x1c\xfd\x48\x1d\x00\x06\xca\xd4\xc9\x58\x67\xbb\x1a\xe4\x56\x22\x51\x13\xc7\xde\xe2\x59\x45\x23\x43\xdc\xca\xaf\x2f\x23\xcf\x94\x77\x96\xa9\x9e\xa5\xfc\x9c\xf1\xaf\x05\x1c\xfa\x99\x3a\x00\x0c\x14\xaa\xf3\x1e\xcb\xf5\x99\x6e\x5d\x64\x7e\x99\xff\x19\x21\xf9\x5d\xeb\xb0\xb1\xee\x2e\x71\xea\xa8\xc7\xc0\x4b\x8c\x2f\x12\x83\x0d\xc9\x27\x10\x00\x1c\xfd\x50\x1d\x00\x06\x4a\xd5\xd1\xec\xf2\xd5\xc9\xc1\xfd\xf8\xfa\x56\xeb\xea\xf5\x51\xdc\x98\xf6\x3b\x6f\x16\x8b\xd3\xdf\x3a\xe6\x96\xd2\xf0\x32\xbf\xef\xa4\xa4\x45\x00\x70\xf4\x53\x75\x00\x18\x28\x56\x67\xaf\xf7\x4c\x90\x7a\x4f\x4c\x01\xf3\x95\x1b\xdd\x17\x0a\x3f\x68\xde\x66\xd9\xec\xd3\xd7\xab\x18\xdd\xba\x8c\x4f\xf3\x74\xc2\xfe\xd7\xb6\x0a\xfd\x58\x1d\x00\x06\xca\xd5\xb9\x2e\x51\x55\xeb\x92\x2a\x3d\x61\x31\xcb\x8c\x85\xef\x3b\xa1\x2f\x71\x83\xab\x35\x68\x5f\x52\x7c\xe8\xd5\x52\x8b\xf3\x34\xa6\x0b\x02\x80\xa3\x9f\xab\x03\xc0\x40\xc1\x3a\x1b\xd5\x2e\xa4\x6a\x63\x7d\xf7\xee\x88\x52\xbe\xd8\x5b\xb3\xf0\x08\x2a\x48\x4c\x88\xad\xfc\x26\xce\x7c\x65\x8c\xba\x4c\xaa\xd1\x14\x01\xc0\xd1\x0f\xd6\x01\x60\xa0\x64\x9d\xe6\x69\x18\x95\x46\xeb\x84\x0c\xef\xb3\xbb\xc4\xc1\xae\x06\x92\x01\xc5\xb3\x70\x2d\x96\xdc\xb6\x13\x7b\xd6\xa6\x42\xd4\xb7\xcf\x23\x00\x38\xfa\xc9\x3a\x00\x0c\x14\xad\xc3\x74\xc5\xf2\x8d\xea\x0b\xf9\xbb\x17\x76\x87\x84\x7b\x7e\x6c\x2a\x5e\x0d\x72\x11\xac\x55\x91\xc8\x53\xda\x8d\xd4\xe3\x2f\x7d\x79\x0d\x01\xc0\xd1\x8f\xd6\x01\x60\xa0\x6c\x9d\x6c\x35\x1c\x12\x46\xf7\x1d\xef\x62\x81\xa5\xeb\x1f\x31\x5e\xf0\xcf\x4e\x2b\x57\x9e\xb0\xaa\xde\x8e\x1c\xf4\x96\x67\x88\xf8\xa4\x83\x00\xe0\xe8\x67\xeb\x00\x30\x50\xb8\xce\xa7\xe4\xc7\xf7\xdc\x3e\x0b\xdf\xae\xf6\x18\x23\x6e\x7c\xd1\x2a\xc1\x66\xfa\x16\xfb\x11\x85\x84\x86\xac\x63\x93\x9c\xa9\xff\x3f\x87\x99\xd1\x0f\xd7\x01\x60\xa0\x74\x9d\x04\x12\x37\x11\x9b\xc3\xc5\xed\x9e\x07\x67\xc3\xdf\x5e\xc3\x34\x50\x9e\x15\xa5\x76\xe3\xd8\x0d\x9c\x32\x52\xd6\xa0\xf8\x61\xac\x87\x00\xe0\xe8\xa7\xeb\x00\x30\x50\xbc\x4e\xf9\xe3\x97\xf3\x6e\xb4\x52\x5c\xbd\x0c\xcf\xe9\x12\x6c\xcf\x9e\x69\x7d\x95\x9c\xc7\xb7\xc5\x77\x5a\xeb\xa0\xc2\x05\x97\x59\x48\x08\x01\xc0\xd1\x8f\xd7\x01\x60\xa0\x7c\x9d\xad\xcd\xbb\x42\x85\x19\xfd\xfb\x87\x27\xdd\xb8\xba\xd9\xe9\x54\xe0\x1f\xe9\x3b\xec\xc2\x07\xfd\x65\xa4\x5e\xd6\x5e\x99\x3d\xfc\x35\x8b\xa1\x9f\xaf\x03\xc0\x40\x01\x3b\x6a\xaa\x9b\x32\x6d\x58\xe2\xd9\x24\xc1\xcf\x56\x5f\x6d\x27\x53\x3c\x78\x19\x6b\x3e\x16\xcf\xa6\x91\x14\x65\x67\xec\xa2\xfd\x49\x13\x01\xc0\xd1\x0f\xd8\x01\x60\xa0\x84\x9d\x68\x43\x4a\x3f\xae\x22\x51\x27\x83\x67\x51\xf5\x32\xfa\x0c\x39\xa9\xa7\xf2\x62\x9f\x00\xca\x96\x22\xa3\x43\xaf\x2b\xac\x12\x7f\x8d\xfc\xe8\x27\xec\x00\x30\x50\xc4\xce\xcf\xa1\x96\x41\x1e\x16\xac\x73\x64\xba\xe9\xc1\xb5\x6e\x6c\x71\xdf\x16\xed\xbb\x5f\x96\x8e\x95\xc7\xbc\x64\x7b\xf0\x91\xd1\xe2\xd7\x7a\x0c\xfd\x88\x1d\x00\x06\xca\xd8\x71\xac\x6b\x83\xa9\x26\xde\x68\x5f\xf1\xae\x2f\x5a\xa8\xbb\xef\x50\x73\x6f\xb3\xa7\xbb\x84\x8e\x41\x91\xfe\x7a\x4e\xa6\xc3\x10\x36\x02\x80\xa3\x9f\xb1\x03\xc0\x40\x21\x3b\x58\x4a\x57\xbc\xb4\xed\x25\x36\xea\xcf\xd7\x93\xd5\x17\x0d\xf8\x18\x57\xe5\x51\x11\xc4\x7c\x38\xc7\x9d\x4c\xab\x3c\x50\x67\x69\x89\x00\xe0\xe8\x87\xec\x00\x30\x50\xca\xce\xc5\x08\x78\x8a\x43\xb5\x48\x3b\x5d\xa8\x18\xd5\x92\x67\x6a\x4a\xa8\x7e\x51\x63\xba\x7d\xec\x0f\x31\xee\xf9\xc8\x53\x6c\xf6\xfc\x08\x00\x8e\x7e\xca\x0e\x00\x03\xc5\xec\x60\x7d\x10\x59\xf7\x2e\xa3\xea\x20\xca\x31\x62\x5d\x9e\x9d\xd3\x76\xc1\x67\xe5\x69\x3d\xfb\xe6\xf0\xc4\x55\x8d\xc1\x4b\x31\xf6\x78\x08\x00\x8e\x7e\xcc\x0e\x00\x03\xe5\xec\xa4\xca\xc9\xf6\x59\xb2\x67\xc9\x73\xc8\xba\x09\x7f\xbc\x80\xa3\x22\x5a\xcb\xcd\x57\x6e\xad\x54\x42\x75\xf6\xd2\x42\xf6\xbb\xe7\xbf\xd6\x63\x68\xe7\xec\x54\x12\xfd\x67\xc3\xf3\x2d\x87\x4e\x8a\x38\x72\xc6\x8a\x0c\xf7\x5a\x23\x05\x67\xfe\xfa\x0b\x46\x2e\x8b\xb6\xbc\x6a\x16\x4a\xb7\xe2\xec\x6b\x12\xbe\x4b\x88\xc7\x3c\x9f\xd8\xf4\x98\x31\xfe\x43\xb7\xaa\x51\x59\x47\xcb\x4b\x9a\xdb\x86\x70\x8a\xcf\x4e\x39\x67\xd1\x4e\x5b\x3c\x09\xee\x6a\x8a\x66\xbc\xcc\xa2\x93\xc9\xdf\xa6\x73\x04\x55\xec\xca\x60\xce\x6d\xb5\xdb\x0d\xba\x26\xa3\x9e\xfb\xba\x0a\x57\x22\xbf\x4c\xe3\x8a\xed\x81\x7a\xac\x78\x60\x50\x7e\x80\xad\xdc\x11\x34\x0c\xff\xc7\xbc\x34\x9b\xe7\x62\x5e\x67\xe6\xb4\x7f\x65\xb8\x73\xe2\xc2\xcb\xcd\x37\x63\x35\xf2\xef\xb5\x7d\x89\xba\xf5\xc9\xc9\x8e\xa0\xb2\x94\x44\x3e\xe1\xdc\x8a\xe6\xb7\x78\xfb\xaa\xdb\x03\xa4\x05\x9c\xef\xa4\xae\x24\xc6\xa9\x04\x35\x77\x3b\x31\x8a\x22\xac\x9d\x8e\xa0\x35\x6d\xf7\x25\x9d\x93\x58\x42\x4a\x7f\x2a\x39\xd3\x78\xbf\x0f\x7d\x55\xeb\x75\x8a\x27\x96\xf7\x79\x00\xff\x14\x25\x1b\xf7\xd6\xf7\x23\xa8\x36\xe1\x6c\x89\x9a\xdc\x9c\xcf\x00\x47\xfd\x3e\x62\x8f\x5d\x91\x5d\xf5\xe5\xa7\xb4\x35\x8b\xf9\xa8\xed\x46\x4d\xbd\x52\x1c\xfc\x23\x68\xa4\xbb\xf9\xf9\xba\xcc\x43\x3a\x12\x93\x95\xa9\xef\x8a\xaf\x3b\x5a\x39\x5b\x3c\x67\x19\xc2\x57\x59\xf0\x95\x27\x7b\xb2\x2c\xe7\x8e\xa0\x26\x6e\x37\x1f\x78\x46\xdc\x6e\x3d\xc5\xb4\x99\x79\xfa\xc0\x6d\x95\xa0\x92\x69\xff\x6e\x76\xbd\x59\xdd\x89\xf0\x74\x35\x69\xab\xe5\x23\x28\xec\x81\xd3\x73\xfc\x32\xc2\x69\x3d\x78\x6a\x4c\x08\x42\x13\x17\x4f\xe3\x66\x99\x7e\x20\xdb\x99\x53\xc4\x13\x9a\x16\x67\xef\x2f\x1c\x41\x39\x65\xa7\x3a\x74\xa3\xef\xce\xe3\x60\x75\xf2\x2b\xc5\x45\xe1\x14\x79\x5a\x33\xba\x3f\x1d\x3d\x6b\x1e\x59\xfc\x01\x2f\x34\xe1\x68\xd5\x39\x79\x7c\xed\xb4\xf7\xf1\xd1\x12\xf3\xb9\xa4\x93\xce\x1d\xf7\x19\x5f\xe1\xf9\x78\xb9\xf4\xd8\xcf\xbd\x4d\x76\xeb\x78\xa2\xb8\x7b\x04\x4d\xc6\x8f\x74\x1b\x14\xdc\x54\xee\x19\x66\x1e\x08\xfe\xbc\x7b\x3d\x8c\xf8\xfc\x8c\x75\x87\x4b\x80\xf7\xe4\xc1\xc3\x6c\xc0\x4d\xeb\x08\x2a\x65\xec\x3f\x8c\xdb\x47\xf0\xfc\xe4\x75\x9e\x66\x4b\xac\x5b\xf9\x71\x0f\x4d\x7b\x3c\xb2\x6c\xd3\xd5\xa8\x45\x85\x65\x67\x5b\x35\x8e\xa0\x66\xa1\xed\x46\x77\x73\x59\x36\xf7\x62\x9b\xb8\xee\xf7\x7b\x5c\x2f\xe7\x3e\x97\xa1\xf2\xf9\xe3\xb0\x7b\xb5\xfb\xee\xc2\xb6\x63\xdb\x11\x34\xf6\x4e\x00\x1b\xe6\x58\x9f\xf5\x97\x36\xd8\x45\xd7\x05\xf2\x5a\x91\x74\xa5\xcd\xd5\xfd\xe7\x61\x5d\xd5\xfe\xf3\x12\xe2\x57\x8f\xbe\xd6\x2b\xa5\x07\xd4\x99\x66\xfc\x65\xcb\x5c\x35\x5b\xb2\x13\x05\x30\xef\x76\xdb\x15\x83\x9b\x5f\x71\xf2\x86\x63\x46\x23\x3f\x32\x89\x1c\x41\xeb\x28\xac\xef\x50\xa5\x10\xe7\x5b\x65\x46\x07\xa6\x07\x5e\x98\xce\x8a\x8c\x76\x51\x7f\xc6\x1f\x73\xdb\x46\x09\x77\x2c\x47\x55\xf7\x08\x4a\xb7\xc4\x7b\xed\x3c\x6d\x96\x34\xa1\x9a\xca\x87\x22\xbe\xe0\x94\x90\xfe\xa9\x6c\x23\xf7\x17\xbe\x23\x75\x4d\xb7\x64\x8a\xde\xf0\x1e\x6d\xac\xed\xd9\x57\xb6\x57\x3f\x59\xeb\xc4\xce\x9e\xa6\x15\x7c\x76\x26\x97\x20\xe9\x3d\xc2\x3b\x61\xe9\x32\xde\x3b\x9a\x40\x44\xc4\xe7\x23\x68\x78\x31\xf9\x4e\xf8\x54\xcf\xe3\x61\x13\x9d\xe7\x6d\x25\xdd\xec\x4c\x6d\xaf\x85\xf4\x24\x3f\x79\x7b\x1f\x84\x24\xb2\x5c\xe0\x3e\x38\x82\x3a\xe6\x9f\xb9\x17\x5b\x28\xfc\x08\x77\xb0\x50\x88\xe1\xba\x12\x9e\x71\xb7\xff\x93\x4f\x9d\x02\x32\xdf\x1f\x3d\xb8\x49\x11\xa2\x3f\x70\x04\x9d\x4e\xfe\x59\x75\x9f\x6c\xd1\xf0\x95\xf9\x4d\xdb\x57\x74\x9a\xf8\xfc\x5a\x22\xb1\x03\x11\x3b\x9f\x6f\x2e\xb8\xd6\xf2\x94\x0a\x9f\x38\x82\xf6\x7c\x75\x81\xed\x99\xea\x0d\xe0\xce\x95\x0a\x07\x7d\x61\xc8\x5d\x32\x8f\xa5\x4b\xf1\x1a\xd2\xfb\x2a\x3c\xf2\xc8\xaf\x8f\x28\xe5\x08\xda\x7c\x0f\x73\xb2\x6e\x4b\xb4\x6a\xf9\x22\xcf\x5b\x73\x92\xd1\xb9\x30\xb5\x34\x6b\xb5\x7d\xf5\xf2\x68\xd1\x34\xb8\xcf\x00\x5f\xd7\xd1\xbf\x82\x6b\xd2\x59\x2a\x7d\x02\x4f\x1c\x6d\x31\x6c\x38\x8d\x1f\x71\x1b\x17\x76\xa8\xea\xed\x09\x5e\x5b\x63\x33\xde\x8f\x8d\x4f\xa1\x38\x82\x7e\xb7\xd4\x22\xcb\x6b\xaf\x36\x16\x7d\x2f\x3d\xa0\xbd\xb5\x51\x71\x93\x9d\x3b\x27\x25\x6b\xbb\x02\x27\x2b\xef\xc7\x44\x2b\x73\xd2\xff\x7f\xe8\xd7\x7b\xf2\xd6\x76\x4f\x4c\xb5\xad\x96\x6f\xdf\x2d\x9f\xda\x2e\xc8\xf1\x6e\xba\x8d\xf5\x48\xcc\xe9\x06\x62\xe4\xd3\x12\xbe\x95\xfe\x11\x54\x54\xb0\x7a\xc9\xac\x8f\xe3\x55\xf2\xe5\x10\xee\xb6\x00\x73\xec\x83\x17\x52\xb7\xe8\x7f\x66\x67\xe8\xac\x9f\x82\x8b\xbf\x39\x13\x77\x04\xd5\xab\x75\x53\x74\xd9\xd3\x10\x7d\xef\x30\x22\xc4\x64\x17\xc9\x35\x52\xb8\x68\x7d\x83\x3e\x58\xf6\x53\x37\xb3\x41\x25\xa3\x71\xce\x11\x74\x39\x20\x15\xfe\xe8\xe4\x84\xf0\x74\x41\x64\x10\x90\xa4\xff\xac\xfc\xc6\xab\xd7\x8d\x2a\x6a\xfb\xdb\xc9\x16\x5c\x5d\x7a\xb2\x09\x47\xd0\x68\xd1\xbb\x6f\x2a\xe3\xcd\x9e\x3c\xd6\x98\x24\xa6\x0f\x20\xdf\xc3\x25\xc8\x32\x2a\x76\xad\x15\x63\xd4\x7e\xa2\x65\x1d\xff\xec\xf4\x11\x14\x97\x2b\xcc\x14\x0f\xab\xcc\xe4\xa7\xa7\xd5\x76\x8c\x38\x59\xf3\x7c\xe0\x67\xcb\x57\x1e\x17\x65\xab\xb5\x86\x4c\x5b\xe2\x1c\x5e\x1d\x41\x8b\xa2\x73\x14\xaa\x16\x16\x3c\x44\x28\xde\x65\x9e\x76\x97\x31\xe9\x12\x0b\x3f\x15\xd8\xd4\xf0\x82\x60\xe6\xa2\xc6\x87\x9a\x94\x9a\x23\xa8\xe4\x1c\x51\x07\xa6\x78\xd0\x26\xde\xe5\xd1\x04\x3f\xd9\x3e\x87\x1a\xf3\x52\xf9\x8f\x8d\x92\xb3\x5c\xf9\xa1\xf2\x51\x0a\x12\x4f\x8f\xa0\xfc\x99\x44\x63\x7b\x2a\xe9\x9d\x59\xb4\x7b\xfd\x76\xb1\xad\x8c\x1d\x24\x7a\x3d\x2e\xe9\xc3\x97\x58\xb5\xb6\xf7\x2b\x6a\x2f\x3f\x3e\x82\x5e\x1e\xfb\x58\xfb\x84\xa4\xc1\xb4\x02\x5b\xb3\x55\x8e\x4b\x4c\xf2\xe2\xc4\xbb\x50\xbf\x19\xd2\x01\x96\x16\xd2\x77\x39\x1e\x19\xe4\x47\xd0\x9d\x09\xdc\xfb\x07\xb1\xb8\xbc\xd5\xbe\x2b\xfc\x12\x3e\x2d\xb9\xdf\x4b\x99\xb7\xb9\x68\x4a\x6b\x57\xa6\x6e\x89\x27\x5e\xe8\x9a\x38\xfa\xc7\x9d\x60\xc9\x69\xc9\x3b\xfc\x2d\x50\xe2\x8b\x2d\xf1\x45\xea\x69\x77\xf5\xb6\x33\x0a\x39\x77\x71\x42\x54\xd2\x36\xf5\x12\xf0\x8f\xfe\x15\x64\x6b\x37\x95\x1e\xf2\x66\xbf\x7a\x64\xf6\xc3\x36\xe5\x4b\xd1\xfd\x4c\x51\xba\xf7\x7e\x53\xd6\x9e\xee\x64\x33\x8f\x54\xb7\x2c\x52\x8f\xa0\x56\x70\xa3\x22\xc1\xb3\x3a\x39\x8d\x04\xba\xcb\xc0\x16\x11\x8c\x6c\x6f\xdc\xe7\x5e\x1d\x75\xaa\x0f\x95\x90\xd3\x6d\x4c\xcf\xa3\x53\x9c\x7c\xce\x5d\xee\x35\x25\x7a\x87\x89\xf7\x1f\x06\x70\x8d\x37\xe7\x38\xac\xe6\xbb\x5a\x48\xcc\x2a\x2a\x4f\xd6\xd6\x9c\xc0\xfe\x7c\x74\x86\x99\x7c\x5d\xee\x5e\x25\x0d\x60\x09\x3d\xf7\x3a\x89\xfb\x15\xa6\x1d\x21\x47\x48\xfa\xdd\x21\x09\x08\x6b\x4c\x38\xac\x14\xd7\xff\x76\x04\x7d\x76\x28\x59\xd7\xae\x48\xa8\x7b\x3d\x89\x07\xd0\x15\x88\x78\x54\x1c\x7f\xb7\xb8\x71\xad\x5a\x30\x4f\x9d\xb2\xf0\xd9\x0e\x27\xcb\x11\xd4\xe1\xfc\x75\xe1\xfe\xc0\xb4\xcf\x6d\xe7\xa3\x6e\x4f\x3d\xa8\x78\xfc\x34\x6c\xa1\x48\xac\x24\x72\xa8\x4d\xf3\x4b\x9d\xb7\x52\x2f\xd6\xd1\x8e\x5d\xef\x48\x72\x89\xfc\x9c\xbd\xd3\xca\xdd\x65\x70\x5b\x65\x9a\xea\x4e\xb6\x45\xb0\x59\x7c\x3c\x89\xcd\x6e\xb9\x24\x6d\xf5\xf6\x11\x94\x7d\xbd\x77\xf7\x3b\xbe\xf2\xf9\x72\x49\x6b\xca\x87\xca\xa3\xf5\x4c\x13\x3e\x1e\x51\x1b\x0e\xd4\xca\xe4\x52\xdf\x8c\x74\xb6\xf3\x8e\xa0\xf7\x3a\x6d\xee\x0b\x73\x90\x99\xd3\x3c\xbd\xe5\xf8\xe8\x4b\xd8\x79\xd7\x83\x6c\xc6\xdb\x86\xc1\xb9\xb1\xec\x0f\x4f\x97\xac\x84\x7b\x06\x63\xfe\xd9\x62\x20\xec\x48\xcd\x9f\xa7\x4f\x3d\xc1\xec\x10\xdb\xa6\x58\x9e\x11\xc6\x60\xe9\xef\x09\xf0\xd3\xda\xfb\x59\x1f\xd6\xf5\xb9\x79\x3d\x83\x82\xa3\x46\xec\x08\xba\x12\xf9\x61\xec\x23\x60\x85\x47\x83\xa7\xce\xcc\x48\xb1\x70\xe9\x84\x93\xe2\x34\x97\x64\x82\xd6\x61\x95\x1a\x5b\x13\x90\x6e\x27\x21\x81\x8f\x1f\x20\x21\x71\xe4\xff\xb8\x45\x76\xf0\x50\x30\x91\xc7\xe9\x7d\xcb\xf7\x96\x76\x87\x8d\xd9\x3d\x7a\xbc\xdc\x1c\xeb\x66\x6d\xcd\x90\x8f\xf9\x65\x73\xf6\x99\x47\xd0\xae\x64\xbf\xc7\xe9\x62\xf3\xfd\x63\xc3\x4a\xb5\x29\x4e\xfd\xf2\x49\xa6\x5b\x6f\xb2\x07\x3f\x36\xd1\xbe\x6c\x5e\x2b\xed\xfc\x26\x85\x46\xd5\x4d\xf8\x9f\xbd\x5a\x10\x16\xc6\x89\x40\x49\x71\xff\x7b\xe1\x92\xda\x12\x12\xff\xfa\x87\x8f\x13\xb1\x6c\x71\xdd\xba\x4c\x78\xf6\x05\xa9\x50\x1d\x83\x87\x13\x26\xfb\xa9\xdd\x2e\x45\xe9\x4c\x8a\x90\xbd\x91\xca\x1d\x26\x2b\x34\xfe\xe1\x01\xb2\x18\x12\x18\x18\x18\x72\x18\x98\xbf\xd6\x7c\x01\x12\x12\xff\xf9\x2f\x5c\xda\x5f\x19\x06\x7a\xea\x0d\x02\x1c\xca\x91\x1b\xb2\x57\xb2\x89\xf1\x53\x66\x2f\x33\x06\x94\x53\x46\x47\x87\x2b\x8d\xa7\x2e\xbd\x47\x4c\x5b\x69\x78\xb2\xff\x85\xa7\xca\x60\x08\x4a\x80\x1f\x2b\x32\x74\xae\xdc\x25\xf8\xf5\x3c\x2c\xde\x85\x15\xc3\x24\xfa\xa5\xe6\xe5\x6e\xcb\xed\x8b\x09\x19\xab\x81\xe3\x9c\xb7\x97\xaf\x04\xfd\x8d\xc7\xfa\x6b\x1e\x7b\x6c\x4f\xaa\x06\x66\xa5\xfd\x86\x3d\x77\xdd\x70\x5a\x50\x7b\xaa\x3e\x97\x90\x85\xf1\x99\xce\x4e\xeb\x74\x07\xa7\xee\x0b\x5e\x0e\xd7\xfe\xca\xdb\xde\x3a\xf6\x58\x65\xf3\xfd\x27\x75\xc5\x93\x6a\x00\x4d\xbc\xd5\x24\xaf\x6a\x9f\x15\x5b\x0a\x01\xc0\x97\x70\xf1\x7c\x32\x4e\x91\xbb\x11\x7f\xe4\x5f\x79\x5b\xaf\x63\x8f\xb5\xc6\xb2\x20\x18\x2c\x92\x0a\xec\xa8\x96\x8f\xaa\xca\x4e\xdc\xbd\xf2\x95\x7c\xfe\x8d\x0d\x80\xb8\xff\xfc\x6d\xc9\x9e\x21\x8e\xdc\xff\xf7\xc7\x1a\xfc\x99\x74\x83\xb0\xe1\xb0\x40\x29\x4c\x0c\xc4\x91\x27\x8e\x2e\xb9\xc8\xeb\x48\x53\xa7\x5d\xe9\x5b\x62\xda\xf6\xa8\xaf\x67\xcf\xd2\xc8\x12\xae\xf0\xc6\xa1\x61\x93\x62\x5e\x4a\x63\xef\xf2\xd7\xfd\x33\x2e\x50\xca\xff\x5f\x75\x37\x63\x93\xc9\x79\x2f\x16\xb7\xda\x65\xc8\xb4\xe4\xb4\x6a\x3e\xb5\x19\x90\xb6\x25\x5d\xa2\xe0\xf7\x6f\x4a\xf9\x56\x98\xcf\x7a\x01\x59\x17\x8a\x0b\x94\xc2\xc0\x3e\x5a\x77\xbc\x28\x5b\x5d\xe0\x73\xf2\xa5\xbe\x7b\x70\x2a\x02\x3e\x61\x2a\xbe\x00\xba\xef\x01\x42\x25\xad\x86\xf7\x7c\xc7\x06\xb6\xb1\xa2\x90\x75\xa1\x38\x70\xdd\xbe\xbc\x10\x85\xb9\x6f\xb3\xf6\x9f\xdb\xc7\x4a\xd2\x74\x09\x3b\x3c\x05\x5f\x96\xee\xe0\x5c\x34\xe3\x97\x91\x52\x21\x70\x65\xc6\x41\xd6\x85\xe2\x02\xa5\x60\xff\x6a\x87\x82\xf6\xd0\xb9\x9d\x87\x89\xaf\x65\x81\xc0\xb9\x22\xe5\x59\x89\x40\x3f\x75\x3a\xef\xcd\x02\xee\xd3\x31\x35\x82\xbe\x27\xc9\xaf\xf8\x2b\xff\x19\x17\x28\x85\x81\xeb\x8f\x08\x96\xd4\x96\x50\xc4\xc0\xd6\x11\x3a\x87\xf1\xab\xff\xc1\x6a\xe0\xfe\x33\x15\x05\x61\x61\x60\x04\x4a\x62\xf8\xfb\x1b\xfc\xd9\xe0\xf3\x3b\xdd\xd0\xaf\xe7\x1b\x5e\x17\x8a\x5e\x37\x36\x6e\xff\xae\xb2\xde\x11\xc2\xb1\x76\xc9\x2e\x9f\xec\x0c\x51\x38\xa9\xcc\x49\xea\x7d\x5c\x1f\x64\x7b\x41\x71\x60\xdd\x50\x37\x93\x3d\x0e\x56\x32\x52\xe6\xd4\x8e\xf5\x60\xc7\xcc\x88\x57\xbb\xd9\x39\x73\xee\x3b\x89\x22\x86\x5e\x5e\x15\x70\xad\x8c\x09\x59\x17\x8a\x03\xf7\x2f\xae\x70\xa9\x65\x47\xc3\x3e\x86\x30\xae\xa7\xea\xa1\xd8\xfa\xe3\xc9\xea\x86\xf0\xf4\x80\x9b\x8c\x1f\xa4\xda\x8c\xe0\xf0\x34\x94\xce\xa1\x38\x70\xdd\xef\x3b\xcc\x9c\x2f\xce\x0f\xa9\x27\x9a\x08\x62\x09\xe4\xa8\x4b\x8e\x18\x46\x23\x12\xf0\xf9\xdc\xef\x45\xe4\xa4\x73\xcd\x95\xa6\x22\xeb\x42\x71\x60\xdd\x90\xde\x37\x32\x0d\xe5\x8c\x3e\x41\x38\x6a\xdf\x79\xfd\x2e\xcf\x83\x9e\xb8\x1b\xd5\xba\xab\x1a\x54\x16\x27\x9f\x6d\x90\xb4\x59\xbd\xf6\xbf\xfa\x67\xdc\x7f\x75\xf3\xcf\x94\xf3\xff\x50\x8e\xc1\x9f\xcd\x07\xbf\x53\x42\xad\xc0\x86\x8c\xde\x95\xcf\x6c\xb2\xfb\x2e\xaa\x92\xa6\xd3\x9a\x96\x72\x78\x9f\x06\x6d\x58\xeb\xde\x6b\x93\xf6\x4b\x67\xf4\x0a\x22\x5b\x00\x8a\x03\x2b\xc1\xdc\xb0\x4d\x67\xe4\xad\x02\x83\x29\x47\xa8\xc9\xf5\x61\xdd\xf6\xb4\xce\x12\x85\x52\xad\x1f\x1e\xcb\xeb\x0d\x1e\x37\xbf\x12\x2d\x22\xeb\x42\x71\xe0\x1e\x2b\x4e\xca\x33\x6c\x9e\x7e\x09\x24\x64\xd9\x69\x7c\x78\xbe\xb3\x2a\x10\xf2\x94\xbd\xa2\xe1\x60\x8c\xee\xa5\xd7\xb7\x74\xfe\x7c\x2a\x64\x5d\x28\x0e\x5c\x97\x6e\xb5\x9c\xf6\xdb\x5b\xef\xe6\x9f\xb6\x0e\xe5\xd9\x70\x07\xa6\xb2\xd2\xaa\x9b\x33\x55\x26\x09\x05\x6f\xcf\xd5\xa7\xdf\x24\xc1\x44\xd6\x85\xe2\xc0\x4a\xb0\xec\xfd\xd2\xab\x2d\x29\x18\x3f\xfa\xbd\x33\x67\x7a\x7d\x9b\x8a\x22\xd1\xae\xd2\x1f\x27\x31\x92\xd1\xca\xe8\xa9\x54\x17\x77\x8a\xbf\xea\x9f\x71\xff\x55\xc2\x7f\x96\x01\xd0\x52\x80\x9a\xa3\x7f\x27\x85\x37\x23\x27\x7d\x48\x56\x08\x46\xd5\xf1\x74\x44\x71\x11\x2a\xcf\x66\x2e\xd1\xb7\xec\xd5\xd9\xf1\x34\x2d\xdc\xb0\xaa\x49\x56\xc1\x46\x36\x01\x14\x07\x96\x82\x97\x54\x71\x72\xa6\xa8\x72\xba\x0a\x7c\x4e\x25\x6d\xbc\xad\xae\x3a\x81\x10\xae\xb7\x66\x3f\x93\xc8\xde\xc7\x8f\xfb\x99\xf2\x09\xb2\x2e\x14\x07\xee\xb2\xc5\xed\x29\x0a\x8e\xad\x32\xfd\x11\x92\x1e\x0d\x8c\x8a\x84\xe1\x98\xd0\x57\x02\x76\x04\xb5\x57\x1b\xdb\xe5\xc8\x1f\x94\x9e\x08\x46\xd6\x85\xe2\xc0\x75\x2b\xee\xcb\xe2\x63\xb2\xdf\x1d\x1e\xe9\x20\xfe\x86\xe8\xf7\x37\xce\x3a\x9b\xdb\x4d\xd6\x8f\xb7\xe4\xe1\xd2\xf8\x20\xca\x54\x5b\x05\x59\x17\x8a\x03\x4b\xe1\x1d\x25\xf9\xb4\x9d\x2a\x1b\x59\x10\x82\x04\xaf\x7e\x7f\x33\x45\x68\x94\xf9\x9e\x14\xbd\x55\x81\xb5\xa5\x62\x12\xc7\x89\x44\x5e\xa4\x14\xa0\x38\xa4\x14\xfe\x59\x9a\x41\x4b\x01\x6a\xdd\xf4\x3b\x29\x30\x7f\x0e\x47\x00\x57\x34\x77\x94\x59\x0a\xa8\xb1\x95\x4f\x64\x2c\xb0\x17\xa6\x1e\x16\x57\x7c\xd4\xac\x08\xa5\xa1\xac\xec\x46\x8d\xb7\x50\x1c\x58\x0a\x0b\xb3\x2e\x7d\x27\xc8\xbe\x4e\x9e\x18\xe2\xdc\x57\x8d\x79\xa5\xfd\xe5\xe6\x69\xd3\xe1\xf7\x14\x92\x77\xcc\x4e\xf5\x4a\x9e\x8a\x67\x43\xd6\x85\xe2\xc0\x5d\x86\x15\x49\x41\x4d\xf4\x72\x62\x34\x82\xd1\x31\xeb\xd3\x09\x42\xd2\x89\xbc\xbd\xaa\x0f\x07\x57\x6f\xb8\x51\xf5\x12\x0f\xf1\xf2\x7f\x41\xd6\x85\xe2\x8e\xad\x2b\x58\x8b\x08\xf6\x4a\xdb\x70\x0d\x0d\x9e\xe6\x66\x1e\xca\xc1\x0f\x9e\x8b\xae\xaa\xdf\xb6\x93\x8e\x47\x34\xe0\x60\x08\x48\xa0\xe6\x07\x28\x0e\x2c\x05\xd1\x19\xf7\x37\x5f\x2e\x26\x93\x13\x5c\x6f\x09\xc2\x5d\x33\xc6\x8b\x74\x6a\xa4\x13\x14\xfc\x2e\xb3\xde\x10\x42\x5e\xf3\x24\xf7\x10\x29\x05\x28\x0e\x35\x2a\xdc\xfa\x23\x29\x40\xad\x65\x7f\x27\x85\x2f\x0e\x59\xdb\x96\xe3\x4d\xd5\xda\x35\xcf\x95\x14\xd4\xa3\x2d\xbf\x37\xd8\x0d\xe9\x9f\xea\x94\x7d\x55\xc5\xf2\x3a\xf3\x03\x71\x11\xb2\x09\xa0\x38\xb0\x14\xae\x96\xe5\x91\x99\x8b\x04\x3f\xf7\x4c\xbd\x72\xea\x44\xb2\xef\x82\x3a\xde\x5e\x8d\xdd\x6b\xfd\x5b\xe6\x71\xc4\x78\xfe\x9c\x9b\x36\xc8\xba\x50\x1c\xb8\xcb\x1e\x9d\xc4\xbc\x5f\x69\xfc\xf2\x80\x59\x78\xea\xe1\x27\x69\x03\x9c\x08\x9a\x0d\x52\x02\x06\xb1\x5e\x7c\xec\x51\xb3\xd1\xe5\x2f\xb4\xc8\xba\x50\x1c\xb8\xee\xa8\xd4\x7a\xb1\xc0\xfd\xee\xe7\x8b\x9d\x2b\x1f\x74\x92\x2d\xa9\x5d\xf1\xbe\x4f\x65\x8c\x0c\x9e\x8e\x71\xbd\x1f\x45\x16\x98\xc4\x89\x5a\x6a\x43\x70\x60\x29\xcc\x7a\x7c\xe3\x3d\xe1\x41\x99\x66\x95\x78\x4d\x8e\xf5\xd1\x06\x59\xbd\x4d\x81\x11\xb3\x0d\x09\xe1\x8f\xb8\x2d\xcb\xf3\x54\x57\x6d\x91\x52\x80\xe2\x50\xa3\x82\xd7\xff\x5b\x0a\x37\xff\xcc\x13\x08\x82\x63\xc3\x02\x65\x30\x31\x30\xfe\xf5\x8f\xb5\x66\x55\x97\x3e\x1c\x08\xb4\x61\xb4\xf8\x3a\xb4\x41\xbc\xbb\xd6\x4e\xb6\x6c\x91\xab\xf2\x74\x66\xe7\xf9\xbb\xf6\xab\x82\x96\x0f\xfd\xaf\xff\x19\x17\x28\x83\xe1\xff\xef\xca\x14\x3a\xcf\x2f\xe9\x8f\xf1\x2f\xb6\xa4\x52\xee\xbe\xa0\xdb\xe6\xbc\x76\x9f\x5d\x69\xc0\x76\x80\x4d\x3c\xea\x5e\x51\x2b\x93\x8b\x1b\xb2\x32\x14\x17\x28\x83\x81\xfd\xef\xca\x06\xf3\xa4\x2e\xba\x87\x46\x8c\xca\x1d\x93\x02\x37\x1f\x7f\xb2\x14\x34\xec\x8f\xa2\x40\x94\x31\x77\xc9\xb7\x53\x3f\x0e\x2b\xa7\x43\x56\x86\xe2\x02\x65\x30\x30\xfe\xdd\x75\xef\xcb\xc4\x63\xae\xda\x0d\x5c\x9a\x4e\xff\xb2\x62\x60\x86\xf0\xe6\xc3\xdf\x96\xd9\xce\xbe\xd1\x5c\x2e\x85\xd5\x97\x2f\xdf\x13\xea\xcf\xf3\x67\x5c\xa0\x0c\x06\x2e\x06\x86\x3f\x42\xb2\x8f\xfb\xcf\x8c\x92\x20\xcc\xff\x6e\x01\x90\xc6\x11\xd4\x4f\x43\x47\x8d\xa3\x68\xd5\xee\xdd\x84\x93\xcf\xf3\xb9\x0c\xb6\x9d\x37\xa7\x2b\xef\xb2\x3e\x77\x60\xd4\x6d\x13\x8c\xb6\xc0\xd5\xf7\x7a\xdf\xa6\xf0\xfe\x08\x3a\xc5\xff\x00\x97\xd7\x94\x66\xf2\xd1\x5c\x9e\x82\xe3\xab\xd1\x00\xc3\x93\xb0\x7e\xd8\x35\x61\x19\xdb\x3b\xa3\xac\x56\x4e\x07\xdc\xff\x2b\xc6\xd1\x16\xfc\xcf\x5e\xed\xff\x8c\x23\x29\x75\x52\xd0\x3e\x3f\x5a\xed\xe5\xb3\xf1\x3b\x25\xb3\xb8\x63\x46\x11\x2e\x65\x74\x98\xa3\x25\x49\x7b\x98\xdc\x8c\xa7\xd3\x37\x34\x4a\xb4\x74\x9d\x58\xff\x86\x73\x54\x7f\xcc\x39\xc2\x8d\x78\xce\x91\x9f\x85\xc0\x7a\x38\x6b\x9e\xcc\x8c\x5b\x19\xc5\x4f\x12\x6d\x64\xac\xfc\x2d\xf7\xa4\xa4\x7c\x4d\x01\x53\x89\xf7\xdf\x30\x35\x24\x8e\x3b\x47\x58\xfc\xbe\xba\xb3\xb5\x97\xf6\x5b\xe8\x0a\x99\x1b\x75\x35\x58\x02\xb1\x08\x58\x10\x01\x11\x05\xef\x32\x48\x9d\x59\x55\xef\x25\xff\x8d\xc7\xd6\x1f\x77\x8e\x16\x5e\x0c\x60\x8a\xa8\x24\xde\xb0\xd1\xbc\xe9\xc4\xb8\xec\xcd\x53\x67\x18\x64\x72\x78\x2f\xf7\xac\x85\x52\xf0\xbc\x8f\xb9\x4d\xcb\x5f\x79\xdb\xe3\xce\x91\x31\xc7\x34\xc1\x80\x04\x61\x47\x3f\xec\xf5\x21\x8b\xd9\x7b\x2d\x87\xc7\x1d\x55\xa4\xa5\xce\x2e\x0c\x38\x54\x58\x5d\x03\xb5\x34\x7f\xe5\x6d\x8f\x3b\x47\x7d\x82\xeb\x12\x21\xbb\xe3\x96\x04\x7c\xaa\x73\xa4\xa1\xb6\x7e\x1a\x8f\x7f\xc8\x64\x63\xbb\xba\xdd\xbd\x75\xf3\xd3\xe7\xa6\x92\xda\xbf\xe6\x1c\x41\x49\xf7\x77\xd3\xba\xd5\x25\xb3\x53\x96\x4a\xa4\xfa\x41\x1f\x9f\xa8\x73\x51\x92\xc3\xfd\x05\xcf\xbd\xb8\x32\x8c\xd9\xb9\x55\xcc\xb5\x81\xdb\xff\x69\x08\x39\x9d\x41\x71\xe0\x69\xbd\x32\x2e\xd3\x25\xb7\xfc\x91\xe3\x98\x1e\xad\xd2\xda\xb7\x49\xc3\xa7\xc0\x7d\x6e\x51\x41\xfa\x48\x0a\x71\x71\x02\x4b\x05\xad\x65\x64\x5d\x28\x0e\x3c\xfd\x6e\x10\x19\x0b\x0f\x15\x05\xdf\x71\xa1\xdd\xd8\xc1\x4d\x38\xf0\x4a\x97\xb8\x40\x5a\x75\xd1\xb2\xab\x21\xa4\xad\x3f\x65\xa7\xa6\x0e\x59\x17\x8a\x03\xd7\x25\x9a\xb2\xd5\x19\x7f\xd1\x35\x2d\x6c\x0c\x2b\xac\x84\xe3\xfa\x3b\x84\x4c\xbc\x7d\xd0\x9c\xfc\x3a\xd9\x94\x96\x39\xad\xd7\x7d\x1a\x59\x17\x8a\x0b\x94\x22\xfa\x57\x3b\x68\x68\xf8\xaa\x26\xd0\x9a\xf8\x52\x85\x94\x7c\x96\x91\x08\x7b\xa9\xfa\xee\xd1\x88\x89\xc8\xe2\x4d\x4b\xcb\xd3\xb3\x40\xef\xd5\x5b\xfe\x2a\x7f\xc6\xfd\x6a\x5f\x7f\x44\xf0\xaf\xf1\x0a\x7a\x7d\x07\x35\x9a\xfc\x4e\x08\x0f\xe7\xd5\x72\xb0\xea\x5a\xf3\xcb\xc3\xaf\xd4\x39\x99\xe9\x6b\xdc\x12\xb6\x30\x2e\x6d\x9b\xf8\xb2\x53\x93\x58\x41\xc8\x5c\x70\x80\x6c\x00\x28\x0e\x2c\x04\xcc\x15\xda\x8d\xad\x1f\xf9\xd6\xc5\x6e\x9b\x61\x36\x2c\xeb\xfb\xa1\x0a\x0f\x8a\x70\x6c\xa9\x3a\x8a\x11\xc2\x35\x24\x92\xa9\x05\xc8\xba\x50\x1c\xb8\xc3\x34\xcf\x9e\xa4\xdf\x25\xc6\xa6\x2a\xca\xcb\xaf\xb2\x10\x09\xb5\xb9\x3f\x66\x34\x66\x86\x31\x2f\x27\x6e\xa4\xf1\x6c\xc3\x57\x93\x10\x59\x17\x8a\x03\xd7\xc5\xbf\x14\xdb\x70\xd2\xb5\x05\x73\x56\x3f\x78\xef\x4e\xb3\x23\xe7\xd3\xa7\x57\x36\x68\x6e\x0c\x54\x62\x8a\xac\xe5\xf7\x78\xec\x0f\x22\xeb\x42\x71\x60\x21\x64\x44\xb8\x5d\x08\xf6\xbb\xe1\x49\x1e\xc2\x21\x50\x4a\xf0\x99\x81\x0d\x1f\xe1\x3d\xce\x48\x4b\x9b\xe9\xf8\x53\xab\x81\xc7\xe7\x14\xd2\x0a\x82\xe2\xfe\x2b\x84\x7f\xe6\x10\x68\x25\x40\x0d\xf0\xbf\x53\x42\xde\xe1\xc9\xda\xe1\x82\xfe\xb7\x84\x29\xf0\x95\x75\x5a\x4a\xba\x27\x4c\xce\x27\x3f\xaa\x56\x86\x86\x28\x1f\x52\x9b\x38\xf0\x94\x21\x5b\x00\x8a\x03\x2b\xa1\x44\x3b\x24\xb5\x9f\xb7\x35\x1d\xe0\xf8\x5a\xce\x4c\x38\xcf\x6a\x85\xb8\x5a\x95\xac\x3d\xc3\xef\x18\x65\x9c\xf9\x23\x77\x86\x1a\x59\x17\x8a\x03\xf7\x98\xa3\x78\xc8\xc9\xcd\x87\xce\xc0\x49\xe5\x12\x15\x3e\x00\x6b\xa5\xc8\x6b\x1e\x73\xdd\x52\xe3\xdc\xf5\x3c\x39\xba\xd3\xdc\x7e\x77\x90\x75\xa1\x38\x70\xdd\x12\xe5\xda\x30\x16\xc3\xaf\x85\x04\xd2\x55\xce\x11\x4e\x42\xf6\xa7\xcf\x15\xb9\x65\x15\xc9\xbd\xde\x3a\x9f\xf9\xe1\x4c\x76\x8f\x01\xea\xdf\x0b\xc1\x81\x95\x10\x2f\xd5\x3d\xf9\x31\xd6\x81\x2f\xdf\xcd\x86\xe9\x6c\x58\x1d\xd1\xa3\x37\x9a\xec\x32\xd4\x54\x98\xdf\x17\x02\x39\x05\x14\x1b\x13\x90\x2b\x7d\x28\xee\xbf\x4a\xf8\xcf\xbc\x0e\x2d\x05\xa8\x49\xf7\xb7\xb3\x03\x3c\x8c\x25\x7c\xf7\x2d\x6d\x3d\x79\x4a\x99\x88\xe5\xca\x79\xe7\x98\x09\x49\x4f\x35\x6f\x92\xae\xed\xd7\xf1\x79\x51\xcb\xb5\xa8\xd9\x01\x82\x03\x4b\xc1\xb0\x08\xd6\x7c\x42\xda\x74\xea\x86\x58\xde\x65\x06\x46\x78\xab\x89\x99\x0f\x8b\xa8\x6a\xc1\x96\x3b\x2f\x42\x19\x5b\xc6\xc9\x0b\x59\x17\x8a\x03\x77\x59\xd5\x9b\x82\x72\x84\x0f\x8f\xec\xf5\x11\x6e\xaa\x08\x58\x64\x8a\x82\x6b\xe4\x4e\x92\x81\xd3\xf0\x96\x56\xa8\x8b\x07\xdb\x95\x66\x64\x5d\x28\x0e\x5c\xf7\x53\x6f\xf7\xf7\x8e\x1b\xb0\x64\xc5\x65\x06\x86\xd4\xe5\x79\x5a\xb2\x9f\x96\x84\xa7\x94\x03\x37\xfa\x03\x12\xc8\x70\x5e\x7d\x37\x43\xd6\x85\xe2\xc0\x52\x10\x32\xa1\xf1\x9f\xcc\x23\xd4\x25\xc0\x59\xbf\x30\x54\x90\x73\x8f\xc1\xdf\xf4\xb1\xab\xa9\x27\x75\x71\x02\xdf\xf9\xc0\x90\x84\x9f\x48\x29\x40\x71\x48\x29\xd4\xff\x99\x15\x04\xb5\x10\xfa\xed\xa8\x80\x53\x32\x16\x91\x37\x20\xfa\x55\xe3\x6e\x2b\xc7\x90\x58\x87\xd6\xad\xa8\x01\xbe\xe9\xaa\x21\xaa\xac\x92\xb3\x1d\xed\x19\x61\xa8\x51\x01\x82\x3b\x36\x2a\x20\x38\xde\xea\x55\x94\x3e\x28\x5c\x6d\x62\xde\x29\x7d\x2f\x73\x05\xae\x5d\xa6\x42\xfe\xe9\xd4\x5e\xd7\x25\x9f\xfa\x32\x7b\x0e\xd4\x5f\x19\x04\x07\xee\x32\x97\xd6\xd4\x0c\x01\x98\x62\x9e\x8a\x9f\x5d\xfa\xa5\xc1\x88\x4d\xfa\xa4\x9e\xa6\x3a\x4e\x5e\xef\xd2\x85\xe7\xb8\x2b\x52\x51\x28\xbf\x02\x8a\x03\xd7\xbd\xc4\x7a\xed\x31\x0c\x6f\xca\x5e\xeb\x8a\x47\x45\x50\xc7\xe7\xea\x56\x5e\xfe\x58\xdb\xe4\xd0\x26\x26\xb1\x33\xf2\x9f\x35\xba\x50\xd2\x85\xe2\xc0\x52\x50\xc1\xe2\x8e\x3f\x15\xc2\x2a\xc4\x98\x3e\xb9\x30\x97\x37\x17\x83\x29\x6f\xaa\xc0\xdb\xa0\x39\x42\x6e\x20\x9a\xa7\xd8\xe6\x62\x8d\x94\x02\x14\x87\x1a\x15\xfe\xcc\x0a\x82\x5a\x9c\xfe\x4e\x0a\xaf\x1a\x92\x6e\xaa\x6a\x38\x13\x86\x2e\xb4\x9d\x2c\xfc\x0c\x4b\xe1\xd1\x7b\x98\x7e\xb2\xde\xda\xc5\x6d\x9d\xf7\x72\xc8\xa7\x10\x94\xa7\x0f\xc5\x81\xa5\x30\x6e\x46\x21\xb5\xff\x93\x3a\x55\xb0\x78\x26\x85\xf5\x09\xe7\xb2\x47\xec\xa5\x10\x3d\x4e\xbd\xfe\x09\x0c\x85\xe4\xb6\x95\xb0\x74\xd4\xaf\x82\x10\x1c\xb8\xcb\xa2\x74\x62\xe1\x42\x57\x58\xf8\xed\xfb\x54\xca\x08\x3a\x0b\xfd\xd7\x88\x95\x5e\x93\xe6\x31\x85\x4d\x91\x3c\x50\xdb\x79\x2a\x9f\x88\xac\x0b\xc5\x81\xeb\x02\x58\x63\xfb\xd7\x26\xa6\xd6\x60\x0c\xe1\x8d\x7e\x25\xe7\x67\xf7\x9b\xb7\xfd\x44\x4a\x17\xdb\xdb\x4e\xbd\x89\x88\x0d\xe0\x3c\x44\xd6\x85\xe2\xc0\x52\x98\xfe\xda\x9d\x57\x70\xeb\xc9\xdb\xfa\x4c\x57\x61\x20\x2d\x3d\x89\xec\x34\xc1\x93\x33\xe2\x39\x05\xb9\x69\xca\xab\xda\x2c\xd8\x85\x48\x29\x40\x71\xa8\x51\xe1\xcf\xac\x20\xa8\x5d\xfe\xef\xad\x20\xdc\xc2\x93\x0d\x8b\x49\x94\xd4\x1b\xde\x4f\xe9\x3d\xb1\x7e\x2c\xc5\xfe\x58\xb6\xbe\xec\x94\xc6\x26\x7f\xb7\x91\x2c\xb1\x44\xb7\x09\x69\xab\x40\x71\xc7\xad\x20\xd7\x53\xca\x43\x49\x93\x96\x78\x91\xe3\x6d\x0c\xb5\x72\x79\xb7\x96\xba\xef\x59\x2a\xc8\x46\x10\xf1\xa6\xc9\x10\xeb\x7c\xaa\x13\x47\x56\x86\xe2\x8e\x5b\x41\x1d\x77\x1a\xbe\xd5\xfe\x10\x74\xfe\xf1\x6e\x2f\xd6\x25\x51\x24\xa5\x26\xdb\x3a\x21\xc3\x50\x16\xee\xfa\x93\x97\x58\x1c\xb6\x45\x82\xac\x0c\xc5\x05\xca\x60\x60\x60\xff\xab\xb2\xbf\xd0\x98\x9c\x98\x04\xf6\x39\x1d\x87\xd7\x7a\xa9\xc4\xe5\x13\xe4\x1d\xa7\xba\x9f\x89\x35\x0f\x30\xb8\x49\x8f\x70\x9c\xe8\x94\x41\x5a\x41\x50\x5c\xa0\xcc\xaf\xbe\xf1\x47\x48\xf6\x21\xad\x1d\xa8\xa3\xbc\x47\xad\x9d\x8a\x0c\x1a\x1c\xca\xad\xf0\xb5\x32\x6e\x12\x87\x2a\x91\x6a\x9e\x99\xdc\xcb\x51\x98\x17\x86\x6d\x9f\xc6\xaf\xfb\x61\x8d\x9d\x34\x3d\x7a\xdc\x4f\x6c\x5a\x20\xf5\xc3\xeb\x3b\x06\x9b\x62\x13\x7e\x51\x3e\x0f\x88\xcc\x45\x4f\xa4\xef\xc3\xaa\x84\x4f\xdb\x34\x71\x9d\x0d\x7e\xf2\xbf\x66\xed\x40\xbd\xda\x11\x6b\x27\x06\x6c\xed\x90\x9d\x8e\x09\x68\x1e\xc8\xbb\xfe\x1c\x7b\xe9\xd9\xda\x3d\x20\x92\x4f\xe8\xc0\x3e\xc0\x8c\x3e\xbf\x86\x2b\x75\x17\x67\xd9\xf8\xe9\xdf\xb0\x76\x30\x54\xc0\xdb\xff\xf9\x78\x29\xcb\x4c\xd9\x68\x0b\xfb\xce\xe9\xe5\x20\x31\xca\x76\x29\x0d\xe3\x99\x99\xb1\xb3\xdf\xfb\x4b\x6e\x87\x16\xaa\x3c\x12\xfb\x2b\xe7\x55\x8e\x5b\x3b\x94\x09\xa5\xe4\xe2\x89\x93\xf3\x5a\x13\x42\x9b\xdc\x07\x85\xd9\x36\xb7\x09\x35\xf4\xb3\x43\x09\x35\x89\x5e\xf5\xaa\x5a\xdc\xfa\x3b\xa7\x73\xb4\x8e\x3d\xb6\xe1\xc7\x90\xbb\x7b\x81\x45\x23\xef\x25\xf2\x5d\x1c\x16\xc5\x3d\x22\x7b\x75\x1f\x83\xc1\x03\xe0\x86\xb1\xba\xaa\xb3\x6f\xd7\xe4\x5f\x79\xdb\xe3\xd6\x8e\xcb\x72\x9a\xc3\xe3\x2d\xfa\x61\x0d\xe5\x7b\x31\x0a\xf6\xb4\xee\x36\xc1\x3c\x6b\xd8\xdc\xd8\x51\x66\x57\x82\x42\xaf\xfa\x85\x9a\xfe\x95\xb7\xf5\x3e\xf6\xd8\xf8\x7d\xb7\x0d\xdb\x51\xd2\xce\xd2\xa0\x7b\x7d\x65\x6f\x3e\x91\x4e\x39\xf6\x8b\xba\xc5\xc2\x81\x61\xdf\x27\x23\xe5\x21\x77\x3d\xfe\x9a\xb5\x03\x25\xdd\xdf\x4d\xd3\xd5\xc5\x74\x40\xef\xa7\x4f\x74\xda\x85\xad\x35\x0f\xca\x92\x22\x57\x85\x3f\xba\x75\x94\xaf\x50\x8c\xb3\x07\x9f\x20\x36\x17\x77\x47\x4e\x4f\x50\xdc\xb1\xdf\x71\xe5\x65\x96\x84\x68\x5d\xbc\xd9\x6e\xbd\xc2\x06\x6e\x9f\x6b\xdf\x50\xbd\x1b\xa7\x5c\xc0\xff\x20\x69\x62\x74\xf1\x79\x49\xf7\x04\xea\x77\x5c\x08\x0e\x3c\x9d\x4e\x5c\x5b\xdf\x4b\x27\xd6\xcd\x30\x31\x0c\x8b\x98\xcc\x51\xbc\x76\xd5\xe2\x05\xee\x61\xc6\x8d\xbb\xb2\x2a\x7d\xec\x07\xd5\x72\x49\xc8\xba\x50\x1c\xb8\xee\x66\xee\x21\xdf\x97\xc8\xe4\x94\x1b\xf5\xfc\xe2\x27\x6f\x90\x0e\xd0\x5d\xa2\x2d\xa4\x5c\x0d\x8c\xcb\xbb\x18\x7c\xf9\xec\x9b\xe4\x6e\xd4\x21\x26\x08\x2e\x50\x0a\x03\xf6\xaf\x5f\xae\x82\xbe\x08\x7a\xcc\x75\xf1\xf9\x63\x0e\xa6\xe5\xfe\xac\x55\xdd\xb5\x57\xa3\xbb\xe6\x3a\x28\x3e\x90\xbc\x5c\x4a\x8d\x9f\x3f\x8f\xb4\x76\xa0\xb8\x40\x29\xdc\x7f\xac\x9d\x98\x3f\xb1\x76\xa0\x46\x93\xdf\x09\x81\xdd\xa0\x3d\xb7\x36\x81\x9e\x24\xe1\xb1\xbb\x9b\x88\xde\xf7\x35\x2b\x01\xf8\x58\x81\x78\xab\xdf\xdb\xda\xb5\x16\xd5\xf3\x38\x01\xc8\x06\x80\xe2\xc0\x42\x68\xd0\x2e\x66\xa4\xc7\xf1\x7e\xe6\x13\x1b\x2d\x6f\x34\xd7\x6c\x13\xd8\x7f\xa3\x53\xa5\xab\x9c\xf2\xfe\xdd\x47\x05\x9e\xb5\x66\xaa\xc8\xba\x50\x1c\xb8\xc3\x0e\x13\xb5\x2c\xb2\xef\x37\x1d\xd6\x49\x37\xdd\xf1\x3f\x3d\x6c\xfd\x4a\x46\x58\xaa\xe9\x36\xc5\xca\x20\x86\x67\xd1\x8e\xca\xad\x9b\xc8\xba\x50\x1c\xb8\xae\x8d\x9f\x77\x49\x37\xe9\x58\xa9\x20\xe9\x6d\xd5\xa7\x70\x36\x79\x7c\x8c\xf5\xcb\xe9\x3a\xbb\xb3\xf2\xb7\xb8\x1e\x9b\x4c\x3d\xb8\x86\xac\x0b\xc5\x81\x85\xa0\x71\x6e\x3f\x72\x95\xf5\x50\x07\x76\xfe\x71\x8b\xfd\xfe\xe9\x29\x26\x9b\xe2\x34\xab\x64\xf9\x5a\x5d\xab\x41\x84\xaf\x07\x17\x02\x69\xed\x40\x71\xff\x15\xc2\x3f\x73\x08\xb4\x12\xa0\x06\xf8\xdf\x29\x41\xdd\x98\x59\xf4\x95\x61\x39\x6b\x49\xb9\x75\x70\xb9\x69\x6d\x9d\xa4\xa2\xf6\xfe\x09\x8c\x9f\x6b\xd7\xbe\x0b\xbc\xab\xf3\xe5\x56\x46\xb6\x00\x14\x77\xec\x94\x0f\x5f\xad\x6e\xa8\x16\x30\x33\x8b\x27\x3e\x72\xc8\x76\xf6\x3d\x43\xf4\xf0\xcd\xd8\xdb\xd5\x1b\xb3\x94\x7d\xbc\xde\x2b\x49\x30\xd4\x29\x1f\x08\xee\xd8\x7e\xbe\xeb\x3c\x4d\x11\x9b\x79\x13\xcd\x02\xd6\xea\x23\x96\xd2\x1b\xbd\x5f\xaf\x7b\xee\x5b\x62\x6f\xe6\x9c\x7e\xb0\xff\x32\xe6\xbd\x07\x6a\x3f\x0f\xc1\x81\xeb\x5a\xb5\x8b\x49\x85\x9e\xe3\x8d\xf9\xaa\xb8\x8d\x78\x7c\x51\x47\xc9\x74\x41\x6b\xf9\x8c\x57\x6c\x56\x02\xec\x94\xc9\xa5\xdb\x87\xa8\x73\x82\x50\x1c\x58\x09\x18\x13\xb6\xd1\x33\x98\x27\xe9\x4e\x54\x36\xf3\x2b\xe3\x9d\x91\xaa\x33\xa3\x4c\x97\xcb\x49\x17\x0e\x7a\x2a\x7c\x9d\x56\x4c\x92\x02\xb9\x72\x87\xe2\xfe\xab\x84\xff\xcc\xeb\xd0\x52\x80\x9a\x74\x7f\x27\x85\x20\x27\x5b\x51\xa1\x73\x99\xb9\x58\x07\x61\xcd\xfc\x8f\xa6\x39\x62\x3c\xd6\xdd\xf3\xbe\x95\x0b\xa7\xd4\x14\xae\x0e\xe0\x8c\xd9\x23\x9b\x00\x8a\x03\x4b\x41\x68\xe6\x20\xdd\x73\xe9\xe7\xd7\x83\xa2\x88\xe7\x88\xab\xd8\x5a\xb4\x3b\x81\x85\x31\xbb\xf6\xd1\x83\x61\x3c\x79\xb7\x67\x45\x95\x90\x75\xa1\x38\x70\x97\x15\xc2\xd5\xae\x8e\x9d\x4a\x2d\xec\x0e\x2e\x74\x30\x31\x29\x9b\xb9\x76\x9a\xdb\xa1\xd9\xe2\x3b\x30\xe0\x67\x1c\xec\x78\x55\xdd\x05\x59\x17\x8a\x3b\x76\x90\x4c\x4a\x67\xcd\x81\xe3\x4e\xa2\xf2\x78\xdd\xcf\x24\xac\x37\x71\x45\x62\x27\x99\x7a\x36\xd2\x09\x2c\x4f\x4a\xf0\x9d\x86\x87\x35\xa2\x0e\x92\x41\x70\x60\x29\x9c\x72\x77\xc0\xa0\xc7\x6a\x15\x7a\xf5\xd6\xc4\x51\x5d\x77\xf1\x6c\x79\x04\x27\xe1\x2a\xbe\xdb\x8f\x49\xec\xb9\x0b\xda\x3e\x14\x3a\x48\x29\x40\x71\x48\x29\xfc\xb3\xd6\x82\x96\x02\xd4\x42\xe8\x77\x52\x90\xf3\xe8\xee\x43\x3c\x16\x90\x8d\xf3\x26\xad\xbe\x53\xcf\x29\xec\x80\x43\xa0\xac\x66\x27\x2a\xce\x21\x15\xe9\x20\x36\x55\x93\x80\x6c\x02\x28\x0e\x2c\x05\xdd\x8b\x98\x0d\x45\x26\x2f\x24\x3e\xed\x7c\x57\x7b\x95\x62\xd4\xcb\x62\x68\x2f\x7d\x2b\x2b\x63\x8e\xb2\x1f\x6e\xd0\x81\x1d\x09\x20\xeb\x42\x71\xe0\x2e\xf3\x0c\x50\x62\x12\x7e\x7f\x41\x58\xcd\xba\xd2\x2a\xc0\xeb\x7c\xb7\xf7\xb9\xb7\x78\x92\x24\xe9\x82\x02\x11\x66\xfa\x8b\x84\x78\xaf\x90\x75\xa1\x38\x70\xdd\x38\x44\xec\x65\x11\xd9\x8e\xfc\x67\xce\xa7\xce\x7d\x13\x11\xb2\x60\x51\xcb\xaa\x62\x79\xcb\x32\xa7\x10\x93\xe4\x6c\x9b\x7d\x05\x25\x5d\x28\x0e\x2c\x85\x0f\x31\x89\xef\x59\xd2\xc9\x32\x04\xad\x48\xb4\x3d\x06\xac\xae\xb5\xee\xad\xbd\x6f\x08\x8b\xf9\x9c\xdb\x40\x20\x48\x63\xc2\xde\x8b\x94\x02\x14\x87\x1a\x15\xfe\xcc\xda\x81\x5a\x9c\xfe\xf6\x20\x39\xcd\xf6\xdb\x2e\xc3\x1d\xe1\x81\xbe\xd1\x5d\x4a\x05\x79\xf7\xa0\xe0\x08\x97\x6f\x57\x5b\xa9\x63\xea\x03\x7a\x81\xd4\x0d\x47\xd4\xe9\x16\x08\x0e\x2c\x05\x12\x56\x55\x36\xfa\x82\xdb\x2a\x9e\x89\x75\xf5\x9b\x4a\x1f\xf5\x1d\x1f\x89\x61\x45\xd3\x9e\x0b\x5e\x9d\x49\xfb\x0c\x23\x3b\x1b\x88\xac\x0b\xc5\x81\xbb\x6c\xa8\x36\xd3\x69\xd0\xea\xdb\xac\xf3\xb3\x3b\x2a\x12\xec\x77\xd6\x4a\x3f\xbc\xa2\xf8\x50\x56\xc6\x3d\xb9\x3a\xbd\x47\x49\xc6\x84\x3a\x48\x06\xc5\x81\xeb\x96\x1e\x72\xbe\x09\xa5\x32\xf7\xd3\x95\x99\x1b\xf5\xe3\x0b\x39\x3d\xcb\x59\xf7\x51\xc2\x3c\x82\x9c\xea\x5e\xc5\x3b\x9a\xf0\xcb\x70\x64\x5d\x28\x0e\x2c\x05\xff\x0f\xbd\x06\x0f\x09\x5e\xfb\xe5\x27\x8f\x36\xb2\x72\x5f\x8b\x7b\xc2\xd8\x3a\x8d\xb7\x1a\x57\x64\x44\xe3\x94\xe5\xd6\xbe\xf4\x09\x29\x05\x28\x0e\x35\x2a\x78\xff\x91\xb5\x03\xb5\xcb\xff\xbd\xb5\x43\xa1\x2d\xcb\xf5\x9c\xf8\x42\x02\x05\x71\x92\x8c\xcc\xf0\xc4\x36\x37\xd6\x75\x86\x1e\xff\xde\xc9\xd2\x0a\x87\xaa\x7b\xee\x79\xc6\xa8\xb3\x38\x10\xdc\x71\x6b\xa7\xb3\x57\x99\xf5\x63\x53\x44\xca\x53\x0e\x05\x21\x8e\x98\x1a\xa3\x1d\xef\xdd\xd9\xdb\xfa\x0f\x0e\x6f\x55\x7d\x90\x66\x3b\xb1\x24\x8f\xac\x0c\xc5\x1d\xb7\x76\x72\x53\xc8\xe9\x95\x6e\xbc\x63\x79\xf3\x11\x7e\xf2\x7b\x4c\xa4\xa2\x42\xfb\xf5\x0f\x70\xd1\xac\x03\xb5\xd5\xd7\x53\x4b\x39\x64\x93\xc8\xca\x50\x5c\xa0\x0c\x06\xc6\xbf\x5d\xb9\xab\xc9\xa7\xd7\xb2\x34\x48\xea\xc8\x79\x3f\x5f\xe6\x4f\xd3\x1c\x65\x0a\xaf\xfa\x32\xf4\x85\xba\x68\xa7\x11\x57\xe4\x3e\x77\xa1\x35\xd2\xda\x81\xe2\x02\x65\x70\x41\xd6\x0e\xd4\xa7\xd7\x47\xad\x1d\x69\x0b\xd1\x8f\x71\x57\xbe\xdc\x4c\xd2\x8b\x27\x8e\x0e\x3b\x45\xed\x6b\x34\xd4\x8a\xab\x69\x67\x6e\x18\xf0\x59\x9d\x3c\x40\x4d\xf8\x08\x2a\x01\xbb\x8d\x17\x5c\xb2\x49\x77\x48\x44\x31\x34\x57\x4b\x23\x28\xb4\x11\x32\x83\xe7\xa0\xe7\x1a\xf0\xb9\x9f\x67\x74\x5e\xe4\x7f\xee\xd4\x0e\xd4\xab\x1d\xb1\x76\xba\xc0\xd6\x8e\x69\xc8\xa8\xa7\x04\x2f\xd9\x16\x75\x4a\x65\xb2\xdd\x78\xc1\x4a\x29\x15\x76\x40\x1d\xf7\x73\x79\x57\xaf\x8c\xaf\x29\x18\xa2\x07\x7f\xc3\xda\x91\x38\x66\xed\x70\x60\xbe\x24\x17\x1d\xf7\xc3\x2f\xb7\x3b\x88\xbe\x5f\x31\x99\x3b\x5b\xc3\x70\x5a\xe0\x40\xa0\x80\xe9\xda\x73\x12\x1b\x69\x41\xfa\xbf\x72\xa0\xe4\xb8\xb5\xf3\x74\xef\xd2\xe1\xf6\x4a\xa3\x69\xa9\xe9\x88\x77\x73\xb1\x8f\x76\x7d\xd0\xf3\x1f\x2a\x9f\x6e\x70\xd2\x16\x56\x3b\x69\x2d\xf6\xee\xfe\x95\xe3\x33\xc7\xad\x1d\xc5\x47\xdf\xc9\x6a\x9c\x04\xee\x39\x5c\xda\x57\x38\xd7\x39\x76\x9e\x20\xc3\x54\x3e\xda\x8e\x88\x20\xea\x69\xc4\xe3\xd7\x6a\x84\xcd\x7f\xe5\x6d\x8f\x5b\x3b\xaf\x1e\xe2\x0b\xbd\x23\x52\xba\x4d\xad\xf2\xf3\x32\xf5\xa7\x8d\x53\x18\xa3\x63\x44\x27\x14\x03\x1b\xb8\x28\xb9\xbe\xc9\x13\xb2\x7c\xfa\x2b\x6f\x7b\xdc\xda\x69\xac\x6d\xa3\xa0\xc3\x38\x3b\xeb\xac\xd4\x5b\xcd\xe5\xa8\x74\x4a\x79\xd8\x26\x89\xb9\xe7\xb1\xf3\x0c\x71\x30\x1b\xde\xd3\x18\xfb\xbf\x66\xed\x40\x49\xf7\x77\xd3\x74\x8f\x5e\xf4\x7c\x6a\xed\x52\x19\xb3\x91\x73\x78\xe1\x62\xa7\xaf\x55\x8e\x75\xe6\x55\x89\xf0\x2f\x8f\x99\x52\x84\x6c\x9a\xfb\xb8\x91\xd3\x13\x14\x07\x9e\xa6\x39\xa7\xa6\x5d\x4f\x4e\xf5\x56\x04\x70\xa4\x4a\xf5\xf2\xf0\x72\xcb\x24\xcd\xd5\x66\xd5\x8f\x70\x9a\x06\xbd\xa0\x1d\x78\x31\x8e\xfa\x31\x0e\x8a\x03\x4f\xa7\x8f\x5f\x0b\x60\x91\xc9\x19\x88\xa7\x9e\x4e\x2b\xcc\xc6\xa0\x49\x19\x7d\xac\xd2\x90\x85\xbb\xe1\xb8\x4a\x7d\x3d\xa2\xb9\xdf\x27\x19\x59\x17\x8a\x03\xd7\xcd\x60\xb3\xea\xea\xdf\x95\x17\xd8\x08\xf2\x55\x34\x46\x50\x29\x96\x5d\x72\x6a\x32\x99\x1a\xd5\x22\x52\x9f\xb9\xdc\x7e\xd3\x77\x00\x59\x17\x8a\x0b\x94\xc2\xc0\xfd\xd7\x21\x10\x9d\x35\xd6\x77\x1d\xfe\x4e\xea\xb2\xcc\xe9\x89\x96\x3f\x1c\x42\x13\x43\xee\x11\x04\x66\x84\x29\xd2\x44\xc5\xe5\xa6\x15\x5e\x41\x5a\x3b\x50\x5c\xa0\x14\x86\xbf\x3f\x22\xf8\xd7\x78\x05\xbd\x5e\x83\x1a\x4d\x7e\x27\x04\x6c\x35\x2e\xcc\x8e\x11\xe5\x1a\x9e\x9c\xe7\x53\xd2\x22\x01\x15\xa4\x14\x7e\x93\x5f\x82\xe4\xb7\x2f\xda\xf8\xf7\x66\x5f\x4a\x1b\x41\x36\x00\x14\x07\x16\x82\xfe\x06\x6e\xec\x42\x95\x97\xa4\x53\xf3\xb9\x5d\xcf\x13\xe2\xa1\x3a\x2c\x7a\x15\x43\x37\x71\x5f\x5a\x3a\x4c\x6e\x8c\xc0\x8b\x51\xdf\x54\x40\x71\xe0\x0e\xd3\x75\x7d\x17\xf8\x9a\x6e\x9e\xc4\x2c\xbf\xce\x56\x6d\x45\xc5\x65\x2a\x8d\xdf\xdf\x9f\x08\xbf\x29\x56\xf3\xe1\xe5\x21\x2a\x4c\x32\xd4\x96\x00\x82\x3b\xb6\x3b\x54\x6a\x1e\xe6\xa7\xba\xf0\xf6\xce\xe6\x34\xb9\x83\xeb\x5b\x6a\x81\xa7\x5d\xe9\xbd\x82\x17\x4e\xba\xfa\xdc\xe2\x0c\x3a\x93\x83\x3a\xbe\x05\xc5\x81\x85\xb0\x4a\x35\x71\xa1\x5e\x67\xb0\x69\x63\xe6\x75\xc5\x4b\x0b\x9d\xcd\x3b\x3e\x6e\x3d\x8f\x8a\x59\xc6\x96\x05\x44\xb7\x63\x3e\xcc\xb8\x23\xad\x1d\x28\xee\xbf\x42\xf8\x67\x0e\x81\x56\x02\xd4\x00\xff\x3b\x25\x2c\x39\xca\xb5\x5f\xdd\xba\xf6\x42\xfb\x99\x64\x53\x52\x1a\x0d\x31\xb1\x1f\xfb\x87\xf7\x94\x97\x17\x07\x32\x05\x3e\x89\xe0\x93\xa0\x3e\xe5\x83\xe2\x8e\x9d\xcf\x87\x71\x16\x76\xf6\x4d\x8a\xc4\xe1\x63\x2e\x0c\x7e\x07\xec\x5d\xf5\xba\x6e\x55\x3d\x09\x9a\x6c\x92\x19\xfa\x98\xd9\x7d\x2d\x1b\x75\x3e\x1f\x82\x03\xf7\x18\x85\x06\x6f\xd6\xc0\xb3\xb1\x9c\x14\xc9\xc1\xd0\x9f\x4a\xa5\x83\x09\xb7\x89\x25\x92\x74\x1f\x9c\xdf\x57\x0e\x25\x6b\xb7\x8f\xf3\x45\xd6\x85\xe2\xc0\x75\x35\xb8\xde\x0b\x10\xab\xcb\x7f\xe9\xe2\x7e\xd6\xa4\xf0\x4a\xa8\x2f\x36\x86\xa1\x5b\xa4\x63\xd9\x8e\x24\xc6\x9d\x06\xdf\xd3\x19\xb5\x89\x83\xe2\xc0\x4a\xe8\xad\x1f\x1e\xdb\x33\x38\x61\x67\x37\xe7\x67\xbc\x1a\x8a\x45\xf4\xd1\x34\x88\x92\x52\x30\xea\xfd\x54\x17\x2b\x77\x1c\xfc\x27\x3e\x72\xe5\x0e\xc5\xfd\x57\x09\xff\x99\xd7\xa1\xa5\x00\x35\xe9\xfe\x4e\x0a\xa9\x99\xd6\xb2\x83\xbe\xf7\xc7\x1e\x74\xda\xde\x0e\xc0\xc0\x3b\x49\xd6\xca\xfc\xdc\x7f\x8f\xa0\x25\x3f\xb5\x21\x5c\xa8\x2b\x95\x06\xd9\x04\x50\x1c\x58\x0a\x1f\xcd\x31\xb2\x53\x15\x5e\xf5\x38\x99\x2b\xc6\x9e\x2b\x1c\xf6\x6a\x29\x9e\x7b\xed\xd3\x77\x13\x20\x33\x0c\xd8\x2f\xd2\x30\x43\xfd\xde\x0d\xc5\x81\xbb\x4c\x4c\x87\xc3\x28\x46\x85\xf5\xc0\xb3\xe8\x5c\x8a\x1f\x42\xdc\x5a\x25\x53\x86\x1d\xd3\x24\x59\x6b\x66\x90\xf1\x9b\xcb\xbb\xa0\x37\xc8\xba\x50\x1c\xb8\x6e\xc4\xdb\x1f\x43\x27\xb7\x30\x31\x1f\xf7\x3b\x8c\x78\x0e\x13\xd2\xe5\x2a\x97\xdc\xc5\x26\xa0\x2c\x39\xa9\x5f\x47\x6b\x8d\xef\x60\x82\xac\x0b\xc5\x81\xa5\x40\x42\x61\x11\xeb\x76\x3e\xcc\x67\x73\x7c\x96\x3b\xdb\xf4\x5a\x5e\xbb\x4c\x61\x62\x30\xd6\x46\x29\xf6\x39\x79\xbd\xb8\x64\xff\x16\xa4\x14\xa0\x38\xa4\x14\x24\xfe\xcc\xda\x81\x5a\x08\xfd\x4e\x0a\xf5\xd1\xa4\x2d\x7e\xa9\xe5\x9f\x1f\x17\xa4\x26\xe7\x07\x00\xcd\x0d\x4b\x85\xa7\xef\x54\x78\x0d\x1b\x9c\xfc\x30\x10\x93\xf5\x02\x35\xf1\x42\x71\x60\x29\x70\xec\x2c\x12\x5a\x25\x87\xdb\xb1\xad\xd0\x3a\x6b\x31\xd9\xe0\x3d\xbe\xc2\x6a\xa2\x5e\x4b\x3a\x32\xea\xce\x18\xb0\x45\xc9\x84\xfa\x0d\x08\x8a\x3b\xb6\xef\x3e\x9f\x63\xf1\x40\xd6\xaa\x53\xff\x14\xd7\xdb\xde\x48\x0c\xd8\x8a\x8e\x76\x40\x0c\x71\x9c\xa0\x77\x73\x8e\xda\x2a\x2e\xfd\x0f\xd4\xbe\x1b\x82\x03\xd7\x6d\xe4\x40\xec\x3d\x19\x15\xdd\x48\x53\x6e\x88\xda\xab\x52\xff\xbe\x7e\xe7\x71\xaf\xef\x2d\x62\x26\x91\xa6\x88\x12\xfb\x6f\x1f\x2a\x90\x75\xa1\x38\xb0\x14\xce\xdb\xb3\x1d\x4e\x35\xcf\xa7\x2e\x88\xda\xe9\xc0\xc4\x94\xe9\xfb\xf9\xb5\xab\x79\xd3\x72\xe7\xbe\x36\x38\x94\x64\x71\x33\x2f\x23\xa5\x00\xc5\xa1\x46\x85\x3f\xb3\x76\xa0\x16\xa7\xbf\x93\xc2\xa9\xd7\x51\x58\xfc\x1d\xd2\xf1\x9a\xea\x25\x7b\x02\xef\x47\x4b\x3c\x99\x7a\x08\xd8\x3f\x7e\x3a\x29\x95\x26\x38\x78\x75\xa7\x44\x1f\xd9\x04\x50\x1c\x58\x0a\x4e\xdb\xcd\x3a\x55\xd5\x4a\xcf\xd3\xd3\x5b\x4c\x69\x69\xd3\x89\x09\x6a\x9d\x55\xa8\x60\x64\x2d\x78\x4a\x45\xf6\x61\xee\x5d\x12\xc8\xba\x50\x1c\xb8\xcb\x12\x2f\xe6\xa6\x9b\x37\xe3\x8b\xe3\xfa\xe3\x3f\x71\xe7\x94\x7a\xc6\x81\x4f\x36\xc3\xd1\x2b\x40\xcd\xe3\x6f\x64\x51\x85\x49\x29\x8f\xac\x0b\xc5\x81\xeb\x76\xc5\x7d\x8e\x38\xd3\x1c\xc7\x4d\xef\xfc\xea\x49\x4d\xf8\x66\xfd\xce\x87\x88\x3b\xc5\x32\x3d\x49\x04\xf5\xfd\x96\xc3\xb0\x0d\xd4\x31\x54\x28\x0e\x2c\x05\xf9\x14\x85\x02\x22\xf9\x94\x3c\xc3\xc8\x2a\x39\x8f\xc4\xcd\xc3\xaa\xcc\x11\x5e\x73\x95\xfb\x0a\xf9\x17\xdb\x93\x4a\x9f\x7a\xa3\xce\xf2\x41\x71\xa8\x51\xe1\xcf\xac\x1d\xa8\x5d\xfe\xef\xad\x9d\x7e\x11\x81\x10\xdf\x1e\x13\xa7\xb3\x36\x7c\x9e\x3f\x34\xa2\x5a\xbe\xea\xec\x73\x14\x9c\xa1\xd0\xe6\x2c\xb9\x3c\xa9\xe9\x59\x07\x20\x6d\x12\x28\xee\xb8\xb5\x13\x13\x15\xa8\xb7\x60\x5e\x42\xfe\x95\x81\x39\x89\xd3\xbf\x4d\x3a\xe5\xe7\xa4\x58\xf9\x35\x8b\x47\xd6\x84\xde\x6e\xd7\x83\xf1\x1a\x91\x95\xa1\xb8\xe3\xd6\xce\xfb\x8e\xd3\xcf\xf1\x4b\x9c\x3c\xfa\xb0\xd8\x2f\xb0\xd8\xbc\x01\x8c\xce\x72\xd7\x9c\x19\x08\xf0\xe8\x94\x8f\xe4\xe8\xb5\x4d\x19\x44\x56\x86\xe2\x02\x65\x30\x30\xe8\xfe\x7d\x86\x29\xf9\x74\x3c\x7e\x9c\x95\x31\x5c\x57\xa8\x5a\x0c\x50\xf6\x59\x7a\x64\xf5\xc4\xce\x4b\x80\xb9\x35\x5e\xcf\x0b\x5b\x34\xad\x0c\x69\xed\x40\x71\xbf\x2a\xff\xea\xbc\xff\xb3\x76\xa0\xae\xca\x3b\x6a\xed\x90\x87\x0f\x6c\xcc\xd3\x8a\xca\x9b\x39\x0a\xdf\xae\xd2\x5d\xe8\xc0\xc7\x97\x48\xe2\x7f\x36\x13\x2e\x69\x72\x7f\xe0\xed\x6e\xff\xfd\x23\xa8\x40\xe5\x6b\x83\x05\x81\x1b\xa6\xe6\x63\xc9\xcb\x8e\x73\xaf\x26\x4d\x24\x26\x45\x0f\x61\xde\xcd\x35\x57\x83\x7f\xfa\xe4\xd6\x3c\xfe\x5f\xb3\x76\xa0\x5e\xed\x88\xb5\x43\x44\x06\xda\x88\xfb\x0f\x8d\x2c\x07\xde\xab\x55\xd1\x8d\x33\x73\x58\xa6\x9c\x89\xc6\xe0\x39\xe1\xb6\x44\x7c\x09\x93\xd8\xb7\x38\x4b\x4e\xe8\x69\xe1\xdf\xb0\x76\xfc\x8f\x59\x3b\x5d\x89\x23\x7d\x98\xdf\x4e\xaa\x3b\x7e\xb1\xbd\xa8\xf7\xaa\x23\x19\xff\x6c\x4c\x83\x57\x14\xcb\x54\xdc\x90\x46\x00\x8f\xf8\x45\xd8\x5f\x39\x50\x72\xf9\x98\xeb\x20\x43\x6b\x52\xde\xec\x7a\xda\x7c\xbd\xa0\x33\x77\xea\xb2\xba\xe9\x3e\x6b\x2e\x93\x5d\xaa\x00\x9e\xeb\xdc\xf7\xe7\x4a\x69\xb7\xcd\xfe\xca\xf1\x99\xe3\xd6\x4e\x56\x18\xe7\xe6\x3a\x46\x57\x9c\xb2\x43\x86\xf5\xe6\x97\x8d\x8e\xe7\x67\xe1\x2e\x9c\xfd\xf3\x2c\xaa\xa5\xfc\x4f\x3b\x68\x68\x5e\xfd\x95\xb7\x35\x3c\xf6\x58\xb5\x43\x21\x71\x72\x02\xac\xfb\x52\x06\x6e\xc5\xfd\x8b\xe6\x72\xaf\xeb\x14\x9d\x7a\x37\xdf\x7a\xfb\x24\x15\xf6\x55\x99\xec\x69\xfc\x95\xb7\x3d\x6e\xed\xbc\x53\xf0\x35\x74\x89\x97\xd0\x61\xbb\x0d\xa7\x78\xb1\x79\x6e\x5b\x21\x60\x57\x69\x28\x29\x28\x26\xdd\xdb\xe4\xe1\x24\x29\x8f\xed\x5f\xb3\x76\xa0\xa4\xfb\xbb\x69\x9a\x23\x85\x43\x5b\x66\xc7\x3b\x88\x13\x6f\x7b\x58\x4c\xba\xf7\x9b\x26\x77\xd8\x4f\xbd\x0f\x61\xf7\x1b\xf6\x2a\xd6\xc6\x9e\xa6\xa1\xce\x17\x43\x71\xe0\x69\x7a\xf6\x80\x63\x7a\xad\xa1\x8b\x67\x47\xb1\xb9\x48\x46\x8e\x8d\xb8\xc5\xd7\x11\x16\x5e\x66\xd2\x98\xba\x63\xf1\xb4\xeb\xd3\x2e\xea\xa7\x74\x28\x0e\x3c\x9d\x06\x32\x90\x8d\x37\xbe\x75\x08\x89\x0a\xdf\x3f\x83\xa9\x5c\xe3\x26\xc1\x8d\x93\x62\x17\xe9\x75\xf9\xdd\x7b\xb7\x1f\x16\xab\xb1\xa8\x8b\x43\xa0\x38\x70\x5d\x41\xaa\x54\xf8\xb6\xf8\x23\x23\x99\x2b\xdd\x0f\x1e\x5c\xa8\x1d\xbe\xac\xee\xfe\x92\x32\x4d\x8b\x67\xe3\xf5\x88\x4e\x80\x7e\x66\x07\xb2\x2e\x14\xf7\x6b\x3a\xfd\xd7\x4f\xf4\xb2\x91\xd8\xed\x83\x16\x31\x37\x16\xed\xa8\x42\x1f\x48\x45\x73\x9a\x35\x85\xdf\x9c\xda\x39\xe7\x72\x9a\x48\x62\xef\x8e\x46\x33\xd2\xda\x81\xe2\xfe\xfb\x9d\xf5\xaf\xf1\x0a\x7a\xbd\x06\x35\x9a\xfc\x4e\x08\x57\x49\xa9\x32\x97\x55\xfb\xd9\x43\xcd\x71\x67\x31\xad\x13\x4f\xf0\x93\x39\xd2\x1f\x46\x4b\xd3\x1a\x7c\x98\x65\xf5\x49\x7f\x80\x3a\xbe\x05\xc5\x81\x85\x60\x0f\xb8\x73\x45\x0e\x5c\x95\x27\xaa\x1d\x59\xed\x0c\xb3\x37\x2b\x94\xba\xa8\xcf\x79\x90\xb2\x34\x32\x20\xab\xd5\x34\x3c\x6d\x8c\xac\x0b\xc5\x81\x3b\xac\x29\xc8\x0e\x5b\x49\xc8\x33\x94\x0b\xb8\x73\x51\x9f\x64\x86\x97\xcb\xe7\xa7\x37\x9b\x61\x0a\x3f\x16\xc6\xfd\xcf\x25\xee\xc3\x24\xc8\xba\x50\x1c\xb8\xee\x4c\xc0\x63\x23\x85\xa6\x91\xb6\x34\xa3\xd5\xa1\x47\x6a\x6d\xd8\xb7\xea\xcf\x6e\xf6\xef\xf5\x18\xda\x13\xc7\x34\x16\xbf\x2b\xf9\x84\xac\x0b\xc5\x81\x85\x10\x99\xb4\x71\xd5\x89\xf9\xab\x8e\x81\x68\x88\xe8\x61\xf9\x8f\x8a\xcc\x28\x66\xcf\xf7\x0c\xe1\xf8\xc9\xa5\x29\x15\x06\x57\x47\x8b\x90\xd6\x0e\x14\x87\xba\x9b\xe7\x8f\xac\x1d\xa8\x01\xfe\x77\x4a\x80\x85\x1b\xe7\xfc\x78\x8c\x08\xe1\x30\x72\x8a\xa1\x20\xdd\x62\x1e\xef\x56\xba\xa2\xd3\xb4\x5d\x36\x4f\xd0\x6a\x12\x14\x74\x25\x17\xd9\x02\x50\x1c\x58\x09\xf5\x64\x0e\x9d\x0b\xcf\x79\x6d\x4e\xd7\xac\x08\x17\xd4\x8e\x7b\xe9\xbe\x79\xd7\x29\x49\xb2\x73\x60\x90\xc2\x3f\xb8\x57\x83\x8d\x3a\x0f\x05\xc5\x1d\xfb\x20\x6b\xb8\x53\xfc\x87\x6e\x7a\xf4\x89\x8b\xaa\x92\x02\xe2\xd8\xf9\xd7\x73\x6e\xe4\xd6\x11\xb1\xd2\x36\xbf\x31\x10\x24\xd1\xce\xd8\x43\x7d\x90\x05\xc1\x81\xeb\x26\x3d\x2d\xb4\xc3\xa2\xa9\x9e\xf6\x52\xa5\x67\xfe\xf9\xd1\xe9\xda\xb6\xcc\xb7\x87\x70\x8a\xf7\x40\xeb\x6a\x36\xae\x7b\x4e\x84\x03\xb2\x2e\x14\x07\x56\x42\xd4\x0b\x27\x0e\x2e\x2e\xd5\x5b\xaa\x7b\xfd\x99\x05\x5b\xfe\x18\xa2\x3e\xa9\x85\x87\x5e\xa3\x89\x40\x4e\x69\xb7\xbb\xde\x1d\x3c\xe4\xca\x1d\x8a\x43\xdd\xc2\x71\xf9\x8f\x36\x71\x50\x93\xee\xef\xa4\xb0\xd5\xfe\xf3\xf6\xb6\x27\x42\x61\xe5\xc5\x34\xc2\x6a\x6c\x47\x7d\x4a\xd0\x5d\x67\xb7\xd4\x78\xfa\xb6\xbf\xee\x61\xea\x37\xdf\xeb\xc8\x26\x80\xe2\xc0\x52\x48\xf8\x56\xa3\x15\xae\xcb\x24\x9f\x7d\x6f\x8d\x0c\xcf\x4a\x2e\xaf\x83\x54\x8e\xde\x26\x77\x4d\x94\x35\x51\x96\x83\x75\xf1\x32\xea\xda\x23\x28\x0e\xdc\x65\xe1\x73\x4f\x70\xf7\xaf\x9c\xf6\x7a\x6b\xbf\xf8\x81\xb0\x22\x45\xd6\xa6\x94\xa6\xba\x9f\xdf\xdd\x75\xf0\xdd\x0d\xd5\xd8\x9b\xd1\xc3\xc8\xba\x50\xdc\xb1\x0b\xe4\xde\x99\xe3\xb8\xb2\x06\xf6\x50\xfa\x74\xc6\x7e\x95\x52\xbc\xbb\x14\x19\x21\x7f\xe3\x33\x7b\x0c\x6d\x56\x3a\x75\xf8\x15\x0f\x22\xd4\xa7\x22\x10\x1c\x58\x0a\x24\x78\x29\xf3\x17\xe2\x18\x9f\x51\x5b\x4a\x2d\xa7\x6b\x5e\x98\x8f\x89\x5f\xb8\x5a\x7c\x33\x52\xfd\x5b\x44\x7e\xaa\x88\x4f\x67\x1e\xca\xda\x81\xe0\x50\xb7\x70\xfc\x99\xb5\x03\xb5\x10\xfa\x9d\x14\x66\xe2\xdf\x31\x9c\xd4\x3e\xad\x49\x32\x3e\x2a\xb1\x53\xb6\xa5\x91\xbf\x2b\x2a\x1f\x1d\x72\x8b\x08\xd6\x2d\x53\xa1\x9c\x33\xdc\x86\x1a\x17\x21\x38\xb0\x14\x46\xf9\xfc\x4c\xb2\xde\x27\x7e\xdb\x38\x7b\x4d\x4b\x78\xe4\x39\x29\x5b\x70\xed\x14\x59\x4f\xe2\x47\x66\x22\x2a\x83\xb4\xd2\x3c\x94\x14\xa0\x38\x70\x97\x71\x28\x68\xb1\xf9\xe1\x0c\x57\xc8\x56\xc7\xb2\xc7\xa8\xce\x2e\x10\xb0\x90\x6b\x90\xb1\xf0\xda\x75\xd9\x2a\xf0\x4e\x2f\xa7\xb9\xa1\x16\x36\x10\xdc\x31\xeb\xff\x49\x91\x98\x8d\xe4\xed\x27\x75\x72\x6c\x41\x9a\x69\x3b\x37\x4f\xa5\xd2\x93\x7d\xa8\xff\xb6\x23\x7a\x43\xc5\x80\xaf\xf5\xc3\x0e\xca\xfa\x87\xe0\xc0\x52\x30\x4a\x30\x19\xf7\x99\x7e\xb6\xed\x48\xa0\x4b\xf5\x65\x46\x3c\xc5\x80\x05\x37\xa1\xf6\x62\x6a\xbb\x31\xf1\xc5\x00\xe2\xb0\x18\x49\xa4\x14\xa0\x38\xd4\xa8\x60\xf8\x47\x52\x80\x5a\x9c\xfe\x4e\x0a\x98\xb8\x73\x87\x76\x23\x5d\x5d\x03\x5f\xf4\x6e\x11\xea\xd0\xdc\xf7\x29\x7a\xb1\x13\xfe\xe8\x46\xeb\xdc\xb2\x9c\x31\x5d\x8a\x45\x2c\xea\x1b\x6b\x08\x0e\x2c\x05\xfa\x4b\xde\x1a\x75\xf8\x63\xce\x58\x41\xe7\x9c\x5a\x12\x12\xed\x22\xaf\xdd\x36\xcf\x8c\xea\xb5\x49\xf8\xf0\x45\x1a\x27\x9b\xe0\xff\xae\x07\x84\xe0\x8e\x49\xa1\x92\x91\xeb\x82\xdb\x54\xa2\x56\x1b\x3e\x01\x27\x95\xd4\x00\xa5\xcc\x41\xb7\x67\xb3\x64\x20\xab\xa6\xea\x4b\x5a\x71\x3a\xd4\x35\x4d\x50\x1c\xb8\xee\x49\xc4\xf2\x5d\x53\x39\x16\xf3\xe1\x0c\xae\x3b\x0a\x1c\x2d\xd9\xaa\x81\x27\xe2\x13\x67\x53\xf6\xa6\x6e\xe0\x89\x76\x01\xc1\x92\xc8\xba\x50\x1c\x58\x0a\x6d\xb4\x94\xad\xf4\x22\x2a\xb2\xa6\xef\x3e\xab\x9d\xde\x2a\xbf\x29\x99\xa5\x4f\x14\xe5\x13\xba\xea\x7d\x45\x81\x6f\xc9\x5c\x9a\x0a\x29\x05\x28\x0e\x35\x2a\xfc\x99\xb5\x03\xb5\xcb\xff\xbd\xb5\xe3\x2e\x29\x27\xa6\x7f\xae\x49\x5d\x27\x8d\x83\x1e\xc3\x73\x4e\xed\xa9\x71\xa8\xa7\x5f\xf0\xc5\xb3\x5f\x8d\x49\x85\xe7\x48\xae\xf8\x22\x6d\x12\x28\xee\xb8\xb5\x53\x81\x73\xd9\x20\xe7\xb3\xea\x63\x69\x96\x02\x71\x9c\x47\x2f\x83\xae\xd0\xaa\x8e\x44\x27\x79\x62\x94\x39\xce\x7d\x50\xfe\x78\x87\x11\x59\x19\x8a\x3b\x6e\xed\x08\x23\x38\x77\xac\xce\xb9\xef\x38\x77\xbd\xf9\x69\x77\x2a\x30\xe0\x47\x0d\x75\xd5\x98\xee\xfb\xed\x2e\x1a\x62\x3c\x06\x82\xcf\x18\xc8\xca\x50\x5c\xa0\x0c\x06\xc6\xbf\x25\x3c\x48\x3f\xcc\x9e\x90\x84\xaf\x81\xc9\x65\x81\x39\xe3\xf8\xa2\x42\xb9\xd8\x71\x4c\xef\xdc\x4f\xcf\xb5\xc7\xb9\x2b\xd8\x15\x6f\xb6\x90\xd6\x0e\x14\xf7\x8f\xb5\x83\x7b\xd4\xda\x81\x8a\x36\x38\x6a\xed\x6c\xe1\xac\xdf\x4b\x9f\x79\x56\x4f\x47\xe8\x4a\xc0\xe2\x59\xba\xba\x78\x97\x6a\xe7\x41\xe1\x56\x9f\x57\xec\xcd\x4b\xf0\x34\x7a\xe5\x23\xa8\x1f\xa3\xd1\xbd\xd1\x84\xb2\x7c\x21\xa7\xb9\x88\xd6\x9b\xaa\xec\xe3\x2e\xfc\x4e\x78\x24\x59\x34\xd1\x44\x74\xb5\xee\x89\xdd\x89\xff\x6b\xd6\x0e\xd4\xab\x1d\xbd\x6b\x07\x6c\xed\xec\x70\xd6\xc9\x9d\xd0\x7a\x49\x1c\xdd\x25\x34\x6a\xa3\xe3\xf9\x28\x2a\x67\x79\x2f\x9e\xfa\x1d\xd9\x76\xed\x41\xd7\xeb\xb2\xd1\xae\xbf\x61\xed\xd4\x1f\xb3\x76\xf8\xbc\xb2\xb4\x5b\x77\xe2\xce\x71\xbe\x4d\xb9\x48\xda\xaa\x57\xce\xc6\x25\x43\x5e\x56\x56\x82\xc5\xbe\x8a\x3b\x69\xd3\x7e\x91\xfb\xaf\x1c\x28\x39\x6e\xed\xf4\x7b\x1b\xaf\xdd\xd0\x7d\x3b\xee\xf8\x28\x41\x3d\xdd\x95\x37\xdd\xe7\x04\x9b\xa2\xbe\xdc\xc2\x8a\x96\xb5\x76\x3c\x3d\x57\xb5\xfe\x5f\x39\x3e\x73\xdc\xda\x99\xc3\x96\xa6\x70\xc2\x49\x6d\xd3\xd4\xab\x1d\x16\x5d\xfe\xfa\xe0\x27\x31\x4c\x70\xfd\x1b\xae\x26\x51\x6c\xe7\x0f\x5b\xd9\xac\x67\x7f\xe5\x6d\x8f\x5b\x3b\x14\x76\x58\xca\xfb\x67\x4b\x15\x04\x33\x3b\x56\xc2\x3b\xe9\x4f\x04\xa4\x62\x93\xbb\xb7\xa6\x31\x3b\x8c\xcf\xbc\xcb\xae\x34\xfa\x0b\xc7\x67\xc2\x65\xea\x8f\x5b\x3b\xd3\xda\x98\x05\xaf\x53\xf7\xa8\x32\x33\x75\xbf\x2b\x77\x8f\x9c\x64\x71\xef\x4e\xfa\x22\x9e\x16\xdf\x04\xeb\x0e\x7b\xfb\xca\x95\xe3\xaf\x59\x3b\x50\xd2\xfd\xdd\x34\x7d\xc2\x78\x20\xbe\x43\x2d\x54\x8e\x47\x96\x6a\x6f\xe6\xdd\xcc\xcb\x55\x86\x81\xd5\x42\x6b\xa6\x43\x17\x8b\xb3\x8d\x19\x92\x5f\x50\x3f\x42\x41\x71\xe0\x69\x5a\xd8\xfb\x80\xfb\xdb\x8b\xfa\x1f\x49\x4f\xbe\x35\x1f\xf0\xd1\x3f\x53\xd0\x1b\xba\x37\xe3\xbc\xc1\x64\x53\x14\x4c\x69\xfa\xe2\x25\x2b\xb2\x2e\x14\x07\x9e\x4e\x97\xaf\xc4\x3f\x59\x17\xa0\x6c\xce\x9a\xc2\xb9\xc5\x87\xa3\x38\xd1\xe9\x63\x16\x4f\xd8\x9f\xb0\xb3\x4b\x7e\xa1\xc6\xff\x75\xe3\x28\xb2\x2e\x14\x07\xfe\xa5\xa4\xa2\x58\xd6\x50\x2d\xe5\x49\x21\x49\xe2\xcb\x3c\x41\xd9\x82\x9c\xde\xb9\xaa\x73\xcf\x31\xf0\xd8\x55\xdd\x07\x64\xa3\xae\x38\xa1\xee\x06\x82\xe2\x02\xa5\x70\xff\xd5\x0e\xb7\x22\x53\x3a\xed\xa2\x24\xd8\x84\xd4\xe8\x36\xcf\xc5\xeb\x71\x73\x04\x4e\x48\x07\x7e\xf9\x21\x75\x36\x37\xfb\xa0\x6a\xd9\xbc\x04\x69\xed\x40\x71\xa8\xbb\x76\xfe\xc4\xda\x81\x1a\x4d\x7e\x27\x84\xae\xab\x75\xfe\x04\xac\xf9\xd5\xee\x14\xd6\xd6\x59\xb2\x32\xf7\x6a\xad\xd6\x62\xba\x2a\xda\x9c\xf3\x7c\xef\xf5\x90\xee\x52\xa2\x76\x2f\x50\x1c\x58\x08\x74\x5a\x8b\x5f\xc9\xd3\x74\xcb\x3c\xf3\xe4\xef\x15\x69\xbe\x3d\x23\xf5\x93\x5f\x95\x2d\x9c\xc2\xe4\x8c\x2f\xfd\xbb\x78\x7a\x3e\xd4\x69\x20\x28\x0e\x2c\x04\xb9\x62\xc1\xf0\x46\x32\x8e\x5c\xde\x97\x13\xd2\xab\xfc\x1f\x33\xc3\xbe\xb7\x2e\x79\x3d\xce\x30\xc5\x68\x0e\x7d\x47\x54\xda\x20\x84\xfa\x40\x00\x82\x03\x0b\xc1\x3b\x3a\x9b\x4e\x61\xad\xf4\x0e\xd3\x0b\x65\x49\x1b\x13\x01\xd8\xa5\x67\x0f\x17\x7f\x78\xf4\x17\x62\x33\xfb\xf1\x63\x92\x55\xa1\xae\xd5\x80\xe2\xc0\x42\x48\xbc\x8a\xf8\x68\xcb\x3b\x6a\xa1\x30\x63\xdd\xde\x3f\xb3\xb8\x25\xc6\x2b\xa9\x07\x8f\x67\x36\x54\xb9\x56\x94\x2b\xf7\xa5\xd9\x1e\x69\xed\x40\x71\xa8\xbb\x76\xfe\xc8\xda\x81\x1a\xe0\x7f\xa7\x84\x40\x9d\x0d\x3d\xad\xd3\xad\x41\x7a\x95\xa3\xf0\xbd\x71\x58\x36\x85\x84\xb7\xd0\x93\x3a\xf5\x99\x7a\xf8\x9c\x74\x4f\x7d\x34\xea\x9c\x39\x14\x07\x56\xc2\x80\x39\x46\x07\x82\xe9\xf4\x23\x77\x02\x19\x29\xb2\xc4\xcf\xb3\x09\x7c\x69\x8a\x0b\xab\xef\x2a\xfc\x35\x9d\xf5\xdf\x47\xc7\xa3\xee\xae\x85\xe2\x8e\x9d\xda\xa9\x49\xb7\x16\xd0\xf1\xb9\x5c\x65\xc4\x48\x4e\x5f\xbd\xda\xff\xfd\x8b\x95\x43\xaa\x2e\x2d\xdf\xc2\xf9\x59\x97\x48\x53\x83\xd7\xa8\x53\x3b\x10\x1c\x58\x09\x9d\x6a\xfa\xa2\xa4\x77\x5e\xab\x48\x2e\x69\x49\xdd\x2b\x55\x36\x7f\xae\x2c\x3f\x23\x5c\x68\xc9\x18\x47\x2b\x3b\x39\x1c\x6c\x46\x87\xac\x0b\xc5\x81\x95\x40\xaa\xf8\x99\x40\x70\xfb\xcb\xd3\x2f\xe2\xf7\x5e\x0c\x16\xf4\xf9\xe9\xf0\x02\x7a\xca\x7b\x33\x4d\xfd\xf9\xdb\xa1\x09\xce\xf3\xb8\xc8\x95\x3b\x14\x87\xba\x55\xe3\xcf\xac\x1d\xa8\x49\xf7\x77\x52\x78\x51\x70\x91\x9f\xaa\xc6\x8f\x82\xd9\xd7\x3b\x75\x40\x5d\x2f\xfd\x91\xeb\x25\xdf\x12\x7f\x1d\xe2\x94\x8e\xa4\x95\x99\xed\x7b\xea\xc8\x26\x80\xe2\xc0\x52\x90\x35\x8c\xa6\xa7\xb1\x52\x7d\x72\xae\x47\x7f\xc1\xc5\x5b\x21\x88\x2e\xa2\x6f\xea\xfc\x1a\x29\xfc\xb0\xef\x4d\x99\x2a\xa9\x33\x6a\xd6\x81\xe2\xc0\x52\x30\xb9\x95\x86\x1f\x38\x2e\x59\x6a\x64\x90\xb5\x49\xe3\x65\x4e\xb9\x7d\xce\xa0\x4c\x47\xb0\x2a\x72\x55\xa6\x98\xe6\xcc\xd7\x33\x6a\xc8\xba\x50\x1c\x58\x0a\xc2\x54\xc9\xb4\x8d\xb1\x04\x51\x9f\xd3\xe2\x4f\xa8\x3f\x1e\xb5\xc2\x7a\x18\x75\xd5\xb1\x8d\xff\xdd\xed\x71\x61\x1b\xf9\x2e\x3f\x45\xd4\x6c\x06\xc1\x81\xa5\xa0\x30\xe3\x67\x78\xa9\xb7\x43\x06\xe3\xb9\x9f\xe7\x79\x51\x4a\x80\x9a\xed\x59\x89\x47\x73\x7b\xed\xd8\x08\x46\x6e\x24\x79\x09\xea\x82\x15\x28\x0e\x75\xab\xc6\x9f\x59\x3b\x50\x0b\xa1\xdf\x49\xa1\xef\xdd\x83\x6e\xb7\x77\x78\xe5\xb1\xaa\xbe\xa2\x83\xa5\x0a\xcc\xef\xca\x88\x63\x8d\xc7\x7b\xe7\xe9\xfb\x31\x2f\x07\x60\x57\x4c\xa2\xae\x1b\x86\xe0\x8e\x5d\xbb\xd4\x75\xa2\x79\x2c\xf2\xfd\xd3\x11\xf7\xca\xa6\xbb\x67\xc3\xbf\x15\xd8\x3d\xc8\xd9\x0d\xc5\x6a\xc1\x32\x09\x2e\x28\xb6\x1d\x0f\x45\x5d\xbb\x04\xc1\x81\xa5\x30\xd6\x54\x25\xdc\x96\xcb\x95\x91\x65\x8c\xc5\xce\x85\x53\x56\xb7\x9e\x94\x47\xf9\x60\xbd\xa1\xc0\xbf\xbc\xe3\x49\x31\xd5\x36\x1f\xb2\x2e\x14\x07\x96\x42\xb3\xb9\x96\xce\x9d\x16\x23\xd6\xe4\x41\x97\x77\x27\x49\x75\xdb\x35\xb6\xb8\xad\x9e\xae\x5a\x58\xc9\x64\xb6\xaf\xac\x5c\x31\xda\x42\xd6\x85\xe2\xc0\x52\x70\x3a\xf0\x4e\x17\x9b\x6c\x4b\x1b\x68\xb2\x17\x6e\x35\xf9\xe0\x45\x13\x96\x9c\xcf\xd8\x72\x97\xe5\xd4\xeb\x8b\x5e\x7c\xee\xf4\x51\x48\x29\x40\x71\xa8\x51\xe1\xcf\xac\x1d\xa8\xc5\xe9\xef\xa4\x90\x11\xc7\xbc\x6c\x7c\x4b\xf9\x62\x18\xdb\xd3\x62\x5d\x85\xe8\xd6\x90\x51\xad\xbb\xd1\xfe\xb2\xcb\xd2\x6e\x1b\xce\x58\x52\xd3\x9b\xa8\x13\xce\x10\x1c\x58\x0a\x39\x93\x3b\x33\x7b\xe3\xa1\x8a\x04\x37\xae\x13\x1d\xc8\x6f\x47\x1f\x7a\x64\x0b\x0b\xb7\x84\x0a\x3c\x71\x3c\x63\xb2\xdd\xdc\xd0\x80\xac\x0b\xc5\x81\xa5\x90\xde\x9c\x1a\xc5\xcf\xec\xde\x6e\x3c\x66\xf6\x66\x1e\xaf\x89\xcf\x93\xd9\x88\x3a\xb0\xd3\x63\x85\x94\x11\xeb\x83\x9a\xba\xfe\x73\x64\x5d\x28\x0e\x2c\x85\xad\x35\xb3\xd7\x05\x55\x2a\x3f\x8c\x2c\x26\x47\xa3\x6b\xaf\xa4\x8c\xf0\x35\xa5\x5d\xcd\x62\x67\xa9\x0e\x3c\x23\xed\xf5\xe3\x11\xea\x37\x05\x28\x0e\x2c\x05\x3d\x73\xe3\xca\xf6\xdc\x87\x15\x64\xb2\x89\xb4\x01\xf7\x7b\x61\x31\x76\xf2\xca\x13\xc9\x11\x17\xe8\xde\xf3\x1f\x94\xa7\x7b\x79\x21\xa5\x00\xc5\xa1\x46\x85\x3f\xb3\x76\xa0\x76\xf9\xbf\xb7\x76\xba\x15\x24\x5d\xa7\xed\xe4\xe8\x3f\x7f\x68\xf8\x36\x40\x47\x77\x49\xeb\xc1\x8b\xaa\x5a\xff\xd9\xd3\xf8\x31\x95\xef\x85\xf4\x49\x67\x90\x36\x09\x14\x77\xdc\xda\x79\xf8\x9d\xc7\x35\x3b\x62\xf3\x1d\x77\x27\xa7\x8b\xe8\x99\xb5\x7d\x87\xcd\x4d\x6d\x8a\x99\x94\x27\xdf\x47\xf7\x54\x2b\x46\x3f\xff\x40\x56\x86\xe2\x8e\x5b\x3b\x69\xee\x8d\x34\x6a\x2b\x33\xfe\x72\xd6\x25\xa4\xed\x1e\x97\xd4\x6f\xa4\x0d\x23\x6a\xb9\x0d\xb7\xbc\x1f\x7f\x25\xa8\xa8\x52\xdc\x46\x56\x86\xe2\xfe\x31\x60\x30\xff\xb5\xda\x35\xbd\xc9\xf4\xac\x1d\x0b\x43\xac\x9d\x4e\xd3\xaa\xc1\x6b\x52\xe6\xbe\x9d\x86\xe0\x92\x58\x47\xbe\x50\xa8\x97\xcb\xa9\x96\x16\xa4\xb5\x03\xc5\xfd\xc7\x34\x3a\x6a\xed\x40\x45\x51\x1e\xb5\x76\xcc\x64\x6e\x14\x13\xb5\x9c\x53\x19\x19\xe9\x2d\xdb\x1a\x3c\xbc\x4a\x51\x86\x70\x76\xd2\x19\xa6\x0d\xa5\x32\xd6\x27\x5b\xc9\x57\x3b\x3a\xac\x0f\x32\xe6\x9f\xce\xd2\x23\xd6\x88\x3d\xfb\x33\x48\x94\xd7\xfb\xbd\xa4\xcb\x15\x5a\x02\xdb\xd0\x81\xf1\xf9\x89\xa8\x89\x69\xbc\xff\x35\x6b\x07\xea\xd5\x8e\xde\xb5\x03\xb6\x76\x14\x94\xe3\x2f\xbb\x60\xcd\xdb\xd2\x5c\xf3\x3a\xf7\x69\xd4\x1f\x9f\xac\x8f\xfb\x8a\x04\xe7\xc9\xd7\x62\xf2\x03\xe2\x2e\x46\xf4\xd2\x7f\xc3\xda\xc1\xb8\x0a\xde\xfe\x0b\x3c\xd8\xbc\xb6\x84\xed\x9d\x57\x40\xd2\xd2\xbb\x7c\x87\x07\x2b\x37\xe0\xf3\x93\xc2\x9d\xfb\xbb\x93\xdf\x3f\xde\x94\xc9\xb7\xfb\xf2\x57\x0e\x94\x1c\xb7\x76\x72\x7b\x04\x8d\xf3\xb1\xd8\x5b\xea\x7a\x25\xa8\x25\x04\xcd\x88\x79\x24\x65\x4d\xc9\x7a\x5e\x52\x8b\x86\x2d\xd4\x05\x76\x78\xfd\x0d\x1f\x4b\x06\x43\xfb\xd8\x63\xc3\x67\xc6\x7d\x7b\xe3\x30\x89\xd9\x49\xf7\x22\xea\x68\x2e\x50\x54\xd6\x17\x97\x17\x60\xfb\x33\x8d\x5f\xed\xa8\x7a\xe6\x7a\xfb\xaf\xdc\x67\xec\x7f\xdc\xda\xa9\xd5\x6c\xf7\xfe\xac\xf1\x43\xa3\x82\x40\xee\x92\x4f\xa5\xba\xbc\x8e\x43\x65\xde\xa2\x56\x0c\xbd\x01\xb6\x4c\x8f\x1c\x05\xd9\x5f\xf9\xfc\x0c\xe3\xce\xb1\xc7\x2e\x09\xf7\x64\xd6\xb1\xda\x9e\x9e\x7e\x14\xc2\xde\xea\x81\xdd\x18\xe2\x50\xbd\x4e\xce\xdb\x3a\xe5\xe0\xb1\xf2\x78\x7b\x41\x20\xe5\xaf\x59\x3b\x50\xd2\xfd\xdd\x34\xad\x25\x69\xe5\xd9\xa2\xcb\x34\xb6\x3a\x6d\x42\xd4\x40\xfe\xb3\xa3\x77\xc7\x7e\x99\xbd\x6e\xb1\xce\x70\xc9\x88\xb6\xed\x20\x11\xb5\x62\x83\xe2\xc0\xd3\xb4\x14\xce\x9d\x73\x66\x43\x9d\x3b\x93\x9b\x55\x8e\xf5\x0f\xe3\x1b\xb6\x56\x05\x17\x55\x59\x99\x0b\x6e\xd4\xfa\x19\x91\x04\x78\xa0\x76\xc8\x50\x1c\x78\x9a\xbe\x1c\xb3\x42\x43\x73\x70\xbf\x72\x33\x6f\x7a\xd0\xbd\xe4\x26\x9d\xdc\xad\x70\x2e\xbc\xf8\xbc\x97\x17\xa5\xfd\xdb\x6b\x0d\xc4\x2f\x22\xeb\x42\x71\xe0\x69\x7a\x89\x80\x4f\x17\x2b\x0b\x9f\xe3\xed\xb8\x62\x08\x46\xd4\xfd\xc0\x98\x16\x3f\x9f\xd2\x3b\x42\xcf\xc8\x24\xb9\xb2\x4f\x8e\xa6\xd8\xa1\xbe\x42\x81\xe0\x8e\x7d\x3f\xce\xfb\x48\x9f\xa6\xab\x77\x8f\x76\x2b\x77\x63\xe8\xe7\xd5\xc6\xe9\x8f\x6b\x1d\x4d\xdf\x0f\x55\xbc\x94\xb2\xa9\x8c\x70\x94\x6e\x23\xad\x1d\x28\x0e\x75\xd7\xce\x9f\x58\x3b\x50\xa3\xc9\xef\x84\xd0\x3b\xed\xec\x5f\xa6\xdf\x87\xe0\xbb\xff\xc6\x33\x81\x5e\x6a\x0b\x86\x99\xcc\x2a\x69\x6b\xc8\x84\x10\xdf\x52\xcb\x95\x8e\x46\xfd\x64\x06\xc5\x81\x1b\xc0\x60\xb8\xf9\xae\x11\x15\x46\xf2\xda\xea\x43\x63\xcb\xae\x17\x6e\x86\xd8\xe6\xa2\x6e\x23\xad\xab\xd2\xc4\xa4\x9b\x9e\xf9\xfa\xa8\xd3\xd0\x50\xdc\xb1\x3b\x71\x94\xc5\xed\xbe\x6e\xb8\xc3\x46\x1d\xbf\xba\xca\x2c\x73\xe9\xb3\x57\xb8\xc6\x30\x25\x4f\xd5\x30\xf7\x50\x98\xd5\x6c\x87\xa0\x4e\xed\x40\x71\x60\x21\x44\x3e\x28\xe1\x86\x85\x2e\xec\x9d\x39\x98\x98\x5f\xf8\xc1\x78\xca\x22\xfd\xac\xc4\x59\x55\x09\x82\xad\xf5\xbb\x2e\x87\x57\x26\x51\xf9\x4c\x50\x1c\xb8\x1d\x04\xad\x2a\x0b\x2f\x9d\x59\x25\x2b\xfb\x2e\x71\x1d\x58\x5d\x16\xed\x8a\x12\x31\x65\xc5\xfe\x22\x42\x19\x3c\xbc\x78\x26\x27\x57\x14\x69\xed\x40\x71\xa8\xbb\x76\xae\xfe\xc9\xca\x1d\x6a\x80\xff\x9d\x12\x9c\xf5\x53\x36\x17\xf7\x6d\x5e\x96\x12\x8a\x55\xda\x57\xc8\x49\xb3\x11\x2b\x2f\x84\xb9\xe5\xdc\x55\x94\xba\x8a\xbb\x88\x53\x7b\x17\xd9\x02\x50\x1c\xb8\x05\x5e\xc4\x6b\x3d\x4a\x77\x31\xf2\xe7\x20\xc5\x94\x30\x8c\xf0\x0a\x71\x8e\x90\xba\x25\x29\x23\x57\x9b\xea\xdb\xdf\x4c\xa5\x41\x80\x3a\xbf\x0e\xc5\x1d\xfb\x44\xe2\xfa\x07\x91\x90\xfc\x67\x9f\xf6\x77\x1d\xde\x0d\xe5\xcd\x1b\x99\xae\x75\x22\x44\x0c\xc8\x97\xfb\xbf\x0a\x3f\xb4\x78\xf3\xf5\x04\xea\x13\x09\x08\x0e\xac\x04\x0a\x78\xda\x55\x36\x5b\x3c\xcb\x77\xa1\x26\x9a\xf4\x41\x25\xbc\x63\x25\x98\xa1\x44\x8e\x1e\xc6\x2d\xd9\xe6\x1f\x7b\x6b\x5e\xa2\x3e\x25\x84\xe2\xc0\xed\xf0\xec\xec\xc3\x25\x35\x99\x9a\x96\x55\x82\x1c\x29\xf9\xf7\xdc\xca\x73\xe3\xa7\x5e\x7b\x72\x3c\x30\x62\x71\xec\x3d\xb0\xa3\x78\x85\x83\x5c\xb9\x43\x71\xa8\x5b\x35\xfe\xcc\xda\x81\x9a\x74\x7f\x27\x05\x55\xf2\x8f\x74\x59\x0b\x9f\x81\xde\x77\xa7\xca\x32\x0d\x04\x30\xa4\x5e\xe3\xf7\xaa\x76\x49\x0e\xf6\xdd\x8e\x26\x89\x4d\x63\xf8\x88\x6c\x02\x28\x0e\xdc\x04\xef\x3f\x7f\xcd\x2b\x9e\x27\x5a\x8c\xec\xcb\x65\xe4\x4a\x50\xa8\xd5\x31\x8c\x90\x7e\xcc\x34\xbe\x3d\x32\xc3\x9e\x97\x61\x41\x55\x8e\xac\x0b\xc5\x81\xa5\xc0\xe3\xe9\x50\xe5\x94\x66\x1b\xca\xbd\x7e\xca\x80\x85\xaf\x81\xe1\x4e\xd7\xca\xa5\xa1\xa1\x9b\xdb\x7a\xcf\x2d\x4d\xbb\x0e\x8c\xb5\x91\x75\xa1\x38\xb0\x14\x26\x72\x1c\x3f\xef\x3f\xc4\xad\xc6\x5c\x25\xec\x0d\xc3\xf4\x52\x77\xd6\x31\xd8\xb8\xdb\xfa\xbd\xcf\x59\xca\x16\x1e\xe1\xb4\x62\x8b\xba\xe1\x0d\x82\x03\xb7\xc3\xf0\xe9\x9e\xcc\x13\x7c\x89\xda\xf2\x11\x1b\xea\x0c\xbc\x73\xe3\x35\xc3\xe3\x1a\x7d\x64\x8d\xd2\x3f\xd8\x53\x65\xc2\xb3\x89\xea\x90\x52\x80\xe2\x50\xb7\x6a\x68\xff\x91\x14\xa0\x16\x42\xbf\x93\x82\xa1\xd8\x43\x93\x9f\x12\xea\xce\xc9\x22\xcc\x58\x37\x5b\x45\x17\xc9\x43\x71\x4a\x71\xb5\x32\x24\x18\xb4\x87\x48\xb5\x7e\x64\xa0\x6e\xd4\x86\xe2\xc0\x4d\x30\xf2\xfd\x4d\xc5\x2e\x0f\x3f\xb7\x76\x83\x1c\xfd\x48\x3f\xa7\x76\x90\x4d\x1d\x81\xe2\xd7\xe9\xb0\xc4\x6f\x84\xe7\x8b\x3f\xfe\x30\x42\xd6\x85\xe2\xc0\x52\xf8\xec\xe4\xf2\xd4\x6f\x47\xf0\xca\xbe\x51\x66\x57\x99\xc6\xa1\x72\x76\xb5\x78\xc0\x27\x95\xe7\x38\x54\x1d\x77\xe3\x00\xc3\xc9\x59\x64\x5d\x28\x0e\x2c\x05\xb2\xa5\xb8\xf7\x74\xeb\x83\x19\x78\x61\x6a\xdf\x9a\x68\xe1\x51\xec\xf8\x9f\xe8\xb5\xdd\xdf\x28\x46\x88\x0d\x8d\xcd\xaf\xb2\xac\x23\xeb\x42\x71\xe0\x76\x20\x0d\xb6\xe3\x77\x1c\x6a\x34\x21\x19\x7a\x4b\x2e\xb4\xd5\xb4\x10\xcf\xe7\xae\x8d\x1b\x2d\x5d\xda\x8a\x88\x0a\xdd\x0b\x18\x46\x25\x6a\x41\x71\xa8\x51\xe1\xcf\xac\x1d\xa8\xc5\xe9\xef\xa4\xb0\x7e\x3f\x41\xf5\x7c\x44\x2e\x9e\x73\xd4\xc7\xb3\xaa\x03\x92\x46\x64\xf3\x44\x4a\xd8\xeb\x94\x3d\xb7\xac\x7c\x87\x07\x5b\x7f\x64\x20\x9b\x00\x8a\x03\x37\x41\xe7\xd9\xd8\x33\x46\xcd\xb6\x0a\xe7\xa3\xd4\xd3\x72\x22\x93\xbc\xd5\x63\x31\xac\xc2\xbc\xd8\x0b\x5f\x29\xe0\x44\xe3\x49\x1a\xa0\x92\x1c\xa0\x38\xb0\x14\x70\xc4\xda\x54\x83\x27\xeb\x5d\x13\x2e\x9e\x69\x98\xd2\x48\x0b\x5b\xf9\xff\x31\xf7\xa7\xd1\x58\x7e\xef\xff\x3f\x6e\x08\x99\x92\x99\x90\x31\x53\x24\xf3\x3c\x84\x88\x88\x90\x79\x9e\x87\x44\xe6\x79\x16\x42\x66\x92\x99\x28\xf3\x3c\xcf\x12\x21\x43\x94\x21\x84\x22\x54\x92\x0c\x99\xfb\xaf\xef\xff\xb3\xae\xf3\xd7\xeb\xbc\xac\xb5\xdd\x70\xe3\x7d\xff\xb1\x0e\x9d\xbb\xe7\xb5\xf7\x7e\x1e\x7b\x1f\xc7\xbe\x7f\x8f\xb2\x38\x81\xb3\x04\x95\x27\x70\x36\xe7\x61\x9b\x11\x22\x2e\x88\x83\x4b\x61\xfd\xa1\xb8\x0e\x2b\xb1\xea\x2a\x2b\xe6\xdd\xd4\x09\x7c\x2c\x5a\x1c\x97\x63\xfd\x7c\x21\x1a\x6c\xf9\xd5\x9b\x04\x45\x4f\x2e\x87\x43\xc7\x8c\x00\x0e\x3e\x0e\xda\x8c\xca\x59\x9f\xc3\x02\x23\xdf\x0a\x35\xa4\xce\xdd\x9b\x21\xa0\xc1\x8d\xf9\xab\x79\x57\x56\x3d\xe4\x4b\x6e\xe3\x2c\x33\x53\x19\x94\xda\x01\x70\xd0\xac\xe0\x7d\xaa\xd4\x0e\xc8\xe5\x9f\x9c\xda\xc1\x3d\x6e\x7b\x63\xd4\x8d\x8e\xde\xab\xf8\xf6\x78\xff\xd5\xdf\x82\x61\xaa\xa9\x0a\xda\xaf\x28\xbd\xfe\xe9\x4a\xfc\xf7\x8d\x9a\x1b\x10\x69\x12\x10\x87\x9c\xda\xe9\xae\xc3\x74\x33\x64\xb3\x5a\xc8\x20\xb6\x1a\x0f\xec\x08\xb1\x7f\xdd\xad\x3d\x1d\xe8\x94\x18\x73\x6d\x5f\xe6\xd6\x5c\xd4\x77\x53\x44\x64\x10\x87\x9c\xda\x79\x57\xe1\xa8\x94\xb5\x71\x89\xe8\xdc\xbb\xc4\x25\xa1\xf5\x23\x83\x4c\x26\x0c\x3e\xd6\xaf\x81\xe1\xbc\x91\xde\xae\x4b\xd4\x76\xf3\x50\x3a\x0a\xc0\xfd\xdf\xdd\x9a\xff\xdc\xbd\xab\xae\x5c\x48\x5a\x26\x09\x51\xfc\xcb\x10\x29\x73\x0b\xe7\x8b\x25\x0f\x3b\x5a\x18\xe1\x35\x39\xab\x47\xcf\x2e\x62\xbd\xe0\xf9\x8a\x48\xed\x80\xb8\xff\x17\xf9\xfc\x7f\x52\x3b\xa6\x2e\x06\x71\x1e\x51\xee\xbd\xb8\x57\xb6\x9f\xe3\x1f\xb9\x6c\x5c\x68\xbc\x72\xe8\x57\xd0\x61\xde\x8e\x19\x99\xab\x22\x63\xbd\xfe\x9f\x17\xb2\x30\x5f\xe8\x0b\x3d\x51\xcc\x64\x9a\x50\x62\xe4\x93\xf3\xe8\x54\x45\x79\x68\xc2\x65\xac\x6f\x96\x9d\x4f\x5b\x1b\xa3\x4f\xf8\xef\x1d\x86\x1a\xdc\x24\x59\xb6\x8e\x8b\xdb\x2c\x61\x3c\x34\xb6\xf7\x08\x29\x32\x85\xd4\x71\x2c\x89\x27\x7f\xdd\x7d\x51\x11\x2c\xd3\x21\x73\xf5\x7f\x2d\xb5\x03\xfa\xb4\x7f\x7b\xed\xc0\x53\x3b\x8f\x5d\x2d\x50\x5d\xe7\xe5\xef\x59\x2c\xaa\xbf\xec\x2e\xfc\xe1\xcc\x14\xf8\xfa\xad\x47\x7a\x4f\xba\x6f\x15\xd6\x75\x7b\x27\xcc\x33\x68\x7a\x1b\x29\x23\x85\x94\xda\x61\x95\x4a\x6a\x2f\x9d\xf4\x72\x1e\xa3\x51\x74\xdd\xca\x69\xe8\xa4\x63\x11\xd8\x18\xe6\xef\xe1\x20\x7b\x2a\x26\xac\x75\x10\x78\x26\x8d\x85\x3b\x90\x53\x3b\x2f\xee\x84\x5c\x2f\x36\xd8\x75\x61\x49\xab\x5c\x4b\xdf\x27\x5b\x31\x7c\xe3\xbe\x3c\xbe\xfc\xe8\xc2\xcd\x06\x8b\x87\xc5\x35\xbb\x31\x67\x72\x7d\x06\x39\xb5\x13\xc2\xc3\x34\x65\x97\x42\xda\xf5\xe2\xd2\x9b\x88\xd0\x51\xc5\x3a\x19\x5e\xce\x5f\x1b\x05\x25\x49\x39\xf3\x2f\xc6\x37\x17\x16\xce\xe0\xcd\xa8\x48\xd9\x0e\xe4\xd4\x8e\xff\xf1\x81\x2d\xd1\x4d\xc3\x17\x2f\xb8\x2a\x5a\xb1\x5b\x3b\xa8\x27\xe9\x96\xf9\xe7\xa3\x8d\x0c\x74\xa9\x5d\x0c\x0f\x25\x59\x3d\xce\xe4\x6b\x91\x53\x3b\x4c\x83\xdd\xd7\x71\xe4\x2e\x79\x26\xcd\x52\xd5\x26\xee\x4b\x4b\x79\xe4\x36\xcd\xf5\x11\x99\xd3\x9b\x6d\xe1\xe7\xb5\x68\x61\x27\x9e\x59\x6a\x07\x24\xdd\x93\x96\x69\x81\xe7\x1b\x16\x0c\x4a\x18\x37\x3c\x2d\xd5\x36\xa8\x23\x49\xbb\xb6\x79\xb6\x82\x34\xc5\x56\xcd\xfe\x60\x58\x67\xc4\x3b\x60\x90\x23\x96\x27\x10\x07\x5f\x9e\xba\xc9\xf6\x65\x71\x72\x96\x4d\xdc\x74\xe4\x67\x6e\x5c\x6b\x4f\x16\x6d\x2f\x45\xd7\x1c\xd2\x5e\x74\x56\xf5\x17\x69\x8a\xbd\xfa\x1e\xaa\x97\x01\x70\x48\xcf\xd6\x1a\x1f\xd9\xfa\x39\xf7\xdb\x37\x74\x24\x65\x25\x73\x92\x4c\xbd\xb0\x17\xa4\xd8\xba\x6b\x2d\x6a\x17\x1b\xc2\x4a\x13\xbd\x1f\x06\xdd\xae\x01\x70\xf0\x65\xba\x93\xe6\xa0\x17\xd7\xa9\xb1\xae\x5d\x8c\xc0\xf5\x79\x3c\x81\xda\x10\xf1\x26\xf9\x13\xd2\xf7\x79\x0f\xbe\xdb\x75\xd8\x2d\x74\xff\x84\xba\xfd\x02\x38\xa4\xfb\xdb\x8f\x16\x5e\x52\x06\xa4\x0c\xcc\xdf\x6f\x72\x51\x34\x22\xbe\xef\x52\x87\x49\x75\xe9\x4e\x9c\xb3\x8b\x01\xde\x75\x23\xf4\x95\xcf\x88\xd4\x0e\x88\x83\x7a\xed\x9c\x26\xb5\x03\x9a\x4d\x4e\x12\x02\xa1\x1c\xcd\x6d\xe2\xe1\x1f\xc7\xf3\x17\x3a\xf4\x2e\xac\xf3\x5d\xf5\x1f\xe1\x43\x0f\x7d\x67\x9b\xad\x97\x50\xf7\xe1\xa2\xd5\x5d\xe8\x3f\x0c\xc4\xc1\x85\x60\xbb\xac\x38\xb2\x96\x36\x5d\x71\xd3\xb4\xfa\x26\x91\x40\x53\xa0\x10\x83\x77\xec\xcd\x2f\x6f\xda\x5f\x9a\x2d\xaf\xcb\x6d\xd3\x40\xfb\x40\x10\x87\x74\x57\xa3\x33\x90\x74\x89\x73\x63\x04\xab\x02\xf5\xc9\xf5\x5a\xd5\xd1\x9c\xcc\xa5\xbf\x39\x12\xb5\x61\xd6\x71\x2d\x94\xf6\xcc\xc9\xd0\x4b\x56\x20\x0e\x2e\x04\xce\xf2\x2e\x22\x83\xcc\xf9\xa9\xda\xc1\x23\x8e\x38\x2f\xcb\xc5\x88\xa0\xa6\x9b\xf4\x4a\x38\x74\x82\x77\x78\x9a\x99\xb5\xd6\xb2\xa1\x26\x51\x00\x0e\xfe\xef\x65\xaa\x36\x2c\xb9\x11\x57\x90\xc4\xf1\x8c\xcb\x40\x59\x6b\xe3\xd5\xc7\x4f\xa8\x7f\x3f\xff\x2c\xe4\x3b\x08\xf9\x6a\x73\xdb\xc7\xa5\x1b\x91\xda\x01\x71\x50\xaf\x9d\x53\xa5\x76\x40\x13\xfc\x89\xa5\x17\x7e\x0f\xf3\xfd\xd2\xbf\xfd\xd8\x2f\x32\x1a\x10\xa8\xd2\xf4\x5e\x14\x49\x65\xd9\x8d\x17\xfe\xb4\xb7\x84\xde\x4f\xa7\x99\x2c\x02\x95\x5e\x00\x38\xb8\x12\xfa\x17\x7f\xb9\x16\xb1\x12\x56\xaa\x98\x16\x2e\xaa\xa0\xc7\x3c\xdf\x12\x30\xcd\xc0\x2a\x61\x4f\x88\x8b\xe5\x96\x65\x7c\xa6\x16\x83\x88\x0b\xe2\x90\xce\xe7\x6f\xb4\xbf\x73\x28\xbc\x3f\x7b\x3b\x59\x21\xc4\x78\xc4\x3d\x5f\x79\x62\xe8\xd9\xae\xc1\xee\x75\x8a\x98\x05\xa2\x9f\x98\xd6\x5e\xd0\xf9\x3c\x80\x83\x2b\xa1\x67\x47\x32\x55\xd4\xbb\xb9\x89\x63\xb6\x78\x57\x30\x8c\x97\x2f\xe0\xe6\xf6\x57\xec\x43\x6b\xa2\x07\xc4\x9e\x8b\x38\xb6\x5e\xac\x88\xb8\x20\x0e\x69\x4a\x60\x47\x4f\xce\x1e\x2f\x64\xc0\x64\x2a\x9b\xc1\x2c\xea\x30\x2c\x6d\x1f\x4c\x4c\x27\x63\x1c\xf1\x0a\x7e\xf3\xe0\x45\x03\x2a\x26\x62\xe7\x0e\xe2\xa0\xae\x1a\xa7\x4b\xed\x80\x16\xdd\x93\xa4\x30\xa9\x6f\x12\x5a\xe7\xf1\xb1\xfd\x1b\xfb\x3d\xff\xfa\x37\x8d\x97\x6b\x68\xb2\x03\x16\xea\xb2\x3a\x7a\x0b\x35\x59\x24\xad\x95\xa0\x86\x56\x20\x0e\x2e\x85\x44\x73\xa9\x5a\x94\xf7\x85\xaf\xdf\x10\x10\xbf\xbd\x9a\xba\xd1\x1a\x48\xed\x33\x6f\x85\x72\xce\x36\xef\x6b\x5e\xdc\xa5\xb0\x95\x7c\xa8\x17\x2d\x80\x83\x0f\xad\xaf\x8e\x3a\xbf\x72\x20\xff\xd3\x62\xe6\x21\x1a\xa5\x6b\x95\x69\x04\x2b\xe4\xa1\xde\x5f\x3f\xab\xb0\x62\x19\xaf\x77\x7a\x0a\x98\x21\xe2\x82\x38\xb8\x14\xe8\x6d\x1a\x67\xc9\x7c\x46\x1f\x04\x86\xac\xac\xa6\xff\xfc\x15\xfc\xbe\x20\x4d\x37\x8c\x9d\xe7\xcf\xe3\x56\x6c\xe7\x17\xd6\x57\xa0\x5e\xbf\x20\x0e\xa9\xe6\x0f\xad\xeb\x4d\xe6\x4f\xb9\xfe\x9d\x40\x5b\x5e\x16\x43\x0d\x67\x9a\xb7\x0b\x06\x26\x4e\xdc\x35\x2d\x77\x9c\xd3\x3a\xc8\x2a\xfa\x11\x52\x00\x71\x50\x57\x8d\xd3\xa5\x76\x40\x1b\xa1\x93\xa4\x80\x47\x58\xf9\xa6\xed\x48\x42\xe2\xbc\x12\x87\xb2\xc3\x64\xee\x80\xc0\x53\x9e\x6d\xd7\x73\x72\x77\xc2\x4c\xa9\x4c\x5e\x24\x67\x5b\x23\x86\x00\xc4\xc1\xa5\xb0\xb8\xf3\xa5\x77\x94\x83\xdc\xed\xe9\x70\x96\xc5\x45\x1c\xf1\x87\x9c\xda\x17\x9c\x2e\x12\x15\xab\x5d\xbe\x2a\x24\xa9\x7c\xb5\xfa\x16\x22\x2e\x88\x43\x5a\x1f\x3e\x62\x7d\x08\xc0\xba\x9f\xb7\xfa\x7c\x7b\x89\xff\xfc\xe4\x9e\xf5\x4c\xa0\x2f\x67\xe1\x47\xd3\x42\x19\xa7\xe6\xa8\xa2\x9e\xbf\xd0\xfa\x00\xe0\xe0\x52\x20\xbe\x44\x1d\x25\x14\x98\x24\xbf\x56\x2a\xd3\xed\xb8\x49\xd5\x7b\xfb\x5c\x40\x9b\xfb\xdf\xf2\xf2\x5f\x5a\x14\xbf\x63\xf6\x56\xa0\x33\x2b\x10\x07\xff\xf7\x12\x26\xe4\xbf\xcf\xa2\x98\xc5\x25\x0c\xbf\xca\x4e\x98\x88\xf7\xe1\x51\x64\x47\xee\xec\x7c\xf0\xc5\x06\x53\x36\xde\xe8\x12\x45\x79\x84\x14\x40\x1c\x34\x2b\x9c\x2e\xb5\x03\xda\x9c\x9e\xd8\x6b\x27\x36\xed\xa8\xef\x70\x4c\x9b\xe0\x83\xc0\x9c\xd2\xd3\x26\x6b\x49\xf5\x50\x42\x23\x41\x89\x73\xfb\xfc\xa2\x62\xef\x8b\xcf\x67\x40\xbd\x76\x00\x1c\x5c\x0a\xc5\xaf\x82\xcc\x48\x9d\x9b\xb1\x93\x46\x74\x47\x26\x3a\x67\x47\x43\x0f\x73\xbd\xfa\xa5\xc5\x77\xdd\x31\x79\x3b\x58\xb5\xa2\xa0\x9a\x3f\x10\x07\x1f\x5a\x82\x45\x65\xa5\xa1\x40\x37\xb6\x8c\x66\xe5\x86\x10\x1f\xad\x73\xd9\xa3\x1c\x71\x97\x24\x84\x9f\xd5\x59\x75\x45\x45\x5a\xea\x40\xb5\xe6\x20\x0e\x2e\x05\x6b\x83\x40\x86\xfb\xb9\x33\xfc\x3d\xeb\xaa\xda\xed\x3f\x71\xb1\x13\x38\x0b\x09\x7f\x4b\xdd\x33\xf5\xbc\xe6\x9f\x13\xa6\x69\x06\x6d\x99\x40\x1c\xfc\xdf\xeb\xed\x5f\x31\xbc\x98\x53\x9c\xa0\xae\x5e\xcc\xa1\x1a\x84\x95\x74\xd3\x8a\xd6\x5f\xae\x8b\x65\x3d\x9f\xf0\xf2\xd3\xe7\x9d\x49\x17\x11\x52\x00\x71\xd0\xac\x70\xba\xd4\x0e\xc8\xe5\x9f\x9c\xda\xd9\xc3\xf9\x46\xf5\x50\xa8\xb2\xfd\xed\x86\xb6\x5d\xbe\x40\x23\x5b\x83\x47\xc0\xcf\x1b\xf6\x6e\xf8\x1f\x77\x70\xc4\x63\xea\xe8\x9a\x10\x69\x12\x10\x87\x9c\xda\x79\xcb\xe0\x30\x72\xdf\xb8\x25\x9e\xec\x13\x0b\x2a\x5a\x71\x68\x43\x6b\xd9\x8b\x97\x6f\xee\x46\x0f\x7a\x6b\x7f\x7d\x35\x56\xf1\xf7\x03\x22\x32\x88\x43\x4e\xed\xdc\xef\x10\x36\xd3\xb8\x7a\x9b\xe7\xf2\x28\xe3\xe3\x69\x85\xbf\xa1\x2d\x43\xf4\xe2\xe3\xab\xd5\xf5\x53\xc2\xe9\x8a\xed\x73\xdf\xb0\x11\x91\x41\xdc\xff\x3f\xb5\x43\xf7\x6f\xe4\xd6\x1a\xa3\x07\x96\x81\x26\xfb\x34\x57\xdc\x4c\x2a\x5f\x7f\x16\xbe\x9d\xc9\x94\xa3\xb6\x88\x12\x86\x76\xe1\x52\xb2\x77\x62\xa0\x1e\x22\xb5\x03\xe2\xfe\x6f\x34\xfe\x4d\xed\xa0\xc6\x39\x96\xe0\xd5\x11\x2c\x69\x63\x64\xc6\x86\x07\xaa\x9d\xc7\xb9\x6b\x50\xa7\x1b\xcc\x4e\x8c\x4b\xb8\xa0\x66\x49\x16\xf6\xed\xdf\xd4\x8e\x15\x63\x21\x6d\x65\x70\x5d\x5e\x55\xab\xab\xb3\xb5\xa5\xe9\x3a\x01\x33\xc9\xa6\xbb\xec\x5f\x75\x6e\x97\x1f\xdf\xae\x12\x05\x2c\xff\x83\xea\x8e\xb0\x57\x7d\x34\x7f\xc7\xd4\xaf\xd5\xfd\x49\x21\xe8\x99\xe4\x00\xdf\xec\x4c\x20\xc1\x75\x9f\xe3\xe6\xfc\x4b\x5b\xab\xc6\x13\xff\x2b\xa9\x9d\x3f\x18\xa7\xfb\xb4\xff\x2f\xb5\x23\x83\x22\x0d\x77\xe2\xae\x35\x6f\x67\x70\x50\x3d\x6a\x88\x0a\x9a\x89\x19\x73\xf9\xb8\x56\xa2\x84\x09\xb2\xaa\x36\x03\x31\xc3\xb3\xe9\x06\x7e\x0d\x74\x9c\x45\x6e\x27\x00\x29\xb7\x13\xfe\xf3\x69\x50\x98\xbc\x99\x4d\xe8\x33\x33\x62\xc9\xdf\xdb\x1c\xc9\x4d\x6f\x5f\x4c\xc7\x5c\x35\xe6\x55\xcb\x97\x2b\xa9\xdc\x99\x3d\x93\x1b\x25\xc2\x48\x69\x87\x85\xa0\xe0\x70\x4d\xc1\x7a\xc9\x7b\x07\xfa\xd7\x22\x12\xf9\x5c\x34\x71\xd8\x8d\x8c\xef\xb6\xdb\x64\x99\x6a\x5d\x31\xdc\xda\xb1\x3c\x93\xfb\x33\xc8\xb9\x1d\x7f\xd6\x1b\x82\xf3\x4e\xce\x5d\xbf\xce\x87\x67\xe0\x63\x45\xef\xbf\xe5\xb1\xf0\xb9\xb3\xaa\x1d\xd4\xf0\x25\x07\x93\x78\x12\x4d\xe8\x4c\xbe\xd6\x11\xe9\xcf\x36\x5f\xed\xfc\x95\xc8\x74\x45\x2a\xf4\xf7\xa4\x9f\x92\x53\x8e\x49\xaa\xab\x5a\xc3\x58\x94\xe9\xb3\xe0\x12\x96\x88\x3f\x4a\xba\xa1\x67\xf2\xb5\xc8\xb9\x9d\xf5\x34\xd3\xf4\x81\xb9\xf0\x27\x5a\xb8\xcd\x72\x1a\xc1\xa5\x13\x4d\xf9\x95\xbe\x0f\xb7\xf8\x9b\xf8\x6c\x89\xa8\xec\x6f\x10\xd7\x9f\x59\x6e\x07\x24\xdd\x93\xd6\xe9\x58\xef\xb8\x0c\x51\xbc\x96\x61\xb9\x92\xf1\x27\xcc\x05\xe7\xb9\x84\x7c\xfa\xbe\x1b\x7e\x49\x2a\x65\xee\xa0\x1b\xbb\x54\x72\xe1\x07\x62\x7d\x02\x71\x48\x47\x0f\xcb\xe3\x6d\x7f\x3a\x0e\x36\xb6\x49\x27\x0f\xd3\xe2\x1d\x62\xb1\x5f\xd9\x3d\xb2\x60\xd1\x17\x5c\x1e\xcb\x8c\x78\x5c\x2d\x0d\x6d\xad\x40\x1c\x52\xa7\xcc\x05\x6a\x9d\xf8\xa0\xfb\x45\x57\x30\x5c\x50\x8e\x13\x53\x28\x03\x2a\x23\xe4\x87\x3f\x72\xb1\xeb\x4b\x5f\x9a\x1e\x5f\xec\x81\x5e\xc8\x04\x71\xf0\x75\x7a\x99\x88\xd7\x7e\x46\xec\xad\x93\xc4\x60\xc5\x7e\x56\xdf\x4b\xeb\xab\x9a\x78\x4b\x23\x83\x56\xdf\xd3\x33\x3a\x0f\x27\xba\x7f\xaf\x42\xcd\x81\x00\x5c\xb0\x34\x8a\xd4\xbf\x71\x8b\x96\x50\x25\x84\xe4\x74\x78\x8b\x46\xd4\xb5\x3f\x18\x6d\xe2\xce\xd0\x50\x9a\x47\xdc\xef\x17\x2f\x7f\x43\x75\x51\x73\xad\x5e\x05\x61\xe9\x41\x1c\xa2\xc7\xca\xff\x9b\xb0\xc0\x3b\x36\xd0\x74\x72\x92\x12\xda\x67\x14\x0d\x8a\xea\x25\x5d\x98\x14\xd6\x6f\x68\xad\x3e\x7c\x99\x34\x86\xfa\xb0\x13\x73\x66\x40\xc4\x66\xc4\x5a\xeb\x76\x2f\x21\x62\x04\x40\x1c\x5c\x09\x14\x77\xc4\x42\x54\x23\x84\x70\xa8\xc4\xd2\xec\xe9\xd0\x73\x1b\xaf\x75\xb0\x91\x1a\xfb\x5e\xa5\xa9\x89\x55\xfc\x7d\x79\xb1\x10\x3a\xe7\x04\x71\x48\x59\x3e\x71\x25\x16\x41\x2a\x75\xb1\xe0\x65\xd5\x6e\x7e\xb9\x6f\x28\x42\xfc\x5c\xfb\xd5\x63\x7b\xcd\xbf\xdd\x59\xff\x26\x4f\x64\xda\x40\x59\x3e\x00\x07\x57\x42\xc5\x75\x3c\xb3\x87\x39\x9d\xb7\x96\x0b\x47\x19\x37\x94\xa5\x4b\xe5\xf2\x19\x09\x56\x16\x2c\x9e\xba\xee\x0e\xac\x7d\xee\xa0\xbe\x8e\x88\x0b\xe2\xe0\x4a\x10\xf7\x9e\x37\xab\x6f\xbe\x4e\x83\x7b\x83\xbe\x0a\x97\xac\xe2\xa3\x81\x0c\x4e\x9b\x96\xbb\xaf\xd6\xa4\x71\x19\x3f\x49\x6f\x6d\x2f\x42\x09\x20\x0e\xea\xb6\x73\xaa\xe4\x0e\x68\x86\x3f\xf1\x09\x14\x91\x06\xac\x2b\xad\x64\x14\x7a\xb7\x9f\xba\x7b\x5e\x0e\x5d\x23\xab\x12\x5a\x91\x3f\x7e\x8c\xe2\x27\xf3\x90\xca\x44\xb9\xf7\x21\xd4\xff\x02\xc0\xc1\x95\xd0\xee\x4c\xc6\xd2\x74\x6f\x81\x5a\x95\xd7\x2e\x9e\xde\xb8\x70\xad\xd1\x11\x37\xd7\xad\x8f\x17\xfb\x4b\x91\x7d\xd4\x6f\x19\x76\xa8\x1b\x2d\x88\x43\x7a\x2d\xcd\x52\xb5\x9c\xc1\xa8\xc4\x08\x5f\x7a\x2e\x21\x45\xfa\xf9\x58\xb0\x62\xe9\x77\xaa\xc2\x94\x65\xcc\xf3\x66\x06\xda\x37\xe5\x3d\x10\x71\x41\x1c\x5c\x09\xa2\xd6\x0d\xe8\xb1\xc5\xcf\x67\x08\x02\xf7\x3e\x9a\xdf\xe8\xe2\x15\xcb\x1f\xf1\xbc\x50\xd4\x1e\xf4\xec\xfe\x94\x01\x49\x65\x0b\x54\xa5\x09\xe2\xe0\x4a\x10\xf6\x20\xc6\xa6\xf9\x3b\xc9\xa2\x40\x73\x99\xa8\xc2\xc5\xe2\x55\xcd\xb3\xea\xdf\xd2\x74\xe4\xf4\xb8\xa5\x97\xb2\x04\xa8\xd4\x1e\x40\x6f\x5e\x03\x38\xa8\xaf\x86\xf0\xe9\x1c\x3d\x60\xd5\x3d\x49\x0a\xb5\x26\xd3\x9d\xa2\xf8\x55\x04\x3f\xd0\xd2\x5f\x77\x47\x08\xde\x7e\x7c\xf8\xc9\xd2\x4d\x58\x6d\x87\xd0\x36\x5f\xad\xf6\x75\x9f\x0c\xd4\x8d\x16\xc0\xc1\xa5\x80\x57\x9d\xf6\xa1\x31\x56\x55\x82\xaf\x32\xbc\x92\xe7\x56\x91\x2b\x2b\x73\xb1\x44\x6d\xcf\xc4\x39\xc2\xf3\x97\xec\x25\xa2\xb3\x9f\x43\x99\x02\x00\x07\x97\xc2\xfe\x13\x1f\xe9\x27\x44\x61\xf1\xb1\x74\xa4\x7f\x24\x7f\x0e\xca\x91\xed\xe3\xcf\xd3\x08\xa1\xfc\xa8\x2d\x4e\x29\x34\x36\x64\x83\x9e\x61\x03\x71\x70\x29\x84\x3d\xa3\xaa\x4d\x7d\xff\x68\x98\x31\x3e\x36\x78\xed\xa6\x7e\xac\x8e\xa6\xbb\xd2\xe1\x2b\x97\x22\x7d\xf4\x38\x96\xcf\x56\xcf\xa1\x6e\xbf\x20\x0e\x2e\x85\x16\x15\x97\x44\x02\x56\xad\x43\x45\x25\x63\x8e\xf9\xec\x3a\xbe\xb1\x59\xaa\x47\x44\x4d\x22\x35\xee\x02\xb3\x7e\x6a\xb8\xb3\x9c\x08\x29\x80\x38\xa8\xaf\xc6\xe9\x92\x3b\xa0\x9d\xd0\x49\x52\x48\x14\xa2\x34\xc4\x65\x0d\x1c\xe1\x7d\xa7\x7e\xbb\xe3\x4e\xe9\x75\xb2\xe4\x61\xbb\x19\x61\x2b\xc7\x4f\xae\xb3\xa1\xb3\x22\x7f\x9a\xa1\x7c\x1c\x80\x83\x4b\x41\x96\x5c\x2e\xfa\xe9\xad\x04\x66\x7c\x6d\x72\xf9\x32\xc7\x3a\x1e\x3a\x7e\x3a\xdd\xb2\xc9\xf4\xe0\xc0\xb4\xa1\x59\x31\xa6\x36\xa8\xdb\x0e\x88\x43\x7a\xf3\x1a\x77\xd8\x72\x27\x53\x97\x69\xf4\x02\xa6\x12\xfb\x3e\xeb\xe4\x92\x10\xad\x66\xe1\xba\xc2\xf7\xb9\xcc\x6f\xe9\x46\xf2\x3a\xd0\x73\xed\x20\x0e\x2e\x85\x34\xd4\x52\xfc\xc0\x3e\xd1\xbb\xdf\x98\x7d\x97\x32\xd9\x5c\x36\xf0\xcf\xfd\xba\x90\x42\x23\x50\x72\x8c\xf6\xa3\xfb\x35\xa6\xa7\x21\x22\x2e\x88\x83\x4b\xe1\xda\x2a\xca\x55\xf6\xc0\x5f\x0d\x78\xe6\xf1\x15\x4c\x6d\x77\xc2\xe2\x93\x51\xbe\x37\x06\x35\xed\x4d\x3f\x39\xfe\xde\xc2\x3c\x97\x82\x90\x02\x88\x83\x66\x05\xc7\x53\x49\x01\xb4\x3b\x3d\x49\x0a\xe8\xba\x68\xd2\x06\x77\x39\xd7\x8e\x58\x6c\x56\xd9\xfb\xdb\xef\x95\x86\xf3\x7a\xc4\xe6\xba\x73\x2f\x72\xca\x98\xd0\xdf\x4f\x52\x47\x0c\x01\x88\x43\x6a\xa4\xac\xa9\x3d\x58\xcc\xef\x8f\xe1\xc8\x84\x21\xd8\x2b\x40\x3b\x45\x82\x2b\xc4\x94\x8f\x37\x11\x2c\xdf\xf0\x63\xfd\x55\xce\x2b\x28\x09\x03\xe2\x90\xda\xb1\xed\x51\xd6\x0e\xcd\x1f\x5a\x3b\x31\xf2\xc8\xb3\x35\x36\x4e\xa4\x19\x2c\x62\x7d\x2a\x7f\x61\xee\x81\x83\xe5\xf2\xcd\x45\x00\xda\x34\x82\x38\xb8\x14\xd0\x9e\xb0\xe0\x63\xcb\xe7\x0d\xa0\x77\x5c\xac\xc2\x2b\xe9\xcc\x5d\x18\xf9\x70\x6d\x6d\x1d\xe5\xda\xf7\x07\x8d\x91\x6f\x34\x2a\xa0\x05\x02\xc4\xc1\xa5\xc0\x57\x66\xc4\xfc\xc4\xf7\xd7\x3d\xf6\x4f\xaa\x9e\xb1\xc2\x3f\x34\xd1\x5c\xaf\x2b\xff\x5d\x97\xd3\xc0\x08\x89\xff\x2b\x35\x84\x9e\x86\x90\x02\x88\x83\x66\x85\xd3\x25\x77\x40\x3e\xff\xe4\xe4\xce\xa4\xae\x1e\x9b\xa2\xa9\x75\x3f\x45\x25\x7f\x47\x3a\xfd\x03\x1f\x2d\x76\xff\x42\xf7\xd2\x1b\x66\x18\xab\x66\x3c\x36\x45\xbb\xaa\x88\x44\x09\x88\x43\x4e\xee\x0c\xa6\x87\x59\xbc\x3a\x17\xa4\x30\x31\x7a\xb4\x3b\xa3\x7c\x44\xe1\xc9\xfd\x86\x49\xb1\xb1\xaa\x66\xea\xa7\x4c\x43\x03\xfb\x2f\x06\xe8\x91\x72\x00\x87\x9c\xdc\x59\xab\x7a\xb1\x52\x8a\xca\x95\x7f\x97\xf7\x02\x2b\xa1\xbc\x50\xc1\xb7\x52\x59\x55\x19\x09\x99\xbf\x1f\x0b\x22\x5d\xc8\x63\x1d\x0d\x10\x91\x41\xdc\xff\xb5\x3b\xfe\xcf\x85\xd4\x3a\xc9\x58\xe5\xfb\xe3\x3c\x4b\xb9\x73\xbf\xf4\xcc\x03\xbd\xf8\xf0\x76\x65\x77\x0b\xf4\x5f\xd7\x4b\xa3\xbf\x2f\x92\x1f\x8d\x08\x40\xe4\x6a\x38\x6f\x7e\x19\xd4\x8a\xf1\x5b\xc5\x42\x1f\xe6\x57\x4c\x7c\x82\x55\xee\x61\xc3\xe4\x9a\x35\x4b\x66\x11\x5d\x31\x80\x13\x91\xf2\x9f\x6b\x38\x8c\x95\xee\x59\xf5\xee\x3e\x16\xf1\xd1\x87\xba\x16\x39\x6c\x87\xe6\x5e\x8c\x7b\xd5\xfc\x58\xd8\x65\x65\x29\x89\x8a\x1d\xfd\x78\xff\x4a\x3d\x86\x9e\x48\x37\x94\xca\x2a\x5d\x58\x53\xec\x56\xa0\xa3\xc2\x90\x32\x1a\x9b\x67\xfe\x9e\x15\xdd\x60\xfd\x5e\xc5\xf6\xee\x95\xff\xb5\x5c\x0d\xe8\xd3\xfe\xc9\xd5\x48\x21\xe5\x6a\x94\xd1\x22\x18\xab\x32\x4d\x19\x30\xdc\x8f\xa2\x42\x09\x08\xd1\x6d\xf1\xdc\x33\xe3\xf1\xee\x6c\xd1\x0d\x47\x18\x95\x12\xe8\xef\x9c\x45\xae\xa6\x03\x29\x57\x53\x54\xa9\xfe\x77\x5b\x86\x77\x35\xe3\x99\xbf\x4a\x7a\x76\xf6\xbb\x9d\xfc\x31\xda\x6c\x02\x6f\x92\xbb\xd1\x2a\x59\x05\x9c\xbf\x9f\x9c\xc9\x15\x11\xe4\x5c\x4d\x53\x38\x43\xee\xa5\x8f\xdd\xa8\xd1\x8d\xfe\x74\x3b\x7e\x26\xad\x85\x3a\x9d\x11\x64\x2e\x17\xe6\x24\xe9\x89\x83\x66\xd7\xd4\x35\xcf\xe4\x42\x0c\x72\xae\x06\x1d\x65\x9f\x5a\x2c\xa7\xe8\xd0\xfb\xa1\x29\x87\x63\x56\x1b\x86\x23\x39\x03\x4a\x9a\x82\x31\x2f\xad\x7e\xb3\x65\x85\xad\x41\xde\x99\x7c\x2d\x72\xae\x06\x3f\x27\xd2\x8f\xb6\xab\x98\x24\x83\x6f\xe5\xb0\xd3\xcc\xfc\x11\xf9\xe0\x36\x59\x09\xc3\x76\x04\x37\x9a\x79\x65\xdf\xbc\xd4\x99\x74\x9f\xee\x40\xce\xd5\x38\x0d\x86\x69\x95\xff\x31\x1c\x78\x90\x73\x90\x4e\x37\x6d\xe4\xe3\x5d\x7f\xeb\x51\xdf\xd3\x87\x9b\x71\x57\x09\xdd\x50\xc4\xa5\xc4\xcf\x2c\x57\x03\x92\xee\x89\xaf\x94\xee\x3b\x76\xfc\xda\xd6\xe0\x5c\x7e\xc4\x39\x41\x7d\xf4\x44\xb4\xf2\x59\x99\xf8\xa6\x51\x65\x9f\x64\x32\x4a\x04\xb1\x45\x04\x74\x4d\x02\xc4\xc1\x97\xdd\x9c\x3d\xe7\xc4\x7b\x8e\x9a\x46\x1f\x64\xd3\xe2\xf0\xf9\x1a\x42\x9e\xcb\x30\xbf\xcd\xf8\x74\x25\x2c\x22\x8c\x39\x43\x55\x4d\x1b\x3a\x1c\x07\x71\xf0\x65\x57\x94\x1d\x1d\x7d\x65\xad\xe0\xed\x9a\xb8\x05\x6b\xec\x0b\xc1\x96\x2b\x3a\x6e\xf4\xf2\x8e\xf8\x0a\xf5\x9a\x1e\x05\x7b\xfb\x14\xd0\xb5\x56\x10\x17\x2c\x8d\x72\xf1\xdf\xb8\xbd\x73\xfa\xfe\x21\xc5\xf7\xfd\x9e\x58\xaf\x09\xe9\xb1\xaf\xe2\xb6\x13\xcf\x1c\x56\xf5\x36\xdf\x14\xb0\xca\xb4\xd9\x9b\xb4\x85\x72\x4b\x20\x2e\x58\xfa\xdc\x7f\xc6\xa1\x2d\xff\x1b\x1d\x3f\xea\xcf\xac\x9b\x7b\xc9\xb7\xf6\xf1\x9e\x3d\xe0\x23\x22\xbb\xa5\x4a\x7f\x75\xbe\x8b\x21\xe8\xd8\x86\x8b\x39\x03\xe1\xd0\x41\x1c\xa2\x69\x8a\xd4\xa9\x72\x35\xa0\xe9\xe4\x24\x25\xf0\xe6\x32\xce\x5f\x23\x9d\xfc\xac\x91\x1a\xba\xb5\xb5\x64\xab\x27\xe4\xd0\x45\x24\xd3\x8f\x79\x71\xe4\x3b\xef\x4d\xed\x11\x46\xe8\xf5\x66\x10\x07\x57\x02\xed\x2e\x66\xbe\x7d\xe9\x7e\x14\x5b\xbe\x7d\x72\x83\xc4\x79\x4f\x01\x34\x99\xcb\x4d\x68\xea\xdd\x5f\xfe\xfa\x5c\xc1\xba\x11\x07\x35\x63\x01\x71\x48\x7b\x71\xd6\x9b\x84\xed\xa4\x7a\xc2\x7d\xea\x24\xc7\xe7\x67\xf7\x78\x3c\xdb\xaf\x32\xd6\xc8\x3a\x88\x1c\x5b\x35\xb0\xf3\xa5\x49\x78\x43\x7b\x71\x00\x07\x57\xc2\xaf\x0c\xef\xa2\x9e\x14\x45\x01\xa1\x19\x8c\x61\x99\x2c\xb7\x17\xb8\xbc\x29\x55\x07\xe2\x53\x23\x4d\x5f\xd5\xeb\x98\x53\xbb\xa0\x71\x00\x71\x70\x25\x44\x4c\xbb\xcb\x8b\xb2\x93\x70\xff\x4a\x91\x2e\x10\x48\x8b\xfc\x5c\x6a\xbe\xbd\x4a\x9d\x5e\xa9\x2c\x55\x21\x6c\xa1\x34\x78\x51\x15\xa1\x04\x10\x07\xb5\xcf\x39\x55\xae\x06\x34\xc3\x9f\xa4\x84\xb4\xb7\xbc\x5c\x8c\x09\xf2\x12\x2c\x56\x65\xcc\x72\x79\x29\x17\xf7\xb1\x63\x09\xd4\x8f\x18\xaa\x0e\x19\xfb\xf8\xd0\xcb\x88\xa0\xf3\x50\x10\x07\x57\xc2\x6a\x83\x77\xab\xff\x47\x4d\xe5\xe8\xc1\x97\xab\x5f\x72\x6c\xf8\x4a\x82\xec\xe9\xbf\x10\x86\x7f\xfb\x35\x65\xad\x49\x66\xa1\xb1\x88\x88\x0b\xe2\xe0\x4a\x38\x9f\x9c\x15\x71\x68\x5e\x9e\xf6\x9d\xf6\xf3\xa8\xd6\x4e\x41\x6f\x6b\x7e\xc3\x95\x06\x2b\xf1\x7b\xdc\x3a\x6b\x3f\xc2\x26\xfe\x58\x20\xe2\x82\x38\xb8\x12\x42\xe7\xca\xab\x54\x9f\x5e\xaf\xa6\xef\xab\xac\xda\xbc\xe2\x6a\x43\x67\x5a\x11\xde\xdc\x61\xb2\x8b\xfe\xb1\xe0\xa6\xb4\xb4\x39\xf4\xe2\x13\x88\x83\x2b\x41\x92\xb3\x39\xdb\x84\x0a\xef\x05\x45\x9f\x6f\x7d\xea\xaf\xbf\xf1\xfd\xba\x96\xa6\x94\xf2\xdf\x3e\x7f\xc4\xfe\xf2\x79\x0a\x85\xdf\x0e\xb1\x15\x07\x71\x50\xa3\x8c\xd3\xe5\x6a\x40\xab\xee\x49\x52\x10\xea\xd1\x61\x65\xec\x90\x20\xee\xca\x9b\xb1\xc7\xfa\xf5\x80\xa5\xab\xa8\xc3\x2d\x59\x7d\x01\xfb\xa2\x71\x85\x6c\x56\xef\x16\x94\x10\x05\x71\x70\x29\xf8\x6c\xd6\xe3\x35\x4a\xad\xbb\x7d\xcf\x5d\xf7\xe1\x13\x0e\x78\x44\x14\x84\x13\x4d\xab\xf0\x53\x0a\x25\x7b\xc9\x30\x00\x7f\xd3\x12\x11\x17\xc4\xc1\xa5\xc0\xad\xd1\x37\x37\xe5\xe1\x93\x39\x76\x09\x5b\x74\x94\x79\xee\x38\xc3\xad\x26\x7d\xcf\xe1\x1e\x4b\xbf\x78\xc3\xd4\xfe\xad\xfb\x50\x5b\x73\x10\x07\x97\xc2\xd5\xc1\xf9\x92\x2b\xcb\xc3\x28\x5e\xda\xc1\x0d\xd2\x66\xb7\x51\x97\x6d\x8a\x8f\x6e\x72\x70\x3f\xc9\xd8\x6e\xdb\x8a\x90\x49\xe8\x46\xc4\x05\x71\x70\x29\xf0\x2d\x59\x87\xfd\x54\x93\x51\xb2\xf8\xc3\x97\x33\x7a\xe7\xdc\x05\x34\xc1\xa5\x9b\xa9\xe8\xa8\xb4\xca\x72\xfd\x78\x7f\x34\x02\xb3\x20\x57\x06\xe0\xa0\x46\x19\xa7\xcb\xd5\x80\x76\x42\x27\x49\x21\xc8\x7c\x66\xe9\x35\x0a\x57\x4a\x6b\x73\x15\x4f\x69\xc0\xf7\x62\x63\x57\xea\x36\xc5\xb6\x96\x91\x6e\xf4\x3f\x0e\x49\xb7\x59\xa1\x1a\x2b\x10\x87\xf4\x3a\x26\xbf\xc1\xd3\xc1\x63\x91\xa8\x36\x2f\x8d\xad\xbf\xe8\x11\xb1\x2a\x18\x82\x5a\xc9\x72\x83\x15\xbb\xbb\xed\xce\x6f\x18\x23\xa0\xa6\x5a\x20\x0e\x2e\x05\x6a\xeb\x1a\x15\x91\x0c\x26\xce\x5e\x33\x4f\xda\x84\x2b\x75\x97\x9e\xb1\x45\x1b\x3b\x69\xce\x6f\x6b\xb9\x4b\xa2\x7e\x7d\xe1\xc5\x8f\x88\x0b\xe2\xe0\x52\xb8\x82\xfd\xa7\xc4\xc2\x0d\x37\x22\xdb\x97\xff\x36\x1d\xc1\x92\x70\xa8\xcc\x18\xe6\x4f\x4c\x9b\x80\x19\x9c\x5e\xf9\xf5\x67\xde\x50\x67\x64\x10\x07\x97\x02\x46\xb0\xeb\x21\x25\xef\x86\xd4\xad\x9d\xe8\x7c\x7a\x86\xf4\xd5\xbc\x79\xfe\x37\x39\xf1\x34\xcb\x98\xb1\xbd\x2f\x95\x37\xcc\x5e\x23\xa4\x00\xe2\xa0\x59\xe1\x74\xb9\x1a\xd0\xee\xf4\xc4\x7e\xe9\xa3\xe7\x9f\x60\x25\x38\xa6\xf0\x7c\xf8\xc1\x7d\x8e\x28\xe2\x10\xcb\xd4\x48\xeb\x95\x40\x51\xaa\xa8\x39\xf5\x78\xc2\x93\xb8\x16\xa8\x6d\x0c\x80\x83\x4b\xc1\xf8\x62\x19\x3f\x61\xaf\xc5\xf5\x88\x5d\xd4\xe2\x1f\xce\x16\x4b\x33\x5b\xf2\x11\x74\x18\xef\x87\x27\x8d\x18\x8e\x30\xf9\x09\xa0\x9b\x9a\x20\x0e\xe9\x8e\x13\x6f\x7e\x3a\xd1\x10\xbe\xca\xee\x53\x5c\x66\xb4\x1b\x6b\x2a\x8b\x7e\xfe\xd3\x22\x75\xe5\xef\xbb\x2c\x2f\x5b\xf3\x7d\x36\x81\x5a\x39\x82\x38\xb8\x14\xaa\x47\x5f\x19\x5e\x3d\x32\xd5\xc4\xd6\x5b\x4a\x17\x50\x68\x64\x15\x35\x1e\x5c\xf1\x23\x61\xd5\x5d\x11\x7e\x9b\xb8\x99\x1b\x02\xdd\xd9\x05\x71\x70\x29\x94\x3c\xff\x79\xfd\xb5\xfd\x92\x37\x4e\xe4\xeb\x5d\xce\x95\x7a\x93\x99\x71\xff\x76\x17\xd2\x55\x2f\x47\x92\x94\x24\xbc\x2f\x23\xc4\x08\x29\x80\x38\x68\x56\x38\x5d\xae\x06\xe4\xf3\x4f\xce\xd5\x60\xac\x73\x37\xb0\xeb\xc5\x09\xfd\xe4\x08\x8b\xdf\xaf\x41\xff\x35\x1d\xf0\x4e\x02\x35\xe8\xd6\xf3\x5c\x3f\x76\x8d\x68\xaf\xbb\x59\x88\xbc\x07\x88\x43\xce\xd5\x10\x5f\x11\xd8\x5b\x9c\xc2\xd3\x25\xc9\xe4\x7b\xe9\xa6\x49\xdf\xa7\xf6\xd6\xd9\x3e\x81\x8f\x9b\xcb\xa0\x10\x95\x4f\xcc\xff\x03\x54\xbd\x05\xe2\x82\x65\x51\xce\xff\x37\xb2\xb1\x6f\xbf\xdf\xa7\x7d\xdf\x4f\xcf\x9d\xc8\x3e\xeb\xea\xe4\xa6\xc8\x7c\x59\x17\x1e\x71\x15\x2e\xa3\xb4\x49\x1d\x16\x79\x7a\xc9\x0a\x11\x19\xc4\x21\x8f\x46\x80\xf0\x27\x39\x09\xa9\x73\xe4\x9a\x0f\x6a\xb4\x33\x09\xeb\x17\x28\x06\x71\xdf\x65\x4b\xbc\x1e\x67\x74\x91\x99\xe1\xc0\x1c\x96\x85\x72\x35\x2b\xf2\x78\x1a\x39\x7d\xc9\x31\x52\xab\x2f\x49\x3e\x3f\x1c\x0c\x63\xaa\xc6\xf1\xf1\x74\x1a\xb5\x5f\xe9\x4a\x73\x19\xcc\x50\xd8\xff\x37\x57\xf3\x78\x6b\xc8\xc9\xe2\x27\x0a\xcd\x36\x6e\x89\x73\x07\x96\x02\x4f\xa1\x13\x8f\x58\xcb\xa3\x89\x9d\x73\x37\x3f\x7d\x32\x0c\xac\xfe\xb7\x6e\xc5\xcb\xec\x53\xb4\x24\xea\x03\x81\xf4\x7d\x8e\x09\xee\x80\xd4\xdb\x43\x1e\x54\x41\xc7\x4d\xc9\x23\x97\x47\x86\xb6\x44\x1b\x2c\xd4\xa5\xa4\x70\x70\xfe\x17\x72\x35\x01\x18\xa7\xfb\xb4\x10\x74\x14\x8c\xe0\x1b\xb4\x01\xa1\x91\x32\x01\x48\xb9\x1a\x62\xbe\x61\x3d\x96\x0a\xfa\x92\x82\xa2\xc1\x0a\xf6\xc1\xc3\xf6\x75\x86\xd1\x3e\x63\x07\x5c\x54\xed\x37\xae\x39\x1f\x05\x70\xd7\xcf\x22\x57\x83\x72\x07\xfe\x57\x09\x58\xea\xa4\xf6\xf9\xe8\x38\x13\xaa\x31\x6d\x5c\xdf\x0d\x1a\xb4\xb8\xdf\x63\x44\xd1\xdf\xcd\x62\x9d\x8e\x65\x1a\x7c\xc6\x7a\xeb\x4c\xae\x7c\x20\xe7\x6a\x2a\x4a\xec\x75\x6d\x1b\x34\xa4\xc4\xba\x59\xc4\x9f\x85\xc6\x3e\x41\xff\x24\xfd\x34\x5b\x00\xfb\xd6\x17\xc9\x30\x0f\x9e\x23\x5d\xf7\x33\xb9\xe0\x72\x0f\xe9\xcf\x3e\xc4\xad\xcf\x90\x0f\xfb\xb3\x54\x39\xfa\xca\xdb\x1a\x5b\xf4\x3a\x46\x7c\xab\xee\xd7\x10\x81\xde\x1c\xf1\x0d\xb9\xad\x42\x81\xbf\x67\xf2\xb5\xc8\xb9\x1a\x54\xfc\x00\xdc\xc1\x47\x8b\x97\x4c\xf0\x7e\x4b\x97\xf5\x35\x8d\xc9\xa0\x0c\xae\x14\xd8\x7a\x62\x5f\x8e\xd3\x8d\x79\x58\x2f\x4f\x7e\x66\x49\x13\x90\x86\x4e\x5a\xff\x76\x3f\x8a\x6b\xee\x27\x11\x05\x5a\x44\x5a\x5d\x8e\xb8\xac\xca\x15\xfe\x6d\xf0\x96\xd7\xa1\x87\xea\xe2\x8b\x8c\x0c\xbb\x44\x63\xe8\xee\x30\x88\x83\xaf\x7f\x41\x7f\xea\xc6\x75\x71\x22\x69\xcb\x1f\xfd\x0e\x2c\x49\xa5\x63\x90\x4a\x57\xd9\x7d\x9d\xdd\xab\x6f\x63\x96\x30\xce\x25\xef\x71\x1b\xda\x62\x01\x38\xf8\xfa\x37\x23\x66\x1b\x38\x29\xff\x90\xbf\x69\x4a\x6e\x7e\xe4\xeb\x5e\xf2\xa4\xa3\x90\x7f\xd8\xd5\x54\xec\x5a\xea\xd1\x7e\x9a\xeb\x6a\x50\xbb\x3b\x10\x07\x5f\xff\xfa\x36\x7f\x05\xa0\xfa\x75\xf1\x1e\x15\x5c\xc3\xa6\xf6\xea\x39\x87\xf9\x42\x4b\x6b\xe8\x2a\x76\x2d\xf1\xa1\x6e\xc3\x14\x45\x2e\xf4\x60\x3a\x88\x0b\x96\x96\xfa\xcf\x38\x28\x36\x28\x93\x4d\xfe\xb1\xc4\x9c\xe5\x4a\x2d\xd5\x2a\xa4\x71\xdc\x4f\xb4\xaa\xab\xf6\x27\xc9\x14\xfe\x21\x29\xaf\xa1\x8e\x1a\x82\xb0\xca\x20\x0e\xd1\x8e\x24\xe0\x54\x49\x13\xd0\xef\xfa\x24\x25\x94\x9c\x9f\xc0\x72\x40\xc1\x7a\x85\x33\xe0\xd1\x42\xc9\xd5\xae\xb7\x78\x35\x7c\xc0\x89\x8a\xd2\x53\x68\x3f\x87\xd3\x31\xc6\x9d\x07\x31\x02\x20\x0e\xae\x04\x1b\xf5\xb1\x8e\x3b\x7f\x27\xbb\x38\xed\x07\x19\xaf\x38\xbe\xfb\x44\x25\xf7\xba\x4e\x45\x43\xc0\xcf\x34\xab\xfd\xee\xbb\x14\x4e\xe8\x51\x1e\x10\x07\x57\x42\xd0\xdb\x66\xbe\x3f\x9d\x34\x4f\x1c\x96\xc8\xd2\x44\xd0\x97\x4a\x5f\xa6\xfd\x12\x7f\x43\xd8\x8d\xdd\xea\xcf\x2d\x8b\xf2\xe5\x71\x10\xa4\x30\x00\x07\x57\x42\xd6\x42\xeb\xab\x62\xc6\x59\x8e\xdf\xf5\xe6\x66\x0b\xf1\x5d\x1f\x3e\x5f\x76\xf2\xba\xe4\x4d\xf0\x24\x65\xef\x33\x25\xd6\xa2\xe7\x53\x44\x5c\x10\x07\x57\x82\xa4\x51\x42\xfd\xc4\xc8\xc3\x97\x7c\x32\x9c\xd7\xc3\xda\x8d\x36\x98\x8f\xa4\x1f\x60\x4f\x3e\x8f\x99\x34\x78\x86\x1b\x2b\xcb\xfb\x02\xa1\x04\x10\x07\x35\xa6\xb9\x73\x1a\x25\x80\xa6\xda\x93\x94\x90\xd3\x75\xef\x81\x1c\xe3\xd2\xfa\x73\x85\x9d\x5d\x66\x4e\x8e\x06\xe1\xbb\x9d\x3f\xdb\x6f\x31\xe6\x6b\x7d\x6e\xba\xa5\x15\xe7\x84\x0f\x25\x3c\x01\x1c\x5c\x09\x68\x49\x8d\xaa\xa8\x1b\x18\xe7\xe8\x7d\x0b\xdf\x60\xef\x4c\x6b\x68\xca\x15\x65\x7e\x5e\xe4\xd9\x26\xc4\xc2\xe7\x5f\x96\xb3\x61\x80\xce\x03\x01\x1c\x5c\x09\x57\xbe\x98\x13\x92\x4b\x95\x6e\xbd\xc4\x4c\xc8\xaa\x9f\x70\xf8\x2d\x95\x2d\xdb\xc4\x73\xc0\x96\xc9\xf8\x8b\xfc\xbc\x94\x0c\x8a\x10\x64\x63\x00\x1c\x5c\x09\x72\x1c\xd5\x12\x34\xc3\xee\xd8\xb2\xbc\x8e\x76\x89\xcb\x2d\xc5\x18\xef\x1b\xbd\x5d\xb3\x84\xd5\xe3\xc2\x0d\xe8\x74\x99\xd3\xde\x40\x09\x65\x00\x07\x57\xc2\x94\xcb\xe6\x12\x26\xd6\x8f\x30\xf6\x0f\xe6\x28\x92\x39\x35\x64\xc1\x89\x92\x8d\xd1\x49\x26\x92\x19\x3e\x0f\x13\xe4\xc6\x3f\x8a\x22\xf6\xc4\x20\x0e\x6a\x41\x71\xba\xa4\x09\x68\xf9\x3b\xf1\x8d\xb9\x09\x65\xdc\xca\x2e\xa9\xba\x97\xc1\x22\xa4\x17\x19\xaf\x5d\x59\xb7\xbe\xfd\x84\xc5\x3c\xe0\xa7\xf4\xed\x1d\xdb\x0f\xea\xb2\xd0\xed\x34\x10\x07\x97\x42\x69\x92\xc3\xb8\xb3\xb1\x9a\xf3\x50\xa7\xd8\xcb\xc8\x5b\x01\x62\x34\xc6\x66\xf1\x59\x03\x38\xf7\x3f\xac\xe9\xe5\x45\x59\xaa\x42\x5d\x40\x41\x1c\x5c\x0a\x4a\xae\xa4\x19\xee\x05\x51\x64\xdb\x83\xb8\x68\x94\x7e\x51\x5d\x71\x45\xaf\x25\x72\x07\x5f\xba\xf0\xc8\x84\x06\x36\xaa\xb3\x38\x21\xe2\x82\x38\xb8\x14\xc8\xb8\x30\x0f\xe2\x4c\xc2\xba\x66\x78\x9c\x5d\xfd\x2c\x5c\xef\x73\x46\x6d\xdf\xf5\xf7\xf8\x61\x24\x86\xfa\xb6\xdf\x74\x37\x1a\x6a\x5b\x06\xe2\xe0\x52\xc0\x09\xf4\xd0\x8e\x70\xab\x52\x98\x2c\x18\x2b\x50\xaf\x6c\x56\xd0\x51\x68\x75\x4b\xd2\x3b\xc2\x47\x21\xb4\x72\x36\xfb\xa0\x9f\x8a\x90\x02\x88\x83\x5a\x50\xdc\x3b\x95\x14\x40\x5b\x92\x13\xdb\x4f\x9f\x8b\xc5\x78\xc5\x6e\x72\xec\x9b\x84\xfa\x9a\xa7\x27\x49\x2d\xbc\x2d\x4f\x4a\x90\xcf\x78\x55\x93\x5e\xfe\x25\xce\x60\x39\xd4\x11\x0e\xc4\xc1\xa5\x50\xfd\x30\xad\x50\x52\xcf\xfc\x93\x94\xf5\xd7\x50\xba\x1b\x0b\x1f\xfd\x26\x31\xef\xd8\xf7\xb3\x12\xe2\xa9\x28\x50\x39\x13\xf9\x7e\x80\x9c\x27\x80\x83\x4b\xe1\xfd\xe0\xb5\x44\xe2\xc4\x2a\x26\x96\x64\xb1\xec\x08\xf7\x54\xa1\x46\x22\x45\x85\xb9\xec\x3c\x2f\xc9\x7e\x45\xd9\x1c\xa2\x5a\x26\xa8\x47\x32\x80\x83\x4b\x81\xfb\x0d\xd7\x6b\x59\xe2\x43\x8c\x3b\x16\xdf\x1b\x51\x29\xd1\xf9\x77\x3b\x19\xf8\x99\x1e\xb1\xa7\xb0\x5d\xd5\xb4\xc8\xea\xd4\x56\x86\xf2\x72\x00\x0e\x2e\x05\xda\x20\x49\x5d\x7a\xbe\xae\x20\xd6\xdb\xd5\x0b\x37\xb9\x46\xac\x23\xbf\x60\x8f\x86\x6b\xbf\xef\xd1\x7b\x82\x9b\x68\x26\x40\x9a\x8e\x90\x02\x88\x83\x66\x05\x40\xd2\xc4\xe0\x74\x2e\xeb\x64\xa7\x6c\xaa\x6f\x73\xe8\x98\x9b\xaf\x12\x5e\x3a\x70\xc9\xf4\x5a\x07\xad\x15\xe9\xc0\x35\xdd\xa8\xeb\x36\x31\x76\x7d\xad\xa1\xab\x0d\x6f\x11\xae\x13\xc4\x21\x3b\x65\xdd\xed\xbf\x0a\x61\xa9\xf7\xf0\x1d\x37\x23\x37\xdc\x43\xf2\x9f\x29\xe0\xc5\x33\xb4\x0d\xf1\xd3\xe3\x31\xe5\xf7\xfe\xb6\x6d\x2c\x43\x44\x06\x71\xc8\x4e\x59\x42\xca\xa5\x81\xc7\x86\x9a\xcd\x82\x76\xe6\x78\x2c\xad\x35\x94\xdd\x0d\x9d\x49\xef\xc1\x61\xe3\x8a\xa4\xfd\x01\x2b\x17\x15\x29\x22\x32\x88\x0b\x96\x3d\x0f\x1b\x8d\x91\xed\xc3\xae\xed\xa2\x1b\x12\xb5\x57\x96\xc4\x08\xf0\xee\x2e\x5c\x2a\x93\xe2\x5f\x72\x2f\x23\x2c\x11\x27\x65\x39\x6a\x6b\xa4\x46\x94\xac\x80\xb8\xff\x8b\x1c\x10\x78\xa3\x06\x61\xad\xd3\xf0\xa2\x5d\x26\x04\xb7\x6f\x8f\x4e\xb3\x8c\x87\x7e\xdc\xd7\x79\x4c\xc8\xf0\xd5\x66\xd0\x29\xc8\xeb\xf3\x51\x7c\x01\xa5\x8b\xfa\xbf\xd6\xba\x32\x91\x49\x59\x5d\x25\xb7\xd8\x6a\x73\x23\x62\x3c\x6b\xb8\xee\x9c\x8d\x47\x13\xaa\xfd\x0c\x29\xbd\x40\xeb\x95\xd4\x1b\x9e\xe7\xff\xdd\x45\xb3\xad\xbc\x9a\x22\x7c\xed\xe1\xf4\x0a\x2d\xdb\xd4\xda\xe7\x63\x2c\x2b\x1d\x09\xa7\x75\x88\x94\xc0\x0a\x96\xad\xcf\x1d\x7a\x9e\xff\x35\x6b\x0d\xfa\xb4\x7f\xac\x75\x07\x92\xb5\x36\x3a\x72\xbb\x37\x5a\x47\xdc\x6e\xf0\xc0\x64\xba\x2d\x18\xcd\xb6\x77\xcd\xc7\x3d\x5d\xbd\x3d\x47\xaf\x80\x57\xbd\xfb\x46\x1e\xf1\x59\x58\x6b\x29\x24\x6b\x3d\xbf\x6b\x13\xc8\x5b\xe8\x44\xb1\x1e\x58\xaf\xc1\xe9\x45\x39\xfe\xd9\xcd\x3f\x96\x61\x43\xe0\x7c\xbe\xda\x39\x67\x59\x97\x0b\x0d\x67\x72\x42\x8f\x6c\xad\x9d\x85\x0b\x35\x45\xda\x83\x74\x18\xd8\xac\xff\x70\x70\x98\x2e\xc7\xea\xf5\x07\x37\x5b\x73\xf0\xb3\xb7\x8e\xa0\x4c\xe8\x3d\x3a\x03\xb3\x19\x29\x2b\x85\x6c\xad\x45\x30\x1b\xc3\x7a\x36\x51\xc3\x04\xb8\xa7\x37\xc7\x17\x1b\x51\xaf\xdd\x37\x14\x68\xec\xc9\xd7\xa1\xff\xd2\x62\x68\x31\xd3\x4a\x78\x26\x5f\x8b\x6c\xad\xdf\xb1\x84\x1e\xd2\xfe\x71\x96\x0a\xe4\xcf\xb6\xef\xce\x18\x8d\x6d\x5c\xda\xd9\x30\x78\x82\x9f\xa5\xb4\x28\xb9\xb2\x5b\xe9\xd6\x79\x66\xd6\x1a\xa4\xa1\x93\x16\x4c\x1b\xdb\xe2\x3f\x35\x4e\xb3\xc7\x85\xe5\x31\x96\x3c\xa2\xa8\xfe\x44\x54\xfc\x49\x3e\x97\xeb\xf1\x3b\xe9\x5c\x5e\x6e\xf9\xd6\xec\x42\xc6\x07\xc0\xc1\x17\x4c\x7e\x9a\xce\xb8\x21\x75\x21\xea\x5f\x51\x36\x7a\x1c\x2a\xde\x22\x65\x6d\xc7\x33\x0b\xf1\x0d\xb1\x37\xfe\x04\x9e\x9f\x96\x61\xc5\x43\xc4\x05\x71\xf0\x05\xf3\x16\xc5\x0f\x7d\xb5\xdd\x6e\xeb\xbe\xa7\xcd\x3a\x1f\x1e\xde\xbe\xd9\x39\xe4\x3e\x35\xaa\x1e\xce\x61\x17\x14\xda\xe7\x7d\xfd\x00\xba\x37\x00\xe2\xe0\x0b\x66\xc0\x2f\x07\x91\x28\x1e\x3b\xb6\x94\x02\x51\x74\x6b\x21\xad\x47\xce\x0e\xf6\x29\xf8\x45\xd4\x44\x4d\x91\x4e\x13\x2c\xfa\xcc\x92\x88\xb8\x20\x2e\x58\xfa\xbf\xed\xbd\xdf\xea\x7c\xea\x41\x27\x0e\x54\x75\xfd\xd9\xf4\xd4\xf0\x70\x6a\x54\xe2\xfc\xa8\x60\x43\x38\x3f\xb5\xcc\xdc\x77\x8c\x91\x59\x4d\x77\x84\xa1\x02\x71\x88\x76\x10\x1d\xa7\xb2\xd6\xa0\xdf\xf5\x49\x4a\xf0\x2f\xc2\x47\xfb\x3c\x3e\x17\x5e\xfe\xf2\xe5\x8c\x54\xc3\x3b\xe7\xab\x52\x16\x97\x86\x54\x1d\xc4\x5f\xf9\xa1\xff\xe6\xc4\x5d\x85\xae\x47\x83\x38\xb8\x12\xa2\x15\x03\xa3\xe7\x3b\x07\x1f\x84\xf8\xf8\x7c\x6f\x7f\xca\xb5\x27\xd1\xd9\x25\xf4\xf8\x5b\xfd\xc8\x95\xb9\x5f\x2a\xb1\x2e\x7c\x52\x50\x0f\x55\x00\x07\x57\x42\xed\xeb\x27\x9f\xd6\x3f\x97\x8d\xeb\x6b\x74\x5b\xe5\x4b\xf0\xd9\x13\xdb\x08\x60\x6e\x9f\x0b\xec\x6b\x46\xff\x79\xff\xae\x8d\x0c\xf4\xfc\x10\x88\x83\x2b\x81\x95\xd2\xe1\x9e\x62\x9b\x5b\x31\x63\xda\xe4\x07\xb2\x9e\xdb\xa2\xbd\xe2\x59\xea\xfe\x86\x4a\xda\x73\xcc\x77\x50\x2a\x56\xa7\x7e\x21\xe2\x82\x38\xb8\x12\x16\x08\x24\x92\xf3\x8c\x1d\xbf\x99\x3d\x5b\x6c\xfe\xf5\xfb\x8f\xbb\xf4\xcb\xb4\x31\xb9\xce\xbc\x5d\x32\xfe\x40\xa7\x25\xca\x27\x59\x08\x25\x80\x38\xa8\x31\xc8\xa9\xac\x35\x68\xaa\x3d\x49\x09\xdd\x42\x17\x3e\x73\x6e\x6a\x26\x6c\xe1\xe9\xec\x60\x0a\x4a\x38\x5e\xf9\xe2\x34\xca\x80\xcb\xb3\xf8\x98\xc9\x5a\xe5\x89\x8a\x33\x01\xd4\xd3\x07\xc0\x21\x3d\xe7\x83\xe9\x5c\x4d\x7a\x51\xe1\x99\x46\xcf\xcc\x63\x97\x4b\xa8\x5b\x2d\x9f\x30\xc7\x67\xcd\x63\x49\x57\xa3\x8f\x77\x3c\x74\xa7\x87\x11\x71\x41\x1c\x5c\x09\x44\xc1\xf7\x7d\x25\xc8\xfb\x65\x17\xde\x65\xe1\x35\x05\x8d\xb8\xf5\x4e\x6b\x12\xc7\x7e\xaa\x2e\xe6\xff\x41\xf8\x45\xb4\x2a\x03\x2a\xd5\x07\x71\x70\x25\x5c\x24\x2e\x4b\x2a\x20\xd0\xec\x33\x9e\xcb\x9d\xc8\x75\x7c\xdf\x43\x82\x4d\xbc\xf7\x20\x2e\xe1\xc9\xb4\xf0\x6f\x07\xf4\xd8\x29\x5c\x44\x5c\x10\x07\x57\x42\x2e\x91\x95\x62\xa2\x04\x7d\x74\xfe\x5e\x88\x3a\x2a\x6a\xc6\xf0\xf2\x20\x8a\x59\xfc\x47\x55\x4a\x92\xef\xcb\x96\x5f\xfa\x2f\x93\x21\x36\xd1\x20\x0e\x6a\x01\x70\x3a\x6b\x0d\x5a\xfe\x4e\x92\x02\xe5\xa8\xb2\x8b\xb6\x93\x9b\x18\xdf\x77\x0c\x37\x61\xea\xc9\xcd\x11\x5d\x79\x7c\xb6\x73\x2b\xea\x6d\xb7\xf9\xf0\x3f\x09\x36\x3a\x20\x86\x00\xc4\xc1\xa5\xe0\xcb\x3e\x28\xbc\xf5\xa2\xde\x84\x3a\x1a\xdf\x55\xcb\xe8\xe8\xe3\x55\x2e\x77\xab\x4e\x2d\x21\x01\x8d\x17\xc9\xce\x5f\x06\x32\xaa\xa0\x06\x1e\x00\x0e\x2e\x05\xc6\x51\x7d\xb6\xa4\xf4\x90\xc0\xf4\x8c\x4b\x25\x51\xab\x1a\x6b\x56\x74\x57\x07\x19\x64\x30\x14\x62\x92\xfc\xf3\x97\x7a\x3f\x40\x0d\x44\x41\x1c\x5c\x0a\x73\xdf\x5f\xe8\x65\x35\x45\xf9\xb3\x3e\x96\x22\xf3\xe7\x68\x0e\x36\xbe\xb1\x1d\x8b\xf2\x3c\x5a\x8c\xa2\xd2\xdd\x44\x6d\xe2\x08\x2a\x7b\x02\x71\x70\x29\xa4\x3f\x48\xe7\x75\x3f\x7a\x58\xc5\x88\x15\xf1\xed\x89\x86\xe8\xaa\xd6\xa4\x51\x4a\xb8\x1e\xc5\x96\x68\x97\x51\xb2\xa2\xba\x48\x1e\x42\x0a\x20\x0e\x6a\x01\x70\x3a\x6b\x0d\xda\x92\x9c\x78\x08\x2d\xac\xfc\x4e\xff\xb7\xb5\x46\x70\xcd\x8d\x17\x71\xde\x0f\xde\x15\x18\x35\x54\xea\x4d\xf1\x89\x6c\x3a\x7d\x21\xc6\x4d\xbd\x03\x1d\x16\x83\x38\xb8\x14\x34\xf6\xdd\xb3\x9e\x7d\x1a\xb0\x97\xeb\x1a\xe9\x4e\x20\x4e\x1d\xff\xeb\x2a\x5d\x9a\xa7\xf2\xb6\x25\x32\xee\xba\xcb\x98\xdc\x10\x54\xe3\x01\xe2\x90\x12\x6e\x13\xea\x9a\x0e\xef\x34\x73\x1d\xa9\xb6\xb4\x38\xc2\xbb\x1b\xd6\x2c\xca\x48\xc5\xef\xf2\x48\x6c\x09\x1c\x6d\x1d\x52\x64\x0b\x40\x09\x37\x00\x07\x97\x82\xd5\xc0\x53\x59\x7f\x5a\x0d\x54\xeb\xc4\x83\xb5\xd5\xaf\xad\x1b\xa5\xf5\xa3\x95\x1c\x69\x22\xf3\x9b\xe6\x9a\x75\x83\x9a\xa5\x5d\x88\xb8\x20\x0e\x2e\x85\x9e\x2b\x9c\xb3\xc1\x86\x7b\x5a\xfc\x68\xd7\x87\x58\xdd\x66\x66\x3a\xc6\x7e\x47\x2c\x46\x5e\x98\xda\x5c\x74\x2d\xdb\xdb\x27\x67\x43\x48\x01\xc4\x41\xb3\xc2\xe9\xac\x35\xc8\x65\x9d\x6c\xad\x7d\x65\x8d\x1e\x24\x34\x3d\xd5\xfe\x9e\x55\xac\x5a\xfb\xeb\xc1\x96\x9f\x16\x7f\xce\xdc\xad\xb0\x41\x12\xfb\xc5\x16\x87\xc9\xaf\x66\x08\x9b\x0a\xe2\x90\xad\xf5\xd5\xca\x6f\xd5\x82\xb6\x21\x47\xcb\x1b\xb4\x47\x4e\x4a\x69\xa3\x97\x6f\x15\x2a\xe3\xcb\xe2\xab\xd9\xbc\xd4\xd9\xa1\x55\x25\x99\x42\x44\x06\x71\xc8\xd6\xda\x2e\x48\x45\x1b\x7b\x03\xdb\xf0\x1c\x47\x80\x6c\x8f\x0b\x8d\xc3\x1a\x1f\xab\xcf\x88\xc5\xd2\xf3\xa7\x76\x84\x36\x98\x52\x4a\xee\x88\xc8\x20\x2e\x58\xf6\x22\x6c\x34\xf2\xc6\x57\x4b\x05\xbf\x6a\xd4\x50\x3a\x17\xe0\xdf\x51\xea\x4f\xf1\x49\x98\x2b\x16\xf7\xb1\xd9\x4e\x65\xa4\x2c\xd3\xa4\x28\x57\x41\x58\x6b\x10\xf7\x7f\xa5\x08\xff\x5a\x6b\x69\x93\x80\xe9\xf3\xef\x2f\x94\x60\xeb\x5c\x7f\x6d\x85\x6e\x58\x94\x18\x6f\x36\xea\x96\x6f\x97\xab\x42\x23\x2e\x72\x73\xb9\xf7\xee\xbf\xd6\xba\x7b\x20\xe8\x9a\xe7\x6a\xcf\x3e\x6b\x08\x67\xb7\xc6\xa2\xd2\xbb\x61\xb5\x6e\xf1\x16\x14\x71\xdc\xf7\x07\x6f\x73\x7c\xbe\xff\xf9\xb7\xeb\xc1\xa1\x0c\xc1\xef\x3e\xba\xbf\xb5\xe7\x15\x1c\x73\xa5\x8a\xbe\xf7\xf8\x1a\xdf\xd2\x7f\x5d\x93\x12\xf3\x68\xf3\x06\xab\x53\xe2\x33\xd1\xff\x35\x6b\x0d\xfa\xb4\x7f\xac\x35\x8a\x0c\xdc\x7f\xd5\x11\x6e\x6b\x7c\xf5\xd3\xe4\xb0\xba\x33\xe0\xed\xed\x9e\xf6\x81\xfb\xbd\x19\xda\xab\x42\xb2\xc2\xc7\x4e\xbc\x61\xaf\x38\x69\xde\x9c\x85\xb5\x0e\x40\xb2\xd6\xc4\xdb\x2b\x98\xeb\xa6\xa3\x58\x44\xa1\x0c\xb2\x5d\x63\xd7\x92\xaf\x24\xb4\x6c\x9a\x51\x2f\x91\x1c\x6b\xeb\xf3\xe3\xf0\x11\x08\x9f\xc9\xf1\xb1\x08\x92\xd9\xd4\x74\x6d\xc5\xfa\x6d\x19\xfe\x45\x8a\x96\xc3\xb3\xec\xfc\xbe\x2d\xff\x5b\xcd\xcd\xa5\x77\x21\xd6\x5f\xf5\x24\xea\x48\xc8\x98\x17\xcf\xe4\xf8\x18\xd9\x5a\x87\xd4\xde\xfa\x63\x7a\x44\xf0\x53\x9b\x57\xbc\xc5\xd8\xa4\x47\x34\x72\x2a\x2b\x78\x61\x49\x59\xa7\xf3\x35\xe3\x62\x9a\x71\xeb\xd9\x74\x83\x78\x88\xf4\x67\xdf\xfb\x8f\xd7\x05\x4d\x1f\x9b\xdd\xb8\x60\x56\xf1\xad\x28\x4d\x78\x93\x9e\x40\xd3\xc0\x8f\x55\x54\xf6\x19\xf1\x87\x95\x39\xab\x33\x78\x9f\x47\xef\x74\x1a\x3a\x69\xc1\x74\x3c\x56\xac\xc8\xe1\x79\x22\xb9\x93\x2e\xad\xd4\x67\x83\xd6\xf9\x76\x12\xaf\x8d\x81\x70\x8f\x3b\xed\x81\xf8\x65\x72\x75\x9f\x38\xa8\x12\x0e\xc0\xc1\x17\xcc\x4a\xb6\x2c\xd9\xdb\x86\x1c\xfe\xf4\x59\xdf\x67\xdb\xef\x49\xbf\xa1\xe6\x67\x08\xed\x6f\xa6\x65\xc1\x9b\xc3\xbb\x54\x44\x41\x00\x9d\xfd\x81\x38\xa4\x62\xfc\x4d\x45\x05\xac\xac\x69\x91\x3d\x29\x85\xa7\xa5\x4b\xd4\x0c\x61\x19\x7d\x1c\x2a\x34\x57\xde\x3d\x36\xbe\xcc\xf3\x3b\xa2\x16\xea\x97\x0f\xe2\xe0\x0b\xe6\x57\x2f\x2a\xd5\x63\xc3\x5d\x56\xac\x45\xf6\x1f\x77\xbe\x3a\xf5\xd1\x49\x66\x15\xe3\x4a\x67\x3f\x76\x49\xcb\xdf\x58\x70\x1d\xca\x81\xfa\x0c\x02\xb8\x60\xe9\xff\xf6\xe0\x79\x47\xf7\xb7\xf7\x62\xdf\x2a\x81\xad\x0f\x87\xde\x36\x6b\x9d\xf2\x74\x83\x4f\x93\x9d\x3d\x3b\x9b\x9f\x0b\x5e\xfd\x46\x03\xed\x1a\xc2\x50\x81\x38\xa8\x2d\x83\xcc\x69\xb6\x4e\xa0\xdf\xf5\x49\x4a\xf0\x5c\x64\x63\x4a\x1e\x8e\xbd\x6d\xd8\x8a\xb3\x21\xbb\xac\xeb\xe6\x61\xb4\x54\xd0\xf3\x1d\xeb\xbb\xe4\x54\xbd\x4c\x60\x7e\x24\x94\x5c\x00\x71\x70\x25\xd4\x56\xb0\x14\x2c\xdf\xef\xb9\x2c\xc5\x42\x9f\x92\x90\x43\xf7\xf9\x89\x4b\x59\xc9\xdb\x87\xef\x69\xd4\xaa\x24\x85\xe2\x7a\x2b\xa0\x17\x0b\x41\x1c\x5c\x09\x6f\x3e\x50\xff\xb9\xcb\x15\x9a\x52\x4d\xce\x72\xe0\x6e\x27\xbd\x44\xe3\xa8\x3f\x72\xe3\x13\x71\xf1\x15\x85\xb6\x81\x98\x2b\x4c\x9e\x88\xb8\x20\x0e\xae\x84\x99\x7b\x76\x51\x63\xab\x21\x4d\xee\x3f\xce\x61\xe4\xb5\xb2\xbd\xa2\xf4\x20\x5d\x5c\x70\xa4\x2d\x67\x1e\x5b\x24\xb0\xf8\xd4\x56\x07\xdd\x8b\x00\x70\x70\x25\x9c\xa7\x1c\x51\xeb\xcf\x3c\x47\xd5\x94\x37\x82\x47\x5e\x50\xa0\xa7\x85\x21\xe9\x13\xf6\x57\xff\xb8\x36\xa4\x52\x8f\x30\x97\xcd\x1b\xa1\x04\x10\x07\xb5\x65\x38\x95\xb5\x06\x4d\xb5\x27\x29\xa1\x85\xed\x07\x3a\xb5\xad\x4a\xff\x0c\xca\xc3\x1b\x1a\x02\xd3\x74\x58\x5f\x70\xa3\xda\x33\x97\xef\xdd\xe3\x8a\x4c\xca\xc9\xc5\x47\x47\x8c\x00\x88\x83\x2b\x61\xb4\x79\xca\x29\xb8\xfb\xe2\xcc\x78\x14\x55\xe6\x1f\x26\x4c\x07\x89\x07\xf7\xa2\xe8\x6d\x2c\xed\x16\x45\xbe\x62\x5e\x71\x1c\x87\xba\xa4\x82\x38\xb8\x12\xb4\x4a\xa2\x9d\xf0\x92\xa8\x5e\x4f\x74\xd2\x30\xba\x2d\x4b\x34\xfd\x42\x0d\xf0\xca\x16\x55\x61\x5b\x41\xd7\xf0\x22\xe7\x6b\x81\x4a\x08\x40\x1c\x5c\x09\x82\x63\x62\x0c\xfc\x26\xc9\x5c\x68\x24\x02\x51\x02\x64\xce\x45\xc3\x64\xb6\x6b\xc2\x72\x01\xaa\x8c\xc2\xc6\xe2\x16\xe1\x28\xf1\x88\xb8\x20\x0e\xae\x04\x71\x3d\x95\xc7\x4f\xc4\x43\xdf\x7a\x60\x94\xdf\x55\xf0\x7b\x67\x5e\x59\xff\xcd\xda\xfc\x60\xcc\xbe\xf3\xc2\x51\xcd\x7a\x02\x77\x18\x62\x13\x0d\xe2\xa0\x02\x6c\x91\xd3\xf5\xdc\x04\x2c\x7f\x27\x49\x81\x71\xd2\x56\x0a\xef\x71\x9c\x8e\xde\x20\xd7\xb6\x22\x1e\x69\x82\x2c\x2d\xd6\x4f\xe7\x49\x7f\x55\x7e\x82\x1a\xbf\x15\x77\x6c\xa8\x8a\x02\xc4\xc1\xa5\xf0\x7e\xa5\x9c\xc0\x74\x88\x61\x7d\xe4\x37\x7e\x8b\xc9\x57\x23\xcf\x83\x73\xcc\x94\x49\xde\x51\x97\x0a\xc7\xf1\x17\x4b\xbe\x75\x77\x40\x47\x8a\x00\x0e\x2e\x05\x65\x52\x49\x0e\x33\xef\x47\xcb\x6b\x2e\x72\x5a\xa2\xea\xfe\xf4\x36\x1b\x46\x57\x87\x4a\x95\xf8\xd5\xdb\x3c\x02\x49\xc9\x37\x9c\xa1\x53\x76\x00\x87\x34\x29\x68\x7a\x1c\xfb\x92\xe1\x62\x89\xa3\xf9\x05\xd2\x53\x38\x7e\x97\x45\x7d\xba\xb3\x55\x19\xcd\x1b\xda\x3d\xf2\xdd\xa3\xb4\x06\x7a\x74\x0c\xc4\xc1\xa5\x40\xd4\x50\xa5\x36\x3c\x9e\xf6\x73\x16\xfd\xe0\xaf\x8f\x90\xc6\x4d\xef\x12\xfe\x92\x5e\xb5\x30\xcb\x08\xce\x83\x44\xc9\x06\x4c\x5d\x84\x14\x40\x1c\x54\x80\x7d\x3a\x6b\x0d\xda\x92\x9c\x24\x85\x99\x22\xf9\x15\x94\xf9\x5e\x3a\xec\xeb\x46\x66\x9d\x62\xfb\xf7\xfe\x54\x1a\x98\x8a\x10\xb1\x0c\x4b\x9a\xce\xc7\xec\x4c\xdb\x53\x40\x43\x00\xe0\xe0\x52\xb0\xe0\x1f\xff\xbc\x90\x46\xf2\x37\x25\xdf\x1c\x53\xf5\x63\x1f\x8f\xab\x27\xaf\x48\x4f\x95\x5e\xba\xdd\x2f\xbe\xd8\x4b\xc5\xfe\x50\x36\x04\xc4\xc1\xa5\x70\x63\xfc\x56\xe8\xb7\xf0\xca\xe2\x7a\xdd\x48\xef\xef\x6a\x1b\x3a\xdc\x8d\xad\x05\x0f\xd2\xa4\x96\x3f\x55\x96\x8f\x63\xa3\xbe\x87\x9e\xc5\x02\x71\x48\x55\x1f\xdc\x19\x1a\x24\x69\x14\x59\x77\x2f\x06\xf8\x77\x05\xa9\x15\x53\xbf\x1b\x12\xbd\x65\x44\x39\x5d\x69\x43\x24\x44\x4b\xb2\x03\xf5\x1e\x05\x71\x70\x29\xe4\xb5\xab\x0d\x54\xeb\xd8\x62\xcb\x3a\x48\xd5\xe6\x5e\xf0\xf2\x50\x59\xcb\x77\xb6\xb0\x3c\x10\x7f\xb6\x12\xb7\xff\x55\x14\xed\x37\x42\x0a\x20\x0e\x9a\x15\x1e\x9e\xca\x5a\x83\x5c\xd6\xc9\xd6\xda\x28\xeb\x7b\x0d\xe6\x06\xed\xa7\xf1\x18\xa2\xd8\xcc\xcb\x9e\xae\x4a\xc6\x4c\x96\x3a\x14\x09\x9f\x56\x3d\x28\x99\x45\x79\x54\xcb\x11\x36\x15\xc4\x21\x5b\xeb\xaa\x9a\xce\x64\x6d\x01\x05\x47\xf5\xb7\x06\x0d\xf6\xe6\xb9\x47\x79\x4a\x2c\xa3\x87\x69\xd6\x18\xf8\xb8\x28\xa9\xfc\xd8\x0a\x21\x88\xc8\x20\x0e\xd9\x5a\x6b\xd7\xf7\xea\xc7\x5e\x90\x37\xe5\xed\x11\x5d\x5d\xcc\x9c\x40\xb3\xfc\xeb\x71\x0d\xfb\xc2\xcc\x3d\x6e\x71\xfa\x57\x87\x5e\xd5\x14\x88\xc8\x20\x2e\x58\x56\x0a\x36\x1a\xba\xbb\x75\x15\x8f\x5b\x13\xac\xa7\x5f\x98\x7a\x19\xee\xaa\xfd\x39\x9f\x79\x5f\x66\x8f\x50\xf7\x03\xc5\xb6\x15\x49\xd4\x5e\xfc\x7d\x84\xb5\x06\x71\xff\xf7\x3a\xc7\xbf\xd6\xda\x3c\xe2\xad\xb1\xdf\x4b\xd6\xed\x83\x84\xee\x6b\x61\x1f\xdc\x74\xea\xb9\xc8\xf3\x94\x3e\x0e\x4d\xbb\x36\xbb\xee\x7f\xdb\x75\xe8\xff\xd7\x5a\xfb\xd8\xdc\xfd\xb9\xf4\x70\xec\x15\xa9\xa6\xf4\x42\x39\xbb\xe4\x2f\x92\x5f\xaa\x59\x21\x17\x9c\x8d\xd5\x5d\x2d\x67\xb8\xbe\x66\xe9\xfe\x83\xca\x87\x93\xa4\x2a\x5e\xf3\x1d\xc6\xce\x2e\xdd\x7b\xcc\x83\xf9\xca\xfc\xe7\xd5\x11\xe9\xc1\x2d\xb4\xf5\xa6\xdf\x8f\xae\x7a\xee\x7d\xf8\x5f\xb3\xd6\xa0\x4f\xfb\xc7\x5a\x4b\x21\x59\x6b\x9f\x99\x9b\xb3\x03\xf3\x28\x0a\x46\x1d\xe7\x39\xaa\xfa\x94\xc4\xae\xbe\xbb\x5b\x69\x58\x28\x3c\xcb\xbb\xd9\x86\xb6\xb0\x19\x77\x16\x26\x57\xa6\x03\xc9\x5a\x93\x51\x95\xaf\xd4\xe1\x9b\x7e\xfd\xc4\xcb\x29\xe5\x1a\xfc\x3a\xb0\x85\x96\x8b\x83\xc9\x5f\x43\x9d\xff\x2e\xbb\x74\x81\xff\x28\xfb\x99\x1c\x1f\x23\x5b\x6b\xcc\x87\x1e\xf9\xcf\x19\x31\x22\x15\x62\xcb\x9d\xc7\x66\x32\x15\xe8\xff\x54\x55\x2f\x32\x89\xee\x28\xdf\x63\xe8\xb3\x9e\xf6\x76\x39\x93\xe3\x63\x64\x6b\xdd\x3f\xe7\x9f\x21\xe9\x8d\x8a\xd2\x38\xf3\xf2\x79\x77\x65\x09\xf3\xdf\xe2\xad\xa9\x3a\x31\xaa\x8f\x9f\x96\x54\x0a\x72\xa6\x8e\x93\xce\xe4\x6b\x91\xad\x35\x8f\x41\xa1\x97\xce\x9d\x45\x7c\x8c\x56\x92\x27\x0f\x1b\xa3\x8c\x70\x13\x4a\x2d\xbe\xaa\xe5\x45\xc7\xfa\xc6\x48\xd1\xe7\x0d\x1c\x9c\x99\xb5\x06\x69\xe8\xc4\xa7\xe8\x50\xce\xd9\xbe\x6a\x9d\xe4\xa0\x3e\x60\xe6\x5c\x22\xb4\xe9\xe9\x9c\x19\x92\x9c\xe0\xb8\x37\x32\x6c\x88\xaf\x95\x46\xb8\x0f\x9d\x2e\x83\x38\xa4\x47\xa7\xbe\x17\xe1\xf8\xd8\x8d\x50\x4f\x5e\x0f\x7f\x3a\x7b\x20\xc6\x70\x87\x44\x88\x8a\x37\x5c\xa3\x70\x2d\x82\x47\x5c\x89\xb1\x12\xba\x49\x08\xe2\xe0\x0b\x66\xeb\x5f\x7c\xcb\xb4\xcb\x25\x97\xb2\x7e\x0c\x4c\x2e\xd6\x8e\xf7\x39\xec\x8a\xb8\x5d\xb1\x7e\xd1\xf0\xd8\x02\xfd\x3c\xf5\x9b\x79\x77\x44\x5c\x10\x07\x5f\xd8\x44\xa4\x4d\xb3\x9b\x1c\xa2\xfc\x86\x9f\x6e\xe0\x4d\x67\xec\x70\xbf\xe9\x9e\xc8\x7e\x78\xc8\x67\xf2\x3d\x62\x54\x82\xec\xf6\x35\x12\x44\x5c\x10\x07\x1f\xdf\x29\xc5\x24\x05\xee\xd2\x03\x86\x30\x4d\x9f\x4d\x4a\x1a\xcb\xad\x9a\xd2\xdc\xab\x4a\x39\x2b\xcc\xb7\xb3\x4b\x74\x6b\xd1\xc8\xa9\x11\x86\x0a\xc4\x41\x55\xf4\xa7\xb2\xd6\xa0\xdf\xf5\x89\xd7\x80\x9f\xbc\xd3\x44\x67\xbc\x7f\x27\xf5\x56\x55\x91\x52\x9c\x8a\x78\x7f\x86\x63\x6e\xa5\x31\x8f\x5c\xbe\xca\xfe\x75\x9c\x09\x5a\xa8\x7a\x1c\xc4\xc1\x95\x80\xa9\x6f\x7c\xc4\xd4\xbd\xe2\xa0\x1b\xa6\xf1\x99\xf4\xa2\x2c\xb7\x5f\xb8\xb9\x2a\x63\x9e\x10\x6b\xcb\x17\xfb\x0b\x46\xf2\xb4\xd0\x4b\xed\x20\x0e\xae\x84\xc9\x85\xd7\xe8\xba\x81\x5e\x02\xfe\x8d\x57\x14\x23\x1f\x1f\x49\x73\xba\x09\x9a\x3f\x97\x7e\xf5\xa2\xe1\xe9\xba\xa8\x46\x5b\xe8\x3d\xa8\xd3\x3e\x80\x83\x2b\xe1\xd2\x23\xcd\xe1\x4e\xdf\x97\xca\x3f\x0c\xef\x4d\x71\x75\x5c\x36\x54\x79\x6f\x48\x63\xb9\x7e\xab\xa8\x7a\xeb\xfb\x46\x90\xda\x15\xa8\x86\x1c\xc4\xc1\xc7\xb7\xf2\xe5\xcb\xd9\x26\x57\xcd\xad\x22\x69\xd1\x9a\xf3\x64\xea\xc6\x65\xb2\xfb\xcc\xe2\x97\x45\xcf\x17\xe8\x5a\x2d\x93\x1c\xc5\x2b\x21\x94\x00\xe2\xa0\x2a\xfa\x53\x59\x6b\xd0\x54\x7b\x92\x12\xde\xae\x14\x2a\x1c\xb9\xb9\x52\x5e\x77\x53\xad\x6d\x17\x1b\x61\xa4\x3e\x5e\x25\x1f\x15\xd5\xfe\x23\x94\x3b\x8c\x8d\x2a\xa3\x06\x5d\xd1\x04\x71\x70\x25\xbc\x2a\x09\x4b\x76\xff\x55\x44\x7c\xe0\xcb\xcf\xbb\xbc\x3e\xf9\xac\xdd\xd7\x48\x70\x37\xf6\xf0\x9d\xe2\xed\xa1\x78\x5b\xc9\xa2\x4f\x88\xb8\x20\x0e\xae\x04\x14\xfa\xcf\x32\xf8\x4c\x41\x17\x72\x59\x93\x6d\x31\xd6\x3c\xd3\x8f\xbd\xed\xac\xfc\xfa\xec\xaf\x09\xe8\x2f\xbd\x56\x5b\x8f\x83\x4a\x19\x40\x1c\x5c\x09\x96\x6f\xa5\x4b\xe7\xcb\xf9\x1f\x6e\x7c\x36\xce\x8c\xcd\x7b\x6a\x47\x2b\x32\xee\x49\x72\x18\x60\x6c\xb4\x92\x24\x79\xbe\x2e\x19\xaa\xc3\x05\x71\xf0\xf1\x8d\x2c\x39\x46\xd5\x98\x54\x22\x5d\x5c\xd1\x45\x23\x4f\x35\x9b\xa2\xd2\x8f\x6a\xde\x69\x7c\x77\xd1\xe0\xbe\x44\xb3\xa2\x2b\x37\x15\x62\x13\x0d\xe2\xa0\x7a\xd9\xd3\x59\x6b\xd0\xf2\x77\x92\x14\x26\xe2\x6d\xfa\x42\xf1\x59\xa3\xed\x9e\xfd\xdd\x99\x9b\xb6\x21\x67\xb8\xfc\x26\xf9\xba\x47\xf4\xa5\xf1\xf2\xd5\x5a\xf3\x74\x4c\xa8\x36\x00\xc4\xc1\xa5\x70\xb5\x9f\xba\xa1\x61\x16\x43\x23\xcf\x93\xaa\x12\x47\xee\x13\x4a\x4b\xe3\x8d\x0d\x3b\x91\x47\x5e\x7b\x8d\xa3\x2c\xb5\x0f\x7a\xdc\x20\x7f\x02\xe0\xe0\x52\xf8\x35\x96\x91\x28\x41\x68\xfb\x2a\x43\x93\x42\x7a\x58\xe8\xf6\x95\x66\xa6\xf3\x62\x65\x9a\x93\x18\xfd\x6a\x0a\x96\x7f\x26\x29\xa0\xfa\x26\x10\x87\x24\x85\xa9\xde\x81\x29\x0d\xdd\x02\x8d\x27\x87\xe6\x51\xee\x02\x52\x25\xb8\xec\xbf\x02\xca\x73\x5f\x0d\x33\x79\xd2\x35\xde\xd2\xf2\x87\xa4\x00\xe0\xe0\xe3\x4b\x4c\x8a\xf2\x61\x36\x9e\xc8\xbe\xb3\xed\x75\x2b\x69\x75\x89\xa1\x6c\xf9\x92\x74\x8e\x95\x3a\x7b\x63\x24\xe6\x0d\x13\xe2\x42\x69\x84\x14\x40\x1c\x54\x2f\x7b\x3a\x6b\x0d\xda\x92\x9c\x24\x05\xc1\x77\x33\xce\x4c\xb1\x62\x9e\xe4\xe7\xe8\x59\xa7\xd2\xfa\x5c\xdc\x0c\x0c\x73\x06\x1a\xfa\x7e\x7c\x94\xbf\x8b\xd7\x2c\x95\x09\xad\x90\x20\x0e\x69\xa7\xd0\x1d\x55\x21\xa7\x3e\x20\xad\x35\x44\x13\xf6\x28\xd4\x49\xc2\x70\xf9\xe7\xb9\xa7\xce\x3d\x3f\xdd\x6a\x17\x5d\x3f\x57\x0e\x41\x3b\x10\x10\x07\x97\x42\x57\x30\xba\xe4\x79\x4e\xc9\x11\x41\x89\xd5\xba\x61\xf3\xcb\x03\xe8\x61\x47\x6b\x71\x86\x84\xfd\xdb\x61\xdd\xa9\x28\xbc\x62\xfb\x88\xb8\x20\x0e\x2e\x05\x02\x9d\xd0\xed\xd4\x01\xcc\xf8\xe9\x08\x41\x8a\x32\xb9\xeb\x61\xb2\x84\x72\x7b\x39\x5b\x54\xd5\xa8\xf3\x47\x7c\x7f\x28\x28\xa0\x7e\xb0\x20\x0e\x3e\xbe\xbd\xf7\x53\xb5\xa7\x7f\x0b\xf7\x6c\xad\x34\x63\xb4\x5c\x0d\x74\xed\xd0\xcf\x2e\x7e\xa5\x9c\xdf\xb2\x18\xdb\x59\xe9\x58\xeb\xd2\x83\x90\x02\x88\x83\x66\x85\xd3\x59\x6b\x90\xcb\x3a\xd9\x5a\xeb\x91\xdb\x65\xba\xdf\x0e\x6a\x15\x9e\x67\x7a\xdd\x95\x93\x7c\x6f\x3e\x0a\x05\x5b\xb5\x4e\x50\xe6\x5b\xeb\x47\x26\xbc\x60\x23\x7c\x84\x4d\x05\x71\xc8\xd6\x7a\xa2\x6b\x6f\x54\xa5\xa6\x66\xc2\xcf\x40\x7e\x83\x6d\xbb\x0c\xfb\xfe\xe7\x96\x57\x8a\xcf\xe2\x5f\x46\xf8\x86\x0c\x32\x12\x87\xdd\x41\x44\x06\x71\xc8\xd6\xfa\xf5\x13\x9b\xcf\xad\xb1\xed\x54\x9e\xcb\x47\xa2\xdc\x54\xe8\x32\x87\x49\x0b\x8f\x50\x0c\x05\x25\x1e\xfd\xd1\x41\x71\x17\x77\xd9\x45\x44\x06\x71\xc1\xb2\x28\xa8\x30\x6b\x3d\xa6\x35\x40\x5f\x1f\x75\x31\x73\xff\xa6\xa2\xd9\x7e\xa4\x49\xba\x4e\x80\xd3\xa2\x69\x98\xc8\x0f\x7d\xf6\x98\xea\xfb\x57\x71\x20\x6b\x0d\xe0\xfe\x9f\xb5\x0e\xf8\xcf\x85\xf0\x04\xef\x20\x76\xb4\x4f\xef\x6d\xe6\xfa\x51\xb9\x9d\xbf\x51\xb4\x8a\xe6\x2a\x6e\x6f\x1c\x96\x3c\x1e\x69\x0e\x58\x95\x92\x54\xfe\x4f\x5f\xbc\x71\x5c\x76\xbd\x82\xd1\xab\x16\x3f\xf1\x07\x54\x1f\x9a\xdf\x70\xeb\x0b\x8a\xfd\xb5\x3a\x8b\xc3\x96\xdc\x91\x22\xab\x63\xeb\xac\xfd\x0f\x7a\x90\xc0\xe8\xff\x29\x2e\x25\x98\xd3\xfd\xf5\x47\x1d\x69\xfd\x3c\x4a\xd2\x5f\x12\xa2\x26\x44\xde\x0d\x07\x86\xfd\x31\xd5\xfd\x3f\xff\xd7\xac\x35\xe8\xd3\xfe\xad\xb5\x46\xb2\xd6\xfd\x4c\xd3\x55\x38\x77\x8f\x78\x70\x6b\x1d\xaf\x67\x12\x4f\x13\x49\xf6\x2a\x4f\xae\x55\x95\xa8\xbe\xfa\x5a\x51\xbd\x42\x27\x76\x06\x5d\xcc\x22\x65\x50\x54\x90\xae\x48\x27\xd8\x08\xbc\xba\xab\x96\xd2\xbc\xec\xa4\x31\x28\x11\xe4\x1b\x5f\x4e\xf1\xbc\x35\xc4\x96\x23\x5c\x13\x3b\x58\x63\xf5\xd3\x85\x33\x39\x3e\x46\xb6\xd6\x84\x29\xa8\xca\xbd\xc6\x32\x87\xd5\x0c\x19\x9f\xd3\x7a\x9d\xaf\x3c\x44\x1f\x5f\xe4\xf3\x39\x9a\xfb\x44\x3f\xb8\x51\xf8\x6c\x6e\xef\x4c\x8e\x8f\x35\x91\xfe\xec\xad\xc6\xeb\xe4\x8f\x7a\x6e\xfa\x26\xbf\xf3\xca\xbd\xe7\xf7\xa1\x93\x76\x16\xbf\xed\x25\x43\xf1\x40\x96\x50\xe7\xcb\x8f\x57\x04\x86\xce\xe4\x6b\x91\xad\xf5\xc4\xed\x4f\xdc\xc4\x95\xb3\x3a\x8f\xd3\x23\x04\x53\x0f\xee\xf0\xc6\x33\x3f\x97\x57\xe0\xf5\xec\x6d\x3f\x54\x73\x4f\xe7\x9a\x93\x3a\x33\x6b\x0d\xd2\xd0\x49\x0b\x66\xfc\x3b\x89\x6f\xaa\x5f\x2e\xde\x5b\x26\x5b\x7e\x73\xfd\x82\x86\x68\x7c\x7f\x2b\x97\x6f\xc4\x66\x36\x7b\x7b\xd3\x18\xeb\x58\x35\xb4\x50\x80\x38\xf8\x82\x49\x3d\x38\x7a\x3d\x90\x53\x86\x25\xbc\xfd\xe2\x38\xe7\x97\xf7\x0c\xf4\xca\x57\x77\x1f\x55\x4b\x98\x79\x87\x37\x15\x87\x4f\xdd\x81\x1e\xd0\x07\x71\xf0\x05\x33\x78\xe2\x72\x95\x9f\x98\xc8\x81\x38\x07\xfe\xd1\xd2\x12\xa7\x30\x85\x4a\x94\x76\xbd\xc0\x65\xa9\xbc\x54\x42\xcd\x79\xe2\x9b\x77\x11\x71\x41\x1c\x7c\xc1\xfc\xfd\x58\x47\x23\x31\x4d\xd5\xdb\x9e\xe2\xce\x78\x19\xb6\xc3\xe3\x89\xb1\xf1\xf7\x22\x15\x3c\xd6\x28\x0f\x1c\xd5\xf7\x99\x5f\x43\x75\xa0\x20\x2e\x58\x9a\xee\xbf\xef\xe8\x28\x77\x27\x3e\xfa\x62\x61\x7d\xee\x9b\x4e\xa1\x3b\xd3\x41\xfc\xad\x07\x63\xb7\x23\x62\xed\xad\xc7\xb3\x78\x8c\x43\x7a\xf5\xc2\x10\x86\x0a\xc4\x41\xb5\xd6\xa7\xb2\xd6\xa0\xdf\xf5\x49\x4a\x50\xc1\x98\xfc\xcb\xc4\x50\xa8\xe1\x82\x2a\x44\x5c\x53\xd7\x6c\x5f\xc7\x18\x68\x46\x79\x21\xf7\xb7\x31\x51\x4c\xa2\xdc\xc7\x64\xe8\x62\x1e\x88\x83\x2b\xc1\xee\xcd\x9c\x43\x50\xd2\x7d\xfc\x42\x2a\xd7\x98\x86\x25\xab\xb1\x16\x74\xb1\xd8\x01\x46\xd3\xa1\xda\x9b\x9c\xe6\x7f\x5c\x2f\x55\x23\xe2\x82\x38\xb8\x12\xd0\xc7\x52\xa4\x7d\xaa\xc2\xb2\x5c\x92\xcc\x52\x3d\x70\xb0\x7f\x7e\x50\xf3\xf5\x15\xd9\x0a\xe6\x9e\x98\x22\x31\x11\xac\xc0\x82\x2e\x84\x83\x38\xb8\x12\xc8\x71\xbf\xb7\x25\x6f\x26\x88\x1d\x89\xbc\x3e\xa0\x8a\x5f\x8c\xaa\xa5\x65\x1a\xda\x72\xb4\x66\x2d\x42\x95\x9d\x4a\xd1\xf7\x82\x1e\x13\x00\x71\x70\x25\x04\xe9\x99\x39\xb4\xa0\x16\x5d\xc0\x9a\x9b\x0d\x9b\xa2\x8a\x8c\xb1\x63\x90\x8b\x7b\xc1\x5b\x54\x7a\x49\x41\x3c\x2c\x02\x5d\x0a\x0f\xa1\x04\x10\x07\xd5\x5a\xab\x9c\x46\x09\xa0\xa9\xf6\x24\x25\x38\xf3\x3f\x37\x1f\x65\x50\xe6\x23\xf9\xee\x60\xa2\x49\xbd\x50\x61\x40\x20\x6a\xf1\x2b\x80\xe3\x43\x42\xe8\xe7\xef\x7c\x8e\x3a\x9c\x88\x11\x00\x71\x70\x25\xec\xcd\xa0\xdf\x8b\xbe\xed\xb3\x85\xe7\xf4\xcd\x4c\xf1\xe9\xbd\xcc\x45\xb5\xfb\x79\xbe\xfb\x94\xe4\xd5\x5f\x4d\x9f\x1e\xca\xfd\xa1\x45\xc4\x05\x71\x70\x25\x24\x8d\x62\xbe\x8b\xe0\x9e\x93\x8b\xbb\x7d\xe8\x7e\x7e\x58\xf8\x12\x43\xb0\xe6\xdd\xde\xca\xed\x55\xcb\x92\xa9\x83\x91\x8e\x43\x28\xdd\x06\xe2\xe0\x4a\xc0\xa1\xbf\x9c\x20\xde\x9e\xba\x97\x5b\x4e\x1b\xc3\x45\x21\x7e\x2d\xed\x0e\xd5\xe0\x1b\xe6\x0a\xfc\xb2\xb8\x0c\xfa\x9b\x63\xc3\xd0\x2d\x60\x10\x07\x57\x42\x46\xcf\x76\x5d\x40\x20\xdb\x5a\xc8\xe5\x47\x0d\xfe\x9d\x0e\xb9\x33\x57\x3d\x4c\xee\xe2\x53\xc5\x36\xe8\x66\x3d\xee\x31\xc5\x37\x40\x6c\xa2\x41\x1c\x54\x55\x79\x3a\x6b\x0d\x5a\xfe\x4e\x92\x02\x3d\x3e\x89\x5b\x65\xed\xe1\xec\x2b\xce\x6c\x4f\xd6\x9e\xaa\x8b\x49\x73\xda\xf8\xf1\x73\x0d\xb9\xfb\xd2\xa3\x38\xcf\x9b\x02\xa1\x69\x1c\xc4\xc1\xa5\x40\xb8\xf6\x41\xf8\x86\x2e\xf1\x23\x73\x77\x1e\x4a\xc3\x04\x26\xbb\x4b\x5d\xf4\xd8\x55\x3c\x53\xcf\xa2\xc3\x6b\xd3\x3e\xca\xd3\xc8\x43\x2d\xa3\x00\x1c\x5c\x0a\xc2\x47\xa9\x8f\xaf\x1d\x3f\x5c\x0c\xa3\x4f\x9e\xb5\x68\x6d\xaa\x5f\xb3\xbc\x3f\x7c\xcf\x12\x23\x98\xb3\xe6\xfc\x35\xb9\x1f\x59\x53\x88\xb8\x20\x0e\x2e\x05\xe5\x63\x5b\xb3\x6f\xb6\xe7\x7d\x8c\x5d\x15\x54\x83\xf7\xec\x6a\x1e\xb4\x15\xa0\x8f\xf1\x7c\x6d\x6a\x33\xe2\x0f\xe4\x4e\xf0\x87\x6a\x24\x40\x1c\x5c\x0a\x05\x24\x3a\xc1\x9b\x06\xf6\x01\xb2\xf9\x2e\x15\x05\x77\xe7\x32\xd4\x2f\x0a\x3c\x7d\xfd\xf1\x3c\xb1\xdc\xa6\x67\xe5\x73\xfb\xfd\x3a\x84\x14\x40\x1c\x54\x6b\xad\x79\x2a\x29\x80\xb6\x24\x27\x49\xe1\xcb\xc3\xf7\x05\x4b\xce\x7b\x7f\x97\x63\xe6\x50\x8a\xed\xae\xe1\x09\x95\xfd\x7e\x1a\xf5\xf8\x72\xd1\x9b\x92\x49\xaf\xdb\xcd\x9d\x83\x88\x21\x00\x71\x70\x29\x48\xf5\xaf\x3f\x75\xfb\x89\x97\xf1\x50\x92\xf9\x88\x5b\x0d\x33\x72\x41\xb4\xd3\x8a\x54\x4e\x35\xab\x5e\xe9\x1b\x0b\xae\xea\x53\xe8\x11\x4e\x10\x07\x97\x82\x08\x0b\x75\x5c\x8a\x7d\xba\xc4\xed\x1c\x75\xf1\x77\x3b\x1f\x5c\x68\x04\x57\x55\x36\x74\xb0\x82\x92\xe3\x5f\x52\x37\x30\xc8\x65\x42\xc9\x72\x00\x07\x97\x82\x56\x16\xb3\x78\x17\x8a\x2f\x13\xe5\x74\x7c\xd6\x96\x66\xc2\x1a\xf9\xd4\x01\x46\x2a\x5a\xed\x5e\xe7\xb4\x67\xb7\xbb\x6b\xf5\x3c\x74\x47\x06\xc0\xc1\xa5\x70\x2c\x5e\x84\x7f\xbb\xd8\x11\x17\xa7\x1f\xe7\x77\xbc\x43\x91\x15\xbf\x14\x35\xe6\x5b\xb6\xee\x21\xae\x4f\x0f\xdd\xce\x5f\xaa\x23\x42\x48\x01\xc4\x41\xb3\xc2\xe9\xac\x35\xc8\x65\x9d\x6c\xad\xdf\xa0\x51\x0f\xdf\xab\x67\x78\x73\x14\x7a\x2b\xe6\xcd\x31\xa9\x00\xd5\x80\x5d\x8c\xe6\xf3\xd5\x28\xfb\x51\x92\xfc\x32\x2e\xfe\xf7\x08\x9b\x0a\xe2\x90\xad\xf5\x48\xa7\x64\x1a\x3b\xfb\x8b\x23\x83\xe3\x54\xd5\x59\xa9\x95\xd7\xaa\xc2\xeb\x77\x36\x0b\xde\x09\x0e\x18\x3d\x12\x90\x0c\x4b\x21\x47\x44\x06\x71\xc8\xd6\x7a\xee\x01\xa3\xd1\x08\x5f\x41\x91\x25\x93\x66\x91\x14\xaa\x82\xcb\x63\x9b\x55\x92\xe4\x69\xb5\x32\x46\xc9\xeb\xb4\x7f\x1e\x39\x61\x20\x22\x83\x38\xe4\xde\xf4\x36\x3e\xf4\xe3\x6c\x6d\xbb\x12\x11\x49\x6f\x28\x9d\x5d\x95\xe6\x12\x06\xaf\x0f\x7c\x94\x0e\x42\x1d\xa3\xca\x0c\xe2\xb8\x38\x75\x13\x61\xad\x41\xdc\xff\xb3\xd6\xe7\xff\x63\xad\xab\x15\xe3\x68\x9e\x9b\xf3\xd7\xad\x5f\x6b\xd9\xb9\xb9\x50\x8c\xea\xf5\xd6\xee\x97\x9e\xc1\x22\x56\xe1\x74\xec\x6c\xf4\xd0\x15\xd1\x7f\xad\xb5\x94\x1d\xbb\xa4\x68\x99\xeb\xb5\x69\x6a\xff\xee\x72\x06\x5f\x61\x45\xfc\xe5\x71\x97\x44\xab\x2b\xbd\xcc\x22\x53\xa4\x7f\xd0\xff\xbd\x1d\xbb\xec\x5f\x1f\x62\x98\xa7\xbe\x98\x71\x4d\xb0\xb4\xcd\xe7\x47\x06\xe7\x06\x5f\x9a\xf8\x8a\xad\x77\x2d\x77\x32\x06\x7a\xef\x77\xb4\xff\x35\x6b\x0d\xfa\xb4\x7f\x6b\xad\x91\xac\x75\xcf\x2d\x1d\x92\x1e\x4d\x2b\xa5\x88\xf9\x4c\xbd\xeb\x82\x8f\xbe\x88\x73\x87\x98\x5b\x64\xa3\xa1\xe4\x4a\x71\x58\x76\x3f\xaf\x0f\x3c\x0b\x6b\x2d\x85\x64\xad\x4b\x8b\x7f\xfe\x3e\x1e\x3d\xe2\xe9\x79\xe1\xb6\x55\x3b\x3a\x6e\xa1\x49\xb7\x1d\xeb\x4f\x90\xab\xec\x2a\xf3\x8a\x5b\x9f\x59\xf6\xfc\x99\x1c\x1f\x23\x5b\xeb\x0c\xe9\x8f\x87\x44\x1d\xe5\x21\xfe\xd7\xd2\x54\xff\xfc\x76\xe0\x35\xcd\xe1\x94\x62\x10\xfc\xcd\x4a\x34\xb2\xe9\x1b\x34\x5c\xa5\x77\x26\xc7\xc7\xc8\xd6\x3a\xb2\xe4\x4a\x45\x42\x86\x0e\x85\x84\xa8\xe0\x0e\xbd\x6a\x3d\x39\x1e\xde\x97\x2c\xfa\x57\x04\x17\x13\xc3\x50\x68\x5e\xaf\xdc\xcf\x3e\x93\xaf\x45\xb6\xd6\x7a\x7a\x1e\xba\x69\x13\x58\x8e\xfb\x04\x5f\x32\x87\xea\x7f\xa4\x51\xb0\x19\x07\x1d\x5b\xdd\x64\x73\x7f\x76\xfd\xda\xd2\x5b\xb2\xe2\x33\xb3\xd6\x20\x0d\x9d\xb4\x60\xce\x97\xad\xff\x2c\xbc\xd9\xf4\x4c\x05\xf3\x96\xc9\xcc\xd0\x7e\xcd\x0a\x27\xe5\xbb\xc4\xae\x57\xb6\xb6\x5a\x4c\xfe\x43\x13\xab\x3e\x88\x85\x02\xc4\x21\xb5\x31\x8b\x59\x2f\x2d\x27\x41\x95\xfb\xac\x31\xde\x25\x9e\x7d\x91\x95\xee\x09\xd6\xb4\xd9\xb6\x7c\x4d\x38\xf1\x53\x06\x93\x8d\xa9\x36\xa8\xc9\x14\x80\x83\x2f\x98\x8f\x22\x0c\x4d\x1c\xb5\x14\x74\x17\x7e\xbc\x89\x76\x78\xc7\xf9\x46\x7d\xd8\x90\x70\x13\x8d\x67\x3c\xa9\x45\xfb\x29\xbf\x30\x15\x74\xbd\x18\xc4\xc1\x17\xcc\xfe\x36\x6e\xd4\x57\x7f\xb1\x7a\x36\x2e\x98\x9a\x59\xfc\x95\xe1\x71\x55\x10\x0e\x97\xe6\xb3\xa1\x21\xeb\xe1\x67\x0f\xe4\xa1\x69\x44\xc4\x05\x71\xc1\xd2\x28\xa8\xff\xe9\xf7\x11\x37\xc9\xf3\x1b\x5b\x54\x92\xe9\x46\x28\xb5\xd1\x8a\xdb\x5a\x28\x1f\xca\xc7\x67\x38\x2f\x03\x8a\xa9\x1e\x04\x12\xb6\x9d\x67\x47\x18\x2a\x10\x07\xd5\x5a\x9f\xca\x5a\x83\x7e\xd7\x27\x29\x61\xd5\x77\xd1\x35\xf9\x92\xed\xac\x65\x8d\x6c\x5d\x9d\xa3\x96\xa5\x48\xd2\x39\x6f\xc5\x9c\x1d\xb4\x95\x34\x2d\x0c\xea\xe9\x3b\xd0\x85\x3f\x10\x87\xf4\x0e\x93\xef\xba\x4b\x8e\x5f\xf7\x73\x46\xf9\x9e\x4f\x18\xb1\xd4\xe3\x0b\x21\x9f\xe9\x7d\x1a\x35\x54\xa4\x62\xf0\xa7\x70\xcb\xa5\xa1\xb6\xc9\x20\x0e\xa9\x63\x91\x81\xa2\xbc\xf7\x7c\xe5\x4d\xb9\xe9\xa2\xb4\x7b\xf1\xad\x99\x74\x73\x8f\x5f\x7c\x78\xf5\xa1\xd0\xb6\x96\x5b\x83\xde\x9e\x0f\x3a\x53\x04\x71\x70\x25\xd0\x0b\xe4\x4f\x92\xdd\x08\x08\xd1\x8a\x21\x7e\x21\x34\xaa\x39\xba\x99\x16\x4e\x90\xda\xce\x26\x79\x78\xf8\x79\x49\x1f\xdb\x7b\x04\x72\x13\x00\x0e\xae\x84\xe3\xaa\x7a\x0c\xe3\xa8\xad\x6c\x95\x72\x3e\x7e\xf3\x90\xdf\xbf\x3f\xa5\x6e\xd7\x0c\x7a\x95\x6d\x88\x15\x04\x65\x45\x67\x07\xc7\x23\x94\x00\xe2\xa0\x5a\xeb\x53\x59\x6b\xd0\x54\x7b\x92\x12\xa6\x7c\x7d\x77\xa9\x3f\x54\x53\x38\x92\x5a\x78\x0d\xb3\xf5\xc8\xbf\xf0\xc9\xda\x34\x7c\x12\x53\x19\x5e\x34\x2a\xe9\x7c\xe1\x3a\x74\x5b\x17\xc4\xc1\x95\xf0\xa1\x8d\xeb\x0f\xdb\xe6\x85\xd4\xc4\xb2\x4c\xa2\x16\xd7\x9c\x94\xc8\x6f\xf4\x5f\xb8\x6f\xe9\xcb\xb3\xcf\x0d\x0b\xbd\x50\x66\x87\x9e\x77\x02\x71\x70\x25\x58\xe4\x9a\x76\x71\x6c\xdd\xb9\x38\xba\x7f\xbf\x72\xc2\x60\x0c\xe5\x2f\x8a\x27\x26\xcd\xe3\xe7\x3e\xbe\xf1\xd3\x38\x77\x18\x3d\xa1\xf4\x20\x88\x83\x2b\x21\xb4\x49\x0f\xf3\x69\xf9\x57\xf3\xc5\x14\x1f\xbb\x37\x69\x16\xab\x79\xc6\x81\xc2\xb2\xda\x7f\x4d\xfc\x88\x47\xef\xb1\x84\x67\xba\x40\xbd\xdf\x01\x1c\x5c\x09\xf9\xb5\x6c\xfc\xf5\x42\x0c\xb7\x5f\xcb\xb8\x6a\xb6\xa1\x0e\xf2\xc7\x5e\xcc\xbe\x93\x8b\xdd\x9d\x9c\xdc\x13\x6c\x18\x98\x6f\x09\x35\x2c\x02\x71\x50\x55\xe5\xe9\xac\x35\x68\xf9\x3b\x49\x0a\x28\x9b\x72\x6e\xa3\x32\xc2\xca\x02\xd4\xd7\xb5\xfd\x8a\xc5\xd1\x1f\xd1\xdf\x4a\x9c\xae\x48\x73\x4a\xd6\x4e\x39\xf2\x9c\xf6\x3f\x86\x2e\x04\x00\x38\xb8\x14\xae\xe1\xc7\xae\x85\x65\xac\x0e\x87\x56\xd0\x26\xd9\x3d\x71\x17\xc9\x4b\xd6\xbd\xd6\xc0\x4d\x36\xdf\xbc\x76\xe1\xdb\xea\x4f\x7d\xa8\xea\x02\xc4\xc1\xa5\xa0\xe8\x67\xa5\xb7\xf8\x4b\x6b\x8a\x57\xa6\xa9\xe0\x99\xd9\x05\x6f\xd3\x94\x0a\x25\xb6\xea\xd6\x2f\x5c\x3f\x33\xda\xaf\x12\x5a\x88\x22\xe2\x82\x38\xb8\x14\x7e\xc5\x46\x0a\xa3\x28\xf2\x6a\x6f\xee\x6f\x6c\xcb\x24\x8b\x1c\x39\x7c\xdc\x42\xf9\x30\x8e\x27\xdb\xa1\x2a\xec\x31\xac\x79\xb5\x0f\x3a\x0d\x07\x70\x70\x29\x3c\x2e\x77\x78\xe6\xf2\x90\x69\x24\xac\x84\x91\x72\xef\x91\x79\x40\x74\xb7\x8b\x50\xca\xca\x2d\xf1\x69\xea\x52\x1d\xb6\xac\x70\xe8\x16\x30\x88\x83\x6a\xad\x4f\x67\xad\x41\x5b\x92\x93\xa4\x60\x42\x55\x45\x5f\x42\x9f\x12\x29\x22\xe3\x57\x4f\x84\xa6\x9e\xd7\x84\x2e\x18\xee\xd3\x88\x83\x97\x9c\x58\x4b\x93\xd7\xba\x41\x87\x18\x02\x10\x07\x97\x02\x15\xe9\x7d\xcf\x8d\x9f\x4d\x5f\x2a\xf4\xd1\x17\x38\x18\xa2\x77\x9c\x26\x5e\x78\xdd\x2d\x98\xb9\x79\x5c\x61\x56\x40\x5b\xf3\x07\xb2\xaa\x20\x0e\x2e\x05\x85\x02\xbe\xab\x68\x8a\x1e\x99\xfe\x12\xe5\xf7\xef\x5f\x9d\xcf\x41\xef\x7f\x10\x89\x57\x60\x94\x4b\x7d\x5f\x3c\x94\xcd\x53\xb9\x00\x11\x17\xc4\xc1\xa5\xf0\xf8\xcf\x35\xa2\xcd\xe9\x5f\x4e\x4b\xd7\xda\xbf\xad\xdf\x77\xe8\x23\xc6\xbd\x46\xa8\x1f\xa7\x78\x83\xdb\xcd\x23\x09\x0f\xd3\x1a\x7a\x15\x14\xc4\xc1\xa5\xf0\x28\xdc\xc2\x70\xab\xa7\x81\xf9\x6e\xc7\xc0\xaf\xfe\xa4\xcf\x36\x25\x65\x43\x96\x21\x4c\xd9\x7d\x1f\xca\xf7\x54\x25\xe9\xa9\x77\x10\x52\x00\x71\xd0\xac\x70\x3a\x6b\x0d\x72\x59\x27\x5b\x6b\xfc\x2a\xfa\xc0\x24\xd5\xc3\x38\xcc\x1f\xef\xaf\xa5\x64\x66\xde\xb5\x0e\xfb\xc1\x56\x39\xf1\xa6\x0a\xed\x4e\xf8\x8f\x3b\xe5\x6b\xd0\xe5\x6a\x10\x87\x6c\xad\x27\x6b\x42\x88\x5f\x8f\xb4\x77\xd4\x3f\xa0\x13\x57\xaf\xb2\x71\x94\xa8\x8a\x93\x5f\x5e\x99\xbb\x30\x58\x1a\x3e\x20\xf8\x11\x0b\x6a\x63\x06\xe2\x90\xad\x75\x5d\xff\xba\x60\x33\x69\x48\xe4\x81\x7f\x4e\x7d\x73\x08\x91\xec\xde\x0c\xe9\xb9\x84\x49\x4c\xda\xb0\x2b\x54\xa5\x62\xd7\x16\xa0\x2a\x6e\x10\x17\x2c\x8b\x72\xf1\xbf\x91\x0b\x48\x7b\x59\x47\xae\x72\xeb\x06\x63\xf1\x10\xc8\x35\xa9\xda\xe7\x0c\x60\x38\x63\xda\x8d\xc8\xf5\xa8\x0e\x1b\x49\x95\x69\x6b\x21\xac\x35\x88\x83\x5e\xde\x87\xac\x75\xfb\x25\x1b\x6f\xea\x74\xc2\x22\xeb\xe7\x31\xc1\xb9\xc1\xcc\x4b\xf9\xd1\x31\x4e\xaa\xd9\xfc\xb1\xee\xb6\x8a\xe7\x3f\xbd\xb8\xa3\xf5\xaf\xb5\x26\x13\xd3\x24\x5a\x50\xc2\xbb\x63\xb4\x91\x85\xc6\x5a\x72\x11\xff\x4a\xf2\xcf\xcf\x8b\x01\xf5\xb7\xbe\xd9\xdb\x1e\x30\xd8\x59\x07\xfc\x83\x7e\xc2\x48\x91\xa2\x0f\xba\x4d\xdf\x7a\xf9\xc7\x97\x88\xa3\x97\x89\x12\x71\x46\xdd\x1c\x6b\x8c\x84\x6b\x2b\x6d\x2b\xc6\xfb\x77\xc5\xfe\xd7\xac\x35\xe8\xd3\xfe\xad\xb5\x96\x85\xfb\x2f\xd2\xce\x85\x77\x5e\xbe\xb8\x7e\x64\x02\x8e\xa3\xdc\xf3\x9b\x68\xe4\x17\x3d\x38\x2d\x5a\x70\x23\x6e\xe9\x0f\x8d\xb4\xff\xe5\x1c\x3b\x0b\x6b\x1d\x80\x64\xad\x09\xfd\x72\x75\x6e\xad\x3d\x3e\x8c\x6e\xcd\x7f\x9e\x16\x8d\x95\x9f\xa3\x59\x24\x27\x37\xa2\xad\xaf\xca\xd0\x89\x85\x3a\x21\x7a\x06\x65\xc0\x91\xb2\x28\xa2\xc8\x3d\xb3\x4b\xda\x9b\xa2\x1d\x64\xe4\x70\x94\x59\x1a\xe8\x48\x8e\xb6\xa2\xfd\x0d\x0b\xbc\x07\xcf\xd5\xdd\xf8\x96\xe2\xfe\xe2\xf2\x97\xa9\x33\x39\x3e\x46\xb6\xd6\xc9\x83\xdf\x3a\xfa\xd9\x33\xc4\x27\xbf\xcb\xed\xb9\x63\x84\xec\xbb\xd4\xd0\x50\x97\xec\x17\xe6\x9b\x96\x9a\x24\x5b\x8a\x8f\x9f\x45\x3d\xbb\x2c\x8a\x13\xd2\x9f\xb5\xf7\xa1\xf8\xd3\xe0\x67\x22\xf5\xfc\x99\x9a\xb3\x77\x10\xd1\x75\x7f\xc2\x1d\x2d\x1e\xf2\x7c\x5f\xc3\xb5\xf3\x1d\xe9\x84\xcd\x96\x67\x66\xad\x41\x1a\x3a\x69\xc1\xf4\x0b\xa1\x21\x08\x11\x15\x15\x54\x67\xe2\xaf\x2c\xdf\xcc\xa7\x08\xcb\x5d\xcc\xb1\x7d\xfb\x55\xe5\x32\xa1\x79\xec\xcd\xdd\x42\x05\xc4\x42\x01\xe2\xe0\x0b\x66\x92\x0b\x19\x4b\x80\x5e\x31\x53\x0a\xeb\x03\xdd\xef\xd6\x5e\xb6\xc5\x89\x2d\xc2\xb7\xe4\x5e\x38\x8a\x2d\xd0\x3e\xfc\x3c\x27\xfa\x13\x3a\x49\x02\x70\xf0\x05\xb3\x34\xbd\xc5\xee\xb0\x30\xe4\xa6\xeb\x98\x51\x4c\xf4\x1d\x73\xb3\x71\x53\x47\xab\x6f\xe6\x6b\x23\x85\xfb\xf6\x64\x7f\x5a\x2e\x0c\x41\xad\x65\x01\x1c\x7c\xc1\xa4\xfc\xe1\x7a\x54\x61\xbb\xc2\x15\xf5\x39\xee\x86\xc0\xa1\x3a\x9a\xcc\x1d\xcc\x52\xca\xc5\xcb\xa6\xba\x2c\x86\xd8\xb7\x9b\xbd\xc8\xa1\x7e\x3d\x00\x0e\x5e\x99\x35\x86\xaf\xbd\x2a\xbd\xf2\xda\x81\xe7\x99\x8d\xd3\xdc\xf0\x33\xf5\xcc\xe6\x94\xd7\x9a\x9e\x6e\x8b\x0a\xa4\xdd\xe3\x9c\xb5\x66\xb8\x08\x43\x05\xe2\xa0\x5a\x6b\xd9\x53\x9d\x55\x02\x7e\xd7\x27\x29\x21\x63\xd7\x61\x4b\x25\xb2\x64\xda\x6b\x60\x56\x4e\x6b\x62\xeb\x73\x91\xa2\xf7\x75\xfa\x1a\xae\xf3\xf7\x99\x5e\x67\xa5\x4a\xef\x8d\x21\x46\x00\xc4\x21\x35\xb4\xfb\xab\x5a\xe4\x94\x76\xc9\x62\xac\x2f\xe2\xf9\x5e\x6d\xa9\x06\x51\x5f\x37\xfe\x90\xf6\xde\xb3\x1d\xfb\x20\x19\x97\x86\xcc\x24\xa8\xa1\x1d\x80\x83\x2b\x61\x25\x46\xa2\xc9\x63\x5b\xb4\x76\xe2\x8a\x9a\x67\xd7\xfa\xa0\x15\x5b\xea\xe8\x64\x4a\x30\x75\xd4\x83\xe7\x73\x0d\x64\x82\xaa\xd0\x96\x0c\xc4\xc1\x95\x30\x3d\xf5\xf4\x6b\xa7\xb2\xd5\x10\xc3\x34\x37\x31\x6a\x64\xf5\xbe\x0a\x8d\xdd\x18\xe1\xfc\x1b\xbd\x4b\xba\xa4\x0e\x07\xa1\x9e\xd0\x45\x42\x10\x07\x57\x82\x74\xee\xd5\xcb\x7e\x39\x18\x98\x87\xb9\x74\xf1\x93\x2c\xcc\x68\xda\x19\x7b\xf6\xb5\x47\xd3\x0d\xdf\x0f\x02\x7f\x0e\xb3\x6e\xa5\x20\x94\x00\xe2\xa0\x5a\xeb\x53\x59\x6b\xd0\x54\x7b\x92\x12\x36\x6c\x5d\xd1\x74\x9c\x7b\x72\xbe\x35\xd0\x94\x46\x1e\x94\x5b\x04\x49\x54\x5e\xae\xef\xd2\x7c\x53\x1b\x8a\x4b\xdc\x9f\x44\x0e\xdd\x07\x00\x71\x70\x25\x24\x0c\x0d\xf8\x88\xbd\xc7\xe8\x5e\x70\xaf\x7f\xb3\xdf\x7a\xb7\xfd\x16\xa5\xed\x96\x5e\x0a\xb1\xdb\x7e\x91\xb0\x70\xc2\x04\xbd\x2e\x22\x2e\x88\x83\x2b\x61\x62\x71\xad\x68\xf5\x9c\xcf\xa4\x37\xf7\xf5\x30\xc6\xcc\x82\x61\xc6\x72\x2e\xe1\x5d\xf9\x99\x67\xcb\xa5\x19\x81\x28\xb7\x6e\x40\xed\xd1\x40\x1c\x5c\x09\x5d\x15\xe6\xe1\x2c\xcb\x8d\x55\xa4\xe4\x7a\x4d\xf2\x6a\x6a\xa9\x47\x0c\x22\x3f\x95\xd1\xb6\x28\x1e\x13\x24\x1b\x90\x93\xda\xac\x40\x57\x4a\x01\x1c\x5c\x09\x3e\xfe\x1f\x85\x96\xab\x77\x62\x5f\xa8\x10\xd0\x05\x67\x72\x1e\x8b\xb6\x36\xf1\x0f\xc9\x32\x8a\xe7\xf6\x4c\xdc\xd5\xb8\x11\xf8\x19\xb1\x89\x06\x71\x50\x55\xa5\xe8\xa9\xfc\x14\x68\xf9\x3b\x51\x0a\x2c\x74\x57\x23\xa4\xe6\xbe\x3c\xc9\x1d\x2a\xb0\xc5\xac\x72\x96\xbd\xc8\x8c\xf9\xea\xda\xb3\x8f\x96\x76\x8a\xf7\x8f\xe3\xa8\xa1\xba\x1e\x10\x87\x94\x79\xf5\xd9\x68\xd3\x7e\xd2\xea\x6d\x91\x7a\xe1\x92\xae\x34\xe5\xc7\xcf\x17\x24\x44\xc6\x02\x25\x67\xee\xb7\xbf\x8d\x7f\x20\xb0\x04\xbd\x89\x08\xe2\xe0\x52\x50\x7d\xd9\xa7\x53\xb8\xf2\x78\xd7\x49\x86\xbe\xdc\x56\x3c\xaf\xab\xc7\x1b\x65\x2b\x8a\xa6\x66\x94\xca\x98\xf3\x7a\x54\xab\x13\xd4\x8b\x11\xc4\xc1\xa5\xc0\x62\xef\xdb\xa9\x69\xf1\xee\xf1\x2a\x8d\xf9\xb4\x10\x6f\xad\x32\xff\x9e\xbc\xcd\x7a\xc0\xea\xc8\xb6\x1e\x47\xce\xcf\x50\x22\xe8\x68\x15\xc4\xc1\xa5\x70\x41\x4b\xcc\xee\x3d\xf6\xed\xc7\xbf\x58\xfa\x3e\x78\x44\xc7\x7b\x1c\xcf\x74\xba\xfb\xae\x15\x93\x33\x3d\xfd\xf1\xc0\xce\x3e\x77\x1b\x21\x05\x10\x07\xd5\x5a\x9f\xce\x5a\x83\xb6\x24\x27\x49\xe1\x39\x53\xba\xc7\x91\x80\x46\xbb\xc0\x84\x43\x85\xe0\x63\x75\xfa\x28\xc5\x4e\xf2\xad\xb7\x0f\x7f\x64\x7c\x19\x89\xf7\x52\xa9\x81\x5e\xac\x03\x71\x70\x29\x14\x69\xfc\x48\xb5\xbe\xb0\xd6\x54\xfa\x25\x24\xfc\x0f\x56\x80\xf3\xf8\x0f\xdd\x77\x6f\x64\x93\xfa\xba\x9c\x64\x3c\x4c\x28\xfe\xbf\x6e\x2f\x20\x0e\x2e\x85\xd7\x26\x34\x36\x97\x19\x2e\xe7\x36\xfb\x7f\xe1\x09\x88\x11\xc0\x72\x19\x0f\x7d\x1a\x2f\xb8\x6c\xfd\x8d\xa5\xa7\x68\x24\x37\x16\xba\x85\x05\xe2\xe0\x52\x58\x0e\x92\x09\x7c\xff\x91\xb0\xab\x0a\x35\x4d\x6c\x9a\xbc\x69\x73\xfb\x9d\x81\xd6\x6e\x33\xe7\x0f\x49\x53\x7a\xb4\x85\xa1\x39\xa8\x63\x04\x88\x43\x6a\x9f\x19\x38\x90\x7a\xa4\x74\xd3\xe5\x0d\xb7\x58\xa4\xff\x2f\xdf\x90\x2c\x8c\x20\xf5\xf9\xaa\xd9\xa3\x7e\x36\xd1\x50\x0f\xfa\x7b\xa5\x08\x29\x80\x38\x68\x56\x70\x3a\x95\xb5\x06\xb9\xac\x93\xad\xf5\x7c\x84\xd5\xa7\x67\x31\xd6\x29\xf8\x3a\x91\x18\xec\x13\x4d\xfc\x3b\xe8\xd7\xa9\xfb\x6e\x7f\x9d\x55\xa0\xa0\x52\x11\x39\x28\x0f\x47\xd8\x54\x10\x87\x6c\xad\x59\x06\x36\xbb\xca\x6b\xae\x91\xdf\x74\xb2\xec\x63\x22\x1a\xd5\x7c\x22\x27\xa6\x31\x91\x11\x79\xeb\xca\xf9\x21\x83\x88\xb0\xf2\x37\x88\xc8\x20\x0e\xd9\x5a\x07\x2f\x1e\x26\x31\x96\x2c\x3f\x63\x96\x9d\xd4\x46\xd3\xff\x96\x6d\x27\x8d\xe3\x60\x47\xd3\xb7\xcf\x9f\x9f\x76\x79\xf8\xfc\xba\x3f\x22\x32\x88\x0b\x96\xfd\x7f\x23\xf9\x6f\xe4\x25\x7b\x14\x92\xbf\xc9\xec\x4a\xe7\xa8\x3f\xa9\xec\x04\x71\xda\x64\x24\x6d\xbd\xbe\x76\xec\xa0\xca\x9c\x4e\xba\x2c\xdf\x50\xc7\x80\xb0\xd6\x20\xee\xff\xfe\xcd\xff\x5a\x6b\xba\x35\xde\x7b\x0c\xb4\xf9\x32\x04\x2a\x4a\x03\xe5\x7c\xa1\xe9\xe1\x1f\xbe\x14\x18\xbb\x96\xf9\xce\xb4\x77\x1b\xca\x96\xb7\xf1\xfe\x6b\xad\xf9\x43\xb8\x86\xc8\x98\xbf\x0c\xe0\xbf\x5c\xcf\x59\x16\x96\xa3\x4f\x89\xe2\x6a\x91\x3e\xdf\xf6\x11\xcb\xea\x5d\xd7\x8e\xe5\xde\xb9\x7f\xa7\x9d\xab\x69\x4e\xaa\x4f\x4a\xf2\xfb\xa8\x0f\x0d\x7e\xde\x77\x2a\x9c\x0a\xfa\xfc\xb0\xe4\x59\x34\xbe\xf4\x8d\x66\xf2\xe0\x27\x9e\x53\xff\x6b\xd6\x1a\xf4\x69\xff\xd6\x5a\x23\x59\x6b\xf6\x94\xa6\xd0\x97\x17\x39\x09\xef\xaf\x92\xa6\xd4\xc5\xba\xea\x9a\x5c\x8f\x17\x18\xca\xb5\x1c\x27\xc6\x26\x53\xc0\xdf\xd2\x29\x3b\x0b\x6b\xdd\x81\x64\xad\xa3\x3e\x35\x50\x33\x60\xbc\x4b\xc2\xad\x44\xdd\xb2\x4b\xe3\x63\xc8\xff\xe8\xf9\x9a\xc3\xcd\x9d\xf8\x79\x0b\xe3\xcb\x6f\xba\x56\xd8\x67\x72\x7c\x8c\x6c\xad\x7b\x73\x8f\xb3\xec\x15\xc3\xf1\x57\xfa\x9b\x85\x1a\xa8\x3f\x30\x08\x0f\xf5\xfb\xbc\xdf\x14\x3d\xd6\x8b\xea\x8d\x50\xaf\xce\xc0\x3a\x93\xe3\x63\x64\x6b\x4d\x2d\xd8\xab\x16\xd5\x35\xde\x31\x8e\xff\xab\x53\x33\xc8\x57\x90\xf1\x1e\x41\xc3\xbc\xa5\x43\xf0\xdd\x40\xaf\x68\x5f\x89\xdd\x1f\x67\xf2\xb5\xc8\xd6\x7a\xf1\xc6\x8d\x79\x03\xef\xc7\x85\x7f\x69\x16\x37\xdf\x9c\x7f\xab\x44\xbb\xf8\xd0\x79\x10\x95\x7d\x4a\x9e\x88\x44\x6b\x1e\xc7\x4d\xe2\xcc\xac\x35\x48\x43\x27\x2d\x98\xfc\x39\x01\x6b\xac\x79\x3e\xe4\x65\x2b\x55\x62\x9d\x95\xbc\xa3\x94\x54\xa6\xef\xd6\x17\x4a\xd2\x56\xbe\x31\xad\x77\x27\x3b\x41\xd7\x75\x41\x1c\x7c\xc1\xdc\x49\x9b\xa8\x28\x12\xd8\x9a\x2f\x51\x4f\xdc\x77\x68\xdf\x58\x0d\x12\x5c\x27\x96\xf3\x5d\x98\x91\xcf\xe3\xb7\x11\x6d\x70\x87\x8a\xf4\x40\x1c\xd2\x59\xa5\xcc\xb7\x1e\xfb\x1e\xc7\x99\x2f\x77\xee\x90\x87\x1d\x5c\xcd\x7a\xb2\x16\x7e\x75\x20\x36\x05\x5b\x41\xa3\xf7\xb1\xfd\x8f\xd9\x2d\xe8\xac\x12\xc0\x05\x4b\xa3\x48\xfd\x27\x15\x30\xbf\x4d\x77\xfb\x81\x37\x1e\x5e\x60\x51\xdb\xb8\xca\xbb\x5f\x94\xc9\xcd\x74\x2c\x14\xad\xd8\xe2\x5c\x38\xab\x55\xcc\x9f\xa0\xbe\x9f\x20\x2e\x58\x1a\xf5\x3f\xe3\x40\xf6\x4d\xc6\xbe\x2c\xf9\xbb\x97\x44\x39\xa5\x92\x6b\x05\x4f\xb5\xf4\x1f\xe6\x0f\xab\x37\xa7\x1f\x73\xa3\x4d\x2b\x12\xef\xa4\x2a\x23\x0c\x15\x88\x83\x6a\xad\x4f\x65\xad\x41\xbf\xeb\x13\xad\xf5\xaa\x55\x31\xc5\x15\xec\x88\x32\xb1\x71\xf6\xb6\xf3\x9f\x5f\xd2\xd7\x30\xf1\xf0\xd0\xd6\xb5\x85\x73\x7a\x92\x25\x19\x89\x47\x41\xd6\x1a\xc0\xc1\x95\xf0\x8d\x21\x5f\x76\xe8\xc8\xd1\x44\xda\x3e\x1e\x77\x39\x75\xf6\x35\xf9\xc7\x4f\x47\x47\xb3\x15\x1a\x84\xa4\x3c\x7f\xd3\xdc\xea\x8e\x10\x71\x41\x1c\x5c\x09\x6a\x2e\xde\x97\xc8\xe8\x30\xc4\x27\xe7\xdd\xe3\x02\xd2\x2f\xb7\xaf\xda\xf9\xb8\x3f\x98\x6f\x97\xd2\xbd\xef\x5f\xe1\x21\x45\xd6\x83\x88\x0b\xe2\xe0\x4a\xe8\x61\x48\x2f\xcb\xbe\x89\xd9\x67\xb7\x41\x18\x16\x29\x72\xdf\x01\x37\x24\xab\x80\x7e\xa8\x79\x6c\x1f\xe5\x4b\x45\x5a\x77\xcd\x38\x22\x2e\x88\x83\x2b\x41\xa3\x52\x42\x7f\xc8\x4b\xba\xce\x2f\xd6\xc9\xac\x3c\x39\x76\xf5\x4f\x60\xf2\x0f\xbc\x92\x36\xb6\x36\x2d\x0e\xbb\xe6\xe7\xd4\x3a\x08\x25\x80\x38\xa8\xd6\xfa\x54\xd6\x1a\x34\xd5\x9e\xd8\x21\x5c\x6d\x58\x9b\x3d\xbe\xfd\x78\xdf\x53\xe2\x5a\x70\x5c\xa2\xda\x1b\xbe\x1b\xee\xd7\xb6\x18\x45\x8c\x42\xae\x11\x69\x55\x8f\x43\xb7\x75\x41\x1c\x5c\x09\xb8\x41\x1c\x04\x82\x19\xcd\xeb\xd9\x5b\x65\xba\x3f\x69\x97\x50\x07\x03\xe5\x66\xa4\xbd\x06\xf5\x4d\x62\x7e\xb2\x06\xf9\x4b\x6c\x20\xe2\x82\x38\xb8\x12\x9c\x94\x8e\x25\x26\xe3\x71\x2c\x3c\x2d\x9a\x48\x52\x5a\xb8\x4a\x65\x16\x08\xce\xe5\x2e\x3d\xa5\xa1\xe2\xbf\x70\x98\x13\x45\x07\x9d\x4f\x81\x38\xb8\x12\x06\x1e\x05\xbc\x42\x77\xa9\xa3\x4f\x78\xf4\xd7\x7a\x59\xb5\x68\x4c\xe1\x56\xbb\x19\xe6\xa1\xea\x0e\xcd\xa0\xe8\x85\xd1\x1b\x64\x1c\x88\xb8\x20\x0e\xae\x84\x7b\x5f\x96\xa7\x63\xca\xe2\x9b\xb8\x54\x07\xde\x3e\x41\xf9\xa4\x7f\x88\xe3\xf9\xfd\xaa\xa3\x77\x6d\xd8\x65\xac\x44\xcc\xb9\xc4\x03\xc4\x26\x1a\xc4\x41\x55\x95\xa7\xb3\xd6\xa0\xe5\xef\x24\x29\xd0\xe4\x2c\x10\x31\x4b\x97\xc6\x6c\x7a\xe1\x53\xe4\xf5\xe9\x34\xec\x0c\xd6\x48\x63\xdc\x25\xd1\xc9\xbb\x21\x6f\x7a\x9c\xd8\x0e\xf5\x6c\x02\x71\x70\x29\x54\x39\xec\xf5\x73\x1c\xdc\x5c\xdc\x52\x30\x5f\x71\x65\x39\x87\xca\xe5\xee\x51\xde\xa9\x2e\x90\xb6\x4a\xba\x2d\x8a\x82\x66\x77\x1e\x11\x17\xc4\x21\xe5\xdb\x9e\x89\x69\xb1\xcf\x3c\x28\xa0\x60\xd3\x20\x4c\xef\x71\x13\x65\x4a\x71\x33\xa4\x38\x5f\x20\xf8\xe0\x51\xed\xce\xc4\x4f\x13\x6d\x28\xdf\x06\xe0\xe0\x52\x48\x49\x5c\x39\x68\xd4\xf5\x15\x24\xd1\x0d\xb7\xf5\x12\xc0\xaa\xf1\x32\xca\xee\x42\x49\x93\x6a\x2e\x4b\xb5\x56\x2d\xb2\xa0\x80\x6a\x19\x40\x1c\x5c\x0a\x2c\x15\xcf\x63\xb4\x5e\x1a\x96\xcf\x93\x6c\xea\xaa\x7f\x18\x40\x4d\x92\xbc\xdd\xcf\x6c\x5d\xf6\x04\x43\x29\xfa\xf7\xd4\xa1\xe1\x1d\x84\x14\x40\x1c\x54\x6b\x7d\x3a\x6b\x0d\xda\x92\x9c\x24\x85\xfe\xa7\x97\x9b\x37\xd3\x2a\x56\xf0\xf3\x04\xf1\x39\x12\x92\x26\x35\x0f\xc9\x9e\xa8\x2a\x63\x3f\x62\xa3\x45\xb7\x0c\xbd\x90\x5f\x0c\xdd\xeb\x02\x70\x48\xb7\x9a\x36\x8b\x99\x44\x92\x17\xc3\xde\xfe\xb0\xaf\xb2\x1e\x21\xed\xdc\xa1\xb9\x6c\xc8\x92\xb9\x59\xf2\xb1\xe9\xc6\x9a\xa4\x40\x8f\x2f\x74\xab\x09\xc0\xc1\xa5\xf0\xce\xae\xad\xbe\x35\xe2\xef\x05\x49\x9f\xfc\x92\xa6\xf4\xbb\xac\x06\x98\x8a\x74\xb5\xa6\xf3\x92\x52\x8a\x9d\x8d\xdc\x01\x79\x50\x23\x55\x10\x07\x97\x42\x59\x78\x59\x18\x96\x0b\x7f\xa6\x2e\x1d\x79\xbd\x01\x6d\xb6\x4b\xa3\xd2\x65\x31\xf1\xfc\xba\x92\x9f\x52\x55\x07\x17\x29\x0d\xa1\x9e\x24\x20\x0e\x2e\x85\x82\x0f\x3c\x26\x23\xe2\x9e\x28\xd3\x85\x9c\x63\x7d\x82\x83\xe7\x34\x46\xca\xba\xe3\x7b\xad\x3d\xd0\x66\x9e\x99\xfe\xf5\xea\x18\x84\x6a\x03\x00\x1c\x34\x2b\x9c\xce\x5a\x83\x5c\xd6\xc9\xd6\xba\x57\xc5\x59\x7d\xeb\x9c\xcd\xe1\xc3\x81\xf7\xf6\x73\xfc\xb8\xe6\x73\x58\x06\x3e\x8e\xfb\xe9\x44\xf6\xf5\x41\x38\xcf\xf0\x48\xc4\x10\x36\x15\xc4\x21\x5b\xeb\xce\x6c\x0b\xe7\xdf\xd4\x54\x5e\x4e\x31\xb1\xac\x4f\xba\x24\x52\x2c\x3c\x77\x6d\xdb\x3f\xd4\x74\xa5\x68\xc9\x05\xdc\xa2\x58\xeb\x41\x44\x06\x71\xc8\xd6\x1a\x25\x70\x76\xed\xc0\x41\x07\xd7\x84\xcd\xaa\x70\x3f\xf6\xc5\x8a\x0c\xcb\xdd\x4b\x68\x83\xbf\xd7\xbe\xd5\x4c\x7a\xbb\x6e\x1b\xec\x20\x22\x83\xb8\x60\x59\x14\x94\xff\xfe\xd7\x29\xf7\xec\x53\x6e\x9b\x4f\x10\x1d\x9b\x5b\x84\xca\x8a\x28\x67\xa3\x35\x69\x38\xd1\x6b\xe2\x75\x46\x3f\x16\x56\x09\xf4\xd4\x8f\x47\x58\x6b\x10\x17\x2c\x1b\x00\x7f\x7c\x6b\x77\xb9\xda\x4e\x79\xd2\x46\x33\x61\x19\x9f\x56\x30\x9b\xf8\xe5\x85\x67\x7d\x81\x5e\x29\x6b\x42\x38\x6f\x2e\x07\x07\x46\x7d\xfc\xd7\x5a\x33\xf7\xfb\x72\xc9\xfa\xb5\x2c\x2f\xb8\x5a\x32\xfb\x25\x5d\x39\xd8\xc8\x7c\x1b\x58\xed\xe8\xc5\x5c\xef\x5e\x47\x42\xa9\x66\x82\xf1\x0f\xfa\x63\x49\x9e\x20\x7b\xdc\x7d\x4a\x9f\x39\x80\x8a\xda\xc7\x5d\x0c\xcd\x4a\x5a\xc2\xca\xa8\x91\x34\xcf\x7b\x7e\x9c\xe8\xbc\x62\xfa\xff\x8a\xb5\x0e\xc4\x38\xdd\xa7\xfd\x5b\x6b\x8d\x64\xad\xef\xd1\xbe\xf2\x8b\xdb\x22\xa1\x7e\x2e\x84\xcb\x7c\x69\xcf\x16\x27\x5d\x27\xaa\xcb\x3c\x41\xf7\xbe\x4f\x5b\x0b\x2d\x23\x5b\x71\xe3\x99\x9c\xa8\x5e\x47\xb2\x7d\xad\x1b\xb7\x9e\xf2\x3f\x75\xe1\xe1\x53\x58\x0b\xfa\x2c\x38\xd1\x38\xac\xc0\x44\xfa\xd2\xe3\xfd\x9b\xc3\xe2\x5f\xfa\x9c\x0a\x1a\x94\x67\x72\x7e\x8c\xec\xad\xd3\xfd\xa7\x3d\xb6\x1f\x7e\x6b\x32\x5f\xb5\x5c\x2a\x58\x17\xcd\xf7\xbe\x66\xf3\xfc\xf6\x64\xc9\xd7\x57\x49\xe6\x59\x53\xe7\xc6\xe6\xce\xe4\x6b\xb5\x90\xfe\xec\xf8\xd0\xab\x41\x19\x9c\x8c\x5b\xd7\xd6\x1e\x29\x31\xd9\x5e\xce\x73\xc2\xa6\x14\xc2\x7c\x5a\xc0\xd4\x22\xb8\xa7\x2a\x81\x7a\xfd\x6c\x3a\x93\x23\x7b\x6b\x81\xeb\x1b\x32\xef\xdc\xfe\xf8\x2a\x8b\x8e\xfa\xde\x95\x36\x7d\x8f\xc9\x18\xc8\x2b\xfd\xb7\x80\xd0\xb0\xa6\xf3\xa0\x66\x63\x78\xe6\xcc\xbc\x35\x48\x44\x27\x16\x5b\xcb\x15\x1e\x3b\xd0\x3e\x8f\x0d\xd2\x59\xd8\x3f\xaa\x67\xe9\x18\x9a\x76\x59\x8a\xb1\xe3\xb9\xb8\x5d\xfd\xed\x79\xf3\x8d\xe7\x81\x50\xb1\x35\x80\x83\xaf\x98\x44\x95\x3d\xcf\x6e\x70\x91\xdf\x1f\x67\xe5\x4d\x38\xc4\x8f\x30\xf5\x16\x19\x65\x75\x7b\x33\x6c\x88\xd5\xa0\x71\x63\xde\x86\x09\xba\x11\x0e\xe2\xe0\x2b\xe6\x56\x66\x47\x17\xc3\x14\xcd\x94\xcb\xd8\xcd\xc4\x81\x79\xde\x7a\xce\x5e\x8c\x05\x09\x53\xd7\x7b\x29\xdb\x2a\xc5\x11\x3e\x5d\xbf\x11\x71\x41\x1c\x7c\xc5\x4c\x73\xc8\xdb\x7d\x50\x48\xc5\xd5\x93\x18\x33\xc4\xd3\xb3\xc2\xea\xac\x71\x47\xd2\xf6\x58\xd9\xaa\x7a\x39\x58\xda\xa1\x52\x01\x8a\x0b\xe2\x82\xa5\x2f\xfe\xb7\xe8\x9c\x29\xb7\xd6\x2f\xf8\xbe\xf0\xed\x97\x69\x69\xad\x45\xf8\x4b\x1a\x58\x33\x1f\xde\x7c\x8d\xc4\x30\x4e\x4c\x9a\x65\xd5\xb3\x4b\x43\x38\x2a\x10\x07\x15\x5b\x9f\xca\x5b\x83\x7e\xd7\x27\x29\x41\xfd\x6d\xfd\x67\x56\x3f\xb2\xfb\xba\x6c\x25\xf6\x7d\x76\xb5\x3e\xec\xa6\x61\x1b\x07\xc9\xfe\x76\x97\x86\x0d\x68\x58\xbe\x48\xab\x20\x46\x00\xc4\xc1\x95\x40\x2e\xc5\xa9\x38\x70\x3f\xff\xe7\x4c\x56\xcc\x96\x5e\xb2\x22\x4f\x13\x4a\xba\x0f\xea\x6a\x64\x96\x5e\x94\xdf\xdb\xa4\x6d\x15\xc8\x03\x83\x38\xb8\x12\xb8\xd6\x03\x5b\x47\x1f\x65\xdf\xc8\x4c\xd7\x16\x19\x55\x22\x40\x9b\xd9\xea\x6f\xd5\xdc\xda\xe6\x22\xba\xd8\x8b\xdb\xda\x22\x4f\x8f\x88\x0b\xe2\xe0\x4a\x28\xa7\xfc\x3b\xcc\x9e\x14\xbc\x7a\x98\xa8\x9d\xbe\xaf\xc5\xfd\x24\x8c\x86\x5f\xd3\xad\xc7\xf1\x12\x3e\xca\x6b\x95\x80\x46\xc7\x5c\x44\x5c\x10\x07\x57\x42\x03\x21\x76\xfe\x3b\x47\x36\xcc\x2a\xa6\xc4\xa4\x25\xe7\x6b\xe2\x1f\x3c\x2b\x7b\x32\xc3\xd3\xce\xe5\x54\xdb\x99\x99\x7f\xe4\x69\x43\xec\x9d\x40\x1c\x54\x57\x79\xfd\x54\xdb\x68\xd0\x5c\x7b\x92\x14\x14\xac\xfd\x1c\xd1\x6d\x89\xee\xf8\xf5\x84\x8d\x2c\x91\xcc\x4c\x71\xdf\x6b\xfb\xc1\x7b\x97\x7f\xc7\x4e\x69\xce\x46\x98\x2e\x06\x13\xba\x4c\x09\xe0\xe0\x52\xf8\xc2\x14\x97\xb5\xac\x4c\x8c\x7f\x61\xb2\x71\x4c\xa5\xfb\x7b\x6f\xe2\x71\x31\xb7\xe2\x9a\xe3\xf2\xe1\x7b\x9c\x63\x03\x3d\xed\x7a\xa8\x5e\x13\xc0\xc1\xa5\xf0\xb8\x70\x5b\xa8\x5f\x98\xd4\xf1\xc2\x75\xcc\xaa\xb9\xa2\x97\x4b\xf9\x54\x84\x45\x51\x54\xd7\x8f\x6c\xed\x58\xa6\x08\x76\x6c\x88\xa1\x4b\x9a\x00\x0e\x2e\x05\x71\x0a\x66\xda\xc7\xf2\xc5\x09\x2f\xc6\xca\xed\xb2\xc7\xa8\x6d\x48\xc8\xd3\x1f\xd8\x1b\x4c\xa0\x26\x88\xde\xd9\xab\x79\x54\x03\xbd\x11\x05\xe2\xe0\x52\xd0\xc7\x38\x48\x12\x3b\x50\x10\xd7\x78\xde\x4a\xf5\xf0\x81\x91\x4d\x77\x7d\x47\xdc\xd4\x46\x47\xdc\x1f\x71\x3c\x25\x6b\xcb\x62\x27\x84\x14\x40\x1c\x54\x57\x79\x3a\x73\x0d\x5a\xff\x4e\x92\xc2\x47\xbd\xc6\x04\xd1\x3f\xb7\x7e\x9a\x3c\xde\xdc\xbb\xb7\xfc\xa1\xa0\xab\x6d\xae\x71\x51\xb4\x34\x8e\x36\xb8\xdd\x2f\x13\xdb\x8a\x1d\x31\x04\x20\x0e\xe9\x1e\xf0\xfa\x3b\xf4\x8c\xd8\xbc\x10\x94\x21\xb7\xdd\xaf\x25\x79\x72\x0a\xd4\x94\xc5\x06\x5f\x6b\x99\x9c\xf8\x4a\x48\xbe\xfb\x3f\x83\x5e\x4c\x03\x71\x70\x29\x8c\x1c\x7a\x1d\xdd\x60\xb4\xbe\x65\x8a\xb6\x65\xcc\x2e\xa9\x41\xe9\xe7\x48\x1f\x60\x86\x61\x9e\x9e\x4b\x8d\x89\xd2\x57\xf9\x11\xaa\x3f\x01\x71\x70\x29\xe4\x9a\x5e\x28\xa1\xfb\xfc\x59\xff\xcd\x66\xe3\x53\x9d\x85\x89\x72\xfb\x40\xbb\x3c\xff\xa0\x25\xd5\xc5\xd7\x8f\x8c\x2d\x68\x67\x83\x11\x71\x41\x1c\x5c\x0a\xa9\x11\x36\x07\x18\x9b\x0e\x7f\x14\xa2\x30\x0e\x3a\x8e\xa2\x5a\x54\x3e\xbf\xb4\xe9\x88\xd3\xe7\x43\xef\x96\x67\x8a\xd5\x5f\x1d\x41\x48\x01\xc4\x41\xb3\x82\xd6\xa9\xa4\x00\xda\x93\x9c\x24\x05\x2d\x74\xad\x2f\x35\x77\x6e\xa7\xd4\xd3\xe4\x8b\x0f\x0b\x05\x7f\x7d\xf5\x62\x6b\x47\x5c\x53\x89\xbc\xd6\x0e\xbb\x5e\xa6\xbd\x7c\x0d\xaa\x32\x06\x70\x70\x29\xc4\x99\xb5\x50\x76\x0c\x44\x93\x3b\xa7\x62\x92\x6f\x7e\xe2\x6f\x21\x79\x45\x1c\xed\xe0\xca\xc5\xbb\x6b\xbc\xa2\x1f\x1e\x56\x7e\x03\x11\x17\xc4\xc1\xa5\x10\x15\xd1\x83\x9b\x89\x4d\xb7\x7a\xa0\x81\x3f\xd5\xcd\xd4\x82\x5b\xb2\x6b\x6f\x5a\x81\x6d\x4e\x6c\x2d\x6d\xa8\xc4\xec\x34\x05\xcd\x0a\x20\x0e\x2e\x05\xdb\xaf\xef\x31\x6e\x4f\x8a\xfd\xc9\x53\x4c\x94\x61\xf2\xbf\xfb\x83\xbe\xeb\x36\x27\xc9\xad\xe2\xce\x4b\x18\x8f\xaa\xd9\xa3\x1d\x6c\x10\x71\x41\x1c\x5c\x0a\xf7\x46\xdb\xed\x57\x4b\x04\x76\x92\x18\x42\x56\xfd\x38\x84\x59\x2d\x46\xb2\x22\xa8\x46\x97\xa5\x79\x5f\x4b\x95\x77\x0d\x87\xc9\x41\x29\x37\x00\x07\xcd\x0a\xa7\x33\xd7\x20\x9f\x75\xb2\xb9\x9e\x26\x1f\x7c\xb2\x4c\x53\x8d\xcb\x48\x27\xf3\xf8\xd1\xf3\x64\x93\x45\xbb\x58\x27\xaf\x20\xcf\x0d\xf2\x79\x11\xe7\x5c\xfa\x39\xc8\x02\x83\x38\x64\x73\xad\x3f\xf2\x89\xbb\x63\x7a\x87\x2d\x81\x22\x4b\xef\x62\x4f\xd2\x23\xb7\x82\xa8\xfd\xf7\xe9\xaf\x5a\xe2\x3f\x98\xff\xff\x98\xfb\xeb\xa8\x2c\x83\xb7\xef\x1b\xa5\x04\x94\x90\x94\x96\x06\x29\x05\x14\x91\x6e\xa4\x53\x25\x44\xba\xa4\x14\xe9\x10\x50\xba\x91\x0e\x01\x01\x49\x11\x11\x24\x25\x44\x40\xba\x5b\x4a\x10\x90\x46\x10\x25\x85\xbd\xee\xfb\x5d\xd7\xf9\xf8\x3b\x2f\xf6\x33\xec\xbd\x58\xeb\xfd\xfd\xff\x59\xc7\xc5\x0c\xdf\x73\x66\xbe\x33\x73\x1c\x33\x70\xdf\x7f\xa9\x00\x11\x19\xc4\x21\x9b\xeb\x5b\x65\x6f\x49\x9e\xd5\xf5\x66\x3c\xa6\xc7\x4a\x77\x1d\x74\xaf\xd2\xdd\xc6\xed\x4e\x7e\x21\x88\xae\x43\xa3\xd0\x6d\x3a\x5b\xac\x8a\x88\x0c\xe2\xfe\xc7\x5c\x63\xfc\x67\x86\x38\xe8\x65\x6b\x84\x57\x0e\x2d\x26\xdf\x0b\xfd\xde\x9f\x38\x6e\x7c\xaf\xb0\xfd\x7d\x1f\x07\x73\xfb\x07\x01\x6d\x89\x51\x77\xf7\xbf\x41\x49\x57\x58\xae\xfd\xfd\xd7\x2b\xcf\xf0\x51\x44\xa0\x17\x63\x06\x0f\x38\x5f\xc6\xbe\xdc\x47\xf1\x3b\xcd\x8c\xb3\xa5\xfb\x4d\x42\xa3\x56\xff\xfd\x42\x89\xdc\xc8\x7f\x2b\x61\x15\x99\x2d\x07\x5d\x70\x63\x5a\x19\x66\x54\x9b\xdf\xb4\xe3\xa5\x9a\xbc\x2e\x76\x97\x78\xff\x27\xf7\xba\xa2\x15\xe6\x24\xc5\xed\x81\xff\x36\xaf\x0c\x6a\xda\xbf\xc9\xd3\x48\x5e\x59\x53\xec\x9e\xe9\xe5\x94\xf3\xba\xea\x5d\x14\x19\x0c\x19\xa5\x24\x02\x93\x5a\x7b\x42\x96\x26\x56\x7f\x7c\xd7\xd6\x26\x92\x2f\x9d\xc5\x43\xd5\xd2\xe2\xc8\x5e\x99\xc9\x2b\xa6\x86\xa9\xd6\x9d\x7a\x66\xec\xf3\x7c\x43\xb1\x05\xbf\xae\x2d\x9a\x18\xe6\x39\xd5\xb1\xfc\xbb\xcc\x28\x54\x31\xe7\x8f\xcf\xe4\x40\x18\xd9\x2b\x07\x93\x97\xea\x6d\x45\x8a\xe9\x1c\x5f\x62\x46\x09\x17\xe6\x1f\xfb\xd8\x63\xb3\x5e\x69\x9d\x8f\x3a\xe3\xf7\xa0\xa2\xa5\xea\xb5\xdc\x99\xb4\x16\xd9\x2b\xa7\x6a\x84\x5e\x9b\xd9\x7d\x45\xad\xaf\x1b\xc9\xc9\xbc\x8b\xd6\x52\x17\x3b\x66\xfd\x2c\xad\xaa\xdb\xf3\x31\x5d\xfb\x01\xed\x33\xfb\x33\x69\x2d\xb2\x57\xd6\x6a\xb4\x24\x55\x70\x59\x91\x34\x97\x37\xba\xce\xaf\xa9\x28\xee\x55\xfd\x65\xea\xed\x4b\xfd\x1d\x8e\xf6\xb1\xef\xe1\x5a\xbc\x77\xce\xcc\x2b\x83\x44\x74\xd2\x04\x38\x53\x78\x99\xa9\x94\x20\xdc\x19\x53\x7b\x97\x86\xf2\x52\x5c\x6b\xd1\x31\xc3\x86\xd0\x5b\x15\x74\xb7\x37\x0a\x66\x94\x58\xee\x2f\x11\x03\x3f\x88\x83\x4f\x80\x6a\xbe\x36\xcf\xce\x57\x08\xfe\x55\x70\xb2\xc3\xa1\x15\x17\xd6\xf8\x11\xa5\x30\xb8\x50\xfe\xb6\x0e\xfb\x20\xf3\x88\x8b\xb0\x00\x7a\x24\x03\xc4\xc1\x27\x40\x32\xce\xbf\x24\x21\x9b\x7a\x63\xb1\x96\xcb\x0a\x72\x78\x62\x99\x5a\x4e\xde\xf1\x14\x5e\x8e\x05\x0c\x8e\x16\x15\xea\x2f\xf8\xa0\xf7\x5d\x40\x1c\x7c\x02\xbc\x5a\x16\x78\x39\xc1\x7a\x7e\xb0\x79\xf9\xf7\xc7\xaa\x42\xff\xdb\x85\x8f\x77\x34\x22\xe6\x9f\xa0\x38\x3f\xc0\xbb\x6d\x14\xcf\x85\x06\xa5\xf3\x01\x38\xa4\x6b\xad\x57\xf1\xd9\xff\xfe\x8c\xbb\x2b\xa3\x4c\x4e\xb2\x12\x75\xac\x63\x20\x36\xc2\xbc\x66\x66\xc5\xb8\x7c\xbd\xa2\x96\x55\x75\xc1\x16\xe1\x95\x41\x1c\x94\x3d\x7d\x2a\xaf\x0c\xfa\xae\x4f\x52\x82\xb2\x43\x3e\xfe\x55\xe2\x66\xb7\xa3\xb9\x31\xd5\x8b\x56\x79\x6c\x5e\x37\xbc\x0b\xcc\x25\x9a\x2c\x57\xed\xeb\x25\x3b\x6d\xb3\xa1\x37\xcb\x41\x1c\xbc\x07\x2a\x7f\x08\xf7\x51\x25\xb7\x75\x32\xff\x8e\x41\x53\x52\x64\x13\xb5\xfd\xf5\xa6\x61\x92\x63\x60\xad\x2f\xee\xcb\xfb\x4f\xac\x5a\xd0\x4d\x07\x10\x07\x57\x02\xda\x9e\x4b\xf7\x45\x5a\xf9\xbf\x0e\x45\x36\x6c\x7f\x6d\x72\xe6\x34\x24\x99\x6b\xee\x25\xce\xeb\xde\x50\x4b\x59\x61\x67\xfd\x80\x8f\x88\x0b\xe2\xe0\x4a\xe0\x6d\x1a\xd1\xc3\x9e\x15\xef\xa7\x65\x18\x92\x94\xf3\x4b\xa3\xe8\x3d\x47\xe2\x4a\xd1\xf9\x25\xbe\x9f\x7b\xf1\x95\x53\xb6\x1d\x0a\x22\x2e\x88\x83\xf7\xc3\x98\x4e\x61\x14\x5e\xbe\x21\x8f\xeb\x33\x67\xff\xf9\x70\xe3\x9e\xbc\xd4\xb7\x21\x5f\x78\x50\x2e\xef\x7e\x8d\x23\x5a\x95\xc2\x8c\x41\x2c\x85\x40\x1c\x94\x28\x79\x3a\xaf\x0c\x1a\x6b\x4f\x92\xc2\x15\x7e\xb3\x4e\x3c\xb2\x32\xc1\xdb\x4e\x15\x35\xe8\x85\x35\xdb\xfe\x0b\x41\x3a\x85\x37\xd9\x2d\xa2\xe4\x48\x0f\xb5\x5e\xd6\x40\x55\xfa\x40\x1c\xbc\x0b\xfc\xf4\x30\xcc\xc9\x62\x53\x8e\x5c\xdc\xa9\xbe\x3e\xaa\xda\xa8\x73\x8c\x76\x2c\x35\xb2\xce\x1f\x6d\x20\xf1\xff\x23\x6b\x2a\x04\x0d\x0a\x20\x0e\x2e\x05\xca\x87\x46\xe7\x54\xee\x75\xfd\x65\x30\x76\x59\x6f\x52\xec\xc2\x16\x7c\xe3\xc1\x34\x16\x57\x92\x4f\xf6\x6a\x93\x5b\xc9\x17\x15\xba\xd8\x0b\xe2\xe0\x52\xd0\x6e\xb8\x62\x2b\x8e\x2d\xf7\xc8\xa3\x67\x73\xa9\x3f\x2d\x15\x4b\x6e\x40\x7a\x32\xe7\xca\x5f\xef\x06\xd2\x45\x3d\x9b\xec\x55\x3b\x44\x5c\x10\x87\x54\xfc\xdc\x3d\xcf\x85\xcc\xe8\xc5\xc7\xba\x81\xc7\xc6\x6d\x6b\x22\xc4\xcd\x2e\x9c\xf3\x32\xdc\xf4\x25\x1a\x97\x18\x24\xb1\x88\x57\x3e\x20\xa4\x00\xe2\xa0\x44\xc9\xd3\x79\x65\xd0\xfc\x77\x62\xb9\x42\xd5\xd1\x35\xc2\x32\x8f\x79\xac\x50\xe7\x7d\xd9\x77\x43\x6f\x78\x0b\x53\x5a\x7a\xc8\x77\x82\x69\x15\x1e\xa4\x6e\xc8\xe6\x42\x5f\x2f\x88\x83\x77\x41\x43\x2c\x01\x8f\x16\xf9\xda\xc6\x8b\x31\x13\xf5\x50\xfa\x56\xf5\x2f\x69\xcc\x53\x2f\x04\xfc\x73\x73\x08\x79\xc9\x43\x39\x1b\xa0\xf2\x7f\x20\x0e\x2e\x85\xbd\x36\xb7\x82\x8c\x91\x84\x41\x56\xee\x54\x9e\x9f\x69\x8f\xb5\x64\x34\x2f\xca\x25\x8c\x53\xe4\xef\xab\x1f\x93\xc9\xef\xf9\xbf\x83\x8a\xdf\x01\x38\xb8\x14\x1a\xfd\xdd\x73\xf1\x9a\xb3\x26\x6c\x5b\x9f\xb5\xb0\x1e\x9e\xbb\xbd\xa7\xb6\xb9\x59\x13\xc1\x15\xe3\xbb\x91\xf9\x21\xa8\x5f\x3d\x08\xaa\x57\x0f\xe0\xe0\xfd\xf0\x00\x2b\x35\xbe\xf8\xb8\xfd\xc3\x21\xe9\xd2\x25\xc2\xcb\xc4\xb5\xe5\xf6\xd8\x29\x37\xc7\xbe\xb0\x84\x15\xf5\xeb\x60\x52\xd2\x19\x20\xa4\x00\xe2\xa0\x51\xe1\x74\x5e\x19\xb4\x26\x39\xf1\x8e\xf7\xfd\x1a\x46\x8b\xcb\x9d\x73\x4e\xba\x73\x4b\xe5\x92\x54\xfc\x1f\x67\xb2\x58\x63\xb9\x23\xb3\x09\x17\x8a\x22\x4a\xff\x36\x1e\x43\x77\xbc\x01\x1c\xbc\x0b\x54\x34\x57\x6d\x84\x8b\xd7\x8c\x4c\xff\x60\x7e\x1b\x59\xd5\xec\x90\x36\xfc\x88\xa7\xf8\x61\xcd\x85\x81\xba\xc4\x3f\xa9\x1d\x0b\x2a\x52\x00\xe2\xe0\x52\x60\xe5\xe1\xa4\x64\x53\x2e\xfb\x6a\xf7\xe3\xb1\x63\x17\x86\xc9\x47\x9f\x9f\x72\x8e\xfb\x53\x9f\xc3\xe5\xfd\x37\xdc\x02\x29\x9f\x43\x69\xce\x20\x0e\x2e\x85\x67\x0b\x97\x22\xd3\x5e\x4b\xb3\xa9\x6b\x4a\x09\x05\x3c\x5d\x1e\x3c\x4c\xc3\x1a\x1e\xfb\x36\x66\x55\xcc\xe6\xcd\xf8\x44\xf3\x12\xf4\x7a\x3b\x88\x43\x7a\x1c\x63\x36\x5b\x0b\x33\x4d\x3e\xaf\x23\x75\x9a\xee\x9c\xeb\xb3\x84\xdd\xb6\x00\xc2\xec\xd4\xd8\x10\x07\xe9\xe1\x6b\xb7\xe8\x66\xed\x10\x52\x00\x71\xd0\xa8\x70\x3a\xaf\x0c\xf2\x59\x27\x7b\xe5\x8d\x42\xd1\xaf\xa8\x66\x3f\xe6\xc4\x0e\x75\xee\xeb\x2d\x2b\xa3\xc7\xdd\x26\xb9\xfc\x4c\xaa\xa6\xb7\xf6\xca\x7b\xae\xda\xc1\x4e\x41\x84\xef\x04\x71\xc8\x5e\x79\x88\x4f\x0b\x95\x72\x9f\x20\x14\x77\x9b\xe1\x5e\xb1\xb0\x38\xcd\x90\xfd\x02\x35\x4b\x55\x36\x23\x2b\x61\xe3\x64\xfb\x9c\xb1\x2d\x22\x32\x88\x43\xf6\xca\x29\x9b\xb8\xd2\xfd\x05\x66\x03\xd7\xe9\xdb\x7e\x3e\xa3\x4d\x21\x51\xb7\x6e\xdb\xba\x76\x39\xdc\xd4\xe1\xab\xa3\x39\xc5\xa4\xc4\x79\x44\x64\x10\xf7\xff\xd4\x0f\xfb\x37\x32\xf0\xa9\x6a\x84\x57\x7e\x54\x40\x1c\x10\xf3\x56\x30\x0e\x7b\xe4\xad\x00\xa3\x8e\xc2\x05\xa3\x3e\x9f\xd4\xd1\x9e\x9b\xd2\xeb\x71\x2f\x1e\x50\x06\xe9\x0e\xff\xeb\x95\x6f\x26\x36\xcd\xc4\xa1\x99\x9b\xda\x86\x06\xe1\xf9\x60\xb7\xe6\xd7\xb7\x59\x0d\x85\x2c\x6c\x12\x52\x58\xcc\x12\xb4\x18\xfc\x74\xfd\x07\xfd\x5b\x79\x4b\xee\x52\xa7\x45\x91\xd5\xdf\x3e\xa5\xd7\x43\x0e\xf6\x44\x21\xdc\xd8\x25\x4a\x07\x4a\xe9\x39\x77\xbd\xb4\x1f\x88\x98\xfc\xb7\x79\x65\x50\xd3\xfe\xcd\x86\x96\x81\xfb\xa9\x87\x24\xfd\x3b\x1f\x93\xfb\x6c\x79\x6e\x7f\x8f\xcf\xbc\x3f\xab\x7a\xf3\x7d\x62\xd3\xdf\xb1\x9e\x14\x3b\x8a\x84\xa8\x76\x0c\xf2\x33\xf0\x53\xa1\xd2\x3e\xc8\x5e\xb9\xb3\xe7\xbe\x70\x2c\x1e\x9a\x2c\x5a\xd9\x73\x67\xed\x07\xe5\x33\x3f\xff\x04\xfb\x24\x95\x6c\xd0\x60\xda\x90\x7c\x45\x97\x66\xd1\x3f\x93\x03\x5e\x61\xe4\x37\xa0\x5d\xdb\x1a\xca\xd0\x7d\x56\x05\xef\x57\x6a\xfb\x96\x1d\x5d\xf1\x60\xb7\x1c\x63\xbb\x98\xb7\xbc\xbf\xff\xc6\x9d\x66\x39\xfa\xea\x99\xb4\x16\xd9\x2b\x1b\x09\x61\x69\x1c\x56\xa5\x19\x30\xc4\x45\xb0\xb9\x06\x6c\x9a\x7b\x1a\x2e\x2b\xd6\x31\x71\xa6\x89\x5d\x3f\x97\x42\xd9\xf9\xf7\xeb\x99\xb4\xd6\x01\xe9\x67\xfb\x04\xc6\x36\xef\x0c\x89\xfc\xdc\xea\xeb\x36\xad\xe2\xfb\x5d\x39\x55\x32\x96\x36\xcc\x11\xee\x80\xf1\xe9\xd6\x20\x56\x81\x37\xe5\x99\x79\x65\x90\x88\x4e\x9a\x00\x03\xee\xd8\x0a\x3f\xb1\xdd\xd0\xc5\xc8\xbd\x76\x79\xe7\x75\x44\xa4\x0c\xc3\x48\xbb\xc3\x41\x07\x3d\x69\xa0\x44\xe1\xd2\x81\x54\x3f\x54\xb9\x0b\xc0\xc1\x07\xfe\x43\x43\x6d\xb9\x68\x05\xe7\x0e\xfe\xd7\xe6\x01\x58\x29\x2d\x9a\x37\xca\x2e\x0e\x37\xb1\xed\x52\x7d\xf0\x8e\x09\x64\x70\xde\x80\xaa\x9e\x82\x38\xf8\x04\xd8\xb8\x33\x13\xd5\x17\xf4\x77\x6c\x6b\xce\x54\xca\xfa\x89\x67\xa3\xd7\xab\x3d\x8f\x83\xb0\x99\x8f\x68\xaf\x13\x68\x97\xfa\xda\xb2\xa1\x35\x0b\x80\x83\x4f\x80\x49\x3d\x73\x74\x42\x21\x74\x97\xbf\xfb\x1c\xae\x3a\x2c\xbc\x96\xbf\x5e\x4a\xec\x26\xdf\x18\xf5\x25\x77\xa0\xdf\x79\xd9\x4f\x07\x4a\x7d\x04\x71\xbe\x92\x28\xd8\xff\xc6\xa5\xc7\xc9\x2d\xc6\x7a\xea\x97\xbe\x10\xd0\x7d\xb4\xa2\xaa\xbb\xbe\xb4\x77\xd1\xc0\x2a\x1f\xab\x75\x4b\x48\x6d\x60\x27\x78\x6b\x10\xe1\x95\x41\x1c\x94\x0e\x2d\x73\x9a\xa5\x10\xe8\xbb\x3e\x49\x09\xf6\xdb\xc6\x31\xea\x3a\x4b\x1a\x3a\x4f\x76\x15\xc6\x03\x4d\x4c\x49\x97\x42\x17\x95\x83\x28\x17\x6a\xac\x98\x2a\x04\x42\x9a\x85\x11\x3d\x00\xe2\xe0\x4a\xb0\xbd\x46\x48\x2b\x64\xf0\xd8\xe9\xb5\x3f\x1d\x4d\xfe\xb2\xbb\x27\x6b\x66\xd3\x4d\xbb\x99\xbb\x28\x92\xa5\x28\x9c\xd7\xd1\xa3\x2e\x20\xe2\x82\x38\xb8\x12\xcc\x99\x3d\x2a\xca\x3a\xb8\xdf\x11\x32\x19\xc4\xbb\x08\xef\x54\x0b\xa8\x3e\x95\x79\xaa\xd0\xd3\x40\xa3\xc0\xd8\x8c\x7e\x97\x1b\xaa\x2f\x0c\xe2\xe0\x4a\xd0\x4a\x12\xe1\xfd\xf6\xac\xf1\x1a\xc3\x63\xbc\x1f\x37\x5a\xd6\x86\x77\x55\xce\x57\xb1\x2b\x8a\x65\x52\xe7\xef\xe1\x68\x3d\x2e\x85\x8e\x23\x40\x1c\x5c\x09\xf3\x77\x3d\x05\x93\x57\xdf\x3e\xd7\xd3\xff\xe1\xc6\x95\xf6\xbb\x27\x3a\xa7\x3e\x36\xa6\xb7\xea\x8d\xc4\xd6\x25\x77\xe1\xc7\xc2\xfa\x88\xa5\x10\x88\x83\x32\x1f\x4f\xe7\x95\x41\x63\xed\x49\x52\x28\xbc\xc0\x24\x66\xff\xfb\xbb\x49\x6f\x16\x7b\xfb\xd7\xf1\xdd\xc2\x08\x8f\x8e\x45\x23\xe5\x97\xa5\xc6\x6e\x21\x5a\x33\x25\x0f\x65\x11\x5d\x00\xe2\x90\x5e\x99\x55\x1e\x29\xbe\x7b\x97\x1d\x83\xc2\xb5\xc7\xc4\x79\x6d\xb5\xb7\xff\x4b\x74\x4a\x4b\x2f\x8e\xba\xd9\xc3\xd5\x40\x0d\x41\xcb\x9b\x50\x49\x30\x00\x07\x97\x02\x09\x83\xa7\xa4\xbc\x7f\x6b\xd8\xc1\xc6\xe8\xeb\xbf\x28\x46\x16\xb1\x5e\x09\xf9\x18\x29\x91\xfa\xa4\x3b\xfd\xd5\xce\x8f\xf4\x2b\x11\x71\x41\x1c\xd2\x4d\x5d\x2e\x4c\x1a\x83\xd9\xdd\xe6\xf9\x32\x13\x2f\x17\xe3\x7b\xec\x49\x66\x54\x4e\x38\x5a\x06\xfc\x4f\x5e\x67\x65\xda\xe3\x6b\x42\x0f\x6f\x81\x38\xb8\x14\xf4\xa6\x14\xae\x5b\x93\xa2\x2c\x3a\x67\x6e\xab\xf8\x2d\x65\x16\x7d\xb9\xc0\x5b\xe4\x12\xfb\x4a\x30\xf0\x89\xce\xcd\x47\x83\xe9\x6a\xd0\xb9\x32\x80\x83\x32\x1f\x85\x4f\x25\x05\xd0\xfc\x77\x92\x14\x44\x9f\x39\x04\x08\xe1\xf6\x7f\xf6\x3f\x67\xc3\xd7\xa7\x46\xd6\xea\x8e\xfb\x6e\x23\x2d\xa7\xfe\xd5\x48\x8a\x6e\xdc\xbe\xaa\x7e\x24\xa2\x0b\x40\x1c\x5c\x0a\xf2\xce\x8e\xee\x64\x9a\xb9\xf4\x99\x1c\x43\x9a\xe5\xe8\xbc\xce\x51\x8b\xd8\x59\xea\x7e\xbd\x8e\x59\x1f\x50\xc3\x89\x74\x56\x7f\x40\x57\x17\x00\x1c\x5c\x0a\x86\xb2\x9b\xa3\x41\x15\x4d\xfb\x6d\x6d\x63\x1a\xc3\x49\x04\x32\x07\x9e\xad\xb3\x58\x09\x15\x77\xb8\xca\x6f\x74\x59\x6f\xca\x42\x3b\x68\x20\x0e\x2e\x85\x83\xc4\x6d\x89\x77\x2a\xbc\x9f\xef\x08\xd5\x39\x49\xfc\x19\xdd\xd7\xa4\x6f\xb0\x5e\x78\x9e\x10\x1c\xa8\xcd\xba\x1d\x37\xf9\x1a\x2a\x14\x0f\xe2\xe0\x52\xc8\x22\x0e\x09\x68\xbd\xd1\x68\x2d\xf4\x3d\x0d\x97\x4a\x8c\x82\x3a\xe6\xe6\x06\x6b\xcd\xab\xc5\x8b\xb8\xea\x56\x91\x56\xe6\x37\xa0\xc3\x44\x10\x07\x8d\x0a\xa7\xf3\xca\xa0\x35\xc9\x89\x57\xd0\x62\xbe\x45\x0f\xa5\x1c\x3a\x88\x84\xee\x8a\x87\xf9\x0b\x77\x69\xa1\x55\xef\xa3\xdb\x7c\xf4\xc7\x9d\xff\x18\x7a\xf3\xca\x8d\x22\xe8\x0a\x1a\x80\x83\x4b\x61\x5d\xa8\x3b\x59\x7b\xcb\x36\x3c\x9f\x50\x98\xd7\xe3\xbb\xed\x0d\xf2\x06\x97\xab\x6c\x77\xf6\x17\xde\x61\xac\x70\x5e\x30\x5a\x84\x2e\xf2\x80\x38\xb8\x14\x5e\x63\x55\xc8\x17\xbb\xa0\xd1\xad\xa9\x49\x48\x51\xa1\x60\x7e\x09\xf2\x18\xb5\xb8\x75\xa1\xb4\x61\xbd\xc5\xa3\xc9\xe5\x38\xf0\xff\x78\x7b\x00\x07\x97\x82\xb5\x41\xa0\x27\x77\xcd\x38\x67\x22\xca\x33\xd2\xea\x87\xd5\x72\xbd\x23\xbf\xae\xe9\x64\xbf\xc6\x6f\xf3\xaf\xa0\xf9\xe5\xf6\x01\xaa\xc8\x02\xe2\xe0\x52\xe8\x9b\xe8\x52\x9b\x10\x78\xf7\xaa\x62\x87\xba\x91\xc9\x81\x3e\x36\x2d\x4e\x2a\xd9\x5d\x5b\x87\x43\xc7\x50\x74\xba\x02\x4f\xd1\x1f\x21\x05\x10\x07\x8d\x0a\x0e\xa7\xf2\xca\x20\x9f\x75\xb2\x57\x76\xec\x97\x4e\x4f\xb6\x5d\x17\x51\xc8\x32\x33\x2c\xee\xbf\xc6\xd1\xc6\x5c\x33\xdd\x39\x6f\xb6\x74\x91\xfd\x50\xaf\x65\xcf\xa9\x06\xe1\x3b\x41\x1c\xb2\x57\x7e\x61\x9d\xea\x99\x55\x3d\x41\x9c\x88\x66\xc8\xcd\x4a\x61\x38\x85\xba\x3a\x33\xb3\x81\xfa\x81\x7d\x9e\x58\x60\xd0\x7f\xea\xfe\x26\x22\x32\x88\x43\xf6\xca\x95\xb3\xa8\xcc\x78\x03\xd1\x9e\xbf\x23\x3f\x48\xe9\xa3\x3b\xde\x0c\xa8\x5b\x16\x2d\x3a\xce\xa9\x94\x7d\x96\xd3\x46\x8e\xdf\xee\x88\x88\x0c\xe2\xfe\xc7\x2b\xff\x67\x01\x76\xe0\xdb\xd3\x08\xaf\x3c\x9f\x72\x5c\x1d\x48\xba\x62\x50\x6a\xf6\xc0\xba\x94\x4e\x03\x97\x4f\x53\x28\x66\x38\x6c\xef\xeb\x83\x65\x87\x5a\xee\x32\x41\xcc\x7f\xbd\xb2\xa0\xb0\x92\x9a\x6b\x70\x38\xaa\x84\xcb\xbe\x4a\x37\xf7\x9c\x83\xee\x8e\x4c\xa0\x82\xc1\xe5\x55\x8c\xca\x17\x77\xef\x71\xab\xfe\x7b\x7e\xea\xd5\xda\x43\xfb\x00\x43\x56\x32\x36\xce\xf3\x30\x8c\xe4\x47\xde\xfa\xd4\xd2\x93\x87\xc3\x93\x2e\x89\xc7\xee\xbf\x09\x85\x66\xc7\xff\xdb\xbc\x32\xa8\x69\xff\xa6\x37\x23\x79\xe5\x67\xea\x38\x45\xc4\x8a\xf4\xdf\x68\x71\xbe\x32\x04\x64\xa3\x5f\xaf\x7d\xb0\x78\xeb\x8d\x15\x13\x8b\xa8\x23\x4b\xbf\x99\xa8\x7f\xdb\x99\x1c\x79\x22\x7b\xe5\xfd\xce\x5f\xb3\x6f\xe6\x69\xc5\x6a\xaf\x89\xd8\x5a\x50\xbf\xca\x24\xa6\xd5\x79\x34\xf1\xd7\x9d\x69\x49\xca\xc2\x58\xff\x91\xec\x99\x5c\xfd\x16\x47\xf6\xca\xb6\x69\x18\x36\xa9\x87\x5e\xd5\xec\xf4\x0f\xde\x7e\xe1\x6a\xab\x1a\xfe\xed\xed\x4e\x52\x18\x50\x5d\xe7\xe2\xe8\x8f\x7d\x91\xed\x4c\xae\x7e\x7f\x42\xf6\xca\xa6\xa4\x01\x43\x13\xed\xfc\xbc\x32\xbf\x86\x3c\xf8\x35\x18\x69\xd0\x94\x94\x5a\xea\x03\x3b\x9c\x1e\x60\x67\xbf\x68\x70\x0a\x94\x3f\x93\xd6\x22\x7b\xe5\x6d\xb2\x5f\x05\xf8\x28\x34\x9f\x79\x36\x48\xc5\xb6\xe6\x3f\x79\xd5\x18\xef\x29\x52\x09\x84\xb1\x2f\x74\xac\x13\x0f\xbf\x5c\x89\x3e\x33\xaf\x0c\x12\xd1\x49\x13\x60\x76\xaa\x60\xf9\xb1\xaf\x55\xec\xe8\x0b\x9a\xd5\x01\xc2\x4d\xf4\x7a\xfe\x21\x07\xa3\x2f\x81\x23\x29\xcc\x2a\xa3\x66\x09\xe9\xf7\x11\x03\x3f\x88\x83\x4f\x80\x07\x2f\x94\x1b\x9e\x05\xfb\xdb\xb1\x88\xbf\xa5\x49\x9f\xa2\xdc\xd4\x33\xff\x6c\xcd\x27\x7a\x9e\x69\xc3\x65\x72\x24\x34\x9c\x28\x09\x5a\x5b\x00\x38\xf8\x04\x58\xc2\xe7\x5d\x4f\xf4\x1a\x3b\x28\x06\xaf\xd4\xe9\x17\x03\xa5\x08\xab\xaf\xe0\x94\xe8\x9c\x75\xa5\xe4\x58\x62\x54\x6b\xab\x9a\x09\x94\x18\x07\xe0\xe0\x13\x60\xee\xca\x5d\xf7\x09\xc1\x55\x57\xf9\x1f\x62\xa3\x0b\xbf\x39\x55\xb1\xb3\xf2\x92\x59\xbe\x3e\xad\x15\xe1\x7f\xba\x60\x52\x72\x15\xda\xdc\x06\x71\xbe\x92\x28\x3e\xff\xe1\xe8\x0a\xc5\xc3\x04\xfb\xf4\xb7\xea\x37\xb8\xb1\x0e\x4d\x6e\xd5\x2a\xf7\x14\x48\xac\x92\x9b\x3f\x15\x91\x55\xe9\x8c\xe3\xe0\xfb\x8c\xf0\xca\x20\x0e\xca\x6f\x3e\x95\x57\x06\x7d\xd7\x27\x29\x61\x38\x39\x53\x51\xd7\x7e\x05\x2b\xc2\x8f\x28\xa2\x54\x26\x88\x60\x39\x5d\xe4\xb6\x5e\xf9\x0b\xfb\x4c\xb1\x5f\x6d\xea\x3f\xfb\xa1\x5b\xf3\x20\x0e\xae\x84\x47\xdd\x76\x59\xdd\x5a\x73\x0e\xab\x49\xae\xbb\x43\xb6\xd1\xb3\xa2\xea\x6c\xc3\x2e\xb9\x52\x6e\x1c\x19\x81\x96\x39\x02\x6b\xb3\x88\xb8\x20\x0e\xae\x04\xef\xd4\x4c\x63\x5a\x6f\x16\xd6\x6c\x22\x43\x05\x25\x0d\x9b\x1f\xd8\x1d\x2c\xf4\x4e\xd7\x0e\x3e\xa2\x33\x70\xb2\xdb\x9a\xc9\x51\x22\xe2\x82\x38\xb8\x12\xbc\x44\x71\x05\xb7\xdb\x8a\x4c\xd2\x72\xea\xd0\xa8\xcd\xd4\x6a\x0b\x07\x8b\xc8\x8d\xc8\x0c\x57\x9d\x87\x3c\x48\x1b\x15\xc5\xf8\xa1\x62\x7a\x00\x0e\xae\x04\x4a\x75\x6b\x07\x2e\xc2\xdd\x7b\xed\x42\x2b\x2d\x52\x7e\x1c\xb4\xb9\x33\x2c\xc9\xca\x91\xd1\x83\x57\xbb\x74\x45\xec\xdf\xea\xf9\x20\x96\x42\x20\x0e\x4a\x65\x3c\x9d\x57\x06\x8d\xb5\x27\x49\x21\x04\x9d\x37\x31\xac\x71\x9c\x59\xf1\xd8\x62\xe6\xcd\xdd\xbc\xdb\xec\xb4\xa4\x32\xf5\x0f\x09\xaf\xe8\x05\xb9\x1c\x8c\x8e\x65\x41\xde\x13\xc4\xc1\xa5\x90\x3f\xea\xef\xa9\x9e\xbf\xf3\x2d\x9c\xee\xe0\x0e\x1e\xf9\x8d\x03\x9a\x76\x1a\xc7\x86\xfc\x3d\xee\xb8\xab\x6b\x68\x76\x6c\x14\xd0\x75\x7c\x10\x07\x97\x82\x81\xc4\x54\xf0\xf9\x8e\xe1\x82\x2e\xaf\x20\x81\x80\x32\x5b\x3c\x02\xe9\x19\xf5\x32\xad\x00\x3d\x0e\x17\xf6\x17\x35\x8f\xa2\xa0\xa7\x05\x40\x1c\x5c\x0a\x44\x62\x93\x69\x0c\x5e\x06\x42\x59\x5f\x3d\x0c\x3d\x17\xac\x6f\x8a\xff\x6d\xb5\xc4\xb8\xeb\xdd\xb4\xaf\xf3\x84\xc9\x38\x25\x0d\x72\x07\x20\x0e\x2e\x05\x53\x9f\xcf\x22\x5f\xd3\xaa\xed\xdd\x3d\xdc\xd7\x8d\x1a\xd3\x1a\xf4\xaf\x6a\x86\xe3\xa4\x63\xa3\x19\x73\xd4\x33\x5c\x0c\x62\x38\x87\x90\x02\x88\x83\x52\x19\x4f\xe7\x95\x41\xf3\xdf\x49\x52\xf8\x85\xe7\xbe\x62\x99\xa1\xa2\xd7\x9c\x35\x43\xd0\x4a\x7f\xc3\xdd\x65\xd5\x23\x59\xa8\xd3\x46\xae\x27\x64\x28\xba\x39\xd1\x0d\xca\xf6\x07\x71\x70\x29\x50\xa2\xb3\xb3\x6f\x33\x9f\xdf\xb1\x8d\xb4\x20\x21\xf7\xd6\xd7\x73\x0a\x0f\x26\x2b\xa4\xe5\x15\xea\xb7\x7d\x77\x5f\x5a\x20\x05\xda\x36\x01\x71\x70\x29\xfc\x96\x51\xea\xbc\xb7\x6d\xe3\x87\x8f\xcd\x67\xd3\xda\x40\xb0\x6a\x78\x23\xd9\x61\x92\x83\x58\x7b\xed\x29\xa9\xdc\x32\x89\x45\x3e\x22\x2e\x88\x43\xda\x4b\x95\x98\x93\xd9\x21\x16\x7f\x93\xe4\x49\x7c\x6b\x30\x75\x47\xd1\xd5\x84\x26\xe7\x75\xc8\x51\x77\xa6\x8f\x97\x8b\x64\x5d\x00\x24\x31\x10\x07\x97\x82\xf2\xca\x15\x0e\x9f\x14\x0b\xa7\xdb\xf3\xed\xf3\x77\xec\x95\xe9\xf8\xe8\xc7\x71\x87\xbf\x8e\xee\xa7\x5c\xc4\x92\xb7\xbe\x92\x20\x8d\x90\x02\x88\x83\x46\x85\xd3\x79\x65\xd0\x9a\xe4\x24\x29\xe4\xb1\x2e\x1e\x36\xbd\xa9\xba\xee\xce\xf0\x68\x76\xe9\x78\x1b\xe7\x61\x84\xaf\x80\x57\x66\x33\x96\xd2\x52\x60\xca\x57\xcd\x63\xe8\x96\x05\x88\x83\x4b\xe1\xf1\xbb\xed\x55\xcf\x92\x91\x81\x17\x57\xa8\x6f\x8b\x98\xe0\xf9\x04\x7c\xcb\x54\x8d\x0e\x3f\x94\x7d\x1b\xd3\x81\xc7\x6d\xfa\x15\xda\x56\x07\x71\x70\x29\xb8\xfd\x6d\xc1\xb8\xdd\xdf\x30\xc3\x3d\xc8\xe2\xc3\x6f\x8e\x4e\xdf\x7e\x29\xed\xbc\x84\x3c\x9d\x72\x60\x15\xeb\x76\xd8\x61\x34\x0b\x22\x2e\x88\x83\x4b\x01\xe5\x7a\x9a\x7e\x5f\x7b\x5a\x86\x0e\x2f\xbe\xa3\x29\x6f\x4c\x5c\xa0\x45\xff\x2f\x4e\x03\x4c\xc3\xb5\x45\xc9\xc5\xf5\xf0\x49\x68\x9b\x07\xc4\xc1\xa5\xa0\xc7\x12\x83\x96\x3f\x59\x70\xf4\xd0\xfe\xc3\xbd\x51\x87\xec\xfd\x4e\x81\x87\xfe\xcf\x06\xaa\x88\x71\x3f\x88\x5a\xb6\xc5\xa9\x1e\x42\x3b\x68\x00\x0e\x1a\x15\x4e\xe7\x95\x41\x3e\xeb\x64\xaf\xcc\x1a\x56\x6c\xe3\xbc\xd1\x3f\xf7\x94\x1f\x7f\xdb\x67\x57\x28\x16\xcb\x11\x33\xbe\xf5\xc6\x9c\x1b\x7b\xbf\x44\x60\xde\x5e\x1a\x35\x54\xe1\x0b\xc0\x21\x7b\x65\xe1\xa7\x77\x03\xde\xfa\x58\x62\xe1\x06\x8d\xda\x72\x62\x8c\xab\xe4\x8c\xec\xb0\xdb\x8b\x34\xe3\x74\x04\x1b\xbe\x24\xb8\xf9\x52\x07\x11\x19\xc4\x21\x7b\xe5\x8b\xb3\xaf\x4d\xc2\x26\x8c\x2a\x0a\xe8\x8a\x2c\xf8\x64\xa6\x0c\xc2\x38\x5d\xfd\xf3\x1c\xd9\xd3\xf9\xff\x32\x36\x50\xdc\xc2\x0d\x40\x44\x06\x71\xff\xcf\x93\xcf\xff\xe1\x95\x41\x8f\x49\x23\xbc\x72\xff\xdc\x13\xd4\x03\x13\xed\x61\xec\xc5\x32\x41\xbf\x69\xc6\xbc\x35\xb3\x18\xba\x97\x6e\x63\xda\x73\x82\x13\x71\xde\x83\x04\x2f\xff\xf5\xca\xe8\xa3\x9a\xc6\xe1\x31\x21\xb1\x99\xd5\x19\x43\xa5\x11\x86\x06\x38\x0b\x32\x26\xe2\xd2\x76\x56\xdb\x23\xac\x86\xb1\xde\x75\xf7\xfe\x41\xa7\x37\x9e\x7d\x93\x2b\xa9\x8a\xa1\x32\x74\xa3\x29\xc1\x0d\xbd\xc2\xce\x2b\x5a\x2a\xd3\x34\x4d\xae\x97\x68\xfa\x36\x5b\x44\x8f\xf4\xbf\xcd\x2b\x83\x9a\xf6\x6f\xbe\x32\x92\x57\xae\x1b\x8f\xf6\xe4\xbb\x70\x6e\x26\xa4\x45\xe3\x6a\xb7\xa9\xeb\xd7\x0a\xc9\x50\x12\x33\xee\xd9\xa6\x65\xcf\x5a\xd4\x66\xae\x19\xb4\x33\x39\xf2\xe4\x41\xb2\x71\x56\xc3\x37\x19\x4c\xfc\xf6\x39\x50\xee\x36\x79\xce\x11\x4a\xc9\xac\x60\x3f\x3e\x17\xfe\xe1\x11\x2a\x89\x9a\x99\x68\xd4\xf4\xb3\xc9\x33\x39\xe0\x45\xf6\xca\xd1\x6b\x0f\xcb\xa6\xdb\x9f\xab\xe0\x59\x28\x0b\x31\xb1\x39\x71\xe5\x69\xfb\x47\x54\x24\xb2\x0b\x63\xe9\x06\x97\x7b\x4f\xa0\xe4\x9c\x49\x6b\xb5\x91\x7e\xf6\x6d\xa1\xca\x1d\xe6\x91\x6a\x35\xfe\x9e\x9a\xc3\xd7\xd1\xa4\x5e\x41\x8a\x79\x01\x64\x7b\x76\xd8\xc4\x2d\x04\xc4\xba\xe1\xd8\x59\x67\xd2\x5a\x64\xaf\x8c\x75\x3f\x79\x76\x7f\xa6\xe3\xa1\xc8\xa3\x74\x8c\x1e\x16\xae\x4e\x36\xbe\xc4\xbc\x55\x6b\xeb\x5b\x2b\x6a\xce\x32\xc7\x89\xad\x67\xf0\xee\xf7\xfd\xd3\x89\xe8\xa4\x09\xf0\xe1\x2d\xae\x7e\xe1\x5e\xcf\xa4\xee\x86\xa3\x6e\x26\x46\x0d\x93\x5f\x1d\xb8\xcd\x36\x6f\x15\xf7\x0b\x6b\x8e\xe3\x9b\xc8\x4d\xa1\xd7\x34\x41\x1c\x7c\x02\xe4\x9f\x72\x94\x0d\x12\xa2\xaf\x69\x11\x5b\x0b\x7f\x68\x13\x97\x19\xd1\x1e\x70\x8e\xa6\x6e\x2f\x0f\xe7\x87\x84\xd6\xb9\x3f\x01\xd0\x7b\x17\x20\x0e\x3e\x01\xda\xea\x08\xeb\x46\x0b\xdc\x70\xa8\x56\x5d\x6c\x93\xed\x32\x15\x18\x79\x56\x50\x34\xb0\x4e\xb5\x78\x4f\xdf\x24\x2b\xd6\x5b\x5c\x00\x3a\xa5\x04\x70\xf0\x89\xaa\x14\x43\xe4\xa1\xec\x1b\xb2\x04\x05\xbc\x94\x30\xe7\x55\xdf\x95\x98\x3d\xcd\x6f\xcd\x58\xbb\x7a\x69\xae\x89\x24\x22\x9a\x5d\xd0\xeb\x3a\x20\xce\x57\xf2\x3f\x6f\xe7\x2c\x3c\x61\x28\x16\x29\x8d\xfd\x45\xd8\x41\xf6\xe5\xed\xdd\x14\x86\x8f\x21\xce\x5f\xe5\x6a\x27\xd1\x6c\xf9\xab\x07\xf1\x15\xd4\xa1\x3b\xd8\x20\x0e\xca\x57\x3e\x95\x57\x06\x7d\xd7\x27\x29\xe1\x51\x8d\x27\x9a\xb5\x9b\x88\xe2\xb9\x47\xe5\x02\xcf\x13\x09\xb5\x27\x06\x25\x92\x48\xb7\xb3\x3e\x88\x26\x2d\x6a\x15\x04\xbd\x77\x86\x3c\x2d\x80\x83\x2b\x21\xe0\xca\x57\x9a\x05\xd2\x5a\x25\x9f\xd5\xa7\x87\xdc\x66\x34\xb8\x42\xb5\x63\xa9\x15\x1b\xb7\x5a\xdf\x06\x37\x61\xca\xad\x3b\x8f\x43\x37\x17\x00\x1c\x5c\x09\x9f\xf7\xae\xde\xbf\xaf\xd7\x2d\xae\x1a\x8f\x41\x5b\xf5\x89\x42\x7e\xec\xa0\x39\xa8\x40\xd1\xaa\x00\x9b\xe9\x1a\xb9\xb0\x7b\x71\x3d\x54\x04\x19\xc0\xc1\x95\x90\x40\x94\xcf\xbe\x49\x92\xb6\xbe\x63\x57\xd0\xc2\x23\xcd\x4e\xfa\x7c\x59\xd5\x2e\xfd\x2a\x1f\x43\x93\x7b\xc2\x2b\x3d\x03\x34\xa8\x18\x34\x88\x83\x2b\xc1\xb9\x40\xad\x7b\x44\xb1\x0e\x97\xfc\x4f\xf5\x5b\xc5\xf7\xaf\x08\x2e\xc5\xf1\xe1\xc8\xf9\xb8\xf4\xfa\x91\x7e\xed\xcf\xa4\xd0\xc3\x41\x2c\x85\x40\x1c\x94\x99\xc8\x73\xaa\x55\x31\x68\xac\x3d\x49\x0a\x0c\x61\xc5\xb2\x58\xbe\x24\xf6\xf5\x96\x11\xf1\x7f\xef\x6a\x67\x5f\x0b\x70\x2c\x8f\x9e\x7c\xa2\x48\xba\x3c\x7a\x18\xf5\xd5\x07\x32\x32\x20\x0e\x2e\x85\xd2\x8e\x55\x55\xbe\xb5\xa7\x78\xf8\xd8\x0a\x77\xca\x36\x03\x0f\xcc\x9d\xd0\xab\x19\xfb\xf0\xbf\x30\xe8\xe0\xb2\x76\xf9\xd9\xc6\x43\x1f\x19\x80\x83\x4b\x41\x3d\x3d\xec\x89\x4d\x2f\xf3\xef\xc2\x3f\x01\x45\x58\x8b\x0c\x32\xa9\xf1\x96\xfd\x75\x7b\x6b\x41\x34\x23\x5f\xd8\x4c\x71\x8d\xcf\x21\xe2\x82\x38\xb8\x14\x8e\xe7\xde\xd3\x14\x96\xf1\x3e\x10\x72\x45\xe5\xfb\xbb\x23\xf9\xe6\x28\xe9\xca\xeb\x17\x2b\xbb\xa8\x59\x07\x41\xaf\xf0\x8c\xae\x43\xaf\x43\x83\x38\xb8\x14\x26\x88\x5b\x15\x47\x37\x8a\x77\x2f\xa0\x4e\x1c\x4d\x7c\xad\x0e\x95\x68\xf8\xdb\x5a\xd8\xcd\x9e\x10\xff\x10\x57\xd5\xd9\xfc\x33\x2d\x42\x0a\x20\x0e\xca\x4c\x3c\x9d\x57\x06\xcd\x7f\x27\x49\x21\x38\x9f\x7c\xbf\x5d\x39\xbb\xe1\x41\xe4\xfd\x23\x94\xf7\x84\x93\xfc\x8e\x01\x7e\x5a\x3a\xca\x69\x0b\x21\xdc\x29\x4d\xb4\x5c\xd0\x21\x1a\x88\x83\x4b\x61\x76\x89\xc3\x03\xcf\x65\xf5\x73\xdb\xd2\xb2\xe3\x21\x55\xb4\x91\xe9\xf4\x5a\xf7\x3e\x5e\xdd\x30\xc7\x77\xc5\x1e\x45\xc9\x7c\xe8\x9c\x16\xc4\xc1\xa5\x70\xa7\x0f\x57\xe7\x4a\x6e\x00\xba\x16\x13\x75\xd4\x04\x7e\x40\xa2\x96\xe9\xfc\x86\x44\xb8\x54\xda\x83\x88\xca\xeb\x4f\xbe\x7e\x48\x41\xc4\x05\x71\x70\x29\x88\x35\xab\x58\xf1\xc8\x4b\x0f\x7d\xc4\xf9\xea\xf7\x22\xcc\xa2\x84\xf6\x6b\x51\xae\x24\xa1\x5a\x75\xa8\x03\xc9\x18\x2e\xa5\x15\x54\xca\x1d\xc4\xc1\xa5\x20\xc9\xfc\xad\x00\x3b\xe7\x41\x86\x9b\x79\x4d\xc1\x85\x57\xad\x55\x9d\xd1\x9e\xd7\x2f\xaa\xf1\x7d\x2d\x23\x46\x19\xec\xb6\x2a\x9e\x46\x48\x01\xc4\x41\xa3\x82\xf6\xa9\xa4\x00\x5a\x93\x9c\x24\x85\xf1\x5b\x64\x9f\x3b\x46\xa7\xec\xa9\x3e\xde\x5f\x6d\xed\x8f\x7c\x3e\x9e\xce\xc5\x96\x68\xc8\x18\x12\x7d\xcf\x2a\x8b\xe7\xbc\x1f\x74\xf5\x0a\xc4\xc1\xa5\x80\xdd\x2d\x1e\xf7\x76\xe5\xae\xeb\x56\x3d\xe9\xe3\x6d\x5b\x2e\xa6\x3b\x58\x85\xc3\x69\x9f\x5c\x53\x43\x79\x9b\x23\x05\xc7\x7c\x74\x10\x71\x41\x1c\xd2\x6d\x93\x1b\x37\x3a\x87\x84\xc8\x9c\x9f\x3a\xfe\x11\x76\x8c\x88\x7f\x29\x6d\x3e\xff\x31\xd3\x61\x73\xad\x3e\x2b\x77\xcc\x74\x47\x0a\xba\x2b\x0d\xe2\xe0\x52\x68\x0a\xd2\x6e\x63\xec\x9f\x7d\x79\x18\xf3\xfc\x61\x14\x5a\x59\x3f\xa1\x4f\xed\xde\x30\xed\x5f\xc7\x3f\xdd\xef\x53\xc8\x3f\x14\x40\xef\x46\x80\x38\xb8\x14\xc4\xd9\xc2\x93\x1a\x6e\x14\xcc\xf1\xf3\xed\x31\x28\x5e\xe9\x26\xbf\xfd\x7e\xf1\x29\xdb\x22\x93\xcb\x43\x57\x8f\xde\xfb\x59\xc6\xf5\x08\x29\x80\x38\x68\x54\x38\x9d\x57\x06\xf9\xac\x93\xbd\xf2\x96\xa1\x7d\x05\x6d\xce\xc0\xdb\x8d\x3b\xc5\x1f\x24\x92\x38\x47\x48\xec\xfa\xc9\xf5\xdd\xd5\x0a\x6f\xf9\x2f\x55\x7a\xd6\x2c\xdd\x42\xf8\x4e\x10\x87\xec\x95\xd1\x0f\x4c\x7f\x1f\x1d\xe1\x84\xec\xa1\x30\x65\xe1\xee\x2a\x1d\x48\xd5\x7e\xb3\xd2\x9b\x08\x28\x94\xaf\x8a\x98\x61\x21\xd4\x7d\x80\x88\x0c\xe2\x90\xbd\xf2\x43\xab\x9e\xdc\xc1\xca\x60\x3f\x82\x0c\x13\x7e\x29\x25\x69\x62\x1f\x7a\xbf\xf1\x58\xee\xa3\x66\xe3\xcd\x90\x2f\x12\x2c\x6e\x69\x88\xc8\x20\xee\x7f\xbc\x32\x0a\xda\x7f\x44\x06\xbd\x0e\x8d\xf0\xca\xcd\x01\x68\xb3\xf5\x7f\x44\xaa\x37\x78\xb8\x3f\x9b\x11\x4d\x2e\x86\xa8\x66\x3c\x54\x3d\x54\xab\x88\x14\xc9\x38\xe7\x39\x7c\xa3\xf7\x5f\xaf\x9c\x6d\x6d\x85\xc7\x7d\xb8\x93\x23\xda\xfd\x35\xe5\xab\xfd\x9e\x80\x76\x8f\xaf\x09\xa3\x13\x73\x97\x25\xaf\xde\xc0\x41\xa3\x00\xeb\x3f\x68\x22\x03\x75\xb7\x66\x4e\x2d\xd1\x25\x8c\xe6\x42\xe1\xba\x5f\xc3\x9b\xe5\x78\xb1\x5d\x45\xc1\x84\x24\xc2\x6e\xd4\x64\x2a\x3a\x17\xff\xdb\xbc\x32\xa8\x69\xff\xe6\x2b\x23\x79\xe5\xed\x07\xcb\x96\xdf\x6a\x69\xbe\xd3\x1e\x9b\xda\x7e\x0c\x32\xcb\x49\x88\xe8\x6a\xfa\xcb\xa2\xe6\x32\x35\xdc\xd5\x16\x99\x26\x49\x74\x26\x47\x9e\xc8\x5e\x39\xa1\xc5\x5d\xd7\x4c\xb1\x30\x7e\xa7\x7e\xc9\x3f\x6d\xbf\x4d\x7f\x30\x6b\xf1\xca\x0a\xf7\xac\xc4\xa1\x41\x46\xb4\x2a\xc9\xa2\xea\x99\x1c\xf0\x22\x7b\xe5\x08\x1f\x69\x41\x56\x8a\xa0\xf3\xbf\xf1\xce\x4b\x0a\x7e\xbb\x2f\x18\xbe\x86\xaf\x74\xc1\x2c\x36\xdc\xfd\xde\xe1\xaa\x3a\xcb\x6a\xff\x99\xb4\x16\xd9\x2b\xff\x79\x3c\x7b\xbf\x71\xc1\x50\xfe\xa9\xcf\x2d\xc9\xc2\xa4\x2d\x1f\x81\xa0\x4b\x5f\x35\x9e\xee\x9b\xfd\xb4\x23\x8f\xbe\x69\x36\xff\xf3\x4c\x5a\x7b\xc2\xb9\xf2\xea\x67\x4c\x94\x89\xde\x25\xeb\x55\x19\xab\xfc\xfb\x59\xba\x46\x37\x14\x18\xd7\x9d\xaa\x72\xda\xdd\x84\x95\xcf\x75\xce\x6b\x9d\x99\x57\x06\x89\xe8\xa4\x09\x30\xf3\x42\xfa\x9d\x0a\x99\xa8\x8c\xe9\x68\x45\x69\x4d\x61\x53\x72\x45\x2e\xb1\x17\xac\x1a\x4b\x9f\x5e\xe3\x49\xef\x04\xa1\xf9\x43\xd5\x92\x41\x1c\x7c\x02\xcc\x29\x5b\xe7\xf6\xca\x0e\xff\x49\xdb\x31\xb3\x2d\xdc\x37\xa4\xd6\x72\x6f\x5a\x4f\x88\x51\xa7\x57\x97\xcf\x56\x82\xf2\xa8\x10\xaa\x86\x09\xe2\x90\x26\x40\xd2\xd2\x5b\x7f\xdf\x6f\xe5\x38\x61\x63\xf7\x49\xdb\xb2\xed\xae\xbd\x5f\xff\xac\xd4\x6b\xa2\xa4\xa4\x29\xd5\xa1\x3c\xa5\x25\x0d\x4d\x80\x00\x0e\x3e\x01\x06\x73\x07\x4b\xdb\xfd\x4a\xfa\x22\xbd\x49\xc5\x30\x64\x1b\xff\x34\xdb\x3b\x9e\x16\x37\x82\xbb\x4c\x4e\xeb\xc9\x8b\x61\xb3\x46\xe8\xc8\x0b\xc4\xf9\x4a\x8a\xff\x47\x3f\x30\xff\x42\x9f\x56\xdb\x08\xbb\x9a\x39\x3d\x39\x7c\xd7\x60\x91\x84\xc4\x63\x3a\xb7\xe7\xca\x20\x9a\x18\x6e\xb3\x3f\x5d\x0f\x59\x0e\xc2\x2b\x83\x38\x28\x5f\xf9\x54\x5e\x19\xf4\x5d\x9f\xa4\x04\xd3\x1a\xcd\x56\xea\xd7\x06\x19\xe7\x8e\x6b\x1f\x15\x31\x56\x55\x55\xab\xe6\xa6\x35\xf6\xb3\xc5\xbe\x3d\xae\x76\xa1\xdb\xc9\x83\x2e\x9c\x82\x38\xb8\x12\x54\x7f\xe0\xc9\x09\x15\x2c\xf3\xdd\xad\xa0\xf2\x23\xc5\x25\x21\xbd\x26\xc0\x59\xb9\x88\xc2\x7c\xc8\xdd\xa7\x55\xd3\x33\xff\x06\x3a\x91\x01\x71\x70\x25\x24\x6d\x2e\x4a\xda\x66\x98\xe7\xff\x96\xfa\xc9\xc5\xf6\xd7\xfb\x83\x7e\x47\x5e\xf0\xf7\xb9\x4f\xd4\x9e\x49\xf9\x18\xf7\xb8\x2f\x14\x43\x27\x3d\x00\x0e\xae\x84\x11\xcd\xc9\xe1\x28\x14\x5b\x5c\x6c\x4e\x5c\x3c\xf3\x75\xa2\x8a\x1c\x43\xb5\x36\xce\x4b\xa9\x99\x4e\xc1\xb6\x9b\x2c\x9b\x4f\xa1\xa7\xae\x40\x1c\x5c\x09\xdb\x0a\xc4\x54\x19\xf1\x85\x1f\x09\xac\xee\xef\x26\x79\xd6\x75\x1e\x6c\x99\xe2\xdf\xf7\x7f\x65\xf2\x3a\x33\x1a\x33\x99\xf0\x60\x08\xb1\x14\x02\x71\x50\x66\xe2\xe9\xbc\x32\x68\xac\x3d\x49\x0a\x7e\xd3\x1f\xf8\x89\x38\xbf\x89\x36\x61\x0a\xdd\xba\x31\xf8\xa9\xf7\x85\x94\xe8\x0f\x27\x1d\x63\x53\xac\xf6\xdf\xd9\x3c\x6e\xd2\x90\x57\x06\x71\x70\x29\x70\xcb\xf6\x6a\xf4\xcf\x85\xd5\xc5\xcf\xc6\x7f\x69\x63\xdc\x1d\xc8\x98\x3f\x28\xec\x7b\xe9\xf6\x7e\xc8\xc2\xb3\xc5\xb9\x7a\x0f\x1a\x6c\x40\x1c\x5c\x0a\x5c\xb8\xa6\x2f\x5b\x13\x4a\x2e\x59\xb9\x05\x7e\x64\x90\x38\x28\xa5\x37\xac\xf4\x1d\x40\x77\x2f\x7b\xd9\xcb\x7c\xcc\xa6\x61\x35\x87\x88\x0b\xe2\xe0\x52\x78\x34\x30\x18\xc2\x9d\x94\xaa\x25\xc2\xb6\x31\xb3\xd7\x99\xae\xfa\x7b\x32\xff\x27\x73\x1f\xb1\xa0\xcc\x2d\xb9\xf9\x07\x0c\x91\x7b\xd0\xf6\x11\x80\x83\x4b\xa1\x69\x43\xb0\xfb\xb3\x57\x68\xad\x53\xc3\x8f\x85\x91\x72\xa1\xfb\xf5\xc1\x9d\xe8\xd3\xe1\x8c\x51\x86\xa2\xcc\x9e\xcc\xba\xdc\xd1\x08\x29\x80\x38\x28\x33\xf1\x74\x5e\x19\x34\xff\x9d\x58\x2d\xd9\x4e\xcb\xd6\x4a\x32\xed\xfb\xb6\xed\xf5\xfa\x82\x95\x57\x4a\x8e\x64\x23\x1f\xd4\x88\x8d\x59\x8e\x1e\xfb\x5d\xd2\xfd\x43\xa1\x04\x55\x4b\x06\x70\x70\x29\x4c\x54\x76\xf5\x69\xe9\xeb\x6d\xbd\x88\x90\xff\x4a\x39\xa8\x8f\x22\xe8\x7e\xd4\xee\xb1\x28\x52\xb6\x6f\x1f\xd0\x5f\xfc\xab\xce\x0a\x11\x17\xc4\xc1\xa5\xe0\xe2\xe6\x4e\xa6\x33\x8b\xa2\xce\x5e\xe0\x44\xd6\xd1\x86\xdb\xe7\x2b\x5c\x25\xac\xfb\x92\x21\x02\x85\x73\x10\x03\x35\xf0\x10\x2a\xc7\x06\xe2\xe0\x52\x98\xab\xf4\x79\x62\xfc\xbd\xed\xa2\x17\xaa\xfb\x5b\x5b\x41\x5e\xdd\x92\xe9\x3f\x72\x38\x14\x1f\xc3\x9f\x3f\xdb\x3e\x2c\xa5\xbb\x7e\x80\x88\x0b\xe2\xe0\x52\xb8\x3b\x5d\x2d\x7a\xd9\xef\x3c\xfe\x84\xed\xdb\x85\x8c\x9b\x0c\x13\x1a\x28\x7e\xac\x02\x96\xbd\x77\xe9\x73\xc7\xf9\x94\x42\xdf\x0a\x43\x05\x9d\x00\x1c\x34\x2a\x9c\xce\x2b\x83\xd6\x24\x27\x49\xc1\x44\xf6\x01\x8b\xb4\xcb\xf9\xc2\xed\x8a\x87\xd7\x7e\xbd\x57\xb9\x67\x9d\x79\x2d\xf7\xa9\xde\x55\xac\x7a\x01\xdf\x9b\x57\xae\xe5\x42\xd7\xdb\x41\x1c\x52\xea\xfa\xac\x3d\x2a\x01\x9f\xde\xca\x9d\x03\xb3\x7b\xaf\x8c\x46\x4c\x6c\xaf\x99\x4b\x16\x07\x19\xbb\x62\xb8\x48\xf5\x0d\x78\xa8\x41\xdb\x26\x20\x0e\x2e\x05\x9a\x8c\x83\xa0\x4c\x27\xd4\x10\x2c\x96\xb8\xbc\x45\xc5\x2f\x52\x03\xbd\xf7\x7a\xde\x9a\x74\xf0\xfe\x88\x39\xbe\x13\x24\xef\x21\xf5\x7f\x6a\xbe\xff\xdf\x39\xb8\x14\x26\x7b\x5f\xda\x2e\x25\x8c\x8a\xfb\x13\x8d\x6e\x34\xc7\x6c\xef\x67\x9e\xd7\xf1\x0e\xae\x1a\xfc\x93\xd5\x34\x2a\x1b\x50\x56\x0c\xed\x19\x80\x38\xb8\x14\xc6\x72\x42\x7b\x26\xb1\x2b\x69\x8b\x02\x74\xb5\x69\x5f\x34\x7c\xae\x30\xcf\xba\x98\x2c\x4e\x6c\xc4\x12\x43\xdb\xde\x78\xaf\x36\x0b\x2a\x68\x01\xe0\xa0\x51\xe1\x74\x5e\x19\xe4\xb3\x4e\xf6\xca\xeb\xfc\x4b\x2f\x49\xe4\x62\xf6\xbf\xcb\x48\x7f\xa6\xd5\xdc\x57\xdd\x64\xfd\x75\x33\x54\xee\x30\x14\xcd\xe8\x1a\xbe\xa9\x1e\x5f\x14\xc2\x77\x82\x38\x64\xaf\x3c\x12\x67\x3e\xc2\x5b\xb6\x79\x21\xcd\x70\x9e\xb6\x97\x88\x2e\x74\x86\x5a\x98\xce\xe1\x6a\xb6\x4e\x7d\x91\x48\x83\xb2\x85\x19\x17\x22\x32\x88\x43\xf6\xca\xf7\x5a\xbf\x85\x4b\x6a\x27\xda\xda\x2d\xf0\x30\x08\x9d\xe7\x7a\x6f\x66\x11\xc2\x64\x59\x4d\x43\x9d\x25\xfe\xa4\xda\x32\x4e\xd6\x17\x11\x19\xc4\xfd\xaf\x57\xfe\x8f\xeb\xf3\xc0\xe7\x9e\x11\x5e\x39\xfc\xae\x54\xb6\xd2\xe0\xcd\xd4\x47\xd6\x28\x56\x5c\x46\x71\xd7\x8c\xde\x76\xa9\x68\x1f\xf0\xdf\xdd\x62\x37\x3a\x8c\x89\x7f\x49\xf9\xaf\x57\x0e\xfd\x3b\x70\xa9\xe1\x70\x83\x33\xa7\x46\x05\xed\xa9\xbf\x3c\x87\x59\x8f\x7f\x84\x82\xf6\x2a\xd3\xa6\x28\xf7\x95\x07\xaf\x5f\x3b\xff\x83\xb2\x3d\x98\x4e\x28\x0f\x23\x12\xed\x88\x16\xb8\x11\xf6\xe9\xf6\x9f\x5b\x03\x2a\x73\x7a\xc7\x92\xc3\x7f\xd5\x77\x14\x1d\xd2\x66\x6f\xfd\xb7\x79\x65\x50\xd3\xfe\xcd\x57\x96\x85\xfb\x29\xdf\xb9\x37\x54\xf4\x68\xf1\xa6\x22\xa1\xf8\x57\x22\xf3\xb1\x0a\x9f\xe6\x6b\xb1\xac\x5d\x7d\x22\x97\x67\x4f\x27\xd1\x65\x29\xbd\x77\x26\x47\x9e\xc8\x5e\xf9\xd7\x46\x9b\xa1\x9f\xe9\xfc\x03\xbd\x85\x5d\x01\xea\x4c\x0f\xc6\x29\x11\x92\x11\x8a\x9b\xf2\x17\x70\x92\x27\xed\x5c\xbd\x46\xcf\xe4\x1d\x65\x14\x11\xa4\x9f\xa5\x29\xdf\xe9\xfb\x24\xdc\x17\x3a\xff\x3e\x75\xd4\x7a\xe8\x8f\x94\xf2\xfa\x13\xe9\x44\x97\x4f\xb2\x8d\x73\xf4\x9f\x03\x71\x68\xf1\xce\xa4\xb5\xc8\x5e\xd9\x4c\xed\xc1\x07\x94\xca\xdb\xb5\xdf\xd6\xa3\x30\x7b\x68\x5f\x93\x4d\x14\xe1\xaf\x96\x79\xbe\xbb\xe8\xe2\x50\xc6\x5f\xab\x7d\x49\xf9\x4c\x5a\xeb\x88\xf4\xb3\x39\xc7\xbe\x8c\x59\xde\x78\xea\x9b\x99\xf3\x65\x5f\xe6\x74\xac\xe8\x43\xab\x31\xab\xb8\xe5\x44\x47\x33\x7b\x19\x66\xf8\xdb\x9f\x9d\x99\x57\x06\x89\xe8\xc4\x32\x3e\x65\xd4\xa9\xb2\x17\xd0\x2f\x07\x9a\xf4\xdb\xd3\xa5\x3e\xee\xf9\x23\x13\x22\xe4\x9c\xec\x6a\xfc\x7b\xf5\xd1\x6d\xee\x25\xb2\x32\xa8\x8c\x0f\x80\x83\x4f\x80\xde\x2b\xf8\x17\xa8\x78\xfe\x94\x69\x1c\x46\x47\xd7\x6d\x76\xd0\x33\x46\x74\x6a\x53\xd4\x5f\x46\xc1\x52\x2d\xe8\xb7\xb2\x6f\xec\x82\x6e\xc8\x02\x38\xf8\x04\x18\x43\xcf\x1d\x6a\x62\xf4\x23\xf6\x09\x95\x0d\x33\x81\x3a\x79\xff\xcc\xf4\x8b\xe5\xd2\xf7\x7d\x12\xbd\x05\x3a\x37\xd5\x12\x1a\x59\x11\x71\x41\x1c\x7c\x02\xcc\x6d\x63\xf4\xd2\x08\x4d\xf8\x74\x37\xe4\x76\xb9\x59\xa7\xaa\x4f\xc6\x50\x6d\x8a\xc1\xe3\xad\x0d\xcf\x73\x63\xfe\x5c\xc9\x7a\x47\xd0\x1d\x6c\x00\x07\xff\x7b\x99\x07\x6d\xf3\xb2\xc4\x3f\x38\x5f\xf5\xac\xd1\x48\x54\xe6\x4d\xbe\x15\x3b\xf3\x41\x7d\x33\xe8\x23\xd5\xdd\x7c\x6a\xd4\xbe\x28\x43\xc8\x2b\x03\x38\x28\x5f\x59\xf6\x34\x4b\x21\xd0\x77\x7d\x92\x12\x36\xde\x32\xa5\xb8\xd9\xfd\xc0\xf9\xd5\x66\x88\xa3\x7d\x49\xe9\x09\x9f\xcb\xb1\x82\xe4\x3c\xcb\x80\x9d\x0b\x9e\x6f\x90\x42\x00\xb4\xbd\x0f\xe2\xe0\x4a\x50\x28\x56\x22\xd0\xe3\xa5\x9b\xfb\x3b\xce\x17\x82\x7b\xeb\xae\x85\x0c\xfe\x32\x4f\x7d\xaf\x9b\xd8\xd8\x16\xbd\xd5\xd6\x88\xeb\x6f\x44\x5c\x10\x07\xef\xd9\x73\x37\x98\xe6\xd9\x6b\x19\x72\x4d\xdc\xc4\x4b\xb4\x8f\x71\x8a\xc9\x2f\x5e\x33\x8a\xd5\xa9\xaa\x90\x33\x27\x25\xc7\xec\xe9\x83\xea\x60\x83\x38\xb8\x12\x0c\xe4\x94\x78\xfd\x28\xe9\xf7\xd3\x1e\x0e\xf6\xe4\x27\x62\x4a\xf9\x8d\xd4\x4c\xe6\x61\x8b\x6c\x50\xe6\x30\x0f\x50\x95\x7c\x47\x87\x2e\xf4\x02\x38\xf8\xdf\x4b\x5e\xcf\xcd\xf8\x53\xaf\x97\xfd\xef\x15\x5c\xc7\x77\x6d\x1b\x75\xcc\x22\x3c\xd3\x84\x9d\xf1\x0c\x35\x45\x5e\xfd\xe3\xfb\xec\x09\x88\xa5\x10\x88\x83\x32\x13\x4f\xe7\x95\x41\x63\xed\x49\x52\xb8\xff\x07\x3d\x8d\xc5\xa3\xf2\x15\x9b\x3e\xaa\x06\x2d\x3a\xaf\xf5\xd3\x9b\x54\xae\x71\x35\xab\x15\x16\x8b\xd2\x6c\x58\xc2\x45\x46\x88\x2e\x00\x71\x48\x2f\x79\xaf\x4b\xae\x84\x6d\x2c\x14\xf5\xcd\xbe\xfa\xa9\xa5\x82\x9b\xdb\xa5\x6d\xc7\xae\xf6\x92\xdd\xa3\xe5\xb9\xa2\x49\x25\x8a\x7a\x3b\x22\x2e\x88\x83\x77\x6d\x91\xef\x85\x84\x0b\xe4\x6e\xc9\x3c\x28\xe9\xf2\xaa\x44\x6c\xaa\x49\xa1\xfc\x89\xf7\x27\x02\x66\x4a\x50\x07\x39\x3b\x52\xaf\x42\xdb\x1b\x20\x0e\x69\x50\x48\x24\x29\x27\x1b\x9f\x7c\x82\x19\xf1\xd4\x94\xe5\x58\xc2\xa2\x81\x28\x1d\x3d\xef\xd7\xe4\xcc\xaa\x04\x63\x84\x71\x21\xaa\x08\x34\x28\x00\x38\xf8\xdf\xcb\x49\x63\x12\xec\xe7\x2d\x55\x46\x39\x50\x73\xf8\xae\xac\xed\x7e\xa5\x43\x01\xea\x9e\xa0\x46\xf0\xa3\x8c\x97\x9d\x41\xef\xbf\x12\x20\xa4\x00\xe2\xa0\xcc\x44\x91\x53\x49\x01\x34\xff\x9d\x24\x85\x2f\x42\xef\x72\x1d\x6c\xd3\xdd\x43\xf6\xac\xc7\xde\xe8\xb1\x72\xa4\xb8\x97\x19\x54\xb1\xd9\x7d\xb4\x23\x3e\xff\xc8\x8f\x2a\x72\x08\xd1\x05\x20\x0e\x2e\x85\x6c\x6b\x2a\xbb\x6d\x9c\xc0\x5b\x93\xea\xcf\x09\x5f\x76\xdd\x30\xdb\xd0\xaa\x36\x0c\xb3\x36\xe2\xb3\xf1\x50\xa0\xea\xd0\x2c\xbd\x03\xe5\xfe\x00\x38\x78\xd7\x8e\xc9\x63\x59\xa6\xdd\xe4\xa3\xec\x2e\x0b\x9d\xe4\xa4\x76\x17\x36\x5c\x18\x51\x47\x7b\x79\x3d\x58\x3d\x65\x47\xac\x99\x4b\x9e\x06\x11\x17\xc4\xc1\xa5\x90\xf1\x91\xed\xf3\x20\x4e\x09\xe5\x3e\x55\x0f\xf9\xf7\xbd\x3d\x09\x4f\x95\xa0\x5a\xe2\xcc\xdd\x81\xeb\xa5\x15\xa9\x36\x84\x5f\xa0\x1d\x3f\x10\x07\xff\x7b\x79\x5b\x9e\x72\xfc\xe4\x24\x67\x13\xd2\x79\xa3\xd4\xb4\x38\xd2\xc4\x15\xf9\x69\xa1\x65\xda\x8f\xc9\xdc\x38\x9b\xf6\x67\x3e\xa6\x09\x42\x0a\x20\x0e\x1a\x15\x4e\xe7\x95\x41\x6b\x92\x13\xaf\xe3\x47\xc4\xe6\xee\x2c\xef\x10\xa2\x9a\x15\x39\x7e\x28\x1e\x10\x18\x89\x74\x7d\x28\xd3\x36\x74\x6f\x9c\xcf\x63\xb6\x84\xc7\x08\x2a\xab\x09\xe2\x90\x96\x0a\x63\x77\xfa\x2c\x06\x6f\xa5\x5e\x90\xc4\xba\x8a\x52\xde\x33\x47\x43\xe4\xda\x61\x25\xe6\x17\xfd\x5b\xac\x01\x53\x55\x68\x06\x03\x5a\x2a\x00\x38\x78\xd7\x62\x88\xbb\xb9\x13\xa8\xae\xe3\x29\xfb\xf7\xd5\x50\x25\xca\x64\x53\x79\x47\x39\xa6\xa9\xfd\x6d\x51\x6e\x31\xea\x7b\x1d\x87\x03\xdd\xc1\x06\x71\x70\x29\xa4\xe3\xea\xd6\xf4\x98\x37\xc4\x57\x6d\x09\x8b\x8f\x51\xb2\xdb\xa2\x7e\xeb\x4c\x4f\x62\xbf\xee\xa0\xcf\x89\x63\x46\xfe\xe8\x26\xb4\x5d\x0f\xe2\xe0\x7f\xaf\x73\x1b\xa3\x94\xb9\xb4\x55\xbc\x15\x89\x96\x49\x12\x4d\x9c\xbb\x11\x51\x50\xfa\x76\x8a\x83\x21\x63\xc8\x8d\x71\xdd\xcf\x77\xcb\xa0\x8b\x47\x00\x0e\x1a\x15\x1c\x4f\xe5\x95\x41\x3e\xeb\x64\xaf\x6c\x18\x52\xcc\x16\xa0\x3e\xa9\xb1\xf8\xb1\x76\x4e\x2c\xbe\x3d\xa5\x20\x4f\xd4\x66\x7b\x3d\x48\x9c\xd8\x7d\x25\x6d\x1b\xb5\xcf\x09\xe1\x3b\x41\x1c\xb2\x57\x2e\xcc\x21\x96\xac\xa1\x22\xed\x8e\x2d\xdf\xc4\x37\xad\x30\x2f\xa6\xf7\x8e\x8f\x9a\x2d\x8f\xb7\x57\x4d\xb0\x1b\xe1\xeb\x91\x90\x46\x44\x06\x71\xc8\x5e\x79\x38\xc4\x17\x0f\x6b\xae\xf1\x8b\xee\x9f\xf4\xd2\xac\x35\x05\x16\xff\x0d\x9b\x89\xdb\x43\x8f\x23\x1b\x37\x25\x3c\x28\xc2\xf9\xc9\x10\x91\x41\xdc\xff\x7a\xe5\xff\x78\xd2\x1b\xf8\x7e\x33\xc2\x2b\xaf\x5b\x68\x92\xe6\x77\x7e\x34\x12\x69\x93\x1a\xbe\xf3\x67\xbb\xf2\x01\xc7\xb5\xdc\x97\xd9\xbb\x95\x58\xd9\xf9\x3b\x33\x2d\xac\xc9\x21\xff\xff\x79\xd4\x73\xca\x33\x5d\xe8\x9f\x1c\x2f\xaf\x3e\xfc\xa5\xf0\xe6\xa8\x99\xd6\xb4\x14\xa3\x11\x2b\xfb\x77\x5d\x95\xd9\x98\x6a\xf5\x8b\xb1\x6f\xe2\xe2\xff\xfb\x1f\xff\x7f\xdd\x2b\xf3\x9e\xee\xcf\xf5\x3b\x87\x82\xf2\xbf\x9d\x8c\xe2\x03\xf5\xdc\x5c\xc0\xed\x87\x36\xa9\x26\x77\x2c\x37\x5c\xbc\x2a\xbe\xef\xbe\xc9\x75\x6f\x72\x41\x8f\x13\x7d\xac\xf7\x6c\x62\x74\x0d\xd7\x52\xf7\xdf\x9e\x3b\x50\x5d\x1a\x62\xd8\x08\xff\xd3\x80\xfe\xaa\xf1\xa2\xf4\xf8\xd4\xf7\x88\x7a\x8d\x8c\xfd\x36\xca\x4f\x57\x37\x6c\x03\xeb\x2e\xca\xfc\x7b\xaf\x67\xe7\xfd\xf2\x14\x5a\xb4\x29\xaa\x77\x77\x97\xb5\x98\x2e\x8b\x87\x56\xc9\x9c\x68\x2d\x7e\x98\xed\xac\x3f\xd6\x8b\xbe\x9d\xc1\xff\xb6\x5d\x06\x50\xd3\xfe\xcd\xf4\x46\xda\x65\x30\x9b\xf9\x8e\xfe\xb9\x5b\xa7\x80\xbc\x68\xf8\x53\xa9\xd8\x1d\xda\xb1\x12\x7f\x23\xf6\x65\xdb\xdd\x1a\xe9\x50\xac\x9f\xc2\x57\x74\xce\xe4\xb0\x18\x79\x97\x41\x9a\x15\x5f\xf0\x9e\x5d\xb8\xdb\x8d\xcf\x32\xc1\xef\x77\x1a\x25\xf7\x02\x6a\x15\xcd\x73\x75\xfb\x7d\x56\x26\xc3\x33\x85\x2a\x9c\xcf\xe4\x68\x1c\x79\x97\xa1\x21\xb2\x4d\xd9\xca\x5c\xa2\xef\x8f\xf8\xe7\xcf\x04\x62\x47\xf8\x51\xae\xac\xad\xf9\xf4\x9b\x4d\xc9\x01\x94\xf6\xaf\x5a\xe4\xff\x9c\x49\x6b\x91\x77\x19\xf0\x2c\xe2\x14\xe9\x69\xc2\x47\x6f\x6c\x36\x3e\xf1\x3d\xd2\x13\x88\xcb\xc0\xa3\x27\xab\xdb\x4f\xa8\x4f\xec\x2b\x7e\xc2\xec\x92\x7a\x26\xad\x45\xde\x65\x68\x19\x68\x2c\x7b\xe9\x10\x56\xb9\x89\x9e\x56\xd6\xe4\x23\xfb\x7c\x83\x92\x59\xf3\x52\xb9\x99\xd3\x12\x89\xd3\x4f\x82\x40\x66\xa1\x33\xdb\x65\x00\x89\xe8\xa4\xa5\x83\x0d\x8f\xbc\x67\xae\xd6\x13\x14\xcd\x2c\x1b\xee\xaa\xd5\x32\xd9\xea\xd1\xf7\xe7\xe5\x04\xc7\xb5\xdc\xe9\x24\x16\xb1\x7c\xb0\x64\x10\x53\x26\x88\x83\x2f\x1d\x9c\xa8\x6e\x47\x61\x5e\x7f\xa3\xd4\xd6\x4c\x49\xdc\x86\x96\xb0\x95\x83\x56\x49\x6d\x26\x8d\xde\xd4\x6b\x7d\x69\x75\x4f\xbe\x14\x4a\x0b\x03\x71\xf0\xd2\x21\x3e\x1b\x61\xf7\xc4\x6e\x34\xd2\x19\xaa\xfc\x99\x65\x0c\x24\x8b\x59\x89\x92\xd4\x6a\x98\x8b\x6f\xee\x7d\x73\x9c\x9f\x98\xfa\x28\x15\x11\x17\xc4\xc1\xdf\x91\xa4\x7c\x6e\x1b\x69\xf4\x63\xea\x63\xb4\x51\x48\xea\x6d\xa9\xb9\x86\x27\x77\x5f\xc6\xe0\xfc\x41\x5d\xef\x67\x5b\x37\x72\x66\x0b\xf9\x0e\x65\x1e\x02\x38\x5f\xc9\xff\xac\x97\x81\x65\x58\xb2\x89\x6d\x51\xff\x58\xcf\x38\x4b\x39\xd3\xdf\x46\xdb\x3c\x3d\xe2\xdd\x07\x73\xd1\x91\x12\xb6\xce\x5f\x66\x5f\x88\x2e\x21\x76\x19\x40\x1c\xe2\x44\x5e\xfc\x54\xbb\x0c\xa0\xef\xfa\x24\x25\x94\xd3\x5e\x42\xbb\xac\x49\xf4\xd0\x21\xcf\x30\xf3\x2d\x53\xc5\x80\x81\x9f\x15\x59\xda\x87\x46\xd3\x73\xa3\xba\x2e\x3e\xd6\x9c\xd0\xbb\x3a\x20\x0e\xae\x84\x9d\xfa\xa6\xcc\x47\x73\xf3\x71\x92\xe7\x9b\x98\x7d\x87\x9c\x87\x67\x34\x71\x89\x35\xc7\x52\x34\xa6\x35\xa8\x5b\xbb\x27\xc9\xc9\x10\x71\x41\x1c\x5c\x09\x4c\xb1\x9e\xdc\x43\x35\xf2\xd7\xe6\x70\xbf\xff\x0c\xdb\xeb\x25\x32\xb0\x7d\x5e\x98\xb6\xe0\x82\x27\xcc\xba\x69\xbe\x96\x6f\xc8\x81\x88\x0b\xe2\xe0\x4a\x18\xa6\x5a\x71\x67\x0b\xa0\xef\x32\x8f\xa2\x8a\x7f\x11\x5b\x16\xc9\xa8\xa8\xaf\x2d\x20\x22\xa3\x8c\x61\x93\xca\x74\xbc\xc5\xdb\x07\x65\xbc\x03\x38\xb8\x12\xe4\xb1\xde\x7c\x5f\xcc\x53\x12\xa5\x91\x2d\x95\x67\x2e\x6a\xfe\x62\xe0\x3c\x5b\x9f\x27\xf1\xe9\x7c\x42\xfc\xf3\x30\x69\x52\x77\x67\xc4\x22\x12\xc4\x41\x07\x2e\xa7\xdb\x65\x00\x8d\xb5\x27\x66\x7a\x57\x1a\x7a\xaa\xcd\xa5\xfa\xe6\x8b\x7f\x61\x1e\x99\xfb\xaa\x56\xf7\xbc\x26\xa1\x10\xab\xed\x2f\x2e\x89\x9c\x16\x0f\xfd\x38\xf4\x2a\x16\x88\x83\x4b\xe1\x43\x87\x46\x89\x32\x0a\xef\xee\xeb\xf4\x4d\xf4\xf6\x4b\x5c\x77\xf0\x04\x69\xb6\x36\x7c\x28\x5e\xdd\x62\x5c\x3f\x9c\x2c\xd3\x80\x8a\xd4\x83\x38\xb8\x14\xaa\xc9\x3d\xa5\x49\xab\x18\x5c\x37\xa5\x6c\xb2\x16\x7b\x67\xfe\x3a\x92\xbe\x15\x51\x1a\xd3\x0b\xf6\xbe\x7e\x7d\xd1\xad\xd4\x0c\x7a\x07\x08\xc4\xc1\xa5\x20\xe6\x22\xb4\xc3\xcb\xab\x9c\xef\x7c\x6c\x23\x81\x25\xd9\x4e\xcc\x8d\xf9\xf2\x70\x57\x34\x4a\x6e\x62\xdf\x79\xf3\xfc\x72\x2a\xf4\x44\x36\x88\x83\x4b\xc1\x36\xb7\xf6\x02\x96\x1c\x5e\xea\x1d\xae\x1e\xa5\xa9\x0e\xef\xc9\xb0\x78\xa2\x9e\xe2\x70\x4f\x5b\x27\x52\xeb\xf1\xa0\x3d\xab\x79\x84\x14\x40\x1c\x74\x0c\x7b\xba\x5d\x06\xd0\xfc\x77\x92\x14\x8c\x66\xc6\x58\x1f\xe0\x89\x38\x30\x8d\xe9\xb4\xba\xaa\x08\x5f\xb6\x7c\x6f\xc6\x34\xd8\x18\xc3\x32\x98\x1e\x95\xac\x36\xeb\xdb\x86\xe8\x02\x10\x07\x97\xc2\x45\x8b\xb7\xa6\x9f\x32\x30\x6e\x09\x39\x60\xfa\xe9\xb1\x72\x26\x34\xf8\x05\xdc\x5b\x7d\xba\x52\x24\x3c\xf9\xe3\xf3\xb1\x39\x36\x74\xd2\x0f\xe2\xe0\x52\x38\x77\x20\x7d\xac\x1b\x35\x53\xc9\x5f\xd9\x6b\x27\xb0\x7f\x6c\xcf\x9a\x44\xfb\x82\xc6\xb7\xe4\x9a\x49\xeb\x6d\x25\x1d\x8f\xc3\x3c\x68\xef\x11\xc0\xc1\xa5\xf0\x41\xe6\xaa\x94\xae\x66\x0c\xbd\x82\x45\xc6\x1c\x7e\xf4\x43\x0c\x1e\x0c\x43\xb7\x01\x2a\xdd\x3a\x13\x32\x54\xf5\x8e\x1f\x3d\xa8\x90\x74\x01\x1c\x5c\x0a\x66\xbc\x1c\xd3\xd6\x97\xf1\x57\xbb\xd6\x6b\xfc\x17\x7e\x07\x49\xa3\xea\x3d\x75\x72\x68\x63\xbf\xff\xe2\xef\xe8\xbe\x8a\x10\xb9\x2b\x42\x0a\x20\x0e\x1a\x15\x4e\xb7\xcb\x00\x5a\x93\x9c\x24\x05\x97\x2a\x83\x61\x9a\xe5\x4d\x06\xc6\xc8\x63\xa1\x4f\xe2\x38\xb2\x72\xfd\xa2\x0a\x84\xe1\x94\x0c\x9a\x78\xc7\x0a\x98\xe7\x23\x29\xa0\xcb\x0e\x00\x0e\x2e\x05\xb6\x84\x2d\x72\x9c\xc6\x85\x14\x3d\x43\xd6\xfb\x7a\x72\x17\xe8\xa6\x6d\x9f\x3c\x35\x2d\x3f\xce\x1b\xa7\x61\x51\x15\x49\xf3\x84\x1e\x32\x03\x71\x48\x05\x49\x75\xb1\xda\x25\x8a\xbf\xf3\x53\x14\x1f\xb1\x70\xf9\x96\xbe\x17\x35\xbc\x2c\x3a\xa2\xba\x90\x5d\x77\x2f\x8c\x24\x92\xff\x3d\xf4\xaa\x39\x88\x83\x4b\xa1\xf9\xc2\x6d\xf4\xaf\x1a\x04\xef\x30\x56\x29\x2f\xf8\xb8\x60\x1b\x7f\xb6\xfc\xf5\x2e\x35\x62\x0c\x5b\xce\x6f\x10\x9f\xed\x8d\x33\xf4\xd8\x08\x88\x83\x4b\x01\xfd\x30\x85\xf6\x6d\x61\x81\xf5\xc1\xa5\x9d\xf4\x75\x2e\xd3\xd5\xf2\xeb\x0a\x3b\xe6\x72\xb1\xee\x96\xf5\x65\xdb\x24\x37\xc7\x23\x11\x52\x00\x71\xd0\xa8\x70\xba\x5d\x06\x90\xcf\x3a\x79\x97\x21\xc3\xf1\x59\xa4\xc4\x79\x34\x5a\xd9\x29\x31\xb6\xb9\x95\xeb\x8a\xfa\x6f\xbc\x42\xa4\x3b\x17\xbe\xe7\xd2\xde\xcc\xa1\xf7\xb5\xbf\x8c\x70\xec\x20\x0e\x79\x97\x61\x1f\x4f\x7b\x69\x93\x78\x8e\x7e\xb6\x4d\x19\xc3\x35\x35\x98\x94\x45\xf1\x6f\x5c\x2c\xa1\xcd\x2a\xe5\x4a\xc0\x2f\xd9\x6b\x65\x15\x88\xc8\x20\xce\x57\x1a\x85\xe0\x3f\x23\x4f\x3f\xe8\x95\x5f\xb2\xb4\x26\xcb\x11\xa9\xcc\x24\x10\x1b\x29\x48\xbd\x78\x75\xae\x59\x3c\xa2\x9d\xb2\x40\xd6\x91\x43\xa6\xef\x18\x11\x19\xc4\xf9\x4a\x63\xc0\x7a\xe3\xd4\x15\xc4\x45\xf8\x3f\xae\x99\x0e\x72\x96\xa6\xdc\x0a\xba\xd6\xfe\xdc\x0c\xe3\x6f\x91\xa4\x3e\xfd\x71\x4e\xd6\xbd\x5f\x38\xe7\xc4\xea\x88\x63\xff\xf5\xca\x62\xba\xbb\x49\xe2\x5b\xc3\xcf\xf3\x9d\x44\x52\x72\x64\x0d\x6f\x0e\x5a\xcf\xcd\x36\x62\xb0\x60\xb9\x8b\x69\xfd\xa9\xb8\x39\x25\xfd\x0f\x2a\x27\x22\xbf\xe3\x10\xee\x17\xec\x35\x21\xf3\x64\xe5\xd7\x4c\x2f\x09\x43\x7b\x5b\x14\x06\xd3\xa3\xc7\x37\xdf\x49\xea\x50\xf2\xbd\xfa\x6f\xf3\xca\xa0\xa6\xfd\x9b\xe9\x8d\xe4\x95\x31\x2f\x74\xc9\x5e\x9a\x0b\x7f\xec\x76\xb9\x84\x62\x14\x43\xe3\x9c\xdb\xa8\xac\x4d\x7f\x62\x25\x83\x91\x99\x80\xf1\xeb\x7e\x29\xa9\x33\x39\x2c\xe6\x45\xb2\x71\x5d\xd9\x56\x7c\x1b\x3d\x18\xb3\x4b\xe7\xb3\x46\xf0\x7c\xc7\xb0\x7a\x12\x72\xef\x16\x62\x33\x06\x25\xbc\xbf\x5d\xee\x76\xf1\x7d\xcb\x99\x1c\x8d\x23\x7b\x65\xdb\x51\x74\x65\x9b\xaa\x77\x47\x38\xcd\xf6\x9f\x55\xbe\xf4\x67\xe4\x5a\x17\x3d\xff\x48\x22\x44\x2f\x2b\x5d\x44\x4e\xfd\xf0\xfd\x9b\x33\x69\xad\x0e\xd2\xcf\xe6\xe5\xf8\xda\x2f\x9e\xcb\x73\xb2\x1b\x46\x7d\x71\x5f\x5a\x55\xf2\x67\x52\x66\x8e\x2d\xaa\xb1\xc9\xce\x67\xf5\xdc\x01\x1f\x1a\xea\x33\x69\x2d\xb2\x57\x6e\xf8\x3e\x1f\x33\x4d\xf6\x67\xbc\x6b\x2b\xd1\x59\xd0\xd6\x5e\xdc\xb7\x69\x4a\x7b\xbb\xda\x73\x38\xa9\xa1\xcf\x86\x90\x92\xe8\xd2\x99\x79\x65\x90\x88\x4e\x9a\x00\x47\x24\x7b\x87\x1f\x64\x8c\xcc\xa7\x34\x9b\xad\xde\xb8\xae\xb2\x2a\x8a\x1a\xbb\xc5\x19\x48\xe5\xb3\x15\x4a\xb0\xba\xff\x23\x41\x0c\xba\xab\x0b\xe0\xe0\x13\x60\xc2\xd7\x9e\x8e\x3e\x8d\x87\x44\xdc\x8c\x81\x4d\x38\x9a\x1b\x4b\x93\xfd\x62\x5e\x45\x57\x0b\xdc\x66\xcd\xf9\x48\x59\xb0\xad\x37\xa0\x7c\x59\x00\x07\x9f\x00\xed\xd5\xb1\xed\x3a\x4c\x4d\x4c\x2d\x03\xb6\x8f\xc3\x3e\x88\xe4\x5f\xd6\x4f\xa1\xf8\x6e\x7d\x95\x59\xea\x86\x4b\x8e\xd1\x79\x13\xe8\x84\x08\xc4\xc1\x27\x40\xa6\xaf\xb8\x38\xa9\x72\xfe\x8f\x65\x32\x8f\xa8\x51\x39\x2e\xdb\xdc\x6e\x09\xfd\x79\xc1\xff\xd0\xbe\x46\xc7\xa5\xb1\xfa\xd1\xfb\x40\xc8\x79\x01\x38\x5f\xc9\xff\xcc\x01\x1a\xa8\x8e\xca\x3e\xc6\xed\x3a\xf0\x8c\xd2\x49\xfe\xe3\xd4\xfe\x65\x68\xde\x48\x51\xb1\x72\x78\xe3\x15\xea\x07\xd3\xab\x9e\x8f\x0f\x11\x5e\x19\xc4\x21\x4e\xe4\x7d\x4e\xe5\x95\x41\xdf\xf5\x89\x27\xf2\x7c\x2f\x73\xac\xbd\x42\x54\xff\xbe\x73\x8c\xb5\xd5\xa8\x96\x89\x36\xc6\x2d\x63\xc7\x49\x09\x45\xa5\x5f\x9a\xeb\xf2\xe2\xbe\x0a\x9d\xc8\x03\x38\xb8\x12\xd0\x5e\x4c\xd7\xa1\xf6\xc5\xaa\xc4\x93\x89\x9c\x33\xcf\x8d\x88\x8d\x6b\x6c\xba\x14\xa0\xe8\xc3\x2e\xdf\xce\x14\x6b\xd5\xa0\xe9\x83\x88\x0b\xe2\xe0\x4a\xf0\xf7\xd4\x1f\x66\xe0\xd7\x54\x9c\xd2\x5d\xd7\xb1\x7e\xde\xe1\xf1\xf1\xba\xdd\x43\xe9\xfa\xe2\xef\xb6\xfd\xc7\x71\x8c\x24\xcc\xd0\xd2\x0d\xc4\xc1\x95\xc0\xc6\xa6\xa2\xcb\x11\x61\x27\x4c\x3f\xb4\x1d\x7f\xf9\x72\xd7\x97\x98\xae\x92\x97\xd6\x8f\x09\x2f\x72\x96\x87\xdd\xc7\xf9\xd4\x31\x0d\x2d\xdd\x00\x1c\x5c\x09\x95\xde\x9f\x4a\x89\x49\x1d\x85\x9f\x51\x5f\xa5\xdb\xce\x7b\xf5\x9a\x97\xc1\x8b\x5f\x1d\xed\xb9\x35\xdb\x96\xf7\x0e\x6e\x84\xc8\x2d\xe8\x65\x6a\x00\x07\x1d\xb8\xf0\x9e\xae\x2a\x1a\x60\xac\x3d\x49\x0a\xf1\x06\x12\xa5\xdd\x73\xea\x0a\xa5\x07\xbc\x26\xbf\xf2\xcd\x97\x28\xcf\xe9\x3b\xdd\xbb\xb7\x12\xee\x7a\x4e\xab\xf0\x4d\x3a\x09\x94\x7a\x02\xe2\x90\xca\x3f\x3c\x31\xba\x95\x3e\xa5\xf8\xe6\x47\x9a\x6c\x1d\x76\xa7\x20\x1b\xed\x5a\xcf\x5d\x83\xf7\xe6\xa9\xdb\x28\xb9\xdd\xe4\xcc\x52\xd0\x76\x0c\x88\x83\x4b\x81\xc5\xee\xde\x80\xd3\xf3\xd6\xe4\x5d\xa1\x0b\x69\x2e\xdc\xbf\x49\xaf\x46\x92\x04\x8c\x95\xcc\xa1\x28\x95\xeb\x24\x6d\xa7\xe7\x4f\x22\xe2\x82\x38\xb8\x14\x6a\x2c\x8f\x75\x0f\xd6\x0f\xd9\xe7\xa7\xe8\x9b\xb3\xdb\x28\xa8\xf1\xe9\x54\x62\x5a\xcb\x17\xae\x54\x17\x4b\xec\x31\xd5\x2c\x29\x23\xe2\x82\x38\xb8\x14\x66\x27\x09\x1c\x0d\xbb\x68\xa7\xb0\x1d\x2e\x24\x8a\xec\xa8\xd4\xea\xd4\x05\xa3\x39\x0f\x6e\x1d\xe1\x70\xd6\xe8\xf0\xe7\x37\x8b\x21\xa4\x00\xe2\xa0\x63\xd8\xd3\x79\x65\xd0\xfc\x77\xe2\x1b\x7c\x99\x37\xf2\x7f\x3d\xc8\x20\xd3\x26\x0f\x7c\xbd\xad\xb0\x45\xf1\xf7\x7a\x54\x7e\x2f\x23\x07\xdb\xf9\x83\x40\xcb\xcd\x52\x67\x6a\x44\x17\x80\x38\xb8\x14\xb4\x2f\xba\x9d\x67\x64\xe4\x77\x7b\xbe\x2f\x7b\xb7\x42\x47\x96\xff\xdd\xf2\x13\x79\x1d\x11\x0a\xdc\xe5\x54\xab\xeb\xbd\x4f\xda\xa0\xdb\xe0\x20\x0e\x2e\x85\x9d\xd9\x80\x4b\xab\x68\x64\x04\x34\x9d\x0a\x5f\x6e\xef\x91\x38\x50\xfc\xb9\x76\x4c\x17\xff\x28\xf4\xef\x8a\xec\xf2\xfc\x2a\x1b\x34\x8e\x83\x38\xb8\x14\x08\x39\x98\x6e\x49\xdd\xf3\x6e\xb7\x2f\x66\xac\x38\xc4\xba\xda\x60\x14\x69\x6a\x6d\x9f\xe7\xf0\xea\xc2\x88\xae\xca\x1b\xf9\x87\x3f\x11\x71\x41\x1c\x5c\x0a\xf8\x59\xda\xdc\x15\x3e\x59\xb7\x86\xab\x9e\xb2\x6c\x8d\xed\xdc\x9b\xb4\x20\x0c\x5c\x34\x91\x6c\x66\xf5\xf0\x31\xb8\xf4\xfb\x63\x03\x42\x0a\x20\x0e\x1a\x15\x74\x4e\xb7\x83\x06\x58\x93\x9c\x58\x41\xdc\xf0\x27\xbd\x9a\x48\xad\xbe\x56\x82\xcb\x1f\xdd\x64\x83\x47\x47\x3b\x1e\x9f\x48\xb6\x27\x37\xa2\xd4\x9f\xd7\xf2\xe2\x7e\xbb\x02\x55\x10\x07\x70\x70\x29\x14\x78\x93\x5e\xa0\xe9\xf7\xb6\xb0\xfc\xf6\xd1\x43\x39\x23\x49\x67\x38\xbe\x88\xe5\x2f\x29\x2a\xba\xa7\xed\xa7\x18\xba\xed\xf6\x0f\x88\xb8\x20\x0e\x2e\x05\x9e\x85\x6d\x3a\x95\xdc\x28\x83\xae\xde\xdc\xbc\x1a\xef\xd7\x09\xdc\x87\xe4\x8d\x03\x45\x3d\x74\xd8\x85\x45\x0d\xc9\xa4\xe7\xa1\x22\x05\x20\x0e\x2e\x85\xa4\x42\xa9\xb5\x7e\x3d\x35\xfc\xe0\xca\xaa\xef\xc1\x63\x93\xda\xd6\x2a\xab\xaf\xbf\x0c\x09\xeb\xc9\x54\xb7\x65\xbc\x2f\xb9\x02\x15\xd5\x07\x71\x70\x29\x34\xd9\x3d\xaa\x2a\xee\xf6\x74\x7d\xfb\xa4\x3d\xef\x86\x24\x11\xf6\x79\xbf\x72\x72\x3b\x2d\xe3\x6d\xac\xa4\xd1\x9d\x94\xcc\x69\x6f\x28\xa7\x05\xc0\x41\xa3\xc2\xe9\xbc\x32\xc8\x67\x9d\xec\x95\x3b\xe5\x65\xf4\x44\x0a\xb9\xb5\x30\xf3\x0e\x0b\xf0\xd3\xbf\x5e\xa2\x3e\xfe\xc3\xca\x69\xf6\x55\x6a\x15\x7f\x71\x97\x52\x56\xa8\x03\xe1\x3b\x41\x1c\xb2\x57\xce\x52\x61\xf7\xda\xd0\x54\x9a\x3d\x14\xda\xf4\x37\x3d\x38\x3e\xbe\x28\x10\x59\xf7\x44\xea\x72\x92\xeb\xcd\x8e\x57\xa5\x52\xc9\xb5\x88\xc8\x20\x0e\xd9\x2b\x2f\xb4\x91\xc4\x7d\xc0\x58\x56\xf6\xe3\xd0\xa7\x1d\x13\xba\xf9\x29\x8e\x84\xf4\x40\x5c\x10\xe7\xf5\x96\x0c\x8a\x8b\xf9\x67\xde\x03\x44\x64\x10\xe7\x2b\x4d\x00\xeb\x8d\x53\x57\x10\xd7\xae\x75\x94\x7f\x72\xa0\x2e\xd2\x66\x37\x21\xc0\x6c\x13\x7e\x75\xe2\xed\xca\x43\x3d\x7a\x7f\x99\xd1\x3e\xd6\xfb\x55\x4c\x46\xb9\xff\x7a\xe5\x78\x89\xdf\x59\xde\x3f\x94\x0f\x06\x69\xf3\x69\x3b\x9e\x1a\xb8\xf4\xec\xbf\x53\x53\x56\xfa\x1e\x60\x61\x93\xcf\x52\x20\x9f\x96\xf1\xef\x27\x24\x6d\x3e\x5c\x27\xb8\x67\x67\x13\xfc\x82\x12\x63\xea\x76\x4a\x75\x21\x76\xe6\xcd\x87\x59\xa8\x8a\xea\x93\x73\x56\x01\x3f\x1c\xfe\xdb\xbc\x32\xa8\x69\xff\x66\x7a\x23\x79\x65\x05\xd7\xaa\x9d\xef\xa4\x6a\x65\xad\x93\x31\xab\x5e\x6b\x72\x51\x51\x4c\xcf\xd6\x8f\xb2\x6d\x31\x2d\x16\x43\x83\x5f\x65\x0b\x77\x9f\xc9\x91\x27\xb2\x57\xbe\x57\x13\xf2\x56\xfa\x0a\x29\x76\x59\x38\xfe\x37\xeb\x59\xc5\x41\xef\xef\xc5\xbb\xdc\x71\x72\xbd\x97\x73\x12\xe8\x04\x76\xb9\xb8\xcf\xe4\x80\x17\xd9\x2b\xbb\x86\xa4\x58\x88\x5f\xfa\xfe\xb2\x81\x6d\x2e\xda\xb7\xee\xc9\x4c\x73\x5e\x3c\x0d\xbe\x89\xb1\xe8\x1d\x61\x45\x33\x42\x67\x3c\xb1\x33\x69\x2d\xb2\x57\xee\xa2\xfc\x64\x9e\x7b\x67\xd4\xf4\x26\xe7\x36\xce\x7d\x0d\xd6\x98\x24\x33\x9d\x83\xe4\x2f\x1f\x76\x76\x7c\x8b\x9d\x05\x75\x8c\xdb\xcf\xa4\xb5\xc8\x5e\xd9\x90\xe0\x50\x8f\x88\x61\xc4\xa8\xbe\x40\x95\x52\x76\x37\x6e\x2f\xd3\x31\xc3\x78\xcd\x7c\x3f\x38\xff\xab\xea\x07\xdc\x92\x24\xdb\x33\xf3\xca\x20\x11\x9d\x34\x01\x12\x39\xce\x73\x67\x8f\x4c\x8c\x8a\x8f\xc5\xa6\x62\x7d\xb8\x7a\x5c\xa3\xa1\xd6\x27\x42\xab\xbd\x27\x60\x11\x1f\xdd\xdb\xa3\xb5\x0c\x15\xc9\x05\x70\x48\x99\x7c\x78\xdf\x93\xb8\xcd\x5a\x31\xa6\xcb\xe3\x15\x27\x9f\x27\xf4\x70\x8d\x15\xcd\x68\xc5\xbb\x5c\xc6\x1c\xc7\xd1\xe8\xc7\x1c\x87\x2e\xc0\x82\x38\xa4\xcd\x62\x2a\x16\x77\x62\xe9\x43\x1a\x11\xb9\x44\x66\x53\xca\x3b\x98\xf5\xe5\xbe\x2f\xe7\x58\x27\xab\xd3\xbd\xa7\x83\x6b\x23\xdf\x4f\x41\x9b\xc5\x00\x0e\x3e\x01\xda\x98\x54\xa5\xbe\x6a\x98\x67\xf8\xa1\x7d\xa3\x81\xb0\x10\x3b\x63\xb7\x6c\x42\xf3\x12\x8e\x99\xc4\x3d\x0c\x85\x66\x65\xd7\xf7\x58\xd0\xf9\x3a\x80\xf3\x95\xfc\xcf\x7b\x4d\x37\xfc\x1d\x4d\x54\x95\x2c\xd8\x2d\xe9\x25\xb9\x2c\x37\xaa\x83\xd7\xed\xdf\x2e\x31\x65\x0c\xb1\x3c\x32\xdc\xe1\xfa\xf2\x99\xc3\x03\xe1\x95\x41\x1c\xa2\x82\xf8\xa7\x53\x79\x65\xd0\x77\x7d\x92\x12\xf0\x06\xfa\x5f\xda\xee\xfc\x9c\x78\xd6\x36\xe3\x91\x3f\x71\x77\xdf\xa9\xe3\xa7\xb0\x10\xb9\x46\xf0\xbb\xe2\xd1\x7a\xdd\x2b\xdf\xa0\xfb\x99\x20\x0e\xe9\x39\x62\x95\xab\x9d\xc3\x18\x04\xf2\xf3\x64\x77\xed\xcb\xcd\x6b\x8c\x50\x4d\xe6\x2d\x9f\xd8\xd9\x87\x7f\x2d\xef\xc4\x7a\x6b\x62\xdd\x01\xa5\x0d\x03\x38\xb8\x12\x3e\x6d\xd2\xb2\xb2\xf4\x67\x10\x8e\xbb\x0c\xa4\xd4\x04\x59\xa9\xef\x24\x55\x37\xa7\x53\xee\x58\x38\x98\x04\xe3\x6e\x63\x19\x74\x22\xe2\x82\x38\xb8\x12\x86\xe8\x5e\xc7\x3e\x2e\x35\xe7\xa0\x6f\x8a\x67\x5a\x63\x20\xbd\xa3\x13\x3b\x7e\x9d\x74\x7b\xec\x72\x4e\xf6\xa5\xe6\xc4\x48\x8d\x02\x44\x5c\x10\x07\x57\xc2\xf6\x2a\xfd\xfb\xaa\x1f\xe5\x7a\x47\x0f\xa6\x9f\x51\x8b\x7b\x79\x4f\x95\x49\x0d\x3f\x2b\x20\xea\xcd\xd1\x4f\x8c\xf9\x33\x95\xb8\x02\x65\x7a\x03\x38\xa8\x40\xec\xe9\xbc\x32\x68\xac\x3d\x49\x0a\x38\xf5\xfb\xa6\xb1\xe8\x35\x43\x0f\xad\x96\x27\x1e\xc7\xbd\x66\x76\xe5\xf2\x0e\x55\x0b\x70\xa5\xe8\x32\x0b\xbc\xf9\x53\xf1\x01\x74\x3f\x13\xc4\xc1\xa5\x70\xcc\x7d\x39\x78\x96\x98\xf1\x19\x87\xe3\xe5\xe8\xa3\x2a\x59\xa3\xe8\x67\x3f\xaf\x91\x8c\x5b\x0f\x31\xb0\x7a\x2b\xbc\xe7\xcf\x80\x36\xe6\x40\x1c\x5c\x0a\x79\xdd\x98\x94\x2a\xc6\xb1\xfc\x29\xc4\xf5\x61\x56\x43\x0c\x07\xe6\x34\x59\x6d\x17\xdd\x55\x1f\x50\xe4\x5e\x3f\x2e\x3e\xb2\x80\xca\x34\x80\x38\xb8\x14\x44\x45\xa8\xad\x7a\x5e\x53\x77\x8f\xf9\xfc\xe1\x24\x7b\x65\x37\xd5\xc9\x9c\x42\xe1\x2e\xda\x1c\x52\xb8\x36\x2f\x57\xbd\xf8\x06\x5a\xc5\x83\x38\xb8\x14\x5a\xc7\x1c\x38\x71\x5b\x27\x94\x2f\x06\x17\xd2\xdb\xec\x92\xd1\xc8\x5b\xfe\xb0\x26\x0b\x5b\xd7\xbf\xd0\x3c\x31\xf9\x67\xbf\xbf\x0b\x21\x05\x10\x07\x95\x8d\x3e\x9d\x57\x06\xcd\x7f\x27\xce\x0f\xa3\x1c\x6e\x13\xe2\xaf\xb9\xb4\x2c\xb4\x0b\x44\xa2\x5f\x1a\x12\x71\x78\xcb\x6f\x14\xdd\x5b\x33\xbb\xc8\x1f\x3e\x1c\x56\xd3\x08\xcd\x0f\x00\x0e\x2e\x85\xa8\xb6\x38\xf1\x47\xb8\x0f\xef\x98\x47\xb5\xf5\xbf\xbd\x91\xa7\x70\xfb\x79\x3a\xed\x6d\x96\x54\xcb\xec\x87\x33\x18\x72\x8e\x2f\xa1\x67\x83\x41\x1c\x5c\x0a\x6f\x9e\x3d\xb3\xb9\xc3\xa5\x14\x6c\x2b\xb7\x3c\xab\x55\xb2\xc5\xd6\xba\x3b\xbc\xd2\xc3\x58\xea\xe3\xf0\x46\x48\x3c\x32\x0e\x05\x7a\xb9\x02\xc4\xc1\xa5\x30\x8b\xa3\x8a\x32\xe0\x5a\x41\x1d\xb0\xcf\x93\x58\x8d\x1b\x3d\xab\xe5\xfa\xaa\xc7\xa8\x3f\xe9\x60\x7e\xcd\x38\x93\xc9\x66\x5c\x1e\xaa\xe2\x06\xe0\xe0\x52\xf0\xf5\x74\x22\x18\x5e\x37\x96\x22\xd2\xd9\xd4\x6e\xad\x99\xd3\xbf\x28\x48\x33\xed\xf1\x89\xb9\x21\xa4\x3e\x8b\x40\x27\x85\x39\x10\x21\x05\x10\x07\x8d\x0a\xa7\xf3\xca\xa0\x35\xc9\x49\x52\xc0\xaa\x78\xf1\xd9\x5a\x98\xb9\xc6\xa4\xb7\x99\xc1\x20\x61\x54\x91\xd9\x97\xe8\xc2\xec\x9d\x03\x4e\x74\x69\x9e\x57\x44\x58\x0f\xa0\x27\xfb\x41\x1c\x5c\x0a\x1b\xad\xd2\xaf\x53\xae\xcc\xd2\xe7\xbb\xed\x29\xe5\xf2\xa9\x15\x4a\xa4\xc4\x26\x7b\x6c\xde\xe8\xbb\xfa\x29\x24\x46\xf2\x66\xfd\x73\x68\x93\x16\xc0\xc1\xa5\x90\x26\x41\xce\xdd\xe4\x51\xaf\x79\xe4\xc5\x45\x4d\x6e\x69\x62\xdf\x8f\xa2\x6d\x44\x95\xb4\x7c\x57\x52\xbf\xf5\x99\xee\xce\x0a\x54\x0a\x04\xc4\xc1\xa5\x50\x42\xa3\xb4\xc4\x11\x55\x77\xcf\x80\x27\xe1\xc5\x00\x26\xae\x01\xb3\x60\xa4\x41\xe9\x7b\x75\xc7\x06\x34\x9d\xe2\xc2\xa0\x80\x17\x88\xb8\x20\x0e\x2e\x05\xfe\x3b\xa5\x23\x6d\xeb\x58\xd7\x24\x4b\x27\x2a\x3d\xcd\x50\x5a\x51\xee\x78\x61\x18\x08\x36\xf9\x38\x48\x76\xb5\xa7\x60\x1e\x97\x22\xa4\x00\xe2\xa0\x51\xe1\x74\x5e\x19\xe4\xb3\x4e\xf6\xca\x17\xa5\xdc\xe9\x97\x03\x50\x53\x26\xd9\x18\xbc\x73\x6f\xbd\xf2\xbb\xf3\x91\xe2\x13\x9e\xcc\xc8\x63\xa1\x4f\xdd\xc9\x9a\x1b\x71\xf7\xa0\x6a\xdc\x00\x0e\xd9\x2b\x7f\x38\xf7\xc2\x1a\xbf\x86\x33\x7f\x49\xba\x75\x24\xf8\xd1\x47\xa6\x81\x4a\xf4\x89\xb5\xc6\x50\xe7\x99\x0e\x1c\x86\xcb\x9d\x4e\x7a\x88\xc8\x20\x0e\xd9\x2b\x9b\x86\x38\xd6\x59\xa4\xba\xb0\xa8\xac\x5a\x60\x28\x25\x3a\x67\xc4\x2d\xcc\x08\x1e\x2d\xbd\x55\x56\xe1\x39\x50\xd4\x65\xbf\x02\x65\xa7\x83\x38\x5f\x69\x71\xb8\x57\x3e\x6d\x05\xf1\x8d\xe7\x69\xe7\xe2\xce\xcf\x08\xce\xbf\x09\xf7\xa3\x48\xd6\x7d\x55\xa1\x57\xfa\xa1\x51\x49\xf5\x70\x37\xc5\xfc\x6a\xaf\xb6\x4c\xc2\xbf\x5e\x39\x29\x84\xb6\x02\x4f\xc6\x7d\xf8\xa9\x64\xe1\xf6\xd3\x89\xa8\xec\x54\x7d\x76\xe9\x97\x6a\x56\xdd\x95\xc9\x28\xce\x28\xbd\x1f\x7c\xff\x41\x55\x5f\xad\x27\xdf\x74\x88\xc7\xad\x6a\x5b\xd9\x11\xfd\xc1\xd1\x34\xb6\xab\xc7\x60\xe0\xc9\xd8\x76\xf1\x72\x5e\x2a\x55\x21\xee\xaf\xff\x36\xaf\x0c\x6a\xda\xbf\x99\xde\xb7\xe1\x7e\xca\xda\xa5\xe4\x83\x0a\xc5\x0c\x56\x9c\xec\x4e\x7c\x12\x76\x8c\xca\xd0\xef\x01\xdf\x09\xab\x9e\xb5\xd2\x17\xd4\xd9\xef\xe6\xa4\xc9\xcf\xe4\xc8\x13\xd9\x2b\xe7\xad\xe3\x7d\x4a\xbb\x47\x91\xd5\x5e\x9b\x84\xcf\x92\xdf\x28\xe3\xd1\x66\x40\x98\x1d\xf7\xc1\x4a\x69\xc9\x4e\xfb\xcd\x78\xc1\x99\x54\x45\x43\x11\x45\xfa\xd9\x34\xea\xf3\xbe\xfc\xca\xda\x41\x49\x29\xc2\xca\x06\x28\xcc\x57\x0c\xe9\x3f\x71\xab\xe7\xfd\xd9\x79\xd7\xe9\x7f\xcc\xb4\x25\xcc\x73\x26\xad\x45\xf6\xca\xf5\x6b\x5f\x16\x2f\xb3\xcb\xd1\xac\x8f\x8e\x63\xa0\xe0\x11\xa3\xf3\x48\x24\x35\x94\x94\x66\xdd\x79\x76\x18\x5e\xad\x1e\x41\xaa\x79\x26\xad\x75\x42\xfa\xd9\xea\xa0\x9a\xbc\xca\xa3\x62\x12\xca\xea\xe7\x86\xe6\x58\xef\x3d\x42\x7f\xa0\xf0\x64\xd1\x67\x7d\xab\xc8\x23\x9f\x8a\x2d\xa1\xe9\x39\x33\xaf\x0c\x12\xd1\x49\x13\xa0\x25\xb9\x4a\xc9\x78\x68\xc7\xca\x6e\x5e\x7a\xf2\x83\xfa\x65\x2a\x4e\x62\x8a\xe4\x75\xcf\x3e\xce\xd5\x58\x41\x8e\xef\xad\xa6\xd0\x7b\xc4\x20\x0e\x3e\x01\x96\xe7\xde\x7d\xd3\x6c\x77\xd1\xa2\xcf\xdf\xfd\x5b\xa4\xf3\x06\x47\xa9\xd0\x3b\x19\x7a\x87\xeb\xc1\x34\xdf\xf8\xf5\x8f\xd6\xbd\xff\x42\x37\x7a\x01\x1c\x7c\x02\x6c\xc3\xcb\xde\x9a\xd2\xaf\xd1\x0e\x33\xaa\xbc\xe6\xc4\x8f\x69\x37\x98\x95\x60\x64\xba\x86\x1a\xe7\x85\x8e\xeb\xaa\x14\x5c\x52\x8b\x88\x0b\xe2\xe0\xfd\xb0\x49\x91\xe5\xe4\x17\xba\x49\xae\x39\xf5\x0e\x37\x90\xe0\xe7\xa8\xf0\xd6\x9e\xb3\x40\x33\x85\x06\xed\x77\x5f\x8b\x4a\xa3\xc3\xbb\x88\xb8\x20\x0e\x1e\x17\x53\x3a\x3b\xf6\x48\xc7\xe3\xd2\xd2\x9c\xd9\x6a\xdb\xab\x40\x7a\x6e\xbd\xed\x6a\x74\xa6\x0a\x3e\xfb\x59\x1d\x5c\xd9\xae\x7a\x5d\x84\x57\x06\x71\x88\x0a\xe2\xff\x33\x74\x9c\xe2\x04\x09\xf0\x5d\x9f\xa4\x84\x44\x39\xd9\xe5\xad\x44\x74\x94\x96\xa9\xa1\xdc\x4c\xf6\x1a\x9c\xe7\x93\xa2\x54\x84\x5e\xe5\x9f\x13\xdb\xf7\x34\x45\x0b\xb3\xa0\xf3\x54\x10\x07\x57\x02\x4b\x3a\x5a\x53\x9d\xb3\xe5\xad\xef\x02\x5e\x8c\xa2\xf9\x4b\xa9\xe5\xa1\x6d\x94\x95\xd7\x1f\x7d\x8a\xd1\x3d\x1c\x77\xb9\x26\x09\x55\x5b\x03\x71\x70\x25\x24\x56\x53\xf3\x38\x8b\xea\xbd\xca\x13\x39\x30\xe1\x09\x79\x5e\xa8\xc4\x56\xda\x1b\x62\x9f\x70\x2d\x0e\xad\xe2\x4d\x65\x88\x03\xf4\xae\x0e\x88\x83\xf7\x43\x83\x6f\xc6\xae\xe8\x58\x79\x87\xc0\x66\x72\x8a\xf2\x93\x2d\x0b\xcd\x58\xe7\x4c\x0a\x3f\x65\xa3\x17\x59\x1a\x0b\x9b\x62\x01\x01\x50\x91\x1e\x00\x87\x74\x42\xa7\x40\xf3\xfa\x47\x58\x6c\xc7\xd7\xca\x68\xf6\x77\x4f\xec\x16\x2e\x3a\xfd\x39\x1f\x6b\x79\x5f\x07\x53\xd8\xc5\xf2\x3a\xc1\x1c\xf4\x32\x35\x88\x83\x0a\xc4\x9e\xce\x2b\x83\xc6\xda\x93\xa4\xf0\x94\xfb\x3d\x05\xda\xf7\xd7\x9d\x07\x5a\x45\x11\xdf\x62\x8c\xf6\x03\xf2\x63\x0e\x8d\x1a\xc2\xdd\x85\x32\x6a\x6f\x15\x14\x96\xfd\x42\x74\x01\x88\x83\x4b\x61\xa1\xe8\xf1\x81\xb1\xa0\x64\x45\xb7\x1f\x75\x3b\xb6\x9d\xba\x53\xd5\x58\x5e\xdc\x14\x83\xc1\x10\x79\xa1\x75\x4a\x77\xa0\x86\x35\x22\x2e\x88\x83\x4b\xc1\x1b\x6d\x9c\xc7\x68\xf2\xdd\x25\x31\x7c\x73\x22\xf5\x85\x7b\x6e\x99\xe7\x1d\xba\x4d\x6f\xae\xf0\xd3\xd9\x60\x76\x4f\x14\xc6\x6e\x42\xb9\xa2\x00\x0e\xde\x0f\x2d\x92\x5c\x0a\x1c\xe4\x37\x33\xfa\x97\x74\x8f\x9c\x1e\x91\xa6\x0c\x5c\x7a\xb9\x3a\x17\xac\xb1\xc5\x1d\x40\xff\x19\xe3\xa1\x26\xb4\x91\x08\xe2\xe0\x71\x2d\x5a\x4d\x25\x59\xe7\x06\xfb\xd1\x5e\x5d\x16\x78\xff\xb8\xa5\x43\x34\x17\xfb\xf1\x8e\x5e\x5a\x5b\x5f\x36\x1f\x29\x65\xf0\x20\x25\x42\x0a\x20\x0e\x2a\x1b\x2d\x7a\x2a\x29\x80\xe6\xbf\x93\xa4\xb0\x70\xc1\xf2\xca\x14\x99\x96\x4c\xbf\xd6\xf7\x4e\x89\x37\x49\x9e\xa1\x97\x47\xcf\x6b\xa3\x64\x98\x57\x2a\x6c\x1f\xee\x65\x0f\x41\x0f\x8e\x81\x38\xb8\x14\x7e\x18\x74\xd2\xf5\x2b\xd0\xd3\x3e\xe5\xe3\x8c\x65\x28\xfb\xf9\x58\x25\xbe\xdc\x43\x34\x2b\x9f\x5d\x45\x18\x27\x50\xf3\xc6\x04\x37\x22\x2e\x88\x83\x4b\x61\xca\x74\xc7\xa9\x9f\xb8\x3d\xa5\xbf\xeb\x97\xc3\xb6\x42\x41\x48\xb1\xc1\xb0\x46\x7a\x42\x09\x17\xb9\x04\xf6\x4f\xdd\x1b\x25\x90\x57\x06\x71\xf0\x7e\x18\x5b\xfb\x1e\x77\x18\x7d\xbf\x45\x3d\xf4\x2f\xeb\x8f\xa1\xfc\x16\x51\x42\x31\x47\xec\x47\x12\x5d\xa3\x28\x53\x8a\x6b\xc9\x68\x7a\x50\x06\x39\x80\x83\xc7\xc5\x28\x50\xa4\x57\xbc\x68\xec\xca\x4f\x9e\xd0\xf4\x0c\x5d\x54\x26\xc9\x3f\xfd\xaa\xb8\x79\xa5\xf4\xe0\xcf\xf3\x33\xbb\xb4\x32\xfb\x08\x29\x80\x38\x68\x54\x38\x9d\x57\x06\xad\x49\x4e\x92\x42\xcc\x31\x7f\xba\x4b\xdd\xde\x05\xd9\x0b\xe7\x0f\xf9\xfb\xbc\xbe\xa8\x0c\xfa\xfe\x42\xb5\x1e\x7e\x6a\xe3\x53\x75\xfb\xd7\xf2\xb7\x55\xa8\xc8\x0a\x80\x83\x4b\xc1\x32\xf9\xa8\xf1\xe3\x79\x9a\xfb\x9f\xf8\x37\xe7\xb6\x5b\xb8\x3b\x47\x78\xe4\xad\x75\x59\x55\xdd\x3f\x34\x2f\xb0\x8a\xe5\x8a\x40\xaf\x57\x81\x38\xb8\x14\x7a\x6c\x1f\x94\xab\xbd\x54\x2e\xa4\x9f\x50\x7e\xb4\x45\xd1\x5a\xb9\x32\xa7\x97\xbf\xdc\x28\xa4\x27\x2a\xc7\xb1\x7b\x7e\xaa\x04\x2a\x05\x02\xe2\xe0\xfd\x10\x71\x5b\x33\xfe\x3a\x6d\xe5\x51\xd8\x5a\x56\xda\x39\xc3\xd1\x9b\xa2\x77\x3a\x17\x59\x22\x71\x26\x8b\xe2\x26\x8a\xa7\x2f\x3f\xdc\x47\xc4\x05\x71\xf0\xb8\x93\x1f\xc8\x78\x8a\xf7\x2e\xfd\x76\x0a\x0e\x65\x56\x23\x3a\x2f\x6f\x93\x96\x23\x77\x39\x67\x3a\xe5\xc5\xfe\x33\x89\xb9\xb6\xa1\xe7\x08\x29\x80\x38\x68\x54\x70\x3a\x95\x57\x06\xf9\xac\x93\xbd\xb2\x77\xf2\x5b\x61\xdb\x65\x91\x3e\x6f\xcb\x31\x4c\xf6\x6e\xcd\xa3\x89\x48\xef\xc7\x85\x13\x9b\x12\xdd\xc2\xab\x71\xaf\xe3\x6c\x73\x11\xbe\x13\xc4\x21\x7b\xe5\xe9\x8b\xce\x26\x69\x6d\xcf\x7b\x3e\x92\xbe\xcf\x4c\xff\x91\xae\xce\xf9\x8b\x33\x6d\x27\xae\x38\x59\xf8\xaf\xfd\xb8\xa7\x1d\x4b\x35\x74\x53\x1a\xc0\x21\x7b\xe5\xeb\x73\xc2\xe3\xfe\x2a\x4b\xc1\x11\xae\x53\x89\xd8\xe4\xec\x2f\x49\xf7\x39\x9f\xd1\x09\x5b\xcf\x7c\x16\x98\x65\xeb\xbd\xeb\x8f\x82\x88\x0c\xe2\x7c\xa5\x51\x50\x61\xb5\xc9\x4f\x5b\x41\x3c\x52\xc4\xab\xae\x2a\xde\x34\x35\x51\x7d\x96\x90\xfe\x39\xf9\x01\x36\x7e\xb6\x61\xb1\x43\xad\x28\xd3\x9d\x54\xcd\x87\xf1\xaf\xf0\xfe\xf5\xca\xfd\x7a\xee\xcd\x2e\xc9\x65\x2d\xce\x44\x75\x6f\xc3\xa3\x92\x84\x57\x66\x0d\x15\x67\xae\x50\x92\xa0\x0a\x68\xcc\xc5\x53\x91\x71\xfd\x83\x0e\x5f\x26\x9a\xf8\x61\x52\xcf\x93\xf7\x7c\x47\x4e\x08\xa7\x85\x4c\x93\x0b\xff\x57\xc6\x26\xc7\xb7\x84\xb9\x19\x39\x1a\xfc\x7c\xc1\xff\x36\xaf\x0c\x6a\xda\xbf\xf9\xca\x48\x5e\x59\xba\xc4\xf6\xdb\x2d\xdf\x47\xa1\xf1\x23\x0c\x0d\x36\x43\xb7\x77\xf2\x71\x2c\xef\x6a\x31\x3a\xcf\xa6\x8a\xe3\xe7\x0f\x6c\xdd\xd4\x3b\x93\x23\x4f\x64\xaf\x6c\xc1\xc4\xe8\x3c\x29\x57\xfd\x12\x5d\xa3\xaf\x8a\xf7\x8e\x56\x59\xc3\x5e\x8e\x91\x8f\x51\x9c\x38\xc3\x38\x1b\x35\x83\xb8\xda\xf4\x99\x1c\xf0\x22\x7b\xe5\xe7\x3d\x47\x47\x57\x65\x87\xca\x6e\x73\x07\xdb\xa9\x3c\xb6\x73\xbd\x39\x5e\xd4\x8f\x77\xc9\xbc\x4b\x8f\x28\xc5\x5c\x3f\xb9\xf0\x4c\x9e\xbd\xfa\x84\xec\x95\x93\x94\x49\x6d\xb8\xca\xcc\xa4\xff\x32\xff\x6c\x75\xc5\xdd\xaf\xbc\x67\xaf\xc9\x65\xbe\x15\x52\x6f\xa7\xf6\x82\xaa\x70\x9f\xe7\xf9\x99\xb4\x16\xd9\x2b\x5b\xe3\x61\x97\xb4\xfa\x1c\x68\xe2\x25\xcb\xfe\xc1\xd2\x46\x8f\x26\xdf\x72\x24\x5d\xee\xfc\x78\xf0\xe3\x90\xa0\x84\x77\x76\x1b\xff\xcc\xbc\x32\x48\x44\x27\x56\x45\xd3\x2e\xec\x75\xec\xaa\xca\x56\xdc\xd5\xbf\xe6\x13\x65\x24\xa0\xae\xfd\x55\xf5\x51\x71\x24\xa7\xbc\x00\xe5\x0f\xce\x24\xa1\x5c\xa8\x2a\x1a\x80\x83\x4f\x80\x45\xba\x78\x36\xc9\xfd\xdd\xd7\xbc\x9b\x77\xbc\x1f\x14\x0e\xd2\xc5\xfa\x0e\x1a\xd9\x98\x4b\x7e\xac\xea\xbb\x7a\x0d\xe5\xcb\x01\x74\x84\x04\xe2\xe0\x13\x20\x1e\x1d\xfd\xf2\x05\x82\xf2\x0b\xeb\xdd\xd1\x0a\xaf\xde\xcc\x26\xa0\xa9\xf5\xe9\x8d\xcc\x98\x77\x75\x66\x3f\x70\xa3\xf3\x7d\x07\xe5\x41\x83\x38\x78\x3f\xa4\xdc\xbe\xd9\xfb\xe9\x5b\xeb\xae\x5c\xd5\xaa\xd9\x47\x93\x27\x17\x97\x89\x0f\x1b\xcd\x8d\x23\xf9\xc3\xf6\x27\x77\xb9\x74\x0b\xa0\x62\xc1\x20\xce\x57\x92\xe0\x3f\xef\xb8\x8b\x05\x8d\x17\x7e\x78\x53\x51\x1b\x3e\xd6\xce\xa5\x5b\xee\xc4\x4e\x76\xa8\xae\xe5\xbd\x7d\xd5\xca\x20\xf9\x13\xe6\x6f\xe7\xeb\x08\xaf\x0c\xe2\xa0\x7c\xe5\x53\x79\x65\xd0\x77\x7d\x92\x12\xba\xaf\x0c\x13\xe5\xfd\xe6\xcf\x36\x66\xa6\x6a\x15\xec\x4f\xdb\x7a\x7b\xe4\x55\xac\xbf\xa2\x7a\xd4\x16\x10\xb0\x9b\xe5\x97\x93\x80\xe8\x01\x10\x07\x57\x82\x5a\xf1\x3a\x17\x76\x4b\x52\x64\x63\xee\x27\x4c\x87\x57\x8c\x95\x4a\xc7\x26\x41\xb8\x75\xdc\x82\x9d\xbc\xd7\x8a\x07\x83\x3d\x82\x10\x71\x41\x1c\x5c\x09\x2a\xeb\x34\x55\x2c\xbb\x04\x99\xd3\x59\xce\xd1\x84\x7e\x92\x52\x93\x57\x33\x2b\x7c\xeb\x3d\xda\xb2\xb5\x16\x68\x63\x0e\xe8\xa0\x02\xb1\x20\x0e\xde\x0f\xcb\x63\xab\xda\xc6\x16\x91\xaf\xf0\x94\xfe\x12\xe9\xa7\x3d\x51\xd1\xd0\x2c\xa5\x51\xc6\xef\xa5\xa4\xc8\xa0\x72\xa3\x2f\xb8\x0e\xdd\xb6\x04\x71\x70\x25\xcc\xf7\xff\x41\xd3\x08\x34\x74\xee\x1e\x8f\x14\x69\x7d\xa0\x66\xfd\x78\xe9\xb6\x67\x89\xa5\x5c\x43\x15\xc9\x6a\x1c\x5d\x67\x0c\x1f\x62\x29\x04\xe2\xa0\xcc\xc4\xd3\x79\x65\xd0\x58\x7b\x92\x14\xde\xdc\xf8\x32\x36\xc4\x8d\xc3\x45\x3c\xfd\x88\xc2\xf1\x0a\xae\x98\xa2\xf5\xe1\x85\xbd\x7a\xa3\x10\xbe\x67\x53\x5c\x84\xb6\xee\xbd\xd0\xe1\x1c\x80\x83\x4b\x61\x71\x5e\xa0\xb9\x7c\xfd\xe6\x1a\xf7\xca\x8d\x8a\x0a\x29\x05\x82\x6b\x93\x35\xd4\x8a\x7c\xf7\xf1\xe5\x97\x7d\x1b\x7a\xe6\x66\xa1\x27\xed\x40\x1c\x5c\x0a\xf2\x9d\xb8\xfc\x94\x42\xc9\xda\x9a\x6c\x0c\xeb\x85\xd7\x09\xcc\xbf\x54\xff\x7d\x98\x11\xab\x5c\x98\x68\x42\xbb\x64\x14\xe4\xaa\x82\x88\x0b\xe2\x90\x8c\x62\xac\xd3\xb5\x59\xa5\xcf\x04\xf9\x0b\x68\x07\x3c\x54\xb1\xda\x1f\x79\x56\xec\x9a\x66\xdf\x95\x29\x9b\x73\xee\x50\xa3\x53\x40\x8f\x94\x83\x38\xb8\x14\x9e\x1a\x90\x8d\x55\x50\xb6\x0b\x7e\xa9\x22\x7e\x71\x90\x50\x43\xb2\x8c\x73\x3d\x95\xa1\xc4\x2a\x02\x87\x3f\xfe\xe7\x42\x7a\x13\x74\x82\x04\xe2\xa0\xcc\xc4\xd3\x79\x65\xd0\xfc\x77\x92\x14\x6a\x2d\xad\x8d\xd1\xb6\xe3\x0e\xc9\xf5\x51\x8a\x04\x14\xec\xe2\xa5\x2d\xc8\xec\xc2\xba\x9f\x72\x0a\xbd\x89\x50\x7e\x91\x67\x42\x8c\xe8\x02\x10\x07\x97\x82\x15\xd6\xe8\x0b\xf1\x02\xca\xc8\x7d\x23\xb6\x77\x59\x3f\x57\x3e\x96\xab\x53\xfb\xf0\x75\xb2\x06\x17\x76\x73\xf2\x95\x85\x60\x42\x0f\x99\x81\x38\xb8\x14\x52\xe2\xb9\x6b\xab\x22\xdf\xb1\x08\x68\xe0\xce\x65\x8c\xdd\xf7\xd2\xfd\xb5\x6b\x19\xb1\x32\xf1\x34\xb5\xf7\x5d\xb5\x86\x57\xb2\x1b\x34\x8e\x03\x38\x78\x3f\x3c\x5b\xa8\x4f\xd2\x76\xa1\x8a\x6c\x56\xbb\xa8\xf1\x74\xa0\x8f\x87\x6e\xf1\xdc\x3b\x73\xc6\xf4\x86\x70\xd5\x67\xe2\x8e\xc5\xaf\xa0\x79\x07\xc4\xc1\xa5\x40\xb7\x7a\xf5\xe8\x83\xe7\x4a\xf6\x8d\x9f\x1c\x7a\x72\x8f\x9c\x6d\x1f\x55\x7b\xa6\x7f\x25\x30\x2e\x52\xdc\x78\x9c\x63\x76\x37\xea\x1e\x42\x0a\x20\x0e\x1a\x15\x4e\xe7\x95\x41\x6b\x92\x93\xa4\xc0\xb6\x11\x1c\x1b\x59\xf0\x8b\xc8\xd3\x6c\xfe\x1d\xfd\x4f\x5a\xa9\xdb\x72\xb1\xea\x17\x52\xd6\x09\xae\x73\xf6\x9a\xb8\xf4\xa4\x41\x75\xfa\x41\x1c\x5c\x0a\x28\xbb\x57\xba\x36\x46\x8e\x9e\xcf\x8b\x1a\x36\xe6\x0b\xa0\xe5\xbc\x5d\x58\x89\xd8\x78\x4b\xa6\xc8\x5b\xaa\x59\x2b\xb4\x11\xd2\x84\x88\x0b\xe2\x90\xa4\xf0\xc8\x7d\x72\x04\x8f\xe6\x49\x46\x61\xf5\x8f\x51\x03\xfc\x14\x4a\xce\xda\x71\x73\x6d\xe6\xab\xf2\x51\xbf\xb6\x9f\x37\x3e\x86\xd2\xb5\x40\x1c\xbc\x1f\xf0\xd3\x6d\x69\x9b\x0c\xd6\x7f\x49\xa5\xb5\xb0\x7c\x17\x54\xf1\xff\xda\x62\xf8\xa2\x6a\xa1\xb0\x00\x5f\x54\x21\xec\x0e\x01\x89\x09\x22\x2e\x88\x83\x4b\x81\x50\x5f\xd7\xb0\xda\x9a\xa5\xe8\x91\x38\xcf\x42\x89\x0d\x73\x7c\xf0\x7b\xb7\x8f\xe4\x95\x73\x32\xc6\x5f\x04\x87\xb6\xeb\x08\xab\x11\x52\x00\x71\xd0\xa8\x70\x3a\xaf\x0c\xf2\x59\x27\x7b\xe5\x89\xa7\xf7\xaf\xf5\xd7\xa7\x07\x90\x15\xd7\xed\x68\xad\xf2\x5f\x52\x7e\x59\x2c\xf9\x13\x25\x92\xe0\xf7\xce\xd3\x1e\xf4\x3b\xdf\x79\x10\xbe\x13\xc4\x9d\x70\xae\x9c\xc6\x85\x72\xa7\x66\x00\x85\x03\xff\x89\x16\x05\x05\xa1\x93\x59\x4f\xb7\x4b\xf6\xa5\x58\x0d\x56\xdf\x36\xea\x0f\x57\x39\xaf\x40\xe7\xca\x00\x0e\xd9\x2b\x7b\x50\xfd\xa2\xbb\x90\xe9\x39\x98\xe1\x20\x37\xca\x36\xe5\xa0\x2a\x12\x3f\xb0\xc0\xbd\xc4\xbb\x39\x8d\x49\x2a\x49\x32\x6e\xef\x8a\x88\x0c\xe2\x7c\xa5\x51\x30\xfe\x33\xf2\xa9\x2b\x88\x63\x5f\x0d\x31\xb9\x80\x5e\x6e\x7c\xec\x6a\xb9\x1b\x25\x46\xda\xbc\xe4\xfb\xd5\xa2\xd4\x99\x47\xe6\xa3\xe6\x98\xc9\x97\x58\xbb\xd2\x7f\xbd\x32\x89\xd4\xa2\x65\x89\xef\xd8\xbb\xa3\x2a\x91\x3b\x11\xdf\x39\x64\x89\x93\x0a\xf7\x6e\x4f\xdd\xa2\xf0\xf9\x72\x3e\x98\x82\x7a\xb5\xf6\xdf\xb5\x90\x52\x76\xef\x08\x29\x9b\x34\x33\xae\x25\x26\x1e\x8b\x4b\xf5\xc5\x37\x84\x65\xed\xb9\xb4\x52\x9c\x11\x81\xbd\x77\x8b\xab\x36\xfe\xdb\xbc\x32\xa8\x69\xff\xe6\x2b\x23\x79\xe5\x9d\x2a\x15\x0a\x45\x56\x52\x7d\x15\x8b\xa9\x50\x96\x90\x83\x1b\x17\xca\x74\x37\x7b\xd2\xba\x44\x58\xff\x18\xde\x65\x20\xa2\xd1\x3e\x93\x23\xcf\xeb\x48\x36\x4e\xca\x99\x99\x9f\xfe\xe6\x62\xe1\x58\x35\x01\x2a\xbf\xe5\xea\x2a\x03\x61\xa2\x75\xb0\xc9\x57\x8d\xd5\x7a\x3a\x96\xac\xac\x81\x33\x28\x3b\x15\x2a\xed\x83\xec\x95\x5b\xf0\x6d\x2f\xc8\x0a\x61\x24\xc4\x28\x7f\xa4\x53\xb6\xd2\xc8\xb9\x37\x87\xee\xfb\xc3\xd6\xb7\xe8\x4a\xea\xc7\x64\x0a\x3b\xf1\xa0\x33\x69\xad\x2e\xd2\xcf\x16\x6f\x0d\x0c\x1f\x7a\x7a\xce\xaf\xdb\x2e\x61\x87\xe2\xe7\x07\xb9\x68\xe0\xd9\x29\x36\x52\xdc\xe0\x50\xff\x12\x3a\x47\x24\x74\x26\x57\xbf\x7d\x90\xbd\xf2\xcf\x1b\x24\x9e\xe9\x66\x96\xc5\xbd\x94\x1c\xa6\x16\x07\x7c\x81\x4d\x78\xd5\x54\x8c\x89\xa4\x85\xb4\x9b\xf3\xe1\x95\xef\x38\x6b\xcf\xcc\x2b\x83\x44\x74\x62\x3e\xda\x43\x3d\xbb\x17\x2f\xbb\xef\x45\x61\xde\xbb\x79\x18\x30\xd7\x39\x26\xf9\xc9\x6f\xf4\x5d\xf9\xae\x80\xac\xc9\x40\x62\xf4\x4c\x3f\x94\x8f\x06\xe0\xe0\x13\xa0\x1d\xf1\xb4\x45\x7b\x87\x98\x73\x79\x78\xb1\x35\xf5\xd8\xf6\xf9\xe2\xf2\xac\x2b\xc6\xfe\xca\x3a\x2e\xb9\x03\x76\x06\xe5\x41\x8f\x11\x71\x41\x1c\x7c\x02\xfc\xf9\x77\x4a\xaa\x53\x6c\xf4\x99\x2c\x7d\x6a\xd4\x75\x76\xdb\xa6\x7b\x6a\x9c\x3d\x94\x0c\x97\xd4\x88\x69\xfa\x1c\x3d\xbe\x5a\x43\xa9\x94\x20\x0e\xde\x0f\x8c\x0f\x9f\xfa\x64\x9d\xff\x7c\xeb\x83\xf1\x76\xec\xbd\x19\xa7\x6f\x2b\x9c\x31\xfd\x41\x05\xec\xd4\x81\xfc\x35\x57\xd6\x47\x7d\xec\x11\x71\x41\x9c\xaf\x24\x0a\xea\xbf\x71\xd3\xbd\xb2\xcc\x55\x84\xfa\xbd\x3f\x52\x67\xab\xe5\x1b\xfd\x70\xcf\x7e\x4f\xd4\xdb\xd7\xe4\x2c\x74\x2b\x4f\x80\xbe\xbe\xa4\xfa\x39\xc2\x2b\x83\x38\x28\x5f\xf9\x54\x5e\x19\xf4\x5d\x9f\xa4\x84\xfd\x78\x0d\xaa\x87\x33\x64\x17\xc6\x9f\xb7\xcb\x8b\x4b\xcd\x92\x34\xaf\x47\x12\xbb\xba\xb8\xe3\x36\x3f\x72\xf5\x77\x25\x0a\x32\x47\xf4\x00\x88\x83\x2b\xa1\xab\xb7\x0c\x43\xb4\xef\x9d\xdf\x7e\xd7\x5b\xb1\xd6\xb0\x34\xcb\xfe\xe9\x57\xd1\x38\x86\x63\x22\x5c\xf8\x0a\x25\xed\xaf\xa8\x20\xc3\x01\xe2\xe0\x4a\xa0\xfb\x75\x97\xae\x25\x37\x47\xe4\x43\xb8\x9d\x54\xfb\xcf\x3e\x7b\xf9\xcb\xb8\xc9\x17\x9f\xbf\xfe\x5c\xc1\x59\x63\x99\x6b\x6a\x51\x8e\x88\x0b\xe2\x90\x4e\x90\xb6\x6c\x7e\x15\xa6\x0d\x7e\x6b\x7c\x77\xd9\xcf\x34\x95\x83\x22\xea\x11\x43\xca\x13\x4b\x3d\x71\xbc\x8f\x7e\x1a\x02\xb1\x0f\xa0\xc3\x4f\x10\x07\x57\x42\x23\x91\xe9\x2c\x29\xa3\xcd\x2c\x03\x1f\x43\xd2\x4b\x1e\x6f\x36\x55\xd5\x06\xb3\x07\x63\x84\x37\xf6\xf9\x5b\x46\xf2\xc5\x72\x16\x11\x4b\x21\x10\x07\x65\x26\x5e\x3f\x5d\x15\x1f\xc0\x58\x7b\xa2\x57\x9e\x63\xa5\xf4\xde\x0d\x4d\xa4\xb1\xa1\xeb\x33\xb9\x13\xe8\x68\x66\x3e\x6f\x1f\x40\x5d\x71\x5f\xa0\x82\x7c\x9a\x48\x12\x3b\x14\xf2\xca\x00\x0e\x2e\x05\xc2\xe9\xb8\x9f\x56\x96\x44\xeb\xc7\x21\xa5\x8c\xd9\xe5\xea\xc4\xef\xf4\x75\x82\x48\x1f\x44\x5e\x59\xc3\xdf\xd2\x41\xa1\xfc\x71\x1f\x4a\xfa\x04\x70\x70\x29\x0c\x36\xa3\xd3\x62\xcb\x9c\x5f\x30\x9a\x36\xdc\x33\x5e\xbe\xf5\xe6\x1a\x3a\xdf\x8d\xaf\xf9\x98\xe1\x13\x5b\xc5\xc3\xb7\x73\x99\x86\x11\x71\x41\x1c\xbc\x1f\x7a\x7c\xd3\x0e\x27\xf0\x55\xd8\x8c\xc9\xbe\xb7\xe0\x29\xb9\xaa\xcb\xb9\x26\xac\xdb\x8a\x45\x3b\x85\x3d\xa9\xae\xe2\x18\x61\x87\xf2\xab\x41\x1c\x5c\x0a\xca\x6a\xbf\xde\x19\x9b\x4d\xde\x29\xc8\xd3\x49\xa2\xe0\xe3\xcb\x52\xf8\x21\x4e\x40\x14\x32\xbe\x25\x1c\x51\x30\x3a\xff\x1b\xf5\x19\x74\xc5\x00\xc0\x41\x99\x89\xa7\xf3\xca\xa0\xf9\xef\xc4\x27\x96\xaa\xcf\xbf\x97\x7b\xa9\x23\xbe\x20\xe7\x73\x4b\xa0\xed\xc6\x81\xd4\xa4\xaf\xe2\x6a\xe9\x05\xf3\xf6\xaf\x68\xf3\x62\x52\x0c\x16\x88\x2e\x00\x71\x48\x6f\xf0\xd1\x47\xba\xab\xe3\xd5\x2f\x06\x30\xe2\x07\x75\xc7\x44\x54\x5d\xfb\xc3\xbb\x13\x47\xaf\xa9\x82\x1e\x46\x94\xd0\xa9\xe8\x2b\x87\x88\x0b\xe2\xe0\x52\x50\x7b\xaa\xc8\x6f\x4b\x1f\x7f\xcf\xb3\x91\xc8\xda\x67\xde\xec\x12\xe3\x62\xbb\xdd\x54\x45\xdd\xe1\x1f\x9f\xe4\xdd\x20\x36\xe5\x60\x68\x67\x0e\xc0\xc1\xfb\xc1\x80\xa3\x41\x73\x9c\x1a\x67\x99\x6d\x48\x33\x7d\xe7\x3e\x56\xf4\x9f\xc2\x67\x7c\x6a\xc5\x17\xab\xaa\xbc\x3e\xbf\xad\xea\x7d\xbc\x05\xbd\x2b\x00\xe0\xe0\x52\xd0\x96\x6f\x13\xd5\x41\x95\x58\xe6\xf8\x62\xf5\x8e\xc5\x51\x24\x21\x62\x56\xf7\x90\x86\x25\x39\xcd\xb0\x6f\x2f\xed\xce\x05\xcc\x74\x84\x14\x40\x1c\x34\x2a\xe8\x9e\x4a\x0a\xa0\x35\xc9\x49\x52\x78\x36\xf1\x4a\xf6\xc7\xb9\x72\xc9\xf5\x49\x5d\x1d\xd6\x6b\x9f\x57\x58\xcc\xdf\xcf\x6a\xe6\xa3\xe4\x05\x36\xf8\x37\x2e\x8f\xdf\x80\xaa\x02\x80\x38\xa4\x6d\x75\xb9\x5e\xff\xa7\xc1\x3a\x5d\x77\x26\x38\x88\xd2\xa6\x45\x7b\xad\x99\x70\x18\x32\xcd\x42\xdb\x57\x1d\x3c\x5a\xc5\x05\x73\xa1\x47\x4c\x40\x1c\x5c\x0a\x4f\xbf\xbb\x78\x60\x3e\xe8\x37\x92\xe9\x37\x66\xac\x52\x4c\xa8\x72\x6a\x5d\x4c\x1e\x10\xad\x70\x65\xea\x1a\xe0\xde\x92\xd5\xc3\x86\x6e\xc7\x00\x38\x78\x3f\xe4\x7a\xec\x6b\xa6\x61\x8e\x4f\xce\x99\x13\x0d\x5f\xae\xfe\x53\xcf\x2b\xd0\x13\xe5\xf9\x67\x58\xa8\x3d\x6f\x70\xea\x1c\x2b\x0e\x54\x8a\x05\xc4\xc1\xa5\x10\x70\xbe\xda\xdb\xef\x5b\x5d\x62\xec\x0d\xb3\xa0\x99\x23\x63\xff\x9b\x61\x4f\xce\xfd\xde\x43\x5d\xd3\xaa\xe9\xb5\x50\xdd\xe0\xb5\x47\x48\x01\xc4\x41\xa3\xc2\xe9\xbc\x32\xc8\x67\x9d\xec\x95\x79\xff\x74\xab\x32\x13\x8e\xfc\x32\xaa\x2a\x7e\x77\x39\x6d\xc5\xf4\x3d\x5d\x24\x4a\x7f\xa2\xfc\x13\xeb\xaa\x36\x74\x56\x7a\x82\x7c\x84\xef\x04\x71\xc8\x5e\x79\xa0\xe1\x41\xeb\xec\x73\x1e\x2c\xdd\xb0\x86\x6b\x09\x42\x75\x53\x61\x6e\xf8\x8a\x99\xb2\x28\x66\x7e\xb6\xd1\x21\x8d\xdd\x49\x50\xd5\x30\x10\x87\xec\x95\xaf\x1e\x4c\x48\x30\x13\xef\xf3\xfb\x91\x94\x3b\xad\x17\x94\x27\xcb\x62\x7c\x5b\xbe\x6c\xb6\x2c\xd9\x96\xb5\x28\xc1\xfb\xec\x1c\x23\x22\x32\x88\x43\x8e\x7c\xea\x0a\xe2\xef\x22\x73\xe5\xaa\x97\x97\x9d\x85\x28\x5b\x5f\xe3\x39\x49\x1b\xf7\x8a\x86\xe2\xf8\x36\x35\x14\xe1\x2f\xf0\xa8\x77\xd4\xbc\xac\xf9\xd7\x2b\x6f\xe3\x52\xb8\xd1\xed\xb7\xdf\x65\xde\xd7\xd2\x6c\x0f\xe3\xc1\x78\x42\xf9\xba\xa3\xa0\xa3\x60\xd8\x99\xaf\x35\x86\x65\x4d\xfb\x5f\x8f\xfa\x7b\xc7\xd6\xed\xe7\xa2\x80\x46\xdd\x5d\x85\x4c\x7c\xf2\x05\x3d\x3f\x9c\xbe\x12\x29\x45\x83\xbb\x93\xaf\x45\x8f\x2f\x38\x12\xc7\xfc\xb7\x79\x65\x50\xd3\xfe\xcd\x57\x46\xf2\xca\x11\x95\x9e\x3c\x9c\x7b\xbf\x59\xe9\xd5\xe5\x70\x3f\x07\xc6\xc8\xd2\x44\x44\x62\x63\x98\x9a\xde\x6f\x8c\x1b\x6e\xad\x7f\xce\x79\x26\xb7\x92\xc5\x91\xbd\x72\x90\x81\x52\x67\xea\xd7\x9c\xb4\x5f\x61\xad\x1c\xd4\xe4\xeb\xa1\x83\x39\x43\xcc\xa6\x44\xfc\x71\x1a\x25\x69\x11\xcc\x1b\x2a\xa1\x67\x72\xc0\x8b\xec\x95\xab\xf5\x15\xc3\xed\x4b\x6b\xdb\xb8\x0e\x8b\x5a\x42\xa8\x66\xf5\x75\x83\x76\xc7\x1f\x8e\xe8\x14\x59\x5b\xe5\x29\xfc\x4e\x73\x49\x39\x93\xd6\x22\x7b\xe5\xb8\xdc\x8a\x65\xc7\xf7\xb3\x75\xa4\x57\x8b\xaa\x5f\x0c\x11\xd5\x76\xa2\x53\x6c\xa7\x77\x3c\xaf\x4b\x0e\x0b\x4a\x5a\x0a\x31\xfc\xff\xa5\xd2\xfd\xff\xf7\xd6\x22\x7b\xe5\xc1\x79\x4b\x83\xc1\x1e\x6a\x12\x67\xeb\x7b\xfc\x02\x7e\x7a\x6a\xa8\x73\xf2\x35\xa4\x1a\x4c\xd7\x9a\xba\xc8\xbc\xf4\x18\xc3\x7f\x9f\x99\x57\x06\x89\xe8\xa4\x09\x50\x46\x29\xff\x98\x39\x07\xed\xe2\x25\x95\x17\xe9\xb7\x6f\x76\xe0\x09\x2c\x0b\xca\x58\x04\xf6\x8c\x97\x72\x33\x05\x58\x05\x1a\xc7\x21\x06\x7e\x10\x87\x54\xd1\xc9\xc8\xfe\x5b\x0f\x89\x91\x0e\xc6\x42\x00\x71\xcf\x9c\x92\xb4\x29\x71\xb2\x3c\x4e\xd4\xdd\x12\xe5\x68\x9f\xf4\xe8\x88\x0f\x35\x50\x45\x27\x00\x87\x94\x8f\xc6\xf0\x08\x9b\x3a\x48\x2b\xdb\xd9\xfe\x35\xaf\xb2\x87\xfd\xeb\xb0\xf7\x9f\xc3\xaf\xd4\x7d\x9f\x72\x2e\x98\x43\x5f\xc6\x0d\x87\x1c\x12\x88\x83\xf7\xc3\x90\x7e\x46\xa0\x52\xdb\x9b\xd8\xd8\x9b\x1c\xe4\x8b\xb2\x8c\x7f\xfe\xb2\x44\x2a\x49\xe9\xaf\x85\x54\xdf\x29\x24\xbb\xdb\x73\x01\xb2\x07\x20\xce\x57\x12\x85\xe0\x3f\xec\x81\xf2\x61\xb9\x92\x36\x43\xba\x5b\xa8\xd8\xda\xee\xf7\xb2\xb6\x0b\xb7\xff\x5c\x15\xcc\x76\x99\xba\x3e\x10\xb0\xdb\xbc\x67\x5b\x81\xf0\xca\x20\x0e\xca\x57\x3e\x95\x57\x06\x7d\xd7\x27\x29\xe1\x9d\x48\x9d\xa9\xec\xd1\xbd\x8b\xdc\x1c\xf4\x07\x06\xfc\x68\x31\x7b\x33\x2d\x15\x44\x59\x8d\xcd\xe5\xe2\xdc\xd7\xd6\x6b\x8c\xbc\x11\x3d\x00\xe2\x90\xde\x28\xcf\x32\xf2\x94\xe2\x98\x4c\x29\x46\x8d\xeb\x60\x11\x7c\x2a\xda\x3a\xb2\xc4\x5f\x85\x79\x9b\x7f\x5e\x8c\x9b\xf2\x4e\xea\xf4\x2c\x22\x2e\x88\x83\x2b\x41\x54\x64\x76\x35\x7b\xda\xce\xa7\x88\xe2\xa0\x06\xcb\xeb\xb6\x30\xef\x45\xe3\xae\x2e\x6d\x89\x96\xf7\xbf\xb7\x50\x50\xaf\xba\x32\xfd\x9f\x64\xd2\xff\x3b\x87\x54\xc2\x66\x00\x35\x6b\xb5\x86\x27\xf3\x23\x11\xfb\x05\x79\xbc\x7d\xa2\x3b\x4c\x56\x33\xa2\x5a\x76\x0d\x6b\x46\xe5\x8e\xf1\x2f\x55\xa0\xf7\xdc\x40\x1c\x5c\x09\x2f\x0a\x5a\x12\xb5\xd5\xf1\x72\x8b\xf3\x2c\xbe\x34\xe0\xf1\xdc\x78\xaf\xbf\xed\x88\x99\x97\xa4\x98\x3f\x1e\x52\xea\x78\x7e\x1c\x03\xb1\x14\x02\x71\x50\x66\xe2\xe9\xbc\x32\x68\xac\x3d\xf1\xb6\x25\xcd\xb9\x21\xfb\x80\xce\x7e\x6b\xea\x48\xa6\x70\x7f\x9a\x5f\x98\xe6\x5e\xca\x66\x6b\x89\x06\xd4\x36\xfa\xf5\x3a\x9c\x98\x50\xe1\x25\x10\x07\x97\x42\xc8\xb8\x34\x61\xf7\xce\xf9\xac\xf6\xc7\x7a\xc2\x09\x87\x41\xb2\x34\x7a\x5d\x4d\x15\x18\x37\x84\x77\xe6\x57\xde\xde\xf4\x7a\x03\xbd\xab\x03\xe2\xe0\x52\x88\x96\xc7\x0b\x79\xf8\xf9\xd6\x6d\xf4\x73\xf5\x52\xe9\x28\x85\x01\x43\x21\x72\x57\x5c\xd7\x38\x25\xf2\x3f\x7c\x49\x53\x22\xac\xbe\x08\xfd\xcb\x00\x1c\xbc\x1f\x66\xf2\x42\xb3\xe2\xb9\x69\x58\x3f\x9b\xdf\xfd\xd1\x4e\x39\x5a\x16\x4e\xdf\x58\xa6\xa0\xba\x11\xad\x91\xee\x24\x44\x73\x4f\xe4\x06\x22\x2e\x88\x83\x4b\x21\x83\xa7\xf6\xe5\xf0\x17\xf3\x6a\xfe\x4c\x7f\xde\xf3\x63\x81\xfc\xb9\x28\x5e\x2a\x32\xca\x79\x11\x4b\x87\xfc\x06\x91\x7f\x1f\x08\x20\xa4\x00\xe2\xa0\xcc\xc4\xd3\x79\x65\xd0\xfc\x77\x92\x14\x16\xf9\xaa\xd1\xf4\x32\xe8\x6d\xdf\xad\xa4\x1e\x91\x08\x1d\xf8\x76\x7c\xc1\xfa\x35\xc1\xd4\x8d\x77\xfb\xd6\x52\x29\x1a\x95\x29\x54\xf4\x17\xc4\xc1\xa5\x80\xfd\xdd\xe2\xe1\xd7\x75\x12\x05\xcf\x9d\x17\x11\xc5\xbb\x1e\xf1\x5f\x54\x0c\x51\x7e\xbd\xfc\x79\xdc\x4a\xb7\x57\x5d\x1b\xe4\xfb\x1a\x11\x17\xc4\x21\xcd\x0f\x8c\x87\x6e\x6f\xb2\x6c\xef\x95\xf6\x2c\xb5\x6d\x6c\xa2\x8e\x63\x67\x4a\x17\x9d\xd7\x98\x6a\x7f\xd2\xc1\x17\x58\xb3\x83\x03\x25\xbf\x82\x38\xa4\xeb\xf8\x6d\x24\xfb\x9a\xb3\x95\x04\x47\xd8\xdb\xe9\x4f\x9f\xb5\xc6\xfc\xe6\x89\xfb\x6e\xf2\x54\x40\x26\x39\xa3\x14\x0d\xe7\xe9\x27\xc8\x83\x83\x38\xb8\x14\x2a\x16\x26\xad\xa2\x49\xca\x99\x3f\x09\xab\x2e\x75\x7b\xcc\xdc\x4e\xca\xdc\xaf\x69\x35\x76\x71\x46\x6b\xc8\x9f\x88\xbc\xa2\xe4\x81\x90\x02\x88\x83\x46\x85\xd3\x79\x65\xd0\x9a\xe4\x24\x29\x5c\xff\x44\xd0\xaa\xc7\x77\x84\x29\x8c\xba\x6e\x3f\xad\x45\x91\xd0\x9d\xb7\xa8\xf9\xb3\xaa\xea\xc5\x9b\x64\xfb\xdf\x4a\xed\x4b\x50\x72\x0a\x88\x83\x4b\x61\xdc\x7d\x60\xfa\xd2\xc8\x95\x9d\x3d\xb2\x68\xa1\x81\x6e\x11\x89\x89\x07\xe2\x57\xf3\x25\xcc\x9b\x6d\xcb\x23\x5c\xdf\xe5\x1c\x41\x25\xc6\x41\x1c\xd2\x75\xfc\x34\x02\xb9\x1f\x79\x2a\xa9\x3b\x2d\x9e\xd1\xaf\x6e\xdf\xcf\xc5\xdd\x11\x9f\x22\xba\x16\x4f\x7f\x45\x2c\x5e\xce\x2b\x7d\xdc\x12\xba\x8e\x0f\xe0\xe0\xfd\x30\x98\x27\x2d\xea\xf6\x69\xb1\xae\x64\x56\xc8\x81\x0b\x4d\xfd\x3e\xf3\xb9\xad\xd1\x88\x39\xc5\x96\x5b\xc7\xd2\x6d\x45\x84\xff\x1f\xe6\xfe\x3a\xaa\xea\xe7\xfb\xff\x40\x69\x49\x29\x51\x01\xe9\x6e\xe9\xee\x06\x01\x29\x03\x14\x41\xa5\x04\x49\x01\xe9\x16\xa4\x25\x05\x04\xa4\x45\xe9\x0e\x91\x4e\x29\x41\x44\xa5\x95\x2e\xa5\x43\xc0\xbb\xbe\xbf\xb5\xce\xeb\xfa\x7e\x1d\xee\x1a\xee\x5a\xfc\xf1\xf9\xff\xb1\xf6\x61\x86\xe7\x99\x3d\xcf\x33\xb3\xf7\x1c\x42\xef\xeb\x83\x38\xb8\x14\x24\x31\xde\x5a\x0c\x37\xc9\xf0\x4b\x5c\x40\xd7\x61\xf1\x30\xfa\xc3\xe6\x6a\x92\x1a\xbd\x7a\xc3\xfe\xf7\xb3\xc6\xf2\x23\x36\xfd\x0e\x84\x14\x40\x1c\xb4\x2a\x9c\xce\x2b\x83\x7c\xd6\xc9\x5e\x19\x6b\xe4\x4e\x7b\xb2\x79\x95\xe6\x37\x56\x12\xf7\x6f\x86\xd9\x02\xb8\xfa\x9f\xef\x97\x5f\xc5\xfd\xe8\x94\xc0\xff\xa5\xb9\xed\xbc\x36\xc2\x77\x82\x38\x64\xaf\xfc\xf7\xdc\xd5\x35\xbe\x5d\x4f\x0a\x4e\xbf\xab\xf1\x1f\xd4\xb0\x32\x6e\x7b\x30\xe5\xd8\x33\x13\x08\x68\x68\xba\x5b\xf1\xa3\xbe\x60\x42\x44\x06\x71\xc8\x8e\xb6\x3a\x78\xce\xf5\xc2\x6d\xfc\xdc\xf5\x45\x15\x11\xe1\xda\x44\xee\x3f\x2c\x4b\x32\x8f\x34\xc8\xb2\x3c\xcd\xfa\x93\x5c\x9d\xe4\xa7\x11\x91\x41\x9c\xbf\xc2\xff\xcd\xe4\x7f\x7e\xfc\x6c\x3f\x20\xdf\x7e\x38\x42\x72\xfc\xd0\x34\x50\x41\x4c\xe3\x35\x5a\xad\x9e\x03\xdd\x0d\xfc\xa6\xf0\x10\x51\x2d\x5f\xd7\x3b\xd1\x90\x57\x96\x5d\x20\xea\x45\x93\x0e\xd8\xc6\x15\x19\x4f\xf0\x56\xfc\x6c\xf3\xde\xb4\x42\xb9\xaf\x45\x76\x9e\xfb\xed\x73\xe5\x08\x15\x99\xb4\x7f\x3d\xc8\xb3\xc1\xb1\x17\xdf\xfb\x14\xad\x9c\x43\xc7\x31\xd6\x8d\xfc\x02\xe5\xb4\xf3\x46\xfb\xac\x74\x49\x2e\x26\xa6\x91\xb6\xaf\x8b\xfc\xfb\x14\xf2\xdb\xf4\x42\x2a\x8b\x57\xe1\xfa\xfd\x81\xf9\x6e\x38\xa9\x8a\xc4\x94\x91\x1f\x7f\x12\xce\x6b\x6a\x8e\xba\xbc\x2b\x29\xa8\x32\x25\xff\x5f\xf3\xca\xa0\xa1\xfd\x5b\xaf\xac\x02\xf7\x53\x1f\x6b\x24\x03\x57\xe7\x1f\x74\xd4\x14\x87\x4d\x11\x74\xd2\x86\xb4\xf3\xc6\x27\xf4\xf2\xcc\xaf\xb7\x1d\xd7\xb9\x7e\x9c\xfc\xcd\x7d\x26\x47\x9e\xc8\x5e\xd9\x7b\x4e\x71\x28\xd5\x52\x01\xcf\x23\xcb\xc6\x36\x20\x8a\xc1\x76\xf2\xd9\x81\xc9\xcb\x2b\x49\x71\x1d\x06\xe8\x59\x55\xc7\xfa\xbd\x67\x72\xc0\x2b\x8d\xf4\xb1\x6e\xf4\xee\x78\x35\xcb\xab\xd7\x3d\x9d\x59\x9a\xbb\x3e\xc7\x67\x87\x78\xfb\xb9\xb4\xf0\x1c\xa8\x0f\x29\xfb\x92\x1f\x06\x8e\x78\x9f\xc9\x68\x91\xbd\x72\xbb\x41\xe0\xec\x3d\xd1\xf8\x37\xa9\x05\x52\xaf\x17\xde\x3a\x87\xbb\xa7\x96\x3c\x63\xf0\x0e\x6e\x71\x54\x4b\x6f\xba\x7e\xdd\xed\x6c\xda\x6f\x3b\x23\x7d\x6c\x8c\x97\x61\xec\xf3\x8b\x31\x13\x3e\x21\x99\x37\x33\x5f\xd5\x4b\x77\x28\xce\x9f\xd3\x73\xf5\xe1\xd3\x08\xff\x26\x1f\x38\x37\x72\xe3\xcc\xbc\x32\x48\x44\x27\x25\x40\xa6\x9b\xbd\x17\x93\xf4\x0b\x6e\xb0\x07\x86\x2e\xe5\x98\x3a\x39\x89\xc7\x8c\xa7\xac\x37\x33\x76\x74\xcb\x3b\xb9\x45\xd0\xd4\x43\xcf\xad\x80\x38\x78\x02\x2c\x16\xd5\x78\xa2\x32\xaf\xa9\x43\xbe\xa4\x38\xe1\x80\x27\x2a\x7f\xae\x9b\xd6\x1a\xdb\x65\x7e\x70\x4f\xed\x92\x50\x6c\x6c\xe2\x79\x44\x5c\x10\x07\x4f\x80\xcf\x8e\x76\x94\xb4\xd6\xfc\x04\x89\xa6\xe5\x3a\x16\x58\x55\xdd\xb4\x04\xad\x5e\x08\xd9\xf1\xd3\x65\x10\x39\x87\x7d\x5b\xb8\x03\xed\xdd\x40\x9c\xbf\x1c\xc6\x7f\xfe\xde\x8a\x3c\xdc\x6b\xea\x4a\x1f\x3f\xf2\x0b\xa8\x6b\xea\x59\x1d\x26\x5e\xcc\x2d\xec\xde\x4b\xba\x61\x35\x7b\xa7\x81\x9d\x55\x2c\x1a\x2a\xd1\x04\x71\xf0\x46\x20\x97\xa9\xfe\x3e\xe7\xbc\xe6\xa3\x7a\x2e\xab\xfe\xab\x85\x31\x63\xa3\x1c\xed\xbd\x25\x51\xba\x4b\x5a\xf2\xb7\x1a\x3c\x51\x79\xa6\x09\x11\x5e\x19\xc4\x41\xf5\xca\x2a\xa7\xd9\x0a\x81\xbe\xd7\x27\x29\x81\x61\x96\xee\xfd\x85\xab\x24\xd3\xf8\x35\x9a\xc1\xed\xaa\xd7\x7f\x3c\xbc\x64\x7a\xf7\x6a\x61\xdf\x77\xfa\x23\xc2\x58\x09\xf2\xfb\x4e\xd0\xc9\x3a\x80\x83\x2b\xc1\x16\x73\xb1\x0c\x6f\x95\xb8\xd6\x92\x67\x89\xab\x21\x9b\x32\x82\x2f\x9b\xab\x5e\xf6\x1b\xe6\x36\xaf\xf5\xa7\x50\x94\x3a\xa6\xeb\x88\xb8\x20\x0e\xae\x84\x48\x1e\xb9\x4b\xf2\x34\x5b\xea\x65\xe3\xaf\x2b\x2e\x15\x0b\x17\x85\x8e\x0b\x96\x76\x7a\x64\x2d\xc4\xb9\xab\x31\xae\x09\xe4\x5e\x44\xc4\x05\x71\x70\x25\xcc\xaa\x92\xa0\x99\x39\xb2\xdf\x0e\xf0\xe8\xe1\x5a\xcf\x18\x78\x3b\x46\xfc\x49\xd7\x36\xbf\x3e\xda\x25\x84\x37\x38\x2f\x68\x19\xda\x62\x81\x38\xb8\x12\x3a\x9b\xaf\x66\x25\xe4\x2f\xb9\x60\x3c\x52\x65\x0f\xf5\x33\x92\x68\xba\x18\x15\x7c\x34\xd4\xf9\x29\xee\x7a\xb3\xf8\x37\x69\xe5\x08\xa8\xa1\x13\x80\x83\x2a\x13\x4f\xe7\x95\x41\x6b\xed\x49\x52\xe8\xbe\xb6\x9e\xea\xac\x95\x2d\xaf\xfe\x18\xbf\x53\xf7\x9a\xc0\xa2\xfb\x42\x61\x12\x65\x60\x8c\x7a\x52\x9c\xd6\x97\xe1\x48\x4a\x7c\xc4\x14\x80\x38\xb8\x14\xb0\xae\xd1\x6e\xb7\x0d\xec\xa4\x92\xee\x24\xf7\x2f\x0c\xdb\xf4\xa6\x53\xf1\xeb\x14\xe2\x1a\x6d\x13\x67\x18\xa6\xa2\x7f\x77\x83\xba\xed\x80\x38\xb8\x14\xcc\x42\x3b\x6f\x46\xb9\x75\xea\x8f\x0d\x29\xbd\x7e\xec\x5d\xec\xcd\x3d\x3c\x33\x95\x80\xe2\x88\xcb\x4e\x48\xad\x94\x65\xb9\x00\x19\x19\x10\x07\x97\x42\x40\xca\x9f\x1e\xf1\xe0\x58\x8e\xfb\x09\x44\xcd\xc6\x3f\x68\x0e\x89\x35\x5d\x5f\xd5\x2d\xdd\x15\x1c\x12\xfc\xf6\x39\x34\xba\xbc\x0e\x6a\x4b\x07\xe0\xe0\x52\x68\x95\x57\x69\x1c\xae\xc2\xbb\x87\xf2\x49\x89\x6e\x38\xcd\x9b\x9e\x72\x62\x33\x08\x35\xbb\x40\xb6\x1e\x9b\x3c\x11\xcb\x6c\x0d\x7a\x83\x16\xc4\x41\x95\x89\xd2\xa7\x92\x02\x28\xff\x9d\x24\x85\xdd\x6f\x3e\xe1\xa4\x29\xfe\xfe\x6f\xf7\x3c\x08\xf1\x68\xa5\x94\x5f\x3f\xb8\xe7\x9d\x98\x75\x8f\x62\xf3\xd9\x44\x96\xc8\xd4\xa4\x28\xd4\x57\x1a\xc0\x21\xad\x0a\x83\x54\x28\x77\x84\x7e\x7c\x61\xcd\x8d\xd0\xcc\xe5\xa4\x66\x6e\x41\xa3\xd1\x2a\x78\xcc\x90\xcf\x18\x7d\x54\xd0\xef\xbb\x0c\xad\xe3\x20\x0e\x2e\x05\x9c\xc9\xb1\x34\xbe\xe0\x30\x81\x8e\x71\xea\xc7\x9c\x6f\xc8\x45\x3f\x97\x96\x34\x48\x28\xf1\x5a\xec\x73\xac\x6e\x16\x13\xa2\xbd\x43\xc4\x05\x71\x70\x29\xd0\x25\xfe\x78\x99\x38\x2e\x4a\x23\xaf\xc1\xe8\x40\xef\x6b\x76\xd9\x0e\x6f\xe5\x69\xe7\x7a\x4a\x90\xf8\x53\x99\x41\xef\xd0\x1f\xd0\x05\x64\x10\x07\x97\x02\x53\xe2\x74\xf9\xc0\x43\x65\xb1\xca\x70\x8f\x0b\x3a\xd6\xe5\xad\x86\x0b\x18\xec\x1c\x33\x14\x61\x72\x59\x6c\xe2\xfc\x77\xc6\xa6\x11\x52\x00\x71\xd0\xaa\x70\x3a\xaf\x0c\xda\x93\x9c\x24\x85\xb4\x25\xaa\x0f\x3a\x49\xf6\x79\x76\x0a\xc5\x46\x82\x4c\x41\x79\xb7\x6f\x2e\x89\x35\xdc\x88\xcb\x7c\x41\x3f\x73\xb9\xac\x78\x38\x0d\x31\x05\x20\x0e\x2e\x05\xb3\xc0\x1f\x51\x8e\xc2\x0a\xab\x99\x71\xe6\x2f\xb9\x8f\xb5\x33\xc7\x18\x03\xed\x24\x2f\x47\xd9\x65\x8b\xaa\xb3\xf0\x36\xe4\x8d\x42\xdf\x5e\x00\x07\x97\x82\x34\x0d\x65\x1d\x6d\x75\x98\x35\xda\xcf\x47\x35\xbe\xfe\xbb\xbe\xf2\x24\x98\x97\x46\xd6\x45\xf1\x92\x56\x42\x74\xed\x12\x5d\xd9\x10\x71\x41\x1c\x5c\x0a\xcd\xcd\x92\x4f\xc2\x1f\x9a\x69\x45\xc8\xd8\x3e\xb5\x34\x34\x6f\xdd\xfd\xe9\xfa\x32\x7e\xe0\xf2\xd8\xc1\x63\x72\x19\x46\xae\x40\x0a\x44\x5c\x10\x07\x97\x02\xe6\x93\xe2\x1d\x57\xd1\xcb\x7e\x44\x7d\x0a\x7f\x3f\x44\xe0\x0d\x63\x09\x52\x4c\x95\xc9\x56\xad\x6f\xae\xb1\x5f\x0c\x13\xc5\x8d\x47\x48\x01\xc4\x41\xab\x82\xf3\xe9\x7a\x7b\x01\x7c\xd6\xc9\x5e\xb9\xb7\xc5\x9e\xf8\x48\xe9\x09\x6f\x84\x79\x9f\xa2\x48\x15\x7e\xd5\x1b\xfe\xd2\xc4\xfe\xe2\x62\xe6\x59\xf6\x8e\x95\xe7\x3f\x7b\xe4\x11\xbe\x13\xc4\x21\x7b\x65\xa3\xcf\x82\x91\xe1\x93\xb7\x5e\x6e\xdd\xd7\xe2\x8e\x25\xd3\xd6\x69\x28\xb1\x9e\x27\xce\x27\xbd\xc3\x13\x82\xa3\x84\xfe\xb3\x0d\x0b\x11\x19\xc4\x21\x7b\xe5\x2b\xb3\xf8\xcb\x3a\xe6\x9d\x7b\xaf\xcd\x12\x05\x5f\x7c\xf7\x7d\xbf\x3a\x8e\xb3\x7f\xed\x92\xc6\xdd\xb8\x1f\xaf\x09\x5e\xa2\x6f\xeb\x22\x22\x83\x38\x7f\x05\x14\x94\xff\xfe\xeb\x06\xb6\x0f\x9b\xb7\xdf\xca\x4a\x55\x30\xcd\x4a\x10\xe2\x6b\x4f\x53\x14\xca\x08\xce\xba\x14\x12\xe7\x4b\x92\xb1\x1c\x7d\xa8\xb9\x02\x79\x65\xc1\x2c\xa2\x89\x3f\xd7\x32\xfa\xb3\x69\xfe\x0c\x5b\xc7\x74\x30\xf6\x92\xdc\x1a\x74\xc8\x18\xe5\x63\xd3\xdd\x3b\xac\xae\x17\x79\xf9\xaf\x57\x56\x63\x8b\x4d\xda\x8c\x99\x39\x8c\x72\x92\xa2\x7e\x19\x60\x5b\x11\xff\x43\xfa\x88\x58\xd3\x38\xbd\xd7\xdc\x08\x27\xec\x27\x7a\xc6\xbf\x7b\x37\xf1\x7d\x74\x55\xc2\xdf\x75\xcd\x43\xc2\xf6\xdf\x9f\x99\x8f\x0b\xbb\x4d\x67\x91\xa0\x84\x24\x45\x92\x16\x4f\xba\xdb\x50\x9b\xff\xaf\x79\x65\xd0\xd0\xfe\xad\x57\x46\xf2\xca\xe1\xca\x41\xed\x98\x97\x1e\x4c\x3c\x23\x78\x4b\x65\x58\xf0\x94\xca\x9e\xcb\xfc\x61\xe3\xea\x83\x55\x0b\x8c\x87\xc7\x3f\xef\x66\x14\x9d\xc9\x91\x27\xb2\x57\x9e\x89\x2a\x33\xf3\x5a\x95\xeb\xc5\x49\x23\xb1\x7b\xb7\x85\xdd\x97\x5b\x76\x61\x39\x94\x9f\x61\xde\x74\x3b\x1a\xef\x52\x28\xca\x99\x74\xbb\x92\x41\xf6\xca\xb7\x95\x62\xdb\x12\xfb\x75\xb6\x29\xb5\x0d\x2c\xe8\xc4\x28\x77\xf8\x44\x9f\x56\x5c\x23\xfd\xf9\x2a\x84\xb5\x56\xa0\x1c\x33\xa3\xf3\x4c\x46\x8b\xec\x95\x9b\xe4\x99\x79\x7f\xaf\x7d\x8e\x0b\xff\x99\xc2\xf6\xa4\xce\x3b\xdb\x9c\x57\x9d\x8c\xea\x9b\xcb\x0b\xb1\x55\xa5\x66\x12\x43\xcd\xda\x33\x19\x2d\xb2\x57\x16\xb2\xd1\x2c\xdb\xb8\xd0\x94\x41\x3c\xb9\x43\xf5\xd7\x55\xf1\xba\xee\xf5\x8b\xca\xf6\xc1\x1e\x87\x12\x59\x26\x2e\x78\x1c\x5b\x8e\x67\xe6\x95\x41\x22\x3a\x29\x01\xe2\x87\xdc\xc3\x33\x5f\x6b\xef\xa0\x6a\x22\xd1\x7a\xda\xfd\xf9\x81\xb5\x0c\x31\xc9\xe0\xe8\x78\xf1\x36\x4d\xe6\xbe\xf7\x04\xd1\x0d\xc4\xc2\x0f\xe2\xe0\x09\xf0\x6b\xac\x5e\x24\x36\x0e\xb6\xc3\x03\x9d\x7e\xdb\x45\x1e\x7d\xe1\xdf\xa3\x0f\x31\x0c\x99\x0d\x07\xf9\x14\x29\x1f\x90\x97\x2d\x6f\x21\xe2\x82\x38\x78\x02\x7c\xe8\x84\xe6\x42\x93\x33\x98\xcd\x38\x45\xda\x92\xff\x36\xc1\x4a\xbc\x5a\x49\x6a\xe7\x42\xd6\xe4\xb8\xf0\xef\xb9\x1f\xc6\xde\xd0\x5d\x38\x10\x07\x4f\x80\x16\x7d\x14\x4e\xd2\x4d\xd8\x44\xd1\x92\x3f\xa6\x1b\xd6\xc7\x0c\xad\x1a\x23\x3a\x08\x45\xc6\xbc\x03\x16\x6d\x6d\x8a\x24\x0a\xf1\xa0\x06\x23\x00\xee\xff\x12\xd5\x7f\x4a\x29\x1d\xe4\x73\x70\x15\xea\x89\x0d\xfe\x0e\x24\xfb\x72\x92\xdc\xdc\xd1\x74\x53\xb8\xef\xca\x71\xfd\x72\xc7\xb3\xa7\xa6\x6f\x15\x6b\x11\x5e\x19\xc4\x41\xf5\xca\xa7\xf2\xca\xa0\xef\xf5\x49\x4a\x10\x59\x2f\xfa\x18\xbd\xca\xd8\x9d\x1d\xf7\x33\xe8\x31\x46\x09\x61\x05\x85\x09\x0d\xfe\x7b\x2d\x49\x89\xce\xc0\x8b\x75\x2d\x76\x50\x5f\x69\x10\x07\x57\x82\x84\x74\xd5\xaa\xf4\x53\xac\xe2\x3b\xcb\x37\xab\x33\x63\x46\x5c\x1d\x76\x99\xbe\x70\x0b\x15\x57\x6f\xeb\xb4\x91\x55\xdf\x99\xbc\x8c\x88\x0b\xe2\xe0\x4a\xb8\x30\xb0\x5e\xd8\xce\x86\x21\xad\xf4\x21\xf5\xbe\xf6\x51\xcf\x35\x81\xd4\xbf\x0d\x5c\x2b\x7a\x1a\x0a\xa1\x23\x93\xb8\xe4\x8f\x17\x11\x71\x41\x1c\x5c\x09\xd2\x99\x1e\x5f\x87\x39\x6c\xc8\xef\xef\x49\x4b\xba\x76\x7f\xff\x2c\x3c\xcd\xc6\x81\x2e\x78\xf8\xc8\x4e\x35\x48\x80\xd8\x76\x06\x7a\x96\x13\xc4\xc1\x95\x60\x29\x60\x52\x3c\xdb\xf6\x46\x23\xf5\x22\x21\x4f\xea\x25\xd3\xc9\x45\x22\x2c\xa3\x57\x9c\xa8\xb7\x62\xa6\x49\x7c\xb4\x92\x3e\xde\x46\x6c\x85\x40\x1c\x54\x99\x78\x3a\xaf\x0c\x5a\x6b\x4f\xbc\x62\xf0\xee\x35\xfb\x9b\xc5\x67\x6c\x93\xee\xce\xc9\xda\x55\xaf\x6f\x1b\xb2\xa0\xbf\x28\x0d\xd3\xa0\x96\xc2\xca\x5b\xb1\x99\xd8\x83\x0c\x12\x88\x83\x4b\x21\xba\x59\xa5\x73\xa6\x8e\x7f\x54\x4c\xdc\x87\xcd\xb1\xc4\x93\x68\xa7\x59\xe0\x7b\x38\x6d\x67\x36\xef\x66\xad\x4b\xa1\xef\x01\x54\x98\x01\xe2\x90\x1e\x0a\xc2\xca\x2f\xc4\x31\x1a\x54\x30\xdd\x2d\xf7\xf9\xfa\xfd\x7b\x81\xdf\xce\xf9\x59\xa1\xb6\x09\x6d\x99\x85\xbe\xe1\x9f\xae\x16\xd0\xc3\x46\x20\x0e\x2e\x05\x31\x5d\xbf\x63\x26\xaa\x89\x07\xf7\xa6\x1f\x1b\xde\x6e\x96\xc9\xcb\x88\x89\x15\xd2\x39\x6e\xc0\x40\x2f\x4d\xa8\xa2\x9e\x28\x83\x2a\x29\x41\x1c\x5c\x0a\xd8\x11\x86\xa8\xf6\x22\xa9\x52\xad\xde\x51\xe3\x8c\x51\x7f\x76\x6e\xfd\x98\xbd\x31\x79\xe5\x25\x0e\xa6\xd4\xdb\x7e\x01\xb2\xf0\x5b\x08\x29\x80\x38\xa8\x32\xf1\x74\x5e\x19\x94\xff\x4e\x92\xc2\xad\x0c\xeb\x59\x17\x5b\x12\x97\x97\x25\x18\x6e\x61\xf5\x1d\x02\x1f\x0a\x58\x29\x9f\x9c\x2b\x91\x0d\x92\xda\x69\x0d\x21\x48\x82\x1e\xbf\x05\x71\x70\x29\xdc\x73\x1e\xc2\xb6\x72\x41\xdf\x63\xa5\x50\x88\xec\x8c\x63\xee\x8e\x7b\x14\x53\x68\xfe\xca\x31\xe2\x16\x45\xba\xed\x3d\x27\x62\x68\xb5\x01\x71\x70\x29\xc8\xfb\x95\x51\x63\xd0\xea\xc8\x9d\xcf\xd5\x7f\x14\x13\xfe\xf9\x33\x93\x39\x9e\xa8\xb3\x70\xc6\x48\x54\x12\x5b\xad\x6c\xbb\xd6\x07\x44\x5c\x10\x07\x97\x02\x21\x0a\x8e\x25\xf6\x1f\xb5\xba\x0f\xd2\x11\x99\x9c\x21\x9a\x57\x35\xf0\x87\x13\xd2\x57\x36\xed\x4a\x82\x39\x64\x8d\x6e\xfe\x85\x2e\xf4\x82\x38\xb8\x14\xa6\x8c\xf7\xbc\x0a\x02\xfd\xce\x8d\x51\x88\x37\xa9\x7c\x12\x7f\x4d\x78\x7b\x7e\x86\x6a\x4b\xb1\x34\x93\xea\xdb\x90\xd3\x45\x45\x7f\x84\x14\x40\x1c\xb4\x2a\x9c\xce\x2b\x83\xf6\x24\x27\x49\xc1\x6f\x6b\x56\x46\xb5\x3e\x2b\x79\xd5\x27\xd9\xc3\x4c\x2a\xe4\x39\x9a\xf3\xe3\x89\x9a\xa5\x94\xb4\x73\x8c\x1b\x6a\x59\xd6\x12\x50\xe3\x09\x10\x87\xe4\x95\x6d\xf5\x7f\x5f\xf5\xa4\xd5\xea\x72\x15\xac\xf4\x38\x18\x7d\x34\x47\x35\x72\x63\x8f\x39\x87\xd9\xe5\x0d\xb6\xba\x95\x74\xb2\x3b\xe4\x95\x01\x1c\x5c\x0a\xa3\xe4\x9b\x47\x92\x54\x97\xde\xde\xc2\x88\x13\x1a\xe5\x70\xd7\xff\x6c\xe1\xec\xb6\xe1\xe2\x1f\x26\x67\x48\x74\x38\x82\x89\x05\x75\xf3\x07\x71\x70\x29\xfc\x92\x30\xa6\x3c\xb7\x6a\xa9\x98\x59\x12\x47\xc6\x82\xde\x17\x41\x1b\x52\x26\x29\x50\x35\xd9\xaf\x73\x3d\xcf\x7b\x00\x67\xff\xff\xdb\xb7\x1b\xc0\xc1\xa5\x60\xd5\x3b\xc3\x11\xd2\x63\x24\xef\x88\xaa\x75\xf4\xa9\x34\x59\x07\x75\x87\x60\x72\x92\xe6\x76\xa4\x30\x8a\x63\xb4\x70\xcc\x23\x19\x84\x14\x40\x1c\xb4\x2a\x9c\xce\x2b\x83\x7c\xd6\xc9\x5e\xd9\x2b\xf4\x8e\x38\x2b\x65\x91\x70\xdc\x02\x4f\xdd\xa4\xa9\xca\xeb\xcb\x2f\x32\xfe\x30\xd8\x50\xf6\x36\xd0\x57\xde\xa6\x16\xac\x6e\x42\xf8\x4e\x10\x87\xec\x95\x7b\x8a\xfa\xee\x9d\xc7\x64\x8d\xf4\xae\xcb\x64\x33\x74\x1f\x09\x49\x8c\xfd\x45\xb9\x24\x90\x24\xfb\xe4\xdd\xdc\x8d\x42\xb7\x56\xe8\xf4\x17\xc4\x21\x7b\xe5\x23\x61\xd9\x71\x91\x4c\xc6\x8b\xfa\x7b\x9f\x8f\x8d\x08\x38\xfc\x66\x83\x99\x74\x5d\xd0\x35\xf6\x85\xa3\x42\xeb\x08\xee\x35\x24\x21\x22\x83\xb8\xff\xf3\xca\xff\xfd\x6a\x9c\xfa\x7d\x65\x91\x89\xbe\xfa\x14\x92\xa6\x07\xd5\x18\x3a\x1d\x4a\xdc\x52\xb2\xbc\xd3\x9d\xcf\xbd\xe7\x2e\x7c\x61\x6d\xbf\xd0\x99\xeb\x9c\x79\xf9\x5f\xaf\x3c\x86\x42\x41\xf6\x6c\x97\xc3\x89\x67\x49\x4e\x3e\x5f\x0d\xef\x73\xda\x1b\xf3\xc0\x2f\x2c\xf9\xfd\x82\x85\x59\xc7\x64\x82\x1c\x04\xff\xa0\x8e\x69\x78\x5e\xa2\x5f\xc3\x07\x56\x6c\xa5\x92\x68\x7a\x28\xa4\xbf\xea\xcb\xab\x6e\x11\xc9\xd9\x73\x71\x5c\xfa\x93\x7d\x6c\x62\xff\xbf\xe6\x95\x41\x43\xfb\xb7\x5e\x19\xc9\x2b\x27\xbd\x23\xee\xc9\xc1\xd0\xdb\xdc\xb6\x88\xb0\x73\xf9\xf8\xcb\x33\x1c\x2d\x4b\x68\x86\xf8\x1e\xf7\xb4\x0e\x61\xeb\x7d\x23\x61\xc5\x33\x39\xf2\x14\x40\x6e\x3b\x15\xe2\xd7\xd9\x31\xaa\xec\x6c\xe2\x80\x85\xf6\x92\xfb\x7c\x3e\xf3\x5c\x03\xc7\x15\x5e\x7b\xf4\xbf\x5a\x4e\xc2\xaf\xe2\xb2\xcf\xa4\xa5\x98\x0f\xb2\x57\xde\x22\x63\x0e\x61\x6d\xc9\x24\xdd\xd5\xd9\x5d\xb0\x53\x24\x5c\x97\x3a\x97\xbc\x46\x71\xe4\x4c\xb9\xf3\xf5\xf9\xbb\xf1\x75\x09\xdc\x33\x19\xad\x21\xd2\xc7\x2e\x31\x79\xf1\x60\x33\x2b\xac\x7b\xb5\xc6\x51\xba\x3e\xbd\xec\xea\xc0\xb6\x58\x7d\x95\x58\x22\x73\xd8\xd1\xdd\x8a\xfe\xe6\xaf\x33\x39\x45\xf7\x41\xf6\xca\xda\x13\x8a\x33\x5d\xfe\x6d\x3e\x65\xe8\x8f\x36\x72\x85\x4a\x6e\xcf\xb1\x50\x7d\xef\xf9\xc0\x2d\xf8\xe0\x88\xa0\x07\xef\x89\x70\xea\x99\x79\x65\x90\x88\x4e\x4a\x80\xd4\x5c\x12\x4d\xd1\x63\x69\x8a\xd7\x27\x83\x95\xcc\x84\x5f\x4c\x38\x90\x6c\x5c\x0e\xd9\xbf\x4b\xd6\x91\x52\xd0\xb4\xf4\xb4\x08\x4a\x28\x20\x0e\xa9\xe5\xad\xa5\x62\xf3\x7d\xd6\xa1\xaf\x81\x18\xa9\x8f\xa8\xee\x0f\xea\x14\x27\x69\xe4\x46\x3d\xb5\xa7\x67\x1b\x36\x60\xa7\x4b\xe1\xc7\x81\xda\xe2\x00\x38\x78\x02\x94\xd1\x11\x76\x4f\xf9\x32\x66\xe4\xda\xd9\x96\x89\xe9\xde\xee\xfe\xb0\x02\x77\x4c\x40\x42\xbf\x80\x87\x70\x37\xf7\xb5\xf9\x26\x74\xe4\x05\xe2\xe0\x09\xf0\xdd\x17\xc7\x16\x4f\x82\x05\xcd\x4f\xe4\x4a\x32\xf3\x9f\xf2\xe4\xeb\x9a\xd3\x0c\xd9\x9e\xed\xdf\x28\x15\x6b\xdd\x10\x7b\xc7\x2f\x0e\xdd\xdd\x03\x70\xf0\x79\xa0\x5e\xcb\xdd\x6d\x55\xdb\x8f\x55\x29\x71\x15\x8d\x44\xe7\xe1\x29\x2d\xdf\x97\x4a\x37\x68\x27\x73\x0a\x2b\xd6\xab\x5c\xa0\x0d\x42\x78\x65\x10\x07\xd5\x2b\x9f\xca\x2b\x83\xbe\xd7\x27\xbe\xaf\x8c\xd3\x4c\xa3\xcd\x71\xaf\x51\x6b\x70\x6e\xe0\x53\xb0\xa3\x53\xdc\xc8\xd3\x0e\xc2\xc6\x0b\xf6\xbc\x9c\xcb\x78\x35\x59\xc4\xd0\x55\x38\x10\x07\x9f\x01\xd6\x1d\x3c\xf1\xc8\x7c\x7d\xf9\xa9\x80\xcf\x56\x25\xdb\x52\x17\xb9\x19\xd0\x92\xe3\x95\x25\x56\xdb\xef\x05\x0d\xd4\xd9\x31\x86\x40\xdd\xe3\x00\x1c\x5c\x09\x26\x1d\x56\x35\xf9\xa8\xa6\xd7\x3e\x72\xa9\x2b\x97\x54\x7f\x66\xee\x35\x98\x89\x74\x4c\x2f\xba\x91\x31\xdb\xdd\xcf\x15\x97\xfc\x17\x11\x17\xc4\xc1\x95\xa0\x79\x81\x51\xf4\xea\x8f\x8e\xba\x6c\xbc\x45\x95\xda\x70\xd6\x76\x65\xa6\x55\xb1\x07\x6f\x4d\xae\xe7\xe9\xa0\xbe\x2a\x57\x97\xfe\x09\xf5\x0c\x03\x70\xf0\x79\xf8\x8d\x8d\xdf\xdf\x28\x5c\x8d\x13\x60\x18\x38\x77\xd4\xaf\x3a\x1f\xd2\x50\x86\x1b\x93\x97\x26\x63\x93\x69\xed\x49\xbe\x54\x3a\x88\xd8\x0a\x81\x38\xa8\x32\x51\xe0\x54\xbb\x62\xd0\x5a\x7b\x92\x14\x16\x3d\xc3\x24\xa7\x97\xcd\xae\x91\x6b\x26\x48\x2a\x8a\x8f\x98\xb7\x3b\x11\x92\x6c\x75\x06\x2a\x55\x5c\xff\xa2\xcf\xd7\x2e\x9c\x89\x98\x02\x10\x07\x9f\x82\xea\xf0\xc0\x5f\x36\xc5\x4c\xf1\x69\xb2\x15\x2c\x58\xa1\x49\x9c\x86\x65\xcd\x6b\x81\x39\x8b\xc4\x7d\x2f\x05\xf3\x6f\xa4\xe2\x42\xad\xd6\x41\x1c\x5c\x0a\x97\xf0\xf5\x76\x8e\x3e\x13\x62\x5e\x65\x21\x54\x8f\xd6\xa8\x4e\xf1\xc7\x79\xd6\xca\xaa\x13\x3d\x9c\x61\xc4\xc8\xe6\xef\x1f\x0a\xf5\x0c\x03\x71\x70\x29\xbc\x9e\xc2\x62\xbd\x80\xf6\x7a\x5e\x86\xa3\xc0\x25\x36\xf2\x05\x39\xaf\xe3\x3e\x26\x6a\x96\x55\xb6\xdc\x7b\x74\x2a\x4e\xac\x41\x7e\x44\x5c\x10\x07\x9f\x87\xe3\x6b\xca\x6d\x2f\x4a\xe4\xc2\xbb\x7f\x5c\xd6\x55\x1c\xc8\x09\x0d\xa4\xb2\x11\xcd\x7a\xae\x72\xed\x9e\xf3\xa3\x75\x1c\xb2\xb5\x47\x08\x29\x80\x38\xa8\x32\xf1\x74\x5e\x19\x94\xff\x4e\x92\x82\xfb\x9a\x56\x59\xd4\xfd\xf5\x67\x02\xa2\x4f\x19\x8d\xa3\x5f\x62\x3e\x23\x46\x4b\x08\x13\xde\xcb\x90\x26\xf6\xff\xf0\x30\xaa\x19\x6a\xf3\x06\xe2\xe0\x53\xa0\x71\x6b\x92\xd3\x9a\x73\x87\x77\x34\xe3\x30\x44\x8b\x90\x7a\x51\xfe\xb8\x47\xe3\x9c\xcf\x48\xe0\x58\x7b\x40\x43\x75\x2e\x2e\xd4\x62\x1c\xc4\xc1\xa5\xb0\xf5\x41\xb7\x62\xa3\xe4\x15\x6a\xdd\xc0\x93\x51\x0b\x83\xe2\x80\xef\x47\xea\x05\x9f\x2f\xd6\xa7\x1d\xf1\x9f\x1b\x7d\x41\x6d\xd4\x89\x88\x0b\xe2\xe0\x52\xd0\x7b\xad\x32\x11\x6f\xf3\x0d\xc5\xa7\xdd\xf4\xd9\xa5\x57\xc7\x4c\x96\x55\x87\xc6\xe8\xf1\xa4\x73\xd8\x4a\x2e\x43\x6c\x4c\x1c\xd0\x05\x64\x10\x07\x9f\x07\xbe\x1a\xfc\x82\xc6\x98\x9e\xf7\xfd\xbf\x2c\xd7\xc7\x76\x52\xab\x88\xbc\x0b\x98\x47\xfe\xf6\x0c\xdd\x49\xf5\x1d\x4a\x60\x59\xec\x42\x48\x01\xc4\x41\xab\x82\xe1\xa9\xa4\x00\xda\x93\x9c\x24\x05\xc9\x7a\x79\x9a\xda\x67\xea\x29\x16\xb7\x68\xc6\x9f\xe6\x24\xa1\xa6\xda\x78\x09\xec\x4a\xef\xfc\xbc\x6e\xa7\xc4\x74\x23\x26\xc6\x01\x31\x05\x20\x0e\x3e\x05\xa1\xaa\xa6\xcf\x0e\xda\xd7\x05\x0d\x54\x5f\x3e\x45\xbd\x59\xda\xf5\x3a\x98\xfb\xcb\x52\x4c\x11\xaf\xdc\x72\x7a\x5c\x8f\x84\x29\xf4\xa0\x01\x88\x43\xba\x83\x2d\xc9\xaa\xf6\x96\xb6\x3f\xbf\xe1\x25\x81\x72\x90\x42\x43\x49\x14\x59\xd0\xe4\x9b\xe7\x2d\xb4\xd4\x83\xb8\xdd\xb2\xd5\xdc\x8f\xa1\x3b\xd8\x00\x0e\x2e\x05\x06\xa7\xaf\x22\x03\xb1\xd5\xfc\x62\x79\x9e\xee\x3f\x0d\x74\xea\x22\xe8\x1d\xb6\xe4\x7f\xf1\x4b\xb5\x9e\x3b\x94\x23\x1b\xeb\x97\x83\x2e\x60\x01\x38\xf8\x3c\x2c\xc7\x3b\x24\xf2\x39\xd8\x17\x0b\x92\x07\xbb\x37\x94\x63\xa0\xf8\x47\x48\xb3\xc5\x6d\xbf\xcf\x69\xf2\x79\x87\x85\x93\x9c\xe4\x86\x90\x02\x88\x83\x56\x85\xd3\x79\x65\x90\xcf\x3a\xd9\x2b\xdb\xa6\xbb\xd9\xbd\x92\xe6\xbd\x17\xd3\x32\x5a\x23\x8a\x27\x41\xf9\x03\x23\xc7\xe6\x5d\x0e\x86\xe0\x74\x16\x71\xaf\x7e\x5e\x57\x21\xc2\x77\x82\x38\x64\xaf\x2c\x19\xba\xe4\xfc\xec\x59\xb8\xca\x2a\x3f\xef\xc3\xc6\xb1\x00\x86\x9b\xf9\xbf\xa9\xd1\x35\x0d\x77\x9e\x7e\xb1\xb1\xdc\x7e\x22\x6e\x8c\x88\x0c\xe2\x90\xbd\x72\xe2\x95\x0b\xe8\x38\x4c\x5d\x78\x3f\x6f\x6b\xa3\x74\xaf\xb8\xaf\x61\x63\x27\xf7\x12\x2c\x16\x27\x04\x2e\x3d\x24\xd8\x7b\x26\x25\x88\x88\x0c\xe2\xfe\xcf\x2b\xff\xf7\x67\x8e\x53\xbf\xaf\xbc\x3f\x8d\x1d\x74\x14\x83\xcd\x5f\xe7\xf9\x5b\x50\xc6\xa3\xfd\xcd\x5a\x05\xcb\x1e\x37\x75\x45\xfd\xef\x9f\x46\xd2\x89\xcc\x03\xd3\xff\x7a\xe5\xcc\x57\x5f\x46\x6e\x3c\xe0\xb4\xde\xd6\xc3\x55\x90\xfa\x70\x75\x3b\xa0\x5d\x36\xef\x11\x46\x61\x68\x82\xf9\xb9\x42\x5a\x7e\x3b\x9f\x7f\x50\x5d\x7d\xf4\x30\xd5\xa8\x94\xfb\xd9\x0f\x87\xbb\xb1\x6d\x93\x1d\xaf\x27\x94\xa5\x84\x89\x8e\xd6\x5c\x37\x42\x67\x1d\xcd\xb3\x6b\xff\x5f\xf3\xca\xa0\xa1\xfd\x5b\xaf\x8c\xe4\x95\x65\x36\x17\x83\x7e\xdf\x30\x51\x20\xaa\x2d\x33\xa3\xa5\x44\x6b\x19\x7f\x2f\x8d\x6b\xc6\xb1\x3f\x39\xc6\x4d\x98\xa7\xf7\x17\xfb\xe7\x99\x1c\x79\x22\x7b\xe5\xa7\x85\xc5\xbc\x81\xcf\x9f\xfc\x6a\xe2\x1b\x7a\x17\x6e\x91\xa0\x7b\x4c\x27\x12\xb6\xaa\x6f\x5f\x3e\xe0\x67\x84\x3b\xca\xfb\xff\xd7\x8c\xfd\xff\x3e\xe0\x45\xf6\xca\x6f\x8e\x1f\x1a\x10\x2a\xac\xde\xaa\x3b\x46\x47\xa9\xbf\xdd\x81\x7a\x70\xa0\x9e\xe9\x37\x64\x82\xe9\xc5\xbf\x18\x47\xb0\x7e\xe7\xe9\x99\x8c\x16\xd9\x2b\x7f\x77\xdc\xfc\x20\xa4\xfd\x8e\xad\xe8\xc0\x80\x2c\xb7\x4c\x40\xae\x34\x6f\xbc\x62\xb0\x14\x45\xa4\xec\xd6\x13\x01\x3a\xb1\x87\x87\x67\x32\x5a\x64\xaf\xbc\x80\xe1\x84\x51\x29\x22\xe8\x58\x20\x23\xbd\xd5\x5b\x20\x57\x8e\x8f\xd9\x5b\xad\x22\x66\x94\xa5\xf3\xa6\xee\x98\xb5\x2e\x7d\xf0\xcc\xbc\x32\x48\x44\x27\x25\xc0\x99\xac\xa2\x91\x86\x42\x43\xe1\x8d\x5e\x87\x1c\x0a\x09\xca\x81\xa0\xe0\x95\x1e\x79\x16\x91\xab\x26\xbc\xb3\x6c\xd7\xcd\x1b\xa6\x11\x0b\x3f\x88\x43\xda\x03\xbc\x53\xa1\x99\x27\xd2\xbe\x11\xdb\xbc\x57\xae\xd0\x67\x50\x91\x52\xfa\x27\x14\x47\x50\x9a\xf8\x8e\x8a\x1b\x79\xd0\x27\x72\x2a\x44\x5c\x10\x07\x4f\x80\xe7\xdb\x5a\x3f\x8d\xbd\x7c\x59\x6b\xc9\xf0\xf5\x9e\xf8\x39\x87\xe8\x72\xad\x43\xcd\x14\x7c\xeb\x0d\xcf\x3b\xb2\x92\x9a\x9e\x4f\xac\xa1\x26\x94\x00\x0e\x9e\x00\xff\x5a\xf6\xb4\x77\x26\x3a\x90\x57\x9d\xff\x2a\xb8\x40\xdb\xf1\xea\xbd\x92\xdb\x51\x6a\xcb\x15\x89\x80\x80\xe8\x1b\xfd\x63\x68\xd0\x39\x38\x88\x83\xff\xbd\xf6\x76\x41\xc3\x63\x41\x55\x5b\x45\x22\x7f\x9e\x74\xfd\x14\xda\xd8\xff\x44\x60\xea\x3a\x47\x37\xf8\x31\xc2\x43\xba\x98\x70\xbd\x1a\xe1\x95\x41\x1c\x54\xaf\x7c\x2a\xaf\x0c\xfa\x5e\x9f\xa4\x04\x9f\xba\xb7\xdf\xf8\xbb\xd4\xb5\x57\x78\xbb\xd4\x79\x7c\x86\xef\x7f\x36\xa5\x2b\x12\x46\xe9\xa0\x77\xed\xd5\xcf\xf2\x79\x19\x08\x1d\x26\x82\x38\xb8\x12\xba\x7e\x7d\x25\xae\xb9\x5a\x53\x19\x31\xb9\xc1\x90\x77\x1b\x43\xc9\x5c\xa6\xa9\x8a\x99\xc5\xf7\x8d\x88\x58\xc1\xf7\x46\x99\xb0\x7b\x88\xb8\x20\x0e\x3e\xb3\x06\xfb\x1e\x1f\x5c\x74\x79\x5f\xdc\x6e\x58\x2e\x93\x43\x65\x59\x67\x34\x4a\x90\x94\xb7\x0b\x2c\xc5\xbb\x40\x7d\x93\x70\xe5\xeb\x57\x44\x5c\x10\x07\x57\x42\x26\x73\x46\xd0\x37\x91\x91\xad\x50\xac\xa2\xd0\x28\xa5\x64\x13\x27\xf7\xf1\x72\x55\xdf\xc3\x9b\x5d\xc1\x2d\x97\xb8\xa4\x4a\xa0\x0e\xee\x20\x0e\xfe\xf7\x5e\x9c\x57\xdc\x4f\xb7\xd2\xe5\x3f\xc2\xcf\x68\xc9\x7b\xa5\xe5\x6f\x58\xeb\x28\xac\x33\x34\xb3\x77\xee\x43\xf5\x72\x38\x1d\xeb\x22\x62\x2b\x04\xe2\xa0\xca\xc4\xd3\x79\x65\xd0\x5a\x7b\x92\x14\x4c\x19\x56\x1b\x6c\xa8\x1c\x29\x86\xfd\x1c\x46\x28\x23\xb3\xfa\xb9\xd6\xb6\xb0\x42\xbb\x26\xaf\xeb\xfe\xcc\x42\x27\xd8\xc4\x2c\x43\x4c\x01\x88\x83\x4b\x61\x5f\x4f\x56\x86\xde\x40\xfb\xfc\xc6\xe5\xd2\x0e\xef\xc8\x00\x7a\x74\xb3\xbf\x3d\x09\x4f\x44\x1d\xf7\xfd\xcc\x7b\xc2\xb2\x1e\x16\x21\xe2\x82\x38\xa4\x3e\xd8\x33\x95\xc4\xac\x9c\xa8\x5f\x88\x03\x08\x04\xb0\x3f\xa0\x58\x9a\xbd\x0f\x91\xf3\x62\x9e\xf7\x55\xd4\x4b\x63\xbb\x7c\x58\x07\x55\x10\x82\x38\xb8\x14\x86\xdd\x85\x85\xf2\xb2\x75\x66\x8a\xd0\xdb\x59\x5e\xbc\x1f\x7b\xee\xf9\x89\xfc\x51\xa7\x89\xd8\x4b\x9e\xa6\x65\xa9\x94\xd5\x64\xa8\x84\x1f\xc4\xc1\xff\xde\xdb\x47\xdc\x91\xc5\x8a\x5c\xa1\x85\x3b\x36\xcf\xff\x88\x49\x1a\xe3\x66\x28\x77\x8b\x48\x2a\x59\xf8\x5c\xd1\xb2\xad\x5c\x7b\x97\x8d\x90\x02\x88\x83\x2a\x13\x4f\xe7\x95\x41\xf9\xef\x24\x29\xbc\x11\x4c\xd2\xb2\xed\x08\x44\x2b\xf3\x12\x0b\xd2\xf2\xf2\xf5\xc1\x59\x6d\x3a\x57\x16\xf1\xb3\x29\xb9\x74\x96\x67\xc0\x40\x2f\x0a\x31\x05\x20\x0e\x2e\x05\x57\xc6\x72\xbd\x41\x8e\x58\x3b\xae\xd7\x34\x12\xab\x5f\xa6\xdf\x47\x3c\x48\x51\x33\xa4\x79\xe5\x50\x52\xbc\xe8\x71\xcd\xfa\x2a\xf4\x6e\x33\x88\x43\xaa\x57\x26\x48\x7d\x88\x12\xa8\xc7\x4f\x31\x57\x33\xe7\xba\xc3\xfe\x62\x4e\x78\xc0\x43\x2f\xfb\x3d\x51\xce\x55\x16\xc6\xec\x6b\x8e\x90\x57\x06\x71\x70\x29\x88\x1e\x35\xe6\x51\x4b\x29\x25\x62\x3a\x6f\xfa\xf6\x27\x16\xce\xcf\x4d\x98\x29\xf1\x54\xfe\x4d\x22\x0f\x58\xc5\xfb\xd2\xe1\x79\x09\x11\x17\xc4\x21\xad\x62\xe2\xdd\xbc\x05\x72\x3f\x8e\xce\x1d\xe0\x47\x8f\xdd\x27\x2c\xc5\x20\xf5\xce\x96\x33\x0c\x66\x75\x42\x8f\xbb\x34\x9e\x52\xc0\x82\x90\x02\x88\x83\x56\x85\xd3\x79\x65\xd0\x9e\xe4\x24\x29\xbc\xb2\xed\x7c\xf3\x95\xe6\xe9\xd3\x85\x64\xde\x22\x56\x4c\x1d\x4c\xda\xc3\x37\xb3\x87\x62\x0b\x87\xb8\x83\x7b\xd4\xef\x58\x63\xa1\xbb\xd2\x20\x0e\x2e\x85\x74\x83\x9d\xea\x87\x4c\xbd\x7f\x2c\x50\xa6\xb5\xb9\xbe\xca\xde\x8a\x52\xdc\xea\xc1\x94\xf7\xbf\x4e\x22\x4c\xb0\x7f\x2e\xd8\xd3\x14\x11\x17\xc4\xc1\xa7\x56\xc9\x3d\xbe\xcf\x83\xd4\x94\xd7\x42\xec\xef\x1d\x8d\xf3\xdf\xfe\xf8\xbd\x65\xf5\xf4\xab\xbf\xf2\x22\x06\x6b\x6d\x57\xaf\x73\xbf\x14\x11\x17\xc4\xc1\xa5\xd0\xd4\xfc\x11\xef\xbb\x3a\xd6\x24\xcb\x94\x25\xed\x96\xaf\x1b\xe9\x48\x2a\x59\x4e\x06\xa6\x68\xb7\xad\x91\x86\x5d\x2d\x8a\x15\xf4\xce\x34\x88\x83\xff\xbd\x5f\x4c\xa8\xaa\x94\x29\x7e\x57\x9c\xc7\xea\x5e\xee\xd8\x9a\xa0\x09\xd8\x78\xe8\x1c\xc1\x65\xc7\xb7\x4f\x6c\xf1\x82\x4f\x84\x4b\x11\x21\x05\x10\x07\xad\x0a\xa7\xf3\xca\x20\x9f\x75\xb2\x57\xbe\x1f\x49\x61\xb1\xbc\xf8\x2e\xe5\x47\x91\x32\x15\xf9\x2c\x8e\xf7\xec\x8d\x99\xfd\x1a\xc3\x54\x5a\x56\xdd\xec\x89\xb4\x38\xea\x61\x84\xef\x04\x71\xc8\x5e\x39\xe5\x6f\xec\xd1\xc3\x5f\xdc\xae\xf4\x6a\xbf\x76\x3f\xef\x2a\x37\x4d\x09\x4f\x0a\xec\x39\xb2\xaf\x97\x95\xd6\x2e\xbe\x6c\x47\x83\xea\x95\x41\x1c\xb2\x57\x2e\xb0\xaa\xa8\x2c\x5b\xdf\xef\x65\x3c\x2e\xfd\x71\x95\xac\x42\xeb\xee\x45\x42\xb7\xdb\x42\x52\x77\xa2\xa2\xff\xef\xeb\xfe\x87\x0e\x11\x19\xc4\xfd\x9f\x57\xa6\xfd\xaf\x57\x3e\xed\xfb\xca\x65\x09\xe6\x5c\xe6\xfc\xa3\x2b\xfe\x32\x93\x56\xc4\xbc\x54\xb3\x4e\xd7\xbb\x49\x55\x72\xbd\xce\x05\x5f\x4b\xdf\xbe\x95\x80\xff\xe5\x5f\xaf\x5c\xb0\x55\xf6\xaa\x94\x7a\x5a\x8f\x48\xb4\x3f\xfb\x1e\x17\xbf\x9b\x94\x83\x94\x3b\x7f\x7b\x11\xf7\x2f\x7a\x55\x4f\xd3\x0f\x5f\x45\xff\x3d\x05\xbc\xff\xbe\xf6\x29\xb3\x33\xbd\xbe\xda\xcc\x87\xa0\xfe\xdd\x0b\xee\xe4\x22\xe5\x2a\x56\xa9\x18\x16\xa5\xba\xf6\xc3\x6e\xf1\x14\xff\x6b\x5e\x19\x34\xb4\x7f\xeb\x95\x55\x91\xee\xe9\xde\x20\x98\xec\x62\x08\x27\xbc\x42\x87\x1d\x70\x49\x44\x5a\x40\xef\xcd\x70\x4a\x67\x20\xed\x94\x76\x85\xde\x5c\x54\xc5\x61\xce\x99\x1c\x79\x22\x7b\xe5\x61\xef\x37\x57\xf5\xde\x0d\x7c\xe7\x78\xa4\x4c\xf4\x9e\x4e\xd9\xf8\x37\xcb\xf3\xcd\x8a\x72\x14\xe9\x63\x7a\x4e\x22\x6f\xe3\xf0\xfd\x33\x39\xe0\xbd\x8e\xf4\xb1\x35\x97\x2d\x64\xb6\x73\x8a\xe4\x47\xe2\x29\xf9\x05\x07\x1e\xaf\xff\x6c\xa1\x7d\xfc\x30\xb9\xe8\xae\xb5\xd5\x71\xc9\x5f\x27\xc7\xe2\x33\x19\x2d\xb2\x57\xb6\xbd\x57\xd7\xf1\x25\x8e\xfa\x49\xa3\xb9\xe1\x1e\x8a\x4a\x09\xa9\x3f\x7f\x2a\x5d\xcf\x65\xcf\xc3\xa8\xb9\xdc\x4d\xd9\x9a\x92\xaa\x33\x19\xad\x0b\xd2\xc7\x26\xb9\xf6\x67\x6d\xce\xde\x3c\xc7\x7c\x14\x1f\x8e\x8b\x4b\xa0\x1b\xb0\x7d\x98\x64\x40\x34\x8a\xc2\x72\x5e\xf6\x7e\x0f\xad\x37\xd3\x99\x79\x65\x90\x88\x4e\x6c\x79\x8b\x3d\x52\xfc\x4a\x8b\xbe\xd0\x66\x7f\xae\x2a\x8d\x41\x72\x70\x96\xf4\x16\x5a\x9f\xbd\xfe\xd3\xf0\x45\x42\xd2\x2f\xc4\x44\x06\xd0\xde\x02\xc0\xc1\x13\xa0\x92\xe7\xae\x70\xf2\xbd\xf2\x7b\x97\xf4\xd4\x5c\xd5\x8e\x34\x6f\xb9\xa7\xd6\xeb\x6f\x7e\xb8\x3c\xc7\xa8\x63\x6d\xd8\xc4\x15\x72\x1b\x4a\x54\x00\x0e\x9e\x50\x06\x05\x2e\xe0\xe5\xf4\xeb\x86\xa0\xb9\xc4\x77\x8f\xd9\xc8\x6f\xf8\x5e\xcc\x52\x6c\x51\x35\x97\xf8\x78\x65\xb7\x53\xad\xf4\x3c\xf4\x6e\x33\x88\x83\x27\xc0\xc9\xaa\xa3\x79\xec\xde\xb8\x5f\x8f\x6e\xbe\xba\xc1\x85\x43\xd2\x38\xea\x27\x59\xfb\x4c\xfd\xd7\x6f\xc9\x89\x4a\x1a\x1f\xf9\xd7\x5e\x88\xb8\x20\xce\x5f\x0e\xc5\xe7\x3f\xce\xab\xa3\x81\xbd\xe5\x9e\xae\x4f\x52\xf4\x2b\x9f\x1a\x85\xc2\xbf\x8f\x4b\x1c\xf3\x12\x8e\xc6\xea\x24\x3f\xbc\xe7\x08\xa1\x1a\xe0\x46\x78\x65\x10\x07\xd5\x2b\xab\x9e\x66\x2b\x04\xfa\x5e\x9f\xa4\x84\xfb\xa3\xa1\x65\xf5\x02\x8b\xab\xcf\xd0\xa7\x9b\xed\x5a\xbf\xfe\x76\x3d\x9e\xf2\xce\xfb\x69\x43\x3c\xa5\x4b\xbd\xf0\xe0\x66\x2e\x11\x62\x06\x40\x1c\x5c\x09\xdc\x12\x3f\xdc\x57\x3e\x77\x48\xea\xd1\xb6\x98\xd0\xd2\xe6\xc6\x88\xc7\x36\xde\x21\x3a\x8c\x9a\xf2\x18\x3e\xdf\x6d\x33\xc8\x36\x86\x88\x0b\xe2\xe0\x4a\x60\x70\x48\x0b\x3b\x8f\x36\x9b\xec\x50\x7c\xa8\x36\xdb\x85\x55\x4e\xf0\x90\x99\x95\xab\xf9\xd1\x75\xc6\x25\x5d\x0f\x17\x82\x46\x17\xe8\xe7\x7d\x00\x87\x74\xae\xdc\xc6\x66\x15\xb1\x1d\xb9\xbb\x4f\x5c\x70\x1c\x7d\x57\xef\x33\x37\xca\x1d\xb5\x71\x23\x83\x19\x19\x55\x06\x79\x3a\x12\x81\xbb\xd0\xb9\x32\x80\x83\x2b\x61\x75\x94\x4a\xef\x7c\x93\x17\xeb\x8d\x10\x06\x8c\x04\x9e\x65\xcb\x56\x7c\xc6\x75\xb5\xf0\x73\xbf\x7c\x3f\x63\x2d\x64\xfe\xfd\x75\x1f\xb1\x15\x02\x71\x50\x65\xe2\xe9\xbc\x32\x68\xad\x3d\x71\x51\xf0\x16\xb8\x69\x90\xc4\x73\xb7\xad\x46\x9a\xda\xc8\xc5\x33\xa1\xc0\x8e\xec\xd5\x08\xaa\x55\x03\xf6\x8b\x2f\xd2\x9c\x4d\x92\x2f\xa1\x45\x01\xc0\xc1\xa5\xe0\x7c\x59\xf9\x1d\x53\x79\xfd\x08\x11\xb1\x07\x7b\xa5\x09\xe1\x27\x6a\x5e\xd3\x67\xec\x4e\x55\x57\x52\x79\x3d\x23\x22\xf9\x71\x8e\x11\x71\x41\x1c\x5c\x0a\xb3\x5a\x57\x52\xda\xf3\x5a\x0f\x75\x8a\x94\x15\xa9\xb0\xcd\x3f\x7f\x0f\x9a\x39\x87\x85\x72\xf1\x41\xd0\x61\x76\x46\x05\x43\x38\xf4\x43\x17\x88\x83\x4b\xa1\xf5\xcd\x47\x0b\xaf\x6f\x14\x0f\xe5\x9c\x2d\x32\xbf\x2d\xf3\x1b\x5a\xaf\x5f\x68\xdf\x5f\xcf\xad\x5b\xc6\x1a\xcc\x3a\xcf\xb4\x7c\x01\x11\x17\xc4\xc1\xa5\xe0\x82\x22\x1e\xb9\x33\xb3\x46\x78\x27\x2a\xef\xc3\x60\x77\xe6\x03\xac\xa7\xa4\x6d\x06\x4b\xea\x11\xc9\x62\x7d\xa4\x92\x7c\x2b\x7d\x08\x29\x80\x38\xa8\x32\xf1\xfa\xa9\xa4\x00\xca\x7f\x27\x49\x41\xe6\x5d\x5a\xc4\xf0\xba\xcc\x44\xbb\xc4\xb9\x8b\x87\x5e\x5d\x37\x62\x26\x84\x45\xc8\xce\x77\xf3\xfa\x90\xee\x5e\x66\x2c\x19\x6d\x82\xee\xf1\x00\x38\xb8\x14\xd8\xed\x51\x7b\xbf\xe6\xf5\x12\x79\x91\x27\xde\x9f\x8f\xe0\x8c\x36\x36\x8b\x99\x92\x0f\x5c\x88\xf8\x3b\x1f\xb5\xe8\x6b\x7a\x45\x07\x11\x17\xc4\xc1\xa5\x10\x7f\xef\x75\x98\x23\x5d\x93\xca\xab\x96\xd1\x44\x26\x9c\x3d\xf1\x2b\xe9\x9f\x1b\x3d\x83\x17\x83\xb9\x8f\x13\x67\x4b\xbf\xa1\x3e\x45\xc4\x05\x71\x70\x29\x7c\xa3\x73\xf3\x6d\x5f\xfa\x13\x44\x51\xd8\xb2\x82\xfe\x7c\xc1\xfa\xad\xe0\x04\x3d\x93\xde\xdd\xb4\xee\xf2\x1d\x71\xe7\x63\x76\x1e\xa8\x3b\x3e\x80\x83\x4b\x61\xb7\x8a\xb9\x6d\xd7\x28\xd7\x84\x0c\x35\x5c\x98\xe9\xc8\xdf\xe3\xde\x83\xdd\xa1\xe7\x83\xea\xa5\xb9\xb6\x4b\xa2\x32\xb6\x8a\x75\x08\x29\x80\x38\x68\x55\x38\x9d\x57\x06\xed\x49\x4e\x92\x02\xc5\x9c\x00\xdd\xcb\x5e\x86\x47\x55\x6b\x6a\x02\x68\xe9\xae\xa3\x5d\x02\xd9\x73\x7a\xf7\x07\x7b\x9b\x9c\xdb\xaf\xce\xc5\x0f\x40\xa9\x17\xc4\xc1\xa5\x60\xac\x9c\xb1\xa4\x17\xf8\xd0\xe4\x88\x41\xe1\x41\x38\xee\x0f\xb5\x5e\xfa\x83\x1b\xce\xa5\x65\x83\x8a\x87\x2c\x9b\xbf\x88\xf2\x70\x11\x71\x41\x1c\x5c\x0a\xcb\xee\x92\xad\xb4\x3a\x97\x28\x2d\xa5\xd2\x77\x8c\x1e\x2b\xd7\xe3\xd4\x8f\xec\x85\x66\x74\x7c\xc5\x6d\x7b\x78\x83\xb8\x70\x09\x3a\xaf\x06\x71\x70\x29\x3c\x59\xfe\xf2\x28\x0a\xed\xe9\xcb\x26\x5f\x77\x1f\x76\x92\x9c\x1c\xb2\x4a\xae\xb9\x1b\xc3\x19\xcf\x7a\x86\xad\x2c\xc7\xde\x7b\xc6\x20\xe2\x82\x38\xb8\x14\xc4\x0b\x2c\xbf\x95\xbc\xd4\x73\xa1\x52\xf8\x53\x3e\x57\xab\x71\x17\xcf\xcb\xea\xe7\x4a\x57\x7a\x3e\xb9\xbc\xaf\x16\xe1\xc1\x24\x26\x42\x0a\x20\x0e\x5a\x15\x5c\x4e\xe5\x95\x41\x3e\xeb\x64\xaf\xdc\xbd\xb2\x5d\x49\x2c\xff\x3b\xba\x85\xdc\x0f\xe7\x13\x47\xa6\x3f\xd6\xba\x90\xcb\x84\xc0\x73\x2a\x93\x5a\x31\x07\x87\x05\x7e\x55\x84\xef\x04\x71\xc8\x5e\xd9\x39\x76\x51\xb7\x8e\x1c\x95\xf8\xdb\xa7\x54\x9b\xf6\x84\x2e\xea\xad\x41\xad\xf8\x77\xdf\xf4\x58\x6c\xf8\xe2\x7b\x78\xb3\xbe\x8e\x22\x22\x83\x38\x64\xaf\xbc\x3f\xc8\x46\xb0\x2c\xed\x1d\x78\x4e\x85\x37\xc3\x45\xeb\x17\xf9\x73\x09\x79\x4e\x36\x91\x55\xa2\xa0\x49\x35\x2c\x6b\xbd\x80\x0d\x44\x64\x10\xf7\x7f\x5e\xf9\xbf\x12\x3e\xf5\xfb\xca\x39\x7a\xad\x15\xc7\xfc\x39\x65\x71\x0f\x77\xad\x5e\x4d\x16\x05\x65\x49\xd2\x76\x79\xff\xb4\x7c\xea\x44\x36\x17\xa7\xb9\x63\x96\xfa\xaf\x57\x56\xfe\xa4\x41\x3b\x33\x3b\xad\xab\xc6\xca\x24\x54\xa9\x30\x29\x81\x4f\x31\x44\x79\x33\x4d\x26\x62\xc3\xff\xe7\xbb\xb6\x0a\xfa\xbf\xff\xa0\xb2\xcb\x87\x4f\x0e\xbd\x9c\xd6\xd0\xc8\x1c\xde\x0d\x8c\x89\xb1\xa4\x1e\xef\x98\x2a\xf3\xdf\xd0\x93\x8e\x0b\xb0\xf1\xcc\x99\xe2\xfd\x5f\xf3\xca\xa0\xa1\xfd\x5b\xaf\x8c\xe4\x95\x9f\x1a\x07\xf4\xa1\xaa\xb0\x17\x54\x3a\x08\x3d\x8c\x89\xab\xe4\x7a\x26\xc9\x92\x48\x45\xb7\x96\x91\x5b\xb1\x4b\x83\xb9\xa0\x1f\x7b\x26\x47\x9e\xc8\x5e\xf9\x8b\xc7\x8e\x7a\xb2\x46\xff\x7d\x54\xc3\x17\xd1\x98\x84\xd5\x66\xa4\x9a\x0d\x1c\x58\x7a\xd1\x6a\x64\x94\x2a\xb8\xf4\x34\x4c\xdd\x67\x72\xc0\x8b\xec\x95\x27\x0e\xdb\x6e\xb6\x54\x95\x29\x4e\x51\xff\xa8\x94\x1b\x4c\x19\xab\x9c\x0f\x53\xfd\x9a\x2a\x46\xd1\xb5\x57\x59\x6b\x63\x85\xad\x7d\x26\xa3\x45\xf6\xca\x13\x79\xee\x95\x9f\x68\x70\x62\x6d\x31\xb5\xe2\xbe\xcb\x73\x16\xd5\x18\xcf\x7f\x13\xdc\x69\xe3\xca\xdf\x4a\xbd\x31\x53\x36\x32\x7b\x26\xa3\x45\xf6\xca\xf1\x11\xdf\xbe\x8a\xd0\x24\x71\x45\xb8\xbe\x32\xbc\xbc\x91\xa1\x94\x21\x10\x15\x33\x2d\xb4\x35\xa6\xa6\xe7\x63\x2a\x57\x66\xe8\x7e\x66\x5e\x19\x24\xa2\x93\x12\xe0\xb5\xdd\x30\xec\x9d\x8e\x86\xb8\xbd\x2b\xb4\xc3\xd7\x2a\x5c\x87\xc9\x3c\x02\x4c\xf8\x0f\x87\xee\x15\xd9\x9b\x37\xa0\x45\x30\x41\xdb\x57\x10\x07\x4f\x80\x52\xcf\x70\x99\x6e\x26\xb3\xfb\x77\xdc\xe4\xf4\x9d\x12\x45\xfd\x89\x9e\xe8\x23\x8b\xdb\x67\xf5\xc2\x7d\x47\xb4\xd8\x79\x67\x69\x0f\xea\x52\x0c\xe0\xe0\x09\xf0\x93\x5a\xff\xa2\xc6\x92\x8d\xd0\x86\x84\xc9\x6c\xf1\x72\x77\xca\x27\x51\xc1\x66\xda\x36\xda\x98\xa2\x6b\x63\xbb\xf7\xb2\xd8\x32\x10\x71\x41\x1c\xbc\x58\x48\x90\xcb\xad\xf8\x01\x7d\x7b\x15\x5f\xc4\x5a\xfa\xcb\xa0\xdc\x57\x42\x77\x22\xde\xec\xfe\xa5\xf5\x54\xa5\x93\x9b\xaf\x6f\xd9\xdf\x45\xc4\x05\x71\xf0\xc4\xba\xf2\x9d\xcf\xfc\xb2\x86\xe5\xed\xf9\xe2\xd8\xa8\xab\x01\x37\x03\xbb\xae\xe9\x7e\x89\xc5\xaa\x53\x18\xaf\xc6\xe7\x31\x58\x7f\x7b\x8c\xf0\xca\x20\x0e\xaa\x57\x3e\x95\x57\x06\x7d\xaf\x4f\x52\x82\x7a\x37\xc9\xe0\x84\xd0\xac\x10\x3d\x0d\xa5\xa9\x2a\x5e\x7a\xf7\x45\xe7\x90\x4b\xb7\x8b\xfa\xa8\xba\xe3\x7f\xed\x4e\xff\x36\x82\x6e\x02\x80\x38\xb8\x12\xe6\x71\xed\x84\xee\xbd\x8d\x37\x6e\x8e\x1b\x7d\xf5\xca\x5d\xd1\x77\x52\xb2\xe9\x55\x16\xd6\x97\xf1\x92\xef\xfd\x9b\x8b\xf3\x41\xb3\x88\xb8\x20\x0e\xae\x84\x8d\x29\xbe\xd9\xc9\x3c\x0f\x9f\xd7\x4a\xa1\x9e\x0c\xf9\xfb\x5d\x18\x28\xa9\x4e\xe8\xbd\x15\x2a\x3f\x30\x84\xb8\x85\x83\x15\xa1\xdd\x2b\x88\x83\x2b\x21\x7f\xa2\x12\x8d\xcf\xea\x39\xfa\x3a\x8b\x83\x5e\x53\x0f\xe9\xe5\x4e\xc7\xf4\x34\x0f\x87\xaa\xd7\x9b\xcc\x5e\xe9\x84\x26\x81\x5a\x88\xb8\x20\x0e\xae\x04\x59\x3e\x8e\xa4\x2a\x4e\x2f\xcb\x7c\xfa\xc3\x36\xa5\x61\x46\x8c\x71\xfd\x1b\xbd\x0c\x93\x04\x65\x1c\x78\x9c\xc1\x25\xa4\xf4\x6d\x88\xad\x10\x88\x83\x2a\x13\x4f\xe7\x95\x41\x6b\xed\x49\x52\x78\x2c\xc8\x10\xf5\x53\x5a\x5b\x96\x7b\x8e\xc6\xcf\x52\x8e\xf2\xeb\x8e\xa9\xe3\x5b\x4f\x43\xed\x1f\x09\x25\x69\x8e\x9a\x98\xc4\x50\x7b\x33\x10\x87\x74\xf1\x56\x93\xe7\xf2\xb0\x2f\xcb\xdb\x04\x55\x09\xef\x4d\x3d\x55\x43\xed\xe1\xf5\x32\x66\x0a\x0f\x41\x0d\xfd\x92\x88\xeb\x68\x2e\xd0\x91\x3d\x88\x43\x3a\x91\x89\xad\x0d\xa3\x0c\x8c\x41\x43\x11\xfa\xfc\x65\x63\x4b\xb2\x56\x31\x21\xc6\xee\x60\xc7\x46\x0c\xfd\x86\x34\x65\xee\xc4\x6b\xc8\xd0\x81\x38\xb8\x14\x68\x39\x6e\x5d\x13\xd4\x3d\x2c\x4b\x90\x28\x6e\x4b\x0a\x17\x6f\x73\x6a\xbd\x7f\x47\xf4\xb9\xd6\xc6\xc1\xc7\x28\x5c\xaa\xb4\xa9\x39\x44\x5c\x10\x07\x97\x82\xdd\x45\xbd\x72\x7d\xf3\x75\x92\xef\xb2\x0b\x14\x0b\x07\xd3\x4f\xb5\x06\x17\x23\x42\x63\x51\x7e\xd0\x6b\xf8\xdc\x21\x7c\x47\x0f\x5d\xbc\x05\x71\x50\x65\xe2\xe9\xbc\x32\x28\xff\x9d\x24\x85\xac\x8c\x9e\x50\xac\x5e\x34\x35\x16\x56\xac\x84\x11\x8b\x27\xf8\xeb\x43\x79\x8f\xb6\xae\x06\x4a\x95\xca\xdb\xd7\x3e\xcd\x9f\x80\x3c\x2d\x88\x83\x4b\x41\xfe\xdd\xb0\xb3\x35\x25\x8b\xd0\xf1\xba\xff\xa1\x4e\xd0\xcb\x2b\x25\xd2\x72\xe4\xe7\x05\x78\x49\x6d\x3e\xdf\xdd\x7c\xe2\x9e\x0f\xbd\x57\x0c\xe2\xe0\x52\x70\x0e\xb9\x1e\x10\xa1\xbc\x21\xf1\x9b\x4e\xc2\xeb\x76\x66\xb7\x5d\xec\xf1\xdf\xc8\xf4\xc3\x67\x9c\x2b\xd7\x2e\xe9\xb2\x16\x58\x40\x17\x6f\x41\x1c\x5c\x0a\x26\x66\x03\xe3\x6f\xa9\x73\x17\xe4\x0d\x75\x78\x15\x8e\xba\x26\xab\xa5\xbe\xef\x8c\x86\x5a\x45\x6a\xff\xe8\x89\x13\x45\x2b\x81\x7a\x7b\x81\x38\xb8\x14\x36\x7f\x59\xa0\xd9\x89\xbd\xcb\x74\xa4\xf8\xfb\x7d\xdb\x47\x9e\x7b\x52\x3f\x90\xa1\x78\xcf\x9c\x7c\x94\x3d\x98\x82\x3f\xad\xfb\x09\x42\x0a\x20\x0e\x5a\x15\x4e\xe7\x95\x41\x7b\x92\x93\xa4\xb0\xd5\x50\xd4\xd2\x56\xf9\x99\xad\xc4\xfa\xad\xfd\x4f\x01\xcd\xe5\x0c\xa6\x36\x16\x32\x73\x11\xec\xdd\xdf\xde\x0f\x8b\x50\x68\xd2\xa1\xeb\xed\x00\x0e\x2e\x05\x8c\xd1\xea\x77\xe4\xfd\x7e\x38\xf4\x1b\x3f\xb6\x87\xf3\xbf\x64\xd1\xc4\x63\x63\x1a\x9a\x30\x47\x94\xd1\xa8\x15\xe6\xdf\xfd\x2d\x82\x88\x0b\xe2\xe0\x52\xe8\xa0\x08\x78\x17\x70\xe7\xf6\x5e\xc3\xfd\xa8\x70\x02\x1b\x8c\xcb\x5e\x34\xaf\xf0\x8e\xe8\x8c\x6b\x3a\x04\xf2\xdf\xae\x78\x1f\xb8\x41\xad\xcb\x01\x1c\x5c\x0a\x1c\xf3\x52\x4a\x63\xdd\x47\x8e\xef\xa9\xc7\xb4\x03\xe8\x72\x7c\x6f\xac\xde\x92\x48\xbf\x33\xc9\x3d\x57\x1f\xd4\xfb\xdd\x99\x09\x3a\x5e\x00\x71\x70\x29\xb0\x8a\xaf\xde\xfd\xce\x8d\xea\x23\x52\xdf\x77\xa1\xa7\xcd\xa1\xea\x4d\xab\xd8\x13\x5d\x0a\xce\x28\x1c\xa9\x12\x8e\xe7\xd3\xa2\xd0\x9b\x51\x20\x0e\x5a\x15\x4e\xe7\x95\x41\x3e\xeb\x64\xaf\xdc\xc4\xeb\x4e\x13\xe6\x6c\xcf\xc2\xd7\x98\x81\xf1\xfc\x70\x6d\xdd\x5f\x56\x60\x07\x37\x05\x93\x61\x21\xb8\x10\x63\x65\x29\x76\x17\xe1\x3b\x41\x1c\xb2\x57\x7e\xb7\x15\x93\xee\x18\xad\xd1\x77\x48\x26\xbc\x29\x35\x7b\xd7\x40\xf8\xf7\xc4\xd8\xd7\x9a\x2c\x4a\x1f\x29\xdb\xe5\x1f\xdf\x02\x70\x10\x91\x41\x1c\xb2\x57\x96\xb2\x6a\x18\xdf\x30\x27\x7a\x68\xdd\xa6\xec\xf4\x49\xbb\x39\x6b\xa5\xfc\x77\x63\xa3\xd4\x38\xe1\x5f\x0b\xfa\xd5\x97\x63\xdf\x28\x10\x91\x41\xdc\xff\x79\x65\x14\xb4\x7f\x23\x9f\xfa\x7d\x65\x0b\x4c\xe3\x22\xe1\x8b\x37\x72\x5b\xce\xdf\xfc\x45\xbe\x43\x84\x4a\xf6\x67\xca\xe3\x59\x03\x55\xaa\xc7\x15\x51\x3b\x17\xb4\xa7\x57\xff\xf5\xca\xe3\x5d\xe6\xb8\x55\x32\x32\x07\x61\xca\xcf\x06\xb0\x16\xad\xf5\xcc\x47\x2f\x9b\x09\x38\x59\x57\xff\xbc\x89\xca\xe9\xf6\xa6\xd1\xeb\x5f\x5b\x9d\xfb\xe2\xc5\x6e\x88\xb6\x88\xdd\x4c\x6a\x09\x26\x2f\xf9\xa2\x79\xcb\xab\x40\xc2\xef\x76\xf5\x17\x1a\x6a\xe2\xfa\x07\xfd\xb0\xfe\xd7\xbc\x32\x68\x68\xff\xd6\x2b\x23\x79\x65\x12\x55\x6b\x43\xa1\xf2\xef\x1e\xf3\x2d\xf9\x2e\x28\xf7\x43\xa2\x8f\x35\x55\x03\x2c\x51\xb0\xd0\x69\x17\xbd\xfb\xb0\xec\xd2\xc8\xce\xe4\xc8\x53\x10\xc9\xc6\x5d\x95\xcd\xfe\x64\x45\x25\x20\x84\xa9\x2a\x85\xdb\xa0\x55\xef\x9c\x36\xd0\xe3\x8a\xf6\xd4\x2c\x31\x6d\x79\xe2\x4a\xb3\x85\xfe\xda\x99\x1c\xf0\x22\x7b\xe5\xa4\xf4\x05\xca\x6e\xa2\xb1\xe4\xd7\x03\xc6\x5a\x66\x17\x2e\x47\xcc\x07\xb9\x4c\x8d\x3a\x57\xd1\x8d\xac\x78\x09\x1e\x54\xe3\x5b\x9e\xc9\x68\xef\x20\x7d\x6c\x56\x76\xc0\x2e\x4b\x4f\x93\xfa\xdd\xd9\xc9\xdf\xfd\xa9\x96\x18\x26\x3a\x41\x2b\xb6\x2d\x71\x17\x37\x46\x69\xa5\x64\x1a\xb9\x44\xcf\x64\xb4\xc8\x5e\x59\x29\xd3\xb3\x43\x9d\xa4\xfe\x9a\x80\xc1\x7a\x1c\x83\xa6\x30\xb3\xd9\x82\x4a\xaf\x5f\x40\xb7\x5b\x48\xa2\x53\x79\xc9\xd0\xaf\x2b\x67\xe6\x95\x41\x22\x3a\x29\x01\x1a\x7a\xbd\xe4\xc4\x0b\x7a\x47\xdd\x5e\x5b\x2b\x61\x56\x19\xdb\x4e\x26\xa0\x70\x68\xe1\x92\xa6\x6d\xf6\x89\xe4\xd3\x18\x5f\xcc\x08\x62\xe1\x07\x71\xf0\x04\xd8\xf3\x3c\xc3\x71\x7a\x4f\xc9\xee\xfc\x76\x6c\xdd\x35\xec\x1a\x05\x76\x07\xba\xf6\x26\x51\x06\x42\x3f\x15\xe9\x05\x74\xcf\x07\xd0\x0d\x59\x10\x07\x4f\x80\xdb\xfd\x1e\x5f\xaf\x3e\x48\x12\xd9\x7b\x42\x6e\xfc\x75\x5c\xcb\x45\xbe\xc8\x60\x56\x77\xd6\xea\x18\xe3\x87\x23\x0f\x9b\x12\xd1\x30\x22\x2e\x88\x83\x27\x40\x43\xb5\x86\xf9\x83\x5c\x9f\x2f\xbf\xd9\xc8\x85\xc8\xfe\xaa\xfa\x32\xf6\x53\x3c\xd7\x1c\x60\x6b\x55\x9b\xa2\x5e\x71\x1d\x0a\x87\xfa\x81\x83\x38\x7f\x39\x99\xff\xf6\xf6\xea\xd1\xe6\x59\x6a\xda\x3b\xc7\x64\x2f\xc5\x91\x9e\xb0\xbd\xea\xf9\x5e\x0c\xdb\x77\x85\xf7\x56\x86\xb9\x97\x51\x89\x77\x9c\x2f\xd4\xdb\x0b\xc0\x41\xf5\xca\xa7\xf2\xca\xa0\xef\xf5\x49\x4a\xa8\xc1\x96\xbc\x99\xff\x3c\x52\x8a\xcd\x2c\x89\xc8\xef\x0f\x4f\x4a\x4d\x28\x41\xc8\xcd\x01\x85\x91\xc4\x87\x94\x19\x73\x4f\xd8\x21\x63\x00\xe2\xe0\x4a\xa0\x7c\xe9\x4c\xf7\xbc\x2b\x67\xe8\x71\x26\x47\xea\xe5\xbb\x39\x7d\x4c\x18\xfa\x05\x16\x4c\xae\x4e\xc2\x25\x78\xcd\xba\x77\xc8\x1a\x11\x71\x41\x1c\x5c\x09\x8f\x2f\xfc\xc9\xcd\x7b\xa5\x29\xc7\xfb\x95\xff\x29\xd1\xda\xa0\x2e\x3b\xa9\x43\x6c\xb8\xb9\x65\x86\x8a\x5d\xe3\xe5\xd9\xb0\xf3\xaf\x21\x43\x07\xe0\x90\x0c\x92\xeb\x8a\xce\x39\xe1\x72\x16\x79\xfc\xd1\xde\x1e\xdc\x21\x46\xeb\x26\x51\xb4\xf5\xa0\xb6\x18\xbf\x03\x31\xcd\x03\x31\x72\xc8\x83\x83\x38\xb8\x12\xe2\xdf\xf2\xb4\x95\xf2\x5c\xa0\xc0\x14\xa9\xba\xfc\xc3\x5c\x47\x20\x15\xf5\xf2\xeb\x5b\xeb\xd8\xc1\x1f\x85\x1e\xd3\x54\x69\x26\x5f\x45\x6c\x85\x40\x1c\x54\x99\x28\x78\xba\x13\x24\xc0\x5a\x7b\x92\x14\xaa\x2b\x8a\x22\xce\xeb\xab\xd0\xf3\x62\xbb\x2d\xb1\x56\x1b\x2b\x04\x45\x2a\xd8\x3a\x11\xa0\xbc\xc6\xd4\xff\x62\xf7\xce\x6a\x17\x6a\x64\x04\xe2\xe0\x52\x68\x46\x0b\x2e\xf3\x54\xd7\x1d\xf1\x8d\x55\xc9\xc8\xbe\xcb\xde\xdf\xe0\x9f\x4a\xb6\x5b\xf9\x35\x34\xed\x2f\x91\x3a\xcb\x2a\xfa\x55\xa8\x83\x2c\x80\x83\x4b\xe1\x7e\x9a\x8a\x98\x36\x23\x4f\xf5\x4e\x7b\x8e\xcf\x25\xce\xbc\xb6\x58\x46\x0d\x3c\xc2\xfb\xed\x33\x7f\xf4\x7c\xd5\x4a\xa3\x12\xa1\x13\x2f\x10\x07\x97\xc2\xaa\x1b\xde\x35\x53\x45\x85\x9b\xe1\x3e\xf7\xf5\xd9\x6e\xbf\x97\x63\x78\x5f\x4f\x90\x81\xc2\x49\xc1\x42\x2f\x1e\x7d\x14\x38\x08\xdd\x3a\x05\x71\x70\x29\xe0\xd2\xa9\x94\x75\xe8\x09\x31\xd5\xba\xea\x27\x2d\x69\x60\xd1\xe6\x8c\x45\xe7\xc5\x5c\x20\x5a\x13\x60\x08\x97\x19\x44\x6f\xb7\x45\x48\x01\xc4\x41\x95\x89\xa7\xf3\xca\xa0\xfc\x77\xe2\x43\x41\x95\x29\xbf\x97\x3d\xbd\xb4\x70\xe3\x75\x49\x51\x7f\x9d\xbb\x3d\x62\x2b\xf0\x13\x35\xed\xef\x16\xc1\x67\xa9\xc8\x74\x9b\x14\xe8\x67\x08\x10\x07\x97\xc2\xf3\xcd\xd8\x02\x92\xc5\x3f\x72\x2a\x61\x58\x79\x12\xe6\x3e\x43\x18\x34\xcd\x83\xe5\xf7\x75\x66\xd6\xd5\xfd\x09\x23\x0c\x3a\xbe\x23\xe2\x82\x38\xb8\x14\xda\x7f\xf2\x5d\x20\xdb\x15\xdd\xf4\xba\x2d\xbe\xae\x9d\xb8\xea\xc2\x3c\x4f\xb4\x19\xe2\xe8\xae\x21\x1b\xa6\x22\x98\xfc\x23\x66\x10\x11\x17\xc4\xc1\xa5\x70\x93\xb8\xc5\xc0\xde\x4b\xa2\xd3\xd9\xd9\x58\x28\x9d\xe3\xcd\x18\x6b\xb7\x51\x5c\xd9\xae\x65\x73\x7a\x62\xcb\x6f\x17\x3d\x06\xa8\x93\x20\x88\x83\x4b\x41\xe8\xf0\x09\x85\xa4\x38\x77\xeb\xca\x16\x77\x27\xb7\xa3\xe8\x3a\x6f\x95\xee\xa6\xb1\x5d\xd5\xa3\x4f\x8d\x87\xc5\x7c\xbb\x5c\x29\x08\x29\x80\x38\x68\x55\xb8\x73\x2a\x29\x80\xf6\x24\x27\x49\x61\xc4\x89\xcf\x53\x0a\x4f\x4b\xb0\x3c\x68\x16\x45\x27\x88\xac\xcf\x33\x2c\x6b\xd4\x68\xbc\x8f\xdb\x57\x5f\xdf\xb2\x4d\xdc\x1b\xfa\xf9\x1b\xc4\xc1\xa5\xf0\x25\xeb\xc1\x7a\xfc\xed\x67\xa5\x57\x16\xda\x7d\x26\x65\x9e\xb9\xd9\xa5\xf1\x90\x96\xa8\x95\x19\x0e\x47\x05\xfe\x32\x89\xbe\x08\xbd\xba\x0e\xe2\xe0\x52\x18\x72\x0d\xfd\x23\x25\xac\x36\x4e\x2a\x22\xad\xfb\x7d\xfa\xa1\x98\xfa\x90\x45\xaf\xa7\x14\xd6\xcb\xf3\xd4\xf7\x24\xe4\x70\xa6\xa0\xf3\x6a\x10\x07\x97\xc2\x8f\xd5\xe5\x35\x4b\x61\xdc\xc3\xa4\x30\x19\x9e\xf6\x57\xc2\x87\xe3\x1f\x85\x08\x3e\x16\xc4\xa9\x8b\x27\x5c\x5c\x60\x37\x54\x81\xee\x8c\x83\x38\xb8\x14\xb6\x74\xdd\x49\x93\x79\x9c\x7c\xdb\x3b\x04\xb7\x22\x08\x9b\x72\xde\xe2\xdc\xf5\xb2\xf6\x5e\x1b\x4b\xbd\x3e\x30\xfa\x29\xc9\x1a\x7a\x33\x0a\xc4\x41\xab\xc2\xe9\xbc\x32\xc8\x67\x9d\xec\x95\x0b\xb1\xb9\x14\xfd\x1c\xd9\xd1\x83\x4c\x2c\xdb\xb7\x0b\xc3\x2a\x3e\x55\xa5\x54\x48\x8a\xf4\xaf\x39\xec\x87\x2d\x7e\x1d\x30\x85\x7c\x27\x88\x43\xf6\xca\x6e\x92\x25\x37\x79\x7e\xed\x76\x93\xe3\x33\x13\x19\x47\x3d\x49\x60\xc5\x7d\x6c\x1f\x71\xf8\x24\x47\x47\x37\x21\x88\xba\xd1\xad\x0f\x11\x19\xc4\x21\x7b\x65\x2c\x36\xcd\xb5\x8b\xcf\xa5\x26\xc4\x8a\xe2\xfb\x98\xf5\xb3\xfc\xd4\x13\x3e\x12\xac\xa8\x7d\x3f\xe8\xbc\x4c\xb0\x93\xc8\xe3\x8a\x09\xbd\x73\x05\xe0\xfe\x9f\x57\xfe\xef\xc5\xa6\xd3\xbe\xaf\xac\x9c\xeb\xc5\xb3\xa1\x46\x67\x33\xdd\xf5\xf1\x0b\xb6\xc9\xf6\x02\xa7\xc5\xe2\x40\x3b\xc9\xc3\xea\x1a\x9c\xfa\xf7\x58\x18\xdf\xed\xfe\xe3\x95\xc9\x54\xdf\xa0\xe6\x36\x4b\x3f\xcf\xc4\xf6\x89\x79\x1c\x71\x6e\xad\xf5\x9d\x93\xa4\xeb\x07\x51\xd5\xdb\xdd\x41\xeb\xb9\xca\x4b\xff\xa0\x7c\xc5\x8c\x52\xaf\x30\x2f\x2a\x4f\x93\x3c\x51\x43\xa7\x70\xcc\x10\xa1\x1f\xbd\xf6\xe8\x42\x5c\xc0\xb2\xe8\xaf\x72\x74\xf2\x32\xdf\xff\x39\xaf\x0c\x18\xda\xbf\xf5\xca\x48\x5e\xb9\x7b\x82\xe4\x29\x79\x59\x0f\x9f\x29\x55\xfc\x74\x10\x7d\xbc\x2a\xad\x2e\xd6\x63\xd7\xc1\x66\x3c\x8a\xa7\xdb\xd6\xd7\x8c\x83\xdf\x9f\xc9\x91\x27\xb2\x57\xee\x0d\x11\xe5\x3a\x3a\x32\x12\xcc\x1e\x7b\x18\x47\x70\x83\xe0\x11\x4d\x08\x9f\x41\x66\x69\xcb\x3a\x95\xa8\xf9\x95\xac\x52\x17\xa1\x33\x39\xe0\x45\xf6\xca\x8b\x7f\xf4\x75\xb1\x9c\xb5\x92\xff\x24\xf8\x45\x91\xe3\x3b\x9f\xb7\x2f\xfc\x23\x14\x35\x63\xf6\xfb\x0f\x46\xb6\xf9\x08\x16\x2e\xf9\x99\x8c\x16\xd9\x2b\xa7\xc6\x0c\xa1\x3d\xe8\xa1\xfb\xd0\x21\x4c\x2e\x1f\xb3\xb4\x2b\x7d\xc0\x6e\x89\xc3\x5e\xef\xa6\xfe\x32\x96\x86\xf2\x41\x93\xc5\x99\x5c\xfd\x6e\x44\xf6\xca\xaf\x73\xaf\x47\xac\xcd\xcf\xb7\xfd\x50\x72\x60\xd7\x97\x26\xd8\xa3\x36\xee\x7c\xae\x5a\x7c\x14\x85\x77\x94\xae\x42\xac\x74\x5e\xf2\xcc\xbc\x32\x48\x44\x27\x25\xc0\xb8\xde\xa2\x49\xa1\x70\x55\x95\x5e\x85\xf7\xa5\xcf\x26\xc5\x79\x66\x95\x12\xc3\x75\x9f\x45\xcb\x17\x5d\x64\x4f\x88\x7d\x64\x07\xbd\x73\x09\xe2\xe0\x09\xf0\xc0\x8e\xb0\xaa\x54\x43\xd6\x29\xba\x31\xe7\xa8\x33\xa1\xa0\xa4\x15\x35\x6c\x84\x93\x9b\xc2\xe6\xb1\x36\x77\x83\x97\x5a\x3e\xd4\x83\x0b\xc4\xc1\x13\xe0\x7a\x04\xc9\x2d\x2d\xdb\x5a\xf5\xb4\x5a\x9c\xfc\xe7\x74\xbc\x07\x85\xe9\xa6\xe2\x1d\x64\xd7\xd8\x9a\xae\xfc\x9e\x96\x5b\xc9\x32\x43\xc4\x05\x71\xf0\x04\x88\xea\x67\xd0\x80\xb3\xa9\x9d\xcc\xac\xd8\x80\xc5\xce\x1a\x54\x9f\x6a\xc0\x17\xfc\x4c\x78\xbb\x5a\x55\xf3\xd1\x16\xb5\xd9\x03\x0d\x44\x5c\x10\xe7\x2f\x87\x82\xf1\x6f\x5c\x1c\xaa\x17\x99\x81\x4f\xc8\xa8\x34\x38\x03\x6e\x9b\xb3\x4c\x48\x67\xbe\x9e\xef\xb8\xf8\x3c\x40\xaa\x08\x03\x77\xf9\xb0\x8f\x6e\x1e\xe1\x95\x41\x1c\x54\xaf\x7c\x2a\xaf\x0c\xfa\x5e\x9f\xa4\x04\x1d\x42\x7e\xc1\x85\x26\xf4\x06\x0d\x83\x8f\x52\x62\xfb\xfe\xe7\xb5\xf5\xe7\x5c\x70\x63\x36\x55\xdd\xb7\x6e\x69\x16\xd3\xbf\x4a\x45\xcc\x00\x88\x83\x2b\xa1\xb4\xc4\x85\x01\x3f\x71\xe4\x8b\xd6\xe0\xac\x4d\xce\x4d\xd3\x6f\xc7\x37\x76\x32\x78\xcd\x28\x87\x09\x99\xb3\x72\xec\xa3\x64\xd4\x10\x71\x41\x1c\x5c\x09\x0d\x8b\xe3\xd2\x6e\xfd\x18\xf9\x1a\xfe\x92\xe9\xd1\x68\x4e\xeb\x2b\xa8\x2a\xb4\xa4\x4e\x98\x3a\xab\x02\x5b\xea\x02\x6f\x82\xcf\x21\xe2\x82\x38\xb8\x12\xb8\x17\xa4\xc3\x7e\x1f\x3a\x86\x4c\xcd\x28\x73\xbc\xb2\x92\x8c\x8d\x6a\x50\x0d\xa0\x4b\x5f\xf5\x28\xb8\x70\xc9\xea\xee\xda\x39\x0f\xe8\xce\x38\x80\x83\x2b\x41\xbe\x3e\x19\x5b\x82\x7a\xd1\x65\x39\x47\x0f\x7b\x84\xc9\x1e\xc7\xad\x81\x6a\xbf\x2e\xfe\xe0\x53\x5e\x45\xdc\x1d\x73\x89\x8a\x06\xc4\x56\x08\xc4\x41\x95\x89\xa7\xf3\xca\xa0\xb5\xf6\x24\x29\xe4\x61\xd3\x18\x92\xfd\x9d\x8b\x48\xa2\xd7\xcd\x0d\x0f\x78\xff\xf9\xb7\x95\x8c\xc6\x30\x45\xb6\xed\xa3\xe8\x74\xfd\x62\xe3\x92\xcf\x88\x29\x00\x71\x70\x29\x0c\x54\xb3\x54\x70\x77\x66\x2a\x7c\x74\x13\xdd\xbb\xce\x85\x3b\x7d\x49\x90\x21\xc8\x44\xfc\x96\x52\x5b\x5d\xc2\x3e\xf1\x2b\x5a\xa8\x74\x1d\xc4\x21\x19\xa4\x03\xef\x04\x42\xce\xeb\xca\x1a\x7f\x16\xd1\x73\x82\x66\xe9\xe4\xe4\x9e\x7e\x94\x21\xb9\xa2\xf3\x4e\xf6\x82\x4a\x4b\x9e\xeb\x47\xc8\x20\x01\x38\xb8\x14\xc4\x51\xe3\x2b\x42\x7d\xd6\x7f\x8c\xe1\x19\x55\xf1\x9a\x1a\xc5\xe6\x7a\x88\xda\xcd\x31\xff\xad\x67\x9f\x9c\xef\xc9\x33\x4d\x81\x9e\x25\x03\x71\x70\x29\x60\x09\xce\x30\x76\xdc\x52\x7c\xe1\xe7\xed\xc0\xc0\x89\x8d\xba\x5d\xd8\xd1\xeb\x74\xf4\xba\x58\x55\xdb\xe3\x58\x5d\x78\x22\x6c\x0d\x21\x05\x10\x07\x55\x26\x9e\xce\x2b\x83\xf2\xdf\x89\xbd\xbd\xbe\xdd\x5a\xe4\x3a\x9f\x8c\xd9\x13\xb3\xf2\x67\x56\xaa\x2f\xa3\xe3\xaa\x9e\xe4\x85\xa1\x40\x4f\x9a\xbb\xbc\x9d\xad\xb1\xbe\xfb\x50\x6f\x2f\x00\x07\x97\xc2\xf9\x69\x81\x48\xeb\xa2\x99\x2e\xa5\xda\xa0\x61\x7e\xcd\x8f\x73\x3c\xbc\x95\x18\x5f\x58\xb6\x43\x78\x1b\x99\x48\xa5\x4b\x0e\xa0\xf7\x17\x40\x1c\x52\x8d\xce\xf7\x91\x14\x46\x14\xd3\x8d\x9b\xcd\x4c\xca\xef\x15\x3f\xb5\xff\x88\xe1\x7c\xf0\x00\x2d\xda\x67\x6e\xcf\x04\x37\xb1\x97\x00\xba\x8e\x0f\xe2\xe0\x52\x90\xe5\x2d\xe3\xe2\x58\xb0\x94\xab\x5c\x27\xa2\x6c\xae\x6c\xd4\x59\xaa\x12\xcf\x6a\xb1\xcc\xe8\xa4\x4f\x7a\x69\xd5\xd1\xcb\xf8\x02\x11\x17\xc4\xc1\xa5\x40\xb4\xc0\x3b\x9e\x7c\x2d\x26\xe3\x39\xc7\x39\x46\x3b\x5f\xb3\x6e\x51\xad\x0a\xac\x69\xdf\xac\xc7\xb2\xe6\x32\xc4\x62\x03\x11\x33\x08\x29\x80\x38\x68\x55\x38\x9d\x57\x06\xed\x49\x4e\x92\x02\x3a\x93\xd2\xf0\x54\x90\x4f\x2b\xae\x54\x4e\x7e\x23\x5e\x96\x74\xe9\x15\x55\xc6\x4f\x55\x02\x6d\xfa\xb1\x8b\xaf\xf3\x06\x94\xa1\xe7\xb8\x40\x1c\x5c\x0a\xda\x37\x5f\x5a\xde\x32\x23\x8d\xef\x7a\x63\xc2\x6a\xd4\x12\x30\x65\x17\xd8\xb9\x64\xc9\x99\xdf\xb0\x6c\x68\xb8\x78\x4e\xbf\x19\xea\xf8\x07\xe2\xe0\x52\x70\x7d\x2a\x36\xa6\x3d\xb7\xf7\xe5\x79\x66\xbb\x15\x2f\xc5\xaf\x37\x19\xf5\x9f\x36\x31\xf3\x57\xcd\x15\x37\xdf\x6b\x6e\xb0\x87\x43\xed\x3a\x41\x1c\x5c\x0a\x43\xf7\x7f\x73\x5a\xd0\x3a\xb8\xba\xf4\x86\x38\xaf\x98\xac\x96\xde\x6a\xde\xc0\x20\x65\x09\x9e\x41\x19\xe3\x72\x23\x08\x3b\x84\xda\xdd\x81\x38\xb8\x14\x78\xba\x7c\xee\x34\x8a\xcd\x8d\x8d\x0d\x56\xd5\x7f\x7e\x69\x7d\x23\xbf\x68\x78\xb5\x8b\x6f\x8f\x53\x71\x08\x5d\x89\xf7\xa1\x91\x19\x42\x0a\x20\x0e\x5a\x15\x4e\xe7\x95\x41\x3e\xeb\x64\xaf\x5c\x59\xbb\xa7\xc9\x1c\x65\x45\x7a\x1b\x73\x55\xfc\xcd\xd3\xbb\x1a\x7e\xe4\x6a\xab\x5f\xab\x43\x5c\xb8\xb9\xc6\xdf\x99\xa4\xdf\xe5\x40\xf8\x4e\x10\x87\xec\x95\x3f\x3d\x18\xdc\x37\x63\x90\x58\x2f\x7c\x66\x61\xb8\x8e\x66\x9a\x23\x37\x18\xb0\x66\x3e\xf7\x9d\x2f\xc5\x66\x70\xd8\xa4\xf7\xba\x0e\x22\x32\x88\x43\xf6\xca\x71\xdd\x77\x0e\x96\x3e\x92\xbf\x5f\x13\xa9\xe1\x2b\xa0\xe2\x08\x7e\xdc\x81\x92\x48\x3c\x89\x33\x7c\xfc\xfb\xdb\xdf\xcb\xc3\x26\x93\x88\xc8\x20\xee\xff\x79\x65\xda\xff\x5c\x98\x3a\xed\xfb\xca\x3f\xca\xab\x9c\x6a\xe5\xc9\xd1\x45\xf3\x5d\x71\xb0\x67\x50\xf5\xc2\x94\x08\x2f\xac\xd9\x24\x91\x87\xb4\x24\x1c\xd7\x48\x1b\xac\xfc\xeb\x95\x47\x2e\xdd\x5e\xa5\xa0\x74\x5b\xe9\xfa\xd1\xdd\xc4\x31\xf1\x52\xba\x16\xc5\xee\xd3\xed\xae\xd8\xd8\x6f\x6a\xf6\xe7\x5e\xf3\x45\x7d\xfd\xf7\x38\xee\xe2\xe5\x63\x9a\xf7\xbe\x22\x7b\xce\x57\x28\xb9\x9d\x12\x74\x9c\xa7\xd0\x03\x50\xec\x77\x7e\x64\xce\x63\x11\x5b\xa7\x8c\xa5\xff\xaf\x79\x65\xd0\xd0\xfe\xad\x57\x56\x83\xfb\xa9\x27\xee\x77\xfc\x6e\x59\x2d\x47\xae\x71\xe6\x61\xfd\xfd\x12\x71\xa9\x4e\xa9\x73\xd0\x7e\x7f\xb0\x0b\x53\xff\xb9\x69\x92\x5b\x43\xd3\x99\x1c\x79\x22\x7b\x65\x03\x9f\x24\xdc\xf8\x68\x63\xbb\x5d\xd2\x68\xb6\x28\x67\xe3\xaa\x92\x4a\x55\xff\xcf\xdc\x1c\xb2\x5d\xc3\xd3\xf9\xad\xc4\x4c\x62\x67\x72\xc0\xab\x8d\xf4\xb1\x76\x13\x45\x52\xe5\x4f\x5e\xc7\x68\xbb\xe2\xe9\x24\x49\xd4\x68\xd6\xf9\xc4\x45\x16\x66\xa1\xaf\x48\x98\x0f\xaa\x67\x25\x37\x54\x9e\xc9\x68\x91\xbd\x32\xc5\xfb\xfa\x59\xf2\xfb\x37\xbe\xa5\xce\xa2\xd8\x51\x84\x5c\x1c\xd0\x61\x31\x2f\xf2\xcc\xdc\x6c\xc9\xf0\x75\x4f\xc0\x6a\x39\xe2\x3a\x93\xd1\x3e\x45\xfa\xd8\x01\x0d\xda\x58\xeb\x4b\x04\x77\xc9\x05\x78\x43\xbb\x6b\xe2\xf6\x3e\xa3\xda\x61\x27\x5c\xa7\xd4\x36\xec\xdf\x8f\x0f\x2e\x99\x92\x3a\x33\xaf\x0c\x12\xd1\x49\x09\x30\x79\xcc\x82\x0c\x17\x8b\x5d\x40\xa5\xda\x96\xd9\x0b\x5d\x62\x38\x09\x37\x91\xb3\x7a\xb8\x69\xd4\x85\x7c\xb7\x3d\x23\x6d\x03\xaa\xce\x04\x71\x48\xcf\xc3\x18\xab\x99\x94\x0e\x89\x55\x2f\xbd\xc8\x22\x94\x92\xb9\xb5\x92\x16\xfb\x97\xac\x73\x13\x83\xeb\xaa\x98\x6a\x9c\xe3\xf4\x78\x20\x22\x2e\x88\x83\x27\xc0\x0f\xf2\x28\x59\xcf\x0a\xf6\x4c\x1e\x67\xab\x12\xce\x1e\x9d\x23\xb7\x8f\x93\x0c\xe9\xc2\xc6\xc2\xe1\x32\xef\xfa\x38\x9d\xf6\x0b\xda\x0b\x81\x38\x78\x02\xd4\xc0\x71\xb7\x18\xaf\xbe\xe3\xba\x5c\xf1\x1c\xc5\x75\x7f\xd1\x2a\xbf\x76\xc0\x08\x27\x5b\x3f\x3e\x68\x6f\x8d\xc2\xcc\x3b\x1f\x7a\xc3\x04\xc4\xf9\xcb\xa1\xc8\xfc\x1b\xd7\x6f\xd5\xec\xc3\x2d\xad\x68\xb4\x36\xca\xef\xc7\x57\xeb\x59\x8c\x56\xa4\x3d\xf7\x79\x59\x7e\xcc\xbc\xa1\xfb\xf1\x2c\x52\x20\x1b\xba\x83\x0d\xe2\xa0\x7a\x65\xb5\xd3\x6c\x85\x40\xdf\xeb\x93\x94\xb0\xc0\x56\x7a\x75\xc1\xf7\xf1\x0b\xd7\x11\x39\x0c\x55\x29\x17\xcc\x88\x86\xa5\xd7\x84\x07\xd5\x9a\xb6\x11\xb6\xa5\x0e\xb9\x6c\xd0\x8b\xd8\x20\x0e\xae\x84\x9b\x02\x93\x5b\xc5\xb8\x03\x4b\x03\xfb\x1d\xe7\xb7\x6a\xbd\x19\x6e\xb5\xde\x9e\x54\x32\xdb\x5b\xaa\xe0\x43\xe1\x70\xbc\xaa\xfb\x04\x3a\x91\x01\x70\x70\x25\x04\x2b\x2a\xa5\x1f\x1c\xb3\xe1\xa4\x52\xe2\x8e\x88\x0e\xfe\x69\x68\xe6\x7d\x2c\xdd\xa8\xd5\xf8\xd9\x78\x22\x2a\x09\x27\xb1\x0e\xf2\xe0\x20\x0e\xae\x84\xca\x95\xbb\x23\xee\xf1\xe3\x8e\xb1\x28\xdd\xdc\x54\x11\x49\xc9\x3b\x1b\x51\xbc\x7d\xdb\x91\x6f\xfd\x5d\xfb\xf3\xf3\x6e\x85\x42\xbb\x62\x10\x07\x57\x02\x4f\xc4\x80\xe6\x3b\x21\x6b\x34\x86\xcc\x84\x8f\xf8\xc5\xd9\x76\x2f\xca\x59\x58\xeb\x13\x1e\x99\xb9\x99\x34\x38\x07\x37\x56\x70\x40\x5b\x21\x00\x07\x55\x26\x9e\xce\x2b\x83\xd6\xda\x93\xa4\x90\x89\x43\xdf\x3f\x13\xe7\x7a\x31\x4d\x6a\xe3\xbc\x2b\xe7\x50\x9d\x08\xa9\x42\xd8\x41\x89\xa3\x30\x49\xc7\xb0\xcd\x7e\x5f\x93\x3a\xd4\xde\x0c\xc0\xc1\xa5\xa0\xcf\xaf\x19\x93\x8b\xf9\xc1\xd7\x29\xce\xf0\x8f\xf5\x54\xb8\x49\xf0\x5e\xc9\x85\xda\x8c\x37\xec\x03\xaf\x93\x3b\xf8\xba\x2c\xa1\xeb\xed\x20\x0e\x2e\x85\xd5\xef\x83\x0a\xf8\xc7\x53\xb7\xa9\x96\x63\xcb\x6c\x0b\x13\x0a\x16\x29\x1a\xaf\xbc\x0e\x2e\x70\xbb\x5d\x8d\x89\x86\x3d\x93\x09\x3d\xf3\x05\xe2\xe0\x52\x58\xa4\x51\x99\xf9\x45\x91\xb4\x58\x6e\xba\x83\x8a\x31\xda\x2e\x7a\x2f\x54\xf0\xa0\xf5\xbc\x72\xfb\x5c\xad\x16\xc3\xb1\xba\xc0\x36\xd4\x0f\x1c\xc0\xc1\xa5\x80\xd7\x34\x10\x2f\x46\x15\x76\x7c\x27\x1d\xfb\xcf\x3b\x3c\x91\xc7\xdb\x3e\x94\xac\x24\x63\xbe\x3f\xaf\x29\x57\xec\xfa\xec\x28\x41\x0f\x05\x81\x38\xa8\x32\x51\xfb\x54\x52\x00\xe5\xbf\x93\xa4\xd0\xc9\x6c\x9a\xfe\x3c\x18\xef\xfa\x8a\xf5\xa8\xed\xc1\x21\x2e\xd6\xd7\x2c\x2d\xd5\x88\xa2\x27\x18\x1b\x04\x59\x86\x0e\xf8\xd4\xeb\x88\x29\x00\x71\x70\x29\xbc\x1a\xfa\x70\x49\xbf\xe9\x9d\x28\x03\xf3\x0e\xb9\x41\xdd\xf5\x98\xa0\xd2\x9b\x7f\x96\xc5\x31\x1f\x68\xf7\x5a\x5d\x70\x56\xeb\x87\xce\x95\x41\x1c\x5c\x0a\x1a\x73\x7f\x6c\x78\x89\x09\xa2\x30\x08\x53\x06\xf7\x64\x4b\x73\x2a\xf3\x6c\xcb\xc7\x05\x2e\x4f\x3f\xf8\x5b\xff\x25\x6a\xc6\x93\x18\x5a\xc7\x01\x1c\x5c\x0a\x44\xc5\x7f\x34\xb3\x88\x1e\x7b\x68\x49\x52\x4b\xbe\xd0\x19\xbf\x22\xfb\xc6\x89\xe9\x3b\xb6\xd4\x1b\xfc\x9e\x83\x82\xed\x9f\x24\x25\x88\xb8\x20\x0e\x2e\x05\x12\xe7\x92\x0f\x01\xa9\xf2\x6f\xbe\xdd\x59\xdd\xe5\x49\xfa\xfd\x46\xe4\x05\xca\xdd\x1a\x54\x9e\x69\x39\x3d\x15\x23\x8e\xe5\x91\x40\x84\x14\x40\x1c\xb4\x2a\x9c\xce\x2b\x83\xf6\x24\x27\x4a\x61\x4d\xb9\xd0\xea\xf0\x36\x27\x67\xe6\x71\x43\xd6\x67\xfa\xfc\x81\xeb\xbc\xf8\xca\x1c\x29\xaa\xa6\xd3\xc3\xc5\x66\xf4\xa5\xd0\xfb\xca\x20\x0e\xe9\xc7\xd4\xed\x2c\x94\x21\x25\x96\x9a\x00\x23\x79\x82\xd2\x40\xa1\x82\x1f\xa4\xaf\x07\x0c\x47\xa3\xe6\x22\xdd\x6c\x18\x7b\x28\xe8\x21\x0f\x0e\xe2\xe0\x52\x78\x13\x27\xa1\xd5\xcc\x72\x13\xc5\x2f\x95\x45\x78\xaf\x40\xee\xe3\xf7\x49\x77\x0d\x29\xce\x77\x43\x04\x62\x36\x9c\x7f\xfb\xf9\xa0\x87\xfd\x41\x1c\x5c\x0a\xf5\x14\x46\x52\x21\x1d\x6e\x0d\xdb\xe7\x23\x8d\x51\xb6\x6c\x0b\x1d\x47\x70\xbf\xff\xca\x2e\x6d\xe1\x7c\x34\xe9\x77\xb3\x85\x1a\xea\xf8\x07\xe2\xe0\x52\x70\x1f\xd4\x0b\x19\xdf\x45\xe1\x77\xd1\x75\x2d\x64\xe6\x35\x38\xa8\xf4\x16\x14\x97\x63\x70\xec\xd8\x40\xed\xae\x26\x91\x14\x5f\x40\x48\x01\xc4\x41\xab\xc2\xd3\x53\x79\x65\x90\xcf\x3a\xd9\x2b\x2b\xff\x15\x2e\xf7\x5b\x67\x45\x31\x9f\x9d\x76\xb0\x0e\x8b\xe3\xbd\x42\xe9\x61\xf3\x2a\xa2\x6e\x69\xfa\xd6\x3b\x06\x27\x57\x14\x3b\x84\xef\x04\x71\xc8\x5e\xd9\x46\xc2\x3f\x2a\xbe\xeb\x91\x77\xd5\x4f\x6b\xe3\xec\x47\x0f\xee\xfc\x6a\x6d\xb3\x8d\x58\xed\x28\x9a\xa7\x74\xa5\xdd\x3e\x7f\xfd\x15\x22\x32\x88\x43\xf6\xca\x9f\x5a\x71\x43\xd6\x6e\x31\x4a\xbf\xfd\x46\x7a\xad\x8d\x7a\x01\xbf\x98\xc7\xe3\xc9\xbd\xc0\x17\x17\xc3\x2f\xe2\x3d\xfd\x46\xfb\x2a\x16\x72\xe1\x00\xee\xff\x79\xe5\xff\x94\x9a\x9f\xfa\x7d\xe5\xd7\xc7\xb2\x0d\x3d\xaa\x84\x37\x6f\x27\x5d\x25\xbf\x29\x14\x16\x57\x1c\xef\x55\xdc\xb2\x51\x27\x9c\x77\x9d\xb2\xe0\xf5\x3e\x17\xeb\xbf\x5e\xd9\xb0\x30\x41\x66\xd4\x8d\x26\x30\xca\xf7\xe7\x03\x63\x57\x7b\xc9\xa4\x16\x3d\x6a\xf1\x5a\x81\xde\x15\x92\xd1\xc2\x05\x0d\x5a\x8a\x7f\xd0\x5f\xb8\x4e\x2e\xea\x4b\xf9\x4c\x7d\xc6\xe9\x31\x62\x8a\xcd\x7f\xef\x28\xe9\x77\xb0\x99\x5e\x5d\xea\x94\x12\x9c\xf6\x3f\x97\x47\xfa\xbf\xe6\x95\x41\x43\xfb\xb7\x5e\x19\xc9\x2b\x2f\x3d\xe6\x8a\xe2\x68\xc1\x6e\x29\x69\x77\xd4\x17\x7c\x49\x9e\xf1\xb9\xd0\xf6\x16\x86\x76\x9d\x2a\x9b\x0a\x16\xd6\x58\x34\x15\xf1\x99\x1c\x79\x22\x7b\xe5\xe0\xe6\x85\x3f\x82\x15\xb5\xdc\x17\xd0\x5b\x2c\x3f\xf0\x89\x14\xdc\xb1\x20\xcf\xd1\x47\xb5\x7a\x62\xa7\xe5\x35\x61\x87\xde\x81\x79\x26\x07\xbc\xc8\x5e\x79\xf2\x31\xe7\x8d\x17\x41\xab\x72\x49\x91\x02\x0c\xad\x0d\x16\x79\xcd\xda\x9c\xd8\xb9\xe7\xb3\xc6\xbc\x3e\x1a\xc5\xf9\xd3\xbd\x28\x3f\x93\xd1\x22\x7b\xe5\x3d\x34\x5e\xdc\x5b\x6b\x51\x8a\x92\x31\xfe\x13\x6b\x5b\x04\x14\x2c\x45\xad\xd7\x57\x7c\xde\xf5\xfd\x48\x5b\xa0\x6a\x7d\xb7\x2d\x78\x26\xa3\x45\xf6\xca\xaf\xc9\x9e\xf5\x6e\x1b\x17\x53\x07\x73\x96\x15\x7c\xa1\x16\xad\x51\x6c\x97\xff\xa9\x1b\x7e\x1c\xa1\x9d\x9a\x7a\xdb\xa7\x6a\x89\xed\xcc\xbc\x32\x48\x44\x27\x25\xc0\x08\x0e\xc5\x2f\x05\x4e\xf3\xd3\x5c\xc3\x07\xd8\x6f\x73\x77\x38\xdb\x05\xae\x89\xd7\xc5\x3e\xbb\x76\xf9\xce\xdc\x8d\x94\x73\x5d\xd0\x05\x28\x10\x87\x94\x00\x89\xcd\x84\x3e\xdf\x0f\x30\x2f\x4a\xbf\xc1\x3d\x3e\x14\x13\x67\x2e\x3e\xb8\xa1\xd6\x75\x64\xbd\x51\xb1\x9f\xe6\x57\xfe\xd5\x0a\x4a\x80\x00\x0e\x9e\x00\x99\xcd\x09\xa8\x8b\x7f\xff\xac\x66\xbc\x48\x9e\x60\xa7\x6b\x98\xeb\x59\x16\xc1\x22\xfc\xb3\xb0\xbb\x4e\xd1\xa1\x5c\xf2\x4a\x5b\x03\x22\x2e\x88\xf3\x97\x23\xfa\x6f\x17\xe8\xb7\x6b\x17\xaf\x9b\x45\x5b\xfc\xfd\xca\xcd\xc8\xa2\x2a\x39\x7d\xed\x87\x5a\x13\x99\x01\x1f\x2a\x7d\x55\x96\x4c\x4e\xc9\x86\x22\xd4\x05\x1a\xc0\xc1\xe7\x37\xfd\x9a\x06\xc1\x36\xd6\xde\xa5\x64\x07\xad\x69\xe2\x65\xe7\x2d\x6c\x62\x99\x3d\x8b\x6d\x6a\xf1\x46\xac\x3d\x51\xf9\xa2\x90\x39\x84\x57\x06\x71\x50\xbd\xf2\xa9\xbc\x32\xe8\x7b\x7d\x92\x12\x7e\x96\x29\xbf\xd8\x4b\xdc\x7c\x35\x7a\xf7\xf2\x75\xf1\x54\x92\xc2\x5b\xbd\xee\xe4\x06\xf7\x6f\x1b\x1b\x9d\xa3\xc9\x7f\x4a\x85\x9a\x80\x98\x01\x10\x07\x57\xc2\x67\x2c\x76\x69\x3c\xcd\x6f\x98\x42\x94\xcf\x67\x1f\xb7\xd4\xde\xb3\xd4\x31\x0b\xcc\xa3\x2b\xe7\x6a\x35\x41\xc7\xc4\xc0\xb9\x55\x89\x88\x0b\xe2\xe0\x4a\xb0\x53\xd0\x7c\x9d\xcd\xec\x77\x2e\x9e\xe5\x62\xd8\x85\xe8\xd2\xab\x7c\xe6\x3a\xe5\xba\x04\xed\x55\x35\x9e\x92\x97\xd4\x88\xc3\x1e\x21\xe2\x82\x38\xb8\x12\x56\x7f\x6e\x7a\xa0\x5b\xbb\x8d\x12\x8c\x87\x5e\xe4\xf4\xa5\x37\xf9\xbc\x21\x36\x7a\x50\x32\xc0\xa0\x9a\x65\x77\xb5\x4f\x46\x0f\x6a\xaa\x0c\xe2\xe0\xf3\x1b\x7a\xdf\x7a\x58\x40\xe5\x7d\x6d\xb2\x01\xfd\x39\x7e\xda\x63\x56\x1d\x7a\x1d\x7e\xde\xf4\xd5\x4e\xbe\x0c\x05\xdd\x2a\xcf\x9e\x7c\xc4\x56\x08\xc4\x41\x95\x89\xa7\xf3\xca\xa0\xb5\xf6\x24\x29\x8c\x1f\x37\x61\x97\x15\x6a\x34\xdc\x7e\x58\x46\xdb\x72\x51\xb0\xe3\x4b\xdc\xdd\xa4\x83\xb4\x75\xf9\x2b\xe5\x1f\xb3\x0b\xa4\xac\xa0\xa9\x05\x71\x48\x52\xe8\x34\xdd\x0f\x36\x32\xb0\x64\x1a\xc0\x67\xea\x0d\x10\x9e\x1c\x90\xeb\x62\x6c\x0f\xd8\x5b\x69\x65\xa6\x7f\x99\xd5\xbf\x58\x0f\x49\x01\xc0\x21\x75\xf1\xe1\xbf\xe5\x87\x47\xc4\xaf\x59\x5c\xf8\x81\xec\x6b\x99\x5a\xa2\xf2\xd1\x3b\xb3\xfa\x6c\xb2\xa2\xf1\x77\xd8\xe9\xe9\xbb\x39\x1d\x50\x17\x1f\x00\x07\x97\xc2\x44\x91\xc1\xaa\xb1\xed\xbd\x0a\xa1\x61\xba\xe6\x4b\x79\x57\x49\x4a\x59\x75\xcd\x9a\x47\x5a\x55\xa4\x1c\x62\xa7\x76\x72\x84\xa1\x26\xd0\x20\x0e\x3e\xbf\xfe\x53\x22\x3d\xc1\x07\xde\x57\xee\xec\x56\xca\x46\xde\xea\x6e\x2b\x66\xb8\x9c\x2c\xa2\x8b\x33\xe3\x7c\x2d\x9d\xb3\x84\xe4\xa6\x3a\x42\x0a\x20\x0e\xaa\x4c\x3c\x9d\x57\x06\xe5\xbf\x93\xa4\x10\x8c\xa7\xfa\x66\x7b\xb1\xe0\x4d\x95\xf4\x02\x0e\x3b\xa9\xf2\x95\x20\xb6\x47\x0c\x92\x11\xdb\x49\x2f\x89\xa2\x48\x8c\x2d\xd8\xa1\x4a\x07\x10\x87\xf4\x82\x9a\x8b\x31\xea\xa4\x00\x61\x1e\x37\xc3\xf4\x46\x71\xa9\xad\xbb\xac\x89\x87\xe8\xfd\xe5\x5b\xe1\x5e\x86\xd4\x85\xe8\x75\x5d\x6b\x88\xb8\x20\x0e\x2e\x85\x67\x1b\x8d\x1d\x97\x85\x68\xda\x45\x48\xa5\x08\x5a\xdd\x70\xc4\x3c\xd7\xae\xd3\xff\x20\x92\x75\x21\xa9\xe5\xb9\x71\xc3\x64\x1f\x6a\xb5\x0e\xe2\xe0\x52\x30\xc2\x99\x4c\xb6\x7a\x78\xdf\x50\xc9\xb8\xfe\x2b\xd5\xaa\x69\xc1\x39\x37\x4b\x0d\x8e\x9d\x24\x83\x57\xc7\x34\x92\x34\x9f\x8d\xa1\x2b\x06\x20\x0e\x3e\xbf\xf4\xdf\x19\x8d\x8e\xff\x1e\x47\xcb\xc5\x84\xf4\xf6\x50\x4f\x86\x59\x29\xf1\x4a\xd4\x6c\x8b\x36\x19\x45\x4d\x5f\xb2\xba\xe9\xae\x83\x90\x02\x88\x83\x56\x85\x53\x9e\x2b\x03\xf6\x24\x27\x16\xe9\x68\x66\x3b\x3d\x54\xd1\x8f\x97\x18\xaf\x5f\xe8\x9b\xb8\xc3\x96\x91\xa1\x11\xd9\xa7\x74\xcf\x93\xd3\xf5\xaa\x8a\x83\xae\x8b\x2c\x54\xa4\x03\xe0\xe0\x52\xf0\x77\xc9\xa7\x7d\x7d\x60\x45\xea\xef\x90\xf5\x54\xf3\xcf\x55\xc2\x17\x1a\x24\x8f\xe8\xb6\x8a\x06\x1e\x60\x94\xe9\x4e\xd9\xb0\x30\x23\xe2\x82\x38\xb8\x14\xae\x98\x79\xe2\x15\x99\xf9\x69\x7c\xbd\xb9\x60\xd0\xff\x45\xee\x15\x69\xa3\x1b\xdf\x3c\xf1\xb2\xc2\xe6\xd6\xa3\xd0\xba\x17\xae\x50\x31\x0d\x88\x83\x4b\xa1\x66\x73\xe3\x65\xb4\x65\x9f\x89\x9d\x4e\xb8\x23\x1d\xbb\xe2\xbb\xf3\xa1\x78\x3f\x0b\xef\xfd\xc8\xfe\x40\x6c\xef\xf0\xd4\x38\x95\x15\x9a\x07\x00\x07\x9f\x5f\x2f\x2c\xb3\xfa\x7b\xc9\x7d\x0a\xae\x54\x45\x2e\x9f\x2e\x8e\x30\x2d\x9f\x7b\x8e\x4e\x21\xd6\x9c\xa9\xca\xca\x36\x7b\x3f\x3b\x4b\x17\x21\x05\x10\x07\xad\x0a\xa7\xf3\xca\x20\x9f\x75\xb2\x57\x3e\x22\xfd\x8d\x21\x92\x50\xf8\x36\x8f\x65\x86\xc2\x5a\xea\xd2\xd2\xe5\x05\x34\xd2\xa0\x34\x13\x5b\x7f\xbc\x73\xbf\x04\xd5\xaf\xcc\x42\x6f\x15\x03\x38\x64\xaf\xfc\x17\x2d\x93\x15\xd5\x94\x5e\x3a\x88\xaf\x49\x80\x5b\x5b\xa5\x69\xca\x89\x51\xcd\x51\xa7\xa6\xe3\x4a\x1b\x7a\x45\x40\xdb\x78\x37\x22\x32\x88\xf3\x57\x40\xa1\xfd\x6f\x64\x3f\x9c\x20\x12\xf6\xbc\x79\xae\x0d\xb1\xbb\xf1\x42\xbd\x64\xdd\x32\x0f\x79\xa6\xe6\x52\x9d\x65\xd4\x98\x24\xcf\x9b\xed\x08\x13\x23\x22\x83\x38\x7f\x05\x54\xd8\x6c\x9c\xfa\x7d\x65\x1b\xfa\xdb\x62\xc3\xfe\xe9\xdf\xbb\xe9\x23\x5c\x7e\xbe\xa8\x7e\x99\x16\xb2\x54\x24\x55\x12\xfe\xad\x5b\x67\xb2\xc1\x4d\x6d\x08\xfd\x5f\xaf\xcc\x77\xbd\x3c\xfd\x86\x5d\xca\xab\xb2\x37\x2f\x8e\x56\xe2\x0b\x9b\x26\xf2\x2b\x1e\x28\x94\xfc\x4e\xe5\x09\x6e\xf5\xb7\x6c\xa6\xd7\xf9\x07\x1d\xfe\x2d\xcb\xad\x1a\x2a\xde\x27\xaf\xd1\x83\xbb\x5a\x2a\x7e\x93\x76\x91\xb9\xa3\xf1\x73\xaa\x24\x2f\x26\xbd\x52\x73\xf6\xaf\x07\xff\x6b\x5e\x19\x34\xb4\x7f\xeb\x95\x91\xbc\xf2\x90\x95\x9f\xd4\x37\x2f\x9e\x69\xb2\x19\x07\xbc\xd1\xf9\xd4\xac\x0c\x75\x95\xfa\x1c\x6d\xe1\xe7\xa5\x5f\x16\xba\x93\x07\x3e\xc5\x9f\xc9\x91\xa7\x10\x92\x8d\x2b\x77\x30\xe4\x1f\x66\xc8\x95\x98\x98\xc0\x79\xbe\x4b\x5d\xb6\xfc\x2d\xf8\xc9\x79\xd1\xa4\xf6\xad\x78\x9b\xfb\xec\x6b\x11\x69\xb5\x67\x72\xc0\x8b\xec\x95\x1b\xd3\x5a\x30\x59\x94\xb2\x7b\xf1\xdf\xcb\x7b\xda\x4b\xea\x0a\x51\xee\x7f\xfc\xfd\x87\x59\xf8\x7d\x56\x82\x36\xaf\xbb\x76\xc8\xd9\x8c\xf6\x2e\xd2\xc7\xc6\x70\x19\x84\x3f\x5c\x54\x2c\xf6\xcf\xb3\x7c\x26\x47\xaf\x1c\xb4\x52\x97\xa8\x20\xf0\xb9\x28\xe6\x66\xbd\x9f\x43\xbb\xeb\x34\xe1\x99\x8c\x16\xd9\x2b\x2f\x67\x0e\x4a\xbb\x6e\x45\x70\x61\xf5\xfe\xc4\xb4\xe7\x79\xcd\xbc\x6f\x6d\xfc\x21\x45\xbe\xff\x3a\x69\x81\x5c\xcc\x66\x5e\x42\xd7\x99\x79\x65\x90\x88\x4e\x4a\x80\xcf\x6d\x27\xae\x5a\xb8\x61\xda\x3a\x09\x3d\xf6\x65\xfc\x90\xbe\x87\x79\xcf\x12\x85\xee\xce\xd4\xe3\x58\x2c\x19\x96\x14\x5d\x47\xe8\x5c\x19\xc4\xc1\x13\xa0\xd1\xdd\xe4\x92\x00\x62\x6b\x2c\x41\x35\xaf\xcb\xdc\x4f\xa4\xf9\x7a\xa8\x14\x58\x38\xeb\xf1\xbf\x61\x2e\x7e\x78\xc7\x34\x70\x71\x01\xda\x5b\x00\x38\x78\x02\x14\x24\xa8\x9f\x4f\xe0\xc9\x2a\xab\xac\xa0\x0b\xfc\x4e\x38\xc7\x79\xf8\x36\xc1\xf8\xf7\xb6\x69\x8e\x62\xc9\x87\x02\xf4\xea\xbf\xd0\xd3\xaf\x20\x0e\x9e\x00\xcb\xe4\x6b\xc6\x3e\xb7\x2d\xc4\x25\x71\xa5\xce\x6c\xaf\xd7\x5c\x55\xae\xe8\xcb\xd4\xfd\x83\x7a\x51\xe6\xd3\x0e\xdf\x9b\xd4\x58\xe8\x55\x5d\x10\xe7\x2f\xf7\xdf\xd7\x04\xf4\x54\x3c\x7e\x17\xd9\x07\xc8\x8d\x3b\x26\x26\x06\xbc\x88\xbc\x9b\x78\x85\x34\xe0\xc1\xad\xe2\x91\x6c\x81\xbc\xca\x1e\x35\xd7\x2e\x84\x57\x06\x71\x50\xbd\xf2\xa9\xbc\x32\xe8\x7b\x7d\x92\x12\x3a\x06\x57\x2e\x7f\x5b\x4d\xf5\x6d\x92\xde\x09\x31\xd2\x37\x93\xfa\x44\xbe\x1f\xd9\xba\x3a\xbf\x6a\x16\xc4\xa9\x94\xd1\x70\x01\x7a\x0a\x03\xc4\x21\xb5\x39\x35\xdc\x61\xd3\xc6\x5d\xa4\xa4\xac\xda\xde\x3b\xb7\xec\x4e\x6a\x8c\xa3\x7c\x4d\xd9\xb1\xe9\xe3\x1d\xd6\x8e\x88\xa6\x94\xc5\x6a\xa8\xcd\x29\x80\x83\x2b\xe1\xee\xd8\x94\xc2\x39\x8d\x07\x95\xbf\xa5\x85\xac\x52\x2f\xfd\xa8\x16\xd8\xaa\xbf\xfc\xb6\xd5\x34\x5e\x8b\x51\x9c\xb5\x58\xb9\x2d\x07\x11\x17\xc4\xc1\x95\xe0\x51\x13\xe7\xee\x4f\x1e\x56\x94\x22\x47\xa1\x50\x82\x99\xfe\xb7\x66\xe8\x62\xd5\xb9\x85\xf0\x60\x09\xe6\x0f\x72\xe5\xdb\xd9\x90\x12\x40\x1c\x5c\x09\xc2\xaf\x65\x8d\xf1\x29\xb5\x7b\xaf\x2d\xc7\x98\x1d\xf0\x1d\x11\xf5\x2c\x6b\x6a\xbb\x27\x6c\xeb\x71\xa5\xc4\xe2\x90\xcd\x3e\xb0\x40\x6c\x85\x40\x1c\x54\x99\x28\x74\xaa\x5d\x31\x68\xad\x3d\x49\x0a\x77\x08\x98\x59\xc2\xbe\x4c\x95\x6c\x98\xaa\x5b\x2a\x37\x4f\xbd\xe5\xb1\x75\xfa\x18\x5d\xe2\x67\x6d\x4a\xc6\x1d\xf3\xe6\xf7\x4a\x30\x62\x0a\x40\x1c\x5c\x0a\x41\xdb\xba\xa4\xf1\x64\xfd\x4d\xfc\xeb\x97\x96\x50\x09\xd7\x5a\xbf\x4d\x17\x4c\x34\xa8\xa7\x39\xde\xd0\x94\x63\x2e\x15\xf2\x84\xe2\x82\x38\xb8\x14\xc2\x6c\x2a\x54\xd7\xae\xaa\x4b\x13\x0e\xd3\xcc\xac\x34\x66\xaf\x51\x1b\x32\x57\xe4\xfd\x29\x3d\x46\xff\xe4\xaf\xc5\x6b\xff\x4d\x06\x11\x17\xc4\xc1\xa5\x20\xa8\x64\xc5\xb8\x63\xd2\xe4\xcf\xfc\xc6\xeb\xcb\x25\x0d\x3e\x2b\x46\x6e\xbe\xf0\x41\x35\xee\x38\x97\xf3\xf3\x29\x24\x09\x8e\xfe\xd0\x62\x03\xe0\xe0\x52\xa8\xf5\xdc\xf3\xbc\xff\xfa\xee\x7e\xa4\x54\x7d\x94\x7d\xe8\xe5\x74\xb4\x1b\x8b\x0e\x77\xed\xe9\x6b\x62\xfb\xd2\xe7\x89\xd0\x46\xbd\x11\x52\x00\x71\x50\x65\xe2\xe9\xbc\x32\x28\xff\x9d\x24\x85\x32\xae\x47\xb7\x16\x4b\x83\xc9\xbb\xc4\x79\xe6\xa3\xb9\xa7\x72\x4d\x6f\xa9\x0e\x14\x78\xf6\x2a\x9c\xff\x2a\x9f\x99\x5f\x6c\x53\x07\xad\x8b\x00\x0e\x2e\x85\x0b\xe8\xac\x52\x39\x11\x9c\x7f\xfd\x8f\x07\x23\xf3\x55\x82\xa5\x3e\x7c\xc5\xee\xf0\xc0\x98\x58\xce\x7d\x21\x7f\xf9\x6e\x58\x02\xd4\x3e\x0e\xc4\xc1\xa5\xe0\x5d\x31\x8d\xdf\x2a\x7b\x25\xe8\x79\xbf\x0a\xa1\x47\x80\x8e\x99\x99\xeb\x47\x46\x89\x9f\x63\x77\x0d\xc8\x87\x5a\x8a\x1b\x6d\xa0\x87\x82\x40\x1c\x5c\x0a\x25\xdc\x26\xe2\x8d\xbc\xbb\xb6\xe4\x6d\x2f\x97\xf0\xa4\x6b\x15\x74\xee\x6d\x12\x98\xb4\x59\xa5\xd0\x3c\xd1\x78\x53\x6e\xfd\x09\xaa\x29\x02\x71\x70\x29\x90\x79\x78\xcd\x0d\x3b\xf6\xdb\x51\xdf\xb5\x7d\x8e\xc6\x52\x84\xf6\x88\xa9\x50\x9f\xd2\xa8\xf4\xa7\x6a\xe7\xb6\x65\x7e\xe1\x0f\x31\x84\x14\x40\x1c\xb4\x2a\xdc\x3d\x95\x14\x40\x7b\x92\x93\xa4\x80\x72\x51\xf2\xd7\x79\x75\xf3\x7a\xd9\xfa\xb8\x16\xac\x88\x87\xaf\x3c\x18\xc7\x7f\xdf\x4c\x94\x12\x34\x51\x25\xa4\x91\x6b\x7a\x0f\xdd\x69\x06\x71\x70\x29\x78\x8f\x45\xd9\x0c\x6e\xa3\x84\x4e\x98\x94\xeb\xa7\xf4\xf4\x8b\x53\xb5\xee\xa3\x88\x36\xbc\x68\x47\xc5\xe4\xe7\xbb\x80\xed\x74\x07\xfa\x97\x01\x38\xb8\x14\xbe\x53\x79\xe4\xde\xeb\xa4\xa7\x41\xe9\x69\xb6\xec\x6a\x67\x71\x42\xe5\x73\xb3\x8a\xbb\xfa\x3c\x6a\xb6\x31\xaa\x85\x31\x0b\x03\xfa\xf9\x1b\xc4\xc1\xa5\x40\x7e\x3d\x87\x66\x51\x81\x6d\xbf\xda\xfd\x12\xe3\x8c\xb5\x58\x57\x6f\x08\x1d\x8a\x77\xdc\x78\xe6\x0e\x37\x57\x26\x9d\x22\x71\x31\x22\x2e\x88\x83\x4b\x41\x50\xfe\x53\x44\x50\xc9\xae\xfa\x82\x6c\xcd\xa5\xf2\x49\xcc\x73\x4f\xb2\x8e\xd0\xc9\xdd\xd8\x34\x4a\x2a\x95\xe8\x7c\x2f\xfc\xb2\x43\x48\x01\xc4\x41\xab\xc2\xe9\xbc\x32\xc8\x67\x9d\xec\x95\xe9\x4d\x57\x92\x7d\xf7\xeb\x36\xa4\x92\x6e\x06\xef\xab\x39\x57\xe5\xd7\x56\x1e\xec\x8f\x6d\xa8\x5d\x19\xbf\x10\xb1\x61\x98\xaa\x8d\xf0\x9d\x20\x0e\xd9\x2b\xdb\x3f\x1f\xba\x10\x2d\x15\x33\x15\x14\xc7\x2e\x9f\x97\x65\x8c\x1f\xeb\x99\xd2\xfa\x31\x92\x33\xe8\xc1\xfa\xc6\x45\xea\x36\xbb\x56\x44\x64\x10\x87\xec\x95\x6f\x1e\x59\x11\xad\xe4\xb6\x76\xae\x85\x6a\xe2\xf0\x75\xac\xa5\xd5\x2f\x10\x3d\x4b\x92\xa9\xe8\x35\xa7\xd8\xd4\x58\x3f\x9a\x5e\x40\x44\x06\x71\xfe\x0a\x18\xb0\xd9\x38\xf5\xfb\xca\xb2\x9b\xbd\x49\x0e\xe1\xdf\x73\xf6\x3b\x78\x06\x0c\x5d\xae\xcd\x5e\x71\xcf\x31\x0b\x7c\x18\x1f\x4f\xf2\xe8\xa0\x4a\x96\xa6\x6e\xef\x5f\xaf\xac\x84\x89\x69\x72\xc1\xb1\xb0\xf7\x86\x15\x63\x8c\xf5\x90\x8e\x58\x7f\x64\xe8\x21\xda\xd1\x84\xf3\xb5\x30\x2b\xe1\xfb\xdc\x1c\x8f\xff\x41\x25\x94\xf7\xaa\x6b\xd8\xd2\xbb\x02\xf8\x0f\x9b\x1e\x8e\xec\x28\xe8\x0c\x2c\xe6\x76\x45\xfa\x78\xa8\x1f\xd6\xfc\x0e\x71\x68\x15\xfd\x5f\xf3\xca\xa0\xa1\xfd\x5b\xaf\x8c\xe4\x95\x7f\x10\x89\x84\x14\x4c\x57\x76\xbb\x09\xc9\x7d\x39\x28\x8c\x3f\x36\x64\x19\x33\x18\x7c\xb4\x6a\x93\x23\xfb\xd6\xf5\x99\x47\xdd\x99\x9c\x2b\xcb\x20\x7b\xe5\xcd\xf2\x47\x45\xb3\x32\xa5\x83\x37\x73\xb6\x7e\xdf\x22\xc3\x7d\xa8\x77\xab\x53\x67\xd1\x67\xf8\x9b\xe4\xb5\xf3\xc2\x4f\xa6\xdf\xc7\x9d\xc9\x01\x2f\xb2\x57\xa6\x9d\xb9\x44\xfe\xe5\x05\x2a\xfb\x39\xb2\xcf\x26\xd3\x18\xb5\x68\x91\x4b\x2c\x8c\xef\xf2\xd8\xf9\xb3\x95\x3f\xd6\xbc\xd8\xd5\xa2\x3c\x93\xd1\x22\x7b\x65\xeb\xdb\xe7\xde\x44\x89\xf7\xb3\x5c\xfa\x29\x4e\xd0\x11\xc5\x9f\xfa\x6d\x3a\x30\x76\x34\xe2\xb1\xd7\xdc\x3a\xcd\xec\xaf\xf7\x78\x33\x67\x32\x5a\x64\xaf\xbc\x21\x1f\xfc\xc4\xe2\x4a\xd8\x7e\xdc\x9d\xac\xda\xb1\x9e\xce\x18\xde\x70\xfa\xc0\xe5\x4f\x91\x91\xf2\x75\x4e\x6b\x0c\x0a\x72\x74\x67\xe6\x95\x41\x22\x3a\x29\x01\xf2\x5c\x3c\xb4\x65\xba\x4b\x7c\xb9\x2e\xea\x63\x94\x11\xe9\x5e\x85\x2c\xc7\xdd\x4b\xb1\xdd\x71\x13\x83\x1e\x9c\xe8\x9b\x44\xd4\x26\x88\x85\x1f\xc4\xc1\x13\x60\xf9\x2c\x3a\xb3\x40\xe7\x00\x7b\x74\x55\xa5\xb4\xc1\xf2\x73\xa3\xc7\xd3\xd9\x2d\x1b\xc9\x37\x9a\xfa\x48\x2f\x12\xb0\x5e\x20\x84\x7a\xa1\x80\x38\x78\x02\x14\x96\x57\x68\x3e\x5c\x8f\xb4\x23\xab\x8f\x90\x77\x89\xce\xef\xab\x3e\x3f\x7b\x09\xb7\xa0\xa6\x5b\x00\x25\xef\x7e\x40\x76\x03\x74\x4a\x09\xe2\xe0\x09\x10\x07\x9f\xc4\x9f\x69\xf6\xaf\x36\x23\x45\x7d\xef\xc5\xf4\x69\x59\xcf\x29\x3e\x94\x8f\xb5\x89\x83\x55\x77\x5e\x13\xcf\x62\xf6\x41\xe7\x1c\x20\xce\x5f\xee\xbf\x1d\x12\xb7\xeb\x54\xca\x2a\x8a\x17\xb7\xf6\x59\xf4\x07\x6e\x5f\x66\x7d\x5c\x77\xdc\xd9\xa0\xee\x98\x6f\xed\x60\x19\xb7\xe6\x25\x87\x7f\x09\xe1\x95\x41\x1c\x54\xaf\x7c\x2a\xaf\x0c\xfa\x5e\x9f\xa4\x04\x6b\xbd\xc1\xb8\x5a\x96\x51\xcd\xb7\x38\x96\x53\xd5\x5f\x06\xcf\xf3\x75\x44\x4e\x5c\xa9\xbb\x7e\xe3\x1d\xcf\x2a\xab\x7a\x16\x05\xf4\x14\x06\x88\x83\x2b\x61\xd9\x68\xe6\x76\x97\xd8\xde\xf9\x7b\x7a\xb5\x06\x72\x83\x68\xc6\x11\x1d\xd8\xe7\xee\xe5\x1f\x58\x52\x6b\x12\x5b\x0e\xe3\x0b\x40\x95\xe0\x20\x0e\xae\x04\x95\xd4\x07\xab\x49\xd4\x57\x0e\xbd\xef\xc5\xbc\xf9\xf5\x83\xe8\x70\xc0\x84\x27\xd8\x3b\xbe\xe7\x7e\xe6\x2e\xbe\xea\xc3\x15\xcd\x15\x44\x5c\x10\x07\x57\xc2\x35\xda\x88\x11\xf2\xb0\x05\x99\x8a\x19\xde\x54\x6b\x13\xb4\x30\x3f\x0e\x36\x63\x3c\x7b\xd5\x67\x7d\x5f\xb4\x64\xcc\x69\x4c\xd8\xa0\xce\xf0\x00\x0e\xae\x84\x0e\x05\x2d\x36\x7f\x3a\x7d\x89\x07\x52\x13\x51\x99\xcf\x6f\xd7\x15\xcf\x6a\xff\xb8\x99\xb2\x9f\xb3\x5a\xaa\xd9\xa7\x8d\x9b\x6f\x8e\xd8\x0a\x81\x38\xa8\x32\xf1\x74\x5e\x19\xb4\xd6\x9e\x24\x85\x96\x2b\xfb\x7f\x72\xee\xd0\x69\xea\x91\x10\x37\xbb\xe8\xf3\xd0\x9b\xb0\x3d\xa8\xb7\x99\x8d\x22\x7c\x40\xa1\x50\xa7\x6a\xfa\x16\x7a\xa4\x16\xc4\xc1\xa5\x60\x3f\x33\xf6\x2b\x2e\x4e\xdc\xa0\x4a\x24\x94\xed\xfd\x1d\xfb\xc2\x1a\x9b\xa5\xd7\xdf\xe7\x70\xe6\x5a\xee\x5f\xbc\x9d\x90\x3d\x01\x2d\x0a\x20\x0e\x2e\x05\x56\x1d\x06\xe2\x5c\xe5\x0f\x44\xec\x18\x05\xf7\x26\x17\xba\x49\x55\xb3\x70\xe9\x0e\x3d\x5a\x0e\x7c\x1f\x91\x36\x4c\xd9\x07\x8e\x23\xe2\x82\x38\xb8\x14\x2a\x2f\x35\x5e\xb0\x68\xd2\xf8\x2e\xf6\xc9\x92\x9a\xad\xf0\x9c\x94\xcc\xfa\xc7\xbe\xfc\xbe\xb7\xd4\x4b\xf7\x73\xd9\x67\xad\xb7\xa2\xa1\xeb\xf8\x00\x0e\x2e\x05\xff\x74\x77\xc5\x19\xdd\x96\xee\x91\x8f\xd8\x3f\x7e\xb2\x16\xed\xcb\xe6\x55\x48\xda\x5f\x37\x32\x30\xef\x51\xcf\x2a\xf7\x0b\x3c\x82\xce\x95\x01\x1c\x54\x99\x78\x3a\xaf\x0c\xca\x7f\x27\x49\x41\x0b\x6f\x70\x92\xc2\xc2\xd1\x80\x5e\xb9\x25\xa2\x59\xb1\x5e\x2a\x95\xd6\xda\xe8\x97\x17\xcf\xc4\x60\x77\x48\x35\x1b\xbe\x29\x01\x62\x0a\x40\x1c\x52\x65\xc6\x12\x8d\xc9\xdd\xe2\x71\x12\xe1\x97\xbf\x59\x88\xc8\x36\x97\x52\xc6\xdb\x03\x4b\xa5\x05\xf1\x45\x5a\xdb\xd3\xd1\xbd\x28\x5a\xa1\xca\x0c\x00\x87\xd4\x12\x7d\xa8\xed\xda\xed\x90\xf3\x8e\x6c\xf2\x94\x53\xba\x6f\x64\xf1\x33\xb6\x77\x32\xac\x09\x7f\x9a\x30\x8f\x88\x38\xd3\xc8\x04\x73\x40\x8d\xa2\x00\x1c\x5c\x0a\x89\xc6\xfb\x36\xd8\x8e\xba\xea\x97\xa4\xa3\x39\x35\xde\xf0\xda\xa6\xc7\xf1\x8e\xdd\xbc\xe7\xf9\xee\x31\x49\xe5\x0f\x97\x47\x43\xb9\x88\xb8\x20\x0e\x2e\x05\xdc\x2b\x09\x36\x2f\x5e\x5e\x4b\xd5\xd9\x98\x64\x6b\x28\x60\x7f\x1e\x7d\x21\xcc\xaa\xec\xa9\x2e\xab\x3f\xd9\x74\x7d\xeb\x42\x34\x3e\xd4\xe6\x0d\xc0\x41\xab\xc2\xe9\xbc\x32\x68\x4f\x72\x92\x14\x9e\xc5\x3d\xeb\x6f\x26\xbb\xe7\x19\x66\x9c\x65\x7c\xfe\x1a\x1b\xcb\x81\x7d\x0c\x4b\x6f\x59\xf0\xc0\x77\xa6\x77\xa9\xb4\x81\xd6\x7c\xd0\x91\x3d\x80\x83\x4b\xe1\x48\x65\xb5\x17\xa3\x60\xc2\x22\xb2\x15\xb3\xeb\xd8\x3e\xc0\xfc\x3e\xbf\xb7\x94\x63\x9d\xe1\xce\x1f\x5b\xab\xd7\x6d\x9d\xa1\xd0\x73\x8d\x20\x0e\x2e\x85\xd7\xb8\xeb\x3f\x83\x35\xd5\xf5\xbf\x25\x69\x6e\x3e\xd4\x0a\x2f\x29\x68\x59\x2b\xf2\xd1\xbe\x11\x15\x64\x6e\x90\xde\xb5\xb4\x0d\x3d\x99\x01\xe2\xe0\x52\xb0\x7a\xf1\xc8\xf2\x7d\xa6\x79\xf0\xa1\xd9\xe4\x63\x1b\xd7\x5c\x11\x4e\xbd\xe4\x23\x2b\x1f\xae\x47\x93\x35\x02\xc5\xad\xd2\x69\xe4\x88\xb8\x20\x0e\x2e\x85\x97\x7e\xf8\x4c\xf7\xaf\xef\x3e\x56\xc1\xe5\x08\xb4\x5d\x1a\x7b\xe3\x3e\xc9\x6b\x42\x68\x78\xf5\xc3\xea\xa0\xd1\x94\xff\x46\xce\x31\x42\x0a\x20\x0e\x5a\x15\x4e\xe7\x95\x41\x3e\xeb\x64\xaf\x6c\xab\xff\x25\x64\x78\x13\x77\xea\xaa\x1e\xe7\x4b\x0d\x46\xa9\x9e\x35\xbe\xea\x87\xcf\xfc\x0c\x0b\x03\x82\x9a\xd2\xce\xef\xc8\x27\x21\x7c\x27\x88\x43\xf6\xca\xb8\xf5\x31\xcf\x04\x58\x31\x1d\xd6\x06\xd1\x95\xa3\xc3\xe2\x5d\xdb\xeb\x36\xbe\xb2\x5e\xd3\xbe\x2b\x3e\x36\xd5\x5a\x47\xa2\x51\x86\x88\x0c\xe2\x90\xbd\x72\xf7\xee\xe7\x67\xad\xd8\xd3\x68\x5d\x2a\x61\x41\xfd\x8a\xaf\x0e\x17\xb0\xa4\x42\x09\x35\xc6\x5b\xe7\xc3\x49\xd4\x4c\x23\xc8\x77\xa0\x77\xae\x00\x9c\xbf\x02\x11\xdc\x2b\x9f\xf6\x7d\x65\x8e\xcd\xa1\x83\x35\x7c\x75\xfa\x2a\x59\x4b\xca\x68\xf5\xf1\x46\xa6\x69\x0f\xe7\x88\x2d\x1b\x2a\xf5\xcb\x72\x2b\xc6\x37\xf6\xf2\xfe\xf5\xca\x7b\x8e\x74\x2f\x0a\x25\xe5\xe5\xa2\xac\x84\xcf\xab\x91\x54\x38\x4b\xf5\x91\x31\xc6\x11\x59\xe0\xac\x69\x63\x5c\xa7\x1b\x6d\x25\xf8\x07\x95\x2a\xfb\x15\xc2\x88\x4b\x38\x84\x6d\x13\x11\x8f\x33\x42\xd5\xea\x5a\xa0\xd7\x9b\x6c\x4f\xa8\x59\xfd\x6a\xf3\x1e\x3a\x36\x9e\xf7\xff\x9a\x57\x06\x0d\xed\xdf\x7a\x65\x75\xb8\x9f\x52\xbf\x49\xde\xb0\x2d\x2e\xa0\x85\x35\x1d\x4a\x98\xfb\x57\xbb\x57\xcb\xde\x8e\xa6\xf1\xb6\xf8\xd2\x03\xaf\xbd\xb4\x3f\xd6\xf2\x4f\xce\xe4\xc8\x13\xd9\x2b\xb3\xab\x5e\x2f\x8d\x70\x33\x27\x98\xfc\x95\xf6\x54\x94\x0c\x6f\x70\x2b\x22\xfe\xe8\xf7\xe1\xf6\x30\xf6\x93\xc1\xa7\x2f\x39\x5c\x1f\x9c\xc9\x01\xaf\x0e\xf2\xb9\xb2\x85\xec\x3b\x35\x85\x91\xab\x5e\x26\x98\xaa\x3a\xb8\x6a\x14\x07\x9f\xaf\xdf\x1d\x63\xfd\xa3\x9c\x5c\x52\xd6\x26\xac\x92\x6d\x7c\x26\xa3\x45\xf6\xca\x3f\x0d\x0b\x8f\x94\x13\x0b\x89\x6d\xdf\xce\x1f\x16\x4f\xfb\x04\x87\xfc\x7a\x78\x3f\x7f\x5b\x2e\x77\xa8\x5e\xf1\xb9\x7d\x62\x46\xde\x99\x8c\xd6\x15\xe9\x63\x89\x5a\x13\xeb\xfd\xbe\xdc\xab\x14\x32\x24\x9a\x20\xf3\xd5\x9c\xd6\x90\x7f\xca\x71\xfd\xd1\x3d\xb2\x7e\xdb\x4b\xf8\x05\x15\x19\x1a\x67\xe6\x95\x41\x22\x3a\x29\x01\x1e\xef\x15\x5e\x61\x1c\xd5\x8e\xe3\xe0\xd3\xf9\x65\x33\x4d\x5d\xc0\x17\x28\x73\xcb\x7f\xef\x40\x51\xb7\x15\x5f\xbc\x61\xe3\x0b\x03\x62\xe1\x07\x71\xf0\x04\x38\xb4\x11\x3d\x7f\xdb\xbd\x80\x3f\xe7\xfd\x07\xcf\xe7\xef\xcb\x43\x6a\x63\x27\x6e\x94\xd1\x26\x0e\x7e\xd4\xbd\xbf\xbd\xa7\x7a\xe7\x2d\xd4\x00\x03\xc0\xc1\x13\xe0\xe6\x03\x69\xee\xd4\x52\x75\x82\x96\xf6\xc8\x7b\xb2\xf3\x7d\x98\x6d\x4a\x29\x7d\xa9\x86\xac\x4e\x47\x9d\xf2\x2c\x57\xeb\x51\xa1\xfe\xda\x20\x0e\x9e\x00\x0b\xca\x50\xe8\xba\x51\x7f\x75\x7d\xfd\xfa\x69\x81\xec\x4f\x6b\x3e\xa5\x5c\xfd\x63\xb1\x4e\x51\xc6\x48\x0a\xe5\x2a\xf3\xab\x3a\x6f\x10\x71\x41\x9c\xbf\xdc\x7f\xbb\x3e\x7c\xd6\x92\xad\x7b\x28\x18\x1e\xe5\xb5\x81\xb5\x1e\xf3\x8d\xd3\x45\x29\xb0\xb6\x90\x91\x49\x26\xcd\xb6\x8c\x79\x2e\xbc\x63\x55\x0e\xe1\x95\x41\x1c\x54\xaf\xac\x7e\x9a\xad\x10\xe8\x7b\x7d\x92\x12\x84\x28\xaa\x0b\x28\xc9\x02\x3f\xb8\x48\xf3\xcb\xc5\xb3\x94\x0c\x1b\xef\x6d\x77\xdb\x05\xf2\x62\xe8\x9e\x1b\x28\xc1\x28\x20\x52\x42\xcc\x00\x88\x83\x2b\x21\xae\x5f\x58\x8e\x41\x22\x49\xfb\xf3\xdc\xeb\x8a\x9a\xb0\xbc\xec\xc6\x99\xdb\xec\xd1\x1d\x77\x26\x1a\xbf\xf7\x6b\xad\x0e\xe9\xe9\x41\xdd\xe3\x00\x1c\x5c\x09\x11\x18\x0d\x5c\xeb\x79\x7f\xc4\x23\x15\x9a\xe6\xdd\xb9\xa5\x3f\xd2\x8b\xd8\xfe\xd1\x18\xf8\x34\x81\x35\xa3\xa5\x1d\x50\xbb\x1a\x0e\x55\x0f\x00\x38\xb8\x12\x0e\x3c\xc9\x26\xd5\x28\x54\x3b\xd0\x9a\xf5\x1f\x7f\xcb\xee\x61\x97\xf7\xe2\x67\xdc\x66\xde\xa6\x7b\xb9\x54\xf0\x9e\xdf\xa4\x1d\x7a\x3b\x0b\xc4\xc1\x95\x40\x25\xaa\x29\x12\x90\x41\xd6\xf5\x89\xb5\x9b\x7d\xb9\xd4\xec\x55\x87\x65\xc1\xc1\xc7\x19\x77\x32\x1b\x05\x94\x3d\x91\x15\x9f\xf7\x88\xad\x10\x88\x83\x2a\x13\x4f\x79\xae\x0c\x58\x6b\x4f\x92\x02\xf3\x31\x46\x49\x1f\x2a\x57\xe4\xf9\x57\x53\x42\xaf\xbe\x3d\x1c\xfa\x2d\xd3\xa8\x3e\xad\xe7\xee\xce\xb3\x9e\xfc\x9e\xf3\x8f\x01\xf4\x73\x01\x88\x83\x4b\x61\x07\x6d\xf9\xef\x35\x23\x16\xfa\x50\x0b\x63\x87\xaf\x2d\x53\x43\x5b\xbc\x4a\x6d\xbe\x0c\x64\xe8\xb9\xcf\x1e\x36\x05\x54\xb6\x43\x4f\x62\x83\x38\xb8\x14\x8e\xca\x1e\x07\x5b\x04\xe5\x7c\x15\xc8\x73\xe3\xe4\x1c\xde\x9d\x21\x7c\x4c\xce\x9c\xe7\x28\xab\x44\xf3\x05\xe3\x09\x9f\xe6\x05\xa8\x2d\x1d\x88\x43\x3a\x57\xae\xdc\x6e\x53\x3b\xd6\xd4\xc7\x59\xdf\x2b\xc9\xf6\x68\x54\x59\x4d\xa1\xdf\x8a\x20\x89\xd3\x19\xe2\xa3\x15\x73\x28\x16\xba\x09\x9d\x2b\x03\x38\xb8\x14\x1a\xa3\x8c\xc3\x55\xe5\xef\xd2\x78\xbd\x4d\xa1\x22\x4a\xbe\xb2\x10\xc4\xf0\x28\x59\x3e\x20\xe1\x65\xa5\x5c\x48\x1a\xb7\x44\x11\xb4\x2b\x06\x71\x50\x65\xa2\xce\xa9\xa4\x00\xca\x7f\x27\x49\xe1\xee\x8d\xb5\xae\xb6\xd4\xd9\x4f\x2d\x7a\x0c\x1e\x15\x01\x0a\x31\xcf\x85\xd1\xd4\x62\xfc\xeb\x65\x38\xd5\x73\x28\xb3\x46\x39\x20\x83\x04\xe2\xe0\x52\xb0\x76\x44\x77\xcf\x7f\xd9\x8b\x4f\x2b\x5b\x9e\x34\xbf\x7e\x59\x24\x78\x02\xcf\x39\xfe\xf8\x43\xd9\xfe\xc7\xfc\x57\x4a\xa6\x41\x90\x41\x02\x71\x70\x29\x04\xe8\x57\x45\xce\x24\xb2\xaa\x5c\x56\xa9\x1d\xbc\xf4\x66\x94\x62\xd6\xde\xab\xcf\x5f\x78\x75\x5f\x47\x70\x7b\x97\x7a\x4b\x07\xba\x0a\x00\xe2\xe0\x52\x08\xd0\x0c\xed\xb1\x93\xd1\x69\x55\xfa\xcd\xf3\xc8\xec\x69\x4b\x47\x23\x4f\xfe\x66\x3a\x86\x95\x12\x0a\x66\x49\x1f\x71\x65\xd3\x27\x28\x2e\x80\x83\x4b\xe1\x53\x67\x4b\x03\x7b\xbf\x6d\x90\xc2\xfc\x78\xe0\x5f\x17\x82\x92\x7d\x6c\xb3\x77\x66\x78\x0b\x6e\x57\x96\x18\x51\x2a\xff\x78\x54\x23\xa4\x00\xe2\xa0\x55\xe1\x74\x5e\x19\xb4\x27\x39\xf1\x17\xb4\x96\x27\x5b\x86\xbb\x86\xdb\xc5\x44\x85\xb8\x64\xa2\xbe\xa4\x77\xbb\xf9\xa7\xed\x62\x2e\xdc\xf6\x56\x32\x54\x1c\xa3\xb9\xfe\x0d\xfa\x05\x0d\xc0\x21\x6d\x15\xae\xaa\xe3\xa9\xfa\x34\x24\x09\xdc\x3a\x5c\xbb\x65\x7a\x25\xe0\x51\x18\x3e\xd5\xff\x87\xb9\xbb\x8e\xaa\x62\xed\xfb\xc7\xcf\x10\x82\xa0\x34\x32\x43\x97\xd2\x20\x48\x0b\x08\x48\x28\x8d\x80\x48\xb7\x34\x08\x88\x74\x0c\x21\x25\x21\x21\x1d\x82\x48\x89\x74\x89\x02\x02\x92\x02\x92\xa2\x22\x48\x87\x94\x94\x84\xc8\x6f\xf9\xdc\xcf\xf1\xeb\xde\xe7\xac\xc5\x99\x7b\x3d\x7f\xfc\xee\x7f\x3c\x37\xeb\xc3\xbc\xf6\x6c\xae\x7d\xed\xf9\x5c\x73\xed\xfd\xb6\x95\x79\x06\x31\x92\xe0\x7e\xa2\x31\xbe\xf5\x7b\x65\xee\xa4\x3a\xf4\xa1\x50\x65\xc4\x7c\xcf\x41\x65\xd3\x8c\xfe\x9a\xc3\x72\xdb\xb3\x99\x26\x13\xc1\xe0\x56\x91\x8b\xfc\x84\x19\x31\xa3\x0d\x81\xd7\xcc\x7f\x7f\x8b\xfd\x49\x75\xe8\x43\xc1\xbb\x69\xc1\xc4\xd0\x2f\x23\x54\xaa\x2a\x50\x63\xbe\x13\x87\x88\x9a\x65\x11\xe7\xaa\x50\x85\x80\x92\x7e\xd1\x81\xce\x98\xfd\xef\xad\x0b\x27\xd5\xa1\x0f\x85\xc6\x34\xa5\xed\x82\xaf\x33\xda\xd9\xce\x5b\x52\x16\x17\xc5\xf9\x13\x52\x71\x77\xfc\x06\x6f\x43\xf4\x2e\x8c\x2f\x8f\x88\x7e\x24\xff\x35\x14\x4e\xaa\xfb\x3d\x2b\x78\xfe\xab\x5e\xf9\xa4\x3e\xeb\x9f\x7b\xe5\x8f\x37\xf5\xfb\x5d\x8a\xce\x72\xd5\x45\xb9\x27\x5e\x91\xd9\xb7\x63\x37\xa3\x13\x5a\x2f\x2a\xe5\xcd\xe0\x89\x4b\x81\x62\x5e\xe1\xff\xd5\x77\x9e\x54\xf7\xf7\x5e\xd9\xa3\x21\xc1\xfb\x8c\x8c\x3d\xdc\xb2\x23\xc2\x07\x45\x55\x1a\x86\x9a\xe1\x86\x63\x3d\xe7\x88\x53\x2c\x50\x9e\x7d\x32\x96\x78\xfb\xaf\x23\x9f\x54\xf7\xf7\x5e\x99\xf2\x98\xb2\x44\xe5\xb2\xb6\x49\x66\xe1\x50\x02\xb9\x40\x50\x62\xfb\x74\x54\x66\xd6\x6b\xf8\xbd\x53\x67\xd0\x55\xe2\x64\x12\x93\xbf\x8e\x7c\x52\x5d\x90\xac\x14\xda\xb3\xf1\xaf\xf3\x95\xef\xf7\xdb\x86\x8a\x71\x51\x58\xd2\x65\x19\x39\x25\x4e\x46\x30\xb9\x1e\x3d\x65\x71\x37\x0e\x29\x88\xe7\x8c\x3b\x5b\xbe\x11\xe9\xf1\x67\xaf\xcc\xa9\x3f\x7c\xe9\xad\xed\xa9\x9d\xa1\xac\xb4\x1d\x9e\xd6\xb9\x67\x3d\xb8\xfe\x07\xdb\xdb\xe5\x0f\x03\xfb\x58\xbf\xca\xec\xd6\x59\xff\x51\xca\x78\x57\xb4\x1d\xcb\x30\xfc\xbd\xf6\x62\xfc\x97\xaa\x07\x5a\xed\x42\xcf\x08\x89\xe5\x4b\xd9\x88\xf8\x8e\xbd\xbe\x56\x2a\x0c\xac\xfd\xff\xad\x57\x3e\xe9\xd4\xfe\xfc\xbc\xf2\xdf\x7a\x65\x5d\xbd\x67\x98\xc2\xce\x40\xbd\x14\x96\xcf\x87\xf4\x33\x57\x77\x97\xce\x9f\xbd\xa1\x31\xd5\x2f\x3a\x72\xce\xd5\xa0\xe4\x80\xc3\xe7\xff\xe4\x96\xe7\xdf\x7b\xe5\xa0\x2c\xde\x8a\xe7\xb7\x3e\xaf\x73\x3a\x70\x7b\x5f\x27\x1f\x29\x12\xbe\xd5\x06\x0e\x2c\x88\xd2\x14\xdc\x50\x0b\xba\x58\x46\xed\xf0\x7f\x72\x83\xf7\xef\xbd\xb2\xf4\x3d\x88\xf7\x5d\x49\x59\xfe\x25\x11\x6d\xef\x77\x42\x79\x17\xf3\xb5\xc4\x6d\x52\xe1\x4e\x8a\x8e\xbe\xe0\xf7\x45\x00\xd6\xff\xc9\xb7\x7e\x37\xff\xbd\x57\xbe\x9a\xbe\x11\x3a\xeb\xf6\x38\x86\x2a\x7c\x6f\xd8\x88\xed\x54\xe1\x29\x7e\xda\xf5\x9d\xcb\x47\x53\x1f\xd4\x97\x7e\x18\x6a\x1a\x1f\xff\x9f\x9c\xed\xdf\x7b\x65\xb7\x05\x26\xff\x48\x3c\x8d\x60\x71\xb6\x33\xea\x17\xa3\x3b\x0a\xb3\x62\x0e\x5e\x51\xb8\xdc\xc4\x76\x61\x8c\x88\xfe\xdc\x3d\xf7\x7f\xb0\xe3\x5c\xff\xdf\x0d\xa2\x7f\x5c\x2c\xd6\xa3\xc6\xf3\x8b\xf4\xe4\xa0\x11\x70\xcb\xee\xb9\xdd\x26\x5f\x4a\x26\xef\xc7\xf4\xb5\x92\x4b\xe5\x68\x65\xb9\xa1\xbc\xfd\xf7\x35\xcb\x49\x75\xe8\x6f\x80\xd1\x3a\x2d\xd3\xe9\xd9\xd7\xfb\xa4\x13\xad\x36\x19\x5a\x0b\x78\xce\x16\x44\x92\xea\x86\x55\x3c\xe2\x93\xef\xb5\xb8\xe7\x34\xd2\xf2\xbb\x93\x39\xa1\x0e\xfd\xcb\x22\xf3\xd6\x46\x06\x0c\x38\x26\xf9\xd7\x24\xf3\x29\x3e\xc6\xb0\x5e\x66\x6a\x2f\x35\x7a\xb0\x5a\xb4\x2f\xe0\x69\xd1\xaf\xd2\xc2\x2c\xf6\xd7\x71\x4f\xaa\x43\x5f\xd4\x8d\x7b\x41\xe3\x9b\xc7\xa8\xa7\x21\xad\xc8\x5c\xc9\x66\x39\xe8\x25\x53\x46\x44\x18\x14\xa5\xe8\x7e\xba\xe0\x81\xc0\x88\x99\xf0\xef\xce\xeb\xa4\xba\x20\x19\x0c\xe2\x3f\x8f\x6b\xea\x98\x44\x41\x45\x47\x8b\xed\x6a\x2b\x34\x27\x63\x79\x71\x83\x83\xb7\xf9\xbe\xf6\x02\x71\x36\x65\xe5\xd4\x25\x1a\xde\x0e\xde\xbf\x7a\xe5\x93\xea\x7e\x7f\x5e\xf9\x5f\xf5\xca\x27\xbd\xae\xff\x69\x24\xe4\xe4\x26\xc7\xed\xbe\x7b\xf7\x83\xf9\xe5\x66\x05\xd1\x95\xfd\x6e\x15\x5e\x11\x7d\xee\x70\x0c\x5e\xf3\xb3\x3d\x79\xa2\x76\xe5\xbf\xbf\x15\xe7\xa4\x3a\xf4\x91\xa0\x37\xe1\xe5\xb1\x6a\xb8\xea\x3d\xb3\xdd\x90\x7e\x99\xf4\xb1\xd2\xe4\xdc\x8b\xe3\xc7\xa9\x78\xc5\x62\x44\x4d\xb6\x24\x84\x3c\xbf\xf7\x34\x9f\x54\x87\x3e\x12\x8a\xe6\xca\xbb\x2c\xb0\x18\x8d\x42\x27\x1f\xd8\x67\x95\x10\x1e\x71\x1a\x6a\x0f\x16\x9c\x97\x26\x95\x36\x70\x0e\xc0\x25\x91\x05\xff\x3a\xee\x49\x75\xe8\x23\xa1\xcf\xb8\x87\x5f\x29\x26\xc0\xf7\xfd\x99\xdb\x69\x37\x46\x38\xaa\x88\x76\x03\x5a\xda\x04\xed\x5b\x3d\x45\x77\xf6\x9c\x28\x42\x7e\x7f\xb7\xd7\x49\x75\xe8\x23\xa1\xba\xa1\x39\xe6\xec\xeb\xd4\x6b\xfe\x89\xe0\x65\xbe\x53\x2e\x30\x3d\x49\x49\xed\x5b\xe5\xd4\xd7\x3e\xa4\xed\x4f\x93\x7d\x29\xcb\xff\xba\x14\x3a\xa9\xee\xf7\x27\x13\xff\x5d\xaf\x7c\xd2\x5c\xfb\x8f\x5f\x7e\xcc\xd7\x95\x48\xd9\x24\x2d\x52\xa2\xf2\xc4\xe2\x79\x4b\x45\x27\x87\xf3\xbc\xfd\x3e\xc1\xee\x0b\xad\x9b\x9a\x56\x02\x1d\xc1\xbf\x73\x90\x4f\xaa\x43\x1f\x0a\x64\x84\x54\x73\xd1\x24\x92\x97\xf5\x7f\x5a\x41\x09\xe7\x34\xeb\xac\x54\x1f\x18\xb2\xb8\xce\x04\x6b\x9f\x25\xaf\x72\x66\x6d\x97\xfd\xeb\xb8\x27\xd5\xa1\x0f\x05\x73\x73\xfe\xc4\xf5\x95\xe4\x04\x69\xc7\xf2\xf3\x11\xcf\x9c\xae\x46\x73\x9a\x3d\xf2\x52\xd9\xb5\xef\x69\x3f\x17\x37\x4e\x6d\xe1\xf1\xd7\x71\x4f\xaa\x43\x1f\x0a\x53\x2d\x4e\x76\x06\x15\xda\x02\x36\xaa\xcc\xd4\xfa\xc3\x8c\x5b\x4a\xa2\xf3\x52\xd3\x65\x13\xba\xa1\xb4\x3f\x0c\x6c\x0d\x8b\x9c\xfe\x3a\xee\x49\x75\xe8\x43\x21\x5e\xb8\xb2\x4c\x5d\x79\xff\x8d\x1d\xc9\xa6\x73\xf0\xb5\x98\xf8\x8c\xbc\x5e\xf2\x87\x6b\x4f\x8a\x39\xab\x6d\xcf\x61\x2c\x3b\x58\xfe\x35\x14\x4e\xaa\xfb\xfd\xc9\xc4\x7f\xd7\x2b\x9f\xf4\xfe\xf7\x4f\x43\x81\x9c\x5f\x0b\xa3\xd7\x2e\x56\x9d\x9f\x35\x85\x7f\x60\xe9\x68\xeb\xad\x7f\xf9\x7c\xcb\xe9\x0d\xcb\x47\x38\x1b\x59\x31\x2c\xf1\xbf\xe7\xf1\x93\xea\xd0\x87\xc2\xad\x87\x0f\x06\x15\xec\xf9\xfc\x49\x0a\x26\xbd\x42\x87\xbd\x06\x7b\xbe\xe3\xd7\xba\x69\x4f\x8d\x35\x4e\x3d\xc0\x31\xfb\xb4\xff\x7b\x88\x9d\x54\x87\x3e\x14\x8c\xd8\x1d\x87\x7b\x0d\x6c\x1b\xce\x50\x08\x27\x27\xd0\x1e\x39\xef\xb7\x3a\x7f\x55\xe7\x73\x18\xfd\x19\x35\xe2\x62\x7a\x13\xf8\xdd\x78\x9d\x54\xf7\xb7\x59\x81\x68\x7d\xda\x2f\x8c\x48\x48\x36\xfe\xb4\x1d\x41\x2c\x53\xec\xa4\xda\x65\x2c\xcd\xf9\x91\x87\x56\xc4\x16\xe4\x8f\xe6\x82\xe9\x7f\xcf\x0a\x27\xd4\xa1\x0f\x85\x17\x38\x6f\x66\x17\xdc\x5a\xa7\x12\xa5\x2e\x64\xae\xa7\x33\xe2\x9a\xfa\x70\x56\xd6\x8b\x05\x4e\x91\xa6\x48\x45\x3c\xd7\xc7\x75\xff\xbd\x1d\xff\x84\xba\xdf\xb3\xc2\xbf\xeb\x95\x4f\xba\x26\xf9\xa7\xa1\x30\x6a\xad\x22\xf0\x4c\x65\x5f\x61\x27\xd8\x04\xf7\x01\x59\xcf\xe3\x59\x62\x7e\xbe\x43\x31\xef\x91\x0f\xf5\xae\x56\x97\x83\x44\x7f\xc7\x4b\x9e\x54\x87\x3e\x14\x4c\x55\xcf\x68\x3f\x31\x66\x63\x10\x65\x57\xdf\x17\xfa\x0e\xbe\x28\xe7\x1b\xbd\xd4\x49\xf8\x42\xdb\xed\x40\x71\x08\xbb\x8d\xec\xf7\x27\x28\x4e\xaa\x43\x1f\x0a\x55\xac\xee\xd3\x64\x83\x8b\x8a\xf1\xdf\x98\xc5\x33\xdf\x45\xc6\xcc\xd7\x5a\xc9\xc9\x93\x3f\x62\x2d\x0a\x0f\x48\x66\xd0\x74\xfb\xbd\x25\xe2\xa4\x3a\xf4\xa1\x70\x2e\xb7\xf8\x27\xf0\x32\xdc\x64\x5c\x75\xe7\x11\xe3\x15\x2d\x2a\x4f\xf9\x96\x1b\x35\x77\xb7\x96\x98\x2e\x64\x2d\x1b\x1d\xf4\x08\xfc\x75\xdc\x93\xea\xd0\x87\xc2\xc7\x57\x14\xde\x31\xb8\x4f\x2c\x30\xcb\x2d\xaf\xf7\xe0\xfa\x1d\x9e\xd5\x58\x8a\x56\x49\x31\x13\x28\x58\xed\x0f\x30\xa7\x7b\xa5\xf3\xd7\x50\x38\xa9\xee\xf7\xac\xf0\xef\x7a\xe5\x93\xfa\xac\x7f\xee\x95\x9d\xe3\x5f\xe2\x26\xf7\x64\xd3\xb6\x30\x04\x52\x5e\x17\x56\x7f\x5b\xf1\x38\xa3\xd8\xfd\xb8\x8e\xce\x7f\xda\x9e\xad\xe8\x8b\xab\xfd\xef\x9d\xd2\x27\xd4\xfd\xbd\x57\x9e\xa0\x55\x2d\x58\x98\xbc\xc6\x55\x66\x9d\x13\x49\xa7\x5d\xc0\xc6\x5a\xea\xe5\x4e\xba\x2f\xbb\x41\x7f\x95\x81\x26\xed\xbe\xf6\xef\xbb\xbf\x27\xd5\x05\xc9\x62\x60\xa3\x1e\xb9\x63\x5d\x61\x58\xee\x83\x3e\xb1\x67\x9a\xcb\x01\xee\x1b\xb7\xae\x8e\x87\x94\x77\xd3\x52\x6c\x4c\x79\xf8\x6f\xd8\xd9\x4b\xe0\xfe\xbe\x17\x7e\x52\x5d\x90\xec\xaf\x67\xf2\xcf\x23\x9f\x98\xaf\x4c\x07\x68\x63\x9c\xbd\x6d\x63\xcf\x2b\xc8\x6b\x6a\x6e\xee\xe4\xe6\x78\x17\xe5\xff\x48\xfc\xe7\x30\x49\x46\x97\x8a\xbe\x72\x0f\x11\xbb\x2e\xde\xa4\x2a\x32\xdc\x60\x9c\xcd\xcb\x1e\xd2\xa7\x38\x05\x08\x2b\xf7\xde\xb5\x3c\x64\x30\x87\xb5\x81\x85\x54\x6b\xde\x73\x5d\xa9\x9e\xb9\xdc\xfc\x24\xfb\x9f\x55\x1b\xba\x83\x08\xef\xe9\xfd\xe7\xb7\xd3\xa8\x36\x3c\xdd\x1d\xd5\x70\x82\xf1\xe5\x3c\xcb\xf5\xae\x7f\x52\xe5\x2e\xe2\x5b\xa7\x51\x2c\xed\x7e\xfc\xdc\xce\xb5\x6f\xa6\x14\xbe\xc5\x87\x15\x87\x7f\x8d\xb1\xf4\x10\x57\x5b\xc3\xfd\x92\x7c\x4c\x1a\xff\xda\x9d\x84\x4e\x52\xeb\xc5\x94\x4e\x8a\xd8\x84\x0e\x91\x2d\xb1\x9c\x5e\x23\x3f\x0d\xa7\x8d\xf0\x37\x01\x89\x1b\x22\x9c\x61\xec\x55\x17\x01\x6d\x8c\x73\xff\x79\xa8\xf7\x2c\x5d\x6c\x6e\xdb\x58\x5a\xb8\x58\x5a\xd9\xb8\xde\x75\xf1\xfc\xe7\x9f\x06\x00\xff\xfb\x77\x2f\x4d\x20\xf8\xa2\xfc\x98\x5c\xfb\xcd\x39\xe7\x2e\x07\xab\xef\x3b\xac\xa6\x2e\x6d\xaa\x54\xb7\xe7\x47\x1e\xc6\x2b\x92\x6e\x91\x06\xc9\x60\xa8\xff\xf1\x04\x12\x19\x5b\x28\xd5\xae\xe1\xe9\x2b\x39\xd5\x08\xa6\xeb\x7f\xee\x35\x39\x33\x28\xcf\x63\x54\x6e\xbc\x40\x34\xad\x98\x5a\x23\xf6\xe7\x3d\x74\xf0\xa7\xed\x5b\xd3\xdc\x5c\xbb\x33\xc2\xe2\x8a\x62\xd1\x4f\x95\x60\xce\xcd\xee\xb4\x1b\x01\xea\xb1\xe9\x1e\xc3\x78\xda\x11\x67\x2e\xfd\xbb\x23\x06\xca\x32\xfc\x1a\xd2\x70\xa0\x0c\x86\x86\x14\x1b\xa0\x8d\x41\xfa\x9f\x13\x72\xbd\xeb\xe4\x62\x6a\x65\x79\xc7\xc9\xdd\xd2\xe5\xef\x3f\x59\xfd\xdf\xd3\x9b\x8b\x8a\xd6\xeb\x64\xea\x70\x0c\xfe\x5e\xa7\xfd\x84\xf2\xa6\xf9\xdb\xf0\x67\xef\x49\xa8\xbe\x06\x16\x64\x68\x56\xc4\xa6\xbe\xfc\x12\x23\x8f\x51\x85\xf1\x3f\xaf\xb6\xff\xf9\x47\x01\x03\x17\xef\xcf\x7f\x15\x31\xce\xf0\x07\xc4\x96\xfd\x43\x85\x54\xe0\x2d\x10\x03\x73\xdc\x1e\xe3\x1f\xfe\xa7\x83\x81\xd5\xfc\x4f\x3f\xc7\xc2\xfa\x73\x7d\x9f\xf2\xcc\xdb\xbb\x40\x66\x6c\x6b\x88\x38\xde\xb6\xb9\x68\xd7\x11\xfb\x34\x0b\xb4\xa9\xe6\x36\x49\xff\xaa\x8f\xe0\x49\xd2\x69\x8c\x3f\x6a\x7d\x0b\x5e\x66\xb8\xd1\xca\x07\x7b\x55\x17\xb6\xa6\x7e\x78\xf8\x3e\x9e\x53\xbe\xc8\x3d\x75\xcf\x66\xaf\xfb\xf0\xe7\x33\x51\xaf\xa7\xbb\xaf\x80\x7f\x77\xd0\x40\x85\x00\x0c\x3c\x0c\x4c\x0c\x8c\x20\x38\x50\xda\xe5\x0f\xe1\xce\xf9\x46\x1a\xa2\x26\xad\xd4\xac\xf2\xf9\x0d\xd3\x69\xd9\xa0\xa8\x68\xe6\x64\xfa\x07\x50\x92\x96\xa5\xf4\x4c\xe3\xbb\x55\x17\x38\x50\x5a\xf5\x8f\xf2\x8d\x54\x8e\x89\xfc\xad\x4b\x5a\x61\xde\x74\xa6\xb9\x95\x7a\x05\xe7\xa5\x58\x97\x27\x7b\x92\xea\xf2\x82\xb4\x77\x96\xc8\x1a\xae\xc1\x81\xd2\x7f\x2e\xcd\xc4\x2a\x35\x9f\x8b\xa3\xe4\x50\xce\x7f\x8a\x3f\x68\xbe\xf9\x16\xeb\xa6\x07\x78\xaf\xe6\x32\xd7\x4f\x07\x9d\x5b\x67\x72\x6c\xe2\xdc\x25\xff\xdd\x83\x08\x3e\x85\x01\x04\x5d\x03\xfe\xf7\xd9\x0c\x80\x03\xaf\x62\x2c\xe2\xca\xc0\x80\xe4\xbf\x7b\x50\xff\xf0\xeb\xcb\x7f\xfc\xfa\x49\x0f\xf2\x1f\x7e\x7d\xe9\xd7\xaf\xbb\xfc\xbb\xbf\x51\xa0\x6c\x00\x80\x01\x04\xfd\x47\x0d\xc2\x95\xc7\x10\xff\xcf\x70\xc2\xbc\xf5\xeb\xdf\xff\x9c\xcb\x3f\xfe\x78\xe9\xef\x3f\x06\x01\x6d\x0c\xfc\xff\x0c\x7a\x73\x17\x27\xc7\xff\xf7\x5f\xfc\xff\x79\x2c\x96\x03\x1f\xdf\x5b\xc4\xbd\x1d\x79\x47\x0c\xf9\xb6\xd8\x8d\x1c\xe2\x36\xf7\x87\xbc\x1d\x2f\xdd\x24\x0e\x6e\x1e\xf6\x3e\xa2\xd4\x85\x03\x03\x65\x30\xb0\x71\x02\x65\x30\x70\x4e\x73\xfc\xe7\x57\x26\xe5\xee\xb6\x57\x3e\xae\xb7\xed\x7c\x59\x96\x50\x95\xe4\x13\xcf\x1e\xe5\x61\xff\x6e\xfd\xa0\x62\x70\xe1\xc9\x7b\x6a\xf7\x64\x7c\x58\x06\xc3\xfc\x7f\x67\x3f\x8c\x96\x10\x5d\x67\x27\xda\x57\xa3\x1e\x51\x16\xe9\x7d\x99\x42\xe3\x8e\xc1\xe6\x19\xb9\x21\x37\x65\x13\xf8\x2e\xe4\x1f\x0c\xbc\x83\xb5\x81\xd0\xf0\xd3\x16\x77\xee\xf2\x28\x66\xb4\x89\x51\xce\x86\x7b\x73\xb5\xcc\x80\xdb\x4b\xff\xbb\x0c\xe9\xc5\xc6\x9e\xc0\x64\x48\xeb\x7f\xf8\x81\x91\xc5\x32\x32\x5f\x2d\x6a\x33\x60\xd6\x8e\xc3\xb1\x14\x43\x70\x20\xc8\xa2\x36\xe0\x71\xcc\x1f\x03\xe7\xad\xab\x96\x86\xb0\xe5\xea\xd3\x42\xc2\x7a\x19\x8b\x30\x40\xe2\x8b\xa3\x16\x27\x0f\x1e\xdd\x71\x71\x84\x99\x45\x1a\x1b\xfd\x25\x94\xf5\x9b\x73\xa0\x97\xb1\x4f\x87\xf4\xde\x88\x47\x75\xc4\xf7\x68\xdf\x0c\xa1\x70\xce\x40\xc7\xb7\xa1\xea\xc3\x7a\x69\xef\x8f\xc6\xed\xf9\xa4\x14\x31\xb0\x89\x47\x42\x62\x7f\x3d\x83\x08\xe6\xa9\x3f\x4a\x65\xb5\xe6\xaa\xca\xa6\xc1\xf5\x7b\x14\x53\xa7\x59\xef\xfc\x98\x54\xbd\x24\x45\x5e\x2a\x18\x6b\xd2\x96\x93\x69\x5b\x11\x7c\x7f\xe0\x8f\x52\xb9\x04\xf5\xb1\xed\x4c\xb9\xbd\x1a\x89\xf5\xc8\xf7\x8f\x25\xda\xa9\x42\xaf\xe3\x8e\x7d\x2a\xa6\x1d\xd7\x2f\xd0\x8e\x4b\x3e\xbe\xf0\x47\x69\x0b\xd7\x4c\x81\xf0\xe7\x42\x0b\xbd\x7d\xfe\x81\x87\x4d\xd2\xf4\x71\xf8\xd1\x81\xef\x4c\x84\xbf\xbe\x94\x39\xe5\xc7\x97\x3b\x12\x2b\x8a\x57\x02\x9e\xff\xf3\x8d\x97\x78\x2e\x96\xeb\xca\x44\xb0\x74\xcc\x57\xf9\x60\xee\x0f\x0a\x0b\x1e\x3b\x47\x3c\xd5\x93\xeb\xd8\x07\x9c\x3c\xa1\x1e\x1b\x2a\x52\x3b\xa6\xff\xee\xd9\x8b\x94\xc1\xb0\x90\xc1\xb0\x08\xd8\xbd\x75\x01\x83\x05\x0f\x20\x65\x18\xea\xe9\x6f\x5d\x1f\x1c\x08\x64\xf5\x48\x93\xe5\xde\x18\x11\x25\xcc\x95\x73\x80\xce\xcb\xe1\x79\x9c\xaf\xe8\x3b\xe2\x4d\x29\x09\xc0\xa5\xfa\x35\x19\x63\x32\xec\x9a\xfe\xbb\x27\x24\xf8\x14\x26\x10\x74\x4d\xea\x7f\x5f\x33\x7f\xbe\x13\xcf\xd5\xe6\xb3\x08\xff\x98\x29\xd5\xc6\xdb\xfc\xbe\x68\x50\xbe\x77\x86\x1b\x23\xd3\x96\x47\x6a\x5c\x3c\x13\xff\x8a\x64\x6b\x20\x63\x80\xe1\xbf\xab\x0b\xba\xf6\x3f\xb3\x31\xda\xd1\x3b\x63\xd2\xa0\xbc\x1a\x9d\xf4\x39\x41\xb9\x5d\xab\xa8\xfa\xf9\x58\x3f\xed\xb7\x4d\xf4\x2f\xd5\xcd\xed\x08\xb6\x52\x09\x7b\x3e\x06\x08\xfe\xbb\xba\xff\x1c\x1d\x03\x03\x1b\x23\x00\x96\xc1\xf6\xa9\xc7\xf9\x77\x7f\xb1\x60\x1c\x00\x02\xbe\x04\xc9\x1e\xfb\x63\x60\xfc\x39\x9c\x05\x78\x7f\xe6\x08\x05\x1b\xe5\xe8\x37\x3a\xfe\x74\xec\xc4\x6e\xb2\xb5\x2f\xf9\xba\x75\x78\x76\xd0\xc1\xf6\xc3\x44\xaa\xe1\xea\xdc\x9f\x6f\xb4\xcb\xaa\x74\xde\x31\xa4\xfc\x41\x37\xa7\x63\x89\x0a\x32\x73\xcd\xba\x74\xca\xba\x83\xcb\x79\x8e\xc2\x45\xaf\x73\x9f\xcd\xb7\xfb\xa3\xd4\xaa\x5c\x74\x8c\x49\xc3\xf6\x50\x07\x5e\xc7\x3b\x0f\x8c\x6c\xe0\x8f\x2e\x76\x3c\xf5\x79\xf0\xc9\xd0\xee\x05\x9f\xd6\xbd\x97\xa4\x7f\xee\xb8\x11\x88\x38\xe5\xed\x69\x18\x21\xa0\x5d\xd4\x78\xea\xb4\x49\x6a\x48\xb8\xf8\xc1\xe9\xc5\xd1\xed\x47\xdd\xdd\x35\x5f\x07\x76\x93\xfe\x28\x85\xe8\xcc\x0e\x6e\xcd\x2b\x0e\x09\x48\xdb\xd0\x52\xf8\x5d\xe1\xd1\xc0\x79\x00\x36\xbd\x8a\xde\xa2\xb2\xe1\x9f\x0c\x6e\xfd\x3c\xf4\x67\x5b\x1f\x19\xd1\xd2\x53\xc7\x49\x35\x97\x8b\x79\xac\x9f\x4b\x12\x5b\x26\x14\x9d\x2c\x2d\xef\x25\xb5\x7d\x89\x92\xc7\x62\x36\xec\xd4\x1f\xa5\x17\x81\xd7\xf1\x5e\x99\x1e\x2d\xbc\x56\x91\xad\xfe\x71\x85\x23\x1a\x38\xb2\x85\x57\xe1\x81\x4f\x2a\xc2\xda\x66\x3f\x8c\x27\x44\xfe\x28\x05\xe2\x04\x96\x44\x1c\xaa\x31\xf0\x44\x6b\x63\x06\xef\x27\x02\x36\xa2\x01\x5c\x39\xb6\xe5\x91\xf7\x37\x6d\x57\x35\x3a\xe3\x87\xff\x28\x65\xd9\x6f\x97\x7a\xbe\xfc\xaa\x73\xe7\x73\xfe\x75\x9f\x9f\x6b\xc6\xc9\xa3\x17\x6a\x0e\x19\x5d\xd3\x6d\x64\xc3\x8a\x3b\xce\x56\x14\xfd\x51\xca\x9d\x90\x2c\x06\x8d\xa6\x73\xdb\xd7\x9b\x73\x4b\x6d\x32\x39\xa7\xd5\x1a\x0f\xed\xca\x73\x0a\x07\x34\x94\xc6\x31\x1f\xd6\x89\xfe\x51\xfa\xe5\x3b\x86\x81\x2e\x19\xfc\x56\xb2\xdc\x39\xfa\xc3\x87\x41\xde\x92\x8b\x43\x62\xc1\x55\xf1\x6b\x1f\x93\xe2\xbc\x56\x73\x0f\xe2\xff\x5c\x95\x6c\xa6\xea\xf4\xc5\xc9\x30\xeb\x89\x16\x15\xbf\x46\x70\x51\xd3\x28\x07\xdc\xb8\x68\xb3\x2f\x56\xd3\x99\xde\x74\x95\xfe\x8b\xd6\x1f\xa5\x66\xfb\x12\xb0\xff\xf3\x80\x6b\x44\xf6\x97\x29\xfd\x9a\xb4\x0a\x1d\x23\x96\x32\x0a\x2b\x63\x8b\xf3\x9e\x06\x73\x34\x0a\x8f\x97\xfe\xb9\x36\xeb\xbd\x36\x79\x93\xa4\xec\x2d\x49\xb6\x5f\x7f\x4e\xcd\x70\xc7\x2b\x47\x07\x32\xc3\x62\xb1\xcb\x6b\x54\x90\x88\xe5\xb3\x8b\x02\x7f\xee\xa1\x35\xc5\xbd\x31\x68\x99\x64\xf0\xa4\xf9\x38\x33\xff\x89\x3a\xe3\xa5\xf7\xad\x3b\x37\x0f\xbf\x4c\x5e\x16\xaa\x50\xf4\xda\x7a\x6f\x19\x70\x0c\xfe\xbb\x21\x18\x24\x7b\x7c\x7c\x7c\x1c\x90\xcc\x10\x85\x81\x3b\xc6\x71\x8b\x1d\x03\x08\x9c\xc6\x82\x17\x31\x19\xd8\x96\x0d\x39\x05\x03\x1f\x5b\xe5\x2a\x3b\xa5\x10\xce\xba\x77\x2c\x5d\x7e\x15\x92\xb4\xd4\xdf\x32\x69\x78\x67\x91\xef\x7d\x29\x04\x63\x60\x50\x61\x50\xe6\x93\x48\x5d\xc3\xc0\xdc\x9e\xfe\x35\x4d\x5c\xc7\xc0\xe4\xa4\x89\x0c\xf8\x9f\xff\x02\xfa\xee\xb2\xf4\xd9\xb4\x92\x5f\xc7\xc0\x7a\x11\xdb\xac\xd3\x33\xe1\x82\x21\x15\x05\xa0\x0a\x2b\xd8\x1e\x22\x8b\xb6\x3b\xea\xab\x6a\xf2\xed\x4b\xb9\xf4\xc7\xc5\xd5\x3f\x31\x06\x0d\x7d\xfd\x19\xfc\x59\x25\x79\x77\xd3\x15\x61\x00\xb1\x80\x89\x2a\x10\x5d\x14\x1e\x6b\x54\x8b\xa2\x78\xf4\xee\x0d\x6f\xb1\xe9\xd1\xc1\x8c\x92\xe4\xd2\xe5\x9f\x51\x4d\x18\x4c\x0e\x9c\xc1\x05\x87\x7c\x30\x26\x62\x01\x0b\x55\x58\xba\x9d\x1b\xcc\xfb\x9e\xef\x13\x73\xa2\xef\x82\x43\x4d\xe7\xf7\x32\xd6\xe4\xb0\x46\xc7\x91\x42\x60\xd9\xaf\x37\x3f\x66\x4c\x10\xc6\x42\x2c\x60\xa3\x0a\x52\x37\x44\xb3\xa8\x5b\x5a\xd3\x4e\x7d\xb0\x50\x18\x7d\x49\xfa\xc2\xac\x20\x32\xd9\xf9\x12\x6c\xa0\x0b\x7b\x4c\xc4\x5f\x71\xe1\x81\xb1\x11\x0b\x38\xa8\xc2\x6b\xe2\x77\x01\xc7\x1d\xe7\xa9\x8b\xaa\x6a\x82\xb5\xde\x9d\x5f\x23\x5d\xa3\x53\xab\x6c\x0b\x11\x5f\xb2\x1d\xbc\xe0\x37\x2b\xe3\x0a\xe3\x20\x16\x4e\xa1\x0a\xed\x94\xeb\x5a\x80\x0e\xce\xa6\xc4\xa9\xa4\x2a\xfe\x67\xcc\x40\xfc\x33\x58\x7c\x77\x65\xa6\x68\xc0\xd0\x8f\xf8\x3b\x5d\xb5\x3c\x7c\x0a\xb1\x80\x8b\x2a\x84\x3d\xb1\x99\xef\xb4\xde\xe3\xd8\x7c\x8c\xf5\x75\xce\xb3\x7f\x1b\x52\xe9\xaf\x74\x83\xf0\xba\x2e\x33\xa9\xa4\x34\xfd\xe4\x53\x87\x71\x11\x0b\x78\xa8\x82\x1e\x06\x23\xc6\xbb\xcb\x0f\x07\x6d\xa2\x5e\x5e\x4a\x1c\x32\x6f\xe0\xf8\x02\x69\xcf\x7f\xa1\xc7\xc7\xd7\x20\x3c\x2e\xb8\xe6\xed\x0c\xe3\x21\x16\x4e\xa3\x0a\x7c\x17\xee\xf0\x87\x6b\xfe\x48\x54\x7e\xba\xfc\xe0\x5e\xb2\xee\xbe\x40\xf9\xf5\x1e\x55\x85\x1b\xc3\x1f\x30\x13\x6f\x4a\x3c\xa9\x77\x80\x4f\x23\x16\xf0\x51\x85\xeb\x54\x07\xc4\x14\x17\x46\xbe\x5c\x2d\xb9\xce\xdf\x28\x18\xf9\x3d\x55\x46\x5e\x34\x79\xb2\xcf\x8d\x8b\xb5\x4d\xe6\x5b\x84\x0f\x2f\x8c\x8f\x58\x20\x40\x15\x2c\x39\x12\xe3\xcf\xe8\x5c\x4c\xb4\xeb\x5c\x2d\x7d\xa1\xaf\x47\x79\xc0\x10\x66\x44\xc5\xd7\x15\xa8\x4e\x6d\x79\x2f\x8c\x42\x15\x13\x26\x40\x2c\x9c\x41\x15\x6e\x45\x27\x74\x67\xe7\x34\x9c\xc6\x32\xb4\xb9\x77\xe1\xcb\x3e\xb9\x3b\xb6\x4c\x70\xcf\xe9\x53\x49\xda\xa5\x8e\x54\xb6\x73\x59\xe7\xe0\x33\x88\x85\xb3\xa8\x02\x4f\xc5\x21\x3e\xd6\x85\x5e\x4b\x9c\xee\x21\x7d\x3b\x8e\x23\xa8\xe9\x32\x4e\x4e\xac\xe7\x53\x79\xe1\x4a\x02\xca\x53\x7a\xe5\xc6\xf0\x59\xc4\x02\x21\xaa\x70\xae\x0b\x94\x22\x4e\x51\xde\x7f\x9b\xfa\xbd\x51\xbf\x6f\x8c\x41\x17\xeb\xcd\xd4\xbe\xf0\xf4\x97\x2a\xcd\x67\xab\xdc\xbd\xa1\xd4\x30\x21\x62\x81\x08\x55\xe8\xc7\x59\x77\x53\x6e\xfb\x30\xf0\xe6\x40\x5e\x41\x2b\x35\xd9\xcd\x21\xd1\x91\xda\xc3\x70\x5b\x05\xbf\x87\x7c\xfe\x15\xb1\xa2\x0d\x4c\x84\x58\x20\x46\x9b\x97\x4c\xd5\x8b\x56\xf9\x6a\xe4\xeb\xe0\x46\x05\x76\x9b\x88\xdd\x98\xfd\xa2\xda\x68\x2e\xb3\xaa\x66\x7a\x82\xf5\x0e\x23\x67\x76\x98\x18\xb1\x40\x82\x2a\x70\xe0\xa7\xf8\xc7\xda\x7f\xbf\x30\x11\xb2\xc2\xe8\xa7\xf5\xc2\x83\xc4\xcf\x35\xf5\x4a\x65\x54\x43\x59\xa2\xe3\xc5\xaf\x4e\xcb\x20\x4c\x82\x58\x20\x45\x15\xc2\x1b\x53\xd8\xed\xe2\xc5\x2e\x7d\xec\x93\x72\xbc\xb6\xc5\x57\x96\xab\xf4\xc3\xa5\x66\x31\xe8\xdb\xbb\x3d\xee\xdb\x17\x27\x23\x85\x61\x52\xc4\x02\x19\xaa\x60\x50\xa1\xe6\xf8\x64\xc2\xb9\x71\xd3\x0f\x2b\x61\x64\xac\xfe\xb6\xf9\x88\x33\xae\xcb\x87\xcf\x35\xc7\x47\x01\xe0\x4a\x8b\x29\x1b\x4c\x86\x58\x20\x47\x15\xaa\x94\x44\x7f\x18\x63\x11\x35\xa4\x3e\xbd\x17\x95\x78\xaa\x5e\xbd\x51\xcd\x36\x93\x54\x85\x60\x9f\xed\xe7\x35\x15\x4d\xc7\xb3\xd7\x61\x72\xc4\x02\x05\xaa\xa0\x03\x4e\xd7\x4d\x63\xec\xb1\xf1\xac\x07\x25\x2d\xf1\x77\xd5\x7e\x55\x88\xe8\xec\x57\xae\xea\x79\x32\xbc\x1e\xf0\xb5\xbd\xea\x3a\x4c\x81\x58\x38\x87\x2a\xf8\xfa\xe0\x08\xd0\x90\xe4\xdc\xf5\xfa\x2a\xf1\xcc\x58\xff\x79\xc4\x37\xcb\x3d\x79\xa1\x7b\xb4\x2f\xaa\x9b\xb1\x3b\x25\xa7\x59\x68\xe0\x73\x88\x05\x4a\x54\x61\xa6\xfc\x41\x84\xaf\x04\xb9\x4a\x48\x07\xe1\xeb\x7b\xd5\x53\xfa\xaf\x80\xb1\xc1\x86\xcc\xa8\xd7\x2d\x49\x6a\xf6\x52\xf0\x3c\x31\x4c\x89\x58\x00\x41\x54\x62\x01\xff\x93\xf0\xf3\xf0\x18\xa7\x37\xcc\xe7\x92\xae\xe3\x8d\x56\x4d\x60\x82\x31\x16\xde\x85\xac\xfe\x34\x37\xf6\xf1\x1f\x62\xb2\xc1\x20\x88\xdc\x80\x50\x0d\xcd\x29\x43\x71\xb2\xb2\xb8\x81\xc5\x24\x79\x06\xe7\x70\x6e\x00\x72\xf9\x69\xbb\xcf\x10\x36\x66\x11\x2b\x1d\xbe\xfc\xd0\x89\x0a\x06\x21\xe4\x06\x15\xaa\xb1\x9a\x1e\x30\x0d\xf5\xfa\x39\xc7\xdf\x7f\x7f\x7c\xd3\x0a\xfc\xf1\x9a\x92\xb9\xef\x49\x26\x4f\x56\x16\xbe\x5e\x4a\xa2\x44\xa7\x1a\x0c\x52\x21\x37\xa8\x51\x8d\xe0\x79\x33\x6d\xb5\xcc\x62\xd5\xdb\x6e\x8b\x8f\x5e\x7f\x36\x93\x6b\xbc\x78\x7b\x6d\xee\x7c\x3d\xae\x9f\x7d\xf4\x43\xb6\xf3\xe4\x6c\x30\x48\x8d\xdc\xa0\x41\x35\x96\x1f\xbe\xb4\x30\x8d\x5c\xea\xfc\x7c\xed\x85\x9f\xd1\xa6\xe8\xd2\x05\x25\x77\xfe\xea\x74\x4a\xc6\xf3\x26\x87\x9a\xf6\x5a\x29\xd6\x30\x48\x83\xdc\xa0\x45\x9b\xc8\xaf\xb0\xe7\xdc\x88\x19\x77\xa2\x89\x4a\x37\xac\x16\xa5\x6c\x31\xb2\x06\x1e\xfb\xbb\xbf\x52\x26\xa7\xd5\xa3\x3c\x57\x72\xef\x02\x0c\xd2\x22\x37\xe8\x50\x8d\xa0\x37\x4f\x1d\xb7\x71\xdd\x39\x0c\xdb\x8f\x5e\xe0\x4a\x51\xdc\xba\xcb\x70\x5e\xd3\xa6\xa5\xf8\xe0\xc8\xa1\xd2\xd7\xd6\x4a\xdf\x02\x06\xe9\x90\x1b\xf4\xa8\x46\x77\xf3\x8d\xd4\x8d\xfd\x4c\x0a\x78\x39\xfd\x86\x3b\x4e\x97\xce\x58\x5e\xf8\xa9\xd1\x5d\x71\x3e\x15\xbc\xf6\xa2\xdb\x45\x29\x4c\x30\x48\x8f\xd4\x28\x85\xfe\x5d\x63\xfb\xff\x1a\x10\x90\x01\xf5\x41\xb9\x13\x52\x96\x32\x3f\x9e\xec\xa0\x10\x3d\x8e\x99\x1e\xbf\xcc\x46\xcb\xb0\x8d\xff\x22\x7f\x94\x9f\xda\x16\x5c\xb2\x38\xdf\xe3\x02\x83\x0c\xc8\x4f\x9c\x11\xd5\xf0\xc9\x91\x0c\xff\x5a\x53\x5d\x7c\xee\xbe\xd8\x43\x15\xd2\x64\x7f\xee\xd5\xfa\x7a\xed\xd7\x22\xf2\x8e\x81\x89\x49\x5b\x9a\x0d\x82\x30\xc8\x88\xdc\x60\x42\x35\x0a\xde\x98\x7d\xeb\xe4\x64\xa3\xd6\xbe\x61\x2f\xd1\xd6\x41\x5b\x66\x45\x97\xf9\x46\xe7\x4e\xe1\xd4\x45\x39\x5f\xc1\x2b\xa1\xcc\xae\x30\xc8\x84\xdc\x60\x46\x7b\xaf\x94\xb8\x90\xec\x84\xc7\x24\x30\x49\x29\x79\x0a\xee\x71\x8b\x7c\x33\x16\xbc\xf3\x2d\x6f\xc5\x83\x19\x00\x67\xde\x71\x07\x2a\xc1\x20\x33\x72\x83\x05\xd5\xf8\xa8\xfe\x9d\xae\xec\x12\x65\xd7\xa3\xd8\x3c\xda\x35\x02\xf3\x4f\xcc\x5d\x3b\x2e\x37\x57\xc6\xed\x76\xdb\x2c\x80\xf9\xc0\x21\x13\x18\x64\x41\x6e\x9c\x47\x35\x14\xad\x14\xdb\x9e\x53\x93\xa5\x74\x7b\xad\x12\xe4\xd9\xf6\xe9\xc7\xdf\x0d\x50\xf2\x59\x48\x1a\x5e\xc3\xa3\x7f\x17\xf9\xe3\xc2\x35\x18\x3c\x8f\xdc\xb8\x80\x6a\x70\x11\xf9\xba\x39\x0d\x4a\x7d\x2e\xdd\x76\x93\x97\xfa\xa0\xf0\x73\x8f\x88\x87\x8e\x72\x08\xeb\x92\xcf\x33\x3d\x3c\x7b\x9f\x61\x13\x18\xbc\x80\xdc\x60\x45\x35\x24\x92\xeb\xc5\x0e\xbf\x53\x7c\x55\x75\x3e\x63\xdd\x6a\xc1\xac\x13\xa3\x59\x81\x6f\xf7\x1c\xa8\xed\x19\xf8\xa6\x7e\x59\xf8\x8a\x32\x0c\xb2\x22\x37\xd8\x50\x0d\xa7\xe9\xe9\xa0\xd0\x83\xc0\x9a\xcb\x9c\x96\x6e\xb9\x9f\x8e\xe3\x96\x6a\x7e\x90\xd0\x4e\x94\x66\x26\x3e\x95\x5d\xbb\xab\xb9\x6d\x0d\x83\x6c\xc8\x0d\x76\xb4\xbe\xea\xdc\xc0\x54\x4c\x2f\x61\x16\xa5\x8f\xb8\xdf\x98\xbb\xb1\x5c\x4b\xd2\x2c\xfc\xe5\x69\xc8\xcc\xa3\x0d\x82\x11\x5b\x32\x1d\x52\x18\x64\x47\x6e\x70\xa0\x1a\x3f\x25\x7d\x6b\xe6\xcb\x66\x9e\x95\xd2\x2f\x7d\x97\x6e\x4c\x11\x9e\x2c\x9f\xba\x2d\xce\x6e\x36\x1b\x33\x84\x2d\xf6\xee\x7a\xb1\x31\x0c\x72\x20\x37\x38\x51\x8d\xf7\x8f\x86\xbb\xdf\x77\xfb\x28\x88\x6b\xa4\x7f\xff\x52\x07\x16\x70\xf3\xe1\x14\xb4\x49\xf0\x95\xd5\x7b\x60\x9b\x37\x7e\xf9\x2e\x0a\x83\x9c\xc8\x0d\x2e\xb4\x2b\x62\x5e\x45\xbc\x86\xb5\xf2\x22\xb2\x18\x9b\x9c\x8d\x1f\x93\x4f\x73\xd9\x1f\xb3\x96\xe4\x5d\x76\x4e\x7b\x2f\xb5\x53\xc5\xb7\x8b\x07\x83\x5c\xc8\x0d\x6e\x54\x83\x9d\x8b\x68\x97\x79\x4a\x7c\x6b\x73\x32\xe3\x34\xc5\xb5\xd3\x1f\x59\x29\x13\x00\x42\x77\xf2\xbc\xdb\x14\xfa\x1f\x3d\x13\x4b\x35\x60\x90\x1b\xb9\xc1\x83\x6a\xe4\x97\x36\x5d\x78\x57\x75\x14\x3f\x10\x17\xdb\x13\x82\xbd\x86\xb1\x26\xa7\x91\x5d\x85\x57\xfa\x8c\x09\x27\x2f\x19\x37\x63\x81\x13\x06\x79\x90\x1b\xbc\xa8\xc6\x83\xa5\x8d\x61\x5c\x53\x39\x9a\x7b\xfe\xc2\x95\x91\x12\xd6\xcd\xfa\x83\xe7\x9f\x72\x05\x54\xe2\x61\x7f\x68\x7f\x91\x3e\x55\x67\x00\x83\xbc\xc8\x8d\x8b\x68\x3d\x50\xf7\x95\xe6\x85\x84\xe7\x7a\x90\xd3\x1e\x4b\x00\x89\x84\x9e\x05\x45\xa1\x40\xcc\xe0\x9c\xbb\x05\x97\x8c\xb7\xd2\xa7\x15\x5c\x18\xbc\x88\xdc\xe0\x43\x35\x04\x09\x09\x9f\x5a\x93\x19\xd2\xbb\xb3\x3b\x59\x57\x96\x2b\x0b\x9c\x2a\x33\xc3\x3b\x7f\x68\x60\xcc\xb6\x2c\x3d\x59\x5c\x5f\x87\x03\x83\x7c\xc8\x0d\x7e\x54\x03\xca\xff\x31\x16\x6c\x37\xdb\xb3\xe4\x59\x9d\xf0\x2e\xe7\xf9\x73\xed\xb4\x2e\xf2\xb3\xb5\x74\xa2\x7d\xb8\x74\x4f\x7f\x70\xfd\xe4\x84\x41\x7e\xe4\xc6\x25\x54\x63\xab\xe2\x0e\xf1\x44\xe6\xbb\x34\x49\x47\x2b\xa5\x84\xeb\xae\x96\x5a\x09\x53\x86\xe1\xad\xe6\x2e\xaf\xdf\xee\x47\xda\xd3\xcf\x38\xc1\xe0\x25\xe4\x86\x00\xaa\xe1\xe8\xc5\xcc\x5f\xa1\xe6\x28\x49\x12\x62\xbd\x23\x5a\x70\x57\xef\xd9\xae\xba\xf3\x75\xe3\x47\xa7\xf4\xac\x22\xae\x7f\x9e\x8c\x97\x82\x41\x01\xe4\x86\x20\xaa\xe1\x15\xd4\xef\xb9\xfb\x86\xbf\x15\xb3\xa0\xd6\x20\xc1\x3a\xa6\x56\x72\x73\x4d\xe7\x4e\xd6\xc8\x9d\x27\x77\x22\x9e\x37\xf1\x1d\xb1\xc1\xa0\x20\x72\x43\x08\xd5\x08\xa1\x7e\xa9\xf5\x28\x80\xdc\xe1\xe6\xd0\xbe\x78\xaa\xc2\x1d\x16\x2e\xbe\xda\x56\x6e\xbc\xa0\x37\xfc\x1f\x78\x5f\x9e\x23\x30\xa7\x82\x41\x21\xe4\x86\x30\xaa\x71\x5a\x59\x90\x92\xe0\x50\xad\xf3\xe8\x42\xae\x00\x16\xed\xe2\xf0\xb3\x2b\x55\x04\x2d\x24\x56\x75\xea\xd9\x39\xdb\x0e\xa3\x2e\xac\x30\x28\x8c\xdc\x10\x41\x7b\x9d\x3f\xa7\xad\xb6\xa5\xf3\xcf\xbc\x6b\x6d\xd2\x4d\x06\xbf\x06\x86\x62\xf1\x8c\xf9\x84\x06\x72\xb2\x64\x1f\x5b\x37\xb6\x30\x38\xc2\xa0\x08\x72\x43\x14\xd5\xb0\xae\xda\x9d\xe7\xa2\xe9\xa9\x1c\x5c\x5a\x3f\x2f\x8b\xad\x2f\x13\xb9\x60\x73\xd5\xca\xfe\x12\x49\x8b\x99\x15\xd9\x44\xcb\x65\x0d\x18\x14\x45\x6e\x88\xa1\x1a\xd2\xf6\xd6\xcd\xbd\x86\xf2\xfd\x4f\xcb\x06\x76\x0a\x77\x9c\x5b\x19\x32\xb6\x98\xac\x17\xd3\xda\x8f\x0d\x1a\x92\xda\x9a\xcb\x39\x61\x50\x0c\xb9\x71\x19\xd5\xe8\x5c\xb8\x20\x40\x98\x40\x4d\xa3\xaf\xff\xed\x14\xeb\x2e\x4d\xb9\x6d\xd1\x7a\x1f\x99\xf1\xdd\x4b\x72\x4a\x8c\x6f\x9c\x28\x39\x2f\xc3\xe0\x65\xe4\x86\x38\xda\x6b\x50\x5c\x10\x76\x09\x3d\xaf\x8e\xf1\x88\xb3\xad\xbb\x61\x0f\xdf\xff\x54\xf9\x20\xe9\x9a\xb0\x4a\xa0\xcb\x05\x0d\xc5\x60\x76\x11\x18\x14\x47\x6e\x48\xa0\x1a\x57\xad\xea\xd3\xb4\x6b\xef\xe4\x44\xfb\x1b\xd6\xff\xcc\x2e\x74\xff\x92\xb1\x11\xda\x41\xad\x20\x24\xe7\x9f\xcb\x25\xff\xdd\xc7\x1e\x06\x25\x90\x1b\x92\x68\x6b\x80\xae\x62\xfe\x00\x97\x84\x92\x27\xf3\x1c\x8d\xca\x90\x21\xe6\x69\x71\x85\x92\x77\x3d\xfd\x0e\x31\xdb\xc4\xf6\xe6\x35\x9e\xd2\x30\x28\x89\xdc\xb8\x82\x6a\x30\x8d\x2b\x90\x84\x99\xce\xda\x0b\x15\x71\x19\x10\xc5\x80\x2e\x75\x61\x34\x7a\x2d\x38\x51\x99\x4a\xea\xc4\xd7\xa2\x6b\xf0\xec\x60\xf0\xca\x7f\xdb\xb0\x9c\x74\x7b\xed\x8f\x86\x45\x0a\xed\x05\xf5\xbd\x93\xfc\x19\xff\x83\x12\xf6\x6b\x53\xfa\x5a\xb3\xae\x52\xf3\x6b\x92\x21\x26\x26\x05\x79\xe0\xd5\xf0\xe6\x58\xef\x0f\xe4\x30\x28\x85\xfc\xc4\xa5\x51\x0d\x05\x36\xdf\x48\x56\xf5\xb6\x26\x9d\x61\x83\x37\x09\x8a\xd2\x35\xd1\xf3\x54\x9b\x1a\x7e\xcd\xa6\xcd\xf3\x1d\x3f\x84\xf7\x3a\x95\x60\x50\x1a\xb9\x21\x83\x6a\x58\xf5\x60\xd6\x89\xf7\x24\x6f\x37\xf2\x1f\x38\x57\xc8\xb9\x8d\x30\x75\xa8\x55\x7a\x17\x8b\x89\x7c\xaa\x1d\xe3\x8f\x50\x32\x17\x82\x41\x19\xe4\xc6\x55\x54\x23\xeb\x5c\xfa\x19\x19\xec\xcf\x76\x93\xdc\xce\x12\x1f\x5e\x85\xd8\x5d\xf6\xe9\x0d\xcc\xed\x39\x6b\x57\x92\x6d\x53\xfe\xf0\xad\x3c\x1e\x0c\x5e\x45\x6e\xc8\xa2\xdd\xc2\x6a\xca\xd6\xb9\x99\x95\x52\x20\x96\xbe\xb4\xd8\x8e\x5b\xb1\x14\xe0\x53\xe4\x72\xfc\x69\xca\xf8\x63\xc1\xe6\xcb\x5d\x5f\x76\x65\x18\x94\x45\x6e\xc8\xa1\x1a\x24\x0b\x31\x2a\xad\x53\x8f\x22\xad\xc9\x1a\xda\x23\x70\xd7\xee\x7f\xe1\x56\x78\xc7\x4e\xed\x61\x64\x30\x6d\xd3\x2a\x58\xea\x4d\x07\x83\x72\xc8\x0d\x79\x54\xc3\x7f\xb6\xee\xde\x42\x5b\xcf\x25\x7c\x5f\x66\xf6\xba\xfb\x53\x87\xb2\x2d\xf3\x37\x8a\x82\x2e\x66\x68\x79\x16\x88\x5f\xb0\xd7\x61\x87\x41\x79\xe4\x86\x02\xaa\xf1\xec\x4e\x71\x46\xbf\x5d\x7b\xbe\xa9\xc3\x29\xc9\x3c\x59\x3d\x16\x93\xa6\xe5\x9a\xb6\xc7\x51\x24\x26\x4b\x9c\xeb\x99\x9f\xbf\x30\xc1\xa0\x02\x72\xe3\x1a\xaa\x11\x18\x4a\x66\xd1\xfa\x7a\x69\x99\x82\x88\xe8\xd3\x27\x82\xfa\xaa\x6d\x57\x32\x50\x3b\xc5\x51\xac\xd3\x3f\x7e\xd2\x7a\x79\xcb\x02\x06\xaf\x21\x37\xae\xa3\x5d\x90\xad\xd5\x93\x41\x73\x38\x84\x4e\xcd\xb7\xb6\xfd\x35\x99\xcd\x7b\x2e\xe9\x6a\x12\xdb\x29\x5c\x92\x15\xcd\xeb\xdd\x7a\x78\x9b\x12\x06\xaf\x23\x37\x14\x51\x8d\x8c\x42\xe3\x4c\x25\xb1\x18\xd8\x36\x95\x89\x20\x8e\xab\x21\xdc\x55\x8a\x22\x7d\x9f\xda\x28\x27\x85\xe8\xb5\xb7\xae\x2e\xd3\x35\x18\x54\x44\x6e\x28\xa1\x2d\xba\xee\xb7\x57\xed\x59\x90\xab\xd4\xd3\x46\x3d\x6e\x0e\x1b\x89\x62\x29\x20\x3a\x1a\x91\x30\x15\xaa\x7d\xaa\x13\x1e\x72\x23\x88\x05\x06\x95\x90\x1b\xca\xa8\x06\x26\xc9\x64\x93\xdf\xa6\x04\x85\x7d\x9c\xa3\xe6\xc6\x26\x5d\x8b\x08\x57\x5f\x49\xb5\x86\xb9\x50\x6d\xe3\x46\x6b\xe6\x1a\x97\x2e\x0c\x2a\x23\x37\x54\x50\x0d\x57\xa5\x1c\x03\x1f\x46\x36\xd9\x5a\x02\x77\xea\x87\x51\x36\x1f\xa6\x2c\x25\x9c\x1c\x03\xe4\xd5\x94\x5d\x6a\x34\x7a\x26\x60\x01\x18\x54\x41\x6e\xa8\xa2\xbd\x19\x3c\xf6\x60\x23\xe4\x96\x7c\xe7\x3a\x76\x2c\xc6\x5c\xd5\x98\xdc\xf7\xa0\x3a\x82\x10\x1b\xd2\x65\xc2\x7c\xaf\x3f\x5e\x7d\x15\x07\x06\x55\x91\x1b\x6a\x68\xcd\xdd\xa2\x0c\xb7\x1c\x18\x88\x1d\x49\x61\x2d\xf0\xb9\xcc\x6f\x6d\x3f\x3f\xac\xd6\xc0\x87\x9d\x9f\x50\x1e\x23\xc7\x8a\x55\x0f\x07\x06\xd5\x90\x1b\xea\xa8\x86\x85\xd1\x91\x00\xd6\x4e\xe3\x0f\x16\x5b\xdf\x20\x56\xa2\x48\x9c\x2b\xc5\xbe\x3f\xc3\x8c\x31\x1e\xad\x4b\x2a\x05\x6e\xdc\xd7\x3a\x0f\x83\xea\xc8\x0d\x0d\x54\x83\x5c\x33\xd8\xd0\x94\x17\x9b\x94\x23\xc1\x55\xe3\xce\xc5\x6f\x63\x24\x5a\xa6\x55\xf6\x95\xe4\xba\xbd\x49\x9b\xfc\x5f\xe2\xea\x18\x61\x50\x03\xb9\x71\x03\xd5\xd8\x0b\xe5\xf3\x1c\x9b\x22\xff\x64\x6a\x9d\x6b\xff\xad\x76\x38\x0d\x3c\x68\xa5\x39\x35\x16\x4a\x75\x61\x2d\xab\xf0\xae\xd3\x59\x10\x06\x6f\x20\x37\x34\x51\x0d\x49\xe8\x1d\x40\x37\xd7\xc3\xdc\xeb\xf1\xe8\xfc\x4d\x5e\x53\xfe\x20\xef\x28\x05\x62\x8a\x4c\x6f\x01\x51\xfa\xd7\x33\x72\x7c\x8c\x30\xa8\x89\xdc\xd0\x42\x35\x6e\x56\x55\xe6\x34\x69\x89\xf3\xb5\xbf\xa7\x16\x5a\xb9\xdf\x77\xad\xe6\xba\x4c\x12\xac\xb7\x1a\x6e\xde\x7b\x24\x75\x21\xf4\x01\x16\x0c\x6a\x21\x37\xb4\x51\x8d\x23\x6c\x17\xd6\xf9\xe5\x41\x17\x85\xe8\x2c\x7c\x4c\x90\x2e\x59\x41\x8f\x7a\x27\x89\xee\xba\x74\xdb\x28\x47\xc2\xb4\x0d\x2d\x0f\x0c\x6a\x23\x37\x6e\xa2\x1a\xa4\x7b\x6a\x8f\x14\x4f\xc9\x60\xf2\xa6\x3f\xbe\xcd\xbf\x1b\xfa\x80\x87\x5d\x37\xd1\x8c\x4a\xe6\xac\x73\xcc\xd5\x41\x0d\xe6\x09\x27\x18\xbc\x89\xdc\xd0\x41\x35\xc6\xb1\x08\x59\xa3\x33\x79\xdf\x89\x46\x29\xba\x7c\xc6\xd9\xdc\xe5\xba\x74\xef\x0e\xaf\x1b\xbd\x62\x78\x85\x18\x8b\x15\xd9\x22\x35\x0c\xea\x20\x37\x6e\xa1\x1a\xd4\xbd\x04\x81\x5b\xfe\x65\x0f\x81\x0c\xf3\x0a\x4d\x93\xbb\x98\x62\xb0\x63\x4f\x90\xbe\x9f\x6f\x1f\x55\x5f\x16\x74\x37\x40\x0a\x06\x6f\x21\x37\x74\xd1\xe6\xab\xba\xe2\x82\x32\xfe\x6b\x7a\x3a\x4e\x2f\xab\x40\x4d\xc0\x31\x98\x38\xdd\x92\x80\xbb\x11\xc2\x9b\xf9\xc2\x71\x9e\x0f\x1b\x80\x41\x5d\xe4\x86\x1e\xaa\x51\x59\x5f\x13\xf2\x6a\xf2\x88\x3c\xb0\xf6\xc1\x6b\x16\xed\xc0\x1b\x61\x03\x0a\xb3\x8f\x6e\x47\xd9\x31\x35\xf0\xe5\x9a\x29\x95\x70\xc3\xa0\x1e\x72\x43\x1f\x6d\x71\x10\x33\x5b\xf0\xde\xd5\xfb\xf3\xe7\x92\x44\x23\x0d\x2f\x28\x71\xc9\xbb\xdd\xc3\xdb\x55\x4d\xeb\x77\xd2\x1b\x32\x32\xb1\xa0\x12\x87\x41\x7d\xe4\x86\x01\xda\x86\x05\xba\xcf\x03\xcc\x7d\xb7\xe4\x8a\x88\x0f\xc9\x4a\xbb\x2e\xcb\xec\xe0\x8f\x5d\x65\xf2\xf4\x1a\x1e\xa3\xf7\x36\x79\x3b\x58\x20\x0c\x83\x06\xc8\x0d\x43\xb4\x4d\x42\x4d\x0c\x9f\x66\x17\xb0\xb4\x2b\x86\x64\x3c\x7a\x72\xc4\xd6\x78\xb3\x97\x59\xb3\xb2\x8b\x52\xd4\x32\x94\xb5\x5f\x8e\x26\x58\xc1\xa0\x21\x72\xc3\x08\xd5\xf8\x92\x84\xe5\x5d\x24\x40\x28\x6f\xd2\x1a\x17\xfe\x14\xbb\xf6\x8d\x42\x2f\x8b\xbe\xdd\x33\x06\x6f\x51\x0c\x11\x5f\x8d\xc6\x50\x55\x18\x34\x42\x6e\x18\xa3\x2d\x9e\x4f\x66\x45\x6e\x7c\x7a\xe6\x78\xc6\xda\x60\x34\xfd\xb8\xbd\x97\x62\xd6\x78\x89\x7c\x56\x4b\x4d\x7b\x65\x53\xea\xb6\xd7\x04\x27\x0c\x1a\xff\xb7\x0d\xcb\x49\x9b\xfc\xfe\x68\x58\x4c\x50\x1f\x94\x0b\xa6\x32\xcd\x7a\xd7\xcf\x38\x8d\xe8\x8c\x6f\x7e\x70\x7b\x25\xad\x42\x1d\x99\xe4\x8f\xd9\x3a\x67\x8f\xfd\x3c\x45\xfc\x23\x56\x18\x34\x41\x7e\xe2\xa6\xa8\x86\xae\x6f\xe8\x80\x73\xd8\xe8\x19\xc6\x94\x47\x7a\x05\x36\x3e\x36\x2a\x57\xc5\xe2\x37\x92\x0f\xe6\xbe\xd6\xba\x8a\x26\x2b\x2b\x99\xc2\xa0\x29\x72\xc3\x0c\xd5\x48\x10\x1b\x39\x53\xa8\x32\x08\x2e\xdc\xbd\xee\x5b\x25\xf7\x69\x5d\x65\x10\xf3\x45\xcc\x95\x6f\x03\x4b\x56\x8f\xc5\xc6\x34\xa6\x00\x18\x34\x43\x6e\x98\xa3\x1a\x4a\xcf\x4d\x42\xdf\x38\x56\xf4\x06\xbe\x7a\xf2\x3c\xe9\x71\x4a\xfa\xa1\xd4\x1b\xa3\xc1\xba\x4a\x3c\x1a\xd5\xe7\xde\xa5\x17\x45\xf1\x60\xd0\x1c\xb9\x61\x81\x6a\xd0\xec\x5d\xc2\xd6\x7d\xf6\xc4\xe6\x78\xa2\x8c\x3f\x5e\xfd\x66\xcc\xb9\x1b\x73\x09\x9f\xd9\x71\x43\x58\xce\x54\x6b\x71\x2b\xde\x64\x82\x41\x0b\xe4\x86\x25\xaa\x11\xaf\x40\x76\xeb\x26\xbf\x0b\x11\x03\x4d\x4b\xa9\xc1\x86\xd9\x93\x77\xcf\x8f\xeb\xa2\xd8\x2f\xcc\x7e\x98\x0a\x3d\xa3\x8b\x6d\x64\x01\x83\x96\xc8\x8d\xdb\xa8\xc6\xc0\xe5\xd3\x1f\xf0\xc9\xf7\x39\x83\xc7\xee\x53\xd0\x34\xfb\x82\x41\x43\xbd\x1d\x8f\x23\x5b\x56\x6f\xda\x13\xad\xcd\x9b\xfc\xd4\x85\xc1\xdb\xc8\x0d\x2b\x54\xc3\xb3\xcc\x32\x30\x75\xd8\x59\xe4\x0a\xde\xe7\x09\x8a\x66\x39\x13\x15\xba\x3a\x69\x51\xb5\x69\xda\x96\xaa\x96\x4f\x2b\x33\x3d\x52\x30\x68\x85\xdc\xb0\x46\x35\x3e\xd7\x07\x0c\x10\x8d\x6d\xc7\xf5\x59\x99\x37\x65\x61\xa6\x04\x19\xba\x13\xbb\xd3\x2e\x8f\xa9\xf8\x09\x5d\x53\x78\xb3\xf5\xdc\x04\x06\xad\x91\x1b\x36\xa8\x46\xd9\x26\x9d\x8a\xd3\x84\x13\xb6\xd5\xb7\xc8\x9a\xdb\x42\x69\x89\x9a\x07\xaa\xf3\x44\x85\xcd\x14\x39\x29\x7c\x1a\xa9\x2d\x6d\xae\x30\x68\x83\xdc\xb0\x45\xbb\x93\xfa\x6c\xed\xa1\xc5\xfd\xd1\x84\x8e\x94\xe3\x55\x9c\x3b\x77\x2c\x4e\x31\xe6\xf9\x74\xbe\xb0\x24\x50\x57\x6e\xb5\xa0\xdb\xb5\xa0\x81\x41\x5b\xe4\x86\x1d\xda\x2e\xc2\x1f\x3b\x1e\xb1\x05\x6a\x12\x3c\x81\x46\xd1\xfe\xdf\x5e\xa7\x10\x3c\x71\x92\x7b\xc0\x13\x67\x11\x10\xaf\x45\x91\xc5\x28\xaa\x09\x83\x76\xc8\x0d\x7b\x54\x83\xbe\x7a\xdb\xcd\x4f\x7c\x29\xa1\x60\x76\x5c\x31\xdd\x2c\x42\x99\x38\x45\xbe\xd1\x5d\x10\x03\xa3\xf4\x4c\x55\x6a\x2d\xb6\x88\x20\x0c\xda\x23\x37\x1c\x50\x0d\x0a\x36\x8b\x37\xbe\xab\x73\x98\x98\xeb\x41\x0b\x14\xeb\xd6\x94\x67\xef\x4f\x54\x58\xa9\xc7\xd1\x46\x04\xca\x38\x3c\x5c\xd4\x55\x83\x41\x07\xe4\x86\x23\xaa\xf1\x42\x8e\x79\x2e\x63\x42\xcc\x06\x57\x50\x9e\x91\xd8\x81\x3c\xe9\x88\x2d\xf7\xe5\xbb\x86\x59\x47\x4b\x99\x1e\xe7\x46\x46\x6e\x2e\x18\x74\x44\x6e\x38\xa1\x1a\xe2\xb3\x46\xa3\xe7\x54\xbb\x5c\x0b\xb3\x06\xb6\xc8\xcf\x7f\x99\xb5\xd3\xee\xb6\xe4\x9f\x2d\x4a\x11\xd5\x58\xac\xe5\xc5\xf5\x14\x80\x41\x27\xe4\xc6\x1d\x54\xa3\x5a\x4d\xb5\x9b\x33\x30\xa8\x07\x78\x4d\x9f\xc6\x1e\xf2\xbd\xbc\xac\xd2\xcb\x6e\xef\xec\x4c\x47\xef\x8f\x81\xd0\xb4\x32\x7f\x5c\x18\xbc\x83\xdc\x70\x46\x7b\x9d\xab\x33\x31\x39\x65\xff\xdc\x49\x6f\x73\x3f\xe8\x5d\x7e\xfa\xf1\x0c\x73\x0e\x3f\x53\x9c\xb1\xeb\x0d\xba\xac\xb2\x35\xd6\xb7\x22\x30\xe8\x8c\xdc\x70\x41\x35\xde\xf2\x69\xdc\x17\xcd\xf2\x30\x9e\xe8\xfc\xfc\x5c\x2f\x57\x4e\xfd\xf6\xb4\xe9\x7c\x93\xed\xc5\x74\xbd\xfd\xce\x0b\x81\xbd\x5f\xcc\x60\xd0\x05\xb9\xe1\x8a\x6a\xe4\x26\x5c\x75\x8d\xa7\x2c\xaf\x60\x98\x4c\x8c\x94\x77\xc5\x36\xcb\x38\x95\x54\x5e\xaa\x01\xea\x5f\x91\xbd\xe4\xea\x52\x2b\x49\x0a\x83\xae\xc8\x8d\xbb\x68\x77\x6b\x6f\x8e\xd7\x14\xbb\x6f\xa4\xec\x1d\x71\xbe\x9b\x9c\x8a\x71\x7f\xee\x98\xfb\x50\x09\xa7\xb0\x80\xb5\x21\x42\xfa\x82\xe9\x0f\x15\x18\xbc\x8b\xdc\x70\x43\x35\xb4\x96\x82\xdf\xf8\x3f\x7c\xb6\x77\x8d\xd3\xb1\x58\x7d\x20\xe3\xc8\xef\xe9\xe0\x05\xb8\x9b\xfc\x5d\x48\xdf\xee\x27\xd9\xa7\x18\xb6\x30\xe8\x86\xdc\xb8\x87\x6a\x70\x8a\xdc\xc2\xb5\x19\xa8\x5e\x68\x57\xd3\x6e\xb3\xdf\xca\x2d\x37\x71\x6c\x3c\x28\x4e\x3a\xa6\xb8\x34\x17\x1f\xf8\x61\xf9\x58\x10\x06\xef\x21\x37\xdc\x51\x0d\x39\xc9\xaf\xa6\x2f\x8b\xa8\xdb\x98\x7b\x0b\xe2\x3b\x9d\xef\xb5\xad\xb8\x14\x1c\x9a\x18\xd8\x1b\x94\x28\xe9\x10\x68\x1d\xe0\x28\xc3\xa0\x3b\x72\xc3\x03\xd5\xe8\x49\xa1\x87\xbd\xd4\xa7\xc8\x4e\x8b\xc2\xc2\xaf\x2e\x99\xde\x83\x28\x3e\x2d\x86\x4e\xbc\x2f\xaf\xba\xba\x40\x64\xda\xd1\x81\x05\x83\x1e\xc8\x0d\x4f\x54\x23\x31\x81\x09\x33\xec\x62\xbb\x94\xef\x0e\xfe\xb7\x63\x7d\xfc\xcf\xe3\x76\x98\x4d\x97\x19\xde\x58\x78\x63\x27\x33\x5e\xfe\xaa\x0f\xc0\xa0\x27\x72\xc3\x0b\xd5\x38\x23\x9f\x27\x43\x39\x65\x54\xd9\x34\xb2\xce\x70\xe0\x56\xe2\xc1\x68\x53\x49\xd1\x19\x40\xb1\x71\x95\x97\xeb\xa0\x65\x9d\x4f\x06\x06\xbd\x90\x1b\xde\xa8\x46\x85\xf0\x30\xfe\xf3\x83\x99\x2c\x92\xe4\xf1\x5b\x8f\xcc\xcc\x81\xd9\xc1\x50\x2f\xb7\x9e\x29\x01\xda\x60\x95\xc7\x2c\x3d\xe3\xe2\x30\xe8\x8d\xdc\xf0\x41\x5b\xd8\x16\x11\x18\x59\xf4\x89\xc9\xf4\x4b\x8e\x9c\x23\xd2\x5a\x8c\x17\x5a\xdf\x6d\xb8\x57\x20\x4c\x2c\x6c\xea\x70\x2b\x3f\x29\xc0\x02\x06\x7d\x90\x1b\xbe\x68\x73\x62\x82\x35\xe1\x77\xee\x1e\xff\xda\xcb\x91\xc7\x9d\x85\x69\x36\x02\x25\xfb\x33\xe4\x4d\xd7\x24\x9b\xba\x7a\xdc\xdb\x95\x00\x7b\x18\xf4\x45\x6e\xf8\xa1\x1a\x11\xd7\xc7\xb8\x41\x17\x9e\x9d\x22\x5e\xcd\x5b\x9c\x26\x19\x9b\x41\xbd\x97\xd2\x8f\xe5\x36\xb6\x1c\x3e\x96\x62\x10\xbf\xd1\x62\x85\x41\x3f\xe4\x86\x3f\xaa\x61\x27\x12\x71\x93\x87\x38\x87\xc2\x80\xba\x6e\xb5\xed\x72\xaa\xb7\x55\x30\x43\xe7\xcb\xcf\xa1\xc9\x33\x3d\xe2\xdb\xe9\x71\x17\x25\x60\xd0\xff\xbf\x6d\x58\x4e\xfa\xa8\xd1\x1f\x0d\x4b\x00\xea\x83\xca\x59\x36\xfb\xcc\xd3\x1a\xde\x98\xce\xf9\x71\x87\x1d\x2f\x3f\x34\xdf\xa6\xfe\x54\xef\x15\x1d\x6c\x5d\x1d\x31\xbf\xcf\x06\x3c\x82\x30\x18\x80\xfc\xc4\x61\xb4\x15\x99\x9f\xf7\xa9\xe4\x17\x23\xbf\xd6\x3a\x65\xa6\xb1\x71\x27\x8c\x5f\x34\x8e\xf8\xf8\x02\xe7\x40\x68\x3a\x3a\x63\xc0\x5c\x9e\xf4\x1a\x0c\xc2\xc8\x8d\x40\x54\x23\x29\x0f\x72\x0c\x0b\xe6\x2f\xae\xaf\xbb\xb9\xaa\x15\x9d\x47\x21\x36\x40\x44\x9c\x17\xc6\xe7\x0a\x14\xb8\x93\xae\x13\x76\x3a\xc3\x60\x20\x72\x23\x08\x6d\xfb\x83\xb6\x84\x4b\x5a\x2d\x83\xe3\x50\x8b\xe3\x33\xc6\x17\x61\x31\x99\xda\xd9\xb3\x74\xb0\x8d\x91\x22\x3b\xd6\xa3\xdb\x4a\xfd\x82\x30\x18\x84\xdc\x08\x46\x35\x9c\xc1\x49\x83\x6a\x69\x6d\x2f\xd6\x87\xea\x5d\x14\xa0\x1f\x47\x7e\x6c\x9e\x5f\x5b\xe3\x6c\x67\x6b\xe0\xa6\x26\x7f\xfa\x75\x7b\x18\x0c\x46\x6e\x84\xa0\x1a\xcf\x0f\xef\xfc\x28\x5b\x61\x7a\x7c\x5a\xf2\x79\x7b\xb5\x8c\xa2\x1e\x7b\xba\x2a\x63\x45\x16\x0f\xf3\x2e\x73\xd4\x23\x45\xe7\x55\x3e\x18\x0c\x41\x6e\xdc\x47\x35\x36\x7e\x32\x90\x2c\x8d\x3b\xa9\xcb\x6d\xc8\x4b\xdd\x76\x56\x52\x8a\xfe\xbe\x49\xa0\x50\x11\x1d\xa6\x9c\xd7\x7c\x8a\x77\xe3\xe1\x39\x18\xbc\x8f\xdc\x08\x45\xbb\x85\x3c\xfc\x5c\x8c\x24\xe4\x1e\x36\xf8\xe3\xab\xd7\xde\x9d\x32\xdf\x6c\x23\x9b\x6f\x3f\xd8\xc7\xe7\x96\xbb\x0a\x99\xc9\xa2\x69\x64\x60\x30\x14\xb9\x11\x86\x6a\x3c\x29\x1b\xa4\x21\x54\xa4\x64\x72\xc7\xce\xeb\xdd\x28\xe0\x76\xa4\x24\x67\x0a\x23\xd1\x3a\xc7\xfc\x55\xe4\xbe\x72\x85\xdf\x32\x3d\x0c\x86\x21\x37\xc2\x51\x0d\xde\xf9\xdb\x1f\x19\x27\x24\x2e\xad\x6b\xc5\x04\x37\x3b\x76\xc2\x17\xa1\xab\x98\xbc\x4d\x2c\x05\x85\xa4\xf0\xe9\x2d\x41\x33\x73\x18\x0c\x47\x6e\x44\xa0\x1a\xe0\x0c\xa7\x4f\x9e\x65\x5d\xd8\xa6\xab\xe2\xd4\xf2\xeb\x60\x7a\xdd\xe2\xb5\xa8\x8b\x85\x62\x2f\x12\x8b\x2d\x58\xe4\x06\x86\x85\x61\x30\x02\xb9\x11\x89\x6a\x98\xd3\x6c\xd3\x58\xb8\xbe\xd2\x3c\x3d\x70\xea\xab\x3e\xb6\xbf\xcf\x81\xd5\x97\x8b\x57\xa3\x3c\x42\x8e\x74\x8c\xef\x0d\x64\xdf\x17\x87\xc1\x48\xe4\xc6\x03\x54\xc3\x70\x8d\xcf\xf8\xce\xd6\x67\x2d\x9d\xe7\x74\x11\x38\xec\xd1\xaf\xf9\xa2\x9e\xde\x22\x17\x5a\xbd\x25\x71\x33\x54\xf0\xca\x3d\xc6\xf3\x30\xf8\x00\xb9\x11\x85\x6a\xc4\x29\x45\x97\xd3\xb0\x93\x44\x94\xbc\xa5\x52\xd9\x2d\xe5\xe0\x6e\xfc\xe9\xd8\xe0\xd8\x36\x9a\x25\xea\x82\xf3\xf9\xbd\x9c\xc8\x55\x18\x8c\x42\x6e\x44\xa3\x1a\xf8\xe7\x83\x5a\xc2\x3f\x1c\xd7\xaa\x9f\xb5\x0d\xe6\x9b\xee\x2b\x4b\xd0\xc1\xe9\x98\xf2\x33\x73\x74\xe8\xe0\x9b\xac\x14\x4a\x65\x87\xc1\x68\xe4\x46\x0c\xda\xa2\x81\x92\xb7\x22\xfe\x13\xf7\xd3\x4d\xec\xb9\xb2\x44\x25\x61\x79\x66\x42\xc0\x67\xec\x5c\xe2\xef\x8f\x45\x16\xc8\x2e\x8a\x3e\x35\x85\xc1\x18\xe4\x46\x2c\xda\xf6\x87\x9c\xe6\xfb\xcc\x3f\x8a\x7d\xca\x03\x55\x8b\xea\x47\x52\xd2\x8b\x69\x37\xed\x39\x81\x72\xdf\x3b\x1b\xc3\xa7\xaa\x52\xbf\x09\xc3\x60\x2c\x72\xe3\x21\xaa\x31\x7b\xea\x67\x2c\xe1\xc1\xfb\xe2\xa8\x9f\xda\x09\xf5\x86\xdd\xbd\x49\x73\xce\xe2\xd9\x8c\xd9\x8a\xef\xb8\x31\xf5\x85\x19\x96\x79\x60\xf0\x21\x72\x23\x0e\x6d\x95\xba\x84\x26\x40\xb1\xb5\xf3\xe9\xe9\x46\x96\xfa\xbb\x3b\x49\x0d\xec\x82\xcd\xc4\x24\xb6\x12\x0b\xf7\x05\xab\xfa\x23\xda\xd2\x39\x61\x30\x0e\xb9\x11\x8f\x6a\x74\x3c\xbb\x80\x25\x9f\xfd\xa2\xa4\xbb\x3b\x03\x77\xdd\xfd\xf6\x7c\x5e\x35\x61\xe7\xf7\x4d\x5f\xa9\x43\x03\x36\xf7\xe6\x83\xcf\x46\x30\x18\x8f\xdc\x48\x40\x1b\x57\xab\x33\x6b\x5d\x9a\xb3\x62\xb5\x21\xf1\x2c\x78\xe4\x7a\x6a\xf2\x81\xc6\xaa\x57\x3f\xf2\x39\xa9\x72\x8d\xcc\x89\xd2\x13\x92\xc1\x60\x02\x72\x23\x11\xd5\x28\xa2\xe7\x5d\x8a\x6b\xbf\x93\xf3\x60\xa8\xf9\x0e\x51\x58\xa6\x88\x9e\xb4\x4e\x78\x33\x65\xe1\xea\xbb\xbe\x4b\xb5\xe3\xe0\x30\x06\x0c\x26\x22\x37\x1e\xa1\x1a\xf3\x75\x7d\x43\xf0\xf9\x0b\x3d\xf9\x72\x2d\xcc\x93\x93\xba\xa2\x6b\xbc\x79\xe4\xfa\x7b\xef\x3d\x8e\x8b\xbb\x6d\x6f\x9f\xf6\x63\x82\xc1\x47\xc8\x8d\x24\x54\x43\xb4\x99\x07\xef\xc5\x3b\xdb\xe2\x2b\x12\xe2\x41\x7c\xe9\xb6\x6f\xae\x0c\x2d\xcb\x45\xee\x8d\x77\x94\xe4\x04\xee\x9b\x14\xdc\x22\x86\xc1\x24\xe4\x46\x32\xaa\x31\x53\x9b\xfd\xfa\xc8\xd3\x3f\xa1\x2f\xf1\xce\xeb\xfd\xc5\xb6\xb6\xd1\xac\xfd\x1d\x35\x67\x22\x0c\x09\x43\x0f\x45\x5b\x26\x42\x10\x06\x93\x91\x1b\x29\xa8\xc6\x3b\xa1\x1b\x2c\x15\x02\xc3\x57\x38\xe5\x77\x12\x9c\x6c\x8d\x16\xa4\x48\xb5\x3e\xea\x0a\x2b\x4e\x85\xbf\x11\xe0\x7a\xd2\xeb\x26\x07\x83\x29\xc8\x8d\x54\xb4\xed\xd7\x37\xbd\x8e\xb7\x0f\xdb\xc7\xe5\x71\x13\xd2\x8d\x54\x2d\x5c\x75\x8d\x9c\x07\xeb\xb3\xd8\xad\x72\xf0\xf0\x23\x76\x5d\x9d\x34\x60\x30\x15\xb9\x91\x86\x6a\x7c\x3f\x23\xdd\x5a\x91\xf5\x59\xfc\x66\xe8\x47\x8e\x9f\xcf\xd2\x68\x5f\xdc\xa9\x95\x0c\x99\x1a\x8e\xbc\x05\x1c\x14\x2a\xb7\x0d\x69\xc2\x60\x1a\x72\x23\x1d\xd5\xa0\x15\x8d\x38\x9c\x15\x75\x95\x6b\x7b\x96\x5a\x58\x2c\x89\xef\x6b\x9b\xaa\xe7\xf4\xf4\xcd\x42\x60\xd0\x07\x5a\xac\xa8\x2b\x91\x42\x30\x98\x8e\xdc\xc8\x40\x35\x2e\x3a\x92\xd4\xcc\x6f\xaf\x1d\xd6\x4f\xc9\x26\xe9\xe2\xc2\x9c\x8e\xc4\x7a\x6f\x8d\xf8\x0d\xa5\x4f\xa7\x97\xc4\xf7\x1b\xdb\x1b\xc1\x60\x06\x72\x23\x13\xed\xae\xb3\x4f\xcd\xa7\x09\xed\xf9\xd9\xd1\xb3\xc2\x47\xdf\x5d\x0d\x4c\x8e\xb9\xa6\x33\x85\x1e\x3c\x72\x36\xbc\x53\x75\xad\xcc\xa1\x1b\x13\x06\x33\x91\x1b\x59\x68\x8b\x9c\xe9\x2f\xdc\x4f\x95\x68\x61\x4b\x90\xbd\x5e\xae\xc3\x68\xe8\xdf\x63\x10\xa5\x73\x2a\x4b\xb1\xc0\xc2\x8c\xac\xad\xf9\x49\xa9\x07\x83\x59\xff\x6d\xc3\x72\xd2\x17\x1e\xfc\xd1\xb0\x64\xa3\x4d\x0c\x1c\xaf\xe8\x3f\x73\x5c\x49\x26\xbf\xd3\xd9\xd2\x1c\xbc\x53\x23\x83\xd9\x1b\x25\x92\xdb\xec\x74\xc0\xc9\x98\xb6\x9b\x4a\x41\x07\x83\xd9\xc8\x4f\xfc\x31\xaa\x71\x45\x4e\x46\xf6\x6e\xb3\xea\xf0\x04\xc5\x93\xcf\x2f\x21\x23\x91\xf8\xd9\x01\x3e\xee\xe4\x9f\xde\x8a\x53\xf9\x6c\xc1\xd9\x62\xb8\x30\xf8\x18\xb9\x91\x83\x6a\x04\x31\x68\x63\x49\x39\x67\xc8\x6c\xab\xd5\xdd\x7b\xe4\xa3\x73\xd4\x1d\x52\x73\x8c\x63\x5d\x97\x01\x87\xb3\xfd\x38\xab\x7d\x15\x82\xc1\x1c\xe4\x46\x2e\xaa\x51\xe2\x54\xad\x01\xea\xe6\xbd\xa9\x4f\xf0\xeb\x3e\x72\x75\x38\x67\xfb\x4d\xae\xa0\x8e\xc4\x4b\xac\xca\x8d\xe7\x50\x4d\xe3\xfc\x45\x18\xcc\x45\x6e\x3c\x41\x5b\x2d\x69\x7e\x86\x15\x14\x79\x89\x8d\x1c\xc3\x9f\x92\xaa\xc7\x7b\xa1\x06\x73\x5b\x8b\xbd\x87\x8f\x91\xf1\x54\x02\x1c\x6c\x4f\x64\x0d\x83\x4f\x90\x1b\x79\xa8\x06\x4c\x5a\x49\x7c\xe9\x1d\x3f\x4f\xd8\x75\xcb\x63\x6a\x5b\x7f\x4f\x4f\xad\x4f\xd5\xd1\xbc\x3c\x35\xfb\x3b\x64\x0c\x0a\xfd\x11\xac\x30\x98\x87\xdc\x78\x8a\x6a\x8c\x56\x3a\xec\xd9\xca\x72\xb9\x15\x19\x6f\x67\x9c\xa1\xae\x63\x5f\xf8\xe2\x32\x37\x4a\x44\xbd\xf1\x58\xf6\xf6\x76\x8f\x26\x8b\x04\x0c\x3e\x45\x6e\xe4\xa3\xbd\x71\x4a\xf9\x3d\x6c\x71\xaf\xc0\xff\x66\xb1\xcc\xa5\xc2\x1c\x3d\x2c\x5f\x3f\xbb\xbb\x71\x9d\xf2\x1c\xde\xdd\xd7\xa9\xa5\x37\x40\x53\x18\xcc\x47\x6e\x14\xa0\xad\xc2\x7d\x7e\x3f\xbd\x31\xbc\x81\xb5\x2d\xfe\xb2\xe1\xa1\x33\xcb\x27\xe2\x0f\x72\xbc\xd4\x03\xd5\x9f\x48\x4e\x67\xd4\x75\x6a\x04\xe3\xc1\x60\x01\x72\xa3\x10\xed\x0d\x47\x52\xb7\x9a\x48\x50\x8a\x49\xc7\x50\xba\x6c\x5a\x48\x2d\xd7\x75\x24\x2b\xa5\x3c\xdd\x27\x2f\x41\xe0\x41\x08\xc3\xd7\xc3\x5b\x30\x58\x88\xdc\x28\x42\xbb\xb0\x64\xfb\x9a\xad\x51\x19\x04\xe6\xd1\x7a\x31\x07\x3c\x64\xed\x9d\xb6\xa4\xd8\xd3\x2e\x22\x7b\xae\xb2\xce\x85\xa9\xf4\x7e\x9d\x01\x06\x8b\x90\x1b\xc5\x68\x77\x26\x48\xd6\x8c\xb8\xeb\xf0\xe9\x2e\xc2\xad\x2d\xe3\x8f\x9d\xaf\x17\x5f\x86\xac\xcf\x54\x16\x16\xdc\xc0\x1f\xff\xd8\xfb\xc5\x00\x17\x06\x8b\x91\x1b\xcf\x50\x0d\xd5\xe3\xd8\x60\xa6\xab\x05\x9b\x04\xd7\x8b\xcd\x1c\x0a\x76\xd3\xdc\x57\xa1\xf1\x78\x23\x25\x81\xeb\x3c\xb7\x40\xb2\x99\x17\xd6\x30\xf8\x0c\xb9\x51\x82\xb6\xb5\x4d\x4e\xd6\x89\x2e\x9a\xfb\x88\xda\xed\xad\xe1\xbb\xd3\x51\x4f\x94\xb3\x89\x27\xc1\xbe\xfd\xdb\xe9\xd3\x8c\xdd\xe2\x89\x63\x44\x30\x58\x82\xdc\x78\x8e\xb6\xd5\x50\xb8\xa1\xe3\xab\xe7\x79\xa9\x1c\xcf\x4a\x9b\x31\x4b\x77\x01\xf9\xfb\xab\x23\x4b\x54\x41\xa5\xfe\x0b\xd3\x67\xb5\x8e\xdd\x15\x61\xf0\x39\x72\xa3\x14\xd5\xc8\xc6\xf0\xb8\xe0\x16\x49\x6c\x11\x5a\xc7\x39\x70\xb7\x6b\x77\xb6\xd3\xc9\xb0\x69\xe3\xba\xda\x77\x8d\xec\x72\xba\xef\xbd\x2a\x52\x30\x58\x8a\xdc\x28\x43\x35\xea\x73\x43\x19\xdb\x05\xa2\x03\xfa\xa1\x45\xc9\x43\x15\xec\x5d\xbe\x86\x42\x5e\xcd\x2f\xaf\x56\xe6\xe5\x3a\xe5\x5f\x52\x1b\xdd\x86\xc1\x32\xe4\x46\x39\xaa\x51\x8c\xcb\xcb\x6b\x20\x88\x6d\x7b\x3e\x3a\xf2\x0d\xdd\x08\x7b\x04\x21\x9b\xbb\x30\x81\x2f\xae\xb7\x2e\x7e\x29\xef\x4d\x63\x6d\x66\x18\x2c\x47\x6e\x54\xa0\x2d\x4c\xd0\xf5\xcd\xc7\xe7\x25\xc4\x16\xab\xff\xf4\x96\x30\xe3\xbc\xec\x9f\x72\x66\x54\x40\xd9\x7c\xc1\x91\xaf\x3f\xec\x6d\x53\xe9\x19\x18\xac\x40\x6e\x54\xa2\xbd\x3e\x68\x0c\xbb\xb7\xee\xab\xd0\x75\x9e\xc5\x19\x01\xb2\x42\xe7\xee\x26\xe7\xec\x7a\xbf\x13\xbf\x61\xbc\x9f\x40\x11\xb1\x44\x23\x04\x83\x95\xc8\x8d\x2a\xb4\x3b\xc2\x46\x8a\x19\xd7\xaf\x1a\x17\x2e\xce\x99\x51\x7c\xd8\xae\x3a\x5b\x6c\xad\x3a\xfd\x4c\xbb\x07\xb3\x39\xbc\xfa\x26\x0e\x27\x17\x1e\x0c\x56\x21\x37\xaa\xd1\xe6\x92\x48\x02\x4b\x7d\x3f\xdd\xea\x41\xbd\xc8\xd1\x74\xf6\x2a\x46\xd5\x69\xde\xd3\xbe\xcd\xb2\xc4\x04\xe4\xa0\x48\xc8\xf7\xe5\x0b\x30\x58\x8d\xdc\xa8\x41\xdb\x6a\x48\x62\x1f\x04\xed\x0a\x30\x91\xe2\x6f\x29\x17\x34\x24\xb3\xb2\x25\x39\x73\x8c\x3e\x90\x5a\x3b\xa4\x1f\x67\x7d\xc7\x4c\xc1\x02\x83\x35\xc8\x8d\x5a\xb4\x95\xf0\x63\xde\x4f\xfa\x1c\xdf\xfa\x62\xbf\x46\xc7\x4f\x76\xb0\xc9\xad\xeb\x5a\x55\x68\xbf\x93\xc3\xe6\xf2\x7b\x96\x27\x3a\xce\x77\x1d\x06\x6b\x91\x1b\x75\x68\x5b\x58\x4b\xb8\x74\x2c\xe5\xf6\xe3\x15\xa4\xc7\xf5\x54\x6b\x3c\xe7\xfb\x89\x99\x20\xe9\x18\xaf\x3c\x0e\x0d\x9c\x07\xea\x16\x34\x52\x30\x58\x87\xdc\xa8\x47\x35\x7e\x4a\x1d\x74\x65\xc9\x3f\x73\xae\x7b\x4f\x11\xa2\x5d\xe9\x58\xd1\xf9\xfd\x95\x0b\xdc\xb4\xef\xa1\xea\xa9\x55\xae\x32\xd6\x47\x06\x83\xf5\xc8\x8d\x17\xa8\x06\x91\x9f\xdf\xab\x9f\x37\x5f\xf2\x55\xf1\x7d\xc3\x28\x25\x1d\x85\x9e\x46\xb5\x86\x46\x14\xe9\xdf\x50\x1b\x9b\x69\x62\x48\x4e\xa6\x82\xc1\x17\xc8\x8d\x06\x54\xc3\x4d\x1d\x67\x63\x80\xa3\xce\xa7\xbd\x6c\xf7\x1e\x81\x4a\xf1\x63\xee\xa4\x37\x8c\x9d\x65\x69\x9e\xbb\x64\xb1\x03\xaf\xd3\x48\x79\x60\xb0\x01\xb9\xf1\x12\xd5\xc0\x5e\x56\xc5\xbf\xc5\xf1\xfc\xf3\x9c\xd3\xcb\x3c\x1f\x63\xad\x10\xfb\xde\x09\x7a\x81\x84\x05\x1e\x89\x45\x26\x4a\x1a\x52\x7a\x21\x18\x7c\x89\xdc\x78\x85\xb6\x83\xc5\x16\xeb\xf4\x93\x7b\x6b\xe7\x47\xad\x97\xf9\xd4\x8b\xd8\xa3\x54\x15\xf9\x5e\x5f\x34\xb7\xc1\x3d\x1a\xdc\x0c\xdb\x7a\x75\x1f\x13\x06\x5f\x21\x37\x1a\xd1\xb6\x14\x5f\x8f\x79\x51\x1b\x99\x19\x72\x75\x87\x15\xf4\xa5\xa1\xd8\x55\x4c\xd6\xa4\xfa\xb2\xc8\xca\x55\x50\x6f\x4c\xbe\x2a\x48\x60\x05\x83\x8d\xc8\x8d\x26\x54\x83\x32\xaa\xb6\x77\x3a\x25\x8c\x84\xad\x5e\x65\x38\x68\xb1\x25\x68\x92\xb3\xb8\x91\xc5\xe4\x7d\xcc\x1e\xb5\xf1\xc5\xfe\xe3\x7b\xb7\x61\xb0\xe9\xbf\x6d\x58\x4e\xfa\xda\xb5\x3f\x1a\x96\x66\xb4\xcf\x4c\x1c\x75\xb7\xbd\xe4\x6e\x54\x73\x8a\x8d\xc4\x78\xb1\xe8\xb2\x4c\x52\x9c\x37\xf9\xa9\x2b\xc9\x21\x21\xb8\x7f\x8d\xf5\x66\x21\x00\x83\xcd\xc8\x4f\xfc\x35\xaa\xa1\xec\xb1\xde\xeb\xac\x50\x20\x47\xc0\xa0\x5c\xa8\xba\x2c\xf3\x42\x5c\x94\x95\x77\x67\xdc\x7a\xd8\xab\xde\x7e\xae\xc2\x82\xec\x06\x0c\xbe\x46\x6e\xb4\xa0\x1a\xcd\x3e\x71\x18\xb8\x8f\xca\x55\x1b\xf3\x95\xd4\xae\x7d\xf2\x0c\x4d\xbf\x37\xc1\x4e\x3d\xf7\xe5\xce\xde\x47\x40\xbf\xc6\x48\x5f\x1e\x06\x5b\x90\x1b\xad\x68\x1d\x67\x8d\xbc\x87\xee\xea\x7d\xf3\xf7\x1d\x7b\x42\x0d\xde\x36\x5d\x17\xa7\xfc\x58\x06\x2a\x2f\x37\xff\x08\xbd\x9e\x76\xb8\xe0\xc5\x0f\x83\xad\xc8\x8d\x36\xb4\x55\x06\x9a\x5a\xc1\x41\x33\x4e\xa3\x8f\xb2\x96\x06\x6c\x5c\x5f\xcd\xfb\xc2\xe9\x1b\x2e\x9a\x78\xca\x28\x67\x61\x70\xa9\x60\x44\x58\xc3\x60\x1b\x72\xe3\x0d\x5a\x73\x67\x0e\x5e\x9d\x2e\xfb\x2e\xb7\x32\xf4\x7a\xc6\x8e\xba\xa5\xa2\x7a\xe2\x9c\x77\xb1\x96\xeb\x98\xca\x60\x52\x0d\x11\xa6\x8d\x2a\x0c\xbe\x41\x6e\xb4\xa3\xbd\x68\xab\x59\xc9\x5f\x8a\xe4\x58\x6e\xaa\x8a\xdf\x3e\x63\x36\x77\x9d\xef\xc2\x0e\x03\xc9\xf1\x29\x6b\x5d\x79\x23\xcb\x87\xc2\x09\x92\x30\xd8\x8e\xdc\xe8\x40\x35\x38\xa2\x0f\xde\x57\x4a\x8a\xad\x7f\xd4\x59\x4f\x7a\xbf\x83\x35\xa6\xe0\xd8\xbe\xc5\x21\xc6\xdf\xd1\xa3\x4e\x70\xc0\x45\x3a\xed\x04\x83\x1d\xc8\x8d\x4e\x54\x43\x4f\x5a\xb4\x66\xda\xe4\xca\x93\xe7\xa4\x8d\xa4\x1e\x72\xbc\xcd\xa2\x89\xaf\x09\x71\x7f\x42\xea\x9c\x96\x0e\xad\xdc\x5d\x4e\x16\x30\xd8\x89\xdc\xe8\x42\x6b\xee\x9e\xe6\x9e\x9f\x59\xc0\xfa\xa1\xd8\xe0\xbd\x6e\xf7\xb4\x47\xd7\xb4\x6c\x3d\x63\x26\xc4\x62\x96\xc7\x82\xdf\xa3\xc5\x6e\x9e\x15\x06\xbb\x90\x1b\xdd\x68\x77\xee\xd6\x8d\xfd\xd6\x8b\x1e\xd8\xcf\x5d\xb8\xe3\xa7\xc8\x52\x51\xde\x8d\xff\x82\xf9\x41\xcf\xc6\x18\xe9\xa9\xf1\x17\x33\x65\x39\x0c\x30\xd8\x8d\xdc\xe8\x41\x35\x1e\x02\x4d\x73\xc3\x9f\xac\x8c\x3c\xca\xec\x30\x04\x0b\xe5\x35\x31\x62\x77\xd4\xea\x5e\xeb\x13\x57\x70\xa8\xf9\x93\x4a\xd2\x82\x30\xd8\x83\xdc\x78\x8b\xd6\xdc\x91\xc6\x33\xf7\xf3\x67\x29\x05\x8c\xc7\x27\xe9\xe1\x75\x39\x10\xe5\xdd\xb3\xa5\x29\x29\x2c\xe9\x4a\xb0\x6f\xc9\x37\xeb\x95\x85\xc1\xb7\xc8\x8d\x5e\xb4\xad\x09\x53\xab\x34\x12\x5e\x0d\xb2\xd9\x85\x2b\xb2\x97\xfd\x09\xed\x87\xae\x15\x8c\x2e\xc8\xd2\x11\x65\x92\xaf\x4a\x7e\xf4\xc4\x90\x86\xc1\x5e\xe4\x46\x1f\x5a\x53\x74\x79\x72\xb0\x3e\x6f\x04\x88\x28\xaa\x01\x68\x8c\x1f\xce\xfb\x73\xd9\xef\xab\xe8\x10\x0a\x3c\xdc\xc2\xef\x66\x33\x66\x26\x84\xc1\x3e\xe4\x46\x3f\xaa\xe1\x00\xbf\x6a\x28\x0f\xba\x93\xbc\xb2\x4f\x80\x77\xe5\x81\x63\xb7\x5f\x22\x20\x22\x2d\x37\xfa\xc0\xf8\x6b\x75\x09\x8b\x64\xf5\x15\x18\xec\x47\x6e\xbc\x43\xbb\x58\xaa\x78\xaa\x18\xb0\xd9\x86\x93\x39\x6d\xf5\x25\x9f\xa5\x84\x79\x68\xb1\x80\x20\xad\xe5\xa5\xa9\xa6\x36\xad\x04\x4b\x38\x25\x26\x0c\xbe\x43\x6e\x0c\xa0\x1a\x8f\xcc\xad\x65\xbb\x8b\xaf\x3c\xa2\x7a\x9a\xd3\x81\xfb\x39\x9b\xcd\xe1\x66\x56\xa8\x93\xf7\x67\xb2\x48\x4d\xd0\x40\xb7\x91\x51\x0f\x06\x07\x90\x1b\x83\xa8\x86\x06\x1c\x10\xde\x1c\x9c\x5d\xf7\x86\x6a\xf5\xb2\x01\xc1\xf7\x19\xa9\xf0\x59\xd2\x88\x69\x77\x0a\xbf\x59\xb3\x49\x1f\xdc\x37\xd2\x30\x38\x88\xdc\x18\x42\x5b\xfc\x48\xd6\x23\xb9\x9f\x72\x68\xc9\xa4\x9a\x75\x73\xfa\xb1\xc4\x8b\x0c\xa3\x9c\xab\xa7\x8d\x4a\xa5\x5d\x75\xf4\xda\x25\xc2\xad\x59\x61\x70\x08\xb9\x31\x8c\x6a\x34\x3c\x4a\x5a\x2b\x4f\xa3\x1d\x4a\x2a\x6d\x89\xe2\x3d\x93\xc8\xa3\x97\x20\x6f\xdf\xd6\xd4\xcb\xcc\xb9\xb7\xb0\x71\x58\x15\x4c\x03\x83\xc3\xc8\x8d\x11\x54\xe3\x5e\xe7\x16\xad\xc2\x37\x79\xcb\x9e\x51\xf3\x97\x8f\xe6\xb6\xac\x9f\xf1\x90\x57\x3e\x5b\xec\xbb\x77\x25\x9e\x5d\xb3\xc3\x4f\xe5\x0c\x0c\x8e\x20\x37\x46\x51\x8d\x5a\xdb\x9f\x34\x04\x62\xae\x6f\x97\x9e\x6e\xd5\xf4\x3c\x0d\xb4\xd2\x8e\x27\x1f\xdd\x3f\x48\xde\xa9\x37\xcd\x14\x6f\x56\x8c\x57\x86\xc1\x51\xe4\xc6\x7b\xb4\x0b\xe4\x3c\x27\xb7\x0b\xe2\x02\x80\xb4\x38\x3e\x4f\x5a\xb2\x39\x26\xc3\x02\x73\xd3\x1c\x9e\xcb\xb7\x7b\x65\xbd\x64\x4f\x5e\xb7\xe9\xc2\xe0\x7b\xe4\xc6\x18\xaa\x21\x32\x23\x43\xef\xda\xbc\x5f\xff\x84\x30\x35\xf4\xe8\xa6\xe7\xd9\xe7\x2a\x3f\xc4\xf4\xd5\xd8\xa3\x36\xaa\xf1\xef\x63\x7a\xe9\xb2\xc2\xe0\x18\x72\xe3\x03\xaa\xd1\x14\x20\x16\xba\x4f\x28\xd5\xf0\x96\xb3\x85\x24\xf5\x9b\xc3\x7e\x97\xc3\xb9\x84\xa2\xc0\x9a\x9b\x78\xed\x25\x13\xdc\xc4\xf3\x97\x60\xf0\x03\x72\xe3\x23\xaa\xf1\x21\x69\x17\x27\x46\xd7\x53\xfb\xb9\x35\xb7\x5e\xbd\x04\x73\x2c\x36\xdf\x3d\xbc\x37\x59\x7a\x12\x5a\xde\x19\x7d\x6a\x11\x39\xe6\x30\xf8\x11\xb9\xf1\x09\xd5\x30\x96\xcb\x74\x59\x6a\x12\x0d\xc8\xa3\xfb\xf9\x3c\x78\x0f\xa6\x5d\x64\x57\xe6\x09\xee\xbe\xef\x11\x18\x32\xc4\xc2\x9e\x1d\xce\x02\x83\x9f\x90\x1b\xe3\xa8\xc6\x39\xb2\x29\x49\xb7\x10\x8a\x74\x01\xcb\xc2\xd3\xfe\x24\x17\xab\x33\x06\x9e\xed\xbc\x78\x4c\x71\x7c\x6e\x96\x4a\xf4\xa0\x43\xfa\x26\x0c\x8e\x23\x37\x3e\xa3\x1a\xa9\x58\x6f\xb9\xb2\xe3\x0a\x01\x8c\xc8\xa1\xf9\xb0\xec\xa1\xb9\x43\xf3\x1b\xcb\x8d\xaa\xaa\x2d\xfe\x64\x0f\xec\x2f\xf2\x8a\x5e\x82\xc1\xcf\xc8\x8d\x09\x54\x03\x97\x01\xe8\xf3\x13\x76\x7f\xab\x20\xbf\xfa\xe5\xbe\x00\x60\x9c\x1a\xee\xfc\x90\x1d\xf3\x56\x4c\xd9\xa2\x55\x6b\x4e\xfe\x59\x1b\x18\x9c\x40\x6e\x4c\xa2\xdd\xad\x75\xba\x41\x77\x6a\x63\xd3\x67\xdb\xee\xe1\xf4\xfd\xc8\xf1\x6e\xdc\x7e\x7c\xa6\xcf\xcf\x8c\x1d\xda\x99\x25\x4b\x34\xdf\x1b\xeb\xc0\xe0\xe4\x7f\xdb\xb0\x9c\xf4\xe5\xcf\x7f\x34\x2c\x5f\xd0\xf6\xbc\x4e\xe7\xc9\x35\x7a\x04\x92\xc7\xd1\xed\x0c\x4e\x49\x77\xff\xa0\x50\xb3\x0c\x7b\xad\x5a\x4d\x61\x79\xc9\x40\x23\xe7\x52\x99\x1e\x0c\x7e\x41\x7e\xe2\x53\xa8\x86\x3f\x93\xe7\xab\xa0\x1c\xfd\xa0\xd5\x27\x59\xe3\x3f\x13\xaa\x98\xc4\xfb\xf4\xe8\x47\x2d\xef\x14\xde\x8d\xb2\xa5\xbd\x7a\x3c\xec\x0a\x83\x53\xc8\x8d\x69\xb4\xd5\x76\xd1\xd7\xf7\x3c\x9d\xf6\xb8\xda\x12\x9a\x17\x9c\x8d\x25\x7e\x58\x3d\x22\xe0\x7b\xc6\x78\xeb\xfa\x44\xec\xc3\xea\x50\xaf\x70\x5b\x18\x9c\x46\x6e\xcc\xa0\x5d\x90\x45\xc8\xf5\x5d\xf3\x2b\x19\xe2\x7c\xcf\x42\xb2\x33\xb5\x1a\x3e\xd0\xca\xdd\x5f\xe1\xa7\x4f\x7e\xba\x3a\xc8\xd2\x70\x50\xef\x06\x0c\xce\x20\x37\x66\x51\x0d\xc6\x56\x7b\xf6\xb8\x2a\xb6\xcc\xb5\x36\xff\xf1\xae\xf0\xfe\x4c\xda\xa1\x1e\x0c\x6e\x4f\x92\x5c\x6d\xb3\xe3\x8f\x45\xfd\x5b\xb2\x30\x38\x8b\xdc\x98\x43\x35\xb8\x42\x22\x3d\x6c\xb6\xac\xe8\x5c\x53\xe0\x42\x82\x6b\x36\xe4\x8f\xdf\x09\x90\xc9\x9d\x1d\x50\x6a\x14\x15\x63\xb3\x1b\x59\xbc\x0a\x83\x73\xc8\x8d\x79\x54\xa3\x55\xbb\xe5\x05\x67\x06\xad\x24\x41\xa3\x70\x9d\x58\x87\xcb\x36\xed\x8a\xb6\x82\x42\x78\xf9\x07\xc0\xf8\x50\xab\x74\xb4\x92\x1a\x06\xe7\x91\x1b\x0b\xa8\x06\xb3\x0d\x73\x7a\x74\xc7\x7b\x39\xfe\x80\x90\xfb\xbc\xa1\x1b\x87\x57\xde\xe7\xb8\x93\x9f\x2d\xb0\x0d\xba\x0e\x39\x79\x8e\x53\x12\xc2\xe0\x02\x72\x63\x11\xd5\xb0\x6d\xfc\x72\xa7\xab\x17\xe2\x11\xdb\xa4\xbc\xa9\x29\xd7\xfc\x8a\x69\x23\x61\xf6\xe0\xdc\xe6\x51\xb7\xab\x83\x00\xa6\x87\x3f\x3f\x0c\x2e\x22\x37\x96\xd0\x26\xd1\x50\xf5\xdc\x3a\x43\x0a\xeb\x32\xcd\xa5\xc1\xc7\x69\x79\x1b\xac\x1b\x1c\x66\xb6\x98\x6f\x78\xaa\x9e\xba\x5f\xc7\x3d\x47\x4c\x05\x83\x4b\xc8\x8d\x65\x54\x63\xf5\x46\x96\xe0\x6a\xd0\x4f\x11\x58\xad\xc9\xde\x3e\xf5\xfc\x20\xdd\x56\xdf\x3d\x49\x4e\xa5\x80\xbc\x6a\xb5\xca\xdd\x36\x4e\x26\x18\x5c\x46\x6e\x7c\x45\x3b\x8f\xad\xa3\x9f\xcb\x3d\x8f\x65\x05\x52\x4a\x33\xfc\xa5\xb5\x7b\xd3\xc2\xd8\xa4\x33\x20\xcb\x53\x91\xb5\x89\x9d\xaa\xf7\xce\x12\xc3\xe0\x57\xe4\xc6\x0a\xda\xd8\x65\xc4\xb9\xf5\x4d\xa9\x56\x55\x93\xac\xcb\xae\xe8\x6e\x61\x95\x50\xf6\x57\xfc\x42\x8b\x19\xfd\xcb\x5d\x41\x51\x9e\xf8\xc7\xe6\x30\xb8\x82\xdc\x58\x45\xdb\x82\xf4\x3d\x35\x66\x79\xdc\xda\xee\x8e\xbf\x3f\xd3\x69\x82\xb5\x33\xf7\x1a\x89\xaf\x7e\xac\xd0\x18\xbd\xa2\xeb\xfa\x2d\xee\x27\xd7\x19\x18\x5c\x45\x6e\xac\xa1\x6d\x9f\x7b\x4d\xf5\x34\x7d\x8c\x2d\xc8\xf4\x56\x69\x4e\x5c\xfa\x9a\xdd\x11\x16\xd6\x9c\xf3\x16\xc3\x66\x53\xf3\xf5\x04\xf7\xc4\x38\x36\x18\x5c\x43\x6e\xac\xa3\x1a\x5b\xd8\xad\x2b\xf0\x08\x50\x61\x7e\xeb\x7a\xa4\x79\x71\xd7\x8d\x95\x5e\xb5\x0f\x4a\x0b\x2b\x1b\x99\x2b\x22\x6b\xf9\x8c\x85\x10\x0c\xae\x23\x37\x36\x50\x8d\xe4\x73\xa4\xe9\x7e\x80\xef\x4e\x50\x6c\xfd\xe8\xcc\x42\x63\x86\x03\xf1\x0b\x85\xf3\xcc\x6c\x79\xdb\xd6\x87\x1b\x6e\x62\xdd\x74\x30\xb8\x81\xdc\xf8\x86\x6a\x14\xc6\xef\x4f\xef\x3f\xa7\x5a\xcd\x0f\x65\x17\x9b\x2d\xcf\x1d\x2a\x48\x69\xcf\xad\xff\x66\x6b\x71\x7d\x80\xb3\x43\x45\xf2\x1d\x17\x0c\x7e\x43\x6e\x6c\xa2\x1a\x7d\x3a\x9b\x42\x25\x94\xaf\xa8\xa7\x37\x9d\xf7\xef\x29\xaa\x10\x3c\x74\x8f\xd2\xa1\x1a\x10\x1d\x19\xf2\x66\xfe\x11\x30\x60\x0c\xc2\xe0\x26\x72\x63\x0b\xd5\x10\x58\x68\x31\x50\xc3\x78\x99\x4e\x93\xdd\xa5\xc6\x13\x33\xfc\x7c\xde\x54\x55\xdd\xb6\xbd\xb9\xfc\xca\x8d\x2e\x22\x65\xe3\x8f\x17\x60\x70\x0b\xb9\xb1\x8d\xf6\x5e\x2b\xe9\xe5\xc1\xf0\x93\x79\x0a\x7b\xcc\xa4\x63\x81\xbf\x8d\xe6\x8e\x8b\xf8\xd2\xed\x88\xf5\x0c\x25\x2e\x49\xab\xac\x27\xeb\x62\x30\xb8\x8d\xdc\xd8\x41\x35\xba\x45\xda\x2e\xf6\xe7\x4e\x74\x2d\xb7\x1c\xf8\x78\x7f\x79\x1c\x3c\x35\xc0\x1e\x24\x5f\xf5\x5a\x90\x7f\x33\x5d\x2c\x47\xf7\x2d\x2b\x0c\xee\x20\x37\x76\xd1\xfe\x1e\xf9\xac\x29\x93\x6a\x8d\x83\x04\xa9\xfb\x5f\xb2\x1f\xcd\xec\x85\xbe\x94\xd7\xad\x10\x62\x6b\x38\x4f\x63\x6e\xed\xf3\xbc\xc4\x04\x06\x77\x91\x1b\xdf\x51\x8d\x3a\xe1\x69\x23\x19\x0c\x2f\xb6\x31\xeb\x61\x02\x42\xf9\xab\xbb\x19\x64\x5c\xa5\x1f\x6f\x88\x58\x6b\xb0\xbb\xde\x9f\x2a\xbe\x2b\x0b\x83\xdf\x91\x1b\x7b\xa8\x46\xef\x30\x78\xb6\xcb\xe3\xa8\x62\x86\x54\xd7\x2d\xb3\x2a\x3f\xaa\x56\xec\xea\xd8\xee\xa4\x1a\x43\x41\xa3\x65\x41\xda\x83\x40\x07\x18\xdc\x43\x6e\xec\xa3\x1a\x6d\x6d\x04\xdb\xa6\xd1\x65\xb8\x5c\x89\xf5\x02\x43\x8a\x6f\xe6\x97\x7a\x99\xde\xac\xb0\x88\x98\x07\x33\xea\x68\x53\x7f\x0b\xa2\x86\xc1\x7d\xe4\xc6\x01\xda\x96\xe2\x73\x42\x58\x45\xca\x23\xd3\x82\xdf\x46\xaf\xec\x74\x90\x5e\x74\x8b\xe1\xac\x74\xba\xfa\x78\xf1\xeb\x27\x4c\x96\x0d\x16\x15\x72\x18\x3c\x40\x6e\x1c\xa2\x1a\x54\x6e\x2e\x39\x13\xad\xd4\x73\x34\x0e\xcd\x67\x2d\xdf\xdc\xa4\x7f\xd5\x84\xb7\x52\xa4\x9e\x37\x53\xb8\xf2\x5d\x7d\x88\xf1\xbe\x14\x0c\x1e\x22\x37\x7e\xa0\x1a\xe1\x42\xcf\x3a\xd4\x2b\x6f\x35\x4e\x3c\xcb\x39\x47\x7f\x23\x1e\xbf\xf8\xc3\x62\x33\xe9\x37\xfc\xf2\x42\x9b\xd2\x39\xd3\x3b\xa5\x82\x30\xf8\x03\xb9\x71\x84\x6a\x5c\x3b\xac\x69\x7f\x5c\x8d\xc9\xb9\x22\x66\xa7\xd4\x50\xab\xae\x92\xa9\x7a\x6e\xb3\x25\x99\x73\xe2\xa0\xeb\xb6\x4d\x68\x92\x31\x0e\x0c\x1e\x21\x37\x7e\xa2\x8d\xdd\xd7\x06\x49\x44\xf9\xe3\xb3\xc1\x12\x0b\x15\x9b\x22\x5d\x21\x11\xf4\x69\xe3\x52\x9b\x55\x9c\xcb\x3e\x22\x34\x2e\x4e\xd1\x0e\x30\xf8\x13\xb9\x71\x8c\x6a\xc8\xf2\x29\xa9\xf6\x3d\xa7\x09\xeb\x92\x56\x0e\x4a\x7a\x46\xa4\x45\xd3\x30\xfd\x4a\x23\x89\x87\xa8\xd6\xac\xe8\xa5\xd1\xbd\x03\x4c\x18\x3c\x46\x6a\xac\x43\xff\x2e\x82\xe6\xff\x35\x2c\x10\x80\x96\xac\x82\xff\xf2\xed\x6d\xfe\x7c\xbb\x85\x88\x2a\x0e\xb2\x35\x65\xbd\x7e\x9f\x32\x4c\xf3\x5b\xa2\x87\xb5\x92\x81\x6d\xbe\xa4\x9b\xf8\x62\x30\x04\x20\xcf\x56\x81\x00\xb4\x74\x95\xaa\x8d\x2f\x9f\xc6\xf8\x5b\xb9\xe7\x2c\x17\xf5\xdb\x4d\xe6\x6d\xfd\x3c\x9b\xcf\x08\xb9\x26\x53\x15\x55\xaf\x95\x05\x8d\x28\xdb\xc2\x10\x80\x3c\x5f\x05\x02\xd0\x12\x56\x9a\x36\x0d\x36\x3a\xf7\x24\x92\x98\xee\xd9\x29\x41\xdf\xf2\xb0\x7a\x2b\xe5\xba\xc4\x06\xe0\xfb\x1f\xbb\x17\xe2\x6e\x7d\xb1\xa7\x85\x21\x00\x79\xc6\x0a\x04\xa0\xa5\xac\x84\x5f\x63\x89\xba\xb5\xd4\x2a\x1b\x77\xa1\x30\x21\xc6\x54\x56\x7e\x6b\x98\x8b\x43\xee\x23\x8e\xbd\x16\xf3\xdc\x0f\x2f\xba\x0b\x92\x30\x04\x20\xcf\x59\x81\x00\xb4\xa4\x95\x26\x2a\x1a\xef\x2e\xf2\x95\xcd\xf7\x13\x12\xc1\x8b\x06\x44\x6f\x68\x49\x2f\xf6\x74\xe6\xea\x51\x61\x02\xb2\x30\x83\x49\x89\x15\x0c\x01\xc8\xb3\x56\x20\x00\x2d\x6d\xe5\x6e\xfd\x96\x77\x4b\xe7\xf8\xd5\x19\x4f\xfa\xc7\x25\x9f\x5f\x2a\xe7\x1f\x87\xbb\x42\x7b\xe4\x5e\x77\xbf\x59\xb8\x10\x61\x03\x82\x30\x04\x20\xcf\x5b\x81\x00\xb4\xc4\x95\xc9\x3c\x7c\xad\x2a\xb3\x22\xc2\x6c\xca\x7e\x32\x52\x88\x93\x39\x2f\x22\xee\xd3\x03\xcd\x99\x0b\x83\x87\x0c\x33\xba\x3f\xb4\x55\x60\x08\x40\x9e\xb9\x02\x01\x68\xa9\x2b\x81\xda\xc2\x20\xef\x55\x33\xf5\xae\x06\xc2\x90\xbe\x2f\x9a\xc1\x55\x4f\xf1\x6a\x45\x67\x7a\xf3\xdf\x54\x92\x44\xcc\x4f\xc9\xe2\xc0\x10\x80\x3c\x77\x05\x02\xd0\x92\x57\x66\x8f\x9e\x4f\xb1\x53\x7f\x15\x37\x38\x3d\x30\x21\xbd\xaa\xa8\x19\x1c\x9d\x89\xb3\x52\x56\x50\x8e\x5f\x31\xb0\x0b\x14\x61\x30\xc1\x10\x80\x3c\x7b\x05\x02\xd0\xd2\x57\xfc\x6c\xcf\x7a\x90\xaa\xdc\xad\x9b\xe3\x91\x48\xf4\x2d\x53\x68\x5f\xfc\x72\x06\xfb\x4b\xe6\x4a\xa5\xff\x87\x7e\x19\x66\xaa\x61\x69\x18\x02\x90\xe7\xaf\x40\x00\x5a\x02\x8b\x59\x27\x98\xda\x53\x04\xdc\xa0\x79\xd3\x8b\x91\xff\xba\x10\xff\x56\x4b\x6d\x5d\xe9\x9d\xd0\x0b\x69\xab\xda\x66\x03\x5f\xb1\x48\x60\x08\x40\x9e\xc1\x02\x01\x68\x29\x2c\x63\x41\x39\xa3\x7c\xde\x39\x76\xbd\x02\xb7\x1b\x72\xa3\x36\x3d\x44\x17\xef\x4a\xfc\x38\x75\xae\x0f\xe7\x71\x94\x84\x8d\xcb\x2c\x1d\x0c\x01\xc8\x73\x58\x20\x00\x2d\x89\x45\x5b\xfc\x94\x2b\xa5\x94\x9d\x81\xcb\x8a\x56\xe5\x37\xb1\x98\x30\xf1\xf7\x81\xb2\xde\xfc\x65\xce\xe4\x9e\x50\xd4\xc0\xe8\xa0\x13\x0c\x01\xc8\xb3\x58\x20\x00\x2d\x8d\x25\xd0\xdd\xee\x41\x44\x50\x1a\x7d\x7b\xe1\x61\xf6\x8d\xd5\x57\x8d\x6c\xba\xd6\x5d\xe7\x6d\xb7\xc9\x4d\x22\x5a\x7c\xaf\x11\xcf\x6a\xc1\x10\x80\x3c\x8f\x05\x02\xd0\x12\x59\x4a\x2e\xc8\xef\x84\x0f\x37\xa5\xf2\xf6\xbf\x01\xea\xbe\x71\x5c\xf2\xf6\x32\x19\xfe\x9e\xcb\xb7\xc8\x11\x21\xe4\x1b\xf0\x34\x84\x00\x86\x00\xe4\x99\x2c\x10\x80\x96\xca\xa2\xe2\xf6\x2a\xeb\xfd\x78\x6d\xe0\xd8\x30\x3d\xdf\x66\xda\x73\xeb\xf4\xb9\x1e\x9f\x57\x59\xf3\x17\x04\xd4\xdd\xbd\x7a\x81\x39\x06\x18\x02\x90\xe7\xb2\x40\x00\x5a\x32\x4b\x3b\x7b\xa1\x71\x6e\x29\xa6\xcf\x23\x43\xbc\x95\xa8\xea\xae\x9f\x56\xb6\x43\x6d\x18\xfa\x72\xab\x44\xdd\xf6\xb6\x95\xd5\x54\x22\x30\x04\x20\xcf\x66\x81\x00\xb4\x74\x96\x9c\x1d\x6b\x5e\x0d\xfb\x0a\x2b\x9c\x33\x1c\x35\xda\x8e\x06\xf1\xdd\x46\x9f\xda\x1c\x52\x7a\x70\x00\x89\x0a\xd7\x8b\xdf\xc7\x59\x60\x08\x40\x9e\xcf\x02\x01\x68\x09\x2d\x26\x1d\xa9\xd7\x46\x70\xc9\xc1\xaa\xb0\xd1\xc4\x1f\x59\xd3\x5b\xb8\xc4\xe6\x3d\xe5\x6b\x84\xde\x72\x5e\x82\xf8\x2f\xf7\x1a\x31\x60\x08\x40\x9e\xd1\x02\x01\x68\x29\x2d\xed\x9d\x52\xd6\x45\x47\xb5\x74\x5b\x22\xc7\x7c\xcd\x77\x1c\xb1\x22\x95\xe6\x24\xfa\x0b\xdc\x5a\x5a\x83\xcd\x35\x3a\x16\x1d\x7e\xcd\x63\xc8\x73\x5a\x20\x00\x2d\xa9\x25\xee\x47\x75\xf5\x59\xee\xa6\x3a\x9b\xb6\x20\x5a\xba\xf8\x48\xb9\xe1\x44\x21\x87\xc7\xfa\xf9\xef\x84\xf1\x9c\xa6\x94\xab\x3e\xfe\x52\x90\x67\xb5\x40\x00\x5a\x5a\x4b\x49\xc7\x53\x42\xfd\xfa\x84\x95\x07\xb7\x7f\x88\x4a\xbb\xf2\x4d\x68\x92\x2b\xea\xcc\xfb\x5f\xd9\x14\xd2\x4e\x05\x7e\xd6\x38\x29\xc3\x10\x80\x3c\xaf\x05\x02\xd0\x12\x5b\x08\x5d\x2f\x04\x44\x2b\x56\x35\x1e\x69\x0c\x6f\x1c\x58\xee\xaf\x3d\x5c\x23\x19\x54\xd3\x15\xb7\x53\x67\xde\x1b\xbf\x39\x3e\x27\x0b\x43\x00\xf2\xcc\x16\x08\x40\x4b\x6d\x91\x08\xd4\x57\x77\xba\x1e\x7b\xf5\x7c\xaf\xe4\x60\xf7\xe3\xd6\x12\xc5\x59\xa5\x33\x9f\x68\xc0\x91\x5b\x80\x31\x55\x36\xa5\xda\xaf\x39\x19\x79\x6e\x0b\x04\xa0\x05\xb7\x58\x0f\xcd\x73\x9e\xbe\x3e\x46\x24\x32\x77\xf7\xf1\x7a\x73\xb3\x78\xfb\x56\x78\x5b\x85\x10\x10\x2e\x1a\xde\x8b\x1b\x39\xa2\x86\x0b\x43\x00\xf2\xe4\x16\x08\x40\x8b\x6e\xd9\x8e\x25\xfa\x7a\x36\x25\xb3\xd3\x8c\x7e\xfa\x53\xef\x1d\xb9\x24\x7f\x97\x08\xdb\x18\x49\x6b\xdc\x62\x76\x0b\x0c\xb1\xaf\xe2\xe7\x61\x08\x40\x9e\xdd\x02\x01\x68\xe1\x2d\x67\x8d\xc9\xee\xbd\xf0\xa7\x34\x93\x7a\xf3\x4a\x24\xca\xed\x35\xaf\x78\x5d\x1f\x63\x38\xd6\x69\xe5\x05\x7f\xac\x95\xb4\x07\xcd\x72\x30\x04\x20\x4f\x6f\x81\x00\xb4\xf8\x96\xec\xfd\x19\xcd\xf3\x2d\x44\x5f\x43\xfc\x31\xd5\x3e\x2c\x7a\x34\x4e\xf7\x52\x9e\x09\xd6\xe3\x26\x98\x3a\xf8\x62\x36\x51\x60\xcd\x0f\x43\x00\xf2\xfc\x16\x08\x40\x0b\x70\xa9\x4b\xbd\x26\xe9\x48\xd8\x49\x48\x1d\xeb\xeb\x66\x91\xee\x10\x7e\xe0\x21\xf8\x52\xc0\x69\xcf\xaa\x83\x4d\xda\xbb\xd0\x86\x42\x11\x86\x00\xe4\x09\x2e\x10\x80\x16\xe1\x62\xec\x99\xe3\x6b\xe1\xc3\xe0\x2c\xbd\xa0\xf0\x32\x51\xa2\xb0\x4a\x2d\x44\x9b\x21\x60\x73\x9e\x61\xeb\x6a\x7b\x69\x5c\xdf\x37\x3d\x18\x02\x90\x67\xb8\x40\x00\x5a\x88\x0b\x9f\xf2\xdb\x73\xaa\x77\x3b\x3e\x2b\xef\xb6\xef\xe1\x17\x9f\xe5\xb3\xf8\x1a\x12\xfc\x48\xef\xe2\x0c\xc3\x90\xf9\xa1\x6f\xff\x65\x1e\x18\x02\x90\xa7\xb8\x40\x00\x5a\x8c\xcb\xe9\x07\x82\xd7\xe2\x5e\x25\xab\x59\x9f\xf3\xab\x93\xc5\x14\x50\x6d\x9a\x04\x71\x23\x1e\x0a\xea\x04\x2a\x87\x0f\xa9\x65\xd2\xfc\x9a\x61\x10\xe7\xb8\xfc\xd5\xf0\x9c\x14\xa4\xf9\x67\xc3\x83\x16\xe4\x52\x6c\x6d\x5c\x2d\xcd\xdb\x6e\xe4\xf8\x70\x31\x7b\xaf\x7c\x58\xc9\x71\xc6\xc0\x7f\x2d\xfb\xcc\x15\x37\x3e\x1d\x8e\x4b\xae\x4f\xcc\x60\x08\x40\x9e\xe4\x02\x01\x68\x51\x2e\x51\x01\xc2\x16\x57\x3f\x12\x52\x38\x24\xef\xbc\x4d\xba\x44\xd8\x59\xb1\x66\xf4\x81\x9b\xad\x77\xf9\xa3\x45\xf5\x87\x26\x0f\xe9\x5f\x0d\x0f\xf2\x2c\x17\x08\x40\x0b\x73\x51\xb8\x0d\x7f\x3f\x17\x68\xaf\x41\xe4\xad\xb9\xed\xcf\x3f\x9b\x77\x8d\xd2\x6c\x52\xb9\x8a\xb6\x2d\xdb\xa7\xcb\x75\x40\xe7\x82\x00\x0c\x01\xc8\xd3\x5c\x20\x00\x2d\xce\xa5\x5e\x89\xc3\xd0\x80\xaa\xe0\xcc\x55\xe1\x09\xd2\x57\xf7\xf9\x34\x1f\xa8\xea\x2f\xd7\x5f\x2b\x68\xf6\x3d\x48\x6f\xb8\x94\xa3\xfb\xab\x15\x41\x9e\xe7\x02\x01\x68\x81\x2e\xdc\xe6\x99\x78\x10\xd7\x20\xd5\xd9\x2b\x87\xe4\x4f\x16\x15\x0d\x7a\xd6\x45\x58\x17\xf0\xde\x84\x45\x9d\xeb\xfe\xee\xff\xc0\x82\x0f\x86\x00\xe4\x89\x2e\x10\x80\x16\xe9\x22\x58\x18\xbd\xf5\x92\x80\x2d\xc1\xf2\xa3\xf5\xb7\xa2\x4f\x0e\x3d\xd1\x65\x04\xf7\x65\x23\xb5\xb3\xc2\x7d\x5b\x06\x1f\x76\x15\xdf\x84\x21\x00\x79\xa6\x0b\x04\xa0\x85\xba\x7c\xb0\xce\xb5\xcd\xd8\xaa\xcd\xe3\xdd\x8f\xed\x8c\x30\xae\x51\x4c\xc7\x97\xdd\x72\xaf\x63\xff\x9e\x71\x5b\xf2\xca\xd1\xd8\xb1\x3a\x0c\x01\xc8\x53\x5d\x20\x00\x2d\xd6\xc5\x93\xf4\x6a\xb9\x77\x93\x7d\x70\x90\x0e\x2d\x57\x77\x81\x82\x3e\x5b\xd8\x5a\x5d\x03\x63\xa7\x63\x72\x49\xe1\x8f\xe7\x55\x71\xba\x30\x04\x20\xcf\x75\x81\x00\xb4\x60\x17\xf9\xdb\x07\x01\xd5\x3b\x18\x14\x39\xf7\x49\x19\xbf\x85\x45\x76\xf4\x51\x39\xe7\x64\x86\x89\xe3\x3f\x11\x20\xed\xcb\x9a\xc6\xbc\x06\x43\x00\xf2\x64\x17\x08\x40\x8b\x76\x61\x01\x16\x32\x2c\x8b\x74\xbd\x5a\xce\x2a\x74\x0e\x92\x34\x89\x11\xaf\x44\x7c\xbf\x76\xbd\xb2\x52\x57\xfe\xd4\xbe\xea\xf4\x90\x11\x0c\x01\xc8\xb3\x5d\x20\x00\x2d\xdc\xc5\xe2\xa8\x3a\x66\x9d\xf1\xa9\xb4\x66\xb1\x7c\x22\xe1\x69\x52\x91\x8a\x57\x45\xa2\xe4\x5e\x35\x80\xc6\x62\x19\xe7\x33\x99\x95\x5f\x23\x19\x79\xba\x0b\x04\xa0\xc5\xbb\xf4\x60\xdf\x7a\x77\x51\xd7\x24\xa3\xec\xc3\xfa\xf7\x1f\x70\x11\x8b\x36\x8b\xcd\x05\x4d\x89\x57\x9d\x2d\xf9\x57\x2c\xc9\x04\x7b\xce\xc2\x10\x80\x3c\xdf\x05\x02\xd0\x02\x5e\xd2\x18\xdc\x78\x59\x97\xc0\x95\x94\xf6\x92\x49\x75\xd6\x07\x36\xeb\xde\xdc\x23\x12\x8f\x4d\x38\xe2\xf9\x58\x31\x7e\x58\x72\xdf\x86\x21\x00\x79\xc2\x0b\x04\xa0\x45\xbc\x64\xe1\x67\x7c\xec\x0b\x73\x8c\xcb\x36\x1c\xe0\xbe\xf3\xe2\xfc\xbb\xf7\x0e\xf4\xbd\xa5\xfa\x89\xfb\x57\x99\x95\xb1\xe5\x3f\xc5\xfe\xba\x80\x43\x9e\xf1\x02\x01\x68\x21\x2f\xe3\xce\xd5\x7b\xb7\xba\x43\x1b\x8d\x47\xe9\xdf\x07\xd6\x05\x85\x91\x66\x81\x71\xa7\x48\x62\xb2\x45\x78\x94\x17\xd5\xa9\x65\x6f\xc0\x10\x80\x3c\xe5\x05\x02\xd0\x62\x5e\x4e\xdf\x92\x62\xf9\xda\xc1\xe8\xed\x43\x2a\xc4\xb5\x8d\x2d\x9e\xac\xd5\x94\xa7\x50\x61\x0a\x2f\xf3\x0a\x77\x3b\x0d\x4f\x3c\x01\x61\x08\x40\x9e\xf3\x02\x01\x68\x41\x2f\x44\x67\xac\x3c\xd9\x83\xbd\x1a\x9e\xc8\x3d\x09\xf8\xfa\xd4\xe6\x41\x2a\x26\x8e\xc8\x39\xb9\xf7\x1a\x01\xa0\xd7\x28\x19\xb7\xa8\x38\x0c\x01\xc8\x93\x5e\x20\x00\x2d\xea\xa5\xc7\x5a\x90\xba\x7a\x29\xe5\x36\xb9\x06\x71\x86\x96\xe4\x22\xf1\x45\x51\x91\x8e\xf3\xf4\x16\x52\xf7\x64\x79\xd5\x26\xdc\x7a\x7f\xb5\x88\xc8\xb3\x5e\x20\x00\x2d\xec\x85\x76\x20\x42\xb9\xcd\x81\x8d\x2c\x8c\x76\xd4\xfd\xd0\x9b\x62\x33\x5f\x77\x41\xfb\x3e\xdf\x94\x65\x68\x0e\x7e\xdf\x0d\x95\xb4\xcb\x30\x04\x20\x4f\x7b\x81\x00\xb4\xb8\x97\xb3\x1e\x8e\x8e\xc4\x31\xd8\xc2\x18\x76\x80\x0d\xe3\x27\xbe\xf5\xed\xf3\xd7\x8b\x0f\xdd\xe2\x72\xa7\xb4\xd8\x47\xa5\x56\xc9\x34\x60\x08\x40\x9e\xf7\x02\x01\x68\x81\x2f\x43\x38\xda\xa5\xbe\x45\xb2\x85\xbd\xbb\x91\xbe\xfc\xd1\xc2\x67\x77\x4e\xb5\xf3\x53\xdd\x3d\xd4\xf9\x2c\xe4\x7e\x01\xd3\xeb\xcb\xaf\x0b\x6b\xe4\x89\x2f\x10\x80\x16\xf9\x82\xe1\xfe\x73\xaf\x43\x63\xa0\x9a\x12\xe8\x97\xa4\x6a\xb4\x78\x40\x93\x1e\x07\xdb\xf0\x2b\xec\x2e\xd6\x89\x74\xd7\x6c\xab\x2a\xc0\x10\x80\x3c\xf3\x05\x02\xd0\x42\x5f\x8e\x9d\xf7\xc3\xe8\x8b\x38\x65\xf7\xaf\x3d\x71\x99\xb7\xac\xc1\x10\x63\x5d\x49\xec\xca\x12\x08\x4b\xbb\x63\x23\x57\x15\x97\x49\x0c\x43\x00\xf2\xd4\x17\x08\x40\x8b\x7d\xa1\xdc\xcc\x2e\x89\x21\x5a\x1d\xda\xbb\x8c\x73\x53\xcd\xb6\xa3\x7f\x68\x97\xd5\x9d\x17\x97\x3a\x76\xf4\x9c\x75\xa7\xeb\x24\x01\x29\x0c\x01\xc8\x73\x5f\x20\x00\x2d\xf8\xc5\xe5\x6b\xf2\xe3\xfd\xba\xa0\x1c\x8d\x61\xe6\xef\x6b\x5f\xa3\x09\x38\xbc\xc6\x9b\x44\xb1\x3f\x87\x5e\xfd\xb6\xd2\x48\xd2\x67\xc2\x01\x43\x00\xf2\xe4\x17\x08\x40\x8b\x7e\x99\xb8\x42\x5f\xfc\x32\xb9\x8f\x66\x26\x6f\x84\x57\x6f\x92\xe8\x19\x57\xe5\xe5\xba\x32\xb7\x57\x78\xda\xda\xd3\x8b\x74\x73\x64\xa7\x61\x08\x40\x9e\xfd\x02\x01\x68\xe1\x2f\x61\x3f\x3f\x33\x9f\x9a\x94\xff\x68\xe0\x31\x4b\xa6\x7b\x09\xcf\x82\x0b\x6c\xd4\x9d\x5f\xdd\x5a\xf6\x8a\x53\x59\xb0\x7a\x4c\xfd\xeb\x7a\x0c\x79\xfa\x0b\x04\xa0\xc5\xbf\x9c\xd5\xb3\x11\x4d\xcb\xb5\x8f\xbc\xa4\xf7\x69\x16\x47\x61\xdb\xd3\x4c\xd7\x27\x53\x06\xcf\x78\xb7\xe4\xbd\x83\xc0\x64\x49\x03\x04\x43\x00\xf2\xfc\x17\x08\x40\x0b\x80\xa9\xaa\xe2\x5d\x17\x09\x99\xa7\xe6\xa5\x89\x92\xcc\x4d\xbd\x2b\x1f\xaf\xbc\x6e\x23\x35\x87\x6b\xe6\xd5\x73\xae\x63\xe5\x76\xce\xaf\xd7\x0b\xf2\x04\x18\x08\x40\x8b\x80\x11\xc8\x67\x4b\xba\x59\x76\x5a\xa0\x76\xe5\x1c\xd6\xd9\x7c\x85\x67\xd3\x53\xa6\xca\x1a\x6a\x6a\x63\xed\x06\xef\xe7\x42\x66\x33\x8d\x61\x08\x40\x9e\x01\x03\x01\x68\x21\x30\x29\x1f\x38\x3c\xd8\xd3\xf2\xc7\xbd\xc5\x17\x09\x35\xc0\x3a\x55\xea\xf8\xcf\xcd\x3f\x02\x71\x1d\xdf\x72\xae\x39\xb6\xca\x18\x4a\xc0\x10\x80\x3c\x05\x06\x02\xd0\x62\x60\x0a\xbc\x41\x56\xa2\x11\xbe\x2c\x2e\x69\x19\x59\xca\x38\x91\xe1\xaa\x3b\x64\x03\xfd\x3d\xbe\xf8\x5f\x57\xc6\xe2\x8e\x3a\x83\x7e\x8d\x31\xc4\x39\x30\x7f\x35\x3c\x5f\xbe\x63\x18\xe8\x92\xc1\x6f\x25\xcb\x9d\xa3\x3f\x7c\x18\xe4\x2d\xb9\x38\x24\x16\x5c\x15\xbf\xf6\x31\x29\xce\x6b\x35\xf7\x20\xfe\xcf\x86\x07\x2d\x08\xa6\xcc\xa6\x8b\x78\xa2\x3b\x4a\xea\xda\x0d\x13\x4b\xce\x1c\xa0\xe5\x92\x69\xf1\x3d\x15\xbc\x99\x7d\x03\x86\xd7\xb3\x31\xd8\x9a\x74\x30\x04\x20\x4f\x82\x81\x00\xb4\x28\x18\x6b\x93\x80\xcf\x37\x01\x6e\x40\x22\xd3\x44\xe6\x46\x48\xf1\xca\x68\x10\xc7\x0d\x76\x05\x66\xb9\x73\x0a\x18\x5f\x4d\x49\x76\x2e\xc0\x10\x80\x3c\x0b\x06\x02\xd0\xc2\x60\x62\xe2\xac\xe6\xed\xb9\xf9\x26\x58\x9c\xd4\x27\x2b\x7b\x86\xef\xc9\xe6\x7f\x75\x68\xe1\x58\x07\xb9\x1f\x14\x0d\x13\x09\xd4\xfe\xea\xc2\x91\xa7\xc1\x40\x00\x5a\x1c\x4c\x48\x7f\x6b\xb6\x23\x15\x7e\xe7\xda\xd3\x5b\xa4\xdd\x95\x95\x92\x04\x4d\x41\x2c\x91\xf4\x2f\x70\x49\xc6\xa1\xed\x72\xe1\x4b\xe7\x61\x08\x40\x9e\x07\x03\x01\x68\x81\x30\x76\xa3\xb1\xb4\x52\xe3\xe2\x67\x5c\xad\x75\x9e\x6f\x5a\xbf\x65\x32\x15\x14\x7f\x6b\x27\xcd\xf4\x61\xe8\x25\xb1\x8e\x87\x10\xef\x2d\x18\x02\x90\x27\xc2\x40\x00\x5a\x24\xcc\x8e\x02\x9e\x09\xb0\xba\xa2\x13\x1b\xb2\xfd\x74\x4e\xc0\xd7\x5f\x52\xc8\xe3\xf6\x7c\x47\x3e\x4e\xbd\xe1\xa0\x49\x8a\xe5\x23\x2e\x18\x02\x90\x67\xc2\x40\x00\x5a\x28\x4c\xee\xda\x24\x57\xc7\xbd\xdd\x09\xcb\x80\xc0\x33\x2b\x56\xa6\x04\x00\xf3\x2d\xe2\x44\xff\x7c\xd9\xd3\x31\x87\x39\xb2\xb3\x1c\xbf\xce\x05\x79\x2a\x0c\x04\xa0\xc5\xc2\x94\x6e\xe2\x9b\x0d\x07\x6b\x1a\x7f\x84\x27\x3f\x27\x62\xb3\x2e\x75\xbb\x5d\x98\x6f\x8f\x76\x32\x9a\xb0\x30\x78\xf2\xe5\x52\xe4\xaf\x8b\x51\xe4\xb9\x30\x10\x80\x16\x0c\x93\x6b\x84\xed\x75\xe7\xf2\xcc\xe4\xa9\xef\xcd\x5a\x47\x7d\x92\xf3\x0b\x40\xd8\xe8\x72\x26\x53\x70\x52\xc3\x2e\xa6\x8c\x9a\x37\x06\x0c\x01\xc8\x93\x61\x20\x00\x2d\x1a\x86\xcc\xf6\x39\x5f\x9c\x6d\x97\xbf\xa8\x46\x17\x0f\x0e\x39\xdf\xb6\x4d\xd0\x5a\xd2\xde\x4b\xeb\x4f\x6c\x71\x24\x7d\x8d\xb0\x38\x13\x0c\x01\xc8\xb3\x61\x20\x00\x2d\x1c\x26\x65\x47\xf1\x54\xff\xec\x5e\xdd\xfa\xd8\xfa\x9e\xb2\xf2\xf9\x65\xb2\xb4\xae\x78\x76\x45\x43\x5c\xe5\xef\xc3\x7a\x66\x09\xfd\x44\x30\x04\x20\x4f\x87\x81\x00\xb4\x78\x98\x06\x1f\xb5\xf3\xb1\x7b\x4f\x68\xe9\x2d\xe8\x09\xe5\xd3\x95\x64\x83\xa9\xbc\xae\x56\xe3\x92\x67\xba\xfa\xce\xa6\xf5\xc5\xc6\x0a\xc3\x10\x80\x3c\x1f\x06\x02\xd0\x02\x62\x1c\xa9\x58\x0a\xa8\x28\xd9\x7b\xb5\x72\x8c\x23\xfc\xc8\xef\x4e\x5c\x37\x8f\x4f\xdd\x89\x1b\x76\xb3\x4c\x4e\x58\x20\x61\x2b\xa1\x81\x21\x00\x79\x42\x0c\x04\xa0\x45\xc4\x48\x9c\xbb\xf2\x42\x56\x1e\x67\x29\x57\x47\x14\xcb\x77\x1d\xa3\x66\xdf\x14\x6f\x2e\xa5\x4b\x1e\x36\xdd\xf6\xac\xbb\xfd\xc4\xfb\x57\x53\x8d\x3c\x23\x06\x02\xd0\x42\x62\xa6\xec\x13\x38\x0f\xf2\xf9\x2b\x6c\x82\xe5\x83\x5e\xea\xd7\x30\xdf\x74\x28\x11\xed\x29\xa8\xa2\x6f\x9f\x8c\xb5\xe6\xd1\xac\xf9\x35\xc6\x90\xa7\xc4\x40\x00\x5a\x4c\xcc\xc3\xf7\x61\x0b\x1f\xaa\x25\xb1\x04\x6d\x28\x56\x6e\xe5\x46\x49\x2a\x3d\xbe\x4d\xf2\x6d\x77\x3f\xdf\x27\x4b\xc1\xa6\x33\xef\xdc\xaf\x79\x0c\x79\x4e\x0c\x04\xa0\x05\xc5\x9c\x62\x73\x55\xbd\x52\x71\xc0\xa3\x23\xc8\x99\x43\x63\x11\xfe\xea\xc3\x2a\xe5\x9e\xd9\xb5\xf3\x99\xf9\x3c\xf8\xf8\x12\x69\x77\x7e\x5d\xf4\x20\x4f\x8a\x81\x00\xb4\xa8\x98\x2b\x3c\xd8\x0a\x7c\x31\x2e\x2a\x8a\x12\x06\x5c\x5a\xec\xd9\xd1\x24\x4c\x33\x5d\xee\x36\xd8\xb2\x2d\x81\xda\x8e\xdc\x58\xc4\xbf\x46\x32\xf2\xac\x18\x08\x40\x0b\x8b\x39\xcf\x72\xbb\xba\xdf\x42\x4d\x3d\x8d\x04\xe6\x7a\x1d\xa3\x45\x90\x30\x08\x09\xc7\xf6\x19\x61\xa4\x72\xf7\x90\x5d\x4e\x5a\xf9\xf5\x16\x8e\x3c\x2d\x06\x02\xd0\xe2\x62\x70\xbe\xd9\x3d\xb1\x4d\xb7\xc1\xbd\xef\xb8\x70\xf1\xce\x35\xcb\xca\xf1\xfa\x8a\xf7\x24\x07\x72\x9f\xc7\x99\xdc\xd4\xc5\x3d\x47\x79\x61\x08\x40\x9e\x17\x03\x01\x68\x81\x31\x57\x5e\x6a\xa7\x17\x64\x1e\xbd\xd9\x32\x4e\xa2\x27\x9c\xab\x63\x9a\xd6\xbc\x6c\x5c\xf6\xc5\x57\x7e\x47\xb8\xe3\x8e\x35\xeb\xf4\xaf\xd9\x12\x79\x62\x0c\x04\xa0\x45\xc6\x6c\x5a\x48\x5e\xd2\xba\x95\xe8\xd1\x81\xf3\x8a\x37\xd1\x4b\x8f\xf2\xcc\x46\x5d\xb4\x8c\xa1\x46\xb9\xec\x4f\x1a\xf6\xca\x26\xa7\x5f\x33\x3f\xf2\xcc\x18\x08\x40\x0b\x8d\x79\x66\x23\xf3\xac\x6e\x99\xc1\x0d\xf3\xfe\xaa\xea\xf4\xec\x99\xdc\x37\x0b\x8c\x64\x42\x0c\x16\xab\x37\xf7\x19\xad\x7c\xd5\x39\x7e\xbd\x8b\x21\x4f\x8d\x81\x00\xb4\xd8\x18\x5d\x02\xc7\xf7\xd4\x74\x12\xd8\x4e\xe1\x3f\x74\xf8\xda\x52\xf2\xcc\x1b\xd4\x2e\x2f\xb7\x1e\xad\x40\x82\xfd\x74\xd1\x65\xca\x67\x60\x08\x40\x9e\x1b\x03\x01\x68\xc1\x31\x9d\x37\x4c\x22\x5e\x9d\xf7\x3b\x25\x7a\xb3\xe5\x98\x18\x57\x1e\xf3\x47\x2b\x6f\xab\x74\x5b\x89\xce\xfa\x95\x96\xd7\x76\x3d\x9b\xd7\x60\x08\x40\x9e\x1c\x03\x01\x68\xd1\x31\x6c\x8e\xcf\x0d\x73\xeb\xbe\x28\x59\x3d\xbc\x5a\xfb\xf9\x63\x57\x54\xd1\x45\x13\x81\x54\x52\x72\x1e\x60\xd7\x98\x81\x8f\x95\x40\x1d\x86\x00\xe4\xd9\x31\x10\x80\x16\x1e\xe3\x45\x17\x5a\x7f\xd9\x28\xd4\xbe\x9a\xe3\xfa\xc6\xcf\xe7\x82\xe6\x38\xff\x1f\x73\x6f\x19\x55\xc5\xde\xc7\x7d\x33\xa4\x94\x28\x21\x8c\x34\x02\xd2\xa8\x88\x34\xd2\x21\x20\x1d\x22\xdd\x21\x21\x2a\x22\xbd\xe9\x12\x10\x94\x90\x94\x2e\xa5\x05\x44\x3a\xa5\x14\xa4\x11\x04\x24\x44\x5a\x05\x69\x9f\xe5\xb9\xae\xcd\xc3\x19\x5c\xf7\xb8\xef\xdb\x17\xd7\x5a\xe7\xe5\xe7\xfc\xf6\xcc\xdf\xef\xfe\xc7\x8f\xd9\xf3\x71\xdc\x6b\xe0\x01\x23\xb8\x46\x96\x7a\x69\x2a\xf2\x78\x2e\x21\x40\x00\x75\x7b\x0c\x08\x40\xf4\x31\x88\x42\x9e\xa9\x4d\x97\x37\xe5\x6a\xad\x94\xb2\x37\xf1\x30\x83\xf5\xea\xfd\x31\xcc\x25\xba\x13\xf7\xde\x5d\xc1\x5b\x3b\x69\x68\x83\x00\x01\xd4\xfd\x31\x20\x00\x11\xc8\xb0\x66\xd7\x7c\x7a\x3d\xfd\x3c\x29\xfd\x79\x22\x1d\x56\xfd\x7e\xf7\xad\xac\xc0\x0f\x6c\x46\xc3\x72\xed\x3d\xf4\x4f\x39\x4f\x08\xa3\x23\x40\x00\x75\x83\x0c\x08\x40\x14\x32\x99\x4c\xf1\x6f\x96\xef\x5e\x0b\x4c\xf2\x0f\x65\xf2\xbc\xb6\x6c\x88\x93\x1d\xe7\x40\x7d\xd9\xfe\xdc\x9b\x8f\xf6\x88\xd0\xee\x95\x5f\xdf\x4a\xd4\x1d\x32\x20\x00\x91\xc8\x64\xd5\xd9\xd4\xb6\x8f\xa8\xb1\x8e\x39\x59\xcc\xee\x2b\x28\xc9\xbd\x5d\x7a\xf5\x4c\x26\xca\x82\x65\x63\x00\x8d\x91\x8d\xfb\x1d\x29\x02\x04\x50\xb7\xc8\x80\x00\x44\x23\xb3\xb7\xc4\x97\x73\xc5\x65\x8d\xff\x39\x63\x81\x36\x9b\x0c\x35\x85\x69\x64\x0e\x99\x4c\x55\x3b\xf3\xa0\x10\x36\x61\xc4\xb9\x08\x5d\x04\x08\xa0\xec\x91\x41\x1e\x78\xa2\xea\xcf\xb6\x7b\x60\x25\x99\x74\x86\x0b\x08\xcb\xe1\x5f\x50\x37\x48\xa3\x58\xbb\x60\xbd\x2d\xf8\xb2\x3d\xb1\x4e\x92\x76\x52\xe3\xe8\x81\x07\x22\x92\xb9\x54\x61\x49\x3d\x2a\x2c\xf3\x58\x1c\x20\x31\x0b\x1a\xae\xe6\x22\x98\xf2\xfc\xa6\x91\xc8\x49\x10\x76\xca\x98\xf2\xfa\xb7\x14\x7d\x04\x08\xa0\x6e\x92\x01\x01\x88\x4a\xa6\x5e\xee\xcb\x68\x25\xc3\x0e\x8e\x3b\xda\xa5\xbc\x41\x67\x9a\x6e\x1d\x66\xf6\xd8\xc2\x9d\x41\x52\xb9\xc9\x7a\xbd\xc8\x70\x9a\x5f\x4b\x38\xea\x2e\x19\x10\x80\xc8\x64\xbc\x1e\xef\x19\xde\x1f\x7c\xf2\x76\xad\xf9\x5d\x73\xa2\x63\xec\x7c\xde\x88\x5e\x9c\x4e\xc1\xc7\x72\xd5\x74\xb9\x32\x1b\xaa\x4a\x4e\x04\x08\xa0\x6e\x93\x01\x01\x88\x4e\x26\x72\x86\x43\x75\xae\xb2\x56\x45\x80\x31\xc6\x07\x6d\xdb\x37\x4c\x57\xc4\xab\xa9\xa5\xe1\x6b\x40\xfb\xc9\x97\xcd\x6f\xdd\xeb\x7e\x4d\x16\xa8\xfb\x64\x40\x00\x22\x94\xf9\xb2\xed\x15\xd9\xb7\x6e\x69\x98\xdb\x52\x46\x52\xf0\x42\x79\x9b\xe2\x73\x2b\x26\x5d\xb4\x1f\x46\xa8\x31\x8f\xb1\x6b\xba\xc5\xaf\xad\x15\xea\x46\x19\x10\x80\x28\x65\x84\xe9\xad\x1a\x6b\x1d\x56\x67\x76\x2a\x4c\x9f\xa2\x1d\xa4\xd7\x30\x47\xf4\x74\x45\x1b\xe0\x94\xa2\xe3\x8a\xf9\x0b\x2c\xed\x9e\x42\x80\x00\xea\x4e\x19\x10\x80\x48\x65\x54\x3c\x12\x18\x18\xca\xdb\x5c\x04\xf5\x76\x4b\x7a\x87\x4c\x70\x23\xc8\x2f\x84\x49\xd2\x0e\xcb\x9d\xa1\x21\xa8\xc3\x6b\xbf\x48\x8e\x00\x01\xd4\xad\x32\x20\x00\xd1\xca\xc8\x06\xe9\xe8\x5d\x2c\x7a\x1a\x0e\xf6\x3f\x6f\x9f\xae\x6d\x70\x98\x9c\x91\xfe\x5e\xc3\x57\xf3\x71\xc4\xbb\xaf\xfa\x69\x4d\xf2\xaf\x43\x35\xea\x5e\x19\x10\x80\x88\x65\xfc\xe5\xbf\xec\x2e\x17\xc8\xaf\x0e\xe6\x44\x60\x48\x44\x66\x64\x5d\x5c\xba\xb6\xf2\xf8\x24\x6f\xd2\x53\xfb\xda\xaa\x7d\xe1\x48\x3a\x04\x08\xa0\x6e\x96\x01\x01\x88\x5a\xc6\xa4\x5e\xb8\xf1\xa2\x51\xf6\x06\xef\x28\x25\xfa\x5b\x2b\x4b\x3a\xe9\xcf\x62\x12\xfd\xfe\x6c\x07\x29\x01\x94\x04\xd8\x9e\xde\xd6\x08\x10\x40\xdd\x2d\x03\x02\x10\xb9\x8c\xaa\xab\x70\x76\x2f\xa1\x5f\xfb\x82\x58\xcc\x78\xfa\xbe\xbe\x9f\x07\x80\x06\xe2\xd8\x3b\x95\x89\xe5\x3e\xd6\xfd\x84\x29\x75\x0e\x01\x02\xa8\xdb\x65\x40\x00\xa2\x97\xd9\x61\x99\xac\xad\x3c\xbf\x5f\x4b\x85\x9e\x5c\x5e\x14\x66\x3d\xf9\xf3\xdd\xe2\x57\xa5\x50\xc5\xb6\xa4\x05\x8f\x92\xe6\xf0\x22\x10\x01\x02\xa8\xfb\x65\x40\x00\x22\x98\x39\x95\xe1\x1f\xa7\xce\x76\xef\xf9\x46\x28\x81\xf8\xfa\xf7\xd0\x69\xfc\x64\xfd\x0c\xff\xcb\xef\x87\xbf\x7d\x62\x8b\x32\x2a\xb7\x21\x43\x80\x00\xea\x86\x19\x10\x80\x28\x66\x2e\x39\x1f\xf4\x63\xf6\x55\x0d\x29\xb5\x11\xea\xba\x71\x13\x45\x52\xd1\x26\x0d\xe7\x34\x08\x05\x76\x99\x07\xac\x5e\x89\x8d\xb0\x42\x80\x00\xea\x8e\x19\x10\x80\x48\x66\x30\xb7\x64\x95\xde\x95\x55\x6a\xf7\xb3\xb3\x24\xa3\x95\x52\x09\x6b\x77\x34\x89\x13\xcf\x15\xc6\x8b\x74\x09\xe1\x27\x87\x5b\x9f\x47\x80\x00\xea\x96\x19\x10\x80\x68\x66\x0c\xd5\x1b\x37\xbc\x78\x75\x9f\xcc\xd1\xde\xbb\xf4\x96\x29\x34\x64\x5e\xe6\xb9\xe8\xb3\xee\xe6\xd7\xaa\xcf\x56\xd3\x4c\x63\x1b\xed\x10\x20\x80\xba\x67\x06\x04\x20\xa2\x99\x78\xc3\xd3\xe4\x6a\xc9\x82\x82\x2f\xaf\x27\xbd\x5c\x3d\x51\x8d\xfe\x29\xd1\x82\xee\x87\x52\x68\x44\xc1\xab\x67\x6b\x99\xda\x20\x0e\x02\x04\x50\x37\xcd\x80\x00\x44\x35\x13\xe4\x63\xdd\x00\x0c\x7e\xb9\xb7\x15\x9f\x7a\xf0\x83\x3a\x86\xc9\xf0\xc9\x12\xdd\x25\xe6\x22\xeb\xda\xbe\xa6\x2a\xde\xc2\x58\x59\x04\x08\xa0\xee\x9a\x01\x01\x88\x6c\x26\xf7\x3a\xd8\x28\x21\xc2\x8d\x31\xa7\xe5\x1b\x07\xdc\xa8\x28\xb2\x30\x44\xd4\x72\x48\x53\xcd\x08\xe8\xa8\x57\x17\x9b\x79\xff\x3a\x56\xa1\x6e\x9b\x01\x01\x88\x6e\xc6\xa3\xe0\xbe\x70\x96\x7e\x24\x35\xc3\x47\x9f\xc4\x28\x0a\xff\x9c\x3b\x05\x21\x6f\x4d\xcd\x77\x6e\x3a\x32\x37\x78\x3f\x7a\x28\xfa\xeb\xfb\x82\xba\x6f\x06\x04\x20\xc2\x99\xb6\x07\xd2\x07\x17\xee\x06\xe1\x4d\x77\xb2\x68\xef\x4b\xa9\x6d\x66\x9e\x54\xbd\x34\x64\xc8\x1b\x65\xa1\x75\x2e\x20\xa4\x3f\x4d\x13\x01\x02\xa8\x1b\x67\x40\x00\xa2\x9c\x69\x5b\x08\x71\x90\x16\x76\xcc\xbe\x7d\xf5\x09\xcf\x66\x39\x46\x4d\xb8\x77\xa5\x6d\x66\xd3\x0a\x29\x01\xab\x3a\xe5\xf3\x24\xb9\x5f\xdb\x77\xd4\x9d\x33\x20\x00\x91\xce\x44\xbc\x5c\x8d\x1a\xb9\xc8\x53\x95\x7a\x35\x77\xff\x7c\x83\x64\x9b\xc7\x30\x53\x1c\x7d\x98\x0b\x7a\xeb\xde\x68\x49\xb1\xa5\xdf\xaf\x63\x15\xea\xd6\x19\x10\x80\x68\x67\x26\x3e\xce\x99\xf3\x4c\x93\xf6\x34\xdf\xe5\x09\x13\x0c\x20\xb3\xb8\x7b\xc7\x9a\x9e\xa5\xa7\x71\x81\x90\x56\x5f\x69\xea\x31\x26\x03\x02\x04\x50\xf7\xce\x80\x00\x44\x3c\x13\x7f\x56\x72\x6e\x92\x64\x4d\xbe\xed\x41\xa8\x22\xb7\x75\x20\xa6\x7f\xbc\xb5\x78\xdc\x97\x26\x04\x5d\x44\x1d\x81\x16\x1f\x0e\x35\x02\x04\x50\x37\xcf\x80\x00\x44\x3d\x83\xe5\xd6\x43\xfb\xd2\xd5\x68\xd2\xeb\xeb\xaa\xdc\x82\x59\xed\x8a\x2d\x93\x8c\x83\xbf\xb9\x69\x73\x97\x91\x7f\x02\x67\xa0\x94\x38\x02\x04\x50\x77\xcf\x80\x00\x44\x3e\xa3\x44\x39\x37\x12\x47\xf1\x48\xff\xb5\xfa\x53\x9e\xb2\x4b\x37\x97\x70\x4d\xd5\x9d\x5d\x36\x63\xf3\x5f\x92\x3d\x4e\x79\xf6\x78\x93\x04\x01\x02\xa8\xdb\x67\x40\x00\xa2\x9f\x09\x4f\x5e\x2f\xa9\x5f\xf9\x51\xf6\x36\x36\x5b\x74\x98\xb6\xd9\xf4\x72\xea\xf0\x25\x0e\x8d\xeb\x14\x53\x19\x3f\xa7\xb1\x36\x77\x59\x10\x20\x80\xba\x7f\x06\x04\x20\x02\x9a\x5b\x64\x39\x22\xb7\x93\x53\xfc\x4c\xb4\x71\x33\xe6\x77\x95\x23\xd9\x89\xcd\xf7\x96\xf5\xdb\x4b\x06\xbc\x5b\x6d\x27\xdd\xf5\x4d\x11\x20\x80\xba\x81\x06\x04\x20\x0a\x1a\x65\x96\x73\x3a\x2f\xf5\xd3\xe7\xec\xb9\x3e\xdd\x70\x5c\x95\x64\xc7\xcf\x57\x7b\xa2\xc1\xae\x7c\x46\xab\xe9\x27\x21\x77\xc9\x05\x09\x04\x08\xa0\xee\xa0\x01\x01\x88\x84\x86\x59\xec\x71\x12\x8b\x11\x26\x36\x62\x39\xc5\xfd\x82\x1f\x4b\x0e\x01\x5b\xf3\x48\x6b\x03\x4b\xa7\xc2\xde\x6e\xf8\x0b\x07\x67\x61\x04\x08\xa0\x6e\xa1\x01\x01\x88\x86\x86\x2b\xdb\x3c\xd8\x2f\x43\x94\xe3\x32\x86\x3b\x9f\xf7\x30\x13\xfe\x88\x52\x89\x64\xed\x8f\xf2\xa8\x58\xbb\xcc\x2e\x92\x19\xd5\x5f\x19\x43\xd9\x43\x83\x3c\xf0\x98\x6c\x8b\x20\xbc\x5e\x78\xcb\x11\xdd\x12\x22\xf7\xac\xd3\xc8\xb5\x0f\x59\x48\xca\x2d\x8d\xcc\xcf\xcc\xf2\x63\xab\xe5\xfb\x50\x78\xf4\xc0\x03\x11\xd1\x50\x9d\x34\xd5\x7d\x42\x17\xda\x4a\x5d\x21\x75\x55\xbb\xd7\x4c\x33\x52\xca\x15\x97\xbc\x07\x5b\xb5\x6a\x12\xe4\x8e\x38\xbd\xff\x6b\xd3\x83\xba\x89\x06\x04\x20\x2a\x1a\x5a\x73\x35\xa9\xda\xd4\x94\x75\x37\xf3\xea\x14\xed\x74\x49\xb5\x18\xaf\xe2\x5d\x00\xb7\x28\x74\x4e\xfa\xee\xdc\xc5\xcb\xbd\xbf\xb6\xbc\xa8\xbb\x68\x40\x00\x22\xa3\x29\xb4\xf3\xd0\xb8\xcc\xfa\x79\x3c\xe3\x93\xcb\xc1\xca\x09\x8d\xab\xf9\x6d\x54\xeb\x57\x86\x1a\x94\x2e\x17\xf6\xf3\xd2\xbc\xb6\x90\x42\x80\x00\xea\x36\x1a\x10\x80\xe8\x68\x78\x4f\x64\x4c\x0f\x88\xcc\x0c\x03\x39\x83\x2e\xc3\x11\x62\x8d\x6f\x63\x23\x09\xb9\x3b\x76\xb0\xa9\x03\xb3\xde\xfa\x77\x36\xfd\x3a\x8a\xa0\xee\xa3\x01\x01\x88\x90\x46\xe3\xf6\x3e\x3d\xd7\x5d\xee\x14\xec\x8d\x1f\x61\x16\xfd\xdf\x24\x6e\xf8\xb1\x01\x40\x98\xc3\xca\x07\x8e\xaa\x93\x1f\xc1\xb7\x1a\x08\x10\x40\xdd\x48\x03\x02\x10\x25\x8d\xc7\xa7\xb1\x58\xb6\xcd\x3e\xc1\x47\xd7\x05\x86\x9c\x5f\x1a\x8e\x6a\x2e\x8b\x8e\x29\xfe\xf4\x88\xcb\x65\x13\xcd\x11\xe0\xf8\xf0\x6b\x71\x45\xdd\x49\x03\x02\x10\x29\x4d\x7d\x34\xd6\xe7\x11\xfe\xdd\x9e\xdc\x37\xd3\x67\xbb\x5a\x8d\xd2\xbf\xde\x2f\x64\x66\x89\xd6\xb8\x16\x77\xb7\x5b\x21\x5d\x86\x58\x0d\x01\x02\xa8\x5b\x69\x40\x00\xa2\xa5\xb1\x93\xa5\xf1\x1f\x8a\x4b\xce\x05\x39\x30\x22\xae\x6d\xf4\x7d\xbd\x8e\xd1\x55\x9b\xb2\xbe\x1d\x61\xa2\x0c\xa2\x95\xfa\x54\xfc\x3a\x24\xa0\xee\xa5\x01\x01\x88\x98\xa6\x7b\xa6\x58\xca\xa9\xc0\x09\x60\xda\xd3\xc7\xa8\x89\x53\xf5\xbf\x6c\x37\x21\x29\xb0\x45\x3b\x88\xd3\xe3\x20\xac\xa0\x71\x41\x1f\x01\x02\xa8\x9b\x69\x40\x00\xa2\xa6\xe1\x58\x8e\x6e\x50\x71\xd7\x79\x27\xdf\xef\xbc\xa5\x75\xee\x62\xc3\x07\x4a\x8d\x1c\x62\xb4\x67\x4f\x2f\xf4\xaa\x57\x0e\x5c\xa6\xd6\x46\x80\x00\xea\x6e\x1a\x10\x80\xc8\x69\xd2\x04\xe5\x9c\xcc\x36\xf3\xcb\x2e\x85\x9d\xca\xb2\x3e\xf8\x26\x7f\x9d\x60\xb0\xd8\xca\xd8\x7b\x17\xeb\x79\x1b\xd1\x9d\x24\x66\x6e\x04\x08\xa0\x6e\xa7\x01\x01\x88\x9e\x86\x9c\xd5\x49\x6f\x74\x55\x18\x3d\xed\x33\x45\xb4\xf0\x90\x92\x23\xfe\x5e\x8d\xff\xfc\x58\xf1\x9d\xce\x27\x6b\x51\xc1\xaf\xd0\x8c\x11\x20\x80\xba\x9f\x06\x04\x20\x82\x9a\x2a\xcd\x2a\x1a\xd3\xa0\x99\x8e\x67\x82\xcd\x97\xcc\x3e\x3f\x92\xd7\x5d\x31\x63\x9a\xa2\x96\x32\xb1\x6d\xf0\x42\x4c\xe3\x19\x5b\x22\x40\x00\x75\x43\x0d\x08\x40\x14\x35\x4c\x12\x04\xc3\xf8\x93\x6f\x33\x71\x14\xcd\x3e\x54\x63\xe3\x7f\x7e\xb8\x51\xa1\xf8\x32\x61\x7f\x8c\x74\x48\xca\x74\xc7\x85\xef\xd7\x3c\x86\xba\xa3\x06\x04\x20\x92\x1a\xc7\xf6\xb0\x4c\xbc\xa1\xf7\xf4\xb9\x3e\x84\xf7\x22\x30\xbe\x85\xa7\x60\xa1\x57\x8d\x96\x31\x90\x05\xcf\xe5\x15\xe4\xf1\x36\x5d\x42\x80\x00\xea\x96\x1a\x10\x80\x68\x6a\x9a\xbf\xd7\x44\x63\x39\xec\xbb\x52\x37\x68\x8f\xae\x76\xcd\x83\xa9\x78\x9a\xf3\x39\x06\x19\xae\x51\xc1\x9f\xf5\x30\x9c\xc0\x5f\x47\x44\xd4\x3d\x35\x20\x00\x11\xd5\xec\x3e\x6a\xf4\x78\xf3\x95\xaf\x4f\xea\x09\x5e\x15\xc3\xe5\xb7\x4a\x18\xeb\x0d\xcc\x46\xe2\x08\x4c\xfc\x0f\x8d\x15\xfe\x1c\xda\x66\x08\x10\x40\xdd\x54\x03\x02\x10\x55\xcd\x95\x10\xca\x26\x62\xe2\xdb\xba\x85\x9d\xc6\x3f\x2f\x07\xbf\x62\xc2\x50\xe8\xa3\xc6\x5b\xb9\xbc\x5b\xe0\x4e\x4a\xf0\xe8\x5b\xfd\x29\x04\x08\xa0\xee\xaa\x01\x01\x88\xac\xa6\xb7\x80\x29\x94\x7f\x43\x58\x83\x30\x99\x39\x9e\xe4\xa6\x73\x4c\x41\xb7\xc1\x86\xc3\x23\x6e\xea\x1b\xa5\x2f\x2c\x3e\x52\xf4\xe0\x22\x40\x00\x75\x5b\x0d\x08\x40\x74\x35\x7b\x5f\x48\x99\x1a\x97\x74\xc8\xb1\x71\x1e\xf6\x14\xba\x13\xf5\x8a\xbe\xa6\x6e\x63\xb1\x55\x88\xbe\x76\xea\x3b\x16\xb3\xf0\x16\x21\x02\x04\x50\xf7\xd5\x80\x00\x44\x58\xd3\x95\xa1\x71\x2a\x67\x36\x20\x0e\xf1\xb0\x45\xaa\x60\xa9\xd5\x55\x32\xd5\xdd\x7b\xcd\xa0\x6f\x87\x39\x65\x2f\xbe\x0a\xe0\xe0\x44\x80\x00\xea\xc6\x1a\x10\x80\x28\x6b\xd4\xf1\xab\xc3\x09\x33\x6b\xeb\x08\xcb\x6e\xf9\xfa\x45\xcf\x22\x62\x98\x44\x29\x00\x6e\x39\xd7\x83\xd7\xa7\x59\x23\x33\x6c\x7e\x1d\x77\x51\x77\xd6\x80\x00\x44\x5a\xa3\xe4\xaf\x7f\x95\x45\x28\xc3\x93\x5e\xf4\xfa\xdd\xab\xdb\xa7\x97\xea\x99\xc6\x49\x9c\x71\x30\x1f\x30\x05\x8e\x52\x55\xbf\xf8\xac\x88\x00\x01\xd4\xad\x35\x20\x00\xd1\xd6\x5c\x53\xbc\x63\x4c\x5d\x24\x5b\x91\x34\x3a\xde\x4a\x38\x21\xf9\xb0\xde\x2d\x85\x73\xf7\xf1\xc9\x80\xa6\x86\x72\x46\x29\x8c\x19\x6c\x04\x08\xa0\xee\xad\x01\x01\x88\xb8\xe6\xd2\x72\x7b\x3c\x07\x95\x86\xf1\xc9\x6f\x85\x83\x4b\x88\x00\xdd\xd5\x29\xbe\xdb\x5e\x6f\x56\xb7\x59\x1e\x6b\x31\xd4\xbc\x40\xa7\x42\x80\x00\xea\xe6\x1a\x10\x80\xa8\x6b\xf6\xd9\x31\x6e\x30\x0d\x16\xf5\x24\xaa\x5c\xfc\x8a\x1d\xaf\x89\x3b\xaf\x95\x54\x12\xd9\x4c\x72\xf1\x2b\x03\x8d\x29\xad\x2d\xad\x39\x02\x04\x50\x77\xd7\x80\x00\x44\x5e\xa3\xba\x55\x83\x6f\xab\x92\x97\x4b\xda\x17\x4d\x30\x77\xe6\x29\x7d\x5d\xf8\x8f\xa5\x6f\xfa\x16\xf4\xa2\x85\xbd\x7e\xad\xa7\xa4\x74\x11\x20\x80\xba\xbd\x06\x04\x20\xfa\x1a\x44\xad\xb1\x52\x73\x95\xd0\xb5\xd9\xc2\xe0\x3e\x40\x93\x23\x9e\xe6\x83\x80\xde\xcf\x74\x2d\x69\x95\x54\x4e\xbc\xf7\xc9\x8c\xb6\x08\x10\x40\xdd\x5f\x03\x02\x10\x81\xcd\xf6\xd6\x3c\xdb\xfb\xe4\x7a\xc1\xe1\xf7\x38\x2b\x7a\xe2\x67\x2a\x5f\xee\xb9\x58\xe4\xd0\xdc\xda\x97\x8c\xa6\x90\xa8\xbc\xc8\xc9\x88\x00\x01\xd4\x0d\x36\x20\x00\x51\xd8\x28\x9b\x24\x2a\x6e\x7f\x34\x0f\x92\x96\x9d\xeb\xc8\xb8\x91\xfe\x86\xf5\x73\xa7\x43\x8e\xfb\xed\xcf\x0e\x29\x36\x78\x27\x78\xad\x05\x11\x20\x80\xba\xc3\x06\x04\x20\x12\x9b\x22\x3e\x46\x0a\xb3\x94\x73\xde\xc3\x02\xa1\x86\xa3\x3d\xb1\xf6\x9d\xf6\xd5\xa5\xcf\xb0\x67\xaa\xc5\x08\xc4\x95\xca\x03\x9b\xee\x20\x40\x00\x75\x8b\x0d\x08\x40\x34\x36\xfe\x97\xf4\x57\x1e\x6d\x53\xeb\xea\x66\x7f\x95\xd6\x91\x06\xab\x6b\x97\x2a\x36\x26\x9d\xd9\x2d\xb6\xdf\x51\x97\x29\xe8\x48\xe9\x20\x40\x00\x65\x8f\x0d\xf2\xc0\x13\xee\xb6\xf2\x51\xeb\x74\x51\xd7\xe9\x54\xcf\xb7\x69\x2f\xfb\xdb\x6a\xec\xed\x48\xf4\xf3\x05\x85\x56\xce\x82\xfc\xe6\x05\x17\x2e\x1f\x3d\xf0\x40\x44\x36\x8e\x22\xcf\x1e\x6c\x30\xbe\xbf\x9c\x64\x55\x25\x7a\x71\xf1\xe1\x8b\xab\x53\x1f\x23\x6e\xfc\x1c\x08\xeb\xc5\x64\x8e\x3c\x33\xf8\xfa\xd7\x69\x0f\x75\x93\x0d\x08\x40\x54\x36\x63\xdf\x33\xc7\xa5\x6d\xb4\x6d\x3d\x9c\xde\x75\x2f\x06\xf6\xc8\xdf\x93\x2a\x0e\x69\xd1\xb5\x03\x73\x48\x98\x9d\x72\x31\xee\x98\x20\x40\x00\x75\x97\x0d\x08\x40\x64\x36\x37\xb8\xd7\x27\x3c\x93\x80\x34\x63\x0e\xb4\xf5\xc8\xe8\x27\x63\x56\x92\xd7\xc7\x3f\x08\x27\x21\xd6\x4c\xd6\xfd\xbe\x94\xd6\x39\x20\x40\x00\x75\x9b\x0d\x08\x40\x74\x36\xcc\xcf\x5c\x15\x7f\xa6\x50\x3f\xf3\xb8\x09\x08\xec\x3a\x8d\x9b\x5d\xa7\xb9\xc8\x78\xd6\xb0\xe6\xcd\xfb\xf7\xab\xa3\xb3\x9c\x20\x2d\x02\x04\x50\xf7\xd9\x80\x00\x44\x68\xa3\x41\x79\x12\x9d\x50\x36\x2d\xad\xe8\xd4\x7e\x2a\x59\xda\xbd\x11\x4c\x4f\x96\xb4\x6d\x87\xbe\x91\xaf\xa3\xd1\x27\xbc\x3e\x62\xff\x3a\x88\xa2\x6e\xb4\x01\x01\x88\xd2\x26\xed\x94\xa9\xd7\xd5\x76\xfd\x12\x40\x22\x1b\xa7\xb2\x4c\x2b\x6b\x73\x72\xe6\x53\x12\xda\xd6\x40\xaf\x9d\xb8\x52\x23\xe5\xa3\x5f\xdb\x11\xd4\x9d\x36\x20\x00\x91\xda\x9c\xbb\xa4\xdd\x56\xa7\xe4\x30\x86\xc7\x5f\x9f\x89\xc3\x54\xe7\x73\x6e\x75\x3b\x01\xcb\x24\x4e\x51\xb9\xc2\xf5\x7e\xc1\x38\xce\xaf\xcd\x28\xea\x56\x1b\x10\x80\x68\x6d\x38\xf1\x36\x38\xe5\x4c\x9d\x5f\xd3\x30\xc5\x96\x7c\x9d\xd2\xb3\x4e\xff\xc6\x1b\x92\xec\x3e\xe5\xf7\xe6\xf5\x57\x5a\x8c\xb4\x2d\x3c\x04\x08\xa0\xee\xb5\x01\x01\x88\xd8\xa6\x88\xa6\x6f\xf6\xa5\xed\x40\x31\xa1\x9c\x44\x5d\x6f\x55\xb7\x0e\x73\x08\xb6\xc5\xa7\x5e\x50\xd2\xf9\x46\x74\x7f\xe4\x53\x41\x31\x04\x08\xa0\x6e\xb6\x01\x01\x88\xda\xa6\x51\xac\x52\xec\xe4\x63\x63\x6d\x17\x74\x33\x32\x2f\xff\xb7\x0c\x54\xec\x9d\xd5\xbe\xb4\x34\x1d\xdf\xa4\x27\xfd\xe6\xeb\xe6\x7f\x1d\x44\x51\x77\xdb\x80\x00\x44\x6e\x13\x65\x62\x4f\x79\x00\xc6\x14\xee\x7a\xd3\x90\xd2\xf2\x88\xaf\x33\x4e\x72\xc4\xb1\x48\xb6\x17\xe1\x52\x87\xd2\x11\xb6\xe9\xf2\x22\x40\x00\x75\xbb\x0d\x08\x40\xf4\x36\x82\x03\xd9\x6d\x21\xe8\xf5\x1e\xf9\x11\x8b\x5a\x27\x04\xe4\xb4\x54\x54\xf9\xf5\x4b\x82\xb9\x6f\x8c\xd6\x9f\x4f\x1c\x3d\x59\x28\x81\x00\x01\xd4\xfd\x36\x20\x00\x11\xdc\xe4\x9e\x66\x6a\xd2\xd6\x96\x26\x08\xe5\x2f\xb6\xbc\xbe\xd3\xde\xc3\x29\xdd\x92\x78\x41\xaf\x3c\xf4\x94\xdd\x17\x9a\x67\x2d\x61\x27\x10\x20\x80\xba\xe1\x06\x04\x20\x8a\x9b\x3b\xcf\xba\x5d\x74\x56\x3e\x7d\xf1\x14\x24\x4a\xbf\x69\xc8\x52\x33\x30\xc6\x6d\xef\x9c\x3f\x1c\xf6\xf9\xab\xa5\x01\xc9\x47\xf6\x5f\x4b\x38\xea\x8e\x1b\x10\x80\x48\x6e\xb6\x63\x3f\xbf\x52\x13\xd6\x6f\xf2\x37\x13\x3a\xc9\x80\x29\x53\xd6\x98\xe7\x13\x59\x55\x1a\x78\x59\xf3\xab\x4b\xdd\x3a\xc7\x7b\x2d\x04\x08\xa0\x6e\xb9\x01\x01\x88\xe6\x66\x62\x36\x98\xcd\x3e\xe5\xf6\x00\x5b\x7c\xd6\xa3\xa4\x2e\x7a\xd9\x61\x22\xe2\xa6\x94\xd2\x7e\x12\x49\xb9\x3d\xea\xc7\xb5\x85\x7c\x08\x10\x40\xdd\x73\x03\x02\x10\xd1\x4d\x54\x65\xd1\xd5\xf5\x26\x2a\xf7\x54\xd1\xe0\x93\x5c\x53\x14\xdb\xd9\xe7\x70\x5f\x12\x82\xbd\x58\x73\x17\x80\x66\x01\xf4\xf1\x5f\x47\x11\xd4\x4d\x37\x20\x00\x51\xdd\xec\xf1\x14\x51\x4c\xb2\x89\x3e\xa9\xb0\x0a\xa1\x7b\x11\x6d\x76\x17\x64\x5b\x64\xea\xc8\x64\x6e\xbd\xc7\xa8\x7d\xe1\xd2\xd5\xd3\xf4\x08\x10\x40\xdd\x75\x03\x02\x10\xd9\xcd\x34\x22\x67\x2b\xdb\xd5\x98\x7f\xbb\x05\xef\x0d\xf7\xa9\xbe\x1e\xfb\xa1\x5b\x61\x85\x6e\xea\x99\x0d\x17\xae\xdd\xbf\x38\xfb\x58\x0f\x01\x02\xa8\xdb\x6e\x40\x00\xa2\xbb\xe1\xcd\xa0\xd4\x8d\xdd\x4c\x3b\x37\x9d\x24\xc9\x17\x17\x89\xc0\x26\xdc\xf9\x82\xfe\xb4\x50\x0c\xaf\x71\xf7\x51\xfe\xc5\x6d\x6c\x63\x04\x08\xa0\xee\xbb\x01\x01\x88\xf0\xe6\xac\xd9\x81\xca\xc2\xfd\xa6\xa5\xd0\x25\xcb\xf7\x22\x5f\xc9\xee\x06\x14\x1b\x3b\x10\x4a\x6a\x2a\x26\xd5\xee\x52\x13\xaf\xc7\xfd\x9a\x2d\x51\x37\xde\x80\x00\x44\x79\xb3\xf7\x7e\x4e\x09\x0f\x4b\xfd\xfc\xb5\xe7\x6a\x57\x1f\x98\x96\x49\x6c\x7a\x5d\x24\xd7\x21\x5b\x0b\x4a\x2a\x0f\xc1\xe3\xf0\xbd\x2e\x8e\x00\x01\xd4\x9d\x37\x20\x00\x91\xde\xa4\x62\xf5\x3a\x5f\x16\x1f\x5a\xef\x56\x3b\x10\x68\x2a\xd7\xa3\xb9\xae\x76\x0d\x2c\x55\x63\x15\x9b\x7a\xb5\x15\x35\xdf\x86\x67\x8d\x00\x01\xd4\xad\x37\x20\x00\xd1\xde\x38\xb9\x85\x78\x5d\x4b\xdb\x52\xdb\x2a\x4a\x8b\x1b\x51\xad\x78\x29\x12\x47\x2a\x6f\xb4\xfb\xb9\x2a\xa3\xda\x88\x83\x0b\x83\xe4\xd7\xa7\xa0\xee\xbd\x01\x01\x88\xf8\xe6\xe9\xf4\xcb\x9f\x4c\xea\x96\x56\xae\xbe\x38\xf3\x1f\x37\x1c\x0e\x76\x6c\x62\x96\xf4\x1a\xe2\xaf\x09\xeb\x8c\x87\x25\x92\xee\xa9\x20\x40\x00\x75\xf3\x0d\x08\x40\xd4\x37\x62\x57\xa2\xea\xb3\x85\xc8\x2a\xbe\x37\x84\x64\x6a\xd9\x01\x99\x3f\xec\x0a\x8b\x67\x8d\x49\x25\xbf\x73\xbc\xe9\x3e\x69\x8a\xfb\x6b\x4e\x46\xdd\x7d\x03\x02\x10\xf9\x0d\xed\xfc\x93\xda\xe6\x54\x47\x5f\xf6\xed\x7d\xef\xf5\xb9\x86\xad\x5b\x63\x45\x3e\xc3\x31\xc1\x1c\xa3\xa6\x14\x84\x99\x07\x25\x32\x08\x10\x40\xdd\x7e\x03\x02\x10\xfd\xcd\xa6\xfd\x48\xec\x39\x43\x9f\x5b\xf7\x22\x8a\x5b\x88\xf0\x83\x98\xfd\x0f\x98\x8d\x1d\x3f\xee\x7f\x32\x98\x63\x8e\xb7\xd2\xc8\xba\x86\x00\x01\xd4\xfd\x37\x20\x00\x11\xe0\x14\x39\x8e\x9c\xee\x7b\x17\xbd\x73\xbb\xb4\xb2\x51\xf4\x9c\x41\xb9\xce\x0f\x77\x5b\xb4\xee\x58\x42\x84\x13\xfa\x97\xbe\xb3\x27\x6f\x22\x40\x00\x75\x03\x0e\x08\x40\x14\x38\x51\x3b\xd7\xbc\x1d\xbe\xee\x86\x8e\x4b\x99\xab\xdf\x3b\x73\xc1\x1c\xdd\xab\x80\x34\x95\x5f\x28\x33\xc7\xa6\xfb\xca\xa5\x74\xba\x4b\x08\x10\x40\xdd\x81\x03\x02\x10\x09\x4e\x22\x59\xf9\xb5\xc6\x8f\x97\x3f\x26\x1b\xb6\x5a\xcf\xbc\x14\x32\x70\xb3\x4b\x15\x59\x5b\x9e\xd2\x91\xb5\xd6\x1d\xa7\x4e\x28\x38\x8f\x00\x01\xd4\x2d\x38\x20\x00\xd1\xe0\x74\xe1\xf5\xb0\x0c\xda\x24\x9f\x37\x75\xf1\xa6\xf2\xf3\xcc\xcf\x2c\x77\xc3\xd6\x0c\xa1\x23\x77\x52\x65\x70\x2d\xec\xd2\xe8\x91\x44\x80\x00\xca\x1e\x1c\xe4\x81\xc7\xd6\x18\x47\xad\xcf\x3c\x56\x2f\xa3\xfe\x67\x72\x76\x86\x0a\x3d\xcf\x50\xd3\x86\xd6\xee\xe4\x47\xa1\x2b\x25\xd7\x5c\xbf\x0d\x99\x1f\x3d\xf0\x40\x44\x38\x27\xcf\x5e\x63\x28\x2d\x4e\xad\xc0\xf3\x14\x78\xcb\xb8\x80\x25\xdc\xd5\x10\x4e\x7d\x82\xb6\xac\x27\x2a\x61\xf0\x24\xb7\x76\x8f\x02\x02\x04\x50\x37\xe1\x80\x00\x44\x85\xf3\x53\xc7\xb5\xa2\x55\xec\xa6\x55\x89\xca\xe5\xd6\xd9\xd8\x49\x8f\x64\x8d\xb3\x5b\x31\x49\x6d\x5c\xe4\x82\x1a\x8c\x1d\x1b\x7c\xbf\x36\xd6\xa8\xbb\x70\x40\x00\x22\xc3\xf1\x30\x0a\x42\xab\x29\x3d\xed\x70\x7b\x4d\xea\x31\xd1\x94\x9c\x96\x03\xe2\xac\x97\xc4\xfd\x33\x24\x61\xa3\xb4\xf9\xb7\x2e\x61\xfe\x3a\xb9\xa2\x6e\xc3\x01\x01\x88\x0e\xa7\xb3\x57\xc1\x39\xb5\xf5\x6a\xa6\x8a\x7d\xb3\x9c\x4b\xb0\x99\xe2\x38\x2f\x63\xdf\xf0\x4e\x67\x7f\xc5\xfb\xae\x11\xc6\x98\x26\x65\x04\x08\xa0\xee\xc3\x01\x01\x88\x10\xe7\x43\xbd\xf3\x4a\x6f\xd4\x20\xe9\x43\xb9\xda\x7e\xf5\x83\x55\x7e\x21\xe7\x97\x84\x72\xae\x74\x20\x17\xcf\x9e\x50\xb6\x28\x09\x0e\x02\x04\x50\x37\xe2\x80\x00\x44\x89\x73\x6a\xb7\xf7\xcd\x6e\xf3\x85\x9c\x71\x55\xa2\x18\x55\x06\x21\x5b\x87\xfb\x0f\x87\xde\xa6\xf3\x88\xa6\xf9\x1b\x9a\xf1\x07\x61\xff\xda\x26\xa2\xee\xc4\x01\x01\x88\x14\x47\xcb\xe9\xb3\xe4\xfd\x65\x5e\x2d\x46\x43\x5e\x13\x61\xf4\xeb\x16\x59\x4f\xa8\xef\x0b\x8d\x98\xe0\x70\x62\xb2\x39\x7c\x0b\xb1\xc1\x42\x80\x00\xea\x56\x1c\x10\x80\x68\x71\x26\x16\x17\xbc\x19\x53\x73\xbd\xf8\xb5\x07\xcf\x08\xfa\x03\x73\x1c\x7a\xf7\xbf\x6c\x62\x6c\x7e\x79\x6d\x7a\x63\x8b\x57\xf2\x40\x16\x01\x02\xa8\x7b\x71\x40\x00\x22\xc6\xb9\x3b\x14\x1e\xab\xd6\xcd\x24\xa3\xd8\xad\x28\xb6\x38\x24\xa1\xf6\x15\xcf\x67\x7d\x8f\xf7\x83\xc3\xc5\x27\x89\x0d\x6a\x01\xcc\x0c\x08\x10\x40\xdd\x8c\x03\x02\x10\x35\xce\x43\x04\x55\x1d\x71\x7b\xda\x8a\xc7\x99\x08\x21\x6a\xaa\xfd\x08\xeb\xb3\x3d\xfd\x02\x4d\x4f\xab\x2d\x8d\xc4\xd2\x06\xaf\x4e\x53\x23\x40\x00\x75\x37\x0e\x08\x40\xe4\x38\x6f\x31\x9e\x7d\xbf\x92\xe3\x86\xf1\x28\x10\x4b\x43\x46\xfd\xd5\xb3\x02\x49\x77\xba\x8e\xa4\xad\x68\x5f\xfe\xa1\x50\x27\x05\x75\x2a\x04\x08\xa0\x6e\xc7\x01\x01\x88\x1e\xe7\xc5\xfd\x56\x51\xb9\xe6\x13\x38\x8e\x8f\xb5\xfd\xb3\xfb\xd2\xf1\x2e\xaa\x90\x9e\x02\x67\x5f\x6d\x0e\x7e\x5a\xcb\xb7\x9f\xff\x40\x80\x00\x01\xd4\xfd\x38\x20\x00\x11\xe4\xdc\x76\x31\xb8\x23\xee\xe2\x10\x74\x21\x8f\x3d\x4c\x88\x70\xd6\x43\x30\x2e\x68\x32\xb5\xba\x94\x14\x88\xbf\x12\x32\x46\x68\x4e\x89\x00\x01\xd4\x0d\x39\x20\x00\x51\xe4\x68\x9b\xbd\x01\xd1\xec\x22\x3c\xfa\x72\xb1\x00\x1f\xfc\x7e\x36\x76\xca\x98\x19\xce\x75\x0c\x31\xd2\xf6\x57\xdb\x1f\x7c\xb7\x55\x11\x20\x80\xba\x23\x07\x04\x20\x92\x1c\x5d\xda\xe1\xd4\xaa\xbb\x65\xca\x98\x79\x39\xb5\x79\x45\xd4\x84\xc4\xca\x77\x4e\x47\x65\xe7\x27\xaa\xcc\xd1\x29\xc6\x14\x09\xfc\x5a\x5c\x51\xb7\xe4\x80\x00\x44\x93\x23\x93\xde\x8f\xaf\x92\xf0\xd6\xbf\x45\x87\xaa\xa3\xd8\x4d\xfd\xf9\xb9\xf3\x79\x44\x92\x5c\xa2\x0e\x96\x85\xd1\x68\x56\x0a\xb2\x2c\x08\x10\x40\xdd\x93\x03\x02\x10\x51\x0e\x07\xa3\x50\x9c\x98\xb8\x60\xfb\x75\x9c\x09\xb7\x85\xc6\x96\x61\xe5\x53\xa9\x84\xcf\x8d\xfb\x76\xe9\xce\x5f\x49\x68\xcd\xc9\xfa\x75\x14\x41\xdd\x94\x03\x02\x10\x55\xce\xe2\x6b\xfd\xfc\xbb\xda\x14\xe1\x77\x13\xa6\x12\xf3\xd7\x6c\xdc\x76\xae\xb8\x5f\xb5\xbc\x14\xb3\xf9\x9c\x32\xee\x26\x01\xc5\xd6\x0d\x04\x08\xa0\xee\xca\x01\x01\x88\x2c\x07\x81\xb1\x35\xc3\xdb\xbf\x82\x71\x91\x7a\xbb\xbb\xba\x02\xff\x80\x22\x2e\xa5\x63\xf9\xdb\xfd\xe0\x35\x0a\xec\xea\x50\xcf\xb0\x5f\xdf\x4a\xd4\x6d\x39\x20\x00\xd1\xe5\xa0\xdb\x8a\x54\x27\x6b\xe3\x67\x0e\x8c\x88\x37\x70\x62\x5b\xb2\x9f\x01\x6c\x0d\xb4\xe3\xb6\x13\xa9\x15\x0b\xc4\xaa\x4e\x6d\x6b\x23\x40\x00\x75\x5f\x0e\x08\x40\x84\x39\x83\x8f\x52\xfb\xaa\x74\x68\xee\x99\xf5\xb5\x17\x3e\xd5\x36\x7c\xad\xa8\xc2\xe1\x71\xba\xc3\x3f\x7f\xf2\xd6\xfb\xd9\x33\x7b\x39\x3a\x08\x10\x40\xdd\x98\x03\x02\x10\x65\xce\xba\x54\xcc\x50\x50\x90\x76\xc0\xe0\xf7\xfb\x7a\x17\xa2\xef\x9f\x19\x1f\x20\x6f\x1f\xf2\xef\x17\x73\xc4\x7f\x72\x9e\x35\xb6\x99\x03\x01\x02\xa8\x3b\x73\x40\x00\x22\xcd\xc9\x78\x67\x92\xc3\x2f\xeb\xfb\xac\xf6\x0b\x1a\xf5\x7e\x30\x4f\xdd\x89\x5b\xe4\xad\x18\x39\x0f\x97\x59\x48\x98\xd1\x3d\x6e\x15\x6a\x22\x40\x00\x75\x6b\x0e\x08\x40\xb4\x39\x1c\x93\x29\xdb\x5b\xaa\xdb\xd6\x8d\x9c\x11\xe3\x6f\x4d\xf4\x95\xc5\x8a\x68\x40\xfd\xc8\x21\xf2\x94\x9c\x15\xad\x3c\x7b\x4b\x66\x04\x08\xa0\xee\xcd\x01\x01\x88\x38\xa7\xdf\xea\xb4\x7a\xbb\xe3\x95\xda\x25\x21\xb6\xe9\xf0\x24\xf9\x57\x02\xd6\x4f\x38\xeb\x77\x9e\xb6\x2e\x04\xd2\x9f\xfa\x20\x99\x6f\x8f\x00\x01\xd4\xcd\x39\x20\x00\x51\xe7\x0c\x66\xdf\x2a\x5e\x78\x81\x73\x0f\xef\xde\xad\x3e\xc1\x98\x69\xad\x19\x9c\x91\x47\xdc\xf7\x07\xbc\xf4\x6e\x17\xb8\x08\x28\x8a\xda\x21\x40\x00\x75\x77\x0e\x08\x40\xe4\x39\xa0\x39\xb8\x25\xa4\xd9\xa8\x54\xbc\x4e\x2c\xe6\xa7\x69\x56\xd1\xed\xea\xa5\x90\xe9\x7c\x25\xcf\x2c\xb9\xe6\xa6\x0e\xbd\x0f\x2b\x02\x04\x50\xb7\xe7\x80\x00\x44\x9f\x63\xa9\x75\x37\x8e\x51\xe3\xfd\xda\xd7\x4d\x47\x9d\xd1\x5d\x53\xbd\x51\x65\x71\xc3\xf8\x20\x17\xb5\xdb\x58\x76\x2e\xa4\x46\x92\xb6\x08\x10\x40\xdd\x9f\x03\x02\x10\x81\x4e\x7f\x3b\xd1\xeb\xf8\x77\x11\xaf\x1f\x5e\x69\xb9\x6a\xcc\xc6\x1b\xcb\xd3\x7a\xc5\x6a\x85\x22\x02\x63\x79\xd6\x7e\x9c\xcb\xc5\x0c\x0d\x01\x02\xa8\x1b\x74\x40\x00\xa2\xd0\xa9\x49\x32\xaa\xc3\xef\xfe\xd1\x3b\x71\x07\x47\xf5\x84\xa9\x64\xe8\x4a\x9b\x52\x53\x59\xc2\xe2\x19\x27\xd2\xc1\xf2\x6b\x91\x5c\xfa\x08\x10\x40\xdd\xa1\x03\x02\x10\x89\x8e\x4c\xfe\xeb\xca\x79\x91\xfd\xef\xb7\x34\xef\x3f\x62\x7b\x33\x5b\x3e\x63\xfb\x50\xbc\xc0\x86\xd5\x79\xc6\xae\xc6\x9d\x24\x8e\xc8\x06\x01\x02\xa8\x5b\x74\x40\x00\xa2\xd1\x29\x4f\xe5\x13\xb7\x32\x7b\xad\x5e\x9b\xdf\xfe\x26\x83\xbb\x0d\xf3\xae\x11\xbd\x82\xa8\xb8\x12\x55\x7f\xdd\x01\x26\x06\xb6\xd4\xaf\x39\x19\x65\x8f\x4e\xd5\xa9\xff\x1c\x78\x26\x4e\xcd\x46\x72\x5c\x9d\xf0\x13\x8f\x58\x94\xf1\xe3\x1c\x91\x9d\x77\xd9\xd8\xe7\x2a\xff\xb8\x8a\xb9\xc3\xce\x15\xe8\xb2\xa6\x84\x88\xbb\x30\xcc\xa6\x73\x1e\xed\x3f\x74\x48\xca\xcf\xf1\xfe\xa5\x6d\xb4\x1f\xed\x4f\x5d\xf4\x69\x69\x93\xac\x3b\x18\xcb\x5e\x2a\xb8\x06\xf5\x05\x7f\x96\x72\x9a\x72\x74\x3a\x82\xfa\x8d\xb2\xa2\x51\xde\x49\x5e\xe3\xc2\x7d\x95\xe0\xe2\xd2\xd7\xe7\x9a\xd4\x57\x30\x27\x6e\x4f\x51\x5c\x75\xed\x3c\xad\xbc\xc5\xf7\x23\x28\xdf\x65\x26\xc3\x93\x6c\x0a\x2f\x3c\x1c\xc4\x37\x16\x94\x46\x53\x68\xb3\x03\xca\x4d\x8a\xc2\xdc\xa3\xae\xe2\x92\x7a\xe2\xa4\x06\x1c\x41\x0b\x1f\xfa\x3e\x0a\x50\xd4\x78\x63\xe3\x2d\xe2\xc5\xe4\x17\x25\x9d\x5c\x83\x0d\x4c\xcb\x0b\xed\x78\x8e\x0a\x49\xf2\xdc\x12\xe9\x38\x82\xce\xbc\xd9\x16\xc8\xaa\xab\xea\x62\x56\x03\x07\x69\xd0\x15\xb5\xac\x45\xa9\xc6\x0e\xd0\xeb\x18\x9f\x6a\xbb\x4c\x31\x0e\x96\xd7\x1e\x41\x35\xbc\xe8\x48\x26\xc2\x2b\x3f\xf5\x16\x4a\x19\x4a\x47\x04\x62\xbe\x00\x57\xc9\x9b\x1d\x58\x39\xb8\x19\xd9\x6d\x87\x97\x99\x57\x8f\xa0\xea\xf9\xec\x31\x8c\xe4\x5f\xe4\x64\x6b\x25\x25\x73\x82\x71\x19\x4c\x42\xf4\x5e\x98\xa8\x58\xde\x98\x99\xc7\xc9\x38\xf5\x86\x03\xfb\x08\x7a\x42\xb1\x82\x70\xa1\x41\x68\x21\x6e\x7e\xe6\x06\xfa\x39\xbc\x0c\xac\xba\xb0\x2b\x97\x6a\xdb\x4b\x29\x67\x49\x32\xe4\xdf\x91\xe7\x1e\x41\x53\x2d\x80\x12\xf5\x57\x57\x5c\x5f\xd5\xfa\xea\x15\x57\x3b\x31\x9e\xc3\x62\x69\x1e\xce\xb0\x2f\x24\xec\xe2\xd9\x28\x72\x73\x7a\x7d\x04\xf5\xd6\x0b\xd8\xc8\x2c\xc1\xc8\x8b\x19\xac\x8f\xc6\x7e\x43\xbf\x60\xcc\x4a\xcb\x8d\xcd\x57\x1c\xc0\x34\x34\x10\x61\xf8\x32\x6b\xe7\x08\xba\xc8\xd1\xf8\x83\x8c\xfc\xe7\xd5\x06\x66\x95\xee\xb1\x82\xba\xd7\x8f\xd6\x26\x37\xb7\x53\x27\x3a\x9c\x2b\xc8\x3a\x30\x1a\x78\x56\x8e\xa0\x37\xfa\xd0\x2a\x89\x9a\x30\x2f\x7a\x16\xdd\x08\x73\x5a\xa5\xf4\xaa\xe7\x37\xbf\xf3\xdc\x4e\x29\x2b\x2e\xbc\xa1\x51\x0e\xbf\xe0\xe8\xb5\xd2\x7e\x0a\xdb\x6d\xf7\x7a\xa7\xfd\xda\x15\x28\x1c\xf9\x90\x03\x78\x52\x18\xa2\xb9\xbc\x21\xb7\xdb\xb1\xc9\x01\x94\x5f\x94\xbd\x38\x82\x0a\xda\x7a\x73\x67\x2e\x6c\xe1\x30\x79\x53\x5f\xea\xa4\x27\xb9\x89\x50\x34\x8c\x7d\x9e\xe9\xe5\xe4\xe3\x3b\x55\xe4\x64\x42\xf8\xe1\x08\x9a\x16\xc6\x44\xda\xba\x2e\x16\x88\xa5\x56\x39\xff\xac\x49\x52\xc0\x81\x4d\x96\x81\xf6\x32\x6d\xc2\x3e\x45\xa5\xf4\xd8\x4a\x15\xcd\x11\xf4\xc3\x87\xd5\x2e\x40\x90\xbf\xb5\x84\xc1\xd4\x2f\xad\xd1\xbf\x79\xc9\x79\x39\xe3\x49\x6a\x6f\xe4\x62\x38\x8e\x52\x78\xa6\x0d\xd9\x11\x74\x0e\x6f\x5d\xbb\xd3\xef\x69\xd3\x4c\xca\xf4\x01\x13\x95\x4f\x11\xcf\xf2\x9e\xce\x8d\x5b\x4c\x71\xb3\xa6\x3c\x12\x73\x1a\x03\x21\x47\x50\xd9\x6c\xcc\xf2\x87\x8b\xd5\x5e\xcc\x7d\x18\x9b\x83\xe9\xeb\x35\x9f\x26\x29\x1d\x95\xa5\x9b\x03\xdf\x5f\xe8\x34\xe6\x21\x39\x6b\x7f\x04\xb5\x7c\x9d\xc0\x2d\xfc\xf1\xbe\x82\x78\x2a\xeb\xa4\xeb\xe5\x59\x97\xd3\x96\x53\xb8\x33\x89\x1f\x6a\x70\x5c\xd4\xa5\xdf\xdf\xee\x1e\x3b\x82\x6a\x69\xd1\x58\xe1\xf2\xf2\xff\x48\x7b\xb7\x32\xa1\x38\xfa\xd9\xb7\x97\x67\xc0\x4f\xbb\x2f\xa8\x1b\x74\x46\xa3\x79\xc5\x7d\x72\xf1\x08\x4a\xc0\x97\x84\x53\x71\x06\x53\x30\x82\xff\x4a\x28\x8e\x7b\xd0\xe3\xed\x07\x96\x3f\x95\x10\x4a\xd8\x12\xcc\xd7\x25\x42\xca\xe6\xd3\x8f\xa0\x6f\x0b\x9b\x9f\xf0\x77\x74\xcb\x51\x77\xac\x74\x8b\x7c\xa6\x4e\xe1\xd4\xea\xdd\x79\xc5\x49\xbb\x4d\x3c\x56\x22\xe0\x53\x7b\x9e\xf5\x68\x5c\x3c\x4e\x62\x23\x44\xaa\xf5\xa4\x2a\x99\x53\x73\x2b\xf8\xc6\x62\xc7\x22\xf6\x4a\xad\x73\xf9\xeb\x98\xe6\xa5\x6c\xcc\x0c\x5b\x8f\xa0\xa2\x79\xfd\xd3\x2b\xf5\x0b\x3b\x71\xe3\xe1\x8f\x2c\x19\x38\x69\x1b\x65\xed\x92\x78\xd1\x94\x1a\x7e\xee\x0e\x7c\x2c\xed\x7d\xe4\x73\x04\x95\x90\xc7\x1d\x4e\x39\x6d\x7e\x43\x23\xf0\x26\xcf\xfc\x25\xb9\xc5\x9d\xfb\x04\x64\x9d\xe5\x0e\xd2\x3b\xb1\x2c\x9b\x29\xd8\x14\x12\x47\x50\x16\x39\xa9\x07\xf8\xbd\x49\x85\x79\xb5\x68\xa3\xe6\xaf\x22\xe6\x19\x6f\xf2\x26\x0a\xe1\x07\x5c\x73\x5d\xc6\xca\xa8\x53\x09\xeb\x3a\x82\xea\x15\xe7\x71\x06\x60\x89\x5f\xf6\x24\x19\xad\x4f\xdf\x5d\x9f\x8e\xa3\x18\xab\xf4\x92\x7d\x21\x52\x7a\xfd\xc3\xd7\xb3\xe9\xe5\x69\x47\x2f\xa0\x47\xe7\xf1\x1e\xd5\xcf\x8e\x88\x96\xd8\x18\x41\xd5\x37\x93\x31\xbd\x77\x2b\x87\xbf\x2d\x38\x9f\xbe\xe2\xc4\x74\xcb\xb6\xf5\x68\xb4\xdf\x3e\x28\x22\x99\x8b\x0a\x7e\xbf\xd8\x48\xfc\xe8\xce\x62\x6f\xcf\x67\xcc\xdb\x35\x37\xb8\xb2\x1c\xf2\xbb\xb4\x36\x34\xb0\x15\x38\x8f\xa0\x03\x86\xb4\xa3\x8d\x67\xcd\xca\xbf\xcd\x54\x06\x19\xe1\x6d\x10\x6c\x0f\xf5\x5c\xd2\x79\xfa\xb4\xdc\x29\x81\x14\xab\x73\x7f\xe2\xe8\xf4\x06\x7c\x52\xa0\x31\x99\x0e\xae\x6c\xef\xf8\x72\xd6\x19\xe8\x27\xe4\xf8\x7c\x61\x2b\xaa\x2e\xef\x2d\x40\x52\xdb\x63\xcb\x50\x7e\xf4\x1b\x1b\x98\xd4\xea\xc6\x73\x20\x2d\x13\xae\xf2\x3c\xa5\xd7\x92\x94\x1f\x6f\x54\xb5\x92\x3d\xe7\xd3\x03\xcc\x49\xa6\xd5\xed\x4e\x9d\xee\x23\xe8\x97\x9b\x2d\xf4\x3e\x2f\x65\x89\x68\xf1\x71\xd3\xe7\xeb\xf5\xce\xf0\x7e\xd0\xf7\x8b\xca\x76\xbf\x54\x6b\x38\x29\x7f\x55\xd7\x8c\xfa\xe8\x3f\x6c\xbc\x45\xea\x86\x51\xbe\xfc\x80\x4e\x5f\xb2\x79\x59\xc8\xf3\xee\xf1\xa2\x3b\xb3\xce\x7b\xba\x97\x33\x59\x88\xdf\x8d\x10\x70\x1c\x41\xc9\x70\xe8\x13\x8d\x6c\xe9\xf6\x17\x93\xca\xf4\x37\x04\xa4\x86\x2f\x4e\xdf\x88\x19\x08\x2a\x8b\xa3\x2a\x0f\x17\x8f\x96\x20\x6c\x3e\x82\x1e\x9c\xa6\xbd\xa6\x41\xf0\x8a\xc2\xd0\x2a\x6b\x8b\xf3\xa4\xd7\xcb\xd7\x5f\x5b\xec\x83\xa8\x7b\x3e\xc9\x1b\x2e\xdc\x39\x49\xae\xb3\x7b\x74\x82\x0f\xcc\xbb\x71\xb1\xe0\xfc\xa0\x16\x6e\xcd\xb7\x5e\x86\xe5\xe2\xea\x35\xb6\xac\x40\x11\x89\xe1\xc5\x1f\xfd\xfc\xe7\x4c\x42\xa5\x8f\xa0\x2b\x96\xea\x64\xb9\x5d\xd5\xc6\x22\x6f\x24\x07\x35\x36\xbf\x57\xea\xb3\x73\x67\x27\x66\x6e\x55\xe2\x64\xe6\xfe\x98\x6a\x3b\xff\xf4\xff\x0e\x3d\x29\xf6\xb1\xd6\x82\x24\xb6\xd3\x4a\x52\x5c\xf1\x3e\xf0\xf5\xea\x96\x90\x87\x07\xb1\x92\xc6\x16\xb9\xaa\x44\xc7\xc9\x8e\x86\xb9\x23\xa8\xc0\x08\x51\x12\x43\xe8\xdc\x97\xfb\xdb\x01\xd9\x31\xaa\x07\x9a\x24\x55\xb7\xd5\x7c\x1c\x2f\xf0\x97\x6e\x99\x33\x49\xd6\xc9\x64\x1c\x5d\x36\x9a\x46\xc9\xf6\x02\xbb\xe5\xcf\xa1\x5b\xa9\xab\x14\xa9\xcc\xba\x92\xcf\x12\xa6\x0c\x66\x6a\xe4\x1f\x68\xdf\xcf\xba\x14\x87\x71\x04\xc5\x28\x31\x0b\xd1\x6d\x13\xf0\x9a\x27\xe6\xe7\x3b\x1b\xef\x20\x33\x9e\x37\x92\x54\x28\x14\xfa\x5d\xe3\x6b\x92\x6e\xfe\x7b\x1f\xf6\x23\x68\xac\x7a\xc2\x4a\xfe\x46\xfb\x8c\x8c\xaf\x28\xd1\x13\x1d\xe1\xc6\x2b\xbd\x5f\xf4\xce\x56\x52\x25\x07\x14\x5b\xd9\x8c\xcf\x98\xe0\x1e\x41\xa9\xcf\x9c\x4d\x68\x31\x94\x0a\x11\xb9\x4e\x6c\x78\xaf\x4c\xfd\x1e\xed\x65\x21\xeb\xdd\x04\xef\x42\x8c\x2b\x5d\x61\x07\xbc\x9b\x05\x47\xd0\x38\xd3\x09\x52\x59\x82\x0f\x36\x2f\xf7\x9f\x04\x0a\x74\x7e\xdf\xe1\x95\x2a\x4d\x57\x2b\x61\xab\xa4\xdf\x78\xc2\xe2\xbb\xa9\x9e\x78\x04\x4d\x1e\xba\xd7\x5e\x38\xf5\x3c\x3e\x97\xcd\x59\x18\xa7\xfc\x16\x43\xa5\xa9\xe6\xdc\xe7\x45\x10\xcf\xb4\xe0\xc5\xea\x5b\xb1\x8c\xa3\x5f\x6e\x71\x4b\x12\x8b\xde\xb2\x60\x02\x83\x88\xa9\x1e\xcf\xe2\x81\x5c\x9f\x95\x07\x4f\x42\xaa\x64\x30\xb6\xce\x85\x60\xe0\x7e\xa6\x52\xf6\x47\xff\xb3\xcd\xc0\xd1\xd9\x95\x0a\x27\x39\x6c\x22\xba\xf2\x59\xbd\x89\xde\x47\x32\xc3\x58\x99\xa9\x29\x34\xae\x1b\x21\x8e\x6b\xce\xe7\xf1\x19\x69\x0e\x36\xbc\x8f\xa0\x25\x25\x36\xd7\x53\x8b\x43\x65\x24\x98\x88\x67\xc5\x1f\xa9\xd0\x25\x28\x72\x73\x98\x04\x18\x4a\xcb\xdf\x70\xb0\x3f\x75\x9a\x69\x5f\x4c\x8c\x80\xc0\x47\x4c\xec\xc8\xff\x61\x40\xb6\x1f\xc5\x17\x7f\xc1\xf1\x4d\xeb\x4a\x6b\x97\xfd\xf7\xf9\x5d\x7a\xbc\x9c\x6c\xeb\x16\x0d\xb5\xa0\x9e\xbc\x97\x9f\xed\x8e\xfe\xeb\xbe\x4b\xf0\x8a\x4b\x13\x5d\x18\x98\x18\xbb\x56\x93\xe8\x38\x20\xfb\xd4\x74\xb3\x36\x6b\xa8\xa7\x99\xb6\xa4\xe5\x6b\xf9\xdb\x25\x09\x14\xaa\x6e\x60\xfd\xd9\xad\xf9\x61\xa0\x61\xfb\x8a\x5f\xf5\x0e\x08\x15\xd7\x10\x13\xfb\xd7\x85\xb3\x3b\x7f\x6b\xcc\x74\xfc\x58\xaa\x27\x4f\x5a\xe8\xca\x97\xe7\x92\x71\xc1\x55\x23\xe5\xdd\x03\x1d\xe3\x4f\x51\x5d\x51\x36\xe9\xc2\x28\x5c\xb8\x8f\x34\x9a\x18\x1a\x1a\x9a\x0c\x1a\xfa\xaf\x3d\x9f\x8f\x98\xd8\x7f\xfe\x0b\x95\xf4\x56\x00\x20\x9f\x5a\xfa\xe6\x05\x7a\x2b\x81\x86\xa5\x75\x2b\x03\x65\x43\x71\x0f\x35\xe6\xcb\x93\xb5\xcc\x4c\xfd\xf8\xc5\x36\xf8\x76\x5e\x5d\x0a\x37\xfe\xc2\xa7\x4a\xa1\xf1\x89\x41\x3f\x36\x7a\xc2\x31\x2e\xa0\xf9\xcc\x80\x2e\x5e\xcc\x9e\x59\xe3\xb6\xf1\x7a\xdf\xea\xed\xb0\xe8\x56\x1d\x49\xc3\x47\x3c\x7b\xa6\x4e\x8f\xff\xc6\xc7\x7a\xab\x1d\xfb\x58\xff\xe0\x80\x8c\xe6\xa6\x27\x6f\x35\x0d\x62\x58\xef\xe1\xa8\xe8\xfb\x3c\x62\x96\x2b\x8f\x2a\x72\x97\x97\xc4\xb9\x47\x2a\x94\x9b\xf9\x57\xee\xd6\xe0\xd8\xc7\x8a\x8c\x59\x9e\x39\xdb\xe2\x21\xd1\x64\xbf\xb6\x4b\x2f\xac\x60\xb8\x29\xee\x89\x13\x1f\x89\x13\x43\xfb\x6a\x05\x78\x26\x25\x54\xf0\x57\xee\xf6\xc1\xb1\x8f\x55\x2f\xbf\x3b\x36\xb2\xea\x5e\x62\x15\x64\xf4\xca\x2d\x3e\x83\xd6\x44\xac\x27\xea\x4e\xcd\x68\xaf\xc4\xed\xaf\x68\x73\xf7\xb7\xae\xff\xbf\x7f\xec\xcd\x3f\x8b\xae\x1f\x26\x16\xe0\x2b\x81\x8e\x86\x38\xf2\x89\x9d\x9f\x9e\x10\x52\xb4\x7c\x74\xf2\xa6\x1a\x12\xf3\xf4\x7c\x57\xb2\x5e\x74\x52\x92\xfb\xf5\x29\x9b\x93\x65\xc5\xeb\x73\x27\xb1\xef\x78\x6b\xff\x19\xe7\x2b\xe1\xfd\xaf\xba\x82\xd5\xe7\x59\x89\x82\xd5\xcd\x15\xd8\xc8\xb9\x49\xb8\x70\x13\x6d\xd4\x5b\xa7\x86\x25\x29\xc6\x30\xea\x31\x7e\x64\x8f\xea\x06\x21\xeb\xc2\x71\xbe\x12\x68\x98\x47\xeb\xfa\x9f\xb7\x2b\x10\x15\x6a\xe4\x97\xe1\xca\x3c\xb3\xb7\x41\x05\x70\x6d\xcc\xbf\xbb\x20\x30\xad\xfb\xe5\x79\x39\xeb\xad\xdc\x1c\x0e\x64\x5d\x38\x0e\x7a\xbd\xcf\xca\xf9\x57\xf3\x2e\x4e\x2e\x18\xa9\x60\xf0\x55\xb1\xb5\xbf\x7d\x4b\x52\xfc\x49\x5e\x49\xf9\x83\x78\xad\x31\x5a\xdb\x55\xf4\x03\x64\x5d\x38\xce\x57\xe2\xd4\xbf\xea\xca\x37\x23\xbc\xeb\xb0\x98\x08\x9e\xc9\x35\x54\xea\xca\xf8\x61\x54\x08\x5a\xb7\xbb\xad\xfd\xa8\x42\x50\xe8\x8b\xca\xe5\xa2\x4f\x7a\x2b\xfc\x19\xe7\x2b\x81\x46\xe7\x8d\xf0\x17\xd7\x10\x93\x47\xc3\xd4\x12\x20\x47\xfb\xf5\xef\x0f\x4d\xc3\xcd\x3f\x9b\x4c\x7e\x97\x83\x2e\xfa\xe2\xd0\x85\x3d\xfd\xf6\x88\xac\xa5\x20\xca\xbb\xdf\xfc\x67\x11\x56\x5f\xfb\x15\x79\x5d\x99\x3d\x79\x3e\xb9\x7c\x76\xd8\x47\xde\x3f\x1c\x07\x1d\x57\x55\x01\xc7\xfc\x45\x2a\x69\x8b\x83\x81\x95\xf8\x1f\x63\x23\x36\x71\x5e\x42\xf7\x1f\x5e\x7e\x24\x2a\x50\xed\x5b\xb5\xfb\xae\xbc\x1d\x59\x17\x8e\x83\xe6\x40\xde\x83\xe7\x52\x34\x69\x1f\xc1\xd0\xb7\xfc\x53\x4f\x52\xb7\xb1\xb2\xb6\xa7\x9d\xd2\xbf\x70\x6a\x9a\xea\x82\x01\xf9\x38\x0d\x87\xd7\x0b\xc7\x41\xaf\xd7\x59\x2f\x70\xef\x12\xf1\xe7\x37\xa1\x6e\xe3\x67\x67\xd3\xe7\x10\x8f\xb3\x1c\x81\x3a\x33\x37\xdc\x9d\x80\x6a\x4a\xe3\x72\xfe\x0d\x64\x5d\x38\x0e\x9a\x03\xf6\x8e\x60\xf3\x34\xb5\xb7\x63\x52\xe7\xd3\xcf\xda\xa7\x34\x7c\x47\x97\xa9\x64\x2b\xfb\x76\x39\x37\xba\x3a\xd1\x23\x58\x6d\x49\xd3\x5b\xe9\xcf\xb8\xff\xe6\xe0\x9f\x25\x04\x3e\x09\x70\xf3\xfb\xef\x92\x90\xf4\x58\xf9\xd2\x68\x6d\x9d\x53\x5d\xbc\xfb\x53\x45\x89\xfa\xde\x8d\xe9\xde\x8c\xc4\x9f\x3b\x4e\x05\x29\x08\x22\x9a\x53\x06\x85\xc8\x11\x80\xe3\xa0\x23\x5b\x40\xee\x1c\x7b\xf5\x44\x98\x3f\xe6\x81\x59\x3a\x55\xc5\xb5\x3a\x2e\x55\xa3\xfd\x78\xe1\xaf\xc4\x6d\x12\x7a\xdf\x15\x1f\x1b\x0d\x20\xeb\xc2\x71\xd0\x24\x34\x19\x91\x56\xc7\x37\x51\x10\xf5\xfe\xcc\x95\x0c\x7a\xa0\x32\x7b\xb2\xe3\x1e\x6e\x21\x7d\x71\xa4\x6d\x97\x42\x9b\xdf\x7a\x00\x31\xb2\x2e\x1c\x07\xbd\xde\xce\x90\xe7\xaa\xd7\xfa\x45\xbf\xad\xda\x69\xaa\x1b\x29\x57\x8c\x0c\x1a\x25\xef\xaf\x27\x8f\x27\x6e\x4b\x6f\x9e\x36\xe7\x77\x64\x3c\x9c\x19\x61\x38\x68\x12\xbe\xaf\xdd\xbf\x11\x4c\xb4\xca\xcb\xe1\x27\x90\xa2\x78\xa2\xd1\x5d\xb0\x28\x40\xbd\x7d\xe1\x32\xee\x4b\x81\xcb\x59\xcf\x1d\xc9\xde\x7a\x5f\xff\x33\xee\xbf\x49\xf8\xcf\xb2\x0e\x1f\x05\xb8\x35\xf7\x77\x51\xd0\xba\x71\x1e\xd1\xf0\x66\x49\x67\x82\xef\x62\xc2\xa6\x22\xe6\xf7\xc4\x87\x9f\xdf\x46\xce\xc5\x4c\xab\x66\x18\x3e\x7a\x5f\x26\xd2\x82\x1c\x02\x38\x0e\x3a\xb4\x4e\x4a\xed\xbd\xd4\x65\xde\x4f\xb1\xc1\xb3\xd2\xd1\x31\xcc\x49\x6e\xd2\xbb\xd9\x11\x64\x0f\x2f\x77\x91\xdb\x9b\x4b\x2f\xe4\x66\x22\xeb\xc2\x71\xd0\x28\xe8\xe4\x9b\x93\x1e\x7c\x64\xa3\xf6\x70\x5b\xbc\x26\x3f\x4c\xd2\xb2\xf9\xd5\xca\x8a\x90\x4d\x25\x27\xb0\x2b\xcd\x45\xfa\x54\x40\x3d\xb2\x2e\x1c\x77\x6c\x31\x0b\x9c\xdf\xfd\x34\x51\xd6\x1c\x6b\x15\x1d\xef\xea\xec\x43\xe6\x64\x57\x72\xd5\xff\xe2\x90\x46\xcb\xee\xf2\x67\xcc\xad\xdc\xe1\xc3\xc5\x0c\x86\x83\x46\x61\x22\xeb\x2d\x5b\x1f\xd6\xb3\x3c\x9e\x83\x16\x03\x22\xea\xd6\x66\xb1\xdc\x30\xa7\x29\xc6\xdd\x22\xf3\x97\x71\x08\x04\xcd\x70\x2f\x32\x0a\x70\x1c\x32\x0a\xff\x6c\xb5\xe0\xa3\x00\xb7\x0f\xfa\x5d\x14\xb2\x3b\xc9\x3d\x45\xdd\xe6\x15\x1e\xd4\x3e\xb2\x33\x41\xcf\x15\xfc\x54\x1d\x95\x20\x59\xb3\x70\xd2\x3c\x8f\x31\x4f\xf4\x9d\xcb\x4d\xe4\x10\xc0\x71\xd0\xa1\x1d\x2c\x53\x5c\xd8\x17\xa6\x11\x2c\x7d\xde\x29\x99\xf3\x81\xd0\x9f\x86\xe2\x3d\x17\xab\x34\x13\x93\x26\x33\xbb\xc5\xf3\x6b\x4d\x05\xc8\xba\x70\x1c\x34\x0a\x25\xca\xfd\xa3\xe0\xfb\x35\x1d\xf9\x76\xf3\xe8\xbd\x17\x1e\x16\x96\x65\xa2\x84\xa1\xbd\x27\xfa\x6a\xce\xf6\xfc\x7c\x45\x9c\xb6\x8d\xac\x0b\xc7\x41\xaf\x37\xe4\xb6\x45\x17\x5f\xa2\x42\x17\x61\x2a\xf5\xa7\x7a\x30\xe0\xbe\x80\xf5\x7b\x11\x8e\xfc\x0e\xb2\x39\x75\xa2\x61\x5c\x0a\x9d\x04\x64\x5d\x38\x0e\x1a\x05\xe0\x4c\x50\x70\xd8\x65\x6b\x89\x33\x3d\xb5\x5d\xb4\x25\x5e\x93\xc6\x14\xfa\xfe\x8f\x75\xee\x2b\x32\xb5\x3e\xaf\x6d\x32\x98\x88\x45\x46\x01\x8e\x3b\x9c\x15\x0c\xfe\x28\x0a\x70\x7b\xd3\xdf\x45\xe1\x92\x2e\x1e\x5a\x43\x8f\xb3\xcc\x9b\x19\xd5\x66\xfe\xcc\xab\x67\xb0\x4d\x1b\x23\x74\xbf\xd7\xf6\xf0\xf1\xd5\xac\x24\x2d\x5d\xdf\x42\x0e\x01\x1c\x07\x1d\x5a\x57\x89\x0f\xf3\x07\xa0\xf3\xf2\x0b\x2c\xe1\x73\x34\xf8\x46\x68\xe1\xc1\xf6\xf4\x21\x3a\xda\x7e\x1e\x0f\xc7\xa9\x1a\x3a\xe5\xf1\x91\x75\xe1\x38\x68\x14\xb2\xc2\xc9\x2f\xbf\x2b\x4c\x1c\x8a\x57\x59\x1c\xbd\xfe\xec\xea\x1d\x05\x82\x0e\x7f\x37\xa3\x0f\x5f\xee\xad\x9e\x0e\x31\xe2\x4a\x08\x40\xd6\x85\xe3\xa0\xd7\x7b\xeb\xe7\x02\x71\x00\xb5\xaa\x2c\xa5\xa4\xb2\x31\xda\x6c\xee\xd5\x6f\x3a\x8f\x1e\x05\x5f\x75\xe3\x3b\xc5\xc2\x87\x36\x1d\x9f\x34\x87\xac\x0b\xc7\x41\xa3\xa0\xbf\x9a\x4d\x2d\x67\xbc\x9a\xbb\x9e\x7f\xe2\x69\x2b\x1d\x9e\x28\xc1\x58\x1c\x0b\x5b\x34\x7a\x83\x73\x7b\x6a\x05\x6e\x67\xd3\x28\x32\x0a\x70\xdc\xe1\xac\xf0\xe0\xff\x1c\x05\xfd\x3f\x3b\xe3\xfb\x61\x61\x02\xbe\x52\xe8\x68\x68\xff\xba\x58\x02\x59\xfc\xd8\x46\x03\x3e\xb9\xfb\xd4\xf5\x09\x33\xf9\xe7\x2a\xd3\xb0\xed\xb4\xd2\x6c\x0b\x3f\x5a\x3d\x5a\xf8\x24\x77\x4f\xc4\xc9\xfb\xc6\x9f\x71\xbe\x52\x68\xde\xff\xae\xfc\x43\xf2\xeb\xcd\xe2\xdc\x17\x32\x2d\x92\x59\xe7\x84\x6e\xb3\x7a\x62\x85\x5d\x23\xbe\xe2\x84\x93\xe6\x4e\x4e\xf5\xe9\x69\x3c\xa3\x1b\xb2\x32\x1c\xe7\x2b\x85\x86\xfe\xef\xca\xaa\x22\x4f\x17\x3f\xd8\xcc\x28\xba\x3d\x0a\xc5\xe5\xcb\x92\x1a\x20\x3d\x89\x73\x1b\xcb\x35\xef\xc4\x70\xb0\xcf\xe3\x65\xac\xab\x51\xc8\xca\x70\x9c\xaf\x14\x1a\xda\xbf\xa3\x16\x40\xbf\x68\x42\x61\xf7\xfd\x61\xec\xda\xe3\x0f\xed\xc1\xd4\xfb\x79\x22\xce\xcc\x75\x76\xec\xfe\x7c\xdb\x18\x5f\x4a\x3c\x93\xc2\xbc\x2f\xfc\x19\xe7\x2b\x85\x46\x87\x86\xe6\x8d\x10\xef\x47\x36\x76\xe0\xfe\x74\x73\xb4\xb1\xb3\xc9\x4a\x94\x8a\xb9\x86\xd9\xac\x74\x47\xf0\x44\xc4\x81\x02\xe7\xfb\xb3\xda\x76\x83\x1f\xce\xd0\x94\x3c\x64\xd7\xd4\xe1\xd3\x75\x3b\x82\x9e\x16\x11\x65\x7f\x33\x60\x57\x77\xc1\xa4\x3a\xec\xc1\xbc\x3f\x5a\x2c\xdd\xf5\x86\xed\x8e\x31\x6f\xcd\xd7\xc6\x79\x1e\xdd\xac\xab\xff\x2b\x8d\x9d\x4d\xac\x3f\xbb\xb5\xff\xbf\xb1\x23\xa1\x42\x0a\x39\x87\x3b\x1b\x30\x8d\x5b\x5f\xa3\x53\x7a\x42\xd1\xeb\xc1\xc6\xe1\x7a\x7b\xa8\x27\x42\x73\xd7\x39\xfe\x39\x3f\xc1\x77\xba\xf3\xe1\xbd\x35\x7f\xa3\xb3\x53\x7f\xac\xb3\x93\xdc\xb0\x12\xb7\x57\x24\xe6\x31\x33\xf0\x58\xed\x89\xa0\x46\x8e\x5f\x94\x87\xe2\x39\x97\xbd\xa7\xfb\x2f\x67\xb8\x4c\x0a\xb8\x45\xff\x46\xd3\x41\xec\x78\x67\x67\xe9\xc5\x93\xe6\x20\x52\x8d\x22\xfe\x2b\x21\x17\xc3\xe8\x28\xee\xcf\x9e\xbd\x90\xfa\x51\xd8\x38\xff\x9e\xf0\x7e\x63\x58\xbe\xf3\xfa\xdf\xf8\xd8\xfa\xe3\x9d\x9d\x2b\xbe\x03\x23\x7e\x21\xfc\xa7\xac\xcf\x24\xe1\x58\x2d\x31\x30\x16\xfc\xf0\xff\x9c\x2f\xe4\x9e\xde\x8d\x18\x48\x5a\x4e\xf5\xcd\xfb\x2b\x77\x7b\xbc\xb3\x13\xb5\xd3\x7a\xd5\x4e\xf7\xd3\x41\xd2\x05\x96\x11\xa3\xfb\xb9\xaf\xd2\xb5\x48\x06\x47\xcb\x59\xa6\x30\xd3\x2d\x35\x1b\x9b\x4a\x15\xff\xca\xdd\x1e\xef\xec\x6c\x0f\x75\x6b\x29\x71\xb1\x3e\x74\x17\x54\xb8\xf8\x79\x9f\xb4\x76\xcd\xfc\x6d\x3a\x81\xd3\x23\xd9\x72\xb9\xcf\x97\xdf\x74\x5e\x62\xfa\x6b\x9d\x1d\xb8\xe8\xfe\x6e\x99\x0e\x14\xb0\xe5\xb1\x05\xbd\x4f\x09\x89\xdc\x50\xde\x7d\x26\x60\x79\x70\xfb\x6e\x3a\xce\xb6\x6f\x9f\x5f\x08\x33\x68\x25\x75\xca\x14\xb9\x3c\xc1\x71\xd0\x65\xcf\xcd\xfa\xb9\x0d\xff\x67\x0b\x96\xb6\xa7\xbe\x7b\x18\x6c\xe1\xbc\xfc\x27\x86\x34\x5e\x6b\x2a\xf5\x0c\x37\xf1\xfc\xb8\x3f\x46\xd1\x85\xac\x0b\xc7\x41\x97\x69\x3c\x8a\x94\x39\x81\x7c\xa7\xc6\xc4\xd7\x67\x7a\x28\xb4\x28\x28\x4e\xb4\x61\xe0\x94\x06\xef\x31\x5f\x32\xf2\x76\x13\xd0\xbb\x4d\x80\xac\x0b\xc7\x1d\xbb\xde\xe2\x4b\x3f\x2d\x30\xa5\x75\x8b\xe2\x02\xda\x13\xc9\x62\xfd\x31\x3b\xda\x23\xa3\xc3\x4c\xdb\x33\xda\xdf\x83\x8e\xb8\x2b\x17\x0f\xaf\x17\x86\xf3\x95\x40\x03\x8e\xd6\xbd\xb1\xa6\xe8\xfc\x55\x4d\xec\xb1\x3a\x19\x23\x6f\xf0\x47\x06\xf5\x48\x6b\x46\x23\xbf\x68\x6e\xc0\x44\x7e\x7d\xe5\xfc\x04\x1b\x83\xb7\xe2\x9f\x71\xbe\x12\x68\xe8\xde\x08\xff\x5f\xf3\x15\xfc\x7e\x0d\x6e\x36\xf9\x5d\x10\x5a\xb9\xe5\x0b\xdf\x9c\x5c\xcc\xc6\x9b\xfe\x71\x4f\x82\x58\x7d\xc3\xc3\xd2\x3e\xac\x21\xfe\x36\xd1\x4c\xfb\xc5\x36\xfd\xcd\x5d\x07\xe4\x00\xc0\x71\xd0\x81\xed\x53\x31\xa7\x2c\x67\x2b\xba\xc4\xed\xf3\x65\x8c\x76\x72\xba\x38\x6a\xf4\x5a\x72\xdb\xa5\xb1\x79\xf5\x8d\x9f\x18\x9e\x8b\xca\x92\xc8\xba\x70\x1c\x34\x08\x22\xab\xdb\x93\x94\xcb\x29\xec\x0a\x0b\xcf\x78\xc4\x45\x11\x1a\xd7\x86\xef\x7a\x59\x30\x35\x55\xa0\xc5\xa4\x76\xbb\xe3\x9c\xaf\x44\xd6\x85\xe3\xa0\xd7\x3b\x13\xf8\x70\x9f\x39\xc6\x7e\xda\x12\xd4\xbf\x3f\xf8\x2c\x3a\x2a\x7d\x57\x82\xe8\x84\xf7\x04\x8b\xdc\xf7\xc7\xd2\x24\xb2\x6e\x87\xad\x43\x38\x0e\x1a\x04\x33\xb3\x5e\xf2\x99\x6c\xb1\xbc\xde\x78\xba\xb2\xbc\x15\xf6\x01\x9c\xc8\x17\xbc\x43\x17\x9f\x4b\x0b\x3c\xa6\x59\xaa\x5e\x64\x18\x44\xb6\x76\xe0\xb8\xff\x06\xe1\x9f\x35\x04\x3e\x09\x70\x13\xfc\x6f\x9b\x7c\xf6\x99\xbb\x80\xba\x3f\x87\xec\x78\x70\xb9\x50\x08\xdf\xc8\xab\xfa\xa7\x32\x3c\xce\x17\x3a\x2b\x6f\x33\xf9\x9f\x15\x4a\x71\x3b\x6c\xf2\xc1\x70\xd0\x91\x5d\xc1\x0e\xb6\x28\x7f\x28\x7a\x6e\x42\xd8\x68\xe8\x99\x5b\xe8\xab\x07\xef\x56\x1c\x49\xdd\xc4\xbd\x55\x97\xd5\x84\x44\x0d\x48\x87\x90\x75\xe1\x38\x68\x12\xce\xe3\xde\x4b\xc5\xd2\x69\xe5\x8b\xbb\xe0\x81\x9e\xd5\x5a\x61\x83\x7e\x96\x8c\x52\x9e\x4e\xd0\xd1\x92\x81\x7e\xb6\xf5\xfe\x34\x05\xb2\x2e\x1c\x77\xec\x7a\x9b\xd3\x56\x4d\x1c\x6c\xef\xa8\xf5\x7b\xf9\xe9\x4a\x64\xf3\xdc\x0d\x49\x3f\xe5\x95\x8b\x75\xdf\x26\xa6\xac\xfe\xf9\x97\x50\xf5\xc3\xeb\x85\xe1\xa0\x49\x28\xe2\x6a\xe8\x6e\xd6\x5f\x6b\x53\xd4\x44\x77\xce\xee\x4a\xb3\x71\xbf\x98\x4e\x84\xf5\x16\x87\x32\xb9\xe5\x39\x5f\xc8\xe0\x4a\x11\x72\xe7\x0e\xc7\xfd\x37\x09\xff\x59\xd7\xe1\xa3\x00\xb7\xe8\xfe\x2e\x0a\xa1\x02\xe7\x2f\x33\x7b\x87\xa2\x4d\xb4\x2c\x61\x90\x92\x14\x74\xbc\x3e\x87\x7e\xbd\x36\xd6\x58\xbe\xfd\x05\xf3\x13\xe9\x8a\x1b\x5a\xc8\x21\x80\xe3\xa0\x43\x4b\x23\x22\xad\xdd\x61\x6e\x9e\x77\x29\xf3\x5b\x0e\xce\xc0\x57\xcd\xcc\x1f\x34\x2c\xf6\x77\x6f\x9d\xe0\x0a\xc1\xe7\x38\x79\xb3\xff\x12\xb2\x2e\x1c\x07\x8d\x42\xb0\x10\x01\xfe\xe6\x1e\xfd\xf7\x4e\x0b\x8b\xa1\x80\x25\x8c\xfa\x59\x27\xe5\xf3\xdd\x6a\x2a\x0c\x29\xb7\xd0\xef\x49\x30\x88\x5c\x40\xd6\x85\xe3\xa0\xd7\xcb\x38\x16\xce\x7f\xeb\x75\x7b\x85\x4d\x6a\xd2\x10\xc1\xb5\x8b\xce\xb7\xde\xeb\xed\x65\xb3\xe6\x9a\x17\xb0\x7a\x18\x4f\x9b\xaf\x1f\x76\x0f\xe1\x38\x68\x14\x36\x48\x3e\xb6\x4d\x6c\x17\x39\xaa\xbd\x6d\x58\xdc\x5a\x39\x67\x7f\x6f\xa8\x4b\xe4\x2c\x1e\xfd\xad\xda\x8a\xf0\x2e\xa5\x98\x32\x10\x19\x05\x38\x0e\x19\x85\xfa\x3f\x6b\xed\xc0\x6d\x84\x7e\x17\x85\x86\xd2\xd2\x32\xc1\x7d\xc7\xdb\xf9\x16\x38\x64\xcd\xae\x6f\xba\x62\x08\x85\xef\xf5\x69\x6f\xed\x89\xc4\x1b\xe1\xdd\x33\x55\x58\x41\x0e\x01\x1c\x07\x1d\xda\xfd\x39\xf2\x9f\x4a\x25\x1a\xbd\x15\xa2\xcd\xa7\x5c\xd3\x2b\x17\xda\xcd\x5b\x4f\x9c\x57\x4d\x33\xe4\x1e\x36\xb2\xf5\xc0\x8c\x39\x3c\x1f\xc3\x71\xd0\x28\xe0\x7e\xfe\x42\xb0\xd1\x46\xb2\xf3\x94\x48\xa7\x99\xbd\x77\xcb\xe7\x7c\x8b\xeb\xb9\x15\xf4\xd3\xfe\x19\x65\xee\xeb\x0a\x49\x9a\xbc\xc8\xba\x70\x1c\xf4\x7a\x8d\x92\xf4\x1f\xc9\x70\xbc\x03\x5b\x57\xfb\x63\x39\x5d\xc9\x82\xa9\x10\x2f\x32\x93\x3e\x45\xcf\xd0\x6b\xbf\x7c\x5e\x65\x5a\x2c\x86\xac\x0b\xc7\x41\xa3\x30\x40\x13\x7c\xd5\x89\xd7\xc6\x6e\xcc\xb5\x6a\x1f\x87\xff\xa5\x50\x29\xb6\xd0\x17\xa3\x69\xbe\x0f\xb9\x93\xb1\xe9\x3a\x00\x1d\x36\x32\x0a\x70\xdc\xe1\xac\xf0\x67\xad\x1d\xb8\xcd\xe9\xef\xa2\x20\xb9\xb7\xe5\xcf\x90\x80\x16\x7c\xa3\xa4\xec\x91\x7a\xbe\x3c\x1b\xb1\x7a\xa3\x91\x72\xcd\x75\x4e\xf2\x13\xc5\xb1\x94\x26\xc0\xe1\xc4\x08\xc7\x41\x87\x56\x2d\x9c\xa8\x58\x91\xa4\xe2\xc5\x8f\x50\xdf\x9f\xa5\xf5\xdb\x2e\x85\xb1\xb5\x35\x7d\xd6\xb6\x4d\x5b\x23\x44\xed\x76\xf9\xc9\xd9\xc8\xba\x70\x1c\x34\x0a\xd5\x57\x75\x65\xef\x65\xac\x13\x3f\x72\xaf\x93\x54\xd6\x93\xec\xd1\xdd\x4c\x5e\xac\x9e\x25\xbb\xd9\xe5\xf5\xce\x7a\x8e\xee\xde\xe1\x92\x0e\xc7\x41\xaf\x37\xab\xef\x9b\x79\x53\x77\xc4\x47\x96\x44\xf4\xe7\x9e\xcf\xef\xd1\x7f\x71\xe0\x6e\xbd\xdf\x9a\xfd\xb5\x49\x38\x84\xe1\x4e\xb5\xeb\x61\xe3\x1b\x8e\x83\x46\xa1\x94\x2c\xf1\x85\xf6\xce\xf6\x16\xc3\x34\x9d\x1b\xd3\xa3\xe1\xed\x50\x1b\xc0\x26\x94\x78\x5b\x6a\x41\xf6\xc0\x21\xc9\x9f\x79\x08\x19\x05\x38\xee\x70\x56\xf8\xb3\xd6\x0e\xdc\x29\xff\xf7\xad\x1d\x57\x9b\x5b\x99\xc3\xe3\x98\x22\x5c\x13\xc1\xf5\xcf\x1e\x33\xb6\x48\x9c\x6b\x9b\x17\xa9\x3d\x93\xa2\x5d\xf7\x3e\x06\xc1\x20\x71\x0f\xd9\x26\x81\xe3\x8e\xb7\x76\x42\xbd\x84\xf1\x87\xbd\xe7\x0e\x9e\x9c\x10\x6b\xe2\xd4\x61\x90\xf2\xd0\xb2\xc7\x94\xb8\xc0\xf1\x5a\x4c\xa6\xac\x38\xfb\xd9\x33\x0e\x64\x65\x38\xee\x78\x6b\x67\x4a\x65\x49\x94\x2a\xd0\x88\xcb\x9a\xe6\x7a\x55\x4c\x91\x02\xd8\xa8\xf9\x98\xa2\x32\x53\x20\xdd\x67\xb8\xe9\x44\x86\xe9\xdd\xd3\xc8\xca\x70\xdc\x3f\xad\x9d\x53\x47\x2b\x87\x19\xdc\x1a\x6f\x19\x4b\xd5\x75\xf1\x6e\xaf\x70\xe2\xf5\x49\x6d\x6a\x59\x23\x89\xf9\x79\x83\x84\x53\x30\x30\x5e\xfb\xa7\xcc\x3b\x64\x6b\x07\x8e\xfb\xcf\x35\x1f\x6d\xed\xc0\x3d\x6a\x7b\xb4\xb5\x43\xa7\xa2\x4d\xd5\x64\x95\x66\x74\x30\x92\x5e\x89\xeb\x35\xee\xe9\xdd\x17\xe3\xce\xe4\x26\x13\xae\xa9\xbe\xee\xd5\x18\x24\xdc\x78\x74\x05\x32\xb6\x68\x3a\x33\xcb\x9d\x18\x6d\x48\xb7\x7c\x79\x62\xa7\xa6\x42\x67\xd4\x6f\x76\xd2\x5c\x35\x8e\xba\x6a\xf0\x55\xcc\x4e\xe3\xff\x5a\x6b\x07\xee\xd6\x8e\xb4\x76\x22\xa1\xad\x9d\x24\x8c\xaf\x49\x1c\xd6\xc9\x41\x23\xcc\x18\x56\xb3\x04\xfc\xaa\x4b\x41\x21\xdd\x0d\x6a\xcb\x9f\x83\x92\xec\x44\x86\x19\x6d\x36\xff\x46\x6b\x07\x4d\x11\x7a\xfc\xc7\xcd\x32\x55\xe9\x1d\xf6\x47\x1b\x6a\xa7\x2d\x98\xe6\x1d\xcf\x1b\x88\x41\xb0\x11\x9c\x71\x26\x16\x96\x39\xed\x61\xb9\x8c\x3e\xf4\x57\x9e\x27\x39\xde\xda\xb1\x6f\x9e\x4f\xef\x0a\x9a\x72\x67\x53\xd2\x7b\x17\xec\x7d\xd3\x3a\xd9\xa5\xdd\xb1\x05\xaf\xea\xee\xeb\xb9\x20\xbd\x0d\xd9\xb1\x86\xbf\xf2\xf4\x8c\xfa\xb1\x8f\x7d\x10\xd4\xd0\x9f\xf8\xae\xcf\x29\xda\x39\x9a\xba\x9f\x27\xe2\xb9\x8d\xfd\x23\x23\x66\xb5\xcd\x82\x46\x23\x71\x11\x11\x7e\x74\xcb\xbf\x72\xb7\xc7\x5b\x3b\xdf\xf0\x1b\xa8\xb9\x04\x6d\xb2\x2c\x6e\xbf\x72\x1e\xad\xcf\xa7\x99\x62\xce\x6f\xa9\x4e\xc0\x2a\x77\xc8\xf1\x24\x7f\xea\x78\xe5\xfe\x5f\xb9\x5b\xd7\x63\x1f\xab\x43\x86\xf3\x7e\x8c\x8e\x93\x74\x71\x49\xf0\xbe\xd5\x05\x1c\x25\x51\x89\x73\x38\x32\x55\x4f\x88\xf7\x5e\xf6\xb4\x89\xc9\x15\xd3\xfc\xb5\xd6\x0e\x5c\x74\x7f\xb7\x4c\xcb\x4e\x5a\x8d\x32\xd8\x8a\x5e\x32\xbe\x59\x26\x26\xb5\xa6\x54\xbb\xe8\xca\x6e\x57\xe0\x25\x44\x11\xe0\x8d\xd3\xe1\xaf\x1d\x46\x8e\x5c\x9e\xe0\x38\xe8\xb2\xf7\xc2\x04\xff\x22\xf1\x2c\x3b\xb7\xe3\x8e\x01\x61\xe6\xfb\x67\xbd\x0f\x2b\x11\x8e\x6d\x3d\xc9\x5a\xdf\xdf\x8d\xe3\x2e\xb3\xcc\x15\x21\xeb\xc2\x71\xd0\x65\xba\x3e\xff\x34\xa2\xe2\xce\x77\xc1\xf9\x20\x6f\x53\x15\xad\x5e\x9d\x72\x72\xf1\x09\xdb\xa2\xb4\x62\x1c\xbf\xd5\x04\x85\xe9\xf8\xc3\x87\x8c\xe0\x38\xe8\xf5\x52\x18\xbc\xe8\x0b\xe0\x49\x21\xb8\xa9\xee\x4e\xf6\xcc\x7c\xfc\x02\x7d\xe0\x62\x56\x9f\xf5\xb9\xcd\x5a\x52\xc6\x9d\x57\x13\x58\x5e\xc8\xba\x70\x9c\xaf\xc4\xbf\xe7\x7a\x15\x7a\x2d\xae\x27\xa7\x53\xb3\x4f\x28\x7c\xa1\x1c\x09\xbf\x3e\x42\xb4\x89\xe3\x11\x25\x5a\x13\xf1\xc4\x24\x02\xe0\xa4\xec\x9e\x46\xb6\x76\xe0\x38\x5f\x09\x3a\x34\x6f\x84\xff\xaf\xf9\x0a\x7e\xbf\x06\x37\x9b\xfc\x2e\x08\x56\x5c\x8e\xbd\xd9\x32\xfc\x69\x52\x45\x3c\x37\x72\x31\x0b\x75\xec\x15\x73\x33\x53\xe7\xbc\x75\xc3\xc0\xf9\xde\xcf\xb8\xef\xe9\x91\x03\x00\xc7\x41\x07\x96\xdc\x8a\x08\x8b\xac\x13\xeb\x81\x28\x13\x65\x94\x9f\x40\xef\x55\xb6\x9b\x21\xed\xa6\x5a\x78\xdc\xa1\xdf\xc9\x0f\x38\xc2\x0d\x7c\x90\x75\xe1\x38\x68\x10\xfa\xb2\xce\xae\xe2\x46\xde\xdc\x6f\xab\xab\x67\x8c\x77\x2d\x66\x2a\x47\x73\x1f\x8e\x6f\x2a\x91\xb8\x99\x2c\x47\xab\x64\x22\xe4\x72\xd8\x32\x82\xe1\xa0\xd7\xcb\xf3\xba\x5a\xa1\x2c\x50\xeb\xb6\xe6\x50\xda\x3c\x3a\x11\x9a\x10\xd7\xf4\xc3\x85\x90\x53\x9c\xe2\xfc\x42\xc9\x6f\x32\x98\x5c\x9f\x22\xeb\xc2\x71\xd0\x20\x64\x74\x91\xe4\x96\x3c\xf2\xbc\x47\xc9\x5a\x97\x8e\xa3\xee\x72\xf7\xe4\x0e\xd9\x33\xb6\xe4\x72\x82\x4e\x34\xf1\x36\x5a\xce\x9d\x78\x64\x6b\x07\x8e\xfb\x6f\x10\xfe\x59\x43\xe0\x93\x00\x37\xc1\xff\x2e\x09\x65\x99\x91\x85\xb3\x8f\x62\xdd\x78\x2a\x38\xcb\x47\xbc\xb9\x66\x2d\x65\xea\xda\x24\x6c\x18\x3b\xca\x77\x95\xce\x76\x6a\x9e\xee\x46\x8e\x00\x1c\x77\xec\xa9\x9d\x76\x76\x76\x00\x4b\x7e\x7b\xdc\xa2\xb9\x33\xdb\xb9\x3c\x5b\xa2\xb1\xac\x61\x16\xf1\x2d\xcb\x41\x69\xa9\x48\x26\xb9\x0b\xe7\xf0\xa9\x1d\x18\xee\x58\x12\x3a\xa4\x54\x18\x48\x1b\xee\x36\xdd\xb5\x76\x53\x59\x55\x39\x53\x8d\xdd\xea\xab\xf3\xf2\xb6\xf7\x19\xdb\xc5\x2a\xa1\xe6\x86\x17\x87\x49\x80\xe1\xa0\xd7\x6b\x72\x62\x48\xf3\x0e\xdd\xd9\x30\x1d\x83\x9d\x0b\xe0\x1c\x3a\x09\x5f\x6a\x81\x44\xcb\xd7\x8b\xbb\x3d\xde\x3c\xcf\xc4\x77\x7c\x3d\x91\x75\xe1\x38\x68\x12\x9e\x74\xe1\x72\xde\x08\x72\xee\xed\x3d\xa1\x2a\xb0\xa1\x36\x72\x4e\x6a\xd8\xe2\xe3\xbb\x52\x7e\x63\x2f\xb6\xd7\xa5\x7d\x0b\x0c\x2b\xc8\x9d\x3b\x1c\xf7\xdf\x24\xfc\x67\x5d\x87\x8f\x02\xdc\xa2\xfb\xbb\x28\xb4\xcf\x8a\x81\xf6\x37\xa4\x74\x63\x5b\xd5\x45\x3a\x5a\xcf\x5f\xed\x72\x3e\xb8\xf9\xa8\xe3\xbd\x71\x07\x01\xd6\xcd\x0f\x75\x6d\x11\xc8\x21\x80\xe3\xa0\x43\x7b\x87\x35\xd1\x2d\xd6\xef\x76\x1f\x5e\x91\x91\xb2\x5e\x78\x52\xaa\xb1\xf5\xf7\x1b\x0d\x8e\xe9\xd2\x4e\xe2\xe1\xd9\x0f\x46\x85\x8c\x90\x75\xe1\x38\x68\x14\x58\xe9\x89\xaf\xe7\x0e\xf6\x74\x9a\xb5\xb2\x8a\x97\x8f\x7f\x70\xdf\x66\xbb\x52\x51\x71\xfb\x0c\xfd\x41\xbf\xb0\x3a\xc0\x73\xcd\x16\x59\x17\x8e\x83\x5e\xef\xc6\x28\xe5\x95\x3e\x03\x0c\xe1\x0c\xeb\xa0\x8e\x42\x47\xb4\xa6\xd7\xc4\xae\xa5\xa2\x8c\x4a\x32\x6e\x57\x96\x76\x53\xb4\x14\x88\x90\x75\xe1\x38\x68\x14\xac\x18\x4f\x3a\x10\xdc\xcb\x73\x63\xcf\xec\x9f\x99\x26\x0d\xe5\x0d\x15\x24\xa9\xd0\xd7\xe4\x4e\xd6\x50\xa6\xea\x07\xe2\xbb\x69\x90\x51\x80\xe3\x90\x51\xf8\x67\xaf\x05\x1f\x05\xb8\x8d\xd0\xef\xa2\x90\x29\xcd\xa3\x58\xc3\x58\xe4\x1d\x33\xdb\x10\x8e\xee\x9f\x16\xf2\xe0\x5b\xf6\xcc\xd7\xdc\xec\xe1\xe7\xaf\xaf\x9b\x5e\x9b\x4b\x4a\x42\x0e\x01\x1c\x07\x1d\xda\xe2\xdd\xc9\xfe\x0d\xa3\x13\xbe\xce\xeb\x3b\x65\xc9\x46\x06\xef\xbf\xd7\x1a\x1a\x3b\xb7\x7f\xe8\xbc\x3b\xa6\xe3\xd0\x55\xb0\x78\x1b\x59\x17\x8e\x83\x46\x41\x1b\x21\xf3\x04\xf4\x38\xe3\x7f\x26\xf2\xd6\xd5\xc0\x8a\xab\xd3\xa6\xf1\xf7\xf8\x32\x07\x3e\x3d\xf3\xb9\x12\x3e\x54\x6d\x5b\x10\x8a\xac\x0b\xc7\x41\xaf\xd7\xc1\xf1\x2a\x0b\xe3\xf2\x95\x9f\x9c\x8d\xa7\xe7\x26\xef\x96\xae\x44\x63\xf9\xf3\x56\x93\x64\xae\x3d\xaf\xbb\xa0\x5c\xef\x5a\x71\xd8\xe5\x83\xe3\xa0\x51\x88\x71\xcc\x67\x9a\x10\x70\xf1\xde\x98\xc8\x79\x55\xde\xc8\xc5\x57\x2a\xb5\xf3\xf6\xc3\x2e\x96\x73\x50\x9a\x02\x4f\xe0\x2d\xf5\x31\x64\x14\xe0\xb8\xc3\x59\xe1\xcf\x5a\x3b\x70\x9b\xd3\xdf\x45\x81\xd5\x56\x76\xd8\x46\x6f\xc9\xc2\x26\xdc\xcf\xe0\x21\x1f\xf5\x5c\x29\x18\x7e\xf6\xae\xae\x14\x6d\xa2\x45\xc7\xa5\xee\x80\xdb\x0a\x87\xdf\x32\x18\xee\xd8\xb7\x8c\xbd\xd0\x77\x91\x2f\xcc\xd3\xda\xa0\xde\x1c\x7d\xcd\x5a\xfa\x1d\x8b\x8e\x6f\x1e\x66\x9f\xeb\x49\xb7\x9a\x07\x6b\x64\x67\x8b\x0f\xbf\x65\x30\x1c\x34\x0a\x8e\xde\x43\x8f\x97\x92\x25\x6d\xb6\xf4\xc3\x57\x96\x70\x9a\xcc\x64\x9e\x62\x19\x95\xee\x74\x7c\x19\xf2\x9f\xff\xf2\x78\xdb\x11\x1d\x59\x17\x8e\x3b\x36\x8b\x61\xbd\x61\xc8\x66\x67\x52\x53\x4a\x09\xd4\x7e\x66\xa4\x81\xd1\xd8\x29\x67\xb7\x33\x84\x3b\x88\x13\xd1\xf1\xc3\x42\xf2\xfa\xb3\xc3\x59\x0c\x86\x83\x46\x41\x0a\xe7\xfe\x30\x0b\x27\x8f\xbe\x5e\xb7\x7b\x35\xff\xa6\x3e\x46\xa6\xf1\xf5\x8e\x03\xaa\x5b\x53\xcf\xdf\x47\xa9\x8c\xc4\x3a\x1d\xf6\xfe\xe1\xb8\xc3\x59\xc1\xf5\x8f\x5a\x3b\x70\xa7\xfc\xdf\xb7\x76\x3e\x2e\xd3\x13\x2d\x17\x9d\x53\x91\x1d\x26\x8d\x1e\x5f\x7f\x3f\xb6\x94\x55\xa4\x55\xf1\xe1\x7b\x66\x4b\xfa\xe0\x0d\x1d\xf4\x2e\x1b\x64\x9b\x04\x8e\x3b\xde\xda\x79\x4f\xae\x45\x87\xe0\x99\x6a\x69\xd4\x32\xf1\xc4\x56\xe0\x4c\xd3\x7d\xa5\xff\x74\x76\x62\x49\xbe\x66\x90\x23\xf3\xb6\xa7\xbb\x12\xb2\x32\x1c\x77\xbc\xb5\xf3\xd8\xb7\x7c\x4b\x41\xac\x24\x76\x22\x5c\x2a\xca\x92\xf8\x7e\xc1\x99\xef\x74\xc9\xd3\xe7\xb7\x3f\xb7\xb2\x73\xb3\xf0\x4f\x9c\xe1\x45\x56\x86\xe3\xfe\x69\xed\x88\xfd\xab\x8b\x58\xf1\xf2\xfa\xbd\x9c\x97\x65\xfe\xfc\x51\x4b\xe9\xf3\x6a\x44\xaf\xda\xea\x52\x45\x46\xd0\xb2\x49\x76\xbc\x03\xef\x74\x0c\x7d\x42\xb6\x76\xe0\x38\x5f\x29\x3a\xb4\x7f\xb7\x76\xe0\x7e\x1a\x7d\xb4\xb5\xb3\x5f\x43\xa9\x1d\x4a\xb6\x25\x27\xee\x5d\x1b\x91\x4e\xd8\xf3\xea\x61\x5e\xdd\xa7\xf0\xf6\x08\xab\xb8\xf9\x6f\xc4\xa9\xf3\x31\x46\x47\x50\xdf\x1f\x6f\x82\x1d\x3d\xc6\xfc\x99\x6a\xc5\xb0\xa7\x79\x6a\x74\x19\x88\x34\xc4\x1e\x45\xe5\x35\xfe\xec\x30\x21\xd6\x63\xc0\xe8\xf8\x5f\x6b\xed\xc0\xdd\xda\x91\xd6\xce\x3b\x68\x6b\xc7\xaa\x3a\x60\xf1\xc7\x8f\xab\x5f\xe4\x42\x70\x1d\x5e\x0c\x2e\xce\x54\x17\xd1\xdb\x9d\x1b\x15\x4c\x19\x11\xbd\x64\x28\x8e\xe6\x40\xf2\x37\x5a\x3b\x62\xc7\x5a\x3b\x3e\x97\xbc\xbb\x2a\x47\xeb\x5e\x45\x77\x24\x50\x7a\xc5\x1b\x4c\x0c\x19\x10\xd4\x4e\xd7\xe9\xce\x7d\x5b\xc5\x90\xf3\x3b\xfb\x38\xfc\xaf\x3c\x50\x72\xbc\xb5\xd3\xa7\x4b\x31\xd3\xe2\xc8\x5a\xee\xe7\x5e\x8b\x2d\x35\xb5\x57\x85\xdb\x4a\xe2\x4a\xf6\x40\x34\x5f\x64\x8a\x74\x86\x54\xb5\xff\xde\x5f\x79\x7c\xe6\x78\x6b\x27\xef\x32\x03\x13\xc9\x53\xdf\xdb\xef\xdb\xb1\x69\xe4\x24\xdc\x23\xcb\xec\xf9\xae\x3f\xc3\x27\xeb\xb9\xe9\xb8\xb1\xbe\x74\x5a\x29\xe4\xaf\xdc\xed\xf1\xd6\xce\xf3\xd9\x77\x27\x2d\xa5\x83\xbe\x94\x6f\xb6\xa9\xc7\xa6\x69\xb0\x57\xcd\xe0\x7c\x96\x2d\x55\x9e\x6d\xbb\x3c\x94\xd1\xee\xc1\x49\xf4\x57\xee\xf6\x78\x6b\x87\xe2\xf4\x82\x27\xe1\x9a\x51\xc0\xbc\x58\xf2\xa8\x88\xb8\x8e\x57\x86\x47\x02\x1e\xc9\x7d\x03\x8b\x9f\xd7\x71\xc3\xcc\x8a\x63\x12\xff\x5a\x6b\x07\x2e\xba\xbf\x5b\xa6\x1d\xd3\x1c\x77\xe5\x3a\x83\x4a\x14\xaa\x3f\x47\x0a\x5a\xa9\xf3\x51\xae\x3e\xf0\xea\xce\x5a\x1f\xac\x89\x63\x90\x49\xc8\xda\xc3\x3d\x5c\xf6\x60\x38\xe8\xb2\x27\xb7\x9f\x74\x4d\x33\xd2\xe3\x1e\xb6\x7c\xfc\x66\xcb\xc1\xc0\xf5\x57\x8d\x7b\x07\x01\x01\x8f\xb5\x97\x16\x47\xad\x3e\x7c\x56\x54\x46\xd6\x85\xe3\xa0\xcb\x34\x0e\xb9\x77\xb0\x67\xcf\x6d\xcb\x78\x4f\xae\x90\x60\xe9\x1c\x31\x1b\xd1\x94\xbb\x3d\x22\x96\x88\x85\xbb\xb1\x9d\xdd\xbe\x53\x89\xc8\xba\x70\x1c\xf4\x2f\x25\xea\x31\xb9\x12\xbb\x00\x9b\x78\xdc\x15\xee\x98\x0b\xd9\xef\x71\x9c\x7f\x0c\x33\x06\xd8\x5c\x3b\x95\x8b\x28\xd2\x93\x0e\xc0\x7e\x85\xac\x0b\xc7\xf9\x4a\x00\xff\xde\xae\x8c\x9c\xce\xc8\xa6\xd4\x29\x53\xf2\x79\x21\xb3\x4a\x21\x60\xdd\x97\x8a\xf0\x43\x67\x35\xdd\x91\x77\x15\x26\x5e\xb7\xd2\xbf\x8f\x6c\xed\xc0\x71\xbf\xfe\xdd\xbc\x11\xfe\xbf\xe6\x2b\xf8\xfd\x1a\xdc\x6c\xf2\xbb\x20\x08\xa2\x4d\x49\x06\x8a\xa8\xe6\x44\xde\x91\xbe\x66\x10\x5a\xab\x96\x5d\x3d\xc9\xf6\x5a\xc1\xb9\x81\x28\xb5\x4d\x2c\x9a\x79\x77\xea\xf0\x37\x07\x30\x1c\x34\x08\x3f\x9e\x3f\x9e\xe6\xa3\x6e\x9e\x98\xc2\x8f\xa9\x3e\xe7\x9e\xf1\xc4\xc5\x2a\x14\xeb\xf5\x14\xf1\x67\x1b\x2d\x5f\x81\x97\xa0\x94\x2e\xb2\x2e\x1c\x07\x0d\x42\x46\xc2\xa7\xd7\x00\xcf\xa7\x04\x17\x0a\x47\x16\xf5\x65\xf5\xbc\x4a\x83\x57\x69\x7c\x8e\xde\xa7\xd7\x54\x4b\x4f\x54\x8e\x96\x2a\x22\xeb\xc2\x71\xd0\x20\x84\x2a\xe4\x2b\x63\x26\xeb\x14\xb0\x2f\xf7\x64\x7e\x5c\x7f\x6a\x6e\x66\x75\xe7\x71\x41\x28\xa0\x3f\xf4\x20\x50\x89\x8f\xfd\xcb\xd7\xc3\x07\x15\x60\x38\x68\x10\x9a\xac\xcb\x7d\x6a\xae\x1c\x0c\xb5\x0d\x16\x4b\x3e\x93\xd0\xff\xf4\x4e\xa3\x69\xe1\xba\x99\xfd\x39\x55\x59\x23\x45\x99\x88\xf2\x3d\x64\x6b\x07\x8e\xfb\x6f\x10\xfe\x59\x43\xe0\x93\x00\x37\xc1\xff\x2e\x09\x27\x1e\xed\x31\x09\x7c\x17\x30\x92\x9a\xbc\xf6\xb5\x4a\xbd\x4d\x3f\x4b\xb0\x82\x43\x3b\x58\xcb\xd4\x2a\xe9\xca\x7e\xb3\xaa\x53\x20\x72\x04\xe0\x38\x68\x12\x22\xcc\xf0\xae\x97\xb4\x9b\x18\x0c\x5e\x2d\x61\xb1\xba\x9f\x95\x6f\x93\x80\x6b\xf1\x90\x05\x67\x2d\x7d\x67\x4e\xb0\x7f\x63\xfd\xb0\x65\x04\xc7\x41\x93\x90\xc0\x68\x77\xeb\xad\x94\xbb\x32\x55\xcd\x92\x87\xb5\xc7\xe5\x2e\xaa\x00\x05\x83\x31\x1b\x8d\xb0\x93\x38\xaf\xd7\xde\xaa\xd6\x1f\xd6\x85\xe3\xa0\x49\x38\x5f\x26\xed\xa8\xe1\x70\xc3\x1f\xb1\x51\x82\xbb\xf2\x80\xf8\x67\x6b\xc2\x2e\x91\x94\xa6\x78\x64\x9d\xc2\xa0\xe6\x0f\xdc\x9f\x67\x0f\x9f\x06\x82\xe1\xa0\x49\x18\x6a\x6f\x7d\x11\x3a\xc9\x90\xa1\xda\xf0\x9a\x99\x6e\xf5\xaa\x9f\x9f\xa8\x37\x1a\x36\x21\x66\x51\x06\x5b\xad\x9b\x5d\xe4\xd3\x28\xe4\xce\x1d\x8e\xfb\x6f\x12\xfe\xb3\xae\xc3\x47\x01\x6e\xd1\xfd\x5d\x14\xea\x0a\xbd\x1e\x7d\x0b\xde\x5e\xb8\x98\xe7\xa6\x5e\x2c\x24\x7d\x7f\x5c\xf3\x8b\x7c\xd5\x63\xd2\xd4\xc7\x8e\x96\xcb\xad\xfa\x3c\x87\x8f\x3e\xc0\x71\xd0\x28\x94\xdf\xd4\xcc\xe5\x7c\xf0\xc2\x22\x0a\x7f\xd8\x34\xf4\xc2\xf8\xac\xca\xd9\xae\x0e\x91\xbd\xa0\xab\x41\x24\xa4\x98\x0a\x13\xec\xb9\xc8\xba\x70\x1c\x34\x0a\x55\x9f\x9f\x4f\x26\xa6\x37\x9e\xb3\xbd\x37\x75\x97\x50\x82\x2b\x85\x5f\x4c\xf1\x47\x35\xcb\xf7\xe6\x27\x3c\x0c\xb5\xc6\x01\x7c\x87\xbf\xa6\x84\xe3\xa0\x51\x78\xcb\x49\x47\x7e\x85\xea\xd6\x80\xa7\xe8\x94\xbe\xfe\x48\xf1\xb7\x79\x44\x7a\x99\x8b\xe8\x06\xbe\xa5\x68\xcb\xea\xe9\xaf\x7b\x87\x87\x59\x38\x0e\x1a\x05\x71\xfc\x4f\xa1\x4b\x86\x06\x09\xe4\x84\x57\x5b\xe3\x5f\xa6\x89\x5b\x77\xa8\xf1\xfa\x77\xfa\xa4\x33\xed\x6d\x5a\x07\xa5\x1a\xd2\x21\xa3\x00\xc7\x21\xa3\x20\xf6\x67\xad\x1d\xb8\x8d\xd0\xef\xa2\x70\x7d\x57\xb4\xbc\x31\xc8\x41\xce\x4f\x3d\x7a\x59\xa3\xe8\x85\x6b\xbf\xa3\xbe\x73\x03\x61\xde\xf9\x78\x9c\x57\x15\xd1\x72\xb5\x87\x8f\xf7\xc2\x71\xd0\x28\x9c\x23\xb9\x3c\x7e\x93\x5d\xa3\x70\x88\x39\xe5\x8a\x5c\x3a\x67\xee\xc8\x9b\xbe\xce\x4d\x3c\x02\x17\x2e\x01\xbd\x4d\x65\xef\x83\xc3\x47\x40\xe0\x38\x68\x14\xd6\x28\x96\x27\x6e\x51\x8f\x1b\xc6\x7b\x55\x6d\xac\x92\x5a\x35\x60\x55\xb9\xff\x0c\x6b\xc7\x18\xb3\x47\xa3\x2f\xda\x5d\x75\x3c\xfc\xc1\x2e\x1c\x07\x8d\xc2\xea\xf9\x81\xe7\xe7\x69\x6c\xb3\x4e\x1b\xae\x55\xf6\xd6\xf6\x19\x5b\x18\x6f\x11\xe2\x4f\x65\x44\x5a\xbc\xfd\xf0\x90\x4b\x33\x3a\x0d\x59\x17\x8e\x83\x46\x21\xa3\x9c\xa4\xc1\x8d\x41\xb4\x50\x7e\xc5\x59\xbe\x86\xeb\xc5\xd3\xfe\x98\x1a\xae\xd1\x72\x9f\x32\xc3\xd2\xa0\xbb\xf7\xe3\x3f\x3b\x21\xa3\x00\xc7\x1d\xce\x0a\x7f\xd6\xda\x81\xdb\x9c\xfe\x36\x0a\x49\xc2\xd8\x0f\x93\x63\xd7\x04\xcb\xf7\x47\x25\x65\x02\xae\x58\x06\x04\xc7\xaa\x4a\xee\x2b\xa4\x83\x92\xfe\x25\x92\x56\xa7\x0e\xa3\x00\xc3\x1d\xfb\xed\xf6\xcf\xad\xda\x40\x0c\x3a\x5c\xcb\x64\xa2\x34\xa0\xfc\xa0\xc9\x51\xe1\x8a\xbe\x43\x4f\x29\x05\x0f\x5a\x5e\x7a\xd5\xe0\x0f\x9b\xc3\xdf\x6e\xc3\x70\xd0\x28\x3c\xc4\xd1\xf0\x73\xe1\x6a\xa3\x61\x4d\x5a\x75\xfc\xf8\x03\x41\xb1\x70\x2a\x4b\xea\x44\xdf\xdd\x8a\xb8\x7d\x9d\x35\x1b\xa3\x8b\x22\xc8\xba\x70\x1c\x34\x0a\x6a\xa1\x41\x9f\x6a\xed\x39\x3a\x33\xaf\x27\xc4\x44\x25\x53\x15\x38\x9f\x67\x28\xc7\x9b\xc5\xe8\x57\xa3\xf2\xe2\x8d\x9c\xf6\xca\x3b\x7c\xca\x08\x86\x83\x46\x21\x54\x33\xf8\x86\xb6\xd9\x70\xbd\xfd\x47\x31\xc1\xe7\xac\xba\x6f\xbc\xbf\x93\x5b\x44\x93\xee\xc8\xda\xbe\xa6\xc7\x0e\xef\xf1\x1b\x40\x46\x01\x8e\x3b\x9c\x15\xfe\xac\xb5\x03\x77\xca\xff\x7d\x6b\xa7\x82\x92\x66\x8b\xca\x9b\x35\x5b\xc2\x96\x06\xe7\x44\xe4\x75\x72\xaa\x37\x37\x6c\x30\x1e\x26\xdf\x02\xe6\x5b\x10\x75\x3e\x8c\x4f\x90\x6d\x12\x38\xee\x78\x6b\xc7\x58\x6b\xeb\x25\xcf\x2e\x2d\x89\x1a\x63\xbb\xff\x9d\x70\x6a\x7d\x66\x35\xdf\x42\xc5\xc8\x2b\x78\xd8\x20\xda\xc5\x84\x97\x7c\x01\xc8\xca\x70\x9c\xaf\x14\x1a\x26\xa4\xb5\xe3\x81\x35\xbe\x2b\xfa\x68\x67\x59\x87\x8f\xc0\x87\x3b\x6f\x35\xb4\xb6\x69\x90\xab\xf6\x13\x6f\xee\xec\x79\x7c\x44\x82\x85\xf5\x61\x6b\x07\x86\xf3\x95\x02\x20\xa3\x51\xff\x66\xf6\x55\xc0\xc1\x53\x43\x15\x9b\xef\x6f\xa7\x06\x24\x31\xdf\xf6\x72\x0f\x79\x2b\x45\xe6\xf9\x6b\x56\x08\x69\x2d\x3e\x6b\x43\xb6\x76\xe0\xb8\xff\x8c\xf3\xd1\xd6\x0e\xdc\xab\xec\x8e\x1e\x9a\x27\xd2\x03\x3f\x5d\x0e\x53\x68\x15\xcd\xe8\x8f\x1c\xe6\xfe\xd2\x38\x66\xca\xd3\x18\x16\x9b\xa3\xfe\x3e\xec\x51\xee\xe6\xfd\x32\xf0\x68\xc7\xfe\x9d\x39\xfb\xe4\xcc\xb5\xa2\x99\x80\xaf\xb1\x18\x63\x0d\xc6\x21\x45\xc3\xbd\x18\x7e\x23\x99\xd3\xa9\x2a\x0e\xfd\x62\x9b\x8b\xff\x6b\xad\x1d\xb8\x5b\x3b\xd2\xda\x39\x45\x06\x39\x88\x8f\x66\xa9\xf3\x8d\x8f\x7f\x7f\x8c\xc9\xb2\x71\xdb\x3b\x34\x76\xe9\x54\xaf\x78\x4c\x68\x62\x7f\xcd\xfa\x16\x76\xe4\xf6\x8d\xf7\x67\xfe\x46\x6b\xc7\xfb\x58\x6b\x27\x26\xdb\xb1\x9c\x34\x9a\x28\xb2\x57\x8d\x24\x57\x40\xc6\x52\x21\x92\x9e\x9f\x3e\x50\xca\x6d\x88\x6f\xc1\x44\x89\xb7\x84\xa0\xee\xaf\x3c\x50\xc2\x7f\xac\xeb\x70\x9e\x91\xb2\x76\xfc\xec\xc7\x16\x99\xdb\xbd\x85\x6c\xa6\x73\x8c\x25\xeb\xe7\x1b\x58\xf2\x1c\xb9\x9d\x32\x6d\x9b\x1e\x38\x14\x9a\xfc\x95\xc7\x67\x8e\xb7\x76\x44\xcb\xcb\x31\xae\x69\x63\x9c\xb9\x73\x1e\x1d\xb7\x73\xdc\xa0\x95\x88\x87\x3e\x3a\xd2\xb6\x8c\xe5\xe1\x26\x99\xaf\xf4\xa9\xcf\x0c\x7f\xe5\x6e\x0d\x8f\x7d\xac\xad\x7e\xec\x84\x44\xd5\x46\x17\x55\x76\xaf\x4c\x7e\xd1\x8d\x38\x2e\xc6\x67\xb6\x63\x5b\x76\x11\xf6\xcb\xb5\x67\x02\x14\x03\xfe\xca\x20\x7b\x1f\x6f\xed\x38\x52\x98\x57\x72\xe8\x49\x3c\x7c\x8c\x5e\x10\x48\xff\xa5\x33\x90\x8c\x93\xbe\xd9\x73\xfe\x9a\xd3\xa8\xa9\x58\x00\x77\xeb\xc7\xbf\xf0\x63\xbb\x9b\x7f\x16\xdd\xdf\x2d\xd3\x6c\xb8\xd5\x76\xe7\xb0\xf7\x7f\xf0\x7c\xe0\xa1\xe9\xab\x79\xfe\x83\x31\x57\xa0\x9a\xf2\x75\xbc\xdc\x00\xfd\xee\xeb\x9b\x7c\x53\x87\xcb\x34\x1c\x07\x5d\xa6\x79\xcf\xbd\x2a\x3d\x29\x21\x9b\x32\x9a\x1c\x4c\x67\xdf\x1c\x5b\x56\xf0\x91\x35\x91\xdf\x96\xf1\xb4\x08\xcd\xb7\xde\x68\x01\xd1\xc3\xa7\x76\xe0\x38\xe8\x32\xbd\xab\x5c\x4d\x96\xee\x9a\xd2\xe9\x64\x90\x43\x46\xda\x77\x83\x5b\xb8\xe4\xdd\x8c\x65\x2d\x93\xfc\x07\x8d\x76\x99\x40\xc4\xe5\x68\x64\x5d\x38\x0e\xba\x4c\xdb\x17\xb3\xcc\x7a\xb2\x5d\x36\xc7\x1a\x62\x0c\xbe\x26\x3a\x1c\xd3\x13\x3e\x62\xcd\x89\x9d\xb3\x32\x3f\x44\x27\xc0\xae\xe5\x75\x1e\x59\x17\x8e\xf3\x95\x38\xf1\xaf\x71\x08\x26\x37\x79\x71\x86\x60\xa9\xe2\x25\x26\xc3\x81\xbf\xa7\xef\x0c\x71\x91\x3a\xd9\x1b\xd9\x0f\x5c\x06\xe8\xaf\x9c\xcf\x59\x73\x98\x23\x5b\x3b\x70\xdc\x7f\x7f\x37\xfd\x6b\xbe\x82\xdf\xaf\xc1\xcd\x26\xbf\x0b\xc2\xf6\x47\xfe\xea\x1f\x16\x55\x71\x6a\x5d\xd4\x83\x83\xfc\x3d\xf1\xb2\x7b\x0b\xa5\x66\x9b\x64\x77\x78\xd4\xbe\x98\x68\x1a\x35\x1f\x3e\x68\x0e\xc7\x41\x83\x60\x4d\xba\xb2\x6b\xb0\x96\xef\x43\xe8\x44\xd4\xde\xfa\xd4\x9a\xb0\x7d\x3c\xfb\xcc\x52\x52\xc9\xe0\x6b\x75\xda\x92\x6a\x53\x9b\x3d\x64\x5d\x38\x0e\x1a\x04\x46\xa7\x07\xea\x44\xe4\x75\xd2\x86\xae\x55\xb7\xc9\x9b\xe8\x54\xa7\x35\xb9\x14\xca\x45\x18\xc0\x57\xe6\xad\x3b\x73\xee\xd2\x86\x87\xbf\x91\x80\xe1\xa0\x41\x78\x4d\xf8\x9d\x65\xb0\x04\x27\xfc\x79\x2e\x57\x42\x08\x56\x50\xa7\xf3\x47\xdb\xdc\x34\xd9\x46\xe5\x01\x47\x1f\xf3\xc0\x10\xbb\xc3\x17\x09\xc0\x71\xd0\x20\xe0\x3b\x5d\xf4\xc9\x27\x7f\xa0\xfe\x8d\x8d\xa3\xde\xe3\xa2\xd2\xc8\x7e\x28\xa6\xbd\xea\x1d\x9f\x0f\x04\x22\xca\x3c\xa4\xd2\x53\xb6\xc8\xd6\x0e\x1c\x77\xf8\xae\x9d\x3f\x6a\xed\xc0\x4d\xf0\xbf\x4b\xc2\x78\x86\x09\xe7\xd2\x3d\x26\x4c\xd6\xeb\x06\x5f\x73\x4d\x49\x5d\x77\x74\x12\x53\xe6\x14\x0b\x65\xeb\xab\xac\xd2\xb1\xab\xe8\x9d\x91\x23\x00\xc7\x41\x93\x30\xca\xcf\x6a\x9a\x3c\xfd\xf5\x96\x7b\xaf\x8b\x12\x18\x5f\x27\x27\x23\xdf\xb3\x4c\x5f\x29\xb1\x91\xc8\xe6\x4c\xb4\x20\x0e\x1c\xbe\xc3\x07\x8e\x83\x26\x81\xc7\xc6\x7d\xd8\x42\xa5\xfa\xd5\x25\xed\x60\x31\x5c\x26\x39\x5e\xfa\x83\x9d\x04\x7d\x84\x0f\xc3\x82\x89\x83\x16\x37\x16\xdf\x61\xb7\x17\x8e\x83\x26\x61\xdf\x9b\x83\x5d\x9e\x2c\xab\x92\x3c\x03\x4c\x27\xb0\xb2\x94\x4a\x2a\xe5\xed\xa3\x73\xb1\xe6\x52\xf2\x9a\xf7\x68\x89\x96\x3e\xfc\x75\x0f\x1c\x07\x4d\x82\x4a\xb0\x0d\x79\x96\xa2\xab\x8a\x86\x3f\xa9\xff\x78\x15\x39\x99\x71\x1b\xa3\x6a\x93\xa2\xe7\x0f\x74\xee\x9e\xb2\x8c\xb8\x94\x3c\xe4\xce\x1d\x8e\x3b\x7c\xab\x06\xff\x1f\x1d\xe2\xe0\x16\xdd\xdf\x45\xe1\x15\xce\xb6\x0b\x9e\xb7\x17\xa9\x77\x62\xec\xa5\x67\x53\x53\x02\x03\xcf\x25\x06\x66\xef\x77\xbc\xe4\xd2\x7b\xb8\x9c\xf8\x46\xe8\xf0\xd7\x32\x70\x1c\x34\x0a\x97\x09\x35\xd5\xc8\x14\xd1\xc6\xcc\x43\x1b\x31\xcb\x7a\xca\xbe\xf3\x50\x36\x75\x16\x52\x8d\xdb\x85\x50\x86\x7e\x77\x59\x78\xcf\x8c\xac\x0b\xc7\x41\xa3\xd0\x18\x1c\x2a\x64\xb1\x2e\xf9\xe5\x1c\x0d\x89\x83\x83\x9c\x39\x06\xf3\xae\xf5\x83\xcb\xfa\x61\x75\x8c\x51\x3e\x6a\x43\x3e\xa2\x87\x2f\x42\x81\xe3\xa0\x51\xb8\x8c\xdf\xb5\xcb\x3e\xe0\xf8\x74\xd4\xdd\x79\xee\x16\xb5\x95\x75\xc9\x4d\x4d\x07\x39\x4b\x37\xb2\x22\xe3\x46\xf7\x70\xe3\x9e\xc3\xfe\x34\x1c\x07\x8d\x42\x5b\xdd\x72\x61\x93\xdb\x4d\xda\xc4\xf0\xf0\xb1\x88\xa1\xf8\x14\x42\xd5\x44\x83\xda\x26\xd9\xde\x0d\xec\xca\x6f\xe4\xab\x26\x77\x90\x51\x80\xe3\x0e\xdf\xaa\xf1\x67\xad\x1d\xb8\x8d\xd0\x6f\x9f\xda\x51\x22\xc2\x58\xbf\x0b\xe0\xc5\xf8\x32\x60\xbb\x8a\x6e\x7a\x2e\x4f\x7d\x6e\x7b\xd1\xfd\x59\xb5\x4d\xfe\x40\xdb\xb2\xa3\x87\xea\xf0\xa9\x1d\x18\x0e\x1a\x85\xde\x1a\x42\xc7\xb0\xd8\x6e\xfd\x8b\x1d\x55\xda\x97\xdd\xa7\x92\x0b\xb6\xd2\x1b\xca\x4b\x98\x19\x4d\xe7\x6b\xe6\xd1\xe5\x33\xcb\x90\x75\xe1\x38\x68\x14\xd4\x29\xee\xe8\xf5\x9a\xac\x07\x2a\xde\xa3\x62\xe7\x9f\xa6\x7d\xb7\x31\x7d\xb9\xe9\x4b\x53\x96\xb8\x49\x48\x49\xdd\x5d\x3e\xe5\xf1\xc3\xbf\xd5\xc0\x70\xd0\x28\x54\x09\x1f\xf8\xd4\xda\xa8\xf9\xd2\x7d\xa3\xe9\xda\xd5\x14\xd4\x9a\x4a\x29\xc7\x64\x6e\xfe\xe4\x5b\xa0\xf6\x8d\x52\x04\xb1\x72\xd8\x7f\x80\xe3\xa0\x51\xc0\xfd\x92\xb1\xb2\x91\x58\x75\xa1\xaf\x58\x84\x67\x32\x6a\xfb\xe1\x9b\xea\x8c\xc1\x87\x92\xd6\x57\x28\x3e\xf0\x50\xf1\x24\x60\x3e\x43\x46\x01\x8e\x3b\x9c\x15\x0c\xff\x28\x0a\x70\x9b\xd3\xdf\x45\x41\x29\xe0\x60\x91\x96\x80\x94\x27\x34\x5d\x58\xd4\x7c\x62\x96\x97\x5d\xd9\xec\xb9\x62\xce\xda\x10\x15\xed\xe9\xd5\xf6\xa7\xe6\x74\xc8\x21\x80\xe3\xa0\x51\x90\x3e\x50\x21\x04\x94\x6c\x1e\x54\x4e\xdb\xbe\x6c\xc4\xd9\x58\xf5\xc1\x63\x62\x31\xe2\x3d\x4b\x60\x3c\x34\x86\x15\x5e\x7a\xe7\xf0\xcf\x6b\x70\xdc\xb1\x5f\xec\xc6\x86\x69\xc5\x4d\x60\x6b\x63\xff\x14\x8c\xca\x7b\xc8\x7a\xd6\x66\x0b\xf7\x51\xdd\xe3\x9d\xd4\xb3\x8e\xeb\x16\x7b\xf3\x77\x95\x0e\x7b\xf4\x30\x1c\x34\x0a\x63\xe3\x92\x35\x39\x66\x4b\x81\xc3\x65\xa4\xa7\x11\x7e\x15\x9f\x5d\x1d\x8d\x3c\xeb\x1c\x7b\x4f\xde\x0b\xe4\x9b\x4f\x7b\xb9\x7a\xf8\xb3\x52\x38\x0e\x1a\x05\x4e\x72\x7d\xfa\xe6\x3b\x2b\xda\x5f\x78\xcf\x75\xaf\xe6\x6e\x97\xc5\x66\x93\xfb\xfa\x22\x9a\x95\xbb\x22\xe6\x47\xae\x3b\x38\xae\x22\xa3\x00\xc7\x1d\xce\x0a\x7f\xd6\xda\x81\x3b\xe5\xff\xbe\xb5\x33\x3d\xb9\xd7\x45\x1a\x4f\xeb\x2e\xf3\x58\x56\xb6\xc0\xc6\x6d\x3e\xf8\x14\xdb\x7a\xa4\x90\x78\xf3\x6e\x4e\x7d\xf7\x30\x5a\x2d\x21\xb2\x4d\x02\xc7\x1d\x6f\xed\x9c\x78\xe7\x1c\xb6\xbb\x1b\x9a\x6c\xb0\x9b\x5a\x48\xc4\xd2\x16\xca\x56\x11\xc8\x22\xbe\x33\x1b\xc8\x48\x36\x3c\xc3\xb5\x7c\xc1\x17\x59\x19\x8e\x3b\xde\xda\x69\x30\x4f\xea\x5b\x88\x6e\x1c\xa4\x96\x41\xc4\x88\x4d\x85\x87\x7d\xdf\x20\x0e\x2c\x2f\x67\xfd\xec\x7a\x0f\xdf\x5b\xa5\x30\x3a\x18\x59\x19\x8e\x3b\x3e\x1a\x5e\x82\x31\xd9\xde\xc2\x51\x98\xe6\x3f\x24\x4e\x66\xbf\x53\xda\x1d\x1d\x4a\xfc\xd2\x4e\x64\x3d\xe2\x68\x1e\x95\xbc\xfa\xdd\xa7\x00\xd9\xda\x81\xe3\xfe\x79\x1e\x88\xee\x68\x6b\x07\x4e\x3d\x70\xb4\xb5\xa3\x3d\x9c\x8d\x6e\x72\xe6\xea\xbb\xd0\x89\x6f\x2f\x7c\x4d\x71\x3e\x9c\xce\x33\x8f\x89\x54\xe7\xdd\x90\x1e\x7f\x40\xfb\x60\xb0\xfe\xdc\x11\x54\x37\xc9\xf7\x5c\x0b\xb6\xa9\x22\x35\x8d\x58\x69\x98\x4f\xec\x8d\xf7\xb3\x7b\x31\xb7\xa7\x76\x85\xda\x40\x7d\xc6\xed\x2c\x92\x73\xff\x6b\xad\x1d\xb8\x5b\x3b\xfa\xae\x1d\x68\x6b\x87\x93\xc1\xce\x48\x4f\x7b\x18\x33\xd5\x9e\xab\xa7\x52\xc8\x8a\x65\x49\x99\x24\xec\x3c\xfb\x56\xe6\x8b\xee\xb4\x33\xee\x36\x17\x6c\xfe\x46\x6b\xa7\xfe\x58\x6b\xc7\xc1\xfe\x2c\xb3\x3a\xf3\xdd\x99\x77\x0d\x7b\xce\xbc\x56\x85\x4f\x4e\x58\xd1\x4b\x32\x9e\x19\xb8\x88\xff\x7e\x54\x5c\xaf\x7a\x00\xe3\xaf\x3c\x50\x72\xbc\xb5\x33\x1e\xee\xe6\x7b\xc1\xed\x63\x61\xce\xdb\xd6\x89\xa7\x42\x61\x9f\xd2\xd1\x55\xcd\x1e\xa4\xbe\x1f\x49\x6b\xcd\xb1\x7d\x9c\x66\xae\xf5\x57\x1e\x9f\x39\xde\xda\xb9\x5b\x18\x7f\x41\x35\x1c\xdb\x96\x28\x5b\x46\x6d\xe9\x89\x4c\x6e\x9d\x84\x61\xb7\x69\x14\x6b\xd5\xca\xa3\xd5\xb7\x5c\xca\x0c\x04\x7f\xe5\x6e\x8f\xb7\x76\x5e\x0f\x4a\x12\x18\x1a\xa3\x5b\x78\x45\x39\x79\x9c\xc9\x9b\x21\xc7\xba\x27\x5f\xad\xf7\x72\xdb\x92\x44\xe4\x4b\xd5\x33\x9b\xab\x3f\xff\xca\xdd\x1e\x6f\xed\x4c\x45\xd5\x75\xf3\x09\x67\x6f\xae\xa0\xdb\x35\x79\x60\x63\x4e\x6a\xe7\xf0\x90\xe8\xcc\x46\x97\x53\x86\x7e\x66\xf5\x5d\x94\xd5\xfc\x6b\xad\x1d\xb8\xe8\xfe\x6e\x99\x7e\xc1\x67\x2c\xa6\x79\xb3\x3b\x5c\xf0\x95\xd9\x3c\xa5\x94\x23\xfa\xcf\xa6\x5b\xd9\xa9\xfc\x05\x73\x7b\xb6\x8a\x94\x66\xdc\x27\x0f\xff\xce\x09\xc7\x1d\x7b\xc5\xdc\x32\xcf\xcd\x1d\x41\xb3\x57\x77\x6b\x6b\x3e\x93\x8b\x28\x1b\xd4\x18\xf3\xcf\x9e\x54\xb4\x75\x08\x14\x6e\x22\x96\x16\x15\x39\x7c\x08\x16\x8e\x83\x2e\xd3\xb7\x5b\x8d\xb4\xf6\xae\xdd\x7f\x45\x3e\x80\x9e\xad\x4c\xf2\xca\xd3\xdb\xa8\xa2\x64\xa0\x4d\xd9\x14\x71\x9a\x30\x27\x6d\x68\x5d\x0d\x59\x17\x8e\x83\x2e\xd3\xd4\x37\x12\x8a\x7e\xb4\x04\xe9\x06\xbc\x6f\x8e\x20\xba\xe6\xbc\x55\xb5\x79\x42\xec\xcc\x48\xbf\xb8\xa9\xe1\x8f\x0b\xb6\xd5\xf2\x08\x64\x5d\x38\x0e\x3a\x0e\x01\xa6\x51\xcf\x10\x09\xe5\x01\xd4\x36\x2d\x6a\x33\xbb\x93\x9d\x74\xc1\x98\xb7\x48\xa7\xf5\x89\xb3\xfa\xfb\x79\x94\x13\xe8\xf1\x90\xad\x1d\x38\xee\xf0\x5d\x3b\x7f\xd2\xda\x81\x9b\x4d\x7e\x17\x84\x90\x7c\xe1\x07\xf7\x6f\x3e\x58\x98\x9a\xa9\xf9\x11\x87\x9f\x70\xef\xaa\xdb\xb2\x97\x29\x51\xab\x5c\x80\x2d\xc5\xa9\xcb\x4d\x83\x87\xef\xae\x81\xe3\xa0\x03\x10\x6f\xeb\x63\x50\x7c\xd2\xea\x29\xbe\x5e\xd0\x3c\x41\x58\x6d\xdd\xba\x93\xd8\x95\xb3\x3f\x66\x4b\xd1\xee\xe0\xf6\xe1\x6b\xc9\x1e\xd6\x85\xe3\xa0\x41\x88\xde\x13\xf8\x2e\xfe\x2d\xbe\xcb\xe3\x95\x19\xcd\x40\xe7\xc4\x30\x05\x4f\xbc\x24\x2f\x1f\x11\xdd\x3d\x85\x33\xd4\x43\x6c\xf1\xc1\xc8\xba\x70\x1c\x34\x08\xc9\xde\x41\x72\xed\x91\x56\x1a\x43\x9e\xf4\xef\x89\x32\x17\xa8\x32\xed\x6a\x4c\xa9\x6b\xa4\x82\x62\xe9\xbb\x23\x9f\x9d\xa5\x3d\xdc\x07\xc2\x71\xd0\x71\xa0\xac\xec\x3d\xe9\x33\xcb\x1f\x00\x6a\x75\xf7\x60\xbb\xea\x47\x10\x13\x07\x54\xbf\xb7\xaa\xa7\x50\x4a\xd7\xa6\x31\x9f\x3c\x19\x8d\x6c\xed\xc0\x71\x87\xef\xda\xf9\xa3\xd6\x0e\xdc\x04\xff\xbb\x24\x00\xdf\xec\x86\x6b\x70\xc5\x49\x1e\xfd\xf4\xe4\x28\x13\xa6\x1c\xcd\xea\xe5\x11\x62\xd7\xf3\x31\x19\xfa\x24\x78\xa7\xee\x96\x81\x19\x72\x04\xe0\x38\xe8\x08\x34\xbc\x13\xa5\x32\x70\xbd\xe9\x61\x48\x96\x3a\x73\x45\x54\x4b\x21\xe1\xed\xb5\x6f\xfd\x3f\x7c\xa4\x85\x6e\x2f\x2c\x62\x8b\x38\x3b\x1e\xbe\xad\x03\x86\x83\x26\xe1\x5e\x47\x43\x11\x82\x15\x3b\xf3\x92\xb0\x60\x7d\x44\x11\xb5\xe7\xea\xe0\x03\x52\xeb\xd1\x7c\x91\xd4\x96\xb9\x89\x49\xdd\x0b\x87\xd7\x0b\xc7\x41\x93\xe0\xfa\xa0\xf4\x84\xf2\x0b\xc3\x37\xa3\xa9\xda\x82\x97\xeb\x9b\xde\xab\x34\x8a\x39\x5a\x87\xf2\x49\xde\x38\x7f\x9e\x6a\xa7\x8b\xb3\xfa\xf0\xad\x9e\x30\x1c\x74\x1c\x48\x87\x6a\x15\xcb\xcf\x9b\x2d\xb4\x57\x39\x12\x0f\x33\xcb\x75\xc5\x56\xdf\xf1\x9b\x4a\xb2\x64\x74\xa2\xc1\xb0\xd5\x9a\x2f\x49\x45\xee\xdc\xe1\xb8\xc3\xb7\x6a\xfc\x59\x6b\x07\x6e\xd1\xfd\x5d\x14\x06\xfa\x05\xd0\x08\x82\x7f\x8c\xc4\xda\x2d\xa7\xf2\x0d\xfb\x24\xc7\xe9\xab\xee\x1b\x4e\xa9\xcd\x25\x10\x71\xb2\x3a\x89\xb2\x1e\x3e\xd3\x09\xc7\x41\x87\xc0\x1d\x7d\x7d\xe9\x3b\x46\x2a\x65\xc0\x22\x96\x20\xeb\x16\xbf\x9a\x40\xe7\x28\xc5\x12\xe7\xc3\x27\xb6\x94\x4b\x76\x0b\xd8\x37\xb0\x90\x75\xe1\x38\x68\x14\x8c\x4e\xd1\xe9\xe1\x47\xbd\xbb\x4c\xcd\xc6\x47\xb8\xaf\xe2\xeb\x5a\xe5\xf2\x3c\x45\x6b\xd5\x69\x34\x2d\xd0\x13\xa4\x14\x27\x3c\xfc\xcd\x1f\x1c\x07\x8d\x82\xf4\xe0\xc1\x52\xeb\xf3\xf4\x1e\xe9\x6b\x92\x2f\x4f\x5f\x50\x56\xd7\xab\xdc\x58\x41\xff\xc1\xe5\x9d\x42\xfd\x5c\x0d\x53\x91\xf7\x70\xb2\x81\xe3\xa0\xe3\x90\x5b\xa7\x89\xa9\x15\xdd\xa0\x62\xc1\x2e\x5d\x41\xc1\xb4\x30\x6b\x43\x1d\x59\x59\x6e\x38\x62\x40\x97\xb4\xe2\xbb\x44\xe1\x3a\x8c\x8c\x02\x1c\x77\xf8\x56\x8d\x3f\x6b\xed\xc0\x6d\x84\x7e\x17\x05\xe1\x8f\xd3\x78\xf5\xdc\x8b\x88\x95\x5b\x9c\x7c\xdf\xd8\x92\x05\xc4\x3a\xfb\x5a\x4f\x34\x26\xb7\xdd\xa1\x7a\x52\x8b\x67\x9a\x75\xd8\xe8\x84\xe3\xa0\x43\xf0\x8d\xf8\x22\x33\xc3\xc7\x13\xdb\x9a\xfd\x95\xfd\xc2\xd1\x45\x78\xaa\x60\x02\xed\xed\x73\x73\xaf\x9a\xd7\x8c\x92\xa5\xc5\x0e\xe4\x91\x75\xe1\x38\x68\x14\x64\xad\xf2\xee\xda\xe2\x44\x9d\x58\xeb\xc3\xee\xfe\xa2\x6e\x6c\xcc\xdf\x12\xdd\xa1\xf7\xda\x50\x7e\x1b\xf7\x5d\x43\xb4\x68\xd3\xc2\xe1\x2f\xcd\x61\xb8\x63\x4f\xed\x6c\x62\x4f\xe7\xa4\x15\x88\x7c\x45\x6b\xbc\xd2\x25\xbb\x78\x1e\x7b\xec\xd1\x77\xb1\xfd\x44\x9c\xb8\x51\x8e\xf4\xbd\x14\xf5\xc3\x37\x80\xc3\x71\xc7\x1e\x64\xdb\x8c\x94\x5d\x97\x97\x7a\xa0\x67\x99\x9c\x2e\x78\x77\xbd\xb2\xcd\x2e\x96\x93\xe4\x83\xfe\xae\xf8\x2c\xde\xf7\x64\xee\xaf\x87\xaf\x5d\x82\xe3\x0e\x67\x85\x3f\x6b\xed\xc0\x6d\x4e\x7f\x17\x85\x48\x9d\x66\x8f\x89\x29\xa6\x5d\x57\xc0\xfc\x7d\x48\x6d\x9a\xa8\xbb\x50\x05\x5d\x24\x45\xe2\x5b\x62\x62\x17\xe6\x8a\x2c\xdd\x26\xe4\x10\xc0\x71\xd0\x21\xd0\xc6\x02\x06\xcb\xea\x5c\x58\x11\x22\xb5\x97\x59\x75\xeb\x44\xfb\x7c\xe9\x33\x75\xf7\x6e\xac\xbc\x70\xd0\xe3\x0e\xd8\x2e\x3b\x7c\xc9\x1b\x1c\x07\x8d\x02\x6f\x05\xcf\xdd\xfc\x4f\x1f\xbd\xd3\xb7\x59\x9e\x50\x4f\x36\xb1\xba\x68\x93\x17\xe8\x9a\x76\x9f\x42\x73\xd7\x78\xc1\xb5\x7e\xf6\xf0\x37\x7f\x70\x1c\x34\x0a\x9c\xac\x9e\x84\x9a\xa9\xe2\x94\x76\xfd\xc5\xea\xaf\x9d\x4a\x34\xc4\x62\x12\x30\x72\xdd\xa8\x6e\xd9\x33\xfd\x38\x6b\x6f\x2c\x2b\x83\xac\x0b\xc7\x41\xc7\x61\xea\x9c\xa3\xed\xae\xe0\x0d\x49\x37\x4d\x4d\x8a\x57\x39\x83\xf4\x14\x31\x57\x32\x77\x47\xb1\x7a\xc4\xdf\x72\xa2\xab\xdc\xca\xce\x45\x46\x01\x8e\x3b\x9c\x15\xfe\xac\xb5\x03\x77\xca\xff\x7d\x6b\x67\x6a\xa8\xe5\x2e\x8e\x74\xcc\x26\x6b\x29\xdf\xd5\xb4\xec\x5b\x89\xe5\xf5\xc9\x36\x63\x58\x5e\xbc\x71\x17\xf8\x9f\xa3\xaf\xe1\xa4\x1e\xbe\xb7\x06\x86\x3b\xde\xda\xa9\x24\xae\xe5\x58\x37\x98\xf7\x51\x45\x98\x45\xd5\x92\xc9\xae\xd7\xe4\xdd\xa2\xd1\x7a\xf9\x40\xcb\x7a\x45\x4f\x8a\x36\x85\xa8\x06\x59\x19\x8e\x3b\xde\xda\xa9\x48\x5d\x5b\xc4\x7d\x2b\x9c\x72\xfe\xd1\x3b\x85\x3d\xe3\xa1\xbb\xbe\x6d\xa3\xaa\x2f\x12\x96\x99\xd1\x22\x4a\x40\x17\xdd\xc7\x3c\x87\x4f\x1a\xc1\x70\xbe\x52\x27\xa0\x8d\x2e\xdc\x76\x1e\xd9\x41\xdf\xd9\xcd\x7d\x5c\x02\x53\x11\x33\x52\xb7\x8a\xd1\xc9\xd6\x5e\x3b\x9b\x77\xed\x3c\x9c\x75\x1c\xf7\x4a\x90\xad\x1d\x38\xee\x9f\xd6\x0e\xfa\xd1\xd6\x0e\x9c\x2a\xf2\x68\x6b\xa7\x6b\x12\x3d\xdd\x1d\x91\xd4\x18\xe4\x79\xe0\x92\x97\x9a\x7e\x26\xb2\xd8\xc2\x6c\x5b\xe6\x7c\xed\xd8\x54\xd2\x2a\xd9\x4d\x95\x85\x23\xa8\xbc\x85\x7e\x8b\x72\xcb\x82\x43\xab\x57\xf9\x47\xe2\x02\x4a\xed\x9b\x37\xbf\x51\xf2\x9c\x18\x1e\x7d\x4a\x15\xe8\xc2\xf9\x16\x57\xef\x7f\xad\xb5\x03\x77\x6b\x47\xdf\xb5\x03\x6d\xed\x60\x9c\x3f\x0b\x96\xac\x85\xd7\xb3\xaa\x39\x8a\x9f\x90\xed\xa0\xba\xba\x5d\x56\x63\xb3\x58\x7d\x02\x2f\x50\x27\x8d\xe6\xdd\x99\xbe\xbf\xd1\xda\x41\x53\x82\x1e\xff\x6d\xee\xa8\x98\xe1\xd3\xfb\x1a\xaf\xab\xd1\xeb\x7d\xa7\x7f\x71\xa9\xa6\x66\x56\x86\xda\x37\x68\xc5\x7d\xf4\xe9\xee\xf8\x6b\x53\xba\xbf\xf2\x40\xc9\xf1\xd6\xce\xcb\x45\xec\xe2\x92\xd4\x1d\x81\xf5\x0b\xab\xf1\xe3\xaf\x05\x3c\x05\x8c\xae\x45\x9c\x3c\x3d\xc0\xf8\xec\xc4\xc4\x25\xfa\x11\x4e\x9c\xbf\xf2\xf8\x8c\xc6\xb1\x8f\x0d\x32\x49\xc2\xf8\xf2\x78\x3d\x6c\x6e\x83\xc2\x72\xf9\x1a\x6e\x1c\xfb\xd3\x93\x6a\x6f\xce\x28\x13\xbf\x08\xfd\x14\xd6\x11\x1f\xbc\xfa\x57\xee\xf6\x78\x6b\x47\x03\x57\xec\xec\x87\x38\xc4\x6a\xdd\x29\xc2\x2f\xe9\x9d\xc9\x1f\x7c\x2f\x1a\x23\xa2\xf3\x65\xa3\xda\xce\x2f\xdb\x97\xf0\x7b\x28\xff\x95\xbb\x75\x3b\xf6\xb1\x67\x97\x67\xf0\xbb\xaf\xb6\x24\x59\x35\x27\x7f\x18\x89\x49\xb8\x15\xe8\x41\xdd\x65\x7f\xb6\xb0\x54\x52\xb6\x8c\xe2\xf5\xd9\x0b\xf4\x7f\xad\xb5\x03\x17\xdd\xdf\xb6\x76\xfc\x6b\x7f\xbc\x69\xbd\xbb\x34\xbc\xdf\x5e\x20\x8d\x2b\xb2\xab\x60\x93\xd5\x2f\x27\xff\x54\xc1\xcd\x17\x10\x1e\x57\x50\x15\x3c\x6c\xed\xc0\x70\xd0\xe5\xe9\xde\x49\xac\x4b\x0b\xb4\x1e\x67\x4c\x39\xd7\x9f\x3b\xd6\x5f\x0c\xeb\xb0\xd9\x89\x24\xfa\x7c\x9f\x0f\x37\x01\x34\xd7\x92\x7b\xee\x77\x78\xde\x82\xe1\xa0\xcb\x74\xc3\x23\xf2\x2f\x38\x1c\x6a\x3b\x65\x3c\xad\x4a\xfd\x23\xa1\x0a\x97\xbe\xa9\x90\x55\x5d\x44\xe8\x79\x3c\x64\x31\x25\x6d\x13\x3f\x3c\x6c\xc0\x71\xd0\x65\x9a\x60\x33\x68\xf2\xb1\x6b\x7a\xdf\xa4\x12\xad\x93\x4a\x6d\x9a\x8a\xe9\xbb\xe4\xd9\x75\xe3\x24\x23\x45\x51\x0f\xfc\x61\x76\xaf\x1b\xc8\xba\x70\x9c\xaf\x04\xda\x89\xa3\x75\x57\x22\x65\x5f\x8a\x7d\x5b\x37\xce\xbf\x17\xae\xbb\xd3\xdc\xb8\x6c\xb0\x4b\xd5\xf5\x51\xec\x56\xfd\xff\xc7\xdc\x7b\xc7\x73\x19\xfd\xff\xff\x66\x56\xc8\xce\x0e\xc9\x48\x09\x11\x49\x76\x64\x84\xec\xbd\x53\xd9\x94\x95\xbd\xc9\xc8\x8c\xac\x8c\x8c\x6c\x65\x47\xf6\xca\x1e\xd9\x9b\xca\x8e\x48\x66\xbf\xdb\xe7\xfb\xb9\xbd\xae\x6f\xef\xeb\xe5\xf7\x3d\xfe\xf0\xc7\xfb\xff\xfb\xed\xc9\x75\xae\xc7\xeb\x9c\xf3\x78\x5e\xe7\xf9\x3c\x97\xd9\x31\x2d\x15\x03\x6e\xbf\x46\xa4\x76\x40\x1c\xd4\x6b\xe7\x34\xa9\x1d\xd0\x6c\x72\x92\x10\x56\xe6\x50\x55\xa6\xb3\x9f\x0d\xba\xb1\xbc\x17\x92\xb5\xef\xd8\xd6\xb0\x2b\x7b\x4c\x23\x11\xc8\x61\x15\x25\x84\xe3\xde\xb9\x02\x7d\x32\x03\x71\x70\x21\x64\xe9\x25\x76\x4f\x7a\xe3\x26\xe1\x4b\x33\xac\x3f\x1e\x43\x6d\xd3\x5e\x10\x60\x92\x46\xdf\xf0\x47\x8b\xc4\x6a\xab\x22\xd1\x87\xb6\xc2\x20\x0e\x2e\x04\x7f\xfe\xbb\xc7\xb6\x2a\x7d\x45\x0b\x1c\xb4\x13\xf4\xa4\x53\x85\x5d\xa4\x8b\x5a\x0b\x4e\xdf\xdf\x91\x15\x19\x62\xa9\x34\xa5\x1d\x20\xe2\x82\x38\xb8\x10\xda\x97\xfb\x4d\x02\x62\xd6\xb5\xee\xdd\x61\xc8\x65\x95\xb3\xeb\x3a\xef\x5f\xc5\xbd\x18\xc6\x9d\xee\xd7\x40\x5c\x7e\x20\xc0\x7d\x15\x11\x17\xc4\xc1\x85\x70\x81\xa0\x98\x06\x5d\xb2\x2b\xd0\x8a\x4b\xc1\x09\xe5\xdb\xcf\x23\xa3\x25\xfe\xcb\x1f\xbe\x6a\xb8\xa3\xbc\xbe\x33\x6f\x15\x68\x44\x8f\x48\xed\x80\x38\xa8\xd7\x8e\xfc\x69\x76\xee\xa0\x09\xfe\x24\x25\xe0\x53\xac\xe5\xa6\x67\xdb\x66\x28\xd6\x68\x14\x55\xa3\x4f\xed\x6f\x37\x8c\xad\xbf\x4a\xba\x1e\xfd\x43\x97\xaa\x58\x6c\xc5\x09\xda\x09\x83\x38\xb8\x12\xe4\xf6\xdf\x54\x26\x8c\x6d\x35\xe9\x24\x6d\xe4\x3e\xfd\xc1\xcf\xf8\xd2\xd0\xf8\x5b\x99\x5a\x3d\xe1\x41\xc0\xba\x89\x18\x5d\x2b\x01\x22\x2e\x88\x43\x3a\xc8\xc7\x6f\xef\xea\x94\x25\x1d\xfc\x4d\x4b\xb8\x86\xde\x5b\x75\x3b\xb4\xe3\x86\x58\x69\x14\x0f\xff\x84\xff\x83\x9b\x44\x4f\xca\xa0\xef\xfe\x20\x0e\xae\x84\x28\xed\xf5\xa6\x2f\xe1\x4b\xe4\xb2\x33\xf7\x1c\xf6\x96\xfd\x3e\x11\x2e\x49\x88\x5c\xee\xcb\x08\xe4\x17\xcc\x3f\x4c\xcb\xb5\x86\x4e\x03\x81\x38\xb8\x12\x7e\xdc\x31\xa5\x7a\x3d\xd8\xb6\xf3\xd2\x21\xaa\xd5\x65\x86\x2b\xdc\x8f\xf9\xa1\xa5\xac\x87\x42\xcd\x1c\x8b\xc7\xe2\xd6\x98\x25\x11\x62\xe7\x0e\xe2\xa0\xae\x1a\xa7\x4b\xed\x80\x16\xdd\x93\xa4\xa0\x4d\x36\x72\x3f\x9e\x36\x8f\xda\x2d\x91\xd2\x6b\x71\x4e\x3f\x78\xf6\x87\xf4\x7a\x9c\x43\x5e\xd2\x04\x53\x62\x4c\xe6\xa3\x9d\x26\xc4\x10\x80\x38\xb8\x14\x7a\x77\x54\xdf\xfd\x6d\x4c\xbc\xb1\xe1\xd1\xf0\xe2\x43\x4d\x13\xbf\x15\x56\x26\x61\xc2\x56\x08\x1d\x87\xc4\xad\xb7\x19\xb3\x17\x4d\x11\x71\x41\x1c\x5c\x0a\xdb\x22\xf6\x54\xba\x2b\x44\x4f\xf6\x2f\xbc\x53\x53\x70\x75\x22\x9e\x2f\xa2\x3e\x5e\xd8\x57\x91\x53\xa3\x7f\xf0\xa9\x83\x6e\x0b\x6a\x8f\x04\xe2\x90\x3a\x5f\xcf\xe1\xf5\x71\xbd\x31\xac\x73\x9e\x50\xfe\x2a\xc7\x9d\xd3\xf3\xae\xfc\x56\xf0\x43\x91\xc1\x72\x16\xeb\x4b\x6d\xcd\x05\x69\x50\x75\x0f\x88\x83\x4b\x81\x4a\x59\xfb\xc7\x3b\xfc\x7b\x2f\xfc\x58\x7e\xa6\x0a\x49\xd0\x48\xe2\x28\x5c\x8b\xa0\xb4\xba\x4a\x7c\x64\xc6\xc0\x6f\x42\xf9\xda\x07\x21\x05\x10\x07\x75\xd5\x50\x39\x95\x14\x40\x1b\xa1\x93\xa4\xe0\xa8\x57\x46\x6b\xb8\xbe\x17\xc0\xbb\x64\xc4\x74\xe7\x9d\xe1\xfa\xa4\x9d\x27\xb3\x82\xa0\xbd\x06\x6b\xb3\x91\x26\x3e\x9d\x0c\x74\x0a\x06\xc4\x21\xcd\x0a\x86\x11\xd4\xdd\xb2\x06\xfb\x6c\xf3\x11\x1d\x26\x01\xfe\x18\x09\xf3\xd1\x37\xbe\xde\xb0\xc2\xfb\xba\xe1\x9d\xb8\x57\x5f\x00\xa5\x8c\x40\x1c\x5c\x0a\x9a\x5f\x83\xe8\x65\x32\x15\x9f\xe0\x47\xf1\xd1\xfd\x8e\xc3\xe3\x7f\xbd\xd5\xf5\x27\xdd\x8e\x06\x5d\x84\xe2\x9e\x27\x4f\xc7\x9b\x5d\x44\x5c\x10\x07\x97\x42\xb9\x8d\x72\x4d\x9a\x5c\x8a\x20\x29\xd7\xf9\xbf\xec\xa2\x3d\xf2\x9f\x8d\x83\xee\x88\xdf\x26\x76\x09\xc2\x9c\x65\xbe\xd3\xf8\x09\x2a\x04\x06\x71\x70\x29\x54\xf3\x31\xb7\xe9\xbf\xa8\x14\xe6\xd6\xe1\x9e\x1a\x69\xf8\x65\xa0\xa5\x3a\x17\x2c\xb9\x2c\x61\x8a\x1b\xde\xa8\x14\xc7\xca\x81\x81\x90\x02\x88\x83\x66\x85\xd3\xa5\x76\x40\x9b\xd3\x13\x6f\xc8\xda\xbc\x54\xc6\x6d\x5d\x53\x77\xf8\x43\xa2\x6b\x23\x0d\x85\x13\x2b\xae\xe6\x6f\xe0\x31\xaf\x71\xe0\x8e\x37\xc3\x0b\xd5\x06\xe8\x20\x2e\x88\x83\x4b\x41\x3f\x42\xf1\x07\x9f\xc0\x91\xf7\x4e\x74\xfa\xe4\x32\x2d\x91\x3a\xcf\x82\x2c\x9f\xe9\xd0\x8b\x74\x2c\xa5\x50\xb6\xbd\x12\x59\x43\x44\x5c\x10\x07\x97\x02\xda\xb4\xf6\xcb\xad\x78\x43\xff\x73\x2f\x5a\x6e\x5a\xa2\x75\x4e\x9a\x5e\x18\xc7\x43\x23\x0c\xc0\xea\xe5\x97\x6e\xdb\xed\x35\x21\x43\xc4\x05\x71\x70\x29\x68\x4b\xbd\x9b\x58\xd0\xb6\xfc\xbe\xd2\xfc\xed\xd6\xcd\x1b\x8c\x7f\x2d\xd8\x70\xf8\xad\x78\x62\x32\x42\x9f\x45\x1d\x2a\x26\x4c\x41\x12\x03\x71\x70\x29\x7c\xa6\xe8\xf9\x5c\xcf\xd3\x4e\xda\xc9\xd0\xff\x6b\xfd\xd2\x40\x4b\x59\x31\xa7\xfd\x1e\xbd\x55\xf1\xc5\x36\xaa\x25\x4b\x87\x9b\x0d\x08\x29\x80\x38\x68\x56\x78\x71\xaa\xd4\x0e\xc8\xe5\x9f\x9c\xda\xa9\x12\xa8\xb1\x4a\x31\xfe\xb9\xf7\x7a\xe3\x8e\x2d\x86\xfe\xf5\xb7\xf7\x42\xf3\xf6\xd4\xe3\x76\x3e\xfc\x74\x15\xfa\xc6\x98\x4a\x94\x8c\x48\x93\x80\x38\xe4\xd4\xce\x66\x81\x67\x7d\x86\x6d\x2a\x9a\x07\xf3\xc3\xc5\xb7\xb8\xcb\xa5\x34\x4c\x66\xcb\x84\x32\xf8\x45\x8c\x11\xa1\x2d\x94\x5c\x91\x06\x88\xc8\x20\x0e\x39\xb5\xf3\x06\x95\xc1\xc3\x7f\x29\xad\x33\xea\x45\x5a\x16\x2b\x73\xe7\xc5\x00\xaa\x8b\x54\xfb\x82\x98\x86\x98\x3d\xdf\xe4\xdd\x8a\x14\x59\x10\x91\x41\xdc\xff\x76\xc4\xf9\x37\xf2\xce\x83\xf4\x5b\xcf\x94\x7a\x7a\x34\x86\xc4\xf7\xd1\x8e\x2c\x1c\xd1\x9f\x4c\x5a\x76\x3b\xad\xb4\x86\x5a\x0f\x37\xd8\xec\x4f\x8a\x21\x52\x3b\x20\xce\x47\x02\x05\xe5\xd2\x7f\x14\x64\x61\xcb\x95\xe3\x2f\xd5\x0b\x2e\xc5\x7d\x5f\xd0\x44\x63\xc2\xcd\xc0\xfc\x1c\xc2\xc7\x5d\xdb\xf6\x81\x7a\x91\x24\xe3\x7e\x2f\x45\xce\xbf\xa9\x9d\xf7\xf5\xa6\x6e\xc5\x7c\xa4\x5c\xa9\xd7\xc6\x53\xa9\x88\xfb\xaf\x35\x12\xa8\xcf\x26\xa0\x19\x12\xe6\xac\xbb\x8b\x09\x3b\x28\xf3\xfe\x83\x76\xe5\x54\xf2\xc6\x68\x9b\x87\x6a\xb7\xd8\x61\xe0\x94\x96\x1b\x3c\xfc\xfc\xa4\x54\xa3\x31\xac\x0b\xb3\xbe\xa0\xe5\x8d\xce\x4e\xee\x7f\x5b\x6a\x07\xf4\x68\xff\xf6\xda\x81\xa7\x76\xc2\x1f\x92\x85\x2c\x93\xcb\xa9\xd5\x2c\x6f\x6b\x68\x75\x26\xd1\x89\xea\xcb\xb2\xf3\xe4\xea\xdf\xd7\xc9\x90\x60\xea\x62\xdb\xc9\x3d\x8b\xd4\x8e\x08\x52\x6a\x47\x54\xe5\x83\xdf\x20\x16\x93\xe2\xe8\xef\x34\xba\xf8\x21\x19\x1a\x3b\xa1\x7c\xc5\xdb\xce\x8d\x85\xd7\x1f\x7e\xe9\xb2\xa9\x7e\xc0\x7d\x26\x07\x4a\x90\x53\x3b\x5a\xb2\x96\xd8\x8f\x77\x34\x13\x49\xbd\xe6\x43\x74\x75\x32\x6e\x98\x18\xe1\x8b\x88\x57\x14\x3e\x1b\xfb\xfc\x3b\x5b\xbb\x45\xe9\xda\x99\x1c\x9f\x41\x4e\xed\xdc\xb7\x11\xaa\x8c\x74\xa7\x30\xf7\x22\x1e\x50\x7b\xd9\x41\x1c\x80\x59\x24\xcf\x24\xc9\x1e\x36\xba\x56\x60\xfa\x97\x14\xbb\xc7\xe9\x4c\x9e\x16\x39\xb5\xe3\xe1\xb8\x82\xf1\xc6\x10\xad\xce\x95\xee\x35\x95\xd6\x4a\xb9\x0e\x6e\x1d\xed\xde\xbc\x96\xa7\x85\xb8\xc1\xc5\x21\xfe\x4e\xa1\xed\x33\x79\x5a\xe4\xd4\xce\x05\xac\x30\x95\x38\xff\x46\x89\xb2\xfb\xb5\xd2\x89\x5f\xb2\x1f\x0c\x62\x5c\x13\x60\xc6\xae\x2f\x24\x4f\xad\xb3\x9d\x26\x53\x92\x3e\xb3\xd4\x0e\x48\xba\x27\x2d\xd3\x9b\x93\xea\xbc\xd9\x66\x0a\x75\x3e\x9b\x7e\xbb\xfb\x22\x84\x24\x95\x5f\x51\xb4\x9d\xb7\xf7\x3f\xde\xa3\xbd\x70\xdc\x18\xfc\xf5\x09\x62\x79\x02\x71\xf0\x65\x5a\x0d\x65\x79\xd6\xea\xd0\xfd\x20\x7d\xf6\xa5\x5a\xdb\xfc\x13\x5c\x1a\x06\xe2\xe0\xbb\xe5\x2f\xed\xee\x24\xb0\x7c\xc8\x69\x11\x7f\x80\x88\x0b\xe2\xe0\xcb\xf4\x9a\xce\xe3\x14\xef\x76\x5a\xdf\x98\xee\x3b\xce\x3f\x05\xac\x07\x94\x12\x37\x6c\xbd\xbe\x2f\x65\xcd\xf1\x70\x49\x1c\xfe\xf1\x85\xae\xa1\x05\x71\xf0\x65\x9a\x9e\x32\xbf\x67\x00\xf7\xc6\x8c\xb5\x94\x8e\x33\x23\x9e\x1d\x57\x70\xb5\x95\x37\xe6\x5d\xc5\x5a\x94\xcf\xbd\x8b\x32\x63\x55\x50\xc3\x50\x10\xe7\x23\x86\xe2\xf9\x6f\x5c\x7e\xa2\x98\x63\x92\x80\x9e\xc3\x8d\xc7\x33\xe1\xd2\xaa\x22\x2f\xe5\x35\xc2\x2a\x65\xe9\x88\x4d\xac\x5d\x8c\x9f\xfc\xda\x1d\xfe\x83\x48\xed\x80\x38\xa8\xd7\xce\x69\x52\x3b\xa0\xd9\xe4\x24\x21\xd8\x7e\x8d\x20\x58\xb7\xa2\x73\xd9\x31\x43\x1f\xdf\x56\x9f\x26\xa3\x14\x63\x33\xab\x30\xb8\x99\x78\x53\x08\xe5\x25\x45\x17\x33\x64\xbc\x41\x1c\x5c\x08\x62\x95\x96\x51\xab\x35\x97\x9e\xf3\x1f\xfc\x96\x54\xc8\xbc\xf1\xcc\xb5\xe0\xe0\x66\xdd\x3b\x8d\xcd\x22\x95\xc9\x4b\x6c\x82\x4e\x50\xc5\x1f\x88\x43\xfa\x14\x27\xec\x89\x2a\x69\x7c\xe3\x11\x51\x55\xac\x67\xc0\xe2\x6d\xf1\x83\x37\x7a\x02\xca\xbf\xe2\x16\x7f\x7f\x3c\xb7\xaf\x48\xbc\xb6\x00\x7d\x8a\x03\x70\x70\x21\x10\xf6\x0b\x09\x7e\xdc\x09\x78\xfd\x44\xe6\xea\xcf\x7a\x16\x06\x32\x12\x6e\xc5\xe3\x24\x19\x99\xdb\x9e\x6c\x1e\x15\x2f\xb7\x2f\x40\xb9\x4e\x10\x07\x17\x02\x7e\x2c\x7f\xdb\xd7\xc5\x45\x25\x34\x57\xab\xeb\x44\x96\xa9\xf9\x13\x4b\x8a\xb4\x42\xe7\xbd\xb5\x0e\x55\xc8\x32\x88\x54\x8e\x08\x11\xa9\x1d\x10\x07\xf5\xda\x39\x55\x6a\x07\x34\xc1\x9f\xa4\x04\xf3\xf7\x2c\x8f\xe8\xf1\x55\x0b\x8a\x43\xc4\x30\x04\x9c\x89\xdf\x0c\x97\xd4\xbc\xa7\x6d\x7b\x28\x2f\xff\xcc\x81\x85\x19\x53\x00\x3a\xc8\x07\xe2\xe0\x4a\x70\x5f\xa1\xf1\x69\xb6\x1a\x78\x14\x46\x3a\x20\x39\x60\xa1\x92\x28\x19\x4f\xa2\x7a\x70\x7f\x8e\x55\xf2\x46\xaa\x47\xc7\x64\x56\x3c\x22\x2e\x88\x43\x6a\xb0\x72\xae\x5b\xac\x4b\x7a\x93\xa0\xba\x47\x44\xe4\x8d\xd5\x8b\x07\xe1\x16\x59\x71\xe4\x42\xb3\x64\x3f\xd0\x22\x1c\x7d\xb8\xe5\x57\xa0\x12\x09\x00\x07\x57\x02\xf9\x6c\xc6\x65\xef\xb2\xf4\xdc\xdc\x71\x71\x86\xe7\xc9\xbd\xf4\x09\xe7\x5e\x7e\x9c\x5b\xd5\x70\xaa\xa5\x41\x49\x41\xab\xb7\x85\x0a\xd3\x40\x1c\x5c\x09\xa6\x5b\x89\x4c\x31\x39\x05\xd3\x3c\xb9\x44\xb4\xf1\x77\x55\x58\xe2\x86\x54\x6d\x7c\x1f\xa9\xbe\xe2\x71\x95\x14\x6f\xd7\x1f\x30\x42\xec\xdc\x41\x1c\xd4\x55\xe3\x74\xa9\x1d\xd0\xa2\x7b\x92\x14\xec\x03\x04\x6a\x07\xf4\x97\x1e\x1b\x10\xf3\xac\xfa\x1b\xfd\x62\xb1\x11\x68\x6d\x36\xb1\x7e\x5a\xa2\xdc\x37\x28\x34\x39\xfd\x60\x13\x6a\x14\x0a\xe0\x90\x2e\x3f\x17\x2e\xe5\x1f\x67\x0d\xbe\x47\x38\x74\x9f\x56\xa5\xa7\xb9\xb7\xc1\xeb\xfe\x75\xce\x84\x0b\x57\xcd\xde\xa2\x14\x6b\xfe\x14\x82\x6e\xa6\x06\x71\x70\x29\x84\x37\x55\x3c\x34\xd5\xa4\xe2\xd9\x7a\x3f\xb0\x55\x55\x3a\xbd\xd9\x3f\xac\x4b\x5e\x37\xd7\x63\x38\x8b\x8a\x99\xaa\xd1\xc7\x51\x0b\xb5\x73\x02\x70\x70\x29\x64\xc4\x73\xcc\x09\xa5\x56\x0a\x14\x7c\x88\x31\x4f\x47\x3d\xa2\x6d\x74\xd8\xac\x37\x72\x1c\x17\xa3\xf8\x7a\x3e\x7a\xff\x3d\x36\x74\x80\x0b\xc4\xc1\xa5\x40\x9d\x52\xd1\xd3\xdb\xfb\x48\x3d\xf2\x9b\xf6\xa3\x73\xb6\x8d\xa3\xba\x41\x05\xc7\xf5\xbe\x4f\x96\xce\xd9\x7d\x22\x6d\xdb\xa1\xb4\x46\x48\x01\xc4\x41\x5d\x35\x4e\x97\xda\x01\x6d\x84\x4e\x92\xc2\x88\xe0\x12\x0b\xed\x64\xfc\xdd\x94\x81\x2e\x9a\x61\xa9\xe5\xc2\xc1\xa0\x1b\xc4\x14\x1f\xaf\xb4\xcd\x6b\xe9\x56\xf1\x5d\xc0\x82\xe6\x45\x10\x87\xb4\x51\x98\xf6\xc7\x31\x75\xa1\xbc\xdc\xe7\x9b\x33\xf8\xdc\x11\x3b\xbb\x5a\xce\x89\xe6\x41\xef\x37\x8c\x99\x06\x8a\xcb\x7e\x0e\xfc\xfb\xd0\x46\x01\xc0\xc1\xa5\x60\x1f\x2a\xfa\x3e\x23\x73\xa6\x30\x74\x22\xcb\x66\x94\x0c\xa7\xa2\xcd\x62\xdb\x5f\x90\xca\x4d\x65\xf3\x8b\x5d\x78\xce\x50\x38\x94\x32\x02\x71\x70\x29\x04\x9b\x3c\x5c\xa0\x75\xe5\xc0\xf0\x59\xf9\x74\xab\x19\x3d\x6e\xdd\xb1\xe0\x95\x8e\x19\x79\xd2\x58\xdb\xb5\xb8\xe2\x20\x69\x2a\xc8\xcf\x83\x38\xb8\x14\x76\x5e\x3f\x71\x53\xe9\x74\xeb\xc7\x5a\xaa\x26\x7c\xf4\xf1\xf8\x22\xf7\x27\xb1\x39\xd7\xa3\xc7\x76\x1f\xd2\x6f\xba\x97\x4b\xbd\x45\x85\x2e\x4b\x03\x70\xd0\xac\x70\xba\xd4\x0e\x68\x73\x7a\x92\x14\x48\xd9\x57\x23\xd5\x6c\x73\xff\xe2\x0d\x3f\x77\x74\xd0\x74\xd3\xd4\x1e\x73\x34\x68\x1a\xe5\xd2\x89\x9a\x0d\xc5\xdf\x20\xd3\x61\x42\x0c\x01\x88\x83\x4b\xc1\x71\xc9\xa1\x97\x23\xe5\x5d\xf4\x33\x45\x27\x51\x3b\xd7\xe6\xd6\x1f\xb3\x63\x2b\xfc\xab\x2c\x41\x29\xe7\xf9\xce\xd5\x5e\x5d\x83\x6e\x72\x00\x71\x70\x29\xbc\x7d\x5e\x44\xfa\x25\xe8\xe5\x1e\xb6\x4c\x50\xab\x3f\xe3\x8c\x68\x02\x45\x83\x39\x26\xf6\x6c\xb1\xc8\xf6\x01\x91\xfd\x9f\x54\x28\xf7\x0f\xe2\xe0\x52\xb0\x91\x6a\x18\xde\x58\x64\x15\x61\x2c\xe0\xed\xee\x34\xc6\x3f\x18\x58\x7a\xec\x41\x25\xee\xcf\x48\xfd\x80\x12\xff\xe7\x50\xae\x30\xd4\xa7\x12\xc0\xc1\xa5\xb0\x88\x5f\xbd\xb7\x70\xef\xd7\x79\xae\x2b\x7c\x1e\xc5\xd9\x4c\x39\x64\xe1\xe7\xf0\x6e\x13\x71\xee\xba\x88\xc9\x2a\xd9\x78\x61\x42\xf7\xe0\x83\x38\x68\x56\x38\x5d\x6a\x07\xe4\xf2\x4f\x4e\xed\x4c\x10\x8d\x99\xfc\x19\xaa\xa5\x0c\x49\xb2\x0d\x6b\x5c\xa2\xb4\xb8\x56\x2e\xf7\xc1\x72\x55\x22\x7f\x48\xa4\xce\x84\x59\x13\x9f\x09\x91\x26\x01\x71\xc8\xa9\x9d\x69\x3a\x31\xc3\x83\x9d\x22\x91\x52\x4e\x8a\xe0\xd4\x5c\x99\xf8\xdc\x6a\x4b\xab\x87\x2c\x26\x6f\x15\x06\xf8\x0a\x23\xb3\x7a\xc2\xa1\x06\xcd\x00\x0e\x39\xb5\x53\x55\xab\x9d\x38\xc0\x33\x6e\x89\xdf\xf7\x5d\x25\x30\xe7\xae\x9f\x52\x9f\xf2\xd2\xad\x3b\x5b\xb6\x43\x97\x09\x43\x2e\xe5\x16\x40\xad\x9f\x41\x9c\x8f\x84\x27\x6c\x34\xb4\x55\x9d\x2f\x07\x67\x1e\x6e\x1d\x6a\x25\x57\x36\x96\x87\xbe\x63\xd4\x92\x48\x70\x3d\x88\x7b\x20\x9d\x66\xb5\xdb\x33\x59\x8b\x8f\x48\xed\x80\x38\x1f\x09\x14\x14\xb4\xff\x48\xed\xbc\x7d\x84\x5a\xa2\x5c\xc5\xe7\x52\x55\xeb\xa3\x53\x5c\x6d\x77\x99\x09\x93\xb5\x69\x24\xc3\xaa\x10\xbf\x93\x67\xa7\xe8\x85\xdd\xa7\x7f\x53\x3b\x66\x65\xbc\x5f\x0b\x7b\x39\x17\x54\xcf\x27\xcd\x3f\xbb\x1e\xb6\x9b\x97\x19\x50\x52\xb6\x79\x21\x38\x5f\xed\x57\xb0\x9c\xb3\xc2\xc1\x3f\xe8\xc3\x95\xfe\xab\x3f\x1a\x52\xc7\x1f\x7e\xa8\x95\x69\xca\x92\xbb\x25\xab\xfd\x06\x8d\x5f\x52\xf0\x6a\xc5\x85\x03\x9c\xa5\xb5\x7c\xb7\xff\x96\xd4\xce\x2e\xe6\xe9\x1e\xed\xff\xa6\x76\xc4\x51\xc4\x90\x8e\x94\xa0\xc5\x0b\x98\x67\xdd\xce\x9c\x1a\xf4\x9d\x49\x1a\x94\xa5\xf5\xfd\x6b\xf7\xec\xd7\x66\xb7\xf3\xfa\xf1\xb8\x95\x11\x59\x91\xd2\x59\xe4\x76\x3c\x91\x72\x3b\x66\x4d\x49\x7a\x86\x0e\xf7\xc8\xd0\x48\x95\x2c\x47\x62\xbf\x66\xe7\x29\x8f\x4f\x4b\x61\xbf\x37\x7a\x60\x1a\x70\xb5\x72\xfa\xfb\x19\x1c\xed\x78\x29\x81\x22\x80\x94\x76\xe0\x48\xd5\x6d\xae\x59\xd9\xa7\x10\xf4\x11\xae\xd7\x93\x63\xac\x5d\xe8\x76\x79\xb8\x61\x43\xb6\x57\x67\x52\xc8\xb3\xc4\xd3\x3e\x77\x26\xe7\x67\x90\x73\x3b\xe4\x19\x92\xf4\xfa\xe4\xb9\x8a\xfb\xd6\x14\x87\x78\xa3\x94\x54\x07\x4d\x8e\x46\x3f\x0f\x68\x70\x67\xb6\x5d\x59\x1f\x7f\x5c\x3d\x93\x24\x0b\x8a\x0d\x72\x6b\xa1\x76\x8b\x5f\x82\x14\xea\x43\x6b\x0e\xdf\xa3\xa2\x0d\xd5\x9c\xcd\xd8\x1d\x30\xf9\xad\xaf\xdf\xf9\x7c\xb4\x5f\x16\x90\x67\x49\x7c\x26\x4f\x8b\x9c\xdb\x31\xf9\x6a\xa9\xce\xa5\xf6\x87\xf7\x55\xa0\x05\xb5\x84\x8f\xe0\x7d\x92\x6a\xd4\x91\xc3\x0e\x31\xc2\x87\x8e\x07\x64\xd6\x99\x5a\x07\x67\x96\xdb\x01\x49\xf7\xc4\x2b\xb2\x30\x95\x43\xa7\x8d\x0a\x43\xdf\x9b\x0f\xf7\x3a\xdf\x20\x09\x96\x9e\xff\xf3\x4c\x4e\x38\xef\x0a\x17\x85\xea\xa5\xfb\xc1\x5b\x02\xd0\xc1\x65\x00\x07\x5f\xa7\xcf\x93\x2c\xea\x07\x55\x79\x08\xd5\x91\xbe\x89\x47\xe9\x21\xbf\x3b\x5e\xd7\xd0\x46\x9f\xd4\xbf\xb5\x47\x3c\xf8\x38\xe9\x95\x2e\x74\xe5\x14\x88\x43\xea\xa3\x3c\xe4\x11\x4f\xb4\xfc\xc8\x28\xea\x89\x9c\xff\x8b\xa1\xdd\xef\x1d\x9b\x7b\xca\xe9\x69\x06\x54\xc7\xec\x52\x77\x69\x29\xd3\x83\xa1\x3e\xca\x00\xce\x47\x0c\x05\xed\x3f\x76\xd9\xd5\x5b\x55\xb1\x1b\xe4\xab\x4b\x0e\x34\xe1\x5a\x7f\x76\xd0\xb8\x0e\x05\xa9\x56\x9c\x6f\xa5\xe6\x97\xf4\xd5\x5f\xc3\xbb\x02\x35\xdb\x01\x71\x3e\x62\x18\xff\x31\x0e\xcd\x18\x17\x02\x30\x79\xd7\x05\x2d\x96\x77\xa7\xdf\x77\x92\xc8\xd4\x3a\x28\x91\x47\x39\x60\x3f\xe4\xe7\x91\x1c\x92\x1f\x20\xad\x45\x58\x7a\x10\x87\xe8\xb1\xf2\x3f\x13\x16\x78\xc7\x06\x9a\x4e\x4e\x52\xc2\x17\x97\xc3\x6f\x5e\xb2\x99\xe7\x78\x1c\xa5\xb2\xe3\x0c\x1e\xf2\x05\x4d\xa7\x85\x64\xd6\xa0\xe3\xe4\x3b\x3f\xa3\xf9\xb2\xbd\x05\x5d\x53\x0e\xe2\x90\xce\x59\xdb\x75\xbb\x86\x0c\x4a\xcb\xbe\x17\x3e\x20\x22\xc0\x1d\x12\x7e\xf6\xe5\x0b\xf1\x0d\xa6\x30\x5b\xc5\x92\xec\x10\x7a\x0a\x8e\x3a\xe8\x9c\x35\x80\x83\x2b\x61\x28\xca\x65\xd1\x2d\x8f\xde\xcb\x49\x64\xbe\x2c\xe4\xbc\x97\xd5\x5c\x39\xe7\xcb\xae\x2b\x8e\xc9\x2e\x58\x3a\x9f\x28\x51\x0f\xa0\xee\x88\x20\x0e\xae\x04\x7c\xe6\x64\x72\x55\x56\x43\xd7\xb0\xb4\x68\x26\x37\xe3\xee\xa3\x5d\x71\x9a\x9e\xe9\x9d\xf8\x2b\xcd\xf9\xc3\x09\xd8\x54\x9c\x56\xd0\xa9\x15\x00\x07\x57\x82\x61\xca\x8d\xd7\x6c\x82\x8e\xf5\xb7\x72\x87\xdb\x34\x08\x6f\x06\x6b\xbc\xdd\xd3\x98\xf7\xef\x2d\x5f\xd3\x3e\x12\x7c\x11\xbc\x27\x8a\x50\x02\x88\x83\xba\xed\x9c\x2a\xb9\x03\x9a\xe1\x4f\x6e\xa6\xe0\xb9\xdd\x97\xce\xde\x2e\x61\x52\x4c\x41\xbf\xfb\x8b\xd7\xee\x62\xd1\x05\xea\xfe\x71\x15\x25\x21\xcb\x6a\xde\x28\xb2\xe3\xff\xdb\x4c\xe1\xff\xcd\x21\x9d\x34\x17\x4d\x5a\x31\x67\x72\xc5\x7a\xbc\xed\xa6\x6e\xfe\x36\x4b\x94\x85\xc0\xd5\x2a\x6f\x20\xf0\xaa\x65\xe9\xe4\xe3\xe0\x17\xe5\xd0\x2d\x3b\x20\x0e\x69\xef\xce\x5a\x65\xbe\xa7\x67\x1a\x56\x7b\xcf\xeb\xa3\xdf\xe6\x6b\x47\x47\x57\x0f\xa7\x4a\xf3\xdc\xeb\x98\x12\x5e\x77\x38\x96\x3b\x7e\x40\x7b\x77\x00\x07\x57\xc2\x71\xb9\xeb\x05\xd5\xde\x1f\xc2\x6c\x4b\xea\x12\xa2\x97\x09\xc2\x84\x30\xb3\x4c\x6f\x94\x64\x90\x31\x44\x08\xbd\x90\x4c\xce\x2d\x41\xc4\x05\x71\x70\x25\xe8\x3e\x08\xa3\x5c\xe6\x17\x89\x55\x56\xbf\xf7\xe8\xab\x3f\x07\xd9\xc5\xcc\xbe\x44\xd4\xfb\x95\x0e\xcd\x26\x95\x81\xb8\xcb\x5d\x7f\x11\x7b\x77\x10\x07\xf5\xd5\x10\x38\x95\x8d\x03\xad\xba\x27\x49\x41\xe7\x3c\xdb\x7d\xb3\xdf\x0a\x49\x49\x7f\x6b\x5c\xb3\x66\xa5\x15\xb5\xb4\x38\x42\xdf\x15\xbc\xbe\x64\x15\xf7\x8b\xcc\xfd\xeb\x96\x1b\x62\x08\x40\x1c\x5c\x0a\x6b\x1d\xc1\xa9\x23\xdc\xf8\xe4\x43\xb3\xdf\xf5\x30\xd1\xbe\x75\xc6\x1d\x3b\x18\x3a\x49\x63\x2a\xa8\xaa\x69\x58\xb1\xcf\x8c\x55\x42\x29\x7a\x00\x87\x74\x6e\x47\xdd\xc8\x26\xc6\x94\x82\xfc\xa7\x01\xc1\x1f\x05\x5b\xa1\xba\x68\x54\xba\x0c\xf3\x86\x23\xd9\xc0\xf6\x56\xec\x4f\x65\x41\x90\xc4\x40\x1c\x5c\x0a\x6b\xf1\x1d\x37\x77\x14\xb7\x89\xe4\xf0\x70\x88\xff\xa4\x1f\x27\x63\xc9\x7d\x7c\xfa\x9b\xe0\x32\xf6\x72\xe4\xaf\x6c\x55\x23\x53\xe8\x90\x20\x88\x83\x4b\x41\x45\xfe\x47\xbb\x3b\x46\x64\x58\xe5\x9f\x3b\x64\x97\x4c\xd2\xf4\xd2\x3f\xf1\x35\xbe\x0a\x3c\xbc\xf7\x7a\x78\xb0\x6a\xe4\x49\x9e\x2f\x42\x0a\x20\x0e\xea\xab\x71\xba\xe4\x0e\x68\x27\x74\x92\x14\xa6\x35\x3f\x1f\x58\x99\x84\xff\x36\x70\xd6\xae\x7f\x3f\x55\x18\x54\xd5\x4f\xb5\x42\xfa\x57\xa8\x9a\xfc\x93\xb8\x38\xef\x88\xb6\x35\x62\x08\x40\x1c\x5c\x0a\xcd\x19\x61\x7b\x53\x7e\x73\xfb\xa9\xca\x69\xd9\x7f\x1a\x72\x53\x19\xee\xdb\x17\xcf\x4e\x60\xcb\xbe\x5d\x36\xbc\x7f\xb1\x2e\x05\xaa\xef\x01\x71\x70\x29\x5c\x89\xfb\x66\x6e\x6d\x4e\x55\xcd\xe8\xef\x41\x6b\xf5\x60\x1f\xab\x01\x9f\xec\x0a\xc6\x5e\xdc\xbe\xd1\x33\x35\x7c\x82\x82\x65\xe8\x26\x07\x10\x07\x97\x02\xea\xaf\xda\xba\xc7\x6f\x88\x9e\x55\xb4\x57\xe9\x91\xb4\xc6\x66\xd0\xd6\xb4\x1e\x84\x88\x71\x1a\x7d\x3f\x47\x73\x8d\x30\x89\x32\xe1\xff\x16\xac\xfe\xbf\x39\xb8\x14\xcc\x15\xcb\xf6\xad\xa5\x94\xe4\x14\xb8\x29\x18\xfc\xb6\xb9\x4d\xdb\x3e\x77\xa0\x6e\xa8\xf8\x1b\xa4\x77\x54\x3e\xed\x62\xa8\xbd\x87\x90\x02\x88\x83\x66\x05\x9b\x53\x49\x01\xb4\x3b\x3d\x49\x0a\x1f\xa6\x54\xd7\xc7\x8c\x6c\xb7\x39\xaa\x2b\x0c\x3f\x8a\x1b\xf4\xf1\x3f\x8b\x2a\xe3\xd5\x68\x9c\x76\xf1\x8d\x40\xa3\xe4\xe4\x9e\x41\x0c\x01\x88\x83\x4b\xa1\xdb\xc9\x37\x33\x05\xed\x6e\xd4\x10\xcd\x6f\x96\x75\xc1\x2c\x3d\xcc\xcc\x1d\x5f\x46\xcd\xd7\xed\x1e\x8e\xbc\x45\xb4\xa6\xd7\xfa\x11\x71\x41\x1c\xd2\x59\xef\x2e\x2e\x81\x37\x86\x19\x4c\x5f\x8e\x86\x86\xaa\xad\x7b\xfc\x16\x1f\x1f\xd2\xd4\x4e\x07\x6d\x4f\x35\x39\x44\x4b\x48\x3e\xb1\x83\xce\x7a\x03\x38\xb8\x14\xda\x9a\xe2\x2e\x5d\xec\xc9\x99\x0b\x58\xe0\xe5\xd2\xcf\xa5\x2c\x9e\x4f\xb8\x19\xd5\xaa\x11\x74\xb9\x74\xe0\xdb\xb6\xd0\x47\x9f\x40\x44\x5c\x10\x07\x97\xc2\x6e\xc2\x26\xea\xa8\xda\x5f\x09\x3d\x72\xeb\x90\x1f\x17\x62\x35\x6e\xa4\xba\xb7\xbe\x2b\x20\x16\x13\xa8\x66\xd6\x65\xa5\x50\x87\x3a\xed\x83\x38\x68\x56\x38\x5d\x72\x07\xe4\xf3\xff\x7f\x1a\x29\xf3\x24\x07\x57\xe9\x90\x2d\x0a\xde\x21\xf8\xb9\xe7\x4d\x9a\x94\x5f\xf8\x55\x20\xa4\x89\x63\xb0\x07\xed\xbe\x14\x81\x69\x44\x33\x54\xde\x04\xe0\x90\x93\x3b\x4c\xba\x46\x7b\xa9\xee\x1d\x02\x97\x46\x9c\x09\x7b\x55\xac\xc5\x3a\x27\xd0\x5e\xbc\x5e\xc3\x69\xc8\xa7\xaf\xdd\x0d\xfc\x70\xf0\x06\x11\x19\xc4\x21\x27\x77\xf0\xbe\x25\x32\x39\xe9\x84\x8f\xfe\xfa\x4a\x5f\x7c\xc9\xe5\xdd\xa4\x90\xc1\xdd\x14\x15\x25\x39\xba\x49\x3b\xd6\x89\xb6\xe7\x8d\xc5\x88\xc8\x20\x0e\xf9\xf6\x2d\x7f\x86\x15\xa3\x8b\x96\xdb\xa1\xaf\x7f\x46\x4f\xb4\x05\xd1\x1e\xbd\x17\x72\xb8\xf2\xd9\xf2\xaa\xdf\xad\x3d\xf4\xe5\x12\xf7\xa4\x10\x4f\x44\xae\xc6\x53\xc7\x7f\xe7\x5d\x09\xfa\xfb\xd8\xaf\x75\x51\xe7\xda\x19\x96\x0c\xd9\xe8\x39\xcf\xdd\x2a\xf6\x67\x1e\x1e\x0a\xd7\x2f\xcb\xdc\xff\x37\x57\xc3\xcb\xe6\xeb\xa7\xa6\xe2\xdb\x8f\xd9\xf3\x27\xfb\x9e\xe5\x1f\x2e\x4c\xec\x03\x0e\x97\xbe\xf6\x14\xcd\xf3\xa2\x4f\x54\xb8\x5b\x72\xfe\x3d\xc3\xcc\x71\xc3\x3c\x02\x95\x24\xc5\x2d\xd3\x82\xcb\x2d\x3a\x63\x9d\x48\xc6\x66\x48\x49\x61\xc7\x38\xa0\x42\xf8\x5c\xb8\xf8\x74\xe0\x7f\x5b\xae\x06\xf4\x68\xff\xe4\x6a\x44\x90\x72\x35\xc2\x1d\x6d\xd9\x7c\xbe\x9f\x29\xdb\xc8\xaf\x52\xa6\x97\x7c\x68\x8b\x7d\x58\xa5\x80\x99\x1c\x90\x60\xef\xbf\x93\x95\x4b\x7b\xdc\x71\x16\xb9\x9a\x3a\xa4\x5c\x8d\x13\xd6\xbb\x9c\x84\x5a\xf1\xb2\x4b\xf5\xc2\x57\x74\xc5\x5a\xbc\xde\x6e\xbc\x9e\x31\xe9\xb6\x75\xeb\xff\xc3\x76\xb4\x86\x27\xe0\x73\x26\x47\x44\x90\x73\x35\xd4\x2d\x6d\x5b\xb8\x98\x7d\x2f\xd0\x3a\xde\xd5\x27\x0f\x31\x3b\x5a\x17\x47\x93\xe1\x2b\x3c\xd8\xfd\x39\xc8\x54\x98\xa5\xe9\xc5\x75\x26\x07\x62\x90\x73\x35\xcc\x69\xcd\xb6\x65\x06\x71\xb4\x41\xe1\xbe\x15\x37\x95\x9e\x5e\xd9\xe2\x41\x89\x9a\xc7\xb6\x93\xde\x14\x7a\xb4\x9f\x6b\xc1\x7e\x36\x07\x62\x90\x73\x35\xc3\xfe\x97\x05\x4d\xa5\x3d\x78\xac\x42\xa5\xe4\x2e\xaa\x45\x13\xf6\x4c\xe0\x65\x5f\x53\x9b\x9c\xb9\x54\x40\xf5\x62\x6d\x7e\xcd\xf9\x4c\x9e\x16\x39\x57\x93\xc7\x18\x63\x38\x82\x5f\xb4\x11\xbf\x49\x1d\x71\x05\x45\xe7\xf7\x7b\x5c\x76\x16\x26\x8f\x4f\x42\xdf\x55\x6c\x49\x2a\xd0\x93\xa7\xcf\x2c\x57\x03\x92\xee\x49\xcb\x2e\xab\x53\xfe\xa3\x4b\x1a\x99\xc5\x8f\x03\x1b\x0b\xe2\x2c\x6a\x89\x34\x8f\xc7\x5c\xd8\xf3\x7f\x26\x64\xe5\xdf\xa5\x54\x67\x0f\x5b\x46\x2c\x37\x20\x0e\xbe\xec\xfa\xed\xce\x5d\xa2\xd1\xf7\xeb\x7b\x39\x17\x18\x15\xc0\xb7\xea\xa3\xc8\xfb\xfc\x7e\x7f\xf2\xf5\xe6\x7a\xac\xc1\xea\x98\x0e\x6b\xa8\xa5\x05\x88\x83\x2f\xbb\xe3\x1f\x08\x96\x05\x75\x2b\x30\x09\xbb\x74\x99\x8d\x25\x77\x0f\x74\x7d\x62\x29\xbf\x61\x5e\x59\x63\x5c\x0e\xfd\xb3\xb8\x6e\x0e\x39\x7f\x10\x07\x5f\x76\x03\x25\x4b\x7b\x0e\x63\x0f\x0b\x96\x13\x22\xd1\x71\xe6\x99\xde\x6d\xac\xdd\x73\x0b\x67\x30\x25\x12\x9f\xfb\x4c\x91\xa1\x4b\xc6\x85\x88\x0b\xe2\x7c\xc4\x44\xfe\x63\x1c\xc4\xfb\x74\xd6\xbf\x4b\xbf\x2f\xea\xe8\x70\xc3\x3b\xde\xec\xcd\xfa\xc9\xbe\xae\xe8\x48\x4f\x65\x79\xfd\x51\x8a\xa0\x95\xdc\x9e\x0e\xc2\xa1\x83\x38\x44\xd3\x14\x91\x53\xe5\x6a\x40\xd3\xc9\x49\x4a\x68\xfd\x72\x85\x5a\x74\xf1\x32\xce\xf7\x27\x32\x61\x5f\xa6\x2c\xf4\x94\x47\x2e\xc6\x4d\x3b\x39\x4c\x7a\x70\x66\xfa\xe4\x57\xba\xad\x22\x46\x00\xc4\xc1\x95\xf0\x88\x6c\x62\x95\xdf\x38\xb9\x1e\xad\x86\x94\xeb\x38\xf3\x66\x47\xf5\x7b\xa6\x24\x82\x68\x0f\x6f\xb7\x55\xd5\x7e\x91\x0d\x29\xa8\x76\x0b\xc4\xc1\x95\xa0\xc2\x6d\x57\xee\x69\x91\xc1\x3e\x95\x5c\x6c\xf4\xa0\x75\xfa\xad\x06\xbe\xd4\xcd\x83\x37\x9c\xa1\x2f\x56\xc5\x55\xaf\x5d\xee\x80\x94\x00\xe2\xe0\x4a\x88\x4f\x2b\xad\xf4\xc2\x37\x93\x4b\xc7\x12\xbc\xe2\x46\x9c\xf2\xcc\xa8\x77\xf8\x6a\x16\x07\xd5\xf6\x5a\xe7\x27\xfb\x83\xd7\x26\x0d\x50\xbb\x1f\x00\x07\x57\x42\x84\x9b\x94\xd7\xae\xc5\x0d\x26\x5d\x4e\xc5\x26\xaa\x4e\xa6\x4a\xaf\x8a\xac\x4b\xdb\xbf\x7a\xb8\xf0\x2e\x26\xf4\xa7\x5f\xa5\x79\x82\x50\x02\x88\x83\xda\xe7\x9c\x2a\x57\x03\x9a\xe1\x4f\x52\x42\x5e\xcb\x5c\xfc\xe8\x36\xf1\xd2\xb2\xcd\xa2\x9e\x53\xa8\x55\xea\xfd\x16\xe5\xd0\x0f\x6a\xc6\x4c\xf1\xa5\x39\x9c\xb2\x18\xd7\x54\x11\x23\x00\xe2\xe0\x4a\xb8\xf1\x54\x70\x71\xb7\x29\x0d\xd3\x69\xb5\xa0\x60\xa6\x77\x4c\x95\xd4\x2f\x2b\xb1\xe2\x0b\x93\xb4\x25\x75\x6c\x94\xdc\x0b\x4f\xa8\xb7\x09\x88\x83\x2b\x81\x3b\xe7\x8f\xfa\x63\x96\xfc\xd6\x0a\x5c\xc1\x8e\xee\x12\xdc\x57\x46\xc3\xfd\xe3\xb2\x9d\xe7\x32\xbf\xb2\xde\x91\x4a\x5d\x09\x40\x81\x8e\xfc\x03\x38\xb8\x12\x58\xb8\x31\x5e\xd9\xdd\x8e\x8f\x4c\x3b\x36\x52\x4a\x71\xb6\x96\xc7\xfd\xf0\x56\x3c\x8e\xb1\x9a\x63\xf9\x02\x77\x6a\xe0\x2b\xaa\x50\xa8\xa1\x26\x80\x83\x2b\xa1\xfb\xb1\x4f\x64\x49\xbd\x5d\xda\xcd\x57\xbd\x78\x4c\x9a\x8c\x35\xc9\xa9\xc1\x0e\x37\x6f\x57\xe6\x62\xa6\x3c\xe8\x0e\x5e\xcc\x23\x41\x6c\xc5\x41\x1c\xd4\x28\xe3\x74\xb9\x1a\xd0\xaa\x7b\x92\x14\xc8\xb3\x37\x1c\xe2\xee\x04\x99\x2e\x6b\x96\xb4\x28\x24\x74\x19\x53\xbc\x2c\xd6\x30\x26\x9d\x2d\xfa\x8b\x87\xb2\x21\x3f\xd5\xce\x0e\x9d\x45\x02\x70\x48\x6d\x63\x4c\xd9\x7b\xd3\xb5\xc3\x4b\x16\x9b\x3c\xa8\xe2\x43\xcc\x9a\xb6\xa5\xbe\xa2\xd2\x99\xbf\x9a\x4b\xa3\x99\xb6\x8c\x66\x54\x40\x45\xc4\x05\x71\x70\x29\xcc\x6d\x9b\x2e\xf1\xac\xc4\x63\x55\x3e\xb6\xbf\x4c\x1c\xae\xb7\xec\x50\xce\x18\xf9\xa2\xd7\xf4\xf3\xd2\x5f\xca\x09\xe7\xcb\xae\x31\x88\xb8\x20\x0e\x2e\x85\xcc\xa0\xf6\xd0\x04\x66\x93\xb0\x8e\xa7\x77\xee\x5c\xbb\x21\x78\x9f\x75\xe6\x40\xbc\x3e\xf1\xd2\x7b\x4f\x32\xc3\x77\x83\x19\xa5\x2a\x88\xb8\x20\x0e\x2e\x85\xbb\xae\xa5\x82\x31\x8b\x0e\x36\x2a\x07\x94\x93\xce\xf1\x22\x26\xf5\x1e\xc2\xa5\xd8\x19\x02\x24\x89\x5a\x8f\xc9\xc7\x3a\xd4\x44\x10\x52\x00\x71\x50\xa3\x8c\xd3\xe5\x6a\x40\x3b\xa1\x93\xa4\xa0\x68\xf1\x64\x9d\x91\x54\x3f\xdb\xfc\x01\x8a\x0c\xed\xa2\x9c\xf4\x3e\x71\x91\x98\x98\x8b\x7e\x4e\xe9\xb9\xdb\x3e\xa2\xd3\x52\xd0\xfa\x00\xe2\xe0\x52\xb8\x3d\xc4\x28\xcb\x4f\x5b\xa4\xc5\x75\x0d\xff\xa3\x97\xac\x9c\x06\xa6\x3c\x0e\x3e\x3b\x7f\x68\x7f\x0b\x5b\x16\xff\x6a\x0e\x0a\x74\x73\x10\x88\x43\xaa\xbc\x6c\xfe\xb9\x19\x22\xb3\x6b\xcf\x77\x2b\xc7\x37\xc0\xc5\x23\x13\xbd\xb5\xaf\x9f\xd7\xad\xe6\x8a\xcf\xf3\xbf\x2e\x58\x7b\x73\x74\x50\xe5\x25\x80\x83\x4b\x61\x29\x4c\x02\xd5\xf2\x6b\xf8\x3b\xb1\x25\xff\xa9\xca\x59\xa7\xf3\x7f\x8a\xbe\xe5\x06\xff\x68\x23\x18\xfa\x72\xe5\x31\x71\xb8\x32\x94\xab\x01\x71\x70\x29\xd0\xb6\xfe\xb6\xed\xab\xc0\xa4\x14\x89\xd1\x3a\x90\x28\x21\xb0\x2a\x48\x39\x9f\xf2\xde\x79\xab\x63\xef\x65\xea\x2c\xae\x51\xf1\x7d\x84\x14\x40\x1c\x34\x2b\x9c\x2e\x57\x03\xda\x9d\x9e\x24\x05\x55\x1a\x16\xc6\xbe\xe4\xf1\x66\xdd\xa7\xa9\xe6\x98\xad\xe9\x39\xd4\x0a\xd5\x24\x35\x97\xd8\x49\x6e\xa9\x0b\x6c\x50\xb2\xb3\x33\x23\x86\x00\xc4\x21\xf5\x4b\xd7\x69\x4a\x30\xd4\xd2\xfb\x68\x24\xae\x77\x3c\xe9\x23\x33\xb2\x3b\x71\x4c\xf6\xb3\x7c\x7a\x34\x50\xc5\xe9\xfa\xa6\x96\x3a\xf4\x81\x0f\xc4\xc1\xa5\xb0\x50\xdf\x3d\xcb\xe9\x9c\xae\x27\xc2\xf9\x30\x7e\x38\xbe\x7d\x4b\xc4\x66\xc5\x5d\x57\x8f\x03\xe3\xcf\xa6\x3c\xb5\xaf\x94\x3d\xf4\xf1\x01\xc4\x21\x6d\x15\x2e\x98\x2c\x54\x89\xe5\x1b\x07\xed\x48\x52\x92\xb4\x7f\xf3\x19\x4f\x75\xa9\x7a\xbc\x19\x69\x4c\xf9\x26\x9a\xa2\x5d\xac\x50\x0d\xda\x2a\x00\x38\xb8\x14\x84\x5d\xe3\x48\xc9\xab\xcb\x32\xef\xf2\x47\x0f\x25\xff\x3d\xb0\xec\x72\xfe\xc6\xdf\xeb\xc2\xd2\xe8\xb7\xc1\x1f\x2c\x17\x52\xf6\x04\x21\x05\x10\x07\xcd\x0a\xa7\xcb\xd5\x80\x7c\xfe\xc9\xb9\x1a\xda\xb9\x7c\x63\xdd\xc0\x67\x97\x95\xae\xc4\x8f\xdc\x4c\x32\xdc\x99\xf9\xd0\xf1\xe3\xc5\x44\x4c\xd0\xbd\x6f\x76\xbb\x11\x01\xca\x65\x88\xbc\x07\x88\x43\xce\xd5\x04\x6e\xdf\x98\x8e\xaf\x8c\x35\xaf\x72\x6a\x92\x58\x57\x42\xef\x7e\xf9\xf6\x4d\x8d\x69\xa4\xb0\x7e\x07\x77\xc2\x6e\xd0\x5c\x2f\x1e\x22\x32\x88\x43\xce\xd5\x70\x86\x72\xca\x8e\x04\x97\x7d\xea\xeb\xf0\x44\xbb\x9f\xb3\xae\xab\x65\x1f\xaf\x67\x6a\xa6\xa9\xa5\xff\xb2\xc9\x43\x2b\x3d\x42\x03\x11\x19\xc4\xf9\x48\xa0\x60\xff\x67\xe4\x10\x3d\x8b\xc9\xe6\xf1\xb7\x5a\x4e\x9e\x6d\xe5\x76\xbc\xde\x6f\x1b\x9b\x7f\x92\xc4\xfe\xd5\x24\xb9\x76\x3b\x20\x5e\xfd\xef\xbd\x5e\x28\x57\xb3\xc2\xd1\xb0\x4b\x46\xf1\x57\xb8\xfe\x8a\x62\xd7\x78\xde\xe7\x4f\x11\x3f\x67\x7e\xef\xbd\x9d\xea\x70\x28\x27\xeb\x40\xaf\xe7\x59\xff\x37\x57\xb3\xe2\x9f\xf2\xe3\x8a\xd6\xf6\x3d\x7b\xc2\xa2\xd0\x27\x57\x6f\xed\xac\xdc\x19\x65\x55\x8c\xaf\xe6\xd4\xa2\xc1\xbe\x53\x55\x51\xe4\xf0\x0f\x4a\xdc\x5d\x77\x8b\x82\x49\x2d\xe4\xd5\x0a\x59\xd8\x92\xe0\xd0\xe3\x6a\x11\x3e\x83\xcc\xfb\x0d\x14\x0f\xbf\x13\x31\x53\xec\xbf\x2f\x17\x11\xc1\xc5\xfd\x6f\xc8\xd5\x78\x62\x9e\xee\xd1\x7c\xd1\x51\x30\x7d\x44\xe9\x3d\xfd\x5e\x8a\x7b\x22\xe5\x6a\xa6\x2f\xda\x47\x86\x70\x8b\x15\x45\x7e\xe4\x28\xfe\xc0\x6f\xd8\xb0\x7b\xde\xd3\x22\xc8\xe4\x79\x0e\xdb\x5d\x26\xca\xb1\x91\x2e\xdd\xb3\xc8\xd5\xa0\x3c\x80\xff\x55\x9c\x66\xfa\x9f\xd5\x68\xaf\xf0\xd8\x3a\x7f\x1d\x2a\x38\xbf\xd5\x7c\x95\xca\xdf\xf6\xc0\xa5\x30\x04\xf7\xd0\x78\xcc\xe0\xf7\xad\x8b\x67\x72\xe4\x03\x39\x57\x13\xf8\x55\xac\xdf\x7f\x9a\xb8\x61\x46\x3b\x7d\x6b\xa2\xd7\x83\x22\xef\xb5\xc4\xce\xa8\x07\xed\x84\xd2\x26\xeb\x52\x51\x70\x99\xf5\x99\x1c\x70\x51\x45\xfa\xb3\x02\x25\x3d\x55\x1d\x0a\x89\x02\x3c\x02\xe6\x8e\x72\x97\xf2\xf8\x8a\x77\x74\xc2\x4d\xde\xd5\xc5\x72\x98\x11\xfc\x64\x32\x64\x46\x3d\x93\xa7\x45\xce\xd5\x28\x30\xd4\x10\x2f\x34\xe6\xf2\xd8\x5d\xdc\x1c\x33\xeb\x5b\xcd\x5b\x3e\x1a\x2c\x7e\x55\x7a\x37\x22\x65\xb0\xe5\x65\xb7\x5a\xe5\xd9\x25\x4d\x40\x1a\x3a\x69\xfd\xd3\x7c\xe8\x28\xdb\x7d\xa5\x73\x95\xe6\x12\x6b\x06\x9e\x25\x5b\xfa\x81\x54\xae\xf4\x80\x80\xc3\xce\xdb\xec\x67\x71\x28\xb9\x05\x3d\x50\xf9\x36\x80\x83\xaf\x7f\x17\x7f\xfd\xca\xb1\xcc\x6d\x1f\x1a\x58\x9e\xcb\xb5\x6c\xf4\x36\xc0\x6a\xf3\x0c\xae\xb3\xe7\x37\x4d\xc9\xdd\x3a\xaf\xcc\x3b\x07\xf5\x79\x01\x71\xf0\xf5\x8f\x12\x0f\x0d\xdf\x28\xc6\x76\xa7\x01\x5b\x73\xa2\xfa\x28\xeb\x03\xa1\x6a\xc1\xbc\xc8\x73\x4e\x0b\x9f\x79\x31\xd2\xcb\x75\x0f\xc6\x10\x71\x41\x1c\x7c\xfd\xbb\x67\xce\x36\x9c\x7c\x54\xa2\xb9\x73\xb7\x65\xde\x8d\x66\x80\x20\xb4\x6f\xd4\xdb\x42\x2d\xc6\x9e\xd5\x80\x45\xa8\x9f\xf0\x19\x64\xe8\x40\x1c\xfc\xff\x2d\x32\x6f\x5f\x40\x9d\xf8\xde\x8e\x4a\x73\x73\xfc\xf1\x53\x7c\xde\x97\x37\x88\x67\x18\x62\xb5\x43\xd2\x09\x5f\x6b\xbd\xf8\x35\xd4\x89\xb0\xca\x20\x0e\xd1\x8e\xc4\xf3\x54\x49\x13\xd0\xef\xfa\x24\x25\xf8\x5a\xd4\xb1\xa8\xb5\xdd\xae\x62\x6a\xa8\x7b\x4a\x13\xfa\x3b\xd7\x90\xfe\x7e\x2b\x66\x08\x43\xa7\x9e\x49\xed\x87\x7d\xd1\x2a\xe8\x43\x23\x88\x83\x2b\x41\xc2\xc7\xe0\x2b\xee\xd3\xb9\xcc\xe1\x97\x0e\x46\x11\x78\x65\x37\x44\x70\x96\xa4\x56\x13\x04\x8d\x49\x3c\x57\xcd\x6f\x38\x7f\xb8\x86\x88\x0b\xe2\xe0\x23\x7b\x71\x9e\xb8\x30\x6b\x26\xcc\x56\xa2\x99\xd8\x63\x2c\x9a\xd3\x88\xf5\xc9\xea\x53\x12\xdf\x1b\xfa\x26\x9d\x71\x15\xd5\x92\xf7\x53\x20\x85\x01\x38\xb8\x12\x6c\xaf\x7f\x74\xde\x52\xbd\x7e\x59\x4d\xfe\x6f\xfb\x07\xe2\x9a\x32\x74\xa2\xec\x5b\x55\xd3\xbf\x09\xe9\x16\x84\xa3\x2e\xd9\xbd\x8a\x83\xaa\xb8\x00\x1c\xfc\xff\x2d\x5d\x6e\x76\xeb\xb2\x0d\x13\x5f\x5a\x6e\x9f\x4f\xe8\xe1\x3d\xd7\x2c\x7e\x43\x98\xed\xe9\xdf\xb4\xd1\x9b\xcc\xc3\xac\x86\x7d\x03\x08\x25\x80\x38\xa8\x31\xcd\x83\x53\x75\x23\x01\x4c\xb5\x27\x1e\x70\x79\x76\x67\x89\x39\x36\x8f\xc5\x42\xf0\x7d\x60\xc6\x26\x95\xb9\x1e\x59\xcf\x70\x31\xe9\xc3\x14\xb9\x6c\xa3\x87\xde\x3b\x37\xa1\xae\x21\x20\x0e\xae\x04\x72\xab\x89\xb5\x90\xe1\x58\x2a\x82\xf6\xf1\x57\x57\x5a\xb9\x17\xa7\xe5\x3f\x9b\xcb\x25\xfe\x35\xce\x14\xb2\x3a\x5c\xa0\xd9\x9c\x83\x1c\x38\x80\x83\x8f\xec\x72\x1d\x73\x5a\x2a\x29\xbd\xf4\x82\x1e\x5b\x65\xf1\x94\xc0\x6b\x07\xdf\xcc\x1b\x35\xfe\x12\xd4\x5b\xbf\x84\x4d\x35\x56\xc6\xa1\xd3\x07\x20\x0e\xae\x04\x3e\xcb\x65\x56\x4d\x56\xbc\xc7\x41\x84\x8f\xd8\x64\xbd\x19\xbd\x39\x07\x58\xf4\x8c\x67\x31\xdd\x3e\xb2\xe4\x14\xf9\x60\x0a\xb1\x21\xe2\x82\x38\xf8\xff\x2b\x47\xed\xc1\x94\x49\xe0\xc0\xfa\xc5\xba\xc0\xc4\xf1\xd7\x95\xdb\x5b\x66\xab\x82\xbd\xe4\xc5\xa5\x62\x18\xdf\xc6\xe8\x7c\x09\x58\x10\x7b\x62\x10\x07\xb5\xa0\x38\x5d\xd2\x04\xb4\xfc\x9d\x24\x85\x1e\x3d\xc3\x56\x9d\xcf\x1d\xc6\xf3\xa8\x49\xb5\xd5\x97\x71\xb8\x30\xf0\x24\xbc\xc5\x24\xb6\xef\xe8\xe5\x52\xdc\x6c\xbf\x8c\x05\xd5\x29\x80\x38\xb8\x14\x78\x02\x23\x32\x66\x8e\x68\x13\xa4\x78\x27\x6d\xfb\x05\x4a\x13\xf4\x7f\xe8\xdc\xcb\xa0\x0d\x8f\xec\xe7\x6b\xd4\x4f\xaa\x54\x3d\x87\x88\x0b\xe2\xe0\x43\x1b\x37\x28\xaa\xf3\xa2\x79\x5d\x0c\x53\x67\xff\x99\x8a\xa6\xb1\x68\xe4\xf1\x33\x9b\xdc\xb5\xf5\x80\x78\x5e\x4f\xc5\xe7\x87\xcf\x46\x11\x71\x41\x1c\x5c\x0a\x35\x29\x44\x91\xd4\xd6\x22\xa3\xe2\x0e\x85\xd4\x0e\x4a\x6c\x3f\x44\x98\xa4\x2f\x3e\x2e\x10\x24\xa4\x97\x54\xe8\x68\xf9\x30\xf2\x1c\x11\x17\xc4\xc1\xff\xdf\xa3\x0d\xbe\x0f\x16\xb7\x1b\xd4\x79\x19\x12\xcc\x17\x13\x0b\xdf\xf9\x8f\x1b\xd7\x44\xe6\x3e\xb4\xfd\x23\xf1\x41\xdb\xb3\x84\x3d\x1c\x21\x05\x10\x07\xb5\xa0\x50\x3d\x95\x14\x40\x5b\x92\x93\xa4\x60\x61\xe3\x15\x80\xf3\x2c\x52\x9a\x7b\xff\xaf\x50\x8a\x87\xd4\x90\x7c\xcf\xef\x67\x3d\x2e\x9b\x91\xe7\xfd\x9f\xee\x8c\x58\xd4\x42\xa5\x1a\x20\x0e\xe9\x72\x82\x00\xd2\x76\x82\x42\x05\x34\x19\x93\xc5\xa2\x9b\x57\x74\x88\xb8\x25\x31\x0b\xfb\x03\xde\x5f\x4b\xb9\x9b\xea\x87\x26\x76\x55\x17\x8a\x0b\xe0\xe0\x43\xab\x46\xfa\x3d\xfd\x4e\xc4\xb2\x22\xf3\x2b\x6a\xda\x7a\x2d\x75\x0d\x1b\x02\x3f\xae\xfc\x2b\x94\xba\xb7\x31\x3f\xe2\x95\xfb\x33\x42\xb5\x92\x20\x0e\x2e\x05\xd5\xb5\xbb\x54\x2c\x5d\xe5\xdf\x7e\xa6\x9b\x5b\x6e\x3e\x70\x33\x4a\xec\xbd\x7b\x4e\x35\xa8\x97\xb1\xa7\xd5\xa9\xf6\x41\x98\x95\x1e\x94\x31\x00\x70\x48\xd7\x59\x3f\xaa\xce\x36\x61\x0b\xaa\x91\xbf\x9e\x43\xea\xf5\x90\x34\x5a\x4b\x85\xe1\x3b\xdb\x4a\x97\x89\xea\x80\x64\x1b\x07\xce\x57\xe8\xd8\x1b\x88\x83\x66\x05\x40\xd2\x44\xf7\x74\x2e\xeb\x64\xa7\xdc\x19\xd1\xf5\x96\x3b\xc8\x8c\xac\x67\xe9\x13\xea\xee\x86\xd9\x46\x4c\x0d\xa1\x55\xc9\x64\xf1\x68\x81\xc1\xef\xd2\xda\x3c\x3c\xa8\x1b\x09\x88\x43\x76\xca\x61\x32\xb7\x6c\xd9\x46\xe9\x24\xbd\xe6\xea\x93\xcb\x50\xa7\xb5\x55\xda\xa7\x37\x2c\x5f\xe5\xe0\xe1\x69\x84\x85\xb8\x3f\xf1\xd0\x45\x44\x06\x71\xc8\x4e\x39\x35\x55\x64\x8e\x9f\x38\xba\xea\xce\x70\x18\x46\x08\x3b\x9d\x5b\x84\xc4\xb2\xfd\x8d\xa0\xdc\x37\x68\xaf\x69\x9c\x88\xb2\xe5\xa0\x46\xb3\x20\xce\x47\x02\xe5\x12\xec\x54\x83\xe7\x05\x6f\xaf\x1f\xa5\xf3\x5d\x61\x6c\x54\x85\xbc\xa1\xe1\xe1\x6e\x25\x53\x7f\x5a\x78\x0e\xb6\x74\x97\xdd\x9e\xca\x3b\x87\x22\x4a\x56\x40\xdc\xff\xf6\x39\xf1\xf4\x12\xfd\x88\xb0\xd6\x9a\xfd\x28\x15\x84\x8d\x18\x5c\xee\x45\x9a\x21\x76\x1b\xd4\x1e\x75\xfc\xa6\xf6\xf9\x96\xf2\x99\x71\x61\xf5\x0d\xd2\x78\x79\xff\xd1\x8d\xc4\x3d\x00\x65\x98\x35\x51\xaf\xc5\x46\x26\x74\x0a\x55\xd4\xfd\x5d\xd1\xf6\x0a\xe7\x1b\xff\xc1\x44\x34\x99\xe6\xc9\x5e\x92\x63\xbb\x7f\xd0\x91\xa0\xf1\x3c\x01\x31\x1c\x8a\x0f\xb9\x01\x6a\xba\x96\xfe\xdb\x73\xe5\xdb\x6c\x6a\x16\x76\x7a\xd3\xea\x3b\x4b\x47\xc9\x0d\x74\xff\x6d\xd6\x1a\xf4\x68\xff\x58\xeb\x3a\x24\x6b\xdd\xed\x72\xe1\xb9\x20\xd3\x77\x52\x65\xde\x68\xab\xdd\xb8\xbd\xc8\xcc\x86\xcb\xa2\x74\x03\xd5\x0a\x4a\x09\x77\xe7\x5d\xf1\x1f\x9c\x85\xed\x13\x17\x41\xb2\xd6\x29\xf5\xeb\xae\xde\xf6\x94\xf7\x30\x51\xe7\x3a\xba\xd3\x1b\x04\x0e\xac\xde\x93\xc7\xca\x46\xca\x10\xde\x5a\xf3\x90\x6b\xbf\xef\x7f\x26\x5f\xe8\x91\xad\xf5\x4b\x39\x1d\x8d\x64\x77\x65\xf6\x43\x46\xdd\xdd\xe4\xaa\xd0\x72\xa1\x0c\x09\x89\x6d\xba\xfe\xe8\xf6\xb0\x2f\x2f\x08\xd9\xba\x5f\x9c\xc9\x79\x04\x64\x6b\xed\xcd\x28\xa4\x38\x7b\xad\x12\xc3\x5f\xc1\x1a\x2f\x2c\x17\xf7\xa0\xef\xaa\x73\x6e\xf2\x53\xf6\x1b\x49\x87\x4b\x4e\xad\x63\x85\x14\x67\xf2\xb4\xc8\xd6\xfa\xea\xa7\x3b\xda\x6f\x86\x1d\xd6\xf4\x84\x1f\xa4\x5f\x13\x99\x60\x1b\x5a\xea\x31\xc3\xfb\x4a\xad\xd5\xc1\x4b\xb0\x74\x77\x57\x20\xe4\xcc\xac\x35\x48\x43\x27\x2d\x98\xba\xd5\xad\x62\x78\x76\x04\x84\xfb\xf2\x66\x36\x75\xc1\x72\x92\xaf\xf0\x5f\xec\xb7\x1b\x7c\xe8\x27\xf9\xa4\x90\xf6\xb2\x22\x03\xba\x77\x10\xc4\xc1\x17\x4c\xcd\xcc\x98\xd5\xef\x18\xf8\x7c\x8a\x18\x02\x2b\xd9\x9c\x55\x22\xfd\x52\xa5\xce\xd5\x82\x7d\x57\xf5\x89\x3f\xbe\x5a\x77\x58\xab\x87\x2c\x3b\x80\x43\xb2\xd6\xeb\x4a\xe6\x61\xe4\x9c\x46\xb4\x1e\x68\xb5\x9e\x7d\x69\xe9\xfc\x4d\x0f\xd3\x7b\x51\x65\x92\xbe\xce\x6a\xc4\x10\x51\xe0\x28\x43\xd6\x1a\xc0\xc1\x17\x4c\xed\x50\x6f\xc6\x30\xbb\x98\xeb\xfc\x07\x46\x19\xce\xb8\x14\xad\x2f\xda\xc8\x3f\xcc\x67\xce\xee\x6b\xb5\xcf\x10\x7c\x8c\x5d\xa0\x87\xda\x77\x01\x38\x1f\x31\x14\x91\x7f\xe3\x12\xe5\x2b\x09\xc9\x7e\x58\xd4\x5f\xd1\x66\x7a\xef\xd7\xe3\x89\xa7\x71\x99\x5b\x22\x29\xdc\x6d\x3c\xbf\xde\x8f\xfe\xcd\x6a\x8c\x1d\xc2\x50\x81\x38\x44\x3b\x88\xba\x53\x59\x6b\xd0\xef\xfa\xc4\xb3\xc1\xa9\xfd\x6f\x2c\x12\x58\xbb\x08\xf4\x0b\x62\x6a\x36\x8d\x63\x92\x2a\xe2\xa3\x28\x15\xb5\x23\x3c\x2e\xad\x1a\xb8\x4d\xf3\x43\x23\x0b\xe2\xe0\x4a\xd0\xd2\x2b\xf9\xa1\x12\x31\x51\x33\xf4\x90\x1b\x6b\x0e\xad\x6e\xc1\x47\xfd\x5a\xd9\xa3\x43\x32\xae\xd7\xa9\xa4\x84\xc2\x56\x4f\x5d\x11\x71\x41\x1c\x5c\x09\x1c\x6f\x86\x62\xa5\xae\xea\xf4\x96\x8f\x33\xbc\x22\x2c\x2c\x3d\x50\x6d\xb5\xbe\xf7\x50\x40\x75\x99\x84\x44\x70\x25\x24\xba\x1b\xba\x44\x16\xc4\xc1\x95\xe0\x6a\x58\xf5\x25\xb2\xec\x3b\x06\x5a\x4b\xff\x47\xed\xf4\xb0\x2b\x9b\x5e\xfd\xea\xb2\x6a\x3d\x19\x11\xbc\xe8\xa1\xfb\x51\x2c\x50\xe7\x19\x10\x07\x57\x02\xce\xf9\x49\xd1\xa9\x30\x09\x16\xbc\xf8\xe1\xe7\xa3\x77\x2b\x46\x44\xc9\x74\x82\x39\x78\x32\xce\xe5\x5a\x65\xfb\x61\xe7\x14\x7f\x41\x28\x01\xc4\x41\x8d\x41\x4e\x65\xad\x41\x53\xed\x49\x4a\xb0\x73\xc7\x67\x55\xcf\x9b\x0d\x9e\x65\x18\xab\x9c\x1a\xd5\x62\xe1\x5f\x42\x4b\x46\xf1\x1b\x5f\x9d\xc1\x75\x3a\x57\x62\x62\x32\x0e\x75\x6d\x00\x70\x70\x25\x8c\x74\xa6\xf3\x26\xba\xa2\x51\xdf\xfd\x32\x31\x8f\x39\xfa\xfb\x1b\x3e\x83\xab\x95\x7d\x1e\x86\x76\xc8\xa8\x7f\x2d\x03\x33\x53\x2b\xd4\x5a\x00\xc0\xc1\x95\x50\xd2\x74\xa5\x48\xd8\x38\x54\x71\x6d\x8d\xc8\x70\x6a\xce\x21\xf7\xf7\x03\xb1\xeb\x55\xd7\x4b\x48\xde\xf1\x0f\xaf\x5b\xc9\xa0\x4a\x20\xe2\x82\x38\xb8\x12\xde\xc5\x3d\xa1\xd9\x7b\xa6\x85\xed\xf6\x92\x3b\xbb\x26\x86\x07\x23\x30\x8e\x4a\xe8\x3b\x95\xab\x54\xd0\x6c\x60\xf8\xda\xaf\xb7\x90\xb5\x06\x71\x70\x25\xa4\x66\xe5\x32\xf2\x62\xed\x8c\x65\xb1\x64\x57\xa6\x0a\x3e\x95\xd6\x9c\xbb\xe1\x90\xb9\x19\x9b\xc3\x38\x8f\xe1\x37\x36\x24\x6b\x85\xd8\x44\x83\x38\xa8\x05\xc0\xe9\xac\x35\x68\xf9\x3b\x49\x0a\xf9\x95\xd3\x63\x99\x18\xdf\x17\xbe\xef\xe7\xa8\xf9\xec\xce\xda\x77\x3c\x62\x0b\x73\xc7\x9e\xe2\x12\xd8\xbe\xa3\x4d\x4f\x4d\xb4\x85\x18\x02\x10\x07\x97\x42\x8a\x38\x5d\x70\xb0\xb9\x05\x79\x52\xe8\x9c\xca\x4b\x3d\x41\xd7\x32\x14\xf2\x20\x9c\xda\xfa\x75\xdd\x55\x3e\xdf\x00\x35\x9e\x47\x88\xb8\x20\x0e\x2e\x05\x5c\xa9\x3f\x02\x23\x7d\xac\xf7\xda\xea\x29\xba\x86\xb2\x31\x9c\xef\xfb\xd0\x84\x7e\x7d\x83\x79\xd7\x45\x95\x47\x7e\x90\x10\x5d\x10\x11\x17\xc4\xc1\xa5\xf0\x19\x3b\x57\x85\xf6\x02\x0a\xd9\x93\xaf\x9e\xe2\x22\x31\x3a\x6c\x91\xcc\x94\x8c\xdc\x95\x9a\x45\xe7\xdb\x99\x46\xa6\x2e\x4c\xe5\x20\xe2\x82\x38\xb8\x14\xe4\x8d\x8b\x04\xee\xd7\xd2\x5c\x90\x73\xc4\x21\x26\x78\x95\x37\x26\xcb\xa8\x8a\xe3\xd5\x72\xef\xf9\x82\x55\x5d\xe3\x4f\x8f\xf6\x42\x84\x14\x40\x1c\xd4\x02\xe0\x74\xd6\x1a\xb4\x25\x39\x49\x0a\x32\x9c\xb3\xcd\xbf\x5d\x75\x57\x2b\x85\x52\x0c\xba\x03\x9d\xde\xd3\x6c\xd1\x67\xe4\x88\xdb\x98\xb9\xa8\x48\x36\x71\x8c\x92\xa8\x23\x86\x00\xc4\xc1\xa5\x90\x7b\x8f\xcb\x96\x56\xd7\x75\x68\xf7\xd9\xba\x52\xfd\xeb\x72\xaf\xa3\xc4\xf5\xd7\xcd\x0f\x67\x88\xd1\xeb\xc5\xd8\xec\x0c\x19\x9c\x11\x71\x41\x1c\x5c\x0a\xc5\x13\x7f\x04\x43\x6b\x2b\x67\x1f\x47\x69\x0c\x6c\xdf\xec\x31\x4e\x13\x9f\x55\xb6\x47\x13\xa1\xbc\xa2\x97\xb1\xf7\x2a\x0a\x1b\xba\x96\x0d\xc4\xc1\xa5\x60\xee\x73\x3b\x5c\x2d\x36\x2a\xbb\xfb\xe6\xeb\x77\xbe\x23\xbc\xf5\xbb\xb7\xae\xa1\xb4\x32\x15\xe8\x18\xef\x33\xf1\xd8\xd5\x52\x71\x42\x6d\x93\x00\x1c\xd2\xfa\xf0\xe6\xb3\xc3\xc5\xd7\x1f\x87\x71\xc9\xfe\xde\xa0\xae\x7d\xa2\x69\xab\xb7\xad\xbc\xe0\x56\xea\xdd\x43\xa4\xbc\x59\x45\xe7\x58\x09\xdd\xd4\x0c\xe0\xa0\x59\xe1\x74\xd6\x1a\xe4\xb2\x4e\xb6\xd6\x84\x5b\x4d\x2d\xcb\x9f\x69\xfd\xb0\xfc\x8a\x17\xdc\x97\x3b\xd3\x72\xca\xde\x9d\x33\xf3\x5f\x2b\xa9\xb9\xad\x13\xb1\x5c\xf3\xea\x18\x61\x53\x41\x1c\xb2\xb5\xce\x0d\x8f\xb0\x95\xb6\xb5\xd9\xaf\x0f\xa6\xef\x6d\x21\x9d\x16\xad\xd5\xe6\x5a\x0f\x1a\x6b\x50\x7a\x91\x21\x8d\xe9\xe3\x52\xaa\x8e\x88\x0c\xe2\x90\xad\x75\x44\x78\x97\xc7\xdd\x9e\xcf\x1c\xf1\xa8\x92\xc4\xb5\x81\x94\x94\xf4\x8c\x5a\x1f\x32\xff\x34\x96\x1c\x55\x60\x35\x4e\xfc\x79\xd8\x89\x88\x0c\xe2\x90\xff\x67\x8c\x24\xe2\xcc\xb5\xa1\x69\x12\xb6\x3d\x1e\xa7\xc3\x1d\xbd\x72\x0f\x7c\x21\x7e\x7d\x3a\xc2\xa1\x0d\xb5\x2d\x81\x5f\x12\x6d\x74\x08\x6b\x0d\xe2\xfe\x77\x9c\xff\xb5\xd6\xf4\xf3\x21\x07\x6d\x1e\xbd\xea\x9f\x5c\x50\x0b\x47\x27\xb2\x51\xdd\x2f\xea\xa3\x38\xb5\x53\x58\xee\x3f\xcd\x46\x55\x28\xf8\x58\xf0\xaf\xb5\xae\x26\x98\xb2\xfa\xa3\xff\x04\xad\xca\x82\xd7\x25\xaf\x24\x8e\x31\x56\xc2\x4f\x50\xa2\x1a\x3b\x15\xf5\x12\x99\xeb\x40\xb5\xda\xbf\xee\xd7\x3a\x6a\x40\x6e\xd2\x34\x5f\x0a\xeb\xe3\xfa\xd1\x56\xc2\xf2\x40\x0f\xc6\x39\xe5\xf4\x67\x33\x3f\x3d\x85\x3f\x1e\xa3\xa1\x27\x3e\xfa\x6f\xb3\xd6\xa0\x47\xfb\xc7\x5a\xa3\x88\xc3\xfd\x17\x01\x7a\x20\xca\xb7\xbf\xe6\xe5\x8d\xd5\x15\xf6\x7e\x4f\x89\xbe\x45\xb3\x3d\x60\xe9\x8f\xb7\x12\x2a\x7f\xe9\x77\xd5\x2a\xbb\x72\xec\x2c\xac\xb5\x27\x92\xb5\x56\xbb\xc8\x6a\x2c\xf5\xe9\x6d\x37\x4e\x90\x1e\x63\xfd\x9f\x70\x37\x6e\x47\x52\x33\x4f\x6e\xd5\x30\x12\x83\xa2\x6e\xb9\x50\xc9\x89\x33\xf9\x7c\x7c\x1b\xc9\x6c\xee\xf4\x15\xd6\xf1\x87\x58\xb1\x55\xbd\x12\x66\xd7\xfe\xfa\xcc\xc2\xb7\x82\x46\x8c\x6c\x9f\x43\x30\x58\xc8\xf5\xea\xf1\xc5\x8d\x97\x67\xf2\xf9\x18\xd9\x5a\xcf\x45\x3e\xce\x0a\x68\x55\x4b\xb1\xb3\x6a\xfa\x4a\x2e\x55\x78\x51\x3b\x66\x82\x4a\xad\xd3\xd2\x9f\xe4\xe1\x52\x90\x9d\xca\x02\xf9\x99\x3c\xad\x2d\xf2\xfd\xbc\xa2\xaa\x5b\x47\x6b\xe4\x1b\xcf\x8f\xb3\x08\xca\x8d\xd4\xe5\xa3\x3f\xf3\xd1\x6a\x9a\xf3\x51\x4a\x5e\x08\x31\xdb\xf2\xcf\x2a\x3b\x33\x6b\x0d\xd2\xd0\x89\x07\xbc\x13\x73\xb9\x5e\x72\x91\x60\x58\x08\xab\x04\xee\x0d\x0c\x86\xad\xef\xf3\x7c\xbb\xf3\x42\x4f\x0f\x5f\x64\x87\xbe\xbb\x97\xfc\x03\x74\xc0\x1b\xc0\xc1\x17\x4c\x76\x87\x78\x49\x43\xa9\x9b\xe2\x3f\x98\x62\x8a\x2e\xe9\xe9\x14\x47\x87\x7e\x48\x6d\xc2\xd9\x2a\x37\x49\xd6\xa9\x0d\xfd\xf4\x0b\xea\xb8\x0d\xe2\xe0\x0b\x66\xf9\x01\xee\xd4\x97\xf7\x53\x95\x07\x06\xdd\x2c\xab\x21\x5c\x7b\xf6\x84\xe3\xb7\xbf\x39\xa1\x2d\x8c\xbc\xbb\x3c\x77\x9e\x50\xea\x35\xd4\xcc\x1c\xc0\xc1\xe3\x0e\xfa\xa3\x8a\x32\x0d\x31\xbc\x56\x4b\xc1\x90\xf9\x9d\x94\x63\x2f\xf9\x91\xf3\x39\xad\x17\x6f\xe7\x17\xd4\xbb\x4a\xe5\x1f\xed\xa0\x5b\x3c\x41\x1c\x7c\x7c\x99\x2e\x14\x44\xae\x4b\xe7\x78\x8a\xbc\x37\xae\x8e\xfd\x82\xbd\xe3\xe8\xe1\xa3\x42\xfa\xb8\x65\x28\xc3\xfb\x56\x48\x0f\x06\x3f\x33\xc2\x50\x81\x38\xa8\x2d\x83\xf8\x69\xb6\x4e\xa0\xdf\xf5\x49\x4a\xf8\x31\x77\xae\x15\xad\x8d\xa7\xdd\xa4\x62\xe9\xa7\x84\x45\x8c\x88\xfd\xd5\x90\xf9\x4b\x6f\x6a\x3b\x3f\x7e\xda\xa1\x5c\x51\xd3\x85\x7a\xaa\x81\x38\xb8\x12\xc2\x59\x5b\xfe\xc8\x12\x29\xec\x4b\x8e\x89\x52\x37\x1e\xec\xcb\x2a\x35\x3e\xeb\xb9\xf6\xe8\x4b\xdb\xaf\xe2\xd7\x5f\xf5\xb9\x0a\x09\xa1\x36\x78\x00\x0e\xfe\xc6\xba\x6b\x8e\x2f\x3f\x4d\x16\x14\xc2\xbd\x3c\x78\x91\x53\xdb\xef\x9d\xdc\x6e\xb0\x4c\xc1\x6d\xd1\x99\xd9\x76\xff\x97\x16\x66\x09\xd1\x50\x0d\x27\x80\x83\xc7\xbd\xff\x05\xb5\xa0\xfb\xf7\x1f\x63\x52\x9c\x39\x52\x96\xd0\xfe\x84\x88\x3f\x6f\xdd\x6c\x32\x4c\xf2\x69\x2f\xf5\x69\x06\x28\xde\x6d\x46\xc4\x05\x71\xf0\xf1\xfd\xbe\x6f\x48\xb2\x57\xaf\xdf\x4a\x69\x62\x4a\xdf\x2b\x42\x5e\x9b\x8d\x8f\x9e\xe1\x43\x42\x5f\x28\xad\xdb\xf3\x52\xb6\x16\x67\x1d\xa1\x04\x10\x07\xb5\x65\x38\x95\xb5\x06\x4d\xb5\x27\x29\x21\x63\x42\x23\x84\x4b\x3d\x4a\xfd\xc7\xa3\xb1\xab\xa2\x57\x93\xc5\xeb\xc3\x65\x5e\x11\x0b\xca\x47\xbe\x1d\x66\x95\x5b\x5d\x99\x08\x83\x1a\x0c\x02\x38\xb8\x12\xf8\x89\xa5\x27\x4c\x7f\xa0\x25\x16\xd3\x5e\x26\x60\x1b\x3b\x17\x1e\x16\x78\x9c\xb9\x20\xef\x3b\x3e\xaa\x99\x99\x77\xb7\xd1\x61\x0a\x11\x17\xc4\xc1\xdf\x98\x2a\x4f\x68\x41\xc8\x91\x78\xe5\xef\xf5\x19\xb2\xaf\xeb\x4d\xb3\xa6\x46\x9b\x42\x58\x92\x5a\x13\x8f\xb7\xf3\xe4\x87\xf7\x66\x2d\xa0\xef\x48\x00\x0e\x1e\xb7\x8a\x90\xee\xc2\x0c\x8e\x74\x96\x12\x93\xd2\x75\xb1\x89\xeb\x8f\xe3\x97\x58\x15\x3a\x75\x2b\x30\xf9\xdd\x2d\x2a\xbe\x4a\xab\xe1\x21\xe2\x82\x38\xf8\xf8\x2e\xa6\x8f\x51\x8f\xc4\x08\x7f\x17\xba\xf1\xbe\xb4\x39\x4d\xfa\x31\x47\x1e\x6a\x6c\xcb\x75\x71\x82\x15\x81\x89\xae\x08\x99\xae\xa7\x50\x4b\x35\x00\x07\x15\x60\xdf\x3e\x95\x9f\x02\x2d\x7f\x27\x36\x5a\xbc\x94\x45\xd9\x90\xe9\x9c\xdc\xe3\x72\x9d\x4a\xbd\x2e\x54\x2a\x54\x62\x7e\x3a\x92\xcb\x61\x7c\xcf\x37\x40\xe8\x85\x82\x2a\xd4\x99\x02\xc4\xc1\xa5\xd0\x45\xdc\x4e\x39\x8f\x46\x1e\xeb\xad\xa7\x87\xf1\x2d\xfd\x65\xbf\x2d\xda\xc3\x7b\x84\x6f\x68\xe9\x86\x12\xb6\xdf\xe8\x13\xfa\x8b\x22\xe2\x82\x38\xf8\x2b\xcb\xf5\x18\xee\xb8\xb8\xc2\x17\x81\x5e\xc7\x6e\x75\x1e\xfd\xda\xac\x7f\x7b\x35\x2d\xf9\x6c\xe0\xfd\x45\x3b\x71\x5a\xee\xd7\x12\x50\x97\x21\x10\x07\x8f\xab\xf7\x57\x32\x6a\x39\x6a\xc4\x7a\xb6\xf8\xae\xfe\x2c\x45\x01\x1e\xfe\xde\xb7\xf8\xb8\x52\x0a\xd1\x09\xf9\xe9\xac\xca\x0b\x1a\x50\xbd\x12\x88\x83\x8f\x2f\x83\x2d\x83\x20\x7b\xc0\x15\x2a\xf4\x7b\x93\x31\xf8\xaf\x98\xce\xd7\xa1\x65\x1b\xd9\x38\xab\xa2\xdb\x68\x1a\x70\xde\x93\x62\x60\x44\x48\x01\xc4\x41\x05\xd8\xa7\xb3\xd6\xa0\x2d\xc9\x49\x52\xd8\xf7\xaa\xc6\x38\x22\xe3\xf8\x7d\x23\xaa\x9e\x22\xf3\x27\x83\xa0\xeb\x92\x26\xa7\x1a\xc3\x53\x3d\xf9\xfe\xb9\xaa\xc3\x97\xbd\x2d\x88\x21\x00\x71\x70\x29\x98\xc8\xa9\x30\x79\xe6\x3e\xdf\xe5\x7a\x86\x2e\x28\x2b\xe6\x38\x97\xee\x78\x3e\xea\xbb\x9d\x5b\x09\x63\x48\x26\x65\x11\x2d\xdf\x33\x44\x5c\x10\x07\x7f\x65\x19\x8f\x25\xa8\x30\xdb\xff\xe8\xd9\x12\xea\xaf\x78\x09\xf9\x1b\xa6\x92\xb8\x18\x44\x51\x9d\xa7\x56\x20\x69\x0a\x2b\x23\x5c\x0d\x81\x66\x31\x00\x07\x8f\xdb\xf6\x8c\x17\x75\xe7\x7e\xff\x40\x8b\xa3\x86\x46\xe5\x97\x0f\xbb\x5d\x7d\xe7\x12\x29\x9c\x2a\x3d\x0b\x62\x83\x2b\xfc\x7e\xfe\x36\x82\x6a\xf1\x01\x1c\x7c\x7c\x95\x45\xba\x15\xa6\x77\x75\x22\x6a\xe6\xc7\xa6\x45\x26\x2e\x8d\x1b\x64\x2f\xcb\x2b\x1b\x6b\x18\xa1\xa9\x33\x1b\x34\xa5\x1f\xcc\x22\xa4\x00\xe2\xa0\x59\xc1\xf6\x54\xd6\x1a\xe4\xb2\x4e\xb6\xd6\x18\xfb\x58\xf8\x7d\xe6\x31\x94\xa2\xd2\xc1\xe9\x37\x3f\xa6\xe7\x44\xea\xb3\xa7\xd7\xa8\xfb\x97\x75\x90\xe7\x12\x3b\x89\xa3\x98\x21\x6c\x2a\x88\x43\xb6\xa9\x97\xd9\xfb\x42\xa4\x43\x6a\x44\xd9\x26\x28\x67\xba\x09\x24\x28\x8a\x1f\xf5\xbd\xc2\x9a\x30\xf4\x30\x0c\xbc\x5d\x20\x8b\xcb\x2c\x87\x88\x0c\xe2\x90\xad\x75\x58\x7c\x96\x97\xe5\xe8\xa1\x04\x31\x1b\xfb\x88\xef\xdb\xfa\x17\xb7\xd4\xcc\x31\xdc\x48\x17\xe5\xdd\x0b\xca\xe6\xc7\x8d\xf5\xdc\xa1\xef\xe1\x00\xce\x47\x02\x05\x05\xf5\x3f\x22\xd7\xdf\x6e\x3a\x67\x31\x19\x60\x2e\x25\x32\xa9\x90\xf9\xae\x40\x57\x2b\x8d\x9e\xe8\xbd\x6c\xba\x09\xf5\x2c\xc1\x63\x05\x26\x3d\x47\x84\xb5\x06\x71\xff\xe7\x7a\xd4\x4b\xff\x5a\xeb\xdb\xe6\x9e\x9c\xef\x96\xfe\x60\x31\x7b\xd2\x72\x7f\x61\x20\xd1\xf6\x92\xd3\x7f\x9d\xff\xce\xc3\xce\xdb\x67\xb6\xc8\xce\x08\x7f\xe2\x5f\x6b\x5d\x1c\x53\x24\x64\x7b\x4f\xca\xd9\xfe\x17\xfd\xde\x7b\x83\x4e\x95\xf1\x63\xbe\x96\x1e\xb3\xb7\x38\x05\x24\xd8\x03\x2b\x1a\xfb\x46\xff\x9e\x14\xc9\xe9\x49\xab\xbb\xbf\x22\xe7\xae\xf5\x93\x80\x3e\xbd\xca\xe5\xa1\x43\x98\x76\xa2\xc6\x86\x9a\x66\xa5\x6b\xce\xd2\xac\x6d\xf1\x7f\x9b\xb5\x06\x3d\xda\x3f\xd6\x5a\x04\xc9\x5a\xc7\x56\xdc\xdc\x4c\xfb\xab\x56\x2d\x28\xec\xbf\xed\xfe\xfb\x33\x93\x32\xf1\xf9\xd2\xbb\xc4\xb8\xfd\x33\x2e\x4b\x13\x29\xf3\xdf\x79\xce\xc2\x5a\xd7\x21\x59\xeb\xa7\x61\xf9\xf5\x9b\xfb\x72\x2f\xbe\x67\xda\xa3\xe5\xd7\xd3\xc7\x35\xd4\xa7\xce\x7d\x4a\x6b\xbf\xb0\x6b\x64\x99\xdf\xe7\x78\x67\xe0\x4c\x3e\x1f\x23\x5b\x6b\x5d\x0e\xbe\x9a\x4a\xdd\xf1\x5f\x43\x28\xf1\x8a\x93\x82\x6a\xbc\x0d\x2d\x74\xd1\x19\x05\xfa\x8f\x97\x52\x6e\xb0\x77\x63\x15\x63\x9f\xc9\xe7\x63\x64\x6b\x5d\x81\xf1\x50\xb4\x03\xd7\x62\xa8\xd7\x95\xe4\x0d\xf9\xbc\x97\x03\x3e\x35\x2f\xb6\xc9\xcb\xfb\x02\x94\xa4\xc5\xa6\x46\xbc\x37\xd1\xce\xe4\x69\x91\xad\x75\x9e\xe2\xaf\xd1\xa7\xad\x3f\x35\xe7\x83\x1f\xd1\xa3\x79\x55\x3c\x94\xf3\xe8\xfb\x84\xe1\xfa\xfa\xc8\x4b\x2f\x5b\x0a\xd7\xa5\xb0\xfb\xcc\xac\x35\x48\x43\x27\xee\x9d\x58\x25\xe9\x2f\x3d\x08\x55\xcb\xe9\x41\x97\xa8\x58\x99\x79\xb8\xdb\xf9\x43\x0a\x1b\x2f\xe5\x87\x49\xa6\xa6\xc8\x31\x2f\x3d\x3a\xb4\x77\x02\x70\xf0\x05\xd3\xfb\x8a\x20\x79\x87\x1f\x0e\xda\x86\x72\xea\x8b\xe5\x7b\xf6\xcf\x2e\x7c\xbd\x4c\xfe\xde\x93\xe7\xee\xe7\x64\xea\xe8\xc5\x3b\x73\xfa\x88\xb8\x20\x0e\xbe\xb0\xc9\xa8\x48\x28\xcc\x79\xce\xf1\xac\xae\xd5\x28\xb0\x5c\xf9\xda\xdb\xde\x31\xa9\xb4\xba\x91\x16\x56\x29\x75\x51\x71\x24\x85\x95\x04\xca\x9d\x03\x38\xa4\x4e\x8a\x9e\xaa\xec\x22\xe8\xf7\x6e\xe4\x8c\xfc\xaa\x22\x69\x66\xdb\xa5\xd5\xf7\x71\x96\xd8\xf9\x8c\xf7\x18\x5f\xe9\x30\xf2\x82\x09\x36\xd4\x49\x11\xc0\xf9\x88\x5d\xfa\xcf\xca\x61\x39\x9a\xec\xa1\x80\xba\x42\xc2\xdc\x41\x3f\x5b\x82\xbd\x3f\x23\xfa\x4f\x5e\xca\xc4\x87\xed\xf6\x1e\x6f\x0a\x7e\xe9\x73\xc0\x41\x18\x2a\x10\x07\x55\xd1\x9f\xca\x5a\x83\x7e\xd7\x27\x29\xe1\x67\xa3\x09\xbb\x5d\xa8\x2b\xd6\x47\xbe\x84\x12\x0d\xcf\x91\xcc\x48\x77\x5e\xca\x82\x6a\xa5\x86\x92\xc1\xe0\xbb\xf9\x96\x64\xc3\x88\x11\x00\x71\x70\x25\xa0\xf4\xf7\x0b\x9b\xfe\xfe\x90\xa5\x4f\xdf\x1a\x10\xbc\x3a\xe8\x4a\xfb\x82\x41\xbc\x90\x9f\xa1\xf4\x58\xf1\xe0\x8e\xdf\xda\x6e\x37\x22\x2e\x88\x83\xbf\x31\x69\x8b\x5f\xe8\xf4\xfe\x49\xa2\x0c\x24\x29\x68\x6b\xf8\xb5\xed\x2e\xea\x25\x55\xe7\xdc\xd5\xe6\x93\x3e\x1d\x84\x64\xb8\xce\x51\x23\xe2\x82\x38\x78\xdc\xa4\x35\xae\x73\xc4\x38\x77\x1f\x64\x0e\xc6\x6a\x45\x5c\x7a\x60\xd1\xad\x4e\x7a\x34\x31\xc9\x53\xe8\xc7\xba\xdd\x29\xe3\x1a\x00\xdd\xc8\x07\xe2\xe0\x4a\x98\xc1\x0b\x32\x34\x90\x0f\x21\x21\xe5\xf2\x94\x4e\xa7\xcd\xe2\xcb\x14\x3b\xfe\x7a\x0b\xa5\x33\x6e\xb1\xa8\xf6\x67\xcc\xf5\xf9\x0e\x84\x12\x40\x1c\x54\x45\x7f\x2a\x6b\x0d\x9a\x6a\x4f\x52\xc2\x70\x8e\x12\x1b\xfa\xb3\x25\x65\x35\xa5\xb9\x85\x70\x7f\x37\xb3\x73\xd7\x53\x68\x32\x78\xcb\x07\x53\x9a\x54\xf3\xab\xb4\x43\x29\x10\x23\x00\xe2\xe0\x4a\x78\x9b\xfb\x32\xab\x37\x0d\x2d\x4d\x2a\x22\xee\x07\xd7\x51\x89\xf1\x81\x38\x97\x4c\xf6\x15\xb6\x86\x36\x47\x46\xc2\x8b\x3e\xc7\xd0\x51\x4a\x10\x07\x7f\x63\xc9\x5f\x0c\x49\x17\x1a\x2a\x3d\x0b\x18\xbe\xf8\x8b\x48\x37\x8d\xe5\x06\x2f\x0f\x04\xf0\x84\x8c\xe2\x7e\xf1\xc1\x2a\xde\x4e\x4d\x47\xc4\x05\x71\xf0\xb8\xd1\xf9\xd3\x05\xfe\xb7\xb7\xb5\x97\x6a\x78\x79\xc4\xe5\xc9\x2f\x53\x84\x96\x3d\xc1\x0a\x11\xe9\x37\x22\x3b\x67\xd4\xdc\xde\x02\x29\x01\xc4\xc1\x95\xa0\xb7\x3d\xfd\x49\x14\xf3\xb3\xa8\x25\xbf\xe9\x60\xba\xd8\xdb\xed\x34\xa2\x11\x67\xf9\x46\x66\xcb\x5e\xf6\x14\x59\xbe\xe5\xde\xbb\x88\x4d\x34\x88\x83\xea\x65\x4f\x67\xad\x41\xcb\xdf\x49\x52\x40\x4b\xd2\xbd\x84\x3a\x38\xe6\x9f\xc4\x2b\x81\x39\x60\xab\x19\xd1\x35\x1b\x69\x58\x81\x8d\x99\x28\x18\x16\xf2\x52\x8e\xbe\xac\x17\x31\x04\x20\x0e\x2e\x05\xb6\x3f\xce\x93\x84\xe9\x2d\x12\x42\x41\xfd\xad\xea\x54\xd1\x1b\xbc\x85\x14\xb3\x64\x4e\x4f\xf4\xc5\xfe\xbe\x64\x6d\xd5\x51\xfc\x8d\x88\x0b\xe2\xe0\xaf\xcc\xb4\xa2\xd8\xac\xcc\xff\x87\x37\x7b\xf7\x08\x7a\x9c\xf0\x9f\xf3\x77\xf5\x72\x70\xe3\xcd\x2b\x23\xec\xbf\x96\xa0\xfc\x1c\x62\x85\x4a\xb2\x41\x1c\x52\xfb\xbc\x84\xe0\x27\x58\x9f\x2b\x06\x2c\xee\xa4\x8a\x68\xae\x6b\xe1\x3d\x5d\x23\xce\x21\xd4\xbd\x43\x8c\x97\x15\xec\x23\x7b\xce\x06\x9a\x1c\x41\x1c\x5c\x0a\xe9\x9a\x42\xf3\x36\xc9\x9f\xbf\xba\x0a\x19\xac\xc5\x98\x90\xf6\xac\xc7\x5c\x63\xec\xa3\xd8\xf8\x90\x83\x13\x49\xf5\x9b\x9f\x2e\x09\x21\x05\x10\x07\xd5\xcb\x9e\xce\x5a\x83\xb6\x24\x27\x49\xe1\xf9\xdb\xdd\xfc\x5d\xe3\x4a\x07\x95\xaf\x5f\x7c\x1d\x3e\xfb\xbd\xb1\xc4\x10\x45\x7b\xfe\xb5\x79\xc4\x6f\x4a\xf6\x12\x23\x91\x14\xf4\xeb\x05\x71\x70\x29\xfc\xbe\x31\x5c\xaa\x1e\xa4\x3f\xfc\xec\x20\xe2\x21\xd5\x5d\xe2\xf2\x47\xdf\x92\x92\x9e\xef\xb4\x2c\x56\xb6\x15\xbb\xba\x44\x7f\x87\xae\x91\x04\x71\xf0\x57\x66\xa6\x73\x84\x1d\x86\xdd\xd6\x65\x57\xc1\x4c\xcd\xfd\x6a\x19\x23\xfd\x61\xfc\x5a\x47\xc5\x34\xc9\x13\x73\xa2\xe4\x84\xc7\x34\x1c\x88\xb8\x20\x0e\x1e\xd7\x9c\xcd\xe2\x77\xb2\xa9\x87\x20\x0f\x29\x3e\xe1\xe6\xc5\x2c\x77\xfb\x63\x35\xf2\xb2\xcd\x3c\xdc\x58\x63\xd9\x1f\x17\xcd\x4a\x2f\x43\x5f\xad\x01\x1c\x5c\x0a\xa9\x02\x58\x7e\x4d\x22\x3c\xc4\x53\xd7\xc3\xed\xdd\xe8\x65\xc3\x45\x7d\x2c\x64\xa7\xac\xbf\x27\x7e\xa7\x37\x78\x32\x95\x22\x9c\x07\x9d\x65\x01\x70\xd0\xac\x70\x3a\x6b\x0d\x72\x59\x27\x5b\x6b\xf7\xb0\x94\x17\x52\x22\x5d\xeb\x06\x2a\x1f\x57\xe5\xd8\x1b\x5c\xed\xb3\x51\x2e\xdf\x34\xf0\x23\xb8\x53\xb9\x5a\x9d\x55\x31\x1a\x80\xb0\xa9\x20\x0e\xd9\x5a\x7f\xea\x2c\x5c\xc6\xf4\x7b\x1a\x23\xf1\x94\xba\xc8\xd5\x76\x7d\x6e\x4f\xea\x5a\x3f\x67\xce\xba\xb8\x83\xa2\x6f\x7f\x29\xda\xc5\x3b\x88\xc8\x20\x0e\xd9\x5a\x3f\x5f\xf0\x71\x19\xed\xfe\xae\x1d\xa6\xf0\x1a\xa3\xd6\xe8\x52\x57\x4f\x1c\x4e\x47\x7c\x46\x05\xce\x43\xd3\x47\xb7\x08\xa9\xf4\xcb\x11\x91\x41\xdc\xff\x18\xe0\xff\xec\x50\xf8\xe2\xdc\x48\x70\xd4\x74\xa0\x38\xd1\x4e\xaa\xb7\x86\x9a\xd2\xc3\x88\x66\x0c\xd3\xc8\x73\x9a\x33\x3d\x55\x5a\x4a\x99\xaa\x1a\x84\x08\x6b\x0d\xe2\xfe\x8f\xb5\x46\xfb\xd7\x5a\xa7\x85\x30\x93\xb6\x6c\x8a\x04\x60\x3e\xac\xf8\x9e\xda\x28\x2e\x60\xcd\x2e\xc5\x48\x7f\x93\x3e\xe1\xe8\x62\x85\xe4\xf8\x7a\x25\xdd\xbf\xd6\x5a\x92\x91\xc5\x83\xf5\x01\x6f\xaf\xf6\x8d\x5b\x57\xfa\xb0\xc5\x86\x0a\x5e\xaa\x6d\x31\x3d\x6a\xd3\xf9\xa0\x2f\xb4\x5f\xf1\x79\x1b\xe3\x1f\xb4\x47\xee\x09\x2f\x7d\x87\x6f\xf6\x27\xed\x05\x9b\xb6\xf3\x98\x4a\x3c\x3d\x8d\xfe\x87\x52\x28\x1f\xc3\x4c\x53\xb7\x0f\x89\x38\x3d\xff\xdb\xac\x35\xe8\xd1\xfe\xad\xb5\x46\xb2\xd6\x83\xe4\xb9\x84\x12\x11\x49\xcb\x89\x7d\x45\x1e\x1f\x5f\xa1\x61\x3f\x6b\x18\x4b\xca\x3a\xb6\xf2\x7c\xfe\x77\xb2\xb0\x54\xb8\xff\x4c\xbe\x5a\xa3\x28\xc0\xff\x6a\xf5\x8d\x3c\xa5\xaa\xdb\xf8\x89\x0b\x81\x6f\x9e\x3c\x8f\xb8\xe7\x36\xbd\xe5\x21\xae\x43\x95\x57\xf9\x64\x8e\x7d\xc3\xcd\xe4\x71\xcb\x99\x7c\x3e\x46\xb6\xd6\x73\x3e\x35\xc5\xab\x46\x09\xfe\x2c\xf7\x31\x93\x9e\xdd\xf4\xf3\x58\x8a\x5d\xcd\xcc\xba\x53\x26\xfd\x9a\x5f\xc6\x43\x32\xd8\x78\xe5\x4c\x3e\x1f\xab\x21\xfd\xd9\xb8\x88\xc8\x88\x4e\x99\xee\xd8\x79\x81\xda\x14\xd9\xa5\xd7\x9d\xd8\x5f\xd3\x26\x64\x7f\xa7\xfc\x62\x7d\xbe\x6c\x26\xb6\x78\xfd\x4c\xee\xa7\xf4\x44\xb6\xd6\x6d\x97\xaf\xcc\x8b\x26\x35\x6b\x93\xe0\x32\xdd\xef\xf3\xea\xb5\x79\x20\x7c\x99\x4c\xc0\xee\x3e\x65\xa2\x52\xaf\xfe\xc1\x8b\x06\xbe\x33\xb3\xd6\x20\x0d\x9d\xb4\x60\xb6\xe9\xa6\x56\x47\x38\xa4\x2b\x8b\xcb\x38\xff\xcc\x0e\xa2\x31\x76\x7a\x63\xc3\xcc\xe5\xc8\xb9\xa6\x3e\xf7\x33\x3d\x8b\x8d\x45\x1a\xca\xc1\x02\x38\xf8\x82\x29\xd5\xbf\xb8\x64\xf8\x71\xf4\x57\xf1\x44\x4d\xaf\x6c\xd4\x71\x0b\x3d\x8b\xb4\xc9\x2f\xa3\x0d\xa6\x72\x21\xe2\xb5\xab\xef\x9a\x8d\x11\x71\x41\x1c\x7c\x61\x13\x55\x9a\xa9\x5c\xe7\x8d\xcb\xff\x63\xfc\xc1\x27\x8d\x3c\x25\x99\x1d\x6f\x5d\x62\xf5\x13\xc9\xd3\x46\xfe\xc2\x1b\x2f\x46\xc3\xc9\x11\x71\x41\x1c\x3c\xee\x6e\xb5\x55\x47\x6c\x6b\xb5\x6b\x21\x01\x5b\x57\x7c\xda\x32\x67\xda\x5c\x4f\x19\x97\x43\xba\xff\xf5\xf4\xd8\x1d\x6e\xf6\x0b\x50\xd7\x6c\x10\x07\x3f\x3e\xb6\x87\xa2\xaf\xdb\x94\x28\xa3\x5e\x65\xf3\x72\x94\xdc\xad\x4f\xb9\xdf\x90\xf8\x2a\x9d\xcd\xad\xee\x23\xd7\x39\x27\xf5\x58\x2b\x3c\x84\xa1\x02\x71\x50\xad\xf5\xa9\xac\x35\xe8\x77\x7d\x92\x12\x78\x7e\x39\x16\x18\x39\x93\x5b\xfc\x78\x44\x5d\xd6\xf5\x63\xb4\xa7\xfa\xfa\xdf\x4c\xfa\x10\x6e\x4c\x26\xf3\xe3\x35\x86\x21\x16\x1c\xa8\xfc\x11\xc0\xc1\x95\xa0\x9d\x5a\xe8\xb7\xfb\x6d\xab\xa3\x31\xda\xfd\xd9\x30\xff\x54\xa5\xef\x8d\xfa\x0d\x8f\xb4\x32\x4e\xc6\x52\x43\xef\x6f\xd1\x69\xd0\x25\x6b\x20\x0e\xfe\xc6\x9c\x45\xeb\x5b\xf2\xfe\x5c\xe7\x32\x13\x09\x9f\xf0\xe5\x62\x47\xa3\x36\x93\x7f\x9f\x4c\xbb\x45\x95\x6c\xf4\x91\xbb\xd9\x29\x06\x32\x54\x20\x0e\xe9\xab\xc4\xe8\x47\xe9\x63\xc7\x84\x8c\xfa\xdd\x77\xbe\xd1\x42\x8a\xca\xf7\x7f\xb5\xfd\xd4\x34\xd5\x7b\xd5\xd7\x1c\x12\x23\x89\xd9\x0a\x29\x0c\xc4\xc1\x95\xf0\xc2\x8e\x49\xfc\x96\xa5\x09\xcf\x46\xae\xad\xd6\xfc\x4d\xd5\xf5\xfc\x8d\xa8\xee\xcd\x97\xfd\xaf\x32\xdd\x2a\x3f\xa6\x0c\x5e\x20\x46\x28\x01\xc4\x41\xb5\xd6\x0a\xa7\xfa\x54\x09\x98\x6a\x4f\xbc\x33\x34\xfe\xc9\x39\xde\x59\xd6\xe9\x39\x2f\xa6\x37\xd5\x56\x94\x61\xf6\xb7\xef\x35\x67\x95\x12\xb0\x06\x3c\x08\x45\x33\x60\xed\xfb\x09\x55\x9b\x03\x38\xb8\x12\x7c\x2f\x9b\x4b\xde\xb1\xf1\xd4\x98\xd8\x8e\x49\xde\xbf\xd0\xd8\x1f\x73\x69\xe1\xd5\xd2\xd8\xad\x03\xd9\x80\x74\x9c\xd6\xfb\x6e\xd0\xc9\x10\x10\x07\x7f\x63\x8a\xbd\xce\x73\xa6\x97\xaf\xb8\x5e\xe8\x69\x6f\xee\x27\x9a\xed\x31\xc6\x65\x9c\xf8\xf6\x60\xa0\x53\xc0\x98\x3c\x8c\xac\xb1\x15\x6a\x24\x07\xe2\xe0\x71\xe5\xf3\xa8\x85\xc4\x37\x3b\x4b\x2c\xf5\xc5\x47\x43\xd1\xfa\x3e\x14\xf7\x3a\xe2\xa4\x36\x14\xe9\x9d\x9f\x92\xb2\xca\x96\x9b\x87\x8e\xc0\x82\x38\xb8\x12\xc8\x73\x86\x13\xe6\xfa\xfc\xd7\x18\x2e\x54\xe2\x93\xb3\x05\xe4\x66\xea\xb4\x34\x6c\x3d\xb7\xc0\xca\x25\xc5\xa0\xd3\x74\x73\x1d\x46\x6c\xa2\x41\x1c\x54\x55\x79\x3a\x6b\x0d\x5a\xfe\x4e\x92\xc2\x2b\xee\xe0\x15\xbb\xc7\xfc\x2c\x41\xfe\x65\xd7\x89\xec\x2f\x59\x54\x6e\xc4\x5e\xec\x0a\x1a\xec\xde\x4e\xd4\xaa\x22\xa3\xd8\x46\x43\x0c\x01\x88\x83\x4b\xa1\xca\x6e\x30\xd3\xe2\xa3\xde\x51\x6e\x47\xd8\xbe\x1e\x56\xaf\xe6\x7e\x34\xf5\x9e\xa3\xf5\x5b\xa7\x09\xf4\xe5\x4d\x93\x79\xa5\x52\xe8\x40\x00\x80\x83\xbf\xb2\x87\xe4\xdc\xdc\x52\xba\x5d\x6a\xad\x2f\xb3\x3e\x94\x0c\x94\x75\x7c\xef\x76\x89\x28\xbd\x71\x3f\x4a\xde\x51\xc8\x2a\x10\x1d\x1f\xaa\x0d\x07\x71\xf0\xb8\x93\xe1\x05\xc4\x49\x93\xf6\xec\x64\xde\x0f\x3e\x05\x8f\x34\x09\xe4\xa8\xec\xa0\x2d\x84\xbc\x6d\x8f\x32\xf7\xa3\x4b\xf7\x31\x80\xae\xbb\x05\x71\x70\x29\x50\xc8\x91\xd3\x97\xc9\x1d\x44\x5e\x14\x19\x4c\x4c\xd3\x6a\x66\x6d\x19\xbe\x2a\x1f\x9a\xbe\xe2\x5a\xa4\xeb\xdc\xa1\xde\x8a\x31\x85\x90\x02\x88\x83\x6a\xad\xd5\x4e\x25\x05\xd0\x96\xe4\x24\x29\xec\x60\xb0\x8f\xbf\x25\xed\x59\x6f\x91\x5e\xc1\x25\xf3\x6f\xd4\xa2\xb6\xe5\x77\x0e\xa9\x79\xc5\x44\xf8\x4a\x8c\x42\xf0\x97\x28\x74\x99\x00\x88\x83\x4b\xa1\x33\xb7\xb8\x55\x75\x13\x83\xf6\x49\xf0\xe2\xc6\x34\x37\x36\x61\xc3\x9f\xae\xb4\xf9\x4f\x3e\x4b\x1c\x6b\x75\xa1\x4f\x9f\xa8\x43\x07\x02\x40\x1c\xfc\x95\xdd\xe2\x30\x5f\x91\x99\x49\xa8\xd1\x4d\x25\xe2\xff\xbe\x57\xf1\xdc\xc3\xa1\xb6\x52\x4f\xe3\xf7\xc4\xfa\x81\xeb\xf0\x3b\x29\x5d\x68\x1e\x07\x71\xf0\xb8\x6f\x02\x55\xf8\x12\xc7\x3f\x5b\x53\xca\xbc\x5b\x5c\x70\x78\x9b\x37\x55\x38\xfd\xc5\x30\x9a\x88\x81\xeb\x07\xda\xf3\xfd\x88\x0b\xd0\x47\x03\x10\x07\x97\xc2\xd3\xd1\xcd\x7b\x38\xab\x22\xa8\x7f\x86\xa2\xdc\x23\x23\x3b\x45\x8d\x5d\x06\x5b\x3d\x3e\x29\xd1\x5d\x47\xe3\xa9\x69\xd5\xe0\x19\x42\x48\x01\xc4\x41\xb3\xc2\xe9\xac\x35\xc8\x65\x9d\x6c\xad\x9f\x8b\x3d\xdf\xa4\x50\xaf\x43\xf7\x1f\xc2\x33\xeb\xbb\x45\x3a\xc2\xf9\xe9\x2d\x83\x6f\xa4\xa4\x98\x8b\x62\xe4\xd5\x9f\xda\x9a\xfa\x90\x4d\x05\x70\xc8\xd6\x5a\x4e\xf2\xdb\xad\x0c\xdd\xa7\xe4\x0d\x46\xef\xa7\xda\xde\x3d\xd1\xb9\xdc\xf0\x18\x5d\xcc\xfa\x6b\x83\x13\x65\x9c\xdb\xf3\xdf\x77\xa0\x7e\x67\x20\x0e\xd9\x5a\x7b\x8b\xf4\x0a\xf8\x6d\x05\x1d\xaf\xfa\x87\x39\x70\x8d\x60\xc8\x34\x10\xb3\xe0\xc7\x09\x93\x93\xfa\x26\x6c\x16\x96\xad\xda\xbc\x45\x44\x06\x71\xff\x63\x80\x2f\xfc\x47\xe4\x44\xbd\xbb\xd2\x5a\xe5\x1c\x36\xbb\x6c\xda\x04\x63\xef\x7f\x58\xf1\x14\x11\xa6\x87\x91\x0f\xab\x0d\x17\x1a\xe7\xce\x46\x34\x71\x20\xac\x35\x88\xfb\x9f\xc8\x97\xfe\xe3\x40\xf8\xc4\xc4\x46\x27\xea\x6d\xfe\x96\x12\x46\x63\xdf\xb4\x06\xbf\xa6\x55\x87\xb5\x8c\x98\xb7\x7d\xaf\x56\xc2\xb0\xe4\xc3\xde\x3d\x25\xfb\xd7\x5a\x8b\x6e\xff\x24\xd3\xed\x69\x69\xce\x20\xc3\xba\xf4\x69\xec\xc5\x56\xbe\xa4\xe9\x98\x83\x5c\xcd\xbe\xa2\xb6\x29\x8b\x94\xda\xfb\xc4\x7f\x50\x2f\xe2\xcc\x48\xd7\x5c\xdc\xf9\x9b\x28\x15\x9b\x8d\x42\x02\xae\x23\x13\xc5\xcc\x78\x4b\x9c\xb1\x31\x3e\x49\xf9\x74\x56\xbc\xce\xff\x6d\xd6\x1a\xf4\x68\xff\xd6\x5a\x23\x59\xeb\x3d\x1c\xde\x43\xca\x02\x7d\x6b\x5c\xf4\x85\xee\x9a\x41\x29\x01\x75\xb5\x51\xd2\x3f\x1f\x5e\xed\x9e\xd7\x95\x7b\x29\xc7\x1b\x7b\x26\x5f\xad\x45\x90\xac\x35\x75\xbb\x68\x75\xa6\x32\xb6\x6e\xa0\xc3\x5d\xe9\xfb\x7e\x28\xbf\x64\x32\x64\x51\x31\xbd\xfc\x57\x25\x0c\x5f\xff\xa0\xf8\xd6\x43\x7d\x26\x9f\x8f\x91\xad\xf5\x3a\x2d\x5e\xba\xe3\x8f\xab\xd7\xeb\xd8\xcf\xb1\xb7\xb1\x3d\x6e\xd9\x10\x1a\xbb\x6f\xc5\x2c\x29\xfd\xea\x81\xac\x91\x1d\x66\xfe\xf3\x33\xf9\x7c\x8c\x6c\xad\x0b\x6a\xcc\x64\x2f\x29\xd6\xc7\x0a\xd4\xd7\xed\xdb\x3d\x5c\xe5\xaa\x14\xcd\xe0\x99\x2f\xff\x85\x96\x18\x70\xab\x32\x3b\x46\x24\xe9\x4c\x9e\x16\xd9\x5a\xf3\x8d\xff\x1a\xee\x2c\x57\x1b\x3a\x57\xff\x96\xc8\x2b\x5b\xdf\x47\x3a\xc4\x6c\xf3\x66\x79\xe1\xb5\xb6\x7e\xe1\xce\xda\xaf\xd6\x3a\x67\x66\xad\x41\x1a\x3a\x69\xc1\x14\x26\x1f\xb4\x1b\xa5\xf0\x65\xbc\xaf\x1c\xbc\xda\x11\xae\xe7\x5e\xfc\x2c\xb2\x42\xef\x8f\x6c\xa1\xb1\x76\x9b\x07\x6b\x1f\x19\x74\x55\x31\x88\x83\x2f\x98\x63\x9d\xd3\x94\x55\xd1\x8b\xb6\x6c\x1d\xf5\x53\xf7\xf0\x1d\x27\x3d\x9f\xa5\x8f\x38\x7f\xf8\x16\x7f\x2e\x3f\x5f\x52\xfb\x9b\x1f\x25\x22\x2e\x88\x83\x2f\x6c\x46\x0d\xb8\x99\xf1\x0a\x62\xab\xe3\x5c\x87\x4d\xd1\x59\x8a\x2d\x55\x91\x8b\x86\xd2\x5a\x3b\xb1\xd4\xc6\xad\xa4\xe6\x86\x61\x50\xce\x18\xc4\xc1\xe3\x92\x18\x71\x24\xad\xb5\x37\xbe\xf3\x4c\x8f\xfa\x8e\x66\x9b\x90\xf1\x82\x74\x84\xe6\x18\xc7\x59\xed\xe5\xf9\xa0\xfd\xc9\xf2\xda\x41\x44\x5c\x10\xe7\x23\x86\x72\xe9\xdf\xb8\x1e\x86\xde\xdf\xa7\x84\x69\x3a\xf3\x64\xf3\x1e\x4d\xd5\xf6\xba\x56\x65\x1a\xab\xc9\xdd\x9e\x6c\xf0\x75\x67\x7c\xa5\x5c\x1b\x60\x8d\x30\x54\x20\x0e\xaa\xb5\x3e\x95\xb5\x06\xfd\xae\x4f\x52\xc2\xcc\x67\x23\xec\xfe\x47\xcc\x74\x33\x7a\x5e\xe7\x2c\x96\xf1\x8d\xdf\x5f\xfc\xc1\xdc\x53\x6d\x34\xf3\x43\x18\x97\x76\x6d\xbe\x0e\x32\x3e\x20\x0e\xae\x04\x12\x01\x0e\xec\xd2\x9f\x18\x93\xcc\x54\x19\x3e\xf5\x9b\x5e\x1c\x54\x13\xda\x95\xcf\x69\x2a\x84\xba\x0d\x70\xdf\x11\xa1\xf0\x3c\x81\x46\x16\xc0\xc1\xdf\x58\x7c\xaf\xbc\x6b\x2a\x47\x32\xdd\xbd\x86\xd1\xf8\x16\xdb\x58\x89\x0e\xd1\x68\xf9\x4b\xae\xc1\x5d\x13\x42\x83\x33\xc2\xd6\x53\x50\xcd\x1b\x88\x83\xc7\xf5\x2a\x8e\xb8\x1e\x13\xfe\xfb\xa8\xb3\x54\x39\xac\x81\x2e\x8b\x21\x5e\xde\xa8\x31\xb6\xf3\x39\xda\xe6\x9d\x42\xb5\xa8\x96\xd5\x42\x44\x5c\x10\x07\x57\x02\x53\xf0\x7e\xeb\x9d\x8a\x83\xe1\xe1\xce\x17\xac\x47\x7e\xd5\x6c\x21\x65\xd3\x69\x59\x24\x05\x4a\xef\xf2\x9c\xa2\x37\x39\xd2\xe4\xa1\xd2\x00\x00\x07\xd5\x5a\x9f\xca\x5a\x83\xa6\xda\x93\x94\x90\x72\x49\xa1\xc1\x9c\x6e\x68\xca\x3c\xec\x47\x6e\x57\x40\x03\x4f\x5e\xe7\x75\xb6\x6b\x5f\xe9\xf1\x3b\xf4\x77\x3e\x5d\x90\x0d\xe1\x81\x0a\x61\x01\x1c\x92\xb5\xd6\x6a\x31\xa0\x91\x59\xaf\xb1\x11\x3c\x36\x42\x21\x54\xad\x70\x67\x94\x97\xb7\xd0\xc8\xa8\x55\xac\xc6\x41\x1d\xe3\x4a\x80\xae\x61\x02\x71\xf0\x37\xa6\x79\xdc\x52\x76\x57\xf3\x6a\x7c\xd0\xfb\x69\x2b\x34\x86\x0c\x53\x45\xf4\x98\xe8\x84\x8f\xd7\x7a\x62\x44\xed\x39\x36\x1e\xe7\x43\x37\xfa\x83\x38\x78\xdc\xc2\xc3\x2d\x86\x3c\xcd\x83\x54\x1c\x09\xad\x78\xb3\x11\x97\xb8\xb9\x20\x77\x8b\x1a\x23\x42\x07\x34\xd7\x05\xef\x9a\x3e\xac\x08\x44\x5c\x10\x07\x57\x82\xd0\xa1\xca\x12\x07\x17\xd9\x50\xdf\x9d\x0f\x7b\xbf\xb3\x3f\xa7\x4f\x63\xd8\x46\xd6\xd6\xbc\x8b\x23\xe2\x15\xde\xc3\xfa\x3c\x7a\x09\xb1\x89\x06\x71\x50\x55\xe5\xe9\xac\x35\x68\xf9\x3b\x49\x0a\xd1\xc5\x0a\xed\x98\x89\xba\x22\xfa\x8f\x7b\x23\xf8\xe8\x3b\xf9\xc7\x9f\x0e\xe1\x0e\x92\x7c\x9e\x49\xb7\x77\x1c\x78\xc7\x69\x78\x1e\xfa\x70\x0f\xe0\x90\xae\x01\x88\xdb\x9a\xf8\x12\xda\x71\x7e\x48\x00\x55\xcb\x37\x45\x8e\x3f\x68\xbc\xb4\xe6\x5d\x16\x77\x7b\x1e\x6e\xbc\x1c\x9d\x10\x3b\x74\xc3\x15\x88\x83\xbf\xb2\x2f\x3c\x56\x4a\x6e\x62\x0b\x5b\x2e\xb4\x1e\x25\xf5\x01\x45\x28\xbf\x3b\x74\xec\xf6\x71\xd8\xbe\x5b\xf2\xbb\xaa\xa5\x7d\x8a\x87\xca\xf9\x41\x1c\x3c\xae\x04\xef\x7a\xe4\x07\x6f\xa3\xa7\x4c\xd9\x63\x75\x9a\x9b\xec\x97\xc5\x48\xe2\x5a\x2c\xa9\x8a\x36\x57\xd3\x62\xf2\xba\xd3\xf8\x56\xa0\x5e\x8c\x00\x0e\x2e\x05\xad\x98\x22\x19\xf7\xd0\x0e\xc2\x66\x95\x61\x2a\xc6\xe7\xb5\xec\x41\x22\x28\x09\xb6\x9f\xee\xcf\x2c\x85\xa8\xe1\x28\xb1\x93\xc4\x22\xa4\x00\xe2\xa0\x5a\xeb\xd3\x59\x6b\xd0\x96\xe4\x24\x29\x6c\xf0\x7a\x4f\xba\x1b\x2e\x78\xc4\x2a\x71\x7a\x68\x1c\x75\x09\xed\x2a\x2a\xce\x7a\xfb\x8e\x73\xb4\x0a\x8c\x4d\x74\xf0\x28\x0f\x20\x86\x00\xc4\xc1\xa5\x60\xd7\xf2\xe2\x4d\xf4\xe0\x66\xae\x78\x53\xac\xa8\x55\x4d\xe6\x3d\x55\xb7\xd2\x2f\xb2\xd1\xbe\xb7\x7f\x37\x36\xce\x8f\x2e\x07\xbb\x43\x9d\x1d\x00\x1c\xfc\x95\x69\x14\x6e\x0a\x52\x04\xe4\x0c\x05\x48\xd1\x7e\xc2\xfa\x5c\xb3\x13\x9f\x75\xf8\xb2\x47\xd3\xa9\xf4\x68\x64\x3a\xbe\xca\x01\x1d\x4a\x10\x82\x38\x78\x5c\x81\xe8\x4a\x67\x9e\x0b\xeb\xd2\x1d\xf9\x17\x84\xd1\xea\xdf\xb1\xb0\x9b\xfb\x61\x17\x6f\x31\x28\x34\xbe\xcc\xda\xd2\xcd\xf8\x9c\x8f\x88\x0b\xe2\xe0\x52\x70\x71\x6a\x0d\xdd\x64\xdc\x9f\x7f\x70\x74\x2f\x74\x77\x2b\xd1\x47\xf9\x18\x83\xb9\x35\xb9\x03\x3f\xa1\x4a\x43\xd4\x96\xe6\x9a\x3f\x42\x0a\x20\x0e\x9a\x15\x4e\x67\xad\x41\x2e\xeb\xff\xe7\x72\xb6\xd7\x1e\xd9\xbf\x19\xcd\x63\x58\xd1\xf3\x52\xfc\xb2\xde\x8c\xdc\x7a\xf0\x63\x9b\xf3\x1b\xca\x0a\x1d\xf1\x1b\x27\xa3\x7d\x3e\x6f\xe8\x72\x36\x00\x87\x6c\xad\x95\xd2\xde\x2c\xd0\xee\x6a\x7e\x28\x94\xcd\xab\x9b\xa9\xce\xbb\x48\xd9\xe1\x34\x91\x81\x32\xc3\x62\x4d\xe1\xcf\x70\x3e\x9e\x97\x00\x11\x19\xc4\x21\x5b\xeb\x48\x0f\x4d\xcc\x31\x2f\xdb\x50\x66\xe7\x61\x37\x2d\xab\xa5\x6b\xfb\xe5\x36\x69\xd4\x55\x41\xa3\xe8\x6c\x73\x6d\x6f\x67\x1d\xad\x11\x91\x41\xdc\xff\x18\xe0\xff\xec\xd5\xee\xfc\x31\x5d\xbc\x3a\x1e\x4d\xec\xfb\x1d\x02\x7d\x95\x02\x5e\xc2\xdf\x1a\xc4\xe3\xf7\x4d\xe3\x85\xba\x7c\xff\x48\xad\xbf\x27\x58\x45\x58\x6b\x10\x07\xdd\xbc\x0f\x59\xeb\x6f\xb8\x9b\xea\x5f\x7c\xdf\x34\x2e\xa4\xcc\x1d\x33\xd3\x78\x17\xf1\xac\x1d\x6a\x68\x5a\x30\xc7\x2d\x1a\xf3\x88\x7d\x53\x19\x0a\xfe\xd7\x5a\x67\x5c\x9d\xfd\x86\x51\x2a\xd2\x3e\x68\x80\x45\xfb\xf6\x29\xea\xe0\x16\x41\x8f\x8d\x0e\xbf\x6d\xd4\x7a\xf9\xd1\x1f\xba\xa6\x5b\x31\xff\x1a\xb0\x5d\x8e\x4a\x8a\xc9\x70\xce\xdb\x7f\x5c\x09\x4a\xac\xf7\xe8\xcc\x0f\x63\xff\x1e\xd1\x65\x78\xdc\x6d\xd3\x28\x34\x5f\x4b\x63\xf8\x6f\xb3\xd6\xa0\x47\xfb\xb7\xd6\x5a\x02\xee\xbf\x4a\x75\x9b\x98\x56\xc2\x54\xd3\xa6\x84\x92\xc6\x9e\x13\x1d\x4c\xd4\x79\x1f\x92\xbb\xc5\x2b\xdc\x10\x8f\xb8\xac\xcd\xf2\xa7\xcf\xe5\x2c\xac\xb5\x27\x92\xb5\x26\x10\x60\x19\x1e\x36\xf8\xa1\xcd\xfb\xe4\xdb\x44\x8e\xa5\x3c\xce\x9f\xbe\x37\xe3\xf8\x26\x18\x99\xfb\x6d\x85\x8f\x2d\x7f\xa5\xb1\x9f\xc9\xe7\x63\x41\x24\xb3\xe9\xa7\x33\x80\xbb\x11\x5e\x32\x92\xe5\x8e\xd7\x9c\x37\xb0\x7f\xf8\x39\x69\xc9\x49\xf9\xc1\xa0\x12\x65\xde\x5d\x56\xae\x87\xb7\x46\xce\xe4\xf3\x31\xb2\xb5\x16\xa4\x40\x79\x89\x57\x5a\xc9\x8d\x2e\xdd\xc4\x4e\x55\xf6\xc4\x55\xcf\x29\x3e\xc7\x0d\xff\x3e\xeb\x93\x3c\x43\x1f\x71\x5b\x12\x87\x33\x79\x5a\x3b\xa4\x3f\x3b\xf6\xa8\xb9\x1b\x87\x32\x79\xf3\x80\xfc\xfe\x4e\xc1\xae\x9e\x6d\x0a\x1e\xef\x5e\xc9\x9f\x9a\xe4\xfb\x62\x49\xd2\xcc\xc6\x6b\xf8\x67\x66\xad\x41\x1a\x3a\xb1\x79\x95\x2e\xf7\xd3\x30\xd9\xd8\xa3\x43\x53\x16\xf5\x62\x8f\xc8\x3b\x95\xea\x69\x36\x9d\x61\xb7\x9e\x5f\x6d\xd6\x94\x99\x41\xe1\x80\x2a\x4b\x41\x1c\x7c\xc1\x24\xd0\xa1\xd4\x2e\x08\xcc\x65\xc1\xa1\x8a\x8e\xfc\x72\xb9\x92\x15\x17\x5f\x6c\xe8\x99\xa2\x13\xb5\x76\x9c\xf6\x53\xac\x39\xe9\x5b\x88\xb8\x20\x0e\xbe\xb0\x05\xf9\x6e\xf7\x17\x57\x4b\x9a\x66\x2b\x0e\x45\x75\xf9\x05\xec\xff\x36\x4f\x7a\x6f\x7e\xef\xd3\x27\x53\x3b\x1c\xbe\x47\xca\xd6\xd0\x1e\x07\xc4\xf9\x88\xa1\x60\xff\x1b\x37\x27\xe8\xdb\x67\xef\x20\xfa\xb6\x5e\xef\xe1\xc5\x49\x5e\xf4\x04\xe1\x76\x1e\xd9\x50\x7c\x5c\x77\x65\x59\xca\x32\x79\x2f\x7d\x68\xaf\x07\xe2\x7c\xc4\xfe\xb3\x0c\xc7\xce\xdb\xf4\xe0\xe3\x9d\xc4\x66\x75\x91\x73\x1b\xc1\x54\xfd\xf8\x06\x43\xf6\xe7\xfa\xb3\x2e\xaf\x5c\xc1\xef\x7a\xce\x32\xfc\x36\x07\x61\xa8\x40\x1c\x54\x6b\x2d\x71\x9a\xad\x13\xe8\x77\x7d\x92\x12\x46\x69\x78\xf9\x7f\xfe\xae\xaf\x53\x78\xfc\x8b\x5f\x42\x46\xd9\xfe\x13\xea\xa6\x30\x76\x96\xcb\xcc\x9b\xdd\x17\xaa\x6d\xaa\x21\x90\xb5\x06\x71\x70\x25\xfc\x8d\x4a\x38\xbc\xf5\x5d\xda\x9d\x55\x41\x88\xfa\x79\x55\x5f\x3f\x69\xd1\x52\xba\x83\xd0\x8c\xa5\xa6\x97\xc9\xd5\xcd\x54\x12\xa8\x26\x1a\xc4\xc1\x95\xe0\x63\xa4\xe7\x61\xa8\x13\x44\x85\x86\x27\xfc\xf7\xa7\xbf\x23\x6b\x9b\x72\xfa\xe7\x85\x15\x3d\xf7\xfb\x74\xc3\xc6\x4e\x35\x1c\xe5\x88\xb8\x20\x0e\xae\x84\x58\xf3\xfa\xa6\xeb\xf9\xf5\x6c\x35\xc7\x79\x95\xdc\x5e\x32\x7a\xbf\xd5\xf8\xab\x9d\x07\xaa\x31\x57\xcb\x84\xc2\x74\x37\x79\x88\x10\x71\x41\x1c\x5c\x09\xcf\x1c\xea\x34\x2e\x39\xfd\x54\x6f\x25\xb0\x1f\x37\x8c\x7b\x92\xa6\x7d\xb8\xbb\xa7\xce\xaa\x44\xd9\x37\x57\xe3\xcc\xfa\x6b\xc3\x09\xa1\x04\x10\x07\xd5\x5a\x9f\xca\x5a\x83\xa6\xda\x93\x94\x70\x75\x3a\x99\xa6\xf8\xa9\xe1\x8e\x19\xe5\x95\x8e\xea\x20\x4d\x61\x21\x97\x1f\xac\xe7\xe2\xfc\x19\xcb\x38\x31\xbd\x59\x7b\x8c\xbe\x22\x46\x00\xc4\xc1\x95\x20\xf2\xe1\x6a\x02\x8e\xae\x84\xe1\x5d\x59\x6b\xb7\xca\xf7\xb4\x93\x81\xfb\x26\x51\x1c\x9e\xa9\x0f\x6e\xc5\x49\x3a\x64\xc4\x8c\xdc\x44\xc4\x05\x71\x70\x25\xf4\xa0\xb3\x96\x76\x5b\x05\x76\x06\x89\xb6\x77\x76\x38\xd7\xfe\x65\xf3\x88\x33\x72\x94\x4f\x9c\xf2\xb7\x6c\x70\x17\x2f\xa5\x83\xda\x8d\x81\x38\xb8\x12\x86\x5b\x23\xaf\x89\xee\xa2\xde\xe6\x33\x64\xd3\xca\x37\x0b\xe2\x7a\x2b\x28\x2f\xf5\x65\x75\xf3\x40\x4e\xd1\x23\x8d\x62\x4c\x0e\xaa\x0d\x07\x71\x70\x25\x78\x6d\x86\x72\x29\x33\xdd\xd9\xf3\xea\xbe\x51\x33\x11\x91\x15\x6f\x93\x82\xa9\xfa\xa1\x9d\xa6\x3d\x8c\x69\x5f\x55\xcd\xb8\xf1\x03\x62\x13\x0d\xe2\xa0\xaa\x4a\xc1\x53\xf9\x29\xd0\xf2\x77\x92\x14\xee\xb3\x1e\x98\xf1\xb0\xbd\x6e\x7d\xff\xf7\xc6\x57\x14\xf3\xe0\xe4\xcd\x3e\xc9\x69\xab\xa6\x81\xad\x0e\x9b\x8d\xbd\xc1\x0a\x59\xa8\x4e\x06\xc4\xc1\xa5\x20\x74\xb9\x3d\x2b\xe8\x98\x5e\x2b\xb2\xa2\xd6\x9c\x83\x71\xee\xa0\xb3\x48\x79\x5e\x38\xf6\x62\xf5\x0a\xb1\x90\x5d\x7f\xa3\x06\x54\xd7\x03\xe2\xe0\x52\x98\xba\xbd\x32\x3d\x10\xf8\xfc\xca\x9b\xa2\xb6\x84\xf5\xbf\x26\x84\xcc\xbe\x3e\x68\x52\x44\x3a\x07\x6b\xc6\x9c\x21\xf1\xfc\x59\xb8\x88\xb8\x20\x0e\x2e\x85\xcc\x3a\xbd\x55\x4a\x7a\xdb\xab\x7d\x19\x1a\x73\x0a\x04\x0b\x92\xd6\x9f\x34\xb7\xef\x18\x68\xc9\xb0\x95\x63\xa3\xa0\xd8\x30\x7e\x42\xc4\x05\x71\x70\x29\x34\x33\x4f\x52\x3a\xb7\x54\x3d\x90\x97\x22\x5f\xd6\xb1\xcf\x5c\xb2\xb9\x46\xee\x2c\x98\xfb\x5a\x40\x96\x4f\xa6\xee\x01\xe5\x43\x71\x84\x14\x40\x1c\x54\x6b\x7d\x3a\x6b\x0d\xda\x92\x9c\x24\x85\x9b\x34\x01\x98\x04\xa8\x1c\xef\xc3\x64\x8b\xc9\xe4\x93\x76\x2d\x07\xcf\xef\x9a\xeb\xd9\x73\x4e\x4b\xdb\x1a\x29\x4b\xc7\x45\x42\xed\xc6\x40\x1c\x52\x96\x25\x69\x93\x28\x2b\x9f\x01\xa5\x09\xeb\x01\xce\x41\x63\x91\x20\x9a\x4b\x0a\xa3\xba\x9f\xc1\xb5\x4a\x86\x30\xee\x7c\x3e\xee\xbb\x50\x96\x05\xc0\xc1\xa5\xb0\xd9\xad\xf8\xb4\x77\xa9\x13\x8f\xcf\x96\x8d\xaf\xfc\xb5\x45\xd3\xbb\xc7\xb5\xa3\x58\xd1\xc6\x16\x5a\x73\x0c\x1f\x6f\x6a\x52\x40\xb5\xd6\x20\x0e\x2e\x85\xa9\xa7\xe3\x5f\x68\x6a\x62\x1f\x2e\xf6\x09\x8d\x7f\x3f\x64\xa9\xd0\x3c\xc4\x7c\xf0\xbd\xd4\xf9\x4e\xf1\xc4\x44\xfc\x8b\xa2\x0c\x28\xf5\x0a\xe2\xe0\x52\x78\x2d\x70\x85\xe6\x15\xf6\x9d\xe9\x0b\xa4\xcc\xbf\x4b\x0c\x95\xf9\xe6\xd1\xae\x12\xbf\x2a\x39\xbf\x96\x71\xe5\x82\xf8\x68\x6e\x52\x2a\x42\x0a\x20\x0e\x9a\x15\xec\x4e\x65\xad\x41\x2e\xeb\x64\x6b\x8d\x45\x56\x31\x80\x53\xe4\xbd\x72\x14\xcf\x60\xd1\xb5\x4b\xfd\x24\xd5\x6e\x2e\x0d\x83\x67\xdc\xc2\xbb\xc9\xa9\x82\xee\xb6\x9d\x24\xc2\xa6\x82\x38\x64\x6b\x4d\xa5\xaa\xc6\x4c\x71\xd9\x25\xb0\xbe\x3e\xb1\x9f\x48\x15\xe3\x4a\x61\xee\xf9\x46\xb3\xb7\xa3\x61\xba\x6f\xc3\x53\x08\x7e\xa9\x41\x47\xcd\x41\x1c\xb2\xb5\xf6\x1f\xaa\x7a\x74\x6d\x98\x86\xaf\x12\x3f\x90\xc5\x64\xad\xe4\x95\xe3\x18\xf9\x27\x2e\x52\xb3\x0e\xd2\x32\xfa\x6f\xef\xfa\x69\xe6\x10\x91\x41\xdc\xff\x39\xb6\x8d\xfa\x1f\x07\xf3\xf0\x7f\xa8\x4d\x1c\xd9\xa9\xd9\x7e\xbf\xfb\x05\x37\xf8\x67\x4c\x6a\x7f\xbd\x9d\x73\xea\xe7\xeb\xcf\xee\x27\x9f\xb7\x71\xcc\x10\x42\x58\x6b\x10\xf7\xbf\xbd\xc7\xff\xb5\xd6\x52\x59\x18\xa5\xa1\x2b\xd5\x1e\x57\xfa\xd1\x7f\x7f\x4d\xdf\xac\x99\x9f\xa1\xb6\x51\x90\x6c\x0a\x18\xb8\xf1\xc5\x90\x87\x84\xca\xea\x5f\x6b\x1d\xd6\x63\x8e\x11\xfa\xd8\xfa\xbe\xdb\x80\xb7\x28\xb7\xc5\x79\xf5\x27\x97\x9f\xd1\x48\xed\x25\xb3\x1f\x26\xe6\xe8\x0c\xe8\xbf\x15\xfd\xf7\x04\x1d\x2f\x33\xcd\x72\x62\xd3\x6c\x1c\x86\x38\x6b\xaf\xe4\x36\xc3\x35\x8b\x1b\x3f\xc4\x7a\x94\x8b\xb2\xe6\x5d\x17\x17\xb3\x09\xca\xfe\xdb\xac\x35\xe8\xd1\xfe\xad\xb5\x46\xb2\xd6\x4e\xce\x32\xb1\xe4\x66\xf8\x33\x59\x7a\x8c\x33\x91\x3e\x38\x11\x8b\x1f\x69\x95\x07\x3c\x18\xc9\xf8\xd0\x9f\xc8\xcf\x7d\xa3\xfc\x75\x16\xd6\xba\x0e\xc9\x5a\xcf\x88\x93\x7d\xad\x8b\xce\x51\x60\xe1\x0d\x4c\x89\xaa\x1c\xfe\x89\x6b\x44\x48\x8a\x3b\xe6\x3c\x98\xeb\xa3\x90\x35\xfb\xe3\x0d\xe5\x99\x7c\x3e\x46\xb6\xd6\xdc\xf8\x2b\xe8\xf9\xaf\xbc\x53\xc6\xd9\x57\xb6\xfd\x47\x13\x84\x16\x71\xce\xdf\x2d\xe2\xb9\x5e\x7e\x33\x2e\xfb\xe3\x3d\x1a\xf4\xdb\x67\xf2\xf9\x18\xd9\x5a\x27\xef\x58\x92\x2a\x58\xe7\x53\x8c\x85\xf1\xaf\x61\x5f\x77\xff\x52\xa7\x57\x70\xa5\x70\x5e\xe3\xe2\x68\x28\x26\xe6\xbb\x7c\x5f\xbf\x33\x79\x5a\x64\x6b\xdd\xc3\xb9\x10\xc8\x89\x47\x3b\xc4\x6c\xa5\xfe\xbb\x64\x3f\xeb\x77\xe6\x6d\xc2\x43\xd4\x44\x32\xbd\x7b\x77\x16\x5a\x86\xee\x59\xb5\x9d\x99\xb5\x06\x69\xe8\xa4\x05\xb3\x57\xed\x66\x79\x48\xb9\xeb\xfc\x85\xa0\x3d\xb7\x47\xc5\x17\xbe\xae\xb0\xb5\xfd\x9d\x44\x35\xd8\xac\xf6\xb5\xf6\x92\x09\xc8\x4a\x43\x2c\x14\x20\x0e\xbe\x60\x56\x13\xa5\xea\xf4\xe6\xf4\x05\x53\xc7\x27\x59\x3f\x31\x59\x17\x62\xe4\x0c\xec\xbf\xfc\xfd\xd2\x78\x87\x1e\x6a\x6e\x48\x76\x20\x15\x22\x2e\x88\x83\x2f\x98\x7b\x58\x63\x2e\xed\x6f\xaa\xbe\x0c\x49\xd2\x9b\xba\x51\x0e\x08\x37\xd3\x35\xa0\x97\x88\xf1\x6e\x76\x5d\x79\x4f\xef\x80\x1a\xda\x89\x88\x0b\xe2\xe0\x0b\xa6\x7b\xfd\x5d\xdd\x02\x7f\x23\x45\xbc\xa1\xfa\xc4\x1f\xe3\xb4\x8b\xba\x38\x4c\x42\xcf\xa6\x93\x9c\x77\x1f\x17\x5b\x46\x14\x77\xf8\x21\xe2\x82\x38\x1f\xb1\xff\x3c\x2b\xa4\x2d\x7e\x6f\xd9\x85\x9a\xe7\x63\xa6\xce\xeb\x8f\xfc\xea\xcd\xcd\x5e\x3c\xb6\x05\x09\xdd\xb7\x70\xca\x9b\x0a\x12\xf3\xa5\xf1\x59\x11\x86\x0a\xc4\x41\xb5\xd6\xa7\xb2\xd6\xa0\xdf\xf5\x49\x4a\x38\x88\x65\x9b\xb7\x61\x4c\x7d\x8b\x71\x53\x2e\xd5\xf1\xf8\x66\xf0\xf3\x57\x99\xf8\x39\xbe\x91\x3a\x9f\xaa\x04\x0b\x8c\xd8\xb0\x1c\x11\x23\x00\xe2\xe0\x4a\xf8\x71\x4e\x32\xa4\x9b\x49\x46\x83\x10\xd5\xa3\xe1\xb9\xf5\x88\x42\xfd\x73\xcf\xc7\xee\x77\x02\x82\x5a\x9a\x69\x72\x34\xe5\xb6\xa1\xb3\x94\x20\x0e\xae\x04\xfe\xf3\x18\xba\x93\x72\x3f\x64\xbb\xf3\xa8\x2a\x98\xae\xb8\x4b\x2f\xa8\xba\x36\x06\x7e\x9c\x56\xbe\x3a\x98\xf1\xf6\x1b\x6a\x9a\x22\xd4\x14\x0b\xc0\xc1\x95\xb0\xfe\x94\xbe\xa8\x68\xfd\xb5\x33\xda\x92\xf9\x6c\x50\x22\x31\xcb\xfd\x7e\xf6\xfd\x1b\x9a\xae\x8e\xe2\xd7\xa7\xf4\x1a\x71\x42\xa0\x24\x0b\x88\x83\x2b\x21\xec\xad\xd3\xc6\xcb\x87\xfd\x26\xd9\x76\x2f\x89\x22\x8d\x2f\x6a\x9a\x2d\xfa\x32\x89\x05\x16\x91\x47\x1c\x70\x1e\x8f\x12\xe7\x4d\x20\x94\x00\xe2\xa0\x5a\xeb\x53\x59\x6b\xd0\x54\x7b\x92\x12\xe2\x6d\xdc\x7f\xd3\x67\xe7\xb5\xe8\x95\x75\x39\xdf\xcb\xd6\x9a\xb2\x5f\xf5\x76\x6a\xa7\xb3\x56\x58\x38\x32\x78\x6e\x1e\xf5\x8b\x11\x3a\x0f\x00\xe0\xe0\x4a\x08\xc5\x6b\xf0\xbe\xd0\x2e\x43\x9b\xd3\x83\xb5\x44\xdf\x5c\x9f\x12\xd7\x53\x25\xf9\x70\x67\xe0\x3c\xab\xd3\x20\x3d\xb7\x5b\xda\x15\x44\x5c\x10\x07\x57\x82\x77\x89\x04\x09\xa9\xe5\x3b\x9c\x77\x3b\x74\x37\x31\x2d\xe6\x8f\x52\xb0\xa7\xe2\xf3\x6f\x66\xbc\x98\x49\x1e\xe4\xfc\xbd\xd3\x0f\x59\x60\x10\x07\x57\xc2\xe4\x06\xbe\x34\x9f\x89\x91\x62\x86\x94\xf2\xcd\x87\x4e\xeb\x6e\xee\x7a\xc4\x0f\x7b\xb2\x49\x5f\xbd\x0d\x7b\x4c\x4c\x3c\x69\x30\x01\x9d\x02\x06\x70\x70\x25\xb8\x98\xf1\x47\xa1\xfc\x55\x5d\x39\x4a\xfe\xfe\x17\xfb\x92\x78\xa0\x7e\xbf\xa3\x06\xe3\x8b\x3d\x34\xcc\x07\xa4\xc9\x6c\x11\x8d\x09\xd0\xf7\x29\x00\x07\x55\x55\x9e\xce\x5a\x83\x96\xbf\x93\xa4\xa0\xde\x1c\x24\xaa\xee\x12\x38\x6e\x9c\xa3\x31\x35\xb8\x7a\x2b\x74\x57\x28\x55\xf0\xea\xbc\xb7\xd8\x9e\x51\xe2\xd5\xb0\x56\x1e\xe8\xf4\x2b\x88\x83\x4b\xe1\x13\xbd\xbe\x0f\xa3\x24\xc6\xb7\xd0\x50\x3e\x1a\x53\xb3\xc2\xd9\x35\x6b\x49\x45\x95\x35\xb6\x38\x5f\xd3\x0c\xab\x9a\xea\x89\x23\x44\x5c\x10\x07\x97\xc2\x70\xde\x56\xc4\x3e\x31\xc5\x83\x9b\x9b\xe3\x45\xd6\xba\xdd\xf6\xdf\x1d\xf7\xba\x1c\xb7\x67\xe5\x1f\x4d\x5e\x51\x1f\x2f\xb5\x87\xda\x98\x81\x38\xb8\x14\x28\x1e\x5d\xef\x71\x1b\xb9\x40\xe0\x5f\x5a\xa3\xc4\xf0\xeb\x21\x9b\x70\x27\x6e\x6e\x0c\x37\xb6\xf6\x9f\x92\xb1\xda\x2b\xe3\xc7\x59\x88\xb8\x20\x0e\x2e\x05\xcf\x9a\x35\xc2\x15\x26\xdf\xd9\x3b\xbb\x0b\x42\x73\x0c\x55\x09\xdb\xd8\x8d\xe3\x23\x7e\x2e\x6a\x9e\x6e\x2a\x32\x5e\xe1\x86\xe9\x08\x29\x80\x38\xa8\xd6\xfa\x74\xd6\x1a\xb4\x25\x39\x49\x0a\xbb\xf4\x7a\x58\xb9\xe5\x6b\xbc\x14\x41\x39\x9d\x6e\x8a\x47\x6d\xa1\xb7\xaf\x99\x5f\xe8\x32\x6d\x8a\xa1\x5e\x50\xba\x59\x71\x1e\x6a\xbe\x0e\xe2\xe0\x52\x88\xc6\xfd\x1d\x81\x65\x91\x4b\x3e\x68\xff\xf2\x03\x4b\xa3\x2b\xe1\xa8\x9a\x91\x24\xaa\x54\xc2\x52\xb2\x58\xe8\x15\x55\xfe\x63\xe8\x54\x13\x88\x83\x4b\xc1\xb1\xcb\xb7\xa5\xe5\x32\x11\x0f\x8e\xca\x4b\x8d\x5f\xdd\x73\xd2\xa1\x0c\x59\xe7\xce\x29\x19\xb3\x26\x35\x1e\xb1\xaf\x08\x17\xd6\x21\xe2\x82\x38\xb8\x14\x28\x93\xf8\xf2\x32\xd2\x8d\x5c\x03\xfd\x2a\xf0\xf5\x46\xd5\xf5\xce\xc5\xbc\xc6\x36\x10\xef\x61\x17\x1d\x5e\xd0\xd4\x30\x6e\x80\x76\x4c\x20\x0e\x2e\x85\xcf\x0b\x25\xcf\xb4\x39\x35\x9e\x72\x24\x7b\x90\x44\xf5\x24\x61\x77\xd0\x57\x70\x4c\x1c\xbf\xc2\x8a\x19\x20\xbf\x3a\x5b\xfa\xf9\x10\x21\x05\x10\x07\xcd\x0a\xa7\xb3\xd6\x20\x97\x75\xb2\xb5\x36\x27\xe1\x0a\xe2\x5d\x9f\x77\x95\xfd\x61\xd2\x6a\x84\xed\x67\xec\x1b\xe4\xf5\x9a\x82\xde\xc5\x4a\xec\xa9\xb0\xe1\x96\xe4\x6d\x7e\x84\x4d\x05\x71\xc8\xd6\x3a\xcd\x5c\x93\x87\xf2\x27\xbb\x4e\x9f\x81\xf3\xdd\xbd\x68\x1f\xc7\x89\xaf\xd2\x92\x97\x8f\xa7\xf7\xfc\x6f\x59\x50\x57\x7a\x67\xf5\x23\x22\x83\x38\x64\x6b\xdd\xce\x49\xcd\x1b\x74\xec\x11\x4c\xa9\x13\x40\xf8\xfc\x23\x01\x73\x90\x4a\x2f\xbb\xbd\x0e\xa3\xcc\xfe\xde\x06\x8d\x4e\x8e\x73\x28\x22\x32\x88\xfb\x3f\xd6\xfa\x3f\xa4\xe6\x42\x93\x1f\xa1\x30\x72\xa0\xc1\xe0\xe3\x2e\xb9\x91\x7d\x9f\xdd\xa4\x8b\x0c\xc5\xa6\x6d\xf4\x7d\xb1\xc6\xf1\x8b\xb2\x9b\xd4\x66\x08\x6b\x0d\xe2\x7c\x24\x50\xd0\xfe\xd3\x5a\x9b\x7d\x4a\xe0\xbc\x33\xed\x28\x2b\xfa\x96\x6d\xc6\xe5\xe6\xa2\x13\x91\xd9\x2c\xce\x42\xe2\x44\x0d\x96\x93\xb2\xe4\x80\x6d\xd7\xf8\xbf\xd6\xda\x92\x84\xb7\x8a\xd4\x7d\x2b\xc0\x71\x39\xe3\xc2\xf9\x0d\x2d\x92\xc9\x23\x96\xce\x4f\x18\x0b\x1c\x47\x35\x66\xdd\x79\xf5\xcc\xef\xff\x4d\x0f\x45\x46\xaa\xe2\x36\xb5\xe3\xd0\x99\x8a\xbe\x27\x37\x59\x37\xc2\xab\x7a\x1d\xad\x57\x9a\xac\x40\x91\x7b\x9c\x13\x52\x27\x47\xf0\xdf\x62\xad\xbd\x30\x4f\xf7\x68\xff\xd6\x5a\x23\x59\x6b\x81\x84\x10\x9d\x2d\x4d\x76\x6e\x2e\xc7\xbb\x4d\x3b\x87\xfe\xca\x66\xe5\x12\x5e\x36\x71\xfe\xc5\x77\xab\xc8\xe2\x38\x6c\xc6\x6c\xcf\xe4\x8b\xea\x0d\x24\xdb\x77\xcd\x32\x80\x92\xd2\x02\x65\x31\x7c\xb1\xc3\xf9\x1a\x26\x47\x6a\xc1\x21\x75\x62\x48\x15\xcb\x13\x96\x3c\xa6\xeb\xfe\x7f\x26\xc3\xce\xe4\xfb\x31\xb2\xb7\x5e\x7d\x7f\xf9\xf5\xc1\x83\x6b\x2f\xb8\x28\xa3\x3f\x36\x35\x1a\x96\x5c\xa4\xcb\x2b\xcb\x7a\x38\xb5\x3e\xf5\x98\xf7\x46\x5b\xa2\x98\xf2\x99\x3c\xad\x3a\xd2\x9f\x5d\xdb\x75\xe6\xf4\xa7\x48\x78\x22\x12\x73\x83\x7e\x72\xe7\xf9\x7c\x5f\x11\xf7\x55\x96\x84\xb8\xd7\xa6\xe9\x0b\x45\xd6\x42\x8a\x1a\x67\xf2\xb4\xc8\xde\x9a\x38\xd3\x5c\xe5\xc0\xae\x71\x64\xe4\xe3\xa7\x3f\x8d\xbd\xa4\x84\x8f\x9e\x59\x7d\x13\xae\xed\x11\x0e\x3f\x8c\x32\x32\x95\x3e\x7f\xfd\xcc\xbc\x35\x48\x44\x27\xad\x98\x4f\x82\x9e\x97\xd6\xbf\xa8\x3d\x77\xce\xae\x13\xcd\xed\xba\xba\xb7\xc2\x21\xae\x9e\xf5\x2b\xfb\xef\xb7\xde\x67\xbf\xbe\xfb\x46\x19\xea\x4e\x02\xe2\xe0\x2b\xa6\xd5\x8e\xfe\x55\xfc\x70\x46\xaa\xe9\xa8\x07\xbe\x12\x59\xa6\x32\x1f\xf2\x8b\xbe\x31\x71\x3e\xbd\x66\x1a\x95\xea\x33\x95\x5a\xfc\x1d\x11\x17\xc4\x21\x95\x3a\xfd\x88\xb7\x59\x37\xa5\xb9\x4d\x16\x6e\xa0\x21\xc6\xb7\xf4\x96\x85\x86\xfb\xaf\x43\x9b\xe3\x72\xd6\xd2\x28\x8e\x13\xf6\x02\x54\x58\x09\xe2\xe0\x2b\x66\x1a\x3a\x53\x1d\xdd\xf5\xe6\x20\x5f\xbe\x31\x6b\xb3\xef\x7a\xc5\xb6\xdd\xf6\xff\x1f\x73\x7f\x19\x95\xe5\xf3\x85\xfd\xc3\x94\x34\x92\x92\x92\x12\x02\x12\x82\x82\x4a\x28\x08\x48\x77\x09\x88\x20\x88\x4a\x08\x22\x8d\x74\x4b\x89\x28\x21\x29\x9d\x52\xd2\x21\x1d\x22\xdd\x21\x48\x97\x48\x83\x80\xc8\xb3\xee\xfb\x59\xd7\x79\xfb\x3d\x2f\xd6\x7f\x78\xc1\x8b\xdf\xfb\xcf\xda\x38\xe3\x71\xcd\x9e\xe3\x9c\xd9\x7b\xec\x5c\x67\x08\xfb\x27\x94\x27\x39\xc5\xc4\x1a\xa0\x0c\x0f\xe2\xbc\xc4\xff\xfb\x45\x93\x8f\x54\xe3\xa5\x12\xfb\xe1\xc1\x7c\xce\xc3\xd5\xe4\x69\x7a\x97\xbb\x63\xb8\x1f\x1a\x7d\xfd\x35\x4a\x6c\x9b\x5c\x6e\x87\x0c\x72\x23\x1c\x15\x88\x83\x8a\xad\x4f\xe5\xad\x41\xbf\xeb\x93\x94\x60\xe8\xa2\xa2\x88\x4f\xea\x48\xd2\x6d\xbf\xb1\x62\xf8\xce\x41\x37\x96\x8e\xee\xc0\xc3\x74\x8b\x9a\x4b\x20\xd2\xea\xab\x75\xeb\x65\xc4\x0c\x80\x38\xb8\x12\x56\x3e\xd3\x1d\x60\xa1\x3c\xfa\xfb\x18\x2d\x82\x64\xf2\x45\x50\xc6\x62\xc0\x86\xe8\x1a\xde\x98\x7e\x8a\x1d\x96\x82\xc7\xa1\x00\xe4\x81\x41\x1c\x5c\x09\x64\x0d\x89\x4e\xdf\x1d\x53\x92\x6e\xfe\xba\xf6\xa1\x75\x98\x33\x25\x3c\xf9\x76\x94\xbb\xa5\xfd\x55\xa2\x64\xa6\xfc\xc2\xb6\x8d\x78\x44\x5c\x10\x07\x57\xc2\xbb\xd8\x8c\x42\xa1\x02\x4e\x3f\xb9\x16\x85\xac\xcf\x76\x7d\x98\x3f\x5f\xba\xa8\xe6\x8e\xd0\x33\x27\xf8\x5f\x08\x34\xd1\xfc\xf8\x12\xda\xeb\x01\x38\xb8\x12\x5a\xd7\x9b\xa7\x29\x1d\xf2\xb5\x74\x1e\xc7\x2b\x1e\xb4\x2f\x50\x9d\x13\x53\x0f\x25\x4c\x73\xb1\x6f\x56\xbe\xea\xc8\x8d\x7f\x9d\x0f\xb1\x77\x02\x71\x50\x5d\x25\xef\xa9\xb6\xd1\xa0\xb5\xf6\xc4\x96\x76\x89\xbb\x06\x35\x23\xc2\x5f\xe2\xae\xf0\xa3\xb8\x85\x4f\xe9\xf2\x96\x26\x1d\x17\x55\xff\x35\x60\xee\x34\x50\x9b\xb9\x9e\x0e\xdd\x03\x06\x71\x70\x29\x34\xa1\x9b\x70\xd3\x66\xa3\xa0\x5e\x72\x27\x99\x11\xdd\x95\x52\xa4\xf8\x2e\x58\x7a\x30\x99\xca\xa0\x77\x3e\xd2\x41\x36\x03\x17\x6a\x69\x07\xe2\x90\x9e\xe4\xb3\xdd\xf8\xe9\x1f\xb3\x40\x7b\x9b\xad\x44\xf1\x05\x9e\xab\xd2\x5f\x5e\xaa\x69\x22\x32\xa7\x61\x89\xe2\xfd\x80\xa9\x66\x01\xa8\x24\x18\xc4\xc1\xa5\x90\x41\x13\xa6\x64\x66\x5e\xb6\xcc\xb4\x93\x45\xa7\xab\x1d\xd6\x4a\x4f\xe9\x75\xdf\x91\xf3\x5c\x59\x0b\x99\x5c\x83\x8a\xe1\xff\xbb\xb7\x0c\xe2\xe0\x52\x70\xfb\x30\xdf\xf9\xa4\xfd\x7d\x7f\x5d\x50\x86\x36\x0f\xe3\xfd\xe6\xf2\xf3\x32\x71\x2d\xa1\x18\x03\x4f\x14\xbe\x5c\x2c\x3d\x70\xa5\x41\x48\x01\xc4\x41\x75\x95\xa7\x33\xd7\xa0\xfc\x77\x92\x14\x76\x67\xe7\xc8\xf0\xfe\x64\x4d\x8c\xb5\x3c\x0a\xc5\xec\x51\x50\x50\x72\x0f\x3d\x24\x12\x5e\xf3\x3f\x8e\x2f\x7b\x22\x30\x3c\x03\x3d\x1f\x0f\xe2\xe0\x52\x90\x9b\x27\x72\xd9\xcd\xe2\x48\xc7\xf5\xb4\x4d\x98\x43\xd1\xb8\x73\xd3\xf3\xf2\xc4\x45\x36\x3a\xec\x10\x21\xdf\xb7\x4c\x0a\x33\x50\x0b\x06\x10\x87\xd4\x23\xbc\x57\xd1\xbc\xe9\xdb\xfc\xb9\x24\x7d\x63\x3c\x3a\x21\xf9\x25\x77\x23\x3c\xec\xfd\x1c\x8b\x06\xd5\x31\xf5\x82\x79\x74\x73\x59\xa8\x47\x38\x80\x83\x4b\x21\x05\xab\x8e\x4a\x89\x18\x63\xe6\x61\x5f\x6c\xf7\xb3\x2f\xac\x1f\x97\x1f\x52\x7c\x8c\xdb\x17\x08\xf2\xfe\xc4\xcd\x40\xd6\x18\x71\x17\x6a\x38\x0d\xe0\xe0\x52\x08\x63\x16\xd7\x0d\xa3\xb2\xa4\x4c\xe7\x39\x58\xa3\x50\x3d\xd2\x10\x55\x50\x14\x71\x4a\x1f\xe9\x1e\x61\xee\x4d\x54\xa9\xc7\xbf\x8f\x90\x02\x88\x83\x56\x05\xad\x53\x49\x01\xb4\x27\x39\x49\x0a\x0c\x91\xc9\xa6\x96\x33\xed\xc9\xef\xa2\x71\x30\x3a\xc4\x54\xfd\x05\x77\x54\xed\x1d\xa6\x66\xf0\xf6\xd8\x56\x86\x93\xda\x13\xa1\x7b\x42\x20\x0e\x2e\x85\x4c\xef\x48\x29\x07\xec\xdd\x9e\xde\xe7\x37\xab\x55\xe9\x1d\x87\xbe\x34\xe8\x48\x93\xdb\x7a\xeb\x19\x48\x65\x7d\xf3\xc2\x6d\x81\xee\x4b\x81\x38\xb8\x14\x6c\xcd\xfb\x34\x6d\x38\xd0\x5c\xc7\xe9\x8f\x8c\xd9\xe7\x28\xe5\xd3\xbe\xfb\xbb\x3a\x4f\x4f\xad\xf6\x68\xf5\x48\x5f\x2e\xea\xfc\x0d\x35\x5e\x03\x70\x70\x29\xfc\x29\x6f\xd3\xad\xda\x55\x5b\xfc\x78\xaf\xf0\xbc\xf3\x6c\xe5\xc5\x27\x33\x7a\xf9\x14\xd6\x7e\x9f\x6e\xb0\x6c\xee\x9a\x84\x8d\xcc\x21\xe2\x82\x38\xb8\x14\xb6\xd7\xda\xac\x52\x0e\xcb\xbc\x43\x99\x07\xd3\x0c\xee\x50\xdc\xf3\xf1\x69\xe2\x95\xc6\xfa\x71\x31\xc5\xf5\x9c\x11\x45\xea\x8a\x00\x42\x0a\x20\x0e\x5a\x15\x4e\x67\xae\x41\x3e\xeb\x64\x73\x7d\xbd\x72\xb5\x7b\xaf\xe9\x26\x91\xd1\xd4\x4e\xab\xd8\x1d\x74\xef\xbb\x2a\x2a\x81\x8f\xa4\xae\x71\x5e\x22\xd4\xcd\x2d\xcc\x22\xdb\x47\x18\x55\x10\x87\x6c\xae\xaf\x56\x90\x6f\x94\xbf\x69\x59\x97\x96\xbc\xcc\xfe\xcc\x03\x73\xb1\x2f\x44\x46\x8c\xfe\x8e\xcf\xa8\xfc\xc3\x70\xd9\x27\x35\xf3\x72\x88\xc8\x20\x0e\xd9\x5c\xcb\xe9\xd4\x34\x93\xc5\x3b\x8c\x45\xb7\xb9\xe5\x62\x1b\xdd\x17\x97\xe1\x95\xa7\xa4\x7f\x71\x67\x0b\x5b\x35\xe6\xc5\x48\x9a\x35\x19\x22\x32\x88\xfb\xbf\xe6\x9a\xe8\x3f\x27\xe2\xa0\x97\xad\x11\x5e\x59\x53\x93\xee\x29\xce\xf5\x1b\x7b\x49\xdd\xbf\x26\xe4\x47\x17\xbd\x7a\xf8\x07\xbc\xb5\x7a\xfd\x3b\xa8\xec\x50\xe8\x2a\x78\xce\xaf\xfc\xeb\x95\x8f\xd2\xe4\xf0\x6d\x2e\x5a\x48\x07\x50\x1f\x6f\x4c\x0b\xda\x7c\x8e\xd8\x60\x48\x64\x4c\x4e\x8e\x9c\x95\x5c\xa1\x43\x1f\x0a\xf8\xcf\xaa\x87\x4a\x53\x33\xda\xfb\xec\x52\x40\xfc\x38\x39\x41\x61\xc4\x00\x77\x47\xd8\x75\x83\x45\x2f\xcb\x40\x7e\xf2\x9a\x27\xf4\xa9\x21\xff\x6b\x5e\x19\x34\xb4\x7f\x8b\xa7\x91\xbc\x72\x96\xfb\x4c\x25\x91\xa5\x81\xde\xda\xed\x96\xd8\xc5\x77\x0c\xe7\xe4\xf0\x2c\xea\xaa\xea\x3d\x15\xbf\x6f\x77\xbf\xc3\xf8\x39\x73\xf1\x4c\x8e\x48\x91\xbd\xf2\x44\xf0\xbe\x3b\x55\x51\x91\xdb\x6c\x26\x7b\x65\xb6\xd6\x38\x33\x9a\xfe\xfd\x1d\x8b\xf5\xfe\xe9\xf9\x69\xaa\x6f\x87\xcc\xea\xfb\x67\x72\x20\x8c\xec\x95\x07\xb9\xea\xb2\x45\xb7\x52\x85\x0d\xd7\x69\x6b\xf7\x98\x1e\xa9\xe5\x3e\x79\x41\xff\xf0\x5e\x06\x8f\xc7\x01\xc3\x3a\xc5\x9b\xa5\x2b\x67\x32\x5a\x64\xaf\xac\xc0\xf8\x61\xbe\x25\x77\x34\xbe\x94\x92\xdf\x1f\xf7\x4e\xff\xcf\x3c\x65\x81\x8f\x87\xb8\x1c\xaf\xc5\x4c\xb9\x99\x1e\x2d\xf6\x9e\x45\x85\xba\x44\x2d\xb2\x57\x36\x9a\xf4\x20\xfd\xad\xf6\xe1\xe0\x0b\x17\xd9\x5e\x84\xac\x9c\x69\x23\x4e\x7a\x57\x4e\xdd\x51\x70\x9b\xc2\xe6\xbe\x59\xe3\x1d\xd3\x33\xf3\xca\x20\x11\x9d\xe8\x90\xa6\x6f\x14\x53\xc4\xed\xaa\xf7\xb3\x7f\x24\x1d\x36\x70\xeb\x7a\x6b\x80\x97\xc3\x2b\x56\xef\xbf\xd1\xdc\xe7\xe0\x79\x39\xeb\x3c\xe4\x90\x00\x1c\x3c\x01\xf6\x9d\x8f\x8c\xbe\xa3\xb4\x75\xae\x3a\x37\x83\x94\xba\xeb\xfa\x36\x96\xae\xd6\xf3\xcb\x0a\x82\x9b\x79\xc5\x8d\xbf\xdd\x2c\xb5\x49\x10\x71\x41\x1c\x52\xbb\x11\xa9\x21\xac\x07\x91\x7f\x46\xb1\x8c\xe4\x16\x52\x3b\x89\x38\x6c\x9e\x7e\x2e\xb9\x99\x22\x99\x64\x7e\x0e\x37\x4f\x47\xfc\x21\x74\x01\x17\xc4\xc1\x13\xe0\x97\xdc\x1e\xdb\xc6\xf2\xc2\xd7\x37\x13\x9f\xfb\x4c\x6e\xb8\x98\xb5\x4e\x86\x99\x33\x27\xa3\xa1\x78\x8b\xf1\x65\x29\xdd\x93\x84\x1c\x12\x88\xf3\x12\xff\xef\x2a\x4a\xe1\xf5\x8c\xca\x38\xc0\x2e\xcc\x80\xec\x35\xff\x72\x4e\x5f\xce\x87\x1c\x1b\xab\x44\xe5\xe8\x51\x92\x3b\xe9\xec\x4a\xf7\x64\x57\x10\x5e\x19\xc4\x41\xd5\xd3\xa7\xf2\xca\xa0\xdf\xf5\x49\x4a\x70\x79\x18\x9c\x39\x5e\x1a\x74\xb5\x0d\xed\xc3\x20\xf5\xf7\x1a\x83\xb5\x29\xa7\x1c\xe9\xcd\xfc\x85\x3b\xb7\x58\x3d\x6f\xdb\x19\x6f\x20\x66\x00\xc4\xc1\x95\x10\x12\xb7\x6f\xf5\x73\xf7\xe1\xf2\x51\xcf\xfd\x9e\x84\x6e\xfe\x52\xca\xc3\x0c\x1c\xf9\x9e\xf9\x4b\x1e\xd7\x27\x62\x4b\xef\xdb\x9f\x43\xc4\x05\x71\x48\xbd\x57\x37\x1b\xcb\x76\x57\x9c\xb7\x3a\xe5\xd9\x79\x76\x23\xbc\x5a\x22\xb3\x7e\xac\x7b\x12\x89\x53\x57\xa8\xe4\x96\xd2\xb1\x7a\xaa\x40\xbd\x57\x01\x1c\x5c\x09\xee\x06\xe7\xfe\x5c\xf9\xd5\x5d\xbd\xcb\xce\xd0\x22\xdd\xd1\x19\x67\x74\x77\x84\x2b\x6b\xc2\xad\xe7\xba\x9f\xed\x55\xce\x07\x95\x50\xc7\x6b\x10\x07\x57\xc2\x4d\xbb\xd6\x61\xe1\xad\x4f\xc1\x1d\xe9\x1f\xad\x7f\x46\xd8\x14\x9d\xbb\x6f\xa3\x76\x28\x3e\xb3\xfb\xad\xe2\xe7\xc2\xe4\xbe\xbf\x0b\x62\x2b\x04\xe2\xa0\x42\xc9\xd3\x79\x65\xd0\x5a\x7b\x92\x14\x52\xf7\x28\x2b\xde\x24\xb3\x6d\xb2\x30\x70\xa8\x62\xae\x69\xd1\xe2\x98\x1b\xce\x1e\x7c\xcd\x7c\x8a\x16\x58\xe7\xd4\x28\xc0\x7f\x03\x31\x05\x20\x0e\x2e\x85\x80\xc9\x1f\x64\xac\x34\x8d\x56\x4f\x6c\x83\x9d\xae\x35\xd0\xf1\x4c\xb8\xf0\x93\xde\x29\xf4\x7c\xb0\x75\x98\x84\x73\x6e\xe6\x06\x54\x4f\x02\xe2\xe0\x52\xe0\xa1\x4d\x6f\xe3\xbf\x7b\x43\xbc\xe4\xaa\x7e\xb2\x64\xce\xb5\xce\xd4\x9b\x05\xa8\x15\xc5\x7b\x2a\xd5\x07\x6e\xdc\xbd\x0e\xba\xd0\x87\x2e\x10\x87\xe4\x95\x69\xb9\x98\xa7\x24\xc6\x28\x0b\x74\x1b\xf6\x8c\xc5\xd1\x0f\x84\x28\x06\xd3\x13\xf4\x0e\x6b\xee\xe7\x70\x16\xa0\x0f\xb6\xbe\x87\xbc\x32\x80\x83\x4b\xc1\x87\x36\x9d\x43\x84\x3e\x9c\x43\xa8\x5e\xbd\x3b\xe4\x6b\x8a\x13\x9a\x72\x44\x9f\xad\x3b\x2d\x09\x06\x19\x0d\xce\xd1\xaf\xa0\x26\x84\x14\x40\x1c\x54\x28\x79\x3a\xaf\x0c\xca\x7f\x27\x49\xe1\xe6\xb8\xbd\x1f\x47\x4a\x76\x86\x4c\x24\x71\xe3\xd3\x22\x05\x7a\xb3\x8a\xa1\x37\xf2\x81\x89\xcf\x13\x43\x53\x52\xeb\x6e\x0c\x42\x9f\x0b\x40\x1c\x5c\x0a\x71\x0d\x5b\xe9\x9e\x22\x86\xea\xe2\x9f\x0f\x13\xd9\x09\xd1\x7d\xc4\x07\x6d\x8b\x68\xa5\xd2\xdd\x89\x6c\x82\xec\xd0\xf5\x04\xa1\x4a\x7a\x10\x07\x97\x82\x6b\x64\xc6\x10\x5e\xab\x98\xa3\xcd\x41\xd4\x63\x43\x74\x46\xa3\x16\xbc\x6d\x3b\xeb\x2c\x5f\x2f\x92\x67\x35\x47\x05\xaf\x3d\xca\xa0\xfb\x44\x00\x0e\x2e\x05\x26\x72\xc5\x8a\x24\x6c\x07\xda\x75\x9c\xc7\x63\x54\x87\x03\xd3\xd5\xd2\xa6\x9d\x37\x06\x97\xb5\x83\xa3\xb8\xde\x15\xd2\x97\x40\xed\xb3\x40\x1c\x5c\x0a\x0d\xed\x84\x7e\x92\x56\xde\x6c\x86\x8e\x73\xf9\x44\x63\xd8\xca\x22\x4f\x99\x50\x42\x5e\xdf\x1b\x7d\xa6\x5e\xfa\x59\xc7\x4a\x3d\x13\x21\x05\x10\x07\xad\x0a\xa7\xf3\xca\xa0\x3d\xc9\x49\x52\x28\xfb\x49\x39\x89\x4b\xa0\x46\xf3\x5e\x47\x47\x56\x8b\xf6\xa6\xd1\xca\xe3\xdb\x8a\xef\xf9\x19\x85\xc9\x76\xa3\xa9\x79\x02\x08\xa0\x6b\x24\x20\x0e\x2e\x85\x47\xd4\x55\xa2\x36\xc4\xdc\xe1\x38\xed\x1a\x4b\x16\xa9\x2f\x55\x2f\xe0\xab\xf5\xa6\x14\x3c\x6d\x96\xdc\xe6\x4a\x0b\xe2\xe7\xb0\x80\x1a\xa2\x00\x38\xb8\x14\xe8\x1b\x4c\x5e\x96\xa1\xe0\x5f\xf9\xea\xa6\x98\xd9\x7a\xd7\xa6\x31\xc7\x63\x6d\x72\xc7\x19\x4d\x59\x3d\xc3\x92\x4b\x2e\xda\x73\x1b\x11\x17\xc4\xc1\xa5\xc0\xc6\x9e\xce\x2d\xe7\xd8\xdb\x16\xff\xec\xe3\xb0\x71\x5c\xee\x27\xbe\x8e\xfe\x2b\x6b\x46\x24\x83\x25\xa1\x43\xca\xcc\x2f\x49\xff\x22\xe2\x82\x38\xb8\x14\x70\x74\xf4\xa8\xe4\x5c\x17\x12\xb4\xfd\xc3\x24\x0b\x9e\x7e\xea\xbd\xaa\x41\x82\x3d\xe1\x2f\xb3\x93\xf1\x3b\xbe\xef\xfc\xe1\x1b\x2b\xe8\xa9\x6a\x00\x07\xad\x0a\xa7\xf3\xca\x20\x9f\x75\xb2\x57\xc6\xe5\x56\x0a\x92\xe7\x11\xae\xfd\xae\x2c\x93\xdf\xdb\xe4\xd8\xea\xf2\x7e\x0c\x4b\x7b\xca\x67\x3f\xe7\xad\xa0\x68\x8a\xad\xf7\x08\xc2\x77\x82\x38\x64\xaf\x6c\x23\x6b\xdc\xa4\x85\xf2\xc1\xe9\xb1\xfe\x03\x32\x17\x43\x81\xb7\x7f\x9f\x5e\xd9\xe3\xbf\xc0\x53\x35\x94\x54\x89\xae\xef\xfe\x80\x1d\x11\x19\xc4\x21\x7b\x65\xe1\xf3\xe6\xa9\xba\xbe\x6f\x22\x58\x97\xd9\x2e\xfc\xd0\xf2\xcc\xfc\x55\xe1\x7c\x39\xbb\xea\xe6\x94\x1e\x4e\x60\x39\x7d\xb6\x28\x23\x22\x32\x88\xfb\xbf\x5e\xf9\x3f\xaf\x8c\x03\x9f\xaa\x46\x78\x65\x7c\xc1\x38\xac\x52\x72\x8c\x5b\xa1\x37\x04\x02\xb1\x5e\xf9\xbf\xdb\x77\x7c\x72\xac\xe0\xa1\x80\x29\xce\xaa\x28\xfe\xfa\xf3\x42\xf2\xbf\x5e\xd9\xff\xa5\x0e\x36\x7a\xe2\x80\x90\x3a\xfd\xd7\xc2\x67\xb3\xfb\x4f\x5f\x29\xac\xe5\xcd\x72\x7c\x6e\xfc\xcb\x85\xde\xed\x67\xe7\xf6\xef\x6d\xdd\x24\xcf\xce\xe6\x66\x41\xe5\xdb\x9b\xf2\x45\x9b\x58\xe7\x3f\xe0\x71\x88\xad\x99\x94\x38\x8b\xdf\x4c\x35\x29\xd7\xad\x56\x77\xaa\xfa\x5f\xf3\xca\xa0\xa1\xfd\x5b\x0d\x2d\x09\xf7\x53\x82\xde\x5b\xee\x4c\x68\x49\xbd\xc1\x1f\x9d\x9d\xe5\xf7\x24\xc5\x23\x1c\x45\x22\x62\xcb\x94\xaf\xa8\xe0\xf0\xd9\x7e\xaa\x97\xaf\x3c\x93\x23\x4f\x64\xaf\x5c\x55\x20\x33\x1e\x3a\xaa\x1b\x82\x2b\x41\x48\x73\x51\x88\xc3\x7c\xed\x79\x7c\x0a\x66\x9e\xa5\x8b\x61\x08\x0e\x73\xf5\x39\x83\x96\x33\x39\xe0\x15\x46\x3e\x57\x3e\xb8\x8c\x75\x73\x35\x57\xcc\xc0\x8c\xfb\xb3\x63\x22\xe1\xec\x70\x43\x55\x0d\x07\xca\xa3\xee\xe7\x03\x46\xad\x26\x47\xd7\xc5\xcf\x64\xb4\xc8\x5e\x59\x7c\xd0\x8e\x37\x4c\x5b\x37\x6e\xb7\xfc\x6f\x3f\xf9\x85\xde\xf3\x09\xf2\x81\x5a\xb6\xfd\xe8\x9f\xa6\xeb\x54\x4d\x85\xc8\xc3\xcf\xe6\xe9\xe9\x97\x48\x7f\x96\x3d\x23\xf5\x3a\xf7\x41\xba\x39\xf5\xad\x5a\xcf\x7b\x03\x57\x06\xd6\x09\x75\x98\x6d\x09\x35\x73\x78\x9f\xda\xb4\x4f\x50\x3e\x59\x38\x33\xaf\x0c\x12\xd1\x49\x09\x50\x3c\xf5\xf2\x81\x84\x62\xd0\xb0\xda\xb7\x84\x9b\xe4\xb7\x7f\x99\xd2\xed\x99\x0a\x37\xf1\x66\xa7\xc7\xea\x78\x7f\x2c\x5c\xb6\xfd\x80\x58\xf8\x41\x1c\x3c\x01\xe2\xfc\x35\x79\xf8\x5a\x93\xac\x48\xe4\xdd\x8f\x88\xa4\x28\xc6\x4b\xa1\x39\xf2\x0e\x1d\x36\x66\x54\x1e\x3f\x6e\xca\xcf\x35\x73\x1e\x20\xe2\x82\x38\x78\x02\xfc\x4c\xf5\x6a\x85\x19\x3d\x94\x22\x2d\x03\xed\x6b\x56\x71\xe6\x7b\xc3\x4d\x3c\x4f\xb9\xea\xa8\x4b\x24\x4a\xd4\xcc\x6e\x81\xcb\xde\x88\xb8\x20\x0e\x9e\x00\xb1\xf2\xe2\x9c\x4c\x35\xd4\x0c\xee\xe8\x3b\xf9\xc5\xa9\x11\xd8\xbf\x8b\x31\x31\x2b\x55\x8f\x5f\x0e\x5a\x2d\xe3\x97\x4a\x13\xb8\x87\x88\x0b\xe2\xbc\xc4\x51\xdc\xff\x8d\x1b\xaf\x7f\x99\x37\x7f\x13\x2d\x75\x7d\xe3\x49\xfe\xba\xe6\x97\xb5\xeb\x8c\xfa\xa5\x5e\x0c\x26\x83\xd3\x89\xb5\x93\xbd\xb1\x22\xd0\xfb\x58\x20\x0e\x2a\x87\x96\x3c\xd5\xd3\xa2\x80\xdf\xf5\x49\x4a\x08\x4b\xe1\x70\xd2\x34\xff\x99\x76\xc4\xa6\x60\xd5\xd8\xf2\xf9\xf8\x46\x91\x9b\xfb\x0e\xed\x1f\xb7\xce\x5b\xa1\xe4\x9d\xbf\x43\xa1\xa7\xa7\x41\x1c\x5c\x09\xed\xf3\x8f\x4a\xa7\x33\x2a\x0f\x52\x6f\x04\x29\x19\xd3\x1c\x93\x26\x1a\xd9\x1b\xf2\x37\xfe\x95\x4d\x5c\x0e\x67\xc4\x08\xcf\x85\xce\x7f\x41\x1c\x52\x27\x99\xd5\xe6\xa6\x95\x12\xdf\x89\x4a\x6c\x61\x35\x3d\xdf\xab\x03\xf6\xd7\xba\x15\xcc\xee\xbf\x55\x57\x68\x35\x7d\xfe\xe9\x96\x1f\xf4\xb8\x39\x88\x83\x2b\x81\x99\x45\x9e\x46\x6a\xe8\xb6\xec\x2d\xf6\x94\x92\x14\xd3\xf7\xb3\x59\xa5\x9a\x9d\xaa\xfe\x4d\x1d\x38\xf3\x1b\xda\xd4\x79\xf7\xd4\x11\x71\x41\x1c\x5c\x09\x8c\x2f\xad\x2f\xbe\xa1\xd3\xdd\xd4\x4c\x30\xf1\xbb\xd8\x43\xf9\x57\x24\x7a\xc2\xa8\x8f\x17\xb5\xfe\x67\x7b\xbd\x7b\xa3\xdf\x9b\x6e\xe8\x95\x59\x00\x07\x55\x3e\x9e\xf2\x5c\x19\xb0\xd6\x9e\x24\x85\xf9\x09\x8c\x70\x75\xdf\x9d\x92\xca\x5e\xe9\x5f\xcb\x47\x1c\xcd\x7f\xde\xd6\xf1\x89\xab\xd4\xde\x09\xff\x5e\x1d\x75\x68\x3c\x30\x80\x98\x02\x10\x07\x97\x02\xb3\x28\xee\x3b\xed\xfc\xf2\xc9\x19\x86\x5b\x93\xba\xb2\xaf\xab\x45\xdf\x5c\x9b\x59\xde\x16\x53\xe7\xcd\x69\xe1\xfb\x31\x49\xc6\x08\x4d\x2d\x80\x83\x4b\x01\x57\x38\xba\x48\xcf\x2a\x68\x75\x6f\x46\x72\x26\xbe\x78\x34\xc2\xee\x2a\x46\xcc\x6c\x83\x6c\x90\xda\x67\x8d\xb5\x81\xd2\x8b\x87\x88\xb8\x20\x0e\x2e\x05\x1d\xc6\x61\x29\xd5\x08\x2a\x14\xcc\x0b\x35\xe9\x06\x64\x54\x6b\xdc\xef\x6e\xfc\x4e\xb7\x0d\x8f\x66\x17\xa8\x3a\x64\xbe\x6f\xec\x87\x88\x0b\xe2\xe0\x52\x70\x70\x5a\xb3\xb9\xe2\x6a\xc0\xd6\x8a\x55\xfa\x51\xf3\xa3\xec\xfb\x74\x4d\x8d\x8c\xf6\xa4\xea\xc0\x77\xdb\x1a\xf4\xf1\x31\x16\xe3\x08\x29\x80\x38\xa8\xf2\x51\xf8\x54\x52\x00\xe5\xbf\x93\xa4\x40\xdf\x70\x44\xa8\xb9\x34\x32\x87\x62\xe5\x5f\xba\xd1\xa1\xfc\xcc\xa6\x5e\x73\x2e\x7a\xa2\x9e\xd5\xf1\xe7\x90\xd2\x03\x09\x42\xae\xff\x67\x38\xfe\xbf\x39\xb8\x14\x9a\x27\x4d\x2f\x38\xd4\xe8\xa7\xca\x0c\xaf\xbc\x47\x13\x4e\xc0\xaa\xa3\x70\xbd\x22\x72\x34\xfa\x9e\x57\xb3\x9a\x62\x45\xe5\x29\xf4\x2e\x23\x88\x83\x4b\x21\x83\x93\x65\xbd\x45\x47\x95\x6f\x65\x86\x86\xb6\x27\x5a\xe6\xf7\xf3\xa5\x72\x83\xb1\xfb\xf8\x44\xe5\x3b\x2b\x5c\x9b\x22\xae\x91\xd0\xe7\x0d\x00\x07\x97\x42\x33\x86\xbd\x4b\x29\x83\x7a\x79\xa7\xcb\x57\x6d\x87\x12\x12\xbb\x57\x4a\x45\x54\xd1\xaf\x25\x4d\x72\x4b\xbd\x4b\x94\xaf\x7d\x81\x8a\x60\x41\x1c\x5c\x0a\xe7\x6f\x8b\x16\x1d\xf3\xc4\xa1\xfc\x65\xad\xce\x3d\xff\xdc\xd9\x6e\x56\xb9\x43\x5a\xe8\x8a\x0b\xbb\x4b\x21\x17\x0d\x56\xda\x3d\xe8\x8a\x01\x88\x83\x56\x85\xd3\x79\x65\xd0\x9e\xe4\x24\x29\x90\x8c\xf8\xda\x10\x27\xac\x1c\x96\xab\x3c\x0f\xa5\xff\x39\x30\x48\x4a\x4e\x9e\x28\x86\xf1\xbb\x03\xeb\x8b\xf3\x43\x7f\xd3\x00\x4c\xc4\x14\x80\x38\xb8\x14\x96\xfd\x07\xb6\x1c\x36\x79\x94\xdf\x93\x6d\xcd\xe8\xb6\xbb\x69\x38\xbc\xe9\x56\x17\xfd\x41\x4d\x27\x29\x75\xef\xe2\x8c\xcb\x2a\x1d\x22\x2e\x88\x43\xea\x9c\xd2\x77\xf1\xf2\xbb\x22\x05\x8c\x2c\x7c\x0f\xec\x39\x4c\x49\xdc\xb0\x91\xf5\xce\xfe\xf6\x21\xf2\x46\x0f\x34\x93\x11\xbc\x12\xe8\x81\x2c\x10\x07\x97\xc2\x01\xc5\xfd\x34\xad\xe1\x73\x81\xb8\xbf\xb4\xf4\x1f\x33\xab\x58\x6a\x7d\xbd\x83\x3d\x9a\x54\x1c\xad\x4a\xa3\xdb\x2f\x8e\xde\xe2\x86\x88\x0b\xe2\xe0\x52\x78\x16\x34\x3f\x1c\xa9\xbb\xa6\x6f\xde\xa0\xf2\x75\xba\x90\x99\xc6\x43\x14\xfb\xaf\xfb\x40\x94\x97\x33\xfd\xa0\xce\xd5\x25\xb9\x50\x84\x14\x40\x1c\xb4\x2a\xbc\x3c\x95\x57\x06\xf9\xac\x93\xbd\x72\x06\x8b\x44\xc2\x4b\x7d\x51\x95\xb8\x71\x66\xfc\x9f\x89\x71\x1d\xa5\xf1\x7f\xd3\xbe\xbe\x6e\xbd\x38\xb5\xda\x52\x88\x26\xe8\xe9\x82\xf0\x9d\x20\x0e\xd9\x2b\x3f\x15\x35\xb3\xb6\xf6\x7f\xed\x50\x58\x56\xec\x94\x46\xd1\xa0\xb0\xd5\x7f\xc8\x92\xef\x25\x13\x7f\xd5\xd3\xe1\x23\x45\x10\xf6\x26\x22\x32\x88\x43\xf6\xca\xb5\xae\xd7\xba\x50\x2e\x85\xbe\x1d\x5d\x18\xd4\xf2\xff\x35\x7a\xf7\xa6\x41\xf9\x8d\xab\xea\x22\xb9\xcf\xb8\x29\x71\xdd\x1e\x3f\x69\x44\x44\x06\x71\xff\xd7\x2b\xff\xe7\xbf\x0e\xf8\xf6\x34\xc2\x2b\x77\xe5\x35\xbe\xbf\xf1\xb5\x43\x9a\xf6\xeb\xaf\x0e\x91\x45\xda\x04\x2e\xcd\x9e\x83\x0a\x2e\xfa\x7d\x92\xb1\xc2\x9b\x9e\x35\x6c\xec\xff\x7a\xe5\xed\xb0\xd4\xd7\x5c\x92\x8f\xde\x4c\x0f\xff\x21\xfa\x36\xf8\xe8\x5e\x88\xdd\xd5\x2a\xd7\x07\xf5\x03\x06\x91\x5a\xb9\x39\x75\x07\x73\xff\xa0\xa3\xbf\x7e\x99\xb4\x05\x52\x9a\xe9\x71\x55\x3c\x2a\xa2\xc9\x2c\xe6\xbd\x4b\x95\x32\x18\x11\x7a\xf1\x88\x6a\xa3\xc5\xef\x0f\x86\xce\xff\x9a\x57\x06\x0d\xed\xdf\xf2\x66\x24\xaf\xec\xe5\x94\xb3\x53\x60\x19\xad\x38\x1a\x67\x1c\x33\x78\xfb\x99\xcd\xab\x9b\xf1\x55\x7b\xd1\xf5\x97\xc5\xaf\xf1\xbc\x23\x71\xc5\x65\x3a\x93\x23\x4f\x64\xaf\xac\xf4\x88\xfb\x5b\xc7\xa6\xc5\x06\x43\xee\x63\xfb\xdf\xbb\x28\xea\x6a\x0f\x9a\xda\x1e\xf6\x4b\xfa\x37\xf7\x91\x49\x91\xe9\x2e\x7e\x39\x93\x03\x5e\x64\xaf\x8c\x1a\xf1\x33\x69\xfe\x7c\x6f\xbe\xe1\xee\x10\x2b\x65\x36\xe3\x95\x90\x26\x0d\x53\x7d\x3a\x63\xeb\xbb\xd2\x46\xad\xd5\xc6\x68\xb7\xcf\x64\xb4\xc8\x5e\xd9\xc1\x8c\xcc\xdb\x55\x7f\x35\x7b\x7f\x52\x3c\xdf\x9d\x85\x25\x7c\x7b\xd1\x97\xaf\x70\xc1\x9b\x22\xc0\x6f\xfe\xd8\x08\xf5\x62\xed\x99\x8c\x16\xd9\x2b\x4f\x99\xde\x1e\x6c\x10\x7e\x8d\x22\xde\xf9\xbe\xad\x9a\x8e\x35\x2d\x66\xf6\xf3\x62\x51\x6a\xda\x92\x7b\xfc\x63\x3c\x77\xed\xc1\xbc\x33\xf3\xca\x20\x11\x9d\x94\x00\x1f\x05\x0d\xb1\xc4\x76\xeb\xcc\x59\x89\x31\xc5\x34\x31\x7f\x1f\x3f\xec\xea\x0f\x0d\x62\xeb\xbb\x28\x20\xb0\xfe\xf2\x45\xfb\xeb\x8f\xd0\x47\x5d\x00\x07\x4f\x80\xe8\x1f\xd5\x51\x0d\x1f\x94\xea\x0c\x15\x60\xdf\x58\xfd\xd0\xe7\xf1\x71\xfd\x01\xf5\x11\xb3\xc9\xf1\x1a\xed\x7d\x13\x72\xd4\x70\xe8\xba\x25\x88\x83\x27\xc0\x0a\x8b\xb7\x62\xe3\x84\x37\xc8\xcb\xad\xde\x86\xaf\x7e\x18\x9a\xc7\xe3\x90\xbd\xf6\x60\xd8\xfb\xa2\xf6\xdc\x10\x46\x31\x81\x38\xf4\xcc\x11\x88\x83\x7f\xd4\xfd\x44\xce\xce\xf4\xda\x78\xc9\x88\xf5\x7e\x79\x99\x53\xc3\x13\x3a\xe5\x1a\x73\x01\xef\xdc\xe7\xe6\x6a\x32\x63\x9c\xf8\x93\x3f\xa1\x3b\xe3\x20\xce\x4b\x1c\xfb\x3f\xf3\x70\x1f\xdd\x7b\x76\xfe\xd1\x1f\x6f\x66\x87\x25\x9b\x86\x7c\x49\xcf\x6d\x79\xed\x90\x84\xf6\x47\xa1\x4d\xf9\xe1\x2d\x79\x82\x14\x6e\x08\xaf\x0c\xe2\xa0\xfa\xe6\x53\x79\x65\xd0\xef\xfa\x24\x25\x88\xaa\x2e\x6c\x64\x4e\x58\x2b\x56\xdc\xa8\x48\xc3\x10\xef\xc4\x7e\x6b\x2b\x8a\xf6\xf7\x0b\x6a\xcb\x41\x7a\xa9\x79\x68\x85\x2d\xe4\x69\x41\x1c\x5c\x09\xbd\x7c\x15\x47\x8f\x87\x9d\x86\x3e\xda\x0d\xa4\x3c\x2b\x08\xff\x33\x4d\x45\x11\x1c\xbb\x57\x47\x3f\xe2\x2b\x22\xb5\xca\x66\xf9\x03\x11\x17\xc4\xc1\x95\x70\x77\x7b\x7a\x63\xfa\xde\xad\x1c\x0d\x14\xc5\x41\x8e\xa3\x54\x21\x9e\x5b\x21\xf5\x97\x97\x4b\x9e\x6f\x1b\x57\x3d\xc6\xc0\x31\x8c\x43\xc4\x05\x71\x70\x25\xd4\xcd\x50\x92\x37\x1c\x4a\x60\x36\x74\xf7\xb8\x8f\x63\x18\x59\xb3\xfa\x3e\x53\x1e\xb4\x6f\x9f\xec\x23\x17\x8f\x78\x27\xd5\x04\x9d\x20\x81\x38\xb8\x12\x36\xf9\x98\xae\x7d\xc9\xff\xc4\x36\x8d\xe6\x67\xd6\x38\xef\xa1\x71\x17\x2b\xbc\x9a\xb0\xb4\x36\xff\x1a\x5f\xad\xea\xba\x9d\x0c\x2a\x62\x2b\x04\xe2\xa0\x52\xc6\xd3\x79\x65\xd0\x5a\x7b\x92\x14\x2a\x12\x3b\x0d\xde\xb4\x31\x54\x2f\x30\x3a\x4b\xe5\xa3\x99\xb6\x1b\xc8\xf8\xda\x51\xeb\xb0\x3d\x36\xbe\x65\x55\xf2\xde\x4d\x00\x7a\x2b\x06\xc4\xc1\xa5\xa0\x1c\x11\x7b\x85\x39\xcd\x55\x5d\xfa\xa6\xab\x5f\xe0\x9e\x25\xfe\x05\x16\x81\x96\xda\x02\xd6\xfc\xb6\xb8\xee\x68\xed\x1d\x5f\xc8\x20\x81\x38\xb8\x14\xd4\x36\xfc\x4d\xa3\x6b\xd5\x2a\xfe\x32\x0d\x74\xe2\x8e\xbb\xe2\x58\xdb\x63\xd7\x93\xa6\x3d\xb9\xbe\x6b\x34\x3f\xbf\x4a\x17\xe7\x8c\x88\x0b\xe2\xe0\x52\x20\xba\x6a\xab\xc2\xf1\x6b\x49\x8d\x27\xcf\xdd\x9b\xc3\x5b\xcf\xb5\x03\x3b\x7e\x22\x51\xc0\xa9\xb5\x00\xf5\x7c\xa4\xb6\xca\xa7\x27\x88\xb8\x20\x0e\x2e\x85\xc5\x1d\xfe\x06\xbd\xad\x5f\xb8\x45\x14\x8f\x68\xb2\x6a\x1f\x8e\xba\xef\x18\x96\xd6\x46\xfe\xb0\xa1\xac\x8e\xfe\xf5\x77\x21\x5d\x0f\x21\x05\x10\x07\x95\x32\x9e\xce\x2b\x83\xf2\xdf\x49\x52\xf8\x6e\x59\xd3\xb4\x17\x2c\xaa\x38\x9b\xe9\xa6\xf1\xf8\x75\x3c\xda\xa4\x62\xa9\xdf\x96\x9d\xa1\x4f\x07\x9b\x46\x2e\xe1\x37\x22\xe8\xdb\x24\x88\x83\x4b\xc1\x84\x8e\x6f\xf2\x2a\xe6\xad\xeb\xa1\xde\xef\x4c\x9d\x29\xda\xf8\x09\xa8\x1f\x5c\x7c\x2f\xf7\xa9\x96\x85\x90\x2f\xa5\x8d\xcd\x12\x3a\xb2\x07\x71\x70\x29\xbc\xad\x28\x1b\xb1\xcf\x3f\x1c\x64\x5a\xda\xa2\xb6\x16\x6e\x30\x68\x57\xd8\x4b\xdf\xe3\x76\x54\x4c\xb2\x17\xd1\xf9\x6a\x5e\x09\xdd\x95\x06\x71\x70\x29\x48\x6b\x92\x78\x90\xb2\xe3\x7e\xfe\x29\x79\xf0\x0b\x4d\x2c\xf1\x32\x93\xff\xee\xcf\x34\xbf\xf3\xfb\xbf\x8f\x51\xdf\x0d\x4b\xbe\xb6\x41\xc4\x05\x71\x70\x29\x88\x2e\x69\x70\x8d\xdd\xa0\xb9\xf4\x37\x18\xfd\xf1\x95\xe9\xde\x56\x85\x55\x8a\x64\xec\x6e\xb5\x72\xb7\xcf\x97\x7c\xbc\x26\x57\x6e\x21\xa4\x00\xe2\xa0\x55\xe1\x74\x5e\x19\xb4\x27\x39\x49\x0a\x5e\xe3\x6e\x3f\xbb\x44\xca\xac\xb6\x26\x14\xcd\x4b\xdf\xa8\x7d\x74\x12\x0a\x48\xf7\x55\x52\xda\xf2\xf0\x19\x7e\x96\x35\xa6\xf0\x0b\xea\xd5\x08\xe0\xe0\x52\x48\x76\x8f\x68\xcb\xee\xae\xee\x10\x74\x17\x7b\x2d\xff\xc6\xf3\x00\xcb\x56\x4d\xc7\xfb\x9c\x62\xb4\xbe\x49\xab\xdc\x6c\xf3\x35\x53\x44\x5c\x10\x07\x97\x02\x76\x18\x8a\xca\xd5\xec\xb5\x8f\xbd\xd2\x01\xd2\xd7\x70\xee\x12\xa9\x08\xdb\xb6\x67\x7b\x88\x96\xa6\xd7\xed\x1e\x31\x13\xeb\xf3\x21\xe2\x82\x38\xb8\x14\xf2\xfc\xf1\xd3\x16\x28\xf4\x51\xdd\x3a\x6d\x6d\x33\x6b\xeb\x70\x51\x5b\x05\xe9\xd8\x83\x5e\x25\x58\x7c\xbf\x2c\x9a\x49\xfd\x02\x03\x6a\xd6\x0f\xe0\xe0\x52\xa0\xd2\x33\x7d\x37\xd2\x4d\x2f\xb0\x50\x3f\x2c\x36\xb6\x4b\x46\xc0\x86\x57\xb6\xf8\xdb\x85\xeb\x3b\x8f\xdf\xc7\xc9\xa9\xaf\xc2\x63\x08\x29\x80\x38\x68\x55\x38\x9d\x57\x06\xf9\xac\x93\xbd\x32\xe9\x94\x75\x41\xcf\x14\xe5\x93\x3f\x7e\x82\xc9\xbd\x04\xc6\x9f\xb0\xe9\xc5\x49\x5e\xe5\x1e\xa7\x5f\x79\xfa\xfb\xf6\xc6\xab\x73\x86\x08\xdf\x09\xe2\x90\xbd\x72\x1c\x4f\xc9\x85\xee\xdc\x6f\xf8\xb6\xcb\x79\x17\xee\xde\x47\x63\xb5\xdd\xbd\xd5\xde\x78\x3d\xa0\x6c\xcd\x2b\xcf\xcf\x35\x8a\x4e\x1a\x11\x19\xc4\x79\x49\xa0\x60\xff\x37\xf2\x2f\xde\xe9\xeb\x3e\x14\xe1\xcc\x66\x46\x7f\x7a\x2a\xb4\xfa\xfe\x7e\xe1\x79\x78\xc4\x43\x3e\xec\xb3\x31\xc1\xd1\x70\xc4\xa8\xe1\x86\x88\x0c\xe2\x90\x67\x03\xf8\x98\x34\xc2\x2b\xbb\xbb\x9c\xc7\xf4\x10\xa9\xd4\x93\x28\x63\x4d\xcc\x2c\x15\x1c\x8b\x1c\x0b\xfd\x53\xf4\x2c\xf3\xc6\x17\x96\x05\x09\x53\xe3\x87\xcd\xff\x7a\xe5\x5e\xaf\x9f\xca\x1e\x58\x26\x43\xf7\x7f\xd7\xeb\xb8\x48\xa6\x5a\x5c\x32\x76\xfa\xc9\xfb\xf9\xd5\x25\x05\xa5\x8d\xc6\x7c\xee\x15\xd6\x7f\x50\xdf\x5f\xcc\x54\x9f\x5f\xe2\xc6\x2d\xdc\x7b\xc4\xc3\x13\x11\x7b\x70\xfd\x25\x67\x10\x9a\xad\x60\xbf\xd6\x88\xb8\xcc\xfe\xc6\x0c\xfd\xff\x9a\x57\x06\x0d\xed\xdf\x7a\x65\x24\xaf\xcc\x58\xf9\x9c\x4f\x80\xfa\x80\x93\xee\x8e\x75\x9b\x75\x7e\xe8\xd1\xa5\xc9\x47\x15\x7e\x28\xec\x3e\x96\xc4\xcb\xcc\xfa\x19\x09\x0f\xce\xe4\xc8\xf3\x2a\x92\x8d\xf3\x50\x72\x9f\xfb\x59\x4d\x7d\xc4\x3f\xac\x22\xbc\x2e\x51\x70\x60\x22\xd1\x57\x36\x7f\x61\x62\x32\xf9\x88\xbc\x3f\x9c\x36\x47\xf2\x4c\x0e\x78\x91\xbd\xb2\xaa\xa8\xc8\x04\xd3\x74\x02\x39\xd3\xef\xa0\x0a\x7f\x9e\x39\x76\xfb\xc7\x42\x1b\x75\x37\x4c\x1c\xac\x78\x50\x5e\xaf\x34\x3f\x3a\x3a\x93\xd1\x6a\x23\xfd\x59\xf4\xdd\x7c\x7a\xd1\x99\xcb\x5d\x69\x4d\x32\x78\xba\x57\xdf\x87\x3a\x26\xb9\x53\x10\x7b\xe4\xd5\x54\x2c\x93\x96\xe3\x12\xbe\x74\x3e\x93\xd1\x22\x7b\xe5\xf3\x55\xe3\x9e\xbf\x17\xa4\xb8\xd1\x42\xd2\x19\xf1\x30\x87\x6f\x0a\x88\x3b\xaf\x6d\x90\xc7\xb7\x99\x35\x84\xc9\x67\x47\xd4\x9f\xc1\x24\xeb\x9e\x4e\x44\x27\x25\xc0\x5c\x7f\xe5\x37\x15\xf7\x72\x6a\x1e\x35\x3f\x17\xd9\x2c\xf7\xe5\xca\xf2\xc6\xa2\x57\xa4\x4d\x4d\xd4\x25\xd0\x5f\x22\x1d\xb7\xbc\x80\x58\xf8\x41\x1c\x92\x43\xca\x31\x16\x7e\x3d\xca\x4a\xfe\x95\xf7\x72\x49\x4a\xf1\x8d\x29\xcf\x6f\x8b\x01\x99\x95\x26\x1a\xaf\x2d\x15\xec\x15\xd3\x1f\x1f\x43\x0e\x09\xc0\x21\x3d\xdd\xeb\x9a\x70\xbf\xb3\xb8\xfc\x8e\x14\xd5\x39\x5f\x1d\xf5\xbb\x6f\x62\xef\x93\x59\x57\x51\x6d\x7b\x0f\xbc\xd8\x37\xb6\x51\x1a\x83\xda\x6c\x83\x38\x78\x02\xe4\x0b\x71\x0d\xb9\xc5\x54\xb2\x2e\xaa\x92\x97\xe7\x51\xa7\x44\x5e\xcb\xab\xf6\x21\x54\xbd\x03\xdd\xd6\x4f\xa5\x11\xb7\x21\x0e\x2a\x9a\x02\x71\xf0\x79\xe0\xfb\x96\x8d\x9b\x39\x78\xb4\x22\x1b\xc6\xb5\x6c\x3c\x89\xda\x77\x93\xb0\xe7\x7e\xe9\x8b\x4a\x8d\x2f\x11\xc4\x5e\xe1\x09\x18\x76\x50\xbd\x32\x80\x83\xea\x95\x4f\xe5\x95\x41\xbf\xeb\x93\x94\xb0\x58\xec\x18\x1b\xf8\x5a\xd2\x28\x31\xde\x6b\xa6\xdc\x50\xd1\xb3\x69\x8e\xfc\xc7\xe3\x43\x43\xfb\x0b\xe8\xc2\x9c\xe9\x77\x0b\xa0\x5e\x2f\x20\x0e\x3e\x03\x47\x0d\xb5\x38\x63\xb8\x6b\x5b\xbd\x1d\x25\xf9\x59\xc4\x15\x26\x8b\x9b\xb7\x3d\x24\xb7\x69\x0e\x6b\x8c\xc5\x6b\x30\xeb\xfe\x42\xcd\x95\x41\x1c\x52\x65\xa2\xae\x3c\x5f\x6e\x72\x87\xab\xb5\x17\x5e\x74\xca\xb7\xea\x8a\x81\x60\x4b\x5a\x14\x45\xdf\x1d\xd1\xaa\xc7\xa6\x02\x89\x2a\xd0\xcb\x27\x20\x0e\xae\x84\xd6\x8c\x4f\xdf\x9b\xb5\x8e\x33\x69\x8d\x86\x5e\x6b\x58\xd1\x26\x14\x36\x86\x67\x27\xaa\x76\x18\x06\x4f\x5f\x75\x57\x73\xdb\x1f\x85\x14\x06\xe0\xe0\xf3\x20\x6d\xae\x8a\xa3\xed\xf1\x37\xe2\x9b\x41\xf7\xf8\x16\x5e\x79\xc6\x05\xca\x0d\x6b\x35\xb9\x8b\xcc\x0a\x2e\x7a\xf6\x8e\x42\x6a\x0f\x10\x5b\x21\x10\x07\x55\x26\x5e\x3d\xd5\xae\x18\xb4\xd6\x9e\x24\x85\x5e\x46\xf2\xe7\x36\x6b\xb5\xef\xcc\xaa\x87\xb9\xdb\x82\x85\x9f\xef\xc6\xaa\xce\xf5\x5c\xeb\x6a\xfd\xc4\xe8\xf4\x65\x9e\xcb\x18\x2a\xcc\x00\x71\x48\x87\x89\x45\xd7\xb0\x5b\xe3\x72\x4d\x1c\xda\xae\xe2\xbe\xb4\xe5\x28\xb8\x66\xb2\x3a\x9f\xf1\x7a\xe9\x75\x74\x59\xfe\x5a\xc2\xc4\x23\x25\xe8\x70\x0e\xc0\xc1\xa5\x30\x99\x34\x81\x3b\x73\xa1\xa7\x60\x3b\x34\x23\xe4\xe7\x31\xd7\x6c\x83\x06\xe5\xcb\xb2\x35\xd9\x41\x0b\xdd\x1f\x29\x93\x25\xbb\x94\x88\xb8\x20\x0e\x2e\x85\xf5\xdb\x17\xb4\xf2\xee\xed\xbc\x7b\xb5\xe6\x2b\x3d\x89\x7f\x6d\xce\xc2\xcd\x31\x52\x42\x3d\xdf\x5a\x9a\x91\xfa\x8b\x2a\xb9\x20\x03\x54\xb7\x0d\xe0\xe0\xf3\xc0\xa5\x7e\xed\x71\xc4\x26\xf1\xf7\x34\x9a\x2c\x29\xfc\x79\xb3\xaa\xe6\xbf\x96\xa2\xef\xcd\x85\x35\x6f\x4b\x46\xb9\x56\x78\xdc\x7b\x88\x90\x02\x88\x83\x2a\x13\x4f\xe7\x95\x41\xf9\xef\x24\x29\x4c\x3f\x2f\xf8\xf6\xa5\xfb\x36\x6a\xaf\x17\x46\xa9\xe0\x33\x92\xfb\xdf\xbf\xbd\x14\xb2\x0c\xf0\x5a\x13\x61\xea\x97\xf3\xfa\x88\xb6\x8a\x98\x02\x10\x07\x9f\x82\x0f\x63\xb8\x2c\x29\x29\xfe\x61\xcf\x6b\xbe\x10\xf3\x3d\x36\xa9\x9e\x97\xfd\x80\x56\x7b\x41\x85\x74\xb6\xb1\x4a\xeb\xa5\xe7\x1f\xe8\x1b\x2d\x88\x83\x4b\x21\x33\xd0\x45\x45\xd8\x70\x38\x5d\xac\x82\x24\xb3\x55\x7c\x61\x2a\xdf\x26\xb8\xf7\x88\x79\x85\xa7\x5e\x8e\x36\x4d\x75\x20\x00\xba\xe6\x0f\xe2\xe0\x52\xc8\x8e\xbd\x82\xf7\xfd\xa6\xb4\xdd\xcd\x87\x3b\x42\x9a\x1d\x8d\x46\x6f\xf5\x1b\xf9\xfe\x88\xbc\xe2\xba\x4b\x2e\x5e\xac\x55\x25\x04\x5d\xb5\x00\x71\xf0\x79\xf8\x83\xb6\x20\xa6\xe1\x96\xcf\xdf\xc8\xd0\xe0\x35\xdc\x94\x5e\xee\xfd\x2b\x99\x28\xec\x19\xad\x81\xe6\x36\x3f\x66\x6d\x2b\x5f\x31\x42\x0a\x20\x0e\x5a\x15\xb4\x4f\x25\x05\xd0\x9e\xe4\x24\x29\x2c\x2b\x0b\x10\xe2\x09\xee\x06\x44\x7d\xfd\x91\xbc\x92\x61\xf8\xc8\x70\x08\xfb\x12\xb5\xb9\xe9\xef\x70\x97\x62\x8a\xc5\x3b\x21\xd0\x97\x23\x10\x07\x9f\x82\x98\x80\xe4\xa2\x23\xe9\xe2\xe2\xb8\xb0\x35\x56\xda\x7c\x5d\x4d\xdd\xed\x59\xcc\xda\x3e\x9a\xce\xb7\x2b\x2b\x57\xf5\xd3\xd9\x02\x10\x71\x41\x1c\x5c\x0a\x86\x2d\xd5\x68\xb4\x3c\x56\xc1\x75\xfb\xd8\xdf\xee\xcc\x60\xbf\xa8\xcf\x2f\xfe\xbc\xfb\x75\x91\x44\xb8\xf9\xe8\xc2\xe1\x75\xeb\x69\xa8\xbc\x0c\xc0\xc1\xa5\x40\x62\xcd\xad\xb2\x8b\x75\xec\x4e\xfb\xf8\xa7\xd1\xb8\xfe\xf8\x68\x54\xe7\x15\xd1\xe4\x1a\x13\xae\xa3\xed\x17\x85\x97\xb9\x26\xa1\x17\x44\x40\x1c\x7c\x1e\x4a\xb2\x2a\xde\x0d\x59\xf6\x25\xd0\xde\x6e\xe1\xa9\xfb\xf4\xa2\x92\x2d\x4b\xf0\x11\x85\xab\x66\xea\xe3\xcc\x98\xc8\xe3\x3b\x4f\x93\x10\x52\x00\x71\xd0\xaa\x70\x3a\xaf\x0c\xf2\x59\x27\x7b\xe5\xac\x1a\xab\xe0\x90\x2a\xb2\xa6\xd1\x4f\x0e\x01\x7b\x37\xdd\x79\xcb\x39\x15\x33\x33\x2a\x64\xe8\xda\xff\xc4\xdd\x2c\xd8\xa9\x92\x42\xf8\x4e\x10\x87\xec\x95\x4d\xf0\x4c\xed\x93\x18\x6d\xf5\x76\xa8\x7b\x7b\xe9\xdd\x7d\x2f\x91\x99\x3c\x11\x5d\xde\x4b\xf2\x6a\xdb\x14\x32\xc9\xba\x34\x54\x88\x88\x0c\xe2\x90\xbd\x32\xea\x84\xcb\x1f\x82\x59\x74\x91\x5d\x87\x95\xc8\xfe\xbc\x17\x97\x68\x13\xfc\x59\x09\x68\x62\x2c\x31\x0e\x85\xd4\xe2\xbd\x64\xa0\xde\xe0\x20\xce\x4b\x02\x1b\x36\x1b\xc0\xd7\xa1\x11\x5e\x59\x34\xab\x7f\xfa\x57\xed\xd2\x41\xd4\xf7\x90\xb0\x27\x4c\x5c\xf4\xf5\xf7\x2c\xe2\xae\xa3\x28\xd4\x1d\x1f\x0e\x4c\x16\xf5\x84\x79\xfe\xeb\x95\xc9\x8a\x62\xc7\x58\x12\x8f\x7d\x4c\x1c\x8b\x47\x46\x47\xaa\x7e\xbc\x34\xdf\x33\x23\xd4\xb4\xc4\x28\xd4\x77\xec\xf9\xb1\x21\xfb\xef\xa5\x5f\x22\xd1\x2c\x3b\xab\xfa\x5e\x86\x16\xa9\xce\x31\xb2\xac\x87\xf4\x33\x13\x74\xeb\x6d\x7a\xba\xe8\x14\x3f\x47\x03\x8c\x97\xfd\x9b\xff\xd7\xbc\x32\x68\x68\xff\xd6\x2b\x23\x79\xe5\xd6\x37\xad\x0b\xbb\x38\xde\x64\x9b\xcb\xe5\xfb\x6d\xe3\xbc\x05\x1d\x46\x1e\x25\x04\x5a\xb4\x6c\x64\x1b\xef\x03\x8b\xb9\xe7\xf0\xcf\xe4\xc8\x13\xd9\x2b\x07\xd0\xe4\xd8\x79\xad\xc7\xec\x2f\x84\x37\x63\xa4\xb2\x7f\xff\x10\xd9\xf2\xea\x40\xd2\x14\xf7\x2b\x99\xb7\xee\x1d\xb3\x01\xa7\xac\x33\x39\xe0\x45\xf6\xca\x31\x4a\xd8\xa5\x35\x6a\xc4\xb4\x22\x4f\xd5\x36\xd6\x06\x5c\x38\xee\x84\xfe\x1e\x3a\x4f\x99\x65\x42\x92\x81\xae\x4e\x48\xad\x7b\x36\xaf\x3d\x23\x7b\x65\xfe\x27\x1d\xe1\xed\xe9\x0a\xf7\xf7\x44\x5a\x5e\xdf\x1a\xb1\x76\xb9\xd1\xe4\x2f\x1e\x97\xbf\x1e\x9b\x10\x7d\xf4\x2c\xf8\x56\xb8\xcc\x99\x8c\x16\xd9\x2b\x67\xc5\x73\x5c\x21\x7e\xba\xd8\xc9\xfa\x98\x4c\xbe\xae\x62\xe6\x38\xd8\x84\x93\x40\x82\xb3\x2a\xdd\xf0\x48\xff\xda\xf6\xf9\x42\xa1\x33\xf3\xca\x20\x11\x9d\x94\x00\x1b\xa8\x1a\x67\xa4\x7e\x0b\x67\x5c\x7a\x3b\xbb\xa0\xd3\x7b\xfe\x8b\x7f\x49\xf4\x85\x83\x12\x4c\xc2\xfa\x42\xaf\x24\x0b\xc3\xfa\x14\xc4\xc2\x0f\xe2\xe0\x0b\xff\xe0\x34\x39\x07\xc6\x55\xf4\x40\xc7\x85\xe1\x2e\x2c\x06\x19\xe2\x0f\x29\xd7\x79\xf2\x37\xd1\xbc\xa4\xa2\x6e\x3d\xdf\xe9\x7f\x0c\x55\xa9\x82\x38\x78\x02\x64\x51\xc3\x5f\x3c\x17\x35\x2f\x39\x7b\x71\x44\xd7\xb5\xdb\xfb\xab\xc4\xa3\x1a\xbd\x2c\x7a\x6c\x7d\x21\xd4\x10\x01\x1c\x22\x1c\xa8\xb7\x17\x88\x83\x27\xc0\x55\xf3\x9d\x6b\x5c\xb6\x5c\x13\xac\x17\x02\x9c\x59\xee\x3b\xee\xed\xb3\x98\x93\x60\x6a\xa2\xc7\x91\x4c\xd6\x6a\xfb\x7f\xf9\xfb\x00\x11\x17\xc4\xc1\x2f\x6c\x31\xd2\xc4\xdc\x0a\xcf\x2e\x74\x1d\xf1\x1c\xb3\xb8\xf4\x53\xf0\x4a\xe3\x02\xf6\xe0\xcb\xef\x2c\x61\x45\x65\x8d\xaa\xae\x59\xb7\x26\x10\x5e\x19\xc4\x41\xf5\xca\xa7\xf2\xca\xa0\xdf\xf5\x49\x4a\xa8\x24\x18\x60\x93\xf8\x10\xe4\x5c\xc5\x53\xb2\x53\x9d\x5c\x9a\x7b\xd9\xe1\x1b\xab\xd9\x58\x65\x04\x56\xc9\x35\x15\x77\x63\xc9\xdb\x50\xa7\x73\x00\x07\x57\xc2\x33\x0d\x19\xe5\xc0\xdb\x78\x77\x8a\x6d\x8a\x1f\xd2\xb9\x09\x6d\xd7\xcd\x48\x86\xce\xbd\x54\x7a\x7c\xdf\xd5\x49\x6c\x20\x22\xec\x0d\xd4\x3d\x0e\xc0\xc1\x95\xf0\xfd\x73\x3a\x77\xac\x73\x70\x66\xe3\x8b\xc0\x89\x02\x25\x5a\xcd\x9f\xac\x4d\x04\xfe\x13\xa9\x4b\x4e\x2e\xdc\x4d\xcf\xc6\x43\xba\xa0\x13\x2f\x00\x07\x57\xc2\x39\x73\x5c\xfd\x7b\x95\x6e\xd1\x0e\xa2\x18\xe1\xfc\xd8\x77\x9b\xc6\x6d\x76\xa9\xaf\x6d\x14\x76\x3b\xd5\x37\x2d\x1c\x6a\x8e\x43\xe7\xe0\x20\x0e\xae\x04\xb3\x1d\x15\xbc\xce\xd0\xf9\x36\x5d\xc3\xa7\xa1\xe6\xbf\xf4\xda\x88\x23\x04\x5e\xe4\x96\xb7\x67\x6c\xbc\x76\x42\xff\xbc\xc9\xa9\x8f\xd8\x0a\x81\x38\xa8\x32\xf1\x74\x5e\x19\xb4\xd6\x9e\x24\x85\x66\x4a\x6c\xbd\xec\x62\xd4\x17\xc1\x63\x95\xd7\x88\xf2\xba\x98\x28\x7e\x27\x7c\x0e\x93\x75\x13\x32\x15\x32\xa6\xa2\xef\x6d\x30\x87\x3c\x2d\x80\x83\x4b\xe1\xa7\x9b\x48\x4d\x49\x8f\x6e\x5d\xfe\x1f\x2c\x69\x85\x86\x8c\x18\xab\x58\xe3\x98\xe9\xa2\xa6\x71\x4d\x59\x76\x63\x26\xe1\x26\xe8\xad\x2b\x10\x87\x74\xdb\xd2\x74\x94\xf0\xb1\x49\xfe\x42\x88\x08\xdd\xb5\x09\xa5\xc7\x2d\xc2\xc3\x5a\x11\xc4\x6d\x1b\x17\xb9\x71\x4b\xb2\x38\x9e\x5f\x87\xba\x1a\x83\x38\xb8\x14\xf6\x03\xa3\xba\x7a\x85\x93\x0d\x05\xa7\xdf\x8f\xb7\x77\x1b\x69\xaf\x4a\x2f\xd4\x94\xb2\x6d\x27\x99\x4a\x17\x3c\x2d\x2c\x93\x5d\x43\xc4\x05\x71\x70\x29\xdc\xfe\x78\xfb\x79\xe1\x71\xc6\x5b\x3f\x6b\xb7\xee\x9e\x11\x3f\xcf\x07\x12\x02\xc3\x77\x48\x0a\x93\x9d\xaf\x1e\xff\x1c\x7a\xb3\x23\x8c\x90\x02\x88\x83\x2a\x13\x4f\xe7\x95\x41\xf9\xef\x24\x29\x2c\x6c\xbb\xd6\xe8\x87\xdb\xca\x54\x5c\xee\xa5\x1a\x6d\x3a\x2f\xb0\x35\x30\xb5\xd7\x28\x7c\xf1\x52\xc9\xab\xd1\x97\x8f\xca\x9a\xa1\x43\x3f\x10\x07\x97\x82\xe1\x30\x5d\xa1\x1b\x2f\x7b\xdf\x42\x78\x87\x78\xa1\xda\xfb\xb5\x9f\x41\x24\x18\x97\x2c\xc9\x9d\xaf\x35\x04\xe4\xfd\x36\xbb\xd4\x00\x19\x19\x00\x87\xd4\xfb\x71\x3c\xa7\x27\xe9\x55\x2b\xef\x85\x99\x84\x47\xbd\xaa\x6c\xa5\xe1\xea\xaa\x7f\xb6\x0a\x05\xe8\xb6\xa8\xd4\xe2\x9e\x7b\xee\xa4\x41\x1e\x1c\xc0\xc1\xa5\x90\x45\xb2\xfb\xb3\xb8\xf4\xc9\xb9\xbb\x8d\x1c\x2e\x2e\x28\x7b\x87\x5c\xdd\xed\xb7\x8a\xde\xa1\x4f\x25\xbd\x20\xc1\x90\xb9\xbb\x02\x15\xeb\x82\x38\xb8\x14\xbc\x51\x2e\xd3\xd9\x76\x38\x10\x1b\x4d\x53\x7d\x9f\x8a\x8f\x45\xe9\xc5\xb7\x88\x77\xcf\xfc\xde\xfb\xd8\x60\xcc\x52\xde\x8f\xd8\x09\x21\x05\x10\x07\xad\x0a\xa7\xf3\xca\xa0\x3d\xc9\x49\x52\x70\x9c\x9b\x7d\x96\x15\x23\x2f\xbe\x50\xf8\xe9\xfb\x1f\x37\xb7\xba\x8c\x73\xd7\xb0\x64\x4c\x5b\x5d\x8c\xf0\xab\x95\x95\x3b\xbf\x40\x5d\x0c\x40\x1c\x5c\x0a\xbe\xbc\xdf\xee\x90\xcb\x1e\xa1\x39\x32\x5e\x69\xe3\x29\x11\x58\x21\x66\x22\xdb\xb6\x63\x98\xf4\x6c\x4c\x52\x61\x7e\xc0\x72\x04\x95\x98\x83\x38\xb8\x14\x08\x0b\xff\xde\xee\xea\xd3\xe6\x3d\x34\x60\x66\x29\x79\xd4\xce\x58\xb5\x46\xde\x52\x71\xed\xf3\x8f\x1b\x54\x6a\x6d\xb1\x9c\x2c\x50\x6f\x76\x10\x07\x97\x82\x88\xda\xb3\xc4\x9d\x1a\x0b\x7e\x3f\xca\x5f\xbf\x07\xdf\x97\xb3\x7e\xc3\xaa\xe0\x36\xca\x36\xd2\xbc\xce\x68\x49\x6a\xf0\x84\x93\x10\x11\x17\xc4\xc1\xa5\xa0\x95\xf7\x2b\x59\xd1\xdb\xa2\x83\x9d\x70\x64\x65\x55\x15\xed\x01\xd6\x7b\x89\xec\xa7\x7a\xaa\x1a\xe4\xe3\x87\x87\x6e\x73\xf5\x29\x08\x29\x80\x38\x68\x55\x38\x9d\x57\x06\xf9\xac\x93\xbd\xf2\x1e\x26\xab\x73\x3f\xd3\xe3\x43\xb2\xef\xd4\xbe\xde\xbb\x09\x51\x2a\x6b\x74\x33\x1e\x4f\x5e\xba\x99\xc5\x97\x3a\x63\x72\x3f\xf8\x8e\xf0\x9d\x20\x0e\xd9\x2b\x63\x93\x3a\xb9\x25\x92\x32\xe1\x08\x3f\x50\xcd\x0a\xc5\xd0\xb6\x53\x10\x6b\x95\xfd\x4d\xb3\x36\x8e\xfb\xc0\x3b\xcb\xad\x8f\x96\x04\x11\x19\xc4\x21\x7b\xe5\xee\x8c\x42\x42\x79\x77\x2b\xbf\xe4\xe5\xe2\xb7\x78\x8a\x7d\x2a\xa2\x59\x36\x5e\xc9\x41\xaf\x92\x2a\xc5\x64\xcd\xd9\xf1\x9d\xd3\x11\x91\x41\x9c\x97\x04\x03\x6c\x36\x80\xcf\x3d\x23\xbc\xb2\xb8\x0c\xce\x70\x02\xf1\xe3\xfb\xea\x7e\xba\xfc\x0b\x7c\xd2\x2b\x07\xf6\xf8\x17\xda\x8b\x2d\x25\x0f\x22\x2f\xef\x26\x60\x52\x8a\xff\xeb\x95\x27\xd3\xb0\xb5\x93\xa7\x36\x1a\x8c\xe3\x54\x6e\xf5\x6d\xfd\xdc\xa2\x5f\xf9\xd9\x9a\xbe\x47\x43\x44\xf5\xe5\x36\xde\x39\x9f\xa1\xa5\x7f\xd0\xce\xe5\x27\xb5\xa2\x9c\x9f\x1d\xf3\xd6\x46\x3f\x3b\x66\xfa\xab\x10\xe6\xcc\xba\xd1\x6f\x1c\xbf\x09\xf1\x7d\x89\x51\x33\x20\x92\xf6\xbf\xe6\x95\x41\x43\xfb\xb7\x5e\x59\x0a\xee\xa7\xae\x5b\xbb\xec\x66\x32\xbc\x32\x0d\x25\x74\xe1\x54\xd7\x7c\x90\xf9\x5d\x37\x25\xfe\xb3\xd2\x9c\xd9\xec\x85\xea\x41\xae\x71\xb6\xaa\x33\x39\xf2\x44\xf6\xca\x0f\xc4\x56\xac\x47\xec\x89\xd3\x62\xd0\x08\xaf\xea\x34\xb7\x17\x6a\xd4\xdc\x7c\x15\xbd\x31\xd0\xba\xf1\x4d\x91\x23\xc3\xd5\x9e\xe6\x4c\x0e\x78\x45\x90\xfe\xac\x53\x24\x7a\xcc\x85\x7b\x77\x6f\x4f\x2c\x4b\xdc\x60\x24\x78\xea\xf0\x47\x14\xe5\xcd\xe4\x5f\x7e\xfc\xc1\x02\xd4\x09\xf2\xeb\x6e\x56\x67\x32\x5a\x64\xaf\x3c\x59\x2d\xdd\xb7\x42\xe3\x6f\x45\xdb\xe0\x5d\xe4\xa5\xe4\xcf\x73\x3e\x18\x57\x2f\x71\x58\x73\x81\xa4\x3f\xd9\x6f\x96\xe0\xb8\xec\x4c\x46\x6b\x83\xf4\x67\x33\x8d\x71\xec\x9a\x9e\x2b\x07\x3c\xae\xc2\xfb\x78\x85\x99\x92\xeb\xde\x4d\xe7\xad\x42\xc6\xbd\x5b\x2d\xf6\x94\xdb\x8f\xc6\x71\xcd\xce\xcc\x2b\x83\x44\x74\x52\x02\xec\x72\x6a\x15\x4e\x72\xfb\x62\xb5\x6d\xc2\x3c\x2b\x3a\xa5\xd4\x65\xfa\x74\xc1\x27\x42\x77\xd4\xcc\xde\x51\x29\x8e\xb4\x65\xeb\x33\x62\xe1\x07\x71\xf0\x04\xa8\xb0\x14\xaf\x85\x7a\x6b\xda\xf2\xe2\x71\x45\xaf\x37\xb1\x56\x86\x33\x8a\x7f\xca\x88\xb1\xc3\xf5\xae\xb7\x66\x28\xda\x5d\x19\xbe\x88\xb8\x20\x0e\x9e\x00\xdb\x04\x18\x7f\x6d\xe0\x2c\x4b\xa1\x7e\xa0\x60\x8f\x17\xda\xca\xfd\xc5\x58\xe0\x2b\x83\x87\x19\xdc\x5f\xf9\x40\x67\x94\x2b\xcc\x04\x11\x17\xc4\xc1\x13\xa0\x93\xbd\x67\x92\x44\xe4\x0b\x8b\x0f\x4a\x4f\x99\xda\xfd\xe8\x75\x68\x7b\xdb\x2c\x0e\xf1\x6f\x7f\xb8\x53\xb9\xcd\xfe\xa4\xfd\x1d\xd4\xef\x15\xc4\x79\x89\xff\xb7\xeb\x43\x6f\x48\xed\xd7\x09\x7d\xbd\xb2\xa0\xce\x83\xe3\xde\xe4\x1b\x68\xac\x76\x81\xd2\x45\xcc\x05\xf5\xea\xdd\x92\x47\xfa\xee\x38\xf6\x08\xaf\x0c\xe2\xa0\x7a\x65\xa9\xd3\x6c\x85\x40\xbf\xeb\x93\x94\xd0\xc9\xba\x33\x5b\xd5\xfb\xee\x96\xfa\xaa\xb6\xfe\x22\xcf\xe2\xec\xaa\xe0\xba\xe6\xea\x0b\x63\x6f\x2c\x9c\x17\x9e\xbf\x59\xd0\x55\x11\x33\x00\xe2\xe0\x4a\x88\x26\xe6\x43\xb9\x9d\x26\xa0\x77\xd1\xbc\xcf\x7a\x71\xab\x0c\x15\xf7\x7d\xb9\xa5\x12\x6b\x9c\x65\x83\x8e\x24\xb9\xd7\x2d\x7c\xe8\xf6\x22\x88\x83\x2b\xe1\x77\x60\x48\xaf\x1e\x9d\x7f\xf2\x4e\x69\xfa\x98\xd1\x50\x46\x53\x11\xc6\x77\x8f\x85\x2b\x8b\xfd\x9f\x0f\xc7\xd8\x16\x1f\x85\xd8\x22\xe2\x82\x38\xb8\x12\xe6\xb9\x39\x1e\x93\x6e\x67\xd3\xfc\xd0\xf6\xf3\xb4\x3d\x96\x99\xb5\xff\xcc\xec\x81\x81\x45\x1e\xfe\xb3\xfe\x45\xdc\x51\xb1\x38\x0d\x54\xac\x0b\xe0\xe0\x4a\xf0\xb2\xbe\xf7\x27\x6c\x2a\x62\xb1\xdc\xe1\xf7\xe5\xfb\x19\x28\xb5\x3c\x98\x5d\xb9\xcd\x9e\xac\x4f\x79\x5b\x0b\x9b\x5e\xf1\x5f\x91\x43\x6c\x85\x40\x1c\x54\x99\x78\x3a\xaf\x0c\x5a\x6b\x4f\x92\x02\x17\xfb\x0a\x7d\xaa\xce\xc7\x62\xe3\x22\xea\x65\x81\xf6\xc7\x6f\xb4\xd7\x4d\x62\xbd\x2e\xdc\x8e\xb3\x70\xcd\xe0\xdb\xec\xc3\x87\xba\xe2\x80\x38\xa4\xcb\x26\x66\x95\xb8\x31\x57\x34\xed\xd1\x66\x5f\x05\x51\x92\xce\x55\x62\xf1\x47\x77\xd3\x8c\xbe\x3f\x9e\x88\x6a\xac\x4b\xd3\x98\x82\x6e\x45\x82\x38\xb8\x14\x58\x35\xf8\x89\x5f\x44\xeb\x79\xa5\x92\xb1\x0d\x3a\x89\x04\x4a\xa8\xc4\x5d\x92\xfb\x4e\x2e\x63\x71\x01\x9d\xc8\xe0\xb2\x58\x17\xe4\x69\x41\x1c\x5c\x0a\x2a\x02\xaa\x8e\xe4\x2e\xf1\xec\x0e\xc3\xb8\x44\x9d\xed\xce\x18\x7b\xdf\x0f\x5b\x35\x13\x5f\xd9\xd3\x08\x88\x14\x5c\x9a\xf3\xad\x47\xc4\x05\x71\x70\x29\xdc\x98\xc7\xda\xc3\x26\xaf\xcc\xdc\xcc\x55\xac\xc0\x7b\x37\xa9\x7f\xf5\x51\x2e\x67\xa3\x66\x56\x60\x01\x9d\x48\x8e\x71\x05\x86\x2b\x42\x0a\x20\x0e\xaa\x4c\x14\x39\x95\x14\x40\xf9\xef\x24\x29\xac\xc9\x64\xf1\xbe\x62\x25\x24\x28\xe8\x25\xdd\x7c\xd1\xac\x1e\x4b\xf4\x7c\x4d\x84\x7a\x7c\xee\x89\x4f\xa6\x20\x9e\x46\xcb\xc7\x66\xc4\x14\x80\x38\xb8\x14\x6a\x31\xb6\x1b\xf1\x98\x66\xe6\x3c\x9b\x71\xea\x22\x3f\x8f\xf8\xfd\x79\x25\x39\xcd\x54\xa9\x9a\xbb\x2c\x44\xc3\x96\xcf\x5b\x79\x15\x11\x17\xc4\xc1\xa5\x90\x63\xca\x83\x47\xc4\x12\xec\xa4\xf5\xb0\x3f\x2d\xd9\x9d\x53\x38\x98\x87\x51\x9e\xf0\x96\x72\xf1\x2d\xa6\xd5\x6f\xf3\xc7\xe3\xeb\x88\xb8\x20\x0e\x2e\x05\x7c\x35\x6b\xe2\xd1\x1c\x43\x4e\x49\xa1\xe8\xe7\xfa\x12\xe6\x26\xd6\x56\x94\xb1\x49\x44\x97\x50\xb3\x82\xa6\x6b\xab\xac\x6a\x68\x11\x71\x41\x1c\x5c\x0a\xbc\x7e\x01\x25\x83\xda\x37\xee\x8d\x71\x4f\xc8\x7c\x11\xde\x2c\xa4\xe2\x61\x6e\x1a\x7e\x4f\xc6\xe5\xf7\xe5\x95\xf3\x05\x0b\x99\x7c\x84\x14\x40\x1c\xb4\x2a\x9c\xce\x2b\x83\xf6\x24\x27\x49\x41\x5d\x1c\xdb\x07\xd5\x85\x6e\xf1\xc8\x32\x5b\x21\x8d\x97\x8e\x5a\xce\x3e\xa6\x46\x2e\x2f\x94\x05\xef\x23\xa9\xe5\xab\x48\x0a\x0e\xc4\x14\x80\x38\xb8\x14\x2e\x7c\x88\xa1\x4b\x20\x25\xfd\x9c\x58\x57\x17\xcb\xe0\xf0\x71\x62\x83\xc2\xbd\xd7\xe4\xcb\x73\x9f\x1b\xcb\xfd\xaf\xf2\x17\x22\x42\x10\x71\x41\x1c\x5c\x0a\x4e\xfc\x49\xf8\xa3\xbf\x9b\x6e\x38\xde\x34\xaf\xf5\xf8\xb1\x78\xde\x6a\x58\x14\x8f\xbe\x14\xbb\x14\xc3\xfd\x99\x98\xd4\x0f\x9f\xe7\x50\x4a\x07\x70\x70\x29\xc8\x08\xca\x26\xb6\xb3\xab\xbd\x6d\xa6\x0d\xd3\xb0\xb0\x71\x72\x0a\xcd\x0e\x7f\x78\xb9\xb5\x4e\x60\x49\x78\x8a\xb6\x78\x8a\x56\x0c\x11\x17\xc4\xc1\xa5\x50\xee\x20\x87\xb2\x28\x6f\x79\x2c\xd4\x90\x9c\xa7\x9e\x7d\xcd\x03\x4d\x65\x7b\xed\x91\xa8\xb4\xf4\x58\x66\x05\x81\xf8\x8c\x47\x1f\x42\x0a\x20\x0e\x5a\x15\x6c\x4e\xe5\x95\x41\x3e\xeb\x64\xaf\x6c\x15\xb6\x43\xaf\x21\xed\x80\xab\xab\x5f\x42\x76\x2c\x13\xea\x66\xf4\xeb\xd6\xb6\x57\x5b\x0f\x27\xb3\xf2\x0b\xdd\x03\x29\x16\xe8\x0e\x36\x88\x43\xf6\xca\x92\x45\xf7\x0a\x3e\xaa\x4b\xbe\x53\x08\x35\x22\x69\x37\x59\x7b\xc1\x94\xef\x23\x42\x3c\x5e\x8a\xeb\xf8\x3c\xfa\xf1\x11\x9e\x6b\x08\x22\x32\x88\x43\xf6\xca\x82\xab\x65\xd1\xd9\x3d\xac\xd4\x84\x71\x3e\xf7\x64\x48\xd7\x64\x64\x14\xc4\x72\x12\x9f\xde\x09\xff\x6c\xd6\xba\x36\x1d\xdf\xfc\x0a\x11\x19\xc4\x79\x49\xb8\xc3\x66\x03\xf8\x7e\x33\xc2\x2b\x5f\x96\x96\x70\xc4\xeb\x89\xcb\xcb\xaa\x41\x19\x7d\x5c\x11\xba\xc0\xac\x7b\x3d\x56\x08\xcf\x57\xd6\x69\xf5\x5c\xca\x17\xe5\xa0\x6f\xff\x7a\x65\x34\x97\x9f\x8a\xf7\x34\xc7\x4c\x6f\x76\x38\x70\xa0\xd6\xae\x3a\x8f\x5f\x59\xaa\x8a\xdc\xca\x7d\x3a\x3e\x2b\xa5\x3b\xd7\x67\xba\xf1\x0f\x7a\x6b\x39\xb6\x80\x46\xab\xa7\x2f\x7b\x63\x31\x96\xa6\xe9\x3e\xbf\x16\xfd\x8e\xa5\x42\x6a\x19\x3b\x36\x9d\xd2\x95\xbd\x39\x8e\xf1\xff\x35\xaf\x0c\x1a\xda\xbf\xf5\xca\x48\x5e\xb9\x01\x67\x47\xd9\x96\xfa\xf5\x60\x1f\xdd\x06\x77\x07\xb3\x54\xd1\xc3\xca\x05\x2c\x55\xb9\xfb\x5c\xb4\x24\x96\x26\xb7\x59\x89\xcf\xe0\xec\x31\x50\xa2\x16\xd9\x2b\xcf\x6a\x14\xa2\x24\xcd\xbd\x52\xdc\xfe\x8b\x11\x60\x71\x8d\x56\xd0\x67\xb6\xa9\xcb\x78\xe6\x7a\x29\xc1\xaa\xdf\xea\x9d\x9d\xa4\x33\x78\xce\x28\x50\xe2\x0e\xb2\x57\x8e\x94\xb6\x25\xd5\x37\x33\xb4\x1e\xe0\x78\x3a\x50\xc4\xf4\xae\x2d\xad\xf0\x4f\x0b\xd5\x55\xff\x85\xc6\x26\x46\x4a\xc1\x9c\xd7\x71\x67\x32\x5a\x64\xaf\x7c\x30\x57\xe6\x1e\x42\xd4\x66\xa4\xcc\xf6\xe3\xae\xf7\x82\x3e\xdd\x83\x1d\x2b\x39\x02\xd6\x2e\x69\x02\xa2\x87\x63\xc1\x86\xac\x4d\x67\x32\x5a\x64\xaf\x3c\xfe\xd8\x48\x38\x21\xd8\x88\xc7\xf9\x2f\x2d\x61\x3a\xc1\xaa\xdc\x61\x99\xdb\xc3\x51\x6d\x86\xb7\x92\xf4\x4b\xdf\x95\x44\x25\x5f\x9d\x99\x57\x06\x89\xe8\xa4\x04\xa8\x9d\x26\x10\xcd\x6a\xfa\xe8\xc0\x38\xde\x02\x63\x97\x6f\x67\xf6\x29\x4b\x83\xea\xa8\xca\x1a\x5f\xd0\xea\xd5\xb2\x01\xa5\xef\xaf\xa1\x0e\x49\x00\x0e\x9e\x00\xc3\x1c\x2a\x53\x6e\x6f\xf4\x6c\xc5\xd8\xd4\x77\x59\x99\xe4\xaf\x51\x0c\xcc\xb8\xe9\xf0\xd7\x24\xfa\x08\x4e\x87\xb7\xfe\x91\x81\xae\x2f\x82\x38\x78\x02\x2c\xdb\x9c\xf0\x99\xdb\x27\x30\x5f\xea\xec\xf4\xb6\xfa\x78\xb0\xe2\x28\xca\xf5\x50\xf0\x12\xde\xfb\xd6\xee\x2e\x96\x10\x6d\x51\xe8\x8d\x2b\x10\xf7\x7f\x12\xca\xbf\x71\x29\x04\x5f\x5c\xb1\xe2\x9b\x9d\x6f\x11\xf3\x77\x99\x70\x9e\xfe\xb9\xd3\x2e\xd5\x42\xc0\x74\xf7\xb6\xbe\x5e\xf9\x8b\xec\x86\x9b\x50\xe3\x12\x10\xe7\x25\x8e\xf1\x9f\x79\x90\x49\x55\xc5\x75\x1e\x60\x7f\xb4\x64\xe6\x11\xbe\x72\x23\x36\x66\xe8\xf2\x4c\x8e\xe0\x0c\xc3\xc7\x9f\xf4\x0f\xdf\xe2\xea\x4f\xea\x20\xbc\x32\x88\x83\xea\x95\x4f\xe5\x95\x41\xbf\xeb\x93\x94\x20\xb1\x5d\x9a\x13\xd6\x70\xb3\xa3\xaa\x6a\xa3\x57\xb4\x48\xcc\x72\xdd\x90\xdf\x60\x54\x7b\xca\xed\x82\x32\x4a\x40\x6c\x9c\x3f\xf4\x66\x14\x88\x83\x2b\xa1\x6b\x21\x1d\x63\x4a\x3e\xf4\x87\x11\xc6\xd5\xce\x73\x85\xdc\x11\x16\x89\xac\x84\xf5\xf6\x26\x0d\x04\x3e\x62\x4d\xcb\x8f\xea\xa0\x3b\xd8\x20\x0e\xae\x84\x58\x42\xe7\x09\x56\xdd\x9c\xde\x37\xea\xde\x1f\x5c\xf0\x2e\xed\xeb\x59\x2c\x04\x8b\x12\x3f\xc9\xeb\xde\x55\x2b\x98\x30\xe4\x81\xba\xf8\x80\x38\xb8\x12\x04\xb8\xc9\x9d\xe2\xd6\xb0\x66\xa7\x38\x2f\xc8\xe1\x91\x54\xdf\xfe\x2c\xcc\x68\xd8\x14\x8f\xeb\xd9\x7b\xee\xdd\xa2\x44\xaa\x31\xb4\x2b\x06\x71\x70\x25\xcc\x4e\x07\xad\x1f\x0c\x13\xa7\x08\x5e\xb3\xc4\x79\x40\xfb\xcb\xa5\x1d\x77\x34\x32\x20\xec\x5c\xe2\x12\x5d\x07\x75\x99\x50\xd6\x28\x62\x2b\x04\xe2\xa0\xca\xc4\xd3\x79\x65\xd0\x5a\x7b\x92\x14\x3a\x34\x5a\x62\x5f\xd3\x6e\x7c\x9b\x4e\xaa\x35\xf5\xaf\x0a\x49\x22\x71\x0c\x50\x7a\x6e\xce\x5d\xec\xb8\x68\xc8\x9b\xa5\x2b\x0e\xdd\xc1\x06\x71\x70\x29\x84\x53\x6f\x1e\x3c\xbd\x5c\xf7\xaa\x51\x23\x9d\x12\x2b\x46\xa5\x68\xc9\xa1\x77\x3b\xd5\x53\xf9\x68\x4f\x40\x22\xa7\x6e\xdb\x15\xaa\x83\x06\x71\x70\x29\xdc\x77\x19\x35\x9e\xf2\x94\x9d\x60\x65\x65\x0f\x6b\x66\x78\x66\x81\xde\x5a\xf7\xa3\x87\x96\xcf\xb5\x49\x22\x93\xb3\x25\x0e\x0b\x7a\xfc\x1d\xc4\xc1\xa5\xa0\xd9\x39\xd7\x25\x52\x4f\x3d\x1a\xe1\x4f\x91\x73\x3b\x8b\x3c\x32\x86\x66\xc0\x83\x48\xe9\xfd\x14\x9e\xe4\x70\x09\xb3\xd9\x37\x07\x44\x5c\x10\x07\x97\x42\xe2\x63\xba\xc7\x83\xb6\xef\x99\xe7\x75\xb2\xc6\xcf\x69\x3d\x60\x13\xcd\x78\x37\xab\x26\xb8\xbc\xbd\x5c\x56\x73\x8d\x2f\xee\x65\x3d\x42\x0a\x20\x0e\xaa\x4c\x3c\x9d\x57\x06\xe5\xbf\x93\xa4\x30\xfb\xa9\x54\x3f\x51\x5d\xf7\xa7\x64\x38\xde\x05\x0a\x3e\xf3\xa0\x72\x52\x3b\xf9\x73\x5d\xf7\x39\x5a\xf2\x14\x8c\x5a\x13\xdb\xcb\x11\x53\x00\xe2\xe0\x52\xe8\x77\x1b\x34\x6b\x5d\xd5\xf1\x0e\x2e\xba\xc0\x9d\x91\x4b\x2f\xf8\x4a\xd7\xa2\xb4\xda\x3d\xc5\x0d\x13\x77\x21\xf7\x88\x67\xe9\x3b\x22\x2e\x88\x83\x4b\x61\xbc\x57\x88\xdb\xca\x24\xc2\xca\x42\x26\x24\xf4\xf7\x94\x69\x6b\xaa\x43\xce\xc0\xe0\xfb\x7e\x2e\x83\x7c\xc3\x30\xb9\x31\x35\xa8\x24\x1e\xc4\xc1\xa5\xf0\xf5\x9d\xb5\x4e\x47\xb3\xa5\x27\x7d\xaa\x5a\x7c\x68\x9c\x0f\xdd\x7b\xbf\x6f\x3c\xf6\x39\x7b\xc6\x7e\x29\xb5\x61\x98\x5e\xcd\x50\x8f\x33\x10\x07\x97\xc2\x1e\xf1\x20\xb3\x94\x4e\x48\x23\xe5\x0c\x39\xa9\x22\x71\x88\xf0\xee\x4a\x93\x31\xdb\x25\xa6\x0b\xc1\x37\x64\x88\xc3\x85\xa5\x77\x10\x52\x00\x71\xd0\xaa\x70\x3a\xaf\x0c\xda\x93\x9c\x24\x85\x04\x73\xb2\x5b\xba\x17\xf6\xf5\x08\x8f\x25\x67\x58\x48\x24\xa6\xe6\x8a\xfa\xc8\x7f\x29\xef\xb1\x6a\x54\x89\x2f\x1c\xa0\xb8\x40\x2d\xd1\x41\x1c\x5c\x0a\x2c\xa6\x29\x4b\xe6\x8e\x03\x34\xe1\x41\x66\x5a\xdf\x7f\x7c\x89\x4e\xc7\xfb\xc3\x31\x6b\x8c\xd9\x40\xea\x4f\x60\x8f\xa6\x61\x0f\x5d\xe4\x01\x71\x70\x29\x3c\x45\xa9\xc2\xe3\xe5\x2c\x2d\xf8\xcc\xe9\xa3\x12\x6e\xb7\xf3\xe9\x81\xbc\x63\xad\x24\xa7\x26\x26\xf5\x4a\x9c\x5c\x17\x47\x1d\x74\x5e\x0d\xe2\xe0\x52\xd8\xb7\xcd\x08\xe5\x93\x53\xe8\x58\x92\x97\xf9\x60\xee\xf0\xa1\x2f\x45\xbe\x8c\xb3\xda\x8e\xc1\xb4\xf1\x3d\x6b\x47\x68\x5d\x10\x27\x74\xdb\x04\xc0\xc1\xa5\x30\x77\xbe\xaa\x74\x2f\x65\xf3\xfe\xda\xcb\xcb\xc6\x71\xa6\xd4\xb1\xa8\x17\x87\xe8\xbb\x49\x2c\xec\x9c\x15\x1d\xb6\x3c\x42\xf9\x58\x11\x52\x00\x71\xd0\xaa\x70\x3a\xaf\x0c\xf2\x59\x27\x7b\xe5\xb6\x03\x3b\xee\x3b\xf1\xae\xfd\x45\xbc\x6d\xe4\xa1\x86\xa5\xf7\x31\x26\xa3\xbe\x50\xc8\x52\x9b\xde\xd1\x78\xf5\xc8\x78\xf5\x2e\xd4\x81\x0b\xc4\x21\x7b\x65\xa5\x32\x8a\x94\xa2\xa3\xe3\x26\x7a\xd1\xd5\x76\x3c\x25\x63\xfb\x1b\x2e\x04\xc1\xc5\x6b\x86\xda\x79\x26\xb6\xc1\x65\xf2\x6e\x5a\x88\xc8\x20\xee\x84\x7a\xe5\x35\x16\x31\x0d\xa7\x52\x33\x9b\xf1\x0e\x11\x29\x7c\xa7\x30\x22\xb1\xe7\x7a\xbc\x41\x32\xa4\x77\xbb\xad\x1f\xfc\x78\x68\x18\x03\xd5\x2b\x03\xb8\xff\xff\xb3\xc9\xff\xf9\x2c\x03\x7a\x90\x19\xe1\x95\xf5\x0a\xb2\xb8\x7c\xcf\x89\x5d\x73\x25\x1d\xad\x4d\x3e\xdc\x98\x8e\xa2\x1c\x2b\x73\xbb\xf7\x49\xa4\x48\x71\x7c\x93\x3a\xb9\x38\xe9\x5f\xaf\xec\x51\xe4\x10\x78\xfe\xfa\xcb\x6e\xdc\x69\x33\xfc\x88\xaf\x83\x03\x1c\xdf\x08\x0c\xc5\x7c\x70\x38\xb3\x45\xc9\xd1\x44\x16\x6b\xfe\xad\x54\xfd\x25\x91\xc9\x35\x34\xf8\xfc\x63\x7d\xb8\xae\xd9\xec\x1d\x95\x4f\x75\x4b\x6b\x02\xd1\x06\x0e\x0b\xe6\xe9\x0c\xaf\xe2\xed\xf0\x45\xff\xd7\xbc\x32\x68\x68\xff\xd6\x2b\x23\x79\xe5\x04\x11\xb3\xbb\xa6\x51\x31\x22\xdc\xc1\x6d\x7a\xb4\x68\x0d\xbc\x55\xbc\xf8\xc6\x16\x59\x7b\xca\x4c\x1e\xed\x2a\x5f\x89\x6b\x72\xce\xe4\xc8\x93\x0f\xd9\xc6\x15\xba\x88\x7f\xa5\x42\x27\x2e\x53\x78\x27\x95\xa7\xa8\x43\x7f\xed\xb7\xac\x72\x13\x2f\x37\x5a\x84\x79\x7c\xfd\x37\xe9\x3c\xea\x33\x39\xe0\x45\xf6\xca\x34\x8b\xf3\x25\xd8\x78\xfb\x45\x2f\xfb\x2d\x8f\x1a\xb5\x70\x7c\x83\xfd\xa7\x0f\x4d\x9c\x3e\x18\x5c\x4a\xa1\x9f\xed\x0f\x35\x66\x39\x93\xd1\xde\x47\xfa\xb3\xdb\xb7\x2d\x2c\x0b\x57\x5e\x12\xf5\xc5\x24\x35\xde\xf0\xfa\x10\x76\xf4\x60\x61\x73\xa9\xdf\xe1\x96\x27\x35\xc9\x86\xd2\x45\x1c\x9e\x33\x19\x2d\xb2\x57\x3e\x0a\x5f\xf2\xa4\x2b\x70\x9b\xeb\x7a\x53\xf2\x71\xa3\x72\x2a\x77\xe8\x2b\xd7\xd5\xf4\xa6\x64\x2c\xed\x22\xf3\x7d\x4a\xf3\x5f\xc4\x67\xe6\x95\x41\x22\x3a\x29\x01\x0e\xdd\x8c\x8d\xa2\x56\x4e\x51\xc7\xf5\x08\x59\x36\x42\xdd\x68\xec\xca\x94\xf8\x24\x47\xe5\x30\x48\x93\x73\x89\x48\xd0\x90\x0f\xea\x85\x02\xe2\xe0\x09\x50\x47\xd6\xc5\x88\x79\x95\x3c\xb9\x5e\xff\x8a\x7d\xc1\xec\xd4\x6a\x01\x8a\xc2\xd6\xcc\xb5\xdb\x7b\x5b\xc3\x23\x3b\x75\x31\xbf\x3c\xa1\x16\xb2\x00\x0e\x9e\x00\x2f\x93\x77\x24\x0a\x15\xe1\xbf\x60\xfe\xfe\x92\xe2\xf8\xab\xbe\x83\x2c\xde\x80\x96\xab\x63\xf2\xce\xf3\x0e\x2a\xb7\x2f\xf4\xac\x8b\x88\xb8\x20\x0e\x9e\x00\x09\xd9\xea\x0d\xb1\xf6\xb3\x65\xd6\xfd\xce\xaf\x30\x8a\xe9\xa8\x1c\x89\xb1\x09\xff\x55\xfe\xf1\xe9\x4a\xc9\xe0\x83\x1e\x15\x6b\xe8\x54\x15\xc4\x79\x89\xdf\xf9\xcf\x3c\x2c\x79\x5f\x3d\xee\x71\xd2\x5d\x89\xee\x7a\x52\x6a\x69\xa0\xf4\x1d\x35\xbb\xf3\xa5\xec\xde\x6e\xb9\xe4\x37\x96\xd7\xb9\xf9\x2c\x0c\x08\xaf\x0c\xe2\xa0\x7a\xe5\x53\x79\x65\xd0\xef\xfa\x24\x25\xb0\x51\xdf\x9f\x90\xce\x51\x3d\x0a\x5b\x5e\x6a\x4b\x4f\x13\x12\x30\x6c\x3b\x28\xf5\x91\xe5\x9f\x78\x2b\xd0\x86\xe7\xff\x80\x77\x19\x7a\x0a\x03\xc0\xc1\x95\xf0\x72\xc5\x0c\xf3\x47\x57\x90\x60\xb9\x13\x17\xca\x07\x45\x94\x2c\xa6\xec\x4b\xd8\x65\xa4\x6e\x8f\xc8\xb1\x75\x6d\x48\x73\x67\x70\x10\x71\x41\x1c\x5c\x09\xf3\x65\x78\x98\xdf\xeb\x4b\x1e\xd8\xd0\x89\xa8\xcb\xc6\xa3\x9a\x1d\x37\x7e\x4a\xf4\x4b\xb9\x12\xff\xc4\x31\xdf\xae\x97\xfb\x9e\x3c\x74\xfe\x0b\xe0\xe0\x4a\x28\x75\xec\x8d\xdc\xbf\xee\x65\xf9\x56\x74\x33\x08\xc5\xdd\x4e\x85\x2d\x52\x48\xa6\x32\x0f\xf3\x50\xab\x61\x8c\xfe\x89\x46\xb2\x0e\x22\x2e\x88\x83\x2b\x21\xe6\x63\x01\xee\xe3\x04\xab\xab\xd9\x37\x42\x35\x4c\xb1\x44\x78\x38\xa3\xa4\x07\x19\x8a\x3b\xc9\xec\x03\xcd\x08\xc9\xf1\x78\x2f\x21\xb6\x42\x20\x0e\xaa\x4c\xe4\x3b\xd5\xae\x18\xb4\xd6\x9e\x24\x85\x8d\x67\x2a\x18\x22\xa8\x1f\xe2\x73\xdf\x9a\x2e\x7d\x5d\xc2\xbd\x19\x52\x9e\xfb\xea\x09\x4b\x69\x5b\xae\x09\x96\x40\xff\xe7\x39\x5d\xc4\x14\x80\x38\xb8\x14\x3a\x5c\xaf\xf1\x96\xaa\x0d\x27\x2a\x48\xd2\x5f\x64\x1a\xcb\xf8\x3a\xda\xae\xc0\x8a\xa9\x2e\x4b\xe1\xe3\x72\x68\x21\xe6\xfc\x1e\x17\xf2\xe0\x00\x0e\xe9\x25\x55\x83\x84\x4c\xa3\x7a\xa9\x89\xd1\x9c\x69\x49\x82\x67\x3e\x06\xca\x0f\xeb\xac\x84\x9e\x38\xf2\x2d\x64\xeb\x4a\xff\x71\xeb\x31\x46\xc4\x05\x71\x70\x29\x3c\xc0\x51\x64\x4d\xa2\x20\xb3\x0c\x7f\xf7\x9a\x2f\x88\x3e\xe9\xc8\x3d\xbf\x52\x6e\xeb\x12\x03\xfa\xce\xaf\x96\xa2\xaf\x9e\xce\x05\x88\xb8\x20\x0e\x2e\x85\xad\x51\xf9\x16\xa6\xc1\x38\xcc\x56\xd4\x3f\x86\xb7\xc7\x88\xf8\x6c\xb5\xed\x73\x46\xd1\x63\xc9\x63\x22\x8e\x16\xc6\xd1\x3b\x93\x11\x52\x00\x71\x50\x65\xe2\xe9\xbc\x32\x28\xff\x9d\x24\x05\x27\xff\xe9\xf5\x66\x92\xdd\x1b\xd4\x47\xf3\x4e\xe1\xad\x83\x86\x4d\x8c\x3b\xfc\x5d\x28\xb7\x03\x03\x7b\x9d\x7f\x11\x09\xbf\x1a\x81\x0e\xe7\x00\x1c\x5c\x0a\x4f\xb1\x3f\xb1\xdc\xe2\x7e\xf0\x0b\x4d\x24\x8d\x88\x71\x6f\x3e\xc0\x72\xe2\x5c\xf5\x80\x1d\xe6\xfd\x56\xd9\x7e\x95\xdf\xcc\x13\xdf\x20\x23\x03\xe0\x90\xba\x18\xc8\xe6\xd3\x54\xce\x3f\xcb\xef\xe4\xb0\xe1\x27\x75\xee\x5d\xc8\x91\x1b\xee\xab\xc4\x8e\x1e\xed\xca\xc1\x11\x30\x59\xec\xd8\x84\xea\x8a\x01\x1c\x5c\x0a\x45\x53\x12\xcf\xed\x7f\x5d\x61\xb1\xd7\xc5\xcc\xa7\x17\x0f\xda\x20\x95\x63\x3a\xd8\xc1\x22\x0f\x40\xe3\x3b\x17\x95\x72\x8b\x0e\x7a\xab\x10\xc4\xc1\xa5\x60\x61\x81\xc5\x3d\x8a\x92\x3b\x27\xbc\x3a\xae\xd2\x25\xf3\xa0\x35\xbb\xaa\xf5\x08\x8b\x76\xeb\x07\xe7\xcc\xc7\x26\x63\xf5\xf7\xd3\x08\x29\x80\x38\x68\x55\xb8\x7f\x2a\x29\x80\xf6\x24\x27\x49\xc1\xfd\x92\xb7\xcf\x9b\x7e\xeb\x67\x4f\xb4\xbf\x06\x16\x33\xfc\xbc\x67\xc3\xe9\xba\xbe\xc5\x8e\xcd\x39\x7e\x94\xda\x73\x59\xd0\x0b\x7a\x28\x01\xc4\xc1\xa5\x30\x25\x23\xa7\xad\xf0\xdd\x8a\x68\xd1\x10\xbd\xc3\x3f\x5f\xc2\x75\x7d\x36\x89\x26\x78\xd8\xe3\x1e\xa1\xe6\x7d\x2c\x97\x77\xc1\x50\x59\x15\x88\x83\x4b\xa1\x72\x49\xf1\xc6\xf1\x34\x79\x8d\xde\xdb\x81\x10\x8c\x96\x99\x09\x2d\xd5\x41\xaf\x0c\x4a\xc5\x36\x2f\xa7\x85\x74\xda\x8c\x59\x0f\xa8\xa8\x08\xc0\xc1\xa5\xf0\x9c\x57\xed\xea\xad\x48\x0c\x5f\xa2\xae\xd9\x16\x6f\x82\x4e\x96\xda\xb8\x97\x1a\xbb\x37\x14\x4b\xac\x1d\x8f\xd5\x7d\x68\x7f\x43\xa5\xeb\x20\x0e\x2e\x05\xfa\x1d\x29\x7d\x0a\x13\xad\x9a\x50\x82\x1e\x2a\x06\xc2\xbb\x5e\xcc\x5d\xf4\xdc\x3e\xc3\xf6\xbf\x45\xce\xd3\xbc\x9c\xda\x32\x79\x89\x90\x02\x88\x83\x56\x85\xd3\x79\x65\x90\xcf\x3a\xd9\x2b\xdf\x6c\x66\x7a\x83\xb5\x45\x9c\xbb\x1d\x2f\x43\xb0\x1b\x4b\xdd\xff\xd8\x6d\x94\x62\x2b\x8e\x8a\xe7\xba\x35\xbf\x48\x95\x39\xc9\x27\x84\xef\x04\x71\xc8\x5e\x79\xfe\xb9\x31\xc6\x5a\x5d\x8c\x47\xf8\x3a\xb5\x81\x01\xdd\x0f\xca\x28\xda\xcd\x75\x43\xae\x65\xc7\x3c\xa6\x76\x17\x5c\x6e\x6a\x15\x44\x64\x10\x87\xec\x95\xa5\x5a\x74\xc7\x53\x2d\xa7\xeb\xcb\xf4\xee\x87\xd2\x29\xf3\x09\xf2\xf6\x71\x13\xac\x9a\xdd\x9a\x64\x7a\x88\x31\x60\xdd\x58\xec\x8a\x88\x0c\xe2\x90\x23\x9f\xfa\x7d\x65\xf1\x4e\xed\x77\x7f\x2e\x1e\x7f\x0d\x6d\x8a\x8c\xb8\xa5\xd2\xf6\x23\xa2\xc7\xa6\x6c\x78\x6b\xc9\x8e\x58\xc0\x9a\xc5\xdc\xac\xf9\xd7\xbf\x5e\x59\xc3\x41\xa1\xb3\x4d\x56\x8f\xe4\xb8\xac\x5b\x4d\x0b\x45\x48\x79\xc4\xa8\xfa\x0e\x05\x87\x80\xff\x74\xcd\x8e\x57\xfa\xfb\x84\x7f\xdb\x2b\xf5\xc8\x71\x79\x55\xec\x7a\x10\x16\x71\x59\xf7\x5e\x79\x2b\xa6\xfc\x5a\xd7\x74\xd0\xbc\x30\xea\x12\x11\xdd\xa5\xa1\x91\xdd\x20\xd2\xff\x35\xaf\x0c\x1a\xda\xbf\xf5\xca\x48\x5e\xf9\x79\xb5\x4e\xed\x9d\x86\xb2\xac\x27\x6e\x8b\x77\xed\x9f\xce\x7e\xc6\x3b\x6c\x6c\x2c\xa4\x0d\x94\xa4\x66\x76\x67\x9a\x4a\xcb\xf8\x70\x26\x47\x9e\xc8\x5e\xd9\x67\x62\xf1\x4d\xe3\x76\xa3\x55\xea\xbd\xad\x5b\xd7\xd8\xdf\x6e\xea\x18\x4e\x78\x0b\x7c\x70\x9e\x4c\x92\xaa\xaa\xb6\xb4\xcd\x6f\x3c\x93\x03\x5e\x64\xaf\x7c\x99\x58\xbb\x36\x71\x9d\x47\x33\x6f\x6d\x67\x2c\x75\x5b\x2c\x68\x88\x85\xec\x6b\x64\x86\xab\x64\xf6\x56\x79\xf3\x78\x26\x4b\xcc\x99\x8c\x16\xd9\x2b\x7b\x3b\xaf\x67\xaf\xee\x49\x5c\x7a\x9c\x71\x9f\x5f\x89\xc9\xa2\x10\x8b\xe4\xb2\xd7\x55\x59\xac\xf5\x0b\x46\x1d\x1c\x2c\xf2\x58\x7c\x67\x32\x5a\x64\xaf\xfc\xd6\xb2\x81\xee\xbd\x6e\x7e\x67\xde\xbe\xde\xc1\xda\xad\x27\x81\x7d\x0c\xdf\xbd\x22\x1e\x2d\x71\x46\x45\x4c\x0e\x7b\x94\xeb\xf5\x9c\x99\x57\x06\x89\xe8\xa4\x04\x98\x98\x3e\xa0\x48\x57\x69\x7f\x4b\x46\x2f\xdf\xf7\x61\xc7\xb3\x72\xd3\x4b\x65\x05\xc9\x7f\x0b\x83\xde\x4f\xca\x6e\x7b\x25\xbd\x82\x9a\x5b\x82\x38\x78\x02\xdc\x77\x23\xba\xde\x9d\x44\x17\xef\x78\x7d\xf0\xb7\x97\x55\xad\x91\x76\xfc\xd1\xbd\x8b\x8b\x78\x89\x11\x61\xe7\x97\xca\x7e\xa1\x8b\x40\x1f\x5f\x01\x1c\xd2\xb6\x98\x37\xc2\x7a\xd3\xe5\xb2\x99\x66\x8a\x8d\xef\x83\xbc\x73\x99\x7a\x07\xfb\xb1\x8c\x9b\x77\xde\xb3\xed\xce\x0a\x3b\x51\xee\xe5\x42\xdb\x62\x00\x07\x4f\x80\xdb\x8b\x49\x57\xb5\xe4\x6e\x47\x9b\xcc\x19\x7f\xfe\x14\xb1\x17\x56\xb0\x9e\x6d\xaf\x17\xcb\x40\xf5\xb2\xec\x89\xea\x75\xaa\xbb\xfb\x88\xb8\x20\x0e\xa9\x17\xd9\x7d\x89\x6e\xf1\xc0\xa9\xf0\xfc\x67\xcd\x69\x34\x52\x56\x9f\xa3\x5a\x1f\x37\x65\x57\x19\x35\xb7\xa8\xc6\xd1\x54\xd3\x9b\x97\x21\xbc\x32\x88\x83\xea\x95\x4f\xe5\x95\x41\xbf\xeb\x93\x94\x70\x98\x8c\x7a\x31\x76\xdb\xdc\xa2\xf4\xc9\x79\xcb\x22\xca\xea\xec\x79\xfa\x4d\x39\x5d\xdc\x88\x76\xae\x99\x98\xf9\xcb\x24\x1f\x49\x11\x33\x00\xe2\xe0\x4a\xa8\xa9\x6c\x15\xa1\x71\x1d\xef\x90\x7a\x9a\xfb\x8d\xf9\x20\x54\x9f\x84\x3d\x3f\x60\x24\x4a\x1f\x33\xff\x0f\xef\x36\x69\xb9\xcd\x57\x44\x5c\x10\x07\x9f\xd9\x74\x56\xfe\x63\x5a\x99\x77\xe3\x5f\xd0\xb1\x15\xfb\xb9\x18\xbe\x31\xa8\x7a\xf4\xaa\x58\xbe\x7f\xc4\x30\xbd\xf1\xd7\x8f\xbc\x06\x7a\xba\x03\xc4\xc1\x95\xe0\x9d\x7c\x6e\xa1\xd6\xd1\xce\x6e\x12\x3b\xf6\x79\x1e\x87\xf9\xcd\x9b\xc7\x65\xa3\xcd\x33\xac\x17\xb4\x66\x3a\xa6\x8b\x79\xd8\x5d\x10\x71\x41\x1c\xfc\xdf\xab\x8e\xfa\xae\xb4\xb0\xfc\x83\xc2\x3a\x55\xd5\x95\xcd\x82\x91\x31\xc9\xf0\xd1\x4a\xa1\x86\x4d\x7e\xac\xb2\xad\xed\xdc\xbf\xe8\xaf\x10\x5b\x21\x10\x07\x55\x26\x9e\xce\x2b\x83\xd6\xda\x93\xa4\xa0\xf6\xea\x40\xfb\x6f\xce\x61\xa1\xa7\x0d\xd5\x8e\x81\xf6\x5e\x7a\xdb\xad\xbb\x04\x1a\x63\x83\x2f\x52\xee\x44\xe7\x8f\xa5\xb4\x43\xd7\xdb\x41\x1c\xd2\x6d\x4b\xbf\x37\x8c\x5c\xc2\xb3\x3d\x57\x32\x89\x28\x2f\xfd\x10\x1f\xb1\xe2\xdc\xc3\xd9\xbc\xd4\x6c\xcc\xa0\xd4\x27\x25\xe4\xfb\x6c\x16\xba\x6d\x09\xe0\xe0\x53\x5b\x45\xf5\xe9\x33\x57\x87\x7e\xbe\xfe\x25\x6b\x1d\xdf\x92\x8f\xb4\x0e\x73\x54\x1c\x8d\x58\x3c\x1f\x74\x59\x5f\x8e\x9c\x4f\x1a\x81\x8a\x49\x41\x1c\x5c\x0a\x59\xbc\x5f\x1a\xd9\x52\x38\xcf\x3f\x9d\x09\x98\xb9\x2b\x1c\x25\x7c\x17\x1f\xed\xb5\xfe\xe2\x55\xe9\x35\x1b\x27\x51\x6a\x49\xfe\x2f\x50\x91\x2a\x80\x83\xff\x7b\xed\xef\x61\x33\x5a\xd4\x5e\x29\x8b\xbc\x11\x10\xfe\xa5\xf8\x79\x5b\xc5\xd0\x33\xaf\xe4\xda\x71\x43\xfa\x69\xaa\xb4\xce\x74\x14\x65\x84\x14\x40\x1c\x54\x99\x78\x3a\xaf\x0c\xca\x7f\x27\x49\x61\x84\x59\xa1\xfa\x1c\x55\xba\x00\xd7\x04\x66\x7b\xa8\x35\xcb\x0d\x25\xad\x90\x6f\x0e\xe2\xdc\x97\x99\xa8\x8a\x3f\x5f\x4f\xb0\x87\xbe\x48\x81\x38\xa4\xd2\xf5\x32\x27\x11\xaf\xa7\xba\x2d\xf3\x77\x3d\x84\xfe\x24\x51\x73\x7c\x3e\x27\xc4\xc7\x7a\xa3\xa2\xef\xa7\xb2\x90\xed\x43\x66\x4e\x26\xa8\x74\x1d\xc0\xc1\xa7\xb6\x1e\x17\x77\x5c\x84\x74\x7f\x5e\x61\x86\x8b\x36\xd5\xae\x8a\x5e\x6a\x59\x2f\x91\x60\xf4\x7c\x50\x77\x4b\x4d\xde\xcc\x83\x11\xa8\xbf\x36\x88\x83\x4b\x61\x72\x36\xff\x7b\xd1\x6c\x72\x52\xe7\xcd\xb8\x83\xec\xd2\x8b\xaf\xe5\x39\xa9\x09\xfe\xc8\x18\xa6\xa4\x9f\xc3\xe2\x8d\x5e\xa5\xef\x80\xda\xc7\x01\x38\xf8\xbf\xd7\x5f\x36\x1a\x65\x40\xf9\x4f\xfd\xe3\x3c\x4b\x9c\x98\xc2\xd1\x77\x24\xc6\x8a\x18\x47\x8a\x7e\xe8\x2f\x50\x62\xaf\x9d\x5f\x4d\x13\x43\x48\x01\xc4\x41\xab\xc2\xe9\xbc\x32\x68\x4f\x72\x92\x14\xea\xce\x6f\x0e\xf1\x48\xf0\x85\xed\x99\x1c\xdd\x59\x59\x90\xb1\x2f\x4c\xf2\x74\xde\x92\x7a\xae\x36\xfd\xec\x53\xf9\x3a\x3b\x05\x74\xf7\x18\xc4\xc1\xa5\xe0\x5d\x18\x43\xa3\x2c\x3d\x8f\x35\xf7\xf1\xbb\xeb\xbc\x7e\x12\x1b\x5f\xb1\xf1\x9e\xcc\x25\x75\xaf\x05\xd4\xcf\xac\x15\x9a\x05\xf8\xd0\x82\x0b\xe0\xe0\x53\xbb\xe2\xd6\x68\x93\xd5\x54\x32\xb1\x32\x44\x81\x5a\x34\xd3\x2b\x29\xd5\xd1\xf6\x7e\xda\x64\x3a\xea\xb2\x6a\x6f\xc0\xc6\xce\x05\x28\xf1\x80\x38\xa4\xcf\xea\x35\xfc\xaf\x04\x03\xbe\x13\xb3\x09\x7b\x51\x0f\x5a\xfd\x62\xf2\x8c\xae\x4d\xb3\x22\x0e\xee\xdd\x76\x22\x67\xf1\xc9\x5b\x7a\x09\x7d\x56\x07\x70\xf0\x7f\x6f\xbf\x70\x7a\x27\x59\xda\xb7\xeb\x38\x61\xfb\xf4\xbe\x9a\xb2\xb8\xca\x3d\x8b\xe4\x84\x5d\x51\x51\x4f\x59\x6f\x72\xd2\x60\x0e\x43\x17\x8f\x40\x1c\xb4\x2a\x9c\xce\x2b\x83\x7c\xd6\xc9\x5e\xf9\x6f\xac\xdd\x3b\xde\xc6\xae\xfe\x57\xdf\xfd\x06\xac\x2a\xc4\xd7\xc8\x36\xd8\xbf\xa0\xe2\x56\x4c\x66\xc8\x6a\x5d\x57\x3b\x90\xfc\x89\xf0\x9d\x20\x0e\xd9\x2b\x5b\x3f\x37\xa2\xa7\x7e\x66\x6c\xf2\x6e\xdb\x2c\x41\xb8\xde\x77\x8f\xd6\xbc\x4a\x70\xbe\x56\x7c\xb1\x91\x36\x76\xf7\xa7\x68\x42\x1a\x22\x32\x88\x43\x76\xb4\x2f\x2d\x34\x7e\x72\x96\x4e\xe2\x2b\xae\x97\xbd\x7c\x52\x4f\x19\xb2\x29\xc7\x9d\xfa\x5c\xb1\xf9\x77\xc9\x37\xd3\x0a\x4c\x56\x0f\x5b\x44\x64\x10\xe7\x25\x81\xc2\xf0\xdf\xc8\xa7\x7e\x5f\xb9\xcb\x31\x9f\x74\xfe\x6d\x40\xdf\x4a\x3d\x49\xd8\xcb\x95\x9e\xce\x45\x8c\x17\xd5\xf7\xb9\xd3\x2c\xb3\xbf\x69\xee\xa8\x63\xca\x71\xfd\xeb\x95\xd7\x52\xdf\x27\x30\x7f\xfa\x48\xed\x80\xb2\x6e\x4f\x9b\xb7\xa1\x46\xa0\x6b\x55\x24\xe9\x95\x17\xf7\x88\x56\xce\x92\x7f\x45\x4e\xe9\xdf\xbb\x7b\x1c\x71\x09\xd5\x93\x17\x0c\x12\xb0\xd8\x9c\xb9\x08\xf6\x43\x7e\xb3\x95\xd2\xdc\x44\xc1\xbb\xa3\x4d\x79\x4f\x88\x29\x94\x24\xfe\x7f\xcd\x2b\x83\x86\xf6\x6f\xbd\xf2\x3d\xa4\x26\x5b\x8a\xb4\x83\x2c\x57\x2a\x6d\xf0\xa9\x29\x47\xf7\xe5\x84\x1b\xb7\x96\xab\x13\x29\xa5\xca\x6f\xb7\xbb\xcf\xfe\xa0\x66\x90\x2f\x38\x93\x23\x4f\x64\xaf\x9c\x82\xb6\xfc\xf6\x68\x7b\x58\xbe\x5c\xd2\xa9\x52\x32\x3d\xeb\x7e\xaa\xb2\xa0\x60\xd4\xc6\xd1\xd5\x8d\xcd\xa5\x91\xa8\xa8\xad\xd2\x33\x39\xe0\x15\x45\xfa\xb3\x4c\x23\x65\x35\x71\x2f\xec\xa5\xf1\x9f\xe6\xeb\xd3\x8b\x86\x28\x77\xca\xcb\x05\x2b\x65\x10\x8e\x3a\x0e\x44\xa2\xac\xd1\x4b\x5f\x3b\x93\xd1\x22\x7b\xe5\x09\xcb\x47\x2b\x7f\x15\x7c\x2e\xf8\x7e\x71\xa6\x9d\x2e\xfe\x96\xe8\x9c\xf1\x20\xde\x5a\x36\x51\x5a\x57\xc6\xd8\x2b\x55\xfd\x72\xfe\x99\x8c\xd6\x16\xe9\xcf\x62\x54\x3f\xde\x3f\x32\x3b\x08\xb3\x92\x79\xb5\x25\xa7\x17\x88\xb5\x70\x8e\x44\xa7\x7c\x4e\x80\x7d\x66\xbf\x51\xea\x8d\x86\x9c\xfc\x99\x79\x65\x90\x88\x4e\x4a\x80\xe3\xb1\x63\x69\xb5\xca\xc4\x4c\xcd\xd8\x51\x3d\xa6\x5a\x31\xa9\x9b\x12\x64\x24\xd2\xeb\x99\xc6\x5e\x75\x4f\x47\xb8\x9f\xaf\x5a\x40\x77\xd6\x00\x1c\x52\x47\xa7\xbf\xc3\xf6\x13\xaf\x85\xc9\x0b\xef\x79\x16\xfa\xef\xa7\xf2\x8a\x98\x2e\xb3\x57\xca\x8c\x3c\x0d\x36\x33\x8e\x0b\x98\x2b\x80\xbc\x27\x88\x83\x27\x14\xd2\xa0\xe8\xf6\x87\x37\x2d\x49\x66\xd5\x2b\x8c\x47\x14\xb9\x5c\xf0\x9e\x1b\xac\x8f\x5c\x44\x27\x0a\x4c\xdd\xfd\x84\x3d\x64\x01\x9d\x57\x83\x38\x78\x02\x5c\xa1\xe2\xf7\x2d\x46\xf7\x60\xcc\xe3\xf7\xb6\xcd\xa9\xa5\x4e\xe9\xd0\xa5\xe3\x4b\xee\xc1\x14\x3c\x6e\x4f\x3a\x92\x8e\xef\x81\xea\xb6\x41\x1c\x3c\x2e\xe5\x64\xf2\xf0\xf4\x75\xd5\x73\xc2\xf7\x2f\x47\xd0\xbf\x90\x13\x62\xaf\x7c\x76\x5d\x72\x2a\x52\x5f\xc4\xb2\x73\x90\x6a\x02\x35\x0c\xe1\x95\x41\x1c\x54\xaf\x7c\xef\x34\x5b\x21\xd0\xef\xfa\x24\x25\xb0\x84\xf2\x08\x92\xd1\x3d\x17\xff\x88\x19\xfa\x97\xbb\xcf\x49\x4a\x56\xd1\x4f\x96\x49\x91\x72\xa6\xdc\xf0\xe1\x9f\xd1\xb7\x7c\x50\x17\x1f\x10\x07\x57\x02\xed\x8b\x1d\x43\x2a\xd7\xb0\x8b\xdb\xf2\xec\x82\x68\xd7\x43\x77\x57\x7c\x62\x06\x6b\x9c\x57\xfe\x84\xf0\x08\x0a\x58\x25\x5a\x41\x1d\x6f\x41\x1c\x5c\x09\x1b\x54\xd7\x0f\xc8\x7c\xb8\x04\x26\xb9\x15\x6a\x2a\x03\xee\xf6\xa9\x70\x70\xb5\xf3\x55\x11\x50\xf1\x24\x61\xba\xbe\x8e\x9b\x8d\x82\x0e\x3f\x01\x1c\x92\x57\x8e\x68\xce\x54\x8a\xdc\xbd\x26\x18\xad\xce\xad\x79\x38\xa7\x49\xf9\x06\x87\xfd\x7e\x8e\xcb\x8a\xd2\x15\xeb\x0e\x41\xad\x68\x48\x61\x20\x0e\x1e\xd7\x2b\x26\xf7\xcf\xd3\x0d\x7c\xe2\xc6\xd2\x72\xc5\x69\x94\x5b\xe9\xdd\xa6\xce\x7e\xd5\xe2\x51\xf9\xdc\x9c\xf5\xb1\x02\xdc\x35\xee\x50\xbd\x32\x80\x83\x2a\x13\x4f\xe7\x95\x41\x6b\xed\x49\x52\xb0\xae\x4c\x58\xcb\xba\x7e\x23\xb3\xab\xc4\x4c\xda\x79\x86\xc1\x6f\x42\x4e\x11\x07\xb3\xa4\xde\x9c\x31\x99\x70\x7b\x28\xb9\x03\x6a\xf3\x06\xe2\xe0\x52\x28\xb5\xe3\xd5\x7e\x62\x3d\x45\xc6\xeb\x2a\xee\xde\xf7\x5e\x58\xf4\xfa\x7b\xab\xfe\xed\x7c\xcf\x45\x7e\x2a\x51\xfb\x12\x14\xed\x3e\xe8\xc8\x1e\xc0\xc1\xa5\x40\xaf\x42\xae\xf8\x55\xd2\x56\xf9\xd8\x84\x9c\xd5\x66\x29\xf4\xd1\x92\x9a\x72\xe9\x1b\x74\xb9\xa7\xe1\x19\x0b\xc7\x43\xb5\x6b\x50\x5c\x10\x07\xff\x2f\x1b\xa6\xa2\xfe\x8e\x2f\x16\xa8\xf9\x33\x4a\x7e\x4e\x92\x36\x99\xfb\x2a\x9b\x03\xfe\xa4\xe6\x9a\x7d\xdd\x39\xad\x3d\xbf\x3f\xda\xd0\x9d\x71\x10\x07\x8f\xfb\x9e\x23\xec\xc3\xa3\x67\xaf\x14\xe8\xb0\x09\x1b\x7d\x67\xbc\x26\x0c\xcd\xf7\xb1\x77\xbf\xd3\x60\x74\x8a\x7e\x0b\x46\xeb\x26\x85\x0c\x12\x88\x83\x2a\x13\x45\x4f\x25\x05\x50\xfe\x3b\x49\x0a\xaf\xdc\x94\xd9\x68\x5f\x4c\xcc\x59\x16\xd3\xbf\xa8\x71\x30\xf9\x76\xf0\xf0\x2d\x59\xb9\x6c\x25\x23\x66\xf0\x23\x6e\x15\xf1\x4b\x50\x29\x38\x88\x83\x4b\xc1\xf1\x47\x4a\x4c\xb9\xcf\xf2\x9b\x8b\xc1\x12\x36\x57\x63\xbe\x56\x39\x4d\x56\x0e\xc5\x0a\x94\x61\xe8\xee\xae\xe6\x74\x94\xf7\x41\xfd\xb5\x41\x1c\xd2\xb9\x72\xc3\xad\x2f\x5e\x4f\x99\xd4\xaa\x3f\x3c\x62\x60\xee\x5f\x5b\x3a\xd2\xa0\x9c\xf6\xaf\x18\x3b\x57\xa2\x67\x42\x3a\x8e\xf5\xf1\x19\x74\xae\x0c\xe0\x90\x0e\x13\x37\x38\xe6\x5c\x86\x8d\xa2\xd3\xf5\xa2\xfd\xcf\x91\x8b\x46\x5f\xae\xd5\xcc\xe4\x7e\xb5\xcb\x50\xbb\xe6\x9f\x47\xe7\xec\xbc\x07\x1d\x26\x02\x38\x78\xdc\x67\xbb\x37\x70\xcc\x6e\x1f\xe0\xe6\x96\x70\x8d\xaf\x3c\x5d\xb1\x7c\xf6\xed\x51\xd6\x4b\xaf\xd6\xdd\x87\xd6\x2a\x39\xab\x93\x11\x37\xa1\x47\x75\x01\x1c\xb4\x2a\x9c\xce\x2b\x83\xf6\x24\x27\x49\xe1\x62\xf6\x93\x28\xd4\x87\x72\x3f\xfe\x5a\xed\x4a\x5d\x38\xbe\xa8\x7f\xaf\x87\x39\x8a\xdd\x9b\x1d\x23\x67\xa4\x7a\x64\x68\x52\x10\xaa\xff\x05\x71\x48\x52\x48\xf6\x44\xd5\xb2\x66\x7e\xaf\x74\x5d\x2b\xd9\xe7\xb1\xf1\x55\xde\xf7\x9b\x3f\xb4\x75\x25\xea\x87\x4b\xbf\x8f\x38\x6a\xe2\x73\x43\x52\x00\x70\x70\x29\x84\x4f\x5e\x4a\xac\xb8\x3c\x90\xa8\x4d\x80\x6e\xd3\xca\xce\xe5\x32\x2f\xe7\x23\x4f\xe1\xcb\x2f\x72\xa9\xb7\x7c\x4f\xf2\xb3\x34\xd4\xda\x04\xc4\xc1\xff\xcb\x0c\x71\xf7\x27\x65\x2c\x33\x6c\x57\x56\x3f\x5c\x2e\x3b\x1f\x79\xf3\xc2\x0b\x72\x46\x7b\x33\xb6\x40\xfa\xc8\xba\x9e\x2f\x3b\xde\xff\xaf\x2d\x1d\x80\x83\xc7\x5d\xb8\x9c\xcd\xd0\xfc\xe2\xd2\x07\xa5\x7a\xac\x1d\x12\x34\xaf\x16\xb9\x95\x5b\x64\xfe\x04\x8d\x96\xce\xd1\x2e\xc4\xc1\xec\xa9\x02\x08\x29\x80\x38\x68\x55\xb0\x3d\x95\x57\x06\xf9\xac\x93\xbd\x72\xfd\x80\xaf\xf1\x06\x4e\xb1\xf7\xd2\xe7\x5f\x7d\xd1\x52\x23\xe3\x04\x5c\xce\x72\x93\x87\x46\x5b\x47\x0f\xd4\x82\x4a\xbe\x70\x58\x23\x7c\x27\x88\x3b\xe1\xcd\xa8\xcf\x3b\x91\x06\x51\x36\xe5\x89\x66\x89\xd3\x6f\x68\x32\xc4\x9c\x4d\x45\x16\x3e\x24\xa8\xbd\x59\xdf\x88\xe8\xc2\xbe\x57\x28\x06\xbd\x19\x05\xe0\x90\xbd\x32\xd1\xd3\x0c\x0b\x66\x7d\xa5\x66\xa1\xef\x3a\x3a\x5e\xfa\x95\x8a\x3a\x8c\x43\xcd\xc4\x72\xef\x1d\x77\x3d\x47\x0f\x35\x03\x5f\x8e\x21\x22\x83\x38\x2f\x89\xff\x33\x93\xff\xf9\x8c\x74\xda\xf7\x95\x07\x1e\xd2\x8f\xd6\x53\x1b\x17\x6f\xcd\x96\xf9\x1b\xe0\xee\xe0\xef\x0f\x75\xf2\x69\x7f\xf8\x50\x6c\x1d\x43\x76\xae\xfd\x68\xc2\xfa\x5f\xaf\x7c\xe3\x81\x29\x36\x41\xb7\xfe\xdf\x7e\x7d\x56\x7a\x15\xf1\xb4\x62\x94\x3b\xef\xdb\x87\xda\xa8\xfe\x1e\x7c\x32\x08\xed\xa0\xa4\xb3\xfc\xf7\x27\xd4\x2a\xfe\x75\x64\xb5\x9c\x2e\x47\x0d\x3b\xf6\xc7\x78\xfc\x54\x59\xf9\xd8\x3d\xe9\xda\x07\xc7\x0a\x58\x9f\x31\xf7\xd0\x22\x8d\xff\xd7\xbc\x32\x68\x68\xff\xd6\x2b\x23\x79\xe5\xb1\x8c\xca\x89\xc9\x8a\xdb\xd2\x2e\xea\xf2\xcf\x47\x72\x7e\xd4\x3a\xf8\x4c\x51\x71\xed\x7d\x53\x0b\x20\xa4\x7c\x53\xa1\xce\x3e\x71\x26\x47\x9e\xc8\x5e\x59\xdf\xf6\x6d\x6b\x7e\xcc\x4b\x06\x7d\x25\x14\x46\x43\x5c\x8f\x84\x97\x71\xd7\x3c\xa6\x0b\x3d\x8b\xa4\xab\x86\x69\x71\xc6\x0d\x09\xce\xe4\x80\x17\xd9\x2b\x07\xae\x06\x63\xa2\x9d\xeb\x2c\x78\x2d\x1d\x83\x1a\xaf\x2d\x64\x52\x67\xfe\xd0\x5e\xc4\x9c\xe3\x2a\x23\xb7\x1d\xff\x50\x98\xfc\xea\x99\x8c\x16\xd9\x2b\x6f\x35\x4c\xde\x6e\x7e\x82\x57\x65\x40\xf9\x63\x71\xf3\x05\xca\x04\xdb\x8d\xf3\xdb\x9a\x5f\xbe\x09\x91\x96\x7f\xb9\x99\x7c\xa5\x9f\xf4\x4c\x46\x8b\xec\x95\xe9\xaf\xb9\xfe\x20\x0e\xca\xc2\x0a\x5e\x7e\x55\x7c\x15\xa7\x2b\x35\x6a\xe8\x58\x64\x76\xb6\xbf\xd5\xfb\xc7\x7d\xf2\x6e\x35\xbd\xe5\x33\xf3\xca\x20\x11\x9d\x94\x00\x69\x37\x6e\xf8\xf0\xb7\x0c\xbb\xcd\xbd\xfb\xb4\xa9\xea\xf8\xd2\xc2\x61\xdf\xe1\xe0\xde\x40\xb2\xdb\x96\xb5\x44\x98\x5b\x6c\xf2\x7d\xc8\xc9\x00\x38\xa4\xeb\x96\x69\xc7\xbe\xd3\x54\xbe\xc4\x3a\x5e\x2b\x9f\xfd\x82\x19\x35\x3d\x09\xb0\xdd\xc5\x8e\xa3\x9d\x5e\x57\x5e\x5b\xf8\x18\x10\x89\x02\x5d\xb7\x04\x70\xf0\x04\x48\xb9\x43\x32\x9b\x12\x3b\xb3\xd7\x5a\x55\xb7\x64\x1d\xdd\x36\xe0\x86\x5a\x27\xaf\x3d\x5f\x3c\x9f\xa7\xa8\x4c\x75\xdf\x7a\x2d\x16\x11\x17\xc4\xc1\x1b\x6b\x38\x71\x36\x54\xb3\x5f\xcc\x24\x50\x71\xff\xe6\x55\xb6\xfc\x16\xd3\x48\x2a\xbc\xb6\x48\x66\x40\xf4\xde\x8d\x95\xd5\xbd\x18\xe9\x25\xe8\xae\x21\x80\x83\xcf\xaf\x67\x75\x9e\x0e\x29\xe9\x40\xcf\x73\xa9\x73\xfc\x42\x77\x9f\x72\xb6\xce\xb9\x4a\xe0\x24\x2c\x90\xd8\x12\x51\xa7\x76\x99\x8d\xf3\x21\xbc\x32\x88\x83\xea\x95\x4f\xe5\x95\x41\xbf\xeb\x93\x94\x50\x73\xe7\xdc\x13\xb1\x43\xe5\xc7\x31\xee\xba\x37\xe7\xc6\x6f\x4c\x68\x89\x14\x07\x53\x32\xa7\x96\xdd\xf0\x45\x7d\xc1\x83\x61\x51\x05\x9d\xff\x02\x38\xb8\x12\xac\x79\x9e\x3f\xa5\xe2\x25\x74\xc5\xae\x53\xf8\x75\x4e\x83\xff\x43\x80\xe8\xbe\xc7\xf5\xb5\xb1\x09\x16\x1a\x33\xe5\x88\xdd\xdd\x6c\xc8\x78\x01\x38\xb8\x12\x1c\xb0\x30\x0c\x22\xd5\x44\xb0\x8d\xe7\xe3\xfc\xa6\xd7\xe8\x67\xc2\x68\xc2\xaf\x14\x54\x7d\x8f\x4f\xf6\x70\xd8\xe8\x74\x69\x36\x40\xc4\x05\x71\x70\x25\x10\xf1\x29\xba\x95\xf4\x75\x76\xe5\x51\xa5\x29\xdb\xdc\x65\xcb\xc7\xb0\xa2\xc6\x2f\xac\x34\xbf\xb2\xba\x25\x59\xec\x22\xda\x0b\xdd\x0e\x05\x71\xf0\xf9\x7d\xf3\x9a\x4c\x50\x89\x41\x51\x76\xbe\x7b\xbf\xf5\xfe\x15\xce\x6f\x74\x65\x8b\x07\x44\xd7\x7a\x8d\x79\x1f\xea\x92\xa8\xa6\xbc\x80\x0e\x13\x41\x1c\x54\x99\x78\x3a\xaf\x0c\x5a\x6b\x4f\x92\xc2\x0e\x41\x95\xe0\x2b\x17\x9a\xe4\x8d\x96\x73\xa3\xdf\xb0\xfe\x78\xb1\xe2\x5d\x7d\x5a\x1a\x22\x91\x7e\x68\x4e\x8f\x9d\xbc\x35\x0c\xed\x5e\x41\x1c\xd2\x03\x6a\xfe\x3b\xfb\x73\x19\x0f\x1e\x08\xf6\x3d\xca\xf1\x0c\x38\xd7\xf4\x6e\x24\x5f\x15\x93\x78\xfe\xcf\x2f\xad\x4e\x97\x4f\xcc\xda\xb5\x88\xb8\x20\x0e\x2e\x85\xdc\xbf\xfa\x3c\x37\xcb\xf1\x5b\xdb\x77\xd0\xae\xdc\x7d\x3a\x75\x75\xdd\xa0\x09\x4d\x7f\x28\x39\x85\x69\x27\xaa\xfd\x62\xef\x6d\xa8\x32\x11\xc4\xc1\xa5\x30\x6d\xf9\xe2\xed\xaf\xbe\x5d\xe3\x31\x51\x8a\xa1\xcf\x23\xb7\x38\x3c\x42\xef\xdc\x3d\xa2\x18\x0f\xf9\xe3\x82\xdf\x68\x91\xf5\x1b\x0b\x11\x17\xc4\x21\x35\x97\xd6\x53\x21\xd6\x54\x9c\x0f\xa7\x5f\x11\xc9\xc6\x99\xa6\x4c\x4b\x71\xe1\x70\x97\x5b\xb2\xf2\x2c\x7c\xed\xbd\xb3\x39\x31\x9c\x0a\xed\x8a\x01\x1c\x54\x99\x78\x3a\xaf\x0c\xca\x7f\x27\xbe\x19\xd5\xbc\x27\x9f\x6c\x37\x28\x7c\xf4\x71\x38\x85\x11\xbd\x9c\xb6\x2d\x8b\x90\xbe\xa5\x6c\xcc\xcb\xbf\xe2\x22\xb3\xe7\x2d\x34\xa8\x8b\x3d\x88\x83\x4b\x61\x39\x03\x17\xab\x41\xa0\xb5\x04\x03\x57\xeb\xd2\x31\xeb\x90\x62\xe2\x98\xd6\x5d\x14\x8e\xf6\x8b\x81\xf9\x55\xc6\xc4\xbd\xd8\x46\x88\xb8\x20\x0e\x2e\x05\xe2\x2a\x43\xfd\x8c\xf3\xee\x16\x97\x8e\xaf\x8c\xd1\x7a\x5e\x39\x64\xbe\x11\x46\x92\xdc\x3b\xe8\xdd\xfc\xce\x2c\x85\x07\x0d\x1b\x7a\xd7\x01\xc4\xc1\xa5\xa0\x11\x72\xf1\x9d\x30\x6d\xe2\x6a\xc1\xcf\x0a\x8c\xb7\x22\x31\x99\xcc\xf4\xfb\xcc\x33\x33\x0d\x11\xa3\x72\x71\xab\xcc\x61\x01\xbb\x88\xb8\x20\x0e\x3e\xbf\x76\x0c\xf3\x06\x92\x47\x6d\x0f\xf7\xdd\x12\x30\x5f\x84\xfb\x51\x68\xb6\x0e\xac\x72\x99\x18\xdb\x7c\x78\xc6\x2f\xf2\xeb\xfb\x54\x2d\x42\x0a\x20\x0e\x5a\x15\x4e\xe7\x95\x41\x7b\x92\x13\x3f\x9b\xe0\xd7\xcd\xd7\x15\xad\x8e\x25\xb8\x3c\xf4\xb6\xe3\x48\xec\x78\xc8\x14\x68\x7c\xf9\xa9\x1d\x5b\x4f\x1b\x7f\x59\x72\x2a\x29\x54\xe9\x00\xe2\xe0\x52\x88\x12\xb1\x51\xc0\x6e\xed\xfb\xf6\x28\xa0\x7c\xc6\xc2\x88\x01\x75\xbf\x99\x57\xdb\xe8\xeb\xaf\x1a\xce\x2a\xaf\x30\x23\x05\x14\x39\x44\x5c\x10\x07\x97\xc2\xec\x77\x76\xd6\xe3\xba\x4e\xfe\x4f\x76\xe5\x05\xcd\x44\x24\x64\x97\x9f\x0d\xbd\x59\x9b\x6c\x65\xeb\x1d\x2a\xa7\xaa\xcc\x1b\x81\x3c\x2d\x88\x83\x4b\xa1\x72\xf2\xd9\x07\xc7\x59\x09\x7d\xa9\xfe\xfd\x1d\x7f\xf3\xee\x29\xcd\xc8\x6b\x2f\x07\xc3\x39\x16\x56\x6f\xee\xb5\x39\x98\xab\x42\x1f\x69\x41\x1c\x7c\x7e\x53\xde\xe1\xbe\xc1\x08\x3a\x1c\x60\xfc\xdd\xa5\x64\x40\x7c\x5d\xbe\x4c\xe8\xfb\x96\x60\xe8\x1d\x6e\x42\x53\xa2\x62\x12\x0d\x9b\x42\x84\x14\x40\x1c\xb4\x2a\x9c\xce\x2b\x83\x7c\xd6\xc9\x5e\xb9\xdf\xbe\x9f\x81\xc9\x28\xb0\xec\x4f\xc6\xc6\xe8\x5b\x8e\x3e\x2e\x36\x2c\x2b\x3d\xe2\x67\xb3\x2d\x19\xea\xae\x6a\x28\xb8\xd8\x8f\x11\xbe\x13\xc4\x21\x7b\xe5\xac\x27\xb8\x1b\x79\xcf\x8e\x15\x4b\xbe\xfa\x58\x58\xc9\xb8\x4f\x57\xd5\xbf\xca\x30\xd7\x74\xb9\x88\xd2\x1e\x72\x63\x01\xe7\xd3\x3b\xe8\x35\x2a\x00\x87\xec\x95\xbf\x8a\xf0\x64\xea\xe8\xb5\x5f\xf7\xe8\xfb\xae\xcb\xca\x92\xc8\xa5\xf1\x95\x4f\x7b\xeb\xb3\x76\x08\xf3\xe5\x6e\x03\x4b\xbc\x7a\x76\x44\x64\x10\xe7\x25\x81\x82\x82\xfa\x9f\xc8\xa7\x7e\x5f\x19\x75\x46\x8e\xee\xd1\x74\x40\x59\xeb\xd7\x65\x6a\x3b\xd4\x7e\x82\x2b\x8b\xbc\xbf\xdf\x7e\xc9\xea\x42\x25\xad\xe9\x34\x63\x2a\xae\xfa\xd7\x2b\xdb\x6d\x84\xf5\xd7\xe3\x85\xc9\xdf\xd7\x62\xb5\x12\xda\x0e\x08\x44\x7d\x61\x6c\xc5\xce\x3a\xc4\x5b\xf3\x6a\xa1\x38\x4d\x9f\xd1\xe5\x1f\x74\x1e\xb3\xfb\x3b\x1b\x96\xc8\x0f\xf6\x76\xa7\x63\xe9\xf6\x9e\x9e\x07\xf8\x6c\x2e\x96\x19\x5e\xbf\xc5\xe7\x3e\x36\x90\xdc\xc5\xec\xf8\x5f\xf3\xca\xa0\xa1\xfd\x5b\xaf\x8c\xe4\x95\x9f\x3b\x2b\xcc\x39\x73\x3c\x10\x0d\x9a\xf6\xb9\x2c\x9e\x70\x54\x6b\x27\x5f\x14\x40\xa3\x14\xf4\x49\x75\xba\xf4\x45\x39\x27\xed\xd9\xb4\x68\xe6\x47\xb2\x71\xb2\xe4\x83\x49\x8b\x26\x44\xe5\xf1\xfe\x78\x96\xb7\xb0\xb1\xf2\x5b\x55\x79\x3c\xe9\x7a\x72\x18\xb5\x9b\xf7\xea\xd1\xfe\x72\x71\x9d\xc9\x01\x2f\xb2\x57\x16\x6d\x99\xac\x13\x7a\x9a\xfb\x2d\xf3\x7a\xae\x4f\x9e\xe7\x5c\xf0\xe8\x75\xca\x1d\x12\xae\x57\xee\xb5\xbd\xbe\xd4\xd5\x4f\xfa\xe7\xce\x64\xb4\x3a\x48\x7f\x96\xf4\xe6\xd5\xc4\xaa\x3a\xe7\x22\xb6\x1e\x53\xb4\x96\x0e\x97\x74\xe7\xb4\xe8\xeb\x62\x97\x9b\xa4\xc7\xb7\x66\x36\x95\x82\xd6\x05\xcf\x64\xb4\xc8\x5e\xf9\x4f\x54\xe0\xbe\xdd\xa6\xe2\x5a\x28\xcd\x12\x63\x12\xce\xc6\xaa\x99\x76\x02\x3f\x91\xe5\xb2\x4e\xbc\x8f\x7d\x50\x0a\xfa\x68\xe0\x99\x79\x65\x90\x88\x4e\x4a\x80\x6f\x51\x78\xf6\x0f\x51\x53\x02\xb1\x08\x50\xa3\x9f\xf9\x93\x73\x0d\x72\x6b\x26\xfb\x4a\x0a\xe9\xb6\x63\xca\x05\xb5\x36\x4e\xd9\x23\x16\x7e\x10\x07\x4f\x80\x6f\xa4\x19\x1e\xea\xc5\xa2\xae\xfb\x7e\x25\x5b\xd2\xd8\xb0\xe0\x5a\x5e\xf1\x6f\xff\x63\x28\xe1\x55\xe5\xaa\x11\xb1\x43\xfd\xe5\x13\x22\x2e\x88\x83\x27\xc0\xc6\x35\xcc\xc5\x75\x5a\xfa\x54\xa3\x8e\xaa\x54\x95\xe0\x45\x17\xbc\x79\xeb\x4f\xfc\x3e\x1f\xea\x46\xa7\x24\x8b\xee\x2a\x3a\x42\xcf\xd9\x80\x38\x78\x02\xb4\x46\xa5\xd9\x34\x10\x50\xaa\x4b\xf5\xfd\x43\x24\x65\x21\xca\xa4\xf1\xde\x57\x91\x3e\xf2\xaa\x95\xd8\x01\xa1\x72\x64\x10\xc1\xff\x73\x74\x00\xce\x4b\x9c\xe1\x3f\xf3\x80\x92\x6d\x2e\x6d\xf9\x35\x8d\xf3\x11\x87\x40\xe4\x4d\xb5\x48\x8c\x07\xbc\x6c\x6f\xb2\xdd\xa7\x34\xd5\x35\x22\xd9\x6a\x47\xc5\xab\x11\x5e\x19\xc4\x41\xf5\xca\xa7\xf2\xca\xa0\xdf\xf5\x89\x0d\x9d\xea\xd9\xd2\x55\xcd\x6b\x4d\x88\x3e\xb0\xa1\xbf\xd1\xbe\x79\xee\x0e\x9a\x61\xb7\x2e\xa9\xe7\xc7\xcd\x25\xee\xcb\x41\x95\xa5\x50\xe7\x72\x10\x07\x57\x42\x0a\xff\x88\x8f\x25\xe5\x4c\x9c\xe5\x47\xe7\x4a\xee\x5e\xb5\x03\xa1\xf3\xf1\x4f\x8d\x36\x62\x2c\x0f\xa7\x44\xf0\xdb\xf7\xd0\xa1\xdd\x36\x88\x83\x2b\xc1\x59\xb5\x68\x44\xf6\x83\x48\x3e\x5b\x44\x56\x74\xda\xdf\xae\x82\xf2\xc3\x10\xfd\xb1\xbd\xa1\xfa\x5d\xee\xc5\xe2\xa9\x59\x57\xa8\x0e\x1a\xc4\xc1\x95\xe0\x13\xf4\x60\x8e\x6e\x2e\x4d\xb5\x77\xef\x57\x2a\xe3\x9f\xa3\x5d\xd3\xee\x67\x9a\xd5\x05\x85\x21\x62\x89\x92\x54\x42\x57\xe9\xa0\x7a\x65\x10\x07\x57\x82\x35\xba\xe8\x44\x16\x7a\xd2\xc5\x72\x45\x6b\xea\x2c\xbe\x1f\x12\x4b\x9e\xba\x65\x1b\xe5\x0f\xcf\xa7\x7d\xbc\xac\xf1\xf8\x4b\xf7\x10\x62\x2b\x04\xe2\xa0\xca\x44\xfe\x53\xed\x8a\x41\x6b\xed\x49\x52\x20\x74\x0e\x64\xbc\x78\xab\x98\xd1\xcb\x06\x4b\xc7\x51\xb6\xe5\xb1\xcd\xbd\xc9\x6b\x74\x86\xcf\xcf\x89\xb9\xe0\x73\x06\xda\xad\x43\xd7\xdb\x41\x1c\x5c\x0a\xf8\x54\xb8\xb6\xdc\x9e\x17\x25\x59\xfc\x0b\x74\x0f\x99\xae\x46\xcc\x7f\xba\xf8\x63\xe5\xf9\x43\x19\x6d\x3c\x7d\x91\xaa\xeb\x4c\xd0\x6b\x2b\x20\x0e\x2e\x85\x1a\xfb\x67\xda\xb2\x85\xd8\xd7\xe4\x02\x24\xff\x2e\x7e\x7b\xb8\x3e\x61\x9e\xcd\x23\x2e\x1f\x46\x4e\x81\x9a\x76\x87\x41\xea\x25\xf4\x38\x3a\x88\x83\x4b\xe1\x42\xdd\x1f\xa5\x05\x45\xa3\x8d\xf8\xc4\x69\x9a\x27\x75\x9f\x7e\xda\xee\xe4\x17\xce\xee\x74\x64\x06\xe3\xa3\x13\x3f\x24\xfc\x06\x7d\x3e\x02\x71\x70\x29\xbc\x41\xbf\xd2\xd2\xfe\x43\x7d\xd0\xa9\xf6\x66\x48\xea\xeb\x9b\xa8\xc7\x13\x7a\xf6\x6e\x5f\x6f\xb7\x44\x65\x3c\x58\x91\xb3\xf0\x5e\x80\x3e\x9b\x00\x38\xa8\x32\xf1\x74\x5e\x19\x94\xff\x4e\x7c\x28\x68\xf3\xc6\xce\x2d\xde\x4f\x98\x03\x97\xc3\xa2\x2c\xe8\x7f\xcb\x36\xf4\xcd\xd8\x9b\x4a\xa9\xdd\x8c\xe8\xe2\x96\x97\x54\xf0\x14\x86\x0e\xfd\x00\x1c\x5c\x0a\x09\x6c\x83\x59\x4c\xd5\x19\x95\x1b\xcb\x59\xa9\x16\xb3\xa8\xe4\x22\x53\x25\x68\xe6\xa4\xd7\xf3\xcb\x73\x43\x7d\xa6\x50\x88\x1e\x41\x8d\xa2\x00\x1c\xd2\x1d\x6c\x75\xfa\xb6\x0e\xc7\xa8\x4b\xdd\x22\x46\x6c\xa6\x45\x0f\xef\xd5\xc8\xb7\x3d\x7c\x2b\x21\x33\xfb\x54\x28\x9f\xe2\xe3\xb4\x96\x13\x74\x07\x1b\xc0\xc1\xa5\x10\x53\x7d\x5b\xcb\x37\x27\xc0\x5e\x80\x3a\x2f\x36\x46\xb3\x77\x50\x47\x7c\xd5\x44\xc5\x9e\xd1\xef\xed\x5a\x29\x8f\x8c\xc2\x30\x74\x01\x19\xc4\xc1\xa5\x30\x5f\xd8\xc5\x98\xb9\xa1\xc7\x39\xa7\x6c\x87\xd3\xdc\x94\x34\xfb\x93\xc1\xff\xed\xab\x89\x16\xcb\x4a\x33\x53\xa9\xbc\x08\x21\xa8\x0f\x36\x88\x83\x56\x05\x9d\x53\x49\x01\xb4\x27\x39\x49\x0a\xf8\x8a\x13\xab\x1b\xbb\x2b\x04\xcd\x99\xd6\x0f\x5a\xa7\xb7\x12\xd8\x59\xbc\x37\x6d\xdb\x7b\xd7\x26\x5a\xb5\xf2\xe6\x23\xf8\xa1\x23\x7b\x10\x07\x97\x82\xbd\x20\x9b\x16\xcf\xb3\x4e\xbb\x5a\x93\x6b\xe7\x5f\x1e\x1c\x1d\x89\x94\x0e\xe3\x59\xfe\x78\x77\x71\xf8\x1e\x99\x98\xcf\x65\x71\xa8\xc4\x1c\xc4\xc1\xa5\x40\xf5\x96\x31\xae\x97\x6e\x57\xff\xd7\x3e\x17\x87\xb6\x3b\xa6\x69\x3f\xee\x9b\x0f\x23\x1d\x57\x09\x4d\xc6\xfe\x04\xbc\x99\xbe\x04\x3d\x1f\x06\xe2\xe0\x52\x30\xae\xc0\xbf\x17\xd1\xd5\x74\x4f\x4f\xeb\xe7\x2f\x0f\x35\x03\xd6\xeb\x02\xc1\x45\x7c\x65\xb3\xf6\x69\xcf\xb2\xcb\x44\x94\xef\x1d\x20\xe2\x82\x38\xb8\x14\x5c\x5e\x7f\x7c\x58\x52\xb4\x9a\x18\x12\x1a\x40\x7f\xa8\x33\x1e\x67\x42\x4c\xe0\x8b\x56\x45\x7e\x9b\xc6\x3a\xe0\xd2\xdd\x7c\xfe\x4c\x84\x14\x40\x1c\xb4\x2a\x9c\xce\x2b\x83\x7c\xd6\xc9\x5e\x59\x3e\x78\xd1\x2b\x34\x26\xc7\x97\x3f\xa9\x65\xa9\x71\xca\x96\x4f\x4d\x62\x9e\x81\xdc\xb4\xb6\xc0\xcd\xe0\x39\x51\xb8\xd9\xcc\x7b\x84\xef\x04\x71\xc8\x5e\x39\x87\x76\x2a\xd5\xea\x76\x77\xff\x8b\x61\x7a\x51\x16\x91\x51\x7c\x2d\xde\x5e\xfa\x06\x83\x3c\x0f\x23\x71\xd3\xdf\x78\x5a\x4e\x50\xd7\x30\x10\x87\xec\x95\x8b\x85\x45\xc5\x36\x3c\x1c\x2f\x52\x3c\x19\x30\x1e\x49\xe0\x49\x32\xba\x20\xd4\xa8\xa5\x5a\xce\x84\x23\xbb\xf8\xfa\x83\x54\x81\x38\x22\x32\x88\xfb\x3f\x5e\xf9\xbf\x6d\xd9\x4e\xfd\xbe\xb2\x5f\x5c\xb3\x33\xff\x5f\x49\xa9\x10\xe5\xdc\x84\x9e\x27\x64\x37\x70\x47\x55\xca\x38\x33\x66\x1c\x31\x7e\xb0\xac\xed\xb7\x6b\x77\xfc\xeb\x95\x19\xc6\x71\x4a\x1e\x28\x4e\xc7\xeb\xec\x50\x56\x4c\xc4\x95\xe6\x57\x60\xf0\x4e\xc8\xbc\x14\xff\xb4\xc4\xe0\xc0\xce\x93\x3d\x7c\xff\x1f\xd4\xff\x76\xbd\x0e\x87\x62\xb7\x7c\xb2\x99\x58\xcb\xa3\xfd\x29\x26\xda\xaf\x58\xc9\xb6\xf1\x4c\xaf\xcf\xef\x68\xff\x48\xc9\xe7\xa9\xfb\x5f\xf3\xca\xa0\xa1\xfd\x5b\xaf\x8c\xe4\x95\x55\x66\x72\xb7\x3b\x9b\xae\x6e\xfd\xc9\x24\xee\x95\x51\xd5\xae\x5c\x4e\xa1\xb3\x24\xb1\x22\x72\x9f\x0e\xce\xbc\xda\x45\xf8\xf7\xe7\x99\x1c\x79\x22\x7b\xe5\xc7\x64\xbe\xe7\x2f\x16\x3d\x37\x4d\x60\x8e\xa7\xd6\xa0\xbf\xad\x26\xed\xf0\xf2\xe8\xa8\x81\x69\x05\x93\x3c\x1a\x8d\x65\xf9\xd0\xed\x4c\x0e\x78\x91\xbd\x32\x2e\x36\x77\xae\x4f\xda\xdd\xc8\xc9\x85\xa6\x26\x2b\x5f\x5f\xea\x1f\xbe\x9b\xeb\x75\x77\x5b\x26\x62\x3e\x7f\xad\x09\x0a\x19\x67\x38\x93\xd1\x22\x7b\xe5\xaf\x63\x1e\xb7\x95\xc8\x22\x92\xbb\x2a\xb3\x02\x3c\xf3\x49\x17\xd4\xd5\x92\xe2\x48\x56\xbe\x49\xf2\xf8\xff\xd4\x98\xc4\x5d\xbd\x7b\x26\xa3\x45\xf6\xca\xf6\xab\x44\xe2\xf7\xa5\x8a\xbe\xd2\xa6\x77\xad\x5f\x7b\x61\x4c\xcb\x33\xb9\xc0\xef\xe2\xab\xdc\x4f\x2b\xc8\x68\x66\x8b\xd6\xfc\xfe\xcc\xbc\x32\x48\x44\x27\x25\xc0\x7c\xed\xdd\xee\x43\xf9\x63\x07\x42\xda\x6c\xb2\x29\xd5\x43\xbd\x60\x7b\x0d\x96\x99\x8a\xe4\xca\xa6\xb0\xe8\x2b\x1d\xa1\x28\xfc\x88\x85\x1f\xc4\xc1\x13\x60\x92\x83\x61\x24\xb5\x45\x40\x54\x17\x2e\x47\x05\xf9\xbe\x83\x91\x98\xff\x90\xd5\x7a\xb6\x63\xe8\x94\x55\xd7\x23\x7e\x9e\xc2\x4e\x44\x5c\x10\x07\x4f\x80\x26\x81\x4f\x83\x4b\x7e\x0e\x06\x66\xae\xcd\x06\x1a\x47\xf1\xb2\x0b\xad\x29\x45\xe1\x60\xdc\x8d\xdb\x3c\x12\x2f\x4a\x8b\x09\xfc\xff\x31\xf7\xde\xe1\x5c\xbf\xef\xff\xbf\x59\x92\x4d\x94\x3d\xb3\x33\xb2\xf7\xde\x23\x9b\x8c\x8c\xec\x88\x88\x08\xd9\x7b\x24\x59\x99\x25\xd9\x64\x65\x84\x6c\x4a\x59\x59\x85\xec\x84\x10\xb2\x22\x7e\xc7\xe7\x7b\x1c\xcf\xc7\xaf\xf7\xe3\xe9\x38\x2e\x7f\xf8\xe3\xf5\xff\xed\x38\x75\x5d\xdd\x9f\xd7\x79\xdd\x1f\xd7\x75\x9e\x97\x3c\x22\x2e\x88\x83\x27\xc0\xf8\xeb\xa4\x73\x42\x97\xdf\x0a\x33\xd8\x79\xbc\xdd\xdb\x28\x20\xdf\xc7\xc2\x7f\x40\xfb\x9a\xbc\xf5\xa3\x90\xd3\x5a\xe2\xe3\x9f\x71\x50\xdf\x6e\x00\x17\x24\x83\x82\xf6\x6f\xdc\xeb\xce\x2c\x57\x5b\x3e\x17\x6e\x74\x51\xe2\x35\x48\xd1\x8b\x7f\xd3\x48\xf8\x96\x9b\x85\x7a\xf9\x31\x87\xa9\x61\xb1\xbf\xa5\xe9\x18\xc2\x2b\x83\x38\xa8\x5e\xf9\x54\x5e\x19\xf4\xbb\x3e\xf1\x36\xfe\xca\xfd\xe1\x10\x07\xdc\xcd\xb2\x67\xf4\x5c\xd7\x5b\x7e\xab\x8e\x24\xcd\x73\xcd\x3d\x7d\xfa\x88\xd4\xe5\x3e\x66\xe7\xf9\xf8\x3d\xe8\x36\x3e\x80\x43\xba\x83\x4d\x37\xcb\xe3\x58\xa5\xe9\xf2\x31\x9b\xcd\x2e\x27\x62\xf5\xde\x95\x61\x42\xdd\x0a\xe5\x2b\xe5\x43\xdf\x3b\xf5\x34\x7b\x4a\x53\xa1\x9b\x0b\x00\x0e\xae\x04\x91\xc5\xd5\xc3\x62\xbb\x5b\x6f\x3d\x14\xc2\x98\x7c\x15\x70\x1c\x7d\x72\x1f\x2c\x97\xbc\xda\x61\xc4\x30\xc7\xf5\xb3\x6a\xa3\xb9\x82\x88\x0b\xe2\xe0\x4a\xe8\x8a\x19\x37\x48\x9d\xb0\x14\xc2\x7f\x6c\x31\xf4\x7a\x7a\xab\xe3\x25\x4e\xca\x5d\x74\xde\x3b\xa6\x42\xb1\xca\x15\xe9\x19\xe9\x4f\x10\x71\x41\x1c\x5c\x09\x99\x11\xec\xa5\xa1\xab\xce\x57\xfe\xdc\x5b\xd8\xdc\x98\x6c\x08\x6b\xfd\xba\xeb\x51\x49\xc3\x3e\x46\x54\x1d\xf8\xf5\x62\xba\x0b\x54\x8e\x06\xe2\xa0\xca\xc4\xd3\x79\x65\xd0\x5a\x7b\x92\x14\xca\x7c\x94\xf2\x5e\x34\x4d\x15\x3c\x28\xa2\xdb\xc0\x5f\x37\xcc\xd8\x7b\xa9\x76\x51\xbe\x42\x6d\xab\x65\x89\x85\xd4\xe9\x60\x29\x13\x31\x05\x20\x0e\x2e\x85\x73\xb8\xec\xaf\x18\xf6\xd1\x25\x27\x5b\x85\x1d\x7c\x9b\xe6\xa2\x23\x75\xf4\x8a\x1f\xe8\xea\xb1\xd8\x2b\x90\x79\x29\xbd\xf9\x04\xbd\xaf\x0c\xe2\xe0\x52\x50\x29\x68\x71\x2f\xae\x3b\x70\x3a\x72\x78\xdb\xf2\x29\x29\xeb\xe9\x82\x43\xea\x8a\x08\x8f\xd2\x4f\x06\xd4\xad\xb9\x91\x0b\x1a\xd0\xed\x50\x10\x07\x97\x82\xc5\x3e\x09\x5b\xe5\x4f\x7b\xb9\xc1\x31\x85\x3f\x02\xa9\x21\x7e\x9c\x02\xca\x71\xcb\x04\x45\xae\x97\x8f\x31\x66\xdf\x36\x39\x40\xf5\xd5\x20\x0e\x2e\x05\x89\x85\xa3\x07\x58\x36\x0c\xd6\x14\x8a\xd5\xab\x5f\x5f\xa3\xf0\xd6\xb1\x3c\x3f\x24\xea\xf4\x99\xda\xe7\x5a\xf8\x71\x6e\xb6\x43\x11\x21\x05\x10\x07\x55\x26\x9e\xce\x2b\x83\xf2\xdf\x49\x52\x70\x45\x69\x8d\xbf\x21\xc4\x5a\x30\x17\xee\xf3\xb7\xdd\x58\x61\xe5\x6b\x4e\x57\x3a\x8f\x98\x48\xdc\x02\x73\xc2\x7a\xb0\xb4\x9d\x2d\x62\x0a\x40\x1c\x5c\x0a\x57\x85\x1e\xfd\x41\xbf\xde\xb6\x9a\xbb\x12\x65\xf8\x41\x25\xa9\xc3\x9c\x9e\xfe\x8f\x6d\xe2\x50\xa8\x69\xab\xe5\xa4\xc5\xb4\x95\x30\x22\x2e\x88\x83\x4b\xe1\x49\x47\xdc\x2f\x83\x07\xc4\xb1\x3b\x75\x81\x4f\xb5\x4b\xf9\x04\x42\x82\x03\xdd\x9b\x14\x28\xb3\xa7\x2e\x08\xb4\xc4\x70\x60\x42\x86\x0e\xc4\xc1\xa5\x90\x14\xd6\x79\x73\x5b\x23\xad\x0b\x77\x70\xfd\x30\xfe\x56\x6e\x91\xff\x64\xd6\x23\xa1\xab\xbf\xca\xf9\x55\x23\x66\x64\x68\x30\x99\x10\x71\x41\x1c\x5c\x0a\xa5\x2e\xea\xe5\x47\x33\xe8\x64\x9d\x3c\xf8\x96\x72\x05\xe2\x33\x14\x4e\xc4\x28\x5f\x50\xaf\x13\x0c\x4b\xde\xcd\xfd\xa5\xd2\x15\x8e\x90\x02\x88\x83\x56\x85\xd3\x79\x65\xd0\x9e\xe4\x24\x29\xd0\xd1\x51\xdf\x46\x61\xd6\x7b\x53\xd0\xdb\xcd\xe1\xc0\x3b\x61\xec\x5c\x4b\xd1\x68\xcc\x72\x88\xf1\x47\x61\x25\x20\xf2\xc9\xaa\x22\x62\x0a\x40\x1c\x5c\x0a\x3b\x5a\x32\x94\x6e\x6b\x95\x71\x82\x8f\x0b\x0f\xf4\xf2\xb7\x2d\xec\xbd\xdc\xd2\xb2\x6e\x77\xc8\xd7\xbe\xdf\x8b\x0e\x67\xb3\x80\x8a\x74\x40\x1c\x5c\x0a\xd8\xdc\x4c\x94\xb3\x5a\xc4\xd3\x57\x89\xdd\x3e\x8a\x9d\x0b\xda\xf5\xc1\x91\x2a\x25\xa0\xc2\x91\x0a\x21\xc8\xa7\xf5\xe2\x8c\x87\x3e\xab\x83\x38\xb8\x14\x32\x06\xa9\x9c\x34\xe6\xcb\xe8\x34\x6e\x53\x9a\x3e\xeb\xb2\xff\x16\x5c\xd6\xf6\x4a\xf1\xcd\x35\x63\x1e\xe1\x04\x0b\x9a\xec\x84\x19\x44\x5c\x10\x07\x97\x02\x09\xde\xa8\x83\xf9\x6e\x9c\xee\x86\x2c\x93\x46\x73\x49\xa0\x2f\x66\x0c\x05\xf7\x00\xdf\xfd\x47\xf5\xa5\xdb\x3f\x17\xfb\xd5\xa0\x3b\xd8\x20\x0e\x5a\x15\x4e\xe7\x95\x41\x3e\xeb\x64\xaf\x2c\xe7\x60\xf0\x63\xa9\xc6\x9e\x24\x6d\x92\x2c\x71\x7f\xfc\x41\x6e\x3a\x61\x62\x97\x8f\x8c\x73\x43\x8f\x40\x14\x9f\x4b\x0b\xf3\x20\xc2\x77\x82\x38\x64\xaf\xfc\xe0\x9c\x43\xbd\x54\x4d\xff\x10\xda\x44\x1f\x8a\x64\x7a\xc7\xc6\x4b\xbb\xf7\x98\x49\x7e\x3e\x2a\x21\xf6\x89\xd3\x77\x46\x77\x1c\x11\x91\x41\x1c\xb2\x57\x2e\x9d\xf0\x3e\xa7\x3d\xc3\xc7\x6b\x77\x73\x77\x2e\x68\x5b\xce\x0c\x65\x2b\x2b\xa4\xc4\x7d\x9e\x2e\x1f\x63\x28\xa3\x76\x4b\x09\xaa\x57\x06\x71\xff\xe7\x95\x09\xfe\xf7\x8b\xe2\x69\xdf\x57\x5e\x36\xee\xa0\x0b\x7c\xa3\x88\x4f\x73\xf1\x42\xce\x62\xb3\x09\x29\xff\x84\x69\xf0\x93\x3c\x1f\xde\xa6\x5b\xd3\xca\x92\x37\x6f\x53\xfd\xeb\x95\x83\xee\x1a\x8f\x8d\x65\x2d\x4d\xd4\xc5\x55\x99\xfc\x22\xb7\xed\xcb\xc5\xca\xf2\xea\xe2\x1e\x11\x32\x4d\x99\xc9\x94\x3a\xb6\x0e\xff\x07\xb5\x6f\x7c\x3d\x5d\xb5\xef\xe9\x15\xfc\x2d\x41\x25\xb8\xdf\xb7\xc3\x2b\xdb\x0c\x9f\xf5\xbc\x41\xad\x4f\x4d\xa0\xff\x21\x51\x97\xcd\x7f\xcd\x2b\x83\x86\xf6\x6f\xbd\xb2\x12\xdc\x4f\xc5\x97\x0e\x1c\xe2\x17\x86\x87\xe3\xda\x6d\xc7\x26\x36\x5c\xf3\xf1\x0a\x43\x33\x4d\x99\x8b\x14\xef\x6b\x99\x3c\x87\x3b\x9f\x19\x7a\x26\x47\x9e\xc8\x5e\x59\x78\x88\xa5\x1c\xef\xb2\xf7\x23\xcd\x31\x0b\x93\x07\x28\x5f\x33\x9a\x3f\x7f\xd0\x7c\x84\xc7\x17\x21\x4e\x99\x93\x95\x65\x60\x37\x7d\x26\x07\xbc\x92\x48\x7f\x96\x73\xc6\xd7\x93\x9e\x58\xb1\xf7\x3e\x4b\xb7\xb1\xd9\x77\xef\xaa\x92\x8f\xda\x82\x09\xb4\xc6\x17\x95\x02\x9d\x48\x4a\x1d\xfc\x6e\x9f\xc9\x68\x91\xbd\x32\x05\x13\x87\xad\xde\x90\x5c\x6a\xf5\x78\xeb\xa5\xa7\x7e\xfd\x21\x97\x7f\x85\x6e\xc6\xba\x3e\x52\x2c\x23\x93\xb0\x4a\x57\xf8\x7e\x36\xed\xb7\x3d\x90\xfe\x2c\xc7\x17\xe7\xaa\x28\x8e\xd0\xe6\x4a\x3d\x7c\x0b\x8e\xd7\x0e\xc7\xe4\xe7\xf5\xd7\x92\x4c\x75\x8a\xb8\x45\x86\x86\x8e\xc3\x69\x35\xce\xcc\x2b\x83\x44\x74\x52\x02\x54\xd8\xff\x8b\xce\x87\x91\x26\x7e\x83\xe9\x47\xc6\x4c\x84\x70\xbe\xa9\x52\x9b\xd7\xf7\x24\x05\x12\xbc\xde\x76\x54\x2f\x71\x47\x2c\xc4\xc2\x0f\xe2\xe0\x09\x70\x22\xe1\xfb\x43\x1a\xe5\x96\x5b\x04\x03\x78\x61\x5d\xae\xfa\xef\xea\x97\x0d\xeb\xa5\x26\x0b\xf7\x1f\x91\x0a\x11\x76\xa3\x50\xde\x80\x9c\x17\x80\x83\x27\xc0\xcc\x4c\xe7\xee\x5f\x56\xa6\x75\x7b\xa6\x57\x70\x93\x6e\x24\x35\x1d\xfd\x88\x8e\x29\xfd\x22\x44\x40\x18\x60\x71\x6c\x4d\x6f\xa1\x87\x88\x0b\xe2\xe0\x09\x50\x95\x20\x73\x7c\x36\x70\xc3\xc3\x93\x7b\xe0\x1b\x6b\xc6\x4f\xf9\x56\x61\x2a\x21\x62\x54\x96\xb7\xb8\x29\x99\x7e\x71\xf6\x86\x50\xdd\x36\x88\x83\x3f\xc6\x48\x30\xf3\xf0\xc1\x55\x37\x9b\x28\xf3\x19\x3f\x8b\x7e\x8c\x2a\x43\x8d\xa0\x35\x19\xd3\x4b\x1f\x42\x6e\xba\x33\x3c\x45\x4d\x16\x90\x43\x78\x65\x10\x07\xd5\x2b\x2b\x9d\x66\x2b\x04\xfa\x5d\x9f\xa4\x84\x41\x19\x0e\xf3\xa1\x4c\x4f\x81\x70\x8e\x25\x7a\x23\x87\xad\xc9\xf3\xd2\xc7\x6a\x2e\x3a\x12\xa8\x7c\x86\xfa\xc6\x0f\xfb\x32\x29\x11\x33\x00\xe2\xe0\x4a\xf8\xf6\xf0\x5c\xc5\x9d\x1a\x1e\x7e\xac\x9b\xf3\x99\x35\x3c\x92\xc5\xac\x0c\xbe\x9e\x66\x94\x28\x77\x2f\xbe\xa5\x71\x18\x7a\xd5\x0a\x75\x18\x07\x71\x70\x25\x64\xd8\xa5\x94\x8d\x35\xd7\xfa\xe5\x2e\xfe\xa9\xe6\xb7\x67\x25\x21\x7e\xc0\xf5\x11\x87\x4d\xf4\x4b\x65\xef\x5c\x3e\x3d\x07\x2b\xe4\x69\x41\x1c\x5c\x09\xe8\xfd\xcd\xeb\x1f\x22\x6f\x17\xb8\xee\x3b\x45\xbd\x8b\xb3\x37\x72\x39\x18\xb1\x54\x1a\x7d\x9e\x94\x77\x71\x97\x37\xfa\x7b\xd6\x45\x44\x5c\x10\x07\x57\x82\x5c\x51\x70\x56\x0e\xf9\x97\x05\x8d\x26\xee\x42\x47\x56\xf7\x58\xdc\x46\x6d\x6b\x29\xf9\xef\x0f\x22\xef\xb1\xcb\xf2\x15\x35\x73\x22\xb6\x42\x20\x0e\xaa\x4c\x3c\x9d\x57\x06\xad\xb5\x27\x49\x61\xb5\x9e\xa7\xe4\x3e\xf1\xdb\xca\x3f\xd9\x83\x8d\x77\x58\xd2\xaa\xe5\xb9\xf2\xb3\x32\xf3\x86\xb4\x52\x34\xb6\x09\x2c\x03\x25\xa1\x9e\x56\x20\x0e\x2e\x85\x5d\x93\xe8\x19\x7e\xd6\x3c\x4b\xf5\x26\x8b\x6e\x11\x11\xa1\xa4\x6b\xc7\xae\x84\x47\xf8\xbe\xe8\x56\xc5\xe8\xa9\x38\xcd\xcf\xa1\xff\x32\x10\x07\x97\x82\xc6\x2b\x93\xdc\xb2\x91\x9f\xb2\xdd\x2f\x77\xf1\x96\x6d\x5f\x3e\xec\x34\xb3\xd9\x1c\x11\xea\x55\xe4\xc4\x6b\xfd\x63\x71\xaf\x0f\x6a\x36\x00\xe2\xe0\x52\x28\xb0\xc7\x7e\x46\x9c\x59\x17\x3d\x62\x75\x75\xfa\x45\xbb\xc9\x27\x07\xd1\xf2\xbf\x7d\xec\x39\xfa\x5b\xcc\x96\x9f\xfa\x44\x3e\x6a\x20\xe2\x82\x38\xb8\x14\x54\x98\x9a\xdc\x77\xd1\x53\x46\x19\xc6\x5f\xfe\xb8\xd0\xa3\xe3\x52\x31\xe0\xe1\xff\xad\xe2\x09\x63\x87\x81\xf6\x53\xe1\x57\xa8\xd0\x9b\x51\x20\x0e\xaa\x4c\x94\x3c\x5d\x4b\x74\x40\xfe\x3b\x49\x0a\x43\xb5\xa8\xd4\x02\x35\x74\xb5\x0e\xd8\x2a\x3b\xeb\x8e\x12\x9e\xf5\xc7\x76\x78\xcd\xcb\xf2\xac\xab\x2d\x95\xcd\x3f\x7c\xd1\xa0\xeb\xf8\x20\x0e\x2e\x05\x16\xcb\xe5\x9b\x9e\x49\xbd\x5a\x5a\xd6\x77\xad\x1a\xe4\x31\xe3\x9b\x99\xa8\xf2\x32\x9f\x5d\xf9\x4c\xa7\x1e\xc4\xeb\x3f\x54\x00\x5d\x5d\x00\x71\x70\x29\x8c\xa2\x2a\x2d\xd7\x1b\x78\x91\x68\xa5\x5f\xf2\x8e\x8f\x6e\xc3\x9f\x4e\xaa\xb5\xa2\x58\xe2\x51\xf4\x9d\x76\x52\x55\xfc\x6b\xb1\x80\x88\x0b\xe2\xe0\x52\x50\x6b\x56\xb4\x31\x0d\x69\xbe\xdc\x49\x1e\x3f\x7e\xed\x80\x2d\xb0\xee\xfe\x0b\x29\x33\xe9\x99\x39\x5f\x2f\xd7\xc6\x9c\x3f\x77\xa0\xf6\x71\x20\x0e\x2e\x05\xf9\x7b\x1f\x7d\x28\xb4\x73\xaf\xc9\xff\xdc\xb9\xf7\x99\xf0\x5b\x54\x2a\x81\xac\x60\x30\xf7\x0d\xa1\xc0\x8f\x1c\xaf\xa5\x74\x17\xa1\xca\x0c\x10\x07\xad\x0a\xa7\xf3\xca\xa0\x3d\xc9\x49\x52\x20\xcc\x69\xb6\xe5\x54\x90\xab\xd7\xb5\x71\x8b\xbe\x47\xa4\xb2\x47\x80\xdb\x93\x6b\xd5\xf8\xd1\xc6\xca\x71\x8b\x30\x85\xa2\x1b\xfa\x95\x81\x38\xb8\x14\x74\x8c\x86\xca\x1e\x90\x31\x56\x2f\x92\x7a\x12\x6a\x6c\xdb\x17\x1e\xdc\x8b\x42\xfb\x3a\x95\x7a\xce\x26\xe4\x0e\xc3\x67\xe9\xb1\x68\xa8\x93\x20\x80\x83\x4b\x41\x59\x2a\xbc\xb7\xd8\xa4\xe6\xc7\xb5\xd0\x50\x41\x0e\xc6\xc1\x58\xf6\xaf\x59\x35\x5e\x5e\x1b\x9b\xe7\x8d\xae\xbc\xa2\xa8\x2c\xe8\x41\xc4\x05\x71\x70\x29\xd0\xa1\x7f\xfd\xa5\x46\x23\xb8\x2a\xb9\xf2\xb7\x83\xba\xb6\xd5\xaa\x36\xf0\xd6\x57\x97\x7d\xec\xa2\xbb\x6d\x2f\xa5\xb9\x28\xd6\xa1\xce\x87\x20\x0e\x2e\x05\x55\x17\xdf\x4b\xf5\x93\x2f\xa8\x43\x5b\x0f\x8b\x82\x4a\x12\x5b\xb1\xb3\x52\x08\x07\xf9\x0d\xaa\x02\x02\x95\x9f\x3f\xba\x2e\x78\x19\x21\x05\x10\x07\xad\x0a\x1e\xa7\xf2\xca\x20\x9f\x75\xb2\x57\x76\xc6\xbd\x6e\x13\xf7\x68\xe3\x32\xfd\xf3\xc6\xf8\x9b\xe5\xa2\xec\x6f\xf3\xd4\xaa\x7f\x93\x72\x48\x5b\x6a\x1a\x11\xd2\x31\xc6\x38\x21\x7c\x27\x88\x43\xf6\xca\x09\x6f\x93\xeb\x74\x6d\x56\xac\x5d\xd5\xe5\x6f\xd1\xd8\xbf\x39\xe7\xe7\x8b\x1a\xef\x2b\xa9\x60\x76\x40\xdb\x9b\x15\x78\xc8\x9c\x83\x88\x0c\xe2\x90\xbd\xb2\x40\xf2\x3a\x2e\x7d\xfb\x48\xa1\x81\x6f\xa8\xab\x34\x47\xce\x3b\x57\x1d\x13\xf3\x57\x0c\xa6\xca\x18\x35\xc4\x9b\x1c\x5d\x0c\x54\x88\xc8\x20\xee\xff\xbc\xf2\xff\xb6\x30\x3f\xf5\xfb\xca\xfe\xa9\x36\xd9\xdb\xe6\x45\xca\xc3\x86\x83\x99\xd6\x55\x91\x25\x9f\x26\x5f\xbb\x2d\x78\x1c\xde\xe4\xcb\x65\x21\xea\xff\x82\xc3\xf1\xaf\x57\x3e\xe8\x61\xdd\x16\x50\x3a\x77\x61\x10\x7b\x6d\xb2\xe5\x0a\xcf\xaf\xa9\x70\xc7\xbe\xd7\xce\xb5\x49\x14\x21\xaf\xa8\xbf\xca\xdb\xcb\xff\x83\x7e\xb5\x6c\x22\xc5\x68\xba\xfc\x4d\x24\x4a\xe8\x79\x50\xf6\x05\xb9\xd2\x74\x07\x55\x55\x1c\xbe\xaf\x5a\xda\x85\x1f\x53\xd0\x2a\x51\xff\x6b\x5e\x19\x34\xb4\x7f\xeb\x95\x91\xbc\xb2\xd6\xba\x53\x7f\xf6\x2c\xf7\xb4\x41\x76\x9b\x91\xcb\x91\x5f\xfb\x9b\xa0\xcf\x59\x99\x3d\x0b\x72\xbe\x7c\x85\xef\xe5\x1e\xbc\x3e\x83\xb3\xc7\x28\xb9\x66\x64\xaf\x4c\xea\x46\xb7\xf8\x34\xa8\xc0\x5a\xf7\x85\x90\x9e\xd3\x8f\x5f\xba\x5d\xc1\x16\xde\xbd\x0a\x86\x93\xf9\xc1\xa3\x75\x7e\x6a\xbd\xba\x67\x72\xc0\x8b\xec\x95\xe3\xf7\xaf\x66\xbd\xef\x0b\xf3\x34\x36\x21\xdc\x90\x55\xa6\xb4\xbd\x24\xc1\xbc\xff\xeb\x47\x21\x65\xbf\xc3\xfd\xce\x67\xcc\xb7\xc6\xcf\x64\xb4\xc8\x5e\x79\x44\x69\xbb\x9f\x77\xf9\x12\xf3\xcc\x75\x4b\x83\x77\x9e\x3f\xb2\x1e\x3c\x21\x73\xfa\x7b\x64\xab\xb1\xe4\xee\x78\x55\x3b\x85\xe1\x4c\x26\x59\x0a\xd9\x2b\x13\xe2\xb4\xb0\xbf\xbf\x4e\xce\x29\x1e\xc1\x43\x2e\x7e\x98\x37\x59\x10\x54\x9c\xa0\x7e\xfb\x6a\x43\xe7\x95\x22\x6b\xb2\xe6\xbe\xa9\xb3\x3b\x57\x06\x88\xe8\xa4\x04\xa8\xb9\x8d\x5f\x81\xd1\x51\xea\x81\x39\x24\x1c\xe1\x86\x7d\x8b\xec\x35\xbf\xe3\xee\x8f\x8f\x3f\xbe\x64\xc9\xb0\x07\x49\xe7\x09\x33\x22\x16\x7e\x10\x07\x4f\x80\x82\x7f\xbf\xb3\x4a\x9f\xff\x2c\x2e\xbf\x4f\x24\xa7\x1a\x3e\xdc\x76\x49\x32\x2a\x65\xac\x6a\x09\xdf\x8e\x32\xc8\x88\x9c\x2e\xc5\x07\x11\x17\xc4\xc1\x13\xe0\x9e\x6d\xc5\x6c\xf5\xe2\x92\xd3\x6b\xc2\xcb\xde\x84\xc2\x2f\xbf\xd7\x74\x6e\x8a\x92\x88\x4d\x5f\x45\x6d\x32\x48\x4e\x57\xb6\xaa\x44\xc4\x05\x71\x41\x32\x28\xfe\xff\xc6\x55\xc2\xb2\xbe\x58\x3c\xa8\x45\x10\xa4\x31\x78\x3c\xec\x78\x7b\xc7\xa2\xef\xd2\xc1\xb3\x20\xae\xf6\x55\xc9\x2e\x9a\xb0\x9f\xf4\x6f\x11\x71\x41\x5c\x90\xcc\xff\x56\xb2\x98\xd0\xbe\x09\xf0\xdd\xb0\x5a\x89\x24\xa2\x8f\xee\x24\xf7\xf3\x56\x2d\x29\xe6\x64\x77\x71\x7c\x2b\x2b\xda\x9d\x6a\xfd\x74\x2c\x0b\xe1\x95\x41\x1c\x54\xaf\x7c\x2a\xaf\x0c\xfa\x5d\x9f\xa4\x04\x1e\xef\x6a\x21\xb5\x9c\xf3\x8d\xbc\x8d\xf1\x55\x31\x4e\xaa\x77\xde\xac\xe7\x8d\x7e\xae\xce\x35\x40\xad\xbd\x50\xc5\xdd\x58\xd2\x8d\x98\x01\x10\x07\x57\xc2\xd6\x52\x2a\xe6\x9d\x5b\x5f\x19\x8b\x2f\xe4\xab\x67\x0d\xb5\xab\xbd\x1f\xc8\xd5\x93\xce\x19\x5e\xa6\xbf\xc3\x15\xf1\x9b\x9c\x18\x7a\x96\x13\xc4\xc1\x95\xf0\x35\xe8\x0a\x51\xd8\xed\x6b\x8a\xb2\x39\xb3\x42\x3c\xbd\x8a\xfa\x1e\xb3\xcd\xe4\x92\x36\x62\xf1\x65\xab\xe6\xec\xbf\xc8\xbf\x30\x23\xe2\x82\x38\xb8\x12\x50\x6e\x24\x32\x0e\x0d\xaf\x75\x77\x9d\x93\x1c\x7d\x75\xe3\xdd\x9d\xf0\x90\xe0\xb0\xcf\x2c\x41\x77\x33\xc4\x92\x68\x8e\xeb\x48\x30\x10\x71\x41\x1c\x5c\x09\x22\x98\xc7\x4f\xa9\x5d\x26\x58\x52\xf9\xd4\xa7\x15\xbc\x71\x36\x52\xb2\x35\x30\x05\x16\x79\x5d\x96\x19\x83\x33\x2e\x5d\xf2\xb7\x47\x6c\x85\x40\x1c\x54\x99\x78\x3a\xaf\x0c\x5a\x6b\x4f\x92\xc2\x71\x0b\xe7\x88\x81\x73\x88\x23\x9e\x04\xfd\x2e\xcd\xf0\xe4\xd2\xc3\xb5\xde\x2c\xf3\xab\xc9\x28\xd3\x24\x49\x55\xa8\xc3\xfe\x12\x88\x29\x00\x71\x70\x29\x84\xf6\xb1\x3d\x23\xdd\xf3\xdd\xba\x12\x8d\x57\x29\x1b\xf6\xc6\x8d\x64\xd6\xf5\xdb\xa7\xe6\x35\xac\x68\x6c\x8a\x45\x53\xce\x4c\x0a\x44\x5c\x10\x07\x97\x02\x2d\xb1\x39\xda\xd7\x37\xa4\x49\x58\x76\x7f\x26\xb9\x1d\x6c\x3d\x5a\x23\xfe\x88\xf7\x95\x54\xfd\xa8\xd6\x22\x7c\x4c\x5f\x3c\x6e\x87\x88\x0b\xe2\xe0\x52\x70\x64\xb2\x63\xf6\xc1\xb9\xa8\x4a\xfe\x87\x7f\xbe\xd9\x73\xbf\xc0\x6a\xa2\x6c\xa8\xe0\x76\x5d\x4e\x85\xf5\x9c\xd5\x8f\x46\xbd\x03\x44\x5c\x10\x07\x97\x82\xdd\xaf\xbf\x49\x1e\x89\x44\x03\x23\x54\xcb\x23\x3a\xfa\x16\x0f\x9e\xb6\x8d\x72\x4b\x77\x27\x0e\x0f\x7f\x39\xef\xc7\xe7\x40\xbf\x8c\x90\x02\x88\x83\x2a\x13\x4f\xe7\x95\x41\xf9\xef\x24\x29\x4c\xcd\xe0\x75\x63\x84\x14\xac\x90\xfc\x5c\x1e\x5f\x97\x55\x1e\x4a\x39\x72\x11\x5b\xdb\x29\xae\x1b\x4b\xd5\x6d\xc0\xc4\xab\xf6\x87\xfa\x3f\x03\x38\xb8\x14\xc6\xe3\xcc\x2c\x6c\x66\x74\xa6\xb5\x1e\x5a\x9b\xcf\x2c\xa1\xa5\xd7\xfc\xd9\x08\x78\x38\x2f\xba\xff\x7d\xb5\x8d\x03\xaf\x81\x76\x0c\x11\x17\xc4\xc1\xa5\x70\xee\xfc\x72\xcc\x83\xd1\xd5\xca\x40\x6b\x92\x5f\xec\x2c\xb1\x57\xb0\xae\xfd\x8d\xb9\xf6\x76\x22\x59\x38\x45\xb5\x5e\x1b\x77\x6c\x14\xba\xba\x00\xe0\xe0\x52\xa8\x24\xeb\xc6\x2d\x76\x25\x28\x7d\x9b\x2d\x6f\xae\xa3\x10\x54\x6c\x13\x85\x4e\x3d\xc1\x12\xfa\xf1\xbe\xc5\xca\x6d\x65\x69\x45\x7d\x44\x5c\x10\x07\x97\x42\x70\x9f\x4a\x81\x49\xce\xc8\x84\xe2\x0a\x97\xaf\xab\x0f\x11\x6e\xe0\x05\x9e\x23\x01\x19\x9d\xaa\xa8\xa4\x5a\xee\x3f\xae\x38\xba\x08\x29\x80\x38\x68\x55\x38\x9d\x57\x06\xed\x49\x4e\x92\x42\x06\x1e\x05\xe5\x4a\xe7\x05\x11\x53\xd9\x64\x5c\xe2\x37\xd5\xf4\x53\x71\xca\xad\x32\x39\x8d\xfa\x56\x86\x97\x82\xbe\xaa\xe0\x42\x5b\x05\x10\x07\x97\x42\xd7\x40\x36\x59\xf6\x63\x5a\x9f\x37\x39\xd1\x95\x1d\xef\x66\xbc\xfa\x48\x07\x1f\xbe\x23\xf8\x4c\x81\xa7\x92\xaf\xb1\x27\xab\x06\xbd\x8e\x0e\xe2\xe0\x52\xe0\xeb\x10\x1a\xaf\xb1\xbd\xf7\xd0\x93\x57\x10\x8d\xb8\xae\x8a\x86\x96\x73\x58\xf3\xc1\xf1\xb5\xe9\xaf\x65\x9d\x73\x42\x2e\x6b\x5c\x88\xb8\x20\x0e\x2e\x05\xbf\xb9\xa1\x82\x1d\x9b\xc4\x6a\x3a\x7e\x29\x3d\xcb\x92\x57\xc5\x12\x3e\x02\xde\x2d\x0b\xd7\xf5\x46\x36\xb9\xfc\xc4\x84\x8c\x69\x11\x71\x41\x1c\x5c\x0a\xc9\x5e\x2a\x0f\x98\x8d\xbd\xb0\x59\x82\xdb\x35\x73\x2f\xdc\x1f\x5e\xe1\xb7\x7e\x24\xa5\xf1\x83\x58\x37\xaa\x42\xf3\xee\x1a\xc1\x31\x42\x0a\x20\x0e\x5a\x15\x4e\xe7\x95\x41\x3e\xeb\x64\xaf\x4c\xd5\xf2\x83\xaf\x94\x7f\x97\x7e\x10\x6d\x34\xe4\xe9\xca\xec\x80\x87\x5e\x64\xe8\x98\xbb\x67\xdd\xf2\x07\x3b\x75\x33\x85\xf4\x3a\x84\xef\x04\x71\xc8\x5e\x59\xab\xcb\x0b\x35\xd0\xe7\x85\xb1\xad\xad\x9d\x7e\xfd\xc8\xf4\x60\xe1\xc2\xb8\x45\x93\x73\xd5\xd6\x4e\x7b\xfc\x63\x02\x93\x60\x77\x44\x64\x10\x87\xec\x95\xdb\xed\x73\xd6\x45\x5c\xfe\x3c\xb7\x2f\x39\xb7\x6a\xfd\xb5\xe9\xe9\x4b\x16\x81\x31\x8a\x43\x12\x76\xf7\x7b\x7e\x01\x78\xe2\x11\x8d\x88\xc8\x20\xee\xff\xbc\x32\x0a\xea\xbf\x91\x4f\xfd\xbe\xf2\xa5\xf3\x74\xe9\xe6\x8e\xb4\x7f\x57\x32\xaa\x4c\xb7\x85\xe5\xc6\x78\x66\x8d\x92\x86\xc3\xab\x52\x28\xab\x63\xa5\x13\x64\x70\xdb\xff\xf5\xca\x81\x03\xb3\x52\xc5\x13\x5e\x65\xed\xef\x3f\x93\x8d\x04\xea\xbe\xe8\xdc\x30\x37\x77\xf6\xda\x6d\x75\x20\xbf\x26\x77\x40\x60\x98\xf1\xef\x6e\xfb\xe9\x6f\x8f\x81\xf3\xc6\x4e\x12\x06\xda\x4d\x35\xc5\xa3\x33\x9a\xac\x37\xf2\x25\x18\xa9\xfe\x78\x56\xca\x70\xbd\xdc\xfd\x48\xf5\x5f\xf3\xca\xa0\xa1\xfd\x5b\xaf\x8c\xe4\x95\x67\x22\xbd\xe5\xee\xb4\x6f\xca\xdd\xc5\x9f\x2a\x89\xeb\x2f\x46\xf5\x58\xe4\xef\x37\xb8\x9d\x16\x5f\x9e\x5b\xa3\xc0\xcb\xdd\x5e\x7a\x26\x47\x9e\x7c\x48\x36\xae\xff\x1d\x03\xc5\x9b\x29\xa5\xca\x15\xac\x03\xab\xce\x84\xc6\xde\x30\x2f\x6f\x3f\x02\x9b\xf7\x6d\x97\xcd\xcd\x94\x03\xd6\xcb\x51\xce\xe4\x80\x17\xd9\x2b\x4b\x48\xf8\xee\x8f\xf0\x57\xd3\xa7\x07\x05\x5a\xa8\xea\xe8\x04\x38\x3e\xfe\x7a\x38\xeb\xd8\x9e\x8e\xad\x9a\xfb\x18\xb3\xc5\xa0\xea\x4c\x46\x6b\x8c\xf4\x67\xc9\x02\xd4\xee\xbb\x3b\x78\x2e\xa7\xd0\xe3\x32\x5d\xd7\xec\x58\xa7\xd1\x10\x65\x7e\xb8\x53\xba\xef\x61\xeb\xf8\x7e\x22\xe0\xa6\xe9\x99\x8c\x16\xd9\x2b\xef\x78\x38\x2e\xd8\xf3\x6d\x12\x44\x93\x93\xa4\xdf\x18\xcd\xfa\xd0\xfb\xf4\xdb\x48\xa2\xb1\x62\x6c\x15\x16\xbb\xef\xdb\x0a\xa2\xad\x33\xf3\xca\x20\x11\x9d\x58\xa5\x3a\x3b\xfc\x62\xd4\xa4\x37\xd9\xbb\x05\xc7\xc1\x8e\xc5\xa8\xc1\x93\x15\xaf\x92\x7c\x24\xfb\xcd\xc4\x64\x13\x4d\x95\x03\x99\x09\x54\xa5\x0a\xe0\xe0\x09\x90\x51\x77\x05\x2d\x5a\x24\xd2\x47\x6a\x5c\xc7\xc8\xc1\xda\x8b\x71\xe7\xc2\x17\xd5\xf5\x15\x21\x1d\x8a\xa7\x1a\x8d\x87\xa1\xb2\xee\x88\xb8\x20\x0e\x9e\x00\x31\xb2\x57\xb4\x50\x08\x49\xdb\x13\x76\x83\x07\x3e\x72\x0e\xa4\xfe\x72\xe2\x8b\xbf\x6f\x9a\x1c\x30\x66\x5f\x82\xa1\xe4\x54\xbc\x85\x88\x0b\xe2\xe0\x09\x90\x7f\x62\x0c\x23\x5e\x97\x7d\xe8\xb6\x23\x4d\x88\x4d\x8e\xf1\xd3\xf9\x3b\x0d\x66\x97\x45\xe6\xd4\xbc\xcd\x7e\x71\xd1\x07\x3a\x86\x20\xe2\x82\xb8\x20\x99\xff\xbd\x9d\x23\xf7\x21\x7d\x67\x31\x2e\xea\xab\x85\x6b\xf8\xc7\xa0\x4b\x3c\x91\x1a\xfe\x5d\x71\x05\xde\xa9\x25\x39\xd4\xac\x9f\xe9\x0e\x29\x03\x10\x5e\x19\xc4\x41\xf5\xca\xa7\xf2\xca\xa0\xdf\xf5\x49\x4a\x08\x7e\xd9\x68\x1e\x6f\x40\x40\xa0\x1c\xe0\x43\x1b\xb1\xe5\xbd\xa1\xd0\xd6\x2a\x23\x46\x5d\xf8\xcc\xc9\x9e\x30\x7d\xcb\x76\x1d\x6a\x85\x02\xe2\x90\xee\x60\x1f\xa8\x3c\xe9\xde\xd6\x61\x6d\x2c\xe5\xd7\x24\x9a\x90\xdd\x5c\x4b\x17\xce\x3d\xde\x79\x3c\x29\xb4\x58\xb8\x1f\x37\x95\x95\x0b\xdd\xc1\x06\x70\x70\x25\xe0\x9a\xbd\x33\x78\xfe\x4a\x64\x4f\x79\x2e\x99\x49\x29\xb9\x5e\xca\x7b\xee\xf6\x6d\x0b\xbf\x57\xa8\x02\x1d\x22\x6f\xc3\x49\x75\x3d\x10\x71\x41\x1c\x5c\x09\xed\x29\x07\xf8\xf7\x96\x52\x5d\x1b\x44\x85\x6b\xdc\xf9\xb5\x3d\x0d\xbb\xab\x6d\x8b\x8f\xd6\x6f\xa4\x6a\xf9\x44\xf5\x8e\x3e\xaf\x87\x2a\xe2\x01\x1c\x5c\x09\x76\xaf\xa4\x08\x96\xb0\xaa\xc5\xf3\xd5\x9b\x25\x9b\xbc\x93\xd5\x1e\x33\xeb\x18\x3d\xeb\xbe\x1a\x3f\xda\x4a\x70\x24\x7a\x85\x3c\x0a\x32\x48\x00\x0e\xaa\x4c\xe4\x3b\x5d\xbd\x32\x60\xad\x3d\x49\x0a\x06\x6d\xe5\x0a\x2d\xd2\x7e\x77\xe6\x37\xd8\xb2\xd0\x36\xa8\x43\x2f\xef\x2d\xff\x25\x57\x94\x0a\x55\x2b\x2f\x93\x7c\xa1\xaa\x0d\x19\x0e\x10\x07\x97\xc2\x60\x80\x55\x76\x84\x11\x47\x8e\x7b\xab\x48\xdc\x33\xc1\x95\x85\x10\xfb\xea\xfa\x4b\x99\x0d\xa3\x75\xbd\x22\x75\x72\x52\x3a\xd9\xd0\xd5\x05\x00\x87\x74\x82\xa4\x2a\x95\x4a\x99\xc4\xd6\xca\x33\x41\x30\x75\x5c\x2c\x64\xc2\x7f\x97\x7f\x7c\xec\xee\xc4\xd5\x12\xcb\xf1\x8c\xba\x2c\xf5\x64\xe8\x04\x09\xc0\xc1\xa5\xf0\xba\x52\x70\x39\x2e\x8e\x46\xfb\xab\x4a\x8b\xf8\x05\x51\xcb\x8a\xdd\xf3\xe3\x0a\x79\x7c\x57\xa3\x8a\x4d\xb1\x6d\xe3\x1e\xaf\x40\xa5\xf6\x20\x0e\x2e\x05\xbf\xdf\x89\x7c\x63\x7f\xfd\x6d\x27\x83\x7c\xb9\x1f\xa4\x74\xf1\x6f\xca\xf3\xfd\xe1\xa3\xc8\xae\x3a\x17\x93\xa5\x8d\x52\x7f\x1f\x05\x21\x05\x10\x07\x55\x26\x9e\xce\x2b\x83\xf2\xdf\x89\x5e\x99\x58\x4b\x22\x42\xd2\xb7\xf2\x52\xe4\x52\xf1\x5b\x5b\x5e\xfc\xfb\x1a\xb9\xb8\x0b\x45\x8f\xa8\xce\xdd\x79\x74\xc1\x86\x3f\x3f\x02\xf2\xca\x00\x0e\x2e\x85\x9e\xc6\xbb\x39\x4f\xac\xec\x78\x8c\x6e\x16\xdf\x17\x9e\xb5\x57\x77\x5b\x08\x69\x50\xb7\xc3\xe7\xe0\xdb\xb8\xd7\xc1\xd6\x1f\x00\xbd\x93\x00\xe2\xe0\x52\xe8\xb4\xf5\x37\x3b\xc4\xa8\xbc\xb7\x76\xd8\xbb\x94\xe5\x70\x29\x76\xee\xcd\xc5\x5d\x5c\x49\xfd\x5c\x29\xa1\x81\xed\x66\x3c\x3f\xe8\xbf\x0c\xc4\xc1\xa5\x60\x85\x39\x2d\x76\xdf\x44\xe2\x97\xf3\xeb\x0b\x1f\x45\x7e\xad\x71\x6b\x6e\xda\xff\xdd\xe8\x77\x7e\x68\xf4\x9d\x3e\xf3\x2b\x6d\x0c\xf4\x99\x07\xc4\xc1\xa5\x40\x45\xc2\x9b\xd4\x75\x41\x1c\xc7\x19\x55\xd3\xe6\x97\x70\x77\x90\xe6\xcd\xc9\x9c\x8c\xed\xec\xdc\x96\x54\x7d\xae\xa3\x14\xfb\x41\x84\x14\x40\x1c\xb4\x2a\x18\x9f\x4a\x0a\xa0\x3d\xc9\x49\x52\x10\x76\xe9\x3a\x7c\x33\x5c\x8e\xfa\x2e\x32\xad\x65\xaa\xab\x93\xfb\x5e\x07\x9d\x5a\x5a\x77\x81\x4b\x9a\x55\xd1\x5a\x1f\x11\x29\xd4\x83\x0b\xc4\xc1\xa5\xe0\x68\x52\xa0\x68\x18\xc2\x70\x5e\xef\xf9\x22\x9b\x5b\x9b\x54\xef\x30\xd5\xf6\xb9\xb5\x1b\xf7\xca\xab\x97\xed\x4d\xcc\x4b\xde\xeb\x42\x5f\xa4\x00\x1c\x5c\x0a\x9f\xdc\x8b\x85\x7c\x97\xd6\x7a\x26\xa4\x7d\xfa\x33\x4c\xae\xdd\xef\xfd\x61\xe9\xf1\x1a\x33\x6c\x55\x1b\xcb\xab\xfe\x7b\x5f\x8f\x20\xb4\xb5\x01\x70\x70\x29\x50\x9b\x18\x56\x79\xeb\xf5\x98\x9b\x19\x53\x1b\x3d\xc1\xb7\xd0\xde\x95\xbb\x6a\x68\x76\x2d\xeb\x59\x23\x33\xa6\xd6\x90\xdf\x20\x94\xd0\x40\x1c\x5c\x0a\xd4\x35\xf7\x9c\x7a\xf7\xdf\x78\xd7\xd8\xe7\xa3\xd7\x57\x07\xd9\x7b\x12\xa0\xe8\xdc\x55\xb8\x48\xbd\x26\xa2\x58\x78\x5b\x65\x5b\x1d\x21\x05\x10\x07\xad\x0a\xa7\xf3\xca\x20\x9f\x75\xb2\x57\x96\x29\x1d\x1f\x0d\xa8\x32\x2f\x26\x15\x7a\x26\xe2\x6e\x7e\x75\x28\x33\xff\xe5\xe7\xc8\x75\xa9\xcb\x32\x01\x38\xee\x13\x56\xaa\x50\x1f\x6c\x10\x87\xec\x95\x0f\x3e\xf6\xe4\xd9\x4a\x8a\xe2\xa6\x7f\x65\x98\xb4\x95\xfd\x7c\x7d\x42\x48\xb6\x51\xf2\x9d\xa8\x51\x03\x0e\x85\xd7\xbd\x4e\xcb\x1d\x44\x64\x10\x87\xec\x95\x9b\x5c\x93\x77\x79\x42\xef\x07\x63\xac\xf4\x6f\x88\x0e\xb0\x6f\x5f\xd7\xba\xc0\xe8\x2a\x62\x2e\xf8\xd3\x9d\x47\x92\xfa\x8f\x38\x13\x22\x32\x88\xfb\x7f\x5e\xf9\x7f\xa4\x76\xea\xf7\x95\x8f\x08\x69\x54\x74\x71\xea\x2f\xdf\xb2\x7b\xb5\xc7\x89\xf7\xe8\x4d\xc3\x66\x87\x73\x38\x55\xef\x9c\xf2\xad\x25\x37\x3c\x32\xc3\x83\x7f\xbd\x72\x69\x66\xca\x32\xbd\xd5\xf9\x3f\x07\x1d\x0f\x69\x71\x1b\x5d\x03\xb9\xfd\xce\x0f\x97\x3d\xd0\x78\xf0\x0a\xff\x21\x1d\x69\xef\x33\xf2\x7f\x50\xcc\x18\xf6\x5e\xec\x8b\x35\x0d\x4b\xc7\x53\x37\x7e\x14\x96\xcc\x86\x5d\xa6\xb2\x1e\xcc\x24\x95\x10\xed\x40\x29\xe9\xde\xc6\xf8\xfc\x5f\xf3\xca\xa0\xa1\xfd\x5b\xaf\x8c\xe4\x95\xc7\xf9\x36\x72\x38\xf0\x6a\x85\xf2\xda\x2b\x7a\x3e\x29\xac\x86\x8b\x3d\x2a\xb9\x6f\xbd\xca\xfe\xea\x68\x62\x78\xd3\x83\xa7\xd8\xf5\x4c\x8e\x3c\x91\xbd\x32\xee\x79\x8c\x1c\xc5\xf8\x0a\x6b\xfc\x06\x2e\x32\xb5\x96\x67\xe9\xdc\x07\x18\xcf\xc8\xb0\x9a\x92\x8f\x2e\x91\x8a\x26\x51\x05\xe7\x9f\xc9\x01\x2f\xb2\x57\xb6\x66\xba\xf4\x96\x87\x99\x50\x1c\xef\xca\xa5\x8a\xcc\xb2\x0b\x8e\xce\x3d\x2d\x71\xf1\xb4\xde\xa6\xdb\xcf\x47\x12\xba\xc6\x8a\x7a\xcf\x64\xb4\xc8\x5e\x39\x54\x52\x2e\x6c\xf1\xf1\x60\x65\x71\x6b\xb6\x46\xd3\x65\x4e\xeb\x03\xb2\xa4\x67\x4f\x19\xfd\x1b\x45\x69\xd6\x18\x14\xee\xb0\xde\x3a\x93\xd1\x22\x7b\xe5\x17\x18\x8b\x5a\x61\xe7\x5c\xea\x0b\x74\x7f\x2a\x9e\x27\xa4\xfc\xcd\x3f\xb8\xd3\x7f\x57\xa4\x6c\x6c\x34\x5c\xe2\xc3\x45\x34\x9d\xb8\x33\xf3\xca\x20\x11\x9d\x94\x00\xf3\x70\x66\x1e\x3c\x95\xd6\xc2\x11\x6d\xf0\xbd\x3e\xda\x2a\xd9\x82\xfa\x29\xa7\xb2\x76\xe0\x92\x8c\xaf\xcd\x5a\xbb\x80\x38\x2d\x54\x37\x06\xe2\xe0\x09\x50\xab\xda\xc1\xef\xc3\x2d\xf6\xf9\xcd\x55\x53\xcc\x14\xf7\x8f\x16\xcf\xd3\x66\x7a\xea\x8c\x5b\xb1\x2a\x53\x82\x2d\x0c\x08\x35\xa1\xd7\x7a\x41\x1c\x3c\x01\x9e\x7f\x6c\x65\xf9\xec\xfa\x28\xe6\xeb\x32\xff\x2f\x74\x0c\x7b\xd9\x8f\x1c\x95\x19\xe6\x0a\x48\xcc\xe7\xbb\x8b\xdf\xba\x9c\xdb\x31\x44\xc4\x05\x71\xf0\x04\xd8\x50\xd6\x44\xad\x36\x12\xc2\x5f\xa1\xaa\x9e\x63\xd2\x7b\x75\xe3\x52\x7f\x33\x93\x05\x46\x32\xd6\xc6\xaf\x79\xb3\xd4\x11\x7e\x54\x44\x5c\x10\x17\x24\xf3\xbf\x5f\x1c\xdf\x0a\xea\xdf\x10\xe7\x0a\x4f\xd8\xba\xf6\xe6\xa2\x50\xc0\x5b\xad\xd7\x1f\x0d\x84\xe9\xa2\x95\x52\xa2\x35\x92\xe2\xe9\xf8\x8c\x86\x10\x5e\x19\xc4\x41\xf5\xca\xa7\xf2\xca\xa0\xdf\xf5\x49\x4a\x40\xff\x9c\x9c\x72\x33\x11\x7b\xd4\xe8\x9a\x4e\x40\xc3\xc4\xc5\x7c\x54\xce\x54\xd2\xa0\xfe\xd6\xa5\x50\x49\x72\x8e\x8b\xa9\xba\x73\xd0\xdd\x63\x00\x07\x57\x82\xdb\xcc\x2b\x7a\xd3\x8f\xcb\x3d\x5f\xfa\x4d\x4c\xb0\x09\x31\x88\xc6\x8c\x05\x23\x8b\x68\x08\x35\x0a\xfb\xf8\xa3\x95\x7e\xa1\x43\xe7\xca\x20\x0e\xa9\x23\x3a\xc1\xd8\x12\x1a\x26\xeb\xb9\x5a\x85\xd0\x5d\x5d\xef\x32\x5c\x87\xca\xa5\xaf\x24\xa2\x2e\xd6\xb9\x07\xbf\x1b\xd5\x8d\x44\xa1\xee\x71\x20\x0e\xae\x84\xb8\xa9\x2b\x5e\x9f\x36\x05\x24\xd0\x37\x37\xcd\xc8\xbd\xff\x0a\x8a\x86\xfe\xd1\x77\x89\x50\xbc\x2b\x82\x11\x10\xe8\x74\x8d\x9d\x13\x11\x17\xc4\xc1\x95\x80\x5d\x89\xcf\x8c\xeb\xe3\xd3\xf5\xbe\x47\xa4\xbf\xf2\xfc\x62\xb2\xe7\xf3\xda\x41\xde\x3f\x7b\x37\xb2\xb4\xc7\x2a\xee\xf1\x70\x51\x20\xb6\x42\x20\x0e\xaa\x4c\x3c\x9d\x57\x06\xad\xb5\x27\x49\xa1\x71\xed\x55\x47\xfc\x88\x4e\xaa\xff\x7c\x16\x9b\xe1\x5a\x9d\xcd\x50\x4f\xec\xc8\xef\x76\xeb\x34\x1e\x3d\x9a\xf9\x01\xd6\x44\xa8\x07\x17\x88\x43\x7a\x33\xaa\x49\xc7\xe4\x92\x5f\xa9\x29\x51\x63\xae\x58\x7d\x93\x73\x3a\x43\x2e\x1d\x56\x27\xba\x86\x40\xc8\xdc\x17\xfb\xf8\xe2\x4a\xa8\xd9\x00\x88\x83\x4b\xe1\x5e\x1f\x1d\x5f\x6b\x57\x61\xfb\x91\xf6\xc7\x23\x93\x9b\xd8\x77\x47\xc8\x65\x22\x1f\xbd\x96\x63\x58\x45\x0b\xbc\x93\x2e\x9c\x0b\x1d\xfa\x81\x38\xb8\x14\x1a\xdf\xb4\xb2\x7b\xc7\x75\xc5\x54\xe1\x61\x08\x0f\x15\x5e\x8f\x93\x27\xbd\x32\xcf\x3f\xf6\xe9\x39\x95\x10\xbf\x4d\xc4\x13\x6a\xa8\x0e\x1a\xc4\xc1\xa5\x90\xc8\x3c\xbe\xe8\x3c\xe8\x14\x89\x51\xc4\xeb\xe8\x79\x31\x79\xe7\x9b\x77\xcd\xdd\xcc\x97\xd9\xd1\xdc\xb7\xea\x02\xf4\x03\x0f\xd5\xa0\x37\xa3\x00\x1c\x54\x99\x78\x3a\xaf\x0c\xca\x7f\x27\x49\xe1\x3b\x4d\x5b\xc5\x08\x11\x5e\xa1\x26\x37\xde\xdc\xda\xcf\x2c\x4d\xa5\x17\x3d\xcc\x83\x7f\xa5\x43\xd6\xd9\xfa\xd6\x68\x62\x9e\x41\xdd\x06\x40\x1c\x5c\x0a\x1f\xd0\x9e\xf4\x4e\x7a\xb1\x5e\x90\xbd\x48\x2c\x61\xc2\x82\x76\xb3\x72\xf2\x47\x2a\x96\xd4\x48\xa3\xb0\xd0\xd4\xf6\x1b\x26\x13\xe8\xfd\x05\x10\x87\xf4\x5e\xf1\x52\xa2\xb7\xed\x96\x97\x19\xbe\xd4\x37\x94\xa1\xa3\x78\x65\x3e\x3d\xf6\xaa\x00\x9d\xbb\x3e\xae\x98\xac\xb6\xec\xe1\x2d\xd0\x55\x00\x10\x07\x97\x42\x98\xbc\x24\xd1\x6a\x9f\xab\x9a\x81\xf2\xdb\x2f\x77\x35\x6d\x97\x77\xf6\xac\x0d\x53\x2e\xe0\x30\x87\x17\x79\x2b\xb4\x0c\xef\x7f\x45\xc4\x05\x71\x70\x29\x3c\x5b\xd4\x77\xf3\xf9\x38\x64\xef\x3f\xaa\xcb\x88\x76\x2f\x20\x9a\xf5\x8a\x3d\xd3\x52\x4b\xd1\x8f\x77\x29\xe2\x33\x31\x8f\xd7\x33\x10\x52\x00\x71\xd0\xaa\x70\x3a\xaf\x0c\xda\x93\x9c\x24\x85\x50\xff\xe3\x1d\x6a\x6c\x0e\xb2\x2d\x5b\x65\x77\x4d\x11\x61\x13\x6c\x85\x28\x72\xdf\xce\xa9\x0d\xd4\x49\xb7\xda\x1e\x13\x25\xa8\xcd\x1b\x88\x83\x4b\xa1\x6f\xe5\x9d\xce\xd3\x77\x9b\xf2\x03\x37\x76\x09\x8e\xb6\xef\x5f\x4c\xb2\x89\x8e\xc7\xb9\x86\xbe\xab\x3b\x39\xa6\x92\xeb\xd1\x01\x95\x3f\x81\x38\xa4\xf7\x8a\xdd\x57\x1e\xfc\x29\xea\x3e\x48\x50\x22\x98\x51\x7c\xf6\xe6\x3d\xf6\x6d\x57\x47\x81\x2f\x16\x8c\x9a\x06\x8e\xbc\x32\xd8\x37\x62\xa0\xf2\x01\x00\x87\x74\xc5\x20\xba\x31\x54\xef\x1d\x8f\x3f\xaf\x83\x21\x17\x73\x6f\xf0\x10\xe6\x87\x74\x46\x2e\xce\x84\xb1\x07\x51\x41\xbf\xb3\xdd\xae\x40\x9f\x8f\x40\x1c\x5c\x0a\x5f\x38\x95\x23\xa7\xba\xd6\x34\x99\x12\xf5\x08\xd8\x26\xac\x3c\x9b\x3a\x2d\x74\x27\x7b\xc4\x2e\xc6\x85\x59\x11\xdc\xba\xfb\x70\x15\x21\x05\x10\x07\xad\x0a\xa7\xf3\xca\x20\x9f\x75\xb2\x57\x66\x61\xb7\xf6\x8e\x1a\xc0\x50\x1c\xfd\xfe\xb6\x3f\xec\xe1\xce\xf5\xa1\xdb\x37\xae\xa7\x67\xb9\x0a\xe6\x10\xb3\xb0\xe4\x33\xb0\xcb\x23\x7c\x27\x88\x43\xf6\xca\xbc\x83\xb7\x5f\x2b\xb1\x4b\xfc\x71\x5b\x66\x9d\x7d\xc9\x2b\xd4\xfc\xad\xa1\x5b\xf2\x7d\x7c\x71\xd6\xa8\x96\x62\x9f\xe4\x75\x63\x13\x44\x64\x10\x87\xec\x95\x1f\x1f\x6d\xe4\x76\xeb\xda\xa7\xe8\x91\xd8\x3c\x3e\x3f\xdf\x43\xa6\x73\x67\x3a\xfb\xb0\xb7\xad\xa9\x6b\xf2\x28\xbd\x76\xa7\x50\x1b\x11\x19\xc4\xfd\x3f\xaf\xfc\x3f\xd7\xe7\x4f\xfd\xbe\x72\x70\x58\xa1\x11\x4f\x31\xf3\x88\xfe\x85\xc6\xad\x01\xfa\xd5\xf2\xb7\xbf\xd8\x5e\x85\x89\xcb\x8c\xad\xec\x0e\x09\x31\x58\x46\xc9\xff\xeb\x95\xcb\x1f\x1d\x61\x30\x16\x7e\x4f\x73\x3d\xa6\x42\xbb\xa7\x61\x40\x88\xc6\x7c\x6e\xe0\x8e\x52\xac\xeb\x5a\x51\x4f\x68\xf4\x87\x97\x98\xff\xa0\x25\x7a\xc2\x28\xa4\x1c\x4f\x30\x63\x3f\x3e\x7e\x2e\xc6\xf4\xa8\x38\x50\x64\xc4\x57\xa5\x7f\x57\x85\x72\x40\xe3\x85\xc1\xf5\x85\x9d\xff\x9a\x57\x06\x0d\xed\xdf\x7a\x65\x65\xb8\x9f\x92\x79\xd8\x7d\x30\xdd\x65\xe7\x27\x8d\x8a\xc5\x9b\x7d\x34\x5e\xf1\xdb\xd8\x26\x85\xd5\x96\x5f\xe8\x2e\x5f\xf0\x52\xed\x1d\xcd\xd1\x33\x39\xf2\x44\xf6\xca\x57\x7e\x11\x48\x8a\xb9\x73\xbc\x58\xe4\x9a\xe0\x53\x2b\xf4\xc4\xc9\x7b\xac\x18\x17\x88\x25\xb2\xda\x26\x69\xe7\x36\xea\x5d\xef\x74\x26\x07\xbc\x37\x90\xfe\xac\xe9\x93\x2e\xfa\x80\xdf\x45\x3b\x69\x64\x26\xbf\x8e\xf0\xb3\x16\xef\xcd\x5e\x5f\x71\xf9\xc4\xf0\x3e\x39\x9c\x61\xee\x29\xbb\xdd\xf9\x33\x19\x2d\xb2\x57\xbe\x85\xce\xcb\xdd\xf2\x64\xf0\xdb\xfd\x12\xf1\xe3\x47\x64\xf5\x4c\x82\x18\xdd\x81\x83\xf7\x53\xac\xcd\xae\xdc\x5c\x3f\x57\x68\xd8\x71\x26\xa3\xf5\x44\xfa\xb3\x69\x92\x55\xfe\x37\xe8\x3b\x56\x74\xc3\x02\xe5\x15\x8f\x8b\x5f\xbf\xdb\x1b\xad\xed\x0a\x50\x7b\x4d\x49\x4d\xce\xe7\x7f\x7c\xbf\xef\xcc\xbc\x32\x48\x44\x27\x25\xc0\xec\x45\xc2\x76\x7b\xb1\x73\x92\xef\x2a\x6b\x56\xb5\x84\x59\x29\xe5\x25\x23\xb6\x67\x8b\x7e\x4a\x58\x5e\xe1\x1e\xbe\xef\xf5\x4b\x06\xb1\xf0\x83\x38\x78\x02\xd4\xdf\x94\x53\x1f\x75\x11\xef\x91\xa6\x3c\xaf\x3e\x79\x49\x45\x4e\x4c\xc6\x75\xae\x26\xa4\x93\xb0\xdc\x43\x53\xbc\xf8\xe1\xf5\x73\x88\xb8\x20\x0e\xe9\xd1\x44\xef\x67\x6f\x72\x07\x1e\x3f\x51\xdb\x25\xeb\xe3\xe0\x68\x4c\x9b\x17\x55\x54\x5a\x22\x71\x46\x6b\xe1\xbd\xcb\x78\x3c\x37\x04\x1d\x79\x81\x38\x78\x02\x24\x76\x34\x30\x61\xd6\x27\xba\xc0\xc6\xac\xd1\xba\xad\x8c\x1b\x5b\x68\x81\x15\x12\xa0\x3d\x7f\x93\xd3\xdc\xcd\x48\xb0\xa4\x15\x7a\x8c\x11\xc4\x05\xc9\xa0\x60\xfd\x1b\x77\xdd\x90\x59\x20\x5c\xa1\xdd\x85\x36\xf7\xde\xbb\x08\xbe\x37\x07\xdc\x37\x63\x23\xf0\x98\x72\xc8\xb8\x3f\x0a\x3e\x4c\x62\x9f\xbb\x8b\xf0\xca\x20\x0e\xaa\x57\x56\x3e\xcd\x56\x08\xf4\xbb\x3e\x49\x09\xcd\x42\x89\x2a\xb4\xde\x72\x9f\x2b\x02\xf5\xeb\x83\xda\x1f\xee\x8d\x85\xf1\x5f\xb4\x4d\x22\x5b\x23\xe9\x20\x0a\xfd\x1c\x75\x3e\x07\x31\x03\x20\x0e\xe9\xf9\xcc\x6e\x82\x10\x17\x5e\xca\x6a\xe6\x4f\x5f\x6c\xe3\x55\xd7\x65\x69\xa4\xa2\x8f\xf8\x14\x0a\xd4\xbc\x4d\xe9\x7f\xfb\xd5\x73\x43\x5d\x71\x40\x1c\x5c\x09\x95\xc6\x42\xfb\x9f\x72\xa8\x08\x1b\x13\x6e\x12\x51\xe0\xaa\x63\x70\x91\xdb\x5f\x8d\xdd\x7f\x62\xb5\xa8\x84\x33\x1b\x46\x79\x19\x3a\x07\x07\x71\x70\x25\x0c\x3e\xa9\x5c\x6d\xd5\x69\x17\x28\xff\xf9\x8d\x83\xb5\x2c\x41\x96\x78\x38\xcb\x31\x26\x4d\x51\x7a\x53\x55\xa0\xec\x62\x8c\x88\x17\x74\xf8\x09\xe0\xe0\x4a\x60\x49\xa7\xbb\xea\x38\x76\x75\x4e\x80\xcf\xa8\x6d\xf2\xd9\x48\x56\xaa\xc5\xb3\x3b\x2e\x23\x53\x7a\x12\x74\x81\xf1\x79\xbd\xeb\xbd\x88\xad\x10\x88\x83\x2a\x13\x4f\xe7\x95\x41\x6b\xed\x49\x52\xf8\xda\xdb\x7a\x25\x3a\x70\x82\x9d\xc1\xd7\x88\xb8\xb4\x24\xd6\xfe\xb6\xb8\x9f\x5f\x24\x7b\xc3\xa1\xcd\x9e\x7b\xe9\xa1\x97\x31\x3b\x74\xbd\x1d\xc0\xc1\xa5\x20\x7c\x39\xe9\xf0\xa1\xf3\xde\xac\x66\xf2\xf1\x7a\xbe\xe0\x87\x36\xac\x77\x87\xc2\xeb\x05\xa1\x9d\xe1\x99\x57\x66\xe2\x09\xad\x87\xa1\x93\x29\x00\x87\x74\x82\x54\x47\x9c\x4e\xa5\xb6\x98\x9a\x26\xa0\x98\x1e\x49\xbf\x38\x88\x63\x35\xec\xae\xa0\xcf\x6d\x38\x9b\xa5\xd0\x58\xad\x45\x03\x5d\x05\x00\x71\x70\x29\x44\xfd\xca\x2f\xd8\xdf\xf8\xc6\xb0\x89\x91\x63\xbc\xe7\x32\x67\x40\x21\x46\xa0\xee\x83\xb2\x3c\x1f\x38\xfd\x79\xef\xd1\x35\x1a\xa8\x59\x33\x88\x83\x4b\x61\xdf\xe9\x62\xc0\xb4\x7f\xec\xfb\x9b\x9c\x2f\x09\x35\x75\x71\xee\xa9\x19\xb5\xb1\x9c\x23\xf1\x2f\xb9\x69\x5c\x5b\xd9\xf8\xcc\x05\xba\x6d\x09\xe2\xa0\xca\xc4\x1b\xa7\x92\x02\x28\xff\x9d\x24\x05\x01\xa7\x08\xed\x04\x96\x95\x94\xdb\x32\x95\x91\xd9\xd6\xeb\x89\x1d\x6e\xa6\x9a\x56\x58\x22\xd3\x3a\x2f\x72\x2d\x69\xcd\x07\xa1\x37\xfa\x40\x1c\x5c\x0a\xf8\x38\xa1\x74\x99\xe9\x4b\x2f\xbf\xc9\x7e\xc8\x0c\x45\xb5\x49\xf7\x28\xae\x5a\x40\x91\xfa\xea\xe7\xb4\xda\x4a\xb1\xde\x19\xa6\x03\xb5\x5a\x07\x70\x70\x29\xcc\x4e\x4c\x5c\x30\x8f\xcf\x9b\x15\x20\xbf\x2d\x9d\x9e\x28\x36\xac\x50\xf2\xf2\xfe\x82\xd1\x33\xfd\xd6\x89\x35\xbe\x58\xa5\xf7\x50\x89\x39\x88\x83\x4b\xc1\x23\xb5\xd3\x0b\xe5\xbe\xb9\x71\x89\x44\xf4\x91\x9f\xff\x93\xf6\xa9\xe4\xe1\xdb\x3a\xad\x49\x52\x89\x89\xfd\xfd\x2a\x73\xe2\x7c\x88\xb8\x20\x0e\x2e\x05\x71\x95\x1a\x46\x6a\xfc\x2d\xc1\x77\x06\xdc\x91\x09\x36\x06\x9f\xaa\x6f\x1e\xa1\x3b\x0f\x5e\x77\x0b\x33\xf1\x0c\xb1\x55\xfb\x5e\x8a\x90\x02\x88\x83\x56\x85\xd3\x79\x65\xd0\x9e\xe4\x24\x29\xd4\xa7\x0a\x7c\xb1\x27\xcf\x5c\x77\xaf\x4e\x18\x61\xff\x84\x66\xea\x33\xb3\xd4\x70\x6f\xa4\xed\xa8\x2a\xc3\xd3\x7a\xb5\xcc\x12\xba\x0a\x00\xe2\xe0\x52\x50\xfc\x12\x79\x0e\xed\x25\xd5\xaa\xa8\x76\x7c\x2f\xa1\x92\xc6\xde\xd8\xdb\x6b\x91\xea\xe2\x23\x92\x56\x74\x7f\x69\xa2\xa6\xe6\xa1\x07\xed\x41\x1c\x5c\x0a\xd1\x4d\x14\xf8\x25\xf3\xf3\xb8\xa4\xbb\xb4\xe5\xf1\xd4\x71\x3c\x0e\xa5\xf9\x3f\xef\xca\x86\x36\xa0\x6e\xbe\xad\xcc\xc0\x24\xc7\x46\xc4\x05\x71\x70\x29\x98\x3e\xf2\xd3\xe2\xb1\xbf\xf1\x86\xb4\x43\x5b\x2b\x24\x76\xb4\x3d\xb4\x5c\xf1\x9b\x54\x5e\x4b\x4c\xf9\x10\xc6\xf2\xba\x99\x2f\xf4\x34\x38\x88\x83\x4b\xc1\xbd\xe7\xf5\x2b\x97\x5f\xcb\x94\x84\xfd\x4c\xad\xa2\xd2\x1a\xb7\x27\x82\xfa\xbe\x96\xc5\xff\x48\xbc\xad\x91\x95\xee\x14\x79\x97\x00\x21\x05\x10\x07\xad\x0a\x9e\xa7\xf2\xca\x20\x9f\x75\xb2\x57\x0e\x79\xb1\xa6\xcb\x6b\xb4\xe1\x10\x64\xa3\x2b\x85\xb3\xd0\x1a\xfd\xe7\x4f\x73\xef\xc7\xb4\xe4\x12\x67\xf5\x0f\x95\x86\x73\x24\x71\x08\xdf\x09\xe2\x90\xbd\x72\xd7\x33\xe6\x36\x8e\xf1\x32\xb7\x8e\xeb\x5d\xb1\xe7\xf3\xea\xe5\xa7\xf2\x58\x46\xd5\x5f\x3f\x97\x7b\x7d\xbe\xcc\x33\xf2\xd5\x15\x23\x44\x64\x10\x87\xec\x95\x13\x5e\x46\xb2\x04\x10\x96\xbc\x3b\x27\xa5\x6f\x82\x2d\x1b\xfe\x8b\xde\x36\x3e\xd2\xc9\xbd\xb3\xed\xbd\x47\x0f\xc5\xa4\xca\x87\xbb\x50\x25\x34\x80\xfb\x7f\x5e\xf9\x7f\x9e\xc6\x3e\xf5\xfb\xca\x78\x52\x53\x4d\x36\xc4\xc9\x3d\x76\xb2\xd2\x6a\x9e\xa8\x9b\x92\x7b\xa2\xbe\xbe\x44\xea\xba\x7b\x64\x5a\x32\x1f\xf0\x3e\xb4\x7c\xff\xd7\x2b\x6b\x30\x7a\xd5\xda\xc7\xe4\xe5\xf5\x59\xe9\xa3\xf8\xa5\x57\x19\x77\xb7\xb6\xdd\x4e\x79\x62\xae\x88\x53\x28\xe3\x25\x90\x3b\xff\xfb\xdf\x2f\x9a\xef\xfd\x45\xca\x2d\x9f\xcb\xe0\x98\x32\x28\x9b\x2f\x6f\x3d\x61\xac\x24\x33\xa4\x98\x77\xff\x14\x68\xf4\xde\x6f\xbd\xc4\xfa\x3f\x77\x07\x1b\x34\xb4\x7f\xeb\x95\x91\xbc\xf2\xa3\xda\xbe\xb1\xea\x71\xe9\x96\x35\x9f\xc4\xec\xf4\xbf\xe4\xae\x2f\x62\xaa\x9a\x15\x2f\x68\xad\x3f\x51\x67\x5c\x62\x92\xb1\x78\x7f\x26\x47\x9e\xc8\x5e\xb9\x4e\x45\xaa\x99\xf3\x47\xfd\x4d\xa5\xab\x57\xf4\x9f\x17\x90\x61\x4a\xb5\x0e\x14\x0c\xce\xa9\xa3\x5f\xa7\x4e\x68\xdd\x73\x76\x33\x3a\x93\x03\x5e\x64\xaf\x4c\xb3\xd7\xc0\x64\x92\x68\x77\xb1\x53\x97\xa7\xba\xb7\xfb\x1c\x35\x53\x14\x77\x02\x66\x95\x7f\x59\xc6\x3b\x51\x14\x16\x7a\x75\x91\x33\x19\x2d\xb2\x57\xfe\x81\xad\xbd\x27\x3f\xdc\xe6\xb8\xff\x37\xb0\x40\xd9\x49\x43\x22\xdf\x87\xfc\x69\xd2\xf5\x0d\x55\xfd\xbe\xd2\x31\xb1\x6a\x27\xc7\x33\x19\x2d\xb2\x57\x0e\x7a\x1e\xb1\x64\x23\xd0\xd8\xd7\x57\x92\x14\xb8\x34\x13\x4a\x15\x1b\x19\xa9\x52\x8c\xa3\xdf\x47\xac\xd7\x62\xbd\xac\xb4\x72\xe7\xcc\xbc\x32\x48\x44\x27\x25\xc0\xdc\x0f\x86\x89\xa1\x86\xc7\x62\x8e\xb2\xc1\xb4\xe9\xc9\xcf\x66\x85\x2f\x14\x90\x0d\xa8\xa8\x38\x3f\x67\xf6\x67\xbc\xeb\x24\xd8\x8e\x58\xf8\x41\x1c\x3c\x01\x26\x94\x4c\x04\xba\x6d\x79\xe4\xd7\x3c\xb5\x2b\x5e\x36\xff\xf2\xd2\xaf\x76\x93\x79\x70\x85\x93\xf9\x56\xd7\x21\xf1\x2d\x66\x5d\xe8\x48\x06\xc4\xc1\x13\xca\x6c\x7e\x80\x00\x0a\x33\x0f\x93\x54\xd1\xc7\xfa\xf2\xa3\x43\xcf\x90\x81\xe2\xfe\x9a\xfb\xf3\x17\xc3\xc3\xd5\xa2\xf1\xcd\x5c\xa1\x6e\xcd\x20\x0e\x5e\x2c\xf4\xfa\x0d\xcf\x3d\xe6\x44\x87\xce\x80\x3d\xca\x3b\xcd\x6d\x59\x9a\x83\xb8\x53\x1d\xf4\x71\x9e\xbf\xa7\xe3\x66\x8e\x26\xff\x0a\x42\xef\x2b\x83\x38\xf8\x3c\xb0\x12\xec\x49\x05\xb4\x28\x11\x31\x5e\x12\xb0\x40\x45\x63\x19\x8a\xa5\xc5\x36\x29\x35\x4f\xff\x78\xa3\xd5\xc2\x6b\xe3\x92\xa8\x3f\xc2\x2b\x83\x38\xc4\xb9\xb2\xd4\xa9\xbc\x32\xe8\x77\x7d\x92\x12\xb8\x73\x1f\x94\x74\x55\xd5\xda\x11\x9f\x8b\x91\x15\xfe\xed\xfb\xda\x0b\xdf\x15\x7f\xd1\x5f\x29\x35\x55\x92\xf0\x5d\xfd\x5a\x06\xb4\x1b\x04\x71\xf0\x19\xb0\x55\x0e\xb6\xd9\xa1\x3d\x64\x23\x10\xa6\xd1\xfe\xf6\x14\x83\x42\xee\xd6\x57\xe2\x6d\x6d\x21\x4e\xae\x55\x9e\xa3\x48\x2c\x39\xe8\x36\x3e\x88\x83\x2b\x41\xee\x57\x1c\x69\xfc\xcd\x27\xb5\x73\xa3\xcf\x55\x58\xb4\xb3\xea\xe9\xb5\xd1\xe4\x93\x86\xee\xd7\x92\x6d\x3a\xaf\x4f\xbc\x55\x82\x2e\xde\x82\x38\xb8\x12\x56\x31\xcf\x1b\xed\xb2\x4f\xcd\x0b\x09\xa9\xa3\x6e\xe2\xf9\x49\x2d\x6d\x64\xe2\x76\x7d\x4b\x78\x4e\xfb\x34\xdc\xc1\x11\xd3\x0b\x0f\x6a\x6c\x05\xe0\x90\xba\x19\xf1\x26\xd1\x72\x3c\x19\xfe\xc6\xc5\xfc\x22\x67\x0a\xcf\xfd\xa6\xbc\xe5\x80\x16\x8f\x8a\xea\x25\xc7\x04\x95\x08\x53\xf1\x65\xa8\xcd\x29\x88\x83\x8e\x0d\x4e\xe7\x95\x41\x6b\xed\x49\x52\x78\xea\xef\xfb\xdd\xdd\x41\xf8\x8f\x70\x5d\xd3\xe1\xb1\xaf\x00\x06\x53\xfa\xf4\x2b\x54\x71\xe6\x68\xce\x29\x77\x15\x0d\xb6\x6c\xe8\xfc\x17\xc4\xc1\xa7\xe0\xbd\x9f\x8f\x13\x8d\x49\x78\xa4\xe8\xb9\x02\x3e\x9d\x60\x51\x21\xbd\x6e\xdb\x7d\x83\xb6\xfa\x15\x7d\xcd\xbb\x74\xfd\xf7\xeb\xa0\x47\xd7\x41\x1c\x5c\x0a\x7c\xa5\xd5\x44\x05\x82\x49\xfe\x54\xe1\x09\x3e\x39\x5c\x15\x15\x6c\xe1\xca\xb4\xc4\xdf\x1e\xab\x7e\x26\xfa\x1c\x66\xfe\xf4\xfb\x3a\x54\x99\x08\xe0\xe0\x52\x20\xab\x8c\x50\xf5\xbd\xd4\xeb\x65\x6c\x86\x3d\x83\x7d\x3f\x3f\x22\xdd\xb7\xb7\x79\x9c\x17\xc5\x8d\x35\xee\x5e\x34\xcf\xe6\x0e\xf4\xd4\x36\x88\x83\xcf\x83\x5e\x7e\x33\xd7\x73\xbf\x54\x56\x02\x92\xe7\xf3\xaa\x23\xd7\x8b\xbc\x2f\x7c\x78\xe8\xd7\x1f\x53\xad\xfc\x70\x0e\xa7\xc9\xbb\x64\x1e\x21\x05\x10\x07\x1d\x26\x9e\xce\x2b\x83\xf2\xdf\x49\x52\xe8\x52\x7a\x74\xc4\xee\x69\x53\x2d\xc1\xf2\x26\x71\x78\xbc\xed\x2e\x5d\x90\x53\xdb\x17\x09\x36\x77\x69\xc1\xce\x07\x5c\x3e\xef\x65\xa1\x62\x52\x00\x07\x9f\x82\xec\x8e\xf1\xfe\x97\x47\x8c\xb7\x73\xd6\x87\x2a\x0f\xf8\x5e\xb9\x12\xb5\xb0\x5c\xdc\x91\xa2\x30\xd0\x50\x92\xdf\xe2\x78\x92\x8e\x0b\x7d\xa3\x05\x70\x70\x29\x98\xef\xa0\x94\x9a\x12\x1a\xca\xec\xd9\xf0\x7d\xf9\x39\x13\xc5\xa8\x6f\x12\xd2\xd3\x4a\xe0\x41\x10\x66\x8e\xa9\xfb\x57\x45\xbe\x1f\x11\x17\xc4\xc1\xa5\x10\xf0\x5e\x2d\x72\x5c\x60\x84\x52\x80\x8d\x2b\x25\x8a\x38\x57\x5e\xba\xad\x3a\xff\x4a\x23\xd9\x43\x6f\x2a\x7c\x37\x49\x55\xd9\x3e\x44\x5c\x10\x07\x9f\x87\x92\x78\x8a\x8b\xdb\x98\xdf\xb1\x38\x4b\x87\xc2\xf1\x3d\x1c\xa2\xa8\xb6\x9c\x7f\x69\xb9\xf1\x2c\x0e\xae\xd9\xb6\xbe\xf6\xa7\x8c\x47\x48\x01\xc4\x41\xab\xc2\xe9\xbc\x32\x68\x4f\x72\x92\x14\x36\x5e\x3f\x8c\x64\x4b\xde\x76\xec\xe9\x64\x97\x62\xa3\x1e\xd1\xab\x61\xc4\x77\x77\xb3\x61\x16\x08\xc4\x92\x36\x1f\xa4\x24\x80\xfa\x4a\x83\x38\xf8\x14\x38\x5f\x33\x3a\xf0\x2c\x3f\x28\x25\x66\xaf\xe9\xca\x70\xf4\x14\x1f\xe8\x1c\xa9\x29\x97\xf6\x9e\x3c\xc8\x74\x2e\xbb\xea\x10\x29\x84\x88\x0b\xe2\xe0\x52\x70\x1a\x64\xab\xd1\x3b\x8e\x97\xd8\x3f\x32\xe2\x42\x2f\x4b\xb6\x96\xd7\x5c\xc0\x2a\x3b\x26\xc7\x5e\x8b\x3e\x6c\xf7\xa2\x40\x97\x42\xc4\x05\x71\x70\x29\xbc\xf7\x5c\xf9\x8a\xce\x5f\x14\x4f\x8b\x1e\xaf\x79\xdb\xea\x0e\x01\xee\xaf\x8b\xde\x58\xa8\xfc\xba\xc2\x11\x14\xb2\x34\x49\xef\xd4\xa1\x55\x0c\xc0\xc1\xe7\xa1\xf1\x05\x75\xb9\xc5\x58\xf5\xcd\xbf\xa5\xe5\x7b\x73\xb9\x8d\xcf\xa3\x70\x9b\x59\x07\x0c\x2f\x05\x3d\x2a\x2b\x1e\x6f\xc9\x27\xca\x46\x48\x01\xc4\x41\xab\xc2\xe9\xbc\x32\xc8\x67\x9d\xec\x95\x5d\x94\x0c\xa6\x9f\x90\xf1\xda\x6f\xaa\x4c\x86\xc8\xd5\xa6\x72\xa7\x5d\x68\x10\x7f\x25\x12\xf8\xa9\xf0\x99\x69\x87\xbc\x6b\xd5\x55\x84\xef\x04\x71\xc8\x5e\x39\xda\x82\x26\xd0\xed\x7e\xc0\x6f\x63\xb3\xb8\x87\x2f\x27\x62\x36\x77\x66\x58\xa9\x5f\xcc\x4b\xb0\x92\xe3\xd0\xf0\x8a\xe2\x5f\x0b\x46\x44\x06\x71\x41\x72\x28\x04\xff\x1b\xb9\x03\x53\x62\x0d\x4d\xfb\x79\xea\xed\x3e\x82\xf4\x10\x6a\x71\x8d\x1b\x66\x02\x3b\xb1\xd3\x93\x0c\xb9\x57\x3d\x73\x52\x58\x2c\xdf\x23\x22\x83\xb8\x20\x39\x2c\xd8\x6c\x9c\xba\x0f\xb6\xf0\x17\xfc\x0c\xfa\xa8\xef\xcb\x9e\xfb\xa1\x79\x49\x5a\x47\x7a\xc4\x75\xae\xda\x81\x2e\xdc\x42\x95\x7b\xd6\x4c\xb2\xef\x14\x5e\xfe\xeb\x95\x7d\x30\xd6\xb8\xdc\x86\x9a\x6d\x2e\xf2\x04\xc5\x51\x5e\xe0\x1e\x24\x8b\x6e\xaf\xb7\xaa\xb0\xe7\x88\x0b\x7b\xa8\xf0\x90\xa5\xf2\xdf\x67\x7b\xcc\x94\x1b\x67\x71\x18\x33\xae\x32\x2e\x78\x27\xa4\xed\x5d\x61\x4c\x15\xcb\x60\x24\x7a\xd2\x57\x90\x75\x75\x43\xd4\x25\x0d\xd7\xf6\xbf\xe6\x95\x41\x43\xfb\xb7\x5e\x19\xc9\x2b\xeb\xec\xce\x13\x6c\x17\xa6\x1d\x2f\xd7\x15\xdf\xb0\xc2\x68\x12\xf0\x98\xe5\xba\x97\x36\xc4\xaa\x46\x1b\xda\xed\x26\x43\xad\xd9\x7d\x26\x47\x9e\xfc\x48\x36\xce\xbc\x21\x98\xb5\x6f\x52\xb9\x87\xdb\x64\x87\xb8\x4a\x23\xd4\x6a\x8d\x6c\xe0\x3a\xea\xfd\x58\x1c\x3b\xfc\x4f\xdf\x85\x15\x6f\x9c\xc9\x9b\x51\xfe\xc8\x5e\xd9\xc7\xc3\x8c\x2f\xde\xbe\xe6\x91\x62\xba\x76\xd7\xdd\xbb\x17\x84\xed\x33\xb4\x6d\x94\xe8\xb0\x5f\x3a\x0c\xed\xbd\x64\x50\x5f\xcc\x3a\x93\xd1\x9a\x20\xfd\xd9\x0b\x82\xe3\x49\x17\xbd\x63\xc8\x5a\x1f\x19\x75\x29\x5e\xa5\x75\xb2\x4a\xa9\xd2\x17\x7e\xf6\x58\xdb\x49\xe6\xb7\xd1\x5f\xfa\x35\x9b\x33\x19\x2d\xb2\x57\x76\xb3\xa1\x92\x8d\x0b\x1d\x9a\x0f\x28\x74\xfa\xfe\x9b\x52\x6e\xe2\xb6\xe6\x51\x70\x10\xa7\x72\x33\xa5\xd0\x83\xb7\xa8\x45\x96\x86\x67\xe6\x95\x41\x22\x3a\x29\x01\xce\x35\x93\x38\xd8\x58\xae\xf6\x7f\x7d\xd1\x5c\xc9\x49\xf9\xf3\xd2\xa2\x6a\x2a\x01\x3a\x9d\x88\xf8\x73\x52\x1b\xc6\x58\x96\x05\xe8\xa3\x2e\x88\x83\x2f\xfc\x73\x13\x39\x79\xb8\x76\xcc\xf2\x5a\xc6\xc9\x76\x79\x73\x45\x58\x9c\xab\x8f\xb5\xf1\xbb\xe3\xea\xbb\xae\xd0\x0b\xbe\x1f\x0a\x56\x83\xe2\x02\x38\x78\x02\xb4\x4e\x10\x39\xb8\xff\xf9\x91\x48\xbc\x56\x5c\x1f\xd7\xca\xb5\xd1\x3f\xca\x23\x33\x4d\x2e\x5e\xba\x56\xf4\x98\x7e\x57\x3f\x1e\x42\x09\x1b\xc4\xc1\x13\xe0\x55\x97\x68\xcc\x2a\x89\x57\xd7\xb5\xbb\x59\x9c\x15\x8c\x7c\x29\xa7\x58\x59\x13\x57\x0f\xbf\xba\xaa\x2f\x1a\xb4\xac\x11\xe1\x42\x77\xb0\x41\x1c\xfc\xe3\xb6\xa8\x75\x78\x52\xe9\xfd\x21\x86\x3e\xf3\x59\xcd\x3a\x9c\xb1\x46\xde\xee\xb5\x9f\xdf\xe6\x89\xfb\x8c\x31\x7e\x73\x2d\xd8\xcd\x72\x23\xbc\x32\x88\x43\x9c\x2b\xfb\x9f\xca\x2b\x83\x7e\xd7\x27\x29\x81\xde\xe9\xc7\x97\xeb\x33\x7e\x28\x73\x02\xee\xbb\xe4\x65\x44\x69\xba\x6a\x43\x3b\x34\x6b\xd1\xea\xe3\xe5\xf7\xe8\xaa\xae\x2b\x92\x22\x66\x00\xc4\xc1\x95\x70\x60\x94\x88\x31\xcc\x1a\x73\x99\xfd\x1b\xc5\x46\xb7\xce\xe0\xcb\xe5\xed\xf1\x0a\x69\xce\xa9\x90\x80\xd6\x8e\xaf\xef\xf8\xf4\x95\x10\x71\x41\x1c\x5c\x09\x01\x0b\x8d\x14\xf6\xce\x57\x99\xaf\xc9\xee\x33\xba\xa9\x0e\x2c\xd4\x54\x96\x88\x49\x88\xfe\x8c\x58\xbb\xbd\x81\xc5\xe5\x77\x17\xaa\x30\x07\x71\x70\x25\xd4\x39\x34\x57\x8c\x17\x50\xf5\xfd\xfd\x63\xf6\xeb\x43\xf1\xe6\x02\xbe\xb0\x0b\xf7\xef\x49\xff\xe5\x87\xce\xba\xc2\xef\xd7\x5b\xa0\xbb\xe8\x20\x0e\xa9\xd5\x8c\x68\x30\x0e\x8a\x95\x9c\xec\x77\xc9\xf4\xa1\x62\x36\x03\xe9\x19\x93\x8a\xf6\x06\x4d\x34\xb7\x9b\xf6\xe3\xfb\x1c\xfe\x28\xd4\x88\xad\x10\x88\x83\x8e\x0d\xf8\x4f\xb5\x2b\x06\xad\xb5\x27\x49\xa1\xbd\x93\xf4\x12\x8f\x75\x56\xbe\x82\x75\x7f\xdf\x93\xd8\x18\x14\xdd\x8d\xfc\x0c\x6f\x79\xc5\x88\x17\xf9\x39\x3f\xa3\x0b\x48\xd1\xa0\x92\x6d\x00\x07\x97\x42\x85\xbf\x78\x8f\x52\x63\x9b\x8b\x3e\xf5\x53\x8f\x2f\xd9\x9d\xd4\x18\xa1\x8b\x53\x1d\xb9\x28\x6c\x84\x7a\x1d\x0c\xf3\xee\xe4\xd0\x6b\x2b\x20\x0e\x2e\x05\x1b\xd4\xcc\x62\x59\xd2\x20\x21\x8d\x9f\x33\xcd\xdb\x01\x95\xdc\x0b\x64\x0a\x4f\x7d\xac\xaa\x8d\xb0\xc3\x9e\xd0\xc6\x1a\x64\x7e\x40\xc4\x05\x71\x70\x29\x18\xd5\x48\x35\xaa\x55\x79\x3d\x31\x4d\x61\x67\xee\x8f\xfa\x2d\x48\x27\x10\xaa\x86\x22\x7a\x3d\x74\x79\xed\xc8\xfd\x2f\xde\x36\x54\xfc\x0a\xe2\x90\x1e\x36\x2a\x89\xcf\x90\xf4\x11\x14\x5f\x12\x8f\xa7\xa6\xbf\xbe\x59\xa7\xbe\x6f\x1a\xe3\xb2\x9d\x5b\xda\x63\xe8\xf6\x6e\x3a\x06\x1d\x32\x48\x20\x0e\x3a\x4c\x3c\x9d\x57\x06\xe5\xbf\x93\xa4\xe0\xb8\xa7\x39\x72\xa9\x6b\xd7\xfd\x1e\xd9\x0e\xf1\xa6\x47\xaa\xe6\xca\xbb\xa6\xa5\xca\x7c\xf7\x5b\xc4\x85\xe3\x7b\x34\x59\xc6\x25\x50\x31\x29\x80\x83\x4b\x01\x93\x3c\x28\xf2\x90\xd2\xd1\xa2\x8e\x10\x2f\xca\x77\x97\x57\x4f\xbe\xdb\x1a\xa3\xf7\x4a\x46\xdc\x2f\x93\x21\xe3\xd4\xd2\x0e\x68\x55\x00\x71\x70\x29\x1c\xad\x5c\x23\x36\xc0\xbf\x51\x11\x87\x71\x39\x96\xd7\x88\xba\xbc\xe1\xe6\x03\xc2\x8d\x73\x16\x54\x3f\xed\x1e\x5d\x9c\x2d\xff\xff\xdf\x2a\x04\x71\x70\x29\xdc\x49\xf1\x92\x28\x1b\x31\x99\xc2\xbe\xa3\xa9\xc0\xe8\x77\x79\xe3\xd6\x06\xaf\xf1\x43\x09\x65\xf6\x98\xd8\x99\x98\x37\x0b\x42\xd0\x7b\x11\x20\x0e\x2e\x05\x54\x96\x2f\x65\x2b\x8e\x1f\x5b\xa3\xa4\x96\xd0\x58\xe5\x3e\xd7\x2e\x3a\x99\x10\x54\x29\x8b\xd1\x7c\xf8\x1e\x54\xb2\xc7\x6e\xe6\x8f\x90\x02\x88\x83\x56\x05\x93\x53\x49\x01\xb4\x27\x39\x49\x0a\xbb\xc1\x8e\x4c\x22\xa6\x6f\x3c\xe5\x6c\x63\x55\xbb\x19\x29\x89\x9e\x7d\x0c\xab\x1f\x5b\xe5\xba\x91\xcd\xf7\xd1\xb9\xe2\xa9\x34\xf4\x99\x1a\xc4\xc1\xa5\x40\xf6\xaa\x6f\xe5\xdd\x18\xc1\xc7\xde\x0f\x0f\x4a\xbf\xe9\x98\x3d\x21\xb4\xb3\x0a\xda\x8b\x9f\x67\x73\x3e\xd2\x95\xd6\x2a\xd1\x82\xfe\xcb\x40\x1c\xd2\xaa\x50\x3e\xda\xb5\xbc\x99\xa6\xb2\x70\x83\x3e\xb5\xd2\x8e\x57\x85\x49\x9e\xda\xf0\xce\x4f\xf2\x07\x37\xe8\xaf\x0d\x99\x89\x71\x42\xcd\x1f\x41\x1c\x5c\x0a\xca\xd2\x69\xe7\x85\x83\x7b\x77\x1d\x50\x25\x5a\x49\x8a\x14\xa6\xd9\xf3\xe4\x85\x8c\x8a\x4a\x3c\x7f\x07\x2e\x5f\xab\xae\x15\xe5\x80\xba\x23\x00\x38\xb8\x14\x50\xcc\xb3\x48\x85\x82\x85\x3f\xc8\xdd\xd6\xf0\x0b\x58\xfd\xca\xdc\x3e\x96\x5d\x20\x1a\xcc\x25\xe0\x8a\xa3\xa7\xcf\xd3\x37\xf4\x16\x21\x05\x10\x07\xad\x0a\xa7\xf3\xca\x20\x9f\x75\xb2\x57\x26\xf8\x35\x18\x72\xb5\xbf\x26\x1c\xa7\x3f\x20\x3f\xa5\xc1\xbf\xbe\xe4\xd9\xd6\x52\xac\x39\xa9\xc5\x82\x5a\x1e\x53\x6b\x70\x7f\x05\xc2\x77\x82\x38\x64\xaf\x7c\x3b\x70\xe3\xd3\x6d\xd4\x9b\x83\xbf\xfd\xb7\x0e\x7e\x4b\x5d\x0e\x5b\x9d\x2e\x4f\x37\xf0\x6b\xf3\x72\x50\xc0\x48\x0f\xb7\x20\xbb\x85\x88\x0c\xe2\x90\xbd\xf2\xa7\xf7\x3a\x79\x25\xe8\x47\xaf\x1c\x13\xa8\xc2\xf7\x97\x9a\x94\x59\xb3\x03\x9f\x95\x2f\xa7\x73\xa3\x14\x7e\xa0\x15\x08\x36\x83\xea\x95\x41\x5c\x90\x1c\x2d\x6c\x36\x4e\xdd\x07\x7b\xbe\xed\xeb\xa5\xc3\xb0\x4f\xca\x0c\x68\x76\x3a\x37\x5e\xdf\x58\xf0\x26\x5b\xc0\xcd\x1a\xc9\xd5\x2d\x3a\x32\xf0\x7c\xc5\x9b\x82\xfe\xaf\x57\xb6\x7c\x19\xca\x7e\x2b\x44\x55\xf1\xd0\x0d\x4d\x49\x75\x96\xf0\x71\x7d\xe3\x8d\xba\x6b\xb7\x2e\x97\xa6\x53\x1d\x5c\xc7\xe9\xa5\x2d\xf8\x07\x95\x48\xa6\xe2\x0b\x7f\x1f\x63\x71\x79\x49\x9f\xe9\xba\xcf\xdc\xa6\x4f\x67\xd5\x12\xb1\xda\x75\x55\x63\xcd\x0b\xdc\x7e\xd6\x78\x35\xff\x35\xaf\x0c\x1a\xda\xbf\xf5\xca\x48\x5e\x99\x30\xc9\x55\xf8\x82\x76\xbf\xc3\x22\x19\x9b\xfa\x97\xf0\xe4\x5e\xef\xbb\x68\xeb\x3b\xee\x63\x91\x81\x31\xfa\x49\x33\x97\x30\xea\xce\xe4\xc8\x13\xd9\x2b\x8b\x33\xc9\xd4\x57\x16\x4a\xcf\x46\xe3\x6d\x25\xd4\x35\x4b\x3f\x7e\x3f\x56\xfe\x13\x25\x7a\xb4\x8e\xa4\x5e\xcb\x77\xb9\x9d\xfb\x6c\xda\x6f\x23\x7b\xe5\x89\xb7\x96\x36\x35\x1f\xf4\x85\x8d\xd0\xbe\xd1\xf7\x26\x75\xa9\x73\x3f\x4a\xb7\x89\xb1\x0f\xcc\x0c\x93\xed\x39\xaa\xbb\x7e\xdf\xec\x4c\x46\x8b\xec\x95\x85\xcb\x94\x0d\x7e\x94\xe8\x5e\xea\xa5\x14\xb4\x71\xee\x14\xea\xec\x21\x57\x66\x1d\x64\xb8\x1e\xf0\xeb\x20\x1b\x67\x1c\x35\x6d\xec\x4c\x46\x8b\xec\x95\x0b\x77\x05\xea\x7e\x50\x86\x98\xec\x50\x75\x5b\xc4\x6c\x37\xaf\xdc\x68\x35\x77\xd7\xf1\x74\x24\x79\x69\xf5\xe0\xef\x6b\x46\xf6\xa7\x67\xe6\x95\x41\x22\x3a\x29\x01\x1a\xe6\xc6\x71\xdf\x72\x95\x1e\x36\xe3\xd5\xee\xfe\x86\x23\xb1\x1e\xda\x4f\x7a\xf3\xf9\xc7\xa7\xf8\x8c\x97\x17\x38\x79\x22\xd3\xa0\x9b\xac\x20\x0e\x9e\x00\x03\x37\xf6\xe9\x2f\x51\xdf\x50\xfa\xf3\x73\xe6\x55\x87\x51\x04\xed\x79\x9c\xf5\xee\x7e\x21\x89\xa7\xf7\xe7\x2f\x4d\x14\x7a\x47\x40\x8e\x03\xc4\xc1\x13\xa0\x1e\x0d\xb6\x35\x6a\x06\x7e\x15\xc5\xab\x09\x4b\x5f\x09\x5e\xd9\xcd\x2f\x2b\x83\x34\xeb\xa3\x8b\x89\xec\xb2\x98\xcf\xc5\x45\x5a\x11\x71\x41\x1c\x3c\x01\xe2\x44\xfa\xaa\x65\x92\xf0\xe5\xa1\x3c\x3c\x7e\x25\x2c\x5c\x56\x58\xd6\x67\x48\xc6\x41\x92\x6e\xa5\x1d\xc8\x51\x3e\xbb\xf4\x3d\x01\x11\x17\xc4\xc1\x1f\x98\xb8\x91\x53\xa3\x41\x32\x91\xda\xce\xb2\xa6\xca\x9f\x4f\x1a\xd5\x4d\xfb\x1b\xc5\x81\x9b\x98\x21\x9e\x17\xc7\x8a\x47\x25\xe7\x6f\x13\xc2\x2b\x83\x38\x44\x1f\xec\xe6\x53\x79\x65\xd0\xef\xfa\x24\x25\x38\xd9\xf7\x7b\xaf\x3e\x52\x1f\x94\x6c\x95\x14\x8d\x5f\x46\x61\x78\x32\x52\xd3\xb1\x1d\x9a\x5a\x46\x99\xde\x5a\x98\x62\x3d\x0c\xb5\x39\x05\x71\x70\x25\x88\xe3\x28\xee\xc4\xf3\x64\xd5\x33\xe2\xa7\x4a\x92\x5c\xf3\xb0\xb2\x8a\x78\x89\xfa\x3c\xd3\x40\xf8\xcd\x9f\xb8\x26\xcf\xc7\xca\x50\x93\x62\x10\x87\x74\x98\xe8\xa2\xb9\x35\xf4\x2d\x51\x6f\x4e\xc8\x71\x51\x73\x2b\x04\x9d\xe7\xd8\x73\x8a\xf0\xaf\x48\x62\xf4\xdb\x6d\x4f\x8c\xaf\x91\x50\x27\x5d\x10\x07\x57\x82\xcc\xad\xb0\xa5\xf5\xd9\x4c\x4a\xb6\x87\x8b\x0c\x4f\xe2\xf9\xac\xfb\x06\x95\xe9\x31\x04\x87\x19\x8d\xe8\xd7\x5e\xf5\x04\x04\xb0\x22\xe2\x82\x38\xb8\x12\xc8\xd2\x5c\x88\x77\x4a\xda\xd2\xd8\xaf\xe4\xc9\x63\xe5\x2c\x09\x4c\x73\x51\x3f\x4b\x75\xfb\x9d\xcb\xa4\x51\x54\xb9\x3b\x54\x60\x88\xd8\x0a\x81\x38\xa8\xcd\xe9\xe9\xbc\x32\x68\xad\x3d\x49\x0a\x1f\x3c\xbe\x53\x93\xb5\xfb\x70\xf2\x8c\xec\xe2\xa9\xa2\xc8\x3c\xfe\xfa\xac\x99\xe8\x08\x67\x59\x2b\x06\x3b\xf5\x56\x4b\x6b\x39\x74\x57\x1a\xc4\x21\x35\x31\xe8\xff\x4d\x29\x60\xed\x17\xf0\x21\x91\xf9\x5c\x5a\x15\xd3\xc5\x57\x3d\x36\x2e\x71\x0f\xe7\xb3\x95\x89\x7d\x8e\x6a\xfa\x36\x0b\xa0\x26\x06\x00\x0e\x2e\x05\x63\xcc\x1a\x7a\xeb\x37\x34\x77\x0a\xe5\x97\xf7\x83\x86\x04\xee\x27\x76\x6b\x95\xdc\xdb\xa9\xc9\xfd\x54\x26\xb2\x1c\x2c\xdf\x03\x9d\x2b\x83\x38\xb8\x14\x2c\xb1\x77\x1c\x51\x39\x8d\xee\x6f\x3f\x19\x1e\xcb\x7e\xbf\x45\x1c\x45\xad\x80\x27\xbb\x1d\x97\xa1\xd6\x89\xdd\xd9\xd1\xc8\xb8\x8d\x88\x0b\xe2\xe0\x52\x28\x22\x57\xd7\xf0\xdb\x37\xa5\xf9\x42\x8a\x3f\xe7\xf5\xe6\x87\x7d\xc1\x1d\x1c\xc1\xe6\x98\xb8\x84\x4f\xb7\x6e\xf3\x63\x59\xe1\xaf\x20\xa4\x00\xe2\xa0\xe6\xc7\xa7\xf3\xca\xa0\xfc\x77\x92\x14\xfa\x55\x88\xd5\xb2\xf6\x63\x36\xe9\x7c\xe6\x03\x98\x15\xb6\xe5\xd0\xcd\xd9\x14\xa2\x64\xc5\x9e\x7b\x6d\xd4\x5f\x5e\xbe\xf3\xc9\x0f\x31\x05\x20\x0e\x2e\x85\x0e\x3e\x4a\x9d\xfe\x80\x6c\x8c\x55\x83\x98\x6e\xf7\xec\xfc\xda\x80\xc5\x2f\xfd\xfd\xfd\x97\x7e\x2a\x37\x4c\x4e\x76\x1d\xbd\x84\xf2\x03\x88\x83\x4b\xa1\xf8\x4a\x8b\x54\x9b\x21\x07\x7f\xc1\x63\x5b\x82\x87\x9d\x16\x29\x8d\x23\xf6\xa2\xd7\x3a\x8c\x63\x67\xf2\x86\xb5\x06\xc9\x99\x6e\x23\xe2\x82\x38\xb8\x14\xb4\x4d\xe9\x7e\x6a\x91\xdb\xa2\x29\x29\xf6\x62\xd9\x46\x68\x7d\x58\x8a\xc5\x0c\x64\x19\x67\x45\x41\xe1\x1b\xf7\xa8\x94\x7d\x0e\x7d\xe6\x01\x71\x70\x29\x54\xd5\x5d\x6a\xd2\x3d\xb8\xc2\x18\x97\x8a\xfb\xd1\xc3\xbd\x5d\xef\xc5\xe3\xeb\x3f\x17\xce\x79\x2f\x50\x0e\x18\x15\x1b\x7d\x29\x45\x43\x48\x01\xc4\x41\xab\xc2\xe9\xbc\x32\x68\x4f\x72\x92\x14\x6c\x39\x64\xf0\x45\x67\xec\xf3\x6d\xb4\x66\x85\x8c\x2b\x39\x0e\x2f\x88\xa4\x04\x26\xa8\x7b\x27\x26\x30\xf7\x60\xf1\x06\xba\x41\xb7\x4d\x40\x1c\x5c\x0a\xcf\x33\x51\x0e\xef\x49\x87\xd4\xab\x97\x6d\xff\xc4\x8e\xcb\x26\xd2\xd3\xc5\xb7\x14\xe2\xd7\x73\x8e\x7d\x4b\xc2\x62\xaa\x3b\x47\x88\x88\x0b\xe2\xe0\x52\x20\xcf\xb5\xc3\x96\x34\xe4\xa7\xc0\x23\x67\xe6\x18\xa1\xdd\x19\x67\xea\xe9\x5b\x92\x6d\x15\xb3\x73\x6f\x93\x53\x6e\x52\xdb\xa6\x41\xc4\x05\x71\x48\x52\xf8\xae\xaf\x71\x85\x59\x11\x9d\x64\x7d\xbe\x79\x84\x26\xaf\x36\xec\xed\x21\x7f\x1d\x6b\xf0\x44\x65\x66\xa8\x1f\x67\x64\x4a\x3c\x24\x05\x00\x07\x97\x42\xc9\x22\xda\xfb\x6f\x07\x93\x82\x81\xd3\x7b\x8d\xb2\xc4\xb7\x5d\x6b\x7c\x27\x05\x97\x1a\x76\x6a\x1a\xce\xe5\xef\x84\x71\x87\x1f\x40\x57\x0c\x00\x1c\xb4\x2a\x9c\xce\x2b\x83\x7c\xd6\xc9\x5e\xd9\xd0\xe3\x8b\x84\xb2\xc5\x9e\xa6\xa9\xf3\xb6\xca\x6a\xae\x92\xab\x3b\x27\xcd\xfd\x47\x3d\x82\xfb\xfd\xa4\xda\x5b\xe9\x29\x1a\x90\x57\x06\x71\xc8\x5e\x59\xf6\x49\x51\xf6\xef\x32\x2e\x85\xea\xad\x58\x34\xda\xf2\x68\xaa\xde\x07\x76\x04\x11\x87\xb9\xda\x36\x28\xc3\xcf\xc2\xf0\x79\xa0\x0e\xdb\x20\x0e\xd9\x2b\x6f\x78\x33\x38\x9a\x76\xef\xce\x86\x6f\xe3\xc7\xc8\x45\x37\xf7\xa3\x33\xb7\xf7\x11\xc8\x25\x95\xa3\xb3\xe0\x25\x62\x7f\xff\x03\xbd\xaf\x0c\xe2\x82\xe4\xfc\x61\xb3\x71\xea\x3e\xd8\xe8\x15\xb7\x23\x6f\x76\x09\x3f\x5a\x24\x12\x12\x24\x4f\xbd\xab\x30\x59\xf8\x25\xa3\x4c\x34\xea\xb7\xee\x66\xc6\xcd\xa2\xcf\x81\xec\xff\x7a\xe5\x31\xae\xf3\x77\xbd\x3f\xb4\x7d\x7f\x37\x20\xa2\x3d\xa4\x18\x26\x8a\x3b\x79\xbc\xf2\xdb\x01\x47\x7c\x03\x7f\x78\xe1\x71\xd3\xaf\x7f\x7b\x58\x95\x7d\x7d\xbc\x89\xbd\xc2\x97\x6d\xdb\x62\x9b\x4b\x6f\x2c\x1f\xda\x3b\x66\x9d\xcf\x4e\xaa\x53\x3d\x70\xd0\xf8\xb6\x29\x49\x42\xf6\xbf\xe6\x95\x41\x43\xfb\xb7\x5e\x59\x05\xee\xa7\xde\x24\x87\xb2\xe3\x63\xe2\x0e\xf1\xb5\xfe\x76\x7e\x4d\x31\x65\x44\x11\xba\xb1\xdb\xfe\x80\x22\x8e\xcf\xec\xce\x80\x15\xcb\xea\xea\x99\x1c\x79\x22\x7b\x65\x15\x12\x31\xa2\xf4\x7d\x16\xdc\xc3\x58\xbe\x38\xfb\x80\x0c\x8f\x7b\x05\x1f\x92\x9d\xcc\xe8\xaa\xca\xf1\x7d\xa3\x77\x92\x73\xef\x9e\xc9\x01\xaf\x16\xd2\x9f\xfd\x4b\x24\x38\x88\xef\x92\x67\x93\xfa\xe8\x3b\xce\x5c\xe6\x80\x94\x60\xff\x04\x3b\xb5\x96\xaa\x98\xe0\xf9\x6d\xb7\x8b\xd2\x5f\xbe\x9e\xc9\x68\x91\xbd\x72\xb6\xa5\xcf\x92\x13\x9f\x09\x56\xad\x0f\x0f\xd6\xe0\xb7\x70\x9f\x2c\x72\x2c\x9e\xfc\x2f\xae\xc4\x3a\x7f\xa5\x93\x67\xd4\x2e\xbf\x38\x93\xd1\x3e\x40\x7e\x5f\x99\x5f\xb2\x52\x87\x57\xc3\x4d\x4e\xe9\x95\x2d\x61\xf1\xf9\xcf\x4c\x9c\x1b\xbb\x01\xac\x83\x8c\x19\xce\x5f\x49\x70\x2e\xdd\x66\x39\x33\xaf\x0c\x12\xd1\x49\x09\x90\xd2\x3f\x52\x26\x1e\xf3\x4d\x0e\x49\x9d\xfe\x5f\x27\x1f\x25\x46\x21\x82\xef\x7f\x76\x2f\xd7\xd5\x8f\x51\x86\xd3\xd6\xb5\x65\x42\x0f\x2b\x80\x38\x78\x02\x54\xf9\x64\x9e\x89\x5d\x2c\xbc\xf5\x5a\xeb\x55\x82\x56\x2e\x43\xd5\x35\xbf\xd9\xb5\xa4\x8c\xfa\x06\xfd\xa6\x66\x42\xe3\x18\x12\x6b\x44\x5c\x10\x07\x4f\x80\x61\x57\xde\x0a\x66\x5b\x4d\xed\xef\xfd\xce\x67\x19\x91\x7d\x94\x2f\x18\x84\xff\x0b\xc7\xc2\x95\x3a\xf8\x5e\xa9\xfe\x05\x86\x3d\xa8\x5e\x19\xc4\xc1\xe7\x61\xb2\x2c\x27\xc3\x36\xb0\x27\x80\x4a\xc5\x98\x2a\x4e\xce\x80\xc1\x97\x24\xca\x5e\x5a\xb7\x8d\xc5\x1c\x23\x70\x4e\xef\x8d\xce\x04\x22\x2e\x88\x0b\x92\xc1\xf8\x9f\xb8\x05\x05\xfc\xcc\xe4\x91\x0e\xe6\xa8\xfa\xab\x21\x02\xeb\xb7\x8d\x7e\x45\x7a\xce\x2f\x24\x27\x7d\xe9\xd9\xfe\xf2\xd4\xa0\x80\x8f\x1a\xe1\x95\x41\x1c\xa2\x0f\xf6\xff\x2d\x1d\xe0\xad\x10\xe8\x77\x7d\x92\x12\xee\x11\xbe\x44\x2f\x5d\x95\x65\xff\x69\xf1\xda\x68\x39\x72\x37\xc4\xe8\xd3\x41\x7d\xae\xb9\x90\x4f\xbb\xa0\x63\xae\x57\xd0\x6a\x24\xd4\x20\x09\xc0\xc1\x95\xc0\x4d\x97\x38\x3c\x41\x12\xd1\x5d\x67\x8d\x91\x3d\xa5\x16\x35\xe1\xcf\xca\xa5\x99\x5c\x24\x96\xfe\xf1\x76\xf8\xa4\x95\xf8\x1a\x74\x1b\x1f\xc4\x21\xdd\xb6\x2c\x68\xc7\xbd\x48\xfd\x90\xe5\x45\x3a\x25\x6f\xe9\x90\x68\x0b\x69\xe6\x37\x8f\x73\x8d\x83\xdc\x17\x96\xcd\x22\x94\x4b\xf1\xa0\x97\x54\x41\x1c\x7c\x1e\x5e\xfa\x5f\x1f\x5f\xef\x56\x63\xb2\x5a\x7e\x2d\xfd\x2e\x74\xe8\xf2\xa8\x8f\xd1\xbc\xf9\xa2\x6f\x62\xcf\xfe\xae\x58\x6e\xde\x6c\x39\x22\x2e\x88\x83\x2b\xc1\x0a\xef\xe1\xd3\x15\xcb\x2c\x71\x4e\xbb\xf3\x69\x11\x9e\xdf\x89\xd3\xfd\xce\x33\xb7\x8a\xdd\x8c\x76\xc0\x33\x6e\x88\x32\x2a\x2d\x42\x6c\x85\x40\x1c\xd4\xe6\xf4\x74\x5e\x19\xb4\xd6\x9e\x24\x05\x34\x1f\xf5\x6d\x12\x87\xbe\xba\x9b\x6e\x77\x7e\x36\x1c\x3b\x3f\x11\x73\xbf\x23\x4e\x71\x3f\x14\xe7\x6e\x86\xaa\xd5\x55\xe3\xe2\x62\xc4\x14\x80\x38\xb8\x14\xc4\x0a\x51\x6e\xf4\x87\xe5\xc7\x10\x98\x5d\x56\x91\x2d\xa0\xbd\x46\x6a\x5b\x97\xbb\x69\x3d\xa2\x59\x3c\xf1\x4c\xee\x68\x46\x05\x2a\x05\x07\x71\x70\x29\xfc\x46\x79\x54\xa0\x52\xd5\x2b\xb4\x84\xca\x95\xbb\x10\x1e\x42\x55\x2c\x9b\xef\x4f\xae\x64\x64\x1c\x1e\xb0\xdd\x23\x77\x99\x0e\x3a\xf4\x03\x71\x48\x4d\xa0\xc3\x3b\xd7\x7e\xd2\xbd\x99\x62\x20\x99\x2e\x7e\xfe\x7b\xa1\xbf\xac\xa9\xde\xf2\x9c\x05\xd9\x0b\xf5\x11\xa7\x90\x7a\x99\xbb\x50\xc7\x5b\x10\x07\x97\x82\xc5\xf4\x55\x42\x5b\x2d\x8c\xa2\xe8\xbb\x0f\x59\x45\xe8\x8c\xd6\xca\x5e\x64\x65\xed\x68\x7c\x59\xfe\xc9\x36\xca\xf3\xdb\x94\x46\x1a\x21\x05\x10\x07\x35\x3f\xd6\x3a\x95\x14\x40\xf9\xef\x24\x29\xa4\xd2\x34\x37\x7c\xca\xf8\x25\xcf\xdf\xd3\x11\x10\x74\xa1\x72\xba\x0d\x3d\x7e\x5b\x88\xdf\x33\x57\x98\xa3\x43\xf1\xab\xe0\x65\xa8\xdb\x00\x88\x83\x4b\x61\x86\x28\x94\x5a\x22\xe0\x97\xcf\x5f\x46\xee\xf1\x69\xa7\x20\x83\xe8\x63\x89\x41\x67\xa5\x8e\x6b\xe8\xf3\xb6\xfc\x74\x62\x64\xd0\x9b\x82\x20\x0e\x2e\x05\xa6\x10\xe1\xc1\x6f\xe6\xbd\x8e\x62\xd5\x7f\xda\x0f\xf7\x9a\x9b\xf6\x59\xd9\x83\x45\x70\xd5\x0d\x9d\x0a\x5d\x5f\x3b\x63\xc7\x4f\x22\xe2\x82\x38\xf8\x3c\xcc\x8f\xc4\xda\xda\xfb\xb7\xf9\x5f\xe7\x39\xfe\xd6\xb2\xe0\xcd\xfe\xdb\xe0\x1a\x2d\x29\xe1\xc7\x3b\x57\xc4\x2f\xb7\xab\x14\xe0\x42\x6f\x0a\x82\x38\xb8\x14\xfe\xbe\xe5\x49\x4e\xb3\x70\x48\xa2\x9c\x68\xe2\x3d\x26\x55\xc9\x8b\xc2\x4d\x6b\xa1\xd0\xe8\xc6\xe5\xa7\x6b\x18\x46\xcb\xbc\xc3\x8d\x90\x02\x88\x83\x56\x85\xd3\x79\x65\xd0\x9e\xe4\xc4\x3b\xd8\x8f\x95\x0f\xba\x86\x79\xec\x23\x44\x29\xaf\x1d\xd4\xf8\x50\x68\x7e\x7e\x63\xc8\x3c\xcb\x20\x99\xa2\x1d\x1d\x9e\xc3\x69\xd8\x05\xdd\xc1\x06\x70\x70\x29\x54\x2d\xb9\x17\xd7\x63\xaf\x7d\x76\x31\xa6\x1a\x7e\x35\x5f\x55\xf2\x9c\xdf\x39\xfa\xe9\x85\x81\x3f\x98\xfd\xed\x6c\xbe\x43\xde\x1d\x88\xb8\x20\x0e\x2e\x85\x7b\x17\x2e\xe7\x91\x57\x56\xa4\xd0\x6b\xda\xf8\xa4\x6b\x3e\xcc\xdc\xee\x92\x4e\x35\xc5\x9c\x7c\x5e\x61\x63\x1b\xc0\xc3\x10\x6c\x0a\x25\x34\x00\x87\xd4\xd8\x23\xcd\xc5\x7a\x92\x65\x03\x5f\x9f\x06\x4b\x98\x79\x71\x8b\x88\xe9\x85\x80\xad\xb0\x4d\x02\xcb\x3e\x93\xe2\xf6\xeb\xfb\x06\x50\x1d\x34\x88\x83\x4b\x21\xfe\x07\xc9\x13\x77\x07\xc3\x6f\x1f\xa3\xc6\x78\xfc\xb1\x6e\x1c\x49\x09\x53\x2d\xf9\x66\xf2\xf2\xd5\x4f\x8d\x19\xcd\x27\x1d\x54\x20\xa4\x00\xe2\xa0\x55\xe1\xc1\xa9\xbc\x32\xc8\x67\x9d\xec\x95\xe3\x4d\x6b\x6f\xcb\x24\xdc\x19\x88\xeb\x34\x20\x7d\xb0\x79\x40\x7b\x83\xdd\x49\xf0\x8f\x54\xd5\x54\xbc\x09\x81\x9e\x6d\xa5\xf1\x1d\x84\xef\x04\x71\xc8\x5e\xb9\x67\x2b\x56\x29\xf3\xd2\x56\xf1\x95\xec\xa5\x43\x1c\xe1\xa2\x05\xf6\xda\x2e\x65\xa2\xf4\x25\x26\xfe\x81\x8a\xd4\x62\x63\x06\x5a\x44\x64\x10\x87\xec\x95\xd9\x47\xbf\x73\xd4\x7a\xa5\x6a\x86\x32\xad\x2e\x5b\x67\xf8\x0e\x15\x09\x2e\x19\xce\x0c\xcb\xec\x4f\xb0\xf1\xf7\x7b\xe9\xeb\x43\x77\xb0\x41\x5c\x90\x1c\x0a\x1a\x0a\xac\xed\xdd\x29\xfb\x60\x27\xeb\xa4\xad\x15\x6d\x77\xcf\x2b\x04\x49\xe0\x27\x1a\x8a\xb5\x0a\x0c\x2c\x9b\x90\xd7\x52\x66\x86\x96\xdb\x39\x4c\xce\x5b\x5e\xf8\xd7\x2b\xe7\xc6\x08\x33\xe7\x3a\x37\xdc\x8f\x34\xee\x98\x43\x31\xe6\x5c\xbf\x58\x8e\xd2\x22\x2a\x2d\x19\xdc\xf8\x70\x90\xff\x39\x0a\xaa\xe7\x3f\x28\x56\xbb\x4e\x19\xdf\xd8\x9c\x35\x76\xf0\xf5\xbe\xa0\x4e\xe2\x22\x3f\xa1\x3b\xe2\xd6\xb2\x81\x64\x11\x2c\x9f\xa4\x56\x62\x8e\xaf\xfd\xd7\xbc\x32\x68\x68\xff\xd6\x2b\x23\x79\xe5\x63\xa3\xce\xb6\x2b\x6e\xbc\x6f\x56\x48\x82\xb9\x3d\x69\x7a\xbb\x9c\x55\x6a\x5d\x9f\x1d\xde\x42\x59\xa4\xcf\xd4\x18\xc0\x45\x3b\x93\xde\x5e\xcd\xc8\x5e\x19\xbb\x66\xdd\xc3\xdc\x29\x71\x2e\x5a\xe5\x68\xe1\x41\x48\xd4\x0b\xf2\xc7\x39\x76\x97\x51\x44\x54\x42\xee\x7e\x8f\x18\xcc\xef\xd7\x3f\x93\x03\x5e\x64\xaf\xcc\x74\xc5\x23\x82\xb3\x61\x6c\x2f\xab\x32\x57\x39\xdf\x38\xaa\xc7\xf6\x81\x4a\xcd\x4d\x0f\x92\xf8\x0a\x4e\xff\xe0\x2d\x32\xb6\x8d\x33\x19\x2d\xb2\x57\x96\x7b\xbf\x35\x95\x4a\x35\x23\x19\xb2\x81\x53\xa8\xd0\x4d\xd9\xf2\xd1\x7f\x4b\x94\x6e\x2c\x72\x76\xb3\xef\x86\x85\x99\xdb\x8b\xab\x67\x32\x5a\x64\xaf\x5c\xf1\x22\x44\xe0\xbc\xc5\xbd\x84\xe9\xe8\x11\xe9\xc6\x4e\xdd\x90\xb6\xfa\x6a\x4b\x82\x54\x1e\xfa\x0a\x55\x85\xa5\x73\xf9\xbf\x33\xce\xcc\x2b\x83\x44\x74\x52\x02\xdc\x4b\x38\xcf\x1d\x60\x5e\xcd\x11\xb6\xe4\xee\x5a\xca\xa1\x91\xe7\xc8\x60\x19\x1d\x1e\x90\x22\xb8\xf3\x2b\xcd\x8a\x49\x8c\x0b\x1d\xb1\xf0\x83\x38\x78\x02\x74\xbd\x19\xab\xbc\x52\xfa\x87\xe4\xb6\x77\x77\x5d\xc3\xee\x34\x5d\xfd\xd7\x45\x83\x32\xc9\xbc\xb6\xca\xba\xe8\x2e\x87\xab\x0f\xa1\xd3\x39\x10\x07\x4f\x80\x8d\xee\x36\x29\x22\xe9\x46\x21\x0d\xa4\x14\xb5\x52\x0e\x04\xd8\xdc\x2e\xdf\x0a\x0d\x8a\x94\xeb\x5b\x1c\xdb\xce\x8f\xdf\xd4\x83\x6e\xde\x82\x38\xf8\x3c\xe8\x13\x76\xd1\x59\x07\xd5\xd0\xe6\x2e\xcc\xd4\xd3\xf8\xf9\x0f\xbe\x7f\x58\xc3\x26\xe5\x3e\x1e\xef\xfb\xd4\x68\xe2\x0f\x89\x17\x54\xb7\x0d\xe2\x82\x64\xfe\xf7\x95\x7a\xb3\x21\xff\x02\x2e\x1b\xcb\x68\x4e\xab\x19\x87\x57\x7e\x32\x26\xef\xf6\xfe\x8c\x9a\x8d\xca\x25\x1e\xff\xfd\xb0\xfc\xb7\x75\x7c\x09\xe1\x95\x41\x1c\x54\xaf\x7c\x2a\xaf\x0c\xfa\x5d\x9f\xa4\x84\x72\xc1\x0f\x95\xb6\x04\xf5\xb4\xb9\x5a\xb1\x35\x8a\x0a\x25\xbf\xe3\x5a\xee\xa9\xce\xae\xf5\x59\x54\x1e\xc6\xa9\x77\xfe\x51\xfb\x82\x98\x01\x10\x07\x57\x82\xc7\x92\xc1\x90\x73\xe2\x74\xa6\xf6\xb3\xdf\xaf\xb3\x96\xe8\xd4\x9f\xa1\xfa\x88\x99\x2e\xd6\x9a\xe6\x8e\x92\xc8\x27\xaa\x9a\xf0\x42\x5d\x71\x00\x1c\x5c\x09\x4a\x77\x3a\x59\xb0\x3f\x0f\xd4\xb6\x2f\x61\x6c\xbe\xfc\xac\xcc\x3f\x43\x7a\xfe\x3e\x95\xe9\xa7\x8f\xd1\xca\xfe\xb6\x7e\x9f\x99\x49\x10\x71\x41\x1c\x7c\x1e\xee\xec\xe3\x2e\x5e\x73\xc2\xdb\x8c\x90\xf7\xd0\x22\xfa\xb1\x7e\x8c\x9e\xc8\x8c\xbe\x88\x15\x36\x2f\xe1\xd3\x29\xf6\xd5\xf6\xa9\x3d\x74\xdb\x12\xc0\xc1\x95\xa0\x45\xf4\x45\xe4\xfe\x9b\xa9\x77\x0c\xe4\x45\x7c\xaa\x42\x31\x63\xfe\x43\x0a\x73\xa4\x3a\x5c\x8f\xb7\xfa\xa8\x25\x85\xae\x33\x8e\x21\xb6\x42\x20\x0e\xaa\x4c\x3c\x9d\x57\x06\xad\xb5\x27\x49\x41\x70\xe8\xb5\x9b\x7b\x14\xd9\x7b\x8e\xcc\x59\xb7\xab\x19\x9b\x28\x57\x95\xb7\x6a\x38\xe2\x14\xdd\xb4\x9f\x6b\x5c\xca\x99\xd0\x85\x7a\x7b\x81\x38\xb8\x14\x3e\x0e\x98\x4e\xec\x09\xd8\x7a\x35\x19\x52\x51\x04\x13\xd0\x76\xa0\xd7\x8c\xbf\xa8\x5d\xca\x65\x36\x7e\x35\x36\x7c\x43\x02\x05\xba\x6d\x09\xe2\xe0\x52\xb0\x68\x55\x43\x3d\xcf\x22\xf5\xf2\x65\x83\x90\xde\x0b\x61\xc5\xb9\xe5\x6c\x87\x73\x3f\xbe\x9e\x77\xb8\x5c\xb3\x9d\xad\xf1\x92\x51\x12\x11\x17\xc4\xc1\xe7\xc1\x9e\xa7\xba\x31\xed\x88\x29\x6d\x2e\xcd\x83\x7c\x5c\x86\x7f\x43\x93\xc6\x91\xf9\xb7\xfd\xaa\x2d\xaf\x56\x44\xea\xb4\x33\xe6\x35\x44\x5c\x10\x07\x97\xc2\xbe\xd4\x16\x2f\x7b\xfd\xa4\x65\xbf\x46\x80\xa3\x4c\x9e\x10\xdb\xd0\x9f\x0f\xb2\x15\x06\xcd\x35\x46\x5b\xa8\x9d\xba\xee\xe8\xbf\xa1\xde\x5e\x00\x0e\xaa\x4c\x3c\x9d\x57\x06\xe5\xbf\x93\xa4\xd0\xf4\xd8\x0e\xb7\x44\x61\x5e\xd0\x6d\xf2\x4b\xc4\xca\xb0\xf2\xfd\xbc\x4e\xbb\x77\x3c\x86\x6c\x6e\x0b\x7d\x6f\xc4\x3c\xa3\xff\x38\x22\xa6\x00\xc4\xc1\xa5\x80\x7a\xa4\xab\xab\xa0\xe9\xfa\x69\x9a\xda\xc6\xaa\x21\x30\x9f\x8d\x36\xbc\xed\xd3\x17\xb5\x48\x07\xd2\x2a\x1d\xa3\x66\x33\x19\xe8\x0e\x36\x88\x83\x4b\x61\xfc\x56\x77\x80\x20\x5f\xb0\x4e\x3d\xa6\xfb\xb3\x76\x36\x0f\xdb\xf3\xbf\xb5\x9c\x13\x2d\x5f\xfd\x9e\x9f\x12\x8c\x12\xbd\xaa\x01\x7d\xde\x00\x71\xf0\x79\xf0\x28\xa9\xc5\x38\x10\x91\xf3\x24\xa9\xa2\x9c\xf8\x1c\x9e\x87\x8b\x5f\x5b\x2a\xc8\xf8\x30\x33\xc3\x89\x5d\xed\x6d\xcc\x27\xf7\x60\x68\x15\x03\x70\x70\x29\xb0\xcf\x7b\x17\xb7\x0b\xfc\x38\x94\x51\x7b\xac\x32\xfd\x58\x30\x6c\x4f\xfa\xd1\x97\x42\x2a\x5c\x06\xb1\x6a\x7b\xc7\xe0\xcf\x87\x50\x1f\x6c\x10\x07\xad\x0a\xa7\xf3\xca\xa0\x3d\xc9\x49\x52\xc0\xe3\x31\x55\xee\x5d\x15\xc2\xb3\x7f\xe6\xfe\x7d\xe1\x58\xda\xf8\x7b\x02\xa9\xe2\x08\x79\xe4\x33\x39\xc6\x4f\xec\x95\x5b\x8a\x15\x88\x29\x00\x71\x70\x29\x90\xf0\xb9\x9a\xb2\xef\x3d\x23\x34\x1d\x73\x1b\x55\x9a\x67\xed\x1a\xba\xaf\x5c\xed\x77\x45\xa9\x30\xc4\x7c\x12\x35\x79\x13\x15\x6a\x3c\x01\xe2\xe0\x52\x40\x1f\x9e\x5a\x19\xd5\x08\x99\x17\x95\x7d\xbf\xd0\xa2\xd7\x77\x8d\xe5\x1c\xdd\x7b\x6a\xf4\x94\x85\x80\x08\xbe\x0e\x33\x57\xe1\xcf\x88\xb8\x20\x0e\xe9\xb3\x89\xc6\xfb\xf3\xc7\x8b\x1a\xe7\x7a\xcb\xd0\xe6\x44\xef\xe9\xb3\x9e\xeb\x7d\x85\x73\xbc\xe5\xe2\x81\xb7\xb2\x32\xfa\x5e\x9b\x07\xfa\xf7\x82\x38\xb8\x14\xa6\x9c\xa9\xe9\xc3\xf2\x2c\x0a\x2f\x44\x38\x5b\xf9\x50\xdf\x93\xec\xac\x57\x08\xd9\x5f\xf9\x39\xcb\xa1\x51\x26\x79\xa0\x99\xee\x8e\x90\x02\x88\x83\x56\x85\xd3\x79\x65\x90\xcf\x3a\xd9\x2b\x57\x77\x5e\xaf\x0c\xa2\xfc\x3a\x40\x6f\x3e\x23\x7e\x53\xfe\x5d\x66\x8a\xc5\x07\x59\x57\xc9\x4b\x52\x97\x72\x2d\xe2\x15\x08\x7e\x42\xe7\xca\x20\x0e\xd9\x2b\x5b\xa5\x64\x96\x3c\xb6\x95\xc0\xe2\xf9\x5c\xb5\xbb\x7f\x55\x53\x77\xf3\xe9\x42\xf5\xb3\x2a\x42\xb7\xa1\x0b\x02\x4d\x3e\x17\x87\xa5\x10\x91\x41\x1c\xb2\x57\x26\x2c\xc2\x60\xb9\xf9\x72\xfe\x01\xa7\x57\xa7\xeb\xdb\x4b\xdf\xd5\x4a\xdb\x24\x2f\x07\x0e\x4c\x6a\xed\x4f\x64\xfc\x9d\xda\x7e\x13\x8a\x88\x0c\xe2\x90\xbb\x86\x9d\xba\x0f\x36\x15\x29\x79\x5a\xc7\x2d\xb9\x48\x71\x0d\xa2\x5b\xf7\xab\x74\xee\xd3\xf0\x89\xda\x1f\xa4\xf9\x97\xa1\x0b\x7c\x8c\x3e\xe2\xdf\x29\xfe\xd7\x2b\x07\x17\x61\x74\xfe\x41\x1f\x13\x88\xc7\x1c\xe1\xea\x53\xb9\x49\x9c\x32\x5d\x84\xff\x23\x2d\x70\xf8\xc5\x6c\xcd\xd8\x60\x0c\xaf\xc6\x3f\x68\x78\x93\x7a\xb6\x3d\xf5\x35\x5e\x8f\x27\x9e\x97\xc3\x5d\x6f\x1c\x35\xb9\x48\x61\x44\xe0\x54\xde\x4c\x79\x83\x61\x41\xc9\xd9\x2d\xfa\x5f\xf3\xca\xa0\xa1\xfd\x5b\xaf\x8c\xe4\x95\x79\x38\xc8\x34\xc9\x27\x39\xf9\x82\x19\xda\x26\x30\x46\x8a\x2c\x7a\x73\x88\x66\x9a\xc8\x7a\x79\xd5\x44\x15\x9a\x3e\xae\x69\x39\x9f\xc9\x91\xa7\x00\x92\x8d\x73\xfa\xf4\xed\x68\x32\xab\xa6\xee\xda\x74\x25\xb1\xae\x8c\x22\xea\xb3\x58\xb3\x27\x1f\x1e\xea\x92\xea\x7b\x75\xd5\x92\x50\xe2\x17\x9d\xc9\x01\x2f\xb2\x57\x7e\xba\x6b\xfd\xb8\xf1\x20\xd4\x45\xf4\xaa\x93\x9c\xf1\x15\x61\xbf\xe0\xd5\xbe\x60\x4c\x83\x12\xd1\x9e\xc7\x99\x85\xfc\x8f\x89\xb9\xcf\x64\xb4\xa6\x48\x7f\x56\xc1\xd9\xdc\x39\xc9\x88\x60\x5b\x51\x2e\x74\xf7\xb1\xa2\xa7\x12\x13\x3e\xc5\xc2\xfb\xa8\x68\x6c\x29\xd4\xa6\xc8\xe4\x57\xf9\xf5\x67\x32\x5a\x64\xaf\xbc\x28\x60\x99\xfe\x3e\x72\xf7\xd3\xc5\xcb\x1f\x88\x54\x7e\xe1\xd9\xb8\x57\xcd\x0c\xbf\x72\x4c\xc6\x6b\x9d\x9c\x18\x8e\xf0\xe9\x74\x3b\x33\xaf\x0c\x12\xd1\x89\x6f\x82\x0c\x61\xed\x76\xe3\xc8\x4f\x3b\xfd\xbd\x36\xfc\xc2\x47\xa2\x5d\x18\xe5\xb3\x98\x91\x74\x1c\x5b\xa7\x11\xf7\xfe\x27\x5a\x4d\x69\xc4\xc2\x0f\xe2\xe0\x09\xf0\x46\x89\xe4\x0f\x89\x96\x99\xb5\x6c\xa5\xdb\x46\x6c\x1e\xcf\x23\xa7\x3d\x83\x3f\xa3\xa7\x6b\xbf\xd9\xb4\xce\x67\xa0\xf0\xf3\xd9\x41\xc4\x05\x71\xf0\x04\x28\xf5\xba\x24\x23\x9c\x0e\x5b\x09\xf5\xd6\x5f\xf4\xb0\x77\x2f\xea\x8e\x6b\xc7\x18\xdb\x4d\xd3\x99\x5c\xdf\xfd\x61\xeb\xd0\x3c\x2e\x44\xc4\x05\x71\xf0\x79\xf8\x3d\x42\xd6\x49\xe3\x36\xf6\xd3\x65\xc8\x27\x67\x97\x08\xfb\xae\x87\xc8\xd2\xc2\xeb\xae\x67\x0f\xde\xfd\x52\xdb\x7e\xa2\x9e\x38\x0e\x1d\x4d\x01\xb8\x20\x19\x14\xb4\x7f\xe3\xce\x1a\x28\xf6\x09\x12\x9a\x6c\x71\xe8\x70\xba\x57\x26\xd0\x75\x7b\x6b\x49\xb6\x11\xce\x4b\x44\x60\x7f\xdc\x31\xbf\x48\xa2\xd7\x81\xf0\xca\x20\x0e\xaa\x57\x3e\x95\x57\x06\xfd\xae\x4f\x52\x02\x05\x7f\xdc\x23\x1d\x0f\xaa\x8a\x04\x67\x31\x02\x8c\xee\xd4\x23\x03\x29\xbe\x1a\xef\x2d\x0d\x96\x91\xb8\xb2\xe1\x81\xb0\x8d\x41\xc4\x0c\x80\x38\xb8\x12\x36\xeb\x0b\x51\x96\xcb\xaf\x4c\x7d\xfc\xcb\xa8\x5b\xa6\x1b\xe0\x70\xf3\x06\xce\xcf\x82\x8b\x66\x7d\x09\x7e\x2d\xf7\xa6\x52\xd7\x53\x10\x71\x41\x1c\x5c\x09\x9c\x7f\xb4\x5d\x74\x09\xaa\xab\xcf\x5b\xd8\xb8\x7f\x92\x16\x7f\xab\xe8\x72\x01\xf5\x76\xdd\x30\xed\x8d\xc2\xe6\xd7\x81\xb1\xd3\x5a\x88\xb8\x20\x0e\x3e\x0f\x0e\x1d\x38\x5d\x8f\x24\x27\xe2\x8d\xec\xd0\x7c\x08\x3b\xd0\x08\xf9\x56\x6a\xaf\x31\x9c\x5f\xca\xab\xe0\x75\x60\x71\x4a\x7f\xa8\x87\x88\x0b\xe2\xe0\x4a\xc8\x43\x91\xdf\x60\x99\x70\x8d\x55\xf8\x6c\xbe\xf9\xba\x83\x65\xe3\xaa\xda\x87\xbf\x59\x44\x7e\x68\xef\xd7\xe6\x6c\xbe\x53\x6f\x6f\x20\xb6\x42\x20\x0e\xaa\x4c\x14\x38\xd5\xae\x18\xb4\xd6\x9e\x24\x05\xbd\x48\x53\xab\x3b\xf8\xc6\x0a\x73\x01\xac\xbb\x81\x0b\xd8\x5c\xaf\xf6\x29\xdc\x34\x96\x54\x78\x98\xef\xfd\xe1\x62\x65\x54\x80\xba\xed\x80\x38\xb8\x14\xc2\xde\x52\x5e\x10\x22\x95\xff\x96\xa6\x6f\x3e\x71\x8b\x68\xf4\xe8\x43\x9c\xfe\x73\xf1\xc7\xf7\xdd\x1e\xa0\x3e\xc8\x40\x71\x2a\x86\x3e\x6f\x80\x38\xb8\x14\x92\x37\xde\x1d\x98\xac\x25\xb5\x11\x3d\xc0\xbe\x73\x4e\x21\x4a\x31\xb7\x28\x60\xde\x3e\xe6\xe3\xd3\x47\xab\x22\x7f\xaf\xce\xbd\xae\x46\xc4\x05\x71\x48\x77\xd1\x55\x37\x9f\x30\x24\x4d\x8e\x3d\x34\x49\x7e\x18\xd4\xed\xee\xf6\xa1\xed\x0a\xd3\xa1\x9f\x5d\xbc\x7a\xf9\xc5\xe7\xd5\xe1\x8e\x8a\xd0\x5d\x74\x00\x07\x97\x02\x29\xab\x5c\xcf\x2d\x21\x4e\x94\xbc\x48\x4a\xcf\x1e\xb3\xb6\x5b\xaa\x6c\x22\x35\x79\xf8\x2f\x59\x1d\x7e\x55\x45\xdc\xa5\xb3\x24\x41\x48\x01\xc4\x41\x95\x89\xa7\xf3\xca\xa0\xfc\x77\x92\x14\x7e\x39\x9f\x7f\xe5\xe5\xa3\xad\x5e\xa1\x73\xb3\xed\xbb\x3c\x01\x89\xfc\x2a\xe7\xb6\xcd\xfc\x2d\x51\xff\xe4\x43\xd7\x1b\x0a\xdb\x64\x88\x29\x00\x71\x70\x29\x44\xe2\x18\x5d\x0e\x6b\x30\xde\x9f\xea\xd1\x91\x52\x77\x46\x5b\x7b\x91\x22\xbc\xbd\xa8\x78\x53\x9f\x69\xab\x9d\x3d\xbc\xb2\x07\x3a\xaf\x06\x71\x70\x29\x58\x35\x47\x6c\x25\xe7\x10\x6d\xe0\xcc\xd1\xef\x3f\xba\x9e\x1b\x97\x21\x37\xeb\xa4\xf8\xe4\x13\x41\x4d\x80\x0d\xd3\xd5\x0f\x43\xdc\x88\xb8\x20\x0e\x3e\x0f\xe3\x83\x9d\x34\x56\x98\x5a\x54\x37\x23\xcb\x89\x98\x5d\xc7\x8c\x72\xe4\x8a\xda\xa9\xd3\x8e\xf2\x57\xe5\x9e\x7a\xca\x5d\xab\x88\x86\x3c\x38\x80\x83\x4b\x81\x88\xed\xa5\x32\xbf\x9f\x6e\x82\x13\xee\x28\x8b\xa7\x93\x4d\xde\xcd\x0d\xd3\x0e\x0f\xcf\xbf\x87\xc5\x79\xf1\x76\x4d\x9d\x96\x84\x08\x29\x80\x38\x68\x55\x30\x3d\x95\x14\x40\x7b\x92\x93\xa4\xf0\x92\xd8\xb9\x8e\x56\x20\x2c\x96\xe7\x5e\x75\xfa\x37\xa9\x76\x8d\x0b\x8b\x01\xec\x59\xa1\xcc\x58\xda\xfc\x87\x0f\xc7\xdb\x09\x12\xa1\x0b\x37\x00\x0e\xa9\xbd\x59\x62\xbc\x92\x5e\xd9\xba\xff\x74\x79\x9a\x1b\x9e\x03\x49\x40\x65\x43\x3f\xd3\xcd\x8d\x8b\xf7\xec\x4b\x13\x8c\x1c\xf0\xbb\x0d\x10\x71\x41\x1c\x5c\x0a\x78\xb2\xea\xce\x04\x34\x8f\xcf\x69\xef\xbc\xec\xab\xd5\x30\xfd\x25\xea\xa1\x93\xe1\xfe\x79\x5b\x02\xdf\x94\x5d\xff\xd6\xd4\x25\x57\xc8\xdb\x03\x38\xf8\x3c\x7c\xca\x90\x9c\x3a\xe8\xca\x27\xcd\x17\xf4\x59\x4a\x33\xaa\xd6\xd5\x0e\x76\x17\xbf\x26\x6a\x92\x75\xf0\x26\x21\x4e\x2c\x7e\x1a\x6a\xb5\x0e\xe2\xe0\x52\xe0\xd8\x4e\xc1\xf4\xff\xe1\xcf\x44\xbf\x1e\xd3\x48\x36\xb1\x59\x86\x92\x12\xbb\x67\xf0\x44\xfe\x8e\xd6\x6f\xec\x8f\x7f\x5a\x82\x32\x11\x52\x00\x71\xd0\xaa\x70\x3a\xaf\x0c\xf2\x59\x27\x7b\x65\x4a\x02\x2e\x76\x25\x5e\x29\x0d\xe9\x8e\x35\x0d\x62\x51\x5b\x02\xb3\x80\xa5\xe4\xb7\x59\x4a\x93\x16\xe7\xca\xde\xf6\xbc\x2c\x16\x42\xf8\x4e\x10\x87\xec\x95\xa7\x1d\xe6\xf8\x8e\x09\x50\x43\x24\x73\x0e\x65\x7b\x5b\x47\x36\x9e\xb0\xf2\x18\x7e\x5f\x70\xf5\x3d\x97\x46\x14\x3d\x62\xed\x91\x8d\x88\x0c\xe2\x90\xbd\x32\x43\xb2\xc6\xdd\x10\x14\xf6\xf6\x0b\x4e\xfd\x91\x4c\xcf\x14\x72\x0d\xdd\xd8\x71\x2e\x76\x2e\x60\x61\xf1\x12\x53\x89\xc8\xb6\x84\x21\x22\x83\x38\xe4\xc8\xa7\xee\x83\x9d\x62\xf5\x8d\x44\x11\x67\xc2\xe1\xcd\xdf\xc4\x30\xe1\x9e\xdf\x7f\xf8\xe5\x2a\x73\xb4\x2b\xd8\x6a\xe9\xb6\x13\x59\x82\x76\x74\xd2\xff\xf5\xca\x39\x96\xfe\xa9\xec\x24\xe3\xb7\xd2\x42\xb2\x24\x51\xd6\xab\xbf\x77\x6c\x06\xbd\x5a\xb7\x8e\xf3\x4f\xa4\xb5\x32\xe5\x7e\x3c\xfe\x6f\xe3\xe5\xc2\xf1\x58\xaf\xb7\x52\xe9\xc7\x1d\x6c\x28\xb7\x83\x0b\x94\x8a\xae\x55\x13\xa2\xf6\x8f\x31\x77\x7c\xfa\xee\x89\xb2\x1c\x72\x4e\xe3\xbf\xe6\x95\x41\x43\xfb\xb7\x5e\x19\xc9\x2b\x4b\x10\xfe\x64\x61\x96\x77\xfd\xbd\xe4\x1d\x17\xfd\xc6\xdd\x6e\xe7\xd2\xce\x5c\x54\xe1\xdd\xf8\xfe\x88\xf9\xfc\xb9\x5b\x97\x88\x94\xcf\xe4\xc8\x13\xd9\x2b\x5f\xb1\xc4\xf4\x2f\x1a\xf2\x33\xfa\x12\x99\xd6\xc3\x43\xa5\x7a\xef\xdc\x8e\xd8\x9a\x6f\x20\xf6\xa8\xea\xe7\x75\x36\xb7\xea\x2b\x4a\x67\x72\xc0\x8b\xec\x95\x83\x9d\xe6\x2e\xaa\xab\xdd\x29\xdd\xb3\x1a\xcd\xbe\xcc\x9f\x47\xab\x60\xbb\xfa\x89\x94\x35\x73\x76\x16\x37\x55\x4e\x19\xaf\x6a\xe0\x4c\x46\x8b\xec\x95\x49\x2e\x5e\x93\xd9\xb3\x27\x2c\x44\xc3\x1f\x36\xf5\xf3\x09\xe2\xdd\x7c\xa0\xda\x75\xd7\xa1\x42\xc9\x35\x96\x7e\xdd\xfa\x91\x7b\xec\x99\x8c\x16\xd9\x2b\x7f\xf3\xd1\x12\xc8\xb1\xee\xd2\xca\xe7\x1f\x63\x59\x0d\x9f\x65\xe8\x5e\x46\xa1\x09\x8d\x75\xd1\xfa\xa9\x60\x15\xe4\x4c\xb4\x75\x76\xef\x2b\x83\x44\x74\x52\x02\x74\x5f\xd4\x61\x4d\x4f\x1c\x10\x3e\xb6\x5f\x9a\xf4\xef\xb7\x53\x48\x65\xdd\xa1\x5a\xaf\x4c\xfd\x4d\x66\x10\x31\xdf\x40\x5e\x05\xd5\xff\x82\x38\x78\x02\x94\xa6\x76\xea\xba\xa0\x3b\xa7\xa0\x9c\x57\x6e\xe1\x10\xc2\x25\xae\xa0\x24\x45\xb2\x70\xa7\xf6\xe5\x2d\x02\xf7\xb7\x15\x0b\x46\xd0\x9e\x05\xc4\x21\x1d\x21\x15\x57\x5c\x42\xc5\x9f\x0b\xff\xee\xdd\x5c\x42\x45\xff\x92\xdf\x7b\x43\xf0\x16\xef\x03\x23\x29\xb3\x7a\xc1\xe4\xbe\xc2\x10\x5b\xe8\x08\x09\xc0\xc1\xe7\x81\xd5\xa3\x14\xb7\x11\xff\xd1\x8a\xf7\x04\x65\x4f\xa2\xdf\x65\xe3\x2e\x69\x41\xac\x95\xb2\xd6\x0f\xc1\x13\x1c\x45\xaf\xef\xc5\x40\xa7\x9f\x20\xee\xff\x12\xd5\xff\x7c\x71\x54\x7f\x6f\xc9\xe7\x4b\x52\x8e\xbe\x48\x28\xf2\x7c\x09\x57\x91\xc0\xf8\x68\x48\xe6\xe0\xfc\x93\x67\xc2\x58\x74\x7b\xf4\x02\xe8\x08\xaf\x0c\xe2\xa0\x7a\xe5\x53\x79\x65\xd0\xef\xfa\x24\x25\x28\x8b\x8d\xd2\xc4\x62\x0c\x06\x44\x7c\xe3\x65\x6f\x2f\x18\xcf\x77\xff\x44\x52\x68\x89\xd9\xc0\x94\x4c\x12\xa6\x54\x63\x3b\x05\xbd\x1e\x06\xe2\xe0\x4a\x38\x1f\xc3\x61\xb5\x70\x91\x84\x5f\x8f\xb9\xc5\xe1\x4d\xa0\x34\x76\xa5\x8b\x58\x59\xde\x9b\x43\x2d\x3d\x6d\xfc\xe1\x8c\x2f\xd6\xb1\x88\xb8\x20\x0e\xae\x04\x89\x50\xe3\x77\xbe\x89\xe8\x1f\x86\xf8\xde\x3a\xb4\x7f\x35\xfe\x76\xb3\x98\xc5\x75\xc8\x5c\x60\xf7\x8b\x90\x80\xb8\x9b\x7a\x1b\xf4\xca\x17\x88\x83\xcf\x83\x9a\x6f\xae\xb4\x43\x7b\xb9\x0c\xfb\x55\xab\xf8\xbb\xc2\xbc\xcd\x56\x47\x12\x57\xca\x9c\x74\xfa\x2e\x0b\xd7\x98\x3e\x57\x9e\x80\x0e\x3f\x41\x1c\x5c\x09\x6f\x2d\x87\xcb\xb5\xae\x07\xcc\x87\x26\xdb\xdd\xc4\x60\xdc\x31\xb1\xff\xb1\x1a\x8c\x4a\x7a\xed\x9b\x69\xbe\x5a\x17\xc5\xc0\xea\x0d\xc4\x56\x08\xc4\x41\x95\x89\xa7\xf3\xca\xa0\xb5\xf6\xc4\xd7\x61\x0e\xc2\x06\xf4\xb4\x96\xa6\xde\x75\xbe\x50\xd5\x5e\xd8\x73\xae\xe8\x6b\x11\xb3\x5a\xcd\xde\xbe\xa2\xa6\x19\x29\x3b\x12\xcb\x82\x98\x02\x10\x07\x97\x02\x67\x3f\x11\x8d\x7f\x70\xdd\x44\xa4\xa3\xa9\x90\xff\xe7\x8f\x15\xf2\x23\x9c\x44\x8e\xa6\xf3\x71\x9f\x86\xb5\xb8\x70\x7a\x5b\xa1\xee\x40\x20\x0e\x2e\x85\x73\x6b\x6c\x4c\xf7\xcf\xfb\x13\x4f\x4b\x19\x30\x58\x06\x72\x90\xa6\xdf\x8a\x7b\x12\xc7\x79\x5d\xea\xf9\x07\xe5\x8f\x06\xfa\x4c\x97\x11\x71\x41\x1c\x7c\x1e\xb6\xb7\x6e\xbe\xfd\x2d\xfa\xe6\x53\xe4\x81\xb9\x7a\xbb\x8a\xd9\x8d\x85\xd0\x2c\x74\x97\x63\x01\x7d\xf9\xca\xe9\x34\x86\xb6\x12\x68\xb1\x01\x71\x70\x29\x3c\xfc\x3a\xac\xef\x6a\x61\xce\x11\xe0\x43\x2c\x15\xa2\xc5\xb6\xbb\xf0\xda\xee\xd3\x10\xe1\x1d\x3a\x01\x73\x46\x6e\xa3\xf4\xb4\x48\x84\x14\x40\x1c\x54\x99\x78\x3a\xaf\x0c\xca\x7f\x27\x49\xe1\xc7\x8c\x22\xd6\xab\xbd\x3f\x72\x49\xdf\xc4\x2e\xbe\x9a\x9e\x1e\x38\xb8\x30\x11\x5d\xfc\x21\x57\xe7\x88\x27\x65\xf6\x2d\x6a\x08\xd4\xaf\x1a\xc4\xc1\xa5\x70\xa1\x42\x21\xad\x87\x30\x64\xcd\x94\xb4\xc8\x3c\x52\x25\xca\x93\x19\x47\xf7\x42\x56\x40\xbf\x9c\xac\xcd\x23\xcf\xad\xd4\x6f\x50\x93\x62\x10\x07\x97\x02\x2b\x3e\x97\x73\xe3\xf7\x72\x06\x1a\x0a\x3b\x33\xbd\x6d\x2d\x32\x71\xdf\xa2\xe8\xb4\xa8\x1b\x1a\x6c\x18\x5f\xa2\x3f\xbe\xee\x80\xde\xf5\x07\x71\xf0\x79\x20\xbd\xfb\x3a\x3c\x43\x6b\x62\x21\x6d\x58\x77\x52\x68\x4a\x79\xb1\xb8\x9f\x7d\x2a\x5d\x91\x20\x25\x97\x7d\xad\xb9\xb3\xa5\xeb\x2a\x22\x2e\x88\x83\x4b\xc1\x49\xa3\xe6\xca\xa5\xc4\x24\xf1\x98\x72\xd3\x74\x55\xab\xbc\x98\xfd\x48\x6f\xbb\xe7\x91\x5e\x9a\xfa\x18\xf9\x46\x21\x8d\x69\xd0\xaa\x00\xe2\xa0\x55\xe1\x74\x5e\x19\xb4\x27\x39\x49\x0a\x6e\x4c\xf7\xde\xfc\x70\xc6\x4a\x15\x5d\xa0\xdf\x21\xec\x6d\xad\x7b\x81\xf9\x1e\x5d\x25\xd1\xe3\xb2\x9b\xe2\xe7\xc2\xec\xda\x7d\xa8\x15\x38\x88\x83\x4b\x81\xf4\x57\xcb\xef\x25\x1e\xf3\x02\x15\xa2\xe1\x06\x97\x9e\x97\x98\x3f\xb9\x38\x45\x64\x5d\xaf\x65\xb7\xe3\xad\xb8\xf5\x2d\xca\x42\xad\x42\x40\x1c\x5c\x0a\xb4\x42\x4c\xc1\x02\x33\x0f\x9d\x84\x1d\x83\x35\x3d\x13\xc6\x62\xa6\x23\xa4\x49\x69\x19\x74\xf1\x0c\x58\x17\xac\xd5\x7d\xa9\xa0\xde\x5e\x20\x0e\x49\x0a\x8a\x5b\xdf\x3c\x0d\x79\x5e\xa3\x85\x4f\x88\x28\x6d\x7e\xc7\x4c\x36\x3d\xb7\x3b\xdf\xab\xea\x9e\xe4\x39\x36\x94\xbb\x18\x6d\x08\xfd\x7b\x01\x1c\x5c\x0a\xfb\x95\x39\xb2\xf3\x05\xf5\x0f\x8d\xf2\x6a\x8d\x33\xd6\xb7\x98\x4c\x05\xb5\x8a\x74\x58\xe9\x1a\x36\x35\xb9\x7e\x39\x4d\xb9\x3e\x87\x6e\x9b\x00\x38\x68\x55\x38\x9d\x57\x06\xf9\xac\x93\xbd\xf2\x5e\x89\x56\xec\x48\xd6\x8b\xab\x5f\x64\x3b\x99\xec\xef\xdc\xfa\xe5\xc3\xd7\x27\xc0\x7d\x89\x97\xfd\xc0\xba\xe1\xd5\x74\xc3\xb7\x40\x84\xef\x04\x71\xc8\x5e\xd9\x90\xac\x6b\x31\xb4\x61\x7a\xff\x16\xd7\x4f\x8b\x4f\xf8\x72\x97\x53\x2a\x63\xc9\xf2\xba\x9c\xbd\x5e\x78\x38\x65\x56\x1d\xcb\xb6\x42\x95\xd0\x00\x0e\xd9\xd1\x3e\xf7\x79\x20\xdf\xbc\x5b\x2d\xbc\x6f\x33\xfc\x4d\x62\xca\x79\xda\x19\xe3\xf3\xf7\xa8\x7e\xfc\xf7\x54\x68\x06\x32\x24\x86\x8b\x2a\x88\xc8\x20\x2e\x48\xee\xff\x66\xf2\x7f\x16\xf4\x73\x63\x91\x09\x53\xe1\xb2\x84\xdb\xcf\x03\x0d\xf5\xb5\xb4\xe3\x3b\x30\xac\x9f\x9c\x33\x9a\xee\xab\xbf\xa9\xf5\x4a\xcf\x10\x1f\xf2\xca\x99\xa3\xf7\xbb\xcb\x66\x4a\x52\x0b\xd8\x3c\xc4\xce\x57\xdf\xa1\xaf\xb5\xd2\xfb\xfe\x63\xe5\x0a\xb6\x55\x71\xe9\x7a\x9f\xd4\xcb\xc0\x7f\xbd\xb2\xf8\x7d\x3f\x74\xa6\xf8\xcf\x74\x47\xba\x05\xd5\x66\x7f\x64\xf2\x5c\xd1\x2a\xdf\x19\x70\x8c\xd1\x88\x8f\xbf\xd8\xfa\x29\xa7\x28\xfc\x0f\xaa\x22\x27\x6f\x72\x39\x93\x44\x30\xeb\xdb\x0f\xd1\x26\x2e\xb3\x73\x3f\x54\x18\xcc\x0e\x1e\xf3\x73\x35\x60\x98\x3d\xd6\xbd\x75\xa9\xe1\xbf\xe6\x95\x41\x43\xfb\xb7\x5e\x59\x15\xee\xa7\x62\x7a\x0e\x8e\x72\x1e\x49\xad\xdd\x63\xe3\xf3\x17\xff\xa3\xea\xe7\x9b\x80\x77\x27\x8b\xc2\xfa\x16\x95\x74\x9d\xe8\xd7\xd6\xa8\xce\x33\x39\xf2\x44\xf6\xca\xa9\xda\xf7\x6e\xf3\xbe\x18\x68\x14\x39\xcf\x62\x6d\x8a\x4e\x45\xe9\xd6\x97\xca\x22\x46\x39\xfe\x45\x3f\xa7\xf4\xef\xaf\x52\x5d\xb4\x33\x39\xe0\xd5\x46\x6e\xb2\xa5\x11\x7b\xd8\xa1\x59\x8d\x4d\xec\x3f\x22\x2e\x48\x37\xe2\x27\x63\x29\x69\x80\x31\xa6\x4a\x15\x3f\x42\x55\x76\x91\x8d\xe2\xdd\x99\x8c\x16\xd9\x2b\xe7\xd2\xb3\x6c\x3d\xda\x68\xcf\xde\x8a\xbc\x5b\x9d\xc1\x5a\x94\x7e\xcd\x3e\xf8\x38\x5a\x17\x73\xcb\x6a\xc0\x60\x5f\x5e\xbf\xe0\x4c\x8a\xc2\x51\xbc\x90\xfe\xec\x12\xed\xf9\x76\x3f\xb7\x1e\xb7\xc5\x7c\xcf\x77\xec\x3d\xd7\x8d\xa9\x22\xdc\x05\x0c\x47\x5f\xbe\xde\x5f\xbe\xca\x60\xdf\x7d\xf9\xd6\x99\x79\x65\x90\x88\x4e\x4a\x80\x91\xcc\xa5\x9b\x73\x9c\xaf\xcd\x5e\xcc\x32\x19\x0b\x4b\xf8\xea\xb1\x0f\x0a\x1d\xb4\xf5\xd5\x64\x56\xad\x13\xe4\x88\xad\x17\x2e\x43\xdf\xf7\x01\x1c\x3c\x01\xfe\xed\x9e\x8e\x5f\xe4\xf4\x91\x79\x6f\xb9\xe8\xfa\xff\x31\xf7\xe6\xe1\xff\x0d\xf5\xff\xb0\x2c\x49\x21\x92\x4a\x49\x14\x91\xa4\x9a\x33\x4b\x25\x59\xb2\x14\xbe\xb2\x57\x54\x9a\x99\x73\xe6\xcc\x9c\x33\xe7\xcc\x39\x33\x73\xe6\x9c\x99\x22\x59\x22\xb2\x86\x24\x49\xb6\x14\x95\x2c\x59\x8a\xb4\x28\x65\xa9\x90\xa4\x45\x25\x11\xc9\x16\x91\xe2\xbe\x7c\x7f\xbf\xcf\xe7\xfe\xdc\x1f\x5d\xd7\xdb\x1f\x9d\xeb\xba\xff\x73\xb9\x1e\xc6\xbc\xe7\xf5\x3c\xcf\x79\x3e\x1e\xcf\x65\xd6\xd9\xf6\xda\x0f\xbe\xe5\x9e\x65\xf2\x7f\x7d\xf6\xdf\xe6\x4d\x2f\xfa\xeb\x4f\xbe\xf3\xf9\x1b\x4f\x5c\xb4\xee\x42\xb8\xa5\x2f\xc0\x6b\x56\xf9\xf7\x69\x3f\x5a\xf1\xe2\x03\xdf\xf7\xf9\xe3\x5f\x7a\xcc\x6b\xee\xfa\xf8\xaa\xe7\x5e\xf0\xa1\xeb\xc0\x0b\x3e\x74\xf3\x07\x3e\xff\xfe\xfd\x6f\xbb\x71\x71\x8d\xdd\x42\xb8\xa5\x9b\x85\x36\xbb\xe7\x8b\xd5\x6d\x9f\x3c\xf1\xf3\xef\xfb\xfb\x77\xd6\xda\x1c\xbd\xfa\x93\x97\x1e\xb9\xe6\xae\xf5\x95\x47\x7e\xec\x03\x6b\xfe\x6e\xa7\x87\xee\xdc\xe1\xe7\x8b\xd6\x5d\x08\xb7\xf4\xf9\xae\xa1\x29\xbb\xf2\xf5\xab\x7f\xf6\x25\xe7\x0c\xeb\xff\xfc\x11\xf3\xf2\x2b\x5e\xf1\x15\x99\x9d\x74\xd7\x3b\xb6\xff\xf0\xf6\x3b\xad\xf2\xe2\xe7\x3d\xba\x88\x2b\x2f\x84\x5b\xdc\xaf\xbc\xe3\xb3\x09\x85\x16\xfa\xae\xff\x93\x25\x7c\xf4\xf4\x57\xfc\x64\x43\xf7\xf0\x3f\xee\xf8\x62\x7e\xe9\x47\xbf\xfc\x53\x7d\x31\x7d\xcf\x97\xf6\x7e\xf4\xe1\xc3\x36\x5c\xfb\xbe\x3f\x1e\xb1\xd7\x43\x8b\x27\x8c\x2f\x84\x5b\xda\x12\xce\x3b\xed\x37\xaf\xd9\xec\x5c\x71\xd9\x5b\x2f\x3d\xf9\x3d\xff\xec\xff\x7c\xd3\x1d\xaf\xfe\xd6\x17\xee\xfb\xca\x35\x87\x3d\x78\xd4\x4b\x76\x5d\xf5\xde\x33\x17\x3f\x52\xbb\x10\x6e\x69\x4b\xd8\x75\xab\x83\x7f\x24\x6e\xfc\xf2\x86\xd7\xde\xbc\xf9\x8d\xfb\xfd\xf1\x91\x1f\x6c\x9e\x6f\xb2\xb2\x6f\xee\xdf\x35\x7e\xe8\x9b\x2f\xb8\x71\xd3\x65\x17\x37\xd5\x2e\x84\x5b\xda\x12\xfe\xb1\xe7\x81\xec\x96\x43\x6e\xdf\xca\xff\xe2\x8b\x2b\x1e\xfb\x97\xf7\xad\xbb\xd6\x61\xff\x5a\x7d\xbd\x37\xff\xfe\x9e\xab\x5e\xb7\xf6\xa9\x9b\x3c\xf4\xe3\xe5\x17\x8f\x7b\x5d\x00\xf7\x0c\x4b\x38\xf3\xc9\xef\xfc\xe9\xee\xad\xaf\x38\x6b\x9f\xf7\x1e\xb1\xef\x4a\xbf\xbc\xe6\xe4\x5f\xde\x7d\xcc\x6d\x2f\xfc\xc7\x41\x2f\xdd\xf8\xd0\x77\xe5\xe3\xd9\xe5\xa2\x50\x68\x21\xdc\xe2\xce\xc4\x67\xc7\x95\x17\xf2\xb5\xff\xc9\x14\xb6\x38\xef\xa8\x17\xae\xc9\x57\x3b\x93\x6d\xf3\x2d\xf9\x93\x74\x7a\x7f\xf6\x3e\xef\x9d\x2e\xff\xf1\x87\x94\x5e\xee\x96\x9b\x5e\x72\xd1\x45\xdf\x59\x74\x04\x0b\xe1\x96\x36\x85\x13\x0f\xff\xe2\x29\x47\xc9\xd7\xbd\xfd\x98\x2b\x2f\xf8\xe7\xa1\xef\x7b\xc1\x27\x9f\xdc\xe1\xa3\xf6\xfc\xef\x2c\xfb\xb1\x9d\xaf\xfd\xe1\x91\xd9\x71\x6b\xaf\xbb\x68\xdd\x85\x70\x4b\x9b\xc2\x0b\xff\xf1\xf5\x3f\x3f\x77\xc3\x7f\x6f\xf4\xc8\xae\xcf\x5f\xf6\x0d\x5b\x7f\xf6\x7d\xaf\x2d\x57\xf8\xce\xb9\xef\x3f\x7a\xad\xeb\x9f\xf7\x8a\x9b\x7e\xf5\xd1\x23\x56\x5a\xb4\xee\x42\xb8\xa5\x4d\xe1\xca\x17\x9d\xbc\xdb\x61\x97\x5d\x7a\xcd\x96\xaf\x3d\xe3\xd0\x63\x8f\x3f\xe0\xb0\xf7\xff\xf4\x53\xc7\xfc\xf6\x8d\x6b\xbf\xe5\xc6\x76\xbb\x13\x1e\xfc\xc9\x86\x8b\x3b\x1e\x17\xc2\x2d\x7d\xbe\x2f\xdc\x7f\xaf\x73\xbe\x7d\xcd\x09\xe0\xa8\x4f\xde\x72\xd6\xa3\x47\x6d\xfd\xc6\xcd\x2e\xf9\xdc\x85\x7f\x3b\xfc\xd0\x33\xef\x3e\x78\xbd\x73\x5e\x9f\xa3\xf7\x2f\x32\x85\x85\x70\x8b\x3b\x13\x77\x7b\x56\xa6\xb0\xd0\xfd\xf7\x9f\x4c\xe1\x84\x5d\xb2\x9d\x3e\xbd\xf2\x5f\x1e\xff\xfa\x4e\xd7\xaf\xb3\xdc\x95\xcb\x6e\xf7\xbe\x23\x7e\x20\xce\x3f\xf7\xc9\x95\x3f\xf5\x00\xdb\x59\xbc\xec\xa0\xc5\x8f\xc9\x2e\x84\x5b\xda\x14\x6e\xef\xce\xfe\x9f\x3d\xbf\xfb\x81\x13\xae\x5c\x7b\x87\x6f\x97\xf7\x8f\xf7\xed\xb1\xcd\xad\x4f\x9d\xfd\xf9\xfb\x6e\x57\xab\x3f\xf1\x99\xe5\xd7\x5e\x7d\xb1\x29\x2c\x84\x7b\x46\x89\xc1\x35\xaf\xdc\xf1\x6b\x61\xdf\xdb\xf6\x7e\xde\x2f\x6f\xff\xbd\xff\xf3\x26\x2f\x38\x6f\xa5\xb3\x5e\xf5\xb9\x8b\x6e\x7e\xf0\xc4\x97\x7d\x71\xc3\x72\xef\xc5\x0a\xda\x42\xb8\xa5\x4d\xe1\x86\x9d\x0f\xdf\x75\x83\xb3\xfe\xb0\xf9\xaf\x56\xff\xed\x03\x7b\xd8\xe3\xbf\x97\x3f\xf4\x21\xf8\xa3\xf7\xbd\xfb\xef\xff\xbc\xe2\x13\xdf\xf9\xdb\x5d\xf4\xe6\x45\xeb\x2e\x84\x5b\xfa\x7c\xf7\xfb\xc5\xc3\xbf\xb4\x7f\x58\x75\xd3\x8f\x66\x0f\x5e\x7f\xdc\xfe\x2f\xbd\xe4\xed\xf4\xa1\x1f\x9a\x1d\xee\xf9\xcd\x0a\xd7\x5d\x08\x0e\x3a\x71\xd7\xcb\x17\x99\xc2\x42\xb8\xc5\x5e\xe1\xd9\x71\xe5\x85\x62\x92\xff\x64\x0a\xab\x7d\x4f\xdc\x06\x8f\xde\xf8\xe5\xa7\xec\x72\xf6\x51\xdf\xdd\xf9\xda\xb7\x9f\x73\xc8\xd7\xd6\x3b\x72\xaf\x47\xf7\xfb\xc5\xee\xdf\xd3\xf7\xff\xe6\xe5\x8b\x0b\x8f\x16\xc2\x2d\x6d\x0a\x97\x3f\xfc\xb5\xd5\xdb\x07\xd7\xdc\x7f\xdf\x75\x7f\xb4\xf1\x0f\xcc\x95\x6b\x7e\xfb\x9d\x2b\x56\x6f\x7b\x2c\xc2\xaf\x7e\xfa\xeb\x37\xaf\xbd\x6b\x42\x8b\x95\xb9\x05\x70\x4b\x9b\xc2\x81\xfd\x4d\xfb\xaf\x96\xad\x70\xc8\x57\x1e\xfc\xd3\x0b\x9e\xfc\xfe\x4f\x6e\x43\x67\xdf\xf1\xf3\x4f\x7c\xe6\x3b\x87\x9c\xfd\xb2\x17\x5f\xf6\xc9\xbd\x2f\x58\xfc\x0c\xe4\x42\xb8\xa5\x4d\xe1\xd5\xe6\x57\xed\x81\xb7\xaf\x7a\xcb\xf5\x3f\xbb\xff\xca\xcd\xee\xdb\x6c\x67\xf7\xd0\x23\xf9\xd7\x7f\xb5\xfa\x4d\x3f\x7c\xe2\xe2\x03\xb6\xf9\xf4\x31\x8b\xfb\xb6\x17\xc2\x2d\x7d\xbe\xbf\xfa\xdd\xc6\xcd\xbd\xaf\x1f\xfd\xbe\x7f\x79\xec\xc0\x37\xfe\xeb\xe3\xc5\x6e\xc7\xbe\x01\xdd\xf8\xb2\x2d\x36\x5e\xe1\xeb\x87\x7c\x8e\xdd\xfb\xdb\x2f\x2c\x32\x85\x85\x70\x8b\xbd\x42\x7c\x56\x5c\x79\x21\x9e\xf5\x9f\xb9\xf2\x2a\x27\x9f\x71\x6f\xf7\xc8\x23\xf7\xdf\xba\xdd\x7b\x7f\x2d\x5f\xb9\xee\x8a\x1b\x1c\xb6\xac\x3a\x9e\x2c\xbf\xf2\x8a\xc7\xfe\xec\xe1\xe9\x9c\x3f\xbc\x64\x11\xef\x5c\x08\xf7\x4c\xae\xfc\xae\x33\xa7\x8f\x5f\x71\x4a\xf3\xd4\x17\xbe\x44\xf7\x3d\x7a\xb8\xfd\xa1\x15\xec\xca\xf7\x3d\xb2\xe9\x67\xa6\xd3\x3f\x7c\xfe\xb8\xdf\x71\x37\xdd\xb0\x68\xe5\x85\x70\xcf\xe4\xca\xf8\xe4\xbf\x1f\x77\xed\xd6\xfe\x9b\xc7\xff\xf1\xe1\xb4\xe2\x81\xf2\xd2\x75\x8f\x3e\xfe\x15\xd5\xd7\x36\xbd\xe4\xc7\xef\xbe\xee\x1f\xaf\x7a\x7c\xf5\x1b\x17\xad\xbc\x10\xee\xa0\x6d\x96\x59\xe6\xff\x3b\xee\xed\x94\x0f\xbd\xe3\x5d\x7b\x5f\xb2\x49\xf7\x8f\xd7\xed\xb3\xea\x6d\x5f\xb9\xbb\xcd\xce\x7f\xe1\x19\x47\xbd\xe4\x97\x7b\xfd\xf2\xeb\xfc\xdc\x3f\x1c\xfb\x83\x4d\x16\x73\xe5\xad\xca\x35\xc4\xcf\x2f\xfa\xe4\xca\x1f\x3a\xfa\x0f\x37\xec\xff\x8d\x5f\x7c\xf9\xc0\xbf\xc5\x13\x0e\xbf\x6c\xbb\xe5\x1e\x7b\xcd\xe1\xcb\xad\x74\xf7\xda\xef\x59\x92\x2b\xaf\x8c\x4e\x79\xc1\xcd\x8f\xff\xfa\x07\xc7\x8f\x6b\xad\xb5\xdd\x53\xbb\xe3\x47\xce\xda\xec\x2f\xaf\x86\x2b\xee\x73\xd0\xa1\x9f\x7b\xf7\xd7\xe8\x76\xeb\x2f\x59\x0b\xd7\xef\xba\xe9\x3b\x3f\x7a\xcb\x2f\xd6\x3b\xc2\xbe\x67\x0b\xb7\x0b\x7e\xe0\xd0\x5b\xbe\xfe\xc4\x95\xfb\x5e\xfe\x6e\xb2\x63\x79\xd2\xb7\x57\xb8\xf0\xff\x6f\x5c\x79\xa1\x3f\x6d\xc9\x7e\xe5\x67\x70\xe5\x37\xff\xf5\xf5\x8f\x7c\x25\x9d\x29\x5f\x75\xce\xa1\x6f\xbf\xef\xf7\x67\xbf\xf5\xf1\x35\x2f\xda\xfa\xac\x83\xd6\xe6\x77\x3e\x7c\xc8\x79\x6b\x0d\x9f\x2e\xfe\x2b\x29\xcf\x67\x72\xe5\x5f\xfd\x72\xfb\x3b\xd6\xff\xc5\xd1\xa7\xee\x7c\xc5\xc3\xbb\x9c\xf8\x83\x47\xde\x72\xea\x4a\xdf\x5e\xef\x65\xeb\x9d\xf7\x8f\xff\x79\xfd\x2b\xd7\x79\x53\x10\x8f\xfe\x57\x12\xbc\xcf\xe4\xca\x7f\x39\xe7\x1c\xbe\xd1\x2b\x1e\xb8\xea\xa1\xc7\xdf\xb0\xea\x79\x97\xed\xbf\xc9\x6b\x8f\xf8\xce\xeb\x0f\xf9\xe7\x03\x2f\x7d\xe2\x7d\x7b\x9e\xb7\xe1\x29\xbb\x2f\xff\x5f\xf9\x6b\x9f\xc9\x95\x7f\x79\xc1\x2e\xdb\xfe\xee\x84\x75\xd3\x7a\x2f\x79\x8c\x9c\xb5\xfd\xab\x36\xdd\xfb\x27\x60\xd7\x4d\x4e\x7d\xe5\xfd\xd7\xed\xf7\xbe\x15\x8f\x7f\xc7\x93\xd3\x7f\xe5\xaf\x7d\x26\x57\xfe\xee\x86\x60\xc3\x65\xcf\x3b\xfe\xa7\x2b\xee\x79\xf3\xdb\xee\x7a\xf1\xba\x7b\xdf\xbc\xe5\xab\xfe\xc0\x77\x5c\xf9\xa4\xe7\x9c\xf8\xbb\xad\xdf\xb1\xcd\xeb\xf6\xff\xaf\x71\xe5\x85\x8c\xe8\x3f\x16\x56\xfd\xee\xa8\x55\xff\x75\xb5\x79\xf7\x8b\x2e\xd8\x7d\xb7\xad\x1e\x7b\xce\x9e\xbb\xbc\xb2\xdb\x0b\x1d\xb1\xe3\xf6\x27\xff\xe4\x82\x2b\xd6\xbe\xe7\x05\x8b\x1f\x0b\x5c\x08\xb7\xf4\x05\xe8\x5e\xf8\xcf\x5d\x4e\xdf\xed\xea\xb7\xff\xe0\x9c\xa7\xfe\x74\xf2\xd6\xcb\x35\x5f\x84\x66\xc3\xdf\xac\xf3\x7d\x74\xc2\xdb\x36\xff\x80\x78\xf1\x31\x77\x2f\x16\xa1\x17\xc0\x2d\xfd\xb0\xc2\x77\x7f\x7f\xdc\xe9\xbf\xd8\xf7\x55\x7f\xb8\xe7\x79\x9f\xfa\xdb\x76\x6c\xeb\x5b\xcf\x7b\xea\xd1\xf6\x96\xed\x7e\xb6\xfa\x41\x9b\x1f\x40\xaf\x3c\xe0\x7b\xff\x5a\xb4\xee\x42\xb8\xa5\xf7\x6b\xd7\x7a\xf0\xd2\x3b\xea\x6d\xd7\x7d\xfe\x1a\x4f\x9e\x73\xd8\x3b\xbf\xb4\xed\x77\x37\x58\xed\xfe\x1d\x6e\x7c\xf7\xf6\xbf\xdb\xef\xfa\x23\xbe\x7b\x69\xb5\xf8\x55\xdd\x85\x70\x4b\x9f\xef\xf6\x9b\xca\xd3\xf7\xdf\xfb\xe0\x8d\x36\x2a\x7f\xbe\xcf\xab\x37\xbc\xf0\x0b\x5b\x5c\x78\xd5\x59\xbb\xdf\x5c\xfe\xf0\xe6\x75\xf7\xd9\xfd\x9f\xcb\x5d\x74\xd2\x22\xae\xbc\x10\x6e\x71\xbf\xf2\xb3\xe2\xca\x0b\x7d\xd7\xff\xc9\x12\xf6\xbb\xf7\xce\x0f\xde\xb9\xea\x61\xdd\x6b\xd7\x5b\x23\x5d\xfc\x89\x33\x9e\x8a\x2b\x23\xb8\xc5\x49\x67\x9e\xbf\xe7\x3a\x4f\xfc\xb5\x7b\xfb\x8e\x47\x2c\x3a\x81\x85\x70\x4b\x9f\xec\xc3\xe2\x7d\xd7\xae\xe4\xef\x3b\xa8\x75\xc7\xfe\xfd\x15\x6b\x9c\x76\xef\x26\x5b\xfd\xed\xc2\xab\x6f\x38\x66\xcf\xd5\x1e\xde\xe4\x9b\x9f\x7f\xf3\xae\x8b\x2d\x6c\x21\xdc\xd2\x96\xf0\xdc\x35\x1f\xbc\xe3\xf3\x57\x80\x0b\xb7\x38\xf1\xb9\xeb\x5f\x07\xce\xea\xef\xfe\xf7\xaf\xde\xbf\xe5\xbd\xbb\x3e\x7e\xcd\x3b\x6e\xd8\xf2\x88\xf7\xbf\x68\x71\x07\xe1\x42\xb8\xa5\xf7\x7b\xd2\x99\xdf\xd8\xe8\xd6\x57\x4c\xe7\x6e\xbc\xed\x17\x3f\xb5\xcf\x4a\xcb\xec\xf6\xc4\x65\xaf\x7f\xd5\x8d\x07\x9d\xb8\xe7\x55\xbf\xcb\xfe\xfe\x55\xfe\x8b\x27\x17\xad\xbb\x10\x6e\xe9\xf3\x4d\x7f\x5e\x7f\xbf\xbd\x2e\x7b\x38\xbc\xfc\x0d\xbf\xdf\x7c\xd9\x1f\xdf\x7e\xe7\x3f\xae\xf8\xd4\x37\xbe\x71\xea\x47\x37\xfa\xf0\x1e\x0f\xfc\xe3\xe7\x2f\xbc\x63\x8b\x45\xa1\xd0\x42\xb8\xc5\x9d\x89\xcf\x8e\x2b\x2f\xe4\x6b\xff\xe3\xeb\x30\xe7\xec\xba\xfa\x07\xdf\x74\xd5\x27\xda\x87\x36\xc9\x1e\x8b\x97\x6c\x7b\xff\x67\x56\xfa\xd7\x53\xeb\x6f\x70\xc2\xcf\xf6\xd9\xf1\xe8\x35\xd6\xba\x6c\xf1\xf4\x9a\x85\x70\x4b\x1f\xed\x2d\xab\xfd\xf0\x9c\xfb\x1f\xbb\x1c\x5f\xf0\xf6\xf2\xe0\x65\x36\xda\xe7\xc4\xc7\x2e\x7f\xd3\x1f\x3f\x77\xc2\x9f\xd7\xbc\xf2\x9a\xd7\x7d\x6f\xff\x23\xff\xb4\x78\x38\xc2\x42\xb8\xa5\x4d\xe1\xc8\xe3\xf6\x83\x27\x6c\xb0\xdf\x4a\x9b\x77\x77\x7d\xe3\x39\x2f\x7c\x85\xfc\xcd\x4a\x2f\xdf\x8f\xac\x75\xc2\xde\x17\x74\x9b\x5c\xfa\x85\x9f\xdc\x72\xe8\xa2\x75\x17\xc2\x2d\xbd\xdf\x33\xce\x3a\xed\x5b\xa7\x7f\xef\x83\x97\x5e\xb2\xe6\x05\xb7\x7f\xed\xfa\x5f\xad\xb9\x69\xf5\x05\x7c\xea\x65\xea\x5b\xbf\x3d\x75\x85\x13\x5f\x73\xdf\x45\x8b\xb9\xf2\x42\xb8\x67\x38\x85\xcf\x7c\xfb\x94\x0f\xaf\xf0\xe3\xbf\xae\xf6\x87\xdf\xbe\x2d\x03\x5f\xf0\x6b\x5f\xfe\x93\x9f\x5f\x77\xd8\xae\xb7\x3c\x71\xc3\x89\xf1\xe0\xed\xee\xf8\xea\x22\x53\x58\x08\xb7\xb8\x33\xf1\xd9\x71\xe5\x85\xee\xbf\xff\x64\x0a\x6f\x7d\xf8\x57\x07\xde\x75\xce\xee\xf7\xd9\xdb\xff\xbe\xfc\x96\xaf\xde\xff\xd4\xe1\xb3\x3f\x7f\x4d\xd8\x4d\x5e\xe2\xd7\xfc\xcd\x3e\xdf\xff\xf2\x63\x17\x2d\x3a\x82\x85\x70\x4b\x1f\xed\x67\x5e\xff\x8e\x4b\xbf\x75\xec\x9a\x6f\xdc\xe2\x1d\x3f\x3e\xfc\xf1\xff\x79\xe0\xb3\x97\xef\xb9\xf9\xfe\xe7\x1c\xb9\xf3\xf7\xd7\xb3\x6c\x95\x57\xee\xf0\x12\xbe\x98\xd3\x2e\x80\x5b\xda\x14\x0e\x1e\x5f\xf9\xb6\xe5\x57\x3b\x62\xa7\xf7\x6c\x72\xe8\xfe\x57\xbd\x65\xeb\x93\xc1\x57\x3f\xbb\xf6\x6b\x8e\x8b\xff\xda\xf3\xec\xf7\xa6\x33\xfe\xfe\xa9\x6c\xd1\xba\x0b\xe1\x96\xde\xef\xd7\x4e\xfa\xf7\x5d\xbf\xb9\xe2\x82\xbf\x2d\xbb\xdc\x1b\xf8\xef\xb6\xdc\xe6\x9d\x57\xad\xf8\xc9\x6f\x9f\x52\xfc\xe5\xdc\x95\x3e\x70\xcf\x49\x6f\x65\x5f\xa9\x16\xad\xbb\x10\xee\x19\x55\x2c\x77\x6d\xf1\xc2\x97\xda\xcd\xbf\xff\xe1\xa3\x7f\xb3\xdb\xdb\xd0\x8d\x1f\xd6\xef\xdf\x81\x5c\x73\xf1\xb5\x1b\x7c\xfa\x8e\xe7\x2d\x7b\xcc\xc7\xaf\xff\xc1\x22\x53\x58\x08\xb7\xd8\x2b\x3c\x3b\xae\xbc\x50\x4c\xf2\x9f\x4c\xe1\x8c\xad\xf7\x7b\xf4\xa1\x3f\x1e\xbd\xec\xf2\x57\xae\xb0\xce\x29\x9f\xb8\xf2\xb9\x5b\xef\xb4\xdc\xc3\xb7\x9f\x7a\xf0\xbf\xe1\x8f\x0f\x78\xef\xf9\x3b\xc4\xc5\x65\xe8\x0b\xe1\x96\x3e\xda\x2f\xdc\x71\xf5\x5b\x8f\xf8\x20\xf9\xd7\xb7\xd7\x39\x58\xad\x71\xc1\x93\xaf\xdc\x90\x7f\xe2\x5b\xef\x78\xe7\xb1\xcd\xf6\xfe\x66\x90\xc1\xf3\x16\xd7\x4a\x2f\x84\x5b\xda\x14\x5e\x3f\x9d\x94\x9f\xf6\xf0\x6a\xe7\xdd\x74\xc9\x7e\x57\x7d\xf1\x2c\xbe\xf9\xf9\xcb\xee\x9c\xbf\xfe\xef\x1f\x3e\x65\xfb\xeb\xc8\x01\xdf\x78\xf7\xba\x67\x2f\x5a\x77\x21\xdc\xd2\xfb\x5d\xef\x2b\xaf\xc3\x7b\xfc\xf6\x79\xfb\x7d\x3c\x5b\xf3\x8d\x1f\xba\x77\xcb\xd3\xae\x7a\xc3\x73\x2f\xfe\xce\x4a\x5b\xdc\x7b\xd8\x8e\x6b\x9e\xfb\xc0\x2e\xbf\x5f\x6f\xd1\xba\x0b\xe1\x96\x3e\xdf\x0f\x3d\x0e\x6f\xd8\xe4\xd7\xb7\xee\xfa\xc3\x9f\xae\xf4\xd3\x95\x0e\xd8\x63\xf3\x6f\x6d\xf2\xf2\xe3\xbe\x72\xd9\x1f\x3f\x72\xec\x95\xe2\xe5\xe7\xfc\x6e\xdb\xdb\x16\x99\xc2\x42\xb8\xc5\x5e\xe1\xd9\x71\xe5\x85\x78\xd6\x7f\xe6\xca\x3b\xdd\xfd\xe3\xbb\x4f\xbd\x7e\xbd\xeb\xbe\x69\x8e\xf8\xf3\x8a\xbb\x5c\xfd\x89\x0b\x36\xbb\xf4\x4f\xa7\x7d\xe6\xae\x6b\xfe\x7a\xd7\x71\xdb\x5e\x7e\xeb\xcf\x6e\x59\xc4\x3b\x17\xc2\x3d\x93\x2b\x1f\x0f\xeb\x7d\xf7\xdc\x7a\x97\xdf\xbf\xeb\x7b\x76\xdb\xc7\x1e\xb8\x76\x8d\xf5\xb6\x7b\xcb\xa9\xf5\x23\xcf\xdd\x4e\xff\x68\xc7\xf4\xfb\xcd\x0f\x51\x8b\x56\x5e\x08\xf7\xcc\x09\x5c\xff\x7c\xfc\xd4\x0d\x87\x7f\x2f\xff\x93\xeb\x0f\xdf\xeb\xe8\x03\x8f\xbb\xe2\xa5\x9b\xbd\xeb\x81\x9d\xf6\x7a\xd1\x3d\x1b\xed\xb6\xea\xeb\xfe\xf6\xc9\x4f\x7f\xe6\x8a\x45\x2b\x2f\x84\x7b\x9a\x2b\x2f\xf3\x9c\x25\x57\x5e\xf0\x7d\xe5\xb5\x9f\xb3\xe7\x32\x2b\x0b\xa5\xdf\x88\xde\xe8\xa2\xf3\x45\xb3\xe4\x3f\x6f\xf8\x7f\x16\xd9\xf6\xfc\x9f\x7e\x6f\xdd\x1b\xfe\xba\xcf\x47\xd7\x66\x3f\xb8\x79\xad\xcd\xdf\xf2\xa7\x7b\xcf\x3c\xea\xb0\x35\xed\x29\x77\xed\x7b\xca\xf3\xcf\xff\xd3\x77\xaf\x3a\x60\xe3\xe7\xec\xb9\xcc\x1a\xff\xf7\x3f\xf4\xc6\xd2\xb2\x68\xa8\xad\x0b\xff\x1f\xfe\xd5\xf9\xff\x97\x9b\xbf\x88\x5e\xb1\xdd\xf5\xfd\xa3\xb7\x6d\x2c\x5e\xf6\xfd\xdd\xcf\x5b\xe3\xc2\xcb\xdf\x78\xe0\xeb\x5e\xfc\xfc\xfb\xf6\xfa\x71\xf6\xea\xe5\x6e\x79\xff\x03\xef\x3c\x62\x89\x3f\xe2\xd7\xd9\xe3\xdf\xfb\x62\x7d\xeb\x9e\x5f\xbb\xe6\xe0\x0d\xfe\x76\xc6\x3f\x2f\xb8\xf3\xeb\xd3\x11\xc7\xf9\xef\x1f\xb6\xee\x4e\xdd\xc5\xbf\xf8\xdd\x01\x4b\x0e\xaf\xda\x68\xd9\x2f\x1d\xfa\xe4\x3e\x27\xfc\xf6\x81\x5b\x77\x39\x7b\xdb\x37\x3f\xb2\xe9\x3a\xdf\x5a\xff\x13\x2f\x3e\xf3\x3d\xea\x15\x72\xaf\x3f\xef\xf9\xc9\xcb\x97\x64\x3f\x2f\x5b\xf5\xeb\x9f\x5e\xe5\x98\x6d\x14\xfe\xd8\x9d\x6f\x38\xff\x88\x47\xb6\xf9\xca\xd6\xe5\xce\x60\x63\x75\xdb\x4e\x0f\xbe\x86\xbc\xf9\xb0\xad\xb7\x5d\x12\xfa\x64\x75\x1d\x3d\xe3\x8c\x7a\x65\xf2\xf6\x1d\xde\x76\xd4\xd9\x3b\x7e\xfc\xf5\x0f\xfd\xe4\x73\xbb\x1d\xb0\xcb\x31\xa7\x4c\x37\x3f\x6f\xcf\xc3\x57\x5e\xb2\x08\x72\x87\xfb\x7f\xb6\xe5\xbe\x97\xef\xdb\x5c\x74\x2e\xf9\x5a\x58\xff\x47\x2f\x1a\xd6\x3f\xf5\xb4\x75\xdf\x72\xc0\xd0\xea\x4f\x1d\x7b\xe2\xd7\x36\x5d\x6b\x85\xd3\x96\x40\x3f\xb0\xe2\x27\xae\x3a\x6c\xb9\x9f\xfe\xf2\x8a\x9f\x86\x3d\x5e\xb6\xfb\x26\x9f\xfb\xd8\x96\x17\x82\xfb\xcf\x6c\xba\xe5\x0f\xfc\xd8\x25\x87\x4d\xab\xde\xb5\xee\x96\x5b\x6e\x79\xf8\x73\x9e\xdd\x29\x1c\xbc\xc2\xb2\x6b\xad\x70\xda\x41\xdb\x2c\xf7\xf4\x47\xb4\xc4\xff\x63\xcf\xad\xee\xd9\xc0\x6e\xf7\xed\xc7\x3f\x73\xc0\x59\xdb\x7e\xcb\x1e\xf7\xdd\xab\x8f\x3c\x69\xf9\x0f\x9e\xf9\xdd\x43\x56\xdb\xfd\x9c\xd3\x4e\x78\x62\xbf\xdf\x2f\x01\xbd\x7f\xf9\xbb\xbe\x39\xa1\xec\x39\x1f\xfe\xed\x69\x8f\x9f\xfb\xce\x13\x1e\x7b\x78\x93\x4b\x8f\xf9\xf3\x91\xc7\x7d\xfc\x8a\xdb\xf1\xf6\xdf\xfd\x5b\x7d\xe8\x01\x47\xbf\xe0\xd9\xad\x79\xd0\x36\x4f\x3d\xf5\xd4\x53\x27\xad\xbb\x64\x2e\x71\xbf\xeb\xcf\x79\xf1\x76\x17\xdd\xfc\x8d\xbb\x7f\xbf\x46\x1e\x8f\x39\xf2\xca\x7b\x56\x5b\x66\xfd\x2d\x36\xdb\x6e\xad\xb5\xcc\x21\x3f\xfd\xed\x46\x07\x2d\x59\xda\xf5\xf7\x35\x6e\x05\xbb\xad\x75\xc8\x91\x5f\xf8\x18\xbf\x65\x9f\x03\x5f\x71\xcf\x57\x2f\x5d\xee\xab\x17\xde\x89\xfe\xbd\xda\x6f\xd7\xde\xe6\xa2\x17\x2c\x59\xef\xbc\xf1\xe7\xdf\xba\xd1\x63\x5b\xfc\x25\xdf\xe2\xe4\xf7\xe2\x0b\xff\xf6\x92\xdb\x6f\xb8\xe9\xf6\xf3\x2f\xbb\x95\x7c\x33\xa6\x87\xde\x7e\xda\x56\x6f\x7f\xe5\x92\x79\x80\x8d\x1f\xfd\xf5\xcf\x2f\x78\x7f\x38\xe7\xcd\x2b\xbf\xef\x4e\xbe\xdb\x3b\x3f\xf1\xde\x27\x3f\x5c\x4f\xf8\xce\xd7\xfd\xe0\xe2\x3b\x9e\x7a\xf2\x05\x2b\x2c\x01\xf5\x77\xef\xf5\xe0\x71\x5f\xde\xe4\x3d\x8f\x9c\xf4\xfe\x0b\x4f\xdd\x6e\xeb\x9b\x2e\x4d\xc7\x5d\xff\xa7\x1f\xbf\xea\xd1\x4f\x6d\xd2\x7c\xfe\xab\x3f\xd9\xfd\x7b\x4b\x40\x6f\x7b\xf3\x6e\x3f\xfc\xc6\x96\xbb\xee\xf4\x86\xd3\xfb\xcf\x5c\x70\xe8\xbb\x9f\xfc\xe7\xaf\xd6\x3f\x77\x83\xc3\x9b\x93\xf0\xcf\xde\xc4\x3e\x75\xa7\x5c\xf2\xad\xf1\xdb\x6e\x78\xce\x0d\x5b\x66\x6f\x9b\x0e\x5a\xfd\xf4\xff\xe9\xb7\xfa\x70\xbf\xeb\x75\x9b\xab\x83\xbb\x33\x8e\xd8\x6a\x07\xb5\x13\xfa\xdc\x0e\x1b\x2e\x01\xbd\xf3\xe8\x6d\xde\xf4\xcb\x83\x6f\x7f\xe7\xad\x6d\x8b\x0e\xfc\xc4\xaf\x0e\x69\xcf\x7f\xe3\xdb\xdf\xf6\xfc\x8b\xd5\xc5\x57\x7d\xf7\xfa\x5f\x7c\xea\x93\x5f\x5b\x02\x7a\xdc\x5d\x5b\x1f\xb2\xce\x49\x37\x3e\x76\xce\x43\xfb\xad\xf9\x69\xca\x7e\x7e\xdf\x0f\x1e\x5d\xf1\x89\x6a\x95\x2b\x5e\xb3\xc2\x16\xbb\xee\x7a\xe9\xf3\xdf\xbb\x04\x74\xef\x35\xde\xb1\xee\xaf\x4e\xfa\xc2\x67\x36\xbc\xfa\x9d\xf9\x2e\xe4\xe4\xed\xef\xd8\xf9\xb5\x77\xbf\x67\xf7\x4f\xfc\xcf\xb1\x9b\x87\x75\xbe\xb1\xc5\xf5\x1f\x58\x02\xfa\xe8\x6f\xce\xfc\xd2\x6b\x8f\x5e\xf3\xee\xc7\xaf\xe3\x07\x3f\xf7\xfc\x3b\x6e\x3d\xf9\xa1\x9b\x76\x3c\xf8\xd4\xbf\x2e\xbb\xc3\x87\xde\x4e\xf7\xf8\xe1\xf3\xf6\x58\xb2\xea\x88\xea\x8f\xff\xf1\x4b\x2b\x9c\x70\xf9\x05\x27\x57\xdf\x7a\xe2\xd4\x0b\x37\xbf\xd9\x3f\x71\xf2\xa3\x2f\xfa\xe7\xb2\x4f\xfe\x29\xde\xb5\xee\x37\xdf\xbc\xe4\xc5\xf7\xd8\xf7\x56\xfe\xe4\xcf\x5e\x79\xd4\x9b\xf7\x3a\xf3\xdd\x5b\xec\x55\x5e\xf1\xd5\xb5\x3e\x72\xee\xbd\x9f\xfd\xc8\xea\xab\x5d\x78\xc1\x9f\x97\x5f\xef\x6f\x6f\x58\x02\x7a\xee\xf2\x2f\xba\xf0\x7d\xdb\xaf\x70\xfb\x9a\x47\x7d\xee\xca\x3f\x7e\xe6\xfc\x35\xdc\x23\x2f\x7b\xc3\x3b\x5e\xf2\x9b\xcf\x3f\xef\xc4\xcf\xed\x71\xdf\x09\x2f\xb9\x7e\x09\xe8\x2b\xec\x73\x97\x59\xe5\xba\x61\xeb\xeb\xf8\x83\x5f\x7c\xf1\x2a\x42\x7d\x6c\xed\x95\x4e\xfa\xa6\xb9\xca\x3d\x70\xf1\x7b\x0f\xda\x69\xaf\xdd\x97\x34\xf0\xd5\xfe\x79\xcb\x8f\xff\x7d\xfa\xa1\x1b\xfc\x72\xab\x07\x9e\xfb\xf0\x4d\x3b\xfe\x65\x83\x8f\xef\xc7\xaf\xce\x2f\xba\x64\xb3\xef\x2f\x77\xec\xbd\x3b\x7f\xf1\x92\x25\xa0\xb7\xae\x49\x4e\x7f\xea\xfc\xfb\x2f\x7a\xe3\xa5\xe7\xdd\xfc\x61\x71\xcd\x83\xe5\x59\x4f\xa0\xd5\x6e\x5d\x4b\xbd\xf4\xbc\xed\x97\xb1\x3f\xd8\x88\x2f\x59\x27\xf6\xfc\x7b\xb6\x7d\x55\xf8\x87\x6c\xde\x7a\xf0\x4d\xe9\xda\x7b\xd6\x3f\x78\xa5\x6f\x5e\x53\xec\x7d\xe5\xbd\x1f\x3b\xe6\x03\x3f\x7a\xe7\x8b\xbe\x74\xde\x12\xd0\x4f\x5e\xf2\x9d\x3d\xf7\xf8\xdc\xb5\xc7\xae\x53\xad\xbe\xd3\x9f\xd7\x5c\x75\x6f\xbb\xe6\x66\xcb\xe3\x5f\xde\xb0\xdf\xf5\x1b\xad\xb3\xea\xe1\x57\x7f\x6c\xed\x25\x6f\x5d\xdd\xdd\xb9\xc2\x7e\xf4\x47\x1f\xb9\xf6\x9a\x8f\xfd\xf9\xd5\xcb\xed\x7c\x40\xf6\xcd\xeb\xfe\xfc\xea\x57\x1f\x7c\xed\xcb\x3e\xf2\xfe\x17\xf8\x37\x1c\xbc\xa4\x1b\x59\x6b\xfd\x9b\x7e\xb4\xc7\x8b\xa1\x5c\x65\xe3\xe1\x17\xed\xd5\x7f\xbc\xf5\x0d\x17\xb8\x07\x57\xfb\xe8\xee\xe3\x65\xcd\xc6\xc7\x89\x77\x2d\xa9\x96\xbd\xf1\xf2\x5d\x37\x39\x7a\xc5\x23\xef\xdf\xec\xc0\x6b\x7f\x77\xdf\x56\x1f\xa4\xec\x90\xcb\x7f\x78\xf0\xd5\xc7\x5d\xf0\xe6\x95\x37\x7d\xd1\x07\x36\xd8\x71\xc9\x37\x0c\x56\x79\xe8\x4e\x8d\x4f\xff\x56\x27\x5e\xfd\xb1\xe3\xb6\xff\xc5\x65\xc7\x7e\xb6\x7b\xee\x7a\xeb\xad\x72\xf1\xfe\x57\x6c\xf5\x91\x8d\xde\x74\xf9\xd5\x57\x2e\x01\xfd\xd4\x13\x5b\xed\xf9\x8d\xbd\xef\xba\xfc\xe5\xcb\x9e\xb6\xc2\xcb\xde\xfb\xb2\x38\xfc\xec\x1f\x7f\xdd\x74\xf9\xa3\xf6\x57\xab\x9d\xbd\xe9\xf2\xdf\x7b\x6a\x97\x25\xa0\xed\x66\x9f\xda\x76\x83\x73\x1f\xd6\xbf\xfd\xc3\xed\xdb\x3c\xb9\xfe\x32\x66\x8f\x95\xb7\xd9\xe0\xb0\x83\x5e\xf8\xa1\x2b\xae\x7c\xcd\xcd\xaf\xbd\xef\xea\xd5\x97\x80\x6e\x98\xdf\x7d\xc6\x9a\xdb\x7e\xfb\x9f\x4f\x9e\x77\xf6\x75\xfc\xa0\xfc\xfd\x67\x3c\x75\xe3\x3a\x1b\x6e\x36\x85\xf4\xef\x9b\xbe\xbf\xcc\x91\xbb\xee\xb4\x64\xf2\xf0\xe7\xaf\xfa\xd6\xbb\x1f\xfb\xed\xca\x37\x6c\xb3\xd6\xe3\x6b\xee\xf1\x16\xfb\xb9\x37\x7c\xfb\x3d\xfb\x7e\xe9\xcb\x47\xdd\x76\xd6\xa5\x07\x6f\x7c\x56\xf6\xd5\x25\xa0\x1f\xfe\xf4\xf1\x77\xbf\x7b\x1f\x72\xd0\xab\x57\x59\xe9\xcb\xad\x7f\x62\xb9\xeb\xbe\x73\xfc\x0d\x07\x9e\xbf\xe1\x19\xdb\xed\xb6\xca\x61\xe7\xdc\xbe\xef\x49\x4b\xba\x8c\x17\x3d\x71\xd8\x0b\x6f\xf8\x79\xb5\x6f\x7d\xcc\xe3\x7f\xdd\x79\xd3\xd7\x3d\x72\xf1\x4b\x5e\xb6\xed\xc5\x7b\xbe\xf4\x92\x55\x9e\x77\xe1\x1a\x67\x4c\x2f\x5c\x02\x6a\xd6\x1f\xba\xc3\x6f\x7f\xe0\x95\x5f\x7d\xfd\x31\xeb\xff\xfa\x2f\x1f\xd9\xec\x79\xff\xb3\xf5\x76\xf2\xce\x53\x4f\xfa\xfa\x7b\x2f\xde\x75\xf5\x56\xfe\x75\x49\xcd\xfd\xbd\x3f\x2a\x77\xba\x60\x87\x77\x3d\xf7\xc0\xfa\x92\xd7\x6d\x27\xf7\xbb\xee\xd7\x57\xdc\x73\xe2\xca\x1f\xcc\xd6\xf9\xcd\x9e\x3f\x3d\xed\x0b\x07\x1c\xb6\x04\xf4\xed\x7f\xfd\xfc\xf7\x5f\x72\x36\x3f\x7a\x8d\xbf\x5d\x7c\x64\xf7\x8f\x2f\x1d\xff\x92\x1b\xcd\xbf\x5f\x7d\xcd\xb1\x87\x1f\x58\x1e\xbd\xe9\xb5\x47\x1d\x7c\xe5\x01\xf7\xaf\xf7\xec\xbc\xeb\xff\x71\xc8\x07\x9c\xb4\xee\xd3\xf7\xea\x46\xcb\x3c\xe7\xe3\x7f\x5c\xee\xb8\x75\xd7\x7d\xeb\x5e\xab\x7e\x64\x8d\x2f\x6f\xb6\xe2\xe9\xef\xfc\xf7\x86\xeb\x3e\xf5\xa5\x6b\xdf\xf1\xca\x4d\x77\xd9\xfb\x42\x76\x6a\xfc\x3b\x5f\x63\xd7\x4d\x6e\x7b\xee\xcb\xd7\x5d\x66\x99\x65\x1e\xd9\x7a\x99\xfc\x9d\xcb\xdc\xbd\xe2\xb4\x15\xa3\x25\x33\x05\x85\x0c\x51\xc6\x69\x2d\x6b\x3d\x04\xaf\x69\x60\x0d\xb6\x43\xcc\x60\x62\x99\x93\x9d\x25\x95\x34\x38\x6a\x41\xaa\x44\x58\x8b\x27\xdd\x23\x1a\x51\xa7\x63\x5a\xe6\xe5\xcb\xbc\xf4\x4b\xab\x6f\xb9\xe5\x96\xff\xb5\x5d\xb0\x8c\x16\x1d\x85\xa6\x07\x53\xa8\xf3\x71\xc0\x76\x2c\x51\x69\x2d\x21\x48\x8f\x13\xa1\x6c\x70\xa8\x0b\xc4\x51\x92\xa4\x8c\x13\x69\x25\xaf\xff\xfb\xbb\xa0\x79\xea\x4b\xd2\x68\xe8\x61\xcb\x47\xdd\x32\x5b\x75\xa1\xed\x49\x86\xa7\xbc\x6a\x88\x71\x86\x60\x3b\x92\x9e\x2a\xdf\x0a\xc3\x6b\x8b\x93\x9d\xe1\x2c\x80\x2e\x07\xc3\x39\x09\xc9\x66\x8d\x4d\x35\xe9\x64\x3b\x66\x8d\x45\xa8\x2f\x70\xa3\x6c\xe7\x0d\x18\x87\x3e\x07\x1e\xa7\xd1\x47\x32\xb2\x30\xc3\x59\xf4\xdc\xc9\xb2\xb3\x53\x3f\xe6\xbe\xc9\x5b\x97\xb8\x04\x00\x33\x61\x3c\x0f\x5c\xa4\x1e\x56\xbe\x17\x46\x78\xaa\x63\x06\x2a\x8f\xa1\x35\x33\x9c\x45\xaf\x7a\xc0\x69\x47\x6c\x12\xb9\x09\xba\x6a\x87\xa2\xf6\x8a\xeb\xac\x77\x28\x76\x05\x69\x70\xd1\x0f\xd8\x38\x30\xba\x22\x11\xa3\x7a\xef\x67\xd8\x85\xed\x27\x84\x6a\xca\x43\x14\x58\xe1\xbe\x15\x68\x28\xeb\x91\x97\xb4\xf1\xc1\x51\x9f\xd0\xd4\x40\x13\x5a\x3e\x69\xcc\xf3\xcc\xa2\xb6\x2e\x67\xd8\x05\x17\x45\x2b\x7d\xd3\x03\x19\x85\x4e\x35\xa7\x44\xc3\x00\x21\x41\x34\x55\x93\xcc\x4a\xa4\x12\xcb\x0b\x3f\x2a\xd7\xfa\x92\x10\xd8\xd4\xfd\x0c\x76\x31\xf6\xb4\x28\x68\x4b\x0d\xb4\xa0\x1a\x62\xd6\x31\xef\xa6\x6a\x94\x26\xd5\x90\x36\x41\xa7\x89\xe6\x50\xd0\x61\x50\x86\xe0\xa1\xe8\x71\x36\xc3\x37\x42\x9b\xaa\x34\x34\x29\x37\x10\xe8\x42\x59\xb7\x60\x68\x0c\x68\x84\xc7\xd5\x30\x8a\x02\x8e\xde\xc9\x5a\xd7\xad\xa3\x43\xa8\x23\x06\x95\xd1\xed\x0c\xbb\x70\x0a\x10\xa5\x58\x5d\x8d\x01\x32\x06\x80\xab\xdc\x14\x41\x9c\x10\x04\xaa\xca\x73\x5f\x96\x24\x25\xe0\x62\x85\x0b\xa5\x63\x1c\x08\xeb\x66\xd8\x45\xaa\x6a\x37\x56\x7d\x0c\xa9\x77\x21\x40\x9b\xb5\xdd\x54\xb5\x61\x10\x04\x14\xbc\x10\xb0\xb4\x36\x95\x4c\xd0\x32\x13\x06\x14\xac\xf6\x3d\x9f\xc3\x2e\x0a\xe3\xbc\xa8\x99\x0a\x19\x2b\x58\x00\x40\x8f\x45\xd6\x77\x4e\xe4\x13\xb5\x4c\x55\x2e\x56\x14\xe8\xa0\x75\x66\xf2\x2a\x18\x2d\xe3\x38\xc3\x2e\x74\x70\xa4\x11\xb4\xac\xc6\xb6\x19\x38\x0c\x03\xc8\xda\x26\x74\xa0\x6c\x89\x6c\x38\x10\x45\x9e\x86\x94\xe7\x5d\x13\x35\x87\xb9\x08\x4d\x4d\x66\xd8\x85\x18\xab\x9c\x51\xc6\xca\xba\x21\xb2\xac\x02\x42\x58\x77\xb2\xed\x15\x4f\xb4\xe3\x38\xc7\xd5\x04\x75\xaf\xd5\x80\x1a\x34\x8c\x30\x63\x31\x9b\xc1\x5f\xf8\x28\x10\x02\x43\xb2\x65\x02\x92\x93\xc1\x3a\x59\xbb\xb6\xea\x91\x6e\x5d\x98\xd8\x88\x39\xc2\xb6\xec\x83\x8b\x03\x04\xd8\x52\xe7\xab\x39\xee\x91\x9c\xd5\x3c\x18\xd0\xb4\xa3\x02\x50\xe5\x9d\x93\x42\x0c\x31\xa0\xa1\x23\x65\xd0\x5d\x6e\x9b\xa6\x06\x0d\x95\x51\x23\x92\x07\x08\xab\x39\x76\x51\xf7\xb5\x17\x24\xd1\x4c\x4e\x45\xd6\x29\x9d\x31\xd6\xa5\x5a\x0f\x98\xda\x2e\xa5\x34\x74\xc8\xdb\x11\x65\x4c\x68\x53\xe6\x61\x24\xa0\x8f\x73\x78\xf0\x16\xfb\x62\x18\xa7\x22\x81\xb2\x6b\x1b\xd8\xe7\xa6\xca\x93\xcf\x1b\x91\x57\x1d\x96\xa2\x9d\x54\xdf\x45\xc4\x30\x6b\x9b\x18\x5b\xc2\xd3\x34\xc3\x59\x4c\xc2\x55\x68\xaa\xab\xc9\xdb\x29\x4b\x12\x52\x38\x80\xa9\xd1\x2e\xf9\x1c\x84\xd8\x1b\x38\xa6\x6c\xcc\x3a\x42\x1a\x9a\xe7\x63\x53\xc4\x4a\xcd\x70\x16\x2d\xd7\x52\x62\x81\x69\xec\x26\xd3\xd6\x0d\x1a\x5a\x37\xe4\xda\x0d\x02\x57\x28\x54\xb0\x70\x2d\xeb\xa0\xb3\xc4\xa9\x2a\x54\x23\xcc\xeb\x39\xec\x22\xc4\x08\x6b\x68\x0a\x2a\xa3\xa0\x93\x21\x14\x4e\xa8\x48\x8d\x6f\x89\x56\x58\x34\xd6\x83\x66\xf4\x02\x54\x41\x76\x7d\x1e\x60\xdb\xf2\x39\x76\x41\x34\xa4\x03\x60\xb1\x68\xb9\xb1\xc8\x8c\x5d\xdb\x68\xd4\x02\xc4\x27\xdb\x4c\xb0\x68\x5a\x3f\xe6\x23\xd2\xba\xa7\x45\xa2\xc4\x14\x15\x85\x33\xfc\x22\x11\x59\xeb\x84\x04\x9d\x1a\xaa\x91\x43\x93\x8f\xcc\x00\x80\xf9\x88\x10\x95\x4d\x2b\x0c\xc4\x76\xa2\x50\x08\xd0\xb5\x96\xaa\x3c\xf5\x33\xc4\x17\x2c\xc5\x3a\x6b\x32\x80\x78\xd3\xb5\x84\xbb\x52\x0c\x53\x55\x14\x6d\xdb\x96\x98\xaa\x46\xe1\x94\x67\xa1\xf0\x13\x96\xdc\x91\x42\x54\x9c\xda\x19\xac\x93\x0e\x84\xe9\x01\x33\xd9\x14\x0e\xc8\xa1\x32\xd6\x52\x53\x16\x0e\x50\x95\x8c\x26\x65\xc0\x15\xb5\x79\x53\x56\x05\x67\x56\x86\x8a\x67\x11\xcc\xc1\x8a\x9e\x76\x11\x96\x79\xaf\xb1\x29\xab\xd8\x06\x42\xea\xe4\xad\x25\x25\xe3\xd0\x42\x54\x15\x58\x80\x2e\x61\xee\x80\x2f\x6b\x9f\x39\x3e\x43\x7c\xc1\x98\x2c\x9b\xaa\x1e\x88\x0c\xba\x4a\x5e\x6a\x50\x8c\x51\x9a\xb1\xb0\x2d\x2e\x99\x37\x28\x55\x62\x2a\xf2\x09\x66\x85\x71\xc5\xc0\x6b\xc1\xe6\xf0\x17\x60\xb0\x93\x75\x65\xce\x49\x95\x72\x33\x58\xe3\xb1\xce\x52\xee\x41\x55\x56\x6d\xe6\x45\xdb\x40\x0e\x7b\x57\x47\x99\xd5\xed\x28\xaa\x52\xcf\x61\x17\xc2\x12\x51\x5a\x21\x72\x0c\x5b\x68\x54\x26\x39\x1a\x07\x68\xbb\xde\xe1\x96\x52\xc0\x49\x36\x4d\xa1\x64\x4a\xd6\x80\x43\x5d\x03\x64\xe7\x60\x02\x14\x8b\x21\x4d\x9d\x62\xd9\x24\x2a\x03\x5b\xd2\x02\x8a\x28\xab\xc7\x7c\x28\xa8\x0b\x25\x30\x3c\x74\xa8\x03\x59\xeb\xbb\x10\x4a\x33\x66\xc5\x0c\xbb\x70\x23\xad\xeb\xb6\x63\xb8\xc1\x7c\xa4\x38\x48\xee\x0c\xe4\xd0\x05\x1c\x87\xb1\xe8\xdb\x30\x8d\xb2\x8f\x03\xe0\x65\x19\x2a\x5f\x87\xb2\xfa\x7f\xe3\xce\x45\x82\xc7\x42\x1a\xf1\x0c\x82\x07\x8a\x86\xe3\xc9\x49\x65\x48\x84\xb5\xf7\x04\x76\x50\x9b\x7c\xac\x29\x2a\x72\x40\x83\x09\x12\xc4\xc4\x46\xd0\x47\x24\x1c\xd7\x2e\x73\x73\xb8\x7c\xc1\x25\x28\xf0\xd4\x86\x10\x1a\xad\x1a\x33\xd8\x6a\xa8\xaa\x9e\xa4\x16\x8d\x30\x73\xc1\x30\xc9\xf2\x12\xd1\x21\x38\x92\x82\x34\x69\x06\x92\xcf\xea\x52\x34\x3a\xc2\xbe\x4e\x2a\x6f\xeb\x50\x64\x0c\x45\x9f\xdb\xac\xc9\x65\x0e\xba\xa6\x0e\x59\x1f\x64\xef\xa9\xd5\xa8\x1c\x48\x34\x2a\x9b\x81\x5e\xd3\xda\xa2\x02\x34\x25\xe6\x8c\x97\xbe\xb3\xa6\xeb\xcb\x5e\x8a\x49\x73\x2c\x32\xce\x3b\x0d\x5b\x81\x2c\xe4\x25\x55\x11\x76\x8a\x67\xd4\xe9\x19\xce\x62\x74\x3d\x86\x9d\xa6\x4d\x9c\x52\xa9\x2b\x56\x29\x84\xa2\x18\xe5\x98\xf2\x24\xc1\x54\x84\xa9\xc9\x6c\x20\xad\xcd\x0b\x2a\xbd\x12\x43\x46\xe7\xa0\x94\x5e\x56\x9a\xd7\xb0\x8c\xde\x4b\x21\x43\xa6\xf4\x10\x42\x03\x47\xe8\x8d\xa3\xc5\x48\xa4\x74\xa4\x36\x90\x53\x02\xb8\x20\xb1\x72\x73\xb8\x39\x4d\xbb\x2e\x80\x91\x0c\x8e\x66\xe3\x44\x14\xaa\x4b\x95\x37\x43\x47\xa6\xc8\xe0\xc4\xa0\xc0\x9e\x36\x69\x4a\x9a\x03\xc6\x46\x99\x42\x3e\xc7\x59\x74\x4d\x9c\x0a\xd4\x4d\x28\x06\xd4\x4a\xc9\xf3\x5c\xc5\xd6\xf1\x32\xc0\xae\x36\x89\x0e\x00\x19\x5a\x66\x70\x1a\x3a\x5b\x53\xe4\x4d\x07\x9a\x19\x76\x91\x11\x0e\x6b\x16\x3b\x3c\xf0\x31\x22\x37\x26\x1d\x86\xae\x25\xa4\x98\xaa\x31\xc3\x8c\x4b\x83\x03\xee\x2a\x5d\xb9\x02\x25\x20\x24\xca\xe7\xb8\xfe\x38\x1d\x81\xec\x23\xf1\xca\x78\xa8\xa7\xd8\xe5\x38\x63\x59\xc0\xd6\x70\x47\x9c\xca\xa3\x28\xfb\xc9\xa6\x16\x52\x0d\x42\x60\x65\x88\x33\x78\x2d\x46\x2c\xee\xc6\xcc\xb4\x8d\xcc\x83\x9b\x2c\x01\xdd\xa4\x4a\x52\xb9\x16\x93\x51\xf6\x63\xd3\xb1\xaa\xd1\x4e\x91\x21\x16\x52\xab\xc2\xd7\x60\x06\x7a\xcd\x02\x1c\x81\x17\x6d\xe7\x3c\x54\x10\x8b\x5c\xca\x09\x72\xc8\x6c\xcd\xda\xb2\xe0\xc0\x5a\x86\xca\x32\x6a\x87\x69\xd1\x18\x62\x18\x4a\x33\x48\xd6\xb4\x67\x5d\xa5\x0a\x3d\x65\xc1\x06\x55\x45\x0c\xda\xa7\x99\x7d\x4b\xaa\x90\x8b\xb2\x77\x9d\x6e\x85\x6c\x63\x9a\x02\xa0\x78\x04\x79\x8e\xfa\x39\xbe\xd4\xba\x6a\x18\xc9\xb8\x8c\x15\xc4\x5d\x6a\x89\x54\x15\x0f\x05\xf5\xa3\x95\x1c\xd7\x94\xe7\x7e\xe2\xce\x8d\x8d\xa8\xb3\xac\x82\x49\x6b\x30\x87\x64\x5d\xa1\x6e\x82\xbe\x65\xad\x44\xae\x53\x49\x14\xa5\xee\x07\x6e\x20\x95\x46\x05\x05\x58\x4b\x55\xc0\x23\x2f\x58\x2b\x3c\xcd\x53\x96\xd2\x1c\x1e\x3c\x97\x15\xce\x6b\x6a\x62\x2d\x72\x9b\x49\xdc\x22\x6f\x1b\x3c\xda\x9e\x67\x40\x39\xd0\xe8\x82\x8e\x4d\x41\xab\xd1\x94\x53\x6d\x4c\x6e\xf8\x1c\x34\xca\xe3\x5a\x12\x6a\x3a\x21\x8c\x56\xcd\x48\x30\x2b\x7a\xaa\x3c\x18\x7d\xc1\xc7\xc1\x57\x39\x76\x30\x64\xa3\xd2\x9c\x77\xad\x40\x53\x46\xe5\x0c\x76\xd1\x2a\xc3\x80\x2f\xfb\x02\xa0\x1c\x65\xce\x65\x99\x1a\x4d\x1c\x62\x4b\xcb\x91\x59\xda\x57\x5d\xa6\x6d\xe7\x2c\x70\x2c\xc3\x21\xf3\x86\x8a\x19\x76\x51\xb6\x92\xf8\x46\x29\x40\x8a\xd4\x0d\x93\x6f\x9b\x01\x70\x5b\x23\xed\x82\xef\x0a\xab\xf2\x76\xca\x23\x84\x90\x45\x3c\x64\x98\x27\x62\xe7\xb0\x0b\x88\x9c\xa1\xaa\x45\x72\xec\x7d\x43\x4a\x98\x80\x76\xb6\x98\xca\x54\x0f\xce\xf7\x21\xe3\x26\x6f\xda\xd4\xe4\x5e\x26\xdb\x8e\x8c\xc4\x6c\x0e\x99\x36\xf3\xa0\x68\x92\x2e\x7c\x66\x64\x54\xb1\x06\x32\xc8\x72\x90\x6a\x0c\x0d\x4e\x4a\x72\x57\x13\x17\x73\x31\x24\x58\x57\xd2\x20\x52\x80\x39\xee\x54\x3c\xe4\x09\x41\xd2\xda\xca\xc5\x86\xd5\xb6\x05\xd0\xd9\x41\x91\x36\x61\xac\x27\x61\x60\x41\x40\x88\xb5\x82\x45\x1d\x00\xf1\x39\x99\x45\xfc\x61\x2a\x9b\x6c\x5d\xb5\x94\x0e\x6d\xd0\xad\xc4\x15\xf4\x55\x3e\xd1\x8a\x35\x65\x99\xc1\x52\x2b\xd5\x77\xdc\x8b\xb1\xea\xa6\x5e\xd3\x31\xce\x41\xaf\x29\xaf\x9b\x72\xd0\xfd\x84\x41\x97\x72\xec\x5a\x95\x06\xda\x18\x6c\x83\x68\x24\x06\x74\xea\x7b\xdb\x60\x28\x98\x12\x1c\xdb\x11\x35\xd0\xce\xf0\xa5\xb2\x0a\x99\x7c\x04\xe3\x20\x3d\xf1\x09\x94\x7d\x2c\x6b\x6e\x28\xe4\xd4\x78\x47\x0b\x81\x9b\x6a\x04\xa5\xad\xb0\x15\xac\xe5\xa4\x29\x54\x3e\x43\xa2\x8d\x02\x31\xe0\xcc\xf3\x28\x4b\x3d\x76\x95\xf1\x59\x12\xaa\xe7\x62\xec\x07\x0d\xd1\x30\x94\x29\x6b\xca\x46\xc1\x22\x7a\xc9\xbb\xae\x29\xcc\x1c\xf7\x08\xed\x75\xd3\xe6\xb4\x01\x53\x5d\x26\xec\x35\x1b\xba\x10\x24\x98\xf2\x3e\x51\x3f\x25\x57\x00\xa9\x7c\x97\x77\x78\x12\x99\x23\xbc\x61\x4d\x35\x87\xbf\x70\x52\x16\x11\x50\x24\x68\x96\xdb\x36\x4c\x50\x95\x05\xc9\x58\x6a\x74\x1d\xf4\x04\x61\x01\x88\xe9\xd3\x50\xbb\xc4\x62\x98\xac\xa9\xd3\x1c\xf2\x3d\x4c\xb0\x1c\xe9\x24\x58\x12\x35\xa5\x55\x53\xe3\x22\xd5\x88\xf4\xdc\x13\x0a\x22\x2a\x8a\xc9\x94\xa8\x8c\x05\xb4\x65\x2d\x84\x52\x75\x35\x83\x64\x4d\xfb\x4c\x4e\xe5\xd3\xdf\x68\xd6\x0f\xb5\x94\x78\x6a\x13\x01\x7d\xed\x10\xa1\x7e\x8a\xaa\xb3\x31\x53\x30\x2b\x6a\x82\x72\x61\xf3\xce\x90\x7c\x8e\x18\x3c\x69\x2f\x2b\xd2\x73\xcd\x50\xd5\x42\x27\x93\x82\xd5\x54\x05\x40\xfb\x4a\xda\x1c\x64\x43\xa9\x13\x1a\x23\x41\xb4\x6f\xad\xcd\x1a\x5c\xb3\x19\x76\xa1\x46\xa8\xa0\x8a\x7d\xec\x8a\xb6\xcf\xea\x41\x73\xc8\xb0\xb4\x3d\x0c\xd1\x52\x23\x42\xdf\x0b\x3b\x76\xc5\x38\xd0\xbe\xe2\x52\x37\x3c\xd7\xcf\x10\x3c\x16\xaa\x74\xfb\xef\x0b\x1e\xac\x22\x53\xa2\x75\x1d\x9b\xa1\x09\xc3\x30\xd8\x58\x67\xb5\x77\xb2\xec\x65\x89\x22\x51\x75\xcc\x69\xe0\xce\xf6\x3d\xac\x22\x57\x72\x1a\xd5\x30\xc3\xe1\xd9\xa4\xba\x51\x38\x33\x94\xc5\x84\x34\x52\x53\x29\x9c\x15\x45\xde\x0e\x06\xc6\xb6\x2b\x06\x8d\x23\xeb\x21\x4b\xa3\x24\x7d\x46\xac\xe3\x33\x7c\xda\x34\x61\x4d\x6b\x98\x27\x07\x23\x76\x24\x17\xd8\xdb\xb1\xe2\x93\x0e\x15\x8f\x48\x66\x25\x46\x5a\x2a\xd8\x4e\x2d\x8e\x65\x2d\x8a\x31\xa6\x19\xb2\x94\x4c\xc6\xd1\xf7\x65\x51\xb0\x12\xb5\x5d\xe7\x00\xac\x50\x56\xe2\x58\x83\x94\x75\xbe\x8c\x42\x61\xcd\x42\x00\x99\xca\xab\xb1\x54\x30\xda\x79\xa8\x83\x20\x03\xd3\xa1\x95\x30\x05\x8a\xaa\x04\x3a\x15\x63\x9e\x09\xd0\xd0\xce\x05\x29\x08\xce\xa0\xe8\x50\xa8\xa5\x9b\x7c\x26\x41\x5d\xcf\xf1\x69\x17\x9d\xb4\xa8\x84\x32\x36\xa3\x6d\x07\x26\x0d\x2e\xad\xca\x31\x62\x13\x15\x21\x47\xb4\x56\x59\xc7\x3a\x91\xa2\xaf\x62\x03\x00\xc6\x11\xcf\x21\xc7\x91\x62\x62\x99\xe9\x6c\xa9\xcb\x46\x48\xa0\x52\x35\xf1\xdc\xe4\x18\x14\x51\x7b\x21\xea\x21\x2f\xb9\x09\x0a\xb7\x4a\xf6\xbe\x8c\x21\xcd\x90\x07\x62\x3a\xef\x83\x31\x10\x03\x5c\x0e\xa8\x1f\x01\xb3\x78\x08\x5c\x0c\x55\x4e\x27\x12\x74\x6b\x05\xb3\x83\x1a\x19\xa8\x34\xc2\x5d\x9b\x45\x36\x43\x26\x9f\xd1\x41\xf2\xd6\x35\xb2\xef\x2a\xa4\xea\x1e\xe7\x38\xcb\x1a\x91\xf9\x56\x0e\xa6\xa9\x6c\x1f\x9a\xd4\x46\xd4\xf4\x04\xfa\x0c\x0d\x26\xc0\x39\xd4\x65\xda\x76\x66\x2a\x2a\xeb\x93\x12\x2c\x4d\x90\x8e\x72\xe8\x50\xe5\xca\x88\x75\xd9\x36\xa1\x2c\x72\xad\x60\x1a\x94\x69\x45\x9a\x52\xe2\xa9\x9f\x21\x57\xca\x64\x5b\x69\xdc\x15\xa3\x19\xba\x5e\x84\x6a\x50\xbd\x76\x6a\xd4\x13\xd7\x5e\xd1\x3a\x25\xac\x32\x0d\x6c\xe5\x72\xcc\xba\xb6\x09\x4e\xcd\x22\xc7\x05\x92\x22\x00\x5d\x9f\xe8\x50\x8d\xd0\x66\x79\xcb\x22\x2f\x5a\x9d\x57\x45\xa0\x92\x64\xa1\x42\x4d\x91\xe9\xae\x72\x93\x2d\x79\x10\x34\xcd\xf1\x8b\xd0\xde\x66\x98\x4c\x08\x5a\xc4\xc3\x58\x15\x99\xf3\x38\x4f\x0c\xf5\x36\x0a\x2f\xeb\xac\xad\x6d\xd3\x64\xba\xeb\xa6\x3e\x9a\xce\x40\xcd\xe7\x90\x5d\x20\xd0\x43\xf5\x34\x83\xaa\x94\x72\x59\x3f\xa2\x98\xb9\xb2\x1c\xfd\xd8\xb1\x66\xc0\x23\xce\x06\xaa\x92\x1c\x22\x0c\x63\x2d\x05\x42\xb4\x9a\xe3\x36\x53\x81\x75\x74\xa0\x50\x57\x18\xb0\x84\x2c\x49\xa0\x30\x40\xa3\xb2\x34\xd6\x81\x38\xe4\x7d\x91\x8b\xc6\x15\x74\x9c\x74\x67\x74\xdd\xc7\x39\xe8\x75\x2f\x95\x52\xe3\x50\x97\x05\xa7\x4e\xd8\x1a\xb0\x21\x1b\xa3\x44\xd9\x94\x06\x5c\x68\x33\xe5\x50\x14\x89\x42\xdb\xd3\xa1\xf2\xce\x8c\xfd\x1c\xbb\x48\x1c\x93\x01\x50\x89\x5a\x4c\x7a\x57\x0e\xa4\xc9\x0b\x28\xe3\xc8\x2a\x12\x5a\x4c\x10\xe7\x84\x72\x6d\x70\xe7\x74\xaf\xa3\x6a\x02\x9b\x63\x17\x82\xfb\xde\x9a\x91\xeb\x58\x70\x15\x2a\x05\x81\x35\x34\x76\xf9\x48\x6d\x6d\xfb\x4c\x65\xc2\x73\xdb\xc0\x4c\x10\x57\xea\xbe\x12\x86\xcd\x10\x22\x32\x5c\xc8\x52\x40\x64\xa3\x1a\xb2\xb6\x1f\xad\xca\x1a\x5c\x66\xa8\x2a\x63\x24\x9a\xd9\xc8\xc6\xd8\xc3\x96\xb7\xd9\x40\x82\x00\x25\xce\xd5\x1c\x41\x7b\xd7\x27\x40\xa9\x45\xc9\xe8\xa2\x2b\x27\x2b\xac\xa8\xe3\x34\xf2\x66\xc8\x3b\x53\x0e\xa6\xa0\xc1\x27\xe4\x95\x51\x24\x4a\x3b\xd4\x4d\x35\x47\xb8\x1c\xc2\x30\x1a\xab\x71\x60\xb0\x94\x79\x6b\xca\x34\x22\x97\x37\xd0\x89\xb1\x12\xac\xea\x68\x0d\xd0\x58\x8c\xd2\x77\x48\x51\xaf\xba\x9c\xe6\x73\x48\xd6\xaa\x30\xca\xe3\x16\x8c\xce\x54\x79\x44\x32\xd6\x54\x35\x0c\x95\x5c\x6a\xd5\x12\x2d\x22\xae\x04\x85\x55\xb0\xb5\xf3\xb6\x74\xb2\x9a\x83\x5e\x17\x53\xac\xb0\x2e\x06\xe6\x38\x55\x53\x4a\x4a\x97\xa5\xce\x54\x97\x33\x23\x44\x93\xea\xd8\x03\xa5\xca\x29\xcf\x41\x0e\x2a\xe5\xe4\xe4\xe7\xc8\xe4\x4f\x34\x67\xd1\x47\x24\x6d\x07\x28\x8c\xc0\x79\x97\x0d\x9c\x08\x64\x9b\xb2\xcd\x24\xd5\x59\xc8\x91\x50\xbe\xb1\xa0\xb0\xde\x4a\x40\x67\x20\xb6\xb4\xc4\x2d\x33\xac\x2b\x09\xea\x5d\x41\x13\x88\xc8\xd5\x6d\x2f\x15\xb5\xa0\x17\x53\x33\x51\x90\x75\x09\x43\x58\x8e\xc6\xc3\x66\xaa\x28\x9f\x43\x08\x83\x28\x06\x33\x68\xda\x38\xa5\x2b\x3d\x92\x4e\x0c\x39\xab\x7a\x9e\x0d\x05\xe7\xa6\xac\x79\x6a\xa7\xd8\xf4\x36\x12\x2a\x94\xf3\x9c\xd1\x39\xfc\x45\x83\xd2\x08\x78\x96\x4d\x04\x71\xc7\x74\x97\x97\xac\xb0\x75\x2c\x86\x41\x01\x91\xe3\x4a\xf8\xd2\x86\xe0\x84\x49\x76\x68\x6d\x31\xe9\x6a\x8e\x3a\xd6\x2c\xf2\x81\x82\xa9\xe9\x61\x09\xa3\xae\x8c\x69\xb4\x1e\x7c\x31\x6a\x5e\x9a\x90\x51\x8b\x9c\xf1\x9d\x1c\xf1\x38\x7a\x9d\xfa\x52\x95\x76\x06\xe1\x9c\x36\x0a\x67\x93\x72\xd2\xbb\xa8\xc6\xc0\x18\x8e\x3e\x90\xc2\x8f\xfd\x14\x98\x6e\x8a\x52\xf9\xd4\xe9\xa7\x2d\x25\xcb\x9a\xbc\x6c\x45\xcd\xe6\x88\xf8\x32\x41\x8a\xbc\xc5\x55\x8a\x79\x3d\xa6\xb6\xec\x7d\x4c\xc6\xe6\x21\xb3\xdd\x90\x07\xde\x49\x44\x43\xdd\x0c\x44\xd6\x4d\x3d\xe2\xb6\x15\xf9\x1c\xa2\x60\x2c\x26\xda\x22\x30\xb4\xd4\xa8\xd4\x37\xb2\x18\xaa\x21\x72\xdd\xd9\x5a\xa6\xc1\x89\x11\xa0\xa6\x60\xc8\x3b\xca\x62\x17\x54\x86\x18\x98\xa3\xfa\x7e\x1c\x89\xc7\x82\xb0\x11\x35\x6d\x2c\xcb\x7e\x2a\x47\xef\x09\x6c\xbd\x0a\xd0\x76\xd8\x09\x59\xd4\x56\x06\x9d\x49\xa7\x98\x97\x61\xb2\xcf\x14\x3c\x16\xea\xd7\x9b\xa1\xc2\x03\xf6\xbc\xea\x8d\x21\xae\xc3\xae\x52\x11\xc9\xee\x7f\xfd\x5d\xdb\x44\xa4\x30\x64\x65\x37\x41\xe8\xa0\xe4\x58\xa6\x21\x08\x1a\x48\x35\x47\x06\x66\xd4\xa8\x27\x6a\xca\x79\x39\xb2\xbe\x4f\x5e\x38\x10\xd8\x30\x45\x50\xb7\xaa\x41\x95\x84\x45\x24\xda\xe1\xa9\xcd\xbc\x2c\x9b\x22\xba\x6c\x0e\x07\x23\x18\x00\x43\x59\x3b\x6f\x5c\x9e\xfb\x49\x39\x8d\x46\xcb\xd1\x94\x81\x16\x28\xa6\x43\x9e\x08\x96\x0a\xbb\x84\x98\xd4\x8d\xc8\xa3\x9a\x23\x14\x70\xc8\x34\x3c\x87\x75\x16\x5c\x1a\x99\xce\x2a\x61\x1c\xee\x93\x97\x32\x53\x39\x0f\x68\x08\x71\x6c\x0a\x16\x7d\x30\x9d\x99\x3c\x35\x6a\x0e\x1a\x25\x65\x2c\x1b\x2e\xbc\x16\x45\x2b\x09\x42\x0d\x73\xae\x55\xa2\xcd\xe3\x58\x6b\x97\xaa\xa9\xaa\x28\xe6\x4e\xe5\x22\xd4\xfd\x38\x0c\xc1\xce\x41\xaf\x0b\x20\x79\xdb\x88\xa6\xf1\x8e\xc1\x9e\xa5\x3e\x74\xda\xc7\x52\x54\x65\x1f\x32\x92\xd9\xbc\x7a\x9a\x5a\xb5\x3e\x36\x92\xd9\xa6\x57\x93\x9f\xa3\x78\x6b\xa8\x32\x26\x9b\x7e\x10\x32\x09\xc3\x5b\xcb\xfa\x90\x7b\x2a\x41\x59\xe4\xa0\x2b\x61\xa7\x1a\x1d\xf5\x18\x9a\x8c\x76\x28\xf3\x25\x23\x6e\x0e\x32\x87\xdb\xbe\x19\x59\x15\x42\x6e\x25\x25\xbd\x9d\x0c\xe6\x13\x2d\xea\xc8\xdb\x1c\xc0\x82\x9b\xba\x83\xca\x40\xd1\x96\x3c\xeb\x46\x23\xdd\x1c\x39\x31\x36\xb5\xa9\xcf\x55\x4f\x46\x39\x38\x2d\x4b\x13\x11\xf1\x90\x55\x9e\x02\x64\xa0\x92\x46\x76\x75\xc6\xca\x09\xb6\x4e\x29\xc2\x89\xd4\x7e\x8e\x5d\x34\xd2\xe5\xa9\x1c\xc9\xe4\x3b\x6a\x3d\xc9\x39\x1a\x9b\x98\x55\x93\xa8\x3d\xa9\xa4\x69\x72\x54\x45\x5a\x03\x51\x56\xb6\x2e\xdb\x46\xd8\x7c\x8e\x5a\x2c\x84\x1a\x04\xd4\x58\xb1\x71\x74\x3e\x4f\x9e\x90\x96\x86\x28\x69\xa2\x65\x51\xba\x29\x39\x01\x9a\x41\x04\xea\xcb\xbc\xe9\xbb\xae\x49\xb3\x94\x22\xf7\x1d\xc4\x01\x56\xac\xe6\x9d\x1c\x26\x55\x4c\x83\xe9\x48\x84\x79\xa9\xf4\x60\xa7\x41\xe7\xcc\xb8\xca\x29\x56\x80\x81\x8f\x9d\xe3\xa6\x9e\xe3\x2c\x24\x0a\xd8\x82\x09\x76\xb2\x72\x6e\x30\xd5\xc4\x6b\x6f\xad\x1a\x3c\xed\xbd\xc8\x35\x44\x29\x50\x4a\x6b\x9c\x8b\xc1\xd7\x59\xaf\xcc\x2c\x8d\x78\xa2\x52\x8d\xe7\x53\x96\x75\x82\x2a\x66\x08\x25\x92\x4f\xd3\xd8\x8b\xd8\xf6\x59\xa7\x8b\x04\x7a\xa7\x4c\x0c\xd4\xf1\x76\x54\xb8\x1f\xeb\x39\xa8\x83\x71\xa2\xe8\x5c\xca\x26\x0b\xda\x22\xf7\xb5\xb5\x4f\xc7\x07\xb6\x12\x04\x09\x6e\xb3\x34\x88\x0c\xda\xa9\xac\xfb\x51\x9b\x92\x70\xae\xab\x39\xc4\xe2\x4e\x16\x3a\xd3\xac\xf1\x63\x65\xcc\x90\xc8\xd0\x79\xde\x3b\xcc\x52\xae\xeb\x49\x94\x75\x33\x15\xa1\x6e\xbc\x1b\x3a\x35\xc2\xa9\x37\x78\x0e\xf1\x87\xb5\x75\x57\x65\x82\x4f\x74\xc8\x53\x43\x21\x97\x30\x13\x25\x27\x5d\xd3\xf6\x63\x8b\xca\x09\xd3\x16\x76\x39\xcc\x48\x69\x7b\xdc\x66\x94\xc4\x39\xe2\x0b\x5c\xf7\x85\xb2\x25\x51\x12\xe3\xd1\x34\x0a\x11\x90\xa6\x50\xb7\x63\xdf\x14\xc6\xe6\x85\x1a\x9c\x46\x29\x14\x72\x20\x63\x3e\xf1\xce\xb3\x39\x5a\x5a\x3c\xb3\x75\x99\xe7\x5e\x66\x51\x93\xae\xb1\x53\x6b\x74\x6d\x87\x7a\xc8\x4b\x58\xf5\xb8\xed\xb2\xba\xe4\x46\x04\x6c\x54\x01\x58\x93\xc5\x7c\x8e\x3b\x55\xc1\x41\xb5\x29\x95\x02\xd9\x51\xf5\x2d\x11\x8d\x56\x29\xf5\x2a\x0e\x88\x02\x9d\xe5\x1a\xd8\x9c\xb5\x1e\x5b\xe6\x4d\x9b\xb4\xe9\xfa\x39\xaa\xe3\x38\x1f\x33\x97\xd5\x23\x22\xbd\x97\xb0\x03\x35\xee\x33\xd2\x47\x8c\x90\x69\x81\x4d\xdc\x45\x11\xca\x81\x77\x06\xd6\xaa\xf0\x65\x4e\xf8\x1c\x64\x2e\xc8\xaa\xf7\x7c\x22\x45\xdb\x10\x56\xf0\x31\x0b\xba\xce\x55\xca\x88\xc6\x43\x56\xf1\x96\x9a\x9a\x7b\xa5\xb4\x9f\xc6\xac\xe5\x75\x43\xf3\x39\x5a\xa9\xeb\x14\x35\xcd\x47\x3f\xb4\x01\x92\xbc\xc0\xc1\x14\xad\x4f\x40\x36\x9a\xb6\x80\x74\xa1\x86\x13\x81\xb5\x97\xa9\xf1\xbd\x6e\x70\x20\x73\xd4\x37\x53\x5b\x61\xd4\xf6\x59\xaa\xfb\x2c\xf6\x16\x66\x75\xe1\x13\x8b\x53\x6b\x65\x63\xea\xa1\x1b\x23\x87\xad\x35\x35\x70\x60\x7a\xfa\xab\x1e\xd8\x1c\x29\x2e\xe6\x60\xca\x31\x9d\x86\x41\x32\xde\x14\xde\xd3\x6a\x9a\x86\x34\x72\xd4\x27\x3e\xb5\xd8\x32\x8c\x01\x8e\x99\xea\x89\x64\xa8\x87\x9d\x8d\x73\x08\x61\xa2\x19\x0a\xc5\x54\xdf\x94\xa5\x62\x98\xd4\x7c\xb2\x04\xb5\x7d\x98\x0c\x6c\x1b\xa6\xb1\x49\x34\x06\x27\x47\x56\xc4\xa2\x40\x78\x1c\xe3\x1c\x4c\x20\xe7\xe5\x10\x18\xeb\x62\x8d\x47\x43\x90\xce\x12\x25\x15\x00\x00\x33\xd6\x96\xc9\x6a\x57\x50\x3e\xc5\xa2\xd4\xa9\x21\x9a\x19\xdc\xd4\x73\xf8\x8b\xc6\x4e\xa0\x17\x35\xc2\x53\xee\xa1\x4a\x76\xe2\xd1\x25\x5b\x96\xb4\x2b\x40\x9d\x4f\x03\x32\x1a\x16\x80\x65\x8c\xb7\x43\xe1\x9a\x69\x62\x73\x08\x1e\x29\xc5\xd2\xd7\xb8\x27\x45\xe7\x13\xa9\x2c\x27\x82\xa1\xda\xd8\x22\x8d\x88\x64\x7a\x44\x41\x95\x50\xe5\x26\xea\x56\x73\x9f\x3a\x9a\xcf\xc1\x04\xda\x66\x68\xa9\xec\x8c\x36\xba\xc3\x99\x9f\x38\x21\x89\x0f\x69\x04\xd5\x10\x26\x88\x4b\x21\x48\x45\x89\x26\xce\x68\x43\xf2\x62\xa4\x7a\x8e\x6f\x84\xbb\x2a\xa3\xa3\xed\xa1\x35\x78\x0c\x1c\x0f\x20\x8a\xb6\xaf\x32\x38\xe4\x69\x48\x29\x11\x20\x70\x9e\xc6\x6c\x0c\x1d\xa5\xaa\xa9\x03\x9b\xe3\x4e\x05\x29\xda\x4a\x73\x58\x08\xce\x83\x61\x93\x91\x6d\xec\x51\x1a\x70\x26\xfb\xbe\x6f\x6c\x57\xa2\x1e\x37\x46\xba\x04\xb1\x33\x55\xd1\x30\xf4\x0c\xc1\x63\xa1\xa9\x43\x33\x54\x78\xa8\xa9\x6e\xb4\x71\xa8\x87\xd5\x04\x0c\x9f\xc6\x29\x88\xa2\xa8\x3b\x86\x64\x5b\xc2\xbe\xf5\x15\xa9\x21\x17\x2e\x24\xd0\x65\x26\x44\x6d\xe7\x68\x26\x21\x1d\xee\x63\x5b\xb4\xa0\xd0\xc8\x64\x23\x91\x43\x26\xe8\x98\xaa\x89\xf5\x1a\x8b\x36\x98\x5e\x10\x95\x19\x91\x0f\x08\x08\x3b\x34\xc5\x1c\xb9\x52\x26\x90\xc8\xc5\xa4\x2c\x63\x2e\x18\x98\xf5\x61\x6a\x6b\x27\xeb\x5a\x54\x00\x14\xd2\xb2\xaa\x51\xa5\x48\x7d\x5e\xe7\x13\xd7\x53\x8f\x5c\x3e\x47\x41\xb4\x07\x41\x86\x54\x4d\x6d\xa2\x6d\x56\xc1\x22\x0b\x4d\x51\x22\x65\x73\x88\xeb\xb1\x37\x4a\x0e\xac\x15\x5d\x31\xd4\x2a\x77\xc9\x17\x93\x9f\xe5\xfa\x83\x2a\x66\xc8\xe8\xba\xaf\x43\xa7\x7c\xe2\x43\x59\xf1\xa1\x91\xb0\x0e\xd2\x71\x37\x21\x2b\x30\xf4\x45\x23\xe9\xe4\xea\x26\x55\xd1\xcd\xf2\x69\xeb\x29\x33\x39\xd6\x4f\x7b\xd3\xa1\x28\x3c\xd2\x63\x39\x06\x56\x0c\xa3\xad\xbc\x95\x3c\x6f\x06\x22\xa2\x25\x8d\x82\xad\x4b\x42\xe6\x59\x35\xc7\x2f\x02\x25\x2e\xa8\xc2\x7e\xca\xbb\x9a\x71\x42\xad\xa3\x4d\x8a\xc3\xe8\xa0\xc1\x24\xd1\xd1\x22\x67\x41\x51\xa4\xca\x50\x1a\x27\xc2\x0a\x35\x47\xe5\x8f\x2b\x87\x10\x11\xcb\x99\x1e\x69\xdf\x74\x09\x64\x80\xb0\xa8\x29\x69\xa9\x4e\x03\xc9\x09\xab\x32\xef\x70\x70\x6d\x55\x34\x55\x84\x92\xcf\x71\xfd\x55\xa2\x07\xca\x50\xe8\xfa\xa9\xa8\xb2\xbe\xaa\x4c\x8b\xf9\xc0\x41\xd6\x4f\xbc\xb7\xaa\x2f\xea\x81\x47\x8b\x47\x53\x94\x95\x4b\x12\x81\x7e\x8e\x29\x09\x9a\x94\x4d\xd6\xf2\x7c\xb2\xa8\xec\xa6\x50\xe5\xb0\x88\x6c\x6a\x2c\xad\xfa\x5c\xb0\xbe\xd0\x88\x14\x6e\xa8\x5d\x31\x30\x26\x93\xaf\xa3\x9f\x21\x2c\xa2\xa5\xcc\x45\x8b\xeb\x3a\xb5\xd1\xe6\x49\x96\x6e\x62\x48\xd3\xa8\x24\x48\xa1\x9b\x14\x68\x44\x25\x6b\x54\xe9\x3a\x2b\x0a\xcb\x51\x1e\xe6\xc8\x3a\xd0\x18\x21\xee\x4d\xa9\x20\x42\x75\x53\x20\xce\x26\xad\x1b\x2e\x31\x91\xa0\x21\x7d\x4e\x7b\xd8\x76\x9c\x13\x10\x00\x31\x99\x02\x8c\xcd\x92\x81\x99\x3a\x53\x8a\x6e\x62\x10\xa3\xda\x6a\x00\xe5\x50\xd3\x61\x88\xa8\xaf\xac\x1d\xbd\xe8\x05\x1b\x51\x68\x72\x10\x06\x59\x0e\x64\x6a\x54\x35\x43\x26\x9f\x15\x4e\x5b\x10\x6d\xac\x95\xb5\xf5\x08\x63\xe9\x5a\x0c\x26\x37\xe8\x16\x93\x34\xe9\x31\x1b\x0b\x00\x3a\xef\x60\x2f\xb2\x49\x0f\xb5\xe1\x73\xd8\x05\xb7\xa2\xef\x98\xf2\x63\x47\x46\xa4\x28\x00\x43\x51\x4a\xdb\xa0\xa6\x18\x6a\xc8\x61\x17\x35\x6e\xaa\xa9\xcc\x6c\xb2\x19\x4e\xbe\x2d\xed\x1c\x15\x61\x43\xad\xbb\x56\xd0\x50\xe5\x13\x2b\x89\xf3\x0a\x14\x0c\x8f\xff\x1b\xa4\x94\x91\x22\xc0\x44\xce\xf3\x0c\x70\x23\x25\x6f\x62\xee\x2b\x3f\x47\xd0\xde\x23\x1e\x79\xce\x25\x11\xba\x73\x31\x16\x3e\xd4\x93\xac\x93\x97\x42\xe7\x53\x2a\x63\x1d\xd9\x28\xf0\xc4\x60\x39\x50\x00\xaa\x00\xab\x39\x32\x73\x89\x96\x04\x28\x8a\xf0\x38\x05\x53\x12\x18\x9a\x61\x12\x06\x06\xdf\x4c\x30\x44\x9f\x14\x63\x03\x13\x2d\xd5\x8a\xeb\x26\x73\x0c\xcc\x31\x91\x8a\x42\xd4\xe6\x8e\x16\xa1\xc7\x6a\x88\x45\x06\x2b\x91\x8c\x07\xa9\x33\xa9\x2a\x27\xca\x68\xa1\x6b\x39\xf9\xd8\xb4\xed\x90\xb0\x68\x2a\xc9\xe6\x28\x51\xb7\xa8\x29\x22\x1b\x5a\x25\x40\x98\x44\x13\xa4\x92\x08\x65\x63\x9b\x82\x18\x07\xd9\x58\x44\x5c\x17\x68\x37\x4e\x4c\x19\x42\xbb\x30\xd5\x73\x54\x4d\xf2\xa9\x85\xdd\xd4\xb8\x81\x14\xb2\xce\xa2\x2e\x52\xc1\x68\x2d\x06\x0f\xca\xbe\xea\x06\xd8\x63\x50\x8a\x69\x80\xba\x0c\x70\x80\x16\xe7\xfd\x1c\xd3\xb9\xea\x9e\x08\x32\x24\x61\x7d\x3f\xd4\x65\x2b\xfb\xbc\x67\xb8\xa8\xa0\xe1\x40\x09\x1d\x7d\x4f\xa7\x20\x47\xc4\xbc\xf5\x23\x31\xcc\x06\x3a\x87\x7c\x9f\x42\x4c\x59\x15\x79\x55\x95\xc9\xf8\x41\xf7\x36\xcf\x48\x17\x9c\xe9\x8c\xc0\xce\xaa\x91\x44\x80\x60\x47\x6a\x5c\xb7\x95\xa7\x8e\xcc\x91\x5c\xa2\xc6\x50\x11\x0b\x1d\x86\xbc\x0e\x0d\xf1\xa0\x2b\xf2\xb2\x34\x65\xb0\x15\x01\x5d\x28\x34\x27\x31\xf3\x39\xc8\xd4\xc0\x89\xe8\xeb\x7e\xa4\x73\xcc\xf0\x88\x68\x1a\x72\x4a\x00\xd6\xc4\x79\x59\xd5\xb0\x64\x44\x0e\x4d\x65\xcb\xd1\x13\x48\x6a\x9f\x59\x06\x69\x0e\x26\x1d\xab\x2a\xf0\x22\x9f\x65\xda\xce\xc0\xc6\x5a\x39\x5d\xb4\xe5\x20\x61\x18\x5a\xd4\x0c\x2d\x0a\x02\x25\x40\x79\x55\xb7\xc3\x58\x4d\x95\xee\xa3\xb7\xd5\x20\x9c\x6b\x00\xaa\xe7\xa8\x4b\xeb\xea\xb1\xd3\x84\x54\x18\x97\x99\xcd\x69\x27\x0a\xa8\x93\x2c\x15\x04\x49\xa7\x88\x84\x69\x88\x10\x1e\x14\x9c\xd6\x56\x67\xb2\xcc\x66\x69\xd0\x44\xb1\x51\x92\x65\x42\x62\x24\xad\x56\xdd\x68\x6b\x02\xc6\x6a\x94\x2d\x30\x3c\xf3\x88\x75\x0c\x38\x11\x7a\xda\x81\x20\xca\xa6\x1a\xc0\x2c\x09\x95\x2a\x59\x8d\xb0\x32\xda\xab\x89\xd7\xa9\x0c\x55\x68\x08\x1d\x88\xae\x7d\xd5\x96\xa4\x1a\x05\xc4\x4c\xc9\x51\x21\x6a\x4a\x4f\xf8\x1c\xd5\xf7\xb4\xc9\x0d\x2f\x33\xd3\x22\x69\x88\x81\x98\xdb\x62\xd2\x45\x1e\x79\x9d\x19\xce\xda\x26\x4e\xd6\xe9\x40\x7b\x2f\x45\xeb\x3a\x19\x70\xc6\xe7\xf0\x9d\x22\x87\x63\xd6\x22\x18\xba\x12\x7a\x4d\x41\x4b\x10\x46\x29\xc4\x28\x89\xf0\xb6\x82\xed\xd0\xb8\x14\x03\x80\x62\xa8\x78\x2c\x33\x37\xcb\xd4\x36\x04\xe1\x54\x65\x7d\xab\xeb\x81\xf6\xd8\xca\xbe\xab\x27\x4a\xf5\xe4\x49\x2c\x28\xb4\x30\x43\xbd\x17\x8e\x96\x74\xd0\x23\xce\x3a\x28\x00\x78\x86\xe0\xb1\xd0\xec\xe4\x19\x04\x8f\x64\xeb\x69\xe8\x10\xa8\x2d\xf1\xb4\x96\xcc\x95\x3c\x72\xde\xe9\xd6\x71\xaa\xcb\x08\x8c\xc8\x23\x9b\xc8\x50\x27\xe6\xbb\xac\x1a\x84\x9a\xe3\x27\xec\x80\x50\x15\x97\x55\xcf\x0d\xf0\x1d\xd3\x55\x89\xa6\xbe\x09\xd0\x14\x1e\x7a\xe5\xb9\x6e\x22\x49\x68\x08\xb1\x95\x82\xf3\x9a\x9a\x7e\x8e\x52\x21\x9a\x68\x3d\xb0\x81\xc2\x06\x29\x0d\x0a\x62\xf2\xd1\x25\x2c\x3a\x62\xea\x7e\xcc\x3a\xcc\xb4\x9a\xb8\x89\x39\xaf\x14\xe9\xcb\x50\xf7\xb3\x0c\x70\xd5\xba\x1b\x83\xb2\xfd\xd8\x8a\x38\xc2\xa4\xc8\x58\x93\x90\x46\x20\x7c\x8d\x05\x07\xd6\x50\xdb\x29\xa4\x15\xaa\x0c\x69\x65\xe0\x55\x35\xc7\xc5\x23\x0c\x0d\x3d\x8b\x92\x27\x2f\x68\x4d\x29\x89\x53\xae\xc5\x34\x25\x34\x52\x0d\x84\xaa\x8d\x2e\x8b\xde\x71\x36\x0c\x7d\xc9\xcb\x98\x67\x73\x48\x50\x54\xb9\xb1\x51\xb9\x1c\x98\x13\xa0\x28\x5c\xea\x48\xde\x06\x89\xb1\x4e\xb5\x6f\x33\x9d\xdb\x4e\x80\xac\xf3\x48\xf9\x82\xe5\x90\xf0\x59\xfa\x4a\x43\xf0\xed\x04\xcb\xc1\xb2\xc6\x8c\x41\x10\x54\x20\xd6\xb7\x59\x5f\x77\x12\xb2\x64\x74\xe8\xbb\xbc\x8b\x35\xb7\x79\x89\xbd\x08\x65\xb5\x84\x96\xf9\x5f\x0c\xce\x1c\xed\x80\x82\x05\x42\x8e\xe9\x38\x56\xc0\x36\xd5\x60\x23\x0a\xbc\x9c\xa4\xeb\x5a\xc8\x2b\x0e\x35\xed\x51\xc9\x7c\x3d\x85\xa2\xcc\xe7\x20\x30\xd6\x20\x40\x6c\xc7\x82\x7c\xfa\x86\xcb\x53\x27\x32\x27\xa2\xab\xc6\xd8\x67\x82\x3b\x5c\x62\x3b\x4e\xad\xe5\xbc\x41\x53\x5e\x88\x9c\xd1\x39\xec\x62\x60\x58\x97\xa0\xc7\x6d\x4d\x8b\x4a\x07\xd0\xb7\x3d\x54\x59\x41\x54\xe6\xc1\xd8\x25\xdf\x34\xb0\x73\x2e\xa9\xb6\x68\xfa\xa1\x37\x13\x06\xb3\x74\x74\x26\x85\x4c\x2f\xf2\x06\xe6\x39\x77\x16\x60\x9b\xf7\x5c\xb9\xce\x77\xbc\x19\x6a\xd2\x87\xb6\xe6\x66\x2a\xb2\x2c\x35\xb4\x12\xa8\xcb\xd2\x1c\xe5\xb7\x42\x59\x94\x3a\x9e\x19\x5a\xe7\x31\xaa\xbc\xc7\x3c\x73\xfd\xc4\x5d\xab\x65\xd3\x8c\x7d\x2e\x7c\x28\x07\x51\xf0\x11\x66\xba\xc4\x74\x9a\x65\x4a\x82\x9f\x88\xe3\x9c\x17\x3d\x52\x58\xfd\x6f\x15\x07\x6f\xc7\xa1\x6b\xcb\x6c\x42\x43\x83\x52\x01\x70\xd5\x80\xc2\x69\x17\x73\x5a\x61\x69\xfc\x2c\xed\x3d\x40\x28\x3b\x59\x94\xdb\x96\x0c\xed\xa4\x3d\x47\x80\x16\x31\xab\x78\x33\x50\xd5\xe2\xb2\x34\x44\xf8\x2a\x45\xcb\x92\xc2\x95\x1e\xe9\x1c\x15\x1e\xd4\x4e\x53\x97\xe3\x11\x57\x42\x71\x2b\x7d\x93\x55\x19\x73\x93\x69\x79\xd9\x67\x23\xd2\x40\x81\xde\x4c\x13\x49\x84\xb3\x50\x77\x18\x81\x19\xf2\xc6\x4c\x51\xda\x51\x2f\x35\x8f\x7d\xe3\xf2\xac\xaf\xb1\x35\xbe\x20\x6d\x2a\x55\x8b\x4c\x46\x20\xaf\x2a\x92\x85\x5c\x09\x9b\x67\x19\x04\xbe\x9e\x83\xcc\x99\x36\xef\x61\x0f\x9b\xb6\x30\x7d\x2e\xad\x07\x0c\x93\xb6\xec\x2b\x64\xed\x64\x06\x87\x07\x42\xa7\x69\x34\x8d\x35\x4a\x01\xcc\xc6\xc9\xcf\x31\xe6\xad\x8e\x52\xc0\x29\xc4\x56\x15\xad\x72\x11\x71\x2c\xf2\xac\x76\x9e\xf7\x46\xb0\xcc\x1b\x9e\x21\x8a\x50\x70\x3c\x74\x02\x69\x81\x43\x35\x47\xde\xb8\xa2\x38\x65\xbe\x92\x55\x33\x38\x1e\x02\x23\x3e\x93\xc1\xf2\xd1\x64\xc4\x17\x65\xdb\xb4\xbc\x69\x3a\x3f\xc2\xc6\x74\x36\x2f\x35\xd1\x71\x8e\xca\x1f\xa1\xa0\x9e\x44\x27\x99\x6b\xf3\xac\xa0\x80\x99\x40\xcb\x2e\x76\x49\x0f\x9e\xdb\xae\xc1\xb8\x97\xb6\x12\x04\x37\x03\x1f\x85\x71\x92\xcd\x21\xdf\x4f\x35\xae\x6a\x33\xb8\x1e\x90\x20\x07\x53\xc7\x3e\x64\x12\x68\x95\xb7\xba\x65\xd2\x08\xcd\x43\x6a\x58\xc3\x78\x1b\xea\xc8\xdd\xa8\xe7\xb8\x47\x68\x0f\x35\x6b\x5d\x18\x89\x4b\xe3\x54\x89\xc0\xf1\xe8\xfb\x21\x53\xaa\x36\x50\x4d\xbd\x23\x86\xaa\x5e\xd1\x51\xd0\x28\x39\x27\x1d\x98\x63\x08\x21\x4d\xd4\xb6\x8e\x59\x8f\xec\x50\xa8\x8a\x06\x08\x9a\xc0\x51\xea\xab\xa4\x1c\x8a\x2e\x84\xa1\x51\xf9\xd4\x8d\x12\xc3\x82\x28\x5e\x8a\x6a\x96\xec\x75\x47\x04\x69\xc3\x58\x4f\x36\x01\x65\xa6\x7c\xf0\x19\xc9\x5d\x6f\xbb\x4e\x0b\x9f\x15\xc1\xf4\x6a\xe0\x3c\x92\xd0\x0c\x03\x44\xb1\x99\x65\x8c\x2c\x0d\xad\xb0\x7a\xac\x6d\x97\x5c\x9b\x0f\xf9\xc4\x41\x05\x32\xe9\xd3\xd8\x71\x6a\x99\xeb\x9b\xae\xab\x9d\x1b\x06\x25\xac\x55\xa5\x92\x73\xb4\xb4\x30\xe2\x28\xd1\x45\xc2\x36\x34\xa6\x84\xad\x11\x8d\xa8\xc7\x34\xa2\x66\x54\x18\xe3\x49\xd0\x96\x10\x01\x0b\x88\xeb\x61\x14\x25\xb2\x7e\x0e\x39\x8e\xe6\x19\xee\x00\x26\x30\x04\x58\x96\x20\xcf\xa1\xa2\x01\x56\x6d\x53\xb6\xa5\x9d\x58\xec\x78\xa8\x75\x5b\x15\x64\x94\xf9\x04\xfb\xca\x96\x74\x8e\xd9\x2e\xa8\xee\xe9\x14\x5b\x5e\x87\xd8\xf9\x5c\x33\xe4\x47\xd6\x96\x60\x52\x55\xeb\x08\x77\xb9\x13\xbd\x6f\x21\x69\x0a\xd8\x03\x49\xd3\x58\xcc\x22\x16\x33\x59\x57\x51\x88\xbe\x0e\x26\x9b\xdc\x48\x3a\x21\x3a\xdb\x85\x8a\xe9\x26\x4d\x1d\xc3\x6d\x31\x40\x38\xe5\x19\x60\x9c\x43\xc3\x0a\x39\xcb\xb8\x81\x22\xab\x69\x53\x00\x85\x26\x53\x4c\xba\xb4\xc0\xda\x9a\x07\xee\xf3\xda\x54\x2a\x42\xde\xe4\x79\x5b\xe4\x24\x1b\x26\x67\xf3\x94\x65\x6c\x16\xa9\x41\xb9\xca\x62\xa4\x3b\x0e\x71\x1f\x18\xa9\xab\x18\xbb\xc1\x30\x8d\x5c\xed\x59\x65\x43\x94\xaa\x80\x63\x6d\x4d\x4d\xb8\x1f\x7d\xcd\xb3\x39\x22\x3e\x01\xdb\x91\x94\x58\x94\x8d\xe2\xc5\xa0\x9d\x37\x43\xdf\x0d\x8d\xa0\x98\x08\x13\x32\x58\xe5\x14\x60\x49\xfa\x12\x90\x32\x97\x04\xa3\x25\x6e\xf6\xc5\x82\xc7\x02\x2f\x40\xcd\xf2\x4a\x0b\x4a\x9a\xeb\xa8\x5b\x5c\xa1\x29\x31\x1e\xe9\xa4\x07\x29\x40\x6f\x83\x71\x88\x8c\xb8\x72\x68\x4c\x15\x2b\x3b\x14\x7d\x68\xeb\x59\xda\x38\x7c\x1e\x11\x29\x27\x6e\x91\x52\x83\x70\xd4\x8b\xaa\xca\x42\x21\x8c\x85\xb2\xf0\x8e\x20\x03\xdb\xbc\x96\xc1\xe8\x06\x8e\xa9\x54\x05\x98\xa3\xcc\xb2\xcf\xa1\x7b\x3a\x4c\x14\xc1\x56\x80\xd4\xc6\x81\xae\xca\xdb\xc9\x33\x08\x4d\xd6\x71\x57\x12\x01\x59\xec\xec\xd8\x33\x6d\x32\x01\x47\x30\xc7\xf5\x87\xd0\xa8\x12\x14\x3e\x6b\xca\xa6\xd3\xb0\x7b\x3a\x0a\x6c\xd1\xe8\x5d\xd5\x43\x41\x78\x35\xb4\x5e\x76\xb4\x4b\x0c\x54\xbe\x43\xd8\x60\x3b\xc7\x59\xa0\x08\x47\x08\x50\x11\xad\xd6\x59\x5b\xa8\x54\x43\x41\x47\x33\x46\x6c\x6c\xd1\x65\x63\x93\xd3\x4e\xb0\x22\xc9\x48\x85\x2d\x7b\xc6\xe7\x20\x30\x8c\x66\x79\xce\x18\x16\x8d\x9c\xd4\x34\xb6\xb2\xef\xf2\xb6\x69\xa1\x68\x42\xc8\xa2\x96\x53\x0d\x06\xd3\x35\x45\x36\x0c\xd3\x18\x65\x5f\x80\x7a\x8e\x6e\xb5\x02\x85\x02\xd6\x3a\x1a\xc1\x9b\x29\x15\xb0\xcb\x4b\x66\xad\xa9\x5d\x65\x8b\x0c\x38\x5a\x74\x84\xa6\x41\x38\xeb\x70\x33\x2a\xdf\x09\x36\x87\x28\x58\x0f\x86\x68\x9d\x95\x9d\x05\x88\xb4\xa2\xcb\xe0\x04\x08\xe8\xe5\xc8\x65\x9b\xe5\x5d\x59\x5b\x50\xea\x1c\x8e\x03\xd5\x44\x8d\x4c\xc4\x39\x3a\x7d\xe9\xe8\x98\x2c\x33\x53\x44\x46\x06\x37\x31\xd1\xf5\xae\x63\xdc\x91\x9e\x25\x37\xd1\x1e\x32\x82\x73\xa1\xf8\x98\x74\x1b\x9b\x11\xba\x6c\x96\x09\xd1\x21\x94\x43\xe3\xb0\x4c\x31\x27\x56\xe8\x11\x93\xae\x35\xbe\x19\x47\xcd\xc6\x7c\x4a\x59\x84\xa2\xf1\x8e\xc3\xc4\x5c\x97\xb3\x72\x4a\x73\x08\x61\x14\x76\x9d\x46\xc4\x90\x7a\x68\x5a\xef\x5c\x03\x73\x5c\x29\xa7\x45\x63\x6a\x56\x23\x2e\xf3\x52\xe3\xbc\x61\x05\x1b\xe1\xa4\x6d\xc6\x94\x9d\x23\x38\x2b\x14\x9b\x88\x43\xd5\x98\x49\x9d\xa0\xa6\x20\xd2\x72\x1c\x86\x66\x88\xd4\xe5\x60\x20\xa6\x64\xba\x51\xba\xa8\x5d\xd7\xc1\x2a\x87\x72\x8e\xc9\x00\x6c\xa0\xce\x35\x16\xe2\x66\x20\x95\xa1\x6d\x2a\xe0\xa4\x55\xd1\xb8\x4c\x75\x43\xc8\xca\x41\x8a\x36\x94\x23\xf4\x22\x6f\x62\xed\x47\xe1\xeb\x39\xec\xa2\x99\x18\x1a\x4c\x0e\x70\xc8\x94\xeb\x6b\x9f\xf1\x42\xb6\xa4\x87\x59\xe9\x2b\x3e\xb4\x6d\x02\x45\x1e\x65\x82\x42\xb6\x32\x6b\xa5\xa3\x7c\x96\xf9\x04\x29\xcb\x48\xa5\x7d\xf5\x34\x95\x14\x75\x68\x7b\x96\xdb\x2e\xe5\xc9\x13\x61\xc7\xce\xf9\x7a\x62\x11\x54\x39\x8c\x75\x52\x83\xc0\x2a\xce\x11\x22\x66\x0d\x9b\x46\x94\xe5\x34\xeb\x7d\x3e\x76\x8e\x47\x25\x71\x59\x22\xe7\xb1\x1b\xa8\xef\xfb\x5a\x00\x50\x0a\x02\x50\x08\x83\xcb\x51\x5b\xcd\x31\x52\x97\x04\x37\x24\xa1\x18\x1c\x0b\x3a\x76\xa6\x48\x84\x0e\xd0\xd5\x40\x61\x8f\xf8\x40\xa7\x12\xf3\xc9\xf6\xa1\x0c\x0a\xc9\xc1\x29\x27\xe2\x1c\x75\x69\xc2\xe7\x2d\xe3\x4d\xa8\x13\x71\xb1\xad\x5b\x35\x4a\x4a\x0c\xa0\x75\xde\xd6\xa0\x8b\x26\xcb\xb2\x6c\xa8\xe2\x38\xc4\xa8\x6d\x93\x41\x55\xcf\x41\x1d\x86\x86\xf5\xbc\x80\x8c\x09\x3a\xe5\xdc\x86\xac\xca\x74\x2f\x48\x17\x01\xb5\xd2\x31\xc1\x27\x6e\x60\x3d\xa1\x94\xf3\x0c\x61\xda\xd9\x59\x86\xcd\xd9\x26\x6a\xa5\x62\x5b\x76\x59\x33\xd8\x02\x49\x30\xc2\xba\xf7\x99\x19\x90\x06\xb6\x28\x79\x8d\x03\xa2\x53\x19\x00\x88\x11\x47\x07\xe6\x28\x88\x66\x06\x8e\x8e\x4c\x3a\x2f\x23\x02\x46\x03\xd2\x0f\xad\x80\x65\x55\x6b\x07\x9c\xcd\xcb\x64\x05\x49\x83\x75\x13\x96\x12\xe7\x28\xab\xd8\x1c\xed\x80\x14\x8d\x0a\x37\x66\xe8\x60\x5d\x36\x93\x40\x4d\x44\xd0\x65\x8e\x94\x40\x34\x22\xd6\x5a\x6a\xa9\x52\xca\x72\x52\xa4\xaa\xee\xf2\x09\x7a\x35\x47\x1d\x6b\x9b\xd5\x24\x1a\x3a\x1a\xef\x93\x1f\x40\x0b\xd1\x98\x8c\x57\x45\x02\xc1\x35\x75\xdb\xe2\x0e\xf8\x1c\x64\x2e\x36\x58\x7a\x5a\x84\x62\x96\x71\xe4\xa8\x15\x2d\x02\xae\xe9\xd8\x40\x05\xf5\x91\x5b\xe3\x4d\x53\x96\xd4\x52\x08\x6d\x46\x92\x52\x46\xc7\xe9\x69\xbe\xcd\x8d\x6b\x72\x3b\xcb\x14\x26\x23\x73\xa5\xba\x49\xf6\x32\x4d\xa5\xa3\xa8\x1c\x24\x09\x5a\xba\xbc\x35\xd5\x84\xf3\x61\x04\x9d\x28\x4b\xc2\x5a\x55\xf7\x91\xc9\x61\x9c\xa3\xc5\x9e\x75\x90\xca\x3a\x27\x2e\x77\x74\xea\x4a\x3e\xf5\xbd\xf5\x3a\x8e\x19\x36\x55\x3b\xe8\xaa\xaa\x87\xa7\x23\x1c\x6a\x6d\x68\xb3\x38\x5a\x96\xec\x1c\xf5\x47\x63\x33\xe1\xc8\x23\x1e\x75\xaa\xc7\xa9\xec\x75\x0d\xa6\x02\x3b\x59\xd0\xa2\x14\x19\xb5\xb6\x21\x5a\xe1\xa0\x30\x44\x29\xc9\x18\xd4\x2c\x75\xac\x13\x10\x3e\x25\xe3\xbb\x94\x7a\xee\x2c\x22\xc1\xf4\x1e\x2a\x2e\x3b\x25\x44\xc9\x11\x2b\xeb\x3e\x41\x25\x98\xf1\x45\x3f\x00\xc6\xe7\x90\xe3\xa8\xe8\x3d\x2c\x88\xd4\x4c\x05\xdf\x83\x52\xd7\xaa\xea\xa0\xf2\xac\x6d\x10\x28\xc7\x4e\x9b\xc0\xf8\x44\x6c\x9b\x28\x90\x12\x35\xa6\xaf\xe7\x10\x3c\xca\x3e\x4f\xfd\x58\xb3\x22\x54\xb4\xa0\x6a\x1a\x48\x69\x79\xdf\xca\xd4\x65\x4d\x5b\x99\xd0\x39\x53\x65\x4c\xe2\x02\x36\x6d\x1f\x39\x36\xd5\x1c\x42\x18\x4b\x94\x4a\x29\x61\x9b\x4d\xc9\xe6\x43\x9b\x75\xb4\x8f\x80\xf2\x09\x02\x2b\x62\xe2\xb5\xe2\x9a\xcb\x8c\x81\x5c\x46\x63\x6b\x93\xeb\x39\xa4\x49\xee\xbb\x5a\x75\xb4\x85\xd2\x75\x1e\x94\x53\xd1\xf1\x1e\x08\x94\x5c\xff\x74\x80\xc5\xc5\xd4\x36\x1a\x8d\xb0\x51\x09\x87\x50\x21\x33\x81\xe9\x19\x82\xc7\x42\xef\x58\xcf\x50\xe1\xc1\x25\x1f\x02\xcf\x20\x2e\x38\x77\x15\x43\xc8\x38\x28\x28\x0c\x84\x86\x0a\xb9\x68\xfb\xda\x8c\x43\x3d\xd6\x0d\x80\x75\x69\x73\xd9\xf0\x39\x42\x01\x92\x78\x57\xe2\x28\x95\xcb\xfa\x6e\x04\x95\xc4\x90\x80\x5a\x2b\x65\x61\x4a\x2d\x23\xc1\x0b\xc3\x87\xa9\xca\x75\x9d\x07\x46\x48\x98\xa3\x27\x9f\xd5\x36\x45\x91\x49\x97\x91\x28\x3c\xaf\xaa\x5e\x4a\x23\x3a\x9f\x91\x5c\xba\x28\x7c\xae\x19\xd3\xac\x40\xa8\x28\xec\x38\xe6\x53\xe0\x7a\x8e\xcc\x5c\xd1\xd4\x6a\x92\x45\x4f\x42\x0b\x9a\x80\x4c\x45\x2d\x9e\x7a\x9c\x71\x63\x9f\xa6\x90\xa4\xf1\x58\x37\x35\xf5\x6d\x93\x37\xc1\xa0\x62\x74\x73\xbc\x9b\xa3\x4c\xde\xf6\x43\x12\x2d\x53\x3e\x9b\x1a\x45\x30\x4c\x65\x01\x89\xec\x11\xe8\x44\x4f\xb5\x4e\xbc\xb4\xa1\x8e\x13\xc9\xea\xd0\x10\x08\xe6\x70\x73\xba\x10\xb6\x85\xa5\x87\x99\xcc\x53\x4a\x9e\xb6\x15\x6b\x8b\xd2\x09\xc1\x00\x05\xac\xb4\xaa\x05\x42\x64\xd0\x54\x40\xb0\x80\x34\x98\xa3\x44\x9d\xf5\x20\xc4\x1a\xf1\x49\x2a\x24\xa3\xc8\x60\x8b\xa2\xd4\xf9\x24\x10\x45\xc8\xd6\x83\xb1\xb0\x1a\x65\xd3\xf3\xa7\x8f\xc2\x4d\xa8\x6d\xe6\x78\x66\x92\xaa\xac\x2a\x8c\x51\xc8\xe2\x49\x0d\x49\x31\xd6\x94\x02\xe7\x84\xe1\x44\x00\xb6\xd2\x08\xda\x06\x16\x54\xe9\x54\x6a\x11\x44\x51\xcc\x42\xa3\x40\xc0\x90\xc5\xc6\x7b\x95\x44\x44\x5d\x21\xc0\x58\xb7\x1c\xb2\xae\xe2\x98\xd7\xa6\xc2\xfd\x88\x35\x86\x03\xcc\xda\xb2\x67\xb2\x27\x69\x0e\xeb\x14\x83\xac\xb9\xcd\xfa\x49\x85\x96\x47\x21\x81\x71\x43\xd9\x02\x0d\x99\xc4\x34\x94\x05\xe8\x79\x1c\x26\x5d\x55\x7e\xaa\x8a\xdc\x36\xc5\x1c\xb9\x0f\x96\xd5\xce\x43\x80\x33\x4a\xb0\xe4\x74\x20\x4f\xdf\x7a\xae\xe5\x7a\xe8\x31\xee\xa4\x6c\x3a\xab\x2b\x43\x6b\xdd\xd6\xdd\xd8\x65\x8d\xaa\xd3\x1c\x7a\xbf\x98\x3c\x99\x88\x09\x0e\x31\xd5\x83\xca\x6b\x88\x3a\x44\x83\xf6\x4d\x66\xe9\x50\xe4\x52\xa5\x66\xc8\xd5\xd4\xc2\x90\x98\x94\x4d\xae\xe6\x78\xae\x58\x33\x46\x43\xd3\x71\x87\xa6\x2a\x55\x56\x3a\xad\x43\x05\x6a\xdf\xb2\x71\xc8\x43\x1f\x6a\x5d\xc0\xb6\xf5\xd3\xd3\x91\x72\x80\x7d\x20\xd9\x1c\x5f\x6a\x92\x93\xaf\x25\x0e\x53\xae\xda\x36\x4a\x4c\x12\x67\x85\xc0\x30\xcf\xc7\x29\xaa\x42\x8e\xc1\xd5\x52\xe7\x78\xd4\x1e\x97\x55\x07\x35\x9d\x83\x3a\x44\xcc\xf2\xda\x57\x69\x64\xaa\x6f\xfb\x60\x35\xe2\xae\x36\x06\x02\x82\x68\xc3\x70\x0d\x3b\x5f\xe4\x49\x93\x9e\x57\xce\x66\x49\x17\x73\x3c\xad\xc8\x60\x2c\x62\x37\xaa\x3c\x28\x36\x56\x36\xf4\xae\xd1\x8d\x09\xd0\x0d\x53\x93\x82\x44\xce\x11\x89\x7c\xac\x50\xc6\x22\x02\xde\xe5\xb5\x9a\xa3\x5e\xb1\xa4\x23\xaf\x8d\x84\x54\x23\x3c\xb2\xc4\x8c\x19\x61\xe7\x33\x24\x75\xcb\x39\x2a\x4c\x55\xe5\x82\x3b\xa2\x80\xcc\x30\x03\x3e\xb8\x7e\x06\xb1\x98\xd5\x8d\x27\xd2\x76\x5e\xf7\x00\x8d\x3e\x9a\xba\x02\xd0\x45\x20\x07\xa4\xbc\xcc\x6b\x69\x3a\xdb\x56\xae\xf0\x43\xa5\x23\x2a\x3d\x1a\xd8\x1c\xc4\xd6\xbb\x09\xab\xac\x06\x02\xa1\xbc\xb3\x5d\x01\xbb\x64\x92\x28\x00\x87\xd6\xe0\x32\x98\x72\xb4\x52\xd6\xa8\xc4\x29\x27\x8e\xb6\x7c\x8a\x73\xd4\xa5\xb5\x52\xc6\xca\x14\x98\x0a\xe8\x7b\x53\x33\x57\x77\x02\x48\x54\xe9\xa9\x6c\x84\x14\x14\x8c\x65\xe4\xd1\xe3\x61\xac\x18\x2a\x05\x19\x67\xa9\x6a\x20\x09\x77\x15\xe4\x8c\xd8\x1c\x16\xbc\xed\x63\x29\x21\x4c\x8d\x92\x79\x6f\x14\x36\x2e\x0d\x35\xc2\x66\x18\x35\xc3\x0d\xee\x40\x95\xa5\x39\x3c\xb8\xb3\x31\xf6\xb1\x21\x0a\xe3\x24\x43\x23\xb0\x87\x5d\xd7\xd7\x39\x93\x0c\x14\x43\x2c\x6d\x18\x62\x01\xbc\x80\x03\x94\xb5\x15\xde\xcf\x22\xfe\xf8\x20\x0b\xdc\x20\xec\x11\x06\x4a\xa4\x80\x3b\x3a\x70\x6d\x24\x2e\xe4\x64\x73\xe1\x1b\x3b\x0a\x8e\x5c\x2d\xf3\xbc\x65\xb8\x46\x5a\xcf\x52\x8b\xc5\x26\x58\x75\x45\x41\x73\x20\xf2\xa6\xb4\x81\x6a\x96\xf2\x42\xa2\x01\xf1\x66\xac\xc9\xe8\x9c\x64\x83\xe0\xb5\xf6\x7d\xd6\x83\x11\xf1\x39\x24\x6b\x6f\x86\x9c\x96\xd0\x61\x89\x46\x6d\x6d\xf1\xff\xd0\xf6\xef\x2f\x00\x7d\xef\x5a\x20\x24\xd3\x68\x33\x43\x82\x39\x9d\x29\xa9\x26\xa3\x66\x0a\x62\x88\xd9\x6b\xad\xbd\x88\x9a\x91\x46\x42\x6a\x6a\x6a\x18\x71\x62\x18\xa2\x75\xbf\xdf\xef\x6b\x10\x91\x4e\x45\xbf\x58\x16\xa6\x1d\xc9\x50\x14\x03\x0d\x4c\x4d\xa5\x50\xa2\xb4\x8c\x14\x2a\xa5\x0c\x84\x42\x23\x6f\x59\x6a\x64\xea\xa1\x0b\x9f\xf3\xed\xc4\x81\xe3\x4f\xf5\xdd\xff\xc1\x62\xed\xbd\xde\xcb\xf3\xbc\xef\xf3\x2c\x3f\xfb\xf3\xb8\xcc\xe3\xd6\x96\xa2\x8a\x16\xb6\xb0\xb8\x9a\xbb\x9c\x2c\x9e\x4b\xfa\x07\xda\x2e\xb4\x2a\x41\xf3\xa3\x38\x9f\x85\xc0\x65\x7d\xb2\xe3\x89\x32\xf8\xbb\xed\x1d\x35\x78\x40\x85\xa6\xf5\x18\xe3\xb6\x1b\x11\x73\xf2\x49\xc5\xa7\xc8\x52\x87\x3e\xa3\xab\x09\xcd\x83\xf9\xac\xf8\xdd\xbc\x8a\xc0\x67\x85\x13\x28\xf0\xf0\xa1\x47\xda\xeb\x30\xd1\x0f\x33\xfd\x13\x43\x09\xd5\x67\x72\x35\xa2\x72\x00\x1c\x49\x81\x42\x62\xd8\x6c\x06\x8d\xd0\x86\x22\x5d\xd7\xca\xd8\xf5\xe9\x40\x6f\xc7\x6d\xe3\xb4\x7d\xf1\x77\x32\xbb\x66\xe7\x93\x86\xe7\x6c\x90\xdd\x35\x65\x71\x64\xad\x62\xd3\x03\x3d\x02\x11\xbb\x52\x77\x9e\xf6\xc4\x0c\x67\xd9\xd4\x7f\xb2\xe8\xdf\x34\x58\x80\x3b\x1e\x0d\x93\x79\xf1\xf1\x3c\x7e\x27\x30\x49\x0f\xaf\x3d\x3e\xcb\x32\x8e\xcc\x39\xcf\xe6\x55\x54\xfc\xa6\xfd\x85\x1c\x39\x4d\x8a\xfa\xe6\x0b\xb6\x2f\x84\x8d\x71\x70\x51\x7b\x0d\x0c\x9d\x06\xc7\xdf\x88\x4e\xd1\x6d\x95\xf9\x0e\x4c\x0f\xaf\x57\x61\xfe\xc5\x1b\x21\x95\x56\x1b\x75\x40\xbe\xc0\xca\xc5\x60\x5d\xf0\xf6\x2e\xf2\x4e\x02\x77\xae\xfe\x19\x61\xcb\xa3\x41\x3a\xd3\xed\x9a\x75\x7c\xcb\xcf\xb7\xa5\xfd\xaf\xfe\xa5\x7f\xee\x3f\xff\x8f\xff\x96\xff\xd5\xdf\xf9\x6f\xff\xad\x5f\xfb\x13\xff\x35\x42\xff\x97\x7f\xfd\x8f\xff\xed\x7f\xfd\x4f\xdb\x5f\xfc\x47\xff\x5d\xbf\xf0\x57\xfc\x8b\xff\xe2\x1f\xf9\x47\xfe\xe5\x0f\x26\x3c\xd8\x84\xb7\x76\x2e\x2d\xf0\xf0\x95\xde\xb8\xd2\xd1\x55\x72\x76\x00\x17\xa1\x4a\x2d\x7a\x71\x02\x1d\x91\x25\xf2\xb0\x59\xb0\xfa\x45\xe2\x89\xba\x40\x1e\x51\x09\x8b\xcb\xdd\x96\x7f\x18\x38\xb7\xa4\xf0\xf4\x37\x6b\x42\x4e\xec\xbd\x93\xe8\x66\xcc\x69\x31\x8a\x5c\xff\x42\x3c\x8a\x66\xdc\x7c\x3f\xa1\xbe\x14\x35\x58\x75\x78\x1e\xcf\xf5\x79\x1c\x79\xe3\x8a\x0c\xb6\xb4\x6a\x51\x3c\xce\xb6\x75\xb3\x21\x11\x40\xbe\x58\x5d\x60\xce\x88\xa6\x66\x7d\x12\x37\xcd\xb2\xe8\xc2\xa8\xa8\x0c\x53\x77\x7f\xca\x62\xa3\xa6\x87\xcc\x25\x8d\xc1\x12\x57\x44\xa1\xad\x5f\x94\x88\xf9\x3c\xbc\x22\xd8\xa4\x0e\xaf\xf7\x08\xe6\x20\x10\x4d\x04\x57\x83\x98\x39\x61\x37\xc9\xbd\x89\x44\x10\x27\x8a\x28\x8a\x7a\xff\x05\x87\x8e\xe4\x7d\x23\x82\xb2\x29\x68\x72\xdd\x4d\x23\x3a\x77\x02\xa7\x4b\x8d\x5f\xb1\x95\xca\x87\x55\xa4\x2d\xf4\x22\x19\x5d\x0c\xb1\x5f\x28\xcc\x6c\x24\xa9\x75\xde\x9c\xe9\xe8\x53\x68\xee\xa7\x33\x13\xda\x32\x48\x56\x67\xe3\xe6\xac\xc3\xd0\xa3\x7c\x2f\x81\x31\xe0\x33\xdd\x17\x49\x98\xb4\xa9\x60\x60\x6f\x01\xcc\x71\x01\x16\x1f\xf2\x82\x22\x35\x95\x63\x1c\xe1\x53\xca\xfc\xae\x0e\x7d\x38\xb5\xfa\x9e\x58\xfd\xc2\x5a\x91\x5e\x8d\x26\x28\xad\x29\xec\x75\x4d\xa4\x8f\xf4\x1a\xbd\xc6\x18\x50\xd4\x27\x13\x0f\x64\x99\xec\x94\x19\x56\x7d\x0f\x79\x06\xf9\xc2\x2b\x86\xe0\xee\xe8\x84\x54\x74\x3f\x36\x6f\x0d\xe6\x30\xf3\x3a\x22\xd7\x6d\x20\x51\xc4\x1e\xf1\xa2\x76\x37\x5e\x29\x1b\x53\xeb\x9c\x9f\x30\xf9\x67\x19\xce\x62\xd8\xae\x50\x67\x52\xf0\xdd\x90\x81\xc9\xd3\x58\x3b\xc7\x01\x50\x3d\x28\x05\x76\xbb\x81\x9b\xc1\x9b\x77\x91\xf3\xc5\x8e\xed\x12\x7c\x78\xcf\xd9\x8b\x58\xcc\xaa\x9b\x3b\xc1\x48\x0a\x8b\x97\x5e\x44\x1f\x0e\x30\x51\x0c\x68\xe2\x4d\x88\x7a\x8e\x2d\x2f\xf9\x62\xfe\x68\x5a\x48\xee\xad\xa9\x70\xef\xeb\x4d\x67\xca\xfe\x0a\x64\x30\xa3\xf0\x79\xa9\x30\xef\x6d\x8b\x9e\x6a\x5e\x73\xeb\x36\x28\x8e\x4f\x9c\x06\x48\xdf\x31\x29\x33\x09\x04\x1c\x73\xd7\x5f\x44\x9c\x5f\x00\xe4\x6a\xbc\x1c\xa1\x59\xef\xde\xe2\x14\x65\x8b\xe5\x29\x28\xbd\xec\x0b\xa1\x4e\x6f\x95\x01\xcf\xe9\x53\xe2\x6e\x36\xc4\xd5\xd0\xcd\x4f\x1b\x01\x80\x6c\x4b\xb4\x08\x71\xa5\x07\x9b\xac\xae\xbc\x88\x8b\xd4\x7c\xe1\x39\xd6\xfd\xdc\x2b\xa3\xbc\xe5\x2e\x3e\x44\xa3\x6f\x7d\x5d\x7c\xe0\x23\x20\xdc\x72\xdf\x1c\x30\x3c\x9d\x9b\xc1\x77\xf6\xaa\xf0\x6b\xbf\x28\x54\x6b\xb5\x53\xe6\x47\xfb\xc3\x72\xf3\xf2\x61\x3a\xd4\xf5\xc0\x8e\xbb\x8e\xde\x42\x43\x18\x30\x7b\x15\xdc\x7a\x88\xee\x02\xa7\xea\x17\xf3\x47\x66\xcf\x48\xf6\x64\x40\xb6\x00\x59\x39\x6e\x2e\x37\xb7\xbc\xe2\x75\x1e\x44\x68\x40\xb8\x37\xb0\xc2\x72\x6c\x29\x9c\x9c\x37\xfd\x02\xbe\x3f\x4a\x77\x2b\xa2\xa3\x67\x70\xf6\x98\x3a\xc7\xc4\x2d\xbf\x12\x1e\xcd\x68\x85\x3b\xe4\x44\x2f\x1a\xee\xad\x93\xba\x37\xd7\x5c\x3e\xf9\x22\xcb\x18\x3a\xdc\xc4\x71\x73\x70\x7b\xc5\xb7\x1e\x7a\x14\x24\xd0\xdb\xdc\x3a\xe8\xc8\xa4\x4d\x83\xa6\x9c\x3b\xcd\xdf\x02\xcc\x27\x6a\x3b\x1b\xae\xf5\x94\xc7\x47\xbc\xe9\x80\x96\x1c\xc4\x1f\x7b\x56\x4d\xa3\x0d\xa0\x80\x71\x60\x60\xc3\x13\xe3\x19\x4a\xe5\xed\x27\x1e\x42\xd4\x27\x3d\x8e\x96\x3b\x85\x81\x9a\x52\x11\xd3\x6b\xe4\xed\x7c\xb7\xce\xaa\x94\xf9\x76\xac\xf1\xe5\x61\x86\x87\x68\xec\x03\xf8\x64\xb6\x82\xf7\x2e\x1e\x62\x60\x9b\x63\x83\x77\xf2\xa9\x0b\xb6\x0d\x77\x30\x2a\x3a\x06\x89\xfe\x5c\x5d\xe7\x24\x06\x1f\x50\x7d\xbc\xf7\x8b\xe9\x38\x92\x03\xf3\xd1\xa8\xb7\x85\x62\x42\x83\x4f\x5e\xed\xba\x02\xb5\x77\x0e\x56\x59\xee\x3a\x90\x73\x37\x0b\x71\x98\xbb\x42\x53\x7f\xbe\xc8\xa9\x8f\xea\xf0\xcc\xd2\x5a\x3a\x14\xc2\xe4\x90\xa4\x08\x93\x40\xb2\x52\x6f\x12\xd0\x86\xba\x88\x12\xbd\xb3\x14\xc9\x2b\x91\xeb\x5f\x88\x1c\x53\x24\x0a\xc5\xb3\x00\x15\xde\x4b\x2b\xc5\x67\x81\x3b\x8f\xf0\x12\xe0\xe4\xa4\x9a\xfc\xbe\x91\xf0\x67\x39\x2f\x08\x41\x69\xe5\x4f\xbc\xa5\xb8\xc3\x2c\x02\x3f\xf0\xd9\xc1\x92\xe0\xb3\x3d\x75\x3e\x90\xf9\x0b\x37\xd7\x8c\x33\xc3\xa9\x54\x29\xe1\xc3\x51\x8b\xe7\x16\xf6\xc5\x1b\x31\xfa\xc2\x68\x9b\x2f\x25\xa3\xc4\xf6\x4b\x5a\x06\x7a\xe8\x9a\x37\xbb\xc3\x97\x4b\xd9\x23\x87\x7c\xf9\xbb\x7f\x38\xa2\x2b\x0f\xfd\x62\xe2\x3c\x89\xc7\x12\xac\x20\x5f\x86\x9e\x78\x09\xf6\x33\xb4\xa4\x00\xcb\x4f\x26\x0f\x38\x91\x67\x4c\x3b\x4c\x8e\xd1\x9c\xc6\x6a\xd2\x7d\x21\x2f\xbc\xc1\x1d\xf6\x5d\x06\x53\x92\x24\x79\xd3\x0f\x1d\xd2\x78\x9f\x1e\x59\x2e\xd3\x35\x4a\x74\x83\xa7\x64\x55\x5e\x35\x5f\x1b\x10\xfc\x64\x52\x30\xb8\x70\x8b\x17\x10\x29\x0d\xa6\xca\xb1\xee\x43\xdd\x2c\x4f\xf0\x02\x25\x76\xac\x6c\x8f\xe2\xb5\xd1\x01\x38\x8e\x2f\x7c\xd3\xfd\x82\xfa\x64\x21\xa8\x29\xac\xcc\xe1\x58\x34\x68\xc0\xf3\x98\x42\xb9\xe9\x13\x03\x18\x48\x66\xa3\xaa\xe9\x8f\xe8\xc2\x3e\x51\x5f\xa8\x7f\x4e\x3f\xf2\xb3\x80\xc7\xbf\xf2\x8f\xfe\xb3\xbf\xfc\x7f\xfb\x5b\xfe\x5b\xbf\xf9\xdf\xf3\x27\x7e\x25\xff\x4f\xe1\x9f\xfa\x55\x7f\xf1\x5f\xf8\x27\xff\xf2\x7f\xf2\x5f\xfa\x2f\xfc\x27\x7e\xe3\x3f\x33\xff\xf1\xff\xee\xaf\xf8\xd3\xff\xea\x07\x13\x1e\x0e\x18\xff\x3e\x83\xf9\x57\xf9\xbb\x2d\x7f\x24\xc1\xec\x20\xd3\x40\x82\x31\x69\x0c\x26\xa1\x05\x6f\x17\xdc\x96\xe6\x6e\x6d\x3f\x51\x0e\xe7\x81\x28\xd4\x84\x5e\x25\xb1\xb9\x6e\x45\x29\x34\x78\x0b\x6a\xb2\xa1\x9b\x63\xf3\xd6\xdc\x3d\xe3\xb8\x72\x02\x85\x77\x29\x5f\xcc\x56\x90\x0a\x54\xd1\xa0\x46\xd2\x83\x13\x7a\xaf\x81\x47\x86\x37\x59\xeb\x0c\x43\x35\xbe\x5d\x0e\xbe\x99\x23\x58\xd9\x94\xcd\x4c\xb6\x7e\x51\x2e\x27\xe7\xa5\x4d\xf3\xa8\x69\x68\xa5\x3d\xef\xd2\xf6\xe2\x9c\x0d\x18\xec\x8d\xef\x4c\xce\x4c\x4e\x34\x78\x07\xdc\xe1\x3e\x62\x7d\x02\x35\x78\xcf\xfb\x11\xb4\x79\xd5\xb8\x51\x1d\xbf\x67\x8c\x3e\xc4\xd8\xca\x23\x08\x59\xbe\xc7\x9c\x25\xcc\x23\x97\x7b\x11\x3e\xe7\xd2\x2f\x9c\xc8\x63\xb4\x15\x5c\x70\xd8\x35\xad\x36\x34\x1e\x5d\xa7\x8f\x0b\x34\x98\x16\x91\x27\x54\xe1\xdd\xca\xa7\xe1\xc4\x1e\x67\x60\x77\xcf\x17\x83\x6c\xcb\x9b\x11\xa7\x05\x10\xed\x31\x36\xee\x42\x99\x6a\x33\x08\x6d\x40\x6a\x59\x56\x08\x1d\xa9\xc1\x7d\x6e\x7d\x35\x7e\x51\xc5\xcf\x17\x1c\xfa\x6b\x9a\x49\x67\xef\x0c\x42\x69\x74\x26\x6d\xc3\x75\x43\xa4\x75\x4d\xe5\xdb\xd7\x74\xe9\xa5\xdb\x56\x1f\x2d\x6e\xdb\x5b\xf1\x89\x57\x4c\xed\x0a\x3b\xe2\x3d\x32\x84\xad\x6a\x82\xa8\xf4\x55\xc2\xec\xfa\x26\x6e\xcf\x23\xf5\x30\xba\x48\x67\x22\x69\xf7\xc9\xaf\x20\x9f\x58\xb1\x5a\x42\xe1\x9b\x96\x77\xed\x66\x4f\xc9\x53\x5f\xf3\x18\x03\xde\x54\x7e\x88\x19\x39\x35\x66\x57\xba\xb3\xd5\xa2\xb0\xd4\x49\x8e\xe7\x8b\x26\xff\x6a\xb4\x96\x7e\x5f\x13\x95\x91\xf6\x59\x75\x4c\x7a\x44\x15\x49\xb6\xbd\x26\x6f\x92\x3f\xeb\x90\xc9\x1f\x59\x64\x5a\x42\x82\x4f\x4c\xca\xda\x11\x9e\x1b\x4e\x96\x27\x7d\x9d\xd8\x01\xde\xb8\x91\x67\x58\x36\x45\x1d\x2d\x8c\x8b\xf6\x16\x41\xda\x8b\xc3\xb0\xdd\xb7\xf3\x05\x1c\xa7\x2e\x49\x63\xb7\xfc\x98\x83\x5a\x80\xd1\x27\xec\x48\x3f\xe7\xc9\x39\x87\x85\x5c\x8e\x34\x90\x69\x55\xb0\x9a\xf0\x57\x39\xef\xbf\xd0\x6a\xd0\xc7\xf5\x1d\x03\x62\x3c\x35\x57\x24\x18\x36\x26\x86\x98\x1f\x6a\xc7\x91\x21\xf0\x0f\x68\x1b\x0e\x65\x9e\x40\x2a\x8f\x5b\xb0\x2f\x98\xfc\xcd\xeb\xda\x50\xd6\x36\xf4\xbe\x19\x05\xfd\xee\xe2\xa0\xd1\x8c\xb4\x0e\x83\x15\xb4\xd4\xfa\x16\x5e\x7c\x0b\x88\x1a\xba\x2a\xfb\x62\x0a\x8a\xb9\x63\x48\x4b\xbb\x5e\x9a\xe3\x4b\x45\xac\xe1\x2d\x8c\x5f\xc5\xc6\x7e\xdb\xc8\xa1\xd3\xa2\x27\x7b\xe3\xeb\x22\x76\x11\x59\xf2\xc5\x3c\x01\x3f\x21\x20\xd8\x3a\xe5\xcf\x4e\x4d\x78\x2b\x08\x4a\x5d\x75\xfe\x43\x8b\xc7\x7a\x91\x4d\x3e\xc8\x1c\xa2\xf8\xf3\x1c\xdb\x9e\x64\xbf\x70\x32\x6a\xc0\xa8\x11\x81\x7f\xc2\x0d\xc7\x49\x26\x04\x72\x05\xa7\x22\x68\xd1\x02\x86\x64\x0d\x0e\x95\xe8\x50\x69\xb6\x38\x6b\xdf\x3f\x81\xa0\x74\xaa\xd5\xaa\x60\x80\x35\x2c\x09\x0a\x66\xdf\x38\xa2\xea\xe1\xd4\x5e\xf7\xe9\x69\xad\x50\xb6\x93\x4d\x71\xf7\x5a\x01\xd4\xfd\x82\x37\xe6\xfe\xc4\xbb\x29\xe5\x47\x28\x48\xd4\x22\xde\x0a\x1d\x3b\x07\x78\x88\x29\x9e\xfd\x82\xd9\x5c\x7d\xd9\xa4\xf6\xb9\x24\x3d\xe2\x13\x29\xc4\x71\xa4\x5b\x7b\x03\xd7\xc4\xd4\x0a\x47\x06\x90\x72\x9a\x27\x9e\x27\x01\x9c\x0b\xd5\x07\x8e\x1e\x3d\xb1\x6f\x71\xa8\x9e\xe7\x13\xe5\x21\xc2\xf7\x0f\xd5\x79\x1a\xa9\xae\xe1\x0b\xef\xf7\xe5\x0e\x2b\xcb\x09\xec\xcd\x1a\xf6\xd8\x66\x30\x48\x35\xd1\x73\x1d\xc8\xa6\xb7\x2f\x22\x38\x06\x15\x2b\x41\xb1\xab\xde\x74\x38\xaa\xe5\x0d\xde\x06\x02\xa1\x8f\xc0\xcb\xfa\x16\xb0\x6a\xc2\x2e\xc8\xad\x59\x8f\x95\xba\x7c\x51\x5f\x48\xdc\x06\x5b\xe7\xe5\x38\x3e\x19\xf2\x45\xdd\xb2\x68\x86\xdc\xdf\xfe\x9e\xbe\x93\x3f\x9a\x27\x13\x83\xec\xe6\xd2\x8b\x5e\x76\xbe\x88\x5a\x70\xfb\xce\x0a\xee\x49\xf0\x61\x0d\x32\x06\x6f\x04\xe6\x81\xec\xba\xec\x93\x7f\x93\xf9\x19\xae\x47\xc3\x1c\xf6\x31\x10\x1e\xfa\x05\xf5\xb9\x2b\xe6\xef\x04\x57\xa9\xc4\x7b\x7d\xfc\xb4\xd9\xfb\x5c\xb0\xa7\x61\x05\x04\x6a\xe0\x73\x0f\x21\xdd\xcc\x0c\x91\x9c\x9c\x38\x5f\xc8\x4e\x33\xfd\x82\x51\x4b\xdc\x8f\x02\x36\xe9\x7a\x49\xf7\xe2\x96\x72\x69\xe0\x0c\xcb\x7e\x77\x7c\xf3\xd4\x53\xb4\x08\x51\x7f\x98\xba\x5f\x4c\x78\x70\xf7\x44\x01\xef\x36\x20\xd4\x70\xe7\x5c\x58\x90\xc9\xb1\x79\x3d\xf3\xf2\xb5\xb0\x14\xe3\x31\x70\x60\x82\xa8\x7a\x7e\x40\xfa\x44\xd9\x30\xca\x21\xf1\xee\x95\x66\xc5\xc3\xae\x97\xdb\x77\xa4\xa8\x4d\x1d\xdd\xf6\xbd\x5a\xd1\x92\xa0\xaa\x67\x3b\xeb\xe0\xa5\xa2\xf9\x42\xe5\x91\x44\xa9\x25\xf3\x33\x06\x62\x55\x03\xef\x91\x85\xd3\xd5\x47\xf6\x9a\x41\x59\xc6\x19\x2e\x5b\x1c\x42\xd8\x6a\xc3\xc5\x5e\xab\xdb\x17\x6b\xa2\x2a\x5d\x69\x21\xeb\x0a\x69\x50\x51\xbf\x0f\x49\x4e\x04\x5f\x7a\x01\x2d\x27\x48\xb1\x60\x04\xed\x70\x1c\x4e\x11\xd0\x21\xb6\xfd\x44\x53\x90\x03\x4e\x7a\xc1\xd3\xd6\x0e\x97\x60\xa5\x09\xf6\x5a\x5e\xa7\x1c\x89\x58\xc4\xfb\xeb\xf3\x90\x69\x03\x75\x9a\x7f\x61\x25\x3f\xe7\x8d\xfc\x2c\xe0\xf1\xb7\xff\xfc\xef\xfc\xdd\xff\xe4\x7f\xf9\x27\xfe\xf2\xdf\xfd\x53\xec\x27\x7f\xd1\xef\xfb\x8b\x7f\xee\xa7\xfe\xd6\x9f\xf9\xe7\x7f\xf2\xb7\xfd\x9f\xfe\x81\xff\xd8\x7f\xe6\x3f\x44\x7e\xf5\xff\xe4\x1f\xfa\xd5\x1f\x00\x1e\x81\xdb\x2b\x4c\x44\x6d\x44\x43\x85\x14\x87\x4b\x99\x2a\xe1\xa5\xf6\xa0\xe6\x0e\xdd\x18\x98\xe1\x3c\x46\x51\xd8\x74\x31\xe3\x7c\xd1\x3a\x3c\x9c\x14\x9e\x66\x20\x36\x12\xf1\x5e\x78\x18\x73\x8e\x3d\x1b\xa8\x55\xc2\x94\xc2\x39\x2d\x22\xab\xa1\x1e\x82\x62\xa9\x1c\xd9\x2f\xca\x65\x0e\x5b\xc0\x5d\x1d\x6f\x2b\x38\x4d\xbd\x43\xe1\x95\x25\x32\xa8\x89\x81\xe7\x02\xa5\x3a\x04\x03\x03\x5c\xba\xa7\xe8\x6e\xe3\x27\x62\x73\x34\xe5\x93\x8a\x82\xaa\xb8\xcb\xb7\x0b\x8b\xb4\xeb\x2e\x50\xb9\xf8\xfd\xd2\x66\xd9\xc1\xdb\xf0\xca\x37\xb9\x6f\x3b\x3d\x85\xfb\x05\xba\xfc\xbc\xab\x91\x34\xe8\xa6\x90\xd6\xbb\xca\x44\xe9\xb5\x23\x1c\xd3\xa9\x1a\x6f\x38\xcf\x43\x85\x0f\x48\x67\x52\x1c\x82\x3c\xf8\x2f\x64\x21\x29\x72\x9a\xd2\x42\x38\xc8\xc1\xbd\xc6\x78\x24\x15\x1c\x8f\x7e\xf0\x7d\xd5\x85\x2a\xde\xa5\x07\x64\xa0\xed\xd4\x02\x0b\xcb\xcb\xfa\x45\x03\x63\x70\x02\x70\x85\x84\xf6\x02\xb7\x1d\x4a\x4a\x40\xb5\x2f\xc6\x0e\x15\x31\x50\x2a\x3d\x1e\x88\x91\xce\x31\x18\x96\x25\xe3\xda\x17\x77\xe1\x71\xa3\xb6\x46\x4b\x59\xf7\x38\x1a\xbe\x5f\xd4\x06\x63\xf9\x49\x2e\x8d\x9e\x62\x1d\x29\xa2\x1c\xe1\x65\x70\xf4\xc2\x35\xfb\x82\x8d\xa2\xe6\x79\x49\x45\x9a\x24\xcc\x01\xe4\x39\x17\x36\xf0\xd6\x1c\xdd\xad\x89\x12\x31\x3e\xe3\x15\x8e\xd9\x9c\xf0\x22\x96\x8a\xf7\x3d\x5f\x08\x75\x0a\xe0\xe6\x39\x57\x3c\xcb\x66\x08\x27\x6f\x36\x91\xe1\x38\x47\xdc\x96\xbc\x6d\x7e\x25\x8c\x3c\xb6\x2a\x4a\xbd\x0f\x36\x2c\x7f\x31\x67\x42\x55\x9e\xd6\xf0\x80\xaf\x3e\x9b\x6f\x54\x01\x3e\xb6\x2a\xe6\x9f\xd2\x7b\x16\x57\x39\xe7\xfc\xe0\xe3\xa2\x77\x78\x5b\xad\xed\xe7\x13\x13\x54\x00\x2d\x6c\x97\xbe\x52\xf0\x91\x97\xd1\x27\x99\x27\x89\x55\x85\xe0\x16\x09\x1d\x8d\x66\x2d\x6b\x85\xb3\xe8\x59\x5b\x2a\x3e\xf1\x8a\x01\xe5\x11\x6d\xd0\x21\xaf\xbd\xd3\x39\xb1\xa1\xcb\xc7\x69\xbb\x9b\x0d\xc9\xde\x89\x42\x7b\xea\xb3\xbc\x12\x03\x42\xd3\xaa\x37\x5f\xec\xe4\x67\xb3\xf4\x8b\x84\xa9\x45\x22\x55\x67\x4a\x86\xe7\xbd\x0b\x8d\xfb\x06\x21\x92\x57\xc9\x9a\x87\x2c\x8e\xf8\xdd\xb4\x3b\xf3\x3e\x5f\x14\x67\xc7\x87\x56\x26\x9e\xf6\xb6\x65\xc7\x31\x75\xf0\x5d\x23\x08\xe6\x59\x71\xad\xde\x1b\x32\xab\x64\x18\x37\x2c\x91\x6c\xa9\xe3\x27\x4c\xbe\x48\xbb\xf2\x8e\x7a\xb4\x2f\x09\xcf\x6a\x32\x07\xcf\xea\x79\x72\xf3\x43\x76\xca\x61\x5e\x58\xf5\x7d\xf5\xa3\xa3\x16\xce\xc9\xfa\x45\x1e\xa1\xd5\xa4\xa8\x39\x0e\xfb\x91\xd7\x77\xe7\x10\xe3\xb5\x99\x9e\xd3\x45\xc3\xe3\x72\x9a\x11\x2b\xbb\xe4\x8b\xa3\xe6\xbd\x0b\xd2\x2f\x8a\xf6\x7c\x13\xa9\xbc\x73\x0e\x9a\x9d\x92\x3f\x9b\x06\x57\xc6\x43\x79\xa9\xc2\x57\xd8\x10\xb0\xa4\xb2\x20\x49\x9b\xf1\xac\xa2\xc4\x17\x62\xb6\xc4\x5a\x11\x9e\x07\xbe\x97\x65\xc7\x62\xe5\xc4\x86\xa3\xf4\x34\x0c\x8e\xc7\x84\x9e\x85\x4a\xfe\x10\x3b\x7c\xf2\x2c\xa0\x9b\x01\xf9\x62\xf7\x9a\xe6\x1a\x53\x53\x53\x73\x4b\x5e\xae\xd0\xbd\x25\x51\xa1\x7c\x78\xe1\x56\x37\x26\x91\x1f\xb3\x13\x3a\xa6\x4f\x47\x5e\xdd\x67\xfd\xe2\x2e\x32\x82\x6e\x25\x57\xf5\x46\x67\xdf\x89\xe5\xc1\x14\x34\x50\xcc\x66\x2e\xa0\x89\x83\x26\x79\xf2\xec\xe2\xab\x13\x1d\x2c\x9f\xf6\x45\x36\x83\x5d\xe8\x73\xa7\x59\x62\x66\xce\x8b\xcf\x36\xb7\x89\xe4\x90\x27\xbc\x0c\x1a\x58\x1a\x72\xea\x0c\x8b\x0b\x94\xea\x82\x17\x7c\x52\xe5\x78\x6e\x8d\x5b\xbe\x3e\xf5\x87\x8a\xcb\x44\xe0\x12\xf4\x8d\x5c\xf3\x4a\x08\x4b\x55\xb1\x92\xd0\xd7\x8c\xaf\xa5\x01\xbd\x93\xb8\x2f\xaa\x1c\xb2\x8c\x8f\xc0\xd7\xa5\x2b\x22\x75\x9f\x8e\xd9\x56\x9a\xd9\x6e\x3d\xdf\x51\xf7\xfd\x2c\x8e\xf7\xa2\x2d\xa6\xcc\x1f\xed\x49\xff\x62\x1d\x90\x36\xd6\x02\x93\xfe\xb1\xfe\x25\x07\xce\x58\x36\x66\x84\x8f\x40\x36\x3c\x61\x43\x55\x92\x98\xd3\xbf\x6f\x7e\xd9\x91\x13\x6e\xf8\x09\xa1\xe2\x78\x9a\x37\x3d\x3a\x69\x62\x63\xbf\xac\xa0\x0d\x76\x0c\x9d\x47\xa7\x68\xe1\x56\x95\xc6\xca\x26\x1c\x35\x2c\xc8\x69\x89\x7d\x43\x71\x95\xb7\xbc\xb0\xaf\x3d\x74\x6c\x4f\x1b\x2d\x17\xfc\x6c\xee\xce\x91\x89\xbf\x81\x85\x73\x2b\xdc\xb1\x03\x55\xf9\x03\x9e\x11\xbe\x58\x1f\xa6\x24\x66\x95\x0b\x0e\xaf\xb2\x6b\xda\x10\xd4\xa3\x7d\x90\xc4\x32\xf7\x43\x9b\x56\xd4\x75\xec\xae\x94\xef\xa0\x8b\xfa\x43\xe0\x06\x9f\x58\x37\x47\xbd\x77\x05\xf7\xcc\xd8\x57\x7d\x80\xa6\x84\x6c\x92\x41\xf7\x61\x3c\x1c\x1d\xd7\x09\xa0\x22\xd4\x5e\x69\x37\xab\x94\x4c\x3e\xf1\x28\xb4\xb2\x6b\xf1\x3e\x88\xb9\xf2\xa6\xe3\xd9\x95\xf9\xca\xf4\xec\xa3\xc7\x1b\xd4\xab\xed\x88\xa7\xc2\xbe\x41\x2a\x4a\x42\x00\x3e\x89\x5a\x76\xe2\xe8\x70\xa8\xcb\x35\xa9\xe3\x16\x77\x4b\x3c\xe5\x78\x9a\xca\xa8\x21\xc7\xea\x68\xe1\x8c\xec\xa7\x21\xa2\x4c\x86\x07\xf9\x82\x98\xc7\x3a\xa8\x77\xf0\xf0\xea\xa2\xd9\x6a\xd6\xb3\x2d\x2d\xa7\x8f\xe2\xbc\xb1\x41\x5d\x9d\xf7\x92\x1e\x43\x3a\x8a\x2e\xdd\x34\xff\xfb\xb8\xb4\xfc\x5d\xe2\x7f\xfd\x5f\xf8\xdd\xbf\xf0\x37\xfd\xf7\x7f\xff\x4f\xd9\xff\xc1\x4f\xff\xb6\x3f\xf0\xcf\xfc\xd9\xfe\xd3\x3f\xf5\xb7\x7f\xe9\xdf\xfb\x07\xfe\x9f\xff\x87\xf3\x97\x7e\xf9\x1f\xfa\xa7\x3f\x58\x69\x09\x73\x07\x98\xd0\xc8\x4c\xb5\x4a\x0a\x13\x40\x54\x1e\xfc\xf2\x25\x40\x89\xb3\x9a\x02\xca\xa1\xcc\x11\x9c\xf2\xa8\xb3\xd6\xcf\x17\x68\x51\x61\x06\xf9\xe8\x8b\xd9\x0f\x41\x2f\x21\x61\xba\xe7\x02\x8a\xba\x3b\xe2\xcc\x9b\x3d\x7e\x9e\xe3\x44\x3d\x8a\xf8\x66\x0c\xd4\x5f\x94\x88\x04\xc3\x81\x6b\xde\x79\x8e\x79\xf1\x09\x76\x28\xd1\xeb\xb1\xf9\x22\x07\x64\xb2\x65\xc9\x00\xde\x67\x72\xf3\x98\x55\x27\xbd\x89\x7e\xc1\x95\x0a\x2d\x64\x35\x6f\x4c\xf2\x75\x04\x36\x2b\x07\x23\x1c\x1e\xcd\xd9\xa3\x27\x86\xba\x26\xfa\x3a\x1e\x0a\x9f\xeb\x74\xbd\x6f\xfe\x22\xd8\xd2\x67\xdf\xfc\x9a\x28\xa1\xd7\xfe\x1d\xd0\x47\xd2\x67\xdb\x02\xbf\xe6\x20\xce\x89\x31\xa2\x97\x42\xcf\x3a\xb6\x07\x89\x9c\xba\x9f\xcc\x13\x64\x4a\x23\xa7\x1e\x02\x9c\x61\x47\x3e\x1d\xf8\x10\x8e\x9d\xce\x56\x55\xac\xc3\x15\xcf\x4b\xde\x5b\x04\x73\xa4\x0c\xf8\xde\xf7\x7c\x91\x78\x06\x47\x3d\x54\x26\x63\xd2\xf9\x67\xb6\x6c\x50\x7b\xb4\x5f\x82\x85\xcc\xe0\x31\xa7\x1c\x0c\xa8\xa0\x41\x97\xb0\xa1\x0c\x25\x98\x2f\x5a\xca\x0a\x8d\xa7\x89\xf3\x20\x9e\x7a\x02\xb2\x3e\x19\xe8\x70\x60\x00\x13\x58\x19\xb6\xd9\xee\xbd\x33\xea\x44\xb5\x9d\xa2\x07\xfa\x8b\xdd\x6b\x4a\x9d\x45\x1e\xbd\xc0\x33\x8b\xb0\x77\x95\x1f\x6e\x9c\x71\xd6\xd6\x8a\xaa\x4c\x48\x92\xa4\x56\xba\x03\xcc\x77\xeb\xb7\x5f\x41\xbf\x78\xa9\x67\x11\xdd\x29\x67\x47\xea\x77\x3c\x68\xa8\xc3\x2e\x1a\x2a\x19\x26\x11\x25\x42\x4e\x21\xa5\xc7\x16\xd3\x02\x68\xe1\x1a\x11\xfe\x45\xeb\x30\xfc\xa3\x5b\x47\x8c\x07\x71\xf9\x18\x54\x2e\x34\xf2\x3b\x01\xe5\x88\x08\x42\x1b\x05\x29\xb9\x47\x50\x17\x86\xf7\xb5\x98\x4a\xbf\xd0\xad\x78\xab\x81\x0c\xfb\x62\x31\xda\x27\x11\xa9\xe7\x5c\x4c\xa9\x7e\x34\x7e\xf8\xc4\xa2\x07\x6f\x3b\xbf\xe0\xf1\x68\x79\x66\x50\x20\x5f\xbc\x54\x21\x45\x59\x41\x2a\xd7\xe7\xdc\xcf\x59\x9c\xd1\x57\x3f\x66\x9f\xe2\xfb\x4d\x8f\xa5\x76\x3c\x39\x64\x7d\xae\x6b\xb6\x78\xf7\x94\x2f\x76\x6c\x43\x5f\x18\x38\x62\xc7\xbc\x0f\x52\x30\x71\xf7\xe4\xb0\x0b\x16\x04\xf2\x37\xa1\xea\x14\xd5\x89\xc3\x73\x83\x42\x10\xd8\xfc\x89\xb7\x14\xa1\xfa\x18\xa4\x10\x8d\xf2\x38\xec\xd8\x72\xe2\x25\xec\xd6\x93\xd9\xbe\x9e\x0e\x26\xb6\x9a\x6f\xe8\xa0\x53\x40\x53\x36\xf0\xf9\x42\x78\x8f\xec\xa7\x1f\xff\xec\x37\xba\xa7\xed\x4e\x5f\x64\xdb\x85\xed\x6c\xb6\xb5\x79\x56\x47\x26\xc5\xd3\x5e\xc9\x4d\xce\xc3\xd6\x9b\xcb\x27\xdb\xf0\xca\x61\x26\xfc\x94\xba\x3e\xda\x01\x81\x74\x5c\x08\x0a\xbf\xc8\xe6\xbd\x76\x46\xd1\x13\x6b\xd2\xcf\x4d\x93\xbe\xac\xcd\xa4\xcc\x17\x1c\x3a\x13\x2c\x6a\x52\xf8\xdc\x2e\x6d\x68\xbb\xd1\xef\x0b\xd3\x0d\xd6\xe1\xb6\x17\x23\xa1\xaa\x45\x07\x40\x63\xf1\x2d\x9e\x07\xcb\xe7\x8b\x53\x38\x97\xb8\xa6\x42\x64\x9b\x49\xee\x32\x12\x78\x88\x0c\x20\x07\xae\xfc\x4b\x00\xf4\x4c\xf2\xde\x78\x5b\xac\xef\x74\x96\x25\x9f\xc0\x2e\x38\x86\x04\x5f\x17\x76\x28\x7c\xd4\xf8\x33\x22\xb2\x26\x18\xef\x78\x9f\x4d\x86\xf7\x00\x89\x6d\xdc\xc4\xae\x1f\xca\xb2\xf3\xe4\xf2\x05\x28\x58\xc1\x35\x1b\x73\x82\x84\xa1\xbe\x86\xe5\xd8\xc6\x93\x49\x89\xa6\xa4\xd7\x74\x39\x1f\xac\x96\x55\x61\x56\x5e\x1e\x19\xad\x69\x5f\x2c\xab\x56\x6c\xab\xdd\xc3\x65\x5e\x06\x3a\x1d\x4b\xdb\xdf\xe7\x29\x3a\x87\x54\x18\x54\xdb\xa6\x1f\x7a\x29\x72\x9c\xeb\x3c\xad\xfb\x34\xf6\x85\xda\x0e\x47\x0b\xbd\x36\xb6\x60\xfb\x56\x85\x63\x97\x91\xc0\x64\xe8\x0a\x10\x20\xed\x16\x13\x42\x26\x34\x44\xac\x9e\xe5\xce\xca\x94\x7d\x01\xbb\xec\x85\xe1\x6d\x5d\x9f\x32\x2e\x60\xda\x04\x18\xb4\xe3\xd4\xdd\x3e\x52\x1c\x8d\x39\x95\x8e\x1f\xe5\xd1\x0f\xb2\xbb\x5c\x43\xbf\x21\x11\xcc\x63\x72\x4f\x44\xe0\x62\x35\xdf\x9d\x3d\x41\xa2\x71\x12\x15\xb2\xcb\x31\xb8\xd2\xee\x24\xd2\x28\x47\x98\x56\xcf\x13\x3d\x1f\xf4\x23\x84\x7a\x70\x4f\x06\xe1\xed\x04\x52\x8c\x25\x78\x0c\x92\xcd\x23\xd0\xbd\x98\x5c\x61\xea\x65\xc8\x2c\x9c\x23\x64\x0f\xeb\xa4\xfa\xc9\xca\x6c\x37\x00\x82\x70\x8b\x12\xd5\xaf\x57\x6a\x55\xfb\x2a\x57\x6e\x40\x6c\x88\x76\x87\x57\xaf\xf6\x4e\x10\x64\x18\xfd\x2d\xd7\xa2\x4f\xac\x9b\xf9\x78\x5f\x75\x03\x05\x7b\xaf\xae\x6f\xb6\xf7\x05\x24\x43\x73\xee\x18\x3c\x70\xe1\xd9\xb0\x27\x24\x6e\x35\x86\x86\xe1\xf8\xde\x2f\x72\x2a\x20\x73\x92\x77\x73\x3d\x70\xa9\x55\x26\x16\x05\xc4\x68\x60\x41\x3d\xb3\x0d\x5f\xe0\xd0\x65\x37\x7a\xa2\x54\xcc\x45\x9f\xed\xbf\x10\x70\xed\xd7\x88\x18\x7c\xd8\x91\xc3\xbb\x19\x3a\xcf\x4d\x7c\x0f\xe5\x8e\x9f\xd1\x5a\x37\xa9\xb7\xd0\xcb\x58\x30\xa6\x63\x03\x11\xd8\x17\x0b\xdd\xb6\x91\xd6\x52\x2b\x87\x08\xf2\x90\x17\x68\x00\x15\x63\xac\x3a\x12\xa4\x67\xb1\xd7\x45\x25\x97\x63\x63\x0d\xea\xb3\xd5\x8b\xea\x17\xe4\x92\x9f\x3a\x2c\x71\xac\xa5\xaf\x2c\x0f\x51\x98\xee\xc2\x03\x73\xec\xbd\x76\x5d\xa1\xf3\xde\x6b\x59\x9b\x40\x94\xb7\xd8\xd7\x8c\x9f\x23\xc1\xfd\xb3\x80\xc7\xbf\xef\xef\xfc\x8f\xfe\x0d\xff\xa5\xff\xc5\xbf\xfd\x37\xfc\xd3\xbf\xe6\x77\xfe\x47\x7f\xc5\xaf\x51\x7f\xf4\xbf\xf3\xcb\xfe\xb5\xdf\xf3\xd7\xfe\x1b\xff\xda\xbf\xf1\x97\xfc\x81\xdf\xff\x7f\xfc\x07\xff\x9d\xff\xe7\x7f\xea\x03\xc0\x43\x93\x14\x62\xb4\xce\x08\x7f\x4e\x02\xa9\x52\xec\xb0\x59\x66\x86\x62\x2a\x22\x4d\xbe\x89\x5c\x03\xfa\x21\x57\xbe\xba\x72\xfc\x85\x61\x1b\xd1\x40\x3a\xcb\x3c\x32\x02\xbf\x12\x2d\x9f\x20\x76\x6f\x1d\x6a\x8c\x95\xdf\x83\x17\x31\x76\x31\xf9\x86\xea\x07\x3c\xa7\xdb\xf1\x45\x4b\x49\x3d\x88\x79\x3a\x6e\x5c\x36\x60\xb5\xa4\x5e\xfd\xa2\x23\xa4\xc9\xc8\x1f\x98\x32\x8b\x6b\x1f\xa9\xba\xf5\xef\x50\x23\xfb\x73\xdb\x17\xbb\x94\xd1\x98\xd1\x6b\x74\x39\x0b\x40\xc8\x53\x67\x3f\x80\xe9\x41\xcb\xca\xed\x35\xe4\xf1\xaf\xc3\x86\x53\x40\x91\xba\x2f\x83\xbb\x7c\xc1\x52\x92\xc9\x2b\x1e\xa5\x41\x44\x73\x87\x3c\x7b\x04\x43\x00\x2e\xab\xd2\x6e\x29\x93\x30\x12\x42\xc4\x3b\x1e\x2f\x2f\x05\xb9\xf6\xfe\x7c\xc1\xcc\xe1\xcc\x41\xf2\x6d\xa2\xd5\xb4\x33\x03\xa6\xb4\xd3\x03\x24\x5e\x6d\xa2\x81\xe3\xea\x1a\xe7\x15\x5c\x73\xf5\x9d\x04\xb6\xbb\xbf\x68\xe6\x68\x11\x9d\xec\x11\x5b\xd2\xe0\x3e\x03\xf6\x53\x9e\xdb\xb9\xa2\x06\xb7\xf4\xee\x16\x9c\xe8\xae\x4a\x5b\x90\x8a\x36\xd5\x11\xc4\x27\x32\xb2\xc0\x69\xfe\x30\x94\x95\x78\xa7\x08\xed\x10\x98\xad\x7f\x90\x84\x2d\x91\xac\x3c\xd2\xb8\x62\xa5\x97\xe8\xe7\x12\x76\x8f\x8c\xe0\x8b\x31\xcb\x9e\xc5\x92\x4c\x4b\xcf\x1b\x11\x0d\x9f\x6d\xf8\x5e\x41\x72\x6a\x47\xdc\x59\xa8\x94\x0f\xc7\x9e\xe4\xde\xb3\xae\x72\x9a\xc0\xbe\x28\x48\xbc\x8e\x2d\x93\x49\x30\x3b\x0f\x15\xc8\xa0\x7d\xdc\xa9\x9d\x97\x04\x79\x74\xae\x88\x42\x86\x8a\x9c\x0e\xd7\x37\x77\xdd\x68\xf7\x45\xbc\x30\xf5\xb1\xf4\x2a\x8b\xa6\x5f\xe5\x9a\x23\xa4\x8a\x1a\x67\xd5\x5c\xa2\xdd\x7b\xf6\x70\x5a\x38\x2a\xde\x27\x4d\xd1\xbd\x8f\xfd\x84\x2b\x95\xd7\x26\x9b\xe2\x04\x17\x12\x57\x53\x51\xa2\xeb\xee\xc7\x03\x89\xc7\xed\x3d\xfe\xbe\x60\xc9\x0b\xb7\xcc\xa5\x39\x01\x06\xf9\xc2\xae\x98\x26\x37\xb7\xc8\x4a\x33\x2d\xae\x2b\x7d\x56\xda\x42\x1f\x96\x35\xf7\xa0\xdb\x98\x3f\x06\x99\x5a\xd5\x2e\x1e\x17\x5d\xc9\x38\x9f\x2c\xe2\x59\xc7\x68\x0f\x64\x1f\x95\xc7\xe0\xe3\x5c\x05\x77\xe0\x64\x3f\x22\xbe\x0b\x8c\x1b\x07\xc0\x3b\x56\x3b\x1f\x11\x32\xd2\x25\x9e\x2f\xa0\x49\xa8\x4c\x6d\xad\xcc\xf9\x76\xa1\xc6\x11\xdc\xcf\x0a\x29\xd6\x7c\x60\x32\xa8\xef\x6b\x0e\x61\xdc\xe9\x77\xba\xd9\x26\xf7\xe5\x13\x66\xae\xea\xb1\x97\x2d\x0e\x60\x94\x4d\x82\x6c\xbe\x0f\xc2\x2a\x25\x15\x09\xb5\xee\xcd\x8e\xbd\xa3\x22\x2b\x59\x36\xbe\xd0\x2d\x94\xf9\xa2\xa5\x7c\x61\x3d\xf6\x85\x1d\xd6\xfd\x58\x66\x1d\x9b\x57\x98\x27\xbc\xdd\xf0\x57\x93\x16\xce\x0f\xe1\x95\x91\xbd\x15\x5b\x2f\x6b\x67\x7e\xe1\xea\x44\xe2\x70\x3c\xd3\x2a\x44\xaf\xde\x6d\xb8\x4e\xc6\xaa\x09\x30\xac\xe1\x36\x5b\xfa\xb0\x9d\x54\x47\xcf\xf9\xe1\xfb\x34\x83\x75\x21\x5f\x90\x08\x23\x06\xb1\x64\xaf\xc8\x42\x57\xd4\x85\x76\x5c\x16\xe3\x8e\x72\x86\x3b\x73\x76\x00\x56\x09\xd3\xec\x01\xa5\x00\x72\xad\xbd\x7c\x11\xc1\xb1\x76\xac\x34\x28\x01\x3b\x0c\x72\x92\x79\x4a\x13\xbd\x04\x0f\xfb\xee\x92\x60\x72\xdc\xdb\x64\xc7\x10\x7a\x90\xd1\xf9\x7d\xc9\x17\x40\x58\x97\xc2\x15\xe3\xea\x0d\xaa\x33\x72\x40\x75\x62\xf6\x15\xc2\xdb\xf8\xa0\xaf\xa1\x90\xbd\x8f\x47\x2c\x6a\x0c\xbb\x82\x85\xf9\x2f\xc8\xa5\x1f\xc2\xd0\x4e\x9a\x00\x1b\xdf\x0d\x15\x30\x40\xf0\xd2\xec\xeb\x49\x58\x62\x60\x5a\xc8\x0f\x7f\x07\xca\x28\x93\x2a\x95\x71\xe6\xf9\x64\x50\xbe\x07\xe9\x07\x6e\x25\x21\x91\x4f\xe9\xb0\xf7\xa1\x31\xac\x1c\x28\x22\x76\xaa\x0a\x15\x4d\x2a\x6c\x9e\xbe\x0f\x6f\xe8\x41\xcf\x17\x8b\x78\xa4\xb5\x90\x62\xa9\x20\x30\xbd\xde\x84\xe6\x4e\x8a\xee\x2c\x34\x4f\x24\xa7\xdc\xc0\x0b\x07\x7d\x78\xd0\x25\x4e\x51\x19\xd1\x97\x7c\x21\x66\x1b\x76\xbc\x2c\xb4\xa3\xd9\x08\x42\x67\xed\xdf\x85\x1a\x39\x61\xed\x0c\x05\xd8\x0c\xbf\x16\x61\xd8\xaa\x64\x4b\xb8\xf7\x81\xa4\x7c\xb1\x02\x87\xad\x27\x31\x34\x3f\x67\xb9\x4f\x92\x24\xe4\x46\x9e\x30\x1d\xcb\xda\x3d\x09\x48\xa1\x04\x0b\x07\x0b\x53\xde\x10\xf2\x5a\x1a\x7c\x31\x1d\x37\xf2\xd9\x43\xae\x35\xa4\x9b\xc2\x45\x29\x4e\x80\xc7\xdb\x61\x22\xae\x00\xbc\x17\x3e\x28\x9c\xd2\x91\x7f\x6b\xe9\x9c\x92\xfa\x85\xa1\x04\x25\xf1\x0d\x52\x41\x9b\x2c\xb0\xbe\x3d\x98\xa5\x46\xa4\x6b\x57\x99\x17\x14\x38\x2f\x46\xdc\x5d\x36\xa9\xa1\x91\x7a\x7b\xa1\xe5\x1f\xac\x03\xd2\x37\x1f\x08\x67\xd4\x7a\x11\xed\x43\x54\x14\x27\x5f\x49\x8d\x49\x2e\x5c\xa1\x8a\x8e\xbc\xb1\xbf\x43\x8b\x73\x8c\x83\x9c\xf9\x4f\xbc\x62\x3a\x60\xbd\xaa\xdc\x37\x90\x95\xb2\x91\xef\x72\xa3\x86\x47\x37\x6b\x11\x97\x0b\x3b\x0e\x93\x1e\x0a\x6b\xe0\xa8\x11\xdc\x3d\xf6\x8b\x2f\x12\xe8\x16\x25\x28\xab\x2f\x2f\x3c\xf0\xce\x1e\x0c\xbc\xb6\x09\x2c\x1f\x1f\x04\xb4\x31\x0a\x36\x34\x08\x67\xd4\xae\xe7\xe4\x02\xbe\x00\xc2\xa8\x6d\x7e\x6f\xcb\x5f\x83\xbc\x8d\x2e\xc3\x26\x3d\x65\xb5\x27\xf4\xa2\x06\xb0\x3f\x7c\xc9\xd8\x73\x1f\x04\xad\x2a\x67\xa9\x3f\x07\xa6\xfd\x59\xc0\xe3\xf7\xfc\x83\xbf\xf4\x0f\xfc\xa7\x7f\xd5\x2f\xfc\xdf\xfd\xc4\x6f\xf8\xad\x7f\xec\x2f\xfc\xe6\xdf\xf7\x8f\xb6\xff\xdb\xbf\xe5\x9f\xfa\x67\xff\xb1\x3f\xff\xdf\xfc\x87\xfe\xeb\xbf\xf5\x57\xff\xf5\xdf\xf4\x8f\xfd\xe9\x0f\x00\x0f\x48\xd1\x90\x10\x3b\xab\xba\x6a\x69\xd5\x64\x5f\xa5\xe7\x01\xbe\x62\xa8\xf3\x79\x57\xc6\xcf\x52\x91\x51\xaa\x1a\xf1\x31\x66\xfa\x45\x80\x59\x78\x8c\x9d\x86\x7b\xda\x8e\xf1\xdd\x72\xa8\x88\x12\x87\xb0\xf9\x69\xda\x39\xb3\xba\x27\x8e\xf0\x14\x71\x55\x72\xa3\x28\x08\xbe\x40\xce\x96\xcd\xaf\xce\x1a\x69\x43\x87\x2d\xed\x10\x5d\x1b\xb3\xd7\x2f\x60\x4c\xd4\x11\x6c\x0a\xfb\x22\x98\x9c\x5d\x4b\x9f\x5e\x67\xf0\xc9\xe0\xeb\xa4\xd9\xaa\x8c\xf5\x41\x43\xbe\x73\x11\x7b\x71\xbc\xf1\xb9\x2c\xf1\x73\x9a\x51\x0d\xef\x2d\x90\x1e\x38\x03\xdf\xda\xa3\xcc\x07\x7b\x62\x64\x12\x40\x0f\x25\x4f\x45\x6c\xb8\x43\x29\x8e\x84\xad\xaa\xfd\x32\x22\x9f\xe1\xe4\xeb\xf3\xe3\x03\x96\x6b\x74\x4a\x31\x7a\x69\xfd\x82\xbd\x36\xa5\x84\x88\x3b\x6e\x0c\x2d\x43\x86\xb4\x47\x6f\xf6\xc8\x68\xf7\x82\xbc\x25\xad\x0d\xc1\xdc\x21\x06\x1c\xb5\x9b\xd2\x2d\xfc\x17\x61\xce\xdc\xe6\x30\x07\x6f\xf7\x19\x04\xc9\x6b\x91\x92\xc0\x06\x30\xa9\x1c\x61\x78\x17\xf5\xac\x53\x25\x70\x04\x4f\x7a\x57\x7c\xe8\x27\xbe\xd7\xde\xb8\x77\xac\x51\x0e\x58\xbb\x64\xe6\x25\x6a\xaf\x2f\xf3\x3c\x91\xbf\xe1\x39\x53\x77\x08\x15\x0b\x3d\xeb\xc6\x21\x7d\xe4\x4b\xbe\x58\xb8\x0a\xe4\x7d\x7c\x03\xe1\x79\xe7\x12\x6a\x94\x32\xf1\xa3\x20\x7c\x16\x55\xd5\x70\x15\xcf\x5b\xb9\xa4\x3b\xac\xd0\x9f\x66\xec\x48\x9f\x68\x76\x97\x46\x36\x25\x04\x49\x4e\x1d\x82\x44\x5c\x32\xf3\xcb\xe0\x6b\x0a\x94\x59\x82\x4d\x0e\xe6\x40\x66\x55\x33\x29\xbd\x03\x7c\x3f\xd9\x2b\x15\x9d\xc5\x13\x31\x54\x61\x4d\x8c\x0e\xd1\x65\x70\x78\x07\x87\x56\x40\xf2\x43\xaf\xc9\xf8\x65\x87\x34\x1d\xbc\x20\x0a\xa6\x55\xbf\x98\x6a\x48\x6b\x0e\xcc\xcf\x20\x8b\xe4\x35\x0f\x7e\x9e\x45\x09\x1c\x65\xb6\xe2\x04\x94\x20\x0c\x2b\x51\x40\xb3\x50\xdd\x7b\x24\xc8\x3f\x5f\x30\x73\xce\x54\xb1\xe9\x4c\xf3\x91\xb4\xc9\x5e\x83\xd7\x16\xa0\x50\x7b\x8d\x66\xb3\x7b\x02\x83\x6b\xc9\x4a\x40\x76\xfc\x29\xd0\x73\xf2\x05\x0f\x04\x11\xbd\x13\xca\x0a\x36\x47\x16\xf3\xc1\x11\xf7\x31\xb7\x9a\xd3\x04\x61\x2f\x88\xa6\x07\x4c\xa5\x0a\xbb\xf6\xc7\xa2\xd7\x3d\x5f\x14\x24\x6f\xd8\x88\x21\x29\x32\x43\x27\xb1\x65\xd2\x49\xc2\x30\x11\xa3\x62\xd3\x51\x4b\x53\xec\x05\x3e\xd2\xc3\x7e\x36\x3e\xed\x8e\x4f\x94\x87\xf6\x96\x55\xcc\x9f\xd9\xf3\x7d\xc6\xb4\xdd\x8e\xda\xb7\x62\xac\xbe\x87\x42\x1b\xb4\x46\xfd\x29\x76\xa8\xa6\x21\x5f\xce\x23\x7f\xbf\x00\x05\xc5\x3c\x8b\x60\xcc\xcb\x81\xb9\x15\x8e\x98\x49\x12\x94\x5a\xdf\xa8\x45\x10\x20\x70\x73\x1f\xc1\xde\x10\x08\x3d\x05\x16\xb9\xbf\xf0\x10\xa2\x98\xf6\x45\x42\x22\xae\xbe\x6d\x81\x55\x59\x25\xf3\xb1\xcb\x20\x72\xa5\x9f\xcd\xb7\x29\x05\xe0\xda\x59\xb6\x15\xb9\xfc\x15\xf6\x0b\x50\xf0\x0c\x3a\x39\x74\xe9\xed\x54\x73\x08\x1d\x5b\x56\x42\x13\x65\xef\xe9\x41\xcb\x5c\x0f\x80\x4b\x0d\xb2\xc0\x5c\x82\xe7\xf5\x92\x7d\xc1\xcc\xc5\x28\x78\x8c\x36\xa3\xc9\x44\xae\xf6\x29\x77\x77\x66\x0c\xa3\x25\x62\x3f\x89\x54\x33\x1b\x22\x83\x7c\x61\x9d\xe1\xe0\x46\xfb\x17\xec\xb5\xea\x02\x5f\x93\x1a\x7a\x39\x6a\xf2\x3d\xf7\xed\x7a\x5f\xea\x90\x50\x4b\x96\xf5\x72\xc7\xdd\x54\x16\xe4\x0d\xf8\xb0\x99\xab\x4f\xb2\x19\x56\x1d\x5e\x55\x06\x75\x5d\x20\xe9\x9e\x51\x71\x96\x15\x98\xb2\x57\x86\xa7\xa6\x45\xe6\xcb\x84\x05\x31\x38\x6a\x96\x51\xbd\x7d\xf1\x5f\x18\x22\x1f\x09\xb8\x29\x69\xbf\x5a\x4d\x89\xeb\x3d\xe9\x99\x47\xb7\xe4\xac\xa4\x3d\x3c\x4d\x4a\x92\x78\xda\xa7\xf9\x0e\x13\xeb\x5f\xcc\x2b\xc2\x0e\xaa\xc5\x63\x9a\x7d\x9c\x87\x9e\x9a\x71\x80\x34\x20\xc7\x8a\x3a\x71\xa2\x1d\x0d\x10\x83\x8f\x4d\x80\xc8\xb2\x89\x12\x9f\x10\x2a\x6a\xb3\x05\x70\x73\x03\xe8\x48\x91\x51\x14\x6b\x80\x9f\x85\xf1\x7e\xa2\xf3\xe9\x6c\x45\xbb\x94\xfc\x2c\x85\x6a\x4b\xd4\x62\xf6\xc5\x4c\x6f\xa1\xab\x79\xe2\x52\x3a\x73\xe1\x27\x70\x36\xa5\xbb\xab\x70\x9b\x77\x5c\x1b\xf0\xfb\x43\x6b\x47\xb1\xf1\xca\xde\xa1\x95\x62\xee\x8b\x7e\x44\x63\xdd\x16\x0e\xd6\xf0\x52\xc2\xc4\x1d\x07\xf2\xea\x1e\xf8\xcb\x03\x48\xc7\xc8\x25\x56\x15\x2b\x8e\x73\x0e\x5d\x0d\xa3\xd0\xbe\x98\xe9\x45\x3d\x01\xe5\x9b\xda\x90\xc5\xfa\x1c\x1c\x92\xa4\x50\x9e\x62\x87\xc4\xa7\x2b\x06\x15\xc6\xbb\x4e\x74\xab\xea\x72\x48\x6b\xdb\x27\x75\x27\x2f\x40\x18\x24\x87\xe8\xd8\x1e\xa0\x93\x62\xfa\xd4\x89\xa2\x3b\x2f\x7a\xd5\x22\x2a\x36\xa8\x0e\x83\x85\x21\x6f\xe9\xe0\xed\x03\xfd\x23\x2a\xf6\x63\x1d\x51\x18\x6e\x50\x73\x1a\xe6\xba\x9e\x86\xe7\xe4\x1a\x96\xdf\x45\xad\xa1\x47\xa7\xf6\x94\x67\x45\x75\xae\x53\xe6\x13\x01\x57\x4d\xe6\x9a\x32\xc8\x7d\x07\x78\xb3\xc4\xb5\x5b\xd8\x00\x5f\xbb\x83\xb8\x0a\x07\x50\x47\x28\x83\x48\x8f\x7b\xc0\x48\x77\xfb\x6f\xbc\xa5\x88\xbb\x67\xc4\xf0\x8c\x57\xa0\xba\x2b\x21\xb0\x54\xec\xb6\x8d\x33\x07\x2e\x3d\xab\x84\xa1\x2b\x99\xe9\xcf\xc4\x4a\xda\xde\xf8\xcf\x03\x3c\xfe\xad\xf5\x17\xfd\x82\x5f\xfc\xa7\xc6\x3f\xf7\xa7\xd8\xdf\xfc\xed\xff\xa6\x5f\x2c\xcd\xaf\xfb\xb7\xfd\xc3\xbf\xe5\x0f\xa5\xff\x61\xfb\x1b\xff\xbd\x7f\xf9\x3f\xf7\x1f\xff\x35\xff\xd2\xff\xfe\x03\xc0\x83\x97\xc7\x9a\xea\x75\x88\x64\x41\xa9\x61\x4a\x59\xf4\x51\x5c\x56\xe1\x28\x4d\x1f\x46\xf0\xea\xda\x4a\xf5\x2e\x7a\xf6\xcc\xbd\x7d\x81\xdf\xe1\xe7\x64\x07\x60\x28\x0c\x44\x76\x25\x89\x4a\xc1\xe5\x5f\x82\xc3\xeb\x4a\xcc\x55\x0e\x74\xe0\xa6\x29\xb5\x21\xba\xcc\x2e\x7e\xc2\x03\x61\x4f\x2a\x21\x1e\x84\x53\x23\x3a\x98\x54\x31\x28\x2e\xa3\xcc\x9e\x8b\x88\xfa\x2d\x7d\xb3\x63\xcf\x5d\x05\xcf\xb8\xb8\xa0\x9f\x98\xe3\xb6\xb7\xda\x08\x1c\xad\xf5\x87\xec\xa3\x50\x65\x26\x33\xb1\x4c\x57\x48\x8d\x16\xe5\xd2\xcf\xcd\xce\xe7\xf1\x06\x20\x9a\x8d\xe5\xf9\x42\x19\x60\x2b\x92\xc0\x8e\x5c\xac\xc5\x9a\x1a\x35\xaf\xe1\x32\x4e\x6f\xa2\x20\x3d\x80\x3c\x8d\x3f\x82\x84\x06\x03\x86\x3a\xf5\x0e\xc5\x17\x6a\xd9\x44\x68\xf0\x68\x81\x77\xa5\x65\xf2\x34\x19\x87\xcb\x89\xca\xd7\x03\x72\x7a\x15\xca\x1d\x71\x15\xb0\x93\xd4\xe1\x50\xa0\x29\xb4\x7c\xd1\x46\xcd\xde\x10\xa5\x3b\x03\x3b\xdd\x69\xf2\x8d\x9e\xe9\x42\x05\xbc\x53\xb5\x91\x76\x4a\xef\x0d\x86\xb7\x87\x52\x17\xf1\x3d\xe3\xf9\x44\x51\x7e\x6f\x8f\x14\x61\xd6\x48\x9b\x21\x94\x79\x96\xa5\x1d\x2b\xfc\xd6\xe0\x2b\x78\x27\x2a\xfc\x05\xd3\x9f\xf3\x5c\x4c\x9e\xa1\xf1\x17\x02\x6b\x04\xa9\x5d\x1f\x3f\x65\xb7\xd2\x5c\x15\x9e\xce\x08\xca\x7e\x88\xb1\x1b\x75\x34\x73\x4c\x27\xa8\xbb\x73\x19\xe0\x91\xd6\x04\x5b\xbf\x11\x39\xa6\xbc\xe1\x2a\x9b\x64\xe8\xbe\x35\xf2\x0b\xf8\x48\x19\x70\x60\xb9\xd7\xd1\xa4\xc4\xbb\x43\x2b\x1d\x46\x86\xf7\x1c\x9f\xf2\xc5\x22\x5e\x3f\x7c\xe8\x87\x47\xc7\x01\x49\xe6\x24\xea\x86\xb9\x16\x4c\x13\x83\x89\x2f\xa3\x6d\x20\xcc\xec\x51\x49\xed\x1a\xaf\x58\xe3\x7c\x01\x16\xfb\xbe\xcf\xc1\xa2\x56\x62\x08\x3a\xd6\x4c\x28\x07\xb6\x4e\xb1\x5a\x1d\x71\x94\xa8\x2c\xb7\x07\x31\x1e\x5c\x66\xdc\x29\xef\x4f\xac\x58\xa1\x3f\xfe\xde\xc1\x5e\x9e\x2b\x39\x6e\x38\x18\x74\x50\xaf\xc3\xf6\xe9\x4c\x24\x6a\x24\x58\xc1\x11\xae\xec\xaa\x3e\x96\xe7\x9a\x2f\x04\x19\x27\x10\x57\x84\x42\x40\xc8\x79\x5b\xd7\xa8\xa1\xc5\x48\x64\x5c\xf5\x3c\xf9\x64\x7c\xae\x24\x12\x6a\x9b\x7c\xb0\x4e\x46\xbf\xee\x0b\xa9\xe5\x55\x30\x60\xc5\x37\x24\x87\x85\xcc\x4d\x27\xdf\xe9\x0e\x7d\xb8\x69\x16\xdd\xca\xc5\xd4\x33\x25\x49\x6f\x25\xb6\x79\x4f\x92\xfb\xe2\x2e\xea\xe4\x4f\x91\x93\xaa\x37\x97\xcd\x66\xd1\xca\x2d\x89\xa6\xf6\x96\x8b\x77\x92\xb7\xdc\xa4\xef\x5e\xd9\xc3\x4e\xe8\x10\xab\x7e\x32\x8a\xec\xa9\xd0\x29\x08\x52\xec\x73\xa9\x26\x79\x77\x80\x34\x0d\x7e\xb1\xcc\x58\x21\xc0\x7b\xfa\x78\xd4\x88\xbd\xab\x67\xee\xaa\xad\x5f\xb4\x94\x0f\x82\x7e\xcd\x6d\xe6\x39\xf5\x3e\x76\x9f\x00\x67\x3e\x6a\xbc\xf8\x51\xf7\xe5\xef\xbd\xad\x01\xe0\x1e\x05\x8f\x0f\x8a\xd6\x97\x7d\x01\x90\x12\xc3\x31\x6f\xdc\x4f\x9d\x48\x38\x15\xbc\x29\xee\x04\xca\xc6\xe5\x74\x96\xe1\x04\xb9\xa7\x57\x60\xa2\x88\xda\x49\x6e\xc4\xbf\x70\x81\x23\xa4\x7b\xbd\xd0\x85\xf3\xf8\xb1\x1d\x6a\x25\x51\x39\xb8\x4a\xee\x2c\x22\xe7\x84\x13\x1e\xac\x12\x7d\xba\x0c\x86\xc1\x4a\xdf\x4f\xa6\xe3\xe6\xa8\x83\x5b\xdf\x16\x79\xd3\x6c\x51\x36\x99\xbb\xf5\x13\x67\x16\x1c\x59\xfa\x11\xc9\x95\x35\x5f\x02\x54\x87\xc3\xe7\xeb\x3e\x59\xe3\x80\x4e\x34\xe0\x4f\x65\x6c\x17\xe0\xb3\x41\x0f\x54\xcc\xee\x24\x17\x7a\x86\x87\x75\x42\xf9\x54\xa2\x09\x83\x53\xc0\x71\x73\xfd\xc4\xae\xd8\xaa\x12\xdc\xe0\xa5\x42\x3e\x14\x4e\x83\x10\x84\x97\xe8\x3a\x1f\x13\x8b\x87\x81\x20\x53\xf7\x6a\x45\x5c\x45\xec\xbb\xae\x7f\xbe\x00\xce\xbd\x26\x1d\x43\x5c\x46\xbe\x51\x53\x06\xf8\x8b\x2e\xaa\xf2\xe9\x0f\x59\x24\xd3\xb6\x43\x79\xa0\xbf\xd8\xe9\xe4\x9e\xa9\xe0\xbd\x5f\xb4\xd7\x93\x1b\x26\x2d\x2c\x90\xae\x0d\x16\x5f\x6e\xb3\xfa\xa4\xd1\x53\xbd\x51\xb9\x06\x8a\x7e\xba\xe7\xa9\xd3\x4b\x19\x4f\x42\x3b\xf0\x81\x03\x05\x9d\x53\xc7\x76\xde\xee\x8b\x4e\x43\x6a\x07\x54\xd3\xce\x27\x31\xb7\x20\x38\x5c\xe6\xc1\x7e\x26\x9e\x07\xc6\x90\x09\x1c\x27\x7f\x62\xfc\xa9\xbc\xe4\x1a\xf2\x35\x13\xb3\xeb\x60\x26\x1a\x29\xd5\x2d\x1b\xdf\x98\x2d\x1e\xdb\xfa\xa5\x9e\xa9\xac\x9e\xc8\xc7\xc0\x38\xa9\x5f\x00\x61\xf7\x59\xa9\x05\x66\xa6\xea\x2f\xbf\x39\x40\x76\x80\x47\x4b\x6d\xf5\x58\x44\x26\x56\xc1\x64\x6a\x35\xa3\x3e\x66\xe2\x14\x29\xe0\x8b\x0e\x71\x2a\x43\xdf\xd7\xf6\x21\xf2\x6e\xaa\xc7\x6a\x71\x10\x93\x7b\x79\xfb\x39\x40\x55\x50\x4e\x85\xf4\x05\xd7\x27\x30\xb6\x2e\x97\x7c\x41\xb4\xe5\x80\x02\xc3\x65\xf7\xbc\x1f\x9d\xb5\xa2\x4f\xa5\xb4\x0e\xcd\x70\x3a\x48\x41\x1d\x05\x40\xc1\x6b\x21\xd5\x5a\x53\x5a\xe2\xdb\x17\x11\xbc\x4e\xbf\xdb\x0f\x9d\x7a\x46\x6f\x5d\xd2\x21\x58\xa5\x17\xaf\x8f\x59\xc4\xa4\x06\xf7\xdc\x49\x09\x92\x01\x11\xe5\x62\x6f\xe1\x5f\xa8\xaa\xd0\x18\x89\x42\x64\x95\x2b\xa1\x4b\xd8\xed\xa6\xec\x28\x1b\x26\xca\x47\x20\x65\xac\xdc\xa8\x1d\x29\xda\x8c\x5f\x52\x68\x09\xf5\xe7\xe4\xd4\x9f\x05\x3c\x7e\xc9\xdf\xfb\x5f\xff\xcf\xfe\x1f\xbf\xe3\xbf\xf8\x4f\xfc\x6f\xfe\xc3\x7f\xe3\x17\xfd\x5f\xff\xcc\x3f\xff\x57\xfe\x89\x5f\xff\x6b\xd9\x9f\xe0\x7f\xf0\x0f\xff\x07\xff\xc7\xff\xba\xdf\xf8\xd7\xfe\x85\xdf\xfe\x87\xff\xff\x03\x3c\xc4\xaf\xfc\x05\x7f\xe5\xe7\x6f\xb7\x92\x3d\xd8\x69\x4f\x2f\x29\xf5\xe9\x71\x13\xa0\x22\xb3\x5c\x88\x6f\xe5\xc8\xa3\x8e\xc4\x61\x8a\x0b\xb6\x15\xb5\x32\xa5\xd2\x7f\x06\xa7\xf9\x5d\xbf\xec\xff\xd7\xcb\xfb\xfb\x9e\x22\x6a\x81\x4d\xb6\x63\xd8\x47\x86\x82\xb6\x16\x3c\x05\x0a\x24\x67\xf8\x46\x73\xd6\xbb\xb0\x4c\x8d\x99\x4b\x16\x6e\xfa\x26\xf9\x23\xdd\xd9\x1f\xf3\x29\x2c\x00\xc7\x3e\x55\x65\x4b\x0d\xeb\x73\xfb\x28\xfa\xbc\xef\xaa\xa4\xc4\x27\x00\x46\xf5\xb8\x86\x34\x1b\xf5\xc2\xc5\x35\x80\x7f\xb4\x4c\xf2\x63\x3e\x85\x74\x39\x20\x34\x08\xf6\x2a\x52\x41\x5d\x30\x59\x83\x18\x18\x24\xc5\xb8\x68\x9d\x7b\x2b\x71\xd8\xbc\x9a\x20\x7e\xd3\xa0\xc5\xbd\x3f\xfe\x53\x10\xec\x78\x65\xc6\x97\x71\xcb\x82\x4f\xea\xb3\x03\xb9\x5e\xae\x58\xef\x0b\x28\xbc\x33\x99\x1a\xe0\x47\x01\x5e\x75\x16\x83\xbd\xd5\x7f\x70\x8a\x8c\x44\x71\xe9\x31\x36\x15\x87\x47\x2c\x7e\xe2\x59\x44\xa6\x98\x0e\x53\xfc\xa8\x19\xc7\x68\x65\x07\x57\x1c\xc1\x8a\x05\xdb\xee\x0f\xbe\xc8\xf3\x06\x09\x6e\x92\x33\xea\xed\xe4\x63\xe7\xb4\x2d\x2a\xab\x76\xd8\xe0\x70\x75\x1c\x13\x40\x61\xe3\xe5\x73\x5b\x79\xcc\xab\x8d\xf9\xe0\x2e\x1c\xae\x95\xa4\x83\xf5\x0c\x00\x50\x8d\xd0\x85\xca\xa9\xd3\x9a\x76\x2e\x13\x12\xa8\xc5\xf6\x28\xfe\x2e\x1e\xb6\x99\xab\xec\x1f\x39\x19\xfd\x98\x4f\xb1\x14\x7d\x3c\x85\x36\x21\xb4\xf7\x36\x38\x06\x83\x18\xd4\x8e\x14\x28\xc5\x62\xb9\x98\x47\xbd\x1a\x6a\xba\xa7\xf0\x80\xfa\x7c\xd4\x07\xa7\xe0\xa8\x3e\x35\xf2\x8d\x6d\x7a\x91\xa1\x07\xca\xe8\x80\x5f\x9b\xc4\x18\x9e\x10\xee\x10\xa6\xb5\x85\x8d\x6f\x5d\x1e\xfe\x16\x62\xc4\x07\xff\x05\x52\xe7\xad\x36\x4e\x75\x64\xee\x42\xe6\x3d\x64\x49\x74\x65\x79\x45\xb4\x41\xc4\xe8\xab\x8c\x25\x0b\x92\x8f\x11\x40\x84\xd8\xd3\x07\x77\xb1\xab\x6f\x39\x00\xc1\x20\xef\x54\x4f\x86\xee\xf2\x62\x19\xd9\x53\x28\xe4\x31\x75\xb6\x0d\xba\xb6\x8e\xf3\xb3\x91\x86\x74\xd6\x0f\x4e\x41\x27\x06\x8f\xea\x41\x44\x22\x55\x49\xa1\x05\x8f\x42\xa2\x9c\x52\x72\x15\x0d\x41\xfa\xee\x2b\x4b\xc8\x97\x67\x7a\x04\x0a\x45\x75\x7d\x70\x17\xcf\x95\xb6\xbf\xf3\x59\x9d\x3b\xf6\x43\xbf\xd6\x4e\xda\x24\x28\xb1\x37\x35\xd2\xcb\x5b\xbd\x7b\x7b\x2f\x79\x6d\xe5\x9e\x51\x50\x93\x1f\xdc\x45\xf6\x5c\xe7\xd2\xc6\x8b\xe2\x80\xe6\x90\x36\x7c\x5b\x8e\xc4\x1c\xc7\x59\xdd\x1a\x41\x25\xf1\xb6\xaa\xb5\x4d\x61\x4f\x9d\xf1\x47\xa3\xc8\x3f\xe6\xbb\x30\x77\x87\xe6\x37\xb7\x80\xfb\xeb\x22\x71\xb5\x91\x70\x46\x9d\xe8\xf1\xd3\x8c\xc4\xa0\x0a\x56\xbd\xc2\xbb\xf6\x86\x31\xae\x61\x5f\x44\x70\xd9\x58\xe6\xa6\x17\x29\x56\x8d\x97\xd5\x83\x1f\xef\xde\xc9\x47\x2c\x84\x5c\x98\xd0\xa3\xd1\x15\x6e\x63\xcd\x48\x7e\x11\xb2\x07\x7c\xf0\x45\xc0\xa1\x43\xfa\x2d\x5d\x13\xf8\xec\xd5\xa9\x9d\x42\x05\x10\x55\x1b\x4d\x6a\x86\x6e\x5e\xae\x67\xa5\xa0\x74\x70\xdb\x6b\x0a\xfd\xe0\x8b\xd0\x07\xef\x49\xfa\x8e\xcd\x29\x9d\x86\xb6\x4d\x2b\x78\x31\x35\xc8\x5e\xb1\x8b\x0e\xb2\x61\xe2\x99\x69\xdd\x7b\x6b\x71\x85\x89\x9e\x2f\x22\x78\x6b\xc3\xa6\xb2\x01\xb4\x85\x4a\x7c\x58\x2a\x82\x77\x05\x31\x0b\xae\xdf\xe5\xef\xd4\xfd\x58\x8f\x19\xc4\x29\x8b\x8b\xb5\xfd\xa0\xbe\xa0\x39\xb2\xeb\xaf\x65\xef\x0b\xab\xb6\x28\xd7\x97\xe7\x58\x56\xf2\xfe\x19\xd1\x00\xae\xde\x7c\xcd\x24\xc7\x91\xcb\x25\xaa\xb3\xdf\x2f\xde\x48\x78\x33\x73\x4a\x8c\xb3\x16\x42\x99\x1d\x18\xa1\x44\x46\xd9\xf2\x6c\x71\x76\x1a\x3c\x95\x2b\x53\x67\x58\xc1\x1e\xa2\x3f\xed\x47\x6d\xd4\x8f\xf9\x2e\x8a\xbf\x8f\xf3\x83\x50\xd5\x36\xf0\x18\x8a\xfb\xca\x27\xc3\xf0\x74\x1e\xdb\x7e\xeb\x55\xd3\x3a\x26\x79\xb8\xfd\x44\xab\x43\xa9\xe5\x83\xbb\x50\x26\xc5\x58\xc9\x55\x4a\xf1\x95\xd7\xce\x97\x25\x56\x70\x29\x83\xbc\xec\x05\xa5\xa2\xaa\x5a\x67\x14\xa8\x90\x08\x1d\x55\xfd\x68\x29\xf1\xc7\x7c\x8a\x46\x93\xee\x79\xbe\x1e\x8a\x14\xb0\x10\xfc\x14\x32\xda\x4a\x72\xf2\x29\x67\x41\xf2\x44\x6c\x29\x02\xcf\x1b\xa5\xbd\x56\x68\xf7\xc5\x4b\xcd\xc8\x21\xbf\x03\x95\x15\xc2\xc2\x7b\xe2\x0c\xcc\x46\x8b\x78\xfd\x95\x21\x03\x13\x78\x62\x5d\x98\xa2\x0e\x15\xa5\xd8\x9c\x5c\xf8\xe0\x2e\x3a\x7c\x35\x5d\x91\xb3\x55\x15\x79\xa5\xf4\xa3\xbe\x4e\x3c\x21\xe8\xeb\x34\x46\xb8\x98\x8d\xc4\xb4\xbb\x82\x52\x2f\x8d\x59\x3f\x1f\x64\x33\x72\xcb\xc5\x37\x49\x33\x2a\xc9\xa4\x7b\xb9\x4d\xe3\xa7\x9a\xfc\xf2\xb7\xc6\xdc\x7e\xf8\x47\x3d\x22\x27\xbb\x44\x2c\xa3\x73\x8b\xda\xbf\xf8\x22\xa1\x6c\xb3\x32\x20\x4f\x75\xf5\xb1\x1d\x50\x66\x14\x94\xa1\x2e\x91\x57\x99\xbe\xa7\xc6\x5c\xa1\x47\xb7\x65\x74\xe5\x9d\xfc\x68\x3a\xee\xc7\x9d\x53\x27\xdf\x0f\x6b\x04\x20\xbe\xc1\xb8\xe2\xc2\xa7\x92\xbb\xe8\x9e\x45\xec\x3c\xe2\xee\xc2\xd7\x67\x49\xd8\x0a\x06\xd4\x18\xe7\xbe\xe8\x10\x15\x57\x66\xe0\x19\x0f\xe0\xf8\x48\xd7\x8e\xc8\xd8\x9f\x23\xfc\x9b\x23\x98\xdd\xa8\x65\x07\xa1\x20\x69\xbb\x98\x5b\x3b\xbe\x3f\xf2\x53\xfa\x31\x9f\xc2\xe4\x5b\x22\xd3\x24\x97\x50\xa1\x43\x45\x9b\x25\x7d\x47\x8f\x45\x33\xc8\xa5\x9d\xbf\x3e\xd4\xa8\x17\x7b\x69\xca\x22\x8e\xfc\xe0\xff\xef\x29\x7e\x16\xf0\xf8\x73\x3f\x81\x7f\xc7\xff\xeb\xf7\xfd\x5f\xfe\xe0\xbf\xff\x8f\xfc\xde\x3f\xfb\x9f\x95\x7f\xf2\x6f\xaa\xdf\xf5\xd3\xe8\x97\xfc\xb9\x5f\x66\xfe\xcd\xbf\xf7\x57\xfd\x82\xfa\xc7\xff\xbd\xec\x03\xc0\x03\xc5\x2d\x45\x2f\x36\xa2\x3d\x20\x2d\xcb\xc9\xbd\xdc\x91\x41\xf5\x66\x35\xbc\x03\x23\xc3\x18\xb9\xc8\x1d\x3e\x7a\x4f\x76\xf9\xfa\xc5\x8f\xb4\xd2\xb4\xb0\x2a\x0f\x0e\x25\x7e\x26\x46\x70\x6d\x05\x4f\x55\x15\x49\xad\xab\x34\xb7\x0a\x52\xd7\x66\xeb\x24\xb6\x9c\xff\x8f\x3d\xd8\x8f\xf9\x14\x55\xa9\x50\x98\x10\x5b\x8d\x40\xbb\x94\x37\x4c\xd5\xc8\x33\x59\xf1\x04\xbd\xd5\xd5\x7e\xda\x31\xb5\xd9\x18\x24\xee\xce\xcf\x1f\xad\xb4\xfc\xb8\xef\x22\x9f\xe7\x12\xfa\xe8\x84\xef\xb8\xd6\x37\x30\x5c\xbd\x64\x4d\xd7\x1e\x1f\x76\x17\x0c\x57\x89\x74\x5b\x09\x17\xc6\xed\x10\x85\x7e\x70\x0a\x8d\xbd\x6b\xbe\x38\x34\xf2\xeb\x5f\xda\x2e\x04\xed\xc2\x28\xc4\x1e\xc3\x40\xc9\x55\x81\x58\xf1\x0a\x8f\x7f\x54\xe1\x38\xe6\xf3\xc1\xd3\x26\x8f\xf6\x1e\x5f\x64\x05\x82\x0d\x26\xc1\x57\x9c\x17\x62\xf9\x90\x52\x91\x25\xc9\x35\xe2\x76\xc8\xe1\x0a\x3b\xbc\x58\x6c\xd3\xf2\x41\xd1\x4e\xf9\xb4\x85\x6e\x2f\x57\x77\xc3\x9a\xe6\xec\x6b\x36\xd2\xa1\x0b\xf7\x94\x1d\x85\xe0\xf1\x0d\xfe\x87\xec\xec\xd8\x51\x66\x91\x6b\xbe\x28\x11\x3b\x6a\xd0\x45\x55\xae\x71\x9c\x8f\x7c\xbc\x03\x00\xc2\xb6\x67\xf1\x87\x91\xfa\x3c\x39\x72\xde\x76\x7b\xdc\x1c\xbb\x92\x1a\x7f\x84\xf7\xff\x98\xbf\x48\x71\x2b\xc8\x4a\x70\x78\x0f\xf7\xb3\x2c\xec\x5f\x27\x2c\x29\xd7\x29\x80\x5e\x21\x75\x7f\x66\x9f\xdc\x3d\x1e\x1f\xcd\x24\xf0\x9f\xbc\x54\x58\x21\xa1\xac\x79\x45\x2f\xa3\x68\x01\x85\x2c\x66\xbc\x2d\x61\x42\x2f\x2f\xb6\xa9\x29\x5b\x98\x08\x2d\x30\x4e\xba\x1f\x04\x7c\x51\xa8\xce\xa4\x62\x5c\xd3\x41\x5e\x16\xe0\x5d\x3b\xe0\x1b\xd5\xbc\x24\xbd\x44\x0a\xc2\x9a\xd7\x03\xe9\x75\x15\xb3\xec\x98\x80\x15\xf7\x8b\x42\x55\x5f\x4a\x1d\x5f\xe6\x5a\xeb\x39\xcb\x81\xe0\xa1\xc9\x0b\x6a\xf0\x62\xe9\x46\xd5\x1d\x96\x95\xfd\x20\x60\xb4\x29\xa5\xa0\x64\x3f\x88\xe0\xb4\x06\xd1\x4e\x0e\x81\x06\x45\xde\x94\x2e\x12\x5b\xb1\x05\xec\xd3\x1e\x99\xe1\x56\xbd\x46\x0f\xc7\x5d\x8f\x45\x38\x30\x40\xbd\xff\xa2\x44\x1c\x13\xd0\xd7\x29\xa9\xcb\x64\x6e\x86\x81\x43\xd8\x8f\x23\xab\xf1\xfd\x56\xee\xb2\x4d\x0a\xec\xa4\xf5\xde\x78\x43\xb4\x96\x72\x5f\xbc\x11\x20\x5e\xc7\xe4\xae\x5d\xa8\x11\x1c\x7f\x72\x90\xd1\x04\x91\x38\x31\x1d\x50\xe7\x30\xca\xaa\xc0\x35\x85\x1c\x4c\x04\x58\x1e\xc3\x3e\x38\x85\xbd\x92\x76\x96\x3c\x2e\xdb\xca\x19\xe6\xca\x86\xa4\x17\x82\x87\x07\x0f\x49\xa2\x30\x3c\x3c\x37\x0e\x49\x93\xb6\xc6\x3b\xf1\xf3\x45\x1e\x41\x8f\x92\x2e\xf2\x0c\xdf\x7c\x28\xe6\xcd\xb8\x43\xf0\x11\x08\x19\x91\xdd\x89\x7b\x85\xa0\x78\xf2\xa0\x14\xa0\x8b\x9a\x14\xb3\x0f\xee\x82\xf6\x45\x9e\x7a\x40\x53\xe3\x11\xef\xee\x7a\x08\xe8\x53\x8b\xcd\x1e\xd6\x9b\xa7\x52\x72\xa8\x25\xc1\x3b\xbc\x3a\x65\x0c\x13\x74\x1f\x80\xc5\xb4\xda\xac\x5d\x32\xb9\x18\x1e\xd9\x44\x5a\x28\x8b\xeb\x4a\x08\x61\x20\xb4\x7f\x62\xae\x64\x13\x97\x0c\x10\xb4\x87\xdd\x94\xf2\x5f\x80\xc5\xc7\xc4\x8a\x33\xd0\x20\x72\x90\xd3\xe8\x22\x7a\x08\x75\xb1\x3f\x74\x77\x3c\xf0\x1e\xbc\xac\xb2\x70\x62\x53\x49\x0f\xf1\xc5\xf7\x2f\xfe\x4e\x14\x89\x6c\xbd\x30\x4d\x0c\x4b\x47\x0e\x5c\xb6\x79\xac\xce\x94\xc1\xba\x69\x5d\x9e\x4e\x24\x78\xb0\xe2\xb5\x9a\x89\x3a\xcd\xf9\x20\x76\xd2\x77\x6d\x87\xad\x3f\xce\xf2\xca\xc9\x91\xc7\x6e\x23\x66\x57\x4a\x22\x31\xb0\x7d\xea\x73\x5f\xb3\xad\x30\x3d\x77\xe4\x8a\xf4\xfe\x0b\xc8\xfa\x90\xe8\xbc\xb0\x20\x38\x4e\x21\x08\x21\x82\x87\xbd\x66\x22\x68\x5a\xa6\xa8\x63\x4c\x05\x95\xb4\x16\x03\x12\xcd\x75\xee\xd2\xbe\xa8\x3b\xab\x7f\xae\x9a\x41\xa1\xf2\x90\xfb\x0a\xaf\xd7\xea\x28\x72\xe1\x5e\x33\xd0\x80\x93\x77\x0d\x69\xd3\x01\xea\x5a\x44\x63\x30\x93\x2f\xa0\x86\xba\x6f\xc7\x8e\xe2\xb6\xb2\x86\xbb\xdb\x09\xf1\x4a\xb3\xfa\x7a\x43\x37\x58\x1a\xd1\xe1\x66\x8a\x87\x09\x10\x79\xdf\xa3\xd6\xf9\xe2\x2e\x30\x97\xfc\xce\xb8\x89\x91\x1d\xdc\x47\xe9\x66\x4b\x47\x56\x61\x22\x36\x9c\xc8\xb8\x3c\xd2\x64\x3a\x9e\xc7\xac\x80\xd0\x69\x5f\x50\x9f\xc4\x6f\xbb\xa4\xaa\x04\x48\xe0\x38\xcf\x4f\xce\xc2\x84\x8d\x68\x33\x8a\xd6\x6e\xe8\x74\x0f\xbf\x3e\xf0\x31\x05\x0d\xbd\x1d\x75\xbf\xa0\xb8\xf2\x78\x99\x3b\x69\x83\xd5\x15\xd8\x35\xb3\xa6\x21\x7d\xe8\x28\x1e\xd4\x55\x37\xa1\xf6\x6d\x9e\x05\x81\x42\x58\x05\x0e\xf5\x7e\x92\x47\xfa\xb3\xdb\x24\xd4\xd0\xed\xa4\x28\xbd\x02\xe3\x5a\xa8\x74\x47\xef\xea\x88\xee\xb9\x4c\x91\xac\xdf\x5e\x5b\x20\x9a\x38\x4f\xbf\xe8\x47\x28\xe0\x26\x14\xef\x3d\x74\x06\xa3\x49\x3a\xa8\xdd\xb9\x05\x54\x7e\x73\xa9\xa2\x0b\xb6\x86\x38\xc7\x11\xec\xc9\x1e\xbc\xb3\xd5\x3e\x80\xef\x09\x63\x57\x17\x95\x29\x0d\x31\x03\xb8\x54\x5f\x3a\xee\xa7\x86\x9b\x11\xa0\xb7\x8c\x59\x41\x8c\xf9\xf5\x15\xe2\xca\xb8\xdf\xa4\x7c\xf0\x46\xe8\xf5\x83\x38\xb2\x46\x7c\x29\xbe\xd1\x93\x47\xe5\x35\xb5\x82\xcf\x26\x51\x47\xba\xe4\x8b\x4c\xea\xa8\x8a\xc7\xaf\x67\x02\x9a\x2b\xfb\x79\x80\xc7\x2f\xff\x47\xfe\xea\x7f\xe4\xdf\x31\xff\xef\x3a\xfc\x07\x7e\xf2\xcf\xdc\xff\xf9\x5f\xfd\x77\xff\xe4\x3f\xfc\x87\xfe\xa4\xf8\x57\xfe\xd8\x5f\xfb\x75\xff\x95\x7f\xf5\x7f\xfa\x2b\x7f\xe9\xef\xfe\xbd\x3f\x7e\xc0\x83\x4c\x4a\x21\x1e\x22\x11\xd2\x01\x3c\xe1\x1d\x22\x07\xea\x77\x82\xc7\xa0\xf9\xaa\x74\x43\x4e\xcf\x51\xf5\x8e\x71\xcc\xa2\x68\xd3\x2f\x26\x3c\xd2\xeb\x7a\xcf\xeb\x0d\xbc\xdf\x59\x61\xd0\xa2\x11\x45\x55\xd0\xd7\xbd\xab\x90\x3e\xe4\xb3\x8f\xa6\xd9\xd5\x94\x46\x88\xeb\x3d\x1f\x30\xf9\xc4\x9b\xc1\x52\x96\x82\x9a\xc5\x42\x60\xcb\x1d\xfb\xbe\x4f\x32\x18\xb0\xa8\x6a\x4e\x66\x60\x5e\x59\x54\x60\x0a\x00\x86\x61\x98\xcd\x2f\xa6\x5d\xa8\x4d\x82\xb5\x19\xe1\x61\x38\x9a\x90\xcf\x3d\x5d\x25\x81\xaf\xce\x28\x8b\x57\x9f\x11\x7a\x32\xd7\xa4\x45\xfd\x8b\x55\x3f\x5f\xb4\xd7\x56\xdd\x0e\xbb\xd1\x7a\x2b\xac\x55\xce\x1e\xab\xe0\x93\xe2\xf6\xd1\x12\xd2\x4d\xd6\x64\x60\x23\x19\xe7\xa2\xb8\x17\x27\xd8\x27\x45\xfb\x4e\x0f\x1d\x0f\x45\x86\x61\x14\xc6\x90\x90\xbd\x61\x89\x72\xca\x0e\x87\x86\x61\xb0\x7f\x1e\xaa\x53\x36\x06\x7a\x89\xbb\xad\xe6\x0b\xf6\x1a\x2c\x0e\x5a\x23\xda\x84\xa3\x79\x63\xb8\x3f\x92\xaa\x81\x87\x18\x6b\xa6\xda\x16\x81\x5e\x20\x04\x9f\x5d\x92\x3a\x4b\x8e\x71\xe2\x17\x13\x1e\x79\xab\x27\xd8\x79\xa6\xcd\x47\x8f\x9d\x26\x22\x20\xad\x35\x93\x0c\xb2\xae\xe7\x69\x65\x45\x57\x16\x37\x49\xa4\xf4\x90\xc2\xbf\x80\x1a\xd8\x26\xcc\x91\x36\x5c\xf1\xed\x58\xd3\x4c\x4f\x46\x41\xb5\xd4\x14\xcc\x6c\x2d\x70\x44\xdc\x03\xee\x5e\xa6\xc2\xa6\xfd\xe0\x2f\x18\x5b\xb2\xc3\x8a\x0e\x68\x86\xdc\x82\x32\x7a\xde\xce\x4a\x7a\xb1\x51\x9a\xa9\x42\xaf\x27\x13\x58\xe9\xa8\x27\x26\xff\x08\xa7\xdb\xfd\x04\xe3\xe6\x14\xd1\x9d\x96\xcd\xc5\x87\x39\x13\x7f\x27\x5f\xdb\x82\x80\xfd\xeb\xa7\x24\x8a\x79\x62\x37\x14\xbc\x8f\x04\xcb\x74\xcb\xf0\x0f\xda\x6b\x5a\x80\x9b\xa7\x1f\x75\x10\xad\x26\xf8\xbd\xae\x4f\x84\xd1\x66\x4e\x30\x96\xed\x32\x0d\xd5\xfb\x0c\xb5\x1e\xbe\xbb\xf1\x6f\xaa\x5f\x80\x3f\x54\x36\x39\x37\x8b\xca\x47\x05\x18\x35\xc8\x4d\x6e\x63\x85\x84\x42\xac\xc7\x2c\x7b\xe5\xca\x2c\x79\xef\x01\x35\xd3\x27\xdc\xfe\x01\x0f\x44\x5e\x69\x6c\x8b\xf3\xa8\x86\x94\x02\x8f\x22\xf6\x59\x88\x4a\x4b\xc2\xf6\x77\xb7\xb6\x04\x8b\x87\x54\x7c\xe2\x9b\x04\x2d\x98\xd3\x2f\x5e\xaa\xf5\x10\xab\xeb\xec\x91\xe0\x9c\x53\x57\x26\xc5\xf4\xdb\x15\xd6\x52\x57\x64\xad\x49\xa4\x81\x19\x1d\x50\x90\x9d\x4c\xad\xab\x5f\x14\xed\x2f\x84\x4f\xd5\x36\x2d\x8b\x62\x10\x44\x38\x61\x7a\xd4\x75\x64\xaf\xf3\xe9\xbe\x0b\x75\x32\x02\x9c\xf6\xe0\x50\x45\xa6\xe9\x2f\x72\x2a\x25\x64\xb1\x19\x7a\x0c\x41\x0e\xa9\xb9\x32\x65\x23\xce\x34\x14\xd7\x32\x83\xa3\x84\x2a\x83\x21\x48\xdc\xdc\x22\x9b\x59\x5c\xcf\x17\x39\x15\x1c\xc2\x27\x04\xb2\x9a\xb4\xc2\x86\x59\x24\xda\x1f\xef\x5f\xd0\x32\xb9\xaf\xba\x27\xa5\x21\x1c\x70\x6b\xb7\xc3\xf1\x09\xad\x7d\x41\xeb\x10\x4d\xec\xe0\x62\x32\x87\xb0\xcf\xd0\xfa\xd1\x18\x19\x63\x06\x23\x69\x27\x53\xa1\x3c\x12\x40\xea\x56\x54\x7c\x6a\x09\xd3\xf2\xc5\xfc\x11\x8b\x70\xc2\xa7\x5b\xe1\x19\x41\x6f\xec\xdd\x42\x93\x44\x5d\x5b\xc1\x9c\x90\x15\x4c\xa9\xc1\x8e\x19\xf6\xb4\xec\xa3\x89\xe8\x7c\x30\x4d\x4b\x60\x6b\xe7\x09\xde\x9f\x46\x36\x61\xe3\x22\xfb\xd8\xf5\x64\xe4\x9c\x04\xee\x09\xf9\xb0\x22\x36\x87\xb3\x7b\xa1\xa9\x3f\x28\xd3\x2f\x32\x7b\x55\xf5\x48\x2a\xd6\xff\x9b\xb6\x7f\x0b\xdd\xf0\x7b\xf3\x82\x21\x49\x2d\x22\xc7\x34\x1a\xd0\x08\xc3\x49\x53\x24\xad\xd6\x36\x98\x23\x41\x2b\x49\x2a\x6b\x24\xb4\xd2\xd6\x7e\xbf\x5f\xeb\x5e\xf7\x5a\xa6\x86\x4e\x60\xa1\x86\xe6\x41\xe1\x49\x24\x5a\x52\x41\x09\x6d\x1c\x77\x50\x4c\x06\x63\x52\x99\x14\x81\x49\x81\xe6\x41\xd2\xbb\x81\x77\x27\xaf\xbe\xfc\x86\x57\x10\xfe\xa7\xde\xa7\x5f\xbe\x07\x0f\xcf\xb3\xd6\xb5\xae\xeb\x73\x7d\x36\x47\x16\x6c\xa6\x05\xb8\xad\x03\x74\x46\xcd\x12\x2e\x24\x03\x57\xe5\x71\xd4\x48\x53\x23\xca\x71\x9e\xe9\x0b\x6e\x05\x77\xe5\x99\x59\x34\x54\x60\xce\xc9\xd2\xb4\x30\x00\x06\x33\x96\x78\xba\xd0\xc4\x97\x2f\xe0\x24\x37\x30\x52\xa1\x09\x92\x73\xfe\x33\xbb\xd2\x7f\x8e\x83\x6d\xc7\x93\xcf\xf1\xd0\xbb\x29\x90\xa5\x27\x32\xe6\xee\xfe\xf6\xc1\x3d\xab\x6c\xea\x7e\xb5\x2d\xec\xc8\xa2\xf0\x9b\x9e\xe0\xe7\x27\xab\x0c\xe1\x2d\xa6\xa1\x69\x7f\x20\xc2\x49\x08\x3c\x59\x20\x0f\x27\x58\xc4\xd2\xc6\xcb\xd5\xd3\xe3\x6e\x15\xa1\x16\xc7\xe0\x2c\xf1\x2f\x00\xd2\x45\x89\x95\x48\xd1\x75\x09\x6e\x40\xd9\x08\x0b\xcb\xc7\xd4\xc4\x1e\x33\xfd\x1b\x11\x6c\x39\x15\x05\x52\x31\xe4\x05\x76\x27\xf6\x05\x10\x46\x63\xb7\x6b\xdb\x65\xe3\x13\xbd\xf3\x3b\xba\x3a\x54\xbf\x68\x99\x23\xa2\xe4\xbb\x75\x0e\x03\x1d\x48\x00\x0c\xab\x90\x46\x7f\xf1\x9a\x71\xd1\x99\x64\x95\x16\xf8\x94\x70\x1b\x8c\x1a\x37\xda\xa7\xeb\x10\xa4\x96\xb0\x6e\xbc\xa3\xf7\xad\xe4\xc1\xfa\x99\x5b\xe5\x0a\x3f\xe9\x72\xe2\xda\xfa\x3c\x4d\xcf\x50\x9c\x2a\x4b\xd2\x37\x93\xb4\x02\x8f\x4f\xc2\x4b\x17\x52\xe7\xcd\xe1\x28\xe0\xa8\xca\xab\xa3\x0b\xdb\x07\x9c\x5e\x46\xe3\x39\xd5\xbc\x49\x32\xe3\x39\x77\x2a\xc5\x4c\x13\x43\x72\xef\xb3\xea\xd1\xaf\xd7\xf4\xcd\x9e\xe7\xb8\x21\x61\x2c\x3a\x28\x3f\x01\xce\x87\xab\xa5\xb5\x41\x9f\x30\x5e\xe9\xcf\xd3\xd0\x62\x0f\x40\x14\x67\x71\x1f\xe2\x06\x88\x61\x51\xa6\xe9\x3d\x09\x4f\xdf\xdb\xf9\x82\x4d\x7b\xd3\xcc\x97\x9c\xe9\xa4\xc1\x68\xf5\x20\xac\x78\x09\xb1\x26\x40\x54\xa8\x66\x28\xdb\xe6\x44\xb9\x03\xd7\xe1\x37\xe9\x80\xc7\xfc\x23\x80\xc7\x7f\xfb\x7f\xf3\xd7\x7e\xe7\x4f\xfd\xe9\x9f\xfb\x13\xbf\xca\xff\xf2\xdf\xfe\xf7\x7f\xfc\x97\xfe\xee\xfe\xe3\x3f\xf9\x8b\xc8\xff\xfd\x6f\xfe\xfe\xff\xd3\xaf\xff\x55\xbf\xf4\xbf\xf3\xb3\x7f\xf0\x3f\xf8\x01\xc3\x23\xb0\x20\x6b\xbd\x4a\xc2\x5e\x0d\xd4\x5b\xc2\x7e\xcd\xbb\x89\xce\x97\xa6\x87\x6e\x21\xb9\x4b\x6a\x65\xa2\xa1\x31\x47\x64\x2f\x3e\x28\x73\x3c\x21\x33\xa3\xdf\xc6\x96\x3a\x5f\x0a\x29\x3c\x5d\x61\xf4\x64\x9b\xee\xc1\xfc\x87\x51\x4a\xec\xb6\xdb\x6c\x71\x64\xf2\x3c\x13\x8c\x2f\xf0\xbb\x8a\x26\xe9\xbb\xf6\xad\x68\x2e\x48\xc6\x66\xac\x18\x40\x2c\x4e\x1f\x15\xb7\xef\xeb\x11\x80\xe0\xb8\xdf\x52\xda\x41\x68\x98\x2f\xca\x1c\x57\x1d\xf9\x76\x19\x5c\xf2\x26\xb3\x20\x82\x16\x0d\x91\x98\x2b\xeb\xc5\xb8\xd2\x5c\xdf\x1e\x6b\x64\x6b\x5a\x75\xef\x70\xe9\x7e\xb2\x8d\x02\x2f\x7a\xaf\x1e\x4c\x76\xbe\xdd\x1c\xa2\x1a\xb5\x7d\x7a\x3c\xdc\x45\x14\x90\x85\xeb\x14\xd4\x2a\x81\x47\xef\x26\xb7\x6e\x27\xbe\xc0\x75\x91\x46\x6f\xd7\x80\xed\x20\xcc\x91\x0f\x9a\xcd\x09\x56\xa3\x36\x38\x76\x0f\xb9\x95\xde\x1e\x66\x07\xb1\x48\x09\x77\x07\x49\xf0\x8b\x47\xf8\x19\x00\xb6\xd6\xe2\x73\x5f\x1f\x1c\x94\x9b\xb7\xc9\xc4\x68\x75\x2e\xe1\x13\xd5\x90\x0d\xf3\xbe\xb5\x22\x0f\xeb\xae\x61\x35\xf7\xc5\x00\xe3\x7b\xa5\xd2\xee\x97\x95\xf5\xa4\x1c\x5e\xcd\xa8\xa9\x66\xc8\x27\x01\x14\x17\x12\xd4\x4e\xfd\xb2\xe1\x28\x34\x59\xf7\x29\xd3\x17\xf4\x5b\x16\x27\x4a\x58\x33\x34\x1f\xe4\x4c\x23\x92\x88\x07\xe1\x57\x66\xa4\x29\xe4\x21\xd5\x69\x42\x92\xd8\x0f\x5d\x65\xcb\xe2\xb0\xd8\xbe\x18\xa3\xca\x53\x09\xe4\x89\xa2\x7a\x90\x0b\xe0\x34\x5b\xd0\x7d\x14\x4e\x7b\x99\xc5\x45\x43\x17\x8b\xfb\x8c\xb7\x60\xd1\xc6\x8c\x7c\x7e\xc2\x3f\xc2\x65\x4d\x4a\x3c\x97\xa8\x88\xf3\x80\x61\xcd\xb9\x37\xf9\xcc\x0c\xa4\x54\xf5\xa7\xec\x5a\x06\x65\x81\x6f\xcc\xd3\x44\x7b\xf2\x2f\x60\xda\xbd\xe3\x46\x7c\x16\x66\xdf\xf9\x24\x44\x51\x6d\xf2\x74\xbd\x8a\x47\x9a\x93\xda\xf9\x62\x88\x39\x3d\xab\x9d\xc9\xbe\xd7\xaa\x2f\x18\x1e\x4c\x04\x0f\xa7\x75\x2f\x6a\xde\xf7\x75\xd5\x06\x87\x8e\xec\x2a\x62\xaf\x07\x73\xf6\x67\xec\x47\x22\x71\x92\x9e\x36\xf9\x05\x83\xfb\x02\x82\x8a\xea\x26\x2a\x33\xf5\x25\xaf\xa7\x4d\xc4\xb6\x58\x44\xfa\xda\xd8\x10\x6b\xbe\x5a\xa9\x8d\x2f\xde\x9e\x16\x96\x73\x73\x76\x7f\x51\xb5\xf8\x7c\xb4\x5b\x31\x23\x45\x14\xc0\x25\x0b\xd5\xc4\x5c\x4d\xb9\x67\xb9\xfc\x0c\x39\x93\x34\x90\x77\xb6\x8f\x1e\x34\x5c\x75\x05\xff\xe2\x74\x5a\x8c\xcd\x04\x94\x94\xc7\xaa\xf9\xe8\xa2\xf6\x08\xe7\x01\x28\x03\x3d\xf9\x33\x5a\xb9\xd0\xf3\x7c\xdd\x81\xee\xbd\x5b\x52\x2d\xbf\x60\xfe\x04\xd0\x75\xe1\x4f\xaa\xca\x98\x80\x0b\x57\xe2\x79\xf7\x93\x6b\xd7\xef\x63\xeb\xd3\xf1\x85\x46\x56\x5c\x59\x98\xc8\xa1\xfd\x22\xf1\xc5\x9b\x6a\xc1\x14\xb2\x38\x66\x03\x20\xdd\xcc\xee\x6e\xb9\x08\x10\x90\x9c\x4b\x0f\x58\x09\x4d\x01\x68\x0a\x75\x22\x46\x0b\x19\xd9\xdf\x2f\xc8\xe1\x8f\x36\x34\x3f\xc4\x23\x01\x34\x4b\xc0\xd8\x5c\x3c\x66\xb6\x4f\x72\x60\xe6\x8a\xe8\x57\x03\x92\x43\x26\x6c\x8d\xba\x2f\x96\x9f\xc8\x38\xb2\x2b\x1a\x91\xc7\x11\xa1\xb0\x06\xb0\x37\xd0\x69\x83\xe3\xea\x41\xef\x3b\xf6\x02\x86\x82\x84\xdc\x13\x0d\x62\x73\x9c\xf2\x89\x4c\x94\x49\x2a\x3a\xdd\x2f\xb8\xaf\xca\x6f\x7f\x17\x84\xec\xcd\x7b\x90\xf8\x76\x57\x16\x6a\x08\x81\xca\x5c\x17\x9d\xf0\x84\xf3\x40\x6a\x7e\x50\x2f\xd8\x71\xf4\x11\xe5\xb5\x3b\x28\x48\xd0\x9d\x6f\x15\x73\x69\xe9\xc1\x68\xc2\x7a\x0f\x74\xa9\xd1\x6d\x4e\x41\x7f\x0e\x3e\x90\x73\xf9\xc5\xae\xf4\x30\x6f\xca\x2b\x46\x99\x93\xb9\x89\x55\x94\x7d\xcd\x39\x7c\x65\x48\xbc\x57\x3b\x5e\xc7\x4d\x73\x27\xee\x9f\xbd\x32\x3c\x5a\x7e\x01\x59\x2f\xd6\xc2\x7c\x2d\x70\xc2\x2f\xb5\x01\x8f\xd7\xda\x92\xdf\x87\x0f\x0d\xe7\x9b\xe4\x5a\xb7\xee\xaa\x4b\x31\xc8\xfb\xd5\x3b\xfd\x44\x70\x55\x6b\x70\xf3\x99\x02\xf8\xdc\x45\xba\xeb\x15\x2e\x47\xca\x91\x5e\x03\x1b\x35\xfc\x45\x38\x9f\x35\x5d\x31\x20\x88\x88\xed\xfc\x84\xc7\xca\x17\x00\xcf\x0c\xa6\xcc\x37\x6c\x96\x7b\x00\xa3\xe4\xdd\x05\x7b\xce\x6d\x62\xbf\x9c\x23\xb1\x00\x11\xed\x4c\x8c\x1f\x51\xe8\xfc\x02\x9a\x1c\xbe\xe9\x71\xdf\x49\x74\x2e\xf2\xb8\xea\x4f\x00\xbe\x92\x08\xe0\x5d\x1d\x10\xdf\xa7\x80\x8b\xe2\x87\x1a\x4a\xc3\x3b\xae\xf8\x82\x05\xc5\xd4\x31\x07\xc0\xa3\x44\x17\x1d\xef\xdc\x1f\x13\x8e\x4d\x0a\x89\x73\x97\x83\xc1\x84\xaa\xaf\x02\x93\xcd\x4e\xb9\x61\x87\xcb\xf9\x01\x77\x93\xcf\x2a\x5a\x07\x57\x3a\xb2\x26\xc5\xb2\xbb\x9f\x9f\x47\xb0\xdc\xfb\x01\x81\xf0\xf7\xd1\x9c\x50\x49\x4d\x96\xed\xaa\x6d\xd5\xfc\x82\x7d\xcf\xbb\xf2\xd6\xe4\xe4\x8f\xe6\x48\x98\x74\x65\xe4\x28\x27\xef\x34\x66\xcd\x4a\xc0\xa9\x27\x39\x28\x81\x05\xee\xc5\x85\x1c\x93\xf8\xe2\xa6\x52\x00\x5c\xb5\xde\x2c\x03\x08\x71\x2a\xb3\xf6\x28\xed\xae\xa6\x17\x4c\x3e\x2a\x6c\x6c\x04\x81\x84\xed\x18\xc3\x6c\x49\x28\xe2\x03\x92\x02\x2b\x56\x76\x1a\x22\xc5\x40\x49\x44\x10\x82\x4a\x24\x8b\x9f\x2c\x27\x97\xa4\x51\x3f\x4d\x8d\xbb\x25\x3e\x31\x21\xde\x8d\xb9\xda\x8f\x32\x3c\x7e\x4f\xac\x7f\xef\x17\xff\x7e\xf6\xd7\x7f\xdf\xcf\xfd\x1f\xff\xe0\xdf\xff\x89\x5f\xf8\x9f\xfb\x6f\xc2\xff\xf5\xdf\xf8\xfb\x3f\xf1\x13\x3f\xfd\x73\xbf\xe2\xf7\xfd\xae\x7f\xcf\xfc\x8d\x3f\xfd\x01\xc3\xc3\x73\xf7\x54\x87\xdc\xeb\xf0\x3d\xa8\x9b\x59\xf1\x11\x90\x50\xda\x8b\x1c\xae\xa1\x59\x6a\x08\x76\x0b\x65\x2c\xb7\xa2\x44\xff\x09\xc1\x51\x8e\x67\x4c\x32\x34\xec\xb8\x2e\x80\xd8\xa3\x2e\x8d\x65\x3e\xf7\x6e\x5d\x6f\x33\x75\x6b\xe2\x37\x67\xda\x9c\xc7\x75\x76\xd9\xf8\x00\xb3\xe2\x98\xce\xc5\x42\x2c\xc3\xeb\xdb\x48\x11\xe1\x4d\x65\x76\x91\x4f\x7b\x5f\x73\xa3\x84\x71\x40\x35\x55\x06\x34\xab\x5d\x40\x5a\xfc\x93\x47\x38\x35\x52\xac\x7a\x4d\x8b\xb7\x92\xdd\x57\xd2\x92\x54\xa5\x1f\x5d\x11\x21\x8f\x58\x21\x88\x68\xa9\x32\xb3\x8d\x36\xb2\x21\xe0\x8b\x01\x46\xce\xd5\xb9\xe4\x2e\xad\x86\x20\x2e\x2b\xd9\xf3\xb0\xf4\xbc\xd0\x85\xb3\x06\x2d\x1a\xc3\xdd\x82\x78\xa8\x40\x20\xcc\x34\xed\xfc\x02\x76\x19\x6b\x54\xea\x4a\x16\x78\xb8\x97\x88\xd5\x74\x00\xf5\xc6\x57\x4c\xe2\x23\x46\x9c\xc2\x4b\xbb\x3a\x11\x05\x35\x51\x6b\x4f\x97\x5f\xb4\xcb\x02\x81\x97\xc9\x00\xaf\x27\xa3\x9e\x75\x6f\xec\xa0\x4e\x12\x5b\xcf\x34\xd8\x61\x0a\x7f\x72\xcb\x91\x2b\x90\x84\x72\x2c\xb9\xfe\xc5\x00\xb3\x1c\x05\xec\x3a\x8e\x09\xa4\x92\x18\x43\x47\x02\xe0\x7d\x5e\x0d\x97\xaa\x33\xf8\xf2\xba\x10\xe1\xc4\x4f\x21\xd9\x82\xa8\x53\xff\x02\xe3\x86\xb4\xbf\x9b\xbf\x80\xf4\x74\xce\x2b\xbb\x71\xb7\xac\x1c\x9e\xb0\x04\x2b\x84\x14\x0f\x45\x17\xc5\xa9\xfe\x3a\x12\x4f\xe1\x38\x7c\xb1\x43\x37\x26\xa9\x5a\x32\xde\x40\x2f\x88\x89\x47\x3b\x71\xc2\x35\xe5\xd4\x50\x53\x6f\xad\x23\x83\x53\x7c\x4a\x35\xa9\x1d\x01\x15\x9f\xf0\x4c\x08\x77\x89\x6a\xbb\x13\x0e\x3d\x1a\x0d\xe6\xa2\x65\xd1\xba\x18\x83\x42\x6a\x70\x01\x57\x0a\x25\x28\x03\x7c\x25\x7c\x92\xa1\xfc\x13\x5a\xb6\x0d\x49\x1f\xd8\x97\xc7\xdc\x08\x92\xa4\x31\x9a\xd4\x17\x08\xe2\xaa\x98\x3a\xf8\x55\x67\xea\x6b\x57\xeb\x7a\x29\xc2\x21\xf1\xc5\xe9\xcc\xda\x46\x07\x7d\xc5\x77\xe7\x47\x09\xd3\xee\x18\x86\xe9\x33\x44\x91\x74\x76\xba\xd4\x40\x08\x99\x27\x6e\x9c\x84\x2c\x3e\x86\x4f\x78\x26\x50\x70\x39\x39\xd2\x02\xe2\x4c\x2e\xc4\x0b\x0a\x9f\x05\xef\xae\x40\x61\xdf\x82\x66\xa0\xda\x76\x96\x61\x3d\x07\x3f\xbb\xb6\x0f\x76\xa5\xfc\x0c\xfa\xcc\x62\x7a\x7c\xf0\x33\xef\x64\x7d\xf9\xbb\xdf\x26\x88\xed\x7d\x5d\xbb\x44\xc9\xc6\xac\x37\x1e\xa8\xf5\xde\x75\xbd\xec\x0b\x17\xa6\x20\xd0\xc0\xe9\x28\x49\xe1\xfe\x61\xca\xa5\xb5\xbf\x2f\x3f\x72\xf1\x81\x21\x2f\x2f\x7f\x5b\xf6\x98\x02\xa5\x78\x30\x76\xed\xfd\xc9\x1e\x48\x42\xe1\x52\x42\x18\xa9\x28\x47\x41\x23\xc2\x35\xf4\x6a\xcc\xc4\x50\x48\x3e\xc6\x88\x5e\x5d\xb0\x31\x43\xe8\x19\x7d\x70\x90\x5f\xdc\x11\xca\x49\x7e\x76\xd0\x45\x19\x04\x7d\x2a\x93\x21\xb5\x4b\x9b\x0f\x07\xc6\x05\xe6\xcd\x19\xdc\xc5\xcb\x25\x08\x71\x69\x19\xfa\x17\x44\x79\x5e\xf5\xf3\x66\xa0\x8b\x3c\xad\xc4\x75\x43\x48\x53\xaf\xb8\xcd\xa9\x82\x6c\xe3\xdb\x42\x47\xc2\x7d\x22\x27\x5d\x97\xb7\x63\xfa\x85\xe0\x8a\xdb\xe1\x4b\x8d\x88\xd6\x3c\x44\x87\xd0\xcf\x78\xf2\x59\xfc\x1a\x76\xd9\xc9\x0e\x1b\x8b\x50\x6e\x46\xf6\x34\xbd\x63\x32\xbe\x5f\x08\x28\xb8\x79\xf8\x1b\x15\x85\x29\x63\xe7\xe8\x9c\xfb\xfa\x32\x5f\x97\x4c\x8c\xe1\x49\xa5\x3f\x18\xb1\x8a\x13\xa4\x1b\xb7\xfc\x20\x64\xee\x07\xcc\x1f\x96\x89\xa8\x10\xc0\xd1\x1e\x96\xbc\xc6\xfa\x76\xc6\xa7\xa4\x09\x20\xc4\xf3\xc1\x9b\x78\x4d\x43\x20\xd3\xd2\x6d\x3b\x64\x9d\x87\x0f\xdc\xb9\xf8\x33\x6b\xa1\x4f\xc7\xfd\xa1\x6b\xad\x87\xf7\x7c\x0d\x14\x50\x8e\x1e\x76\x86\x65\xb2\xf7\xb6\x77\xb7\x06\x9a\xe2\x59\xf9\x5d\xc7\x17\x5d\x4e\x99\xbb\x0d\x4c\x62\xc4\x54\x71\xe5\x71\xd1\xb9\xe7\x2b\x52\x3c\xd2\x60\xab\xf5\x43\x1e\x90\x9f\x9d\x80\xea\xf8\xe1\xd7\x2c\xf1\x45\xc7\x27\x49\x46\x68\xaf\xe1\x0e\xa2\x4d\xc0\x47\xe4\xfd\xb8\x48\x7d\x8d\x89\xbb\x57\x61\xc3\x8e\xe5\x6f\x15\x59\xaf\x14\x19\xc4\x6b\x7c\xb1\xd6\x61\x14\x8c\x9c\x2c\x28\xb5\x06\xcf\x14\xf4\x21\x47\xaf\xb1\x7a\x39\xae\xd5\xbb\xed\x20\x28\x81\xbb\x54\xc4\x25\xf3\x59\xb0\xf9\x2f\x7c\x2b\xc6\x78\xaa\xf3\x64\xd7\x78\x5e\xb2\xb5\xe9\xc2\x87\xb1\x82\x3b\xc9\xc2\x34\xc7\xab\x59\x43\x2f\x6b\xef\x98\xc2\x8d\x11\xe0\xf9\xc2\x6d\x87\xc1\xfe\x4e\x4b\x00\x60\xd2\x95\x64\x4f\x42\x40\x88\xfa\x9c\x5e\x10\xf1\x2d\xbc\xa1\xdd\x13\xa9\x0f\x95\x49\xd2\xe0\xd3\xa2\x05\x5f\x08\x6b\xba\x06\xce\xe3\xe0\x4a\x38\x7a\xa7\xc7\x26\x66\x26\xce\x87\xc5\xce\x7d\xdc\x39\xbb\xd4\x2e\x3b\xde\x39\x09\x73\xc0\x19\xd7\x2f\x96\x8e\x3c\xd7\xec\x2b\x4c\xb9\xbf\xcb\x0b\xf0\x62\x49\xbb\xa5\x24\x9d\x9e\xcf\x23\x2e\xc5\xd1\x0c\x01\x66\x78\x2a\x99\x17\x74\xd4\xff\x6d\x83\xf8\x7f\xde\xec\xfb\xb4\xed\x62\xd7\x04\x37\xa0\xcc\xdc\x77\x73\x0b\x4a\xa4\xda\xba\x2b\x04\x95\x22\xc9\x6b\x4a\xbe\xbd\x02\xbf\x13\x12\x6a\xe5\x17\x6b\x1d\x93\xd9\x43\x3b\x7f\x65\x7c\xbb\x16\x3e\x8f\xc0\x35\xae\x89\x11\xcd\xde\xab\xd5\xcb\xc8\x03\x4a\x25\x5b\x48\x13\x41\x3c\xb3\xb5\x1f\xf5\xf0\xf8\x17\x7e\xe5\xaf\xf9\x5b\x7f\xfd\xa7\xfe\xfd\xc8\xfe\xd8\x6f\x58\x7f\x3b\xff\xec\xff\xe7\xff\xf1\x1b\xff\xc2\xf8\x17\x7f\xd9\x7f\xe3\xbf\xb4\xff\x62\xfa\x0d\x7f\x52\xff\x67\xfe\x95\x0f\x18\x1e\x50\xb2\xee\xe8\xd5\xbe\x54\x61\xdb\x95\x5d\xd2\x83\xf0\xcb\x94\x42\x2f\x79\x54\x19\x80\xf9\xbc\x6d\x28\xac\x95\xe6\x62\x3f\xf0\x8b\x31\x6a\x9a\x97\xdc\x4b\xe4\x70\x75\x95\x17\x40\x0d\x12\x8e\x56\x6b\x08\x03\xb8\x67\x1b\xc2\xaf\x35\x22\xce\x83\x61\x30\xc6\x92\xc0\xbe\xd8\x1b\x3f\x03\xa2\xcb\xa6\x27\x40\xc4\x36\x06\x4b\x60\xe5\x35\x9f\x42\xfb\xd3\x2a\xbd\x33\x4b\x26\x79\x82\x63\x8b\x2a\x36\xe8\x21\x7c\x42\xde\x02\x4f\x53\xf9\x00\xc9\x2d\x61\x52\xc4\x75\xce\xc5\x66\xae\xb0\xf9\x9a\xce\xcc\x97\x3f\xfb\x99\x3a\x0b\x91\xc2\x0b\xd1\xf4\xea\x13\x3a\x9d\xbb\x42\x5c\x82\x47\xe2\x83\x2b\x08\x25\x93\x02\xb2\x68\x19\x0a\x67\x41\xf1\x0a\x45\x2e\xa0\xf3\xcd\x5a\xfa\x4b\x91\xf7\x8c\x7d\xb1\x1f\x3c\x7a\xf7\xfa\xd6\x49\xf3\xec\xe2\xde\x0d\x5d\x22\x87\x10\x88\x31\x7d\x38\x94\x02\x85\x16\x5c\x9e\x4e\x1d\x66\x3c\x38\x11\xbb\x2f\x2c\xef\x56\xd8\xbb\x40\x54\x32\x18\xef\xb1\x61\x92\xab\x06\x84\x8c\x5c\xbf\x5e\xa6\x51\x9d\x1e\xc0\x7b\xeb\xce\x65\x07\x9a\x43\x24\xec\x8b\xe6\xac\xa1\x67\x45\xd1\x13\x78\xa0\x71\xe0\x31\x0f\x11\x67\x3e\xe2\x0a\x49\x28\x48\xfd\x96\x7c\x94\x6b\xe9\x9e\x37\x09\xec\x37\xc0\x5f\xc0\x71\xdc\x6e\x45\x03\x4b\x1b\xa0\xc7\xd4\xa3\xee\xa1\x3b\xa2\x81\x8a\x71\x29\x55\xd8\xf2\xe3\xf7\x36\xc1\xe2\x81\x5f\xb8\xe4\x04\x29\x7e\x62\xe0\xaa\x8e\xa9\xba\x4e\x81\xd9\xcf\x47\xe0\x6e\x39\x7f\x38\x2d\xf2\x2e\x27\x5a\xcc\x5c\x5f\x41\x80\xb3\x1d\xca\xb0\xda\x7d\xf3\x96\x5f\x3c\x3c\xe0\xe9\x98\x10\x02\xa3\x5e\x03\x76\x87\xdc\x7d\xdf\xa4\xa1\x98\x8b\x53\xf9\xe6\xb8\xfb\x81\xb0\xca\xca\x0f\x78\xe6\x23\x7a\xfb\x44\x7c\xb6\x82\x46\xf1\x0a\x73\x90\xb3\xe9\x6e\x15\x2b\x40\x0f\x8b\x01\x61\xca\x6e\x3b\xf0\x3d\x78\x18\xc8\x68\x76\xca\x88\x53\x33\xbf\x5f\xb4\x88\xd6\x41\xf8\x6a\x4c\xde\xcd\xcc\x86\x3b\x51\x7c\x26\x06\x6f\x2c\xc6\x54\x84\x39\x93\xcc\xd3\xdc\xc1\x8e\x57\x60\x39\x8d\x3d\x9f\x80\x82\x21\x16\x24\x13\x47\x6a\x8b\xa0\x1a\x93\x99\x17\x31\xe6\xcb\xd9\x7a\x4a\x89\x54\x36\x30\xad\xb3\x1e\x90\x13\xea\x39\x09\x70\xf1\x45\x8b\xe8\xc4\x26\x68\x51\xce\x78\x41\x8f\xe4\xa9\xb1\xdb\x33\x83\xaf\xb4\x42\x4f\x07\x03\x0d\xc1\xc5\x98\xa3\xe5\x53\x50\x00\x7a\xfc\xc4\xda\x4c\x50\x0f\x2f\x5f\xca\x87\xf1\xf0\xee\x15\xd2\x27\x6e\xf5\x70\x75\xb6\x6e\xac\x11\x7e\x76\x32\xcd\x4d\x1f\x3a\x75\x26\x37\xf7\x89\xd2\x97\x50\xd5\x46\x67\xc4\xca\xa7\x87\x38\xef\x7c\x8c\x98\xa7\xdc\xa2\x99\xc9\x8f\xef\x9e\xc3\x7c\x29\x05\x8b\xb4\x15\x6e\xf6\x04\xac\x2f\x80\x30\x37\x7b\x57\x82\x07\xb2\x15\xb2\x37\xbc\x5e\x1f\x33\xf5\x98\x87\x33\x16\xd2\x0f\x7f\x45\x68\xdd\xe2\x43\xca\x2c\x6c\x76\xf9\x17\x3c\xd6\x2a\xf4\x0a\x01\xcd\x44\x95\x77\x5c\x00\xc0\x06\x45\xab\x4c\x07\x25\x73\x6b\xc0\xaa\x7d\x53\x50\x4c\xac\x2b\xb3\xf2\xe6\x74\x3f\xf1\x6a\xc8\x1e\x67\x83\x43\xf3\xe0\xd5\x56\x9e\xb5\x7b\x46\x86\x57\x07\x36\xc3\x73\xb8\x4b\x60\xb6\x45\xd0\x04\xb5\x95\xee\xe4\xdc\xbf\x10\x50\x18\xba\x54\xa8\x26\x40\xcd\xf5\x84\xaf\x4d\x47\xa7\x3a\x25\x88\x85\x42\x30\x1c\x05\x57\x27\x6e\xfd\xcb\xab\x7a\x2a\xaf\x32\x7f\xd1\xb4\x33\xcb\xf9\xfb\x4c\x5f\x37\x40\x70\x43\x80\x58\x07\x5d\xcd\x81\x7a\xf2\x18\x01\x16\x81\xc0\x04\xf7\xb3\x17\x00\x2c\xc8\xca\xdb\xf9\xa2\x76\xf2\x73\x44\xec\x88\xa9\xac\x12\xd8\xd3\x99\x74\x29\x33\x04\x22\x5e\xac\x8b\x2c\x23\xb2\x44\x1b\x82\x06\xbd\xa8\xc9\xb7\xd5\x4f\xd6\x7d\xa8\xba\x7e\x82\xb0\xca\x98\x8b\x7c\x6c\x61\x30\x0d\x61\xe3\x87\xcb\xed\x73\xc5\x96\xf3\xdc\x70\x5d\xc4\x61\x54\xe6\xeb\x24\xf8\x02\x20\x1d\xf0\xce\xe9\x8d\x11\xb3\x44\x13\xb5\x96\xa9\x72\x87\x6c\x72\x7b\x22\x2a\xb0\xad\x75\xb1\x41\x8a\x7e\x34\xa3\xf8\x9a\x78\xf8\x17\xe3\x75\xa4\x0b\xe4\x89\x87\xc8\xd3\xe2\xdc\xa3\xcf\x03\xaa\xb6\xb2\x7d\x86\x8e\xa9\x39\x53\x9f\xd8\xfc\x7c\x29\x8d\xc0\x89\x18\xc7\xfd\xc0\x6d\x87\xa3\x25\x38\xbb\xf2\x61\xeb\xa9\x62\x5d\x30\x4e\x03\xe6\x45\x74\x93\x9b\x46\x1c\x43\xdd\xf4\xda\xf9\xda\x00\x8d\x7f\xb3\x3a\xeb\x7e\xf1\xa6\x4e\x5b\x89\xaf\xae\xe3\x0a\x0c\xd3\x4d\xd0\x2c\xab\x05\x09\x5f\x8f\xbb\xf7\xa3\xbf\x65\x8b\xab\xfb\x98\xf7\xed\x03\x5d\x29\xe6\x17\x3e\x7a\xe4\xcc\xf3\xb2\x97\x82\xee\x5a\x00\x50\x20\x2a\x53\x1b\x00\x94\x86\xa1\x37\x49\xe2\xb2\xd4\x1e\xd3\xc5\x40\x10\x9a\xa2\x23\xf0\x85\x05\x37\x4e\x94\xcc\x61\xb9\x70\x4f\x3e\xbc\x94\xa8\xdc\x6d\xde\x6e\x5e\xca\x9b\x14\x33\x8d\x72\xed\xa1\xcf\x40\x6d\x23\x38\x0b\x05\x7c\x62\x72\x5c\x26\x31\x03\x10\x71\x19\x5e\x3e\x4d\x2e\xd5\x6c\x53\xbb\xfa\x04\xa5\xee\xdd\xf4\x86\x8a\x11\xa6\x0a\x1e\x9f\x36\x93\x23\x7c\xc1\x3f\x8a\x2e\xe7\x2c\xa2\x4f\xb5\x23\x66\xe5\x8b\x00\x43\xd2\xac\xad\xae\x2a\xbe\x96\xd2\xa2\x4d\x70\xaf\x7d\x5f\xc7\xd7\x33\x05\xef\xeb\x47\x00\x8f\xff\xd8\xcf\xfc\x8e\xff\xe8\x7f\xf7\xdf\xf5\xc7\xfe\xff\x3f\xf9\x87\x7e\xee\xff\xf5\x0f\x7f\xf3\x7f\x8d\xf1\xff\xd6\xcf\xfc\x1f\x7e\xfa\x67\xff\xe4\x5f\xf8\x4f\xfc\x92\xdf\xf4\xef\xfb\xaf\xfe\xda\xff\x6c\xfb\x00\xf0\xc8\x4d\x90\xcb\x42\x94\x36\x5a\x79\xf9\xd8\x49\x9a\xec\x4e\xd4\x6b\x12\x5d\xc3\xb1\x0b\x27\x8b\xfa\xda\xd1\x3f\x8b\x6b\x69\xfb\x17\x46\x5a\xa0\x3c\x0f\x2b\xf5\x79\xa8\x7c\x6a\xdf\x36\x33\xc5\x02\xbe\xc7\xa5\x13\x45\x1c\xc6\x9a\x1d\x1c\xbb\x79\xc9\x50\xc3\x31\x09\x81\x2f\x90\x76\x63\x3a\xaa\xaf\x53\x38\xe3\x60\x36\x02\x71\x28\xec\xa6\xe2\x05\x65\x2c\xb8\x0c\xaf\x77\x78\xf0\xbe\x58\xbe\x07\xa2\x97\x68\xf0\xc9\xf6\x7a\xeb\x18\x32\xe7\xa7\x5d\x61\x14\x19\x87\x1d\xad\x5f\x74\x95\x97\x2d\x29\x82\xf5\xdc\xa1\xaa\x87\xe4\xf7\xf1\xf7\x0c\x01\xdb\x17\x65\x8e\xca\x07\x44\x2f\x2c\x0c\xcf\xe3\x39\x28\xd6\x96\x59\x7b\xf5\xec\xcc\xfe\x9c\x29\x7a\xac\xab\x5b\xa6\x03\xa3\x49\xc6\xc0\xf3\xf9\xa2\xcc\xb9\x1b\x8d\x99\xd0\x47\x93\x1e\xbe\x75\x95\x48\xa9\xe7\x48\x1a\x02\xe5\x36\x62\xe2\x3c\x7a\x65\x6e\x10\xbf\x79\x62\x63\x58\xfe\x44\x33\xf7\x4e\xfa\x22\x3d\x10\x88\xc2\x10\xe0\xf8\x6b\xf1\x6a\xda\xb9\xc7\xb6\xdd\xd4\xe4\x97\x21\x5e\x54\xc3\x1d\x67\x5c\xe1\x1d\x0b\x7e\x31\xe4\x0b\xa6\xf8\x98\x33\xa2\x7b\xf7\xac\xe4\xbe\x8c\xb7\x53\xe7\x23\xf2\x64\x2d\xff\xf0\xe0\x40\xc2\xe8\x6a\xd4\xef\x54\xea\x83\xb6\xfb\x62\x74\x78\xdd\xa2\x63\x36\xaa\xaf\x02\x00\x81\x2d\xb3\x3e\xcd\xef\xf4\x24\xab\xaf\x61\x52\xd0\x1b\xac\x5f\xf5\xcc\x4a\x22\xe0\x43\xb5\x2f\xf8\x47\xa5\x30\x78\x73\x09\x2a\x6f\xff\xea\xed\xc8\x14\xfd\x79\x09\x5b\xb2\x3f\x4f\x87\xb7\x18\x8a\xf4\xd2\x85\xca\x31\xaa\x98\xc1\xb4\x2f\x20\xa8\xd0\x32\x43\x78\x3e\x7e\x58\x7d\xc0\x7c\x82\x31\xed\x50\x20\xe0\x01\xaf\x93\x57\xf6\x89\xf6\xa2\x46\x1c\x20\xd4\x3b\x37\x7d\x3f\x81\xe3\xe4\x7d\x93\x89\x8c\x10\xa0\xe9\xbc\xe6\x76\x30\xc9\x85\xad\x6e\x84\xfa\xc5\xbd\xdf\x9b\xb3\x12\xd7\x09\x1b\x21\xbc\x70\x46\xfe\x45\xd3\xee\x69\x43\x3b\xe7\x14\xd6\x43\xc6\x6e\xae\x89\x11\x09\x3b\xcc\xa7\x83\xe0\xc3\x46\xa9\x53\xb8\x27\x5c\xff\x6a\xc3\xd4\xb3\xe7\x17\xe4\x70\x66\x74\x02\x52\xc7\x2e\xcb\x29\x8a\x9f\xf3\x40\xd2\xee\x86\xdd\xcd\x97\x2d\xf7\x9e\x91\xe5\x1b\x28\x10\x35\xb1\x98\x99\x39\xbe\x7f\x51\xc1\xb5\x3d\x60\x2e\x58\xf8\x9c\x71\x6e\xbe\xc1\x5d\x38\x38\x37\xd4\x8b\xed\xe2\x61\x4f\x57\xde\xfd\xb6\x8a\x66\xf6\xc0\x8c\x54\xe6\x17\xc0\xb9\x13\xa6\x82\xcb\xac\xf5\x12\xa8\x19\x0d\x9d\xc4\x50\x4d\xdd\x33\x2c\x7e\xac\x27\x4a\x8d\x2d\x71\xd3\x7b\x2c\xe5\xbb\xba\xfa\x7e\x51\xc1\x05\x3c\xe7\x40\x8e\x46\x6b\x8d\xc8\x14\x5d\x96\x46\x3e\x13\xcc\xd0\x13\x8f\x6e\x9a\xee\x3b\x6a\x5c\x4f\x2e\xce\xa1\xfb\x85\xe1\x8b\xfe\x62\xd8\xf0\xa0\xf5\x44\xe6\x4c\x82\xb0\xb3\xd0\xf8\x83\xad\x17\x2a\x6d\x24\xf6\x06\xc4\x08\x68\x53\x3c\xfc\x49\x22\x8e\x85\x7a\xfc\xe2\x74\xe2\x2a\x91\xe5\x64\xbd\xe2\x41\xfd\x58\x79\x8c\x38\x8a\x8b\x8a\xed\x50\xd1\x3e\x4e\xb7\xe4\x8f\x23\xbe\x21\xfc\x24\x6b\x29\x9a\x5f\x50\xd4\x89\xc8\x18\x47\xa2\x17\x5b\xa1\xb8\x3b\x85\xb7\x18\xf0\xfe\x40\x43\x8a\xf7\x27\x80\x77\x20\x1c\x68\x48\xac\x83\xd4\xa2\xa8\x9f\x24\x50\xf4\x14\xab\xda\x20\xda\x19\x87\x0b\xa6\x58\xa0\x82\x3d\x2f\x7d\x6f\xb4\x79\x67\xa6\x5d\xdf\x7c\xe9\x35\xdc\xd9\xf6\x62\x36\xe1\x17\x37\x95\x56\x70\x3c\xe3\xdb\x6b\x20\x31\xc0\xd2\x62\x85\x13\xa9\x87\x34\x34\x55\x77\x89\x92\x03\x99\x9f\x34\x46\xfd\xb8\xf8\x86\x78\xbe\xb8\xa9\x64\xf2\xd0\x5a\xf7\x0a\x38\x99\x97\xc6\xa1\x5c\x05\xb5\x57\xc7\xc9\xf3\x86\xec\x69\x74\xad\xa8\xdd\x60\x1f\xc3\x28\x65\xcb\x17\xac\x06\xae\x2a\x6c\x20\xd0\x8c\x23\x3f\xa4\x0b\x15\x04\x84\x5c\x45\x01\x0c\x26\x72\xe7\x7b\x76\x4e\x51\x0b\x6b\x14\x14\xf6\xde\x23\xbe\xf0\x82\x62\x4e\xd0\x16\x2f\xec\x14\x70\x45\xae\x0b\x2f\xde\x10\x9c\x01\x6f\x7d\xe5\x2b\x8d\x53\xa2\xda\x68\xdc\xf6\x60\xd4\xde\xe4\x66\x5f\xdc\x11\x2e\x94\x55\xe2\x2e\xf1\x68\x86\xcf\xd5\xc1\x54\x58\x28\x74\x5b\xd4\x96\x0b\x7f\x37\x37\x10\x19\xf4\x20\xdf\x36\xb6\xc9\x7a\x23\xbf\x70\x12\xe1\x55\x6f\x56\x66\x47\x0b\x8a\xd0\xe7\x88\xc7\xb3\xd9\x9a\xe6\x63\x54\x89\x4a\x2d\x1d\x37\x0d\x2d\xea\xfa\xa2\x12\x08\xec\xf2\x8b\x21\x1f\x82\x2b\x35\xc5\xd1\x99\x65\x83\x2f\x07\x04\x15\x8f\xac\xd2\xcd\x27\x70\xc5\xaa\x8d\x88\x11\xc9\x57\x00\xd7\xf8\xed\xa9\xe3\x5f\xbc\x23\x31\xb0\x32\x58\x7e\xda\xb5\xc4\x4e\x00\xe3\x25\x3d\x02\x63\xf1\x26\xbd\x8e\xa2\x1e\x44\xfd\xe8\xa9\x8f\xd1\xd5\xdb\xd5\xbb\xce\x17\x4a\x04\x06\x05\x68\xb8\x38\xbe\x3c\x98\x6f\x32\x21\xef\x31\x38\x20\xf2\x88\xc5\x83\x4f\x29\x59\x12\xfa\x93\x12\x9a\x1d\xe2\x3b\x0a\xfb\x42\x1a\x49\x58\x33\x4a\x0a\xfc\xae\x76\x0d\x4d\xc8\x73\x67\x0c\x5f\x5c\xbc\x98\x62\x32\x7f\x98\x4c\xc0\x48\xae\xad\xb3\x20\xb0\x8f\x0e\xee\x93\xf8\x82\x81\x58\x23\x09\x1a\x51\xb5\x77\xee\x02\x48\xb7\xa2\xe5\x1e\xe6\xa1\x1f\xaa\xd3\x89\x55\x33\x35\x3c\x7e\x79\x7a\xa4\xf1\x62\xfe\x08\xe0\xf1\x63\xff\xd2\xdf\x8b\xe4\x7f\xf4\x97\xaa\xfe\x89\x3f\xf8\x27\xff\xd3\x7f\xfb\x2f\xfe\x89\xff\x41\xfd\x77\xfe\xea\x5f\xfd\x63\xff\xab\x3f\xf0\x57\x7e\xf3\xef\xfb\xf5\xff\xf1\x9f\xf9\xd9\xbf\xfa\x09\xc3\xc3\x17\x66\xbb\x51\x8b\x6c\x6d\x78\x1b\x01\x0b\xf9\xca\xd2\xcb\x21\x8c\x87\xe9\xe3\xfc\xe1\x3f\xab\xd3\x48\x3c\xee\x9d\xe5\x93\xed\x75\x7c\x88\xd9\x50\x44\xa7\xd7\x3d\xa8\x6c\x35\xd6\xab\x93\xbf\xb2\x52\xd2\x72\x60\x8f\x7e\xf4\x15\x15\xd0\x8a\x47\xb4\x42\xd3\x2f\x36\x73\xdc\x77\x6d\xb6\x14\x49\x0c\x6c\x82\xdc\xbc\x2b\x81\x52\x4a\x06\x6b\xfb\x5c\xbf\x54\xe4\x79\x3b\xa1\xe0\x0b\xf9\x60\xe2\x35\xeb\x0b\xc3\x24\x76\x42\x9e\x81\x66\x7f\x45\x87\xc7\x7b\x3f\x5b\x7a\xd9\xa9\x8b\x62\xb6\x5d\x3f\x04\xd0\x34\x58\x47\xf6\x87\xf6\x2d\xf2\x77\x30\xf6\xc5\xee\x03\x16\x91\xfc\xca\x6c\xe8\x9c\x93\xae\x2c\xbf\x8c\x59\xa9\x90\xf2\xa1\x85\x8a\x3d\x40\x75\x3f\xa8\x3d\xc0\x54\xd4\x5c\x17\x25\x7e\xd1\x0a\x0c\xe2\x9c\x6b\xb5\x96\x75\x1e\x9e\x0f\x68\x05\x01\xbe\x72\xe3\xc1\x81\xd7\x2b\xc9\x4c\xff\xf9\x90\x8e\xfa\x56\xa3\xc5\x0d\xe2\x0b\x5d\x29\xef\x6f\x6a\x67\x31\x11\x31\x93\x23\x1f\xde\x07\x19\x32\x4d\x8b\xd9\xd5\x6e\x81\x60\x89\xca\xd8\x23\x7d\x4e\x7b\x00\xed\xd6\x8d\x2f\xee\x08\x16\x95\x19\x60\x65\xd8\xe9\xa5\x64\x8d\xd9\xd5\x73\x4d\xb8\xcb\x2e\x24\x49\xb5\xb2\x08\xf7\xfa\x2c\xa1\xb9\xc3\x25\xa7\xf0\x27\x01\xd2\x51\xb5\x21\x62\xef\x44\x34\x39\x80\x3f\xcf\x2c\x5c\x9e\x57\x4e\x73\x4d\x4f\xb9\xa3\xf6\x72\x27\x9f\x35\xba\x30\x8c\x62\x3c\xce\x17\x8c\x30\xd6\x4b\xe1\x31\x96\xa8\x1a\xf2\x7b\x74\x17\x90\x57\xb7\x1c\x6b\x16\x7d\xdf\xfd\x66\x69\xa2\x68\xcf\xae\x75\x5b\x37\x6b\x6d\x5f\x7c\x0a\x7e\xa8\x5a\x4b\xee\x9b\x87\xd2\xe5\x21\xb6\x38\x8d\xe4\x20\x14\x17\xa4\x7d\xad\xf5\xc9\x86\xe3\x08\xa0\xb9\xef\xa2\xd8\xc0\xfd\xc9\x78\x8d\x11\xff\xf9\x1c\x0e\x3c\x30\x2e\xa5\x93\x8c\xcd\x0c\x7b\xaf\xa1\xb8\xf3\x18\xe7\x82\xb2\x9c\x9a\x5e\x35\x41\x14\x6b\xaa\xfc\x85\x81\x2b\x0b\x29\x5b\x5a\xe4\x4d\xdc\xb0\x84\xc9\xaa\x8b\x79\xca\xd1\xe1\x82\xaa\x57\x53\xe7\xd9\x52\x65\xdd\x98\x08\x0b\x28\xbe\x6b\x9c\x2f\xaa\xd6\xad\x18\x3e\x8a\x0d\x21\x47\x54\x6d\xbb\xbe\xb4\x6d\x44\x07\xb3\xf1\x20\xeb\xc0\x16\xf7\x21\x8f\x39\x4c\xba\x8d\x00\x00\xd0\x7f\xa1\x43\x57\x75\x41\xdf\xf1\xf2\x7d\x9d\x85\xad\x0c\x88\x2d\xdd\x1c\x77\x43\xd4\xf3\xa4\x48\x09\x81\xc5\x47\xa1\xed\x35\x5c\x8b\x48\xc5\x17\xbb\x52\x0e\x1e\x9a\xd8\x73\x99\x23\x73\x5d\x20\x70\x8b\xe4\xf1\x94\x0c\x04\xc9\x30\x8f\xb2\xf9\x35\xe2\x5a\x1f\xb5\x2c\x6f\x8c\x33\x7f\x72\x53\xaf\xb4\xbe\x1e\x1a\xa9\x9b\x09\x75\x4c\xda\x6d\xb8\x0d\x53\xc3\x25\x22\x49\x0c\x46\x40\x94\xc2\xd1\xd9\x5c\x8f\x19\x52\xe8\xf1\xc5\x1d\xe9\xbe\x8b\x80\x48\x76\xd8\x0a\x4a\x2c\x37\xb3\x87\x63\xb7\x24\x17\xa5\xa0\xbb\x88\x12\x32\x18\x45\x46\xc3\x1a\xf0\xe8\xfb\x7e\x62\x85\xb8\xcf\xc6\x28\xdb\x70\xaf\xcf\x8e\xb6\x74\x07\x7d\x1e\xde\x47\xe0\x4b\x6a\x50\x64\x95\xa9\xa9\x70\x0f\x4d\x7c\x64\xca\x9f\xf4\x89\x7c\x38\xd6\xd8\xf5\x22\x02\xd9\x77\x03\xbc\xba\xac\x22\xbc\xa3\xf0\xd0\x31\x92\x51\x69\xec\x41\x7a\x59\x5a\x2f\x45\x3b\x83\xb3\xdc\x27\x76\xe4\xa8\x87\x60\x81\xf4\x6f\x4c\x70\x95\x8a\x64\xb6\xc8\x66\xff\x48\x26\x98\xdd\x03\x96\x78\xca\x36\xfa\x84\xf6\x0a\x08\x32\x5b\x5f\xb8\x73\xf1\x39\xcf\x25\x85\x74\x78\x44\xca\x08\xf6\xf7\x21\x50\xad\x71\xdd\x8c\xe1\x59\x96\xf9\xc8\x84\xf0\xf8\xb4\x86\x22\x08\x8d\xb8\x2f\xc2\x2e\x39\xa4\x21\xcb\xe2\x8a\x60\x89\x74\x08\xdd\x03\x90\xca\xcf\x2b\x74\xac\x9b\xb2\xaa\x8b\xf7\x41\x0d\x8e\x4d\x50\x4c\xc0\xd3\xe8\x27\x99\x20\x40\xce\xe4\x8f\x7b\xfb\x12\x44\x17\x94\x71\x70\xde\x6d\x22\xdf\x67\xea\xd7\x44\x69\x60\xd4\x2c\xef\x9b\xdf\x7d\xe7\xc6\x0f\x61\x5f\xbc\x23\x91\x0c\x7e\xd1\x63\x6d\x77\xba\x0e\xb0\x22\x31\x0f\x32\x00\xd8\xa4\x08\xb9\xad\x5e\x5c\xac\x59\xd0\x98\x67\xe3\x73\x29\xf4\xe0\x93\x73\x61\x38\x42\x28\x3e\x33\x15\x84\x24\xab\x5a\x5d\x60\x74\x79\x38\x30\xa5\xbf\x15\xc9\x78\xf4\x68\xef\xc1\x59\xed\x95\x5e\x55\xbe\x90\x89\x72\x82\xc1\xc1\x50\x34\x4d\x1e\xb5\xc0\x33\x55\xc6\x33\xd8\x19\x71\x8d\xcd\x7a\xc9\xed\x72\x99\x5b\x6e\xf5\x38\x33\xa5\x29\x5a\xff\xa2\xe3\x3b\x64\x2b\x6f\xf9\x33\x14\x1a\xc7\x2b\x73\x94\xef\xe6\xe1\xcf\x63\x9c\x00\xe2\xe5\x1d\x60\x2b\x26\x02\xaa\x30\x45\xe5\xa2\xe9\x0b\xb0\x98\xcb\x58\x0b\x1d\x6f\x39\x08\xbc\x14\x4a\x2d\xc1\x7e\x1d\x09\x6d\xbf\x10\xce\xf1\x62\x96\xa5\xec\x06\xa2\x65\x28\x27\xd5\x3f\x42\x7e\x71\x3a\x79\x2a\x99\xb5\x9c\x7b\xde\x31\xbe\x0f\x00\x02\x98\xc4\xc2\x0b\x64\x75\x29\x5b\xf8\x0e\x00\xc9\x79\xd4\x34\xa0\xbf\x01\x0d\xf8\xc5\xcb\xce\xc3\x5d\xc5\xe4\x79\x99\x4b\xf0\xad\x83\x0e\xd4\x9e\x45\x9a\xc2\x97\xa5\xfe\x8a\xc9\x47\xdc\x12\x91\x24\x9f\xf0\xb8\x16\xa5\xbb\x5f\xf0\x58\x3d\x00\x12\xe9\xcc\x32\x65\x05\xbd\x8c\x6c\x17\xd6\x5a\x29\x8c\xf6\x6a\x90\x82\xf7\x2f\x39\x55\x1e\xb8\xdf\xb7\xae\x47\x71\xf0\xcf\x9c\xce\x7f\x0a\x78\xfc\xd1\x7f\xf4\x9b\x7f\xe7\xff\xf2\x77\xff\x7f\x7f\xe6\x3f\xf0\xef\xf8\x1f\xfe\xe2\x5f\xf1\x5f\xfe\x15\x67\xfd\x9f\xff\xd5\xff\xdf\x6f\xfa\x45\x7f\xfc\x0f\xb8\x5f\xf6\xe7\x7e\xd3\x2f\xfa\xdf\xfd\x93\xff\xc2\x07\x1e\x1e\xe1\x9e\x33\x1d\x00\xe8\xa4\xd0\xc5\xa8\xc0\x44\xe6\x97\x22\x26\xf4\xf3\xe2\x17\xd2\xf2\x38\x81\x0b\xbb\x14\xc5\x44\x67\x0a\x5f\xe8\x07\x99\x18\xed\x9d\x9b\xac\x5d\xed\xcb\x71\x7f\x93\x29\xd4\x3a\x20\xee\xf1\xd4\x05\x21\x6e\xa2\x77\xb8\x55\x8e\x3b\x11\x69\xf0\x8a\x4f\xc8\xe1\x3f\x54\x5b\x53\x19\x6c\xb7\x69\x3b\x3b\x79\x6a\xf3\x19\xc0\x9c\x56\xf0\x27\x9f\x45\x4c\xdc\xc2\x96\xda\x5c\x3f\x73\x70\x99\x3f\x89\xdc\x54\xd1\xcc\xce\x64\x46\xb3\xf1\x55\x30\x7c\xcb\x7e\x81\xaf\x59\xbc\x8c\x6d\x54\x1d\x6c\x27\xf1\x42\xc6\x79\x2c\x2b\xde\xc4\x70\xbf\x18\xe6\xde\x67\x2e\x28\x99\x82\x97\xa4\x22\x05\x3d\x6b\xa7\x6a\x36\x7f\x06\xaf\x5a\xb0\xa7\xba\x2d\x95\x2a\x2e\x69\x32\xf2\xb2\xcf\x60\x5f\x94\x7c\x5a\xb9\x15\x22\x1c\x4c\xda\x50\x76\x35\x41\x22\xbf\x9e\x08\x69\xc8\x7c\xe0\x36\x7b\xf9\xd5\xe4\x71\x8a\x1c\x6a\x9b\x83\x45\x7c\x82\xa8\x36\x02\x9b\xd9\x5e\x8d\xcc\xd0\xf2\x9d\x25\x12\xc5\x09\xef\xd2\x93\xe1\xcc\x68\xb3\x70\x4a\xe1\x97\x43\x1c\xc1\x21\x5d\x0a\x5f\x68\xe6\x22\xb6\x7e\xec\xe9\xd5\x32\x07\x87\x4d\x1b\x62\x09\x5a\x64\xae\x72\x07\x32\xc6\x29\x60\x35\xbb\x40\xdc\x7a\xb8\xe9\x19\x00\xf1\xc5\xb9\x70\xcf\xf4\x36\xe3\x75\x31\x01\x6c\xef\xd6\xba\x19\xdd\xc7\xd2\x7a\xda\x5a\x6f\x65\xcc\xd1\x41\x33\x29\x92\x4a\x17\x87\xe7\x80\x0f\x3c\xfe\x39\x0b\x6b\xe4\x18\x73\x7f\x26\xeb\xbb\xc5\x6e\xb3\x92\x33\x10\xe3\x86\x73\x96\x54\xb6\x1a\x9b\xc9\xaf\xb6\x61\x7e\xa1\xc1\xaa\x7f\x31\x52\xc2\x14\x59\x4a\x32\xa4\xe8\xdd\xf3\xaa\xac\xcb\x33\xd7\xe6\x95\x63\xcd\x2b\x5a\xb2\xbd\x83\xc5\x59\xc6\x2e\x11\x32\xf9\xaa\xf5\x85\x74\x81\x41\x1a\x8a\xb0\x93\x48\x5e\x93\x39\x55\x2f\xb6\x96\x86\xeb\x79\x25\xd0\x06\x20\x6d\xd2\xf2\x0a\xed\x80\x2d\x8f\xaf\xc0\x97\xb2\x2f\x2c\xac\xd2\xea\x9a\xc5\xee\x25\xaa\xf7\xd5\xb6\xf8\xf7\xe0\x07\x37\x7a\x16\x0c\x00\x7b\xc5\x26\x8e\x92\x05\xef\xf0\xc8\x87\xfa\x25\x3f\x61\x0a\xee\xdb\x7e\xe8\x47\xd6\x03\x0e\x32\xc6\x9c\x36\x9d\xd3\x1e\xc2\x3c\x6c\xf1\x85\xb7\x1b\xc9\x2d\x42\xd5\x40\xd0\xfb\x9a\x76\xdb\x27\x61\x97\x2b\x40\xc8\xdb\x8e\x8b\x34\x5c\xc7\x6b\x01\x7f\xa3\x7e\xce\x33\x5f\xdc\x79\x0b\x2f\xcc\xe4\xa6\x5b\x28\x47\xfd\x94\xee\x29\xfb\x24\xa2\xb7\xb9\x1e\x81\xa6\x80\x3d\xc9\x5b\x55\x45\xb8\xb5\x8c\x3c\x82\xa4\x5b\x64\x77\xb5\x03\xe7\x2d\x4f\x1b\xd3\x07\xf4\x3e\x39\x4e\xf7\xc5\x30\xa7\x91\x88\x5a\x21\x88\x7b\xb2\xc5\x3f\x62\xae\x54\xbc\x65\x8d\x5a\x6f\xdc\xeb\x24\x2e\x76\x4a\xe2\x8b\x9b\xae\xaa\x37\xe2\x23\x3f\x81\x26\xcb\xc2\x39\x32\xee\xaa\x3b\x40\x25\xb6\xbc\x22\xae\x3c\x40\xb6\x95\xeb\x44\xfd\x3c\x3e\x03\x97\x95\x03\x0c\xc0\x80\x20\xf9\x22\x07\x83\x1f\x23\x4e\xaf\xae\x51\xbf\x4a\x28\x7c\x11\x39\x9e\x14\x7c\x20\xfa\xd9\x92\x9c\x38\x6b\x4f\x23\xbf\x48\xd1\xb9\xe7\x09\x9c\x86\x2f\x9a\xf6\x7c\xa2\x8f\x7e\xd5\xc3\xb4\x78\xe1\xae\xaa\xf3\xe3\xea\x88\x7d\x74\x79\xe7\x6c\x67\x46\x4b\x3b\xf7\xd0\xbe\xb6\x64\x6b\x04\xfc\x42\x34\x30\x88\x74\x5e\xd0\xad\xa0\x7c\xfc\x65\xb9\x5c\xef\x58\xe6\x86\xbb\x29\x2e\x74\x46\x24\x62\x78\x64\x16\x1c\xb6\x14\x85\x79\x7c\xe2\xaa\xa2\xd3\xa9\x58\x74\x49\xe3\x22\xd3\x47\x15\x95\xc2\x48\x02\x3f\x05\xb3\x91\x8f\xfa\x18\xb6\xf4\xa9\x38\x3e\x50\x3f\x4e\x0c\x20\xbf\x20\x87\xa7\xbd\x31\x46\x9d\x0e\x24\xc9\x42\xba\x3b\x89\x65\x45\xda\x6a\x8b\x3c\x9f\x91\xb0\x2d\x5a\xb5\xcf\x6b\xc6\xd9\xfa\x7d\x40\xea\x5f\x9c\x0b\x9a\xda\xb0\x64\x41\xc6\x16\xdf\xce\x50\x74\x7a\x3d\xf4\x65\x98\x16\xa3\x5a\x62\x88\xb3\xec\x70\xc9\x4c\xbe\x08\xdf\xb6\xe2\xf9\x62\x12\x90\x99\x8c\x8d\x63\x83\x8e\xa9\x58\x51\x3b\x1b\xbd\x20\x99\x1f\x1a\x0f\x3e\x62\x01\x05\xa8\x12\x07\x51\x11\xf6\xba\x80\xf3\xea\x0b\xd6\x24\xdb\x13\x80\xa8\x97\xd6\x84\xc6\xdc\xe4\x64\xd5\xf7\x25\x9c\xdf\x23\x26\x32\x9e\x87\x98\x7b\x03\xe1\x89\x64\xad\x0d\x87\x4f\x6a\x5f\xc8\x87\xef\xb5\x33\x6e\x32\x66\xe5\xaf\x48\xd0\x93\xe0\xf7\xf5\x5a\x83\x19\xc4\x6b\xe5\x6a\x76\x35\x5c\x2a\x72\x0e\x83\x5e\xdc\x33\x3f\x91\x71\x54\xb2\x0a\x96\xf4\xc2\xd4\x25\xc8\x69\x78\x93\x48\xc0\x5c\x06\x7c\xcf\x6a\x18\x43\x9b\x8e\x05\xe5\x90\x37\x05\x0b\xcc\xeb\xe0\x17\x7c\x82\xa3\xa2\xc1\xb4\x6e\x77\x60\xd4\x3a\xea\xc0\xf6\x23\xab\x7c\x0f\x31\x34\x5e\x23\x44\x6b\xd7\x67\x56\xdb\xbd\x6f\xe4\x8b\xf7\x4f\x0c\x9f\xe9\xbe\x81\xae\x66\xdf\xbe\xac\xe9\x8b\x76\xf5\x2a\xa7\x9f\x7b\x5e\xc8\x77\x28\x4a\x66\x80\xb9\x62\x36\x63\x71\x09\x80\x89\x9c\x2f\xb8\xde\xee\x46\x2e\xe4\x65\xf8\x50\x05\x29\xdb\x58\x4e\x28\x6d\x69\xf2\xed\x00\xa7\x18\xf6\x03\xd0\x29\x82\x3e\x8c\x98\xe9\x9a\x55\xf0\x0b\x41\x37\xf6\x92\x4e\x8c\xec\x7d\x48\xee\xd6\x56\x35\x1f\x7a\xf4\xba\xf8\xd5\x7a\x6a\x5c\xde\x68\xf7\xa3\xad\xdc\x72\x13\xaf\xcd\xb9\xfd\x47\x53\x5a\xf2\x4f\xfe\xd1\xdf\xfa\x6b\xff\xa7\xff\x72\xfc\x3b\xff\xef\xbf\xfb\x5b\xfe\xf1\xaf\xf9\x05\xe5\xa7\x7e\xc9\x6f\xf9\xb5\x7f\xe4\x0f\xff\x7b\x7f\xcf\x5f\xf9\xab\xff\xe1\xff\xdb\x7f\xe4\x1f\xfe\xec\x2f\xff\x80\xe1\xb1\x58\x36\x8d\x0b\xb9\xde\x27\xab\x2a\xb3\xf3\x6d\x28\x51\x7b\x2a\xfc\x45\xcc\x81\xf9\x5c\xb6\x14\x87\x0f\xb3\xf5\x65\x6c\xd2\xfe\x89\x68\xa0\xd9\x38\x75\x65\x7c\xdf\xed\xec\x23\x85\xa8\x54\x6e\x16\x60\x71\x6f\x85\x8d\xf2\xf8\x8c\xc9\x9a\xd9\x4f\x78\xde\x21\x5e\x73\xbf\x38\x48\x10\x59\x5b\x13\xa1\xfc\x8a\xa6\x07\x84\x39\x9e\xbc\xfa\xee\x90\xe4\x47\x4f\x45\x2e\x5f\xc5\x17\x81\x60\x9d\x2f\xb9\x51\xd5\xfe\xc5\xa7\x38\x89\x37\xe8\x47\x66\xa1\x6d\x3e\x6e\x57\x5b\x37\x0b\xbd\x23\x13\x0a\x50\x2c\x7a\x62\x7c\x96\x69\x47\xd4\x05\x97\x7a\x9f\x14\xbe\x60\x35\xd8\x35\x5e\xca\x2a\x1a\xa9\x5a\xd0\x5c\xc4\x23\xd7\xe0\xf0\x83\x39\x5f\xd5\x84\x4d\x2a\x19\xe8\xca\x42\x93\x0b\xeb\xd5\x0d\x7c\x82\x2e\x7b\x17\xb9\x7c\xa8\x0a\xc8\x6e\x23\x41\x43\xdc\xe3\x5a\x23\x85\xc7\x99\xf4\xd8\x3e\x38\x18\x19\xf3\x59\x8e\x67\xfd\xdd\x2c\xb4\x2f\x8a\x6d\x21\x01\x6a\x31\xe1\x94\x13\xa2\xad\xe6\x69\xf9\x7a\x1f\xf8\xf1\xdc\x30\xf2\x8a\xc0\xef\x3d\xcb\x89\xaa\x1a\x7d\x8f\xbf\x5d\x7e\x21\xb8\x8a\x4c\xf9\xc6\xde\xa8\xde\xac\x3a\x18\xcf\xdb\xca\x66\xed\xaa\x89\xa6\xc4\xd1\xb5\x2d\xa3\x95\x9c\x32\xc4\x3b\xb4\x44\x70\xec\x3e\x71\xd7\x0f\x45\xbc\x05\x59\xbd\x2e\x9a\x50\x12\x3e\x32\xc7\xba\x65\xa6\xa8\x2c\xc3\xcf\x55\x00\x21\x0c\x3b\xc5\xe2\xaa\x9b\x48\xed\x3f\xf1\xb5\x17\x14\x26\xbe\x32\x99\xe4\xa8\x73\xfa\xd6\x90\x9f\x85\xe6\x90\xe2\x49\xf2\x25\x0f\x82\x03\xad\xcc\x16\xd7\xc7\xa3\xbe\xcf\x27\xd9\xf0\x20\x07\x00\x85\xc7\x7c\xe8\xfc\xb8\xc1\xc0\x2a\xf5\x00\x57\xe9\xad\x17\xf3\x9b\x2b\xc9\xf1\x46\x88\x26\x23\x70\xd4\x52\x02\xf8\x62\x57\x0a\x7b\x99\x3c\x80\x01\x76\x21\x55\xdf\xce\x50\x48\xec\x29\x88\xf6\x71\x8d\xf4\x4f\x1e\x4d\x58\x65\xf8\x8b\xcd\x7b\x23\x5e\xcc\x7d\xb1\x43\x6f\xeb\xac\x45\x08\x3e\x7a\xf8\x07\xeb\x12\xf5\xed\x29\xde\x1c\x37\x14\xcc\xb6\x76\x74\x94\x92\x92\x55\x51\xf0\x29\x36\xc5\xbf\x78\x47\x98\x31\x16\xfb\x78\xef\x26\x0a\x98\x5b\x87\x14\xa8\x6a\x3b\x89\xe1\x6b\x21\xe7\x3a\xe7\x23\xcb\x4d\x1a\x1e\x22\xaa\xe7\x88\xf4\xc5\x18\xc5\x2c\x35\x0c\x42\xe4\xa4\x65\xf4\x1c\xc4\x02\x20\x66\x76\x08\x5d\x45\xa5\x0f\x73\x5d\xcf\xcc\x76\x72\x10\xdc\xf7\x69\xa6\xad\x2f\xd2\xfa\x39\xb2\xcd\xbe\x91\xed\xc5\x6f\x1b\xd1\xa7\x4d\x22\x35\xc7\x09\xdd\x6f\x74\xd6\x35\x7d\xc9\x9b\x2d\x49\x47\xf2\x80\xaf\x51\xe2\x0b\x7f\x02\xee\x9f\x3d\x5a\x7b\x98\x3c\xb8\xd0\xc8\x67\x23\xfd\x46\x42\x4a\x21\x85\x51\x5f\xdf\xde\xe1\x05\x95\xbd\xb0\x52\xc6\x9d\x9b\xfc\x8b\xd3\xc9\x33\x44\xaf\x5e\x0c\x0c\x30\x48\xe1\x74\xe1\xd7\x9f\x17\xa0\xb2\x35\x16\xa4\x77\x49\x45\x26\xd3\xf2\x11\xb0\x7b\x13\x2b\x94\x8c\x4f\xe0\xb8\xdc\x47\x5d\x34\xdd\xd1\x5f\x08\x6e\x8d\x81\xc4\x21\x8b\xe2\xcf\x6b\x8a\xc2\xa5\x45\xb4\x13\xb7\x06\x2b\xa8\x33\x32\x7b\x7d\xd1\xe5\x70\x9f\x88\xf0\x5a\x8a\x9b\xa2\x62\x39\x8f\x03\x36\x2f\x8f\x9d\x62\x2f\x7e\xc4\xd4\x55\xce\xd2\xb9\xdc\x9a\x4e\xd1\xe7\x4e\xe3\x23\x20\xcc\x00\x4a\x3a\xea\x94\x88\x12\x9c\xee\x33\xd6\xf3\x74\x6e\x97\x0c\x98\xbc\xb7\xd1\x1d\x8c\x1a\xf8\xb9\xef\xab\x45\x6a\xc7\x7d\xd1\x5f\x58\x39\x13\x49\x7b\x7b\xd7\x6b\x77\x79\x99\xa8\x88\xf0\x0e\xc1\x4c\x98\x81\x5a\x16\xff\xc4\x57\xd4\x24\xb0\x91\x40\x9d\x3d\xdd\x17\xbb\xd2\x38\xba\x6e\x45\x8c\xac\x66\x2b\x37\x41\x57\x77\xd3\xf4\xa9\xfa\xe4\x57\x17\x23\xad\x85\x0e\x9c\x23\xb9\x99\xd6\x15\xf2\x88\xfb\xc5\x00\x23\x42\x02\x7a\xaf\x7c\xda\x8b\x27\xd9\x89\xe4\xc7\x23\x6b\xa8\x04\x05\xd4\x7c\x76\x84\xb9\xa4\x94\x35\x95\x87\x70\x6b\x47\xf8\x44\xf6\x55\x68\xf0\x50\x78\xe6\x8a\xa8\x66\x58\xdc\x8a\xd0\x54\x17\xbe\xe7\xe6\x36\x28\x52\xa6\x94\xf2\xed\x63\xad\xc8\x21\xaa\x69\xf9\x2f\xc0\xe2\xf5\x5e\x2c\x5a\x11\xa4\x8f\x71\xcc\x0a\xc0\xd1\xed\x32\x43\xf3\x2d\x38\x75\x97\xdb\x7a\x0a\x05\xe9\x94\xf5\xe4\x12\x22\xe3\x9f\xb0\x69\xd3\xdb\x54\x78\xd0\xd5\xd7\x04\x41\xd4\x81\x65\xd7\x3a\x62\x9f\x2e\xdc\x74\x62\x2d\xf3\x45\x38\x9d\x8a\x77\x9e\xa9\x6d\x09\xbf\x10\x31\x33\x1a\xde\x03\x27\x9e\x2f\x89\x16\x48\x64\x95\x97\x53\x97\x91\x8c\x13\xe0\xdd\xb6\x88\x13\x29\xe8\x44\xa8\x71\x56\xc1\x28\x47\xff\x05\x64\x6d\xe8\x9e\xaf\x0b\xcc\xf1\xf1\x6c\xc3\xb5\xa3\x9b\xc7\x68\x40\x30\x66\xa8\x38\xcd\x42\x33\x54\xc6\x9c\x38\x62\x95\xe7\xc0\x14\xbe\x58\xb4\xc9\xfe\xc3\x37\x90\xc0\x35\xdb\xd3\x78\xaa\x77\xc4\x26\x30\x05\x94\x35\x8c\xa9\xe8\x69\xc2\x97\x0d\xc6\xd6\x89\x65\x01\x59\xff\x62\xd1\xc6\x99\x29\x0f\x2f\x6c\xe3\x64\xb4\x30\xf2\x00\x05\x65\x88\x6b\x9a\x0b\xec\xfa\xa1\x31\x16\x34\xd0\x3c\x6b\xac\x19\x53\x48\x17\xbd\x5f\xf4\x9d\x03\x84\xb0\x50\x94\x40\xba\x6e\xa7\x02\x20\x6e\xc0\x48\xc3\xc7\x08\x1e\xf4\x1b\xde\x35\x38\xb6\xab\x1e\x88\x1f\x06\x4f\x24\xe7\xf9\x11\xc0\xe3\xd7\xc9\x7f\xf0\x67\x7e\xfc\xb7\xfe\xe5\x7f\xe3\x1f\xff\xcf\xfe\xdc\xdf\x10\x7f\x58\xfe\xae\x3f\xf3\x4f\xfe\xaf\xbf\xea\xd7\xfd\xe4\xfb\xdc\x7f\xf3\x6f\xfd\xef\x7f\xc1\x1f\xfb\x1d\xbf\xfd\x03\x86\x07\x60\xc6\x19\x62\xcc\xf6\x95\x4e\x49\xce\xe0\x12\x0e\x0d\xe3\xd6\xd5\x8a\x08\x83\xbd\xd7\x3f\xfd\xe9\x0d\x99\x3e\xc0\xd5\x94\x7f\x31\x52\xe2\xcb\x37\x13\x34\x89\xf6\x14\x7c\xbd\x1b\x2f\x74\xf5\x6c\x1f\x68\x27\x22\x35\x6a\x49\x4d\xfb\x87\xb1\x93\x20\xf1\x2c\xda\xdb\xfc\x02\x5d\xbe\xc6\xb9\x65\x61\xbf\xa8\xc5\x0e\x2c\x47\xba\x4c\x38\x59\x6c\x2f\xc2\xeb\x2a\xbf\xde\x80\x14\xa1\xa9\x2a\x3b\xa6\x2c\x8f\x04\x5f\xf0\x09\xb2\x7f\x82\xe4\x33\x06\x69\xb9\xc5\xce\xa3\x0d\x83\x3d\x32\x13\xda\x41\xf7\x1e\xa3\x32\x0a\xcf\x29\xf9\x53\xec\x40\x20\x9e\xf8\x09\xae\xeb\x02\x3d\x4e\xed\x05\x89\xce\x5a\xee\xec\xf8\xdb\x20\xf2\x3a\x60\x3d\xd9\xa3\xa5\xb4\x8d\xa9\xee\xc8\x65\x79\x53\x7d\xd5\x17\x0d\x09\x63\x75\x24\x20\xd3\x93\xde\x0e\x75\xa5\x3c\x8d\xdc\x8a\x6a\x68\xe6\x67\x47\xf7\x54\x71\xa8\x55\x07\x53\x4d\x67\x5f\xa9\xd3\xf5\x05\xe7\x86\xa7\x08\x64\xe3\xe2\xee\x50\x45\x5a\x7c\x56\xbf\x09\xf6\x31\x9b\xec\xf0\xb3\x80\x05\x4e\x5b\x55\xa0\xa5\x64\x25\xd7\x8b\x9a\xe0\x13\x3a\x1d\xed\x8c\xb9\xf6\x70\xac\x49\x7a\xbc\x8f\xa1\xd6\xeb\x0c\x9c\xeb\x44\xc0\x21\x84\x33\xd4\x2c\x07\x5e\x52\x27\x21\x4a\x99\xe3\x8b\x5f\xa4\x3d\x7a\xd4\xd2\x52\xba\xef\x90\xae\x59\x3d\xaf\x19\x72\x85\x22\x4c\x2c\x0e\xda\xa6\x4b\xda\xd6\x28\x5f\x0b\xe5\xdc\x14\xf2\x45\xf6\x03\x97\x45\xa5\xfe\xee\xc8\x25\x22\xbb\x15\x51\x94\x47\x10\x8f\x80\x90\x0a\x37\x80\xfa\xd6\xc8\x12\xd0\x35\xab\x4e\xe3\xe5\xb9\x7e\x11\xdd\xcc\x9c\x9e\xf7\xf1\x40\xb2\xa4\xd2\x94\xcd\xde\xbe\x9a\x30\xa1\x8f\x3d\x8e\x05\x1d\x75\xe5\x47\x0c\x44\x43\x69\x8c\x79\x3b\x81\xe3\x8b\x73\xb1\x70\x99\x9e\x96\xb9\xe3\x9a\x38\xd4\x42\x74\xc6\x18\x3c\xfc\x94\x9d\xf7\x3b\x10\x98\x85\x0e\xc5\x46\xdb\xf0\xa5\xdc\x10\x2d\xbf\x18\xe6\x20\xde\xd8\x03\x70\xa6\x90\x35\xbe\xe5\x1a\x4c\x9e\x8e\x9d\x14\x72\x53\x37\xc9\x38\xe0\x34\xaa\xb7\xd4\xcc\x1f\xdb\x8a\xea\x9f\x04\xb6\x29\xc4\xb2\x79\xb7\xbe\x09\x94\x10\x95\x59\x1d\xee\x86\xec\xc8\x82\xdf\x07\x27\x6b\x87\x9a\xdb\x50\x69\x43\x0e\xec\xd5\x1d\x9e\x2f\x2a\xb8\x7f\xee\x7b\x0b\x80\xbd\x53\xad\x7d\x7e\x2f\xab\x4a\x12\xa0\x34\x87\xa7\xae\xa7\x39\xae\xb9\x87\x59\xee\xab\xde\xaa\x8e\x27\xfe\x8b\xc1\x56\xa6\xe1\x7a\xab\x48\xd7\xf7\x6d\xa0\xeb\x0c\xc9\xc3\xd7\xbd\x90\x0b\x65\xf5\x6d\x8b\x55\x9b\x83\xf6\x94\x56\x11\xd4\x5a\xf3\x0b\x8e\x1e\x83\x30\x4b\x57\x26\x77\xb9\x6e\x22\x1f\xd7\x65\xe4\x75\x3a\x48\xe7\xb8\x31\x1e\xd9\xa4\x3a\x6a\x4a\x9f\xcd\xb8\xad\x25\xe7\x3e\xe1\x13\x98\x5c\x9f\x5b\x45\x1b\x1c\x2d\xa8\xf2\x51\xfa\x58\xfc\x34\x2f\xed\xcb\xf5\xc3\x77\x0a\xac\x85\xb2\x97\x01\x52\x44\xe3\x9a\x71\x5f\xe8\xd0\x7b\x8d\x0c\xcd\xb5\xb7\x26\x48\xeb\x41\x9d\x49\x7c\x18\xdc\x07\x8d\x7d\xd4\x75\x93\x39\x87\x65\xb2\x96\x08\xee\x0e\x76\x6a\xf8\xc2\x85\x69\x36\xeb\xe8\x9c\xd7\x9c\x86\xaf\xb8\x42\x8a\x97\xb6\xe7\x1a\xd3\xdb\x14\x3e\xe5\xcb\xe4\x8d\xf9\xc2\xca\x9f\x49\xc3\xfc\x28\xf6\xfe\xb6\xc8\x4f\x39\x94\x4a\xf2\xcc\x17\xe8\x98\x30\x72\xa1\x76\x38\x7e\x68\x7b\x2a\xd4\xe4\x8a\xf7\xae\x5c\x37\x34\x3a\xa2\xa9\xc3\x07\x32\x51\x2e\x2c\xf3\x76\xd2\xb7\x8b\xe7\xc6\xa4\x56\x3f\x10\x46\xa6\xf1\x22\x94\x84\xe2\x13\x99\x01\xbe\x8f\xb5\x1d\x3a\x82\x80\xa0\x08\x7e\xb1\xc9\x07\xf0\x3e\xd0\xf2\xe8\xb3\x8a\xfc\x16\x88\x40\x92\xc4\x74\x7e\x90\x70\x75\x84\xec\xf8\x7a\x8e\x64\xbb\xc7\xe0\x67\x0a\xe1\xfd\x84\x67\x32\x72\x58\x4b\x71\xc2\xd0\x1e\x29\xc1\xb1\xe1\x6a\xca\xd0\x22\x72\x75\x2e\xd9\x90\x0c\xf0\x19\x66\x0a\xe3\xda\xb2\x11\x2d\xce\x07\x23\x25\xf3\x1c\x2f\xbc\xb8\x96\xca\x0a\x6d\x92\x40\x67\x21\xcd\xf5\xb9\xdc\x10\x04\xfd\xb3\xec\xd1\xc1\xd7\xfd\x8c\x57\xba\xa6\xda\xf9\x84\xed\x12\x7a\x97\x49\x04\x6d\x0c\x37\x98\x13\xf1\xa2\xd3\xde\x1c\xc0\xa2\x4e\xb2\x3e\xe9\x63\xe5\xf5\xda\x8f\xb5\x5e\x50\x6d\x8e\xb0\x7f\xc0\x27\xe0\x07\x60\x21\x91\xc2\xba\x56\x76\xa1\x39\xc4\x72\x23\xb3\x98\x6f\xbc\x6c\x5c\xa5\x1e\xbe\xe6\x03\xbc\xb1\x4f\x61\x3b\x56\x94\x3e\xb9\x23\x88\x61\x2d\x09\xbc\x9b\x84\xeb\x27\x6a\x73\xd7\xf9\xac\x18\xa6\x7f\xcf\xdb\xb4\x6c\xc5\x93\x53\xc7\x62\xc8\xe1\x9c\xc7\xe0\xfe\x0b\x03\xd7\xa6\xfc\x1d\xef\xa0\x7c\x40\x5c\x6a\xe8\x1c\xbb\x3a\x19\x89\x92\xa3\xea\x05\x24\xdb\xbc\x69\x6d\xbe\x8e\x44\xe9\x99\x4c\xed\x4f\xb2\x62\x68\x3b\x49\x96\x6e\x31\xea\x5c\x13\x71\x87\x43\x00\xde\xd4\xec\xc2\x4f\x9b\x17\xf9\xc0\x53\x7e\x4a\xf5\x1d\xe3\x86\x74\xa6\xf7\x8b\xd3\xd9\x5e\x47\x58\xa4\xdb\xc2\x17\x12\xab\xc2\x64\x10\x4e\x68\xe4\x5b\xc0\x4e\x92\xda\x6e\x26\x92\x0a\x76\x1f\xc5\xbb\xd4\x70\xe8\x13\xfe\x91\xf6\x0d\x5c\xe5\xa0\xee\x75\x0c\xc5\x60\xbd\x69\x2e\x0f\xcc\xa0\x9d\xbb\x7a\x8d\x07\xcf\x9b\xb4\x6b\x6b\x26\xad\x60\x45\xf8\x9f\xa9\x9d\xff\x14\xf0\xf8\xab\xff\x97\xff\xd0\x5f\xfa\x6d\xff\xda\xdf\xf9\x25\x7f\xf3\xb7\xfc\xca\x7f\xfd\xc7\x7f\xea\x3f\xd9\xff\xf4\x6f\xfc\xcb\xff\xf9\xdf\xfb\x3f\xfe\xf3\x7f\xfc\xff\xf9\x67\xff\xb7\x3f\xfd\x1b\xfe\x2c\xfc\x9f\x7f\x00\x78\x30\xdf\x8f\x22\xcf\x62\x75\xcb\xd0\x0a\x40\x60\x07\x07\xb2\x7f\x9e\x7b\xa5\xf2\xa7\xf7\x87\x04\x9c\x4e\x53\xcf\x3c\xd3\x4c\xfc\xc9\x4f\x48\x22\x7d\xd9\x92\x0a\x66\xaa\x83\x8d\x44\x63\xee\xa2\x2c\xa7\x6e\xac\x55\x65\x78\x17\x6e\x62\x41\x64\x29\x53\x2f\x62\x06\xb7\x2f\xb6\x94\x04\x40\xd8\x03\x5a\x29\x6c\x0e\xbc\x4d\x2b\x1b\xbf\x5c\xee\xab\x6b\x1a\xd9\x7d\x62\xc6\xd8\x0c\x84\xdf\xc6\x2e\xa7\x82\x1f\xf9\xc5\x78\x0d\xf2\xb6\x53\x29\xf6\x54\xa2\xa9\x78\x79\x7f\xd0\x39\xc1\x58\xef\x9c\xaf\x0d\x9a\xb4\x26\x60\x36\x82\x08\x28\xdb\x94\xb7\xf5\x49\x2a\x7b\xd6\x51\x01\x5b\xf7\x5c\x25\x01\x1d\x83\x34\x30\x3e\x0d\xb5\xfc\xe6\x94\x23\x69\xa7\x74\xe5\xd1\x52\x41\x4d\x9c\x45\x6c\xe2\x8b\xf0\x3a\x76\x65\x0b\xfc\x19\x06\xbd\x87\x52\x50\x60\x9a\xc7\x3c\xe5\xe7\x23\xe2\xdf\x3a\x97\x49\xa8\xba\x5d\x6a\xd8\xdd\xea\xa3\xc1\x01\xec\x0b\xe9\x42\x27\x42\x5f\xd4\xf5\x89\x4a\x0e\xad\x87\xcc\xdd\x11\x80\x20\x5a\x32\xec\x51\x7c\xec\x13\x1e\xd7\x6d\x14\xdb\xee\x06\x53\xf3\x5f\x6c\x29\x8d\x5a\xe1\x7d\xdb\x92\x27\xc1\x15\xf4\xcd\xf5\x46\xbe\xcd\x1d\x8c\x26\xb0\x71\xb5\xb2\xd6\xd7\xce\x41\xa5\x35\xb2\x76\x6c\xe1\x17\x3a\x74\x47\x71\x1e\x30\xf2\xd7\x78\xec\x76\xc4\x7b\x99\xd4\x59\x56\xc6\x2a\x51\x67\x1e\x70\xee\x71\x14\x86\x4f\xb7\x43\x29\x8e\xbe\x69\x8b\xa8\x86\xe7\x21\x25\xac\xa6\xe0\xe3\xdf\x5a\x15\x0d\xfb\x69\x61\x0e\x91\x27\x27\xfe\x1e\x4e\x9a\x5f\xbe\x12\x75\x55\xb0\x60\x7d\xa1\x43\xe7\xcc\xb3\x78\x5e\x97\xce\x01\xe2\xbd\x00\x3e\x5e\xe8\x71\xa2\xee\xf5\xbe\x39\xd9\x38\x1e\x2b\x84\x0e\x88\xe4\xe4\x93\x7a\x88\x72\x5f\x80\x3f\x10\xda\x16\x50\x12\xd1\x25\x05\x8c\x18\x2c\x65\x79\x05\x69\x4b\x07\x7c\x53\x2a\x9a\x2a\x6b\x59\x1b\x9e\x0f\xe7\x1a\xb8\x97\x7d\xd1\x90\x58\xa7\x06\x63\x40\x4a\x33\x1e\x8a\xe7\x2e\xab\x5b\xd9\x8f\x7d\x44\x9f\xcf\x4e\x6a\x70\x85\xde\x31\xa6\x7c\xc2\x61\x47\xd5\x74\x3e\x49\x32\xaa\xcb\x17\x42\x95\x59\x15\xdb\x9a\xa4\x5c\x92\x8d\x1a\x1c\x5f\x5d\xe5\xe7\xcd\xfd\x48\x7b\xc3\x62\xbb\x26\xbc\xd8\x7b\xed\xf9\x22\x5b\x8a\xad\x31\x7a\x37\x5e\x88\xad\xe5\x73\x77\x27\xc8\x13\xe6\xeb\xb4\x1a\x58\xa5\x45\x58\x88\xf0\xf7\x95\x6a\x3e\xea\xd8\xd9\xfd\x27\x50\x03\xc1\x7a\xe8\x99\x47\xd0\xc4\xbf\x93\x58\x44\x0f\xdd\x3e\x02\xc3\x0e\xa6\x61\x43\xb7\x81\x61\x1d\x35\x5b\xc2\xf3\x54\xf9\x46\xfe\x85\x10\xaf\x59\x8d\x3d\xcc\xcf\x36\xf6\x09\x93\xeb\x5c\x74\x8e\xa9\x3b\x64\x91\xd7\xe3\x64\xb4\x29\x85\xa2\x3e\x60\xfa\x6c\x06\xcf\xf6\x0b\x4b\x5d\x4e\x04\xf7\xa2\x29\xa2\x70\xf7\x7d\x87\x93\x28\x50\xcb\x44\x5e\x60\xdd\xb6\x20\x79\x78\x04\x26\x0b\xa0\x6e\x30\x72\xfb\x28\x3e\x01\x05\xa5\xda\xd2\x4f\x44\xf6\xbb\x61\x3d\x34\x57\x5c\x57\xb6\x8c\x44\xf5\x1e\xf9\x18\xe4\x2e\x22\xb9\x74\xcd\xdf\x0e\x90\x53\xca\xf0\x2f\x18\xa4\x1d\x04\x85\x16\x43\x9a\xc4\xf2\x82\x90\x1b\x3d\xce\xa8\xf2\x92\x07\x57\x32\x6c\x9c\xb8\x76\xac\xa8\xc0\xd3\x43\xc2\xcf\xaa\xe2\x13\x81\xe6\xf1\x6d\xa2\xc8\xdf\x21\xba\x37\x3f\x9f\x61\xc5\x5c\x0a\xbc\x4c\xe7\xc0\x53\x66\x2d\x98\x67\x3f\x5d\x86\x60\xf0\x60\xd1\x18\x5f\x6c\xf2\x2d\x59\x65\x71\xe5\x8b\x08\xa1\xb2\x8e\x22\x53\x53\xbc\xb6\x3c\x30\x66\xa4\x30\x7f\xdf\xc2\x1a\x84\x2a\xdd\xfd\x00\x22\x72\x85\x5f\x2c\x97\x38\x2c\x54\xd2\x68\x5e\xf7\x43\x07\x43\xc6\x9b\xcf\x2b\xe0\xdd\x39\x9f\xf7\x66\x7e\x65\x30\xb5\x3c\x27\x41\x87\x71\xd0\x88\x9b\xf6\x45\x2c\xad\x55\x4a\x62\x61\xd4\xdb\x60\x28\x4d\x32\xce\x46\x94\x1e\x61\xb2\x29\x8c\x15\x41\xd7\x53\x67\xc2\x49\x62\xa6\xa9\xd1\x58\x7b\xbe\x90\x7d\xf5\x88\x63\x30\x7a\x96\x95\xca\x2c\x54\xf5\xac\xd3\xdb\x5c\x0b\x5a\xa4\x42\x7d\xde\x82\xda\x06\x94\x1a\xd2\xe5\xd3\x48\x19\x9f\x84\x69\x77\xbd\x22\xa5\x5d\x3b\x9e\x1e\x82\x0c\xf7\xbc\xbe\x86\xd2\x7d\xd3\xb4\x80\xa9\xcb\xec\xf6\x1c\x67\xf8\x12\xbb\x15\x58\xe7\x15\x5f\xa4\x46\x12\x42\x82\x1e\xbe\xcc\x0e\x16\xb6\x56\xb6\x3d\xb7\xb3\xf5\xd9\x67\x66\x2c\xd3\x6d\x4c\xc0\xc3\x30\x72\x6a\xc3\x89\x95\x7e\xc6\x17\x32\x0e\x10\x33\xfb\xa1\x4c\x00\x7b\xb5\x92\xfe\x66\x29\x08\x55\xb1\xf6\x37\x54\xe1\x72\x61\xaf\x5c\x31\xc9\xa3\x32\x01\x6f\x85\xa5\x7c\x22\xe8\x76\x47\xbd\x78\xe8\xc3\xde\x57\x8d\xca\x1c\x53\x06\x52\x8f\x3a\xac\xfc\xa9\x33\xa5\x7d\xf2\x14\x53\x9c\x87\x5a\x79\x3c\x0e\x8c\x7d\x01\x16\xa3\xba\xc8\x40\xa8\xc2\x08\xdf\xb2\xe9\xed\x24\x5b\xbb\x22\xdc\x20\x33\x88\x09\xc1\x35\x74\x89\x44\xef\x04\x2f\x9d\x12\xa1\xfe\x8b\x09\xb1\x78\xdd\x74\x5f\x64\xa6\xa6\x41\xb4\x66\x26\xe0\x42\xa7\xa6\xa8\x86\xef\xe2\x71\x87\xc2\x85\x8f\xef\x8b\xfc\xd1\xa5\x8c\xf0\x89\xd0\x1f\xbc\x0f\x3c\xa2\x9c\x74\x87\x3f\x32\x93\xf9\x98\x4b\x81\xf0\x71\x8f\xc6\x9f\xcc\xa1\x95\x05\xf8\x64\x0d\x4c\x06\x11\x94\x3d\xfc\x51\x0f\x8f\xff\xfa\x7f\xef\x4f\xfd\x83\xdf\xf6\x5f\xa1\x7f\xf8\x27\x7e\xec\xdf\xfd\xe7\xf3\xfc\x47\xbf\xf0\x6f\xfc\xb5\x3f\xf5\x37\xff\xd0\xff\xe2\xd7\xfd\x99\xff\xd4\x7f\xf1\xc7\xfe\xc8\xff\xe4\xef\xfe\xde\xff\xfe\x17\x92\x96\xaa\x02\xb9\xdb\xea\xec\x8f\x94\x36\xed\x9a\xee\x2b\x5a\x33\x34\x75\x82\xf6\xdc\xbb\x85\x87\x0f\x9a\x17\x68\x92\x3e\xb7\xf9\x2f\xd0\xa2\x98\x0d\x85\xfb\x82\x41\xf6\xc3\xe7\xe0\x50\x1c\xa5\x95\x90\x1a\x9a\xbd\x39\x3b\x9c\x9d\xa8\xcc\x9c\x7a\xd0\xd7\x02\x50\x9c\xfb\x82\xd4\xf7\x86\xfa\x18\xc9\x86\xf5\x66\x4d\x98\x8a\x8b\x8c\x9c\x50\x9b\xf2\xbe\x63\x2e\x87\x4f\x43\xb4\x5d\xac\x6b\xe9\x3e\xf8\x30\xf3\x45\x56\x0c\x83\x8f\x9d\x35\x3e\xee\xe1\xed\x6e\x8b\xf6\x83\xec\xf3\xb0\xcb\x7f\x9e\x1c\x54\xe4\x2e\xc3\x57\x2e\x96\x28\x27\x77\x03\xc7\x6b\xe3\x17\x74\xfd\x65\x02\x1e\xbb\x29\x26\xbc\x00\x93\xcf\xbe\x5f\xfa\xa4\x3c\xb7\x65\x8b\x31\x58\xb3\x05\x67\xbe\xaa\xbd\x47\x15\xfe\xb2\xa7\xb0\x2f\xd4\xf0\x6f\x8a\x42\xae\x8e\x0d\xa9\xdc\xbc\x5b\x1d\xeb\xe6\x02\x76\x04\x4e\x36\xb6\xd6\x9b\xa7\x31\xa0\x95\x59\x0c\xca\x7a\x1d\x91\x9f\xec\xc4\xfa\x95\x4d\x1c\x73\x77\x9d\x0d\xbc\xef\x7c\x9d\x46\xd6\x1d\x27\xda\x19\x9b\xb9\x47\x2c\xa7\x20\x0e\x52\x93\xd7\xaf\xe7\xb1\xdf\x38\xcc\x84\x63\xa3\x0d\x45\xdb\xb8\x30\x1f\xc2\x4d\xf6\xa2\xd7\x90\x37\x21\x68\x71\x2f\x39\x92\x9d\x03\x49\xe4\x98\x28\x50\x44\xeb\x8a\x2f\x40\xc1\x3a\xb9\xd7\x0a\x5e\xaf\x82\x6b\x2c\x87\x38\xc3\x02\xc0\xbe\xce\x6d\x57\x12\x98\x5d\xd6\x36\x58\x1a\xb3\x73\xaf\x53\x61\x3b\x7c\x71\x47\xb6\xef\xe0\x79\x25\xf0\xbd\x88\x82\x7a\xd3\xc2\xf2\xbc\xcf\x78\x16\x59\xea\xc0\x8b\x85\xd6\x23\xd2\xe4\xd4\xc8\x36\x66\xa6\xda\x17\x78\xbf\xd7\x0c\xef\x8b\xd7\xba\x1a\xd8\x59\x9e\x5c\xfc\x53\x9c\x75\x45\xf5\x07\x51\x11\xe8\x79\x0a\xd3\x69\xe0\x77\x21\x3a\xba\x6b\x9f\xe8\x8d\x6d\xb7\xe6\x6c\x16\xe4\x70\x62\xad\x4c\xc4\x83\x1a\x4b\x86\x4c\xc7\x71\x01\x12\x4b\x38\xe7\x1b\x13\x01\xad\x46\xcf\x53\x7a\x3f\x49\x1a\x60\x0f\x54\xea\x1d\x57\x5f\xae\x95\xa0\x60\x8d\x7a\x58\x79\xb1\x31\xe7\x2a\x92\xe7\xeb\x28\x44\xcf\xbe\x0f\xac\x70\x6a\xf5\x92\x4f\x18\x61\x93\x56\x19\x0c\x1b\x81\x37\x4f\x8b\x57\x45\x4b\xc0\xf3\xb6\x08\xc5\x3a\xa6\x2f\x75\xf1\x10\x86\x4d\x43\x12\x7b\x5d\x84\x3d\x7c\x31\xc0\xdc\xa4\x98\xbf\xe3\x02\x10\x06\x9d\x1b\x3f\x68\x00\xc2\xd4\xae\x28\xf6\x8a\xde\xd4\x72\x49\x9d\x4b\x0d\xc6\xeb\x44\xdc\x2e\xb0\x2f\xea\x45\x41\x87\x06\x57\xda\x2d\x1b\xe0\x83\xf1\x51\x3b\xba\xa3\xe7\xd5\xf6\xc1\xab\xd2\xa1\x8b\x6d\x6a\xa2\x64\x60\xb2\x4a\x7d\x64\x23\x7b\xa8\x0f\x10\x75\xd8\xcb\x19\x59\x85\x15\x27\x6a\xa8\x3e\x70\x72\x40\x12\xd6\xf5\xf2\xac\xa8\xb4\xca\x56\xf1\xd4\x0c\x04\x85\x5f\x9c\x8b\x90\x77\xb6\x18\xc0\x7c\xe9\xc1\x14\x06\x7b\x71\x1d\x3e\xbe\x39\x66\x82\x5f\x49\xdf\x07\xc7\x37\x28\xa0\x3c\xa4\xc1\xb5\x21\x3e\x91\x03\xb2\xd7\x4e\x83\x33\x94\xb9\x93\x47\xee\x1b\x55\x3b\x76\xf1\x3e\x96\xf3\x18\x16\x75\x8e\xa5\x3e\x3e\xa1\xd6\x03\x36\x0d\x29\xf3\x2f\x06\x98\xf6\x14\xf7\x6f\xd1\xf6\xef\xb1\x1f\x3d\xeb\x59\x10\x5a\xce\xe1\x00\x21\x94\xd2\x02\x05\x72\x38\x07\x8a\x24\x88\x42\xc5\x59\x73\x31\x50\x44\x68\x29\xc8\x45\xaa\x50\xdb\x50\x0d\x9d\x99\x35\xf7\x59\x73\xbf\x13\x48\x69\x41\x2b\xa6\xd2\x12\x30\x84\x84\x8b\xa8\x40\x45\xac\xd9\x58\x2a\x18\x6a\xa1\x06\x90\x4b\x09\x14\x04\x05\x4a\x6d\x2a\x95\x42\x69\x01\x8b\x25\x06\x30\xbf\xbd\x43\xd8\xc9\x36\x69\xa2\x7b\xfd\xfb\xfd\xce\x27\x99\xcc\x9a\x79\x2f\xcf\xfb\xbc\xcf\x0b\x48\xbf\x1f\x2d\xa2\x29\x79\x1e\x6e\x9c\xb5\xc6\x60\x1c\x2d\x2f\x05\x0c\x66\x1f\x22\x6b\x0d\x5b\x15\x78\x00\xbc\xed\x1b\x9e\xfd\x90\x16\x75\x7d\xe6\x26\xd2\x40\x02\xc1\x23\x49\x96\xf4\xf1\xbe\x0c\x6b\x6e\x82\xf3\x6e\xba\x01\x48\xb5\x36\x44\x3f\xf9\x42\xfc\x0d\x98\xd6\x56\x18\x4c\x8e\x99\x07\xdf\x02\xe3\xee\x30\xa1\x45\x76\x09\x3e\x92\xc6\x6d\x01\xc3\x1d\x29\x5b\xbd\x69\x6b\xdf\x42\x24\x64\xdf\x80\xe3\x12\xf6\xe9\x36\x4e\x96\xc3\x80\x10\x5b\x26\x25\x85\xe2\xf4\x58\xde\x69\xbf\x80\xcb\x81\x9b\x76\xb7\xa8\x0a\x08\xb6\xf8\x73\x5e\x91\x91\x45\xd0\x19\x80\xca\x05\x9b\xc5\x80\xf3\xab\x2a\xe6\x29\x96\x0e\x4a\xd6\x0a\x9b\x1b\x3f\xb0\x26\xaf\x03\xb9\x1a\xaf\x8d\xed\xcc\xdf\x78\xa9\x3c\xb9\x2e\xab\x82\xc6\x95\x07\x95\xc9\xac\x66\x93\x08\x84\x23\x58\x4e\xad\xa9\x50\xe9\xbd\x54\x0a\x91\x07\x80\x88\x1b\xe8\x57\xda\x7b\x8a\xf5\xa8\xa8\x88\x77\xd0\x90\x67\x8d\x51\x0f\xc6\x64\x6d\x8f\x2e\x14\x91\x44\xa1\x13\xe5\xe9\x8c\x28\xaa\xd3\x45\x59\x8f\xfc\x8d\x82\x4a\x3a\x15\x40\xad\x6c\xb0\x50\x53\x62\xe0\x4d\x0b\xaf\xda\xee\x61\xf9\x62\xbc\xd1\xe7\xaa\xcb\x22\x7a\x31\x7b\x53\x0b\xc7\x11\xe7\x15\xf1\xeb\x2a\x3b\x0f\xdc\x9a\xec\x0b\x26\x59\x19\x7b\xd6\x0d\x0b\x82\x40\x4f\xc7\x2c\x1f\x99\x9f\x02\xd4\xc5\xa6\xb2\x97\x6a\x1a\xd1\x37\xe2\x0b\xaf\x56\x62\x4d\xb6\x14\xaf\x4b\xd0\x52\x00\xba\xa4\x43\xcc\xc0\x47\x0d\x0e\x53\xca\xf4\x61\x18\xe9\x6b\xc5\x4e\xeb\xc3\xc1\xcd\xdf\x68\xf4\x07\xfc\x19\xd4\x09\xe3\x72\x88\x5a\x0f\x17\x90\x56\x35\xeb\xe7\xca\x52\xed\x16\xa9\x0b\x51\xa4\xab\xb8\x02\x77\xc1\x37\x19\x4f\x69\x2f\x7c\x91\x87\x5f\x3a\x99\xd6\x3a\xec\x73\x94\x19\x79\xa9\x56\xb5\xa4\x9e\xae\x6c\xe8\x7e\x1b\x96\x7c\xa3\x53\x2f\xd5\xe3\x7a\x72\xae\xee\x8d\x7b\x91\x5b\x0d\x16\x5a\x1c\xb1\x99\x80\xce\x8b\xd4\x82\x16\x68\x0d\x3e\x57\x61\x83\x87\xfa\x04\x74\xf4\xe9\x1e\x5f\x39\x67\x61\xd1\x89\x1f\x03\x78\x7c\xd2\xa7\xfc\x1f\x5f\xfa\x49\xdf\xf0\x67\xed\x2f\x73\x5f\xfe\x0f\xfe\xd6\xbf\xf6\xe9\x3f\xf1\xbb\xbf\xfa\x53\x7f\xe4\xcf\xfe\xea\xcf\xfd\x11\x5f\xf3\x89\x3f\xe0\xf7\xfd\xd0\xff\x78\x7d\xd2\x0b\x0c\x8f\x4a\xcd\x82\x6c\x06\xb6\x37\x73\x10\xcb\x07\xb3\x8c\x92\xec\x4f\xae\x09\x4f\x7a\x29\x27\xc3\x7d\x2f\xaf\x69\x69\xdd\x17\x83\xe9\x1b\x35\xb1\x9d\x0d\x4c\x60\x1a\xe4\x77\xa6\x49\x73\x62\x5b\x34\xf9\x81\x3c\x9e\x71\xed\x93\x77\x98\xd5\xcf\x20\xf8\x13\x23\x04\x16\x9c\xf2\x86\xba\x7e\x33\x0c\xa8\x6c\x18\xe1\x24\x4c\x66\xb8\xdf\x52\x3c\xab\x3d\xc0\x81\x74\xf0\xbe\x07\xc9\xa4\xa0\x47\xa6\x3c\x65\xa6\xd1\x62\xff\x46\xb7\x9a\x94\xde\x6e\xe0\xb3\x8c\x43\x4e\x61\x5b\x75\xb0\x05\x1e\x53\x3c\x29\x9d\x50\x86\xe6\xb4\xe8\x00\x14\x3d\x66\xa2\x4b\xf7\xf2\x0e\x8a\x38\x81\x81\x19\x9c\x19\x49\x6d\xeb\xbe\x60\xce\x54\xd1\x40\xe8\x75\x91\xf6\x80\x4b\x54\xd7\x7d\x5a\x39\x24\xab\x43\xe3\x7c\xb6\x37\x34\xfe\x51\x1a\x13\x80\xb9\xb2\xd1\x2e\x86\x76\xb4\xca\x27\x8d\x5a\xd9\x0a\xa3\xfa\xd6\xc5\x76\xc4\xd0\x7e\xb9\x41\x98\x39\xd6\xd7\xfc\xc6\xd3\x06\x6d\xc9\x54\x9d\x55\x95\x39\x97\x46\x15\x51\xf4\xd8\x28\xbf\x46\xd6\x80\x24\x51\x5b\x6a\xf2\x82\x4a\xc2\xa3\xc2\xc5\xf5\x31\x6f\xdc\x0b\x70\xa7\x6b\xe9\xb8\x60\x68\x78\x8d\x2c\x3c\x91\x7e\x16\x01\xc7\x28\x85\x58\x8c\x8a\xef\x8f\x79\x06\x9e\x42\x04\xe3\x09\xbe\xcf\x0b\x15\x18\xca\x2f\x2b\x08\xcf\x78\xdd\x37\xc0\x87\xaf\x86\x08\xa2\x58\x37\x79\x2f\xdc\x61\xda\x0f\x5f\xb4\x4f\x5c\x5b\x94\xd3\x04\xa3\x40\x7e\x65\x5c\xf1\x05\x08\x86\xd2\xe4\xc7\x38\xa1\x15\x4c\xe8\x6a\x64\xa8\x3d\xc4\x58\x43\x2b\x80\x8f\x02\xe3\x6a\x12\xae\xed\x9b\x4d\x7c\x98\x37\x68\xd9\x4f\x24\xcc\x85\xcb\x3e\x72\xce\x73\x67\x68\x1c\xd6\x9d\x56\xb3\xd2\xe8\x06\x7b\x69\xf8\xc1\xd5\xca\xa3\x09\xba\x54\x58\x07\x9f\x37\x44\x8e\x09\x08\x46\x3f\x8f\xf9\xc0\xcf\x8f\xca\xbd\x6e\xa1\x32\xac\x26\x81\x7d\x34\x19\x2f\x35\x78\xbc\x4c\x82\x95\xe5\x2b\xe2\x5b\x58\xf3\x86\x13\x06\x10\x3d\xcd\xd5\x64\x6b\x9d\xb2\xde\x73\xf1\x7a\xe2\x08\x8d\xdb\xe6\x8c\x15\x4e\x80\x5b\x9b\xdb\x19\xb2\x44\x6c\xd2\xa5\xbb\xbc\x31\xae\x18\x0f\x5b\xc8\xa1\xe9\xd0\x4a\x5c\xce\x81\x3a\xed\x30\xba\x63\x3f\x87\x41\x73\xb3\x0b\x91\x9d\x74\xfe\x20\x6e\x92\xc9\xf3\x9a\xdf\x08\x48\x18\x31\x8c\xf2\x9b\x61\x58\xe2\xa3\xf7\xee\x04\x54\x7e\x00\xeb\x5e\xcd\x02\x10\x47\x37\x0e\xe8\xa4\x42\x01\x86\xea\xde\xba\x9e\x57\x38\x7a\x07\xb0\x9b\x8d\xf2\x34\x95\x20\xc6\xce\x6e\xc1\xf2\x46\xf5\x49\x32\xea\xd8\x54\xc6\xc6\x75\x4b\x05\x08\xa6\x32\x7a\x4c\xa4\x6f\xec\x82\x8e\x38\x95\xf7\xed\xb2\x5d\xdb\x28\x7b\x04\xf5\x3e\xbd\x36\x77\x83\xad\x2f\x3b\x2e\x99\x93\xd0\xf4\x9c\xdb\x33\xc6\x4d\x6e\xd7\x79\x63\x14\x6b\x25\x06\xd4\xbe\x41\xc6\x57\x2d\xfe\xc3\xe3\x73\x88\x85\x70\x38\x1e\x49\x9b\xc8\xfb\x07\x6a\x0e\xab\xe7\xa4\xd0\x56\x50\xd6\xf5\x0d\xe0\x1c\x80\xbc\x56\x49\x60\xb9\xc7\x77\x8a\xb0\x2d\x9b\xf2\x39\xc0\x6a\x33\x43\x30\x25\x6c\xfa\x42\xc6\x20\xee\x99\xd7\x37\x96\xd5\xbf\x51\x5c\xea\x39\x1c\x98\xea\xdc\xaa\x15\x3e\xe0\x00\xde\x2d\xad\x76\xe0\xc8\xb7\x18\xe4\x12\x8a\xb3\x7c\x74\x9f\xb9\xa4\x56\xb0\x1e\xaf\xa8\xed\x90\x1a\x00\x80\xa9\xe9\x73\x74\xd9\x55\x51\x09\x9b\xcd\x57\x77\x01\x01\x31\x59\xbb\x2c\x2e\x38\xb3\x4d\x75\xb6\x6e\xc6\xfe\x4e\xeb\x02\xe3\x5b\xf6\x49\x94\x5b\x24\xd2\x7c\xa6\x7f\x72\xbe\xc8\x7d\x17\x4e\x44\xbd\xae\x62\xd6\x21\x88\xb7\x13\x08\x8f\x7a\xdb\xbc\xfd\x1b\x50\x43\xae\x97\x4c\xd8\x81\x9d\x4a\x55\xe2\xd6\xbe\x28\x1b\xbd\x55\x87\xa6\x71\xba\x55\xb0\x42\xda\xa5\x68\x0b\x61\xdb\xa2\xc7\xca\xbe\xc1\x27\x80\x25\xc6\x03\x03\x59\x74\x8e\x02\x5b\xef\x18\xc9\x52\xcd\x95\x6b\x74\x8d\x15\x84\xe1\x55\x30\xb4\xce\x5c\x6c\x28\x5f\xf7\x02\x6f\xf8\x11\x27\x35\x3a\x2e\xe4\x8c\xfa\x23\x50\x9a\x8e\x47\x0e\x77\x60\x7a\xb2\xbe\x66\xe2\xbd\x7b\x66\x53\x55\x53\xcc\x58\xac\x9c\xf2\xbc\xa1\x30\xc3\x52\xd1\x10\xaf\xae\xfd\xbe\x65\x17\xf7\x75\x1a\xd5\x85\x95\x3b\xb2\x76\x9b\x5c\xee\x62\x41\xd5\x70\xde\x30\x46\x71\xd5\x3b\xf2\x37\xf8\x8a\x8b\x25\x78\xed\xad\xb7\x66\x26\x1c\x05\x8e\x53\x93\x03\xe2\xa4\xbd\xf1\x65\xf5\xf9\xf0\x94\xed\x16\xc6\xf5\x48\x8d\x70\xdb\xd5\xbf\x01\x41\x8d\x4b\xdf\x54\x2b\xe2\x0e\xec\xd9\x54\xc5\xae\x03\xaf\x1b\x7b\x87\x82\x58\x99\x1f\x88\x69\xf6\x2c\x1e\x6e\x36\xc6\xdb\x86\x49\xdf\x68\xd0\xbc\xd8\xe9\x5c\x86\xf6\x20\xb0\xa8\x22\xe2\x26\x99\xb7\xaa\x9d\xa6\xee\xb6\xa9\x3f\x5e\x2b\xfc\x8c\x5b\x44\xcf\x50\x11\x68\xf3\x37\x6e\x27\x5b\x46\x35\xa7\x22\xd6\x71\x26\x2c\x66\x9b\xd5\xe9\xfe\x6c\x62\x45\x1a\xb2\x02\xcb\x6a\x72\x4c\xea\x16\x0d\x44\xd0\x0d\x1f\xca\x1b\xd1\x2f\x21\x2a\x53\xea\x9f\x36\xb5\xf1\x81\x7d\xe0\x50\xd9\x99\x02\xcd\xd5\xbb\xed\x07\xc1\x58\x42\x75\x1c\x33\xee\x81\xc2\x2b\xcf\x37\x24\xb8\xa9\xdc\x61\x5b\x16\x2e\xab\xab\x36\x6e\x9e\xe4\x0a\xbe\x3d\x77\x75\xe8\xb0\xd8\x44\x50\x01\x5c\x53\xdf\x68\xd1\x38\x9f\x2c\x85\xbb\x3e\x06\xf0\x88\x3f\xbe\xa7\x5f\xfb\xd7\xbe\xeb\xff\xf7\x7b\xff\xf9\x2f\xff\xf1\x7f\xf9\x6f\xfc\xf2\x9f\xf6\x03\x7e\xe1\xcf\xfa\x6c\xfd\xbf\xfc\xd6\xdf\xf4\x55\x9f\xf7\xd5\xff\xfa\x27\x07\xfd\xb7\x5e\x60\x78\x1c\x33\x76\x1b\xe0\x0e\x5b\x9e\x0d\xc9\x76\xb0\x13\x19\x6c\x4e\x66\x6a\x60\x04\x0c\x5b\x18\xa1\xdd\x75\xa2\x1e\xdb\x6a\xb9\xf8\x1b\xd4\x42\x1f\xe9\xa6\xb2\xdc\x39\xc6\xa5\xc6\xb4\x9a\x5e\x17\xba\x1c\x65\x16\x27\x7a\x99\x23\xbc\xbb\x6c\x1b\xa0\x83\x99\x30\xe2\x16\xda\x37\x48\x7d\x25\x00\xc5\xc6\x50\x31\x76\xef\x31\xac\x1a\x24\x6c\x9e\xeb\xd0\xa8\xa6\xb4\xa6\x76\x50\x93\x0b\x8a\xbb\x9b\xcc\xe7\x71\x16\xbd\x22\xe0\x2a\x08\x4e\x8f\x0e\xa8\x85\x50\xa2\x2b\x8d\x28\x63\x53\xdf\x1b\xc9\x74\x45\xa9\x86\x28\xbe\x5a\xac\x8b\x4b\x79\x14\xe6\xd3\x0d\xde\xa8\x46\x2d\xa9\xd7\xbe\xa6\xc4\x5d\xce\x01\x4c\xcd\x9e\xcc\x82\xf7\x8d\x12\x92\x97\xac\x4e\xce\x60\x04\xad\x96\x09\x9d\xaa\xc6\x4c\x98\x37\x12\x98\x6b\xc2\x8c\xd2\xa0\x87\x90\xa7\xfb\x39\x97\x5e\x47\xc7\x04\xaa\x02\x35\x73\x78\x6d\x4e\x85\x4b\x49\x5d\x46\x03\x16\x99\x65\xef\x68\xfc\xb3\x73\x5b\xbc\x61\xea\xcb\x7a\xaa\xcd\xc9\xa8\x62\x08\xed\x0d\x06\xf7\x45\x0f\x6c\xba\xa3\xa5\xe4\x49\xe9\x1e\x3b\x86\xf0\xca\x68\x45\x95\x7a\xb6\x8f\x2c\xfb\xc1\x92\x27\x5e\x0c\x14\x6d\xf6\x78\xce\x9e\xea\x91\x31\x9f\x8b\xb9\xaa\x54\x73\x63\x03\x8d\x8b\x3f\xfe\x8d\xd4\xa1\x9b\xdb\x8d\x9c\x2f\xbb\xdb\xf4\xc7\x02\xb6\xac\xe4\xc6\x4d\x3e\xf7\xf1\x27\x99\xfb\x46\x33\x0b\x48\x2c\x30\x51\xa5\x10\x45\x7e\x23\x44\xd4\x06\x01\x40\x38\x9a\x23\xfb\x23\x40\xea\x52\x12\x61\x7a\x9a\x78\xa6\xb8\x96\xaf\x63\x35\xa7\xa4\xba\x55\xe9\xda\x01\x8a\xf9\x1b\x09\xcc\xca\x7c\xda\x45\x14\x8c\x7d\xde\x57\x06\xa5\x64\xc2\xb4\xde\x24\x8c\x0d\x16\x11\x6c\x36\x9e\x6f\x79\xc5\x3c\x29\x0a\x4d\x86\x57\xf4\x8f\x7a\x47\x6a\xd1\xed\xae\xc1\x17\x99\xdb\x9a\x14\xce\x56\xda\x1d\x2c\x18\xc7\x21\x61\x38\x90\xdb\x29\x40\x69\x17\x54\x65\x3f\xf7\x1b\x2f\x15\x22\xa9\xa9\x88\xf7\x05\xda\x73\x9f\x61\x96\x63\xcf\x53\x1b\xd3\x20\x5a\xe8\x19\xd4\x7e\x3b\xba\x70\x73\x70\xdf\xea\xda\x06\xb7\x37\xce\xa2\x3c\x45\x61\xa5\x9d\x46\x7e\x78\x1c\x0c\x26\x3e\x1a\xab\x5b\xa8\x50\xa4\x33\x70\x73\xca\x41\x11\xa6\xb5\xc2\xec\x7e\x5b\xc6\xde\xa0\x65\xa3\x01\x1f\xfb\x24\x92\x38\x9d\x8f\x10\x1c\x75\x7f\x4d\x89\xea\x3d\x01\x01\xc9\x88\x45\x9b\xa6\x8d\xf8\x4d\xe9\x76\xd6\xe0\xfd\x06\x15\x99\x21\xd5\x0b\x21\x9c\x53\x79\x8f\x53\x86\xbf\xf9\x45\x1b\x6c\xd8\x3d\x91\x08\x13\x9a\x03\x5e\xe6\xdc\x87\x15\x95\xcd\xe8\xa8\xd8\x6f\xbc\x11\x79\x8b\xdc\xf1\x45\xb8\x83\x66\xdd\xc3\x6d\x47\x01\x11\x4f\x61\xc5\x1a\x66\x15\x58\xf3\xf1\x9b\x0e\x76\x3f\xb1\x31\x39\x6c\x7e\x43\xdb\x85\x4a\xef\xa9\x1f\xd2\x52\x15\x55\x97\x85\x46\xcf\x14\x57\x2d\xe7\xa2\xf0\x42\xc2\x08\x9e\x60\xb9\x6e\x35\xd3\xc9\xe3\xc3\x72\xf3\x6f\xd0\xb2\x9d\x48\xc7\xd7\xa5\x09\x15\x3b\x6b\x23\x7a\xe4\xa8\x75\x7b\x5b\xed\xdd\x3a\x19\x72\xc2\x89\xbc\xc0\xe6\x74\x04\x7d\x48\xcd\xf6\x0d\xa8\x61\x61\xb0\xaf\xa3\x55\x72\x70\xe3\x46\xac\x44\xa6\xb4\x6c\xec\x4e\xe6\xb9\x3d\x99\x75\x12\x42\x30\x1a\x85\x3f\xfd\x11\x6e\xdd\xe6\x0d\xf9\x3f\x7f\x8b\xe6\xbc\x1d\x97\x03\x81\x41\x77\xf7\xe3\x1f\x77\x67\x0d\x40\x6c\x8a\x1a\xa0\xfa\xbd\x9a\xac\x11\x54\x52\x60\x20\xca\xbf\x21\x04\x4e\x57\x6c\xda\x58\x6f\xd7\x7d\xf6\xcc\x58\x1f\xc7\xd7\x51\x06\x0e\x5c\x62\x41\x8a\x79\x87\xaa\xc4\x21\x86\x1e\xeb\x4a\x4a\xca\xf3\x86\x4a\xc2\xbc\x35\xf7\xd1\x40\x65\x07\x40\x89\x92\xea\x64\x76\xcd\x88\x39\x55\x8e\x52\x77\xb5\x16\x20\xab\xa9\x55\xcd\x81\x99\x0b\xfa\xc6\x10\x54\xea\x10\x38\xe2\x10\xe9\x58\x3c\x2c\xb7\xfe\xdc\x5c\x40\xe1\x1d\x28\x23\x50\xe7\x3d\x51\xc1\xad\x3e\x7b\xa9\x6c\x78\xa3\x1f\x7d\xde\x68\x62\x16\x46\xda\xf4\xd0\x93\x0b\x26\x26\x99\xe0\x9b\x37\xf7\xba\x6c\xa3\xe6\xb1\x1c\x60\x0a\xa8\x42\x7d\xd8\xaa\xb1\x73\x1f\x8e\x8d\xdf\x48\x29\xaf\x0b\x00\x1c\x88\x62\x7d\x0a\xb4\x01\xb0\x9b\xc3\x7a\x0f\x2c\x41\x9f\x63\xb2\xd3\x01\xd2\xc1\x3c\x80\xf9\x3e\x21\x53\x12\xd0\x37\xd2\xeb\x09\x95\xa3\xae\xc2\x4c\xb4\x88\x57\x71\x64\x15\xbc\x55\x9e\xa1\xdc\x4c\xa4\xa7\x44\x8c\x94\xe8\x9c\x69\x39\x1a\x98\xcf\xf3\x4a\x7a\x4d\xe9\xd5\xcc\x32\x0a\xb9\x86\x2f\x01\x8c\xb9\xc7\xd3\xed\xa6\x11\x59\x70\xab\xde\x98\x88\x46\xe7\x67\x56\x9b\xf0\x70\xd2\xc3\xe4\xde\xe0\xdc\x6c\xd1\x16\xac\x3a\x3c\xda\x05\x8b\xa9\xcd\x63\x65\x77\x81\x79\xfa\xb5\xe5\xc1\xb1\xcb\x32\x1f\x74\x37\x9a\xfa\x3d\x75\xad\xd5\xbc\x71\x3b\xef\x55\x78\x86\xb6\x37\x68\xe4\x22\x03\x90\x01\xf1\xc3\x0a\xd5\xf5\xa9\x64\xde\xc0\x88\x66\x11\x77\x99\x6d\xf4\xa4\x7b\xa9\x5a\xde\xf0\x66\x6d\xdf\x14\xb7\x0e\x49\xdf\x18\x08\x76\x59\x4c\xc0\x01\xe0\x1c\x52\x82\x48\x58\x68\x1e\xb3\xf5\x52\xdd\x65\x5d\xb7\x27\x71\xfa\x37\x76\x91\x59\xba\xd2\x0a\x58\x3e\x4c\x67\x5a\x93\x63\xb4\xa0\x6d\xcd\x5d\x25\xfa\x20\xe0\xbc\x33\x32\x00\x1d\x72\x56\xbc\x0c\x3b\xb7\xd8\x1f\xdb\xd2\xf2\x73\x3f\xef\x8f\xa9\x5f\xf0\xa1\x9f\xf7\x73\xbf\xdf\x17\xbb\xaf\xf9\x89\x9f\xad\x7f\xc5\x9f\xfa\xcb\x7f\xe8\xdb\xff\xc3\x1f\xf4\x6f\x5f\xff\xff\xbf\xf2\xb9\x7f\xe6\xb7\xff\xb6\x2f\xfa\xd2\xff\x67\x80\x87\xfc\xcc\x4f\xf8\xf6\x8f\x25\x87\x63\x18\x5a\x26\xe6\x16\x4b\x9a\x55\x7d\xb8\xd4\x23\x92\x37\xc7\xac\xc3\x59\x16\x92\xeb\x8b\x6e\x93\x95\xf4\x9b\xf5\x0e\xb3\xff\x30\xd4\xf0\x95\x7f\xe6\xff\xee\xe1\xfd\x5f\xee\xe2\x76\x02\xa1\x94\xec\x08\xb8\x2b\x21\x28\x76\xd7\x34\xa6\x63\xc4\xf4\x5c\xd7\x99\x77\x56\x2b\x0c\x88\x0a\x17\x3d\x3f\xba\x96\x8f\x74\x74\x7e\x9c\x77\x31\x60\x0f\x5c\x24\xc1\x7b\x24\x54\x80\x87\x73\x09\x47\xd9\x56\x48\x5a\x1a\xb1\x57\x65\x24\x3f\xa4\x3c\xb4\x1d\x10\xd2\xd0\xa7\xc8\x8f\xff\x2e\x18\x37\x3e\x5a\x2c\xbc\xd3\xf7\xa3\x7a\x79\x2c\x33\xae\x16\x0e\xc0\x75\x8a\x2b\x47\xc2\x69\x0b\xd5\x37\x83\x85\x06\xb6\x91\xd4\x1f\x19\x46\xf5\x71\x3e\x0b\x9e\x2b\xb6\x83\xc0\x5d\x6e\x36\x6a\xb5\xe0\x39\x7a\x4e\x07\xc4\xe6\x16\xde\x2e\xcf\x9e\x64\x70\xcf\x05\xb3\x11\xbb\x65\xcd\x1d\x7e\xe3\x5e\x58\x8e\x21\x92\x0f\xbe\x6a\x59\x96\x90\xe6\x51\xc3\xc5\x59\x02\x8d\x27\x18\x5d\x1e\xd2\x4c\x62\x60\x82\x3b\x91\xd0\x85\x41\x53\x2f\xec\x22\xcf\x0b\xd7\xe9\x62\xd3\xc2\x9f\x94\x1e\xee\x2d\xc0\xe2\xa1\xac\xaf\x58\x4e\xc3\x57\x4f\x5b\xf1\x0b\x41\x75\xd2\x1d\xda\xc8\x77\x7e\x61\x17\x3a\xdf\x01\x99\x58\x68\x4d\x7d\xb7\x32\xaa\x2b\x13\xd9\x29\xa1\xcb\x69\xa6\x8d\xd6\xad\x34\x15\x5e\x0b\x10\x4a\x94\xb8\xb6\x8f\xd0\xb2\x3f\xce\xb7\x73\x58\x1f\x6e\xad\xfa\x10\x96\x3c\xc3\x20\x46\xf6\x34\xed\xf0\x64\x8a\xc7\x99\x95\xba\xe4\xa9\xd2\x9d\xdd\xd3\x95\x41\x72\xcb\x8c\x17\xce\x42\x9d\x9d\x82\xc4\xa3\x17\x76\x23\xa3\xf3\xbd\xb2\xe3\x97\xbc\xf8\x52\x57\xe1\x92\x1c\xa9\x63\x5b\x32\x1a\x79\xef\x98\x6a\x82\x1f\x99\x77\xf0\x71\xde\x05\xbe\xcb\x7d\xd4\xea\x89\xb0\xa1\xc8\x81\xe7\x99\x90\xcd\xbc\xc1\xb3\x27\xbb\x07\x8e\x10\x92\x7d\xc3\xa6\x1c\x90\xd5\x69\x5f\x3f\x92\x52\x7e\xbc\xbf\x08\x1f\x70\x2f\x10\xd0\x41\x97\xc8\x17\x52\x49\x76\xb4\xae\xea\x25\xe3\x4f\x74\xf1\xdc\x14\x0a\xe9\xb8\x2e\xae\x49\x42\x1c\x05\x2f\xbc\x11\x96\x25\xea\x9c\x60\xbf\xfb\x8d\x6f\xb5\x70\x76\xf0\x06\x4a\x1f\xbe\xee\xb0\xac\x79\xea\x49\xbb\xcb\x07\x54\x9a\x1a\x50\x8f\x25\x1f\x11\xd2\xfa\x38\xef\x62\x49\xf8\x90\x3b\xf6\x4d\xbb\x39\x2e\x6e\x16\xd8\x61\xd0\x43\x7a\xb4\xe5\x19\x54\x97\x17\x79\x1c\xb5\xa7\x79\x77\x53\x47\x71\x79\xc1\x9b\xb1\x38\x12\x1a\x94\xb7\xf0\xd0\x00\xc9\x93\x29\x7d\xf4\xbe\x59\x57\x13\xa9\x0b\x52\xdd\xa1\x79\x4c\xd5\xec\x6c\x30\xdb\x31\x7b\x3a\xfa\x86\xbd\xd0\xe0\xac\x63\x44\xcc\x5c\x27\xe6\x77\x39\xb0\xab\x6c\xcf\xd3\x51\xd2\xfe\xd9\x86\x00\x0b\x2e\x42\xe4\x9a\xd7\x15\x09\x3e\x1f\x11\x7c\xfe\x38\x9f\x05\xe4\x37\xe7\x60\x92\x1c\xc1\xd0\xf4\x5a\xfc\x02\xa4\x8b\x44\x51\xda\x65\x11\x61\xa2\x15\x9a\xf4\x35\x93\x2f\x6c\xfb\x7b\x9c\x8f\xb4\xb4\x7c\x9c\xcf\xe2\x6a\x30\x80\xeb\x84\xf4\x70\x28\x8e\x73\x15\x36\xc4\x90\xea\x2c\x6a\x32\xaa\xf5\x00\xa1\x36\xda\x0a\x50\x3c\x7a\x5f\xf5\x96\x74\xbf\xb0\x0b\x60\xf1\x35\x7a\x96\xd2\x1f\xd3\x0e\x0e\x49\x53\xc3\xa1\x3b\x75\xac\x7d\x73\x0b\xd0\x85\xa4\xa0\xf6\x3a\x77\xd6\x4b\xf7\x32\x3f\xa2\xae\xff\x71\xfe\x22\x14\x64\xa8\x60\xd0\xcd\x60\x76\x8d\xb9\x8c\x53\xbc\x09\xf3\xf4\x3d\x75\x35\x97\xce\x79\x6a\xc2\xfa\x09\x21\x2e\x2a\x2b\x6f\xe0\x85\xdb\xc9\x8a\x93\x75\xf6\x8a\x82\x17\xf2\x88\x8d\x8e\xba\x87\x38\x53\xa6\xbb\x5f\x5d\xee\x9a\x19\x93\x17\x90\xf3\xe4\x64\x8c\x36\x01\xfb\x37\x3c\x3b\x5f\x48\x25\x38\xc1\xd2\x30\x99\xec\x6a\x12\x84\x98\xe6\x43\x87\xfa\xde\x73\x8b\x85\x03\x09\x60\x41\x7f\xed\x39\x86\x04\xa3\xb1\x17\x76\x31\xc9\xf0\xc0\xdd\x27\x69\x4f\x25\x49\x16\xf9\x8a\x96\x59\x4d\x5f\x4e\xae\x2e\x98\x80\x96\xdb\x34\xf9\xb5\x81\xa1\x87\xfb\xf3\x91\xa9\x4e\x1f\xe7\x5d\x34\xc4\x76\xc0\xd8\x3f\xc7\x22\xc4\x12\xe4\x1d\x5e\xf8\xf1\xbd\x4a\x01\xe5\xa6\x06\x5f\x10\x02\x2d\xa4\x9c\x9b\xd0\xa9\x0b\x7e\xe5\x8d\x58\x79\x8d\x1b\x3e\xab\x81\x21\xd3\xed\xa3\xa3\x65\x3b\x4b\xc6\x52\xfb\xe0\x00\x4c\x72\x0e\x27\x19\x0e\x8e\xa7\x5c\xac\x13\x7f\xbd\xf0\x45\x98\xca\xc9\xdd\x33\x53\x76\x25\x58\xe0\xee\x7a\x46\x96\x15\xab\x2c\xc0\x32\x9f\xa1\x00\xcd\x6b\x61\xeb\x65\x58\x1e\x2e\x2b\x34\x7f\x23\xe2\x33\xf0\xd0\x32\x62\xc3\x12\xdc\xfb\x46\x55\x5b\x39\xb2\xe5\x69\x0d\x88\x89\x8b\x0b\x6d\xa5\xb9\x99\xa9\x56\x45\xf1\x73\x8d\xfc\x11\x4e\xef\xc7\x3b\x1f\x11\xc2\xe6\x14\x83\x19\xed\xe8\x89\x18\xde\xf2\x09\xd1\xca\xeb\xf0\xd0\x07\xbf\xd8\x24\xa1\xe0\x08\x0b\x25\x0e\x23\x87\x38\x7d\xc1\x8f\xd0\xc8\x07\x40\xee\x41\x62\xc5\xc5\xa3\xcf\x51\x2d\x59\xeb\x50\x16\xe7\x84\x8c\x23\x13\x57\x45\xa0\xf0\x77\x10\xd1\x3c\x73\x06\xfa\x42\x7c\x41\x49\x50\xa7\xbb\x07\xc8\x1a\x74\xf4\x85\x93\x6c\x36\x1a\x8a\xfa\x98\xe2\x0d\x95\x06\x62\xe5\x96\x9f\x7c\xa7\x56\x7c\x65\xf2\x3e\x2f\xbc\x54\x56\x85\xbd\x8a\x2a\xed\xb0\xb3\xed\x43\x65\x32\x9b\x90\x9d\x1d\xd2\x71\x3d\xda\x17\xb9\x34\xf3\xf8\xa1\xc9\x7b\x71\x79\x59\xb3\x39\x2f\x9c\xc5\x42\x17\x58\x93\xc1\xbc\xa5\x26\xd2\x4e\x91\x64\xbe\x57\x02\x39\x68\xaf\xaf\x99\xa8\x52\xac\x53\x87\xf0\xbe\xc9\xca\x94\x1f\xf7\x4f\x63\xad\x7f\x02\x78\x7c\xc6\xdf\xfa\x2d\x5f\xff\xa9\xbf\x93\xff\xba\x1f\xfa\xb7\xbf\xfa\xcb\xd2\xff\xfe\xbb\x7e\xc3\xa7\xfe\xb9\xf8\x0f\x7f\xdc\x1f\xff\x8a\x5f\xfb\xc5\xea\xd7\x7d\xfa\x9f\xfc\x0f\x7e\xf5\xd7\x7e\xfc\x01\x0f\xc6\x41\x98\x6e\x44\x86\x2e\x32\x6b\xeb\xd8\x51\xe3\x27\xd3\xac\x66\x6c\x52\x1c\x24\x34\x78\xce\x20\x8b\xd1\x7d\x0d\x1d\xb0\x02\x2f\x04\x24\x0c\x8e\x94\x24\x38\xa9\x5b\x3e\x0d\x07\xe0\x9e\x00\x4d\x08\xf0\x75\x31\xb2\xcf\x2d\x9d\xe5\xa9\x68\x2b\x4e\xdd\x6b\x9c\xbc\xb6\x7b\x01\x6a\xa0\x5c\xb0\x1d\x91\x27\x6a\x34\xa1\x0e\xf5\x82\x1d\xb7\x70\xd0\x06\xc6\x80\x89\xe6\xb8\x15\xac\x46\xb4\x2a\xdd\xbe\xe3\xee\x9f\x3b\xbc\xb0\x0b\x1f\x33\x03\x11\x83\x65\x6e\xb2\x7b\xcd\x5a\x7a\xa1\x1d\x52\x9d\xae\x15\x08\x42\x53\xc1\x8c\xe6\xf1\xd0\x89\x2b\x86\xac\xa7\x7f\xc3\x09\x37\x25\x37\x9b\x21\x57\x58\x4c\x69\xf6\xd1\xc3\x99\x84\x2a\x54\x55\xb5\xac\x00\x6f\xd9\x00\x46\xa4\x2d\x4b\x52\xa9\xa7\x7a\xca\x1b\xbb\x80\x78\xaa\x04\xe6\x03\xbc\x14\xdd\x97\x84\x7b\x90\x8b\xc0\xe7\x3e\x13\xf9\x4b\xf7\x34\x0b\xd5\xb6\xbb\x87\x78\xa5\x0a\x18\x11\xbc\x91\x46\xa1\x90\x50\x9e\x44\x1b\x64\x80\x83\x15\x97\x3d\xba\x35\x5b\x60\xcf\x06\x7d\x30\x55\x23\xd5\xcd\xae\x00\x25\xb6\xf2\x21\x80\x9c\x37\x12\x5b\x67\xbc\x20\x78\x23\x4c\xc7\x20\x0a\x9a\x4b\xd2\x49\xee\x88\xb1\x8b\x73\xcf\x91\x0d\x8b\xf6\x42\x4f\x70\x88\x1a\xc5\xdc\x40\xe0\x8d\x24\x1f\x5e\x57\x32\x0f\x58\x66\x74\xb3\x26\x1d\x8f\xd4\xca\xa8\xa8\xc2\x38\xf7\x6d\x82\x07\x8f\xad\xc0\x6f\x14\x5c\xd4\xb1\x85\x41\xec\x0b\x61\x11\x23\x8c\x3b\x7f\x15\x76\xc1\x26\xca\xa3\x5b\x9a\xc5\x23\x97\x74\x03\x77\x5a\x59\xa1\xb5\x5b\x45\xcc\xd6\xb6\x31\x88\x63\x0b\x66\xe7\x0b\x67\x51\x2f\xf1\x24\xe3\x69\x2a\x9a\x6b\x5f\x6a\x20\x8c\xca\x68\x6d\xb5\xd5\x7c\x60\xad\xf0\x62\x1d\xf5\x22\x7c\x1f\x51\x3d\xad\xb5\xfa\x06\x28\x78\x79\xd2\x8f\x08\x45\xf7\x07\xf0\xb1\xba\x79\x92\xf7\x95\x4c\x61\x7d\x07\xf1\x9a\x2d\xd1\x11\x82\x9e\xcb\x42\xe8\x6e\xe0\x85\x7b\x23\xa5\xb4\xe9\xd1\x92\x3d\xca\xb8\xdd\x71\x10\x53\x91\xd6\xd1\x45\xf2\xca\xb7\xa2\x68\xb2\x13\x9f\xdd\x6f\x70\x35\xee\x21\x7c\x46\x68\xf5\x0d\xb0\x58\xb8\x2d\x85\xdc\x9b\xdc\x15\xc0\xcc\x00\x1e\x4e\x96\x75\x61\x45\xe3\xf1\x4f\xdb\x1c\x3c\x09\x45\xe6\x2c\xc8\x6a\x46\xcd\xf4\x2b\xa9\x83\x1b\x45\xe7\x1b\x85\xdc\x99\x95\x4f\xb0\xa7\x38\xad\xc1\x7c\xcc\x11\x75\x5c\xa2\xb3\xb8\xd7\x90\x42\xdd\xf2\x0e\xe9\xdc\x5e\xbb\x37\xa0\x06\x53\x05\x99\x4f\x75\xee\x4e\xd2\x1d\x5c\xaf\x13\x3c\xd8\x8f\x89\xab\x17\x56\x31\x5b\x87\x78\x92\x96\x49\x81\xe7\xe9\x4d\xdc\xf6\x85\x70\x99\x6a\xf8\x70\x52\x98\x57\xd9\x17\x83\xb2\x34\xb7\xb7\x96\x0a\x5d\xbc\xb0\xe2\x59\x5d\x8c\xee\x1c\xdd\xf7\xf3\xb0\x82\x5c\xf6\xad\x96\x17\x76\xc1\x18\x78\x98\x4f\xc7\x31\xc5\x14\xaf\xba\xa7\xc1\xe5\x05\xf4\x2c\x66\x68\x15\x4e\x86\x8e\xee\x85\x90\xba\x15\x7f\x9e\xbc\x6a\x7e\x01\x6a\xa0\x5c\x57\xc0\x9d\xab\xeb\xae\x72\x4a\x11\x3b\x8b\x03\x8f\x2b\xf4\x69\x83\xa1\x36\x39\x9f\x77\xb4\x6d\xa4\xe6\x9f\x4c\x26\x09\xcd\xbd\x70\x2f\xd8\x74\x0a\x2f\x4b\x75\x23\xf3\x66\xdb\xb3\xa2\xb9\xa1\x4a\xda\x29\xab\xf2\xb1\x5d\x8f\x38\xd3\xd7\xcc\x05\x53\x26\xe2\xeb\xa6\x2f\x14\x97\x58\xba\x4e\xc5\x6b\xf3\x7c\xfa\x96\xe2\xbe\xd5\x14\xb3\xe4\x00\x06\xb3\x7a\x78\xde\xd3\xc3\xad\x85\xad\x38\x1a\x49\x2a\x18\xde\xe7\x8d\xf4\xba\x5d\xbe\xec\x39\x11\xde\x9d\x6e\xc8\x53\x7a\x24\x2e\xd5\xad\xb3\xb3\x9d\x8f\x0d\x81\x9c\xe5\x48\xee\xb9\xd9\xcc\x1b\x4f\x9d\xbf\x60\xc1\x99\x3f\xdd\x85\xde\x2a\x8f\x12\xdd\xc9\x65\xd7\x5c\x7a\xe6\xdc\x81\x01\xb9\xa2\x5d\x86\x7b\x36\x85\xc2\x05\xef\x6c\x94\x69\x87\xbf\x51\x44\x28\xb2\x6f\x35\xdd\xbe\x96\x4d\xd7\x44\x57\x92\xea\xc9\x76\x3a\xc3\x05\x69\xa7\x66\xde\x12\x18\x3b\xc5\x3d\xae\x87\xa1\x02\x03\x7d\x23\xc9\xe7\x28\x64\x27\x09\xa1\xbd\x1b\xa1\x97\x91\xe0\xc1\x64\x66\x58\x9a\xfc\x20\xe5\x7e\xea\x76\x07\xe3\x2d\x06\xd9\x32\xdc\xa4\x30\xf6\xc6\xed\x0c\x8a\xdd\x7c\xf1\x13\x02\xe7\x05\xba\xc7\x70\xe2\x90\xce\x04\x99\x19\x59\x7d\xaa\x00\x88\xc4\x23\xbb\xf0\xfd\x54\x35\x0c\xe1\x6f\x44\x39\x8b\x5c\x3c\x5c\xa1\x64\xe7\x47\x5c\x41\xd4\x5a\x1c\x0a\x70\xa4\xdd\x76\xb0\xcc\x11\x74\xe5\xdb\x35\x54\xef\x34\x0b\x02\xda\x9c\x17\xf2\x11\xd6\xa1\xec\x69\x9e\x14\xca\x7e\xa6\x90\x06\x21\x07\x3a\xe5\xe9\xc2\x19\x05\x7c\x19\x02\x4b\xb4\xe5\xec\x0b\x2e\x67\x11\x39\xfc\x7e\xc3\x76\xa2\xb0\xa3\x4f\x0c\x41\x22\x56\x90\xdb\xee\x58\x84\x74\xf5\xd1\x26\x93\x70\xa6\xbb\xc5\x4a\x79\x2a\x7a\x19\xfe\xd4\x46\x40\x2b\x2f\x94\x81\xd9\x6a\x20\x0a\xd1\x48\x48\x07\xd9\x3b\x6c\x0c\x9d\xa8\x5a\x75\x39\xc5\x4a\xc2\x9b\x27\x08\xbb\x66\xb1\x39\x8a\xc0\xee\xa5\xd1\x2b\x85\x79\x99\x23\xe4\x9c\xae\x1b\xf8\x76\x11\x54\xc9\xde\x7c\x84\x19\x82\xde\xcf\x35\xba\xb1\x43\xc4\x84\xcb\xa3\x1c\x75\x1a\xac\x35\xc1\x1b\x56\xcb\x5e\x24\xf8\xac\x69\x17\xd1\x9f\xfe\x80\x78\x5b\xf6\xc4\xe8\x59\x36\x0b\x00\x88\x70\x32\x5d\x75\x9e\x1a\x9a\x48\x24\xdc\x5a\xf9\xa7\x51\xce\x5f\xfd\xbe\x1f\x01\x3c\xbe\xf3\xfb\x7e\xdb\xef\x5f\xe8\xfa\x3e\x5f\xf8\x57\x7f\xfb\x3f\xf8\x3d\x9f\xf9\x1b\xbf\xe7\xef\xfd\xa4\xff\xfa\xcb\xff\xfa\x97\xfd\xfa\x5f\xf5\x87\xfe\x1a\xfe\x39\x7f\xf8\x6f\xbb\x7f\xf7\x4b\x3e\xeb\x1f\xff\x98\x4f\xf8\x84\x2f\xfb\x4b\xff\xdc\xe7\xff\x84\x4f\xf8\xc8\x2f\xbe\xe5\x97\xfd\xa8\x2f\xf8\x1d\xdf\xf8\x69\x5f\xf1\xad\xbf\xe0\x1f\xfd\xd6\x6f\xfb\x79\xdf\xf5\x53\xbe\x02\x7f\xe8\xd3\x7e\xec\x7f\xfe\x17\xc2\x97\x7f\xeb\xdf\xfb\xc1\xff\xe6\xa7\xfe\x8e\x2f\xf8\xa8\xa5\xfd\x2f\xfc\xf1\x3f\xff\xef\xff\xca\x9f\xfc\x75\x9f\xf4\xcd\x3f\xe8\x6b\xbf\xee\x9f\xfd\xc4\xff\xf4\xef\xfe\xe1\x6f\xfd\x7e\xdf\xf4\x35\xdf\xfd\x15\xdf\xff\xf7\x7c\xdd\xb7\x96\x1f\xfb\x15\xbf\xe2\xa3\x96\x7e\xe7\x4f\xff\x92\x9f\xf2\x4b\xbe\xf3\xef\x7f\xfd\x0f\xfc\xb5\x5f\xf5\xa9\x7f\xf6\x13\x3e\xe1\x93\xf3\x2f\xfa\x2f\xfe\xd0\xef\xfb\x92\x1f\xf9\x07\x3e\xe7\x97\xff\xe3\xaf\xfc\xf2\x6f\xfa\xfe\xbf\xee\xa3\x96\xfe\xfc\x5f\xf3\xff\xf9\x57\x7f\x18\xf8\x4d\xff\xc6\x2f\xd1\x9f\xf5\x97\x7e\xc6\xf7\xfb\xa6\x4f\xfc\xc6\x6f\xfb\x1f\xff\xc4\xf7\xff\x0d\xbf\xfe\x4f\x4c\xf8\x8d\xff\xce\xf7\xf9\x95\x1f\xb2\x1f\xb5\xf4\x43\x3f\xe3\x2f\x7c\xe3\x27\x7e\xdb\x77\xfc\xb0\xaf\xff\x21\xfc\x4f\xff\xe1\xdf\x7c\x7d\xe1\x67\x7e\xe8\xff\xfb\x29\x3f\xf5\xdf\x73\xdf\xfc\x67\xdb\xef\xff\x9f\xbe\xf6\xef\xfe\xcc\x1f\xfd\x51\x4b\xbf\xf2\x2f\xff\xa5\xaf\xfc\x17\xff\xe5\x1f\x32\xbe\xfb\x43\xdf\xfe\xe3\xfe\xce\x6f\xfa\xfa\x1f\xf5\xaf\x7c\xd1\xfa\x6f\xbf\xe7\xc7\x7c\xf6\xef\xfe\xb1\x1f\xfa\xf6\x7f\xe1\xdf\xfa\xae\x1f\xfd\x47\x3e\x6a\xe9\x67\x7c\xc7\x77\x7e\xfe\x1f\xf9\x56\xf9\x13\x3f\xe1\xcf\xff\xe4\xff\xe1\x3f\xf9\xb2\xbf\xfe\xdd\x5f\xfc\xb3\xcd\x1f\xfb\xe1\xdf\x32\x7e\xd8\x0f\x68\xbf\xe5\xff\xf5\x8b\x7e\x69\xfa\x8e\x8f\x5a\xca\xe8\xfd\xa5\xff\xdb\x27\xff\xac\xfc\x37\xbf\xf6\x27\x7c\xe9\x1f\xb9\x7f\xce\x4f\xff\xfc\xaf\xff\x94\xcf\xfd\xdc\x9f\x66\xff\xe0\xdf\xf8\xe2\xbf\xf8\x05\x5f\xf5\xcd\xff\xe8\x17\x7e\xd4\xd2\xbf\xff\x0f\x3f\xe7\x0f\x7e\xce\x17\xfc\xf7\x9f\xfb\x7d\xbe\xe8\x0b\x3f\xef\x57\xff\x70\xf4\x2d\xbf\xe7\xf7\x7e\x31\xfb\xf4\x5f\xfc\x33\x3e\xe3\x4f\xfe\xee\x5f\xfa\xf9\x3f\xf7\xef\xed\x5f\xf5\x51\x4b\xff\xcb\x7f\xe6\x1b\xbe\x74\xfe\xfc\x2f\xf9\xaa\xbf\xf9\x47\xbf\xe7\xaf\xac\xcf\x4c\x3f\xfc\x1f\x7f\x05\xfc\x2a\xfc\xdf\x7d\xce\x77\xfd\xe4\x6f\xd8\x9f\x37\xbf\xfd\x5b\x7e\xea\x47\x2d\xfd\xe4\x3f\xfd\x5f\xfd\xb2\x6f\x2c\xfc\x3f\xfb\x6d\x3f\xf3\x7f\xfd\xec\xdf\xf5\xfb\xff\xa3\xeb\x5f\xfa\xc1\xd7\xff\xfb\x53\xbe\xf3\xcb\x7e\xc4\x4f\xf8\x64\xf9\x2b\xbe\xee\x37\x7f\xd3\xdf\xf9\xa8\xa5\xbf\x91\xfc\xac\x3f\xf7\x6b\xf2\xdf\xff\xee\xff\xf9\x07\xfe\xf9\x6f\xfd\x8b\x9f\xf5\x57\x3e\xe9\x47\x7f\x3d\xfe\x47\x9f\xf5\x3d\x9f\xa6\xbf\xf9\xaf\x7e\xdd\x37\xfc\xb5\xef\xf8\x31\x7f\xe0\xa3\x96\xfe\xa4\x6f\xfe\x03\x7f\xf4\x6b\xbe\xf6\x07\xfe\x37\xfc\x3b\x7e\x27\xff\xe3\x9f\xf6\x19\xed\xdb\x7f\x77\xfe\x53\x9f\xfc\xe9\xbf\xfe\x17\xff\x22\xf7\xf3\x3f\xe7\x67\x7f\xf6\x6f\xfb\xc2\x2f\xfa\x27\x78\xda\xf7\x76\x59\x5e\x20\x10\xed\x14\x5c\x58\x7d\xde\x18\x65\x73\xc7\xd1\xb0\xe0\x2e\x61\x9f\xe9\x13\x18\xca\xd4\x90\x6c\x70\x32\xcb\x60\xbc\x88\x45\x94\x5f\x6f\xf8\x2f\xcc\x15\xef\xb2\x4e\x12\x57\x39\x27\x10\x93\x86\x27\x2d\x3b\xd0\xe6\x08\xf1\x6c\xe1\x66\xba\x2d\xd0\xf7\xce\x77\x7b\xee\x83\xec\x1b\x48\xd6\x28\xa9\x8b\x1b\xec\x3b\x0f\x19\x1c\xaa\x15\x82\xe1\x14\xc3\xe8\x32\x8a\x65\x18\x1e\xd3\x7a\x56\x4f\x91\x74\x1d\x1b\x14\x9a\xce\xbe\x70\x16\x8d\xcb\xd6\x47\x88\xfe\x39\xb3\x0b\x53\x90\xf7\x77\x57\xf7\xa2\x2b\xdf\x5a\xb5\xd9\xe8\x96\xa6\x9f\x05\xad\xcf\xc4\x2d\x6a\xfc\x1b\x08\xe7\x7e\x2e\xce\xed\x63\x17\xe4\x1d\xd6\xe3\x8e\xac\x70\xf1\x71\xf6\x9c\x55\x69\x18\x01\x92\x6c\xed\x95\x0c\xbc\xc1\xd6\xe5\x6e\xd7\x1b\xc4\xb2\xdd\x76\x6f\xbe\x1f\x4c\xd5\x1d\x20\x7f\x68\x8d\x58\xdd\x61\x49\x96\xc8\xbc\xb2\x4e\x0b\xc2\x81\x2e\x08\xa0\x48\xb1\xdc\x54\xb5\x37\xb2\xb1\x01\xc1\x6d\x3a\x61\xa2\xaf\x87\x45\x90\x4c\x2f\x31\xa9\x67\x5a\x6c\x37\x01\x62\x4b\x1a\x83\x58\x6a\xe3\x91\xb5\x27\x6e\x17\xfe\x0a\xb1\x6c\x5c\x6e\xae\x6e\x6d\x2d\x80\x35\xa9\xdc\x23\x8f\x22\x48\x40\xf5\x5c\x67\x0d\x2b\x87\x88\xf5\x40\x34\x3a\x7d\x2a\xb8\x64\xf6\xaf\x64\xe9\x8e\x02\xc9\x26\xf4\xca\x72\x6f\x3a\x20\xcf\x74\x18\xdc\x1c\xd4\x8b\xc1\xde\x8b\xbc\xf6\x4a\xce\x31\xab\x6e\x29\x49\xcd\xe5\xbc\x10\xfb\xb3\x26\x6a\x0e\x02\x91\x76\x0d\x29\x8c\x6e\xca\xac\x95\x46\x19\xa2\xd0\x33\xad\xdf\x3c\xee\xd1\x88\x24\x8b\x91\x3b\xc2\x1a\x73\x7d\x83\xa2\x11\x24\x6a\x69\x10\x2f\xb4\x47\x72\x4c\xce\x65\x63\x4f\x6a\xb9\xf7\xda\xbb\xa5\x97\x2e\xaa\xc3\x89\x56\x13\x04\x13\x84\x10\x38\x6f\x14\xb5\x18\xab\x67\x00\xab\xa8\x34\xab\x8c\xfb\x9c\xe7\x21\xd0\xca\xc7\x20\x7a\x85\xd2\x56\xf6\x72\x9f\xb0\xec\x63\xb2\x67\x69\xf1\xfe\x0a\xda\x3b\xec\xa6\x91\xf0\x72\x9b\x7e\x0e\x24\xb1\x9e\x96\x22\xd2\xf3\x99\xd1\x3f\x65\xb5\x56\xcc\x18\x98\x26\x96\x72\xc8\x83\xad\xc3\xdf\x20\x47\x94\x03\xa0\xce\xfb\x12\xb5\x1f\xce\xa7\xe3\xe0\x46\x16\xc7\x36\xce\xed\x9d\x6e\x19\xec\x95\x76\x27\xbc\x3c\x9a\xd3\x7b\xe4\x7b\x8b\x37\x32\x10\xc6\x13\xda\x1a\x51\x0a\xee\xd1\x95\x7b\x0e\x5d\xc5\xc0\x0e\x06\x6e\x7e\x25\x6e\x0d\xc0\x62\xdf\x60\x58\x5a\x76\x13\x7d\x82\x17\xfc\x08\x45\xcd\x67\x9d\xcd\x7e\x84\xa6\xdc\x55\x26\x4e\xa0\xa0\x2d\xac\x8c\x34\x49\x3c\x02\x79\x79\x43\xb4\x90\x6a\x29\x26\x00\x88\xb9\xdf\xb8\x9d\xd0\x14\x7e\x17\x5c\x2c\x6e\x53\xd9\x0f\x2c\xc3\xc4\xf4\x02\x5d\x86\x74\x4a\x57\xce\xa9\x12\xef\x76\x35\x2b\x9f\x4a\xda\xa5\xed\x7e\xa3\x0a\x50\x2f\x86\x5a\x83\x25\x4a\xe4\xe8\x33\x56\xf7\x26\xc4\x06\xec\x15\x5d\xb6\x03\x18\x00\x81\x7a\x90\x93\xe8\x61\x6d\x51\xe6\x82\x7b\x83\x64\x57\xc6\x33\xc1\x69\x8d\x46\x56\x71\x4a\x4d\x0a\x3b\xb5\x12\xb8\x51\xb3\x6d\x5c\x33\xda\x8d\x50\xd4\xe8\xb8\xee\x1e\x10\xf0\xca\x6f\xc4\x17\x5a\xf5\x76\x5f\x71\xc7\x60\x8f\xbc\x68\xb4\xdd\x98\x0a\xef\x3b\x0c\xe7\x50\xb1\xb9\x83\x71\x97\x78\x66\x5d\x1e\x5a\x36\x69\x33\x6f\x14\xc1\x67\xcc\xe1\x94\xe3\xac\xb1\xc5\xde\xd4\xf3\xa9\xe8\x0c\xda\x3b\xee\xef\x9b\xde\x70\x4f\x48\x34\x77\x57\x1e\xd7\x05\x76\x5f\xe1\x95\xdb\x39\x56\xd0\x80\x85\xdd\x5a\x6b\xac\x65\xc0\x49\xb5\xe7\x19\x26\x5a\x94\x2a\xe1\xf2\x32\xc8\x99\x86\xae\x4b\x64\x2b\xe8\x87\x6b\x22\x2f\x9c\xc5\x63\x89\xd0\x4d\x2e\x2e\x7a\x04\xdc\x82\x38\x1e\xac\xe4\x74\x19\x4b\x5f\x69\x36\xa5\x62\x89\x6e\x1a\x9a\xd6\x19\xc2\xc1\xfb\xf5\xc2\x1b\x61\x5d\x63\xad\x9d\x6e\xfc\x6e\x5b\x2a\x95\x25\xb8\x20\x7e\x32\x98\x57\xa6\x8b\xb3\x3e\x5a\x7e\xd4\x2d\x80\x40\xd6\x21\xec\x82\xa1\x6f\xd4\xa8\xca\x23\x56\x3f\xa2\xd6\x46\x2e\x0e\x1f\x68\x81\x58\xdb\x5c\x0f\xd2\x84\x3e\xae\x5a\x7d\xdd\x85\x03\x3c\xc1\x35\xcd\x50\x9a\x0b\xfe\x06\xbd\x8d\x5c\xd7\x5c\x15\xdd\x1c\xdf\x30\xc4\x79\x91\x53\x68\xec\x62\x48\xda\x94\x2c\x40\x51\x53\xe3\xb5\x31\xd1\x04\xc1\x1c\x35\x54\xee\x85\x7b\x41\xa9\x9a\xea\x7a\xbc\xbc\x74\x6c\xb0\x2a\xb0\x36\xba\xcb\xde\x11\x52\x27\xa1\x0b\x70\x94\xfe\x6c\x5f\xee\x7c\x34\xa4\x36\x33\x7b\x5e\xf0\x66\x54\x6a\x01\x73\xc5\x8d\xce\x6c\xfa\xa2\x6a\x1d\x7b\x40\xe1\x4c\xb2\x70\xd3\x71\x9a\xb4\x85\xc4\xa3\x7b\x1f\x0c\x31\xba\x15\xb5\x6f\x50\xfd\x60\xdb\x91\x3e\x3c\xa6\x5a\x7b\x7f\xb0\x6f\x78\xa2\x26\x59\x33\x81\x2d\x68\xd1\x7a\x1a\x56\x21\x81\xa8\x76\xbf\xae\x71\x69\x63\xc0\x1b\x6f\xa4\x3f\xab\x7b\x2f\x06\x0f\x9e\x78\x1f\x4f\x40\x91\xc5\x45\x37\x90\x67\x37\x34\xb0\x1b\x3c\x51\xa6\xa1\x6e\xeb\xa6\xd0\x6c\xfa\x46\x6e\x36\x74\x85\xca\x5d\xa4\xc5\x35\xed\xe2\x6b\xdc\xfe\x3a\x76\x5f\xf5\x1a\xeb\x92\x74\x65\x80\x8a\x42\x28\xdc\x4f\x10\xcf\x55\x2d\x65\xaf\xd4\xf7\xa7\x24\xc2\x52\x29\x4e\x57\x1b\x96\x8a\xb2\x0e\xf8\xcc\x00\x3b\x76\xd7\xce\x7b\x60\x4f\x98\xa4\x3d\x51\x8c\x9e\x7a\xd5\xce\xf8\xc7\x10\x88\xbe\x37\xc8\xeb\x05\xc0\x63\xb1\xec\x45\x1b\xf2\xe6\xd8\x1d\xab\xd8\x19\xa0\xd0\x34\x26\x5b\x8b\xf9\xe5\x54\x1f\x97\x0d\x77\xb5\xd9\xe9\x4c\x24\xc7\xf9\x8d\xa2\x16\x7d\x46\xa9\x57\x21\x2c\x0a\x89\xda\x69\x96\x04\x36\x37\x66\xf0\xd9\x83\x25\x36\x8b\xdd\x3d\x9d\x23\x4f\xf7\xf7\x23\x13\x4c\xfc\x0d\x63\xcb\xd2\xd0\xe2\xbe\x62\xe4\xd5\xe7\x44\xf0\x65\x0c\x8d\x92\x0c\x04\x0b\x38\x71\x5c\x45\xdc\xb2\x68\x1f\x1f\x19\x61\xd2\xd3\xd8\x63\xdf\x30\x73\x02\x0e\x5e\xa2\x1e\xb0\x4a\x4b\x07\xd4\x94\x2d\x05\xa3\x6a\xab\x35\x54\xf8\x70\xe3\x1a\x09\xb7\x05\x6f\xd0\x34\xc2\x8a\xca\x37\x0a\x7c\x74\x62\xbc\x37\x11\xe1\xcc\xe4\x6f\xa0\x3c\x59\xe1\x3a\x4b\x3c\x48\x57\x4d\x03\x73\xc9\xaf\x09\x7c\x51\x78\xec\xc6\x32\x4e\xf7\x7e\x83\x1c\x51\xb9\xbb\x05\x4c\x8e\xf4\x9d\x70\xb0\x36\xb6\x06\x6b\xb0\xea\x5c\x31\x2c\x11\xd9\xda\x7e\x99\x4e\x2d\x5a\xae\x22\xba\x50\x7a\xe5\x8b\x04\x45\x7b\xb4\xb7\xca\xdd\x3c\x75\xa9\x13\xb6\x41\xde\x41\x51\x64\x91\x23\x9f\xc5\x24\x43\xa6\x26\xc9\xc0\xd6\x12\x84\x86\x33\x7c\xa3\x6f\xab\x18\xa0\x4e\x07\x19\x24\x31\xf8\x23\x07\xf0\x91\x24\xd6\xe1\x5c\x35\x4d\xbb\x8b\x2d\xe3\x5a\x6b\xdd\x15\xb9\xcc\x1a\x30\xf5\x0d\xc7\x73\xa9\xf5\x68\x99\x7c\xf1\x18\xe4\x15\x00\x9e\x7c\xc9\x4e\x0b\x11\xf8\xe8\xab\x5f\x1d\x06\xd4\xef\x69\xa8\xc1\xb5\xe4\x72\x25\xf3\x82\xb1\xa5\x64\x9f\x23\x2e\x97\x9b\x5d\xd4\x4b\x57\xfd\x99\x77\xa1\x63\xe9\xc7\x83\x8a\x08\xa5\x8f\xe8\x30\x80\x2d\x07\x1b\xd1\xa8\xa9\xdf\x00\x05\x29\x5b\xf6\x42\xfd\x94\x83\xa1\x30\xb3\xdb\x42\xaa\x6f\x68\xd8\xf1\x60\x24\x07\x32\x4a\xf7\x20\xb7\x14\xa0\x63\xc6\xf7\x5d\xdd\x1b\x44\x11\xaa\x8c\x5b\xf0\xc9\xeb\x39\x69\xc0\x9d\xf3\x39\x09\xdb\x19\x06\xdb\xcf\x31\x11\xf5\xc1\x9e\xdb\x77\x7a\x99\xa1\x47\x9d\x4c\x53\xfa\x06\x34\x49\x8b\x18\xbe\x68\xb9\xd0\x9a\x18\x19\x62\x52\x70\xa3\x2f\x51\x20\x35\xcc\x80\x33\x8b\x25\x8e\x13\xdb\x01\x9c\x8f\x46\xae\xd5\x37\x92\xb9\xe7\xc6\x29\xf1\x07\x65\x68\x81\x4f\x70\x3d\xbd\x58\x65\x55\x54\xec\xec\x1d\x15\xd8\x0f\xb9\xb3\x6b\x02\xb8\x23\x03\x81\xf4\xd8\x37\x00\x8f\xfd\x2c\xcc\xf0\xda\xb8\xcb\x08\xc7\x01\xad\xa4\x75\x22\x09\x97\xac\x6a\x05\xbd\xc8\xd2\x76\xf7\x6b\x1c\x0b\x14\xa2\x22\x66\xf6\x42\x29\x9e\x9d\x00\xd2\x09\xd5\xd5\xfc\x61\x34\x8a\x90\xc8\xa9\x6f\x1d\x05\x8b\x76\x33\x00\x57\x5f\xd5\xa1\xbe\x68\x6b\xe7\x71\xd0\x38\xf6\x46\x70\x86\xd8\x05\xe1\x00\xe0\xbe\xd2\x54\xe5\x0a\xcf\x51\x07\xad\xcd\xd4\x75\x1d\xc5\xf2\x6a\x70\x4d\xcb\x58\x92\xf8\x71\xae\x2b\x74\xbd\xd2\x87\xf1\x58\x89\xa8\x9e\xa2\x4b\x36\x0e\x8d\xae\x33\x4b\xa6\x69\x11\x70\xb3\x11\x10\x25\xd6\x65\x0f\x7e\xca\x8e\x30\x5f\xf2\x54\x68\x5f\xa1\xfa\x01\x19\x7d\x71\x97\x33\xc5\x6e\x6f\x69\x0d\x2b\x01\xba\xe9\xa4\xcd\xb3\x50\x9f\xd6\xb1\x54\x4f\x7e\xd4\xb1\xb7\xb7\x8b\xb6\xfc\x06\xf8\x53\x48\x5a\x46\x49\x61\x92\x5e\xeb\x32\x64\xdb\x16\xc6\xcd\x81\x87\x7c\x6b\x04\x85\xd1\x1e\x76\x6d\x84\x8c\x1e\x1f\x4d\x71\x72\x6f\x10\x45\x8e\xc3\x8f\x15\xf6\x49\x57\x53\xde\xc8\x27\xea\xe6\xb9\xfa\xe0\x09\xa3\xf9\x40\x93\x8a\x42\x31\x90\x39\xd4\x7d\xd5\xa6\x40\x34\xf5\x8d\xfe\x5f\x0d\x62\x11\x25\x66\xe9\xc8\x6a\x09\xa9\x33\xfa\x3d\xb6\x00\xec\xb9\x4e\x3e\x91\x3d\x40\x88\x6b\x84\x7a\xa5\x0b\x73\x16\x43\xdb\x6f\x9c\x45\x5f\xf5\x0e\xc3\x25\x81\xa5\xe7\x97\x4e\x18\xf4\x0f\x02\x5d\x72\x47\x5c\xb9\x66\x73\x0d\xeb\xa9\xd0\x4e\x6b\x37\x41\x20\x7e\xfa\x37\xca\x7d\xcf\x40\x04\x08\xbe\x85\x55\x83\x43\x47\xba\x56\x8a\x8f\x5c\xa1\x29\xbe\x73\x9d\x67\x1a\xb7\x8e\x76\x07\x1f\xa7\xcc\x0e\xf0\x57\x28\x5d\x4f\x95\xb2\xf1\xab\xda\xb1\xee\xa7\x2b\x74\x1a\x28\xb0\x86\x3b\x19\xd5\x21\x05\xc1\x79\xab\x2f\x04\x67\x78\x1c\x7c\x24\x0b\xf8\x8d\x88\x8f\xe9\x27\x98\xc1\x2a\x6e\x1e\xa6\xe6\xe0\xa3\xb4\x7f\x30\x90\xde\x45\x5b\xbb\xdb\xc9\xe6\x3b\x58\x78\xf5\x71\x85\x8b\x61\xa8\xc9\x1b\xd4\x60\x86\x0e\xe7\x72\x1a\xac\x3a\xe5\x26\x64\x2b\x9e\xe0\x9f\x7a\x12\xa3\x2a\x4e\xe9\xba\xc4\x2c\x33\x76\x8c\x2c\x93\xe6\xa0\xbb\x00\x6f\x64\x02\x56\x78\x0f\xd6\x11\x05\xf2\x87\x00\x7c\xdb\x85\xfc\x25\x48\x53\x39\x18\x59\x11\xaf\x49\x13\x7a\x65\xc0\x3a\xe6\x69\xa7\xc5\xf9\x1b\x51\x8e\x5b\xc2\x72\xdd\xfa\xbd\xaf\x92\xea\xb8\xb4\x1d\x4e\x50\x7a\x47\xb0\x9e\x6b\xec\xdb\x10\xc5\x5c\x10\xc4\x4b\x73\x2d\x15\xa9\x3f\x6f\xbc\x54\x2c\xca\xbd\xe1\xad\x37\x47\x59\x65\xdc\x7d\x89\x25\x3d\x81\x55\x4d\xb3\x07\xa6\xb5\xa7\x67\xac\x5c\x88\x97\xf6\x99\xdb\x3d\xf3\x2b\xbd\xd0\x84\x5c\x60\x9c\x74\xb8\xbc\x34\x37\xe9\xd8\xda\xb7\x2d\x5d\xb9\x70\xcf\xfc\x10\x4f\x1f\xb4\x09\x92\x9d\x82\x0a\x1e\x5e\xaf\xfb\x15\x52\xee\x7e\xa6\x3b\x91\x85\xcb\x38\x06\x81\x05\x1b\x54\x0e\xb6\xbf\xb8\x22\xc9\x1c\x4c\xe2\xd3\x7a\xb2\x8d\x00\xfe\x98\xaa\x90\xa7\xf4\x63\x00\x8f\xef\x8d\xb8\xf3\x02\xe0\x11\x76\x7a\x50\x7d\xb4\x8f\x16\x43\x15\x2f\xd1\x09\xa1\xc7\xee\x70\x0d\x89\x9b\x89\x0d\x0c\x85\x54\x83\x38\x1d\x90\xd8\x10\xea\x0d\x59\x14\x8a\x98\x3e\x0e\x7a\x23\x05\x6b\x30\xd0\xd4\xd5\x15\xd6\x84\xd6\x63\x76\xea\xaa\xd7\x62\x6a\xb2\xb8\xf3\x0d\x01\x81\xd2\xd8\x8b\xbf\xc1\x25\xb6\x47\xb0\xdc\xe6\x63\xab\xb0\x8a\xc5\x96\x64\xd2\xb7\xb0\xbb\xf7\xe9\x2f\xc3\xdd\x3a\x4c\xa5\x52\x81\xf2\x9d\x02\x54\xbd\xbb\xde\x78\xda\xb2\x65\x3d\x96\x73\x3c\x1c\x22\xc7\xa6\xd7\x72\x91\x2b\x4a\xfb\xa0\xa4\xd5\x2e\x3a\x58\x8f\xb7\x37\x45\xea\x6c\xf7\xdc\xb6\xd7\x37\x1c\x8f\x04\x04\x70\x02\x4c\x59\x63\x04\x6b\x9e\xe8\x68\x9a\x75\x6d\x50\xa9\x06\xc1\xe2\xda\xef\x73\x01\xb7\xae\x56\x04\x17\x4c\x5c\x16\xbd\x01\x41\x15\x68\x2d\xb9\xd0\x86\x41\x0a\x21\xf0\x14\xfe\x18\x65\x62\x19\x46\x4b\x4c\x77\xbd\x96\x0b\xc4\x72\xdd\xef\xf2\x41\x2a\x31\xef\x37\x00\x8f\x99\x5b\x5a\x09\x92\x27\x17\x4c\x6a\xe9\xb4\x1a\x88\x8d\x82\xc3\xf0\x80\x95\xf4\x4e\x21\xd3\x40\x2f\x5a\x48\xbc\xd8\x75\xb5\xfc\xc2\x59\xd0\xfb\x4c\x85\x78\x1e\xe2\x24\x79\xac\x0b\x87\x07\x72\x82\x6c\xb1\xdc\x34\xc3\x01\x8a\x18\x38\xf5\xfd\x24\x9d\x9b\x9b\x4f\x4e\xfe\x05\x33\xc7\x18\x80\x92\x69\x07\x1c\xbf\xf0\xd1\x0c\xa2\x7e\x5b\xef\x20\xa6\x09\x77\x46\x99\x46\x26\x30\x5f\x10\x22\x8f\xbc\x3b\x52\x51\x5d\x6f\xb0\x5d\x66\x62\x02\x78\x91\xbb\x53\x13\x37\xf3\x94\x55\xa8\x3f\x41\x79\x00\xc9\x63\x79\xe4\xf0\x2e\x6b\x5d\xb2\xeb\x53\x40\x53\x8d\xbf\x52\xfb\xf0\xbe\xcb\xa1\x8c\x1c\x48\x46\x1b\x74\x74\x65\xbb\xd5\xa0\xc7\x38\x5f\x62\x77\xd5\x03\x6f\x44\xdd\x5d\xaa\xcb\x09\x83\x2b\xb1\x6f\xd8\x4e\x42\x73\x68\x44\xd8\x49\x4d\xbf\x3b\xd3\x20\xf8\xca\xbc\x68\x49\x88\x9e\xb6\x41\xb4\xd1\xc0\xce\x06\x06\x6e\xe5\x6e\x6a\x63\x7e\x23\xbd\x8e\x19\xdf\x50\x3f\x72\x4f\x4e\x53\x81\xde\x9f\x7a\xf5\xe4\x4b\xaa\xad\xdc\xe0\x94\x15\x15\x95\xea\x06\xe1\xd6\xb7\xeb\x20\x0b\xf6\x86\xbd\x78\x04\x88\x33\x90\xac\xdc\x73\x5d\x04\xda\x26\x12\x46\x7c\x5d\x0f\x6a\x35\x32\x6c\x05\x41\x69\x09\x0b\x53\x0b\xe3\xe0\xb3\xc6\x1b\xd5\x28\x66\x67\x38\xf2\x31\x66\x11\xe5\xfc\x10\x2b\xdf\xf7\x04\x2d\xc8\xc7\x3a\x77\x39\xb7\x29\x55\xb7\x9d\xf5\xd1\x96\x78\x54\x9e\xcb\xd3\x37\x12\x5b\x65\x79\x18\xed\x20\x34\xc7\x1c\x08\x0f\x7c\x0d\x82\x5a\xd6\xc7\x0e\xaa\x8b\x6a\x53\xf4\x50\x32\xbb\x8f\x4f\x92\x96\xce\xb5\x7b\x23\xa5\x44\xe2\x79\x84\x2c\xb7\x02\x0f\x3d\x00\x95\xd5\x29\x84\xbc\x58\x32\x53\x81\x3b\x5d\x93\x8c\x8d\x91\x66\x46\xe2\x28\x31\x10\xd0\xbc\x61\xb5\x34\x95\x1a\xd3\xd5\xf3\x0d\xbd\x9a\xcc\x82\xb8\x8b\xb0\xbd\x39\x77\xf9\x76\x30\xa1\x6d\x98\xb1\x59\xd9\xf7\x95\xd7\xc5\xc7\xe5\xdf\x08\x54\x1b\xc0\xc9\x42\x56\xa7\xef\xf1\xe0\x68\x22\xe5\x87\xd9\x7d\xe5\xc3\x04\x9e\x1c\xf8\xc4\x17\x58\x3c\xe5\xa3\xdd\x5a\x34\x5e\xaf\xf4\xf3\x1d\x1a\xe1\x8d\x82\x1e\x63\x4b\x54\xd4\x68\x9d\x6e\xb5\xd7\x5e\x05\x71\x9d\xe6\xe5\xaf\x78\xb2\xc3\x40\xf0\x0e\xda\x3c\x12\x95\x37\x6c\x27\x72\x0b\xd3\x12\x29\xcd\x08\x84\xad\xb4\x6b\x66\x6c\xd4\x58\x2d\x53\x3e\x99\x8b\x9a\x8a\xad\x56\x44\x0c\x29\x3b\x2c\x0d\x57\xde\xb8\x17\xcb\x05\x3d\x78\x0d\xd1\x5e\x62\xb5\x39\xdc\x7a\xa6\x95\x78\xe1\xe1\xdd\xc9\x3a\xdf\x04\x1e\x9d\x78\xa1\x42\x41\x83\x05\xec\xaf\x08\xe1\x05\xe2\xf1\xee\xb2\x35\xeb\xbc\x7e\x10\xc2\xa2\xcd\x48\x8b\x3c\x4a\xcd\x98\xc1\xed\x4b\xbf\x74\xec\x37\xad\x37\x81\x31\x9f\xc6\xdf\x48\x60\x1e\x9d\x8c\x3b\x65\xe5\x5c\x45\xe6\x61\xf9\xfb\x83\xdc\xa9\x4b\xf3\x94\xe3\x01\x6c\x2d\x37\x98\x4c\x5e\xd9\x40\x86\xf4\x50\xe0\x15\x8e\x9e\x60\x1a\x95\xc7\x43\x4a\x72\x03\x75\x07\x5d\x46\xd7\xb0\x01\x61\x6e\x10\xfb\x82\xd0\xee\xd1\x66\x42\x1f\xb8\x5e\x7e\x80\x96\xf6\x8d\x37\xe2\xe5\xf3\x98\xee\x28\xba\xee\x3b\xee\x9a\xab\x53\xe3\x83\x88\x47\xd1\xa0\x85\x9e\x51\xef\x89\x8d\x08\xa3\xe4\x7c\xdb\x0f\x6c\xe7\x1b\x60\x31\x7d\xb6\x3a\x01\x85\x9b\xb0\x82\x90\x09\x50\x98\x7b\x46\xd4\x1b\x4b\x6a\x1e\xad\x28\xc3\x56\xdd\x52\x3d\x5a\x66\xce\x0d\xca\x04\xbc\x71\x16\x00\x63\x17\x6f\xdf\xa0\xd2\x32\x5c\x3a\x01\xf6\x14\x55\x87\xd0\xa3\x5c\xfd\x26\x45\x03\xc0\xbb\xdc\x65\x60\xdb\x22\xb8\x95\x78\xa5\x3f\x07\xf4\xb0\x20\x02\xd4\x1f\x2f\x55\x42\x4e\xc4\xc1\xea\x7d\xd1\x7c\xaf\xc7\x06\x8c\x73\x6e\x1e\x45\x54\xeb\xec\x17\x6c\x37\x40\xec\x8d\xdc\xac\xef\xb1\x52\xa3\x63\x64\x0b\x9e\x2b\x6b\x39\xdb\xa4\x70\xc5\xa3\x82\x1a\x97\x01\x62\x25\xdd\xfd\x34\x46\xf2\x39\x8a\x6a\x06\xbc\x51\xfa\xa4\x91\x9d\x33\x36\x83\xa5\x79\x86\xae\x07\x62\x51\x69\x11\xfc\xe6\xfc\x96\xa2\xf8\x71\x15\xed\x98\xfe\xe0\xcf\xc0\x92\x04\xe4\x3b\xf6\x22\x98\x24\xb2\x9b\x39\x0c\xbd\x2e\xab\x64\x68\xa4\x08\x3b\x37\x7a\xb2\xe4\xf5\x29\x5c\x50\xe2\xa2\x01\x18\x5b\xf3\xc1\x7f\xb6\xfb\x18\xc0\xe3\x7b\x6b\x3f\x7a\x41\x22\x26\x38\x37\xeb\xa3\x64\x6c\xe7\xc2\x07\x0b\x7a\x5b\xf1\xb4\x07\xb7\x83\x71\xf0\x60\x56\x03\x61\x99\x99\x44\x49\x0b\xf5\x1d\x8e\x37\x34\xeb\x18\x7e\xaa\x21\x33\xa9\x07\x26\x00\xfc\x87\x15\x50\xb6\xf0\xb2\xd7\x82\x39\x38\xa9\x4f\x31\x8e\x05\x49\x65\xdd\x12\xc2\x1a\xb3\x57\xf0\x3b\x70\x02\xd1\x48\xb8\x4d\x37\x4d\xca\x9d\x34\x5a\xbe\xc8\x5d\x55\x5e\xdc\x3d\x36\x51\x55\x41\xaa\xda\xb3\x3a\xec\x8c\x84\x0f\xf7\x46\x28\x70\xd2\xbd\x1e\xc9\xa0\x12\xcc\x9f\x2b\x29\xd6\x93\x1c\x46\x0c\x09\xc6\xe0\xb3\x2a\x0c\xe3\x15\xba\x16\x9e\x5c\x8f\x02\x1d\xea\x37\x2a\x30\xac\xf7\xaa\x93\x73\x05\x27\x51\x02\xc0\x30\xe3\x28\x61\xc3\x4a\x80\xba\xf3\x26\xb0\x63\xe0\x8c\x5b\x7c\xeb\x5b\xc3\x78\x8d\xd6\xde\xa0\x65\x87\xac\xc9\x00\x82\xc1\x76\x2e\x70\xf9\xd1\x05\x8e\x32\x04\x47\xd9\x1d\x9d\xc4\xcf\xde\xcf\x76\x1f\x04\x8e\x9b\x37\x7c\x44\x39\xec\x0d\xfe\x51\x24\xb0\xfa\xfa\xa4\x23\x7a\xeb\x58\xdc\x19\x7b\xb7\xaa\x78\x22\xf5\x84\x32\x00\xb8\xa0\xfe\xc1\x2a\xeb\xaa\xf3\x04\xde\x35\xfa\xc6\x2e\xbc\x00\x51\x07\x0c\xd8\x80\x53\xa8\x61\x1b\x47\x59\xdf\x81\x65\x66\x40\xf6\x10\x3e\xf5\x1a\x4a\x58\x1b\xe2\x43\x64\xdf\x62\x81\x37\x60\x97\x88\x6e\x66\x1f\x42\xfc\x65\xe0\xe3\x01\xd8\x8e\x0c\x6e\x80\xa5\x09\xec\x83\x37\x45\xa6\x41\x0d\x05\x10\x5e\xc5\xb1\x35\x16\x77\x7a\xe1\x76\x2a\x54\x31\x32\xb9\x93\xa4\x4d\x71\xd6\x3f\x08\xd8\xc8\xa7\x72\xfd\xd0\xae\x2b\x37\xb8\x3c\x1a\x3e\xe9\xc6\xba\x90\xbd\x30\x7c\x83\x67\xc2\x08\x2a\xd2\x73\x6a\xd4\x2c\xb7\x3d\x65\x2c\x2e\xf1\xcc\x79\xa7\xa8\x6f\x53\x84\xb5\x64\x3c\xa3\x3d\xbc\x2e\x18\x64\x6d\x94\xbc\x11\x22\xd2\xcb\x0e\xa1\x81\x12\x45\x21\x54\xb4\x76\x1e\x33\x79\x16\xc3\x97\xbd\xe1\x7e\x2a\x23\xb1\x3d\x60\x92\xa2\x33\xe2\x54\x35\xc3\xe9\x0b\x64\x4f\x7a\x81\xa0\xd5\x45\x19\x56\x49\x59\xb1\x52\x70\xb0\x86\x58\x32\x21\x89\xfa\xec\xeb\x3a\x2e\xa9\xc8\xef\x21\x87\x83\x06\x84\xc6\xde\x20\xca\x07\x67\x44\x84\x20\x30\xb7\xf0\xe3\x04\x68\xb2\x5e\x85\xc9\x22\xab\x27\x81\xad\x80\x12\xc7\x2c\x62\x98\xd8\xa0\xca\xeb\x9b\xbc\xd2\xa0\x29\x91\x24\xa8\x37\x60\x32\x94\x0f\x3e\x68\xd1\x11\xd6\x7c\x10\x80\xd0\x9e\x6e\x6d\x06\xab\xf7\xb8\x13\xb9\x55\x0e\x93\xb2\x9b\xbe\x21\xce\xf2\x3c\x19\x4e\xb3\x3c\x4d\x93\x25\xe5\x11\xd5\x0c\x3c\x00\xe7\x78\x17\x02\xa3\xdf\x1b\x53\x07\xec\xbe\xe8\xd1\x16\xb6\xb6\xc4\x7e\x83\x11\x66\x4d\x8c\x06\x3c\xb0\xce\x23\x48\x07\xfa\x06\x72\x18\x66\xaa\x11\x8f\xea\x98\xd6\x63\x79\x08\x23\xc8\xb0\x6d\xd8\x25\x53\xd2\x5e\xb0\x17\xb4\x6a\xe6\x18\x24\x1c\x35\x78\xf6\xad\x39\x96\xcd\xb3\x7b\x5e\x07\x96\x4b\x3c\x77\x36\x70\x5e\x70\x65\x71\xb9\x0a\xa5\x72\xd4\xb8\x37\x8a\x08\x88\xcd\x58\x34\xbb\x7b\xc7\x20\x02\xa1\xd8\x58\x9c\x6d\x42\x6e\x16\x2e\xb3\x50\x92\xc0\xb6\xd6\x79\xbb\xb9\x1d\x72\x62\xcf\x5e\xa9\x1b\x53\x0e\x27\xed\xea\x39\x12\x8b\x79\xd1\x9c\x15\x87\x69\xdf\x0a\x2f\xa6\xd3\x6a\x66\xd8\x81\xa4\x4d\xd7\xea\x56\x0e\xb5\x8b\x37\x6f\x04\xed\xf3\xc9\x01\x1f\x7c\x7c\xb6\xd0\x4f\x75\x15\x5c\x48\xc9\x5e\xb1\x11\x0a\x59\xe4\xee\x6a\x1f\xda\x54\x2a\xdb\xcb\x61\x6e\xb8\xd8\x1b\x50\xc3\x48\x46\x84\x23\x27\x3f\x49\x9f\x9b\xbb\xc7\xb8\x41\xda\xe3\x9f\xd4\xfb\x1d\x54\x79\x90\xc3\x69\xf0\x0e\xc4\x63\x1b\x55\xd8\xda\x37\x84\x27\xa4\x3a\xa6\xe5\xe1\x36\xf5\xc3\x4e\x76\x82\xd4\xe5\x91\x91\xbb\xe8\xc3\x8d\x08\x05\xc2\x48\x12\xb1\x7c\x4e\x8c\x73\xc1\x60\xe9\x1b\x7e\x24\xc8\x15\x05\xac\x23\x0a\xac\x31\x89\xd4\xdc\xb3\x5b\x77\x9e\x1c\xb4\xba\x89\x5c\x5a\xc5\x89\x37\xd4\x17\x80\x57\x53\x71\xae\x57\x64\x94\xec\x93\xb1\x65\xaa\x76\x4c\x65\x60\x85\x1a\xea\x38\x94\x0e\xf2\x47\x53\xc3\x42\xc3\xa7\xdf\x0b\xbb\x7a\xe0\x08\xb9\x9a\xd8\xe8\x0b\x7a\x9f\x6c\x6b\x84\x0d\x26\x45\x64\x66\x09\xa8\xba\x54\x78\xe1\xab\x79\x88\xf0\xd6\x77\xdb\x9a\x67\x24\x61\xa9\x46\x45\xd2\x70\x7f\x5e\x69\x32\xa2\x6b\x08\xe3\x34\x5f\x79\x74\x30\x97\xee\xa5\xf1\x34\x00\x4a\x56\x46\xcb\x0b\xc4\x82\xd0\xbd\x2e\x75\x43\x80\xda\xee\xfe\xe8\x57\x1a\x34\xd1\xdc\x17\x46\x50\xe1\xa8\x01\xb9\x6c\xb6\x62\x04\xbf\xe1\xf5\x9c\x26\x23\xaa\x22\xb7\x4e\x22\x1a\x17\x20\x29\xde\xe7\xa1\xf8\x8d\xa9\x29\x2c\x09\x37\x32\x93\x9c\x23\xd5\xe6\x19\xc0\x66\x9b\x42\x9c\x3d\xdb\x83\xe6\x53\xb7\xc5\x61\x58\xd4\xe5\x5e\xf8\x9c\xda\xa8\xe5\x6f\x30\x48\xd5\x95\x66\xbf\x6e\xa4\x29\x89\x09\xe7\x8b\xae\x83\x05\x14\x29\xf8\x19\xef\x3a\xf6\xc5\x2b\xaa\x6d\x84\x3d\x41\xe9\x06\x5a\x58\xde\xc8\x8a\xf6\x51\x17\xc1\xe9\x99\xfe\xa2\x55\xa1\x60\xaf\x53\xe6\xee\xc4\x60\x7b\x25\x30\x81\x24\x5e\x1f\x51\x4a\xb8\x1d\x3d\x67\x09\x98\xdf\xe0\xf4\x8a\xa5\xa4\xdd\x96\x3f\x3d\x8f\x6d\x7c\x5e\x84\x14\x88\x93\x2e\x9a\x39\x50\x44\x61\xb8\x3d\x1d\xfa\x81\x48\xa9\x56\x2f\x22\xf7\xfa\x18\xc0\xe3\x7b\x13\x51\x79\x01\xf0\x18\xde\xf3\x49\x2c\x4d\xe9\x79\x44\x4f\x0d\x93\xa2\xd4\x65\x38\x35\x73\xb3\xb8\x17\x67\x16\xce\x61\xf2\x72\x28\x76\xca\xb1\x66\x6f\xf4\x46\x6d\x23\xc6\x64\xa0\x1a\x90\x28\xbd\x96\x63\x99\x00\xa6\xed\x99\x70\x12\x4e\x9e\x12\x37\x92\xc2\x76\x98\x25\xc0\x9e\x3e\x55\xbd\xa2\xbb\x64\xe0\xae\xc2\x5b\xb2\x28\xcb\xd7\x45\x2f\xf1\x60\xfa\xc1\xce\x42\x13\x4e\x80\x3c\x62\x78\xb2\xbb\x35\xa3\x0f\xa6\x10\x90\xd0\x5f\x51\x05\xf3\xf3\xe9\x64\x0c\x7f\x24\xe6\xc9\xc7\x1e\xb4\xb4\x7c\x94\x1c\x18\xcc\xe6\x04\x3e\x31\x1d\x39\x8b\x89\x3a\x5f\xb9\x78\x34\x5f\x19\xb3\x92\x4a\x6b\x80\xe8\x41\x25\x78\xa4\xb4\xb1\x01\x71\x64\x37\x5c\x51\xce\xc1\xae\x7c\xe1\x67\x13\x66\x2e\xec\xc9\x86\x88\xc4\x6a\xde\xa8\x89\xed\x32\x88\x03\xa9\xe5\x72\x7b\x77\x4b\x98\x74\x41\xfa\xf4\x31\x0d\xa8\x62\x70\x64\xa0\x1f\x50\xe8\x52\x50\x72\x0a\x67\x4d\xdb\x1b\xc6\x16\x4b\xb9\x1f\x3f\x35\x03\xf7\x24\xce\x21\x25\xb2\xa7\x04\xde\x8d\xf0\xd3\x69\x12\x92\x1b\x3d\xb2\xbf\x75\x0a\x1b\x49\xc7\x36\x7f\x23\x99\xcb\xae\x64\x37\xaf\x7a\xa4\x88\xa3\x50\x98\xd3\xdc\x31\x91\x10\xa3\x33\x52\x40\x47\xb3\x39\xd5\x77\x02\xcb\xd3\x1d\x0f\xba\x95\x37\x58\x50\xae\x25\x6b\x7a\x76\x63\xd4\x07\x69\x5a\xda\x28\xac\x60\xef\x02\x59\x1d\x8f\x72\x47\xda\x6e\x35\x86\xb8\x4f\x40\x81\xa4\x50\xec\x1b\x34\xcb\xbe\x06\xc8\x1b\x62\x04\x11\xbd\x1d\x04\xda\xdc\x26\xb0\x5a\x9a\x0a\x1c\x1c\xaf\xc0\xbd\xfc\xb3\x51\xa9\x60\x43\x01\xe1\xe5\xae\x37\x1c\x4f\xec\xf1\x8e\x6b\x0b\x2a\xfa\x93\xd1\x3d\x00\x9e\x64\x92\x9b\x64\x58\x8b\x3d\xbc\xa9\xeb\x7a\x54\xea\xc6\x2c\xc3\xa1\x8a\xb4\x5c\x6f\xd0\x6f\x71\x30\x82\x33\x2f\xc5\x66\xe6\xc4\xee\x84\xb8\xf9\x02\xb7\x72\x82\xe7\xdb\x1c\x8d\xe6\x65\x7d\x6f\xf4\xa9\xb0\x3c\x25\xad\xf2\x4a\xb8\x2c\x75\x73\x27\x28\x0d\xb1\xe6\xcf\xa5\x20\xbc\x53\xca\x0d\xe9\x11\x1c\x8a\xf2\x9a\x18\x8c\xe7\x4c\xe0\x85\xad\x86\xd8\x93\xd8\x2b\x84\x68\x77\xad\x47\xf5\xfd\x70\x20\x00\x58\x08\x46\xfa\x3c\xf7\x63\x9f\xd9\x56\x79\x88\xe1\x45\xeb\xa3\x15\xf3\xcf\xd4\xfc\x46\xee\x72\xf9\x8d\xba\x31\x71\xb2\xf4\xfb\xfa\x70\xf6\xc2\x2b\xfc\x70\x33\x45\x8a\x15\xdf\xf9\x79\x94\x51\x7d\xdf\xb9\x9f\x7b\x04\x1f\x16\x0c\xa3\x64\x66\xdf\xd0\xb9\x21\x52\x5c\x28\x9d\x49\xee\xc0\xed\x7d\xb5\xb5\xcf\x15\xa0\x7c\x76\x03\xd7\x23\x64\xdd\xf1\x76\x5b\x5b\x95\x6f\x8b\xeb\xba\x17\x33\x6f\x84\xcb\x35\x89\xc2\xa9\x7f\x2a\x41\xc1\x23\xd9\x4b\x0a\xc6\x54\xdf\x36\x82\x67\x3b\x70\x44\x81\xb2\x13\xfe\x24\x89\x2a\x1a\x95\x3f\xec\x95\x94\x52\xef\x3a\x78\xdc\x91\xb3\xae\xf4\x3e\xd8\xf0\x2a\x67\x8d\x66\x2f\xc3\xcf\xc0\xeb\xec\x59\xf5\xd0\x3e\x1f\x2d\x8e\xb2\xea\xbc\x11\x22\x0e\xe1\x38\x0e\x5b\x01\xcb\x8c\x0a\x61\xbb\x85\xfa\x2e\xf7\x9d\xe0\x74\x66\xec\x78\xda\x02\x2a\xc0\xdd\x4e\xb2\x79\xf9\x6c\xee\x57\x5a\xe0\x44\x94\xae\x9c\x4b\xb6\xb2\x37\xac\x87\xde\x37\xde\x54\x9a\xcd\xd9\xb9\xba\x90\xd1\x10\x4e\x31\x11\xc6\xb3\x8e\x1b\xf1\x1d\xbc\x02\x90\x06\xe8\x5d\xe2\x6c\x9f\x51\x9f\xe4\xa5\x4e\x15\xaf\xc0\x2e\x6c\x9c\xc0\x3b\xf2\xa7\xf7\xe7\x3e\x75\x42\x2e\x77\x9a\x26\xd7\x37\xb8\x15\x2c\x7e\xf0\xb9\x29\xeb\xa2\x72\x37\x23\xe2\x65\xec\x85\xce\x45\xa3\x86\xa3\x17\xc4\xa8\x69\x66\x87\x07\xf0\x9b\x9e\x65\xc0\x06\xe7\x8d\x91\x33\x1c\xc1\x54\x28\x1f\xfe\xc0\x6e\x2e\xc4\x35\xab\xbd\x12\xa5\x67\xf5\x33\x89\xa4\x69\x85\xa8\xd6\x7a\x85\xae\x1d\x52\x65\x14\xf7\xc6\x2e\x32\xec\x29\xa8\x6c\xef\x34\x7d\x6f\xb7\x23\xd1\x89\x93\x2e\x7b\x33\x5b\x61\x2a\x0e\x56\x88\x9e\x25\x39\xa0\x53\x70\x43\xf0\x78\x23\xfa\x65\x2e\x76\xca\x3c\x26\xd7\xb6\xc8\x17\xee\x85\x73\x32\x77\xd7\x2e\x7c\xdd\x25\xc6\x75\x33\xd0\x25\x96\x74\x86\xf0\x04\x21\x9f\xcd\x5e\x39\x0b\x9f\x49\xbb\xe3\xec\x07\xd2\x54\x57\x73\x76\x3d\xd0\xa4\x00\xf2\x7a\xac\xce\x02\xa7\x02\x39\x6a\x03\x3e\x57\xa3\x4f\x7b\xe2\x7e\x03\x38\x87\xf7\x9c\x24\x3d\xba\xca\x3d\x5a\x5b\x0a\x86\x3b\x23\x29\xc0\x34\x8f\xd6\x8d\xb8\x14\x6d\xef\x19\x2d\x00\x11\xd9\xb2\xc6\xf9\x86\xd5\x62\x65\xd0\xb3\xef\x29\x14\x02\x62\x02\x0f\x43\xf3\x6a\xdf\xec\x54\x20\x69\x0f\x6d\x4f\x15\x0d\x37\x2e\xa8\xc5\x1b\x94\x30\xe7\xf3\x02\x53\x90\xde\x37\xd8\x43\xa7\xbb\x82\x09\xac\x0e\x97\xe6\x46\xc3\x25\xeb\xed\xa2\x27\xb7\x33\x81\x78\x95\xc8\x73\x25\x2b\x83\xd1\x65\x01\xf3\xc6\x68\x54\x2f\xb7\x6b\xf7\x4d\x34\xe0\x2a\x46\x56\xcf\x05\x74\x39\xa7\x04\x58\x93\x83\x09\xf2\x6b\x21\x12\xa6\xaf\x4b\xaa\x98\xab\x10\xfe\x8d\x0c\x71\xf7\x22\x11\x5f\xf1\xd8\x50\xc1\x23\x3b\x33\xc8\x50\xd9\x9e\xf6\xe0\x27\x6b\xe8\x89\x38\x18\x42\x35\x35\xec\x88\xdc\x48\xac\x57\x60\x97\x76\x57\x96\x65\xe4\xcf\xc5\x8a\x29\x26\x8a\x60\x2b\x6a\xea\xc6\x1d\xd3\xec\x14\x2b\x8d\x07\x88\x48\x25\x57\x41\xd2\x9b\x06\x2c\xfb\x18\xc0\xe3\x7b\x93\x82\x7d\xa1\xa5\xc5\x1e\x20\x22\x12\xd4\x11\x1a\x2f\xf0\xf0\xab\x82\xfd\xc0\xab\x54\xa1\x6c\x04\x69\xa2\x75\x24\x73\xea\x86\xe7\x29\x1e\x0c\xe6\x5e\xe9\x00\xc7\x0f\xbd\xf9\xec\xb0\x9e\x92\x2e\x13\xc3\x8a\xba\x15\x71\xea\x90\x6c\x1e\x07\xe8\x88\x97\x82\x1d\xcb\x6c\x6a\x66\x7e\x3c\xaf\x84\xcb\x8c\xb2\xcb\x6a\x4d\x0e\x31\xa2\x83\xe6\x2e\x88\x44\x2a\xa9\x3c\xf7\xb2\xb7\x74\x32\x45\x19\xe6\xac\xbe\x4c\x1e\xe6\xbe\x57\x09\xef\x4c\x19\xbb\xbc\x2d\x06\x38\x1a\xdb\x38\xf8\x76\x7a\xee\xf9\x3c\xa1\x69\x45\x3b\x22\x78\x40\x43\xb4\xef\x7d\x04\x78\x5f\x8f\x96\x55\xb6\x57\x46\x11\x51\x6a\xb7\xee\xcb\x32\xac\xd0\x28\x01\x65\x73\x2b\x7f\x5d\xd8\xb7\x53\x04\x87\xc2\x0c\x58\xee\x7e\x5f\xb6\x5b\x9c\x12\x86\xee\x0d\x09\x2b\x29\x71\x00\x9e\x8c\x4a\x2c\x35\x65\xdc\x2c\x47\xd8\x5c\xe9\xe1\xb2\x78\xc6\xfc\xa0\xb9\x57\xe3\x1c\x33\x87\x96\x7c\x40\xdd\x6f\x4c\x80\x66\x91\x71\x3a\x2f\x7d\x3d\xde\x5a\x61\x4d\xeb\x65\x2b\x61\x4e\x59\x0b\xf2\x2b\x41\x68\x59\x1f\xe0\xf6\x2b\xd8\x1b\xec\xe7\xe4\xf2\xca\x1c\x6a\xf7\xe0\x1a\x4d\xe9\xb0\x65\x3b\x5a\x71\x51\x52\x71\x76\x85\xdd\x4d\x09\xe1\xf2\xeb\x12\x48\xd9\xbd\xe2\xea\x0a\x63\xa2\xed\xf5\x06\x91\x2d\x4a\xd6\x6a\x32\x59\x3a\x18\x28\x5b\x1d\x87\x9e\x15\x89\x49\x14\x11\xe5\xbe\x81\x9c\xc1\x82\x90\x02\x6e\xc2\x4f\xc8\xe4\x7c\x45\x6d\x27\xd2\x92\xab\xea\x29\x8a\x8e\x95\xbd\x16\x1f\x77\x49\xb6\x60\xd7\x45\x1e\xfe\x52\x57\x37\xaa\x14\xf1\x3c\x94\x32\x65\x5a\xfe\x3f\xd9\xfb\xef\x60\x51\x8a\x72\x5d\x18\x97\x28\x59\x60\x8b\x08\x48\x50\x40\x04\x24\x75\x1a\x10\x04\x24\x23\x12\x54\x32\x88\x74\x4f\xe8\xe9\xe9\x99\xe9\x9e\x0e\x33\xd3\x2d\x82\x44\x95\x20\x92\xc3\x11\xdc\x48\x94\x2c\x59\x44\x04\x24\x89\x48\x16\x95\x0c\x82\x44\x89\xba\x55\x10\xf8\xd5\xbe\xa7\xce\xdd\xab\xea\xfe\xaa\xee\xf9\x67\xea\xfb\xaa\xbe\xb3\xaa\xf6\x1f\xbb\xea\x59\x33\xbd\x7a\x66\xba\xdf\xf7\xe9\xe7\x7d\xde\xdc\x4e\xd1\xa2\x0a\xd2\x32\x42\x48\x0d\x57\x82\x96\x29\x55\x12\x7b\x98\xc5\x92\x24\x30\xa5\x36\x8b\xde\xf6\x46\x66\x34\xe3\xbd\x17\x81\x2a\xe5\xb4\x99\xa4\x0e\x9d\x28\x27\x72\x97\x37\x70\x34\x5d\x4e\x04\x75\x2a\x77\xd0\xa7\x03\x18\xc0\x30\x78\xdf\x72\x0b\x65\x47\x4c\xc7\x51\xad\x4a\xcf\x05\x9d\x42\xf9\x23\xa2\x66\x30\x0d\xd2\x2b\xd3\xb1\x98\x00\x60\x41\xc4\x25\xd4\x8c\x76\x2a\xf4\xd2\x66\x75\xeb\x54\x89\x4c\xee\x72\x09\x95\x4e\x88\x99\x22\x81\xc9\x33\x6b\x90\xe1\x22\x98\xb2\x28\x02\x0d\x22\x8f\x69\x61\x9a\x10\x73\x40\x31\x2e\x4d\xcb\x55\x4b\xd3\xb4\x22\xae\x87\x05\x52\x9e\x4e\xd2\x57\xd6\x02\x6e\x48\xd2\x55\x24\xd4\x9d\x69\xc7\x7a\x70\xdd\x18\x8b\x0a\x26\x2d\x4e\xad\x1c\xba\xca\x95\xe5\x58\xd9\xd6\xa1\x34\x37\x7c\x60\xa5\x9b\x62\xd5\x12\x19\xc0\x32\xa0\xdc\xc5\x0a\x29\xa4\xc0\x90\x46\xcb\x9d\x4b\x55\x5b\x47\x1a\x00\x88\x19\x72\xbc\x35\x10\xd0\xae\x6b\x47\x5b\x73\x30\x09\xe1\x41\x55\xa4\x00\xe7\x14\x45\x16\x63\xe1\x73\x4c\x9a\x50\x0f\x55\x6f\x1a\x16\x2b\x91\xf0\xbe\x69\x4a\xc2\x1d\x05\x32\x25\x55\x87\x54\x35\xc5\xc9\x5c\xa4\x35\x52\xb1\x4e\x2c\x72\x40\xb4\x29\x69\x1a\xdf\x20\x17\x08\x21\xa6\xe4\x8d\xef\xa4\x83\xa6\x48\x51\xdd\xd5\x3d\x17\xb0\x1c\xd2\x29\x5c\x98\x58\xd5\x69\x2e\x33\x16\x5d\xa2\xfa\xac\x6b\x6d\x21\x0d\x97\x79\x64\x4e\xb3\x8a\xf9\xc8\xb0\x50\xc8\x82\xbe\x18\xd3\x26\x01\xaa\xae\xfa\x49\x3a\xfd\xa2\xbe\xa8\x01\x45\x19\x0b\xb2\x69\x2c\x20\x83\x2b\x39\x6f\x49\xc6\x94\x96\x34\xb6\x71\x94\xa0\xc3\x81\x73\x47\xc6\x2a\x25\x75\x83\xab\x29\x7a\x66\xba\xc6\xe1\x82\xf6\x3d\xc3\xda\xf0\x18\xf2\x82\xb0\x21\x40\xc7\x9b\xa6\xa7\x4a\x57\xa9\xca\x50\x97\xa0\x72\x0c\x08\xc5\x1a\xf4\xda\x4c\xa2\x27\xd0\xc6\xa6\x24\x84\x98\xe3\xda\xab\xbc\xca\x92\xd6\xd6\xd1\x23\xa1\xaa\x82\xca\xba\xa9\xb4\xb0\x26\x1b\x8c\x2d\x78\x9b\x76\xa1\x75\xc0\x4e\x71\xdc\xc7\x5d\x09\xc6\x9e\x0d\x41\xcb\x50\x83\x56\xeb\xbc\x8c\x10\x85\xaa\xaa\xb0\x1a\x8b\xa2\x2e\x22\x28\x06\x0a\xa2\x33\x55\x47\xe5\xd0\xd4\x93\x94\x7d\x45\x84\x7c\x46\x4d\x85\x5c\x53\x26\x63\xd1\x15\x46\x50\xed\x43\xd9\xc0\xb4\x6f\xc6\x36\x73\x8a\x38\xc5\xd2\xa0\x69\x66\x34\x21\x75\xa8\xa7\xd0\x6e\x8e\x6e\x14\xde\x95\x08\x37\x22\xb3\x45\x03\xe6\x66\xf9\x24\x29\x12\x0a\x2d\xcc\x68\x6d\x59\xc2\x10\xa9\x34\xd0\xde\xc4\xdc\x51\x27\xba\x29\xe2\x8b\xb4\x28\x3a\x8d\x4c\x2b\x31\x81\x30\x8b\x8d\x4a\x7d\xc1\xfb\xa1\x4a\x13\x56\x1a\x39\xf6\x29\xd5\x89\xcf\x08\xca\xb3\xa0\xa3\x67\x7d\x9b\x4e\xf1\xa5\xb6\xa1\xc6\x63\xda\x40\xef\xf3\x5a\x27\x6d\x12\xd3\x84\x26\x4a\x68\x48\xd3\xb1\x75\x05\x25\x2d\x43\x49\x8e\x31\x85\x7d\x06\x2c\x30\x6c\x0a\xf2\x87\x2a\x1d\x94\xe5\xde\xfb\x04\xb7\x4c\x0e\x2a\x56\x90\xf5\x6d\x25\x4d\x4d\xa9\xf0\xdd\x58\x34\xa1\x1b\x92\xc2\x8f\xb8\x2b\x04\xcc\xea\x49\x0e\xa3\x99\xb7\xa9\xe2\x95\x72\xb6\x28\x0d\xf6\xa3\x71\xd8\xfb\x00\x2b\x01\x13\xd2\x41\x2f\xb9\x4d\x0b\x2b\x12\x57\x79\x63\xda\xbe\xa7\xd8\xc8\x29\xf2\x54\xc3\x75\xe8\x74\x5a\xd5\x29\x65\x00\xc8\xae\x28\x5a\x54\xf4\x55\xde\xa6\xa5\xc8\x9d\xe8\x09\xb6\xa3\xee\xba\x5c\x31\x56\x52\x85\x88\xab\xa6\xa0\xa0\x3a\x40\x13\x40\x2b\xac\xe8\x80\x07\x82\x90\xb5\x23\x1b\x86\x02\xb4\x61\x48\x8b\xde\xe4\x86\x1a\x48\x6b\x55\xf0\x72\x00\x85\x83\xdc\x85\x29\x8e\x3e\x55\x1b\xbb\x62\x28\xf5\x98\x65\x79\x99\x32\x41\x99\x0f\xde\x52\x93\x0b\x0b\x6b\x59\xe8\x1c\x96\x25\x6e\x4a\x09\x3c\x63\x59\x59\x5b\x58\xff\xff\xe9\x7a\xfc\x7f\x69\x68\x33\x01\xe1\x91\xa6\xad\x19\x70\xcc\x7c\xe7\x33\xd4\x10\xae\x1a\x50\xf7\xa1\x1e\x92\xc0\xf3\x40\x0a\xf6\xbf\x3e\x71\x97\x27\x89\xef\xbb\x24\x03\x80\x4e\x52\xad\xd6\x63\x49\x8b\x98\x78\xa8\x4b\xed\xb3\xd8\x66\x3d\x2a\x0b\xc8\xc6\xe0\x9d\x44\x40\xc9\xd6\x20\x60\x0a\xe0\xb5\xf3\x4d\x4b\x34\x74\x76\x8a\xed\x8f\xcb\x06\x39\x04\xec\x98\xa4\xcd\xc8\xf2\x48\x44\x25\x54\x45\xdc\x98\x87\x44\xb8\x1c\x8a\xa4\x64\x2c\x76\x98\xf1\x7e\xac\x92\x8a\x54\xdd\x14\x5c\xa6\x2c\x9a\x91\x2a\x4f\x8b\xc2\x70\x9c\xe5\x9d\x77\xa5\xab\x4a\x3d\xa6\xd8\xbb\x3e\xe4\x34\x8d\x26\x25\xd2\x0a\x9c\x76\xae\x83\x04\x6a\x31\x85\x4b\xc2\x68\x28\xb6\x2d\x74\x61\x74\x5a\x68\xdd\xe6\xac\xe2\x45\xa0\x70\xec\xdb\xb6\x55\x45\x6a\x71\xb4\x42\xa9\x9e\xf1\x42\xa2\x26\xcb\xda\x6a\x8a\x52\x27\x1f\xa4\xa3\xa4\x2f\x8a\xb4\xa0\x5e\xe4\x21\xc4\xde\xb1\x80\x9b\x31\xc5\x63\x9d\xd5\xbc\xc0\xb2\xe6\xa0\x69\x3d\xf2\x21\x90\x81\x27\x72\x8a\x64\x2e\x7a\x9c\x06\xa0\x38\x96\x28\xe7\x81\x85\x2e\x15\xc8\xb5\xc0\x00\x14\x1a\x93\x8d\xd1\xa9\xd0\x08\xd1\x8f\x78\xe8\xe1\xa0\x8a\xda\x4e\xd1\x57\x96\x8d\x58\x2b\x5e\xe2\x36\x80\x41\xf2\x4a\x3b\x86\x49\x97\xf5\x83\x57\x0a\x8f\x6d\xc7\x71\x8b\x3a\x6b\x59\x95\x23\xdd\xd7\x75\xea\x7a\x32\xc5\xb9\x31\x2d\x5b\x54\xa3\xbc\x66\x81\x4b\xaa\x12\x60\x84\x8f\x30\x57\x19\x2f\xc7\x9a\x3b\x55\xf9\x4a\x0d\x04\x74\x82\x72\x5d\x63\x20\x78\xe8\xa6\xe8\x40\xc1\x74\xaf\x2a\x19\x0c\x0f\xac\xc8\x70\x0d\x11\x75\x6d\x59\xa0\xb2\x68\xdb\xc4\x3b\xcc\x7d\xd9\xab\x80\x4b\x94\x49\x01\xf2\x4c\x31\x9d\xcb\x29\x7c\xed\xeb\x3e\xeb\x32\x65\x38\xe5\x3c\x07\x19\x80\xa2\x08\x99\xa6\x43\x81\x85\xee\x74\x9f\x99\x3c\xe5\xdc\xf3\x72\xe4\x83\xa2\xd9\x08\xf3\x91\x4e\x52\x6f\x8c\x29\xaa\x05\x6c\x54\xd3\xa2\xb1\xaa\x7b\x58\x6a\xe9\x28\xd0\x59\xd7\x80\x44\x14\x35\x84\x65\x52\xdb\x3e\x86\xbe\x4f\x04\x69\x05\xeb\xa6\x08\x8b\xca\x94\x94\x55\xef\x78\xe0\x34\xab\x21\x27\x08\x65\x30\x6d\x5b\x48\x92\xd1\xb5\x05\xad\x75\xde\xcd\x5d\xd0\x52\xca\x35\x6f\xf5\x48\x9b\x74\x0a\x29\xf2\x50\xc5\x86\x46\x00\x78\xb4\xda\x99\xa2\xf5\x7d\xaf\x58\xd5\x74\x66\x30\xed\xc0\x71\x53\xfa\x90\x19\x89\x13\x30\x38\x46\x29\x62\x30\x4e\x41\xd3\x76\x85\x6a\xfb\x34\x49\x4a\x9e\x06\x8b\x63\x22\x94\x0a\x03\x02\x7d\x09\x9a\xa0\x5b\x63\x92\xac\xe0\x30\x37\xad\xc9\x6a\x3d\x56\x3c\x07\x60\x8a\x3d\xd5\xf3\x68\x9a\xb4\x47\x10\xf5\x9a\x44\xab\x50\xa4\x75\xee\xc6\x90\xa5\x03\xc8\x3b\x9e\x76\x85\x18\x79\x0d\xeb\x94\x36\x55\x20\xba\x70\x74\x8a\x8e\xf1\x10\x66\xfd\x90\x86\xc2\x06\xa4\x54\x26\x75\x9b\xd7\x49\x06\x44\x83\xfb\x56\x0f\x03\xcc\x63\x66\x5a\x83\xb9\xf7\x7d\xd6\x64\xcd\xa0\xfb\x69\x6c\xde\xaa\x16\x62\x49\xeb\x3a\xa5\xc2\x33\xdb\x76\xba\xea\x79\xd2\x20\xcc\x0a\xc0\x6d\xda\x77\xa0\x0f\xa8\xe1\xa9\xe9\xda\x84\x49\x99\x55\x60\x12\x6a\x12\xa5\xbc\xac\x44\x18\x47\xd4\x57\x23\x13\x14\x89\x71\xcc\x30\xa3\x59\x5f\xcc\x4d\x7b\x8b\xac\xa6\xb6\xb4\x2c\x29\xf3\x31\x4f\x4d\x13\xc5\x14\xc9\x5c\xa3\x65\x59\x8b\x4c\x56\x01\x37\x15\xc0\x0d\x8f\x3c\xb0\xa4\x84\xc0\xf1\x82\xb7\x09\x4e\x91\x28\xb1\x29\x58\x9f\x07\xc4\x75\xc3\x7c\x98\x42\x7f\x44\xbb\x64\xc8\x73\xab\x7c\x5a\x16\x88\x11\x86\xab\x1a\x93\x9e\x26\x9e\x24\x20\x8f\x16\x81\xca\x72\x93\xe7\xc0\xf9\x8e\xba\x1e\x54\x6c\x12\xb2\x38\x41\x91\x30\x2b\x6a\xd1\x93\x7c\x0c\x99\x0c\x43\xcd\xc7\x36\x1b\xa4\x73\x49\x64\x8e\xb6\x96\x69\x41\x81\xe8\x73\x86\x47\x82\xc7\x2a\x4e\x51\x58\x33\x38\xdd\x25\x0c\x24\x4c\x0a\xa3\x92\x1a\x50\xdd\x69\xa4\x70\x81\x93\x0e\xda\xc1\x66\x41\x0e\x5d\xa7\x5a\x2a\xb3\xbc\x36\x25\xb2\x69\x37\x85\x82\x94\x16\x5a\x74\x79\x19\x20\xee\x68\x13\x8a\x31\x31\x0e\x34\xce\x87\xbc\x1d\x91\xe3\x2e\x24\x8e\x96\x49\x5d\x9b\xa1\xe8\x2a\x2b\x50\x9a\x87\x29\xd6\xce\x50\x79\xc7\x8a\x94\x97\xcc\x57\x05\x49\xb2\x6e\x80\x7d\xca\x99\x35\xad\x61\x3a\x1f\x92\xb1\xf0\x41\x78\x91\xb6\x15\xb4\x18\x7b\x54\xb3\x29\x5c\xdb\x48\xda\x75\x19\xaf\xba\xa6\xb5\xa3\x76\xb1\xd0\xa4\xa8\x1d\x4a\x84\x92\xb2\x1d\xe4\x00\x24\x4f\x78\xe9\x3a\xee\x6c\x56\x46\x4a\x29\x09\x53\xec\x66\x0c\xce\xfd\x7f\x48\x8c\x93\x42\xcb\x7c\xec\xc7\xe8\xbc\x70\xc3\x98\x74\x45\x2d\x92\xd8\x24\x6d\x1e\x74\x61\x2b\xa8\x9c\x68\x90\xc9\xa7\xe8\x18\xcf\x10\x0b\x02\x25\x92\xda\xac\xa6\xc1\xc9\xdc\xe7\x01\x75\x1e\x84\x06\x58\x1d\x2b\x09\x55\xa3\xd3\x98\xd7\x63\x0c\x44\xd7\x8e\x1a\x59\x4f\x91\x9b\x01\x19\x8d\xa9\x88\x1a\xba\x8a\xeb\xb4\xf1\xa8\x11\x7d\x9f\xe5\x1e\xf6\x43\x66\x29\x1f\xc7\xdc\x60\x59\x64\x0e\x0f\x8a\x0a\x8e\x65\xd5\x4d\xa1\x20\xf5\x0a\x01\x50\xd0\x26\x60\x43\x4b\xc0\xa8\x01\x95\x6a\x5a\x1f\x89\x86\x2a\x54\x2d\xa6\xb0\x13\x09\x85\x75\x64\x99\xcd\x60\xea\xe8\x24\xde\x71\x10\x47\x29\x70\x02\x14\x1b\x23\x2a\x11\xc6\x24\x46\x09\x3b\x47\x19\x2f\x11\xf6\x43\x03\xbc\xd5\xa2\x87\xc9\x80\x94\xe9\x61\x41\xbb\x29\x32\x81\x5e\x37\x30\xef\x7a\x56\xa4\x04\x8c\xac\x26\x81\x26\xa4\x31\xd8\xb7\xb8\x40\x10\x13\x93\xda\x2a\x50\x39\x94\x19\x2e\x5d\x3a\x0a\xd7\xcb\xff\x93\xf0\xf8\xbf\xb5\xe5\x9d\x80\xf0\x10\x9d\x29\x7b\x94\x49\x89\x4a\x94\x8b\x2e\x09\x82\x17\x69\x5d\x27\x83\xef\xdb\x02\x8d\x40\x0e\x85\xed\x09\x76\x63\x29\x9d\xcc\x49\x66\xc4\x24\x96\x34\xa1\xe7\x43\x99\xd7\x5a\xe1\xb1\x22\x5c\x99\x16\xb6\x2e\xad\xb8\x07\x62\x1c\x2a\x2e\xc5\x68\x4a\x4e\x09\x28\x94\x18\xd0\xe0\x7a\x37\x89\xc0\x71\xa8\x69\x9b\x21\xdd\x91\x26\x1b\x63\xe5\x4b\x01\x52\x4e\x18\xad\xf5\x48\xc7\x24\x0e\xbe\x95\x50\x25\x59\x52\xe5\xbe\x89\xba\xc3\x16\x64\x53\x78\x35\xf0\x81\x34\x2d\xe9\x5b\x52\x67\x1d\x29\xab\xa6\xef\x35\xac\x93\x32\xf4\x96\x0f\xb5\x28\x86\xa1\xb6\xf9\xd0\x57\xa2\xd3\x06\x16\x22\xda\x49\x92\x7c\xa6\x5a\x0a\x50\xc9\x8d\xef\x0b\x9f\x8d\xc4\x25\x4e\xf4\xa3\x05\x05\x70\xa6\x6c\x4b\x5b\xb6\x50\x48\x49\x2d\x40\x8e\x69\x37\x00\x0e\xcd\x14\x1f\xd5\xd8\xc7\x61\x6c\x78\xdb\x74\x43\xd6\xd4\x38\xc5\xb0\x80\x44\xe3\xbe\x48\xc7\x58\xa7\x50\x07\x90\xd3\x4e\xfa\xe0\x8d\x34\x05\xee\x5b\x3f\x89\x09\xe1\x38\xb6\x6c\x30\x15\x68\x0d\xd0\xa0\xc1\x19\x25\x58\xfb\x41\xf6\x28\x0a\xe8\xb1\xc1\x83\x2c\xf2\x4a\xb6\xb5\xb0\xb5\x97\xd4\xb7\xed\x24\xe2\x70\x50\x47\xa1\x2a\x68\x70\x65\x73\x6c\xe9\x08\x55\xd4\x7d\xaf\x6b\xdf\xc8\x11\x76\xa6\x8e\xaa\x72\x05\xea\xed\x90\xa4\xb4\x95\x18\x94\xdd\x14\xdf\x48\xc8\x32\xae\xc9\x60\x42\x5a\xf6\xba\x2a\x06\xc5\xfb\xba\x50\x45\xcc\x00\x15\xb9\x18\x46\x0e\xda\x11\x31\x06\xa5\xad\x8c\x53\xbc\xd1\x66\x0a\xfd\x91\xeb\x58\x91\xf7\x32\x1b\x43\x56\xda\x41\x67\x9e\xf7\x25\xb1\xac\xca\x59\x67\x64\x62\x19\x33\xa4\x4d\x22\x08\x79\xee\x4d\xcd\x73\xaf\xa7\xf0\xb5\x67\x89\xd4\x26\x69\x6b\x59\xd7\x31\x19\x4a\x25\x61\xcb\x42\x93\xe5\x88\x90\x4c\x77\xa8\x0f\xbd\x4a\x74\x64\x79\x1b\x43\x46\x06\x2b\x43\x64\x53\xcc\x45\xde\x87\xd1\x64\x8e\xe4\x34\xf3\x4e\x07\x5c\x64\x59\xd2\xdb\x82\x78\x56\x28\xcf\x75\x45\xbb\x50\x90\x01\x35\x95\x87\x8d\x94\x3c\xa9\xc5\x14\x85\x35\x74\xa8\xac\x27\x7c\x00\x25\xa9\x64\x11\x64\xd5\xb0\x0e\xb3\xc4\xba\x02\x35\x6d\x59\x37\x16\xa4\x39\xc9\x92\x06\x04\xd5\x17\x16\x85\x3a\x4e\xa1\x6a\x00\x25\xc4\x4c\x15\xa0\xc0\x65\x52\x37\x09\xe6\x75\x3f\xc4\x51\xb4\xbd\xae\x41\x05\xba\xba\xd7\x85\x85\x65\xc5\x48\x99\xc8\xd0\xa6\x6e\x98\xe4\x34\x4a\x19\x26\x32\x84\x6b\x0b\x70\x97\x76\xb5\x92\x25\x68\xf2\xaa\x6b\x78\x93\x33\x3b\xb6\x3e\x3a\xea\xb5\x20\x65\x97\xa0\xc6\x27\x63\x70\x93\xf4\xc1\xe8\x47\x0c\xea\x24\x92\x6c\x18\xb2\x14\xc3\x8a\x59\x10\xfb\x7c\x48\x54\x59\x12\xa5\x55\xd5\xe6\x45\x14\x8a\xa5\x08\xca\x84\x58\xdc\x67\xd5\x14\xbb\x99\x50\xcc\xc9\xa2\x0b\x8c\x49\x6f\xbc\xa5\xb0\x1f\x24\x1e\x5c\xae\x05\xc2\xa5\x22\x45\xa8\x0c\x11\xa8\xb3\x79\xcf\x2c\xe4\x43\xd3\x4c\x62\x47\x3e\xd2\x2c\x85\x44\xf3\xa8\x03\xed\xc6\xa1\x21\x89\x60\x7d\x61\x75\x48\xc6\x32\xd6\x5c\x58\x16\x03\x1c\xad\xa1\xc0\x45\x28\x44\x46\x27\x31\xea\xd4\x59\x5b\x15\x01\x37\x8d\x68\xca\xd2\xa4\x55\x9f\x96\x75\x45\x00\xcc\x22\x2c\x35\x05\xc4\xc6\xa2\x6e\x8b\x9a\xe7\x99\x62\xa1\x6c\x10\x9e\xc4\x8e\x5c\x17\x79\xcf\xa4\x91\x05\x90\xa6\x1c\x55\xdb\x01\xe5\xaa\x3e\x0c\x54\xeb\xd4\xa2\xae\x49\xc7\x50\x0e\xac\xc7\x22\x45\xa9\xab\x88\xb7\x71\x12\xcd\xcd\xd8\xb6\xb6\x2c\x9d\xf0\x95\x28\xeb\xd6\xb8\x5e\xa6\x15\xa1\x24\xf2\xb6\xa8\x78\x24\x89\x6e\x91\x25\xbc\x52\xbc\xf0\x96\xe6\x30\xa4\x93\x68\x6e\x34\xf0\x36\xeb\x74\x5f\xf6\x2c\x1d\x5c\xcd\x53\x90\x8c\x48\x4a\x00\xdb\xc0\x9c\xeb\x9c\xe6\xf5\xd0\x6b\x63\x0b\x30\x12\x11\x6b\x6f\xa6\xa0\xa0\xea\xc1\x28\x97\xd4\x8d\x1f\x6b\xc5\x4d\xc4\x55\xcf\x8d\x6c\x03\xe2\x4e\xd6\x23\x23\x88\x18\x6b\x47\x6f\x6b\x01\x3b\xd3\xe8\xc2\x0b\x33\x85\x9e\x20\xe5\xd0\x65\x1c\x76\x08\xe6\xb1\x48\xab\xc0\xca\x8a\x73\x54\xd1\xda\xe0\x90\x74\x63\x63\xfa\x4e\x75\x65\x8d\x03\xc0\xa1\xa1\x11\xa6\x62\x0a\xe5\x4f\x63\x92\x92\x95\xbc\xc3\x55\x64\xc4\xc0\xd1\xe0\x68\x2b\x16\x44\x97\x7a\x42\x74\xee\xdd\xe0\x2a\xe4\x84\x8e\x15\xcc\x09\x4f\xd1\xd8\x4d\x31\x8a\x6a\xcc\x9a\x14\xd4\xb6\x77\x56\xe7\x46\x6b\x8a\x6d\xaa\x2c\x35\xb5\x0f\x6d\x2b\x53\x4a\x2b\x00\x2a\x6e\x1c\xcf\x95\x22\x25\x44\x0c\x4c\x41\xd3\x32\x27\x54\x18\x2a\x3a\x14\x99\xf1\x1e\x05\x9b\x00\x02\x55\x81\x82\xc1\x02\x9a\x22\xd1\xa0\xab\x89\x40\x7c\xd4\x1e\xe9\x01\x15\x72\x8a\xe6\xb8\x6c\x04\x30\xf2\x91\x3a\x27\x13\x0a\x4b\x4a\x7a\x13\x5d\x96\x81\xb2\x34\xd8\x1a\x9c\xe4\x3c\x58\x4e\x12\x5d\x3a\x4a\x09\x30\xc4\xd9\x29\xd4\xb4\x4c\xd6\x00\x69\x51\x0c\xda\x76\xae\xeb\x48\x9a\xe7\x5a\xb3\x74\x54\xa1\x23\x24\xd5\x0d\x6a\xdb\x50\xe5\xa6\x07\x51\x98\x80\x1d\x9a\xc6\x9d\x8b\x8e\xad\xc4\x09\xe1\x9d\xf6\xce\x24\x5a\xa9\x68\x24\x40\xa5\xa3\x3d\x04\xbc\x55\x6d\x6a\x86\x0a\xfa\xa6\xb5\xa3\x6b\xca\x76\x20\x23\x9c\xc2\x47\x8f\x75\x21\x4d\xd2\x34\x53\x60\xcc\x46\x13\xda\x8e\xe7\x8c\xf6\x65\x45\xc0\x08\x0b\x0f\x70\xa2\x42\xab\x94\xcb\xbb\xa2\x28\x87\xac\x1a\xd2\x71\x12\xb5\x4b\x10\x9e\x89\x3c\xe9\x6d\x68\xc7\xa4\x36\xbd\xcb\x13\x9c\x15\xa4\x19\x87\xac\x25\xb5\xac\xa3\x72\xce\x19\xd5\x05\xdd\x24\xa5\x13\x32\xcc\xe8\x21\xf4\x5f\x84\xc7\x9c\xf7\x77\xbb\x71\xb7\xfd\x7e\xb3\xc7\x7c\xdf\x39\x70\xaf\x23\x96\xc3\xcf\x5d\x72\xd9\x61\x6c\xfd\xaf\x6f\xb1\xd9\x6f\x2f\xda\x77\xef\x1d\xde\x09\x87\x4e\xe0\xe1\x51\x3a\x41\x08\x29\x1a\xa3\xbd\x35\xa3\x90\x65\xe3\x6d\x20\x79\x2d\xa0\x2e\xc5\xdc\x9c\x17\x81\x4a\x84\x2c\x05\x3e\xaf\x0a\xda\x20\x38\x45\xb5\x1a\x15\x42\xe4\x8e\x79\xd7\x80\x64\x54\x35\xce\x51\x51\x65\x59\x99\x16\x4e\x85\xcc\x3a\x09\x80\xec\x5b\x19\x32\xed\x58\xab\xad\x0f\x59\x4d\xa7\x48\xe6\x2c\x80\x35\x8f\x26\x42\x19\x5a\x8d\x06\x3e\x34\x49\x91\xb6\xba\xa5\xb2\x71\x42\xda\x4e\x93\x76\x24\x28\x66\x1a\x93\x00\xb1\x0e\x76\x0a\xc3\x24\x8a\x04\xe6\x63\xed\x1b\x05\x22\x53\xb2\xca\xea\x56\x34\x7d\xaa\x8b\xb4\xb6\x63\x06\x2d\x23\x74\xcc\x8b\x81\x1a\x56\xf7\x89\x84\x4a\x87\x49\x4e\xf2\x71\xe0\x4a\x39\x3f\x8e\x63\xdf\x14\x63\x15\x23\x6c\xea\x9c\x60\xd5\x03\xcf\x6d\x4c\x79\xe3\x81\x62\xbc\xb7\x69\x3f\x40\x65\x11\x1e\xa7\x48\xaf\x69\x14\x4e\x01\xaa\x49\x24\xc1\xfa\x34\x60\x55\xb1\x68\x1a\x13\x53\x18\xbd\x6c\x55\x37\x74\x79\x91\x61\xd5\x65\x34\x51\x7d\xc1\x93\x64\x0a\x7f\x02\x86\x5d\xe7\x5c\x05\xa2\xac\x00\xa4\x21\x03\x38\x01\x76\x50\x32\x27\x03\x63\x82\xd5\x8c\x29\x87\xeb\x80\x49\xce\x3c\x2c\x00\x6a\x8b\x30\x41\xed\x35\xf3\xad\xed\x6b\x9a\xb5\x70\x50\x0d\x8f\xed\x40\x45\x57\x73\x02\x8c\x2d\xfc\xd8\xa4\x85\x4d\xb2\x76\xa4\xb4\x1c\xa5\x63\x0e\xd8\xd4\xb1\x7a\x8a\x40\xb5\xca\x4b\x13\x8b\x9a\x06\x9b\xd4\xb5\x66\xa8\xd1\x29\xc9\xb2\x44\xf3\xbe\x6f\xb0\xe1\x36\x4d\x5a\xc7\x7c\x05\x3b\x00\xf0\x10\x21\x6f\xd8\x24\xf2\x5b\x9b\xc6\x20\x61\xa5\x22\xaa\xb2\x88\x90\x1a\x69\xe3\xf2\x21\xf4\x40\x1b\xae\x43\x8a\xac\x28\x43\xe0\x9a\x25\x28\x4f\x6d\xd2\x97\x62\x0a\x53\xb1\x24\xed\x79\x9a\x20\x5f\xe0\x96\x9a\x34\x1d\x00\x1f\xc7\xa1\xec\x41\xd5\x51\x2e\x1c\xc9\x20\x49\x20\x4c\x60\x1c\xab\xde\x24\x18\x69\x35\x49\x53\xc3\xc0\x6a\x02\x75\xcb\x01\xd3\x9e\x14\xad\x88\x04\x0a\x39\x10\x52\x65\x1e\x5a\x6c\xf1\x20\x2b\x9d\xe8\x2a\x95\x2e\xad\x5d\x00\x85\x9f\xc4\x78\x8f\x3a\xd5\x36\x2e\x18\x15\x7b\xdb\x94\xad\x68\x59\x2d\x41\xdb\x83\x72\xe8\x2b\x05\x4b\x3f\x22\x9e\x84\xbc\x85\x66\x1c\xaa\x12\x83\x44\x4c\xa1\xd1\x63\x89\x75\x7d\x0a\x79\x98\x1b\x0c\x77\x6d\xd6\x86\x46\x40\xc4\x8b\x88\xb1\x6b\xb0\x67\xe9\x28\x40\x65\x1a\x50\x54\x35\xd7\x54\xa9\x2e\x4c\x11\x2e\xb3\x1a\x89\x3a\x17\x81\x71\x41\x33\x1d\xab\x5a\x27\xac\xa0\x75\x70\xc8\xf4\x4e\x51\xd4\xe6\xc4\x0d\xa5\xb7\xca\x3b\x39\x4a\x6e\xcc\x34\x4e\x22\xae\x6c\x50\x0a\x58\xeb\x24\x4a\x71\x83\x40\x3d\xb6\x9c\x53\xc8\x32\xdf\x22\xd8\x8f\x0a\x92\xb4\xcc\xa5\x1f\xc6\x54\x9b\x31\x60\x83\xab\x29\xf4\x8a\xac\x28\x25\xd2\x59\x5f\x73\xd7\xb5\xb1\x36\x46\x19\x19\xfa\xdc\x72\x55\x99\xb1\x6e\x1b\x1a\x45\x59\x1b\x1c\x93\x04\xfb\x8a\x31\xa7\xd9\x14\x64\x71\x9b\x06\xa7\x9a\x06\x69\x44\xab\x1c\x4b\x0f\x32\xd1\xa9\x24\xcf\x21\x85\xa4\x1f\x49\x5f\x27\xa3\xce\x45\xe9\x21\xe6\x25\x61\x3a\xeb\xd2\x29\x6c\x64\xab\xba\xa5\x36\x01\x4d\x9d\x8d\xa0\x4c\x4d\x54\xb2\x95\x96\xe6\xca\x40\x96\x0c\xd2\x69\x07\x61\xc7\x30\x1f\x13\xe2\x80\x1d\x9c\x48\x26\x79\x2f\x32\x81\x80\x2d\x6d\x92\x09\x4e\x83\x35\x91\x98\xbe\xd1\x91\x3b\x4c\x1a\x9f\x2b\xad\xb4\xe5\x22\xef\x28\x86\x82\x1b\xa1\x5c\x05\xa7\x30\x2d\x65\x85\x4c\xc6\xc6\x01\x21\x64\x1a\xc5\x38\xe6\xa8\x50\x5e\x17\x3c\xed\xa9\xee\x68\xcc\xd3\x3e\x6f\x1b\x12\x6a\x88\x1a\x24\x1a\x54\x37\x24\x4e\x41\x16\xa7\x90\x54\x31\xaf\x52\xd7\xd8\xac\x68\x6a\x9f\x23\x56\x82\x1c\xe4\xba\x97\xb5\x73\x43\x5e\x37\xba\x96\x55\x81\x6c\x4c\x72\xe3\x63\x6f\xa6\x68\xf0\xc8\xfa\xc8\xf3\x71\x2c\x48\x56\x50\x96\x75\x00\x8d\x35\x27\x75\xc3\x95\xa2\x3a\xd0\x81\xa2\x5e\x0f\x45\x1e\x73\x88\x5c\xcf\x23\xcb\xca\x86\x4e\xe1\x18\x91\x53\x66\x78\xaa\x47\xc1\x72\x88\x1a\x55\x27\x52\x36\x11\xc8\x3c\x28\x59\x8a\x9e\x63\xe1\x58\x15\x35\x12\x43\xc8\x65\xaf\x46\xe7\x26\xc9\x04\x02\xa4\x9a\xb7\x75\xe1\xa1\xd2\x94\x65\x59\x1a\x25\xf6\x83\x30\x34\x72\xc6\x50\x29\x84\xeb\xf3\xa1\x1a\x7b\x82\x1b\x05\x3a\xaa\xf1\x14\x66\xb6\xac\x2d\x4a\x92\xf5\x80\xe1\x90\x11\x40\x95\x18\x82\xca\xfb\x21\x25\x44\x75\x0a\x24\x31\xb4\x63\xaa\xcb\xcc\x47\x0a\x7d\x39\x74\x85\x0f\x53\x38\x95\x31\xce\x1a\x99\x0a\x8f\x14\xa1\x18\xd4\xa4\x70\x8e\x8d\x38\x57\x20\xf2\x14\x82\x42\x64\x51\x04\x6a\xca\xaa\x43\x49\x05\x79\xed\xda\x34\x9d\x62\x05\xb7\x23\x74\xb1\x1b\x5b\x31\xda\x96\xa6\x2e\xf4\x4e\xb4\x79\xc3\x6c\xe6\x65\x68\x0b\xc2\x61\xdd\xea\xac\xe8\x5d\xad\xca\x08\x09\x24\xc4\x4c\x40\xfe\xb0\x24\x1f\x65\x45\x0c\x2a\x45\xae\xb3\xac\x27\x8d\xca\xea\x2a\x5a\x30\xa0\xac\x86\x6d\xab\xfa\xb6\xcf\x78\x48\x6c\x5e\x94\x65\x23\x0b\x5c\xd7\x53\x44\x39\x1d\x2d\x41\xaf\x40\xc4\x44\x9b\xa1\x2f\x2b\xd7\x91\x76\x08\x95\xc8\xb3\xb1\x54\xb0\x24\x56\x0c\xb9\x97\x29\xa9\x7d\x02\x49\xdf\x14\x8a\x4d\x91\x21\xd6\x56\x11\x23\x93\x51\x15\x28\x76\x02\x08\xa4\x98\xc1\x55\x82\x15\x4e\x8a\x8e\xe9\x1c\x21\xd8\xa2\x66\xd0\xad\xf3\x5a\xe0\x5a\x93\x29\x2a\x11\x98\x30\xb1\xf3\x0e\xc4\x76\xf4\x4d\xcb\xa5\x54\x15\x19\x8c\xf5\xdc\xe4\x69\x0d\x91\x4f\xba\xa2\x2b\x0c\xee\xc7\x3c\x27\x19\x87\x85\xe5\x33\xda\x9d\xfc\x17\xe1\x71\xe5\xea\xf7\x7d\x6f\xd8\xe9\xf0\x2b\x5e\xbd\xf3\x9f\x4f\x8c\x5b\xeb\xe5\x3e\x3c\x01\x5d\x41\x6e\xdf\xed\xcd\xf5\xee\x0b\x7b\x0d\xaf\x3c\xf7\x85\x09\x14\x1e\x40\xf7\x31\x21\x4d\x2c\xb5\xea\xb5\xcf\x6d\x64\x63\x52\xc9\xdc\xd2\x9c\x7b\x02\xb1\xea\x6a\xc5\xe1\x98\x95\xa1\x97\xc3\xdc\xb8\x64\xe8\xa6\x48\xe6\xd4\x50\x64\x6d\xd3\x57\x5d\x0d\x32\x86\xba\x28\xa3\x26\x00\xf3\x8e\x84\xa4\x37\x20\x87\x9e\x37\x25\x40\xa0\xce\x05\x49\x69\x66\x29\xef\x26\x09\x48\x40\x50\x99\x80\x9d\x77\x43\xdd\xb6\xa4\x33\xae\xaf\x94\x75\x63\x03\x11\x94\x10\xe4\x26\xba\x5c\x03\x07\x48\x26\x25\x63\xaa\x2d\xc3\x14\xa5\x0b\x8e\x86\x28\x4b\xd4\x85\x4e\x8b\x24\xe0\x32\xcf\x93\x1c\x97\x30\xeb\xac\xac\xba\x9c\xe7\x9d\x45\x0d\xa4\x40\xe6\xde\x46\x04\x9b\xa2\x35\x53\xb0\x88\xa2\xe9\x02\xe1\xde\xb9\xac\x18\x61\xa1\x6c\x6e\x05\x19\x45\xd3\x28\x26\x58\xc2\x2c\x2f\xba\x28\x60\x8b\x02\x31\xc0\x02\x40\x59\xa8\xa7\x78\x2f\xaa\xc4\x17\xbc\x4f\x7c\x13\x5a\xe4\xc6\x90\x1a\x13\x6a\xd7\x14\x24\x03\x42\x6b\x1b\x95\x1d\x29\x60\xda\x05\x27\xb0\x77\x19\x24\xa3\x9d\x22\x5c\x2e\xa8\x4c\x5a\xcf\x23\xea\xbc\x0a\x9d\x85\x6d\x5a\xb6\x2a\x6d\x54\x99\x02\xd1\x64\x85\x18\x43\x91\x8e\x3e\x04\x11\xdb\x4e\x95\xb4\x72\xe9\x24\x6d\x69\x13\x53\x91\x21\x8c\x99\xd6\x49\x28\xeb\x11\x86\xba\xe2\xa6\x15\x8d\xaf\x89\x2c\xab\xd8\x9a\x14\x8e\x2c\xc1\xb2\xef\x11\x2b\x3a\xcd\x27\x91\xeb\xfb\xbc\x1c\xcb\x22\x36\xc0\x67\x30\xe6\x1d\xa4\xa2\xc7\xf9\xa0\x32\x0a\x8b\xb2\x84\xb1\xca\x31\x0c\xb6\x03\xad\xe6\x1c\x44\x91\xf0\x61\x8a\xd6\xcd\xac\x85\x63\x92\xca\xb1\xc9\xe7\xce\xbf\x21\x63\x54\x84\xe1\x32\xc2\xde\x23\xeb\xc0\xdc\x8c\x0a\xf6\x75\xd2\x85\xce\xa1\x82\x72\xe0\xa0\x99\x62\xbd\xc8\x15\xf4\x1d\xaf\x60\x8f\xd5\xc8\x9b\x40\xe2\xe8\xb2\xaa\x8b\xd4\x8d\xc4\xf4\xa5\xd5\x38\x90\x5a\x00\xe3\xfb\x3a\x76\xa3\xaf\x7d\x6a\xa7\x38\x81\xe1\x45\xdb\xf7\x28\x9a\xe8\x4c\x9d\xe0\x01\xb9\x0a\x26\xa0\xc8\x39\x0e\xa8\x52\x4d\x95\xc3\xc2\x64\xa1\x10\x63\x3a\x68\x0a\x21\x91\x62\x12\xe5\x0f\x51\x43\x8b\x6c\xd9\xe2\x34\x20\x55\x56\xda\x19\x60\x60\x52\x7b\x05\x61\x10\x30\x7a\x1e\x40\x17\x74\x98\xbb\x7f\x10\xa0\xa0\xe3\x53\x9c\xa1\x33\x17\x80\xad\x3c\x48\x7c\x90\xa9\x1c\xca\xb6\xe5\xde\x03\xd9\xfa\x1a\xd1\xd1\x8a\x0c\x40\x2e\x49\x9b\x32\x48\x68\xd1\xe7\x7d\xa2\x0c\x9c\xe2\x24\x5f\x85\x50\x9b\xde\x71\x9c\x51\x60\x47\xaf\x03\x2a\xc7\x86\x26\xe3\xd0\xc5\x5a\x24\xfd\x10\x54\x15\x41\x59\xc7\x12\xd6\x16\x0f\x28\x51\x6e\x0a\x22\xcc\xb4\x22\x54\x3e\x2f\x50\x96\x9a\x0c\x15\x59\x8b\x94\x2f\x47\x55\xa6\x2e\x22\x40\x49\x5d\x64\x85\x8b\x45\xeb\x87\x36\x89\x50\x8b\x5a\x80\x29\xbe\x91\x91\x55\x39\x2d\x4b\x20\xe8\x50\x56\xc9\x10\x40\x53\x90\x21\x09\xb2\xd6\x83\x2a\xb8\x52\x03\x4c\x2b\xa1\x12\x9a\x28\x54\xb6\x65\x4d\x6d\x9c\xa2\x4b\xcb\xd8\xc9\xb6\x48\x78\xaf\xcb\x21\x94\x5d\xc2\xa2\x48\x63\xef\x03\x32\x05\x60\xb5\xec\x8d\x61\x89\x76\x01\xf0\x51\xc0\x38\x8e\xbe\xaa\xdc\x14\xe5\x3d\x88\x73\xda\x92\x08\x24\xc9\x43\x09\x20\xaa\xd3\x26\x4b\x49\x62\x69\x2c\x98\x1d\x7b\xaf\x3d\xce\x53\x2b\x19\xc1\x2e\xef\x8b\xa2\x80\x71\x0a\xc7\x88\x8e\xe2\x50\x10\x5c\x61\x34\x26\x06\x0d\x15\xb3\x6d\xc4\x76\xec\x46\x95\x94\x32\xc5\xce\xf2\x3e\xd0\xbc\x37\xa5\x8f\x7d\x67\x15\xcc\xa7\xe8\x15\x43\x5b\xcd\x54\x0e\xa4\xec\x90\x68\x33\xde\x65\x25\x03\xa5\xf2\x85\x4d\xbd\xcc\x73\x94\x17\x99\xb3\xbe\xa0\xb5\xc3\x75\x28\x08\x6b\xcc\xc8\xa6\x50\x35\xf8\x96\x0b\xe9\x07\x48\x59\xd6\xba\xd6\x31\x57\xf7\xc8\x9b\x60\x47\x87\xeb\xa1\x28\x2d\x2c\x8d\x64\x85\xd2\x69\x92\xa5\x84\x0d\x4d\xda\x4d\x61\xff\x57\x45\x91\xd8\x31\x54\xde\x64\x0a\xe5\xa0\xc2\xa0\x19\x51\x5b\x55\x01\x1b\x5d\xf4\x23\x03\xb0\x52\x54\x46\xaa\xd2\x10\x7a\xd0\x66\x76\x92\xb7\x13\xe8\xd8\xc8\x24\x1b\xbb\x2e\x69\x5a\x24\x7b\x88\x43\x8e\x89\x70\x15\x00\x23\x29\xea\xde\x12\x97\x83\x68\x6c\x8e\xe3\x50\x01\x37\xd0\x6c\x8a\xd2\xc8\x06\xb6\x55\xcb\x95\x4a\xda\xaa\xef\x2b\x16\x1a\xa5\xba\x94\x67\x42\xc9\xb4\xa9\x61\x3b\x58\x9b\x46\x56\xd3\x92\x86\x91\x0f\x5a\xd5\x29\x9b\x62\x2e\xac\x13\x7d\x66\x1d\x12\x94\xb4\xb9\x95\xa2\xa9\x75\xc3\x21\x6a\x49\x53\x34\xc8\x1a\xc6\x8b\xa0\x84\xc2\x28\x31\x7e\x64\xb8\x65\x9a\x4e\x51\x56\x1e\x8d\x2b\x07\x47\x44\xab\x4d\xaf\x7a\x9c\x24\x42\x57\xa4\x26\x06\x10\x5b\x01\xdc\x8f\xac\x2e\xcb\xb9\x8b\x09\x4d\xc7\xa8\x12\xd5\x52\x30\x45\x79\x8f\xc2\x63\x5e\x37\x50\x36\x55\x4a\x8d\x6d\x22\xa9\x5d\x9f\x91\x42\xa3\x22\xd2\xc1\x66\x16\xb5\x11\x65\x65\xea\x12\xea\x3a\x19\xad\x14\x93\xf4\x04\xa9\x83\xf6\xa5\x4f\x00\x6d\x49\x5a\xa3\x98\x42\x86\x53\x16\x10\xa2\x18\x8a\xa8\x9a\xcc\x57\xa4\x62\x36\x00\xd4\x22\xd0\x0e\x30\xef\xec\x14\x85\x78\xdc\x30\x91\x51\xca\xc6\xb9\x37\x1d\x4a\xc2\x65\x04\x65\xc1\x31\x2e\xca\xb1\x09\x2c\x23\xb9\xa8\x0a\xee\xba\x0c\x99\x54\xcf\xcd\x5f\x27\x89\x3b\x7b\x53\x74\x9e\x22\xc9\xaa\x88\xb3\x2c\x3a\x9b\x94\x20\x43\x4d\x06\x24\x61\xd4\x83\xa4\x61\x10\xa4\xbd\x90\x09\x4d\x1a\x96\xc5\xaa\xb7\x13\xf4\x28\xa4\x15\x03\x75\x00\x83\x97\x84\x8d\x31\xe7\x54\x38\xe3\x3b\xe8\x5a\x6d\xfb\xbe\x0e\x5d\x61\x10\xef\x65\xcf\x41\x33\x0e\x91\xd3\x11\x4b\x93\xfe\x1f\x84\xc7\x32\xbf\xbb\xe6\x9b\x0f\x9b\xf4\xe2\x1f\x7f\xe9\xa5\xed\x2e\xbc\xee\x1c\xb8\xf1\x52\x70\x81\x65\xdf\x38\x6e\xf9\xb5\x96\x29\xbe\x7d\xcb\x99\x4f\xbd\x35\x01\xe1\x91\x94\xb1\x37\x7a\x68\x53\x06\x5a\xd5\x7a\x85\xb3\x30\x2a\xd9\xa0\x7c\xc0\x35\x65\x99\xe4\x7a\xd0\x65\x36\x76\x4c\x82\x3e\x0e\x75\x40\x76\x0a\x6f\xe6\xac\x13\xa4\xe9\x0a\x47\x09\x1a\x79\x94\xd6\x17\x51\x17\x70\x94\xb8\xe7\xc8\xb5\x24\x19\xcc\xa8\x58\x12\x80\x67\x95\xc1\x91\xbb\x0e\x4c\x21\x9b\xb2\x49\x2f\x87\x22\x6f\x1a\x4b\xea\xda\x33\x42\x3b\xcb\x74\xe2\x87\x0e\x17\x12\x36\x89\x91\xd2\xcb\xa2\x6c\x11\x1e\x06\x8b\x64\x12\xfc\x14\xc9\x1c\x95\x5d\x3a\x36\x25\xe2\x05\x2e\x73\xaf\x92\xa2\x4b\xad\xa4\xd4\x18\xd8\xba\xce\x42\x00\xea\x94\x0b\xc2\x8a\xd1\x6a\x6e\xb5\x84\x4d\x41\xa7\x98\x8b\x68\x19\x09\xb2\xb6\x55\x96\xb1\x92\x8f\x1a\x34\x2a\xab\xaa\x31\x44\xd1\xc9\x50\xc1\x22\xda\x3a\x24\x7d\x70\xba\x13\xbc\x92\x9e\xd5\x53\xf8\x97\x53\xd5\xe4\x9c\x65\x1d\x25\x72\x10\x55\xd5\x17\x03\xcc\x25\x05\x83\x4f\x49\x1a\x52\x3b\x40\xcf\x74\x48\x07\xa2\x04\x30\xae\xf1\x25\x65\xdd\x14\x29\xa5\x4d\x48\x9a\xb3\xb6\xef\xb9\x6f\x47\x89\x06\x63\xbb\x2c\xb1\xde\xb9\x36\x73\xd6\xba\xba\xa0\x0d\x13\x63\x27\x25\x37\xca\x64\x7d\x99\xc8\x29\xec\x42\x35\x86\x28\x6d\xab\x34\xc5\xb4\x64\x3d\x1a\xb5\xcc\x46\xdd\x24\x6d\x48\xea\x8e\x25\x9c\x52\x0d\x6a\x87\x4c\xc8\x70\x9e\xc0\x58\x0d\x31\x4c\x21\xb3\x14\xa3\x2e\x7d\x55\x13\x11\xcb\x54\x60\x66\x44\xde\x20\x53\x83\xba\xd2\x0e\x79\xab\x7b\x3c\xe2\x51\xcb\xdc\x14\xc8\x37\x7d\x64\xd0\x81\x29\xce\x81\x1c\x06\xb9\x04\x73\x07\xd3\x8f\x26\xcb\x8a\x52\xa2\x42\xb5\x9d\x28\x34\x6e\x5c\x93\x94\x3c\x62\x3f\x22\x8b\x5c\xd9\x94\x43\xd9\x0e\x1a\x4e\x10\x90\x50\xd2\xb7\x21\xa3\x04\x02\xcc\x05\xf1\x85\x8c\x06\xe3\xd1\x2b\x25\x68\xc0\x9c\x6a\x2e\x2b\x3c\xb6\x95\x84\xde\x0c\xa6\xe5\x4d\x9d\xd3\x29\xce\x4a\xd9\x68\x5b\xd3\xcb\x41\x91\x51\x50\x65\x7d\x61\x33\xa5\x8a\x48\x35\x65\x56\xd7\x43\x6c\x54\x39\x50\x99\x26\xce\x11\xa0\x46\xa4\x9b\x38\xc5\x5c\x88\xc2\xe7\xa9\xe4\x88\xa8\x04\x96\xb2\xd0\xa2\x36\x49\x9a\x8d\x49\xa1\xea\x8c\xa4\xb5\xca\xb1\x83\xbc\x6d\x91\x48\x39\x43\x83\x54\xb6\x9b\x82\x14\x04\x39\x03\x35\xe5\xa8\xca\xb2\x48\x44\xdf\x40\x57\xb7\x3e\xef\xea\x34\x1b\x5b\xe6\x08\x1d\x91\x92\xad\x42\x52\x82\xb1\x11\x49\x95\x27\x93\x98\x1c\xf3\x90\xa8\xbe\x80\xaa\x27\x7a\x08\x81\x78\xef\x20\x19\x5c\xdf\x94\x88\xe4\x58\xd8\x84\xcb\x0a\xd0\xac\x55\xa9\x2d\x5a\x8c\x53\x87\xe4\x14\xa3\xf0\x74\x6e\x2c\x6c\x74\x54\x06\xc6\xbe\xc3\x5a\xa2\x4a\x65\x2e\x8b\xb0\xec\xfb\x64\xf4\x82\xa6\x54\xf8\x18\x43\x2b\xd2\xb1\x70\x94\x4f\xe2\x24\x52\x81\x22\xe8\x42\x10\xd1\xd6\xdc\x28\x58\x81\x58\xfb\xaa\x35\x8d\x04\x96\xd4\x9d\x80\x03\x71\xd9\x18\x89\xcf\xfb\x9c\x8a\x02\xd7\x6a\x12\x2f\x28\xdc\x25\x38\xad\x0b\x5b\x24\x22\x69\x1c\x1c\x44\x46\x92\x52\x62\x4a\xfb\x41\x51\xa7\x58\x51\x94\x51\x80\x46\x34\x1c\x36\xa0\xc3\x43\x61\xa7\x38\x2b\xe5\x0c\x48\x3e\xb8\x41\x8d\x3a\xa6\x15\xb0\x69\xec\x68\xc4\xcc\x99\x5c\x56\x6d\x11\xba\x96\x92\xc2\x51\x54\xb8\x5c\x63\x6a\xfb\xb4\x9c\xc4\x22\xb3\x19\x5d\x39\x32\x2c\xa5\x06\x73\xa3\xd1\x10\x6d\x0d\x6b\x93\x97\xb0\x2f\x70\xed\xd8\xc8\xc7\x92\xe2\xa1\x00\x09\xf7\x4d\x50\x0e\x54\xd9\x14\x2b\x38\xc8\x6d\xdf\xe8\x81\x07\xd8\xab\xc4\xb2\xd2\xe5\x03\xa3\xd4\xf2\x3a\x29\x0b\x94\xeb\x26\x6b\xf2\x4c\x66\x25\x12\x06\xb5\x35\x1b\x45\x37\xc9\xaa\xd5\xe7\x31\x0a\x46\x7b\x1a\x75\x2d\x1d\x1c\x05\x4b\xfa\xa1\xc0\x85\x4a\x00\x66\x9a\xa4\x2c\xa8\x06\x42\x5a\x7a\x51\xbb\xa1\x4a\x68\x5a\x4d\x41\x90\x72\xd6\x52\xeb\x2a\x6d\x83\xef\xb4\x30\xac\xf0\x09\x15\x41\x67\xad\x4e\xd4\xdc\x64\x2e\xd7\x83\x60\x2d\xaf\xb1\xd7\xa8\xec\xc6\x46\x88\x29\xde\x8b\x21\x33\x90\xb6\x49\xde\xb2\xa4\x0a\x55\xe8\x6b\xd6\xf7\x18\x8d\xb8\x2f\x38\x12\xb6\xcf\x23\x08\x6c\x50\x44\x43\x89\x1a\xe6\x3a\x10\x27\x69\xb2\x5e\xc8\xaa\x61\xac\x2e\xf9\x58\x57\x05\x95\x64\x50\x23\xc0\x50\x93\xd6\xc2\xd6\x0e\xb0\xab\x53\x4e\x2a\x95\x8a\xbc\x2b\x79\xe0\x1c\xc3\x49\x5c\xdb\xd2\x90\x35\xc6\xa7\x63\xec\x12\xc4\x0b\x56\xb0\x0c\x29\x35\x1a\xac\x75\xd6\xe3\xc4\x35\xb9\x2b\xf3\xc6\xcb\xd0\x8c\x39\x4f\x5d\x2a\xfc\x24\xbe\x58\xa8\x24\x83\x8d\x49\x28\x81\x6e\x0b\x96\xd3\x46\xa1\xca\xd6\x14\xe8\xd8\x7a\x84\x75\x6f\x93\xac\xc8\x32\x31\x74\x02\x48\xd5\xf0\xb2\x75\x53\x90\x82\x81\x3b\x9e\x17\x4d\x0a\xb0\x91\x3a\x69\x8c\x37\xb0\x70\x62\x54\xbd\x35\x85\xac\x6a\xd4\x65\xd5\x68\xb3\x26\x47\x5d\xa6\x07\x58\x85\x49\x62\x2d\xe6\x3c\xeb\xb1\x48\x5c\xe0\x9d\xe7\x4d\x05\x46\x5c\xf7\x50\xa5\x83\xf2\xad\x81\xa3\x48\x79\x65\xd5\x98\x28\x8b\xcb\x8a\x86\xae\x46\x79\x35\x05\xf9\x83\x68\x01\x0b\xa3\x82\x62\x31\xa3\x0a\x29\xa5\xad\x74\xb8\xe4\x0a\xb8\x9c\x38\x63\x92\x52\xe5\x15\x68\xea\xa4\x29\x7a\x1f\xf8\x88\xe3\x04\x74\x1c\x75\x2d\x2c\x6d\xdd\xc0\xd4\x26\x2e\xe4\x09\x27\x29\x30\x95\x93\xed\x50\x88\x81\x64\xa1\x27\xad\x1c\x2a\x53\x2b\x69\xd3\x32\xad\x0c\x18\x27\xd9\xd9\x93\xba\x29\xeb\x4c\xe7\x45\xa9\x2b\x60\x99\xb7\x6d\x99\xb7\x30\xc7\x11\x3b\xa4\x59\x6d\x91\xe2\xa9\xec\xf2\x34\x54\x12\xf3\xdc\x47\x31\xa3\xac\xfc\xbf\x08\x8f\x53\x92\xad\x1e\x3a\xb2\x9b\xf3\xf7\x67\x17\x7b\xe4\xf9\x3f\x6c\xf3\xc4\xc7\x3e\xf5\x6b\xf2\xc1\x36\xff\xfc\x74\xf9\xcc\x93\xb7\xdc\xf7\xf4\x5f\x57\xfd\xf9\x04\x84\x47\x5d\xdb\x54\x57\xba\x54\x2c\xe4\x55\x13\x85\x80\x98\xbb\xbe\xa9\xca\x56\x8e\x75\xaf\x06\xe4\x6a\x93\x3a\x9c\x52\x32\xea\xce\x65\xa2\x0b\x53\x48\x0b\x79\x9b\x4a\xeb\x81\x46\xbd\xa9\x55\x81\x5d\x97\x0d\x71\x6c\x80\x6d\x9d\x53\xda\x35\x8d\x4f\x4b\x38\x24\xb4\x20\xa0\x1d\x01\x1d\x8c\x9a\x44\x4f\x40\xa1\xcd\x40\x97\x3b\xd6\xe7\xd1\x0a\x97\x45\x66\x62\xd9\xa5\x71\x6c\x9c\xd7\xdd\xd8\xd2\x31\x6b\xeb\x86\x26\x5a\x26\x3c\xf4\x5d\x9e\xb9\x29\x36\x61\xd5\x46\xc9\x8c\xa4\xa2\xee\x61\x93\xaa\x12\x29\xc6\x6a\x19\x7d\x99\xe7\xa4\xe4\x73\xf7\x19\x3b\x56\x8d\x11\x5d\x61\x74\x56\x1a\x1a\xd3\x29\x28\x28\x00\xa9\x97\xa6\x0b\x14\x37\xb8\xd5\xa5\x6b\xab\x04\xf3\x92\x35\x23\xc3\x1e\x34\x22\xad\xfd\x90\x46\x43\x04\x89\x1e\x15\xca\xe7\x44\x4c\x41\xfe\x58\x46\xf2\x0a\xaa\x81\x03\x20\x22\x2d\xca\x21\xe7\x5e\x48\xa8\x06\x2a\xc6\xcc\x5b\x3c\xf0\x0c\xe4\xc8\x12\x9b\x36\x19\x24\xad\x1e\xe8\x14\x8c\x2a\x6f\x8b\xb2\x1c\x24\xa2\x8a\x3b\x37\xf4\xbc\xea\x82\x1a\x00\x28\xb3\x56\xd2\x2c\x29\x83\xa0\xae\x0d\x80\xf7\x3c\xc7\x79\x4b\x73\x13\xe2\x24\xc6\xbe\x3c\x69\xd3\x96\x27\x86\xb5\x56\xf2\x36\x64\x31\xef\x00\x17\x2e\x6d\x46\x59\xd2\x4a\x17\x22\xad\xb3\xb2\x57\x23\x4f\x85\xa4\x92\x64\x70\x92\x16\x7a\x6a\xf0\xfd\xdc\xbc\xa0\xcd\x13\xd7\x24\x76\x00\x01\x66\xaa\xf6\x96\x8c\x79\x85\x60\x3b\xd0\x86\xc2\xde\xa3\xbc\x42\xa8\x63\x29\x77\x53\x98\x10\xb2\x36\xc9\x59\x50\x54\x96\x80\x0c\x96\x92\xc0\x7c\xed\xfb\x06\x65\x89\x64\x2d\x04\xcc\x4b\x24\x4a\xd1\x25\x9d\x66\x29\xd0\x75\xd9\xa4\x53\x34\xe6\x62\x04\x28\x8f\x64\x6d\xb5\x33\x83\x45\xb6\x82\xb5\x97\x3d\x31\x03\xcb\x95\xf6\x15\xc4\x25\xc9\x86\x22\x05\x8d\xf4\x11\xb5\x90\x8f\x56\x4e\xb1\x6a\x05\x29\x2a\x10\x0b\x54\x09\x55\x3a\x91\x95\xf9\x20\x85\x00\xb9\x66\x69\xe0\x5e\x96\x49\xa3\x79\x43\x44\x81\x20\x4a\xa0\x95\x0d\xeb\xb3\x29\xd6\x0b\xc3\x34\xa8\x79\x2f\x70\x96\xa7\x43\xad\xc7\xa4\x00\xe3\x90\xea\xba\x75\x7c\xe8\x62\x15\x5a\xcf\x92\x2c\x07\x81\xa0\x00\x60\x9a\xa5\x49\x3a\xc1\xa9\x03\x1b\xec\x10\x53\x97\x65\xac\xaa\x35\xc6\x55\x59\x22\x6e\x2b\x46\x7a\x8d\x00\xa7\x25\x1b\x49\x1d\x70\x85\x19\x68\x13\x4a\x45\xc3\x95\x09\x53\xb8\x24\xa4\x21\xe4\x6d\x01\x83\x17\x7d\xeb\xc6\xb6\xb1\xa4\x30\x91\x83\xb6\xf4\x2d\xb6\x8e\x76\xd6\xd6\x63\x9e\x74\x09\x37\xa1\xce\x92\x92\x69\x3b\x85\x09\x21\x6a\xb2\x1a\xd7\x92\xb0\x4c\xa1\x8e\x85\x11\x29\x44\x52\xd2\xa7\xaa\x4d\xc7\x01\x2b\x62\x47\xd7\x30\xd4\x30\x08\xf2\x7e\x28\x42\x43\xcc\x14\x3a\x13\xc8\xdb\x8a\x15\xa3\x73\x15\xab\xb4\xb6\x89\xb0\x8c\x55\xa4\xc3\x31\x89\xba\xa7\x65\xc8\xfa\xaa\x51\x31\x64\xb4\xc7\x15\x2b\x6c\x03\x26\xf1\x33\x49\x8c\xcd\x5d\x32\x9a\x22\x56\x24\xef\x2d\x55\x84\x11\x15\xc6\x2c\xcf\x46\xc4\x42\x1a\x44\xdd\x94\x91\x8c\x48\xa5\x83\x33\x90\xd5\x0a\x4e\xd2\x75\xc1\x98\x2e\xba\x8a\x02\xcf\x18\x41\xae\x4c\xc6\xba\xac\x41\xc6\xb1\xa6\x05\x8e\x7a\xf0\x06\xab\xa2\xb5\xbc\xe0\xb2\x6b\x9c\x81\x9d\x9d\x22\xbe\x00\x2d\x92\x99\x34\x25\x4f\x74\x92\x65\xe5\xa8\xb2\x22\x37\x85\x6b\xb2\x32\x04\xe9\x79\x6e\x86\xa1\x1e\xf3\xbe\x87\x75\xd6\x82\xc2\xcc\x5d\x53\xa7\x70\x06\xc0\xa2\x2b\xf2\xda\x36\x36\x08\x83\xa8\xf6\x4d\x65\x2c\x4f\x60\x5b\x0f\x69\x59\x7a\x90\xb1\x7e\x40\x59\x92\xf4\xc8\x69\xc8\xb3\x3c\x9b\xa4\xd4\x89\xf8\x56\x9b\xa2\x15\xbd\x77\xce\x0f\xbe\x27\x5c\x9b\x31\x74\x24\x29\x54\x22\x7d\x28\xad\xa5\x83\xeb\x41\x96\x84\x22\xe9\x10\xf2\x60\x92\x7e\x07\x0d\x56\xb1\x4e\xb3\xa4\x0e\x39\x25\x09\x37\xd6\x7b\x00\x6a\x91\x90\x82\x48\x5c\xc6\x1a\x24\x59\xa6\x31\xc6\x71\xa4\x89\x89\xb6\x75\x6c\x8a\x46\xc1\x09\x02\xa1\x06\x6e\x1c\x63\x26\x07\xa2\x05\x85\xba\x17\x96\x09\x87\x3b\x9a\x77\xa6\xa2\x63\x74\x70\x94\xbc\x84\x95\xb2\x45\xed\xca\x49\x2c\xfb\x5d\x81\x4b\x90\x3b\x9f\xa7\x7d\x2b\x31\x6b\x60\xc3\x94\x0c\xd1\xa5\x10\x73\xee\x87\x66\x4c\x05\xc5\xb2\x1b\x64\x45\x8d\xe2\xa5\x2c\xb3\x29\x12\xdb\xc0\xad\x35\x23\x52\x90\x54\x06\xe1\xa1\x4a\xc7\xbe\xe9\xb4\x4e\x52\x6c\x65\x11\x32\x3a\xe2\x54\x69\xc8\x52\x62\x5d\x95\x96\xa3\x20\x53\xd8\xd4\xd3\x11\xd3\x4c\x53\xdc\x13\xed\xbb\x82\x4b\xa5\xda\x54\x89\x2e\xe4\x34\xd3\x5d\xc2\x0c\x0b\x3d\x8b\xd6\xe0\x34\x43\x32\xb4\x91\xb9\x6a\x0a\x6f\x17\x16\x81\xf5\x1d\xcb\x44\x52\xd2\x40\x38\x10\x0c\x35\xbd\xcf\x41\x81\x22\x2c\xa9\x42\x6d\x9e\xa0\x92\x67\x6c\x10\xb9\xb0\x44\xe7\xbd\x03\x53\x10\x61\x18\xb5\xed\x50\xf3\x2a\xb7\xb9\xb3\x79\x18\x9b\xd4\xa9\x68\x07\x94\xfb\x06\x25\x49\x0f\x04\x64\x6c\x10\x43\xd1\xc2\x96\x48\xef\xfa\x44\x4e\xa1\x6a\xa8\x31\x16\x5d\xdf\x66\xb1\xed\xa3\x47\x28\xcb\xab\x52\xf0\x10\xa2\x0a\x89\x06\x45\x2f\x8c\x91\x2d\x8c\x0d\x4f\x71\x86\xad\x52\xa3\x9f\xa4\x1c\xd0\x34\x30\x2f\xb0\x43\x2c\x6d\x84\x0e\x45\x9e\xb8\xb2\xf0\x9a\xf7\xb2\x91\xe5\xc0\x40\x0f\x9b\x7a\x18\x95\x18\x34\x85\x84\x9b\x96\x69\x33\xc5\x81\x8a\xc9\x30\xb7\xa8\x37\x80\x62\xe4\x68\x93\xe9\x50\x00\x9c\x07\x57\x8f\xb9\x97\xb5\x66\xba\xc2\x42\x97\x42\x35\xa9\x12\xb1\xcb\xca\x30\x43\x2a\xf1\x5f\x84\xc7\xe7\x9f\xf9\xf9\x9d\xd7\xdf\xbc\xd8\x2f\xd2\xbf\x5e\x90\xde\xfd\xe9\xcd\xdc\x2b\x17\x75\xf7\x2e\xb3\xfe\x89\x5f\xdf\x55\xee\xb4\xdb\xb6\xdb\xfd\xf8\xc0\x09\x3c\x3c\xa2\x06\x4c\x62\x15\xaa\x4a\xb9\x0e\x47\xd5\xa5\x3c\x75\x65\x9d\x35\x69\xc3\x7a\xa8\x65\x04\x22\x37\x23\x92\x35\x19\xa0\x29\x82\xf7\x60\x0a\xfb\x3f\x51\x02\xaf\x0a\x9b\x5a\x43\x5b\x99\xa3\x02\xb6\x40\x40\x2c\x6c\x3d\x0c\x63\x2b\x1b\x8b\x34\x0e\x6d\xc4\x62\x10\xc8\x76\x43\xa1\x5d\x3d\x45\x4d\x3e\x96\x5d\xec\x53\xe2\x1d\x1d\x41\x03\x93\xd4\xe8\x12\x77\xa8\xaf\x71\x15\xa5\x8e\x4d\x0f\xd5\x30\x60\x85\x0c\x2a\x69\x09\x64\x25\x5b\x3a\x45\x32\x67\x86\xac\xc8\xa9\x94\x6d\x85\x1a\x29\x63\xc6\x5b\x94\xfa\x72\xe4\x1e\x24\xb8\xeb\x32\x6f\xa2\x41\xdc\xb3\x51\x02\x30\xf4\x1c\x74\x40\x4c\x51\x3f\xd8\x81\x94\x00\xa9\x10\xc7\x29\xe9\xfa\xde\x13\x2e\x31\x2a\x6d\x83\x12\xed\xf0\x08\x47\x29\x0b\x5d\x12\x18\x9b\x32\x41\x25\x43\x38\xa6\x53\x34\x29\x2b\x39\x89\x76\x50\x31\x8d\x15\x09\xdd\xd0\xe7\x59\x68\x64\x46\x29\x05\x36\x1d\x65\x51\x78\xd9\xa2\x62\x44\x60\x6e\x92\xc1\xcb\xb2\x6f\xe3\x14\x29\xe5\x28\x6c\x32\x2a\x5e\xe3\xaa\x13\x8d\xea\x22\xc9\xea\x82\xd3\x1c\x49\x0d\x35\x88\x26\xba\x4c\xa1\xbe\x0c\xde\x3b\x60\x0b\xdb\xd7\xd2\x4d\xc1\xf7\x83\x50\x0c\x05\x4e\x03\x0d\x8c\xda\x21\x66\x11\xb6\x8d\x6a\x12\xa7\x43\x2e\x50\x17\x4c\x97\x0b\xc2\x65\x69\x08\x35\x1d\x65\x21\xf4\x62\x0a\x71\x38\x0e\xb1\x96\x55\x44\xd0\xb4\x5d\x69\x5a\x4a\xf3\x01\x09\x50\x2b\x92\xf7\xb5\xb1\x1a\x29\xa9\x13\x44\x13\xc0\x58\x4c\xa0\xac\x69\x98\xe4\x89\xd0\xd1\x54\xc8\xa5\x5d\x34\xb6\xc3\x79\x96\x81\xcc\x6b\xc7\xf2\x9e\x45\xc7\x2b\x2e\x4b\x5e\x0d\x45\x56\xa4\x7d\x9f\xe7\x3e\xa8\x12\xa5\xe9\x14\x52\xe4\xc6\xd9\xaa\x0b\xb9\xf5\x49\x70\x21\xba\x06\x0d\x89\xf4\xc6\x8c\xbc\x0c\x28\x56\x54\x89\x12\x77\xdc\x91\x9a\x35\x92\x67\xbc\xa3\x71\x12\xc3\x67\x91\xb8\xa2\xe2\x41\xe0\xc2\x88\x94\x54\x42\x12\xae\x53\xcc\x90\xa1\x26\x20\xd0\x7b\x93\x96\xf9\xe0\x4d\x53\x29\x5a\xa4\xd0\xa8\x30\x49\x02\x63\x45\xa6\x54\x57\x68\x8d\xda\x5e\x42\x41\xf3\x18\x45\x82\xb9\x4b\x07\x02\x4a\x91\x91\xb2\x51\x8e\x36\x30\xa7\x3c\x11\x59\x8d\x32\x1e\x26\x91\xa8\x0f\x9d\xee\x6b\xa9\x52\xae\x06\xa3\x1b\x8d\x64\x84\x3e\xaf\x98\xcb\xe0\x08\x7b\xc8\xc4\x90\xb6\xc4\xd7\xf2\x7f\x35\x1e\xcb\x11\xe1\x61\x8a\xc6\xe2\x84\xb8\x54\xa5\x05\xf3\xbe\xeb\x1b\xe7\xc2\xc8\x4d\x0e\x06\x34\x78\x37\x16\x19\xc0\x62\xb0\x61\xcc\x54\xd2\x28\xda\x64\x40\x93\x14\x8a\x29\x68\x97\x41\xd2\x51\x92\xb1\x28\x6d\x86\x0a\xa7\x54\x15\x32\x66\x08\x49\x07\x4b\xeb\x6e\x6c\x34\x2b\x91\xc8\x13\xec\x9a\xa4\x0d\x31\x10\x49\x27\x11\xca\xe3\x02\x2a\x21\xf3\x64\x1c\x7c\x17\xb1\x03\x1c\xab\x44\x47\xde\x60\x9f\xf7\xaa\x89\x3a\xc7\x11\x77\x89\x55\x9a\x93\x6c\x80\x79\xd1\xc1\x29\x14\x1e\x46\x17\x34\x57\x45\x66\x12\x26\xba\x08\x68\xd2\x99\xae\x8f\xfd\xd0\x35\xe9\x90\xb9\x4e\xfa\x28\xfa\xac\xa0\x2d\x81\x55\xd3\x20\x03\xf0\x14\xed\x8a\x69\x55\xa1\x86\x24\x39\xae\x6d\xa9\x83\xd3\xfd\x50\x01\x50\xc3\x44\x5a\xd9\x76\x26\x66\x5a\xcb\x46\xa4\xde\xf7\xc4\xb7\x35\x05\xb0\x6e\x26\x91\x65\x57\x56\x53\x54\xa5\x02\xeb\xa8\x65\xc8\x5a\x28\x63\x0c\x54\xa2\x56\x97\xa8\x2f\xa0\x65\x4e\x8c\x1a\x09\xd8\x43\x20\x90\x09\x71\x48\xa7\x30\xea\x1c\x72\xe8\xd2\xac\xac\x06\x03\x14\xc1\x63\x3b\x76\x26\xa8\xb1\x51\x1d\x93\x8d\x66\xb4\x2a\x04\x10\x4c\x78\x09\x49\x2e\xa2\x09\x74\xa2\x62\xd5\x60\x55\x87\x87\x3e\x19\xeb\x24\xab\xaa\xb4\xf0\x75\xa8\x64\x97\x0f\xa0\x46\x88\x18\x80\x59\x93\x48\x46\x78\x48\x6b\x99\xb7\x5a\x05\x39\xc1\x97\xca\x5a\x14\x86\xda\x8f\xa2\x04\x69\x01\x2b\x5b\xd6\x8c\x5a\xdc\x9b\x26\x27\xe5\xa0\x5a\x60\xdb\x72\xe0\x1d\xef\xcb\xa4\x0d\x4a\xe4\xa9\x52\x53\x34\x0a\x66\x78\xec\x75\x40\x00\x0a\xd2\x27\x2e\xa1\x16\x33\x05\xf2\xde\x52\x47\x8b\x18\x3a\x04\x60\x5e\x03\x42\x73\xd1\xf5\x76\xf4\x44\xe9\x64\x92\x28\xc7\x01\x45\xfa\xb4\xf1\x34\x26\x3e\x54\xa2\x16\xa5\x19\x34\xaa\x06\xee\xcd\x20\xab\xa1\x1e\xfd\x50\x54\x22\xf6\x99\x6b\x9a\x22\x16\xd5\x90\x4e\xb1\x6a\x65\x20\xc9\xda\xc4\xe2\x3a\x62\xc5\x5a\xc0\xb2\x81\x0a\xd3\xa6\x65\x85\x08\x53\x3e\x96\xa5\x88\x55\xeb\xdc\x38\xaa\x38\x58\xc4\x0d\x9f\x64\x67\x4f\x48\x0c\xb0\x76\x54\xd2\x2c\x45\xb2\xd7\xc2\x17\x63\x0f\xd2\xbe\x28\x1b\xdc\x0e\x38\x6b\xfa\x1e\x02\x18\x59\x63\xa4\x2d\xcb\x54\xc4\x49\x3a\x5c\x41\x9c\x44\x41\x3d\xe6\x12\x45\x17\xca\xbe\x2b\x34\x96\x49\x50\xb0\x47\x1d\x04\xb8\xf0\xad\xc9\xa9\xf1\x56\xc8\xe8\x89\xe5\x78\x98\xc2\xb2\x9f\x52\x20\x4b\x83\x7a\x01\x25\x25\x8e\xa6\x45\x47\xfb\x90\x8e\xb8\x49\x32\x36\x4a\x6f\x42\xe6\xbb\xd8\xd4\x36\xe1\x21\xa9\x74\x5d\x93\x38\x89\xfa\xbe\x69\x1a\x3a\x28\x8e\x55\x84\xb1\xeb\x84\xd5\x1d\xc2\x3d\xaa\x70\x99\x57\xb5\x1c\x51\x29\x5c\x6b\x35\x74\xa8\x4e\x2a\xe3\x0b\xeb\xe1\x24\xfe\x8a\x94\xd4\xa5\x8e\x63\xdf\x76\x28\x7a\x21\x55\x60\x15\x4e\x1c\xe9\xfa\xcc\xb2\xce\x3b\x66\xc2\x30\xc2\x84\x36\x4e\x1a\x30\x37\x10\x85\x62\x0a\x9a\xb6\xb4\x5c\x8c\x92\x2b\x89\x0b\x81\x86\x5c\x62\x06\x62\x70\x54\x39\x86\x47\x3f\xba\xaa\x85\x55\x25\x83\x09\x85\xb1\x58\xba\xc6\xd4\x74\x5e\x3e\x72\xca\x22\xff\x49\x78\x7c\x6e\xfe\x0b\xbf\xfb\xc1\x7e\xa7\x3c\xf9\xe6\x1f\x77\xbb\x60\xdb\x8d\xfe\xbe\xfe\x2a\xbf\x58\xe3\xa8\x8f\x9f\xb7\xab\x58\xa9\xdc\xf3\x2f\x7b\x7c\xff\xc6\x2d\x8f\x58\x78\xbe\x15\x16\x9a\x7d\xf8\x0e\x1f\x7e\x78\xc8\x47\xe6\xfe\x9c\xf6\xc7\x75\xf6\x5e\xeb\x23\xff\xf9\xbb\x3b\xad\xbe\xcb\xbb\x0b\x5d\xff\x9b\x7f\x5f\xf6\xc0\x3b\xcb\xec\xf3\xe8\xf2\xd7\xbe\xba\xfd\x9e\xff\x3e\x7b\xbb\xbf\x2f\xb7\xce\x8b\xf7\x3c\xf9\xb3\x3f\x6c\xbc\xf4\xff\x40\xff\x07\xfa\x3f\xd0\xff\x37\x41\xdf\xbf\xeb\xda\x6f\xcd\xda\xf0\xb0\x73\x8f\xfd\xe6\xd5\xbf\x38\x61\xe7\xd5\xf7\xd8\xe1\xa5\x8f\x9f\x72\xee\x92\xcb\xdc\xbe\xec\xb3\x87\x9e\xb3\xd2\x59\xe7\x3c\xf6\x9d\xab\xe7\xff\xef\x5d\x73\xee\x82\xf0\x9f\x3f\xdf\x39\x7d\xcb\xc3\x3f\xb2\xda\x6a\xff\x5f\xfe\x77\xf5\x7c\xff\xbd\xd9\xfd\xcf\x49\x9b\xbb\x8a\x7e\xe7\xf4\xff\xc7\x07\xfd\x83\xc5\xff\x73\xd0\x9f\x5c\xea\x8a\x93\x96\xfc\xe1\x36\x82\x1c\xf2\xc2\x7a\x57\x1e\xf3\xf7\x6d\x2e\xde\x8a\xef\x02\xd6\x11\x8f\x7d\xe5\xad\xd5\x93\x8d\xbe\xb7\xd5\xb6\x87\xfd\x2f\xc6\xfb\xf4\xd5\x66\xbc\x45\x8f\xbc\x7c\xf5\xe5\xe7\x8e\x78\xfb\xbf\xac\xfd\xd2\xf2\x5b\xac\xf5\xda\x85\x87\x9b\x07\xb7\xd8\xfe\xed\x39\xc5\x02\xef\x6f\x7f\xc9\x1e\x9f\xb9\xf8\x86\x19\xd0\xef\xbd\xeb\xbe\xfc\xcd\xf1\x83\x95\xbf\xf8\xcc\x62\x0f\x5d\x7d\xc2\xd1\x67\xec\xf8\x46\x7c\xe8\xd3\xf7\x5e\xf2\xc4\x8a\x7f\x79\xf7\xa9\x45\x7e\x7f\x6d\x33\x03\xba\xf0\xfe\x3f\x7e\x68\xf1\xd3\x4e\xdb\xe8\xea\x87\x0c\xfd\xea\x6d\xfb\x0f\x1f\x39\x63\xa5\x4f\xef\x73\xd9\xe3\x9f\x66\x47\xdd\x7c\x29\x79\x4c\xc6\x19\xd0\x83\xbe\xcc\x4f\x3c\xff\x85\xb3\x57\x5e\xf0\x82\xbf\x6f\x5d\xbf\xfe\xa5\xe5\x9e\x71\x7f\x3a\x71\xc1\x3f\x5f\x75\xdc\xf6\x66\x9f\x6f\xfd\xee\x87\x07\x1c\x32\x03\xba\xfd\x0e\x6a\xe7\x3f\xbc\xff\x9b\xf6\x6b\xc5\x1b\xbf\x70\xcb\x3d\x79\xca\xea\x0f\x2e\xb3\xf1\x0e\x07\xaf\xb4\xd8\xf9\x77\xfe\x64\xe7\x97\x97\x79\x7b\xf5\x19\xd0\x6b\x1f\x17\xdf\x7d\xf5\xbd\xb6\x78\xee\xad\xbe\xf9\xd4\xec\xa7\xca\xb7\xce\x5f\xf2\x98\xfc\x4c\x7c\x15\xfb\xe2\x9e\xdb\x3e\x35\xe7\xab\xc7\xcc\x80\x7e\x51\x9f\xf5\xf2\xe7\x17\xba\x6c\xad\x3d\x9f\x58\x69\xf3\x63\x9e\x3a\xef\xfc\xd7\xbf\x71\xd7\x13\xb3\xee\xc1\xab\x8a\x17\xe3\x91\x3f\xf9\xe5\xb3\x27\xcc\x80\x9e\x7e\xd7\xf5\xd5\x8b\x47\xe8\xec\xba\x05\xb6\xdf\xf4\xf8\xe5\x37\x3c\xf8\xa1\x5d\x5f\xf9\xf4\xe5\x27\x92\x3f\xbe\x7d\xf8\x39\xcb\x27\x1b\x3d\xf4\xe5\x19\xd0\x13\xd7\xbd\x7a\x93\xdd\x57\x12\x8b\x9d\xf7\xb7\xea\xd9\x1f\xdf\xfd\xe0\xe5\xdf\xdd\xe0\xbd\x43\x6f\x58\x69\xc7\x17\x3e\x7b\xc9\x23\xd7\x5f\xbe\xce\xbb\x1b\xcd\x80\xf6\xbb\x5e\xf5\xe7\x2f\x7f\xe2\x84\xe5\x7f\xbf\xb9\x7b\xff\x2b\x73\xae\x9b\xbd\xdd\x6e\xbf\x3b\xe3\x82\x5f\x3e\x7e\xe3\xa7\xd6\x3c\xf0\xdb\xfb\x6e\x3f\xeb\xf1\x19\x50\x06\xd1\xf2\x7f\x38\xfd\x1f\x4f\xdc\x71\xf3\x95\x9b\xac\x7c\x8c\x5d\x08\x1e\xb2\xce\x42\x8f\xdc\xbb\xda\xd2\xfc\x04\xf4\xb1\xcb\x4f\xfe\xe1\x8f\x66\x40\x3f\x75\x9a\x3f\x79\x63\x73\xff\x42\x4f\x9e\xab\x9e\xbe\xfc\xd6\x5d\x5f\x44\xf7\xa7\x2f\x7e\xfe\x47\x4f\xdd\xfe\x77\xb2\xd7\x0e\x1a\xdf\xb7\xf6\x0c\xe8\x7f\xcc\xbf\xee\xca\x8f\x9e\x70\xfe\xf3\x5b\x9d\xbd\xc5\x76\x8b\xbd\x7d\xfc\xed\x07\x5f\x74\xcd\xe2\x87\xee\x7c\xcb\x3d\xf4\xcd\x37\xdc\xeb\xf3\xdd\x43\x66\x40\x87\x73\x56\x7a\xe3\xf9\x6f\xa2\xe3\xde\x3c\xed\xac\x55\x57\xbe\xf0\xf2\xdb\x77\xba\xe9\xee\x85\xd7\xd9\x63\xc3\xf5\x36\x5a\xfe\x41\xb3\xd8\x8d\xe3\xb2\x33\xa0\xbf\x5a\xe0\xb7\x3f\xff\xf3\x69\x67\xa7\xdb\x2e\xfc\xee\xfc\x77\x2f\xfb\xd2\x6a\xdf\x92\x47\x5f\x7d\xeb\xdf\x96\xb8\x77\xe3\xd5\xbe\xf6\xf4\x01\xe4\x8e\x83\x67\x40\xef\x88\xd5\xe3\x8f\xdf\xf7\x89\x27\x7e\x76\x58\xb9\xf6\xa2\xdf\xbc\xf2\x9b\x6b\xe5\x2f\x9c\x7c\xd4\x4f\x56\x3a\xf0\xc8\xd9\xaf\xbc\x78\xe9\x9e\x8f\x9e\x3e\x03\x3a\xeb\xf7\x87\x1c\xb4\xd2\xae\x1b\xbe\xf3\xd7\x9d\x57\xee\x8f\x42\xbc\x7a\xe9\x04\x70\xe5\xee\xaf\x7e\x6b\xe1\xe6\x1b\x1f\xfd\xdd\xdb\x3b\xee\xb5\xf7\x0c\xe8\x91\x07\x5c\xff\xd2\x72\x37\xaf\xf9\x97\x7d\x7e\x72\xf5\xa7\x4e\xfd\xdb\xb9\x7f\x5a\x74\x2b\xb9\xcf\x9a\x64\xa5\x5f\xbc\xb4\xc2\xa7\x97\x3c\xfe\xb7\x9f\xf9\xf4\x0c\xe8\x9d\x6b\x6f\xc6\x8f\xbc\x77\xa3\xdf\x3e\xf8\xd4\x09\x17\x1f\xf1\xe2\x25\xfb\x3c\x75\xc4\x4d\x2f\xab\x55\x5e\xfe\xfe\xbd\x4b\x6f\x30\xeb\x83\x7d\x1e\xd8\x6d\x06\xf4\x95\xa5\x7f\xf9\xf0\x43\x3b\xee\xfe\xc2\xe5\x4f\xad\xb2\xc9\x35\xdd\x25\xa7\xde\x7a\xe1\x63\x27\xc5\x57\x5f\x3c\x77\xf9\x7d\xd6\x8f\x2b\xf5\xaf\x2d\x32\x03\xfa\xda\xea\xa7\xee\xfa\x97\x27\x1f\xbd\x67\x8b\x35\x7e\xb6\xb5\x9a\xb5\xd5\xb1\x37\x2e\xff\xc9\x53\xba\x17\x7e\xf7\xc9\xb5\xf6\xbf\xe9\x9e\xf7\x2e\x3b\x7b\xa7\x19\xd0\x74\xdb\x1b\xed\x36\x57\xdf\xb9\xe8\x4f\x16\x3e\xee\x85\x2d\x6e\x7e\x63\xd3\x25\xd7\xd9\xe1\xf6\x9b\x56\x78\xe6\xec\xaf\x0d\xb7\xff\x6e\xf1\x4f\x3e\x7e\xe4\x0c\xe8\x6f\xb6\x3f\xec\xa4\x48\xce\x0e\x1f\x5b\xf3\x85\xe6\xcc\xb0\xe2\x67\x9f\x3b\xe0\xe9\xfe\x27\x7f\x9a\xf5\x36\x5c\x7d\xbe\xc3\x6e\x3c\xbc\xfe\xdb\x0c\xe8\xaa\xf5\x29\xfc\xe7\xf4\xf1\xc7\x5e\xf8\xfc\xbe\x9f\x58\xe4\x8b\x3f\x5b\x5b\x2e\x73\xe0\xc9\x47\x6f\x7b\xc5\x91\x6d\xb9\xd4\x05\xfb\x9d\x23\x7e\x3f\x03\x6a\x36\xf8\xee\x29\xbf\x39\xa4\xbb\xff\xd1\x1f\x6d\x7c\xc3\x36\x27\xbc\xb3\xfc\xc7\xae\x5b\x66\xe3\xbd\x07\xfa\xcb\xfa\x80\x9d\xf6\xda\x69\xf9\x77\x8e\x9f\x01\xbd\x7b\xd1\x7f\x7d\xf3\x84\xef\xef\xf7\xbd\x5b\xbe\x70\xe1\x5f\xce\x3a\xfd\xbd\xf5\x5f\xfc\xfb\x5b\x1b\x7c\xb0\xfd\xef\xbe\xfa\xad\x7d\x4f\x9e\xf5\xf9\xdf\x3e\x7b\xc1\x0c\xe8\xb3\xf7\xda\x0b\xae\x7f\x7a\xe1\x95\x2e\x3b\x2c\x5c\x7d\xdc\xef\x6e\xfe\xa2\x38\xd0\xef\x3d\xeb\x9e\x39\x27\x1e\xff\x08\xdb\x76\xa3\xbb\x3f\x75\xe5\x0c\xe8\x8b\xef\xdc\xf2\xd7\xcf\x99\x33\x9f\x3b\xe4\xa0\x47\x96\x3c\xfe\x91\x1f\xed\x72\xff\x9b\x4b\x3e\xbb\xe3\x22\xab\x9f\xf2\xda\x85\xdf\xce\x16\x5e\xed\x8f\xcf\xcc\x80\x86\x03\x2e\xfd\x1e\x88\xc7\x5d\xf0\xcc\x01\x17\x3f\xfb\x9d\x3d\xbe\xf7\xa7\x6d\xaf\x79\x78\x97\x17\x5e\x6d\x54\x0d\x56\x57\x0f\x9f\x78\xe4\x7a\x33\xa0\x9b\xfc\xf2\xe1\x37\x96\x3a\xee\xc9\x7b\xd6\x38\xe3\xc4\xf7\x3e\xbc\xed\x82\xf5\xc9\x3b\xef\xbc\xb6\xfb\x2a\xfd\x1e\xcb\x2d\x36\xfb\x8e\x63\x9e\xb8\x64\xdf\x19\xd0\x15\x77\xe4\xbb\x75\xe1\x5e\x7a\xd5\xad\x07\x0e\xd9\x42\x8f\x6f\xfa\xfa\xde\xc7\x2d\xb0\xdc\xd5\x2b\xbe\x74\xe1\xe5\x87\x1f\xbd\xc3\xec\x67\x67\xbe\x03\x9f\x3e\x7b\xa3\xd9\x87\x9c\x76\xec\x77\x8e\x18\x36\xf8\xfe\xac\x2d\x1f\xf8\x6d\xb5\xfd\xb0\xda\x86\xeb\x6d\xd6\xec\xbd\x78\xf9\xef\xeb\xb3\x25\xbf\x72\xc5\x52\xff\xbd\xc5\xf5\xb0\x6d\x5e\xfc\xf0\xc3\x7f\x9c\xbe\xf2\xe1\x87\xed\xfd\xd9\xff\xfc\x8d\xc3\x57\xbf\x7b\xc9\xc5\x9b\x87\x4e\x5c\xf3\x9d\x1a\xde\xbb\xd2\x05\x70\xbe\x63\xbf\xd3\x67\x2b\x2c\xf8\xde\xc2\xbb\x74\x67\xff\xfc\x59\x70\xd4\x9c\xff\x8d\x3c\x6d\x89\xa3\xef\xfe\x6e\xf3\xcc\xfc\x77\xbe\xb9\xbb\x1f\x8e\x5b\xf1\xfb\x3b\xff\xeb\xa4\x7b\x2e\x78\xf4\xac\x45\xcb\x75\x9e\x5b\xf7\xab\xf7\xbc\xf0\x83\x79\xc8\x9f\xbe\x32\x67\xcd\x74\xc1\xa5\x6f\xbd\x78\xe7\xbf\x6c\xff\xc0\x6d\xff\xee\xbf\x75\xf3\x8f\x3f\xfa\xee\xa3\xdf\x7b\xfe\x33\x27\x9f\xf2\xea\x72\x8b\x3e\xf9\x95\x39\x87\xce\x83\xae\x37\xff\x8f\x0f\xfe\xe5\xde\x3b\xaf\x7c\xc9\x5e\x0f\xfe\x61\x8f\x77\xbe\xde\x9c\x7b\xeb\x97\x2e\x7b\xef\xa2\xd9\xd7\x5e\x71\xc0\x33\x67\xe1\xb3\x3f\x3d\x03\xfa\xd6\xfd\x77\xbf\xb3\xd3\x39\x0b\x1d\x77\x92\xf9\xf5\xfe\x1f\xbe\x9a\x9b\x7f\xbf\x73\x69\x7d\xfd\x5e\x6b\xfd\xed\xe0\x47\x1e\x5f\xe6\xd2\xf4\xe3\xb7\xce\x80\xde\xb7\xe9\x53\xd7\xad\xb2\xef\xba\xea\xc6\x1f\x37\x67\xdf\xbd\xdd\x7d\x17\xf4\x57\x1d\xf8\xd6\xe7\xbe\x74\xe8\x72\xbf\xfe\xd3\x66\x1b\xde\xf2\xce\x41\x5f\x9c\x33\xef\xef\x17\x87\xde\x8e\xae\xb9\xe8\xd0\xaf\x86\x33\x4f\xd9\xf6\x89\x45\xaf\xf8\xe9\xa1\xcf\x2d\xb0\xe9\x67\xbf\xbc\xf7\x9d\x77\xe7\xfb\x3c\xbe\xc6\x72\xf6\x91\x79\x7f\xd5\xb9\x77\x5d\xfa\xcb\x5b\xcf\x98\xf5\xfe\x92\xbb\xee\x5e\xb9\xcb\xf1\x7e\x9f\x58\xf6\x31\xf3\xc6\x8d\x7b\x7f\xea\xcc\x83\xf7\xba\x81\xcc\xbe\xe8\xf7\xf3\x90\x8f\xfd\xf1\xda\x23\xbb\x73\x4f\x3c\xfa\x83\xed\x2f\x3b\x6b\xfb\x65\x1f\xfd\xc8\x76\x5f\xff\x8a\x22\x6b\x2f\xfa\x30\xdb\x22\x2c\xfd\xd5\x77\xaa\xef\xcc\x99\xf1\x64\x97\x59\xeb\xf7\x3b\x7c\xf2\xfc\x6f\x98\xc5\xbe\xf9\xeb\xcb\x96\xdf\xf7\xd8\x9f\x3e\x74\xe4\x0b\x37\xbc\x69\xf8\x9e\xeb\xfc\x33\x5d\x7a\x83\x43\xee\x55\xf3\x46\x5a\x9d\xd3\xf7\xee\xf6\xbd\xcf\xdb\x62\xf7\x93\x16\x59\x78\xd7\x5b\x66\x1f\xdb\x6e\x7b\xd7\xa1\x57\x2f\x77\xfb\xac\x53\xd6\x5b\x6b\x95\x1f\xdc\x3e\xff\xbc\xfb\xcf\x7e\x70\x99\x25\x36\xfb\xd3\xf9\x87\x1f\x77\xea\x47\xe7\x3b\xf0\x99\x5d\xdf\x99\xff\xad\x3f\x2c\xfa\xdb\x17\xce\x4e\x9e\xbe\xed\x9c\x4f\xde\x71\xc3\xd1\x1f\xcc\x43\x5e\xb8\xf4\xa2\x1f\xbb\xef\xb0\x45\x77\xfb\xdd\x06\x9b\x6e\x75\xc7\x6f\x5f\xd8\xf9\x13\xc7\x5d\x70\xc6\xf6\x97\xdf\xfc\xc8\x83\x37\xfd\x79\xc5\x8d\x1e\xdf\xe7\xfc\x19\x73\xba\xf4\xee\x4b\x7d\x70\xcd\x35\xdf\x5e\x63\xa5\x83\x8e\xda\xf7\xc6\xd9\xb3\x76\x5e\xef\x4e\xb3\xc7\x6d\xfb\xff\xe8\xb4\x4b\x8b\xe3\xae\xdf\x6a\xe3\x6d\xcf\x9a\x01\xbd\xfa\xd6\x2f\x2f\xf9\xf7\xeb\x3e\x33\xdf\x35\x3b\xaf\xfc\xd5\xcb\xe6\x5b\x6a\xdf\xe5\xcf\x7c\xba\x1c\xf3\x5b\x56\xb8\xe4\x97\x37\x25\x0b\x9d\x75\xfe\x47\x67\x40\x3b\xfd\x83\xcd\x7f\xb5\xa0\xb8\xf8\x88\xbb\x7f\xb0\xc0\x52\xfb\xbc\xf6\xa7\xab\x16\x38\xe1\x57\x7f\xfd\xd1\x1b\x77\xbf\x7c\xe9\x2f\x76\xda\xeb\x22\xf3\xf2\xcc\x87\x9a\x7e\x66\x8b\xcf\xac\xb6\x65\xb6\xe8\x3e\xfb\xbe\x6b\xf7\xea\x57\xcd\xde\xfc\xdc\x03\x73\x16\x0a\x2b\x7e\xf9\x80\x63\x8f\xf8\xd9\x82\xeb\xde\x37\x03\xfa\xed\x53\xd7\x5e\xfd\x8f\xf3\xc1\x25\x17\xbd\xfe\x8b\xe7\x3f\x7b\xd9\x15\x9b\xbe\xb1\x4d\xb6\xcc\x71\xdf\xfb\xdb\x41\xeb\xdd\xbc\xea\xbd\x67\x6c\xff\xd6\xcf\x66\x40\x6f\x5d\xf3\xed\x6b\x5e\xbe\xf7\xd4\x1b\xff\xe3\xd9\xd5\xaa\x9b\xff\xf5\xd3\x85\xdf\xb8\x76\xc1\x3f\x5c\x76\x95\x5d\x67\x8d\x7f\xa9\x45\x3e\x0d\x2e\x39\x6a\xc6\xab\xb2\xf3\x3b\x47\xbb\xf3\xfe\x78\xdf\x77\x17\xf8\xd6\xaa\xef\x2e\x56\x1e\xbc\xf0\xcf\x5f\xb4\xfb\xe7\x3b\xfe\x7d\xe1\x5d\x5f\xf8\xe6\x41\xe5\x61\xfe\xe6\x79\xd3\xfa\x83\x6f\xc1\xa7\x97\xfa\xdc\x56\x27\x7c\xee\xe0\x1b\x97\x79\xf9\xe5\x7f\xee\xf4\xc5\x9f\xff\x6b\xcb\xe3\xdf\x87\x1b\xdc\x78\xf5\xa5\x9b\xee\xff\xe0\x0a\xf3\xcd\x43\x5e\xf1\x06\x7e\xf9\x9a\x1f\x9e\x7d\xeb\x5a\x2b\x5c\xff\xe1\xe2\x71\xfb\xf7\x1e\x79\xfc\xeb\x57\x2e\xb3\xd8\xb1\xbf\xda\xfe\xf7\x57\x2e\xf8\xe5\x8f\xee\x7e\xe8\x8c\x91\xde\x34\x67\xeb\x8d\x76\xf0\x57\xbe\x79\xf2\x95\x9b\x9d\xbe\x5c\xfb\x50\xb7\xc5\xd7\x77\xdc\xb6\x59\x61\xc5\xab\xba\x57\xaf\x5a\xe6\xd4\x7f\x7f\xfe\x8b\x33\xa0\x66\xd6\xfb\x0b\x3f\xf0\x8d\x5b\x66\xff\xf4\x21\x76\xda\xb0\xce\xef\xe7\x5c\xf3\xc1\xb6\x3b\x2c\x71\xcc\xb9\x47\x5e\x30\xff\xd9\x1f\xfe\xe6\xc8\x33\x9f\x9b\x01\xcd\xbe\xb2\x35\xf9\xc6\xd6\x1b\xfc\x65\xf1\x0d\x3f\xfe\xc0\xab\x0f\x5e\xff\xf8\xc5\x6f\x9e\xf2\xbe\x5d\x20\x79\xe8\x88\x85\x3f\xbc\xfd\xf2\x93\x2f\x78\x6c\xe6\xbb\xfa\x95\x03\xe6\x3f\xe1\x89\x33\xfe\xb4\xd7\x39\xb7\xd5\x8f\xde\x7d\xc4\x0f\x1f\xbf\xef\xa9\xbd\xd6\xba\x66\xd5\x5b\x6f\xed\x97\x98\xb5\xf7\x5a\x5b\xbf\xb2\xc1\xbc\xa9\xda\x8e\xed\xb5\xd4\x57\x57\x3a\xf2\xfa\x5d\xb3\xdd\x7f\x73\xfc\x32\xdb\x5c\xfb\xb7\x1b\x36\x59\xe5\xcb\xeb\xaf\xb6\xeb\xa9\xb7\x6e\x9e\x1c\x72\xcd\x7c\x9f\x9f\x37\x01\xfa\xf6\xcd\xee\x5b\xf7\xfa\xbb\x16\x29\xce\x59\x7b\x3f\xb4\xd4\x6d\x77\xaf\x7a\x15\xbc\x73\x95\x3d\xbf\xf8\xe0\x8d\x9f\xf9\xe1\x46\xab\xdd\xf6\xd9\x9f\xcc\x43\xfe\x23\xf9\xc1\x52\x67\x7d\xed\xcd\x64\xf9\xa3\xbe\xff\xef\xf9\x57\xf8\xd5\xf5\xdb\x6f\x38\xeb\xbb\x4f\xcf\xff\xc7\x3f\xa0\x35\x3f\xbb\xc6\x87\x0f\xb1\xf5\x67\xfc\x51\x79\x76\xc6\xea\xef\xfe\xe2\x94\xf4\xb3\x7b\x85\xf7\x8f\x58\xe3\xf4\x8d\x76\x3b\xf7\xee\xd3\x2f\x97\xbf\x7d\xe9\xcc\xab\x9e\x7d\xf5\xa6\xfd\x4f\x98\xb9\x54\x1c\xb7\xc3\x73\x7d\x7f\xe9\xe9\x57\xaf\xf5\xca\x68\x36\xc9\x4e\xbe\x68\xed\x95\x0e\xb9\x69\xe7\xf3\x6e\xff\xc7\x39\xeb\x6c\xc0\xbe\xb2\x4a\xbd\xcb\x0c\xe8\x87\x7f\xbd\xf2\xf5\x4d\x4f\x5b\x7f\xe3\xd3\xd6\x29\x7e\xb7\xee\x25\xbf\xbf\x85\xac\xfb\xaf\x47\xd6\x78\x65\xbf\xad\x77\x5a\x79\xd1\xcf\xb5\xfd\xfd\xb3\x66\x40\x5f\x7c\x6d\xd9\xad\xce\xbb\x73\xd5\xcb\xee\x5e\x56\xff\x6c\xeb\xf1\xd1\x6b\x3f\xf8\xe1\x8b\x0f\x9c\x77\xda\x9c\x8d\x8e\xf9\xc6\xf1\xcb\xf4\x4b\xbd\xff\xe0\x9c\xc3\xfe\x37\xf4\xf8\x6b\xef\x7c\x7c\x89\x4d\x5e\x39\x68\xa7\x9f\xac\x42\x5f\xfa\xdb\xba\x9b\xed\x75\xec\xd1\x5b\xbf\x78\xf4\x2f\x96\xf8\xd1\x75\x70\xdf\x0d\xfe\x7c\x43\x39\x6f\x02\xfe\x7c\xf5\x43\x5f\xdc\xa3\xdd\xfc\xe7\x4f\x0c\xa7\x1d\x72\x45\x97\x9e\xfb\xef\x93\xf6\x5e\xf9\x33\xcb\x9e\xfc\xc1\x9f\x56\xf9\x68\xbe\xe3\xaf\xfe\x7d\xfb\x8c\xfb\xcf\x7a\x2a\x8e\x47\xcb\x15\x16\xf9\xca\x65\xdf\xf8\xe8\x3f\xb7\xfd\xf4\x46\x8b\x6e\xb7\xec\x9f\x37\x21\xe7\x9f\xb6\xc6\x33\xe7\x9c\xf1\xfc\xfa\x3f\xb9\x70\xc6\xfd\x0f\xfd\xe5\xe6\xdf\xbd\x61\xef\x13\x8f\x1c\xd7\x24\xb3\x4f\xdb\xe0\xb9\xa3\x56\x7d\xe7\xba\x1f\x3d\x70\xc8\x8a\x7b\xee\xef\x7f\xf0\xcc\x1d\xdf\xfd\xd1\x45\xf3\xee\x7f\xd1\x16\xaf\x9d\x71\xdc\xb7\x1f\x7c\xe0\x0b\xcb\x69\xb4\xd6\x09\xe7\x15\x1f\x5f\xdb\xaf\xbb\xe1\x5f\x3f\x7f\xd7\x8f\xc3\x6e\x3b\x5d\x7f\xea\xe6\xa7\xcc\xb8\xe8\xe9\x97\x5f\xfa\xca\xfb\xbf\xd5\x97\x3c\x79\xc2\xe6\xe7\x81\x39\x6f\x7d\xe2\xfd\x4d\x17\x3f\xf1\xf5\x6a\xbd\xf9\xb9\xba\x6a\xc9\x35\x2f\x7c\xf6\xfc\x79\x17\xfd\xd9\x35\x2f\xaf\xf7\xc0\x3a\x0f\x5c\xf7\xf2\xfa\x17\x3d\xf1\x24\x5a\xf5\xb8\xcd\xbf\xb0\xf2\x71\x0f\x0c\x8f\x7d\xfd\x8d\xe7\x3c\x5e\x71\xd1\x4f\xcc\x7c\xab\xcf\x59\xf8\xb4\x62\xc7\x17\x9e\x99\x7f\xc5\xb7\xbf\xb4\xdb\x63\x5f\x96\x0d\xbe\xf9\xc1\xcb\xb6\x44\x7b\xb4\xcf\x6c\xe8\x16\x9b\xf5\xb1\x9f\x0d\x33\xa0\x57\x7c\x6a\x9f\xeb\x6e\xfd\xfa\x9c\x8d\xce\x3b\xfa\xc8\x7a\x99\x7f\x9f\x82\x16\x39\x7d\xcd\x45\xf6\x7a\xfe\xa3\x4f\xbf\x72\xe9\x53\x47\x7f\xe1\xa0\xaf\xac\x37\xe7\xf0\xf9\xff\x7b\xcb\xef\x61\xdb\x2c\x38\xff\x6a\xab\x1d\x31\xef\xca\x1f\xe8\x6f\x7d\x0a\xdf\xb6\xa0\x9d\x7f\xd6\xaa\x87\xfd\xe2\x9b\x2b\x9f\xf7\xcc\x36\x0f\x7c\xd8\xdc\xfb\x8f\x73\x7f\xfd\xfa\xe7\x97\xbf\xe9\x95\x9f\xbd\x35\x63\x10\x17\x3d\xb2\xec\xf9\xa9\x59\xfa\xcf\xbb\x3c\xfc\x17\xba\xcb\xdb\x1b\xee\xf8\xc3\xcd\xd3\xed\x97\x3f\xf2\xf2\xfd\x37\xfe\xce\xa5\x27\xcd\xfe\xe8\x36\x5b\xcd\x98\xaf\x23\x7e\xf1\x55\x73\xee\x09\xe0\xa5\x65\xf1\x17\x76\xb8\x7b\xb9\x03\xef\xb8\x69\xd3\xbd\xbe\xf7\xea\x77\x2f\x7e\xf4\xbc\xf8\x99\x25\x36\x3f\xff\xcd\xad\xe7\xcd\xd7\xd1\xfd\xfa\xb3\x1f\x7e\xf5\x90\x6f\xee\x7e\xc1\x27\x77\xbc\xed\xee\x2d\xed\xbe\x8f\xc0\x7f\xdc\xf8\xe0\x7a\x3f\xad\x77\xdf\x8a\xcc\x7f\xd6\x2b\x17\xcf\xb8\xff\x41\xfb\xed\xf0\xed\x27\x0e\x3d\xea\xe2\x65\x6e\x9d\xff\xa1\x2d\xc5\xba\xa7\xdd\xf0\xf3\xd5\xaf\x7b\x75\x83\x4b\x0f\xfe\xf3\xef\xd6\xf8\xda\x15\x8f\xde\xb1\xe7\x9c\x3f\xcd\xf7\xdf\xfb\xae\x0f\xdb\x66\x8d\x45\x3e\xb2\xf4\x8c\x49\xf8\xe4\xd7\xd6\xbf\xea\xde\x67\x5f\x6c\x8f\x3b\xf4\x81\x67\x37\xfd\xd1\x82\xcf\x1f\xf6\x97\x03\x37\xdd\xef\x98\x7c\xa1\x5f\xac\x74\x94\x5c\xaf\x6b\xef\x9d\x31\x88\x23\x6e\xd8\xee\x5b\x4b\x1e\xb8\xe6\xaa\xcf\x9e\xb4\xc5\x81\xdf\x86\xf9\x4a\xbf\xf9\xf6\x82\x61\xeb\x3f\xbe\xb5\xd9\xed\x6b\xef\xb0\xdd\xcb\x9b\x5c\xfa\xb9\x19\xd0\x6b\x6f\x3a\xec\xb2\x57\x1f\xfb\xe2\x35\x3f\x3a\xf2\x90\x9d\xf6\xb9\x62\xfb\x97\xde\xfa\xc4\x49\x57\x2d\x7a\xcb\xf6\xfb\xff\xf0\x91\xfb\x8f\xbc\x60\xed\x8c\xcc\x80\xbe\x7b\xc5\xfa\xb3\x2f\x7b\xf2\xc2\x7f\x6c\xbe\x5c\x7a\xc1\x7e\x4b\xad\xb5\xcb\x0b\x9f\xdf\xef\x82\x4d\x3f\x72\xca\xfe\x3b\xbf\x79\xca\x11\x5f\xfd\xf2\x5f\xc7\x39\x1f\x2e\xf5\xdf\x4b\x21\x0f\xdb\x66\x8e\xff\xf0\xfa\xd3\x57\x98\x77\xe9\xb5\xaf\x3e\xe7\xf2\x73\xef\x7f\xf0\xb2\xad\x8f\x7a\xf6\xf8\x4f\xc4\x9d\x65\xfd\x99\x39\xb7\x5c\xb7\x4a\xb2\xca\xfb\x37\xec\xb6\xc2\xf3\x17\xbc\xb8\xce\x8c\x0d\x61\x99\xbf\x3f\xbe\xce\x55\xaf\xde\x76\xce\x0a\x0b\xcd\x3a\xe8\xb3\x67\x6d\xbe\xe8\xad\x1b\x7c\x70\xef\xf3\xcf\x3d\xb1\xcd\x1b\xe9\x7a\x0f\xde\x7f\xcf\xfd\x76\xde\x53\x3b\xfc\xa7\x6b\xdd\x77\xee\x19\xe7\xe7\x0b\x1f\xb0\xd2\x37\x3e\x36\x9b\x75\xe6\xb5\x33\xc3\xf1\x4b\xfc\x64\xb5\x4b\x96\x7c\xf3\xfe\xf7\x16\x14\x7b\xcf\x88\x9d\x1e\x3e\xeb\x96\x27\x97\x7e\xf4\xa8\xe1\x4b\x37\xaf\xb8\xec\xfe\xd7\xfc\xc7\xa5\xdb\x7e\x6a\x81\x75\x67\x2f\xcb\x8b\x2d\x2f\x3e\xeb\x13\xf7\xbc\xb0\xf8\x8c\x49\x10\xaf\xab\x6d\x2e\xfe\xf6\xd1\x57\x7e\x7b\xb3\x9d\x56\x3e\xf8\xf0\xf2\xf1\x2b\xaf\x5a\xec\xb7\x77\xbb\x9f\xee\x70\xc5\x46\x6b\x3d\xfd\x3a\xb8\x67\xdf\x19\x23\x5d\x82\xc3\x6f\xdf\xfc\xd8\x15\x3f\xf9\xc4\xe1\x37\xec\x75\xeb\x52\x0f\x2d\xf8\xf1\xd3\x57\x3b\xf9\xc0\xf7\xee\x78\x26\xbd\xed\x6a\xbd\xe5\xac\x0d\xf7\x9f\x77\xff\xad\xe6\x7f\x7d\xf8\xf8\x1e\xd5\xc9\xe7\x9c\xf3\xe3\x55\x16\xfd\xe3\x03\x77\xdd\x7f\xc5\xba\xb3\xaf\xbe\x66\xe5\x1f\x1e\xb2\xe5\x4a\x5b\xbd\x7e\xc2\x55\x5b\xcc\x43\xbe\xec\x77\xb9\x71\xf6\x5d\xef\x1c\xb8\xe8\xce\xf1\xd5\x4b\xae\x7c\xe4\x96\x13\xbf\x3b\x67\x93\xfb\xbe\x72\xda\x71\x87\xe3\x77\xb7\xde\xf0\xe2\xcd\xee\x9a\x71\xfb\xad\xbe\xb4\xd0\x8e\xcb\x91\x83\xcf\xfa\xc6\x9d\x1f\xbb\x4b\xff\x66\xd6\xb5\x5f\xff\xcc\xa9\x7e\xaf\x35\xfe\xba\xfd\xa9\x5f\xf8\xec\x96\x67\x3e\xf0\xf8\x26\xf3\x2e\x1a\x7e\xb7\xff\x1f\xee\xde\xfd\x89\xb3\xbe\xeb\x37\xc3\x07\x2d\xb4\x8b\x7d\x6e\xa7\x33\x76\xfd\xd7\x99\x2f\x0f\xaf\x1d\xfc\xe0\x5e\xa7\x1d\xbe\xfb\x46\xf3\x90\x8f\xae\x3f\xe7\xd9\x5f\x2f\xd7\x9d\x72\xd1\x56\x7f\xbd\xe4\xd5\xe2\xdf\x37\x9f\x77\xc3\x39\xb3\xf7\x59\xf6\x43\xed\xd1\x6d\xe7\x6d\xf1\xfd\xad\x7f\x3f\xe3\xf6\xfb\x9f\xb1\xcb\x19\x3f\x1f\x16\x39\x73\xbb\x6d\x0f\xc3\xf7\x3d\xb7\xe5\x6e\x7a\x8b\x4f\xb2\x1d\x1e\x59\xee\xa0\x2d\xaf\xfd\xda\x2d\xff\xdc\xf0\xb2\x63\xe7\x5d\xb4\xdb\xec\x07\x77\xed\xff\xcb\xef\xbc\x7e\xd2\x67\x4f\x2d\x36\x59\x6f\x93\x73\xcf\x3a\xe5\x86\x87\xb2\x55\x8e\x3f\xe7\xba\x7f\xb5\xe7\xef\x78\xc9\x8f\x67\xec\x46\x47\x3f\xbd\xdf\xa1\xaf\x5e\x76\xc3\xe1\x7b\xfe\x6c\xe5\x7d\x86\x3b\x7f\xf5\x07\xff\xf6\x9e\x9f\xb3\x7b\x1c\x7d\xc9\x21\x77\x2e\xf9\xda\xc6\x57\xdf\x35\x6b\xc6\xc7\xbd\xf8\x02\x4b\x3d\xbb\xc4\x51\x3f\xbd\xe1\xa1\x0d\x8e\x81\xe7\x3e\xbe\xf3\xd6\x2b\x5c\xb5\xf2\x9e\xcb\x7c\x7f\xd9\x87\x7f\xbe\xe2\xb9\x67\x0e\x17\xb4\xef\xcf\xbb\xe8\x8e\x77\xcc\xbf\xf3\x3b\x6f\xcc\xb7\xed\xac\x25\xe7\xfb\xc7\x7e\x2b\x0c\xcb\x5e\x73\xcf\xdb\xcb\x5e\x3a\x5c\x7d\xe0\xe7\xf6\xbe\xf8\xd8\x57\x94\x98\xf9\xb1\xfc\xfa\x92\x5d\xce\x3e\x67\x8b\x3b\xf6\x3e\xe2\xce\x5b\xf0\x1f\xe0\xee\xdf\xff\xf0\xcc\x2d\xe5\x0b\xe7\x7c\xe3\xf9\x7b\xef\x7f\xf2\xcf\x5b\x3d\x75\xc1\xcc\x2d\xee\xba\xe5\x67\xff\x87\x38\x77\xbb\x8f\x1f\x23\x0f\xdf\xf6\xa6\xad\x37\xda\xe9\x84\xbd\x96\x7a\x1a\x7c\x7c\x85\xc5\x1f\x3e\xf4\xd8\xc5\xd3\x1b\xde\xd9\x71\x06\xf4\x9e\x15\xdf\xdd\x8b\x6e\x7c\x26\xde\xfa\xb0\x73\x37\xbc\x7b\xdb\xd7\xe6\x7c\xb0\xcb\xae\x5f\x7a\xea\xce\x05\x16\x59\x71\xcf\xf3\xfe\x74\xe8\x35\xd7\x7f\x7f\x06\x74\x8f\x03\xe1\xd2\x07\x5d\x78\x2c\x7b\xe8\x85\xd7\x36\x3e\xe4\x00\x7d\xc1\x51\x2b\xde\xf8\x96\xf8\xcb\x2a\xfc\x53\x3f\xfe\xcc\x3f\xb6\xba\x69\xf6\x01\x33\xa0\xbf\x5f\x67\xcd\x87\x1f\x3c\xcf\x7c\xf4\xaf\x2b\xfc\xad\x5c\xea\xfe\x8f\x2d\x37\xff\xb7\x0e\xdc\x7f\xad\x1f\xad\xb2\xc0\x3b\xcb\x3f\x72\x35\x3b\xe6\xee\xb5\x66\x40\xe7\xdc\x73\xf8\x0f\xce\x5e\x62\x91\x7c\xef\x2f\xac\x79\xfe\x92\xab\x3d\xbd\x1d\xfd\xf1\x76\xcf\x9f\xb4\xd9\xc6\xe5\x33\x17\xfd\xfe\xba\x11\xec\x38\xcc\x0c\x47\x16\x79\xef\xc6\x05\x9f\x78\xed\xa8\x47\x7e\xfd\xf5\xeb\x7e\xfe\xc7\x45\x3e\x6f\x37\x5b\xe7\xb7\x9f\x68\xf5\x1f\x4f\x39\x72\x71\xfb\xf0\x9d\x47\x7f\xf4\x94\x79\x4f\xa0\x3d\x7f\xbc\x7d\xe7\x17\x77\x3d\x6e\xbe\x05\x3f\x7f\xd2\x43\xef\xfd\xe3\xc8\x4d\xcf\xfa\xf8\x21\x7f\x58\xf0\xf9\xd7\xb6\x78\xfb\xe2\xab\x6e\xfc\xe5\xd1\x9f\x9a\xf7\x04\x9e\xbc\xe9\x4b\xff\xfc\xc9\x49\xc7\x14\xee\xe5\x3b\x5e\xba\xea\x91\xdf\xb4\x4b\xce\x6f\x7e\x49\x1e\xf8\xe9\x7e\x4b\x9c\x3c\x67\xc9\xaf\xbe\x70\xda\x7a\x33\x86\xfa\xcd\x7d\xe0\x13\xc7\x7d\xf2\xa3\xef\x7c\xeb\x8d\x23\x4e\x0d\x1b\xfe\xff\x18\x7b\xab\xb0\x2e\x9f\xef\x6d\x14\x10\x90\x94\x94\x06\x69\xa4\xbb\x4b\xe0\x43\xa7\x74\x87\xd2\x2d\x20\xdd\xdd\xa1\x74\x4b\x77\xa7\x34\x48\x49\x77\x4b\x4b\xa7\x74\xee\x83\xfd\xbf\x7e\xcc\xd9\xf7\x3d\xbf\xaf\x55\xf3\x4c\xac\x35\xf7\x9a\x47\xbb\x82\x48\x64\x28\xd3\x59\x97\xd0\x11\xea\xc2\x3b\x3a\xc0\x9a\xe0\x04\xf8\x00\x21\xf5\x33\x3f\x99\xda\x30\x71\x4f\xf6\xfc\xba\xd0\xfd\xc6\x62\x44\xd8\xa1\xf3\xe1\xf4\x84\xc6\x58\x82\xd5\xb7\x9a\xbf\xab\x1c\xbc\xe8\xcf\x17\xd2\xd3\xf8\xfb\x7a\xc3\x51\x31\x90\x84\x01\x69\x70\x96\x95\xfb\xda\xa8\xf3\x9e\xf2\x32\x5e\x48\x67\x7a\xc5\x5e\x9b\x76\xe5\x05\xb9\xaf\x98\xfd\x46\xd8\x1c\xf2\xe3\xe9\x89\xd5\x7e\x61\xf6\xba\xd2\x05\xdd\x11\x35\x6d\x5d\x96\xff\x24\xf3\xaf\xe7\x6f\x95\x49\x79\x70\x61\xf5\x93\x15\xcc\xa2\xcf\x39\x3a\x17\xf9\xde\x72\xf6\xaa\x96\xd9\x93\x67\xc8\x7d\xd0\xff\xc1\x7d\x51\xff\xd8\x9b\x12\x97\x40\x0b\xb0\xd4\x4a\x55\xd1\x5d\x94\xb6\x95\x4d\x10\x47\xb9\x54\x40\x46\x45\xd0\x76\x29\xb0\x13\x8f\x62\xa6\x4f\x70\x36\x4f\x81\x9b\xa9\x5a\xfa\x45\xbf\x83\x35\x02\x3e\xc2\x32\x39\xaf\x0a\xb4\xa7\x53\x37\x69\x7d\x22\xc1\x0d\x73\xd2\xbb\x60\x9e\xa4\xbc\x8b\x55\x1a\x01\xfe\x68\xdb\x17\x64\x2d\x32\x45\xd6\x4d\x56\x3a\x77\x9d\x36\x59\x95\x71\xb2\x1b\xda\x69\x81\xbe\xfc\x9c\x7a\xc1\xed\xd9\x6a\x69\x72\xcb\xf9\x31\x3a\x30\x55\x0c\x9e\xf4\xab\x2b\x4a\xde\x5e\xf9\xbb\xbb\x63\x3c\xee\xd0\x7d\xaa\x19\xcd\xa9\xdf\xbd\x9f\x94\xa8\x86\x75\x8a\xcf\xe8\x80\x43\x01\xce\x0d\x7f\x24\x7f\xa0\x6f\x9d\x97\xc0\x9a\x56\xd1\x64\x26\x5a\xca\x44\x79\x52\x1b\x08\x67\x76\x37\x56\x5a\xf1\x57\x50\xeb\xef\x1e\x02\x42\xbb\x65\x53\x3e\x39\xac\xd4\x1d\xaa\xb8\xef\xc7\x41\xd9\x7a\xa3\x6d\x54\x27\xd7\x99\xaa\xd9\x5a\x59\xe2\x27\x74\x24\x19\x89\x00\x8b\xdf\x46\x1d\x59\x6b\x34\xa2\x92\x51\xd0\xc7\xcd\x7c\xfd\x8b\xa3\xd7\x64\x33\xca\x63\x38\x5a\x9c\x1b\x9b\x3a\x57\x16\x42\x5d\xa5\x28\x80\x50\x33\x37\xe1\x4d\x86\xd5\x5c\xcc\xa9\x54\xb2\x6b\xfe\x4c\xca\x38\xdd\x9e\x7a\x36\x3b\x6a\xab\xbd\xb5\x3d\x4f\xb5\x32\xad\x59\xa1\x17\xa1\x3f\xa1\xf4\x52\xbc\x54\xa0\x4e\x0e\xb7\x6b\xb4\xdf\xbf\xe3\x9c\x3e\x8b\x45\x13\x48\x1f\x4b\x70\xa7\xb6\x2c\xcd\x31\x32\xf3\xec\x05\x84\x2e\xf8\x1a\x56\xa4\xc4\x46\x8b\x63\x10\x8b\xe4\xa7\x94\x87\x7e\x3a\xc4\xe6\xf6\x2a\x82\x38\x51\x1f\x58\xbf\x87\x3f\xef\x0d\x57\x02\x2c\x25\x27\x3b\xff\x38\x1d\x12\xa7\x15\xe1\xb1\x6d\x86\x5e\xf0\x8f\xc6\x8d\xc8\x40\x70\xc0\x7f\x15\x37\x5c\xfe\x77\xf3\x43\xc4\x0f\x60\xf4\x5f\xe5\xf5\x59\x89\x96\x0b\xab\x7c\x86\xce\x9e\xc3\x6e\xd5\x90\x3b\x4d\x7a\x2f\x87\x6b\xc8\x7c\xa8\x74\xa4\xb9\xe9\x44\xfa\x89\x1e\xd0\x2f\x28\xf9\x9b\x89\x8c\x87\x14\x11\x35\xdb\xe7\x6b\x5d\xb3\x17\x36\xc2\x13\x7e\x58\x61\x55\x21\xda\x85\x9a\xd5\xc3\x6b\x4c\x27\xd3\x17\xfd\xf5\x3f\x90\x42\x06\xcf\xc6\xa9\x10\x93\xca\xfb\xb2\xa9\xd0\x64\x5a\x6f\xf8\x2d\xdd\x1c\x7e\xdb\xc2\xb0\x04\x74\x8d\x5c\xd7\x16\x5f\x2d\xc2\xfc\x3f\x4e\x52\x48\x00\x94\x39\x6c\xc8\x8b\xb9\x66\x31\x2a\x19\xd7\x7e\xfb\xe5\x46\x1d\x67\x1c\x2b\x19\x31\x1b\x8b\xac\x93\x4d\x33\x65\xf1\xcb\xcf\x8d\xbc\x15\x7a\x3f\x3c\x40\xcf\xe4\xb4\x1f\x15\x0d\x65\x72\xeb\x64\xdf\x23\xbb\x8f\xc6\xfd\x46\x6e\xd3\xf6\xc1\x96\x9f\xa1\x51\x29\x4f\xa2\x5c\xdf\xfa\xb5\x99\x0e\x40\x77\x3d\x21\xa4\x62\x11\x88\xb3\x0d\xcf\x28\xf8\xe3\x5f\x60\x48\x31\xbc\x13\xa0\x50\xc9\x31\xba\x02\xbd\x3c\xc5\xfb\x73\x2c\xed\x00\xa8\x56\xaa\xba\x75\x16\x15\x5d\xaf\x8b\xeb\x0e\x1f\x2e\xb6\xc2\xf7\xeb\xbb\xbd\x1f\x07\xc8\x4f\x85\x28\x18\xae\x52\x8a\xd5\x2c\xe0\x12\x30\x70\x24\xfd\x8f\x67\x3f\x67\xc8\xaa\xac\x1d\x77\x39\xa6\xa3\xb7\x62\x39\x38\x65\xaa\x49\x1f\x17\x19\x51\xa0\x5b\xde\x5b\xed\x08\x80\xa2\xcc\x49\x7f\x3b\x32\x70\x16\x18\xf1\x0c\x34\x94\x21\x12\xb8\x7a\x28\xa8\xb4\x44\x4a\x57\x3f\xae\xd7\xa9\x66\xc5\x9c\x34\x02\xf7\x75\xaa\xd4\xe3\x5b\x82\xcf\x4a\x99\x0c\xbe\x64\x98\x02\x5f\xbd\x55\x9b\xe4\x07\xde\x2f\x51\xfb\x06\x14\xfe\x65\x49\x4e\x8b\x15\x6e\xbf\x2a\x41\xfb\xff\x81\xff\x55\xf4\xf6\x87\xf4\x9f\x2c\x3d\x27\x13\xbc\x88\x4e\xca\xe0\x72\x93\x7a\x63\xc2\x80\xb3\xbb\x07\x41\x72\xc8\x72\xdb\x7c\xc8\xc0\x0d\x3f\x1b\xc1\xff\x11\x29\x27\xc8\xd4\x5d\xd2\x0a\x7c\x0b\x88\x14\x47\x4c\x26\x5d\xf1\xbd\xd1\xb8\xe5\xd2\xba\xa2\xf5\xe8\x2d\xbe\xa3\x53\xeb\xb9\x33\xdf\x76\x50\xa3\x8d\x0b\xc8\x2b\x8b\x5f\xbe\x05\x33\x73\x44\x98\x99\xf0\x24\x39\x09\x62\xe7\x2e\x0f\x82\xbf\x22\x29\xfa\xe3\x41\x62\x99\xb6\xa8\xc9\xd4\x6f\xb5\x7f\x60\xfd\x7b\x05\xb8\x26\x75\xa6\x15\xdc\x7c\xf0\x15\xf3\x5b\x37\x6f\xcd\x82\x57\x05\x02\xc3\x27\x8b\x5a\x59\x73\x5b\x93\xac\x08\x54\x1b\x73\xfb\x0e\x71\x00\x2a\xad\x0e\x3f\xf3\x6e\xc2\x8f\x8c\xf9\x78\x6f\x88\x26\x20\x6d\xe3\x06\xef\x82\x4e\xbb\xf4\xe9\x5e\xb7\x91\x14\x81\x69\x90\x95\x00\x80\x2a\xfd\x22\xc6\x09\x53\x43\x4d\x55\x9e\x9b\x9b\x4a\x9a\x62\x81\xed\xc1\xc2\x1b\x2f\xf8\x72\xef\x91\xd2\x01\x3b\x48\xc9\xf3\x5e\x1b\xf0\x8a\xef\xa4\x30\xf2\x41\x7b\x76\x64\xd7\x26\x67\x7e\xab\x04\xd2\x50\xae\xe9\xa4\x3f\x19\x24\xcf\x7c\x9c\x75\xd3\x86\xe9\xdc\x0b\x14\xb1\xc2\xde\xf9\x25\xf8\x65\x53\xf2\x05\x78\x6e\x2f\x1b\xbc\xea\x0c\xcd\xf7\xf6\xae\xf0\xaa\xd9\xc5\x83\xa2\xac\x93\x95\x4f\xc9\x66\x03\x13\xc3\xe7\x74\x86\xd7\x75\x6b\x37\xdc\xba\x70\x25\x09\x1f\x45\x94\x18\xbc\x4f\xda\xbf\x15\xb6\xe3\x10\x0f\x86\x30\x27\x66\xbc\xfb\x03\xac\xaf\x54\x0b\xcb\x8b\x95\x33\x27\x9a\x55\x75\xbc\xd5\x36\xd8\x4b\x2c\x5f\xc8\x38\xe3\xd9\xf0\x6c\x28\xbe\xfc\xc0\x1a\xde\x4b\xda\x88\x03\x66\x98\x9d\xee\x28\x46\x43\x30\x42\x62\xce\xbe\x3e\xaf\x52\xfa\x5c\xb5\xf2\xbe\x38\x05\x02\x45\xe5\xe3\xce\xb3\x6e\xa4\x46\x84\xde\x0b\x72\x54\x34\x9d\xe6\x6d\x55\x6c\xb7\x1a\x74\x59\x65\x9d\xe1\x3b\xe9\x2b\xbf\xd2\xd6\x49\x65\x09\xec\x64\xdb\xd8\x98\xeb\xdc\xc2\x77\x80\xa5\x9f\xa4\x83\x8d\x8a\xb9\xdb\x6d\xad\x12\x84\x2a\xd0\xca\x68\x4e\x24\x9c\x39\x13\xb9\x2d\xec\xbd\xcd\x50\xb0\x0b\xc8\xbd\x7b\xd9\x01\x28\xa2\x2a\x69\x2e\x92\x79\x19\x3c\x41\xe8\xa4\xb5\xb2\x30\x0d\x1f\x32\x4e\xf9\xf8\x3b\xd6\x15\xe4\xfb\xd7\x0a\xaa\xc4\x30\x1c\xd8\x00\xb4\x84\xd6\x2d\xf9\x69\x89\xb7\x1b\x5a\x8c\xd0\x50\x3b\x62\xaa\x68\xd9\xb5\xbe\x48\xbb\xaa\xfc\x97\x44\x00\xad\x5b\x1c\xa7\x30\x15\xe0\xbf\xfa\xdb\x8f\x08\x28\x2e\x81\x1f\x83\xa2\xd8\x52\x5b\x2b\x5d\x6a\xaa\x48\x4a\x92\x4c\xca\xfe\x4a\x7c\x6e\x5a\xfe\x70\xb6\x8c\xdc\x05\x7c\x55\x6b\x0a\xcd\x16\xe9\xbb\x7a\xa5\xfc\x91\x4b\xed\xed\xf7\x95\x3d\x41\x85\x19\x62\xed\x66\xd7\x65\xb9\xa5\x15\x07\xb1\x3f\x26\x5f\x90\x13\x01\xa8\xf0\xde\x89\xfb\x3f\xf7\x96\x34\x34\x17\x7c\x0a\xa6\xcd\xe4\x76\xfc\xfe\x6e\xed\x0e\x48\x53\xbd\xa9\xfe\x5b\xc6\xc3\x0d\x58\x7a\x5f\xc9\x51\xb1\x7f\x8e\xf7\x8e\x48\x0f\x43\xfc\x36\x8d\x36\x69\x7a\xe0\x64\xb6\xa9\x42\x32\xf1\x8b\x30\x59\x6c\xc7\x72\xda\x0e\xf0\xa5\x50\x0a\x5b\xcb\x34\x71\x93\xa2\xb0\x2e\xc3\x46\x11\xe5\xe7\xf7\xfe\x8b\x11\x43\x37\x6e\x62\x5b\xe9\xc0\x68\x55\x38\x85\xdb\x0a\x7f\xd1\x7f\x90\x20\x48\xe3\x71\xbb\x29\x0d\x49\xf5\x43\xb4\x22\x1e\x50\xe0\x70\xf6\xab\x11\x69\x3a\x59\xd4\x3d\xb6\x1d\xae\x0b\x4a\xcc\x06\xf4\x9b\x8b\x08\x3e\x06\xa6\x7f\x8c\xb2\xcc\x82\x1a\x5f\xed\x88\xc1\x60\x88\x3d\xf2\x52\x7e\x18\x16\xe9\xfc\x3b\x8e\x7c\x46\xfb\x65\x16\xd0\xdf\x9a\xa6\xc4\x1e\xb4\xa4\x11\xf2\x64\x8d\x64\x7a\x4e\xe1\xa0\x49\x0e\x27\x03\x1b\xbd\xb7\x55\xce\x4c\xc4\xf6\xca\x1e\xd6\x84\x18\xd0\x8f\xe8\x26\xc0\x63\xb5\x43\x26\x73\x42\xf0\xd0\xb6\x8d\x84\xb7\xc7\xd8\x20\xdd\xa3\x09\x9f\xe2\x3c\xe1\xd9\x70\xca\xc5\x08\x0b\x08\xd5\xb0\x34\x7d\x76\xa3\xc5\x91\x17\xee\x8f\x5c\x16\xeb\x7d\xc2\x25\x4d\x40\xff\x40\x37\xc6\x16\x7b\x7e\x30\x86\x31\x2c\x67\xf9\x05\x28\x4c\x71\x28\xe4\x7a\x98\x68\xd1\x0a\xff\xea\xd0\xd6\x96\xab\xd4\x2f\x1d\x18\x6f\xed\xfc\x11\xf8\x1b\xa7\xca\x48\x8d\x70\x4d\x1d\x19\x18\x53\xa1\xe9\x54\xdb\xa3\x95\x0f\xe7\x77\x12\xfb\xa2\x41\xf4\xc1\x62\x8e\xa3\x9e\x6e\x2e\xbf\x09\x28\x18\x88\xc3\x7c\x32\x7d\x3c\xab\x80\xe3\x75\xf3\x25\x96\xc3\x66\x2e\xe6\xc1\xdc\xa8\xe0\x4d\x15\x8d\xe8\x77\x8d\xec\x52\x83\x86\x9e\xd2\x24\x8b\x98\x53\x84\x8b\xa4\x33\xa0\xd8\x33\x37\x82\x92\x77\x54\x6e\xd5\xf3\xf9\x68\x70\xb5\xe7\x93\x77\xee\xdf\xad\x4f\x59\xb2\xb1\x5f\xa2\x96\x10\x7a\x4f\x45\xc3\x25\x81\x98\x1a\x06\x84\x7c\xdd\x94\x54\xd8\x49\x8e\x87\xb2\x24\x80\x36\x8d\x5d\xfb\xc6\x96\xfc\x46\xd5\x9f\x6a\x2f\x9d\x66\x4a\x9d\xe3\x03\x19\x38\xfb\xb4\x7a\x75\x7e\x11\xab\x09\x71\x36\x54\x89\x3c\xb3\x65\x4d\x40\xb1\x18\xd3\x3c\xc7\xa3\x8e\x4d\x57\x2c\x4c\xcd\x46\x76\x53\xbc\xe8\x77\x82\x41\xdc\xe3\xcf\x11\x57\xdd\x87\xde\x88\x81\x81\x74\xfb\x85\x07\x56\x1d\x3e\x46\x92\x4a\x05\x9c\xe4\xac\xe1\x9f\x5b\xca\xbd\x20\xc7\x54\xd3\x05\x2d\x6d\x42\xb1\xcb\x5a\x55\x54\x2f\x3e\xb8\x2b\x46\x6a\x48\x9b\x2d\x20\x78\xf7\x88\xf2\x21\x53\x90\x71\x48\xf4\x02\x96\xc2\xe4\x3f\x88\xce\xdd\x55\x32\x5a\x53\x0b\xc0\x8c\x92\x7b\xab\x35\x0f\xd7\x90\x32\xd6\x2d\xa7\x9a\xe3\xd4\x7e\x4f\x7a\x57\x2c\x0c\x40\xf1\x84\x8a\xae\x6c\x23\x18\x91\x36\x20\xaa\x0a\x10\x4a\x93\x4f\xe7\xcc\x59\xaf\x82\x92\x69\x18\x07\xa4\x91\xae\x06\x67\xa1\x4d\x01\xa7\xe8\xf9\x24\x03\x56\x75\xe4\xa6\x3f\xc2\x19\xe3\xa0\x10\x73\xb0\x7e\xb9\x2c\x96\x25\xb3\x93\x60\x5c\xb8\x82\x57\x18\x79\x8e\x02\x0a\x38\x62\x70\xc5\x87\x43\xc4\xd7\xcd\xcd\x71\x0d\x2d\x51\xb5\x23\xbc\xc4\xf3\x28\xf6\x11\x4c\x26\x9c\xb8\x14\xb6\x0e\x18\xe9\x7c\xe5\x2f\xc8\x1b\x04\x96\xae\x2e\xc7\xb1\x34\x26\x82\xcc\xa1\x19\xa2\xda\x6e\x4a\x0b\x5d\xfa\x1c\xcb\x36\x5e\xf1\xa1\xda\x98\x7c\xbd\x48\x79\x30\x09\x16\xf3\xc0\x87\x16\x5e\x3f\x86\xa1\xbf\x0c\xf9\x4e\x7e\x1a\x6b\xee\xa9\x92\x2a\xd2\xae\x91\x27\xf8\xcb\x48\xdb\x49\x8a\x15\x48\x6d\x95\xde\x46\xbf\xc3\x39\x6f\x25\x7b\xd4\x62\xdb\x6e\x69\xe3\xba\x84\x53\xa2\x11\x17\x1d\xda\xf4\x49\xea\x99\x4c\xcc\xbe\x7b\x3f\xf8\x82\xb4\x09\xa5\xf7\x26\x60\x97\x71\xd5\x49\x9b\xb6\xc1\x31\x8a\x21\xa5\x4a\x1a\x96\x5c\x85\x63\x76\xa9\x6b\xb1\xf7\x55\x8d\xed\xcb\x01\xd4\x17\x64\x1f\xa0\xbb\x0f\xe9\xb7\xf8\x5c\xb6\xcb\x90\x2a\xe5\x5f\x26\xac\x2f\x71\xff\x81\x3a\x8b\xfb\x2d\x48\x6c\xe6\x2e\x3c\xca\xf8\x22\xb4\x5f\x87\xb9\x85\x9d\x5f\x21\x35\x06\x2d\x8b\x35\x3d\xda\xfe\xf6\xce\xae\x53\xc0\xac\xbb\xb8\xb8\x13\xb7\xbf\xfa\x41\x2b\x2d\xf6\x05\x79\x25\x58\x78\x3c\xf6\x7e\xbf\x6a\x83\xa9\x66\x3a\x87\x42\x61\xaa\x90\x3f\x2a\xf0\x6f\x76\x5b\x21\xfa\x6b\x99\x52\xe1\x37\xbc\xf3\x60\xfd\x9a\x34\xfb\x4f\x13\x96\x19\xc6\xb3\xf2\x6f\xfb\x5e\xc5\x76\x1c\x8a\x36\x79\xaf\xef\x7c\x64\x4a\xb0\xb3\xd8\xc6\xca\x3a\xb4\x1f\xae\xe6\x51\xff\xaf\x18\xf3\x1f\xb7\xce\xfe\x10\xb3\xe7\xfb\xa3\x64\x82\x97\xb9\x1a\x8a\xcc\x4a\xe3\xc8\xe4\xfa\x6c\x27\x29\x06\x37\xf7\x95\x26\x99\xbe\x1e\x82\xe6\xa1\xdd\xc0\xe2\x3e\xd6\xe0\x46\x48\x55\xe3\x09\x14\x06\x59\xdf\x41\xbe\xf4\x92\x7e\x1a\xa1\x58\x38\xd9\xb7\xcb\xde\xf6\x0a\x6a\x53\x2e\x7b\x97\x55\x7b\x4c\x38\x1a\xc5\x78\x81\xd5\x01\xd8\x0b\xcd\xfd\x96\xcf\x7e\x17\xa3\xbc\x84\x12\xaf\xc4\x99\x5a\xff\x89\x06\xba\xba\x47\x88\xc9\xbe\xcb\xad\x61\xf3\xfb\x79\xab\xb1\x0f\xb0\x56\x50\x15\xd8\xe3\x3c\x5f\xc0\xc3\x1a\x53\x5d\x4b\x3f\x1a\x4f\xff\x31\x79\xe6\xc8\xf9\xb6\xf0\x6f\xb3\xcb\x21\x60\x2a\x2c\x5f\x2f\x0c\x48\xda\x21\xa8\xca\xde\x4d\x5e\x9c\x3e\x38\x5a\xef\x69\xb6\x3f\xe8\x7c\xaf\x20\x5f\x2d\xd1\x67\x0e\xc1\x70\x5f\xca\x97\x23\x47\x02\xcb\xcd\x05\xf8\x1b\x1e\xc1\xfb\xa5\xbe\x46\xab\x3a\x0d\xd1\xac\x13\xb4\xcd\x3d\x62\xde\x10\x0d\x52\xff\xe2\xfd\x5c\x47\xb8\x0c\x4e\x7b\x30\xbf\x4b\xf7\xac\x2e\x33\xba\x81\x0d\x3d\x1d\x41\x4d\x9b\xc6\xc9\x96\x8f\x7e\x20\x25\xa6\xc0\x22\xbf\x2f\xe0\x93\xd5\x4c\xd6\xe7\xce\x79\x91\x3a\xfc\x16\x83\x79\xcf\x10\x29\x94\xc1\x8b\x7e\x44\x60\xa2\x35\xe3\x94\x47\xdb\x2f\x28\x11\x9f\x46\x7b\x15\x2a\x11\x53\x46\x7f\x13\x94\xaa\x44\x23\xba\xf0\x07\x41\x80\x9e\xa0\x86\x13\x86\x8b\x71\x9f\x85\x6a\x50\xb1\xfd\x8c\x35\x3b\xda\xbc\x1e\x6b\x16\x01\xfd\xc2\x18\x80\x8e\xba\x8d\x6e\x56\x4b\xbe\x86\x1f\x8a\xd3\xbb\x88\xe8\x37\x83\x4d\x73\x4f\x46\x9b\xc7\x93\x43\x4b\x4b\xdf\x57\x73\x5c\x73\x3e\x79\x31\x60\x93\x8c\x9b\xbf\x8a\x34\x42\x94\x19\x7e\x2d\x58\xbf\x5f\xae\x39\x23\x56\x64\xe2\x6d\x02\x8a\x30\x03\x45\xeb\xbf\x25\x3c\xdb\x5a\x20\x02\x1d\x91\xb0\x19\x28\xdc\x3c\x18\xe9\x77\x14\x74\xaa\x2e\xeb\xba\x1b\x72\x2b\x73\x0b\x72\xe3\x05\x01\xe2\x92\x83\x43\x6f\x4e\xac\x80\x11\x60\x0d\x1f\x7b\x0f\xc3\xb2\x3e\x35\x81\xe1\x6c\x17\x14\x71\xc2\xe8\x8b\x38\xfc\x8e\x9a\x83\xdb\x19\x27\x36\xff\x0f\x03\x16\x46\x33\xb0\x59\x7e\x6c\xf0\xf3\xab\xaf\x77\xd7\x6f\x30\x5e\xb4\x63\xe5\xcc\x78\x94\xe8\xd3\x3d\x7b\xcf\x32\x3b\x2b\xf6\x47\x6a\x53\xe7\x67\x2d\x20\x14\x12\x8e\x26\x70\xd2\xb3\x1d\xe1\x9c\x7e\x3f\x65\x6b\x7b\xf1\x7a\xa7\xe1\x89\xb6\xa3\x8b\xe9\x9b\x93\xa0\x15\xab\x96\x9b\x4a\x32\x90\xe1\xbd\x62\x2d\x14\xac\xab\xff\xad\x1e\x57\x27\xc3\xea\x70\xf6\x0a\x22\xa0\x14\xb2\x89\xa0\xcc\xe8\xd6\x93\x2a\x28\x53\x2c\x0d\x9e\x2b\x12\x26\x1b\xd0\x13\x4e\xf2\x51\x3e\x35\x8e\x95\xe2\xf3\x56\x27\xef\x10\xa9\xed\xad\xfd\x2e\xff\xf2\x3a\x4c\x98\x65\x01\x8a\x37\x0c\x98\xb0\x98\x08\x92\x4d\xfd\xa8\xb4\xe8\xf2\xc6\xc2\xaf\x4f\xc6\x2e\xb8\x09\x43\xda\xfe\x85\xb3\x5a\xe6\x42\x6e\xd8\x36\x50\x9f\x03\x70\x81\x52\xd4\x10\x75\xbf\x89\x95\x9c\x34\x8f\xed\x5b\xfe\xfa\x2c\x7d\x0a\xbf\x73\x8e\xc3\xcc\x08\xc1\xbf\xaa\x64\x44\xe4\x9c\x3c\x36\xc0\x09\xe8\xf4\x93\xd9\xd9\x8d\x61\xfb\x96\xe4\x49\x19\x9b\x8a\xa7\x04\xf2\x43\x05\xfe\xc7\x93\xea\x94\xdd\xe9\x72\x7f\x57\x8f\x05\x53\x3f\xc0\x7d\xe7\xeb\x82\x39\xf8\x39\xfd\x6a\xe3\x67\xe4\xb0\x3e\x6b\xdd\xad\x82\xa7\xc1\xa6\xcc\xeb\x51\x9f\xf9\x8a\x4c\xa9\x2d\x0c\x21\x8c\x17\xa1\xbb\x16\xfd\x1e\xa8\x5c\x38\x17\xe4\xce\x9a\xed\xdd\xc5\x5f\x39\xad\x67\x8b\xf8\x86\xf9\x57\x74\xc2\x70\x3a\x30\x19\xe8\x3f\x2e\x03\x42\x13\xd3\x0f\xb6\xc2\xf8\x55\x1d\x04\x29\x9e\x93\x92\x4e\xfd\x1c\x7f\x50\x73\x7e\x1a\x8c\xc4\xdb\xdc\x64\x6d\x75\xab\x70\x8c\x21\x7c\x11\xda\xfa\x7b\x45\x0b\xed\x91\x29\x36\x53\x04\xaa\x94\x53\x63\xa4\xdf\x1a\x79\x8b\xb2\x55\x02\x33\x7e\xb5\xef\xf7\xf4\x64\x94\xdb\x3a\x10\xd3\x94\x2b\xc6\x9a\x7b\x77\x66\xf4\x82\xc2\x25\x73\xa8\xd7\x0b\xc1\x13\xeb\x02\xf4\x03\x02\x59\xf7\x97\xe3\xc5\xe5\x85\x23\x8b\x37\x00\x34\x80\x4d\xf7\x52\x20\xaa\xa4\xeb\xfd\x34\x57\xd5\xba\x44\x4d\xb1\x2e\x6a\x9a\x37\x44\x67\xc7\x52\x47\xd9\xee\x37\x93\xa0\x96\x17\x00\x3d\x8d\x21\x0a\x40\x66\x79\xad\x20\xef\x3d\xb4\xd5\x95\x5c\xae\xaf\xaf\xdf\x24\xd6\x31\xd3\xd7\xed\xb9\x1b\x24\xa6\x28\xf5\xbd\x10\x80\x36\xde\xfa\x8b\x12\xce\x48\xd6\x0d\x92\x24\xd2\xe6\x3a\x98\xef\x04\xd6\xc7\x09\x23\x17\xf6\x7b\x8f\xc2\x35\x97\xda\x58\xcd\xb7\x00\x01\x50\x28\xd5\xe5\xbe\x71\x29\x1b\x95\xfd\x48\x95\x83\x4a\x64\xba\xc2\x49\x94\xe4\xa3\xe5\xc6\x43\x7c\x94\x66\xea\x1e\xf1\x59\xaf\xe9\x25\x00\x81\xb2\x0e\x73\xae\x3f\xff\x46\x5c\x6e\xe5\xe1\xeb\x53\x5b\x4a\x3e\x04\x8d\x99\xb6\xff\xf4\x86\x9e\xbd\xf0\x1a\x5d\x15\xaa\x1e\x01\x84\xd2\x9f\xb6\x09\xa4\x4b\x93\xbf\x52\xd8\xb0\x13\xfd\x9e\x2b\xc5\xfe\x99\x78\x88\x4b\x59\xbd\x72\xfe\xc3\xbb\x05\x63\x2f\xbd\xeb\x0a\xe0\x5c\xf1\xca\xfd\x24\x7b\xf3\x87\x27\x2b\x6e\x19\xde\xa0\xc7\x82\x5e\x8a\xb8\x39\x5e\x98\x97\x53\x0a\xdd\x46\xd5\x4f\x61\x1f\x2d\x33\xb0\x16\x58\x7a\xae\xc2\x90\x14\x7c\x91\xf7\x28\x4f\x79\x56\x48\xfd\xee\x93\x80\x2f\xd2\x9d\x24\x5e\xd2\x50\x49\xbd\x7b\x71\x0e\x76\xde\x8b\xd0\x78\x37\x79\x56\x07\x78\x3c\xd3\xa5\xcc\x42\xa2\x9f\x39\xb3\x67\x93\x68\x4c\x74\x61\x89\xf9\x83\x1d\x12\xc8\xd8\x1e\x1c\x7f\x36\x5e\x90\x3b\x8e\x4a\x05\xeb\xa5\xcf\xe7\x35\xe2\x35\xc3\xd3\x73\x9f\xaa\x3d\x86\xa3\x7b\xfa\x83\xf5\xee\x2a\x9f\xd0\x28\xf0\x39\x19\x7e\x02\x31\x1d\xa7\xf8\xec\x5e\x7e\x97\xda\xf9\xdb\x06\x3f\x61\xb3\x3e\x6f\xf5\xd5\x1e\x3a\x76\xdc\x4a\x6a\x13\x39\x29\xba\x8c\x99\xc7\xc1\x10\x60\x29\xf7\x2b\x5f\x9b\x5c\x2a\x0f\xd4\xa9\x1e\xdb\xf9\xa9\x0d\x1e\xa3\x00\x23\xd2\xe8\x24\xcc\xef\xa4\xe5\x75\x3b\x97\xda\x08\xeb\xc0\x01\x34\xb9\xb9\x4b\x42\xd7\x9f\x57\xd9\x98\xce\x32\xf4\x5d\x4a\x9b\xba\x77\xca\x8d\x41\xf0\x58\x48\x0a\x5b\xec\xe3\x03\x3a\x86\xfb\xcd\x0b\x72\x58\xe9\x66\xf7\x76\x6c\x72\xe5\x1b\x4b\xbf\x84\xb9\xdd\xaf\x64\x3d\x98\x29\x68\x07\x05\x26\x2d\x3f\x36\x0b\x65\x0f\xe4\xfa\x67\xf0\x66\x9e\x47\x50\xb0\xbd\x53\x88\xb6\xeb\x5c\x35\x93\xd3\x88\x0f\xce\xd3\xca\x4d\xdf\x8e\x9c\x22\x62\xcb\x83\xb8\xcf\x5a\x8f\x34\xf1\x2a\x10\xe6\xff\x6d\x99\xf6\x87\x44\x42\xc1\xc2\x04\x01\x8b\x25\x8c\x26\x04\xba\xbb\x16\x12\xc4\xf2\xf5\x73\x7c\x58\xaa\xd1\xd1\x9f\x16\x6d\x43\x5b\xae\x4e\xc8\x8a\xaa\x64\x90\x02\xf4\x36\x60\x44\xb4\x9f\x71\xd5\xfe\xf7\x53\x8b\xb1\xd9\x60\x89\xde\xfa\xf6\x26\xbe\x85\xad\x2f\x19\x44\x67\xa3\xdb\x4a\x5e\xbe\xe4\x35\x9f\x83\x00\xa8\x3e\x57\x19\xd4\xcf\x54\x8b\x29\xca\xca\xef\xfa\x15\x6d\x67\x7b\x1c\xbf\xfc\xa8\xdf\x38\xee\x9c\xd0\x10\x5d\x90\x87\x7b\x65\xc8\x02\xd0\x37\xfe\x68\xb4\x99\xad\x9e\x5c\x65\x06\x27\xde\xb9\xad\xc4\x0a\x79\x76\x2b\xde\x8d\x2c\x92\x37\x37\x0e\x24\xa2\xb4\xf0\x91\x0f\x00\xf4\xdd\x47\x0e\x3d\x15\xf3\x1f\x0e\x54\x4b\x37\xa9\xe2\xbe\x71\x9b\xa7\x3d\x6c\x8d\xe6\xa2\x2c\x9d\x4d\x3c\xa4\x9e\xff\xd0\xdf\xf1\xfd\xef\x0e\xe5\xbf\xb6\x15\x7f\xc8\xfb\x0f\x50\x08\xc0\x1d\xca\x97\x87\xe9\x34\x4e\xdf\x0f\x1f\xce\x2b\x7d\x22\xf4\x95\x72\xa9\xf4\x5c\xfd\x2d\xe9\x4d\x57\xff\x9e\xf2\x73\xe0\xfe\x23\x99\xa5\x00\x8d\xc0\xf3\x20\x38\xa9\xe5\x55\xcb\x38\x7e\x8f\xec\x49\x9f\xfd\x36\x68\x94\x9e\x16\xf1\xf1\x73\xe0\xdb\xdd\x7e\x57\x67\xc5\x38\x0e\x00\xca\xb7\x5d\x2e\xe4\x6a\x97\xe1\xda\xb0\xcd\x41\x5c\x82\x5b\x66\xd9\xa7\xdf\x1a\x20\x72\x8e\x3b\xe7\x5d\x50\x66\xa8\x38\x82\x11\x00\x40\x31\xf8\x70\x8d\x27\xb9\x76\x32\xa3\x70\x83\xd3\x85\x25\xab\x28\x97\xad\x1d\xbf\x8e\x7f\x2f\x62\x68\xbd\xda\xe7\xf6\x69\xed\x49\xf8\x9f\x6b\xff\xb5\x0d\xfa\x43\x48\x61\x29\xa1\x00\xd7\x8e\xa3\xe1\x46\xb3\x2e\x0b\xe8\xc7\x61\x1a\x23\x64\xee\x66\x02\x92\xc9\xee\x7a\xe6\x44\x08\xe7\x5c\xb8\x9a\x2d\x0d\x6e\xc8\x3d\x00\x23\x22\x9f\xd3\xdc\x23\x37\x7e\xb4\x53\xac\x96\x0c\xb6\x79\x66\xd1\x96\x88\x91\x87\x75\x90\x05\x45\xe6\x76\xdb\x96\x61\x98\xd5\x81\xcb\xd1\xf5\xc3\xab\xf8\xcf\x9d\x8d\xd7\xa3\xa4\x71\x3e\xa1\x09\xdf\x8a\x2d\xd9\x48\xf3\x43\x96\x56\x78\x14\xcc\x21\x32\x08\xf5\xfd\x60\xc1\xf3\xe3\x4d\xf9\x83\x45\xa3\x02\x74\x95\x1c\x4d\xf3\xa7\x53\x7c\xbf\xe6\xf8\xfe\x09\x74\xa6\x9f\xcf\x8f\xfd\x06\x04\xa4\xa9\x29\x47\x57\x25\x28\xff\x3f\xf0\xbf\x08\x7e\xfe\x90\x47\x97\x6c\x83\x84\x97\x49\xf9\x19\x4a\x3b\x42\x6d\x40\x51\xeb\xed\x4a\xec\x68\x86\x74\xe6\xf6\xdf\xd0\x21\x0e\x1f\xd5\x26\x3c\xde\xf4\xf1\x16\xe7\xe3\x26\x11\x60\xf7\x5c\x31\x4f\xc7\x55\xc2\xaa\xc2\xaf\x35\x25\xb4\x09\x25\x83\xfe\x2a\xd2\x55\x74\x48\xea\x32\xbe\xbd\x54\x29\x63\x45\xc1\x8d\xf6\x82\x1c\xdf\x2b\xb6\xb5\x20\x4f\x0a\x1c\xe4\xaf\xa8\x5c\xd7\x78\x7b\xab\x3a\x53\x7b\xcf\x45\x57\xfe\xde\xcc\x55\x27\xfa\x5b\xe5\xc7\x08\x60\x49\x6c\x4b\x3f\x7c\xd5\x41\xcf\x8f\x8e\xf4\x89\x39\x9e\xd0\x2f\x28\x9e\xbe\xd5\xf5\xaa\x3a\x0b\x33\xa0\xfd\x0c\x1e\x75\xa7\x23\x78\xe4\x45\x68\x9f\x42\x9b\xa2\xaa\x57\xf3\x42\xf1\x27\x89\xb0\xa7\x85\xef\x25\xee\xe7\x69\x23\xb9\x38\x45\x3c\xf0\x61\xc5\x92\xfb\xb3\xd0\x36\x40\xb4\x48\xfa\xb7\xd9\x99\xea\xa4\x19\xd0\xb3\x22\xf0\x27\xc7\x8e\x7e\x87\xb7\xf1\x25\xc5\xef\xd5\xe6\xd9\x66\x47\x71\x4a\x79\x3f\x1d\x03\xd0\x45\x7c\xe8\xdb\xfb\xc8\x41\xbd\x7e\x76\x53\x89\xbe\x88\xcb\x81\x47\x98\x5f\x96\xf0\x0e\x13\x6b\x21\x5e\xb1\xb6\x0d\x06\xbf\x89\x01\x53\x69\x82\xac\x43\xe8\x3e\xf0\x35\xa6\x6d\x7b\x95\xdd\xea\xd8\x23\xca\x48\x28\xaf\xe1\xce\xa4\x0c\x88\x17\x3b\x8f\x51\xf0\x4e\x9e\xbe\x98\x9a\xe0\xa3\x51\x69\xb3\x9c\x9b\x50\x59\xdf\x4c\x7f\xfd\xc3\x41\xa0\x10\xcd\xad\x5e\x05\x5e\x05\x76\x00\xc5\x6f\x66\xf5\xe2\xeb\x67\x60\x4d\x14\x2f\xdb\xe3\x62\xe1\x68\x17\xd0\xa6\x60\xb7\x78\xe2\x65\x2d\xbd\xf9\x8a\xe8\x8d\x68\xce\x83\xb1\xee\x55\x51\xd6\x11\xd3\xe1\x00\x9c\x88\xd0\xec\x82\x9e\xa1\xfa\x61\x68\x18\x64\x43\x22\x9c\xa2\x20\x9c\xbc\x7e\x39\x1f\x48\x45\x5e\x2d\xe1\x7c\xc5\x0e\x57\x17\xd8\x7d\x41\x6e\xb1\x4b\x97\x3e\x58\x78\x35\xd1\x8c\x3c\xe7\x32\x1d\xfa\xa9\xaf\x19\xa5\xf9\x8b\xb4\xa8\x41\x74\x59\xf7\x48\x87\xaa\xfb\x59\x01\x9f\x48\x0d\x43\x69\x5c\x77\x29\xab\x12\x70\x3d\xdc\x68\x8c\x35\xff\xba\x11\x66\x0e\x3f\x55\x21\x1b\xff\xc2\xf2\x91\x9a\x5b\x1e\x01\x72\x1d\xa3\xe2\xac\x9b\xd0\xf2\x9f\x70\x87\x5b\x58\x14\x9c\xc5\x6a\xb1\xce\xa5\x50\x9d\x63\x4c\x35\xf3\xbe\xac\x05\x0f\x05\x17\x87\x20\x05\x8a\x02\x95\xa7\xf7\xbe\xde\x83\x9e\x4c\xba\x3e\x47\x3b\x76\x6a\x83\xd2\xd8\xce\xe1\x9a\xff\x16\x9a\x51\x23\x04\xc9\x1d\x3e\x68\x0d\x80\x52\xda\x71\xc1\xa4\x75\x6c\x3c\x72\xe2\xd0\x0a\x44\xeb\x15\xc0\x4e\x21\xdc\x62\x3c\xad\xaf\x13\xe3\x5e\x8c\x50\xcf\x86\xd9\x2c\x00\xd0\x3e\x71\x2e\x0c\xb2\xc7\xf1\x47\x7b\x44\x6d\xc2\xfb\xc5\xe0\xbf\x53\x0b\xee\xf5\xcf\xaf\xd1\xf7\xf8\x49\xbe\x7d\x5a\x8a\x29\x34\x06\xbc\x22\xfc\xc6\xc9\xfa\x4f\x5e\x31\x2b\x83\x37\x80\xcc\xd3\xf0\x2c\x30\xb9\xcd\x8f\xd0\x83\xed\xd2\x57\xc8\x57\xd6\x58\x3c\xfe\xd0\xe6\xc5\x2b\xcd\x52\x86\x22\xc4\x14\x9a\x60\xca\x89\x02\x74\x99\xc8\x4c\x82\xe1\x30\x27\x76\x27\x7a\xf1\x0f\xbe\x8b\xdf\x72\x27\x8f\x5a\x77\x81\x91\x92\x8c\xd7\x6d\x1c\x2c\x9f\xf3\xd6\x7a\x6a\xc1\xd9\x0d\x37\x7d\xef\x89\x3b\xaa\xf3\x40\xb0\xd5\x56\xcd\x16\x97\xce\xcd\xe9\xe4\xf2\x22\x54\x2f\x30\xea\x94\x44\xe5\x0f\x7c\xf7\x88\xd1\xc8\x29\x54\x55\x73\x61\x73\x95\xec\xf2\xae\x31\x46\x23\x94\x32\x73\xcf\xd0\x10\x50\x9e\xaf\xb9\x78\xf3\xe1\x47\x72\x62\xab\x85\x2d\xc3\x67\x61\xc6\x0a\x5a\xc6\x89\x41\xef\x33\x53\xbe\x15\x1f\xa1\x8c\xd3\xd7\xb6\x9a\x60\x51\x20\x85\x63\x6a\x17\x1d\xc1\x88\x37\x82\x62\x5b\x5a\x05\xe7\x69\x19\x7f\xc3\xe6\xd7\x04\xfe\x9d\x05\x71\xe9\xfa\x58\x78\xbe\x78\x0a\xe0\x3e\x59\x2f\x0d\x63\x1c\x87\x8c\xbf\x2e\x7b\xee\x93\x5f\xa2\x69\x65\x84\x40\x14\x65\x7a\xd7\x05\xb9\x83\xe7\x18\x1e\xcd\x89\x3b\x3f\x70\x22\x34\xf2\x69\xe2\xf7\x09\x08\x27\x65\x3b\x3d\x3c\xbc\x3f\x28\x5a\xc3\xa0\x5e\x23\x3e\x70\x18\x93\x3a\x80\x4d\x73\xfc\x1a\x5d\x0e\xe8\x5f\xfb\xce\x1f\x85\x59\x46\xc8\x9a\x4b\xae\x60\x69\x52\xa1\x81\xe1\xa0\x2c\x91\x77\xcd\x6d\x47\x9c\xd8\x66\xb5\x82\x7d\xc7\x38\x05\xe8\x27\xd6\x63\x17\xae\x4b\xe8\x73\x63\xf4\xad\x90\x94\x5f\x8f\xc5\xc6\x7f\x5d\x42\xb0\x90\x5b\xd1\x82\x4f\x59\x95\x58\x73\xcd\x96\xf1\xa2\xff\x1b\xe2\xe9\xa0\x78\x46\x69\x9b\xe6\xa0\xfa\xfa\x5b\xc8\x6e\xd0\xd6\x7e\x49\x5e\xf0\xda\xe3\x25\xb5\xaa\xf6\x74\x71\xb9\x79\x08\x20\xd4\x91\x9a\xa6\xd4\x30\xcc\x27\xf1\x2b\x0e\x26\xc2\x17\xc6\x50\x1b\x86\xb2\xac\x67\xdd\x30\xbc\x56\xd6\x3d\x42\x4f\x75\x51\x4b\x72\xa0\x7a\x34\x2f\x16\x60\x20\x42\x28\x73\xd4\x45\xf9\x14\x7f\xf3\xd0\x1e\x8c\xfb\xef\x1e\xad\xba\xbc\x10\xb9\x14\x01\x43\xa5\x8a\xfb\x0d\xe0\x94\xc2\xd4\x14\x6b\x86\x59\x21\xcd\x9b\x09\x9c\x70\xed\x2f\x0b\xe3\xe9\xa1\x73\xbc\x17\x9d\x34\x31\x51\x87\xa3\xb9\x55\x68\xbc\x16\x00\x74\x28\x59\xa1\xa0\x7c\xee\xe3\x76\xe3\x40\xee\xdb\x07\x17\xcb\xb2\xc6\x99\x26\xed\x5e\x8e\xb1\xab\x96\x31\xe4\x32\x76\x07\xed\x12\xc0\xd4\x3e\x6d\xe5\x6d\x68\x81\xb1\x04\x37\xca\x4b\x65\x78\x1f\x16\x0f\xef\xfc\xe0\x7b\x97\x9b\x71\xaf\xa9\x6a\x2c\xa4\xb9\x20\x62\xb8\x17\x53\x07\x6b\xcc\xaa\xd9\x7f\x2a\x95\xe6\x15\x8f\x14\xc3\x1d\x30\x8b\x3e\x2f\x70\x08\xd5\x27\x32\xe9\xdd\x60\x8b\x71\xdf\x7e\x2a\x4d\x06\x84\x0a\x7c\xe8\x56\x7a\xcc\x38\xb7\x53\xab\x93\x88\xae\x8b\x4a\x6d\x90\xe6\xc0\xab\x90\x7d\x60\xf8\x84\x85\x6e\x2e\x1b\xe7\x73\xae\xf2\x22\x34\xe6\x0d\xe6\x2b\x0d\xe4\x62\x51\x5d\xaa\x3a\xad\x19\xc5\x4c\x9e\x77\x76\xba\x58\xed\xf7\x34\x16\x4d\xff\x5a\x16\xf2\x0f\x05\x2c\xae\x16\x90\xfe\x7f\xe0\x7f\x31\xbc\xfd\x21\x1d\x95\xb7\x9f\x12\x5f\x62\xb0\x52\x09\x7b\xd3\xa2\x69\x4d\x4e\x2f\x15\x5c\xce\xf1\x23\x3b\xb4\x1c\xd6\x7a\xf8\x1c\xd5\x2d\x40\x52\x7a\xfc\x00\x7d\x36\x1f\x5c\xd7\x39\x82\x2c\x58\x3a\x56\xe8\x0e\xaa\xdf\xa5\xf4\xe7\xb7\x2e\x90\xf6\xe3\x15\x67\x72\x3f\xf3\x51\x7a\x0f\x75\xc5\xfc\xc2\x27\x02\xa8\x65\xde\x54\x3d\xb8\x4c\x9d\xd9\xa1\xed\x6c\xe4\x88\x8c\x4d\x27\x7f\x3e\xf4\xd1\xcf\x13\x07\x36\xf5\x8a\x1a\xe2\xd1\x7d\x0f\x6a\x1d\x00\x84\x96\x9b\x0a\x0f\xfd\xe5\x66\xb2\xbf\x13\xc6\xbf\x6c\xef\x35\x1b\x7d\xff\x9e\xc0\x0c\xba\xd1\x38\x19\x45\xe8\x97\x55\x02\xeb\x22\x2c\x50\x41\x9d\xde\x70\x52\xff\x91\xb1\x38\x02\x09\xf4\x14\xd4\x88\x8a\x3a\x8e\xc2\xe9\xc0\x36\xe3\x10\x7b\x9f\xd2\xcc\xbd\x4c\x75\x30\x08\x08\x15\x82\xb7\x3e\x1f\x0d\xe4\xd5\x87\xab\xeb\x94\xfd\xa2\x24\x20\x30\x7d\x53\x8e\xf6\x70\x7e\xe8\x62\xc3\x4a\x69\xf6\xf8\xcb\x88\xef\x45\xe8\x6f\x26\xb3\xa6\x98\x67\x2f\x5e\x6c\x6f\x9d\x4c\xd1\xb3\x2b\xab\x35\x6e\x23\xe3\x33\x74\x5a\x2d\x1c\xe9\xeb\x52\x1b\x62\x6a\x70\xaf\xf8\x8e\x45\xd3\x29\xee\xf0\xc9\xca\x90\xae\x65\x75\xc0\xe1\xd7\xd9\x6b\x5f\xa7\xcf\x0e\x4d\xa7\x7d\x68\x12\x62\x4c\xcf\xbe\x16\x20\xb5\xb2\xe1\xa3\xdb\xe4\x22\xa4\xb2\x08\x8b\xc5\x14\x93\x11\x96\x8f\xc1\x47\xcb\xe3\xd5\x57\x39\x79\x8e\xb3\xda\x21\xf4\xbe\xe0\x33\x40\x68\xe6\x9a\x65\x3c\x3e\x02\x73\xe2\xf0\x21\xca\x9b\xfc\x63\xcf\x2a\x25\x39\x6b\xcd\xfe\x60\x21\xbd\x28\xcb\xce\x7d\x0f\x36\x05\xe0\xbb\xaa\x9b\x71\x25\x5c\x5c\x5d\x16\xde\x77\xcf\xaf\x31\x2b\x42\xff\x53\x60\x55\x8d\x9e\xff\x5c\x1b\x19\x87\xf3\x09\x6f\xd1\x3e\x41\x0b\xf8\xae\x67\x53\xd5\x5e\xb1\x24\xcc\xfb\xa8\x58\x21\x25\xc1\x20\x1f\x15\xe8\x78\xfa\x1b\x48\x49\x86\xbe\xf6\xa7\xe7\x5b\x4c\xc0\xfb\xb2\x00\xe8\x37\x15\x21\xe2\xeb\x15\x76\xdc\xbc\xab\x59\xc1\xc0\x3c\x60\x98\xec\xdc\x1c\xb1\x26\xbd\xc4\xb8\x32\xc9\xb3\x29\xf6\xfc\x71\xe9\x06\xec\xd5\x79\xbf\xb0\xa5\x3f\x49\x22\x4d\x49\x0f\x14\x6f\xc2\x09\x54\x07\xa4\x17\xf7\x85\x41\x7a\x14\xd5\x1d\x23\x46\x7d\xf4\x3e\xe5\x02\x42\xd9\x56\x21\xa5\xa2\x8d\x39\xe4\x03\x74\x57\x5a\xd9\x09\xa3\x9d\x88\x49\x59\xa9\xe4\x3b\xc5\xa2\xfa\xd4\xce\xa4\x26\xd0\x37\x04\x2f\x42\x1b\xd3\xfe\x5a\xba\x85\x9e\x15\xca\x97\xe3\x19\x2c\x77\xfd\xa5\x56\x1b\xf4\xe4\xec\xe8\x3a\x92\xbe\x9f\x60\x26\x98\x7d\x8c\x07\xef\xa6\xb4\x64\x12\x83\x3e\x06\x30\x66\xfe\x5d\xb0\xe6\x1d\xfa\x78\x61\x57\x19\x20\x18\xfb\x13\x26\x93\x73\x3e\xa4\x79\x1b\xee\x5e\x0a\x3c\x34\x4a\x7d\xf9\xcc\xcb\xbb\xb7\x7d\x8b\xaa\x78\x8a\xbb\xa5\x39\xbf\x8c\xd3\x16\xd2\x52\x03\xef\x72\x6f\x99\xbb\x14\xf8\x56\x47\x13\xe4\xa0\xc5\x1f\x9f\x62\xe4\xa9\x4a\xf5\x1a\x5a\xb9\x95\xed\x86\x27\x6a\xb8\x1a\x7e\xe2\xda\xa0\xbc\x67\xc3\x78\x67\x2d\x1a\x2a\xf9\x16\x1f\xe4\x96\xda\x14\x6d\x97\xbf\x1f\xe9\xff\xf1\xaf\xdd\xc9\xcc\xb1\x43\xa0\x67\xff\xaa\x67\xe9\xe9\x27\x23\x6d\x09\x43\xce\x42\x50\x3b\x3a\x00\x7d\xb8\xea\x22\xd6\xfd\xfa\x34\x09\xd9\x82\xc1\xd6\xfb\x84\xc0\x64\x81\x46\x3f\xa9\xde\x4d\xc5\xb1\x72\x4f\x3b\xca\xcf\x72\x63\x0a\x96\x7a\x02\xc4\x31\x32\x49\x5d\x51\xa7\xb6\x7f\x2d\xa2\xa0\x2e\x14\x26\x09\xd7\x8b\x38\x9c\x4c\xf9\xe1\x79\xff\x56\x85\x77\xf2\x89\xb9\x79\xd9\xad\x54\xd8\xc6\xed\x8c\xfd\x9a\xce\xb7\xa5\x86\x44\x04\x60\x76\x19\xc8\xc3\xe7\xa8\xb1\x5a\x10\xa0\xfa\x76\xd2\x4b\xd5\xbe\xfe\x05\xf8\x8a\x81\x1a\xe2\xaf\x71\xcc\xcd\xbc\x42\xd8\xd0\x74\x3f\x13\x75\xff\x14\x71\x7f\xdb\xea\xc5\x6b\x55\x1c\xd9\x6f\x30\x17\x4d\xba\xbb\x07\x1c\x6b\xea\xdb\x8a\x19\x13\x95\xb1\x1d\xe8\x63\x4d\x4b\x1d\xb7\x7a\x50\x17\xdf\xc4\xf4\x9d\xaa\x4e\xfc\xd5\xae\x14\xa5\xa7\x69\xff\x0a\x1e\xf0\x5b\x4d\xf4\x87\x4f\xed\xdf\xee\xf6\xff\xdb\xae\x78\xa8\x40\x63\x48\x5d\xb7\x28\x58\x3e\xfc\x9e\x82\x3d\xff\x09\xbe\xc6\x59\x16\x74\x4a\x90\x89\x35\x14\x8f\xee\x5d\xfa\xe5\x12\xf6\xf2\x3a\x67\xca\x8e\xb5\x44\x2a\x21\xfc\x6d\x56\xcb\x8f\xdf\xb8\x32\xc3\x3d\x81\xdc\x2f\x52\xa1\x66\x6c\xba\xa2\x3a\xf2\x29\xe8\x29\xcd\x9a\x72\xc9\x08\xff\x30\x28\xac\xe5\x4e\xa7\x89\xe6\x2d\x0f\xe4\xb7\x53\xdb\x40\x32\x40\xa9\xae\x2e\xd6\x1f\x93\x74\x22\x54\x39\xc5\x5d\x50\xb0\xfc\xa5\xcc\xf0\xc7\xb8\x0a\x69\x79\xf3\x96\x3d\xa5\x7f\xca\x65\x43\xd7\x79\x02\x64\x8e\x30\xa1\xa8\x69\x14\x15\x01\x47\x9f\x8a\xc4\x04\x62\xd9\x6a\xde\x44\xcc\x09\xa3\x73\x99\xe8\x90\x64\xb5\xdc\xe9\x60\x12\x6a\xc0\xad\xb0\xf8\x28\xde\xf3\xbf\xdf\x72\x71\x61\xc3\x42\x0f\x90\x47\x79\xb9\x6e\x63\x0b\x97\xe2\xe6\x9a\xe2\xb1\xba\x11\x92\x46\x85\xa5\xfe\x97\x61\xfc\xd7\x40\xf9\x43\x10\xa0\xa1\xc8\x80\x0c\x23\xde\x5e\x01\x7e\x12\x86\x2e\x95\x38\xa0\xe0\x9c\x59\x35\x4e\x8a\x86\xcb\xf2\x12\x15\xff\x04\x3d\x9c\xc4\x8e\x67\x47\x5c\x52\x08\x30\x22\x35\x63\x04\x17\xce\x72\x42\x88\x7f\x79\xf6\x1f\x9d\x45\x62\x5e\x32\xa2\x5e\xa4\x69\x9b\x4d\xdc\x39\x17\x51\xe3\x50\xaf\x22\x98\x3c\xf1\x77\x13\x2b\x30\xa9\xbd\x89\xb6\x73\xd9\x0a\x26\x17\x94\x29\xc4\x6d\x94\xdb\x0d\x78\x90\xbb\xe3\xdb\x54\x71\xb0\x50\x6e\x9f\x04\xf3\xf8\x98\x6d\xe4\x00\xf3\xcc\x2b\x11\x04\xbe\xa2\x93\xd0\xd9\xcb\x88\xb4\xa7\xce\xf0\x57\x23\x48\x70\xea\x3f\xb2\x68\xd8\xba\x7b\xff\xe7\xda\x7f\x0d\x97\x3f\x84\x94\x14\xdd\x17\x70\x8d\x98\x7a\xf3\xd3\x0a\x9c\xb9\xe5\x56\x9f\x82\x78\xc3\x9f\x93\x2a\xc5\x0c\xe1\xee\x09\xd7\x67\x7c\x67\x66\x0a\x9d\x8e\xc0\x0a\x90\x11\xdf\x9d\x85\xc7\x74\x76\x82\x70\x17\xc4\x77\x5a\xd6\xbc\x88\x49\x9a\xd0\x73\xb3\xb3\x22\xb5\xa4\xc6\xd8\xe2\xbb\x22\x85\x49\x05\x12\xe6\x64\x4d\x7e\xc0\x99\xd5\x31\x09\x92\x32\x33\xf4\x27\xd2\x11\x67\xf0\x91\x2d\xf8\xc7\xe7\x25\x8b\x3e\x32\xd9\x72\x56\x1c\x7a\xb5\x00\x50\xbf\x50\x58\x69\x1d\x2d\x7a\x9f\x29\x21\x26\xd8\x1b\x9c\x2e\x5d\x33\x4b\x1d\x63\xc1\xa6\x12\xb2\x9d\xfc\xce\xf9\xcb\x9f\xb3\x24\xff\x4b\xfc\xff\xeb\x9b\xf1\x87\xc0\xfa\x06\xfa\x02\x89\xbf\xeb\xdf\x3f\x79\x0d\xea\xdd\x77\x19\x0e\x22\xd7\xc9\x1c\xbd\x48\xb2\x61\x55\xe2\x71\xb6\x71\x26\xcb\x6f\x4f\x4c\xcb\xb0\xfb\xc0\xba\xfa\xb8\x50\xa2\xf7\xcd\x46\x39\xb4\xc5\x81\x24\xfe\xdf\xc9\xab\xad\x89\x85\x41\xd7\x05\xb9\x81\x96\xf2\x59\xea\xa3\x96\xac\x79\xb0\xa0\x1a\x3e\x6b\xf8\x33\x47\xfd\x26\xe0\x7a\x32\xa1\x24\x44\xa8\x71\x82\xa4\xff\x18\x8a\x88\x5c\x85\x73\x75\xb7\xf2\x58\xb2\x4d\x80\x18\x80\xb2\x78\xd2\x5f\x30\x6b\xff\x22\xca\xda\xbc\x1a\x15\x8d\x2f\x8c\xbb\x38\x1e\x35\x99\x3d\xb5\x0d\x98\x79\x2b\x16\x33\x1b\x6c\x08\x1e\x60\xaa\x2e\x22\x5e\xd5\x6c\x7a\xb7\xa2\xce\xfe\x20\x9f\xa8\x8e\xa5\x84\x92\x2f\xf2\x61\x1b\xc7\xab\x0e\x29\x23\x1b\x15\x46\xab\x52\xbb\x9a\xfd\xbf\xc2\xfe\x7f\x75\x73\xf9\x43\xbe\x1c\xad\x3c\x27\xe3\x81\xeb\xd2\xb4\xa4\x3c\x3b\x36\x92\xd1\x3e\xdd\x8a\x7f\xa7\x77\xd1\x3d\x1f\x84\xef\xd7\xbc\xee\x4f\x5a\xf3\x7a\xce\xd0\x98\x4e\x6d\xc3\x97\x75\x09\xfe\x77\x83\x70\xbb\xaa\x9e\xa8\x8c\xe7\x1f\xcb\x5e\xec\x3b\xcc\xb9\xbf\xfa\xdd\x9c\x2c\x01\xc2\xcc\x2a\x67\xca\xf0\x0f\x95\x29\x2f\xab\x0d\xf7\x20\xfd\xfa\x9e\xdd\x02\x79\x59\x81\xd2\xc1\xf8\x11\x0c\x36\x23\xc2\x62\x0f\xea\x92\x41\x00\x61\xf9\xdd\xfb\xf6\xf2\xef\xb3\x2f\x48\xc8\x4e\x30\x67\x53\x6c\x39\xca\x6e\x30\x33\x19\xdf\x97\xbc\x83\x60\x73\x5d\xa4\xd0\x74\x75\x46\xd3\xa1\xd7\x73\x77\x2a\x78\xe0\xdc\xd9\x38\x98\x93\xec\x97\x2f\x5a\xa1\x30\xd2\xcb\xa5\xdd\x79\x4e\xf3\x83\xed\xdd\x8c\xa9\x48\xa2\xff\x63\x4f\x92\xcc\xf5\x58\x18\x0b\x40\x19\x48\x1c\xac\xcb\xe5\xbe\x75\x04\x7b\x98\x6a\xda\x3c\xbd\x4d\xf5\x54\x17\x99\xd3\x2a\x19\x67\xb7\x48\xed\x4f\xa2\x16\xc4\x0c\x03\xc9\xc1\xa8\xfc\x98\xcf\x62\x5f\x5a\xa0\xff\x11\x88\xcc\xae\xed\x3b\xbb\x6a\xff\x60\xc1\x14\x42\xb2\xa6\x4e\xc0\xb6\x48\xa1\xaa\xb0\x7c\x31\xb5\xc4\x47\x2b\xc6\x95\x6c\xd6\xa6\xe0\x13\x3a\x86\xdf\x6f\xa9\x5e\x25\xef\xae\x12\xd5\x09\xb7\xa2\x52\xf4\xa4\xb9\x94\x5c\x7f\xb0\xae\x69\x8e\xe0\x13\x74\xfa\x86\x4b\x0a\x4a\x94\xb4\x2a\x27\x36\x60\x69\xd5\xda\x6b\x89\xf5\x3a\x65\x66\xc3\xf9\x73\x7b\xf1\x20\x77\x27\x90\x9a\x88\x8c\x16\x8d\x91\x1d\xfc\xe9\x16\xfd\x1c\xf5\x34\x0d\x95\x6d\xd2\xc9\x7b\x56\xa9\xee\x7a\x41\x61\x9c\x58\xc9\xd1\xcc\x75\xf4\x11\x28\xac\xd5\x73\xbf\x1e\x7b\x76\xdd\x0d\xd7\xe3\x4b\x72\x4e\x08\xe2\xb0\x95\xdc\x5a\x7f\xb0\xbb\x8e\xf9\xed\x94\x8e\x18\xfa\x37\x2c\xf0\x05\x99\xfa\xa6\x85\x7a\xcb\xac\xaa\x0f\xb9\xf0\xdc\x1e\x15\x2d\x7b\x24\x95\x58\x9b\xf0\xba\xe1\xfb\xd3\x80\xc1\xbe\xd7\x39\x17\x0a\x58\x58\xbb\xf9\x6a\x1a\xa7\xd5\xb0\x29\x9e\xa2\xe9\xde\xf8\x7e\xef\x99\x84\x3f\xa2\xdd\x2c\xa6\xc4\x50\x6d\x75\x4d\x56\x03\x53\xec\xb7\x04\x60\xa9\xde\xc6\xa9\x4b\x4d\x9a\x49\xa3\xd2\x3e\x3e\x46\x75\xd7\x08\x2a\xbd\xeb\x99\xde\x17\x41\xdd\xe7\xea\x53\xe1\x3a\xc4\x40\x04\x83\x17\xfd\xce\x15\xc9\x93\xcd\xf0\xa6\xe1\xa5\x10\xac\x9d\xc5\xee\x96\x45\x74\x7b\x06\xfa\x38\x52\xe4\xfc\x89\xfb\x12\x0a\x72\xd9\x5e\x6f\xe0\xac\xa7\xd2\x83\xb5\xb5\x48\x40\x8a\xce\xad\x35\xad\xaf\x14\x91\x39\x5d\x73\xfe\x36\x6b\xb0\x55\x79\xb5\x93\x25\xed\x86\xd2\xa9\x08\x50\x8f\x17\xc8\xf1\x7c\x18\x60\x13\x99\xc2\x75\xd9\xe9\x65\xc0\x86\x27\xc2\xb7\xed\xef\x07\xb5\xb5\xba\x18\xab\xe1\x89\x77\xda\xd6\x00\x5c\xed\x1d\x25\xa1\xeb\x9f\x1b\x0d\xbc\xe9\xf2\xb1\x54\xf7\x58\x92\xc3\x1a\x7f\x52\xe1\x3e\x3a\xa7\x60\xfe\x33\xcf\xc9\xb3\xa4\x08\xa4\x1b\x59\x1c\xb7\xe6\x2d\xbb\xf6\x1f\x7c\x3c\x6d\xbe\x64\xe2\xd1\x32\x10\x3a\x93\x5c\x0b\x3f\x2c\x48\x31\xb7\xe2\x25\x8b\x7d\xe8\x36\x00\xd4\xf3\xb3\x08\x9c\x7d\x15\x89\x3b\x2e\x46\x98\x92\x5a\xa6\xb0\xcf\xbf\x08\xcc\xab\x3e\x48\x6f\xb6\xc6\x8e\xef\xdb\x59\x64\xef\x02\x8e\x9a\xc6\x5c\xc3\x62\x97\x4e\x02\x75\x74\x25\x16\xcd\x3d\x05\x72\x17\xc1\x5a\xc9\xb7\x43\xdb\x6e\xd2\x07\xc5\x33\x61\xef\xc7\xec\x7d\x80\xa3\xd6\x10\xb6\xa5\x51\x62\xd9\xd1\x30\x9c\x9f\x28\x95\x59\x47\x2c\x53\x1c\xc1\xc6\x8d\x1d\x7c\x84\x59\x55\x14\x75\xb9\xfd\xae\x0c\x58\xd3\x9e\xb3\x28\x14\xa5\x90\x0d\x76\x77\x46\x0d\x21\x2a\x56\x60\xd7\x57\xa2\x2c\x41\x9f\x37\x57\x4b\xa0\xb7\x78\x4b\xe8\xef\xbb\xf3\x22\xd4\xe4\x9b\xd8\x92\x11\xb7\x43\xe2\xaa\xbd\xc3\x78\x8b\xa2\xf5\x40\x96\xa7\x90\x47\xe3\xab\xd0\x36\x77\xb6\x7d\x0f\x41\xfc\xaf\x57\xc0\xe0\x13\xb4\xb4\x77\xf3\xf5\xc4\x67\xcb\xf4\x7a\xe1\x9d\xca\xa1\x6a\x07\x7e\xc1\xa3\x47\x7b\xed\x6d\xc9\x16\x5f\xda\x81\xde\x43\x00\x01\xc9\x45\x56\x97\xaa\xb0\xd5\x76\xe8\xb6\x98\x2a\x9d\xde\xfb\x1f\x3f\xa2\xee\x42\xbc\x1c\xbe\x7d\x95\x7f\x24\xbd\x2f\x59\x89\x60\x16\x01\xa0\x68\xd6\xbc\x38\x9c\x21\xd4\x24\x70\xef\xd2\x07\x05\x99\xe0\xf4\x72\xdb\x93\x50\x8d\xf9\x0d\xb8\xb3\xcb\xe6\x5c\x7a\x69\x11\xbd\x01\x68\x67\xbc\x15\x05\xcb\xa0\x74\x93\xd9\xed\xe7\x98\x6f\xd4\x53\xa1\x87\x5f\x87\x36\xd4\x1f\x12\xd0\xd4\x7b\xeb\x83\x6d\x09\x9b\xb0\x80\xf8\xc3\xb1\x62\xfe\xe4\xd6\xfc\x98\xe7\x14\xd8\x11\xaa\x84\x28\xd4\x2b\x1b\x59\xe5\x54\xb3\x38\xa5\x7a\xca\xe1\xad\xd5\x7e\x3c\x77\xfe\x12\x80\xf7\x48\x11\xcd\x43\x53\xd3\xd8\x44\x1d\x33\x08\xaa\x88\x14\x63\xb7\x55\xa6\x50\x3b\x52\xd4\x17\x3d\x27\xb4\x57\x7a\x51\xd2\x00\xad\x20\x20\x9c\xb6\x85\x50\x7f\xf7\xe2\x7c\xf2\xae\x0a\x7f\x77\x9f\xbd\x8c\xdd\xb2\x81\x09\xb1\x7c\xca\x97\xa3\xf0\xd2\xcb\xe9\xb8\x1d\x88\x3f\x2d\xdb\x11\xad\xc6\xc6\x9f\xa0\x27\xae\x30\xef\x2e\x69\xee\xe0\xd2\xf3\xc4\xce\x8e\x53\x27\x17\x65\x6e\x2d\x25\xd2\xaa\x5e\xa0\xfe\x5d\x11\x93\x3a\xa0\xbc\x9f\xdc\xb5\xae\x42\x94\xb4\x0c\x21\x5f\x72\x7b\x15\x88\x8d\x1a\x4e\x77\x43\xbf\xc4\xc4\x10\x58\xfe\x03\x16\x70\xdf\x66\x3a\x2b\xdf\x7f\x3a\xe3\xd0\xc3\xcd\x91\x9e\x94\x01\xd1\x89\x51\xf3\x4f\x6e\x6d\xa7\x83\xe8\x75\x1a\xec\xbf\x88\x6b\xc2\x10\x90\x55\x54\xcf\xc6\x9d\x45\xe4\x5a\xf8\xaf\xdd\x48\x3d\x92\x2a\xf3\x28\xa6\x58\x46\x4f\xa3\xdc\xab\xe9\x56\x6f\xaa\xd2\x77\x74\x1c\xbc\x55\x65\xa5\x37\xa5\xcb\xb1\x50\x2e\xa8\xeb\x52\x7c\x98\x3a\xc9\x1d\xed\xd4\x83\xc1\x82\x8c\x62\x34\xde\x48\x16\x10\xa5\xdf\xb3\x83\x1f\xc0\x9e\xf7\x2e\x11\xdf\x0c\x3b\xf6\x3f\x37\x91\xcf\x09\x38\x70\x31\x01\x66\xbb\x12\xa2\xaa\x3f\x83\x14\xe6\xfb\x36\xc3\xac\x51\xfe\x00\x50\x5c\xc9\xa5\x3a\x4e\x87\x9a\x75\x19\x7c\xaf\xa7\xbf\x5f\x2c\xbb\xcb\x97\x16\xe6\x67\x07\xfc\x18\xb4\x1e\x8e\x55\xf7\x57\x4a\x1d\x80\x58\x71\x93\x7e\xbb\x37\x73\x63\x6f\xbd\xff\xa0\x98\xf4\x70\x17\x1f\x01\xcd\x2e\x1d\x8b\x82\x9d\x9c\x45\xb8\xdf\xd4\xc2\x1f\x2d\x07\xdc\xec\xcb\xe1\x5e\xf6\xae\x93\x86\x57\xbf\xe9\x68\x60\x9f\x7e\xc7\xb8\x14\x47\x58\x47\x60\x11\xd9\xd6\x43\x5b\xfa\xfd\xb0\x45\x66\xe9\xf0\xe5\x4c\xf6\x1f\x9b\x94\x3f\x04\x06\x11\x01\xac\xfa\xb6\xe9\xea\xf6\x55\x47\xfb\xd7\xa1\xba\x6a\x66\x0e\x26\x88\x13\xcf\xce\x22\x2a\x4c\x97\xb8\x1a\x49\x9a\xd9\xab\x41\xd9\xb5\x81\x84\x2d\xfc\xc0\x98\x26\x11\x5d\x2d\x96\xf8\x94\xdc\xb0\x11\xc5\x6c\x06\xbb\x16\x77\xc6\xfd\xb5\x5f\xe1\x0a\x79\x3b\x82\x9b\x22\x1a\xe0\x79\xff\xea\xab\x31\xda\xa6\x2a\xf5\xee\xcc\xd4\xf8\x70\xf6\xa8\x81\x4c\x23\xfd\x40\xcb\x66\xd7\x54\x5f\xd1\x6d\x18\x73\xad\x43\x4d\x22\x00\xdd\x46\xab\x1d\x7e\xb3\xa7\x78\x9f\xd3\xdc\x57\xde\xae\x12\xfa\x97\x68\x34\x7c\x58\xe4\x38\x3a\x3d\xf1\xa9\x5f\xe9\x76\x5f\xb8\xf1\xca\xf7\xff\xb6\xec\xff\xea\xaa\xf6\x87\x9c\x6c\xee\x37\x26\xbd\x48\xf6\x4e\x6e\xc2\xef\x59\x48\x94\x63\xa0\x0a\xad\xf0\x16\xe9\x4e\x93\xcd\x1f\x7e\x97\x16\x74\x00\xc5\x95\x41\x9b\xbe\x5a\xbd\x89\x00\x72\x9d\xa9\xf8\x24\x27\x02\xc7\x4e\x50\x4f\xf6\x67\x3c\xae\xd9\xdd\x3a\xf0\x82\x93\xfb\xdb\xef\x66\x85\x3d\x33\xfd\xf8\xf4\xe4\xc1\x83\xd6\x49\x74\x9d\x56\x39\xab\x5c\x4b\xe6\x28\xc5\x4d\x12\x79\xfb\x1e\xef\x13\x4f\xa7\x0e\x26\x03\xb1\x0d\x3f\x31\x1e\x83\x56\x26\x17\x78\x3e\xcf\xf2\x9d\x2c\x7a\xc3\xde\xe6\xdc\x29\xfb\x8e\xd7\xfa\xed\xc0\x7d\x2b\x73\x86\x95\xa8\xe5\x96\x06\x4e\x8f\x8b\xaa\x6f\xd1\x46\xdd\x8b\xd4\x88\x50\x1d\x63\xf1\x9a\xd6\x83\xf5\x0f\x1f\xf4\xde\x0d\x9a\xe3\x3a\x36\x58\x6d\x92\x9d\x4c\x37\xe7\x33\xaa\xd5\x8c\xcc\xb3\x9f\x82\xd5\xdc\x63\x37\x23\x2e\x25\x37\x97\xe0\xba\x7b\x6b\x83\xcf\xa5\x42\x71\xea\xde\x19\x39\x36\x04\x1e\x9b\x8f\x26\xcb\x15\x01\xec\xd6\x00\xb4\x9c\x02\x3d\x22\xec\xeb\xb4\xc5\x99\x93\x2d\xbd\x36\x35\x9a\x7f\x2b\x6e\x0b\xec\x2a\x67\xf1\xe3\xe5\x3c\x3c\xb3\x46\x42\xdd\x2e\x78\xc1\x5c\x8c\x93\xa8\x5f\x8e\x5a\x1d\x6e\x9e\xf2\xb3\xc9\xa4\xe7\x8f\x81\x40\x8b\x1a\x6c\x11\xeb\xc4\xb3\x17\xfb\xd3\x8e\x28\x5e\x3f\x90\x4b\x05\xd6\x66\x89\xa5\xc7\x04\x6b\xa2\x63\xc8\x1c\xad\xcb\x89\x44\xc4\x31\xa1\x33\xd6\xc0\x5a\xda\xc3\x76\xa7\x27\x4d\xa1\xcd\x02\xfa\xdb\xde\xb2\x2d\x9d\x1d\x58\x3c\xd2\xd8\x75\xbf\x67\x25\xbc\xf2\x5f\x64\x30\xf2\x64\x7f\x60\xb1\x1d\x69\xfa\xd6\x6c\xcb\x83\x01\x7e\x5c\xea\x32\xcc\xff\x50\x59\xdf\x7d\x3c\xf1\xef\x48\xfd\xc5\xfe\x16\x92\x48\x29\xcc\xc6\xfd\xc4\x91\x8e\xd3\xf7\xfc\x16\xdd\x80\xe2\x23\x60\x2a\x3e\x15\xbe\x2c\xfa\x3c\x9f\x70\x83\xa6\x0f\xb7\x7a\x51\xd0\x64\x80\x77\x30\x41\x9a\x9d\x35\x7a\x9e\xfa\xcf\xd7\xcf\x1f\x5d\x81\x06\x8e\xb8\x8c\x8b\xe3\xf9\x9e\x3b\x2d\xcb\xda\xcd\x79\xdd\xb7\xa2\xb1\xdd\x36\xf1\x03\xa4\x51\x6c\x3a\x5e\x78\x84\x12\xe9\xd5\xff\xc0\x36\x25\xf5\x10\xb1\x2c\x26\xa5\x3f\xa6\x0a\x0e\xd3\x23\x45\xc8\x6e\xb8\x3e\x61\x79\xe1\x33\x15\x04\xe3\xdc\xc2\x19\x63\x24\x9d\x2b\xf4\x00\xf4\xed\x9d\xe8\x48\xbf\xdf\x85\xb2\x1c\xff\x60\x7e\x0a\x56\x92\x1c\xd9\xc9\xad\xa1\x5e\x11\xfd\x66\x10\xb4\x6c\x2f\x34\x8a\x60\x20\x60\x2a\x6f\x3e\xcf\x37\x94\xbf\x7b\x46\x2e\xec\xf4\xe2\xd0\x0d\x1f\xfc\x04\x1c\x1e\xb9\x0d\x33\xbe\x38\x8e\x1c\xb1\x1e\x08\x50\x61\xda\xbf\x98\x3a\xf7\x58\x64\xff\x4e\x20\x90\xb0\x6b\xf0\x6e\xad\x41\xfc\x17\xf7\x33\xbc\x32\x76\x3b\xe6\x78\x4b\x4b\xf7\xd1\xd9\x6d\x64\xc1\x33\xb0\xc2\xcb\x7d\x5f\xcf\xfe\x60\x47\xe9\xe0\x6e\xd0\x86\x47\x64\xc6\xec\xc0\x4b\xa4\x28\x2e\x74\x49\x36\x54\x4a\x4c\x77\x12\x77\xed\x03\x94\xd3\x93\xfe\xe6\x9d\xc1\xea\xc1\xfe\x93\x3e\x3c\x10\xff\xf1\x23\xf3\xcf\x22\x4e\xae\xfb\x95\xf0\xeb\xf2\x33\x56\x32\xb6\x3d\x5f\x1a\x60\x31\xde\xf5\x31\x13\xde\x58\xf9\x88\x33\x10\x2c\x51\xf9\x4d\x37\x7d\xa8\x8b\xa6\x2e\x2a\xe2\x75\x32\x27\xd5\x6b\x7d\xdc\x79\x86\x46\x06\xc0\xfd\x0f\x5b\x3b\xe7\xbf\x39\x94\x74\x1c\x78\xba\x85\xd7\x84\x19\x05\x3a\x2b\x95\x16\x1b\x32\xea\xd8\xcc\xc5\xd8\x0c\x08\x7b\x74\x7c\xc1\xb2\xd3\xde\xb7\x9a\x89\xc0\x7c\x34\xf5\xeb\x0b\x47\x8c\x0f\xaa\x61\xe6\x34\x25\x38\x05\x50\xda\x86\x7d\x59\xdf\x4f\xa5\xf1\xba\xa6\x5e\xf4\xaf\x8b\x63\x0f\x40\x24\x10\x1c\x79\xe8\xab\xc5\x0e\x68\xde\x3e\x25\x9a\x6b\x44\xa4\xb1\x90\xb0\x90\x3c\x2c\xb5\x61\x12\x7b\xd2\x03\xee\xf3\x98\xc0\x37\x89\x25\xbe\x7f\x92\xc8\x3c\xde\x4c\x98\xb9\xc0\x0b\xc0\x66\x96\xa6\x25\x6a\x98\x5c\x48\xfb\xc9\xea\x98\xfb\x3c\x07\x38\xe5\xdf\x39\x50\xd9\xb9\x6f\x63\x87\x8f\xf0\xac\x2f\x89\xef\xc6\x10\xdf\xe8\x44\xec\x3e\x1b\x33\x05\xa7\x66\xb1\xe2\xcb\x5f\x0a\x30\xa7\xb4\x93\x33\x4d\x20\x7a\x4e\xfc\x1d\x82\x35\xd9\x46\x79\xd7\x1e\x69\x45\x85\x6e\xc8\xff\xce\x0f\x62\x9f\x6e\x91\x1c\x15\xd3\x00\x9f\xf4\xb7\xd9\x44\xa9\x76\x0f\x91\x46\x3d\xc4\xc5\x84\x7e\x13\xd8\x7e\xfb\xfa\xf1\x2d\x84\x08\xce\xaa\x7b\xab\x4f\x4b\x98\xf9\x00\xe8\xfc\xeb\x50\x0e\xfe\x83\x5d\x0c\x51\x10\xa2\x5d\x9d\xcb\x52\x46\x31\xd0\xfc\x10\x52\x51\xae\x88\x5c\x19\x39\x60\x2a\x78\xe5\x28\xf1\x0f\x4c\xf4\x84\x97\x11\xf3\xf0\x4f\xc2\x89\x98\xd5\xbf\x2a\x95\xa4\x64\x1d\xa4\x76\xd7\x9c\xfe\x0b\x4b\xf5\xb6\x9b\x96\x0d\xf0\x54\x2d\x05\xdc\x27\xca\x59\x5a\xd9\xde\xc0\xee\x30\xb4\x88\xfc\xc8\x9b\xa2\xaa\x36\x77\x0c\x2f\xd2\x2f\x5a\xed\x12\x79\xa8\xec\xb3\xd6\x7b\x06\x50\xd8\xd7\xb5\x53\xa8\x5a\xeb\x9c\x92\x8f\x82\xde\x14\x1c\x30\xa7\x90\x8b\x5b\xc2\xbe\xa7\xe1\x2f\x63\xab\x82\x21\xfa\xca\xf7\x1b\x09\xe8\x5f\xb8\x70\x3f\x62\xbf\x0f\x23\xb8\xdc\x5e\xc2\x8b\xf9\x2a\xcf\xa1\xba\xfa\x23\x15\xc7\x7e\x85\x2b\xa2\x53\xb4\x26\x20\x58\xfc\xdf\x02\xa0\x1e\xe6\x06\xef\x77\x18\x84\x8a\xe2\xeb\xd1\xea\xa6\x51\xa8\x5f\xa6\xae\x67\xb8\x73\x5f\x5d\x58\xcd\x96\x3b\x03\x53\x54\x6e\x02\x40\xef\x70\x5b\x56\x76\xbf\x37\x42\x7d\x8d\xed\xa1\x79\x6d\xb9\xe8\xce\x41\x34\x8d\x48\x07\xed\x72\x95\x4a\xc4\x98\x1e\x69\x44\xd2\x1b\xf0\x82\x0c\xa1\x52\xb4\x2f\xad\xc3\x9d\xc5\x8f\x4d\x8a\x41\x2c\xb4\xc0\xd2\x58\xf9\x35\xfe\xcd\xce\x42\x82\x92\x7b\x31\xc0\x6d\x85\xb0\x0d\x50\x0f\x1f\xdd\xe0\x96\x1c\xcd\x3b\xb3\x9d\xdb\x5d\x70\xed\xc7\xb5\x2b\x61\xb0\xc0\xf1\x33\x96\x94\xcc\x44\xb2\x7c\x6f\xf3\xf5\x1e\xc0\x43\x29\x5c\x88\x80\x0d\x95\x8c\x22\x61\x9c\xb6\x1c\x95\xb0\x4a\x0b\x34\x2e\x62\x38\x5d\x31\x1c\xd9\x44\x3f\xb3\xbc\x6e\xfe\xfb\x1e\xb8\x1f\x59\xd8\xaa\xf7\x45\xe4\xd2\xc6\x3d\x4b\xae\x3d\xb0\xdc\xe8\x27\x10\x91\x78\x7d\x79\x0e\x3b\x60\xfe\x9b\x8e\x96\xd8\x7f\xe8\xa9\xed\x6a\x1e\xfa\xff\x6d\x39\xf7\x87\x88\xc0\x42\x41\x05\x00\x24\x47\x0a\x6b\x83\x47\xdf\x3c\xb2\xec\x24\x88\x04\x71\xdf\x3d\xd9\xc8\xfc\x7c\xf7\xba\xe8\xd5\xa0\xac\xd2\x0a\x77\xf9\xdf\x49\x24\xe0\xb3\xb2\x79\x63\x88\xa5\x6f\xfc\x70\x83\xd5\x4a\x13\xe7\xd4\x97\x24\x9f\xac\x64\x79\x5d\x54\xaa\xfc\xc1\xea\x7b\x05\x4d\x0d\x19\x8c\x3b\x50\xf7\xb4\x3b\x1f\x1f\xec\xef\x2e\xf4\xf8\x67\x97\x4f\xae\xd4\xcf\x96\x76\x61\x80\x81\xae\x42\x87\xfa\x68\xdb\x80\x63\x8a\xe7\x15\x0d\x7c\x56\x79\x90\xbf\x14\x92\x65\x2e\xdf\xe6\xeb\x52\xf2\xb8\x15\xf4\xd1\xbe\x30\x3c\x06\x26\x2c\xe4\xc6\x74\x0c\x1b\x07\x40\x38\xcc\xa6\xae\x66\xff\xef\x46\xf5\xbf\x9e\x21\xf1\x87\xfc\x3c\x21\x79\x4a\x7a\x19\x07\xf6\xc4\x83\x15\x0b\x92\xb7\x78\x28\x98\xcf\x2c\xa7\xb3\x43\xa7\x49\x2d\xdf\x4e\xe9\xec\x77\x31\xa9\xdf\xdc\xe8\x3a\x13\x0b\xd0\xbf\x98\x6b\x0b\x5d\xc0\x58\xcb\x3a\x2f\xf8\x07\x85\xfd\x10\x79\x8d\x6e\x61\x26\xd0\x3c\xe7\xda\x27\xb3\x1a\xe7\x94\xb7\x5d\x2f\x63\x69\xfe\x05\x19\x5c\xa4\x28\xfa\xef\x9c\x3c\xf3\xb7\xe0\xa7\x65\xeb\xfd\xcb\x20\x19\x39\x05\x09\x86\xab\xbf\x6b\xdb\xee\xe8\x96\x3f\xf1\x19\xf5\x81\x68\x65\xfd\x32\x0f\xb4\xc6\xd5\xe0\x8f\x72\x59\x71\x78\xa7\x9e\xb4\xe1\xe3\x6e\x9d\xb7\x3b\xe1\xb3\xda\x4f\x51\x44\x54\x38\x69\x0d\x54\x69\x47\xe0\x6e\x64\xd8\x0d\x68\xd2\x9a\x50\xb5\x3a\x8e\xd6\x60\xc7\x73\x9b\xcc\x52\x29\x84\x60\x86\xf1\x74\x15\x0e\xf6\xcf\x48\x26\x80\x68\x61\x4a\x9c\x53\x92\x79\x10\xaa\x9e\xca\xfe\xf9\xde\x55\x8c\x17\x84\x8a\x62\x20\x7f\x81\x8e\xd4\x29\x65\x88\xf5\xfe\x5b\x53\x05\x01\xa0\xdf\xe2\x81\x4f\xbe\xf0\x33\xfd\x78\x98\x67\x9e\x7c\xba\x94\xd2\x7a\x71\x40\xad\xf4\xe2\x42\x47\x29\x62\xf4\x2b\xf7\x41\xfc\xa2\xbb\x17\xfd\xf3\x74\xc1\xce\x97\xb9\xa7\x56\x34\x04\xb0\x39\x21\x58\xde\x12\xd2\x3b\xb9\x39\xf1\x49\x66\x50\xcd\x5d\xe2\xef\x0c\x57\xd9\x5a\xc1\x2e\x1e\x5c\x6a\x35\xfe\x99\x3b\x17\x79\xf2\xb8\x9c\x3c\x76\x8b\x08\x16\x2d\x7e\x03\xd1\x8f\xff\x42\x8b\xb2\x4e\x14\x16\x33\xab\x81\x7c\xc8\xeb\x26\xde\xda\x54\x0a\x4f\x0f\x17\xb9\x6a\xe7\xe4\xfd\x3f\x34\xc3\xea\x93\xb1\xbd\xd1\x00\xfc\xfe\x69\x01\x01\x3a\x02\x57\x84\x17\x64\x64\xca\x73\xb9\x06\xb1\x31\x23\x54\x8f\xa6\x92\xc3\xb5\x1b\x56\x90\x2c\x22\x96\x03\x83\x84\xec\xbf\x6c\x99\xb5\xaf\xc3\x83\xd7\x80\xfb\x5c\x1d\x85\x46\xae\x3b\x06\x42\x16\xee\x89\x89\xb4\x24\x99\x6d\xe7\x3c\xc9\x79\x48\x1f\xef\x77\x72\x7f\x2f\xd1\xb0\xd0\x7a\x05\x00\xee\x1b\xfd\xb8\xed\x33\xec\x9d\xb8\xf2\x50\xaa\x40\x0c\xfd\x19\xdf\xa5\xa5\x6e\x0f\x95\xa5\x7e\x9f\x5b\xd5\x3b\xf0\x88\x5e\xc4\x6e\xfd\xa2\xff\x9c\x86\xd1\xfd\x7a\x4e\xcf\x35\xb8\x47\xac\xf4\xbe\xca\x96\xf0\x75\x48\x62\xb1\x4f\x1d\xe4\x2d\x86\xeb\xfd\x6d\x6b\x4c\x5c\x19\x20\x54\xb4\x63\x57\xaf\x02\xee\xb9\xac\xf1\xe0\x9b\xad\x45\x27\xd4\x33\x54\x76\x9d\xe0\xf8\x9d\xef\x9f\xd5\xb4\x96\xb5\x40\x46\x76\x0e\xc0\xa9\x5c\x8a\x65\x3d\x8e\x90\x76\x34\x17\xae\x23\xb9\xca\x19\xd2\xba\x7f\xe2\x12\xb2\xfd\x83\xdc\xf5\xbe\xca\x25\x34\x7d\x01\x60\xed\xa8\xfe\x17\x3b\x97\x81\x2e\x13\xb2\x97\x5c\x62\xcf\xd2\xe3\x84\x0e\x44\x24\xb1\x33\x8f\x55\x9a\x28\x9c\x7f\x66\xd6\xe8\x41\x77\x08\x3c\xad\x71\x13\xde\x69\x16\xca\xe8\x3b\xe9\xc1\xca\xc9\x0e\xbc\xda\xfe\xb3\xe3\xf5\x27\x26\xa6\xaa\x91\xe4\x3d\x15\x06\x51\x46\x95\xd8\x32\x50\x61\xa1\xd8\xc1\xb4\x14\xb8\x0d\xac\x6d\x97\xa1\xa4\xb2\x53\x5b\x53\xce\x44\x9c\xe3\x69\xcc\xcd\x7c\xf8\x15\x3d\x51\xaf\x1d\xd2\x0d\x0c\x6a\x54\xb1\xef\xaf\xbe\xbc\x00\xf3\x73\x45\x0e\x9b\xdd\x5f\x83\x4d\x56\xe1\x22\x6d\x42\xa5\x09\xe1\x1c\x3e\x56\x3f\xaa\x7a\x3e\x67\xbd\x78\xf5\x1d\xcd\xb4\x83\xdb\x61\x31\x74\xd7\x78\xb5\x34\xe9\xbe\xcc\xd9\x88\x89\xd9\xec\x1e\x33\x36\x61\x3d\xb8\x7c\x6d\x6d\xcb\x0b\x28\x1b\x94\x0f\x7e\x7b\xd3\x51\x5e\x28\x7e\x8a\x14\xde\xef\x80\x95\x60\x6e\x6a\xab\xbb\xec\x0b\x57\xfd\xb5\x14\x87\x94\x56\xf5\xc7\xcf\x49\x20\xa8\x14\xaf\x66\x0b\xa3\xdf\x30\xc1\x33\x38\xfb\x26\x77\xca\x8b\xf5\xe0\x65\x51\x39\x47\x52\xb3\xa0\x36\x3f\x73\x08\x57\x23\x3b\x55\xbf\x08\xa5\xbe\x32\xb6\x36\x4b\x37\xbe\x5a\xa2\x2e\xd3\x9d\x38\xc7\xc1\x3c\xf0\x8f\x13\xd7\x8f\x28\x6c\x24\x0f\x42\xd8\x95\xea\xf4\x7d\x05\xf8\x44\x99\xa1\x84\x33\x1c\x47\xcb\x89\x6f\x63\xe6\x11\x10\x1d\x72\x6f\x67\x52\x2e\xc2\x04\x9f\x85\xa8\x25\x9e\xd2\x79\xab\xf1\x64\xf6\x22\x74\x28\xbc\x5e\x13\x67\x52\xca\xdb\x5a\x8d\xc4\xb8\x12\xa2\x80\xe2\x19\xdd\x52\xc7\x2f\xf4\xc1\x1e\xbf\x8b\xcf\x91\x04\x53\x27\x01\xd8\xab\x31\xdc\x4b\x21\x71\xfb\x17\x7a\xc6\x2a\x16\x5e\x0d\x85\x12\x18\x73\x9c\x21\x0e\xa3\x52\x95\x52\x24\x7f\x44\x76\xb9\x35\x8b\xc0\x16\xbe\xc5\xcc\xc3\x66\x33\x0d\x26\xdf\x7a\xe5\xfe\xa1\x50\xc9\x96\x9d\xa4\xe2\xb9\x1c\xfc\xaf\xb4\x17\xc5\x17\x31\xed\x14\xa6\x27\x20\x13\x29\x2e\xc7\xa5\xa6\x4c\xd9\xc9\xf7\x86\xbd\xff\x37\xbc\xf3\xab\x51\x26\xbc\xe6\x83\x31\x55\x95\x62\xfd\x67\x21\x39\xfc\xb8\x08\x00\xaa\xc8\x79\x6b\xb6\x80\x7c\x08\x3d\xa8\x66\xc5\xf4\x45\xfa\x4f\x7a\x6b\xe1\xc4\xd7\xac\x79\x27\xba\xb3\x69\xec\xbc\x40\xba\x4a\x35\xb0\x1f\x83\xd4\x90\x32\xab\x8c\xcb\x1f\x23\x0d\xaf\xe3\x54\xfd\xfe\xa2\x13\xd2\x39\x73\x71\x88\x73\x1c\xd2\xeb\x8e\x15\xf7\xad\x04\xec\xe2\x5c\x99\x41\x9d\x94\x95\x38\x25\xd1\x33\x23\xdd\xb3\x61\x17\x33\x58\x10\xd1\x0d\x74\x69\xa9\x33\xfb\x18\x75\x99\x7d\x54\xb7\x0f\x36\x3b\x75\x79\x7d\xfa\x5a\xc0\x9a\xea\x4d\x34\xfe\x93\xc4\x43\x9c\xb6\x8f\xc3\xd6\x2f\x61\x22\x00\x75\x73\xab\x56\x19\x62\xc6\xa7\xbf\x0f\x40\x73\xaa\x9b\xec\x62\x4c\x9e\x36\x86\x35\x88\xd6\xde\xf2\x4c\xff\xc5\x70\xd2\x3c\x37\x71\x35\x22\x26\xfd\x06\xc7\x5e\x88\xa7\x07\x9e\x2c\xae\xbf\x5e\x84\x75\xd7\x9c\xea\x74\xae\x84\xd8\xee\x78\x96\xe8\x5a\xd6\xd1\xc2\x2c\x95\x69\xb2\xa8\x44\x47\x0e\xc4\x7a\xb5\x83\x1d\x77\x31\x37\x1b\x1d\xeb\xcd\xe8\x68\x5e\x47\x31\x38\x2a\x8d\x7c\xbe\xa1\x41\x42\x47\xf6\x51\x18\xa1\x72\x43\xf9\xfc\x45\x6d\x12\x00\x1d\xf0\xc1\x00\xf5\x1d\x35\x1a\x61\x57\xf1\x5a\x02\x42\xda\x35\xc2\x25\x95\xfc\x62\xa1\xd2\x1a\xa7\xec\xa7\x46\x31\xf9\x63\x73\x04\xf8\xff\xed\x98\xff\x35\xa5\xfc\xc5\x60\x60\x59\x80\x6c\x94\x28\xfc\xf7\x9b\x82\xc5\x9b\xec\xa7\x38\xe7\x44\x2b\xcd\xde\x59\xc3\xb3\xcb\x0d\x19\xeb\x68\x4f\xfe\xea\xc8\x43\x26\xa9\xe9\x26\x90\x2d\x74\x97\x74\x59\x84\x42\x71\xe9\x78\xfb\xca\x77\x58\x20\xfc\x1b\x5c\x12\x22\x4f\x0e\x8c\x21\x4c\x3f\x73\x4f\xbd\xdc\xf0\xa0\x09\x00\xd5\x6e\xbd\xb5\x47\x8f\x8b\x20\x7c\x64\x0c\x48\x64\x58\xd0\x14\x29\x5c\x4f\x8c\xee\xc4\xce\x59\x21\x32\x6c\xe1\xc2\xcd\x08\x20\x01\xa0\xc7\xfe\xcf\x91\xc4\x63\x6d\x01\x0e\x76\xa6\x3a\x0f\xeb\xb1\x58\xb6\x28\x4a\x4f\xfa\xc5\xe9\x0f\xaa\xcd\x18\x3c\x19\x61\x46\x6c\x57\x65\xff\xf7\x86\xda\x7f\xbd\xc6\xe5\x0f\x31\xb7\xdb\xf6\x01\xba\x59\x35\xd9\x14\x82\x38\xd7\x58\x61\xe3\xda\x84\x6c\x5d\x14\xe9\x39\x9a\x78\x0f\x89\x57\x48\x9c\x58\xf7\x3d\xa7\x47\x2a\xa4\x68\x81\x5a\x5f\x19\x75\x2e\x35\xbc\xa1\x7a\xd6\x27\x2b\x15\xfe\x9d\x3e\x9f\xf0\x04\x91\x2b\x52\x1a\x35\x42\xd7\xa5\x57\x29\x7b\x7a\xa2\x68\xc7\xc0\x90\x79\xb2\x2c\xd1\x8f\xb7\x74\x66\xde\xed\xe9\x85\xa2\xea\x8f\xa5\xe6\xbd\x62\xd5\xd4\x5a\xed\xa2\x60\xcc\x8b\x7a\xae\x1c\x11\x7b\xf3\x22\xf4\x79\x84\x76\x6a\x80\xc9\xb9\x54\x17\xaf\xb7\x46\x43\xc7\xd6\xe0\xda\xc1\x0a\xfd\xdf\xf0\xdf\x18\x42\x24\xa4\x8a\xb3\xc6\x08\x73\x70\x21\x54\xa9\x44\x40\x13\x5d\xa8\x38\x21\xa9\xfc\x71\xe1\x38\x3d\xe9\xa6\xec\xd1\xda\x61\xb8\x48\x3c\xb1\xb0\xc0\x75\x3c\xe7\xa0\x78\xf3\xa2\x9f\xfa\x98\xfa\x9b\x4a\x5a\xb1\x63\x16\x5e\xd7\xf4\xc6\xeb\x01\xe6\xc4\x81\x00\x61\x34\xbb\x1a\x7c\xfc\x24\x14\x0f\xb5\xb8\x61\x60\x73\x6f\xd6\xe9\x11\x2b\xaa\x11\x58\x9b\xc8\x43\x59\x5d\x45\x7b\x30\x14\xaa\x50\x0e\x51\xab\x2d\x2b\x29\x0a\xc7\x59\x1e\x72\xa0\x07\xdb\x99\x1f\x96\xc7\x3e\xf1\x4b\x6d\xd2\x79\x0c\x1e\x0c\xc2\x31\x17\xa1\x44\xf8\xf2\x04\x3e\x7c\x0a\x55\xfc\x6a\x28\x0c\x2d\xbd\xea\x8e\x07\x0e\x17\x71\x14\x5c\x54\x26\x52\x16\x43\xf6\x95\x6a\xa4\xbb\x6c\x53\x96\xf4\xb2\x7a\x9c\xea\xc0\x87\xae\x6d\x03\xd3\x2e\x39\x4f\x90\x13\x58\xf4\x1c\xd2\xe9\x58\x79\xc9\xfc\x64\xe6\x38\x9c\x3d\x1c\x6f\x75\xea\xb4\xbb\x78\x13\xc7\x14\x77\x0c\x71\x7e\xee\x78\x86\xc4\x82\x1c\xce\x58\xa7\x9d\xcf\xcd\xe7\xa7\x57\xad\xda\x09\x97\x6d\xb3\x97\x58\x4a\x7c\xcf\xd4\xf2\xc9\xf0\x56\x3b\x21\xef\xd1\x3e\xbb\x3b\xbf\x78\xd5\x10\x6d\x25\x0d\xc3\xe0\x43\x87\xc8\xd2\x73\xbf\x8c\xd4\xf2\xbd\xb0\x32\x29\x38\xa3\x1a\x9d\xd4\x08\x5e\xe5\x6f\x8d\x51\x1e\xf0\x64\xcc\x65\x93\x5c\x0c\xfe\xdc\x1e\x29\xe4\x4e\x95\x20\x4e\xe1\x95\x93\x9f\x23\x0a\xd3\x1e\x3e\x25\xdd\x33\x86\xc0\x15\x04\x35\x1a\xec\xa1\xf3\x19\x65\x71\x55\xd1\xd6\x92\x26\x71\xee\xdb\xa6\x56\x26\x2a\x76\x30\x41\xe6\xe5\x08\xe6\xcd\xb1\xaa\xbb\xe5\x38\xec\x2d\x24\x04\xb3\x76\xa7\x9c\xac\xb9\x34\x85\x24\x07\x65\xdf\xe6\xda\xed\xc1\x0f\x5b\xca\x24\xd7\xa5\xe6\xcb\x24\x8a\x11\x9a\x1a\x30\x95\x18\x40\xad\x37\xc6\xaf\x4e\x9d\x11\xe7\xed\x9b\x5b\x57\xd3\xb2\x42\x52\x52\xbf\x29\x51\xf8\x92\x54\xd8\xe0\x6e\x0d\xd5\x0f\x39\x9d\xc5\x32\x7a\x60\xd5\x80\x29\x46\x69\xa3\xca\x15\x26\xd4\xb1\xbc\xce\xa6\x50\x8f\xdd\xfd\x57\xe3\x80\xfc\xab\xe2\x7e\x09\x9a\x86\xc0\xa6\x3d\x3f\x11\x40\xbf\x71\x54\xee\xf6\xce\x51\x72\x5a\xe8\xc6\xc4\xe4\xd0\x4d\xd2\xa9\x2b\x51\xc3\xd5\x63\xc9\xe2\x0d\xbc\x38\xfd\x0d\x2f\x79\xe4\xdf\x17\xfd\x41\x54\x51\xb7\x3c\x5e\x5d\xeb\x5a\x2c\x46\xd2\x50\xb6\x5f\x8d\xd7\x11\xb8\x3a\x6e\x1d\x64\x50\xae\x48\x51\xef\xa1\xa0\x14\xf5\x00\xa1\x04\x72\x92\x11\xf2\xe9\xab\x70\x4e\x21\xd7\xdb\xce\xa8\x67\xa6\x76\x62\x3a\x7e\x74\x5f\x1c\x19\x83\xa2\x7b\x52\x4c\x69\x99\x0e\x5f\x84\x86\xb2\x38\x73\x67\xae\x75\xd1\x51\x31\x36\x30\xee\x31\x0c\x9a\xbd\x6b\x6d\xfc\xa9\xc2\xc5\xf7\x1e\x8e\x1e\xa5\x22\x48\x3d\x36\x16\xfc\xa8\xdd\x47\xdf\x22\x27\x30\x08\x11\xfd\x32\x69\x6f\x26\x18\xfb\xd9\xe5\x24\x18\xd5\x82\x1b\x8b\xa9\x29\x94\xb5\x84\x2d\x47\x7f\x35\x05\x9c\x9a\x7f\xe9\x56\x40\x8d\x2b\x70\xd5\xd8\xfc\xdb\x21\x76\x31\xc5\x65\x40\xd8\x4f\x7a\x64\x0a\xc6\x08\x57\xbe\xdd\xa4\xa5\xf2\x6f\x03\x42\x35\xed\x16\x09\x65\x10\xfe\xeb\xb3\x74\xbf\x36\x54\xcc\x87\x13\x3c\x5f\x3d\x8b\xbf\x0f\xa5\x62\x85\x34\xf8\x2c\xf9\x72\x53\xf4\x26\x80\x57\x48\x19\xf6\xea\x15\xb6\xd3\x57\x9a\xc8\x97\xee\x92\x64\x39\x1a\x62\x2e\x8d\x03\x14\x7d\x6f\xf8\x9d\x7d\xa9\xe5\x56\x8c\xeb\xd5\x81\xfb\x13\x09\xbd\xca\xd8\x2b\xdc\xab\x28\x3f\x4a\x1f\xd9\xb5\x07\xc5\xd0\xac\xed\xef\x46\x53\x0e\xfb\xf3\xfa\x56\xe3\x9a\x33\x9a\x9e\x60\xb5\x99\xbd\xca\x43\xc3\x81\xb9\x84\x05\xe3\x5b\xa0\x69\x58\x0e\x93\x53\x05\xd9\x9a\xb4\xbb\xc3\xb7\x8e\xd7\x36\x5a\xf2\xd5\x81\x1e\xe0\x50\x9d\x8d\xaa\xc8\x6d\x3c\xb7\x95\xdb\x7b\xf3\x8e\x63\xba\xda\xc9\x63\x4e\xe4\x12\x38\xe2\x47\xd4\xa1\x6f\xd1\x9c\x7a\x6f\x03\xf7\x37\x2b\x3b\x19\x64\xc4\x01\xc4\x33\xb5\x44\xdb\x8c\x1b\x17\xe3\x5f\x27\xd5\xad\xce\xcc\x8e\x88\x0b\x0d\x5a\xd9\xd4\xe3\x64\xa4\xe1\x00\xa1\x45\x55\x01\xef\x68\x2b\x6f\x50\x77\x10\x6b\x7d\xe7\x19\xe8\xe9\x1a\xc7\x39\x89\xe8\x6c\xfd\xab\x50\xd9\xb7\xe7\xc4\xba\x2c\x00\x5e\xf6\x28\x0f\x8f\xae\xd0\x29\xf5\x1d\xbc\xf9\x2f\x01\x7b\x89\xf6\x49\x36\x97\x59\x1d\xf5\x9c\x66\xd6\x77\x27\x37\xb6\x11\xff\xba\xc6\x00\xa1\x55\x38\x4e\x76\xba\x47\xad\xdc\x77\x50\x05\x74\x33\x59\xb3\x26\xc4\xbf\xa3\x7c\x67\x37\x70\xb8\x8c\xb3\x0a\x11\xa4\x74\x4c\x01\x0e\xe2\x28\x3d\xe5\xb1\xb1\x38\x34\xb2\xf1\x49\x09\x2e\x64\x58\xf8\x0f\x56\x3a\x9e\xc9\x28\x3a\x1d\xe6\x88\xe9\xcd\x34\x97\x88\x2a\xd6\xff\x1e\x8c\xf9\xcf\x15\x0d\x82\x4e\xca\x02\x96\x45\x45\x51\x03\xef\xee\xfe\x41\x16\xfe\xe2\x2a\x50\xa4\xd6\x3c\x8d\x12\xbd\xc6\xfb\x88\xb8\x4c\x6c\xd2\x60\x83\x8a\x6e\xed\x90\x0a\x3e\x86\x85\xbb\x81\x7e\xdb\x61\x3a\xa8\x86\x7b\xe1\xe0\xb3\x8d\x25\x6d\xe4\x18\xe5\x10\x13\x6a\xf7\xda\xbc\xc9\xf9\x72\x9a\x79\x50\x37\x07\xe4\xcd\x7a\x5c\xe2\x50\x42\x9a\x92\xa2\xc7\x26\xd5\x89\x04\x0c\x6c\xd6\x7f\xaa\x6a\xad\x16\x7f\xd1\xec\x72\x6a\x63\x33\x5c\x5d\x04\x1b\x19\xf7\x3d\x3c\x90\xc2\x57\xe1\x5a\xb0\xaf\x6d\xa9\xab\x76\x6c\x1d\x05\x06\xab\x24\x5e\x95\x5b\xbb\x8e\xd9\xc4\xf0\xdd\x6a\x73\xf8\xbd\x04\xe1\xdf\xc8\x97\x86\xe3\xc2\xa8\xcf\x2e\x8a\x9d\x31\x3a\x12\x1a\x96\x07\x03\x56\x4f\xaa\xdc\x95\x58\x1a\x34\x0a\x1e\xbe\x43\x54\xc4\xff\xab\x0d\xff\xd7\x0c\xf0\x87\x48\xa1\x7f\x00\x83\x00\x59\xf5\xd2\x44\xb3\x70\x95\x8d\x72\xcf\x7f\x55\x39\x55\x5d\x9e\xb0\x4e\x9d\x5a\x9d\xba\x5f\x68\xa2\xb8\x0a\x2d\x35\xc3\x0e\x1e\x33\xe4\x84\x1a\x17\x97\x9b\x15\x9f\x56\x65\x49\x11\x71\xe6\xa5\x0b\x7f\xff\xc2\xe6\x7e\xf3\xfa\x64\x4c\x17\x42\x49\x85\xba\x64\x0c\x92\x71\xe6\xbb\xa3\x3a\xd8\x23\xc5\x51\x3e\xb6\xcd\x48\xb9\x7a\xe6\x55\xb4\x3f\x64\x78\x56\xb2\x63\x3e\xa4\xbc\x21\x14\x51\xf9\xb0\x07\xde\x27\x73\x52\x08\xd6\x8f\x50\x1f\x07\xcb\xc0\xd3\x90\xe7\x1f\x50\x6a\x99\x92\x41\xa2\xd0\x7d\xb7\x49\x34\x7d\xdd\x0d\xa9\x7f\x5e\xec\x5f\xf9\xff\x5f\x6d\xf8\xbf\x1e\xbc\xf4\x87\x3c\x57\x2c\x37\x26\xe3\xbd\xc4\x57\x6c\xea\x9d\xa1\xf5\x6b\x31\xd8\x69\xa5\x9b\x8d\x05\xc8\xd5\xbc\x11\xdb\xc5\x46\x45\x11\x09\xf1\x40\x32\x91\x8b\xf4\xdf\xef\x8a\x2f\xf1\x35\x6c\x91\xdd\xe4\xa2\x6b\x69\x95\x56\x6c\x3f\x64\x8c\x46\xfc\xc0\x8d\x25\xa9\x10\xa9\x22\x2d\xd3\xd9\xe6\xd3\xc9\x16\x5f\x0e\x9e\xa0\x98\xd1\x30\xbb\x70\xc4\x7c\xe7\x1d\x9a\x37\xcf\x72\xcf\xcd\xa8\x7c\x33\xa6\x89\x94\xec\x89\xa7\xc9\xa9\xbd\x6d\xd6\x8e\x79\xe5\x5f\x84\x0a\xd7\x30\x95\xb6\xa0\xba\x26\x0b\x39\xf3\x4c\x71\xeb\x18\xb7\x77\x14\x50\x9d\xdd\x4b\xfd\x43\x68\x43\xc7\x1d\x35\x77\x2c\x9c\x03\x76\x23\xd6\x0f\x5b\x95\xec\x79\xf4\x22\x6f\x6a\x0b\x97\x19\x67\xcf\xf8\x86\x44\xf2\x54\x3e\xa2\x7c\x0c\x8e\x0a\x9e\x9c\x21\xf9\xa1\xf6\x1b\x60\x99\xd9\x05\x7a\x74\x3d\xb1\x7c\xdd\xb6\x54\xbc\xb1\x94\xe4\xe7\xe9\x47\x98\x1b\xa2\xe4\x73\x70\x63\x6b\x6b\xc2\xf8\xd8\x87\x07\xf4\x3e\x64\x4a\xa3\x76\xd1\x6b\x2b\x3f\x14\x41\x97\x0c\xd7\xcc\x9c\xae\x38\xbb\x7d\xc9\xb2\xbd\x0d\x1e\x69\x4a\xc6\xf2\x2e\x5a\xb9\x01\x19\xfa\xb8\x15\xa4\x3c\x8d\xb8\xed\xe9\x0f\x59\xc3\x6f\x5a\xee\x28\x0b\xa7\xd6\xed\x66\xa8\xa5\x38\xdf\xc4\x87\x4e\xbc\x5b\x24\x43\x03\x19\xef\x66\x41\xa2\x4f\x8d\x4a\x48\xa9\x15\x9d\x5d\xe7\xbc\xb3\xb8\x98\x9a\xf9\x1f\x6f\x6b\xeb\x34\xd3\x2b\xbf\xd1\x41\x77\x22\xc0\xe4\x01\x91\x52\xab\x09\x50\x36\xfd\xf0\xbe\xd1\x05\xab\xf0\xdc\x13\xd5\x77\xfb\x73\x6a\x26\xd1\x10\xa2\xee\xb9\x4c\xd8\x75\xa6\x14\x5c\x0d\x50\x46\x6a\x0d\x1a\x40\xc5\x30\x0a\xfa\x0c\x91\xea\x5b\x26\x69\x82\x68\xf7\xa8\xf7\x7c\x5a\x94\x2c\x21\x7b\xfc\x50\x17\xfa\x15\xa1\x18\xa4\x59\xbd\x86\x08\xab\x2e\x0d\x2e\x31\x36\xcc\xfa\x04\x9e\xe5\x33\x74\x64\xd7\xdf\xa4\x55\x67\x62\x53\xc7\x9d\x54\xca\x65\x1e\xa9\x00\x9d\x57\x3a\x26\xed\x12\x4a\x9f\x94\x8a\xb6\xe8\x35\x4d\x82\xcc\x3a\x46\x0a\x0a\x42\x16\xda\xeb\xe4\x82\xfe\xc2\x0c\x53\xbf\x66\xd1\x51\x00\xc2\xff\xaa\x91\x98\xde\x3c\xd5\x28\x64\xcf\xa0\x7c\x99\x9d\xe0\x59\x36\xc1\x3b\xcc\xe1\x3a\x9b\x6f\x9c\xc5\x55\x36\x55\x5a\x6a\xf1\xeb\x8b\x50\xe4\xb6\x84\xa1\xe5\x87\x59\xef\x82\xba\x4c\xd3\xf7\x89\x5e\xdf\x57\xab\x9f\x76\x32\x22\x1d\x55\xf6\x05\x59\x89\x1f\xa6\xc5\x81\x9a\x88\x13\xaa\x84\x79\x41\xa9\xa5\x9b\x3d\xc1\xe6\x9e\x87\xa6\x27\x7f\xe7\x34\x63\xb1\x08\x15\x34\x09\xf2\x5d\x21\xd2\x80\x84\xdb\x2e\x10\xd3\x60\xf2\x8a\x8d\x4d\x4a\xcd\x5b\x16\x51\xd4\xa9\xc3\x1a\xe9\x2c\x2c\x96\xf2\x47\x38\x9e\xf2\x8c\x93\xec\xec\xf6\x86\x96\x5c\x45\x90\xfc\x40\x0a\x89\xe1\x53\xd7\xb3\x5d\x40\xca\x60\x3f\xed\x0c\x24\x23\x1b\x1c\x31\x4c\xa1\x92\xe4\x49\x7c\x57\x51\xac\x47\xf9\x0a\x0f\xdc\x0d\x71\x92\x2a\x33\xc8\xec\xeb\xe8\x26\xce\x19\xd8\x19\x3e\xe0\x3c\xc1\xf0\xb2\x97\x9a\xf5\xee\xf8\x0c\xc2\x67\x08\x47\x43\x54\x3a\x81\xde\xbf\x27\xed\x36\xcf\xb5\xa7\xa4\xb6\x28\x3b\xa9\x59\x97\x51\x76\x0a\x95\x32\x2c\x87\x2f\xac\x84\xff\x66\x24\x72\xa8\xd9\xf2\x38\x01\x03\xd2\x0d\xa8\x65\x09\x27\xe5\x23\x32\xba\x5a\xed\xbc\xda\xea\x3f\x7d\x5e\x0d\x84\xc1\xd0\xfa\x43\x59\x8a\x9f\x2c\xd7\xcf\xaa\xb3\x0c\x40\x9d\xa5\x4f\x24\x51\x94\x25\xc8\x03\x87\xed\x7f\xff\xfc\xf8\xc8\x50\xa0\x3d\xe6\xd0\x9d\xf5\xc1\xed\xb8\x25\x73\x70\xa0\xba\x00\x24\x05\x63\xf8\xd2\x70\x55\x22\x89\xf0\xca\x4f\xea\x9d\x3c\xfa\x09\x8b\x4b\xa6\x91\x67\xd7\x7f\x6a\x83\xea\xf9\x2d\xb0\x63\xff\xcb\xe0\x33\xf0\x01\x54\x8e\x62\x79\x49\x4d\x4c\x5c\x34\xe3\x62\x6c\x70\x2e\x3f\x10\x4d\x35\x36\xae\x72\xc6\x6a\x1c\xa5\x31\x2d\x4a\x38\xe3\xc7\xa5\x02\x8c\xc4\xd7\xa3\x13\xbf\x2b\x58\x03\x50\x98\x47\x09\xe1\xf0\x9f\xf3\x73\x1d\x45\xd9\x16\xb9\x7c\xac\x0f\xfd\xee\xaf\xd5\x9e\x26\x8e\x40\x52\x2a\xc9\x5b\x5c\x67\xfc\x87\xb9\x6f\x13\x1d\x30\x69\x57\xdf\xff\x24\x9b\xa0\x33\xba\x9c\xca\x13\x9d\x30\x76\x09\xff\xc2\x7e\x0f\xcc\x2a\xc1\x3f\x9a\xb5\x86\x4d\xdf\xdd\xb2\xbf\x7d\x1f\x8c\xae\x1d\x81\xf4\xf0\x9f\x0d\x0f\x17\x15\xb6\x3e\xb1\x5c\x73\xb7\xfa\x69\x5a\x82\xd9\x0b\x89\xd9\xb5\xa6\x79\xc7\xce\x4c\x72\x5b\x6e\xaa\x1a\x9e\xd8\x97\x1e\xe7\x12\x4a\x8b\xc1\xb6\x1c\xa9\xa6\xb2\xea\x81\x86\x3a\x00\xda\xc2\xcf\x7b\x0c\x7b\xce\xeb\xca\x76\x43\x21\x7b\xd2\x82\x6c\xc0\x51\x49\xa7\x70\x38\x7d\xa3\xa6\x5d\xa4\xe5\xfd\x8a\xfb\x87\x35\x48\x8a\xde\xc9\xed\x94\x1a\xed\x7c\x17\x3b\x6f\x62\x25\x1b\x41\x42\x1c\xe4\x4a\x28\x77\xeb\x11\x56\xc4\xaf\xed\x3a\xe0\x24\x48\x0f\xbc\x98\x63\xe1\x11\xf2\x78\x85\x90\xfe\xd8\x80\x92\xe7\x53\xae\x93\x83\xde\x68\xa9\x98\x8a\xd2\x68\xb5\x63\xa8\x69\xcb\x71\xd2\x6b\x05\x05\xe8\xcf\x92\x3a\x32\x63\xfa\xa4\x91\xd3\xec\xaa\x55\x59\x9f\x37\x21\xe7\x2a\x44\x3c\x79\xd5\x1f\x1c\x67\xce\x52\x18\xfa\x10\x2e\x02\xde\xfd\x23\xe5\x8b\xb6\x2d\xff\x15\xa9\xef\xf6\x30\x87\x6e\xfe\xde\xb5\x3e\xa3\x14\x12\x7e\x86\xf2\xfa\x42\x74\xa1\x8c\xd1\xa3\x36\x1c\x68\x7e\xfd\x14\xd3\x63\x1e\x9f\x5f\x8d\x43\x5e\x36\x60\x58\x5d\xaa\x02\xbf\x1e\x13\x2d\x91\x47\x61\x13\x81\xf9\x21\x7b\xb8\xa9\x5e\x06\xd8\xe3\xff\x20\xb1\x9f\x6d\xb6\x33\x51\x92\xec\x97\x1f\xcc\xf7\x05\x49\xc5\xdc\x8d\x9e\x37\x38\xcf\xc9\xe0\x23\x1c\xa3\x77\x13\x3e\x81\x2c\xd7\x0f\x22\xe3\x2d\xb9\x25\xb1\xc8\xb1\xac\xbc\x0f\x82\x74\xb6\xdd\x28\x4d\x3f\xa6\xfe\x5a\xba\xaf\x5c\x4e\x2d\x20\xa6\x7d\xd6\x87\xbc\x08\x5d\xaa\x36\x5f\xde\xa1\x18\x48\x79\xb5\x45\xfe\x6a\x78\x83\x27\xb0\xe0\xb3\xfa\xc1\x85\xeb\x65\x89\xde\x7b\x4a\x17\x58\x77\x18\x30\x2d\x9f\xaa\xe7\xf6\x9a\xe3\x40\x73\xff\xa9\x38\x16\xd2\x7a\xf2\x45\xb9\xd2\xc6\x76\x9a\x46\xda\xd3\x6d\x3e\x7f\xce\xde\x85\xba\x24\xf0\x6a\x0e\xfa\xff\x6d\x4a\xf9\x8b\x76\xfa\x01\x9b\xab\xb8\x09\x9c\x31\x0c\x15\xc6\xca\xbe\xe0\x6f\x6d\xe7\x03\x73\xbd\xa1\x1f\x5d\xc4\x6e\x96\x43\x5c\x8e\x19\x46\x8e\xee\xd1\xd9\x8b\x80\x09\xec\x5d\xea\x70\xff\x9a\xc9\x54\xbc\xb5\x7c\x55\x93\xeb\x3e\x34\x57\x22\x0b\x0c\xdb\x40\x7b\xd9\x2a\x8a\xbc\x87\x29\x53\x1d\x03\x7b\x68\x3e\x28\x0e\x91\x7c\xc2\x6b\xd1\x84\x6d\x4e\x95\x13\x14\x0c\xf1\xa9\xcd\x41\xaa\x64\x80\xd1\x68\x6a\x66\x3a\x48\x6d\x80\x35\x46\x01\xa0\x97\x32\xd1\x02\xc1\xe6\x30\x47\x65\x2b\x8d\xc9\x9e\x2d\xad\xa8\x38\x62\x35\xaf\xd0\xfd\xcd\x7e\x6b\xc2\xe9\x23\xf8\x73\x91\x78\x5e\xf9\xfd\xdf\x6b\x6c\xff\xf5\x44\xb4\x3f\x24\x26\xa3\xe3\x19\x7c\x8d\x4d\xde\x5e\xa8\x1a\x43\xe3\x8c\x60\x65\x67\x82\xc0\xf6\x77\x69\xd8\xaa\x79\xd1\xbb\x0c\x72\xba\xb7\x51\xc5\x06\x92\x02\xd7\xf5\x29\x60\xc7\x83\x58\x7d\xcb\x4d\x75\xc2\x68\x15\xba\x66\xfb\xb5\x97\x62\x96\x2e\x37\xd4\x64\xf0\x93\x71\x5f\xbc\x90\x55\x9a\xdd\x18\x2a\x11\x30\xbc\xbe\x47\xd6\xaf\x18\x4e\x94\x63\x6f\x0e\x51\xae\xad\x8d\x3f\x64\x6f\xc2\x23\x70\x58\x1d\x1a\x3c\x85\xc0\xb4\x9d\xfa\xb8\xc6\xfd\x04\x4a\x69\xb7\x91\x58\x48\x4c\x7c\xcb\x2a\xad\xe1\x09\x79\x98\xe9\x87\xbd\x72\x7d\xb8\xf3\xd5\x10\xeb\x9d\xed\xc4\x4d\x27\x5b\x51\x25\x40\xbf\xc3\x96\xf3\x42\xff\xf5\x63\x76\xc6\xbf\x78\xc7\x2d\xd5\xcd\xf1\xed\xce\x2d\xb1\x7d\x88\xe5\x86\xde\x19\x76\xff\xe1\x69\x28\x2b\x00\x6d\x36\x9f\xae\xcd\xe8\xe2\x27\x48\x65\xd6\xd9\x17\x9b\x81\x9d\xf9\x7e\xda\xff\x7c\x3e\xb2\x40\x1d\x68\x02\x17\x40\x9f\x87\x0f\xb2\xdb\xde\x3a\x67\x7f\x5d\xe6\xe6\xe3\x45\x60\xee\xc6\xf3\xf4\xca\x72\xcd\x14\x33\x58\x26\xed\x4a\xb2\x7e\x98\x11\x3d\x5d\x57\xe5\xc6\x00\xe6\x8c\xa9\x45\xcc\xcf\xf7\x8a\xe3\xa7\xae\x46\x6f\x38\xae\xfe\x21\x1e\xf4\xfb\xb3\x71\x9d\x9b\xc1\xbd\xa3\x2f\x5b\x66\x62\x28\x6c\xb9\x7c\xf1\xca\xd5\x0f\x65\xf9\xad\xff\xb6\x8b\x23\x9f\x3c\xd6\x51\xdb\xa3\x46\x7c\xab\xd3\x45\x64\xb7\x48\x88\xc0\x29\xc3\x92\x0f\x1d\x25\x40\x77\x3d\xf5\xba\x29\x0b\x09\x5d\xdd\x1b\x24\xae\x3e\x2d\x94\xc8\x36\xf1\xe7\xb9\x72\x26\x38\xdc\xc1\x2b\x66\x0e\xe0\x25\x67\x5f\xba\x00\x5b\x1e\xb4\xde\xcb\x73\xd9\x1d\xa4\x91\x62\xdb\x0e\x12\x72\x9a\x3e\x74\xbe\xb3\x0b\x6e\x1c\x55\xe6\xcf\x78\x1a\x23\xe6\xee\x4d\x06\x87\x2a\x81\xbf\x04\xc5\x2b\x99\x99\xd2\x58\x03\x8a\x53\xa9\xb8\x0a\x63\x7b\x3c\xec\x9b\xbc\x83\x0d\x6e\xf5\x42\x41\xa9\xfd\x0d\x4d\x15\xe0\x14\x4e\x42\xa7\x05\x5c\xc8\x22\x71\x47\xd7\xee\x54\x45\xa3\x19\x8d\x7c\xa7\x7f\x9b\xb2\x63\x36\x7c\xa9\xc0\x88\xe7\x7a\x05\xe9\xc0\x8b\xa9\xea\x92\xeb\xd3\x62\x11\xc9\x27\xbf\xa8\x31\xf4\x3a\xfc\xe9\x7e\xa7\x05\x08\x54\x30\x0e\x60\x5f\x21\x1e\x7b\xa7\x8e\x68\x78\xb1\x00\xf7\x1e\x16\x23\x19\x86\x5f\xcc\x7b\x88\x9c\x6c\x96\x90\x9c\x75\xd8\x12\xd3\x03\xeb\xf5\x45\xac\x90\x25\x0c\xd4\x66\x4e\x4f\xe8\xc0\x87\x19\x45\x5e\xeb\xbc\x66\x47\xa0\xfa\xdb\xdd\x2c\xd0\xd9\xce\x25\xab\xe4\x66\x42\xc1\xd5\x02\x4d\xc3\x71\x6e\x43\x2e\x36\x2c\xf0\xdb\xe9\x45\xa8\x67\x62\xbd\x54\x95\x8d\x64\xc1\x59\xd2\xb7\x06\xc1\xb2\xf4\x9f\x4e\x84\xdd\x17\x5b\xc4\xe9\xd4\xdd\x05\xfe\xe5\x6f\x82\xbe\x2a\x81\x0f\x66\x90\xfd\x89\x71\xd5\xb9\xd0\x20\x16\xc5\x5d\xd4\x30\x3b\x72\xa1\xe4\x13\xb2\xba\xb8\xf5\x83\xfe\x2c\x47\x69\x7a\x77\xff\x86\xfd\x45\xa8\x7d\x46\xe6\x91\x7a\xf8\x48\x8d\x6e\xf2\x3f\x8f\x59\xd3\xd5\xc5\x10\x4b\x6a\xfd\x4b\x03\xd5\xb3\xc8\xe2\x04\xb5\xc4\xf8\x14\x20\x81\x3d\xdd\xe8\x86\xa7\xaa\x99\x56\x5b\xcd\xd9\x30\xc5\x77\x8a\x1a\xcb\x8d\x31\x2f\x36\x92\x30\x69\x4b\x0f\x1e\x19\x5f\xbd\x30\x1c\x00\xa2\x1f\xd2\x12\x09\x6f\x7f\x7d\x64\xd5\x2c\x46\xf2\x03\xa2\xb9\x1b\x13\x33\x63\x4b\xf9\x83\x2b\xe2\xd0\x6a\xb7\xed\xf5\x1a\x35\x27\x2d\x00\x15\x3f\xbc\x9a\x1d\x61\x7d\x1a\x6e\x62\xc7\x5f\xf5\x87\x89\x6d\xcb\x7c\xa8\xde\x9f\x88\x77\x95\x56\x70\x17\x9b\x49\x81\x95\x74\x03\x22\x65\xb9\x0c\x4d\x72\x7f\x43\x2b\xd5\x54\x8e\x56\x24\x44\x7c\x39\x22\x97\xe3\xf2\x2f\xbf\x2f\x2d\xb6\x12\xf9\xed\xc3\x0f\xf7\x88\x55\xe0\xce\xa1\x79\x37\x02\xa2\x4a\x71\xa7\xf8\xe3\x72\xfa\x21\x70\x31\x72\x78\x1d\x97\x31\x4b\x6a\x33\x4d\x7b\x01\xdd\xe9\x35\x12\xf6\x23\xa0\xbf\x62\x8d\xe2\x0c\xbd\x4e\x09\x63\x25\x27\xf0\x17\xc1\x1f\xc7\xc4\x3b\x7d\xde\xc0\x65\x73\x6c\xdf\x7e\xcf\x06\x26\x3a\x1d\x44\x02\x90\xac\x76\x88\x0e\x53\x9b\xa5\x02\x53\xde\x97\xff\x1b\xf6\x1f\xb7\xad\x78\xe2\x9c\xea\xf1\xda\x31\x79\x8f\xe3\xc3\xf0\x7a\x02\x2f\x09\x70\x66\x82\x26\xbc\xb3\xeb\xbb\x69\x2f\x35\xe1\x33\x57\x60\x0e\xf5\xfb\x9e\x1f\x37\xb2\x6a\x3a\x8b\xde\x4d\xb3\x09\xdf\xb9\x74\x45\xfa\x82\x9c\xd4\x95\xbd\x59\xe6\x45\x77\xdf\x54\x20\x58\x9d\xfa\x0c\x4b\xc7\x54\xfe\x5d\xfc\x6f\xb1\xeb\xa4\xe6\x2b\xec\xfe\x88\xce\xc5\x11\x30\x21\x9b\x97\x5c\x09\x35\x7d\xf5\x24\x1e\x85\x68\xf6\xa9\xe0\x9f\x56\xff\xb3\x5f\x98\x28\x89\x9d\x7c\xd1\x9b\x96\x4b\xc2\xac\x63\xb0\x37\x07\xe7\x14\xb5\x41\x64\xca\xf2\xc1\x30\x5e\x5e\x5a\xd8\x31\xeb\xb0\x8a\xf1\x9a\x3f\x49\x37\x39\x39\x4d\xb0\x96\x5c\x0e\xe5\x10\x48\x75\xfd\x1e\xd0\x28\x59\xb1\x95\x55\xde\xf9\x8e\x07\x59\xb8\xb2\x24\xa4\x14\xca\x31\xfd\xb0\xfc\x92\x09\x1d\xd2\x87\x28\x9a\x2c\xbc\x03\xe8\x5f\xee\x59\x69\x7d\xd4\xd7\xfe\x72\x58\x1a\x7d\x83\xcc\x49\xa2\x4d\x6e\xd7\x67\xf7\xd6\x3f\xb8\x20\x29\xe5\x3a\xfc\xf0\xe0\x34\x1f\x88\xd4\x97\x2b\x12\x02\x96\xd3\xc8\x75\x73\x7e\xa3\x59\x9b\x06\x0a\x5d\xca\x38\xba\x42\x96\xf7\x67\x81\x76\xac\x69\xbb\x6e\x5c\x08\xaf\x5e\xf4\xe7\x5c\x84\x56\x3c\x1c\x74\x15\x09\xe8\xaf\xaa\xa1\xfc\x6c\x0c\xe5\xb9\xf2\x4d\xf4\x4d\x2d\x24\xeb\xe5\xfa\x03\xf7\x14\x3b\xc3\xf9\x82\x9c\x29\xa1\xec\xc6\x87\xe7\x7b\x32\x9a\xf0\xa9\xf8\xd1\x19\x45\x7c\x2a\x61\xf0\xba\xe3\xdd\xd9\xf0\xa7\xf3\x1e\xbe\xc9\x78\x22\x35\xf0\xc4\x38\x42\xa8\x94\x6d\x8d\x46\xb7\x36\xca\x3b\x1e\xe0\x17\x1b\x7a\x6a\xa5\xab\x80\xa0\x35\x20\xdb\xd5\x0e\x2d\x28\x3c\xd7\xfd\x26\xef\x25\x52\xe8\x23\xdb\xf3\xc4\x56\xbf\xc9\xc2\xf2\x16\x38\xf0\x6f\x98\xbf\x11\xf2\x40\x10\x08\x39\x18\xc3\x12\x8f\x53\x6b\x0d\x7f\xcf\x02\xb3\xcf\x37\x44\xe4\xe4\xd4\xe1\xe1\x36\xab\x99\xf9\x9a\xe2\x41\xa8\x8f\x10\x43\x7e\x93\x8e\xa7\x2b\x78\xaf\xf7\xed\xaa\x8b\x4b\xf9\x06\x10\x7e\x92\x8f\xb1\xe7\x3f\xe3\xcb\xf4\xd5\xdb\xf0\xd5\x1a\x77\xaf\x66\xa3\xa3\x9a\xcc\xd6\xba\x39\x5f\x9f\xc5\x67\xe7\x53\x62\x96\x20\xbe\x08\xbd\xb3\x65\x79\x7c\xff\xb5\x5e\xff\xb9\xe8\xe7\x08\x05\xbe\x6b\xbb\xe6\xf2\xd4\x8c\x1d\x5e\x04\xbb\x17\x0d\xd4\xb3\x75\xc4\xf9\x20\x10\xfe\x1d\xbf\x8f\xf7\x4c\xbd\xb1\xd4\xfe\x6f\xdc\xe3\x9c\x99\xf7\x02\x22\x7c\x2a\xd3\xe5\x9f\x78\x05\x78\x0b\x4f\xff\x0e\x8c\x70\xa4\xfc\xaf\x8e\xfd\x9f\xce\x43\x7c\xa1\xa0\x5e\x05\x80\xcd\x19\xe1\x8b\xc9\xad\xfc\x72\x3d\x09\x0e\x63\x69\x64\x7f\x14\xc3\xea\x7a\x98\xbc\xba\xc2\x96\x19\x14\x8c\x1a\xa8\x76\x89\xd5\x41\xbe\xbd\xc9\x5a\x7a\x61\xcd\x10\xd7\xf4\xfb\xd5\x61\xf8\x73\x6d\x0f\x82\x5e\x8a\xa0\xd7\xf4\x29\xad\xf9\x74\xee\xd0\x96\x15\x95\xab\x40\x10\xe2\xb9\x88\xdc\x7e\xd5\xce\x6e\xc2\xbd\xb6\xd7\xa5\x7c\x4e\x7f\x17\x19\xd6\x27\x06\x1d\x37\x5b\xdc\x15\x26\xa7\x4d\x14\xd6\x7e\x0f\x9c\x6f\x4f\xe4\x0f\x79\x0f\x4e\xb4\xc2\x29\xf3\xe3\xfe\x50\x32\x35\x30\xba\xc4\x90\x29\x08\xa3\x0f\x50\x18\x9a\x5f\xfc\x2c\x98\xb0\xb8\x0a\xfa\xbf\xcc\xf9\xbf\x7e\xea\xe0\x0f\x21\x7c\x7e\x7a\x4e\x26\x7c\xb1\xf7\xf3\x69\x95\x70\x8d\x30\xc5\x72\xdb\xd4\x95\x31\xe5\x17\x82\xf9\xbe\xde\xa6\x07\x16\xe9\x1f\xba\xb3\xa3\x46\xd3\x29\x95\x3c\xe0\x7b\x38\x42\x0e\xca\x96\x69\x02\x52\x5d\x2a\xfc\x37\xa9\x1c\x27\xd3\x0b\xc6\xb6\x63\x70\xfc\xb1\x34\xbb\x4d\x03\x50\x27\x48\x88\xba\xe0\x4c\xf0\xaa\x0c\xa5\x19\xf9\x81\x90\xb6\x31\x61\xb4\x89\x26\x94\xe9\x62\x4f\x24\x6b\x75\x61\xd2\xf8\x44\x3a\x0c\xad\x8b\xa5\xf7\x05\x06\x2c\x7a\xd7\xc4\x23\xca\xec\xba\x72\xc7\xf8\x7d\x9f\xab\xad\x16\x4b\x20\x46\x80\x51\x7b\xb0\xaa\x71\xa5\x1a\x58\xf3\x12\x39\xbc\x01\xf8\x3f\x5b\x7e\xe9\xba\x68\x16\xb9\xf4\xd8\xd2\xa8\xee\x64\x5e\x56\x77\x83\x50\x5a\x2c\xc9\x9f\xf8\xd9\xdf\x7f\x94\x35\xc5\x8f\x40\x05\x5f\xe6\x6c\xb3\x55\x47\x8f\x5f\x14\xdb\x2f\xd6\x58\x5e\xb0\x1e\xd1\x48\xf6\xdc\x84\x98\xff\x52\xff\x39\x62\x0d\x9b\x36\xcf\x12\x9c\xb9\x0d\xe8\xaf\x69\x24\x43\x10\x87\x41\xd1\x9f\x30\xfb\x65\x72\x22\xa6\x13\x1a\x2f\xfc\xfd\xd1\x7e\xc7\xc8\x1a\xaf\x11\xee\x47\xd0\x47\x0b\xe0\xfa\xeb\x3a\xdf\x7f\x90\x32\x83\xad\xf5\x5b\x00\xb5\x57\x9e\x5d\x75\x20\x2f\xda\xef\x6d\x39\xd3\xd1\xa9\x72\x53\xf6\xb5\xc7\xf4\x09\xf0\x52\x0b\x41\x67\xc6\x1d\x5a\x0c\xdb\xbe\xcf\xee\xd7\xd7\x16\x8b\xb3\x5e\xdb\x95\x1a\xa8\x0a\x96\x78\x8a\x8a\x1b\x0e\xca\x73\xca\x2b\x66\x30\x21\x32\x6b\x38\xd5\xc2\x2e\x21\xf9\x6d\xfc\xdd\x42\x5a\x07\x81\x54\x68\x28\x55\x4f\x62\x7a\xbb\x5f\xcd\xfb\x1b\x55\x1b\xeb\x2f\x70\x25\x76\xa5\xd9\x42\xde\xcf\x31\x4c\xa1\xa3\x43\x33\xe0\x9f\x35\x42\x8b\xbd\x55\xf5\x5e\x7f\xa4\x42\x43\x1b\x54\xa6\xd6\xe0\xa9\x4a\x03\x27\xf8\xeb\xc2\x29\x38\x39\x3e\xb6\x1a\x5a\x12\xa5\x4f\xf6\x75\xb0\x11\x6e\x43\x39\x68\xec\x7e\x34\x5a\x97\xe2\xc4\x9c\x11\xc5\x7c\xe0\x3f\x3b\xd8\x5c\xde\xc8\x71\x0b\xb0\x45\x1e\xbe\x91\x1f\x75\xa8\x33\x12\x58\x33\xb1\x7a\x33\x0f\xf9\x53\xe0\xc4\x0e\xaf\xe8\x14\xa0\x71\xfb\x62\x80\x6a\xc8\x77\xc3\xfb\x9f\xca\x75\xb0\x29\xbd\xb0\x5a\x1f\x30\x22\xda\xd0\x76\x34\xe5\xae\x7a\xda\xe5\xc5\xf9\xec\x2e\x4d\x5b\xa0\x80\xb0\x4a\x27\xab\xd5\x92\xb7\xf2\x63\x5b\x9b\xec\x39\x30\x4c\x96\xbd\x9a\xb6\xab\x88\xab\x27\xf5\x67\x69\x5d\xc5\x2f\xc1\xcc\xc2\x00\x66\xf8\x05\xe6\xf0\x59\xd6\xd2\xfc\x61\x52\x4c\xd8\xdd\xce\xf1\x8c\x08\xeb\x04\xaa\x0f\xec\x52\xd8\xac\x5d\xed\x73\x4c\x70\x40\xbe\x2e\xb0\x6a\xa2\x6a\xae\x7e\x69\xc4\xc2\x65\xd8\x44\x38\x72\x9f\x93\x23\x31\xc3\x6d\xcc\xf4\x7e\x34\x08\xeb\xe6\xf2\x60\x18\xd8\x7b\x70\xf5\x7f\x11\x2a\x3e\x83\xa3\xb3\x44\x1e\x13\x10\x62\x65\x44\xc7\x24\xf1\xa4\x53\x5c\xc7\xc2\xaa\x22\x59\x8c\x87\x04\x85\xfb\xb5\x14\x07\xaa\xec\x05\xa9\xeb\x54\xe1\xfc\x6f\x7d\xf8\x18\x33\x27\xe9\xd5\xc0\x23\x29\xe1\x5c\x7b\xd4\x08\x9c\xca\x70\x39\x59\x33\x6a\x30\x5f\xe0\xea\x3e\xe0\x93\xcb\xc3\x4f\xa1\x0a\x0b\xf1\x6e\xf4\x2d\x9e\x16\x2e\x84\xb7\x09\x0a\x9d\xbe\x4e\xa7\x3f\x86\x0b\xc4\xb3\xe7\xc9\x9a\x45\x1b\x01\xb2\xce\xd9\x98\xff\x9d\x7b\xd3\x69\x84\xf9\xc3\xb9\xe7\x27\x3e\x16\x6c\x47\x4f\x9c\x02\x5b\x76\x8a\xc0\xd7\x11\x5d\x7f\x96\x59\x45\x40\x9e\xc2\x9b\x3d\x55\x84\x9a\x1c\xca\x75\x26\xd8\x9e\x65\xd2\xc9\xd4\xae\x50\x23\x3c\x03\xca\xfc\x41\xb9\x5e\xf3\xea\x98\x5a\xd2\x47\x04\x40\xbf\x8a\xa9\xe9\x2c\xba\x66\xe1\xa0\xa7\xef\x3d\xf9\xa7\xc1\xa4\x2f\x5a\xc6\xc9\x89\xe6\x82\x78\xb5\x15\x55\xb2\xd2\x90\xc7\x65\xe0\x8d\x89\x3c\x7b\x44\xf6\x58\x5c\x2e\x26\x16\x5f\xd6\x33\xba\x03\x41\xce\x3f\xa8\x2b\x2b\xd2\x77\x70\xb5\x6f\x18\x27\x97\x8e\xd7\xea\x70\xc0\xd6\x67\x7a\x43\x43\x5a\xf3\x93\x39\xf7\xb4\xec\xd9\xe5\x2d\xbd\xb7\xa5\xe3\x96\xc3\x81\x99\x27\x46\x1c\x45\x06\xcf\x31\x41\xe8\x69\x60\x97\x47\x5a\xfa\x3d\x11\xb6\x88\xa6\x52\x2d\xd6\xee\x16\x9e\x56\x25\x3e\xf2\xc7\xe7\xcd\x19\x49\x74\xc1\x61\xd2\xc8\xd3\x4e\xd4\x3a\x60\xa4\x04\x98\xb5\x47\x52\x3a\x26\x15\x69\x7d\x34\x88\x8a\xe2\xe9\x74\xdd\x9c\x04\x15\x3c\x3e\x78\x50\x91\xcc\x29\xe0\xed\x53\xf3\x03\x05\x4f\x3d\x79\x1c\x6a\x7f\x3c\x38\x0c\xf9\xaf\xbf\xf6\x04\xae\x91\x97\x83\x51\x17\xcb\x43\xf2\x37\xa1\xfd\x6d\x69\xc2\x6f\x71\x20\x92\x2f\xc8\x4a\xa2\xeb\x45\xe8\x71\xd1\xf0\x81\xcd\x60\x44\x4c\xfa\x3e\xb3\xc9\x54\x55\x73\x03\xf7\xbd\xdd\xdb\xeb\x84\x76\xa6\x76\x53\x18\xc0\xd2\xea\x60\x8e\x16\x1b\xe3\x70\x03\x55\x38\x19\x81\xf3\x76\x95\x6f\x5f\x2f\x97\x94\xb0\x9f\x57\xd6\xac\x30\x86\xc7\x71\xe0\xe5\xce\x00\x4b\xd3\xa4\x3e\xbe\xa3\x1e\x64\x1c\xf6\x1b\xb9\xf1\xe5\x61\xb8\x63\xe4\x0a\x77\x9c\x34\x9a\xf2\xcc\x9f\xfe\x61\x2f\xef\xbe\x76\xd3\xf7\xa2\x7f\xaa\xc5\x72\x73\xe4\xb3\x7b\xd5\x36\x7f\x38\x5e\x7d\x72\x86\xfb\xcf\x32\x13\x57\x63\x67\x16\xab\xce\x2f\xd9\x7c\x5c\x86\x2b\x89\xc0\xf0\xb3\x06\x1e\x2c\x54\x41\xe6\x5b\xb7\xde\xdd\x2d\x4d\x2e\x05\x0f\xa2\x7b\x32\xc0\xea\x64\xf7\x6d\xb5\xff\xf2\x0a\xc3\x39\xaa\x01\x2c\x25\x47\xda\x48\x0d\xd1\xb4\x67\x4e\x0c\x45\x7b\x50\xc2\x7c\xc8\x36\x4b\xf0\x13\x1a\x96\xa6\xf1\x6d\xab\x08\x2e\x49\xcb\x0c\x06\xef\xb4\x37\x07\x2b\xc3\x4e\xec\xfc\xa5\x06\x38\x9d\x9b\x7a\xa7\x39\xd3\x39\xfa\x69\x0d\xd5\x6c\xe7\xf1\xc9\x36\xa0\x5d\xef\x71\x91\x90\xc1\xe9\x5f\xb8\x8a\xa2\x38\x23\x64\xca\x83\xa8\x57\x80\x1b\xf9\xaa\xab\x63\xca\xf5\xb2\xd7\xd0\x2f\xc3\xcd\x27\x81\x3b\x05\x45\xd6\x74\xf0\x45\x2a\xed\xe6\xff\xc7\xd8\x5b\x85\x05\xf9\x3c\xef\xc3\xa4\x74\x77\x37\x4a\x77\x83\x20\x29\x25\xdd\x8d\x74\x77\x77\x77\xb7\x34\x02\x22\xdd\x5d\x92\x52\x82\x74\x49\x77\x4a\x97\xf0\x1e\xbc\xdf\xeb\xe3\xfe\x8e\xfc\x9f\xef\x35\x5b\xcf\xb3\x3b\x3b\x33\xf7\x7d\x4f\x86\x4f\xc7\xbe\x79\x98\xd6\xcb\x5c\x5c\x46\xa6\x3b\x76\x35\x68\x5e\x8e\x43\x89\x6d\x49\x1f\xda\x15\x14\x5a\x0d\x03\x39\x3b\x5a\xf8\x2f\xf5\xe4\x1e\xbf\x10\xf1\x79\x5c\x72\x7a\x0d\x97\x17\x95\x73\xb9\x31\x64\x97\x6d\x74\x28\x21\x72\xe7\x3f\xeb\xde\xcd\xfe\x77\xc1\xfe\xeb\xf0\x09\x12\x87\x24\x17\x01\x4b\xab\x9c\xad\x3e\x6c\x57\x1f\x27\x71\x08\x64\xce\x07\xe7\xdf\xba\x7e\xa1\x2f\xd8\x6b\x75\xd5\x7e\xc2\xcb\x0e\x92\xaf\xfe\xda\xb6\x01\xae\x42\x7c\xaa\xd2\x00\x2e\x43\x63\xc7\xd7\xf8\x93\x15\x61\xa8\x13\x72\x23\xb1\xe1\x4a\x9e\xf3\x52\xa3\x9e\xae\x5b\xb9\xe8\xf7\xd2\xb7\xc0\xff\x02\xef\x19\xe9\xf6\x60\xfb\x3c\x77\xac\x6f\xcf\x99\x57\x3a\x4c\xf5\x3a\xdb\x77\xa8\x91\x4f\x33\xf9\x34\x22\xb1\x5c\x25\xd1\x00\x80\xb4\x56\xf8\x69\xe2\xc7\xd7\x87\x8e\xfe\x34\x80\xfc\x41\x07\x91\x62\x44\x12\xa6\x7e\x89\x33\xe1\xb5\xa7\x7c\xd6\x17\xe4\xb4\x31\xba\xfe\x5f\xd4\xfd\x5f\x67\x65\x90\x38\x39\x04\x04\x0e\x10\x18\x38\xd2\xc9\x0a\x50\x85\xb3\x5a\x3d\xf5\xfd\xf2\x6a\x71\xdb\x50\xa8\x76\x39\x3b\x5e\xe9\x77\xea\x38\x96\x99\x37\x21\x3b\x9b\x1d\x48\xae\xc1\x62\x06\xfd\x90\xc2\xdc\x54\x4f\x27\x60\xf0\xf4\x98\xb5\x31\xdb\xbd\x36\x77\x9c\x56\xf1\xdd\x16\x8e\x34\xff\xdb\x48\x8b\x38\x48\x4f\x5a\x13\x67\xa2\x18\xc0\x74\x81\x0e\xfb\xc9\x3a\x9d\x2d\xbe\x62\x78\xbf\x2e\xaa\x78\xb9\xe8\x68\x32\xaf\x28\x72\x6d\x2e\x2d\x19\x7c\xe7\xe2\x69\x0d\xd2\xb5\x9b\x1d\xa3\x9a\x7d\x7f\xbc\x55\x51\xae\x84\xf3\xa0\x1d\xc3\xde\xf8\x8c\xa7\x43\x58\x5b\xba\xff\x20\xc5\xd1\xf2\x5f\x56\xe5\x5f\x9f\x4c\x90\x38\x3c\x7c\x08\x44\xc8\xdf\xe5\x7d\xf3\xcc\xc6\xae\xf8\xb3\x14\x23\x60\x33\x6c\x95\x8d\x1f\x2a\xb4\x4e\x7d\xec\x6c\xf3\xf1\x46\x33\xca\xd3\xd3\x77\x64\x8e\x0c\x60\x5c\xca\xe7\xc9\xac\x16\x3c\xcf\x51\x73\x2e\x9f\x8d\x3e\x3d\x59\x4d\xc6\xe5\x30\x9c\x0e\x18\x1c\x45\x4a\xdc\xaa\x11\xa6\xec\xc8\xfd\x0c\x22\x73\x6a\x58\x12\x86\x1a\x94\xdc\xcd\x7f\x7f\x3d\xd1\xb3\x5c\x75\xa1\xac\x5a\xbd\x71\xb2\xf0\x4f\x13\xac\xef\x4a\xf9\x40\x0b\x91\x08\x42\x05\xbd\x21\x7e\x3e\xe5\x99\x5b\x95\x63\x16\x93\xee\x71\x12\xe6\x0f\xdf\x09\xfe\x09\x5c\x9c\xa1\xde\x9a\xb5\x49\xfd\x33\x72\x0f\xe2\x38\x88\x28\x08\xee\xbb\x59\xcc\x86\x07\x36\xa5\x6f\x87\x39\x8d\xe6\x5f\xc6\x73\x9c\xa4\xb3\x6d\x4a\xbf\xdb\x8d\x2e\xcd\x05\x31\x0b\xdf\x84\x22\xfc\xef\x88\xff\x87\xd4\x55\x90\xf8\x4a\xca\x99\x50\xca\x5f\xcb\x58\x7b\x1e\x9f\x2a\x0f\xf4\xb1\x0f\x08\x34\x1f\x59\x7f\xb0\x53\x18\xbf\x52\xa6\xea\xe5\xd3\x9d\x1e\xa4\x91\x91\xdd\x17\x11\x07\x41\x47\xb1\x93\x6c\xcb\x4a\x4d\xa9\xdc\x7b\x5a\x29\xed\x0f\x28\x5b\x58\x45\x7a\x08\x83\xf4\xb1\x11\x5a\x5d\x6f\xd7\x15\xab\x9f\xde\x38\x03\x4d\x45\x5f\x9c\x6d\x5d\x7c\x93\x4e\xbf\x44\x84\x91\x78\x65\x73\x75\x42\x36\x12\xed\x58\xe3\x41\xbe\xa1\x30\xdd\xef\x40\xa1\x88\x03\xc1\x24\x9e\x53\xec\x24\xe7\x3e\x96\x2a\xc3\x41\x87\x82\x04\x41\xdf\x45\x22\x71\x0e\xae\x7f\xeb\xce\xea\xfe\xa6\x68\x3b\xc7\x91\x6c\x07\xb1\xa0\xae\x6c\x5c\xe2\x94\x4a\x76\x68\x88\xb5\xde\x81\xbf\x08\x6d\xa0\xd4\x94\x76\x49\x13\x14\x7c\x14\xaa\x03\x72\xd3\xc7\x3d\x60\xab\x81\x5f\x27\xac\xa6\x4e\x21\xf5\x41\x59\xcc\xaa\xfa\x53\x9a\xc5\x6a\xda\x38\xa9\x07\xdf\x19\x5f\xdd\xa5\xe0\x64\x5d\xb8\x32\x55\x40\x05\x80\xdd\x2f\x40\xcf\xbb\xeb\x95\x40\xe0\x2a\x73\x61\x55\xaf\xc0\xd3\xd4\xf0\x7a\xa0\xf7\xba\x79\xb4\xe2\x4f\x60\x21\xe3\x92\xb6\x95\x6c\x03\x8c\x52\x1e\xe6\x10\x50\xe2\x2f\x71\x40\x2b\x47\x23\xcc\xd7\x8d\x4d\x52\x8b\xc7\x73\xf8\x10\x45\x15\xda\xb6\x87\x5b\xce\x2e\x75\x2f\xfe\x35\x2a\xb2\x89\xa5\x25\xce\xc6\xa2\x02\x99\xdf\xee\x33\xe8\xdb\xf1\xee\x4f\xe9\x85\x8c\x05\xba\xab\x1d\x5a\x1d\x36\x52\x62\xce\x33\x0d\x60\x14\xbf\x5f\x2e\x45\x9f\x6d\x9e\x6e\x61\xf9\xdd\x28\x73\x43\xc2\x73\xcf\x6c\x48\x2b\x0e\x04\x81\xc0\xcc\x3e\x67\xcc\xdc\xa8\x19\xf0\x15\xfe\x56\x0a\x63\xba\xfb\x12\x7f\x66\x3b\x29\xf7\x70\xe4\x46\xcc\xd2\xae\x63\x30\x6e\x21\x7c\x2b\xd4\xc7\x86\x1f\xbb\xf1\x87\x0e\xe4\x28\xcd\x28\x50\x2b\x83\x9e\xa4\x64\x45\xf1\xd1\x34\x42\x95\xc6\x55\x92\x8c\xb2\x64\x94\x65\x99\x30\x4f\xda\xd9\x8c\xa5\xbb\x0e\x6b\x01\xee\x0f\x49\xf6\xdc\x3d\x61\x99\xf3\x1a\x18\xf4\x3a\x55\xbd\x18\x1f\xb4\xb3\x85\xcc\x37\x2c\x14\x71\xe3\x91\x5c\x2f\x54\x68\x0d\x15\x40\x4d\xd6\x5a\x7b\xb9\x56\xe4\x33\x93\x89\xef\x03\x0d\xdf\x80\x4a\x48\x11\x89\x03\xf1\xc4\x1c\xaf\x1c\x4d\x3c\x0a\x09\x2e\x7b\x8e\xf5\xfd\xdf\x96\x7f\xa8\xb2\x1e\xca\x6d\xec\xed\xc5\xb7\x87\xbf\x94\xa7\x2a\xad\xe5\x30\x6b\xc9\xd0\x1f\x62\x3d\x73\x37\x12\x6a\x46\xb3\x25\x80\x80\x0b\xc9\x2c\x46\xd9\x35\xa1\x31\x99\xcf\x3f\x2b\x3f\x6d\x70\x93\x37\xbc\x4f\xff\xd5\x88\xc7\x5f\x9f\xb9\xdd\xc8\xa1\x60\x39\x02\x0b\x06\x12\x20\x50\xeb\xed\x27\x57\xf2\xb3\xf6\xb5\x33\x3d\x17\xb2\x30\x3e\xf3\x60\xad\x45\x7b\xee\x57\x0c\x3d\xf2\x78\xad\x38\x4a\x6d\x25\x01\x4d\xe9\x7f\xe6\x1e\xb6\x26\x9c\x2f\xd0\x67\x63\x84\xd7\x2a\x0f\x37\xdb\x6a\x1a\x2c\xc6\xcb\xca\x23\xb1\xe6\x27\x1c\x69\xb1\xd2\x3d\x02\x4d\xdb\xc8\xf1\x2e\xa2\x68\x11\x59\xa4\x6c\xf5\x03\x63\xb6\xb5\xf4\x08\x13\xf5\xbd\xaf\xe7\xa8\x13\x45\x26\xbe\xb8\x99\x6a\x6d\xd9\x02\x5b\x95\xe5\x47\x7d\x47\xe5\xf6\x16\xea\x5e\xbf\x98\x4a\x07\x56\x38\x5f\xa4\x50\x13\x6b\x8c\xa3\x67\x9e\x85\xf4\x6d\xda\x4f\x4a\xe2\xf4\xbf\x0b\xb0\xab\x16\xf6\x72\x3d\x53\x6e\x99\xeb\x7c\x3a\xab\x5d\xb7\xd3\xe1\x1a\x12\x9e\xa5\x51\x22\xe3\xeb\x9e\xa0\x2e\x71\x2a\x8e\x95\x02\xf4\x0f\xad\xea\x1b\xb2\x2b\x98\x26\x16\x63\x23\x5a\xb3\x5e\x63\x79\xc5\x62\xce\x77\xfd\xdc\x12\x3f\x52\x8b\x9a\x8e\xdd\x9c\x34\x98\x0c\x34\x45\x1a\x70\xc5\xa7\x7f\x81\xb3\x56\x52\xee\x36\x0d\xc8\x85\x90\x2e\xb6\xe3\x83\xec\xd5\x24\x42\x8d\xad\x44\xff\xc0\x44\x34\x0f\x92\xe9\x5d\xe9\xb2\xf0\x25\x5f\x7b\x9d\xfa\x9b\x66\x09\x61\x97\xe9\x47\xed\xfd\x12\x26\xa3\xc1\xc1\x11\x31\xda\xf6\xa3\x39\x86\x0d\x04\xf9\x94\xf7\x8a\xbb\x49\xbd\x8c\x2b\x9d\x6d\xb7\x92\x3b\xe7\xf4\x6e\xbb\x9c\x11\x29\x96\xb2\x83\xe4\xbf\xef\xb0\x3c\x9c\xc3\x20\x29\x81\xb4\xd6\x22\x1b\x0f\xfd\xfc\x95\x1c\x02\xf8\xb3\xe1\x70\x08\x4b\xf8\xbd\x07\x27\xd5\xde\x1d\x14\x8f\xc3\xe3\x99\xda\xfc\x1c\x30\xc4\xdd\x37\x5f\xff\xf7\x8e\xfb\x97\x8c\x5e\x90\x78\x73\xb3\xfd\xa7\x74\x20\x57\x30\x8e\x65\x30\xf1\xb6\x17\xa6\x52\xd3\x86\xad\xb1\xe4\x92\xdf\xa2\xe7\x99\xfd\x93\x0b\xce\x92\xc1\xd5\xe1\xb6\xea\xf6\x64\xe9\xdf\xa5\x7d\x77\x59\xab\xc8\xc6\x13\x77\x9d\x33\x2f\x19\x51\x3f\x0e\xf3\x66\x47\x44\xdd\xe9\xdb\x83\x8c\x38\xb4\xee\xe7\x9b\x1e\x54\x15\xb0\xd2\x6a\xe3\x25\xb0\x8b\xcd\x28\xc0\x70\xf7\x6b\x26\xd2\xd7\x80\xd9\x03\x7c\xf9\xca\x83\x78\x17\x3a\xc6\x6e\xe9\x46\x9b\xf3\xe1\x4c\x79\x60\x6b\xb1\x77\x53\xec\x91\x83\x3f\x6e\x51\xe1\xbc\xe5\xac\xef\xcf\xc3\x31\xd2\x6e\x11\x17\x63\xfa\xfc\x5d\x0c\x73\xdb\x3e\x92\x5f\x06\x60\x0a\x76\xdd\xef\xf0\x89\x46\xca\x1b\x28\x5e\x75\xd0\xb0\x8b\xfa\xfe\x86\x4c\xa5\x26\xbc\x99\x71\x9b\x16\x0f\x52\xfe\xdd\xde\xa7\x42\x7a\xc0\xa8\x6a\xf1\xd6\x8f\xe4\x6d\x2a\x04\xa8\x33\x17\x9d\xe5\x52\x9b\x76\xca\x3a\x0e\x3a\xc3\xf6\x4e\xaa\xef\xcc\xc1\x21\xbd\x0a\x6a\xbc\x40\xe4\x0d\x6f\x06\xfd\xb2\x41\xfa\x47\x68\xa7\x57\x55\xb3\x0c\x89\x37\xe7\x98\x41\x5d\x5d\x4b\xdd\x89\x95\xfc\xad\x00\xa9\xeb\x15\x33\xe8\x14\x44\x76\x98\xed\x45\xfd\x94\xce\xdc\x1c\xcc\x3d\xa8\x9a\x0c\x43\x93\x5c\x86\x45\x4b\xd0\xf3\x27\x39\x4e\x63\xbd\xc8\x18\x12\xf9\x6b\xf4\xfe\x7c\xfd\xb3\x7e\xed\x5b\xdd\x14\x94\x17\x14\xb9\xbb\xd7\x7e\xf0\x2e\x2f\x96\x0d\x9e\xde\x2d\xf3\x88\x7c\xc5\xd0\xeb\x50\x29\x80\x51\xa6\x90\x0b\x92\x25\x85\xdd\x53\x38\x85\x9c\x06\xeb\x05\xfb\x21\x8f\xbd\x25\x12\xc7\x08\xfc\x17\x98\x35\x0e\xb6\xbc\x80\xfc\x68\x20\xab\x64\x78\x15\x7b\x03\x8f\xec\xb2\x0e\xcf\x22\x73\xf3\x4d\x62\xdf\x09\xdd\x26\xd0\x96\x96\x8c\xcf\x98\xce\x14\x26\xf6\x92\x16\x64\xff\xfe\x15\x22\x37\x39\xe8\xea\x04\x0b\xc9\x99\xf5\x9e\xa4\x8c\xe3\xbb\xf7\x3d\x9a\x80\x2a\x83\x3f\xeb\x54\xae\x6e\x14\x42\xf6\x4a\xc7\x5f\xa3\x37\xa2\x19\xc8\xc7\x63\x55\xc4\xd5\x3b\xe8\x05\xc5\xd1\x90\xdf\x98\x53\xe5\x08\x63\x14\x87\x2b\x9b\xd8\xb8\xf5\x9a\x4b\x29\x35\x40\xcf\x61\x29\x8c\x46\xa1\x71\x76\xf4\x18\xc7\x45\xa2\xcf\xe3\x93\x47\xb9\x5f\xaf\x89\x6b\xac\x5a\xf2\x48\x8f\xc5\x9b\x8c\x63\x1b\xf0\xb8\x66\x9c\xdc\xe6\x59\x6b\x58\xb8\x51\x70\x52\x3a\x9b\x33\x11\x8d\x3b\xba\x44\x9f\xe8\xa2\x08\xc2\x7a\xe2\xeb\xa1\xdf\xcb\x08\x7e\xff\xb7\xff\xc6\xcf\x3e\x76\xb6\x78\x5d\x9c\x72\x46\x07\xda\x49\x11\x26\x19\x81\xe1\xdb\x07\xb4\xa6\x1a\xcf\xd7\x66\xb1\xdc\x3e\x51\x41\xa0\x67\x6e\xbf\xde\xd8\xf4\x19\x22\x5d\x6d\x3d\x17\xb2\x95\xd9\x40\xaa\x13\x77\x1f\x75\xbe\xb0\xdd\x8a\x4c\x6c\x08\xb3\x18\xca\xa4\x1f\xa4\x09\x7c\xbf\x8a\x2b\x6c\x63\xf4\x40\x9e\x8b\x88\xca\x9e\xb3\x33\xf1\x63\xae\xd5\x38\x0d\x8b\x6a\xdf\x24\x71\x01\xc9\x30\xad\xc5\x4a\xff\x6f\xff\x3d\x7c\x0c\xc4\x79\x19\x1a\x67\x23\xec\x46\x5d\xe2\xd9\xb3\x9a\x2e\xa3\xe1\xa1\x29\x9c\x97\x7e\x68\x98\xc6\x51\xa3\x83\x0d\x40\x88\x76\x32\xf3\x4a\xcb\xb7\xe1\x4d\xc9\xfe\x9d\xa5\x8d\x60\x41\xae\xc0\x24\xbf\xc9\x0e\x9c\xf2\x03\x26\x86\xbb\x95\x13\xcf\xba\x1f\xc8\xa8\xcd\x70\xe1\x53\x01\xfb\xc7\x60\xd9\xf0\x70\x3b\x62\xfd\xed\x3c\x34\x6e\xa1\x7d\x4e\xd3\x88\x6e\x38\x4f\x27\x4a\xf1\x0d\x6c\x19\xc8\x28\x9e\x46\xb9\x47\x16\xe0\x03\x63\xa1\xde\xf8\xb6\x93\xc9\x93\xf8\x68\x24\xf1\x2d\x56\x57\x0e\xb4\xd5\xfc\x65\xd5\x85\xb0\xa0\x32\xc0\xaa\x5b\x52\x34\x71\xbe\x87\xab\xdb\xa2\xe9\x1e\x98\x47\x4d\xb6\xc0\xbc\x71\x9d\xba\x37\x38\x92\x80\x5d\x1d\x94\x74\xb0\x3b\xfd\x0a\xc8\x94\x7f\xeb\x19\x73\xdd\xc1\xca\x6b\x24\x15\xe5\xfa\x8d\x4d\x9e\xb4\x7b\x87\x98\x95\x10\xde\x3e\x5e\x3a\x80\x23\xcd\x27\x5d\x43\x48\x08\x7a\xfb\xac\x96\x31\x23\x22\xc6\xd5\xc3\x71\x5b\x76\x76\x5a\xb4\x0e\x9d\xf1\x04\x11\x27\x0a\x4a\x68\x92\x1e\x1f\xbd\x3a\x97\x0b\xdb\x48\xff\x4e\xaa\x42\x76\x8a\xd0\x9e\x92\x99\xb4\x4b\xf9\x3c\x4b\x8f\x57\xb7\xae\x83\xae\x51\x38\x71\xc5\x6d\xad\x68\x44\x23\x29\x8a\x6f\x0e\x64\x62\x50\x1c\xcd\x5c\xb9\xb9\x48\x23\xb2\xca\xc8\x7b\x1e\x11\x40\x95\x67\x79\xd1\xb5\x5f\xdb\xd1\x6d\xb5\xc6\x33\xc9\x9b\x5d\xee\x69\x07\x07\xa0\x9e\xf2\x5e\x8c\x31\x9f\x8e\xcf\xdd\x09\xe1\x1b\x0b\x11\x03\x5c\xb5\x9d\xa7\x41\x5f\x82\xc6\xa3\x78\x4c\x8f\xaf\xec\x9b\xd1\x61\x20\x2e\x10\xec\x21\x41\xca\x49\x74\x0e\x1d\x4b\xc9\xc1\x64\xe4\x9f\x05\x7b\x17\x08\xad\xc2\x9a\x06\x3d\x5f\x14\x7f\x1a\xab\x17\x05\xd0\x77\xed\x42\xe5\x36\xa3\x69\x6b\x8b\xa6\x3a\xcb\xf7\x98\x3c\xa6\x92\x2c\x22\xb5\x43\x4a\xf0\x6e\x93\xf1\x10\x58\x5a\x9e\x1c\x23\xc8\x01\xeb\x8f\xde\x10\x39\x08\x13\x75\x81\x7e\x1d\x9a\x52\x18\xb3\xff\xd3\x97\xf2\x97\xba\x34\x7f\xfc\xdc\x91\x0f\xfc\x46\x87\x27\xac\x2f\xb0\xff\x14\xba\xd3\xf7\xcd\x18\xa5\xa6\xb3\x4f\xad\x3d\x6b\x3f\x04\xbf\xae\x56\xa5\x36\xc4\xe4\xc8\x34\x29\xb9\xab\x9e\xac\x72\xfc\xdc\xfe\xdb\x92\x17\x2b\x85\x15\x36\x9f\xd0\x89\xab\x09\x37\x58\x22\x82\xa8\xb3\x13\xf7\x90\x1b\x3a\x4d\x3f\xb5\x9d\xef\x64\x11\xf1\xa8\x0d\x04\xd3\xc3\xf7\xbd\x55\x59\x3c\x88\xf0\xac\xf9\xb4\xfa\x2b\xba\x08\x11\xca\x59\x80\x34\x05\x9a\x3e\x0e\x5d\x17\x36\x81\x48\x77\x6d\x02\x48\xe5\xb0\x6f\x2f\xeb\x76\x5a\x8a\xa9\x2c\x3c\xed\xab\x57\xa8\xa7\x76\x43\xb3\x04\x58\x8e\xf7\x6f\x6c\x50\xbb\xf5\x2f\xa7\xa1\x0f\x80\xa0\x08\xb9\xca\xad\xc7\x32\xfd\x5f\x4e\xc3\x32\xc5\x21\xa5\xe4\xa4\x43\xfd\x6a\xea\x29\xcf\xb4\xec\xf4\x7b\x7a\x16\x3d\xb7\xae\xd6\x80\x62\x8d\xcd\x1a\x95\xf6\xe7\xf2\x75\x68\x67\x7a\xec\xa3\xbe\xe8\xf1\x11\x69\x14\x7b\xe7\xac\xd2\xd5\x88\x99\xf2\xa2\x86\xe8\x31\x61\x30\xfb\x8e\xb2\xc4\x71\xc1\x89\x2c\xa6\xb7\x14\xba\x30\x32\x3d\x51\xd0\x94\x29\x1a\xb9\x1f\x27\x72\x48\xfb\xe0\xde\x19\x9f\xd2\x5f\x93\x07\xee\xa9\xe8\x67\x1a\xd6\xf1\x64\x38\xc7\x1b\x1d\x26\xde\x9b\x00\xf5\x90\x97\xbe\xc2\xe6\xec\x47\x3f\x8e\xaf\xda\x49\x36\x0f\x8b\xbf\xc6\x67\x21\xff\xdf\x3e\xbe\x20\x51\x11\x98\xa0\xbf\x7b\x45\xf9\xaa\x00\xc9\x97\x1c\x33\x18\x26\x8a\x57\x2d\x48\x02\x96\xc9\x44\xa1\xaa\xf4\x0f\xd6\x32\x64\xc2\x2b\x12\xff\x69\x19\x18\x20\x88\x21\x58\xbf\xe0\xe9\x4c\x14\x9a\xed\x88\xcc\x8a\x8f\x25\xc4\xd7\xcc\x95\xe3\x5c\xe0\x1f\x2b\x68\x58\x95\xca\x6a\x6b\x23\xcd\x0e\x70\x27\x75\x9b\x07\xda\xf2\x47\xd3\x64\x59\xd4\xf8\x0d\x27\x70\x2b\xd1\x68\x66\x04\xd3\x2c\xbe\x75\x4b\x2c\x22\x6b\x4e\x81\xaa\xb5\x2b\x07\x56\x80\x16\x71\xca\xd8\xa7\xc1\xd7\xfb\xf2\xa3\xe6\xe4\xba\x2a\x69\x64\x90\x1a\xf2\xc0\xb5\xcc\xc0\xf0\x1b\x01\x4e\x2b\xb5\x1b\xa9\xf6\xff\x5e\x7a\xff\xfc\xa4\xc5\x83\xd0\xc9\xc1\xfa\xaa\x5f\x1c\xe3\xce\x08\x2a\xf0\x37\x69\x39\x31\x54\x56\x07\xae\x9b\x75\x1e\xc2\x1d\x4b\xf6\x0c\x81\x5a\xcc\xfa\xcf\x5c\xf1\x2e\xe0\x21\x48\xfc\x66\x6f\x9d\x28\x3a\x68\x87\x85\x46\x74\xaa\x4c\xe7\x60\x7b\x24\x38\xf6\x65\xa4\xab\x96\xbb\x6b\x4a\x5d\xb2\x8c\xbe\xb6\x11\x68\xca\xb4\xe0\xa0\x02\xd9\x46\x89\x32\x89\x50\x5e\x5e\x8e\x06\x99\x25\x79\xed\xe6\xc6\xd3\x38\xb9\xc7\x62\xc6\x99\x76\xdb\x8d\x7d\x0d\x34\xfd\xd4\x6f\xa7\xee\x21\x84\xf2\xda\x75\x9f\xd6\xd8\xf8\x05\xbf\xcb\xaa\x2f\xd5\x74\xba\x70\x90\x02\xda\x88\x81\x68\xb8\x70\xec\xe9\xbf\xa9\xfd\x6b\x67\x83\xc4\x61\x44\xd1\xff\xcf\xd4\x96\x98\x75\x0b\xf1\x59\xc4\x14\x83\x38\x75\xee\xf2\x7a\xe1\x50\x13\xba\xb2\x53\x95\x74\x09\x06\x18\xd3\x15\xc8\xd7\xd8\x64\x80\x41\x88\xfb\x5e\x3f\xd0\xb1\x10\x46\xb6\xb1\x13\x92\xb7\x7b\xa6\x06\x2d\x34\x5a\x26\xd0\x69\x37\xec\x40\xd6\x0a\x94\xd6\x34\x72\x7e\x03\x9a\xee\x8a\x7d\xe9\x49\x50\x2e\x3b\x78\xa0\xbc\xe5\x24\xd1\x7c\x67\x73\x81\x99\x90\x47\x5b\x9f\x73\xf8\xde\xba\xea\x21\xf1\xe3\x5b\x50\x4b\xee\x4f\xa0\x16\x4b\x51\x58\x16\x11\x52\xc4\x22\xcf\x7a\x07\x41\x4d\x2e\xb6\x82\x1c\xfb\x4f\x58\xb6\x5b\xb5\x5b\xd6\x78\xeb\xf1\xb5\x9b\x8a\xff\x65\xb7\xff\x25\x2a\x1c\x24\xfe\x38\xd2\xfd\x92\x41\xf8\xf7\x7b\x84\xf7\xa8\x10\x5e\xaa\x91\xac\xa7\xb9\x93\xda\x3b\x0a\xde\xe3\xf2\xd8\xdd\xa9\x3b\xa7\xca\xc9\x90\x10\x99\xf9\x76\x2b\x1a\x03\xd4\xc9\x63\x47\x8e\x8b\x2c\x94\xdb\xf4\xa3\x95\xba\x23\xa2\x43\x3a\x70\xb3\xe3\x0b\x38\xe7\xa7\x22\x87\x6c\x62\xb4\xc4\x0e\xd7\x54\x00\x3e\x56\xd1\x5a\x0a\x8b\xb3\xbd\xb2\xd1\x83\x62\x5a\x25\x34\x7b\xef\x46\x02\x3c\x0f\x91\x0c\xa5\xbf\xa0\x87\xd1\x97\x47\xf2\x57\x2b\x9f\x80\xa3\x0b\x95\x64\x88\xe5\x18\x4a\x6f\x82\xf4\x73\xaf\xeb\xe5\x43\x91\x7c\xcc\xc3\x96\x9b\xad\x9d\xc0\x90\xb3\xe0\x6f\x7c\x92\x8c\x64\x00\xd4\xa9\x8d\xda\x77\x1d\x6f\xee\x59\x2a\x61\xbf\x3d\x24\x39\xac\x9e\xe8\xfb\xe3\x63\xb3\x0a\x76\x78\x9c\x9b\xc2\x5e\xb8\x1e\x22\x13\x90\x88\xb1\x2f\xcc\x91\xaf\x0f\x7f\x7d\xc9\xdc\xe0\x7d\x4f\xc2\xbe\x1b\x30\xa7\xc0\x57\x23\x62\x45\x3d\x0e\x8b\x6d\xfc\xd1\xf9\xad\x4f\x3a\x70\xca\x40\xd2\x25\xc4\xdb\xd5\xf1\xa1\xa9\x26\xcf\x95\x54\xf2\xc1\xfc\xaa\x15\x91\xdb\x1c\x8e\x7d\xfb\xa2\xc5\xd1\xa4\x2f\x46\xca\x07\xbc\x49\x18\x89\x94\xb3\x1d\x2e\x92\x8c\x8c\x29\x6a\x06\x17\x7a\x15\x20\x66\xf3\x76\x0c\xcf\x3f\x5f\x62\xb8\xbe\x9f\xbd\x61\xc1\x0c\x05\x49\xcf\x10\x9d\xea\xae\xc7\xdc\xd8\xdd\x9e\xe2\x14\x78\xb8\xe5\x3a\xa1\x9c\x63\x66\xe4\x60\x05\xc9\xe5\x2c\x4a\x1d\x96\x4d\x07\xda\xd0\xff\x1a\x95\x37\x6f\x64\x2c\xd1\xe9\x1f\x7d\xa8\x49\xe5\xe8\xd0\x77\x79\x23\x47\xc7\x42\xb1\x6a\xaa\xe4\x63\xe8\x12\x20\x77\x7b\xc0\x8d\x02\xca\x26\x90\x89\x22\x8b\x36\x8b\x61\x44\x77\x6b\x8c\x35\x90\x71\x32\xfb\x23\x67\xc6\x25\xd1\xeb\x68\x1b\x67\x34\xfd\xf0\x38\x23\x18\xfb\x6b\x34\x0b\xc5\x29\x00\x8d\x3d\xf9\x55\x0a\x8c\x8d\xbb\x2e\xe9\x8c\xc5\xf1\x90\x4b\x87\x89\x7f\x9d\xd1\xf2\xfc\x5c\xdf\x67\xa7\x4f\x5e\x60\x8d\x13\xd3\xec\xd0\x65\xed\x0c\x2b\x84\x54\xa2\xd4\xaf\xb9\x85\x44\x3a\xe7\x78\xff\x32\xfe\x75\x6f\x0c\x7f\x92\xc7\xfc\x33\x33\x50\xfa\x34\x08\x51\xf4\x56\xef\xa9\x61\x68\x3e\x98\x16\xd5\x12\x2b\xd9\x45\xa1\x7b\x2d\x93\x1f\xcb\x40\x8c\xca\xfd\xa3\x7f\xfa\xfc\xd1\x1d\xb0\xa7\x32\x43\x1b\x62\x99\x8c\x8d\xd3\x56\xf9\xc1\xa8\x2a\xeb\x3f\x28\xdf\x7e\xff\x10\x17\x2d\x23\x41\xf3\x5e\x26\x3c\x52\x55\x1c\x5f\xe2\xef\x50\x95\x36\x27\x85\xc5\xac\x23\x3a\x4d\x98\x28\x68\x4b\x37\xe1\xb7\x63\xf7\xf8\x89\x63\x16\x72\xf8\x25\x5c\xdf\xf0\xee\x12\x18\x02\x61\x52\x7f\xc6\xb4\xf3\xb8\x91\x64\x84\xc2\xdd\x93\xca\x83\xb3\xe5\xdd\x2a\x94\xeb\x57\x23\x9c\xb9\xc2\x3c\x97\x91\x4f\x6e\x2f\xef\xb2\x81\x95\xb2\xdf\x8c\x10\x96\xd0\xd9\xee\x3c\xf8\xfa\xf2\xf4\x5a\xf6\x60\x4f\x8f\xe2\x03\x72\xa6\x4d\x3d\x5b\xd5\x53\x11\x31\xbc\xd5\x13\x50\xe2\x14\x7a\xe3\x21\x1c\x10\xb4\xed\x1c\xc0\x3e\x33\x2b\x55\x4e\x25\x97\x28\xd7\x04\xd5\xb6\xef\x8e\x27\x98\xe1\x6e\xe5\x9b\xc2\x45\x0e\xbe\x08\x7b\x90\x9f\xe0\x68\x1b\x4e\x9d\x76\xe1\x19\x26\x37\x11\x8b\x13\x74\x0d\x88\xde\xa6\x25\x29\x97\x77\xdb\xee\xc6\x1c\xaa\x81\x97\xcc\x52\xee\x17\x29\xca\x9d\xd0\xa7\x08\xb8\x4f\xb6\x0b\xb4\x07\x94\x18\x10\xab\x0b\x16\x90\x65\xd2\x13\x39\xbf\x62\xaf\x31\x4a\x85\x81\x95\xc2\x2b\x97\x73\xbe\x8f\x48\x82\x3f\x0e\x23\x22\xbe\x31\x44\xc9\x87\xd8\x8a\x73\xc1\x38\xba\x7a\x55\x3f\xfc\x0a\xd1\xc0\x82\x00\xa0\x52\x5b\x91\x35\x6d\x87\xc2\x99\xcd\x22\xd6\x4d\xbb\x78\xac\xde\x10\xd4\x78\xfd\xa7\xed\x95\x88\x84\xda\xc4\x2b\x93\xdc\x7c\x1f\x2e\xc0\xc3\x7e\xca\xf2\xad\x34\x13\xe0\xf0\xdc\x59\x66\x2d\xfa\x33\x5e\xc3\x95\x1b\x2c\x6a\xa2\x9b\xd0\xe2\x70\x21\xfa\x4e\x20\xef\x7a\x11\x44\x11\x94\xc9\x27\x10\xf4\xb8\xd0\xb6\x34\x92\x47\xb5\x64\x4e\x3b\x58\xcc\xb1\xd4\xf5\x96\x36\x8d\x31\x8c\x65\x49\xce\x53\x53\x95\x18\x00\x4d\xdf\xa3\xc9\xb6\xf5\xd2\x31\xbf\xc9\xce\xb9\x96\x72\xe7\x2f\x32\x35\x41\x3d\x84\x12\xa7\x4a\x7a\xde\x44\x8d\xbe\x6c\x4e\x62\x79\x0f\xde\x9c\x5d\x8d\xf7\x3b\xd9\xad\x8b\x4a\x29\x33\xf5\x07\x23\xbb\x70\x13\x06\xdf\x87\xa6\x7e\xe8\x28\xdc\x8c\xac\x7d\x90\xe3\x8f\xf2\x43\xfa\x6b\x55\xf7\x99\x82\xc8\x2a\x20\x0b\x0f\xa9\xb0\x3b\xf1\x0d\x9d\xb9\x3b\x0b\xa1\xfc\xf6\x46\x07\x66\x74\xbe\x15\x7c\x47\x55\x97\x82\x28\x30\x00\x8a\x86\x4a\x7c\x68\x01\x9e\xc6\x29\x21\x69\x7e\x8c\xd1\xf3\xc3\xdf\x2f\x29\x56\xfb\x57\x6f\x54\x18\x02\x16\x6e\x7f\xfd\x60\x00\x11\x4d\xb4\x10\x86\xd8\xdd\xb8\x68\x65\x6f\xde\x7f\xbd\x51\x26\x74\xdc\x67\x17\xf5\x6b\xcb\xc7\x6f\xb5\xb2\xca\xe8\x7f\xcf\x37\x7f\x0d\x72\x71\xa8\xfe\x6e\x10\xd9\xf1\x61\x94\xe9\xba\xe0\xa5\x94\xf5\xb9\x0b\xd5\xb1\x23\x62\xe8\xaf\xe7\xb8\x6b\x2c\x8d\x47\x86\x9a\x98\x7e\x00\x63\xea\xb7\x43\xfa\x95\x16\x2f\xb1\x3f\xba\x4d\x70\x3e\xb4\x68\xde\x40\x16\x8e\xb5\x0a\xfd\xf8\xf6\xc6\xf7\xd6\xf4\x8b\x96\x04\x39\x18\xbe\x12\x7f\x6e\xad\x84\x3d\x74\x24\x26\x7e\x50\x94\x67\x8d\x16\x92\x7d\x67\x8a\xa9\x9a\x08\x1d\x68\x39\xb1\x4c\xd0\xe8\x2f\x55\x0e\xe2\xcf\x83\x0c\x3c\x52\x75\xed\x39\x93\xd2\x67\xf7\x8a\xb4\x19\x02\xfc\x88\x5f\xf5\xd8\xc5\xa2\x25\x63\x2c\x6e\xdb\x11\xfc\xe9\x3a\xe4\x05\xe3\x17\x57\x9c\x07\x7c\x6d\x1f\xb3\x91\xaa\xe7\x6d\x6d\xf6\x5e\xa7\xf6\xa2\xcf\x14\xde\x6f\xda\x9d\xe8\xcc\x30\x0f\xc4\xf4\xff\x02\x4b\x77\xd5\x35\x09\x31\x13\x9b\x6a\x8e\x63\x53\x9c\xba\xbb\x8d\x0a\x4e\x88\x19\x12\x90\x79\xe6\x86\x30\x58\x7d\x91\x0e\xf1\x05\x4d\x3d\x00\x32\x94\x45\x9c\xd9\xe3\x24\x0b\x38\xba\x5b\x08\xad\x1c\x45\x5f\xb5\x6b\xe8\x6e\xed\x10\x45\x2b\x56\x03\x67\x03\xa9\x15\x98\x19\x6c\xc0\xa8\x16\x59\xf5\xef\x4a\xf3\x30\x1f\xe9\xd8\xa0\x36\x9d\x40\xb4\x53\xb9\xfb\xfc\x04\x6c\x04\x0d\xee\xf4\x5a\xac\x61\x36\xed\xf1\x4f\x00\x53\x41\xa8\x63\x7b\x41\x56\xc8\x8f\xa6\x55\x91\x31\x19\x82\x6b\x89\x66\x73\xed\xe0\x61\x5d\x35\xda\x38\x2a\x3a\x1d\xa2\x97\x33\x23\xe0\x0f\x08\xe1\x62\x1b\x75\x99\x11\x7e\x53\x3a\xe4\x54\xd9\x34\xd0\x85\x5c\xa9\x15\x7f\x06\x35\x43\xf5\x3d\x0c\x46\x7a\x36\xee\x2c\xd9\x17\x80\x47\xb8\x5a\x48\xc4\x05\x8e\x1e\x5f\x28\x7c\x20\xf6\xde\x54\xf3\x5b\x3d\x5c\xbc\x75\xa4\x3a\xcb\xe4\x26\x1b\x10\x2c\xf1\xae\x0b\x07\xae\x1f\x4e\x9c\xe2\x7b\x95\xfa\x67\x43\x3d\xb5\xc0\x35\xe8\x45\xe9\x20\xfd\xc1\xec\x8f\x90\x4a\x23\xad\xf8\xdb\xa1\xb3\xd5\xd9\xa5\xff\xb1\x87\xfd\xeb\x43\x0d\x12\xcf\x80\xa0\x84\x00\xd8\xc3\xb0\x8c\xf1\x71\x07\xd1\x30\x54\x37\x89\xc4\xa2\x57\x6b\x36\x22\x8a\xb3\x3f\x1e\xe1\x79\xc5\x22\x6a\x06\xee\x25\x20\xf7\x5d\x9b\x03\xbb\x95\x6f\xb7\x1b\xcb\xe3\x17\xf1\xb8\x86\xf8\xe5\xc0\x37\x89\x57\x7d\x5e\xe0\xe6\x7e\xb7\xd9\xc4\xa6\x15\x8d\x3f\x55\xdb\x78\x0a\x54\xe4\xe1\x23\xcb\x75\x9d\x4c\xa1\xca\x63\x0b\xdf\xc2\x45\x0a\x2d\xd5\xc5\x0a\x6e\xac\xe2\x63\x84\xa4\x70\x98\xf6\x80\x7e\x82\xa3\x7d\x0f\x34\xb5\xc5\xf8\xf6\x72\x1c\xfb\xc8\xfe\xde\x88\xd2\x7c\x63\x69\x77\xd2\x50\xec\x96\x70\xda\xf7\x6a\x73\x7a\xa1\x1c\xbf\xbf\x6f\x4b\x15\x04\xde\xd0\x4a\x70\x5d\x20\x56\x31\xd0\x38\xd2\x52\xf2\x55\x28\x4f\x92\x52\x0c\x35\x48\x31\xf4\xbb\x1f\x26\x3a\x09\x2f\xd9\x92\x77\xdc\xe4\x63\xff\x6f\x52\xb3\xfe\x3e\x44\x0a\xac\x97\x27\xf2\x24\x6e\x61\x9c\xe6\x56\xfb\x89\xec\x35\xaa\x47\xde\xaf\x6c\xf5\xe0\xc6\x2f\xa4\x35\x34\x83\xc4\x5f\x96\xef\xdd\x41\x09\xaf\x85\xbb\xc6\x04\x24\x53\x2a\xf8\x04\xb4\x2f\x9c\xdd\x02\xb8\x4d\xe5\xf8\x6b\x5e\xa5\xed\x36\x32\x89\x9a\xde\x1f\xc3\x37\x05\x40\x7a\x07\x22\x97\xf2\x02\x87\x3f\xce\xdf\x57\xeb\xcc\x0c\x82\x3d\x64\x15\xc3\xba\x11\xb4\x6b\x76\x54\x57\x4c\x15\xd6\xfa\x59\x86\x29\x01\xf7\x82\xfe\x65\x6c\x06\x01\xbe\x2b\xa6\x89\x16\x29\x59\xef\xc8\x57\x71\xf1\xad\x9b\x51\x98\x14\xcf\x0a\x0c\xbe\xe1\x44\x51\xac\x36\x50\x70\xec\xf7\x11\x22\xb9\xb7\xee\xe5\x43\x68\x5f\x48\xce\x27\x8c\x1e\x92\x8d\xe3\x20\x9f\xdd\x27\x5c\xb9\xb9\xa8\x5b\xf7\x35\xb7\xdf\x83\x40\xf7\x8a\xdf\xfa\x84\x1b\x8d\xe7\xbd\x74\xfb\x65\x69\xff\x38\x1f\x1f\x73\xa0\xb6\x8f\xc3\xee\x40\x64\x8b\xd6\x31\x17\xa3\x0a\x6f\x17\x00\x08\x7b\x31\xc6\xc4\x75\xee\xfc\x84\x45\xa3\xa0\xb8\xc3\x16\x97\xdb\x5c\xbf\x0f\xb4\x13\x0c\x24\x5e\xb7\xfd\x32\xef\x92\x23\xa7\x00\x46\xae\x89\xa5\xdd\x08\x34\x9f\x0f\xc4\x2b\x77\xf3\x9d\xf5\xf3\xe8\xcb\x1d\x71\x92\x06\x17\x08\x28\x37\x7e\x50\x6f\xc2\x13\xb3\x3c\xd6\xc0\xa3\x50\x9c\xf9\x1a\xdb\xad\xfa\x3d\xc4\x2c\xc4\xb3\xad\xb4\x30\x8f\xe6\x5c\xf5\x10\x22\x2f\x55\xa8\xa0\x08\xc7\x9e\x83\xf5\x90\xb0\xc5\xdf\xbf\x0b\x0f\xdf\x9f\x8e\xae\x5b\x8b\x9d\xab\x8c\x50\x49\x73\xfe\x2d\x02\x0d\x67\x35\x8d\xbc\x3c\xb3\xa5\xdf\x69\xe8\x31\xfc\x07\xe6\xe4\xbf\xfd\x0b\x1c\x9a\x71\x63\xaa\xcc\x05\x56\x2d\x2e\x9f\xb2\xc8\x9a\x9e\x4c\xf5\x7c\x28\x3f\xbb\x25\xf5\x61\x7f\xc4\x63\x87\xab\x1f\x05\x85\x2e\x9c\x9c\x2c\x6e\xa4\xa8\xa2\xcc\xd4\xf4\x72\x76\x5b\x46\xe8\x2e\xe9\x5d\x6e\x8c\x07\x0b\xc3\x3c\xb1\x6a\x38\xa8\x1a\x8f\x84\x3b\x01\xd6\x02\x5a\x7b\xdf\x8c\xfb\xc1\xb2\xe1\xd2\x46\x73\x4c\xe7\x6a\xdf\xb8\x49\x34\x71\x31\x5f\xad\x5f\xa4\x3a\xc7\xab\x1a\xdf\xd6\x00\x6e\x8f\xf2\x31\xd5\x9a\x04\xe4\x20\x41\x4c\x85\xba\x68\x0c\xaa\x2f\xe1\xfe\x11\x5d\x7a\x5c\xc3\x2c\x0e\xe4\x8c\xa1\x68\x37\x84\x24\x8f\x60\xb5\x39\xd4\xbb\xd4\xe0\xc5\xd9\xe9\x06\x34\xd5\x5c\x1d\x33\xc8\x33\x73\x9e\xa5\x79\x4b\xe2\x47\x74\x48\x25\x71\xe4\xaa\x6f\x62\x80\xd2\x58\x9c\xda\xc0\x2c\x86\xa2\x15\x29\x7b\x7f\x30\x71\xa8\xec\x4e\x00\x87\x19\xd5\x63\x9e\x74\x0b\xe2\xdb\x3e\xd5\x06\x17\xfd\x01\x60\x9f\x4e\x49\x35\x1b\x2a\x18\x54\x0b\xbf\xa9\x91\x24\x1b\x3c\xda\xfa\xc7\xd2\x5a\x5a\x41\x15\x9d\x8f\x8b\x3b\x45\xc6\xfb\xf8\x58\x65\x01\xdd\x1b\x72\x87\x3f\xe2\x9d\xd9\x13\x4c\x4b\xf6\xa9\xea\xeb\x29\x58\x85\xe3\x07\x2a\xfd\x29\x4f\x0b\x17\xeb\x45\xf9\x50\x58\x72\x20\x04\xd4\xb8\x05\x06\xd8\xad\x40\x50\x5c\xf1\x42\x47\xed\x88\xa2\xdf\x99\xc9\x78\x67\xef\x6e\xcd\xe8\x9d\x11\x74\x55\x73\xc3\x24\x88\x02\xba\x3c\xbd\x69\x91\xbd\xef\x6d\xe6\x1c\x23\x31\xd6\xe4\x37\xfc\x35\xec\xd5\xcb\xad\x8b\xcf\x03\xd8\x5d\x6c\x9a\x3b\x3b\xcf\x07\x17\x88\x80\xee\xd9\x8f\x18\x9f\x07\xbc\x17\x19\x2b\x7a\x28\xc8\x62\x2d\xe4\x72\x1b\xe4\x12\xe3\x7b\x30\x1c\x11\x1b\xf3\x42\x3f\x8f\x97\xbf\x01\xc4\xf2\x9b\x07\x2a\xda\xb1\x33\x11\xa8\xfb\x25\xf5\x14\x10\x6b\x1e\xb8\xa4\xc3\x26\xe7\xa9\xe8\xba\x46\xc3\xd2\x0a\x8b\x63\xfd\x67\x01\xba\x9a\x9f\xfa\x1a\xaf\x97\x67\xd9\x75\x02\x14\x0a\xcb\x7b\x57\x18\x6b\x6b\x14\xc5\xf7\xa8\x1a\xde\x4e\x2d\x1c\xb1\x8e\x9a\x28\x84\x80\xca\x2d\xae\x96\x6b\xfc\xec\x96\x95\xe2\x35\xb1\xaf\x9b\x56\x6a\xdd\x69\x55\x74\x63\x68\xa0\x61\x4a\x02\x02\x6b\x47\x86\x5f\x89\x51\xd9\x03\xdd\x73\x99\x1e\xab\x69\xeb\x3f\xd8\x72\x17\x64\xeb\x9e\x7b\x9b\xd6\x46\x73\xd4\xc8\x7e\x27\xdc\xe7\x28\x0d\xa7\xa6\x6e\xb8\x82\x05\x0e\x15\x67\xd6\x69\xf8\xc8\x0f\xa2\x0e\x4c\x03\x26\xe6\x85\x9b\x98\x16\xfb\x2f\x8e\xfb\x2f\x4d\x11\x6c\x7b\xba\x24\xa1\x3d\xd6\x6a\xa0\x6f\x83\x8d\xbb\x86\x98\xf8\xc1\x2a\x23\xff\xcf\x9f\xdb\xed\x48\x03\x25\x7e\x9e\xf9\x86\x4c\xe8\x4d\xb6\x76\x1f\xac\x99\xb1\x44\x18\x40\xe5\x84\x11\xb6\x4f\x32\x05\x35\x67\xe0\xb2\xe4\xeb\x58\x57\x1e\x6e\x5b\x9b\x98\xf2\x70\x49\x38\xae\xe8\xc1\x49\x01\xfe\xa8\x90\x19\x50\x0c\x36\xd5\xb2\x02\x65\x90\x01\x77\xeb\x44\x69\x73\x4d\x91\xc2\x6d\xde\x8a\xd2\x47\xef\x34\x56\x76\xcf\x49\xcb\x87\xba\x31\x0e\x4b\x0a\x4c\xff\x95\xb8\x81\x5a\xe0\x02\x8b\x8e\x27\xe2\x8f\x05\x49\xdf\x52\xc3\x00\x3a\x16\x3f\x71\x8c\x5c\xfa\xeb\x57\x90\xf5\x6f\xce\x77\x81\xd7\xf3\x77\x6f\xee\xcc\xdc\xd0\x19\x5b\x8b\xa2\x47\x9f\x3d\xa7\x8a\x5a\xbf\x61\x85\x06\xa4\xa5\x26\xa4\xc6\x59\x32\xad\x45\xfa\xa2\x26\x10\x4b\xa9\x20\x2f\x03\x11\x5a\xd9\x88\x48\x10\xce\xcb\xaf\x35\x23\xec\xae\xce\x3d\x80\xf0\xf8\xea\xb5\x8c\x31\x29\x1a\x94\xc6\x38\x10\x3c\x55\xcb\x55\xeb\x12\xbf\xa7\x57\x29\xab\xcf\x36\xc3\xed\xd8\xb2\x39\xce\x1c\x9c\x67\x58\xcf\x0c\xfd\xc2\x97\xb3\x31\x6b\x91\x03\xb0\x26\xe6\xe8\x4e\xfd\x40\x42\xf9\xfd\x5d\xe7\x79\xcd\x34\x7b\x70\xcc\x0d\x39\xd3\x69\xe4\x83\x63\xdc\x3e\xff\x27\x9f\x05\xdf\xf3\x14\x29\x50\xf0\xf3\x86\xb5\xe2\x25\xdc\x29\xfc\x69\x1f\xea\x0f\xa7\x3b\xd2\x31\x59\x05\xe5\x48\x45\x61\xbc\xba\x9b\x56\x83\xcd\xaa\x4f\x36\x40\xb1\xf5\xc0\x6a\x3f\x48\xde\xff\x4c\x8b\x81\x65\x70\x9a\x6e\x4c\x28\x31\xca\xf3\x47\xe3\x6a\x6a\x30\x95\x9c\x32\x6d\x37\x94\xd3\xef\x17\x60\xd4\x43\x44\x7e\x06\x13\xd1\x38\xbc\xc8\x83\xf4\x03\xec\x58\x47\x86\x61\x7e\xe6\xf2\xb2\x88\x7b\xf7\x5c\x31\x14\x73\x68\xc6\x06\x50\x34\xf9\xa9\x50\x6e\xd6\x3a\xa7\xb3\x01\x39\x12\x76\x51\x38\x76\xcc\x6d\x24\x45\x78\x0c\x2e\x25\x2c\x09\xc3\xf9\xd4\xcd\x24\x15\xbf\x0b\x58\x28\xb4\xd6\x37\x5c\x5f\x4a\xe6\xdb\x36\xa8\x4f\x8e\xab\xb0\x2a\x38\x75\x4a\x63\xad\x23\xdb\x38\x2d\xd2\x38\x47\x43\x22\xcf\x56\x50\xfe\x1a\x25\x70\x1b\x9c\x9e\x69\x15\x2c\xd1\x80\xf8\x46\x83\x1b\x8d\xd2\x10\x6f\xd2\x38\x49\xcc\xd9\x47\x98\x34\xf0\xc1\xf1\xc9\x22\x03\xf8\xf6\x0f\xa0\x9e\x89\x29\x33\x48\x4e\x26\xfc\x49\xe9\xb4\x66\x55\x4f\x6d\x02\xcd\x09\xef\x15\xff\xe8\x44\x73\x7d\x18\xcd\x0d\x17\x7c\x07\x4a\xfc\xc1\x8e\xbc\xaa\x9c\x2e\x86\xfa\x81\xc8\xf7\x1d\x59\x3b\x6c\xef\x49\xc8\xb9\xaf\xfb\xf0\xde\x95\xf8\xf5\xd5\x9d\xd0\xb2\x29\xc0\x9b\xa7\x77\x5f\x9c\x41\x66\xcb\x75\xbf\x98\x80\xd1\x3f\xf4\xc8\x41\x6b\xa4\xf7\x9c\xd0\x50\x50\x31\xd9\xad\x4b\x5b\x60\xac\x56\x07\xa8\x19\xa4\x48\x57\xdc\xa7\xba\x9a\x5d\xb8\xb1\x43\xcc\xb0\x13\x13\xb6\x53\xa3\x7c\xac\x88\xe3\x6a\x24\x2a\x4e\x28\x3b\x31\x1e\xe4\xc4\x04\xba\x27\x28\x47\xb9\xa2\x21\xfd\xfd\x4a\xf6\xbb\x19\xb7\x80\xa9\xe8\xd9\x42\xcd\xd1\xab\x36\x1e\x1f\x31\x66\xa5\x09\xbc\xe0\xaf\xfb\x87\x7f\x8d\xaa\x7c\x8d\xa9\x8a\x11\xa3\x9e\xca\x52\x2f\x33\x65\x1c\xc0\x5d\x09\x13\x80\xc0\x7e\x97\x55\x5d\xb2\xbc\x9d\x8d\xfd\x3b\x21\x00\x08\x07\xde\x59\x31\xbd\xda\x40\xc6\x81\xfb\x99\xa6\xe2\xa9\xed\x47\x85\x82\x7f\x07\xf5\xf2\x3d\x71\x94\x61\x50\x24\x23\x7f\xbe\x9c\x6d\x15\xd8\xd1\x8f\x1d\x7b\xc1\x16\xec\x46\xe2\x25\x37\x04\x18\x7f\x28\x1a\x36\xd4\x19\x53\x57\x7f\x4c\x40\x86\x5b\x55\x26\x47\x85\x15\x6d\x00\x02\x87\x41\x04\xd0\xcf\x71\xc5\x0d\x72\x8e\x1e\x87\xec\xad\x56\xf4\x54\x9b\x50\x74\x4a\x2a\x4c\x8f\x41\x34\xc6\x49\xb8\xf1\xc2\x75\x60\xed\x11\x85\x4b\x46\xf9\x58\xf1\x78\x64\xfd\x1f\xd9\xed\xcc\xe1\xec\xb3\xce\x00\x8c\x26\xb5\xde\x28\xaa\x4f\x9b\x64\x94\xa4\x64\x9e\x00\xa5\x8b\x9a\x51\x04\xec\xe8\xf9\x6c\x44\xa7\xf0\x31\xba\xf4\xb8\xbc\xba\xf0\xd4\xfa\xde\x23\x99\x35\x0e\x2d\x24\x0e\x2f\x11\xba\xf0\x24\x50\xa6\xe3\xe7\x37\x3c\xb0\xfa\xcd\xfe\x6d\x1c\x6b\xa0\xe1\xeb\xa1\xf1\x84\xe5\xb1\x1e\x82\x19\x81\xad\x2f\x0b\x52\xc3\x28\x7d\x7d\x20\x36\xf7\xdb\xb4\x0d\x4b\x2a\xe7\xe3\x9b\x8b\x85\x13\x37\xa2\x38\xa5\x81\xb8\xa4\x38\xc8\x1f\x4c\x1b\x8b\x0f\x2d\x25\xd5\x96\x3b\x22\xc0\xa7\xff\x87\xb6\xaf\xf5\x37\x07\x45\x70\x12\x4a\xba\x25\x7a\xa4\xbc\xc6\xaa\x08\x04\x02\x2c\x01\x4b\xa6\xe2\xef\xec\x6a\xc3\xde\x72\xf0\xf5\x9f\x93\xd8\x11\xd0\x4d\x07\x53\x9a\x7b\xf4\x32\x93\x64\x5f\xfb\xe2\xb8\xaa\x83\x2c\x9c\x2b\xa9\x44\x90\x3f\xa6\x3e\xfa\xc1\x1c\xa8\x82\x6d\xc4\x48\xd5\x37\x0c\xd8\x4f\x55\x8a\xfe\xfd\x4a\xa3\x9d\xd7\xe5\xe0\xf6\xd4\xf3\xa4\x11\xb7\xd4\x60\x7d\x4e\xec\x51\x86\x04\x64\xd7\x5b\x91\xfb\x3c\x17\x94\x1e\xec\xc1\x89\xf5\x05\x86\x0f\xb3\xe6\xa6\xe5\x10\x05\xeb\xdb\x84\x98\xef\xb9\x90\x59\x17\x23\x66\xc9\x30\xb0\xa6\x45\x70\x52\xb0\xb7\x57\x37\x7c\xbe\x0a\x25\xfe\xb6\xd6\x53\x42\xc4\xd6\x22\x42\xbf\xb0\x15\x10\x34\x9d\xb4\xa6\x29\x08\x96\x1a\x80\x08\xdf\x93\x62\xfb\x5c\x92\x3c\xf2\x87\x1e\xcc\x41\x67\xe3\x13\x34\xe5\xd0\x30\x14\x0a\xd6\x15\xa6\x91\x17\xdf\x95\xdd\x2d\x78\x00\x9a\xfe\x2b\x3c\x67\x01\x99\xdc\x84\xa9\x3b\x1e\x0a\x62\x49\xc1\x49\x38\x33\x3a\xb0\x4e\x03\x5f\x3a\x98\xd8\xa8\x85\x82\x2d\x51\x08\xa4\x07\x40\x84\xf2\x34\xb2\x1f\xaa\x1f\xd2\x2d\x7f\xec\x47\xf9\xd8\x60\x69\xad\x06\xa3\xdc\x62\xc5\x93\xce\xbc\xe9\x2c\x48\xc4\x37\xa6\xf2\x5f\xc0\xec\x9f\x5e\x8c\x38\x14\xe4\xff\x51\x5f\xb1\xe4\xa4\xac\xa4\x44\x69\xbf\x3e\x98\xf0\x50\x78\xea\xd8\x68\xc5\xb0\xc6\x0a\x09\x9b\xd4\xe8\x93\x75\xf9\x94\xcf\x46\x96\x00\xb2\xfa\x50\xc5\xb6\xac\xad\xac\x48\x2a\x49\x6e\xdb\x99\xc6\xf6\xac\xce\x32\x3b\x13\x34\xa2\x0b\x79\x8f\x72\x67\xd4\x7b\x66\xbc\x5a\x07\xa9\xca\xa0\x44\xd7\x54\x14\xd0\x70\xa3\xc9\x0e\xf1\xbe\x2b\xcc\x71\xc2\x58\x69\x44\xa7\xb0\x8d\x67\x48\x53\x88\xfd\x2c\xf7\x96\x3a\x04\xbd\xef\xa5\x0f\xbf\xb2\x2e\xec\x5e\xdf\x74\x5e\x13\xef\x04\x6a\xba\xa7\x57\xef\xe7\xdf\xe4\x9a\x20\xc7\x97\x14\x18\x43\x35\xd2\xa5\x45\xdd\x2c\xfc\x8f\x2b\x28\x54\xbf\x79\x1f\xa7\x8b\x66\x57\xab\xb0\x9e\x38\xed\xaa\x68\x11\x41\xd4\x5a\x8b\x86\x9b\xa8\x7d\x9f\x80\x02\x25\x7e\x94\x92\x22\x48\x7c\xad\xe3\xc7\xd1\xff\xa1\xce\xed\x51\xa7\x19\xff\x14\xa5\x64\x24\xd6\xa7\xb3\xf0\x63\xb8\x63\x6f\xba\x7b\xdf\xe6\x60\x8f\x27\xcb\xd0\xce\x50\xf4\x0b\x84\x53\x16\x20\x8b\x68\x32\xb6\x05\x33\x28\xde\xdf\xd8\x00\xc9\xf4\x8b\xeb\x7d\x86\xec\xd9\xbc\x92\xb2\xc3\xee\x97\x65\x7b\x3a\xe6\x38\x35\x02\x4c\xe0\xc9\x62\x11\xc4\xc4\xc9\x78\xd1\x35\x5d\xea\x9d\xc6\xfe\xaa\x76\xca\xe7\x39\xec\x75\xcc\x79\x15\x24\x5a\xa5\x8e\x40\xf7\x01\x3a\xc0\x81\x73\xcb\xe3\x70\x90\x89\x86\xc5\x74\xdc\xa5\x66\x4a\xbc\x5b\xf8\xe0\x39\x39\xb8\x6e\xc0\xd5\x8d\x88\x32\xe3\xc9\x82\x81\x7d\x93\x07\x7c\xde\x38\x30\xbc\x9c\x26\xf7\xef\x0f\x44\x1d\x16\xef\x28\x77\xa4\x3e\x9d\xdc\xe2\x39\x31\x9b\x06\x51\x67\xda\x04\x28\xd4\xac\x93\x01\x09\x2c\x72\x46\x3e\xbe\x5c\xa9\x9f\x22\x83\x79\x9b\xec\xc1\x0c\x66\xeb\x28\x33\xd5\x8b\xe9\xdb\x8d\xdf\x2f\x51\x18\x10\x27\xb6\xb1\x76\x41\x34\x82\x31\x94\x00\x41\x06\x55\xb9\xec\xd3\x64\xe5\xe1\x08\x9a\xd4\x0d\xa2\x19\x7b\x40\x6d\xbf\xc4\x97\x5a\x49\xb2\xc0\xe0\x05\xe0\x1c\x98\xb3\x9c\xa5\x9f\xc3\x8e\xcf\xc9\xf3\x82\xba\x62\xb4\xbb\xda\x7b\xcc\x7f\x77\x89\xec\x60\x4b\xbc\xe9\x93\xd7\x4f\x95\x4d\x0a\xd2\x5f\x94\xa0\x24\xa7\x7b\x41\xac\x9b\x90\x89\x15\x97\xde\xbc\x97\xd9\xc3\xb9\xad\xe5\xee\xbc\x7f\x19\x39\xcd\x83\x78\x07\x41\xb9\x03\x82\xd4\x89\xfd\xf9\x0a\x0c\xe5\xb4\x8f\x35\xa4\x72\xc7\x45\xb6\x5f\x34\x9b\xe6\x8f\x5e\xfa\xbc\xc6\xaf\x96\x59\x94\xc7\xe7\x5e\xaa\xc1\x40\x8c\x8d\xd2\xe3\x40\x49\x2f\xff\x6b\xa3\x8c\x4d\x06\x87\xbc\x7d\x79\x17\x07\xce\x33\xb2\x33\x8c\x80\x6d\xb3\x1b\xff\xa3\x35\xb9\x42\x30\x85\xf1\x8e\x96\x4d\x90\xfd\xc1\x88\x76\xd8\xf2\x77\xa0\x42\xec\x88\x90\x74\x57\x0f\xaa\x2b\x4d\x10\x9a\x3c\x6f\xba\x54\x8f\x12\xf0\x4c\xc9\xf9\xac\x86\xab\x68\x0f\xe9\x3f\x87\xef\x4e\x77\x87\x75\xd7\x38\x26\xe4\x21\xf0\x55\x39\xf0\xa9\xf2\xd6\x5b\x10\xf3\xb5\x2d\x88\x46\xb9\xbf\x5f\x1e\x2c\xad\xa4\x2e\x98\x95\xc9\x3c\x85\x48\x47\x7a\x94\x6e\xfe\x44\xd8\x59\x4c\xfc\x98\x1b\x79\xcc\x6f\xbd\x44\x34\x08\xf4\xaf\x5c\x22\x05\x8b\x54\xf5\x2c\x9a\x38\x84\xff\xe3\x80\x77\x57\x6d\xff\xb5\x6f\xc9\x4f\xba\xb0\xa6\x5e\x19\xa2\x5d\x63\x45\x56\x80\x83\x28\x9f\x16\x81\xb9\x82\xe8\xce\xcf\xa8\x98\x8c\x1c\xe2\x97\x7d\x04\x1a\x72\x46\xb0\x73\xc3\x8f\x7e\xa8\xa4\x27\x6c\x88\x05\x38\x3a\x50\x4a\x5b\xfb\x7a\xea\x70\x83\xd7\x75\x99\x39\x6d\x63\x1a\x16\xf6\x3e\x22\x78\x76\xa6\xa9\x02\x52\xd3\x66\x80\x8f\x24\xc8\x96\x00\x70\x40\x55\xd7\x7f\x8c\xf0\xea\x56\x45\xd7\xec\x10\x8e\x58\x42\x76\x0b\x37\x7f\xd2\x9e\x51\xd8\xfa\x15\xa0\x76\xc9\x16\xb0\x16\xd5\xcd\x0c\x02\x9e\x3d\x3f\x08\x53\x7f\x37\x34\xd4\x86\x18\xdd\x66\xaa\x36\xea\x16\x50\x9e\x1d\x5f\x7b\x8a\xe3\xd7\x57\xe0\xe8\x0c\xc6\xa6\xe7\x03\x11\xac\x9f\x8c\x76\x83\xad\xe2\x75\x49\x23\x9f\xb3\xb0\x98\xfd\xf6\x50\x4f\x08\x84\xe0\x82\x7d\x16\xd7\x3d\x66\x25\x24\x96\x71\x62\x81\xe8\x16\x0a\xd4\x94\xa2\xe9\xad\x8a\xd6\x3e\x51\x1d\xb1\x49\xb8\xeb\xac\xe1\x6c\x80\xe5\xfc\xc0\xeb\xd3\xd9\x05\x6f\x98\xdd\x6a\xf0\xbc\x68\x57\x6a\x58\xa5\x11\xaf\x7a\x4e\x71\xd6\xf1\x40\x46\x40\xb3\x46\x4c\x65\x8c\xb4\xe5\x4c\xd1\x67\x50\x9b\x4c\x57\x5b\x4c\xaa\x02\xb3\xd2\xf0\xb3\x71\xb6\x1a\x6f\xeb\x1c\x6b\x29\x91\x9a\x3e\xf5\x94\x39\x7a\xbc\xbe\x75\x73\xed\xcb\x55\x44\x47\x5f\x97\x43\x41\x9e\xfa\xdb\xff\x57\x5e\x1f\xee\x09\xca\x7e\x1b\x08\x62\xf3\xfa\x5b\x36\x18\xe5\xea\x77\x9f\x97\x7b\x2b\x79\x89\x8c\x8c\x55\xcf\x1b\x30\x4c\xc1\x4c\xbf\x7b\xa8\xa1\xc1\x2d\x57\x6f\xf0\x30\x2d\xd5\xb9\x47\x15\xe9\x45\x86\x96\x7a\x2d\x94\x27\xf6\xe9\xc7\x58\xc7\x5b\xf4\x6d\x5c\x3e\x20\x81\xd7\x40\x5a\xd8\xe0\x31\x6b\xa1\x2e\x3b\x60\xba\x23\xdb\x91\x92\xd8\x54\x2a\xb5\x39\x4e\xcb\xe4\xaa\x62\xe7\x9f\xba\x52\xee\x0f\x1e\x82\xb4\x85\x35\xe7\x10\x90\xef\xaa\x6e\x2d\x72\xf3\x4f\x7e\x53\x33\xc0\xdb\xba\xd4\x96\x2b\x2a\x9d\x0a\x22\xe1\x9a\xb4\x9d\x80\x52\x2d\xb4\x2e\xf6\x11\xa8\x3c\x82\x57\xcc\x7e\xd8\x12\xf8\xf8\xb2\x2f\xea\x9c\x84\x1b\xf9\xd7\x7f\xda\x6b\x5e\x84\xd2\xfb\x64\xe3\x5e\x80\x49\xbd\xa1\x23\x20\xe2\x6b\xed\xf4\xaa\x53\xe9\xb6\x4e\x78\x86\x9f\x63\x55\x47\x1a\x3e\x25\x6f\xda\x52\xb9\xdc\x67\x5a\x89\xc9\x05\xcb\x3d\xe0\xd4\x5d\x58\xf6\xba\x2c\x5d\x9b\x2b\x5e\x6d\x70\x21\x0f\x37\x35\xba\x38\x9d\xc8\x88\x35\x0d\x5c\xcd\xa6\x88\x1c\x6a\x81\x55\x67\x19\x2f\x92\x91\xbb\x47\x32\x8a\x75\xa9\xc9\xc7\xc4\x28\xf7\x49\x2e\x97\x30\xaf\x37\x91\x03\xd4\xd2\x85\xa6\x24\x03\x17\x09\xc0\xe8\x72\xe0\x33\xd1\xbb\x64\x97\x4e\x08\x0d\x67\x7c\x9f\xae\xee\x21\x21\x3e\xf4\x46\x04\x39\xdd\xb8\xef\x95\x6f\x62\x7a\xdf\xe9\x3a\x83\xa5\x95\x75\x69\x73\xad\xed\x5c\x8e\xf4\xfc\x09\x48\xa6\xb5\xde\x4c\x33\x1b\xe8\xb0\x4b\xbd\x17\xf0\x2a\x7c\x87\xf1\x59\xbb\x32\xd5\x5e\xa0\xfe\xd2\x75\x2e\x7c\x29\x0d\x14\xd5\x47\xb2\xcb\xa5\xfc\x98\x87\x47\xb2\x4f\xb2\x53\x23\xa2\x0b\x4f\x3a\x21\x8f\x5a\xfd\x34\x2c\x92\x7f\x17\xe0\x23\x0f\xa5\xd5\xda\x67\xd9\xfb\x8e\xdd\x68\x08\xa7\xb3\xa2\xca\x5d\x03\xe7\xa9\xb7\x50\x5e\xd7\x3f\x67\x6d\xb6\x7b\x2a\x22\x01\x55\xda\x8e\x04\x65\x03\xb3\x4c\xa9\xe3\x99\xd9\x46\x59\xff\x67\xc7\x24\xf7\x42\x41\xff\x6a\xb9\x49\x31\x03\x0e\x46\xae\xf4\x81\x3a\x10\x40\x4a\xc9\x49\x21\xee\xf0\xa2\x11\xfb\x82\x52\xb7\x9b\x66\xd9\x4e\xd3\xc6\xc1\xf4\x73\xa1\xef\xf7\xf1\xcb\x81\xe4\xec\x9f\x43\x9b\x88\xff\xea\x09\xff\x75\x4d\x04\x89\x43\x2a\x43\x80\xf5\x84\x55\x0f\x87\xf0\xd8\xb8\x16\x8c\x2d\x31\x8e\x10\x0c\xb3\x31\x64\xaf\x83\x70\xc6\x26\x23\x7a\x2c\x4e\x2b\x8e\x67\x65\x3c\xdf\x02\x54\x90\x8d\x92\x10\xbf\x0a\xf1\x03\x82\x3f\x13\x99\x3d\xe3\x29\x36\xbb\x65\x9b\xae\xf7\xfb\x58\xd7\xa6\xce\x39\xd4\x17\x5b\x5b\xab\xe8\x03\xc3\x55\x50\xfb\x53\xe4\x3a\xd6\x2f\x0f\x55\xf9\xd2\x25\x62\xff\x9c\xb0\xd5\x37\x7c\x83\x6c\x00\xfb\x3d\xa8\x46\x51\xbe\x18\xcb\x15\x8c\xb0\xb6\x70\xac\x5d\x11\xba\x68\xc9\x49\x55\x97\xf8\xe7\xc9\x61\xbc\xc5\xbc\x7b\xa3\xdb\x3c\x8c\x5e\x61\x27\x2e\xb3\x83\xc3\x48\x8a\x07\x34\x3d\x86\xa9\xfb\xbe\xad\x9f\x54\xcf\xfb\x0c\xc3\x89\xed\xd4\x06\x4d\xe4\xc1\x21\x0a\xc3\x98\x9d\xb6\x7b\x8c\x03\x21\xb9\xba\xf7\xfd\x66\xf9\x7f\x85\x3c\x83\x74\x82\xe6\xa1\x63\x6c\xa3\x53\xbf\x12\xbf\x86\xec\x95\x6b\xfd\x0a\xe9\x38\xb0\x27\x3d\x88\x1c\x43\x67\xc1\x7a\xd6\x9a\x54\x0c\x12\xf7\x7f\x79\x5e\xcb\x20\x01\xc5\x25\x14\x6c\x82\xe7\x6b\x65\xce\xbe\xfb\xd1\xfc\x18\x52\xa1\x50\x48\x3d\xff\xa8\x6f\x3e\x84\xfb\xc1\x66\xac\xfb\xec\x62\x2b\x3b\x1e\xc8\xb3\xbc\x9f\x6b\xfb\x86\x34\x29\x3d\x95\x5e\xbd\x6d\x33\x80\xdc\x69\xd3\xb2\xb2\x68\x17\xa4\xf2\x96\xa1\x0c\xe2\x9c\x43\xb6\x50\x0b\x80\x5b\xb1\xf9\x9c\x0d\x73\x6f\xaa\x51\xba\x17\xf0\xd9\x32\x50\xb5\x94\x94\x24\x51\xd7\xe1\x85\x9f\x15\xd1\x94\x3a\x28\x50\x8d\x0b\x00\xff\x97\xcb\x7e\x25\x57\xa2\x87\x2a\x4e\x26\x84\x9d\xe9\x93\x6f\xd8\x41\xb3\x37\x7d\x85\x70\xfa\x75\x25\x9b\xcf\xb5\x4a\x0b\x3a\x34\x90\x9f\x7d\x09\xba\xb9\xa9\x5e\x46\x13\xf4\xb2\xc8\x86\xbe\x73\x0c\x25\x82\x1a\x9f\x34\xbb\xf6\x73\xf6\x93\xc7\xcf\x42\x29\xa4\x62\x6c\x05\xd6\x2b\x2b\x31\x46\xf1\x83\x64\x4d\x40\xe5\x4c\x14\xee\x99\x2f\x69\xe5\x72\x59\x5f\x09\x3f\xfc\xb5\x01\xcd\x97\x62\x25\x03\x0f\x65\xb0\x48\x6b\x8d\xd0\xa2\x7d\x68\xf4\xc5\x7c\x87\x63\x64\xa9\x6e\xfe\x3b\x42\x77\xc4\x50\xd4\x74\x8e\x98\xc6\x2f\x8d\x77\x7d\xc8\x7b\x48\x90\xa0\x10\x8b\x2b\x63\xa7\x8c\x1c\xf2\x58\x90\x22\x14\xdf\xf4\x7c\xb8\x9e\x51\x2a\x6d\x5b\x52\x6e\x4d\xcc\xec\x01\xb1\x84\x00\xe2\xa7\x89\xbf\x43\xcd\xde\x94\x5e\x9f\xe5\x63\x6c\xdb\x9f\x1e\xe1\x74\xe4\x90\x46\xd1\xb6\x28\xa0\x7d\xfa\x70\xc4\x50\x86\xdf\xc3\xb9\x85\xca\x02\x52\xd7\x76\xad\x31\x2b\x4f\x4c\x19\x34\xe2\xad\xbf\x4e\xdc\x5b\xdc\x23\x85\xf5\x2e\x84\x50\x5e\x9d\x9a\x8f\x33\x57\xdf\x6f\xd4\xc1\x05\x01\x47\x1c\x04\x18\x64\x09\xc8\x59\x07\xd3\xa1\xe1\x97\xd5\x5d\x4d\x67\xde\xe8\x39\x13\xa1\x0c\x04\xc6\x88\xad\x91\xaf\x4d\x07\x57\x40\xae\x90\x88\xce\xb1\x2f\x5a\x7f\xd2\x50\x08\x70\xb2\xf9\x0d\x1b\x42\x4c\x27\x18\x14\x10\x9a\x2c\xc9\x10\x3b\xa5\x7f\xc2\x69\x65\x2c\x08\x01\xb3\xf2\xd7\xd6\x0b\x65\xaf\x34\xfc\xc3\x91\x2d\x3f\xf0\x25\x82\x3e\xf6\x25\xca\xf8\x63\x43\x7b\xb3\x8b\x77\x58\x53\xa6\x14\xcc\x08\x20\x7b\x1d\x56\xb7\xf3\x64\xed\x00\x19\x86\x1b\x38\x58\xa0\xe3\xc9\x7c\xce\xc1\xea\x10\x26\x43\x79\xba\xa0\xd0\x63\x4e\x18\xae\xe5\x01\x42\x58\x55\x56\xf5\x0b\x92\x8d\xab\x7e\x51\xf2\x27\xac\xfc\xe1\x5d\xf1\x4a\x48\xdf\xf2\xd9\x16\x8a\x5d\xdd\xa6\xbb\xe6\x18\xe8\x52\x69\x01\x35\x87\x49\x74\xd5\xd3\xea\xec\xa2\x03\x64\x93\x3e\xa0\xd3\x6c\x77\xd7\x0f\x63\x73\x5d\x5d\xa5\x92\x7e\x21\x4b\x68\x27\x3f\x0a\x05\x30\x9c\xbe\x4a\x1a\xcb\x03\x91\x91\x89\x0c\xdb\x5e\xf5\x6f\xf5\xfb\x1d\x7b\xb6\x6e\xda\x51\x2e\x9a\xab\x05\xa2\x1f\x77\x2c\x8e\x1e\x62\x41\x57\x24\xd9\xfd\xf5\x13\xeb\x59\xd5\x25\xd3\xf1\x0b\x75\xbb\x76\xf6\xe1\x92\x43\xc5\xab\xc0\x14\x79\x63\xdb\x5d\xc4\x90\x92\x12\x30\xc4\xcb\x40\x39\xae\xc9\x4c\xe1\xb1\x7d\xba\x29\x75\x4c\x4a\xf8\xc5\x89\xbf\x7f\x20\x6f\x86\x09\xfb\x54\x05\xde\x2a\x09\x76\x87\xbf\x1a\x84\x46\xaa\x7c\x2f\x1b\x6f\x1d\xdd\x1e\xde\x27\x83\xb1\xdd\xf2\xc6\xab\x75\xc2\x97\x57\x0c\x11\xee\x1e\xea\xaf\x5f\xc0\xe0\x8f\xd4\x00\xa5\xe4\x51\x15\x95\x38\x24\x78\x3f\x13\x48\x31\x65\x85\xe6\x90\x9e\xec\x9c\x41\xa0\xfa\x4d\x0c\x2e\xcc\x25\x45\x9d\x91\x5d\x25\x01\xec\xb1\x01\x7d\x0d\x7c\x53\x2d\xb3\x04\x07\xab\xb8\x56\x6c\x03\x50\xbe\x6e\x7c\x14\xf2\xea\x88\x61\x7c\x4b\x8e\xab\x57\xfc\x8c\x96\xf4\x40\xff\x85\xce\x91\x37\x26\x73\xcd\x55\x57\x4a\xd5\xb3\x79\x81\xa3\xb3\xee\x29\xe2\x91\x39\x6f\xdf\x1e\xba\x26\x60\xfe\x30\xfb\xf8\x0b\xd4\xf7\x51\x2c\x16\x93\xe6\x0a\x3a\xb0\x28\x50\x48\x61\x2f\x9d\x2b\x8c\x75\x19\x82\xa7\xec\x6c\x10\x6e\x41\xef\xd2\x11\x2a\xa8\x72\x01\x79\x52\xfc\x1a\xc4\x35\xa3\x69\xe1\x64\x8e\xe1\x0d\xe7\xd9\x46\x83\xc3\x5e\x42\xc3\x2d\x31\x7f\xd9\xce\x36\x60\x53\xd4\x84\x8f\xef\x4e\x82\xd7\x46\x9f\xdb\x2b\x8b\xfd\x25\x49\xd4\xd5\x0a\x58\x7e\x14\x5d\xa9\x33\x96\xaa\x6c\xc5\xe5\x3e\xea\x3a\xcf\x20\x58\x06\x76\x75\x50\xdf\xe6\x8e\xb9\x1a\x87\xca\x2c\x18\x8b\xd9\xf8\x58\xec\x8e\x42\xbe\x25\x06\xf1\x64\xf7\xcb\xa9\x66\x5c\xaf\x11\x95\x14\xc1\x9c\x8d\x2b\xb0\x56\x10\x3e\xfd\x0f\x9b\x1a\xf4\xe5\xda\x2b\x64\x87\x52\x68\xc1\xb9\xd1\x59\xb0\xfb\xae\x0e\x0c\x75\xb8\x69\x55\x4e\xaf\x77\xbc\x01\x81\xc5\xb8\x61\x58\x67\x44\xdb\xc1\x21\xc6\xde\xeb\x66\xd5\xa7\x9d\x58\xc4\x08\x97\xb0\xe7\x77\x47\xdf\x75\xc2\xca\xed\x2a\xb3\x78\x41\xf2\x64\x24\xd5\x1f\xd0\x81\x85\x2d\x41\xef\x25\x6f\x45\x73\xc6\x61\x3c\x7d\xad\xae\xfd\xb1\x42\x6d\xa9\x3e\x4e\x10\xaf\x19\x17\xe7\x01\x4a\x02\x35\x0c\x79\x07\x82\x81\x45\xd2\x89\xaa\xec\xed\x4a\x37\x68\xd8\xc2\xeb\x4e\x56\x36\xab\x9d\x74\x3d\x5f\x14\x25\xe5\x68\x75\x40\xcd\x5b\x14\x96\x77\x81\xd6\x5f\x3d\x91\x13\x8a\xda\xad\xbe\x17\x16\x74\x19\xe0\x22\x90\xb5\xae\x4b\x7d\x9e\x9c\xe0\x22\xb0\x63\xf6\x07\xe2\xbb\xfb\x47\x0c\xf6\x5e\xdb\xb1\xb1\x0e\xd7\xc4\x2c\xaf\x7a\xb9\xd2\x9d\x9d\x2c\xf6\x8c\xa6\xb4\xc4\x3e\xa1\x67\xe1\x0c\x36\xff\x42\x00\x83\xd6\x88\x06\xd9\xc4\x1c\x43\xc5\x17\xaf\xd2\x1f\x8b\xf3\x6a\xea\x29\x48\x71\xc7\x8d\x71\xc7\x65\xa6\x9f\xf8\xdd\x70\x95\x2c\xca\x00\xd1\xeb\xe4\xf1\x12\x34\x89\x29\xd9\x44\x19\xac\x82\x32\x55\xfa\x15\x27\x97\x1c\xd6\x63\x39\xaf\xa4\xc2\x51\x0f\x51\x87\xd1\x8f\x03\xf8\xc0\x50\xc7\xbb\x48\x24\xee\x03\xf5\x3e\x90\xa9\xc6\x66\x70\x53\xa0\xae\xd6\x4b\xb5\x56\x97\x21\x54\x6e\xa6\xc8\x52\x79\xba\xf5\x86\x03\x15\x92\xbf\xdb\x04\xf7\xa7\xf2\xae\xde\x91\x7e\xce\xaf\xb4\x60\x9d\x90\x4a\xb2\xf8\xd4\xc1\x4c\x1f\xff\xa9\xf2\xd0\x66\x66\x96\xc0\x37\x15\xd8\x54\x7d\x01\x58\x76\x96\x5d\x7f\x93\xc3\x32\xaa\xb4\xcd\xde\x79\x7f\xeb\x36\x09\x1c\x72\x84\x28\x6c\x5d\x43\x1c\x98\x0d\xb1\x6f\x60\x50\x24\xa3\xf4\x04\x1e\x17\x79\xe2\xc1\x21\x6a\x3c\xc1\x2f\x6f\xd4\x1a\x1f\x52\x1e\x67\xfd\x51\x45\x9a\x7a\xe7\x7d\x67\x56\xf6\x6f\xe0\xad\xbf\xbf\xd5\x6b\xe3\x53\x12\xe7\x8f\x02\x6f\x5e\x43\x41\xf9\x3e\x5e\x6c\x65\xff\x27\xf9\x36\x09\xe3\x5c\xf2\x06\x2c\xbd\x54\x6c\xf6\x7f\x30\x8f\x7f\xde\x54\x62\xf9\x01\xe8\xc0\xab\xb8\x44\xb2\x0a\x45\xa4\xb6\xf2\x51\x7e\x7e\xf5\x57\x5b\xdf\x5e\x2b\x07\xca\x72\x31\x05\x79\x0b\x9e\xc4\x0e\x02\x9a\xac\x88\x4c\x00\xc8\xd3\xb0\xe7\x11\x78\xfe\x8b\xb0\xc8\x81\x48\xa2\x47\x2d\x74\x79\x3c\xa8\xbc\xcc\xf2\x5d\xe0\x9f\xf2\xd4\xfe\x2b\x79\xd6\xb7\x98\x20\x29\xa3\xd2\x0c\x61\x47\xc3\xf7\xde\xd2\x99\x84\x40\x5d\xad\xee\x88\x17\xaa\xeb\xf6\x51\xd6\xb5\x6f\x41\xc1\x39\x7c\xf7\x79\x94\x56\x26\xa0\x43\xc6\x85\x69\x64\x40\xc3\xff\x20\xc6\xa7\x9b\x9f\x16\x16\xc2\xa3\x80\xda\x8d\x11\xbb\x50\xf9\x55\x86\x4b\xb2\xb4\x5a\xae\xd5\xf4\xbf\x07\xff\xbf\xbe\x80\x20\x71\x28\x08\x4c\x70\x6a\xd8\x88\xcf\xe8\x76\xcf\x18\xda\x32\xf7\x87\xce\xe7\xc9\xb4\xc7\x6f\x5f\x14\x09\xad\xfc\xad\xed\x1f\x36\xb0\xfb\xcb\x79\xf9\x05\x80\x41\x6c\x4e\xeb\xea\x5e\xab\x0e\x75\x3d\x6c\xf3\xba\x87\x9c\x95\x66\xb9\x43\x9d\x66\x33\x77\xb0\x6e\x47\xec\x71\x1e\xbe\x32\x59\x33\x02\xf3\xd3\x77\x25\x26\xd3\x33\xe8\xaf\x35\x5f\x8f\x15\x4a\xe5\xde\x11\x8c\xcf\xbb\x2f\x0f\xce\x55\x4e\xc8\x61\x15\x3d\xbd\xe4\x1e\xe7\x80\x4d\x95\xf4\xa1\x74\x4b\x1f\x24\xf8\x23\x0d\xd4\xc2\x2c\x7d\x5e\xfb\x84\xe3\xd9\xea\x24\x7e\x21\xf4\x4a\x0b\x1d\x71\xfd\xbe\xff\x70\x13\x80\xf6\xff\x37\x3c\x44\xef\x9c\xfe\x29\xad\xba\x53\xf5\x8b\x94\xaf\xc1\xb1\x3c\xad\xb7\x74\x29\xd9\xeb\x68\xaf\x08\x4f\x8b\xd9\x8b\xc8\xed\x18\x3e\x48\xbc\xfb\xc5\xf5\x1a\xac\x90\x91\xeb\xff\x28\x27\xc0\x47\x31\x9c\xf8\xbe\x4e\xb2\xa0\x64\xc5\x71\xf4\xcf\xed\x7d\xac\x45\x12\xff\x19\x1e\x8c\x59\x36\xd1\x0e\x70\x74\x76\xd7\x95\x3a\xee\xfb\x5f\x04\x46\x66\xd9\x2c\xfe\x26\x25\x41\xc2\x4d\x2c\xc0\xc5\x53\x90\x3a\x37\xc8\x49\x0f\xfe\x48\xf4\xf1\x16\xc8\x62\x64\x94\xe1\x9b\x3c\x15\x7c\xce\x42\x7f\xa3\xef\x8c\x24\x80\x19\x10\x90\xfc\x4a\xa6\xf5\x50\x2e\xec\x02\xe3\xb4\xc1\x15\x1f\xe4\x21\xaa\x0a\x91\xaa\xb6\xd6\xf5\x60\xf3\x25\xbf\x53\xcf\xad\xbc\x20\xf4\x3e\xd6\x96\xda\x2b\x90\xe4\x08\xed\xea\x23\x38\xb3\xb8\xd2\x01\xbe\x71\x83\x95\x27\xf7\x46\x1e\xd2\x2f\x86\xe6\xa9\x47\x5d\xef\x89\x68\x3f\xd9\xc9\x7d\x4c\x9a\xed\x27\xc5\x9c\xbd\xee\x1b\xce\x9d\x31\xfd\xdb\xff\x78\xd8\x9d\xa2\xce\x37\xc4\x9a\x58\xde\x3d\xa5\x19\x77\x41\xb7\xc3\xe9\xc2\x8d\x5b\xb1\xcf\xe8\x31\xe6\x53\x87\xbf\x5f\x8e\x40\x87\x64\xf1\x2e\xbd\xd9\x5b\xf6\x74\xd7\x29\xd4\xcc\x95\xf8\xd4\xa1\x6f\xb6\x00\xe7\xc1\xb6\xd3\x25\x8c\x74\xec\x36\x06\xa6\x56\xe8\x05\xe8\x3f\xe4\x72\xb4\x2d\x25\xbc\x25\x02\xe2\x95\x36\x49\x12\x03\xd2\x27\x4a\xcb\xc1\x3e\x68\xd2\x47\x17\x1b\xb7\x87\xbd\xaa\x8f\xbe\x00\xe8\x71\xd7\x23\x10\x17\x3d\xe5\x3d\x63\xa9\xfb\xf4\x0b\xd3\x85\xf3\xa9\x44\x9b\xc2\x68\xc4\xb7\xb7\x59\x9b\x79\x41\x5d\xaf\xa9\x7c\x51\x41\x05\x7a\xa8\xd5\x5b\x01\x8d\x15\x73\x36\x92\x7a\xaa\xe3\x22\x93\xd5\x83\x9c\x83\x09\x23\xff\x22\xb1\x91\x99\x77\xb6\xe5\x67\xb4\x67\x40\x34\xb3\xaf\x8e\xfb\xe4\x38\xdf\xd7\xd4\x6b\xdb\x1f\x61\x2a\xd7\x26\xbf\x82\xda\x85\xed\x36\xc4\x0c\xfd\x07\x0d\x39\xe3\xf2\xbe\x34\x58\xa2\xf3\xfb\x0f\x5b\x05\x42\x32\xcf\xbe\xce\x68\xdb\x6f\x55\x3b\x8c\xc9\x29\x42\x4c\xdb\x06\xda\x50\xa5\xf7\x59\x30\x9e\xb4\x6a\x00\xb7\x95\xa9\x9d\xad\x3a\x15\x3e\x4f\x82\x0a\xa7\xae\x76\xfd\x92\xf2\xfd\x62\xd3\x8f\x81\xab\x37\xd8\xdd\x2b\x82\xd3\xad\xd2\xdc\xb5\x5a\xa0\x84\xa0\x05\xfc\x64\x79\xf6\xf7\x98\x95\x99\x4a\x39\xfe\x8d\x47\x39\xed\x60\x24\x9b\x63\x25\x37\xd5\x44\x73\x01\xd5\x6f\xbe\x5e\x80\x8a\xe6\xa9\x2a\x29\x75\xbd\x49\xc7\xd2\x4c\xb0\x49\x0a\x2e\x65\xca\x75\x62\xd9\x23\xba\x0a\xe3\x5e\xa5\xd9\x2f\xa7\xc3\x84\x87\x7c\x02\x30\xde\xf2\x73\x33\x9c\x95\xa6\x14\x66\x08\xf7\x4b\x71\x39\x37\xaf\xf9\xc0\xa2\xa9\xa4\xe8\x97\xd0\xf9\x84\xf0\x08\x18\x23\x13\x7a\x1a\xc0\xc9\x8d\x7b\x21\xef\x69\xb3\xa6\x20\x0c\x90\xf0\x3b\xce\x5c\xce\x19\x09\x3f\x4a\x0e\xfb\xf4\x03\x7b\x62\xf1\x78\x2a\x05\x77\xbe\x0a\x3c\xe2\x1d\x5e\x7a\xa5\x63\xd8\xed\x2a\x30\xc8\x7c\xff\xb8\xae\x06\x87\x4f\x29\x53\x2d\xc3\x04\xde\x14\x8b\xb8\x4b\x69\x15\xd8\xb5\x14\xfc\xed\x9f\x7b\x4b\xbb\x00\x32\x5d\x0a\x15\xda\x3b\x27\x4b\x2b\x62\x28\x4b\xc9\x41\xaf\x63\x57\xff\xab\xca\x72\x9e\x21\x81\xa3\xde\x0c\x90\x47\x09\xd7\xf9\xfe\xce\x5c\x21\x06\x55\x9a\xac\x49\xfb\xae\x54\x97\x56\xb6\xef\xe5\x27\xb6\x48\x94\x2a\x55\xce\x88\x4f\xed\xe4\x47\x50\xee\xf7\xa4\x5e\x84\x04\x81\x32\x5a\x56\x6b\xfa\x1d\x2a\xe1\x76\xa6\x83\x21\xe3\x34\xd2\x35\xa2\x97\x93\x80\x65\xb7\xc7\x33\xdc\xa6\x24\xd0\x74\x94\x4e\x41\xfe\x6b\xf2\xda\xc3\x24\xfd\x39\xef\x70\x43\x0d\x7f\x13\xbf\x4a\xf2\xab\x85\x89\xda\x91\x1a\xe5\x92\x3d\xca\xa9\x30\xa0\x29\xcf\xdb\x8a\x36\x3a\x61\xe6\xe3\x92\x5d\x48\xc7\xec\x36\x06\x56\x47\x74\xd3\x8d\xbe\xf7\x5b\xf5\xa8\x7c\x13\x83\xcf\xc7\xd5\x1c\x20\x76\xea\xa6\xf1\xd8\x77\xf7\x46\x3a\x2f\xcf\xda\xe2\x8a\x19\x21\x87\x54\x57\xa3\x7b\x96\x8f\xc5\x0c\x32\x13\x4a\x00\xe9\x08\x1a\x7c\x41\x75\xd2\x3b\x9f\xbf\xac\x36\xb1\xdf\x5b\x95\xc6\x7e\xe3\xae\xa9\xcf\x62\x0b\x76\x31\x3a\x8d\x16\xb6\xab\x9a\x3b\x63\x60\x81\x02\xf3\x33\x01\xef\xc6\xc2\xa4\x1f\x5e\xc3\x51\xbc\x4f\xc3\x3d\x99\x12\xc8\x54\xd9\x12\x2a\x43\x13\xaa\xa1\xae\xe6\x48\x28\xea\x1d\x1f\x7d\x06\x22\xdf\xc2\x1b\x5d\xfb\x21\x44\xe6\xd9\xc1\x2b\x17\xce\xd9\x17\x90\xcb\x5a\x9b\xb0\x1f\x95\xed\x10\x33\xab\x46\xe1\x92\x98\x36\x41\xc1\x5d\x8d\x9a\x03\xb1\x67\x64\xe9\xb3\xd8\x05\x6d\x94\xaa\x5c\x31\xdb\xec\xb9\xd3\xdd\xab\xf5\x7d\x2b\xe2\x31\xc8\x89\xab\xd8\x7a\x17\xf0\x8e\x2d\x24\x36\xd8\x32\xf4\xe2\xe3\x65\x67\x86\xfa\x50\x99\xb6\xef\xc4\x68\x4f\x36\x78\xf8\x60\x38\x7e\xa7\x1d\x8b\xa0\xa9\x80\xf8\xb7\xff\xe7\x91\x53\x44\x1f\x95\xa9\xa9\xbb\xc5\xdf\x3d\xb2\x15\x7b\x0a\x8a\x11\x12\x02\x9b\x2f\x49\xc3\x7f\x1e\x9d\xf6\x23\x20\x6f\xde\x02\x46\xc5\x02\xf8\x8c\x42\x64\x74\xe2\x90\x0f\x5a\x0a\x39\x6a\x3f\xcc\x4a\x4c\x13\x7c\xdd\x3c\x87\x92\x25\x69\x57\x58\x7d\x1e\xf1\x62\x07\x3c\x47\x5f\xfc\x6b\x41\x38\x89\xe4\x4a\x26\x3a\x1d\xfe\xaf\x0d\xbc\x6f\x5d\xea\x04\x13\xca\xa5\x4b\xc6\x24\x3e\x44\xf8\xc4\x8a\x80\x65\x01\x50\xa4\x47\x0a\x8e\x95\xf5\x76\xbf\x0d\x99\xdd\x12\x79\x10\x51\x6b\x6e\x61\xb1\x90\x6b\x20\xde\xf0\x29\xc6\x49\xce\x0e\x86\x6e\x01\xf9\xa1\xb6\x4a\x7e\x55\x12\x24\x82\xd7\x9d\xfd\x8e\x9f\xe8\xd7\xb3\x76\x48\xdd\x18\x08\xa7\x43\x8d\xe2\xa4\x07\xbb\x59\x1f\xde\x01\xdc\x4a\x24\xd6\xdf\xc4\xc2\x5e\x8d\x0e\xca\x0b\xbe\x49\x24\x0c\x27\xf9\x20\x7e\xd9\x6e\xee\xf9\xaa\x06\x85\x9a\xb8\xdc\xe7\xb4\x4b\x4e\x18\x98\x93\x61\xf0\x50\x39\x29\x8a\x67\x6b\x21\x5a\x8e\x5c\xf9\xb7\x23\x24\x9f\x5d\x5e\x15\x5e\xb8\x21\xf2\xb7\x6d\x76\x1f\xa8\xcf\xb9\x81\x0a\xbd\xc0\xbb\x4f\xaa\x2c\x81\xef\xa8\xc9\x52\xcc\xd3\xa9\x84\x26\xec\x5e\xd4\x52\xa4\x55\x05\x13\xbe\xd9\xa7\xec\xea\x17\x29\x14\xfc\x00\x36\xca\x6b\x7d\x4f\xf1\xc2\x35\x4c\xe5\x57\xa0\x85\x89\x1f\x6a\xc5\x36\x06\x8f\xef\x58\x3b\x37\x4d\x0a\xe9\x0d\x0a\xd1\x15\x01\xe5\x32\xd0\xbf\xef\x65\x57\xd4\xdb\x6b\xb5\x4a\x48\xd7\x0c\x51\xed\x82\xa1\x73\x3b\xc5\x1d\x0e\x1b\xb4\x75\xbb\x9f\x12\x97\x3f\x3c\x8b\x31\x80\xc0\xff\x77\x7d\xeb\x0a\x51\x26\xd5\xc0\x00\x71\xc1\x81\xbb\x0d\x55\xa5\xa6\xfa\x95\x1e\x33\xd7\xad\xc5\xe2\xe3\xdf\xd2\x91\xaf\xee\xfe\x4f\x10\x47\xfb\x35\xef\x8f\x0c\xff\xfc\x7a\xbe\x59\xb4\x8f\x63\x17\x2a\xd7\xf6\xe7\x67\xf2\xd3\xe5\x47\xbf\xf6\x7e\x38\xa5\x3e\x45\x30\x01\xcb\x9f\x4b\x92\x33\xe7\x3a\xcf\x7f\x44\xcb\x4f\x97\x90\x7e\x73\x82\x35\xac\x17\x2d\x83\xe8\x13\x31\x65\xcb\xbc\x69\xb4\x55\xae\xf4\x04\x38\xa3\x70\x71\x2b\x32\x6d\x64\xb0\x3d\x69\xd4\xa9\x4b\x1a\xd0\x02\xb9\x0c\xb0\x74\x73\xc8\x5e\x78\xc6\x15\xb4\x94\xf9\x6f\xd3\x80\x2c\x6e\x77\x16\x0f\x73\x36\x79\x3f\xad\x03\xfa\xc3\xad\xdb\xd2\x1f\xf3\xb0\x2c\xa5\x62\x82\xb0\x92\x6d\x35\x39\x81\xa9\xb1\x73\x49\xbd\xff\xdc\xa6\x7f\x9e\x3d\x62\x70\x10\x50\x80\x6f\xd1\xe2\x94\x95\x16\xd8\xe0\x6f\xa3\x52\x86\x90\xab\x61\x6e\x73\xa6\xaa\x31\xe3\x33\xd1\x8b\x16\x72\x39\x3a\xab\x4b\x10\xdd\xcb\x0a\x2c\x01\x36\xb6\x7b\x8c\x97\xda\x8a\x99\x0b\x3a\x64\x9f\x59\xf9\xe6\xfe\xeb\x20\xce\x37\x8f\x9b\x91\xd5\x31\x7f\x82\xcd\xdf\x9f\x3c\x2b\x01\x4d\xbb\xdd\x8b\xd8\x64\x6c\x28\x1b\x6f\x03\xc3\x1b\x8b\x58\x98\xc8\x09\x93\x5a\x9f\x5d\xd2\x73\x88\x38\x19\x37\x45\x45\x3f\xfe\x1f\x0a\x5f\x87\x9f\x3b\x51\x11\x6c\x08\x8a\x62\x34\xfa\x79\x68\x4d\x14\xd4\xdc\x41\xaa\x2b\x7b\x1a\xd4\x9b\xc3\xb7\x92\x9a\xf6\x85\xb1\x43\x37\x55\xff\x4b\x26\x1c\x53\xa5\x29\xec\xae\xce\x8d\x08\x53\xd7\x8a\xd9\x63\x89\xc6\xb4\xe1\xe1\xa7\x3a\xee\x8c\xe3\xbf\xd6\xed\x18\x79\xac\xcc\x95\x0d\x12\x57\x3f\x3b\x7a\xcc\xc0\xff\xbb\x11\xcc\x63\xe6\xc6\xd8\x5a\xb5\x3e\x3c\x83\x3e\x5e\x4f\x30\x6d\x18\xe8\xeb\x75\x12\x1a\x77\xf7\xdb\xc1\x1c\x21\x05\xb8\xb7\x5f\x00\xf6\x05\x79\x13\xee\xde\x83\x2c\xc8\x5b\x71\x8e\x65\x56\xba\x80\x0f\x62\x27\xf7\xe6\x47\x99\xc1\xa7\x69\x9d\xaa\x6d\xbe\xaf\x52\xfa\xd7\x81\x02\x0d\x25\x0f\xea\xe8\xdf\xda\x5a\x89\xec\x97\x82\x11\x51\x9c\x04\xef\xbd\xeb\x5e\x7c\x56\x5e\xb7\xdf\xbe\x65\x38\x6d\x20\xfb\xfc\x15\x98\x59\x6b\xf9\x0d\x07\xca\x6e\x32\x8f\xe4\x52\x36\x7e\x56\xe9\x35\x32\x49\x9c\xbc\x1e\xa1\xf0\x7d\xbb\x9c\xba\x3f\xc2\x4d\x65\x0a\xa8\xbe\xc3\x7a\xa0\x61\x73\xea\xeb\xf8\x3b\xbf\x8c\x52\xeb\x62\x81\x5a\xd4\x46\x82\x1e\xf2\x31\xec\x50\xe9\x6d\x5b\x5e\x0c\xce\x86\x7d\x3a\xd0\x74\x2a\xdd\x6b\x56\x2c\x6d\xae\x7b\x9c\xb1\xf6\x57\xab\xae\xea\x45\xdd\x0d\x2b\xe7\x12\x3d\x37\x85\xa6\xa8\x49\xd3\x17\xbd\xd7\x4f\xe0\x45\x54\xc8\x47\x95\x0a\xe3\x7b\x31\x6c\x4c\x24\xa5\x11\xb7\x64\x30\x33\xc7\x91\x29\x92\xef\x38\xf0\x2e\x55\x30\xb6\xf5\xcd\x09\x7f\xeb\xdf\x7f\xa6\x88\x1b\xa5\x34\x2a\x31\x48\xe8\xf8\x97\x81\x23\x8b\xf0\xb4\xd3\xe3\xbd\x8d\x92\x61\xa0\x8c\x8a\x5c\xf7\x14\xa2\xd4\x45\x2b\x40\xf9\x5a\x7a\x51\xd6\xcd\x2b\x50\xd2\xfd\xf6\xf8\x06\x05\xb9\x86\xd2\xb5\x53\xe4\x93\x65\x0b\x2b\xee\x7e\xec\xfb\xd5\x2a\x7c\xa3\x75\x50\x77\x9c\x93\xbc\x4e\xe8\xb1\x66\xb7\xe3\x10\x96\x53\xb1\x8e\xd5\x40\x9d\xd3\xe9\xc4\x51\x77\xab\xb4\x35\xf8\xfd\x82\x22\x59\xe8\x4a\xc6\x5f\xa3\x69\x45\x17\xf2\x0c\x02\xd5\x0c\xf9\x55\xbf\xe9\x0e\xf1\x85\x61\xf5\x2e\x2f\x68\x8e\x92\x5e\x14\x36\x02\xf4\x0a\x1d\xb3\x23\x6a\x00\xa3\x5c\x76\xbf\x95\xd8\xc9\x30\x4a\x1d\xf5\xb4\xa8\x2f\x0e\x36\x99\x82\x03\x9f\x55\x09\xb1\x86\x84\xef\x58\x21\x1b\x06\xc8\x67\xe0\xfe\x1a\xe5\xee\xc4\xe7\x45\x30\xe4\x0c\xd5\xe8\x3b\xa2\x19\x71\xa3\x37\xf5\xd3\x94\xc1\x69\x4d\xba\xd8\xa9\xfa\x5a\x38\xb0\xe1\x33\x06\xc6\x65\x9e\xe0\x22\x7f\x5d\xad\xe0\x09\xba\xfb\x0d\xe9\xd4\x27\xbf\xc4\xa4\x7e\xc9\x17\xf1\xbb\xc2\x2a\xca\xd1\xd7\x5a\x22\x3b\xc7\x07\x6b\xfc\xc9\x94\xdd\xba\xd8\xc3\xb5\xfd\x86\x1f\xbd\x47\xab\x2a\xfd\x69\x4c\x9c\xe8\xaa\x6c\x9e\x8e\x1d\xf1\x7f\x93\xd3\xfe\x50\xee\x01\xb3\x29\x6e\xde\xf9\x2b\xee\xb2\x82\xf5\x48\x9f\x05\x6b\xe3\xf5\xe8\x6d\x1b\x0e\x32\xe1\xec\x07\x69\x10\xd8\xd7\x43\x4b\x10\xb7\xf4\xe6\xc0\xad\x3a\x16\xd8\xfc\xf2\x15\x0e\xfa\xa9\x03\x72\x95\x04\x85\x8c\xdd\x33\x20\x1c\x96\x78\x8f\xad\x07\xc3\x31\x72\xf0\xcd\xf3\x58\x8e\x04\xd0\xf4\x81\x5c\x0c\x93\x0e\x82\x80\x4b\xbd\xb9\x50\x62\x04\x09\xb7\xf2\x5c\x7f\x99\xea\x1b\xb6\x4d\x64\x5a\x4f\x31\x5b\xae\x08\x04\x20\x15\xa5\x4e\xc2\xc2\x6c\x32\x4a\x7b\x70\xe4\x1b\xcb\xe8\xbb\xa1\x42\x95\x24\x4f\x3e\xec\x7e\xaa\x2b\x52\x66\x47\xdc\x5f\xa7\x58\x81\x06\x8c\xb5\x80\x43\x0b\x13\xfb\xa9\x00\x53\xf3\xe4\x35\x52\xd6\xc2\xb9\xfd\x7d\xef\x22\x04\x0f\x42\x21\x87\x9b\x1e\xef\x63\xd6\x07\x43\x10\xbe\xdb\x75\x77\x42\x52\x07\x7d\x90\xfe\xee\xd4\x49\x8b\x9c\xee\x90\x2f\x25\x5a\x3b\xf7\x34\x33\x9e\x31\xe5\x95\x6c\xae\x6a\x0f\x31\xa0\x90\x3b\x74\x77\xb4\x4d\x5f\xdf\x45\xc3\x60\x36\x7b\x62\xf5\x39\xfd\x2e\x5e\xd3\xae\x36\x6d\xcf\x57\x7f\x6e\xb8\xc5\x24\x44\xbb\x18\x44\xa4\x70\xb3\xc3\x90\xe4\x79\x7c\x26\xf6\xa3\x6c\x79\x15\x18\x35\x91\xa6\xeb\x14\xf3\x71\xb2\x1a\x26\x5d\x1a\x2f\xc5\xfd\xf2\x37\x13\xda\x5f\xa3\xe9\xb6\x93\x55\x4c\xf8\xd8\x8b\xec\x10\xaf\x47\xd3\xac\x8c\x59\xe9\xb1\xe6\x42\xaf\xb7\x64\xf0\x72\xd6\x24\x78\x8f\xe3\x93\x37\xc0\x70\x5f\xf0\x80\x5c\xb3\x6b\x21\xce\xc6\xc3\xab\x2d\xf9\xb3\xf9\xc6\x27\x88\xe5\xd9\x95\x5f\xc6\x3e\x44\x67\xb5\xc1\xbe\xbf\x62\x68\xc0\x3f\xf0\xcf\x54\x26\x03\xbe\x7f\xe8\x5a\x30\xf1\x6f\xa7\x80\xbe\x1b\xb9\xac\xe4\x08\x4d\xb4\xa4\xb6\xdf\x6f\x84\xea\x2a\x3e\x56\x9b\x83\x7b\x05\x1f\x43\xca\x4b\xef\x6a\xfc\xe7\x0b\x95\x87\x62\xda\xa9\x8b\xf6\x48\x94\xef\xcf\xa2\xe3\x85\xd7\x4b\x56\x9e\xa6\x9b\xfe\x41\xfe\x00\x8a\xdd\x9a\x4b\x6a\x6a\xc6\xbb\x80\x0e\x6f\xa7\xfc\x68\xeb\x8b\x7b\xb3\xbe\xcf\xbe\x3e\x9e\xc3\xb3\x79\x2d\x6a\x91\x2b\x17\x4b\xd8\xdf\x59\x39\x75\x6f\x0b\x9a\x53\x4f\xe3\xa0\x1e\xd1\x0b\xa9\xce\xaf\x93\xf7\xf1\xe9\x51\xa1\x5b\x4e\x1e\xa1\x59\x27\x7d\x8d\xce\x67\x9e\x07\x96\x0a\xb3\xcf\x8f\x76\xe3\x3b\x6e\xfa\x3e\x29\x7d\xcb\x9e\x15\xaa\xc4\x67\xe1\xea\x93\xa6\x04\x43\x2e\x52\x5f\xd9\xc9\xaa\x77\xd2\x80\xf2\xbe\x8a\x1a\x65\x61\xc9\x62\x1e\xfd\xa6\x4d\xdf\x16\x94\x1a\xfc\xc0\x22\xdd\x43\x0b\x7f\xe9\x94\x2b\x47\x56\x9d\xe1\x84\xee\x4f\x7e\xc0\xa8\x3c\x0b\x11\xeb\xe4\xc0\xc1\x95\x93\xbb\xe8\xfd\x45\xc6\xfc\x5c\x5c\xd5\x0e\xf1\xcf\x65\x63\x3a\x95\x63\xb3\x02\xe5\x31\x6c\x40\x7f\x49\x29\xa8\xfb\x54\x5e\x8e\x92\x5c\x55\x25\x14\xf9\x38\x97\x79\x5c\xb0\x68\x2c\xc6\x65\x13\xb3\x99\xac\xca\xde\x8c\x16\xd9\x1b\x17\xb8\x09\x39\x75\x6a\xd8\x0e\x4f\x96\x44\xca\x1c\xbb\x87\xf9\xdf\x29\x7f\xb3\xd6\x4f\x7e\x46\xfc\xc1\xf9\x21\x3d\x9f\x7c\xe3\xea\x34\x1d\xa8\x2b\x30\x08\x68\xee\x84\x94\xe2\xe5\xab\x08\x13\x6b\x47\x0c\x49\x9b\x1a\x22\x0f\xe1\xac\xb1\x4c\x8f\xcb\x8b\x6e\x14\xb7\x96\xf1\x02\xe0\x0f\x99\x1d\x5d\x5e\x07\x3f\xad\x5c\x35\x60\xb3\x3c\xe8\xe6\xb7\x77\x4d\x89\x4e\xdc\x55\x31\xdf\x88\x3d\x76\x1a\x5a\x68\x78\xde\x9b\xfc\xf7\xcc\xfe\xe7\xe1\x27\x8e\x8c\xfe\x7f\x80\x28\xa5\x14\xf3\x82\xab\x1f\x15\x87\xcd\x4c\xaa\x7e\x8f\x23\x73\xe3\x61\xd8\x52\xe0\xa7\x67\x64\xb1\x7e\xee\x4c\xe6\xf0\xfc\x10\x03\xb2\x15\xe5\xa1\x7a\x2b\xb6\x0b\x86\xf1\x72\x51\x0f\x74\xcb\xf0\x60\xca\x87\xfc\x3a\xcf\x1c\x51\xb4\x91\x41\x85\x89\xf5\x3d\x1c\x53\x2b\x03\x9a\x0a\x93\x60\x3f\xc0\x7d\x33\x6b\xa9\x54\x3a\x64\x87\x1e\x9d\x51\x5d\x2f\x66\xc0\xe6\x62\xef\x0e\x49\xe0\x6c\xc5\x4c\x7b\x18\x05\xd9\x52\x1a\x35\xb7\x08\x63\xfc\x09\xfe\x24\x22\x3e\x7f\x11\xff\xd6\xaa\xe9\xf2\x46\x77\xf8\x7e\x73\xf5\x2a\x9b\x64\x91\x46\xb1\x69\xa1\xfb\x3f\xfe\xc8\x7f\x1d\x16\x41\x62\x94\x10\xe4\x00\x03\x06\x7f\xcf\x1f\xc6\xd6\x25\xf5\x84\xbc\xbe\x9f\x83\xa8\x11\x02\x69\x85\x14\x41\x58\x5a\xeb\x3c\x53\x49\x59\xdc\xd4\xc6\x49\x5b\xe0\x2b\xb7\x6e\xf9\x4d\x78\xc4\x03\xa4\x72\x2a\x74\xdd\x1e\x4a\x9e\xf4\xc9\x2a\x73\xa4\x37\x5b\x4c\x6f\x96\x3d\xff\xee\x9f\x01\x55\x8a\x94\xbf\x1b\xb1\x14\x97\xe8\xc3\x2b\xb4\x86\xfa\x94\xad\xa9\x47\x70\x0a\x2d\x3e\x97\xea\x49\xd7\xd0\x1e\x6f\x15\x4b\xb2\xc2\x3b\x46\x58\xae\x0d\x4c\xac\x42\xd9\x4f\x2d\x93\x8c\x99\x14\xb3\xa9\x6b\x68\x74\x1e\xf2\x7e\xc6\x4e\xcf\xcd\x5d\xda\x7a\x28\xf7\x46\xa9\x3b\xac\x7a\x08\xe7\xbf\x3d\xfb\xd7\xd1\x16\x24\x0e\x05\x01\xc1\x0e\xec\xd9\x6b\x43\x0e\xd9\x1a\xd4\x0f\xb0\x91\x12\x18\x94\x10\x17\x27\x4a\x5d\xb1\xeb\x87\xa3\x39\x9a\x7a\x7d\x5e\x98\xa5\x15\xd3\x28\xca\xc0\x20\xcc\x6d\xb2\x67\x9f\x33\x48\x71\xcb\x2d\xca\xce\xa7\x5d\x16\x8e\x69\x3d\x94\x65\x48\x92\x97\x8b\xd6\xa3\xf1\x7d\x12\x60\x86\x40\xae\x37\x94\x03\x97\xfb\x26\xb3\x06\x56\x8d\x50\x71\xa1\x3b\x77\x4d\xaa\xe3\xae\x18\x89\x69\x28\x31\xd5\x37\x9c\x66\x83\xaf\xa7\x34\xc1\x8c\x55\x75\x51\xd5\xc7\xb5\x8b\xa9\xec\xd9\x18\xbc\x4d\x3e\x9c\xc3\x3a\xdc\x6f\x06\x10\xa7\xca\x51\x41\x89\xdc\xdc\x44\x78\xb5\x15\x15\x37\x73\x90\xff\x8f\x87\x86\xa8\x11\x48\x5a\x32\xf4\xbd\x8e\xa3\xcd\x94\x69\xbe\x0f\x1b\xeb\xc8\x62\x75\x41\x7c\xe5\x1b\xcf\x01\xe1\xe8\x0f\x42\xc9\x8b\xcc\x1c\x95\x92\xcf\x20\x31\x9f\x2e\xad\x78\x10\xb5\xce\x45\x3e\xb9\xd4\x67\x57\x02\xfa\x1b\x4c\x49\x57\x77\x69\xcd\x54\x07\x23\xa3\xee\xa3\x21\x6a\x55\x0b\xa0\xbc\xf3\xb7\xef\x41\x29\x52\x5c\xbe\xcf\x8e\x6c\xc6\x10\xf1\xab\xaf\x44\x55\xf0\xd5\xa9\xcf\xa3\xb1\x88\xf6\xe8\x7b\x28\x4f\xcb\xa6\xa0\x36\xa5\x37\x82\xa8\x36\x29\x9a\xc1\x0c\x1b\x04\x7b\x62\xb0\x9c\x9a\xcf\x6e\x59\xe0\x56\x30\xb4\xf2\x24\x19\x6d\xb3\xad\x1e\x4b\xcd\xc6\xcd\xec\xff\x40\x51\x1f\x25\xda\x9c\xc5\xeb\x07\x11\x0a\x5f\xc5\xee\x08\x77\x9d\x09\xa0\xd0\xbf\xef\xef\x20\x58\xcf\x55\x76\xef\x1f\x47\xc2\x5f\x0e\x0d\x12\xbf\xf4\x79\x79\x00\x29\x3f\x4d\xc6\x71\x42\x7f\x1d\x94\x68\xf7\x6b\x4c\x4d\x68\xb1\xdc\x75\xff\xbc\xb5\x67\x33\x83\xa3\x67\x5b\x95\x14\xd6\x90\xcb\x0a\x01\x61\xb2\xf4\x4a\x12\x5c\xbc\xc5\x09\x69\x86\x93\xfc\x0d\x14\x3a\x32\x92\xe4\x2b\x71\x95\x8c\x05\xef\xc3\xa2\x3d\xa3\x29\x84\xca\x19\x9b\x81\xa6\xbc\xd1\x70\xae\x88\x2f\xef\xbb\xd0\xdd\x5b\x36\x70\x2f\x6f\x37\x7f\xee\x73\xc8\x21\x73\xe4\x56\xaf\xd8\xa9\xe2\x3a\xef\x36\x81\xd1\xe2\xb6\x28\x84\xa3\x2a\x61\xa7\xfa\x55\x4d\x77\x52\xd2\xf7\x8e\xac\xd6\x51\x38\x96\x3a\xb4\x6e\x31\xe9\xa7\x9b\xc5\x23\x8c\xe8\x80\x2e\xdb\x6c\xc7\xee\x9f\xe9\x5a\xf4\xe6\x9d\x9a\x76\x21\xa6\x40\x2a\xc3\xb6\x3e\x5a\xe1\xb2\xdf\xfa\x1a\xfc\x87\xd1\x85\xdf\xed\xd4\x46\xc0\x48\x0a\x7a\xe5\xdc\x17\x7c\x65\x26\xed\xf7\xaa\x11\x19\xe2\x9f\xbb\xbd\x5c\x08\x92\x2c\xbe\x11\xb5\xcb\xb2\x97\x28\x39\x1d\x48\xd4\x00\x68\x9b\xc5\x12\x79\xab\xaa\xf2\xb4\x37\x41\x58\x4e\xe4\x75\x6b\x43\x07\xd9\x9c\xf0\x4f\x55\x0f\x6f\x9d\x52\x79\xe5\xb8\xfc\x51\x41\xb0\x53\x91\x7d\x76\xb2\x76\xd0\x45\xe9\xf1\x60\xf4\x02\x14\x9d\x1f\xe3\x30\x4f\xa5\xca\xd3\xde\x67\x57\x9d\x86\xab\x3f\xdf\xc9\x68\x74\xfe\x1a\xed\x42\xf7\x55\x6d\x59\xef\xea\x84\x15\xf6\xcd\x2a\x91\xf5\x52\xff\x74\x39\x79\x90\x2d\x33\xe6\x24\xa4\x06\x7d\x07\x81\xb3\x0c\x42\x0d\x58\xc6\x5a\xd5\x07\x54\x57\x5d\x50\x67\x67\xed\xa2\x63\x65\x2f\x59\x8b\x31\x71\x95\x65\x21\x92\xdf\x09\xcb\x1a\x9a\x21\xbe\x02\xca\x61\xaa\x6d\x61\x5c\x8b\x6c\x9a\x88\x31\xf5\xeb\x68\xdc\xac\x83\x29\xb7\x5f\x64\x99\xf8\x9c\xb8\x2d\x25\x76\x95\x87\x56\xea\x56\x7b\x01\xa3\x9a\xcc\xf0\xc5\x07\xfe\x8d\xa2\x06\x42\x55\xa7\xf5\xb6\x64\x3b\x9f\xd3\xad\x8f\x53\x29\xce\x28\x72\x44\x26\x77\xbe\x52\xcb\x73\x03\x23\x15\xf4\x92\x94\xd9\x6d\xeb\x5e\x31\x80\xeb\x09\x27\x30\x4c\xd0\xad\x80\x56\x2c\x35\x50\xf3\x76\x48\x0e\x7b\x4c\xa8\x6e\x03\x5f\x72\xcd\x82\xab\xc1\x83\x76\x8f\x52\xcd\xbf\xc7\x24\xdf\xcb\x8a\x54\xf4\x2b\x77\xe0\x5a\xf4\xc8\xfc\x0e\x80\xff\x92\xac\x23\xe0\x65\xf7\xd7\xe8\x34\x93\x6d\x11\x76\x14\x81\x27\x3c\xcb\x35\xf5\x33\xe2\x1d\xf9\xc9\x85\x13\xb2\x39\xa5\x4d\x0e\x32\x26\x0d\x5c\xaf\x65\x30\x48\x1f\xe7\xa3\xb4\x7b\x21\x51\x2c\x61\xd9\x98\x17\xa9\x9a\x5e\x51\x78\xce\x8f\xd2\x67\xd6\x89\x87\x1c\xc4\xbd\x2b\x90\x27\x69\x2f\x8f\x07\x92\xe8\xd9\x5e\x9e\x1c\xde\xe9\x7f\x9c\x3b\xbf\xcf\xf4\x69\x8e\xb0\xed\xe2\x8f\x0b\xc9\xe6\x25\xb9\xc6\x46\x42\x5a\xbe\xdd\x4a\xae\xfa\xdb\xff\xd1\xd3\xa2\x9f\xd3\x23\x97\xf9\xd6\x68\xf9\xb8\xce\xa1\x34\x7d\xcb\xc1\xf2\x98\xe1\xbc\x2b\xed\x48\x3e\x05\x1a\xc3\x95\xc4\x3e\xe8\x3e\xd0\xbb\x2f\xf8\x0b\xf6\xc2\xca\xb4\x64\xc9\x6f\x95\x8d\x44\xdb\x04\x78\x21\x15\x08\x37\xe1\xb2\x76\xe6\x9b\x0e\x40\x1e\xa3\xf1\xfe\xbd\x3f\x35\x03\xe8\xf3\x5d\x52\x1e\x05\x96\x59\x10\x66\x5e\x30\x90\xcf\xdb\xbf\x7f\x73\x45\xd8\x0e\x58\x33\x10\x6b\x56\x33\x95\xe9\x00\xbc\xf2\x2d\x11\x12\x05\x4c\xb7\xb4\x91\x02\xc5\x5f\xfd\x6f\x12\x08\xb7\x69\x87\xbf\x55\x2b\x91\x4b\x5c\x0f\x6d\xe6\x91\x7e\x3d\x5e\x94\x05\x4a\x1d\xf3\x1f\x5f\xc1\xd4\xdc\x76\xec\x94\xe1\x7c\x66\xf9\xea\x44\x45\xcb\xa2\x6d\xa8\x4e\x3f\x7c\xf4\xae\x07\xa9\xdc\x46\x61\xe4\xff\xa8\xbb\x74\xc9\x77\x37\xc4\x3b\xc5\x71\xbd\x15\xb1\xea\x72\x5c\x25\x7f\x8d\x0c\x21\x52\x5e\x6c\x21\x40\x8f\x22\x44\x28\xe1\xa2\x69\x53\xf1\x77\xa5\x52\x7f\x78\xbf\x5e\xae\x58\x8e\x97\x21\x20\x8b\x96\x6f\x2c\xfa\xda\x8b\xdc\x9d\xf3\x05\x8f\x20\x54\xb4\xb2\xd3\xeb\x28\xe4\x09\xc0\xc4\xac\xc9\x9b\x98\x07\x1e\xad\x0f\x62\x05\x22\x7d\x53\x1d\xcb\x6d\xb9\x6d\xad\x51\x92\x39\x9e\x0d\xd5\x2e\x61\x6c\x7c\xb7\x7b\xf4\x1d\x70\x1f\x58\xa3\xba\x61\xc8\xd2\x31\xf3\x25\x84\x10\xe3\x51\x8c\x3e\xfa\xcc\x24\x37\x49\xb1\x1f\x57\x74\xaa\xbb\x1c\xe9\xaf\x50\xfa\x95\xfd\x35\xea\x31\x69\x27\x75\x62\xd6\x8b\x39\x84\x11\x87\xc7\x3e\x34\xdb\xcf\xf2\xd5\x32\xe2\x25\x41\xf3\xbb\x52\x48\x79\xf0\x1e\xf3\x31\x10\xc7\x7b\xc2\xb1\x0d\x22\x76\x0f\x9f\xf2\xd5\x91\x93\x8f\x66\x96\xa9\x80\x29\x6e\xa3\x3e\x9a\xa5\xe6\xa6\x75\xa0\xd6\x5e\x1b\xd9\xe6\x03\x79\x7d\x1a\xd0\x12\xa8\x85\xb1\xa6\x3f\xd5\x6b\x5d\x76\x1e\x1c\xbf\xab\xc9\xb9\x5e\x9a\xd9\x13\x9c\x35\x20\xc5\x41\x5b\x4c\x10\xb9\x07\x46\x8a\x6c\x9d\x53\xac\x38\x86\x1d\xcc\xc4\x68\xa5\xcf\x2c\x25\xa3\xae\x97\x7a\xf0\xce\xb4\x35\xeb\xe7\xa6\x64\xc0\xb3\xb1\x79\x3e\x50\x12\xdb\xd8\x2f\xba\xae\x55\x4e\xdf\xfa\x44\xd5\xab\x31\xe1\x1e\x1c\xb4\x14\x55\xf1\x82\xe5\xcf\x7a\x4a\xdf\x45\xe2\x28\x63\xf9\x15\x90\x81\xb9\x1d\x39\x35\x51\x2a\x88\xdc\x86\x70\xf8\x88\xf5\x94\x6b\x64\xd7\x79\x1e\xfb\x3a\xfd\xd3\xd9\xab\xec\xb2\xb1\x09\xff\x5f\x98\x20\x2e\xf6\x04\x8d\xf6\x9c\xb9\xf6\xb9\xa0\xf8\xed\xf7\xc7\x01\x5a\x88\x0f\x30\x55\x8f\x1c\x8c\xba\x21\x46\x4f\x7b\xee\xb7\x46\x65\x4d\x4e\x40\x53\x35\x7f\x1b\xc7\x19\x05\xf5\x3a\xe4\x14\x82\x71\x83\x58\xe2\xd6\x65\x3d\x67\xdf\xa9\x2b\xb8\x6c\xc4\x7c\xf5\x3a\xa4\x9d\x0f\x37\xc0\xa4\xc8\xfb\x34\x5a\x69\x9e\x15\x58\x04\x8f\xa4\x29\x9e\xa7\x75\x5e\x7d\x31\x25\x22\xe3\x1e\x30\x8f\x34\xe9\xac\xa9\xcf\x3a\x40\x00\xfc\x4c\xed\x9a\x88\xb4\xd2\x9b\x7a\x33\x73\xd6\xb1\x93\x97\xd7\x6c\x78\xa8\x53\x9d\xee\x68\x2e\x77\xf8\xee\x49\x6b\xef\x7f\xf2\x36\x5e\xfd\x6d\xb9\x27\x38\x33\x31\x80\xe8\x7e\x47\x80\x75\xf0\x69\x86\x42\x4c\xdc\xd5\x37\x6d\xf2\x26\x95\xc7\x42\x87\xab\x99\x54\xf8\x0d\x6f\x14\xf0\xf3\x59\x13\x2c\xff\x4e\xb4\x76\xdb\x94\xe7\xbf\x5b\x30\x0e\x82\x08\x72\x46\x76\x76\x89\x87\xeb\xd7\x7a\x12\x11\xbe\xc9\x11\x26\x01\xc0\xab\x3b\xaa\x8c\xb9\x53\xfa\x6a\x22\x5a\x04\x56\x6e\x26\xfd\x83\x78\x70\x1d\xbc\x6d\x0f\xa3\x69\x86\x0e\xee\x37\xf9\x54\xa5\xdc\x60\x56\x3d\x50\x6b\xf4\x00\xcb\x25\xbc\xce\xbc\xdb\x3d\x57\x20\xe7\x77\x2d\xcd\x38\x9c\x30\x4c\xfb\x54\x92\xc4\x9e\x5f\x27\xbf\xd4\xdb\x34\x30\xde\xaf\xe9\x70\xbb\x88\x4d\xf4\xea\xfd\xbb\x53\x48\x0b\x12\x5c\x51\xaa\x6e\x4c\x7b\xac\xde\xba\x51\x19\xe7\xda\x89\x57\x29\x38\x24\x40\xf1\x72\x5c\xf6\xb7\xc6\x3b\x97\xec\x66\xd4\xa7\x22\x48\x67\x4e\x46\x2e\x4f\x33\x16\xd6\xa0\x13\x8e\xd2\xa8\x5b\x9a\x85\x1c\x57\xb0\xc0\xca\xde\x60\x58\x19\xba\xc5\x2b\x2b\x19\xba\xe6\x01\x61\x19\xe7\x63\x4a\x39\x0c\x9a\xf6\x49\xcc\xe9\x7b\xef\xc9\xe7\x25\xdd\x36\x87\xff\xdc\x85\x7f\x1d\x12\x41\xa2\xac\x30\x80\xbb\x90\x9f\xba\x36\x1f\x75\xcc\xdc\x65\xe9\xa4\x90\xbb\xb0\x08\x41\xf8\x5a\x42\x6f\xc8\xf3\x3d\xd2\x1f\xdd\x27\x09\xcc\xa5\x85\x81\x2b\x60\x5e\x4d\x43\xb6\xf3\xd9\x46\xa9\x7e\x35\x4d\xe6\x90\x13\x1a\xfb\xfd\x2a\x73\x3d\x97\xf3\xc4\xa2\xb7\x36\x7f\xec\xbd\xfa\xaa\x4d\x92\xfe\xce\xeb\x7e\xa4\x47\x30\x28\xa0\xca\x3e\xc8\xe1\xf4\xcd\x57\x91\x7d\x62\xb9\xfb\x32\x28\x05\x59\x09\x52\x55\x7a\x84\xba\xbd\x60\xb2\x11\x60\x5e\x63\x7c\x46\xd0\x56\xb2\x77\x16\x98\x30\x73\x85\xa6\x32\xc3\xbc\xb9\x51\x5c\xea\xbe\xe9\x61\x13\xb2\xa6\x94\x63\xcd\x1a\x42\x55\x37\x55\x50\xff\x8f\x47\x8a\x38\x3c\x94\x28\x14\x80\x0a\x5b\xfc\x09\x05\xbf\xab\x5f\x8d\xd9\x2a\x82\x4d\x9c\xc2\x43\xc4\x31\x93\xe7\xb1\x03\x51\x7d\xa8\xb1\x7a\x0e\x65\x59\x81\x3d\x47\x01\x0e\xa2\xee\x06\x93\xfe\xf8\xcd\xb9\x82\x88\xa3\x4d\xae\x13\x3e\x01\xdc\x4f\xe4\xb0\x16\x92\x0f\xb8\x2a\x5d\x3d\x24\x69\x65\x91\xe0\x73\x2f\xef\x9d\xaa\xbf\x40\x47\xcf\x96\x47\x86\x5a\x84\xe8\x30\x5e\xb0\x7e\xd7\x10\xca\xe6\x94\x37\x24\xc6\x4a\xb3\xc3\x4d\x37\x0f\x18\x70\xf0\x96\x19\x08\xa1\xae\xc8\x57\x86\xae\x76\x4f\x9b\x43\x43\x34\xd9\x1c\x9a\x81\xd2\x1c\x17\x3a\x3d\x1f\x5f\x3f\x79\x7a\xed\x04\xc0\x68\x03\x3f\xb1\xfa\x55\x1f\xc4\x47\xf0\x41\x96\x8d\x31\x5a\x0f\xc2\x6c\x34\x8a\xb0\xd8\xda\xab\x4c\xa0\x34\xa4\x93\x79\xa1\x17\x82\x79\xba\x8c\x53\x11\xa7\xb2\x93\x04\x08\xf2\xfe\xf1\xa6\x55\x5a\xae\x6f\x62\x3e\x5c\x99\x33\x72\x2b\xb2\xb0\x42\xf4\x9a\xd5\x42\x06\x98\x37\x15\xff\x8b\x7a\x7d\x97\x0a\x4a\xf6\xe2\xce\xf5\x44\xa3\xd9\xb1\xcd\xf2\x24\xa4\xdd\xd4\x5f\x73\x2b\x5c\xc4\xba\xe0\xa0\x82\x0c\x6a\x0b\xb6\xb9\x0a\x12\xaf\x66\x38\x9b\x07\xc8\x7a\x8a\x2e\x1a\xbd\x48\xa6\x33\xd6\x47\xa6\xe9\x70\xcd\xf5\x45\x24\xe3\x53\xb1\xe0\x36\x07\x4f\xa0\x35\xd4\x9a\xed\xec\x67\xc1\xcf\xb6\xf2\x08\xb9\x04\x72\x98\x93\x95\x52\x30\xf2\xb3\x6a\xf3\xde\xa7\xda\xc5\x37\x9d\xb7\x5c\xf6\x6b\x2c\x9f\x5e\x54\xc9\xd7\xbe\x81\x41\x3a\x66\xd4\xb7\x5e\x75\x7c\x9c\x72\x84\x35\x25\xdb\xac\x05\xd5\x0a\x7e\xfa\x3f\xc3\x5a\xde\xfd\x81\xef\xef\xa9\xf7\x37\x4b\xed\x02\xeb\x9e\x2b\x25\x11\xf9\x0e\xba\xc9\x5e\xe9\x38\x87\x2d\xee\x46\xef\x84\x51\xa3\x69\xef\x23\x95\x6b\x57\x69\xf4\x2e\x32\x1d\x7d\x13\x04\x03\x09\xf4\x45\x51\x75\xfe\xc6\x59\x55\x41\x5a\x47\x88\xa6\xdf\x9e\x6b\x8c\x35\x52\x16\x3e\xd0\x52\x14\xe1\x74\x14\x6f\x5f\x54\x63\x17\x03\x0f\x59\x93\x83\x65\xcb\x46\x85\x3c\x08\xe5\x4f\x83\x82\x9d\x81\xee\x8a\x72\x98\xd0\x88\xf3\x89\xf3\x52\x8c\xb3\xd2\x3f\x42\x1a\xcd\xc0\x4b\x4b\x37\xc4\xae\xaa\xc6\x73\xa1\xf5\xf6\x0e\x7f\x0e\xe7\x1d\x87\xd8\x4f\x3d\x75\x1d\x93\xc2\x31\xe8\x7d\x7f\x8a\xbd\x72\xa2\xf3\xbe\xbf\xfd\x13\x19\x34\xb8\x39\x75\x9c\xf1\xbb\xe0\xb9\x0a\x34\x76\xfd\x10\xd0\x7f\x20\xd3\xea\xc3\xd7\x37\xe9\x33\x25\x10\x75\x47\x61\x06\xaa\xfd\x66\xf2\xeb\xbf\xf5\xb3\x8a\xbd\x9d\xfb\x73\xed\xb7\x40\x4c\x81\x33\xd6\xe0\xff\xb5\x92\xba\xc0\xf2\x5c\xd5\x62\xf7\xb4\xa0\x08\xac\x8b\x64\x98\x91\x62\x6a\x28\x78\x79\x44\xed\x85\x50\x44\xaa\x59\x9a\x79\xea\xa0\x5b\x08\xa9\xcf\xbc\xe5\xd1\xc8\x80\xf8\x6d\xb1\x03\x88\xea\xab\x06\x9c\x09\x98\xda\x70\x92\x9b\xd0\x73\xa8\x3c\xdf\xb1\x84\x17\x94\xd8\xc2\xe0\x98\xb4\x18\x70\xeb\xbd\x8d\x33\x21\x59\x3f\x02\xcb\x56\x44\xda\xe4\x3e\x7a\x7a\x25\xef\xf0\x18\xdb\x57\x48\x18\xa7\x25\x3a\x48\xfa\xca\xf1\x1f\x19\x79\x93\xbe\x36\xb2\x25\x3f\x7a\x03\x06\xdd\xe0\x6d\x4e\x2f\xfc\xd0\xd4\xa5\x86\x57\xba\x0d\x8c\xd7\x35\x97\x17\x51\x51\xc2\x9d\x0f\x9e\x73\x04\xe0\xdc\x11\xa3\x88\x01\xc9\x67\x43\x98\xa9\x61\xcd\x81\x98\x9f\xf1\x34\xd8\x9f\xb1\xb8\xd4\x90\x62\x03\x76\x35\x43\x3a\xca\xa4\xa3\xef\x74\xe9\x14\x7a\x8d\xb5\xc0\x45\xd5\x36\x4d\xe7\x8c\x70\x52\x5d\x4f\xc3\xc4\xa2\xa7\xbb\x8f\x97\x9a\xd8\xf6\xdd\xbd\xd5\x38\x80\x3e\xcb\x0d\x1a\xb9\x1c\xcf\x22\x05\x9a\x06\x7b\xd7\xcd\xec\x60\x11\x7a\xd1\x7a\x29\xc8\x1c\xda\xc7\x57\xe2\x6c\xde\xa5\xd2\x9e\xd3\x53\xe0\xa4\x31\x5b\x59\xeb\xa3\xab\xfd\xbd\x60\xa2\x4a\x26\x53\x9d\xbf\xd3\x3c\x62\x48\xb6\x90\x5e\x4d\xea\xbc\xb7\x46\x79\x03\x1d\x21\x45\xed\x87\x25\x44\x31\xed\x43\xfb\xf1\xeb\xdf\xa1\x7e\xc9\x47\x52\xa1\x3d\x8e\x60\xba\xba\x70\x38\x5a\xfb\xf0\x2b\x20\x5a\xea\xba\x20\xb3\x60\x8b\x68\x9a\x34\xe8\x03\x4f\xd3\x31\x10\x48\x18\x51\xff\xcd\x81\x5a\x5a\xe5\x01\xab\xc2\x2c\x63\x82\xa8\x2e\x86\xdc\xfc\xc5\xae\xe7\xf8\x59\x6a\x24\x33\x00\xf5\x67\xb4\x23\xa8\xe4\xfe\x35\x8a\x8c\x89\xc3\x6f\x32\x9a\xf5\xf3\x3c\x1c\x5d\x53\xe4\xd5\xc0\x1b\xbd\x33\xf6\x78\xed\x09\x12\xb6\x1a\x62\x5d\x18\xea\x66\x70\xfe\xaa\x83\xce\x3f\x53\xcc\x55\x90\x0b\x99\x97\x68\xba\xf5\x6e\xbf\x85\x5f\x44\x44\x95\xf9\xbc\x8d\x9d\x54\xb5\xc8\xb1\x97\x35\x93\xfd\x6b\x55\x48\x90\x36\x75\xca\x92\x29\x9f\xb0\xd8\xd4\x37\xdd\xb9\xfd\x7c\xe4\xa3\xce\x93\x96\x0c\x83\xf8\x1a\xa6\xe8\x94\x85\xed\x47\x6b\xb0\x6e\xcb\x29\x25\x52\x5b\xb2\xce\xbc\x97\xff\xa6\x2e\x43\x40\x80\x0d\xb9\x48\x9c\x91\xd6\x12\xe1\xb2\x3d\x0a\xd2\x64\x62\xb2\x12\x14\xc1\xd1\xa3\x8e\x84\x61\x75\x3f\x4a\x2a\x8c\x0d\x08\xa2\x4a\x82\x69\x4b\x8b\x16\xd2\xd1\xfb\x9e\xdd\x38\xbf\xec\x86\x41\x51\x7a\x09\xd4\x65\x86\xbc\x5e\xbb\x87\x78\x5c\x6e\x60\x35\x5f\x52\x8c\xb8\xae\x25\x75\x34\x4c\xb0\x40\x67\x64\xa7\x9d\x2b\xc1\x36\xa5\x42\xf9\x0a\x4a\x72\x71\x54\x7b\x54\xe6\x89\xc0\xbb\x2d\x24\xfd\xa8\xfe\xdc\x8c\x5a\xf6\xc3\xc6\x53\xe2\x9e\xbd\xe1\x48\xca\x0b\x39\x79\x6d\x66\xfd\xf7\x5f\xa3\x2d\xfc\x6f\xd2\xd4\xd3\xaf\x60\x37\x77\x7f\x3f\xa7\xb8\xc9\x40\x9b\x34\x9c\xef\xb6\xe8\xc0\xfa\xd1\x29\x0c\x44\x18\x19\x6c\x4e\x82\xa2\xd3\x04\xb4\x3f\xed\xbd\xe7\x96\xf2\xbf\xeb\xc2\xfa\xe6\x1d\xd4\x08\x5d\x26\xe7\xc1\x77\x3c\x3d\x79\xb9\x9f\xdc\x52\x68\xac\xf6\x03\x29\xa5\x2d\x3c\x4f\x4f\x91\x4e\xde\x7e\x33\x04\x9f\xac\xc7\xe4\x04\x49\xef\x0e\x5a\x32\x31\xa1\x05\xc6\x9b\xe8\x68\xa2\x0f\x96\x40\xea\x7f\x9c\x44\xc7\x3c\x5f\x2d\xda\xf0\x33\x5f\x41\x3f\x83\xb3\x1e\x7f\x49\xf1\x11\x7c\x9a\xa5\xb9\xec\x23\x05\x45\x97\x79\x89\x1f\x58\x0a\x85\xd1\xa9\xb8\x46\xd3\x76\xbf\x3c\x57\x1a\xa0\xd4\x10\x70\xb9\xb8\xda\xaa\x64\xcf\x6a\xa1\x50\xc4\x59\x91\x29\xce\x38\xf5\x3b\x07\x8c\x63\x2a\x5c\x5b\xea\xd7\x9a\xe7\x69\xb6\xfb\x62\x1a\xf9\x3c\x5e\x5c\xc2\xbc\x7a\xe7\x4f\xc6\xbc\x4a\xbf\x08\x3f\x52\x1e\x72\x07\x20\x18\x27\xc3\xad\x57\x63\x6e\x2c\x85\xf3\x1c\xb5\x38\xd0\x1a\x8f\xdb\x4a\xaf\xa6\xb8\x9f\xac\x5b\xee\x8f\x66\xc9\xbe\xe1\x97\x8e\x82\xf1\x13\x16\x75\xe1\xa4\x99\x2f\x1c\x75\xae\x26\x48\x9a\x32\xd0\x5c\x03\x8e\xf4\x64\xad\xd0\x5f\xc9\xb5\x19\x14\x30\xb0\xb4\x16\x13\xe9\xfe\x1a\xbd\xdc\x5c\x97\xfa\x63\xb3\xb0\xe7\x57\x27\xf8\x31\xc7\xfc\xb2\x7f\x2f\x88\x64\x28\x27\xb5\xae\xb6\x3f\x69\x93\xa3\x5a\xea\x3d\x58\x5a\xc2\x98\x3f\x6a\xa7\xc1\xdf\xbc\xd5\x5a\xf8\xa5\xa7\x04\x9d\x06\xa6\x8b\xe3\x47\xe0\x3b\xd4\x87\x13\x0f\x74\xc6\x30\x49\x22\x31\xf8\xff\xe2\x27\xff\x3c\xfb\xc4\x45\x59\x21\xc0\x98\x17\x59\xb1\x22\x1b\x93\xb8\x8e\x2f\x3e\xf4\xd7\xcf\xbb\xa9\xcf\x10\x83\x9a\x46\x57\xb1\x1a\x09\xed\x61\xc3\xa2\x31\x29\xa6\x3c\x60\xfa\x67\x5d\x65\xb5\x45\x4f\xea\xbb\x74\x50\x1f\x51\xdf\x58\x79\x2d\x63\x0d\xb4\xae\x3e\xd6\x0f\xb7\x00\x65\x91\x4a\x14\x83\xec\x3a\x30\x7e\x42\xf6\xd6\xcf\xda\x3f\x42\x14\x1a\x75\xe0\xc4\x58\xd2\xfc\x59\x28\x6a\xa7\xd8\x86\xd2\xad\x1f\x19\xa7\x2d\xc9\xad\xd2\xdf\x01\x84\xe8\x3f\x9d\xf2\x33\xba\x2a\xfd\x9a\xdf\xe5\xee\x16\x4e\x33\xa0\xc4\x37\xd8\xb9\x24\x47\x5b\xf8\x2a\x16\xd2\x5a\x44\x22\x6b\xbf\x46\xf7\x9f\x43\xf4\xaf\x13\x28\x48\x94\x12\x3e\xf8\xef\x3e\x44\x66\xe7\x65\x56\xe1\x9f\xd2\xd7\xfe\xa6\x70\x16\x73\xcc\xdb\x3a\xe2\xb4\x71\xc0\xd2\xdc\x43\x35\x24\xdd\xc0\x66\xc6\x0b\x00\xce\xf6\x14\x56\x6d\xfc\xaa\xbd\xa6\xe0\xde\x97\x26\x1a\x8f\xa4\x7d\x2c\xf1\xbc\xd6\x93\xa4\xfa\xfb\x34\x95\x1f\x4a\xd5\xaf\xa5\x17\x57\x81\xc1\xc6\x68\x74\xf5\xe0\xde\x37\x86\xfb\x68\x75\x5f\xcb\x19\xd5\x54\x16\x6e\xc1\x2d\xdf\x78\xe9\x39\x3c\xdf\xaf\x96\x7d\xeb\x4c\xef\x06\x9a\x12\x62\xc5\x75\x89\xf9\x8b\x18\xda\xe8\x12\x49\xc9\xed\xf4\x86\x95\x7f\x6c\x85\x87\x64\x2f\xfa\xc3\xe1\xe5\x12\x19\xfe\x4d\xae\xe8\xbf\x84\xdd\xbf\x8e\xcb\x20\x31\xd1\x00\x72\x60\xc7\xac\x90\xac\xed\x08\x8f\x72\x61\x2e\x66\x37\xa8\xc3\xe3\xb2\x0d\x53\x6e\x78\xda\x22\xdb\x09\x70\xeb\xa0\xa7\xb5\x51\x7d\xab\x88\xc0\x31\x90\x35\xaa\x45\x06\x2f\x27\x23\xc1\xdf\x09\xed\x76\x9c\xab\x38\x89\xdc\xd4\x3b\xcf\x0b\xf0\xc2\x62\xe8\x3a\xfd\x18\xc2\x01\x99\x51\xff\x3f\xc6\xbe\x32\x2e\xab\xa6\x79\x98\x6e\x10\x69\x90\x06\x41\x10\x41\x42\x24\x95\x06\xe9\x6e\xa4\x25\x04\x24\x24\x25\x2f\xba\x4b\xba\xbb\x24\x45\x10\x90\xee\x6e\xe9\xee\xee\x8b\x96\xf7\x07\xef\xf3\xbf\xdd\xe7\xd3\xfd\x7c\x39\x3f\xae\xc3\x9c\x99\xd9\xd9\xd9\x3d\x7b\x26\x53\xab\x26\x38\x49\xfd\x6e\x9b\x76\xe6\xb7\x89\x6d\xc2\x91\x39\xf4\x07\xdf\x45\x9d\x35\x06\xb1\xe8\x3d\x9b\x63\x56\xb5\xd3\x11\x06\x40\x3d\x9b\xe6\x91\x29\x2f\xe7\x18\x5d\x4c\x2e\x6c\x24\xd2\x49\xd8\x15\x03\xa7\xe4\x4a\xf8\x2b\xb2\x85\x5c\x64\x1c\xd2\x39\x24\xd4\xfe\x51\xc6\x7f\xdb\x33\x21\x22\xb0\x9e\xd8\x60\x9c\x13\xf5\xe0\x67\x1e\x1c\x63\x76\x3d\xfe\x45\x69\x01\x46\x0c\x71\xe4\x65\xa9\xe7\x27\xce\x1e\xf0\xf3\x4b\x7f\x0a\x73\xe0\x03\xad\xd5\x01\x26\xf4\xa2\x2a\xa0\x01\xec\xea\x0c\x6a\x95\x3c\xb8\xc9\xaf\xda\xb6\x18\xa8\x69\x2e\x83\x22\xdd\xf7\x82\xcf\xa8\xfb\xea\x73\x6b\xd0\x00\xd0\x99\x79\xb4\xf8\xdb\x03\xed\x16\x71\xe7\x78\xed\x30\xe4\x43\x23\x0a\xe2\xc8\xb5\x6f\x62\x08\xc4\x51\x1c\x34\x1c\x03\x98\x02\xe3\x00\xa8\xd0\xae\x22\x76\xe2\x06\x52\x7a\x15\xc2\x8f\x8a\xe8\x6a\x6d\x63\x0f\x87\x10\x7c\xfe\xa5\x6d\x2e\x19\xa9\xa3\x96\xc8\x0f\x4f\xe3\xa1\x53\xff\x39\x95\x51\x58\xc4\x98\xd4\xe8\xcf\x4c\xaf\x31\x69\x12\xa0\xf0\x97\x33\x7c\x7c\xac\xf7\x35\x48\xb4\xd4\xd7\xca\x14\x2b\x57\x2b\xc3\x6c\x1c\x22\x52\xc7\x3b\xf1\x5f\x7d\x6e\xb2\xec\x7c\x6a\x0c\x89\x3e\x09\xbb\x46\x4b\x12\xe1\x12\xeb\x0c\x24\xeb\xa1\xad\xd6\x4c\xbd\x7f\x6c\x25\xad\xeb\xb7\xb1\x44\x2a\x0a\xee\xa0\xd3\xdf\x82\x78\x16\x49\x7c\x69\x34\xcf\xe8\x90\x9e\xba\x2a\xbe\x1f\xc0\x38\xf1\x4d\x89\x49\x20\x45\xaa\xdf\x3e\x9c\xb3\x02\x3e\x7b\xcb\x26\x44\x8b\xc6\xb6\xe8\xa7\xcb\xcd\xec\xe9\x5e\xe6\x3d\xc5\x54\xaa\x4a\x6b\x8d\x5a\x98\x5f\xef\x92\x22\x89\xb5\x81\x6f\x66\x05\x3e\x91\x4a\xaa\x65\xe8\x34\x15\x49\xa0\x76\x2c\xbb\x0c\x46\x8b\xc4\x71\xce\x6e\x14\xaf\x7e\x32\x6a\x28\x89\x70\x94\xb7\xa8\x1c\x82\x55\x3b\x14\xce\x60\x1c\xe5\x64\x9c\x74\xa3\xdd\xc6\x46\x29\x72\x7d\xcf\xed\x74\x92\x12\xeb\x1c\xbd\x39\xe1\x04\x04\xfc\xb5\xb4\xd0\xf7\x41\x23\x61\xe7\xd0\xac\x19\xcd\xbe\x3b\xe2\xc2\x0a\x96\xb8\x40\x1b\x9d\x52\xd4\x4a\x58\xaa\x59\x3a\x55\xf4\x91\x39\xe9\xf7\x78\xb9\x32\x00\x74\x9c\x4f\x76\x32\x74\x71\x5c\x7a\xd5\x78\xb8\x90\xe2\xf2\x22\x38\x2e\x2a\xb3\x77\xdf\x93\x2c\xb3\xf2\xb3\xb5\x6d\x94\xae\x5a\x20\x00\x4a\x5c\xd4\xd4\x2b\xa5\x59\xf9\x46\xe3\x49\xfb\x2f\xe1\xcc\x57\x75\x1f\x09\xf3\x43\xd9\x0c\x15\xe2\x3e\x7d\xef\xfe\x4a\x2a\x99\x4b\x0b\xec\xb6\xf4\xf4\x22\x93\x3e\x3e\x17\xc3\xaf\x47\xb1\x43\x17\x70\x2b\xf2\x94\x70\x61\x1c\x27\x4e\xbd\x95\x0a\xd0\x57\x04\x86\xeb\xbb\x81\x24\x9c\x0f\x0a\xc8\xda\x2c\x55\xe4\x9a\x77\x12\xe1\x7c\xd3\xbe\x41\x3a\x9a\xee\xe6\x29\x24\x82\x4b\x1f\x5b\xfb\x9a\xef\xb0\x3f\xe5\xc4\x03\x48\x31\xd0\x0e\x2a\xab\x22\xe1\xcc\xb0\x48\x04\xfd\x2d\x7b\xfb\x03\x0b\x1b\x2a\x1d\x5d\x8c\xa4\x72\x4a\xd3\xfb\x6f\x85\xd2\x0a\x01\x57\xc8\x23\x2d\x1d\x8e\x4f\xfd\xe9\x4a\x9c\x1f\x52\x5c\xd4\x9d\x44\x8b\x8a\x7e\x85\x1c\xb1\xd4\x9d\x4a\x6e\xfb\xc2\xd3\x28\x38\x1c\x59\x01\x83\x92\x9e\x95\x51\xe3\xc9\x78\x3c\x81\xdb\xb5\x30\x44\x56\xf9\x42\x89\x38\x5f\x9e\x0a\xd1\xe7\xce\xdc\x55\xee\x02\xa3\x39\x59\x05\x8c\xb4\x29\x10\x70\xaf\xe1\xbf\xcc\xe5\xfb\x35\x35\xdd\xb9\xb6\x33\xf6\xf1\x77\x7a\xf2\x05\x67\xbf\xfe\x58\x45\xc8\xed\x37\x9d\x32\x04\xb0\x3c\x28\xf6\xd1\x00\xe4\x0b\x7c\x1a\x97\x43\xf8\x50\x4b\x8e\x2e\x8e\x12\xcb\x96\x84\xc1\x94\x8b\xd9\x07\x02\x5e\xf7\x88\x39\xc9\xde\xef\x60\x6f\x40\xcd\xf5\x3c\xf8\x71\xfa\x93\x8e\xa4\xaf\xe6\x93\xc6\xea\xe2\xb6\x26\x04\x12\x51\x64\x14\x56\x52\x97\x05\xc3\xa4\xaf\xde\x03\x7d\xe8\x25\xe4\x5e\x6c\xb4\x3d\x3a\xb2\xaa\x9a\xbe\x64\xde\xe5\x9e\x35\x54\x3c\x4d\x8f\x50\x9a\x98\xd6\x15\x76\x93\x98\x79\x3c\x6a\x06\x64\xed\x8e\xe2\x51\xb1\xbc\x22\x39\x8e\xeb\xe3\x3d\xe8\x34\x1b\x15\x55\x28\xe1\x33\x2b\x50\xd9\x9c\xb3\xff\x8c\xa1\xac\x6e\x91\xae\x09\x9e\x35\xb0\xaa\xd6\x5d\x64\x20\xd6\x79\xbb\x02\x0c\x4d\xe5\xec\xb9\x51\x76\x02\x24\x4f\x54\xb1\x45\xaf\xd2\x46\xe8\x19\x76\x6f\x85\x53\xff\x22\x7d\x5d\x64\x27\x87\x43\x76\x46\x5e\x34\xed\x8c\x5d\x3b\x3c\x83\xfa\xb8\x0b\xb5\x03\xf6\xfa\x3d\x76\x39\xd9\xcf\x3a\x43\x37\xb1\x3f\x60\x61\xd0\xdf\x96\x84\xe1\x33\x28\xc6\x6a\x35\xaf\x73\xc7\xd3\xb8\xa2\x59\x13\x6f\xd1\x8b\x22\xad\x76\x46\x29\x9b\x89\x3d\xdf\xa9\x01\x39\x0a\x55\x91\x90\x0c\xde\x2d\x05\x66\xbe\x2d\x42\xe7\x26\x99\x1d\x9b\x8f\x5b\x17\x9d\x63\xa6\x7c\xc7\xbe\x12\xc7\x95\x1c\xe7\x7d\x60\x79\xde\xbe\xd3\x7a\xfa\x28\x11\x98\x32\x4e\xc6\x4c\x96\x2d\xae\x1b\xba\x3f\x3b\xfd\x19\x4d\x91\x39\x7c\xb2\xae\x5c\x9b\x5d\x1f\xa4\xc1\xe6\xf6\xef\xb7\x7b\x10\x37\x67\x33\x8e\x47\x91\xd5\xeb\x27\xf5\x79\xd4\x25\x6c\x51\x33\xd4\x6c\x36\x98\xca\x84\xe3\x4a\x54\xf7\x7b\x81\x0a\x43\x79\x5f\x69\x09\xbd\xdf\x45\xef\xee\xb7\x22\xfb\x71\x6a\xde\x91\x58\x0c\xf1\x1b\x68\x8d\xc0\x58\x95\x2c\xbf\xca\x52\xe4\x1d\x2a\x06\xe8\x43\xa9\x71\x04\xb4\x08\xf5\x4a\xcc\xd2\xcb\x48\x14\xd7\x42\xe5\x16\x85\x22\x7a\x3b\x3a\x24\xd4\x73\x9c\x92\xe9\x7c\xd6\xbf\x81\x11\xda\x30\xbf\xcd\xce\x21\x0a\xa1\x59\xdf\xa3\xa8\xbe\x4f\x8e\xd2\xbd\x51\xe5\x9b\xc5\xc6\x9a\x9a\x91\x11\x93\xde\x43\x64\xad\x88\x66\x02\x58\x7d\xd2\x1d\x3d\x7e\x58\x61\xfb\x27\xfb\xcb\xb5\xf2\x4f\xf5\x8b\xd5\x9c\x04\xcc\x12\xd5\xd5\x83\x80\xfe\x68\x5b\x6f\x11\xbc\x0c\xc0\xc1\x56\x93\x4c\x32\x21\xae\xd9\x1e\xd6\x81\x36\x95\x44\x86\x34\xd9\xf7\x16\x6e\x8e\xd7\xd6\x07\x47\xfd\x51\xe8\xb1\x21\xee\x85\x17\x1d\x80\x34\xc6\xdf\xe0\x43\x5c\xdd\x4e\x00\x1b\xfd\xc9\x1a\xc3\x1d\x3d\x44\x0c\x5a\x94\xd4\x7f\x62\xf7\xfc\x4b\x10\xef\xca\x42\x1d\x31\xd0\x66\xab\x97\xf6\x75\x65\x72\xc8\x9d\xc4\x63\xf5\xbb\xfd\x4e\x2d\xb6\xd7\xd7\xf1\xe9\x02\x45\x05\xa8\x9a\x15\xcd\xca\x15\x1e\x16\xb3\x98\xc0\xa0\xce\xb9\x69\x34\x91\x39\x25\x1d\x0e\x7c\x71\x8d\x16\x5a\xce\xf7\x90\x79\x06\xa6\x27\x7b\xd1\x72\xfb\x0a\xa0\xb2\x84\x61\xc5\x0b\x00\xe8\x99\x48\xef\xb6\x89\x62\x4b\x84\x32\x22\x12\xac\x69\x2b\xf1\x55\xae\xec\x68\x4a\x54\x51\x1a\x95\xe7\x9f\xcb\x20\x58\x6f\x5e\xb0\xc4\xd4\x1b\xd7\xfa\xb6\x8a\x6c\xc6\x30\xe8\x3e\xf6\xf3\x34\x45\xa7\x8d\x70\xcc\x02\x21\x6f\xb8\xa7\x2f\x42\x9b\x64\xd6\x44\x31\xfa\xc1\x59\x45\xb8\x30\xb1\xcb\xb5\xa1\x34\x53\xfe\x59\x2b\xfc\x3d\x9f\xfd\xf6\x37\xfd\xe8\x39\x2b\xf1\xb8\x91\x85\x29\x72\x71\x8e\xe1\x3a\x60\x74\xef\x74\x6f\xc3\x74\xbe\x3a\x22\xdc\x7e\x64\xb3\x24\x11\xa4\x72\x25\xbd\x8c\xe9\xfc\x45\x2c\x37\xa9\x42\x79\xc5\xef\x88\x78\x0c\x74\x81\xbd\xf4\x81\x86\x5e\x3b\x74\xaa\x0b\x7c\x72\x42\xde\xb0\x94\x25\x41\xab\xf0\x7e\x95\x4d\x6f\xe1\x6d\xc2\x40\x52\x33\x14\xa9\x4c\x00\xcd\xfd\x8f\x3f\xc5\x96\xc5\x3f\xa6\xdb\xc3\x66\xf0\x77\x32\xd7\x4f\x91\xc8\x13\xc2\x47\x55\x8f\xb9\xd4\x1d\xf5\xeb\x2d\xde\x4b\xa9\x49\x11\x9e\x84\x43\x44\xa0\x76\x47\xdb\x31\x40\x35\x80\x43\x84\xee\x26\xa6\xfd\xae\xe0\x84\x26\xc1\x94\xac\xb7\xf6\x07\x64\xeb\x34\xb1\x87\x6d\xdf\x14\x14\x2a\x4a\xca\x72\xfb\x9d\x81\x3c\x58\x62\xd9\x05\xd8\x38\x5c\x4a\x39\xeb\xf7\x76\xa9\x08\xc3\xc3\x7f\x10\x9a\x5a\x37\xf6\x9b\x33\x9c\x3f\x8e\xfd\xae\x95\xed\x07\xd6\xe0\xe5\xc7\x5e\x59\xf1\xc8\x19\x38\x96\x0b\xe1\xf9\x6d\x8e\x78\x93\xc9\xd8\x29\x9d\x1a\x44\xe9\x37\xd2\x61\xdc\x2b\x8e\xe9\x0b\x60\x33\x86\x28\x31\xb3\xb8\x7a\x16\x16\x2a\x78\xa3\x28\x0c\xe6\x39\x75\x92\x49\x3a\x2a\xb6\x6d\xc9\x68\x03\xf8\x39\x8c\x85\xc1\x85\x38\x80\x7c\x29\x17\xa6\x96\xb3\xa4\x56\x10\xfb\x79\x00\x13\x76\xcd\x1c\x47\xc7\x66\xa6\x3e\x47\x43\xdd\xfe\x30\x8a\xb0\x5e\x07\xe2\x32\x90\x39\x3f\xe2\xc7\x79\xa8\x51\xa4\x1b\xe5\x4d\xfa\xf1\x99\x16\x0e\x79\x51\x0f\x89\x64\x71\x27\xba\x2a\xc1\xba\x62\x44\x9f\x9b\x38\x3e\x98\x79\x50\x51\xc8\x30\x71\x59\xd7\xfd\x95\x1d\x9f\xbb\x6e\xa4\x58\xad\x50\x7f\xb8\xd5\x27\xef\xdc\x74\x07\x99\x4b\x20\xf7\xf9\x88\xc0\x24\x30\xaf\xcf\x1e\xf7\x45\x17\xce\x28\xcc\xd1\xa0\x45\xb3\x9e\x48\x0e\x88\xed\xb8\x16\x10\xf8\xd6\x96\x1c\x97\x5f\x87\x0d\x26\x5a\x84\x01\xc9\x47\x9b\x55\xde\xce\x77\xd4\xb9\x2c\xac\xa1\xb2\xee\xc1\xd4\xdf\x36\xec\x3b\x91\xdd\xf3\x87\x50\xea\xfa\x9c\x54\x88\x36\x87\xf7\x5c\x01\xa4\x66\x18\x90\x03\x1b\x02\x21\xf6\xd7\x08\x3f\x6a\x4f\xf3\x18\xb8\x2d\xa5\x4a\xde\x35\x46\xf3\x98\x06\xe7\xe9\xde\x1e\xd4\x43\x77\xfe\x22\xed\x28\x0f\x6e\xff\x2c\xcf\xf0\xe4\x50\x29\x21\x21\x4d\x97\xfc\xec\x51\xe9\xf2\x63\x26\x0a\xd8\xcd\x20\x98\x1b\xd1\x6b\x79\x67\x43\x40\xa6\xf8\x42\x43\xef\x7d\x5c\x55\xe5\x02\xce\x71\x2d\x09\x39\xc6\xdf\x20\x7e\x6c\xf0\xcd\x97\x8c\x98\x4a\x26\xe3\x56\x18\xda\x63\x40\xff\x8b\x54\x2d\xc5\x94\x19\xb9\xa6\x0f\xed\x87\x1c\x9e\xf8\x7e\x31\xc9\x4e\x08\x34\xfb\xc4\x91\xde\x8a\x47\x5e\x35\x95\x2a\x41\xf4\x1c\xe8\x4d\xbb\x96\x35\xe5\x96\xe1\x3f\x91\x06\xc7\x82\xc2\xa7\xe2\x41\x42\x30\x99\x54\x55\xf5\xf4\xa9\x88\x77\x48\x8d\x1e\xcc\x57\xbf\xa8\x70\x80\xbc\xae\x62\xdd\x62\x0a\xb1\x9f\x4a\x98\xd6\x0e\xf4\xb3\x03\xea\x8f\x9c\x41\xdf\xcb\x30\x97\x01\x1b\xf5\x6e\x1c\x15\x98\x4c\xf5\xef\x40\x16\xa4\xde\xa7\x1f\x04\xca\x12\x0c\x03\x35\x9c\x47\x94\x98\xe5\x65\xf2\xef\x16\x59\xc4\x58\x1a\xbd\x61\xb3\x55\xda\xb7\x35\xc5\x92\xff\x42\x0e\x6f\xa2\xe7\x3c\x1f\xbe\x5c\xd4\xcd\x46\x67\x4c\x7c\x15\xea\x48\x15\x8b\x57\xcf\x61\x34\x6a\xf4\x54\x61\x67\x8b\x58\x8c\x05\xb4\xcd\x55\xa5\x7f\x26\x16\x50\xaa\x95\xc3\xc6\xa6\xfa\x83\x49\x2f\x56\x52\xcc\x67\x44\xae\x74\x14\x50\x63\x55\x80\x57\x8b\x84\x2d\x08\xfa\xe1\x87\x54\x9d\xf3\xc2\x6f\x8e\x6d\xd3\x6a\xcb\xe9\xe6\x62\x2e\xe4\x7c\x46\x0a\x18\x33\x1a\xde\x26\xb2\x44\xc8\x9b\xd3\x8b\xb8\x61\x03\xa0\x82\xe2\x93\xf5\xfb\x22\x38\xfa\xaa\xfc\xea\xcc\xb1\x16\xae\x06\x1f\xf5\x97\xbf\xad\xbe\x17\x5e\x38\xa5\xc6\x72\xe3\x2e\x74\x02\x53\x9b\x35\x0c\xf2\x14\xb3\x8a\x2f\x6e\x5c\xe7\xcf\xb3\x4d\x6f\xbd\xa7\x04\x59\x9e\xc2\x46\xc7\x17\x7d\x6c\x84\x19\x9c\x8d\x30\x1a\x6b\x02\xa6\x5f\x48\x14\xe1\x11\x2b\x85\x8f\xd8\xd2\x9d\x82\x1f\xdc\x52\xe4\x0e\xc6\xe7\xc7\xd4\xf2\x74\x94\xb0\xa1\x1e\x25\x9f\xeb\x27\x3d\x80\xaf\xdd\xcb\xd2\x21\x9b\x10\x12\xe6\x54\x4f\xb6\xe4\x00\xcd\x13\xe1\x5c\x08\x83\x4e\x77\xc0\xa1\xa1\xcb\x67\xe4\x00\xbb\x2b\x3b\x4d\x3f\x40\xfe\x4f\x55\x7e\xd9\x0f\x30\x90\x4e\xe3\xed\xff\x56\x71\x37\xed\x94\x3d\x66\xaf\xd8\x5c\x1a\xf9\x6d\xfc\x62\x41\xff\xdd\xbe\x1b\xea\xec\x5f\xa4\x75\x02\x7d\xe4\x1d\x14\xd9\x30\xe9\xe9\x64\x34\xae\x7e\x08\xd1\x79\xe7\xbf\x0d\x76\x14\xeb\x4f\x8d\x7a\xbe\x7e\xa2\x9d\x7f\x03\x94\x75\x3a\xa1\x82\x68\xc7\x0e\x88\xf2\x76\xd6\xd8\x7f\x12\x4d\x6e\xd3\xba\x94\xe1\x8a\x4f\x7e\x7f\xe2\x12\x94\x90\x3c\xa9\x18\x2b\xa2\x0f\x1a\x3b\x7a\xf9\x02\x60\xe0\x16\x8b\x6a\x23\x6a\x07\xe5\xbe\xd6\x9a\x4a\x8d\x5a\x26\x52\xae\x47\x5c\x05\x11\xd7\x91\xe1\x1f\x3d\x56\xa7\xfa\x3b\xfc\x0f\xf0\x96\x42\x19\x84\xc5\xcb\x0c\xbc\x84\xf5\x56\xf2\x97\xec\xf1\x71\x6a\x43\xab\xf4\x2a\x8a\xed\x26\x3f\xf6\x02\xf7\x6b\xe7\x01\xb3\x44\x70\x4f\x86\xfb\x47\xe3\xca\xb6\xed\xcb\x22\xc2\xb0\xcc\x28\xd2\x65\x8b\x33\x15\x7c\xab\xe6\x08\x5e\xc7\x4d\xab\x28\x73\x30\x7e\x92\xe4\x1c\x03\xdd\x56\x0c\xbb\xb5\x48\x3c\x50\xe7\xca\x7b\x90\xdf\x44\xc4\xdb\xca\x90\x9c\xd7\xa1\x53\x01\xd7\xe8\xdd\xb3\x52\xe6\xbf\x48\x9f\x6b\x52\xba\x7f\xc4\x0d\x62\xe0\x89\x49\x69\x69\xfe\x42\x9d\x34\x3c\xd5\x50\xe8\x90\xcd\x47\x41\x75\xc2\x93\x11\x05\xbb\xd0\x04\x44\xaf\x23\x25\xc9\xf2\x30\x6d\x87\x18\x68\xe4\x22\x55\xb1\x8a\xfe\xb6\xb1\xc8\x5a\x7c\x55\xc9\x7f\xf3\x55\x44\x5a\x92\x5e\x19\xcb\x16\xec\x03\xa4\x10\xcf\xd8\x64\x7f\x40\x1a\x2d\x31\x98\x92\x90\x68\xd9\x8d\xd6\x13\xb2\x87\xbb\xcb\x84\x69\xfd\x43\x26\xec\xec\x28\x09\x20\x9f\x36\x88\xb5\xe4\xd6\xb9\xf0\xa8\xdc\xd2\xf2\xc0\x42\x59\x1e\x2f\xf8\xba\x18\xfb\x11\xc5\x37\x56\x16\x3e\x36\x73\x2b\x26\x25\x60\xf2\xfb\x1c\x42\x7b\x14\x22\x58\x69\x95\x6d\x50\x47\x7e\x1b\x1c\x60\xee\x98\x89\xed\x09\x30\xcb\x4e\xac\x53\xbb\x34\x7f\x1e\x14\x01\x8b\xbb\xb0\x67\x53\x57\x31\x7b\xf7\xf5\x71\x2c\xd1\x1f\xb7\x65\x35\x1b\xb2\x9a\x2a\x54\xfd\x11\x38\x37\x96\xd5\xd2\x9d\xcf\xfa\x75\x08\xf4\x15\x89\xcf\x32\x8d\x0d\x66\xdd\x7b\xd5\xe0\xf4\xeb\x97\xf9\x3c\x8f\x21\x5c\xa2\xc7\x48\xe2\x87\x3a\x36\xc7\xab\xeb\x12\x71\xab\xde\x1f\x80\x77\xb2\xa0\x1a\x3f\xdc\x85\x30\x3c\x4d\xd2\x40\xc3\x68\x9c\x8f\x2c\xef\x8d\x96\x66\xd3\x97\x33\xa4\x75\xbd\x2c\x16\xd3\xa3\x7e\xd0\x3b\xc0\xd7\x3d\x7d\x3d\x8e\x25\xed\x57\x77\x80\x32\xc0\xae\x43\x2e\xdf\x61\x37\x30\xa0\x9b\xad\xfd\xb3\x20\xc6\xf3\xd3\xa7\x9f\xc3\x40\x1d\xba\x7d\x24\x2d\x02\x34\x13\x4c\xd2\x6e\x3e\x66\xbf\x72\xd2\x35\xc5\x3f\x59\xc4\x57\x2c\xa7\x79\x42\xe4\xb9\x6a\x30\x8f\xfb\x06\xc1\xf7\x74\x01\x6a\xdd\xb9\x69\xc1\x69\x73\x1d\x12\x29\xfb\xe4\x8f\x5f\xcd\x4d\x6b\x29\x8f\x2b\x1e\xd1\x41\x6a\x5e\xda\x39\x57\x85\x0f\xe7\x83\xca\x77\xd2\x75\xfb\x55\xe9\x51\x14\xef\x51\xfa\x2a\xe7\x02\x56\xaf\xe3\x5d\xfc\xcc\x94\xa4\xd4\xdc\x9b\x48\xea\x97\x08\x36\x88\x5b\xfe\xff\xf7\x75\xf9\xaf\x4a\x2a\x22\x40\x89\x8d\x02\x7c\x5d\x4a\x5b\xc0\x1c\x9d\x04\x1f\x28\xc9\xbc\xc6\xff\xb2\x81\x2e\x72\xdb\xa1\xa2\x55\x7d\x59\xd9\x10\x32\x2f\xa6\x5e\x82\xd0\x3f\xba\x06\xf0\x2b\x90\xd8\xcf\x6e\x0b\x3d\x91\xe3\xe1\xa2\xfd\x3e\x4c\x13\xb0\xe2\xee\x80\xb3\x58\x22\x6e\xc4\xa4\xa0\x56\xed\x86\xcf\xed\x64\x00\x80\x6a\x62\x0b\x9c\x22\x2b\xc7\xff\xc8\x3b\xc9\xcd\xbc\x5d\xc1\x48\xc3\x4c\x0f\x11\x98\x45\x88\xf2\xc1\xfc\xcd\xf7\x46\x3c\x9c\x09\xcc\xd8\x7e\x41\xf4\x5c\xe4\x26\x05\x9e\x2a\x53\x64\xa5\xd3\xb3\xb2\x6e\x75\xae\x0d\xbd\xd3\x12\x15\x19\x63\xaa\x35\x96\x8b\xf4\xf5\x72\xc8\x3f\x95\xf3\xfe\x4d\x04\x10\x11\x01\x5a\x4a\x04\xc0\x47\xf2\x5d\x13\x5b\xe7\xab\xcd\xb3\x88\x61\x34\x5e\x2c\xb9\x6e\x0c\x0b\x1b\x47\x6d\xef\x1d\x82\xdb\xf1\x3d\x38\xa1\x4a\xaa\x7e\x25\xb0\x80\xca\xbe\x16\x71\x36\xbf\x4e\xe0\xcd\x0f\x5e\xcc\xdf\xe7\xb4\x66\x4d\xcf\xbf\xf7\x70\x7e\x7b\x61\x13\x19\x78\x1b\x69\x4d\x89\x22\x0a\x96\xd0\x25\x19\x46\x66\x95\xd1\x3b\x15\x64\x40\xb6\x49\x66\xb7\xd5\xe6\x8d\x15\x7b\x46\xc5\x83\x71\x3d\xe9\xfd\x93\x54\x65\x28\x86\xc7\x1a\x4c\x56\x75\x56\x28\xc6\xba\x7d\x5b\xc9\x2a\x79\x35\x8b\xf7\xe2\x20\xb2\xd8\xf7\xcb\xe7\xec\x59\x7e\x16\xaa\x6e\xf8\x67\xcc\x5b\x88\xa0\xa7\xe8\x05\xaa\xfb\x5c\xf7\xb9\x67\xd9\xd7\xde\x8d\x4c\xd6\xca\x73\x27\x73\xdd\x56\x29\xf6\xe6\x97\xe7\xaf\x94\xec\x52\x1b\x6e\x2b\x30\xa1\xc5\xff\x39\x08\x75\xa1\x5e\xea\x46\x06\x6a\x05\x34\xf1\xe4\xad\xa7\xc4\x5f\x33\x6f\x9c\x1d\xb1\xfc\x11\xef\x57\xf8\xa2\xf9\x15\x97\xa9\x77\x29\x17\x22\xb2\xe0\x71\xbb\x03\xb6\x9b\x33\xfb\x94\x73\x98\x27\xc1\x6e\x27\x16\x28\x14\x92\x96\xb7\xb9\x28\xa7\xa4\x6d\x19\x7a\xe8\x2a\x9b\x89\x8b\x5f\x53\x36\xfb\xa3\x05\x50\xf3\x05\x5a\xf3\xb5\xe3\x85\xa7\x18\x15\xfc\x0b\xfb\x07\x93\xd1\x56\xfd\x07\x4e\x17\xc8\x07\x2f\x60\x68\x22\xa3\xda\x0b\xec\x1c\x81\x82\xaf\xeb\x2c\x53\xc6\x22\x57\xe4\x15\x44\x4f\xd7\x9c\xac\xeb\x77\xf8\x0d\xfe\x90\x33\xd6\xb3\xbf\xbf\xd9\x30\xca\xab\xf0\x9a\xbe\x05\x4b\x63\xa2\x11\x46\x78\xb3\xcd\x5e\xab\xa4\xce\x19\xa5\xa5\xcd\x79\xd0\xba\x4c\x1d\x39\xde\x26\xe8\xeb\x5e\x31\x3b\x46\xdc\xbe\x23\xfe\x0d\xd0\x57\x58\x2e\x73\xc7\x09\x7c\xb7\x1c\xdd\xff\x82\xad\x6f\xce\xf0\x91\x83\x7d\x71\x5a\x5c\x1a\x8d\xf4\x3b\x47\x4b\xad\xf8\xc8\x91\xb7\x7f\xe9\xd7\xbf\x20\x44\xed\x25\x1c\x60\x14\x8a\xbf\xfe\x5d\xfe\x1e\xcd\xf0\xfb\x86\x46\x1b\x85\x0e\x52\x9b\xd4\x63\x17\xf6\x26\x57\x56\x2f\x00\x69\x17\x0b\x99\x6f\x0a\xf6\xa4\xf6\xb3\xd5\xd1\x17\x70\xcf\x45\xde\xba\x42\x96\x5b\x93\x2b\x2a\x6a\x62\x96\xfd\x74\x55\x26\xea\x0c\x81\x03\xd6\x7e\x8a\x60\x5b\x07\xfc\xf9\x47\xf8\x9f\x46\x53\x82\xf9\x3c\xbe\x59\x82\x30\xb1\xa2\xbf\xa9\x10\x58\xcd\xeb\x1e\x9d\x3c\xf9\x08\x2e\xc8\xd6\x99\x1c\xae\x8c\xaf\x72\xc5\x5e\xd1\x72\x02\x29\x1b\x6d\x4d\x44\x02\xd4\xd7\x1f\x74\xc4\x5c\x85\x33\x9f\xe3\xe7\x43\x94\x17\xff\x8e\x7f\x5e\xd1\x91\x8f\xe5\xa6\xd3\x2d\x7e\x2d\x7e\x62\x4a\x5a\x5e\xa4\xf0\x39\xb3\x87\xfa\xc4\x7e\xc0\x87\xa3\x5b\xa2\xee\xed\x77\x60\x63\x15\xdd\xd8\x93\x3f\x2f\x9d\x6d\xbb\xf5\x4a\x2e\x4d\x43\x8a\x4f\x99\x51\x7e\x9f\xa4\x41\x86\xda\x04\xf1\xf4\x6a\xaa\x50\x56\xd0\x72\xff\xb2\x6a\x82\x9a\x45\x5f\xab\xba\x4a\x5b\xf9\x7c\x22\x42\x91\x30\x31\xc1\xb8\x90\xd6\xf9\xf2\x99\x45\xb3\xee\x75\x17\x6e\x1d\x8f\x87\x26\xd8\xa1\x14\xe1\x52\x86\x6f\x30\xf1\x88\xc7\x98\x0c\x66\x34\x31\xa7\xb0\x08\x69\x30\x24\x73\x02\x73\x54\xb0\x5c\x1a\xf1\xdb\xb2\x0f\x35\x60\xd0\x7d\x69\x66\xfb\xa8\x36\xe9\x14\x33\xaa\x7e\x6a\x7b\xeb\x43\xb6\x11\x55\x58\x1d\xa2\xbe\x8d\xa2\x0e\xac\x47\xcb\x4b\xd4\xe3\x0b\x30\x28\x6f\xf7\xc0\xd6\x33\xb4\x79\x9e\xf3\x4c\xb3\x0b\x37\x40\x25\x37\x54\xcb\xe1\x49\x25\x07\x4c\x34\xe1\xa6\xc9\xb1\x97\x46\xb3\x26\x28\xaa\xa5\xfe\xf6\x27\x96\xc8\x55\xd7\x6a\x52\x01\x7e\x44\xbf\x7f\xbf\xaa\xd3\x92\x68\x0a\x3a\x24\xca\x48\xa7\x08\x7f\x4a\x7b\x22\xd6\xf2\x97\x55\xdf\xd8\x47\x72\x86\x1c\xdf\x1f\x13\x4f\x5d\x35\x68\x2d\x61\x05\x68\x21\x75\x46\xe3\x07\xbf\x4c\x84\x99\x62\xe7\xd6\x8d\x1c\x07\x4e\xcd\x8b\x17\x13\xea\xc1\x25\x51\xc7\x83\x3a\x74\x8a\x8e\x5c\xb4\x41\x1a\x3c\x8f\xd7\xf5\x89\xd1\x8f\xbf\x7d\x46\xd8\x68\xa9\xfd\x34\x02\xb0\xfa\x2e\x50\x55\x39\x04\x83\xee\x3c\xbd\x99\xe1\xa3\x84\x48\xf7\x93\x45\x09\x39\x21\x9b\x38\x2b\x8a\x32\xc1\x33\x26\xbc\x95\xf7\x48\x60\x2c\xbf\x5f\x93\xb0\xd4\x26\x51\x93\xe1\x9d\xc9\xc7\x35\xf4\xc4\xec\x2c\x7b\x9c\xa9\x30\xa1\xef\xba\x2f\x67\xdd\x31\xfd\x33\xcd\xc1\x30\x08\xf6\x69\x46\xcc\x01\x97\x95\x6e\x44\x69\xa8\xd7\x6e\x54\x27\x0b\x5c\xe6\x71\x00\xa2\xf1\x0e\x7a\x4d\xc3\x7b\x42\x35\xce\x71\x70\xdf\x34\x44\xea\xf0\xab\x61\xf2\x91\x53\x1c\x69\x33\x45\xea\x65\x28\xc3\xe0\xb5\x34\x37\x42\x68\x36\x7b\x8a\x1e\xfd\xca\x58\x7c\x0d\x2c\x72\xb0\xf5\x22\xed\x73\x5f\x3f\x94\x1b\x71\xcd\x85\xcd\xe0\x26\x1b\x13\xeb\xcc\x7b\x6d\x3b\x36\x60\xe7\x23\x47\x4d\x16\xf3\xb0\x3f\x58\xc1\xf3\x05\xbf\xff\xb4\x65\x60\x04\x97\xb9\xc4\xe9\x17\xad\x6e\xfb\xa4\x0b\xc1\xc4\xed\xcb\x47\x33\xc5\x04\x19\x23\x81\xf1\xf0\xdd\x60\xe7\x55\x6e\xce\x3f\x79\xfe\xdd\xd1\xb5\xbf\x07\x0c\x3d\x67\xc9\xea\xcd\x5d\xc7\x13\x9c\xa1\xf5\x74\x82\x6a\xad\x39\x3b\xd6\xd1\x0b\x40\x19\xeb\x86\x5b\x92\x82\xd3\x32\xae\x00\x9c\x80\x4c\x47\xeb\x60\x5f\xee\x6e\xcf\xa2\x5e\x8e\x63\xd2\x0b\xeb\x9d\xcf\x84\xb1\x2d\x02\x60\x3e\x4b\xb4\x7b\xd5\xdc\x22\x42\x45\xa7\x93\x94\x81\x8b\x74\x8b\x60\xee\x91\xd8\x6a\x5d\x94\xe3\xc4\x1c\xde\xca\x8e\x7c\x85\x34\x9b\x1a\x70\x1c\x4e\x2e\x21\xab\xfb\xa5\x8b\x4f\x11\x4b\xf3\xb3\xe6\x36\x0c\x6f\x8c\xa8\xd3\x99\xf1\x43\xc1\xde\x8d\xb0\x67\xfe\xb3\x3d\x53\xb0\xab\xfd\x76\x25\xb9\xcd\x5a\x93\xa3\x13\x41\xb5\xb2\x63\xd9\x63\x09\x3f\x6d\xa5\x5c\x86\xcf\x62\x3f\xe5\x2d\x68\xc9\x0d\xcf\xb0\x8f\xc0\x33\x66\xf4\xf7\x37\x3a\xa5\xc9\xd2\x59\x2d\x95\x50\x9e\xd7\xc3\xf2\x24\x62\x17\xa9\x81\xfb\xe9\x67\xaa\x09\xb4\x94\x4f\xb9\xfa\x3f\x00\xdf\x2d\xdd\xf9\x2a\xb1\x72\xc1\xa3\x52\xce\xf6\xae\x75\x73\xd9\xdd\xae\xee\x46\xdc\x08\x92\xa8\xfa\xb9\xf8\x30\x53\x36\x04\x11\xd6\x21\x00\x52\xb1\xa7\xbd\x2b\x2c\xc2\x61\xb7\x79\x74\x07\xe8\xfe\x66\x18\xac\x50\x2a\x5c\x02\xcf\x61\x41\x56\xa1\x15\x6e\x31\x29\x97\x5b\x2c\xc0\x74\xe2\x57\xa5\xab\xfd\x8e\xe8\x88\xbc\xac\x13\xcb\x50\x7a\x9b\xc4\xb0\xfd\x04\x22\xcd\x6d\x2e\x29\x68\xe7\x46\xbb\x45\x67\x4d\x08\x9c\x5d\x3c\x4c\x57\xf0\xfd\x10\x83\xf1\x9d\xe8\x96\xee\x5a\x0f\x42\xe8\xe4\x34\x75\x75\x79\xdb\xcf\xc2\x42\xa8\xad\xa9\x56\x10\xe4\xdc\xff\x22\xcd\x14\x7e\xb6\xf1\x1b\x15\x5a\xcd\x3d\x34\x74\x3e\xde\x5e\xea\x57\x26\x51\x5c\x99\x99\x74\x7e\x5c\xb0\xaf\x78\xd2\xfa\x47\x09\x70\x93\xdc\x89\x7c\x17\x8d\x43\x5e\x84\xc1\x95\xa3\x0c\x29\xb5\x24\x2d\x7c\x85\x24\xdb\x32\x83\x58\xff\x5c\x6c\xa5\xa8\xe5\xa6\x77\x87\x12\x20\x0f\xf3\xbe\xcd\x3b\x4a\x45\x9a\x8c\x24\x36\x79\x9f\x2a\xee\x87\x99\x36\x6c\xe8\xcd\x26\x85\xb5\x35\x97\xcb\x39\x92\xe8\x47\x1b\x20\x5c\x8a\xd9\x0d\x87\xdb\x97\xaf\x9e\xcd\x1e\x27\xd6\x75\x60\xdf\x89\xe1\x05\xc9\x1e\xfc\xe6\x72\x8b\x87\xb4\xca\x96\xc7\x25\xbb\xd3\x0b\xc0\x49\xee\xf5\x6a\x07\x57\xd8\xa8\x4b\x91\x0c\xf9\xcd\x37\x7e\xef\xd4\x11\xff\x37\x9e\x48\xa3\x13\x41\xc1\x7e\xd9\x38\x3c\xa5\x9e\x9c\xe0\xf2\x87\x26\x98\xeb\xe0\xa9\x71\x66\x21\x6c\x27\xb1\x29\x65\x52\x18\xef\x7f\x34\x3d\x46\x8b\x53\x2c\x99\xb0\xfe\xfc\x33\xb8\x4d\x77\x16\x90\x3e\xf2\x38\x42\xc7\x24\x72\x14\xce\x14\xc7\x82\x36\x6a\x25\x33\x8f\xba\x33\xc1\xbe\xb8\xad\x14\xd3\xac\x54\x0e\x4f\x71\x32\xd0\x53\x42\x23\x16\x16\xfa\xd6\xd3\xc5\xbf\xef\x0f\x74\x13\x33\x48\x47\x36\x7c\xa1\xad\x92\x96\x45\xc8\xf4\x85\x18\x99\x1e\xf5\xa0\xc0\xf9\x3f\xd6\xf6\x7f\xdb\xa6\x21\x22\x4f\x61\xfe\x2b\xdc\x79\x1d\x3b\x6b\x9f\x1c\x17\x23\x13\xf2\xe1\x9c\x4a\x2b\xd8\xab\xa0\xb4\x16\x59\x51\x58\xf7\xe0\xc0\x3f\x87\x94\x69\x3b\x7b\x4e\x07\x50\x56\xa7\x9f\xaa\x8d\x4f\x39\x66\x0f\x1c\xf3\x1b\x87\xc2\xf4\x0b\xf9\x8f\xe9\x1b\x98\x3d\x3d\xa5\xc6\x0c\xb3\xd8\x43\x39\x6c\x6d\xea\x00\xd0\x96\x66\xd6\x96\x8f\x30\xed\x86\x3c\xfa\xcd\xfa\x71\x36\x42\xc1\xa9\x63\x2f\x34\x0b\x49\x96\x3e\x12\xd8\xe9\xf0\x16\x5b\x17\x82\xb9\x7f\x14\x50\x87\xb1\x88\xda\x21\x32\xa3\xbb\x1b\xec\x9e\x46\xc8\xcb\xb3\x97\x36\x70\x12\x5d\xf8\x4d\xd0\x82\x7c\x73\x02\xfc\xd4\xb0\x7f\xc2\x9d\xff\x75\x5b\x15\x16\xa0\x44\x01\x82\x61\x1c\xdf\xeb\xfe\x40\x39\x7c\x3a\x4a\xcc\xe0\xc5\x25\xc2\xe7\x11\xd1\x06\xbb\xe7\x88\xfe\xbd\xb8\xf5\x9a\x1e\xe7\xdc\xed\x24\xc5\x02\x58\x06\x4d\xb9\x24\xf3\xab\xc3\xa2\xf9\xac\x5d\x8a\x67\x0e\xae\xcc\xf0\x8e\x14\x1f\x30\x5e\x6a\x28\x12\x3d\xad\x86\x96\xe7\xb1\x9a\x0d\x02\x21\x00\x45\x12\xb2\x70\xb5\xef\xd7\x42\x33\x3c\x62\xb9\xa7\x77\xf9\x0e\xfd\x91\x24\x4d\x10\x5f\x2c\x5b\x09\x87\x19\x90\x4a\x1b\x52\x83\xaf\x8c\x0d\xc9\x2a\xd5\xec\xa6\x0e\x65\x53\x45\x5a\xd2\xa6\x1a\x72\x1d\xde\xa7\xb8\x5e\x96\x55\x3c\x22\x37\x84\xdc\x0d\xbf\xbc\x17\xfe\xf1\xfd\xfc\xab\xc2\x08\x13\xc1\xc1\x02\x53\xb6\xf5\x7d\x2c\x2d\x68\x8a\xcc\x59\x0e\x36\x0e\xce\xa2\xeb\x5b\x33\x86\xf9\xcb\x7a\xff\x74\x33\x45\xde\x80\xa8\xf3\x2e\x2c\x89\x03\x80\x07\xaa\x85\xa6\x21\x31\x7d\x37\x76\x79\xf2\xbe\x21\xa8\x76\x77\x83\x19\x3e\x5e\x21\x6c\x11\x52\xd6\x82\x90\x02\xb3\x7f\xfc\x23\xb0\x9f\xac\x7b\x9a\xe3\xe4\xf0\xe8\x5a\xe0\x97\x06\x3a\x9b\x6b\x6d\xe4\x32\x86\x12\x9f\x4f\x2f\x29\x86\xc4\xc2\xbf\xc0\xbe\x45\xa1\xdb\x9a\x01\x40\x23\x49\xa9\x9a\x05\x4e\xf1\x76\xa5\x97\xaa\xf7\xfc\x25\x34\xd7\x96\x63\x7b\x7c\x09\x43\x25\x56\x72\x7c\x72\xde\x76\xbb\x04\x37\x42\x3d\xd1\xff\x33\x65\x7d\x76\xb9\xd5\x0b\x48\x4f\x8a\x21\xce\xdf\x43\xfb\x1b\xf8\xcd\xf4\xec\xd5\x71\x7b\xa0\x51\xe1\x63\x06\xa2\xac\x5d\xa4\x65\x10\x11\x5e\xce\x50\xb7\xe8\xbf\x98\x37\x70\x50\x39\x31\x8f\x9f\xcf\x36\xf8\xe4\x1b\x05\x3a\x15\xd6\xb7\xa2\xe0\xf5\x8d\x1e\x30\x0d\x46\x27\xa4\x54\xd4\xa0\x8b\x5d\x00\x73\x46\x96\x91\xba\xbc\x91\xf1\x8c\xb7\xba\x19\x46\xb5\x29\x96\x95\xed\xb5\xa4\xd0\x48\x19\x92\xf1\x75\x93\x60\x42\xe2\xf4\x6b\x39\x20\xd2\x96\x7c\xd8\x72\x4f\xcd\x13\xf3\xb9\xab\x71\x9d\xa3\x66\xbf\xaf\x46\xa6\x5e\x89\xcf\xf6\xbb\x7e\x85\xb7\x6b\x3a\xe6\x64\xc8\x51\x46\xa0\xd3\x25\xba\xf5\x59\x38\x45\x10\x65\x92\xc5\x76\xa4\xec\xe7\x8c\x06\xdd\x3e\xc8\xcd\x63\x99\x9b\x1d\xd4\xd6\x25\x2d\x2d\xb4\x19\xa0\x1f\x92\xd1\x9f\x3e\x53\x87\x45\xeb\x08\xdc\xf0\xa8\xac\x0f\xfa\xbe\x19\xf0\xbf\xec\xc7\x1a\xc6\x57\x19\xf0\x8d\x30\xc9\xc4\xa7\x1d\xa9\x80\xed\x18\x63\x87\xf9\xe5\xd5\x07\x21\x03\x5d\xef\xba\x9d\x8b\x33\x7d\x92\xf4\x4b\x68\x83\x43\x8c\xcd\x0c\x54\x5f\x44\x64\x44\xe2\x12\xb4\xe4\xe2\x8a\xd5\x74\x1e\x74\x21\xfd\x92\x0f\x64\x45\x09\x9d\x29\xbe\xeb\x15\x30\x71\xb0\x92\x6f\x85\x83\x1d\x24\x3a\xb1\x2e\x5a\x01\x86\x0f\xe9\x3f\x2b\x8d\xe6\x7b\xbd\xa0\x9f\x9d\xa9\x21\xd1\xed\xff\x45\xc3\x40\x14\x9d\x82\xc3\xc6\x9c\x61\xa0\x62\xa8\x24\x38\x10\xa8\xc0\x3f\x13\x3e\x43\x30\x64\x00\x79\x79\xc6\xf0\x66\xad\x5a\x56\x9e\xa1\xd5\x0d\xbf\x8f\x2a\x22\x70\x2e\x81\xf0\x77\xa4\x64\x85\x00\x58\x78\xac\x27\x92\x48\x38\x3f\xd5\x81\x1d\xc2\x91\xd5\xeb\x45\x6c\x83\x21\x73\xa0\x23\x0e\x43\x20\x41\xaa\xa3\x61\xd6\x10\xa1\x34\xdf\x0d\xd0\x37\x3d\x8d\x1f\x8b\x63\xdc\xc1\x1d\x5a\x75\xd1\x88\xf3\x64\xf3\xc5\xa5\x59\x26\x66\x5c\xd8\xe2\x4b\xc9\xde\x5d\x17\xaf\x13\x07\x9c\x4e\x8e\x08\x47\xba\x81\x5b\xa2\x0e\xa9\x1b\x11\x9b\x2c\xf5\xe4\xfb\x25\x48\xe6\xbb\x57\x8a\xf9\x97\x32\xfe\x67\x33\x62\xd9\x09\x4e\x60\xfa\xd1\x4f\x7c\xc5\x2c\xbd\xdd\xb1\x1d\xdf\x7d\xf2\xea\x69\x27\x8c\x1d\xfd\x1d\x2d\x47\xb5\x5d\x32\xee\xf5\xbd\xec\x11\x87\x0f\xb6\x00\x7d\x54\x31\x04\x6e\xbb\xe3\x57\x9c\x37\xfc\x52\x02\x63\x75\x81\xf2\x04\x0d\x7d\xca\x38\x55\x48\x06\x9d\xf2\xf8\xde\x6e\xd6\x7a\x40\xca\xac\xa9\xb0\x35\xb9\xfc\x17\x8d\xf1\xca\xbe\x9f\xba\x09\x2d\xee\x93\x5b\x31\x39\x53\x37\xb0\x3a\xd1\xc4\xd1\x0c\x39\x55\x0a\x48\x86\x60\x3c\xd8\x04\x66\xd8\x28\x13\x4f\xba\x54\x34\xd3\x75\x2f\x43\xd0\xa3\xb0\x67\xac\x1d\xd9\x1b\x77\xec\xa3\x6f\x56\x7a\xdc\x94\xde\x72\x02\xa0\x4d\x54\x6f\x64\x24\xab\x92\x1d\x4f\x7e\x44\x21\xf2\x38\xe4\xcd\x47\x8d\xe5\xe9\x35\xda\xdf\x19\xf7\x76\x17\x69\x89\xbc\xf3\x00\x2b\xef\xf1\x96\xf1\x99\xc6\x7b\x4b\x61\x8c\x38\xd0\xea\xee\x38\x2f\x91\x34\x38\x35\xbc\xe6\xce\x3b\x74\x0d\x9d\x79\x2b\x20\x80\x76\x0a\x56\xd0\x78\x67\xbe\xfc\x48\x46\x2a\xf9\x93\xed\xb7\x89\x5e\xdb\x85\x57\xaf\x13\x3f\x72\x40\x9f\x66\x39\xec\xe5\x7c\x36\x17\xdf\x68\xda\x04\x8c\xa3\x06\xd2\x99\x37\xeb\x18\x1f\xe3\xa7\x02\xda\x7f\xc3\x98\xb4\xe6\xc7\xc0\x04\xb0\x17\x4d\xd9\x24\x5a\x27\x47\xd5\x91\x19\xf6\x58\x83\x6f\xa4\x6b\xb8\x04\x6c\x4e\x32\xff\x75\x86\x90\xa2\xf3\x66\x8f\x67\x2e\x3f\x8a\xd8\x68\xe1\x8d\x48\xb0\xa4\x18\x36\x0a\x3f\x7c\xb2\xc6\xfd\xab\xff\x56\x07\x11\x65\x87\xc2\x39\x1b\x7d\xad\x35\x0a\xbc\x6a\x03\x45\xee\xc5\xae\x72\xe2\x82\x9a\x1f\xad\x08\xdd\xa9\x7f\x64\xf0\xb1\xff\xa5\x1f\x71\x9d\xfb\x81\x73\xcc\x6e\xfe\x9d\xc9\x52\xf9\x3b\xbc\xa5\xe7\x5e\x6f\xd4\x03\xd7\xc4\x3c\xc6\x4f\x89\x62\x4c\xe8\x73\xde\x03\x67\xac\xb4\x4a\xea\xb0\x9c\x40\xae\x1e\x75\x0e\xb4\x6f\x5d\xa9\x63\x9c\xf5\x27\x49\xb5\xfa\xb4\x05\xb3\xbf\x14\x04\xdc\xd0\x95\x5e\xaa\x81\x9c\xd2\x27\xa2\xd7\x34\xcc\xe8\x5e\x4f\x9e\x32\x5f\x0d\x6d\x7d\x34\x78\x6a\xc1\xe3\x1f\x9b\x04\xdd\x96\x6b\x82\xc8\xc9\x68\xe0\x96\xfe\xe5\x54\xc9\x8f\xfe\xc7\xba\xe2\x29\xba\x59\x79\xbf\x76\x29\x3a\x71\x95\xc0\x61\x41\x52\x96\xf8\xf2\x50\x6e\x6b\x49\xfa\x78\x43\x27\xe0\xc8\x4a\xe4\x09\x89\x4c\xfd\xf9\x4c\xd7\xd4\x60\x3b\x93\x67\xac\x42\xdd\x82\x70\x67\x78\x9a\x5c\x8d\x55\xc2\xb9\xcc\x74\xba\x93\x1c\xc8\xd8\xee\xc2\xe6\xb3\xbc\x0e\x32\x9b\x38\xbf\x7c\x01\xe7\x89\xb3\xb5\x1f\x0c\x1d\x47\x58\x64\xf0\xfb\x78\x3d\xf9\xa8\x9c\x03\xe7\xd7\x14\x38\x51\xae\xee\xb4\x31\x26\x06\x4c\xa9\x4b\x76\x41\xa9\x49\xe5\x21\xc6\x7b\x09\x37\x5c\x5c\xbf\x6a\xf6\xb2\x5f\xff\x14\xbe\x06\xb3\x8b\xc7\x55\xa8\xa7\xb2\x1b\x39\xf5\x48\xe1\xd3\xed\xa8\xe5\x0c\xb4\xdf\xd9\xee\xf5\xcc\xd9\xab\xf0\xfc\xbc\x19\x7b\xe1\xf8\x6c\x82\x00\x40\x8a\xeb\x61\xc4\xf1\x6d\xe0\x42\x23\x25\xca\xbf\xc7\x15\xdb\xa2\xb6\x5f\xd1\xe0\xb8\x21\xe4\x26\x3c\x15\xc3\x2b\x54\xa0\x1d\x4a\xff\x17\xa9\x1c\xce\x8d\xb1\x55\xa8\x7b\x12\x7e\xf8\xf9\x05\x8e\x91\x9d\xa0\x34\xba\xc6\xc1\x17\x81\x52\x9d\xb9\x50\x25\xf3\x5d\x15\xaf\x15\xa8\x2f\xfc\xff\x36\xf5\x10\x11\xa2\x48\x3d\x94\x80\xbf\xca\xba\x7c\x9d\x20\xc5\xa2\x18\x3f\xee\x4b\x53\x03\xc1\x17\x47\x77\x1e\xbb\x1c\x7c\xd1\xed\x8c\x0d\x15\xc4\xe1\xe3\x74\xc8\x97\x06\xf5\xba\x5e\x49\xd4\x67\xef\x73\xfe\x66\x37\x36\x5a\x04\x13\xdd\xa3\x81\xd0\x67\xec\x81\x51\x76\xee\x5d\x8c\xa5\xf2\x5f\xd6\xef\x44\x41\xcb\x80\xbc\x58\x01\x73\xa8\x7a\x35\xba\xc5\xcd\x33\x97\xe0\xae\xd2\x28\x52\xfa\x15\x14\x44\xec\x9b\xbb\x96\xa1\x2f\x15\x1c\x0b\x50\x32\x30\x5b\xaf\xd7\xa9\xef\xb4\xfb\x17\x5f\x9f\xb0\xaf\x8d\x6b\x29\xd2\x9e\x66\xee\x3b\xdd\xe7\xf1\x8d\x4a\xe7\x8f\xfb\xb2\xd2\x70\x45\xc0\x78\x44\xee\x9b\x0d\x6f\x79\x09\x6b\x6e\xbe\x8c\xfe\xf0\x69\x83\xe7\xe3\x09\x23\x81\xac\x6d\x6a\xcb\xc9\xcf\x86\x28\x2d\x04\x7b\x4c\x72\x01\x50\xab\xf6\x0a\x7a\xc6\x3e\xc9\xd5\x50\xe4\x32\x3c\x82\xfe\x0a\xd5\x71\xb8\x5d\xb2\x8e\x2e\x1a\xc3\xa1\x72\xcc\x05\xe6\x9e\xfc\x56\x00\x14\x9d\x92\x2a\x69\xf5\xaa\x5d\xfd\x7c\xa2\xfd\x51\xb4\x5a\xdc\x67\x4c\xdc\xa8\x64\x99\xaf\x8f\x31\x06\x97\xb6\x49\x95\xda\xce\xc1\x7e\x15\xbe\xfc\xbf\x10\x69\x61\x27\xb1\x7c\x44\xf6\x2b\xf0\x8a\xb4\xb2\xe5\xce\x6d\x84\x1c\x19\x9f\x64\x9b\x9d\x1c\x48\x40\xb0\xc5\xaa\xfe\x39\x96\xfd\x9b\x5e\x43\x44\xe0\x3c\x3d\x41\x33\xd5\x70\x39\x1e\x12\x47\x94\xc9\x2c\x93\x16\xdb\x52\x2f\xa3\x13\x02\x2c\xcd\x47\x7d\xbc\x35\x86\xe9\x60\x7d\x71\xfa\x97\x4f\x33\xc1\x26\x04\x19\xe9\x3f\xb9\x52\xb6\x33\x5e\x2b\x32\xdc\x49\x42\x3d\x65\x9e\xb6\x68\x91\xb9\x6f\xae\x4f\x4c\xcd\x29\x2f\xa2\x7c\x95\x2a\x03\x67\x6c\x48\x2f\xd0\x54\x1b\x92\xf9\x44\xb2\xa6\xc6\x06\x26\x2c\xfb\xc6\xe4\xf5\xab\x3e\xda\x86\x15\x4f\x46\xf1\x29\xd4\xbe\xa8\x0e\xf0\xcb\xcc\x98\x20\x3d\x2e\x38\x74\xef\x4b\xe0\xae\x85\x2e\x8b\xd6\x93\x05\x34\x0c\x98\x71\x2f\xc6\x55\xb8\x32\x33\xbd\xbe\x7d\xdb\xae\x10\xe8\xcd\x7f\x8a\xbd\x6c\x9c\x34\xed\x3d\xb3\x4d\x5c\xf6\x70\x1d\xc3\x0c\x1f\x4b\x96\x1d\x3c\xc4\x5c\x7a\x87\x42\x13\xb3\x9b\xe7\x66\x84\x44\x39\xb9\x08\x11\x89\xda\xbf\x3b\x88\x27\x02\xac\x1e\xf4\x59\x5e\xaf\x68\x1c\x97\xa2\xd8\x87\xa7\xc6\x42\x0c\x2f\xe6\x11\x56\xbf\x0a\x69\x5a\xcb\x74\x2f\x11\x7a\xb9\x29\xe9\x7a\x00\x59\x02\xe9\xf1\x8a\x81\x3c\x5d\x4e\x59\x0c\x7b\x3e\xaf\x43\x70\xa8\x35\xe2\xe7\x58\x11\x92\xd4\x7f\xd9\x8f\x29\x7f\x86\x6b\x75\x06\xe3\x92\xd6\xb0\x8b\x0a\x4c\x3a\x9e\x1f\x8b\x73\x11\x7d\x11\xef\x97\x17\x53\x79\x49\xc0\xf0\x8d\x90\x1a\x22\xc0\x5a\xa9\xb1\xb0\xa9\xc8\x07\x16\x22\x25\xbb\x1c\x2f\x29\xe0\x1f\xd6\x1a\xfe\x34\x34\x22\x32\x3b\xf0\xb6\xff\x0b\x9c\xf6\x5a\xdf\x56\x36\x4b\x66\xf3\x2a\x82\x7c\xe0\x5f\xfa\x66\xa7\x23\xb7\x22\xe4\xf2\x33\x06\xd7\x64\x6a\xa1\xd3\xb6\xd8\x11\xe1\x53\xc5\xb7\x1b\xa7\x23\x48\x41\xf6\xcd\x97\x42\xdf\xa8\x81\x93\xc3\x97\x68\x6b\xae\xcd\xd7\x3e\xad\x5a\xd7\x57\x25\xa1\xf0\xad\xed\xd4\x7a\xde\x44\xcf\xc2\x50\x74\x1d\x94\x09\x92\xee\xf2\xa4\x01\x1b\x78\x49\x0f\xfc\xa7\x9d\xa8\xd1\x74\xcb\x63\x2b\xc8\x53\x11\xdb\xe4\xa9\x96\x63\x09\xd7\x12\x84\x11\xf9\xbb\x67\x84\xfb\x39\x33\x40\xc0\xd9\xe4\x5e\x03\x8f\xdd\x89\xc6\xe8\x5e\xa6\x9b\x6c\x4e\xf6\xcc\x9f\x20\xd3\x6d\x58\x38\x1a\x14\xb6\x75\x4a\x7d\x6b\x1f\x7f\x1c\x30\xf1\x06\xb3\xb8\x26\x66\x68\x86\x2b\x0d\x32\x38\x65\xe1\xf3\x35\xae\xae\xb9\x73\x9f\xc0\x79\xda\x6e\x51\xab\x17\xdf\x44\x18\x71\x87\x14\xf0\x41\xbf\xd9\x2e\x74\x12\xc4\x9a\xe7\x1b\x97\xf1\x50\x0f\xdb\x27\xfa\x5d\x9c\x1f\x14\xf7\x63\x2e\x1e\x1f\x5f\x70\xf6\xfb\x3e\x36\x18\x7b\x0f\xff\xce\x1b\xd6\x4b\x41\x8f\x53\x54\x45\x5a\x6d\x04\xdd\x0b\x15\x69\xda\x6d\x66\x1a\xd6\x73\x50\xa3\x62\x93\x7b\x7d\x8f\xe2\xe4\x2f\xd2\x0c\x65\x64\xc2\x0d\x91\xe9\x8a\x2c\xbb\x36\x2e\x1f\x64\x47\x96\x3c\x08\xd6\x74\x7b\x42\x79\x11\x41\xa2\xee\xee\xa4\xe2\x4c\x29\x20\x28\x6b\xd1\xc4\xf8\xf7\x13\x28\x95\xb3\xa1\x97\x8f\xe2\x67\x3c\xe4\xdf\x8d\x4d\xc7\xa6\x93\x45\x21\x19\x47\xe3\x52\x77\x91\xc0\x67\x02\xe1\x86\x98\x33\x85\x4d\xd9\xdf\xc9\x3b\xcf\xe1\x7a\x4d\xcf\xef\x56\x50\xf3\x8d\x3e\x3b\x5a\xee\x4a\xc9\x22\x99\x3f\xef\xda\xba\x9c\xfb\x0b\x39\xd1\x19\x02\x2f\xd5\x52\x67\xac\x84\x2e\x1f\xee\xc1\x31\x6e\xd2\x10\xf9\x58\xcc\xd0\xcf\xcb\x04\x67\xd3\xf0\xea\x0c\x45\x23\x18\x18\x53\x46\xf6\xa2\x98\x08\x75\xab\xbb\x61\x1a\xa5\x0e\x93\xd7\x1e\x7a\xce\xd5\xc8\xc2\xa3\xe1\x47\x89\x2b\x2d\x58\x55\x74\x82\xe1\x40\x77\xc4\xb6\x0d\x71\x8a\x10\xb8\xe9\x92\x4d\x1b\x0c\x2e\xd5\x22\x19\xec\x1f\xd6\xef\x30\xd3\x68\x78\x29\xf8\x0a\xad\x51\x4d\xca\x85\x59\x80\x31\x89\x34\x59\xcb\x7e\xbd\xfc\x3d\xbd\xf4\x41\x65\xb5\xc4\x5e\x5a\xd1\xcd\x3d\xed\x5b\x5b\xb2\x28\x7c\xef\x40\xbe\x53\xa2\x60\xb1\xd1\x5f\xa4\x6e\x2f\x2b\x87\x0f\x57\x7b\x98\xf3\x35\x7b\x1b\x47\x4e\x43\x10\xa4\x0a\x04\x9f\x26\x91\xa7\xa9\xb0\x10\xda\xc1\x6f\x69\xf0\x79\x03\x0e\x78\x8b\x9f\xd2\xb1\x12\x32\x6c\xc2\x3b\x31\x8d\x28\x1b\x31\xa4\x85\x3c\xaf\xa1\x19\x83\x52\xb0\x14\xda\x35\x49\xb7\x13\xe3\x1a\x80\xee\x5f\x61\x67\x8f\x0f\x17\x32\xd9\x3b\xbc\xa2\x54\x3b\x56\xe0\x2f\x72\x6a\x7d\x25\xf3\xac\xba\x51\x31\x38\x05\x06\xce\x7f\x4f\x0d\x0c\xc0\xe8\x94\x42\xf4\x34\xcf\x78\x79\xb9\x9a\xff\x3d\xa6\x51\x57\xeb\x4d\x03\x99\x11\x62\x81\xea\x53\x17\x08\xde\x93\x57\x11\x97\xd5\x6b\xc0\x7b\xab\xb0\x78\x50\x32\xc8\x6f\x88\xf6\xc7\xce\xdd\xa4\x56\x18\x43\x61\x6b\x68\xf0\x93\x06\xe4\xfd\xe5\xcb\x53\x19\x3b\xd6\x4b\xb0\x55\xb8\x03\x55\xef\x52\xdf\xd4\xba\xa2\x40\xb0\x33\x3c\x75\x4c\xa7\x76\x4c\x11\xe1\x6c\x04\xaa\x1b\xd1\x2c\x13\xc5\xc0\x39\x07\xdb\x67\xb0\x80\xc6\x23\x0c\xc1\xa7\x8d\x03\xec\x85\x4a\x0d\x46\xbb\xab\x42\x70\x11\x24\x9a\xec\x94\x98\x89\xad\xa8\xf8\xad\x6b\xae\x97\x1b\x45\x80\x50\x6b\x8f\x29\x05\xfe\xc8\x58\xdd\x54\x29\x47\x78\x16\xfd\x5a\x68\xbf\xf0\xd3\xf9\x59\x8c\xe7\x5c\xfd\xac\xf5\xb0\xca\xab\xf4\xd7\x35\x70\xc2\x4e\x72\x2b\xb0\x3c\xf1\x27\x86\xbd\x60\x53\xf1\x1d\xba\xc8\x24\x33\x93\x40\x9d\x20\x94\x50\xc6\xad\x7e\x3a\x56\xbd\x0b\x16\x98\x5f\x36\x5d\x40\xd0\xb5\x36\x3d\xda\x7e\x1c\xe3\x29\xfd\xc8\xce\x63\x1f\xc5\x0a\x7b\x56\x40\xec\x67\x06\xda\x4a\x5b\x0f\xaf\x1f\xd8\x8d\xe9\x79\x48\x8f\xc7\xb6\x64\x31\x5d\x20\xe2\x4c\x78\x10\x42\xb0\x8f\x59\x0b\xcc\x5e\xee\x00\xec\xbb\x8f\xc1\x86\x8b\x53\xb6\xce\x3a\x60\xdd\xb3\x73\x74\x37\x13\xf7\xf1\x54\x82\x5a\x51\x6a\x55\x74\xda\x92\xb4\x7d\x9f\x8c\x5a\xd8\x06\xf4\xe3\x90\xbd\xd6\x33\xb5\x52\xa0\x08\xf4\x6c\xcf\xa4\x04\x06\xa4\x82\x68\xb7\x82\xdd\xdc\x7d\x92\x3d\xa7\x6b\xe9\xea\x79\xf5\x52\xf8\xe7\x51\x36\xb8\xc9\x2a\x6c\xf9\x0a\xb0\x35\x2b\x8a\x4f\x19\xf3\x87\xf1\x41\x42\x56\xfe\x4c\x99\x62\xae\x48\x6f\xb5\xb7\xe6\xbf\x54\xc7\xe5\x4f\xe3\x63\xce\xca\x95\x78\x81\xf4\xc4\x95\x27\xba\x6f\xbe\xc9\xbd\x6b\x7c\x17\x66\xf4\x81\x46\xd7\x2e\xb5\x4f\xb4\xca\x57\x74\x54\xcb\x41\x32\x0b\x86\x67\xa5\xa7\x02\x02\x1a\x5c\x8d\x9e\xf9\xe3\xc5\xdc\xf0\xec\xf2\xaa\xfa\xe5\xcc\x2b\xe3\x77\x16\xe8\x88\xed\xec\xf4\xc5\x8c\x88\x35\x0e\xaf\x1f\xd0\x00\x8e\xe2\x76\xda\x6e\x14\x62\xe7\xd6\xa9\xa7\x75\x5d\x9a\x8d\x37\xd3\x4f\x88\xb3\x2d\x43\x2f\x04\xe0\xec\x12\xd6\xe4\x60\xf8\x88\xbb\x05\x41\xbf\xce\xee\xac\xe6\xf6\x65\xaa\x86\xe8\x8a\xed\x8f\x52\x1c\x0c\xcc\x25\x2d\x2a\x08\xd9\xb1\xe2\x99\xa1\xa9\x13\xdd\x26\xdb\x36\x15\x40\x3f\x6e\x80\x92\xfd\x4f\x2f\x57\x6e\xfd\x1d\x47\x57\xbe\xfe\x13\x0e\x8b\x61\x1a\xfb\xf3\xe4\x94\x3c\xb4\xfa\xdd\xf8\x35\xf6\x05\xa0\x61\xc6\x3a\xd6\x5e\x02\x23\xc1\x84\xf2\xd7\xd4\x0b\x16\x69\x4f\x5e\x47\x1e\x29\xe9\x4a\x75\x38\x4d\x9c\xdf\x3b\xd7\x5c\x62\x7f\x9c\x37\x01\xfa\x65\x04\xd1\xe3\x9b\xf2\xd9\xe4\xd6\x48\x18\x94\xfa\x1f\x69\xf2\x4a\x91\x23\x23\x77\xe5\x4c\x19\xf2\x18\x6c\x5f\xad\x22\xb7\x0d\x83\x41\x1d\x71\x8a\x08\xac\xad\xd5\x49\x8c\xdb\xcb\x3c\x8f\x86\x93\x05\x36\xf4\xdf\x92\x22\x72\x30\xf7\xde\x22\x91\x0a\x60\x36\x09\xb9\x02\x9e\x6a\x65\x7a\x74\xa5\x0e\x4a\xb3\xa8\x03\x03\x9b\xa5\x9e\x54\x95\x90\x51\xad\xc7\xbe\x93\x47\x30\x3f\x60\xe6\xdc\xd4\x65\xb6\x16\x00\x45\x45\xc3\x41\xcb\xa7\xa2\x14\xe9\xdd\xdb\x39\xc1\xda\x84\x5c\x1a\x68\x64\x66\xac\xec\x62\xa0\xc6\x3b\xd3\x40\x0c\x62\xc5\x55\x80\x92\x60\xe4\x75\x2a\x51\x81\x13\xeb\x90\x35\x43\xc6\xf9\xda\x1c\x1c\xc9\x27\x99\x19\x8c\x2e\x67\x3f\xae\xb6\xf7\x4c\x60\xe6\x5f\x5a\xe8\xfe\x85\x7c\x5f\x2e\xd8\x28\xcf\xdd\x56\x33\xbb\x34\xa8\x81\x4e\xd6\x62\xcd\x8f\x2d\x91\xa1\x9d\x5f\x84\x83\x89\x95\xfb\x6a\x96\xc1\xe8\x37\x40\x9e\xe0\xcb\xd7\x53\x62\xdc\x0e\xbd\x04\x02\xa7\xa2\x5d\x26\xcc\x1d\x61\x29\xd7\x09\x05\x45\xac\x9d\xed\x95\xca\xf7\xe2\x3c\x42\x40\x5b\x19\xbe\x76\xf1\x68\x73\x95\x67\x02\x85\x25\xad\xf8\xe1\x3e\x69\xbd\xfa\xfc\xd2\xec\xdf\x9b\x35\xa3\x23\x52\x51\x3f\x7d\xba\x5c\x06\xfa\x88\xf7\x6e\xdb\x20\xb0\xf3\xb2\x18\xbd\xa4\x9c\x77\x19\xc0\xe7\xd7\x0a\x5b\xcf\x1f\xb8\x83\xe3\xeb\x6c\x2f\xf1\x25\x6e\x77\x17\x2c\xff\xa7\x1c\x8b\xf3\xfb\x6f\x01\x6c\x2e\xa1\xb9\x8b\xef\x0b\x97\x3c\x55\x02\xa6\x44\x2b\x47\x65\xd7\x76\x2c\x3f\x59\xb0\xd1\x7c\x1a\x8d\xf2\x7d\x01\x11\xe9\x9f\xaf\x6e\x8c\x27\x02\xcc\x32\x9a\x38\x04\xd6\x69\x1f\x92\x5b\x47\x48\x72\x74\xf6\xd8\xf7\xc8\x5e\xde\x22\x4e\x64\xae\x69\x93\xef\x27\xf1\xca\x8c\xfa\x82\xb9\xda\xe5\x57\x0a\x46\x18\xdf\x2f\x83\xe3\x69\x50\x03\x7e\xa0\xaa\xbc\x89\x2e\x4f\xd1\xc3\xda\x1f\x6b\x69\xda\x65\x9f\x69\x29\xbb\x05\x57\xab\x3f\x1f\x91\x24\xc9\x0f\x5c\x86\xd0\x94\x1b\xe3\x4c\x8a\x40\x3a\xb2\x04\x9b\x7d\x13\x95\xb8\xfa\x9f\xfe\x86\x33\xce\xf2\x78\x97\x60\xdf\x79\x6e\x47\x3c\xf4\x8e\x4f\xc8\x8a\xe1\x69\xd4\x72\xdd\xa2\xa7\x3f\x62\xdc\x54\x5c\x52\x10\x93\x7c\xe1\xac\x85\xe8\xb0\xc4\x80\x2c\xbd\xa4\x58\xbf\x48\x9c\x37\x9e\xa4\x9c\x4c\xe5\xa9\xf5\xfc\x67\xab\xfd\xa8\x6f\x05\xd0\xc8\x62\x2b\x3d\xea\xa6\xe9\x78\x6b\x19\xc1\x3a\xe4\x72\x92\xcc\x4c\xe3\xfb\x72\xca\x17\xe4\x1e\x91\xe3\xf9\xcd\xf6\xfc\xa4\x48\xbb\x5f\x25\x71\xe0\xb2\xca\x08\xdf\xee\xae\x55\xf3\x00\xf3\x45\x6f\x73\x54\xcd\xa2\x84\xc5\xe8\xf9\x1d\x03\x4d\x18\xe7\x48\xfb\x56\x4b\x45\xc2\x8c\xe2\x26\xc1\x91\x92\xa4\x8d\x62\x12\x93\xf6\x2f\x7d\x79\x0b\xc7\x1f\x6e\x86\x70\x51\x5f\x1d\xbb\x2a\x71\x5f\x10\x1e\x84\x0c\x1e\x7c\x20\xd3\x22\x22\x71\xe4\xe2\x37\x50\x92\x9c\xc6\x00\x62\x7a\xb0\x96\xe6\xb9\x43\xf8\x18\x6b\x42\xae\x0a\xac\xb3\x84\xb3\x85\xc4\x91\x91\xe3\xc6\xc4\x61\x45\x0d\x38\xac\xe7\x07\xdf\x60\x03\xc3\x4f\x7b\x9c\x12\x51\xe7\xe4\x7f\x50\x31\xb3\x55\x3c\x40\x44\x49\x1f\xc5\x6f\x80\x01\xbb\xa9\xec\xad\x49\x7d\xbc\x6d\xd0\x75\xe7\x0b\xc4\x2a\xe0\x9b\x5c\x32\x5b\x92\x0a\xae\x3d\xfd\xf1\x75\xec\xea\x9b\x7e\x4c\x39\x75\xfb\x27\xca\x2b\xb2\xee\x5e\xae\xd5\x99\x70\xef\x2f\xc0\xf0\xbb\x75\xc4\xcb\x20\x47\x6b\x8d\x31\x70\xb5\xd4\x4d\x5b\x54\xda\xe6\x72\x52\xee\x36\xca\x5f\xa8\xa9\x02\xd9\xf7\xd5\x56\x3f\x83\xde\x01\x19\x67\x26\x82\x6f\x74\xd2\x5d\xe9\x08\x08\x6d\x3c\x8d\x8a\xab\xe3\x8f\x7c\xa3\x16\xa5\xea\x38\x62\x7c\x36\x7a\xc4\xd2\x57\x4c\x01\x56\xc3\xbe\xe2\x06\x8f\xd6\x17\x30\x9c\x37\xf6\x59\x0f\x84\xf7\xb0\x7f\x80\xb0\xbc\x4c\x4f\x12\xed\x68\x6f\x94\x84\x87\x73\xf8\x03\x94\xde\x2c\x2e\xba\xc2\xa0\xb0\x9e\x1c\xa9\xe8\xa0\xc6\x55\x6b\x97\x58\xb4\x6b\xc8\xdf\x35\xc0\xd5\x40\x6b\xb8\xc2\xab\xcd\xc1\x0c\x04\x3b\x8e\x9b\x64\x34\x62\xa7\x7a\xd7\x0b\x90\xa0\xa2\xc2\xdd\xa5\xfb\x44\xab\x92\x64\x2f\x1c\x87\x63\x10\x2f\x0b\xf0\x60\xc7\x60\xeb\x5e\x81\x25\xac\xca\x0e\x60\xe6\xde\xd3\xf1\xda\x1b\x28\x27\x36\xd4\x6f\xe8\xe0\x2d\x22\xea\x97\xfa\xdc\x4e\xab\xd8\x3f\xfe\x3a\x3c\xa3\x4d\xf9\x97\x7e\x73\x94\x81\xb5\x7b\x55\x09\xbe\xc7\x84\x82\x2a\x4b\xa5\x4d\xcc\xf5\xc0\x6c\xd9\xcc\x13\x8a\x97\x8a\x96\x83\xe2\x53\x89\x50\xd0\x0b\x2e\x73\xb1\xa7\x91\x41\x56\xd8\x4e\xb0\x06\xd3\x57\x1a\x96\x4a\xf3\x25\x84\xb5\x43\xc1\x3c\x93\x9a\x5f\x36\xfe\x97\x26\xa2\xbd\x00\x18\x88\xbc\x30\x37\xb1\x83\x50\xe9\x41\xfb\x68\x46\xf4\xd9\x66\xea\xa8\x9e\x14\x94\x06\x23\x84\xf1\x12\xb5\xb9\xb7\xb4\x44\x8e\x34\x06\x50\x2a\xd7\xb1\x74\xb8\x23\x31\x64\x45\xaa\x9e\x4f\xa6\x59\x6d\xc9\x91\x62\xf3\x7e\xa6\x3a\xd0\xcf\x85\x79\x29\x69\x99\x29\xbb\x62\x40\xb0\x4e\x8e\x48\xab\xd7\x59\x02\x2e\x3a\xca\xc9\xb9\x5b\x27\x62\xbe\xd6\x31\xa6\x86\xdf\xb6\xcb\xea\x36\xab\x85\x16\x4b\xc7\xd7\x1c\x18\x20\x56\xe8\xcf\x0d\x07\x57\x30\x1e\x82\x56\x63\xd5\x9f\x37\x4b\xce\xa4\xfc\x92\x7d\x32\x3f\x86\xb5\x22\xbc\x9a\x75\x30\x50\x1b\xbe\xb2\x83\x9d\x80\x60\xc6\xa1\x0a\xf8\x14\xf3\x4a\x89\xc2\xf6\xb4\xd3\xa4\x7d\x6c\xcf\xe5\xac\x5a\x21\xe4\x2e\x33\x46\xfa\xe3\x47\x09\x25\x40\x67\xad\xf7\x6e\xdc\xcc\x41\x2f\xb8\x50\x5a\x94\x0a\x59\x95\xd6\x1b\x48\xff\xb0\x15\x89\x4f\x8e\xdc\xd5\x77\xab\x0b\xbf\x13\x1f\xa4\x07\xa3\xbb\x2b\xbd\xc8\xb3\x13\xe6\x17\x29\x83\xdb\x66\x5b\x2a\xa3\xb9\x18\x8a\xc3\xe6\x47\x8c\x08\xd8\x8b\xd2\xaa\xfa\xba\x7e\x7d\x18\x04\x7d\xae\xf6\x65\xe9\xc6\x0b\xe8\xbf\x16\x36\x69\xcf\x12\x5a\xe0\xde\xbf\x48\x0a\x78\xfc\x2b\xf8\x3d\x9d\x04\xa5\xcf\xd4\xea\xe6\xe6\xdc\x2c\x18\x56\x93\xf2\x88\x96\x24\x76\xf1\x95\x9c\x99\xf1\xc2\x5b\xd9\x2e\x17\x75\x1e\x01\x06\xc9\x17\x8f\xc5\x3c\x6e\x71\x6f\xa5\xc7\xa5\x01\xc3\x9d\xe3\xc8\xa2\xd1\xe2\xc7\x9a\x27\x9c\x2a\x94\x94\x41\x19\x1e\x6d\x5b\xb9\x36\xd1\xe8\x33\x02\x35\x9f\xb4\xad\x08\x8e\x1c\x38\x00\xf3\x7c\xab\x7b\x96\xd2\xe3\xc7\x91\x8f\xdf\x6e\xa9\x5d\xe9\xd5\x4f\xf3\xbb\xe8\xd5\xfe\xd1\xf6\xed\x7d\xfd\xfc\xc4\xf3\xe0\xe9\x61\xf4\x11\xc0\xa9\x4e\x72\x50\x68\xfa\xc5\x7b\x4b\xc5\x26\x8f\x47\xdc\xa2\x26\x06\x51\x52\xbf\x31\xa7\xec\x05\x7e\x8f\xc8\x7d\xfd\xe6\x22\x47\x05\xa6\xa8\x07\xbf\xaa\xf8\x65\xec\x11\x9c\x9b\xa3\x85\xc9\x6b\xbb\x2e\x8a\xbc\x2c\x2f\x20\x9b\xee\x84\xc5\x20\xcc\x85\x13\x90\x8e\x16\xc8\x00\x1a\x4e\x5e\xb5\x85\x8e\x2e\xd6\x75\xe7\x06\x53\xe4\x42\x77\xad\x37\x66\x08\x9f\x93\xfc\xde\x98\x37\x1b\xa6\x42\x21\xc3\xdf\xd6\xc1\xe7\xf8\x8b\x55\x82\x9d\x7a\xd5\x94\x8a\x3a\x64\x5e\xa5\xe3\xb9\xa6\x4a\xac\xd8\xe2\x87\x65\xbe\xe3\xd7\xc2\xa5\xad\xaf\x3d\xd8\x65\x1c\xa1\x63\x60\x15\x90\x46\xca\xaf\x96\x6a\xce\x6d\x06\x71\xd7\xf1\x37\x73\xaf\xfb\xe4\x08\xa3\x6c\xd3\xd3\x19\x1e\x6f\x89\x10\x2b\xaf\x65\x8f\x01\x0d\x96\x0e\x26\x0a\xf2\x45\x49\x45\x35\xd1\xf1\x29\xb2\xbb\x6e\xd9\xe4\xa3\x8c\xa8\xdd\x73\xd1\x64\x91\x9f\x14\xcb\x75\x1a\x8c\xc4\x22\xff\x63\xeb\xfe\x37\x3e\x21\xc2\x5d\x30\xe0\x77\x70\xda\x48\x94\xad\x24\x0e\x8e\xb5\x93\x06\x61\x9d\xdc\x8f\x9e\x26\xca\xda\x40\x06\xc2\x4f\x7e\xa5\x0c\x31\xca\x85\xbe\x55\x0c\x60\xdb\xf9\xb8\x63\x51\x55\xc1\xb0\xc2\x8f\xb4\x45\xe7\xdd\xf0\x33\x08\x0e\x17\x61\x5a\xa6\x15\x4c\x36\x2b\xd9\x4f\x04\x0c\x69\x9a\x63\xc0\xef\xe0\xed\x18\x16\xa9\x9b\x3a\xde\xa1\xa0\x92\xc6\x1f\xfa\xf2\x9b\x09\x36\x46\xfe\x2b\x4c\xda\x9f\xcc\xd6\x97\xb7\xc9\x75\xa2\xda\x41\x93\x6c\x7c\x5b\xb6\x2f\xe6\xe1\x7b\xce\xef\xae\xc9\xa1\x74\x62\x99\x57\x1a\x3c\x1e\x59\xa2\x1f\xd5\x25\x4d\x71\xfa\x6a\x44\x05\x59\xb9\xa1\x90\xff\x04\x2a\x70\xd7\x8f\x1e\x60\x85\xce\xf5\xd0\x26\x44\x5d\xdf\xb5\xe4\x32\x73\x9e\x9c\xec\x2a\x93\x3b\xa8\xe0\xa3\xa5\xb7\x07\xcf\x16\x69\x42\x44\x6a\x6f\x0f\x3c\xe2\x49\xfe\x8a\x97\xbc\xe1\x7d\x5c\x37\x42\xd1\x24\xcf\x77\x91\x21\x45\xa2\xdc\xbe\xd7\x50\x13\x06\x69\xec\x91\x4f\xd0\x5b\x8b\x1b\xc3\xd3\x61\x60\x25\xde\x12\x3f\x77\x1e\xcf\x75\xd3\x4b\x10\x14\xe3\x30\xc6\xea\xf5\x22\xf9\xf3\x53\xe8\x54\x16\x9e\xd8\x5f\xd6\x89\x85\xa8\x3b\x88\x0d\x6c\x4b\xe9\x20\x44\x2c\xb7\x2d\xe3\xa0\xaf\x05\x53\xfa\x0d\x36\x52\xe8\x79\x3b\x1a\x69\xc8\xe7\xba\xd9\x39\x47\xee\x62\x09\x04\x01\xa0\x96\x64\x05\x36\xe2\x38\x9b\xce\xe5\xb5\x32\xdf\x70\x04\xcd\x58\xe6\x23\xd9\xf6\x4f\x34\xee\xd1\xb8\xc9\xd2\x0b\x5b\x86\x9f\xac\x3c\xc0\x1c\xb9\x19\xf1\x2a\xc1\xfc\x28\xf1\xf2\xfe\x98\x54\xfd\x5a\xcd\xde\xca\x34\xb4\x11\xcc\xeb\x35\x31\x43\x57\x49\x8a\x64\xb4\x46\x09\x70\x27\x20\x22\x91\x56\x27\x1b\x62\xd2\x32\xff\x49\x40\x6a\x4b\xb1\xc2\xf9\x26\x22\x91\x3d\x16\xa1\xbe\x5b\x71\xb8\x4a\x47\xc2\xe2\xd9\x97\xbf\xf4\x05\x2c\x68\x91\x2b\xb3\x1c\x66\xa6\x67\xec\x43\x55\x8a\x52\x73\x9a\xda\xd6\xd0\x06\xa8\x32\x8d\x91\x5f\xb8\x97\x9e\xeb\xe2\xaa\x01\x6b\x36\x2d\xbf\x69\x85\x6d\x20\x6b\xa7\x6e\x0b\xad\xba\x66\xf5\xd4\x45\xbd\x8c\x39\x68\xb9\x64\xac\xc2\x64\xbf\x60\x65\xde\x3b\x0e\xf0\x7d\x8e\xfc\x5e\x9c\xc8\x68\x42\x8b\x0a\x6e\x18\x7a\xd2\xf8\xaa\xaf\x54\x5a\x7b\x1e\x6b\xc5\x10\x5a\x36\x9a\xf1\x75\xc1\xf4\x57\x36\x90\xa6\x7b\x77\x6b\x64\xd9\xb0\x04\xa9\x3f\xef\x8c\x83\xda\x71\x76\x2a\xbd\x79\xef\x8d\xb4\x4b\xb9\xa4\x67\x14\x43\x8f\x5b\x89\x99\x0d\x5a\x58\x28\x9e\xd6\xd0\x06\x8e\xef\xf4\x7c\x98\x5c\xf6\x19\x52\x93\x9e\x55\x92\xb7\x0a\x30\xc9\x48\x8b\xcb\x75\x0a\x3b\x4f\x7b\xfc\x1c\x34\x9b\x8c\xf1\x63\x5d\x64\xea\x9e\xbf\x3a\x31\x11\x78\x3b\x59\x65\xe0\x47\x9e\xe0\x75\x8e\xee\x2b\xf7\xfb\x98\x53\x13\x53\x29\xb9\x55\x14\x00\x3d\x78\x3b\x1c\x95\xc8\xef\x3d\x8b\xd5\x35\xb9\xae\x15\x19\xde\x95\x4d\x39\x41\xe0\x49\x33\x6c\x40\x37\xe0\xbc\x84\xed\x35\x08\x36\x91\x6d\x64\x75\xb6\x1d\x18\x98\x9c\x21\xad\x78\x8f\x2e\xa2\xdc\xae\x67\xc6\x9f\x39\x6e\xa7\x55\xa6\x9b\xce\x53\xd0\x7a\xe9\xc9\xa0\x02\xc8\xdf\x9d\x16\x89\x22\x1a\xdb\x2b\xae\x43\x93\x7f\xc5\x3c\xb4\x53\x36\xb2\x86\x2e\x94\xee\xca\xe5\x4e\x35\x13\x99\xc7\x7e\xe1\x10\x28\xe5\xfa\x83\x7f\x08\x8d\xd4\x92\xc7\xce\xa2\xa2\x03\x59\x87\x80\x01\xe5\xd9\x0a\xf6\x37\x7d\x3b\x04\xe7\x1b\x93\xc3\x97\x90\x59\x64\xb0\xaa\x8a\x0e\x3a\x62\xa8\x29\x2a\x7c\x1a\xec\x92\xaa\x45\x1e\x8a\x5a\x26\x59\xb0\x8e\x1f\xca\xab\x71\x1c\xee\xb7\xca\xc2\xf6\xc2\x4b\x60\x59\x11\xec\x48\x82\x10\xed\xcc\x2e\xcf\xac\x94\x47\xe2\x2b\x21\x2b\xc2\x7a\x87\x2a\x43\xea\xa6\x2c\x2f\xd8\x7e\x27\xda\x0b\xb6\xa5\x02\xd5\xde\x6a\x54\x5c\xc3\xca\x8d\x4a\x64\xbd\xf9\x5b\x53\x65\x61\xcf\x58\x4e\x67\xf6\x93\x76\x33\x8b\x2f\x99\xf2\xf5\x7b\x89\xb8\xdf\xb6\x02\xf3\xcf\xdf\x9b\xc6\xc5\x6c\x9d\xe9\x20\x07\x87\xe5\xc3\xa2\x45\x77\x9b\xe9\x66\x1f\x43\xcb\x29\xd4\x4d\xcd\xf9\x0c\x8b\x04\xd9\x8e\x00\xc8\x5a\x80\x41\xb1\x2c\x74\x0b\xe1\x87\x13\x41\xaa\x66\x4c\x79\x02\x59\xfc\x40\xec\xd1\x6c\x53\x9b\x93\xa8\x5a\xb2\xbe\x46\x9f\x03\xc4\xcd\x75\x09\xbd\x79\x1d\x6f\x4c\xdb\x61\xf6\x3e\x7b\x4b\xc0\xd4\x2f\xf1\x80\x57\x57\xba\x72\xd8\x80\xd6\x71\x05\x47\x42\x07\x0d\xb5\x1a\x18\x13\x69\x9f\xa9\xb7\xa5\x97\xb2\xc9\x72\x28\x9f\x43\x80\xbd\x49\x47\xe1\xe3\x16\xae\x7d\x36\x09\xee\x3a\xf3\x1c\x44\x63\x16\x05\x55\xe0\xc8\xd4\x8e\x35\x5f\xba\xec\xcf\x57\xae\xa1\x2f\x27\x4f\x1e\x72\xcd\xe6\x82\x94\xc4\x4d\xf6\x44\xf5\xe5\xf1\x3b\xad\xc9\x37\xd7\x3d\xe0\x96\xfd\xfe\x08\xcf\x6c\x57\x7e\x37\x3c\xaf\x82\x2e\x55\x36\xa9\x6e\x3c\xe5\xf2\xb5\x2a\xef\xb7\xf9\x12\x49\xd9\x11\x46\x72\xcc\x77\x46\x80\xf8\xfb\xe7\xb7\xe8\x98\xf9\x08\x1a\x72\xc6\x82\xf2\xc9\x14\x8d\xc7\x38\x3d\xea\x52\x18\x27\x29\x83\x2f\x4b\x85\xaf\x60\x91\xc8\x00\x56\x4f\x12\xd3\xc2\x6e\x43\x33\xcd\xea\x4d\xca\xbe\x09\xb8\x76\xfc\xfe\xde\xf7\xc9\x52\xb6\x68\x05\xdd\x71\x30\xcd\x6f\x58\x2c\x15\x28\xc1\x7d\x11\x8a\x87\xe7\xd5\x98\x67\x83\xe0\xf4\x4c\xbc\x48\x09\x46\x57\xea\x75\x50\x14\x27\x95\x3b\xac\x85\xc1\xae\xad\x98\xba\x2b\x18\x26\xe5\xe0\xf2\xcc\x65\x70\x81\x69\xbc\xa8\xd3\xae\xe3\x8c\x12\xcf\x5a\x57\x0f\xb3\xee\xac\x91\xcf\xfb\x6d\xfd\xc7\xae\x98\x3f\x54\x40\xeb\xc6\x43\xd4\xf1\x2f\x5c\xb4\x2e\x64\x7e\xb6\x6b\xbe\xf1\x55\x2f\x9c\xed\xce\xcb\xfc\x10\x0c\xf8\x6c\xd0\x8c\xeb\x9f\x2e\xcb\xb3\xc3\x02\x3a\xd5\x99\x51\x41\x31\x33\xd3\x57\x31\xcf\xd3\xb7\x45\x23\xa1\xce\xbb\xec\xe7\xec\x73\x3b\x51\xd6\x74\xd7\x61\x22\x12\xfb\x27\x0d\xac\x4a\x97\x56\xb8\x28\x89\xbe\xc3\x56\x13\x4c\x62\x8d\xd9\xa7\x42\xfc\x65\x16\xff\x0f\xc5\xb0\x88\x1f\xdc\x4a\x6d\x4e\xde\xd7\x1a\x06\x30\xc0\x3e\xaa\xa4\x2e\x7d\xbe\x9e\xc5\x4b\x90\x09\x2f\x3e\xac\x59\xb6\x68\x28\xd0\x6e\x8d\x49\xe2\x18\x71\x57\xb1\x11\xc7\x47\xbb\xd5\x0b\x00\xbd\x93\xd8\xcf\xa0\x31\x82\xae\x1c\xba\xbe\x83\xb9\x8e\xe6\xd0\xd5\x4e\x8b\x09\x56\x5e\xca\x1e\x4b\xd7\x2d\xb0\xbf\x89\x39\x71\x07\xdb\xf2\x8e\xa8\xe0\x49\x79\x37\x20\xe5\x26\x05\x0d\x0c\x28\x58\xbd\x1b\x20\x29\x29\x72\xfb\x73\xf5\x53\x9e\x64\xd0\x37\x64\x96\x13\x28\xe0\xe6\xde\x5a\xf4\x6a\xf8\xc3\x2d\x69\x90\xc2\xe9\xc4\xcb\x4c\x94\xad\x1d\x1f\xff\xf5\x2f\xbd\x7e\x69\x8f\x3d\xf5\x87\x5c\x12\xe8\x43\xc0\x18\x3c\x21\xde\x44\x3d\x94\xe3\x4a\x12\xfb\x0f\xf2\x35\x5b\xd5\x79\x15\xab\x03\x6b\x7f\xd2\x03\x53\x62\x86\xe1\xfc\x05\x8c\x5b\xcf\xc0\x4f\x86\x6c\x9c\x4f\xe7\xa6\xe9\x36\x71\x3d\x5a\xf2\x26\x09\x50\x2a\xee\xdd\x4a\xfd\x71\x97\x9e\x17\x43\x56\x02\x05\xfc\xa2\xf2\xf6\x7f\xe9\xdb\x57\xa8\xc9\xe3\x3f\xf6\x3d\x1d\x18\xec\x28\xa0\x60\x33\xe9\x29\x88\xd3\xe9\xa8\x36\x78\x91\x88\xbf\x10\x3a\xd8\xc1\xb9\x03\x98\x22\x06\xc2\x7f\xb8\x84\x4f\x84\x3e\x89\x3f\x37\x35\xf9\xec\xbc\xf8\x1c\x43\xd4\x51\xce\x0d\x35\x00\x4d\xcd\xce\x12\xe9\x74\x14\x05\x2c\x2c\x42\x3d\x22\xa3\x75\x27\x41\xba\xdd\x1e\x5d\x2a\xcc\xbf\xc7\x83\x5c\x5a\x21\x16\x2f\x4a\xf2\x0b\x1b\x5d\x6d\xe0\x31\x56\xd0\x25\xdd\x3f\x66\xee\x7f\x53\x69\x88\x88\x27\x36\x0e\x18\x7d\xe0\x6a\x52\x32\x33\xc3\x80\x4f\xb9\x8d\x28\xf2\xe5\xd9\x0b\x5c\xcb\x38\x39\x83\x78\xb8\x72\x22\x9b\x73\xcb\xd2\x0e\x34\xbd\x53\x30\x81\xaf\xcd\x2b\x32\xbf\x8c\xe7\x4c\x23\x2b\x80\x24\x4c\x4d\x9b\x5c\x63\x47\x32\x0f\x93\xff\xcf\xeb\x2d\xac\x0e\x9c\xfa\x5b\x52\x77\x06\x00\xf4\x73\x4e\x97\xd5\xd6\x73\x1f\xc7\xdd\x67\xbf\xcc\x77\xf3\x4f\x1b\xbd\x52\xd1\xc3\xac\x96\x07\x71\x75\xdd\x8f\x91\x24\xe3\x1e\xe5\x81\x67\xcc\x99\x9b\x6f\x7a\xbe\x03\x0d\xda\x3f\xfd\x0f\x9e\xb1\x12\xf8\x3c\x82\xb8\x62\xa8\x28\x48\x31\xed\xa8\x1f\x5f\xbe\x61\x5f\x9e\x86\xde\xfd\xe7\xf5\x4e\xf2\xce\x44\xde\xc6\xb9\x4f\xbf\xa2\x59\xcf\xd1\x08\x71\x86\x77\x5f\x3d\x14\x1e\xff\x3b\xc9\x66\x5e\x89\x77\x90\x44\xfa\x92\x3c\x44\xe4\x2e\xc5\xf5\x20\x9e\x18\x58\xe0\xe2\xc1\x2d\x21\x1a\x2f\x44\xa2\x3b\x63\xf4\x7b\xe8\x2e\x4f\xdf\x1d\xa2\xaa\x74\x08\xc1\xd9\x2c\xbf\x35\x18\x6d\x1f\x22\xc2\x3e\x04\x7c\xd9\xcd\x29\x77\xb4\xb3\xaa\xb5\x64\x11\x64\xf1\xb4\x97\x08\x5a\x8a\x56\x07\x41\x89\x48\xca\x97\xc2\x01\xda\x09\x06\xd3\x43\x80\x7e\x65\xd0\x06\xc7\xa9\xb3\x9f\x5b\x17\xec\x6c\xc3\xbc\x4a\x52\x08\x7b\x97\xd1\x28\x81\x6c\xe6\x19\xa2\xfe\xb2\xff\xd1\xd1\xe6\x2e\x18\xc1\x4c\x6e\xf3\x55\xe5\x4d\x65\xa4\xea\xb8\xcb\xee\x0c\x09\x3c\xc2\xe9\xfb\xf7\x15\x38\x34\x67\x8a\xe8\x03\x71\xd3\xc7\x09\x05\x39\x40\x9e\x07\xf5\x53\xf6\xed\x7a\x9d\x7e\x19\x17\x13\x5e\x7c\x83\x0d\x04\x5c\x4a\xd9\x3e\x1a\x84\x3a\x18\xb6\x27\xa8\x9c\x9f\x57\x7f\x36\x01\x9b\xc6\x68\xac\x09\x62\x59\xea\x4e\xc5\x37\x9b\x65\xff\x3f\x2e\xec\x1c\xe3\x3a\x89\x14\x8a\x56\x89\xab\xaa\x68\x09\xbd\xd8\xfb\xcf\x0d\x80\x35\x63\x31\x57\xbe\xb6\x81\xbe\x04\x25\x72\xf6\xa8\xa5\xf8\xf4\x96\x6f\xc3\x0d\xee\x3b\x43\x8b\x12\x53\xf3\xf2\x9b\x98\x23\xcd\x75\xc0\xd0\xda\xd7\xfa\x68\x8f\x95\x1a\xbe\x74\x75\xc4\xc8\xf6\xa0\x92\xc2\x0b\x7f\x62\xf6\xc7\x44\xdd\xab\x2d\x4c\xd6\x0d\x94\x70\xb4\xdf\x01\x00\xd2\xd4\x70\x25\xcf\x91\x92\x2f\x61\xfd\x08\xd6\xdf\x05\x5e\x31\xac\x1a\x8b\x4d\xfe\x36\x24\x53\xfe\xf2\x78\xe9\x30\xdb\x23\x9d\xf0\xd9\x5f\xa4\xb5\x04\x4b\x5f\x2d\xa4\x8c\xfa\x02\x85\x9f\xe5\x0d\x58\x4d\xfc\x08\x21\xda\x49\x54\xfb\xb0\xf6\xdc\x9b\x71\xc9\x7e\xc5\x57\x97\x0f\xd0\x01\x5c\xec\xd7\x90\x20\xec\x7a\x05\x88\xd7\x69\x3b\xac\xfb\x32\xcc\x87\x04\xfb\xfe\x0f\x18\xaf\xc7\xb5\x9b\xb2\xa6\xe7\x5f\x4f\x27\x82\xa7\xc1\x86\xaf\x79\x5d\x65\xec\x01\x34\xb3\xc9\xb3\xf6\x7f\xc8\xaa\xe1\x9a\x3e\x3e\x8f\x14\x62\xe8\xd9\x0a\x4a\xb7\x7d\x63\x43\x08\x1a\x45\xfb\xd4\x99\x04\x7a\xb6\x68\x3e\x5c\x19\x2a\x6f\xe9\x43\xb4\xae\x94\x07\xa3\x53\x06\x8f\xfe\x08\xd4\x08\xbc\x45\x77\xa1\xd3\x04\x13\x4e\x3d\xde\xbc\x6a\x18\x96\x4e\x7e\x17\x7a\x99\x1e\x14\x0e\x47\x4d\xea\x9c\xf3\x59\x43\x5d\x7b\x01\xc2\x9d\x6e\x4d\x65\xdb\x74\x81\x0e\xbe\x35\x64\x76\xed\x9e\x14\x2e\x56\x4d\xe7\x32\xb7\x9f\x34\x86\xc8\x55\x04\x27\xa4\x12\xc7\x47\x38\xc5\xa6\x1e\xce\xe0\xe9\xf6\x08\xa9\x00\x27\x31\xa5\x70\x36\x66\xed\xd8\xaa\xb1\xf9\x0f\x9a\x9f\x19\x7b\xe0\x2f\x47\xe4\xe0\x8c\x7b\x79\x96\x2b\xfe\x0c\x1f\x88\x04\xe2\x55\xfc\x95\xd5\x51\x98\xc7\x63\xbd\x70\xd7\x97\x3d\xf6\xde\x25\xbc\x6d\x92\xe4\x59\xac\x59\x86\x62\x1c\x75\xde\xf3\xb9\xbe\x30\xdc\x31\xcd\xd6\x80\x52\x69\xf2\x8b\xd3\x4f\x09\x7e\xc0\x99\x9e\x5e\x5d\xbb\xee\x92\xb2\xaa\x35\x2b\x7b\x15\xde\x33\xbc\x2c\x3c\xe3\x62\x31\xf6\x39\xd1\x13\xf8\x24\x0e\xce\x0d\x84\xad\xc1\xbf\xae\x46\x58\xaa\xfc\x53\x4b\x99\xc9\x45\xf9\xd3\x92\x05\xa7\x32\xe0\x45\xea\xb4\x6d\xed\x0c\x14\x30\x36\xfd\x4e\x4c\x4a\xea\x36\xe6\x74\x87\xf6\xd2\x9f\x06\x59\xe3\x59\xff\xb0\xef\xb7\x98\xb2\xf9\x44\x5c\x54\x46\x9d\xd5\x73\xc1\x34\x06\x90\x47\x72\x59\x3a\x6f\x75\x32\x75\xf7\xf0\x10\x1e\xa5\x31\xaf\xdc\x4b\x61\x7e\xbd\xa8\x8f\x80\xe5\x0c\xc1\xb3\x24\xbc\x84\xf0\x00\x35\xad\x49\x51\x3c\x9d\xbd\xcb\x6a\xb5\x84\x23\x87\x6e\x68\x12\x90\xa5\x23\xcb\x31\xf1\x73\x86\x7e\x1a\xd5\x5b\xec\xb7\xab\xba\xff\x02\xbe\xdd\xa9\xd0\xd4\x5d\x3d\x48\x09\x51\xea\xe0\xd2\x06\xd0\x3f\x8b\x2e\xb7\xf2\x47\x1b\xdb\xa9\x76\x7a\x79\xa6\xc8\x79\x6e\x57\x5d\xd4\x00\xe4\xf9\x1e\x6f\xde\x6a\x69\x5e\x23\xb1\xaa\xf4\xc1\x7e\x4e\xe9\x43\xfa\x76\x45\xa7\x1e\x48\xd3\x10\xc5\xc1\x0a\x1b\xca\xe9\x97\x96\x05\x64\x1a\x78\xae\x2e\xa6\xb7\xdf\xe1\xc5\x54\xba\xa9\xbf\x43\x50\xd4\x66\x16\xb4\x33\x7e\x9e\x1b\x28\x39\x1f\xf6\x56\x95\x2d\xe2\x8d\xf0\x5f\xc8\xb3\x80\x98\x8d\x75\xdf\xdb\x73\xa3\x0b\xa4\x8e\x2a\x0e\x92\xef\x39\x9b\x62\x14\xda\x97\x06\x81\xa5\x70\xbf\xdf\xd5\xf9\xda\xc1\x01\x7a\x12\x4b\x34\x04\xc5\x52\x69\xbf\xac\x76\x4d\x13\xc9\x61\xa9\x68\x3d\x0f\xd6\xfb\x36\x60\x4e\x95\xb3\xb5\xab\xf7\x18\x09\x16\x0f\x3c\x07\xbc\xfa\x31\xe5\x57\x8a\x85\xbb\xae\xf3\xfe\x39\xc6\x06\x9f\x72\x26\xb2\x68\x62\x46\xef\x1f\x11\x2b\x83\x80\x2b\xab\xec\xe0\xe7\x40\x01\xc7\x2b\x71\x7d\x97\x74\xe6\xc2\x1f\x13\x32\x69\x10\x95\x42\x2a\x0b\xc6\xc3\xb7\x96\x56\x82\xc6\xa7\x01\xac\x7d\xc8\x4e\x24\xcf\xdd\x00\xfa\x53\x4b\x11\xa6\x58\x05\xfe\xf1\x93\xab\x1a\xb8\x92\x63\x1b\x5d\x9d\x83\x27\xab\x68\xf4\x4c\x8c\xc9\x7e\x13\x1f\x7b\xe6\x16\xaf\xc1\x94\x5c\x55\x22\x81\x1d\x99\xc4\x9b\xac\x37\xcc\x84\x73\x28\x3e\x56\xdd\xbf\x25\x78\x12\xd1\x93\xde\xd4\xb1\xd7\x56\x51\x06\xc4\x75\xff\xa5\x9f\xca\xe2\xa3\x3f\xc5\x8d\x89\xda\xbe\xf9\x6b\xf8\x10\xef\x86\xcc\xd1\xe7\x30\x48\xd5\xac\x31\x54\x12\x2e\x1a\xd5\x24\xaa\xa1\x18\x40\x6a\xc4\xc5\xbf\xb9\xf3\x02\x81\xd2\xea\x33\x94\x00\x41\x97\x9b\xa2\x11\x67\x22\xd7\x78\x01\xcb\x55\x8a\x04\xe9\xab\x9c\x6b\x85\xd9\x5f\xa4\x16\x12\x0b\xb8\xb6\x7c\xec\x43\xcf\xe6\x35\x55\xca\x5a\x25\x63\xb7\xec\x75\x7b\xae\x60\x79\x66\x0c\x03\xe3\x0c\x32\xdb\x69\x92\xc0\xc3\xc5\xaa\xdc\x27\x1c\x91\x58\x11\x3e\xa4\x3f\x5e\xa2\xc9\x05\x48\x36\x6f\xd8\x07\x78\x19\x54\x9e\xf7\xfc\x42\x71\x8e\xcb\x4a\x03\x3b\x5e\x06\x1b\xbd\x99\x83\x57\xbe\xcb\xce\xe1\x2d\xf7\x5a\x40\x30\xff\x13\x3b\x60\xba\x58\xd2\xfa\xf9\x0e\x22\x86\x8d\xa8\x6f\x7c\x2d\x02\xb0\xca\x94\xd5\xe4\x92\xa6\x73\x24\xd2\x7e\xe1\x8d\xdf\xb1\x29\x7e\x9b\xef\x65\x3c\x6b\xc5\x15\x36\xe6\x85\xca\xfa\x5c\x47\x75\x19\xb0\xb2\x0d\x8e\xcb\x91\x6e\xa1\x0a\x29\x18\x2d\xbc\x57\x82\x7f\x9b\x29\x43\xae\xbc\x01\xe7\x90\x3c\x7d\xf4\x76\xec\xb0\xaf\xd4\x2d\x77\x15\x50\x3f\xac\x69\xcb\xef\xa9\xa1\x79\x1e\x95\xeb\x21\x45\x47\xdb\xae\xbc\x31\xc1\x6a\xd1\x4d\x24\x83\x4f\xa9\xc8\x50\xda\x2d\x11\x26\x90\xfe\x22\x35\x97\x96\x7e\xc9\xbc\x1d\x75\xf8\x7a\x77\x92\x16\x41\x03\xfd\xc5\x5e\xb2\x91\x49\xab\x2d\x69\xaf\xe5\x2a\x4f\x41\x0e\x93\x50\xfa\x5f\x48\xdb\xa9\x59\x7d\x0e\x93\x5f\x54\x84\x19\x94\x64\x3f\xa3\xa2\xc7\xf8\xc4\x0d\x97\xd5\x94\x93\xf0\x51\xdf\xe6\x6b\x9b\xa9\xd4\x38\x03\xc3\x0f\xc7\x52\x7d\xf9\x6b\x5a\xe1\xe0\x2b\xba\xf1\x70\xec\xe7\xd2\x6e\x04\xd2\x49\x6b\x62\x2f\xc7\xf5\x45\x17\xed\x2e\xc6\xe8\x2d\x33\xd0\x1d\x59\x59\xb0\xaf\xc0\x64\xc6\x28\x53\x87\xc0\xc1\x79\x51\xfd\x31\xf3\xc4\x8b\x80\x18\x8b\x50\x33\x66\xb5\x81\xc3\x03\xbf\xc0\x1f\xb0\x34\x2f\x61\x60\x30\x48\xe5\xb9\x5e\x77\x73\xbf\xd2\xad\x26\x32\x39\xa5\x2a\x5b\x95\x5e\x56\x0c\xe1\x35\x87\xcd\x53\x35\xab\x71\xfa\xe7\x6c\xf1\xaf\x6f\x53\x11\x38\x14\x38\xb0\x8e\x40\x35\x92\x3c\xc6\x04\x3c\xb3\x68\x4e\xb1\xb2\x07\xfb\x79\xa9\xb4\x19\x83\xe1\x49\xcc\x24\xd2\x4f\xad\xdd\xbb\xc7\x5f\x34\x9a\xc1\xc2\xcf\x22\xa9\x3e\x93\x3d\xf1\xf0\xb4\xdc\xb3\x93\x6f\x4d\xf6\x71\xb2\x04\x0d\x2b\x19\xb9\x92\xdc\xf8\x6c\x7e\xbe\x49\x16\xcb\x7e\x72\x07\x80\x3e\x39\xb2\x21\xfe\xe9\xa1\x32\xdb\xba\x10\x6f\x16\x9c\x14\x9c\x85\xda\xbe\x24\x56\x32\xa8\x3f\x33\x76\xd7\x46\xb1\xee\x65\x08\x86\x4c\x07\xd2\xc0\x68\xf2\x6c\x08\xa0\x2d\x5f\x08\x7f\xf5\xfe\xfe\x4d\x99\xb3\xf9\x53\x52\x68\x34\xe6\x62\x54\x92\xc9\x93\x91\xb7\xa9\xa2\xff\x44\x36\xfe\xeb\x9e\x2e\x4c\x29\x08\x56\x05\x15\x5e\xd2\x12\x52\x45\xe1\x10\x66\x6f\x0d\x44\xea\xa9\x36\x2d\xc0\x62\x70\xb3\x41\xa5\x88\x12\xd6\xfc\x9d\x9d\x8f\x96\xeb\xd9\x0b\x4e\x84\xe0\xf8\x71\xb8\xfb\xf4\x8d\xea\xe3\x96\x8d\x14\x57\x62\x81\x9d\x55\x4b\x46\xf4\x35\x93\x91\xb0\xb8\xa7\xc9\xbd\x7b\x9e\xfb\x7f\x27\x62\x6f\x77\xc9\x22\x42\xe3\xd3\x50\x5a\xec\x04\xda\xdb\xdc\xa8\xc8\xf2\x26\x28\xeb\xd0\x7e\x82\xea\x37\x78\x41\x42\xd7\x86\x44\xf0\x23\x97\xba\xdb\x76\x18\xee\x3a\x64\x4d\xfd\xb3\x18\x82\xa8\x8e\x19\xda\xdc\x2b\xe5\xca\xc0\xd1\x50\xe3\xfe\x39\x01\x17\x2d\x08\x82\x3d\xb4\xe8\x3f\x87\x26\xaa\x54\xd6\x74\x8f\xb8\x10\x4f\x1f\x47\x96\x40\x5c\x81\xa1\x5e\x73\x71\x47\xca\x97\x2f\xf8\x2c\xd5\xd1\x4d\x6f\xaa\x8d\x30\xa5\x21\x22\xd7\x89\xa5\xff\x55\x20\x61\x8b\xc6\xc4\x1d\xeb\x96\xc3\xb2\xfc\x31\xf5\xf3\x3c\x0f\x8b\xf7\x2d\x93\xb7\x4f\xe1\x52\x6f\xd2\xc5\x5b\x7f\xa4\x2d\xa5\x98\xde\x80\x01\xd1\xe9\x82\x19\x70\x37\x29\x08\x9c\xce\x81\x5f\xcc\x63\xcd\x44\x4b\x7a\xd3\x6d\x76\xd8\xd7\x6a\x36\xe9\x9f\x10\x3f\x7a\xab\x89\xf8\x77\x68\xe7\x29\x44\x5c\xcf\x19\xad\x83\x95\x2e\x49\x07\x73\x19\x54\x3f\x5e\x0c\x5e\xbc\x1b\xf4\xd6\x96\x8b\xcb\x6b\xfb\x59\x54\xbb\x03\xb6\xfb\xc2\x24\xd7\xec\xd7\xc1\xcc\x76\xe6\x6d\x7a\x4f\x50\xd1\x54\x1d\x1f\xac\x90\x06\xd9\x45\x8f\xc2\x6c\xc1\xca\xb0\x29\x11\x65\xdf\x03\x5f\xc5\xf2\x59\x63\xb3\xca\x95\x2c\x9e\xb4\xd8\xbc\x6a\xeb\xf0\x88\x17\x43\xca\x77\x7a\x08\x2f\xb9\x1d\x38\x0d\xf0\xc2\x8f\x77\x70\xd8\x81\x95\x53\x31\xf4\x08\xf3\x82\x93\x93\x68\x42\x0d\x45\xb2\xf6\xbd\xdc\x90\x4e\xf4\x25\xad\x31\xc7\x63\xe3\x0f\x54\x9a\x71\x94\xb9\x34\x60\x6b\xb6\x34\x6f\x21\x65\x85\xb3\x68\x53\x81\x15\xd5\xfe\xa1\x96\x58\x11\xdf\xd0\x2f\x82\xa7\x1e\xc4\x37\x67\x9a\xb4\x98\x67\x5e\x40\x59\xce\x32\x4b\xb2\xaa\x8b\xf3\xa0\xd2\xbb\x73\x0a\x14\xec\x3a\xdc\x40\xd6\xb6\xaf\x69\x7a\xba\xcf\x48\x90\xf3\x72\xf1\x52\x9e\xae\x1b\x03\x1b\x87\x4e\x0f\x79\x22\x95\x4b\xff\x4a\x3f\xab\x51\xe2\x87\xdd\x3c\x86\x35\x45\x2f\x0e\xd3\x33\x41\x07\xd7\x27\xe7\x3c\x42\xc3\x9d\x35\x7f\x91\x86\x6d\xa9\xb9\xc2\x70\x4d\x1e\xe6\x14\x2a\xb2\x8e\xbb\x21\xf1\x2b\xfe\xf8\x72\x88\x3e\x77\xf8\xcc\x89\x4b\x3e\xed\x57\xfe\x0c\x18\x56\xe8\x98\xf4\xe5\x8f\xaf\x06\x47\x27\xe7\x49\x2d\x8b\xe8\xcb\xfd\x14\x7f\x09\x7c\x6d\xb6\x5d\x7d\xd6\x6e\xbe\xf2\x7e\x4b\x2c\xb0\x33\x9b\x56\x66\xcf\x63\xf1\x5e\xa7\x17\xe4\xf6\x1a\xe7\xe4\x55\x71\x2f\x55\x36\x78\x54\xb4\x3a\x65\x17\x95\xb2\xbe\x38\x18\x79\xad\x43\x00\xd0\xb7\xcb\x18\xe6\xe9\x1e\x98\xee\xb5\x2d\x75\x7f\xc4\x1c\x8e\x74\x59\x96\x61\x20\x92\x2f\xcd\x75\x4f\x33\xc4\xab\x97\x60\x54\x5f\x01\x92\x12\xe8\x97\x55\xf0\x08\x4b\x55\xe5\x3c\x93\x35\xac\xbe\xbc\x61\xcb\x8d\x74\x63\x67\x73\xdb\x2e\xa7\x37\xd5\x3c\x73\xc0\xcf\x18\x03\x42\x1e\xfa\x97\xc8\x62\x65\xf7\xf5\x0a\xd0\x1f\xc5\x9b\x98\x8c\x31\x24\x6e\x8e\x20\x21\x68\x5f\xd0\x73\x56\x28\x31\xe6\x73\xc1\xf8\x02\x48\x23\x1b\x85\x26\x78\x5a\x3f\x7f\xd3\x0b\xc1\x31\xa3\x68\x4e\xd0\xe6\x25\xb7\x4a\x10\xb9\x4a\x11\xac\x7f\x64\xea\x81\xc3\x65\xde\x05\x84\x07\xec\x29\xf3\x9b\x86\x5d\x91\x7a\xa0\xbf\x7f\x7e\xb1\xfe\xe6\x68\x13\x41\x5a\xed\x4f\x73\xe7\xec\x52\x75\x8c\xe0\xd0\xd5\x0e\x68\x13\x79\x3f\xb9\x37\xae\x10\xd0\xed\xef\xdf\xe7\x5d\x39\xea\x12\x6c\x17\xb0\x87\x80\xf4\x8a\xf1\x98\xcc\xa2\xf5\x86\x61\x5a\xba\x0a\x48\x1d\xa8\x9e\x90\xb7\xac\x7e\x6a\x63\x3b\x49\x3e\x12\x83\x14\x7e\x4a\xe7\x35\x4f\xf2\x58\xe8\xc7\xc8\xf3\x17\x27\xb6\x94\xf0\xc7\x38\xac\xa0\x71\x96\xc9\x8b\x7e\x69\x70\xc3\xcf\x7e\xec\x4e\xcd\x41\xc8\x36\xe1\x57\x88\x7e\xb6\xd0\x5c\x7a\x8f\x3f\x55\x01\xa1\x42\x07\x11\x90\x3b\xd2\x3f\x54\xfc\x58\x73\xad\x3c\x13\x91\x2f\x62\x64\x5e\x06\x4e\xa0\x5e\xbc\xe2\x77\x3d\x31\xba\x3d\x82\xa2\x64\x94\x85\x1a\x34\x1d\xcc\x63\x6e\xaa\x6d\x61\x9e\x0e\xde\xa2\x41\xfa\x20\x5e\xdd\x79\xed\x43\x2f\x90\xea\x7a\xfa\xb5\x79\x95\xd4\x21\xdb\x49\x75\xa1\x05\x08\x4f\x38\x64\x68\x75\xdc\xce\x39\xdb\x75\x78\xf9\x45\xf2\xd3\xcb\x78\x78\x5f\x24\xab\x04\x86\x4f\x90\xef\x0d\xdf\x7c\x5b\xf1\x76\x0c\xb2\x00\xa4\x72\x1c\x2c\xe5\x4e\x39\x45\x2f\x6f\xe6\xe3\x45\x0b\xe6\x5e\x6d\x1a\xc5\xd8\xed\x2e\x60\x8d\x0c\x04\x52\xe7\x14\xb7\xf2\x1a\x02\x8d\x7f\xb5\x61\x79\xc8\x3d\x76\xd0\x07\xb5\xcd\x19\xe0\x6d\x9f\xed\x57\x8d\xe2\x1d\xc0\x64\xe7\xbe\x55\x1e\x3c\x57\xde\x31\x57\x92\x1f\x04\x54\x9a\x76\xee\x99\xe9\xaf\xb5\xae\x09\xb3\xc2\xf1\xe5\xe0\x26\x71\x51\x41\x73\x36\x2b\xc6\x10\xc7\x5f\x63\x88\x01\xca\x1d\x6a\xc4\x40\xc6\x75\x21\x43\xd8\xd1\x80\x86\x01\x35\x86\xc7\xb0\xd3\x1b\x5a\xfc\x74\x1e\xc2\x05\xf9\x08\x8d\x46\xd2\xb3\x01\xd2\x15\x04\x6e\x65\xa0\x68\xd6\xaf\xe7\x5f\x5c\x8f\x42\xf0\xa7\xca\x3e\xe9\xff\x38\xb5\x9b\x14\x34\x74\x3b\x6c\xfc\xa4\x98\xa2\x44\x97\xa4\xb3\x45\xc6\x5b\x40\x0e\x2e\xfe\x44\x44\x56\xf4\x11\x3c\xf2\xfa\x80\x3a\x69\xc7\x9f\x38\x7a\x0d\x2f\x95\x51\x87\x2f\x12\x24\x89\x6d\x88\x96\x2d\xb4\xf3\x7d\x78\xfe\xaa\x34\x73\xa2\x80\x0a\x17\x91\xa7\x56\xc8\x69\x28\x4c\x97\x63\x94\xe6\x26\x7a\x27\x35\xa5\x42\x5a\xf3\x78\xab\xff\x79\x01\xf5\xbb\x00\x40\xfb\xb3\x59\xbf\x16\xa5\x85\x4c\x0f\x2a\x23\x2b\xbd\x92\xb8\x38\xf9\xa6\xb0\x86\xc4\x9a\xc7\x0e\x0f\x87\x93\x3c\x82\x83\x09\x17\x05\x76\x33\x4e\x40\xf7\x38\xd7\x17\xcc\x16\x71\x13\x33\x79\x55\xfb\xfe\x53\xcd\x3b\xbd\xaa\xf5\x65\x9d\x36\x18\x34\x26\x33\x37\xc9\xa4\x3a\x4d\xc0\xce\xeb\x39\x2b\x98\x76\x6a\xec\xb5\xc1\xa9\x59\x48\x43\x00\xd3\x9e\x40\x5b\xfc\x64\x72\x3e\xfa\x55\xd5\x0c\xd2\xb7\xe1\x24\xb6\xe7\x60\x75\x90\xf9\x90\x00\x6c\x4d\xb1\x0f\x23\x27\x6c\xdf\xd7\x82\xbd\xeb\x31\x64\x63\xb7\xd9\x2d\x57\x47\xe2\xb8\x13\xdf\xc7\x08\x3f\x6f\xff\x8b\x54\xc5\xf1\x1b\xaa\x51\xef\xb8\xff\xa5\x52\x6d\x16\x5c\x12\x4c\xd3\x08\xca\x24\xae\x2c\xfe\x47\x8f\xae\xc9\xfc\x33\xea\x6a\x63\x05\xc0\x8b\xf2\x96\xb3\x18\x23\x65\xe8\xe8\xbb\x5d\x65\xd9\xdb\x4f\x07\xef\x13\x04\x38\x34\xec\x7c\x0c\xe2\xd2\x3e\x92\xa3\x2c\x56\xd9\x20\x80\xfd\xfb\xb2\x8c\xb7\x26\x5a\xa6\x24\xcd\x86\xf2\x4e\xa2\xd5\x93\x42\x6a\xb2\x1c\x52\x45\xc9\x76\x8e\x7b\xcb\xf5\xa3\xa3\xdf\x19\x03\x8e\x74\x09\x5c\xd4\xcb\xdd\xe7\xae\x66\x9a\xc9\x8f\x0f\x34\x97\xb9\x24\xb5\xd6\xe0\xf2\x78\x46\xf9\xfc\x5a\xfc\xc4\x76\xd3\x0b\xd1\x9a\x00\x99\xaa\xbf\x39\x1c\x82\x35\x4d\x93\x6d\x48\xfa\x53\xc9\x50\x4e\xd3\xf1\x68\xe5\x05\x39\x36\x13\xdf\x5d\x41\x15\xff\x93\x43\xaf\x28\x30\xc1\x61\x36\x8a\x4f\xea\x51\x51\x07\x1c\x19\xee\x16\xc2\x6e\x26\x72\xc7\x44\xfc\x1d\x05\xe7\x6e\x0f\x26\xe1\x8d\x5f\xf5\xaf\x67\x92\x14\x00\xab\xcc\xc2\x22\x18\x85\x9c\xfa\xbf\xe0\xdf\x12\xbd\x75\xee\xed\xcf\x8c\x29\x3e\x74\x0b\x26\xa6\xee\xb0\x28\xe0\xaa\x5f\xee\xa2\x04\xbc\x48\xae\xd7\x30\x88\xcd\x46\x3e\x32\xcd\x59\xbe\xd6\x58\x73\x45\x9a\x89\x1a\xfe\x90\x0e\x2d\x08\x23\x49\xdd\xf7\x50\x1e\x3b\x0e\xc1\x7f\xf2\x3d\xff\xed\x75\x02\x11\x11\xa2\x44\xa1\x04\xf2\x3d\x39\x9b\xcb\xba\x0f\xec\xb1\x4d\xd4\xb0\x17\x94\x67\x6d\x22\xe4\xf8\xb0\xe6\xe8\xd8\x3f\x53\xdf\x9d\xa9\xf0\x8a\x1d\xc1\x58\xb5\x03\x23\xbb\xf0\x3c\xfa\x1c\x88\xb3\x81\xb1\x3e\xe1\xe4\xf1\xec\xfd\xe1\xa6\x5d\xfd\x6f\xdb\xd7\x7e\xa9\xfa\xc2\x43\xf6\xe6\xf3\x9d\xf0\x5c\x60\x31\x19\x63\x72\x52\x24\x0b\x2f\x0c\x7d\x64\xa6\x5d\x95\x9f\x57\x12\x86\xdb\x4e\x37\xdf\x09\x4b\xaf\xaa\x23\x5f\xf6\xc7\xe9\x2b\x3e\x03\x40\xd5\x7c\x4a\x44\xbe\xe4\x7e\x82\x7f\xd7\x58\x86\x87\x27\x24\xf5\x64\xda\xfa\xb3\x2e\x73\x95\x47\x49\x3a\x26\xbf\x92\x3c\xef\x23\x44\xf0\xd3\xa5\xa2\x67\xd4\x40\x28\x48\x90\xd2\xe0\xf3\x36\x4a\xa3\x00\xdf\xb2\xcc\x41\xb2\x33\xc1\x96\xd6\x97\x25\xbd\xce\x32\x0a\x6b\xa1\x7f\x1c\x44\xff\xb6\xae\x20\xc2\x94\xb0\x68\xe0\x29\xef\x23\xd6\x51\x6b\xc6\x2b\x3d\x2d\xff\xd4\x1d\x66\xc5\xac\x96\xf2\x9f\x98\x3f\x99\xb7\x25\x0a\x6f\xe8\xeb\x5c\x5b\xf4\xf5\xc0\x2e\x7e\x9f\xd4\x62\xe7\x10\x06\xcc\x0d\x14\x0d\xf3\xbf\xee\x27\x64\x16\xea\x77\x04\xbd\x50\x40\x24\x86\x70\xa7\xc1\x0a\x89\xd0\xe9\xb3\x81\xd1\x8f\x37\x14\x08\xb9\x35\xbf\xe9\x37\xde\x24\xf8\x5d\x3d\xd3\xe2\x10\xa3\x21\xc7\x2c\x6a\x32\x65\xa2\xac\x22\xb2\xe2\xc3\x23\x99\x00\xfd\xc9\x11\x9f\x4b\x42\x84\xbd\xca\xfc\x4f\xc4\x95\x24\x8f\xbc\x77\xf7\xd2\xde\x2e\x61\x2f\x56\x26\xc7\x27\x70\xb5\xcb\xba\x06\xcc\x41\xd5\xff\x3f\xdc\x3b\xc9\x83\x21\x01\xdd\x5a\x5d\xcb\xca\xa2\xd7\x25\x0e\xb4\x9d\x38\xf6\xb4\xa9\xe9\x94\x5c\x9e\xf6\x56\x16\x21\x91\xb1\x25\xcc\x10\x09\x3d\x6c\x18\x58\x18\x18\x04\x58\x3f\x2f\x88\x30\xcc\x36\xb2\x80\x17\x44\x08\xc6\x58\xe0\xfe\xc7\xe6\xff\xff\x61\xf4\x70\xfd\xf0\x70\x6b\x0b\x59\x40\xeb\x3f\x3b\x31\xb2\x5f\x53\x00\xfc\xe0\x44\xfd\xa0\x83\x32\x91\x12\x53\x92\x87\xc0\x77\xb6\x83\x6c\x4b\x6b\x04\x88\x47\x75\x80\x13\xd6\x06\x44\x08\x0e\xc6\xcb\x0b\x22\xd4\x84\x0e\x6c\x5f\x81\xf4\x48\x7e\x57\xd1\x2f\x27\xbe\x0f\x16\x1f\x7d\x1e\x25\x13\x22\x33\xe0\x79\x92\xe3\xad\xd4\x68\x04\xc9\xb7\x48\xb9\xb1\xb6\x0b\x43\xff\xdf\xe0\x20\x22\x77\x77\x77\x77\xf1\x94\x00\xea\xd1\xde\x1f\xa2\x9f\xde\xb1\x92\x9d\xc0\xe2\xd8\xc9\x5a\x9a\xd7\x0c\xaa\x37\x56\x64\x30\xc3\x38\xcd\xd8\x35\x25\x2b\xa1\xb0\x75\x80\x35\xb0\x0f\x16\x8d\xca\x90\x43\x64\xbc\xb1\xa8\x7e\xdd\xae\xd8\x58\x6a\x58\xe7\xf7\xb3\xf7\x61\xd5\xa3\x43\x91\x16\xf1\x0f\x8c\x8e\x01\xd0\xda\xf8\x27\x0b\x35\x28\x27\xe8\x53\x5d\xc6\xc7\x0b\x6f\x3a\xee\x28\xa9\x5d\xd7\x9e\xd0\x8f\xd1\x66\x8f\xc1\x66\x4d\xb5\x06\x0c\x02\xa0\x66\x1a\x8a\x9f\xc6\x53\x6d\x5f\x14\x19\x1e\xc1\x7c\x73\xab\x44\xae\x2f\x7e\xf4\xf9\x6e\xe5\x38\xa1\x95\xb5\xa0\x70\xd6\x77\xd9\x08\x00\xd5\xcd\xaf\x8d\x2b\x29\xb6\x9d\x96\x69\x2e\x29\xd7\x6e\xff\xa9\x73\xe0\xdf\x53\xaf\xfb\xaa\x52\x55\xc1\x47\xbc\xf4\x09\xb3\xa5\x37\x00\xaa\xb2\x38\xdb\xac\xe1\x69\x56\xf8\xd6\x26\x5f\x3b\x1e\xc7\x75\x54\x0c\x6e\x8e\x2e\x05\x7e\x11\xaa\xa0\xe7\x32\x56\xf2\xe4\xca\x00\x00\xfd\x5e\x5a\x5f\x44\x89\xdd\x87\x97\xce\xcc\x91\xf6\x87\xdc\x9c\x2b\xd3\xb9\x91\xaa\x41\x3c\xa7\x37\xb1\x32\x82\xbd\xf3\x30\x28\x01\x00\xe5\x9d\x7f\x5d\x24\x08\xdb\xce\x8e\x47\xd2\xbe\x39\xdd\x56\xe2\x23\x29\xd8\x10\xf2\x9b\xc4\x03\x45\x54\xb5\x86\xfe\x12\x23\x64\x05\x00\xb5\x21\x9f\x27\xb4\x4a\x93\x85\x31\x6c\xcd\x83\xa6\x67\xa6\xe6\xc5\x12\xf1\xe4\x88\xd2\x61\x7c\x58\x42\xeb\xc2\x49\x7a\x94\xe9\x00\x80\xba\x9f\x35\xda\xae\x46\x74\xe4\xdc\x58\x12\xcf\x5a\x39\x53\x15\x6d\x73\x05\x6a\xef\x1b\xa6\x6e\xbd\x9c\x99\xbc\xf3\x70\x6b\xf4\x05\x5b\x41\xef\x53\x9a\x58\x17\xe5\xcf\x8d\xae\x9d\x12\x37\x92\x7c\x2c\x35\x25\xb0\x9c\x6a\x67\xec\xfb\x49\x19\x0b\x29\xf0\x50\x9d\x65\x00\x41\x83\x5e\xcc\x7f\xca\xa4\xa3\x1e\x86\xf0\x31\xc6\x39\xf2\x1c\x11\xf5\x90\xa0\x0f\x5e\xd3\x57\x05\x38\xc1\x68\xac\xe7\x9d\x4d\x03\xa0\xf9\xcc\x7b\xaf\x50\x8d\xdb\x61\xd5\x27\xa9\xe0\x91\x70\x5a\xf2\x6c\x5e\x5b\xcd\xc1\x6f\x65\xef\xda\x94\x57\x87\xbd\x83\x7e\x3c\x00\x40\x27\xad\x7a\xbf\x8f\xbe\xb9\x7b\xb2\xbb\xdf\x3b\x24\x41\x4d\xf1\x94\x36\x97\xb4\xf0\x65\xf8\xac\xe2\x4c\xfa\x18\xcf\xf3\x40\x38\x09\x00\xf4\x75\xaa\x4e\xd3\x99\x78\x1d\x9a\xa4\xc6\x5b\xe5\xc1\x61\x0b\xdc\x95\xda\xa1\x00\x83\xca\x68\x59\xda\xe5\x50\xa6\x38\x07\x99\x5f\x00\xa8\x9b\x2d\xed\xab\x4e\x45\x35\xb3\xd2\x11\xea\xf8\xd0\x37\xbe\x30\x46\x1f\x07\xdb\xe9\x69\x52\xa5\x7d\x8f\xea\xfb\xb8\x27\x19\x3c\x40\xcd\xea\x2a\x76\xed\x46\x86\x11\x3f\x34\x1c\xcf\x0d\xe2\x38\x33\x09\x23\xc6\x0a\x95\xdd\xb5\x19\xab\x31\x99\xf6\xd7\x1d\x95\x3a\x01\x40\x47\xbe\x57\xab\xaa\xe2\xc8\xd8\x1c\xb0\xbf\x5f\xf3\x0c\x0a\xb6\x9c\x36\xfe\x0a\xf9\xc5\xbd\x96\xc3\x7f\x3d\x10\x2a\x8f\x94\x47\x04\x80\x12\xb9\x35\x0f\xd7\x6d\x0e\x95\x3b\xcc\x99\x10\x08\xa3\x55\xd5\x32\xbb\xf9\x12\xbb\xa8\x22\xfa\x1e\xe8\xc3\x4a\xa3\xa9\x5e\x2b\x03\xa0\x7d\x5b\xce\x2f\x38\xfa\xb5\xed\xdb\x96\xa9\x98\x35\x24\x75\x9c\x5f\xc0\xd7\x2e\x92\x3f\x9e\xbb\x94\xb3\x7f\x0b\xf1\xa9\x21\xee\x01\x9b\xfe\x88\x57\x6f\x97\xe4\x98\x8c\xe2\x5c\x14\xd7\xd1\x4a\xf2\xfd\x3c\xe2\xea\x7a\x41\xc2\x4a\x0a\x93\x30\x24\xab\xc9\x43\x83\xa1\x0a\x80\x5a\x2d\xac\x34\xe9\xba\xa1\x2d\xfa\xc0\x50\xff\x9a\xe9\x95\xff\x8a\xb8\x52\x15\xc1\x53\x24\xae\x6b\xec\x1e\x8f\x2b\xd7\x1b\x88\x0a\x80\x3e\xd9\x16\xad\x5c\x40\x72\x90\x78\x7e\x38\x9d\x62\x91\x18\x3a\xc8\x10\xd1\xf1\x35\x64\xd6\x96\xdb\xeb\x42\x5b\x60\xa9\xa3\xd7\x1f\x00\x7d\x73\xab\x7c\x88\x1b\xa0\xd6\x5d\xfb\x11\xcd\xe4\xab\xc8\x47\x71\xea\x0e\x4b\x5b\xbc\x49\xf9\x23\xe5\x11\x56\x23\xdc\xd6\xfa\x28\x10\xb4\x7b\xb2\xdf\x0c\x3d\x61\xcf\x44\x49\x9a\xc3\xcc\x70\x2e\x25\xed\x22\x51\x34\x69\x42\xbc\x81\xf1\x73\x4c\x4a\xc6\x7a\x9b\x1e\x00\x6a\xe7\x4b\x44\xa9\x3b\x27\x9d\xda\x9d\x42\x8c\x16\xb6\x63\x6c\x81\xab\xc9\xe7\x53\xed\x0d\x09\x66\xbc\xac\x3b\x22\x71\xbb\x00\xf7\x81\x5d\x0f\x39\xcf\xa0\xe5\x22\xb2\x20\x81\xda\x52\xb4\xb9\x5f\x26\x65\x0a\xf0\xb9\x68\xf1\x48\x17\xae\x5e\xe6\x22\x75\xf6\x36\x6b\x00\x68\x96\x2c\xdb\x8a\x72\x28\xdb\x8d\x5b\xdc\x53\xc6\x0f\xc4\x14\xd2\x6d\x2e\x1c\x41\x34\x48\xe2\xfc\xeb\x4a\x8a\x49\x1d\x4b\x16\x33\x00\xa8\xf3\x1d\x15\x9a\xc6\x50\xe5\x1f\xf2\xd7\x59\xd9\xf5\xf8\xc7\x41\x0a\xc1\x25\x2f\xd1\xf1\x76\xe4\xd0\xe3\x08\x27\x98\xc8\x38\xdd\x00\xd0\x64\xc7\xd9\x45\xf7\x76\x8f\x94\x7c\xaa\xe8\xc5\x56\x77\xc2\x54\xa7\xeb\x22\x5e\x1b\xd5\x43\x37\x2b\xf3\x0e\x1c\x8a\x0e\x14\x70\x7b\x8b\x8f\x35\x70\xba\xd4\xfd\xad\xbe\xa2\xab\x1f\xff\xc7\x42\x41\x91\xdb\x22\xec\x72\xc2\x92\xb1\x41\x2f\x4d\xe1\x65\xf7\x48\x0f\x33\x38\x2c\x07\x8d\x28\xb2\xef\x15\x42\xe7\x74\x69\x14\xe4\x66\x98\xfe\x87\x7e\xe7\xec\x1e\xb6\x88\x7c\xa1\x3d\xec\xa8\xf9\xd0\x89\xe5\x3b\xd8\xff\x6d\x73\x85\x88\x9c\xb8\xd5\xff\x8e\xf3\x86\x08\x85\x23\x43\x21\x42\xe3\xb0\x50\x88\xd0\x0d\x1a\xd4\x0b\x22\x54\x0d\x77\x7f\x4d\x43\x83\x42\x20\x82\x68\x50\x88\x50\x04\x22\x14\x02\x11\x4a\xbe\x07\xf8\x83\x02\xf5\x86\x08\x7e\x81\x42\x84\x02\x90\xa0\x10\xa1\x2b\xd4\x7b\xc8\x41\xd8\xfb\x6b\xd5\x03\x54\x0d\x02\x14\x22\xd4\x82\x72\x7f\x63\x05\x19\xea\x0d\x11\x8a\x47\x81\x42\x84\xd2\xef\xef\x66\xa3\xde\x23\xb4\x83\x42\x84\xea\x1e\xc8\x34\x3d\x3c\x76\xfe\x00\x9b\x78\xff\x3f\x21\xcf\x7b\xb0\xe9\xfb\xc3\x80\x50\x24\xd2\xfd\xb5\x08\xee\xfe\x76\xdd\x3d\x7f\x0b\x48\xf7\x7f\xe6\xde\x33\xd1\xfe\x70\x37\x1c\x1e\x0a\x11\x5a\x7a\x78\xae\xe5\x9e\xcb\xdf\x08\xf7\x4f\x8c\xa1\x40\xf3\xe0\xfe\xb7\x57\x06\x44\xc4\xe3\x6e\x7f\x20\x9e\xc4\x0b\x22\x08\x7f\xff\x68\xcd\xfd\xb0\x05\x65\xee\x11\x46\xdd\x33\x7d\x76\x7f\x57\x90\xf6\x7e\x10\xe5\x88\x50\x88\xd0\xcc\x3d\x95\x63\xf8\xfb\xff\xa7\xa3\x42\x21\x42\x5b\x68\xe0\x29\x3f\xd6\x2e\x6c\x83\x72\xe7\xf8\xf1\x3b\xef\x6e\x3e\xd4\x66\x86\x83\xf3\xd6\xc5\x44\x0f\xab\x0a\x03\xec\x90\x9a\x24\x1e\x4f\x03\x22\x08\x44\x28\xf5\x7e\x78\x3d\x0f\x6c\xe6\x23\xdf\xe3\xb6\xbf\xff\xd3\x1b\xf1\x9e\x42\xd7\xbd\x38\x17\xee\xd1\xae\x3d\x08\xe7\xf6\x41\x9a\xa9\xe8\x50\x88\xd0\xee\x03\x77\x1d\x0f\xcf\x55\x20\xdf\xdf\x6e\xbe\x67\x67\xfd\x41\x0a\xc9\xf7\x9c\x36\xdc\x63\x13\x8a\x7b\x80\x88\xbc\x3f\x26\x0b\x7d\xbb\x87\x98\x7e\x98\x9d\xab\x07\x79\x9e\x3e\xfc\x3d\xff\xf0\xcf\xc6\x7b\x79\x4e\xc0\x42\x55\xff\x47\xce\x85\xb5\x9f\xc1\xfa\x7b\x41\x84\x3c\x1f\xe6\xe4\xfc\x81\x4c\xff\x03\x49\xff\x87\xbf\x6f\x1e\x26\x72\xeb\xe1\x5a\x00\x0b\x3d\x85\xfb\xdf\xde\xc3\x10\x91\xeb\xf3\xeb\x83\x78\x52\x2f\x88\x50\x12\xca\x3d\x5f\x65\xf7\x7c\xfd\xb8\xd7\x30\xa1\x88\xfb\x61\x45\xdd\x8b\x63\xfa\x61\xc4\xed\xf7\xe2\xd9\x7b\x50\x95\xc5\x07\x9a\xdf\x1f\xae\xe9\x0f\x9a\x9a\x8f\x7a\xff\x48\xe6\xfd\x90\xc7\xee\xe1\x26\x61\xef\x7f\x0f\xdf\x4b\x7b\xfe\x1e\xe5\xe9\x83\xa4\x8a\xef\xb1\xf5\x3d\x3c\x76\xf9\x20\x8c\x84\x07\x86\x0b\x1f\x50\x78\x3e\x50\x89\xbb\x87\x1e\xba\x97\x91\xa0\x35\x14\x22\xd4\xf5\xa0\x5c\x95\xf7\x28\x67\xff\x6b\xae\x17\xc2\x05\x6e\xa6\x4e\xdf\x62\x22\x1a\x44\x44\x60\x6a\xa9\xb4\xaa\x53\xae\x0c\x45\x73\xd2\xa7\x27\x70\xb0\x26\xdd\x7d\x50\x6b\x83\x40\x84\xf6\xe0\xa0\x10\xa1\x7d\xb8\x7b\x46\x02\xee\x19\x2b\xbc\xc7\xd2\xf0\x30\x80\x1c\x04\x10\x57\x31\xce\x6a\x01\x57\xcc\xf0\x52\xec\xa2\x49\xa9\x52\x5c\x75\x2e\x39\xf9\x86\x9e\x08\xd9\x5e\x08\xbb\x75\xd0\xcc\xfe\xdb\xb3\xc3\x7b\x6d\xbc\x1f\xc9\xd9\xc3\xb3\x87\x0f\xba\xd0\xf9\xa0\x1c\xf1\xf7\xfa\x98\xfc\x70\x63\x03\x0e\x2a\xfa\x3f\xb2\x26\x02\x47\x89\x0d\xeb\xe3\x05\x11\xda\x7c\x40\x58\xfa\x20\x8a\xbc\x07\x1d\x29\x41\x84\x8a\xfc\x8f\x4c\x89\x78\x21\xc0\xc0\x78\x7b\x41\x84\xb6\x1f\x04\x9a\xf0\x30\x7f\x5f\xef\xc7\x3c\x8c\x02\x2d\x86\xfb\xdf\x4e\x57\x10\x11\xfe\x30\x8f\xbb\xf8\xfb\xa5\x31\x7b\xbf\xae\x37\x1f\xe6\x09\x72\xbf\xae\xab\xef\xe7\x43\xd0\x08\x0a\x11\x34\xbf\xdf\x70\x34\xa0\x10\xa1\x5f\xf7\xc3\x9d\x7e\x00\xe9\xbd\x27\x74\xf7\x00\xc2\x0d\x85\x08\xc5\x3e\xcc\xd3\xc4\xfd\xcd\xf9\x87\xd9\x0c\x7f\x18\x5a\xdb\xc3\x35\x02\xfd\xfe\x7a\xf6\x30\xc0\x9e\xfb\xa7\x05\xad\xa0\x10\xa1\x2c\x38\x70\x0e\x28\x1d\xad\x90\xb6\x32\x39\x32\x57\x46\x15\xd9\x2a\xaf\x14\x69\xc7\x50\x36\xbc\x4d\x1e\xf1\xed\xa8\xaa\x46\xee\x76\x5e\x0e\xb7\xdd\x4f\xe2\xfd\x4a\x5c\xbc\x9f\x44\xe8\x83\xe6\xb7\x3c\xe8\x9c\xff\xfd\x8d\x9c\x7b\xc2\x3f\x1e\xb6\xa7\xdb\xfb\x61\xdc\x3d\xf0\xe0\xf3\x20\xd8\xdf\x0f\x74\x7f\x3d\xcc\x57\xf5\xfd\xc0\xf6\xef\xd7\x90\x20\xd9\xfd\xef\xa4\x7b\x85\x5c\x82\xff\x3f\x99\xff\x1b\x13\x10\x61\x9c\x87\xbc\x2f\xa1\xcc\x87\x65\x38\xf2\x80\x39\xf6\x41\xfc\xa1\xe8\xd0\x66\xb8\xff\xed\x98\x0a\x11\x29\xbd\x2e\x82\xc6\x13\x79\x41\x84\xea\x1f\xf8\xbc\x7e\x98\xba\x86\x7b\x1d\x9d\x7a\xd8\x79\xfa\x1e\x76\xb8\xa5\x7b\x9d\x3b\x7d\x90\xe0\xf5\x7f\xb5\xa3\xaf\x54\x44\x79\xa4\x38\x7e\x92\x72\xeb\xfb\xab\x4b\x82\x91\xd0\x8f\xb5\xbf\x02\xdd\x6e\xfe\xdb\xc2\xa5\x08\x8e\xe3\x97\x2a\xcb\x16\x2f\x88\xd0\xea\xc3\x12\xf6\xbe\x97\x4d\xd4\xfd\xa4\xb5\x3f\x88\x22\xec\x81\xe1\x4c\xd8\x7b\xec\xf5\xf7\xe4\x0e\x10\xee\xa7\x56\xeb\x1e\xe0\xfe\x67\xef\x83\x5c\x53\xee\x79\x10\xfc\xf0\xf0\x5a\x79\x10\x69\xd5\x3d\x9a\xda\x07\x56\xb3\x1e\xf8\xfb\x7d\x2f\x79\x41\x7a\x28\x44\xa8\xe9\x5e\x80\xdb\x0f\x50\xa1\xf7\x2b\xb7\xf8\x61\x77\x0b\xbe\xff\x33\xf6\x41\x46\x89\xff\xe5\x0f\x65\x52\x08\x75\x7a\x7a\x0a\x8b\x1d\x4f\xd6\x95\x33\xf7\x67\x99\x33\x9c\x97\x8e\x91\x3b\xf2\x14\xa5\xdc\xb3\xda\x3d\xf4\xc8\x76\x48\xe4\x7f\x1b\x20\x44\xb8\x49\x40\xe0\x7e\x1e\x7a\x1f\xd8\x39\x7d\x60\xbb\xff\x61\x1e\x92\x60\xff\x6f\x19\xfe\x1b\x2d\x88\x08\x8a\x08\x0c\xe5\x3d\x96\xed\xff\x3f\xa8\x87\x65\x1c\xfa\x80\x65\x18\x0e\xba\x06\xf7\xbf\x7d\x49\x40\x44\x3c\xdc\x57\x78\xe3\xbc\x20\x42\xd0\x07\x04\x27\x0f\xc3\xee\x7f\x90\xd6\xff\xe3\xec\xcc\xe3\xa9\x0a\xda\x07\x7e\xef\xb1\x2f\x45\xb6\x1c\xa9\x44\x11\xb2\x14\x45\x8a\xb8\xae\x12\xa5\x54\x84\x36\x64\x29\x5b\x52\x4a\x8b\x72\x2e\xc9\x52\x59\x43\x76\x51\x8a\x64\x8f\xc8\x16\x91\xb2\x65\x4b\x65\x4b\xb6\x48\x96\xb8\x64\xc9\xef\x33\xe3\xed\xfd\x75\xfc\x53\xe7\xed\x8f\xfb\x39\xce\x3d\x67\xbe\x33\xcf\xf3\xcc\x33\xcf\x33\x33\xb7\xf1\xe1\x00\x5a\x88\x00\xd2\x78\x01\x64\x58\x06\xc6\x73\x4a\x3d\x30\xc2\x61\x28\xb3\x0f\x40\x7c\x43\x40\xdb\x1a\xe0\xea\x13\x2c\xe1\x03\xd4\x4f\x2a\x50\x48\x3e\xf3\x9f\xd2\x6b\x6a\xa0\xe4\x1a\x98\x54\xff\x30\x95\xfa\xe2\x93\x4a\xf3\x32\x96\xa4\x1b\xca\x7d\x91\xe1\x34\xcf\x94\x30\x31\x39\xfa\x6b\xf3\x6d\x1a\x8d\x72\x0f\xf4\x91\x4c\x68\x4f\x09\xa0\x80\x76\x78\x19\x0f\x6a\x30\xcc\xf4\x67\x59\x7a\xe6\x0c\xdb\xe9\xdf\xb6\xdd\xe2\x79\x1a\x17\x51\x25\x39\x62\xb5\xf1\x12\x13\x0f\x83\xf6\xe5\xc8\xf8\xd6\x8e\x56\x85\xbb\x99\x73\x34\x1a\x25\x00\x74\xaa\xb7\xb0\x63\x97\x82\xb1\xa0\x17\xd4\x4b\xe3\x24\x9d\x46\x29\x82\xd6\x54\x09\x5b\xfa\x86\xfc\x67\xb1\x5c\x93\x56\xca\x22\x3e\x07\xd2\xf7\x1e\x3e\xac\x3a\xb0\xf5\xba\xbb\xc8\x19\x0b\x1d\xea\x4b\x4d\xde\xf9\x1d\x76\x1f\x3c\xdf\x76\x9f\xc1\x68\x94\x1b\xd0\x44\x92\x41\x89\xdd\x8c\x74\x8d\x7f\x6c\x9a\x26\x33\x89\x44\xa3\xd1\x34\x94\xe9\x34\x4a\x1c\x2c\xe1\x19\x28\xe1\x03\xcb\xef\xbe\xfb\xd7\x06\x51\xc9\xac\xcc\x24\x68\x34\x50\xc5\x91\xb0\xf6\xf7\x41\x4b\x34\x5c\x7e\x57\xe3\x6f\xd5\xa7\x51\x44\xfc\x81\xcb\x4d\x02\x45\x68\xf0\xc3\x18\x08\x28\xf6\x2e\x03\xbd\x0d\xf9\xb7\x74\x92\x46\xcd\x99\x99\x8f\x09\x5b\x01\xb4\x0f\x34\xd4\x01\x6b\x53\xb3\x10\x88\x41\x43\x9e\x80\x35\x2b\x82\x8d\xac\x00\x9a\x9b\x81\x37\x62\x71\xb6\x50\xb9\xba\x48\xab\x34\x34\xb2\x6e\x4d\xf7\x63\x2d\xb1\xac\x89\xbb\xbb\x5d\xc7\x36\x5f\x52\x0f\x98\xb3\xaa\xc8\x5a\xfa\xf0\xf2\xca\x49\x30\x96\xc0\xb6\xad\x07\x5d\x75\x17\x70\x8f\xc0\x9d\xcc\xe3\x1c\xc9\xc7\x82\xe7\x1b\xc3\x2d\xe4\x2d\x8a\x44\x32\xec\x8f\x0d\x6e\x7b\xbb\xc4\x70\x88\xfe\xf5\xf6\xa5\x77\x57\xbf\xde\xdb\x27\xa1\x1a\x54\xe1\x4e\xa3\x44\x03\x63\x4d\x05\x6d\x1c\x81\x26\xfd\x1d\x8e\xd2\x3e\x30\x4a\x82\xde\x24\x03\xde\xa6\x41\x17\x3f\x06\xed\x22\x1b\xba\x5a\x4f\x18\x4d\xc1\xc0\xca\x1d\x3c\xfd\x08\xb8\xa1\xf7\xb0\x51\x39\xd0\xf5\xc0\xbe\x10\x02\xec\x35\x1e\x04\x0b\x1a\x22\x74\x1a\xa5\x14\xbc\xf4\x11\x36\x37\x02\xca\xa5\x1b\x4a\x24\x02\xa1\xeb\xfe\x5b\xb3\x69\x54\x11\x11\x75\xd1\x1b\x18\x8d\x52\x0a\xdf\xbc\x01\xdd\x67\x34\x94\x6e\x23\xec\xe6\xf1\x6c\x74\x9d\x7f\x6b\x3d\x8d\x4a\x65\x24\x51\x6e\x60\x34\x0d\x31\xf0\xe2\x28\xac\xd0\x4d\x58\x60\x08\x6c\x7a\x13\x2b\xdd\x1b\xf9\xb7\x99\x01\x1a\x75\xc6\x6f\xf8\x52\x98\xa0\x3b\x4d\x43\x95\x4e\xa3\x44\x03\xb5\xa6\x2e\xc4\xec\xc0\x05\x53\x72\x81\x31\xd7\x80\xbb\x2d\x30\x44\x97\x01\x63\x31\x84\xb4\x40\xec\x37\xf8\x99\x0e\x65\x5d\x03\x43\x9a\x2c\xa0\xce\x1a\x20\xaf\x1f\x50\xa8\x25\x40\x51\x53\x70\x48\x8c\x04\xf2\x8d\x06\x25\x56\x42\x85\x0c\x41\x81\x16\xc3\x71\xdb\x17\x08\xdc\x1f\xde\xc8\x87\xa5\x55\xc0\x5a\xa4\x80\x32\x35\xcc\xc1\x70\x01\x1e\xc8\x83\xbd\xbe\x0d\x38\x80\x9f\x90\x3c\x04\x74\xaa\x41\xa5\xd3\x28\x1e\xd0\x0b\x58\xd2\x69\x94\x7a\x58\xca\x67\xf8\x99\xc5\x40\xcf\x42\xfe\x6d\xe6\x83\x46\x9d\xdf\xf1\x0b\xc6\xfc\x94\x2a\x68\x03\x31\x00\x93\xb7\xe0\x83\xe1\xd0\xb3\x0d\x26\x2d\xa0\x3d\xb1\xd0\xfa\xa0\xc8\x13\xa1\x27\x8b\x01\x4d\x1b\x83\x06\x96\x00\x0c\x6a\x12\x1a\xd8\x63\x20\x8b\x74\x18\xbf\xc0\x91\xf3\x26\xf8\x6a\x1e\x36\x2c\x14\xba\xd4\x27\xb0\x3d\x31\x40\x24\xfd\xd0\xbb\x3e\x83\xf9\x0c\x74\xbc\xda\xe0\x0a\x5a\xf5\x53\x70\xb3\x95\x01\x48\x42\x90\x4e\xa3\x34\x80\x52\x5b\x61\x4f\x77\x02\x85\x34\xc0\x2a\x3e\x87\x91\xed\x7d\xf0\x5d\x06\xa8\x5d\x35\x1c\x69\x23\x40\xbd\x86\x40\x0d\x7e\xc2\xa7\x86\xa1\x6c\x0b\xa1\xa6\x7c\xc0\xb3\x69\x80\x9d\x0b\xd5\xf3\x0a\x60\xbe\x80\xbf\x7b\x98\xe9\x43\xc8\xbf\x4d\x02\xd1\xa8\x27\x0a\xe7\x67\xc2\x56\x00\xfd\x43\x7d\xbf\x04\x52\x6b\x84\xf9\x9d\x0f\xb0\x82\x54\x50\x6a\x2d\x34\xfa\x36\xf8\x19\xc9\x0e\xbe\x8b\x05\x15\x2b\x06\xb0\x66\xd8\xf0\x21\x50\x99\x49\xa8\xb3\xf7\xac\x7f\xfa\x82\x65\xcf\x52\x94\xac\xe9\x91\x6f\xec\x5f\xde\x15\x36\xdc\x24\x64\x73\x43\xf5\xe2\xfc\xd8\x6c\x66\xc3\xc8\x48\x36\xbf\x54\x04\x97\x03\x18\xda\x80\x0a\x34\xf4\xe9\x34\x0a\x0d\x94\xad\xa1\x08\x32\x23\x50\xfe\x2f\x68\x13\x46\xa0\x45\x10\xe2\x0e\x20\x8d\xd0\x90\x81\x48\xfc\xa0\x26\x7e\xc2\x7c\xeb\x02\x0c\xbf\xa1\xde\x83\x81\xf8\xb2\xe0\xab\x4b\xe9\x34\x8a\x2f\x1c\x11\x7d\x80\xea\x46\x81\x56\x35\x14\x80\x63\x05\x25\xdd\x85\x8f\x0f\x42\xd2\x82\x87\xc4\xa5\x02\x4c\x1e\x67\x56\x7c\xd1\x59\xcf\xd1\xf3\x6b\xae\x34\xb5\x9e\x72\x2b\x68\xf4\xd5\x9b\x2a\x7d\x8b\x75\x4e\x05\xb2\x47\xc3\xfa\x97\xa9\x81\xdc\x62\xc1\x01\x90\x7f\x0f\x16\x7f\x6b\x2c\x8d\xca\xcd\xe8\x01\x07\x8b\x87\xd0\xf8\xee\xc2\x90\x71\x19\xcc\xae\x18\xe8\xfa\xff\xc6\xa5\x51\xf9\xb8\x11\x0d\x4f\xe0\x23\x61\x4f\x8e\x86\x52\x7f\x0a\xab\xe2\x0f\x7b\xd5\x2f\x68\x25\x18\x2b\x3d\x04\xf9\xb7\xf9\x3d\x1a\x75\xf8\xbc\xdc\x75\x10\x6c\x04\xc2\xde\xec\x0e\x3a\xeb\x17\x58\xd6\x53\x98\x3a\x5f\x84\x76\x0e\x84\xf6\x15\x4a\x2a\x00\x1a\x76\x0e\xd0\xc2\x00\xec\x40\x35\xc0\x17\xcf\xc0\xfa\x78\xc3\xfa\x78\x31\xe0\x8e\xb4\xf6\x08\x58\x7f\x6e\x5a\xd7\x51\xdf\x84\xcd\x68\xf3\xc0\xc1\x13\x26\xd7\xb3\x42\xc6\x5c\x0a\x4f\x9d\x3e\xf0\xba\xa9\x65\xb6\xcd\x0a\x84\xe1\xc0\xd0\x5e\x82\x12\x5b\xa0\xa9\x0f\xc2\x9a\x04\x80\x72\xa7\xa1\x0a\x63\xc0\xe5\x53\x70\xa9\xa1\x01\x34\x0c\xb9\xcf\x81\x09\x96\xc1\xef\xef\x80\x02\x2a\x60\xa5\x93\xa0\x7f\xfa\x06\x2b\x52\xb8\x10\x79\xc1\x0e\xfc\x1e\x58\xf4\x30\xdb\x6f\x49\xff\xad\x56\x34\x2a\xbf\x88\x1b\x2b\x90\x74\x3d\x54\xd7\xb7\x85\x6c\x18\x76\xfd\x5c\x58\x78\x03\x94\x74\x3e\x2b\xbd\x19\xf9\xb7\xe9\x51\x1a\xb5\x60\x72\x7e\x38\x4c\x98\x46\xa3\x78\x03\x21\x07\xc3\xda\x79\xc3\x16\x8f\xc2\xb6\x09\x81\xa1\x0a\xce\x4f\x5c\x86\x3e\x07\x98\x67\x1e\x44\x16\x33\x83\x9e\x57\x08\x2c\xb9\x0b\xc8\xe9\x1b\x7c\xcb\x1d\x2a\x24\x08\x96\x43\x87\x77\x0a\xa1\x57\x7a\x03\xc4\xf1\x16\x0a\xa9\x11\x94\x31\x0f\xcb\x78\x0d\xe5\x10\x06\xc3\x6b\x38\x8e\xef\x87\x83\x05\x94\x75\x0e\x90\x4e\x25\xec\xde\x49\xa0\xfc\x4a\xe0\x0a\xbe\xc1\x16\x7e\x85\x45\xde\x06\x77\x2b\x60\x09\xe9\xe0\xd9\x39\xe8\x77\xdc\xc1\x5d\x2f\x60\x1b\xd1\xd0\x2f\x85\x83\x0a\x0e\x82\xbf\x7f\xe0\xfa\x93\xd0\x32\xf6\x5c\x8c\xbf\x2d\xa6\x7a\x88\xcd\xc1\x00\xdb\xda\xff\xae\x49\xda\x7e\xe9\xbc\x78\xd4\xa6\x07\xfb\x8c\x47\xe3\x4c\x7a\x41\x07\x06\x7e\x47\x43\x9e\x4e\xa3\xdc\x01\x85\xce\xb0\xff\x0e\xba\xff\xf6\x2e\x8d\x8a\x90\x49\xb1\xa0\x63\x3d\x82\x36\xd8\x09\x05\x51\x0b\x9b\xdc\xc4\x4c\x4f\x43\xfe\x6d\x46\x9a\x46\x9d\x7f\x32\x37\x13\x26\x44\xa3\x51\x8a\x81\xf8\xba\x61\x31\x5d\xb8\x8c\xb2\xb6\xc8\x91\x2f\x7d\xbd\xc4\x7d\x7b\xf4\x7e\xfa\x09\xbf\x8d\xe4\x2d\x81\x82\x36\x35\x23\x96\xba\x89\x96\xa9\xce\xdc\x07\x9c\x6e\x02\x45\x42\xee\xc4\xc2\xf4\x03\xd4\x40\x0e\x30\xd3\x0a\xa8\xdf\xeb\xc0\x61\x43\xfd\xaa\x81\xc6\xda\xd3\x69\x94\x26\xa0\x8e\xef\xb0\xe2\x3d\xf0\xf1\x02\x20\xbd\x72\x58\x4a\x1b\xb4\xbc\x51\xf8\x59\x02\x1d\x96\x07\xd0\x66\x13\xd4\x77\x0a\x9c\xc8\x3b\x43\xa7\x51\xc2\x20\xec\x0b\x74\x93\x3d\xc0\x01\xfe\x80\x83\x59\x1f\x68\xc5\x1c\xd4\x98\x1b\x50\x8b\xef\x42\x83\x60\x7e\x0d\x35\x08\x8b\x79\x0b\xc7\x9e\xbb\xe0\xd9\x7b\xa0\x2a\x83\xec\xbf\x1d\xda\xdf\x1a\x4b\xd3\x74\x73\xf3\x02\x62\x4f\x81\x56\xf8\x05\xb6\xa1\x06\x56\xfc\x13\x13\xfd\x17\xf2\x6f\xb3\xfb\x34\x6a\xc7\xaf\xc9\xeb\x61\xc2\xee\x34\xca\x6d\x60\x73\xc5\xa0\xf9\xbf\xa0\xb3\x96\x02\x7e\x1e\xd4\xbc\x08\x46\x0a\x28\xa8\x1d\x14\xd1\x5b\x50\xfd\x5e\xd8\x09\x2b\x61\xfb\x5e\x03\xb1\xd0\x61\x05\x52\x70\xbe\xc7\x0e\xbb\x7f\x3d\x97\xc9\xd1\xfc\xc3\x68\x92\x85\x2d\xab\xca\xee\x49\x25\x53\x91\xe0\x57\xc2\x3a\x8c\x9f\x26\x53\xf4\x32\xad\xaf\x01\x6f\xbc\x30\xcd\x04\xe4\xf6\x18\x68\xea\x09\x74\x7a\x9a\x70\x1e\x00\x48\xa5\x1c\x48\xa5\x0d\xd6\x60\x23\x08\x59\x21\x25\x0c\xc6\xa6\xbf\xa0\xef\xf1\x86\xb9\x18\x14\xe3\x6d\xf0\xec\x43\x50\xe5\x16\xf8\x15\x0d\xb4\x28\x0e\x3a\xa4\x60\xf0\x9e\x86\x0e\x8c\x1c\x60\x38\x40\xa2\xd3\x28\x37\x60\xb4\x0e\x15\xe7\x06\x2a\xe0\x0b\x0b\x7f\x00\x5d\x0d\x1d\x37\x94\xba\xf4\x87\x5a\x45\xd1\x2d\x47\xc3\x24\x2b\xc5\x98\xfc\x15\xb3\x97\xea\xbd\x17\x2e\x2a\x2f\x5b\x16\xd2\xb3\xca\x5e\x62\xfd\x55\x01\xa0\x59\x68\x21\x33\x30\x24\x67\xa6\x6b\xfe\x9b\x00\x68\x9a\x8c\xf2\x70\xc6\x27\x17\x5a\x47\x20\xac\xf6\x13\x50\x46\x2f\xdb\xef\x0e\xf8\x37\x36\x8d\xaa\x4e\x25\x21\xc0\x12\x3e\x42\x93\x0a\x82\xf5\x1f\x85\xcd\xfe\x8c\xd0\x69\xc8\xbf\x2d\xde\xd0\xa8\xad\x3a\x97\xf3\x83\xdc\x69\x94\x4c\x38\xdd\x07\x64\xf3\x15\xc6\x25\xb1\x40\xc2\x4f\x61\x37\x48\x82\x12\xaa\x86\xba\x9f\x83\x55\x0e\x86\x9f\x41\xb0\x57\xed\x01\x4f\x27\x82\xb7\x0b\xa0\x56\xef\x00\xa1\x16\x83\x82\xa6\xe0\xdb\x51\x0b\x13\x5a\x40\x4b\x74\x98\x20\x1c\x07\x19\x32\x50\x52\x1b\xce\x5d\x4d\xfc\x58\x62\xcd\x3f\xd8\xcb\x57\x4a\x8f\xb9\xd7\xd4\x9e\x7d\x63\xad\x92\x7d\xf8\x2e\x76\x16\x2b\x21\x0f\xde\xd9\xe6\x9d\xcb\xb4\x41\x2e\x02\x3c\x38\x3c\x60\x88\xe2\xbd\x30\x5b\x03\x23\x99\x15\x40\xab\xd0\x57\xfb\x83\x62\x2b\xc0\xc7\x0f\xf2\xef\x54\xe3\xaf\xe5\x52\x45\x7c\xc8\x24\x90\x6a\x34\xc2\x32\xbf\xc3\xde\x44\x5b\x98\x3a\x87\x9f\x3f\x19\xe8\x8f\x91\x7f\x5b\xe1\xa2\x51\x6b\x27\x8f\x1c\x0f\x75\xa7\x51\x5e\x00\xf9\x75\x01\xe3\x1e\x5d\x48\xb5\x40\xad\x6a\xa1\x93\xf8\x08\x7c\x6d\x17\xb4\x6e\x25\x30\xd8\x40\xc1\xfe\x80\x1d\x3a\x01\x0e\x0c\x8d\xe0\xd9\x59\xd0\x22\x8d\x6b\x20\xe6\x04\x12\xcd\x80\xaa\xcd\x82\x65\x65\x01\x6b\xff\x0c\xcb\xf2\x03\x82\x0e\x83\xd1\xb3\x27\xec\x49\xb0\x23\xc0\xc9\x39\x01\xe0\x5e\x60\x63\x42\xa1\xb3\xfa\x00\xf5\x7a\x03\xc0\x83\x20\x0c\x83\x45\x96\xc0\x2f\x7b\x61\xc1\x6e\xa0\xb4\x11\xdc\xa4\xea\x93\xeb\xa4\xc3\xd7\xb4\xc4\x8e\xca\x09\x5d\xea\x2f\x16\xd8\xeb\x3d\xca\xd3\xf1\x16\xa1\x44\x6e\x4d\x11\x37\x6e\x31\x61\x5f\xb1\x0f\xe4\x22\x00\x9c\x0c\xd5\x92\xce\xfa\xdb\x80\xff\xfa\x1e\x95\x11\xd9\x0f\x43\xb3\x31\xf8\x66\x38\xac\x46\x10\xac\x52\x02\x0b\x7d\x92\xfc\x6f\xeb\x84\x34\xea\xb1\xe0\xf7\x67\x82\x41\x38\x0e\x5a\x5e\x07\x24\xd7\x0f\x87\xd4\x54\x70\x59\x0f\x7a\xd5\x20\xf4\x13\x01\x40\x8a\xe1\xa0\xaa\x31\x0b\xb3\x61\xe0\xef\x72\xc8\xf6\x80\xe2\x18\x86\xb2\x0a\x82\xb2\xb3\xa5\xd3\x28\x18\xfc\xae\x0e\x76\xac\x68\x38\x76\xf3\x81\xf7\x1a\x80\xa9\x7f\x86\xfe\xc3\x13\x94\xfe\x05\x5a\x9e\x2f\x10\xeb\x6d\x50\xe4\x17\x48\xa7\x81\xaf\x72\xc1\xc7\x0b\x68\xff\xc9\x40\xb2\xfd\x30\x09\xd1\x05\xdf\xbb\x41\x53\x06\xcf\xd7\xc0\x5e\x92\x0b\x9b\x3f\xc8\x46\xaf\x66\xf8\xb7\x55\x4f\x1a\xf5\x6e\xd1\x7c\x07\x4c\xbf\x92\x20\x31\x08\x4e\x19\x01\xab\xeb\x84\xcd\x79\x04\xcd\x6a\x0c\xd2\x13\x81\x6c\x4a\xa0\x6c\x6f\x42\x61\x84\x83\xe7\x4a\x40\x4b\xde\xe1\xe6\x7d\x32\x26\x59\x6b\xdf\xcc\x5e\x1c\xf6\x97\x0c\xb8\x22\xeb\x5f\xc5\xe2\x54\x74\x78\x83\x3d\x29\xc4\x20\x3b\xb7\x9b\x67\x8b\x21\xeb\x7e\x8c\xa6\x21\x07\xda\xb0\xe3\xcf\x97\x8a\x8f\xc5\xfc\x3a\xbb\x7f\x4b\xda\x79\xa3\x95\x7b\xc6\xaf\x9a\x4a\xd8\x3a\x9d\x30\xda\xfe\xac\x42\xe1\x46\xf6\x85\x67\x36\x4d\x6f\xa6\x41\x3c\x07\x5d\x03\x06\xa8\xcf\x60\x84\x09\xa5\x3a\x08\x15\x11\x09\x14\xd5\x00\x23\x91\x03\x60\xe0\x81\x11\x26\xfc\x3e\x1e\x6a\x24\x0d\x26\x20\x7a\xc0\x6b\xc0\x01\xdd\x14\x74\xa4\x85\x26\x83\x06\xa4\xc3\xa1\x00\xe6\xbd\x07\xc1\x78\x02\x8a\x6f\xc7\x4d\x8f\x98\x53\x2d\xfb\xe2\x1d\xca\x8f\xd5\xea\x78\x72\xd4\x9b\xdd\x8d\x72\x4e\x19\xfe\x99\xfc\xaa\x2e\xfb\xb5\x7a\x6d\x6c\xa4\x20\xbd\x1f\x24\x06\xb8\x49\xb5\xa4\x96\xab\x81\x94\xa7\x32\x3e\xfa\xa3\x4f\xdf\x1f\x9a\xd8\xfa\xf9\xa6\x7b\xd0\x61\x91\xd4\x7d\x11\xb2\xb7\x32\x87\xec\x03\x0a\xef\xfc\xb9\x97\xe1\x61\xb5\x57\x65\x78\x70\x85\xd7\xcc\xc4\xc5\x16\xcf\xc8\xf7\x3c\x1b\x36\x0d\x5d\x2b\xf5\xf2\x10\x33\x9c\xf8\xf8\x73\x32\x32\x7d\xdf\xbf\xc9\x95\x46\x45\x18\x11\x53\xe0\x84\xba\xa0\x13\x7a\xb0\xb0\x1a\x08\xbd\xc1\x4b\x98\xe3\xc2\x8c\x5a\x94\xae\xfd\x6f\x22\xa7\x69\xaa\x93\x59\xc1\x10\x33\x06\x8b\x9b\x81\xf9\x65\x38\xb0\xd1\x47\x40\xda\xa5\x08\x9d\xf2\x6f\xb2\xa1\x51\x19\x49\x24\x46\x9a\x3b\x8d\x12\x0a\x6c\x28\x1e\x48\xfc\x3b\xec\x0c\x67\x7f\xc7\x2c\x7f\x93\x16\x8d\xca\x4d\xc2\xe0\x3a\x89\x07\xb4\xff\xe5\xd0\x19\x41\xeb\xf4\xf8\xef\x94\xfd\xdf\xe4\x48\xd3\x64\x45\x18\x40\x19\x37\xa0\x71\xbf\x81\x9d\x26\x18\x5e\xcf\x21\xf4\x1c\xe4\xdf\xd6\xff\x69\xd4\xc9\xf9\xfc\xf9\xb0\x95\xee\x34\x4a\x0c\xec\xfe\x40\xb4\xdf\x60\x59\x15\x50\xe2\x71\xd0\xa9\xa6\x01\x41\x3d\x83\xdd\xff\x35\xec\xe8\xf9\xe0\xc6\x0f\x18\xf6\x44\xc2\x08\x0f\x82\x4b\xe0\x8b\x05\xd0\x48\xeb\x16\x96\x06\x61\xab\x82\x39\xe0\x0c\x0d\x10\xf4\x14\x2c\xe4\x23\xec\x84\x9e\xc0\x32\x6f\xc1\xc0\xfe\x21\x9c\x4a\x80\x5d\x3e\x9b\x01\xce\x7c\x00\xe1\xbe\x00\x77\x3b\x70\x21\xc8\xbb\x0a\x7b\xc3\x58\xc4\xe4\x94\xe7\x61\xfb\x67\x83\xcc\xc1\x09\xb3\x9e\xc3\xb7\x5b\x6f\x36\xeb\x6c\x33\xe8\xbd\x9a\xc3\xda\xf6\x0c\x24\xb2\x90\x7c\x13\x32\xb3\x60\x9e\xb1\xd0\xfd\x41\xe5\x34\x56\x81\xcb\x4c\x58\x89\xcf\xf0\x76\x2f\xac\xad\x3f\xbc\x8e\xff\xef\x22\xd5\xdf\x30\x34\xaa\x3c\xa3\x3a\x70\xd6\x1a\xe2\xe0\x45\x5f\x68\x54\xaf\x60\xf3\xfb\x59\xe8\x31\xc8\xbf\x6d\xa9\xa0\x51\x77\xcc\x35\xb6\x87\xd2\x68\x94\x28\x20\x9b\x12\x58\x8a\x3f\xec\xe9\x03\xd0\xd2\xa3\xa0\x6b\x80\x35\x1c\x81\x75\x4e\xc6\xf5\xe3\x07\x69\x31\xf4\xbd\xbb\xb8\xe5\x5d\x49\x79\x07\x7a\xf8\x9d\x1b\xee\x52\xc4\x7b\x1a\x34\x5e\x74\x19\x4e\xad\x1a\xe6\x5d\x6a\x97\x0f\x46\x3a\xa8\x45\x1f\x58\xc4\x03\xe8\x5d\x82\x81\x3b\x89\x5e\x70\xe5\x50\x81\x77\x00\xfb\x1e\xae\xbf\x7b\xf2\x0d\xbf\xce\x29\x39\x9e\xf9\x79\xde\xaa\x7a\x8c\x3c\xcc\x46\xe5\x3e\xf8\xde\xbe\xeb\x78\xfb\x8e\x55\x49\x7e\x1e\x71\xd5\x52\xa0\x60\x58\xcd\x38\xa8\xc8\x5c\x38\x83\x01\x6b\x7f\x03\x92\x3a\xa1\x0a\x0a\xe1\x75\xfe\xc2\xac\x0e\xe8\x27\xe5\x50\xc1\xcf\xff\x1b\xd3\xfd\xad\xfe\x34\xaa\xfc\xc2\x09\xa1\x94\x26\x58\xe0\x13\x28\x60\x0c\x16\xeb\xce\xfe\x3b\xba\xfc\x5b\x65\x69\x9a\x6e\x5e\x6e\xa0\x90\x3e\xd8\xe8\x08\x38\xe5\xb1\x04\x5c\x16\x21\xf4\x34\x86\x7f\xdb\xd2\x42\xa3\xee\x98\x3c\x3c\x0f\x13\xb3\x40\x60\xf0\x69\xd0\xdf\xa6\x03\xfd\x64\x80\xa6\xbd\x87\x95\x1a\x86\x73\x66\x1e\x40\xc2\x7e\x70\xdd\x03\xca\x24\x19\x7e\xe7\x07\xd7\x4c\xc2\x81\xa8\x12\xc0\x1b\xe3\x70\x92\xee\x12\x9d\x46\xa9\x82\xba\xf6\x04\xc5\x36\x43\xaf\x6f\x00\x42\x18\x38\x99\xb0\x50\x63\x60\xca\x1a\xd2\x20\x5e\x84\xda\xa4\xc1\x4e\x95\x8d\x33\x85\x5c\xe4\x43\xd5\xd1\x9d\x27\x6c\x06\x67\x7b\x1f\x65\x3d\x78\x4d\x7a\x69\x15\xaa\xb1\x6b\x33\x7f\x64\x72\x92\x02\xb7\x6d\xd9\x92\xb2\x3f\xd7\xaa\x3c\x24\x4b\x56\xfc\x78\x4a\xf5\xd8\xb9\x4b\x4a\xb9\xc8\xc7\x51\xb3\xf1\xdd\x6b\x57\x65\xfd\xdc\xd1\x37\x0d\x37\x84\xec\x1a\xd6\xfe\xf1\xa8\xe5\xb8\xde\x2f\xa3\xb3\xee\xd5\x49\xf1\xa3\xa2\x51\xc6\x5f\x74\xc4\x19\xbd\x97\x0c\x39\x1f\xb0\x22\x35\x1b\x44\x2d\x79\xe5\x25\x01\x4c\x0b\x5a\x40\x18\xe8\xa9\x6f\x17\x56\x7a\x61\x6b\x93\xa1\x79\xb4\x41\xdd\xb7\xc1\x50\x17\x4e\x07\xdf\x02\xa2\xe9\x03\xce\x63\x0a\xfa\x91\x56\x20\x8e\x49\x5c\xb6\x24\x70\xc0\x26\x90\xa1\x45\x9c\xfc\x31\x22\x34\xa7\x26\xd4\x68\xb5\x4c\x6c\xbf\x65\x28\xd7\xe5\xf6\x14\xba\x60\x70\x84\x9a\x66\xb3\xd6\xbf\x35\x98\x46\x65\x65\x64\x85\xf9\x80\x07\x4c\x93\xca\x16\x56\x4e\xe1\xa7\x27\xd3\x7f\xd7\xd2\xfe\x22\x0b\x1a\x95\x9d\x95\x04\x5d\xf5\x24\x54\xc5\xd0\x42\x1a\xb5\xb0\x40\xc4\xfc\x3b\xa2\xfe\x9b\x98\x68\x54\x6d\x32\xc2\x0d\x06\xb3\x17\x50\x38\xad\xb0\x16\xde\x50\x44\x3e\xd0\xf3\x78\x33\xfc\xae\xd1\xdf\x9a\x4f\xa3\x32\x91\x18\xa1\x39\xb7\x2f\x2c\xf4\xc0\xf7\xbb\xa1\xe8\x6f\xb1\xd0\x3d\x91\x7f\xdb\x77\x45\xa3\x36\xf6\x39\xcc\x87\xd2\x68\x1a\xbb\xe9\x34\xca\x2b\xa8\xa7\x56\x60\x96\xdd\xb0\x85\x8f\xe1\xf8\x18\x0b\x14\xd5\x0a\x0c\x71\x1a\x8e\xb6\x47\xa1\x1f\x85\xf1\x52\x36\x70\x1a\xd5\x60\xc8\xf8\x0a\xe3\x43\x2d\x90\x72\x40\x3b\x0e\x85\x13\xc0\xd0\x8e\x4f\x81\xc8\x1a\xae\x87\xc1\xa6\xd6\xc3\x4f\x2f\x18\xbd\xf0\x82\x3e\x03\x73\x45\x0c\x6e\x0e\x82\x3d\xfb\x23\x9c\x4d\xb0\x03\x79\x16\xec\x5e\xee\xa0\xfc\xfb\x60\x24\xc8\x80\xdf\x7b\xc1\xbb\x4f\x40\x35\xbf\x82\x62\x07\xa0\x34\x13\x16\xb2\x2a\x28\x87\x01\x28\x87\x31\x84\x7e\x1f\xf9\xb7\x4d\x65\x34\xea\x74\xdf\xea\x7c\xe0\x82\xd3\x01\xa7\x6f\x21\x93\x07\x4d\xfe\x00\x2f\x6f\x01\x58\x38\xec\xc6\x1e\x0b\xc1\x19\x30\xe6\x66\x28\xfa\x28\x28\xb5\x78\x60\xfa\xf9\x50\x6a\xef\x60\x1d\x7e\x42\xed\xd6\xc1\x5a\x85\x42\xdb\x4b\x5e\xd0\x11\xac\x6d\x20\x1c\x50\xeb\x00\xac\x13\xc6\x80\x11\xe0\xf2\x13\xcc\x80\xe0\x50\xd8\x00\x2e\xbf\x2f\x44\xa9\xa0\x1e\xb3\xf0\x85\x2a\x80\x7d\x07\xd3\x9a\x34\x18\xa5\xc2\xa8\x0e\xb6\xf6\x3b\xec\x49\x21\x40\x20\xed\xb8\xd8\x75\xab\x5d\xb1\x6b\x6c\x86\xd0\x70\x84\x18\xd3\xe0\xaa\x7c\xae\x01\xc9\x98\x25\x17\x2a\x59\xea\x65\x3d\x05\x4d\xea\xbe\x71\x6c\x38\x4a\xfd\xb7\xc7\x68\x9a\xac\x34\x46\x60\x70\x9e\x50\x7f\x89\xf0\x33\x13\x36\x66\x9c\x4c\x9f\x47\xfe\x6d\x4b\x1e\x8d\x3a\x5f\xf0\x6b\x12\xce\x3b\x3e\x02\x6a\x9d\x84\x52\x1a\x87\x22\xc4\x80\x17\x28\x82\xd6\xf0\x08\x48\xb3\x08\x4a\x3a\x0a\xdc\x4d\x81\x92\x9e\x80\xcc\x79\xdc\x18\x35\x16\x30\xd4\xc4\x7f\xf9\x03\x39\x71\x9a\xdf\xb7\x48\x93\xeb\xfa\x39\xae\x90\xbd\x26\xe1\x02\xb3\x0f\x06\x32\x93\xc4\xe2\x9e\x05\xd3\x68\x94\xbb\x40\x26\xf7\x70\x49\xf5\x8e\xe7\x8f\x1e\x3d\x2a\x7f\xae\xb6\x55\x4b\xa9\x55\x9d\xea\x4a\xe2\x60\x49\x50\xea\x66\x6a\x5a\xf3\x7e\xb5\x99\xf4\xf2\x1f\xf2\x65\x60\xa4\x85\x06\xba\x06\x18\x34\xac\xd2\x6d\xa0\xa0\x87\x70\xba\x64\x1d\x9d\xa6\x61\x42\xa7\x51\x02\xe0\x17\x51\x70\xf6\x19\x4a\xdf\x07\xd4\x35\x1b\x76\x9a\x18\x98\x76\x80\xbf\x7f\x2e\xac\x51\x83\x4a\x8c\xc3\x89\x17\x61\xf0\xf7\x0b\xa0\xb9\x5f\xd0\xb8\x4a\x80\x7e\xeb\x61\x59\xcf\xc1\xe5\x6b\x28\x0d\x77\xd0\xb5\x6a\x60\x57\x00\xaf\x76\x41\x09\x94\x42\x09\x3c\x87\x82\xa9\x85\x4b\x1d\x0b\x6a\x60\xfb\x1d\xb1\xfc\x55\x1c\x54\x11\x92\x1b\x0d\xa8\x31\x69\x61\xa9\x01\xc6\xac\x92\xd0\x05\x91\x7f\x0f\xa5\x7f\x93\x0e\x8d\xc2\xa4\x01\x8a\xf0\x87\xce\x30\x6e\x61\xc3\x10\x34\xf4\x0f\xac\xf4\x78\xe4\xdf\x76\x5c\xd2\xa8\xfd\x63\x73\x39\x21\xc0\x5f\x41\x29\x54\x82\xa6\xff\x80\xb6\x7f\x1f\x1a\x31\x6e\x38\x60\x68\x11\x7c\x3a\x9d\xe0\xbb\xea\x84\x02\x69\xdf\xdd\x37\x1f\x93\xb5\x3d\x28\xfd\x1a\x3b\x64\x9d\xa3\x6f\xa6\x8f\x1d\x72\xd1\x73\x75\xa7\x51\x1e\xc2\xfd\x50\x70\x23\x13\xd4\x40\x19\x10\x7e\x1d\xe8\x25\xf5\xd0\xc8\x42\xa1\x04\x6f\xc0\xf1\xf7\x09\xd0\x59\x2e\xec\x57\x30\xce\x8c\x86\xb3\xdb\xe0\x66\x1f\xdc\x9b\xa5\x0e\xf4\xb6\x30\xcb\xbe\xb0\x91\x01\x94\x3d\x08\xe7\x75\xf6\x81\xbb\x61\x70\x59\x87\x9b\x4e\xa3\x78\xc3\x76\xfb\x41\xc2\x14\xf4\x7c\x0f\x01\x32\x03\x8a\x66\x1a\x7e\x59\x0a\xc7\xbc\x10\x40\x2b\x05\x36\xdf\xc8\xf0\x7b\x89\xf6\x6f\xad\xa2\x51\xd5\xe5\x49\x70\x27\x48\xcf\x42\x70\x00\xe7\xf0\x20\x2b\x01\xd6\xae\x19\xa1\x7f\x47\xfe\x6d\xdb\x2a\x8d\x3a\xd3\x3e\x14\x05\xb7\x42\xbd\x86\xd3\x2f\xb0\x86\x89\xd0\xa7\x4d\x41\x8b\x6b\x01\x35\x9c\x87\x55\x0e\x83\xd1\x11\x9c\x9e\x35\x03\xc1\x37\x44\xbe\xc6\x75\x21\x2f\xcf\xc7\x1c\x4d\xf3\xbb\xb4\xc2\x4a\x4e\x1f\xbe\x17\xd7\x7a\xcb\x5c\x01\x99\xdd\x30\xee\x90\xa1\x74\xe9\x85\x08\xef\x91\x80\x11\x10\x7c\xe3\x26\xac\xbd\x6f\x95\x54\x97\xb3\x5d\xd1\x5e\x4e\xae\xe6\x38\xc6\x57\x63\xb5\xfe\xb9\xf4\xba\x28\x1d\x6b\xce\xcc\x07\xeb\x15\x4a\xcf\x65\xda\x63\x34\x4a\x08\xe4\x78\xc1\xbe\xd4\x09\xb7\x91\xc0\x2a\x58\xd3\x69\x94\x02\x38\x94\xc8\x82\x4e\x05\x84\xd0\x85\x0f\x16\x6c\x9f\x2a\x0c\xc6\xb1\x3b\x18\x90\xb0\x89\x43\x35\x81\xfd\x1a\xfb\x36\xaf\x4e\x46\xd4\x04\xb7\xbc\x5a\x1f\x6a\x36\x22\x26\x06\xcc\x0b\xfa\x53\xd8\xc9\x4a\x41\xd7\x7b\x05\xf5\x7e\x0f\x34\xb9\x1f\xee\x33\x85\x22\xa0\x81\xbf\x0b\x16\x76\x75\xc1\xc0\xec\x18\xe8\xb5\xf0\xad\x14\x38\x82\xfd\x77\x17\xdc\xdf\x9a\x0f\xb2\x3b\x92\x27\x50\xdd\x3b\x28\xe8\x3b\x70\x08\xb8\x03\x6d\xf0\x1e\xf2\xbb\xbb\xfe\x4d\x26\x34\xaa\x3f\x23\x2b\x0c\x7d\x9f\x43\xd7\x71\x15\x86\x7c\xb0\xc0\xb6\xff\xe6\x88\x7f\x6d\xbd\xa6\x08\x49\x1c\x86\x0a\xf0\xc5\x1f\x50\xc8\x01\xd0\x7e\xf2\xff\x7f\x0a\xef\x6f\x7b\x99\x69\xd4\xb7\xc3\x43\x1f\x42\xff\x90\x7a\x5a\x4c\xdf\x23\x9f\xe7\x1e\x26\x33\xe2\xa3\xdf\x66\x7e\xb5\x9e\xdd\xfa\x90\xae\x7d\x6f\x45\xe7\x99\xe5\xaa\xdc\x83\xde\x1d\x79\xd3\xc0\xf4\xe1\x6c\x9e\x2b\x9d\x46\xb9\x0b\x79\xb7\x16\x7a\x08\x90\x72\x0f\xec\xea\x65\x40\x17\x5f\xe0\xb0\xd9\x03\x37\x6b\x9d\x00\x81\x31\x50\x7d\x0b\x74\x9b\xde\x70\x4b\x25\x34\x88\x9b\xe0\xee\x2c\x2c\xa0\x1c\xce\xb1\xc3\x4b\x37\x18\x81\x40\x2f\xb6\x09\x68\xf4\x0d\x7c\x17\x7c\x8c\x40\x07\x57\x04\xdf\xbd\x0b\x8a\x49\x83\x43\xa8\x2f\xf8\xee\x13\xfc\xae\x19\x2a\xfa\x1d\xec\xe1\x41\xa0\xc8\x69\x38\xdb\x77\x13\x3c\x1c\xb4\x90\x68\x41\xab\x48\x81\x1b\x3a\xfe\xbb\xba\xfa\xb7\x76\xd3\xa8\x8c\x24\x75\x79\x20\xf0\x18\xd8\xe8\x32\xd8\xc7\x42\xc0\xb5\xc6\x06\xba\x2f\xf2\x6f\x1b\xc2\x69\xd4\xc1\x4f\x74\x6b\x10\x92\xa4\xc2\xd0\x67\x61\x17\x24\xac\x4f\x19\x90\x5f\x15\x1c\xf5\x5f\x42\xe7\xfb\x12\xde\x4e\x05\xbe\x2f\x0b\xda\xc9\x76\x70\xb7\x12\x36\x6f\x0a\x46\x0b\x91\x60\x38\xaa\x06\x05\xf5\xc2\x07\xe0\xbc\x10\x17\x9d\x46\xf1\x04\xf7\xa6\x16\xa2\x4f\xf8\xa4\x2f\x68\x7d\x20\xe8\x2d\xe9\x0b\xfb\x7c\x01\x2c\x13\x36\xe4\x06\x8c\x54\x68\xa0\x23\x84\x42\xe7\x0a\x5f\x9b\x85\x1e\xd3\x90\x4e\xd3\x38\x0d\xbe\x2e\x06\xf2\xed\x83\x1e\x06\x42\x28\xa0\x7c\x70\x6f\x6e\x61\xa9\x19\x6a\xed\x1e\xe8\x72\xf7\xff\x7f\x17\xda\xdf\xb6\xbc\xd3\xa8\xf3\xbf\xe6\xbf\xc3\x09\x8a\x70\xf0\x6a\x1f\xf8\xf8\x05\xcd\x26\x0a\x66\xf8\x79\x70\xe3\x33\xac\x5f\x22\x68\xc0\x1b\x50\xbf\x5a\xf8\xc0\x2c\x54\xaa\x3f\xdc\x4f\x0d\x2d\xc0\x0b\x54\x6e\x06\x0a\xae\x04\x46\xb1\x5f\x40\xf5\x7e\xc2\xb1\x7a\x61\x0a\x14\x66\x26\xf0\x12\x03\xe6\x45\x83\xe5\x3c\x84\xb6\x7c\x1e\x8c\xfb\xb0\x2f\xdf\x5d\x00\x43\xa7\x09\x3d\x44\x13\x10\xe5\x37\x68\xd6\x05\xe0\x72\x0e\x3a\x51\x28\xc4\x4f\x80\x3e\x06\x4b\xac\x02\x55\xef\x84\xb2\xa8\x83\x21\xc6\x21\x3a\x8d\x12\x0b\x0b\x98\x05\x4f\xcd\x43\x45\x57\x2d\xec\x59\x87\x95\x8c\x83\xd3\x7b\xa0\x7a\xef\xa1\x3b\x54\x01\x4d\xc3\x4d\x87\x0c\xae\xfd\xfe\x4a\x5f\x23\x50\x7c\x4c\xe7\xe7\xa0\x75\x22\xc7\x7d\xb5\x25\x83\xf6\x45\xed\xac\x59\x9c\x3f\xa2\x99\x5f\xe5\x4d\x8d\x68\xfe\xdb\x63\x34\xaa\x20\x89\x54\x0c\x0c\xf7\x3d\x34\x12\xd0\x4c\x8d\x2d\xd0\xe5\x90\xe9\xaf\x90\x7f\xfb\xc9\x01\x8d\x3a\xaf\xf2\xfd\x45\x28\x48\xb4\x17\x26\x8d\xe0\x1a\x22\xf4\x7b\x18\x94\x58\x0d\x5c\x37\x84\x4e\x68\x1a\x1a\x03\x1d\x48\x64\x06\xbf\x5d\xd6\x81\x77\xff\xac\xb8\x2e\x17\x3d\xc9\x55\x81\x2d\xed\xe3\x96\xc1\x97\xce\xd3\xbf\x94\xbf\x47\xd6\xbf\x4a\xeb\x0d\x9b\x72\x9a\xc4\x68\x94\x72\x68\x92\x85\xf0\x33\x67\x61\x84\x05\x6a\x7c\x00\x3e\x5e\xc2\xbe\x91\xbb\xb0\xfb\x7a\xc1\x8f\x00\x3d\xf6\x2e\x78\x62\x28\x6b\x37\xb8\x35\x16\x7e\xd7\x0a\x77\xff\x2d\x6c\x52\x85\xb9\x0f\x6e\x27\x5a\xca\x9a\xfa\xa9\x1f\xd6\xe9\x57\x84\x3a\x9e\x74\xa7\xbd\x3e\x72\x22\xf4\xc1\xce\x88\x0d\xb3\xbb\x3c\x3c\xdf\x78\x3e\x16\x78\x66\xc3\xe1\x4e\xd3\xd8\x0c\x46\x65\x60\x33\x49\x70\xcc\xe0\x04\x63\x08\x9c\xfd\x2e\x00\x37\xab\x41\x7b\xdb\x16\x92\x9e\xff\x0e\x1f\x7f\x6b\x20\x8d\x2a\xea\xb5\x30\xe7\x11\x0c\xdf\x6c\x58\xd8\x44\xbd\x90\xb7\xfe\xd7\xf3\xff\xad\x6e\x34\x4d\xee\x04\x58\x48\x39\x34\xa7\x1c\xd8\xfe\xb7\xd0\xa8\xde\xb0\xd3\x63\x91\x7f\xfb\x65\x08\x8d\x5a\xf1\xeb\xe8\x0c\xd0\x68\xff\xc2\x3e\x23\x60\xf2\xbf\xa0\x14\x6f\x01\xe5\x36\x2c\x44\x39\xb0\xf0\x3c\x28\xf9\x2f\xb0\x9e\xad\xd0\x2b\xf3\x80\xcb\x58\xf8\x48\x11\x0c\xf4\x1e\x00\x79\x54\x2e\x68\x0c\x26\x5b\x40\x13\x23\xb0\x6f\x3c\x00\x9a\x68\x82\xd1\x5b\x1e\xb8\x1c\x81\xab\xef\x0b\x02\x80\xef\xd2\xc0\x8d\x08\x38\x74\xfb\x01\x74\x35\xdc\x7f\x00\x5f\xa8\x04\xc5\x76\x82\xbf\x3f\xe3\xe2\x94\x66\xd6\x89\xef\x51\xa9\x16\x79\x01\x77\x7b\x9f\x96\xdf\x94\x69\x93\xae\xd8\x91\x73\xc9\x74\x53\x72\xf6\x49\x8a\x8b\xdc\xfe\x8c\xcf\x18\x4d\x63\x27\x1c\x9a\xe0\x40\x71\x07\x94\x1a\x08\x25\x54\xcf\xf2\x3b\xb1\xff\x5b\x11\x34\xaa\x68\x31\x02\x97\xca\x46\x16\x76\xbc\xc3\xf7\xcb\xe0\xe7\x63\x28\x8a\x28\x06\x7a\x2b\xf2\x6f\x3f\xae\xa1\x51\x67\xc6\xbf\x4f\x86\xa1\x40\xba\xa0\x49\x4f\xa1\xa4\x02\x80\x38\xe2\x80\xe0\xb3\x60\x9f\x19\x05\x0d\x1d\x83\x92\x89\x5a\xd8\x9e\x0c\x2c\x77\x02\xfa\x8e\x36\xd8\xd9\x1e\xc3\xcf\x41\xe8\xfc\x30\xb8\x48\x0d\xbf\x74\xc7\x39\x8e\x14\xe9\xb2\xfb\x11\x0d\xc1\x13\xde\xf7\x45\x73\x65\x2d\x1f\x07\x76\x3c\x6f\xda\x37\xb3\x3e\xe1\xb3\x51\x85\xd4\xd7\x18\xa9\x19\x83\x3f\x47\xfb\xc2\xe5\x07\xf8\x9f\xea\xbc\x0f\x28\x78\xed\xf2\x20\xb6\xf3\x8c\x2b\x69\xbd\xe1\xd1\x72\x15\xde\x0b\xd7\xce\x58\x09\x69\x73\xaf\x01\x5e\x03\xfa\xb3\xc3\xa0\x66\x10\x9b\x0e\xfa\x62\x03\xf4\x02\xc5\x40\xd3\x43\x30\x71\xbf\x03\x9a\x52\x05\x7f\x10\x04\x25\x74\x67\x61\x6d\x0b\xfa\xc9\x0c\xd0\xac\x4f\x0b\x59\x2f\x78\x39\x1f\x9a\x53\x32\x6c\xe1\x2d\xb8\x21\x0e\xba\xf8\x1c\x60\x32\xaf\x41\x97\xee\x84\x2b\xe4\xab\x7f\x6b\xea\x6f\xed\xa1\x51\x8b\x49\xb1\x64\xa0\xa9\x57\x0b\x13\x97\xd0\x68\x53\xe0\x75\xe4\x42\x7a\xff\xdf\xbd\x1e\x7f\x6b\x30\x8d\x4a\x66\x5d\x98\x5a\xba\x0d\x6b\x89\xc1\xf7\x6f\xc1\xb1\x61\x88\x85\x2e\x42\x36\x20\x2d\xb5\x3a\x6d\x27\xb7\x59\xce\xde\xd9\xee\xfc\xe9\x73\xa7\xad\xf1\x7f\xfd\xe7\x17\xb3\xfb\xf3\xe4\x3e\xe9\xda\x65\x8d\xc5\x35\x7d\x4e\xb5\xd8\xa2\xc8\xbf\xd7\x95\x72\xf0\x4b\xe5\xc1\xd9\x03\x85\xb2\x6f\x39\x38\xea\xf5\x6e\x62\x14\x92\x35\x99\xa4\x4e\x22\xfd\xf9\x83\xbe\x5f\x36\x55\x66\xf1\xf1\xb6\x9c\x4a\xdb\x75\x54\xee\x3c\xd4\xc5\xa4\xc7\xde\x44\x1c\x70\xdb\xef\x1f\xe9\xd2\xc8\x6a\xe0\xc3\x29\x48\x36\x20\xb1\x2f\xe0\x4e\x3b\x9c\x3e\xff\xff\x57\xa6\x0b\xef\x8f\x6c\xb8\x74\x9c\x37\xe2\x2a\x7b\xf4\x85\x4d\xae\x26\x99\x75\xfc\x3a\x42\x51\x74\x0d\x23\x97\x67\xdd\x52\x97\x44\xa4\xf9\x95\x93\xfe\xfc\xad\x69\x9f\x30\xcf\xf4\xa5\xb5\xbe\xf4\x41\x94\x7f\x3f\x6f\xa1\xc5\x8e\x2b\x8c\x67\x6c\x8e\xac\x76\xfe\x68\xa0\xda\xc9\x25\xa9\xd3\xcc\x82\x32\x0c\xda\x9c\x76\x38\x6f\xe9\x74\xc6\xd1\xc1\xf2\xfc\x7b\xe4\xdf\xde\xa2\x51\x29\xa6\xdc\xf7\xbd\x30\x9a\x01\x62\xdb\x78\x5b\x69\xe7\xb2\xad\x16\xe9\xc2\x0e\xaf\xfd\xb3\x9d\xde\x06\x72\x39\xd9\xa3\x0c\x03\x18\xcd\x68\x23\x43\x20\xbb\xf6\x9a\xd4\x19\x16\x03\xfd\x8b\x0a\x3b\xfd\x22\x36\x7d\x77\x0c\x7e\xcd\x73\xaa\xff\xde\x6b\x7e\xff\xe0\x0a\xe5\x1f\x2a\xf7\xab\x8f\x5f\xd3\x3f\x33\xe2\xfd\xca\xed\xee\x88\xb2\xb4\x97\x64\x96\xa0\x25\x7c\xcd\x3d\x63\x4c\x6f\xb4\xb2\xe5\xe0\x67\xb1\x4f\xbe\xe5\x9f\x4f\x3d\xb8\x13\x15\x3f\xf4\x2a\xe0\xc0\xce\xf6\x0e\xe6\xfe\xae\x5f\x79\xc7\xd8\x3d\xf6\x9a\x9e\x13\x5c\x9d\xa7\x5b\xf4\x2d\x2e\xed\x9e\xef\x76\x41\x0b\x50\x11\xe1\xca\x8e\x86\x5d\x07\x8f\x08\x65\x4a\x98\x25\xd8\x9e\x7e\xe3\x97\xaf\xd5\xf2\x1d\x65\xe8\x07\x5f\xb9\x88\xd7\xbe\xd6\x6d\x53\x71\xb1\x50\x9d\x51\x35\xeb\x3f\x19\x8f\x96\xc9\xcd\xa1\x0c\x5f\x31\x9a\x01\xf9\xa6\x37\x9b\x85\xe3\x79\x59\x9d\xa8\x32\x95\xe5\xdd\xde\x57\x36\xbc\xfc\x22\x38\x2e\x68\x0d\xab\x11\xd0\x6b\xa7\xff\xc8\x87\xd7\x97\x5b\x6b\x2a\xd9\x6a\x6a\xeb\xba\xb5\x61\x22\x8c\xd7\x94\xe8\x95\x3f\x5b\x54\xc4\xce\x8a\x59\x1a\x38\x1d\xdf\x17\x79\x28\xb8\x77\xcd\x89\x82\x5d\xb3\x2f\xc4\x9b\x07\x04\xad\x40\x81\x7d\xe1\xa7\xe4\x04\x2a\xc3\x2f\xc5\xcb\x6c\x5a\xf6\xb3\x4d\x2f\xff\x8d\xfb\xd2\x0b\x82\x26\x26\xff\x89\x94\xba\xb7\x38\x96\xff\x5c\x23\xbd\xd6\x24\xb6\xf5\x88\x40\x42\x87\xba\xb2\x58\x8b\x52\xfb\x0e\x01\xae\xdd\x6b\x68\x93\x15\xaa\x08\xf6\x3f\xb4\xfe\x3f\x45\x8f\xbf\xf9\x2c\xb7\xd2\xe9\x0e\xaf\x4b\xf2\xc5\xb9\xe7\x59\x1b\x56\x73\xac\x6c\x7f\xa1\x6c\x5c\xe1\xc8\xb0\xe6\xa6\x85\xbc\x56\xe0\x17\x50\x74\xf6\x85\x1b\x9f\xcb\xb2\x64\xd2\x13\x9e\x27\x5f\x61\xec\x55\xde\xf8\x8e\xaa\xb8\x69\x8c\x7d\xcf\xb7\x83\x07\xf9\x57\x9a\xbc\x19\xd3\x51\x48\xcf\xb6\xa9\x13\x62\xb3\xda\x27\x3e\x38\xa4\xd7\x76\x34\xfe\x3f\x45\x3b\xae\x4d\xd9\x6c\xec\x5e\xfa\xcb\x6a\x5f\x6d\xb2\xce\x96\x7b\x8c\xf6\x1a\x11\xd2\x9c\x03\xa6\x27\x8a\x0e\xb7\xf5\xbf\xa3\x18\xa9\x63\xff\x83\xb0\x84\xc9\x06\x24\xce\x05\xcb\x76\xb2\xbc\x68\xe6\x64\xf1\xe7\x75\xc4\x7f\xd6\xc9\xd7\xa6\x65\xec\x34\x0b\x3b\x74\x69\xa8\xe1\x81\x11\x6b\x16\x4d\x88\xfd\x20\xef\xe4\x18\x2d\xeb\x46\x82\xde\xc4\x39\xa5\x55\x3e\x5f\x7d\xd5\xd5\x49\xbb\x49\xeb\x97\x5b\xae\x39\xf1\xb3\x93\xa4\x43\x22\x4f\xea\x26\xaa\x9c\x65\x6c\x0c\xa2\x19\x09\x81\x3f\xe2\xc3\x2f\xb5\xa7\x69\x91\x16\xfd\x33\x24\xa3\x21\x36\x39\x32\x8b\x6f\xff\x2e\xa8\x63\x9e\xa4\xbe\x97\x44\xe6\x9e\x52\x6a\x09\x96\xd2\xf7\x21\x91\x48\x7b\x49\xc8\xd5\xa1\xf7\x09\x8c\xe6\x85\x14\x12\x89\xf4\xf5\xf7\x6f\x2f\xb8\x99\x85\x0f\x1e\x46\x0c\xaf\xd6\x46\x84\x09\x1a\xef\x0a\x76\x9b\xb0\xb5\x46\xfb\x53\xcb\x8b\x04\x8f\x64\xaf\x62\xfd\xfc\xd5\xef\x8f\x5e\x98\xaf\xca\xe6\x74\x8a\xdf\x2e\x52\x60\x8c\x23\x58\xb8\x44\x99\xe5\x06\x5b\x6b\x6a\x41\xc0\x49\x06\x41\x59\xf7\x15\x21\x06\x52\x24\x75\xf5\x3f\xf3\x61\xc1\xcb\x27\xae\x56\x68\x4c\x35\xb9\x64\xfb\x4c\xde\x71\x8d\xda\xe2\x2d\x4d\x73\xa8\xba\xb9\xbf\xd1\x24\xe2\xfd\x5c\xab\xdd\x46\x75\x1d\x12\x23\x77\xd3\x0d\x7f\x50\x69\x02\x5e\xe5\x8f\x47\x1d\x0d\x78\x7f\x58\xcb\x69\x95\xdf\x93\xb1\xaa\x89\x6e\x15\xb4\xef\xbe\x2d\x6a\xb9\x6c\x74\xe5\xd8\xe1\xdb\xd5\xf5\xed\xd7\xb6\x20\x7f\x3c\xaa\x15\xbc\xbf\x65\x3c\x5a\x6b\xea\x99\xea\xb0\xef\xfb\x38\xd5\x72\xa1\x9b\xbb\x59\x5a\x3e\x25\xaf\x6c\x3d\xf2\xc8\x20\x30\x6c\x5e\xfc\xcf\x5f\x3f\x6f\x8a\x68\x38\xaa\x84\xac\xbc\xbd\x63\xb7\x79\x3e\xa3\xe9\x89\x1e\xf9\x30\xc7\xef\x3b\x2f\x0a\xbe\x4f\x8f\x6d\xff\x31\xa9\xbf\x6a\x2b\xfb\x03\x41\x99\x3f\x9e\x3f\x13\xa8\xf4\x36\x4b\xc9\xf6\x1c\xef\x57\x87\xe7\x27\x1b\xcd\x13\xa5\x14\xec\x0a\x14\x1f\x7d\x73\xaf\x18\xdc\xb6\xed\xa3\xfd\x87\x28\xf5\x09\xb3\x7f\x93\x9e\x2f\x85\x64\x49\x21\x59\xba\xd1\x8d\xc4\x49\x6b\x59\xc9\x3c\x22\xaf\xcc\x87\x35\x8f\xe7\x7f\x18\xd4\x7d\x3e\xaa\xbe\x66\xde\x0e\x33\x9a\xa9\xfe\x52\x64\xef\xac\x34\xd1\x6e\xce\xf3\xe4\x3d\xbb\xab\x1b\x8b\x90\x08\x89\x44\x42\x44\xe8\x66\xff\x26\x10\x0f\x66\x84\xec\xae\xad\xfe\x1f\x4b\xc1\xfe\x68\xc4\xb8\x98\x94\xe9\x8f\xf0\x24\x8b\xc8\x68\x8f\x0d\x72\x9c\xb6\x85\x6d\xb2\x99\x1a\x27\x68\x6a\x89\xa2\x3b\xde\x1a\x3c\x2e\x43\x3a\xdc\x8e\xfd\xdb\x73\xee\xda\xa0\x64\xf5\x45\xa5\xe7\xf4\x16\x5c\x10\x64\x48\x64\x7b\x67\x38\xb3\x7b\x73\x90\xc7\xb5\x0b\x5d\x6e\xbb\x75\x6d\x31\x5f\x79\xb3\xfd\xe7\x5b\xbf\x73\xdc\x72\xdb\xfc\x6f\xcf\xc1\xd2\x19\x01\xc1\x0d\xa3\x30\x5e\x7d\xce\xf4\x6f\x1a\xf3\x60\x22\xa3\xe4\x4e\x77\xea\xfc\x75\x12\xe9\x4f\x73\xbe\xbc\x2f\xfa\xa8\x73\xef\x68\x49\xc1\xd5\x8b\x6f\x2d\xb9\xbf\x63\xf7\x93\xf6\x96\xb8\xe8\x8b\xdd\x09\x67\xf6\x6c\xda\xc1\xbf\x21\xe0\x8f\x47\xab\x1f\x97\xbe\xcc\xbc\x16\x58\xfd\xf0\xda\x95\x57\x55\x69\xd6\xdf\x2e\x72\xb8\x3b\x28\x2a\x87\x39\x1b\xd1\x33\x69\xef\x5e\xfa\x9e\xf9\x73\x4d\xab\xf8\xf0\xd1\x0c\x23\xa3\x59\x16\xfd\x53\xe5\xe7\x65\xb6\xec\x68\xd1\xb3\xb9\x5c\x21\x57\xb4\xe3\x8b\xf9\x44\x92\x63\x45\xe7\xbb\x3f\x1e\x0d\x1d\x93\xf0\x1b\x0b\x76\x79\xcd\x7c\xb6\x69\x37\xdf\x92\x82\x9a\xa5\x73\xb9\xaf\xe2\x3e\x4f\x1e\xe0\xb5\x9f\xe8\x32\xcb\xc4\x2e\xff\x79\x84\xf6\x38\x5f\xb4\x01\x7d\x3f\x35\x95\x83\x45\x46\xbc\xda\x64\x57\x46\xc3\x8c\xe8\x68\xdc\xf9\x5b\x85\xb6\xed\xae\xad\xc2\xf9\x9b\xff\x78\x34\x26\x88\x21\x98\xff\xd5\x52\x4c\x79\xee\x89\x44\x6d\x19\xe7\x3a\x6b\x79\x4b\x33\x01\xee\xcb\x9b\xda\x95\x79\x9a\x74\x39\xef\x33\xfc\xf1\xa8\xaf\xdf\xa7\xba\xe6\x4c\xfd\xef\x26\x51\x36\x8e\xa7\xed\xdf\xba\x96\x47\xb4\x8e\x3f\x12\xba\x75\xe5\x35\x79\xac\xce\xac\xa2\xf6\xcf\x47\x65\x5f\xac\xfc\x70\xa6\xbb\x82\xc1\x7e\xf7\x8a\xe4\xd4\xbd\x11\x9b\xdd\xe5\x45\xd7\x1c\xe7\x0a\xfe\xe9\x56\xc4\x37\xf4\x03\x13\xf9\xf3\x37\xf9\x9a\xcb\x6b\x3e\xd1\xa6\xde\x7e\x36\x1e\x65\xa0\x39\x1a\x0d\x3d\x68\x98\x7f\x7f\xa1\x5a\xe8\x96\x99\x02\x83\x95\xb0\x9b\xbb\x32\xdf\x1f\x8f\x8e\x74\xdd\x6b\x37\x35\xd5\xdb\x72\x24\x58\x28\x3a\xaf\xea\x0d\x6f\x75\x49\x34\x2d\x5c\xa1\x70\x9b\x84\xe7\xb7\x60\x36\x4e\x56\x9f\x3f\x55\x50\xd1\x29\xe0\xc2\x5f\xdb\xe3\xc4\xf1\xb2\x73\x60\xea\x95\xc7\xc4\xc8\x43\xe6\x43\x8a\x5a\xd5\xa7\x97\x89\x8a\x84\x96\x1c\x4c\xf9\xf3\x87\xf6\x07\xaf\xcf\x0d\x0b\x86\xb9\x6e\x9b\x7c\x61\xd1\xa2\x58\x78\xf8\xf3\xc3\xcb\x97\xb4\x52\xcf\x44\x66\x92\xcd\xca\xc4\xf6\xa5\x14\xfe\xf9\xff\x32\x60\x95\x8e\xba\xc9\x34\x89\x27\xa4\xe8\x13\xe7\xf3\x4f\x64\xff\x0a\x68\xb6\x8b\xf3\xee\xfa\xb0\x9f\xf5\x10\x29\x5e\x10\xbb\xf5\xc7\xa3\x4b\xab\x79\x13\x35\xb0\xf6\xb6\x07\x7e\xe1\x6d\xab\x3d\xf8\xab\x85\xb7\x9e\x17\xdd\xdd\xbc\xf6\xa0\x8c\x5a\x6d\xde\x23\x3f\x9d\x3f\x7f\xbc\xce\x25\x74\x29\xfc\xd6\x1e\xae\xaf\x43\xda\x5b\x38\xd5\x3e\x3e\x9e\x56\x49\xc8\xfd\x7c\x26\x66\xf3\xe1\xc4\x07\x31\xb4\x95\xc7\xe7\xc3\xdd\x72\xd0\x7f\x33\x41\x77\xf8\xbf\x89\xb8\x85\x89\xdc\x26\xb1\xb4\x48\x19\x49\x92\xc8\xb4\x2e\x06\xac\x1f\x11\xf1\x5a\x1e\x9b\x2e\xa3\xb7\xf4\xfc\x40\xd1\xeb\x08\x3f\x7d\xcb\x8d\x85\x5e\xd3\x85\xb5\x09\xc5\xb7\x36\xb1\xf7\xb2\xeb\xf4\x51\x4e\x62\x28\xb9\x93\x24\x44\x5a\xfe\x00\x55\xd7\x26\x21\xe3\xf1\x22\x70\x68\x40\xa4\x85\x7d\xdd\xe0\x15\xb9\xe6\xfc\xda\x9a\xd3\xa5\x7c\xbb\x49\x0c\x79\xfe\xc5\x87\xdf\xb6\x3b\x91\xd4\x6f\x93\xf1\x8c\xac\xee\xe9\x55\xe1\xfa\x2a\xd2\x6b\x3e\x45\xba\x9f\x63\xc8\xb8\x75\xe2\xad\xbe\xef\xe5\x0e\xe9\x84\xb5\x16\x02\xb3\x7e\xa1\xfc\xaa\x18\x4a\xfe\x4c\x98\x81\xe0\x19\x89\x57\x5e\x3a\xf3\xaa\xae\x51\x4f\x3c\x92\x92\x10\x75\x6e\x90\xca\xed\x70\x2f\x9d\x71\xfc\x0d\x79\x6d\x16\x7d\x96\x5f\x66\xde\x18\x43\xc9\x5d\x84\x19\x0c\x78\xc6\xdd\x7d\xd6\x57\xd4\x5d\xad\x4e\x69\xf3\x6f\xe4\x52\xfb\x58\xe2\xc8\x4d\x09\xbf\x2b\xfd\x0e\x29\xf4\x13\x5e\xb9\xea\x98\x7a\xc9\x71\x0c\x25\x7f\x21\xcc\x60\xc4\x33\x5c\x35\xbd\xfc\x73\x0f\xca\xe7\x28\x7e\x6d\xbe\x22\xf3\x42\x81\xfd\xdc\xb3\xea\x99\x17\xfc\x6a\xf3\xf1\x76\x67\xb7\x55\x6a\x5c\x96\xc6\x50\x72\x37\x61\x06\x13\x9e\xb1\x23\x81\x16\x95\xb0\xae\xee\x70\x7f\x8b\x6c\xd1\x13\xd6\x91\x59\x45\xea\x72\xed\xa2\x21\x1b\x5d\xd5\xee\x30\x91\xd8\xa8\x36\x25\x0c\x25\xf7\x10\x66\x30\xe3\x19\x83\x55\xb2\x63\x5d\x4d\x89\x79\xbe\x09\xcd\x8f\x83\xf6\x04\x1d\x0b\x6d\x67\xb6\x5b\x4f\xfd\x50\x78\x23\xd4\x38\x58\xd1\x6f\x25\x2b\x86\x92\x7b\x09\x33\x58\xf0\x0c\xe9\x51\xaf\x95\x7e\xd1\x4f\xda\x5f\x5e\x9b\xdc\xbe\xe9\xb6\xb7\xf6\xc0\xc1\x62\x66\xa6\x1d\x7a\x9c\x3b\x8c\xec\xf2\xa4\x4f\x1d\xb3\xc1\x50\x72\x1f\x61\x06\x2b\x9e\x61\x54\x52\x5f\x5a\x96\x5f\x50\xf0\xdd\x2f\xdb\xab\x3f\xd7\x19\x11\x96\xdc\x20\x51\x22\xa4\xe4\x57\xea\x39\x21\x4a\xe7\x2f\x62\xc6\x50\x72\x3f\x61\x06\x1b\x9e\xc1\x95\xde\x68\xb2\x6d\x4e\x76\x72\xbf\xb0\x63\x8a\xe1\x7b\x5b\x2c\xc5\x2a\xac\xaa\xce\x2b\x38\x65\x5c\xf6\xa0\x2c\x4b\x3f\x99\x11\x43\xc9\x5f\x09\x33\xd8\xf1\x8c\xf1\x96\xf1\x03\x1f\x23\x98\xae\xbe\x3e\xdc\x7e\xc3\xdd\xdd\x3a\x74\xad\x8d\xd1\xce\xec\xb3\xd2\xa6\x63\xe4\x29\x8d\x2d\x3b\xb7\x38\x60\x28\x79\x80\x30\x83\x03\xcf\x38\x2e\x1d\xf4\x21\x83\xc3\x3d\x6c\x9f\xfe\xc5\x2d\xc6\x1b\x68\xd5\x55\x6e\x8a\x5e\xcd\x87\x5b\x6b\xee\x72\xba\x14\xed\x2b\x6e\x96\xc5\x50\xf2\x20\x61\x06\x27\x9e\xf1\x7e\xe6\xdd\xc3\x97\x8a\x4c\x8a\xc2\x95\x1b\x5d\x4f\xd2\xe4\x3d\x50\x79\xa3\x97\x4f\x6d\xbd\xa2\x9a\x4a\x0d\x4e\x5c\x24\xd1\xb7\x60\x28\xf9\x1b\x61\xc6\x12\x3c\xc3\x76\xdd\x9e\xb9\x63\x26\x27\xf7\x87\x61\x4e\x46\xce\xc5\xa5\x3c\x93\xec\xec\x19\xbd\xd2\x87\x13\x95\xd5\xde\x6f\xca\xd6\xbe\xa0\x85\xa1\xe4\x21\xc2\x8c\xa5\x78\x46\xc1\xc9\x6d\x9f\xa5\xae\xa4\x24\x2e\x73\xd3\xf1\xbd\x1b\xcc\x5c\x90\xf5\xea\x61\x30\xf7\x3a\xa4\x81\xd7\xa4\xdf\x2d\x5b\x28\xcb\x04\x43\xc9\xdf\x09\x33\xb8\xf0\x0c\x31\x25\x8b\xd0\xb3\x89\x27\x8f\x1f\xaa\x93\xda\xc4\xb0\x51\xfb\x7d\xde\x31\xfd\x5d\x1c\x9e\xe6\x7b\xbb\x64\x0e\xfc\x90\xdc\x13\xab\x8b\xa1\xe4\x61\xc2\x0c\x6e\x3c\x43\x80\xe2\xf2\x4e\x99\x2f\xc4\xd7\x69\xfd\x97\x69\x93\x02\xfd\x77\x69\x24\x85\x8a\x8b\xbb\xbe\x6b\x27\xcf\x76\x31\xcc\xb5\x27\xae\xc0\x50\xf2\x08\x61\xc6\x32\x3c\x63\x98\x1c\x77\xd8\x29\x89\xfa\x4b\xee\xf4\x8d\xcd\x6b\xee\x3d\x0b\x3f\x14\xa0\x27\xdb\x43\x3f\xd4\x7e\xd2\x31\xa9\xa7\x21\x58\x5d\x05\x43\xc9\xa3\x84\x19\x3c\x8b\xfc\xd5\xe4\x23\x89\x0b\x95\x3b\xb7\x3d\x3a\xff\xba\xb7\xf7\x1a\x9f\xf3\xd6\x75\x9d\x17\x04\x4e\x20\x65\xde\x7b\x6d\x75\xae\xaf\x52\x56\xc6\x50\xf2\x18\x61\x06\x2f\x9e\x61\x72\xe0\xfe\x31\x8e\x61\x6f\x37\xdd\x59\xb6\x3a\x91\x5e\x87\xab\x7b\x0e\xfd\xb0\xec\x4d\x8c\xe6\x29\xf2\x8d\x39\x57\x19\x13\xa5\x86\xa1\xe4\x1f\x84\x19\x7c\x8b\xec\xea\xfe\x9b\xb1\x80\x2b\xad\xde\x0d\xef\x2b\x4a\xaf\x98\x59\xcb\x5c\x8e\xd7\x4f\x8f\xa8\x7d\x23\xc5\xb9\x1e\x45\xaf\x08\xd5\x02\x59\x8d\x13\x66\xf0\xe3\x19\x0a\xb5\x3c\xb7\x74\xcc\x9b\x87\x8f\x6f\x38\xfb\x42\x6e\xbf\x45\xe9\x61\x71\xd9\x81\x25\x75\x95\xc7\x36\x5e\x6d\x8d\x10\x7a\xa1\x4d\xc2\x50\xf2\x04\x61\x86\x00\x9e\x51\x72\xa9\x3e\x54\x9d\xb1\xbe\xf0\xfd\x2f\x5e\x35\xd9\x98\x72\x9b\x93\x76\xa9\xfd\xdd\x4d\x3a\x1e\xfa\x99\x0a\xa5\x07\x2e\x50\xe4\x31\x94\x4c\x27\xcc\x58\x8e\x67\xa0\x4b\x6d\xcd\x39\xc3\xca\x57\xc6\xd8\x16\x89\x3a\xc6\x4d\x51\xdc\x46\x0a\x72\x77\xa5\x2b\x3e\x14\xf9\x56\xe5\xc8\xa0\x7d\xcf\x1a\x43\xc9\x93\x84\x19\x82\x82\x78\x88\xb6\xec\xf6\x8e\x13\x72\x1e\xe7\xd4\x28\x5c\xdc\x4c\xeb\xac\x05\xe2\x1f\xdb\x2e\x0d\x5d\x32\xad\xd9\x36\x58\x2d\xe5\x14\xb8\x12\x74\xf4\x29\xe2\x10\x14\x0f\x29\x4a\x1a\xf8\x5e\x1c\xb2\xbd\x9b\x45\x89\xf3\xc8\x13\x77\xe4\xd2\x25\xe9\xd5\x59\xf2\x0e\x7c\xaf\xbd\x56\x90\xd7\x8a\x84\x3e\xdf\x83\xa1\xe4\x9f\xc4\x21\x42\x78\xc8\xbe\x68\x65\xbb\x77\x3e\xef\xe4\xb7\x1f\x78\x1a\x30\xe6\xfd\x50\xfe\xa7\xfe\x7c\x47\xc9\xf2\xaf\x52\x11\x15\x8e\x77\x28\xef\x63\x80\x5b\x9c\x26\x0e\x59\x81\x87\x58\xa1\xbf\x8e\x1e\x3a\x20\xe2\x22\x9e\xd1\xc6\xb3\x4a\xf4\xe6\xd4\x35\xdf\x13\x92\xb7\x33\x4e\x68\xdc\x7c\x5c\xac\xed\x7e\x24\x50\x01\x43\xc9\x33\xc4\x21\xc2\x8b\x3a\x89\x7f\xde\x86\x39\x77\xfd\x43\xe7\xef\x7d\x13\xd5\xc8\x35\xdc\x59\xe6\x1a\x67\x50\x5d\xcf\x13\x2b\xbc\xca\x50\xa3\x6b\xab\xdb\x51\x0c\x25\xcf\x12\x87\xac\xc4\x43\x44\xe3\x0b\x6f\x88\x9c\x89\x2f\xfc\x1a\x68\x1d\xee\xa5\x60\xda\x9e\xb6\xae\x63\x67\xbb\xc5\x51\x67\xf3\xb1\xfd\xbf\x5e\x7a\x48\x82\x88\x74\x8e\x38\x64\x15\x1e\x12\x66\xa5\xb5\xc3\xf0\xcb\xc9\x5f\xec\x8f\x4d\xfd\xa6\x47\x69\x72\xb5\x0e\x83\x8a\x42\x95\xb1\x0c\x39\x2b\xb7\xf0\xa4\x5c\x98\xe1\xc1\x50\xf2\x2f\xe2\x90\xd5\x78\x48\xdc\x4f\x77\xaa\xa3\x1a\xa7\x1f\x7f\xcb\x4a\x01\xa9\xbe\x36\x89\x6c\x33\x3b\x67\x39\x69\x0b\x93\x2b\x1c\x25\xe7\x5e\x7f\xdc\x71\x02\x43\xc9\xf3\x44\x21\xb5\xe8\xbf\x25\xc4\xff\x9f\xb8\x08\x8a\xe0\x6b\x35\x91\x23\x29\xc1\x98\x93\x93\xc8\xc0\xb1\x3e\x27\x23\xcd\x50\xc8\x69\xf7\xcf\xf0\xeb\x8f\xb8\xb1\xe8\x64\x86\x84\xde\xee\x0f\x67\x31\x14\x21\x11\x6f\xfa\x9a\x45\x4a\xac\x49\xba\xc4\x2b\xe7\xc2\xba\xfc\x30\xeb\xea\x5b\x71\xd3\xe1\xe2\x0c\x0f\x14\x54\x72\x14\xd8\x5d\x2a\x37\x3e\xe2\xe5\xd4\xdb\x85\xa1\x08\x99\x38\x44\x14\x0f\xa1\x96\x5b\x30\x52\x8e\x36\x9a\x5a\x1d\xe8\xb9\xab\x88\x25\xf9\x70\xb0\xb8\xf2\xef\x74\x09\x59\x86\xae\x7b\x22\xd7\xfb\xe0\xfd\x19\x0c\x45\x10\xe2\x10\x31\x3c\x64\xcd\x54\xb3\xfa\xca\x95\x1d\xd5\x9b\xee\xbe\x3d\x7f\xc8\x89\xc3\xe0\x40\xfd\x87\x4b\xfe\x27\xbc\x2f\x5f\x32\xee\x70\xf3\x0c\xe7\x21\x63\x28\xc2\x40\x1c\xb2\x16\x0f\x59\x3d\x78\x28\x94\xe9\x82\xdf\xd8\x2c\x6a\x1d\x11\xe2\x52\xcf\x33\x7e\x5f\x59\x3f\x5c\xf8\xe7\xcd\x55\x66\x97\x15\x59\xe8\x45\x28\x86\x22\x8c\xc4\x21\xeb\xf0\x90\x53\x83\x27\x7e\x34\x06\xbd\x08\x15\xd6\xf8\x90\x5d\xab\x76\x0c\x59\x36\xa0\xde\xa3\xcd\x9e\xbf\xaa\x2a\x40\xd1\x78\x83\xb4\x27\x07\x86\x22\x4c\xc4\x21\xe2\x78\xc8\x9d\xc7\x6e\x0e\x19\x1f\x6d\xee\xeb\xaf\x93\x78\x5d\xa4\x57\x19\x60\x72\xe3\x23\x65\x49\xa1\xf9\x87\xb1\x65\x94\x92\x00\x53\xcb\x55\x18\x8a\x30\x13\x87\x48\xe0\x21\xb5\x19\x5d\xe1\xa7\x2c\xd9\x05\xfb\x67\x65\x8e\x74\x6c\x95\x6e\xe6\x28\xc6\x56\x9e\x1e\x12\xec\xb9\x74\xda\xe0\x41\x17\xeb\x33\x49\x0c\x45\x58\x88\x43\xd6\xe3\x21\x1a\x86\x66\xe6\x5c\x99\x2d\x42\x83\x1c\xae\xd7\xf4\x79\x58\x2d\x77\x76\x5c\xa5\x44\x5f\x7e\x32\xb0\xf9\xf4\xf5\x92\xb2\x63\x4f\x81\x09\xb3\x12\x87\x48\xe2\x21\x4e\xdb\x49\x5a\xeb\xc2\xb6\x72\x5f\xb1\x8f\x78\x3c\x75\x53\x7a\x19\x67\xa4\xea\x78\xde\xce\x3d\x8c\x3b\x77\xd3\x04\xc5\xf3\x18\x4c\x31\x14\x61\x23\x0e\x91\xc2\x43\x9a\xca\x6d\xed\x0d\x1c\x1d\x9f\x55\x28\x24\xdb\xfa\xeb\x29\x2b\xd3\xc5\xc2\xa8\xf1\x6f\x3f\x18\xba\x04\xa6\xe5\x1f\xcb\x0a\x92\xc7\x50\x84\x9d\x38\x44\x7a\x91\x09\xaf\x61\xbf\x69\x61\x29\x69\x54\x46\x67\x18\x57\x56\xcd\x4d\xb7\x48\xef\xe6\xb5\xf2\xe6\x93\x7b\x3a\xc4\x42\x5d\xb3\xf4\xf9\x46\x0c\x45\x38\x88\x43\x36\xe0\x21\xaf\x3c\x42\x56\x95\x33\x79\xb2\x44\x7e\x1b\x0f\x95\x4f\xc9\x1a\x30\x91\xfe\x79\x4e\x4f\xe6\x84\x64\xc4\x69\xd5\x19\xa6\xb4\x14\x3b\x0c\x45\x38\x89\x43\x64\xf0\x90\x03\xf9\x5c\xc1\xe6\xd1\xfc\x3c\x49\x6f\x5c\x6f\x15\x06\x73\x68\x5f\x1c\xdf\x99\xf8\xa0\xbc\xad\xf5\x5c\xfb\x7c\xd1\x36\x5b\x74\x37\x86\x22\x4b\x88\x43\x64\xf1\x10\xbb\xe8\xfd\xbe\x2e\x55\x9e\xf1\x7c\xaa\xaa\x37\x6c\x04\x77\x71\xb2\x46\xbf\x7c\x70\x3d\x55\x71\xab\x8d\x7f\xd6\x32\xf4\xf5\x69\x04\x43\x91\xa5\xc4\x21\x72\x78\x88\xc4\x3a\xce\xb2\x9e\x5f\xcb\x77\xdb\xbc\xf9\xd0\xcf\x50\x50\xdd\x6f\x77\x82\xd4\x39\x1a\xbe\xa2\x5b\x0d\xd1\xda\x73\x24\x7c\x5e\x03\x43\x11\x2e\xe2\x10\x79\x3c\xe4\xe2\x4e\xa9\x70\xa5\x1f\xb5\xc5\xd7\xb6\xae\x31\x62\x19\xd1\x9b\x60\xbc\x9c\xf6\xe9\xc3\x2d\xf9\xd6\x82\x97\x2b\xb6\x2f\xd9\x3f\x4b\xc1\x50\x84\x9b\x38\x64\x23\x1e\x52\x53\xdc\x78\xf6\xb9\x50\xb8\x44\xaa\x42\x5d\xe4\x91\x84\x0f\x12\x48\x64\x08\x4f\xf0\xd5\xad\x1a\x33\x99\x15\xe7\xe6\x2b\xce\xea\x60\x28\xb2\x8c\x38\x64\xd3\x22\xeb\x92\x53\x89\xbc\x59\xc2\x70\x2a\xb9\xc1\xbf\x72\xd6\xee\xfb\xe4\xcc\x9a\xf7\x0f\x0b\x45\x72\xf9\xba\xed\xb0\x08\x39\x31\xd4\x0a\x43\x11\x1e\xe2\x10\x05\x3c\xc4\x6c\x89\x5f\x47\xe6\x50\xfc\xa7\xb6\xdd\x01\xc9\x7d\x5c\x8c\x1e\xe9\x9d\x2d\x5b\xd3\x2d\xbd\x4d\xe5\xd7\xd5\x5d\x70\xcb\x95\x35\xc7\x50\x84\x97\x38\x44\x11\x0f\x71\x8e\xdd\x90\x48\x16\x66\xe5\x4d\x33\xb9\xb6\x7c\x67\xe0\x45\x8f\xa3\xb7\x4b\x57\x6c\xd8\xfc\x95\xb9\x2c\xa8\x52\xd9\x5b\x28\x9e\x1b\x43\x11\x3e\xe2\x90\xcd\x78\xc8\xf4\xfb\xc3\xf5\x2f\x24\xc5\xbc\x4a\x68\x9f\x95\x34\xa4\x15\x04\x0b\xd6\xa9\x45\xed\x32\x1e\x93\x0d\x14\x3d\x13\x63\x80\xa4\x38\x60\x28\xc2\x4f\x1c\xb2\x05\x0f\x31\x5d\x72\xe0\x75\x54\xba\x26\xd7\x96\x72\xa5\xcb\xcb\x03\x8e\x8f\xf2\xb8\x5c\xd9\x31\xbb\x96\x4d\x53\x50\xcc\x81\xe3\xcb\x91\x97\xfb\x30\x14\x11\x20\x0e\x51\xc2\x43\xb4\x2e\x57\x26\x95\x5e\x10\x62\xbe\xaa\x15\xdd\x1c\x63\xb2\x49\xfa\x75\xe2\xe9\x37\x77\xac\x3b\x2d\x2e\x38\x8e\x62\x6b\x65\xb7\x0b\x61\x28\xb2\x9c\x38\x44\x19\x0f\x29\xff\x19\xd3\xb8\xfa\x4d\xed\x0e\x39\xc5\xf7\x31\x99\xc9\xfc\x15\x1b\xc2\xd5\x0e\xf1\x5c\xcd\xbd\xb5\xe5\xb0\x2b\x4b\x81\xfb\x11\x2e\x0c\x45\x04\x89\x43\xb6\xe2\x21\x57\x2d\x57\xd9\x7c\xc2\x98\xa2\x7f\xc4\xaf\xda\xed\x31\x1d\x74\x95\xb1\x48\xba\x51\x72\xdc\x99\x7a\xe1\x8b\x76\xe6\xb6\x56\x5d\x63\x0c\x45\x50\xe2\x10\x15\x3c\x44\xf6\x6b\xfa\x5e\x6e\xbb\xfc\xfd\xe5\x73\xaa\xdd\x9a\x72\x75\x95\xcc\x9c\x56\x6e\x4d\x26\xab\x0c\x4b\xea\x13\x38\x24\x36\xac\x90\xc2\x50\x44\x88\x38\x64\x1b\x1e\xa2\x16\xcd\x93\x36\xf8\xbd\x61\xcb\xf0\x72\x9f\x5d\x9d\xe7\x85\x34\xae\xdc\x8e\x77\x64\x52\x0b\x2c\x7b\xe9\x7c\x2b\x6b\xab\xe6\x15\xe0\xbb\x56\x10\x87\x6c\x5f\x94\x9a\x1d\xbe\xab\xce\xc7\x3c\x20\xb9\x46\x79\x88\x3d\x48\x74\x45\xb6\xcd\x6d\xa1\x14\x8b\x9d\x0c\xb5\x5f\xcb\xf7\x90\x8b\x1f\xdc\x04\x71\x97\x30\x71\x88\x2a\x1e\xf2\xed\x94\x85\x40\xf6\xa8\xf6\xbc\x0d\xdb\x77\x85\x03\x29\x99\x3b\x6a\x3d\x76\x6f\x62\x6f\x14\x97\x8f\x75\x35\x2d\x60\xd9\x68\x72\x04\x43\x91\x95\xc4\x21\x6a\x78\x08\xab\xf1\x76\xce\x91\x1b\xb7\xaf\xfd\x3c\xa9\x57\x61\x3f\x21\x60\x39\xd7\x72\x8e\xdd\x70\x9b\xed\x89\x9e\x8a\x18\x2f\xcf\x7c\x1a\xb0\xae\x55\xc4\x21\x3b\xf0\x90\x9e\xf3\x08\x66\xa3\x54\xf2\xcb\x24\xed\x54\x6d\xb6\x9e\x83\x4d\xe7\xe9\x8f\x2b\x96\xb7\x69\x26\xb6\x04\xe9\x3e\x4b\x4e\x2b\x14\xc5\x50\x64\xf5\xff\x9a\xd0\xfc\x6d\xd9\xee\x8f\x84\x46\x1d\x5f\xab\x43\x6b\xfa\xfa\x77\x91\x78\x3b\xe4\x6b\xf7\xfb\x99\x1e\xbe\x78\x8e\x75\xe8\xaa\xb5\xa5\xdf\x85\xb4\x53\xbd\xc1\x2f\x37\xac\x6a\x15\xc3\x50\x44\x84\x78\xd3\x35\xf0\x90\xfc\x37\x91\x1d\x67\xe4\xcf\x55\x9f\x2c\x17\x0e\x24\xd3\xac\x56\x4b\x4d\xc4\xb2\xd5\xe5\x15\x2e\x5d\x9e\x24\xeb\x2c\xf8\xe9\xca\x72\x0c\x45\xd6\x10\x87\x50\xf0\x10\x19\x3e\xde\xe8\x03\x4c\x02\xbc\x82\xd2\xd2\x6c\x93\x59\xdd\xd7\xcd\x4f\xdf\x9f\x14\x8d\x11\xa6\x36\x38\x24\xb4\xf7\x63\x57\x0d\x30\x14\x11\x25\x0e\xd1\x5c\xb4\xaa\x24\x79\x96\x49\x2a\x27\x6c\xf9\x47\xcf\x1d\x68\x59\x55\xd7\x75\x89\xeb\xc7\xf7\xad\xe6\xb3\x68\xbd\x15\xd7\xcc\x3e\xf7\x63\x1f\x88\xd0\xc5\x88\x43\xa8\x78\x48\xc2\x87\x18\x71\xf7\xe8\xde\x9f\x55\x93\xa9\xbd\xe6\xad\x66\x89\xbb\xe4\x18\x1c\x4d\xee\xb7\x4d\x1b\x36\x97\xcc\x76\xde\x67\x03\xe1\xcd\x5a\xe2\x10\x2d\x3c\xe4\xd8\xc7\x25\x8a\xab\x62\x4f\x0c\x4a\x52\x46\x8e\x5b\x7a\x73\x52\xbe\x15\x1b\x53\x5d\x2f\xd7\xe9\xf5\xc5\x09\x1b\x5f\x57\x7c\xb5\x14\x43\x91\x75\xc4\x21\x3b\xf1\x90\xef\xa5\xad\x09\x0c\x71\x61\xca\xdd\x72\xb5\x5a\x6c\x8f\xa7\x79\x42\x92\xe3\xa5\x19\x7c\x25\xae\x54\x1f\x5f\xba\x65\x83\xc9\xc1\x25\x18\x8a\x88\x13\x87\xec\xc2\x43\x24\x27\xb7\x84\x85\x77\x3d\xbe\xc6\xa5\x9b\x57\xc0\xdc\x66\x6b\xf0\xca\xec\xa4\xbd\xcd\xfe\x4c\x03\x8e\x25\x4b\xc5\xa2\x62\xd5\xad\x31\x14\x91\x20\x0e\xd1\xc6\x43\xd8\x3b\x79\x30\x29\x29\x8e\x10\x1e\x6f\x51\x07\x8d\x5c\x5b\xa1\x04\x1e\x59\x27\xd7\x02\x21\xfa\x66\x97\x9d\x96\xa5\xdb\xaf\xaf\xc0\x50\x64\x3d\x71\xc8\xee\x45\x3a\x09\xb1\x79\x76\xd6\xd9\xf0\xb3\x49\xfa\x5b\x81\xb3\xdf\xa4\x28\xda\xde\x5c\xf6\xdb\x85\xbd\x4e\x0b\x6f\x7e\xfb\x8e\xef\x92\x35\x0f\x86\x22\x92\xc4\x21\x3a\x78\xc8\x2d\xd5\x25\x6d\x16\x85\x1c\x96\x36\x9f\xa7\xe3\xb3\x1b\x9e\xb9\x5e\x3b\xa6\xc3\xc0\x66\xba\x77\x4a\xa3\xe6\x4e\xb7\x54\xb2\xc8\x69\x0c\x45\xa4\x88\x43\x74\xf1\x90\x52\x9b\xa7\x12\xee\x27\xe3\x7c\x04\xf3\x3f\x49\x3b\x32\xa2\x62\x9c\x14\x2d\x17\x03\xb2\xea\xa8\xe6\x11\xcd\x17\x75\x45\x2a\x22\x18\x8a\x48\x13\x87\xec\xc1\x43\x3c\x32\x64\x1c\xc4\xef\xd9\x6f\x29\xe3\x73\x36\x10\x3a\xb2\x8a\xb4\xfd\xe7\x57\xa3\xe3\xb5\x5e\x81\x5c\xd6\x2b\x7c\x4b\x1f\x5a\x9d\xc3\x50\x64\x03\x71\xc8\x5e\x3c\xc4\xe5\xd1\x9e\x88\xa3\x42\xc7\x36\xe6\xc4\x93\x55\x72\x28\x87\xb0\xd0\xe3\x67\x24\x8d\x68\x0e\xe4\xd5\x9f\x0b\xcf\x32\x70\xdd\x92\xc1\x50\x44\x86\x38\x44\x0f\x0f\x59\x77\xf5\x67\x46\x42\x67\x7e\xf9\xc6\x15\xdb\xb9\xa9\x3f\x14\xae\xf6\x6c\xbf\x1c\x1c\x57\x1c\x32\xd0\x64\xd7\x2a\xb0\x8a\x2f\x49\x0e\x43\x11\x59\xe2\x90\x7d\x78\xc8\x95\xc8\x46\xbd\x50\x63\x55\x5b\x56\x64\xbd\x57\xc4\x3e\x21\x55\xeb\x6b\xe2\xcf\xfd\x5b\xae\x5f\x90\xaf\xf6\xf9\x76\xd9\x7b\x35\xf0\xc2\x72\xc4\x21\xfb\xf1\x10\x37\x01\x7e\xe3\x2d\xe9\x37\xe2\xf4\x14\x44\x97\xf7\x97\x5d\xe3\x95\xe4\x51\xab\x1f\xa9\x6d\x63\x65\x6e\x3d\x3d\x70\x5c\xfc\x13\xf0\xc2\xf2\xc4\x21\xfa\x8b\xd6\x66\x48\x2b\x2f\x65\xbc\x5a\x9a\x29\x57\x11\x50\x12\x1d\x52\xe4\xb0\x8f\xf9\xaa\xdd\xe7\x9a\x38\xfe\x6c\x93\xb1\xe2\x79\x4f\x1d\x7d\x0c\x45\x36\x12\x87\x1c\xc0\x43\x48\x9d\x7b\x99\x75\xbc\x8f\x4d\x77\x94\x3d\x0d\xe4\x96\xd4\x49\x67\xe2\x2c\x39\xe8\x3c\x7e\x61\xda\xae\x22\xed\x48\xc2\xb0\x27\x13\x86\x22\x9b\x88\x43\x0e\xe2\x21\xde\x2f\x52\x37\x2b\x06\x98\xb3\x5c\xfd\x50\xbd\x5d\xd3\x7b\xc5\xd1\xd6\x2b\x79\x81\xac\xe5\xb1\x69\x3e\x12\x3c\x97\x3f\x7a\x4e\xae\xc4\x50\x44\x81\x38\xe4\xd0\xa2\x79\x92\x03\xe5\x61\xd9\x5d\xea\xb9\x4c\x7b\x26\x54\xf6\x66\xfd\x7a\xac\xf5\x31\xab\xa2\x73\xff\xba\x8a\x37\xd5\x16\xca\x87\xef\xbc\x90\xc5\x50\x44\x91\x38\xc4\x00\x0f\x29\x7b\x57\x42\xd1\x35\x75\xf8\xfa\xd0\xf5\x02\x5f\xb9\x4f\xbb\xfa\x2f\x56\xcf\x25\x16\xb7\x43\xd8\xc4\xf7\xbc\x98\xba\xfc\x21\x43\x1e\x43\x91\xcd\xc4\x21\x86\x8b\x26\x85\x9b\x22\xb4\x96\x6e\xb3\xb7\xe5\xa2\x1f\xcc\x7b\x97\x47\x92\xdf\x50\x53\x95\xef\x19\xae\xfe\xd2\x3e\xb5\x4b\x2e\x77\x6b\xed\x09\x0c\x45\xb6\x10\x87\x1c\x5e\x14\x3c\xab\x86\x59\x4b\xcd\x6f\xf9\xe5\xd9\x9f\x59\x1f\x75\x3f\xb2\x5c\x43\x7b\x15\x5b\xc8\x56\xc9\x56\xce\x25\x65\x43\x1f\x0c\xc4\xc1\x78\xa2\x44\x1c\x62\x84\x87\x38\xee\xde\x71\xed\x11\xbf\x72\x87\x4a\x09\x47\x26\x52\xb0\x7f\xe6\xfe\x91\x38\x69\x8f\xbb\x3e\x43\x2c\x3f\xfc\x8f\x26\x70\xcb\x83\x68\x50\x99\x38\xc4\x18\x0f\x69\xf8\xa5\x3c\xb5\xaf\x41\xed\x9b\xa2\x66\xaa\x03\x83\xa3\x75\x1a\xbf\x62\x83\xf3\x0f\x47\x5b\xe1\xbd\x1b\xcb\x27\xc6\xaf\xc8\x83\x31\x7e\x2b\x71\x88\xc9\xa2\xcd\x23\x67\x55\x37\x5c\x5e\xe9\x6c\xb2\x3f\x42\x86\x2b\x40\x2c\x7a\x7f\x0b\x4f\xf9\x0a\xca\x9a\x8f\x45\xb2\x1c\xc7\x3e\x95\x29\xf0\x01\x07\xa9\x42\x1c\x72\x04\x0f\xf1\x11\x11\x5c\x3d\xe9\xf0\xd4\xd0\x2c\x3b\x34\x6d\xd6\xca\x6b\x78\x8f\xbb\x8a\x11\xf3\xf6\x82\x8e\x81\xf1\xec\x28\xaf\xf7\xdf\xc0\xa0\xb5\x8d\x38\xe4\x28\x1e\xf2\x34\x44\x56\x1a\xa9\xd6\xd3\x58\xa9\xf1\x6b\xe8\xc7\xfa\xd8\xa7\x4f\x86\xd8\x87\xd5\x2e\xd9\xa4\xed\x15\xeb\xb6\x17\xab\xfa\xce\x88\xa1\xc8\x76\xe2\x90\x63\x8b\xc4\xe5\x52\x5a\x7d\x81\x93\x59\x9b\x42\xdb\x68\x3f\x43\x2e\xf9\xd8\x12\x3f\x72\x24\xa1\x28\xff\x80\xc0\xd3\x4f\x23\xa4\x2c\x3b\x1b\x0c\x45\x54\x89\x43\x8e\x2f\x4a\x97\xb5\xaf\xc4\xb1\x5d\x4b\xba\x5b\x1e\x69\x28\x1c\x2b\xfd\xf4\x7a\x8a\x80\x6d\xb7\xae\xae\x81\x1a\x32\xaf\x6c\x6d\x15\x56\x2a\x80\xa1\x88\x1a\x71\xc8\x09\x3c\xc4\x32\xc8\xc1\xd5\x3b\xd6\x6a\x58\x92\x9f\xb5\xab\xe8\xc5\x39\xe9\xab\x17\xdf\x2c\x55\x1c\x51\x8f\xba\xe7\x3c\xb6\xb7\x60\x25\x93\x3d\x86\x22\x3b\xfe\xd7\x84\xe6\x6f\x9b\x0b\xff\x48\x68\x4c\xf1\xb5\x7a\xc4\xbe\xa2\x23\x90\xeb\xec\xa5\x67\x47\xb8\xce\x56\xa6\x9e\xe1\x7f\x3e\x23\x3d\xc3\x6a\xa6\xc9\xb6\x73\x2a\x7f\x63\x9a\x78\xc2\x2e\x0c\x45\xd4\x89\x37\xdd\x0c\x0f\xc9\xf4\x0c\x6f\x38\xb9\xb2\x36\x6a\xbe\x68\x78\x99\xc4\x25\xc3\xa8\x7b\x15\x14\x0d\xd1\xae\x2c\x19\xb6\x12\xa7\x33\xc9\xc6\x03\xc6\x18\x8a\x68\x10\x87\x98\x2f\x5a\x5f\x0d\x1a\xb7\x9b\x6a\x89\xb1\xcd\xdd\x5c\x5c\xc1\x97\x25\xc5\x32\x21\xfa\x2d\xac\xfe\xfe\xfb\xbc\xfc\x63\x35\x9e\x5b\x2b\x05\x41\xef\xa5\x10\x87\x9c\xc4\x43\x02\xb7\xef\xd9\xb4\xa4\xee\x92\xd9\xe3\x42\xbb\x59\xff\x30\x46\x95\xd0\xe1\x13\xf4\xc2\xd1\x23\xcd\xec\x7b\xba\x6b\x2c\x3c\x2d\x75\x30\x14\xd1\x24\x0e\xb1\xc0\x43\x06\x66\x0b\x75\x45\x96\xae\xc9\x90\x58\xb3\xbd\x2c\xc3\xf8\xd0\xf7\x1a\xde\xac\x77\xa2\x3b\x1a\xda\x55\x25\x42\x73\x32\x66\x44\x34\x30\x14\xa1\x12\x87\x58\x2e\xf2\xa8\x2f\x5e\xe8\xc6\x1a\x53\xb6\xb0\x1c\xd7\x63\xe5\x5e\x95\x11\x91\xec\x73\x81\xf7\xb6\x44\x31\x97\xdc\x6a\x0f\x1e\x05\x39\x05\xe0\xb6\xb5\x88\x43\xac\xf0\x10\x43\x93\xd6\x35\x4c\xef\x95\x74\x02\xd2\x5b\xe4\xc3\x98\xd6\xab\x9d\xe7\x31\x1e\xfb\xc6\xb3\xf9\xfb\xe4\xe8\x36\xd7\xe8\x24\x0d\x2e\x0c\x45\x76\x12\x87\x58\xe3\x21\xe2\x72\x53\xb5\xb6\x58\x63\xb2\x50\x72\xf0\x6a\x85\xea\x35\x4d\xe1\x5d\x5f\x4b\xae\xfe\x90\x29\x59\x7b\xdd\xea\xf4\xc9\x8d\x69\x24\x0c\x45\x76\x11\x87\x9c\x5a\x34\x0f\x75\xd5\x5a\x67\xa9\xde\x0b\x8d\xb8\xcf\x53\x06\x7d\x0e\x5b\x46\x8a\x5a\x0e\x55\x54\xbd\x31\x9d\xbe\xc7\xff\xc5\x5d\xcb\x4d\x16\x44\x83\xda\xc4\x21\xa7\xf1\x90\xbc\x54\xfa\xcb\xda\xd1\xa9\x2e\xfe\x27\xea\xdf\x7b\x6d\xf4\x32\x1a\x37\x23\xeb\xcf\xa9\x0a\xd8\x4a\xe7\xdf\xf7\x78\x98\x56\x8b\x62\x28\xb2\x9b\x38\xc4\x66\xd1\x7c\x6d\x63\xcc\xac\xbf\xdf\x1d\x01\xe9\xc7\xc2\x2d\x35\x46\x21\x6e\x9f\xe6\x2b\x85\xf2\x6a\xcf\x17\x32\x31\xb7\x71\x48\xbc\xdd\xa3\x84\xa1\x88\x0e\x71\x88\xed\xa2\x6d\x34\x6f\x73\x18\x94\x48\x93\x51\xc6\xb5\xa3\x23\xab\x44\x4d\xb6\x6e\x5f\x7f\x75\xca\xd3\xad\x93\xdb\xf8\xc5\x0f\xb3\xe1\xa0\x80\x8d\x18\x8a\xe8\x12\x87\xd8\xe1\x21\x6c\xbb\x5b\x6b\x7c\xc7\xd8\xf6\x9c\x0e\x3c\x62\x34\x1b\x7e\x73\x64\xb9\x5e\xa2\x72\xb3\xe1\xa3\xa9\x0d\xf2\x99\xdb\x78\xf7\x3e\x06\xf9\xdf\x1e\xe2\x10\x7b\x3c\xe4\xc9\x3d\xeb\xf2\x8e\x07\xd5\x0f\xcc\xd4\x90\x97\x89\x9e\xa1\xc5\x3c\xfc\x12\x4e\xfe\x21\xdf\xaf\x58\xcc\x15\xdb\x9a\xba\xb7\x80\xce\xb8\x97\x38\xc4\x61\xd1\x92\xc3\x03\x2d\x81\x76\xde\xb2\xf7\x47\xdf\xf1\x20\x51\x22\x54\x43\x2f\x7b\x8b\xad\x69\x56\x2d\xe6\x1c\xa6\x19\xd3\x19\x7b\xbc\xb6\x62\x28\xa2\x47\x1c\x72\x66\xd1\xaa\x59\x81\xe2\xc4\xbc\x4a\xe2\xda\x81\xc3\x3c\xf5\x86\xd2\x4f\x95\xb4\xc2\x6c\xd7\x6f\xdb\xa6\x7d\x24\xf8\xe4\xa9\x42\xbb\x1d\xc1\x67\x31\x14\xd9\x47\x1c\xe2\x88\x87\x24\xeb\x4b\xbb\x1b\x6e\xf7\xdc\x94\xd7\xe9\x6f\x50\x90\xf4\xbe\x2c\xe7\x71\x87\xd1\xe4\x36\xf9\x8e\xf7\xd8\xc1\xae\xad\xb6\x23\x7a\x18\x8a\xec\x27\x0e\x39\x8b\x87\xc4\x1c\xe4\x6e\x75\x5b\x69\x32\xbe\x57\x39\x5e\xb6\x76\xf3\xd0\x46\x56\x4b\xe7\x9d\x4e\xe6\xef\x5b\x12\x6b\xdd\x66\x0a\xc4\x13\xd7\x61\x28\xa2\x4f\x1c\xe2\xb4\x68\xaa\xef\xe1\x8c\x6d\xf7\x88\xc9\x7a\x34\x7e\xe5\xd3\x7d\xea\x2e\xb5\x2d\x9f\x28\xfb\x04\x7a\xde\x87\x3f\x9c\xe2\x0b\x1a\x8a\xf6\x53\xc1\x50\xe4\x00\x71\xc8\x39\x3c\x64\xf3\x52\x39\xd5\x43\x2e\xd4\xaf\xce\xb9\xa5\xfa\xb3\x4a\x1b\x42\x4e\x54\xf7\xd8\x9c\xea\x68\x50\xf6\x79\xd2\xca\xd8\x73\xf3\x18\xe8\x8c\x07\x89\x43\xce\x2f\xda\xbb\xda\xe5\x37\xe4\x6a\xd5\x6d\xff\xe5\xf2\x19\xd3\x7c\x7b\x39\xd9\x51\xcd\xc7\xaf\xcf\x85\xbb\x2c\x5b\xb6\xab\xc4\xfa\x88\x2c\x8f\x13\x86\x22\x87\x88\x43\x9c\x17\xad\x35\xad\x7e\x14\x75\xee\x03\xb5\xe3\xf9\xbd\xb6\xae\x28\x76\xc5\x81\xfd\xcb\xea\xa3\xf8\x6b\x4d\x36\xac\x1e\xd8\x5c\x71\x36\xcd\xe3\x0c\x86\x22\x06\xc4\x21\x17\xf0\x90\x4e\x36\x85\xa7\x92\x2a\xe7\x10\x89\xfa\x0d\x67\x13\xfa\xd6\xbe\x10\xe6\x1f\x3b\xc4\x34\xf6\x56\xc2\x8a\x69\x73\xf6\x8a\x17\x7c\xa6\x18\x8a\x18\x12\x87\x5c\xc4\x43\xea\xb8\x0f\x7d\x77\x15\xd9\x1d\x27\x13\x9b\x2a\xb1\x2d\xe2\xb2\xa7\x56\xeb\xf7\x92\xfa\x7b\xae\xd1\x87\x95\x5b\x75\x4e\x0b\xce\x2a\x63\x28\x72\x98\x38\xc4\x05\x0f\x51\x1d\xa0\x0e\x6e\x3c\x2d\xe3\x75\x2f\xfc\xa8\xb6\xcd\xaf\x55\x02\x81\x5f\xbd\xd7\xf6\x45\x39\x48\x2a\x2a\x7f\xdc\x1f\xda\x50\x23\x89\xa1\x88\x11\x71\xc8\x25\x3c\x84\x39\xbc\xc9\x2a\x5e\xe5\xa2\x81\x5b\x4b\xf2\x81\x73\xf6\xcb\x90\xdc\x2a\x26\x5b\x8f\xed\xfc\x9b\x3f\x6b\xf2\x0e\xdb\x48\x5c\xb3\xc4\x50\xc4\x98\x38\xe4\x32\x1e\x52\x29\xbf\x21\xf3\xd2\x54\x8a\xe3\xc8\xcd\x44\xf6\xfa\x13\x3d\x83\x97\x12\x9c\xbb\xcb\xcd\xdb\x76\x7c\x9c\xed\x98\x4e\xdd\xe0\xcb\x8d\xa1\x88\x09\x71\xc8\x15\x3c\x84\x97\xb9\x3c\x87\xc6\x2e\xea\x67\xd7\xd2\xf8\xa6\xa4\x45\x8f\x03\xbd\xbf\x25\x5e\xb2\xa7\x72\xb3\xbc\xde\x0e\x36\xcc\xed\x8e\x1d\x86\x22\x47\x88\x43\xae\xe2\x21\xd5\x5d\x1e\xce\x01\xf1\x8d\x31\xd3\xca\xb1\x65\x19\xc6\xef\x3e\x36\xd5\xbf\x58\xd1\x18\x37\x59\xf1\x43\xd1\xb1\x72\x83\xd3\x3e\x60\xc2\x47\x89\x43\x5c\x17\x25\xfe\xde\x5b\xc3\xcb\x3a\xe3\x3a\x6f\x55\xdd\x36\xfb\x62\x14\xbc\x3c\x16\xab\x88\x9d\x53\xb3\xf1\x92\xf5\x4d\x77\xe2\x6b\x4a\x53\xc7\x50\xe4\x18\x71\xc8\x35\x3c\x64\xde\x44\xb3\x26\x68\xff\xc7\x49\xff\x9d\x34\xfe\x35\xfa\x81\xf3\x2a\x61\x16\x73\xc5\x3c\xfb\x73\xc5\x2a\x0a\x3e\xed\xeb\x51\xd6\xc4\x50\xe4\x38\x71\xc8\x75\x3c\x44\xf9\x8b\x5f\x63\xd1\x24\x75\xb5\x6a\x8d\x1d\xcd\x6c\xc6\xf0\x8e\xd9\xea\xb8\xf1\xaa\xda\x63\xb1\xc5\xb5\x85\x63\xfa\x92\xf5\x08\x86\x22\x27\xfe\xd7\x84\xe6\x6f\x3f\x81\xfa\x23\xa1\x71\xc3\xd7\x6a\xed\xfa\xe4\x77\x65\xc7\x56\xd6\x6c\xe5\xdd\x3b\x57\x9c\x33\xfc\x4b\x56\x38\x60\xe9\xde\xda\x03\x7e\x66\xdc\x15\x6c\x65\x3d\x0f\xcd\x31\x14\x31\x25\xde\x74\x0c\x0f\x59\x6a\x10\x3c\x27\xfa\x5d\xd5\x75\x73\xf1\xa1\x7b\xd3\x6d\x2a\x7d\x5b\xa4\x7f\x30\xa8\xbd\x1a\xb3\xe3\xe6\x6b\x49\x12\xe5\xa4\x19\x62\x28\x62\x46\x1c\x42\xc3\x43\x26\x7f\xc4\xf2\xe5\xec\x5e\x57\xb5\xfd\xb3\xd4\xb7\xf3\x5d\xe2\x5d\xcb\x9f\x67\xa4\x0f\x39\x7d\x10\xdf\x39\x38\xb4\x2e\xea\xe1\xfe\x4d\x18\x8a\x98\x13\x87\xb8\x2f\x72\xdb\xfe\x3f\xee\xe8\x86\x73\xbc\x9d\x3b\xf5\xee\xc6\xea\x68\x4a\x63\x6a\x5f\x81\xbe\xbe\x0e\x4f\xed\x98\x90\x63\xf0\xda\x86\x2b\xfa\x18\x8a\x9c\x24\x0e\xf1\x58\x24\xae\xf3\x5e\x3b\xf9\x36\xf9\xf7\x4e\x0f\xc8\x4f\x3d\x42\x8f\x0c\xb1\xbf\x5a\x37\xb9\x3c\x3f\x8b\x4f\x6a\xf6\x68\xfd\xc3\xca\x68\x90\xc4\x5b\x10\x87\xdc\xc0\x43\xde\x04\x5e\xaf\xeb\xf5\xcd\xd0\x9a\x95\x52\x4f\x6a\x18\xcb\xf7\xb9\xa6\x33\x53\x3c\x7f\x69\x76\xf7\x8d\x51\x6a\xcc\x1a\xf6\x32\x07\x0c\x45\x2c\x89\x43\x3c\xf1\x10\xdf\xf0\x5c\xe6\x94\x1e\xb5\xa0\xd1\x3d\x3d\x67\x1b\xfa\x7a\x5e\xca\x4c\xfb\x89\x29\x6f\xb6\x13\x4a\x0b\xda\xb3\x8c\x9b\x59\x14\x04\x6a\x56\xc4\x21\x37\xf1\x10\xfd\xd5\x75\x9b\xdc\x26\x3f\x4d\xcd\x9e\xbc\xb6\xa7\x39\xf5\x48\xe8\x79\xb1\xde\x84\xbc\xfe\x03\x93\x6a\x4d\xed\xa7\xc7\x33\x32\xd6\x62\x28\x62\x4d\x1c\xe2\x85\x87\x9c\x19\x2d\x70\x77\xbd\xbc\xa1\x5c\x56\xf9\x1e\xea\x2c\x94\x94\x44\x63\x28\xe8\x93\x30\xf7\x8a\xa4\xed\xec\x1f\x1b\xe9\x9c\xd8\x8b\xa1\xc8\x29\xe2\x10\x6f\x3c\x44\xb0\x4a\xac\xb5\xfd\x93\xd6\xc3\x99\xee\xb1\x2a\x2e\xda\x89\x9b\xbd\x3f\x63\x42\x0b\xf7\x36\x0b\x87\x6c\xfc\xb6\x2e\x34\xd5\x77\x05\x86\x22\xa7\x89\x43\x7c\x16\x2d\x39\xac\xb7\x7e\x73\x45\x21\xc9\xa7\xea\x98\x5e\x8c\xb3\xda\x34\x69\x05\xf7\xdb\x27\xfd\x6b\x25\xd0\xf4\xe4\x8b\xab\x06\x4a\xaf\xca\x63\x28\x62\x43\x1c\xe2\x8b\x87\x4c\x0d\x98\x9d\xcd\x7d\xa7\xca\x76\xa3\x97\xb3\x5c\x2e\xc6\x95\xe3\xb5\xcb\x43\x03\x71\xbf\x08\x31\xdd\xed\xfd\xbe\x91\x6b\x1d\x8d\x31\x14\xb1\x25\x0e\xb9\x85\x87\x28\x26\x9a\x6c\x09\x9d\xdc\x62\xaf\x2d\xa6\xb9\x29\xc0\xed\xa8\xb6\xde\xea\xbe\xd5\x75\x81\x7d\xca\x36\x4f\xdb\x4c\x3d\xbb\x53\xc0\xd8\x60\x47\x1c\x72\x1b\x0f\xb9\x69\xce\xda\xbb\x8a\xef\xc8\xa0\x6b\x14\x3d\x82\xc7\x44\xe4\xd5\xd2\x16\xbf\x8b\x4e\x36\x3f\xf7\x71\x2b\x9d\x29\xdf\x76\x44\x6d\x35\x86\x22\xf6\xc4\x21\x77\xf0\x90\xae\x13\x4f\x5a\x4f\x3d\x2d\x78\xf2\x43\x7e\xa7\x77\x75\x2a\xd9\x65\xf4\xf6\xa6\xcb\x6c\xd5\x1b\x1f\x3b\x7f\xb1\x94\x79\x32\x7d\x74\x15\x86\x22\x0e\xc4\x21\x7e\x78\xc8\xfa\xa3\xa1\xc6\x34\xae\x99\x34\xa1\x9b\xae\xa3\x05\xa5\x58\xdd\xa6\xef\x2f\x07\x3d\x47\x6c\xae\xcc\x71\x63\xfa\x7e\xba\x47\x04\x30\x14\x39\x43\x1c\xe2\xbf\x28\x78\x36\xd7\x44\x6b\x46\x7c\x85\xa3\x2a\xe5\xce\x07\x9c\x26\xa1\x36\x17\x23\xdc\x05\xf5\x2f\xf3\x39\xe7\x5c\xd1\xde\x71\xfc\x91\x23\x86\x22\x8e\xc4\x21\x01\x78\xc8\xac\x9a\xbd\xdd\xfd\x5c\xcf\xde\xfa\x8a\x3d\xc2\xeb\xa2\xd8\x1a\x55\x36\xf1\x31\x46\xf0\xb0\x2f\xf7\xf7\xd3\x39\xc6\xbe\x79\x17\x17\x86\x22\x67\x89\x43\x02\xf1\x90\x17\xd9\xf9\xe7\x0f\x73\x71\x3b\x7d\xbd\x2b\x19\x24\xb3\xfc\xa4\x59\xd7\xc4\xad\xb0\x83\x61\xab\x86\x6e\xdc\x7c\x27\x9d\xba\x6a\x6e\x37\x86\x22\x4e\xc4\x21\x41\x78\x48\xf4\xee\x73\xef\x6b\x0b\x32\xf8\x2e\x66\x55\xbb\x38\xac\x17\x0e\x43\x99\x85\xee\x84\xcd\x7e\x31\x35\x7b\x15\xa4\x43\xda\xdc\xbe\x0f\x43\x91\x73\xc4\x21\xc1\x78\x48\x78\x5c\x5e\xe5\x5c\x7a\x01\x65\xc7\xd6\x4f\x92\xe7\xbf\x7b\xa2\xb6\x06\x46\xfd\xef\x5f\x30\x4c\x57\xff\x6a\x73\xb7\xad\x59\xb1\x19\x43\x91\xf3\xc4\x21\x77\xf1\x10\xa5\x97\xd7\x26\x9e\x53\x62\xcd\x75\xeb\x7b\x45\x38\x2b\xe8\xb6\x91\x1c\x67\x3f\x5d\x5a\x37\x7d\xf7\x6b\x0c\x7d\xfb\x05\xd6\x1b\xda\x18\x8a\x38\x13\x87\x84\xe0\x21\xcd\x67\x2e\x0e\xae\x2a\x2f\x7a\x20\xb9\xff\xd5\xf3\x2d\xaf\xd2\xdf\x48\x65\x5e\xf8\x4a\xfb\x79\x63\x88\xd5\x86\x91\x43\x3b\x42\x0d\xa4\xcb\x17\x88\x43\x42\x17\x4d\x2b\x5d\xf0\xc8\xef\x49\x2d\x12\xd1\x8e\xce\x4d\xf1\x75\x12\x97\x63\x50\xd2\x3b\xf0\xbe\xa9\xc1\xd6\xea\x54\xc0\x90\x66\xd0\x7e\x1d\x0c\x45\x2e\x12\x87\x84\xe1\x21\x7e\xd5\x7d\x32\xbb\xc5\x84\x67\x99\xf2\xbc\x9f\x25\x2d\x1f\x2f\xb0\x63\x97\xd5\x0b\x13\x54\x76\x18\x55\xcc\x32\x2f\x29\xac\x07\xbe\xcb\x85\x38\xe4\x1e\x1e\xc2\x30\x1d\x64\xe4\xba\x75\xf8\x80\xfa\xde\x07\x7b\x4d\x74\xeb\x8f\xaa\x5e\xa9\xf7\x15\xbb\xec\x44\xf3\x54\x36\x1e\x1f\xdc\x5b\xa2\x80\xa1\xc8\x25\xe2\x90\xf0\x45\x81\x84\xc1\x65\xde\x41\x55\x97\xa2\x27\x07\xa9\xbb\x0f\x3d\x4a\x30\xbb\xf9\x49\x42\x3a\x98\xbb\xa7\x84\xe3\x8d\x39\x35\x21\xe5\xb3\x1a\x86\x22\x97\x89\x43\x22\xf0\x10\x07\xa5\x7b\x73\x29\xa4\x53\xe7\xb8\x3c\xcf\x51\x78\x07\xbd\xf2\xa3\xf7\xf0\x3b\x6b\x2a\x9f\xa8\x4f\x74\xbb\xe6\x39\xc8\x14\x03\x74\x72\x85\x38\x24\x72\xd1\x8f\x16\xf2\x28\x97\x13\xb6\x1a\xc9\xdc\x3b\x98\xc6\x1c\x73\xc4\x4d\x76\x8d\xce\xb7\xe6\x38\xff\xd7\xf2\xc1\x22\x57\x6c\xf2\xda\x0b\x80\x5b\xb9\x4a\x1c\x12\x85\x87\x64\x0f\xe9\xd2\xcb\xcb\xc7\xb5\xb3\xaf\xf9\x8d\xee\x98\xad\xd2\xca\x7d\x94\xf9\xeb\x49\xbd\xc0\xc3\xa4\xa2\x86\x9a\xf8\xd7\xad\x9c\x18\x8a\xb8\x12\x87\x44\xe3\x21\x0f\x42\x54\xc9\x41\x92\x3c\x2d\x1f\xf9\xca\x3e\x5c\x44\xfb\xa2\xe8\xd7\xc6\xe7\x47\xcc\xae\x08\x86\x1d\x3d\xf6\x62\x72\x38\xd2\x0c\x43\x91\x6b\xc4\x21\x31\x78\xc8\xbd\xd8\xd4\xae\x15\xb7\x2f\x7a\x53\x43\x2a\x35\xe4\x8e\x17\xbb\xc4\x16\xea\xe8\xba\x37\x35\xc4\x0c\xb2\x5a\x1d\x0f\xf5\x7e\x09\x46\xc6\xeb\xff\x6b\x42\xf3\xb7\xff\xa8\xe1\x8f\x84\x26\x76\xd1\x96\x3e\x53\x9f\x1d\x81\x0f\x6a\x97\x7d\x0e\x28\xbb\x5e\xb1\xcd\x91\x3b\xb2\x28\x69\x97\xae\xba\xae\x9d\xb3\x32\xf7\x79\xee\xdc\x2f\x16\x18\x8a\xb8\x11\x6f\x7a\x1c\x1e\xb2\xe7\x3d\xfd\xdc\xe7\x4a\xae\xf8\xd4\x94\xd0\x3d\x03\x35\x07\x86\x6d\x9a\xcf\x9e\x74\xd9\xba\xd5\xe3\xf9\x97\x7c\xfd\x5b\xd7\xd7\x2f\xc7\x50\x04\x23\x0e\xb9\xbf\xc8\xd9\x1d\xe9\xd5\x50\x9c\xa1\x1c\x5d\x27\xa2\x70\xc8\x5e\xe2\xf0\xb5\xcd\xee\xf3\xf7\xb2\x4c\x05\x8d\x9f\x1b\xed\xe3\xcf\xe6\x5f\x7f\x1a\x43\x11\x1a\x71\x48\xfc\xa2\xc5\x93\x34\xb1\xb3\x71\x1e\xbf\x48\x65\x79\x27\xd1\xaf\x89\x5a\x46\x8a\xe1\x4b\xb6\x79\x3e\x7b\xf2\xe6\x1d\x9b\x4f\xe1\x4f\x45\xff\xa5\x18\x8a\xb8\x13\x87\x24\xe0\x21\x62\xa2\x02\xae\x1f\xe4\x37\xb1\x29\xa5\xbb\x99\xb7\x08\x38\x9e\x35\x7a\xf8\xea\x2c\xef\x87\xf7\x7d\x17\x82\x4f\xd7\x4e\x05\xbb\x2d\xc3\x50\xc4\x83\x38\xe4\xc1\xa2\xc9\xae\x67\xbe\xdf\x7f\xce\x65\x7a\x65\x46\xd8\x73\xd2\x55\x87\x26\x8b\x1e\x5d\xd8\x78\x76\xff\x81\x15\x8a\xbc\xa4\x4d\xce\x37\x26\x40\xf0\x7c\x83\x38\xe4\x21\x1e\xf2\xce\x30\x33\xa7\x42\xe9\x40\xe1\xd2\xc7\x33\x6b\x43\xe8\x5c\x96\x8a\xb9\x1c\x15\xd5\x2a\xed\x4e\x33\x9b\x9b\x0f\x7f\x7c\x30\xc5\x8f\xa1\x88\x27\x71\x48\x22\x1e\xa2\x79\xf7\xfe\x2b\x01\x9b\xfc\x4d\x9b\x0f\x1e\x7e\x59\x36\xb0\xc1\xeb\xda\xaf\x7b\xc2\xcf\x73\x45\x45\xaa\xba\xbe\x2d\x3f\x68\x7f\x1e\x64\xb2\x37\x89\x43\x1e\x2d\x8a\x3c\xca\xa6\xdd\xde\xda\xde\x55\x18\xd9\xf3\x85\x7e\x62\x5d\x05\xca\x79\x72\x92\xb9\x69\x4b\x7a\xf0\xb5\xb7\x39\x6d\x2c\xaa\x1b\x4f\x61\x28\xe2\x45\x1c\xf2\x78\x51\xc8\x19\xa6\xf0\xe6\xa7\x6f\xec\x92\x0f\x56\x46\xe7\x58\xdd\xb1\x5e\x2f\x3e\x81\xba\x50\x51\xba\xbf\xcb\x37\x9b\x04\x85\x0b\x2d\x76\x18\x8a\x78\x13\x87\x24\x2d\x32\xe1\xf4\xe1\x82\xa1\x27\x59\x21\x5d\x77\xc4\x94\xf2\x39\xd2\xf5\xb0\xa9\xef\x4d\x1f\x95\xdb\xdb\x95\x6e\x0a\x3d\x19\x58\x5f\x0a\x82\x67\x1f\xe2\x90\xe4\x45\x8a\xd7\xea\x1a\x13\x3b\xe9\xb5\x4d\xc1\x5c\x66\xba\x47\x3d\xfb\x5c\x11\xb3\xd9\xed\x8e\x95\x01\xcf\xb8\xb2\x19\xe5\xd3\xe8\x37\x45\x30\x14\xf1\x25\x0e\x79\x82\x87\xac\x5c\xd1\xf6\xb6\xe3\x78\xf1\xe6\x1c\xab\xeb\xb9\x31\xce\xce\xb9\xe5\xd7\x55\xb8\x39\xd9\x66\x4e\x26\xcb\x89\xf6\xf7\x9e\xec\x02\xe9\xf2\x2d\xe2\x90\x94\x45\x1b\x1a\x1d\x3a\x5b\x56\xf1\xbc\xd4\x17\x21\x67\xc9\xf2\x25\x3a\xd2\xee\x9e\x0b\x1d\x2d\x3d\xa8\xb2\x34\xea\x0a\xfb\x35\xf9\x6a\xc6\xe3\x18\x8a\xdc\x26\x0e\x79\x8a\x87\x88\x18\x4e\x4a\x8e\xb8\xc9\xf6\xec\x14\x50\x47\x7d\x35\xf2\x6f\x75\x6d\x78\x97\xed\xaa\x43\x69\x6e\x8a\x54\x58\x3e\xf1\x28\x05\xe4\x7f\x77\x88\x43\x52\x17\xcd\x2e\x7c\x6d\xd7\xa4\xac\x3b\xf0\xc8\x3c\xd0\x31\xf7\x98\xf7\xfe\x20\x81\x0d\x64\x2e\x16\x01\xb3\x58\xef\x07\xfa\xd3\x9c\x2d\xa2\x60\xbc\xf6\x23\x0e\x49\xc3\x43\x66\xba\x3d\xee\x73\x09\x3b\xfb\x84\x6e\xaf\x79\xc8\x37\xf2\x2d\x37\x56\xc1\x26\x2c\x61\x9b\xc3\xf5\xb9\x83\x75\xf7\x33\x1a\x67\x0e\x61\x28\xe2\x4f\x1c\x92\x8e\x87\xdc\xe0\xbd\xa5\x2d\x92\xdc\x2c\xc1\x75\xf7\xd8\xba\x92\x87\xc6\xfb\xc8\x24\xbe\x5a\xa3\xc8\x3e\xc9\xd0\x75\x7b\x4e\xf1\x9b\x5a\x48\x60\x28\x12\x40\x1c\x92\xb1\x28\xa1\xd1\xba\x7f\xb7\x32\xb3\x5b\x07\x91\x39\xc5\x33\xbf\xfe\x6b\xfc\x49\x44\x52\xe6\xc5\x63\x6c\x8b\xe4\x78\x2a\xb9\x22\x24\x53\x0e\x43\x91\x40\xe2\x90\xcc\x45\xbf\xd7\x78\x3c\xb8\xb7\x49\x43\xe5\xb9\xde\xf6\x03\xef\xce\x70\x2e\x8f\x37\x64\xb1\x5e\x6b\xfd\xe9\x74\xab\x5c\xa6\xa5\xf2\x3b\xcf\x67\x3b\x30\x14\x09\x22\x0e\xc9\xc2\x43\x56\x8c\x8b\x46\x5b\xda\xc5\x6d\x98\x3c\x97\xc9\x74\xb2\x57\x55\xa6\xa3\x3d\xc1\x6f\x70\x9d\xa9\x5e\xc4\x8d\xee\xe4\x97\xa3\x59\x20\xbc\x09\x26\x0e\xc9\xc6\x43\x84\xd7\x14\x58\x85\x7e\x3a\xda\x96\xf3\x14\x51\xf1\x96\x90\xd5\xf2\x1e\x56\x64\xea\x3f\x36\x79\xd2\xf7\xa0\x09\xe2\x39\x52\x4a\xc2\x50\xe4\x2e\x71\xc8\x33\x3c\x84\x45\x90\xe7\x4b\xf1\xb2\x04\xab\x14\x45\xf4\xde\xd4\x92\xa1\x11\x59\x15\x01\xe6\x1f\x8d\x7c\x6b\xe5\x1e\x65\xfd\x8c\x08\x53\x33\xc4\x50\x24\x84\x38\x24\x07\x0f\x19\xed\xbf\xc3\x27\xe6\x5f\x5e\xcb\x93\x2b\xa5\x2e\x3b\x49\xea\x14\xcb\x30\xf9\x15\xb9\xc6\x4e\x65\xfa\xd2\xca\x2f\x89\xe7\xb9\x00\x24\x94\x38\x24\x17\x0f\xd1\xbd\x14\x59\x7f\x92\xdd\xc1\x38\xe4\xc0\x6d\x3f\x76\xe5\x0b\xa2\x0d\x7d\xaf\x1a\x0a\xc6\x19\x5f\x74\x35\xc6\xce\x3b\x59\x76\x4a\x61\x28\x12\x46\x1c\xf2\x1c\x0f\x91\x1b\x6f\xb0\xfe\xc0\x96\xb9\xe3\x08\xff\x83\x8c\x0f\x6b\x76\x46\x67\x48\x7d\x60\x44\x27\x8e\xf2\x6e\x9b\x1f\xac\x67\xcc\x7e\x2b\x8e\xa1\xc8\x3d\xe2\x90\x3c\x3c\x64\x8c\xc6\xba\x49\x85\x76\xd7\xe5\x71\x94\x2e\xf7\xbb\xd4\xda\x4f\x1f\x2c\x42\x25\x79\x37\x3c\xef\x3b\x97\x6c\xb5\xf7\xe3\x9e\x83\xc0\x0b\x87\x13\x87\xe4\x2f\x8a\x20\x87\xc7\x8e\x7b\x4d\x4c\xcb\x73\x90\x5d\xe3\x2f\x8d\xd7\xf4\xa8\xfa\x1c\x5c\xdf\xd6\x2c\xa0\x8b\xee\x53\xba\xf5\x3c\xc0\xc7\x16\x43\x91\x08\xe2\x90\x17\x8b\x7c\x17\xef\xab\x92\xeb\x03\xeb\x69\xd9\xe9\xe7\xbe\x58\xac\x4b\x51\x59\xf9\x71\x4f\xc9\x44\xe3\xba\x07\x8a\x32\xc7\xfb\xc4\xd7\xff\xd0\xc5\x50\x24\x92\x38\xa4\x60\xd1\x06\x89\x98\xf1\x6e\x47\x6f\x7e\x07\xa4\x6f\x83\x57\x15\xcf\x15\xa6\x9a\x7c\x56\x06\xcd\xcf\x52\x17\x42\xfa\x43\xe4\x69\x4c\xdb\x40\x26\x1b\x45\x1c\x52\x88\x87\x94\x34\x8c\x3e\x48\xe5\x10\x19\xe2\xa9\xf4\xb0\x88\x14\x3f\xa4\x96\xb4\x46\x21\xe2\xba\xd4\xf5\x4b\x1d\x41\x2e\xba\x1b\xc8\x95\x5a\x18\x8a\x44\x13\x87\x14\xe1\x21\x29\x4b\x6c\xa9\x59\xe9\xa3\x9d\x4b\xb7\xfd\x50\xef\xac\xd6\xe5\x5d\xeb\x74\xbc\x4f\xc3\xda\x6a\x48\xd7\xaa\x7f\x89\xf4\x46\x66\x45\x0c\x45\x62\xfe\xd7\x84\xe6\x6f\xff\x9d\xdc\x1f\x09\x4d\x31\xbe\x56\xcf\x10\xba\xfa\x83\x5b\x83\xca\x63\xa8\xb1\xbb\x82\xfe\x8d\x90\xa0\xd1\xe3\x4f\x56\x45\x99\xfd\x14\x32\x3e\x9d\x82\xe8\x47\x03\x9b\x8f\x25\xde\xf4\x12\x3c\xe4\x74\xd3\x23\xe1\xe9\xf7\x5f\x92\xbf\x9c\xcc\x62\x44\xf2\x23\xd7\x84\x19\x85\x8a\x09\x37\x1f\x20\x87\xd4\xd9\x5c\x4e\xb3\x3a\xa7\x8d\xa1\x48\x1c\x71\xc8\x4b\x3c\x24\xec\xdd\x97\xef\x34\xe7\x02\xfd\x94\x6a\x59\xea\x80\xb8\x7a\xfe\xed\x7e\xda\xe6\x63\xeb\xbf\xb9\x0b\x91\x9f\x97\xff\xbc\xbe\x7c\x2f\x86\x22\xf7\x89\x43\x4a\xf1\x10\xa1\x57\x26\xe1\xdc\x5d\xe8\x32\xef\xaf\xa6\x82\x92\x67\xaa\x02\xc4\xdc\xd9\xbe\x87\x5c\x38\x58\x79\x62\xcb\x84\xde\xd9\x35\x0e\x28\x86\x22\xf1\xc4\x21\x65\x78\xc8\x55\xe7\xfa\x7a\xb1\x21\x83\x24\xcd\x44\xe1\xef\x11\x5d\xe3\xee\xbc\xb7\xcf\x6e\xd4\x3a\x93\xa0\x87\x3c\x5a\x6d\xda\x1c\x9b\xc3\x81\xa1\x48\x02\x71\xc8\x2b\x3c\x24\x5e\x7a\x63\x62\xd6\x93\xaa\x47\x76\x87\xfd\x3c\xd6\x39\xee\x78\x7c\x82\xed\x7d\xc7\x9a\xed\xb9\x9f\x96\xd0\x87\x62\xf6\x98\x2a\xda\x60\x28\xf2\x80\x38\xa4\x1c\x0f\x69\xbf\x5e\xc4\x21\x7b\xda\x5c\x29\xcb\xad\x75\x2e\x81\xdd\xe3\xd0\x48\x16\x9b\x7c\xb7\x30\x87\xf7\xd2\x8a\x94\xc1\xc9\x7b\x07\x41\x1a\xf0\x90\x38\xa4\x02\x0f\x61\x65\xe4\x4c\xdc\xfc\x63\x6b\x56\xc7\xb7\x56\xb2\xe7\x6a\x15\xef\x4c\xc6\x15\xe8\xbe\x6d\x23\x3b\xb4\x5d\xb7\x9c\x8c\x39\x6e\xcc\x87\xa1\x48\x22\x71\xc8\x6b\x3c\xa4\x8d\x6f\x36\x91\x2b\x74\x6d\xf3\xf3\xe4\x25\x0f\xca\x78\xad\x0c\x6e\xca\xee\x21\xfb\xfe\xd4\x6f\xd8\xd5\x75\x66\x6c\x1c\xe5\x01\x49\xe6\x23\xe2\x90\x4a\x3c\x64\x6b\x71\xbb\x49\xcf\xb2\x67\x7b\xdf\x5a\x5c\x36\xbf\x7d\xa6\x73\xff\xd9\x94\x93\x2f\x72\x3b\x3e\x9f\x3a\x7c\xd5\x29\xe8\xd5\x66\x21\x90\xff\x3d\x26\x0e\x79\x83\x87\x48\x2d\x61\xd9\xa6\xf2\x70\x97\xec\x66\x95\x47\xe5\x9e\x3b\xe2\xce\x08\xe5\xb1\x04\x94\x5f\xcd\x56\x33\x3b\x49\x59\xd7\x77\xa6\x0d\x64\xb2\x49\xc4\x21\x6f\x17\x4d\x40\x2a\x99\x85\x70\x5d\xd1\x9a\x1d\xb3\xab\x38\x48\xbf\xc8\xf2\x29\xf2\xce\x15\xc1\x3e\x99\xd3\x4c\xc1\xac\x83\xed\x3f\x9e\x3f\x01\x09\x4d\x32\x71\x48\x15\x1e\x22\x31\xd2\x13\xde\x2c\x75\x77\x3c\x85\x51\xfd\xc0\x09\xcc\x6d\x5d\x58\xef\x00\xdb\xd6\x1f\x3c\x52\x4f\x1e\xf6\xc8\xb3\x1d\xd9\x73\x06\x43\x91\x27\xc4\x21\xd5\x8b\x56\xcd\x9e\xd4\xbd\xc9\xbd\xdd\x72\x96\xe1\xd6\xe1\x6b\x9e\xf6\xb9\xf7\x2f\x32\x2d\xbb\xba\x3b\x3e\xaf\x28\x4e\xd5\xed\x88\xba\x9d\xb8\x0c\x86\x22\x29\xc4\x21\x35\x78\x08\xdf\x54\xe3\xd7\x1c\xe6\x73\x47\xbf\xad\xb0\x55\x1c\xf0\xf7\xe6\x99\x53\x45\x92\xf7\x2e\x2d\x48\x65\x19\xb3\xd7\xbb\x2d\xae\x72\x1a\x43\x91\xa7\xc4\x21\xb5\x78\x48\xec\xce\x6b\x19\x0c\x51\x62\xef\xc4\x33\xaf\x5d\x53\x7a\x3b\x6e\xb8\x6b\x48\x2f\x86\x3b\x30\x6d\x06\xf9\x78\x48\xd4\x7c\x4f\xa8\x34\x86\x22\xa9\xc4\x21\x75\x8b\xb2\x26\x97\xf2\x2d\xab\x74\xb8\x6f\x7a\xbe\x8a\x8b\x97\x1f\x54\xdd\xab\x6f\x6a\xe8\x1d\x2e\xe9\x27\xc2\x53\x25\x5a\xbe\xc3\x76\x68\x27\x86\x22\x69\xc4\x21\xef\xf0\x10\xed\x81\x54\x49\x03\x8c\xd9\x6a\x92\x5b\x8a\x9c\xaa\x17\xb0\x2c\xa4\x33\xc5\xde\xe5\xe5\x87\x96\x17\xcc\x4f\x78\x7a\xf4\xb4\x80\xe2\xd3\x89\x43\xea\x17\x45\x1e\x5f\x3e\x97\x0e\x1c\x35\xe8\x76\x3c\xdb\xf9\xb2\x04\x91\x18\x1f\x13\xad\x3d\x24\xc0\xa9\xb7\xac\xbb\x34\x2a\x79\xe9\xf5\x31\x47\x0c\x45\x32\x88\x43\x1a\x16\x2d\x97\xee\x1d\x3e\xdc\x55\xc7\x77\x30\xe0\x9e\xb7\xc4\x77\x77\xa1\x6f\xed\x4e\x07\x6f\xd8\x8c\xf5\x19\x4c\xc8\x2f\x6b\x10\x49\x57\xdd\x83\xa1\x48\x26\x71\x48\xe3\xa2\xac\xc9\xf7\x92\xcc\x83\x68\xdb\x40\x3e\xeb\xd5\x54\xfd\xd1\xeb\x1d\xd2\xdb\xec\xea\xf8\x97\xa5\x9d\x32\xd9\x2d\x98\xfe\xa3\x6e\x9f\x3d\x86\x22\x59\xc4\x21\x4d\x8b\x7e\x1b\x30\xfd\x52\x7d\xc5\xda\xbc\xd5\xce\xef\x62\x12\x06\xb7\xcf\x5e\x16\xbe\x27\xea\x79\xbd\xa5\x85\x77\x47\x8a\x65\xd2\x72\x67\x39\x36\x0c\x45\xb2\x89\x43\x9a\xf1\x90\x69\xb3\x43\x6b\xf8\x82\xb4\x57\x9c\x3a\xfe\xf8\x83\xf8\x9b\x40\x33\x86\x57\x8d\x8d\x73\xa7\xdc\xbd\x4f\x39\x6c\x0a\xf0\xd2\xcc\x03\xd1\xe0\x33\xe2\x90\xf7\x78\x48\xc0\x8c\xe7\x5d\xfa\x84\x59\xc5\x7d\xd1\xf5\x47\x5a\xb4\xd3\x4f\xb5\x8d\x7c\x6b\xed\xaa\x36\x7f\x23\x16\x16\xb1\xec\x47\x24\x3b\xf0\x5d\x39\xc4\x21\x2d\x8b\xa6\x30\x4e\xd0\x7e\xe4\xce\x6b\x48\x64\xdc\x38\xf1\xac\x3d\x5d\xa6\x67\x72\x65\xb9\x05\xf7\x3e\x95\x2a\x5f\x89\x03\x57\x4d\xb7\x21\xc0\xba\x72\x89\x43\x3e\xe0\x21\x5e\x37\x45\x32\x35\x0e\xc5\x7e\xdf\x64\x80\xce\x5c\xa4\xfb\xb2\x8d\xd8\xba\x5f\x61\xfc\xf4\xf9\xf9\x71\x71\x81\xaf\x2d\xe7\xc3\xcc\x31\x14\x79\x4e\x1c\xf2\x71\xd1\xec\x42\x4f\xda\x4a\xe5\xb1\x08\x9e\xf8\xad\x72\x6c\x8c\x9f\x11\xcf\x03\x2e\x53\x7d\x79\xaa\xd8\x85\x6b\xd4\xe7\x5f\xee\x0e\x95\x81\x5c\x23\x8f\x38\xe4\xd3\xa2\x0d\x12\xc6\xe8\xf5\xa6\xd8\x46\x95\xc0\x6f\xa7\xa9\xc7\x99\x47\xef\x3b\xef\xd7\x66\x89\xba\xca\xe2\x29\x24\x6d\xbc\xc9\x2e\x26\x16\xf8\xae\x7c\xe2\x90\xd6\x45\x11\xba\xfa\x79\xb7\x8f\xa5\x12\xa3\x7d\x29\xa9\x6a\x3e\xe3\x27\xe9\xed\xbe\xdd\x5d\x87\x63\xf6\xdc\x7f\xfd\x46\x7f\x5d\x97\x6e\x03\x82\xa1\xc8\x0b\xe2\x90\xb6\x45\xab\x66\xe6\x8d\x2a\xdd\xcc\xde\x8d\xdf\x4b\x25\x9f\x05\xbb\xa7\x72\x21\xb1\x87\x42\x36\xde\x1c\x8b\x37\x54\x08\xba\x33\x73\x4f\x99\x09\x43\x91\x02\xe2\x90\xf6\x45\x6e\x85\x7b\x23\xb3\x6c\xbb\x7f\x65\x61\xcd\xda\xf5\x1b\xdd\xd5\x7d\xe6\xe6\x5d\x37\xc5\xf1\x37\x86\x79\x1d\xe4\x6b\xf7\x3b\xf0\x18\x74\xc6\x42\xe2\x90\x0e\x3c\x84\x72\x94\x71\x7b\x75\xd8\x3e\xa9\xfd\xb7\x06\xaf\xa7\xab\x7d\xeb\x64\xfb\x68\xa1\xfd\xcb\x75\x2d\xe7\x84\x81\xe2\xbe\x11\x85\xb5\x07\x31\x14\x29\xfa\x5f\x13\x9a\xbf\xfd\xa7\xd7\x7f\x24\x34\x9d\x8b\x56\x68\x4e\x3b\x72\xf1\xf2\x44\xa7\xef\x11\xdc\x7d\x8c\xfb\xbb\x92\x56\xcb\x08\xf2\xf8\xc1\xb9\xce\xcb\x2c\xb1\x2f\xf8\xf5\x2f\xe5\x82\x18\xaa\x98\x78\xd3\x3f\x2f\xfa\x01\x42\xe1\xe6\x67\xeb\x62\xb3\x6a\x94\x07\x79\x0e\x3d\x37\x8a\xbc\x3d\x3f\x2e\x14\x7b\x28\x5b\x96\x3a\xe7\x3a\x17\x58\x23\x3a\x7b\x1c\x43\x91\x12\xe2\x90\x2e\x3c\xe4\xe1\xba\xcd\x9e\xe2\xec\xc7\x36\xdd\x34\x2d\xa3\x7d\x11\x2c\x3d\x9f\xf8\xf4\x20\x65\x83\x4c\x06\xe3\xde\x0e\x33\x7f\xa6\x73\xfb\x45\x31\x14\x79\x49\x1c\xf2\x65\xd1\x96\xb3\xbd\xe1\x85\x8d\xdd\xfa\xed\x3c\xc1\x35\x9c\xb9\xf2\xd3\xd7\x63\x33\xc4\xfc\x6c\xbf\xf9\x8b\x95\x36\x99\x52\x4a\x2f\x91\xc8\x18\x8a\x94\x12\x87\x74\xe3\x21\xf6\x2f\xcd\x4f\xd5\x69\xa7\xd8\xb2\x8f\x6c\xe9\x24\x97\xeb\x2d\x93\xa2\xc5\x34\x0e\xfa\x65\x5f\x62\xef\xaf\xed\x5e\xb6\x6c\x2b\x08\x6f\xca\x88\x43\x7a\xf0\x90\xb7\xaf\x29\x22\x93\x79\x61\x8f\x8e\xdc\xd6\x68\xad\x3b\xd5\xc2\xa4\xdd\x54\xaf\xe1\xf6\x8e\xcb\x3e\x53\x6d\x78\xa3\xd6\x5d\x56\x65\x0c\x45\x5e\x11\x87\xf4\xe2\x21\xe5\xdf\x3c\xd7\x93\xe5\x62\x85\x23\xdc\xca\x8f\xfb\x7f\x50\x18\x47\xa5\x24\x1f\xac\x2e\x3b\x73\xf0\xe5\x17\xee\xa7\x45\xbc\xf7\x0d\x30\x14\x29\x27\x0e\xe9\xc3\x43\xce\xef\x23\x67\x9d\x4d\xaa\x2a\x9a\xdb\xad\xb7\xf6\xe9\x9e\x27\x75\xe3\x9d\xb3\x3f\x6e\xbf\xd4\xaa\x7f\xf7\xed\x43\xa0\x20\xed\xc2\x49\x0c\x45\x2a\x88\x43\xfa\x17\xfd\x94\xc2\xdf\x3f\x54\x70\x6a\xbf\x70\x56\xa4\xa1\x03\xeb\xe8\xd9\xaa\x0f\x8a\x46\x2d\x63\xcb\xd9\x59\x4c\x74\x44\xe5\x77\xb4\xbf\x65\xc4\x50\xe4\x35\x71\xc8\x57\x3c\x04\x91\x75\x34\xcc\xd9\xe0\xdf\x65\xbf\x3e\xee\xe8\xee\x4d\xdf\x84\x1b\xe7\x86\x6d\xb3\xac\x8c\xe2\x8e\xa8\xd2\x55\xc4\x27\x4b\x01\xa4\x92\x38\x64\x00\x0f\xf9\xd2\xfd\x80\xc5\xee\x19\x55\x3a\xf9\xcb\x73\xa6\xce\x9e\xe1\x89\x56\xa9\xe3\x93\x4d\x0f\xb9\x0e\xa7\x44\x28\x25\x4e\xdb\x7f\x04\x11\xfa\x1b\xe2\x90\x41\x3c\xe4\x22\x76\xa3\xde\x84\x7e\x6c\x30\x6a\xb5\xd2\xc3\xf0\x14\x1b\x6d\x8c\x72\xa5\x39\xff\xb6\xf0\xdb\xd9\xc0\xcb\x46\x8f\x37\x29\xf1\x60\x28\xf2\x96\x38\xe4\xdb\xa2\xc5\x93\xdb\x3b\x5a\xb7\xa7\x89\x33\x6c\x1b\x50\x73\xdb\x57\x5a\xc5\x78\x62\xdd\xdb\xf1\xb5\x7c\x62\x8f\xef\x66\x16\x1f\x5e\x7e\x59\x17\x74\xc6\x2a\xe2\x90\x21\x3c\xc4\x72\xae\x4d\x9b\x8d\xd5\xc9\x78\x8d\xc5\xce\x1b\xdb\xb7\x1b\x08\xb5\x85\x3e\xbe\x5d\x72\xa1\x22\xc9\x8e\x74\x2a\x67\x73\x8a\x3d\xe8\x27\xd5\xc4\x21\xdf\xf1\x90\x65\xe3\x1f\x4f\x7e\x14\x57\x7c\xa5\x72\x36\xd9\x2d\xce\xd4\xed\x3e\xe5\x9a\xd4\xab\xf9\xf6\x4f\x81\xe9\x7c\x3f\xe5\x75\xd6\xcd\x1a\x62\x28\x52\x43\x1c\x32\xbc\x68\x7a\xdb\x60\x86\x7c\x14\x5b\x15\xa5\x10\x77\x81\x63\xe2\xe0\xbc\x6e\xc4\xf8\xed\x03\x2b\x73\xe4\x33\xce\x3f\x89\x77\x6e\x7e\x9e\x03\xac\xab\x96\x38\x64\x04\x0f\xb1\xb0\xd6\x1d\x9d\x98\xe3\xb5\x16\xeb\xd0\x94\xff\xb6\xd6\x3a\x59\x8d\x97\xa5\x6d\xf7\xd1\xf9\xc9\xf5\xb4\xf3\x8f\x13\x36\x0a\xec\xc5\x50\xa4\x8e\x38\x64\x74\x51\x84\xbe\x91\xe7\x79\x6f\x7c\xe2\xf2\x59\xc7\xf0\xb3\x86\x5c\x66\x33\xdb\xcd\x7d\x97\x6d\xb8\xc2\xdc\x2c\x3e\xb6\x6b\x4b\xd2\xd1\x56\xe0\xea\xdf\x11\x87\x8c\xe1\x21\x9f\x04\x86\x85\x9c\xad\x25\x6d\x76\x30\x5b\x9d\x48\xd1\x44\xd7\x2b\xa2\xe7\x3f\xbf\xb0\xc3\xf8\x23\x5d\xb1\xa0\x6b\x42\x19\x20\x1a\xac\x27\x0e\xf9\x81\x87\xc8\x0c\x7a\x9f\xfe\xec\x38\xf9\x2c\x5f\xfb\x76\x97\x41\x77\x67\x92\x6a\x67\x33\x65\x42\xc5\xb2\xf8\xcd\x89\xd9\x4c\x67\x9f\x35\x20\x86\x6a\x20\x0e\x19\xc7\x43\x9c\xa4\xf4\xc7\x15\xdb\xec\xda\x84\x7f\x2d\x49\xfc\xfc\x31\xfc\x16\x42\x1e\x92\x79\xee\xe2\x7c\xeb\xa8\xd4\x72\x81\xf1\xba\x83\xd6\x18\x8a\x34\x12\x87\x4c\xe0\x21\x35\x2e\xb5\x51\xfd\xc3\xc8\xc9\x4b\xb9\xed\x85\x1f\x24\x37\xdc\xb7\x35\x38\xe5\xb8\xce\x94\x3b\xa8\x95\x22\x7c\xfc\x2e\x97\xc8\x51\x0c\x45\x9a\x88\x43\xe8\x78\xc8\xf0\xc0\xa9\xd6\x9b\xac\x9c\xe3\x17\xb3\x0e\x1f\x15\xb3\x3d\xcb\x7f\x26\xa7\x78\xec\xb9\xa4\xfe\xda\x55\xf7\xa8\xa4\x1c\xaf\xeb\xc6\x18\x8a\x34\x13\x87\x4c\xe2\x21\xa7\xce\x99\x3b\xfa\x96\xd3\x46\x8f\x95\x4f\x68\xeb\xc8\x7c\x6e\xcf\x94\xa9\x4a\x8f\xb0\x5d\xbf\xc2\xee\x19\xbd\x6a\xe8\xe3\x14\xf0\x5d\xef\x89\x43\xa6\x16\x2d\x9e\xd4\x2f\xbd\x74\x30\x7a\xbd\x74\x4f\x92\x5c\x79\xea\x92\x94\x95\x1e\x93\x99\x2c\x7d\x4f\xb7\x3e\xce\x14\x7a\xf6\x5d\x61\x2e\x71\x17\x86\x22\x2d\xc4\x21\x3f\xf1\x90\xaa\x92\x3e\xe5\xbc\xea\x3b\x7d\xcc\x2c\xc1\xf7\xde\xf9\x0c\xdc\xdc\x79\xde\xe1\xd7\x12\x97\x0d\x71\x57\x9d\x13\xb2\x51\x27\x65\x20\xae\x0f\xc4\x21\xd3\x8b\xd6\x35\xf2\x2a\x2e\xac\x5f\xde\xb4\x6e\xb3\x71\x40\x41\xb8\xdf\xe6\x89\x41\xac\x5e\x3e\xda\xeb\x94\x1e\x6f\x88\x51\x04\xba\x91\x22\x86\xa1\xc8\x47\xe2\x90\x99\x45\x83\x56\xb3\xa8\x9e\xd0\xeb\xc8\x10\x1e\x4d\x53\x6f\xef\x24\xa1\xc6\xd7\x02\x37\x1c\x2b\x8e\x29\x27\x56\x2f\x2b\x96\xa8\xd8\x97\x7e\x06\x43\x91\x4f\xc4\x21\xb3\x78\xc8\xed\x33\x17\x7b\x2e\x9e\x0c\x2f\xa2\x6f\xf2\x33\xcc\xdb\xfe\xc8\x64\xa6\xb5\xe7\x1a\x16\x2f\xbc\xb7\x70\x7f\x07\x57\x74\xb8\x97\x13\x86\x22\xad\xc4\x21\x73\x78\x08\xd3\x9d\x53\x22\xcd\xaf\x9e\x99\x0c\x1f\x3b\x65\xa2\x40\x4a\xee\x3f\xa3\x29\xe4\xda\x6e\xd2\x91\x7e\x60\xcf\xc7\xdb\x4d\x95\x76\xc0\xd5\xb7\x11\x87\xfc\xc2\x43\x92\x15\xcf\x46\x6c\xc7\x38\xdb\x3a\xe4\xde\xfa\xa7\xa8\x22\x17\x45\x2c\x1c\x24\x3d\x75\xd3\x7e\xf6\x2e\x4d\x4a\x12\x49\x8f\x57\xc3\x50\xa4\x9d\x38\x64\x7e\xd1\x7c\xa2\xc9\x6a\xf6\x3a\xa5\xce\x8b\xb2\x5c\xc6\xec\x0f\xd6\xbf\xd2\x59\x2e\x1b\x96\xf0\xf0\x57\x69\xc5\xed\x8f\x93\xae\x52\xea\x03\x40\xf1\x1d\x44\x21\xc3\xe8\xbf\x1d\xcd\xf3\xff\x09\x0d\x4a\x5e\x74\xe2\x8c\xb4\x72\xd9\xbb\x94\x73\x9c\x87\xb4\x24\xfa\xdf\x22\xa7\xf6\xa1\xfa\xaf\x66\x5c\xe7\x9a\xd4\xf3\x3a\xad\x67\x8f\xec\xd8\x22\xa5\x87\xa1\x08\xf1\x13\x67\x50\xf2\xa2\x33\x67\xd8\xf7\xbf\x18\x1a\x30\xee\xcb\xbd\xb2\x22\xad\xe6\xe7\xbb\x38\x6b\xb6\x69\xbe\x35\x96\x31\x55\x01\xbb\xcc\x04\x4f\x70\x24\xfb\xae\xc2\x50\x84\xf8\x99\x33\x28\x79\xd1\xa9\x33\xd8\xb5\x80\xe8\x25\xa5\xf2\x92\x7d\xab\x0d\x46\x74\x9d\x9f\x65\xf8\xe8\xad\xf0\x71\x79\x9b\x76\xa7\xaf\x64\x59\x59\xf7\xb2\x67\xc0\x4b\x10\x3f\x75\x06\x25\x2f\x3a\x77\x66\x99\x55\xa4\xfa\x96\x31\xc7\x25\x2b\xdb\xda\x9a\x0b\x03\xe9\x3e\x9d\x4c\xb9\xe3\x0e\x82\xa6\xc7\xbe\x9a\x27\x32\x04\x5a\x26\xaf\xc5\x50\x84\xf8\xb9\x33\x28\x79\xd1\xc9\x33\xed\x99\x0f\xcb\x91\x33\x6a\x27\x3d\xe5\xba\x42\x4e\x56\x9b\x36\x6b\x5c\xa2\xb2\x17\x08\xa0\xac\xdd\xf2\x85\x41\xa7\x2e\xbf\x46\x31\x14\x21\x7e\xf2\x0c\x4a\x5e\x74\xf6\xcc\xdc\x67\x65\x8f\x27\x17\xeb\x02\xb8\xb4\x39\xde\x2e\x3d\xf8\x99\xb3\x3d\xea\xe2\x49\x13\xef\x04\x16\x0f\xde\x96\x9f\x9d\xb7\x73\xb5\x30\x14\x21\x7e\xf6\x0c\x4a\x5e\x74\xfa\xcc\xe5\x55\xad\x4b\x2c\x02\xf7\xb2\xac\x0f\xc3\xa2\x8d\xd2\x92\xeb\x32\x59\x4c\xb8\x8a\x67\xc2\xca\xc2\xc5\xb0\xde\x6e\xc5\x8d\x1a\x18\x8a\x10\x3f\x7d\x06\x25\x2f\x3a\x7f\x26\x35\x71\x4f\x8a\x62\xa0\x67\x85\xc1\x99\x52\x37\xab\xda\x52\x0b\xaf\xf2\x62\xd2\xbc\xfa\x95\xfd\xa9\xa2\x77\xd9\xee\xb7\x9d\xa2\x62\x28\x42\xfc\xfc\x19\x94\xbc\xe8\x04\x9a\xfb\x99\xbb\x3f\x7d\xb4\x2e\xac\x93\x39\x45\x11\x0f\x3e\x90\x43\xd9\x90\xae\x6b\x2e\xd8\x22\xe5\x43\xf6\xf6\xb0\xba\x9c\xf4\xe5\x18\x86\x22\xc4\x4f\xa0\x41\xc9\x8b\xce\xa0\xc1\x0e\x05\x19\x3e\x2b\xcf\x64\xb4\x67\x2a\x1b\x12\xe9\x4d\x45\x79\x28\x5c\x7d\x34\x7f\xc6\x96\x70\xca\x27\x7b\xba\x43\xe0\x16\x0c\x45\x88\x9f\x41\x83\x92\x17\x9d\x42\x63\xef\xcb\x20\xb8\x79\xe3\x69\x2d\x87\x9d\x77\x9b\xa2\x36\x2c\xbf\xf9\x80\xe3\xa7\xc6\xcb\x31\xa4\xf7\xab\xf1\xdb\x16\x16\x27\x7d\x30\xe0\x11\x3f\x85\x06\x25\x2f\x3a\x87\xe6\xcc\x80\xa3\xdf\x0e\x4e\x39\xb3\xb4\xb1\x3a\xbe\xb8\x8b\x3a\xad\x97\x25\xb3\x5f\xde\x0b\xde\xbd\xd5\xf2\xfc\xe7\x63\xaf\x5a\x67\x19\x30\x14\x21\x7e\x0e\x0d\x4a\x5e\x74\x12\xcd\xa6\x80\xf5\xcb\xf9\xfc\xfc\xaa\xdf\x5c\x14\x9f\x1a\xba\xc2\xd5\x15\x61\x98\x17\x88\xb8\x1a\x15\x27\xc4\x67\x38\xa8\x85\x2f\x15\xc7\x50\x84\xf8\x49\x34\x28\x79\xd1\x59\x34\x47\xe4\x19\x85\x3e\x1e\x36\xfa\x7c\xcb\x8e\x72\x4a\xe3\x60\xc1\xb3\x5d\x4e\x47\x05\x2d\xaf\xbd\xf5\xd8\x95\xdc\x5a\x50\xcd\x59\xca\x8d\xa1\x08\xf1\xb3\x68\x50\xf2\xa2\xd3\x68\xde\x1d\x69\x31\xb3\x6c\xa8\x1b\xec\x39\xd7\xaf\x64\x6c\xeb\x53\x33\xe7\x65\x9a\x3c\x54\xf8\x76\xd3\xf0\xcd\x80\xd2\xfb\x31\x98\x1d\x86\x22\xc4\x4f\xa3\x41\xc9\x8b\xce\xa3\xd1\x58\x76\xdc\x77\x0e\x79\xb2\xfb\xf5\xa8\xb4\xdc\xf9\x88\x75\x5c\x74\x5e\xfd\xc0\x78\xa3\xfc\x64\xb6\xbd\x52\x3d\x03\x4d\xd5\xc2\x18\x8a\x10\x3f\x8f\x06\x25\x2f\x3a\x91\x26\x94\x66\xbc\xbb\x9a\xbe\x61\x5b\x90\xbe\xde\x2d\x27\x3d\xd6\xab\x5f\x37\xc9\x62\x13\x15\x61\xb3\xa1\xa2\xa7\x2e\xc9\x16\x76\x5a\x60\x28\x42\xfc\x44\x1a\x94\xbc\xe8\x4c\x9a\xcf\x8d\x83\x86\xa4\xb8\xfe\x72\xaf\x62\xfd\xb5\xff\xc7\xdc\x9f\x87\x63\xd1\xff\x7f\xdc\xb8\x31\xc8\xbe\x64\x1d\x65\x4b\x85\x10\x49\x84\xc8\xae\xec\x44\x84\x64\x4b\xb2\x47\xd6\x22\x83\x2c\x29\xfb\x16\x29\x21\xc9\x9e\x92\xec\x44\xf6\x35\x5b\xf6\xa5\xc5\xbe\xef\x4b\xf9\x1d\x3e\x9f\xcf\xd9\xcf\x35\x75\xdc\xe7\x35\xf7\xdd\x1f\xdf\xe3\xb8\xfe\x7c\x5c\xaf\x39\xe7\x3d\xcf\xf3\xbd\xbc\x9a\xd3\x63\x89\xe9\x2a\x39\x8d\xd5\x78\xdd\xd8\x2b\xdb\xd0\x4f\xec\x92\xdd\x5d\xcd\xdb\xd7\x60\x08\x17\xbd\x93\x06\x02\x10\x56\x9a\x91\x0f\xd5\x86\x01\x1e\x82\x0e\x4f\x18\x5d\x1d\x32\x68\xa2\x5c\xf3\x73\x7f\xdc\x6f\x5e\x34\x8b\xf7\xa4\x5e\x7e\xbb\x90\xf8\x43\x13\x86\x70\xd1\x5b\x69\x20\x00\xe1\xa5\x11\x26\x51\xec\x50\x18\xc1\xa7\x5d\xbf\x11\xce\xf6\x81\xe5\x58\x8d\x06\xf3\x8d\xb3\x26\x56\xe7\xc7\x68\x66\xd6\xc5\xe2\x1c\x49\x2c\x61\x08\x17\xbd\x97\x06\x02\x10\x66\x1a\xa5\x2a\x69\xb9\x6d\x6a\xd3\x74\x07\x82\x62\x2e\x49\x46\x6a\x7c\x6a\x3a\x67\x1f\xa2\xa7\xfc\x97\xc1\x69\x9c\xe7\xe7\xdf\x35\x52\xc0\x10\x2e\x7a\x33\x0d\x04\x20\xdc\x34\x51\xb1\xf7\xe4\xa8\x7e\xdc\x5e\xf9\x94\xc7\xe3\x3b\x7f\x20\xa5\x49\x52\xb4\x8a\xa3\xb3\xe2\xb9\xfd\xcf\xec\x62\x5e\x75\x2e\x8b\xeb\x30\x84\x8b\xde\x4d\x03\x01\x08\x3b\x4d\x5e\xf7\xbc\x1b\x4b\xa3\xcf\xea\x59\xdd\x44\x8f\x43\x1b\x97\x22\x77\x2e\x98\x97\xe3\x7e\xf0\x69\xd5\x8f\xd3\x7d\x6d\x77\x55\x40\x00\x86\x70\xd1\xdb\x69\x20\x00\xe1\xa7\xf1\x08\x0d\xfb\xa1\xe2\x45\x43\x16\x6a\xb7\x4c\xe5\x79\xde\xde\x65\xee\x14\x6b\x85\x3d\xab\xa5\xe8\x77\x2f\x97\x71\x47\x62\x3e\x72\x18\xc2\x45\xef\xa7\x81\x00\x84\xa0\x86\xac\x2c\xaa\xe8\xbd\x0d\xce\x91\xe1\x3a\x93\x81\xb2\x58\x63\x7c\x5a\xd2\xe8\x59\x31\x59\x87\x6f\x63\x7c\xb7\x3c\x04\x7d\xc3\x0e\xc1\x10\x2e\x7a\x41\x0d\x04\x20\x0c\x35\x7a\xee\x9f\x1a\xa5\x63\x86\xf5\x8d\x44\xe0\xc9\x47\x78\xbe\x7d\x4a\x37\x5e\xe8\x6d\xf4\x36\x94\xd0\xb9\xbd\xe0\xf2\x29\xca\xdb\x3b\xb4\xa1\x37\xd4\x40\x00\x42\x51\x33\xce\x11\x37\x3b\xa9\x32\xfa\xfe\xf1\xdb\xcd\x8b\xef\x34\x35\xa7\x2c\x69\x5b\x44\x25\x57\xfc\x0d\x7e\xb2\x31\x75\x1a\x3c\x68\x55\x82\x21\x5c\xf4\x8a\x1a\x08\x40\x38\x6a\xce\x77\xba\x28\xec\xcc\x86\x31\xc7\xd5\x1f\x6d\x5a\x2a\xa2\xca\x28\xfc\xc8\x36\x34\x33\x53\xb9\x32\xe3\x3e\xa3\xb1\x62\x95\x7c\x13\x86\x70\xd1\x3b\x6a\x20\x00\x21\xa9\x31\x0a\x12\xf6\xdc\x66\x3f\x74\x45\x31\x2f\x8d\x2e\x6d\x48\xec\x4b\xcd\xd6\x92\x31\x31\x65\x83\xde\x81\x2a\x91\xa2\x2a\xc9\x5a\x51\x18\xc2\x45\x2f\xa9\x81\x00\x84\xa5\xc6\xb3\x57\x67\x12\x1c\x12\x14\x49\x56\xab\x8e\x39\x42\x62\x30\xb6\x4d\x16\x39\x46\x56\x34\x71\x01\x2c\x48\x6a\xcd\x7f\x77\x87\x10\x86\x70\xd1\x5b\x6a\x20\x00\xa1\xa9\x61\xe7\x26\xf4\x0f\x75\x61\x39\xfe\x93\xe4\xb6\xe3\xe7\x96\x09\xf2\xc5\x1e\xdd\x7c\xbd\xa2\xef\x87\xf9\x3a\x99\x05\xdb\xc1\x88\xbd\xf5\x05\xbd\xa6\x06\x02\x10\x9e\x9a\x55\xf6\x9d\xed\xaa\xef\x65\xd6\xaa\x2e\xe1\x4e\x3f\x49\x94\xd7\xbe\xf1\x34\xf6\x5c\xbd\x91\xaf\x78\xeb\xb3\xf3\x92\xa2\xb5\x39\x2f\x0c\xe1\xa2\xf6\xd4\x60\x0e\x3c\xd8\x04\xa3\xfb\x0f\x3c\x08\x51\x4d\x1b\x99\x20\x2e\xdb\xa7\xd5\x9b\xcc\x42\xcf\xf9\xc3\xf0\x36\x5e\x57\x96\xe3\x3c\x52\x2d\xc4\x27\x64\xea\x3c\xe0\x51\x41\xf4\xf3\x04\x0c\x81\xe8\x45\x35\x10\x80\x30\xd5\x0c\x1d\x30\x68\x58\x20\xe8\xcd\xa3\xd0\x08\x50\xdb\x98\xc1\xb7\xa9\x2b\x5e\xa7\xb8\xef\x14\x59\x09\xea\xa5\x67\x7d\xe5\x8e\xe7\x84\x21\x10\xbd\xa9\x06\x02\x10\xaa\x1a\x3b\x7f\xb1\xde\x79\xff\x23\xf0\xf5\xd2\x7c\x57\x1b\x76\x8b\xf9\xe6\x57\xe6\x6a\x66\x82\x0e\x06\x27\x6d\x96\xcb\xf3\xf2\x24\xf6\xae\x82\x5e\x55\x03\x01\x08\x57\x8d\x31\xec\xd7\x71\x1c\x56\xcf\xbd\x1e\x1b\xfe\x11\x5e\x8b\x74\xbf\x43\xf7\xc4\x53\xdb\x2a\x8b\x8c\x94\x68\x65\x90\xc8\xfd\xb5\x2e\x0c\x81\xe8\x5d\x35\x10\x80\x90\xd5\x3c\x0d\x2f\xaf\xf8\x79\x31\x44\x22\xf1\xfe\x9a\x8a\x7b\x58\xdf\x0a\x5b\x72\x53\x86\xdb\xcf\x18\x01\x61\x8f\x00\xed\x93\xba\x96\xec\x30\x04\xa2\x97\xd5\x40\x00\xc2\x56\xf3\x82\x84\x70\x7a\x89\xdb\xff\xb5\x7f\x9a\x3d\xd7\xf4\x50\xf9\x3c\xe1\xe9\x13\xae\x75\xa2\x11\xee\x50\x31\x11\x9e\x9d\xd1\x09\x22\x18\x02\xd1\xdb\x6a\x20\x00\xa1\xab\x11\x6b\xe8\x95\x13\x6f\x72\x1c\xe6\xb9\x38\x46\xd6\xa0\x99\x38\xca\xc6\x2f\x7e\x8b\x53\xa4\x85\x13\x3e\x17\xfa\x63\xe1\x49\xb5\x05\x0c\x81\xe8\x75\x35\x10\x80\xf0\xd5\x64\xe2\x29\x03\x4e\xe1\xb3\x47\x9d\x4e\x0c\x91\xe7\xb2\x85\xab\x45\xb0\x5c\x0e\xd0\xb5\x3a\x5b\xb5\x60\x7f\xaa\x77\x87\x75\x95\x1e\x86\x40\xf4\xbe\x1a\x08\x40\x08\x6b\xc8\x54\x69\x07\xab\xa2\x1f\x7f\x5d\x3b\x4f\xa0\x42\xa1\x44\xe0\xf5\xec\x50\xca\xe3\xf6\xbe\x75\xb8\x93\x92\x24\x79\x76\x34\x8a\x0f\x86\x40\xf4\xc2\x1a\x08\x40\x18\x6b\x46\xae\xf5\x83\xf2\x5b\x9e\x95\xa7\x02\x3e\x17\x93\x73\xd5\xd7\x99\x64\x1c\xb8\xa7\x13\x1f\xc3\xd9\xa6\x7e\xec\x83\xdb\x21\x53\x29\x18\x02\xd1\x1b\x6b\x20\x00\xa1\xac\xb9\x99\xde\x5d\xfd\xd4\x4f\xce\x46\x83\xd5\x32\xd8\x53\xd0\x7f\x97\xaf\x55\x26\xba\xbc\xd9\x50\xa7\x4c\x99\x79\xe0\xe9\x38\xb7\x34\x0c\x81\xe8\x95\x35\x10\x80\x70\xd6\xd8\x9e\x8c\xd5\x7e\x65\xd9\xb2\xdc\x18\xeb\xf3\xc0\xe8\xc4\x9c\xa7\x40\xbd\x5f\xdc\x3b\x75\xaa\x3a\xa3\xe1\xd4\x32\x9d\x3e\x80\x0c\x86\x40\xf4\xce\x1a\x08\x40\x48\x6b\xa4\x63\x5f\x88\xcf\x8d\xe4\xa9\xb8\xeb\xf0\x14\x06\xd1\x47\x67\xf7\x53\x52\x10\x1a\x65\x30\xec\x4e\x9d\x7f\xa0\x44\x8f\x4b\xb0\x37\x8f\xa1\x97\xd6\x40\x00\xc2\x5a\xc3\x50\x3b\xa5\xf3\xa4\xbf\xba\x3d\x6f\x93\xd4\xc0\x4d\xed\x3c\x83\xe0\x4b\xca\x00\x5f\x01\x8b\xd9\x09\x67\xe9\x2b\xdc\xf0\x69\x0a\x18\x02\xd1\x5b\x6b\x20\x00\xa1\xad\x61\xf9\x4e\xb0\x5e\x4d\x3a\xf2\xf3\x54\x05\xb7\xa1\xe0\x97\xd2\xe7\x3b\xb7\xcd\xac\x93\x78\x81\x2f\x33\x8e\xce\xcd\x46\x16\x9a\xfa\x30\x04\xa2\xd7\xd6\x40\x00\xc2\x5b\xb3\xb0\x20\xde\x4d\xa2\x2e\xe2\x1b\x1d\xad\xdf\xb8\x99\x0b\xd3\x89\xe8\x91\x07\xd0\x4b\x14\xab\x7d\x37\x32\xd6\x71\x30\x21\xc1\x81\x21\x10\xbd\xb7\x06\x02\x10\xe2\x9a\xd4\x77\x91\x6c\xea\x14\x4c\x2e\xdd\x50\x55\x7b\xc3\x8f\x71\xb1\x96\x03\x9f\xb6\x6b\xc4\x5a\x9e\x92\xcc\xee\xe2\xa8\x07\xde\xdf\x7b\xfa\xe8\xc5\x35\x10\x80\x30\xd7\x14\xdc\x2d\xb4\x20\x53\xd2\x5c\xf6\xd9\x72\x9e\xfc\xb8\x5a\xab\x5b\x4a\x9f\x4c\xb5\xa3\xb2\xd2\x02\x71\xa7\x15\xe3\xcc\x6f\xc9\xc3\x10\x88\xde\x5c\x03\x01\x08\x75\xcd\x95\xd7\x11\x93\x6b\xe6\x1a\x65\xab\x31\x59\x86\x06\x7e\x63\x04\x05\xa7\x03\x7b\xa4\xee\xbe\xc1\x75\xbc\x1d\xcf\xed\x6a\x75\x69\x6f\x7d\x41\xaf\xae\x81\x00\x84\xbb\xe6\xc5\xd3\x83\x8a\xa7\xae\x07\xb1\x32\xf6\x9a\x5e\x26\x49\x77\x7b\xd0\x49\x8e\x2f\x50\xe2\x78\x5b\x5a\x8c\x7e\x99\xe6\x86\xf9\xc5\xc3\x30\x04\xa2\x77\xd7\x40\x00\x42\x5e\x13\xe3\xd7\xf3\x83\x59\xe1\x27\x75\xa4\x77\x8d\x95\x27\x37\xe5\x53\x1f\x1d\x8f\xbb\x55\x6b\x1a\x81\x27\x7b\x84\x0b\x65\xeb\x8c\x41\x18\x02\xd1\xcb\x6b\x20\x00\x61\xaf\x79\xe2\x78\xe3\xb1\xd5\x31\xaa\xbb\xea\x7d\x90\xd9\x42\x78\xb0\x4d\x19\xf0\x4e\xa3\xf0\xcc\xd5\xea\x35\x92\x54\xe6\xc0\x20\x15\x66\x18\x02\xd1\xdb\x6b\x20\x00\xa1\xaf\x39\xa9\xc1\x73\x98\x4b\x30\xc2\x27\xaf\xf9\xf9\x1a\x7c\x4f\x27\x86\xac\xd0\xc0\xf8\xc9\xb6\xfc\x6b\xd8\xb7\x43\x94\x69\x2a\x88\x07\x86\x40\xf4\xfa\x1a\x08\x40\xf8\x6b\x02\x95\xdb\x6d\xe4\xc7\xe8\x67\x7e\x98\xbb\xe5\xab\x91\xdb\x85\xa8\x76\xf4\x07\xf1\xd9\x38\x32\x7c\xda\x71\x5d\x50\x75\xe3\xb2\x83\x21\x10\xbd\xbf\x06\x02\x10\x02\x1b\xb1\x29\xd5\xea\x50\xb6\x0f\x6e\x29\x9e\x95\x1f\xf8\x1a\x46\xfa\x9c\x89\x3a\xd5\x44\x4d\x19\xe6\x21\xcd\x20\xf2\x8d\x35\x8d\xbd\x7b\x41\x2f\xb0\x81\x00\x84\xc1\x46\x73\x73\x22\x71\xd4\x5d\x20\x9a\x4c\xee\x26\x4b\x1e\x23\xb9\xea\xdc\xf4\x11\xbf\x0f\x51\x2e\x2b\x4d\xa2\x51\x56\x91\xb9\x04\xa6\x30\x04\xa2\x37\xd8\x40\x00\x42\x61\x93\xb7\x70\x24\xa3\x29\xe6\xb8\x7a\x89\xb2\x4d\xf7\x9d\xaf\xef\x9b\x89\x1b\xf9\x0b\x8a\x5c\xc6\xaf\xf8\xaf\x35\xc7\xb3\x19\xcf\xd2\xc0\x10\x88\x5e\x61\x03\x01\x08\x87\x8d\x87\x4e\xcd\x78\xef\x70\xa3\x84\x7f\x55\x18\xfb\xe3\xab\xc7\x21\xdc\xae\x19\x17\x12\x92\x9f\xc9\xa3\x07\x75\x93\x8b\x6b\xb2\x8e\xc2\x10\x88\xde\x61\x03\x01\x08\x89\x4d\xfc\x5a\x42\x5b\x22\xab\x40\xd6\xc3\x83\xc9\x6b\xc4\xdd\x36\x9c\x35\x61\xf4\xa7\x2f\x45\x5c\xaa\xc0\x23\xc1\x4d\xce\x78\xf4\xfa\x2a\x0c\x81\xe8\x25\x36\x10\x80\xb0\xd8\x04\x8b\xb2\x90\x37\x9b\x75\xab\xf5\xf8\xbf\x60\x16\x3b\x73\xca\xda\x4e\x2b\x55\x6d\x0c\x57\x29\xeb\x95\x6e\x26\x28\x97\x2b\x2f\x04\x43\x20\x7a\x8b\x0d\x04\x20\x34\x36\x5e\x2d\x69\x06\x24\x4e\x7e\x9c\x0f\xcf\x59\xc4\x33\xc6\x5c\x8c\x17\x15\x3f\xff\x0e\xef\x9a\x4e\xbf\x70\xd6\xec\xfc\xfa\xd6\xbd\x23\x30\x04\xa2\xd7\xd8\x40\x00\xc2\x63\xa3\xa4\xa8\x7d\xf6\xf5\x84\x45\xe0\x77\x95\x9b\xce\x6d\xe2\xe4\x23\x1f\x88\x83\x9c\x0c\xc3\x29\xd4\x14\xbe\x78\xa4\x09\xdf\xdf\xa6\x85\x21\x10\xb5\xc7\x06\x73\xe0\x69\xae\x1d\xa1\x73\xa5\x6d\xfd\xe6\x40\xf2\x61\x64\x6a\xe3\xa3\xef\xea\x42\x2a\x81\x96\xa0\x5c\xf3\x4d\xaa\x23\xac\x31\x95\x97\xb2\xf6\x1f\x78\x10\x22\x1b\x0b\x02\xa9\x12\xd3\x2b\x7c\x3b\xb5\x33\x17\xd8\x07\x82\xf2\x3f\xe7\x9c\x8d\xc9\x67\x11\x51\x31\xd5\xad\xf2\x7b\x98\x1f\xbe\xc3\x05\x43\x20\x7a\x91\x0d\x04\x20\x4c\x36\x2e\x6c\xb9\xf8\x6b\xc4\xb4\x2e\x0e\x91\x8a\xdb\x32\x8b\x66\x19\x8b\x0b\x8f\x29\x9e\xb5\x5e\x2f\xc9\x8a\x19\xa0\xbd\xb9\xf1\xc1\x16\x86\x40\xf4\x26\x1b\x08\x40\xa8\x6c\xcc\xea\xe4\x28\xde\x8f\x87\x1a\xdc\xb6\x5f\xc8\x7e\xfa\x1d\xff\xc3\xce\xac\x80\xec\xa7\xa9\x51\xf1\xb5\x73\xfe\x91\x35\x53\x21\x72\x30\x04\xa2\x57\xd9\x40\x00\xc2\x65\x73\xe6\x8c\x7a\xd5\x99\xb4\x1b\x44\x5b\xbe\x4b\xfd\x1a\x0b\x42\xdb\x8b\x9d\x9a\x4f\x17\x3f\xd9\xeb\xd5\x70\x90\x9f\x2b\x7c\x31\x6a\x05\x43\x20\x7a\x97\x0d\x04\x20\x64\x36\xe2\xc4\x3f\x29\x95\x2e\x79\x72\x2b\x8a\x9d\x01\x4a\x84\xab\xa3\xae\xf2\x54\x6a\x3e\xbc\xe1\x45\x44\x73\x87\xd5\xa6\xcc\x20\x6c\x6f\x41\x42\x2f\xb3\x81\x00\x84\xcd\x06\x58\x32\xf7\x6b\xc8\x5b\xec\xbd\xb6\x90\xa7\xe2\x13\x48\xae\x92\x9f\xd7\xae\x13\xc4\x22\x72\x6a\x38\x66\xf9\x11\xc4\xf2\x49\x01\x86\x40\xf4\x36\x1b\x08\x40\xe8\x6c\x5e\xbb\x1f\xc6\xe5\xe9\x55\xa3\xe6\x84\x4a\x85\xd6\x35\xdf\x3d\x4e\x9b\xbd\x99\x3c\x89\x2f\xc2\xf4\x66\xb7\xd3\xe4\xc8\x98\x9a\x26\x0c\x81\xe8\x75\x36\x10\x80\xf0\xd9\x1c\x58\xc4\xa1\x22\xf6\x7f\xb1\x7c\x22\x32\x4b\xcd\x53\xdd\xa6\x25\xd6\xd0\xa7\x74\xce\xf2\x8e\xc2\xc9\xb6\xeb\x46\xbe\xe3\xaa\x32\x30\x04\xa2\xf7\xd9\x40\x00\x42\x68\x23\xfd\x22\x62\x90\xe0\xb4\x70\x68\x3b\x18\xed\x26\xe8\x2f\x77\x56\x5e\x3f\xec\x4d\x45\xf6\xf5\x60\x93\x63\x73\x1b\xd2\x37\xee\xd0\xc1\x10\x88\x5e\x68\x03\x01\x08\xa3\xcd\xa3\x6a\x33\xbb\xeb\xbe\x77\x57\x13\x47\xcf\x06\x7e\xdf\x3e\xe6\xe8\x7b\x59\xfb\xe5\xe0\x34\x28\xa8\xf3\x36\x6c\x6b\x89\xae\x54\x11\x86\x40\xf4\x46\x1b\x08\x40\x28\x6d\x58\xdf\x34\x5f\x7a\x0e\xfb\x9a\xd5\x82\xdf\x05\xbd\x1e\xa6\x35\x7c\xaa\x5c\x65\x96\x0d\x0c\xef\x1a\x9b\x31\x3f\x95\xc3\x62\xbb\xf7\x5c\xd0\x2b\x6d\x20\x00\xe1\xb4\xb9\x94\x1d\xe7\x39\xd9\x7b\xfb\x99\xd6\xba\x6b\xd6\xbc\x93\xfa\x68\xb7\x4d\xce\x49\x4b\xdb\x9d\x00\x22\xe9\xfe\xf2\x0f\x76\x34\xe6\x30\x04\xa2\x77\xda\x40\x00\x42\x6a\x63\xf7\x6e\xca\x29\x53\x59\xc6\x7d\x6e\x26\xbe\x2c\xd3\x1d\x0e\x70\xde\xe2\x98\x34\xd5\xf5\x6f\x34\x8e\x24\xaa\x1c\x19\x93\x95\x84\x21\x10\xbd\xd4\x06\x02\x10\x56\x9b\x08\xaf\x9b\x39\x26\xdf\xe2\x1c\xa2\x65\x34\xc5\xde\x9e\x75\x13\x94\x6a\x76\xaf\x7a\x2a\x9b\xf0\x68\x31\x41\x45\xfd\xa4\xee\x3c\x3e\x0c\x81\xe8\xad\x36\x10\x80\xd0\xda\x1c\x2f\x2c\xbb\x9a\x55\x73\x9e\x4b\xb3\xff\x2b\x05\xeb\x8f\x24\x1a\xb1\xaa\x49\x5d\xd6\x63\xc4\xce\xed\xfd\x47\x8b\xeb\x7d\x37\xf7\x36\xd6\xe8\xb5\x36\x10\x80\xf0\xda\x3c\x0a\x97\x35\xfa\x49\xbb\x5e\x72\xe6\x60\x81\x67\xda\xcd\x27\x33\x47\xd8\x1a\x63\xd5\x29\xc4\xb4\xb4\x76\xe7\x0f\x06\x2a\x2a\x43\x30\x04\xa2\xf7\xda\x40\x00\x42\x6c\x63\x67\xc3\xc8\xc4\xff\x3c\xa7\xc0\x5f\x4b\xd6\x8a\xe4\xfb\xa3\x9f\x0e\x0d\x3d\x70\x85\x59\xe5\x71\xc1\xb7\x9f\x9a\x58\xab\xd9\x2d\x61\x08\x44\x2f\xb6\x81\x00\x84\xd9\x06\xca\xc9\x36\xe4\xbc\x70\x2e\xb5\x6e\x80\xf2\xfd\x79\x2b\xbc\x87\xeb\x44\x96\x87\x4e\x49\x7a\x27\x58\x1e\x92\x39\xd8\x14\x00\x91\xc0\x10\x88\xde\x6c\x03\x01\x08\xb5\xcd\xc7\xe9\x03\x1c\x4a\xba\x65\xa3\x4a\x7c\x89\x4d\xa4\x8f\x3e\x37\x4e\x3f\x7c\xa6\x9c\xfb\xb9\xe2\xd0\x94\xba\xa2\xbc\x19\xa9\xb8\x16\x0c\x81\xe8\xd5\x36\x10\x80\x70\xdb\xb4\x1c\x50\x18\x3f\x17\x4f\x39\x27\x17\x46\xaa\xb3\xc3\x1d\xc1\xc8\x1f\x1b\x5e\xf3\x15\x6c\xe8\x4f\x28\x39\xf3\xac\x4b\xe8\xfa\xde\x77\x1f\xbd\xdb\x06\x02\x10\x72\x9b\xef\x24\xe4\x4c\x21\x3b\x9e\x99\xf3\x49\x59\x09\x63\x34\x1b\x73\x32\x67\x55\x7f\xc4\xf4\xd2\x2e\xcb\x97\xf5\x9f\xd2\xa9\x8f\xd2\x86\x21\x10\xbd\xdc\x06\x02\x10\x76\x9b\x80\x91\x8b\xe3\xdb\xd5\xda\x0d\x9f\x15\x15\x0e\xf5\x55\x18\x76\x0c\x2f\x3d\x89\x76\xb7\x1c\x9c\x72\xac\xb5\x58\x17\xe4\x5b\x76\x80\x21\x10\xbd\xdd\x06\x02\x10\x7a\x9b\x69\xb7\xec\x16\xda\x17\x29\xba\x0e\xb3\xcb\xca\x2c\x8f\x28\xbf\x78\xcb\x7c\x4d\x4d\x14\xcc\x26\x20\x91\xb3\x54\xfe\xfc\xc2\xe0\x3a\x0c\x81\xe8\xf5\x36\x10\x80\xf0\xdb\xd4\xa7\xbf\x20\x64\x01\xa3\x23\xa0\x42\xfd\xdb\x30\xd9\x3a\x51\x8e\x34\x83\x13\x7f\x9f\x92\xf3\xf0\xec\xed\xdc\xd1\xb1\x20\x26\x18\x02\xd1\xfb\x6d\x20\x00\x21\xb8\x39\x2a\xfe\xd2\xe2\xe0\x43\x7f\x2a\xe5\x4a\x47\x9a\x51\x69\x03\xb3\xe3\xeb\x42\x71\x6d\x1b\x27\xc2\xb7\x2f\xeb\x30\xb2\x5e\x30\x11\x80\x21\x10\xbd\xe0\x06\x02\x10\x86\x9b\x13\xa7\x0e\xe1\x25\xc5\x56\x0a\xcb\x8c\x5e\x8b\xbd\xdf\x97\x75\x69\x82\x81\xfd\x7c\xe7\x97\x06\xc5\xc7\x9a\x31\x1d\x2d\x5d\x73\xa2\x30\x04\xa2\x37\xdc\x40\x00\x42\x71\xf3\xe5\x2a\xe5\x86\x6a\xd4\x3c\x81\xb3\xb5\xeb\x28\x7f\x1f\xd7\xa0\x1b\x5e\x9e\xb4\x96\x60\xc2\xed\x08\xe6\x6c\xfc\xe8\x9f\xa7\xf6\x32\x86\x5e\x71\x03\x01\x08\xc7\xcd\x02\x13\xe7\x8f\x92\xfe\x86\x86\x1b\x75\xaa\xad\x09\x16\xf9\x2a\xc2\x1f\x47\x34\x2a\xeb\xd7\x58\x4e\x80\x01\xd3\xfa\x5c\xf8\xc7\x61\x08\x44\xef\xb8\x81\x00\x84\xe4\xa6\x22\xb0\x29\x87\xcf\x4f\x7f\xfa\x69\x9a\x7f\xda\xdd\xca\x6f\x0f\xcf\xb9\xcb\x95\xeb\xf6\x5c\xe7\x61\x34\xba\x7b\xdd\x1c\x57\x7f\xef\x5b\x89\x5e\x72\x03\x01\x08\xcb\x8d\x27\x83\xd1\x20\xf5\x7a\x18\xd1\x5d\x9e\xfa\xc3\xdd\x4b\x75\xcc\x09\x99\x1c\x4f\x8f\x49\x99\x5a\x8e\xa7\x8a\xcf\x9c\xbd\xbc\xbb\xf7\xf4\xd1\x5b\x6e\x20\x00\xa1\xb9\x91\x9e\x58\xa0\xdf\x66\x71\x19\x0e\x96\x53\x3e\x34\xb0\x66\x3c\xd8\xf7\xe6\xc0\x72\x75\xc7\x48\xfd\xfb\x17\x26\xa5\x44\x47\x1d\x0e\xc2\x10\x88\x5e\x73\x03\x01\x08\xcf\x4d\x14\x7f\xf7\x85\x47\xd1\x7c\x91\x01\x64\xe5\x3c\x09\xd4\xc9\x4a\x8b\xc4\x2c\x11\x1c\xda\xc5\xc4\x01\x9a\xd6\x5c\x42\x3f\x5d\xf6\xbe\xfb\xa8\x3d\x37\x98\x03\x8f\xc4\xa5\x7b\x3f\xe6\x19\x62\x3d\xc4\xd6\x4b\xcc\x3e\x0b\x96\xe9\x8c\xa6\xba\xbb\xc9\xe5\xd8\x3d\x79\x03\x18\x57\xb3\xab\x65\x95\xed\x3f\xf0\x20\x44\x37\xc0\xa9\x4a\x71\x3d\x60\x8d\x31\x71\xd6\xf1\xb2\xa6\x60\x67\x77\x61\x5d\xdd\x13\xf9\x33\x4b\x45\x4d\x92\x51\x4f\x8f\xdf\x5c\xdf\x1b\x62\xf4\xa2\x1b\x08\x40\x98\x6e\xdc\xee\xbd\xe7\x14\xb0\x29\x3f\x11\x5c\x4e\xff\x5c\xba\x66\x46\x62\x90\x8b\x99\xbc\xb7\x52\x60\xb0\x55\xdd\xcf\xd3\x15\x74\x26\x83\x21\x10\xbd\xe9\x06\x02\x10\xaa\x9b\x3b\xfa\x03\xda\x0d\xa7\x2e\x93\x87\x3b\x6b\xa4\xaa\x50\x7e\xfe\x74\x6c\xab\x32\x2e\xab\x74\xf2\x45\xcb\x10\x4e\x9d\x27\xeb\xc8\x0d\x18\x02\xd1\xab\x6e\x20\x00\xe1\xba\x99\x7c\x77\xae\x4e\x52\xfb\x27\xdf\x47\xfb\x9a\x92\x1a\x1a\xd3\x17\x84\x4a\xa3\x6f\x04\x22\xda\xc8\x4b\xf9\xae\xe1\x97\x31\xa8\x1b\xc1\x10\x88\xde\x75\x03\x01\x08\xd9\xcd\xdb\x8c\xe3\xc1\xdb\xaa\xc1\xe6\x0f\xf2\x49\xfb\xaf\x1a\xd7\x09\xcd\x9a\xea\x4c\x18\xb7\x1f\x71\x93\xe6\x8c\x98\x96\x7d\x4f\xac\x06\x43\x20\x7a\xd9\x0d\x04\x20\x6c\x37\x66\xf6\xea\x56\xec\x0e\x1b\xbb\x2b\xb3\x79\xae\x67\x0c\x68\xbf\x8e\x17\x8f\xcb\x9c\x0e\x91\x7b\xb2\xaa\xc7\x71\x92\x24\xd3\x62\x6f\xfb\x8e\xde\x76\x03\x01\x08\xdd\x8d\xc2\x87\x93\x6e\x07\x47\xcd\x0e\x3f\xb8\x42\xf6\x5a\x21\xbf\x79\xc9\x47\x3b\xe5\x6b\xf6\xe9\x21\x2a\xea\xcc\xcb\xe2\xcf\xdf\x49\xf1\xc2\x10\x88\x5e\x77\x03\x01\x08\xdf\x4d\x6c\xa4\xf6\x3c\x31\x05\xe9\x20\x8d\x41\xfe\xa6\xae\xb5\x75\x1d\x8b\x79\x56\xcf\x13\x3b\x8f\x56\x91\xbb\x37\xf8\x87\x99\x9f\x99\xc0\x10\x88\xde\x77\x03\x01\x08\xe1\x4d\xf2\x0f\xeb\x77\xb9\x03\xf5\x53\x3c\x65\x7d\x7e\x66\x92\x9f\x18\xbe\x52\x7f\xef\xb5\x75\x8e\x26\x1a\xec\xe6\x08\x23\x64\x26\xd9\x5b\xf6\xd0\x0b\x6f\x20\x00\x61\xbc\xb9\x5b\xfc\xf1\xee\x37\x4d\xbc\xc1\x4b\x2e\x25\xcf\xb4\x33\xf0\x55\xa5\xad\xab\xbe\x8e\x03\x2b\xd4\xb2\xe5\xd5\xf5\x34\x1e\x1a\xb8\x30\x04\xa2\x37\xde\x40\x00\x42\x79\x03\xb3\x1a\x9e\xf4\x33\x65\xa4\x5d\xce\xea\x3a\xc2\x93\x9b\xf7\x71\xb3\x58\xd7\xa9\xe1\x25\xe5\x83\x6c\xb7\x4c\x25\xa2\x6b\x54\x7b\x4f\x1f\xbd\xf2\x06\x02\x10\xce\x9b\xf9\x1b\xde\xef\x2b\x79\x49\x8f\x3f\xe4\x02\x1e\x31\xcb\x4d\xa8\xa7\xcf\xe9\xd6\xd2\x7f\x15\xa9\x24\x3a\x2a\x20\xcd\x96\xf9\x95\x00\x86\x40\xf4\xce\x1b\x08\x40\x48\x6f\x12\xf0\x42\x81\xe7\x0f\x3f\xe5\x6c\x8b\x89\x86\x9d\xfd\xe2\xd3\xa9\x91\x60\xfd\xe1\xc2\xd1\x6f\xdf\xb8\x82\xd3\x2b\xf8\x15\xde\xd0\xc2\x10\x88\x5e\x7a\x03\x01\x08\xeb\x8d\xd4\x8a\x52\xe9\x12\x63\xc8\xe4\x50\x65\xb0\x0f\xde\xd3\x14\x82\x30\x76\x2b\xe7\x5a\x50\x42\x5b\xf2\xca\xcc\x2c\x70\xf7\x19\x15\x0c\x81\xe8\xad\x37\x10\x80\xd0\xde\x78\x87\x47\x9a\x98\x05\x5c\xe6\x9c\x8e\x57\x18\x50\xf3\x8a\x69\xfa\xd6\x5e\xa7\x71\xe2\xc9\x82\xdd\xad\x70\xa7\xe3\x14\x67\x53\xf6\x8e\x22\xe8\xb5\x37\x10\x80\xf0\xde\xdc\x79\x11\x66\xde\xcb\x59\xa6\x32\xfe\x65\x79\xe3\x47\x78\x29\x03\xc3\x7c\x97\x4d\x52\x1f\x3f\x7b\x1d\x53\x43\x96\xa1\x58\x26\x1b\x0c\x81\xe8\xbd\x37\x10\x80\x10\xdf\x54\x7c\x9b\x72\xee\xfb\x5c\x9b\x9e\x7a\x30\xff\xa3\x65\x2f\x8d\xfd\xce\xc5\xeb\x7e\x4b\xc3\x3f\xab\xb7\xa6\x6e\xde\x4c\xa1\x7b\xc2\x0a\x43\x20\x7a\xf1\x0d\x04\x20\xcc\x37\x1b\x52\x17\x12\xd5\xa8\x5f\x2b\x5b\x67\x9e\xde\x3a\x46\x9a\x5b\x6c\xf7\x7a\xb0\x72\x84\xbb\x3d\x8e\x97\xfa\x04\xff\x4c\x54\xc0\xde\xa1\x1a\xbd\xf9\x06\x02\x10\xea\x1b\xd2\x68\xc6\x1b\xad\x7a\x6b\xfd\x8b\x6b\xe5\x39\xc9\xaa\x14\x3c\x31\x15\x53\xb6\xec\xe7\x96\xaf\x1e\xf4\x5b\xec\xa1\x94\x66\xd8\x3b\x88\xa2\x57\xdf\x40\x00\xc2\x7d\xa3\xa0\xc8\xc1\x49\x4e\xdf\xe8\xb4\x92\x5a\xb5\x21\x15\x30\xbd\x55\x7a\x2f\xc5\xa9\x35\x27\xe4\xe2\xa2\xf3\xcd\x61\x9f\x07\xe7\xa4\x60\x08\x44\xef\xbe\x81\x00\x84\xfc\x26\x87\xc8\x77\x23\x77\x48\xfa\x81\x8a\xe8\x03\x7e\x5c\x86\xc4\x22\x0b\xf9\xf4\xc9\xd2\x41\x92\x4b\x82\xc2\xee\xa1\x5a\x9e\x8a\xca\x30\x04\xa2\x97\xdf\x40\x00\xc2\x7e\xc3\xd2\xe9\x84\x2b\xfb\x5e\xf1\x52\x25\x33\x0f\x5e\x6c\xb6\x8b\x8e\x95\x1d\x51\xdb\xd0\x1c\x9e\x70\xde\x69\xa1\xec\x92\xe3\xe5\x56\x30\x04\xa2\xb7\xdf\x40\x00\x42\x7f\x73\xc0\x76\xe3\xe7\x9b\xab\x8c\x35\xf0\xe4\xd5\xf7\xef\x0b\xe2\xcf\xbc\x2f\xd3\x3b\xfc\x48\xfe\x4e\x86\x9f\x0d\xd3\x54\x50\x45\x1c\x39\x0c\x81\xe8\xf5\x37\x10\x80\xf0\xdf\x3c\xf1\x65\x91\x35\x31\x3c\x74\x29\x91\x1f\xef\xa0\x6e\x47\xcb\xd6\x70\xdf\x70\x73\x12\x4f\x00\x1e\xbc\xd1\x71\xba\xdb\xf4\x19\x0b\x0c\x81\xe8\xfd\x37\x10\x80\x10\xe0\x7c\xf4\xd0\x7b\x78\xa5\xe8\xe1\xed\xc1\x25\xb9\x17\xd7\x47\x02\x38\x93\x4c\xcb\xa2\x3f\x5f\x3b\x27\x28\x7d\xc1\xc2\x96\x6d\x5c\x69\x6f\x4e\x46\x2f\xc0\x81\x00\x84\x01\x47\xf6\xed\xb5\xdd\x83\x89\x3c\x39\xef\x8d\x52\xf8\x0a\xcb\xb7\xaf\x47\x48\x78\x29\x7b\xad\x5d\x70\x1f\x1c\xae\x7d\x7d\x46\xd9\x40\x07\x86\x40\xf4\x06\x1c\x08\x40\x28\x70\xb6\x87\x34\xcc\x62\x54\x45\x5f\xaa\xde\xfa\xd0\x91\x47\xbe\xd5\x4f\x6d\x27\xdf\x54\x81\x3b\x04\x0c\xb1\x46\x0f\x6c\x49\x77\xeb\xc1\x10\x88\x5e\x81\x03\x01\x08\x07\xce\x4d\x1b\x82\xc8\xcf\x16\x9b\x5c\x04\x4f\xde\x9a\xac\xd7\x15\xd4\x4c\xb9\x86\xf6\xe0\x7e\x49\xfa\x7c\x8e\xaa\xac\x6b\xb8\x40\x64\xef\xfb\x82\xde\x81\x03\x01\x08\x09\x4e\x32\x5e\xb9\x99\x01\xee\xfa\xd1\xa7\x78\x38\x7e\xc3\x1d\x75\xb3\xa3\x19\xdf\x6b\xf4\xc9\x62\x53\x79\x74\xc6\x99\xa9\xbb\x70\x68\x60\x08\x44\x2f\xc1\x81\x00\x84\x05\x67\x71\x65\xa5\xb0\x76\xf6\x4e\x71\xd6\x4e\x6d\xb3\xc8\x44\x69\xbf\x0a\xc1\xf6\xbc\xd3\x54\xc0\x06\x67\xed\xe0\x73\xdd\x56\x0f\x0e\x18\x02\xd1\x5b\x70\x20\x00\xa1\xc1\x29\x3c\x06\x9b\xaa\xa9\x84\x9e\x8c\x76\x54\x89\x93\x4e\x5e\x3e\x1b\x3a\x67\x41\xdb\xab\x4a\x18\x5e\x3c\x1c\x58\x69\x30\xc9\x29\x07\x43\x20\x7a\x0d\x0e\x04\x20\x3c\x38\x96\xab\x43\x78\x33\xa7\x05\x54\x09\x86\x55\x53\x5b\x57\x8e\x66\x7f\xf2\xb2\x6c\x9b\xf9\xe2\x1c\x5e\x15\x6f\x2d\x2c\x5e\xf3\xd2\x14\x86\x40\xd4\x1e\x1c\xcc\x81\x27\x0d\xae\xb7\x57\xca\xf0\xe6\xc8\xc4\x79\x7a\xed\x76\xf1\xb5\xfc\x9f\x61\xdd\xd6\xcf\x03\xc7\x7a\xd5\x09\xb5\x70\x92\x19\xe0\x87\xfb\x0f\x3c\x08\x11\x4e\xfb\x57\x9d\x37\xa6\x51\xaf\x2a\x6a\x9c\xaf\xcc\x34\x7f\x24\x3c\x34\x13\x52\x78\xb3\xaf\x4d\x5b\x86\xef\x5d\x9c\xd7\xae\x41\xe5\xde\x81\x07\xbd\x08\x07\x02\x10\x26\x9c\xac\xd4\x9f\xb3\x09\x4a\xdd\x69\x37\x58\x67\x74\xd9\x2e\xb0\xc5\x98\xe7\x7b\x93\xe2\x31\x5c\x21\x13\x89\xbe\x56\xb8\xfa\x92\x8d\x14\x86\x40\xf4\x26\x1c\x08\x40\xa8\x70\x06\xd5\x5e\xf9\x11\x31\x1d\x4f\x59\xab\x65\x33\x5a\xa3\xd9\xa0\xe2\x0a\x91\x16\x39\x16\x4e\xc3\xf3\x25\x89\xb4\xf9\x8e\xd7\xa1\x0b\x30\x04\xa2\x57\xe1\x40\x00\xc2\x85\x63\xfb\x32\xbe\x47\x4b\x8b\xbf\x39\xa4\x51\xc7\x3f\x4b\x2a\xb4\x7d\x63\xd8\x40\x4c\xf4\xa2\xab\x9c\x94\x18\x59\x60\x01\x77\x82\x31\x0c\x81\xe8\x5d\x38\x10\x80\x90\xe1\xa8\x37\xcc\x64\xe1\xe2\x5c\xa4\x4b\x85\x6a\x7a\x7e\xe8\xf6\x7e\x1e\x49\x04\x0a\xde\x6e\x55\xcf\x5d\xb8\x86\x67\x6f\x4b\xfc\x9e\x12\x86\x40\xf4\x32\x1c\x08\x40\xd8\x70\x06\x83\x28\x27\x99\xe3\x5b\x89\x72\x4c\x8c\x26\x12\x04\xdd\x38\x25\x0a\x54\x6f\xc7\xe5\x12\x3c\x90\x51\x3f\x74\x68\x29\x84\x4c\x0b\x86\x40\xf4\x36\x1c\x08\x40\xe8\x70\x6a\xd9\xbd\x72\xad\x7b\x97\xfd\x72\xdc\x06\xf1\x47\xdb\x7d\x89\x19\xa2\xbc\x1e\x3c\x08\x38\xbe\xf5\x3c\xa6\x47\x85\xfb\x52\x10\x33\x0c\x81\xe8\x75\x38\x10\x80\xf0\xe1\x64\x1c\xb8\xd2\x39\x96\x70\x7b\xc2\xec\xa8\x32\xfd\xb7\xe6\xe9\x37\xf1\xe7\x4d\xbe\xe7\x74\x5b\x96\xb4\x1a\x35\xd2\xd3\x37\x98\xa9\xc0\x10\x88\xde\x87\x03\x01\x08\x21\x8e\x84\xf1\xc5\x8b\x25\x29\x0f\x64\x71\xba\x4e\x5a\xa6\xbe\xbd\xf3\x9c\x4e\xe6\xf1\xab\x6a\x3b\x5f\xaf\x7a\x55\xb6\x8b\xba\x23\x57\xf6\x32\x86\x5e\x88\x03\x01\x08\x23\xce\x95\x53\x5d\xb6\xe2\xc7\x4f\x52\x17\x32\xd0\x28\x90\xd8\x04\x5e\x7e\xfa\xfc\x54\xc9\x8a\x1c\x4f\xcc\x1a\x6b\xf8\xcd\xee\xb6\x83\xc4\x30\x04\xa2\x37\xe2\x40\x00\x42\x89\x73\x34\x71\xf6\x4d\xdf\xa5\x63\xed\xdf\xa7\xf2\xeb\x33\x42\x6f\x9f\x0d\xcb\x91\x38\x76\x8f\xd6\x9e\xb8\xde\x79\x65\xfc\x1b\x8d\xd4\x21\x18\x02\xd1\x2b\x71\x20\x00\xe1\xc4\x61\xe6\x10\xe2\xc1\x27\xbf\x40\xcb\x39\x4c\x5c\xe2\xc5\x60\xa7\x02\x4c\xbf\x95\x08\x71\x4c\xe8\x6e\xb5\xa4\xd0\x93\xae\xb9\x46\x04\x43\x20\x7a\x27\x0e\x04\x20\xa4\x38\xde\xc5\x6c\x7c\x3c\x31\x6c\x5c\xf8\x3f\x34\xd5\x2a\x98\x3c\x63\x3f\xd7\x9f\xeb\x1d\x64\x19\xe6\xb6\xee\xb1\x1b\x68\x50\xda\x04\x61\x08\x44\x2f\xc5\x81\x00\x84\x15\x47\x6d\x9e\xf1\x21\x11\x27\xbf\xda\x40\xf8\xd9\xe4\x36\x7d\xd3\xe5\xa0\xbb\xa9\x31\x12\xb0\x66\x8a\xf3\x05\x4f\x09\xf5\xd2\x8f\x4a\x30\x04\xa2\xb7\xe2\x40\x00\x42\x8b\x73\xdd\x17\xd7\x91\x67\x5a\x31\x66\xdc\xb6\x27\xbc\xc7\x4b\xe9\x7c\x50\xd0\xa6\xb3\x54\xb6\x99\xb4\xc0\x94\x8e\x64\x8c\x19\xe7\xde\xf7\x05\xbd\x16\x07\x02\x10\x5e\x9c\xe2\xd8\xad\xd0\x89\xeb\xdd\x3d\xb7\x86\x46\xa2\xf5\xf8\xaf\x7c\x7d\x99\x63\xb1\x5b\x97\x7d\x8e\x48\x82\xbf\xdf\xb8\x4e\x51\x09\x80\x21\x10\xbd\x17\x07\x02\x10\x62\x1c\xd3\xc9\xcb\x9b\x4c\x1f\x3f\x47\x5c\x48\x3f\x79\xd7\x9f\xe5\x6a\x93\xe8\xb2\xa8\xce\x57\x5e\x8e\x1a\x07\xa6\xb1\x8c\xfe\xe7\xf7\xf6\x96\x3d\xf4\x62\x1c\x08\x40\x98\x71\xb8\xde\xdd\xdc\xce\x2a\x38\x5f\x7b\x2f\x9f\x45\xfc\x6e\x78\x71\xbe\xcd\xba\xed\xf9\xa1\xd2\xab\x9d\x2a\x54\x62\x5b\x61\x44\x44\xf4\x30\x04\xa2\x37\xe3\x40\x00\x42\x8d\x83\x3b\xfe\xb8\x68\xf0\xd1\xeb\x55\x05\xeb\xcc\xd0\xca\x09\x86\x86\x00\x35\xe7\x31\xd3\x03\x5b\x3a\xda\xe2\x1b\x5d\x65\xa9\x82\xa2\x30\x04\xa2\x57\xe3\x40\x00\xc2\x8d\x23\x9d\x2d\x5f\x2e\x95\xfb\xd5\x81\x9d\xc4\xec\x82\xa6\xa6\xef\x9d\x96\x0b\xc9\x4c\x5a\x5c\x37\x1a\xb9\x84\x09\x42\x4e\x67\x93\xf1\xc3\x10\x88\xde\x8d\x03\x01\x08\x39\xce\xf8\xf2\xad\xaf\x8d\xa6\xdf\x14\xce\x37\xf3\x97\xc3\x92\x1f\xb3\xcf\x28\x1e\xd8\x95\xa1\x3e\xb7\x5a\x71\x78\x62\xb3\x97\x6c\x45\x1e\x86\x40\xf4\x72\x1c\x08\x40\xd8\x71\x52\x0d\x2c\x59\x27\x88\x32\xe2\xa5\x8f\x99\x1d\x15\x61\x7d\xb9\x78\x1f\xcc\x4d\x38\xd0\x39\x19\x71\x2c\xc9\xa5\xa2\x4e\x61\x75\xef\xb8\x8b\xde\x8e\x03\x01\x08\x3d\x4e\x79\xa3\x6b\x5b\x52\x2d\x5b\x3b\x91\x77\xc9\x47\x36\x5f\xd2\x14\x2d\x7c\xe1\x17\x52\x49\xb2\xb5\xc2\x8c\xa2\x96\x26\x25\xdf\x70\x61\x08\x44\xaf\xc7\x81\x00\x84\x1f\xc7\xe5\x81\x7c\x31\xd3\xd2\xcd\x35\x5f\xde\xba\x4a\xdd\x73\xda\xf6\xcf\x9f\xc8\x58\xbb\x3d\x89\xe8\x76\xde\x75\xa4\x49\x3d\x2c\x29\x03\x43\x20\x7a\x3f\x0e\x04\x20\x04\x39\x44\x53\xcf\xcd\x6c\xd9\x34\x6e\x98\x1a\xa5\x8c\x16\xd4\x0f\x8b\xe9\x68\xe4\x98\x3a\x0b\xa6\x98\x91\x3b\xb9\xf7\xd4\x89\xb3\xf0\xc0\x10\x88\x5e\x90\x03\x01\x08\x43\xce\x47\xee\x19\xe5\x79\xe3\x97\x23\x89\xf7\x9c\x1f\x49\xb3\xde\xfe\xba\x78\xc0\x73\xe1\x96\x6c\x10\x27\x4b\xec\x01\xcf\x0a\xc6\xb3\xd2\x30\x04\xa2\x37\xe4\x40\x00\x42\x91\x53\x2e\xd0\x43\x6e\x96\x7f\xee\xac\x44\x30\x29\x15\x4d\xf0\x13\xed\x23\xef\xe5\xf8\x4f\x3b\x14\xb9\x93\xdd\x67\xc7\x75\x33\x88\x10\x82\x21\x10\xbd\x22\x07\x02\x10\x8e\x1c\x02\xb9\xc4\xb8\xa3\x49\x24\x21\xe5\x20\x9b\xc8\xfb\x4d\xe6\x65\x85\x3c\xef\xb0\xcb\xb8\x4d\xb7\x6d\xfc\x6a\x54\x9b\x4f\xaf\xec\xad\x2f\xe8\x1d\x39\x10\x80\x90\xe4\x64\xf6\xb8\x9a\x5f\x29\xed\xef\x05\x18\xa6\x8b\x4f\x14\xd1\xdc\xf2\x4b\x7b\xbf\x5e\x41\x4a\x51\xe4\x31\xd8\x89\x17\xcb\x4b\xaa\x0b\x43\x20\x7a\x49\x0e\x04\x20\x2c\x39\x13\xca\x69\x34\xb2\x27\xc8\x6e\xb5\x6a\x0b\xbf\x14\x4c\x74\xb6\xc5\x17\x3a\x3e\xc2\x95\xcd\xbe\x4e\xab\x10\x1b\xe2\xbf\x95\x77\x1a\x86\x40\xf4\x96\x1c\x08\x40\x68\x72\xf8\xf5\xc5\xda\x45\x3a\x22\xf3\x4d\x6f\x10\x0b\x5c\x4c\x5d\x16\xf0\x53\xb2\x28\x61\xe5\x33\xa8\x34\x1d\xe8\x74\xea\x25\xbc\x78\x19\x86\x40\xf4\x9a\x1c\x08\x40\x78\x72\xa4\x1d\x2c\x5d\x9f\x89\xd5\xbd\x83\x6d\x7e\x6a\xcc\xae\x8a\x2c\xc6\x07\x58\x1e\xaf\x7f\x34\xa7\x16\xc7\xd7\xef\xcb\x2a\xbb\x7e\x12\x86\x40\xd4\x9e\x1c\xcc\x81\x87\xbc\x99\xfa\xa5\x14\x3c\x34\xf8\x22\x24\x6e\x90\xc5\x97\xb6\xf9\xb0\xc8\xed\x23\x17\xbb\x8f\x5e\xe2\x95\x68\x2d\x4a\x0b\x51\x3c\xb9\xff\xc0\x83\x10\xe5\x5c\x20\x2c\x07\xcd\xfd\x19\x88\x0b\xc7\xde\x54\xfa\x1b\xea\x09\x1c\xbc\x97\x49\xf6\x58\xce\xa2\xd6\xe9\x09\x55\x02\x3d\x8d\x2b\x15\x0c\x81\xe8\x45\x39\x10\x80\x30\xe5\x8c\x11\x7e\x59\x35\x73\x72\xf5\x62\xbe\xe5\x71\xda\x81\xb5\x85\xa8\x37\x7b\x31\xd6\xf8\x5d\xf8\xcc\x27\xa2\x60\x17\xc1\x04\xf3\xb3\x30\x04\xa2\x37\xe5\x40\x00\x42\x95\xa3\x02\xb4\x27\x7a\xed\x5c\xb3\xf1\x86\xf9\xf0\xd9\xf9\x84\x6e\xea\x79\x7a\xc0\x3d\x0b\x3b\xee\x1f\xca\xe8\x78\x70\xbe\x6e\x9a\xc1\x10\x88\x5e\x95\x03\x01\x08\x57\x4e\x64\x86\xaa\xe0\x7b\xda\x2e\xde\x80\xc7\xf5\x06\xf1\xb2\xe3\xc5\x7c\x9e\xfa\x8c\x4f\x24\x03\xfb\x93\x41\xce\x02\x67\x77\xb9\xbd\x53\x38\x7a\x57\x0e\x04\x20\x64\x39\x45\x7d\x0a\x6c\x99\xbd\xc3\x91\x73\xe2\x4b\x94\x80\xd7\xb0\xcf\x9d\x9d\xde\xac\x70\xc5\xa4\x61\xd7\x33\x93\x62\xe6\x6c\x7a\x7b\xf7\x82\x5e\x96\x03\x01\x08\x5b\x8e\xd3\xea\xbb\x7c\xab\xca\x03\x97\xe2\xcf\x3d\x69\x6b\x9c\xe6\x22\x98\xcd\x8c\x11\xa5\x26\xde\x02\x54\xd2\xcb\x89\x05\xa2\x1a\xe8\x60\x08\x44\x6f\xcb\x81\x00\x84\x2e\xc7\xd2\x85\xfb\x6b\x4a\x9c\x94\xe6\xb3\x2b\x54\xd5\xc9\xa9\x80\x6d\xae\x44\xd9\x92\xa2\xdd\x63\x97\x2a\xfa\xc7\xa7\x9d\xd9\xbf\xe1\xc1\x10\x88\x5e\x97\x03\x01\x08\x5f\xce\x84\xdd\x60\xcb\xf4\xe2\x9b\xd5\x69\x5c\xbe\x6f\x57\x93\x54\x2f\xbf\x0e\xe9\x98\xfb\x78\xdb\x04\xba\xa6\xeb\x6b\x49\xbf\x4b\x71\x1e\x86\x40\xf4\xbe\x1c\x08\x40\x08\x73\x48\x6e\x72\x7c\xa4\x30\x30\xed\xc9\xe3\x6e\x2d\x9f\x38\xe7\x16\xe9\xb2\x7a\x76\x87\x5f\x07\x9f\x77\x52\xe5\x63\x1e\xa3\x8f\x25\x09\x0c\x81\xe8\x85\x39\x10\x80\x30\xe6\x24\xbb\xef\xbe\xd7\x92\x0a\xd0\x20\xb7\x3d\x5f\xfc\x6c\xca\x5a\x2b\xaa\x54\xd5\xe6\xce\xf1\x2e\x17\x81\xa5\x0d\x83\x4f\x8b\xda\x7b\x07\x1e\xf4\xc6\x1c\x08\x40\x28\x73\x5e\x0f\x13\xc7\xbf\xcd\x7d\xf7\x4e\x81\x9c\xcd\x50\x1c\x38\x7a\x75\x35\xe9\x5c\x5e\xe2\x95\x95\x70\x83\x67\x3f\x7a\xe3\xef\x6e\xef\x25\x19\xbd\x32\x07\x02\x10\xce\x9c\x7b\x2a\x52\x9f\xab\x71\x95\x69\xcd\x8e\x3d\xb5\x09\xbd\x6b\x75\x2f\x32\xb3\x61\x36\x2e\xc9\xb9\xed\xe7\x05\xfe\xfe\x12\x81\x63\xd4\x30\x04\xa2\x77\xe6\x40\x00\x42\x9a\x63\x95\x60\xd6\xc5\x91\xaa\xf9\xda\x4c\xcc\x40\xb3\x31\xbd\x37\xf0\xb4\xe6\x41\x39\x6a\x19\x51\x82\x14\xcf\xaf\xb7\x1b\x5e\x06\x9f\x82\x21\x10\xbd\x34\x07\x02\x10\xd6\x1c\xf7\x57\x21\x4b\x07\xbe\x1e\xdc\x7a\x4e\x00\x2b\xe8\x14\x09\x5f\x12\xa1\xa0\xe4\x9f\x2f\xaf\x6a\xc5\x6d\x9e\xe3\xee\xe6\x92\xde\x5b\x90\xd0\x5b\x73\x20\x00\xa1\xcd\xf9\x01\xe0\xf8\xb1\x38\x9c\x34\x5e\x7c\x70\x4f\x93\xee\x36\x23\x4f\x77\x70\xd1\xc9\x90\xe6\xb9\x6b\x94\x56\x03\xfc\x0b\x6e\x66\x46\x30\x04\xa2\xd7\xe6\x40\x00\xc2\x9b\x33\x2e\xc5\x60\x45\xa7\xdc\x3a\x5e\x92\x32\x02\xfb\x89\x1d\x3f\x97\x2d\x96\x6a\xe1\x46\x9c\x24\xa9\x72\xe6\x20\xa1\x80\x3f\xce\xde\x55\xd0\x7b\x73\x20\x00\x21\xce\xd1\xee\x16\xe8\x11\x4f\xf5\x57\x0a\x52\xb0\x94\x69\x3e\x76\x86\x42\x57\xa2\xe3\x6a\x34\x05\x5b\xe5\x93\x47\xc6\x84\x61\x44\xf3\x7b\xdb\x77\xf4\xe2\x1c\x08\x40\x98\x73\x94\x26\x3a\x5f\x3d\x92\xe9\x8f\xd4\x91\xad\x89\xdd\x72\x6b\x48\x53\xdd\x99\xed\xca\x7a\x72\xb6\xf0\x58\xd0\x22\xde\x97\xcf\xcc\x5a\x30\x04\xa2\x37\xe7\x40\x00\x42\x9d\x33\xad\x5e\x3a\xf6\xe3\xaa\xf2\x55\x60\xf8\xf8\x59\x9c\xac\xab\x86\xce\xfe\x67\x4c\x96\x6e\x0c\xab\x07\x07\x1a\x5f\xa9\x1d\xab\x77\x80\x21\x10\xbd\x3a\x07\x02\x10\xee\x9c\x4f\x64\xad\x2c\xdc\x46\x1d\x01\x19\x0d\x93\x96\x85\xcd\x7e\x41\x19\xf1\x71\xfa\xa1\x1f\x48\x05\xdc\xf5\xa8\xee\x7e\xf9\xd2\x7d\x02\x86\x40\xf4\xee\x1c\x08\x40\xc8\x73\x3c\x55\xba\xdf\x6f\x3e\x13\x39\x77\x8b\x1d\xa7\x24\xce\xb8\x88\xab\xb4\x9d\x07\x9a\x95\x08\x49\x3c\x8c\xb3\xa0\x98\x39\xf5\x9f\x57\xa7\xd0\xcb\x73\x20\x00\x61\xcf\xc1\xd3\xe5\xe5\x5d\x3e\xb1\x6b\xcf\x16\xcf\x1b\xea\xf7\xf3\x54\xf5\xb5\xa3\x05\xef\x93\x36\x77\xe5\xce\x15\x8c\xdd\x5a\x88\x35\x36\x81\x21\x10\xbd\x3d\x07\x02\x10\xfa\x1c\x69\x7d\xee\x9d\x2c\xe3\xc5\xb0\x80\xd3\xd9\xc7\x95\xa2\x23\xcc\x28\xb2\x2d\x22\x1c\x0c\xf0\x89\x2f\x0e\x97\x29\x0f\x94\x43\xc2\x30\x04\xa2\xd7\xe7\x40\x00\xc2\x9f\xb3\x74\xd2\xd9\x75\x78\x80\x2e\xd3\x4d\xf4\xd2\x20\x8f\xd9\xa3\x0f\xaa\x5a\x55\xcc\xdb\xf1\x21\xef\xa3\xd8\x8d\x5f\xc5\xf0\x5c\xbb\x04\x43\x20\x7a\x7f\x0e\x04\x20\x04\x3a\x9c\x2f\xe7\xb4\x3e\xcb\xbc\x35\x16\xdd\xe6\x54\xa5\xe7\x6f\x7b\x5a\xf9\x62\x66\x51\x33\x88\xf8\x1a\xbb\x6e\xf4\x6d\x4d\x7d\xfa\x73\x30\x04\xa2\x17\xe8\x40\x00\xc2\xa0\x73\x7f\xf1\xbc\xb8\x3b\x93\x2b\x64\x21\x35\x7f\x1a\x18\x63\x78\x54\x19\xdb\x4e\x18\xcc\xd5\x19\xd2\x48\x11\x7c\x4b\x98\xed\xbd\x36\x0c\x81\xe8\x0d\x3a\x10\x80\x50\xe8\x18\xf0\x7d\x5f\xf4\x19\x19\x95\x71\xb0\xb9\x2e\x9f\x9b\xbf\x4a\xcb\xbe\xf6\xe9\x6e\x26\xe1\xe9\xe3\x7d\xb3\xf7\xcf\x7b\x9c\xbb\x68\x0a\x43\x20\x7a\x85\x0e\x04\x20\x1c\x3a\x3a\x37\x18\xc8\xed\x32\xce\xa5\x50\xb1\x1f\x70\xfb\x5e\xfb\x2d\x23\xeb\xd8\x08\xcf\x72\x85\xf7\x87\x99\x40\x86\xf5\xdc\xe8\xcf\x84\x30\x04\xa2\x77\xe8\x40\x00\x42\xa2\x33\x23\x92\xf8\xa0\xf7\x4d\xd1\x7b\xb2\x25\x8a\x05\x9a\xaf\x4e\x87\x89\x19\xaf\xc9\xf3\x7c\x5f\x3e\x21\x20\x62\x3c\x73\x71\x80\x64\xef\xe9\xa3\x97\xe8\x40\x00\xc2\xa2\x33\x48\x10\xf7\x70\x9e\xa9\xfb\x5e\xe0\xcd\x3e\x45\x71\x28\x24\x25\xe4\xd5\xf5\x14\x3f\x35\x75\x45\xb7\xc2\xc3\xf3\xb4\xda\xef\xb8\x61\x08\x44\x6f\xd1\x81\x00\x84\x46\x67\xf7\xbb\x17\xce\x3b\xd5\x5a\xe9\x3e\xaa\xef\xe1\xe4\xd6\xaa\x7d\x2b\x49\x37\x9f\x2e\xb6\x5b\x47\xf2\xe1\x29\xb5\x97\xba\xea\x5f\x83\x21\x10\xbd\x46\x07\x02\x10\x1e\x1d\x7a\xb2\x0f\xd2\x83\x29\x4b\xa2\xb4\xd6\xa5\x1a\x0b\xdd\xc7\x14\x5f\xda\x54\xd9\x2e\xf4\xad\x3c\x53\x76\x1e\x71\x7a\x8c\x1b\xa6\x0f\x43\x20\x6a\x8f\x0e\xe6\xc0\x43\xc1\xe8\x16\xf7\x50\x99\x62\x72\xf6\x82\x10\xa9\x44\xdf\xab\x2d\xd1\x94\xf7\xa3\x76\xcf\xce\xe8\xbc\x7c\xf1\xcc\x9b\xc9\x70\x37\x6e\xff\x81\x07\x21\xd2\xf9\x46\x5b\x3d\xfd\xbc\x00\xbf\x45\x64\x87\x3b\x72\x53\x2f\x56\x9c\x4e\x22\x54\x55\x18\x4f\x8a\x3c\xeb\x5b\x6d\xf6\x41\x87\x01\x65\x18\x02\xd1\x8b\x74\x20\x00\x61\xd2\xe1\xad\xa8\x20\xa1\xaa\x6c\x29\xcc\x30\x7b\x72\x68\xd8\x39\x11\x5f\xc2\x55\xe8\x61\x98\x65\xdf\x8d\xab\x97\x2e\xdf\x2b\x3a\xba\xb8\x77\xda\x43\x6f\xd2\x81\x00\x84\x4a\xe7\x63\x11\xbf\xd5\x25\x91\x4e\xbd\x1f\xf5\x2c\x6a\x4b\x50\x09\x5c\xf3\x5a\x33\xf0\x92\xa6\x7b\x9c\x31\xe7\xbd\x37\x0c\x29\x6b\x7b\x4b\x05\x7a\x95\x0e\x04\x20\x5c\x3a\x11\x3f\xef\x90\x0f\x35\x67\x05\x45\x41\x3b\x75\x4a\x93\x0f\x6f\xe7\xf4\x3f\xb0\x0c\xe7\x0e\xbf\xeb\xfa\x6a\x21\x53\xba\x20\x44\x07\x86\x40\xf4\x2e\x1d\x08\x40\xc8\x74\x0c\x5e\x96\x09\x9b\x6c\xdd\xcf\xbf\x1d\x28\x75\xef\xad\x07\xbc\xfa\xe3\x64\xe3\x31\xba\x66\x29\xe0\xa8\xaf\xff\xdd\x90\x91\xb0\xbd\x83\x28\x7a\x99\x0e\x04\x20\x6c\x3a\xb6\x03\xfe\xd7\xd4\x6f\xec\x5e\xa7\xb7\x32\x58\xaf\x1f\xf8\x71\xa1\x2f\x12\xbf\x79\x44\xf2\xc8\xd3\x65\x9b\x03\x6d\x06\x34\xbe\x7b\xc7\x2a\xf4\x36\x1d\x08\x40\xe8\x74\x46\x44\x18\x3d\x82\x25\x62\x14\x2b\x6e\x9b\x33\xc5\x14\x56\x87\x68\x1f\x1c\x73\xdf\xa4\x51\x67\x67\xd0\xc5\xf9\x68\xff\xfd\x9d\x0a\x0c\x81\xe8\x75\x3a\x10\x80\xf0\xe9\x40\x2b\xde\xba\xba\xa3\x4f\x39\x9f\x72\x26\xfb\x26\xa4\xcd\x8c\xd3\x9d\x26\x9e\xb8\x61\xac\xf5\xf0\x66\xfa\xfb\xf6\x1f\xb4\xdf\xec\x61\x08\x44\xef\xd3\x81\x00\x84\x50\x47\x03\xd4\x36\x26\x7b\x49\x9d\xb7\x94\x40\x30\xc9\x19\x9a\x41\xfc\xb9\x61\x69\x85\xd4\xe3\x2d\x51\xeb\xcb\x0b\xb7\x9e\xf6\x1c\xc4\x85\x21\x10\xbd\x50\x07\x02\x10\x46\x1d\x26\xa6\xee\xb2\x93\x7d\xb9\x86\x17\x5f\xb6\xbd\xd8\xa4\x52\xe8\xef\xbe\x93\xe3\xd4\x50\x10\xf7\xf0\x12\x69\xfb\xf3\xae\x44\xd7\xbd\x0d\x1c\x7a\xa3\x0e\x04\x20\x94\x3a\x43\xb8\x79\x76\xcb\xb7\x3a\x73\xd7\xc9\xe4\xf9\x37\x54\xef\x7a\xe4\xd7\xe4\x2c\x11\x74\xd0\x10\x5c\x2d\xa2\x3b\xa0\x2f\xf0\x96\x0b\x86\x40\xf4\x4a\x1d\x08\x40\x38\x75\x34\x13\xce\x54\xde\xb7\x4d\x2a\x9f\xf5\x7d\x3e\xdb\x42\xea\x74\xa3\x9a\xb0\xa4\x67\x3b\x6a\x2a\x77\x6d\xe1\x55\x39\xd9\x61\xfe\x5b\x30\x04\xa2\x77\xea\x40\x00\x42\xaa\xe3\xf8\xe2\x2c\xe1\xe8\xfc\x25\xa3\x65\xad\xab\x52\xa6\xc7\xf8\x9f\xa9\xaa\xd1\x31\x33\xb9\xaa\xf3\x4d\x66\xc4\x42\x05\xbe\xee\x37\x61\x08\x44\x2f\xd5\x81\x00\x84\x55\x47\x2e\x4c\xf8\xa1\x13\x4b\x46\xfa\x4e\xe7\x9d\x69\x87\x83\x6e\xef\x0c\xd8\x97\xaf\xa9\xc8\xeb\x10\xf6\x1f\x3b\x2a\xcf\x29\xe8\xbb\x77\xa8\x46\x6f\xd5\x81\x00\x84\x56\x67\xad\xc4\x44\x77\xb7\x44\xf2\x0d\xa1\x94\x73\xd0\x60\x50\x2f\x79\xdf\xcf\xa7\xde\x06\xd4\x67\x39\x56\x47\x70\x3e\x84\x87\x98\xe8\xc1\x10\x88\x5e\xab\x03\x01\x08\xaf\xce\x4a\x67\xc8\x4f\x36\x9c\xe4\x6c\x53\xed\x87\xfa\x78\x9b\xe7\xb9\x82\x37\x29\x7b\x33\x94\x78\xd8\x14\x53\xc2\xc9\x9e\x24\x52\xd3\xc0\x10\x88\xde\xab\x03\x01\x08\xb1\x4e\xa4\xd9\x7d\xf1\xf2\x40\x03\xb9\x5a\x6d\x63\xc9\x9e\xba\x3a\x3f\x2e\x49\x4d\x1b\xc3\x26\x43\x40\xfd\x51\x70\xac\x92\x56\x85\x24\x0c\x81\xe8\xc5\x3a\x10\x80\x30\xeb\xd0\x5a\xe1\x4e\x69\x79\xb5\x9c\x21\xa1\x14\x31\xe6\x7f\x74\x56\xfa\xf8\xea\x96\x2c\xa5\xda\x57\xe7\xd3\x57\x36\xef\x5f\x14\xdd\x05\x60\x08\x44\x6f\xd6\x81\x00\x84\x5a\x27\x2d\xa4\xe1\x9b\xe3\x0e\x5e\x35\xb9\xb7\xc6\x87\x99\x89\xb0\x94\x69\xed\x65\x72\x92\xb1\x4d\x97\x4c\x42\xda\x9b\xcb\x9b\x52\x7b\xeb\x0b\x7a\xb5\x0e\x04\x20\xdc\x3a\xd7\xfa\x6a\x96\x1c\xc5\x0d\x6a\x5f\xae\xc4\xa4\x3d\x1c\xf1\x1d\x9d\x30\xea\xd9\x56\x1c\xde\xfd\xd1\x57\xad\x9c\x4c\x98\xf1\x88\x09\x86\x40\xf4\x6e\x1d\x08\x40\xc8\x75\x32\xcd\xe2\xa2\xe3\x66\xf5\x2c\x5c\x9f\x77\x70\x9b\xf8\x83\xd3\xaa\x8f\xbd\x1e\x31\xfa\x94\x34\x72\x58\x5e\x0b\x39\xb4\xcc\x63\x01\x43\x20\x7a\xb9\x0e\x04\x20\xec\x3a\x57\x3b\x44\x0f\xbe\x1d\x70\xfb\xf8\xfc\xcb\x37\xe9\x32\xe5\x60\x9d\xf6\xdb\xee\x46\x59\x57\xc3\xee\xf6\x08\x05\x47\x0d\x99\xc4\x9c\x81\x21\x10\xbd\x5d\x07\x02\x10\x7a\x9d\xcf\x37\x0e\x0e\x04\x43\x67\x7a\x0c\x29\xea\xe5\xbc\x53\xbd\xf5\x6a\x7c\x1e\xb8\x33\xae\xf7\xcc\x9f\x36\xbc\xd0\xca\x7a\x04\xe7\x0a\x0c\x81\xe8\xf5\x3a\x10\x80\xf0\xeb\x70\x17\xd5\x9f\x5e\x4a\x3b\x59\x67\x2c\xca\x6f\xc2\x41\x98\x6f\x79\xc6\x82\x26\x7f\xa7\x59\x7b\xd2\x52\x5e\x2a\xbd\xcd\x99\x85\x0f\x86\x40\xf4\x7e\x1d\x08\x40\x08\x76\xa8\xf0\x95\x3e\x93\x7e\x90\xd8\x62\xf6\xcb\xb6\x92\x9c\x7f\xdb\x44\x68\x22\x97\x03\x4a\x0a\xdf\xd4\xaa\xfb\xa9\xf9\x72\x99\x6d\x6f\xcb\x8b\x5e\xb0\x03\x01\x08\xc3\xce\xbc\x7b\x4f\xfc\x32\x41\x34\xc7\xad\x2c\x0e\xdc\xaf\xfe\xd7\xe8\xb5\xf2\xad\x0f\x77\x5c\x15\x53\x6f\xc6\xbf\x5d\x80\x6b\x32\x41\x0d\x43\x20\x7a\xc3\x0e\x04\x20\x14\x3b\xfd\x7e\xea\xb4\x27\x65\xc6\xd9\x0b\x68\x3d\x17\xd7\xc8\x48\x84\xd8\x89\x98\xeb\x8a\x07\x4f\x71\xb2\x3e\xc9\x7f\x9a\x59\x23\xb4\x77\x2f\xe8\x15\x3b\x10\x80\x70\xec\x80\x8e\x72\x6d\xb6\xe9\x9e\xbd\x82\xbe\xe4\x99\x49\xf6\x07\x9c\x44\xa1\x57\xfc\x61\x75\xe7\xa0\x9b\xc7\x7e\xa6\x3f\x28\x13\xdf\xdb\xc1\xa2\x77\xec\x40\x00\x42\xb2\x33\x12\x51\x7e\xd4\x39\x77\xca\xf2\x2e\xde\x87\x02\xef\x82\x0c\xf3\xf8\x4a\xc7\x71\xf5\xd7\x6f\x44\x45\xe0\x15\xa6\x10\xae\x8b\x14\x30\x04\xa2\x97\xec\x40\x00\xc2\xb2\x43\xbe\x48\x73\x36\x4e\x2d\x80\x77\xf7\xaa\x67\xc9\x32\x48\xc9\xac\x1c\x33\x23\xce\x1a\xa1\x26\x9b\x76\x80\xc9\xb4\xd6\x51\x91\x15\x86\x40\xf4\x96\x1d\x08\x40\x68\x76\xd4\xc0\x03\x2f\x55\x3d\x63\xd7\x02\x98\x5e\x0e\x77\x3b\x65\x8e\x2f\xde\x64\x19\x3b\xac\xea\x7d\xf9\x12\xb9\xf0\xe7\x9e\xf5\x2b\x46\x30\x04\xa2\xd7\xec\x40\x00\xc2\xb3\x23\xc9\xd7\x3f\x37\x4c\x0b\x9f\x03\x38\xd2\x58\x43\xec\x23\xc9\xe5\xe6\xb5\xfd\x83\x99\xe4\x8b\x9f\x7d\x9f\xeb\x03\xc3\x22\x40\x18\x02\x51\x7b\x76\x0a\x29\xff\x7b\xe0\xb1\x0b\x17\x6e\x7c\x2b\x6c\xe5\x48\x3d\x69\x5b\x68\xda\x69\xf2\xf2\xc4\x69\xeb\x52\xc1\xb4\x19\x9f\xda\x69\x31\xb1\x3e\x9b\xde\x04\x38\x96\xff\xf3\x09\x5d\x0e\x9c\xff\xd2\xdf\x5f\xba\xd5\xec\x0e\x9d\x6d\xcc\xfb\x51\xc3\xe9\x33\x24\x21\xc6\x70\xc6\x36\xe2\xa9\x77\x50\x90\xee\x28\xd7\x2b\xc6\x6b\xd7\x5f\xed\x43\x7b\xa2\xb6\x02\x2a\xfb\x16\x3e\xf1\x68\x50\x1b\x51\x24\x9d\x29\xdc\x89\x7d\x5b\x6c\xe0\xe0\x3b\x4f\x7b\x29\x3a\x40\x5a\xb8\x3e\x65\x1f\xca\xff\xe5\x6e\x9b\xdb\x67\xfa\xd3\x0c\x27\x09\x56\x74\x5f\x5f\x20\x2b\x61\xf8\xfa\x3d\x57\x36\x5f\xe4\x73\xb6\xe0\x93\xc9\x22\xde\xe8\x7d\x28\x3b\xa3\xcf\x84\x6d\x06\x19\x61\x6c\x8c\x7a\x1f\xf1\x63\x85\x98\x26\x2d\xf9\xa7\x19\xb8\x4f\xea\x3e\xf4\x4b\xae\x6a\x5d\x99\x2c\xd9\x87\x26\x9d\x0c\x26\x98\x79\x30\x59\x3c\x6f\xca\x83\x5f\x03\x70\x26\xce\x34\xae\xf5\x3e\x15\x29\x21\x2d\xb7\xcc\x09\x60\x3a\x31\xe5\xb0\x0f\xa5\x2a\x22\x57\xa4\xbb\xcf\xc8\x2b\xb7\x63\x86\xe7\x03\x90\x07\x09\x09\x6d\x5c\x6a\x3d\xe5\xcb\x47\x34\xe7\x52\xea\x4b\x9e\x51\xba\x0f\xad\x2b\x64\x38\x4c\x94\xc5\x9f\x16\x44\xbf\x2c\x10\x3c\x9b\x20\xd6\x92\x60\x4a\xb9\xda\x4d\xfa\x10\x74\x67\x93\x76\x5a\xc3\x19\xde\x87\x1a\xa8\x90\xcf\xdd\x5e\x7a\xba\xc2\xfa\x5e\xee\x38\x9b\xd8\xe5\x99\xf8\xa0\xc7\xba\xc4\xb3\xcb\xa5\x51\xac\xa7\x0d\x0c\xa5\x75\x9f\xef\x43\x4b\xef\x1d\xe5\x3a\x7c\x2e\x68\xad\xa2\x4f\x95\xb8\x25\x20\x46\xe9\x01\xe1\x3c\xd5\x55\x72\xe6\xb8\x5b\x02\xcf\xde\xa4\x9d\xab\xdc\xd9\x87\x36\x17\xd9\x2c\xae\x77\xd6\x90\x09\x0a\x6f\x4d\xaa\xc3\xf4\xe5\xaa\x4a\x6b\xc4\xa2\x9f\xfb\x74\x4e\x88\xd4\xa5\x4a\xf2\x9c\xc3\xdd\x87\x12\xe3\xd0\xcb\xf9\x8d\xbb\x1e\x8a\xcc\x3b\xfe\xe8\xad\xcd\x48\xe4\x5d\x77\x53\xce\x72\x1f\xc5\x46\xc3\x00\x4d\x83\x4b\x1c\x6e\x13\xfb\xd0\xd8\x1a\xaa\xee\x2d\x0a\x15\x82\x4e\xc7\x7c\x57\x47\x25\x65\x32\x69\x99\xeb\x2f\xf1\x4e\x05\x3d\xbf\x62\xa5\x79\xea\x36\x57\xad\xfb\x3e\xf4\x92\x5d\x22\x83\xdd\xd0\x05\x61\xfb\x24\xa9\x10\x07\x59\xb5\xb1\x49\x62\x85\xd5\xa2\x62\xc7\xd4\x06\xcf\xc7\xdb\x0e\x6a\xa7\x38\xf7\xa1\xc2\xf7\x15\x0c\x28\xca\x3f\x13\xac\x5b\x39\x44\xdd\xfd\xf6\x9d\x38\x4c\x7a\x65\x47\xbb\xe9\x61\x47\xdf\xdd\x94\x1a\x1c\xf3\xa4\x33\xfb\xd0\x1b\x36\xc2\x14\xb8\x7c\x5f\x67\x06\xb9\x6a\x56\x48\xe5\x6b\x72\x59\x68\x5e\x1d\xb9\xa5\xd9\x13\x50\x48\xc1\xf0\x42\xf2\xfb\x9b\x3b\xfb\xab\x4a\xfa\x3c\x74\xf9\x96\xec\x31\xb8\x8b\xeb\x93\xeb\x03\x5f\x8a\xbb\xfc\xc9\xaa\x9a\x31\xd3\xda\x44\xaf\x97\xfc\x84\x62\x00\xdb\x3e\x54\x43\x21\x43\x48\x26\x4e\xe0\xfe\x63\xdc\xd8\xb3\x0f\x8c\x37\x57\xcf\xd6\x69\xaf\x32\xac\x5c\xbf\x99\x47\x68\x75\x12\xa7\x52\x24\x72\x1f\x5a\xbc\x61\xe5\x20\xfb\x25\xb0\xb1\x6b\x8d\x79\x68\x32\xca\x03\xc8\x12\xa1\xad\xbc\xbd\x7a\xc7\x5b\xe0\x75\xe3\xe3\x03\x81\xbd\xab\xfb\x50\x60\xf9\x7a\xd7\x06\x53\x9c\xde\xf6\x7c\xed\x60\x37\xf1\xc7\xb2\x75\x8b\x9f\xaf\x0e\xb2\x38\x1e\xd2\xfb\xa2\x38\x71\xfc\xf5\x93\x87\xfb\x50\xf1\x46\xc6\xf3\x61\xa1\xea\xe6\x23\x90\xbc\xe3\x1d\x66\x19\x21\x1e\xcf\x4f\x65\xac\x89\x3d\x81\x65\xb3\x6b\x33\xef\x84\x7d\xf6\x8f\x80\xfa\x8f\xef\x38\x38\x72\x1a\x07\xdb\x01\xc1\xa4\x5b\xce\xb7\x06\xf0\x43\xea\x8e\x1c\x3e\x5e\x38\x49\x6f\xf2\x08\x08\x48\xaa\xd2\xde\x87\x8e\x88\xbf\x3f\xf7\xe6\xe2\xf4\x23\x17\x4b\x8e\x25\x47\x7e\x21\x91\x6c\x42\xb3\xc5\x2f\xc1\x03\x10\xb5\x9d\x4b\xa2\x02\xb0\x40\xb0\x0f\x6d\xb0\x48\x2c\x51\x7c\x1e\xb0\x51\x21\x12\x3d\xa2\x54\xaa\xf3\x23\x66\x21\xd1\x34\x86\xee\xf8\xa8\xfc\x89\x36\x5e\x89\x52\x69\x8d\x7d\xe8\xe4\xba\xc8\x67\x47\xbf\xfb\x87\x9b\x5d\x13\x2f\x9d\xb8\xf3\xd4\xfa\xec\xc0\xd7\xd2\x8e\xa5\xc3\xd3\x6f\x06\xc3\xa7\xe4\xb5\xd3\x74\xf7\xa1\xa7\x6c\xe5\x8f\x28\xd8\x0b\x9a\x1f\x92\x56\xf7\xe3\x62\xf7\x49\xbb\x74\xee\x59\xe6\x80\x5e\x63\x77\xee\x93\x35\xf1\xb0\x7c\x93\xe6\x7d\xa8\x40\x46\x9e\x97\x97\x4c\xf0\xee\x47\x43\xd3\x8c\xad\x8a\x27\x8f\x88\xc5\xfb\x4f\x3e\xe2\x37\xef\xd2\xeb\xd5\xfb\xf9\x8e\x68\x7e\x7f\x08\xe3\x49\x3b\xcc\xda\x2e\x7a\x3f\x6a\xe3\x1e\x3f\x52\x7f\x0a\xdc\x28\x8f\x51\x29\x0b\x55\xea\x4b\x97\xd0\x38\x45\x12\x6c\xba\xb8\xbb\x0f\x4d\x1c\x4f\x33\x53\x71\x1c\x38\x71\xf7\x89\xe5\xe5\xbe\x29\xd3\xea\x7a\x69\x5f\x41\x39\xe1\x9e\xfc\x51\x27\xa1\x5c\xca\x64\x0b\xb3\x7d\x68\x76\x9b\xaf\x00\xa7\x98\xf3\xed\x28\xdc\xdd\xe7\x2a\x07\x3f\xd8\x9b\xb7\x46\x57\x4b\x3e\x72\xbd\xea\x41\xf8\x69\x7d\x96\x43\xd3\x6d\xff\x17\x46\xd1\x2c\x58\x3c\x82\x4f\x6f\x31\xff\x07\x69\xf6\xd2\x93\x57\x8f\x8b\x47\xfd\x9d\x78\xfd\x73\x82\x5d\x17\x2c\x69\xd4\x64\x80\x7d\xe8\xfa\x61\xf6\x76\x86\x44\x59\xee\xcf\xd4\xa7\xdf\x6b\x3b\xd9\x6f\xbc\x19\x3c\x51\x40\xe9\xa7\xb6\x35\x69\xff\xee\x10\xc9\xa7\xac\x9f\xfb\xd0\xa6\xb9\xec\xb7\x67\x29\xbb\x40\xf2\xfe\xce\x61\x05\xea\x9f\x94\x0a\x0d\xf7\x96\x95\x26\x94\x6f\x51\x2e\x2f\x96\x9c\x68\xae\x13\xdc\x1f\x97\x92\xc8\xf4\xd6\x15\x12\x49\x3c\x8e\x8d\x67\xd9\x65\xd7\xe9\xe1\x1b\xa9\xf3\x4b\xa3\x6b\x25\x3c\x52\xfa\xc6\xde\x8d\x36\xe9\xfb\xd0\x22\xda\x84\x8e\x11\x66\xee\x1e\x67\xe5\x7e\xa5\x5c\xda\x55\x70\xae\x52\x3c\xfb\x6c\xe3\x08\x5d\x4a\x5a\x07\xfe\x02\x4c\xf4\x75\x1f\xba\xec\x77\x5f\xae\x33\x66\x2c\xb4\x5e\xc0\x52\xc7\x67\x2a\x86\xc2\x7e\x25\x30\x83\xe0\x1a\x81\x25\x81\x10\x33\x55\xd3\x74\x7a\xf1\x3e\x34\x59\xf6\x78\xa6\x5c\x9a\x34\x57\x81\x51\xf3\xfd\x41\x8d\xdc\x49\x29\xe6\x3b\x7a\xae\xed\x22\x9f\x43\x7f\xbe\x9e\x5c\x6f\x1b\xad\xde\x87\x6e\x24\x4e\x9b\xdb\x55\xa5\x73\x5f\x0d\x7e\x99\x28\x55\x65\x33\xe9\xc7\xb3\x10\x5c\x4b\xf2\x4c\x29\xe3\xda\x7d\x29\x20\x6c\xed\xea\x3e\x34\xa4\x8a\x9f\xfb\xed\xd3\xb2\x1e\xa1\x9b\xd4\xfd\x61\x2f\xc6\x02\x4f\xb7\x75\xda\xb2\xda\xa6\x3e\x53\x8e\xab\x51\x3d\x40\x21\x9d\xb4\x0f\xfd\x3a\x98\xec\x61\x4d\x03\xfc\x78\x91\xe7\xeb\x2c\x71\x29\x4d\x4c\xd2\xe8\xf1\xd0\xe2\x29\x88\xc2\xc5\x0f\x12\xbf\xdd\x24\x4c\xb2\x0f\x7d\xf1\x93\xa5\x8c\x2a\x67\x28\xec\xf8\x9b\x56\xf9\xc4\xa5\xeb\x02\x47\x1f\x24\x52\xf2\x1b\xe2\x5d\xd9\x61\x5f\x28\x9c\xf5\xfa\xb0\xb6\x0f\x7d\x6d\x6b\x77\x25\xb4\xe4\xde\x15\x3f\x0b\x26\xe6\xd5\x22\xe8\x79\x79\xba\x32\x7e\x02\xcd\x16\x6e\x8f\xda\x33\x05\xd3\xdc\xcd\xfd\xe3\xea\x1c\xbd\xb4\x74\x91\xdc\xb1\x6f\xc6\xda\x28\xc5\x73\x40\x4a\xfe\xee\x13\xf3\xf2\x47\x94\x53\x34\x72\xae\xd1\xca\x0c\x1c\x3b\xa3\xfb\xd0\x48\x4f\x9a\x8c\x93\x84\x13\x7d\xc7\xc1\xc1\x7a\xf1\x8d\xe4\x83\x47\xd6\x44\x68\x13\x18\xec\x59\x25\x79\xf3\xd8\x2c\x12\xcc\xf3\xf6\x4f\x44\x4b\x9d\xb2\xb7\x17\x05\x42\x8c\x4c\xc7\x6e\x4c\x4b\xf0\x9a\x04\xc7\x8d\x12\x5e\x24\x9d\x6b\x29\x53\xbf\xac\x3d\x7c\x53\x65\x79\x1f\xda\x51\xbf\x38\x64\x53\x1a\x78\xd8\x5c\x3b\x81\x66\x2b\x68\x56\x94\x9a\x25\xac\x2b\xfe\xdd\x25\xea\xef\x76\x84\xc0\x89\xe4\x37\x8a\xfb\xd0\xb9\x1b\x97\x68\x5f\x35\x15\x1b\x8b\xd7\xcb\x74\x6b\xad\xad\xbc\xbf\xca\xcd\xf7\xf2\xc9\x8b\x8d\xf7\x07\x5e\xbc\x5a\x1f\xad\xe5\x88\xfb\x7f\x87\x6a\x94\x0e\x24\xcf\xa9\xf2\x90\x27\x99\x1e\x7a\x30\x3a\xb8\xc6\x4a\xce\x58\xc1\xe5\xa6\xbe\x18\xaa\xc8\xda\x93\x7a\xa6\x20\xc4\xfe\x3e\xee\xbf\xdb\x0c\x3c\xd8\x57\x53\x32\x5d\x64\x88\x24\x5d\x65\x7c\x47\xa0\xbb\xe3\x6a\x16\x0b\xbe\xf6\xa2\x4c\xd3\xf5\x6e\x93\xaf\x9e\xd4\x1f\xc5\x81\xb7\x55\xfb\xd1\x9b\xb7\x12\x92\xb3\x4c\x3f\xa5\x3f\x28\x6d\x94\x28\x2c\xf0\x35\xbd\x2b\x7b\x9a\x41\xe9\x56\xa9\x66\x69\xf9\x9d\x9c\xd7\xed\xa1\x9d\x92\x92\xa4\xa4\xde\x92\x92\xfb\xfe\x0f\x43\xda\x1f\xe1\xc2\x8f\xf9\xed\xeb\x6b\xe6\x6a\x9a\x6c\x57\xc6\xb7\xd9\x88\xd3\x5e\xde\xfc\xa8\xa5\x19\xd0\x92\xfe\x6e\xc2\x66\xff\x56\xa3\x2d\xfe\x5e\x6c\x92\xc4\x64\xd7\x50\xbf\x62\xe9\x13\xfb\x2e\x85\x38\xd3\xb5\xb2\xd4\x9e\x96\x6a\x96\xbc\x8f\x4b\xf9\xad\x33\xd2\x28\xaa\xae\xe2\xff\xbb\x5b\xf3\x05\x71\x08\x7c\xa4\xce\x7b\xf9\x05\x49\x69\x49\x4a\xfe\xe3\x83\x3b\x7d\x09\xd9\xf6\xbe\x71\xa0\x76\xb3\x36\x39\xaf\xba\xcb\x51\xf4\x00\x33\x3f\x8e\xef\x63\xd6\xb4\xb7\xaf\x1d\xf9\x75\x77\xf9\x98\x50\x7c\x70\x6f\x39\x1c\x49\x1c\x1c\x1c\x79\x1c\xdc\xbd\x3d\x9f\xb7\xa4\xe4\x7f\xff\x0b\x92\xf1\x52\x02\x10\x57\x65\x6d\xea\xac\x90\xbd\x4f\x60\xb4\x9e\x5f\xc9\x2e\x10\x2e\xfd\x7a\x41\xd7\xfd\x00\x75\xf7\xc8\x03\x43\xf3\xd3\xc7\xbe\xee\x96\x8e\xfd\x85\xab\xca\xe2\x08\x4b\x22\x2f\xfb\x36\x82\x92\x5b\x3a\xdf\xe5\x41\xd5\xb2\xc3\xe4\x7c\x95\xe6\xbd\xac\x33\x23\xdf\x1b\xb8\x7b\x29\xb7\xe5\xf1\x54\xdd\x20\xd2\xce\xbf\x71\x59\x2f\xcd\xdf\x2e\x8b\xdb\x54\x49\x2d\x32\x21\x23\x1e\xde\x26\x32\x91\xd0\x5a\xc1\xb6\x53\x77\xcd\xbe\x6e\xfb\x4d\x93\xd1\xc2\xcc\x97\xec\x93\xc0\xc2\x5f\xb9\x5b\xc3\xdf\x2e\x0b\xda\xb0\xa6\x34\xca\xe3\x94\x36\xde\xa3\x09\x1a\xa8\x4d\xbf\x44\xd9\xc6\xa5\x40\xd5\xf4\x65\x7e\xb1\x78\x19\x64\x96\xba\x84\xff\x57\xee\xd6\xed\xb7\xcb\xf6\xdd\xab\x30\x9a\x4c\xbb\xe1\xc2\xd1\xf5\x9d\xc1\x6a\xb9\x9b\x49\xef\xde\x2b\x6d\x2a\x9f\xc7\x9d\x67\xfb\xda\x2e\x13\xae\x8c\x3d\xfc\xff\x7e\x59\xfd\x7f\x17\x5d\x5f\x3c\x7c\xc0\x47\x1a\x17\x07\xde\xbf\x10\x56\x32\x89\xa5\xc4\x37\x87\xf2\x0e\x3b\x93\x71\xd6\x39\xa9\x69\x76\x29\xed\xda\x54\x5c\x6c\x92\x22\x96\xb8\x77\x34\xe1\x99\x81\x97\xce\xbf\xe3\x7c\xa4\xbd\xfe\x51\x57\xd1\xcc\xa6\xfd\x9b\xeb\x0d\x5b\xf0\x99\xf9\xfd\xfb\xd4\x24\x0b\xe2\x67\xf9\x09\x28\xbc\xf3\x5e\x7d\xe1\xd0\x09\xf6\x7b\x71\x2a\x0c\x53\x17\x1b\xe7\x23\x8d\x83\xb7\xbf\xae\xfc\xe9\xeb\x4e\xce\xfd\x4d\xa3\x38\x2f\xd7\x13\xbe\xaa\x88\x10\x68\x1f\xa6\x7a\x96\xaa\xdc\x20\x0f\x9e\xb7\xf3\x7e\xf6\xa5\x78\x0c\x53\x17\x1b\xe7\x23\xcd\xfa\x8f\xcf\xbb\xf9\xaa\x5b\xb4\x43\x5d\x5f\xda\x85\x19\xaf\xe0\xbc\x40\x8a\x54\xfa\xb5\xb7\x96\x07\x27\x74\x08\xbf\x3d\x7e\x6a\xda\x93\x9c\xdc\x8b\xa9\x8b\x8d\x43\xd6\xcd\xd3\xa6\x3e\xd4\x72\x33\x55\x38\x32\x9d\x41\xe7\x36\xe7\x05\x3c\xad\x21\x93\x57\x27\x8c\x3b\x8a\x15\xa2\xba\x9c\x5b\xfd\xb4\xb8\xbd\x94\xfe\x1d\xb7\x57\xd7\x0b\xbe\x2f\xa5\x25\x79\x11\x07\xef\xb2\x08\x3d\xce\xde\xf3\x47\xa6\x41\xff\xdf\x4d\x26\x7f\xca\x81\x05\x01\x2d\xb7\x42\x2e\xb1\x39\xbf\x95\x07\x57\x79\xa7\x7a\x35\xc7\xe7\x77\x5a\x23\xe7\x5e\x19\x06\x15\xba\x92\x46\x3c\x9b\xe3\xc5\xdc\x3f\x36\x0e\x99\x83\xed\xd7\xd3\xaa\x27\xb7\x82\x69\x1d\x5d\x32\xa9\x7c\xe0\x14\x33\xa1\x84\x2b\x91\xae\xc3\x4e\xe1\x79\xa0\xb0\x36\xce\x08\x67\x23\xa6\x2e\x36\x0e\x99\x83\xa4\xb0\xe9\x0e\xfd\xc2\xd8\x8d\x09\x45\x99\x56\xbb\xf1\xe2\x44\xb6\xbc\x02\x9a\x2d\x56\x4f\x5e\x4d\xb5\x62\x8f\xe6\x70\xc7\x26\x4c\x5d\x6c\x1c\xf2\x79\x31\xf5\xbd\x9c\x0a\xa6\x90\x5e\xb9\xe6\x2e\x4b\x66\x90\xfe\xb2\xb0\xeb\xa7\x1a\xf9\x8b\xbc\xed\x7b\x5b\x8b\x6d\x79\x1b\x41\x41\xfe\x98\xba\xd8\x38\x64\xdd\xae\xce\xbb\x9b\x49\x21\x32\xdd\x3c\xaf\x5d\x1c\x98\x1e\xbb\xe5\x99\x65\x78\x0f\xdd\x2e\x2c\x9b\xf8\x98\xb4\x12\x55\x46\x57\x41\xe8\xa5\xf2\xef\xb8\xff\xe5\xe0\x3f\x4b\x08\xf6\x24\x60\x9b\xdf\xff\x94\x84\x60\xa2\x58\xdb\x06\xa7\x7e\xd1\xc7\xdc\xad\xa2\x3d\x8f\x2f\x55\xcb\x58\x05\x1e\x09\x3d\xb9\xa9\xe7\x4c\x32\x53\x94\x93\xbd\x41\x83\x19\x01\x6c\x1c\x32\x09\xf7\x44\x2e\x1f\x1d\x67\x48\x8d\x73\x11\x26\xfa\xa4\x50\xfb\x54\x75\xe2\x47\x47\xf6\x5c\x75\x3f\xa5\x75\x86\x4f\x75\x4a\xdc\x7c\x15\xa6\x2e\x36\x0e\x99\x84\x23\x39\xa4\x27\x0f\x75\x7c\x64\x8c\x5b\x92\xe6\x37\xeb\x90\x0d\x14\xca\x97\x67\x7f\x9e\xbb\x6c\xc0\xc0\xd7\xfc\xfd\x0b\xb1\x6a\x0f\xa6\x2e\x36\x0e\xf9\xc4\xfa\x38\xf8\xb2\xc2\x73\x78\x3c\xb8\x3e\x11\xe0\x78\x5c\x9b\x58\xe8\x8a\xe7\x10\x73\xd1\x36\x53\x39\x8c\x37\xef\xe6\xa5\xd0\xc2\x87\xa9\x8b\x8d\x43\xd6\x65\x91\x38\xbd\xf6\x10\x26\x9d\x77\xb0\x48\x3f\xf5\xc9\xa4\xcd\x36\x6b\x50\x97\x86\xc0\x9e\xcf\xfa\xf0\x43\xc2\x07\x71\x6c\x9f\x6d\xbc\x54\xff\x1d\xf7\xbf\x24\xfc\x77\x59\xc7\x1e\x05\x6c\x6b\xee\x9f\xa2\xe0\xc1\x1c\xef\xd2\xb6\xb4\xea\xd6\x5e\xfd\x31\xc2\x4f\x82\xc7\x74\x86\x50\x33\x6c\xfe\xd1\x61\xcb\xb6\x7b\xb6\xd2\x91\x32\x43\x4f\x31\x43\x80\x8d\x43\x46\x61\xd0\xd0\xd2\x8a\x55\xcc\x26\x14\x9f\x26\x83\xb1\xb7\x9b\xe3\x18\xc7\xb1\xe7\x3a\xd1\x38\x07\x58\x55\x0f\x3f\xf6\xe6\xc8\x48\xd8\xc1\xd4\xc5\xc6\x21\xa3\xf0\x35\xb5\xe7\xcb\x52\xf8\x2b\x42\xa6\x30\xb9\x47\x97\xbb\x8f\x3b\xda\x53\x87\xd3\xdc\x81\x33\x47\x24\xcc\xb2\xfa\x4f\xf0\xde\xf3\xc0\xd4\xc5\xc6\x21\x1f\x59\x79\x0e\x49\xdc\x13\x72\x06\x23\xce\x55\xdc\xf8\x42\x8a\x95\x8f\x5c\xef\xd4\xbf\x29\xbe\xb5\x1e\x48\x6d\xaa\x1e\x93\x89\xf1\xa2\xc0\xd4\xc5\xc6\x21\xeb\x1e\x1c\xaa\x52\x38\x50\x07\x8d\x85\xa9\x5c\xa3\xef\xed\xbc\x83\x5b\xbd\xc4\x9f\x5e\xd0\xc4\x72\x9e\xe5\x6d\xe5\xfd\x65\x7a\x9b\x6e\x4c\x14\xb0\x71\x98\x28\xfc\x67\xab\x85\x3d\x0a\xd8\xf6\x41\x7f\x8a\xc2\x78\x48\xcb\x91\xad\x3a\x93\x8f\x94\xb1\x13\x55\xbb\x74\x0c\xe3\x27\x69\x85\xd3\xf1\x27\x73\x7b\x79\x6d\x9a\x92\xbe\x7c\xbb\x25\x88\x19\x02\x6c\x1c\x32\x0a\xfc\xdd\x27\xbe\x32\x76\x89\x04\x95\x72\x8c\x8d\x5d\xbf\xcb\xae\x39\xa3\xc4\xe1\x1a\xad\xdd\x60\x79\x8a\xe4\xe1\x2b\x62\x9e\xeb\x74\x98\xba\xd8\x38\x64\x14\x2e\xb2\xab\x43\xf5\x51\xe6\x45\x8e\x16\x3c\x51\x6e\xf7\x8c\xe4\x8f\xbc\x0c\xed\x51\xe4\x7b\xf1\xd0\x75\xd3\x3a\x2e\x70\x57\x98\x08\x53\x17\x1b\x87\x7c\x64\xdd\x42\x55\x3a\x75\x5f\x85\xec\xab\x6e\x84\xb2\xfb\xc6\xaf\x76\x9c\x36\x62\x4f\x13\x0f\xb4\xbc\xdb\xf1\x6e\x43\x69\xb6\xf5\x02\x1b\xa6\x2e\x36\x0e\x59\x97\xd5\x21\x5c\x54\xa9\x47\xbd\xd0\xe5\xfa\x97\xcf\x52\xd6\xca\x77\x15\xa8\xcf\x4f\x24\x6e\xe7\x0d\x2e\x0e\xac\xf9\x74\x8b\xad\x7a\x62\xa2\x80\x8d\xfb\x35\x2b\x18\xfe\xab\x28\x60\xdb\x9b\xfe\x29\x0a\x91\x79\xe9\xde\x21\x17\x7b\x5a\x3a\x12\x9e\xf1\x05\x92\xbf\xbf\x28\xa4\x49\x57\xde\x66\xf1\x2d\x68\xfe\xdd\x4f\x8b\xfe\x18\x15\x7d\xcc\x10\x60\xe3\x90\x51\x68\xf4\xa1\x67\x4c\x1f\x4a\xc6\xa5\xd2\xf0\x78\x52\x48\xa4\x63\x20\xd8\xf2\x91\x42\xf6\x54\x46\x5e\x21\xbe\xb3\xc3\xed\x63\xfd\x30\xa6\x2e\x36\x0e\x19\x05\xa1\x29\x9b\xed\x59\x2d\x1a\xde\x0f\x5f\xf5\x28\x1b\x29\xb7\xc2\xbb\xc6\x78\x15\xaf\xf0\xbf\xff\xa9\x9b\x95\x1b\x35\x73\xed\x7b\x16\xa6\x2e\x36\x0e\xf9\xc8\x1e\x71\xd4\x8a\x65\x44\x0a\x95\xcc\xb7\xf2\xfb\x01\xed\x85\x15\xfd\xed\x0f\x75\x5c\x6c\x1a\xa7\xef\x7d\x10\x78\x2f\xcb\xd9\x41\x8a\xa9\x8b\x8d\x43\xd6\xcd\x4a\xf1\xd2\x6b\xcb\x0d\xa8\xee\xb6\x90\x03\x9e\x4e\x12\x52\x75\x5c\x14\x0b\x92\x5a\xd2\x33\x24\xd1\xac\x65\x33\x18\x71\xb6\xc5\x44\x01\x1b\xf7\x6b\x56\x70\xfb\x7f\x8e\xc2\xd5\x7f\x77\xc6\xf7\xc5\xc7\x03\x7c\x64\x71\x71\x70\xfe\xf1\x61\xa7\x57\xea\x1e\x79\xe5\xf3\x29\xb7\x7f\x4e\xac\xfa\x79\xb9\xb0\xd4\xfd\x67\x03\x9d\x13\x71\x95\x74\x1f\xe5\xfb\x6d\x53\x99\xd0\x2b\x5e\x57\xfe\x1d\xe7\x23\x8b\xe3\xf5\xcf\xca\x03\xc5\x73\x2e\x55\xaa\x27\x19\x78\x26\xbd\xc8\x09\xbd\x7a\x24\xe7\x49\xc7\xdf\x5e\xe8\x36\x6a\x83\x05\xbd\x8e\xe7\x74\x5d\xd4\xc4\x54\xc6\xc6\xf9\xc8\xe2\xe0\xfe\xb3\x72\x4f\x46\x92\xc9\x05\xc7\x36\x48\xc7\xf5\x08\x0b\xdf\xa5\xf3\x6b\x5e\x7d\xad\x93\x56\x5f\x49\x35\x5c\x86\x68\xaf\x93\x14\x08\x34\x62\x2a\x63\xe3\x7c\x64\x71\xf0\xfe\x59\x79\x55\x35\x59\xf8\xb6\x46\x6b\xab\x6e\x97\xcc\x16\xee\x0f\x6b\x17\xf0\xe6\xa0\x4d\x8b\xeb\x74\xed\x23\xbb\x9e\x0f\xf6\x5b\x83\xd2\x5e\x98\x3e\x0d\xb6\x7f\x89\xd9\xdf\x7c\xf1\x30\x74\xb5\x16\xf0\x7f\xc8\x61\xe2\xef\xc4\xdf\x92\xe3\x7d\xb9\xf3\xb2\x62\xf4\xa5\x77\x54\xc2\x61\xdb\x77\xc7\xdf\x9e\x7f\xc9\xb5\x0f\xfd\x41\x64\x36\xc3\x7b\xfe\xd9\x74\xd0\xe5\x98\x5b\xaa\x33\xc9\x5f\x2d\x98\x9c\x9f\xf3\x84\xd8\x97\x84\x16\xd5\x4a\xd2\xdb\x56\x73\xfe\x5f\xe9\xd3\xac\xe1\xff\xbb\x5b\xfb\xff\xf7\x69\xa4\xd5\x69\x90\x8d\x1a\x9d\xbe\xc6\x75\xc1\xb2\xd8\xee\x57\x21\xb4\xeb\x9f\x15\xea\xda\x49\x33\xb4\x74\xa8\x75\xa4\xeb\x84\x6e\x9a\xec\x9e\xb5\x37\xf9\x1b\x8d\x9a\x8a\xdf\x1a\x35\xfa\xce\x3f\x38\x8d\xd8\x58\x2d\x8e\xe8\xb0\x5a\x91\x16\x33\x31\xab\xa7\x2e\xbc\xb5\x99\xdc\x6e\xd2\x7e\xa0\x76\x9f\x9f\x33\xeb\xc1\xdf\xe8\x21\x48\xfe\xde\xa8\x79\x76\xd8\xba\x77\xf5\xc4\xa6\xb5\x5e\x21\xa7\x9b\x65\xca\xe1\xd6\xfe\xd2\x37\xd4\x16\x51\xf1\x8e\xc4\xf7\x27\x0f\x56\xbf\xe1\x53\xfd\x1b\x97\xad\xf8\xbd\x51\x33\xfe\x80\x23\xe7\x4e\x78\xc0\x51\xe7\x08\x2e\x62\xad\xf7\x1c\xbc\xe4\xdd\xcc\x09\xb5\x6e\xed\xf7\x24\xc9\xf4\x9f\xdd\x5f\xc1\x29\xfc\x2b\x77\xfb\x7b\xa3\xc6\x10\x4c\xa4\xf5\xe3\x52\x55\xb2\xcc\x9b\x20\x68\xba\xd2\xb5\xe3\x31\x53\x3e\xd5\x4e\x22\xaf\xb8\x32\x2f\x19\x4d\xe5\x7a\x7e\xe0\xaf\xdc\xed\xef\x8d\x9a\x0c\x97\x09\xcd\xa8\xae\xd3\xb6\x4f\x03\x06\x9d\xa7\x06\x55\x19\x1b\x64\x45\xcb\x13\x5e\x7c\x78\x3d\x37\x89\x23\x41\x08\x68\x2c\xff\xbd\x46\x0d\x96\xe8\xfe\x69\xd5\xed\xe6\xe0\x2f\x78\x5d\xb2\x2b\x39\xbd\x49\x12\xa6\x2c\x6e\xfb\xb9\x39\x6f\xc0\x5c\xfb\xf2\xf2\xc1\x33\xde\x34\xda\x20\x3e\x33\xf3\xaf\x8d\x07\x16\x0e\xb9\xea\x16\x0e\xb7\x0d\x66\x57\x34\x4b\xe7\xe5\x93\xc6\x7f\x38\xdd\x72\xa4\xe4\xb1\x11\xeb\x7b\xf7\x2a\x6d\xde\x50\x62\x32\x80\x9d\x7e\x0b\x53\x17\x1b\x87\x5c\x75\xd5\x37\xb7\x97\x69\xf1\x72\x4f\xde\x5a\x70\xb6\x82\x9a\x98\x89\x63\x53\xaa\x3a\x0f\xb6\x31\x91\x5f\xad\x64\xef\x1e\x52\xd3\x28\xc2\xd4\xc5\xc6\x21\x57\x47\x42\xcf\xe0\x1d\x92\x33\xe5\x5a\xf8\xfe\x47\x7a\xb6\x5b\x16\x04\xe7\x1d\xb3\x88\xf8\xb3\xd3\x57\xa2\x8d\x99\x6f\x46\x9e\x35\x38\x85\xa9\x8b\x8d\xf3\x91\xc6\xc1\xdd\x5f\x37\x9b\x84\xc5\x3d\xf7\x86\xb5\x8c\xd4\x7c\xde\x82\x28\x6e\x2e\xcd\x61\x9f\x87\xf8\x79\x44\x12\xef\x95\xbf\x85\x9b\xcc\x55\x85\xb3\x79\x29\xff\x3b\x6e\xef\xb9\x79\xc1\xf7\xf7\xe6\x2b\xec\xdb\x2f\x6c\xb3\xc9\x9f\x82\x10\x21\x4e\x96\x2d\x43\x9f\x6a\xa1\x25\x4f\xa8\x7a\xe5\x9b\xd3\x38\x8e\xaf\xe0\xd2\xeb\xcf\x07\x67\x0b\x82\x95\x6e\xf3\x6a\x96\x3a\x60\x06\x00\x1b\x87\x0c\x02\xcf\xc0\xf4\xda\x81\x12\x16\xae\xb7\x63\x74\x43\x47\xd5\x8e\x04\x55\x11\xf3\x1f\x3f\xf5\x25\x8b\x65\x7d\x46\xaa\xf5\x7b\x11\xfb\x20\xa6\x2e\x36\x0e\x19\x04\x33\x9a\x8b\x8d\xa1\x61\xb4\xf6\x7c\x74\x1f\xb8\x77\x65\xf3\xe5\x58\xc9\x68\x6d\xf3\x09\x73\x9c\x1c\x95\xc2\xb4\xed\xce\xe2\xba\x62\xea\x62\xe3\x90\x41\x28\x76\x00\xf5\xa8\x52\x79\x59\x55\xa9\x92\x1a\xa3\x44\xec\x89\x3b\xc9\xe9\xe4\x49\x84\x9a\xe9\x70\xf3\xc7\x26\xb4\x64\xdc\xa3\x30\x75\xb1\x71\xc8\x20\xc8\x06\x9b\x11\x7a\xa4\x6b\xdb\x8d\x6d\x66\x1e\xe3\x02\x45\x2f\xec\xd4\xc3\x45\x0d\x6f\x60\x89\x28\x8a\x75\x15\xff\x8a\x03\x34\x98\x4e\x0d\x36\xee\x7f\x41\xf8\xcf\x1a\x82\x3d\x09\xd8\x26\xf8\x3f\x25\x21\xf3\x5c\xda\x45\xef\xeb\x82\x76\xbc\xbc\xe4\x21\x8b\xe7\x3f\xf9\x0d\xeb\x54\xd7\xbb\xd4\x37\x36\xd7\x1f\xa2\x7d\x54\xd2\x53\xf9\xeb\x4c\x86\x8d\x43\x26\x21\xca\xb9\x98\xa2\x84\xc4\xfe\x22\xdb\x39\x78\x38\x81\x8f\x86\xad\xc7\x38\xa8\x49\x76\x54\xab\x5d\x9e\xd3\x64\xb9\x2d\x6d\x26\x1d\x53\x17\x1b\x87\x4c\xc2\x80\x51\x4b\x9c\xea\xee\x9b\x9e\x23\x6a\x8f\x2d\x46\xf2\xc6\x71\x1a\x04\x6c\xd3\x9b\x8a\x44\x66\xf0\xcd\x3b\x4c\x94\xa2\x5b\x1b\x30\x75\xb1\x71\xc8\x24\xe0\x7c\xb9\xa3\xa1\x44\x3d\xb2\x04\xc4\xb6\x7c\x5e\xcb\xa7\xa1\x2c\xf2\x91\x6b\xbe\x4c\x51\xf7\x35\x6d\xbc\x35\x95\x62\x44\x39\x06\x53\x17\x1b\x87\x4c\xc2\x97\xe9\xf7\xb2\x03\x19\x3a\xb3\xeb\x5e\xd4\xcd\x27\xc4\x52\xea\xc2\x61\x0f\x8f\xf3\xc1\x06\x1f\x4a\x0a\x5c\x0b\x7f\x1a\xab\x73\x60\x36\xe2\xd8\xb8\xff\x25\xe1\xbf\xeb\x3a\xf6\x28\x60\x5b\x74\xff\x14\x85\x54\x3d\xf7\xc7\x02\x2e\x84\x3c\xdc\x95\x50\x8b\x53\x0f\x47\x4d\x48\xa8\xab\x96\xb3\xf2\x09\x20\x9a\x3a\xe7\x94\xe9\x0f\xc3\x7a\xcc\x10\x60\xe3\x90\x51\x78\xc9\x2f\x3f\xad\x4e\x73\x6b\x24\xfc\x47\xe4\x8c\x64\xec\x66\x53\x59\xfb\xeb\xf9\x49\xeb\x77\x57\xfa\xbe\x08\xce\x1a\x3b\xb0\x41\x98\xba\xd8\x38\x64\x14\xe2\x9d\x0a\xeb\x0f\xd2\x09\x5e\x53\x5d\xb0\xee\xa9\x13\x51\x78\x02\xec\x72\x0c\x45\xaa\x9c\x19\x3c\x67\xae\xd5\xd6\xa5\x8f\x03\x62\xea\x62\xe3\x90\x51\x50\x49\x69\x7a\xc0\x46\x7d\xa5\x78\xb3\x33\x2e\xcc\xe3\x5a\xe5\xdd\x00\x97\xa4\xbc\xe7\x15\x65\x32\xbc\x66\x01\x7d\x31\x42\xf6\x0c\x98\xba\xd8\x38\x64\x14\xa6\x25\xac\x6f\x1e\x9c\x7d\xcb\xd8\x34\xc8\xcf\x63\x92\x20\xfb\x5a\xa7\x87\xf2\x6d\x46\x8a\x96\x95\xe0\xcc\xcb\x96\xed\xce\xea\x6a\x4c\x14\xb0\x71\x98\x28\x54\xfc\xbb\x4e\x0d\xb6\x8d\xd0\x9f\xa2\x10\xfa\xe3\x32\x8f\xb7\xae\x35\x71\x6c\xa6\x77\x52\x6d\xe2\x81\xde\x74\xdf\x12\xee\xef\x0c\xef\xbe\x3a\x6d\xfa\x38\x6c\x9c\xb9\x64\x8a\x19\x02\x6c\x1c\x32\x0a\xe7\x02\x12\x9f\x52\x35\x05\x7e\xda\xba\x36\x0d\x33\x1e\xf4\xce\xbd\x1e\x3f\xa7\x59\xf7\x5d\x9c\x6b\xb7\x5c\xae\x4a\x70\xbd\xf7\x57\xff\x16\x1b\x87\x8c\xc2\xe1\x0c\xc3\xc1\x26\xd6\x25\xc1\xb7\x6f\x6d\x5f\x09\x45\x4f\xbc\xfd\x76\x91\x64\x47\x5f\xac\xc2\x2c\xb1\x65\xf1\x8b\x62\xfe\xf2\xaf\xe3\x39\x36\x0e\x19\x85\x1f\xc2\x21\xba\xfe\x31\xb6\x6e\xd5\x51\xea\x65\xbd\x6b\x41\x06\x2d\xf9\x38\x57\x45\x8b\x15\x44\x5e\xa8\xce\x53\x09\x1f\x70\xfa\x84\xa9\x8b\x8d\x43\x46\x61\xc3\x7b\x56\xe4\x41\xed\xe7\x57\x22\xca\xea\xd6\x99\xb2\xfd\x6c\xf1\x9e\x85\x1f\x6e\xf1\xf3\xbe\x27\xf4\x7c\xa3\x39\x1a\xd4\x36\x80\x89\x02\x36\xee\xd7\xac\xf0\xef\x3a\x35\xd8\x36\xa7\x7f\x8a\x42\xfb\x2a\xdd\x06\x73\x61\x8e\x32\x48\xdd\xa7\xfc\xd0\x8f\xba\xe7\xde\x7a\xfe\x6b\xc1\x77\x47\x2b\x83\xf0\xeb\xa6\xc8\xea\x4c\x47\x31\x43\x80\x8d\x43\x46\xa1\x68\x9e\x75\xcc\x71\x21\xdc\xce\x42\x8c\xd7\x73\x20\xb7\x47\x54\xc3\xe3\x85\x73\x68\xd9\xfa\xcd\xe4\x4d\x2e\x26\xce\xc3\x6f\x7f\xb5\xc6\xb1\x71\xc8\x28\x30\x44\x5d\xd6\xa9\x1c\xb0\x49\x95\x60\x3c\x96\x42\x7b\xfd\x14\xf1\x4e\xce\x9d\x0b\xb1\xb5\xc7\xbc\x07\x22\xe4\xab\x6e\x13\xa4\xe3\x63\xea\x62\xe3\x90\x51\xf8\xd4\x94\xc4\x78\x46\xbb\x61\xe9\x6a\x12\x61\x1a\x23\xef\x9d\x68\xa2\x2b\x07\x8b\xcc\xef\x4c\x08\x76\x08\xc9\x1b\x0a\xe5\xde\x25\xc3\xd4\xc5\xc6\x21\xa3\xc0\xb0\x29\x02\x3e\xbe\x27\x5c\x54\x4f\xdc\x7b\xfa\xbe\x65\xec\x33\xbc\x90\x2d\x48\x25\xb6\x97\xee\xdd\xba\x0d\xfe\xc3\x9e\x75\x3c\x4c\x14\xb0\x71\xbf\x66\x85\x7f\xd7\xa9\xc1\x76\xca\xff\x73\xa7\xa6\xcc\xb3\x53\xec\x9b\xe0\x93\x1a\xf5\x4c\xea\xd6\x4c\x1a\xf3\x5e\xee\x64\xc3\x4a\x97\xaa\x8a\x3a\xfe\x73\x37\x4c\xc4\x9f\x5b\x1c\xc7\x74\x3d\xb0\x71\xbf\x77\x6a\xfc\x96\xfb\x93\xf8\x63\xab\x5b\x23\x2d\x9f\x16\x1c\x85\x36\x6f\xdc\x2b\xd0\xef\xe4\xe7\x8a\x97\xb8\x7a\x5f\x9e\xe3\x41\x59\xeb\x3a\xa6\x32\x36\xee\xf7\x4e\xcd\x23\xad\x50\x95\x66\xbf\xab\x6e\xc7\x70\x28\xef\xe7\x4c\x7f\x23\xff\x96\xdc\x69\xce\x6b\x14\x98\x51\xb6\x36\xca\xda\xa9\x1f\x77\x1e\x53\x19\x1b\xe7\x23\x8b\x43\xf9\xcf\xca\xfa\xda\x6e\x47\x1f\xa4\xee\x2c\xed\xe8\x3d\x2d\xac\x2a\x78\xf4\xe2\x88\x9e\x6c\xfc\xdd\xed\x58\xd5\x0b\x49\xb6\xeb\xad\x83\x65\x64\xbf\x3a\x35\xd8\x5e\x84\xdd\x7f\xe2\x1f\x4f\x75\xbe\xf0\xd2\x50\xb4\x2c\xb7\x3b\x37\xc8\x74\xb4\x46\xfc\x14\x8b\x60\x8e\xd1\x04\xb5\x3c\xe5\xf5\xac\x55\x5b\x4b\xc6\xfd\xcd\x94\xb8\x54\xa5\xe8\x57\xed\xad\x3e\x46\xbe\xd5\x8d\x55\x52\xcb\x27\xae\x90\x24\x7e\xd0\x38\x0f\x0f\x09\x0b\x92\xaa\xc4\xae\xf0\x36\xfc\x5f\xeb\xd4\x60\xbb\xb5\x7d\x9d\x9a\x50\x64\xa7\xe6\x3c\x73\xc4\x8c\xbf\xd9\xfa\xea\x37\x3c\x38\x3c\xe8\x0b\x7b\xa0\x31\x6b\x79\x89\xe3\x85\x3c\x1f\x92\xcc\x1b\xc5\x5f\xba\x1c\xff\x46\xcf\x44\x06\x47\x19\x79\x9a\x17\xb4\x4a\x30\x3a\xbf\x13\xfb\xbd\x42\xb5\xa3\x9b\x3b\xe4\x54\x64\xff\x74\x64\xdf\x85\xda\xbe\xec\x20\x63\xfa\xfb\xcf\xcc\xb5\x36\xff\xca\xdb\x1e\xbf\x77\x6a\xe0\xf2\x1b\x8f\x6c\xd8\x06\x0e\xe9\x38\xb3\xae\x38\x5c\x4c\xa6\x27\xf5\x57\x54\x8d\x60\x27\x7e\xb6\x40\x2b\xf8\xa5\x3c\x6f\x3d\xf1\xaf\xbc\xdb\x72\xe9\xb7\xcb\xda\x0c\x05\xe5\x0b\xa6\xdd\xea\x8f\x20\x8a\x17\xae\x78\x27\x67\xca\x12\x3e\x7f\x4e\x83\x70\xba\x6a\xe7\x6c\x63\x5b\xc2\x74\x44\xe8\x5f\xb9\xdb\xdf\x3b\x35\x3f\x49\x3a\x9f\x5f\x49\x7c\x92\x70\x44\xc2\x86\x6f\xfa\x25\xae\x95\xf0\x99\x5c\x07\x65\xaa\x8f\xf2\xaf\xd5\xce\x56\xf9\x9c\x4e\x5d\xfd\x2b\x77\xeb\xfe\xdb\x65\x9f\x0a\x7b\xa9\xf1\x7f\x51\xe3\x7f\x6d\x36\x4c\xa7\x8c\x5b\xaa\x7c\x95\x9a\x45\x90\x6a\xeb\x83\x7b\xb2\x5a\x80\xcb\x32\x97\xfd\xc4\x5f\xeb\xd4\x60\x8b\xee\x9f\x56\xdd\x43\x76\xd6\x66\x5c\x57\xaa\xc7\xce\x1c\xe4\x3e\xd4\x24\xf4\x46\x59\x7f\x77\x81\x56\xe8\x4a\x63\x14\x60\x79\x84\x7c\x6b\x87\xfc\x16\x66\xb5\xc1\xc6\x21\x57\xdd\xa5\x90\x2a\xbf\xde\xeb\xcc\xce\x77\xf9\x4f\x0c\x33\x92\xa7\xd9\x13\xaa\x5a\xa8\x74\x7b\xc4\xfc\x48\xf1\xee\xa3\xcb\x3d\x09\xff\xea\xd4\x60\xe3\x90\xab\xae\x71\xd4\x73\x9b\xc7\xfd\x6c\xd7\x65\xcb\x8e\xc9\x8d\xdd\xfe\x1e\x75\xd6\xe3\xce\xfc\x92\x12\x8b\xe9\xe9\x76\xfd\x55\xde\x89\xa7\xbf\xfe\x09\x0e\x1b\x87\x5c\x75\x63\x6a\x24\x52\xf2\xfa\x1e\xc8\x36\xcd\x68\xcb\xab\x50\x9b\x5f\x55\x35\x89\xc2\x13\x6b\xb7\x8b\x24\x30\xfa\x16\xb1\xb5\xd6\xe4\x87\xa9\x8b\x8d\xf3\x91\xc6\xa1\xdc\x5f\xb7\x81\xe5\xda\xe5\x0c\xd7\xc9\xfc\x77\x97\xee\xcd\xf8\xcf\x88\x46\x4b\x69\x87\x07\x4b\x88\xdc\x81\xa3\x48\x7d\x1b\xca\xfb\x96\xd5\x30\x9d\x1a\x6c\x9c\x8f\x34\x0e\xab\x17\x7c\x7f\x6f\xbe\xc2\xbe\xfd\xc2\x36\x9b\xfc\x29\x08\xfa\xd6\x5f\x4b\x8f\x16\x09\x99\x34\x12\xdb\xf9\x3c\x73\xf3\xf2\x31\x9e\xb7\x32\x93\x39\xd7\xde\x66\x91\xc3\x2e\xa1\xe1\x75\xb9\x06\x33\x00\xd8\x38\x64\x10\x5e\x1f\xe6\x72\x65\x6d\xbe\x06\x1a\xae\xe0\x5f\x4d\x66\xba\x7b\xec\xd8\x8f\x43\xfa\x36\x03\x13\xdb\x92\x43\xda\x3c\xb0\xde\xb6\x09\xa6\x2e\x36\x0e\x19\x84\x25\x73\x62\x21\xbb\x51\xf6\x93\x1f\x0a\x8c\x7b\x2c\xde\x74\x54\x39\xe2\x67\x71\xc4\xc5\x72\x7c\x0b\x8f\xc8\x83\x47\x27\x28\xed\x7f\x05\x0c\x0b\x87\x0c\x42\x68\xd5\x81\xdd\x4a\xfc\x0b\x6a\x67\xbb\x3c\x8f\x8f\x25\x73\xb8\x56\x8a\xe4\xa6\x26\xd4\x36\x6a\xd9\x3a\x59\x3d\x25\xfb\x40\xda\xf1\xeb\x44\x82\x85\x43\x06\xc1\x6d\x83\x12\x92\x1f\xf9\x54\xf5\x24\x5c\xe0\x9e\xd6\x42\xbc\x51\xb3\x1c\x59\x71\x9b\xdf\x41\x6d\xa6\x0f\xb7\xb4\xeb\x8c\x49\x7d\x31\x9d\x1a\x6c\xdc\xff\x82\xf0\x9f\x35\x04\x7b\x12\xb0\x4d\xf0\x7f\x4a\x02\xdd\xb3\x25\x46\x43\xda\xcb\xf4\x81\x1c\x43\x87\x42\xde\xcb\x89\x98\x3d\xde\x75\xf8\xb9\x50\x23\x15\x3f\xa9\x54\xd0\xec\x67\x3b\x87\x19\x01\x6c\x1c\x32\x09\x0b\xd4\x37\x49\xcb\x17\x2c\x84\x4c\x8b\x38\x3d\x1c\xea\x60\xab\xf3\xd5\x1c\x23\x2f\xb7\xee\xe9\x4c\xab\xf7\x2f\x3f\x5e\x4c\x1d\xc0\xd4\xc5\xc6\x21\x93\xf0\x4d\xa6\xe5\xc7\xc3\xed\x63\xdf\xc8\x4b\x86\x4e\xc3\xa5\xb4\x99\x27\xb3\xb3\x16\xd2\xb7\x75\x76\x9e\x08\xd2\xf1\xf4\xcd\x0e\xfd\x3a\x93\x61\xe3\x90\x49\xe0\xcd\x6f\x71\x7c\x9a\x75\xe6\xcb\xb0\xfb\xdb\xdb\x6c\x4c\x32\x0a\xee\x07\x18\x3a\x2a\x36\x82\xd4\xe9\x9c\x5d\xf4\x0d\xa9\x58\xac\x30\x75\xb1\x71\xc8\x24\x50\x92\x69\x9c\x10\x8b\x3c\x5b\xb6\xdd\x6f\x78\xe6\xfa\x73\xbb\xe1\x2f\x9e\xb3\xe0\x97\x43\x87\x28\xca\x46\xc2\xb6\x4a\x3c\x67\x2e\x62\x36\xe2\xd8\xb8\xff\x25\xe1\xbf\xeb\x3a\xf6\x28\x60\x5b\x74\xff\x14\x85\x66\x42\x09\xab\x88\xc0\x9d\xab\xdf\x94\x2e\xdc\xe9\x11\x62\xef\x7e\x34\x1e\x25\xf8\x8a\x9f\x23\xc6\xc4\x7b\xa1\xba\xb1\xdb\x54\x08\x33\x04\xd8\x38\x64\x14\x74\x97\xc9\x98\x1b\x43\xfd\xd9\xce\xb8\x7c\xaf\x3d\x4f\xfc\xfe\xc7\xa9\x93\xa5\x5e\x2a\xb1\xf5\x9e\x69\x6b\xef\x81\x0c\xe2\x95\x5f\xc7\x5d\x6c\x1c\x32\x0a\xb7\xf1\x0a\xb7\x2f\xd4\x52\x95\x4f\x76\xd5\x77\x38\xdd\xf1\x61\xb3\x05\xd7\x70\xde\x34\x14\xb2\x8a\x10\x8d\x1a\x9f\x5a\xf6\xfb\x75\x86\xc4\xc6\x21\xa3\x50\x51\x35\x71\x47\x21\x5d\xa7\x20\x7d\xab\xb5\xf2\x24\x67\xc2\x79\x43\xa9\x7b\x1f\xb8\x89\x1f\x19\x99\x26\x7c\xd7\x70\x4c\xbc\x2c\x80\xa9\x8b\x8d\x43\x46\x61\xca\x7c\xed\x44\xe1\xc5\xd7\x8d\x39\x7e\x56\x83\x43\x61\xbd\xc7\x06\xce\x5c\xd2\x92\x75\x5b\x3c\x43\x48\x1f\x18\x5c\xf5\x6a\x82\x14\x13\x05\x6c\x1c\x26\x0a\xff\xd9\x6b\x61\x8f\x02\xb6\x8d\xd0\x9f\xa2\x70\xda\x8e\xba\x22\x2b\xf0\x28\xe3\x81\x29\x11\xb1\x20\x6b\xed\x83\x01\x79\x3d\xe1\x0c\x3f\xd4\x8b\x4e\x18\xe2\xb4\xe5\xe0\x97\x1d\xc1\x0c\x01\x36\x0e\x19\x85\xc5\xf0\xdb\x05\x02\xf1\xce\x43\x49\x54\x38\x36\x9f\x34\xfa\x9f\xcb\x32\xf5\xe3\xe0\x17\x12\xe9\xde\x12\xba\xa2\xdd\xba\xc8\xa8\x89\xa9\x8b\x8d\x43\x46\x21\xae\xe4\x62\xa8\x69\x67\xfb\xe8\xb6\x79\xbb\xc2\x99\x63\x77\x86\x5d\xe8\xc3\x67\xa0\x46\x05\x66\x59\xed\x5c\xc0\xf2\xed\x83\x48\x4c\x5d\x6c\xdc\x6f\x2f\x52\x7c\xa4\xc2\x15\xba\x75\x94\x91\x54\xd4\xd8\xd3\x31\x66\x11\x6c\x38\x6a\x94\x36\x0b\x16\x82\x7a\xf7\x3d\x66\x84\xfb\xcf\x9d\xf9\xf5\x22\x05\x16\x0e\x19\x05\x3a\xce\xf4\x51\x36\x93\x87\x37\x5e\xc8\x4c\x84\x3f\x1a\xa9\x3b\xe6\xd3\x86\x77\xfe\x8e\xef\xd7\x9e\x53\x89\x53\x2c\x22\xcf\x38\xa3\x30\x51\xc0\xc6\xfd\x9a\x15\xfe\x5d\xa7\x06\xdb\xe6\xf4\x4f\x51\x98\xe4\x71\xcb\xbf\x23\x77\xd0\x02\xc8\x65\xbb\x13\x5c\xbf\x9a\xe5\xe3\xc4\x7a\x21\x8c\xff\xac\xba\x17\xce\x91\x3c\xd6\x89\x13\xbf\x3a\x14\xd8\x38\x64\x14\x0c\xa9\xbe\x54\x77\xca\x64\x79\x31\x45\x95\x76\xf0\x99\xcc\xe8\xa7\x9e\x27\xc6\x73\x6e\xd7\xf7\x2c\xa0\xb0\x21\x0b\xe7\x73\xc1\xc5\xd4\xc5\xc6\x21\xa3\x10\xaa\xe5\xa7\x91\xbf\x16\x27\x5c\xa0\x4c\x1b\x35\xc8\x26\xfd\x54\xd6\xf4\x79\xc5\x86\xa7\xfd\x37\xd2\xb9\xb8\x70\xb6\x86\xbe\xdd\x5f\x4b\x3a\x16\x0e\x19\x05\x47\x49\x4d\x2d\xf3\x19\x23\x75\xc7\x28\xa9\xb7\x5f\x6d\xd6\x53\x2d\x93\x9c\x0f\x30\x1c\xca\x75\x17\x8d\x1b\x97\xad\x70\x76\xd0\xc1\xd4\xc5\xc6\x21\xa3\x10\xab\x31\x92\xc6\xae\xff\x66\x94\x66\x96\x38\x6e\x91\xa7\x50\xdb\xf7\x5c\x8d\x54\x7b\x4c\x87\x4d\xc4\x8e\x45\xc2\x22\xeb\x84\x3c\x26\x0a\xd8\xb8\x5f\xb3\x82\xfb\xbf\xea\xd4\x60\x3b\xe5\xff\xb9\x53\x43\x9f\x88\x13\xfa\xbe\xe1\xb1\x86\x6b\x37\x48\xc1\x4f\xf8\x23\xdc\x2c\x21\x67\x27\x74\xea\x89\x62\x40\x6f\x59\xcd\x46\x6c\xaf\x3e\xa6\xeb\x81\x8d\xfb\xbd\x53\xd3\x57\x42\xf2\x3e\x92\xea\x85\xfe\x3a\xa7\xde\x98\x23\x6e\xae\x84\xde\x72\xc8\x47\x3f\xf2\xc9\xac\xf7\x6a\x6c\xc9\xe4\xbb\x1e\x65\x98\xca\xd8\xb8\xdf\x3b\x35\xf5\xd4\xea\x73\xf7\x13\x6c\x96\xf0\x99\x16\x0b\xd3\x70\x49\x42\x87\x48\x19\x22\x6e\x04\x36\xf5\xe4\x1d\x57\x0e\xab\xfc\xf0\xb8\x02\x53\x19\x1b\xe7\x23\xbb\x37\x92\xff\xe8\x2e\xb1\x4d\x9b\x30\xd8\xac\x3c\x8a\x59\x88\x1c\xa8\x0b\x64\xfa\x91\x2e\xee\x7c\xbc\xdc\x86\xfb\xbe\xf0\x26\x38\x95\xe7\x99\xf0\xf0\x57\xa7\x06\xdb\xef\x90\xf7\xf7\x19\xde\x06\xe8\x0c\xe5\xf6\x31\x07\x8a\x64\xfc\x6c\xb9\x70\x53\x45\x36\xa2\x7b\xbd\x95\x2e\xdc\x85\x78\xa3\x6f\x26\x33\x9c\xf9\x70\xd7\xfe\x97\x34\x5f\x10\xf4\x12\xdf\x9a\xef\x92\x0f\xd3\x73\x54\x33\xbd\x76\xbf\x55\x05\x6f\x9e\x90\xc8\xec\xe4\xd6\x8b\x1d\xae\xcc\x0e\x97\x33\xff\xd7\x3a\x35\xd8\x6e\x6d\x5f\xa7\xa6\x0d\xd9\xa9\xb9\xf8\xb2\xb9\x31\x77\x7a\x7e\xdc\x5d\xf6\x06\xe5\xba\xc6\xd6\xcb\x6c\x69\x45\xc7\x06\xe6\xef\x9f\x8e\xcd\x15\x97\x51\x2c\xf7\x39\xfd\x8d\x4e\x8d\xe4\x6f\x9d\x1a\xc2\xa6\xcb\x14\x2f\xa2\x5f\xcd\xcc\x25\x3f\xc9\xf3\x13\x1e\x79\x6d\xad\x50\xc0\x99\x79\xa4\x74\xb8\xf3\x90\xb3\x30\xc1\xd7\xb8\xb4\xbf\xf2\xba\xc7\x1f\xde\xa9\x31\x0c\x1b\x5c\xb0\xda\xde\x48\xca\xbd\xfe\xd8\xb4\x53\x97\x76\x36\xee\xca\xf0\x0f\x07\x5a\x19\x9d\x83\xd7\x08\xd2\x99\xc7\x3f\xfe\x95\x97\x5b\x7e\xef\xd4\x50\x2f\x7d\x26\x50\x9c\x92\xff\x72\xdd\x15\xef\xfe\xfa\x58\x59\xc1\xed\x30\xc8\xdc\xb4\xa6\xcc\xfc\x10\xf1\xb2\x6a\xad\xb9\x8d\xcd\x5f\xb9\xdb\xdf\x3b\x35\x11\x1e\x0e\xf2\x5a\x36\x6c\x32\x67\x75\xc0\xb1\xcd\x1f\xb4\x11\xf4\x84\x4f\xaf\x15\x03\x35\x19\x1b\x25\xfe\x2f\xd9\xcc\x57\x5f\xfd\x95\xbb\xfd\xbd\x53\xb3\xfa\xd6\xef\xc4\x0e\x27\xfe\x8b\x23\x26\x5a\x2f\xd4\x7b\xee\xf0\x7a\xb3\x4e\xf5\x12\xe7\x0a\x4c\xd5\xd6\x8e\x24\xe8\xb1\x88\x0b\xfd\xb5\x4e\x0d\xb6\xe8\xfe\x69\xd5\x25\x31\x8c\x18\x30\x2b\x11\x3a\xe7\xa5\x78\x31\xe4\xa6\xda\xfb\xd2\xf0\x2a\x27\xb6\x41\x9b\x73\x5d\x14\x9e\xd0\x9b\x1f\x8e\xc9\xbf\x7e\xec\x81\x8d\x43\xae\xba\x02\x13\x16\x5a\x70\x8f\xd1\x92\x88\xe7\xa8\x39\xef\x46\x56\xff\xe0\x05\x6e\xb8\xfb\x81\x6f\x72\x6e\xfe\x61\xdb\xea\xb1\x03\x25\x98\xba\xd8\x38\xe4\xaa\xbb\xb3\x3a\x78\x31\x2b\x86\x48\x21\xe1\x55\xaa\xa9\xb3\xff\xe4\xa9\xef\x13\xe9\x6d\xa6\x44\xe7\xb3\xe9\x75\x37\x37\xd9\xe6\x76\x9f\x63\xea\x62\xe3\x7c\xa4\x25\xff\xf1\x79\x3b\xf4\x94\x55\x47\xe3\xb2\x58\x2f\xeb\xeb\x57\x58\xdd\x9f\x2e\xb7\xde\xca\x5a\xa4\xbd\x1f\x08\x03\xdc\x29\x86\xed\x40\x96\x2f\xa6\x2e\x36\xce\x47\x1a\xf8\xe7\xcb\xdd\xe5\x8f\x8a\x36\xf9\x1d\xb8\xb4\x4f\xa9\x2a\xfc\x5c\x7b\xf2\x98\x9c\x86\x5b\xa2\xea\xf5\xa2\xc9\x8a\x3e\x55\x7e\x3c\xb1\x4b\x08\xa6\x53\x83\x8d\xf3\x91\xc6\xc1\xf5\x82\xef\xef\xcd\x57\xd8\xb7\x5f\xd8\x66\x93\x3f\x05\x41\x53\xc4\x57\xf5\x59\x26\x4f\xde\xe0\xeb\xeb\x82\xb0\xff\xc9\x48\xb9\xf1\x03\x16\xd2\x0b\xb9\x54\x55\xe3\x6f\x4c\xb6\x44\x1c\xa7\x30\x03\x80\x8d\x43\x06\xc1\x7a\xcc\xeb\x48\x91\x72\x62\xe8\x9b\x84\xf3\x77\xb4\x76\xbd\x26\xf3\x64\xb6\x77\xfd\xef\x7f\xf1\x24\xe4\xac\x7f\xed\x4a\x20\xf0\xeb\x1d\x15\x6c\x1c\x32\x08\x51\x61\x6e\x47\x0b\x06\xe5\xa9\x88\xc3\xb7\x5a\x39\xb7\xab\xbf\x7f\xe8\xfb\x68\x67\x85\x4f\x72\x42\x8d\x3e\xa7\xfe\x3d\x01\x71\xf3\xaf\x37\x34\xb0\x70\xc8\x20\xd8\x36\x29\x5d\x1e\x27\xe2\x54\x63\xea\x81\x4d\xef\x88\xe1\xaa\x7c\x91\xbc\x26\x60\x3b\x21\xab\x7f\x67\x36\x98\xe3\xb3\x66\x43\x1a\xa6\x2e\x36\x0e\x19\x84\x31\xad\xbb\x06\x5d\xad\x27\xa9\x6f\xa4\x50\x48\x76\xd4\xcc\x32\x7e\xe3\x8b\x25\x4e\xf1\x1d\x5e\xa0\x5f\x66\x75\xef\xe6\xc7\x6b\xc4\x74\x6a\xb0\x71\xff\x0b\xc2\x7f\xd6\x90\x7f\xf1\x4e\x0d\x96\x09\xfe\x4f\x49\xa8\xbd\x7a\x84\x3e\x8f\x3d\x4b\x83\xf7\x08\x21\x57\xf2\x83\x4a\x3b\xe5\xb7\xef\x9e\xdf\xd7\xef\x6e\xac\x78\x4c\x42\x5c\xdd\x52\xfb\xab\x19\x8a\x8d\x43\x26\x81\xfd\xea\x8b\x6c\xbd\x8b\x4f\xa2\x62\x12\xb7\x54\x9d\xb9\x2a\xe3\x34\xfd\x2a\x67\x2e\xac\x0b\xf6\xde\x9c\x76\x79\x6d\x73\x90\xb8\x0e\x53\x17\x1b\x87\x4c\xc2\x03\x9b\x56\x7a\x0f\x0b\xc3\x2e\x72\xf7\xe5\xd5\x78\x81\x0a\x66\xae\xa5\x0b\x21\x9d\x49\xd6\x8b\xa5\xae\xf5\xaf\xca\xe6\x0f\xbc\xc4\xd4\xc5\xc6\x21\x93\x20\x71\x74\xc4\x26\x87\x53\x84\xf5\xd3\x1a\xf9\x9c\xf3\xa4\xc4\x6b\xf0\x21\xc8\x66\x15\x3c\xe9\xd6\x73\xf6\xd6\x29\xed\xfc\x7e\x1b\x4c\x5d\x6c\x1c\x32\x09\x8e\x9b\xd3\xe5\xf4\x3f\xe7\x4f\x6e\xaa\x5d\x78\xab\x46\x30\x56\x3e\xe6\x38\x31\x35\x52\xed\x6b\x9e\x77\x26\x7b\xf3\xe3\x89\xb5\x74\xcc\x46\x1c\x1b\xf7\xbf\x24\xfc\x77\x5d\xc7\x1e\x05\x6c\x8b\xee\x9f\xa2\x10\x42\x77\xbd\xe3\xee\xf7\xeb\x17\xb7\x8f\x69\x1d\xb8\xa5\x70\xe7\x9d\xae\x81\xee\x11\x99\x75\x1e\xbe\xe8\xaa\x97\x72\x79\xd5\x7e\x43\x98\x21\xc0\xc6\x21\xa3\x40\x1e\x13\x77\xfa\xf5\x39\x27\x02\x35\xb1\x8f\x0e\x57\x2f\x53\xfb\x51\xeb\x87\xd6\x57\xf3\x92\xbd\x4d\x26\x95\x06\x0f\x5f\xc1\xfb\xd5\xbe\xc5\xc6\x21\xa3\x10\xfc\x5c\xaa\x2e\xb3\x06\x37\x85\xb2\x0c\x27\xad\x47\xbf\x5f\x8f\x1c\xee\x68\x62\x19\x5e\x0e\xd6\x4d\x78\x5d\x9a\x7f\xaf\xfb\xe8\xaf\x1f\xee\x61\xe1\x90\x51\x50\x9c\xa6\x63\xe3\x0b\x3d\xd2\x71\xf6\xae\xa7\x1e\x8d\xd3\x0b\xa2\xcf\xc7\xab\xb5\x23\x5f\x81\xde\x8e\x4f\x1d\x09\x2a\xcf\x0f\x9b\xff\xfa\x29\x2f\x16\x0e\x19\x85\x33\x9c\x37\x67\x92\xe6\x6e\x06\x1b\x7d\xcd\xe6\x25\x38\x6a\xfd\x4a\x2a\x42\x41\x60\x40\x33\xc7\xda\x51\xf6\xe8\xe9\x69\xe9\x71\x21\x4c\x14\xb0\x71\x98\x28\x48\xfe\xbb\x4e\x0d\xb6\x8d\xd0\x9f\xa2\x30\x5f\x13\xff\x70\xa5\xfb\x41\x78\xb4\x3d\x53\x38\x8e\x77\x64\x3e\xf7\x06\xb7\x62\xa4\x7d\x15\x15\x78\x98\xbf\xef\xd3\x4d\xe1\x40\xcc\x10\x60\xe3\x90\x51\x70\x8e\x1f\x7e\x24\xbb\x44\x7e\x72\x5b\x78\xae\xc4\x93\x3b\x53\xc3\x27\x2f\xd3\xd9\x7e\x95\x39\x90\xea\xde\xa4\x03\x2b\x6d\xd4\xaf\xfe\x2d\x36\x0e\x19\x05\xbb\x0f\x53\xb5\x3a\x37\xde\x5d\x38\xad\x49\xa3\xc9\xc3\x6d\x38\x7c\xc1\x26\xca\x53\xc6\xf7\x4e\x79\x1d\x1e\xb1\xf7\xed\x76\xbf\x5f\xfd\x5b\x6c\x1c\x32\x0a\xa2\xaf\xdc\xfc\x8b\xf4\x3c\x56\x98\xe4\x6c\xb4\xb4\x5c\x29\x88\x89\xda\x8b\xe2\xc6\x3e\x9b\x5c\xb4\x8f\xe9\xb2\x8f\x9b\x92\x94\xc4\xd4\xc5\xc6\x21\xa3\xc0\xe5\xfd\x61\xc3\x01\x7e\x7e\xdf\xb2\x2a\x53\xba\x82\x72\x2b\xc6\x96\x56\x63\x6e\xe8\x70\xc9\xeb\x17\x6e\x8b\x77\x18\x62\xed\x0e\x63\xa2\x80\x8d\xfb\x35\x2b\xfc\xbb\x4e\x0d\xb6\xcd\xe9\x9f\xa2\x40\xb5\x5d\x10\xdd\xa1\x38\x1c\x61\x61\xe5\x1d\xa1\x9a\x6a\xb3\x91\xa9\x51\x67\xe8\xfe\xaa\x29\xbb\xd2\xc1\xae\x71\x44\x6f\xf1\xd7\x0f\xe6\xb1\x71\xbf\x45\x41\x71\x30\x9f\xa8\x61\x97\xe7\xd5\xc5\x73\x1c\x8e\xe9\x2f\x96\x62\xd6\x76\x3f\x95\xf6\x2d\x50\xb7\x1f\x3a\xf4\xfd\x49\xd7\x69\xca\x5f\x51\xc0\xc2\x21\xa3\xc0\x61\xf8\xd5\xa2\x8f\xe2\x02\x65\x4e\xb6\x73\x43\x5e\x8d\x74\xca\x01\xdf\xf5\xc9\xc6\xcb\xeb\xe2\x96\x42\xec\x52\x66\xfc\x41\xbf\x5e\xba\xc4\xc6\x21\xa3\xc0\xeb\xa7\x1d\xef\x97\x49\x1b\x17\x30\xd6\x2e\xda\x98\xc6\x64\xe7\xd5\xbd\x70\x4c\xe6\xca\x70\x71\x0f\xe1\x72\x7e\x75\x61\xac\xfc\xaf\x56\x3e\x16\x0e\x19\x85\x66\xae\xe7\xd7\x99\xbb\xdb\xbf\x6d\x43\x13\x2d\xef\x39\x3e\xce\xb0\x3f\xe8\x8c\xf5\xda\xa5\x23\xd3\x0d\x5a\x39\xdd\x60\xa8\xad\x8a\x89\x02\x36\xee\xd7\xac\xf0\xef\x3a\x35\xd8\x4e\xf9\x7f\xee\xd4\xa4\xbc\xb3\x1c\x7a\x77\x3e\x25\x65\xf0\xb2\xbd\x53\x49\x12\xc9\xcc\xcb\x1c\x83\xb0\x40\x55\x13\x3a\xc1\xc2\xb1\x84\x40\x0b\xc9\x08\x4c\xd7\x03\x1b\xf7\x7b\xa7\xa6\xb2\xa0\x67\x20\xa5\x96\xf3\xd5\xdb\xac\xb9\x5a\x2f\xed\xe5\x76\x3b\xe9\x8f\xfa\x82\x97\x6b\xfd\xef\xda\xdd\x86\xae\xe9\x71\xe6\x61\x2a\x63\xe3\x7e\xef\xd4\x30\xdb\xf8\xc9\xa7\x57\x18\xf1\x13\x8d\x32\x15\x85\xfe\xdc\xb5\xba\x92\x1d\x70\xff\xf9\x61\x2b\x72\x62\xa6\xae\x08\xdf\x8b\xa2\xd2\x98\xca\xd8\x38\x1f\x59\x1c\x9c\x7f\x3e\xba\x87\x86\xd6\x83\x1f\xfb\x13\xf5\x5c\xbd\xea\x0a\x1c\xce\x78\x27\x56\x7d\x5c\xa0\x8e\xde\xbd\x42\xcd\x2b\xea\xff\x58\x67\x57\xbe\xed\x57\xa7\x06\xdb\x9f\x81\xdb\xdf\xa9\x59\x3c\x1c\x48\x41\x6a\xe8\xf6\x55\x6c\xfe\x28\xab\x9b\x88\x47\xff\xcd\x40\x8d\x19\x0e\xe0\x19\xc1\x77\xe3\x3b\xf2\x36\x0d\xde\x5f\xf6\xa1\xcb\x92\x78\x46\xad\xa6\xa6\x1d\x25\x35\xd6\xe3\x57\x9f\x67\xfc\x94\xf1\xb6\xf7\xf6\xb9\x7a\xe4\x00\xcd\xe3\xf1\xd3\xb7\x9c\x3d\xf9\xfe\xaf\x75\x6a\xb0\xdd\xda\xbe\x4e\x0d\x25\x2d\xe2\x5c\x9d\xa7\x2c\x7c\x3a\xfa\xe5\xc9\x86\xeb\x9d\x25\xb2\x9f\xc7\x25\xc5\x8e\xad\x3e\xd5\x11\x17\x6c\xf1\x7a\x70\x5d\xd7\x3a\xf5\x5d\x6f\xff\xdf\xe8\xd4\x78\xfd\xd6\xa9\x51\x94\x24\xa1\x7b\xcc\xea\x2f\xa7\x9e\x7b\xc5\xc3\xa5\xf1\x4a\xed\x03\x77\x1b\x6d\xae\xdc\xf4\xa7\xcc\x26\xdc\x0e\x1b\x84\xfa\x72\x7f\xe5\x75\x8f\xb3\xbf\x35\x11\x4a\x8d\xb7\xbc\xf8\xdb\x53\xde\x0d\x13\x4f\xb0\x0e\x7c\x4e\xd3\xa9\xc2\x57\x60\xa3\x9f\xdf\x4c\xa7\x8b\x65\xf2\x61\xc9\x7f\x2e\xf5\x57\x5e\x6e\xf9\xbd\x53\x63\xfd\x9c\x7f\xe4\xa8\xc8\xba\xda\x2c\xfd\xd5\x62\xfa\x48\xe3\xb7\x45\x56\xd4\xd4\x4a\xcc\x6b\x8b\x95\x5b\x13\x1a\xfa\x46\x9d\x7f\xe1\xf7\x40\x41\xb2\x38\xd7\x7e\xbb\x6c\xef\x57\xca\xca\xe1\xd8\xe7\x65\x5b\x8c\x57\xae\xb1\xf4\x3a\x45\xae\xb4\x7c\x49\x5d\xbc\x2e\x5c\x21\x74\xf7\xb1\x67\xd2\xe3\x29\xf3\xbf\x72\xb7\xbf\x77\x6a\xaa\x6e\x9c\x34\xef\x3b\x1c\x1d\x9c\x02\x70\x7c\x97\x20\x50\x19\x68\xda\x36\xf6\xa3\xa5\x38\x76\x0d\xc7\xf4\x9b\x13\x95\xff\xa3\x0f\x7f\xad\x53\x83\x2d\xba\x7f\x5a\x75\xeb\x7b\x17\xf3\x3e\xd5\x3a\x1b\x1c\x1d\x21\xbb\x63\xf4\x86\x45\x93\xb7\xca\xb5\x4e\x8c\xe7\x6e\xfc\x40\xf0\x37\x4b\x99\xda\x33\xbf\xfe\x5d\x00\x1b\x87\x5c\x75\xe9\xce\x6b\xd5\x5b\x2f\xfe\xd4\x19\xfa\xcc\x76\xe7\xda\xd9\x6d\x32\xe2\xb0\x62\xdf\xef\xa7\x66\x79\xae\x0b\x06\x6d\xdf\xd2\x37\xf9\xf5\x17\x0e\xb0\x71\xc8\x55\x97\xf8\x58\x73\x42\x7b\x39\x8e\x30\x3d\xd9\xa1\x78\x0b\x9b\x91\xa2\x6c\xc3\xc4\x75\xab\xb9\xc2\xa9\xc2\x87\xf7\x21\x4e\x8a\x27\x85\x98\xba\xd8\x38\xe4\xaa\x4b\x4f\x7c\xee\xfb\x0a\xfb\xa7\x17\xbc\xb7\x3d\x33\xdc\x7c\xbb\x1c\xc5\x56\xe7\x54\x94\xc6\x60\x23\xe9\x24\x99\x96\x3c\xfe\x93\xbf\xfe\x38\x07\x36\xce\x47\x9a\xf2\x1f\x75\xb3\x3b\x3b\x2d\xd7\x0b\x0e\x30\x2a\x12\xe2\x7c\x82\xb3\x8f\x1d\x61\x96\xa6\xf3\x8f\x24\xcc\x8f\x38\x75\x9e\x99\x77\xc6\x58\xfe\xd2\xaf\x5f\x3f\x61\xe1\xfe\xf7\x9b\xe3\xbd\xf9\x0a\xfb\xf6\x0b\xdb\x6c\xf2\xa7\x20\xbc\x73\x37\x6c\x68\x39\x9e\x75\xc8\xf2\xb2\x3f\xfe\x39\x9d\x82\xa3\x83\x41\x92\x62\xef\xee\x31\x88\x3a\xc9\x19\x73\x18\x51\xb4\x7d\xc0\x0c\x00\x36\x0e\x19\x04\x93\x93\xc4\x07\xf9\xf5\xf0\xb3\xba\xc4\x8f\xdf\xa0\xf8\xd6\x32\xea\x42\xbc\xe5\x91\xbd\x1a\x7c\x38\x9a\x2f\x27\x54\x11\x64\xa4\xc2\xd4\xc5\xc6\x21\x83\xf0\x91\x69\xbd\x38\xce\xac\xea\xcd\x8a\x56\x8f\xfc\x69\x50\xa3\x78\xc2\xa5\x2d\x06\x8f\xbb\x5c\x2a\x7c\x2e\x2e\xfa\x95\xe8\xf2\x04\xa6\x2e\x36\x0e\x19\x84\xfe\x6e\x17\xa7\xff\x1f\x73\x7f\x19\x95\xd5\xf3\xbe\x71\xc3\x20\x21\x1d\x92\x0a\x92\x8a\x20\xa1\x74\x77\x4b\x83\x74\x4b\x28\x20\x22\x22\x12\x22\x9d\xd2\x48\x08\x88\x12\x02\x4a\x0b\x48\x97\x81\x20\x20\x8d\x34\x4a\x49\x37\x48\xc3\xb3\xee\x7b\xad\x6b\xff\xfd\xee\x8b\x7b\x0d\xcf\x5a\xbc\xf8\xbd\xff\xac\xd3\x6b\x8f\x07\x33\x73\x1c\x7b\xe6\xdc\xec\xfe\x3f\x33\xb0\xa2\x6c\x6a\xfa\x04\xb4\x5d\x2e\x16\xc8\x4c\xcc\x55\xf8\x08\x3f\x29\xde\xd0\x50\xfe\xa8\x51\x84\xa8\x0b\xe2\xe0\x42\x78\x70\x27\xea\x3d\x5d\xb3\xcc\x7d\xfc\x46\x17\x13\x6c\xc7\xa3\x40\xcd\x14\x67\x8a\x8b\xeb\xce\x4a\x99\x85\xeb\xfb\x23\x5f\x3e\x25\x23\x92\x1a\x10\x07\xf5\xa9\x39\x55\x52\x03\x9a\xe0\x4f\x52\x42\xd0\x84\xc0\x5d\x3d\xf4\xf3\x1c\x1b\x71\x8f\xf8\x34\x18\x0c\x22\x35\xcf\x85\xe0\x8d\x1b\x34\x9e\xf7\x25\xf6\x0b\xa6\xae\x9b\x0a\x46\x8c\x00\x88\x83\x2b\xa1\xda\xb1\xe3\xf6\xbe\x4a\xca\xb3\x4a\x5c\xfd\x92\x08\xb1\x41\x59\x56\x82\xb0\x55\x45\x5a\x6f\x4c\x1a\x66\x0c\xfd\xe6\x54\x14\x7e\xe8\x5e\x19\x80\x83\x2b\x41\xea\xd1\xfd\x6c\xcb\xad\xd6\xc0\x9f\x01\xb9\xe5\xaa\x72\xe5\xfd\x1b\x83\x4f\xed\xac\x75\xc7\x29\x8a\xfc\x18\x09\x66\xdc\x70\xe6\x10\x75\x41\x1c\x5c\x09\x6a\xeb\x65\xac\xe6\x5b\x5d\xb6\x5a\x42\xb6\x99\xb8\x84\xed\x5d\xd3\x33\xf9\x34\xf7\x1c\x2f\xc6\xff\xa6\x3d\x24\xef\x75\x2c\x7a\x8e\xa8\x0b\xe2\xe0\x4a\xf8\xa4\xe3\xed\xf9\x52\xa1\x17\xd5\x4b\x63\x35\xd9\x72\xe7\x2f\x95\x45\xda\x47\x9a\xc5\x6f\x81\xfd\x2a\x05\x8f\x3a\x5d\xa9\x35\x2b\x10\x1b\x71\x10\x07\x75\xa4\x10\x38\x95\x27\x03\x2d\xba\x27\x49\xc1\x1e\x93\x03\xf5\x6f\xbb\x64\x58\x97\xfb\xb8\x02\x69\x14\x6a\x71\x4b\x3b\x89\x5e\xe2\xc5\xc1\xe9\x3b\x91\x69\x6b\x8c\x57\xa2\x6f\x22\x86\x00\xc4\xc1\xa5\xe0\xcb\x58\x2e\xfe\x92\x94\x5c\x16\xef\x39\x1f\x45\xd1\x1c\xda\xed\x5f\x49\xa1\x51\xbd\xe8\xf8\x22\x51\xc2\xaf\x26\xca\xd9\xaf\x41\x4d\x44\x40\x1c\x52\x9f\x9a\xd7\x9a\x1c\x99\x6d\xe9\xb3\x0f\x44\x31\x5d\xa6\xb5\xcb\x43\x19\xbf\xde\x0d\x67\x60\x1d\x24\xbc\x8d\xdf\x8c\xfb\xa0\xd5\x0d\x3a\x68\x07\xe2\xe0\x52\xa8\x96\xc3\x6d\x94\x49\x9d\x95\xc0\x67\x19\xef\x6d\x3a\x67\x63\x12\xc6\xd3\x86\x9a\x36\xca\x6b\x91\x5a\x52\x3d\xca\x74\x69\xed\x37\x24\x5d\x00\x07\x97\x02\xdf\xc7\xf4\xfb\xa6\x0f\xdf\xba\x9a\x24\xbd\x20\x0b\xe6\xc4\x35\xae\x32\x89\x69\x15\xc1\x30\x59\x7c\x23\x36\x4a\x5a\x66\x24\xbb\x81\x90\x02\x88\x83\x3a\x52\x9c\x2e\xa9\x01\x6d\x84\x4e\x92\x02\x9a\xed\xba\x32\x9f\xff\xa5\x73\xc3\xcf\xfa\xbe\x6d\x49\xea\xba\xb3\xfc\x78\xdf\x9b\x9d\xad\x33\x30\xa7\x9a\xe2\xd4\x33\x81\x01\xf5\x31\x03\x71\x70\x29\x24\x5c\x6c\xd9\xd1\xa2\xa0\x50\xc8\xce\xe5\x20\xd9\x75\x8f\x8e\xe0\x90\x5e\x89\x3e\x98\xeb\xba\xd7\xc4\x51\xa1\x53\xfa\x45\xfe\x25\x74\x98\x15\xc0\xc1\xa5\x80\x2d\x4a\x75\xfb\xd2\x0d\x05\x5a\x9b\xa5\x5b\xa1\x61\x4c\xf7\x1e\x87\x8b\x91\x7e\xca\x88\x2d\x1a\x70\x9d\xba\x5b\xf2\x75\xa6\xc5\x0d\x51\x17\xc4\xc1\xa5\xd0\xdc\x5d\x58\x6e\x3d\x1c\x52\x55\xb1\xbe\x16\x5f\xe5\x96\x61\xef\x3f\xfb\xc0\x64\x94\x40\x68\xf1\xf1\xaf\xfe\xb7\x9d\xe7\x7e\xa3\x22\xea\x82\x38\xb8\x14\xea\x27\x4d\x6d\x1a\x2e\x7c\x1d\xd7\x54\x14\xbd\xe6\x81\x2b\x40\x64\xee\x4f\x7c\xec\xef\xac\x3f\xd7\xd7\xb0\xd4\x75\x8f\x36\xeb\x22\x42\x0a\x20\x0e\x9a\x15\x4c\x4f\x25\x05\xd0\xe6\xf4\x24\x29\xd8\xdc\xbe\xac\x78\xeb\x41\x74\xaa\xd0\x52\xf0\xf4\xf4\x9f\x94\xa0\x0f\x7d\x17\xab\xb4\x2c\xe3\x92\x04\x2f\x5f\x95\xf0\x62\xbb\x08\x85\x55\x20\x0e\x2e\x85\xa7\x5d\x71\x2f\xc3\x96\x02\xe9\x0c\x18\x66\xc2\x98\xb4\x27\x8f\x68\x5f\x8e\xac\x2f\x66\x28\xcc\x4d\x93\xc4\xb2\x7e\xf2\x77\x4a\x44\xd4\x05\x71\x70\x29\x38\x4b\x9a\x0c\x62\xec\x3a\x27\xbe\xb5\xe1\xdd\x5c\x31\x16\x52\xde\xb7\xd3\x5d\x17\x9d\x95\xc4\xba\xee\x5f\xf6\x70\x62\x6a\xbe\x1d\x51\x17\xc4\xc1\xa5\x80\x66\xcc\x42\xfe\x9c\xa1\xf5\x9b\x85\x76\xd9\x05\x9a\x6b\xd7\x8e\x1d\x49\x29\xb6\x35\x43\x46\x34\x7f\x56\xdd\xc3\xe3\x72\x38\x88\x82\xfe\x24\x00\x1c\x5c\x0a\x42\x9a\x7c\xef\xba\x42\xd4\xb6\x38\x49\xc2\x63\xf5\x43\x0a\x09\x70\x87\xa4\x38\x4c\x6c\x36\x3a\xe3\x19\xc4\xb8\xc7\x2e\xfc\x5f\x94\x0f\xe2\xa0\x59\xe1\x74\x49\x0d\xc8\xe5\x9f\x9c\xd4\x78\xc7\xce\x78\xf5\xda\x6e\x6c\x7a\xa2\x3a\xa7\x67\x84\x97\x2d\xcf\x9d\xef\x28\x08\x90\x7b\xe9\xc4\x38\x94\x7b\x49\x59\xe8\x43\x38\x22\xf5\x00\x71\xc8\x49\xcd\xfb\xb0\x20\x35\xd3\x94\x25\xb7\xdf\x8f\x1b\xab\x09\xde\x69\xe1\xde\x9a\xb0\x9d\xcf\xf8\xe5\xe4\x31\x48\xd6\xcb\xc4\x36\xb5\x89\x8f\xa8\x0c\xe2\x90\x93\x9a\xdc\xca\xf0\x49\x5a\x94\x74\x06\x57\x9f\x05\x4b\xeb\x4c\xe7\x66\x95\x6f\x0f\xfe\xe0\xe2\xe9\xf3\xa3\x3b\xc9\x57\xdc\xf4\x0c\x9d\x46\x54\x06\x71\x7e\x32\x28\x28\xe8\xff\x5d\x28\xca\xcb\x54\x9d\xdf\x95\x95\x06\x08\xc4\x2c\x66\xcc\x68\x12\x56\x35\xd5\xa7\x8a\x0e\xa2\x64\x93\xec\x79\x07\x39\xb5\xf4\x4f\x42\x49\x0d\xa8\x0b\xff\xbf\x49\xcd\xca\x4d\x06\x0c\x39\xf5\x0e\x52\x1b\xc2\x87\xd5\x75\x95\xd7\x0b\xe8\x50\xff\xea\xf9\xf8\xa7\xca\xa4\x2b\xdb\x69\x30\xd9\x14\xbe\xf9\x37\x94\xf4\x5e\xa6\x1e\x55\xaa\x0c\xfd\x91\x7b\xf7\x52\x5e\xcb\xa5\x56\x42\x19\x7a\x0d\xc9\x82\x60\xc2\xe5\x0f\x06\x34\xcf\xf6\xc2\x13\xfe\xd7\x92\x1a\xd0\xa3\xfd\xdb\xa7\x06\x9e\xd4\xf0\xc9\x27\x1d\xa5\xba\x6b\x77\x7e\x49\x7c\x5d\xe5\x39\xfc\x6a\x72\x4b\xa4\x30\x26\x7d\xe4\xed\xab\x07\x9d\x98\x6b\x9c\x2e\x53\x19\x67\x91\xd4\x34\x20\x25\x35\xa9\x38\x44\x57\xa3\xd1\x64\x49\x25\x93\x2d\x70\x54\xcf\x1b\x34\x1b\xbe\xc2\x21\x66\xd6\x7b\x44\x83\xe9\xc7\xba\x9c\xf8\x6c\xa0\xe7\x4c\x8e\x7b\x20\x27\x35\x54\x3a\xf7\x6d\x49\x2f\xc6\x1f\x31\x92\x0d\xfb\xbe\x8c\xf0\xa8\xa3\xeb\x78\x43\xd0\xf6\xd5\x77\xb2\xb1\x86\x2d\x38\xde\xa9\x3e\xf8\x4c\x0e\xb7\x20\x27\x35\x61\xef\x96\x7b\xe3\xe6\x4a\x95\x8d\xa3\x56\x44\x5d\x92\xa2\x42\x23\x3f\x37\xd4\x37\xdc\x1f\xef\x2d\x0e\xe3\xb7\x2d\xa1\x4b\xfe\x70\x26\x4f\x8b\x9c\xd4\xac\x53\xcc\x0b\xb2\xad\x24\x9d\x67\x62\xdd\x7a\xb1\xae\xa2\xe9\x9c\x8b\x3f\xc4\xce\xcd\x88\x96\x31\x11\xe7\xff\x85\xe4\xdc\x96\xfe\x99\x3c\x2d\x72\x52\xc3\x73\xf3\x7b\xcd\xe0\xbb\xb8\x6f\x79\x3a\xfe\xd5\xdc\x6a\xed\x15\x8c\xd6\x97\x8c\x4b\x5e\xa3\x6e\x44\xcb\x27\x59\xcc\x52\xe8\x4e\x9d\x59\x52\x03\x92\xee\x49\xab\xee\x9b\xce\x91\xe9\x4e\x6b\x7c\x9c\xa3\x96\x92\x5b\x1a\x9b\x8b\xfb\x17\x34\x05\x9e\x3f\x49\xca\x0d\x4b\x44\x1d\x69\xc6\xfb\xa5\x04\x6d\x3c\x40\x1c\x7c\xd5\xed\xbf\x5a\x14\xac\x39\x15\x97\xf2\xed\x0d\x5e\x23\x11\xdf\xe3\xe6\xe2\xad\x9a\x08\x77\xff\x03\x81\x26\x39\xb4\x0b\x0e\x22\x6f\x29\x10\x75\x41\x1c\x7c\xd5\x95\xc6\x14\xc2\x73\xbe\x91\x7d\xdd\x8f\xe5\x3a\x6a\xd4\x45\xc5\x17\x68\x05\x0f\x48\x31\x9d\x53\xa3\x78\x86\xf4\x26\x67\xc7\x92\xb8\x11\x75\x41\x1c\x7c\xd5\x3d\x48\x96\x5b\x39\xb4\xc8\xb9\xd2\x57\x49\xae\xf7\xeb\xde\x6c\x0a\xed\x6a\x07\x99\x82\xff\x03\x41\xbd\xdf\xc4\xbd\xb6\x7e\x65\xb7\xa0\xb3\x3a\x00\xce\x4f\x0a\x05\xf5\xdf\xba\xa6\x07\x95\x46\x87\xfa\x7e\x01\x14\x8e\x86\xbf\x98\xfd\xa3\xb3\x0e\xde\x46\xf0\x44\xda\xe4\xdc\x2c\xa8\xc9\x15\x4f\x50\x8b\x89\x42\x24\x35\x20\x0e\xea\x53\x73\x9a\xa4\x06\x34\x9b\x9c\x24\x04\x42\x8b\x7e\x1a\xcf\x83\xc4\x9f\x46\x0d\x42\xcd\xf8\x09\xb4\x9a\xfd\xa8\x2c\x34\xa9\x01\xf9\x91\xa9\x9e\xe7\x4b\x54\x18\x68\x53\x10\x03\x00\xe2\xe0\x42\x10\xea\xf2\x24\xac\x73\x8b\xce\x1a\x45\xdd\xe3\xf2\x71\xae\x23\xfb\x39\x7f\xf3\xf5\xb8\x95\xfa\x46\x57\xfe\x4c\x5f\x68\x00\xf5\x1f\xe8\x1d\x24\x80\x83\x0b\x61\x96\x73\x1e\x4d\xef\xb3\x8a\xc8\x5f\x93\x3a\xdb\x99\x2f\x92\x75\x47\x0e\xe7\xdf\xbd\xcf\x08\x7e\x38\x2b\x6b\x5b\x9b\x26\x9e\x09\xbd\x8b\x05\x71\x70\x21\x64\x72\xf9\xd3\x70\x56\x36\xda\x7d\xb7\x99\x9a\xee\xcc\x67\xa1\x3a\xfa\x23\x2e\x91\x51\x49\x25\xb2\xe0\xd0\x49\xba\x9f\x50\xe7\x80\xa8\x0b\xe2\xe0\x42\x78\x9c\xa5\x9c\xd1\x39\x7f\x68\x6e\x9e\xe6\xd3\xc2\x7c\x6b\x7a\x56\xc2\x4b\xdb\xd6\x91\x63\x88\xab\x92\x95\xc3\x44\xbe\xc5\x61\x15\x91\xd4\x80\x38\xa8\x4f\xcd\xa9\x92\x1a\xd0\x04\x7f\x92\x12\x42\xcf\xf1\xa8\xac\x76\x73\x12\xa9\x7c\xf5\x66\x7b\x7f\x55\x72\x25\xca\x96\x79\xcb\x6b\xcd\x1f\x17\x3f\xff\xcb\x96\xde\x9f\x0f\x4b\x88\x11\x00\x71\x70\x25\x04\x0d\x37\x9b\x85\x56\xc7\xc4\x19\xa2\xce\x68\x31\x84\x12\x51\xac\x3b\x70\xf9\xc7\x36\xac\x3c\x73\xaf\xdc\xf5\xe9\xcc\xa0\x32\x87\x12\x20\x00\x07\x57\x42\xe8\xa8\x7e\xad\xd9\xaf\x83\x4a\x55\x25\xad\x11\x99\x57\x5c\xa5\xd3\x7c\x63\x73\x1f\x3d\x49\xfa\xfc\xfe\xa8\x45\x0b\x1e\x0f\xfb\x41\xbf\x17\xc0\xc1\x95\xd0\xc0\xcc\x77\xc1\xe1\x6b\x6b\x7d\x11\x06\x49\x67\x0a\x49\x21\xdd\x71\x71\xc8\xa7\x5c\xa1\xcb\x7b\x0a\xa5\xa5\x8c\x6b\x0b\x53\xd0\xd9\x22\x10\x07\x57\xc2\xb7\x4a\xab\x56\xe2\x10\xce\xac\xaf\xb9\x49\x51\x19\xfa\x07\xf8\x9a\x1c\x55\x0d\x6a\x9d\xf8\x18\x8e\xc2\x94\xf7\xca\x0f\x76\xcb\x11\x1b\x71\x10\x07\x75\xa4\x38\x5d\x52\x03\x5a\x74\x4f\x8c\x6f\xdf\x11\xbd\x12\x53\xe8\xaf\x50\x9f\xed\x63\x1f\x7d\xc4\x52\x97\xb3\xdd\x98\xa8\x7a\xcd\xfa\xce\xf0\x67\x54\xab\x40\xc3\x37\x90\x3d\x07\x71\x70\x29\x84\xba\xe2\x37\xbd\xfc\x41\x85\x25\x72\xf3\x33\x16\xf9\xc7\xf1\x1c\x19\x5f\x25\xdb\x90\x9b\x78\x54\x69\x62\x8f\x4c\xba\xbe\xe8\x4f\x43\xff\x65\x00\x0e\x2e\x85\xee\xf4\x64\x6c\x21\x71\x8c\x28\xa1\x07\xab\x68\x04\xe8\x6d\xed\x44\x37\xd8\xbf\xdf\xf0\x99\xee\xbe\x69\x56\xf2\x3c\x26\x14\xc7\x1d\xea\x1c\x01\xe0\xe0\x52\x40\x45\xb3\xf1\x35\xfe\x5b\xc1\x93\x20\x62\x3e\x45\x32\x1f\x23\xcb\x3f\x10\x58\xb6\xbf\x41\x9c\xd5\xee\xdd\x2e\x83\x36\x96\x7d\x01\x51\x17\xc4\xc1\xa5\xc0\x5a\xf3\xd6\x54\x7f\xe1\x6f\x97\xbd\x2e\x57\x23\x21\x0a\x97\x61\xe5\xde\xc6\xcd\x3f\xc4\x16\xbd\x53\x04\xc3\x78\x9e\x37\x67\xa1\x33\x35\x20\x0e\xea\x48\x71\xba\xa4\x06\xb4\x11\x3a\x49\x0a\xb3\x86\x2b\xdc\xde\xd2\x14\xc1\x77\x75\xa6\x97\x70\x25\x84\x59\x5c\x6d\x12\xb4\xe8\xd8\xb6\x4b\x92\x5d\xef\xa3\x2e\x93\x3f\x86\x1a\xda\x81\x38\xa4\x8e\xf3\x1c\x0f\x56\x9e\xd0\xd6\x77\xc6\xce\xe5\xd0\xd0\x38\x59\xa4\x8b\xca\x38\x1a\xde\x2b\x91\xfc\x4c\x95\x68\xf2\xf5\x65\xcf\x11\x74\x36\x12\xc4\xc1\xa5\x20\x72\xed\x76\x51\x73\xf7\x35\xc6\x6b\x26\x75\x4e\xd8\x94\x8f\xcf\xf3\xd6\xb6\x8f\x4f\x1f\x5d\xbd\xc2\xdd\xe3\xea\x14\xd7\xe3\x90\x0a\xf5\xbf\x01\x70\x70\x29\x5c\x5a\xb9\xd0\x9f\x8e\x7e\x6f\xca\xf4\x9b\x08\x59\x3b\x4d\x4d\xea\xea\xb9\x7d\x76\x6e\x4e\x75\x09\xef\x38\x33\x35\x41\xdc\x8f\x57\x11\x75\x41\x1c\x5c\x0a\x17\xc4\xba\x7b\x4a\xaa\x2f\x33\x94\x73\x13\xf6\x6d\xe8\xf1\xe7\xad\xe1\x70\x8b\xda\x89\x2b\xc7\x94\x6c\xa9\xa8\xbd\xdb\xd1\x98\x86\x9a\x4b\x03\x38\x68\x56\x38\x5d\x52\x03\xda\x9c\x9e\x24\x85\x5a\xb9\xa0\x6b\x3f\xf1\xc6\xed\x7f\xc5\x6d\xac\xcb\x1e\xe5\xa1\x5d\x66\x09\x7a\xd8\x96\xe0\x48\x56\xa2\x6e\xac\xfe\xf4\xaa\x0d\x74\x88\x11\xc4\xc1\xa5\x40\xb3\xd4\x67\x51\xfa\x67\x23\xbf\x65\xd5\xb1\xad\x6a\xb2\xfc\xfc\xc7\xee\x27\xe8\x7b\xf9\x89\xac\xaf\xf1\xff\xf4\x7e\x6a\x48\x32\x45\xd4\x05\x71\x48\x2d\x8b\xcc\x23\x32\xde\x8f\xa3\xcf\x13\xe0\x30\x28\xb2\xd3\xc7\xf7\xe2\x61\x5c\xc9\x12\x27\xb6\xd8\x91\xdd\xbd\xb4\x5a\xf7\xf2\x65\x2d\xd4\xb2\x08\xc0\xc1\xa5\xa0\x1e\x70\xef\x42\x66\xf3\xc5\x6f\x21\x66\xb9\xd6\x3a\xf2\x9c\x6a\x59\xfb\x6f\xbf\xae\xfb\x3a\x9e\x1b\x8f\xf6\x51\xd4\x17\x6c\x82\x8e\x6d\x81\x38\xb8\x14\xce\xcb\xe3\xb6\x3e\x0d\xb4\x9b\xe7\xa0\xcc\xae\x30\x19\xb5\xfc\x7a\xdd\xff\x6f\xcb\x1c\x0a\xd9\x5b\x7f\x8d\x7a\x29\x07\x7d\xa2\x67\x08\x29\x80\x38\x68\x56\x38\x5d\x52\x03\x72\xf9\x27\x27\x35\x47\x1d\xe1\x5e\x4a\xfb\xca\x4b\x32\xb7\xe6\x2f\xf0\x73\x32\xb7\x61\x75\xd3\xe7\xa5\x0d\xf3\xa6\x29\xa9\x6d\x65\x24\xdb\x54\x60\x23\x52\x0f\x10\x87\x9c\xd4\x08\x6a\x4e\xb4\x7f\x2a\xa9\x9e\x98\x8b\xbe\xcc\x4c\x95\x79\x75\x8c\x1f\x17\xef\x78\x2e\x6a\xbe\x18\xaf\x90\x91\xa6\x41\x30\x9a\x19\x51\x19\xc4\x21\x27\x35\x5a\x77\x87\x7c\x3d\x27\x86\x05\x17\x96\xcb\x97\x0d\x7e\x14\x5e\xfa\x73\xaf\x64\x44\x4d\x22\x34\x28\xee\xb9\x74\x7a\xd1\xce\x84\x1d\xa2\x32\x88\xf3\x93\x41\x41\xf9\x6f\xc8\xd6\xf0\x7d\xba\x2a\xf0\x28\xc9\x54\xdd\x76\xb3\x63\xbc\x4f\x1a\xbd\xa3\xeb\x46\xbf\xb7\x4a\x54\x4e\x80\x76\xb9\xb0\xce\x42\x5a\x13\x94\xd4\x80\x3e\x82\xf8\x6f\x52\x13\x40\x26\xd9\xc1\xce\x28\xd1\xe3\x2e\x48\x1f\x8d\xe9\x37\x12\xc4\x45\xff\x95\xd6\x25\x82\xee\xe9\xca\xdd\x47\xd7\xfd\x76\xaf\xff\xfb\xbd\xc2\xe7\x71\xe4\x8e\xb6\x7e\x37\x70\x50\xd5\xb9\x42\xc7\x36\x48\x6f\x0f\x94\xfa\x66\x56\xf0\xae\xd1\x29\xd0\xe5\x5a\x50\xdd\x66\x49\xf9\x5f\x4b\x6a\x40\x8f\xf6\x6f\x9f\x1a\x78\x52\xc3\x3f\x2b\x1f\xe8\x7a\xc1\xc3\x31\x76\xd1\x28\xce\x77\xf3\xc3\x58\x3d\xcb\xb6\x7f\x8d\x1e\xa9\x80\x2e\x53\xcc\x78\x5f\xd7\xf6\xa3\xb3\x48\x6a\x50\x54\xe0\x6e\x3e\x4b\xd0\xd4\xfc\xc1\xa4\xdb\x4e\xe4\x06\x33\xbd\x6b\x0b\xd5\xcf\xec\xef\x9c\xbd\x57\xfb\x1c\x3a\xef\xb6\x90\xce\x2c\xf9\x0c\x24\x9e\xc9\x71\x0f\xe4\xa4\xe6\x40\x3b\xd2\x12\x6d\xae\x04\x8f\x57\xf4\x9c\x70\x85\xd1\x2d\xf1\xe0\xa4\x0b\x59\x87\x85\xed\x0f\xf0\xad\xb9\xa7\xc4\xbc\x7d\xd3\xcf\xe4\x70\xcb\x6d\xa4\x7f\xb6\x2c\x55\x78\x35\xeb\x1d\xff\x93\x7c\x53\x0c\xaf\x3b\x6b\x82\x66\xc2\x44\xc3\x96\xca\xc1\x43\xaa\x8d\x21\xb5\xc5\x33\x1a\x23\x5f\xce\xe4\x69\x91\x93\x9a\xbd\x3b\xbf\xf1\x05\xba\x5f\x07\xad\xdc\xf1\x20\x20\x4f\x09\xd5\x50\xe7\x4b\x1f\x7a\x46\xf8\x6a\x5d\x62\xd8\x5c\xf8\xd2\xda\x58\xfe\x99\x3c\xed\x53\xa4\x7f\xd6\x70\x49\x0b\x45\x6f\xd6\xb8\xc9\x41\x47\x85\x54\x8e\xec\x9e\xf2\x33\x97\x21\x31\x25\xaa\x90\xda\xe1\x23\xb6\xe1\x19\x27\xa5\xdf\x67\x96\xd4\x80\xa4\x7b\xd2\xaa\x4b\xf0\xd2\x47\xb9\xbd\x43\xf3\x8a\xdc\x5f\x7f\x23\x7b\x8f\xf5\x76\xc6\x1e\x71\x92\x19\xab\xf7\xca\x92\x1f\x2f\x10\x0d\xb9\x56\x3d\x86\xce\xa1\x03\x38\xa4\x4f\x3f\xf9\xce\xf1\x58\x1d\x1a\xe2\x9a\x44\xf9\x2f\x98\xd1\x3e\x8f\x1d\x2a\x13\x9f\xce\x37\x9a\xf5\x38\x68\xdb\x21\x4d\xbf\x8c\xd1\x05\x9d\x17\x07\x70\x48\x57\x1d\xa6\x72\x1c\xb6\xd3\xab\x23\x58\x67\xb8\xb8\x9a\xea\x8d\x8b\xee\x29\xe7\x04\xe7\x2a\x24\x44\x3c\xd7\xd8\x91\x48\x4c\xb2\x99\x84\xae\x3a\x00\x38\xf8\xaa\xdb\x45\xa2\xcb\xb9\x24\xf2\x08\x4d\xd1\xa4\xef\x91\x9a\x4e\xce\x42\xb5\x4a\x36\x17\xc3\x93\x0a\x12\xf6\x24\x94\x09\xa1\xf7\xea\xd0\x41\x02\x10\xe7\x27\x85\x82\xf5\x6f\xdd\x05\x23\x0e\x94\x55\xda\xd5\xa6\x90\x9d\x72\x55\x2d\x07\x6c\xe2\x55\x09\xae\x82\x2b\x72\xdf\x1b\x96\x2f\x90\xbd\xe0\x7c\x4b\xde\x8c\x48\x6a\x40\x1c\xd4\xa7\xe6\x34\x49\x0d\x68\x36\x39\x49\x08\x9b\x44\x5b\x0a\xc1\xb6\x44\x8a\x39\xf5\xd1\x0f\xbe\xa3\xdc\xbc\xc2\xa5\x1c\xb3\xdd\xc4\x11\x26\x1d\xb2\x3f\x30\x6b\x7b\xe5\x6b\x3d\x62\x00\x40\x1c\x5c\x08\x89\x4e\x04\x33\xb1\x32\xe2\x7f\x7f\xc8\x30\x8c\xbb\x49\xb2\x77\xdd\xa7\xa1\xc2\xbf\x50\x28\x79\x9d\xc7\x67\xa1\x8e\xeb\xa5\x17\x14\x05\x82\x38\xb8\x10\xba\xde\x93\xe3\xd4\x7d\xf0\x08\xd6\x1f\xe1\xd4\x11\x28\xd2\x2f\xb9\x9f\x74\x73\x8f\xbe\x2f\xdf\x0c\xef\x76\xfa\x36\x9b\x54\x2a\x23\xf4\x1f\x06\xe0\xe0\x42\xc8\xf8\xc1\xab\xfe\xba\x75\x8e\x03\x6b\xe4\x1e\x83\x2e\x4f\x40\x70\xa2\xb2\x85\x5c\x1e\x86\xdc\x9b\x90\x57\x21\x54\x6c\x4f\x1f\x41\xd7\xe0\x40\x1c\x5c\x08\xdf\x93\xbd\xd6\xd5\x03\x49\x74\x8e\xc7\x3e\xe3\x2a\x6c\xba\xcb\x90\x68\x51\x9b\x3b\x3a\x8e\xae\x11\x67\x48\x29\x44\x76\xe7\xa3\x22\x92\x1a\x10\x07\xf5\xa9\x51\x39\xcd\x46\x1c\x34\xc1\x9f\xa4\x04\xdd\xd4\x78\xa7\x6c\xba\xef\x0d\xd9\xdc\x77\x6e\xfa\x4c\x45\x11\x27\x7e\xb8\xa0\xd1\x61\xd2\x43\x51\xfd\xbb\x5d\x7f\xc4\xea\x0b\x74\xba\x0a\xc4\xc1\x95\x60\x3d\xe6\x93\xad\xfd\x67\x32\xd9\x25\x51\x5e\xd6\xc5\xbc\x15\x57\x15\xdf\x7c\xeb\x11\xe1\x17\x29\xfb\x9d\xc7\x66\x87\xe5\xd1\xd0\x99\x1a\x10\x07\x57\x42\xe4\x0d\x92\xd2\x6e\x01\xe7\xaf\x0e\xf1\xcb\x63\xbb\x3c\x8a\x33\x02\x17\xf8\xe9\x36\xe5\x75\xf1\x68\x73\xb1\x56\x5e\xfe\x08\x2d\x84\xae\xe8\x00\x38\xb8\x12\x2e\xa2\xa4\x6d\xcf\x7d\x49\x0e\x8e\xd2\xd9\x76\x3d\x67\x75\x99\xee\xb8\x55\xa0\xb0\xa0\x82\x08\xa7\xc1\x23\x94\x93\xca\xf1\x3d\xd4\xa7\x06\xc4\xc1\x95\xc0\x6e\x9e\x81\xce\x49\xce\x17\xa6\xe5\x94\xd7\xca\xcc\xf5\xbe\x8b\xf8\xfc\x0b\x87\x91\x82\xbb\x93\x74\xfd\x69\xd3\x69\x75\x6e\xe2\x88\x8d\x38\x88\x83\x3a\x52\x9c\x2e\xa9\x01\x2d\xba\x27\x76\x31\xe3\x2f\x6c\x1a\x74\xb0\xdd\xb3\xfd\x7c\xad\xba\x6f\x6f\xa8\x7d\x58\xb1\x8e\xf4\xb3\x63\x85\x33\xe5\x3d\x0d\x15\x57\x0a\x5a\xa8\x4f\x0d\x88\x83\x4b\xe1\x45\x02\xae\xf0\x9d\xfe\xb8\x62\xcc\xdd\x5b\x4f\x2e\x0a\x50\x2a\xe7\x7e\x36\x8e\xff\x1b\x2e\xa8\x97\x95\x69\x3e\x43\x21\x46\x0d\xad\x0e\x20\x0e\x2e\x85\xec\xfa\xdd\x16\xaf\xca\x3b\xe5\x11\x92\x33\x36\x96\x0f\x6c\xa7\x35\x9d\xb9\x54\x0c\x8c\xca\x5b\xbe\x45\x67\xfa\xd4\x33\x6d\x95\x40\x9d\x8a\x01\x1c\x5c\x0a\x34\x1a\xcd\x41\x98\xfb\x9c\xaf\x6f\x67\x46\x2e\x68\x5b\xd2\x11\x88\x44\xd6\x6f\x1f\xdf\x27\xba\x22\x12\x99\x72\xcd\xcf\x91\xe6\x36\xe4\x21\x01\x1c\x5c\x0a\xfc\xcc\x89\xae\x15\xed\xaa\xf5\x6f\x13\xdf\xf0\xef\x6c\xa7\x16\x7d\x5b\xfc\xf6\xdc\x9f\x5f\x31\xeb\xc0\x76\xdf\xb8\xc7\x70\x3b\x1b\x21\x05\x10\x07\x75\xa4\xb8\x7d\x2a\x29\x80\x36\x42\x27\x49\x41\xa9\xec\x65\xb3\x3b\xe7\x5b\x72\xfb\xf1\x92\x14\x7c\xc2\x88\x29\xf4\x98\xaa\x44\x8d\x5d\xaf\x83\xba\xeb\x18\x31\x53\x9e\x12\xca\x88\x21\x00\x71\x70\x29\x88\x67\x3f\xb7\xc1\xcb\xbd\x7d\xfe\xf7\xbb\xbb\x6e\x2e\xb4\x4f\x1e\x8a\xf6\x53\xd7\x98\xaa\x2e\x08\xb2\x12\xb6\xa0\xba\x49\xd9\x40\x7d\xc1\x40\x1c\x5c\x0a\x34\x9e\x83\x01\x1d\x57\xb4\x9d\xff\x0a\x16\xfe\xbc\x93\x8f\x5d\x9a\xfe\xe6\xd1\x8e\x64\xe6\xd3\x75\xf1\x37\x77\xb9\xf8\x8a\x1b\xa1\x0b\x6b\x20\x0e\x2e\x85\x55\xca\x7c\xb1\xed\x76\x3f\x82\xa2\xf6\x6a\x6c\x2e\xc3\x4f\x75\x79\x05\x82\xfe\x03\x62\x8c\xe7\x06\x95\xae\x31\xf3\x6f\xbf\x83\xfa\xea\x80\x38\xb8\x14\xbc\xa9\xae\xd3\x46\x4e\x39\x73\x6a\xa4\xa3\xc6\xb9\xd3\x8f\xcc\x72\x5e\x7f\xe9\x43\x26\x88\x75\x6f\xc8\x2e\xf3\x50\x23\x3b\xcb\x1c\x21\x05\x10\x07\xcd\x0a\xa7\x4b\x6a\x40\x9b\xd3\x93\xa4\xc0\xa3\x5b\xc0\x16\xb7\xaa\xe8\xa8\x64\x62\xe7\xf7\xd2\x2d\x54\x2e\xa8\x38\x63\x99\x37\x61\xec\x49\xa0\x33\x53\xa9\xfa\x11\x21\x94\xb3\x82\x38\xb8\x14\x22\x8a\xe8\x71\x26\x65\xda\xc7\x5e\x8d\xbb\xa6\x71\x51\x2b\x1e\x67\x5d\x5e\xfa\xdb\xd6\x48\x37\xe5\x6f\x72\xa4\x3a\x72\xf0\x09\x6a\xe1\x0e\xe2\xe0\x52\x50\x20\x73\xa1\x90\x8f\xfd\x39\x4b\x73\x03\x27\x72\x9d\xf9\x46\x97\xe2\x38\xc6\xb5\xab\x86\x8d\xa1\x87\x4f\xd7\xc4\x34\x1f\xc9\x3a\x21\xea\x82\x38\xb8\x14\x54\x6c\xef\xe7\xda\x1d\x7e\x6a\xc3\xd2\x91\xb4\x12\xfa\xd2\x3f\x88\x42\x9c\x33\xb3\xce\x54\x34\x59\xd1\x3c\x96\xc9\xde\xce\x04\xbd\x7a\x00\x71\x70\x29\xfc\x4c\x19\x65\xe2\x5d\x0f\xc9\x68\x76\x32\xcf\xf5\xb2\x14\xca\x68\xf3\xcc\x19\xa3\x14\xbe\xe4\x74\xb0\xb2\x54\x30\x89\x39\x9b\x81\x90\x02\x88\x83\x66\x85\xa7\xa7\x4a\x6a\x40\x2e\xff\xe4\xa4\x46\xbe\xaf\x89\xec\xea\xdb\x58\x62\x96\xb4\x9f\x1d\x74\x1e\x8c\x0f\xb2\x9d\x33\xac\x8d\x9d\x8d\xb5\xf4\x79\x0d\x1f\xbc\xb9\xd9\x5d\x8f\x48\x3d\x40\x1c\x72\x52\x93\xfc\x85\x37\xd8\x59\x52\x90\xa9\xc9\x80\xeb\xaf\x77\x8f\xa6\xfa\x7e\x91\xf8\xba\x5e\xf2\x33\xa7\xd2\x02\x29\x99\x75\x4e\xbb\x2f\x88\xca\x20\x0e\x39\xa9\x89\x24\x1e\xcc\x8b\xde\xa7\xdc\x75\x4a\xe7\x62\xeb\x53\x0c\xb8\x35\x36\x78\x93\x60\x8a\xe8\xd2\x8c\xdb\xad\xf1\x6d\xe9\x0f\x83\xbf\x10\x95\x41\x9c\x9f\x0c\x0a\xca\x7f\x5b\x17\x79\x09\xc5\x67\x7b\x8b\xc4\xa0\x5b\x6d\x4b\x11\x64\x77\xaa\xec\x0f\xf5\xbf\x9a\x6f\x26\xb4\x19\x7c\x68\x15\xf3\x7a\x65\xd3\x37\x0f\x4a\x6a\x8c\x54\x08\x96\x1f\xaf\xbf\xde\xa4\xab\x90\x65\xa2\x17\xd6\x59\x4c\x0e\x4d\xd4\xc3\x59\xda\xa8\x8d\xa3\xe3\x36\x32\x91\xd2\x4b\xfb\x37\xa9\x79\xb4\xb6\x40\x15\xf5\x54\xf6\x5a\x65\x6d\x12\x55\xb1\x20\x93\x87\xf3\x5f\xbb\x71\x5f\x94\xe0\xab\x41\xc5\x5b\x28\xb9\x95\x98\xc4\xff\x9e\xf8\xd3\xb3\x4e\xb0\x91\xc4\x7a\x2c\x2c\x1a\x35\x57\x1e\x31\xe8\x6c\x60\x3d\x7d\x7e\xfc\x7b\x82\xcb\x8b\xca\x5d\x8a\xfb\x82\x05\x15\xff\x6b\x49\x0d\xe8\xd1\xfe\xed\x53\x03\x4f\x6a\x28\xa3\x4a\x9f\xaa\x5f\x1d\x6d\xf1\xd8\xfc\xd4\x58\xe1\x75\xc3\x93\x68\xbc\x45\x3c\xf2\xa6\xe0\x9d\x92\x5c\xe3\xf8\xbb\x26\x34\x67\xf2\xed\x27\x09\xa4\xa4\xe6\xd0\xee\x7e\x55\x96\x6e\xa2\x8a\xe6\x1b\x36\xaa\xd8\x9b\xe3\xdd\xaf\x9e\x09\x35\x10\x59\x8e\xde\x5a\xe0\xae\x0f\x99\x98\xcf\x28\x3d\x93\xe3\x1e\xc8\x49\x4d\x6b\xd3\x80\x9d\x12\x36\xbd\x49\x40\x80\xb7\x9b\xac\xd5\x1f\x4b\x63\x34\x42\xa7\x71\x73\xbb\x63\x91\xd5\xa9\x2c\x52\x83\x36\xb7\x33\x39\xdc\x82\x9c\xd4\xf0\x5c\xd8\x7d\xe4\x93\xca\xe6\x3c\x89\x6d\xa6\x72\x37\x3f\x8a\xfb\x6d\xdb\xe5\x15\x54\xbb\x2a\x41\x1f\xf6\xc4\x46\x2d\x4b\xea\x33\xb9\x74\xd5\x80\x9c\xd4\x68\xb2\x0a\x5a\x4d\xec\x72\x5e\xb4\xfe\x1c\xfb\xfb\x0a\x5b\xef\x5e\xba\xe9\x76\xfa\x6d\xcf\xd7\x3c\xd6\x6a\x0c\x6d\xac\xbd\x9c\x98\x67\xf2\xb4\xc8\x49\xcd\x42\xf7\x61\xa6\xad\x1e\xe1\x00\x3a\xf5\x57\xac\x07\x5a\x17\x1e\x7f\x7a\x23\x57\xdd\x73\x35\x9c\x87\xe2\x79\xfc\xd7\xde\x3e\x95\xee\x33\x4b\x6a\x40\xd2\x3d\x69\xd5\xbd\x7f\x4d\x8c\x0b\x5d\xfd\xca\x3a\xae\xf3\xb7\xd0\x37\x53\xa3\xd8\x0e\x17\x45\x2d\x28\x7c\x42\xfa\xb0\x44\x37\xab\x86\xce\x7d\x80\x7a\x30\x82\x38\xf8\xaa\xfb\x9e\xfd\xf1\x33\x22\x46\x1c\xd4\xde\x00\xdd\xef\xaf\x72\x92\xee\x2d\xaa\xd2\xd1\x13\x78\xde\x3d\x47\xc9\x46\xaa\xa1\x90\x15\x08\xad\x8e\x20\x0e\xbe\xea\x96\xc4\x1b\x38\xd9\x44\x7b\x97\x8a\xb2\x25\x65\x6e\x49\x2c\xeb\x04\xa5\xe2\xd7\x8c\x06\xbe\x64\xd4\x2b\x0d\xed\xef\x8a\xff\xbf\x7e\xfb\x20\x0e\xa9\x29\x45\xde\x8d\x8b\x3f\xa7\x62\xae\x67\x30\xfb\x09\xa7\xa3\xfd\x2e\xe0\xe8\x7e\xb5\x99\x44\xb5\x17\x91\x7c\xf9\xc7\x22\xff\xa5\x9d\x0d\xa8\x29\x05\x80\xf3\x93\x42\xf1\xfe\xcf\x79\x7c\x49\x1c\x56\xee\x7d\xa2\xed\x9b\x03\xfc\xef\x62\x52\x03\xc4\x09\xe9\xcf\x07\x3c\x1f\x7e\x10\xf4\x39\xbe\x21\x52\x46\xe7\x61\x2a\x22\xa9\x01\x71\x50\x9f\x9a\xd3\x24\x35\xa0\xd9\xe4\x24\x21\x0c\x71\x9f\x17\x89\x52\xa4\xf8\x7c\xf5\x19\x47\xdb\x22\xd7\x24\xdb\x85\x63\x4a\x75\xfc\x1a\x2c\x47\x4f\xe7\x0f\x5e\x52\x69\x7c\x4a\x88\x01\x00\x71\x70\x21\xe8\x2b\xb7\x72\x5b\x3d\x22\xfc\xfd\x79\x4c\x4e\xd8\x7a\xfe\xca\x2b\x5a\x9c\x1c\x7b\x16\x2b\x4a\x16\xf3\xb7\x83\xea\xe6\x7b\xaf\x05\x11\x75\x41\x1c\x92\x10\x50\x36\x59\xf9\x34\xbd\x49\x6d\x0d\x5e\x73\x88\x34\x2b\xbc\x39\x1f\xf2\xe1\x16\x19\x5d\x0d\xd7\xd3\xbd\xab\x18\x64\x47\x8a\xd7\x20\x21\x00\x38\xb8\x10\xac\x12\x38\x4b\x1f\x51\x5c\x12\x22\x7b\x3f\xf6\x5d\xad\x2c\xc1\x41\xbc\xd3\xb9\x66\xe0\x4e\x79\x38\xa6\x9d\x17\xad\x84\x63\x34\xf4\x15\x56\x10\x07\x17\xc2\x9b\x15\xa3\x26\xaf\xf4\x2a\x52\x22\xb2\x1c\x6e\x89\x1c\xbd\x99\x3f\x9b\xb5\x79\xdb\xa6\xc9\x51\xdf\x6f\x64\x54\x5d\xe6\xcd\xba\x8f\x48\x6a\x40\x1c\xd4\xa7\xe6\x54\x49\x0d\x68\x82\x3f\x49\x09\x4f\xb6\xce\x0f\xf0\x47\xf4\xd7\xc6\xd6\x58\x96\xdc\xbf\x5d\x88\x6d\x88\x46\xf8\x59\x77\x56\xb2\x39\x98\xed\x53\xa5\x16\xd6\xa4\x3e\xd4\x2e\x00\xc0\xc1\x95\x20\xc6\x41\x89\x4b\xc8\xcc\x5d\x49\x3f\xcd\xcc\x48\x1a\xb3\x4f\xcf\x89\xbb\xa1\x30\x4b\x21\x1e\xf5\x27\x3e\xcf\xa8\xe2\x5a\x17\x35\xf4\x27\x06\xe0\xe0\x4a\xf0\x10\xce\xe5\xb8\xbe\x14\x82\x12\x60\x37\x60\x87\xbe\x5b\x7c\x07\x6d\xa3\x5b\xc2\x98\xef\x65\x4d\x2f\xf9\xd5\xf0\xfc\xdb\xef\xb7\x10\x75\x41\x1c\x5c\x09\xe1\xc3\x33\x94\x37\x8a\x52\x5c\x6d\x05\x24\x58\x3b\xe2\x1c\x5e\x8f\x69\x72\xb1\x62\xd3\xe4\xd0\xba\xa1\xbc\x23\xe5\xc3\xba\x99\x04\xf5\x0e\x05\x70\x70\x25\x48\xe0\xf3\xa0\xbe\x56\xb1\xc8\x4a\xf7\x4b\x4a\x67\xd4\xb3\xbd\x7b\xc7\xee\xa1\x13\xe5\x90\x90\x52\xbc\xc9\xd3\xc9\x4c\xfe\xc8\x58\xc4\x46\x1c\xc4\x41\x1d\x29\x4e\x97\xd4\x80\x16\xdd\x93\xa4\xe0\x41\xc4\x3d\x51\x63\xe6\x13\xba\x3a\x75\xbd\xe1\x7c\xf5\x79\x79\xa2\xad\x8c\xf4\x61\x6a\x37\x5b\xb5\x44\x61\x56\x33\x99\xdf\xd0\xd7\x58\x40\x1c\x5c\x0a\x72\xac\x9f\x1b\xb2\x77\xbe\xd1\xa7\x58\x74\xe6\x73\x32\x54\xee\x48\xdc\x6e\xd3\x46\x11\x7e\xa4\xd3\xbe\xf4\xbd\x7f\xc0\xd2\x06\xea\x63\x0f\xe2\xe0\x52\xd0\x72\x37\xd2\x54\x13\xea\x0f\xd1\x99\x18\xd0\xee\x12\x75\xb9\x7a\x2d\x73\xe6\x18\x8b\x8e\x99\xdb\xf1\x2f\x77\x26\xde\xb7\xa4\x32\x44\x5d\x10\x07\x97\x42\xab\x8b\xfb\x62\xb7\x64\xf2\x83\x05\xe3\x5e\x76\x37\xb3\x1e\x51\x9b\x97\x5b\x39\x56\x5e\x9b\xd8\x75\x2e\x1a\x43\x58\xfa\x71\x90\x74\x41\x1c\x5c\x0a\x99\x4c\x4f\xb0\x67\x42\x6f\xca\x11\xf6\x26\xe3\xef\x1b\x72\x56\xb6\xec\x1c\x69\x49\x4b\x7b\x0f\x28\xf2\x60\x0d\x98\x15\xf4\x15\x22\xa4\x00\xe2\xa0\x8e\x14\xa7\x4b\x6a\x40\x1b\xa1\x13\x1b\xda\x9d\x67\xb1\x96\x8d\x16\x60\xc3\xc6\xb0\xde\x6e\xb6\xa2\x09\xf4\x10\xfc\xe4\xe5\x50\xe1\xff\x07\xc7\x31\x01\xab\x41\x12\x15\xfa\x44\x00\x88\x83\x4b\x21\xb9\x91\x98\x9f\xd3\x55\x49\x6b\xaa\x52\x2b\xfb\x31\x6f\xd8\x13\x92\x1f\xf4\x2d\xbd\xd5\x79\x5e\xda\x5a\x2c\xfe\x5f\xf8\xf4\xa0\xfe\xe5\x20\x0e\x2e\x85\xe2\x49\x12\xfc\x52\xbb\x77\x61\xb3\x35\x25\x5f\xa2\x3b\x5b\xeb\x1e\x06\x61\xcb\x97\xf2\xfc\x4d\x67\xc6\xd6\x38\x7e\x46\x72\xf0\x0b\x51\x17\xc4\xc1\xa5\x30\x61\x70\x48\xad\xe5\xf0\xaa\xba\xa9\x26\x48\x43\x0e\x27\x4f\xba\xeb\x62\xd1\xb7\x8c\x66\x22\xfd\x27\xcd\xef\xc5\x9f\x17\x7e\x80\xae\xbc\x80\x38\xb8\x14\xfc\x3c\x5b\x4b\x0a\xdd\x6b\xac\x6f\x5d\xe3\x7d\xba\xc7\x46\x6f\xaa\x16\x4e\xd1\xa3\xa3\xef\x8d\xb9\xa7\x4e\xfb\x2e\xae\x25\x98\x06\x21\x05\x10\x07\xcd\x0a\xa7\x4b\x6a\x40\x9b\xd3\x93\xa4\xf0\x57\x26\xc1\x7d\xc2\x65\xfa\xf9\x5d\x19\x8e\x97\xef\xd7\xdd\x5f\x67\x62\xa1\xbf\x5f\xf8\x28\xf2\x6d\xe1\xd3\xe2\xf0\x94\x4d\x3c\xf4\xd9\x45\x10\x87\x74\x51\x3a\x21\x94\xe3\xf7\x2d\xed\x28\x6c\xe1\x26\xd1\x54\xf5\x6b\xb6\x89\xe1\xd4\xca\xa2\xe4\xd7\x93\x67\xbd\xb2\x74\x73\x8c\x5f\x7b\x42\x17\xa5\x01\x1c\x5c\x0a\xf9\xa2\x58\xc4\xe9\xa2\xdf\xee\x4f\x85\xe2\x64\xbe\xee\x38\x68\x3c\xf7\xfd\xa5\x15\x99\x41\xee\x76\xc2\xe2\xc5\xe7\xb6\xf7\x83\xa0\x1b\xfe\x20\x0e\x2e\x85\x94\x72\x9c\x21\xe9\x99\x25\xb4\x2e\x6d\x0f\xfe\x1a\x93\x58\xae\x57\x78\x68\x45\x38\x4a\xf9\x0e\xd4\xda\xe5\x9d\x19\x0d\x17\x0d\x10\x75\x41\x1c\x5c\x0a\xc6\x9e\xee\xc6\xb9\x56\xac\x75\x4f\x33\x25\xa3\xae\x2f\x34\x3a\x62\xd8\xd8\xe8\x5d\x60\x33\x10\x52\x32\x25\xdc\xdf\x40\xdd\x9b\x43\x48\x01\xc4\x41\xb3\xc2\xe9\x92\x1a\x90\xcb\x3f\x39\xa9\x19\x2b\x6c\xbf\x7a\xee\xc7\x53\x31\x66\x5f\x94\x84\xf1\xf1\x34\x7a\xbf\x92\x62\x51\xf2\x6f\xad\xb7\xc9\x08\x6c\xdf\x29\x63\x5c\x59\x42\xa4\x1e\x20\x0e\x39\xa9\xd1\x09\xe2\x1b\x2b\x42\x6f\x8a\x7b\x61\x74\xfc\xec\xd0\x2f\xdf\x5a\x5f\x53\xbe\xc7\x56\x85\x30\x32\xef\x6b\xc8\x98\x11\xca\x31\x2b\xa2\x32\x88\x43\x4e\x6a\x1c\xb7\x6f\xb9\x2d\xd1\xf2\xa1\x5e\x48\xc8\x6e\x9d\xaf\xeb\xe2\x17\x48\x2d\x9c\xb1\xe6\xa1\xbd\xee\xb3\xa9\xd8\xf6\x8d\xec\x25\x1a\xa2\x32\x88\xf3\x93\x41\x41\xf9\xaf\x84\x27\xb0\x9b\xb9\xe5\x7f\xfa\x4d\xff\x3d\xc4\xc6\xb3\x10\xb5\x24\x7d\x5a\x3e\xf4\xfb\x5b\x97\xbd\x6d\x67\x33\x37\x7b\x3d\x9b\x73\x31\x94\xd4\xd4\x7a\x5d\x61\xa1\x16\x09\xfd\xdb\x30\xa4\x8a\xd3\x1e\x9c\xa0\xf4\x1c\x6b\x85\xd8\x98\x80\x26\xc9\x91\xeb\x4d\xc9\x3b\x91\x4f\x07\xff\x26\x35\xc2\x0a\xe6\xc7\xc7\xe4\xcf\x30\x58\xea\xd1\xa8\xf9\x34\x5b\x4c\x37\xc4\x97\xc6\x56\xcb\x5b\x49\x1d\xb8\xe9\x5b\xa6\x43\x74\x71\xfe\x41\x31\x5d\xf2\xe9\x8f\x44\xbf\x27\x50\x3d\x48\xf5\x51\xb0\x17\xab\xd5\x5d\x0f\xef\x48\x19\x79\x6a\x6b\x7f\x63\x50\xd0\xf1\x92\x27\xc7\xff\x4a\x52\xb3\x8d\x71\xba\x47\xfb\xbf\xa4\x46\x1a\x45\x0a\x6e\xac\x75\x3f\x11\x9c\x2b\x24\x92\x3b\xa8\x64\xdf\xfa\xa2\x26\xa3\x9c\xc0\x9c\x53\xd9\x28\xc0\x1b\xd7\xa7\x75\x77\x11\xbf\xb9\x84\xe4\x0c\x1a\xc0\x86\x4a\x7b\x23\x45\x35\x63\x2f\xd2\xbb\xfb\x08\x4b\x0d\x85\x9a\x8d\xbf\x60\x59\x08\x84\x8b\xec\x2b\xf8\x0f\x06\xa9\x7b\xbb\x58\xff\x9c\x8c\x90\xfe\x89\x7f\x26\xe7\x3d\x04\x91\x52\x04\xa9\x73\x73\x57\xc4\x23\xbd\xda\xa4\x74\x87\x14\x1c\xea\x94\x2f\x87\x0d\x5f\x1c\x59\xc7\x23\x76\x26\xeb\x3b\xcf\x86\x7f\xdb\x9b\xe3\x4c\x4e\xb7\x20\x47\x35\xe2\xfd\x6c\xbf\x3c\xa8\x1d\xa4\x2e\xe1\xeb\xd0\xfd\x49\xf9\x12\x60\xd8\xce\xcb\xed\x8f\x2a\x6d\x92\x2d\xa2\x16\x5a\x96\xf4\x9a\xf9\x4c\x9e\xf6\x21\xf2\x59\x9e\xfa\xe7\xe2\xba\x97\xf7\xd8\x7d\x14\xaa\x4a\xca\x38\x6f\x60\xad\x60\x09\x2e\xdc\x56\x64\x5d\x0d\xb3\x71\xbd\x21\x4f\xa8\xa3\x73\x26\x4f\x8b\x1c\xd5\x98\xf9\xa1\x88\xe1\xa2\x1a\xbe\x69\x1d\x0f\x68\x74\x10\x5f\xc5\xb3\xbf\xb9\x4c\xa8\x5f\xa6\xe0\x98\x2e\x4b\xcc\xaf\x7e\xc0\xfd\xe3\xcc\xa2\x1a\x90\x74\x4f\x5a\x76\x6f\xe1\x04\x9b\x97\xb9\xf6\x53\x5b\x75\xb8\x99\x15\x65\xbd\xfd\x25\x48\x75\x7f\x93\xef\x0d\x05\xf6\x25\x9d\xaa\xb7\xc1\xf3\x32\xd0\x8b\x0c\x10\x07\x5f\x76\x2f\x56\x52\x1f\x4b\x15\x18\x49\x60\x3e\x47\x6f\x89\x58\x24\xae\x14\xcd\x94\x30\xd9\x38\xec\x67\x44\x3b\x68\x15\xd9\x2f\x31\x80\x2e\x33\x83\x38\xf8\xb2\xeb\x34\xe0\xde\xd9\x67\xf4\x3d\xe2\x8b\xde\xbd\xd5\x38\x3f\x06\xa5\x58\xdc\x66\x91\x35\x36\x1c\xec\x81\x4e\x39\x1f\x92\xd6\x97\xd0\x5d\x07\x10\x07\xff\xbd\xf5\x25\x8f\x2e\xb6\xbf\xce\x37\x19\x5f\xd1\x53\x08\x96\x50\xb3\xde\x32\x5e\x2f\x31\x14\x31\xff\x72\x55\x75\x28\xd7\x63\x8f\x9d\x0d\x51\x17\xc4\xf9\x49\x61\xfd\xa7\x2e\xf6\xc7\x39\xbe\xa9\xd2\x67\xba\xf3\xcf\x23\xec\xca\x3d\x27\x67\xdc\x9d\xf3\x1e\x79\xc8\x46\x08\x08\x46\xe9\x48\xdf\x1f\x30\x0a\x43\x38\x74\x10\x87\xe8\x4f\xf2\xff\x4c\x58\xe0\x0d\x18\x68\x3a\x39\x49\x09\xf9\xf4\xf5\x5e\xe8\x8b\xbe\xe4\xf4\x97\xfe\x3c\x24\x48\x55\x5a\xb7\x4f\xd1\x6a\x17\xe2\xad\x61\x88\xe7\x3d\x2e\x35\xc2\xf5\xbc\x0f\x6d\x68\x00\x1c\x7c\x64\x2f\xb5\x15\x1b\x5c\xed\x15\x7c\x71\xeb\x8f\x99\x89\x79\xbd\x35\xfa\x88\xb2\x75\xd7\x2c\xe3\xa3\x4b\x84\x54\xae\x5b\x7c\xca\x22\xd0\x0b\x74\x10\x07\x57\x02\xd9\xb0\xfd\xac\x91\x9d\x2a\xf9\x77\x81\xc9\x71\x63\x9b\xa7\x29\x6e\xd7\xfb\x53\x59\x0b\x48\x3e\x98\x07\x1d\x78\x6e\xb2\xd0\xe9\x21\xea\x82\x38\x24\x1b\xc9\x77\x51\x40\xbe\x69\x19\xad\x34\xa9\x94\x82\x21\x44\x2e\xf4\x5c\x19\x7a\x47\x6a\x05\xdf\xec\xe3\xab\x4d\xab\xb1\x26\x96\x3a\x90\x8d\x04\x70\x70\x25\xf0\x31\x5f\x0b\x0d\x19\xfe\x7b\xcb\xb5\xe0\xef\x24\x3b\x73\xee\x0e\xc5\x21\x66\xa1\x1b\xe9\x57\x55\x5d\xa7\xfb\x77\x6d\x28\x9f\xcc\x23\x94\x00\xe2\xa0\x4e\x35\xa7\xca\x6a\x40\x33\xfc\x89\x5f\x6c\x9f\xca\xed\xa5\x5d\x1f\x62\x24\x3b\x97\x7f\x81\xbd\xbb\x4b\x94\x43\xb7\x71\xd2\xfa\xd0\x7d\xc1\xff\xcd\x57\xea\xa2\xcd\x54\x17\xe8\xc8\x03\x80\x83\x8f\xac\xe8\xd5\xda\x8a\x6e\xce\x24\x37\x8c\xe9\x04\xe5\x77\xa6\x54\xdd\xe2\xfb\x86\x14\x71\x31\xb2\xac\x97\x8a\x5a\x42\x7b\xb5\xe6\xa1\x2b\x86\x20\x0e\xae\x04\x8a\x0f\x53\xf2\x8a\xd9\xaf\x12\x70\xeb\xb0\x0b\x1c\x84\xe3\x79\x94\x77\x43\x24\xf3\x76\x72\x53\xc3\x9c\xc6\x58\x1c\x43\x3f\x47\x40\x4d\xa6\x00\x1c\xd2\xcd\x0c\x2e\x3e\x15\xbe\x3f\x55\x13\x7c\x13\xa8\xaf\x2c\xfd\x73\x07\x15\xad\x2f\x7f\x8c\x21\xd6\x20\xcc\xfa\x69\x7d\x39\xa3\x90\x4f\x04\xba\x99\x01\xe0\xe0\x4a\x78\x3f\xfe\x50\x61\x34\x27\xcd\xd8\x58\xdc\xed\x5b\x87\xd9\xad\xf2\x90\x0e\x74\xed\x0f\xaa\x3b\x4a\xb4\x71\x52\x11\x93\xed\xa2\xfc\x88\xad\x38\x88\x83\x7a\x52\x08\x9e\xca\x95\x81\x56\xdd\x93\xa4\xf0\xd3\xc2\x28\xf1\xc1\x56\x5b\xa0\xd8\x7a\x4a\x59\xc4\xc8\xde\x51\xa0\x74\x3d\xc1\xeb\x73\x02\x2a\xb8\x65\x44\xcf\x48\xd3\xcd\xa1\xb6\xca\x20\x0e\x3e\xb4\x9d\xae\x61\x75\xbb\x32\x57\xdb\xbf\xa9\xd4\x7a\x46\x29\xc5\x61\x10\xf4\xe6\xde\x0c\x15\x60\xbc\x6c\x4d\xf1\x88\x14\x2f\x06\x0f\xea\x38\x0f\xe2\xe0\x52\x18\x56\xfc\x3b\x78\x4d\xe9\xbb\xcf\x16\xa3\xfd\x75\xbe\x37\x81\xf7\x2b\xb5\x34\xf5\x85\x1e\x6f\x2c\x49\xab\xd5\xf5\xdc\xde\xd0\x80\x5c\x24\x88\x43\xea\xa1\xe1\xbf\xca\xcb\x4a\x9a\xe0\x3a\xaa\x71\x2d\xcc\xc9\x8e\xc5\x1e\x97\x72\xf0\xd9\x5b\xfe\x04\x6b\x4c\xda\x7d\x25\x36\xf3\x9c\x17\x50\x0f\x0d\x00\x07\x97\x82\x68\xb3\xd7\xb3\xe1\xef\x34\x7f\xfe\x7c\x1e\xa6\x75\x54\x2f\x62\x74\x25\x4a\x21\x1d\x32\x08\x26\x8b\xad\xa3\xb1\x8c\xfd\x5e\x03\x35\x92\x05\x71\x50\x4f\x8a\xd3\x65\x35\xa0\x9d\xd0\x49\x52\xf0\x7a\x15\x4f\xde\xf8\x65\x75\x99\x4f\xf7\x81\x74\xf6\x39\x69\x57\x31\x5d\x5b\xec\x9f\x3c\x1f\x8d\xac\x44\xba\x4a\xa8\x6e\xff\x85\xce\xae\x81\x38\xa4\x46\xb2\x3b\xa5\x97\x2e\x7c\x3e\x57\x90\x3c\xf6\x9c\x84\x27\xea\xda\xb4\xb3\xc9\xfa\x57\x85\x84\x10\xda\x69\x9b\x7e\x43\xf7\x84\x05\x68\xdd\x01\x71\x70\x29\x9c\xdf\x29\xa5\x65\x1b\xff\xf3\xe3\xeb\x44\xe5\x9a\x80\xd8\xf8\xa6\xff\x5a\xf8\x3c\x97\x2c\x05\xe7\xd6\xcf\x7a\xb6\x70\x6f\x69\x68\x7d\x00\x71\xf0\xdf\x1b\xfd\x1b\x7f\xe9\x07\x26\x85\xeb\xb5\x8e\x67\x5f\xbd\xbe\x0f\x2c\x1f\xf6\x32\x0f\x84\x14\xea\xc4\x3a\xef\x3e\xbc\x6b\x6f\xc4\x07\x75\x46\x07\x71\x70\x29\xf4\xea\xda\xa8\x0d\xe7\xbe\xb9\x13\xc9\x2b\x1d\x7b\xd5\xee\x12\x86\xfd\x83\x8e\x79\xab\x00\x21\x2a\x0f\xa1\x3a\xcc\xaf\xd7\xb3\xf6\x10\x52\x00\x71\xd0\xac\xf0\xf0\x54\x52\x00\xed\x4e\x4f\x92\x82\x78\xe6\xfa\xef\x1d\xe7\xdf\x52\xf9\x2d\x35\x0b\xaf\x73\x07\x7a\x7c\xab\x28\x5b\x38\x43\xb1\x86\x92\xb1\x72\x8c\x39\x42\xee\x37\x42\x07\xa1\x00\x1c\x7c\x68\xbf\xef\xd0\x2d\xd5\xba\x3f\x96\x6a\xdc\x97\x15\xec\xbd\x41\xf9\x46\xf9\xa9\xff\xef\x9c\x9f\x55\x8f\x0e\x45\xb1\x52\x19\xc7\xd3\x0c\xa1\xae\x89\x00\x0e\x2e\x85\x5e\xf7\x8b\xd7\xce\xcb\x2b\x5d\x9b\xf9\xd1\xde\xff\xa6\x43\x8e\x97\x43\x8e\x73\x81\xf4\x88\x4b\x66\x80\x41\x3c\x8a\xe2\x03\x3d\x74\x72\x1c\xc4\xc1\x7f\x2f\x61\x4e\xcf\x6e\x9c\xc4\xca\x85\x8a\x11\x3c\x89\x34\xbb\xb5\x65\x94\xb2\x75\x6a\x75\xd7\xfe\x41\x47\xf5\x60\xb4\x4f\x8c\x8d\xd0\xd5\x6e\x10\x07\x97\x02\x57\xd9\xb6\x43\x5d\xfb\xe2\xcf\x7a\xd2\x98\x6d\x9d\x5b\x4c\x7a\x6a\xda\x9a\x61\xf3\x66\x19\x84\xa3\x24\xb4\x25\xf2\x77\x5a\xc4\x10\x52\x00\x71\xd0\xac\x70\xba\xac\x06\xe4\xf3\x4f\xce\x6a\x12\xe7\x62\x2b\x45\x39\x7e\x6c\xcb\x8e\x32\xdb\xe6\xcd\xfb\x1a\x68\xed\x5d\x71\x31\x16\x9c\xde\xf4\x37\xb7\xe9\x64\x2a\xbd\xfc\x01\x91\x7b\x80\x38\xe4\xac\xa6\x09\x67\x0a\x7b\xd8\x59\x46\x21\xcf\x3a\x5f\x88\xf8\xbc\x2e\x5d\x9a\x1c\x5a\xb7\xad\xda\xa1\xd6\xf5\x42\x9c\x75\x74\x05\x47\xe8\x6b\xda\x20\x0e\x39\xab\x51\xf9\x20\xae\x5d\xcc\x1c\x11\x8d\x11\xd1\x3b\xc8\x68\xe5\x35\x8a\xb1\x47\x2f\xeb\x2b\x1e\xc8\xfb\xb6\xad\xc2\xf9\x96\x03\x3f\x0e\xa2\x32\x88\xf3\x93\x41\x41\xf9\xef\x27\xd6\xb7\x54\x33\xf8\x1f\x6b\x74\x74\xe8\xf5\x49\xef\x9d\x3b\xbc\xef\x82\x66\x33\x6a\xdf\xee\xba\xd0\x14\xee\xd0\xff\xf9\xe1\xde\xa8\x14\x94\xd5\xfc\xa8\xb2\x5f\xdb\xee\xfd\x86\xcf\xc3\xbf\x37\xa7\xee\x43\x51\xaf\xaa\xf4\x17\x47\x68\x60\x48\xf7\xba\x60\x73\x96\x04\x9b\xc8\xb9\xff\x9c\xaa\xc1\xb4\xa5\x8f\xdf\xff\xad\x79\xb0\x9b\xcf\x5a\xa7\x67\xd8\x7a\x8f\x41\xcf\x21\x65\xbd\x4c\x24\x9a\xc0\xe2\x56\xb2\xc2\x43\xdc\x7f\x5f\x0d\xef\x48\xbe\x6e\xb8\xcb\xa0\xf3\xe5\x5e\x71\xc2\xb6\x81\x5b\xdc\xb1\x44\x59\x4e\x60\x9e\xcc\xee\x81\xca\xbd\x40\xe3\x67\x18\x62\xff\x6b\x59\x0d\xe8\xd1\xfe\xc9\x6a\x24\x90\xb2\x1a\x8b\xb8\xc9\xe7\xa4\x09\x59\x63\x16\x61\x4c\x81\x46\xe8\xcc\xde\x57\x04\xf7\x29\x97\x5d\xbc\x5b\x24\xfc\x9e\x6a\xfa\x90\xa4\xcc\x9c\x45\x56\xd3\x80\x94\xd5\x2c\xde\x97\xb2\x70\xc0\x69\x16\xf0\x88\x50\xe5\xf6\xff\x53\x34\x95\x23\x21\xc3\x2c\xf1\xb3\xf8\x57\x6a\xf3\x5d\x67\x86\xdf\x7a\x02\x67\x72\xe2\x03\x39\xab\x91\xab\xc0\xba\xa2\x20\x70\x17\x8b\xfb\x01\x7a\xb5\xd9\x80\x4a\xa0\x7b\x91\xe5\x9b\x51\x8d\x32\xd1\xb1\xfb\xc9\x54\x8e\x47\xda\x9f\xce\xe4\x7c\x0b\x72\x56\xe3\xc0\x78\x13\x3b\xf0\x88\xa3\x78\x9f\x8e\xe1\xfb\x79\x9f\x26\x9c\x07\xec\x8b\xcf\x56\x25\x5f\x5e\xee\x5b\xba\x9f\x47\x3c\xf9\xbd\xf9\x4c\x9e\x16\x39\xab\x79\x2e\xfb\x25\x18\xad\xc7\xce\xa7\x8e\xf8\x96\xc7\x4d\xd5\xc0\x51\xbf\x78\xcd\x4a\x8c\xa7\xcb\xcc\x0f\x98\xd6\x51\xa6\xc3\x73\x86\xce\xe4\x69\x91\xb3\x1a\xe5\x92\x4a\x34\x94\xd7\x78\x14\xb5\xbb\xcd\x72\x9f\x1f\x95\x79\x14\x26\x74\xbc\x51\xf6\x96\x5a\xda\xc1\x64\xee\x77\x69\x1c\xde\x3b\xb3\xac\x06\x24\xdd\x93\x96\xdd\x90\x5e\xbd\x47\xe3\x3d\x68\x02\x33\xf4\xce\xc7\xe8\x3f\x33\x77\x0b\x06\x76\x86\x93\xcd\x2e\xf2\x48\xe7\x8b\x72\x66\x70\x26\x17\x20\x96\x1b\x10\x87\xb4\xb9\xc5\x3b\x7a\xfb\xb2\xd1\xca\x95\xd8\x78\x02\x87\xcb\xa4\x52\x84\x31\xc5\x89\xd7\x5b\xcd\xcf\x90\xee\xf6\x6e\xe7\xf0\x47\x13\x5a\x68\x73\x0b\xe0\xe0\xcb\xee\xbd\xf7\xe4\xd1\x18\x26\xb3\xb4\xd5\x8f\xa7\x15\x50\xb9\x3f\x77\xfe\xad\xb0\x28\x7e\xb4\x7a\x40\x6c\x86\x29\x74\xaf\xd9\xfe\x2f\xf4\xc9\x54\x10\x07\xff\xbd\x0a\xa2\x2a\xf7\x3f\xf8\xaf\x91\x6e\x84\x5b\x18\x62\x74\xc7\x55\x3a\x37\xf7\xdd\xa1\x2e\x79\xdb\x12\xbe\x73\xd0\x5b\xfd\xeb\x10\xea\x20\x0a\xe2\xe0\x75\x31\x73\xc4\xe6\xb6\xe5\x3f\xf9\xfa\x61\xc4\xcf\xf7\x6d\xf5\xae\x11\x79\x62\xa6\x04\x0f\x8b\xb5\x98\x13\xe3\xb7\xd0\x19\x1f\xfc\x41\x38\x74\x10\x87\xe8\x50\x22\x71\xaa\xac\x06\x34\x9d\x9c\xa4\x84\xec\xe3\x02\xbb\x0d\xf7\xcd\x9f\xad\x84\x09\x24\x73\xd7\x1e\xf7\xa4\x65\x45\xb1\xfa\x44\xb7\xbc\xbd\x5c\x6e\xb3\x9a\x46\x5e\x99\x09\x5d\x1e\x00\x70\x48\x5d\x23\x79\x42\x76\xd5\x09\x16\x0e\x05\x3e\x3f\x7b\x3f\xff\xf7\x1b\xee\xe3\xc2\x1c\x92\x97\xe7\xbd\x74\x29\x5f\xbb\xc4\x0f\x5a\x28\x40\xbd\x5f\x40\x1c\x5c\x09\x8e\xe3\xf8\x74\x31\xed\xf9\xcd\x9d\xb7\xe2\x16\xb8\xb6\x77\x93\xab\x71\xbc\x0c\x23\xb7\xb7\x09\x71\x6d\xb6\xb0\xd9\xb3\x2a\xa1\x36\xd0\x20\x0e\xfe\x7b\xef\xd1\xcc\x6f\xdc\x65\xc1\x23\xf0\xf7\xd1\x1f\xaa\xa5\xef\xd9\x89\xf5\xc9\xed\x32\x32\xdb\xe3\xa1\xda\xdd\xde\x23\x78\x9a\x0b\xf5\xc0\x01\x71\xf0\xba\xc1\xef\x27\x69\x23\x0a\x13\xb7\x68\x47\x76\x9f\xcd\x77\xe0\x8f\xe8\xe2\x60\x8c\x09\xe0\xd6\x54\xa7\x2d\xfb\xef\xa2\x87\xd1\xec\x21\x94\x00\xe2\xa0\x5e\x35\xa7\xca\x6a\x40\x33\xfc\x49\x4a\xc8\x53\xe2\x69\x65\xe0\xc2\x38\x66\xb8\x7d\xfe\x9b\xe1\x87\xc5\xb9\xa9\xc6\x5f\x12\xef\xfa\xbf\x7f\xcf\x14\xf4\xd8\xcf\x9c\x19\x80\xba\x47\x80\x38\xf8\x08\xa0\xf7\xc4\x90\x71\x2a\xb9\x1e\xc7\x2b\x3d\xda\x15\xaa\xb5\x98\xa9\xb5\x76\xf8\x2c\xe1\x5b\x92\xf1\x62\x93\x20\x35\xda\xf6\x49\x3f\xa2\x2e\x88\x83\x2b\x81\x93\xaf\x51\xaa\x79\xaa\x26\x55\x71\xfa\xe1\x94\x56\x47\xc0\x22\xad\x7d\x70\x81\xa2\xbe\xc1\x9d\x87\xea\xf7\x43\x8c\x0e\x48\x3b\x11\x75\x41\x1c\x52\xca\x58\xd8\x27\x3b\xe4\x67\x31\xf1\xe1\xc5\x5a\x8c\x5d\xb4\xd8\xc2\xce\x9d\xa7\x36\x19\x98\x39\xaf\x28\x27\xaf\x94\x93\x96\x33\x42\x9f\xf7\x00\x71\xf0\xba\x8d\x82\x5a\xce\xfd\x5d\x21\x37\xee\x8a\xef\xd9\xea\xb2\xb7\x95\x32\xd2\xff\x91\xe9\x92\x1f\x69\xa2\x98\x2b\xd9\x23\x59\xbc\x6b\x85\xd8\x8a\x83\x38\xa8\x2b\xc5\xe9\xb2\x1a\xd0\xaa\x7b\x92\x14\xc2\x35\xf1\xbc\xec\x63\xcf\x37\xdd\xb7\xbf\x77\x41\xe4\x9c\xe1\xd3\xbe\x08\x61\x95\x0f\xa3\xfd\x52\x19\xc4\x3f\x04\x6c\xd2\xdf\xef\x43\x47\x8b\x00\x1c\x7c\x08\x94\xee\x79\x7d\x76\x12\xc2\xd6\x39\xff\x2e\xdb\xf1\x4d\x8c\x12\xd3\xf0\xde\x47\x0e\xfd\xe7\x23\xb4\xb2\xf3\x6f\x56\x97\x2a\xcc\xa1\x56\xe3\x20\x0e\x2e\x85\xca\x0c\xc5\x2b\x69\xdb\xe5\x93\x0d\xb7\x89\xed\x62\xc9\xde\x73\x6d\xa1\x99\x2a\x11\x91\x78\x7a\x29\xda\xc8\x2a\xf2\xfb\x54\x2b\x22\xea\x82\x38\xf8\xef\x9d\xcf\xeb\x74\xce\xf6\x08\xc7\xc3\xc1\xbb\xf5\x20\x9b\xdd\xd9\x82\x44\x08\xbd\xf9\x6b\x0c\x0b\x7d\x4c\x4c\x13\xf5\x85\x88\x56\xe8\xe8\x16\x88\x83\xd7\x1d\x90\xb0\x89\x8c\x93\x2d\xbd\x85\x95\xd7\xe1\xbf\xd1\x28\xd1\x6a\x4f\xfc\x77\x35\x06\x37\x41\x5b\xbf\xbd\x13\x63\x5c\x5e\x1a\x03\x21\x05\x10\x07\x75\xa5\x38\x5d\x56\x03\xda\x09\x9d\x24\x85\x8f\x6d\x4d\x66\x02\xb4\x3d\x3e\x84\xe2\xc5\xb7\x77\x52\x58\xa4\xdc\x30\x68\x0e\xe9\x8d\x08\xad\x5f\x0a\xa5\x8d\x5e\xe0\xbb\xb2\x89\x18\x02\x10\x07\x1f\x02\x57\x41\x82\xc9\xd1\xea\x4a\xe9\xe3\xcc\x64\x47\x8d\x32\x0a\xdd\x6b\x5f\x77\x2e\x52\xd3\x2e\xab\x15\x7c\xdc\x9e\x5c\x2e\xa8\x4b\x46\xd4\x05\x71\x70\x29\x8c\x10\x06\xa0\xab\x7e\x79\x34\xa9\xb2\xa0\xfa\x22\x50\x69\x45\xc9\x88\xb3\x93\xa9\x96\xa5\xb8\x28\xd0\xff\x9b\x83\xf1\x03\x83\xbb\x88\xba\x20\x0e\xfe\x7b\x77\x35\xeb\x39\xb6\xed\x6e\xea\x5c\x78\xd8\x5d\x20\x31\xf3\x19\x9d\x72\xc2\xed\xf8\xba\xfd\x87\xbe\xaf\x89\xf3\xce\xc1\xa6\x21\x50\xcc\x08\xe2\xe0\x75\x0b\xa6\xe8\x31\xa5\x8b\xff\x94\x0d\xcf\x61\x4d\xb6\xfd\xb5\x42\x27\xcb\x2a\x22\xab\x7d\x93\xcc\xd5\x27\x51\x73\x98\x4f\x50\x30\x89\x90\x02\x88\x83\x66\x85\xd3\x65\x35\xa0\xdd\xe9\x49\x52\x30\x2b\xc1\xdf\xf1\x6f\xfa\xdc\x2a\x6b\x54\xa3\x72\xc8\x28\x5f\xfe\xa2\xb9\x1e\xdb\xef\x4e\x4d\x74\x5a\x9a\xf0\xe1\x75\x17\xeb\x0e\xc4\x10\x80\x38\xf8\x10\xc4\xe1\x67\x1d\xb4\x3e\x31\xf6\x21\x30\xb5\x7c\x30\xef\x2d\xa3\x39\x2c\xf0\xf4\x2d\xd1\x11\x1e\x6e\x2b\xee\xf7\x98\x9a\x6d\x4e\x1b\x44\x5d\x10\x07\x97\x42\x83\xd1\x34\xf3\x43\x8d\xd2\xa6\x07\xcf\xcf\x7b\xff\x60\x7a\x78\x95\x7a\xfe\x57\x63\x39\x53\xc8\x02\xd6\x23\x3e\xd9\xd2\x48\x26\x28\xcc\x07\x71\xf0\xdf\xab\x65\x5f\x64\xf6\x45\xf1\xeb\x4e\x5c\x06\x13\x79\xaa\x54\xaf\x5a\xf3\xe7\x81\x21\x89\xc5\x73\x06\x5f\x96\xb2\x58\xb2\xb6\xa8\x31\xa0\x53\x7c\x00\x0e\x5e\xd7\xf2\xb0\x3a\xe5\xe5\x64\x78\x59\xe1\x2c\xee\x77\x9c\xe0\x18\xb3\xd9\xfe\x4b\xcf\x24\x77\x07\xa8\x7f\x5e\x5e\xb8\x99\xf6\xf3\x66\x34\x42\x0a\x20\x0e\x9a\x15\x4e\x97\xd5\x80\x7c\xfe\xc9\x59\x0d\xa7\xe9\xf0\x7b\xb1\x8b\x35\xe2\x5d\xf5\x38\xed\x8f\x9b\x55\x9c\x7f\xde\x6b\xe1\x18\x78\x2e\xac\x2e\x7b\x1b\xe5\x03\xc5\x7b\x21\xe8\x06\x14\x88\x43\xce\x6a\x1e\x7d\xd1\xfa\x3e\x57\xfe\xf1\x71\x1c\xa9\xd9\x27\x02\x53\xfb\x72\x2a\x12\x0d\x53\x7a\x51\x82\x20\xf2\xdd\xc7\x38\x35\xd6\xf9\x61\x88\xca\x20\x0e\x39\xab\xf1\x9b\xa6\xc0\xc9\x6b\xc4\x20\xbb\x7e\x37\x25\xca\xc4\x9d\xe5\x6f\xd0\x81\xd0\xdb\xbd\x88\xe8\x12\x45\xc2\x80\xba\xe8\x15\x52\x61\x44\x65\x10\xf7\xff\x66\x35\xff\xb9\xbc\x66\xa8\xed\x76\xe5\x79\xd6\xc1\xfa\x81\xc1\xeb\xca\x2f\xe5\xe1\x99\x0c\x06\x32\xc9\x1e\xfb\x2f\x55\x15\xd2\x1f\x6c\x77\x8c\xd6\xe1\x43\x59\x0d\x0e\x0a\x85\x6c\xe0\x8c\x2b\x55\x6c\x31\x53\x78\xa9\xfd\xef\x58\x0f\x77\x0b\xe6\x7a\xbf\x5b\xad\x26\xc1\x9a\x46\x5a\xd7\xdc\x66\xff\xcd\x6a\xf4\x44\xfb\x7f\x8f\x67\xc5\x7b\x4e\xe3\x62\x55\x19\x64\x5f\x5b\xe5\x48\x6a\x5a\xce\x4d\x17\x4a\x9e\xdc\x7c\x9b\xf3\x6e\x9a\xb1\xff\x1f\xb4\x2a\x68\x22\xef\xb7\x86\xd7\x12\xde\x25\x1e\xf9\x9d\x6b\xba\xf2\x3e\xf1\xcf\x74\x13\x7d\xdb\x42\x3c\x75\x87\xf4\xf7\x39\x32\x9a\x25\x24\x70\x70\xfe\x17\xb2\x1a\x6f\x8c\xd3\x3d\x9a\x3f\x1a\x0a\x86\x9f\x24\xad\x77\x40\xa8\xb4\x37\x52\x56\x83\x27\x13\x7f\x67\x85\x64\xed\xad\xec\xf3\x3d\xb4\x5a\xf3\x6b\xbd\x81\xc7\x6c\xdb\xed\xfe\x64\x95\x3c\x89\xa1\x04\x5f\x6e\xac\x85\x9f\x45\x56\x83\xa2\x0a\xff\x57\x59\x48\x6d\x66\xbf\x4c\x3f\x90\x7a\x4c\xeb\xb5\x5c\x7e\x23\x3d\x25\x9a\xf3\xe0\x0f\x65\x6c\xbe\xed\x9f\x65\x0d\x11\x52\x92\xcf\x39\x67\x72\xe4\x03\x39\xab\x59\x63\x62\xa7\x60\x51\x6b\x0a\xfb\x76\x2c\xc9\xc6\x49\xf0\xa5\x6b\xaa\xf9\xb3\x52\xbc\xbf\x25\xca\xa8\xc0\xa1\xbf\x04\xaa\xe6\xe4\x99\x1c\x70\xd1\x46\xfa\x67\xa3\x63\x07\x07\xd9\x1d\x87\x8a\xf5\x09\xd0\x15\x99\xd4\xc3\x6b\x7f\x9a\xf2\x0c\xbf\xde\x97\x7a\x48\xcc\xd3\x71\xe9\xf5\x50\x1d\xc1\x99\x3c\x2d\x72\x56\x23\x6e\xb1\x63\xee\x8d\x8b\x26\xf8\xf0\xc2\xb7\x1a\xd6\x02\xf1\x97\xcf\xdf\x70\x59\x16\x06\x05\x14\x6e\x98\x78\x67\xdd\x51\x95\x08\x3a\xb3\xd0\x04\xa4\xa1\x13\x2f\x1e\x44\x86\x49\xe8\x65\xd0\x3e\x95\x8b\x31\x8c\x12\x0e\xd1\xf5\x16\x40\xad\x9b\x95\x9e\x4f\x3a\xa6\xf2\x8a\xbd\xbc\xdb\xc6\x22\x0c\xbd\x5e\x02\x70\xf0\x79\x1f\xfb\xdc\x13\x4a\xd5\xfd\x5e\xca\x87\x36\xed\x0d\xb4\xcf\xcd\x16\x39\x5a\xfd\x24\x2f\x60\x3e\x55\x3a\x44\x8b\xfb\xce\xc0\xf8\x16\x7a\xa7\x00\xe2\xe0\xeb\x9f\xb0\xce\x05\x1d\xb5\x79\x52\x46\x66\x91\xec\x2c\xb4\xa7\x44\x97\xea\xee\xe7\xc7\xb8\x24\xfb\x8d\xa0\x3d\xbb\x3c\xaa\x41\xe4\x05\x59\x65\x10\x07\xff\xbd\x66\xf4\xb1\xb7\xfb\x62\x1d\xb5\x2f\xcd\x1d\x12\xdc\xb9\x8c\xc3\x2d\xc3\x6b\xe4\x3d\x44\x54\xe7\xdc\xf7\x6b\xec\x88\xdb\xd0\x00\x3a\xaf\x0a\xe2\xe0\xbf\x57\xe5\x38\x3d\x4d\x48\xf6\xee\x6b\x63\x96\xa1\xc6\x06\x1a\xae\xea\x90\x32\x93\x32\x9b\xa9\xe7\xec\xf5\x11\xa2\x61\x41\x22\xdb\x8c\x08\xab\x0c\xe2\x10\xcd\x42\xbc\x4f\x15\x9a\x80\xfe\xae\x4f\x52\xc2\x1e\xe1\xd6\x68\x6f\x67\x9c\xaa\x8e\x5c\xd2\x8c\x0f\x09\x4f\x77\xb4\xd5\xf4\x9e\xe6\x3b\xdf\x37\x7d\xf2\x69\x6f\x0f\x3f\xad\x1d\x23\x46\x00\xc4\xc1\x47\x36\x7e\xc9\xf9\xd0\x6b\xf9\xb6\xad\x6e\x79\x1c\x66\x4e\xc2\x9d\xfc\x1f\x8b\xe2\x3f\x89\x48\xc4\xde\xf6\x79\xec\x75\xc8\xbd\x2d\x80\x1a\x43\x82\x38\xf8\xc8\x7e\x32\xff\xc8\x9a\xee\xdc\x6c\x89\xfa\x96\xf6\x1e\x6e\xe0\xed\x77\x77\x88\x6a\xdd\xdf\x7d\x0a\xd5\x31\x15\x18\xca\xdf\xb7\x24\x80\x42\x1e\x10\x87\x74\x34\x8b\x99\xe1\xda\xc4\x9b\xfa\xa5\x0b\x12\x55\x23\x57\xd5\xae\xa8\xa4\xdc\xf1\x99\x54\xf0\xaa\xe8\xda\xc3\x23\xc2\x9e\x1c\xa4\x8f\x87\x8e\x66\x01\x38\xa4\xaf\xbd\xef\x9a\x16\x99\x70\xbe\xc7\xc1\x3f\xa2\x7f\x81\x96\x46\x39\x42\xbc\x51\x5f\x72\x4f\xef\xa2\x46\x50\x6d\x82\x7d\xbd\xce\xd1\x75\x84\x12\x40\x1c\xd4\x36\x46\xf5\x34\x4a\x00\x4d\xb5\x27\x29\xa1\x9c\x33\x55\x63\x1c\x2d\x1d\x3d\xdc\x98\xa3\xbc\xe5\x36\xe5\x8a\xaa\xaa\x77\xa9\x82\xa7\x4d\xae\x4a\x3d\x6a\x69\x53\x20\xc5\x23\xc4\x08\x80\x38\xa4\xef\xef\xb0\x91\xa5\x2d\x87\x56\xe4\xd0\xa6\x12\x13\x3c\x66\x98\xab\xb3\x64\xa2\x45\x91\xfb\x8c\x3f\x7e\xec\xfc\xf6\x52\xe1\x08\xc9\xff\x7d\x7f\x07\xc0\xc1\x47\xf6\xe2\xa1\x5e\xba\xc5\x6b\xfb\xea\x6a\x1d\x63\x83\x29\x66\x31\xea\xad\x02\x5d\x8f\xad\x0d\x36\x2b\xfc\xf9\x04\xaa\x1f\x0e\x93\xce\xd0\xff\x18\x80\x83\xff\xde\x92\xa7\x0d\xd7\x78\xc4\x34\xf7\xd8\x48\xf2\x8b\xee\x3a\xc5\x90\xa3\xad\x7a\x86\x55\x0d\x5c\x8e\xa0\x7c\xdd\x61\x70\xc7\xb7\xd2\x04\xba\xee\x06\xe0\xe0\xbf\xb7\x80\x14\x4f\x32\x68\x58\xbf\xc3\x9b\x86\x19\xcd\x77\x8d\xa6\xed\x75\xc5\xbc\xc2\xef\x73\x69\x89\x18\x83\x8a\xe9\x0f\x88\xea\x02\x20\x7b\x04\xe0\xa0\x06\x11\xa7\x0b\x4d\x40\xcb\xdf\x49\x52\xe8\x9f\x74\x5b\xa5\xe5\x17\x43\xd5\xde\x09\xb3\x70\xc9\x20\xa5\x2e\x38\x7c\x82\x77\x7b\x24\xf1\x87\x78\x60\xa4\x6b\x0d\xe3\xed\x0c\xc4\x10\x80\x38\xf8\xd0\x7e\x10\xfc\x69\xc5\xb7\xc4\x60\xfc\x30\x4a\x1d\x95\xc0\x59\xf3\xcf\xa6\x3c\xaa\xe6\xbe\x25\xbb\xff\x45\xf7\x44\x66\xb2\xfd\x2a\x59\x44\x5d\x10\x07\x1f\x5a\x76\x35\xf7\xf7\xbb\x06\xfa\xc1\xca\xe7\xfa\xe9\xe8\xa7\xdf\x5d\x1b\xc0\x8e\x6c\xf8\x9a\x4c\x60\x28\x8f\x7f\x55\xac\x0e\x85\x26\x1c\x51\x17\xc4\x21\xb5\x1e\xfd\x29\xc0\x74\xcc\xd4\x86\x85\x6b\xb3\x95\x93\x25\xcc\x10\xf5\x03\x7d\xca\x29\x22\xec\xca\xb1\x4f\xf8\x62\x02\x83\x81\x41\x00\xd4\x83\x04\xc0\xc1\x7f\x2f\x57\x63\x0a\x06\xfe\x0b\x47\xc6\x43\x45\xa9\x47\xa3\xfe\x85\x9f\xc4\x3f\xea\x66\x72\xee\x74\x4b\x06\x3f\x35\xf1\xd2\x6c\x66\x56\x83\x5e\x65\x03\x38\xa8\x41\x84\xf6\xe9\xce\x3a\x01\xb6\x24\x27\x49\xc1\xce\x32\xb9\xa5\x02\x95\x72\xe9\xc2\x0d\xbd\x31\xf1\xae\xc8\xc3\x6e\xea\x3f\x05\x44\xc3\xea\x79\x21\x03\x31\xb1\xf1\x8d\x12\xd0\xa9\x06\x10\x07\x1f\xda\xe9\x1f\x35\xae\x62\xce\xba\xf3\x09\x74\x58\xd4\x1b\x6b\x1a\x6a\x16\x61\x52\xa4\xc3\x53\x21\x74\x6f\x4a\x14\x6b\x35\xef\x70\xb4\x22\xea\x82\x38\xf8\xd0\x7a\x5e\x7c\xa1\xab\x2b\xef\x1f\xd8\xea\x99\x70\x50\xab\xfb\x95\x5b\x75\xe7\x1d\xe1\xfd\x81\x7d\x91\xde\x3e\x81\xa2\x90\xef\x9d\xaa\x88\xba\x20\x0e\xfe\x7b\xc3\x39\x8d\xc3\xb5\x8b\x23\x79\x14\x6a\x47\x47\x06\x6e\x7e\xba\xc3\x1e\x79\x3f\x23\xf3\x73\xe1\x1e\xbb\xc3\xc7\x41\xb1\x9a\x65\x28\xef\x03\x71\xf0\xdf\x7b\x6b\x86\x6c\x4d\x8c\x83\xdb\xc1\x0f\x6b\xfa\xc3\x7e\x67\xac\x56\x27\xd5\x45\xb1\x2b\x0c\x66\x9c\x5d\x59\xe9\x68\xa4\xef\x2f\xe2\x21\xa4\x00\xe2\xa0\x59\x01\x10\x9a\x18\x9f\xce\x65\x9d\xec\x94\xa9\x09\x8a\x84\xcc\xc4\x17\x9c\x47\xfd\x72\x24\x7b\xf7\x6c\xd4\x25\x6f\x6a\xf2\xa4\x61\x52\x0b\xec\xf7\x79\xb1\xab\x10\xed\x4a\x23\x5c\x27\x88\x43\x76\xca\x3b\x23\x9b\xda\x1f\x12\x55\x6c\xf3\xee\xd3\xec\x59\x3e\xc9\x53\xe6\xb5\xb1\x4e\xbd\xdd\x58\x27\x94\x6f\xdd\x25\x3b\x20\xcd\x32\x84\xa8\x0c\xe2\x90\x9d\xf2\xcf\xba\x02\x6c\xc9\x74\xb5\xb0\x1b\x56\x18\x35\xf4\x72\x8c\x43\xbf\xe2\xc2\x24\x47\xe9\xdf\x07\xaa\xf4\x8c\x4b\x7e\x23\x7f\xd7\x89\xa8\x0c\xe2\xfe\x5f\xa7\x4c\xf7\x1f\xa7\x8c\x3f\xab\x33\x72\xf8\x48\xc7\x71\x46\xac\x15\xe7\xf9\x6a\x5c\x5a\xf7\xa7\x47\x6e\x69\xf5\x1c\x8f\x15\x5f\xe3\x3d\x74\x79\x2b\x0a\x39\xe5\x97\xdf\x88\x7f\xee\x11\xaa\x60\xf6\x3a\x7d\x74\x75\x52\x52\xc6\x97\x92\xb6\xca\x46\xe7\x0c\x4d\xd3\xb7\xd3\xe4\x7c\xcc\xd2\xe4\xfe\xaf\x53\xe6\xb6\xe7\xdd\x37\x67\x20\xa1\xe7\xd3\xb8\xa1\x1a\xbc\x7a\xf3\x7c\x9b\xd6\x8e\x9a\xce\xdf\xfd\x6b\xd3\x12\x9d\xc5\x7d\x66\xb4\xa1\xff\xa0\x5f\x51\x30\xa8\xd6\x69\x7f\xcc\x2e\x87\x8c\x0b\x7e\x65\x37\x7d\x4a\xda\x90\xb3\x18\x44\xd4\x79\x15\x4d\xa2\x26\x9f\xc7\x73\x8d\xf6\x7f\xcd\x29\x83\x1e\xed\x1f\xa7\xdc\x80\xe4\x94\x85\x1b\x83\x24\x5d\xc2\xbb\x4c\x35\x70\x9d\x4a\x3a\xe2\x03\x5b\xde\x2c\x5d\x7f\x13\xbc\x7a\x7b\xc6\x4e\x67\x40\x79\x29\xf1\xd0\xf4\x2c\x9c\xb2\x04\x92\x53\xc6\x79\xe8\xad\xaa\xf9\xec\xe9\xae\xcb\x60\x8e\x4d\xa8\xc6\xfd\x1e\x6b\x62\xa9\x92\x22\xd9\xdb\x61\xcc\x17\x07\x31\xe4\x6e\x87\x28\x9d\xc9\x0b\x77\x64\xa7\x5c\xb2\x5b\xd9\xc4\xef\xf9\x8a\x58\x7a\xbd\x69\xdc\x2b\x90\xba\x87\x31\xe3\x31\xc9\x71\xbd\xd7\x12\x87\x4f\x90\x7d\x2f\x1a\x5f\xfc\x99\x1c\x2f\x40\x76\xca\x78\xb7\x8b\x3a\x8c\x37\xfc\xf9\x64\x24\x22\x62\xae\x9a\x67\x8a\xb2\x4c\x54\x8b\x4f\x38\xe2\xd1\xf8\xb9\xaa\x9d\xeb\xf4\x6c\xe0\x3f\x93\xa7\x45\x76\xca\x43\xe7\xb6\x17\xab\x1e\xd8\x97\xe4\x51\x08\xb3\x34\x90\x12\x64\x85\x7d\x4f\x2f\x7d\xca\xd8\x11\x52\xf7\x8c\x76\x55\xdd\x97\xf9\xe8\xcc\x9c\x32\x48\x43\x27\xad\x7f\x59\x1f\xf9\x3e\x75\xe7\x34\x25\x8f\x60\x12\xbe\x5e\x55\xb7\x4c\x21\x71\xf3\xd1\xd1\x7b\xa0\x5a\xc0\x71\x61\x81\xdf\x43\x24\x5d\x1b\x31\xef\x83\x38\xf8\x7a\x72\x4c\x8a\xd9\xf3\xf6\xc9\xdf\x4c\x76\x0c\x65\xd4\xb6\x60\x6a\xd4\x54\xbd\xf7\x71\x9d\x73\xd5\xa9\x49\xca\x1f\x64\x82\xa3\x65\x3e\x22\xea\x82\x38\xf8\x7a\xd2\x33\xff\x22\xbe\x3a\x9f\x50\x7a\x2c\xbb\xec\x9b\x06\xdb\xef\x67\x05\xf6\x66\x71\xf2\x58\xc5\xba\x9b\x89\xaf\x7e\x85\x6d\x9f\x87\xfc\x11\x88\x83\xff\xde\x5f\x57\x2b\xa5\xf8\x37\xe3\xa6\x96\x0c\x98\x2c\xed\x42\xf6\x19\xc5\xef\xff\xe0\xe0\x15\x5d\xc8\xb3\xf5\xb6\xce\x9e\xb5\x65\x86\xda\xb1\x81\x38\x3f\x29\x14\x89\x7f\xeb\xf2\xa7\x31\xaa\x79\x0f\x57\x28\x68\x1a\x6c\x0d\xe7\xf5\x68\xe3\x7d\x14\xea\xf2\x17\x1f\x1e\xa4\x7e\x55\x75\xf7\x21\x53\x1d\x25\x3f\xc2\x1f\x81\x38\x44\xb3\x86\x86\x53\x39\x65\xd0\xdf\xf5\x49\x4a\x20\x5a\xc5\xc8\x25\xe2\xb9\xac\x98\xad\xe2\x34\x1f\xb0\xc4\x15\xe1\xeb\x9a\x9a\xeb\x79\xc1\x69\xad\x03\x77\xb2\xb0\xef\x73\x26\x74\x29\x08\xc4\xc1\x47\x76\xb3\x75\x4a\x74\xfb\xc3\xbb\x86\x52\xdb\xb5\x8b\x3f\x73\x66\xb8\x3f\xae\x69\x4e\xd2\xed\xc7\x73\x67\xe6\x2a\xac\xa1\x31\x9d\xe3\x81\x1a\xb7\x02\x38\xb8\x12\x6c\x29\xc4\x97\xdf\xc7\xb8\xaa\xb0\xef\x3d\x4c\x92\xe4\x64\x3d\x10\xae\xcd\xd4\x09\x35\xaa\xc0\x78\xdb\xa3\xd4\x62\x3f\xb9\x0c\x5d\xd9\x00\x71\xf0\xdf\x2b\x72\xef\x03\x81\xb1\xc3\xf2\x2b\x4c\xf4\xaf\x36\xdc\x0d\x3d\x5a\x51\xf1\x94\xfc\x25\xe5\x24\xd5\x34\xcf\xab\x5e\x19\x46\x44\x43\x3d\x1a\x41\x1c\x5c\x09\x03\x89\x1d\x0f\x8e\x16\x06\xfe\x94\xde\x64\x14\x79\x23\x3f\xe0\x7c\xe3\xba\xf5\x85\xae\x12\x57\x52\xd3\x42\x19\x81\x9c\xce\xe7\x7d\x08\x25\x80\x38\xa8\x6d\xc7\xa9\x9c\x32\x68\xaa\x3d\x49\x09\x37\xa8\x9c\xa3\xc6\x49\x9e\x4f\xf7\x87\xeb\x6c\x4f\x7f\x36\x6e\x28\xcc\x8e\xff\x95\xa1\x3b\xd2\xe8\xb5\xa2\x75\xde\xf8\xc7\x34\xd4\x6b\x18\xc4\xc1\x47\x56\xb3\x24\x3d\x94\x68\xfe\xfd\xe3\x4b\x92\x5c\x86\x43\x23\xa1\x8b\x8c\x5e\xb2\xf9\x9a\x68\xce\x14\x4e\x69\x25\x22\xf1\x04\x7b\x90\x53\x06\x71\x48\xbd\x1a\xae\x73\x5f\x67\xa3\xa2\xa2\x13\xde\x26\xec\x89\xa1\x8a\xa8\x8a\x13\x52\x5b\x0a\xe8\x60\xdd\xcf\x51\xa6\x18\xe5\x2f\x0d\xa6\x82\xde\xf2\x00\x38\xf8\xef\x2d\xeb\x89\xad\xf4\x5c\xae\x1e\x6b\x63\xd9\x1f\xd8\x63\x38\x1f\xb7\xff\xde\x38\x22\x61\x78\x52\x9a\xb7\xfd\xb5\x8e\x23\x26\xc9\x1b\x44\x5d\x10\x07\x57\x02\x37\x03\x89\x9c\xaf\x14\xcf\x79\xac\xa4\xb8\x7d\x55\xc3\x80\x15\x3d\xc6\x9f\xcb\xb2\xf8\x5a\x1a\x3c\x58\xf7\xe6\x8f\x72\x8a\xa0\x77\xca\x20\x0e\xba\xa0\x7f\x3a\xa7\x0c\x5a\xfe\x4e\x92\xc2\xe2\x0c\xaf\x39\x13\x7b\x61\x0b\xc1\x63\xc2\x73\x0e\xac\x3f\xd0\x79\xdc\xd3\xa2\x42\x71\x9e\x7e\xc8\x76\x1a\x91\xff\xe8\x3a\x06\xbd\xf0\x03\x71\xf0\xa1\x6d\x2a\x6e\x6e\x62\x96\x5c\xff\x4e\xa3\x48\xda\x8d\x23\x6f\xf2\xe0\x35\x2d\xbd\x5e\xf1\xb8\xd0\xf2\x0b\x6d\xc6\x24\xe9\xf7\x04\xd0\x6d\x23\x10\x87\x14\xa4\xb6\x79\xc8\xa3\xe0\x99\x72\x93\x37\x3e\xbe\xfc\xb1\x82\xa9\x58\x4d\x60\x89\x86\x0d\xcb\x48\x0d\xd7\x5a\xe8\x67\xe8\x2b\x5d\x71\x28\x48\x05\x70\xf0\xdf\xfb\x7a\xf0\x3b\xb1\x94\x99\x1b\x16\x15\xcf\xa5\xe4\x1a\xd4\x1b\xb8\x3a\x46\x52\x4c\x7f\xb9\x22\x18\x42\x5e\xd2\x53\xfd\xf6\xbb\x5c\x8c\xa8\x0b\xe2\xe0\x52\x50\xa4\xe2\xf4\xed\x21\x8a\xc3\x98\x8a\x49\x52\x7a\x38\x9c\xf4\x82\x58\xac\xef\xe6\xe1\xc1\x67\xd2\x8f\xed\xa3\xe2\x5c\x76\xf7\x85\x11\x52\x00\x71\xd0\x05\xfd\xd3\x39\x65\xd0\x96\xe4\x24\x29\x18\x3e\x11\x08\x72\x08\xbf\x2b\xea\x14\xa6\xa9\x4b\xa0\xab\xc3\x7a\xdf\x96\x50\x07\xa5\x67\x50\x93\x7b\xe8\xfc\x08\xee\xa0\x3e\x74\x31\x0a\xc4\xc1\x87\xb6\x8b\x39\xb4\xb5\xc8\xb1\xaa\xf2\x3d\xd5\xb7\x29\x65\x8b\xa9\xd9\xcc\x06\xb5\xed\xbd\x51\x6c\xe2\x3b\x13\x19\xe4\xef\xaf\x5b\x40\xc7\x0b\x40\x1c\x5c\x0a\xaa\xef\x2a\xc2\xf6\xf0\x73\xfd\xb0\x1b\x18\xfa\x88\xa8\xdb\x36\x4a\x33\x8f\x31\x79\xef\xc7\xb5\x6e\xa0\xb7\x08\xf7\x51\xa0\x43\xdf\x99\x06\x71\xf0\xdf\x6b\x91\xf4\x34\xcf\x93\x77\x9d\x84\x29\x90\xfd\x56\x91\x81\x27\xab\xcd\x7c\xbe\xe5\x1b\xba\x57\x1b\x13\x1c\x37\x43\x32\xcd\x9d\x20\x07\x0e\xe2\xe0\x52\xb8\xd1\xba\xb4\xc1\x95\xb5\x6e\xc8\x34\xef\x19\x1b\x7d\x53\x73\xa6\x20\x28\x8c\x34\x94\xd1\x81\x4f\x96\x7e\x21\x41\xae\x4c\x96\x0e\x21\x05\x10\x07\xcd\x0a\xa7\x73\xca\x20\x97\xf5\xff\xf1\xfd\x93\x26\xf9\x28\xda\x2b\xa3\x57\xd8\x29\x4c\x38\x08\x1d\x27\x49\x3e\xe6\x5c\xe0\xa3\xd7\xef\x1d\xb9\xe7\xc3\xf3\xcb\x22\xca\x22\x00\xfa\xfe\x09\x80\x43\x76\xca\xb4\xd1\x22\x8c\x14\x26\x4b\x75\xbc\x6c\xdf\xe2\xde\xe0\x98\xb8\x53\x72\x7b\x12\x0e\xe8\x39\x10\xfe\x72\x1e\xef\x3f\xe7\x9b\x13\x8d\xa8\x0c\xe2\x90\x9d\x72\x8b\xa6\x7c\xef\xe8\xa6\xcf\x90\x57\x93\xd9\x06\xcf\x55\x7a\x5b\x36\x14\x97\x89\x74\xa9\x89\x23\x0f\x8a\x9b\x5b\x81\xda\xcf\xb4\x10\x95\x41\xdc\xff\xeb\x94\xff\xd3\x66\xc3\x9d\x3a\x3f\x5a\x6d\x60\x5f\x8f\xde\xcf\x53\x76\xe5\x9d\xe2\x75\xcb\x1f\x64\x28\x0f\x9b\x07\x73\x3e\xe8\x1d\x3d\x2d\xe3\xa1\xba\x0b\x39\x65\x2d\x87\x54\x4a\x87\x31\x05\xfe\x87\xe9\x92\x91\x8f\x64\xd4\x26\xe6\x70\xe4\xb7\xaa\xaa\x9d\xb2\x5a\x3c\x13\xf7\x1f\xa9\x71\x32\xff\xeb\x94\xbf\xd7\xfe\x48\x8d\x34\xda\x66\x26\xed\xf1\xe1\x5e\xc9\x37\xfa\xc5\xbd\x1e\xaa\x65\x39\x34\x8c\x42\xfb\xcb\x84\xd7\x75\x71\xf9\x5f\x47\x48\x5a\xf9\x0b\x23\xe6\x0f\x5a\x74\xb3\x10\x87\x3d\xbb\x5c\xf5\x4a\x9a\x6b\xdb\x83\x65\x32\xc2\x6e\xb1\xaa\x47\x0f\xdd\x2b\x8d\x84\xff\xd7\x9c\x32\xe8\xd1\xfe\x71\xca\x28\xd2\x70\x3b\x45\xa2\x49\x69\x2c\xa5\x29\x33\x33\x70\xe4\x9d\x63\x15\x68\x56\x69\x4b\x97\x3d\xbf\xdf\xc6\x6e\xd4\xb7\x5b\xb1\x89\x91\xab\x7f\x16\x87\xc4\xa5\xbd\x91\x9c\xb2\x44\x61\xef\xb3\xcf\x86\x63\x35\x19\xd5\x3f\xe8\x37\x2d\x8d\xe8\x73\x8c\x75\xb4\x76\x17\x62\xb8\x5f\x74\xa7\xbf\x0c\x19\xb0\x3c\x93\x8e\x8f\x28\x42\x48\xde\xf1\xc8\xc6\x4a\x72\xaf\x42\xf8\x32\x4e\x07\x81\xe1\x58\xbc\x71\xef\x3d\xbf\x80\x3f\x58\x3d\x37\x1d\x55\xbf\x76\xa1\xa8\x3f\x8b\xac\x3e\x93\x97\xbb\xc8\x4e\x39\xf2\x16\x46\x2d\x0d\x39\xbe\x43\x86\xc7\x35\x3f\xaa\xe0\x4c\x5e\x0b\xc1\x6a\x3c\x8a\x5c\x62\x0e\xfa\x9b\xd3\xa6\xdc\x35\x4f\xce\x9f\xc9\xd3\x3a\x22\xfd\xb3\x9f\x1e\xcd\xc7\xa8\x32\x71\xb0\x2a\x69\x63\x04\x4a\xf6\x18\x32\xb6\x76\xbc\xe4\xae\x50\x7e\xfb\x2d\xe2\x8d\x77\x8d\xfe\xc5\xba\xd8\x33\x73\xca\x20\x0d\x9d\xf8\xd9\x81\x49\x97\xbb\x22\xe9\x05\xb9\x83\x72\x56\xae\x97\xcd\x5b\xee\xe4\xe2\x5b\x31\x71\xeb\x6c\x28\x27\xe1\x6e\x97\xa3\x3b\x59\x42\xef\x94\x41\x1c\x7c\x3d\xe1\xc1\x6d\xfb\xd3\x80\xfd\xed\xc2\xea\x83\xef\xa9\xa5\x89\x2e\xf6\xb7\x55\x06\xab\xf2\x52\x14\x94\x9c\x3e\xc5\x67\x0d\xeb\x7d\x8d\x85\xba\x55\x03\x38\xf8\xfa\x97\xe3\xdf\xd5\xf4\x23\x89\x37\xe6\xc5\x23\x15\xec\x9f\xe5\x79\x9f\x12\xd1\x46\xfa\xc2\x33\x02\x75\xd8\x29\x34\xd3\x1d\x7c\x08\x38\x11\x75\x41\x1c\xfc\x3b\x5d\x14\x69\xc3\x3a\x2a\xb6\x0d\x01\x35\xdf\x29\x72\x8e\x1d\xae\xd1\x32\xbd\x23\x13\xf5\x6d\xa3\x4d\x23\xff\xfb\xf7\xce\x34\x65\x00\xf4\x55\x40\x10\xe7\x27\xf5\xdf\xcf\x7d\x7f\x7a\xea\xdc\x63\xd4\xff\xda\x86\xc5\x64\x82\xb1\xd1\x85\xe3\x13\x03\xe9\xd7\x47\x6d\xde\x3a\x3b\xbe\x9c\xe1\xdb\xb9\x36\xd7\x56\x10\xfe\x08\xc4\x41\x4d\x13\xa4\x4f\xb3\x13\x02\xfd\x5d\x9f\xa4\x84\x0d\x7d\x1e\xd1\x90\xef\x6e\xa9\xea\x4b\x79\x2c\x37\xa2\x75\x47\x18\x56\x6d\xe2\x6e\x7c\x7b\x5b\x98\xe4\xfd\x6a\x2e\x4a\xe2\xa3\x17\x62\x04\x40\x1c\x5c\x09\x5f\x82\x1c\x96\xd3\xc4\x86\xd5\x1d\xe7\x76\xf3\x58\x89\x3d\x30\xfb\xb6\xbe\x45\x0b\x96\x6b\xac\x56\xe4\x7c\xb7\x94\xae\xbf\x5f\x85\xa8\x0b\xe2\x90\xce\xdc\x4a\x2b\x56\x66\xbf\x56\xd7\xbd\x38\x89\x1a\xeb\xaa\xdb\xee\x23\x44\x9b\x9d\x25\x4c\xa7\x74\x97\x23\xb1\xe8\xc7\x35\x26\x8c\x35\xe8\xcc\x2d\x80\x83\x2b\x61\x1e\x83\x65\x34\x31\x4c\x3a\xc0\xaa\x22\xe6\xd9\x91\xd7\xe7\xb7\x23\xfa\xd2\x28\xfa\xb1\x2a\x06\x6f\x47\xd6\xed\xca\x57\x59\x99\xa0\x33\xb7\x00\x0e\xae\x84\x8e\x3f\xbf\x96\xc5\x51\x9b\x7e\xb9\xb9\xff\xec\x59\xbe\x89\xca\x20\x7e\x8b\xd0\x0c\xdd\x86\xc0\x76\x5d\x50\x3a\x72\x33\xdd\x4a\x06\xa1\x04\x10\x07\x35\x4d\x38\x95\x53\x06\x4d\xb5\x27\x29\x21\x55\x98\xd5\x73\x73\x33\xae\xee\xf5\x3d\xd1\xe0\x46\xda\xe0\x04\xd1\x43\xec\x85\x26\x89\x6b\x39\xcb\xc7\x68\xc5\x59\xa8\xf6\xd0\x3b\x65\x10\x87\x74\x84\xd5\x66\x9c\xeb\x12\x53\xc2\x8e\x08\xfb\xba\x28\x06\xd1\x4b\xdf\x57\xbf\x46\x0a\x55\x07\x2f\x26\x6a\x0c\xf5\x26\xd2\x7b\xda\x40\xa7\x16\x40\x1c\x52\x2b\xbb\x6b\x5f\x9f\xfb\xaa\x5b\x47\xe8\x98\xce\xee\x8a\xb7\x6f\xca\xa9\xa0\x91\x3c\x9e\x28\xc0\x79\xef\x64\x12\x3d\x78\x9c\x20\x86\x02\xb5\xb2\x03\x70\x70\x25\xe4\x05\xf0\xf3\x31\x46\x55\x5a\xdd\xf9\x4c\xce\x48\x3e\xc1\x23\xbc\xad\xf1\x7e\x37\xde\x8c\xbf\x6b\xe6\x0f\x59\xba\x25\x5f\xe4\x39\xe8\x42\x02\x80\x83\x2b\x81\x80\xc6\x7a\xd2\x0b\x65\x65\xcd\x98\x03\x4d\x1a\xab\x40\xe7\x0b\x65\xf9\x88\xa6\x9d\x9b\x9f\x95\x73\xe1\x18\x85\x26\x63\xd5\x38\x62\x4f\x0c\xe2\xa0\xeb\xd1\x42\xa7\xb2\x47\xa0\xe5\xef\x24\x29\xbc\xf2\xe7\x55\x9e\xc4\x20\xff\xc2\x28\x77\x91\x3c\xd3\x6f\x61\x42\xd8\x06\xe7\x43\x6e\xc5\x6b\xdc\xcb\x7e\xe4\xcf\x56\xfb\x8a\xa1\xbb\x13\x20\x0e\x2e\x05\x99\xce\x27\x2f\x8c\xd8\xa6\x68\xa9\x8e\x99\x2c\xc5\x7e\x48\xbd\xfe\xab\x58\x52\x9d\x72\x61\xc2\x59\x2f\x6d\xad\x4d\x8d\xf7\x1c\x0b\xa2\x2e\x88\x83\x4b\x01\x3d\x23\x2f\x7e\x15\xa5\x63\x09\x2f\x5d\xf5\x7d\xa5\xa0\x2e\xed\xd1\x91\x6f\x4e\x9f\xc5\xb9\xb1\x27\xed\xee\xda\xc2\x1a\x55\x84\xd0\x5d\x0f\x00\x07\x97\xc2\xe7\x44\x83\xa8\x5a\x4f\xdb\x8a\xf4\x0d\x7f\xe3\xb9\x41\x0e\x47\x45\xeb\x29\x23\xe5\x47\x8b\xf8\x3f\xf7\xb9\xca\x9b\x62\x33\xa0\xc9\x06\xc4\xc1\xa5\x10\x8d\xf3\xcb\xd5\x48\x25\x74\xf6\xe2\x06\xf7\xd7\x6a\x69\x15\x7d\xd5\x15\x9d\x0f\xd1\x3f\x98\xc5\x5f\xfc\xb6\x1d\xbe\x6e\x8a\x09\x7d\x29\x14\xc4\x41\xd7\xa3\x4f\xe7\x94\x41\x5b\x92\x93\xa4\x70\x81\x1b\x87\xd8\xfe\x8f\x11\x41\xbe\x1f\x06\xdd\xcf\x0a\xa6\xc3\x3b\xc7\xde\x44\xf9\x72\x57\x22\xdf\xbb\xb1\x5b\xda\xcc\x27\x41\x52\x00\x71\x48\x77\x32\x2c\x54\x79\x12\x7d\xed\x03\xd6\x44\x5b\x48\xf1\x68\xeb\x0b\x75\x1e\x3e\x9f\xcd\xaf\xe1\xae\x3a\xaa\xb2\x7e\x15\x18\xfd\xae\x1b\xba\x93\x01\xe0\x90\x92\x54\x9f\x0f\xde\xbc\xed\x02\x91\x1f\x55\xad\x74\xcb\x70\x79\x92\x52\x52\x2e\x9c\x5f\x32\x2c\xb4\xde\xbd\x8b\xfb\x64\x08\xbd\x47\x01\x4a\x52\x01\x1c\x5c\x0a\x73\x9e\xbe\xcb\x64\x2c\x7b\xaf\x5f\x67\xf7\x8c\x29\x5b\xfe\x61\x14\x38\x67\xa8\xff\x9c\xe8\x8a\x6c\x55\xe5\x8f\x32\xfc\x70\x85\xb7\x88\xba\x20\x0e\x2e\x05\x71\x76\x9e\x27\x1b\x2e\x46\x59\x0a\x9e\x0b\x7a\x3d\x5b\xba\x78\x53\x63\xa6\xd6\x2d\x23\x19\xfc\x2a\x8e\x04\x26\x9c\xb1\x8e\xf7\x10\x52\x00\x71\xd0\xac\xe0\x78\x2a\xa7\x0c\x72\x59\x27\x3b\xe5\xd6\x08\x93\xab\x4e\x4b\x33\xcd\x81\xb3\x56\x86\x8f\xb8\x1b\x64\x37\x04\x1c\x15\x55\x76\x24\xb0\x31\x70\x83\x92\x97\x7d\x46\x53\x11\xae\x13\xc4\x21\x3b\xe5\xb0\xa0\xa8\x01\x82\xdd\x02\x97\xf2\x98\x0f\x45\x63\x79\xbb\x31\x22\x28\xc2\x3e\xbf\x92\x38\x93\x9a\x03\x0e\x17\x83\x31\x32\x2f\x20\x2a\x83\x38\x3f\x19\x14\xf4\xff\x56\xbe\xb2\xdb\x12\xf5\xc6\xee\xbe\x7f\xe8\x90\xcd\xdd\x87\x04\xa5\xf1\xdb\x44\x4b\xb5\xf7\x84\x34\xd0\x4c\x0e\x2f\xef\x0f\xa3\x37\xb1\x23\x2a\x83\x38\xe4\xd1\x08\xf4\x26\xf2\xf5\x99\xfd\x38\xf9\x23\x82\xe5\x52\x21\x6f\x78\x64\xe4\xb3\xe2\xb1\x9d\x6f\xdc\xfb\xeb\xc6\xf3\xcf\x6c\x55\xdc\xc2\x21\xa7\xcc\x1f\x20\x6f\x44\x58\x3f\x80\xb9\x6d\xf7\x28\xce\x63\xfa\x0f\x4e\xb4\xd4\xe6\x81\x76\x5b\x58\xcf\x90\xc7\xdb\x6f\x28\xd6\xe9\xbc\xff\x3a\x65\xf3\xfb\x7d\x26\x93\xca\x61\x44\xb5\x85\x45\xde\x44\x66\xa9\xa6\x64\x9a\x0d\x61\x44\x9b\x56\x68\xa1\x41\x9f\x5a\x54\xea\x1e\xd7\xff\x7b\xcc\xc1\xbc\x5c\x5a\xea\xad\xb5\xc6\x3e\xbf\x4a\x73\xe7\x20\x6e\xfa\x40\x84\xa2\xfa\xd1\xfb\x62\x8d\x6e\x7b\x57\xe6\xd4\xe9\x18\xdf\xff\x35\xa7\x0c\x7a\xb4\x7f\x9c\xb2\x04\x92\x53\xbe\x95\xf3\x47\x4d\xb7\xa4\x45\xd2\x26\x2b\x3a\x40\x23\xb8\xb2\xd5\x3a\x42\xc2\xce\xb6\x96\x2b\xcd\x79\xcb\xe3\x69\xad\xe7\xa7\xeb\x67\xe1\x94\x1b\x90\x9c\xb2\x43\x90\x46\xbb\xcf\xe7\x51\x5b\xa9\x94\x09\x5f\x31\x31\xd3\x2b\xeb\x51\xe2\x57\x02\xc9\x56\x7e\x69\x95\x97\xee\x0c\x96\x95\xd6\x9f\xc9\xcb\x5d\x64\xa7\x7c\x3e\xe0\x8a\xf5\x1f\xcd\x1f\x7e\xcb\x56\x2f\xc8\xee\xbe\xb8\xe3\xab\x29\x2f\x78\xec\x15\x3f\x82\x77\x95\x00\xd7\xd7\xc3\x24\x55\xe4\x4c\x5e\xee\x22\x3b\x65\x2e\x0f\x23\x3d\x3c\xd6\xf8\xf7\x0d\x77\x03\x2b\x1f\x1f\x54\xe2\xd0\x85\xe0\x37\x75\xc6\xb9\xd2\x36\x5e\x99\xe6\x32\xd3\x51\x3c\x83\x63\xd0\xa1\x32\x12\xc8\x4e\x39\xad\xe6\x7d\xd1\xe8\xed\x9b\x09\x2f\x59\xb5\xc6\xaf\x63\x31\xca\x05\xba\x59\xed\xf4\x0b\xd0\xc4\x95\x53\xc9\x8e\xfc\xdd\x64\xdd\x3c\x33\xa7\x0c\xd2\xd0\x49\xeb\xdf\x20\xad\x6c\xb8\xcd\x79\x86\x09\x21\x81\xfe\x91\x45\x61\xfd\x87\x7d\x1e\x83\xe8\xc9\x82\x23\x9c\x45\xfd\xf1\x6b\xa9\x2e\x51\xd0\x97\xa7\x41\x1c\x7c\xfd\xbb\x6f\x71\xa9\x83\xe0\xe5\x6f\xc7\x9a\x24\x4e\x1f\xd1\x07\xf5\xb8\xcc\xb2\x59\xbc\xb5\xb7\x1e\xe8\x92\x24\x32\x34\x54\x3d\xee\x93\x44\xd4\x05\x71\xf0\xf5\x6f\x48\xa1\xe7\xcf\x33\x4d\x36\x9b\x8b\x0c\x01\xba\xfc\x75\xcf\x6e\xa3\xee\x70\x27\xe2\xa7\xd4\x15\x1f\x29\xd1\x2d\xaf\xf1\x63\x5f\x44\xd4\x05\x71\xf0\xf5\x6f\xbb\x80\xf5\x33\x31\xa7\xe3\xec\x68\xc2\x76\x9e\x8f\x34\xeb\x5d\xef\x2d\xac\x0a\xeb\xe1\x9b\xe6\xf3\x12\x38\xe2\x14\x16\x9f\x0f\x10\x75\x41\x1c\xbc\x5b\xb0\xf2\x4b\x12\x99\xda\x61\x83\xb9\x10\xa5\xb5\x6f\xf2\x9a\x66\x23\x77\xec\x17\xaa\x27\x83\x3f\x7c\xce\x19\xac\x5f\x12\xf3\x1b\x54\x41\xf8\x23\x10\x07\x5d\x59\x3f\x95\x53\x06\xfd\x5d\x9f\x78\xba\x40\xee\xd7\x1d\x4c\xfc\x69\xba\x98\x01\x6f\x17\xb7\x7d\x2d\x3c\x14\xc2\x22\x82\x9c\x1e\xac\x2e\xcc\x4d\xbf\xe4\x35\x6e\xff\x97\xd0\xe9\x02\x00\x07\x57\xc2\x9f\xc3\x1d\x83\x1a\xf2\xa3\xfb\xf4\xa2\x8e\xa9\x9c\x35\x1d\x4b\xde\x4f\x0a\x29\xf7\x06\xf8\x71\x4d\x3a\x07\x2f\x5e\xf5\x58\xb6\x40\xd4\x05\x71\x70\x25\x70\xef\x5d\x99\x7d\x9a\x7b\x95\x96\xe3\x4f\x5d\x60\xe2\x9c\xc9\x2d\x72\xa6\xb4\x4c\x2e\x99\xe7\x4c\xd6\x1e\x41\xad\x21\xbb\xca\x50\x6f\x1f\x10\x07\x57\x42\xc6\x7b\x74\xfc\x4e\x67\x5f\x85\x2f\xab\xdc\x94\x8f\x36\x89\x9b\x1f\x1e\xa4\xcc\xe9\x97\x1d\x05\xeb\x31\x75\x67\x8d\x75\x06\x2d\x22\xea\x82\x38\xb8\x12\xe4\x56\xd6\x53\x7b\x50\x47\x06\x7b\x2d\x9a\x5c\xa4\xf6\x7f\x0f\xa3\x3a\x4f\x93\xf9\x85\xec\xc5\xbd\x1a\x29\xbc\x12\x72\x2b\xd3\x0c\xa1\x04\x10\x07\x5d\x59\x3f\x95\x53\x06\x4d\xb5\x27\x29\xa1\xb8\xcd\xb7\x80\xf2\x53\x72\xfe\xe5\x1f\x8a\xa5\xe5\xad\x5f\xd0\x95\x85\x07\x83\x9d\x5c\xdb\xc5\xb2\xc3\xa8\xfc\x48\xef\xd4\x40\x0e\x11\xc4\x21\xbd\x3d\x32\xd7\x92\x59\xc7\xda\x21\xba\x83\xaa\xcc\x5a\xfe\x31\x49\x87\x95\xfa\x6f\xcc\x17\xef\xf2\xbb\x34\x59\x58\x62\x6b\x1e\xd7\x64\xa0\xb7\x47\x00\x0e\x69\x4f\x8c\x52\x3b\x58\x46\xf2\xbe\x6d\x38\xf8\x6b\xd1\x60\xab\x8d\x02\xef\x62\x61\x65\xa1\xd2\x96\x84\x6f\x6f\x6c\x0f\xa6\xf7\xe7\x34\x68\x4f\x0c\xe0\xe0\x4a\xd0\xb4\x26\x7f\x8b\xff\x4a\x70\xf1\x40\xc1\x47\xbe\x03\xfb\xce\xc7\xfb\x9d\x77\x43\x6a\x1f\xb3\x3d\xbf\xe8\x33\xc8\xc9\x88\xf7\x65\x14\x7a\x07\x0e\xe0\xe0\x4a\xb8\x1b\x55\x48\xc6\xb2\xc4\x1c\x18\xf9\x8d\xd7\xac\x95\x61\x75\x68\xc5\xb9\x39\x55\xf6\x9a\x5b\xcc\x43\xae\xdb\x0a\x97\xb0\x18\xa5\x10\x7b\x62\x10\x07\x5d\x4e\x3d\x9d\x53\x06\x2d\x7f\x27\x49\x21\xb1\xac\xcd\x04\xbb\xfc\x56\x2a\x57\x06\x1a\x9b\x94\x5b\x47\x5e\x87\x58\x57\xef\x1e\xce\xc3\xda\xe3\x4d\x6e\x17\xec\xe1\x37\xea\x88\x21\x00\x71\x70\x29\x24\x91\x3e\x71\x7c\x48\xd2\x13\x7a\x97\xe1\x62\x69\xc7\x83\x88\xd0\xf8\xed\xc7\x85\x8d\x54\x37\x98\x59\xa6\x24\x15\x07\x7c\x34\x06\x11\x75\x41\x1c\x5c\x0a\x6c\xbe\x92\xec\x25\xde\x3a\xec\xce\xa5\x82\x41\xb6\xcc\xc2\xa4\x34\xfa\x3b\xfc\x51\x34\x65\xaa\x58\xd3\xe7\xbf\xd4\x78\xb4\x43\x47\x99\x40\x1c\x5c\x0a\x1c\xc3\xe4\x3a\x42\x6d\xef\xfc\x62\x3a\x5b\xf1\x5e\x5d\xa4\xec\x13\x5b\xd4\xd0\x74\xe6\x6a\x91\xf3\xb6\x59\x10\x5b\x37\xae\x81\x3e\x5e\x0a\xe2\xe0\x52\x50\xd3\xd0\xbe\x8a\x5d\xe6\xdd\xff\x0c\x8b\x63\x9b\xce\x62\x8b\xbc\x6d\xaf\x9c\x2d\x23\x84\x0d\xd5\xc6\xda\x81\xee\x5d\x8f\xee\x2d\x84\x14\x40\x1c\x74\x39\xf5\x74\x4e\x19\xb4\x25\x39\x49\x0a\x9d\x81\x77\xb9\xed\x13\xbb\x7f\xcf\x16\x67\x5f\x4a\xf6\x88\x98\x9a\xb9\x97\xb7\xa3\x1a\x7a\x61\xbe\x06\xd7\xa6\xcf\xcf\xf0\x05\xe4\x68\x41\x1c\x5c\x0a\xcd\x8c\xb2\x15\xad\xb1\xee\x66\x81\xc2\xf3\x12\xc9\xe1\xfa\xaa\x55\xf5\xe6\x23\xed\xcb\x04\xc9\x24\x51\x63\xbb\x18\xaf\x2f\x41\x57\xe1\x41\x1c\x5c\x0a\x12\x45\x8b\x7f\xe9\xbf\x66\xe8\x63\x65\x2d\xe3\xde\x77\xd0\x40\xad\x23\x37\x9c\x1d\x31\xeb\x0e\x15\x1d\xdd\xeb\xdd\x50\x7f\x04\x7d\x84\x1a\xc4\xc1\xa5\xd0\xfb\xa7\x3f\x18\x95\x9b\x7e\x8c\x9e\xaa\x63\xc0\x40\x88\x2c\x4a\xc0\x99\x30\xfc\x07\xd9\xae\xd3\x54\x93\x6e\xcd\xe5\x57\xee\x96\x50\xaf\x3a\x00\x07\x97\xc2\x5e\xd3\xf8\xb7\x07\x8b\x72\x68\x09\x63\x78\x3f\xff\x64\x29\x5e\xfb\x4b\xa7\xde\xcd\x45\xba\xea\xc9\xa1\xf2\xcd\x25\xfa\xab\x0e\x11\x42\x0a\x20\x0e\x9a\x15\x4e\xe7\x94\x41\x2e\xeb\x64\xa7\xbc\xd7\xc2\xc9\xa4\xb6\x7f\x81\xec\x53\x46\x95\xf6\xdf\x7a\xde\x75\x1c\x63\x41\x4a\xad\x8d\x0f\xd5\x8b\x75\xb1\x7e\x76\x0c\x57\x9d\x10\xae\x13\xc4\x21\x3b\xe5\xd7\x59\x04\x03\xfe\x8e\x69\x3b\x06\x55\x98\xd5\x2b\x65\x59\xb5\x15\x28\xe9\x84\xe2\x33\x11\xb3\x37\x63\xf9\xcc\x0c\xb4\xb5\x31\x10\x95\x41\x1c\xb2\x53\x0e\xb8\xd1\x2f\x36\xe0\x17\x79\x85\x43\xc8\x76\x2a\xfa\xdb\xd6\xa6\xfa\xc7\xcb\x5a\x1e\x2f\x6d\x1b\x2d\x0c\x93\x50\x59\x45\x54\xd0\x11\x95\x41\x9c\x9f\x0c\x16\x6c\x34\xd0\x53\x2e\x64\x2d\xf5\xfd\x22\x61\xd9\xe5\x76\x3d\xd8\x32\x29\xf7\xc2\x17\x15\x30\xa5\x21\xec\x5b\xd1\x59\x17\xdc\x90\x69\xa6\x81\x9c\xf2\x5d\x7b\x7e\xc2\x73\x37\xa6\x16\x47\x59\xbe\x6d\xe2\xc9\x7d\x2b\xa2\x25\x7d\xcf\xe0\xa8\xd9\x1f\x5c\x49\x48\x99\x29\xf1\xa7\xe4\xe9\xbf\x4e\xd9\x4e\xa6\xee\x17\xee\x92\x3b\xe9\x8e\x85\xc5\xac\x24\xd5\xde\x2f\x4c\xbd\xf2\x8f\x1a\x24\xb1\x5a\xe7\xa6\x4d\x73\x31\xb7\x6f\xfe\xdb\xe9\x2a\xfa\xb1\x25\xd9\xa4\x28\xb5\xca\xa5\xe0\x1d\x03\xf5\xf8\x85\x8e\xf6\xb9\xa6\x5a\x94\xda\xcb\x5e\x31\x8b\x4d\x07\x29\xd2\xfb\x15\xff\x6b\x4e\x19\xf4\x68\xff\xde\x53\x46\x72\xca\x09\xe4\xd4\xe8\x34\x11\xdb\xfb\x34\x22\x4f\xae\x73\x8c\xa9\xa4\x5f\x49\x7b\x98\xb1\x9d\xbe\xe6\x5a\x1e\xfe\x5e\x17\x2f\x60\xe2\xd7\x59\x38\x65\x14\x35\xf8\xbf\x9a\x69\xcf\xf3\x54\xe6\xd7\xbd\xb7\x2e\xd5\x0f\x2d\xd3\x75\x33\x47\xf3\x4d\xa7\x64\x06\x8f\xb8\x7b\x1a\x99\x42\xac\xb6\xc5\x16\x7e\x9e\xc9\xcb\x5d\x64\xa7\x3c\x4b\x9c\x18\xa1\x71\xb1\xa7\x3a\xd5\xb9\x4c\x75\xd8\x66\x01\xed\x47\x4e\xc0\xe3\x09\xb6\x17\x55\x41\xaf\x86\xa3\xfd\x86\x8b\x59\xcf\xe4\xe5\xae\x0e\xd2\x3f\x8b\x6e\x88\xfd\xd8\x44\x47\xff\x9a\xb2\x2c\xcd\x98\x67\xe3\xf0\x55\x53\xe6\xa7\xe8\x17\x39\x48\x5c\xd7\xf7\x8d\xa7\xc2\x3c\x45\x0c\xce\xe4\x69\x91\x9d\x72\xd3\x4e\x8a\xd1\x8a\x5d\xde\x2d\xa5\xce\xb0\xb9\x6f\x0a\x4f\x08\x82\x6f\x5e\xe5\x35\x58\x28\x7f\xbc\xfe\xf2\xa5\x5f\xf0\xe3\x75\xda\x33\x73\xca\x20\x0d\x9d\xb4\xfe\x99\xd7\xdc\x59\x8c\xde\x2a\xf3\x9e\x8e\xef\x9f\xf1\x49\xaa\xfc\x55\x37\x78\x73\x29\xe2\xd3\xa3\xb5\x4b\xde\xac\xfe\xb6\x8e\x04\x39\x88\x79\x1f\xc4\xc1\xd7\x3f\xc6\x5e\x3d\xc9\x2a\xbf\xe3\x34\x73\x6a\xec\xe7\x5b\x4f\x3d\x6e\x49\x2f\x7c\x7e\x9a\x21\xc7\x86\x8e\xc9\xf1\xa5\xf5\xfb\x4a\x3f\xf4\x4e\x19\xc4\xc1\xd7\x3f\xdc\x46\xeb\xd7\xb3\xb4\x7d\xe8\xf3\xdf\x49\x14\x39\x8f\xcf\xd3\x04\x25\x69\xba\x07\xac\xf5\x2d\x31\xd4\xbf\x20\xf6\xbb\x6a\xe3\x8b\xa8\x0b\xe2\xe0\xeb\x5f\x4a\x02\x03\xcb\xeb\x47\x56\x91\xf5\x5b\xde\x64\x7a\x15\xbf\x58\x55\x79\x8c\x6b\x0b\xaf\x3e\x6e\x54\x39\x6c\xa4\xf3\x61\x89\x86\xbe\x99\x08\xe2\xfc\xa4\xfe\xdb\x98\x93\xee\x4b\xa9\x52\xdb\x95\xf0\x9b\x36\x38\x87\x49\x4b\x6b\xa4\x6b\x89\x43\x5b\x6a\x2f\x33\xd4\x38\x8e\xac\xe7\xaf\x26\xff\xde\xb7\x42\xf8\x23\x10\x07\xdd\x53\x3e\x95\x53\x06\xfd\x5d\x9f\xa4\x04\x75\xa7\x7b\x2a\x17\x0e\x9a\x2b\x73\x24\x49\xd3\x67\x09\x59\xe2\x67\xee\x2c\x32\x06\x9c\x53\x72\xbd\x35\x65\x4d\x74\x83\x46\x0d\x7a\x67\x00\xe2\x90\xce\xe1\x37\x5b\x6e\xba\x0b\xff\x40\x8b\xe0\x20\xb9\x5b\x50\x77\x31\x32\xde\x77\xe4\x50\x97\x73\x78\xf8\xd5\xc3\x59\x26\xe5\x15\x96\x23\xe8\x1c\x3e\x80\x83\x2b\x21\x68\xcd\x6f\x55\x88\x7c\xcb\x24\x60\xd7\xa5\xc3\x5c\xb9\x95\xf9\x40\xb6\xe3\xe1\xce\xf2\x80\x3c\xfb\x31\x71\x1c\x6a\x48\x43\x1f\xa2\x2e\x88\x83\x2b\x61\x3f\xc1\x5e\xb6\x2e\xd8\xa9\x23\x65\xf8\x87\x31\xfd\x3d\xdf\xba\xfa\x72\xdc\xe6\x99\xeb\xc1\x2f\x9f\x87\xa0\x19\x13\x26\x54\x41\xef\xd6\x41\x1c\x5c\x09\x18\x68\xc2\x12\x96\x85\x54\x9d\x09\x43\xdb\x1f\x3e\xb9\x07\xf7\x45\xf2\x86\xd6\xca\x47\x4a\x0d\x4c\x19\x07\x8e\xdd\x2a\xfd\x22\x8c\x50\x02\x88\x83\xee\x29\xab\x9d\x46\x09\xa0\xa9\xf6\x24\x25\x54\xa5\xea\x33\x6f\xa7\x6b\x2d\xa6\x19\x2a\x1a\x78\x3a\x99\x8e\xe9\x87\x2a\x39\xf1\xd0\x7a\x57\x6e\x4c\xdd\x7b\xc5\xfc\xa0\x07\x07\x31\x02\x20\x0e\xa9\x81\xe2\x28\x5d\x88\x7d\x24\x96\xc4\x10\xc9\x5a\xa9\xd6\xdc\x7c\xf6\x4c\xef\x9d\xf4\xee\xf4\xaf\xbd\xa2\x96\xa6\x5a\x9f\x53\x18\xa0\x3d\x26\x88\x83\x2b\x21\x74\xf1\xfe\xbb\x2d\x9d\xb1\x46\x83\x25\x6a\xd4\x42\x34\x41\x11\x01\xfc\xce\xae\x25\xe5\x67\x99\xbf\x1a\x3d\x4d\x9b\x3b\x6a\xa0\x3d\x31\x88\x43\xca\x4c\x46\x3e\x2e\xe8\xcd\xb0\x6b\x2f\x04\x77\xe1\x71\xdf\x6b\x3e\x2a\x64\x68\x2c\x59\xfa\xc3\xb9\x49\x72\xdf\x2d\xa3\x01\xbd\x01\xb2\x89\x20\x0e\xae\x04\xb9\xb2\x97\x52\x0e\x2f\x5c\xf7\x8e\xe8\xea\x66\x65\xb9\xc9\x0b\xda\x4b\xe8\xac\x5d\x9a\xcb\x36\xd8\xa6\x14\x67\x68\xd5\x9c\xd8\x10\x7b\x62\x10\x07\xdd\x48\x3c\x9d\x53\x06\x2d\x7f\x27\x76\x7c\x94\xc0\x1a\x93\x7e\x66\xfe\xcc\xa8\x47\x67\x9b\x32\xe1\x49\xeb\xe3\xde\x37\xdb\x4f\x09\x38\xaa\x9c\xcb\x9e\xdf\x73\x35\x40\x6d\x80\x3a\x3e\x02\x38\xb8\x14\xae\x67\xc8\x36\xd6\x6e\x30\xa7\xa2\x55\xce\x3f\x22\x15\xa4\xc4\xbe\xe6\x99\x44\x9e\xd7\x34\xf4\x5b\x27\xbc\xf5\x8a\xdc\x4a\x2e\x74\x60\x1e\xc4\xc1\xa5\xb0\x4d\xae\xf2\xf3\xab\x45\x53\x8e\xa4\x95\x59\x11\x9f\x19\xdf\x70\xa5\xdc\x90\x79\xf1\x55\x95\x96\xb8\xba\xe2\xc5\x4c\xc2\x2b\xd0\xe9\x6b\x10\x07\x97\x82\x35\x4e\xda\x6d\xb9\x1a\xf9\xb2\xf0\x96\x1f\xd9\x26\xea\xd5\xcd\xe9\x57\x52\x70\x9b\x7e\x5d\xdd\x6a\xf1\x52\x7a\xb1\xc6\xab\xf5\x04\x51\x17\xc4\xc1\xa5\x30\xce\xec\x4a\x92\x26\x82\x79\x18\x73\x2e\x3a\x57\xae\x79\x45\x94\x39\xdd\xd3\x34\xed\xd7\xf7\x1a\x86\x6d\xe2\x56\x03\xb5\xee\x34\x84\x14\x40\x1c\x74\x4f\x59\xe7\x54\x52\x00\x6d\x49\x4e\x92\x82\x91\xcf\x0e\x4f\x39\x1a\xcd\x10\xe9\x68\x9d\x70\xc3\x42\x1f\x8e\x2d\xc1\x84\x4b\xa1\x79\x9d\x05\x9e\x5a\xfb\xbb\xf5\x19\x6e\xa8\x4b\x3a\x88\x43\xfa\x26\x83\x94\xcd\x0f\x05\x8c\xca\x57\x36\x7d\x0d\x33\xe3\xef\x5a\xcb\xca\x82\x48\x84\x5f\xfc\xe6\x2b\x2f\x4e\x7c\x9a\xdb\xab\x5a\x15\x02\x39\x70\x00\x07\x97\x02\x7e\xe3\x15\x4a\xe7\xcf\xc2\x2b\x41\x13\xb9\x72\x55\xd9\x0c\xe2\x92\x75\x8f\x5d\x78\x5d\x7f\x94\xee\xde\xe2\x0a\x59\x2d\x31\x84\x3a\x9a\x80\x38\xb8\x14\x1a\xc6\x2c\x12\x1c\x5f\x24\x2a\xb6\xbd\x79\xd4\xbb\xff\xde\xc4\x5b\xd2\xd5\xf8\x93\xa8\x5a\xd4\x68\x65\xb3\x8a\x18\xa3\xb0\xcd\x12\xd4\x29\x0c\xc0\xc1\xa5\x30\xe9\x70\x70\x90\xb6\xb5\xa9\x1b\xc5\xa7\x67\x94\xe4\x52\xec\x7b\xfb\x96\xc0\x47\x25\xef\xee\x67\x38\xd5\x6f\x8d\xb1\x38\xa3\x3f\x22\xa4\x00\xe2\xa0\x59\xe1\x74\x4e\x19\xe4\xb2\x4e\x76\xca\x77\x5d\xd4\x54\xaf\x86\x86\x67\x51\x96\x5e\xa9\x4b\x6c\x4c\x6f\x9e\x4d\x24\x24\x5c\xe3\x2d\x92\x8e\x64\xbb\xea\xec\x26\x31\x5c\x84\x70\x9d\x20\x0e\xd9\x29\xab\xa4\x2c\x70\x24\x7a\x8b\x1c\xe4\x9b\x6b\xfc\x32\x9b\x0c\xb1\x1e\xb2\x57\xc0\x18\xb0\x5e\x1c\xfb\xa6\xe7\x39\x57\xd8\xf6\x30\x1b\xea\x91\x0e\xe0\x90\x9d\xb2\x69\xa6\x0f\x1b\xa6\xdd\x4f\x6b\x97\xf5\x6c\xfd\xf1\xbc\x32\xd4\xea\xbc\x5e\x6f\xb4\xda\x94\x4c\xcb\xb9\x86\xf8\x9a\xc3\x4a\xe8\x37\x83\x38\x3f\x19\x22\xd8\x68\x7c\x12\xfa\x8a\x79\x7f\x34\xc8\x4e\x5e\x62\x54\x2d\x2b\xb3\xc0\xd8\x20\x9d\x96\x38\x47\x29\xc3\x92\x6a\x9c\xe0\x9e\x1a\xa3\x89\xcb\xff\xbd\x53\x96\xf0\x0b\x73\x99\xce\x78\x36\x7a\x7c\xce\xaf\xc8\xcf\x47\x2b\x49\xa7\xdb\xee\xeb\xa5\xbc\xfb\x77\x0c\x06\x09\xae\xdf\x0a\xa6\xff\xd7\x29\xff\x68\x55\x91\x1d\x50\x92\xa0\xbc\xad\x4d\xf7\x13\xb3\x1b\x73\xfd\x1c\xb1\x5f\x51\x6e\xf9\xcb\xae\xc1\x51\x8b\xb0\x08\x8c\x40\xb2\x7f\xd0\xa2\xc0\xae\xa3\x0d\x33\x05\x8f\xb0\x52\xe9\x44\x15\xe3\xbf\xc5\x05\xb5\xd2\x0d\xd9\x16\x1b\xc5\x22\x2a\xdc\x7d\x6e\x6a\x76\x4e\xff\x6b\x4e\x19\xf4\x68\xff\xde\x53\x46\x72\xca\xe3\x12\x26\xc5\x97\x08\xd2\xeb\xdd\x68\xde\x69\xcb\xc7\xa5\xd4\x88\x99\x51\xbf\x69\x9f\x88\xbb\x27\xf8\xd7\xdd\x8c\x2c\x78\x64\xe9\x2c\x9c\xb2\x04\x92\x53\x8e\xfd\xa4\x5b\xc1\x18\x87\xe9\xa5\x4d\x5a\x27\xa2\x30\xca\xbe\xfe\x3b\x8d\x4e\xd6\xc8\x99\xd9\xcb\x61\x52\x7d\x5f\xf6\xd8\xf8\xff\x9f\x01\xfb\xff\x7e\xb9\x8b\xec\x94\x73\x66\x25\x6f\x9a\x34\x0c\x9b\xef\x77\x7a\x62\xdf\x8b\x32\x8b\x59\x49\xdd\xb5\xb9\x15\x1d\x4b\x6d\x58\x46\xd6\x44\x9e\x90\xbe\x7f\x26\x2f\x77\x91\x9d\x72\x72\xd9\xa0\x7b\x22\xf9\x39\x7b\xa7\xf9\xba\x5b\x1a\x5f\x9e\x87\x2f\x10\xbe\xc0\xd1\xfd\x44\xb8\x43\xf3\x9c\xea\x53\x80\x86\x92\xd4\x99\x3c\x2d\xb2\x53\x36\x38\x4a\xe7\x4d\x59\xde\x34\xb8\xe4\xc2\x4a\x11\x3a\xc2\x3e\x67\xc3\xc5\x4b\x1a\x2a\xf1\xc5\xe3\x95\x71\x21\xd1\xf1\x70\x15\xd3\x99\x39\x65\x90\x86\x4e\x6c\x79\xec\x56\xfd\xa5\xe8\xc5\xa7\x1b\x78\xe2\xdd\x04\x0a\x79\x69\x71\x1f\xb0\x94\x5c\x3f\xfe\x12\xbd\xea\x1a\xe7\xf7\x25\x99\xdf\x7b\x12\x3a\x61\x08\xe0\xe0\xeb\x1f\xfd\x5d\x95\x9b\xa6\x4f\x6d\xb9\x7e\xbe\x92\xcb\xe0\x7a\xa7\xbb\xe8\x3e\xae\xbe\xf9\xcb\xb7\xd6\x43\x2b\xbe\x2b\xa2\x9a\x19\x13\x7a\xe3\x07\xe2\xe0\xeb\x9f\x5d\x5b\x12\x5e\x7b\x3f\x8b\x46\xf5\x9d\xb9\xeb\x77\x2e\x6f\xfb\x35\x06\x86\x1a\xfe\xa6\xe1\xad\x5a\x14\xbb\xe2\xa8\x93\x98\x64\x05\xf5\x15\x01\x70\xf0\xf5\x4f\x2e\xbc\x4d\x22\xb9\xb4\xb6\xef\xcb\x95\xae\x5a\x75\x2d\x82\xc2\x8b\xfb\xb1\xed\x05\xd8\xd4\x5d\x7b\xcc\x51\xcf\xef\xd8\x16\x41\x9f\xc2\x03\x71\xff\xcf\x3a\xf5\x9f\x7d\xc0\xec\xea\xcd\x41\x8c\x15\xef\xab\x44\x57\x46\x1f\x7c\xdf\xb9\x6c\x2e\xf9\xee\x4d\xe3\xf8\xda\x1b\x57\x6b\x94\x77\x31\x53\x1b\xc5\x08\x7f\x04\xe2\xa0\x7b\xca\xa7\x72\xca\xa0\xbf\xeb\x13\xdb\xdc\xbe\x88\xc0\x8f\xaf\xdd\xb9\x7d\x71\xe3\x06\x8a\x62\xf2\x17\xde\xb1\x09\x9e\xc4\x07\x77\x3f\x29\x3b\xb9\xd1\x3a\x6c\x56\xfb\x43\x9f\x0e\x02\x71\x70\x25\x68\xdf\x08\x45\x7b\xb3\x6e\x2d\x88\x12\x2e\xfe\x69\x36\x48\xc8\x27\x4a\x2c\xe2\x9e\xdb\x9d\x57\xdb\xd4\x17\x69\xe9\x58\xaa\x0c\xc3\x10\x75\x41\x1c\x5c\x09\x57\xfc\xf9\x7f\x7d\x69\x11\xeb\x29\x97\xf0\x12\x9f\x8f\xfb\x8e\xd3\x86\x79\xe4\x2e\xdc\x14\x3d\x7c\x84\x71\xe5\xc5\x8c\x30\xd1\x2a\xa2\x2e\x88\x83\x2b\x41\x32\x3e\x7b\x07\x3b\x75\x00\x4b\x34\xb2\x70\x4e\xf3\xdc\x63\x31\x13\x94\xe3\x6a\x21\x22\xde\x06\x9e\x34\xfe\xe7\x9a\xb1\xf2\xd0\xeb\x2e\x10\x07\x57\x82\x1f\x06\x69\xbe\x87\x01\xb9\x70\x6f\xc5\x93\x3b\x26\xaa\xcd\x13\xe2\xfe\xd3\xec\xe8\x29\x84\x1c\x3c\x95\x7f\x7f\xfc\x64\x30\x55\x45\x28\x01\xc4\x41\xf7\x94\x4f\xe5\x94\x41\x53\xed\x49\x4a\x50\xbe\xd1\x11\xb7\x52\x97\x7d\xbe\x9b\x6e\x9e\x79\x58\x9c\x81\xc4\x41\xca\xa6\xb3\x88\x7c\x70\x4d\xe3\xb9\xdd\xa5\x73\x01\xcb\xd0\xa7\xe5\x40\x1c\x5c\x09\x45\xf9\x36\x37\x7e\xe6\xaf\x14\x7d\x92\x3c\x77\x97\x59\xee\xc7\x9e\xa9\x4c\xca\x0c\x5d\xdf\x02\x59\x0e\x37\xda\x65\xd4\x7b\xf5\xd0\x07\xbf\x41\x1c\x5c\x09\x7f\xfe\x1c\x69\x17\xec\x31\x89\xe9\xac\xcf\x2a\x4f\xc4\xbc\x78\xb1\x6d\xfc\x56\xea\x05\x26\x31\x1e\x47\xc9\x39\x5a\x29\xc6\x1b\xd0\x8b\x44\x10\x07\x57\x42\xa3\x99\x96\x55\xaf\x1a\x5b\xb2\x60\x70\x71\x1f\x69\x38\xc9\x57\x54\x73\x7c\x32\x1c\x32\xba\xcd\xeb\x7c\x82\xf8\xa9\x52\x29\x50\xa7\x30\x10\x07\x57\x42\x74\x86\xdf\x2b\x9b\xfd\x77\x3f\x68\x93\x2a\xba\xb5\xbe\x0b\xe8\x34\x8d\xec\x70\xa9\x51\xf3\x9c\x27\x91\x73\xe8\x97\x3f\x9f\x50\x03\x1d\xb9\x05\x70\xd0\x8d\xc4\xd3\x39\x65\xd0\xf2\x77\x92\x14\xac\xab\x07\x55\xba\x23\x7f\x76\x9a\xe0\xe8\xc8\xcc\x79\xfb\x0e\x91\xfb\x49\xa2\x74\xbc\x79\x1c\xd1\x4d\x87\x85\x31\x81\x9b\x18\x03\x39\x44\x00\x07\x97\x42\x9f\xdb\xc8\xe1\x91\x0b\xaa\xed\xae\xda\x07\xe6\x6e\xd1\xcd\xc7\xbe\xf2\x38\xe6\xad\xd3\x58\x3a\x98\x5e\xee\xdc\x2f\x9c\x4a\xa0\x83\x1b\x20\x0e\x2e\x85\x85\x8e\x5d\x45\x59\x69\x27\xdc\x2c\xd5\xfd\xcf\x77\xdc\x3e\x09\xbd\x6a\x1e\xd5\xb4\xe4\x7a\xac\x74\xd4\x62\x30\xec\xf7\x95\x24\x05\x51\x17\xc4\xc1\xa5\xf0\x6e\x5c\x15\x0b\xa7\xe4\xc0\xde\xb5\xaa\x02\xbb\x9e\x94\x65\x85\x5c\xda\x55\xdb\xfd\x40\x31\x27\x5e\x22\xec\x63\x50\xae\xfc\x18\xa2\x2e\x88\x83\x4b\x61\x9f\x30\x61\x2e\xff\xd6\x8f\x1b\x16\x11\x04\xf2\x4b\x57\xe8\xe2\x77\xc5\x5f\xb8\x94\xbd\xb1\x51\x79\x46\xc3\x8a\x35\x58\x79\xa1\x1b\x21\x05\x10\x07\xdd\x53\x3e\x9d\x53\x06\x6d\x49\x4e\x92\x82\xd0\x8f\xaf\xdf\xdb\xd0\x2d\x98\xdf\x64\x19\x95\x0c\x87\xf4\x8f\x31\x2f\xb8\x07\xc5\x18\x50\x63\x5f\xaa\x75\xd5\xa6\x1a\xdc\xe3\x40\x0c\x01\x88\x83\x4b\x61\x92\x7a\x91\x64\xf2\x7c\x52\xda\x41\x6a\x92\xa4\x2e\x95\xfd\x48\xad\xa0\xf3\xc2\x84\xd1\xf8\xf3\xe3\x6f\xd1\x95\xb5\x6d\xac\xfa\x88\xba\x20\x0e\x2e\x85\x87\x6e\xf9\x53\x36\xaa\x19\x63\x53\xad\xd3\x97\x8d\x69\xeb\x46\xa9\x23\xe6\xcc\xeb\x0f\x8f\xd3\x6d\x95\xe4\x35\x94\x78\x8d\xa0\x79\x1c\xc4\xc1\xa5\x90\x64\xd9\xed\xc3\xb6\x6c\x9a\x98\x1f\xc0\x18\xfc\xc1\xa3\x27\x23\xf4\xe5\xa0\xe8\x26\xfd\x9c\xcd\x8c\x3e\x59\x00\x8d\xef\xff\x7d\x53\x1e\xc4\xc1\xa5\x40\x46\xff\xb0\xbb\x98\x68\x62\xb6\x7f\xf6\x10\xc5\xcd\x30\x94\xc5\xdd\xd2\x34\xda\xdd\xc7\x39\x4f\x7b\xd4\x9f\xf2\x2b\xca\x48\x33\x42\x0a\x20\x0e\x9a\x15\x4e\xe7\x94\x41\x2e\xeb\x64\xa7\xcc\x33\x77\x75\x80\x51\x66\x35\x60\x91\x9c\xdb\xfd\xd7\x57\x4d\x56\xe3\xf8\x54\x5e\xa2\x2d\x61\x95\xca\x41\xfe\xe4\x1c\x4c\x5c\x5a\x84\xeb\x04\x71\xc8\x4e\xb9\xb7\x9a\x7e\xf3\xaf\xe2\x1c\xca\xd0\x10\xa6\xed\xa6\xb1\x32\x71\xe2\xf9\xf3\x78\x22\xc2\x29\x32\xdf\xe7\xf4\x50\xce\x89\x7e\x24\x41\x54\x06\x71\xc8\x4e\x99\xab\x99\xa4\xd2\x81\xfe\xc9\xd4\x07\xf4\xaf\x4f\x4c\x2f\x74\xb7\xe2\x4b\x61\xe0\x56\x3b\x32\xdd\xe4\x2d\x68\xa6\x7d\x64\x1f\x11\x83\xa8\x0c\xe2\xfc\x64\x24\x60\xa3\xf1\x14\x73\xe0\xf9\x8b\x5f\xc1\xd2\xc4\x5b\x69\xbe\x7a\x3a\x1a\x9a\xd1\x8d\xe8\x56\x31\x98\xfa\xbf\x3b\xaa\x0c\x34\xb2\xb4\xf5\x08\x21\xa7\xac\x21\x9f\xcb\x27\x9d\xc4\x15\x90\x78\xee\xa5\xc0\x73\xf3\xdd\x2d\x81\x66\xed\x2d\xca\x4d\x2b\x9b\x62\x2c\x3b\x0e\x94\x4f\x82\xb1\xff\x3a\x65\x29\xf6\x8f\xea\x14\x76\x29\xd2\xbd\x12\xab\x42\xa1\x9c\x3d\x86\x8e\x8a\x9c\xd9\x5d\x79\xfa\x5f\x4a\xdb\x23\xaf\x8e\xb1\xed\x46\xfc\xbb\x15\x5a\x62\xa8\x6f\x29\x16\xe1\x1a\x4d\x46\x17\x2a\xaf\x2f\xa1\x3c\x17\x27\x5c\xea\x4f\xad\x70\x5b\xe2\x09\xa6\xc1\x8a\x8b\x60\xe3\xff\x9a\x53\x06\x3d\xda\xbf\xf7\x94\x65\xe0\x76\x2a\x8b\x80\x59\x75\x5d\x58\x6f\x73\x90\x87\x81\x8e\xfd\x2f\xaa\x76\xf2\x2c\x3d\xb9\x49\x96\xe3\x8b\xef\xda\x8a\xdf\xf0\x26\x3e\x52\x9f\x85\x53\xf6\x46\x72\xca\xb7\x0f\x1c\x96\xfd\xd5\x96\x7c\x82\x62\x4d\xc3\xb2\x67\x58\x37\xbb\x96\x23\x7f\x55\xca\x2c\x7c\x6a\xb0\xb2\x24\x89\x57\x2e\x55\x39\x93\x97\xbb\xc2\x48\xde\x71\x07\xc5\x2c\x40\x70\x85\x93\xf2\x80\x73\xd8\x8e\xf7\x56\x7d\x87\x9d\x84\x19\x65\x53\x50\x81\x6f\xf8\x63\xca\x26\xae\xfb\x3f\xd9\xce\xe4\xe5\x2e\xb2\x53\x96\x6e\x62\xa7\x16\xc3\x73\xfb\xff\x31\xf7\x96\x51\x55\x3d\xef\xff\x37\xa5\x80\x20\xd2\x48\x08\xd2\x2d\x29\xdd\x29\x28\x25\x0d\xa2\x34\x82\x41\x37\x08\x52\xd2\x21\x2d\x5d\xd2\xa1\x08\x28\xdd\x48\x08\x82\x80\x84\x28\x88\xd2\xd2\x25\x0a\xdc\xeb\xf7\x5f\xeb\xec\xdb\xcf\x3e\xac\x35\x3c\xe0\xc1\xf7\xf9\x6b\x5d\xe7\xcc\xec\xf7\x9e\x99\xf7\x9e\xb9\xae\x79\xd8\x41\x6b\x8c\x29\xe0\xc4\x91\x2b\x38\x60\x2f\xfd\x94\xd6\xd9\xef\xa9\xa9\x1c\x4d\x45\x6d\x81\xdd\x99\xb4\xd6\x01\xe9\x67\x85\x1f\x7f\xce\x95\xd9\x17\x10\xa5\xe9\x51\x5a\x4b\xd0\x60\x2b\xc0\x1f\xdc\x2b\x0b\x8c\x93\xfe\xcb\x42\x13\xa4\xc0\x23\xff\x88\xef\xcc\x9c\x32\x48\x43\x27\xcd\x7f\xa4\xef\x70\x1a\x7e\x04\x38\xff\xd2\xe2\xb2\xaa\xa6\xb5\x2d\x39\x38\x8c\xce\xbe\xc0\xe1\xd2\xee\x9e\xb8\xe5\x3a\x3b\x76\x4b\x19\x3a\x61\x08\xe2\xe0\xf3\x1f\xef\xfe\xdf\x86\x21\xa7\xd9\xf2\x44\x22\xec\x25\xde\xa6\xc5\x3f\x5b\x95\xdb\xa4\xe9\x9f\x1f\x93\x69\x6f\x1a\x66\x14\xf4\xf3\xa5\x22\xe2\x82\x38\xf8\xfc\x77\x87\xf2\x72\x7d\xdb\xeb\x3f\x45\x6c\x4b\xc9\x5e\x79\x4b\x0d\xe2\x3d\xb9\x36\xbb\xae\xc3\xbf\x3e\xd7\xd4\x70\x5c\x6a\xa3\xba\x01\xf9\x23\x10\x07\xff\xa2\xeb\xad\x68\xfd\xc6\x34\x10\xb5\xda\x19\x35\x0d\x3b\xc1\x71\xda\x95\xaf\x6c\xa9\xa5\x4b\xbf\x5f\x6f\x2d\xbb\x5f\xab\xb7\xc2\x67\x0f\x11\x17\xc4\x21\x9d\x6e\xff\x69\x13\x28\xd8\xc8\xdf\x9a\xbf\x2b\x38\x59\xe6\xcb\x3a\x22\x8c\x46\xd9\x51\x10\x39\x37\xef\x37\x19\xfb\x0e\x4f\x1a\xad\x0f\xe1\x8f\x40\x1c\x94\xa7\x2c\x77\x9a\x95\x10\xe8\xbd\x3e\x49\x09\x46\x7c\x4c\xf3\xd5\x1a\xaf\x9c\xa2\xf5\xf9\xca\x27\xb3\x98\x2b\xf5\x64\x97\x38\x22\xef\x57\xa5\x24\x7c\xbd\xf3\xa1\x47\xc3\xd8\x06\xd1\x03\x20\x0e\xae\x84\xb7\xbf\x08\xaa\x8b\xef\x05\x65\xf0\xdd\x28\xa5\x2c\xca\xbe\x2d\xa9\x6e\x29\x3e\x18\xd0\x16\x6f\x44\xae\x66\x8f\xdf\xfc\x85\x12\xba\xb8\x05\xc4\xc1\x95\x60\x3d\x2e\x6d\xd9\xb4\x5f\x49\x78\x31\xc4\xed\x81\xc8\x15\x34\x13\xdf\xba\x27\x2d\x6f\xed\xf8\x8f\x8a\x5a\xde\xcc\x85\xa5\xa9\x5c\x45\xc4\x05\x71\x70\x25\x24\xb3\x85\x74\xd0\x92\x38\x5b\xd4\x2c\x9b\x3c\xae\xe8\x3d\x3a\x2a\x0e\x65\xff\x4e\xce\x7a\x79\xc2\x0e\x7f\x6a\x6d\x2f\x59\x8c\x13\x3a\x70\x0a\xe0\xe0\xfd\x3b\xf6\x81\x5e\xf9\x4a\xeb\x97\xa4\xf3\x86\xc2\x45\x82\x17\x6c\xe5\xe7\xb9\xf3\x1e\x9c\x7f\x9b\x55\xf8\x96\xf4\xda\xc6\x8b\x1f\xca\x06\x50\x45\x2f\x00\x07\xe5\x29\x9f\xca\x29\x83\x86\xda\x93\x94\x40\x2e\x35\x17\x46\xbe\xe0\x74\xfe\x76\xc0\xfe\x9b\x80\xee\xc1\xeb\x89\x6c\xe4\x4d\x78\xb7\x3a\x3e\x08\x14\x18\x19\xc5\x73\xb9\x41\xb7\x2e\x81\x38\xb8\x12\x0a\x08\xd1\x3e\x52\xfb\x6a\x7e\xe3\x1f\x96\x32\xbf\xb8\xbe\x71\x94\x4a\xcd\xfa\xfc\xd1\x45\x65\xf6\x14\x2e\xca\x19\x46\x0e\x31\xe8\xb2\x3f\x10\x87\x74\x77\x2f\x67\xc0\xed\x9a\xa7\x37\x9c\x6d\x5d\x42\x8e\xd7\x6e\xcb\x72\x88\x93\x8a\x5f\xe0\x70\xf9\x9a\x94\xf5\xce\x1c\x4d\x6f\x11\xe5\x32\x74\x1e\x12\xc0\xc1\x95\xb0\x3e\xb3\x71\xbc\x79\xd3\x15\xbd\xdb\x51\x86\x98\x45\xed\xdc\xc7\x82\x9d\x79\xb1\x26\xe9\x8d\x0a\xe5\xa5\xcd\xaa\x0e\x85\xef\xd0\xcd\xe6\x20\x0e\xde\xbf\x71\x65\xf2\xcb\x0b\x5e\x63\x35\x7b\x7d\x91\x14\x96\xd1\xc7\x93\x21\xd7\x1e\x73\xbd\xb3\x31\x4b\xfe\x6a\xf4\x3e\x3f\xd8\xb2\xee\x33\x62\x4d\x0c\xe2\xa0\x8c\x44\xd1\x53\xd9\x23\xd0\xf4\x77\x92\x14\x9c\x13\x6c\x9a\x27\xa4\xb5\x54\xfb\x76\x37\x23\x7f\xea\xb6\xd9\x8f\x96\x06\x8c\x15\xfe\xf9\x11\x22\xc4\x4c\xb1\x80\x95\x4e\x03\xbd\x64\x20\x0e\x2e\x05\xd5\xa4\x8f\xfa\xc7\x79\x6c\x91\x77\x65\xdf\xe6\xbc\x57\xb0\xac\x97\xc9\xec\x3c\x9f\xd5\x8d\x6e\xbe\x1b\xa8\xd3\x22\xfb\x67\x13\x3a\x30\x0f\xe2\x90\xca\x58\x2c\xfb\x1e\x4e\xae\x4b\xcf\xe3\x52\xa1\x97\x5a\xf7\x7b\x3d\xda\xba\xe6\xd8\xd1\x76\xa0\xea\xd2\x4d\xfc\x73\x2d\x6f\xa2\xd1\x18\x2a\x63\x01\xe0\xe0\x52\x48\x89\x78\x24\xa9\x7d\x2b\x96\xf0\x5c\xba\x93\xd5\x45\x55\x91\xb5\xae\x0e\xb7\x72\xee\x87\xda\x2e\xb2\xc7\xdc\x6e\x97\x7c\x53\xa0\xe2\x05\x20\x0e\xe9\xf3\xe4\xe1\x61\x7d\xb0\x59\x1f\xff\x50\x37\xae\x2f\x03\x26\xd6\x53\xbf\x8f\xaf\x2e\x8f\x8e\xff\x30\x65\x4a\x53\xe4\xc9\x4a\x3a\xfe\x84\x90\x02\x88\x83\xf2\x94\x4f\xe7\x94\x41\x4b\x92\x93\xa4\x20\xe4\xfb\xe8\xfc\xa7\xb9\x06\xd6\x1f\xad\x24\x99\x51\x86\xf2\x79\x73\xc7\xb4\xa6\x6b\x4f\x1d\xa6\x0b\xd9\xb5\x96\xb3\x4a\x89\xa1\xfc\x5c\x10\x07\x97\x02\xbb\xd4\x90\x72\x9a\xe8\xe2\x6e\x9f\x91\x6e\x58\xce\x64\xf8\x7e\xcd\xb2\x89\x53\x62\x52\x05\xf7\x1f\x5c\xd7\x17\xe1\x16\x32\x50\x4d\x6d\x10\x87\x94\x9d\x73\x27\xd8\xa5\x04\xa7\xbf\xba\x02\x83\x43\xd2\xd4\xf6\x41\xc7\xd2\x2d\x1b\xd3\x6a\x06\x75\x8b\x41\xf5\xdb\x18\x98\x2a\xc7\xdf\xa1\xec\x1c\x00\x07\x97\x82\x6d\x7c\xa4\xe2\x8a\x58\x43\xa3\xcf\x0e\x7f\x5b\x71\x4a\x5a\x9d\x70\xa8\xf6\xd4\xda\xcd\x0f\x87\x9d\x9c\x06\x5c\x5a\x82\x4f\xdf\x22\xe2\x82\x38\xa4\xf9\xf7\x89\x97\x36\xfe\xba\x7c\x76\x96\x94\xb3\xdd\xb2\x99\x49\xb4\x31\xe6\x0f\xb6\x1b\x1b\x8d\x1d\x79\x5f\xa9\xdc\x24\x86\x2e\x3f\x40\x48\x01\xc4\x41\xa3\x82\xc3\xa9\x9c\x32\xc8\x65\x9d\xec\x94\x1d\x43\x3a\x7e\xe0\x3d\x9c\x57\xf8\xb9\x4c\xb0\xa5\x60\xa9\xaa\x84\x9f\xfc\x32\xb1\x7b\xa1\x74\x81\x73\xe5\x75\x8c\xf1\x43\xad\x6c\x84\xeb\x04\x71\xc8\x4e\xb9\x7b\xf4\xe2\x25\x3b\x9e\x04\xc5\x38\xd4\x3f\x1e\xcf\xae\x72\xef\x3a\x65\xaf\xf3\x5e\x59\x2b\x7f\x66\x6c\x5b\xb6\x3c\xf4\x25\x7c\x0d\x11\x19\xc4\x21\x3b\xe5\x8a\xc6\xf7\xb3\x69\xda\xbb\x78\xf7\x22\x63\x3a\x15\xb7\x6f\x8b\xb6\xde\xf9\xbd\xe0\x81\x13\xc8\x29\xa7\x50\x39\xc5\x5a\xe6\x1e\x89\x88\x0c\xe2\xfc\xe5\x50\x50\xff\x1b\x39\xf5\xae\xc4\x0d\x83\x1a\x0e\xbb\x3d\x56\x43\xbc\x89\xa2\x85\xc7\x7c\x15\x97\x72\x22\x49\x3f\xeb\x7c\x2e\x37\x2b\x9e\x89\x69\xe7\x80\x9c\x72\xdd\xfe\x03\x07\xb9\xd9\x90\xde\x91\x5d\xea\xaf\x8b\xf1\xde\xa8\xa5\xc2\x24\x2d\x4e\x3b\x9e\x7e\xbc\xaf\x7a\x93\x31\x43\xc6\x77\xfe\x75\xca\x56\x5c\xc9\x97\xfa\x9c\x0c\xaf\xee\xd6\xe0\x92\x52\x7b\xf1\x72\xd7\x7e\x7d\x9d\xe8\x19\xeb\xa8\x98\xce\x60\x27\x78\xfe\xf1\x30\xcb\xbf\x9f\x5e\x09\xc8\x4b\xc2\x08\x1d\x29\x83\x55\x71\xfa\xfd\xff\x7c\x6f\xc6\x8f\x6b\xb9\xce\x36\xa0\x42\xd1\x29\x90\x86\x91\xfa\x9e\xe3\x7f\xce\x29\x83\x9a\xf6\x6f\x9e\x32\x92\x53\xce\x9d\xa2\x51\x36\x21\xac\xfa\x9d\x1f\x7f\xb3\x70\xd2\x2f\x85\xee\x1d\xba\x91\xbe\x02\x5a\xad\x98\xb3\x2c\xa9\x28\x2f\x51\xa6\xfe\x59\x38\xe5\x66\x24\xa7\x1c\x33\x3b\xfd\x6e\x67\xc8\xa9\xc3\xbc\x24\xa1\x51\x38\xfa\xd3\xba\xd0\x46\x7a\xf7\xb9\xbf\x1a\xb3\x0c\x45\xd7\xd4\x46\xb4\x1b\xa8\xcf\x64\x73\x17\xd9\x29\x53\x8e\x6d\x11\x1b\xad\xad\x19\x2f\xbc\x92\xb8\xe6\xd4\xf6\x6c\x62\x04\x95\xf3\xd8\xfc\x68\xb9\x5b\xbb\xec\x71\xe1\x76\x56\x02\xfd\x99\x6c\xee\x22\x3b\xe5\xd2\x27\x47\x2c\x13\xf6\xcb\x65\x3a\xd8\xd9\x0d\xc1\xd4\x75\xf9\x63\x3f\xf8\xbc\x6e\x27\x60\xb8\x88\x3d\xab\x6b\x74\xb7\x7f\x79\xee\x4c\x5a\x8b\xec\x94\x95\x9d\x5e\xa4\x2b\xbf\x0b\xc1\x17\xf6\x6a\xaa\x61\x2d\x0e\x90\xce\xbd\x94\x17\x96\x9c\x9c\x99\x7d\x4b\x17\x6f\xbf\x35\x49\x5d\xe4\xcc\x9c\x32\x48\x43\x27\xcd\x7f\xed\x16\x44\xce\xc4\x0f\xbb\xb9\xf6\x33\x97\xb3\x8e\xd1\x70\x74\x2e\x30\xad\x28\xd4\x34\x46\x89\x8b\xa6\xe5\x55\x6c\x73\x71\x79\x22\xc6\x7d\x10\x07\x9f\xff\x1c\x77\xd7\x1e\xd4\xc9\xef\x07\x32\x58\x52\xba\xfa\x6b\x1d\x4e\x89\xdb\x04\x91\x38\xeb\xb8\x1b\xab\x18\xbe\xc6\x62\x3a\x2f\xdf\x8a\x88\x0b\xe2\xe0\xf3\x1f\x3d\x41\xcb\x70\xd9\x54\xbb\xce\x3b\xe1\x59\xdc\xbf\x4f\x53\x42\x3f\xd6\x65\x57\x3f\x78\x73\x77\xc9\x88\x25\x7a\x5a\x16\xa3\x26\x1b\x3a\xd5\x0d\xe0\xe0\xf3\x9f\xd5\x8e\xad\x3b\x17\x35\xe3\x7a\xd6\xaf\x8b\x84\x7b\x52\xcf\x6f\xf3\x54\xae\xc7\xbf\x52\x4d\x3c\x97\xf5\x98\x36\x6b\x90\xed\xff\x3f\x7b\x0c\xe2\xfe\x6f\x9e\xfa\x37\xee\x8f\x39\x79\x8a\xc3\x87\x66\x37\xad\xe2\x1e\xaf\xb4\x0f\x5f\x4d\x70\xb6\x75\x37\x24\xe4\xcb\xba\xc1\xf7\x52\xcb\x2c\xd2\xb3\x72\x06\xe1\x8f\x40\x1c\x94\xa7\x7c\x2a\xa7\x0c\x7a\xaf\x4f\x52\x42\x3c\x6e\xcf\x6d\x85\xca\x0b\xe4\xb7\x4b\xbe\x6e\x5a\xbc\x7b\x54\xc5\x8c\xb2\xaa\x1a\x8e\x52\x8a\x23\x25\xc2\x60\xf0\xe3\x96\x1c\xf4\x0d\x02\xc4\x21\x5d\x29\x9d\x22\xa5\x76\xff\xe3\xdc\x45\xae\xdf\xe6\xa9\xb7\x65\x57\xff\x3c\x21\x97\xfb\x9e\xc4\xd5\x96\xd2\x9a\x11\x7a\xcc\x99\x52\xa4\x85\x88\x0b\xe2\xe0\x4a\x40\x65\xa0\xb5\x88\xb8\xfe\xc7\x42\xb2\xb4\xc2\x30\x30\xff\xdb\xb7\xdf\x4e\x87\xfb\xe6\xcc\xc5\xe1\x0b\x3c\x8d\xbe\x7d\x93\x87\x93\x88\xb8\x20\x0e\xae\x04\xfc\x27\xb9\xcf\x2d\xba\x3b\x77\x3b\x45\x09\xe9\xf0\x94\x9a\x95\xaa\xf5\x3e\x39\x3c\xdd\x27\x59\x08\xa0\xdf\xb0\x67\x88\xfa\xf8\x09\xaa\x01\x0e\xe0\xe0\x4a\x78\x17\xe7\xf5\xaa\xb7\xb0\x4e\xff\xcb\x46\x80\xd2\x20\x4e\x6c\x34\x9a\xe0\x76\xd1\xc6\x73\x2b\xda\x90\x75\x63\xa1\xd0\x1e\xee\x61\x84\x12\x40\x1c\x94\xa7\x7c\x2a\xa7\x0c\x1a\x6a\x4f\x3c\x67\x59\xbb\xa3\x9d\x96\xc8\x1e\xa7\x5b\x8a\xff\xfa\x41\x12\x17\xd1\xe5\x46\xf1\x75\x0f\x8d\x67\xbd\x6f\x1e\x46\xdc\x1c\xce\x9f\xe9\x81\xbe\x46\x01\x38\xb8\x12\x2c\x42\x8b\x75\xf3\x19\x84\x75\x97\xf0\x58\xb8\x67\xe2\xfb\x59\xd0\xbe\xa4\x0a\x75\x0c\xff\x48\x7c\x2e\x5c\x5d\xb6\x5e\x33\x7b\x88\x88\x0b\xe2\xe0\x4a\xf0\xd1\x70\x53\x1d\x20\x64\x6c\x5a\x2f\xd9\x41\xcf\xe1\xee\xdf\xff\xc5\xf3\xad\xa8\x2e\x14\x2b\xe8\xcf\xe3\xb0\x0e\x53\x25\xf5\x9b\x88\xb8\x20\x0e\xae\x84\x31\x2e\x15\xc7\xa0\x7d\xe3\xa6\xd6\x86\x5e\x8a\x48\x6f\xfe\x8e\xf0\x47\x8e\xe6\x3e\x09\xfd\x8c\xdc\x09\xc2\xda\xb1\x8c\x4f\xa0\x7c\x6d\x10\x07\x57\x82\xb8\xc8\x81\x32\xcb\x8e\x64\x8a\xc9\xad\xca\x4b\x92\x44\x64\xb3\xe5\x7c\x23\x45\x7a\xf7\x83\x04\xb8\x5e\x65\xc5\x8a\x8f\xb8\xd1\x20\xd6\xc4\x20\x0e\xca\x48\x3c\x9d\x53\x06\x4d\x7f\x27\x49\x41\xbc\xb4\xeb\xfa\x8b\x9e\xec\xf3\xf2\xbc\xa6\xe7\xb4\x5c\x70\x4b\x70\x65\x0a\x57\xae\xf4\x57\xcc\xf7\x97\xcc\x51\xd1\xcc\x6c\xd1\x21\xba\x00\xc4\xc1\xa5\xf0\x7c\x40\xe6\x8d\xa3\xee\x05\xf5\x61\xd5\xa1\xad\x37\xc4\xa4\x13\x69\x5e\xf2\x86\xce\x64\xdf\xd5\xbb\x68\x23\xd6\x32\xc5\xaf\x54\x20\xe2\x82\x38\xb8\x14\xa2\x87\xa2\xcd\xff\x4a\x86\xad\x34\x50\x2f\x24\x04\xf3\x88\x5e\x6e\xbc\x60\x63\x43\xa1\xba\xdb\xe5\xcb\xd1\x43\xc8\xfa\x27\xf3\x19\x22\x2e\x88\x83\x4b\x21\xd8\xb6\x80\x78\xe2\xdc\xcb\x30\x0a\xa9\x87\x0f\xb2\x62\xc7\x45\x89\x84\x55\x33\x6c\x08\x7f\xfb\xe3\x90\xa9\x1e\xe3\xc7\x0f\x7a\x40\x83\x18\x80\x83\x4b\x81\x35\xd6\x2e\x3d\xeb\xe5\x74\x25\xcf\x8d\x0d\x69\xf2\x00\x4b\x53\x7a\xa6\x00\x49\xbf\xe8\x77\x63\x18\x77\xe4\x84\xec\x0f\x70\x48\x11\x52\x00\x71\x50\x9e\xf2\xe9\x9c\x32\x68\x49\x72\x92\x14\x6e\xdb\x90\x26\x3d\xe5\xef\xc3\x96\xa0\x3f\xd7\x3e\xac\xaa\xe6\xf0\x47\x6d\xc2\xbf\x0a\x9b\x00\x33\xe1\x81\x2f\x83\xf2\xad\x87\xd0\x47\x08\x10\x07\x97\xc2\xc1\x35\x95\x9b\x18\x71\x3a\x0a\x32\xbe\x2a\x0d\xaa\x1e\xf4\xe1\x07\x4b\x29\x63\x61\x1c\x41\xb8\x9f\x03\x8d\x3d\xd0\xc3\x1f\x40\xb7\x08\x82\x38\xb8\x14\xbc\x44\xca\x8c\xe6\xa9\x9c\xbd\x1b\x8d\x05\x23\xd8\x4d\xae\x8a\xc8\xda\x98\x17\xf1\x5c\x6a\x8a\x1a\x28\x9e\x6a\x1e\xfc\x70\x0b\x1a\xc7\x41\x1c\x5c\x0a\xa2\x74\xc1\x7c\x31\x6d\xe9\x9f\x84\x55\x38\x97\x23\x89\x49\x63\xee\x5c\x12\x52\x8f\xd0\xb7\x26\xf7\x6a\x9f\x4b\xad\xf6\x77\x86\x56\x20\x20\x0e\x2e\x05\x49\x86\x10\xdc\x43\x9c\x2b\xb4\xaa\xcf\xff\x8a\x36\x8d\xd5\x55\xd2\x6f\x58\x8a\xa1\xa7\x68\x47\xcb\x28\x17\x7c\xce\x1e\xbb\x35\x0f\x55\xf4\x02\x70\xd0\xa8\x70\x3a\xa7\x0c\x72\x59\x27\x3b\x65\xed\x08\x02\x7b\xf2\x18\x7f\xee\xed\x5e\x12\x97\xe4\xf9\xa5\x3b\x86\x7c\x7c\x33\xe3\x81\x22\x45\x0a\x25\x6d\x1c\xef\x3e\x6a\x77\x23\x5c\x27\x88\x43\x76\xca\x5f\xda\x63\x12\x2b\x6c\x0e\x07\xbe\xc8\xde\x7d\xf9\xe4\xbc\x29\x31\x5a\x2a\x9a\xa8\x74\x39\x5a\x04\xf6\xcb\x9f\x0b\xfd\x7e\x7b\x50\x9e\x32\x88\x43\x76\xca\x6f\xda\x8e\xcf\xd5\x7f\xba\xca\x42\xd1\x4f\xe7\x3d\xf5\x3c\x55\xc7\x5d\x18\x55\xa8\xe3\x51\xc3\xe3\x35\x9d\xf3\x4c\xb1\x56\xbe\xc9\x88\xc8\x20\x0e\x39\xb2\xfb\x9b\x1c\xd9\xba\x64\x34\x99\x79\x31\xbc\x7b\x5a\x65\xd7\x2f\xed\xea\x11\x4e\x2a\x59\x24\x8b\x7f\x08\xd8\x57\x5c\x2d\xc2\x5b\x81\x9c\x32\xea\x96\xc5\xc8\xfe\x95\x17\x06\x7f\xd6\xba\xa6\x46\x2f\x74\x34\xee\xdd\x3f\x2a\x24\xa4\x71\xa4\x34\x98\x55\x5e\x60\x7a\x95\x1a\xfe\xaf\x53\x0e\x5d\xad\x08\xa7\xab\xb8\xfe\x0a\xe5\x88\x06\xf5\xee\x1e\xda\x98\x69\xbb\x48\x49\xa7\x69\xf3\x2f\x9f\xc6\x69\x5a\xb2\xac\xca\xf7\xff\x3a\xd4\xf8\xd1\xcd\xd2\x6f\x7f\x74\x0a\x52\xa8\xba\x4b\x6e\x3d\x49\x44\xdb\xe9\x9e\x6e\x27\xc0\x64\xcb\x25\xba\xa4\xd9\xe0\xf0\x94\xf5\x7f\xc5\x29\x3f\x3d\x77\xba\xa6\xfd\x9b\xa7\x8c\xe4\x94\xbb\x2f\xeb\x93\xe9\xd0\xc7\xae\xa7\xd6\xc6\x44\x29\xdf\x35\xc6\x5b\x73\xb8\xad\x94\x5a\xf1\x49\xae\x93\x14\xef\x95\xd0\x52\xe7\xc8\x99\xec\x77\x72\x23\xb9\x38\x5d\x79\x7a\xe9\x6d\xc7\x22\x93\xb8\x9b\x2f\x15\x3f\xdd\x67\xf8\x3e\x1b\x6d\xfd\x73\x26\xd0\xa0\x22\xf4\xe8\xc5\xec\x79\xbc\x91\x9c\x33\xd9\xdd\x45\xb6\xca\x2c\xb2\x23\x78\x7f\x1a\xc7\x38\xad\x03\x34\xb3\x9a\x1f\x3c\x11\xa2\x75\x75\x2b\x95\xc3\xff\x59\x45\xc7\xd1\xb0\xe1\x3d\xb7\x87\x7d\x26\xad\xd5\x45\xfa\xd9\xc4\x9b\x35\x8f\x99\x97\x3c\xdd\xe3\x6e\x0e\x66\x73\x60\x72\xd1\x06\x4b\xcd\x7e\x14\xaa\xf3\x7e\xd5\x58\xe6\x64\xd4\xcf\xae\x79\xe3\x4c\x5a\x8b\x6c\x95\x3d\xa8\x47\x3f\x49\x62\x2b\x66\x6c\x0c\x98\xb4\xfd\x1e\xa9\xdd\x98\x59\xa7\xaf\xe5\x7d\xa1\x5b\x72\x97\x6a\xe7\xca\x8c\xc8\xf3\xc4\x33\xb3\xca\x20\x11\x9d\x34\x01\xe6\x9a\xdb\xa6\x46\x3e\xad\xd8\xad\x55\xbc\x79\x33\xbe\x61\x2f\xb7\x05\x47\x3b\x7c\xd7\x8b\x66\x47\x4e\xf6\x8a\xc7\x08\x11\xaa\x23\x62\xe0\x07\x71\xf0\x09\xd0\xad\xe5\xfa\xe5\x87\x09\xe1\x99\x65\x0a\xf5\x7d\x8e\x0a\x9f\xd5\x34\x24\x28\xfc\x50\x9c\x69\x5e\xba\xb2\x3e\x64\xdd\x56\xaf\x87\x2e\xf1\x01\x71\x48\x85\x3a\xdc\xa5\x7b\xd8\x0b\x6b\x03\x82\xc7\x44\x76\xaa\x82\x7e\xa0\xdc\xba\x13\xa3\x61\xa7\xb7\x28\xf9\x20\x3f\x75\xf3\x2f\x9b\xd3\x12\x54\xa8\x03\xc0\xc1\x27\x40\x1a\xbd\x06\x4e\xcf\xd6\x7e\xb7\xb5\x1c\x7b\xa5\x92\xfe\xfc\x9a\x2f\xb7\xfe\xa2\xac\x60\xea\x6e\xd6\x9c\x0b\xb6\x3f\x8f\x3b\xf4\x06\x11\x17\xc4\xc1\x0f\x6b\xed\x97\xd6\xd6\xdb\x60\x8a\xd8\x61\x6d\x27\x24\xda\x1a\xce\x7e\x79\xe5\x51\xd1\xf4\x9e\xcb\xb1\x7b\xff\xc2\x58\x9d\xf3\x25\xa1\x78\x84\x41\x02\x71\x50\xa2\xf2\xa9\xac\x32\xe8\xbd\x3e\x49\x09\xaa\xac\xaf\xaf\xd6\x46\xe2\xcc\xe3\x75\x3f\x67\xb8\x34\xbb\x4f\xdc\xba\x53\x4a\xed\x34\x8b\xfb\xd2\x30\x5a\xfc\x3c\xd9\x90\x5b\x3f\xb4\xcf\x03\xe0\xe0\x4a\xb0\x2c\x31\x51\xac\x79\xdf\x14\x33\xe0\x6a\xad\x6b\xd9\x6c\x3a\x5b\xea\x34\x62\x1a\x43\xf5\x77\x7f\x23\xd0\xf8\x7d\xf7\x40\x88\x3d\x74\x82\x13\xc0\x21\x15\xbf\x36\x6a\xfb\x21\x8e\xe2\xe4\x98\x75\x1f\xd5\xf4\x6d\xf2\x30\xbe\xc2\x62\x8a\xb1\xb3\xe4\x1d\x81\xcd\xe5\x8a\xb2\x16\xe9\x4c\xe8\xa4\x25\x88\x83\x2b\x81\x81\xa3\x93\xb0\xe4\x7c\xbe\xbb\x07\x81\xdc\x4c\x75\xc1\x0a\x77\x49\xb3\x28\xbb\x34\x0e\xd7\xa8\x3c\x71\xc0\x44\xff\x6e\x00\xb4\x2a\x06\x71\x70\x25\x10\x58\xec\x8f\x36\x92\x93\xdd\xf7\xfc\x48\xd7\xaf\x11\x20\xe4\x73\x79\x8a\xe9\x79\x23\xe1\xf0\xad\x64\x61\xde\xbb\xca\xf9\xaa\xeb\x88\xa5\x10\x88\x83\x72\x12\xb9\x4f\xb5\x2a\x06\x8d\xb5\x27\x49\xe1\x4f\xd1\xac\x3b\xe3\x94\x12\x19\x89\x77\x4b\x01\x9e\xbc\x48\xf5\xed\x2b\x22\xe6\x83\x31\x54\xdf\xa4\x6e\x1b\x94\xdf\x8b\xfd\x59\x07\xe5\x6a\x03\x38\xb8\x14\x34\x83\x73\x8c\xfa\x29\xdc\x95\x9e\xba\x53\x78\xec\xa1\x26\x1a\xba\x16\xb6\x89\xbb\x45\xa0\x37\xe7\xb9\xf4\x93\xf1\x37\x12\x2e\x23\xe2\x82\x38\xb8\x14\x48\x72\xd1\x94\x87\x89\x6b\xbb\x76\x0d\x34\x3f\x6a\x63\x84\x71\x0a\x50\xbd\xe5\xa3\xca\x62\xf8\xc4\x7d\x7b\x21\x74\xf9\x17\x1a\x54\x11\x1f\xc4\xc1\xa5\xd0\xd5\x8b\x4e\x16\x63\x94\x97\x74\xa5\xca\xfa\x69\xdc\x85\x8b\x73\x69\x3c\x86\x6a\xca\x38\x1a\xba\x97\x83\x05\xd2\xb2\xcf\xbf\x80\xf6\xbb\x40\x1c\xd2\x09\x4e\xbb\x47\x29\xf7\xbb\xcb\xbf\x0a\x5e\x56\x0b\xcb\x4b\xce\x66\xbc\xd6\x94\xc5\x93\xef\x63\x3e\x7c\xef\x47\x5a\x72\xa7\xeb\x0d\xe8\xd0\x2d\x88\x83\x72\x12\x4f\xe7\x95\x41\xf3\xdf\x49\x52\x48\xf4\x15\x9f\xf7\x36\xe9\x2b\x29\x12\x6c\x35\x2f\x59\xb4\x62\xa0\xd7\x58\x09\x30\x4d\x76\xb6\x65\x1b\x79\x58\xd7\xbb\x14\x2d\x85\xe8\x02\x10\x07\x97\x02\x2a\xb9\xcb\x9d\xa8\x4f\x1c\x31\xe4\x2e\xbb\x13\x8d\x1c\x5b\xe1\x3a\x4f\x06\x32\xed\x64\xef\x45\x5f\xa6\xdb\x7d\x31\x95\x31\xcb\x0d\x7d\xe8\x02\x70\x70\x29\xb0\x92\xed\xb5\x86\x32\xf9\x19\x26\xb4\x04\x75\x4e\x47\xbc\xe7\xbc\x42\xe9\x28\x2e\x60\x68\x76\x68\x45\xb5\x67\x52\xd0\x5f\x03\xa5\xe7\x80\x38\xa4\x03\x06\x4b\xa9\xdf\xc6\x15\x67\xac\x49\xdb\x0a\x02\xf8\x7a\x67\x45\x55\x3a\xee\xbb\x56\xb4\xa9\x0c\x92\xf5\x9b\x37\xa5\x3c\x0c\xf1\x82\x0e\x18\x00\x38\xa4\x64\xf8\xfb\x38\x3f\x0a\x45\x63\x64\x1f\xe2\x9f\x73\xdf\xcf\xec\xac\x3a\x32\x73\xe3\x9a\xf1\xca\x5a\x66\x5a\x1f\xb5\x27\x43\xeb\x1e\x45\x48\x01\xc4\x41\xa3\x82\xee\xa9\xa4\x00\x5a\x93\x9c\x24\x05\x27\x83\x38\x34\xdc\x30\xcb\xc5\xd4\xa6\xb9\xe5\x89\x14\x39\x3d\xe2\x51\xcb\xeb\xb2\x5c\x7c\x26\xc7\x2e\x42\x74\x0d\x55\x1c\xd0\x5b\x06\xe2\xe0\x52\x48\xa2\xbb\xc8\xbf\x80\x31\xfc\xb1\x2c\x99\x89\x06\x47\x32\x43\x8c\xe6\x26\xd9\xcc\xa6\xb5\x8c\xeb\xfd\xe0\x41\x77\x91\xc7\x93\x50\xc1\x72\x10\x07\x97\xc2\xd3\x21\xdb\x43\x5d\x22\x05\xae\xd7\x7c\xe3\x97\x6e\x65\xc7\x57\x1f\xea\x49\xe1\xdd\x1b\x23\xa3\xdd\xfe\x35\x1a\xd0\xfc\xb5\x01\x5a\x2a\x80\x38\xb8\x14\x96\xe4\x7a\x31\x42\x4a\xe4\x07\x5d\x39\x74\x7f\xcc\x88\x26\x04\x6e\x69\x9b\x7c\xc6\x5c\xc2\xa3\x13\xec\x66\xfc\xae\x92\xc1\x01\x55\x26\x04\x71\x70\x29\xdc\x3d\xc6\x65\x7e\x63\x1d\x37\xb7\xa0\xba\xa8\x15\x56\x1b\x8e\x4e\xcd\xa1\x69\x62\x93\xda\x24\xd1\x16\x18\x4b\x8b\xca\xd7\x49\x8e\x90\x02\x88\x83\x46\x85\xd3\x79\x65\x90\xcf\x3a\xd9\x2b\x4f\xbf\xfa\xfd\xce\x35\x73\xf2\xa6\xa5\x79\xdd\x1d\x26\x3b\xbd\x84\xef\x72\xeb\xd3\x7c\x86\xfa\xaf\xe2\xa5\x65\xe6\x6f\x47\x72\x9a\x21\x7c\x27\x88\x43\xf6\xca\x6c\x31\x89\xef\x71\x3a\xd7\xcc\xd8\xef\xe8\x53\xd4\xdf\x5d\xae\x48\x98\x28\xe8\x28\x79\xc5\x9f\x76\x77\x78\x6f\xe7\x06\x6a\x0a\x37\x22\x32\x88\x43\x76\xb4\x95\xc5\x0a\xc3\x2b\x8b\xf3\xb5\xca\x81\xd3\x72\x64\xf3\x58\x91\x23\x13\x11\x36\x9d\x4a\x3c\xba\x55\x18\xcb\x1d\x25\x9a\xe8\x3c\x88\xc8\x20\xce\x5f\x0e\x05\xff\xbf\x91\x4f\x7d\xa3\xb2\x78\x2f\x85\x64\x4c\xb4\xba\xe5\x34\xb9\x82\xa3\x27\xb5\xac\x00\xc7\x93\xa1\xc6\xab\x99\x9f\x43\x1a\x7f\xed\xae\x54\x0b\xfa\xff\xa7\xfa\xb5\xf8\xd6\xb5\x91\x6b\xf3\x66\x42\x0b\x9f\xc8\xf1\xd5\xe2\x04\x67\x7e\xbe\xba\x43\xee\x6e\xf6\x97\x79\x38\x48\xde\x96\x5b\x2e\xa0\xe0\x1f\x34\xf6\x68\x21\x91\x45\x58\x38\x4a\xbe\x24\x76\x5d\x22\x2d\x53\xc4\x8a\x92\x41\x57\xea\xfc\x3b\xf7\xfe\xc6\x6b\x93\x76\x34\x0c\xab\xff\x6b\x5e\x19\xd4\xb4\x7f\x33\x95\x91\xbc\x72\x85\x7a\x0f\x81\x7c\x12\x91\x10\xeb\x33\xbd\x31\xd7\x67\xa5\x8f\xe4\x62\xb1\x6c\xdb\x8c\x08\x76\xf0\x5d\xad\xbd\xb1\x36\x78\xcf\xc0\x4f\x85\xc9\x49\x21\x7b\x65\x55\x8a\x65\xff\xd6\x2b\x5f\x31\xf7\xd6\xba\xf4\xc7\xf0\x56\xf3\x79\x24\x24\x3a\xfa\x51\xe6\xbc\xfd\x82\x12\xe9\xf9\xba\x53\x09\xcf\x64\x7f\x17\xd9\x2b\x3f\xa9\xbd\x43\xef\x38\x69\x32\x8d\x43\x45\xe8\x22\x98\xa4\x38\x28\x97\x60\xe9\x4a\xbf\xff\x98\x42\xac\x93\x6d\xb7\x70\x5c\xe0\xe2\x99\xb4\x16\xd9\x2b\x3f\x35\x78\x7d\x2f\x8b\x6e\x20\xb4\xce\xb7\x9e\xd7\x95\x89\xb7\xa7\x2e\x54\xe0\x2a\x1f\x06\xa1\xf1\x72\xa5\x71\xe8\x93\xf8\xfc\xb3\x49\x55\x46\xf6\xca\x84\x8f\x1f\xc6\x10\xa1\xc7\x6f\xe8\xc8\x50\xe7\x84\x1c\xa0\x09\xcd\xfc\x4d\xea\xde\x9f\xee\x45\x21\x32\xc4\x6c\x54\x24\xfc\x9a\x7d\x66\x5e\x19\x24\xa2\x93\x26\x40\x12\x63\x9e\x0b\xac\x24\x11\x28\x9e\xc1\xb7\x49\x7e\xea\x4f\x0d\x30\xf6\x91\x69\x79\x3d\x8e\xf0\x25\x8c\xfe\x75\xee\xf6\xa3\x9d\x07\xd0\x32\x13\xc0\xc1\x27\x40\x82\x2b\xdb\xa3\x17\x27\xe7\xdf\x3d\xf1\x6a\xec\x9c\x7a\xa6\x47\x7f\x74\xdc\x9e\x5d\x26\xe5\x32\x3f\xe6\x74\x8e\x77\x17\x9d\xe6\x03\x22\x2e\x88\x83\x4f\x80\xb6\x9c\x02\xbe\xdf\x44\x77\x88\x70\xbe\x54\x12\xbd\xb0\xc4\xdc\x8a\xdd\x15\xa6\x51\x97\x56\x18\xfc\x68\xa1\x46\x9b\x7a\xb3\x13\x4a\x6c\x02\x71\xf0\x09\xd0\x2b\x2d\xea\x6a\x36\x87\x99\xef\xe8\xa0\x9a\x24\x46\x57\xa4\x4e\x8b\x70\x52\x9b\xd5\x4e\x5c\xea\x65\x97\x7b\x2d\x66\x65\x23\x50\x89\x28\x10\xe7\x2f\x83\x82\xff\x6f\x5c\xc5\xa0\x0a\xa6\xd4\xfc\x3a\xc7\x01\xa9\x35\x95\x75\xa3\xc0\x32\xc7\xfb\x8b\x43\xb5\x37\xba\xb6\x31\x89\x29\xbf\xca\xd4\x92\x69\x23\xbc\x32\x88\x83\x52\x95\x4f\xe5\x95\x41\xef\xf5\x49\x4a\xb8\xc1\x9d\x80\xd6\x12\xe5\x92\xd3\x47\xe0\xe7\x4a\xfd\xf4\xe8\xc7\xf0\xb8\xeb\x5b\x2c\xce\x6b\xc6\x69\x17\xf6\xe5\x29\x71\x24\x84\xa1\x92\x4b\x00\x0e\xae\x84\x61\x59\xc2\xb4\x20\x17\xc1\x9e\x24\xe6\xa2\xbe\x3d\xec\x47\x55\x97\xf9\x2f\x12\xec\xc6\x37\xf0\xd6\xdc\x55\xfd\xda\x81\x72\x09\x2a\xae\x02\xe2\xe0\x4a\x50\xde\x74\xb2\xd1\xe2\x58\xdf\xf0\x18\xbf\x9e\xee\xfd\x44\xf0\xe7\xfb\x8b\xc1\xdb\x39\xc6\x87\x6c\xdf\x88\x37\x02\x3f\xf9\x19\x51\x21\xe2\x82\x38\xb8\x12\x7a\xe8\xf9\x33\xf6\xb0\x7e\x29\x97\x29\xe7\xb3\xfd\x74\x8a\xc0\xdc\x36\xf0\x29\xd5\x42\x23\x78\xb2\x5b\xe5\xba\x15\x70\x9f\x15\x3a\x68\x01\xe2\xe0\x4a\x28\x61\xdb\xd8\x48\x8d\x4c\xd1\x25\xad\xd4\x34\x30\x57\x4b\x15\xf6\x7e\x8f\xce\xca\x19\xe2\xa0\x72\x69\xb2\xc6\x63\x21\x37\x48\x0b\xb1\x14\x02\x71\x50\x56\xe2\xe9\xbc\x32\x68\xac\x3d\x49\x0a\x98\xd6\xb5\xcf\x2e\x8f\xea\x61\xc9\xbc\x9c\x73\x17\xfb\x59\x13\x51\x40\xd4\x10\x62\xc9\xa3\x7e\xd5\xf4\x42\xa1\x35\x01\xcf\xd7\x36\x44\x17\x80\x38\xb8\x14\x36\x69\x87\x94\xdb\x43\xb4\x7d\xcd\x26\x14\xf5\x93\x31\x06\x6b\xdc\x7a\xc9\xbd\x6e\xfc\x9d\xfa\x11\x44\x1b\x43\xdd\x27\x96\x02\x9d\xc0\x06\x71\x70\x29\x38\x0f\xfb\x5e\x1d\x8f\x79\xa9\x18\xdd\x1e\x5a\xc8\x15\x99\xb2\xba\x9a\xf5\xfc\xc6\x37\xed\x08\x3a\xad\xc9\x58\x05\xa1\xc2\x84\x05\xe8\x98\x30\x80\x83\x4b\x21\x70\x39\xee\x5e\xc8\xd3\xc0\xce\xc7\x49\x36\x53\xe7\xda\x29\x96\x1e\x11\xec\xcb\x3f\xfd\xd6\xf0\xd2\x69\x3f\xce\x92\x3e\xfb\x2a\x3b\x22\x2e\x88\x83\x4b\x41\x90\x76\xca\xdf\x36\x85\x7d\xa4\xf0\xbd\xc5\xb1\xa6\x4d\x54\xd4\x2b\xac\xed\x2f\x78\x97\xd9\x8d\xca\x9a\x2d\x8f\x63\xa2\x72\x63\x11\x52\x00\x71\x50\x56\xe2\xe9\xbc\x32\x68\xfe\x3b\x49\x0a\x4d\x24\x15\xc2\x4d\xac\xc4\x82\xb4\xc7\xa5\xe3\x5f\xf4\xc4\x57\x47\xae\xba\x71\x06\x13\x1d\xb2\xb4\xe6\xab\x4b\x53\x6c\x2a\x8a\x23\xba\x00\xc4\xc1\xa5\x60\x90\x28\x2c\xef\x7b\x2d\x7b\x20\x89\xd7\xbe\x35\xe6\x8b\x4a\x4a\xf9\xf2\x11\xb7\xc0\x66\x78\xc6\xba\xe1\x23\x96\x0a\xdc\x71\xe8\xba\x6a\x10\x07\x97\xc2\xdf\x98\xb0\x9a\xa5\x5c\x6a\xd5\x85\xc0\xdd\xfa\xc8\x23\x7b\xeb\x1d\x14\xaa\x69\x62\x31\xce\xae\xbf\x77\xae\x7e\xc6\x7c\x52\xcb\x88\x88\x0b\xe2\xe0\x52\x60\xe1\xe0\xa6\x2e\xb5\x1b\xbf\x16\x84\x67\xe8\xd4\x9d\x5b\x6f\xe5\x41\x62\x41\xf8\xcb\xc8\xeb\xed\x88\xb8\xa3\x9f\xd0\x91\x42\x27\x22\x2e\x88\x83\x4b\xe1\x5b\x53\x8b\x1d\xea\xab\xe4\x3d\xcf\xcf\x8c\xbf\x2b\xdb\x67\x1a\xab\x84\x69\x3e\x14\xe2\xa3\x1c\xcf\xab\x68\x19\x92\xec\x37\x67\x20\xa4\x00\xe2\xa0\x51\xe1\x74\x5e\x19\xb4\x26\x39\x49\x0a\xd7\xd8\xeb\x9b\x73\xd8\x3d\xd1\x2d\xfb\x9d\x71\xb6\x88\x30\x6c\x52\x35\xbe\xb2\x4a\x3a\xe8\xb5\xef\xb7\xe2\xdf\x64\xef\x8f\xdc\x81\x4a\x80\x03\x38\xb8\x14\x1e\x45\x09\xbe\x3f\xfe\x72\xff\xcb\xa3\xd0\xeb\x5a\xfa\xc2\x8c\xf8\xda\x56\x36\xf9\x3e\x4e\xa6\x5e\xc9\x93\x52\x4e\x1b\xdf\x73\xa1\xbb\x8f\x41\x1c\x5c\x0a\x5c\x38\xe5\x31\xeb\x86\x97\x5e\xbf\xf0\xd3\x97\x1c\x13\x67\x50\xa2\x1c\x37\xf5\x6e\xfd\x9b\x64\x9c\xa0\x97\x4d\xad\xf9\x37\x17\x4a\x1e\x00\x71\x70\x29\x28\xea\x13\x6d\x38\xf2\xdd\x6f\xcf\x50\xaa\xd0\x1b\x0f\x2b\x88\xf9\xc0\xff\x70\xb0\xe4\xa1\xc3\xf8\xe0\xb5\xb5\xa8\xf4\x0a\x2d\x68\x09\x02\xe2\xe0\x52\x40\x4b\x6f\xbd\x47\xab\x8a\xff\x0d\xd3\x8c\x0d\x85\xec\xf1\xb7\x78\x85\x70\xbb\x17\xaa\x9d\x7f\xd9\xfb\x18\xe3\xe3\x9b\xd9\x3c\xb3\x11\x52\x00\x71\xd0\xa8\x70\x3a\xaf\x0c\xf2\x59\x27\x7b\xe5\x97\x75\x79\x1e\x8d\x26\x2f\xb0\xf6\x76\x4d\x84\xe4\x85\xd0\xf2\x29\xc8\xb5\x2c\x7a\x1b\x0e\xa5\x93\x12\xe6\xe4\xd8\x5f\x57\x3e\x46\xf8\x4e\x10\x87\xec\x95\x95\x9e\x44\xd5\xfd\x09\x25\xcc\xea\xb0\xbf\x41\x97\xfd\x7d\xc1\x21\xb2\xf1\x5d\x41\xd2\x41\xe3\x25\x9e\x02\xa2\xf2\x7b\xcb\x61\x21\x88\xc8\x20\x0e\xd9\x2b\x17\xf9\x4c\xbd\xce\x7e\x65\x21\xba\x22\xfa\x57\x26\x70\xb0\x32\x5c\x2b\x25\xbf\x85\xc1\x8f\x9e\x8f\x2e\x36\xd4\x2f\xe8\xd5\x94\x03\x22\x32\x88\xf3\x97\xfb\xbf\x9e\xfc\x37\xf2\xa9\xef\x54\x56\x3f\x9c\x43\x41\x91\xd7\x20\x1c\x44\xe5\xcf\xb6\x77\xb1\xff\x72\x2e\xea\x3d\x1d\x15\xd3\xbb\x45\x32\xd3\x08\xd4\xe0\xec\x36\xed\x7f\xbd\xb2\x21\x39\x7a\x5f\x4e\x92\xcd\xce\x52\x11\xd6\xef\xd1\x3f\x1c\xc4\xbc\x77\xfa\x86\x59\xd9\x7f\x16\x9a\x59\x7e\x2c\x69\xb7\x4f\xfb\xfa\xaf\x47\x65\xa0\xb6\x36\x16\x8d\x70\xef\xcb\x58\xa3\x2d\xdf\xda\x1a\x27\x54\x78\x38\x2a\x51\xc5\x13\x4e\xfa\x0b\xb5\x82\xf0\xe0\xd7\xce\xff\x9a\x57\x06\x35\xed\xdf\x5c\x65\x79\xb8\x9f\x52\x8c\xcb\x96\x35\x79\xfd\xd5\xd5\x3a\x66\x8a\x9b\xea\x2b\x7e\x36\xc7\x88\x10\x41\xf9\x5c\xe5\xb7\xce\x5a\x71\xd9\x47\xf2\x28\x26\x67\xb2\xe5\x89\xec\x95\x9d\x88\x30\x58\x75\x2f\x1a\x88\x46\x2b\x88\x13\x08\x6a\x37\x65\x51\xe2\xbc\xdb\xb2\x66\xff\xa3\xf7\x8b\xee\xb3\xb7\xb1\x9a\xb0\xc3\x99\x6c\xf0\x8a\x21\xfd\x2c\x35\x43\xd8\x6f\x46\x94\x23\x8c\xae\xe5\x84\x2f\x1f\x09\x1c\xaa\x9c\x45\xa9\x7d\x02\xac\x25\xf1\xac\xf3\xc5\x47\x5d\xaf\x7b\x84\x9e\x49\x6b\x91\xbd\x72\x83\xb1\xfb\x9f\x94\x37\x4d\x41\xa5\x11\x77\xa5\x53\x78\x3c\xb1\xfb\xcc\x2f\x34\x0b\x29\xbd\xe2\x18\x92\x96\x7b\xf7\xf9\x12\x81\xf0\x99\xb4\xd6\x11\xe9\x67\x6b\x58\x31\x50\x2c\x89\x45\x82\x63\x0a\x31\x5e\x77\x31\x89\x3f\xe9\x98\x79\xcc\xf6\xb7\xa2\x73\xba\x4b\x38\xa5\x46\xaf\x6e\xf5\x0c\xca\x7d\x1b\x9e\x4e\x44\x27\x4d\x80\x71\xcd\x05\xab\xbf\x9f\x1f\x3b\xf4\xcc\x63\xbf\xff\x23\x85\x55\x45\xff\x72\xf9\x6b\x81\x69\x6b\x4b\x6b\x23\xb3\x4e\x36\xf5\x9b\x97\x88\x81\x1f\xc4\xc1\x27\xc0\xca\x82\x25\xad\x0d\x5d\xba\x23\xd6\xab\xbd\xb9\x3f\x08\x0a\xed\x79\xeb\x69\x7c\xd4\x4b\x30\x79\x0d\x15\xef\x76\xee\x06\x97\x9b\x20\xe2\x82\x38\xf8\x04\x48\xe3\x55\x1c\xed\xf5\xa2\xbe\x81\x55\x72\xa3\x61\xc3\xfe\xda\xd5\xfe\xe2\xc2\x7a\x36\x6a\xd9\x8f\x07\x26\x71\x85\x54\x4a\xe1\x2d\xd0\xfe\x2f\x80\x43\x5a\x63\xb1\x08\x05\x54\x1e\x0e\x7d\x22\xba\x8b\xba\x2b\xd2\xc3\xc9\x1b\xcf\x1e\x25\x59\xfe\xe6\xf6\xd7\xb7\x13\xa1\x1d\x02\x2c\x23\x50\xb1\x0e\x10\xe7\x2f\x83\xfa\xdf\x23\xee\xb2\x6c\x04\xd2\x17\x65\x5f\xcd\x39\x98\xb6\x88\x25\x1b\x5f\xc3\x35\x63\xf3\x21\x1e\x69\xba\xe5\xfe\x58\x75\x65\xdb\x6f\xbb\x0c\xe1\x95\x41\x1c\x94\xac\x2c\x7f\x9a\xa5\x10\xe8\xbd\x3e\x49\x09\x57\x3e\x08\xf6\x36\xce\xa8\x3c\xbb\x91\x6f\x9a\x2c\x10\xb7\x96\xfc\x7e\xcb\x39\xbb\xdd\xb9\x92\x23\x5e\xb6\x1d\x15\xfb\x6f\x86\x0c\xa2\x07\x40\x1c\x5c\x09\x7c\x65\x71\x28\xed\x72\x02\xde\x37\xa9\x55\x8e\xf9\x19\x57\xba\x88\x46\x88\x6e\x85\x3e\x10\xff\xeb\x29\x1f\xa5\xc3\x13\x47\x09\x9d\x8a\x04\x71\xf0\x27\xf6\xca\xaa\xd2\xec\x3b\x2e\xed\xc8\xf9\xa1\x7d\x36\x4e\x59\xcf\xf7\x44\x9f\x0b\x9d\x0e\xdb\xd3\xbd\x0e\xbf\x93\x6a\xbc\x4b\xc4\x09\x44\xc4\x05\x71\xf0\xb8\x21\x49\x25\xec\x4a\x5c\x3f\xee\xbd\xbf\x7f\x7f\x29\x5b\x7f\x3e\xb8\x5e\xba\xe6\x33\x67\x8d\xc3\x3a\x77\xd2\x50\x75\xac\x5e\xbc\x18\x22\x2e\x88\x83\x2b\x01\x55\x95\xb6\xd3\xa0\x5d\x66\xb2\x7a\xa8\x29\x8b\x77\x13\xef\x5b\x6d\x6e\xd0\xcd\x86\x23\x89\x67\x3e\xe2\x97\x42\x75\x6d\xc3\xa0\xab\x74\x41\x1c\x94\x97\x78\x3a\xaf\x0c\x1a\x6b\x4f\x92\x02\xa5\x61\x57\xf4\x3a\x65\xa8\x55\xc8\x43\x57\x5a\x07\x96\x73\x0f\x3c\x7b\x71\x27\xd7\x7d\x6f\xa1\x1a\xab\x0c\x0e\xa8\x3c\x74\x86\x6a\x96\x83\x38\x24\x29\x84\x3e\x32\x59\x49\x63\x33\x9f\xa4\xf6\x5c\xb5\x4e\x7f\x9a\x7f\x50\x45\xef\x3d\x29\xfd\xe9\x25\xc6\xea\x5b\x55\x1a\xb3\x43\x68\xb0\x01\x71\x48\x83\x42\xb2\xad\x4d\xe3\xeb\x19\x9e\x5b\x85\x22\xdd\x05\x2f\x65\x04\x6a\x9d\x59\xc7\x15\x0d\x6a\xd6\xe2\xf2\x6e\xbf\xa9\x52\xe2\x87\x56\xaf\x20\x0e\x1e\xb7\x83\xb4\x75\x61\x13\x77\x3c\xb3\x2a\xad\x2f\x13\xbb\xf9\xcf\x6d\x97\xf0\xdd\xf0\x84\xd1\x67\x54\x35\x13\x1e\x1d\x2f\x0c\xa6\x7f\x40\x75\xbd\x00\x1c\x5c\x0a\xc9\xd6\x7f\x71\xa6\xaf\xcf\x5a\xac\x5d\x08\xbb\x61\x49\x8f\x33\x6f\xc7\xe8\xde\x7f\x68\x13\xde\x2c\xef\x8c\x75\x20\xb6\xb1\x88\x81\x90\x02\x88\x83\xf2\x12\xc5\x4e\x25\x05\xd0\xfc\x77\x92\x14\xba\x1f\x0b\xb7\x52\xe5\xda\xa2\xf6\xb0\x87\x2b\x2c\xea\x6a\xd7\xd6\x46\x8d\xb2\x54\x55\xd5\xbb\x7e\x10\xc7\xa6\x51\x2d\x4a\x8f\x40\x74\x01\x88\x83\x4b\x81\xea\x4e\x42\x33\xd3\x2d\x82\x9b\xb9\x17\x07\x12\x35\x35\x0c\xea\x96\x2b\x9e\xfc\x6e\x31\x53\x91\xdf\xbb\xb3\xe2\xb7\xb4\x16\x9d\x8f\x88\x0b\xe2\xe0\x8f\x8c\x78\xfd\x7c\x9d\x91\x25\xbb\xb5\xf3\x4e\x05\xb1\x9e\x4c\x1b\xf7\x9e\x12\x7d\xe3\x96\xed\xdc\x3b\x49\xda\x6e\x91\x3a\xb3\x94\x41\x44\x5c\x10\x87\x94\x05\xfd\xe3\xbe\x9f\x5a\x8c\x74\xfa\x14\x5f\x1c\xe9\x1c\x26\xfb\xdc\x0f\x05\x46\x89\xdd\x11\x3e\x1b\x8d\x97\xb2\x4e\xa2\x4e\x2b\x50\xd9\x47\x10\x07\x97\x42\x9e\xa9\x1d\xbe\xc7\xad\xee\x55\x92\xee\x83\x86\xdb\x0f\x2c\x1c\x7e\x70\x2d\x7e\x65\xd4\xbc\x89\xc2\xf5\x87\xd5\xbb\xbc\x38\x3a\x00\x21\x05\x10\x07\x8d\x0a\xa7\xf3\xca\xa0\x35\xc9\x49\x52\x18\xeb\x52\xba\x68\xbe\xc5\x35\x9b\xd3\x2b\x89\x4e\xcc\xe4\xd8\x16\x5a\xe7\x63\x96\xff\x41\x6f\xf5\x45\xb3\xcd\xcf\x37\xbf\x8f\xa1\xba\x5e\x20\x0e\x2e\x05\x77\xad\xf0\x37\x47\xf8\x76\x36\xd5\x65\xb6\x65\x2f\x1e\xb8\xb7\xe0\x63\x9f\xbb\xf2\xde\xb8\x5b\xd9\x5d\x99\xdc\xad\x30\xcc\x16\xf2\xca\x20\x0e\xfe\xc8\x4a\xa6\x02\xa3\x5e\x28\xdc\x33\xcd\x51\x26\xae\x7e\x40\x91\x27\x22\x11\x24\xf7\x91\x68\x0d\xf3\x68\xec\xce\xb7\x7e\x3b\x51\x3e\xe8\xf3\x06\x88\x83\xc7\xbd\x2a\x9b\x56\xaf\x4f\xf9\x6e\x9a\x26\x4a\xe0\x7d\x69\xf0\x87\xbb\x75\x31\x9f\xcc\xb3\x17\x46\xf7\x13\x38\x1e\xca\xe2\xad\x5f\x74\x43\xc4\x05\x71\x70\x29\x60\x24\x33\xe0\x3b\xa0\x58\x31\x14\x49\x3e\xc9\xf8\xf2\x2a\xd8\x9c\x51\x97\x4a\x20\xc2\xbd\x9d\x31\x8d\xdb\x54\x88\xed\x82\x90\x10\x42\x0a\x20\x0e\x1a\x15\x1c\x4f\xb7\xaf\x0c\xf0\x59\x27\x7b\x65\x16\x95\xe6\x95\x29\x9b\x1f\x1c\x04\x8e\xf7\x24\x65\xfc\x3f\xb8\x1d\x5e\x52\x26\x14\x99\xa4\xa9\x67\xf9\xed\xf1\x27\xc6\xe1\x05\xb4\x47\x0b\xe2\x90\xbd\xb2\x56\xa0\x33\x66\x2c\x71\x93\xeb\x0d\x91\x79\x57\xe6\xd5\xb7\xb2\xfa\x78\xf8\x9b\x45\x0c\x62\xf9\xca\xb5\x0e\x61\x4f\x47\x48\x24\x11\x91\x41\x1c\xb2\x57\xa6\x65\xf3\x0c\xa9\x26\xbd\xf2\x00\x0b\x87\x1d\x97\xe0\x38\xdd\x7f\x02\xd3\x64\x8b\xcf\xa4\x4f\x68\x9b\x33\xb3\x43\x49\x6e\x08\x3a\x83\x0d\xe2\xfc\xe5\x50\x50\xfe\xfb\xe8\x4e\x7d\xab\xf2\xb4\xf8\x5b\xb1\x4a\xa5\xe5\x08\x57\x1b\xe6\x4d\x47\x6e\x01\xe1\x32\x2c\xf3\x8d\xd9\xc8\x2f\xe4\x44\xb6\xae\x99\x8a\xa8\xeb\xe7\xff\xb5\x3e\x6d\xcf\x84\x0d\x0f\xef\x5c\x5d\x08\x8a\xba\xe4\xfa\x70\x52\x0e\x3f\x4c\x49\x6e\xf3\x6e\xbf\x27\x2f\xc7\x07\xa6\x82\x5a\xcd\x12\xd4\x7f\xd0\xda\xc2\xe7\xb3\xd4\xcc\x79\x8c\xd7\x7b\x87\xab\x3c\x13\x3b\xca\x27\xcd\x88\xac\x78\xbe\x50\xd7\xfd\xd5\xbf\xc3\xa1\xf6\xfb\x5e\xeb\xff\x9a\x57\x06\x35\xed\xdf\x6c\x65\x24\xaf\xbc\x27\xa2\xed\x88\x97\x99\x93\xea\x6a\x2e\x92\x3e\xdf\x42\xe4\x4e\x79\x5f\x6e\x57\xf0\x90\x47\xdc\xd3\x0d\x3b\x24\x95\xa0\xe7\xca\x99\x6c\x79\x22\x7b\xe5\x17\xc5\x9b\x38\x17\xc4\x2c\x75\x7d\xa4\xe8\xfd\x76\x96\xd4\x1c\xaa\x63\x6f\xc7\x5a\xe7\x8c\xd1\x55\xf5\x3e\x79\xee\xbd\x5d\x12\x76\x26\x1b\xbc\xc8\x5e\xb9\x3c\x8a\x6d\xa0\xe2\xed\xc3\xab\x9a\x94\x5e\xa1\x66\x6a\xa8\x06\xcb\x97\xca\x2f\xd1\xa6\x94\xa3\xe5\xea\xdc\xae\x7d\x81\x6d\x72\x26\xa6\xb5\x19\xd9\x2b\x37\xc5\x8b\x79\xd0\xdf\x75\x60\x8c\xfa\x41\x26\xad\xd2\x2d\x7d\x5c\x28\xff\xd6\x76\x49\xe9\x55\x25\xc1\x6b\xab\x97\xd2\x52\xac\xcf\xcf\xa4\xb5\xc8\x5e\xb9\xb3\xfb\xca\xa3\x96\x6d\xdd\x49\xca\x0d\xa5\xec\x57\x38\xce\xc6\x29\xbf\xcd\xaf\x46\x71\xe2\x25\xff\x90\x3b\xc4\x70\x32\x41\x5f\x39\x33\xaf\x0c\x12\xd1\x49\x13\xa0\x9e\xab\x06\x7f\x98\xea\xf8\x68\xbc\xc1\xe6\x68\x57\xfa\x7d\x12\xd5\x6b\x43\x69\xf6\x4a\x58\xe7\xa5\xaf\x0c\x0d\x69\xc4\xbc\x84\xb6\x7a\x40\x1c\xd2\xbe\x32\xeb\x25\x85\xa7\x21\xf9\xd2\xc6\xe9\xd7\xbe\x2c\x3e\x66\xa2\x33\xc4\xfe\x68\xe0\xc9\xf4\x76\x48\xb4\x4c\x9f\x66\x28\x7f\xff\x1d\xb4\xaf\x0c\xe0\xe0\x13\x55\x76\x84\xd4\x97\x98\xfc\x2a\x1a\x79\xe1\x18\xae\xfd\x1e\xaa\x26\x03\xb2\x49\xbf\x07\xc6\x4e\x09\x0d\x4b\x62\x7c\xc9\xde\x96\x61\x88\xb8\x20\x0e\x1e\x77\x7a\xa0\x4b\x29\x03\x45\xa3\xa9\xa8\xe1\x1c\x07\x9e\xa5\xcb\x72\xa6\x54\x01\x61\x90\x34\x9b\xde\x5e\xdf\x15\xf6\x9b\x63\x25\x8b\x88\xb8\x20\xce\x5f\x06\xff\x3f\xfd\x70\x55\x1e\x9f\x5c\x67\x5f\xc6\x0c\xef\x56\xdf\x9a\x3a\xd9\x84\xc6\x9b\x65\x54\x1f\xef\xd7\x95\x83\xae\x79\xf6\xed\xfd\x77\x25\xa5\xa0\xcb\xa2\x00\x1c\x94\xae\x7c\x2a\xaf\x0c\x7a\xaf\x4f\x52\x82\x99\x74\xdf\x75\x2c\x42\xea\x67\xc5\xac\x7f\xfc\xf8\x98\x50\x2f\x14\xdd\xc6\x7a\x48\x75\x5f\xfd\xc5\x26\x16\x0a\x8f\x8e\x0a\x1e\x64\x64\x40\x1c\x5c\x09\x52\x94\xf6\xfb\xd8\xc2\x93\xf7\x69\xa5\xdc\xd1\x17\x0c\x59\x8e\x7b\xb8\x53\xe3\x22\xca\x35\xb7\x4c\x3c\x77\x35\x73\xa8\x35\x46\xa1\x53\xf3\x00\x0e\xfe\xc4\x84\xd7\x2e\xcd\x15\x0f\x3c\x3e\x97\xd5\xd4\xd1\x9f\xd3\x32\x38\xed\x72\xfe\xd2\xcd\x49\xd5\xfa\x9c\x5a\xd1\x61\x95\x15\xdb\xcb\xd0\x3d\x36\x20\x0e\x1e\x57\x4b\x86\x6e\x19\xe7\xd3\x5c\x07\x89\x1b\x8a\xea\xd0\x66\x72\x77\x51\xb0\xd3\x27\x93\x4b\xdc\x7b\x62\x41\xab\xdc\x32\x8a\x94\xd0\x41\x61\x10\x07\x57\x42\xd6\xeb\x0a\x0d\x95\xa8\xd6\x49\x0e\xba\x1d\x52\x89\x88\xf0\x88\x0c\x19\xeb\xba\x42\x55\x81\xf9\xf3\x17\x07\x4c\xed\xc6\x2e\x40\x57\x04\x81\x38\x28\x33\xf1\x74\x5e\x19\x34\xd6\x9e\x98\x99\xd8\x9b\xe4\xa7\x84\x29\xd7\xe2\xee\x6e\xf1\xa0\xd0\xf8\x4a\x55\xb7\x3e\x57\xa6\x4c\xea\x44\x08\x25\xb7\x59\x78\xc4\xca\x06\x54\x0d\x1d\xc4\xc1\xa5\xe0\x43\xcd\xa7\xe1\x75\x2d\x9e\xfe\x06\xeb\x43\x91\x75\x42\xca\x94\x20\x7b\x69\xeb\xf4\x5f\x25\xfb\x39\x4a\x45\x22\x6f\x2b\xe9\xa0\xfb\x66\x40\x1c\xfc\x91\x29\xb8\x8b\xb2\x57\x5c\x7e\xbf\x17\x59\xa7\xf5\x6d\x33\x75\x77\xc7\xcb\x4d\x2b\x55\xb5\xec\x90\xfb\xbd\xdd\x26\xbe\x66\xdc\x24\x94\x40\x01\xe2\xe0\x71\x77\xe3\xa3\x4c\xff\x4a\x91\xdf\x95\xd9\xf0\xad\x43\xe3\x32\xd4\x5f\x4d\xfc\x91\x95\x7a\xef\x3b\xef\xa8\x69\x31\xf5\x96\x5f\x16\xf4\xd9\x04\xc4\xc1\xa5\x90\xb6\x8a\x3f\xc6\x31\x99\x84\xf7\xe3\x59\xee\x11\x9f\x47\x80\x48\xe7\x30\x99\xe8\xa0\x94\x1f\x0e\x8f\x9d\xa0\x40\x29\x8b\xb6\x18\x42\x0a\x20\x0e\xca\x4c\x3c\x9d\x57\x06\xcd\x7f\x27\x49\x81\xe7\x8d\x96\x64\x11\x5f\xb9\xca\x57\x39\xc6\x81\x65\x4d\xd9\x32\x55\x5b\x2e\x96\x56\x7f\x85\x75\xdf\xd7\x9f\x93\x07\x56\xf3\xbb\x11\x5d\x00\xe2\xe0\x52\x78\xb7\x57\xad\xe5\xaf\xa3\x9c\x96\xfb\x66\xa6\x9c\x5c\x2a\x7e\xea\x7b\x9d\xd8\xaf\xa0\x95\x6d\xd5\x9b\xdc\x8b\xef\xaa\x3f\xb5\xe4\x40\x19\x14\x00\x0e\xfe\xc8\x02\x76\xac\x5f\xa0\x0b\xe1\xd5\xb2\x68\xdd\x0b\xfe\xb4\xf4\x8b\xb3\x38\xe7\x20\x82\xb8\xfa\xca\x57\x1f\x55\xb9\x46\x5e\x53\x1d\x35\x44\x5c\x10\x07\x8f\x1b\xff\xc4\x55\x82\xfe\xb8\xef\x52\xb4\x34\xc1\x4e\x79\x3c\xc6\xd4\x0b\xc2\x67\xb7\xeb\x23\x4b\x49\xbf\x0d\x6b\x58\x19\x1c\xac\x41\x67\xb0\x41\x1c\x5c\x0a\xd5\xaa\xe7\xbc\x30\x8e\x23\xc5\x7d\x82\x42\xd2\x24\x78\xce\xa1\xaf\x71\x59\x05\x34\xda\x5a\xd4\x84\xdc\xdd\x37\xd3\x3b\x20\x25\x41\x48\x01\xc4\x41\xa3\xc2\xe9\xbc\x32\x68\x4d\x72\x92\x14\x62\xec\x67\x8c\x19\xb0\xc6\xfd\x8d\xca\x26\x7f\x25\x1c\x62\x2f\xb5\xd5\x37\xbc\xc6\x1e\x1d\xcb\xf9\xa9\xfc\xac\x9b\x58\xcd\xb0\x10\xd1\x05\x20\x0e\x2e\x85\xe9\x79\x35\x23\xaf\xba\x88\xfa\xe2\x2c\x32\x6c\x23\x73\x8e\xd5\xb1\xe6\xc8\xc4\x1f\x2c\xfb\x3c\x9d\xcd\xdc\x17\xb1\xd1\xb8\x7c\xa1\xa9\x17\xc0\xc1\x1f\xd9\x81\x1f\x7e\x79\x50\xfd\x50\x41\x5e\x89\x95\x59\x5d\x16\xde\x79\xea\x9a\x8e\xe9\x1b\x59\x2f\x8b\xa2\xed\x57\x18\x5e\xae\xaf\x0b\x42\x79\xd0\x00\x0e\x1e\xd7\xc1\x96\x85\xa7\x66\x4c\x84\xdc\x0d\x5b\x38\xb4\xe7\xdb\xc7\x42\x9d\x3f\x94\x4f\xd8\xb2\x30\xcd\xad\x5c\x15\x5e\x06\x75\x44\x40\x57\x6c\x83\x38\xb8\x14\xec\x46\x8a\x95\x86\x2f\x0c\x8f\x73\xb3\x0c\xef\xd8\xf9\x38\x25\xfc\xec\x6b\x7b\xdb\xf9\x7c\x25\x40\x8e\x62\x64\xff\xd7\xaf\x29\xe8\x38\x3e\x88\x83\x46\x85\xd3\x79\x65\x90\xcf\x3a\xd9\x2b\x0f\x2f\x09\xf7\xe0\x7b\xda\xa8\x7c\x2d\xbd\x73\x34\x49\xfc\x6d\xeb\x3e\xfa\xa7\x4f\x4d\x72\x66\xcb\x97\xf9\xea\xb1\xdf\x8d\x71\x4b\x41\x95\xaa\x01\x1c\xb2\x57\x5e\x18\xad\x3f\xb7\x7a\x9d\xcb\x17\x47\xd2\x45\x75\xef\x91\xdd\xbb\x02\x35\x61\x99\x1b\x23\x42\x18\x35\x01\x54\x68\x5e\xe8\x63\x3f\x10\x91\x41\x1c\xb2\x57\x66\x1a\x1d\x18\xe4\xac\xe4\x6b\x26\x51\xc8\x38\x7a\x2a\xc4\xb5\x18\xe2\x22\xbf\x1a\x98\x5f\x9b\x7c\x6f\x50\xbb\xc4\x7e\xea\x02\x94\x09\x0d\xe2\xfe\xcf\x2b\x63\xfc\xf7\x33\xc7\x69\xef\x55\xee\xb9\x9f\x59\xaf\x9c\x15\xbc\xdf\x2c\x9c\x30\x7d\xb3\x41\xf7\x30\x71\x3d\xd3\x2c\x91\x94\x69\x46\x81\xed\x23\xa7\x44\x83\x8c\xc6\xbf\x5e\x59\x64\xd1\xe8\x66\x7d\xd4\x9f\x1a\x71\x97\x20\xc9\xcf\xc4\x9b\xd7\xda\xec\xc4\xa2\xc5\x0f\xfc\x63\x4c\x7f\x54\xd5\xcb\xcf\x6a\xdd\xf9\x07\x6d\xb1\x16\x55\xe7\x09\x52\xa6\xfe\x1e\xd1\x53\x65\x2a\x1f\x6f\xa2\x7d\x59\x6d\xf4\xe1\x2e\xeb\xbd\x81\x29\x34\xd3\x6e\xdb\x8b\x94\xff\x6b\x5e\x19\xd4\xb4\x7f\xf3\x95\x91\xbc\xf2\xa6\x88\x37\xc5\x5f\x3d\x1d\xd6\x09\x85\xdd\x12\x0e\x39\x91\xd5\x83\xa8\x5e\xae\x6b\xf9\x7f\x1e\x2d\x93\xbc\xc9\x66\xb9\xd7\x62\x73\x26\x5b\x9e\x3c\x48\x36\x8e\x57\x66\xdb\x91\x50\x2e\xb7\x87\x98\x94\xc2\x2d\x5f\x8c\xf7\x92\xcf\x3b\x35\x53\x45\xf5\x8b\x87\x01\x97\x83\xaf\x3e\xff\xb6\x1c\x73\x26\x1b\xbc\xc8\x5e\xb9\xdf\xd5\x28\x21\x26\xf6\x6e\x20\xbe\xcb\x77\xb5\x25\xfd\x0d\x7d\x36\xbb\x59\x3b\x8a\x9e\x36\x49\x4a\xfa\xf2\x16\x47\x52\x77\x86\x33\x69\xad\x1e\xd2\xcf\x32\x8b\xac\xea\xcd\x07\x27\xf9\xf5\xb8\x57\xb7\x86\x13\x32\xd8\x95\xbb\x86\xff\xf6\xdb\xf6\x7d\x3f\xfa\xd1\xc9\x37\xd0\x72\xd4\xf7\x4c\x5a\x8b\xec\x95\x53\xca\xfa\x47\x30\x54\x6f\xd1\x08\xdd\x2b\x9a\x52\xb8\x3f\xb1\xcb\xd4\x6c\xf1\x31\x8c\x2a\xce\x5c\xbf\xbf\xdb\x0a\x7d\x6d\x12\xf3\xcc\xbc\x32\x48\x44\x27\x7e\x2c\x96\x31\xa0\x33\xd0\x1c\x7c\x62\xcf\xb0\x5e\xf1\x0c\x8b\xfd\x41\xa2\x47\x61\x99\x98\x37\x41\x2a\x7d\x39\x06\xa1\x01\x71\x07\x34\x51\x81\x38\xf8\x04\x88\xa5\x4b\x9f\x63\xb2\xc1\xc6\x67\xdb\x5e\xfa\x32\xf3\x27\x8b\xf7\xda\xf9\xd1\xef\x14\xd8\xf8\xab\x53\x34\x83\x64\x7f\x1f\x08\x43\x6b\x2c\x10\x07\x9f\xa8\x82\xc4\x99\x9d\xfc\x25\x9e\x34\x9f\xff\xac\x74\xe4\xbe\x7d\x8d\xba\xb5\x76\xc2\xd5\xf2\xe7\xd7\xba\x2c\x3a\xd2\xf0\x38\x81\x77\xd0\x44\x05\xe2\xe0\x71\x67\x95\xf1\x2d\xb7\xac\xbe\x30\x91\xa8\x63\xdf\x61\xae\xd4\xa0\x74\xf8\xea\x72\xe1\x01\x2a\x59\x87\xcb\xf3\x69\xee\x88\x0f\x77\xa0\xd2\x96\x20\x0e\xa9\x18\x78\x80\xee\x83\xb9\xc4\xde\x4b\x35\x56\x73\x25\x85\x9c\x3a\xe5\x1a\x59\x91\xc6\x91\xa8\xeb\x0b\x4a\xf6\xb3\xfc\x55\x66\xba\x1d\x08\xaf\x0c\xe2\xa0\x7c\xe5\x53\x79\x65\xd0\x7b\x7d\x62\x15\x9f\x16\x72\xde\xf7\x8b\xad\x19\x4c\x83\x85\x59\x03\x33\xe5\x4c\xcb\x9b\x44\x6f\x93\xf9\x48\x38\x13\x46\x89\x2d\xde\x6c\xe9\x41\x19\xe6\x20\x0e\x29\x33\xf1\xcf\x88\x95\x45\x4f\x81\x8e\x7d\xc6\x71\x2a\xc5\xac\x70\x1b\x0b\xe6\xf6\xb5\x54\x4b\xda\x0f\x28\xe9\x26\xa2\xd9\x46\xcc\x01\x50\x66\x22\x80\x83\x3f\xb1\x84\x1d\x62\xfc\x89\x2f\x92\x5d\x35\x95\x2c\xe9\xf5\x5e\xe5\x58\x3a\xd2\xe8\x3d\xfe\xec\xf3\xd9\x91\x2a\x2f\xbc\x1c\x16\x28\x0a\x10\x71\x41\x1c\x3c\x2e\xbe\x15\xe3\x79\x75\xda\x6e\xed\xcd\x64\x0b\xd4\xca\x6b\xd3\x12\x31\x12\x6b\x62\x09\x7c\x5c\xed\xfc\xee\xe4\xaf\x9f\xfa\xc6\xde\x83\x4a\x7b\x01\x38\x78\x3f\x9c\xbb\xa4\x40\x18\x48\xee\x3a\xd9\x75\x79\xbc\xba\x97\xb9\xd0\xcf\x49\x42\x86\xfe\xcb\x46\x60\x91\xac\x58\x28\x45\xe1\xda\x05\x0f\xc4\x52\x08\xc4\x41\x99\x89\x3c\xa7\x5a\x15\x83\xc6\xda\x93\xa4\x20\xf6\xb1\xf5\xd9\xf6\x18\xa7\x37\x8a\xe4\x53\xcd\xab\xf9\x0f\xe7\x17\x8e\x5e\x8f\xb0\xa9\xbe\xd9\xb1\x8f\x97\xbc\x11\x25\xa9\x5d\x8b\xe8\x02\x10\x07\xef\x02\xe9\x57\x4f\x6c\x98\x0e\x95\x6f\x37\x2b\xe6\x28\x8a\xae\x76\xda\xe2\xfe\x54\x5e\x5e\x95\x19\x2d\x8a\x48\x7a\x44\x96\x50\xfa\xf4\x2e\x22\x2e\x88\x83\x3f\xb2\x54\x46\x9b\xd5\x98\x66\x29\x71\xb4\xa1\xbf\x9a\xec\xf1\x31\x21\xe1\x1f\x07\x3f\x0b\xcd\x1d\xe5\x49\xb7\x96\x16\x53\xa2\x1e\x0c\x23\xe2\x82\x38\x78\xdc\x5b\xc2\x7f\x06\x39\xb2\xb3\x48\xe3\x1e\x9f\xe3\x29\xa2\x19\xea\xe9\x31\x7e\xc6\x62\x53\x66\x42\xf8\xe6\xcb\x14\x01\xdb\xc4\x02\x0b\x22\x2e\x88\x83\xf7\x83\x20\x83\x9e\x4d\xb7\x15\x55\x66\x72\x30\x59\x1e\x05\x75\x0d\x73\x85\x30\x06\x0f\x4b\x64\xa4\xeb\xe2\x0b\x0c\x32\xb5\x95\xfb\x85\xd0\x19\x6c\x00\x07\x65\x26\x9e\xce\x2b\x83\xe6\xbf\x93\xa4\xe0\x76\x85\x61\xad\xe0\xe9\x7a\xd5\xa3\x71\x82\x1e\xe5\xb8\xdc\x74\xcd\xd5\x03\x87\x6c\x63\xb9\x63\xc6\xbb\x7f\xdf\x65\xfe\xce\x84\x8e\xe3\x83\x38\x78\x17\x68\xec\x16\xbf\x77\x79\xe2\xb3\xe5\x93\xc4\xef\xc2\x3a\x33\xdc\x71\xfd\x73\x2d\x5f\xba\xda\x06\xfe\x5e\xfc\x77\x3a\x99\xdb\x69\x03\x88\xb8\x20\x0e\xfe\xc8\x76\x6c\x25\x5c\x86\xdf\xf2\xcf\xc6\x7c\xf3\xbe\xe3\xe1\x9b\x45\x63\xf5\xf5\x76\x6b\x92\x6d\x6f\x29\x86\xed\x5d\x14\xde\x64\xb1\x0d\x44\x5c\x10\x07\x8f\xdb\x62\xeb\x8b\x8e\x4a\xf0\xa4\xc8\x55\x54\xe6\x4d\x4f\x89\x64\x81\xd3\x92\xff\x75\xc1\xaf\x9c\xcb\xc4\xc2\xa1\x76\xe8\x3c\xa9\x13\x88\xb8\x20\x0e\xde\x0f\x2f\x06\x4a\x6d\xca\x0f\x52\x93\x0e\x67\x85\xdf\x54\xde\x7b\x8f\xf1\xc0\x4d\x80\x4b\xa9\xd5\x3e\x31\xc0\x51\xc3\x08\xe3\x9a\x52\x0b\x94\xba\x0e\xe0\xa0\x51\x41\xef\x74\x57\x87\x01\xd6\x24\x27\x49\x61\xeb\xd3\x5a\xd2\xc3\xd6\x8b\x79\xae\x24\x3f\x48\x30\x95\x7c\x78\xd0\xb9\xde\x5e\x48\x1d\x20\x7b\xd4\x57\x45\x9b\xbb\x22\xc9\x05\x7d\x2e\x00\x71\x48\x47\x0c\xb8\x71\x8b\x86\xed\x4c\x1d\x89\xea\x39\x54\xfc\x8a\x7f\xda\x5d\x0f\x53\xd6\xbe\x67\x12\xc6\x1d\xc5\xa4\x98\xfc\xeb\xc7\x39\xe8\x33\x35\x88\x43\xba\x59\x39\x40\xc9\x67\x8b\xbc\xfd\xe6\xab\xbf\x9c\x3e\xdc\x4c\xda\x63\xf3\x57\x1e\x6d\xa6\xd8\x5d\x8b\x33\x7b\xdb\xed\x51\xc0\x30\x00\x2d\x41\x40\x1c\x3c\x6e\xae\xc8\x2d\xff\x79\x2a\x16\x52\x71\xa5\xa1\x00\x95\x3f\xb8\x7a\xdd\xc6\xf5\x71\xf4\x76\xdb\xa2\xf1\x56\x52\x1b\x78\x1e\x4b\xd0\x84\x06\xe2\xe0\xfd\x30\xa0\x6e\x46\x27\x51\xcd\x81\x63\xa0\xfc\x96\x56\x87\xfe\xcf\x8d\x8c\x39\x8c\x2e\x9b\x45\x34\xdd\xea\xdf\x76\xea\x3f\x87\x79\xb6\x11\x52\x00\x71\xd0\xa8\x70\x3a\xaf\x0c\xf2\x59\x27\x7b\xe5\x80\x55\x1c\xc3\x72\xfd\xe0\x1a\xf6\xdf\xdd\x1e\x66\x8c\x69\x77\x35\xb7\xae\xb3\x34\x69\x76\xdd\x94\xb4\xd7\xe1\xf4\x8d\x3f\xbc\x89\xf0\x9d\x20\x0e\xd9\x2b\xd7\xae\xa8\xc6\x12\xeb\x26\x38\xa5\xe2\x85\xef\x9e\x3f\x10\xbb\x1f\xe4\xde\x75\xc0\x78\x77\xbe\xbb\xd4\x9b\xe0\xaf\xc7\x92\xa5\x06\x22\x32\x88\x43\xf6\xca\x34\x02\xf6\x6c\xe8\xeb\x36\x3d\x86\x12\xd5\xb4\xfe\x34\x1a\xea\x63\xaa\x91\x9c\x4c\x8a\xbd\xb8\x7c\xf3\xe8\x8f\x9c\xa8\x69\x96\x10\x91\x41\xdc\xff\x79\x65\xac\xff\x44\x3e\xf5\xcd\xca\x8b\x7b\xc2\x63\x8e\x41\x81\x54\x1f\xdc\x32\x35\xd9\x3c\xd3\x1f\x0a\x7d\xf9\xd1\xf0\x69\x93\x6a\xb9\x72\xea\xf9\x92\x82\x76\x81\xde\xbf\x5e\x39\x40\xcf\x5d\xa0\x40\xa3\x23\x6a\xd4\x2f\xee\x9d\x77\x73\xb6\xd5\x4e\x31\xe6\x4b\xac\xbb\xf6\xb9\xcf\x2b\xdf\xfa\x6d\x45\x1a\x33\xff\x83\x12\x49\x66\xcf\x29\x38\xb5\xe1\x39\x32\x27\x14\xa3\x8c\xed\xc6\xca\xf9\xfe\x9e\x28\xcf\xb6\x6a\xab\x2c\xf7\xf3\xab\xa8\x5c\x0e\xfd\x5f\xf3\xca\xa0\xa6\xfd\x9b\xaf\x8c\xe4\x95\x47\x97\xfd\xb1\x9e\x7d\x93\x14\xc7\xa1\x5d\x3a\x67\x9a\xfe\x78\x25\xdd\x88\x43\x9c\xb6\xc2\x5e\xb2\xe0\x72\x0d\x93\x5b\xf5\xa5\x9b\x67\xb2\xe5\x89\xec\x95\xbb\xf3\x5f\xbd\x7a\x59\x55\xea\xdf\x40\xcd\xdb\x86\xde\x1f\xfd\x59\x32\xcf\x63\x8a\xbc\xab\xa0\xad\xac\x65\xfa\x46\x4a\xdc\xd3\x67\x67\xb2\xc1\x8b\xec\x95\x5f\x7c\x8f\x36\x52\xc9\xba\x8f\x55\xc4\xb1\x43\x52\x60\x12\x55\xd5\x1b\x44\x95\xa4\x8b\xbd\x85\x63\x93\xeb\x62\x90\x67\x7d\x5b\xee\x4c\x5a\x8b\xec\x95\x13\x28\x35\x53\x6e\x5f\x4c\xf6\xbe\x60\xd4\xff\x49\xae\x89\x46\x94\x68\xdc\xc6\xca\xe3\x87\x5c\xeb\x67\x1f\x0a\xea\xe4\xcf\x7d\xb4\x67\xd2\x5a\x64\xaf\xfc\xd9\xd0\x9d\x2a\x65\x69\xda\x71\x86\x6a\x94\xc5\xdd\xd2\xca\x8c\x53\xcd\x98\x30\x9d\xde\xce\x6c\x6b\x54\xcd\xcd\xb1\x9c\xcb\xf6\xcc\xbc\x32\x48\x44\x27\x4e\x80\xea\x04\xb5\x9f\x99\x97\x3a\xaa\xef\x95\xe8\xb1\xe1\xfe\xf2\x08\x6a\xb3\xfc\x9d\xdc\x71\xa5\x23\x47\xa3\xa0\x63\x30\xe6\x17\xe4\x90\x40\x1c\x7c\xe0\x5f\x94\xb8\x77\x58\xde\xfe\xda\x17\xeb\x71\xbb\x4e\xa4\x4b\xc8\xba\x73\x07\xed\x1d\xd6\x7e\x46\x3e\x31\x96\x1d\xab\xbe\x0c\x61\x68\x59\x0c\xe2\xe0\x13\x95\x37\xa3\xfa\x17\x97\x02\x01\xa5\x5f\xa4\xdd\xbe\x6a\xc7\xe5\x6e\x35\x7b\x31\xb8\x4b\x43\xba\xd5\xd7\xbe\x2d\x93\xfb\x14\x8c\x5f\x41\xc4\x05\x71\xf0\xb8\x8e\x97\xe4\xd6\xfc\xed\xf6\xdd\x8c\xc4\xab\xef\x67\x37\x9c\x1b\xed\xec\xb8\x32\x99\x94\x7c\x2d\x2d\x04\xbf\x3b\x2e\xce\xe8\x3a\x54\x54\x19\xc4\xf9\xcb\xa0\x60\xfd\x1b\xd7\x24\xd8\xcd\x94\xc2\xe6\xf2\xa2\x5c\x63\xd0\x78\xcd\x4c\x5f\xf6\xe5\xd5\x4c\x57\x81\x6f\x5d\x86\x7b\x9f\xd8\xa5\x3f\xe6\xb4\x3d\x46\x78\x65\x10\x07\xe5\x2b\x9f\xca\x2b\x83\xde\xeb\x93\x94\x10\xf8\x36\xf5\xad\x96\xc1\x28\xff\xa0\xed\xdb\xa5\xa9\x20\x73\xca\xeb\x17\x06\xc7\x5d\xe4\x88\xcc\x18\x2a\x54\x3f\xaa\xbe\x28\xe6\x80\x92\x33\x01\x1c\xd2\x6a\x90\xe2\x56\x06\x5a\xfa\x32\xdb\x27\xf2\xe6\xf9\x4f\xc5\x34\x7e\x9f\x75\xe8\x5c\x5f\xbe\x65\xc0\x0e\x32\x74\x7d\xe4\x5c\x35\xfb\x18\x11\x17\xc4\xc1\x9f\x18\x96\x39\x8a\x17\xb3\x54\xcf\xeb\x4e\x45\x73\xfe\x62\xb9\xe9\xcf\x2e\xe8\x16\x0c\xb2\x29\x86\x06\x37\x31\x24\x2c\x12\x34\xf3\xa0\xda\x5e\x20\x0e\xa9\x24\x8c\xd6\x6d\xeb\x38\xd5\xbb\x82\x97\x3c\x77\xba\xb0\xd9\xd9\xea\x6e\x58\xdc\x15\xd9\x8a\x1c\x9e\xea\xc8\xe8\xd8\xbb\x83\xfa\x19\xda\x57\x06\x71\x70\x25\x60\xaa\xec\x47\x7b\xa3\x59\xbf\x95\x54\x99\xd6\xb1\x3d\x52\x2c\xd9\xc7\xfa\x65\x56\x79\x39\x58\x48\xbd\xb8\xf7\x8e\x3f\xd5\xaf\x8f\x88\xa5\x10\x88\x83\x32\x13\x4f\xe7\x95\x41\x63\xed\x49\x52\xb0\xcf\x35\xb2\x5b\xf3\x78\x95\x42\x85\x6f\x63\x14\x6b\x16\xec\x51\x8d\x7a\x7f\x37\xa7\xb0\x0e\xc7\x78\x9a\x62\x89\x90\xe6\xf7\x2a\xa2\x0b\x40\x1c\x5c\x0a\x9d\x6e\xbc\xda\xd5\x57\xc9\xd4\x5b\xd8\xdf\x17\x52\xdb\x2c\x19\xad\xcd\xbe\x9a\xee\x1c\xa3\x75\xfa\x75\x85\x0e\x57\xd3\xfb\x01\xf4\x19\x02\xc4\xc1\x1f\xd9\xc2\xd2\xde\x74\x67\xa4\x5a\xfe\xfe\x3b\x85\x9d\x4d\xb2\xd0\xe8\x09\xdd\xba\xe6\xdf\x61\xa5\xe4\xe6\xa9\xbd\x42\x2d\xee\x3c\x0e\x88\xb8\x20\x0e\x1e\xf7\x77\x79\xf0\x62\xae\xdd\xdb\x8a\x4e\xdd\x1d\x83\xe4\x40\x99\x77\x82\xf6\x79\xc5\x52\x6d\x68\xe8\xa8\x4d\xe4\x9a\xaa\x53\xb3\x50\x15\x1f\x10\x07\x97\x02\x6a\x0b\xc3\xa0\x56\x1b\x05\x69\xdc\xb9\x83\x2b\x32\xd1\xc1\xba\x06\x36\x1f\x86\x6f\x65\xec\x1c\x1d\x61\x72\xec\x9b\x32\x17\x71\x43\xc7\xf1\x01\x1c\x94\x99\x78\x3a\xaf\x0c\x9a\xff\x4e\x92\x02\xc7\x9b\x24\x81\x80\x9d\xd1\x44\x17\x9e\x7c\xf9\x8d\xe1\x89\x15\x72\x9b\xfd\xf0\xf1\x86\x32\xae\x6f\x5d\x9f\xa2\xdc\x94\x4a\xa0\xab\xf7\x41\x1c\x5c\x0a\x2d\xb8\x32\x9f\x1f\x8e\x48\x7e\xfc\xfc\xfb\xd1\x7e\xea\x1f\xbd\xd6\x10\xec\x8c\x49\xe6\xfa\xc4\xce\xcb\x2f\x4b\xf1\x96\xe8\x1e\x43\x47\x01\x40\x1c\xd2\x19\xec\x8f\xa6\xf5\xbc\x55\xd3\xd8\x2d\xca\x85\xb7\x7f\xae\xf6\x97\x29\xbd\x26\x30\xc4\x0d\xdb\xbb\x6e\x37\x55\xc0\x19\x8a\x67\x58\x0d\x9d\xc1\x06\x70\xf0\xb8\x02\x91\x82\x3d\x91\xbf\x55\x99\xdc\x99\x0c\x56\x39\xae\xa2\x1b\x68\x24\xb6\x0b\x2b\x74\xf2\x67\x14\xfd\x55\x8b\xf2\x58\xbc\xb8\x85\x88\x0b\xe2\xe0\x52\x20\xb9\x3b\xf4\xe1\xe2\x18\xce\xc6\x83\x8c\x1b\x77\x58\x4d\x50\xb3\xf5\x45\x83\x9d\x63\xf8\x5a\xb2\xd6\x4b\xfd\x6e\xac\x7c\x29\xdd\x81\x2e\xd4\x05\x70\xd0\xa8\x70\x3a\xaf\x0c\x5a\x93\x9c\x24\x85\xf5\xeb\xb7\x0c\x7c\x89\xf2\xaf\xb0\x11\x59\x5d\x9b\x4f\x60\xc7\x99\x46\x93\xb4\x48\xe6\xb5\x13\xc9\x5b\xb4\xd1\x4d\xff\x6b\x94\x00\x95\x37\x03\x70\x70\x29\xb8\x0e\x63\x56\x7b\xd5\x68\x59\x34\x60\x31\xec\xfc\x52\x2f\x62\xa6\x25\x89\x35\x29\x2a\x15\x9a\xbe\xb2\x9b\x55\xfc\x6d\x41\x1c\x3a\xd3\x0c\xe2\xe0\x8f\x0c\xd7\x48\x5f\xea\xc0\xd1\x71\x36\x42\x97\xc5\x17\x8b\x7e\xe6\x33\xfe\xae\x1b\x99\x68\x2a\xb9\xec\x58\xa6\xfb\x63\xb3\x07\x2b\x28\x88\xb8\x20\x0e\x1e\xd7\xca\x70\xe3\x1d\x6a\x43\x77\x26\xe5\x17\x8c\xc7\x31\xfc\xf2\xb9\x7e\x1f\xac\xf3\xdd\x84\x15\x8d\x43\xc8\xaf\x5f\x61\xb4\x3d\xe0\x42\xc4\x05\x71\x70\x29\x4c\x60\xb1\xb3\x8f\xfa\xcb\x84\xfc\xd8\x2d\xd8\x0e\x37\x36\xcf\x6b\x3e\x52\x36\xc3\x63\xfb\x5c\xa5\x62\x47\x26\x1b\x89\x13\x7b\x1f\x21\x05\x10\x07\x8d\x0a\xa7\xf3\xca\x20\x9f\x75\xb2\x57\x1e\x1a\xc1\x7f\xf7\x31\xa3\xfa\x0b\x8a\x9a\x03\xad\xc2\x48\xd5\xb3\x0e\xbb\xdf\x62\x61\x19\xb3\x4e\xcd\xf6\xe9\x07\x2f\x8a\x49\xcf\x23\x7c\x27\x88\x43\xf6\xca\xb2\x2a\x94\x22\x1b\xfb\xdb\x21\x84\x34\xcb\x41\xcb\xef\xa8\x51\x0e\x7a\xb9\xeb\xc3\x9b\x7c\xae\x6e\x76\x85\xe1\x5f\xbc\xfa\x9c\x1e\x11\x19\xc4\x21\x7b\xe5\x08\x1c\xe2\xf6\xe6\x72\xbb\xba\xef\x0e\xd5\x45\x6a\x69\xc5\xc3\xe3\xcb\xca\xce\x1f\xd6\x08\xdf\x11\x85\x1b\x05\xb8\x7c\x39\x2f\x8d\x88\x0c\xe2\xfe\xcf\x2b\xff\xb7\x84\xf9\xa9\xef\x56\xe6\x79\xac\x40\xa7\x68\xc7\x6f\x49\x29\xa3\x1e\xc4\x4a\xef\x5f\xa0\x29\x96\x51\xf2\xc5\xa0\x77\xb4\x22\x75\x57\x3c\xa6\xca\xf4\xc3\xbf\x5e\xf9\x2b\xf6\xad\x5f\x22\xc1\x9e\x87\x0b\x49\x0f\x50\x44\x45\x8f\x5c\x09\xb1\xbe\x32\x31\x5f\x64\xee\x09\xef\xaf\x92\xfa\xf8\xac\xa2\xfc\x1f\xd4\x4b\x81\x9d\x49\xc0\xe4\x63\x40\x12\x27\xff\x39\x95\xe1\xbc\x96\x09\x63\x8d\x6b\x93\xeb\xa1\x13\x72\x05\x03\x1a\x2f\xbe\x2d\xe9\xff\xaf\x79\x65\x50\xd3\xfe\xcd\x57\x56\x80\xfb\xa9\xec\x89\x09\x93\x74\x57\xd1\xb8\xa3\x97\xe7\x2f\x89\xdd\x4e\x6c\x13\xe2\xc1\x6b\x22\x4b\xbf\x9d\xb5\x11\x21\x37\x79\x39\x40\xad\xe8\x4c\xb6\x3c\x91\xbd\x32\x3f\x9a\x73\x58\x88\x00\x19\x5e\x58\xe4\x15\xaf\xfd\xd2\x67\x9e\x64\xf1\xc9\x1e\xd1\x47\x11\x2a\x7b\xd6\x5d\xfa\x58\x26\x17\x7f\x9d\xc9\x06\xaf\x38\xd2\xcf\x66\x0a\xdd\xc2\xd5\x14\x88\xb4\xb9\x6e\xd8\xae\x39\x7a\x25\xcf\xc3\xae\x41\xd2\xb0\xce\xa2\xa3\x61\x57\x89\xa4\x3c\x7c\xec\x2f\xcf\x99\xb4\x16\xd9\x2b\x4b\x1b\x84\xae\x89\x84\xe9\xb1\x25\xab\x77\x28\x51\x46\xaa\x70\xa5\x7d\x8e\xf0\x5b\x62\x47\x27\xce\xfa\xd6\x32\xf1\xc5\xb8\xf4\xc9\x99\xb4\xd6\x09\xf9\x0c\xb6\x71\xa7\x4e\x72\xe2\x9d\x95\x63\x96\x5a\xeb\xfc\xaa\x2f\x99\x17\x30\x27\x82\xd3\x7c\x0c\x5c\xc8\x3c\x63\xd1\x19\x43\x1c\x3e\x9e\x99\x57\x06\x89\xe8\xc4\x2b\xa3\xfc\x7f\x1c\xde\x4b\xa2\xa2\x5b\xa4\xc5\x16\xb3\x25\x8d\x52\xed\x10\x7c\x1e\xb4\x43\x3f\xf6\x52\xec\xb2\x46\xce\xe5\x06\xf4\xeb\x88\x81\x1f\xc4\xc1\x27\xc0\xa7\x09\xb1\x05\x9a\x0b\x5c\xec\x54\x5a\x8e\xc5\xcf\x9c\x9e\xbb\x56\x84\x8f\x58\x8c\xfd\x52\xc6\x31\xa2\x46\x57\x7b\x88\x63\x05\xd5\x84\x01\x71\xf0\x89\xaa\x82\x23\xdf\x99\x22\x50\x80\x55\x9e\x88\xbe\x98\x7f\x6c\x7b\xcf\xe6\x66\x88\x44\xc4\xdb\xbf\xaa\xc1\xf4\x36\xab\x6f\x02\x27\x71\x10\x71\x41\x1c\xd2\xb5\x33\x7e\x15\x77\xb0\x75\xd3\xf5\x36\xfc\xc6\x6c\xa9\xd6\x37\xe4\xf2\x44\xcb\x1e\x2a\xbe\xea\xb2\x55\xd9\xc5\x89\xa5\x7e\xce\x08\x5d\x1d\x09\xe2\xfc\x65\x50\x7c\xff\x13\x97\x68\x5f\xe9\x1e\xba\xf2\xea\xa3\x1c\x82\x82\xae\x6c\x57\xae\xa9\x64\x27\xbb\x71\x51\x6c\xbe\xc2\xae\xf7\x92\x2a\x5b\xea\x17\x10\x5e\x19\xc4\x41\xf9\xca\x0a\xa7\x59\x0a\x81\xde\xeb\x93\x94\x70\x94\x5b\xde\x12\x18\x86\x4e\x39\xaf\x4f\xdd\xe4\x4b\x49\xa4\x5e\x1f\x97\xa4\x9e\xc4\x62\x81\xda\x33\xc2\xfd\x49\xea\xbc\x17\xb4\xb4\x00\x71\x70\x25\xf8\x3b\xbb\x87\xbe\x13\xbd\x46\x1c\x5f\x2f\x9b\xaa\x63\xdc\xdd\x7b\xdf\x93\x4f\xd8\x5f\xeb\x7c\xb5\xf7\xcb\xcb\x3b\xda\x1f\x58\xa1\x12\x2b\x20\x0e\xfe\xc4\x2e\xab\x8f\xbf\xbf\x8f\xb1\x88\x37\xf0\xc1\x5b\x7a\xc5\x1a\x3d\x2f\x80\x9b\x8d\x75\xa5\x36\x84\xd4\x6e\xe5\xfa\x71\x01\xf9\x75\xa8\x92\x2e\x88\x83\xc7\x1d\x9a\x27\x73\x96\x7b\xf3\xf8\x25\xa1\x56\x2a\x3b\xe5\xe7\x41\xcc\xe7\xeb\xe4\x61\x2a\x5a\x0f\xe5\x6f\xa4\x93\x5d\xf7\x0e\xec\x82\x4a\xd8\x80\x38\xb8\x12\xde\x8e\x33\xdf\x67\xfa\xd8\xd4\x4e\x56\xb1\xf8\x97\x31\xa6\xea\x9d\xd9\xdf\x6e\xb4\xee\xdc\x72\xa2\xe7\x4a\x23\xaf\x54\x88\x85\x8c\x10\x4b\x21\x10\x07\x65\x26\x9e\xce\x2b\x83\xc6\xda\x93\xa4\xa0\xf8\xb6\x08\x3b\x74\xd9\x85\x0f\xbf\xd0\x77\x5e\xa4\x89\xbd\x29\xa6\xaa\x8b\x52\xfb\x33\x4b\xcf\x83\xae\x0a\x31\x5d\x7f\x66\x5c\xa8\x7a\x0d\x80\x83\x4b\xe1\x37\xfb\x51\xc7\xfa\x4b\x4d\x71\xd2\x5f\x09\x6e\xe1\xa5\xe4\x64\x9d\xd3\x4f\x1c\xc5\x72\xd1\x95\xe8\x2c\x4d\xb7\xbe\xc6\x4c\x43\x45\x01\x40\x1c\xfc\x91\x0d\xde\xe0\xbe\xe7\xf5\xa5\x18\x3f\xe4\xf7\x83\x52\x3b\xc9\xba\x02\x83\xdc\x59\xcb\x89\xd7\xab\xae\x37\x8d\xd6\x48\x2b\xf7\x23\xa4\x11\x71\x41\x1c\x3c\xae\xe9\xa8\x78\x20\x19\xa6\x0f\xb9\x1c\xa7\x41\xd8\x70\xc4\xdb\xeb\x76\xae\x37\x69\x7b\xee\x7b\x4e\xde\x74\xf0\xbe\xe4\x90\xa3\xab\x8b\x88\x0b\xe2\xe0\x52\xf0\xfe\x7e\xbd\x93\x44\x3e\x35\xf7\x7e\xfc\xc8\x9a\x30\x26\x4e\x30\x56\xda\x40\x18\xa7\x7f\x18\x35\x0e\x35\xe3\x88\x2d\x7f\x32\x74\xc4\x00\xc4\x41\x99\x89\xe2\xa7\x92\x02\x68\xfe\x3b\xb1\x9e\x45\x2f\x01\xfe\x6f\x62\xa7\xb2\x9a\x3e\x7e\x86\x20\x99\xc1\x80\xdd\x56\xc5\xe6\xf6\x40\xfd\x44\x89\xfb\xa3\x07\x0c\xaa\x4c\xd0\xa8\x00\xe2\xe0\x52\x58\xd1\xb7\x9e\xc6\xfa\xfa\x5c\xa0\xa8\xf6\xed\xdf\xa1\x59\xd7\x81\x3b\x8b\x7d\x31\xce\x4f\x8f\x13\x77\x42\xe4\x6a\xe9\x7d\x14\xa0\x94\x78\x10\x07\x7f\x64\x74\xaf\x0a\x9a\x0e\x30\xb6\x6c\x14\xac\x35\xe7\x2f\x1d\xa0\x1c\x3e\x98\xdf\x7b\x5b\xa2\x63\x49\xeb\x7a\x6d\xdc\xee\x4d\x9a\x1d\x19\x22\x2e\x88\x83\xc7\x55\xf1\xd2\x61\x50\x98\x69\xd5\x6a\xf3\x92\x11\x5d\xd0\xa6\x63\x32\xa2\x5f\xb4\xbb\xe6\x2e\x27\x4e\x27\x89\x25\xbb\x20\xc5\x67\x84\x88\x0b\xe2\xe0\x52\xd0\xef\x2a\xab\xf6\x68\x3f\x7f\x61\xca\xdd\x71\xfb\xc6\xa6\xc1\x75\x22\xd1\x2e\x47\xad\x07\xbf\x09\xb6\x4b\x52\x9b\xee\x1a\xd0\x25\x20\xa4\x00\xe2\xa0\x51\xe1\x74\x5e\x19\xb4\x26\x39\x49\x0a\x9f\x30\xb4\x1e\x60\x3c\x74\x18\xb7\x7f\xdf\xf1\xd4\xe0\x08\xbd\xdc\xad\x87\x5c\x5a\x6a\x49\xfa\x5e\xdb\xca\xa2\x0c\x3e\x4a\xf6\x6f\x44\x17\x80\x38\xa4\xa5\x42\x6e\x44\x62\xb1\xd5\x9e\x56\xe6\x95\xc7\xdf\x9d\x46\x56\x17\x37\xa8\xf3\xff\x28\xd8\xfc\xf2\xdd\x63\xbb\x16\x98\x7d\x89\x02\x3a\x15\x02\xe2\x90\xde\x5e\xda\x16\x6c\x3b\xca\xf3\x36\x3f\x3d\xea\x71\xef\xa5\x4b\xf1\x1e\x13\xea\x07\x8a\xdf\x65\x0b\xde\x70\x6b\x89\xee\x49\x15\x84\x3e\xd2\x82\x38\x78\x5c\x16\xd7\xbb\xc5\x93\x81\x6a\x19\x76\x39\x63\x05\x04\xb4\x04\xec\x32\xf8\xb9\x73\x94\x5c\xfc\xed\x62\x5f\x57\xa8\x70\xf8\x0d\xa0\xd2\xf0\x20\x0e\x2e\x85\x78\x41\x46\x0f\x6e\x6f\xbe\xe2\x4d\x25\x0a\x35\x17\xa1\xdf\x49\x5e\x87\xd8\x24\x5c\x6a\x3f\xdd\x19\x95\x7d\xa4\xb5\xb7\xaf\xde\x46\x48\x01\xc4\x41\xa3\x82\xd3\xa9\xbc\x32\xc8\x67\x9d\xec\x95\xdb\x75\x32\x26\x9f\x19\x51\xc9\x5e\x9e\x9e\xd3\xdf\x0e\xfd\x5a\x9f\xde\x7e\xaf\xc9\xb9\xf5\x3d\x85\x8c\x71\xd4\xc0\xf7\x88\x31\x36\x84\xef\x04\x71\xc8\x5e\x59\x8a\x7e\x71\xf4\x55\x29\x47\xc9\xc6\x42\x82\x3f\x1b\xa7\xc7\x0d\xa3\x1b\x75\x11\x97\x2f\x52\xf4\x87\x31\x25\x07\x16\x73\xf2\x30\x21\x22\x83\x38\x64\xaf\x2c\xce\xed\xc1\x92\x16\x18\x19\x30\xfc\xaa\x83\xc7\xfd\xf9\xf2\x05\x39\x3a\x91\x8f\x95\xb1\xe8\xaf\x5f\x32\xa1\xa3\xd6\x3b\x69\x3d\x41\x44\x06\x71\xff\xe7\x95\xff\x2b\xe1\x53\xdf\xae\xcc\x5b\xfc\xda\xd7\x57\x36\xf2\xb8\xe3\xae\x59\xf1\x41\x73\x6a\xc4\x05\xf1\xc9\x6b\x11\xdc\x96\x23\x06\xe3\x06\x47\xd5\xd8\x6b\x0b\xff\x7a\x65\xff\x54\x52\x8b\x5f\xe2\xa3\x8d\xd7\x96\x8f\x25\xa4\x15\x2a\x86\x67\x66\x19\xa9\x4b\x4a\x7e\x8e\x7f\x75\x26\xe0\x13\x3f\x5c\x53\xf8\x07\x0d\x47\xc7\x94\xdb\x66\xaa\x37\xd1\x73\x58\xda\x77\xfe\xe1\x6c\xe1\x33\x4b\x89\xfa\xea\x57\xf3\xef\x3f\xdd\x17\x65\xa6\x13\xef\xcb\xff\xaf\x79\x65\x50\xd3\xfe\xcd\x57\x46\xf2\xca\x99\x32\x06\x39\x2a\xee\x57\x3a\x65\x34\xe5\x2e\xd2\x04\xe1\xe9\x6f\x6b\x2c\x3e\xd0\x37\x8c\xa6\xa2\xb8\x55\x87\xce\x19\x91\xc3\x7d\x26\x5b\x9e\xc8\x5e\xd9\x9b\xdf\xaa\x89\xe6\xe7\x45\x2f\x7f\x09\xd9\xd2\xa8\xae\x17\xe3\x24\xed\x73\xa6\x4c\x75\x98\x7c\x79\x17\x5a\x76\x2d\xe6\x8f\xe6\xcf\x64\x83\x17\xd9\x2b\x3f\x27\xd4\xc8\x61\xaf\x34\xef\xfe\xda\x80\xad\xd4\xfe\xf8\x6b\x63\xf3\xa7\x0b\x8b\x42\x37\x87\xb4\xd5\xb7\xc3\xbf\xe3\x06\x76\x9c\x81\x7b\x0c\x93\x6b\x46\xf6\xca\x66\x85\x49\x42\xaf\x35\x92\xca\xde\xcc\xa8\x10\xf6\xae\x0d\xa9\x8b\x72\xdd\xd3\x5c\x75\x68\x35\x9f\xaf\x5c\xd8\x49\xb5\xe2\x3a\x9b\xd6\x22\x7b\xe5\x3d\x3a\xdb\xaa\x99\x5f\x9c\x29\x02\xa5\xca\x83\x5c\x01\xf9\x5c\x8b\xf1\x0d\x21\x47\x2e\x6b\x61\xb1\xf8\x9d\x7f\x7a\x99\x46\x0f\xce\xcc\x2b\x83\x44\x74\xd2\x04\x68\x7a\xc5\x51\xb1\x9b\x62\x68\x83\xb1\x72\xfc\xc7\x8e\x7b\x21\x0d\xc7\x78\xa7\x35\xce\x0f\x91\x68\x9c\xde\x5b\xfc\x73\xbc\x6c\x4a\xd0\x84\x02\xe0\xe0\x13\xa0\xca\x43\x43\xd2\x34\x86\xb6\x69\x56\x94\xa0\xb7\x84\xb9\xfc\x47\x17\xf2\xe6\x7d\xa5\x49\x36\xc5\xea\xa8\x88\x6e\xd6\x4e\x4a\x0c\x41\x6b\x0b\x00\x07\x9f\xa8\x8c\x50\x0b\x03\x99\x7d\x46\xf4\x35\xdd\xa5\x7d\xb4\x8c\xf5\xe7\xa6\x34\xd7\x75\x39\xac\xde\x3f\x6c\xd8\x37\xb9\xcd\xa8\x29\x82\x8d\x88\x0b\xe2\xe0\x1f\x75\x67\x0c\xa4\x68\x56\x96\x27\xf9\x79\x88\x2c\xbd\xfd\x1f\x99\x0b\x1c\x26\x3a\xb9\x7a\x31\x2e\x14\xaa\xdf\xd9\xf3\x90\x5c\xb7\x86\xce\xd8\x81\x38\x7f\x99\xff\x9e\xce\x11\xef\xbc\x64\x1e\x74\x99\x69\xe7\x65\xdf\xc4\x92\xc2\x8d\x7b\xa8\xb7\xd4\x44\x86\x69\x2f\xd0\xd2\xba\x0a\x6e\x57\x87\x0e\x5d\x17\x42\x78\x65\x10\x07\xe5\x2b\x9f\xca\x2b\x83\xde\xeb\x93\x94\xf0\x60\xee\x01\xa5\xbf\x7d\xb2\xd9\x21\x71\x20\x69\xc7\x6f\x1b\x13\x49\xb1\x8c\x8b\xea\xc2\xab\x95\xa1\x9a\x2a\x79\x21\x66\x55\xfb\x88\x1e\x00\x71\x48\xa7\x2d\x29\x6f\xdc\xb2\xe0\xb7\xb1\x95\x94\xfa\xf8\xf4\x26\x57\x3b\xaa\x3a\x4a\xbb\xc4\xe7\xe3\x3c\x33\x12\x0f\xff\x6b\xae\xbe\x6e\x7f\xa1\xd3\x96\x00\x0e\xae\x84\xee\xde\xbf\xaf\x26\xfb\x22\x18\x9e\x2b\x5e\xe7\xa3\x42\xff\x22\x7f\x14\xf9\x89\xaa\xa2\xeb\xda\x9c\xa6\x92\xfe\xf0\xee\x4f\xb5\x38\xa8\xea\x10\x80\x83\x2b\x81\x73\xf8\xc7\x4d\x96\x6d\x4a\x96\xe8\xa3\x2d\x63\x0a\xdb\xde\x60\x56\x8c\xc6\x01\x29\xd6\xb8\x47\x85\x69\x64\x04\xd6\x72\xbd\xd0\x75\x9f\x20\x0e\xae\x84\xf2\x0d\xea\xfc\x0f\x7b\xa3\x9c\x85\x2a\xce\x3b\xa4\x74\x57\xae\xbf\x91\x0a\xcd\xae\xd7\x08\x75\xc4\xbf\xf6\xca\xd9\x70\x06\xe5\x03\x62\x29\x04\xe2\xa0\xcc\xc4\xd3\x79\x65\xd0\x58\x7b\x92\x14\x32\x4b\x97\x03\xe9\x05\x63\x8f\xfc\x0b\x24\x34\x76\xd1\x5e\xac\x3f\x3f\x90\x2b\x2a\xd7\xe8\x6a\xb7\xf3\x7f\x21\x55\x5a\x6b\x09\x65\xfa\x81\x38\xa4\xd4\xf5\x4f\xc5\x9f\x58\x22\xce\x09\xa0\x88\x38\x6b\xd8\x3c\x2d\x62\x4a\xc7\x70\xa1\x4c\xc3\x68\xfc\xf6\x2b\xce\x46\x4c\xa5\xb9\x00\x7a\xc9\x40\x1c\x5c\x0a\x36\xfb\x5c\xfa\x15\xd4\x4d\xdf\xb2\xb1\x99\x6e\x5e\xaa\xcf\x9a\x11\x4c\xf7\x79\x48\x87\x6a\x9e\x27\x2a\x9b\xb2\xde\x1d\xc0\xc5\x80\x88\x0b\xe2\xe0\x52\x78\xc2\x70\x21\xf8\xe7\x80\x22\x31\x5b\xe3\x8a\xbf\x76\x35\xc6\xd8\x75\x2c\x55\xf9\x2b\x0e\x5b\x34\x64\xd5\xa8\x53\x06\x64\x0c\xd0\x51\x0b\x10\x07\x97\x42\x37\xaa\x94\xce\x01\x0d\x67\xa1\x02\x99\xed\x13\xe6\x46\xc2\xd6\x7b\xee\x5b\x32\x5d\x07\x4f\x47\x57\xc5\x72\x3d\xf9\x71\x30\xef\x20\xa4\x00\xe2\xa0\xcc\xc4\xd3\x79\x65\xd0\xfc\x77\x92\x14\x7a\x3e\xe7\xe3\x33\x25\xfd\xe9\xe2\x65\xdf\xb9\x9c\x7f\xaf\xd3\x96\x35\xe7\xeb\x6a\x95\x8c\x2c\x55\xb0\xa0\x8f\x14\x3d\x99\x6f\x0a\x54\x15\x1e\xc0\xc1\xa5\xb0\x71\xf3\x47\x0a\x7b\xad\x42\xf2\x3c\xa9\x6c\x7c\x67\xe1\x45\x92\x10\x36\x2f\x2f\x29\x51\xd7\x8f\xba\xe7\x38\x25\x3e\xdc\x7f\x09\x19\x0e\x10\x07\x97\x42\xb2\x71\x4a\x83\x98\x73\x2a\xdf\x9b\xe4\xbd\x68\xcc\xe3\xbe\x9a\xbc\x27\x85\xab\xdf\xee\x50\x3f\xd0\xe4\x0d\xf9\x62\x39\x9a\x04\xe5\xe8\x80\x38\xb8\x14\xec\x48\xe9\xd3\x05\x5c\x69\xcc\x56\x31\x9a\x47\x88\x19\x23\xec\x1f\xcb\xb4\x61\x2b\xa0\xfa\xe4\x6d\x91\x11\x49\xfe\xfe\x5b\x5a\x85\x88\x0b\xe2\xe0\x52\x48\xf4\xce\xec\xff\xd9\xf4\x7c\x41\x86\xaf\xf0\xbd\xcd\xcc\x4e\xd0\x15\x35\x0a\x06\x5a\x33\x02\xed\xe9\x85\x09\x34\xcf\x81\x22\x56\x84\x14\x40\x1c\x34\x2a\x9c\xce\x2b\x83\xd6\x24\x27\x49\x61\xf5\x5e\x24\x51\x61\xfb\xb3\x02\x74\x17\x33\xee\x0e\xcc\x2d\x63\x9c\x7b\x6c\xa1\xaf\x28\xed\x08\x3c\x55\x0e\x71\xd1\xdf\x5a\x41\x57\x45\x80\x38\xb8\x14\x3c\xf7\xd0\xb5\x9a\xec\xc4\x7d\x0e\x43\xf9\xc3\x06\xdf\x4d\xd3\x08\x91\x88\x34\xf9\xf6\x4a\x59\x73\x54\xd1\x3f\xef\xaf\xa4\x87\x0e\xf2\x80\x38\xb8\x14\xb6\x6c\x38\x04\x19\x35\xe2\x74\xd2\x39\x55\xcd\xdd\x2d\x17\x9f\xc5\x5e\xce\x4a\x20\x26\x9a\x74\x74\x08\x42\x99\x2e\x97\xf4\x81\xfe\x2f\x88\x83\x4b\xc1\xd2\xea\xe7\x42\xf6\x60\x89\x50\x2b\xaa\x9e\xaf\x4c\x12\x65\xdd\x97\x0b\x05\xd4\xfa\xbd\xc7\x85\x22\x31\x85\x05\xb3\x9e\x9a\x50\x25\x41\x10\x07\x97\x02\x4a\x08\xfb\xe0\x46\xfb\xb1\xef\x7a\x6c\xd7\x6e\xc6\x42\xfc\xd4\x8b\x2f\xa9\x7c\xa3\xfb\xe3\xca\x85\x69\xef\x95\x7a\xfb\xa6\xa0\xd4\x75\x10\x07\x8d\x0a\xa7\xf3\xca\x20\x9f\x75\xb2\x57\xa6\xcb\xe5\x96\xe1\x6e\xbc\x9d\x8d\x31\x11\x17\x53\x4c\xaa\x7d\x5d\xf2\xc9\xd3\x21\xf7\x0b\x6e\x87\x39\xdc\x12\x07\xd7\x94\x57\xa1\x0a\x5c\x20\x0e\xd9\x2b\x2f\x0f\xeb\xf5\x3d\xdd\x8e\xef\x2d\x38\x1f\xda\xb1\x7a\x99\x36\xef\x70\xc5\xbb\xdf\x53\xd4\xd8\xee\x6b\x6d\xe8\x36\x96\xce\x73\x79\x44\x64\x10\x87\xec\x95\xef\x85\xf2\xdf\xca\xb8\x3b\x1a\x6b\xea\xdc\xb8\x97\xf7\xce\x38\xfc\x15\x8a\xb8\x38\x81\x3c\x41\xb3\x39\x15\x71\xd2\xaa\xe0\x2b\x2d\x44\x64\x10\xf7\x7f\x5e\xf9\xbf\xa5\xd1\x4f\x7d\xbf\x72\x0a\xee\x27\xf3\x8f\x4a\x7e\x11\x1f\xd9\xe7\xe9\xba\x79\xd0\xf7\x9b\x12\x55\x1a\xa3\x6f\x4e\x14\x49\x68\xf0\xe0\x44\x9a\x6d\x1c\xff\xeb\x95\x29\xd2\x7c\x33\xae\xd4\x7c\x5c\x61\x16\xd9\xff\xde\xc9\xc7\xef\xcc\xb5\xe1\xa5\x3e\xde\x7f\xe3\x96\x17\xeb\x8a\xa5\xa2\xde\x77\xef\x7f\x47\xd3\xd2\x2d\x4e\x16\x77\x13\xbd\x75\xb1\xfc\xc5\xe3\x86\x3f\x98\xb9\xb9\x1c\xb6\xe7\xe6\xd7\x3e\x25\xb3\xa5\x1a\xce\x2f\x6d\x96\xfd\xaf\x79\x65\x50\xd3\xfe\xcd\x57\x46\xf2\xca\xc6\xac\x5e\xd7\x6e\x8c\x4a\x9a\x70\x66\xa3\x1b\x8b\x06\x5e\x24\xfd\x6a\x25\x16\xca\xb1\x4e\xcb\x18\xd5\x73\x93\xd9\x29\xf3\xcf\xd9\x64\xf0\xf2\x22\xd9\xb8\xcd\x6b\xd8\x83\xb4\x63\xe8\xf7\x4d\x50\x78\x14\xb9\x1f\x15\x05\xde\xf1\xad\xff\x6b\x3d\xa3\xa6\x3b\xb5\xf1\x89\xb9\x83\xd4\x76\xf2\x4c\x36\x78\x91\xbd\xb2\x03\xae\x26\xde\x8c\x62\xd3\x8d\x5f\x24\xf4\x93\xce\xf2\x96\xa5\x1f\xc3\x15\x97\xe5\xff\xc6\x68\xc8\xf0\x3a\xa6\x30\x35\x38\x59\x9d\x49\x6b\xf5\x91\x7e\xf6\x20\xe2\xee\x62\x7a\xac\xa5\xdc\x7e\x4c\x4d\xd9\x50\x5c\x94\xe2\xee\x4d\x61\x9a\x18\xea\x9f\xa9\x35\x8e\x0e\xf2\x07\x77\xc3\xd4\xcf\xa4\xb5\xc8\x5e\xd9\x13\xe5\x9a\x83\xbc\xdd\x95\x47\x5c\xd7\x5b\xb1\x87\x2b\x5b\x7f\x98\x24\x9f\x9f\xbb\xcb\x47\x62\x16\xcb\x66\x4e\x1b\xd1\xce\x71\xef\xcc\xbc\x32\x48\x44\x27\x4d\x80\x17\xf2\x0d\x22\xf0\xfb\x8b\xdf\x94\x7c\x69\xa1\x9d\x2c\xb1\xf8\x2e\xef\xe8\x53\x87\xae\x4c\x8d\x16\xb6\xc2\xd8\x1a\x42\xb5\x34\x8f\x18\xf8\x41\x1c\x7c\x02\xbc\x99\xfd\x75\xd3\xf0\xcd\xd2\x74\x62\xaa\xc7\xb0\x6d\x17\x1b\x25\x6e\x81\x67\x5a\xd1\xb8\x1c\x5d\x54\x5c\x05\x9e\x76\x31\x39\x1a\x22\x2e\x88\x83\x4f\x80\x99\x68\xfd\x97\x0c\x4c\x85\x3e\xca\x4a\x84\x96\x68\x8f\xb6\x6a\x11\x4b\x7c\x28\xac\x2c\xf4\x10\x2e\x67\xde\x2b\x11\xb1\xfa\xcd\x06\x2d\xe3\x01\x1c\x7c\x02\x1c\x7f\xd7\x72\x3c\x16\xf1\xee\x6e\xe5\xc7\x6f\xaa\xb7\x0a\x6e\x68\x4d\xf9\xf1\xb2\x33\x0d\x9b\xd0\xb5\x85\xb6\xd0\x94\xc7\x16\x38\x21\xe2\x82\x38\x7f\x19\xa9\xff\x1e\x30\x2b\x1a\xf8\xcc\x5f\x52\x20\xa8\x4c\xd6\x22\xf7\xab\xc1\x85\x30\xc3\x2c\x39\x23\x53\xea\x3a\xb3\x5a\xc7\xf3\xef\x97\xbe\xf9\x24\x23\xbc\x32\x88\x83\xf2\x95\x4f\xe5\x95\x41\xef\xf5\x49\x4a\xc8\xf9\xe6\xa1\xa5\x7c\x90\xdb\x5c\x45\x87\x5b\x88\x31\xe0\xf9\xf5\x76\xa3\x1d\xed\x4a\xe1\xcf\xf7\x07\x9a\x0f\x50\xf7\x16\x48\xd7\x11\x3d\x00\xe2\xe0\x4a\xb8\x73\x68\x33\x9d\xbc\x98\xf9\x33\x98\x97\x56\x89\xfb\xc6\x54\x3b\xae\xe8\x34\x59\x57\xb4\x1a\xcf\x75\xc3\xb6\x23\xbf\xba\x85\x28\x44\x5c\x10\x07\x57\x82\x28\xda\xcf\xbc\xdd\xc0\x03\x34\xae\xa6\xfa\x58\xd1\x50\xfd\xad\xf7\xf9\x3d\xa5\x54\xf8\xce\x95\xb8\x85\x31\xd6\x29\x26\xd7\x93\x10\x71\x41\x1c\xd2\x51\xb8\x0c\x33\xd5\xdd\xb4\x2c\x12\xad\xd5\xb6\x0c\x82\x3f\xb2\x24\x73\x5a\x85\xef\xd3\xea\xca\x5b\xbc\xd3\xee\x75\xaa\xbb\x53\xdf\x46\xc4\x05\x71\x70\x25\xa8\x5d\xe4\x8e\x94\x78\xb9\x68\x2a\x81\x9b\x53\x72\xd1\x24\x6e\x5d\x5b\xe2\xce\xa6\x46\x1d\xb9\xaf\x22\xfd\xad\xb2\x4b\xe7\xd7\x56\x11\x4b\x21\x10\x07\x65\x26\xf2\x9e\x6a\x55\x0c\x1a\x6b\x4f\x92\xc2\xeb\x6d\x69\x83\xcc\x57\xcf\x47\x1b\xbc\xd5\xf4\x95\x30\x6c\x2d\xd0\xd4\x31\xa9\xe4\x8e\xca\x25\xae\x7f\xf1\x99\xf4\x21\xfe\x1d\x82\xe8\x02\x10\x07\x97\x42\xd3\xa5\xf0\x2b\xf2\x3d\xd3\xbe\x18\x8d\x97\xff\x32\x4e\xdc\xa2\x24\xb1\x9e\xe8\xbe\xf0\xed\x7a\xcd\x8b\x70\xbd\x0e\x0a\x9d\x7b\xd0\x01\x59\x10\x07\x97\x82\x2a\x1f\x9d\x3d\xee\x26\x65\x1c\xaa\xc2\x33\x71\xb4\x63\x67\x7b\x54\xd7\xdc\x73\xd3\xf1\xdb\x92\x74\xe7\x2f\x85\x3e\x23\x1d\x86\xe2\x82\x38\xa4\xcf\x26\xb4\xf5\x9f\xe2\x46\xd3\xf6\x78\x38\xd3\xb3\xa2\x2a\xc2\x1b\x1f\xbb\x60\x4a\x5d\x7b\x94\xff\x5e\x26\x90\x31\xf6\x96\x01\x4d\x30\xf4\xd9\x04\xc0\xc1\xa5\xf0\x36\xd7\x3b\x37\xad\xea\xe0\x4e\xa5\x9a\xe1\x17\x5e\x12\xb7\xf9\x0d\x27\x99\x2c\xd3\x55\x6e\xa7\x67\x7e\xdb\x53\x1b\x19\x14\x9d\xd0\x11\x03\x00\x07\x65\x26\x9e\xce\x2b\x83\xe6\xbf\x93\xa4\xf0\xc8\xc4\xf3\xca\xb7\x83\x71\x3c\x6c\x31\x67\x35\xb4\x21\xf6\xc7\xc4\xb5\x01\x4f\x7b\x95\x85\xee\xad\xae\x75\x27\xc8\x0b\xdc\xb8\x80\xe8\x02\x10\x07\x97\xc2\xee\x41\xdd\x77\xca\x83\x73\x76\x04\xda\x1b\x61\x3a\x66\x06\xfa\x29\xc5\x2f\x04\xbf\x59\x5e\xb7\x2f\xf3\xfd\xc6\xf2\x25\xa0\xca\x0a\x2a\x9b\x06\xe0\x90\x2a\xfe\xed\xfa\x10\x96\xfc\x0e\x8b\x26\x2a\xf7\xa4\xb2\x32\xe8\x69\xfe\xe8\x1a\x87\x4a\xeb\x4c\xd8\x89\x85\xf6\xd5\x4a\xd1\x3b\x1a\xaa\xed\x05\xe2\xe0\x52\x18\x44\x7b\x76\x57\x45\xd8\xc7\xf7\xbd\x18\xe6\x2f\x54\xdd\x87\x6a\xb8\x1e\x22\x36\x92\xd7\x2b\x8a\x9e\x68\x88\xad\xf2\x5f\x1e\xc5\x82\x8e\x2e\x00\x38\xb8\x14\xf8\x07\xa4\xd0\xed\xd2\xd9\x0f\xaf\xd7\x2c\x66\x58\xa0\x59\x2f\x78\x97\x0f\xf1\xca\xfc\xb6\x9a\x7b\xc2\x43\x43\x74\x7c\x35\x13\x0b\x21\x05\x10\x07\x8d\x0a\xfa\xa7\x92\x02\x68\x4d\x72\x62\xba\x56\xac\x78\x9a\x72\x56\x67\xde\xde\x80\x03\xda\x00\xd6\xb3\x6d\x27\x3f\x21\x55\xa5\x77\x8e\x98\xfd\x4e\x03\x79\xd4\xf8\xb1\x66\x90\xf7\x04\x70\x70\x29\x98\x58\xa9\x3b\x78\xf9\x86\x67\x0e\xaa\xdf\xa1\x9e\xf8\xf5\xad\x1a\x7d\xe7\x29\x6d\xf0\x82\x5c\x72\xbb\x67\x47\x73\xe3\x8e\x0a\x74\xa9\x20\x88\x43\xfa\x98\x1a\x5b\x4e\x81\xce\xf1\x52\xf4\xc8\xa9\x86\xb3\xb7\xdb\xfd\x59\x62\x90\xca\x0b\x82\x47\x49\xf2\x1b\x66\x91\xdb\x26\x04\x82\x44\xd0\xc7\x54\x00\x07\x97\x42\x46\xb4\xef\x85\x6a\xc6\xc4\x3e\x65\x67\x39\xef\x6b\x03\x4f\x42\xe7\xd9\x0d\x6f\x90\x77\xb3\x26\xa2\x48\xf6\x62\x87\x3d\x54\xe2\x43\xc4\x05\x71\x70\x29\x70\xcf\x8f\x08\x29\x61\x89\x3c\x69\xac\xf2\xa0\x96\xed\xaf\x2a\x73\x28\x55\x98\x4b\xfc\x34\x32\x3d\x73\xaf\xb1\x33\x3c\x46\xa7\x19\x21\x05\x10\x07\x8d\x0a\xa7\xf3\xca\x20\x9f\x75\xb2\x57\x0e\x3f\xba\x2d\xf1\x50\xa8\x71\x28\x7e\xa9\xc4\xe5\x1e\x53\xbd\x78\xbb\xd0\xdb\x40\xc2\x6f\x76\xdd\xb4\x93\xb7\x5f\xb4\xfa\xac\xd6\x21\x7c\x27\x88\x43\xf6\xca\x13\xfd\x56\xd1\xd3\xda\xcd\xe3\x95\x12\xad\x6b\xde\xe4\xe5\xbe\x89\x6b\x79\xa8\x2c\x7d\x33\x3a\x04\xed\x0f\x79\x67\x92\x26\xb4\x11\x91\x41\x1c\xb2\x57\x8e\xc2\x28\x28\x52\xc2\x14\xbc\xaa\x76\x95\x2d\xc0\x91\xc6\x64\x74\x96\x2c\x75\x90\x87\xbc\x7a\xec\xdd\xb7\x4c\xd9\x9e\x30\xe2\xbb\x88\xc8\x20\xee\xff\x79\xe5\xff\x48\xe2\xd4\xf7\x2b\x67\xce\x17\x98\xab\x38\x7e\x61\xf3\x4a\xb5\xd1\x99\x58\x32\x6b\xef\x96\x09\xe0\x97\x17\xfc\x5c\x35\xe3\x2c\x50\x81\x9f\x73\xdf\xfc\x5f\xaf\x2c\x90\xd2\x3b\x5a\x9b\x6e\x34\x18\x68\x2e\x58\x8d\x1b\x47\x84\x1a\x73\x43\xa0\x20\xdd\xe2\x76\x42\x29\xfb\x63\x21\x1f\xf5\x3f\x8a\xff\xa0\xaf\xd4\xc7\x27\xfc\x78\x33\xb6\x96\x69\xbe\xad\xc9\xeb\xe5\x92\xf3\xfa\xb8\x17\xf1\xea\x5d\x4a\xb4\x68\xc4\x12\xc6\x5a\x9b\x3b\xf8\x5f\xf3\xca\xa0\xa6\xfd\x9b\xaf\x8c\xe4\x95\x19\x3c\x37\x78\xb9\x3c\x4b\x08\x22\x18\x59\xf0\x03\x62\xfc\x94\x83\xc4\x36\x25\xf8\x9e\x26\x6b\xe8\xc6\xd7\x65\xa6\xbf\x99\x91\x38\x93\x2d\x4f\x64\xaf\xec\x6d\xec\xaa\x62\xf9\x85\xd5\x3c\x46\x67\xb4\xfd\x22\x0b\x9b\x6e\x62\xd7\x13\x8d\x39\xa2\x52\x26\x14\x42\x1b\x82\x1a\x5d\xd2\xb6\x33\xd9\xe0\x45\xf6\xca\xf7\x99\x7f\xe3\xa4\xb9\xb6\x0d\xb1\x07\x55\x4f\xbf\xb1\x28\x7c\xb3\xe5\xda\x44\xcc\x92\x22\xe1\xb6\x99\x7e\x7c\xcf\x48\xa9\xdd\xed\x4c\x5a\x8b\xec\x95\x63\xd0\xe8\x5e\xb3\xb9\x27\xe1\x7a\xae\x74\x7c\x71\xa1\xba\xa5\x2f\x4b\xd3\xd5\x7a\xf5\x0f\xb3\x93\xf0\x4f\x0b\x01\x3c\xb4\x48\x97\x33\x69\x2d\xb2\x57\xf6\x46\x6d\x49\x43\xcf\xc2\xfe\xc6\xdc\x14\x86\x66\xf8\x5d\x88\x15\x25\xf0\xab\x4b\x4f\x68\xce\x67\xba\xd7\x37\x7d\x3d\x08\x7e\x9d\x41\x27\x1b\x9e\x4e\x44\x27\x4d\x80\x42\xe2\x19\x04\x17\x25\x9c\x7d\xe3\x2b\x43\x6d\x9e\xea\x6b\x48\x5e\x78\xc6\xac\x5d\xdc\x80\x1f\x2e\x59\xd7\xd7\xde\x58\x8b\xd1\x81\x18\xf8\x41\x1c\x7c\x02\x14\xba\xa7\xf7\xe8\xf1\x13\xf1\xc7\x37\xef\x58\xd2\x9f\xb7\x70\x0f\xad\x56\x7d\xbd\xdd\x54\x30\x48\xe4\xc3\x4a\xa0\xc4\xf7\xd4\x69\x1c\x8a\x0b\xe0\xe0\x13\x60\x73\xd7\x77\xb1\x32\xf1\xd4\x2b\x39\x19\x75\x85\xa2\x4f\x2c\xde\xce\x71\x55\xbd\x88\x19\x1a\xcb\x3c\x4e\x92\x0e\x5d\xd5\x76\x48\x46\xc4\x05\x71\xf0\x09\x50\x6a\x97\xf5\xb7\xe0\x3d\x25\xd9\x1d\x7e\x8e\x45\xa3\xd6\x6c\xe5\xc6\xaa\xb1\x54\x2f\x22\x92\x0c\xa3\x6c\xc5\x5a\x86\xaa\xdd\x3a\x68\xcb\x0b\xc0\xc1\xff\xaf\x9d\xa8\x48\xf5\xaa\x0d\x2b\x2a\xc9\x53\x85\x11\x1f\x3c\x7f\xde\xd7\x31\x53\x5a\x57\xc4\x1c\x64\xe4\x9e\x3f\xb5\xcd\xf4\x1c\x5f\x40\x78\x65\x10\x07\xe5\x2b\x9f\x6e\x5f\x19\xf0\x5e\x9f\xa4\x84\x68\x1a\x82\x9d\x35\x0a\xdb\x9e\x39\x25\xef\x99\x05\x2a\xf7\x62\x7c\x6e\x9e\xb9\xe6\x6f\x7f\x38\xea\x5a\x9a\x34\xed\xf4\x82\x21\xef\x09\xe2\x90\x2e\x0a\xda\x7c\x31\x12\x6f\x56\xe2\x64\xfd\x20\x88\x76\x48\x15\x35\xa0\x4f\xfd\xc3\x55\x66\xb7\x01\x4b\xe7\xf2\xd0\x69\x35\x7d\x55\x68\x67\x0a\xc4\xc1\x7b\x56\x8e\x25\x6e\x84\x96\xf1\x46\xdf\x82\x85\x75\x21\xca\xc6\x72\x72\xca\x9b\x29\xc1\xa7\x73\xeb\x22\x8f\x09\x95\xd9\x87\x37\x56\xb6\x11\x71\x41\x1c\x5c\x09\xcf\xc2\x09\xa7\xc6\x3d\xc5\x5c\x62\xcd\xd7\xd0\xf8\xd1\x28\x62\x66\xfe\xec\xda\x0e\x5a\x1a\x0b\xe4\xf4\x6c\x78\xda\x50\x24\x8d\x21\xe2\x82\x38\xf8\xff\xbd\x29\xb0\x3d\x19\x67\xa1\x67\x8f\xa5\x30\xad\x8b\x56\x1d\x50\x1c\x52\x69\xc2\x51\x34\xc2\x6d\xa8\xf3\xc5\x84\x7e\xa7\x9c\x59\x06\xb1\x14\x02\x71\x50\x66\xe2\xe9\xbc\x32\x68\xac\x3d\x49\x0a\x77\xbf\x2d\x0a\x76\x76\x63\xfa\x69\x38\xd2\x06\x08\x1f\x74\x4c\x63\x7c\x2f\x89\x5c\x6c\x61\x4b\xff\x7a\xe8\x3f\xa8\x4f\xee\xf1\x04\xd1\x05\x20\x0e\x2e\x05\xb4\xdd\xf7\x9f\x30\xc8\x5d\x54\xde\x33\xb2\x45\x9b\xa6\x6d\x45\x5d\x50\x3e\x3e\x3f\x7a\xf8\x80\x64\x09\xed\x65\xcb\x91\x33\x96\x29\x22\x2e\x88\x43\xaa\xb6\x73\x51\x3b\xd1\xe2\xd1\xba\xc8\xfe\xb8\xe8\xd2\xcb\xa5\x79\x6d\xa2\x56\x95\xa8\x6f\xa4\xa4\x04\x17\x6e\xcf\xb3\x7d\xf4\xe7\x2e\x81\xaa\xed\x00\x38\xb8\x14\xf6\xe5\x96\x2c\x5f\xd4\x7a\x2a\x7a\xd6\xf0\x2b\x45\xf5\x24\xcd\xb7\x3a\xf6\x25\x5d\x31\x94\x78\x95\xc4\xf3\x56\x10\x9d\x28\x17\xfa\x66\x00\xe2\xe0\xff\xd7\x4c\xbe\xed\x3d\xb3\xe9\x5c\xb5\xb1\xa5\x83\x15\xcf\x02\xff\x05\xbc\xf3\xb5\xda\x0a\xed\x15\xd7\x0a\x9d\xfa\xaa\x66\x83\x55\xa0\x7c\x65\x10\x07\x65\x26\x9e\xce\x2b\x83\xe6\xbf\x13\x0f\xde\x92\xe9\x3b\xf4\xbe\x45\x13\xee\x93\x45\xd9\xe9\x8c\xe0\xcf\xcf\xfc\xae\xb5\x9e\x35\xfb\x7e\x31\xf1\x4d\xc8\x76\x61\x6d\xb9\x31\x74\xf0\x16\xc0\x21\x9d\x36\x49\x41\xf9\xb0\x44\xe4\x63\xe1\xb6\xf1\x4e\x60\xe5\x3e\x5f\x36\xee\x7e\xe9\xbc\x3e\x15\xfd\x3a\x2a\xff\xd4\x4e\xd8\x00\x0f\x14\x17\xc4\xc1\xbb\xf6\xa1\xaa\xe0\x56\xf2\x45\x53\x3b\x0c\xa9\x86\xf6\x97\xcb\x49\xd8\x7a\x55\x45\x23\x54\xcc\x3f\x07\x7e\x3f\x4f\x5a\x63\x3f\xa6\x80\xaa\xf9\x83\x38\xb8\x14\x9e\x52\xae\xec\xdc\xb3\x13\x88\x51\xb3\x9f\x63\x61\xb6\x7e\xa6\xe2\xc5\x9f\xc4\x7b\xe9\xf3\xb5\xcb\xce\xe8\x1e\x1f\x66\x1d\x2c\x3d\xa0\x83\xc2\x00\x0e\xfe\x7f\xf7\x05\x9d\x93\x95\xb7\x8e\x31\x5e\x27\x37\x13\xea\xfb\xbd\xb8\x8f\xf7\x5d\x86\x62\x5e\xa0\x94\xa3\x31\x9b\x30\x20\x4a\x9d\x0f\x3a\x62\x00\xe2\xa0\x51\xe1\x74\x5e\x19\xb4\x26\x39\x49\x0a\x56\xbe\x16\x97\xab\x25\x79\x71\xfb\xb8\xea\x5e\x7c\xfa\x48\xb2\xad\xf1\x7a\xa7\x49\x9d\x4c\x7d\x27\x48\xf3\xd7\xfe\x83\xdc\x46\x6d\x28\x4f\x17\xc0\xc1\xa5\x80\xe2\xf5\xd7\x26\xe8\x75\x9d\x3a\x23\xdd\xcc\xf7\x80\x73\x3c\x33\x39\x7f\x5a\x29\xef\x12\x06\x28\x57\xf0\x62\x2d\xcf\x8c\xfc\x84\x0e\x1e\x81\x38\x78\xd7\x6a\x62\xa3\x1c\xdc\x12\xd0\x19\x2a\x7a\x86\x42\xf3\xfd\xc7\x97\xeb\x64\xf9\xcd\x44\x06\xe7\xb3\xdc\xe8\x65\xab\x28\xfb\x4b\xe8\x83\x10\x71\x41\x1c\x5c\x0a\x6f\x36\x94\x17\xf4\x50\x65\x84\xf3\x5a\x8c\x4b\x56\x9a\x0d\x1f\xcc\xb1\xbb\xe3\x6c\xa0\x77\x58\xed\x8c\x10\x89\x72\x62\xcc\x34\x20\xe2\x82\x38\xf8\xff\xb5\x27\xc5\xa1\x46\x1d\x90\x7f\xc8\x5a\x81\xc3\xe1\x97\x93\xc6\xc1\xcf\xec\x36\xbb\x82\x6a\xfa\x92\x23\x14\xff\x78\x35\xa8\x1e\xba\x5f\x19\xc4\x41\xa3\xc2\xe9\xbc\x32\xc8\x67\x9d\xec\x95\x95\xe9\xef\x2e\x3f\x16\x32\x1b\xef\xf3\x5b\xfb\xfa\xec\xaa\xab\x4d\xcf\x33\x23\x7c\x0e\xb1\xe8\x57\x07\x5b\xdc\x7d\x03\x24\x0c\xe4\x08\xdf\x09\xe2\x90\xbd\xf2\x47\x61\xb1\xcf\xaa\x33\xce\x0a\xcd\x9c\x71\x3f\xda\x1c\x35\xa5\x45\x54\x4d\x5e\xdb\x92\x19\x38\x5d\xb8\xe3\xdf\xf6\x98\xb5\x72\x15\x11\x19\xc4\x21\x7b\xe5\x3b\xda\x96\x6b\xb5\x64\xdc\xe4\x5e\x58\x2a\xfc\x69\xa9\xd1\xfd\x4e\xba\x77\x7f\xfd\xd5\xe8\xb0\x53\x10\x08\x65\xb6\xc6\xe2\x26\x41\x44\x06\x71\xff\xcf\x2b\x5f\xfd\x37\xf2\xa9\xef\x57\x2e\xfb\x18\xc0\xcb\x22\xea\xe2\x14\x8f\x76\x9c\xa5\x42\xd8\x6a\x67\x39\x90\xd0\x2e\x15\xe1\x66\xe4\x8d\x35\xb4\xf7\x8b\xf9\xb6\xfb\xbf\x5e\x59\x3e\x74\xc0\x5f\xfa\x73\xd8\x5d\x25\x56\xa3\x9f\x2b\x12\xfe\x65\x1a\x4e\xef\x6f\x50\x16\x55\x3c\xff\x6e\x19\x8f\x91\x29\xd6\x39\xfb\x0f\x3a\x77\x73\x38\x7d\x54\x25\x9f\xf1\x43\x4f\x2a\xcb\xd6\x05\x1f\xc1\xd5\x90\x52\xf2\xa7\x8e\xf5\xe3\xf1\xc7\xa6\xd1\x2a\xe2\x62\xff\x73\xf9\xca\xa0\xa6\xfd\x9b\xaf\xac\x08\xf7\x53\x55\x6c\xf5\xc1\x26\xb3\x4f\x6e\x62\xb3\x26\xcc\x3c\x48\xc3\x9b\xdf\x44\xfd\x43\xe8\x35\xbb\xaf\xcc\x77\x58\xe0\x23\xda\x93\xe8\x75\x26\x5b\x9e\xc8\x5e\x59\xe7\x92\x01\xcf\x4f\x4c\xc2\xa3\x7c\x8f\x6b\xec\x97\x5a\x0b\x69\xe9\x3e\x3c\xa7\x6d\x7f\x87\xc6\x27\xef\x98\x82\x9d\xf7\x51\xf0\x6c\x36\x78\x25\x90\x7e\x56\x2f\x08\x65\x5e\xea\xaa\xdc\x9d\x0f\x1e\x9b\xb2\x19\x7c\xbf\x1b\xde\xa5\x78\x87\x3c\xd8\x14\xab\x90\x4f\xa7\x1a\x0b\x53\xd8\x39\x93\x1b\xb2\x7c\x91\xbd\xf2\x87\xa3\xa7\x2d\x29\x7f\xc3\xb0\x48\xbd\xe4\x9b\x43\x4d\x2f\x5e\x27\x75\xc2\x5a\xc8\x2e\x6a\x7b\xe2\x25\x2e\x82\x99\xf9\xa2\x53\xfc\x4c\x5a\xeb\x8c\xf4\xb3\x8e\x0f\x1f\x72\x53\x1c\x17\xdf\x7f\x34\xd0\x95\xf3\xe2\x83\xc9\xbb\x25\x26\x96\x66\x39\x37\x1d\x0b\xa6\xed\xb2\x56\x97\xa1\x8a\xed\x33\xf3\xca\x20\x11\x9d\x34\x01\x0e\xcf\x64\x5c\xf5\x09\xa4\x96\xe8\xd9\xee\xc5\xdf\x1e\xa0\x1e\xdf\x9d\x2f\x0e\xa1\x24\x22\xeb\x13\x98\x14\x67\x89\x7b\xf8\xd1\x15\x31\xf0\x83\x38\xf8\x04\x78\x3d\xff\x91\xd9\x44\xec\x1f\x66\xc6\x27\x0a\x17\x22\x18\xb3\xae\x9c\x5b\x7b\x46\x52\x5e\x64\x60\xb5\xb4\x4e\xdc\x6d\xb6\x86\x7f\x8c\x88\x0b\xe2\x90\xbc\x32\xf9\x42\xc5\x8d\x7b\x8d\xe3\x8a\xbd\x82\xc4\x3b\xdf\x5e\x18\xad\xae\xa3\xeb\xd0\xa6\x29\x60\x84\xae\x70\x3f\xff\xe0\x29\xc6\x09\x79\x65\x00\x07\x9f\x00\xdd\xce\xed\x55\x45\xc6\x44\xc5\xfd\x2d\x36\xb1\xcc\xc3\x43\x0b\x7a\x32\x92\x1a\x90\xb1\xda\x88\xde\xfc\x6b\x84\x96\xe1\x73\x54\x11\x54\xef\x15\xc0\xf9\xcb\xa0\x48\xfd\x67\x4d\xa8\xf7\x04\x73\x8a\x6a\xd5\x36\xdf\xe5\xcd\xf3\x66\x85\x0a\xcf\x08\x96\x87\xaf\x1b\x93\xb9\xdd\xfd\x37\xdf\x58\x08\x1d\x89\xe5\x20\xbc\x32\x88\x83\xf2\x95\x15\x4f\xb3\x14\x02\xbd\xd7\x27\x29\x41\xb2\xfe\x93\x02\x0b\x66\x94\xed\xf4\x80\xd5\xc4\x35\x4b\x12\xed\xdb\xde\xd2\xf3\x49\x47\x51\xe7\x0f\xcb\x5d\xe3\xb3\x0c\xcd\xa1\xd3\x8b\x20\x0e\xae\x04\xe3\x3d\x2d\x7a\xab\x47\x05\x07\xef\x76\x4d\xe6\x65\x26\x3e\x5c\x14\x5c\x19\x98\xb2\x28\x50\xe6\x27\x1f\x4e\xd9\x17\xe4\xc8\x87\x14\x06\xe2\xe0\x4a\x98\xc0\x78\xe3\x1b\xf5\x9a\x5d\x98\x10\x3f\x24\xb6\xf2\xa7\x12\xc9\x9d\x78\x15\xd9\x0c\xe2\xca\x6d\xe5\x71\x6c\x1b\xd1\x17\x45\x34\xd0\xfe\x2f\x80\x83\x2b\x61\x8b\xc4\x65\xfe\x97\x7f\x1d\x56\x7b\xc8\xeb\x79\xfa\x3b\x6a\xe1\x2f\x1c\x5f\xaa\xd2\x3d\x5d\x7c\x59\x2f\x2c\xc5\xc8\x24\x4b\xaa\x08\x6d\x9f\x00\x38\xb8\x12\xce\xaf\x0e\xaa\xa9\x73\x64\x85\xa2\x14\xde\xe8\x8e\x6f\x79\xd2\x7f\x5e\x82\xbc\x64\x0c\xe5\x20\xf5\x72\x51\xdc\x84\x75\x57\x3c\x1e\x62\x29\x04\xe2\xa0\xcc\xc4\xd3\x79\x65\xd0\x58\x7b\x92\x14\xc6\x17\x7f\xd2\x0e\xd9\x53\x44\xd3\xd6\x07\x48\x46\x4b\x9d\x77\xaf\xf8\x2b\xbe\xf5\xe6\x91\xfb\x60\xfa\x06\xdd\x8c\x9a\x98\x2f\x39\x74\xc8\x02\xc0\xc1\xa5\xa0\xf9\x9e\xad\x36\x5d\xac\x0e\x85\x36\x92\x26\x78\x54\xea\xf9\xb5\x3d\x0d\x1a\x9a\x3c\xe3\x18\x26\x5a\xae\xd7\xfe\xae\xe1\xa1\xd6\xd0\xea\x15\xc0\x21\xd5\xe0\x0a\xca\xde\x32\x4a\x3a\x54\xbd\x3e\x94\xc9\x61\x55\x30\xe7\xb5\x7c\xc1\x27\x2f\x84\x25\x47\xc7\x50\x88\x94\xca\x70\x94\x05\xba\xa0\x0e\xc4\xc1\xa5\x50\x8b\xff\x7c\x5f\x0f\x33\x08\xfb\xeb\xe6\xdb\x87\xde\x8a\x6f\x5a\x35\xc6\xb7\x15\x1e\xd5\xa9\x50\xe9\x46\x39\x63\x24\xad\x8b\x65\x20\xe2\x82\x38\xb8\x14\x84\xb2\xf8\x99\x67\x6f\x84\x7a\x0b\xad\x1e\x19\x2c\x2a\xa6\x33\x63\x5d\x34\xe4\x59\x72\xc2\x65\xe5\xee\x8b\xba\xa4\xf3\xf0\xa6\x0b\x42\x0a\x20\x0e\xca\x4c\x94\x38\x95\x14\x40\xf3\xdf\x49\x52\x48\x7d\x82\x96\x36\x97\x35\xd1\x3b\x5e\xd1\x9a\xb7\xe6\xf5\x0b\x6b\xb0\x14\x47\x5a\xbd\xa6\xa5\x71\x31\xcf\xe5\xb6\xd4\xfd\xf1\x05\xa8\xc4\x38\x80\x83\x4b\x81\x96\xe6\x16\x41\xf0\x67\xec\xf5\xe7\x23\x61\xfc\xc4\x92\x05\xec\x7c\xbf\x2d\xd9\x76\x76\xc5\x89\xb8\x5f\x55\xcb\x52\xcc\x75\x40\x29\xe6\x20\x0e\x2e\x05\x0d\xea\xb8\x36\xbd\x42\x66\x82\x46\x52\xdf\xa6\x1e\xb2\x5e\x65\x9f\xd9\x58\x5c\xaf\xc9\x5e\x19\x45\x57\xf9\x55\xc3\xe9\x62\x4f\xc8\x83\x03\x38\xb8\x14\x52\x22\x3a\x55\x68\x9b\x6c\xdb\xdd\xba\xd3\xde\x3c\xf8\xec\x8c\xb1\xdb\x54\x4b\xbc\x31\xd3\xa7\x62\xaa\x5d\xd5\x5a\x3a\xe7\xf5\x00\x11\x17\xc4\xc1\xa5\xd0\xd1\xc5\x11\xbc\x3b\x97\x70\x6e\x71\xc1\x5c\xbe\xfa\x82\xc9\x79\x1c\xcf\xd1\x06\x0c\x62\x77\xdd\x72\xc6\x64\x47\x23\x12\xcc\x75\x84\x14\x40\x1c\x34\x2a\x9c\xce\x2b\x83\xd6\x24\x27\x96\x79\x7b\xfb\x96\xba\x29\x09\x8f\xbb\x1f\xad\xdd\x60\xcf\xb7\x93\x5f\xd0\xc7\x85\x23\x3d\xef\x3e\x3b\xad\x12\x6d\x68\x25\xff\xde\x23\xa8\xcc\x1b\x80\x83\x4b\x61\x92\xeb\x5a\x2a\x97\x59\xe8\xca\x7b\x5e\xc3\x89\xcb\xcf\x2b\xf5\xbd\x0b\x1e\x95\x9d\x67\xd1\xbd\xf3\xee\x7d\x2f\xfa\xe7\xc5\x24\xc8\xd3\x82\x38\xb8\x14\xe8\x7f\x28\x57\x70\xdd\x21\xdb\xf0\xf6\xbe\xfb\xbe\xf8\xc0\xa6\x82\x9c\xe1\x93\xa2\x65\xfd\x77\xbb\x24\xfb\x9f\x1c\xb3\x34\x63\x8e\x88\xb8\x20\x0e\x2e\x05\xbc\x1c\x54\xd4\xbc\x9c\xfa\x05\xbf\x83\x3b\xa1\x23\x2a\xb6\x9d\x28\x79\xdd\xe1\xba\x12\x8a\x97\x0f\xa2\x6d\x32\x0e\xda\x08\xa0\x53\x2c\x20\x0e\x2e\x85\x2a\x8b\x60\x76\x66\xf2\xef\x54\x9b\xc6\x44\x34\x82\x91\x32\xa5\xe9\x7c\x6b\x4e\xbf\x5f\x3f\x5d\x7f\x75\x35\xe8\x17\xbe\xbb\x46\x25\x42\x0a\x20\x0e\x1a\x15\x9c\x4f\xe5\x95\x41\x3e\xeb\x64\xaf\x6c\xce\xdd\xee\xd0\x34\x43\xc6\x2c\xc0\xa0\xcb\xc1\x29\xf1\xc5\x7d\x5f\x51\x6f\xc9\x6d\x5d\x6f\xa0\x91\xf4\x66\xc7\x1d\x56\x75\x1c\x84\xef\x04\x71\xc8\x5e\x59\xcc\x77\x8a\xb8\xb9\x6f\xf3\x39\x11\xbb\xec\xaa\xb9\xe9\x5e\xeb\xe0\x6c\x99\x5c\xda\x51\xc2\xb9\xf0\x09\xeb\x35\x4a\xea\x3f\xf7\x11\x91\x41\x1c\xb2\x57\x36\x36\x8c\x91\xee\x79\xd9\xec\x98\xf3\x28\x3b\x65\xed\x51\x7a\xed\x74\xad\xbe\x7e\x2e\x3d\x61\xe2\xf3\x10\x94\xc6\x0f\x87\xd1\x65\x88\xc8\x20\xee\xff\x79\xe5\xff\xa4\x9a\x9f\xfa\x7e\xe5\x0b\xca\xe6\x91\xe2\xb1\x5c\x06\x1b\x55\x87\xb8\x65\x9b\xa9\x85\xc9\x75\x33\xcf\x9c\x39\x9f\x95\x47\xba\xad\xdb\x10\xab\xc9\xa2\xfe\xeb\x95\x07\xc3\x5d\xdf\xe0\x3e\xc6\x6d\xb6\x60\xba\xd2\x3d\xd3\x46\x75\x35\x72\x77\xed\x47\x6c\xb0\xa3\x1a\x6e\xad\xd3\xd0\xdb\xef\x8c\xd3\xff\x9e\x59\xeb\xb0\x97\xb1\x8c\xfe\x6c\xb3\xf1\xa7\x22\xe6\x80\xe1\xdc\xde\xe5\x7a\x93\x95\x84\x2e\x49\x67\x1c\xd4\x17\xa8\x3c\x26\x9c\xf3\xff\x6b\x5e\x19\xd4\xb4\x7f\xf3\x95\x91\xbc\x32\x85\x1b\x23\x46\xc5\x27\x7d\xad\xba\x86\x54\x01\xfb\x1e\x05\x01\xc3\x5a\x6d\xdc\x5a\x8b\xb7\x61\xca\xe5\xb7\xcb\x7e\x3e\x1e\x0e\xfc\xff\x98\xfb\xd3\x70\x2a\xbf\xf7\xff\x1f\x37\x64\x1e\x33\x46\x11\x12\x32\x44\x66\x99\x32\x93\xa1\x44\xe6\x21\x63\x99\xca\x14\xca\x9c\x10\x22\x33\xc9\x58\x64\xca\x90\x59\xc8\x2c\xf3\x3c\x84\x24\xf3\x98\x79\x0a\xf1\x3f\x3e\x37\xf6\xf5\xed\x75\x6d\xff\x63\x39\x8e\x9f\x1b\xef\xfb\x8f\xe3\xdc\x7b\x5d\xe7\x73\xaf\x75\x3d\xf7\x5a\xe7\xb9\xce\x64\xcb\x13\xd9\x2b\x63\x1c\xdf\xca\x0d\xdc\x57\x28\x7a\xe2\x24\x2f\x1d\xbc\xda\x7e\xd9\xe8\x2f\x06\x83\x71\x5f\xf5\x39\xec\x37\xd9\xc7\x2e\x49\x11\x98\x67\xb2\xc1\x8b\xec\x95\x75\x22\x4a\x3b\xab\x71\x5b\x3e\xe1\xaa\x36\x32\xb0\x4d\x50\x4c\x4d\x0f\x5e\x6b\x1a\x40\xcb\x2b\xc0\x16\xbe\x77\xfd\xef\xe0\xf9\xa9\x33\x19\x2d\xb2\x57\xa6\x27\xf8\xa3\x54\x61\xa9\x1e\xee\xd9\xf2\x7e\xe3\x95\x5c\x31\xb6\xac\x5f\xd5\xd5\x48\xc3\xc2\x3f\x79\x3d\x51\x5d\xa8\x6b\x43\xba\x67\x32\x5a\x64\xaf\x5c\xe3\x75\x93\xaf\x51\xe6\x1d\x91\xdc\xca\x38\xed\xe0\x6f\xd4\xbd\x06\x1e\xa3\x49\x01\xda\x40\xde\xb6\xc3\x8c\xc1\xa8\x68\xc2\xd9\x33\xf3\xca\x20\x11\x9d\xb4\x00\x16\xfa\xd2\xac\x13\x5e\x0a\x71\x7e\x67\xfd\xc8\xf7\xc7\x68\xfd\x8b\x8e\x5f\xef\x0b\xda\xa2\x69\xb2\xd1\xe9\xee\x36\xcd\x71\x4f\x42\x9d\x8c\x40\x1c\x7c\x01\x54\xf7\x2d\x40\xcb\xbd\x12\xed\xa3\x85\x71\xa7\xe5\x95\xb6\x12\xe3\xaf\x6d\x7b\xfe\x89\xdd\x62\xcc\xa6\xc1\x30\x2d\xf1\x5e\x69\x31\x44\x5c\x10\x07\x5f\x00\xe9\xab\x0b\x7a\x3b\x8e\xbe\x1e\x61\x1d\xda\xf8\xbb\xf1\x92\x64\x1d\x10\x65\x26\x6a\x8b\x07\xd5\xfe\xcc\x3c\xea\x1f\x9a\x1c\x35\x82\xde\xb1\x00\x9c\x8f\x24\x0a\xf1\xbf\x71\xe3\x1c\x2d\x42\xd4\x84\x1f\xae\x2b\xd8\x05\xba\x57\xf0\xf3\x33\xb7\x4a\x17\x29\x0e\x16\xdf\xff\x1a\xea\xfa\x34\xda\x6c\x6e\x2c\x0c\xea\xd6\x0c\xe0\x7c\x24\xff\x7b\xf3\xde\x6a\x36\xa5\xbf\x98\x68\xbc\x6b\x4d\x5e\x9f\xbd\xe3\xed\x39\xb2\x03\x03\xbf\x98\xc6\xd5\x0a\x23\xb4\x7e\x01\xc3\x62\xeb\x71\x42\x84\x57\x06\x71\x50\xbd\xf2\xa9\xbc\x32\xe8\x77\x7d\x92\x12\x84\x48\xbf\x59\xb5\xf8\xa0\x6b\x14\xf9\xcb\xc9\x75\x3e\x55\x58\xf4\x21\x7c\x26\x4c\x77\xd9\xdb\xfb\xce\x3e\xeb\x9d\x56\xf5\x1e\xe8\x4a\x10\x10\x07\x57\xc2\x8c\x7f\x9c\xfb\xc0\xc8\x9d\xed\xf2\x5e\xd3\x9d\xda\x9b\x1d\x77\x74\xc7\x1f\x62\x10\x57\x04\x6e\xb8\x3f\x8c\x97\xcb\xff\xfe\x41\x1c\x11\x17\xc4\xc1\x95\xf0\x73\x4d\xde\xed\x23\x1e\xdd\x47\x1d\xce\x8e\xd0\xcb\xf3\x9a\x62\xf2\x42\xaf\x6c\xa3\x1c\xf9\xfb\x50\x09\x2a\x70\x0f\xe4\xe4\xa1\xcd\x4f\x10\x07\x57\x42\xe0\x0c\x5b\x4b\x89\x22\xaf\x18\x6f\xdb\x4e\x33\xb6\x67\xcb\x9a\x86\xff\xe6\xbd\xa2\xdc\x6e\xfd\x2d\x47\xa7\x90\x96\xc2\xef\xd0\x36\x07\x88\x83\x2b\x61\xf2\x4b\x4e\xbd\x5e\xf3\xa2\xa2\x70\xeb\x32\xa3\x3b\x2a\x13\xc3\x43\x2f\x5b\xe3\x31\xf4\x83\x5d\xec\x21\xbb\x27\x45\xf7\xbe\x7d\x41\xbc\x0a\x81\x38\xa8\x32\xf1\x74\x5e\x19\x34\xd7\x9e\xd8\xc4\x20\xb6\xab\x38\x7a\xa4\x9b\xc8\xa7\x4f\x7a\xe1\x6a\x21\xce\xf5\x4e\x0a\x0e\xa1\x55\xf9\x92\x2f\xa8\x92\x93\x01\xe7\x0e\x94\xa0\x3f\xa4\x40\x1c\x5c\x0a\x5a\x03\x2f\xc9\xff\xf0\x13\x7d\xf7\x3f\xa0\xe3\x68\x65\xab\x91\x99\xe9\xc2\x4b\x30\x51\x39\xac\x39\xce\xb0\x0d\x51\xb0\x76\x84\xee\x2b\x06\x71\x48\xd7\x87\x6d\x15\x33\xf7\xb7\xaf\x6a\x25\xc4\x13\x18\xd7\xb1\xae\xee\x27\xa2\x51\xb1\x1a\x5e\xb4\x92\x13\x49\x0a\x39\xcc\xe6\xfb\x0d\x79\x5a\x10\x07\x97\xc2\x58\x76\xcf\x16\xde\x20\xd6\xbe\xc6\x2d\xc9\x78\x97\xdf\x29\x31\x8a\x61\x8f\x2e\x55\x2f\x38\xbc\xb0\xcf\x9e\xc7\xff\xd3\x95\x04\xd5\x6d\x83\x38\xb8\x14\x70\xb3\x09\xde\x65\x1e\x1f\x38\x52\x3f\xcc\x7b\xcc\x34\xa4\xc5\xd8\x95\xf7\x0b\xdd\x1c\x3b\x6f\xc7\x92\xea\xaa\xc5\x7c\x4a\x1d\xd4\xd0\x09\xc4\x41\x95\x89\xa7\xf3\xca\xa0\xf5\xef\x24\x29\xd4\x36\xee\x6e\x26\x0b\xf3\x3c\x3f\xfe\xea\xdd\xca\xf0\x6d\x01\xfb\xf1\x74\x7f\xad\x46\xcb\x20\xdf\x0b\x0f\xcc\xcd\x5f\x6f\x69\x6f\x42\xfd\xaa\x01\x1c\x5c\x0a\x76\x73\x84\x51\x72\xb8\xd3\x64\xeb\x51\xe9\x7c\x73\x94\x7a\xb3\x3c\xf4\x0b\x26\x18\xcc\x16\xa8\x45\x82\x4d\x01\xcc\xdc\xf4\xcb\x50\xab\x75\x00\x07\x97\x42\x27\x05\x7f\xd6\xb0\xf7\xaa\x73\x5e\xc7\xa5\x3b\x21\xa1\x49\x97\x38\xbd\x42\x85\xe5\x6d\x98\x5f\xd3\xe2\xd9\x6c\xce\x52\x0b\x13\x22\xe2\x82\x38\xb8\x14\x5a\xed\x32\x6e\x9d\xff\x14\x96\xf9\xec\xf2\x92\xbb\xb0\x03\xaa\x56\x91\x61\x95\x3d\xb5\x8c\x58\x03\x51\x8d\x97\xdf\xa5\x1c\x63\xa8\xd5\x3a\x88\x83\x4b\xe1\x6e\x84\x43\x32\x87\x94\xb9\x24\x9f\x19\x21\xc3\x85\xcc\x20\xf2\x59\xb2\x97\x42\x5f\xf6\xd8\x3b\xf1\x98\xa2\x8a\xc3\x44\x49\xef\x20\xa4\x00\xe2\xa0\x59\xe1\x74\x5e\x19\xf4\x4e\x72\x92\x14\x32\x73\xb4\x95\x7a\x8d\x6e\x11\xb5\xf5\xac\xef\x0e\x7f\x73\x75\x7f\x8c\x32\x45\xb0\x1a\x23\x67\x29\x8a\x9e\x97\x56\x49\x2a\x0c\x35\xb4\x00\x71\x70\x29\xb8\x3d\x0e\xa9\x71\x0b\x31\xa5\xda\xa9\x16\xda\x13\xa2\x8d\xbc\x98\xa1\xd8\x39\x66\x43\xb0\x44\x84\xe1\x72\xc7\x95\x57\x36\x36\x0d\x11\x17\xc4\xc1\xa5\x70\x0e\x23\x56\x36\xb4\xf7\xf7\xf0\xdc\xdc\xe6\x1d\xfd\x1b\x06\xe9\x2d\x2c\x0a\xb5\x4f\xfb\x46\x87\x25\xd7\xb0\x7b\x6e\x2e\xdf\xae\x44\xc4\x05\x71\x70\x29\xec\x7d\x5b\x32\xbe\x79\xe1\x21\x67\x80\xc3\x53\x6f\xa5\xa4\x98\xba\x1d\xfe\x92\x32\x31\xa1\xa7\xd1\x05\xc2\x4f\xdc\xe2\x46\x89\x77\xa1\xd3\x26\x00\x0e\x2e\x85\x78\x9b\x4c\x0b\xde\x3e\xd6\x20\x8e\x11\x13\x8b\x39\x82\x63\x71\x6a\x9b\x68\x15\x3e\xe3\xd7\x14\xe6\xed\x15\xa3\x26\xf2\xbb\xd5\x08\x29\x80\x38\x68\x56\x38\x9d\x57\x06\xf9\xac\x93\xbd\xb2\x1f\xde\x83\x9d\x30\x1c\x62\x4c\xaf\x6f\x26\x17\x38\xc4\xc7\xe6\x6d\x5f\x77\x58\x25\xf3\x6c\x89\xe8\x8b\xbf\xd6\x77\x90\x88\xe1\x43\xf8\x4e\x10\x87\xec\x95\x03\x2f\xab\xf4\x27\x4a\xe0\x18\xd0\x84\x7d\x29\x6f\x49\x8f\xe6\xa8\x0c\xbb\x68\xfb\x83\x72\xac\x63\x8c\x5b\x15\x35\x4c\xc9\xfb\x15\x22\x32\x88\xf3\x91\x46\xc1\xfe\x6f\x64\x27\x9d\x27\x74\xbe\x99\xca\xaf\x03\xaf\x79\xd4\xfd\xe2\x8a\x23\x65\xe5\xf2\x40\x3f\x17\x2b\x4f\x25\xe7\xa0\x28\x96\x82\x45\x0e\x9d\xee\x06\x71\xc8\x4f\xe3\xd4\xf7\x2b\xef\x5e\xba\xd2\x73\x21\x59\x9a\xed\x3b\x29\x4f\xd9\xfd\xa7\xb6\x7b\x85\x63\xac\xa5\xc4\x7e\x77\xf6\x17\x6c\x4b\x2e\xe2\xf5\xe6\x1c\xfd\xeb\x95\x9b\xc3\x51\x62\x96\x15\xe2\xd1\x64\x76\x9b\x98\x59\x71\x85\x49\x97\x57\x34\x7c\xff\x36\xdb\xb2\x5c\xdf\x75\xdc\xee\xff\x2e\x54\xfd\x0f\xca\x50\x50\x82\x77\x47\xe3\xe3\x44\x82\x48\x35\x51\x79\x92\x16\x59\x72\xf9\x5c\x80\xeb\x63\x65\x3f\x25\xe3\xf7\x21\x99\x24\xc3\xe5\xff\x6b\x5e\x19\x34\xb4\x7f\xeb\x95\x91\xbc\xb2\xf0\xc5\x81\xd1\xa5\xfb\x4a\x2f\x68\x22\x9c\x3e\x93\x0d\x7b\x17\x7c\xac\xd6\x7b\xf2\x83\xdd\x86\x34\x32\xf6\xd2\x0f\x92\xaa\xef\x43\x67\xb2\xe5\xc9\x83\x64\xe3\xf4\xbf\xea\x0f\x66\x34\x75\xb7\xf3\xe5\x47\xf5\xf5\x7c\x5d\x35\x5d\x09\x48\x35\xb8\xf6\x45\x57\x5f\x3c\xbb\x96\x4a\xea\x39\xe6\xf2\x99\x6c\xf0\x22\x7b\x65\x0a\x92\x8d\x79\x2c\x61\x6b\x43\xb9\x41\x54\x16\xab\x9e\x97\xf1\x06\x1d\xb7\xd3\xda\xa6\xaf\x25\x30\xdd\xb4\xbf\x33\x55\x94\x7b\x36\x1b\xbc\x3a\x48\x1f\x6b\x28\xb8\xfa\x89\xa5\xbf\xbb\xc3\x68\xa2\xd7\x76\x88\x75\xee\x15\x89\x47\xb7\x9a\x4f\x67\xf2\x23\xde\xf7\xaf\x83\x7f\x9a\x6d\xac\x9e\xc9\x68\x91\xbd\x72\x62\xed\x8d\xb0\x4c\xa2\xc0\xad\xbf\x49\x45\xbe\xe3\xb5\x17\xfd\x27\x45\xd0\xfc\xd5\xef\x86\xa4\xa8\xbb\x72\xa5\xbc\xed\x3d\x18\x39\x33\xaf\x0c\x12\xd1\x49\x0b\xe0\x4b\x0e\x95\x7d\x3b\xfe\xf4\x3a\xdf\x2c\xb3\x3c\xc7\x41\xc3\xc8\x6b\x6d\xe1\x7f\x16\x33\xb8\x5b\x19\x4b\x06\x38\x2c\xb6\xb0\x79\x11\x13\x3f\x88\x83\x2f\x80\x89\x5f\xa7\x9c\x66\x28\x43\x0e\x09\x55\x7c\xa3\xb3\xfa\x30\xb9\x57\xfe\x56\x0d\x67\x74\x47\x66\x4f\x31\xeb\x48\x29\x73\x7e\x81\xce\xac\x81\x38\xf8\x02\xc8\x73\xb4\x81\xcf\x5d\x30\x4e\x3c\x2d\x3e\x19\xea\x3e\x4f\x29\x72\x7c\x4c\xb7\xb9\x53\xdc\xf9\x69\x41\xbd\x3a\xd6\x15\x7d\xc3\x16\x3a\xd1\x0b\xe0\xe0\x0b\x60\x53\xdb\x63\x1a\x71\x0d\xac\x7e\x27\xed\xd0\x37\x91\x9a\x32\x41\x95\x77\x77\xb4\x7c\x8e\x05\x17\xef\x73\x7c\x7e\xca\x4f\x3a\x05\xdd\x9d\x05\xe2\x7c\x24\xff\x7b\x9b\x80\xf9\xce\xb9\x6e\x73\xce\x9a\x76\xed\xed\xeb\x66\xb7\xd6\x19\xb6\xeb\x84\xd3\x3b\x65\x43\x72\x79\xde\x69\x6a\x2d\xe9\xde\x7b\xb6\x87\xf0\xca\x20\x0e\xaa\x57\x3e\x95\x57\x06\xfd\xae\x4f\xbc\x49\x35\x98\xf6\xe0\x1b\x96\xf0\xd2\x30\x27\x5d\xcd\xf2\xee\x56\x83\xc1\xc6\xf8\xf3\x05\x67\x72\x6d\x42\x89\x49\xd3\x75\xbf\x5a\x61\x68\x67\x1d\xc0\xc1\x95\x70\x5f\x9b\x81\x1c\xd7\x9e\x72\x53\x84\xff\x5c\xc0\x1d\x85\x2d\xb9\x4b\x43\x8d\x8a\x69\x94\x38\xe2\xd7\x29\xcd\xcd\x77\xba\x65\xd9\x10\x71\x41\x1c\x5c\x09\x65\x76\x0c\x49\xea\x34\x73\x28\x5e\xba\x0c\x52\x8d\x01\x23\xe4\xe8\xb9\x89\xca\xe8\xfe\xc6\x2b\x77\x4a\x03\x16\xfd\xd2\x0f\x72\x11\x71\x41\x1c\x5c\x09\x66\x69\xea\x35\xcc\xa5\xd4\x55\x42\xf3\x0c\xe5\xad\x63\x2a\xef\x5d\x43\x48\xfa\x75\xd7\x2e\x63\x3d\xb7\xbe\xb0\x12\x65\xd7\x0a\x75\xfe\x05\x71\x70\x25\x14\x88\x6a\xaa\x70\x1f\xe6\xcd\x84\x25\xb1\xd1\x3f\x59\xfc\xb9\x94\x37\x1d\x69\x32\xa5\x61\xca\x94\x43\x4f\x77\x29\xe3\x55\x35\x74\x25\x08\x88\x83\x2a\x13\x79\x4e\xf5\x56\x0c\x9a\x6b\x4f\x92\x02\xb3\xa6\xf3\x57\x77\xbe\x87\xe7\x5e\x29\x49\xef\x47\xf6\x30\x94\x31\xde\x0b\xe1\x74\x7e\xbc\x23\x64\x98\x48\x71\xef\x4b\x8c\x8f\x0a\xe2\x11\x80\x38\xb8\x14\x2e\x5b\xe5\x09\xbe\x91\xc0\x1a\x36\xbf\x17\x9e\xa2\x37\xed\x68\xbc\xa5\x1e\x28\x32\x30\x15\x4c\x81\x89\x7e\x65\xe1\xbe\x54\x2b\x11\x22\x2e\x88\x83\x4b\xa1\x3f\x38\x8c\xaa\x75\x40\xd6\xd6\x44\x7b\x24\xf9\x49\xb4\x6b\x65\x14\xc3\x0a\x0e\x17\x7a\x74\x54\x48\xe7\x5b\xd6\x90\xbf\x29\xf1\xd0\xe1\x18\x00\x07\x97\x42\x69\xb8\x70\x58\xb7\x2f\x71\xbd\x28\x17\xf9\x87\xbf\xf4\x5e\xb1\xb3\xa3\x6a\xb6\x1f\x64\x1f\x95\x47\x07\x4e\x0e\x54\xa5\x2b\x43\xad\xd6\x41\x1c\x5c\x0a\x69\xa2\x22\x51\x78\x25\x7a\x37\x7c\x6f\x09\xe8\x91\x5a\xcb\x86\x2b\xce\xb0\x62\xc7\x14\x08\xbe\x9b\xac\xf9\x5e\x61\xd9\xfd\x68\x1f\x21\x05\x10\x07\x55\x26\x9e\xce\x2b\x83\xd6\xbf\x93\xa4\x70\xdc\xb2\xc4\xf1\xb2\x6e\xaa\xeb\x7a\xa7\x9f\xe4\xf9\x0c\x0e\x81\x67\x7f\xac\xc2\xec\x06\xe6\x43\x6e\x1f\x47\xfd\x58\x44\xfb\x38\x88\x78\x04\x20\x0e\x2e\x05\xf3\x45\xfd\x54\x0d\x75\xaa\xed\xde\x02\x3e\xfc\x85\xbb\xf1\xb2\x35\x4f\xe4\xca\x49\x3f\x53\xbd\xba\x3e\xa3\xd3\x18\x9d\xe7\xfb\x08\x6a\x90\x04\xe0\xe0\x52\xf8\x68\xab\xcf\xf5\xb3\xb1\xde\x63\x70\x8b\x7f\xee\x6a\xf1\xc5\xb6\x77\xd1\x57\x17\x1a\xaf\x7d\xb3\x3a\xb6\xec\xda\xc2\x43\xab\x87\x66\x31\x10\x07\x97\xc2\xa7\x8c\x41\xd9\x42\xf6\x0b\x62\x31\x4d\x23\x14\xa2\x11\xf1\x29\x75\x64\xe2\x51\x8b\x43\x4d\x5b\xf3\xad\xf2\x66\x7a\x14\x7d\xd0\xa6\x2a\x88\x83\x4b\xe1\xc1\x5c\xeb\xd8\x8e\xb4\x18\xba\x57\x83\xc1\x0d\x4a\x77\x73\xd9\xd7\xb9\xc6\xef\x93\x8f\xed\xb4\x94\x1d\x9e\x58\xac\x38\xd8\xba\x22\xa4\x00\xe2\xa0\x59\x41\xe7\x54\x52\x00\xbd\x93\x9c\x24\x85\x2f\x4d\xec\xc3\x8f\x88\xfc\xac\x9f\x5e\xed\xab\x19\xad\x76\xbd\x25\x8d\xed\xb1\x62\xc5\xc4\xd8\x28\xfa\x2b\x4b\x89\x20\xf9\x40\x15\x3a\x65\x01\xe0\xe0\x52\xf0\xca\x9a\x0a\x7f\xf4\x69\x6b\xff\x53\xe8\xce\xae\x61\x7c\xd8\x2f\x8b\x26\x8f\xd7\xfb\x4a\xea\xdb\x29\xcf\xbf\x37\x1e\xbe\x7f\x73\x17\x11\x17\xc4\xc1\xa5\x10\x5c\x19\x96\xf1\xd2\x45\xb5\xca\xbe\xdd\x41\xf3\xc3\xa7\xb8\x44\x8c\x1d\xb9\x5c\xd7\xc7\x1c\x3f\x6f\x3c\x32\xe0\x48\x14\xed\xee\x43\xc4\x05\x71\x70\x29\x50\xd1\xcb\xab\x34\x5f\x75\xf8\x40\xf4\x4d\x94\x5d\x20\xee\x3b\xf7\xd6\x4a\xea\xb0\x78\x0d\x8d\xb3\x32\x77\x0d\x0d\x29\x86\x4d\x21\x22\x2e\x88\x83\x4b\xa1\xb8\xf7\x6b\x7c\xdb\xf0\x5c\xb7\x10\xa3\xb4\xd2\xa4\xb7\xe6\x21\xa5\xe1\x73\xd2\x35\x11\x0d\x1e\x7a\x82\x60\xd3\x6e\x61\xd4\x18\x68\x5f\x19\xc0\x41\xb3\xc2\xe9\xbc\x32\xc8\x67\x9d\xec\x95\xc9\xa7\xdf\xab\x37\x4e\x6d\xc9\xa6\x1e\x27\xeb\xcc\x26\x0c\x0a\x18\x37\x1c\x1a\xdc\xba\x97\xc4\xf6\xab\xa0\xf7\xed\xc4\xa6\x63\x3f\xc2\x77\x82\x38\x64\xaf\xac\xfd\x61\x59\xcf\x5a\x6e\xdf\x6d\xb5\xe3\x45\xd7\x43\x61\x77\xe7\xb5\x7a\xf9\x89\x6b\x66\x6f\x78\x6d\x4a\x30\x95\x16\x12\x6f\xfe\x42\x44\x06\x71\xc8\x5e\x39\xf9\xc6\xf6\x6f\x27\x35\xbc\x66\x02\xbe\xe8\x17\x99\x75\xda\xd8\x77\xba\x9f\x60\xb7\x5c\xef\x28\xca\xa8\x74\xe4\x8b\x2b\xb3\x79\x88\x88\x0c\xe2\x7c\xa4\xcf\xc1\x9e\xc6\xa9\xef\x57\x6e\x5f\xc9\x2d\x12\x24\x1e\x40\x27\x1c\xed\x1f\x97\x23\x3d\x22\x96\x6b\xf5\xdc\x54\x9c\x57\xb2\x23\xde\x5c\xaf\x64\xed\x68\xe6\xfd\xd7\x2b\x1f\x6b\xd2\xcf\x31\x8e\x0e\x8c\x57\x5e\x41\xbf\x48\x97\xe8\xd4\x13\x54\x46\x41\xce\xc4\x20\x4d\x6a\xd6\xee\xab\x73\x53\x27\x1a\xed\x1f\x34\x75\xa9\x6e\x39\x61\xa6\x9c\x40\xc4\xb3\x49\xba\xa3\x2a\x4f\xb6\xd2\x09\x23\xbb\x7a\x9c\xdd\x56\xf6\xf8\xf6\xf1\xb8\x02\xc9\xf0\xff\x9a\x57\x06\x0d\xed\xdf\x7a\x65\x24\xaf\x6c\xeb\xba\xbb\xb7\x33\xe4\xc0\xf9\x46\x50\x70\x2d\x64\xcb\xbc\xc1\x7c\x31\xff\xc1\xe6\x0c\xf7\x32\x55\x6f\xf2\x78\x92\xa4\xd0\xc4\x99\x6c\x79\x22\x7b\x65\xc5\x54\xbc\x67\xca\xdc\xeb\x8b\xb9\x46\xf4\x74\x5f\x05\x34\x2f\x0c\x48\x46\xb1\x32\xf6\x0e\x78\xf1\x93\x7e\x21\x61\xa6\x9e\x36\x3d\x93\x0d\x5e\x64\xaf\x8c\xb2\x5f\xfb\x0a\x85\x1a\x4b\x3d\xfc\x95\xb5\x86\x90\x9c\x7e\x6c\x91\x53\x89\x8a\x5e\x08\x7a\x9b\x43\xd5\xb5\x1c\x99\x66\xc1\x33\xe8\x0c\x1d\x24\x7d\x0b\xd9\x2b\x0b\xd3\x71\x6d\x99\x84\x0b\xdc\xae\x5a\x62\xe1\xd7\xc2\x13\x16\xa3\xf4\x09\x28\x74\x33\x6e\xfe\x8d\x99\xf9\xee\x6a\x7b\x59\x32\xe1\x99\x8c\x16\xd9\x2b\x2f\xde\xd1\xbe\xbe\x5b\x93\x53\x5b\xfd\xac\xf7\xef\xea\xd8\x04\x8d\xbb\x36\x71\xd7\x90\x3b\xab\x62\xff\x9f\x8c\xb0\x23\xb2\xe3\x9c\x33\xf3\xca\x20\x11\x9d\xb4\x00\x16\xd9\x6a\x6d\xd0\x09\x8b\xb3\x27\x9b\x9a\xfc\xc9\xa9\xe2\x13\x34\xbb\xe9\xd9\x37\x8c\xfd\x59\x2f\x26\x8a\x59\xf9\x9b\x6b\x14\x74\x50\x09\xc4\xc1\x17\x40\x85\x7b\x85\xbf\x5f\x2f\x31\xfe\x5c\x5b\x36\x6c\x8e\xeb\x7d\xdf\xb0\x19\xd1\x84\x13\x32\x7f\x49\xd3\xc2\x65\x27\xa0\x7e\x4a\x1b\x13\x11\x17\xc4\x21\xfd\x59\xbc\x32\x36\x11\xac\x49\xa1\x25\x66\xc2\xc4\xf4\x31\x2e\x64\xe5\xbe\x27\x0f\x59\x91\x3d\xe9\x7a\x4a\xd2\x25\x96\xed\xc8\xfe\x44\xe8\xcf\x62\x00\x07\x5f\x00\x6f\x51\x5d\x98\x75\xa3\xde\xbc\x57\xd8\xb8\x29\x4c\xc6\xf8\x3a\x5b\xfb\xbd\xe8\xf9\x3f\x22\x2a\x84\x7c\x98\x13\xf7\x51\x94\xff\xae\x42\xf5\xca\x00\xce\x47\xf2\xbf\x1d\x12\xc5\x58\x71\x26\x39\x95\x88\xba\x38\x02\x0e\x1a\x0b\x4a\x9f\x70\xf1\x2f\xf6\x95\x89\xa7\xeb\x59\xbd\x1a\xe7\x88\x4a\x64\xcd\x12\x42\x78\x65\x10\x07\xd5\x2b\x9f\xca\x2b\x83\x7e\xd7\x27\x29\x41\x8c\xb9\xd2\x76\x72\xfb\x89\x3a\x39\xae\x6e\x3d\x27\x4d\xe1\xd7\x4b\x79\x5d\xca\xec\x2f\x2f\x77\x27\xac\x85\x17\xab\xa3\xfc\x85\xba\xf8\x80\x38\xb8\x12\xec\x89\x36\xac\x5a\xcb\xe7\x55\x98\x19\xbb\x2a\x34\x88\xb3\xb7\xcb\xd7\x66\xee\xf7\xf1\xb3\x84\xe7\x71\x4f\xdb\xf9\xcc\x12\x77\x21\xe2\x82\x38\xb8\x12\xee\x10\x66\xae\xf0\x60\x85\x35\xa1\xfc\xbe\x80\xca\xb3\x29\xa8\x21\xae\x2c\x67\x24\x75\x7b\x4a\xaf\xf3\x42\xa0\x89\x2c\x15\x1b\x16\x22\x2e\x88\x83\x2b\x61\xa4\x2f\xa7\xe7\x35\x0e\xcd\x8e\x13\xf3\xd4\xda\xfc\xbd\xaf\xb4\x15\xf6\x76\x21\x44\x14\xcb\xe6\x26\x6e\xa1\x92\xac\x1a\xfc\x4c\xd0\xd9\x6e\x00\x07\x57\xc2\x9b\x3a\x36\x39\x53\x74\x51\xe1\xab\xa2\x51\xe5\x73\x34\x6e\x81\xd1\x4b\xf1\x2f\xae\xdb\xfa\xb4\x7e\x12\xf3\xe3\xee\xbd\x62\x63\x87\x78\x15\x02\x71\x50\x65\xe2\xe9\xbc\x32\x68\xae\x3d\x49\x0a\x0a\x39\x77\xc6\x2f\x6c\xe9\xf1\x5a\x19\x61\xaf\xac\xfc\xc6\x18\x21\xc9\x0b\x18\x3e\xcf\x37\xa4\x7a\x9b\xdc\xe0\xc8\xdc\xb3\x07\xea\xe2\x03\xe2\xe0\x52\x28\x15\x31\x90\x18\x8d\xe2\x49\x59\xdc\x79\xfd\x80\xeb\x3d\x9e\x92\x5a\xb9\x4d\xef\xc5\x4f\x7e\x4a\x16\x4f\xc6\x1e\x7f\x24\x79\x96\x0e\x79\x4f\x00\x07\x97\x42\x8c\xc6\x48\xaa\x34\xff\xad\x44\xac\x5f\x45\x25\xb6\xc3\xa4\x3d\xe2\x6a\x4c\xdf\x54\x83\xf4\x39\x9f\x09\xdc\x65\xed\xbb\x86\xb2\x8e\x88\x0b\xe2\xe0\x52\x98\x51\x60\xe9\x7a\x75\x6e\x3e\x79\x23\xc3\xfa\x66\xc0\xc5\xa5\xd2\xb6\xc5\xbf\x6a\xdd\xc2\x22\x2d\xf1\x83\x53\x4d\xc2\xf4\x7f\xab\xa1\x23\x11\x00\x0e\x2e\x85\xab\xd1\xe6\x41\x57\x4a\x29\x0b\x2d\x51\x33\x22\x2d\x98\x5d\x17\xd3\xa8\x89\x98\xbf\x15\x64\x90\x26\x68\x73\xfe\xc6\xb2\xf5\xfd\x81\x90\x02\x88\x83\x2a\x13\x4f\xe7\x95\x41\xeb\xdf\x49\x52\xd8\x43\xed\x75\xca\x2a\x7d\x9b\xbe\xb3\x61\xd2\xe1\x80\x92\xbc\x74\xbc\xea\x3a\x8e\xdf\x20\x21\x33\x4c\x86\xfb\x23\xe7\x6a\x6e\x06\xb4\x89\x06\xe0\xe0\x52\x20\x1b\x1c\x4b\x72\x55\x3d\xf7\xf0\x1a\x06\xe9\x40\x7e\xf2\x97\x4f\xaf\xb4\xe5\x87\xc4\xd7\x71\x24\x83\x59\xc3\xec\xe2\x74\x3e\xcc\x20\xe2\x82\x38\xb8\x14\x1e\x0c\xdd\xe5\x6b\x58\x79\xb0\x6e\xa1\x3b\x13\x68\xee\xb9\x29\xee\xd5\x38\xbc\xec\x78\x4c\x30\x88\x27\xb9\x44\x26\x9d\xb6\x0a\xfd\xd3\x05\xe2\xe0\x52\x40\x5f\x48\x7f\x19\x16\xd3\x9a\x7b\xd1\x74\x1e\x7d\xf7\x20\x85\x63\x6b\xa4\xbe\x75\x55\x3f\xf8\xb9\xef\x27\x93\x8e\xc1\xc4\x31\xa8\x43\x21\x88\x83\x4b\x61\xbb\xfe\x71\xd4\x7b\x53\x39\x81\x32\xb4\xc9\xd9\x37\x97\xac\xd0\xa3\xbe\x38\xd8\x38\x06\x76\xec\x70\xd8\xe1\x77\xe2\x1c\x30\x40\x6d\xde\x40\x1c\x34\x2b\x9c\xce\x2b\x83\xde\x49\x4e\x92\xc2\xf3\xbf\x5a\x41\x36\x9a\x0f\xad\xbc\xb9\xe9\x1c\x87\x7f\x8f\x3b\x36\x59\x0d\x3a\x0d\x8f\x67\xc4\xa3\x5a\x96\xb3\x19\x6d\x3f\x84\x8a\x5e\x40\x1c\x5c\x0a\x56\x09\x7b\xba\xdd\x9f\x5e\xaf\x98\x27\x79\x68\xcb\x36\xa8\xbf\xd7\xfc\xee\x66\xea\x4e\xab\xd2\x72\x7e\x92\x80\x85\x64\x3b\x48\x06\x11\x17\xc4\xc1\xa5\x50\x74\xf3\x45\x06\xa6\x6f\xc3\xa3\x5b\x6b\xe4\x22\xe2\xfa\xe7\xb1\xde\xcc\x50\xca\xdc\xd4\xc6\x1a\x11\xff\x6a\x92\x28\x6f\xd4\x06\xf5\x0c\x03\x71\x70\x29\x50\xbe\x68\x95\x47\xdd\xe4\xfa\x3e\xcf\x83\x3b\x3b\x2e\x64\xc4\x74\xbd\xe2\xdb\x14\xf6\xad\xd2\x95\xad\xe2\x96\x8c\x1f\x76\x8a\x90\xb7\x07\x71\x70\x29\x90\x39\x5f\x21\x0c\xc2\x63\x25\x79\x6e\xad\xf1\x4a\x29\x8b\x2c\xe7\xa3\xb5\x7e\x76\x82\xe1\x96\xab\xbf\x04\xc1\x2e\xff\x92\xbb\x19\x42\x0a\x20\x0e\x9a\x15\x4e\xe7\x95\x41\x3e\xeb\x64\xaf\xfc\x79\xba\x43\xfc\x79\x37\x45\x55\x52\x7f\x26\x69\xfa\xf8\x3e\xea\xf0\x5f\x5d\xb4\xc9\xba\xb6\x91\xeb\x78\xb5\x72\x25\x5a\x65\xde\x08\xdf\x09\xe2\x90\xbd\xf2\x79\xdf\xcb\x41\xe6\x0c\x58\xd5\xb8\x26\x0b\x42\x74\x2a\x82\xc5\xca\xd6\x0d\xd8\x4a\x9f\xf2\x27\x59\x0e\xc2\xd6\xdb\xf3\x85\xe2\x10\x91\x41\x1c\xb2\x57\xae\x95\x9f\x88\xe8\x93\x57\xad\x50\xb8\xe0\x2a\x96\x96\xe1\xc0\xd3\x5e\x3b\x40\x6e\xdb\x93\xfe\x15\x4b\xb5\x49\x36\x8d\x6d\x31\x07\x11\x19\xc4\xf9\x48\x13\xc3\x9e\xc6\xa9\xef\x57\x16\xad\x8c\xcc\xea\xda\xc2\xbb\x75\x8e\x79\x2f\x29\xf7\xab\x19\xa5\xf7\xc3\x8f\xab\x1b\x13\x3b\x95\xec\x12\xba\x46\x2f\xda\x6c\xb2\xfe\xf5\xca\xfe\xf8\x49\x16\x87\x7b\x49\xfe\x8c\xbe\x25\x25\x13\x97\xf4\x57\x6d\x0a\x04\x39\xf6\x6c\xa4\xa4\xf8\xdf\x9c\x73\x8e\x91\xbd\x3e\xf0\x0f\x1a\x72\xf8\xd1\x7e\x43\x15\xcb\xed\xad\x70\x9d\xb2\x7e\x9c\x60\x3a\x0e\xdd\xa6\xe1\x36\xfb\x8d\x2e\xbb\x20\x2b\x0f\xe3\x7a\x57\xce\xff\x35\xaf\x0c\x1a\xda\xbf\xf5\xca\xf2\x70\x3f\x25\xe0\x40\xa1\x17\xef\xd3\xee\xca\x80\xaf\x58\xef\x5a\x13\x97\xff\x8b\xbd\x2a\xef\xc7\xeb\xdb\x81\x6d\xaf\x76\xe2\x76\x6e\x91\xaf\x9f\xc9\x96\x27\xb2\x57\x76\xcb\x98\xb8\x3d\x1d\xb6\x3d\x4f\xf6\x23\x67\x23\xc8\xd9\x43\x86\x5a\x9e\x75\x97\xbf\xc0\xb9\x58\x07\xe5\x07\xd5\xee\xbd\xc8\x8c\x33\xd9\xe0\x15\x47\xfa\x58\xb3\xdb\x33\x8d\x8f\x5f\x4d\x8d\x61\x3e\xf7\xf4\x09\x8b\x4d\x50\x7f\x79\x67\xef\xf5\x53\xe2\x14\x86\x5d\xa6\x23\x39\x4d\x75\xe2\x67\x67\x32\x5a\x64\xaf\xec\x7a\xd9\xeb\xee\x65\x79\xfb\xa1\x79\x63\xdc\x88\xad\x6f\x38\x03\x86\x7d\x65\xf1\x25\x8d\x58\xc9\x46\x1a\x1c\x3b\xaf\xda\xc5\xcf\xa0\x70\x38\x48\x1a\xc5\x09\xe9\x63\x31\x23\xa6\x74\x1f\xd0\xde\xb4\x1b\x48\xbb\x3b\x91\xf2\x7b\xc1\x49\x4b\xf0\x6e\x88\xdd\x5b\xd3\x26\x15\xf6\xf9\x0c\x5a\x1c\x83\x33\x28\x0a\xd7\x3d\x9d\x88\x4e\x5a\x00\x65\xa4\xc2\x1f\x15\x8a\x7e\x1d\x2e\xe7\xbf\x5e\xba\x21\x9b\x3c\xf2\xd4\x4c\xfc\x2f\xf9\xbb\xde\x15\x79\x9c\xf3\xa2\x62\x6b\xa4\x1d\x88\x89\x1f\xc4\xc1\x17\xc0\xc2\x71\xfb\x02\x95\xf4\xbb\x1e\x17\xd6\xa4\x4c\x72\x68\x1f\x3c\x2b\x56\xf0\xc7\xdc\xfb\x30\xba\x4d\x86\x7f\x98\x4c\x2a\x4a\x3e\x06\x9d\xed\x06\x70\xf0\x05\xf0\x55\xf0\xfa\xed\x16\x15\xa5\x62\xae\xfc\xbe\xcd\x34\xa5\xd8\x4a\xe5\xd1\x6d\x91\xd9\xf5\xec\xa9\x7e\xbc\x6d\x56\x0f\x67\x51\xa8\x0e\x1a\xc4\xc1\x17\xc0\x07\x22\x9c\x83\xed\xf2\x96\xe4\x71\xda\xdf\xf9\xb7\xf8\x3d\x95\x25\xae\x35\xc4\xef\x64\xb6\xd7\x75\x39\xae\x51\xd0\x1b\x9b\x43\x17\x4c\x80\x38\x1f\xc9\xff\x76\x7d\x28\xc4\x1a\x92\xe1\xbb\x70\x10\x45\x4c\x72\x70\x63\x5f\x8a\x78\x9b\xb7\x20\x6d\xd6\x62\x25\x7a\x47\x74\xef\xcd\x6d\x66\x4a\xcc\x30\x84\x57\x06\x71\x50\xbd\xb2\xfc\x69\x5e\x85\x40\xbf\xeb\x93\x94\x50\x83\xde\x70\x81\xc5\x41\xf1\x71\xc1\x67\x5a\xab\x5f\x92\xc4\x7d\x4f\xf2\x7e\xa6\x5c\x32\x2e\xc0\x10\xc3\x0f\x2a\x28\x14\x8b\x6c\x86\x2a\xc1\x01\x1c\x5c\x09\xb2\x75\x37\xd0\x89\xf2\x2a\xd0\x3f\x4c\x76\x0d\xad\x1e\x98\x70\x9c\x7f\xd4\x7e\xa7\x89\xc9\xb0\x2b\x48\x6e\xd9\x59\xf9\xb7\xd7\x34\x22\x2e\x88\x83\x2b\x61\x6b\xa1\x91\x65\x92\xc3\xae\x82\x3e\x33\x5f\xff\xc7\xdb\xa7\x83\x21\x0a\x74\x8a\xe4\x47\xb1\xe8\x1e\xdf\x82\xf8\x85\x9b\x57\xaf\x23\xe2\x82\x38\xb8\x12\x94\x7c\xeb\x30\xb3\x98\xe3\x0a\x16\xa8\xe2\xfc\xc5\x9c\x0e\xa2\x9f\x50\xaf\x66\xfe\xe8\x45\x4b\x8a\x8c\x65\x74\xec\xf7\xf3\x81\x6e\x1c\x07\x71\x70\x25\x5c\x15\x79\x1e\x85\x56\x71\xa8\x1c\x6a\x99\x80\xa2\xaa\x1b\x7e\x1e\x25\x59\xca\x57\x4a\xf0\xe9\xf6\xe1\xe3\xfe\x5d\xaf\x2b\x74\xa6\x90\x41\x02\x70\x50\x65\xe2\xe9\xbc\x32\x68\xae\x3d\x49\x0a\xc4\x6b\xb1\xe7\xf6\x0a\xfb\xdc\x30\xd9\x3b\x59\x4a\xbb\x59\x67\xbe\x0c\x44\xfe\x4e\x8b\x50\xb4\x17\x38\xaa\x25\xbd\x5f\x40\x0f\x79\x65\x10\x07\x97\x42\xd9\x85\x56\x2b\x7d\x09\x0a\xab\x88\xa2\x26\xf2\x0f\x42\x16\xd2\x9e\x05\x55\xee\xf2\x6b\x62\xce\xc6\xee\x66\xec\xc4\x9f\x05\xa1\x66\xf3\x20\x0e\x2e\x05\xa3\x6a\x92\x9d\xa9\x6f\x1a\x9b\x28\x93\x57\xb3\xa8\xdf\x2e\x8f\xd8\x79\xfa\x9a\xbd\xb2\x6d\xc1\x19\x3e\x4a\x4e\xda\xc3\xd7\x2c\x80\x3a\xe9\x02\x38\xb8\x14\xc2\xe9\xdf\xe7\x9b\x0f\x0f\x88\xe8\x34\x9e\x6f\x26\x49\x88\x5b\xcd\xd3\x8e\x19\xa4\x8b\xc2\xba\xe4\xc1\xdc\x6f\x26\x91\xe3\x06\x9d\x45\x07\x71\x70\x29\xd0\x48\x12\x3d\x17\xb1\xc7\x6f\x38\x2e\x28\x7b\xc2\xfb\x74\x97\x3b\xda\xa1\x41\xf5\xc0\xe6\xfc\x26\x36\x25\xed\x80\x84\x70\x13\x2f\x42\x0a\x20\x0e\xaa\x4c\x14\x3f\x5d\xf3\x63\xc0\xfa\x77\xa2\x57\x3e\xa0\xcc\x57\xf5\x89\x21\xf7\xf7\x7f\x4f\x10\x79\x8d\x8d\xf9\xc0\x81\x93\x6d\x90\xb5\xc6\xcb\x07\xaf\xb9\x95\xa6\x7e\xf0\x25\xe4\x95\x01\x1c\x5c\x0a\x0c\x29\x2e\x6a\x1d\x54\x01\x61\x71\xd9\x63\x8f\x63\x19\x39\x34\x88\x2d\x38\x2e\xa3\xa0\x46\xb7\x0a\x08\x62\x5c\x8e\xbb\xb0\x00\xdd\x57\x0c\xe2\xe0\x52\xa0\x99\xaa\x2a\xac\x9c\x9d\xb6\x3c\x94\xdf\x9e\x7d\x9d\xb3\x8b\x36\xd2\xd2\xfd\xa6\xf7\x61\x9e\x83\x85\xa9\x3c\xcd\x52\xf8\x14\x74\xcd\x17\x88\x83\x4b\xc1\x36\x9b\xa4\xe0\x55\x0f\x9f\x4d\x9d\xcb\x5f\x1f\xd4\x9b\xca\x24\xde\xb5\x3b\x9c\x25\x2f\x74\x32\x8b\xf3\x96\xac\xdf\xbc\xe9\x93\x46\xc4\x05\x71\x70\x29\xbc\xca\x6f\xd9\x6b\x9d\x7a\x21\xde\x73\x3b\xb1\xd2\x2e\x34\xc1\x58\xdc\x97\x97\xc6\xc5\x7c\x0d\x7b\x75\x99\x69\x5e\xfc\xcf\x55\x0e\x84\x14\x40\x1c\x34\x2b\x9c\xce\x2b\x83\xde\x49\x4e\x92\x02\xfe\xb9\x85\xe1\x2e\x13\xaa\x70\xcb\xfe\x94\x05\xed\x32\x3d\x86\xab\xa3\xb6\x6a\x55\x17\xcb\xef\xab\x7d\x16\x79\x53\x7f\x5c\x1e\x85\x78\x04\x20\x0e\x2e\x85\x0e\x37\x5b\xdd\xfa\x22\xfe\x7d\xef\xe8\xe6\x59\xe1\xec\x2d\x5c\x89\x1f\x8d\x2a\x8b\x75\x2f\x17\x34\x8b\xbe\xbc\xfa\x45\xc1\x01\x95\x55\x81\x38\xb8\x14\x4a\xe7\xfc\x2b\xee\x62\xea\xa1\xbc\x56\x9b\xb5\x24\x4e\x0d\x0f\x6f\x30\xa6\xe2\xa2\xb8\x8d\x9e\x7a\xfd\xe2\x46\x94\x96\x71\x20\x06\xf4\xcf\x1c\x80\x83\x4b\x81\xbe\x55\x74\x3c\x09\xe5\x81\xc3\xaa\xea\x2d\x5c\xaf\xdf\x9d\x4e\x1f\x2a\x93\x23\x69\x0a\x24\xf2\x0d\x8e\x57\x28\x54\xae\xa6\x40\x37\xdf\x81\x38\xb8\x14\xfc\x64\x84\xd5\xb1\x3f\xbc\x72\x2e\x74\x7b\xc8\x9a\xb2\x7b\xed\x20\xd6\x0f\xc3\xd8\xab\x24\x49\x41\x2e\x89\x4d\xfb\xc3\xe6\x17\x26\x84\x14\x40\x1c\x34\x2b\x38\x9d\xca\x2b\x83\x7c\xd6\xc9\x5e\xf9\x0a\x29\xe1\xf7\x0f\x1a\xa4\x96\x13\xc7\x64\xc3\xe3\xf5\xea\x69\x5a\xbb\x98\xde\xb1\xfb\xa5\x76\x28\xef\xc8\x1c\x95\x56\x93\x97\x11\xbe\x13\xc4\x21\x7b\xe5\x47\x33\x61\x02\xe8\xe2\x3d\x74\x76\xaa\x33\xfd\x81\xe7\xe7\x18\xe9\x53\x51\x23\x26\x43\x54\x2f\x79\xcc\x75\x10\xea\x77\x14\x62\x20\x22\x83\x38\x64\xaf\x8c\x3e\x6d\xb0\x58\xf8\x30\x89\xfc\x48\x92\xab\x2f\x32\x62\x51\xed\x6d\x84\xf9\xf1\xaf\x1b\xdd\x4e\x26\xe4\x2d\x71\xab\x8e\x5b\xd0\x77\x06\x71\x3e\xd2\xb7\x60\x4f\xe3\xd4\xf7\x2b\x7f\x21\x4f\xe8\xfb\x45\xcb\x36\xe4\xa4\x34\xaa\x98\x4f\xbe\x8d\xbe\x52\x2b\x9a\x2b\xd8\xf6\x8b\x22\x35\xa3\x0f\x63\xcd\x1b\x67\xfa\x5f\xaf\x2c\x84\x13\xd1\x41\xee\x22\x77\x79\xcb\xdb\xa6\xfd\x0f\xad\xd8\x1f\xdc\xeb\x54\x5b\x1f\x2b\x6f\x62\xe6\xf1\x3d\xbd\x2b\xa3\xb5\xb8\xf2\x0f\xaa\xee\x95\xb6\x99\x5f\x25\xf6\xbc\xf9\xb9\x0c\x5f\x69\xdc\xc2\x0c\x83\xb7\x65\xa1\x24\x15\xc9\x79\x45\x0c\x6c\xac\x98\x2b\x9a\x2b\xff\x6b\x5e\x19\x34\xb4\x7f\xeb\x95\x91\xbc\xb2\x29\x4a\x22\xf7\x0d\xd5\x74\x59\x29\xb6\x9e\xde\xc0\xe3\x44\xff\xbe\xfa\x4f\x71\x81\xd9\x77\x02\x1c\xff\xda\xe9\xc8\xbf\x54\x18\x3e\x93\x2d\x4f\x64\xaf\x6c\xaa\xf3\xdb\x59\xd0\x48\x5d\x85\xf0\xc9\x4f\xf6\x58\xaa\x86\x68\xb1\xab\x1b\xb4\xfc\xcf\x2b\x5a\xea\xd5\xc8\xe4\x2f\x95\xad\x9e\x89\x7b\xbc\x85\xec\x95\x5d\x34\xf2\x83\x73\xd4\xc6\xb5\xa6\x14\x89\x7f\xcd\x0e\x61\xbf\x25\x1e\x11\x3f\xb8\xf8\x89\xcb\x58\xe4\x07\x43\x85\xf9\xd7\x99\xa7\x67\x32\x5a\x64\xaf\xfc\x2c\xa6\x33\x29\xfb\x19\xab\xab\xd7\xc8\xca\xc3\x3a\x7b\x9d\x1a\xc7\x1a\x4f\x19\xc6\xfd\xc5\xfe\x8c\x95\x69\x1f\x5c\xd7\x42\xfb\x33\x19\x2d\xb2\x57\x9e\x2a\xfa\x6d\xba\xcc\xb9\xce\x36\xa9\xb6\x1f\xff\x94\xce\xc5\x82\xd3\x60\x32\x80\xa9\xd1\x91\x48\x65\xa2\x8e\xdd\xf0\x3a\xe6\xb5\x33\xf3\xca\x20\x11\x9d\xb4\x00\xca\xbe\xf6\x9e\x3e\xcf\xb9\x2a\xd3\xd1\x90\xf6\x66\xfd\x78\xe9\xf8\xb1\xf7\xaa\xca\x63\xfb\xc7\xad\xfc\x52\xc6\x9c\xbd\x5d\x1a\x50\xb1\x10\x88\x83\x2f\x80\x49\x37\xf4\x82\x24\xc5\x2b\x56\xf4\x76\xda\x22\xcc\xb3\x26\x04\x76\x86\xe5\x1f\x2d\xef\x87\x6e\x8d\x7d\x4f\x1c\x2d\xcb\x74\xa0\x80\x2e\x56\x00\x70\xf0\x05\x70\xba\x49\x16\xe7\xe8\x9d\xf2\x5c\x8e\x48\x5f\xd2\x1d\x8f\x57\xe1\x13\x1c\xa9\xc7\x3b\x14\xe7\xd5\x65\x83\x71\xd0\x0f\x15\x53\xfa\x11\x71\x41\x1c\x7c\xa1\xba\x2f\x1e\xbd\x73\x20\x26\xe5\x45\x64\xb3\x3f\x59\xee\x3d\xe6\x63\x68\xee\xb4\x85\x75\xd8\x7b\xe3\x4a\xe3\x4e\x97\x8e\x47\x1c\x01\x74\x52\x18\xc0\xc1\x9f\xaf\x61\x5c\x78\xcf\xe0\x40\x80\xd5\xf8\x23\x22\x4f\x19\x9b\xcc\x56\x81\x6c\x91\x79\xc2\xe1\xd8\x49\xf7\x73\x52\x9e\x4a\xfc\x73\xd7\x11\x5e\x19\xc4\x41\xf5\xca\xa7\xf2\xca\xa0\xdf\xf5\x49\x4a\x78\xe4\x92\x32\xf2\x44\xdf\xc4\x50\xec\x6a\x31\x79\xe0\x12\x76\xec\x37\xb4\xba\x67\x3e\x66\xbb\x63\xfe\xd1\xb3\x7f\x76\xdb\xb2\x26\x11\x4f\x00\xc4\xc1\x95\xa0\x7f\xcf\x5f\x2a\x6f\x74\x49\x33\x9f\x27\xee\x7b\xbb\xbb\xee\xcf\xb7\x05\xee\xa6\x53\x07\xc4\xe1\x4f\x8c\x2d\xc6\x03\x27\xed\xa0\x93\x0b\x20\x0e\xae\x04\xd7\x9c\x8f\xf1\x92\x3e\xdb\x57\x0a\x47\x04\x59\xb2\xa8\x38\x31\x1b\xd2\x25\x05\x44\xe7\x79\xd5\xda\x48\x16\xf1\x5b\xc5\x16\xa1\xce\xe5\x20\x0e\xae\x84\x25\xea\x95\x2a\xa9\x1e\x03\xab\x8a\xd0\x2b\xda\x6c\xfa\x79\x11\xf9\x18\x6b\x65\x25\x4e\xbf\xcd\xc8\xfc\x8a\x8e\x76\xf1\x23\xa0\xa6\xca\x20\x0e\xfe\x7c\xe9\xaf\xe2\xca\xb2\x3c\x24\xd3\x6f\xd0\xfd\x63\xee\xfd\xf4\xc2\xfb\x59\xff\x5f\x2a\x9d\x5d\x3c\x14\x09\x45\xec\x7d\xd7\x74\x2e\xe7\x20\x5e\x85\x40\x1c\x54\x99\x78\x3a\xaf\x0c\x9a\x6b\x4f\x9c\x14\x64\x3d\xc4\x77\x5c\x38\x6f\x76\x60\x54\x2a\x30\x45\xe8\x0d\xb7\xfb\xac\x1a\x10\x2d\xa2\x5c\xde\xf9\x1b\x62\xf6\x5d\x15\x0b\x7a\x04\x20\x0e\x2e\x85\xde\x67\xa6\xb8\x3b\xe2\x18\x1f\x9d\x44\xeb\x30\x23\x6b\xa4\xaf\x6b\xb0\xc6\x12\x35\xad\x4d\x73\x56\x7d\x7a\xd1\x49\xa1\xb7\x2e\x8b\x88\x0b\xe2\x90\x9a\x1f\x4f\xfc\x88\x79\xf8\xba\xb5\xc3\x4d\x6d\x42\x62\x18\x27\x35\xfa\x6e\x38\xda\xed\xe9\x2e\x1a\x6c\x7e\x9c\xcf\xde\x95\xa5\xce\xd0\x4e\x0f\x88\x83\x4b\x81\xd2\x9b\xef\xde\x43\xcb\xc6\xfb\x2b\xf8\xde\xbb\x72\x16\x1b\x64\xde\xfb\xbf\xc5\x9a\x3f\xbc\x71\x11\x2a\x4e\x9e\x62\x50\x7d\x76\x15\xda\x41\x02\x70\xf0\xe7\x1b\x93\xdf\x9a\x89\x8a\x8f\xa1\x47\x31\x6e\x7f\x21\x0b\x47\xb1\xf1\x85\x88\xe6\x8e\xc8\xb3\x36\x0e\xdc\x80\x6d\xae\xa4\xd8\x9a\x50\xe8\x52\x5d\x00\x07\x55\x26\x9e\xce\x2b\x83\xd6\xbf\x93\xa4\xc0\xb7\x44\x72\x15\xf7\x69\xd7\xb3\xb2\xfb\x59\x3d\x44\x13\xa1\x11\xc1\x4d\x24\x5a\x96\x74\x91\xeb\x47\xf8\x8a\x53\x5e\xa2\xb7\xa0\xda\x14\x10\x07\x97\x42\xae\x2a\x29\x76\x30\x9a\x24\xea\xdd\xb6\x2d\xda\x40\xef\x47\xca\x4a\xe9\x98\x58\x9f\x27\x1f\x24\x53\x4c\x8c\xbc\xa9\xd1\xc1\x89\x41\xc4\x05\x71\x70\x29\x74\x33\x7d\x5b\x09\xa2\x26\x93\xd7\xba\x94\x9d\x58\xc3\xc6\x48\x63\xf4\x34\x49\x7f\xaa\xfa\x43\xa4\x72\x93\xdb\x6d\xeb\x29\x5a\xa8\xcd\x1b\x88\x83\x4b\xe1\x79\xb7\xcc\x71\xd1\xe1\x50\x2b\x8e\xce\xc7\xae\xbf\x73\xe2\xe6\x02\xd3\xc9\xe9\xae\x6b\x5f\xbe\x1a\xb2\xb3\x31\xda\xd2\x1f\xd1\x40\x9b\xaa\x00\x0e\xfe\x7c\x17\xf0\x36\xf0\xcd\x27\x63\x5b\x96\x8b\x71\x56\xf8\x5a\x32\x2f\x76\xff\x99\xeb\xb4\xfc\x20\xe9\x61\x3b\x60\x42\x3d\x16\xfd\xf3\x2a\x42\x0a\x20\x0e\x9a\x15\x4e\xe7\x95\x41\xef\x24\x27\xde\xba\x6e\x29\x6e\x48\x84\x32\x28\x19\xb2\x2b\xe3\x25\x3b\xe2\xac\x12\xbc\x43\xfa\xfd\xfd\x08\xe7\x0a\x5d\x45\x88\x4e\x19\x69\x3c\xf4\x37\x35\x88\x83\x4b\x81\x10\xb3\x46\x86\xc5\x37\x29\x80\x9c\xe5\x29\xea\xf2\xd7\x71\x82\xba\xad\xc8\xfb\x11\xc6\x9a\x32\x99\x18\xa2\x13\x84\xf9\x53\xd0\xd1\x05\x10\x07\x97\xc2\x71\x3f\x61\x3d\x8b\x43\xce\x44\xb4\x75\xea\xe0\x6f\x2f\xb2\x30\x06\xca\x3b\x75\xb3\xad\xa8\x5c\x4f\xdb\x63\x0b\xc8\x8c\xc5\xa1\x3b\xa3\x40\x1c\x5c\x0a\x32\x58\x78\xd8\x42\x26\x69\xfb\xf6\xf3\xb7\x97\xae\x3a\xa4\x9d\x63\x18\xda\x26\x37\x5f\x77\x99\x51\x58\x3b\xb2\xcf\x6b\x6b\xf8\x03\x6d\x2f\x00\x38\xf8\xf3\x55\x13\x74\x13\x68\x69\x51\xbc\xc7\xff\x96\xf8\x63\x96\xb3\xcb\x45\xff\x30\x73\xed\xa3\xe7\x72\x77\xe6\xc5\x3c\x93\x14\x73\x76\xea\x11\x52\x00\x71\xd0\xac\x70\x3a\xaf\x0c\xf2\x59\x27\x7b\x65\x95\xba\x12\x8d\xc5\x0d\x1d\x13\xd4\xa1\x95\xdd\x58\x53\x8b\x25\x17\x9f\xa7\xcf\x7c\xb9\x23\x8a\x92\x2e\x46\xbf\x5b\x2a\x8d\x1c\x43\xf8\x4e\x10\x87\xec\x95\x33\xe6\xc6\x5e\xb4\x5c\x59\x57\x28\xe4\x30\x8d\xe5\x5f\x23\xef\x6d\x2b\xda\x3c\xdc\xcd\x11\x44\x19\xff\x84\x95\xf5\x82\x67\xd0\x10\x11\x19\xc4\x21\x7b\xe5\xaf\x78\xf4\xf4\x47\x45\x44\x15\x97\x8d\x50\x47\xd4\xed\xdf\x3f\x49\x93\xf7\x23\xee\xa5\xd2\x18\x79\x33\x1b\x96\xa1\x64\x96\x5d\x8c\x88\x0c\xe2\x7c\xa4\x51\x50\xff\x1b\xf9\xd4\xf7\x2b\x6f\xfa\xf9\xca\xf4\xc7\x4c\x86\xb6\x70\x5b\x6a\xfa\x2c\xc6\x10\xd9\x6e\x05\x64\x63\x1a\x62\x5a\x62\xf2\xd3\x9e\x6f\x5f\xca\xaa\xf8\xd7\x2b\xf7\x2b\xea\xb1\xdf\x2c\x79\xef\x32\xfd\xed\xc6\x0a\xf5\x86\xf4\xbc\xdf\x30\xf7\x42\xfe\x04\xef\x95\xe7\x81\x32\xcf\x2b\x6d\xf1\xfe\xad\xcb\xfd\x93\xea\x47\xcc\xd0\x1b\xd6\x88\xe3\x37\x21\x11\x11\xad\x82\x1f\xb9\xf7\x3c\xa9\x14\xc7\x57\x63\xd9\x52\x58\x36\xe2\x75\x03\xef\xff\x9a\x57\x06\x0d\xed\xdf\x7a\x65\x24\xaf\xfc\xf9\xb2\xab\xa4\xb1\xdd\x57\xe6\xe6\x0f\x6a\x22\xa9\xb5\xb4\x2b\xb7\x7b\xb0\x31\x63\xd0\x68\x77\xd1\x37\x34\xd4\x06\x0e\x97\x8d\xcf\x64\xcb\x93\x17\xc9\xc6\x71\x1f\xc6\x30\xcd\xa4\xbf\x91\x97\xda\x9c\xe8\x95\x57\x89\x0e\xcb\x7f\xcc\xef\x7f\x2e\xb6\xc5\xe2\x2a\xc9\xcb\x01\xd1\x69\x85\xcb\x67\xb2\xc1\x8b\xec\x95\x93\x04\xab\x0b\x0d\x51\x06\xbf\x4a\x0c\x61\xa7\x6f\x34\xde\xa2\x92\xdf\x5c\x2e\x6a\x9f\xbe\x3c\xb6\x82\xda\x7c\x25\x7d\xf1\x45\xdd\x99\x8c\x56\x17\xd9\xa2\x27\x2a\xe9\x6a\x56\x18\x4d\xfa\xc8\x56\x49\xaa\x66\xb5\xad\xcb\xc7\x73\xf6\x19\x24\xbd\x40\x89\xf5\x7e\xe0\xfa\x7d\x5b\x8d\xfc\x4c\x46\x8b\xec\x95\x87\xd6\xcf\x4f\x1f\xa6\xa2\xca\x89\x77\xe2\x91\xf5\xe8\xd1\x62\x33\x92\x4c\xa4\x24\x3b\x9b\xca\x65\x63\x0c\xa2\x55\xb6\x2b\x6e\x9c\x99\x57\x06\x89\xe8\xa4\x05\x30\x61\x4d\xd4\xe2\xbe\xec\xdd\x0b\x46\x8c\xe9\x06\x39\xf5\x6c\x7c\x36\xfd\x3a\x7b\x0b\xa2\x89\x8f\xc4\xd9\xd4\xd0\x29\xea\xd5\xa0\xde\x5e\x20\x0e\xa9\x61\x87\x0a\x4d\xc5\x06\x25\x0a\x17\xbd\x39\x2d\xfd\x3d\xff\x9a\x36\x6d\x96\x20\x7c\x5b\xcd\x7c\x15\x05\x3a\x5a\x8d\x28\xa9\xc5\x68\xa8\x61\x07\x80\x83\x2f\x80\xef\x7e\x98\x04\x94\xf6\xb7\xd4\x86\xb7\x5d\x8c\x58\x96\xd3\xba\xa8\xa8\xf6\x99\xed\x4a\x2d\xbb\xd3\xe0\x4e\x89\x89\xb0\xfd\x20\x74\x61\x03\x88\x43\x5a\x00\x53\x1f\x73\xb6\x7b\x9b\x11\xae\x95\xf2\xdd\x16\xbf\x13\xc0\xe4\x69\xa8\xee\xaf\xbd\x16\x32\x86\x1f\x3a\xf6\x59\x24\x26\x19\xaa\x7e\x05\x71\x3e\x92\xc4\xff\x79\x0e\x3e\xc4\x8a\x69\xcf\x9e\x71\xde\xfe\xed\xf9\x53\x20\xa8\x85\xc8\x5b\xdf\xd3\x3f\xe1\x9a\x6d\xdc\x75\x4c\xe2\xa7\x03\x7b\x86\xdb\x4b\x08\xaf\x0c\xe2\xa0\x7a\xe5\x53\x79\x65\xd0\xef\xfa\xc4\xd3\xf8\x1e\xa8\x51\xef\x27\x93\xc7\x7f\xaf\xb8\x99\x3a\x1f\x3c\xa8\x90\x61\xb5\x4d\xef\xcd\xda\x9e\xbd\xac\xf2\xc9\xd0\x10\xdb\x10\xda\xf4\x03\x71\x70\x25\x88\xb1\x78\x18\x1c\xc9\x88\x3c\xbc\xf2\x7c\x5c\xfb\x2e\xa1\xab\x46\xfb\x05\x33\xf4\xf8\xfe\x47\x96\x17\x04\xeb\xb4\x2e\x12\x5c\xc2\x81\xce\x76\x03\x38\xb8\x12\x2a\x06\x2c\xf3\x6a\xb5\x8b\xb8\x15\xdf\xf4\x4c\x97\xa2\x92\xcb\x07\xa3\x58\x7b\xa0\x74\xec\xb1\x89\x12\x66\x27\x3c\xbc\x9e\x09\xdd\xed\x04\xe2\xe0\x4a\x78\x40\x86\x21\x5d\x5b\x9a\x55\x2e\xe8\xf1\x34\x90\xbd\x6e\x9c\xd0\x25\xbd\x98\xfd\x78\x28\x63\x64\x90\x43\xe7\x89\xe1\xfd\x97\xba\xd0\x09\x03\x00\x07\x57\x02\x1e\x51\xc9\xe0\x48\x3f\x89\x74\x97\x54\xdc\xfb\xa2\xf1\x29\xf9\xfb\x04\xf7\x0a\x95\x39\xae\xdc\xd2\x0d\x2c\xc7\x4f\x68\xc6\xae\x43\xbc\x0a\x81\x38\xa8\x32\x91\xf7\x54\x6f\xc5\xa0\xb9\xf6\x24\x29\x64\x74\x7f\x93\x76\xc0\x72\xe2\x78\x44\x6a\x22\x86\xef\x6a\x6b\x54\x98\xb2\x84\x51\xe4\x4e\xb5\x5f\x85\x26\x7e\x94\x1c\x25\x03\x15\x93\x82\x38\xb8\x14\xd6\x9f\xbe\xef\x7d\x76\x6b\x4c\x0a\x2b\xc8\xe2\x2e\xd1\xc7\x07\x9b\x6e\xf3\xc7\xc5\x78\xaf\xdf\xde\x50\x7f\x1e\x1d\xd4\xb1\x39\x05\x4d\x36\x20\x0e\x2e\x85\xf4\xe3\xfd\xf7\x37\x8b\xcb\xc8\x45\xcb\xe5\x9f\x85\x27\x62\xeb\x64\x9f\xd7\xc3\xad\xee\x77\xf8\x88\x36\x65\x3e\xc4\x59\xd8\x0f\x75\xf1\x01\x71\x70\x29\x7c\xf4\xdc\x6a\x7e\xb4\xc1\xde\xd0\x13\x88\x41\xa7\xac\x1a\x56\x29\xe8\x41\x7b\x37\xaf\xe6\xdc\xab\x51\xcd\x5d\x76\x31\x1f\xdb\x8b\x50\xf1\x2b\x80\x83\x4b\x81\xfc\xc5\xb5\x97\x04\x36\x26\x9e\x52\x46\x06\x9c\x65\x37\x65\x1f\x4e\x5f\xed\x39\x8e\xed\x20\xe2\xca\xc5\xfd\xf5\x5d\xfc\x1d\xe1\x14\x42\x0a\x20\x0e\xaa\x4c\x3c\x9d\x57\x06\xad\x7f\x27\x49\xe1\x2d\xa7\x1e\xf5\xbd\x60\x72\xd1\xea\xfc\x7d\xed\x9c\xa0\x5d\x32\x0d\x57\x65\x37\x45\xc3\x96\x68\xb5\xe8\xfa\x72\xa6\xad\x1c\x65\xc4\x23\x00\x71\x48\x77\x0a\x32\xc5\x66\x24\x5b\x05\x74\x72\xe8\x6f\xd9\x12\xa8\x32\x3d\xb7\xd1\x9c\x18\xfd\x1c\xdc\xc1\x7b\x78\xc4\xf3\x61\x85\x95\xa3\x06\x11\x17\xc4\xc1\xa5\x70\xb9\xb1\xf1\xee\xc1\x61\x86\x6f\x08\x1f\xff\xe1\x15\x0d\x4f\xf1\x20\x2d\x1e\xb3\x80\xc2\xbd\x59\xa7\xba\xfa\xa8\xb7\x0f\x0d\x48\xa0\x92\x78\x00\x87\x24\x85\x26\x36\x96\x28\xec\xc5\x22\x63\x5e\xf7\x6a\x74\x49\x45\xd3\x99\xb1\xdc\x8f\xec\xd8\xa8\x05\xd2\xea\x28\x41\xa3\x54\x41\x75\x90\x14\x00\x1c\x5c\x0a\x85\x56\xcf\x64\x53\xe4\xee\xfa\x1c\x52\x99\x35\x46\x88\xa0\xce\x58\x9c\xb7\x58\xba\x22\x9b\x29\xc3\xae\xda\xed\x99\xb5\x16\x38\x8b\x90\x02\x88\x83\x66\x05\xdd\x53\x49\x01\xf4\x4e\x72\x92\x14\xbe\x39\x28\xaf\xd5\x39\xce\x92\xf5\x09\xf8\xca\xf1\x1d\x78\x06\xd3\x2a\xa7\x32\xe1\x8f\x8b\x34\x6d\x84\xb3\xd5\x06\xa9\xde\x80\x7a\x7b\x81\x38\xa4\x2e\x06\x2f\xba\x26\x9c\x8f\x2e\xfe\xa5\x7a\x93\x3a\x92\x7a\x73\x4f\xfb\xc5\x73\x97\x4a\xaf\xf1\xd1\xe3\x42\x9d\xed\x80\xd9\x6f\xfe\x97\xa0\x94\x01\x38\xb8\x14\xd6\x71\x79\x29\xd1\xa3\xa2\x9e\xf5\xbd\xad\x60\xb2\x21\x9d\x6a\x4a\x56\xd0\x6b\xf0\xa1\x4d\x23\x29\x8f\xe4\x20\x7e\x9d\x31\x00\x95\xda\x83\x38\xb8\x14\x98\x73\x93\xbc\x23\xbd\xdc\x7f\xdd\x6a\x1c\xdc\xe5\x0a\x96\x10\xca\x11\x36\xc1\xb1\xf9\x51\x81\xf2\x05\x13\x5d\xa4\xa6\xa9\xcc\x0e\xea\xe6\x00\xe0\xe0\x52\x48\x0a\xfc\xba\x71\x89\x9d\x0b\xb3\x44\x7b\x08\x2b\x81\xc6\x3d\xd7\x0c\x8b\xc3\x28\x55\x8e\x5d\xbb\x7d\xa2\x2f\x05\x3f\xb3\x2a\x09\x21\x05\x10\x07\xcd\x0a\xa7\xf3\xca\x20\x9f\x75\xb2\x57\x7e\x75\x01\x17\xdb\xa4\xad\xd1\x4b\xe8\x25\x43\xc0\x28\x0d\x77\x51\x4d\x38\x3f\xcd\xec\xfb\x8b\xc6\x9b\xee\x05\xda\xb9\x64\xc9\x9a\x08\xdf\x09\xe2\x90\xbd\xb2\xdc\xf1\xc5\xc0\xda\x11\x8e\xab\x7f\x09\x59\x25\x5e\xe7\x3a\xd1\xcc\xb6\x6d\xfa\x31\x72\x5b\xdf\x37\x2a\x25\x6d\xb7\x7c\xb2\xd2\x89\x88\x0c\xe2\x90\xbd\xf2\xd0\x14\xcd\xc2\x4c\x52\xe2\x3d\x27\x85\x61\x7a\x8e\xea\xd2\x83\x96\x82\xb6\x74\x25\x66\x8e\xab\x91\xe7\x50\x70\x84\xb0\xa3\x63\x10\x91\x41\x1c\x72\x87\xed\x53\xdf\xaf\xfc\x41\x9a\xe9\x93\x4c\x86\xe4\xb5\xd2\x07\x1d\xbe\x63\xaa\xf9\x0b\x12\xb4\xae\x3a\x2e\x3d\x42\xdf\x43\x8f\x3e\x2f\xec\x76\x4f\x34\xfc\xeb\x95\x7f\x17\xc6\x0f\x4a\x75\xfd\x51\x08\x36\xa6\x64\x18\x49\x68\xfe\x14\xda\x32\x71\x7b\xdd\xcf\xd6\x76\x32\x67\x5d\xa7\x2e\xa9\xe6\xc3\x3f\xe8\x27\x36\x7d\x02\x77\x67\x0f\x8f\x4b\x2b\x29\x9f\x2c\x8c\x78\x53\x69\x1a\x2a\xd1\x78\x96\xb5\xf1\xbb\xc5\x83\x9b\x7b\x50\x2f\x58\xfc\xaf\x79\x65\xd0\xd0\xfe\xad\x57\x46\xf2\xca\x83\xdf\x89\x6e\x7f\x39\x88\xd3\xf4\xd0\x66\x41\x7f\x80\x33\x89\x4a\xa2\xf0\x7b\x3b\xed\x87\x89\xa9\x9f\x70\x60\x86\x7d\x0f\x29\xeb\x99\x6c\x79\x22\x7b\x65\x92\x73\xc5\xc4\x12\xce\x78\x79\x8b\xf8\xb2\x09\x69\xaa\x91\xec\x21\xc7\x7e\xf7\x3e\xa4\xb9\x0a\x62\x0f\x6c\x9b\x67\x3d\x48\xf9\x72\x26\x1b\xbc\xc8\x5e\xd9\xda\x8f\x75\xf1\xc7\xc0\xa2\xe9\xeb\x8d\xa7\xd5\x9f\x5c\xb3\x3d\x9e\x5c\x78\x34\x75\xa7\x66\x2f\xe9\xf5\x7b\x0b\x77\xaa\x4c\x96\xf0\x33\x19\x2d\xb2\x57\xc6\xa1\xbf\x18\xa0\x47\xf8\xf0\x3b\xe5\x39\x66\xe9\x8f\x95\x81\x01\x13\x54\x8a\x04\xb4\x14\x3a\x5a\x6f\x1f\xbb\x5d\x32\xc5\x46\x21\x3e\x93\xd1\x22\x7b\x65\xbb\x24\x79\xdf\xbb\x5b\x0c\x5f\xde\x38\xd8\x3b\x62\xf3\x45\x51\xf4\xa6\x3a\xa4\x1a\xcf\xed\x94\xf4\x94\x78\xe9\x05\xed\xfc\x07\xfd\xff\xe6\x95\x41\x22\x3a\xb1\xb7\xd7\x61\x37\xba\xe1\x65\xed\x0f\x6b\xa2\x4b\x4b\x6e\x98\x42\xcc\x7f\xf5\x88\x42\xfe\x1e\xbd\xbd\x28\x80\x7a\x60\x98\x61\xd4\x0d\xb5\x7a\x05\x71\xf0\x05\x90\x3c\x53\x04\xbb\xf5\x93\xc3\xc2\x32\x96\xd0\x8f\xd7\x25\xae\xad\x5c\x31\x3f\xaf\x97\xb3\x4c\x65\x8f\xb9\x6d\xb2\x05\xb5\x05\x60\x23\xe2\x82\x38\xf8\x02\x28\x2f\xf0\x72\x8c\x07\x97\x9a\x47\x40\x5a\x94\x9e\x81\xe6\x5b\xff\x0b\x9d\x7c\xca\x30\x81\x25\x1d\xcf\xf6\x0f\x6d\x41\x47\xaa\xa5\x88\xb8\x20\x0e\xe9\xac\xf4\x08\xcb\x60\x94\xb5\xf5\x42\xe2\x7e\x68\xf0\x71\xfd\xad\x30\xaf\x27\x37\x2e\xbc\x8b\x20\x77\x49\xc9\xf5\xa0\x2d\xa6\x53\xcb\x84\xce\x8c\x03\x38\x1f\x49\x14\xd4\xff\x1c\x0f\x75\x09\x31\x1e\x3e\xf7\x42\x88\x71\xa6\xac\xec\xc7\xca\xb7\x6d\xa3\xfb\x8b\xde\xe4\x75\xb6\x3a\x1d\x01\xb3\x44\x0b\x2d\x13\x4c\x08\xaf\x0c\xe2\xa0\x7a\xe5\x53\x79\x65\xd0\xef\xfa\x24\x25\xd8\x61\x1a\x58\xe8\xf2\xa2\x8f\xab\x4e\xe3\x06\x2d\xec\x1d\x5c\xbc\xc4\xc2\x1b\x97\x5f\x16\xe0\x59\x5a\x85\x7d\x55\xb5\x7a\x82\x01\xea\x4c\x0b\xe0\xe0\x4a\x48\xc1\xbc\x26\xbe\x46\x6b\xe2\x78\x53\x49\x6f\x57\xd5\xdb\x1e\x4f\x48\x15\xcb\xde\xf0\x32\x17\xa3\xf7\x7a\xbb\xa1\xd0\xaa\x22\x74\x1a\x1f\xc4\xc1\x95\xc0\xfc\xfe\x41\x6e\x5f\xaa\x33\xa5\x6b\xc6\x41\xd9\x56\xc2\x84\xca\x52\xbc\xe2\xa3\x77\x02\x17\xe3\x16\xf6\x3e\x16\x0e\x84\xe2\xfc\xbf\x57\x16\x00\x07\x57\xc2\x85\xc8\x54\x6f\x9f\xc2\x8d\x83\x1b\xf8\xdc\x46\xe7\x1e\x8b\x27\x55\xd1\xe0\xca\x44\x06\xe3\x8f\x3e\x75\x1b\xb9\x54\x76\xb3\x08\x3a\x33\x0e\xe2\xe0\x4a\x88\x25\x54\xd6\x23\xc0\x71\xa0\x51\xe9\xc4\xfa\xce\xbd\x16\x79\x8d\xf7\xc7\x98\x1e\x9b\x92\xa3\x59\x1c\xa6\xdd\xb3\x7a\x43\xdb\x1d\xc4\xab\x10\x88\x83\x2a\x13\x4f\xe7\x95\x41\x73\xed\x89\xc7\xf1\x31\x93\x68\x3d\xaf\xc7\xdf\xd8\x3e\x68\xbf\xf3\x86\xf0\xc0\x66\xec\x5d\x36\xa7\xed\x05\xfb\x87\x05\x31\x5b\xcc\xdb\x4e\x54\x3a\xd0\x71\x7c\x00\x87\x74\x3b\x8c\x0c\xc9\x17\x5c\xdf\xaa\x28\x7d\xdc\xeb\xb9\x02\xc6\x85\x58\x7e\x0b\x7d\xb6\xdf\x9f\x5d\x66\xa2\x58\xa8\xcc\xca\x48\xf5\xa6\x45\xc4\x05\x71\x70\x29\xec\x18\x15\xea\x8d\x1b\x1a\x8f\xab\x89\x61\xa5\x7d\x0b\xbf\xf7\xf2\x4f\x39\xd3\x44\xeb\xaf\x72\xc1\x86\x57\x2b\x93\xcd\x76\x1e\xd0\x45\x41\x20\x0e\x2e\x85\x3d\x3c\xc9\x0a\xc5\xd6\x97\xd7\x5f\x39\x74\x3f\x92\xb8\xe7\x82\x6f\xa1\xcc\xac\x1c\x98\x98\x2d\x24\xf6\x47\x86\x81\x96\x8c\xe2\x37\x74\x00\x19\xc0\xc1\xa5\x60\x43\x52\xbb\x8c\x2f\xbf\x63\x1a\x24\x4a\x5a\x2d\x2c\x9b\xd7\x78\xd3\xe5\xc3\x87\x29\x8e\x4d\x34\xea\xf7\x09\x46\x8f\x02\x5e\x08\x21\xa4\x00\xe2\xa0\xca\xc4\xd3\x79\x65\xd0\xfa\x77\x92\x14\xe6\x9b\x64\x63\x6b\x9a\x32\x6c\xcb\x2a\xcc\x77\x76\xd6\x9f\x58\x10\x8d\x1f\xbc\x3b\x1a\x7f\xfb\xd3\x97\xb7\xb8\xcf\xf1\xe6\xff\xdb\xf4\x03\x71\x70\x29\x60\xad\x3c\x0c\x0e\x1a\xb8\xb1\xc8\x43\x2e\x90\xb2\xa3\xbd\x22\x78\x97\x7c\x39\x95\x09\xc7\x27\x23\xa7\xe7\x2a\xaa\xf0\xad\x01\xe8\xaa\x6d\x10\x87\x34\x2b\xfc\x60\xc2\x1f\x0f\x76\xf3\x1d\x7e\x63\xf5\x17\x5d\xe6\xa1\xbb\xe6\x0b\xdd\x29\x81\x4b\xa9\x93\x7f\x50\x9c\x56\xf4\xf3\x3c\x20\xe9\x82\x38\xb8\x14\x50\x30\x56\x84\x25\x2c\x14\x6e\x31\x7d\x8c\x2e\xd8\x1e\x91\x8f\x79\x59\x12\xe0\xb2\x4c\x38\xac\xee\x12\xc0\x51\x2b\xa9\x6b\x07\x1d\x14\x06\x71\x70\x29\xfc\xba\xb2\xb6\x57\xdf\xaa\xdb\x31\xa7\xf0\xf9\x72\x03\xed\x9b\x2c\xec\x77\x8a\xa1\x79\x52\x5c\x6d\x78\x9b\x8b\x47\xb4\x6a\x61\x50\x77\x7c\x10\x07\xcd\x0a\xa7\xf3\xca\xa0\x77\x92\x93\xa4\xd0\x7b\x4e\xd5\xfd\x03\xab\x8b\x4f\xf3\x15\x17\x47\xde\xbc\xbd\x92\x07\xe5\xbd\xbc\x21\x93\x11\xaf\x97\xd5\xf2\x2f\xd4\xf8\x12\x40\x7f\x17\x80\x38\xb8\x14\x2a\x99\x08\x6e\x88\x68\x1b\xd4\x55\x49\x3f\xdb\xe0\xf5\xb3\xdc\xa1\x23\x7a\x27\x56\xa1\xb8\xe1\x42\x2d\xe6\x5c\xc2\x86\xd6\x21\x89\x88\x0b\xe2\xe0\x52\x28\xa6\x54\xf5\x7d\xde\xe3\xb4\x91\x63\xfd\x56\xe9\x6d\x5b\x37\x5e\x8b\x0e\x13\x4e\x62\xc8\x17\xd6\x90\x15\x2d\xfa\xa7\xfe\x8a\xdd\x88\xb8\x20\x0e\x2e\x05\xa3\x23\x09\x6c\x6f\xdf\xa7\xdc\x87\xaa\xb7\x62\x9a\x5a\x57\x0d\xa9\x23\xc6\x47\xcf\xcb\x8a\x04\xf0\x07\x60\x5e\x90\x7f\x4c\xe8\x09\x55\x7c\x00\x38\xb8\x14\x2e\x5c\x12\x55\x6f\x63\x69\x52\x66\x18\xaa\x38\x22\x14\xd2\x35\x27\x63\x1a\x55\xbc\x57\x16\x17\xfc\x6e\xc3\xcb\xfc\x91\x6a\x8b\x3a\x42\x0a\x20\x0e\x9a\x15\x4e\xe7\x95\x41\x3e\xeb\x64\xaf\xac\x48\x36\xbe\x96\xfd\xf1\x43\xe2\x7a\x6a\x95\xdb\x1c\x43\xad\xcc\xd3\x1f\x0e\x44\x62\x92\xe8\x74\x86\xeb\xf3\xf5\x0f\xf5\x5b\x46\x11\xbe\x13\xc4\x21\x7b\xe5\x4f\xfc\x31\x91\x8f\x2f\xcf\xf1\x65\xaa\xf2\xa8\x1c\xe6\xdd\x3f\x90\xbd\xda\x90\x1c\xf0\xc1\x12\xe3\xb9\xc1\xe3\x47\xe4\xb4\x9d\xab\x88\xc8\x20\x0e\xd9\x2b\xff\xf9\xbe\x14\xb1\xf9\x5e\x8e\xf4\xd6\xb2\x58\x53\x28\xf7\xa5\x50\xfc\x69\x3f\x8a\xd0\x2c\x2a\x1b\xb9\xc2\x77\xb6\x2a\x1b\x7e\x81\x88\xc8\x20\xce\x47\x1a\x85\xf8\xbf\x91\x4f\x7d\xbf\xf2\x5e\xf2\x92\xf9\x93\xfa\x2c\x36\xfd\x90\xf4\x64\x89\x7a\x9b\x05\x3f\xf6\xb5\x90\x6f\x78\x49\x8a\xd9\x86\xbe\x12\xa8\x61\x3b\xfa\xff\x7a\xe5\x84\xa1\xc5\xeb\x76\x19\x5f\x17\x2f\xc7\x75\x7f\x7c\x77\x89\x27\xb3\x62\x8a\xdc\xb5\xc1\x33\x4d\x40\x84\x2e\x4c\xf5\xeb\xe0\x6b\x82\x7f\xd0\xd2\xdb\x69\x8f\x5f\xa6\x34\x45\xf2\xf3\x62\x5a\x5c\xc0\x20\x98\x14\x0a\xe8\xfd\x63\x26\x16\xf5\xe5\x46\x9f\x70\x4b\xa8\x62\xfe\xc6\xff\x9a\x57\x06\x0d\xed\xdf\x7a\x65\x05\xb8\x9f\x8a\x5e\xba\x34\x50\x6a\x40\xf3\x94\x7d\x47\x34\xe2\x11\x4d\x33\x57\x5d\x4d\x14\x8d\xbe\x45\xc1\x23\xc7\x49\xa9\xd1\xe2\x3b\x33\xed\x67\xb2\xe5\x89\xec\x95\x9f\xc9\xab\xbf\x4c\x19\xd7\x9b\x96\x73\xf9\xbc\x14\x53\xb6\xbe\xff\x71\x9b\x70\x7d\xf0\x93\xb3\xd5\xab\x4a\x1d\xa6\x86\xca\xc3\xa8\x33\xd9\xe0\xbd\x8b\xf4\xb1\xf7\xb6\xd2\x98\xac\xad\xbb\x39\x73\xba\xf4\x19\x89\xc5\x16\x0a\x88\x5b\x1a\x09\x94\xf1\xf4\x75\x2f\x96\xc9\xc8\x5a\x3d\xc0\x3a\x93\x3b\xa3\xbc\x90\xbd\x32\xe3\x7c\x81\x6e\x0e\x8e\x65\x69\xf2\x5b\xa3\x9f\x33\xcc\xb9\x6a\x9e\xd3\x82\xdb\x87\x44\x94\xa2\x77\xce\x77\xe0\xd7\xaf\x84\xbc\x3f\x93\xd1\x3a\x23\x7d\xec\xb5\xdf\xc5\x96\xb5\x72\x63\x1d\xc3\x0d\x21\x09\xdf\x54\x35\x67\xef\x53\x06\x91\x54\x19\x8c\x6f\x26\x7e\xca\x95\xfb\x6b\x39\xd2\x7d\x66\x5e\x19\x24\xa2\x93\x16\xc0\xa8\xbc\x2b\xb9\xba\x46\xea\x33\x54\xd2\x7e\xd8\x87\x2d\x04\xdf\x84\xbc\x02\x3d\xe8\xad\xf9\x44\x78\xf8\xf0\x34\x1e\xbe\x09\x87\xce\xc2\x81\x38\xf8\x02\x88\xa1\x3f\x58\x9f\xcc\x7b\x6f\x8c\xd3\x5e\x80\xad\x4d\xcd\x02\x7d\xa7\x2c\xbb\x3e\x98\xfb\x49\xfc\x7b\x46\xda\xbb\xd4\x76\x44\x50\x1b\x1f\x10\x07\x5f\x00\xd1\x49\x34\x69\x9b\x8a\x0f\x42\x98\xe5\x19\x3e\xba\x85\x87\x86\xeb\x3a\xd9\xab\xac\x8a\x0a\xfd\x0c\x2e\x79\xcd\xdc\xe8\x43\x06\x75\x5e\x02\x71\xf0\x05\xd0\xd6\xbc\xe2\xf8\x1e\xeb\xce\xf3\xa8\xc8\xce\x84\xfc\xb9\x17\xfa\xf8\xc9\xc7\x25\xfa\x4a\xdd\xa5\x66\x61\x2c\x6e\x5a\x44\x26\x86\x50\x3d\x1a\x80\x83\x17\x37\xb9\x1e\x3e\xce\xd9\xc1\xfc\x75\x7d\xb3\x2b\x2b\xc5\x67\x87\x39\x3e\x08\x55\x5f\x96\x87\xcf\xa7\xe4\x59\xe1\x3b\x0c\xf9\x2f\x9d\x57\x10\x5e\x19\xc4\x41\xf5\xca\x0a\xa7\x3a\x6d\x09\xf8\x5d\x9f\xa4\x84\xc1\x1f\xc1\x85\xeb\x4f\x79\x3f\x58\x0f\xc6\x89\xa8\xa6\xa0\x3c\x67\x40\xb7\x55\x89\x3a\x50\x7e\xb6\x63\xbc\x86\xff\xaa\x8e\xe0\x19\xe2\x09\x80\x38\xb8\x12\xf8\x59\x4b\xda\x9b\xcf\x6d\x16\x8b\xbe\xf1\xc7\xa4\xf0\x0c\xdb\x1d\xc1\xaa\x13\x5f\x25\xd9\x47\x63\xe2\x95\x37\x33\x38\x1c\x83\xda\xa7\x82\x38\xb8\x12\x52\x57\xa6\xba\xac\x6f\x58\x66\x68\x13\x1c\x57\x4b\x7c\x58\x5d\x8f\x24\x34\xca\x60\xd8\x7d\xa2\xb1\xc2\x6e\xd9\x86\xcf\x21\x0f\x79\x65\x10\x07\x57\x82\x85\x39\xb6\x37\x39\x7e\x59\xba\x10\x69\xd3\x4c\xcf\x56\x90\xdd\xa7\x26\x61\x6a\x2e\x56\xda\x27\xcb\x6e\x61\x62\x1b\x81\xa3\x50\xf1\x2b\x88\x83\x2b\x41\xc2\x73\x2f\xc2\xb8\xcb\xfd\xfa\x4b\x45\x1c\x27\x75\x9f\x5f\x0e\x23\x99\x37\x3c\x3e\x5f\x55\x47\x27\x10\x1b\x45\xb1\xa1\x3d\xbe\x81\x78\x15\x02\x71\x50\x65\xe2\xe9\xbc\x32\x68\xae\x3d\x49\x0a\xb1\xc1\x9e\x96\xf6\x99\x5f\x3d\xb3\xf4\x6b\x2d\xf2\x5e\x71\xbf\xfb\x7a\xb7\x81\xa8\xe7\x81\x96\xeb\x15\x3b\x37\x11\xb4\xdb\x7e\x50\xdb\x34\x10\x07\x97\xc2\xe6\xe1\x7e\xf3\xcb\x96\xc2\xaf\xa3\x62\x3e\x4f\xc8\x6b\x77\xa8\x4d\x8b\x0c\x1b\x8a\xe8\x7d\xe7\x0a\x19\x88\x8c\xca\xda\x3c\xa0\xb8\x20\x0e\x2e\x05\xfd\x72\xf9\xf8\xe9\xbf\x3a\x96\x6c\xf7\x4a\xdb\x69\x87\x2f\x5d\xab\xfb\x5a\x9c\xd6\xb1\xb2\x7c\x2e\xbb\xf2\xb2\x98\xe7\x32\x31\xd4\xa4\x18\xc4\x21\xfd\x81\x66\x9f\x3d\x64\xdc\x5b\xa6\xf6\x22\x73\x6e\xb1\x8c\xad\xfb\x27\xb7\xf2\xaf\x5e\x11\xdc\x0c\x66\x54\xfe\x3e\x4b\x33\xc6\xc7\x66\xd0\x1f\x68\x00\x0e\x2e\x85\xb0\x61\xea\x2d\x87\xf7\x56\x9c\x38\x3e\xec\x6a\x33\x3d\x14\x89\x3e\xdd\xee\xe3\xde\x96\xd1\xdf\x5a\xd5\x2a\x92\xa3\xd2\xa4\x4b\x11\x52\x00\x71\x50\x65\xe2\xdd\x53\x49\x01\xb4\xfe\x9d\x24\x85\xeb\x0a\x13\x87\xc7\x2f\xa5\x2e\x5c\xd8\xc1\xcd\x25\xd4\x44\x49\x63\xd4\x4a\x65\x27\xa6\xec\x77\x2a\x8d\xee\xc2\x69\x9d\xc9\x18\x42\x3c\x02\x10\x07\x97\x02\xdb\x37\x2e\x16\xcc\x41\x82\x8f\xe1\xb5\xe6\x32\xd9\x9d\xfc\x96\xa8\x79\x46\x04\x06\xa5\x7e\x0a\x3f\x2a\x1d\xb7\x06\xe4\xcb\x23\x10\x71\x41\x1c\x5c\x0a\xa8\xc5\x03\xdc\x72\x5d\x6d\xaf\x55\x5c\x1c\xe5\xcf\x6d\x89\x7d\x53\xec\xf6\xb5\xf0\xf3\x21\xac\x0d\xc9\xbf\x6f\x24\xfe\xd2\xb4\x07\x11\x17\xc4\xc1\xa5\xd0\xb5\x16\x4d\x3f\x22\x46\xd7\x66\x44\xd8\xcc\xfb\x83\x76\x77\xf0\x28\x4a\x0f\xcd\x73\x21\x5a\xf2\x4a\xac\xcb\x37\x16\xef\x2a\xe8\x3c\x13\x88\x83\x4b\x21\xdd\x5f\x0f\xad\x88\xa7\x42\xf1\x0b\x81\xc7\xf4\x5c\x49\x55\x6c\xa3\x71\xfc\x6c\x37\x6b\x81\x21\x36\xee\x7b\xb2\x62\x92\xf1\x44\x84\x14\x40\x1c\x34\x2b\x9c\xce\x2b\x83\xde\x49\x4e\x92\x82\x96\x51\x30\xdd\x70\x6c\xac\xaf\x8a\x68\x3b\xc5\x1e\x4f\x6c\x7b\xcf\xe7\x79\x74\xfb\x23\x85\x6f\xbc\x32\xd1\xf9\x61\x3a\xc2\xd0\x3e\x2d\x88\x83\x4b\x61\x65\xe5\xfc\x91\xc3\x45\x9d\x5d\xf7\x28\x96\xfc\x4e\x51\x86\xbe\x2c\xa3\xa6\x07\x53\xba\x4f\xbf\x50\xb8\xca\x5c\x0d\x51\xcb\x84\x2e\x15\x04\x71\x70\x29\xc8\x7c\x89\xd7\xd6\x77\xfc\xc9\xd2\x66\x30\xea\xf9\xfc\x1d\xf3\x62\x08\x95\x09\x6f\x81\x74\xff\x8e\xc4\x6b\x86\xcf\xac\x07\x6c\x8d\xd0\x51\x31\x00\x07\x97\x82\x81\xf3\xfa\x95\xae\xad\xa5\xcd\x8a\x9d\x7e\x3f\x97\x5f\x65\xfa\x7d\x5f\x9e\x0f\xcd\x37\x3e\x7e\x29\x43\xd5\x8a\x92\x39\x54\x0f\xbd\x82\x80\x38\xb8\x14\xd4\x9e\xe7\xd0\x8a\xdc\xbd\x3b\x33\x9e\x28\x3b\x81\x2e\xdb\x55\xe3\xfc\x81\xba\xcd\xca\x3f\xa1\x75\x9c\x88\x39\xbc\x0a\x67\xef\x05\x74\x06\x1b\xc0\x41\xb3\x82\xf3\xa9\xbc\x32\xc8\x67\x9d\xec\x95\xa9\x8c\x83\x1d\xb0\xb5\x70\x7c\x1d\x5b\x33\x7e\xe4\x47\xcb\x1f\xeb\x72\x3b\x37\x33\xca\x86\x0e\x3f\x4f\x4f\x78\xda\x24\xe8\x35\x8d\xf0\x9d\x20\x0e\xd9\x2b\x5b\x56\x57\xce\x7e\x94\xd9\x35\x98\x9b\x9d\x7b\x23\x60\x68\x52\xcd\x97\x45\xa7\xee\x54\xa8\xca\xb6\xe2\xfe\xe2\x67\x42\x96\xe0\x37\x44\x64\x10\x87\xec\x95\x7b\xbf\x3f\xb8\x3a\xdb\x9d\xe1\xae\xfd\xb9\x2b\xfb\xfe\x68\xd9\xee\xdb\x00\x41\xab\xdf\x5f\x7f\x5e\x7d\xae\x34\x8b\x6e\xc6\x5f\x2b\x80\x88\x0c\xe2\x7c\xa4\xff\xef\x49\xfe\xa7\xd4\xfc\xb4\xf7\x2b\xbf\xa9\xe7\x62\x2b\x4a\xfc\x3a\xc4\x6f\x41\x3a\x1a\x96\x36\x19\xc0\xd3\xdd\xff\x98\xee\xf1\xc7\x24\xa5\xb8\x26\x15\x2c\x22\xc9\xf7\xff\x7a\xe5\x2b\xa9\xa5\x7b\x71\xf7\x7a\x15\x5f\x36\x5b\xf1\x0b\x5c\x36\x28\xeb\x5c\x12\x29\xb8\xff\xe6\x37\xf5\x64\xf0\xdc\xd6\xd5\x6b\x05\x74\xff\xa0\xb5\xbf\x9f\x53\x77\x7e\xce\x32\xed\x1d\xeb\x94\x25\xfb\x8d\x89\xc7\xa1\xa5\x46\x62\x8c\xa6\x73\xe7\x66\x84\xe4\x7b\xfd\x89\xa6\x07\xff\x6b\x5e\x19\x34\xb4\x7f\xeb\x95\x91\xbc\xf2\x90\x9c\x21\xdd\x8d\x9e\xdb\x0f\x57\x53\x73\x35\x95\x9b\xef\x30\x25\x6a\x8b\x59\xfd\xdd\x0d\x7d\xfe\x4a\x0b\x23\xd0\xa0\xa1\xe6\xdd\x99\x6c\x79\x22\x7b\x65\x9f\xe8\x3e\x36\x21\xf1\x5e\x74\x86\xa3\x65\x93\xf9\x58\x86\x84\x9f\xfd\xbf\x7e\x74\x78\x4b\x69\xb9\x2f\x38\xaf\x95\x19\xcb\x6f\x9e\xc9\x06\x2f\xb2\x57\x9e\x33\x23\x3d\x60\x98\xe8\xfa\xec\x6f\x33\xac\x22\xae\xfc\xf1\x75\xf4\x39\x31\xfa\x28\x6c\x7c\x2d\xab\x74\x03\x32\xbc\xab\xed\x2c\x67\x32\x5a\x64\xaf\x9c\xc9\x95\xee\xa2\x87\x6a\x83\xa9\xdc\xb4\xc3\x6b\xfa\xec\x79\x80\x88\x4e\x31\xdf\x9b\x9f\x62\xfc\x96\x82\x5a\x57\xcb\x87\x7e\x1a\x9e\xc9\x68\x91\xbd\x72\x78\xc3\x03\x6e\x34\xeb\xf0\xdb\xd5\x97\x93\x4c\x0c\x67\x7a\x54\xea\x16\x4b\x1e\xca\x9b\x28\x24\xb6\xfd\x0a\x53\xc1\xf1\xee\x8e\x3f\x33\xaf\x0c\x12\xd1\x49\x0b\xa0\xdf\xa0\xf1\x86\x6b\x75\x13\xad\xd4\x4e\xda\xdd\xea\x68\xae\xbf\xa3\x17\x25\xb7\x6b\xd2\x1e\x3c\xa3\x7e\x19\xa7\xdd\x4e\x22\xfe\x18\x31\xf1\x83\x38\xf8\x02\xe8\x44\x2c\xb7\xd4\xb9\x74\x7f\x45\xf3\xfa\x5d\xfe\xac\xab\x54\x77\xb9\x7f\xe2\x5f\xd3\x6e\xa8\x59\x20\x93\x8d\xc9\x2b\x53\x57\xe1\x47\xc4\x05\x71\xf0\x05\xd0\xee\x93\x8e\x63\x9a\xbb\x88\xd3\x13\xeb\xfd\x57\x03\xc2\x05\xbd\x44\x53\xe4\x71\xf4\xa6\x44\x5e\x6f\x9c\xee\x6e\xed\x09\x78\xcf\x42\xbb\x9f\x00\xce\x47\x12\xe5\xd6\x7f\xbc\x32\xbb\x17\x65\x21\xf1\x5b\x93\x85\x3f\x17\xb9\x2e\x3d\xbf\xf7\x44\xd0\x27\x5a\xe2\xd9\x94\x21\x5a\x8d\xe5\xf7\xb4\x60\x4f\x62\x3f\xc8\x2b\x03\x38\x1f\x49\xd4\xff\x3c\x87\x6b\xc4\x7b\xb7\xbc\x6b\xe5\x49\x18\xc9\xf9\x8d\x50\xd1\x58\xfa\x43\xe8\x70\xf5\x72\x1f\xc4\xb7\xdf\xad\x33\x7a\xb6\x4e\x2e\xec\xe5\xa5\x7b\xba\x5f\xe2\x49\xb9\xb3\x4d\x52\x73\xe5\xfb\x6b\xa2\x33\xec\xf0\xc0\x82\x3c\x8b\x53\x95\x46\x73\x8a\x54\x77\xa6\x06\xe7\xc7\xe7\xeb\x75\x62\x16\xf3\x42\xd0\x77\x06\x70\xf0\xdc\x5d\xda\xb6\x4e\x89\x6d\x37\x69\x59\x1a\x4b\x4c\x0f\x0a\x57\xf6\xe4\x6b\x3d\x6a\xbb\xe1\xc9\x17\xc5\xa5\xc4\x6f\xca\xc1\x1f\x06\x59\x1a\x10\x07\xcf\xdd\xe4\x7c\x19\xbe\x42\x2e\xaa\x21\xe3\x86\x66\xa6\x36\x2a\x6a\x71\x91\x87\xaa\x22\x9f\x18\x6d\x3e\xe5\x51\xa8\x54\xea\x9d\xdb\x9d\x88\xb8\x20\x0e\x9e\x3b\xa5\xdc\x4d\x53\xad\x0a\x8a\x39\x7f\x7b\x4d\xff\xaf\x96\xb7\xd1\x5e\x85\xb0\x9a\x54\x89\x95\xd6\x66\x10\xc5\x5c\x3c\x66\xc9\xde\x82\xba\x71\x01\x38\x78\xee\x58\xb8\xa3\xe9\xd8\xc3\x07\x7e\x72\x32\xbf\xff\x30\x4e\xe8\xa8\x23\x63\xdc\xa3\x7a\xe3\xb6\x22\xb9\x55\xc4\xed\x00\x7d\xd1\x45\x7e\x44\xee\x40\xd3\xd9\x49\xb9\x9b\x53\xd8\xfb\x9d\x9d\xf7\xb8\x67\x2a\xb9\x5b\xa6\x09\xe7\xb6\xa3\xc6\xe2\x44\x88\xc3\x41\xe3\x74\x72\xcd\xdf\x74\x14\xf6\xb7\x50\x4f\x3d\x10\x07\xcf\xdd\xb4\x22\x56\x58\x9a\x80\x4c\x05\x8a\x1a\xf9\x64\x9f\xab\xe4\x54\x33\x16\x7d\x57\x7b\x6d\xb4\xf6\xdd\x0b\xda\xdf\x7b\xe7\x16\xce\x41\xf5\xfc\x00\x0e\x9e\xbb\x36\xd5\x59\x19\x2e\xf9\xe7\x4b\x05\xe1\xe1\xc7\xc2\x13\x25\x5f\x7e\x51\xfa\x8e\xb8\x13\x3e\x58\x6f\x5f\x12\x39\xfe\x22\x34\x11\x8b\x88\x0b\xe2\xe0\xb9\xa3\x57\x5c\x45\x37\x0f\x69\x6c\xfd\xc8\x3f\x61\x8a\xc3\x95\xdb\xce\x74\xe7\xd3\xcd\x4b\x57\x36\xbb\xe4\xd2\x30\x1f\xf5\x8c\xa5\xf0\x40\x8d\x72\x00\x1c\x3c\x77\xf7\x33\x6a\x38\x53\x3c\xde\x5e\x23\x26\x4b\x99\x56\x1c\xe4\xc9\x7e\x8e\xd3\xea\xea\xd1\x1d\x5c\xac\xe0\x3a\x85\xff\xf5\x79\xce\x34\x22\x77\xa0\x35\xe1\xc4\x7b\x94\xe6\x1b\xee\x88\xe1\xf1\x51\x10\x1f\x52\x51\x77\x98\xd9\x1f\x4f\xb2\x97\xe2\x50\x0a\xd8\x88\x93\x11\x96\x74\xe6\x53\x56\x13\x43\x85\x90\x00\x0e\xe9\x77\xc7\x86\xd7\xbf\x4b\x2d\x41\x9d\xf0\xb9\x4c\xf6\xc3\x22\xb1\x9a\x20\xb3\x4e\x64\x49\x7f\x6b\x46\x14\xdd\xfe\x30\x0e\xfa\x12\xf4\x7b\x06\x71\xf0\xdc\xc5\x33\x77\x3c\x31\x4d\x0f\x61\x35\x50\xff\xf8\xf7\xba\xe9\xad\x57\x0f\x33\x38\xac\xf2\xbf\xf0\xdc\xff\x99\x4c\x13\x79\xed\x87\x23\x74\x76\x08\xc4\xc1\x73\x57\xaf\x53\x3b\x89\x1f\xfa\x2a\x99\x0f\x43\x86\xdb\x8e\x9f\x5b\x73\xe7\x63\xcd\x06\x9b\xa6\xee\x1c\xe6\xef\x28\x3a\xe6\x57\xe5\x50\x41\x28\x88\x83\xe7\x2e\x27\xec\x22\xde\x36\xc6\x2c\x36\x47\x6e\xff\x2b\x22\x27\xcb\x20\x9a\xcd\xc7\x6b\xaa\x0e\x37\xe6\x7a\x57\x1e\xd6\xe5\x7b\x5d\x0a\x43\xe4\x0e\xb4\xb0\x9e\x94\xbb\x7b\x1f\x8a\xd9\xaf\xa5\x97\xa3\x07\xf0\xdf\x93\x71\x4a\x31\xca\x31\x22\xc3\x5c\x1d\x8a\xe0\x5c\x78\x52\x87\x45\xd3\x26\xb5\xbe\x83\xf8\xce\x20\x0e\x9e\xbb\xa9\x5d\x4c\x2b\xa9\x1c\xb7\xed\xb9\x2e\xea\x45\xbd\x6c\x0e\x6d\x4b\xb6\x98\x5f\x33\x12\xad\x4a\x9f\x59\xb7\x64\x7a\x1c\x89\xa0\x3a\x69\x10\x07\xcf\x5d\x8a\xd9\xb3\x6f\x89\x4f\xb2\x25\xe3\x98\x1b\x53\x7f\xca\x5d\xf4\xae\xa0\xc8\x24\x9c\x9f\xd8\xb3\xb0\xe0\x79\xa0\xfb\x9e\xfe\x09\x34\x17\x83\x38\x78\xee\xe4\x77\x50\xb8\xd2\x59\x59\x43\x6e\xaa\x0d\x69\xcb\xfa\x14\x92\x0b\x46\x47\xea\x47\xa0\xa0\x3b\xb9\xdd\x5f\x3f\x46\x4d\xcd\xe9\x85\xce\x67\x01\x38\x78\xee\xaa\xde\xd3\x7e\x36\xfa\x5e\xac\xf3\x37\xf7\xf3\xde\x54\x5a\x55\x4a\x10\x41\xcd\xb5\x1e\x2d\x72\x1f\xcf\xbc\x4f\xa3\xb5\x19\x24\xc9\x5e\xfa\xa7\x7b\xbb\x3f\xd9\xa1\xa1\x15\xb1\x62\x7c\xa6\xc9\xad\x63\x7b\x7a\xdc\xc6\x1d\x32\x36\xaa\xbd\x71\x3f\xb8\xd5\xf7\x4b\x7e\xbe\x73\x88\xe4\x5d\x81\xcf\xe7\x10\x6e\x07\xc4\x21\x3b\x34\xd7\xbb\xce\x5e\xb8\x49\xbd\x0f\xf5\x2f\x72\x8b\xde\x1c\x7c\x75\xc5\xec\x8f\xf0\x68\xba\x3d\xd6\x81\x3b\x89\xa0\xce\xb9\x2f\x1d\x37\x10\x91\x41\x1c\xb2\x43\x9b\xa3\x25\x32\x72\xcb\x18\xe3\xba\x64\x70\x83\x3c\x94\xac\xb6\x96\xf1\xe0\xed\x3c\x11\xed\x66\x79\xef\xad\x0d\x9a\xc7\x5a\x19\xc2\x88\xc8\x20\xce\x47\x1a\x05\xe5\xbf\xcf\xfa\xd4\xb7\xfa\x4e\x8f\x7d\x70\xb7\x26\x43\xfd\x9b\x56\xf0\xd2\x49\x4c\x2d\x43\xf8\xd6\x83\xb7\x3f\xd7\x6f\x50\x11\x39\xfb\x51\x89\x3a\xb6\x0b\xe0\xfd\xeb\xd0\x3c\x8e\x84\xab\x34\x3d\x54\x93\x5f\xbd\x10\x99\x8d\x9e\x08\xbc\x92\xfa\xcc\x84\x77\x86\x41\xba\xb6\x94\x76\x73\xe7\x8f\x44\xdd\xbf\xdd\x75\xb4\x86\x07\x96\x9f\xe9\xa6\x0a\x08\x67\x45\x8a\xd4\x05\xe6\x99\x36\x63\xdd\x74\x8e\x2b\x7a\xbf\xc0\x94\x46\x84\xe6\xff\x22\xd2\xf3\x7f\xcd\xa1\x81\x86\xf6\x6f\x95\x2c\x92\x43\xe3\xf8\xee\x2d\xe3\x1d\xdb\x80\x53\x35\xd4\x2f\xf9\x71\x9f\x48\x6a\x1e\xfb\x52\x1d\xb3\xe9\x34\xd5\xd0\x32\xa1\xd7\xc4\x85\xe0\xb3\xa9\x1b\xe5\x43\x32\x0f\xc6\xaf\xf3\xa6\xac\x3b\x66\xa8\x1f\x12\x3e\xbf\xd6\xf5\xa5\x61\x23\xe2\x82\x84\x0a\x9f\x8e\x17\x9b\xd1\x39\xda\x6d\x4e\xee\xa9\xd2\x33\xd9\x56\x44\x76\x68\x8a\x5c\x2f\xbf\x0f\xec\xf2\xac\xf4\x70\x5c\x13\xfd\xe3\x71\xcd\xb1\x2f\x79\x47\xcf\x00\xb7\xf0\x93\xcf\xfd\x43\xbe\x09\x3b\x75\xb4\x33\x19\xad\x1e\x72\xaf\xe9\xeb\x9b\x68\x76\xf8\x16\xcf\x05\x34\x52\x0b\xb9\x67\xdf\x28\x49\xc5\x63\xe4\x92\x89\xbb\x08\x76\xb4\xd2\x25\x0b\x52\x4d\x90\x9d\xc9\x68\x91\x1d\x1a\xfd\x8e\x19\x1a\xc1\xac\xce\xee\x4d\x61\xdb\xb8\x3e\xfb\x89\x72\xb2\xdb\x96\xd8\x92\xd7\xe7\xd5\x7c\x54\xca\x98\x18\xdf\x85\x25\x9e\x99\x43\x03\x89\xe8\xa4\x15\x0b\x9b\xb6\xbf\x7f\xa4\x43\xa4\x97\x3b\x4c\x7d\xdf\x34\x48\x72\x4e\x6d\x46\x2a\x39\x58\x65\x44\xa8\xff\x90\x3e\x53\x99\xce\x17\x6a\x13\x01\xe2\x90\x0a\xe2\xb2\x3b\x94\x24\xe5\xd1\x98\x16\xce\x45\xa8\xd9\x6e\x3d\x69\xf2\xd6\xc1\x7c\x8c\xd3\xbd\xfe\xf1\xd6\x60\x55\x44\x45\xf7\x4b\xe8\x42\x4c\x10\x07\x5f\xb1\x68\x43\xe7\xd7\x45\xff\x0a\xef\xaa\xaa\x25\x88\x12\xc7\x52\x1b\x4b\xbf\xa0\x64\xe1\xaa\x8c\x2b\x47\xaf\x7c\x4f\xd4\x43\xd9\x04\x1d\xf2\x03\x71\xf0\x15\x4b\xc1\x2a\x42\x67\xfb\xbc\xc4\xef\xb5\x7c\x36\xc6\x19\x0e\xd2\x8d\xdc\x6b\xc4\x24\x15\xc6\x93\x1f\x3f\x0b\xfa\x3f\xfb\xb3\xc8\x18\x82\x88\x0b\xe2\x7c\x24\xb1\xff\xf3\x1c\x84\xcd\x5e\x45\xe7\x3e\xed\xbf\xd2\xf5\x60\xf2\x4e\x39\xfe\xf7\x2a\xee\xe6\x95\xe5\x9f\xd3\xa4\x5d\xba\xe7\xb6\x38\x67\x1e\x4d\x72\x21\xde\x36\x40\xbf\xc4\x13\xbb\xbd\x0c\x16\xbc\x68\xfc\xfc\x36\xe3\x15\xcf\x88\xc9\xdd\x56\x93\x08\xed\x2c\xd3\x97\xe7\xd5\x63\x64\xb4\x31\xb4\x0d\x6c\x82\x8d\x20\x57\x09\xe2\xe0\xb9\x1b\xcf\x6a\xc3\x6b\x2d\x99\xa6\x96\x3b\x50\xaf\xa9\xb8\xcc\x45\xf1\x62\x5f\x81\x3a\xe1\xe7\xba\x14\xe1\x96\xf7\x4c\x17\x1b\x2a\x74\x1d\x22\x88\x83\xe7\x4e\x98\x6a\x61\x35\x0f\x7b\xa7\xaa\xfb\xce\xd3\xbf\xe4\x2f\xc2\x2f\x3a\x1f\x71\xf8\x1b\x1a\xd5\x28\xb9\x35\x4a\x3d\xe3\x78\xe1\x68\x8a\x88\x0b\xe2\xe0\xb9\x5b\x73\xf8\x76\x31\x57\xdc\xb3\xfc\xfc\xb0\x99\x9c\x17\x46\x94\xfe\x3d\x27\x41\x17\x3f\xbf\x1b\xf7\x9f\x0a\x58\xf0\xd9\x10\xaf\x8d\x22\xe2\x82\x38\x78\xee\x78\x85\x5f\xe2\xa3\x98\x48\x4b\xcd\x8a\xc7\xf7\x7f\x62\xd5\x94\x98\xd0\x2b\x68\xa8\xbc\x83\xe6\xa0\x63\x31\xfa\x87\xdd\x0b\x85\x16\x91\x3b\xd0\x74\x76\x52\xee\x7c\x02\xb2\x89\x83\x46\xf1\x09\x57\xba\xc5\x8f\x3e\xb9\x6e\x36\x48\x54\x57\x7a\x9e\x63\x56\xf6\x56\x4b\x55\xc3\xf4\x13\x4a\x20\x44\x7c\x67\x10\x07\xcf\x9d\x76\x97\x5c\x54\xf3\xc5\x84\xc0\x8d\x54\xe2\xeb\x09\x6e\x3b\xbd\x44\x1c\x85\xfc\x0c\xa5\xb1\x0c\x3b\x89\x7f\x42\x1f\x55\x8a\xb7\x23\xe2\x82\x38\x78\xee\x34\x36\x56\x15\x87\x54\x0b\x8a\xde\x36\x4a\xa5\x99\x98\x13\x6d\xaa\xf2\xdd\x5f\x52\xe8\x7a\x4d\xf4\xcb\xe6\x8a\x22\xb6\x24\xb6\x25\x22\x2e\x88\x83\xe7\x2e\x0a\x27\x7a\x3b\xb9\x91\x88\x72\x3a\xb9\xf3\xa0\x2e\x7b\x81\x94\x73\x1a\xef\x9e\x5c\xda\x08\xc9\x8f\xcd\x9f\x2a\xef\x14\x1e\x64\x43\xa7\x29\x00\x1c\x3c\x77\xe1\x39\x61\x09\xe2\x6e\x02\xa2\x0b\xa2\x61\xb4\x0c\x3c\x1b\xe5\xca\x7f\xf4\x83\x6d\xb7\xd3\x72\xdb\xb4\x1c\xaa\x7f\x05\xa3\x43\x6f\xf9\xa0\x35\xe1\xa4\xdc\x65\x52\xa3\x16\x96\xa6\x7d\xdb\x74\x7f\xc1\x88\x1d\x8d\x9b\x13\x29\x6e\x17\xf1\xc4\xeb\xce\x07\x8b\xfe\x8a\x62\x33\xf3\x96\x90\x45\xc4\x77\x06\x71\xf0\xdc\x4d\x3c\xd7\xa4\x9a\x48\xdd\x1d\x9e\x2c\xd5\xef\xfe\x23\x81\xba\xf0\x33\xcb\xe5\x1c\xc3\x15\xaa\x8f\xf9\xa3\x13\x74\xbf\x42\xf4\xa0\x0e\xf0\x20\x0e\x9e\x3b\x56\xde\x6b\xfb\xc2\x8d\xe8\x38\x35\x77\xf5\xcd\x32\x7e\x51\xea\x27\xa8\xe5\xa1\x25\x55\xd4\xde\x8c\x27\xd1\xf9\xab\x75\x4b\x1d\x3a\xaa\x08\xe2\xe0\xb9\x5b\x17\xf8\x29\xb1\x96\xaa\x43\x37\x9b\x1a\xd8\x98\xb6\xc5\x38\xc7\x77\x2b\xaa\xb7\x83\x60\xaf\x3b\x4c\x89\x74\xf8\xa2\xff\x16\xd4\xdd\x0f\xc4\xc1\x73\x87\xca\x32\x9c\xb7\x64\xd5\x5e\x17\x74\x6b\x01\xed\x9a\x74\x5f\xd9\x9c\x8d\x1e\x71\x91\x82\xc8\xe5\xd6\x59\x9f\x9c\x3d\x36\x03\xe8\x5f\x2d\xd0\xc2\x7a\xe2\x46\xbd\x84\xfb\xa4\x42\xb7\xbe\xcd\x28\x55\xab\x4a\x38\x69\x7e\x90\x03\xc7\x5f\xaf\xaf\x01\x8e\x0c\xc2\xf6\x6e\x2c\xb6\x79\x44\xd0\x6d\xf3\x20\x0e\x9e\xbb\xdd\x1d\xd5\x47\x78\x37\x56\xc7\x22\x71\x7b\x0e\x37\xac\xd7\x38\x65\x5b\x5c\x7d\x98\x1f\x2d\xb9\xf9\x35\xeb\xb6\x75\xfb\x5d\x86\x9a\xa5\x81\x38\x78\xee\x3e\xa4\xd6\x16\xb5\x19\x38\x2e\x1a\xd9\x8f\xe4\x97\xf3\xbf\x8a\x79\x40\x78\x33\x71\x93\x4e\xac\x69\x89\xa2\x34\x9b\x3d\xe5\xde\x2d\x44\x5c\x10\x07\xcf\xdd\xa3\x40\x8d\x59\x23\x63\xea\xd1\xd0\x32\x3e\xb3\x16\xba\x92\x49\x96\xaf\xac\xdb\x1e\xe4\x84\x0a\xbf\x1b\x26\x7e\x8d\x05\xf8\x9a\x43\xfd\x03\x01\x1c\x3c\x77\x28\x0f\x92\x28\x04\x5f\x0a\xb5\x4a\x9b\xaa\x78\x78\xff\x1e\x61\x6e\xf8\x9e\x9c\x29\xfc\x92\x93\xdf\x0e\xff\xbe\xc6\x8d\xae\xfe\x0a\x84\x43\x03\xbd\xdd\x9f\xec\xd0\x8e\xdd\x39\xba\x1e\xda\x89\xbc\xb4\xde\xfa\x1c\x98\x73\x67\x7b\xc0\xff\xcb\x73\x1d\x7e\xa9\xf7\xb8\x6f\x73\xb5\xb4\x16\x44\xe4\x72\x11\x6e\x07\xc4\x21\x3b\x34\xb1\xf1\x07\xa3\x7c\x4b\xd1\xb6\x97\x3d\x7f\x50\xdc\x1c\xa6\x4e\x31\x23\x3f\x1a\xd8\xaf\x17\x50\x51\x8a\xce\xba\x58\xf9\x47\x64\x00\x11\x19\xc4\x21\x3b\xb4\xad\xa3\x40\x9d\x0e\x96\x59\x71\x5c\xc1\x97\xdd\x9b\x13\x9a\xc4\xc5\x95\xf4\x87\x3e\x71\xd8\x6f\x99\x4a\x6d\x1e\x35\xae\xf3\x42\xb5\x99\x20\xee\xff\x1c\xda\x7f\xb5\x7c\xea\xbb\x64\xd3\x8e\x2e\x7f\x3d\x9f\xf7\x33\x8c\xa9\xb0\x4b\x36\x79\xc3\x8c\x9b\x31\x30\x99\x98\xcb\xe0\x9c\xf6\xe1\x95\xb5\xf2\xdf\x5e\x75\x3b\xff\x3a\xb4\x24\xb9\x90\x46\x86\x5d\xd7\x4a\x46\xc3\x1a\xf3\xcf\xfe\x6f\xe5\x25\x94\x74\x0a\x88\xb8\x38\xfa\xf4\x99\x8c\xd3\x28\x7e\xd2\x9b\xff\x83\x4a\xdf\x19\xd4\x73\x27\xd1\xd5\xdd\xad\x66\x25\x2b\xc1\x20\x6c\xdf\x0a\x24\x3b\x52\xf9\xba\x52\x8f\xf1\x2d\xbf\xea\x89\xd0\xf9\xc4\xff\x35\x87\x06\x1a\xda\xbf\xb5\x99\x48\x0e\x2d\x49\xb0\x38\x79\xc3\xf4\x91\xf8\x5a\x79\x11\xfe\x22\x3a\xe6\x03\x06\x94\x99\x58\x52\xb9\x3d\xab\x7b\x78\x01\x0f\xaa\xcc\x0a\xd4\xcf\x64\x7b\x07\xd9\xa1\x4d\x9f\x5f\xa8\x8a\x5e\x0e\x4b\x66\x7c\xfe\x8b\x78\xa5\x8c\xfc\xf7\x75\x52\xff\x86\xc7\x2c\x71\x92\xef\x49\xd3\xde\x10\x79\x95\xe3\x9f\xc9\x66\x16\xb2\x43\xfb\x1e\x74\x4f\xfa\x9c\x49\x02\xbe\xa5\x72\xb8\x77\x1e\x9e\xac\x69\xa3\xfb\xcf\xcc\x26\xbd\xd0\xf8\xaf\x71\xab\x92\xbb\x62\xd9\x02\x67\x32\x5a\x64\x87\xf6\x4d\x24\x43\x52\xb5\xb8\xb3\xff\x6d\x03\xc1\x77\x75\x14\xbb\x86\x6b\x37\x7f\xf5\x5e\x52\x3b\x7e\xe4\x16\x72\x43\x58\x41\xf4\xcb\xd9\x34\x56\x46\x76\x68\x41\x05\x25\xd9\xe2\xbb\xcb\xfe\xa5\xc6\x07\x8f\xbf\xca\xc4\x7f\x26\x17\xfb\x75\x49\x7b\x2d\xbb\x96\x21\x71\x30\xa0\x3a\x93\x1f\xf7\xcc\x1c\x1a\x48\x44\x27\xad\x58\x8a\xfd\xb2\x7a\x6b\x29\xdd\x17\x0f\x43\xe4\xf3\x03\xf9\x39\x1c\xaa\x2e\x99\xcc\x38\xf0\x7c\x30\x9d\x21\x94\xcd\xbb\x7a\x41\x5b\x1b\x31\x53\x83\x38\xf8\x8a\x55\xad\xb3\x30\x29\x82\x2f\xaf\x31\x71\xd4\x36\x3d\x8b\x11\x89\xdb\xd5\xf7\x2e\x71\xef\x16\x07\x75\xa6\x15\xe6\x56\xac\x37\x3d\x74\xe7\x2b\x88\x83\xaf\x58\xd1\x5e\x44\x59\x2d\x84\x75\xba\x06\x04\x42\x94\xd2\xf5\x41\xbb\x4f\x9a\x8d\x22\x46\xbf\x2b\x68\xda\x6c\x77\x2d\x9c\xbb\xc9\xc4\x8c\x88\x0b\xe2\xe0\x2b\x96\xc5\x77\xd7\x15\x8f\xfb\x6f\x1c\xdf\x7e\x53\xa5\x65\xfe\x64\x98\x37\xf6\xd4\x4f\xd1\xc5\xf3\x9a\xe3\xbe\x05\x26\x43\x6e\xeb\x79\x3a\xe8\x94\x21\x80\x83\x3f\x87\xbb\x1f\x4a\x55\xc8\x7e\xbc\x6d\x60\x59\x51\xe4\xcb\xa0\x08\x6a\xa6\xdb\x42\xb1\xe4\x22\xbd\x12\xc6\x8d\x6f\x72\xe3\xf6\x87\xbf\x5f\x11\x6f\x1b\xa0\x5f\xe2\x49\xb9\x2b\x45\xd5\x17\xde\xbf\x77\xef\xb9\xb0\xc2\x55\x81\x04\xae\xd5\xc9\x4e\x57\xad\x61\x9a\x90\x83\x69\x2c\xa5\x25\xf5\xfb\xaa\xf7\x3e\x43\x17\x00\x00\x38\xf8\x77\xa6\xfa\x6a\x4f\x8c\xb9\x8a\x96\x45\x4b\x19\x8b\xea\xf2\xd1\xe2\xf1\x66\xd0\xd2\xf2\xdb\x08\xbd\x0f\xee\xce\x73\x38\x15\xef\x2a\xb3\x10\x71\x41\x1c\x92\x43\x73\x25\x49\xdb\xff\xfd\xc9\xe7\xc0\x2c\xdb\x65\x83\xd2\xfe\x56\x62\x8f\x3b\x77\xe5\xc7\xd7\x01\x5e\xf3\x6b\x89\xb3\xb1\x71\x2a\x90\x43\x03\x70\xf0\xdc\x19\xc8\x6d\xaf\xe5\xf2\x85\xf6\x46\x27\x3d\x98\x49\x90\xe5\x1c\x32\x5c\xff\xd2\xe6\x15\x41\xb4\x1c\xf9\xf9\x2e\x75\x8f\xbd\x0b\x15\x74\x00\x08\xc0\xc1\x9f\x03\xe5\x3b\x5b\xd2\x9d\x9c\xfa\x77\x6c\x54\xe9\x32\xd8\x1f\x16\xf8\x7f\x71\xd2\xc6\xbd\x75\xd8\x4a\xbb\xaa\x92\x5d\xb8\xdb\x9f\xa9\x85\xc8\x1d\x68\x3a\x3b\x29\x77\xfe\xfe\xcf\x78\xcf\x65\x58\x95\xac\x8e\x46\xda\xd0\x32\x50\xc8\xc6\x50\x70\xcf\xe9\xd6\x3b\xba\xa8\x30\x6c\x98\x97\xab\xfd\xf6\x41\x7c\x67\x10\x07\xff\xce\x16\xe7\x02\x7c\x49\x2c\xf7\x43\x35\x4b\x37\x6c\xff\x8a\xcd\xdb\x39\xa3\x29\x8b\xf5\x0f\x4e\xec\x0d\x73\x76\x1a\x56\x0e\x7b\x07\x43\x3a\x06\x70\xf0\xdc\x35\xb7\x13\x89\x4e\x65\x91\x53\x3f\xfb\xed\xec\xb2\xd2\xb0\xc2\x6a\x96\x66\xff\x83\xfa\x1e\xf5\xad\xed\xd9\xe6\xbe\x2c\x97\x7c\x68\x0f\x0d\xc4\xc1\x73\x47\xc3\x92\xee\x72\x79\x5a\xb6\x93\xe7\x70\xa9\x36\xd2\xdb\x70\xf7\x8b\x0a\x5a\x6c\x51\x7e\xa1\x1f\xbf\x87\xf5\xa0\x57\x79\xb7\x17\x22\x2e\x88\x83\x3f\x87\x6c\x6a\x65\x15\x8f\x3f\xfa\x97\x87\x29\x88\xa6\x9e\x95\xcc\x5b\x64\x5a\xe3\x0b\xd4\x04\xbf\x89\xe8\x30\x34\xe5\xc3\x36\x21\x5a\x42\xe4\x0e\xb4\x26\x9c\x94\xbb\x69\x9a\xeb\x55\x07\xde\x29\x7b\x0c\x5f\xd5\xb1\x64\x13\xda\xbb\xe3\xf5\x4a\x48\x7a\xad\xe2\x38\xed\x6c\x3e\x60\x72\xd2\x8f\xe1\x41\xfb\x94\x00\x0e\xfe\x9d\x7b\x1c\x2d\xd5\xf6\x36\xdf\x47\x90\xc4\x52\x2e\xbb\x63\x68\x55\xa4\x4c\xf5\x3b\xf7\x49\x73\x4f\x9a\x9c\x7b\x15\x12\x6c\x59\xbe\x8c\x88\x0b\xe2\x90\xda\x3c\xc5\xb2\x17\xc6\x5b\x07\x57\x70\xca\x0d\xaa\xae\xfc\x8c\xec\x97\x8c\x7a\x12\xb5\xb0\x14\x54\xac\xe9\x80\xfd\xc2\xb8\xc0\x49\x1e\x6a\xf3\x04\xe0\xe0\xb9\x93\x09\x64\x58\x2f\x5e\xc5\x8a\xde\x16\xc8\x6f\x7a\x67\x3d\xad\xb1\xd9\x9f\xaa\xac\x29\xb9\xd8\x8c\xcb\x5f\x2f\x58\x90\x98\x0f\x15\xbf\x81\x38\xf8\x73\x28\x2a\x27\xff\xaa\x7e\x40\xc5\xf8\xe6\x2d\x41\xbb\x93\x63\xc3\xfd\xf7\xa1\x3c\xcb\x33\x98\xcf\x67\x2e\xf5\x68\x7f\xd2\x1e\xce\x45\x43\xe4\x0e\xb4\xb0\x9e\x94\x3b\x2f\xb5\xaa\xb1\xdc\x3c\x3d\xfc\x91\x3b\xb4\x2c\x18\x81\x6b\x9d\xb2\x7f\x24\xbb\xb9\xb6\x2e\x4f\xd0\xe4\xbc\xfb\xeb\x80\x56\x0a\xed\xfb\x81\x38\xf8\x77\x4e\xb7\xbf\xf3\x7e\x84\x05\xa3\xa7\x7d\x8a\xf4\xfe\x56\x54\x6c\xbc\x8d\xd0\x48\x45\xd0\xb3\xb7\x93\xee\xa5\xcf\x63\xeb\x96\x4c\xe3\xa0\x67\x0c\xe0\xe0\xb9\xd3\x95\xbe\x27\xd7\x9e\xaf\x70\xb3\xf5\x62\xe0\x2f\x33\x43\x1c\x19\x1b\x13\xdc\x51\xbf\x64\x67\x0a\x35\xe9\x09\x95\x6d\xfc\x70\xe8\xdf\x00\x10\x07\xcf\x5d\x90\x3b\xe5\xbc\xd0\xc3\x78\x7c\x83\xdb\xdf\xf4\xc4\xaa\x46\x49\xed\x50\xf9\xd0\xb2\x4b\xef\x49\xbc\x96\x27\xde\x5b\xdd\xe2\x31\x40\xc4\x05\x71\xf0\xe7\x90\x33\x87\xd6\xf2\xf3\x60\x4c\xe0\xc5\xaf\xbd\x2a\x29\x52\x53\xbb\x52\xf7\x31\x81\x85\xca\x9d\xd2\x4a\xcc\x8c\x1d\x7f\xae\x57\x07\x08\x87\x06\x7a\xbb\xff\xff\x53\x11\xc8\xca\x28\x68\xb8\xcd\x24\x11\xd6\xc2\xed\xa2\xa6\xfe\x36\x8a\x44\xab\x3e\xf5\x2f\xd5\xb9\xf3\x31\xaf\x69\x1e\x5e\x8c\xc2\x39\x84\x2a\x02\x01\x1c\xb2\x43\x6b\x36\xf1\x79\x28\x68\x3d\x36\xf5\x59\xf9\xd5\xbd\xc7\xfb\x0d\x04\xe1\x96\x1b\xb7\x95\xca\x64\x1e\x5e\xfb\x58\x5f\x34\x9e\x9e\x9f\x88\x88\x0c\xe2\x90\x1d\x9a\xf0\xc5\x99\xb0\xe2\x40\x0e\x2f\x3c\x4a\x5a\xd9\x1c\xb1\x94\x7b\xc7\xb8\x5d\xf5\x58\xd4\x06\x5f\x1d\x36\x04\xcd\x5a\x8b\x0f\x94\x11\x91\x41\xdc\xff\x39\xb4\xff\xba\xe1\x53\xdf\x60\xfa\xf9\xf1\x13\xed\xd0\x4a\x4f\x6d\xbf\x47\x34\xb4\xdb\x5f\xa8\x52\xaa\xb3\x94\x30\x12\xc8\xf6\xd1\x86\xee\x24\xc9\x99\xe4\xff\xf9\xcf\x0d\xa6\xd9\x7e\xd2\x1a\x3b\xc9\xdc\x4f\xe7\xa7\xf8\x94\x36\x3e\x2d\x13\xcd\x67\x8d\x5c\x58\xb4\x8e\xcf\xab\x62\xdb\xd3\xbf\x6b\x1d\x1b\xf4\x0f\x9a\x26\x71\x8e\x2a\x8a\xdf\xf3\xcd\x64\x93\xae\xd6\xb7\xf3\x3b\xeb\xb9\x72\x3d\x02\x52\x21\x31\x9e\x8c\xbf\x78\x68\x33\x6e\x5f\x7c\xf1\xbf\xe6\xd0\x40\x43\xfb\xb7\x22\xf0\x36\xfc\x2d\xfe\xa0\xfd\x6f\xee\x21\xfb\xec\x86\x9a\x92\x88\xc7\x40\xd6\xed\xbf\x7a\x5a\xd2\xb1\xbd\xbf\x62\xd1\x75\x99\xe7\x5e\x4e\xaa\xb2\xc9\x9e\xc9\xf6\x0e\xb2\x43\x7b\x37\xb8\x61\x65\xc6\x75\xee\x3b\xde\x85\x0b\x23\x57\xec\x6f\x26\xc6\x61\xf9\xe1\xb6\x5b\xb5\xdb\x58\x95\xfd\x42\x5f\x21\x0d\x75\x3d\x93\xcd\x2c\x55\xa4\x8f\xbd\x3e\xe9\x7b\xb1\xb1\x00\x0d\x55\x47\x43\xfe\xc6\x8f\x28\xa3\x7b\x4d\x09\x7a\x6d\x6d\xf5\x0d\xed\xf1\x9f\x34\x97\xed\xab\xc9\xce\xc0\xb3\x04\x49\x7b\x21\x3b\x34\x35\xe2\xc9\x55\x99\x02\xbd\x54\xa3\xa1\x1d\xd7\x92\x4f\x0d\xb2\x81\xe5\xfd\x9d\x0a\xae\x66\x9a\x3d\x23\xaf\x35\x36\x03\x6f\x31\x9d\xc9\x68\x5d\x90\x3e\xb6\x62\x20\xd4\x82\x59\xbb\x4d\x3d\xde\xfe\xde\xcf\x49\xd6\xad\x6a\x8d\xde\xc3\x17\xae\x09\x02\x62\x19\xbf\x73\xe7\x5c\x65\x9c\x26\xcf\xcc\xa1\x81\x44\x74\xd2\x8a\x45\x92\xd2\xbd\x5a\x27\x2b\xf1\xa9\xd0\x4e\x35\x49\x27\xb2\x12\xef\xe7\xce\xa5\x6a\x87\xe4\x0b\x92\xa4\xba\x07\xb8\x4f\x4d\x1a\xa8\x11\x33\x35\x88\x83\xcf\xd4\x55\x35\x99\xb8\x61\x75\x0a\x92\x36\x38\x3a\xe3\xdc\x2e\xfd\x9b\x1b\x1f\xff\xb0\xf9\x84\x09\xb9\x1d\x1d\x6d\x7d\x7b\x42\xd3\x06\xb5\x2e\x07\x71\xf0\x15\x6b\x8e\xb7\xf2\x9d\x5e\x83\x96\x94\x1b\x7b\x70\x39\x0e\xa1\x64\x68\xea\x3d\x67\x6b\xd2\xfa\x51\x6e\xf5\xf1\xe6\x16\x71\x8a\x37\x47\xd0\xe9\x30\x00\x07\x5f\xb1\xa6\x3d\xd2\x1a\xdc\xc3\xc2\xf3\xfa\x78\x96\xc9\xe3\x45\x92\x68\xa7\xfd\xf9\x7f\x05\xd5\x77\x26\x63\x0f\xa6\xd6\xc8\x4d\x87\x40\xa7\x49\x40\x9c\x8f\x24\x0a\xf6\x7f\xfe\x6f\xcf\xe4\x63\xa6\x0e\xb4\x7c\x80\xaa\xf1\xdb\x97\x7f\xd5\x54\x7b\x2d\xd0\x79\x7a\x26\x26\x7a\xb8\x6d\x7b\x38\x52\x33\x93\x17\xda\x87\x01\xfd\x12\x4f\xca\xdd\x0b\x42\xd4\x06\xbd\x65\xfc\xa9\x1d\xfa\xa1\x29\xba\x14\xe9\x2b\xf7\x57\xf6\xef\xe3\x7a\x77\x3f\x90\x8a\x8e\xde\x72\x9e\x63\x80\x3a\x14\x81\x38\xa4\x55\x76\x17\xbd\x20\xe2\x42\x5f\x8c\xb7\x22\xcd\xfe\x9f\x08\x74\x47\x4e\xba\xbb\xdc\x03\xca\x59\xd7\x98\x7e\xdb\x0a\xe5\x3f\x4b\x41\x43\xc4\x05\x71\x48\xb7\x0b\x7a\x71\x6a\x95\xdf\x92\xa5\x0d\xa9\x5d\x32\xb8\xda\xda\xbd\xa4\x4d\xc9\xd3\x54\xfd\x8e\x15\x0d\xaf\x3b\xad\xe6\xe5\x35\x2b\x25\xe8\x6d\x1c\xc0\xc1\x73\xc7\xf3\xfd\xaf\xc6\xa1\xfd\xaf\x57\x3e\xdf\x0c\x1f\x0d\x1d\xe7\x68\x6c\x4d\x60\x92\xe0\x05\xb9\xc9\x4b\x70\x31\x0d\x3d\xdd\x69\x86\xf6\xfc\x40\x1c\x3c\x77\x26\x84\xae\x91\x4b\xc6\x49\xa2\x1c\x8f\xb0\xde\x05\x38\xcf\x92\xc6\x7b\x60\x31\xd7\x89\xe8\xbc\xb6\x24\xd4\xad\x0c\xd2\xce\xcd\x46\xe4\x0e\x34\x9d\x9d\x94\xbb\x88\x21\x74\xa9\xac\x86\x1d\x0d\xd2\x82\x4a\x5a\xe9\xcc\x01\xbf\x6d\x07\x5d\x05\x5d\x6a\x4d\x7f\x8b\x3e\xf1\x21\xd3\x70\x39\x0f\xc4\x77\x06\x71\xf0\xdc\x59\x6f\x15\x5c\x3d\xfc\x61\x27\x2a\x7b\xf9\xf8\x5b\x96\xd5\x71\xb3\x65\x76\x16\xa9\xfb\xec\x17\x8b\xdb\x2e\x98\x96\xdf\x3a\x71\x13\x10\x71\x41\x1c\x3c\x77\xe5\x9c\x51\x1b\xa5\xd8\x1f\x08\x30\x1f\x19\x17\xd9\xd0\x07\x8a\xaf\xf7\x37\xe2\x47\xc8\x70\x62\x06\xbd\x95\x5a\xba\x59\x4d\x2f\x87\x88\x0b\xe2\xe0\xb9\xbb\xe9\x9f\x24\xe1\x54\xe4\xd5\xdb\xab\xf2\x9e\xa7\xf2\x73\x67\x1e\x79\xa2\xef\x03\x97\x51\x7f\xa3\xf3\x1a\x36\x0b\xd6\x35\xfa\xd0\x9e\x38\x88\x83\xe7\xce\xe8\x17\xd3\xf9\x87\xaa\xe7\xb2\x5f\x3f\x71\xbd\x76\x93\x5e\x7b\x25\xef\x7d\x52\xd2\x8e\xca\xf0\xe2\x32\xeb\xd0\x8d\x2d\xfd\xcb\x12\x88\xdc\x81\xd6\x84\x93\x72\x27\xbf\x4a\xa7\xb7\x94\xe5\xa1\xbc\xa8\xd6\xdd\x82\x16\x13\x70\x43\xeb\xee\xc1\x45\xfa\x30\xa7\xbe\xa9\xfb\x7d\x37\xe6\x85\x76\x92\xa1\x13\x62\x00\x0e\x9e\xbb\x80\x3a\xdd\x76\x07\x99\x6b\x25\x66\xc3\xa9\x11\x32\x2f\x6a\xa3\x08\x65\x14\x92\xc6\x0c\xab\xb7\x9b\xfd\xed\xb6\xdc\x1f\x63\x41\xb5\xa8\x20\x0e\x9e\x3b\x45\xec\xc4\x64\xdd\x5a\x23\x7f\x8d\x17\x3a\x21\x98\xea\xc3\x4d\xa3\xc2\x5c\x5e\x85\x5b\xd9\x2f\xa4\x33\xe9\x9a\x58\x65\x2a\xa1\x67\x0c\xe2\x90\x4e\xa8\xde\xf8\x73\xb8\x2c\x32\xfc\x09\xcd\xb8\x3d\x2f\x31\xb8\x50\xe8\xd6\x83\x28\x4f\xbf\x21\xb9\x75\x56\x5d\xe9\xa2\xab\xaa\xd2\xac\xd0\x09\x55\x00\x07\xcf\xdd\xdf\x8a\x1b\x31\xef\x8c\x2c\xa3\x2f\xfd\xf8\xca\x7d\x4c\x71\x3b\x3d\x88\xe0\x5d\xed\x45\x95\x66\x02\x3e\xfa\xca\x01\xb4\x44\x6b\xe8\xdc\x01\x68\x61\x3d\xf1\xdc\x41\x58\x84\x02\xa3\x93\xac\xd7\xce\xa7\x6d\x93\x61\x9c\xd9\x91\xc4\xe4\xe3\xfb\xae\x77\xb9\x9a\xb3\xf7\xf7\xc6\xda\x2c\xda\xa1\x8b\x76\x40\x1c\x3c\x77\x5f\xb3\x9e\x6e\x19\xf6\x68\x4e\xb9\x94\x1f\x30\x44\xe2\x5d\xe6\x6e\x61\x1e\x7f\x9e\xff\x16\x6b\xea\x9a\x9f\x3d\xf7\x6e\x66\xc5\x5b\x44\x5c\x10\x07\xcf\x1d\xa5\xdb\x9c\x83\xc6\x7d\xce\x3b\x3c\xb4\x85\x12\x77\x5b\x3d\xbf\x6a\x2e\xdd\x50\x44\xc5\x1e\x36\x5b\x8f\x61\x76\x65\x5f\x1c\xbe\x8c\x88\x0b\xe2\xe0\xb9\xf3\xfd\xfd\x4c\x92\xd7\x46\x53\x0b\xab\xdd\x7c\xd8\xb8\xb3\x7d\x40\x66\xc5\xae\xf8\x45\x37\x8a\x57\xba\x8c\x47\xd9\xec\x84\xbd\x26\x22\x2e\x88\x83\xe7\x2e\x6c\x9e\x2c\xdc\xd1\x52\xeb\x67\x7b\xd0\xf7\x1b\x5e\xd8\x77\x8f\x6e\x09\xd1\x2c\xb8\x27\x72\xf3\x7e\x19\xff\xae\x3d\x1d\x7d\x50\x80\x70\x68\xa0\xb7\xfb\x93\x1d\x1a\xa3\xf3\xf1\x88\xcc\x7a\x9b\x3a\x41\xc7\x80\x92\xfc\xf7\xbd\x64\xc1\x03\xcf\xb9\xdb\x15\x66\x55\xe3\xd7\x65\x52\xed\x07\xdb\x70\x10\x6e\x07\xc4\x21\x3b\xb4\x21\xaa\x35\x06\x22\xea\xd0\x11\xd9\xd4\x45\xdb\x73\xb8\x06\xf1\x55\x61\x8b\xd6\xd8\x12\x16\xf8\x32\x22\x42\x1f\x45\x62\xce\xef\x40\x5d\x48\x01\x1c\xb2\x43\xbb\x91\xe3\xbd\x67\xac\xf6\xda\xa8\x8e\x1a\xfd\x51\x19\xf3\xcd\x8f\x3b\xcb\x07\x3e\x0e\x47\x1d\xc4\x45\x38\xbd\xb5\xef\xee\x86\x70\x22\x22\x83\xb8\xff\x73\x68\x74\xff\x89\x7c\xea\x7b\x33\x9d\xa2\x37\x36\x14\x08\x1d\x46\x96\xad\x1f\xa4\x7a\xfc\x90\x90\x75\x8b\x37\xaf\x0e\x26\x5e\x24\x93\x71\x89\x56\xba\xc0\x7c\x38\xf1\xaf\x43\x23\x94\x6b\x97\x97\x62\xb7\xd1\x89\xe3\x7b\xeb\x81\x32\x42\x51\x6c\x42\x6b\xc6\xbe\xad\x43\xeb\xae\x16\xb4\x13\xc8\x5e\x82\xfb\xf5\x1f\xf4\x7e\x4d\x8b\x4b\xd7\x35\xfc\x98\xfe\xd9\xa6\x63\xac\x48\x59\x95\xaa\x3d\xc2\x9c\x0e\xb4\x7e\xe5\x65\xdd\x90\x94\xfb\xa6\xc7\xfc\xff\x6b\x0e\x0d\x34\xb4\x7f\xeb\xd0\x90\x1c\x5a\xbe\x78\x1e\x9b\x35\xf7\x5d\xd3\xc9\x9b\x5d\xdd\xd4\x9c\x51\x5b\xf5\x71\xbe\x53\xf7\x83\x3a\x1f\x33\xd2\x5c\x63\xa9\xb6\x4c\x2c\x3e\x93\xed\x1d\x64\x87\xa6\xa3\x75\xed\xf8\xce\x98\x67\x24\xc1\x5b\x4e\xe9\xa6\x62\x2d\x9f\x67\xd5\xcc\x1c\x5e\x56\x6e\x79\x5d\xd6\x24\x0e\x1d\x42\x85\x24\x67\xb2\x99\x85\xec\xd0\x74\x5c\xf1\x5a\xdc\x25\xa5\x1f\xaa\x96\x8f\xd3\x7f\xaa\xb8\xe4\xc5\x94\x7d\x13\x65\xbd\xf6\xf7\x9d\xc0\x72\x75\x77\x49\xf1\xb7\x25\x67\x32\x5a\x64\x87\xf6\x4b\x3b\x93\x01\x9f\xff\x0a\xef\x8c\x96\x54\x33\x2d\x21\x3b\xc3\x43\x2b\x6a\xda\x37\x3f\xef\x95\x60\x5e\x7d\xe8\xe4\x79\x13\xf3\x4c\x0e\x57\xde\x42\x76\x68\xd7\x97\xd8\xdd\xe5\xb6\xfc\x38\x02\xed\x6d\xe6\x5a\xdb\xdf\x24\xe0\x26\xba\xa9\x46\x3f\xf4\x55\x16\x6b\x09\x95\x30\xab\xa7\xd4\x3e\x33\x87\x06\x12\xd1\x49\x2b\x96\xf0\xb7\x9f\x5c\x5f\xaf\xc4\x8c\xea\x0a\x6e\x5e\xf0\x2c\xaa\xc6\x31\x8f\x79\x3a\x51\xa9\xf9\x6d\x16\x57\xc4\x9f\x9e\x6b\x6b\x17\xea\x07\x07\xe2\xe0\x2b\xd6\x7e\x13\xdf\xdf\xe8\x0a\x37\xac\x56\xef\xca\x82\xc8\x48\x5e\xb1\x30\xda\xf7\x33\x42\x21\x5f\x95\x4c\x27\x30\x6f\x16\x54\xbf\x82\xf6\xa4\x40\x1c\x7c\xc5\x6a\xb1\xbf\xda\x69\xfb\x14\x8d\xa0\x5e\x37\x0a\xdb\x3f\xa6\x41\x62\x1e\xcb\x3e\x42\xf1\x0a\x06\x9f\x8f\xff\x00\x77\x7e\x9f\xfb\x3c\x22\x2e\x88\x83\xaf\x58\x5e\x03\xe7\x08\x57\xba\x83\x30\x82\x42\x85\xd2\x59\xba\xa5\xac\x3e\x7e\x96\x7d\xa2\x96\xee\xb6\xa8\xb5\x6a\x4e\x5c\x45\x80\x03\xf5\x90\x07\x71\x3e\x92\x28\x5e\xff\xd9\xdf\xe9\xf7\xca\xe4\x34\x37\x7e\xcd\x61\x32\x61\xf9\xd1\x43\x52\xaf\x7a\x6f\x7f\xc8\x60\x48\x3a\xea\xf8\x6f\xeb\xe2\xdf\xba\xd1\x05\xc4\xdb\x06\xe8\x97\x78\x52\xee\xee\x90\x8a\x84\xd6\x52\x4e\x61\xd0\xb1\x79\x8f\x77\xf5\x91\xf5\x7a\x0d\xa3\xeb\x4f\x79\x84\x44\x5d\xd1\xbd\xd8\xa2\xbc\xf0\x3b\x12\xf1\x9d\x41\x1c\x3c\x77\x3e\x61\xf4\x22\xc4\x44\x2f\xcc\x59\x44\xf6\x22\x33\x33\x32\xed\xca\x68\xb7\x7f\x1f\x0d\x9a\xd8\xf9\x46\x8b\x95\x5f\xbf\x41\x0a\x5d\xad\x0f\xe2\xe0\xb9\xab\xf7\xe2\xf7\x7a\x40\x2e\xb6\x96\xb9\x9a\xa5\xb4\x25\xba\xbd\x41\x88\xf7\xa7\x52\xb7\xdc\x36\x10\x47\xd2\xb4\xff\x27\x95\x16\xd4\x4f\x01\xc4\xc1\x73\x47\x45\x9f\xa3\x70\xe1\x92\xeb\xc6\xd8\xce\x85\x42\x4d\x6d\x5a\x06\xb6\xfa\xf9\x5b\x14\xac\x5a\x6f\x31\x36\x67\x43\xc3\x55\x5c\x7f\x40\x7b\x7e\x00\x0e\x9e\x3b\x55\x92\xe1\x9b\x4f\x4b\xc6\xab\xaf\x50\x67\xf3\x2a\x0a\x06\x7f\xf7\xea\x97\x9d\xa2\x50\xe3\x0c\xdd\xec\xa2\x15\x17\xe4\x61\xfc\x0e\xe5\x0e\x30\x9d\x9d\x94\x3b\x4f\xb5\x70\xf5\x07\x31\x57\x0d\xd2\x65\xf5\x99\x28\x70\xa4\xfe\xb2\x87\xb0\x08\xb5\xfe\x29\x8c\xf5\x7a\x8a\x53\x6d\x27\x11\xf4\x1a\xf1\x9d\x41\x1c\x3c\x77\x35\xf8\xb7\x39\x6c\x5a\x49\x88\x8a\xaf\x08\xfc\x7c\x5c\x5c\xd0\xe9\x4c\xb0\x19\x9d\x54\x60\x71\x3e\xe0\xea\x57\x09\x21\x7c\x7d\xa8\xf3\x0e\x88\x83\xe7\x2e\xe2\xb8\x41\xcd\x0e\xe3\xe7\x8b\x07\x7b\xb3\x57\x1c\x8a\x1a\x0e\xee\x8c\x91\x92\x39\x44\x6a\xc5\xa0\x2d\x88\x0f\x26\xbf\xc5\x80\x7a\x56\x80\x38\xa4\xfd\xcf\xc4\xa7\xc6\xd5\x16\xae\xa5\x96\x0f\xf2\x65\x9d\x08\x2e\x2e\x52\x96\xf2\x2a\x93\x5e\x0a\x3b\x97\x9c\x12\x81\xf2\xe8\x0b\x3e\x74\xba\x18\xc4\xc1\x73\xf7\xe7\xd6\x26\x37\xdb\x97\x31\xe3\x6e\x15\x6f\x2b\xc9\x74\x41\xd6\xfe\xfd\x56\xa9\x02\xcd\x9a\x52\xed\x4d\xd4\x26\x75\x47\xf4\x2d\x44\xee\x40\x6b\xc2\x49\xb9\x63\xba\x56\x55\x28\xce\x9b\x43\xa4\x29\x7a\xee\x0f\x1a\x5a\x8a\x67\xee\xcf\x70\xd9\xc1\xd0\x95\x52\x13\xd2\x55\x9e\x6c\xfb\xfb\x64\x88\xef\x0c\xe2\xe0\xb9\x4b\x2d\xe2\xba\x96\x9a\xeb\xfe\x10\x9b\xc5\x5e\xb0\x49\x25\x72\xff\xcf\xbe\x94\xfd\x95\x39\x8d\x77\x03\xee\xb4\x02\x37\xef\x0b\x42\xff\x3e\x81\x38\x78\xee\x86\xf5\xe7\xda\xf9\x58\x6d\x73\x1a\xfd\xfe\xe0\x44\x47\x46\x7c\x66\x96\x8a\x1c\xbd\x2c\xfe\x83\xcc\x09\x2d\x69\xf9\x2e\x73\xdb\x26\x22\x2e\x88\x83\xe7\xee\x05\xfe\xad\x4a\x02\xcf\x7e\x23\xa5\xf4\x58\x2d\x6e\x4b\xf4\x6d\x46\x39\xb9\x39\x1d\xa9\x87\x11\x99\xdc\x18\x8f\x6f\x6b\x28\x41\xa7\xac\x41\x1c\x3c\x77\x6c\xd3\xcf\x3f\x35\xf0\xcf\x1f\x4a\x2a\x85\xde\xfe\x15\x2a\xe0\xbf\x27\xe1\x39\x9c\x45\x43\x70\x45\xa4\xd8\xc2\xea\x65\xdf\x61\x02\xf4\xcf\x08\x60\x61\x3d\x71\x0f\x4d\x59\x07\xe5\x8f\xcb\xea\x40\x7d\x01\xe3\xaa\x84\x9a\x1c\x56\x89\x6e\x8f\xc3\x0f\x8a\xa9\x73\xc4\x52\xc2\xa1\x89\x26\x83\x9c\xd0\x3c\x0f\xe0\x90\xee\x01\x0d\x13\xb3\xeb\x5a\xdd\xd0\x75\xc6\x56\x8e\x4e\x29\xf6\x26\xff\x39\xaf\x52\x77\xf8\xb9\x04\x7f\x9d\xaf\xf3\xc9\x35\x19\x31\x5c\x44\x5c\x10\x07\xcf\x9d\x00\xea\xae\x7f\x70\x5d\xf7\x4a\xbb\x06\x86\x50\xb0\x72\xef\x8d\xa1\x17\xbd\x5f\xaf\xe3\xdf\x0f\xbe\x75\x50\xd6\xb0\x67\x6b\xda\x86\x88\x0b\xe2\xe0\xb9\x13\x8b\xe1\xbb\x2d\x95\xa6\xe0\x17\x2e\xc7\x63\x82\x4b\xde\x7c\xfc\xe2\xc7\x9e\x07\x49\x71\x01\xf1\x65\x0d\x36\xeb\x81\x2b\x2f\xd9\x10\x71\x41\x1c\x3c\x77\xe3\x8f\x69\x19\xfc\xd3\x8d\xb2\x70\x02\x1e\x9b\xb8\xd1\xda\x8b\x37\x7d\x91\xf5\xfd\xb3\xb4\x3c\xc9\xae\x92\x27\x7e\x70\x27\xde\x11\xe1\xd0\x40\x6f\xf7\x27\x3b\xb4\xfd\x47\x75\x3e\xcb\x96\x24\xae\xe7\x3f\xd3\xc8\xa6\x7f\xc6\x40\xe9\xc7\xd5\x8f\xb1\x2f\x2c\x48\x4d\x37\xdf\xf3\x10\x12\x71\xc7\x44\xb8\x1d\x10\x87\xec\xd0\x0a\x07\xbd\x27\x9b\xfc\x27\x5b\x96\xf2\xf2\xdf\x84\x3e\xd2\x7d\x2d\x49\xf4\xd8\xf1\x52\x62\xde\x47\x35\x6b\xad\x11\xbd\x9f\x07\x50\xbf\x4e\x10\x87\xec\xd0\x32\x28\x3f\x51\x10\x8e\x9b\x60\x5a\xbd\x1c\xbc\x1d\x8c\xfd\x2b\x25\x4c\x46\xf7\xef\xc7\xe9\x34\x33\x9f\xfd\x8d\x32\x05\x87\x70\x53\xe8\x1e\x48\x00\xf7\x7f\x0e\xed\xbf\x9a\x3b\xf5\x6d\x8d\x91\x1e\x64\xd9\xd7\xb1\xe7\x47\x98\xd0\xc7\x5a\x44\xf7\x3e\x90\x30\xec\x08\x91\x27\x5c\xb0\xa5\xbb\xc5\x51\x40\xff\x28\xc1\xbc\xe0\x5f\x87\xc6\xe9\x56\x38\xf4\x76\xc0\xcf\x13\x4f\xf4\x9b\xd0\xce\x24\xc3\x86\xf3\x07\xce\x7e\x71\x6b\x92\x0b\xf1\x49\x63\x81\xc6\x2e\x49\x3c\xff\xa0\x86\x1b\x7a\x2e\xfc\xa3\x1f\x7f\xb6\xdd\xee\x5f\xcc\xdb\x5d\xd2\x12\xde\x58\xe4\x28\x61\x0e\x9a\x5e\x6a\x28\x6f\x5d\xb3\xa5\xe7\xfb\x5f\x73\x68\xa0\xa1\xfd\x5b\x87\x86\xe4\xd0\x8e\x3a\xb7\x3e\x63\xf8\xd9\x87\x44\xbd\xe2\x67\x62\xfc\x9d\xda\x39\x5e\x1d\x96\xcc\xe8\x70\xb9\x07\xf5\xd8\xf0\xc9\xf0\xfb\x3f\xd4\x67\xb2\xbd\xc3\x8f\x64\x1e\xf6\x24\x04\xcf\xab\xaf\x62\x7c\x4b\x30\x60\x79\x13\xfb\xa3\x44\x2d\xfd\x1d\x85\xad\xf3\x87\x18\x91\x27\xb7\x6f\x4b\x5b\x44\x64\x19\x9d\xc9\x66\x16\xb2\x43\x93\xfd\xff\x31\x77\x96\x51\x55\x75\x5d\xdf\xa7\x41\x14\x91\x06\xe9\x4e\x05\x03\x90\x90\x46\xa4\x41\xba\xa4\x4b\x40\x09\x11\x10\x95\x06\x69\x44\x25\x44\x10\x24\x45\x94\xee\x94\x12\x14\x10\x90\x92\xee\xce\x43\x08\x08\xf2\x8e\xf7\x7a\x9e\xb3\x1f\xdd\x87\x31\xd6\x75\x8f\xc1\x87\xfb\xfb\x6f\xcc\x73\xf6\xfa\xcf\xb3\xe7\xfa\x9f\xb5\xd6\x5c\xfe\x66\x67\x8b\x07\x14\x0b\xec\xe8\xc9\x53\xec\xd4\x75\x6c\xd9\xcd\x62\x25\xa4\x4e\x77\x4d\x3d\x2e\xd7\xba\x1d\xe2\x90\xae\x7c\x22\x4f\x6b\x84\xf2\xb1\x16\x3f\xf9\xe3\x04\xb7\x9b\x98\xce\x78\xb9\xf0\xbf\xe9\xee\x32\x25\x8f\xa2\x30\x90\x3b\xad\xfb\xba\xa8\x07\x9d\x21\x05\x13\xe7\x44\xee\xdb\xf0\x46\x75\x68\x0e\x3c\xf7\xe6\xd9\x16\xbe\x3d\x77\x6e\xa8\xb9\x52\x72\x41\xb9\x74\x28\x4a\xb3\xf4\x4e\x4f\xe1\x19\x3e\x2f\xeb\xa9\x0f\xf8\x9d\x7d\x27\xe6\xd0\x40\x49\x74\x6c\xa7\x10\x3a\xab\xe1\x58\x6a\x99\xf7\x34\x3f\xc5\x6e\xf7\xb2\x63\x8a\x72\x16\xb3\x07\x96\xae\xde\xcd\x6c\x0d\xc3\x56\xe3\x0b\xc0\xcf\x80\x3a\x85\x00\x38\x78\xc5\xe2\x9a\x2d\x23\x43\x4f\x1f\x3a\xc5\xd0\x32\x50\x78\x0d\x5b\x30\xc0\x62\xee\x53\xd9\xf7\x37\x54\xb4\xeb\x56\xa1\x86\xdb\xc2\x25\x01\xd0\xd9\x07\x00\x07\xaf\x58\x4c\x5b\x39\x88\x45\xdb\x9b\xbe\xb2\xfb\x67\x8d\xba\xbf\x7d\x3b\x9c\x6c\x7b\xdf\x9d\x18\x71\xee\xe8\x5d\xe0\x6d\xaf\x53\xd1\xf4\xd0\xf7\x05\x71\xf0\xca\xd2\x76\xda\xde\xc1\xd0\x22\xf0\x7e\x81\x60\x4b\xd4\xa3\x61\xef\x20\x03\xc4\xdc\x9a\xd3\xba\x9f\xcb\x86\xb3\xdd\x03\xc2\xfa\x1d\xe8\x4e\x41\x10\xe7\x27\x85\xf5\xd7\x38\x4c\xea\xc8\x7d\x13\x24\x32\xdc\xe4\xd1\xb8\x70\xbf\xf0\x39\x63\xcb\x43\x75\xf1\x06\xa2\x69\xb1\x60\xfc\xb6\x1d\x93\xd3\xa4\x5a\x4d\xc8\xd9\x06\xe8\x97\x78\x9c\x76\xb5\xdc\x5f\x86\xac\x22\xd0\x5c\xf6\x6a\x3a\x7b\x88\x16\xe7\xd2\xa5\x4d\x89\x6b\x5b\x3c\x5e\x8b\xb6\xd7\xa6\x35\xe4\x5c\x76\x5e\x80\x76\x92\x02\x38\xb8\x76\x9f\x8b\xb6\x9c\x19\x89\x54\x63\x1b\x31\xb0\x11\x2a\x6b\xed\xa9\x12\x51\xda\x91\x78\x6c\x6e\x15\x4f\xc6\x35\x2d\x92\x1a\xca\x74\x91\x71\x41\x1c\x5c\xbb\xbc\xb9\xf6\x83\xde\x69\xfa\x18\x3e\xca\xae\xf6\x2a\xcc\x26\xd3\x2c\xea\x29\x62\xbc\x0d\xfd\x30\x6f\xd7\xd6\x02\xda\xe7\x62\x04\xc8\xb8\x20\x0e\xae\x1d\x11\x75\xc9\xd2\xba\x6e\x19\xed\xb8\x45\xc4\xe7\x25\x65\xcc\x94\xaf\x13\xcf\x5a\x32\xaa\xac\x8e\x52\x19\xc2\xac\x82\xeb\xed\xa0\x9d\x4b\x20\x0e\xae\x5d\x26\x9a\xec\x06\xc7\xb0\x53\xc4\x8d\xef\x26\x88\xbc\x26\x8e\x0d\x36\xa5\x2f\x87\x6f\x88\x9f\x60\xb4\xae\x4e\x59\xcd\xd2\x6d\x6f\x20\xb5\x03\xbd\xce\x8e\xd3\x8e\x47\xa9\x5b\x5b\x99\x78\x4d\xcd\x33\x09\x51\x11\x47\x1c\x96\x2d\x22\x4b\x44\x5d\xf2\x51\xf0\x5c\xce\x9a\x51\xc0\xef\xed\x38\x68\xbd\x04\xc4\xc1\xb5\x7b\x36\xc2\x2b\xae\x17\xf3\xde\x4b\xa2\x51\xbd\x75\x71\x52\x87\x5a\xf9\xf3\x87\xf0\x1f\x5d\xb3\x9c\xa9\x3f\x9d\x8f\x94\x5b\xdb\xa0\xab\xcf\x40\x1c\x5c\x3b\xe6\xe4\x54\x55\x57\x7c\x9f\xb4\x55\xfe\xa3\x88\x86\x43\x3b\xe7\x99\x8e\xf9\x3a\x66\x77\xc2\xbb\x72\x42\x2b\xa3\x12\xb4\x98\xd0\x59\x3f\x10\x07\xd7\x8e\xdd\x94\xf7\x45\xe9\x69\xb2\x53\x53\xee\x98\x61\xf7\x38\xf4\xac\x5e\x1b\xb7\x98\xd2\x8b\x72\xa2\x87\xae\x07\xbe\x0d\xe5\xa5\x76\x41\xc6\x05\x71\x70\xed\xc8\x39\x65\xbe\x1a\x5f\xbb\x80\x96\x19\x42\xe3\xf6\xf5\x76\x83\xb1\x22\x97\x70\x69\x26\x61\x1a\xe7\x9d\xf5\xa2\xe0\x7b\x8c\x66\xa4\x48\xed\x40\x35\xe1\x38\xed\xb6\x44\x3e\x3b\xc9\xb1\x3a\xed\xf2\x50\x5a\x16\x8e\x20\x32\x56\xf5\xe2\xca\xed\x13\xbb\xa6\xd1\x36\xca\x73\x78\x6d\x84\x6f\x42\x9d\x42\x40\x1c\x6a\x2b\x7e\x8d\xd0\xc8\x02\xf5\x0e\xea\xef\x69\x97\xa8\xac\x72\x95\x14\x36\x99\xde\xfb\x93\x50\xed\x31\x1e\xa6\x84\x14\xfd\x68\x81\xd6\x55\x41\x1c\x5c\x3b\x96\xcb\xfd\x9b\x38\xc9\x94\xe2\x71\x31\x7e\x0c\x66\x93\xb5\xa3\x31\xc9\xee\xaf\x78\x14\x3d\x72\xdc\xba\xf7\xc5\x5d\xd2\x1f\x8b\x21\xe3\x82\x38\xb8\x76\x9f\x28\xa9\x34\xda\xc3\x53\xae\x1a\x62\x56\x61\x52\xa5\xc4\x54\x14\xa2\x11\x1c\xfc\x6a\xf9\xe4\xe6\xf6\x03\xfb\x3c\x7d\x02\x15\x94\xc3\x20\x0e\xae\x1d\x31\x57\x9a\x3c\xff\x13\xcd\xe7\x0e\x04\xfd\x1c\x6e\x0e\x56\x99\xfa\x1b\x46\x4d\x0f\xdc\x0e\x0f\x72\x32\x9f\xd9\xd4\x34\x9b\x11\x21\xb5\x03\x15\xd6\xe3\xb4\xb3\x15\x1f\x3e\x33\x26\x32\x5f\x9b\x7c\x25\xef\x25\xbf\x53\x52\xb6\xa0\xfb\xc2\x4d\x71\x0e\x74\x15\xc2\xfd\x44\x3f\x17\x47\x33\xa8\x43\x06\x88\x43\xb9\x51\xc3\x6d\xef\x75\x82\x3d\x6b\xc7\x3a\x79\xef\x9c\x5e\x4f\x04\xd9\xbd\xb2\x88\x5c\x61\x42\x0d\xec\x51\xa1\x5b\xe4\x12\x7a\x87\x33\xc8\xb8\x20\x0e\xa5\x4b\xe8\x73\x92\xa7\xdf\x2b\xe4\x2d\x3f\xac\x30\x04\x56\x3a\xbf\x28\xc9\x3c\xf4\xcd\x09\x1e\x18\x70\xf5\x0f\xe0\xed\xc0\x96\x91\x48\x85\xba\x84\x02\x38\xb8\x76\x58\x11\x3d\x1f\x66\x47\x1f\x36\xb2\xdd\x96\x69\x79\xfa\x40\x1c\x57\xea\xb5\xa6\x81\x8a\x76\xdd\x9a\x9e\x95\x1a\xdb\x52\x33\x0f\xd4\xa1\x07\xc4\xc1\xb5\xe3\xd9\x8e\xc3\xf6\x9e\xf7\x66\x65\x5a\x0b\xaf\xa6\x18\x46\xe4\xa2\xc5\x45\xec\xea\x44\xcb\xda\xab\x6f\xe1\xb7\xed\x7f\xf2\x4b\x42\x3a\x34\xd0\xec\xfe\x78\x87\x26\x51\x5d\xa8\x54\xef\xf3\xb9\xc6\x95\x3f\xe8\xac\xc0\x83\xd8\xd8\xed\x71\x91\x81\x0c\x52\x45\x9a\xf8\x38\x05\x8f\x47\x78\x73\x78\x48\xb7\x03\xe2\x50\x1d\xda\x90\xf3\xf7\x17\x64\xa1\x22\xe7\xaa\xc2\xc5\x2f\x7c\x2e\xcf\xb9\xf8\xf6\xc3\x45\x23\xf7\x82\xbb\xc3\x3f\x04\x6b\x16\xbe\x8d\xa1\x95\x22\x23\x83\x38\x54\x87\x86\xad\xfc\xf1\x67\xf5\xf8\xaa\x84\x1e\x23\x73\xda\x80\xc2\xb7\x1b\x16\x15\x9c\xcf\xde\x9d\x37\xcc\x1a\xff\xc4\xc6\xd5\x6c\x9e\xa3\x8b\x8c\x0c\xe2\xfe\xbf\x43\x43\xc3\xf8\x6b\x07\xec\xbf\xbd\x23\x50\x1d\xd1\x23\x73\x7f\xe3\x72\xa4\x89\xf9\xa4\xf5\x92\xd8\x05\xb3\x88\x57\x13\x78\xf2\x67\x56\x3b\x6a\xd4\xb4\xb5\xc6\x6c\x95\x37\xff\x74\x68\x17\x9a\x1f\x75\x4e\x46\xcb\x86\x37\x1f\xd5\x10\x1a\xc9\xa7\x36\x25\xca\xa0\x4b\xe2\x21\xde\x32\xbf\x79\x73\xb6\x7d\x7c\x78\x76\xe1\xcf\x7f\xaa\xea\xb0\x78\x92\xa3\x37\x33\x78\x07\x2f\x25\x8a\x65\x9f\x57\xde\xc4\xd6\x3c\x6c\x91\x7a\x77\x0e\x37\xa5\xff\x95\x55\x5c\xd5\xfc\x7f\x9b\x43\x03\x3d\xda\x9f\xe7\xd0\x50\x1c\xda\x37\x6c\x56\xf4\x04\xe5\xf8\x34\x19\xe1\x19\x5c\xfd\xdb\x8b\xe7\x6b\x7c\xc9\xc3\x6f\xc7\x92\xeb\x8a\xb8\x15\xd4\x27\xbe\xd7\x6f\x39\x91\xe5\x1d\x54\x87\xf6\x1d\xab\x60\x75\x17\xc7\x14\xff\xb0\xc8\x37\xfd\x7c\x8b\xb0\x7a\xd3\xa8\xde\x65\xdb\x17\x42\xc9\x6b\xbd\xf4\x83\x35\xd8\x68\x5a\x27\xb2\x98\x85\xea\xd0\x84\xd5\xd7\x15\xd5\xc8\xa3\xf2\xc6\x38\xb2\x5e\x5f\x92\x9d\x0d\x48\x25\x39\x12\xde\x4e\xaf\x94\x69\x18\xaf\x0f\x28\xf4\xe8\xbd\x73\x22\x4f\x8b\xea\xd0\x2e\xd2\x97\x3b\x1b\xdd\xc6\x7a\x9c\x88\xdb\x3b\xd8\x23\x71\x43\xf5\xaa\x06\xa2\xaf\x23\x43\xaa\x64\xac\x74\x48\x21\x2b\x33\xdc\xf6\x44\x9e\x16\xd5\xa1\xa1\x73\x17\x17\x8b\x86\x49\xb0\x6a\x85\x31\x8b\x62\x37\xc5\x34\x05\x16\xd2\x28\x15\xcd\xf7\x71\x8b\x4f\xb6\x57\x29\xab\xd2\x62\x9d\x98\x43\x03\x25\xd1\x71\x15\x8b\x9b\xfb\xaa\xfe\xaa\x8d\x30\xfb\xc4\x73\x9d\xb2\xa9\x8f\x36\x1c\x7b\xf1\x52\x2b\xa1\x78\xc4\xf3\x1b\x03\xf8\xb2\x3f\xf5\xbe\x45\x42\xfd\xa7\x01\x1c\xbc\x62\xc5\x06\x15\x0d\xc6\x74\x30\x86\xe7\x0f\xd8\x95\x5c\x6c\x20\x99\x7d\x7d\xab\x18\x4f\x34\xe8\x8d\x36\x99\xf7\x76\xe6\x10\x4f\x3e\xd4\x23\x12\xc4\xc1\x2b\x96\x3b\xb9\x2e\x4f\xb8\x46\xf5\xf9\x60\xde\xb9\xec\x1c\x9c\x5b\xb2\xb5\x1e\xcc\xe6\x3d\xac\xb6\x81\xcb\x4b\x94\x71\x5c\x9a\x1b\xd0\x3a\x0c\x88\x83\x57\xac\x85\x30\x53\xca\x78\x1a\xc5\x00\xf7\x53\x0f\x93\x8f\x9a\x5e\xc9\xd6\xa5\x48\x7a\xab\xd4\xbc\x48\x9c\x4f\xc9\xcd\xbf\xa3\x75\x04\x9d\x87\x01\x71\x7e\x52\x12\x7f\xf7\x5b\x52\x6e\x35\xbb\xfa\x98\x34\x1f\x73\x8e\x48\x38\x65\x81\x40\xee\x9c\xc1\xef\x1e\xa9\x5f\xb8\xd1\xaf\x84\xf0\x18\x77\x99\x04\x30\x91\xb3\x0d\xd0\x2f\xf1\x38\xed\xa8\xe5\x7f\x93\x0d\xba\x94\x60\x3a\xc9\xd0\x47\x7a\x22\xb2\x9a\x86\x8c\xbd\xf3\xcc\x99\x16\xb3\xea\xe2\xc3\xbb\xc4\xf1\xee\x42\x37\xca\x83\x38\xb8\x76\x5b\xe8\xc3\x57\x46\x6e\x1d\x6d\x3b\x24\x0e\x35\x5e\x25\x99\xcd\x4d\x54\xe5\xb3\xa7\x3f\xdd\xaf\x67\x40\xd6\x56\xbb\x4b\xdd\x2d\x03\xcd\x40\x01\x1c\x4a\x5f\xb2\xe7\xf3\x87\x7c\x15\xca\x38\xca\x9b\x2a\x29\x73\xf9\x08\xb5\xd5\x3c\x49\x56\x93\xd7\x99\xae\x1b\x93\x4a\x04\x93\x24\x9c\x50\x0f\x75\x10\x07\xd7\x2e\x17\x7d\x88\x92\x95\x53\x3a\xac\x9d\xf6\x8c\xb5\x9c\x7c\x5e\x70\xe1\xb8\x65\x46\x93\xa8\x41\x8c\xba\xe6\x2b\xea\xae\x50\x7e\xc8\x5d\x83\x38\xb8\x76\x95\x66\xbd\xf9\xea\x57\x7c\xa6\x03\x63\x6d\xf4\xb1\x58\x76\x0c\x6d\xe7\x57\xfc\xd1\xc9\x2f\x8e\x1a\x65\x29\x7d\xa6\xee\x5a\x51\x43\x6a\x07\x7a\x9d\x1d\xa7\x5d\x8d\xf9\xcc\x04\x1b\x77\xbf\xfb\xe9\x14\xd2\xd5\x71\xc7\x33\x93\x58\x33\xc9\x03\x07\xf5\x58\x06\x5c\xa1\xb5\x9b\x5f\x96\xa3\xf6\xa1\x5d\x51\x00\x0e\xae\x5d\xde\xd8\x36\x75\xbd\x73\x7a\x22\x53\x00\x43\xda\xdc\xb5\x92\xf0\xa3\xdc\xb6\xeb\xcb\x4b\xdf\x55\xd7\x76\x3b\x4d\x57\x7f\xdc\x85\x5c\x3b\x88\x43\xe9\xe5\x18\x27\x45\x59\x1e\x47\xe1\xb5\xb3\xfa\x4d\x3d\xef\x99\xa2\x00\xae\x70\xc6\xd0\x48\x25\x02\x8b\x25\x27\xfe\xc5\xd5\x17\x8e\xd0\x19\x42\x10\x07\xd7\xee\x6c\x9a\xa8\x98\xc6\x9c\x5a\xd5\x54\x19\xf6\xc1\xc4\xfd\x78\x02\xe9\x1f\x21\x74\xcc\xfc\x13\x68\x8d\x4c\x72\x83\xf2\x75\xdc\x13\xc8\xb8\x20\x0e\xae\x9d\xe7\x60\xaf\xb6\x93\xa9\x09\x8f\xcf\x23\x12\x89\x00\x75\xae\x9f\x33\x79\x36\xed\x3d\x44\xf6\x8c\x02\x26\x2c\x7c\x7a\xaf\x13\x42\xa0\x75\x18\x40\x4d\x38\x4e\x3b\x44\xd5\xae\x2f\x8d\xa7\xea\x3d\x0e\x52\x21\xdb\x31\xb9\x4b\xbb\xb3\x7a\xbf\x9a\xe8\x97\x0e\xd3\x12\xf1\x24\x08\x8c\x13\x96\xa0\x3b\x5d\x40\x1c\x5c\x3b\x95\xf2\x85\x4a\x4e\x93\xa9\x1f\x66\x51\xc9\xa1\x9d\x96\xc1\xe7\x03\x8c\x3a\xe7\x93\x9e\xa9\xa8\x3d\x8a\x9f\x4a\x69\x55\xf5\x86\xce\x53\x82\x38\x14\xed\x8a\x0e\x17\x31\x82\x78\x75\x67\x33\x06\xb7\xd1\xeb\x2f\x1d\x1c\xbc\x67\x23\xf5\xfa\x48\xd5\x7f\x3b\xd0\xf2\x6c\x4d\xe0\x75\x46\x48\x3b\x00\x07\xd7\x8e\x5e\x9e\x7d\xf0\x48\xcf\xc7\xc9\x94\xb2\x11\xf3\x9a\x92\xf2\xdc\x34\xc5\x7e\x73\x39\x19\x67\x62\xab\x41\xa5\xd0\xf7\x7e\x2c\xc8\xed\x80\x38\xb8\x76\x0e\x2a\xa5\x54\x64\x2f\x63\xae\x87\xe7\x1b\xbd\x56\x34\xcf\x0c\xdf\x0b\x79\x68\x93\x12\xe2\xa1\xaa\x8d\x95\xa5\x17\x50\x9d\x00\xfd\xee\x40\x85\xf5\xd8\x35\xb4\x1b\x2f\xb7\xa8\x1f\x67\xe1\xbc\xe7\xf6\x7e\x23\xa4\xe2\xf1\xe2\x17\x63\xb7\x22\xa3\xc8\x0e\xc6\xf4\x92\x1b\x23\x22\xe4\x26\x0e\xb4\x86\x06\xe0\xe0\xda\x79\x15\xff\x50\x19\x7a\xb5\x27\xaf\xcd\x39\x2a\xa0\xb5\xa5\xb3\x61\x23\xb4\x2f\x59\x21\xbb\x34\xd5\xd4\xe1\x43\x8c\x29\x7c\xce\x1f\x5a\x13\x07\x70\x70\xed\x74\x54\xb9\x59\x1a\x71\x4a\xb9\x1f\xbf\xee\x36\xf1\x25\x6f\x5c\x27\xc0\xa3\xb9\xe9\x37\x18\xfd\xa0\x7b\x5d\x0b\xd3\x35\x87\xae\x11\x19\x17\xc4\xc1\xb5\xe3\xd5\xa6\x9c\x61\xbb\x96\xc3\x1e\xb8\x4f\x22\xb5\x5c\x9a\x5e\x75\x50\xd4\x68\x97\x7b\x37\x5e\x51\x6c\xa0\x87\x83\x3e\x2f\x12\xba\x09\x15\xc4\xc1\xb5\xdb\x2b\x4c\x95\x9e\x7e\x57\xe1\xa9\x97\x59\x66\x90\xb8\xb6\xc9\x6a\x24\xa8\xfe\x5e\x83\x93\xb1\x0a\xa1\xca\xbb\xee\x30\xe6\x94\x82\x74\x68\xa0\xd9\xfd\xf1\x0e\x4d\xc7\xe7\x96\xc5\xd3\xfd\x48\x39\x7c\xc2\xab\xfe\x91\xac\x41\x1b\x34\x86\xd7\x2f\x67\xc6\xde\x3f\xe8\x1c\xd0\x16\x74\xf4\xe6\x50\x40\xba\x1d\x10\x77\xcc\x39\xb4\x57\xa7\x68\x31\xa2\xfc\x59\x0a\x31\x3d\xca\xe9\xa9\x55\x9e\x99\xb2\x95\x62\x6e\x26\xd2\xbe\x0c\xae\xd6\x38\xfb\xf5\x8d\xcf\x6f\xe8\x1c\x1a\x80\x43\x75\x68\xf1\x51\x7e\xfe\x34\x18\xd3\xc4\x12\xcc\x3a\x6d\xd9\xd2\x93\xcc\x2f\xd3\x97\x02\xba\xee\x3b\xb7\xdb\x8a\xcb\x6f\xc9\xbe\xde\xf3\x40\x46\x06\x71\xff\x38\xb4\xbf\x76\x94\xfe\xeb\x9b\xe9\xbe\xb7\x6e\x8c\x3a\x54\x07\xd3\x58\x69\x25\x92\xee\x87\xae\x08\x93\xd0\x3f\xeb\x4d\x28\xd1\x20\x99\xbd\x87\x87\xce\x95\x5a\xa8\xf0\xa7\x43\x13\xde\x76\x18\x46\x77\x49\x6f\x9c\x27\xf6\x56\xb0\xff\x34\x7a\x98\xdc\x7f\x8e\x5d\xd2\xd2\xcf\xb1\x46\x75\x97\xb5\xb8\x34\xe1\xd5\x9f\xef\xee\x65\x8a\xed\x9e\xe5\x1a\x63\xe6\xf0\xac\x38\x7d\xa5\x37\xe5\x0d\x78\x63\x2d\xd9\xdf\x39\x3a\x1c\x83\x14\x5f\x3e\x2f\x2d\xf4\xfe\x6f\x73\x68\xa0\x47\xfb\xf3\x1c\x9a\x22\x4a\x47\xf6\x9f\xf1\x8c\xa1\xc9\xab\x88\xe2\x2b\xab\x21\xa3\x3e\x63\x04\x0a\x13\xd6\xfb\xb5\x58\x57\x03\xa4\x47\xe8\xfa\x3a\xba\xa6\x0d\x4f\x64\x79\x07\xd5\xa1\xcd\xbc\xda\xc1\xd7\xed\x34\x61\x9d\x1b\xb0\x88\x0b\x7f\x5b\x75\x41\xa2\x81\x93\xe4\xe9\x51\x00\xa9\xe2\xc7\x3a\x49\x0d\xb1\x8d\xaa\x13\x59\xcc\xba\x85\xf2\xb1\x88\xa1\x88\xdc\xc3\xa6\x98\x7e\x55\x89\x3d\x44\x44\x68\xd7\x99\x9f\xf1\x94\x23\x65\xaa\x51\x3e\xfb\xe8\x11\xaa\x23\xfc\xde\x5b\x27\xf2\xb4\xa8\x0e\x4d\x9e\x63\x94\x79\xf2\x81\x4a\x4d\x99\x39\x82\x54\x9e\xf8\x81\x85\x1d\x67\xb3\xd5\x53\x33\x11\xcd\x5b\xae\xde\x12\x7e\xca\x1f\x03\x4e\xe4\x69\x3d\x50\x3e\x76\x2d\xe7\x51\x3a\xd9\xc3\x1f\x85\x67\xf5\xf9\xba\x3b\x3f\x48\x12\x8c\x5d\xe9\x0a\xeb\x70\x64\xfe\x3e\x7f\xe0\xa0\x87\xa5\x49\x57\x77\x62\x0e\x0d\x94\x44\xc7\x55\x2c\x69\xda\x5d\xe9\xb7\xeb\xcc\xe4\x0b\x6b\xf8\xec\x04\x4e\x18\x89\x9d\x1f\x2a\x6e\xe5\x2d\x7f\x1e\xab\x7c\x81\xeb\x3a\x32\x8b\x0b\x75\x85\x00\x71\xf0\x8a\xd5\xdb\x77\xb3\x3c\x8a\x9d\xf2\x9c\xb9\xca\xe7\xc0\xb5\xac\x09\xe6\x08\x56\xa2\xfc\x56\xff\x97\x6a\x24\x98\x17\xc4\x4e\xd3\xb8\xd3\x22\xe3\x82\x38\x78\xc5\xc2\x7d\xcb\xb8\xed\x5b\xb2\xc2\x64\x91\x97\x95\xf7\x48\x91\x19\x9b\x29\xfa\x82\x53\x34\x9d\x5e\x5d\x52\x7e\x71\x04\x83\x77\x9e\x2f\xf4\x5f\x25\x80\x83\x57\xac\x16\xcf\x31\xd9\xe1\xd3\x59\x89\xcd\x46\xc2\x3c\x14\x7e\xb4\xb8\x71\x8f\x63\xb0\x2f\xa6\x64\x7f\x98\xb1\x38\x7d\x18\xcc\x6a\x83\x0d\x75\x42\x00\x70\xf0\xef\x4b\x62\x6f\x6a\x56\xc3\x4d\x14\x4f\x9e\xe5\xca\xd2\xb5\x7d\xef\x7c\x35\x75\xb6\xcd\x95\xb8\x39\x31\x39\x13\x39\x25\x02\x52\xbc\x1d\xe4\x6c\x03\xf4\x4b\x3c\x4e\xbb\x8d\xb3\x92\xb9\x54\x93\x8b\x25\x36\x9f\x5a\xc7\x30\x45\xa2\x56\x7c\x09\xa4\x4d\x26\x65\x2d\xd5\x12\x97\x03\x88\x4b\xf0\x3d\xa1\xf5\x12\x10\x07\xd7\x8e\x76\x6b\x28\x34\x9c\x8b\xe1\xf6\xb5\xa3\x85\x91\x38\xba\xde\x96\xa0\x30\xaf\xa0\x5d\x82\x49\x2c\x3b\x35\xe9\xf3\xa9\x44\x96\x6b\xd0\x79\x31\x00\x07\x1f\x0b\x5f\xdb\x96\x2f\xb6\x3f\x6d\x72\x0f\x3f\x68\xac\x6b\xe5\x2f\x2a\xf1\xdf\x22\x1b\x54\xab\x35\x34\x59\xf1\x52\xe0\x08\xea\xf5\x81\xba\xe2\x83\x38\xb8\x76\xe3\x64\x72\x69\xf7\x5c\xf0\x22\x3c\xcf\x57\x8f\x52\x50\x14\x21\x08\x16\x3d\x8c\x9d\xfa\x73\x6f\x17\xb4\x6e\x9f\xba\x53\xbb\x00\xed\x3a\x03\x71\x28\xda\xa5\xfd\xae\x9d\x9e\x97\xaa\x4e\x37\xd0\x09\x35\x3e\xd5\xdf\xf2\xaa\x7f\x3e\x6a\x90\xf0\xa7\x1f\x05\x57\xd0\x4d\x0b\xb7\x0c\x6b\xa4\x76\xa0\xd7\xd9\x71\xda\x39\xb0\xba\x6c\xb6\x3c\x55\xee\x2b\xda\x3b\xfc\xda\x3c\x8c\xbb\x19\x85\x75\x5d\x13\x83\x55\x44\xd2\xb7\x3a\x14\x9d\x9a\x84\x10\xba\xf4\x0c\xc4\xc1\xb5\xd3\xba\x3b\x32\xfc\x34\xaa\xf7\x41\xbe\xd4\x75\xa5\x1e\x67\x9e\xb6\xbb\xc6\xda\x54\xf7\x33\x9f\xaf\x27\x8a\x71\xca\x77\x86\x54\x42\x3b\x3e\x41\x1c\x7c\x2c\xf0\xdb\xfb\xb2\x99\xc3\xa9\xbf\xe1\x0a\x75\xd5\x52\x46\x50\x18\x8d\x7d\x75\xcc\xad\x12\x9c\xde\x9e\xa8\x27\xbb\x9b\x26\x7d\x0a\xda\x51\x0b\xe2\xe0\xda\x05\xe9\x2f\xf4\xc7\xc5\x9a\x1e\x5a\x26\xd7\xe5\x49\x7c\xb5\xbb\xa6\xc5\x13\x3a\x21\x44\x97\xf2\x6e\x30\xc7\xe6\xea\xaa\xc4\x02\x74\x36\x11\xc4\xc1\xbf\x2f\xe1\x13\xed\xac\xaa\x96\x97\x97\x23\x82\xfb\xd2\x77\x22\xa4\x78\x45\x4a\x13\x0a\x57\x43\x82\xd2\xe6\xfd\x19\xb3\xb8\x2d\xf8\xf5\x90\xda\x81\x6a\xc2\x71\xda\xf1\xc9\x9b\x1b\x5b\x5e\x0c\x4e\x4d\xd8\x78\x50\x7e\xdd\x5f\x30\x6b\x1d\x4f\xce\x68\x3f\x92\x84\x2c\xb2\x29\xfd\x49\x9d\x28\xcd\x7d\xe4\x77\x06\x71\x70\xed\x66\x4e\x8d\x8f\x45\xcf\x93\x99\x44\x8e\x66\x3c\xb7\xb1\xbe\x31\xda\xb3\xbb\xb8\x60\x60\xec\xd8\x5a\xa7\xb3\x68\x7e\x41\x72\x56\x18\x19\x17\xc4\xc1\xc7\x42\x5d\x49\xd2\x5d\x36\x69\x2c\xc1\x7a\xb4\xfe\xa7\xbc\xfe\x01\x2e\xbd\x0d\x17\x3a\xa3\xf1\x78\x67\x83\x7b\x71\x95\x0c\x4f\x23\xb4\xef\x00\xc4\xc1\xb5\x4b\xfa\x1d\xde\xec\x58\x63\x55\xb3\x6c\xf6\x75\xd0\x35\xff\xd2\x1e\x89\x72\xe4\xee\x55\x6a\x44\x89\x96\x04\xce\xc2\xe2\x43\x53\x68\xa7\x2e\x88\x83\x7f\xdf\xc7\xbd\x9b\xfd\xce\x13\x67\x2f\x3e\xba\xb2\xd1\x1e\xfd\x84\xa2\x54\xd4\x14\xd1\x7c\x4f\x61\x71\x18\xbb\xad\xf0\xb2\x5f\x8c\x7a\x05\x52\x3b\x50\x61\x3d\x4e\x3b\x8a\x90\xa1\xba\x9e\x47\xea\x44\xfe\xac\x78\x9e\xd4\x3a\x0f\x74\x85\xfc\xd4\xdd\x2c\xdb\xbb\x5c\x93\xe5\x17\xdf\xa0\x1b\x8e\x42\xeb\xed\x20\x0e\xe5\x7a\xb5\x03\x23\x39\xde\xbb\xfd\x77\x1e\xb6\xc9\x27\x3b\x71\xdf\x74\x0f\xdc\xf1\x1f\x8c\xea\xb6\x1e\x48\xb3\x8b\x79\x69\x50\xea\x6b\x87\x8c\x0b\xe2\xe0\x63\x31\xec\x85\x53\x13\x68\xf6\xd8\xb3\xe5\x2a\xae\xb6\x1a\xd3\x8d\x92\x6d\xbe\x66\xbb\x07\x6f\x0c\xa6\x12\x2e\x11\x44\x86\x05\x64\x3c\x42\xc6\x05\x71\x70\xed\xb2\x69\xfc\xb8\x47\xd7\xbf\xe8\x46\xcd\xe2\x12\x77\x8d\xda\x0d\xc9\xc4\x3a\xdc\x6d\x6a\x19\xd7\xc5\xd8\xc7\xc1\xfe\x64\xf6\x14\x72\x7e\x20\x0e\x65\x47\xed\x28\x97\xc3\x12\xb7\xdb\x7d\xe3\x85\x5d\x5f\xde\x03\x1f\xcb\x5b\xcf\x2e\xf0\x77\x53\x8a\x73\x61\xe7\x06\x24\x98\x2d\x8d\xbc\x41\x3a\x34\xd0\xec\xfe\x78\x87\xd6\xdb\x49\x18\x60\x3f\xcb\x19\xcc\xd2\x2d\x26\x65\x5e\xcf\xb5\xb3\xf7\x45\xa6\xc4\x4a\xbd\xd3\x77\xb2\x47\x99\x90\x1c\xd7\x62\x00\xe9\x76\x40\xdc\x31\x0e\x2d\xd6\x4c\xa4\x7f\x7f\x7b\x94\x4a\x3f\x22\x7c\xa5\xbf\x4a\x9d\x65\xd3\x2a\x8d\xb7\xfe\xcb\x66\x85\xd6\x12\xda\x2f\xbb\x12\x02\xc8\xa1\x01\x38\x54\x87\xc6\xb6\xed\x9a\xf4\x8c\xf6\xe5\xae\x98\x2c\xf1\xac\x10\x5d\x88\xc0\x7e\x0f\xbb\xaf\xf2\xc7\x28\x09\x55\x6d\xb6\xe0\xed\x81\xc7\xf5\xc8\xc8\x20\xee\x1f\x87\xf6\xd7\x15\x79\xff\xfa\x3e\x34\xf5\xea\xe1\xd4\x55\x15\x9e\xb3\x6f\xcd\xa9\x43\x26\x46\x76\x18\xce\x9e\xaf\xe3\xf4\x50\xdb\x88\x52\x60\xe8\xcf\xe0\x2f\x8d\x74\xfc\xd3\xa1\x2d\x7f\xd3\xec\x78\x53\x3d\x52\x6c\xcd\xf7\x5b\xbc\x33\xac\x93\xf4\x74\x49\x66\xd6\x96\x27\xbb\xf7\xd5\x30\x26\x07\x51\x34\x21\xcc\x3f\x50\x5d\xb9\x57\xd9\x6b\x2d\x5d\x14\x8e\x0f\x45\x12\xe4\xbb\x1e\xda\xf4\x3d\x26\x23\x71\x17\x76\xd4\x30\x4b\x2c\xa2\xf9\xa1\x2e\x39\xf7\xdf\xe6\xd0\x40\x8f\xf6\xe7\x39\x34\x14\x87\xb6\x2e\x5d\x50\x75\xaf\x64\xd4\x8b\xc3\x35\x2e\x91\xd1\x44\xc9\x82\xef\x86\x70\x65\x15\x53\x6b\xeb\x42\xac\xa0\x5e\x4b\xb2\xfe\x09\xcc\xe2\x43\x65\xea\x50\x1d\x9a\x53\x35\x42\xc6\x2f\xc9\xe6\x73\xc7\xa6\x06\x39\xb5\xe8\x8d\x84\x8b\x69\x3a\xa2\x02\xae\x0f\xac\x7b\x26\xd5\x2c\xef\xb0\x37\x34\x9c\xc8\x62\x16\xaa\x43\x93\x72\x6b\x5f\xe5\x1e\xbb\x54\x9e\xff\x98\x4e\xc8\x99\x63\x8a\xd0\x14\x47\x47\x96\x8b\x54\xb7\x7a\x25\xc6\xc8\xfb\xe8\x80\xab\xf9\x44\x9e\x16\xd5\xa1\xe1\x0b\x0d\x24\xdd\xb9\x83\xd8\xf5\x4e\x9f\x5d\x3b\x7f\xc5\x46\xd3\x9e\xf5\x75\x46\xa2\x58\xbc\xd8\x33\x42\x1b\x77\xd2\x87\x4f\x18\x4f\xe4\x69\x51\x1d\x1a\xeb\x25\x2c\xe3\x36\xcf\xbe\xe8\x69\x2b\x65\xcf\xfb\x0a\x74\x5f\x96\xeb\x72\x38\x37\xbf\x0c\x96\x55\xdf\x5a\x9e\x68\xd8\xb4\xfa\x7d\x62\x0e\x0d\x94\x44\xc7\x9e\x9c\x66\xb3\x4d\x5f\x11\x1a\x4e\x8b\xec\xb6\x4b\xf3\xb7\xfe\x55\x5b\x50\x10\x63\x5a\x41\x5d\x8d\x58\xb9\xfc\x41\x60\xb7\xfe\xd9\xff\x75\x6c\x07\x70\xf0\x8a\x15\xe5\xa4\xa5\x49\xcc\xc1\x14\x1d\xf2\x5e\xac\x00\xbb\x68\x54\x19\xf3\xb2\x39\x7f\xa8\x9e\xfe\x55\x97\x57\x13\xec\x35\x35\x06\xe8\xc8\xb8\x20\x0e\x5e\x01\x10\xe1\x84\xe8\x4b\x7b\xd3\x8d\xbe\x6e\x5e\x6a\x0b\x84\x99\x73\xd1\x33\xdc\xb7\x33\x2e\xa1\x63\xb4\xfa\xaa\xc7\xe7\x9c\x46\x87\x66\x05\x20\xce\x4f\xea\xef\x53\xb7\xf8\xeb\x01\xac\x5c\x07\xf5\xf4\x0a\xf8\x6f\x71\xed\x83\x65\x19\xe6\x76\x89\xd6\x45\x9d\xb6\x44\xd1\x38\xb3\x62\xb9\x7b\x89\xa0\x3b\xd4\x41\x1c\x7c\x7c\xf7\xde\x71\x25\xde\x51\x88\x7e\xcd\x17\xa0\x91\x68\x4e\x16\x28\x42\x4a\xf7\x34\x3e\xb8\x8b\xa4\xf6\x79\x79\x65\x40\xe0\x69\x0e\x2c\xe4\xdd\xe1\x20\xce\x4f\x0a\x0d\xc3\xdb\x27\xe0\x9f\x57\x07\xf8\x6a\x58\xd0\xef\xfa\xb8\x4c\xb0\x7f\x8b\x75\x6a\x4e\xf0\xf0\x77\x08\x45\x10\x6d\xa0\x35\xcf\x21\x8b\x6e\x51\xeb\xf7\xaf\xac\xb4\xb2\xce\x54\x34\xe1\xa6\x23\xe4\x50\x8f\x09\x00\x07\xcf\x84\xfe\x73\xac\x05\x21\x05\x29\x66\xa7\x76\x17\x0d\xe2\x3b\xfa\xf9\x2e\x58\x97\xa8\x48\x9a\xfa\x6a\xf7\xc8\xba\x54\x74\x85\xd1\x41\x2b\x5c\x20\x0e\x9e\x09\x72\x9a\x65\x5b\x2c\x7a\x53\xd1\x7c\xb3\x07\x45\x71\xe4\x97\x23\xc6\x77\xdf\x56\x09\x8e\xd4\xb4\x4c\x5c\xb3\xe8\xb9\xab\x54\x0e\xf5\x76\x01\x71\xf0\x4c\xd8\x6a\x37\x93\xe6\xeb\x6a\xbf\xf8\xec\xac\xde\xb7\x8a\xb5\x7b\xe2\x77\x2a\x73\x37\x0d\x27\xef\x2f\x0e\xf3\x9e\x2b\x96\xec\x13\x90\x82\x56\x10\x01\x1c\x7c\x7c\xe3\x63\x45\xde\x31\xed\xf3\x75\x4b\xba\xfd\x66\x0e\x92\x97\x2c\x6b\x57\x72\xaa\x64\xb9\x30\x3c\x64\x96\x55\x74\xde\xfa\xab\xb1\x0c\xf2\x6a\x58\x10\xf7\xbf\x99\xf0\x3f\xaf\x73\x70\x2a\x80\xde\xb5\xc7\xa5\x42\x27\xd5\x52\xe3\x67\xc6\x78\xe7\x4f\x5a\xcf\x97\x9e\x89\x4a\x95\xba\xd3\xab\x7d\xe8\xae\x96\x31\xb4\x64\xa8\x67\xf8\xa8\x6e\x02\x0d\x2d\x88\x43\xb9\x24\xd1\x24\x89\x6f\x63\xa7\x2b\x75\x20\x64\x27\xa1\x3e\x60\xa8\x9f\xd2\xa3\xe7\x5e\xfc\x9c\x24\xda\xc8\xd0\xcd\x68\xc2\x91\x44\xe8\x80\x23\x88\x83\xa7\xc2\xa5\x99\xe9\x8b\x1a\xf9\x1a\x3f\x57\x71\x3e\xe1\xff\x62\x9f\xe1\x9b\xc4\x32\x65\xf6\xaa\x5d\xc6\x3a\x1f\x78\xf0\x64\xa3\x80\x13\x7a\x29\x80\x38\x78\x2a\x74\x0b\x2d\x59\x27\x8d\xcb\x5d\xcb\x91\x9a\x5c\xaf\x7a\xe1\xa6\x66\xc1\x86\xe3\x1a\x34\xcd\x61\xed\xf0\xce\x9a\x7c\xfe\x10\xa3\x01\x19\x17\xc4\xc1\xc7\x57\xdd\x43\x75\x24\xf4\xbe\x15\x15\xb6\xe9\x64\xe1\xea\x93\xad\x92\x5c\x9f\x4a\x93\xca\xd8\x53\xfe\x03\x5d\xf1\x4e\x0b\x83\x4f\xe2\x91\xa9\x00\xe2\x90\xa9\xf0\x4f\x89\x05\xa7\x02\xa8\xfe\x1d\x97\x0a\x6d\x8f\x62\xaf\x4d\xc9\x38\xee\x4a\xe3\xad\xd0\x28\x74\x45\x66\x7b\x0d\x08\xe0\xe5\xd4\x59\x5a\x23\x1c\x07\xc8\x8d\x53\x71\x57\xa1\xdd\xdf\x00\x0e\x9e\x0a\x4c\xac\xab\xe4\x9c\x7d\x04\xf6\xe1\x2d\xf2\x88\x1c\x4f\x89\x5f\x79\xba\xad\x7a\xcd\x43\x5c\xa2\x34\x8b\x06\x43\xc9\xde\x79\xd2\xd0\x6e\x75\x00\x87\xb2\x1b\x97\xde\x7e\x8b\xe8\xb9\x62\x44\x4c\xf0\xe7\x84\x82\xcd\xcb\x75\xe5\x4a\xd1\x69\x81\x74\x71\x6f\xd5\x85\xaf\xa1\xdb\x72\x57\xdd\x83\x76\xe3\x02\x38\x78\x2a\x34\x5e\xca\x09\xbd\x63\x28\x8f\x6e\xfc\x4a\x90\x2b\xc9\xc9\x54\x4f\x3e\xb1\x61\x33\x29\xf4\xcb\xf5\x85\x9d\xa9\x97\x57\x66\x24\xa1\x4e\x39\x20\x0e\x3e\xbe\x29\x3c\x8c\x73\x73\x94\xb4\xd9\x2b\x5a\x19\xcf\x09\x11\x02\xcc\x66\x5c\x8a\xb2\xd1\xcc\x06\xd5\x0f\x11\xd9\x6c\x5c\x37\xfb\x18\x91\xa9\x00\xe2\xa0\xb7\x82\xd1\xbf\x4a\x05\xd0\x9c\xe4\xb8\x54\x28\x4e\xf5\xf7\xdf\x39\xfa\x40\xcd\xab\x94\x3a\xc7\x87\x9d\xe2\x94\xc6\x5c\xe7\xe2\x3a\xbb\x3f\x2c\xf1\xa5\x34\x33\xdc\x58\xad\x19\x39\x04\x20\x0e\x65\x73\x2f\xa6\x4a\xae\x9c\xe1\xda\xb4\xe8\xaa\x6d\xa8\x9c\xbf\xd6\x21\x16\xdb\xe4\x99\x4c\x43\x03\x82\x48\xe7\x73\x2a\x2e\xc1\x1a\x4e\xd0\xe6\x5e\x00\x07\x4f\x05\x6c\x22\x04\x96\x5e\x2b\xff\xc3\x1c\xe3\xbe\xa9\x4d\x77\xc7\xcf\x7e\x96\x9a\x37\xb2\xa9\x6c\x7e\x44\x53\x64\x12\xba\xad\x15\xbf\x44\xc6\x05\x71\xf0\x54\xe8\x6a\x35\xd7\xdd\xea\x4f\xb1\x29\xad\xe9\xe2\x79\x83\x51\x2b\xcd\x52\x7b\xaf\xef\x8a\xac\xc2\xf4\x8d\x20\x9f\x38\x2e\x0f\xe1\x10\xa8\xe5\x2a\x80\x83\x8f\x6f\x9e\x1f\xf3\x4a\x5a\x12\x9d\x1a\xf9\xd7\x38\xe1\x47\x66\x02\xf9\x77\xf7\x04\x9c\x87\xaf\x6a\x45\x70\xee\xda\xb7\xb5\x4d\xf4\xa1\x21\x53\x01\xc4\x41\x6f\x05\x8f\x7f\x75\x77\x38\xc8\x67\x1d\xef\x95\xa5\x64\x78\xc2\x5d\xde\x33\x65\xaf\xe8\xe8\x7e\x4a\xe8\xe0\x58\x1a\x32\x27\x2c\xf7\xf5\xb8\x11\x82\x5f\x4c\x46\x47\x22\xac\x86\x89\xf4\x9d\x20\x0e\xd5\x2b\xc7\xbf\x08\xd8\x1f\x5d\xf0\xb0\x56\xd7\x95\x39\x14\x98\x21\x53\xbc\xec\x49\xd0\x53\xf0\x45\xf1\xd7\x63\x5f\x8b\x5e\x36\x22\xb5\x46\x68\xcd\x11\xc0\xf9\xc9\xa0\x61\xfc\x1d\x79\x53\xfc\xe5\xba\x7e\x2e\x01\x51\x04\xab\x16\x7d\xa1\x38\xe5\x2f\xc3\x71\x34\x8e\x43\x27\x07\x67\x5d\x3e\x86\x7d\xfa\x07\x72\x02\xc8\xc8\x20\xce\x4f\x06\x0d\x1d\xed\x3f\xeb\xaa\x79\xf1\x7f\xff\x5b\xb3\x0c\xbd\x4e\xd9\x8e\x33\x31\x14\x45\x56\x94\xb7\xac\xf5\x89\xf9\xad\xb2\xc1\xc4\x22\xcb\x80\xd0\xb5\xa6\x32\x21\x4f\x55\x5e\x3f\x34\x34\x3f\x49\x34\x6f\xef\xc7\xff\x83\xc7\xf1\x79\x7d\x7c\x3f\xc2\x10\x46\xc2\x58\xa3\x44\xd7\xa2\x5a\xf9\x92\x67\x40\x4a\x89\x65\x88\x40\x3f\xa6\x05\x93\xb7\xa0\xe3\x9c\xef\x9f\x7f\xef\x01\x42\xff\x07\xe8\xff\x0b\x00\x00\xff\xff\x59\x9a\xb7\xfe\xc4\x45\x0f\x00") + +func fixtures_assetsCarInteropnetCarBytes() ([]byte, error) { + return bindataRead( + _fixtures_assetsCarInteropnetCar, + "fixtures/_assets/car/interopnet.car", + ) +} + +func fixtures_assetsCarInteropnetCar() (*asset, error) { + bytes, err := fixtures_assetsCarInteropnetCarBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "fixtures/_assets/car/interopnet.car", size: 1000900, mode: os.FileMode(420), modTime: time.Unix(1626679099, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _fixtures_assetsCarNerpanetCar = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\xdd\x09\x34\x55\x6d\xff\x3f\xfe\x73\x8c\xfb\x98\x45\xd8\xa2\x84\x4c\xc9\x3c\x66\x1e\x43\x48\x66\x99\x32\xcf\xf3\x5c\xc4\x36\x47\x21\x64\x8a\x8a\x42\x22\x63\xa2\x90\x4c\x99\x42\xe6\x79\xca\x2c\x43\x2a\x32\xf7\x5f\x9e\xa7\xfb\xf9\x39\xe7\xff\x5d\xcb\xbd\xbb\xd7\xba\xd7\x2a\xeb\xea\x7a\x5d\xd7\x3e\xfb\xb3\xf7\xb5\x87\xe3\x2d\x9e\x65\xe5\xee\xe2\xe2\xe9\x01\x0d\x71\xe8\xb3\x22\x90\x6e\x4f\x67\xb1\x18\x86\x38\xc4\x63\x16\xe8\x41\x22\x9a\xa5\x0e\xb7\x33\x64\x6f\x0f\x17\x2e\xf3\x55\x9a\xee\x3b\xcb\xf8\x77\xea\xb5\x4b\x2a\xf5\x2c\xda\x78\x5b\xb9\x7b\xd8\xb9\x38\x23\x4b\xb0\xfe\xdd\x3f\x88\x93\x45\x20\x20\x7d\x86\x26\x7a\x4a\x0e\xc4\xe4\xaf\x14\x87\x7e\x06\x8f\x73\xab\x4f\x47\x64\x3c\xf7\x3d\x7f\xc4\x89\x97\x52\x3f\x31\x9a\xbd\xbb\x3c\x98\x10\x8c\x90\x86\x82\x11\xfa\x0c\x88\x13\xfe\x0b\x3a\x1a\xec\x05\x04\xd2\xed\x14\x03\x59\x40\x30\xdd\x85\x31\x7c\x41\x06\x2c\xe5\xc9\xc4\x17\xef\xab\xd3\x63\x94\x92\xe5\xb7\xed\x55\x5f\x3c\x78\x0c\x6d\x64\x74\xb8\x4b\x23\x8e\xcd\xeb\x4a\x5d\x5e\x0f\x95\x37\xb5\x57\x6e\x67\x99\x8d\x65\xd6\xf3\xc8\x6f\xf2\x79\xc3\xc3\xdf\x06\x7a\x29\x33\xbc\x72\x88\x7a\x62\x0d\x8e\x35\x9d\xb3\x8a\x96\xa0\xe9\xc0\x9b\x1e\x8d\x3b\xfd\xba\x78\x45\xa7\x8e\x29\x4b\xcd\x70\x7a\x99\x79\x48\x54\xa4\xa9\x52\xf4\xf6\x35\xee\x63\x4d\x53\x78\x02\x0b\xf3\xc7\x19\xee\x51\x9c\x7f\xaf\x7a\xb6\xe5\x5a\xd5\x43\xce\x21\x59\x55\xe6\x51\xe2\x1b\x49\x2d\xd8\xdc\xa5\x9d\x64\x5b\xb4\x37\xb5\x08\x29\xb7\x10\x0a\x08\xdc\xcd\x69\xc4\x47\xac\x7f\x33\xec\x6c\x5b\x79\x33\x4f\x2b\x4f\x3b\x27\x2b\x0f\x3e\x1e\x5e\xe1\x4b\x3c\x82\x97\x78\x04\x19\x78\x78\x2f\xf3\x09\x5f\x16\xe4\xb5\x51\xb7\xf2\xf4\x71\x71\x77\xb0\x55\xb4\x73\xb4\xb2\x70\xb1\x73\xb6\xd2\x76\x71\xb0\x72\xfe\xdf\x5f\x1d\xff\xf3\x57\x19\x27\x17\x2f\x67\x4f\x8f\x67\x0e\xda\x2e\x9e\x66\x8e\x5a\x5e\xae\xae\x8e\x7e\x4e\x7c\x9c\x3c\x3c\x3c\xff\xfc\x6f\xad\x66\xe7\x6c\xe5\xee\xe1\xc4\xcb\x29\xf0\xff\x7e\xe8\xa8\xe1\xee\xe2\xe9\x62\xe1\xe2\xa8\x6a\x66\xee\xf1\xcc\x41\xde\xca\xdb\xca\xd1\xc5\xd5\xc9\xca\xd9\xd3\x81\xff\xff\xb5\x72\x50\xf4\x72\xb6\x74\x37\xb3\xf3\xb0\x73\xb6\x71\xe0\xfb\x7f\x3f\xb7\x57\x74\xf1\x72\xb6\x34\xf3\xb4\x73\x71\x76\xe0\xfd\x7f\x3f\xb6\x51\xb3\xf2\xf0\x30\xb3\xb1\xf2\x55\xd2\xb6\xb5\xf3\x60\xb0\xf3\x60\xf0\xb4\xb5\x62\xb8\x62\xe5\x6c\xe5\x61\xe7\xc1\x20\xeb\xe8\x62\xe1\xc0\xe0\x62\xfd\x9f\x1f\xfe\x33\x09\x06\x79\x2b\x0b\x2b\x67\x4f\x77\x33\x47\xbb\x5b\x56\x96\x0c\x5a\x9e\x2e\xee\x66\x36\x56\x0c\x7f\xa6\xce\xd5\x47\xfc\xef\x3e\xd3\x60\xf9\x9f\x6a\x84\xac\x71\x99\x66\xbc\x50\xb0\x1c\x62\x19\x3f\x74\x88\x43\x0f\x81\xd4\x41\x9c\xb2\xb6\x73\xe4\xe6\xe5\xf6\xf8\x6f\xb7\x4e\x47\x1b\xe2\xd8\x67\xfa\x09\xa9\x57\x30\x6f\xa9\xf6\xae\xd6\x4a\x3b\x73\x43\x37\x91\x50\x64\x47\x24\xba\xb5\xef\xca\xa7\x22\xbe\xe0\xe8\x9c\xc4\x79\x39\x84\x0a\x82\x3a\xa9\x9c\xdb\x94\xdb\xaf\x05\xf1\x9f\xae\x65\x11\x76\xa1\x43\x1c\x9a\x47\x3d\x13\xff\xb7\x67\x33\x0b\x8b\xa3\xed\x7f\xac\xd3\x1b\x9f\xee\xe2\xa4\x81\x5c\x46\x91\x53\x06\x7a\x4d\x3c\xab\x69\xdb\xe1\xfd\xcb\x42\x86\x7a\xe2\x17\x88\x71\x44\x28\xc5\xa8\x51\x08\xe9\x3f\x5d\xdd\x08\x1d\xe2\xd0\x3a\xea\x8a\xe4\xbf\x5d\x39\x79\x39\x7a\xda\x79\xd8\xd9\x1c\xeb\x8b\xe1\x62\xa7\x58\xd5\xec\x6d\x8d\x9f\xb3\x17\xef\x4e\x95\x5b\x11\x58\xee\x65\xd8\xd2\xb0\x14\x3e\x72\xf2\x33\xd2\x95\xe4\xb5\x92\x42\xa8\x22\x70\x18\x8b\x5c\x2f\xb0\xd7\x09\x16\x23\xfe\x19\xa2\xd5\x89\x43\xf4\xd5\x71\xe0\x0a\x98\x13\xdb\xef\xdf\xd3\x89\xa6\x95\xff\xac\x21\x1e\x73\x50\xc1\xec\x32\xef\xf1\x25\x4d\x3f\xc3\xb9\x24\x80\x11\xa1\x8a\x60\x37\xec\x1e\x2c\x1c\x24\x90\x0d\x17\xf9\xa7\x5b\xbc\xd0\x21\x0e\xfd\x33\x47\xfd\x52\xfd\xb7\x5f\x6f\x2b\x77\x3b\x6b\x3b\x2b\x4b\x77\x2b\x1b\x3b\x0f\x4f\x77\xbf\x63\x80\x37\x67\xf9\x84\xca\x66\xe0\xb5\x3e\x6c\x59\x2a\x42\xb9\x0c\x6f\x8d\x80\x04\xbc\x0a\x16\xaf\x9e\xa4\xaf\x6d\x74\x3f\xf8\x2e\x86\xff\x67\x1b\x04\x07\xcb\x22\x70\xfe\xef\x0f\xca\xd5\xc5\x07\xed\x83\x0a\x6a\x52\xfc\xdc\x60\xec\xde\xe3\xc3\xa6\xaa\xf5\xb3\x31\xb0\xf8\xca\x28\x99\xe6\x17\x35\x29\x79\xad\xaa\xbb\x83\x3a\x25\xde\x2b\x08\xe9\x60\x59\x84\xfd\x89\xf3\xee\x8e\x56\xce\x72\x8a\xa9\x68\xee\xbf\x80\xc7\xb6\xa0\xe8\x3b\xf4\x31\xcc\x7b\x40\xd0\x45\x94\x26\xed\x10\x62\x4a\x50\x1f\xb1\xfe\xcf\xb0\x42\x82\x65\x11\xd8\xa1\x43\x1c\xd7\x8e\xba\x22\xf8\x6f\x57\x16\xee\x2e\xce\xc7\xfa\xb1\xea\x1e\x19\xb4\x8c\xff\xd4\xff\x99\x0c\x0c\xa8\x77\xe8\xdf\xc3\xff\xd0\x15\xf6\x69\xac\xe8\x3b\x59\xe8\x87\xbe\xdb\x07\xd4\x06\xff\x19\x8e\xc5\x89\xc3\x99\x54\xf0\xfc\x58\x96\xf9\xd6\xbe\xa5\xba\x38\xf1\x75\xb2\x7f\x02\xfb\x7d\x5f\xc7\xcf\xeb\xbb\xa5\x3d\x0b\xcf\x07\xcf\xf8\xa4\x10\xfc\xa7\x1b\x9b\x13\xbb\x59\xa1\x65\xfb\xea\x95\x30\x33\x68\xb1\xe2\xa9\xb3\x0c\x70\x4b\xff\x20\xbd\x3f\x31\x7a\x2e\x20\x50\xdd\xf8\xc5\x44\x68\x78\xf6\x3a\x42\x0d\x81\x65\x2b\xf5\x65\xa5\xc7\xf4\xee\x5d\xc4\x9f\xbd\x44\x0e\xb1\xf8\x2f\x6b\x24\xc7\xf9\xce\x82\x82\x2b\xfd\x4f\xd3\x99\x53\xfd\x33\xf4\xd7\x5d\x9b\x4b\x42\x48\x68\x93\x03\x6b\x47\x79\xaf\xad\xef\xe8\x1c\x3c\xf9\x3f\x6a\x04\x11\x3a\xc4\x71\xfd\xa8\x67\xa2\x3f\x3d\xfb\x79\x78\x5a\x39\x1d\xeb\x53\xa1\xb8\xab\x9e\xa1\x73\xc5\xd0\x9f\xce\xbc\xb1\x0f\x94\x10\x99\xfd\xfa\x3c\x26\xf2\xb4\x7b\xfa\x82\x69\x3a\x41\xf1\x6c\xdd\x87\xff\xed\x1e\xb8\x47\xfb\x1c\xcd\x51\x57\x14\xe8\x83\x34\x73\x77\xb0\x3a\xbe\x0d\x98\xde\x9c\xf5\x22\x25\xb3\xd8\x31\xe0\x5e\x9d\x9e\x3c\xd7\xbe\xac\xaf\xe1\x4b\xe7\x2d\x53\x3f\xca\xb8\x8f\x7c\x05\xfd\xf8\xba\xf1\x9f\x4d\xa9\x71\x72\xc1\xa5\xa5\x44\x7f\xfe\x20\xae\xde\x41\xf7\x84\x40\xf2\x85\x0d\x07\xa9\x88\x7d\x15\x21\x2a\x3b\xb4\xd3\xaa\x28\x83\xbe\xe2\xe3\x14\x02\xa1\x82\x38\x43\x3b\x3b\xf0\x65\x5d\xe3\x7f\xe5\x86\xc4\xd8\x57\xec\x9c\xed\x8e\x8f\xac\x49\xa1\xdb\x15\xdf\xfc\xfa\x00\x8a\x98\xe7\xbc\x10\x5d\xbb\x20\x5f\xf7\x40\xc2\xd7\x48\xe1\xdf\x97\x64\xdf\xc8\x0b\x57\x19\xe2\xfe\xef\x70\x60\x79\xe2\x07\x2d\x7b\x9a\xbb\xb1\x94\x43\x31\x30\x84\x8a\xd7\xf7\xde\xc5\xcd\x47\x1a\xf7\x2c\xd9\x53\x39\xa8\x46\x6e\xe8\x46\x5e\x57\xa3\xc2\x66\xfb\x3f\xcb\xd6\xf6\xc4\x6e\xc9\x91\xdd\xc1\x2f\xdf\x71\x6b\x75\x29\x19\x97\x30\xcd\x52\x1b\x6a\xdc\x79\xa0\x57\xb7\x70\x9d\x73\x88\xa4\x33\x60\x32\x39\x46\xf0\x7f\x23\xbc\x7e\x62\x57\x0d\xea\x39\x9b\x13\x4a\xaa\x04\x1b\x76\x33\x87\x75\xfc\xe6\xfb\x6e\xa3\xca\x5f\xb5\x6c\x78\x6a\x12\x72\x36\xfc\x7d\x59\x77\x7e\xfe\xaf\x2b\xeb\x13\xbb\x0a\xfa\xc8\x95\x5d\xf5\xda\xf3\xda\xee\xf9\x69\xab\xcd\xa7\x96\x73\xa1\x4f\x01\xbf\xf0\x1a\xaf\x5b\xaa\x7c\x1a\x09\x2a\xaf\xe4\x63\xfe\x7f\x93\x3d\xda\x5f\xb0\x30\xf6\x3c\x77\x2b\x1f\x33\x77\xcb\x63\xbd\xb2\xaf\xe2\x5c\x79\x75\xaf\xa6\x3d\xca\xb3\x5b\x9e\xa8\xe3\x8e\x21\xdb\x36\xcf\x72\x22\xed\x9b\x1b\xee\x35\x4d\xe4\x06\x16\xbe\x0a\x08\x35\x04\xf6\xfd\x79\x52\xff\x94\xfb\xa4\x9f\x10\x08\x44\xb0\x1c\x62\xe9\x5f\xd6\xc9\x45\x3b\x9b\xcc\x79\x4b\x68\x3d\x5a\x28\xd6\xfa\x17\x05\x16\x71\xf3\xe9\x2b\x1d\xce\x82\x0e\x6f\xc7\x55\xe4\xae\x48\x79\x83\xf8\xc7\xeb\x84\xed\xff\xee\xed\xff\xff\x93\x79\xac\x7f\x77\xa2\xba\x7f\x7c\xf9\x73\x47\xbc\xb4\xa0\x7a\x83\x5c\x60\x03\xcb\x54\x83\x47\xbc\x94\x1b\x2b\x09\x6a\x9a\x24\xd6\xbb\xcb\xe0\xb4\xd7\x65\xf9\xac\x48\x5a\xfa\x58\x63\x2a\x9a\x5b\xa6\xfe\xcd\x32\xdb\xfd\xbe\xe5\x51\xbf\x62\x02\x32\x84\xee\x5e\x0c\x76\xfe\x14\xa1\xd1\x77\xe3\xd1\xe0\xc1\x98\x23\xaf\x0a\x02\x28\x70\xe7\xfa\xcf\x72\xec\xd8\xbf\xa2\x39\xb4\xff\x64\xf6\xec\x99\x03\x91\xb0\xb8\xca\xe5\x98\x9c\xab\xd0\xc5\xef\x6d\x8f\x34\x83\x34\xe2\xd2\x7d\xfb\x00\x9d\x28\xa2\x63\x4d\x05\x29\x67\x7b\x3b\x1f\xe5\xfc\x12\xcd\x9f\x96\x23\x4f\xb9\x2c\x71\xdb\x24\xaf\x83\x94\x7e\x22\xab\xb5\x55\x5b\x52\x72\xf3\xf2\xe2\xb1\xa6\x6e\x92\x0f\x29\x88\xda\x9e\xc8\xdc\xe0\xbe\x79\x45\x3e\x7f\x37\x2a\xf2\x29\x72\x5d\x72\x6e\xe8\xb7\xb6\x07\x6b\x0e\xad\x8e\x4f\xdd\xb1\xa6\xd2\x24\x03\x58\x66\x3e\xdf\xbf\xfd\x64\xa5\x31\x51\x7e\x56\x6e\x1e\x1a\xa8\xa2\x17\x6d\xec\xe8\x9e\xc2\xe8\x7c\xee\x8b\x6e\xc1\x1e\x88\xab\x71\x7c\xbc\xb9\xcf\x36\x92\x38\x82\xdf\x94\xe8\x71\x87\x56\x67\x2a\xda\xf4\x79\xc6\xf7\x06\x8d\x54\x24\x52\xbe\x58\x69\xf6\x20\x20\x1b\x73\x97\x36\xfd\x77\x9b\xee\xae\x2c\xc2\x5a\x16\x61\x1d\xb4\xa5\xcf\x82\x60\x06\x90\xa7\x18\x4e\xf5\x26\x0e\x3b\x4c\x19\xd1\x7d\xcc\xf9\xed\xcc\x7a\xe1\x65\xcb\x2b\x42\xf2\xd3\xcb\x94\xe7\x11\x66\x67\x27\xe8\x8d\xe4\x26\x2f\x04\x61\xd1\x1e\x2d\x73\xb1\xd8\xfe\xdd\xd6\x86\x82\xd8\xff\xdd\x06\x0e\x96\x0e\x32\xf8\x77\xdb\x37\x04\x07\x19\x22\x83\x73\x7c\xd9\x6f\xa7\xc1\xba\xef\xe1\xce\x77\x3e\x26\x0e\x01\xf4\xa9\xdd\x2c\x08\x92\x9d\x28\xa2\x27\x2b\x3e\xc5\x45\x2b\x0a\xd2\x77\x78\x9e\x0b\xd2\xfd\x77\xed\x42\x64\x80\xe3\xdd\x1e\xf6\x8c\x7a\x48\x4c\x73\x7b\x16\xa5\xc9\x3c\xc6\x7e\xf3\xe6\xfb\x04\xc1\x2e\xed\x9b\xad\xc9\x9a\xf8\xc6\x1d\xaf\xbb\x2b\xbe\x1a\xff\x74\x7b\x52\xbb\x10\x19\x86\xe3\xdd\xee\x9f\x9b\x7e\xf1\xcc\x2a\xbb\x2f\x3e\x82\xf9\x2c\xee\x67\xc3\x4e\xbd\xe2\x05\x6b\x1a\x83\xe4\xd5\x82\x0e\x42\x0b\x02\xf3\xe6\xee\x7f\xba\x3d\xa9\x5d\x88\x0c\xd6\xf1\x6e\x2b\x6c\x23\x5e\x79\x6c\x12\x33\xf9\xbf\x1a\xc3\x75\xab\x0b\x55\x64\x57\x79\xd3\x22\xf1\x3e\xbb\xe8\xce\xe9\x97\xb7\x57\xa6\x79\x11\x41\xdc\xff\xae\x5d\x88\x0c\x59\x10\x24\x87\x43\x86\xe4\xf8\x77\xfb\xf0\x51\xd3\x70\xe4\xbf\xdb\x89\x43\xb0\x41\x1c\x44\x88\x0c\x76\xf0\xb1\x71\x8b\x28\xce\xb7\xef\x10\x4a\x46\xd5\xd7\x1a\x4c\xbc\x0c\xea\xd7\xa2\xc9\x70\xe1\x26\xd2\xcb\x0b\x32\xfb\x9d\x6e\xa2\x2d\x15\xa3\x73\xac\xe9\xe9\xb5\x85\xcf\x8a\xf8\x0b\x64\x94\x60\xbc\x9b\xda\x92\x82\x7d\x81\x9b\x66\x53\x6a\x33\xa5\x46\xdc\x96\xb0\x3d\xb5\x80\xdd\x4c\x50\x08\xf6\xbf\xeb\x33\x44\xe6\x77\xe4\xb1\x7e\x0b\x1d\xae\x51\xf1\x3f\x2a\xf5\x2d\x75\x9e\x6a\x2f\x5c\x7e\xde\x36\x07\x2e\x63\xf1\x30\x51\x99\x7a\x73\xdf\x48\xf7\x43\x65\x64\x1d\x6b\x7a\xf7\xf6\xa5\x88\x3a\x5a\x51\x25\x29\x4a\x6e\x84\xe3\xfe\x4b\xa3\x96\x0b\xfa\x73\x16\xf6\x24\x9e\xd1\xf9\x9c\xcc\x79\x71\x91\xf2\xc7\x9a\x4e\xa8\x73\x7e\x70\xe6\x52\x0e\xe7\x33\xcd\x36\x40\xd4\xa0\xda\x2e\x87\xf6\x3f\x2f\x91\x8d\x0c\xcb\xeb\x0c\xee\x0b\x12\xb9\x2f\x76\x7c\xbd\xf3\x1d\x79\xf1\x2a\x7f\xdc\xdc\x6b\x35\xd1\xda\xaa\x2f\xaa\x7e\x02\x3c\xaf\xd9\x38\xb3\xbf\x26\x7a\x5b\x10\x29\x8c\x33\x7b\xb4\x1c\x5f\xe8\x6e\xb8\xb6\x69\x97\x7b\x22\x72\xce\xbb\xb6\x37\x34\x94\xf6\xd5\x47\xe5\x3e\x65\xbf\x95\xa4\x26\xb8\xd9\xbb\x68\x77\x26\xf0\xf2\xf1\x65\xbb\xe0\x55\xed\x2b\x73\x7b\x91\xa8\xc4\xb4\xb8\x88\x87\x9a\x3f\x52\xeb\xfb\xb8\x0f\x66\x0d\xef\xbc\x8a\xa5\x50\xb9\xb5\x22\x21\x7a\xac\x29\x99\x4b\xc5\x7d\x96\x25\x95\xfa\xc0\x73\xbb\x1f\xe7\x5b\xb3\x9e\x6c\x7d\x1d\x14\xdc\xd5\x7e\x6c\xf5\xe2\x87\x66\x39\x34\xcb\xd4\x77\xac\xe9\x6b\x95\xe9\x9c\xe1\x0f\x0e\x6f\x83\xd2\x2f\x65\xdf\x29\x15\x94\x7d\xb3\xef\xfb\x62\xf4\xfb\x61\xe4\x7d\xed\x07\xd7\x43\x0c\x04\x27\xfe\xf7\x21\x9c\xb4\x55\x31\x3e\x84\x5e\xe2\x27\xd9\x64\x6f\x73\x2c\x12\xc1\xaf\x72\xe7\x1b\x38\xcd\x5f\x15\x74\xcd\xe5\xb2\x43\xda\xab\xb7\xc2\xf7\x66\x4f\x69\x5f\x3f\xd6\x94\xbe\xe7\x09\xbf\x65\x53\x98\xae\x92\xc7\x2d\xd0\x77\x67\xf2\x50\xf2\x4d\x72\xa1\xe3\xa5\x26\xb1\x81\x31\x67\x5a\x36\xfe\x57\xb6\xc7\x9a\xbe\x93\x2a\xd5\x8f\xde\x7c\x19\x14\xa9\xd1\x70\x4d\x13\x94\xf5\x2a\x21\xa8\xf1\xf6\xbe\x87\x03\xe4\xfb\x8f\x19\x6e\x71\xd6\x1f\xff\x68\xc9\xf8\x5f\xea\x05\x8d\x54\x10\x75\x8d\x4a\xc6\x69\xd6\x60\x3b\x0f\xd8\xef\xb8\x94\x7a\x8f\x0a\xa7\xdf\x38\x20\x71\x22\x67\x3c\x3e\x80\xa1\xa7\x64\xbe\x3a\x45\xf1\x25\xf9\x6c\x8c\x89\xfa\x85\xf7\x46\x2f\xe5\x16\x5c\x3c\xbf\x6e\xe9\xa0\x81\xfa\x44\xde\xaa\x7c\x8b\xea\x58\xd3\xeb\xe3\xdb\x97\xb4\x24\xaf\xe3\x0c\x72\x29\x6a\xc7\x5e\xf5\x64\x51\x34\xe4\x97\x31\xad\x82\x9e\x9a\xbc\xac\x76\x2b\xfe\xc0\xc6\x71\xac\x29\xb7\x7f\x3a\xdf\x55\x69\xc2\xbc\x58\x95\xe7\xad\x5c\xe6\x62\xa9\x4a\xdf\xd8\x25\x63\xd8\x64\x11\x56\x82\xe7\x21\x53\xab\x21\xa3\x63\x4d\xdf\x4b\x11\xf5\xb1\xcd\x2b\xde\xe5\xee\xa8\x1b\xef\x1a\x95\xd0\x57\x9e\xd4\x59\xce\x0e\x7e\x17\x62\x94\xc8\xda\x93\x9b\x68\x11\x16\x54\x85\xf7\xef\xb6\x6a\x88\xcc\xef\xa0\xc8\x68\x04\xd6\x10\x87\x3e\x3b\x02\x19\xfc\x05\x1b\x5a\xc4\x62\xe8\x32\xfc\x25\x7c\xd3\x77\x14\x3c\xa7\xe5\x46\x7d\xe7\xb4\xe9\xca\x63\x2c\xf5\xd4\x7e\x3d\xd3\xd5\x12\xbd\xd5\x1b\xc5\xaf\xf8\x49\x21\x10\x40\x20\x68\x11\xd4\xe5\xa4\xd2\x4a\x08\xac\xad\xcc\x29\x04\x02\xa1\x8c\xc0\xba\x48\x17\x1d\xf4\x9f\x3f\x21\x3b\x3d\x99\x3b\xed\x1a\x28\x95\x11\xd8\xef\xe2\x3e\xe8\xb5\x4f\xb8\x47\x23\xd1\x85\x5e\xf6\xa2\x97\xd9\xcd\x12\x86\xae\xeb\x92\x5c\x7e\x43\x17\xa8\x6f\x36\x0b\x5d\xfd\x66\x17\xed\xf0\xba\xc6\xc4\xb2\x2c\x2a\x07\x05\x81\x00\x12\xa6\x80\x85\x2e\xb4\xa1\xce\x9e\x62\x8f\x65\x15\x9d\x7e\x78\x73\xf8\xa7\xfa\x9a\x31\xad\xa6\x29\x7b\x42\x49\x2b\x5f\x9e\xce\x9b\x95\x9c\xeb\x4f\xf0\x20\x10\xc0\x82\x29\x60\xa3\x0b\x77\xea\xe7\x91\x52\x8b\xab\x7a\x5c\x7d\x5b\xbc\xbb\x0a\x43\x9d\xc4\x71\x72\x61\x9f\x8a\x0a\xf0\x0e\xf5\xb7\x88\x9b\x52\xf2\x54\x21\x10\xc0\x86\x29\xe0\xa0\x0b\x3e\x61\xcd\xdf\xca\x32\xcf\x4f\xe9\x77\xde\x05\xaf\x19\x74\x7c\xe9\x4d\x7d\xfa\xfa\xf9\x38\xd6\xcf\x8a\x8b\xf5\x8d\x53\x6e\x22\x0e\x10\x08\xe0\xc0\x14\x70\xd1\x05\xff\x27\x0a\x97\x9d\xdf\xfb\x90\x33\x5f\xa7\xec\x19\xae\x78\x53\xbd\x6a\x49\xb2\xb6\x43\x83\x7d\x4a\xa2\xd1\xf9\x42\x44\x71\xb6\x01\x04\x02\xb8\x30\x05\x3c\x74\xe1\xee\xce\xd6\xde\x57\x9e\xda\x99\xfa\x1d\xc5\x52\xac\xc2\xa1\x62\xef\x6f\x78\xc9\x8f\xe2\xdb\xbc\x92\x96\x95\xc8\x5e\x5c\x42\x1c\x7d\x0e\x78\x30\x05\x7c\x74\x01\x97\xd7\x40\xb1\xaa\xf3\x9c\x4b\x6d\xf5\xfc\xae\x97\x84\x11\xfb\xb7\xf0\xf7\xf5\xbb\x8e\x76\x41\x74\x44\x7d\x2c\x5b\xfe\x6c\x26\x10\x08\xe0\xc3\x13\xfe\x29\x9e\x93\x8e\x33\xff\x2d\x1e\x00\x7d\x38\xe5\xbf\x6f\x67\x5f\xaf\x39\x78\x52\xf4\x46\x69\x74\x81\xda\x5b\xc2\x83\x64\xd2\xfd\x4a\xd7\xad\xb6\x6a\x5b\xdb\x92\xaf\x34\xb7\xb0\x21\x10\x00\x60\x4e\x18\x85\x2e\xbc\x4a\xd6\x91\xb3\xb1\x1e\xfc\x4d\x5a\x7d\xd7\x62\x25\xfe\x37\xf1\xb4\x85\xe1\x8d\xf4\x17\xa1\x5b\x6e\xd2\x82\xd3\x4f\x33\xfd\x10\x10\x08\xa0\x60\x0a\x04\xe8\x02\xc9\xa8\xec\x9a\x72\xe4\xd9\x21\x9d\xf8\x92\x8b\x07\xb4\xf7\x9f\xa4\x18\x37\xce\x26\xf1\xcf\x46\x17\x33\xea\xcc\xcf\xe2\x3e\xc6\x87\x40\x80\x00\xa6\x40\x88\x2e\xdc\x4b\x61\xba\x3d\xb5\xd2\xcf\xd1\xf4\x61\xb3\xb6\x51\xda\x43\x55\x43\x43\x94\x96\x2f\x01\xf7\xc7\xb2\x8f\xab\x66\x85\xcd\x13\x6b\x08\x04\x08\x61\x0a\x44\xe8\x42\x0e\x47\x33\xf5\x76\x19\x07\xe7\x18\xe2\xd4\xe0\xbc\xa4\x05\x57\xab\x2c\x8b\x8f\x08\x7e\xd7\x81\x8b\x4e\xd4\xdc\xce\x29\x17\x7b\x08\x04\x88\x60\x0a\xc4\xe8\xc2\xc5\xd7\x1f\x7a\x07\xd9\x1f\xfd\x3c\x27\x59\x6f\x59\x97\xef\xa9\xf5\xe0\xd9\x99\xbe\x1a\xbd\x71\xb7\x71\x41\xc6\x8f\x9c\x59\x6a\xa7\x21\x10\x20\x86\x29\x90\xa0\x0b\x88\x25\x19\x5d\xb5\x2d\x9b\x95\x37\x58\xbe\xa3\x83\x89\xb2\x9f\xb4\x5a\x4c\xbe\x06\x87\xcc\x39\x5f\x7b\xba\xfd\xf3\x63\xeb\x14\x05\x04\x02\x24\x30\x05\x52\x74\xc1\x8d\x70\x3d\xc4\x7a\x2c\x4b\xc8\xa7\x7e\x84\x09\x91\xd3\x71\xae\x17\xf1\xf6\x4e\x4c\xdd\x92\x09\x33\xa9\xf0\xf4\x9e\xb5\xb6\x05\x04\x02\xa4\x7f\x57\x3c\x27\x9d\x79\xff\x5b\x3c\x64\xe8\xc3\x09\xc7\x23\xa7\x21\x23\x27\xeb\x29\xba\x17\x1f\x1f\xe5\xd4\xf7\xd5\xec\xac\xd0\x93\x06\xa2\xb7\x1d\x22\xd1\xea\x64\xe7\x7d\x1c\x35\x21\x10\x20\x83\x39\x61\x72\x74\x41\x7e\x25\xd4\xe4\x96\xce\x3b\x89\x36\xe1\x65\xd5\x15\x3e\xd2\x4b\xe6\xaa\xa3\x86\xe7\x83\x55\x9d\x7a\xc5\x52\xe7\xc6\xce\x93\x39\x42\x20\x40\x0e\x53\x38\x85\x2e\x44\xf0\x5e\xa9\x2a\x21\x1a\x53\x72\x91\xc4\x42\x76\x68\x70\x0c\x9a\x18\x44\xd1\x2e\x45\x2d\xbf\x8d\xbe\x9e\xfe\x14\x6a\xaf\x55\x84\x40\xe0\x14\x4c\x81\x02\x5d\xe8\x98\x0c\xdd\x1d\x3f\x2d\x79\xf1\x89\xdf\x0f\xb2\xaf\x69\x4d\x2a\x76\x5c\x0d\x6b\x16\x81\x85\x91\xa7\x74\x1e\x78\x9d\x7f\x0d\x4a\x41\x20\x40\x01\x53\xa0\x44\x17\x26\x77\xc5\x2a\xb3\xb6\x6d\x2e\x41\x3e\x97\xd2\x0a\x1a\xfb\x7c\xde\xeb\x8b\x6c\x2c\x1b\xb2\x2d\xdb\x9e\x17\x97\x1b\xfc\x1c\x28\x00\x81\x00\x25\x4c\xe1\x34\xba\x70\xb5\xb8\x52\x52\xa6\x3c\x42\xd7\xf7\xec\xb2\x25\x7d\x5e\xc0\x69\x0b\x2a\x5f\xad\x1f\x93\x8c\x9f\xb2\xaf\x07\x1e\x96\x0e\x1c\x20\x21\x10\x38\x0d\x53\xa0\x42\x17\x64\x85\xa3\xab\x28\xce\xb2\x7d\x50\xf3\x7a\x2c\x1e\x1d\xb3\x29\x20\xfc\xb9\xe7\xa6\x8b\x6d\xf0\x7e\x0b\x5e\xac\xf9\xed\xe9\x03\x79\x08\x04\xa8\x60\x0a\xd4\xe8\xc2\x83\x5a\x12\xdd\xd2\xfc\x2f\x59\x74\x78\x14\xf1\x6e\x5e\xf2\x87\x17\x95\xd5\x2d\xdb\x7d\x85\xaf\x01\x9e\xab\xcf\x13\xa7\x9f\x1e\x1d\xea\xa9\xe1\x09\x0d\x78\xff\x6e\x2d\xfa\xdf\xe2\xa1\xa1\x41\x1f\xcf\x6f\xac\x29\xb6\x7a\xe9\x8f\xd4\x09\x57\x8a\xd6\x33\x5e\x01\xfc\xb6\xa2\x88\x11\x57\xbf\x64\xd4\x56\xfe\xe3\xb7\xa7\x63\xd6\x6e\x40\x20\x40\x03\x73\xc6\x34\x20\x3a\x11\x36\x7c\xe5\x83\xe6\xf6\xe5\x84\xaf\x3e\xec\x92\xaf\x3a\x6f\xca\xe8\xbd\x8a\x5a\xee\xfc\x50\x7b\x45\xb9\xfc\xc0\x26\xa1\x46\x86\x08\x02\x01\x10\x2e\x41\x8b\x4e\x28\x55\xe1\x0b\x94\x90\x99\x90\x39\xe0\x70\xca\x7c\x7f\xff\xee\x0e\x75\x4b\xb6\xfa\xde\xfd\x84\xa5\x81\x53\xa5\xb6\x3f\x1e\x14\xe9\x42\x20\x40\x0b\x97\x38\x83\x4e\x10\xdb\xe4\x72\x37\xee\xb1\x27\xdf\x91\x6c\x3b\xb5\x1f\x70\x91\x9f\xe8\x16\x7e\x6a\x39\xa9\xfe\x97\x31\xa5\x6f\x64\x54\x45\x76\x47\x47\xee\x33\x70\x09\x3a\x74\xe2\xf3\x73\x27\x13\xda\x1e\x93\x7d\xdd\xd0\x89\x92\xd8\xc8\x87\x87\x17\x3f\xd7\xd9\xe0\x46\x13\x72\xc7\x49\x8d\x04\x50\xe8\x77\x1d\x9d\xa4\xe9\xe0\x12\xf4\xe8\x84\x86\xb4\xbf\x61\x78\x6a\x6a\xa6\xfc\xe2\xe4\xed\x0f\x32\x35\xcf\x4a\x8d\xd9\x29\x79\x62\x52\xe7\xfa\x59\x9e\x52\x66\xa4\xaa\x51\x43\x20\x40\x0f\x97\x38\x8b\x4e\xe8\xad\x04\x23\xa1\xc8\xb4\xea\xd0\x0f\xab\x93\x89\xaa\xc4\x3b\x4f\xf6\x0b\xde\xb0\xa2\xf0\x94\x64\x3a\xad\x7f\xf1\x8f\x77\x79\x40\x20\x70\x16\x2e\x71\x0e\xe3\x2c\x7a\xe9\xf9\xe2\xf3\x03\x3a\x41\x86\x6b\x06\x9a\xa2\x59\xd7\x64\x4a\xbc\x3e\xdd\xbf\xa1\x87\x53\xfd\x2e\x36\x29\x65\x47\x95\x8c\x1e\x02\x81\x73\x7f\x57\x44\x27\x5d\xa5\xfd\x29\x22\x06\xf4\xf1\x78\xaa\xfb\x2f\x9a\x77\x37\xeb\x3e\x0e\xa0\xbc\x47\x66\x65\x32\x4d\x5f\x6f\x4e\xfa\x4a\x31\xa2\x44\xd5\x50\x59\x61\x3c\x4b\xf1\xe8\xe2\x87\x01\xee\x94\xcf\xa3\x13\xeb\x58\x04\x2b\x23\xc3\xab\x4f\xf3\xbb\xc6\x18\x49\x18\x6f\x46\x9c\x29\xdd\x8c\xbd\xe4\x22\xd9\xff\xa0\x0e\x74\x5a\xe8\xac\xe3\x87\x40\xe0\x3c\x5c\x82\x11\x9d\xf8\xb0\xaa\x5f\xb2\x77\xe7\xb6\x54\xd5\x15\xa2\x65\xb6\x75\xd6\x9a\x9f\x1a\x7a\x79\x49\xba\x4f\xc3\xc1\x77\x52\x3a\x62\x7d\xc6\x47\xab\x1f\x46\xb8\x04\x13\x3a\x91\x40\xb4\xe8\x30\xb3\x45\xfa\x5a\x61\x64\x3d\x6c\x52\xc0\xb8\xa8\x66\x3d\xa9\xc5\xf8\x87\x82\xf3\xa2\xc5\x8f\x4b\xd4\x2b\xe3\x3c\x10\x08\x30\xc1\x25\x98\xd1\x09\xd3\x98\xe8\x8f\x4b\xb8\x5e\xa6\x3a\xfb\xd2\xbd\x84\xfd\x57\x13\x0a\x6c\x43\x05\x8b\x9c\xe7\xb4\xa6\x2f\xdf\x8e\xb3\x7f\xf1\xf5\xe8\x10\xce\x0c\x97\xb8\x80\x71\x2e\x35\x9b\x99\xf0\x2d\x8c\x1d\xa6\xf6\x77\x49\x3d\x17\xe8\x6a\x37\x10\xf3\xa3\x1f\x9a\xd1\x52\xd3\x1d\x98\x79\xf4\x5b\xc2\x40\x19\x02\x81\x0b\x70\x09\x16\x74\x22\xdd\x16\x61\xc0\x22\xde\x04\x9d\x6d\x7d\x6a\xd8\x60\x76\x57\x77\x6f\xc4\x6e\x9b\x04\xbb\x95\xc1\x90\x5b\xd9\x03\x61\x16\x42\x09\x81\x00\x0b\x5c\x82\x15\x63\xdd\x34\xbf\x96\x98\xb9\x13\x57\xb4\x88\xaf\x68\xc6\x67\xcf\x9d\x55\xb2\x8e\xfa\x96\xd6\xf4\xf5\x62\xb1\x7d\x22\x33\x85\xb8\xb1\x04\x04\x02\xac\x7f\x57\x44\x27\xdd\xbf\xf8\x53\x44\x6c\xe8\xe3\x09\x76\x74\x5c\x4f\x98\x4a\x36\x6a\x7b\x3b\x02\xee\xe7\xf1\x7f\x38\xdf\x29\x13\xbd\xbe\xd4\xff\xe1\x7b\xbb\xb8\x59\x4c\xb7\x91\x24\x04\x02\x6c\x70\xa7\xcc\x8e\x4e\xbc\xc0\xae\xc2\xf6\x18\xf8\x78\x57\xa5\x95\xfe\xb7\x40\x58\xb5\xa7\x9e\x6c\x88\x8e\xc5\x7e\x76\xdf\x1c\x6d\x98\x6e\x43\xbd\x10\x08\x81\x00\x3b\x5c\x82\x03\x9d\xa0\xfe\xd9\x10\xc9\x6d\x92\xb6\xd5\x37\x56\x2a\xbd\x3e\x76\x76\x2f\x93\x2d\xe3\x01\x16\x65\x24\xeb\xbb\x17\x87\xc4\xd1\xf8\x0c\x82\x10\x08\x70\xc0\x25\x2e\xa2\x13\xd9\x7e\xee\x1b\x85\xf9\xe6\x48\x83\xad\x98\xb2\x0b\x0a\x9f\xc9\x46\x2c\x38\x2f\x19\x56\x28\x3b\x3f\xa1\x3b\x2b\x24\xba\x71\x03\x80\x40\xe0\x22\x5c\x82\x13\x9d\xd8\x57\x72\xff\xf9\xca\x74\x81\xfb\x69\x3e\xa7\xfe\x54\x32\xfb\xc6\x29\xf7\x81\xb2\xcb\xa2\x53\x22\x39\x49\x9f\xd8\xc6\x4c\x4a\x8f\x2e\xe6\x38\xe1\x12\x97\xd0\x09\x6f\x5a\xd1\x37\xa9\x40\x60\xde\x19\x04\x14\x5a\x67\x64\x64\xc2\x7c\x38\x64\xe1\xab\x39\x55\xe1\xe2\xf6\x3c\x7b\x63\xb6\x5c\x1d\x02\x81\x4b\x70\x09\x2e\x74\x62\xc0\xe9\xc9\x85\x22\x39\x92\x26\xdc\xf0\x0f\xf4\xb6\x12\xe2\xdd\xfb\x25\x0f\x79\x93\x09\x95\xd2\x97\x24\x33\x79\x72\xd5\x71\xdd\x20\x10\xe0\x82\x4b\x70\xa3\x13\x58\x7e\xc3\xaa\xea\xfa\x24\x97\xd2\x17\xc3\x9f\x59\x34\x4a\x35\x7f\x0f\x5a\x97\xe4\xfc\xd8\x97\xb6\x25\x2c\x98\x9e\xc4\xcd\x77\xb4\x47\x71\xff\x5d\x11\x9d\x74\x67\xef\x4f\x11\xf1\x60\xdc\x9c\x09\x67\xb8\xd4\x45\x26\xc1\x67\x6d\x57\x1c\x6f\x3a\x23\xec\x29\xf4\x4a\x7e\x97\x2c\x58\x6e\x6c\x29\xa7\xef\xa9\x7f\xf1\xa0\x28\x04\x02\x3c\x70\xa7\xcc\x8b\x4e\xd8\xd2\x9f\x3f\xc3\xcb\xb8\xd4\x4e\x0e\xa4\x26\x5e\xb8\xec\x90\x50\xc0\x37\x82\xea\x4e\xbd\x56\xbf\x47\xa3\x71\x3a\x81\x2d\x92\x1c\x02\x01\x5e\xb8\x04\x1f\x3a\x51\xe9\x94\x49\xed\xf2\x6b\xfc\xf1\x76\xe9\x5b\xa5\xaf\x8a\x83\x50\xfd\xb6\x1d\x65\x86\xf8\x6c\xbb\x3b\xe1\xfd\xed\xcd\xab\x9d\x1a\x10\x08\xf0\xc1\x25\xf8\x31\x88\xfb\x56\x93\x74\x97\xaf\x5c\xca\xe9\x8d\x7b\x3d\xf5\xe0\xe3\xf0\xe7\xf6\xf8\x69\x6e\xc1\x80\x53\x1e\xa3\x42\x23\x88\xa5\x2e\x32\x08\x04\xf8\xe1\x12\x02\xe8\xc4\xc3\xe6\xf6\x04\x52\x0b\x81\xfa\x6c\x6e\xa2\x3a\x9e\xa5\x43\xde\x45\x20\xb3\xe0\x7a\x75\x66\x51\x03\x47\x57\x59\xb1\x7a\xee\x11\x21\x00\x97\x10\x44\x27\xcc\xcf\x73\x21\x9c\xfd\x3c\x6b\xd4\xd3\x78\xe6\xaa\x94\x26\xe4\x9d\xad\x5b\x78\xea\x2c\x2e\x2e\x04\x0c\xe1\x0a\x07\xee\x16\xb3\x43\x20\x20\x08\x97\x10\xc2\xb8\xa1\xb8\x62\x88\xb5\x8b\xcb\xc2\x80\x8b\xc7\x1d\x2f\xde\x7b\x8a\x8a\xbf\x83\x2d\xca\x2c\x20\xe0\x95\x61\xae\xf6\x85\x69\x09\x82\x8b\x10\x08\x08\xc1\x25\x84\xd1\x09\xb6\xc2\x84\x53\x12\x9f\x6e\xd4\x9f\x0a\xeb\x39\xd4\x97\xc0\x23\x67\xb8\xf7\x23\x83\x8b\x25\xab\xf0\xb3\x7b\x81\x66\x4e\x9e\xea\x51\x9d\x0a\xff\x5d\x11\x9d\x74\xcf\xfb\x4f\x11\x89\xa0\x8f\x47\x3a\x65\xf4\x11\x6b\xf4\xc1\xeb\xfb\x3a\xfe\xaf\x78\x38\x1b\x44\xce\xa7\xbb\xb3\xd8\x9b\xe2\x8a\x57\x22\xde\xb0\xd0\x01\xc2\xb8\x10\x08\x88\xc0\x9d\xb2\x28\x3a\xf1\xa6\xe6\x79\x35\x31\x19\xd3\xbd\x11\x36\x8a\x66\x6b\xea\x50\x5b\x63\x5f\x5d\x95\x5f\x58\xbf\x84\xac\x6c\xe7\xc3\x16\x8d\xf2\xad\x20\x10\x10\x85\x4b\x5c\xc6\xa8\x53\xef\x44\xda\xb8\x86\xc4\x8a\xa6\xcb\xcb\x4d\x59\xfe\x9b\xf1\x6e\x53\xfb\x07\xd7\x93\x09\x9e\xff\xe4\x65\xed\x07\x0f\x35\x14\x21\x10\xb8\x0c\x97\x10\x43\x27\xb2\x7e\x50\x3e\x69\x44\xe2\xb6\x9c\xc3\x3f\xf5\x4c\x9d\xd1\xd0\x57\x9e\xdb\x35\xe3\x3c\x97\x02\x9e\x84\x92\x44\xd3\x9d\xbc\xd2\xa3\xab\x09\x31\xb8\x84\x38\xc6\x1d\xf3\xc9\x98\x1e\x36\x02\x93\x0f\x39\xe2\x79\x3f\x5b\x0e\x5f\xaa\x6a\xfc\xb8\xeb\x7b\xfe\xb6\xc9\xd3\x57\x5f\x97\xe3\xa5\x37\x2a\xce\x41\x20\x20\x0e\x97\x90\xc0\x20\xdc\x7f\xab\xee\x9a\xee\x52\xa4\x87\xdd\xdd\x0e\xea\x74\x6d\x3d\xf7\x6e\xbe\x46\x40\x16\xb2\xae\xd6\xb7\x98\x4c\xb7\x3e\x77\x74\x49\x2e\x01\x97\x90\xc4\xb8\x78\x5c\xf1\xec\x30\x4f\xff\xe9\x23\xb4\xe6\xe1\xf7\x61\xce\xd5\xfe\xb6\x57\x97\x2e\x0d\x2b\xff\xd3\x67\x7d\x49\x94\x06\xea\xd6\x47\xab\x02\x49\xb8\x84\x14\x3a\xe1\xe1\xca\x81\x63\x36\x64\x46\x5b\x7b\xb6\x52\x1d\x19\x3e\xbb\x92\x1b\xf1\xa8\xf3\xda\xbe\xbe\xfc\x1c\x63\xdf\x14\xca\x5c\x85\x09\x02\x01\x29\x78\xc4\x3f\x0f\xe5\x4e\x7a\x7e\x89\xf1\x50\x2e\x68\x85\xb5\xc3\xea\xb3\x79\x83\xe0\x82\x55\xc3\xad\xc2\x4f\x43\xb1\x46\xc2\x76\x77\x47\x15\x23\x7b\x5f\x0b\x84\x30\xd1\xe7\xb4\x1e\x6b\xea\x64\x7a\xd5\x5c\x3b\xed\x76\xd9\xd5\xcb\x3c\x3c\xe7\xdc\x37\x1c\x1c\x4c\x74\xd2\x6a\x0d\x9d\x3f\x72\xed\x8a\xcb\x53\x95\xa4\xde\x3c\xd6\xf4\x61\xe2\x47\x86\x7b\xab\x5e\x76\x7d\xf1\x29\x7c\xa7\xdc\xab\x05\x84\xe7\xf3\xae\x47\xd0\x6d\xec\xb2\x54\xe1\x8c\x8f\x6e\xa9\x53\x1f\x7f\xcf\xa1\x94\xa1\xab\xf1\xc3\x63\xb9\x5b\x3b\x02\x06\xb6\x9d\x02\x1f\xcf\x72\x60\xd7\xfc\xb8\xf5\xe2\xb9\x8f\x9a\xe8\x6e\xe3\x4f\xee\xe3\x0f\x26\xc9\xc6\xca\xf5\xce\xa9\x18\x0d\x43\xcf\x39\xc9\x19\xaf\x61\x73\x53\x8e\x64\xdd\x4a\xf0\x39\x5f\x5a\xed\x4f\xb8\xbf\x1d\xc3\xd8\x78\xac\xa9\xce\x43\x17\xaf\xe7\xc1\xcd\x3d\xd3\x2c\x64\x4d\x02\x61\x6f\xcb\x14\x39\x7e\x08\x84\xe9\x5b\x9a\xbe\x37\x46\x78\x71\x33\x1b\xd8\x1f\x6b\xda\x13\x7f\xd3\x75\xed\x09\x05\x4d\xb0\x72\x55\xd2\x13\x75\xe7\xb9\x6b\x5d\x33\xeb\x97\x26\x17\x76\xdc\x44\x5b\x94\x9e\x1d\x9c\x2b\x3f\xfe\x0e\x1d\xd8\x4b\xff\xb1\xf0\xbd\xaf\xc8\x42\x38\xb6\x91\x87\x20\xc9\x28\xf9\xef\xe4\x5e\x2b\xa6\xa4\x07\xed\x8b\x46\x8c\x8f\xfc\xc9\x82\xfe\x39\x92\x9d\xb4\x55\xff\x1c\xc9\xa4\xd1\x77\x8a\xdb\x4e\xd5\xd4\xcf\xd7\x93\x84\x5f\x10\x51\xa6\xa4\xc7\x37\xf2\xf5\x0b\x4f\x89\x33\x8a\x71\x65\xdf\xb7\x89\xfc\x72\xf0\xd6\x44\x1c\x02\x01\x69\xb8\xfb\x9d\x0c\xc6\x82\xd7\xfe\xa0\x99\xeb\xf2\x99\xd0\x8b\x62\x2d\x61\xfe\xef\x9b\xf6\xdb\x49\xc3\xa6\x54\x94\x05\x2d\xda\x83\xd6\xb5\xd5\x9b\x3e\xb2\x41\x20\x20\x03\x97\x90\x45\x27\x46\x6f\x6a\x3f\x41\x6a\x56\x5d\x75\x69\xce\x67\x65\xac\x4a\x10\x15\x43\x84\x42\x5c\xda\x9a\xec\x3f\xa6\x06\x75\x7a\xd6\xf2\xae\x40\x20\x20\x0b\x97\x90\x43\x27\xea\x48\x62\xa7\xb9\xce\xe4\xda\x6f\x20\x0b\xdc\xde\xfa\xc9\xdd\x19\xa8\x78\x37\xa2\x17\xcb\xf6\x32\x42\x12\xab\xe3\x61\x9d\xbe\x03\x04\x02\x72\x70\x09\x79\x8c\x15\x87\x34\x8d\xb9\x86\xd5\x24\x8f\x44\xda\x38\x8a\xb9\x74\xcf\xf3\xf3\xbb\x1a\x06\x65\xcf\x8f\x63\xb4\x9a\xf3\x34\xd7\x33\x00\x2c\x08\x04\xe4\xe1\x12\x0a\xe8\x44\xfb\xef\xc2\xd7\xe2\x58\x93\x17\xc7\xbe\xfd\x9c\xe8\x2f\xda\x0b\x5a\xb6\x56\x79\xec\x39\x3d\xa8\xd1\x12\x17\x3f\x46\x2e\x2c\x6f\x00\x81\x80\x02\x5c\x42\x11\x9d\xf8\x16\xb6\xf8\xcc\xf2\xe5\x03\x29\xce\x26\xbe\x81\xdf\x19\x7e\xdf\xef\xb7\xeb\x66\xfc\x92\x46\x31\x5e\xe0\x8d\xf5\x71\x66\x38\x14\x80\x40\x40\x11\x2e\x71\x05\x9d\xa0\x3a\xf0\x29\x55\xa9\xa1\xe3\x39\xcb\x55\x6e\xad\x6a\xce\xfe\x61\x69\xaa\xc1\x9d\xfb\xe5\xf3\xd6\x27\x83\xc5\xd8\x39\xa1\xe5\x47\xc7\xe3\x2b\x7f\xb7\x1c\x38\xe9\x78\xf3\xa7\x88\x94\x30\x6e\x0a\x87\x14\x50\xf3\xd1\xbc\x4c\xc1\x33\xea\xef\xe3\x29\xe9\x39\xb0\x7a\x51\xf1\x6e\xb7\xe7\x77\x7e\x85\x69\xd4\xbb\x98\xcd\x43\x0a\x08\x04\x94\xe0\x4e\x59\x19\x9d\x30\x54\x7a\x35\xaa\x9f\xaf\x99\xbf\x18\xb9\xe5\xa6\xe2\x31\x9f\xb9\x68\x06\x6d\x3e\x99\x08\xe2\x7a\xa4\xf6\xbc\xab\xcb\x88\xf1\x2c\x04\x02\xca\x70\x09\x15\x8c\x9b\x8b\xd8\xed\x33\xde\x1a\x77\xec\x99\xbc\xb9\x44\xcf\x7c\x7b\x87\xa5\x31\xf5\x30\x00\xef\xc3\x4d\x9a\xe4\xbe\x59\xe3\x0f\x56\xde\x24\x10\x08\xa8\xc0\x25\xae\xa2\x13\x8d\x4a\xb9\xf1\x31\xb7\xb2\xec\x34\x49\x17\x0e\xbb\x82\x7b\xb5\x7d\x3e\xd8\x7d\x96\x89\x70\x36\x2d\x9f\x62\x01\x5f\xcf\xdb\x1c\x5d\x19\x5c\x85\x4b\xa8\xa2\x13\xa2\xe1\x7d\x54\x82\x48\x54\x84\x22\x9d\x6b\x33\x1e\x36\xdd\x19\x92\xe6\xb2\x98\xdf\x5f\xd9\x96\x38\xc9\xe4\xd4\x6c\x88\x3f\x1f\xcd\x42\x15\x2e\xa1\x86\x4e\x94\x24\x84\x49\x53\x2a\x89\x98\x6b\x2a\xe0\x2a\x92\xf8\x6d\xe5\x55\x0f\xda\xd5\x0f\x85\x72\xf2\xec\xaa\xf9\x36\x22\x85\x77\x4c\x21\x10\x50\x83\x4b\xa8\xa3\x13\x46\x4d\x1b\xf8\x23\xd1\x19\x93\xb7\x35\x52\xbe\xb9\x90\xdb\xec\x17\x07\x12\x9f\x35\xc0\xf7\xd5\xc6\x63\x56\x8b\xe9\xb9\x50\xc0\x02\x81\x80\x3a\x5c\xe2\x1a\xc6\x3d\x2a\xbe\xaf\x2f\xe7\x7f\xb4\x0a\xce\x12\x8f\xd3\xd4\xf5\xa3\x96\x24\x52\xb1\xeb\x89\x5c\x57\xde\xf6\x6f\x9e\x7b\xc1\xdd\x5c\x7e\x74\x61\x7a\xed\xef\x8a\xe8\xa4\x33\xf1\x9f\x22\xd2\x40\x1f\x8f\xb5\x92\x8f\x15\xd6\xb2\xcc\x92\xda\xb5\xc0\xd8\xb5\xf5\xa6\xef\x43\x4c\xc6\xf7\x24\x27\x92\x76\xac\x20\x9a\xe6\x77\x94\x95\x28\x08\x04\x34\xe0\x4e\xf9\x3a\x3a\xf1\xc4\x21\x3f\xf6\x13\xe3\xef\xfb\x9e\x9d\x37\x6e\x59\x28\x7d\xcb\xae\x7a\x63\xd1\xac\x6a\x90\x98\xc0\xb3\x2d\xa2\x27\x72\x97\xdc\x19\x02\x81\xeb\x70\x09\x4d\x74\xe2\x26\xd7\x61\xf7\x4d\x51\xf9\xf1\x77\xbb\x73\x4c\x92\xbf\xda\xb7\x16\x1d\x57\xae\xdf\xc5\x27\xe8\xd0\x1d\x23\x3c\x1b\xaa\xaf\x75\x74\xbd\xa5\x09\x97\xd0\xc2\x78\x94\xf1\xad\xe5\xf4\xf6\x34\x0b\x3b\x71\xe7\x23\x9b\x16\xed\xb6\x90\x59\x47\xcd\xcb\x42\xed\xe5\x13\x56\x3b\x3e\x22\xca\x53\xf3\x47\x57\x06\x5a\x70\x09\x6d\x8c\x37\x69\x44\x04\x98\xc2\x8d\xce\xd8\x75\xd1\x85\x35\x66\x84\xad\x88\x47\x7f\x0b\xfa\xe8\xb0\xa6\xf7\x6c\x91\x5f\xc7\xd7\x4f\x50\x9b\x10\x02\x01\x6d\xb8\x84\x0e\x3a\xe1\xd5\xf9\x8e\xbb\xaf\x27\xf7\x3e\x91\x70\xb5\xf0\x25\x1f\x76\x83\x1a\xf3\xe5\xe1\x4a\x91\x5b\xaf\xce\x08\xbe\x62\x7c\x34\xd7\x42\x07\x81\x80\x0e\x5c\x42\x17\xe3\xd6\x0b\x39\x09\xb3\xf0\x1b\x16\x23\xa1\x68\xad\xb0\xf0\xa5\x6b\x73\x36\xdc\x8c\xd8\xf6\x2f\xb6\x06\x29\x65\x52\x14\x85\x5a\x67\xd5\x21\x10\xd0\x85\x4b\xe8\xa1\x13\x31\x8f\x57\x02\x39\x11\xbb\x36\x9f\x18\xfb\x92\x2a\x1f\xa8\x19\xff\xfa\x99\xfa\xe8\x5b\x86\x4a\xc0\x7c\xa4\x09\xc5\xe4\x7c\xd8\x51\x9d\xea\xfd\x5d\x11\x9d\xb4\x46\xfd\x53\x44\xfa\xe8\xe3\x71\xfa\x3a\x5b\x5d\xd6\xfc\x40\x58\xd2\x9d\xc2\x4c\x3d\xc8\x0f\xd1\x52\x51\xdf\x36\x43\x42\x76\x45\xfe\x33\xa5\xce\xe3\xb7\x63\xba\x10\x08\xe8\xc3\x9d\xb2\x01\x3a\x51\x9d\x30\xaa\x39\x8c\xe3\x20\x2b\x2b\xbf\x4a\xeb\xe8\xd1\x8d\x9a\x63\x20\x32\x5f\xeb\x8f\xa1\x61\x62\x49\x69\x7a\x82\xb8\xe1\x01\x81\x80\x01\x5c\xe2\x06\x3a\x31\xaf\x83\x1f\x63\x45\xe9\x4e\xa7\xbf\x13\xd5\x95\xce\x83\x5f\x7a\x5f\xc6\x14\xbb\x8b\xfa\x97\x80\x84\x88\xa1\x4a\x0d\xe2\x97\x12\x04\x02\x37\xe0\x12\x86\xe8\x44\xb4\x3c\xc1\x54\xf9\x38\xc7\xa5\x57\x34\x35\x19\x83\xea\x74\x82\x81\x39\xa6\x4c\x63\x58\x09\xba\xb1\x4f\x4b\x33\xa9\xed\xb3\x94\x21\x10\x30\x84\x4b\x18\xa1\x13\x21\x4f\x13\x8d\x12\xa6\xc9\xb2\xb4\x0a\xd5\x6a\x9f\xde\x8b\xf9\x78\xff\xb9\x72\x1c\x23\x2d\x47\xac\xd7\x23\x39\x69\x61\xb6\x82\xa3\xa3\x8d\x11\x5c\xc2\x18\x9d\xc8\xaf\x80\xa8\xaf\x99\x93\x6e\xf5\xd5\x84\x9d\xb7\xf6\xc7\x6b\x3a\x9f\x38\x90\x1b\x19\xd6\xbd\x99\xf8\x4a\xa6\x76\x74\xae\x47\x01\x02\x01\x63\xb8\x84\x09\x3a\xf1\x93\x56\x4a\x88\x84\x3d\xa8\xbc\x72\xfe\x9a\xeb\xb6\xd9\x9b\x46\x04\x5b\xd2\xaa\xc1\x7b\xff\xa7\x49\x43\xe2\xd5\x7d\x78\x69\x96\x10\x08\x98\xc0\x25\x4c\x31\x1e\xc8\x80\xf2\x25\x24\xb6\x53\x4c\x43\x77\x9a\x11\xe5\x0a\x9b\x4b\xa9\x33\x12\x7d\x2f\x28\x0d\xaf\xbf\xfe\x44\x41\xbc\x68\x2a\x70\x74\x0d\x62\xfa\x97\x4f\xbc\x4f\xb8\x7a\xfb\x53\x44\x37\x31\x9e\xa4\xc5\xd1\x0f\xde\x4b\x8e\x8a\x37\x7d\xfc\xd8\x9a\x85\x80\x35\x8a\xa7\x0f\x7b\xd9\xd3\xf3\xfe\x64\xb5\x7d\x19\x84\xaf\x6c\x6e\x0d\x81\xc0\x4d\xb8\x53\x36\xc3\x78\x91\xb0\xfc\x27\xf4\x65\x45\xf3\xd7\x54\xe3\x82\x88\x99\xd4\x93\xd9\xe7\x2a\x14\xb8\x7a\x4e\xcd\xe7\xdc\xbe\x54\xf4\xb8\xd3\xa0\xb8\x20\x10\x30\x83\x4b\x98\x63\x1c\x60\x47\xa5\x3b\x65\x67\xa1\x4b\x07\x7d\x16\x9d\xef\x57\x6b\x67\xd2\xf0\xf9\x56\xd3\x7f\x10\xda\x17\xd8\x29\x85\xb5\xd1\x0b\xe3\x40\x20\x60\x0e\x97\xb0\x40\x27\x56\x69\xae\xa9\x1d\xd4\x5f\x20\xf7\xc4\x9d\x71\x36\x48\xc7\x41\xa4\x03\x81\xf8\x8c\xc2\x4d\xc6\x97\x4d\xbb\x34\x85\xad\x2d\x8f\x76\x3f\x0b\xb8\x84\x25\x3a\xa1\x79\x8d\xdc\xff\x5a\xe6\x56\x08\xbb\x32\x7b\x70\x60\x88\xdb\xad\x33\x50\x7a\x52\x4e\x9c\x27\x43\x88\x97\x0e\x34\x7a\x38\x49\x0b\x81\x80\x25\x5c\xc2\x0a\x63\x16\x9a\xcb\x74\x56\x77\x5e\x28\x5b\x22\x84\x76\x8c\xb4\x8a\x34\x6b\x6c\x1e\x23\x5f\xb5\xdb\x6c\x38\x28\x5e\x8e\xdf\x9c\xc1\x3d\x5a\x94\x5a\xc1\x25\xac\xd1\x09\x88\x79\x6b\x78\xec\xa0\xe0\xf7\xfa\xd2\xaf\x75\x26\x4f\xd7\xca\x5c\x1a\xfe\xd1\xef\xd7\xf6\xce\x0a\x8d\x61\xd3\x75\xef\x75\x5f\x84\x40\xc0\x1a\x2e\x61\x83\x4e\x0c\x69\x97\xfa\xfb\x1c\xf4\x0c\x9e\xc5\xc6\x63\x4f\xd4\xec\xf1\x9a\x9b\x13\x20\xbf\x1e\xd0\xae\x2d\xef\x81\xf7\x94\x03\x31\x72\xb4\x7c\xb2\xf9\xbb\x22\x3a\xe9\xbe\xc6\x9f\x22\xb2\xc5\x38\x33\xea\xec\x67\x6e\x17\xd1\xaf\x49\xbe\xa6\xcd\xa0\xdf\x8f\x1e\xf1\xac\xd4\xb8\x37\x7a\x81\xa4\xde\x63\xa6\xd2\x20\x78\x2f\xd0\x0d\x02\x01\x5b\xb8\x53\xb6\xc3\xb8\x98\x7d\xcc\xc8\xd9\xa2\x17\x89\x2f\x51\xf7\xfc\x33\x77\x37\x9b\xa1\xb6\xf3\x40\x45\xaf\xf7\x97\x51\xbd\xc4\x6e\xec\x8e\x74\x52\x0d\x08\x04\xec\xe0\x12\xf6\x18\x37\x16\x72\x33\xb6\xa5\x0c\xce\xc9\xca\x19\xda\x0f\xb4\x8f\x97\x12\x8d\x9b\xd0\xbf\x76\x5f\x16\x55\xef\x53\x14\xdc\xfb\x1e\x36\xcd\x03\x81\x80\x3d\x5c\xc2\x01\x9d\xc8\xb8\x68\x24\xab\xf1\x6d\x0b\x3b\x52\x38\xf9\xe2\xe3\x39\xb6\xb0\x7b\x42\x7e\x25\x61\xbf\x77\xef\x2f\xde\xc9\x68\x65\x95\x08\xa2\x87\x40\xc0\x01\x2e\xe1\x88\x4e\x9c\x45\x31\xf8\xbd\x35\x58\xab\xe6\x97\xe4\x2a\x9c\xf3\xab\x8e\xe4\x39\xcf\xa3\xc5\x3b\x8f\x9a\xd8\x58\xab\xce\xf5\x19\xbd\x77\x34\x0b\x47\xb8\x84\x13\xc6\xeb\xa3\x07\xf7\xd5\x4e\x5b\x09\x5e\x13\x56\x9e\xed\x74\x36\xea\x95\x6e\xa8\x99\x61\xb3\x92\x0c\xbe\x39\xe4\xf8\x91\x02\x2b\xd0\xfb\xe8\x92\xdc\x09\x2e\xe1\x8c\x4e\xd8\x38\xfc\xe0\x6a\x88\x91\x77\x5a\x2f\x74\x70\xde\x34\x74\xa0\x5d\x2c\x5c\xb4\x6d\xf5\xd7\xc2\xe2\x0a\xd5\xb0\x7f\xc3\x9c\x75\x1a\x02\x01\x67\xb8\x84\x0b\x3a\xb1\xb9\xde\x28\xbd\x3b\x9c\xb2\xf1\x48\x72\x8b\x62\x08\x28\xfc\x94\xae\x89\x03\x45\xd6\xcb\x52\x5a\xe4\xd0\xc7\x5d\x68\xc2\x3b\xda\x50\x2e\x7f\x57\x44\x27\xdd\xf1\xfb\x53\x44\xae\xe8\xe3\x61\x17\xc4\xcf\x50\xf8\x69\x30\xc5\x2e\x55\x40\x75\xda\x99\x50\x92\xe3\xc2\x90\x91\xde\xd7\x6b\x9b\xb8\x2b\x7d\x8a\x5d\x69\xc2\x47\x0b\x21\x57\xb8\x53\x76\x43\x27\xb8\x15\x0c\xb3\xee\x96\x15\xe0\x3d\x61\xf4\xbb\x49\x31\x37\x9d\x85\x08\xe2\x68\x1f\xb6\x61\x4c\xa1\xb3\xc3\xb9\xfe\xab\x25\x42\x0b\x02\x01\x37\xb8\x84\x3b\x3a\xf1\x8e\x2a\xe4\x5c\xd5\x66\x06\x1e\x77\x9e\x0e\x73\xb4\xf5\x39\x4b\xa4\x84\xc6\xf3\xb7\x6e\x96\x29\x2c\x1e\x60\xcd\x72\x74\xe4\x0d\x08\x04\xdc\xe1\x12\x1e\x18\x6f\x2d\xf5\x4e\x4e\xe5\xd3\x45\xeb\x84\xd9\x9d\x3a\x85\xa5\x32\x1d\x57\xfe\x98\x9a\xe7\x96\x21\x39\x4b\x31\x8e\x4b\xc1\x5d\xa4\xfe\x35\x08\x04\x3c\xe0\x12\x9e\x18\x77\x4a\xf7\xe2\x66\x0d\xbe\x56\x07\xb8\xdc\x9f\x90\xd2\xfe\x50\x7d\x20\x72\xf3\xea\xa5\xd9\x02\xe3\x03\x5b\x2e\x89\x89\x92\xf7\x26\x34\x10\x08\x78\xc2\x25\xbc\xd0\x89\xd8\xa2\xfc\x57\x4c\x35\x5b\xf7\x29\x86\xa7\xd8\x5a\xf5\xbd\xb5\x66\xc6\x23\x07\xf3\x9c\x34\x84\x47\x7e\x98\xe3\x71\x4c\x10\xe9\x43\x20\xe0\x05\x97\xf0\x46\x27\xfa\xf7\x6e\x85\xa5\xd2\xe3\x9a\xb1\x2b\xce\xe4\xfe\x54\xd9\xb6\x2d\x64\x5e\xde\x95\xd0\x7c\x3a\x11\xb9\x2f\x4e\x5b\x2e\x51\x63\x00\x81\x80\x37\x5c\xc2\x07\x9d\x40\x86\x01\x77\x7c\xcd\xbe\x60\x5b\x34\x9d\xed\xfc\x26\x05\x84\xf1\x26\x00\x5c\x2f\xdc\x17\xa3\x91\xbe\xd4\xc6\x86\xc9\x9a\x47\xab\x02\x9f\xbf\x2b\xa2\x93\xee\x85\xff\x29\x22\x5f\xf4\xf1\x0c\x5b\x38\x9f\xce\x2e\x2a\xa9\x2f\x5d\x51\x94\x20\x35\x53\xe5\x5c\x3c\x27\x16\x26\xf1\xb6\xe5\x14\xd4\x7b\xc6\x3c\x90\x8d\xc9\x09\x02\x01\x5f\xb8\x53\xf6\x43\x27\x0a\x7c\x33\x03\x1c\x2f\x4f\x57\x33\x5c\x3b\x63\x7a\xaa\xa5\xbf\x39\x3e\xf4\xba\xcb\xeb\xf8\x2b\x4d\x3f\x88\x4f\x59\x98\x46\x0a\x0a\x43\x20\xe0\x07\x97\xb8\x85\x4e\x7c\x4a\xc8\x7c\x83\x0b\xd6\x69\x9c\x71\x1b\x73\x76\xc5\xa5\xbd\xf6\x5b\xdb\x62\xca\x76\xa0\x48\x4e\xef\x09\xc3\xef\xa8\xf3\xe7\x49\x21\x10\xb8\x05\x97\xb8\x8d\x31\x8b\x8c\xba\xa6\x92\x99\x57\xf8\x5e\xeb\x8b\x72\x99\x5a\x34\x95\x8c\x82\x71\x43\x77\x15\xf9\x96\xe2\x9f\xba\x6e\xe4\x3d\xac\x3c\x05\x81\xc0\x6d\xb8\x84\x3f\x3a\xe1\xe8\xb3\x64\x72\xf8\xec\xb5\x70\x2d\x5f\xac\x5b\x76\xad\xbf\x0a\xc5\x46\x97\x57\x8d\xcc\x67\x33\x1d\x29\x42\x4d\xf2\x04\x7a\x4d\x08\x04\xfc\xe1\x12\x01\x18\xaf\xe8\xdb\xf9\x50\x3f\x5c\xbb\xd5\x78\xbd\x6b\xfe\x61\x43\x77\x64\x28\x16\x07\xc9\xfb\xa8\xb3\xba\x82\x0f\x64\xb1\x69\x29\x6e\x06\xdd\x84\x40\x20\x00\x2e\x71\x07\x9d\x28\x24\x98\x73\x33\x3d\x5c\x5b\xf8\xc0\x16\x53\x96\x93\xa3\x42\x52\xf9\x90\xdb\xb3\x22\x8d\x40\x35\xb3\xc9\x76\x21\xd7\x59\xc9\x1d\x02\x81\x3b\x70\x89\x40\x8c\xef\x9f\x10\x6d\x8d\xdb\x7c\x52\xc3\x9a\x1b\x28\x27\xcf\xcd\xb4\xe1\x8e\x6f\xa3\x7d\x84\xe0\x17\xe2\x72\x5a\x50\xb9\xa1\x52\x35\x73\xb4\xee\x0d\xfc\xbb\x87\x75\x27\x7d\x83\x10\xe3\x61\x9d\x33\x6f\xd4\x8b\xca\x46\x5e\x56\x26\x70\x99\xc4\xb5\x56\x8e\x21\x7b\x71\x5f\xa8\x2c\x66\x59\x21\xf5\x33\xd6\x8a\xa3\xcb\x15\xc3\x63\x4d\xaf\x86\xbe\x4e\xb8\xc2\xfb\x3e\xe4\x4d\xc4\x5c\xbb\xc2\x3e\x5e\xf5\x8d\x1b\x5f\xf7\x3a\x84\xf2\x29\x92\xbe\x4b\x50\x19\x8b\xd2\x1e\xff\x62\xb2\xd5\xdd\x25\x63\x90\x3a\xaa\x3d\x4e\x47\x84\x83\x28\xf7\x6e\x9d\x91\xf1\x3b\xcd\x4e\x3b\x81\x00\xed\x4f\xdb\x45\xaa\xac\x34\xc4\xc7\xbf\x70\x18\x37\x7c\x69\x7e\x95\x42\xfe\x90\x64\x33\xf0\x4a\x28\xc5\xf7\xfe\xde\x36\x2d\x3c\xbf\x61\x3c\x93\x55\x35\xaf\x78\xc2\xe8\xe3\x03\x58\xff\x62\xe5\x8c\xe7\xdc\xfe\x9e\xe3\x51\xd5\xea\xb4\xbc\x8d\x89\xe5\x19\x9c\x09\x8a\x47\x34\x32\x69\x38\xf8\x69\xc5\x8a\x91\x2f\x8f\x35\x55\x77\xc6\x32\xbd\xe1\x0a\xb4\xb0\x17\xc5\x94\xfa\xbc\x26\xe5\x2a\x73\xe3\xa1\xf7\xac\x79\x5c\xfe\x38\x2c\xfe\x67\x61\xa9\x83\xf1\xb1\xa6\xd5\x1a\x59\x8e\x80\x04\x96\x57\xbb\x5d\x69\xf9\x7c\x02\xbd\x3d\xd5\xf8\x8d\xef\x92\xa1\xfa\xf2\x75\x2c\x39\x51\xc8\xcf\x11\xef\x8e\x35\x1d\xd8\x57\xc5\xfe\x6c\xd0\x71\x2a\xe6\x33\xea\x8b\xc8\xfd\x91\x73\x8a\x21\x22\xa3\xcf\x4e\xdd\xa2\x3e\x43\xd3\xf8\x83\x30\x27\x38\xf5\x7f\x0f\xeb\x4e\xda\xaa\x7f\x8e\x64\x41\xe8\x3b\x45\xa2\x58\x06\x05\x67\xd2\x13\x88\x4d\x80\x36\x33\xe4\xfb\x0a\x4f\xee\xfd\x07\xbc\x1f\x6f\x1e\xca\x13\xb0\x51\x4c\xb5\x8e\xb2\x1b\x42\x20\x10\x04\x77\xbf\x83\xd0\x89\xb5\xc1\x37\xe1\x1a\x73\xc3\x38\xfc\xaa\xf3\x12\x29\xbe\xab\xe9\x0b\xd6\x26\xa7\x3b\xa4\x06\xd4\x89\x6c\x2b\x37\xb4\x4a\x49\x64\x20\x10\x80\xe0\x12\xc1\xe8\x04\x7f\xa2\x5e\x71\xbd\xe7\x3d\xb2\xb6\x0f\x05\xf3\xd9\x2b\x17\x1f\x3a\x7b\x30\x09\x35\x2e\x51\x29\xbe\x92\x15\xb8\xa9\x1e\x95\xe1\x02\x81\x40\x30\x5c\x22\x04\x9d\x38\x93\xdd\xdb\xab\x70\xb3\xf9\x1c\x55\x7a\xea\xdd\x89\x2f\x2f\x7f\x7a\x95\x69\xe0\xbf\x53\x5e\x18\x43\xbd\x51\xf0\xcb\xbb\x95\x43\x0d\x81\x40\x08\x5c\x22\x14\xf3\x2b\x68\xcd\xbe\x3c\x1a\x1c\x37\x88\xcb\xb5\xb2\xf5\xe4\xca\xac\x28\x6a\x44\x2d\x93\x7a\x1e\x8b\x11\x98\x0c\x2d\x7f\xaf\xb1\x13\x85\x40\x20\x14\x2e\x11\x86\x4e\xd0\x4c\x9f\xe3\xf0\x8e\x80\x56\x93\xa3\x02\x3e\xc4\x1b\x67\x83\x2a\xf7\x4b\x52\xca\x94\x1e\x4d\x31\xce\xa4\x80\x84\xfe\xd3\xec\x10\x08\x84\xc1\x25\xc2\xd1\x89\x5a\xb5\x64\xc2\xdf\xcf\x99\x9f\x7c\xf5\x5f\x49\x3a\xe8\xff\x96\x99\x46\xb2\xfc\xde\x36\x89\xba\xf4\xd3\x0d\xd9\xb9\x83\x9c\xa5\x73\x10\x08\x84\xc3\x25\x22\x30\x0e\x96\x97\x32\x3b\xc3\x66\x95\xc3\xbf\x43\xc1\x9f\xf0\x3f\x8f\xa0\x54\x76\xe4\x3f\x36\x48\x66\xba\x2f\x8b\x98\xfe\x9e\x64\x26\x53\x83\x40\x20\xe2\xef\x96\x03\x27\x1d\x6f\xfe\x14\x51\x24\xfa\x78\x7a\x6e\x8a\x09\x6f\xb5\x36\x34\x7f\xaf\x3d\x48\xe7\xca\x92\xa0\x13\x9e\x1e\xe9\xa4\x4e\xcf\x71\xa8\x89\xb6\x44\x7c\xaa\x30\x05\x20\x10\x88\x84\x3b\xe5\xbb\x18\x37\x2d\x5e\x4b\x3b\xec\xd1\x74\x78\x72\x5c\x1f\x11\x7d\x74\x9d\x1d\x2b\x9b\xd0\x72\xf5\x8b\x69\xc3\xa4\xf0\x8c\x56\x62\xf4\xe9\x9d\xa3\xad\x7a\x17\x2e\x11\x85\x4e\xec\x29\x2a\x10\x9e\xd1\x2e\x9c\x97\xc7\x9e\xf8\xe5\x61\x14\xee\xde\xd7\x5b\x44\x27\x66\xaa\x62\xf6\x5c\xfc\x90\x6f\xf9\xd7\x1d\x0f\x08\x04\xa2\xe0\x12\xd1\x18\x5f\xfc\xf0\x4f\xaa\x68\x24\x38\x4f\xe4\xc8\x5f\x61\x3b\xb7\xe7\xcf\x80\x30\x94\x51\xbb\xae\x7c\xfa\xe9\xd5\xb4\xef\x4f\x52\xf6\xec\xcd\x20\x10\x88\x86\x4b\xdc\xc3\xf8\xde\x54\x1b\x63\xf8\x7e\xfc\x55\xa2\xcb\xde\x1f\xf6\x33\x51\x7e\xfa\x7d\x4e\xe9\x8e\x95\x81\x86\xca\xd0\xba\x0e\xae\xf6\x5d\x9b\xa3\xd5\xe8\x3d\xb8\xc4\x7d\x74\xc2\xf8\xb1\x2e\xe9\x77\x62\x27\x2e\xbc\xce\x77\x4b\xe3\x93\xf3\x75\x43\x9f\x0d\xaa\x55\xef\x4d\x15\x45\xbc\x3a\xa5\xf6\x93\xf8\x19\x33\x04\x02\xf7\xe1\x12\x31\xe8\x44\x57\x6e\x8a\x36\x56\x86\xf2\x48\x10\x43\x99\xb9\x70\x02\x81\x51\xbf\x67\x98\x46\x5c\x98\x71\x8a\x7e\x04\x4b\x0c\xe7\x8f\xab\x47\x0b\xde\x18\xb8\x44\x2c\x3a\xb1\xb3\xbb\xa0\x59\xaf\xda\xf1\x7d\x99\x7f\xbb\x4c\xf6\xde\xc4\xaf\x17\xed\x4a\xc3\x7a\xec\x7d\x77\x88\x56\x09\x45\x4e\x73\xd5\x1e\x5d\x7c\xc4\xfe\xe5\x9a\xfa\x84\x33\xf1\x9f\x22\x8a\xc3\xf8\x2a\xd7\x96\x1f\x5f\x16\x97\xe0\xe1\x23\x76\xec\x27\x3f\x9e\x7e\x7c\xa9\x9d\x3d\x59\x20\x5e\x27\xb3\xec\x54\x31\x53\x4c\x4c\xc0\x71\x74\x9a\x88\x83\x3b\xe5\x07\x18\x4f\xbc\xa5\xfb\x68\x03\xe9\x08\xc9\x58\x44\x41\xc6\x12\xa0\xb2\x11\x4b\x58\xf3\xa1\xc2\x87\xa4\xdb\x51\x37\x58\xfd\x24\x14\x51\x47\x45\xf4\x00\x2e\x11\x8f\x4e\xbc\xb4\x75\x79\x7e\x8e\x7e\x15\x92\xd4\x4d\x28\x76\x90\xd0\x21\x31\xf0\x26\x9b\xc2\x9b\x6c\x15\x32\xaf\x6d\xfa\xfd\x2c\xc3\xde\x1a\x02\x81\x78\xb8\x44\x02\x3a\x71\x21\xfe\x31\x65\x94\x57\x0f\xe2\xf0\x59\xd2\xa0\x80\x16\xf5\x7e\x2e\x97\xf0\xbd\x0e\x23\x72\x57\x26\x8f\x6a\x31\x4a\x8b\x8b\xf8\x10\x08\x24\xc0\x25\x12\xd1\x09\xfb\x1e\xd2\xc9\xab\x1d\xaa\x2a\x73\x8d\x93\x08\x00\x6c\xcd\x45\xe5\x10\x99\xce\x5e\x2d\xc4\xb5\x77\xe9\xde\x7f\x68\xca\x28\x01\x81\x40\x22\x5c\xe2\x21\x3a\x51\xfc\x86\xc2\xdb\x71\xf6\x46\x89\xbf\x63\x3d\xd1\xb3\x0e\x1a\x1c\x8f\xf6\x4e\x6a\xed\xb6\xdb\xd2\x83\xcf\xb5\xa5\x18\x9e\xc9\xf3\x43\x20\xf0\x10\x2e\x91\x84\xf1\x40\x26\x55\xa8\x5f\x38\x6d\xff\x02\x6a\x30\x9f\xb8\x2c\x31\x72\x1f\xcb\xe9\x0d\x07\x12\x67\x7f\x59\xe4\x99\xb8\xd4\x5b\x7b\xfa\xa3\x3d\x2a\x09\x2e\x91\x8c\x4e\x50\x24\x85\x82\xc2\xcb\x6e\x22\x29\x57\xab\xe2\xee\x65\x87\xe2\x05\x66\x05\x63\x2b\x0a\xc8\xf5\xb8\x92\x4e\x8f\x8c\x0b\x6c\x3b\x43\x20\x90\xfc\x77\x45\x74\xd2\x1a\xf5\x4f\x11\xa5\x60\x3c\xc8\xcd\x79\xa3\x72\xc0\xdc\x4c\xc1\xba\x24\x08\x26\xaf\x31\xb8\xde\x7f\x30\xb3\x59\xf0\x05\x89\x4b\x94\x56\x4b\x63\xec\xd7\x4f\x05\x81\x40\x0a\xdc\x29\xa7\xa2\x13\x42\x9c\x05\x24\x3c\x1e\xfb\x59\x41\xbe\x3e\x8e\x43\xa1\x16\x32\xa7\xcb\x75\x81\x80\x01\xa2\x6d\xea\xf8\x3a\xaa\xc8\xeb\x29\xda\x10\x08\xa4\xc2\x25\xd2\xd0\x89\xc7\x9f\xa5\x24\x97\x93\xc5\x15\xdf\x8a\x26\x69\xea\x6c\xc6\x2e\x4a\x30\x9c\x11\x98\xa1\x7c\x94\xf9\x6c\x5a\xaa\xdf\xe9\x7b\xcc\xd1\xa2\x34\x0d\x2e\xf1\x08\x9d\xb8\xf5\x6c\x26\x9e\xc9\x9e\x80\xd0\xef\x46\x68\x42\x70\xe0\xc3\x05\xc0\x71\x89\x00\xe7\xd1\x25\x9d\xa7\xfe\xd5\x62\x35\x77\x96\xcf\x40\x20\xf0\x08\x2e\x91\x8e\x4e\x68\xf9\x32\x0b\xd0\xd7\x50\xf8\xb8\xfa\x35\xf8\x78\xf1\xdc\xa2\x89\x2f\xf3\x1f\x0b\x8e\x63\x8d\xd2\xe5\xf0\x2b\x53\x6c\xdc\x3d\x3a\x4d\xa4\xc3\x25\x32\xd0\x09\x6c\x87\x41\xa1\xf3\x91\x62\x87\x0e\xdb\x9a\x79\x8a\xc8\x0d\xc3\xd5\x06\x1c\x6c\xe6\xa4\xd2\x87\x5b\xc3\x15\x19\x7d\x4d\x58\x47\x1b\x2a\x03\x2e\xf1\x18\xe3\xfd\x1a\x2d\x1b\x0e\xf5\x04\x9b\x95\xfa\x34\xcb\x59\x9c\x68\x03\x86\x0f\x2f\xbd\x39\x2c\x57\x50\x62\xcf\x90\xef\x9c\x35\xb1\x8a\xe8\x21\x10\x78\x0c\x97\x78\x82\x4e\xbc\xb7\x30\xb4\x5b\x7c\x8a\xaa\x7e\x52\x26\x4f\x7b\x83\x86\x53\x20\x3c\xed\x67\x61\xca\xa2\x47\xa4\x4b\x9a\x60\x61\xcc\xa5\x6b\xc4\x10\x08\x3c\xf9\xbb\x22\x3a\xe9\xea\xed\x4f\x11\x3d\x45\x1f\x4f\x99\x58\x04\x6f\x5f\xe4\xa5\x05\xf9\x60\xe3\x62\xef\xa7\xaa\xd6\xa6\x7e\xd8\x07\x49\x01\xd6\x9b\xfc\xb5\xbc\x25\x92\x8d\x51\xaa\x10\x08\x3c\x85\x3b\xe5\x4c\x74\x42\xec\xfb\x65\xdf\xae\x76\x83\x75\x3e\xcb\xd6\x37\x4e\x04\x66\x4a\xa3\xb6\xe3\x6d\x43\xed\xb7\x99\x1e\x0e\x7e\x7f\x65\xe3\xf2\xf9\x68\xdf\xc8\x84\x4b\x64\x61\xbc\xe0\x4e\x6c\x58\xef\xf2\x9b\x4d\x8f\x69\x57\xe2\x3e\xed\x82\xe8\x83\xe0\x6b\x9f\x5e\x50\xd0\x37\x6b\x0d\xa5\xac\x52\x14\x8c\xeb\x5e\x86\x40\x20\x0b\x2e\xf1\x0c\xe3\xca\xce\xa4\xb3\x9b\x98\xf7\xa5\xb2\x05\xee\x84\x8e\x47\xee\x92\x63\xfc\x61\x31\x78\xc3\xeb\x69\xa7\x4f\x02\xe7\x10\xfd\x84\xd1\x4d\x08\x04\x9e\xc1\x25\x9e\xa3\x13\x82\x77\x5f\x04\xb3\x41\xd1\x35\xe6\xaf\xea\x6e\x7b\xf8\xbc\xaa\xb5\xac\x9e\xae\xed\x96\x3f\xac\x63\xea\xb8\x50\x26\xc8\xf3\x9f\x45\xe9\x73\xb8\x44\x36\x3a\x71\xc0\x57\x88\x1b\xed\x74\xa1\x59\xe8\x46\xb6\x69\xc8\x73\x6a\x44\xfa\xcb\x92\xa5\x72\xb0\xa0\x27\x9a\xfc\x59\x75\x4a\xdc\x67\x57\x08\x04\xb2\xe1\x12\x39\xe8\x84\xe7\xf0\x72\xe0\xd5\xc4\xb4\x3b\x67\x99\x6b\x2f\xb5\xf3\x2e\x73\x51\xef\x5c\x95\x73\x7c\x11\xbb\xf1\x2d\x5c\x46\x31\x65\x47\xce\x1c\x02\x81\x1c\xb8\x44\x2e\x3a\x31\x96\x6d\xf7\xb9\xe4\x27\xaf\x3d\xb7\x6f\xb7\xcc\x78\xc7\x0d\x86\xc5\x1e\xe6\x0b\x65\xe7\xeb\x57\x91\xce\xeb\x95\x61\x44\x35\x72\x10\x08\xe4\xfe\x5d\x11\x9d\x74\x5f\xe3\x4f\x11\xbd\xc0\x58\x87\x9f\x6a\x18\xfb\xe0\xc8\x7f\x5b\x72\xe1\x87\xe5\x8b\x2f\x08\x9f\x92\x0b\xf1\x87\xad\x24\x13\x2b\x0d\xa6\x9a\x51\x05\x81\xf3\x22\x10\x08\xbc\x80\x3b\xe5\x3c\x74\x42\xf9\x5e\x2b\xab\x03\x69\xcb\xc3\x3a\x8d\x4f\xa0\xe7\x7d\xc6\x0b\xa7\xd5\x70\xca\xb2\x17\xc4\x14\x07\xe2\x7b\xbf\x91\x0a\x24\x93\x41\x20\x90\x07\x97\x78\x89\x4e\xb8\x29\xcd\xf0\xe2\xd2\x6d\x3f\x8b\x5e\xd2\x28\xa7\xd9\x8e\xe3\x32\x94\x9f\x55\x75\xba\xcf\xac\xaa\x3f\x45\x43\x40\x51\xea\x7d\x0a\x02\x81\x97\x70\x89\x7c\x8c\xaf\xbd\x85\x5b\xe1\x0c\xe3\x4f\x90\xec\xcc\x14\xb9\x36\xae\x67\x48\x75\x74\x9b\x43\xe5\x71\xce\xc0\x60\x78\x0f\x5d\xf8\x40\xc2\xd1\x5a\x2b\x1f\x2e\x51\x80\x4e\x58\x59\xb7\x47\x7e\xcd\x13\x39\x65\x17\xbd\xe1\x73\x6a\x50\xb5\xe3\xee\xd7\xd3\x4f\x1b\x01\x5c\xc9\x07\xe4\x62\xd5\x43\x5e\xff\xd9\x37\x0a\xe0\x12\xaf\xd0\x09\xc5\x9e\xf8\xb1\x8b\x2c\xb1\x9c\x92\x2c\x74\x82\x1a\x7c\x75\x69\xab\x53\xdb\x91\x52\x82\x5b\xc9\x7d\x4b\x1e\xa3\x9b\x42\x36\x47\x17\x2c\xaf\xe0\x12\x85\xe8\x84\x7e\xfd\x59\xe4\xd5\x41\x8e\xfe\xc2\xb1\x6c\x86\xe0\x9c\x8d\x92\x3e\x46\xeb\xda\x2b\x24\x3f\xeb\x4f\x67\x7f\x5a\x35\x0a\x5c\xa6\x85\x40\xa0\x10\x2e\x51\x84\x4e\x30\x6a\x4c\xc4\x3f\x33\x53\x3c\xbd\x25\xac\x46\xeb\x4b\x77\x97\x81\x48\x7b\xa5\xc7\xd5\xfd\x53\x7e\xe7\x4d\x65\x7d\xe3\x2b\xfd\x04\x10\x08\x14\xfd\x5d\x11\x9d\x74\xc7\xef\x4f\x11\x15\x63\x3c\x67\x30\x6c\xae\x8d\x48\x22\x4d\x5f\xb0\x1e\x54\x24\x20\x01\xdf\x2f\x4d\x33\x78\x89\xcf\x2c\xde\x9f\x4b\x70\xd5\xa2\x0b\xc0\xd1\x82\x40\xa0\x18\xee\x94\x4b\x30\x1e\xad\xd4\x30\x8e\x68\xe0\xb1\xd2\x65\x2b\xe3\xee\x88\x7c\xdc\x26\xcc\x8c\x98\x27\xdc\xfe\xaa\xda\xb4\x36\x6e\xe0\xd7\x66\xb0\x7f\x74\x26\x2a\x81\x4b\x94\xa2\x13\xde\xef\x1b\xba\xcf\x4a\xe7\x0a\x7f\x7f\x7b\xc7\x45\x7d\xae\x23\xe7\xb2\xcf\x17\xfd\x4e\xfc\xb6\x07\x86\x44\x23\x95\x4f\xbf\x1a\x09\x41\x20\x50\x0a\x97\x28\x43\x27\xaa\xdc\xb8\x38\x54\x08\x56\x79\x0f\x9f\xff\x4a\x3e\xaf\x3d\xce\xee\x2c\xc4\x4c\x15\xe5\x06\x8c\x8e\x44\x32\xf1\x6d\xfa\xf5\xda\x42\x20\x50\x06\x97\x78\x8d\x4e\xf8\x77\x51\x6f\x28\xb9\xec\x3f\xc8\xb3\x20\x88\x22\xa4\xbb\xca\xc9\xfe\x6e\xfc\x36\x49\xef\xeb\x08\x0d\xba\x87\x97\x62\xe4\xf9\x8f\xce\xa7\xaf\xe1\x12\xe5\xe8\x44\xe7\x58\xf3\x58\x89\xf9\xb5\xbc\x02\xba\xbb\x19\x69\xc4\x1d\x26\xe7\xc5\x18\xcb\x55\x3d\x2d\x86\xbe\x5f\x96\xcd\x72\x68\x85\x04\x21\x10\x28\x87\x4b\xbc\x41\x27\x56\x6a\x67\x37\x3b\xe4\x78\x62\x48\x54\x63\x85\x0f\xf8\x1c\xd8\x7b\xb0\x05\x88\xb9\x5f\x0e\xaa\x3e\xf9\xc0\x33\xc7\x6f\x5e\x7e\x74\xca\x7e\x03\x97\xa8\x40\x27\x06\xf9\x44\xbb\x9f\x45\x3f\xb4\x3a\x3f\x19\x6b\xb6\xae\x2d\xee\x3d\x5c\x64\x32\x3f\xb3\x73\x9b\x2c\x5c\x6a\x8a\xf7\x51\xfb\x47\x04\x04\x02\x15\x7f\x57\x44\x27\xdd\x0b\xff\x53\x44\x95\x18\x5f\xb5\xd2\x18\xcd\x74\x6a\xba\xc8\xbe\x7c\x57\x61\x75\x98\x7c\xe3\xc2\xfb\x8c\x27\xe5\x49\x5c\xda\xe1\x33\x0f\x5d\xf3\x44\x3c\xcd\xc8\x21\x10\xa8\x84\x3b\xe5\xb7\x18\x0f\x88\x9a\x73\x2e\xe8\xbd\x78\x88\xc8\x30\x5b\xa8\x5c\xc7\xa9\xb3\x53\x5d\x4e\x55\x9f\xd5\xf0\x13\x8d\xa2\x4c\x5e\xbf\x10\xbd\xc7\x05\x81\xc0\x5b\xb8\xc4\x3b\x74\x62\x31\x3e\x8b\x45\x36\x95\x8e\x4c\x70\xc5\xbc\xf6\xfd\x43\xd5\xf6\x1c\xf1\x8c\x9c\xf8\x5b\x87\xe1\x5f\xa8\xe5\x6a\x38\xdb\xc8\x2c\x20\x10\x78\x07\x97\xa8\xc2\x78\xd1\x78\xbc\xa3\xac\x98\x40\x56\xfd\x8e\x40\xf7\x5d\xa3\x57\xf1\x2b\xd7\xd7\xf0\x0d\x57\x27\x93\x19\xb9\x0e\xca\x1f\x8e\x87\x79\xe2\x41\x20\x50\x05\x97\xa8\x46\x27\x98\xcf\x47\x56\xb3\x4d\x99\x8a\x99\x83\x8d\x57\xcf\x28\x36\xed\xea\x02\x2e\x8f\x2f\x2a\x53\x65\xfc\x7e\xf3\x55\x34\xb5\x54\x88\x15\x02\x81\x6a\xb8\x44\x0d\x3a\xc1\xf5\x59\x62\x6d\xbf\xaa\x7a\xc0\x94\x1c\xc7\x77\x8b\xcc\xda\x44\xb7\x5a\x79\x7c\x5f\x82\xa4\xb2\xca\x42\xf6\x40\x2b\xef\x99\x06\x04\x02\x35\x70\x89\xf7\x18\xef\xc1\x31\x87\x6b\x09\xfe\x20\x29\xc9\x2a\x10\x6c\xc6\xf9\x7d\x75\x72\xed\x53\x46\x79\xa0\x93\xe5\xfd\x49\xb6\x57\xe9\x89\x8c\xd7\x8e\x56\x05\xef\xe1\x12\xb5\xe8\x44\x29\x3e\xb4\x43\x9e\xf5\x79\x92\xbf\x32\x51\x25\xea\x73\x52\x51\x0a\x35\x5d\x8e\x72\x55\x09\x5e\xc4\x85\xb3\x8b\x6d\x33\x6d\x47\xc7\xcc\xda\xbf\x7b\x58\x77\xd2\xef\xf0\xc4\x78\x58\x77\xd6\xbd\x22\x17\xef\x4e\xb8\x58\x45\x48\x65\x56\x26\x49\xb7\xfe\x37\x5a\xf3\xa7\x97\x56\x8a\x0b\x3c\x88\x12\xe3\xd9\x24\x5e\xb6\x1f\x6b\x9a\x35\xb4\xcd\xa0\xce\xca\x9a\x36\x9a\xcc\xbc\x2e\x52\x5b\x37\xfb\x64\x40\x3e\x4c\xcb\x59\x63\x47\xea\x36\xcd\x94\xf0\xb4\xee\xf1\x67\x65\x60\xd0\x33\xc6\xf6\x2f\x2c\xbf\xea\x73\x3d\xbb\x2a\x58\x62\xbc\xaa\xed\x4c\x1a\x1f\x5f\xce\x7e\x6e\xd5\xe1\xfd\x2d\xd5\xe7\xb2\xc4\xb1\xa6\x01\xc0\x83\x3d\x37\xdc\xc1\x9d\x44\xb6\xa5\x64\x8b\xc0\xa4\xeb\x1b\x14\x04\xe5\xf5\xbd\xbd\xf3\x61\x89\x67\xca\x66\x82\x4e\x8f\x1c\x6b\x5a\x35\x5b\x86\x8d\x8f\xc8\x27\x12\xcf\x8b\xbf\x56\x6a\xdc\xa7\x63\xfd\x99\xa2\x4f\x5c\x39\xda\x24\xb5\x99\xdb\x99\x87\xdf\xe9\xfd\xf1\xdf\xbc\xdd\x0a\x2c\xae\xcb\x21\x6c\xf7\x4d\x71\xdf\x10\x23\x3f\xfa\xd2\x53\x90\x1b\x13\x23\xbc\x8d\x90\xe7\x22\xad\x3f\x30\x7c\x3f\xfe\x2b\xe7\x79\x9f\xee\x8e\x08\xeb\x14\x71\x56\x4e\xb5\x69\x04\xe0\x05\x6a\xf3\xd3\xce\x79\xe6\xde\x70\x33\x2f\xc6\x61\x39\x8d\x54\x27\x0e\x3a\xd6\x94\x0b\x41\x12\x9d\x40\x26\x19\x90\xc5\xa8\x98\x01\xfd\x36\x5d\xbd\xec\x7e\x7b\x40\xea\x05\x5e\x96\x7d\xaf\xe8\x53\x8d\xa0\x43\xdf\xff\x3d\xac\x3b\x69\xab\xfe\x39\x92\x7d\x40\xdf\x29\x54\x10\x06\x4a\x4e\xdf\xea\x1f\x7a\x13\x5b\x32\xbd\xa5\x2b\x4e\xb6\x5b\x65\xa1\x1a\x9b\x75\x32\xd4\x21\xe1\x52\xd7\x30\xf1\x3f\x07\x81\xc0\x07\xb8\xfb\x5d\x1d\x3a\xf1\x51\xeb\x3a\x15\x14\x95\xe1\xcf\x6e\x6e\xc8\x3a\x11\xa7\x62\xc9\x6c\x50\x6a\x2b\x46\x7f\xc7\x74\x9f\x8a\xc1\x7d\x3b\x3c\xf7\x12\x04\x02\x75\x70\x89\x7a\x74\xc2\x63\x50\x50\xb0\x28\x93\x96\xb7\x3e\x3e\xf1\x14\xe8\x4f\x75\x35\x7f\x7d\xa8\xae\x2d\x55\xb5\x86\xe3\x99\xe5\x96\xd7\x5e\x0a\x13\x04\x02\xf5\x70\x89\x06\x74\x22\x39\x76\x6c\xd7\x54\x9d\x45\x32\x1b\x24\x46\x2c\xdd\xe3\xe1\xd6\xfa\x80\xd4\xc3\x37\x6c\xf8\xda\xf4\xd8\xbe\xa8\x87\x7e\xf4\xe8\x92\xae\x01\x2e\xd1\x88\xb1\x6c\x3f\x1c\xa4\xcf\x69\xbd\xef\x9c\x13\x45\x2d\xc6\x5d\x16\x4f\x3d\xb1\xf3\x7e\x93\xf4\x67\x0f\xb3\x5d\xe1\x59\x4a\x9d\x41\xe7\xa3\xc3\x4c\x23\x5c\xa2\x09\xe3\xdd\x1d\x17\x82\x17\x45\x7b\x74\x2b\xae\xa4\x54\x15\xb7\xb0\x79\x34\xef\xd7\x81\x44\x4f\x5e\xfc\x32\x4b\xcf\x13\x38\xfc\xf0\xfd\x33\x12\x02\x81\x26\xb8\xc4\x47\x74\x22\xc5\x40\x39\xfc\xa9\xff\x55\xf9\xa0\x92\x29\x23\xe5\x6e\x03\x6e\xd1\x8b\x6d\xc6\x82\x7b\x2a\x1d\x9d\xfa\x7c\x38\x5d\xdb\xe7\x19\x20\x10\xf8\x08\x97\x68\xc6\x38\x1e\x53\x91\xaf\x47\x04\x24\x02\x55\xda\x7a\xf3\xaa\x78\x7c\x9f\xa4\x9a\xf1\xcf\x66\x57\x2a\xac\x5c\x48\x78\x25\xd5\x5b\x62\x42\x04\x81\x40\xf3\xdf\x2d\x07\x4e\x3a\xde\xfc\x29\xa2\x16\xf4\xf1\x9c\x1a\x2d\x6c\x7e\x73\x53\xfa\xeb\xed\xbd\xf2\x85\x4f\x8e\x9f\x82\xb3\xf1\xac\x86\xf6\x0d\xd5\xc8\xc4\xc2\xc2\x71\x1b\xba\x55\x8e\x8a\xa8\x05\xee\x94\x5b\x31\xbe\x32\x41\xbb\x28\x32\xce\xd4\xac\x45\x94\x9a\x27\xd9\x34\xea\x77\x9b\x2b\xf2\x5b\xec\xc8\xdb\x58\x4d\x96\x91\x77\xc1\x0a\x9f\x72\xd5\x21\x10\x68\x85\x4b\xb4\xa1\x13\x87\x43\xf6\x3d\x04\x73\x81\x07\x7a\x06\xba\xef\x8a\x85\x8d\x7f\x20\xc3\xee\xf3\xd5\x04\xd6\xe1\xfd\x2a\x70\x2c\xb9\xa6\xe4\x2a\x00\x81\x40\x1b\x5c\xa2\x1d\x9d\xf8\x25\xe3\xc9\x2a\xac\xd5\xdf\x49\xe4\x6b\x9f\x6e\x31\xc5\x59\xd0\x24\xd5\x70\xe6\xfa\x6f\x50\x97\x71\xcf\xfa\x56\x02\x43\xbe\x36\x04\x02\xed\x70\x89\x4f\x18\xab\xd1\x6d\xae\xae\x00\x3d\x7b\x30\x75\xd3\xac\x8a\x87\x88\x48\xb7\x51\x40\x6e\x13\xd4\x58\xd1\xe9\x68\x75\x95\xeb\x7f\xdc\x72\x06\x02\x81\x4f\x70\x89\x0e\x74\x82\xf8\x95\xc7\x48\xe9\x8d\xf5\x9e\x0d\xd2\x30\x5f\x9c\xec\x5e\x3b\xc7\xca\x28\x02\xb6\xb8\x29\xc6\xb8\x2a\x19\x2d\x52\x06\x69\x6b\x08\x04\x3a\xe0\x12\x9d\x18\xb7\x48\x37\x88\x06\xbf\x7d\xd1\x0f\x43\x91\x46\xea\xd2\xb5\xcd\x3e\xee\xdd\x0a\x6a\xd5\xba\xf9\x45\xc6\x61\x59\xa9\x84\xad\xb0\x5e\x1c\x02\x81\x4e\xb8\x44\x17\x3a\x11\x45\xa5\xee\xaa\x23\x1f\x60\x15\x3b\xba\xf5\xeb\x3d\xea\xcd\xad\x39\x9d\xf7\xe7\x2f\xad\xdc\xc9\x32\xf9\x9e\xe0\xd2\x4e\x84\xc3\x0e\x81\x40\xd7\xdf\x15\xd1\x49\x67\xe2\x3f\x45\xf4\x19\x7d\x3c\x59\xdb\x7c\x6b\x79\x58\x31\xa9\x2b\xf5\x61\xc9\x9f\x42\xae\x9a\x51\x4c\x7b\xe0\x7f\x31\x75\x59\x24\xe7\xbf\x62\xf5\x6e\x6a\xc0\x1d\x02\x81\xcf\x70\xa7\xdc\x8d\x4e\xe8\x25\x6e\x33\x4d\xab\xb4\x9c\x3b\x6b\xa0\xf9\x8a\x30\xfe\x5a\x76\xd7\x4e\x37\xf9\x88\xf6\xa5\xb2\x28\xda\xb3\x5c\xc4\x49\x74\x34\x10\x08\x74\xc3\x25\x7a\xd0\x09\xf3\x81\xf4\x53\xdb\x2a\xcb\x0f\xec\x76\x8b\x96\x77\xac\x1a\x79\xbe\x58\xbd\x9a\x7a\x4b\x45\x09\x2d\x67\x36\x3d\xc7\xd6\x2d\x3d\x5a\x53\xf7\xc0\x25\x7a\xd1\x89\xa4\xe1\xcb\x04\x0b\x3d\xa9\xdf\x2a\x14\x78\x2e\x3c\xee\x5f\xde\xee\xae\xa8\xa1\x27\x31\xc9\xd8\xa3\x5f\x07\xd5\xc3\x27\x23\x4d\x21\x10\xe8\x85\x4b\xf4\x61\x9c\xec\x4c\xc7\x4b\x7e\xcf\x89\xa5\x8b\x2b\x14\x2f\x20\x87\xb9\x2e\xe2\x72\x8f\x59\x2f\x15\x4b\x52\x3b\x79\x55\xfa\xbe\xdc\x1e\x3c\x3a\x65\xf7\xc1\x25\xfa\xd1\x09\xde\xdb\x13\x21\x0c\xf6\xf7\x72\x2d\x66\x05\xfb\x9e\xe3\xbc\x67\x14\xa5\xf1\xee\xfe\x36\x9c\x8d\x4c\x0b\x71\xdf\x00\x4d\x02\x08\x20\x10\xe8\x87\x4b\x0c\xa0\x13\xd4\x31\x58\x8a\x74\x58\xf9\x9b\x53\xab\x6f\x97\x51\x55\xf1\xc1\xe4\x3c\x81\x37\x3d\xcc\x26\xf2\xb1\x07\x27\xd4\x04\x24\xda\x28\x21\x10\x18\x80\x4b\x0c\x62\xdc\x2f\x9c\x57\xeb\x48\x58\xf9\x7a\x6e\x37\xff\x54\xa3\xd5\xf0\x93\x97\x5c\x45\x2e\x91\x6e\x1a\xef\x83\xf6\xd9\xbe\x79\x14\x67\x37\x4a\x41\x20\x30\xf8\x77\x45\x74\xd2\x1a\xf5\x4f\x11\x0d\xa1\x8f\x67\xc0\x8e\xde\xc9\x87\x8b\x58\x65\xdb\x13\x9c\xfa\xa9\x2a\x3e\xbf\x81\xdd\xe0\x86\x87\x9c\xdf\xac\x36\x0e\x1e\x53\x9e\xdf\x38\x0d\x81\xc0\x10\xdc\x29\x0f\xa3\x13\x74\xa3\x79\x85\xba\x7e\x1a\xe3\x95\x6e\x66\x35\x56\x2d\x23\x33\xd9\x67\xda\xca\x62\x80\x72\xf0\x81\xf5\x93\x88\x54\x83\x97\x8a\x10\x08\x0c\xc3\x25\x46\xd0\x09\xd7\x03\x3c\x15\x41\x02\xd6\x10\xac\x17\x2b\xba\x14\xbe\x0d\x3e\x1f\x13\x09\xde\x5d\x6c\x36\xbc\x3c\x57\x60\x40\x28\x8f\x44\xca\x41\x20\x30\x02\x97\x18\xc5\xf8\x36\xd7\x0b\x96\x1a\x93\x83\x4d\x79\x4a\x85\x74\xc4\x9a\xc7\x3d\x8b\xd8\x1e\xd7\xde\x17\xc2\x0d\xe4\x62\x1a\x66\x06\xe2\xcd\x93\xa4\x10\x08\x8c\xc2\x25\xc6\xd0\x09\xa3\x2a\xf1\x40\x96\x46\x17\xc1\x96\xe0\x1b\xb6\xb8\x5a\x60\x47\xf1\x4e\xeb\x8f\x52\xd3\x75\xab\xcb\x1c\x97\x1f\xfc\x50\x3c\x7b\xb4\x10\x1a\x83\x4b\x8c\x63\xd4\x29\x4b\xc9\x45\xfe\x75\x91\xfa\xfd\xfb\x1b\xc6\x7e\xf2\xef\x99\x96\x46\x7a\x6d\x77\x7d\x23\x67\xa2\x03\xbc\x2f\x67\xb0\x5d\x25\x86\x40\x60\x1c\x2e\x31\x81\x4e\xc4\x73\x6f\x48\xa8\x7e\xd9\xd4\x5d\x27\x7f\xee\x6c\x2f\x86\x3c\xb4\x8b\xb8\x0f\x89\x73\x9e\x77\xd5\xde\xed\x3f\x43\x39\x11\x73\x74\x26\x9a\x80\x4b\x4c\x62\x10\xad\xd6\x9f\xaf\xee\x95\x5d\x21\xe0\xf4\xa5\xf7\x12\xe1\x53\x31\x28\xf4\x0a\xd8\xfd\xe1\x30\xb3\xdb\x74\xd8\x03\x44\x8c\xdd\x84\x40\x60\xf2\xef\x8a\xe8\xa4\xab\xb7\x3f\x45\x34\x85\x3e\x1e\xa6\x58\x4f\x29\xc2\x80\x2f\x46\x8f\x84\xed\x24\xd6\xce\x97\x6b\x5c\x5c\x36\x12\xd9\xa2\xfc\x70\x26\xd7\xe2\xa7\xce\xf4\x73\x53\x1b\x08\x04\xa6\xe0\x4e\x79\x1a\x9d\xc8\x07\xf8\x81\x2e\x11\x15\xd2\xbb\xba\x54\xf8\x77\x2a\xdc\xe5\x0c\x55\x7b\x71\x90\x7d\xfe\x08\x33\xfa\x77\x6f\xf7\x08\xd6\x8e\xae\xc5\xa7\xe1\x12\x5f\xd0\x09\xd6\xc5\x1e\xbb\xb3\x25\x7d\xa1\xa4\x22\x71\x9a\xf2\xcd\xc6\xd6\xc6\xce\x8b\x8c\x29\x0f\xcf\x3e\x16\xf1\xe1\xf7\x60\x4e\xba\x7c\xb4\x4a\xf9\x02\x97\x98\xc1\x78\xcc\xc5\xf9\xc8\xb9\x48\x44\xb1\x38\x80\xa6\xef\x45\xed\xae\x41\x61\x1c\x23\xfb\xa3\xef\x2f\x44\xaa\x0c\xc2\xae\x9f\x5e\xa9\x99\xe1\x87\x40\x60\x06\x2e\x31\x8b\xf1\xc2\x05\xfe\xf7\x09\xd7\xbe\x07\xcc\x6b\xc4\x08\x0e\x85\x86\x4d\x9d\xb7\x71\xbb\xcf\xdc\xa5\x68\x9a\x5e\x32\xf2\xee\x58\x15\x5d\x75\x86\x40\x60\x16\x2e\x31\x87\xf1\xda\xc8\x6b\xaa\x3b\x37\x4b\x5f\x1e\xf4\xbc\xb9\xc6\x4c\xf4\xae\xb0\xcd\x6e\x20\xf1\x30\x22\xac\x54\xcd\xf1\x77\xd4\xed\x2a\x0d\x2c\x14\x04\x02\x73\x70\x89\x79\x74\x82\xfc\x81\x3b\xf6\xa3\x0e\x1b\x49\x77\xfc\x95\xc3\x32\x9e\x7c\x11\x5c\xbf\xfc\xab\x25\x99\x39\xd9\x2d\xc4\xcc\x04\xd4\x5d\x24\x08\x08\x04\xe6\xe1\x12\x0b\xe8\x84\x1a\xd3\xda\x65\x07\xad\x77\xb2\x11\xa4\xa8\x6f\xc2\x28\x8d\x4b\xd2\xeb\x64\xf9\x7b\xa7\x8b\x4f\x3d\x62\x33\xb7\x98\x8e\x7f\xce\x03\x81\xc0\xc2\xdf\x15\xd1\x49\xf7\x35\xfe\x14\xd1\x22\xc6\xc9\x37\x19\xb7\x3a\x34\x49\x82\xec\xa7\xd5\xf4\xf3\x7c\xa7\x5b\x7a\x74\xc4\xa5\x36\xaf\x19\xa8\x2f\x6e\xb2\x8d\xeb\xcd\x66\xbc\xa4\x82\x40\x60\x11\xee\x94\x97\xd0\x89\xe5\xd8\x69\xe2\x7b\xbc\x1b\x8f\xde\xcd\xd7\x33\x5b\x2c\x48\xbc\x8d\x8b\xc2\xab\x6a\x78\xf7\x82\x64\xe1\x3e\xdf\xbb\x48\xe9\xee\xa3\xd3\xc4\x12\x5c\x62\x19\x9d\xc8\xbb\x68\x88\x7b\xd7\x29\xa1\x9d\x58\x78\xf8\x01\xa1\x43\x04\xe9\x0e\x8b\x13\xf7\x9d\x15\xfb\x89\xb2\x22\x2a\x56\xed\x6b\x67\xf1\x21\x10\x58\x86\x4b\x7c\xc5\x78\x90\xcb\x41\x02\xd6\x7a\xb4\x79\xda\x9d\x97\xb0\xc2\x2a\x5e\xf7\x73\x62\x49\x8c\x0b\xae\x68\xca\x7e\x28\xa3\xbb\xb3\x86\xa8\x10\x83\x40\xe0\x2b\x5c\x62\x05\x9d\x60\xb9\xe5\x93\x94\xdd\xe8\x27\x60\x9b\x57\x66\xe7\xdb\xc6\x3f\x4c\x10\x13\x1e\x64\x2c\x65\x36\xf0\x65\xeb\x6b\xe4\x65\x9a\xef\x6e\x10\x08\xac\xc0\x25\x56\xd1\x09\x0b\x32\x1d\x1f\xfa\x9b\xad\x3c\xb8\x1f\x79\x41\x8f\x8a\xb5\x60\x65\xe1\x7c\x80\x3c\x51\xe6\xca\x05\x32\x7d\xb7\x8e\x8b\x0e\x47\xa7\x89\x55\xb8\xc4\x1a\xc6\x17\x3f\x6e\x4f\x9e\x21\xd6\xe4\x3c\xfb\xb5\x97\xf6\x3e\x55\x52\xd1\x6b\xa6\xe8\x4c\x81\x61\x05\xe5\xd1\xe7\x2c\xac\x2c\x11\x3f\x8d\x8f\x4e\xd9\x6b\x70\x89\x75\x74\xa2\x0d\x24\x3f\xb0\xa4\x1a\xb7\xcf\xfb\xa9\x17\xdd\xd6\x43\x9c\x3c\x50\x9e\xb1\x59\x66\x91\x51\x60\x2a\x27\x92\x17\x2f\xe6\x6b\x02\x81\xc0\xfa\xdf\x15\xd1\x49\x77\xfc\xfe\x14\xd1\x37\xf4\xf1\x98\x4d\xce\x77\xac\x7e\x0a\x3b\xc7\xdb\x9a\xbd\xd2\xa5\x97\xcc\xe4\x55\x6b\x1d\x8b\xaf\xf0\x53\x5c\x9a\x91\x33\xbe\xc3\xec\x8a\x13\x04\x02\xdf\xe0\x4e\x79\x03\xe3\x9d\x0e\x8a\x0b\x3c\x63\x78\x97\x28\x32\x28\x24\x1c\x67\xd6\x48\x50\x14\xdd\x58\x82\xc0\xd8\xbd\x17\xa5\x7b\x3f\x51\x6f\x7c\x6f\xba\x42\x20\xb0\x01\x97\xf8\x8e\xf1\x66\x4a\x7b\x9c\xf7\x43\x97\x56\x77\xb3\xea\xe8\x69\x7a\xc8\x8b\xe2\xdc\x35\xac\x64\x9d\xda\x80\xfd\x99\xe1\x94\x7e\xad\x96\x03\x47\x08\x04\xbe\xc3\x25\x7e\x60\xbc\x5f\x43\x76\xfa\xe1\x76\xc7\x2a\x9d\xcc\x1b\xdc\x83\x50\xde\x33\x93\x7a\x6d\xc4\x09\x8c\xa7\x37\xe3\x82\xb7\x1a\xac\x54\x47\x98\xe5\x21\x10\xf8\x01\x97\xf8\x89\xf1\xb5\x06\x86\xd1\xcc\x44\xbc\x43\x89\xb4\xa1\x1f\x97\x48\x1c\x11\x4d\x8e\x58\x1c\x4a\x64\x2a\x1b\x57\x29\x86\x49\xb5\x0a\x48\x75\x45\x20\x10\xf8\x09\x97\xd8\x44\x27\x6c\x9d\x66\x27\x33\xa9\xf6\x09\x8d\xda\x1e\x2c\x7c\xa6\x27\x49\xe9\x9f\x7c\xce\x15\xe5\x63\x54\x2d\x42\xdc\xc3\x2e\xef\xad\xcd\x08\x81\xc0\x26\x5c\x62\x0b\xe3\x7d\x55\xca\xd1\x8a\x4f\x63\xe9\x06\x8b\x8e\x42\x3e\x4a\xc5\xb1\x7e\x0f\x7b\x35\x17\x76\x6e\xed\xcb\xe8\xae\xce\x60\xa5\xe1\x71\x1d\xad\xb5\xb6\xe0\x12\xbf\xd0\x89\x96\x53\x26\x63\xcd\x14\x66\xdc\x6d\xaf\x9f\xa9\xf7\x3e\x8a\x69\x5f\x94\x8c\xd3\x4a\xca\xdd\xf6\xa5\x13\xe0\x5a\xea\x83\x06\xb4\x21\x10\xf8\xf5\x77\x45\x74\xd2\xbd\xf0\x3f\x45\xb4\x8d\xf1\x24\xed\xe5\x02\x5e\xe4\xc5\x39\xa3\xde\x1b\x9a\x74\x73\x91\x17\x38\x0b\xd8\xb9\xe8\xc8\x17\xb8\x45\x66\xdd\x36\x5a\x7a\x63\xc2\x8f\x2e\xc9\xb7\xe1\x4e\x79\x07\x63\xf7\x8b\xb9\xbb\x9e\x74\x9b\x6c\xf2\xca\x48\x7c\xd1\xd3\x8d\x8f\x1f\x71\xeb\xbc\x9b\xa2\xdf\xfe\x46\xdc\xb8\x23\x38\x1a\xb8\x9c\x61\x0c\x81\xc0\x0e\x5c\x62\x17\x9d\xb0\x6e\xbe\x43\xf6\xf0\x1b\x13\xb9\x8e\x0a\x19\x67\x1c\x6e\x2e\xdf\x59\xca\xc9\x2c\x37\x2f\xbd\x59\xb6\xac\x85\x27\x5b\x7a\x8f\x14\x20\x10\xd8\x85\x4b\xec\xa1\x13\x9f\x8d\xf2\x5a\x0c\x74\x26\x1b\x0a\x75\x34\xca\xc5\xca\x03\xa5\x84\xf3\x57\xcd\x6b\x3b\x62\xbf\xff\x88\xf8\x98\x6b\xe7\x64\x07\x40\x20\xb0\x07\x97\xd8\x47\x27\x02\x5f\xdf\xd6\xca\xb9\xf5\x26\x44\x85\x02\x55\xdc\x86\x3b\x62\x2e\x5a\xd4\x92\x38\x45\x65\xaf\x9b\xaa\xf9\x20\x54\xd8\xf6\x09\x0b\x04\x02\xfb\x70\x89\x03\x74\xa2\x32\x51\xc1\xfd\x52\xb6\x6f\x5f\xd9\xa7\x65\xa9\x9d\xe8\xca\xa7\x02\x1a\x89\x04\x07\xcf\x6b\x22\x76\x1d\xd3\x1a\x24\x14\x3b\xcd\x21\x10\x38\x80\x4b\x1c\xa2\x13\xe3\x17\x67\xce\x6e\x9e\xe2\x08\x7a\x84\x5b\x9c\x6c\xb3\x9b\x2f\x1d\x5f\x3e\x22\x64\x2f\xd7\x30\x60\x39\x74\x68\xdb\x3e\x11\x7d\x74\x26\x3a\x84\x4b\xfc\xc6\x78\x95\xfe\xc7\xcb\x80\x83\xaf\xa3\xa6\x5e\xd0\x2a\xaf\x7a\x9b\x12\xd8\xc4\x7a\x77\xaf\x60\x31\x6d\x4d\xd8\xa5\x98\x01\x4f\xc1\x9c\x00\x02\x81\xdf\x7f\xf7\xb0\xee\xa4\x14\x3d\x8c\x87\x75\x36\x41\xfb\x42\x61\x2f\x83\x9a\x3d\xa8\x55\xe6\x32\xe7\xbf\x15\xe9\xcc\x57\x77\x9e\x22\x6e\x7d\xf0\xfe\x0e\xc1\xad\x70\xf7\x9f\x64\xc7\x13\x6d\x9b\x15\xd3\x84\x2a\x01\x2a\xbd\x9a\x37\x07\x81\xe6\xb7\xa5\x02\x93\x68\xe5\x9b\x18\x03\xcf\xc8\xa2\xee\xd2\x91\x8b\x15\x4e\x1e\x6b\x6a\x92\xec\xaf\xde\x6a\x51\xcd\x37\x68\x96\xf0\xd3\x6c\x62\xeb\x81\x76\x43\x0f\xc9\x73\x2a\x8d\x62\x35\x43\x26\xd3\x29\xe7\xa2\x37\xc7\xb3\x04\x0d\x4d\xb1\x48\x0f\x5b\x94\xa5\x4b\x71\x50\x95\xc1\xdf\x48\x55\xe6\x08\x67\xc6\xce\x54\x6d\xe4\xee\x0d\x1b\xb7\xf0\xc4\x86\x1c\x6b\x2a\x97\x14\xbc\xbe\x96\x48\x7c\x69\x15\x62\x9e\x6a\x63\xfb\x38\x4c\x36\xe3\x4c\x75\x66\x60\x4a\xb2\xb6\x8b\x69\xe9\x72\xf1\xcd\xcc\x63\x4d\xc5\x92\x46\x0f\x5d\x98\x7f\xa4\x29\x7e\x17\x0a\x92\xbf\xe3\xb7\x69\xfe\xf9\xc5\x9c\x80\x70\x62\x82\xba\xfc\x8b\x97\x6e\x0f\x6e\xe0\x1f\x6b\x1a\x7e\x37\x65\x36\x85\xa0\x5a\x04\x7a\x97\x90\x56\xf8\x86\x78\x5a\xe7\x6d\xba\xe5\x1a\x11\x73\x79\x6e\xc4\xa9\xe1\xd3\xd9\x22\xc7\xbf\x30\x88\xfa\xa9\xe8\x45\xb5\x14\x9b\x0d\x5c\xe5\xb8\x1d\xcc\x99\xfc\x2b\xb7\x52\x23\x6f\x2f\x69\xfb\xdc\x8f\xd1\x74\x41\x9a\xfe\xf8\xe5\xa0\x76\xbc\x7f\xb7\x55\xff\x7b\x24\x03\x91\x18\xe9\x74\x9b\xb6\x31\x72\x5c\xf7\x2b\xd4\x49\x0f\xb3\x27\xe5\x56\x7e\x3b\x9d\xf1\x38\xf4\x38\x20\xc6\x0d\xfc\xc0\xeb\xa5\x4d\xe5\xb8\x25\x0f\x81\x28\xb8\xe9\x74\x20\x12\x23\x9f\x2e\xe7\x9d\x07\xb7\x4b\xea\xcc\xda\x41\xbc\x78\x84\x5b\xd9\x7b\x23\xb1\x1b\x51\x7c\x34\x4b\xdf\x6c\x56\xc8\x28\x1b\xd8\x0f\xcd\x25\x20\x10\x05\x37\x9f\x0e\x44\x62\x24\xd4\x65\x28\xd5\xe3\xc7\x76\xb0\xbf\x59\x08\xa7\x4f\x25\x13\xed\x5c\xef\xbf\x7c\xc1\x68\xcf\x7b\x4b\x33\x7c\x43\x97\xd8\x7c\xf8\x93\x3a\x04\xa2\xe0\x26\xd4\x81\x48\x8c\x8c\xba\xc6\xba\x78\x03\x7c\x82\x34\x7b\x16\xee\xa8\xd0\xe4\x6b\x74\x19\x99\xf3\x67\x5d\xca\x2b\xb5\x9d\xb1\x56\x19\x85\x7f\x9f\x7e\x7f\x05\x02\x51\x70\x33\xea\x40\x24\x46\x4a\x9d\xfa\x42\x4a\x94\x51\xe2\xe6\xe5\x83\xab\x6b\x59\x6d\x43\x4b\x2e\x13\x39\x4e\x55\x8c\x25\x54\x38\xc5\xea\x28\xa7\xa9\x81\x20\x21\x08\x44\xc1\x4d\xa9\x03\x91\x18\x39\x75\x95\xc9\xdc\x5c\xc5\x09\x85\x8c\xdf\x63\x4d\x78\xd9\x83\xb8\xd7\xbc\xe7\x27\x33\x53\xbb\x54\x84\x12\xa3\x86\xb3\x36\x4a\x63\x8e\xe6\x01\x37\xa7\x0e\x44\x62\x24\xd5\x11\x92\x1a\xd8\x59\xee\xca\x31\xcb\x76\x9f\xba\xb4\x97\x1e\xa6\x24\x65\x23\x3d\x5a\x2a\x4d\x1c\xe2\x52\xee\x12\x5e\x96\x32\xce\x0c\x81\x28\xb8\x49\x75\x20\x12\x23\xab\xee\xfd\x70\x2d\xb7\x89\x97\x07\xde\x66\xa1\xe5\x0d\xcd\x34\x29\x21\xd5\x33\xcc\xc0\x5e\xb0\x90\x0c\x29\x54\x3e\x5d\xe0\xb1\xcf\x08\x81\x28\x98\x59\x75\xff\x14\xd3\x49\xc7\x9d\x7f\x8a\x09\x23\xad\x2e\xac\xee\xcc\x85\x86\x3b\x3d\x24\xee\x64\xa6\x3e\xc4\x8e\xb5\x2f\xd4\x6a\xf1\xcb\xbf\xd7\x46\x52\x38\x64\xaa\xf1\xca\x9d\x95\xc1\x87\x40\x14\xdc\xb4\x3a\x10\x89\x91\x57\x47\x8c\xa3\x5b\x50\xe4\x04\x38\xbd\xb0\x4e\x90\xa7\x7b\x10\xec\x80\x4f\x2d\xf0\xa8\x92\xf9\xf7\x13\x03\x4b\x8e\x47\x5a\xae\x2c\xfc\x10\x88\x82\x9b\x57\x07\x22\x31\x12\xeb\x00\x43\x8d\x4b\x8a\x0b\x93\xf2\x69\xa0\xd8\xb9\x52\x6e\x3c\x35\x11\x47\x63\x82\xa0\xc1\x20\x56\x6c\x1e\xf9\x83\xfb\x36\xb5\x08\x08\x44\xc1\x4d\xac\x03\x91\x18\x99\x75\x3f\x06\xd8\x2f\x87\x97\xab\x7e\xc9\x11\x7c\xc8\x1a\x7c\xc0\xb7\xb2\xa1\x10\x98\x6d\x47\x45\xc1\x9c\xd0\x1e\xfc\xad\x81\xe7\x8b\x15\x04\xa2\xe0\x66\xd6\x81\x48\x8c\xd4\x3a\xca\xcf\x6a\x2e\xeb\x2a\x5d\x69\x15\x19\x1f\x5e\xb7\x44\xef\xa7\xd5\xc4\x58\xb1\xaa\xf6\x3f\xf8\x38\x30\x69\xe5\xa6\x3b\x96\x6d\x04\x81\x28\xb8\xa9\x75\x20\x12\x23\xb7\x4e\x03\xd9\x84\xa8\x5f\x1f\x77\x9e\x20\xef\x60\x26\xee\xb2\x9b\x73\x71\x6a\x59\x51\x36\xb3\xef\xf7\xf4\x36\x5a\xc5\x2b\x12\x63\x81\x40\x14\xdc\xdc\x3a\x10\x89\x91\x5c\xc7\x99\xca\xb0\x69\x99\xf0\x4b\x8d\xc8\x84\x22\xe0\xa5\x42\x8f\x31\x63\x3b\x8d\x61\x6b\x76\x12\x0e\x4b\xcb\xe2\x72\xd0\x6d\x47\x1d\x08\x44\xc1\x4d\xae\x03\x91\x18\xd9\x75\x8d\xbd\x23\x97\x66\xb0\xdf\xf6\x61\x73\x1a\x67\xaf\x4f\xd5\xbc\x5f\xb6\x27\xb7\xd6\x62\xb2\xc1\xdd\xce\xef\x51\x8b\x60\x4a\x17\x83\x40\x14\xcc\xec\xba\x7f\x8a\xe9\xa4\x33\xf3\x3f\xc5\x84\x91\x5e\xe7\x51\xad\xc1\xdf\x35\x1c\x4e\xbf\x35\x49\x4e\x18\x2d\xc3\xa8\xf4\xcb\x4f\x3f\x78\x27\x4b\xbe\x95\xc5\xb9\xbc\xdc\xb5\x20\xe1\xe8\x28\x05\x37\xbd\x0e\x44\x62\xe4\xd7\x69\x5c\x57\x3f\x48\x28\x67\xaf\xc9\xe3\x86\xda\x73\xc7\xec\x0e\x27\xb7\xa7\x7b\x5b\x0b\xb5\xec\x99\xfc\x50\xab\x51\x72\x94\x47\xc5\x04\x37\xbf\x0e\x44\x62\x24\xd8\xe9\x1f\xa8\x90\xf9\x7d\x9c\xfd\x30\x51\x28\xa0\xbd\x15\x89\x8c\xe4\x17\x20\x3a\xbc\x9b\xf4\x92\xd8\x22\xfa\xeb\xf8\xa9\xad\x9b\xe2\x10\x88\x82\x9b\x60\x07\x22\x31\x32\xec\x4a\xac\xc1\x89\x37\x16\x17\xbd\x8c\xf0\xa8\x32\x6e\xdb\x5e\x53\xb8\xf7\xca\x93\x31\x95\x3d\xbd\x23\x85\xc7\xf0\xd9\x68\xc9\xad\xa3\xa3\x2d\xdc\x0c\x3b\x10\x89\x91\x62\xc7\xf1\x08\x8b\x0f\xb7\xfd\x8b\x1e\xa2\x6d\xdf\x61\x3f\xa6\x85\x21\xcc\xee\x8a\xef\x73\x79\x6f\x16\x07\x23\x01\xad\xdd\xb3\xec\x17\x20\x10\x05\x37\xc5\x0e\x44\x62\xe4\xd8\x9d\xde\x58\xcf\x1d\xd2\x14\x5d\xe6\x6c\xe1\xad\xdc\x2e\x39\x20\x73\x7f\x94\x37\x5a\x40\xe5\x3d\x7f\x90\x17\xf1\x68\x67\xa9\xfd\x1a\x04\xa2\xe0\xe6\xd8\x81\x48\x8c\x24\x3b\xb2\xb8\x81\x1b\xb5\x95\xfb\x17\x17\xf9\x10\xad\x13\x8a\xb5\xd5\x65\x26\x19\x0a\x4c\xfb\x64\x9a\xfc\x2e\xa3\x17\xde\x06\x45\x69\x40\x20\x0a\x6e\x92\x1d\x88\xc4\xc8\xb2\xb3\xff\xe6\x55\x9d\x66\xb4\x5b\x3c\xdd\x64\xbe\x0a\x6a\xb3\x68\x51\x04\xaa\xa8\x99\x7c\xa1\x4d\x54\x09\xbb\xd9\x91\x98\x7c\xe6\x68\x1e\x30\xb3\xec\xfe\x29\xa6\x93\xd6\xae\xff\x14\x13\x46\x98\x5d\xb9\x1b\x83\x00\xdf\x3e\x7e\xa9\xf2\x4b\x4f\x4b\x02\xc4\xdb\xc5\x87\x9a\x2e\xb6\x53\xd5\xc1\xde\xbf\x33\x1f\x8b\x30\x0b\xe3\x5e\x82\x40\x14\xdc\x30\x3b\x10\x89\x91\x66\x67\x3f\x24\x7a\xff\xbc\xd2\xb2\xcf\x8b\x25\x69\x36\x1d\xd4\xf9\x31\xce\xed\x6e\x06\xaa\x67\xbd\xf4\xcf\x62\x52\xaf\x68\x07\xfe\xe0\x84\x40\x14\xdc\x34\x3b\x10\x89\x11\x67\x97\x4c\x43\xcc\xe6\xe8\x90\xec\x31\xbf\x94\x64\x61\x8c\x1d\xb7\xe5\xe6\xc9\x73\xd3\x5b\xfa\x39\xfd\x3d\xfa\x54\x1a\x35\x91\x70\x6c\x08\x44\xc1\x8d\xb3\x03\x91\x18\x79\x76\x7a\x81\x07\xf8\x4c\xf1\x0a\xe6\x89\x3f\x11\x01\x67\xf4\x5c\x8d\x6f\x7d\x76\xa2\xbc\x1b\x90\xd8\x7e\x3b\xcf\x46\xc8\x9a\x2a\x98\x03\x02\x51\x70\xf3\xec\x40\x24\x46\xa0\xdd\x4e\x81\xac\x16\xe1\xcf\xde\x32\x84\x5f\x79\x8e\x55\x5b\xa6\x68\xe0\xe4\xc8\x75\x03\x4d\x9d\x2e\xb1\xa8\xf6\x0b\xb5\x0d\xad\x4e\x10\x88\x82\x1b\x68\x07\x22\x31\x12\xed\xb6\xfa\x13\xbd\x62\xe7\x7e\x07\x94\x62\xa5\xe6\xf6\x29\x91\x56\x3c\x78\xda\x36\x28\xb2\x31\x2a\xa4\x5f\x2a\x94\x26\x89\xf3\x40\x09\x02\x51\x70\x13\xed\x40\x24\x46\xa4\x5d\xf9\x8f\x83\xa2\xb0\x0c\x56\x62\x5a\x16\xc3\x26\x29\xd9\x3a\xdb\xb6\xce\x4a\x1c\xaf\x2e\xe4\x2b\x46\x8b\x30\x19\xe0\xcc\x45\x73\x08\x44\xc1\x8d\xb4\x03\x91\x18\x99\x76\x79\x0a\xe7\xd7\x28\xb9\x3d\xd2\xbc\x43\x2a\x7c\xb4\xae\x2d\xe0\x06\x46\x90\x9a\x4a\xe7\x56\x31\x7a\xbf\x13\xaf\x2d\x27\x91\x51\x86\x40\x14\xcc\x4c\xbb\x7f\x8a\xe9\xa4\xab\xbb\x7f\x8a\x09\x23\xd4\x2e\x32\x94\x52\xdc\x09\x6f\xa0\xfb\x79\x77\xf4\x61\x30\xed\x70\x7b\xcf\x4d\xc9\xa8\xde\x8f\xb7\x38\x19\x77\x48\x6d\xa5\xd3\x01\x52\x08\x44\xc1\x0d\xb5\x03\x91\x18\xa9\x76\x1a\xa6\x52\x90\x4a\xb9\xbb\x01\xe5\xb4\xb1\x28\x4d\xe4\xcd\xbd\x01\x85\x9a\x6f\x42\xd6\x74\x55\xdd\x0a\x79\x04\x8d\xb1\x15\xfa\x10\x88\x82\x9b\x6a\x07\x22\x31\x62\xed\xae\x2c\x2e\x37\x4e\x37\x45\xd3\x2a\x68\x75\x12\xbe\xf5\x52\xff\x18\x74\x9b\xd5\xe5\xb4\x9c\xf3\xe0\xf4\x22\x25\x79\xac\xcc\xb6\x3d\x04\xa2\xe0\xc6\xda\x81\x48\x8c\x5c\x3b\x54\x3e\x78\xa0\x2e\x52\xc9\xb4\xd5\x22\x23\x59\x50\x2c\x4c\x45\xb6\x11\xf3\x8b\x51\x64\xdb\xb0\x97\xf0\xda\xc7\xf0\x28\xa6\xa3\x65\x1e\xdc\x5c\x3b\x10\x89\x11\x6c\x57\x74\x7a\x56\xbc\xb7\xe9\x45\x5c\xf8\xa3\x10\x96\x44\xd7\xd7\x1c\x19\xb1\xed\x65\x86\x8b\x35\xa6\xeb\x6e\x7e\x0b\x9f\x98\x4e\x11\x43\x20\x0a\x6e\xb0\x1d\x88\xc4\x48\xb6\x6b\x5c\x93\x30\xbd\xde\x1d\x72\x79\x92\x95\x62\x1f\x7f\x68\xad\x85\x27\x7c\xba\x0e\xc9\xfa\xcd\xf1\x54\x8a\x49\xa8\x0d\xff\x83\xa3\x79\xc0\x4d\xb6\x03\x91\x18\xd1\x76\xc6\x91\x6a\x08\x07\xd5\x45\x02\x7c\x99\x87\xcb\x3b\xbd\x46\x5f\x52\xcc\x55\x20\xf5\x04\xf1\x42\x46\x59\x92\x03\x2e\xab\x45\x3c\x08\x44\xc1\x8d\xb6\x03\x91\x18\xd9\x76\x55\x62\xd6\x9d\x7c\x81\xc9\x92\x77\x50\x8e\x42\xa2\x66\xae\xf2\x60\x9a\x9c\x7e\x80\x7a\xc2\xe0\x84\xf0\xba\x06\x9b\x7a\xb5\x20\x04\xa2\x60\x66\xdb\xfd\x53\x4c\x27\xdd\xff\xf8\xa7\x98\x30\xc2\xed\x0e\x99\x3f\xc5\xf3\xfb\xd3\x52\xd8\xc7\x8e\x57\xec\xe1\x3c\x4b\x75\x2b\x3d\x17\xd6\xe0\x12\x72\xfd\xee\x9a\x1b\xe9\xf2\xed\x50\x26\x08\x44\xc1\x0d\xb7\x03\x91\x18\xe9\x76\xfa\x97\x2b\x7f\x17\x16\x14\x4c\x0a\x34\x82\xba\xc9\xcf\x46\x0b\x26\x42\x5f\x7e\x11\x37\x5a\xdb\x18\xa6\x6d\xe3\xed\xaa\xd2\xa1\x87\x40\x14\xdc\x74\x3b\x10\x89\x11\x6f\xc7\x4e\x38\x91\x34\x35\xc9\x4a\x5e\xdf\xc9\x1c\x63\x6f\xb3\xa9\x18\xec\x32\x59\xb3\xfb\xa9\x3d\xdf\x44\x40\x95\xf1\x3c\x29\xf1\xd1\x85\x3b\xdc\x78\x3b\x10\x89\x91\x6f\x87\x7b\xef\xcd\xab\xaa\xe1\xea\xfe\x88\x64\xd7\x28\x99\xa2\x8b\xd2\x76\x2e\x85\x2c\x1a\x9d\x99\xcd\x76\x87\x61\xbb\xac\x6b\x59\x28\x08\x44\xc1\xcd\xb7\x03\x91\x18\x01\x77\x84\x60\xb2\x40\xd5\x8f\x73\x13\x97\x64\x32\x55\x45\x6e\x77\x22\x66\x5a\xe3\x6a\x53\x4c\xde\x6f\xef\xd6\xa5\x05\x47\x1a\x87\x9d\x83\x40\x14\xdc\x80\x3b\x10\x89\x91\x70\x17\xf2\x8d\x96\x21\xa4\x4f\x29\x23\x3d\xee\xf5\x3b\x56\x66\xc6\xce\x43\x51\xc9\x62\xec\x04\x06\xbb\x37\x81\xbe\x1c\x74\x67\xcf\x93\x43\x20\x0a\x6e\xc2\x1d\x88\xc4\x88\xb8\x4b\x3a\x13\x17\xca\x31\xdb\x42\x6e\x5b\x97\xd2\xf3\x78\xe9\x40\xd2\xaf\xe1\x36\x9d\xf8\x45\xeb\x6d\xc9\x88\xfe\x75\xd1\xd7\xbd\x57\x21\x10\x05\x37\xe2\x0e\x44\x62\x64\xdc\x69\x53\x9b\x65\xce\x8b\x6c\x4c\xa9\xa7\x7e\x20\x3c\xed\x51\x3e\x52\xa0\xbb\x39\xdb\x4d\x5d\xba\xfe\xf0\xdb\x57\xd3\xf3\x52\x88\xa3\xd5\x08\xcc\x8c\xbb\x7f\x8a\xe9\xa4\x3b\x84\xff\x14\x13\x46\xc8\x1d\x39\x6d\x15\x03\xf6\xdc\xfb\xe5\x88\x79\xa7\x34\x36\xa9\x89\xb8\x99\xe6\x39\xc6\xfd\xb9\x2b\x48\xbd\xb0\x41\x0a\x94\xba\xfe\xd1\x51\x0a\x6e\xc8\x1d\x88\xc4\x48\xb9\x3b\xf4\x24\xfe\xc6\x5d\x9c\xbf\x50\x12\x77\x5a\xe1\x92\xf5\x3d\x33\xb1\xf5\x54\x4b\x03\xe3\xae\xdd\x34\x82\xa2\xcb\x9d\xe0\xba\x05\x04\xa2\xe0\xa6\xdc\x81\x48\x8c\x98\x3b\xfa\x2f\x35\xce\xb8\x6f\xef\x44\x09\x15\xca\xaa\x7d\x95\xe7\xb5\xe6\xba\x7e\xd3\x2c\x4a\xab\xdd\xc1\xa7\xae\x82\x8f\xfe\x11\xe9\xd1\xf2\x08\x6e\xcc\x1d\x88\xc4\xc8\xb9\x0b\x94\xae\x94\xf4\xe0\xf2\x3f\x3f\x22\xd8\xcb\xcf\xe4\x5f\x42\xbc\x07\x3d\x8d\xaf\x08\xbf\x1e\x3a\x43\x22\x56\x4c\x3e\x49\x74\x74\xf6\x83\x9b\x73\x07\x22\x31\x82\xee\xf2\x47\xfb\x78\x54\x53\xce\x0f\xd4\xdc\x55\x79\xde\xf5\xab\x74\xe8\xde\xed\xeb\x41\x2e\xaf\x75\x32\x06\xfc\xf8\x66\x08\x6c\x06\x2e\x43\x20\x0a\x6e\xd0\x1d\x88\xc4\x48\xba\x23\x28\x71\x84\x98\x33\xef\xa1\x3e\x06\xd7\x1c\x4a\x0f\xbd\x97\x20\xa4\xe9\x59\xca\xc8\xb5\xf8\xa8\x15\x92\xef\x30\xd8\xf1\x58\x11\x02\x51\x70\x93\xee\x40\x24\x46\xd4\xdd\x94\x92\xd6\x46\x3e\xe2\x59\x0c\x15\x01\x35\x53\xe9\xb8\xf4\xef\x27\x9b\x5f\xd9\x07\xbd\x3d\x64\x97\xbf\x59\x6e\x16\x59\x3c\xe6\x85\x40\x14\xdc\xa8\x3b\x10\x89\x91\x75\x67\xb9\xa3\x1d\x7c\xa5\x7c\xaf\x19\xe7\x7e\xf6\x8d\x08\x65\x5d\x82\x3a\x9a\x05\xf6\xec\x61\xdf\xea\xf9\xd4\xd3\xef\x04\xb2\x88\xc9\x20\x10\x05\x33\xeb\xee\x9f\x62\x3a\xe9\x1e\xfa\x3f\xc5\x84\x11\x76\xf7\xb6\x37\xbf\xb1\xe7\x73\xee\xcf\xe4\x90\x84\xc6\xa7\xf9\x0f\xb8\x71\x2c\xd3\xb2\x2b\x88\x64\x48\x12\x25\x11\xd2\x7c\xa4\x9e\x47\x3b\x21\xdc\xb0\x3b\x10\x89\x91\x76\x37\xaa\x3c\xff\x70\x37\x93\x9c\xaa\xf3\x15\x85\x78\x29\x6d\x3c\xce\xb9\xc3\x12\x39\xbc\x7d\x5a\x06\x56\x7a\x36\xf1\xf8\xb4\x08\x11\x08\x44\xc1\x4d\xbb\x03\x91\x18\x71\x77\x7d\xa6\x58\xaf\x7e\xe0\x74\xe1\xa7\xad\x33\x0a\x75\x9f\xab\xf6\x9b\x4b\x2d\x48\x39\x10\xcf\x31\x21\x2e\xa2\x7f\x75\xa5\x33\x43\x1e\x02\x51\x70\xe3\xee\x40\x24\x46\xde\xdd\x5b\x95\x56\xc3\x21\x9b\xd7\x15\xbb\x5f\xc9\x79\xa6\xe9\x18\xce\x90\x85\xd3\xee\x5f\x95\x6d\xe1\x7e\xe7\xf5\x75\x54\xe7\xea\x1d\x37\x08\x44\xc1\xcd\xbb\x03\x91\x18\x81\x77\x11\x8a\x90\x08\x1b\xdb\x43\xe1\xb8\x00\xf6\xe7\xdd\x19\xe2\x59\xc6\x5c\x3c\x2c\xb9\xcf\xd5\xbe\xde\x94\x30\xf6\xcd\xae\x94\x3a\xba\x9e\x81\x1b\x78\x07\x22\x31\x12\xef\xe6\x79\x47\x5a\x79\x5e\x73\xfa\x7d\x3c\xc3\xa0\xf7\x3a\xd2\x9f\xf5\xa2\x50\xe5\x84\x0a\x71\xc0\xef\x64\xda\x89\xec\xd8\x4e\x2f\x71\x08\x44\xc1\x4d\xbc\x03\x91\x18\x91\x77\x83\x48\xc4\x72\x8a\xe1\xe3\x00\x8f\xa8\x7a\xcd\xe0\x97\xe6\x3b\x31\x84\xbc\x86\xd4\x43\xf1\x3a\x8a\x63\xed\x85\xf4\x11\x3a\xfc\x10\x88\x82\x1b\x79\x07\x22\x31\x32\xef\xf8\x77\x4d\x44\xfd\x6f\x76\x3d\x68\x59\x78\xff\xc9\x29\x68\xc9\xa5\x52\xb7\x93\xc3\x9a\xa4\xe8\x8b\x24\xd0\x79\xeb\xe3\xc1\x69\x1d\x08\x44\xfd\x65\xe6\xdd\x0d\xc1\xab\xda\x57\xe6\xf6\x22\x51\x89\x69\x71\x11\x0f\x35\x7f\xa4\xd6\xf7\x71\x1f\xcc\x1a\xde\x79\x15\x4b\xa1\x72\x6b\x45\x42\x14\xe3\x61\xdf\x5a\x91\x20\x49\x7e\xa6\xd7\x45\xfc\x42\xa2\x35\xc5\xdd\x7c\xa7\xa7\xee\x69\x02\x55\x8c\xbe\xfe\xce\xb6\xf2\x5e\x1f\xdc\x83\x9e\x1e\x6b\x8a\x17\xe4\xff\x98\xc0\x77\x37\xeb\x2a\x60\x46\x59\x8b\xeb\xc7\x58\x64\x74\xd3\xdb\x0d\x19\xb5\xcb\x9c\x56\x04\x52\x84\x2a\xf4\x1c\x6b\x5a\x63\x7a\xa6\x54\x45\xde\x3f\x4a\x92\x60\xb0\xe6\xe7\x30\xe9\x19\x9f\xf1\x67\x95\x14\xb3\x05\x7c\x07\xfe\x6a\x1d\xf3\x55\x2f\x8b\x8f\x35\x45\x2c\xf4\x63\x6f\xe0\x33\x50\x3f\x3c\xc8\xc9\x7b\xdf\x5e\x43\x3e\x56\x84\xaf\xe1\xf8\xa0\x63\xce\x5a\x99\x62\xfd\xa3\xf9\x86\xdf\xb1\xa6\x63\x63\x61\xef\x57\xf7\xaa\xdc\xe6\x64\xa8\x58\x91\x05\x04\x59\xc4\xdc\x96\x3e\xc6\x0e\x8f\x7e\xf7\x3f\x1b\x5f\xf8\x7a\x1a\xfb\xca\xb1\xa6\xa9\x8e\x13\x4b\xe1\x84\x93\x78\xa7\x6c\xc9\x8d\x40\x15\x32\x5d\xbd\x3d\x75\x36\xd2\xcd\xd6\x1f\x9d\x9f\xe5\xda\x69\xd8\xba\x8f\xff\x1e\x4f\x6e\x8a\x4e\x91\xd1\xa0\x7c\x8e\xa8\xdb\xe1\x6d\xc1\xd3\xc2\xe0\x10\xab\xf6\xcc\xb4\x80\x68\x6c\x70\x77\x98\x48\x77\x67\xa7\xd2\xb1\xa6\xa7\xe5\xc4\x6a\x65\x55\x1f\xae\xb5\xfa\x76\xcf\x9f\x6b\xe6\xb3\xcc\x0e\xaf\x6e\xb7\xc6\x5a\x24\xa0\x4a\xb1\xd1\x2a\x65\x7e\x4b\xf6\xbf\x87\x7d\x27\x6d\xd5\x7f\x8e\x68\x18\xa1\x77\x97\xea\xd8\xa6\x05\x92\xbe\xbf\xac\x98\xa2\x7a\xf2\xfb\x50\x04\x15\xfd\x3e\x6c\x47\x0f\x08\x48\xc4\xdd\x18\x66\x68\xaa\xeb\x96\x80\x40\x14\xdc\xd0\x3b\x10\x89\x99\x7a\x37\xe1\x41\xa6\x5e\x4b\x21\xd1\x32\xfe\x7d\xf3\xa1\xa0\x09\xbf\xcf\xd0\xb3\xd4\x99\x0f\x11\x1f\x11\xe6\xf9\x05\xf3\x72\x4b\x6c\x10\x88\x82\x9b\x7a\x07\x22\x31\x62\xef\xcc\x12\xdd\xeb\xe8\x4b\x05\xf4\xbe\xc6\xa9\x9d\x75\x94\xb7\xf1\x58\x67\x2a\x1e\x12\xa5\x7a\xb6\x49\x27\x74\x8d\xf6\xf1\x3d\xef\xa3\xf5\x23\xdc\xd8\x3b\x10\x89\x91\x7b\x17\x47\xbf\xe7\x3b\x3f\x48\x44\xf2\x55\xe5\x67\x7b\xde\xf5\xb5\x32\x42\x1d\x9b\x77\x06\xb9\xa8\x79\x03\xc3\x36\x27\xea\x70\x5f\x19\x08\x44\xc1\xcd\xbd\x03\x91\x18\xc1\x77\xf9\xf9\x6c\x9b\xe5\x4f\x8a\xcc\xbd\x4c\xd6\x99\xcf\x86\x7e\xe2\x56\x79\x38\xf4\x63\xfd\xfa\x7b\xa9\xb8\xba\x9a\xff\x8f\xb3\x3b\x8f\xe6\xe2\x7d\xff\x07\x6e\xc6\xfa\x1a\x65\xdf\xee\xb2\x85\x10\x59\xb3\x97\x25\x6b\xd9\xb7\xac\x51\x28\xbb\x10\x42\x8a\x46\xb6\x92\xb2\x14\x8a\x64\x09\xd9\xd7\x2c\x85\x24\x6b\xb6\xc8\xd2\x82\x2c\xd9\x97\x28\xa1\x94\x7e\xc7\x39\x3f\x9f\xaf\x33\xff\x38\xf3\xfe\xff\x3a\xa7\xd3\xcc\x3c\xef\xfb\xba\xee\xfb\x78\x3d\xe6\x23\x2b\xe3\x45\x50\x40\xc0\x0b\xdf\x01\x08\x23\xdf\x29\x3c\xbb\x72\x90\x66\xcd\xc1\xac\x30\xeb\xcb\xb3\x1e\xa7\xa8\x5b\x4b\x5b\xc1\xd5\x65\x4c\x88\xb7\xe1\xd8\xea\x7b\x5f\x2e\x5e\x23\x14\x10\xf0\xca\x77\x00\xc2\xd0\x77\xc2\xf6\x1d\xd7\xec\x85\xf4\xba\x26\xb5\xba\x87\x3d\xe2\x15\x92\x8c\xe9\x2d\x83\x91\x2d\xd2\x0b\x08\x3d\xfc\xf5\xb0\x56\x8d\x28\x0a\x08\x78\xe9\x3b\x00\x61\xec\x3b\x33\xae\x4a\xba\xf2\x17\xf2\x7e\xe9\x6e\x2a\x89\xb3\xd7\xd5\x97\x93\x94\xd3\x1e\x30\xa4\x8f\xeb\xd7\xbd\x9d\x4c\x5e\x7e\xc6\xbc\xfd\x3e\x70\xda\x77\x3b\x61\xda\x6b\xdd\xd9\x09\x13\x06\xbf\xf3\x8f\xfe\x72\xb5\xe1\xd5\x75\x59\x1d\x28\xc4\x27\xd3\xd9\xeb\xa3\x70\x53\xa0\x9f\x6c\xb5\x7f\xbf\x9f\xd6\x68\x2a\x79\xc8\x3c\x27\x0a\x08\x78\xf1\x3b\x00\x61\xf4\x3b\xca\xd1\x10\x6e\x7b\xa9\xbe\xca\x96\x14\x31\x7e\x5d\xc1\x1b\xe7\x7c\x94\x14\x6c\x83\xd7\x58\x0b\xf7\x3b\x57\xdc\xaf\x1e\xd5\xdd\x1e\x8e\xf1\xea\x77\x00\xc2\xf0\x77\xaa\x22\x8d\xf3\x6c\x0a\xa1\xfd\x2e\x96\x37\xf3\x7f\xde\x4d\x9f\x20\xfd\x20\xce\x25\xfd\x2a\xb2\x23\xb5\x41\x70\xe9\x6a\xf0\x81\xed\x0f\x04\x2f\x7f\x07\x20\x8c\x7f\xc7\x61\x50\xf8\xc6\xda\x84\xb4\x42\xde\xad\x22\xec\xfb\xe5\xb5\x9b\x5a\x4d\x33\xea\x17\xce\x6b\xc8\x70\xcb\x71\xde\xe7\xe8\xc8\xda\xde\x56\xf1\xfa\x77\x00\xc2\x00\x78\x35\x8d\x46\xd3\x3d\xbf\x5c\xee\x6a\x39\x5b\x56\x09\x0b\x79\x16\x90\x9e\x05\x31\xcd\x0c\x62\x22\xb1\xcb\x6f\x2c\x05\x74\x23\x49\x50\x40\xc0\x0b\xe0\x01\x08\x23\xe0\x89\x94\x25\x33\x3e\xf4\x7e\xe9\xd8\xdd\xfd\xe7\xc4\xe0\x0d\xd6\x57\x3e\xf7\xd9\x2a\xf5\xf8\x69\x6d\x9e\xc6\x0b\x7b\xe4\x6c\xb1\xb2\xa3\x80\x80\x57\xc0\x03\x10\x86\xc0\xa3\xfd\xa7\xff\xf8\x01\x6f\x94\x9f\x16\xc4\x87\x04\xc7\xa7\xbe\x74\x35\x35\xa3\x1e\x6f\xa8\x62\x8f\xea\x05\xf2\x09\x9d\x2c\xdb\x2d\x21\x5e\x02\x0f\x40\x18\x03\xef\x3e\x75\xdb\xc8\x93\x37\x17\x51\x66\xbf\xcc\x3e\xc5\xef\xb1\xa5\x3f\xce\x66\xff\x94\x10\x66\x79\x96\xe3\x3e\xba\xfe\xe8\xde\x09\x27\x14\x10\x70\x1a\x78\x3b\x61\xda\x6b\x67\xde\x09\x13\x06\xc1\x7b\x34\xa4\x7d\x34\xfb\xb1\x70\x20\x2b\x6d\x96\xfb\xb3\x28\xbd\x9e\x57\x89\xab\x64\x82\x06\xdf\x25\x4e\xa3\xc5\x68\xcc\x11\x13\x32\x14\x10\xf0\x22\x78\x00\xc2\x28\x78\xa9\xfd\x46\x57\x92\xc4\x55\x8c\x22\x9a\xfe\x1a\x6a\xfb\xfe\x5a\x9f\xf6\xb7\x97\xa9\xb2\x5e\x55\x28\xaf\xef\xbb\x3b\x71\x50\x52\x1c\x05\x04\xbc\x0a\x1e\x80\x30\x0c\x1e\x87\x5b\x0c\x03\xe5\x56\x9d\xc4\x1d\x36\x32\x9d\x11\x91\x8e\xe3\x15\x69\x21\xdc\xef\x7d\x52\xa5\x37\xef\xbf\x67\x36\xcb\xbe\xc2\x85\x02\x02\x5e\x06\x0f\x40\x18\x07\x6f\xba\xe2\xba\x1d\x89\xb3\xa6\x4a\xb2\x2b\x65\xc8\x62\xb6\xea\xfe\x65\x4a\x0a\xff\xbb\x5f\x2f\x18\xf4\x55\x5c\xe4\x3d\xc0\xe5\x8c\xa0\x80\x80\xd7\xc1\x03\x10\x06\xc2\xe3\xa1\x31\xdf\x58\xf4\xf8\x60\x13\x5f\xec\xdc\x71\x91\xdd\x66\x25\x57\xbe\xa3\x21\x83\x8e\xed\xed\xf4\xe1\xa5\x21\x05\x4a\xb7\xed\x99\x01\x2f\x84\x07\x20\x8c\x84\x67\x2e\x97\xc7\xdd\xa3\xf5\xc8\x99\x2f\x7c\x3a\x72\x25\xfa\x8e\x43\x9e\xa9\x5f\xc5\x29\x0d\x1d\x65\xcb\x03\xf2\x6d\x03\x76\x9f\xb7\x17\x50\xbc\x12\x1e\x80\x30\x14\x5e\x2b\x55\xa4\xea\xd5\xf9\x43\x21\x2c\x9c\x9f\xe2\xbd\x1c\x42\x56\x6f\x3c\x99\x39\xf9\x44\xec\x6e\xfe\xe3\x2f\x31\x6a\x33\xc2\x53\x87\x50\x40\xc0\x4b\xe1\x01\x08\x63\xe1\x09\x4a\x93\x44\x2b\xf0\x7f\x72\x54\x8e\x77\xb6\x4d\x7b\xb1\x41\x74\xf3\x8e\x95\xe3\x1d\x9a\x8b\xc8\x40\x48\x06\xb9\xe5\x40\xd7\xf6\x9c\x88\xd3\xc2\xdb\x09\xd3\x5e\xbd\xeb\x4e\x98\x30\x18\xde\x93\x5b\x1e\x3e\x09\x42\xed\xf1\xa1\xba\x82\x37\xc9\xb2\xc6\x4d\xcf\x68\xfb\xd3\x22\x39\xb7\x66\x8b\xd3\x26\x16\xe3\x97\x05\xe8\x51\x40\xc0\x8b\xe1\x01\x08\xa3\xe1\xb1\xb8\xcf\xf6\x2e\xe6\x0a\xfb\x75\x2e\x7b\xfc\xb9\xc4\xf6\x9c\xb6\xcc\x4f\xe3\x2d\x75\x75\x83\x71\x97\xf7\x51\x56\x51\x1a\x4b\x69\x14\x10\xf0\x6a\x78\x00\xc2\x70\x78\x97\x95\xf2\xde\xdf\x74\xfb\xf0\xe2\x2e\xb7\x7d\x8f\xec\x30\x5b\x94\xf4\xda\x60\x41\x2a\xdf\xd7\xe7\xac\xd5\xc7\x01\x1d\x79\x95\x24\x0a\x08\x78\x39\x3c\x00\x61\x3c\x3c\x13\x93\xa9\xe3\xb7\x67\x8d\x5a\x42\xbd\x10\xd6\xe8\x69\xe6\x1b\xd9\xa1\x69\xf7\x2e\x64\x51\x52\x3e\xbe\x77\xe3\x78\x7b\xa1\xcf\xf6\x07\x82\xd7\xc3\x03\x10\x06\xc4\x73\x26\x39\xb6\x9a\x32\x95\xf3\xd3\xf1\x60\x0d\x9f\x20\x47\x7e\x30\x3f\xc5\xe3\xe8\x2c\xaf\xe8\x95\xee\xe0\xf4\x44\xc6\x33\xc9\xce\x28\x20\xe0\x05\xf1\x00\x84\x11\xf1\x36\xe7\x47\xa8\xd6\xbb\x34\xba\x62\x7e\x49\xaf\xf0\xc6\x27\x14\xba\x1c\x5d\xf6\x32\x3b\xa7\x93\x6e\xd9\x0f\x69\x67\xc7\x2c\x2a\xa2\x80\x80\x57\xc4\x03\x10\x86\xc4\x13\xdf\xaa\x18\x5f\x1c\x1a\xd0\x66\x08\x32\xcb\x0a\xce\xbc\xdb\xfe\xc0\x71\x64\x54\xfb\xa7\xe7\x15\xe5\x47\x2e\x1e\xff\x44\x8d\x8f\xa0\x80\x80\x97\xc4\x03\x10\xc6\xc4\xcb\x2d\x54\x8a\x88\xb1\x0b\x33\xbd\xad\xd2\xb3\x4c\x2c\xe9\x45\xfd\xc8\xc4\x5f\xb1\x2c\xb2\xb3\x9b\x31\x52\x25\xa9\x46\xd8\xcf\x02\x05\x04\x9c\x26\xde\x4e\x98\xf6\x9a\xee\x76\xc2\x84\x41\xf1\x14\x66\xd6\x82\xcc\x6e\xc8\x3f\x20\x5a\x66\xf8\x74\xfc\xae\x84\x7a\x0b\x62\x3c\xf8\x20\x30\x94\xac\x5b\x72\xd1\xfa\x0c\xad\xd0\xf6\x2a\x85\x17\xc5\x03\x10\x46\xc5\xcb\x60\x88\xd4\xee\x2c\xa5\x34\x5f\x51\xcb\x44\x04\x7f\xfd\xe4\x7e\x7c\x20\xf5\xf6\xab\x3f\xd7\xd2\x5b\xa3\xcb\xaf\xfd\x74\xd9\xe2\x41\x01\x01\xaf\x8a\x07\x20\x0c\x8b\xd7\xe7\x60\x50\xdc\x78\x5a\xf1\x09\x85\x7c\x47\x9f\x51\x42\x0a\x45\xf6\xf7\xa2\x44\x1f\xc1\x98\xc2\x72\x6f\x17\xaf\x4a\x89\x4b\x94\x28\x20\xe0\x65\xf1\x00\x84\x71\xf1\xc8\xb6\xcc\xdc\x4e\xaa\xb8\xa8\x7b\x7e\x7b\x15\x43\x66\x18\xf0\xf0\x5c\x15\xcf\x3e\xf7\x5b\xfb\x2b\x38\xe5\xda\x1f\x73\x33\x8a\x9b\xa1\x80\x80\xd7\xc5\x03\x10\x06\xc6\x5b\x1e\xfb\xcc\xfe\xc0\x60\xc4\x92\x2e\x52\x38\x05\xbe\x94\x52\xf4\x53\xab\x21\x74\x76\xac\x47\xdc\x5d\xe6\x7a\xa9\xe9\xa3\xc4\xed\x1d\x16\x2f\x8c\x07\x20\x8c\x8c\x17\x2a\x2d\x31\x32\x73\xf3\x13\x8d\x43\x5b\x83\x4b\xc4\x8b\x13\xcf\x2b\x7a\x32\x14\xac\x75\x3a\xbf\xe8\x5e\x6c\x1a\xf8\xce\x5f\xb8\x3d\x27\xe3\x95\xf1\x00\x84\xa1\xf1\x48\x2f\x6b\xeb\xde\xd5\xe2\x15\xbb\xd0\xcd\xbd\x4a\x52\x7c\xaa\xb1\x60\x4c\xba\x28\xa8\x52\x60\xa6\x86\xb8\x7f\xde\xd7\xba\x5f\x03\x05\x04\xbc\x34\x1e\x80\x30\x36\xde\x28\x3f\xfb\xf8\xa5\xe9\x5e\xbb\x71\xb3\x1c\xd6\x4f\xe5\x1f\xbb\x62\xf3\x04\xf7\x99\x51\x52\xd3\xdb\x65\x2d\xc6\x7e\xaf\x4b\xd0\x42\x01\x01\xa7\x8d\xb7\x13\xa6\xbd\xce\x3f\x76\xc2\x84\xc1\xf1\x60\x73\xcd\x0f\x4a\xe9\x2f\xb2\x33\x9a\x0e\x2f\xdc\xef\x75\xca\xb4\xc9\x79\xe2\xb2\x55\x75\xb5\xf0\x22\x14\xe5\xbc\x2a\xa2\xb2\xbd\x12\xe2\xc5\xf1\x00\x84\xd1\xf1\x38\x36\x4f\xf8\xa8\xad\x6c\xfc\x30\xdd\xba\x44\xeb\x17\x9f\x79\x78\xb6\xb1\xeb\xe7\xd9\x30\xd7\x3f\x44\x9e\xaf\x0a\x16\x9a\x59\xb6\xdb\x23\xbc\x3a\x1e\x80\x30\x3c\xde\x19\x9e\x27\x1f\x93\x4f\x5f\x2a\x6a\xa0\x48\x60\xc9\x06\xf0\xdb\x14\xea\xad\xa1\x69\xbb\xe2\x28\xf7\x7d\x3a\x6a\xfb\xaf\x2f\x6c\x07\x16\x2f\x8f\x07\x20\x8c\x8f\xa7\xef\x3b\x26\xec\xcc\x75\xbf\xd3\x7f\x94\xfb\x8b\xa7\x9e\x9e\xdf\x1b\x77\xb6\x33\xd5\xb4\x16\xb9\x02\x2e\x94\x34\x8e\x7d\x85\x14\x28\x20\xe0\xf5\xf1\x00\x84\x01\xf2\xf2\x7d\x97\xea\xf8\xac\xc4\x8a\x5c\xde\xfc\x8b\xf8\xe0\x2d\xaf\xac\xf1\x65\xd4\xe8\x21\xb9\xdb\xb0\x8d\xdc\x99\xfb\xb1\x84\x79\x36\x14\x10\xf0\x02\x79\x00\xc2\x08\x79\x2f\xd4\x6f\x5d\x65\x7e\x51\xbd\x31\x5f\x7f\x5b\xe3\x47\xa7\x54\x69\x48\xdc\x02\x9d\xf2\xbc\x16\xd7\xe7\xce\xfc\x33\x05\x1c\xfa\xdb\x33\x2c\x5e\x21\x0f\x40\x18\x22\x4f\x7d\xa0\x33\xc0\xbd\x04\xe4\x5a\xfc\x18\x10\xbb\xdf\x1c\xb8\x7e\x94\x34\xe5\xce\x86\x8f\xef\x89\xd1\x65\x4f\x3a\x47\x4a\x92\xed\x45\x01\x2f\x91\x07\x20\x8c\x91\x77\x27\x93\xb2\xc0\xbc\x21\xf7\x01\x01\xae\xf0\xbe\x92\x40\xac\x29\x27\xcf\xf7\xe1\xae\xb3\x87\x40\xdc\xd0\xc2\x52\xd1\xf1\xba\xed\x77\x8e\xd3\xc8\xdb\x09\xd3\x5e\x27\x84\x3b\x61\xc2\x20\x79\x4b\x53\x4f\xbb\x3e\x08\x17\x28\x31\xe5\xaa\x86\xad\xb9\xb3\x9c\xe4\xf3\xb7\x18\x0e\xe7\xef\xe8\x4f\x68\xba\x63\x7a\x5d\x7f\xf4\x34\x0a\x08\x78\x91\x3c\x00\x61\x94\xbc\x27\x92\x7c\x32\x2f\x6a\x88\xb4\xd2\xff\x5d\xd1\xaf\x4b\x62\x21\x1d\x35\x3d\xde\x1a\x4c\xf2\xec\xf3\x7b\x99\xe6\x22\x7d\x06\x03\x4d\x14\x10\xf0\x2a\x79\x00\xc2\x30\x79\x05\x4a\x2a\x64\xc6\x9f\x7a\xac\x34\xfe\x01\x77\xa9\x10\x92\x2e\xeb\x73\xad\xed\xaf\x26\x3f\xee\x1f\xbd\x40\x45\xa5\x71\xec\xe1\x76\x0b\x86\x97\xc9\x03\x10\xc6\xc9\x9b\xf6\xbe\x33\xf1\x52\xb1\x48\x69\x6d\x66\xdc\x51\x2c\x54\xe7\x87\x6a\x1c\xad\x57\xb7\x45\x54\x46\xc7\x47\xf2\xdc\x27\xc7\x8a\x98\x51\x40\xc0\xeb\xe4\x01\x08\x03\xe5\xf5\x11\x3f\x09\xe4\x73\xe3\x78\xe0\xd2\xac\xd7\xd6\x7e\x43\x8c\xf4\xbc\x75\xa3\x4c\xb6\x47\x37\xcf\xb1\xca\xcb\xba\xf6\x52\xbc\xdb\x33\x2c\x5e\x28\x0f\x40\x18\x29\xaf\xd6\xfb\x4f\xaf\xf4\x94\xe8\x7c\x59\x60\xd4\x52\x4e\x41\x55\xba\xfc\x90\x68\x94\x92\x9e\x36\xe9\x05\xb3\xa3\xbf\x99\x13\xe8\x59\x51\x40\xc0\x2b\xe5\x01\x08\x43\xe5\x69\x2b\x08\x1d\xd1\x53\xfc\xae\x2d\xab\xbc\xa2\xf0\x24\xa4\xf5\xbb\xed\x40\x82\x91\xb4\x3b\xc9\x20\x41\xf5\xfa\x73\x8f\x52\x5b\x21\x14\x10\xf0\x52\x79\x00\xc2\x58\x79\x45\x31\x19\x87\x8e\xbc\x67\x62\x62\x0d\x69\x7f\x14\xf6\xc8\xd6\xbf\xe4\xbc\xd9\xe4\x4f\xfe\x66\xba\x03\xaa\x3d\xfb\x3a\x1e\x66\x59\xa3\x80\x80\xd3\xca\xdb\x09\xd3\x5e\x67\xe8\x3b\x61\xc2\x62\x79\x21\x43\x9e\x70\xc0\xe4\x89\xde\xd9\x83\x99\xc4\x9d\xc7\x7c\x5c\x62\xf7\x45\x9f\x28\x57\xb4\xe5\xfc\x75\x4b\x30\xd9\xd2\x7c\xbb\xcd\xc3\x8b\xe5\x01\x08\xa3\xe5\xed\xff\x9e\xd5\x60\x4f\x9e\xc1\xf9\xee\x4d\xce\xb4\xdd\x7d\x4f\xc7\x39\xf3\xda\xaa\xad\xce\x54\xe3\xbf\x3e\x4c\x52\x44\x77\x14\x6c\x51\x40\xc0\xab\xe5\x01\x08\xc3\xe5\xf5\x9a\xec\xa3\x7a\x44\xd2\x68\x4f\x2d\x36\xde\xce\x95\x63\xd3\x33\xe7\x74\x86\xa3\x87\x20\xd1\xfa\xda\xc6\xb3\x89\xfd\xbc\xff\xf6\xe0\x8e\x97\xcb\x03\x10\xc6\xcb\xb3\xa1\x68\xdc\xff\x5e\xd4\x80\x65\x40\x71\xd4\x53\xd3\xc6\x2a\xe7\xc1\xe0\xdd\x3b\x42\x7f\x15\x89\x4a\x14\xc6\x05\x63\x1e\x0b\xe9\xa0\x80\x80\xd7\xcb\x03\x10\x06\xcc\xeb\x3a\xe0\xb6\x74\xc2\xcc\x56\xe9\x93\x56\xe9\xef\x32\xc9\xc4\xfd\x53\x83\xaf\x16\x73\x85\xba\x8e\xea\x32\x7d\xcf\x73\x48\xe7\x25\x41\x01\x01\x2f\x98\x07\x20\x8c\x98\x37\xef\x43\x37\x68\x50\x48\x46\xa5\x9a\xe5\xdf\x54\xce\xd4\x94\xd6\x48\xf6\xb2\x57\xd1\x1c\xd8\x6d\xc8\xd5\xf9\x39\x6b\xd2\x10\xa3\x80\x80\x57\xcc\x03\x10\x86\xcc\xd3\x8b\x35\x1b\x66\xee\x38\xe4\x61\xf3\xe5\xc8\x19\x9a\xc6\x6a\xbf\x88\xc1\xdc\x6b\x7c\x97\xc4\x4b\x36\x5b\x2f\x50\x4c\x46\x9d\x3f\x88\x02\x02\x5e\x32\x0f\x40\x18\x33\xef\xe8\xbe\xcf\x09\xb9\xb1\x11\x46\x4c\x8e\x84\x2d\x06\x86\xea\xb6\xd8\xf3\x3d\x75\x73\x3d\x1b\x2e\x96\xbc\x09\x5f\x7b\x96\xe2\x94\x50\x40\xf8\x8f\x66\x1e\x8d\x7b\x65\x14\xef\xac\x66\x43\x10\xc7\xef\xe6\xa9\xb6\xf4\x27\x6b\xf3\x83\x92\xbf\x8d\x53\x2e\x3e\xfb\x61\xf8\x1c\xfd\xca\xdd\x87\xbd\xec\x5b\xc9\x4b\xce\x90\xec\x2a\x30\xef\x1f\x71\x86\x99\x53\xca\x2d\x7c\x03\x1b\x3e\x56\x28\x7c\x22\xfd\xaa\x19\xc5\xa9\x25\xe0\xb3\xab\xf4\xee\x2f\x9f\x30\xfe\xe1\xac\x6f\x84\xc8\x43\x53\x22\x32\x2d\x64\xb5\xbf\x10\xb7\x8d\x5c\x3a\x6b\x61\x51\xe5\xc8\xcc\xf1\x44\xeb\x5d\xa5\x91\xb9\x4f\x8e\xfc\x46\xf9\xd6\xcb\x9e\x16\x8b\x17\x48\x89\x64\x5f\x7b\x3a\x77\xe6\x77\x6b\x8a\xd4\xc4\xb8\xe5\x63\x40\x96\xb5\xbe\xab\x74\x5f\x79\xd5\x8f\x9b\x5a\x71\x75\x31\x27\x3f\x44\xdc\xbd\xe8\x1f\xf7\xf9\x43\xa3\x58\x22\xef\x8b\x49\xe9\x9f\x62\x86\x12\xf3\x1f\xc2\x76\x95\x0a\xee\xcf\x9a\x59\x9d\xb8\x94\xda\xf0\xaf\x97\x4b\xfd\x01\x7b\x57\xf5\x99\xb4\x4f\x64\x7f\x69\x6f\x64\xb4\x7e\x1a\x36\xf1\xab\xef\xd9\x55\x7a\xff\xb9\x23\x1f\x3f\x79\xcf\xc8\x9b\xa1\x09\x2d\xf6\xb6\xfe\x17\x31\xe4\x27\x36\xdf\xbe\xf9\xf5\x9e\x84\x73\x43\xb9\xe1\x25\xa2\xbd\xab\xd4\xf9\xa5\x54\xb2\x5c\xc7\xd4\xe6\xbd\xef\x07\x0e\x13\x96\xd6\x4d\xaf\x87\xfa\x6c\xd4\xfb\xcd\xfc\x51\x19\xef\x11\x39\x4b\xe4\x9b\xbf\xab\x74\xe2\x30\x0b\x39\xb4\x96\x10\xa4\xfb\x44\xba\xc1\xf8\x7d\x9d\xcb\x33\xea\xfb\x0f\x17\x2d\xaa\xbe\x18\x47\x51\x1d\x75\xbe\x1b\x10\xfb\x7f\x97\x7d\x7b\x3c\xd5\x9d\x15\x0d\x83\xe6\x69\xe7\xaa\x36\x9d\x48\xe2\x3e\x43\x22\x27\xe8\x40\xc2\xab\xa4\xcb\xcc\x36\x70\xdd\xf4\x67\xfc\xd8\x9c\xc5\xad\xcf\xb9\x8c\xec\x1c\x28\x20\xe0\x45\xf3\x00\x84\x51\xf3\x22\xec\xe8\xc6\x3d\x38\xa7\x68\x8c\x99\x8b\x07\x73\x99\xba\xe3\x99\x86\x6b\x94\x86\x66\x53\xac\x85\xec\x6e\x95\x31\x9b\x9d\xa4\x47\x01\x01\xaf\x9a\x07\x20\x0c\x9b\xe7\x5c\xed\xf4\x44\x78\xc6\xc3\xd0\xe6\xba\xfb\xd3\xad\xbc\xa7\x44\x07\x7a\xc7\x28\x2b\x0d\x26\xf3\x48\x06\xc7\xd6\x2f\xd8\x13\x6f\xf7\xf3\x78\xd9\x3c\x00\x61\xdc\xbc\x18\x3a\x8e\x27\x97\x43\x44\x29\x1d\xa6\x15\xb4\x6a\xa8\x2a\xac\xc5\x49\x8b\x84\xde\xc6\xa8\xdc\x96\x3e\x84\x24\xcd\x1b\x7e\xd8\xfe\x7f\xe0\x75\xf3\x00\x84\x81\xf3\xce\x4e\x84\xbd\x6b\xcc\x67\x5f\xff\x2d\xc4\xa4\xf5\x41\x95\x43\x56\x73\x2a\xc0\x55\x42\xf6\x50\xb9\x8f\x4c\xd8\x99\x53\x4f\xef\x3b\xa0\x80\x80\x17\xce\x03\x10\x46\xce\xbb\xf8\xe2\x71\x99\x55\xf8\xd9\xeb\xae\x24\xa2\x61\xa5\x75\x77\x6a\x64\x29\xce\x52\x86\xc7\x8c\xec\xfb\xfc\xe7\xb6\xfd\x2b\x71\xa7\xed\x1d\x06\xaf\x9c\x07\x20\x0c\x9d\xa7\xcd\xe6\x69\xd4\x96\x02\x3f\xe3\xec\x5c\x32\xb0\xf9\x5e\xe8\xe7\x44\x46\xae\x6a\xf8\xd0\x9a\x93\xf3\xc1\xa1\x01\x21\x33\x52\x5e\x14\x10\xf0\xd2\x79\x00\xc2\xd8\x79\xce\xd3\x81\xaf\x81\x2f\x63\xbe\xa8\xf1\xf1\xb0\x55\x41\x53\x79\xa5\xd1\x6c\xc9\xce\x36\xdf\x40\x3e\x7b\xa9\xd1\xf3\xac\xb4\xdb\xc3\x31\x4e\x3b\x6f\x27\x4c\x7b\xad\x3b\x3b\x61\xc2\xe0\x79\x99\xd9\x55\x7e\x43\xed\xaf\x05\x5b\xcb\x82\xfe\x7c\x62\x61\xf9\x67\xbd\x8f\xa3\xa9\xd1\x8d\x31\xf8\x8a\x65\x70\xce\x47\x51\x3f\x71\x14\x10\xf0\xe2\x79\x00\xc2\xe8\x79\xa7\x08\x63\xbe\x65\x77\x29\x8c\x53\x57\xae\xb6\x90\x45\xa9\x73\x3a\x59\x0f\x6f\x74\xa8\x05\xd5\xd1\xaf\x88\xf3\xbe\x7b\xf1\x78\xbb\x47\xc5\xab\xe7\x01\x08\xc3\xe7\xcd\x9a\x8d\x13\x4b\xd7\xbf\x30\x7e\x3b\x27\x71\x5b\xc5\xe2\xa3\x61\x3e\x0f\x67\xd2\xe7\x80\x52\x59\xab\x7f\x0a\x31\x32\xb2\x49\x32\x28\x20\xe0\xe5\xf3\x00\x84\xf1\xf3\xda\xf8\x4c\x53\x25\xd7\xae\xaa\x1c\xbe\x37\xa1\x6a\x49\x52\xe2\x64\x6a\xc6\xf1\xaf\x9d\xd3\x40\xd2\x1a\xa2\x16\xcb\x2f\x56\x17\x46\x01\x01\xaf\x9f\x07\x20\x0c\xa0\x77\x92\x95\x90\xcd\xa5\xdd\x61\x62\xf0\x87\xa4\x4e\xbd\xda\x9d\x97\x3f\xf7\xca\x5f\x7f\x89\x69\xd3\x8d\x77\x99\x4a\xad\xe9\x3e\x30\x0a\x08\x78\x01\x3d\x00\x61\x04\xbd\x4c\xa7\x16\xbb\xa0\x5c\xb3\x04\xcd\xc4\x11\xe2\xd9\xe7\xa7\x78\x4e\x42\x26\x27\x84\x74\x99\x1e\xa8\xc5\x4a\x44\xca\xea\x7f\xb0\x42\x01\x01\xaf\xa0\x07\x20\x0c\xa1\x67\x0e\x0d\x6b\x5a\x79\xa5\x29\x1a\x66\x66\xf2\xbd\xdd\x30\x73\x6b\xaf\xeb\xb9\xce\x97\x6d\x2d\xb0\x6e\x29\x61\x7a\xb7\xd4\xd6\x0d\x05\x04\xbc\x84\x1e\x80\x30\x86\x9e\xee\xb9\x97\xc4\x36\xe9\x9f\xa8\x94\xe3\xa0\xaf\xfd\x27\x59\x55\xb3\xf4\x42\x78\xb2\xdf\xb6\x24\x88\x7c\x9b\x6b\x3c\x35\x9a\xe0\x88\x02\x02\x4e\x43\x6f\x27\x4c\x7b\xed\xcc\x3b\x61\xc2\x20\x7a\xc8\x51\x0b\xe1\x6e\x96\x17\xad\xde\x4f\xe4\x79\x99\x2f\x58\x09\x10\xbf\xa9\x2e\xd0\x55\x41\x7e\x32\xaf\x68\x4c\x1b\x13\x73\x28\xa2\x80\x80\x17\xd1\x03\x10\x46\xd1\xf3\x0d\xe0\x09\xff\x67\xce\xe2\x44\x14\x3a\xe2\x54\xa2\x74\x40\x82\x2b\x37\xde\xe8\xaa\x03\xb7\x4c\xd9\x8a\xd2\xfc\x27\xd7\x79\x13\x14\x10\xf0\x2a\x7a\x00\xc2\x30\x7a\xa1\x5c\x75\x59\x1c\x46\xab\x81\x5f\x56\xc1\x3d\x29\x13\xad\x93\x5a\xef\xe7\x25\xc6\x8c\x98\x7f\xd6\x89\x35\xf4\xda\x1d\x4a\x54\x47\x01\x01\x2f\xa3\x07\x20\x8c\xa3\x87\x9c\xaa\xbe\xa6\x5e\x93\x62\xa1\x5a\x73\x54\xa5\x2b\xba\x92\x9a\x82\xd8\x9d\xf0\x29\x2b\xa2\x5e\xe1\xf4\x35\x0e\xf4\x96\xde\xf6\xcb\xc3\xeb\xe8\x01\x08\x03\xe9\x45\xb7\x56\x6f\x0d\x50\xea\xd6\xa8\x71\x9b\xf5\x0c\x76\x1e\xcb\x8d\xcf\x45\x97\x43\x15\xa2\x5f\x8a\x33\xe6\x6d\x99\x67\xd8\xd8\xa3\x80\x80\x17\xd2\x03\x10\x46\xd2\xab\xb8\xf9\xe6\xd8\xac\x4f\x54\x62\x81\x12\xc9\xbd\x63\x6e\xae\x5d\x36\x95\x7c\xdd\xb2\x4d\xaf\xc5\x8d\x82\xfb\x0e\x67\xf9\x1b\x52\xa3\x80\x80\x57\xd2\x03\x10\x86\xd2\x1b\xe1\x29\xf3\x28\x56\x19\x6e\xae\x24\x9f\x5f\x2f\x90\xfb\x60\x33\x48\x31\x2c\xf9\xd8\xf0\xe5\x5c\x4b\xcf\xa1\x12\xaa\xab\x22\x5c\x28\x20\xe0\xa5\xf4\x00\x84\xb1\xf4\x4e\x04\xd4\x5d\xfd\x5d\xfc\xe6\x32\xcb\xd8\x7a\xa2\xb8\x74\x72\x2a\x31\x6b\xe3\xb8\xf5\x13\xb1\x7f\xa5\x2b\xc7\xc7\x84\x93\xac\x28\x51\x40\xc0\x69\xe9\xed\x84\x69\xaf\xde\x75\x27\x4c\x18\x4c\x2f\x61\x4c\xb8\x5c\xd3\xa2\xa9\x51\x50\x34\x5a\xed\x9c\xfa\x48\xe8\x7d\xd7\x9f\x63\x57\x2f\x50\x3f\x1a\xd3\xbb\xf5\x3c\xb3\xd4\x69\x7b\x50\xc2\x8b\xe9\x01\x08\xa3\xe9\xcd\xa4\x9b\xab\xbc\x27\x61\x3d\x91\x37\x5d\x99\x52\x7f\xf0\x87\x8e\x49\xd9\x61\x69\x87\xa7\x57\xf2\x55\x5e\x9a\xca\x92\x50\x59\x52\xa1\x80\x80\x57\xd3\x03\x10\x86\xd3\xeb\x91\x8f\xb1\x0a\xe6\xb9\xe3\x97\x9d\xcd\xfc\x77\x6b\xc0\x2b\x7b\x2c\xab\x32\x3b\x34\x80\xd2\x4f\x5e\xb9\x79\xc3\xe1\xe0\x61\x15\x14\x10\xf0\x72\x7a\x00\xc2\x78\x7a\xfe\x41\xea\xb9\x79\xfa\x41\xef\xf6\x91\xc8\xdb\x74\x49\x33\x59\xd1\x32\x5d\x29\x11\x7b\xcc\x70\x34\x4a\x8d\xaf\xe4\x57\x75\xce\x09\x14\x10\xf0\x7a\x7a\x00\xc2\x80\x7a\x5f\x2a\x59\x8a\xda\x1f\x6c\xac\x88\x30\x16\x66\x78\xfd\x11\x17\xd1\x09\xba\x14\xf4\x16\x5d\xe7\xe6\xc8\xda\xfa\xca\xf1\xbd\x76\xbb\x75\xc1\x0b\xea\x01\x08\x23\xea\x09\x1f\xba\x1b\xce\xf5\xe1\xbb\xe0\xf7\x77\x9c\x5e\xf3\xeb\x13\x95\x1d\xa7\x1b\xf7\xc9\x47\x0e\x93\x58\x9e\xb3\xd8\xf7\x1c\x50\x6c\x3f\x2b\xbc\xa2\x1e\x80\x30\xa4\x9e\xe9\x4f\xa7\xd4\xc7\xe4\x07\xc9\xb9\xd5\xd8\xe8\xc2\x2b\xfa\x7c\x4f\x9d\x15\xf1\xfb\x25\xf1\x1a\xba\x2d\xe7\xcf\x18\x7f\xe4\xa2\x00\x0a\x08\x78\x49\x3d\x00\x61\x4c\x3d\x01\x33\xf1\xa5\x2f\x13\x68\x4b\xc3\xf1\xe5\xfc\x90\x1f\x6c\x12\xb0\xc5\xed\xe3\xdf\xb5\x36\x21\xd5\xd2\xaa\xe9\x65\xe5\xde\xed\x6f\x17\xa7\xa9\xb7\x13\xa6\xbd\xa6\xbb\x9d\x30\x61\x50\x3d\x9b\xda\xee\x79\xb3\xe9\xf3\x8c\x32\x64\xda\x53\x9c\x65\x0d\xda\xb6\xca\x82\x5b\xf7\x97\x81\xe3\xb0\x6e\xe4\xea\x04\xf2\xeb\x02\x0a\x08\x78\x51\x3d\x00\x61\x54\xbd\x4b\xb1\x32\xca\xda\x29\x43\xb3\x6e\x9b\x47\x64\x55\x44\x2e\x4b\xf7\x1f\x72\x08\x55\x7a\x75\x79\xee\x67\x32\xb1\x44\x29\x51\xb4\x32\x0a\x08\x78\x55\x3d\x00\x61\x58\xbd\x70\x5d\x87\x3b\x86\x92\xac\xe6\x84\x16\x06\x8f\xbc\x5a\xe9\x86\xfd\x47\xd3\x3c\x83\x45\x1e\x69\x3d\x3e\x3b\xe8\x70\x9c\xe8\x27\x39\x0a\x08\x78\x59\x3d\x00\x61\x5c\xbd\xac\x12\x73\xc5\x8e\x06\x29\xc1\x89\x41\xb4\x90\xf1\x62\x01\xc3\x70\xbe\x5c\x63\xa5\x53\x0a\x47\xb4\x36\xe7\xcb\xbb\x59\x4f\xb7\xe7\x32\xbc\xae\x1e\x80\x30\xb0\xde\xf5\xf3\x2d\x6a\x35\x56\x37\xfe\xf1\x3d\x38\x57\x4c\x57\xfa\x46\xe5\x0f\x97\x5b\x5a\xe6\xb9\x4f\x7f\x9d\x58\x53\x51\x32\xaa\xa7\xdb\xf3\x0c\x5e\x58\x0f\x40\x18\x59\x2f\x3f\xcc\xd1\xa5\x3e\xd0\x20\x41\x63\x36\x32\xf2\xb6\x55\x50\xb5\x2f\x6d\x9f\x77\xfd\xa5\xe5\x5b\x47\x1e\x4f\xa9\x68\x31\x77\x6d\xef\x4c\x78\x65\x3d\x00\x61\x68\x3d\xa6\xb0\xd3\xb7\x82\x4f\x7c\xca\x31\xe0\x8e\xe7\x82\x74\x65\xbc\xfd\x7e\x47\x79\x6f\x6c\xf8\xd6\xe9\x49\x19\x7c\x1a\x60\x6d\x15\x41\x01\x01\x2f\xad\x07\x20\x8c\xad\xe7\x1a\x4f\x25\xe6\x3b\xac\x37\xe5\xef\x14\xf5\x09\xe5\xbc\xb7\xbc\x21\xd5\xa3\x78\xf5\x27\xbd\x70\xf9\x8b\x76\xc3\x99\x0a\x63\x3e\x14\x10\x70\xda\x7a\x3b\x61\xda\xeb\xfc\x63\x27\x4c\x18\x5c\x6f\xe1\x5e\x1a\xb9\xe3\xf2\x16\x8b\x84\x05\x39\x6d\xd1\xa3\xad\xce\xf7\xb1\x3c\x47\xd2\xcf\xcf\x92\x1d\xce\x4b\x52\x1c\x1d\xbd\x03\xa1\x80\x80\x17\xd7\x03\x10\x46\xd7\x33\x75\x48\x8b\xd1\x9a\x8b\xe0\x79\xeb\x64\xe7\x94\xfe\x95\xa5\x39\x35\xa0\xab\x2d\xce\x2a\x34\xf1\x8e\x32\x0b\xb3\xea\x89\x6f\x3a\x28\x20\xe0\xd5\xf5\x00\x84\xe1\xf5\xd2\x73\xd6\x67\x8d\x6a\x32\xcc\xe5\xcd\x74\xba\x78\x43\x87\x95\x75\xd2\xbe\x5b\x87\xd2\xce\x76\x93\x3e\x39\xc4\x6d\xbd\x2c\x20\x85\x02\x02\x5e\x5e\x0f\x40\x18\x5f\x2f\x2e\x2e\x7e\x23\xaa\xe4\x9b\xf6\x15\xba\xcc\x99\xfc\xb7\xb9\xec\x6a\xf7\xbf\xd9\x31\x74\xa6\x56\x88\x8c\x39\xc9\xbf\xaf\xd0\x13\x42\x01\x01\xaf\xaf\x07\x20\x0c\xb0\x27\xef\xc5\xf0\xf2\xd6\x68\x49\x40\x56\xa6\x5b\xf3\xf2\xb1\x73\x33\x5e\x62\xf2\xcd\x4a\x27\xa5\x95\x88\xab\x2d\x59\xf4\xef\xd1\x11\xa1\x80\x80\x17\xd8\x03\x10\x46\xd8\x33\x6f\xa2\xcc\xfb\xb3\x70\x57\xba\xab\xcd\x7e\x7f\xb4\xbd\xfd\xcd\x0f\x3e\x43\xb3\xef\x65\x4f\xa5\x7c\x26\x2a\x69\x2c\x50\xaa\xb1\x46\x01\x01\xaf\xb0\x07\x20\x0c\xb1\x97\xb9\xff\x12\x83\x53\x07\xc5\xa5\xb1\x0e\x7a\x5e\x7f\x99\xb4\x9b\xcf\xb7\x4e\xc4\x8b\xaa\xc1\xb1\x92\x7a\xcb\x1f\x86\xc5\x34\x69\x50\x40\xc0\x4b\xec\x01\x08\x63\xec\xd1\x7d\x5d\x9c\xb9\x9b\xfe\xb8\x80\x65\xdd\xf1\xe8\x59\x33\xf6\xcb\xed\xc7\x65\x38\xc8\xbc\x2b\x95\x93\x9a\x5a\x7a\xf3\xe4\x1f\x5c\x42\x01\x01\xa7\xb1\xb7\x13\xa6\xbd\x4e\x08\x77\xc2\x84\x41\xf6\xac\xac\x2d\x98\xbd\xaf\x96\x05\x0b\x54\xdf\x96\x44\x9f\x3f\x50\x71\x3d\xeb\x5a\xca\x50\xf4\xd7\xfb\xc3\x15\xf8\xa2\x3f\xcb\xc0\x76\x0b\x86\x17\xd9\x03\x10\x46\xd9\x93\x28\x5a\xf8\x4e\xc4\xbd\x7e\xe1\x7d\xaf\xa5\xf2\x6b\xa7\x79\x4d\xc5\x31\x19\xb6\xf9\x66\xe7\x45\xc7\xec\x8b\x41\x25\xce\x01\xd2\x28\x20\xe0\x55\xf6\x00\x84\x61\xf6\xd6\x0d\x51\xf6\xee\xa6\x8f\x2f\xb4\xae\x5c\x5b\x59\xa4\x3f\x9a\x0f\x29\x47\x70\x9e\xbf\x23\x0f\xbc\xa4\xfd\xaf\x2c\x0a\xbe\xa6\x40\x01\x01\x2f\xb3\x07\x20\x8c\xb3\x77\xe1\x23\xbb\xd6\x54\x53\x75\xd1\xca\x8b\x9a\x69\x32\x43\x0b\x12\xdb\xe9\x13\x9f\x3f\x13\x8d\x45\xca\x53\x1b\xad\x7f\x3b\xd3\x77\x18\x05\x04\xbc\xce\x1e\x80\x30\xd0\x5e\x5d\x97\x9b\xd2\xcb\x01\x31\x78\xd6\x6e\xa9\xa4\x36\x36\x39\xee\xfa\xd7\x97\x6f\xb2\x3c\xee\xc4\x77\x3b\x27\x3d\xbc\xf6\x40\xc8\x1c\x05\x04\xbc\xd0\x1e\x80\x30\xd2\x1e\x4b\x6e\xc5\x5a\x43\xd8\x94\x9e\xf8\xe1\xc5\x94\x89\x92\xc7\x3c\x62\x41\xad\x64\x0a\xed\xcd\xbf\x1f\xba\x8d\x19\xc9\xe7\xdc\xa5\x43\x01\x01\xaf\xb4\x07\x20\x0c\xb5\x67\xff\x23\xbc\x26\x52\x54\xfe\xcb\x67\x16\x73\xeb\xc7\xef\xbe\x4b\xd8\xe7\x37\xb1\x90\xdc\xf9\xf5\x6f\xb0\xce\x47\xe9\xa4\x40\x8a\x2a\x0a\x08\x78\xa9\x3d\x00\x61\xac\x3d\x97\x90\xbb\xc9\xba\xa4\xe4\x4f\x55\x35\xe2\x0b\x7d\x03\xbe\x12\xf5\xd4\x7f\x59\xcd\x1a\x6e\xfb\xe1\xd1\x28\x7b\xe3\xf8\xef\x8b\xdc\x28\x20\xe0\xb4\xf6\x76\xc2\xb4\xd7\x19\xfa\x4e\x98\x30\xd8\x5e\xf9\x43\x69\x7e\xd3\xa5\x67\x81\x3a\xfe\x73\xd7\xe8\x75\x25\x6e\xd0\x5d\x2d\x8b\x5f\xdd\xd0\x98\x24\x6f\x92\xaf\xf3\x6a\x24\xbe\x88\x02\x02\x5e\x6c\x0f\x40\x18\x6d\xcf\xcd\x28\x7b\x63\x23\x5e\xaa\x4e\x0b\x7c\xf3\x4b\x99\xb1\x51\x7f\x79\x59\x9c\xe9\x3e\xdf\xd9\x07\xfe\x24\xf7\x0a\xd3\x3f\x73\x1c\x42\x01\x01\xaf\xb6\x07\x20\x0c\xb7\xd7\xc3\xd4\x39\x85\x18\xde\x1a\xfd\x92\xb9\x44\x29\x6d\x99\x66\x5a\xe5\xce\xfc\x6f\x43\x30\xf3\xf5\x38\xbb\x40\x9f\xb0\x63\xee\x76\x60\xf1\x72\x7b\x00\xc2\x78\x7b\x7f\x73\x86\x62\x8b\x0a\x09\xe3\x17\x94\xe5\xcc\xb3\xe7\x52\x68\x1b\xa3\x42\x12\x45\xb9\xd6\x2c\xb8\xba\x69\x03\xaa\x84\xdc\x0d\x51\x40\xc0\xeb\xed\x01\x08\x03\xee\xe5\xed\x7f\x1f\x24\xab\x7d\x78\x39\xff\x08\x5c\x4c\x3e\x1a\xe0\x47\x9c\xc3\x69\x4a\x36\x32\x44\x4d\x36\x6b\x14\xfa\xae\x2b\x7c\xbb\xed\xc6\x0b\xee\x01\x08\x23\xee\xc9\x7c\xb9\x38\x40\x9e\xd3\xad\x32\x1a\xd0\x34\x33\x7e\x51\xbd\x7e\xfc\x97\x8e\x8a\xa5\xcb\x6a\x28\x85\x76\x58\xd8\x9b\x2e\x62\x07\x14\x10\xf0\x8a\x7b\x00\xc2\x90\x7b\xb7\x03\x03\xd6\x3f\xfd\xba\x5b\x92\x8c\xdc\x64\x78\x2d\xac\xac\xa8\x48\xd3\x4c\x73\xd6\x45\xde\xad\x7e\xea\x9c\x32\x7c\x9d\x6f\x7b\xf6\xc3\x4b\xee\x01\x08\x63\xee\x75\xdc\xd9\xf8\xb1\xa9\x74\x8d\xf6\x4d\x1b\x6f\x59\xda\x8f\xd7\xdc\xb3\x65\x55\x33\xa4\xf7\x22\xa7\x5d\x0e\x4e\xf6\x96\x2d\x9a\x6c\x3f\xab\xff\x68\xee\x95\x6b\x8e\x65\x7d\xac\x77\xa9\xbe\x91\x2c\x94\x19\x58\x2a\xa9\x5c\xf1\xc7\xef\xd9\xe7\xef\x5b\x11\x51\xc6\x31\x06\x37\xcd\x25\x47\x30\x97\x7d\x45\x4a\x86\x35\x66\x75\x24\x01\x99\x42\x63\xc1\x6d\xe5\x8b\x21\x5b\xfc\xc4\xd6\xe7\x44\xa5\x39\xde\x05\xab\x85\x04\x4e\x7e\x1b\xdc\x55\x1a\x72\xf5\xe4\x6b\x9a\xc6\x81\x9c\x37\x8a\x01\xfc\x22\x47\x5a\x0f\x5d\x7a\x5a\x74\x46\xe9\x79\xe6\xf7\xa7\x92\xca\x56\xd3\x69\x12\x5d\xbb\x7f\x1c\xf4\xc5\xbd\x8d\xf8\xce\x17\x71\x86\xa4\x31\x35\xd7\x85\xfc\x26\x7e\x75\x09\xa4\x07\x29\x86\x59\x1d\x70\xbe\xc1\x29\xf9\x4c\x27\x73\x57\xa9\xc6\xdc\x01\x2b\x65\x29\xc9\xee\x82\x5b\xfd\xee\xae\x9a\xcc\xa3\xa7\x25\xd6\xf9\xbe\xf9\x46\x5c\x28\x61\x7b\x18\xf0\xf8\xbe\x85\xc3\xae\xd2\xdb\x4c\x8f\xa7\x2a\x93\x9f\xe6\x89\xab\x84\x56\xa5\xac\xea\xdd\x2b\x28\xd3\xbf\x11\x49\x33\xde\xee\x58\x54\x6d\xd0\x41\x60\xa8\xdc\x55\xba\xbf\xfd\xc3\xa0\xa6\xfc\xd2\xbd\xc5\xe1\xf3\x06\x56\x6d\x03\x30\x67\xd6\xd6\x77\x5a\xc3\xf6\x28\x49\x0a\x07\xa7\xcc\xa8\xc1\x07\xbb\x4a\x0b\xb5\x8d\xbb\x5b\xc9\xe3\x19\x65\x64\xb8\x72\x97\x2f\x1e\x13\x20\xbc\x04\x34\xa5\x1a\xef\x1b\xd2\xfc\x87\xdf\x1b\x4f\xfc\xa2\xdf\x55\x6a\x55\xf8\x25\x94\xfe\x3c\x75\x11\x14\x40\xfb\xe6\x10\x27\x87\x7d\x59\xd5\x59\x92\x9c\x4c\xdd\x13\x8d\x3f\xfe\x75\x7d\xec\xca\xaf\xfb\xdf\x65\xdf\x5e\x4f\x75\x67\x45\xc3\xa0\x7b\x08\x11\x7d\x4e\x67\xe7\x33\xe7\xae\xd2\xde\xa8\xe9\x4a\xfd\x44\xd7\x19\xd5\x02\x2f\xf2\x9c\x1b\xfe\x89\xf2\xb1\x4c\x31\xcf\x25\x50\x40\xc0\x8b\xee\x01\x08\xa3\xee\x89\xf3\xe4\x9d\x15\xc8\xc9\xeb\x2d\x6e\x8c\xb9\x28\xb4\x6e\x4b\x00\xc3\x77\x46\x5d\xe5\x6a\xbe\x29\xaf\x4c\x1f\x54\x89\x52\x30\x40\x01\x01\xaf\xba\x07\x20\x0c\xbb\x77\x37\x62\xc3\x72\xea\x24\x87\xa4\x75\x9e\x27\xbb\xbe\xde\xf7\x53\x6e\x9b\x72\x4a\x0b\xbd\x3c\x4e\xd6\xed\xa3\x3d\x26\x63\x96\xee\x28\x20\xe0\x65\xf7\x00\x84\x71\xf7\x2e\xfa\xde\x3b\x59\xce\x50\x4f\xcb\x40\xe6\x5b\x17\xf3\x66\x7d\x2b\x8f\x5c\xe7\x96\x80\x65\x82\x02\x6d\xde\x95\xdc\xcd\x77\x08\x0f\x0a\x08\x78\xdd\x3d\x00\x61\xe0\xbd\x7f\xcf\xa8\x13\xda\x2f\x17\xbd\x5f\xff\x0c\x6e\xaa\xb9\xe4\x06\x0c\x8a\x96\xdc\x2d\xf4\xac\xaa\x6c\xa4\xe2\x7d\x9d\xba\x1f\xde\x6e\x73\xf0\xc2\x7b\x00\xc2\xc8\x7b\x2a\x6e\x3d\x9e\xc9\x87\xb4\x9c\x23\xeb\x84\x3e\xde\xa2\x10\x39\x4a\xef\xd9\x12\x53\x3e\x30\x66\x33\x2c\xf5\x32\xdc\x4e\xed\xbb\x0d\x0a\x08\x78\xe5\x3d\x00\x61\xe8\x3d\xc5\x2d\xbe\xe4\x52\xf3\x2b\x17\x3a\xee\x7d\xd5\xf8\x3d\xe6\xef\xd7\xad\xdf\x3e\x48\xcd\xa3\x59\xf0\x68\x05\xa2\x57\x04\x81\xdb\xbd\x36\x5e\x7a\x0f\x40\x18\x7b\xcf\x72\x40\xc9\xe9\x2e\x5f\xb9\x83\x64\xb3\xfd\x78\x49\xd5\x83\xbc\xba\xd0\xdc\xcf\x5d\x88\xf9\x97\xc8\x1e\xdf\x1c\x6b\x9b\x51\x51\x14\x10\x70\xda\x7b\x3b\x61\xda\x6b\xdd\xd9\x09\x13\x06\xdf\x53\xac\x97\x7e\x84\x9e\x14\xf0\x9d\xd2\xe8\x47\x3e\x18\xca\xa9\x8e\xf7\xb4\x0f\xc8\x6d\xda\x55\xbf\x93\x9c\x77\x14\x36\x4e\xd3\x47\x01\x01\x2f\xbe\x07\x20\x8c\xbe\x67\xd8\xd3\x44\x60\x36\x39\xf4\xca\xb6\x36\x38\x68\x22\x96\x71\xa2\x9b\x51\x4a\xe4\xd5\x99\xfd\xf9\xd7\xf9\xb5\x94\xef\xf4\x10\x6f\x87\x09\xaf\xbe\x07\x20\x0c\xbf\xe7\x93\x20\x9f\x9c\x26\xfe\xf5\x53\xe3\xdb\xb4\xa9\xb9\x77\x2d\x6f\x34\x55\xaf\x2a\x4c\x2f\x96\xf1\x5a\x7a\x3d\xd5\x2a\x19\x31\x63\x44\x01\x01\x2f\xbf\x07\x20\x8c\xbf\xf7\x4b\xb9\x36\x3e\x46\x8f\xfc\xb4\xad\x2c\xbf\x02\x97\xdc\x99\x7a\xe1\x6b\x37\x46\x1f\xa7\x90\x50\x6d\x74\x0f\xf8\x49\xae\xc7\xba\xa0\x80\x80\xd7\xdf\x03\x10\x06\xe0\x9b\x14\x3c\x7e\x91\x45\xe0\xd2\x97\x0a\xd1\xe3\x6e\x76\xf6\x32\xcf\x19\x23\xb4\x5f\x6b\x8e\x4c\xde\x6e\x2b\x53\x65\x8b\x3e\x2c\xbd\x3d\x80\xe3\x05\xf8\x00\x84\x11\xf8\x5c\x97\xf8\xa6\x6d\x4f\x65\x73\x4c\xc0\xd1\x9f\x9c\x81\xa0\xac\x01\xf7\x2d\x48\x42\x40\x22\xb6\x79\xf3\x8b\x36\xcf\x81\x62\x61\x14\x10\xf0\x0a\x7c\x00\xc2\x10\x7c\xfc\x01\x14\x57\x2f\x8a\xb1\x74\x94\x35\x55\xc7\xe7\xf7\x4e\xf5\xc9\xd1\x7d\x12\xce\xbb\xf9\x5b\x66\xdc\xff\x6d\x4a\xe1\x97\x73\x5c\x28\x20\xe0\x25\xf8\x00\x84\x31\xf8\x1e\xa5\xfc\xdc\xac\x28\x57\x59\x30\x71\x7f\x4c\x7d\x48\xd7\x53\x97\x35\xc1\x6c\x25\xeb\xf4\x41\xdf\xc0\xeb\x57\xa4\x1e\xaf\x4d\x71\xa0\x80\x80\xd3\xe0\xfb\xdf\x0f\x4c\xef\xb1\x33\xef\x84\x09\x83\xf0\xf5\x18\x05\xcf\x8a\xfc\x78\x4e\xef\x62\x19\x91\xd0\xa3\x38\xd1\x47\x55\x49\xff\x20\x59\x30\x94\xce\x67\xc1\x48\x95\xf6\xa6\xa7\x36\x0a\x08\x78\x11\x3e\x00\x61\x14\xbe\x6c\xc1\x0f\x24\xd4\xb9\xf4\xb4\x32\x21\xa7\xbf\x2c\x46\x90\xf1\xb4\xf0\x9f\x61\x53\xa2\x7d\x39\xe6\x33\x37\x62\x52\xce\x5f\x2e\x87\x02\x02\x5e\x85\x0f\x40\x18\x86\xef\x8f\xf3\xa1\xb0\x47\x1e\x43\x79\x5d\x39\x0a\xa7\x5e\xab\xdf\xa1\xbc\x12\x95\x62\x71\x46\x69\xc4\xa8\xd7\xf0\xd4\xa5\x0f\x1c\x3f\xa8\x51\x40\xc0\xcb\xf0\x01\x08\xe3\xf0\xe9\x1b\xb8\x56\x9f\x5a\x23\xeb\xb5\x8e\xea\x34\xfe\xf6\xec\xa0\xf0\xc1\x2b\x83\x67\x6b\x64\xb8\xa9\x39\xef\x52\x08\x44\x0b\x64\x5a\xa2\x80\x80\xd7\xe1\x03\x10\x06\xe2\x23\x75\xcd\x6e\x8c\x3a\x5d\xce\x43\xeb\x4e\x19\xf3\x70\x80\xd0\xf3\x2c\x64\x46\x4b\xea\xcd\x50\x82\x67\x75\x58\x58\x15\xff\xed\xb3\x28\x20\xe0\x85\xf8\x00\x84\x91\xf8\x74\xb4\x6f\x7d\xf4\x3b\xdd\x34\xa8\x52\x41\x34\xa6\xd7\xa9\x5b\x9e\xf2\xe4\x96\x6d\x33\x42\x5b\xfa\xf7\xb4\xed\xed\x1e\xeb\x2d\x19\x14\x10\xf0\x4a\x7c\x00\xc2\x50\x7c\xaa\xae\xf7\x55\xfb\x6d\x29\xa0\x67\xd5\x5a\x5d\xa3\x21\x34\x55\xaa\x31\xcd\x6d\xbc\xfd\x83\x43\x0f\xd3\xfa\xcb\x8f\x16\x4c\x6e\x0f\xc7\x78\x29\x3e\x00\x61\x2c\xbe\xe3\x29\xc9\xab\x97\x3f\xaf\x36\x71\x32\x44\x56\xe6\x49\x57\xd0\xb2\x44\x9f\x29\xa1\x73\x2b\xd2\x93\x75\x8f\x4e\xed\xb9\x92\xbc\x3d\x1c\xe3\xb4\xf8\x76\xc2\xb4\x57\xef\xba\x13\x26\x0c\xc6\x57\xf1\x3b\x63\x40\x44\x86\x81\x4c\xfe\xef\x13\x2d\xb2\x82\x26\xff\xdc\x33\xf7\x14\x2f\xdd\xe0\x7b\xfb\xfe\xfb\xa9\x27\x67\xea\x89\xb6\x07\x3e\xbc\x18\x1f\x80\x30\x1a\x1f\x8f\xf1\xaf\xeb\xb7\x2a\x91\xdb\xcd\x07\x66\x14\x6b\xaf\x09\x8b\x54\x92\x34\x94\xac\xfd\x96\x8e\x79\xa4\x39\x2e\xc3\x3c\x10\xb4\x1d\x58\xbc\x1a\x1f\x80\x30\x1c\xdf\xa9\x97\x33\x0d\x6c\x0a\xd6\x39\x0f\x69\xa2\xd5\x57\xce\x3c\xca\xff\x5c\xe1\x4b\xd3\xe2\x1e\xf0\x99\xc1\x60\xa1\xd3\x97\x6a\xc2\x0d\x05\x04\xbc\x1c\x1f\x80\x30\x1e\x5f\x91\xb1\x52\x02\x6a\x68\xff\xca\x91\x61\x91\xd2\xe3\xf7\x09\x6a\xf5\x9a\x85\x71\xd3\x43\x85\xec\xa6\x19\x55\xb9\x0c\x1a\xec\x54\x28\x20\xe0\xf5\xf8\x00\x84\x01\xf9\xba\xf5\x22\x1c\x1f\x14\x6b\x4b\x4d\x8f\x3c\x1a\xe9\x8e\x12\xaa\xf5\x99\xaa\xfa\x6b\xec\xa3\x2c\x46\x78\x55\xbf\xf1\x33\xe8\x8a\x3d\x0a\x08\x78\x41\x3e\x00\x61\x44\xbe\xb2\x57\xc1\x75\x5c\xa1\x0e\xc6\x76\x97\xf8\x7c\xee\xf3\xf9\xab\xb8\x77\x90\xb7\xd6\xce\x37\x7e\xb2\xe4\x6b\x38\xe9\xaf\xce\xb1\x3d\x54\xe2\x15\xf9\x00\x84\x21\xf9\xcc\xb2\x4c\x2b\x37\x8c\xde\x2f\x08\x47\xf9\x50\x25\xd8\x1b\xd2\x0d\xfa\xc1\x4b\xf7\xad\xe1\xc3\x86\xc7\x3e\xd4\x1f\x7d\xf4\x46\x08\x05\x04\xbc\x24\x1f\x80\x30\x26\x9f\xb6\xa6\x7e\xd8\x77\xa5\x97\xbc\xd3\xaa\x97\x87\xf4\x1e\xa4\xb5\x66\x31\x40\x0f\x8c\xec\xd9\x4d\x3b\x3d\xe5\x3f\xeb\x4a\x51\xd8\xa1\x80\x80\xd3\xe4\xdb\x09\xd3\x5e\xd3\xdd\x4e\x98\x30\x28\x9f\x0f\x5d\xf4\x05\x05\x8a\x47\x73\x9d\x71\x7d\x5e\xaf\x6e\x6c\x5d\x1e\x75\xaf\xb6\x6f\xce\x9e\xab\x0a\x0a\xe6\xbc\x6d\x91\x72\x44\x00\x05\x04\xbc\x28\x1f\x80\x30\x2a\x5f\x6a\x48\xa9\x20\x67\x8f\xd6\x54\x9e\x43\x4c\x08\xe9\xab\xe6\x31\x03\xa6\x91\x63\x74\xdf\x95\x0f\xcc\xba\x38\xde\x98\x96\xd9\xd0\x44\x01\x01\xaf\xca\x07\x20\x0c\xcb\x77\x9f\xd4\x51\xca\xe4\x08\x6b\x74\xb7\x21\xdd\xbf\xb9\xbe\xd4\x43\x8e\xeb\x9f\x72\x3c\x5c\x98\xb8\xcc\x8f\xc6\x9c\xa7\x97\xfa\xca\x8f\x02\x02\x5e\x96\x0f\x40\x18\x97\xef\x93\xe7\xb8\xc5\xc2\xc7\x95\x6c\x24\x74\x2c\x71\xff\x8f\x93\x6b\x44\xc1\xa3\x36\xd2\x06\xfa\xfe\x87\x02\xf2\x2a\xd3\x4e\x65\x6c\x87\x09\xaf\xcb\x07\x20\x0c\xcc\xd7\x9f\x90\xbc\xcc\xbd\x68\xf9\x9d\x84\x68\x72\x56\xaa\xeb\xf0\xd7\xe8\xec\x7a\xd7\xa7\xe0\x00\x5f\x63\x4b\x49\x83\xed\xf3\x9b\x16\x28\x20\xe0\x85\xf9\x00\x84\x91\xf9\xfc\x85\xbb\x42\xee\xe9\x0f\xf4\xe5\x65\x1d\xaa\x4a\x9e\x9f\xf0\xfc\x6d\x73\xba\xad\xa2\x2d\x30\xe9\x5c\x87\x6b\xc0\x8b\xe3\xa1\xcc\x28\x20\xe0\x95\xf9\x00\x84\xa1\xf9\xf4\x7e\x1c\x79\x74\xe2\x16\x8d\xdb\xf9\x6a\x38\x91\xa6\x88\x7e\x4e\x5f\x94\x4d\xe7\xb9\xb6\x92\xf0\xf5\x31\x13\xd5\xf4\x03\x77\x0d\x51\x40\xc0\x4b\xf3\x01\x08\x63\xf3\x95\x1a\xac\xc6\x5e\xf4\x72\x6d\x6f\x44\x66\xde\x0a\x75\x2f\xaa\x0a\x9e\x88\x13\x7d\x7e\x8b\x54\xb5\xa4\x56\xe3\xb3\x77\xc5\x27\x35\x14\x10\x70\xda\x7c\x3b\x61\xda\xeb\xfc\x63\x27\x4c\x18\x9c\x4f\x32\x64\x2c\x43\x4a\xa6\xf1\xe0\x7d\x9a\xb9\xd5\xc0\x9c\x61\xcd\x4e\xca\xe9\x14\xb6\x9b\xc5\xd4\x8b\x17\xa6\xab\x9a\xcb\x2f\x9e\x44\x01\x01\x2f\xce\x07\x20\x8c\xce\xd7\x2c\xcb\xd4\xd6\xe0\x21\xff\x71\xcb\x42\xed\xc3\x85\x9c\xc2\x1b\x04\xad\x46\x0f\xeb\x25\x63\x72\x16\xaa\xf2\x43\x1e\xf6\x1c\xc4\x28\x20\xe0\xd5\xf9\x00\x84\xe1\xf9\xde\x74\xd9\xdc\x92\x33\x8a\x7d\x7c\xfc\x0f\xa4\x7c\xc7\xed\xb8\xe4\xb2\x69\xd9\x04\x9b\x54\x56\xd7\xe3\x4b\x49\x5c\xdc\xaf\x84\xe9\x51\x40\xc0\xcb\xf3\x01\x08\xe3\xf3\x3d\x75\x27\xf9\x91\xa9\x17\xce\x1c\x83\xf4\xe4\x31\x26\xc5\x2f\x10\x19\xe4\x0c\xd5\x2b\xa8\xbd\x8e\xf1\x66\xf0\xee\x2f\x19\x3f\x80\x02\x02\x5e\x9f\x0f\x40\x18\xa0\xcf\x8c\x9f\x87\x2b\xd5\xe4\xa3\xdf\x48\x59\x4c\x74\x74\xbb\x54\x06\x31\x5d\x16\x43\x5e\xe8\x65\x5e\xc6\xc1\xab\xdd\x32\xba\x95\xe2\x28\x20\xe0\x05\xfa\x00\x84\x11\xfa\xa4\x3e\x73\xa4\x7b\xd2\xe9\x6f\xbd\xe4\xf9\x63\xad\xa1\x1f\xbb\x5a\x2a\xfb\xcc\xdd\x40\xe5\xc5\x35\xcf\xc1\x98\xc8\x5c\xae\x35\x26\x14\x10\xf0\x0a\x7d\x00\xc2\x10\x7d\x7a\x1c\x64\x7f\x5c\xb2\x27\x06\x1c\xb7\xde\xaa\x2b\x3d\xe8\xcd\x6b\x43\x99\x5d\x9b\xe5\xe8\x4e\xea\x05\xad\xc6\xdb\x6a\x9b\x40\x28\x20\xe0\x25\xfa\x00\x84\x31\xfa\xf2\x87\x4d\x9e\x0d\x2c\x30\x0e\x14\xf9\x30\xf4\xc7\xce\x98\xdc\x44\x9f\xf5\x3f\x8e\x10\x9f\x38\x5a\xfe\xa1\xf6\x99\x6b\xc5\xd5\xed\xf9\x12\xa7\xd1\xb7\x13\xa6\xbd\x4e\x08\x77\xc2\x84\x41\xfa\x66\x19\x2d\xf9\x12\x5b\x52\x5f\x54\xb9\x44\x49\x7c\xd3\x9b\xd4\x49\x48\xef\x48\x62\x33\x73\x93\xb4\x33\x3d\x33\xa3\xc3\xd4\x48\x82\x02\x02\x5e\xa4\x0f\x40\x18\xa5\x2f\x51\xca\x59\xaf\x6b\x6b\xc2\x5d\x7c\x3a\xc7\xb0\x40\x21\x98\xff\xd5\xa3\x37\x97\x56\xad\xd9\x64\xce\x0d\x8c\xc4\xa2\xd7\xbe\x2b\xa3\x80\x80\x57\xe9\x03\x10\x86\xe9\xcb\xa8\x37\x0c\x1f\xca\xec\x74\xaf\xaf\x09\xdf\xb8\xc1\xf0\x9a\x36\xfc\xba\x53\x89\x79\xf1\x6f\xfd\xa9\x49\x75\xad\xaf\xd5\xee\x9c\x28\x20\xe0\x65\xfa\x00\x84\x71\xfa\xb8\xfb\xe3\x49\x87\x66\x8b\xea\xfc\x96\x0a\x27\xfc\xff\xdc\xfd\xc6\x7a\x8a\xe1\xbe\xb5\x5e\xcf\x29\xa9\x89\x8a\x23\xd4\xa1\x89\x2c\x28\x20\xe0\x75\xfa\x00\x84\x81\xfa\xdc\x6e\xfc\x9d\x9b\xf3\x73\xe4\x26\xbb\x99\x54\xe7\xd5\x68\x17\x32\xfe\x5e\xf8\x5f\xf3\x54\xf4\x9f\xcf\xc4\x6d\x51\x85\x45\x27\x44\x50\x40\xc0\x0b\xf5\x01\x08\x23\xf5\x1d\xbf\x72\x39\x48\xd5\xe9\xee\x13\x45\x6d\xa6\x82\xd9\xfe\x90\xcc\xcf\xc5\x97\x15\x97\xfa\x02\x38\xe3\x6e\xae\xc1\x7e\xad\x41\xdb\xdd\x08\x5e\xa9\x0f\x40\x18\xaa\x4f\xe9\x69\xbb\xbb\x39\xe9\x6f\xc7\x10\xa3\x04\xe9\xdf\x6c\xa9\xe4\xe9\xac\x7f\x44\x55\x4b\xcb\x0e\xff\x6c\x2a\x4d\x18\x79\xa4\x26\x8f\x02\x02\x5e\xaa\x0f\x40\x18\xab\x2f\x2e\x3f\x57\x8e\xd8\xac\x18\xd6\x2a\xab\x27\xbb\xc9\x67\x24\x2e\x60\xdb\xd3\x7b\xbd\xfe\x90\x47\x4a\x69\xc9\x43\xa2\xb7\x7a\xb4\x28\x20\xe0\xb4\xfa\x76\xc2\xb4\xd7\x19\xfa\x4e\x98\x30\x58\xdf\x71\xf9\xd3\x7c\x57\x7a\x28\x2c\x3a\xa3\x9b\x4c\xfc\xa6\xa8\xbf\x97\x23\x7e\xc8\x69\x57\xd1\x14\xcb\x95\x0b\xef\x39\xbd\xfd\x8e\xa2\x80\x80\x17\xeb\x03\x10\x46\xeb\x4b\x3b\xc0\x5d\xfa\xb5\x20\x8d\xe7\x64\x56\xc8\xd8\x9b\x2b\xe9\xaf\xe5\x27\x75\xb3\x97\xe4\xdf\x23\xb5\x0d\x31\xee\xde\x6d\x83\xdb\xc3\x28\x5e\xad\x0f\x40\x18\xae\xef\xc2\xbc\xc2\xdc\xbf\x5a\x33\x93\xa3\x2e\x23\xe9\xe1\x47\xdb\x07\xad\xef\x25\x37\x58\x38\x1c\x27\x99\xfb\x9c\xd8\x5e\x4f\xf3\xc3\x09\x05\x04\xbc\x5c\x1f\x80\x30\x5e\x9f\xf7\x0d\xfa\x82\xd0\x16\x22\xef\x81\x4b\xbd\xd3\xab\x1e\x09\x35\xb5\xdc\xa7\x3f\x2a\xa8\x16\x7c\x7d\x4f\xd4\x6a\xfd\xac\x2a\x1c\x41\x01\x01\xaf\xd7\x07\x20\x0c\xd8\x77\xf9\xf2\x58\xfb\x1b\x2a\x69\xbb\xde\xbb\x3a\x6d\x19\xc6\x4c\xa5\xf2\x06\x71\x2b\xae\x41\x3e\x92\x21\xa9\x4b\xc9\xef\x42\xde\x93\xa1\x80\x80\x17\xec\x03\x10\x46\xec\x0b\x27\xbc\x74\xe7\x7b\xd7\xbf\xdf\x80\x97\xb8\xf2\xc4\x9d\xae\x74\x1b\x17\x41\x8d\x98\x63\xd4\xcd\x12\x35\xef\x4e\xba\xbd\x13\xe0\x46\x01\x01\xaf\xd8\x07\x20\x0c\xd9\xa7\x75\x70\x62\x8b\xeb\xca\x7d\x0e\xf7\xba\x4c\x9b\x68\xc5\x88\x1e\xfb\xb9\xf2\x2a\x19\xcd\x35\x36\x82\xa7\x95\x58\x52\xd8\xa8\x09\x0a\x08\x78\xc9\x3e\x00\x61\xcc\x3e\x51\x01\xa2\x55\xed\xca\x57\x26\xc6\xa4\x7e\xa1\x92\xd7\x68\x4e\x50\x34\xd2\xd4\xc6\x08\x5e\x37\xb7\x5d\x2e\xae\xcc\xb9\xc9\x43\x40\x01\xe1\x3f\x9a\x7d\x8c\x4b\xd3\xef\xd4\xc9\xa7\x69\x18\x40\xac\xa7\xce\xac\x9a\x73\xbe\xa7\x61\xd3\xc3\x16\x06\xfd\xe8\x35\x69\x67\x66\x09\xa7\x09\xcc\x65\x5f\xc6\xf3\x6b\x5d\x95\x01\x07\xba\xc2\x5c\x4e\xe7\xb0\x56\x32\x67\x45\x31\x96\x7e\xf5\x2c\xf6\x79\x98\x15\x14\x36\x5d\x2f\x56\xb3\xfb\x0f\xeb\xfe\xd6\xe6\x95\x5b\x57\x59\x87\x68\x75\xb7\x44\xb5\x46\x19\x1f\xbd\xf8\x3c\x4a\xef\xd1\xef\x67\xb4\x4e\xcf\xce\x27\x96\xbd\x67\xb9\xb0\xab\x94\xbe\xe9\xae\x8e\x27\x2b\x9f\xe6\xdf\x30\xaa\x16\x55\xa3\xee\x7c\x47\x72\x11\xd6\x17\x41\x05\x6e\x42\xeb\xb5\xb2\x57\xb6\x7e\xec\xbe\x42\xb4\x3e\x5f\x07\xaf\x2a\x9c\x08\x3c\x3a\xc4\xe0\x92\x96\x7e\xf9\xce\x33\x65\xc9\xfe\x0f\xa5\x7f\x3d\x72\xf4\x88\x5c\x3d\xb4\xfd\xea\x76\x95\xbe\x95\x64\xe6\xff\x21\xd3\x7e\xc6\x5f\x20\x3c\xf4\x07\xcf\xa2\x61\xda\x34\x04\x0b\xc4\x8b\x8e\xfe\x6d\xb9\xd3\x12\x75\xe6\xc1\xc5\x5d\xa5\xa5\x3a\x69\x15\x4b\x3e\xda\x2a\x71\xea\xf7\xae\xac\x8f\xbe\x64\x7a\xe3\x60\xbd\x1c\x71\x7d\xe2\x75\xf2\x6b\xe9\x6b\xa4\xf4\xb9\xd7\x77\x95\x3e\xb2\x5b\x08\xd5\x9f\x6b\x2b\x1e\x91\xa6\x5d\x6b\x9e\xca\x0d\x3a\xcc\x3b\x0d\x18\x2d\xcc\x6a\xc3\xd3\x1e\x88\x05\xdd\x5a\x76\xde\x55\x3a\xf6\xbe\xb3\x67\x30\xb0\xd8\xf6\xd4\x8b\x92\x1f\xcb\x4d\x1e\x17\xb5\xbd\x65\x97\x5c\x97\x98\xcf\x8c\x75\xf2\x4c\x78\xc6\x48\x95\xde\xd8\x79\x09\x7b\x3d\x55\xcc\x4b\x58\x1f\x48\x14\x4c\x35\xf2\x7d\x99\x92\x16\x6b\x76\x76\x34\xeb\xfd\x04\xd2\x2d\x71\xc6\xa0\x25\x86\xde\xee\x84\xd4\x41\xf7\x98\x82\xdd\x77\xa3\xb1\xa7\xff\x76\x2b\xd2\x6c\xd9\x5b\xcf\xd1\x3e\x7c\x7a\xa5\x7c\xac\xa8\x8a\xc2\x3c\xd3\xf3\xa0\x4c\x3c\xc7\xc1\x75\x49\x97\x87\xbb\x4a\xdf\xfd\x59\xb7\x7f\x9e\xc0\xec\x30\x79\xfa\xcb\x2f\x92\x8e\xb1\x5b\x45\xf7\x3e\x44\xf1\x71\x99\x14\x6d\x30\xd7\x5c\xbb\x2f\x4a\xc9\xb3\xab\x94\xf6\x98\xa3\x29\xb3\x4a\x61\xe9\x63\xe6\x9c\x07\x2b\x7d\xd1\x4a\xcb\xec\x06\xb7\xbb\xaf\x29\xa6\x15\xb5\xc6\x84\xb2\xa7\xe9\xea\xef\x2a\x5d\xfb\xc1\xf5\x24\xe5\xaf\x92\xb6\xe4\x5b\xc5\x2c\xf5\x53\x9d\xaf\x0f\x97\xa5\xaa\xac\xc5\xf5\xf5\xfd\x30\xb4\xf3\xe2\xd4\x67\x4c\xda\x55\x7a\x64\xd6\xa8\xf6\xa1\x7b\xe9\xea\xe4\xe0\xea\x7d\x0e\x56\xff\xfb\x49\x03\xa2\xf1\xb3\xf7\x9c\xe8\x45\xcc\xc5\xaf\xec\x2b\x6b\x56\xda\x55\x5a\x23\x03\xab\xe9\x2d\xe6\x9d\xe0\x16\x61\xc8\xdc\x34\x34\x82\xea\x99\x17\x0b\xe2\x64\x9f\xc7\x28\x67\xb0\x0c\x9e\x9f\xd1\xa3\xdd\xfd\xbb\xaf\xf9\xfd\xb6\x0a\x02\x0d\x4b\xbf\xeb\x9f\x8f\x88\x46\x5b\xb9\x87\xf2\xfb\xe7\x3f\x5d\x78\x50\xaf\x19\x7a\x84\xeb\x5c\xd7\x99\xff\xfb\x2d\xd5\xbd\x9e\xea\xff\xdf\x56\x60\x0c\x9c\xe8\xe0\x5a\xb3\x3f\xf7\xa1\x39\xcc\x08\xa7\x69\x39\x48\xb1\xbb\x73\xad\x2b\x9d\xd0\xcc\xca\xe4\x52\xfd\xa5\x99\x47\x20\x96\x57\x41\x01\x82\x1b\x4e\x84\x31\x70\x62\x5b\xe2\x95\x6b\x73\x22\x91\x6b\x19\xa1\x3a\x34\x97\x2a\xb9\x02\x6f\x52\x14\x3c\x18\xf6\x96\x8e\xc8\xfb\x25\xcc\xa8\xc1\x99\x6c\x89\x02\x04\x37\x9c\x08\x63\xe0\xc4\x81\xc1\xda\x4d\xeb\x7a\x61\x88\x3d\xea\x75\x04\xcf\x6f\x22\x85\x5a\x23\x67\xeb\x2f\xe2\x42\x01\xde\x12\x17\xea\xbd\xef\xc9\x9d\x45\x01\x82\x1b\x4e\x84\x31\x70\xe2\x90\x70\xe4\x5f\xb7\x56\x2e\xed\x94\x34\xf2\x9f\x0a\x8a\x7c\x62\x7c\xad\x7d\x99\x39\x0f\x7f\xb8\x85\x1a\x79\x53\xd8\xcb\x86\xa9\xa1\x00\xc1\x0d\x27\xc2\x18\x38\xf1\xae\xde\xe1\x4d\x5e\x8a\x43\xc2\x97\xcb\x4e\xf3\x6a\xb7\x6b\x8d\x69\x69\xfe\x9d\x44\x05\xf3\x09\x4b\xaa\xbf\xe4\x38\x3c\x8b\x8f\xa2\x00\xc1\x0d\x27\xc2\x18\x38\xf1\xe8\x5b\xea\x67\xd9\x25\xa2\xef\x9e\xe9\xc8\x9b\x9f\x6f\x7e\x4b\x1c\x5a\xb5\xfa\xc4\xd1\xa4\x8b\xaa\xae\x54\x6e\xe8\x3b\x58\x36\x44\x01\x82\x1b\x4e\x84\x31\x70\x22\xa3\xfa\xfc\x91\x37\x15\x45\x2d\x92\x16\x09\x5d\xcc\x9e\xb6\x53\x57\x08\x4d\x2f\x74\xb4\xc8\xe3\x8e\xe8\x3c\x6a\x22\x35\x3e\x21\x89\x02\x04\x37\x9c\x08\x63\xe0\xc4\xc9\xce\xf9\x2e\x0d\x86\x73\x06\x55\x02\x63\xa1\x9f\xe3\xc8\x9c\x23\xf2\x3d\x87\x24\x9a\x4e\x47\xac\x0b\xe5\x32\x06\xe6\x3c\x55\x44\x01\xf2\x1f\xe1\xc4\xbd\xd6\x9d\x9d\x30\x61\xe0\xc4\xf9\xb5\x75\x01\x07\x47\x75\x6e\xda\x1c\x2b\x51\xe5\x76\x4e\x4b\xd9\x89\xea\x67\xa4\x13\xd1\xec\x56\x76\x71\x92\x3c\x4a\x5f\xac\x50\x80\xe0\x86\x13\x61\x0c\x9c\x58\x21\xf0\xa5\x9c\xcf\xa5\xed\x70\x38\x24\x7d\x2e\xc5\xae\x91\xf9\xbb\x7e\x68\x53\x67\xea\xd4\xfd\xf2\xa6\x79\xf6\xa7\x77\x9d\x19\x51\x80\xe0\x86\x13\x61\x0c\x9c\xe8\x41\xce\x46\x3f\x1c\x7e\xd7\xb7\x67\xe5\x81\x96\xb5\x5d\x80\x47\x6f\x87\xe7\x11\xb2\xdb\x1e\xb5\xe1\x96\xdd\x69\xb4\x9f\xf5\x61\x14\x20\xb8\xe1\x44\x18\x03\x27\xf2\xcd\xa9\x72\x3d\x4e\x39\x9e\xfd\xfe\xd8\x2b\x7a\x72\x09\xe9\xe7\x42\x7f\x1a\x6b\xff\x68\x3a\x0e\xdd\x6e\x70\x49\xa6\xa3\x9d\x15\x42\x01\x82\x1b\x4e\x84\x31\x70\x22\x77\x33\x9a\xbe\xc4\xde\x58\xa6\xe2\xa4\x36\x5b\x93\x30\x57\xdb\xc8\x6e\x55\xa0\xeb\x98\x26\xf1\x42\xff\x3b\x6b\xfd\xf7\x23\x3a\x28\x40\x70\xc3\x89\x30\x06\x4e\x3c\xf6\x6f\xb3\xe5\xf3\xbe\x47\x4f\x17\xa4\x43\xfe\xb1\xbf\xfa\xad\xd7\x57\xf8\xe4\x74\xd8\x53\xdd\xb0\x53\x33\x69\xba\x5b\x03\xb7\xe4\x50\x80\xe0\x86\x13\x61\x0c\x9c\xf8\xe4\x75\xff\xb9\xf7\x16\xcc\x86\x5b\x94\x2c\xdd\x08\x2b\x8f\x8d\xf3\x6f\x4e\xed\xa7\x47\x49\x98\x3f\x31\xcf\x1a\x3c\x18\xa7\x56\x46\x01\x82\x1b\x4e\x84\x31\x70\x22\xf7\x6a\x7e\xee\x4b\xae\xf4\xad\x80\xc3\xd2\x97\xaf\x6a\xfb\x27\x7e\x1d\x5c\x57\xe0\xcc\x31\x7e\xd6\x3a\xfb\xb0\x5e\xfb\x4b\x35\x82\x02\xe4\x3f\xc2\x89\x7b\xed\xcc\x3b\x61\xc2\xc0\x89\xc8\x3e\xd5\x77\xbe\x19\x4c\x11\x44\xcf\xbf\x72\x3e\x3a\x4a\xc3\xb1\xf2\x2b\x72\x96\xfe\xdb\x49\x8f\xbf\xb3\x6f\x45\x0c\x2f\xd7\xbb\xa1\x00\xc1\x0d\x27\xc2\x18\x38\x91\x65\xe4\xa6\xfe\x22\x11\x47\xcd\xd4\x42\xbd\x4a\x06\x03\x0b\x2b\x49\x8f\x6e\xa5\x76\x64\xd2\xaf\xf0\xb5\x97\xad\x25\x1a\x26\xa4\x28\x40\x70\xc3\x89\x30\x06\x4e\xdc\x7f\xde\xe0\x5c\x7a\x55\x3c\x83\x79\x55\xdf\xa9\xb4\x79\x87\xbf\xed\x7e\x7c\x9d\x0c\x65\x56\xa6\x2f\x22\x85\x57\x4d\xf2\xfe\x48\xa1\x00\xc1\x0d\x27\xc2\x18\x38\xf1\x20\xe3\xdd\x23\xba\xee\x86\x50\xf9\x77\x5f\x97\xb7\x53\x66\x15\x5e\x37\x9b\x59\xde\xba\xca\xdc\xbc\xa2\xb9\x0c\xdf\x15\x1f\xbf\x80\x02\x04\x37\x9c\x08\x63\xe0\xc4\x82\x85\x37\xcf\xce\x07\x45\xee\x7f\x5c\x39\x76\xcf\xe7\x4f\x45\x81\xab\x30\x92\x2e\xca\x9a\xaa\x7a\xe5\xea\xba\x51\xa8\x66\x8c\x07\x0a\x10\xdc\x70\x22\x8c\x81\x13\x4b\x6a\xdd\xb2\xcc\x7a\x7d\x6b\x5a\x47\x4e\x32\xd4\x2f\xca\x93\xde\x3d\xf0\x99\xa5\x90\x4c\xaf\xa3\x48\x91\xfb\x48\x99\xd5\x14\x3b\x0a\x10\xdc\x70\x22\x8c\x81\x13\xed\x3b\x38\x85\x2c\x7a\x8a\xc6\xab\x5e\x0b\xa5\xb4\xcb\xde\x31\xfb\x9e\x7a\xdd\xf0\xb8\x1a\x81\xb2\xeb\xa6\xad\x93\xe0\xfa\x08\x3d\x0a\x10\xdc\x70\x22\x8c\x81\x13\x43\x64\x27\xe6\x1b\xff\x6d\x7d\x66\xe2\xb6\x38\x69\x7e\x38\xec\x52\xac\x44\x2c\xc9\xc9\x64\x22\x9f\xe7\x75\x93\x33\xc8\x83\x02\x6a\x14\x20\xff\x11\x4e\xdc\xab\x77\xdd\x09\x13\x06\x4e\x0c\x1b\xac\x60\xfb\x60\xbc\x3a\xe2\xdb\x79\x5b\x90\xa6\x2e\xab\x1f\x71\x7d\x98\x76\x9f\x76\x42\xf9\x9a\x4d\x18\xf9\xec\x63\x59\x7b\x14\x20\xb8\xe1\x44\x18\x03\x27\x7e\x13\x37\xf9\x6e\xfd\xb9\x34\x5a\xe0\xfc\xa7\x12\xe5\xda\x9e\x3b\xa7\x1d\x9e\xd2\xbd\x8b\xbb\x11\xf7\x58\x8c\x32\x80\x4c\x93\x73\x3b\x4c\xb8\xe1\x44\x18\x03\x27\x8e\x4c\x83\xf0\xa4\x77\xa7\x28\xbd\xf6\x57\xd1\x71\x8a\x18\x57\xac\xa8\xb2\x17\x13\x17\xbc\xa8\xa3\x03\x9c\x5d\xec\x5a\x56\xdc\x28\x40\x70\xc3\x89\x30\x06\x4e\x1c\x61\x8d\x4b\xcb\xb4\xce\x6b\xa1\x62\x3e\x4f\x4e\x64\xe2\x47\xff\x7c\x45\x51\x2f\x8a\x20\xb0\xef\xc7\x8b\x7e\x5d\xad\xa0\x71\x56\x14\x20\xb8\xe1\x44\x18\x03\x27\x26\x97\x8d\x88\x74\xb0\x3e\x93\x8c\xfa\x2d\xd5\x53\x7b\x2f\x3d\xfb\x45\x80\xcc\x1d\x0b\x09\xce\x02\xd5\xe0\xd4\x92\xf8\xe0\x42\x13\x14\x20\xb8\xe1\x44\x18\x03\x27\x16\x5a\x4c\x19\x99\x52\xb0\xb8\x52\xf8\xfa\x9c\xd7\x72\x14\x9e\xfb\x18\x31\x15\xb5\x5e\x6c\xc4\x92\x4e\x5a\xa9\xe9\xc1\x79\x71\xfb\x9d\xe3\x86\x13\x61\x0c\x9c\xf8\x95\x6e\x7e\xe4\xe7\x3b\xb9\xd0\x3f\xbc\x9e\x31\x3e\x63\xa9\x94\x53\x35\xb7\xeb\x15\xd3\xea\x93\x85\x52\xfe\x9d\x93\x48\x7b\xa2\x8a\x02\x04\x37\x9c\x08\x63\xe0\x44\x3e\xaa\x17\xc5\xfc\x7e\xb7\x42\x46\xda\xec\x6a\x37\xd2\xf3\xf4\x1f\x9b\x59\xa8\xf2\xf3\xb8\xf8\x59\x58\xc1\xec\x81\x42\xe3\x02\x28\x40\xfe\x23\x9c\xb8\xd7\x74\xb7\x13\x26\x0c\x9c\x78\xc5\x64\xf1\x90\x9e\x9f\xda\x52\x11\xe7\x01\xbe\x66\x7b\xd3\x5a\xd9\x3f\x0e\x9e\xc1\xb2\xcf\xa5\xd3\xb5\x9e\xaa\x95\x96\x8e\xda\xa2\x00\xc1\x0d\x27\xc2\x18\x38\x71\xe3\x73\x46\xc7\x96\xce\x79\x8f\xbc\x19\x35\xd9\x7b\x4d\x7f\xec\xd8\xa0\x3b\x87\x15\x6b\x99\x9f\xf3\x58\xf4\x65\x57\xbb\x67\x6c\xcf\x01\xb8\xe1\x44\x18\x03\x27\xf2\xca\x18\x33\x8b\x0c\x58\xd2\x7f\x92\x2f\xa6\x6d\x7a\x61\x34\x82\xf0\x20\xe8\x92\xf1\xa4\xf2\xfb\xcd\x20\xae\x1a\xea\xcf\x2e\x28\x40\x70\xc3\x89\x30\x06\x4e\x3c\x30\xe2\xd0\x76\x7c\x63\x6c\x2b\x3b\xf1\xfc\x9b\xfc\xf4\xe0\x39\x88\xe4\x07\x8d\xff\xb2\x50\xd2\xb8\xfa\x8d\xe4\x4d\xb1\xec\xed\x7f\x03\x37\x9c\x08\x63\xe0\xc4\x1a\xea\xf0\xcc\xc0\x1b\x46\x0c\x43\x1c\x1d\x25\x4a\x37\x7b\x8a\xe5\xaf\x3a\x40\x91\xed\xbc\x07\xfd\x0f\xe4\xec\x0f\x8f\x77\x71\x44\x01\x82\x1b\x4e\x84\x31\x70\xe2\x7e\x3a\xa7\xf0\xca\xc8\xa4\x19\x7d\xbd\xe8\xf4\x03\x8f\x66\xb9\x42\x81\x75\xd0\xdc\xda\xa3\xbb\x97\x92\xf2\xc2\x8b\x0a\x39\xb7\x5b\x30\xdc\x70\x22\x8c\x81\x13\x8f\xda\xe7\x74\x38\x14\x86\x6d\x0c\xcd\x11\xfb\xb7\x9f\xf5\x4a\xed\x38\x15\x0b\x7d\x38\x39\xcd\xc1\x9b\xb4\x70\x88\x66\x71\x3f\x1f\x0a\x10\xdc\x70\x22\x8c\x81\x13\xe3\xa4\x82\x1f\xce\x7a\x9a\xe9\x52\xd5\x4e\xee\xa7\x2d\xd5\x34\x35\x9a\x8f\xfa\x23\x15\x33\x29\x91\x4e\x25\x61\x2b\xd2\x38\x4c\x86\x02\xe4\x3f\xc2\x89\x7b\x9d\x7f\xec\x84\x09\x03\x27\x86\xca\x90\x27\x20\xa7\x6a\xc2\x4f\x0a\xb3\x12\xae\x9c\x47\x85\x74\x68\x9b\x99\x83\xa8\x05\x35\xdc\x8c\xd3\x78\xf3\x4e\xa4\x1f\x41\x01\x82\x1b\x4e\x84\x31\x70\xe2\xda\xec\x24\x94\xfc\x4f\x5a\x29\x8c\xf2\x8a\x4b\x1e\xa4\x72\x15\xa5\x5d\x25\x49\x3d\xd3\x5c\x28\x39\x12\x14\xff\x4a\x37\x70\xfb\x23\xc4\x0d\x27\xc2\x18\x38\x31\x7f\x8d\x46\x5b\x50\xff\x97\x8a\xa3\xea\x87\xd7\x9b\x8b\xb1\x25\x93\x56\x23\x09\x14\x37\xef\xd9\x0c\x7e\x1d\x6c\x2a\x55\x66\x10\x44\x01\x82\x1b\x4e\x84\x31\x70\xa2\x42\x8f\xa4\x0f\x7d\x21\xd9\x8d\xcc\x97\x7d\xb3\x01\x88\xe9\x02\xdc\xa8\xc1\x38\x24\x66\x7e\xa0\xa1\x21\x77\xe1\x7c\xe8\xf5\xcb\x28\x40\x70\xc3\x89\x30\x06\x4e\x54\xba\x77\x5a\x71\x6d\x2a\xfc\x7d\xa8\x7b\xe9\x52\xfd\x08\x5b\x57\xaf\x8d\x10\x19\xf7\x55\xf1\x02\x2a\x85\x96\x19\x6f\xed\x53\xdb\x6d\x1e\x6e\x38\x11\xc6\xc0\x89\x01\x71\x5d\x2b\x7f\x0d\x1f\x68\x9e\xff\x19\xad\x7a\x84\x7c\xb0\x27\x6c\x86\x97\xe5\x99\xf2\x93\xb4\xb3\x93\x94\x2f\x0c\x39\xcd\xb6\x77\x3f\xdc\x70\x22\x8c\x81\x13\x97\x2a\x32\xc4\xfd\x05\xf6\xff\xab\xf4\xf2\x58\xf3\xd2\xf9\x53\x18\xd9\x5e\xd6\x7a\x7e\xf4\x52\x8c\xd1\xe4\xc5\xb3\x6f\x0f\x5c\xa6\x45\x01\x82\x1b\x4e\x84\x31\x70\x62\xa4\x69\x8a\xf5\x0f\xc9\xfc\xf3\x4b\x4f\xfa\x0f\x55\x34\x70\x06\x33\x92\x36\x9e\x3f\x4c\x1e\x25\x4a\x25\x0d\x05\x79\x67\xa9\x78\xa1\x00\xf9\x8f\x70\xe2\x5e\x27\x84\x3b\x61\xc2\xc0\x89\x0b\x9c\x1d\xfc\x4b\x76\x89\xc2\xab\xf5\x4b\x0b\xbd\xb9\x44\x3c\x3f\x85\x53\xb5\x13\x8f\x57\x40\x0f\x7f\x4a\xd3\x59\x8d\x7d\xdd\x7e\xb0\xb8\xe1\x44\x18\x03\x27\x6a\x38\xa7\x87\xbf\xea\xba\xfa\x4e\xd8\x68\x95\x58\x5a\x9b\xc2\x91\xc4\x95\x48\x62\x65\x9f\xdc\x1f\xf9\xfd\x8c\x01\xb4\xff\x4c\xd9\x50\x80\xe0\x86\x13\x61\x0c\x9c\x28\xf1\xb0\x40\x66\x80\x3d\x9a\xcf\x41\xf3\xf9\x78\x51\x31\xfa\xb8\xbf\xa2\xe1\x6b\x35\x12\x45\x9d\xc0\x73\x35\xd4\x3d\x78\x6c\x7b\xb5\xc5\x0d\x27\xc2\x18\x38\x91\x5c\xe5\xfa\x07\x56\x82\xf7\x2b\xb8\x8e\xff\x86\xb1\x0a\xe5\x6d\xcb\x6f\x42\x7d\x33\x8d\xef\xf6\x3b\x7e\xf8\xa2\xa9\xe0\xf6\x8d\x1f\x05\x08\x6e\x38\x11\xc6\xc0\x89\x66\x1a\x19\x96\xab\x34\x26\xa4\xfb\x25\xda\x8b\xd7\xa9\xe4\xd4\xba\xbf\x3c\x0b\xe9\x0f\x95\x03\x17\xe2\x52\x36\xd5\x1c\xff\x39\xa3\x00\xc1\x0d\x27\xc2\x18\x38\x71\xec\x8e\x5c\x4b\xe0\x70\x99\x44\x56\xf1\x49\xe0\x2d\x53\xa1\x81\x64\xc6\xce\xce\x7d\x9c\x79\x7e\x35\xae\xbe\x54\x52\x25\x40\x18\x05\x08\x6e\x38\x11\xc6\xc0\x89\x67\x9d\x66\x7f\x27\xb2\x8f\x78\x2c\x26\xbf\x78\x27\x62\x7b\xa3\xfb\x41\xb2\x65\x5b\xff\xc4\x8d\xd2\x08\xde\xa6\x2a\x5a\xbe\xd9\xed\x77\x8e\x1b\x4e\x84\x31\x70\xe2\xda\xf8\x83\x49\x4d\xf1\x70\xe6\x4d\xab\x22\xea\xcb\x4e\xd6\x71\x1a\xef\x3c\x96\x4c\x18\xbb\xa2\xba\x0f\x97\x72\x3a\xd8\x99\x6d\xef\x7e\xff\x11\x4e\xdc\xeb\x0c\x7d\x27\x4c\x18\x38\x31\x4e\xa2\x93\xf8\x54\x1f\xaa\x47\xee\xfe\xfe\xd7\xe7\x19\x0d\xd1\xd9\x06\x4d\xe3\x62\xa1\x6f\xdf\xc3\xdc\xdd\x16\xee\x3d\x9d\x3d\x86\x02\x04\x37\x9c\x08\x63\xe0\x44\x0b\xfd\x26\xee\xf2\xfa\x52\xf3\xd6\x73\x92\x19\xf5\x05\x7e\x77\x38\x4b\x36\x28\x26\x7c\xe5\x0b\x6b\xc9\xf9\x1b\x89\x8c\xcc\x3c\x51\x80\xe0\x86\x13\x61\x0c\x9c\x78\xbb\x52\x49\xfa\x76\x15\x47\x71\xb7\x74\xd6\x20\xaf\x7a\x86\xd1\xb3\x0e\xd7\xad\xd5\x0e\xcb\xb8\x9f\xb7\x59\xaf\xf6\x50\x4f\x8b\xa2\x00\xc1\x0d\x27\xc2\x18\x38\x91\xaf\xff\x8a\xa2\x46\x7c\x9d\xa4\x79\x28\xd3\x47\x1b\xfb\x5b\x2c\xe2\x17\x3e\x4c\x9e\xec\x30\xd9\x92\xa1\xcb\xb8\xa3\x3e\x7c\xdc\x09\x05\x08\x6e\x38\x11\xc6\xc0\x89\x24\xfa\xb7\xb5\xe4\xab\xad\xe4\x92\x27\x3b\x49\x1d\xea\x2a\x15\x22\xbe\x9d\xbf\x1d\x7e\x7a\x24\xde\x26\xb7\xab\xeb\xf9\x80\xf0\xf6\xbf\x81\x1b\x4e\x84\x31\x70\xa2\xdf\x84\x0b\x69\xd5\x47\xdf\x61\xdf\x87\x43\xb1\xa9\xe4\x13\xe3\x2d\x2b\xea\xa2\xfb\x1f\x87\x0e\x4d\x95\x4f\xf7\xb8\x6d\xce\x6f\xbf\x0f\xdc\x70\x22\x8c\x81\x13\xe5\xeb\xb5\xa8\x82\x62\x3a\x03\x7f\x8a\xf4\x28\x34\x68\x70\x54\x33\x37\x54\x3e\x88\x49\x8b\x05\xc2\xb9\x24\x8c\x72\xfb\x86\x5c\x51\x80\xe0\x86\x13\x61\x0c\x9c\xf8\xea\xd2\xe3\xb7\xd3\x35\xf3\xf6\x4f\x2f\xdd\x73\x00\x09\x6f\xf8\x16\x32\x04\x63\xd3\x25\x59\xc7\x0c\xef\x78\xd2\x3b\x64\xa6\x9a\xa3\x00\xf9\x8f\x70\xe2\x5e\xf7\xa2\x98\xcb\x3e\x65\xfe\xf4\x39\x29\xad\x02\x29\xf3\x0e\x8d\x4b\x17\x02\x21\x4e\xe7\x97\xf9\x92\xf9\x0c\x86\x73\x8a\x6b\xc6\xcf\xfe\xb2\x2d\x7d\xde\x55\x0a\x84\x6a\x0d\x0f\xaa\x34\x4a\x30\x6a\x8f\xd8\x09\x8f\x3b\x7f\x2b\xb8\x29\xf6\x4f\x7c\x45\xa3\x68\x41\xcc\x4a\xf6\xdf\xef\x37\x7f\x77\x95\xc6\x21\xe4\xd9\xb7\x25\x5f\xd5\x19\x24\xfe\x0b\x95\xda\x70\x3e\xa7\xbc\x1a\xf8\xfa\xe1\xd6\xab\x0b\xaf\xc2\x1b\x2a\xd4\x4d\xa3\x48\x76\x95\xb2\x94\x4c\xf8\x46\x2f\xe9\xb8\xf0\x3d\x49\x2f\xa5\xea\x67\xe6\x4a\xfb\x1b\xa8\xb0\x42\x64\xee\xd5\xa6\x64\xb4\x72\x22\x72\xd5\x62\x57\x69\xc2\x91\x9f\x0d\x6d\x79\x22\xd9\xe5\x68\xe1\x7e\x8a\x8c\xa1\x04\x8e\xa4\x68\xf2\x14\xd9\x3c\xb2\x1f\x96\x3d\x3e\xa7\x6e\xf7\x77\xef\x2a\xfd\x2e\x68\x48\x76\x71\x91\x96\x26\xef\x64\xe7\xd7\xcc\x2b\xa9\xd6\x8a\xb5\x4a\x2c\x1f\xf9\x78\x7e\x3e\x5a\xf0\xec\x09\x9f\x3d\xcb\xbf\xab\xd4\x23\x6c\x84\x39\xe9\x74\xb8\x18\x4b\xa4\x16\xf8\x7b\xe6\x62\xd6\xb5\xa7\x0c\x54\x93\xb4\xf0\x6a\xfc\xe8\xed\xa8\x10\xc6\x9e\xdf\xbb\x4a\x5f\x3c\xb4\x22\x91\x54\x88\x7f\xd2\xd3\x25\xc0\x26\xf2\x65\x44\xde\xb8\xb7\xf7\xe1\xbc\x3f\xd5\xfe\xee\xb6\x12\x95\xf3\x2c\xbc\x0e\xff\xbb\xec\xdb\xeb\xa9\xee\xac\x68\x18\x38\xd1\x6b\xe4\x33\x83\xad\x46\xdc\x40\xb7\xe7\xa7\x6f\x16\x1b\x71\xef\x74\x23\x63\x0b\xa8\xb6\x36\xfc\x56\x8a\xa8\xd3\x19\x72\xd8\xb6\xb7\x0a\xdc\x70\x22\x8c\x81\x13\x3f\x54\x39\x9f\x66\x68\xab\x0d\xfe\x2d\x12\x77\x16\xae\xa1\xf7\x8e\x7b\xf4\xf2\x4b\xd5\x55\x07\xeb\x29\xc2\xaa\xb2\x61\xf0\x2c\x15\x0a\x10\xdc\x70\x22\x8c\x81\x13\x6d\x49\xa6\x79\xa8\x28\x6a\x1a\x24\x53\x93\x1e\x9e\x1b\x66\xe2\xdd\x3f\x68\xe7\xed\xb3\x60\x9b\x51\x6b\x1f\xf2\x75\xfa\xae\x04\x01\x05\x08\x6e\x38\x11\xc6\xc0\x89\x76\x11\xb6\xb4\x6a\x8f\x8c\x27\x88\x9a\x0e\xc2\xb4\x17\x7c\x6e\x5d\x7b\x68\xae\xa7\x27\xf1\x87\x5b\x86\x2f\xdf\xe6\x5b\x6b\xd2\x76\xff\x88\x1b\x4e\x84\x31\x70\xa2\xcc\x17\xaa\x75\x8f\x07\x4c\xeb\xa7\x39\x3e\x45\xf4\x47\x10\xa6\x15\x8f\x91\xec\x77\x54\xa8\x6d\xa9\x5e\x3b\x69\xaf\x65\x26\x7e\x09\x05\x08\x6e\x38\x11\xc6\xc0\x89\xc0\x43\xf0\x5a\xc3\xef\x36\x19\x94\xc4\xba\x50\x41\x49\xcc\xd6\xe0\xaa\x18\xf7\x80\x8c\x4c\x63\x6c\x4f\x92\xd5\x8f\xc2\x41\x06\x14\x20\xb8\xe1\x44\x18\x03\x27\x66\x9f\xae\x3f\xa4\x49\x4a\xf9\x45\xfc\xcb\xc2\xab\xaf\xb2\x17\x4a\x13\x17\x36\x0c\x2f\x45\xd0\xe4\xbf\xf3\xd8\xa0\x3f\x34\xbd\xbe\xbd\xda\xe0\x86\x13\x61\x0c\x9c\x28\x76\xf2\xfd\xca\xfe\x85\x39\xe9\x9c\xa2\x73\x2e\x66\xe6\x4d\x9b\x2a\xfa\x67\xf2\xdb\xf9\x55\x6c\xec\x83\x0e\x3f\x98\x4f\xfd\x7e\x1c\x05\xc8\x7f\x84\x13\xf7\x5a\x77\x76\xc2\x84\x81\x13\xb9\xf8\x52\x0e\xdc\xd7\xd2\x32\xf9\xb9\xdc\x7e\xe6\xe5\xaf\xf9\xbc\x88\x10\x1e\xf6\x77\x2a\xf7\xbe\x07\x7d\x79\x93\xf5\xd8\xc1\x97\x11\x05\x08\x6e\x38\x11\xc6\xc0\x89\x8a\xae\xf3\x7e\x1e\xaa\x24\x26\x89\x17\x87\x1b\x8f\x84\x8e\x37\x1d\x6a\x14\xf8\x16\x5d\x2f\x31\x6e\x42\x6f\x19\x7f\xdf\x35\x82\x1c\x05\x08\x6e\x38\x11\xc6\xc0\x89\xa7\xee\x2f\x17\x7e\xd1\x67\x3d\x42\xcd\xd3\xc4\x28\x1b\xf5\xad\xd0\xd7\x6b\xf4\x4c\xc6\xc6\x7c\x71\x6d\xd8\x80\x72\xe9\x46\xc8\x69\x14\x20\xb8\xe1\x44\x18\x03\x27\xda\x3f\xc9\x08\xbe\xcb\x54\xf4\xa5\xfe\x89\xb9\xa6\xdf\x85\x8b\x59\xa6\xfb\x2f\xa0\xec\x3c\x17\x78\x9f\xd6\x38\x0c\x5d\x1b\x1f\xdc\x1e\xf2\x71\xc3\x89\x30\x06\x4e\x5c\x4d\xe0\x66\xa1\xe4\xbf\xad\x70\x70\x9f\x8e\x7f\x31\x35\xc3\xd5\x92\xdb\xdd\x39\x57\xbd\xf9\x4b\x3e\x7e\x0f\x82\xee\x8f\xaa\xaa\xa0\x00\xc1\x0d\x27\xc2\x18\x38\xf1\xc3\xcf\x73\x4c\x42\x2e\xbd\x4f\x3c\x97\x26\xd6\xc0\x78\x74\x86\x52\xdd\x57\xd7\x00\x51\xf2\xdb\x17\x4f\x4a\xba\xd8\xfd\xe8\x41\x50\x80\xe0\x86\x13\x61\x0c\x9c\x98\x4e\xaa\x6d\xd7\x73\x88\x70\xfd\xfa\xbb\xba\x8c\x9e\xcd\x41\xbf\x8d\x21\x86\x15\x48\xa6\xda\x9d\xb1\x35\x01\xfa\x29\x44\x22\x84\x02\x04\x37\x9c\x08\x63\xe0\xc4\x16\xdd\x17\x47\xdf\xfe\x24\x16\x69\x71\xfc\xd8\x5d\xdb\x6e\x7f\xc9\xc5\x1e\x1c\x55\xba\xa4\x1e\x67\x2e\x20\x1c\x4b\xbe\xa8\x0e\xa1\x00\xf9\x8f\x70\xe2\x5e\x3b\xf3\x4e\x98\x30\x70\x62\x3a\x17\x67\x83\xf3\x89\x94\xca\xfc\xd3\x51\x43\xa4\xb4\x21\x4f\x34\x02\xf2\xfe\xac\x58\xda\x7d\xa4\x89\x79\x23\xf6\xe9\xe9\x35\x6a\x14\x20\xb8\xe1\x44\x18\x03\x27\x52\x94\x22\x8c\xaa\x4e\x72\xe9\x93\xd4\x35\x33\x9a\x52\x1d\x71\xe6\xe2\xcb\x89\x72\x5a\x66\xc1\x71\xfe\x1a\xe5\x4b\x19\xcc\x5a\x28\x40\x70\xc3\x89\x30\x06\x4e\xdc\xf4\x9b\x8b\xeb\x6b\x1a\x58\xf9\x14\xdb\x56\xd7\x76\x22\x66\xf0\x1f\x13\xc3\x8d\xda\x3e\xf8\x84\x5c\x62\x01\xf4\x29\x65\xc1\x12\x05\x08\x6e\x38\x11\xc6\xc0\x89\xb1\xf7\xfb\x11\x36\xcb\x90\xc9\x53\x8a\xcf\x9f\x5e\x3e\x19\x25\xa9\xc8\xdf\xe8\xac\xd6\xf6\xf1\xfd\x54\xbf\x7d\xab\x03\xd9\xab\xf3\x28\x40\x70\xc3\x89\x30\x06\x4e\x0c\x75\x0d\x2c\x58\x5b\x10\xf5\x51\x6b\xb4\x32\x99\xbd\xec\xef\xd0\xc0\xc4\x23\xd5\xb6\x92\xf7\x39\x55\x84\x44\xd6\xe2\x9f\xf3\xf6\xae\x81\x1b\x4e\x84\x31\x70\x62\x25\xb3\xab\xbf\x11\xb3\xc5\xc2\x58\xb0\x6e\x5f\x71\xd2\x3d\xaa\xa7\x1e\xbf\x47\x05\x5b\x5e\x31\xf7\x72\x7f\x16\x78\x30\xcc\x7b\x19\x05\x08\x6e\x38\x11\xc6\xc0\x89\xbf\x29\x93\xa2\xcc\xae\x05\x6a\x90\x43\x7d\xd7\xd5\x4f\x9c\xa5\x6b\x82\x92\x07\xda\x85\x8e\x7f\x28\xcd\x34\xf5\x26\xc9\x89\x3c\x8c\x02\x04\x37\x9c\x08\x63\xe0\xc4\xe3\xc9\x6d\x09\xa1\xd4\x07\xce\xdb\xdb\xab\x8a\xfb\x7f\x9c\xd6\x92\x2c\x2a\x65\xb8\x13\x39\x7c\x20\x74\xc4\x5f\x7e\x6d\x25\x94\x07\x05\xc8\x7f\x84\x13\xf7\xea\x5d\x77\xc2\x84\x81\x13\xe5\xe8\xe9\xbd\x48\xd4\x7f\xd0\x74\xf4\x1d\xbe\x70\xf8\x21\xad\xd1\x74\xc8\xa3\x02\x0d\x5b\x47\x7e\x7b\xf5\xd3\xe3\x3e\x1d\xde\xdb\xbb\x06\x6e\x38\x11\xc6\xc0\x89\x8e\x5e\x21\x11\xa3\x57\xa1\x1f\x1d\x9b\xe9\x1a\x5f\x78\x1a\xd2\x95\xf6\x75\x3f\x5b\x0e\x78\x56\xe3\xc4\x73\xbd\x50\xf5\xce\x25\x1d\x14\x20\xb8\xe1\x44\x18\x03\x27\xd6\x02\x31\x81\x25\xbd\x0a\xd4\xfe\x24\xfb\x66\xff\x3a\xc1\xa8\x35\x46\x46\xbb\xa0\xbb\xc0\xf1\x05\xa3\x6d\xc7\xc3\x38\x26\x23\x14\x20\xb8\xe1\x44\x18\x03\x27\xde\xb2\x90\x58\x36\x28\xa9\xf4\x89\xe7\xa8\x0e\xb2\xf6\xf0\x6d\x96\x6d\x75\x29\x53\x5d\xb7\x61\x62\x20\x8b\x1e\xe2\x5f\x49\xe3\x45\x01\x82\x1b\x4e\x84\x31\x70\x62\xc6\xe1\xe9\xa1\x33\x6b\x34\x02\x5b\x27\x57\xfa\x46\xda\x37\xaa\x32\x9c\x9d\x45\xdd\xa8\xac\x2e\x79\xfa\xf3\x71\x3e\x7f\xd9\x2b\x8d\x02\x04\x37\x9c\x08\x63\xe0\x44\x1b\x37\x4f\x9d\x4f\x66\x1f\x27\x07\xa6\x3b\xaf\xaf\x49\x36\xfc\xfb\xc6\x64\xaa\xe9\xf1\xaa\xc7\xd9\xef\xf5\x72\x3b\xc7\xbb\x15\x47\x14\x20\xb8\xe1\x44\x18\x03\x27\x3e\x6f\xf5\x6a\x26\x79\x78\x28\x34\x8e\x7a\x4c\x44\xfb\x61\x3f\x71\xa5\x7d\x75\xc1\xf3\xa2\x8d\x02\xbb\x96\x9b\x42\x4f\x9a\x5a\xb6\xdf\x07\x6e\x38\x11\xc6\xc0\x89\xd2\x56\x96\x2a\x69\x87\xaf\xfd\x0c\x4e\x4f\x51\x4f\x62\x6f\xfa\x17\xe9\x95\x5b\x13\xba\xe4\x9b\x63\x71\xaf\xc4\xab\x39\x9f\x5f\x0a\x05\xc8\x7f\x84\x13\xf7\x9a\xee\x76\xc2\x84\x81\x13\xaf\x24\x06\x75\x4d\xff\x28\x24\xb1\xeb\x21\x63\x48\x17\xa4\xff\xc8\xc6\xb6\xff\x74\x18\xc7\x83\x2e\x03\x7d\x4a\x3a\xef\x6f\xd4\x5e\x28\x40\x70\xc3\x89\x30\x06\x4e\x74\x56\x8c\xa1\x70\xd4\x36\xce\x88\xec\x3d\xd6\xec\x91\x40\x91\x93\x16\x78\xa7\x93\x73\xdd\x6b\xec\x83\xf5\x65\xcf\x8a\x09\xa6\x8b\x28\x40\x70\xc3\x89\x30\x06\x4e\xd4\xc9\x26\xb5\x11\x7d\x73\xb5\x5b\x37\x5f\xe7\x74\x1e\x69\xa2\x7f\x46\x4d\x8a\x7d\x3e\x55\xde\x4c\x91\xb6\xd1\x39\x83\x5f\xe7\x6c\x50\x80\xe0\x86\x13\x61\x0c\x9c\xf8\x2f\xe9\x9f\x6d\x43\x13\x55\xc8\xf9\x16\xdb\xaf\x01\xdd\x5a\xd2\xa2\xaf\xe1\x64\x61\x2f\x86\x14\x6f\xa2\xf3\x3a\x65\xfa\xdc\x66\x28\x40\x70\xc3\x89\x30\x06\x4e\x9c\xce\x36\x7f\x78\x35\x22\x8c\x66\x94\x83\x59\xc6\x63\xbc\x9d\xf2\xd3\x55\x87\x5e\x97\x5c\xea\x4f\x6f\x43\xab\x51\xca\x13\x7d\xdb\x1f\x3a\x6e\x38\x11\xc6\xc0\x89\xfc\xaf\x8d\x67\x3b\x6b\xaf\xaf\x4a\xcf\xbf\x95\x2d\x14\xb0\x4f\x38\x6a\xd6\x2e\x6e\xb6\xd2\xb7\xac\x50\xcc\x53\xaf\xd4\x7a\xe0\x02\x0a\x10\xdc\x70\x22\x8c\x85\x13\x53\x7c\x5a\xea\x0f\x66\x3c\x1b\x3e\x1f\x54\xec\xee\xf3\x2a\x96\x95\x3a\x02\xbc\xb5\xb7\xfc\xac\x7a\x36\x78\x2b\x8f\x91\x51\x10\x05\x08\x6e\x38\x11\xc6\xc0\x89\x42\x0c\x09\x5f\xa8\xb8\xfa\x87\xeb\xee\xfc\xfb\x6b\x56\x4f\x22\x01\x8b\x0c\x37\x0b\xec\x8b\x7d\xa5\xfd\xf8\xf7\x7d\x5e\xf9\xe9\x63\x28\x40\xfe\x23\x9c\xb8\xd7\xf9\xc7\x4e\x98\x30\x70\xe2\xa7\x73\x07\xde\xf9\x2c\xf4\x7e\xb9\xb9\x74\x4e\xad\xee\xdc\xc4\xf0\xd6\xdd\xac\x8b\x1c\x25\x93\x27\x37\xa9\x83\x5b\xef\x8a\x09\x6f\xef\x1a\xb8\xe1\x44\x18\x03\x27\x3e\x1b\x14\xd1\xf3\x10\x3e\xd2\x53\xea\xf0\x0e\xba\x91\xc0\xf5\x41\xd5\xa1\xb1\xea\x60\xce\x95\x37\xc5\xa9\x67\xa3\xc9\x47\x9f\x9e\x41\x01\x82\x1b\x4e\x84\x31\x70\xe2\x31\xd5\xa3\x1e\x6c\x86\xa7\xa5\xf9\xe4\x4d\xe3\xb2\x64\xcd\xc8\xa8\x6d\x22\x7b\x64\x9b\x4f\x15\x11\x5f\x5b\x11\x8d\x9f\x14\x61\x46\x01\x82\x1b\x4e\x84\x31\x70\xe2\xa5\xe3\x47\x8a\x67\x9a\x65\x1c\xff\x10\x67\x3f\xde\xd8\xaf\x3c\xdc\x95\x26\x14\x76\x6a\xa6\x4d\xc9\x86\x55\xc4\xab\x40\xe7\xfa\x76\x8f\x8e\x1b\x4e\x84\x31\x70\xa2\xe2\x85\xeb\x37\x0f\xf0\x70\xb4\xd5\x3d\xec\xbf\x10\x4a\x74\xc4\xc8\x56\xf4\x38\x57\xce\x93\x3f\x53\x01\x4d\x9d\xcf\xe3\x14\x47\x61\x14\x20\xb8\xe1\x44\x18\x03\x27\x6e\x9e\xeb\x80\x42\x5d\x5e\x90\xeb\xee\x9f\x82\xcd\x6f\x8c\x06\x2c\x72\x0d\x8c\xc6\xfb\x8f\xe7\x5b\x12\xf1\xe6\xd2\x7b\x75\xba\xa1\x00\xc1\x0d\x27\xc2\x18\x38\xd1\xce\x3b\xd6\x34\xaf\xe5\xdc\x4b\xb3\x24\x4b\xe2\xa5\xef\xae\xfb\x7b\x33\xb9\x2e\x89\x69\x4a\x3c\xf9\x6a\xc3\x77\xde\xe7\x7d\xa8\x02\x0a\x10\xdc\x70\x22\x8c\x81\x13\xfb\x6c\x4d\x5d\xbe\xd3\x1f\x2b\xf7\x5a\xf7\xec\xce\xd5\xab\xe6\x6d\xbe\x3c\x98\x76\x83\x86\xc7\xb4\x55\x48\x53\xe7\xe1\xd3\x14\x62\x14\x20\xff\x11\x4e\xdc\xeb\x84\x70\x27\x4c\x18\x38\x91\xc5\xa4\xc2\xe7\x95\x95\x9e\xaf\x1e\xe7\x81\xa3\x0c\x1c\x92\xd1\xd5\x7f\xec\x4e\x66\xb3\x48\xfa\xce\x6f\x7d\x55\xed\x47\xe5\xed\x51\x80\xe0\x86\x13\x61\x0c\x9c\x38\xc4\x5d\xd9\xe5\xc5\xab\x18\xa5\x5b\x06\x9d\x7d\xdc\xf9\xbd\xfc\x61\xe4\x19\x69\xd3\x49\x6a\xf2\x1f\x8d\x77\xac\x4c\xc5\x72\xb7\xb7\x7c\xdc\x70\x22\x8c\x81\x13\x9d\x74\xec\x0e\x36\x11\xd9\x74\x8a\xf3\x11\x5d\x65\xe1\x5d\xa9\x77\xca\xfd\xdb\x38\x71\x40\x82\x36\x92\x3f\xf7\x1b\xfd\xe8\x38\x3d\x0a\x10\xdc\x70\x22\x8c\x81\x13\x19\x5c\xf7\x07\xba\x3c\x7a\xa0\x40\x54\xfe\x95\xbb\x29\xa7\x56\x66\xfc\x79\x3d\xcd\x53\x09\xee\x57\xcd\xbf\xde\xb2\xfd\xba\x1c\x69\x88\x02\x04\x37\x9c\x08\x63\xe0\x44\xca\x48\x81\x7d\x71\xf9\x3e\x6a\xeb\x47\x2e\xde\xbc\xd4\xeb\x53\x45\x5a\x78\xe1\xee\xbe\x49\xb6\xaa\x40\x4e\x42\x98\xe6\xed\xe4\x03\x28\x40\x70\xc3\x89\x30\x06\x4e\x2c\x4c\x9b\x7f\xf5\xb5\x96\x44\x7e\x2e\x8a\xee\x69\xc3\xca\xed\xb6\xb1\xa7\x9b\xbe\xd5\xca\xd1\x6c\x47\xec\x0f\x47\xc8\xfd\x9b\xdb\xee\x14\x70\xc3\x89\x30\x06\x4e\x9c\x3e\x39\x3f\xc6\xe2\xd3\xee\xde\x23\x67\x95\xf0\xd2\x2f\xc3\x74\x19\x54\x22\x45\x05\x32\x9b\x94\x2f\x9b\xb9\xee\x5f\x5e\xe1\x46\x01\x82\x1b\x4e\x84\x31\x70\xa2\xf2\x9b\x8b\x87\x9e\xc3\x22\xf9\x72\xc7\x5e\x7b\x39\x5f\xfa\x30\x61\x25\x26\xfc\xb7\xfb\x84\x0a\x51\x2a\x3c\xb9\xf2\x85\x2c\xd4\x02\x05\xc8\x7f\x84\x13\xf7\x3a\x43\xdf\x09\x13\x06\x4e\x5c\xa8\xbb\x9a\x45\xa1\xee\x93\x21\xf1\xc1\x72\xba\x4b\xa3\x3d\x8e\x81\xf4\xe0\x01\xd5\xa8\x66\x55\x4d\xf6\x3f\xfe\xa4\x2b\x07\xb7\xdb\x0a\xdc\x70\x22\x8c\x81\x13\xa7\x75\x44\xf4\x9a\x0b\xe6\x47\x13\x8f\x1d\x99\xa3\x62\x5e\x73\xb9\xe5\x48\x17\x43\xeb\x53\x79\xef\x4c\xb4\xf7\xe9\x0d\xd1\x45\x27\x14\x20\xb8\xe1\x44\x18\x0b\x27\xe6\x97\xb5\x44\x27\xd1\xf9\xc5\xfd\xfd\xbb\x19\xf4\x4c\x98\x65\x73\x4d\xfe\xeb\xc4\x99\xf6\x9a\x9b\xe1\x8e\xe2\xf9\xaf\xcc\xb7\xe7\x19\xdc\x70\x22\x8c\x81\x13\xc3\x2a\x5e\x4d\x30\xa9\x2a\xe5\xb9\x4c\xd7\xfd\x30\xe5\xfa\xf5\xcb\x32\x27\xbc\xdb\xc2\x8b\x28\xe0\x4e\xf2\x17\x06\x67\x05\x3d\x2e\x14\x20\xb8\xe1\x44\x18\x03\x27\x5a\x12\xf8\x74\xeb\x54\xac\x99\xee\xe6\x5b\xb9\x98\x56\x10\x79\xda\x1a\xef\x6b\x4e\xb2\x4e\x96\x2f\x49\x0a\xa5\xcd\x56\x09\xdf\xfe\xd0\x71\xc3\x89\x30\x06\x4e\x94\x12\x26\x27\x52\x64\x7d\x41\x6b\x6e\x72\x5b\x9b\x55\xdf\xb6\xa7\xbf\xa5\x99\x5a\x3f\xe1\xa1\xed\xb8\xe4\xbd\x7f\x8d\xc4\x57\xb5\x51\x80\xe0\x86\x13\x61\x0c\x9c\x38\xb1\x2f\xb6\x40\x9d\x53\xfa\xc9\x54\xd9\xb7\xb8\xb9\xa8\x60\xea\xce\x38\x62\x7b\x49\x2a\x58\xf3\x8c\xfa\xef\x9f\xeb\x03\x27\x68\x51\x80\xe0\x86\x13\x61\x0c\x9c\x28\xd5\xf4\xba\x28\x47\x99\x99\x8d\xc9\xae\xe1\xe3\x85\x9e\x63\x47\x58\x5a\x62\x7f\xda\xd9\x0b\xbf\x6f\x0b\x60\x95\x7a\x8c\x4c\xd1\xa1\x00\xf9\x8f\x70\xe2\x5e\x7f\xd9\x88\xb9\xec\x7b\xd1\xdb\xbe\x1e\x32\xa9\x70\x95\xb2\xa6\x3d\xb6\x28\xf9\xce\x8b\x19\x85\x18\xda\x4d\x4e\x71\x23\xc6\xde\x5b\xc8\xa5\x43\x2c\x5a\xbb\x4a\x19\x09\x4b\xe6\x83\x24\x1c\xb4\x15\x6b\xf0\x2d\x0a\x0d\xbf\x8b\x34\xc1\x49\x07\x74\x15\xcc\x8e\xd1\x4d\x7f\x5a\xba\xf5\x48\x94\x78\x57\x69\x55\xb8\xef\xd9\xb3\x81\xfd\xa7\x9b\xd3\xc8\xae\x30\x4f\x14\x3f\x0d\x9f\x93\x13\x5f\x09\xa2\xf4\x55\x0f\x79\x9e\xb0\xbe\xea\xac\xbc\xab\xd4\xe7\x80\x0b\x12\x7e\x39\x90\x91\xee\xa7\x88\xf7\xe1\x04\x77\x85\x21\xff\xf6\xf7\x3e\x53\x4d\xd2\xe9\x91\xf1\x81\x82\x4d\xd1\x8d\xbb\x4a\xe5\x5f\x3a\xde\x9b\x4c\xa5\xa0\x3d\x10\x99\xf3\x31\x8a\x2f\x55\x42\xcb\x36\x60\x59\xd9\x8d\xe1\x79\xaa\xcf\xa6\x9e\x5a\xc8\xc4\xd9\x5d\xa5\x92\xce\x4a\xf3\x8b\x09\x45\x83\xea\xe8\xd7\x53\xc3\xa9\x8f\x5b\xcf\x2e\xda\x90\x04\xbd\x0f\xe0\x92\xb6\xf7\xb6\x9d\x7d\x14\xe0\xb8\xab\x94\xaf\xfb\x8f\xc0\x7d\xa5\xbb\x8f\x72\xfb\xe3\x8c\x12\x7c\xcd\x15\xdb\x7e\xd6\x72\xfb\x3d\x1e\x1a\x4d\x85\xf7\x2f\x5c\x5f\x3c\xc3\xbc\xfb\xaf\x10\x95\x06\x27\x2b\xde\xf6\x6e\x72\x9e\x33\xd1\x98\x7b\xfb\xc1\x60\xfe\x41\x4a\xaa\xe7\x15\xbf\x63\x3a\x6a\x9f\x74\xde\x5a\x45\x9c\xfa\xdf\x65\xdf\x5e\x4f\x75\x67\x45\xc3\xc0\x89\xbc\x89\xe7\x74\xee\xf7\xbd\xd4\x74\x88\xbd\x5d\xd8\xe0\xa3\x66\x6b\x5e\x07\xca\x13\x9b\x19\x85\x2e\xc5\xfc\x24\x6a\xa9\x79\x24\x8e\x02\x04\x37\x9c\x08\x63\xe0\x44\x5b\x29\x99\x59\x29\x61\xc6\x39\x1e\x17\xa8\x4f\x80\x6d\x90\x33\xc8\x4a\xbb\x5d\xfa\xad\xcd\xa5\xcc\x50\xae\x24\x9e\xba\x0d\x56\x14\x20\xb8\xe1\x44\x18\x03\x27\x9e\x0c\xa6\x4b\xe0\xf3\xfc\x34\xdc\xca\xc1\x6a\xd3\x4b\x7f\x7f\xb1\x20\x59\xec\x24\xeb\xa6\x2d\x1c\x49\x9f\x10\x7d\x37\xfd\xa5\x03\x0a\x10\xdc\x70\x22\x8c\x81\x13\x4f\x85\xf2\x1e\x79\xb3\x5f\x4a\x68\xe2\x42\x7d\x63\xe0\xa8\x67\xaa\xe0\x4c\x61\xa0\xab\x62\xd0\x2f\xf5\xfa\xf9\xaa\x76\x27\xdf\xed\x95\x00\x37\x9c\x08\x63\xe0\xc4\x6a\xfd\xa0\xac\xa8\xbb\xdf\x6e\xdd\x63\x10\x1b\xdd\xcc\x1e\x69\xf2\x9d\xd3\xe1\xdf\x7a\xff\xe3\x23\x43\xd3\xb5\x39\x6a\x99\xb6\xa3\x28\x40\x70\xc3\x89\x30\x06\x4e\xa4\x8e\x95\x75\x89\x95\x33\x4b\x65\x61\x60\x35\x9c\x5f\x5c\x96\x25\xd2\x29\x8b\x9d\x0f\xf3\x1a\x50\x4a\xeb\x35\x58\x0a\x57\xd3\x43\x01\x82\x1b\x4e\x84\x31\x70\xe2\xcc\x62\x70\x74\x97\x6b\x40\x73\xa1\x34\x23\xdf\x70\xe5\xbf\x90\xd7\xad\xf7\x42\x1c\x7f\x9f\xe3\xba\x3e\xd3\xbb\xa0\x5c\x1a\x26\x8f\x02\x04\x37\x9c\x08\x63\xe0\xc4\x42\xf7\x88\x3a\x76\x1e\x31\x95\xf3\x1f\xc8\x68\xfd\x85\xaa\x07\x5a\x55\xc8\xd4\x3f\xf0\x45\xe5\x58\x46\x1e\x3f\x52\xab\x4e\x7e\x19\x05\xc8\x7f\x84\x13\xf7\x5a\x77\x76\xc2\x84\x81\x13\xe9\xee\x71\x18\xc7\x85\x70\xf6\x74\x57\x13\x96\x0f\x70\x0d\x99\xad\x39\x7b\xca\x5e\x96\x98\x50\x31\x61\x51\xbe\xf2\x0e\xf8\x6c\xff\xa7\x71\xc3\x89\x30\x06\x4e\x14\xf5\x66\x8c\xea\x56\xd0\x57\xb3\x1f\xf2\x06\xc4\x82\xb7\x32\x05\x53\xfb\x1e\xff\x5c\x70\x75\xd1\x38\x14\x5a\x73\x40\xe1\xbb\x01\x0a\x10\xdc\x70\x22\x8c\x81\x13\x8b\x48\xb3\xda\xf9\x9b\x0d\xcf\x14\x45\xe5\x64\x06\x7d\xcd\xca\x5a\xbc\x46\x29\x1e\xbc\x5c\xf3\x84\x71\x9a\xf5\xc8\xd5\x05\x75\x59\x14\x20\xb8\xe1\x44\x18\x03\x27\x96\x1f\xe0\x60\xa1\x99\x6f\x99\xdc\xb0\x89\x75\x7f\x66\xdb\x4b\x2f\x9a\x6f\xa3\x6e\x3f\x1a\xf2\xb1\xf6\xd3\xf7\xaa\xbf\x46\xb2\x32\x28\x40\x70\xc3\x89\x30\x06\x4e\x2c\x6e\x9c\x8a\x08\xfb\xec\x72\x33\x7b\x36\xa2\x6e\xce\x70\x8d\x47\x7a\x69\x39\x84\x22\xd0\x8b\x81\x2b\x97\x9c\xeb\x12\x53\x3d\x19\x0a\x10\xdc\x70\x22\x8c\x81\x13\x97\xc6\x8e\xaf\x85\x30\xcf\xf7\x6a\x6b\x55\x13\xd9\x5c\x3c\x28\x97\x72\x2c\x31\xd5\xf3\x79\xd7\xb0\xe6\x0d\x88\x89\x94\x86\x59\x00\x05\x08\x6e\x38\x11\xc6\xc0\x89\xb9\x22\x9b\xf7\xaa\xc4\xa6\x1f\x1d\x35\x1f\xd1\xfc\xc6\x4a\x2f\xac\x92\x9d\xf4\x33\xa0\x83\x07\x1c\x96\x77\xda\x88\x24\xbb\xc5\x86\x02\x04\x37\x9c\x08\x63\xe0\x44\x76\xbd\x91\xa5\xbe\xda\x07\xf6\xef\x2f\xbc\xf1\x30\x3d\xc6\xf2\x18\x95\xb0\x3b\xe8\xc2\x1d\x7c\x7a\xb3\xa3\x7b\xeb\x78\x6c\xad\x06\x0a\x90\xff\x08\x27\xee\xb5\x33\xef\x84\x09\x03\x27\x32\xcd\x53\x7d\x9d\xf3\x39\x6d\xe9\xe1\x24\xfa\xe4\x58\x42\xbc\x0d\xa7\x9f\xfb\x64\xf9\xc9\x1b\xb4\x37\x8f\xbd\xfb\xba\xff\x66\xc4\x21\x14\x20\xb8\xe1\x44\x18\x03\x27\x0a\x4b\x11\xc8\xec\x83\xbc\xc7\x05\x4c\xfd\xc4\xa3\x93\x3e\xab\x58\x9a\x84\x9c\x70\x7a\xad\x26\xdd\x6c\x58\x7d\x57\xa6\xbf\x1c\x46\x01\x82\x1b\x4e\x84\x31\x70\x62\x3f\xdf\xb3\x02\x4e\x5a\xd9\xb2\x81\xdf\x61\x19\x3f\x42\x1d\x46\x28\x2b\xfb\x29\xae\x0c\xbe\x48\x19\x99\xbf\xe9\x2c\x2c\x48\xbf\xfd\x81\xe0\x86\x13\x61\x0c\x9c\xa8\x3b\xe1\xb7\x2e\x37\xca\x2e\x9c\xa6\x1e\x9a\xeb\xcf\xc7\x9e\x19\xa5\xad\xc2\xb8\xf0\x54\x20\xec\xa1\x31\x7d\x72\x13\x5b\x99\x27\x0a\x10\xdc\x70\x22\x8c\x81\x13\x53\x03\xcc\x44\xf6\x1f\x41\x7e\xbe\xe2\xac\xf5\xec\x3f\xdb\x64\x50\x39\x74\x99\x31\xf9\xc6\xd9\x35\xed\xda\xd6\x8e\x3f\x74\x65\xdb\x61\xc2\x0d\x27\xc2\x18\x38\x51\xb4\x59\xa7\x8d\x89\xbc\x4a\x2e\x32\x5d\x49\xe1\x65\x26\x47\xa7\x23\x8b\x3f\xd3\x17\x2b\xaf\xcd\xbe\x0e\x81\x2f\x56\x0f\x5a\xd8\x51\x80\xe0\x86\x13\x61\x0c\x9c\x48\x7b\x3f\xcd\x81\x44\x47\x39\xe5\x60\x22\x9d\x57\x09\xc4\x2c\x21\xa4\x46\xfc\x93\xff\x1c\xdb\xca\x62\x75\x78\xf7\x81\xd7\xf3\xce\x28\x40\x70\xc3\x89\x30\x06\x4e\xcc\xe8\x28\x48\x1a\x71\x8f\xf0\xf8\xc4\xf0\xdb\x72\xe1\xc3\x9c\x08\xd7\x91\x8f\x65\x49\x6a\xd5\xe7\xba\x0c\xf9\xe7\xae\x7b\xd7\x9b\xa3\x00\xf9\x8f\x70\xe2\x5e\xbd\xeb\x4e\x98\x30\x70\xe2\xf0\x29\xb7\x81\x46\xe2\xa0\x17\xe9\x33\x07\xaf\x1d\x60\xb4\x4f\xc9\x49\xcf\xa8\xa1\x61\x53\xde\x10\x3e\x41\x6c\x6c\xd1\xf1\x09\xa0\x00\xc1\x0d\x27\xc2\x18\x38\xf1\xa7\xc8\x72\x6c\x1a\x57\xe9\x7a\x9e\xa0\x66\x67\x54\x6f\x05\x5b\xd3\xed\x2e\x5a\xae\xb2\x89\x15\xaa\xf4\x78\xbb\x38\xfe\xf9\x53\x28\x40\x70\xc3\x89\x30\x06\x4e\x74\x63\xfd\x75\xc0\x3b\x61\xe1\xce\x56\x13\x5b\xf1\x42\xfe\xa4\x9b\xa2\xd4\x5b\x45\x01\x2b\x8f\x84\x51\xff\xf5\x21\xfb\x8f\xfa\x96\x28\x40\x70\xc3\x89\x30\x06\x4e\xfc\x7b\xe8\x12\xd7\x31\x3a\x3a\xd3\x58\xde\xe2\xa1\x4d\x4f\xca\xcd\xcb\x2e\x89\xa7\x0d\x49\x56\x52\xa2\x1e\x45\x25\x86\x9f\xcf\x24\x45\x01\x82\x1b\x4e\x84\x31\x70\xe2\x8f\xe8\xe2\x7a\xcd\x6e\xf6\x7c\x19\xe9\x56\x1a\xed\xfc\x17\x93\x49\xd7\xf2\x3b\xcf\x1a\x1f\x2a\x2f\x38\xd5\xf5\xd0\x10\x25\xdb\xfe\xd0\x71\xc3\x89\x30\x06\x4e\xa4\xe3\x82\x0b\x14\x73\x1a\xcf\x77\x78\x27\x50\xbd\x38\x48\x63\xc4\xbf\x5e\xa7\x34\x2e\x28\xff\xd9\x42\xba\xe6\xb5\x12\x29\x91\x2b\x0a\x10\xdc\x70\x22\x8c\x81\x13\x3b\x88\x7e\xdd\xbb\x45\x36\x97\xd3\xc7\x27\xa3\x71\x93\x92\xc2\x93\xba\x41\xfc\x9e\x0a\x52\xff\x20\xb8\x8a\x24\xe0\x34\x51\xf3\xf6\xe2\x86\x1b\x4e\x84\x31\x70\x22\xf2\xf5\xcd\x6f\x9e\x43\x6a\x7a\x3c\xf5\xb6\xcf\x36\xc6\x6a\xdf\xe8\xa8\xf8\xbe\xfe\x65\x40\x64\x36\x57\x51\xa4\x5d\x70\xb5\xd1\x10\x05\xc8\x7f\x84\x13\xf7\x9a\xee\x76\xc2\x84\x81\x13\xaf\x1f\x6f\x8d\x5f\x7f\xfa\x38\xe6\x74\x9f\xba\xeb\xc2\x41\x1d\xb2\x56\x49\xbd\xe8\x27\x81\xff\xde\xa4\xe7\xdf\x90\x60\x4d\xc9\x61\x40\x01\x82\x1b\x4e\x84\x31\x70\x22\xd5\x7c\xa5\x61\xe0\xeb\xa3\x68\x29\xf7\x09\x59\x34\x6c\x8a\xff\xeb\xdf\xcb\xb4\x15\xe1\x7c\xce\x1d\x6a\x51\x32\x39\xc6\xf1\x27\x51\x80\xe0\x86\x13\x61\x0c\x9c\xf8\xc8\xac\x98\x6b\xcd\x9f\x2b\xbb\x3e\x3e\xf7\xc0\x70\x65\xe1\x72\xe7\xf8\xc4\x64\xb6\xa6\xa5\x88\x95\x40\x56\x37\xd1\x50\xca\xf6\x4a\x88\x1b\x4e\x84\x31\x70\x62\xff\xc9\x93\x4b\x67\x72\x7b\xef\x9f\xcd\x3b\xb5\x62\x28\xff\x4d\xd4\xa8\x68\xcc\xe5\x73\x7e\x93\xd2\xd8\xbb\xe3\x5d\x94\x67\xd6\xb7\x17\x05\xdc\x70\x22\x8c\x81\x13\xa7\xbd\xc6\xd5\xcc\xf5\x78\xcf\xd1\x52\x4b\x86\xc5\xcc\xa6\x71\x54\x0a\xc7\x34\x45\x10\xd9\x3e\x7a\x77\x4b\xd0\x6e\x93\x36\x64\xfb\x59\xe1\x86\x13\x61\x0c\x9c\x48\x72\xf1\x02\x4b\xe8\x57\x36\x3a\xe7\x84\x78\x1f\x69\xc8\x49\xa2\xec\xdf\x55\x9e\x55\x7a\xbd\xf5\x28\xd2\x5b\xc3\xc7\x75\x63\xc8\x51\x80\xe0\x86\x13\x61\x0c\x9c\xf8\x48\xe2\x68\x2a\xd9\x04\xe4\x97\x41\xa7\x2f\xfd\xbe\x9f\x47\x9c\x6f\xbd\xfa\x89\xef\x84\xb5\xc5\xe1\x6f\xf2\x1d\x83\xaf\xe3\xac\x51\x80\xe0\x86\x13\x61\x0c\x9c\xe8\xe5\xa2\xa2\xc0\xce\xab\xcd\xc4\x17\x74\x2e\x71\x6e\xd4\xea\xf0\xec\xc3\x1b\x82\x11\xf1\xbc\xda\x23\x2c\xb4\xd4\x8f\x14\x92\xf8\x51\x80\xfc\x47\x38\x71\xaf\xf3\x8f\x9d\x30\x61\xe0\xc4\x2d\xa7\x55\xdd\xf3\x6a\x46\x8a\x46\x5b\x69\xae\x02\xf7\x4e\xa7\xf9\x18\xc7\x36\x5b\x13\x5f\xff\x5b\xf6\xfb\xdd\xa8\x72\xb7\x86\x32\x0a\x10\xdc\x70\x22\x8c\x81\x13\x33\x89\xa0\x5f\xf3\x1a\x0a\x56\x33\x44\xb6\x01\xa7\x2c\x22\x2e\x3a\x8c\x8b\xce\xb8\xcc\x1f\x5b\x7c\xcf\x49\xb4\xe9\xed\xa4\x04\xa1\x00\xc1\x0d\x27\xc2\x18\x38\xd1\xd0\xa7\x4f\xf2\x60\x3a\x5f\x8b\x76\x21\x6a\x42\xdb\xfa\x55\x44\xc2\xe5\xb2\xa4\xff\xc7\xd4\x83\x43\x97\xe6\x3f\x75\x7f\xb9\xb4\xbd\x6b\xe0\x86\x13\x61\x0c\x9c\x68\xfe\x56\xc6\x2d\xc3\xa5\xd9\xa5\xaf\xd7\xf3\x21\xfb\xe1\x9f\x83\x4d\x96\x52\x01\x2d\x2d\xea\x55\x1c\xeb\x85\xf5\x74\x92\x1c\xf6\x28\x40\x70\xc3\x89\x30\x06\x4e\x0c\x57\xfb\xe3\x92\x74\xc4\x84\x79\xd5\x25\xdb\xec\x19\x41\x5f\x23\x65\xe9\x70\x70\xeb\xf0\x5b\xc3\x1a\x71\x0a\x83\x1f\x56\x72\xc2\x28\x40\x70\xc3\x89\x30\x06\x4e\xfc\x91\x9f\xcd\xec\x9a\x48\x93\x41\x6d\xad\x24\x45\x4b\x7d\x34\x93\x54\xcf\x22\x60\x3a\x22\xd7\xe8\x44\x60\x08\x79\x5e\xe3\xb7\xd3\x28\x40\x70\xc3\x89\x30\x06\x4e\x9c\x5e\x7f\x71\xf9\xed\x4b\x63\xcb\x0b\x53\x21\xc6\xd3\x51\xbd\x77\x84\x0e\x28\xd9\x14\x77\x19\xde\x76\x2c\x52\x51\xfa\x5a\x1c\xc3\x8c\x02\x04\x37\x9c\x08\x63\xe0\xc4\x7f\xe4\x57\x4b\xe8\xac\xe8\x63\xcf\xfb\xbe\x0f\x3e\x35\xfc\x7e\x98\x5b\x6c\x2d\x69\x38\x78\xec\x2c\x0f\x74\x51\xfa\xac\x58\x9a\x2d\x0a\x90\xff\x08\x27\xee\x75\x42\xb8\x13\x26\x0c\x9c\xd8\x41\xdc\x97\x4d\xca\x51\xf2\xe5\x7a\xd2\x29\x41\x2a\x91\x44\xc1\xa6\x67\xfb\x0c\x6f\x78\xac\xa5\x8c\x2f\xd2\xdf\xb0\xb3\xe3\x3c\x80\x02\x04\x37\x9c\x08\x63\xe0\x44\x75\x5b\xfd\xe1\xa3\x1a\xcd\xea\xd9\x97\xae\xbb\x73\x91\x77\x53\xfd\xd9\x54\x73\x38\x6b\x2b\xac\x4d\x36\xfe\xf1\x73\x0e\xd7\xda\x11\x14\x20\xb8\xe1\x44\x18\x03\x27\x7e\xec\x4f\xfc\x01\x8b\xdd\x62\x6c\x37\x88\x60\x5a\x6a\x3a\x48\xa7\x90\x9a\x71\x52\xf0\x54\xdb\x83\x33\xe5\xb7\xaf\x9e\xa8\x8d\x36\x41\x01\x82\x1b\x4e\x84\x31\x70\x62\x98\x04\xff\xad\x99\x8c\xc6\xa6\x21\x7e\x17\x42\xe8\xd0\xe4\x17\x55\x8f\xc3\xa7\xa8\x86\x3a\x0f\x49\x5c\x4c\x2f\x6c\xea\xaa\xe5\x40\x01\x82\x1b\x4e\x84\x31\x70\x62\xe2\xe1\x54\x2a\x32\xa3\x7a\xb6\xe9\xa2\x69\x33\xa2\xfe\xb7\x35\x3d\x99\x2e\x5a\x45\x2d\xb3\x3e\x67\xad\xaa\x6f\xe6\x26\x06\x9c\x47\x01\x82\x1b\x4e\x84\x31\x70\xa2\x0b\xed\xd1\x7d\x2a\xd0\x87\x17\x4b\x56\x51\xb7\x0f\x53\x27\x13\xb2\x7b\x3f\xef\x23\xbb\x7d\xe1\xd4\x97\x91\xae\xf2\x13\x17\xe2\xc4\x50\x80\xe0\x86\x13\x61\x0c\x9c\x78\xb8\x65\xa6\x76\x75\x2d\x92\x33\x30\xf3\x5a\x64\xcc\x40\xda\xa2\x51\x9f\x4e\x39\xd7\x32\x91\x81\x1f\xbf\xc8\xcb\x87\x87\x8f\xca\xa0\x00\xc1\x0d\x27\xc2\x18\x38\xd1\xfc\xa4\x33\x27\x6b\x76\x6b\x55\x60\x72\xbe\xf6\xdf\xf5\xfe\x27\x54\x85\x32\xa6\xe9\xd0\xbf\xb8\x1b\x09\x06\xac\x49\xf2\xaa\xfb\x50\x80\xfc\x47\x38\x71\xaf\x33\xf4\x9d\x30\x61\xe0\xc4\x86\xb3\xd1\xec\x62\x06\x67\x06\x6c\x9d\xd2\x73\x34\xce\xcb\x29\xbb\xaf\x89\x24\x9c\xf5\xd7\xd7\x4b\xee\x3a\xac\x42\x74\x7f\x54\x08\x05\x08\x6e\x38\x11\xc6\xc0\x89\x9c\x25\xb6\x35\xdd\x6a\xb2\x1f\xde\x8c\x33\x68\x06\xfd\x65\x7e\x7b\x91\x5d\xa8\x7f\x3c\x29\xaf\x7f\xe2\x50\x7a\x53\xc4\xaf\x14\x2e\x14\x20\xb8\xe1\x44\x18\x03\x27\x9e\x7f\x34\xee\x14\xaa\x4b\x11\xff\xe4\xf4\xe1\x31\xdd\xcc\x81\x23\x34\xb6\x94\x57\x33\xee\x4c\x32\x10\xeb\x4c\x7f\x9e\x22\xed\xa2\x46\x01\x82\x1b\x4e\x84\x31\x70\xa2\x2a\x9b\xb6\xe8\xaf\x42\x13\x4e\x9b\x40\xd5\x2d\x11\x0a\xb4\x48\x62\xc3\x27\x3e\x30\xf8\xab\x7a\xbd\x73\xe2\xbc\x46\x09\xa3\x05\x0a\x10\xdc\x70\x22\x8c\x81\x13\xff\x7a\x8c\x4c\xbc\x35\xbe\x24\xf8\xaa\xe4\xc3\x59\xae\xf6\x2e\x3b\xff\xa2\xe3\x57\xab\xa5\xcf\x45\xd7\x07\x47\xd3\xf5\xa8\xf3\x6f\xcf\x33\xb8\xe1\x44\x18\x03\x27\x7e\xd7\xf3\x26\x7f\x70\x6d\x55\x99\xe6\xca\x62\x4f\x25\x2d\x17\x2f\x6d\x8f\xea\x10\x87\x41\x95\x9a\xfe\x8d\x23\xe5\xab\x6a\x37\xb6\x5b\x62\xdc\x70\x22\x8c\x81\x13\x0f\xde\x88\x71\x8c\xf0\x96\x22\x3e\x99\xe7\x86\x8e\x30\x16\x9e\xfc\x36\x28\x5b\xd4\x2b\x27\x50\x10\x12\x06\x9f\xea\x30\xdb\xdc\x9e\x67\x70\xc3\x89\x30\x06\x4e\xd4\x13\xfb\x33\x2f\x21\x3a\x53\x47\xcd\x24\x7f\xe3\x84\x66\x7c\xdb\xcf\x38\x97\xa5\xe7\xec\x1f\x8e\x07\x17\xda\x51\x4a\x40\xc2\x9a\x28\x40\xfe\x23\x9c\xb8\xd7\x6f\x93\x62\x2e\xfb\x16\x73\xe5\x9e\xac\x49\x85\x8a\x37\x68\xbe\x09\x0e\xaa\x52\x75\x2e\xfb\x37\x59\x16\xac\xff\x82\xf9\x17\x6f\x86\x97\x31\x7d\x72\xe9\xae\xd2\xbe\xaf\x93\xdc\xff\xa2\xa0\x95\x97\x14\x51\x2f\xf9\xdc\xf5\xde\x1c\xad\x8e\x9b\xe6\xf5\x14\xd7\x3d\x26\x5f\xe4\xb2\x92\xce\xc4\xb7\xab\x34\xd8\x7b\xd4\xe1\xc9\xbd\x72\x8f\xf4\x7d\x9f\xdc\xa9\xdc\xa8\x16\x1c\xfc\xae\xeb\xd7\x1c\x22\x2f\x65\xb9\x18\x44\x7b\xe5\xd4\x33\x81\xdd\xbf\x4f\xba\xdf\x95\xcf\x2b\x23\x7c\xe2\x8f\xd1\xad\xe4\xdb\xb9\x55\x26\x2d\x6f\x02\x1f\x5d\xef\x22\x51\x4d\xf0\x4a\x5c\xe4\xe5\x5f\x9e\xdc\xfd\xe7\x7a\xb5\xf1\xfb\x26\x6a\x66\x3e\x47\x79\xbc\x2a\x19\x3c\x6f\xd2\x64\x77\x1c\xe2\x1c\xa0\xa4\x8d\xf1\x85\x6a\x42\xde\x92\x2b\x9b\xed\xbe\x96\x0b\xb5\x19\xbf\x40\x1d\x41\x6b\xcd\x37\xc4\x7f\x56\xe5\xb4\x8a\xfb\xdb\xa4\xa6\x15\x07\x77\xa7\x23\x3f\x6e\xbc\x91\x5c\x3f\xd7\xbc\xab\x94\x98\xf4\x40\xf7\x8f\x5e\xa9\x53\x11\x9f\x41\x50\x7b\x76\x9b\xe4\x1b\xe7\xc0\x35\xfe\xa0\x64\xe1\xca\xa3\xfc\xda\x92\xba\x28\xef\xae\xd2\xf7\x23\xc9\x1c\xcf\x97\x9f\x58\x55\x5f\xf3\x8d\xbf\x94\x3b\x3c\x2b\x12\x99\x74\x83\xc2\xca\xf5\xb6\x1c\x27\x4b\x45\x70\x05\x75\xcf\xff\x2e\xfb\xf6\x7a\xaa\x3b\x2b\x1a\x06\x4e\xcc\xdb\x57\xba\xda\x61\x67\x3d\xb0\xd5\x3a\xb3\x51\xf0\x37\xef\xe3\xed\x87\x12\x8f\x44\x5c\x6a\x1e\x04\xa4\x76\x0b\x55\x1f\x8b\x61\x41\x01\x82\x1b\x4e\x84\x31\x70\x62\x66\xbe\xe4\x5f\xfe\x83\xe2\x48\x33\x7b\xb4\x9b\x32\x27\x49\x64\xf8\x8b\x4f\x26\x96\xd3\x0a\x13\xc3\x1a\xf7\xb7\x28\x0b\xce\x68\xa0\x00\xc1\x0d\x27\xc2\x18\x38\x51\xeb\xd6\xbd\xdb\xff\x8f\xb4\x3f\x0f\xc7\x22\xfc\xfb\xc7\x7f\x5d\x83\xb8\x26\xfb\x3a\x28\x64\x2d\x64\x97\x7d\xc9\xbe\x94\x35\xfb\xbe\x66\xdf\x77\xca\xd8\xb2\x24\x64\x89\x92\x2c\x59\x42\xb6\x28\x84\x48\xb2\x57\xb6\x12\x91\x22\x42\xc9\xbe\x25\x7e\x87\xfb\xfe\xb9\x0f\x9f\xb9\x8f\xe3\xeb\x3d\xdd\xff\x3f\x8f\x73\xba\xa6\xd7\xeb\x9c\xf3\x3c\xc7\x75\x3d\x7e\x8b\xcc\xef\x2b\x7d\x60\x27\x3f\xfb\x48\x0c\x3e\x47\xcc\x2b\x74\x96\x3c\xdf\xc9\x15\x5b\xce\xad\xc2\x28\x62\x07\x43\x58\xd4\x70\x22\x06\x01\x27\xae\xac\x1a\x3e\x86\x96\xc2\xe9\xbe\x0f\x14\x6e\xd8\x4c\x1a\x6b\xb8\x3d\xaf\xb0\x17\xa6\xf8\x0a\xd0\x15\xbc\xd4\xaf\x9a\x61\x3a\x58\xa3\xa2\x86\x13\x31\x08\x38\xb1\xa8\x8b\x95\x00\xdf\xce\x96\xb3\x9d\x9f\xf3\x79\x17\xe6\xf2\xd9\x3b\x74\x13\x4e\x11\x6e\x1b\x02\x74\xd0\x4b\xe7\x3b\xd7\x30\x1a\x30\x84\x45\x0d\x27\x62\x10\x70\xa2\x50\x4f\x44\xdc\x3b\x8d\x12\x2e\xb2\xfb\x99\xf8\x1e\xe4\x24\x9c\x65\xa9\x5d\xde\x01\x75\xe3\x86\x1f\x3c\x7b\xc3\x4b\x14\x6e\x62\x61\x08\x8b\x1a\x4e\xc4\x20\xe0\xc4\x2b\xf1\x2a\xd7\x9e\xe6\xe8\x78\xbd\x73\x2e\x36\xa1\xee\x75\x8b\x63\xac\xd3\xb4\x21\xa2\x2d\xdd\xd7\x32\x63\xa8\xd0\x2c\xe0\xc6\x81\x21\x2c\x6a\x38\x11\x83\x80\x13\xc3\x16\x23\xb4\x2e\xcc\xaa\x35\xbe\xc7\x26\x57\x9c\xa1\xc9\xec\xeb\x9c\xad\xf7\x58\x7d\xbd\x97\x47\xde\x7a\x5a\xaa\x73\x3b\x87\x19\x86\xb0\xff\x08\x27\x1e\x37\xef\x1c\x36\x13\x02\x4e\x4c\xfc\xa4\xd2\xa6\xa4\x14\xb2\xa6\x6e\x3d\x5c\x91\x10\xb4\x74\x9a\xad\xd0\x40\xe0\x16\x2b\xbf\x46\x9b\xa1\xdf\x5b\x39\xa9\x6f\x27\x61\x08\x8b\x1a\x4e\xc4\x20\xe0\xc4\x8d\x25\x2a\x05\xef\x86\x25\x05\xdb\xf7\x85\x2f\x79\x1e\xbb\x10\x34\xad\x59\xc9\xf7\xe1\x31\x77\xe2\x8f\xd3\x3f\xbe\x24\xad\xe5\x09\x43\x58\xd4\x70\x22\x06\x01\x27\x56\x69\x0f\x2b\x72\xc8\x4a\x34\x64\x7d\x09\x65\xac\x6d\x69\x7d\xb5\x78\xa1\x92\x69\x39\xfe\xdd\xaf\x2f\xcf\x13\x92\x64\x08\x7e\x9f\x86\x21\x2c\x6a\x38\x11\x83\x80\x13\xd9\xa9\xf8\xd6\x5b\x2d\x24\xa8\x59\x77\x5a\xe5\x54\xf6\x9f\x49\x7d\x57\x38\x55\x32\xd2\xd7\x9e\x43\xda\xec\x99\x91\x91\x9e\x28\x06\x43\x58\xd4\x70\x22\x06\x01\x27\x8a\x9c\x71\x05\x4a\x31\x0a\xcd\x78\x4f\x5f\x86\x11\xc5\x44\xd0\xc3\x2a\x31\x03\x89\x8f\x34\xae\x52\x18\x7b\xd8\x9f\x90\x8a\x72\x87\x21\x2c\x6a\x38\x11\x83\x80\x13\xb1\xbf\xf5\x43\x5e\xec\x25\x66\x53\xa4\x93\x66\xf4\xb0\x99\xaa\xe8\x02\xe1\x46\xc3\x14\x5f\xbd\xab\x1a\x4c\x6f\x17\xb0\x4b\x1f\xac\x83\x51\xc3\x89\x18\x04\x9c\x98\x4e\xdb\x6e\x9c\xbe\x3e\xd8\x22\xc4\x93\xab\x9f\xa1\xf4\xa2\x3d\xc0\x41\x9b\x69\xdd\x6a\xa1\x5d\x9a\xe0\xe6\xfb\x4f\x29\xc2\x82\x30\x84\x45\x0d\x27\x62\x10\x70\x62\x0d\xbe\xc9\x0f\x3d\x93\x51\x82\x86\x8e\xb2\x99\xf1\xb3\x4e\x35\xe5\x1d\x8f\x28\x1b\xd7\xc8\x07\x12\x1f\x9e\x1b\xe5\x59\xf9\x68\x00\x43\xd8\x7f\x84\x13\x8f\x7b\x32\x1f\x36\x13\x02\x4e\x2c\xb2\x16\x57\x62\x51\x89\x71\xb9\x6b\x5d\x72\x43\x49\xad\x54\x74\xb4\x26\x58\xf6\xbc\xe4\x66\xc9\x8c\x34\x7b\x46\x65\x93\x1d\x13\x0c\x61\x51\xc3\x89\x18\x04\x9c\x68\x5f\xf9\x7e\xf3\x02\x15\xcd\x5a\xdb\x57\x47\x56\xb5\x86\xc7\x42\xec\x4d\xba\xdc\x3d\x76\x92\xb1\xd4\xf7\x09\x6f\xbe\x09\x0b\x92\x83\x21\x2c\x6a\x38\x11\x83\x80\x13\x37\xae\xce\x4f\x2a\xf1\x2a\x1b\x2b\x44\x79\x5a\xce\x75\x64\x98\xa4\xe4\x5b\x8c\xe3\x62\x42\xf1\x7e\x16\xdc\xd7\x74\xf8\x2e\x70\xb0\x01\x47\x0d\x27\x62\x10\x70\xa2\x77\xec\xb5\x67\x21\x54\x70\xe2\xcf\x9e\xae\x17\xe4\xdf\xed\xca\x1e\x3a\x86\xae\xf2\xb6\x98\x68\xf8\xe3\xd6\x89\x52\x3f\x63\x38\x03\x43\x58\xd4\x70\x22\x06\x01\x27\x8e\xd8\xfc\x1c\x30\x62\x37\x5c\x28\x9a\x86\x94\x03\xb3\x07\x34\x68\xbb\xd2\x17\x9c\x4c\xd9\x79\x7a\xb8\x77\x5f\xc6\x7a\xcd\x9a\xc2\x10\x16\x35\x9c\x88\x41\xc0\x89\xdd\x7f\xa8\x4c\x99\x22\x47\x44\x83\x16\x85\xcf\xe4\xf5\x9a\x27\x9e\x11\x1b\x6f\x06\xe2\xa8\x68\x02\xf9\x45\x1f\xd4\xcc\xb7\x1b\xc2\x10\x16\x35\x9c\x88\x41\xc0\x89\x56\xeb\x81\x5f\x93\x2d\xfa\xd8\xbb\xb7\x43\xb3\x4e\x5c\x93\xff\xe2\xaa\x77\xea\xf1\x8f\x0c\xe6\x90\xd6\x9f\x6d\xa9\x02\xed\x64\xae\x30\x84\x45\x0d\x27\x62\x10\x70\x62\x12\xe9\xd2\x8b\xae\xcf\x6e\x86\x82\x67\x26\x41\xa3\x2c\x17\xef\x8a\x94\xd7\xae\x3a\xcb\x0a\xd4\x83\x67\x6f\xf0\x63\xe0\xcd\x83\xb5\xf6\x3f\xc2\x89\xc7\xad\x5d\x0f\x9b\x09\x01\x27\xb6\x72\x2d\xea\xe0\x35\xc4\xf1\x07\x33\x5f\xc0\x0b\x92\x24\x1c\xc8\xde\x88\xf5\xa6\x51\xfb\xb3\xfa\xf1\x54\x53\xb6\x70\x9d\x8a\x22\x0c\x61\x51\xc3\x89\x98\xff\x05\x27\xa6\x0c\x27\xf9\x38\xbe\xd4\xa0\xa1\x4b\x23\x0a\x6a\x72\x4c\xe5\xc5\x64\x87\x60\x4a\xa4\xd2\xe9\x9f\xfc\x9d\x26\xb9\xe2\x0c\x43\x58\xd4\x70\x22\x06\x01\x27\x8e\xe3\x6b\xb3\xe0\x4d\x8a\xa5\x4a\x5e\x1b\x86\x0a\xd9\x1c\x5d\xd5\xdc\xf3\x48\xfb\xe2\x54\xad\xee\x73\xcb\xab\x44\x6f\xe9\xcb\xc2\x10\x16\x35\x9c\x88\x41\xc0\x89\x21\xda\xea\xda\x17\x70\x4b\x07\xf9\x4a\x03\xae\xbf\x5b\xbf\xa1\xe0\x31\x12\xbe\xb5\x32\x9b\xee\x88\x77\xc7\xe7\xe4\x4a\x84\x1d\x05\x0c\x61\x51\xc3\x89\x18\x04\x9c\xe8\x76\x91\x68\x32\x2d\x9b\xea\x81\x8c\x4c\xbd\x5f\xd3\x27\xd7\x2d\xfd\xec\x41\xb5\xea\xa8\xa7\x3b\xf9\x7f\xcf\xb0\xbc\xeb\xf1\xc2\x87\x21\x2c\x6a\x38\x11\x83\x80\x13\x39\x17\xf7\x9f\x53\xde\x7d\x0c\x74\x31\xc6\xa5\xbe\x26\xdc\xde\xfb\x93\x91\x3b\x9c\xa7\xc8\xac\x80\x7b\xb7\x2a\xd2\x67\xf9\x2f\x37\x0c\x61\x51\xc3\x89\x18\x04\x9c\x48\x5b\xcd\xb6\x9c\xc1\x99\x04\xee\x31\xfd\x1a\xd8\x75\x8e\x75\x61\xa7\x66\x7f\x5a\xd3\x36\x4a\xc6\x44\x73\x52\x45\x44\xb7\xe4\x60\xfb\x80\x1a\x4e\xc4\x20\xe0\xc4\x0c\x7a\xc1\xfe\x1e\xed\x0f\x9b\x4b\x96\x9f\x94\x8d\x7e\x84\x77\xe6\x17\xd5\xa6\xbe\x0a\x35\x83\xfe\x5e\xcc\xe7\x7f\x45\x96\x68\x09\x43\xd8\x7f\x84\x13\x8f\xdb\xdd\x1d\x36\x13\x02\x4e\xa4\xb4\x25\xec\x8b\xf8\x7b\x9a\x2d\x42\xc6\xef\xfd\xa7\x53\x7d\x2e\x32\xf2\xdf\xc5\x86\x98\x2f\x58\x84\x36\xd4\x56\x7e\xb0\x3e\x2f\x03\x43\x58\xd4\x70\x22\x06\x01\x27\x32\x7c\xb4\x5c\x77\xdb\x2c\xe5\xbf\xf2\x9e\x66\xf2\xd9\xb7\x1f\x2a\x4e\x41\x0c\x15\x45\x8d\x1f\x96\x1a\x2e\x3c\xae\x87\x0c\xe8\x0e\x96\x60\xa8\xe1\x44\x0c\x02\x4e\xf4\x2b\xa0\xfa\xec\xf4\x25\xd0\x90\xa5\x9d\xe5\xea\xd5\x6b\xa2\x95\xf1\x8e\xba\x84\xae\xfd\x5d\xb8\x97\x30\x7c\x35\x7f\x9d\x13\x6c\x61\x08\x8b\x1a\x4e\xc4\x20\xe0\xc4\x4e\x69\xc2\x30\xec\x46\xdd\xab\xaa\x7a\xed\x47\x67\xb5\x5b\x82\x2e\x33\x2a\xc6\x2d\x0a\xfe\xa8\xdc\xe5\x8e\x3d\xe3\x36\xf0\xd4\x1e\x86\xb0\xa8\xe1\x44\x0c\x02\x4e\xb4\x0f\xe6\x1a\x55\x9d\x33\x66\x9f\x1d\xf3\xed\xf9\xc9\xe0\x1c\x66\x9f\x55\x3e\xd4\xd9\xfd\x8b\xac\x26\xf8\xf5\x93\x97\x4a\xdb\x3c\x30\x84\x45\x0d\x27\x62\x10\x70\xe2\x47\xcd\x4a\xa1\xc6\x47\x37\xeb\xd9\xcc\x6c\x39\x14\xe8\xce\xde\xef\xbb\x67\x80\x97\x94\x2e\x24\x21\x27\xa0\xa4\xb6\x53\xd4\x72\x11\x86\xb0\xa8\xe1\x44\x0c\x02\x4e\x54\x58\xfa\x22\xcc\x1b\xfa\xa0\x7e\xe3\xcb\x2f\x66\xbc\x82\x2b\xcd\x15\x96\x00\x87\xa5\x5d\x48\x40\x4b\xea\xe3\x3e\xba\x12\x65\x3c\x18\xc2\xa2\x86\x13\x31\x08\x38\xb1\x31\x62\x9a\x50\xe1\xd7\xdb\xed\xe4\xd9\x20\xa5\xd1\xe0\x47\xd1\x32\x6b\x1f\x4e\xcd\x12\xc8\xc7\x74\x13\x10\x10\x69\x56\x0e\x50\xc3\x10\xf6\x1f\xe1\xc4\xe3\xce\x3f\x0e\x9b\x09\x01\x27\x5e\xf5\x6c\x6e\x4d\x77\x1d\xe9\x1d\xd2\x34\xe1\xd5\xd2\x5b\xe5\xdc\x39\xf7\xe3\x5d\x88\xab\xd8\xa9\x92\x34\x7b\x02\x80\x75\x4d\x0b\x86\xb0\xa8\xe1\x44\x0c\x02\x4e\x34\x11\xc5\xbe\x37\x8b\x8d\x0b\xdc\x64\xa0\xa4\x50\x89\x1a\xce\x8c\xad\x6e\xf1\x49\xf1\x05\x5e\xb8\x7a\xdf\x11\x4e\x33\x9a\xe4\x84\x21\x2c\x6a\x38\x11\x83\x80\x13\x81\xdf\xf5\x49\x38\x98\x5b\x7f\x37\xe4\xbe\xb8\xcf\xfd\xd1\xb6\xac\x63\x11\xc7\x64\x9b\x11\x53\xe9\x30\xf4\x47\x93\xd1\xd2\x13\xc3\x10\x16\x35\x9c\x88\x41\xc0\x89\xf5\x3d\x9f\xfd\x34\xcf\x0a\x6a\x5c\xcf\x2d\x14\x5a\x29\xfc\x0a\x39\x3b\x89\x1b\x2b\x1a\x57\x92\x99\xf7\x58\xaf\x6c\xef\x6a\x5c\x82\x21\x2c\x6a\x38\x11\x83\x80\x13\x15\xe2\x39\x7a\xca\x13\x38\x3b\x93\x33\xec\x4b\xa2\xc9\x6c\x6f\xf2\x78\xec\x4d\x39\xbd\x7e\xa0\x41\x4e\x10\xf5\xc3\x5d\x41\x9c\x05\x86\xb0\xa8\xe1\x44\x0c\x02\x4e\x14\x54\x12\xf4\x76\xc5\xa3\x14\x66\x61\x78\x71\xed\xd4\xc0\x0b\x6d\x0f\x6f\xfe\x44\x53\x76\xc2\x5b\xe9\x7e\xf7\x0a\x98\xc8\xc7\x19\x60\x08\x8b\x1a\x4e\xc4\x20\xe0\xc4\x8f\xed\xda\x1d\xde\x9b\x26\x3e\x5e\xdc\x39\x0c\x6a\x66\x8e\x27\x0b\xe7\xc0\x9c\x06\xaa\x8a\x4f\x98\xe5\x33\x79\xc4\xb6\xfa\x07\x4b\x7b\xd4\x70\x22\x06\x01\x27\xb6\xf9\x03\x11\x3e\xc1\x1a\xe1\xbe\xa7\x00\xfc\x2d\x59\xf9\xa8\x9a\xe5\xe5\xbe\x5b\x6d\xc0\x1f\xae\x27\x63\xcd\x26\x42\x72\x64\x30\x84\xfd\x47\x38\xf1\xb8\x13\xc2\xc3\x66\x42\xc0\x89\x24\xb8\x38\x74\x22\x97\x1f\xff\x21\xb0\xfa\xc8\x5f\x12\xbf\x61\xdb\xfb\x4e\x95\xfd\xf7\xeb\xe8\x02\xce\xf1\x36\xd2\x66\x9b\x6d\x66\x18\xc2\xa2\x86\x13\x31\x08\x38\xd1\xbb\x25\x49\xac\xe6\x72\x41\x6b\x1c\xe6\x44\xf7\xdd\xde\x4f\x8b\x7a\x53\x03\x7f\x75\x74\x06\xc2\x22\x64\x82\xdc\x99\x1e\x06\x99\xc1\x10\x16\x35\x9c\x88\x41\xc0\x89\x61\x6d\xc6\x3f\x72\xe9\x4e\x7d\xff\x92\x78\x69\x5d\xb2\x5d\xd2\x69\x24\xdf\x7e\xf6\x5a\x7a\xe6\xc4\x5b\xf9\x6f\xf5\x7b\xf1\x91\x42\x30\x84\x45\x0d\x27\x62\x10\x70\xe2\xfd\xdf\x5f\xb0\x41\xe6\xc0\x6d\xaf\x45\x93\x90\x36\xbb\xdf\x78\x0e\x65\x29\xfa\x09\xc6\x9f\xae\x08\x11\x73\xa6\xe7\xb3\x79\x13\xc1\x10\x16\x35\x9c\x88\x41\xc0\x89\xf5\x78\x56\x9e\xc1\x25\xfc\xe3\x66\x0f\x03\x97\xae\xf0\x9c\xab\xbf\x84\x23\xa1\x92\x1e\xfd\x7d\xed\xd7\xa5\x7b\x29\x71\xe2\x85\x07\x33\x3a\x6a\x38\x11\x83\x80\x13\x55\xa3\x62\x1d\xad\x0b\x71\xae\x2a\xd0\x3a\x34\x8a\xe7\xd4\xde\xc5\xb4\x13\xf4\xc6\xf2\x63\xb9\x86\xaf\xa8\x73\xdf\xd4\xe1\xd2\x87\x21\x2c\x6a\x38\x11\x83\x80\x13\x27\x24\x06\x68\xe9\x69\xdb\x4b\xa3\xe3\x67\x89\x9c\xde\x89\x0b\xa8\x4f\x7d\x1b\x36\x65\xd1\xe7\x8b\xba\xe8\x75\x56\x3a\x0e\x7b\xb0\x5c\x45\x0d\x27\x62\x10\x70\x22\x1d\xab\x87\xd4\xb0\x04\x89\x86\xcb\xad\xb4\x50\xc3\xd0\x49\x27\x8e\x90\x66\xc6\x29\xb1\x53\x29\x99\x92\x24\x1d\x96\xa7\x7f\x9e\x85\x21\xec\x3f\xc2\x89\xc7\x9d\xa1\x1f\x36\x13\x02\x4e\xd4\xb9\x1e\xa1\x20\x95\x60\xe3\xaf\xdf\x4e\xbe\x9a\x85\xfb\x59\xf9\x69\xd1\x55\x03\x9c\x2e\x9e\x53\xf4\x05\x85\x3c\x1d\x1a\x3f\x0e\x8a\x10\x35\x9c\x88\x41\xc0\x89\x9a\x14\x39\x50\xff\x5b\xa6\x58\xbf\xd6\x69\x0b\x25\x8a\xa9\x68\x1d\x37\xf7\xe4\x69\xa7\x89\xe4\xf4\xdd\x07\x38\x56\x8d\x4b\x76\x30\x84\x45\x0d\x27\x62\x10\x70\xa2\xec\x47\xa3\xce\x9e\xbb\x11\x39\x4e\x2c\xd3\x7f\x9c\xde\x89\x2a\xaf\x7d\x6c\x7c\xc3\x7a\xd6\x2b\xfe\x46\xf5\xf7\x71\xfe\xcd\xff\xfa\xc3\x42\xd4\x70\x22\x06\x01\x27\x9a\xd0\x76\x1b\x08\x0f\xde\x1d\x3b\xbd\x5d\xf8\x9a\xf7\x25\xb7\xe8\x7d\x9b\x8f\x22\x45\x3e\x5e\x40\xe5\x38\xc6\xac\xe4\x42\x99\x38\x0c\x61\x51\xc3\x89\x18\x04\x9c\x58\xfc\xb8\xab\xcd\xf7\xcd\x37\x29\xb3\x02\x8a\xa8\xe9\xec\xaf\x3b\xc2\x4b\x54\x51\x35\xb0\x1f\x5f\xa6\x89\x99\xa3\xee\x0d\x6b\x7a\x18\xc2\xa2\x86\x13\x31\x08\x38\x51\x6f\x0a\x3f\x8c\xe2\x3c\x39\xf8\xed\x2a\x6b\xae\xbd\xa8\x0d\xf3\x55\x95\xf7\x49\x9f\x9f\x35\x27\x2c\xad\xcb\x94\x70\x0c\x78\x4a\xc1\x10\x16\x35\x9c\x88\x41\xc0\x89\x6f\x4a\x74\xaa\xf0\xe9\xaa\xb9\x97\xe6\x2d\x08\x2c\xb1\xb7\x08\xaf\x1a\xbe\x74\xc7\xae\x9b\x9f\xb2\x8e\x3b\xed\x7e\x47\x58\xcc\x1b\x86\xb0\xa8\xe1\x44\x0c\x02\x4e\x14\xe4\xb9\x22\x13\x70\xce\x7e\xd8\xfa\x87\xe0\x00\x49\x9f\xa9\xc4\xac\x65\x6c\x2f\xce\x6c\x74\xe3\x5c\xa3\x88\x39\x97\xe7\x96\x32\x0c\x61\xff\x11\x4e\x3c\x4e\x17\x44\xbc\xec\x9b\xd5\xb7\x49\x5c\x4a\xd2\x65\xfe\x1e\x6d\xd4\x3e\x92\x5c\x77\xd3\x88\x93\xd9\x79\xf1\x93\x98\xcc\x98\xbf\x8c\x75\xcb\x7b\xee\xc5\x23\x51\x25\x6e\x46\xd3\xbc\xcb\x79\x01\x82\xbd\x05\x98\xf5\x96\xc5\x8c\xd0\x3d\x62\xb2\xcf\x7a\x9f\x1c\xb1\x9b\x7d\x0d\x8d\xe5\x16\xf9\x47\xa2\x4e\x54\x65\x5a\x59\x0b\x5c\xca\x67\x13\x69\xa9\x47\x68\x5c\x64\x42\x5d\x2f\x9f\x13\x35\x7a\xb2\x64\xa6\xd5\x33\x76\xd5\x3b\x88\xed\xe8\xbb\xb6\xe5\x06\x27\xcf\x6f\x2d\x4e\x9b\xef\x89\xbe\xe0\xa5\xaf\x6c\x62\x56\x3b\x74\x4d\xfd\x2a\xba\x6b\xdd\x8d\x9b\xa9\x38\xf4\x05\x8f\x44\x3f\xf0\x24\x14\xa5\x36\x4b\x7d\xd2\xbd\x72\x45\x39\x2f\xae\x9c\xca\xfe\x81\x0a\x6f\x8c\x91\x19\x8b\xb4\xad\x30\xef\xd3\xd9\x8e\xab\x47\x35\xc4\x45\xb1\xf8\x76\xe6\xc0\x51\x72\xc9\x05\x79\xdc\x9a\xab\xc2\x5a\x26\xd3\x73\xbc\x9d\x5a\x76\x82\x55\x65\xbd\x53\x4f\x3f\xdc\x39\x12\x5d\xd6\x0d\x0c\xcd\x14\x8d\xa6\x50\x9b\xd6\xe8\x8b\x49\xff\x4b\xcd\xca\x7c\x56\x55\x9c\xa5\xac\x09\x5e\x8d\x2f\xde\x69\xb9\x3c\x79\x24\x4a\x6a\x5a\x7c\xf6\x04\x73\x3b\x39\x59\x9c\x53\xa6\x71\x5e\x9f\x5b\x3a\xf5\x7c\x67\x45\xb0\xae\x8e\xdf\xd3\xbe\x61\x1a\x30\xf4\xe4\xff\xbc\xec\x3b\xee\xae\xfe\xff\x67\x34\x00\x61\xf6\x29\x95\x3c\xf4\x22\xdb\x29\xb2\xc3\xfe\x61\xf2\xc5\x1d\xf6\x20\x0c\x0e\x00\x3e\x51\x0c\xee\xfe\xda\xbe\xcb\x98\x38\xce\x99\xa6\x02\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x23\xc4\x05\x09\x92\xb8\x45\x89\xc2\xaf\x34\xf1\x33\xcf\xcb\x75\xda\xbd\x99\xd9\xf8\x16\x40\xe9\x50\x0e\x41\xc9\x6a\x7e\xde\xfc\x30\x04\xa2\x36\xfb\x00\x84\xd9\xa7\xf5\xb7\xde\x31\xf7\x14\x39\xe0\xe0\xf2\x20\xcf\xa0\xec\xf5\xcd\xee\xd7\x1b\xd6\x49\x82\x97\x2c\x5c\xbb\x6d\xe2\x0b\xdc\xc5\x4d\x61\x08\x44\x6d\xf6\x01\x08\xb3\xef\xdc\x5e\xb9\xef\x65\xa2\x62\x22\x09\x83\xac\x9d\x0e\x75\xfb\x66\xea\x62\x4d\x1f\xcd\x3a\x47\x11\x06\x7a\x3a\x2b\x3f\x7a\x21\x79\x18\x02\x51\x9b\x7d\x00\xc2\xec\xd3\x88\xc8\x4a\xf1\x26\x50\x4f\xb6\x2d\xb8\xb6\x43\xbb\x70\x61\xfb\x99\x2b\xeb\x87\x64\x77\xf7\x26\x01\x73\xf1\xa6\x8f\xdf\x34\xe9\x61\x08\x44\x6d\xf6\x01\x08\xb3\xcf\x62\xff\x53\xfc\xf2\x87\x0f\xd4\x71\x1b\xfc\xc3\x9a\xf4\x92\xce\xaf\xe2\xf1\x61\x41\x6d\x49\x7c\xe5\x85\x52\xb3\x67\xee\x25\x7c\x30\x04\xa2\x36\xfb\x00\x84\xd9\xf7\xda\xbe\xff\xad\xca\x40\x4c\xce\xad\x90\x4b\x9b\x6e\x1c\x09\x9f\x0b\xa3\xdc\x36\x53\x55\xf6\x4b\x9e\xcd\x58\xd5\x6a\x94\xbe\xf0\x80\x21\x10\xb5\xd9\x07\x20\xcc\x3e\x6d\xb2\x8f\x17\x9d\xf1\x70\x2a\x27\x3f\x16\xcb\x5e\xb7\x92\x5e\x85\xd6\xcf\x15\x51\x6d\xbc\x1b\xdf\xf5\xa1\xac\x90\x08\x73\xe4\x86\x21\xf0\x1f\xcd\xbe\xe3\xe6\x9d\xc3\x66\x42\x98\x7d\x13\x0b\x2a\x77\xcf\xc7\x38\x89\x88\x13\xd0\xdf\xd7\x48\x19\xa8\xe5\xe9\xf5\xb3\x26\x59\x2f\x88\xb0\xfd\xf0\x8e\x92\xfe\xdd\xb2\x24\x0c\x81\xa8\xcd\x3e\x00\x61\xf6\xc9\x98\x0c\x70\xdc\x48\xd2\xc8\xed\x28\x55\xf3\x09\x1b\xdb\x76\x5c\xd9\xa8\x7e\x6b\xeb\x20\xb1\xd5\x53\xd9\xf1\xe6\x84\x0c\x20\x01\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x1f\x74\x33\x94\x5a\xec\x58\xed\xcf\xf1\x35\x2a\x02\x76\xae\xb2\x6d\x5e\xca\xde\xe9\x51\x9f\x37\x83\xeb\xd7\xd2\xff\xf8\xb3\x13\xc1\x10\x88\xda\xec\x03\x10\x66\x9f\xac\xdd\xb4\xd6\x79\xd5\xba\x26\x8a\xd7\xbf\x9f\x8b\x86\x07\x7d\x70\x8d\xe6\x4f\xfe\x94\xf5\x8d\x8a\x5a\x80\xbb\x4b\x2b\x4b\x54\x10\x86\x40\xd4\x66\x1f\x80\x30\xfb\x74\x86\xe7\xe7\x5e\x9d\x55\x93\xda\x48\x64\x5e\x04\x65\x77\xc9\x9d\x7c\xe5\x98\x4b\x52\x3f\xaf\xf1\xcb\x47\x9f\x4b\x18\x1f\xc5\xc2\x10\x88\xda\xec\x03\x10\x66\xdf\x97\xd3\x4c\x3f\x7d\x05\x5c\xff\xbc\xce\xa4\x53\x74\xde\x52\xf6\xcd\xf5\x3b\xcb\x4b\x27\xf8\xa2\x83\x3c\x6e\xfb\xe3\xfc\x0b\x55\x5c\x18\x02\x51\x9b\x7d\x00\xc2\xec\xab\xba\x78\x31\x7d\x59\x31\x8e\xe7\xcb\x46\xa7\xb2\x4a\x46\xa4\xc7\x83\x2e\x6d\xd9\x9b\x77\x2a\x3e\xf3\x45\xd5\x87\xe3\xaf\x09\x50\xc1\x10\x88\xda\xec\x03\x10\x66\x1f\xc6\x92\x03\x27\x91\x62\xe4\xb7\x63\x43\xb2\x98\x2d\x7d\xba\xfe\x99\x19\x22\x1f\x51\xdc\xb3\x6f\xbf\x79\x11\x3e\x29\xbb\x69\x72\x01\x86\xc0\x7f\x34\xfb\x8e\x7b\x32\x1f\x36\x13\xc2\xec\x8b\xdc\x3e\x19\xda\x2e\x37\xaf\x1b\x90\xa2\xf8\x89\xe6\xc3\x9f\x9a\x31\xb5\x3c\x3f\x71\x19\xbb\x8e\x4e\xd6\x17\xf4\xb3\x2a\x59\x16\x30\x04\xa2\x36\xfb\x00\x84\xd9\x17\xe5\xe5\x73\x31\xf7\xa6\xcf\x2e\x6b\x7a\x19\xdf\x7a\x41\x5a\xc2\xda\xdc\x4f\x63\x40\x68\x60\x72\x62\x27\xbb\x44\xd9\x08\xcf\x01\x86\x40\xd4\x66\x1f\x80\x30\xfb\x5c\x7f\xaa\x5f\x0b\xa5\x4d\x54\xad\x3b\xbd\x78\x35\x27\x54\x73\xfb\x3c\x30\xc7\x39\x20\xd6\x7d\x93\x35\xc4\x3c\x70\x82\xd8\x48\x1d\x86\x40\xd4\x66\x1f\x80\x30\xfb\x8c\x76\x56\x05\xae\xec\xb1\x9f\x97\x2f\xe7\x98\x89\xa6\xbd\x00\x8b\xe5\xfd\x0e\x30\x6a\x86\x6a\xdd\x1a\x8a\x13\x57\x9b\x07\x4e\xc0\x10\x88\xda\xec\x03\x10\x66\xdf\xcd\x96\x7a\xeb\xe7\xfe\xfd\x45\xd6\x3b\xd3\x76\xf5\xe6\x86\xdf\x98\x06\xea\xea\x15\x04\xf7\x1f\xf3\xf0\x5d\x29\x66\xd3\x28\xb2\x87\x21\x10\xb5\xd9\x07\x20\xcc\xbe\xcb\x44\xae\x04\x61\xa7\x6a\x7d\x37\x4b\x4b\xce\x7d\xb6\x93\x23\xbe\x1f\xe4\x61\x94\x72\x9f\x88\xe3\x7e\xc2\xb7\xe2\x37\x1d\xfc\x9c\x30\x04\xa2\x36\xfb\x00\x84\xd9\x07\x90\xb4\x5d\x61\x25\x4c\x9e\x59\xf8\x59\xa6\x3d\xd1\x62\x2b\x7d\x92\x70\xca\xb2\x72\xc2\xe9\x65\x3a\x58\xbe\xe6\xda\x43\xe5\x0a\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x35\xbe\x05\xf1\xee\xab\x9e\xc3\x19\xa3\x37\xe8\x89\xc4\xc7\x36\x7a\x95\x96\xf9\xf7\x9f\x6a\x49\xdb\x37\x8a\x98\x19\x46\xa6\x6a\xc2\x10\xf8\x8f\x66\xdf\x71\x6b\xd7\xc3\x66\x42\x98\x7d\x92\xed\x84\x75\x01\xd4\x67\x6d\xb3\x3b\xa7\xcf\xbd\x54\xf2\x10\xb8\xd7\x3b\x65\x72\x8f\xac\x76\xb3\x88\x2c\x70\xb6\x3f\x75\x4e\x18\x86\x40\xd4\x66\x1f\x80\x30\xfb\x12\xaf\xb0\x85\x74\x35\x95\x27\x7e\xc0\x7d\xa5\x68\xce\x7e\x3d\x3f\x50\xf9\xf6\x58\x98\xed\x15\x53\x21\x75\x2e\x05\xbd\x96\x0e\x62\x18\x02\x51\x9b\x7d\x00\xc2\xec\x4b\x76\x7b\x76\xf3\xc9\x93\xd8\x25\xf2\x26\xf6\xac\x41\x85\xf6\x8a\xbe\x7b\xdf\x84\x86\x04\xa9\x7a\xa9\xc7\x97\x4d\xf3\xa6\x3d\x8c\x61\x08\x44\x6d\xf6\x01\x08\xb3\x8f\xe9\xf9\x8c\xc9\x5a\xf6\x9b\x75\xda\x55\x0c\x25\x41\x27\x27\x9e\x66\x55\x68\x54\xfe\x95\xf5\xbc\x8d\xeb\xe1\x65\x45\x0f\x2b\x0f\xfe\xf3\x50\x9b\x7d\x00\xc2\xec\xbb\x3a\xa3\xc6\x56\x7e\xce\x34\x41\xd6\xea\xb2\xc4\xef\x22\xc1\x5b\x61\x1e\x60\xf4\xa7\x6f\xfa\x0f\x25\xeb\xd4\x6f\x39\x02\x8d\xca\x30\x04\xa2\x36\xfb\x00\x84\xd9\xb7\xa2\xf3\x7e\xab\x9f\xaf\x9a\xaa\xaf\x8c\xe6\x62\xfa\x35\xaf\x61\xcf\x45\x87\x1d\x17\xd2\x18\xdc\xd1\x0b\xa7\x96\x18\x75\x37\xb9\x60\x08\x44\x6d\xf6\x01\x08\xb3\x8f\x94\x39\x26\xcf\x72\x35\x9f\xd1\x58\xc0\xfb\xf6\x93\x2e\x3f\xfd\x49\x83\x29\xb8\xa9\x82\x57\x69\x05\x30\x2e\x2a\xd0\xba\x29\x05\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x57\x19\x6f\xda\xde\x7a\x3f\xc0\x31\xce\xe4\x13\x67\x5e\x72\x2b\x52\x44\xe8\x5e\x61\x09\x91\xf9\xce\x12\xcf\xb7\xbd\x14\xc2\xd4\x83\xa5\xe4\x3f\x9a\x7d\xc7\xed\xee\x0e\x9b\x09\x61\xf6\xe5\x66\x13\xd3\x5e\xc8\x29\x15\x1e\xf8\x5d\xd3\x68\xee\xd0\xde\x60\xc4\x76\x7b\x50\x64\xd0\x4e\xa9\xef\x1e\x0b\x57\x6d\x89\x87\x3b\x0c\x81\xa8\xcd\x3e\x00\x61\xf6\x71\xe3\x98\x16\xfa\x96\x78\x3c\x1d\xef\x71\xdb\xaa\x69\xe0\x32\x2f\xa5\xda\x89\xd9\x55\xb9\xb9\x91\x82\x77\x41\xc5\xd4\x49\xe9\x60\x26\x44\x6d\xf6\x01\x08\xb3\x6f\xc5\xdb\x9f\xe4\xcb\xe7\x47\xe7\x65\xa0\x22\x61\x8e\x34\x4d\xb5\xe8\xd9\x31\xad\x69\x03\xd1\xad\xbd\xd4\x70\xa5\xa7\x9e\xf6\x34\x30\x04\xa2\x36\xfb\x00\x84\xd9\xd7\x76\x47\xb5\x33\x3e\x46\xb2\x7a\xd4\xc4\x47\xe7\x81\x44\x22\x3b\x9d\x89\x42\x13\x2d\x69\xff\xcf\x9b\x3a\xad\xe2\xde\x89\x94\x84\x30\x04\xa2\x36\xfb\x00\x84\xd9\xc7\xbe\xd9\xce\x97\xd1\xc8\xb0\x79\x97\x9f\x7d\x48\x85\xbf\x5a\x36\xe1\x95\x70\x1a\x29\x8b\xa0\x2e\x59\xe7\xd2\xc2\xcb\x6c\xb1\x83\x19\x1d\xb5\xd9\x07\x20\xcc\xbe\xf7\x9f\x6b\x6a\xcc\xc5\xb4\x7e\x2d\x4b\xf7\xe2\xda\x93\x49\x75\x9e\x32\x9b\x3f\xd5\xc2\xc6\x04\x7b\xd1\xbb\x7c\x7d\xb8\x14\xa8\x0d\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x9b\x51\x9c\xbb\xe7\x62\x9f\x92\xe5\x9d\xbe\x1d\x1c\x78\xdf\x65\xcc\x91\x36\xf6\x47\x6c\x62\x0a\x03\x5c\x1a\x62\xb2\x94\xdb\xe5\x02\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x33\xb8\x56\xad\xe4\x7f\x9f\xf6\x9e\x29\x1d\x54\x5d\xa7\x29\xf7\x99\x0f\x25\x12\xb3\x15\x6b\x10\xf2\xc7\x0b\x9d\x5b\x6b\x71\x3d\x58\x8d\xfc\xa3\xd9\x77\xdc\xf9\xc7\x61\x33\x21\xcc\xbe\xef\x9c\x61\xf5\x6c\x81\x57\x5d\xe6\x80\x64\x11\x9c\xfd\xb0\xa0\xa5\xd9\x3b\xc9\xb4\xd7\x1d\xd4\x30\xab\x82\x46\x9f\x63\xd8\x65\x60\x08\x44\x6d\xf6\x01\x08\xb3\xef\xbe\x1b\x51\xdb\x64\x84\xe6\xb5\x1d\x85\x25\x0a\xaf\xb3\xa2\xeb\x8e\x0e\xa6\xfc\xa5\xaa\xcd\x39\x81\x7c\x25\x4e\x17\x44\x42\x0d\x61\x08\x44\x6d\xf6\x01\x08\xb3\xaf\x58\xc4\xc8\x50\xcc\x68\x71\xe5\xb2\xcd\xc6\xe3\xa4\xe6\xf9\x1c\xc3\x65\x3e\xfe\xe7\x62\xd2\x52\xfb\xf6\xd3\xa5\x33\xb4\x7f\x65\x61\x08\x44\x6d\xf6\x01\x08\xb3\xef\x99\xcf\x0a\x97\x7f\xbb\x72\x45\x47\xd2\x09\x48\x4a\xdb\xd2\xcc\x73\xf8\x0c\x8c\x33\xed\xad\xf8\x43\x7a\xfa\x69\xc0\xfc\xf8\xc1\x72\x15\xb5\xd9\x07\x20\xcc\xbe\xaa\x98\xfd\xc5\x3b\x9e\x5d\x5f\x52\x7e\x2b\x72\x32\x8d\xe6\xe1\xe9\xc2\x6c\x94\xa7\xdf\xd7\x68\xfb\xa4\xdb\x9e\xe0\x89\x4a\x77\x86\x21\x10\xb5\xd9\x07\x20\xcc\xbe\x02\x7e\xe3\x67\xb9\x9f\xb9\xb6\x84\x13\x22\x7e\x09\xcc\x37\xca\x6d\xe3\x8a\xaa\xda\x4b\xb9\xbc\xa8\xb5\x90\x8d\x23\x2a\x02\x0f\xae\x81\xda\xec\x03\x10\x66\x9f\x83\x06\xb7\x10\x47\xbe\xa4\xb3\xa7\x2d\xc1\xc9\xfd\x33\x3a\xcf\xfe\xc8\xb9\x4e\xda\x7d\x79\x6b\x31\xdb\x33\x75\x1b\x37\xf0\xd6\xc1\xd3\x0f\xb5\xd9\x07\x20\xcc\xbe\xb4\xdc\x54\x2b\x5d\x7b\x67\x0e\xa1\x2b\xdb\xba\xe9\x5f\x57\xd3\x58\x4f\x7c\xc3\x0b\x9e\xd5\x1c\x23\xfc\xc3\x94\x4f\x30\x10\x76\xd0\xb0\xff\x68\xf6\x1d\x77\x42\x78\xd8\x4c\x08\xb3\xaf\xf7\xa2\x78\xc8\xed\x8f\x6f\x5a\xf1\xa7\x09\x3d\x77\xd7\x1f\x37\x25\x44\x58\x2c\xfe\x84\x6b\x43\xc5\xf9\xbd\x5c\x80\x8a\x46\x01\x18\x02\x51\x9b\x7d\x00\xc2\xec\xcb\xbc\x74\x3a\xcf\x57\xc2\xb9\x81\x34\x2c\xbe\xe0\x99\xc6\xdf\xcf\x27\xba\x33\x15\x3c\x3f\xc5\x95\xe9\x17\xb0\x58\xf5\x51\x5f\x33\x87\x21\x10\xb5\xd9\x07\x20\xcc\xbe\x81\x24\xcd\xd9\x75\xb5\x87\xd7\x30\x59\x66\x6f\xd7\xbd\x1e\xec\x5f\x88\xbf\xdd\x4a\x25\xe2\x4b\xa7\x59\xb7\x5e\xdc\x86\xa1\x27\x82\x21\x10\xb5\xd9\x07\x20\xcc\xbe\x51\x69\xa3\xfb\x7f\xab\x0c\x0d\x5f\x53\x14\x4e\x29\xf3\xf3\x6f\x33\xdd\xd0\x4d\xa2\x89\x09\x6e\xb3\x30\xf3\xb0\xaf\x7f\xf1\x44\x0e\x86\x40\xd4\x66\x1f\x80\x30\xfb\xb4\x77\xc2\x39\x25\xb7\x46\x07\x94\x49\x45\x9e\x8d\x7b\xb3\xba\x7c\x5a\x35\x97\x2c\x1b\xb6\x11\x55\x0c\x34\x38\x77\xa7\xbb\xf7\xa0\x61\x51\x9b\x7d\x00\xc2\xec\x7b\x23\xb0\xfa\x63\x62\xac\xde\xb2\x15\xab\xb5\x79\x43\xbb\xec\xa9\x75\xf2\xd6\xd6\x8b\xdd\x9b\xe1\xa5\x1f\x7b\xba\x27\xc4\xf8\x0e\x56\x0a\xa8\xcd\x3e\x00\x61\xf6\x25\xbe\x4c\xcc\x67\xe0\x1a\x4c\xf7\x2c\x6c\xc2\x4e\xf5\x62\xd8\xd2\xb4\x92\xc3\x36\x2e\x93\x97\xee\x6d\x91\x9d\xe0\x77\x37\x30\x85\x21\x10\xb5\xd9\x07\x20\xcc\x3e\x26\x42\x3c\x6c\xe8\x9d\x9f\xb4\x4a\xde\x83\x56\x7d\x1e\x1a\xd9\x4a\xd5\x66\x76\x6e\x3c\x67\x84\xec\x0a\x9d\x8a\xf3\x14\xf9\x0e\x56\x55\xff\x68\xf6\x1d\x77\x86\x7e\xd8\x4c\x08\xb3\xaf\xcb\x29\x5b\x64\x5c\xf1\xfa\xa4\x00\x6f\x2a\xf0\x5b\x9e\x7f\xf1\xd3\xea\x13\xa7\x88\x92\xfd\xb1\x3f\x44\xd5\x33\x9e\x4f\x2e\xd1\xc3\x10\x88\xda\xec\x03\x10\x66\x9f\xe8\x3b\xa6\xb7\x34\x2d\xef\xcd\xf9\xc4\x3a\xe5\x09\x3f\x7d\x97\x70\x79\x19\xb7\x64\xae\x53\x1b\x09\xe4\x0d\x7d\x22\xbf\x76\xeb\x3c\x0c\x81\xa8\xcd\x3e\x00\x61\xf6\xfd\x4e\x8e\xac\x08\xcd\x3f\x57\x8f\x23\x17\x3e\xfe\x84\x4a\x3f\x96\xc8\x4e\x4e\xb6\xdd\xfd\x22\xe7\x7d\xd9\x69\x75\x93\x7e\x76\x15\x18\x02\x51\x9b\x7d\x00\xc2\xec\xfb\x7b\xf9\xb6\xa8\xb8\x41\x57\x1b\x95\x4c\xc7\x9a\xd8\x47\x41\x9e\x24\xfd\x9e\x54\x49\x9b\x3a\xfe\xe4\x11\xc2\xe8\xfe\x7b\x03\x07\xfb\x19\xd4\x66\x1f\x80\x30\xfb\x6e\x93\xa9\x44\x6f\xb5\x9d\x68\x2f\x34\x6c\x16\x07\x7b\x72\x89\x5f\x37\xcb\xb4\x5a\x8e\x3d\x34\xc0\x14\x43\x8b\xb1\x7d\x1f\x01\x18\x02\x51\x9b\x7d\x00\xc2\xec\x3b\xc9\x95\xe5\xd6\x7b\xb7\x52\x34\x52\xa6\xea\x6f\x26\x0c\x93\x1b\x66\x58\x5e\x8f\x37\xe3\x75\xaf\x70\xe9\xba\x1a\x72\x65\x8e\x04\x86\x40\xd4\x66\x1f\x80\x30\xfb\xe8\x4f\x7a\x31\x5b\x99\xf1\x70\x04\xed\x19\x5f\x3b\xc7\x62\x4e\x65\xe9\xd2\xe1\xd1\x24\x56\x62\xdd\x48\x15\xf2\x22\x9a\x58\xf1\x60\x2f\x8e\xda\xec\x03\x10\x66\x5f\x97\xb7\x5f\x38\x31\xb6\xea\xef\xcb\x91\x0f\x96\x37\x60\x26\xe9\x2d\xe7\x6e\xe2\x59\xef\x29\xf2\xa7\x44\xb8\xce\x8a\xfc\x6f\x3c\x61\x08\xfc\x47\xb3\xaf\xfa\x72\xee\xb3\x45\x5f\x0d\xf9\x14\xa5\x44\xbf\xcd\xc9\x17\xd4\x6d\x0e\xe6\x4b\x31\xa1\x53\xad\x59\xad\x17\x43\xf0\x28\x4a\x42\x11\x2f\xfb\xe6\x73\xbf\xe1\xd4\xea\x64\x9e\xbf\xf5\xa9\x50\x50\xc5\xec\x8a\x7e\x48\xee\xc2\x96\x95\x57\xae\xdb\xd7\x22\xae\xe5\x4b\x8f\x8b\xf7\x8f\x44\x13\x94\xb2\x29\x04\x42\x07\x58\x96\x3a\xd5\x33\x23\x72\xa2\xf0\x5b\x54\x29\x99\xec\x9a\xce\x2a\xf6\xa7\x4b\x9d\x11\x51\x2d\xaf\x3f\xfa\xcd\x3e\xd6\x27\x42\xda\x67\x45\x74\x1f\x12\xad\xd0\x9e\x75\xf8\x7c\x26\x53\x23\xcb\x65\x28\xee\x62\x80\xfd\xb5\xb6\x41\x39\xbb\xeb\xd8\x23\xd1\x46\xad\xa7\x27\x62\xa3\xef\xee\x7e\xc6\x2f\x7a\xd6\xf5\xbc\xaf\x70\x9c\x31\x26\x45\xa7\xed\x9d\xd6\xf0\x5d\x61\x8b\x3f\xa1\x0f\xaa\x8e\x44\xed\xbc\x4d\x9f\x46\xff\xb9\x10\x6f\xd2\x1c\x12\x7d\x9d\x8d\xa9\xcc\x1f\x34\x6b\x70\xd7\xea\x7a\xf7\x31\xe4\x55\x20\xdd\x79\xd6\x8b\x47\xa2\xae\xc3\xcf\xed\x04\xee\x8d\x55\x67\xd9\x44\xd1\x31\x2a\xd9\x9b\xaa\xaa\x87\x74\x98\xc8\xf2\x88\x0d\x35\xde\xb1\xa5\x1c\x15\x8f\x3d\x12\x3d\x9f\xe6\x34\x94\xe3\x45\x41\x09\x04\x96\xef\x2f\x6b\xb9\xdd\x63\x28\x97\xf5\x35\x2f\x9c\x77\x5c\x6d\x59\xc1\x67\xb1\x27\xd1\x39\x12\xa5\x59\xe6\x68\x21\xde\x9c\x18\xfe\x60\x28\x4d\x03\x74\x47\x96\xf1\xbf\x98\x7f\x0a\xf3\x37\x52\x78\x8b\x36\xc6\x3a\x5f\xf0\xa4\xfa\x9f\x97\x7d\xc7\xdd\xd5\xc3\x19\x0d\x61\xf6\x65\x44\xe5\xee\x4a\xea\xf6\xbe\x33\x3d\x49\x77\x6d\x78\x4d\x70\x33\x74\xcf\x6f\x81\xc6\x7a\x78\xaa\x3f\xed\x39\xc5\xe4\xf6\x0f\x2a\x18\x02\x51\x9b\x7d\x00\xc2\xec\x7b\xcc\x77\x59\x8c\xab\xd4\x74\xa0\x82\xfe\xa2\xa3\xd2\x52\x2c\xc7\xc8\xd4\xcd\xe8\x7d\x86\x67\xe6\x7b\x56\x02\xa7\xe2\x71\x1f\x8a\xc2\x10\x88\xda\xec\x03\x10\x66\x5f\xb6\x9c\x43\xfe\x92\x8a\x77\x83\x14\xd6\xf1\xd2\xe9\x58\xbe\xcc\xbc\xd1\x5e\xff\xe7\x4f\xba\x28\x43\xc6\x94\x29\x45\x7a\xff\xe0\xc0\x10\x88\xda\xec\x03\x10\x66\x9f\xcb\x39\x57\xb5\xb0\x17\x43\xbb\x17\x27\xce\x7e\xfe\xae\x98\x75\x93\xd0\xf0\xc7\x25\xc5\x24\x2a\x75\xdd\xf4\x0b\x4f\xf1\x3a\x83\x78\x60\x08\x44\x6d\xf6\x01\x08\xb3\x4f\x83\x8b\x5e\x79\xeb\x01\xbe\xf1\xa9\x7c\x7f\xcf\x09\x69\xbc\xf6\x55\x79\x0f\xd5\x40\x43\x8a\xcd\xc7\x11\xda\xdf\xba\x59\x8a\x4f\xc3\x10\x88\xda\xec\x03\x10\x66\xdf\x95\x87\x73\x1a\x0e\xd9\x6e\xfb\x96\x17\xb9\xcb\x59\xaa\x49\x9c\x49\x2f\x01\x8c\x4a\x39\xa4\xbc\xcb\x77\x19\xdf\x7c\x25\xbe\x7f\xf0\x58\x45\x6d\xf6\x01\x08\xb3\x2f\xc2\x8a\x8f\x5f\xb1\xa1\xb9\x65\xe5\xc5\x29\x2a\x42\xbb\xaf\xb3\xdd\xa7\xfc\x5f\x09\x6d\x4c\x35\xdd\xd3\x20\xf8\x9a\xec\xf0\x43\x04\x86\x40\xd4\x66\x1f\x80\x30\xfb\x72\xed\x86\x01\xfc\x55\xf5\xc6\xf8\x69\x2d\xe7\xf3\xc9\x99\x8f\xc5\xb3\xce\xbe\xf9\x3d\xaf\x9c\xf6\xeb\xd6\x67\xdd\x09\xeb\xfb\x07\xd7\xf8\x47\xb3\xef\xb8\x79\xe7\xb0\x99\x10\x66\x1f\xdb\xcf\xe5\xb9\x74\x3e\xcf\xb7\x1a\x5d\x37\x0c\x56\x9c\x83\x9f\x35\x2d\x4c\x74\x2c\x08\x9c\xec\xa8\xd5\x61\x72\xf8\x90\x66\x40\x03\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x5d\xb2\x93\xfa\xa7\xb8\x37\x96\x98\xe4\xd3\x7a\x59\xc7\xae\x09\x2b\xcd\x46\x5e\x4b\xf2\xbf\xa6\xa8\xd7\xaa\x25\x34\x78\x5a\x8d\x17\x86\x40\xd4\x66\x1f\x80\x30\xfb\xda\x7a\x52\x7a\xa2\x28\xa8\xc2\xa2\x12\xb6\xab\x47\x78\x7f\xf9\xf5\x2e\xe8\x7e\xbd\x57\x7a\xe6\x8c\x33\x8e\xb6\xc1\x27\x93\x0c\x46\x18\x02\x51\x9b\x7d\x00\xc2\xec\x3b\x4f\xa9\x57\xf9\xec\x71\x75\xae\x3f\xd3\x98\x32\x67\x5d\x11\x77\xe9\x8e\xc3\x63\x03\x4f\xce\x55\x85\xbd\x5f\x62\x2e\xd9\x78\x07\x1b\x70\xd4\x66\x1f\x80\x30\xfb\x74\xac\xc9\xfc\xca\x93\x1b\xeb\x46\x7a\xa8\x6e\x9e\xe4\x20\xf2\xa9\x79\x37\x1d\xc6\x0d\x91\x8a\xbd\x5b\xe9\x76\xbc\x65\x6d\x7b\xb0\x5c\x43\x6d\xf6\x01\x08\xb3\xef\x34\x45\xb9\xdc\x86\x9c\x13\xb9\xc2\x48\x65\x1d\x0e\x5e\xa7\x4e\xf7\xda\xbc\x9b\x80\x0a\xf3\xfb\x40\x12\x05\x5a\xbc\x47\x1e\x1a\x30\x04\xa2\x36\xfb\x00\x84\xd9\xd7\x72\x25\xde\xb9\x9e\xf6\xb2\x6a\x3b\xd9\xda\x36\x69\xd1\x65\x5b\xbe\x13\xe5\xfe\x4e\x3e\xbb\x8d\xaf\xaf\xb4\xd4\xcb\xaf\x46\x7b\xc1\x10\x88\xda\xec\x03\x10\x66\xdf\xb9\x42\x9e\x27\x8b\x9a\x0c\xb2\x85\xfe\x0d\xe9\xc2\x2b\xe7\xc4\x29\x24\xb8\xb0\x6d\x4e\x77\x02\xba\x4e\x19\x3e\x6e\xf7\xe9\x3c\xd8\x27\xfe\xa3\xd9\x77\xdc\x93\xf9\xb0\x99\x10\x66\xdf\xcb\xa4\x8f\x6a\xe7\x67\xb3\xd2\x24\x5d\xec\x98\x5e\x7a\x09\x3e\xef\x28\x63\xfb\x61\xdc\x53\x38\x1a\xf7\xb5\xa0\x79\xb1\x73\xd9\x04\x86\x40\xd4\x66\x1f\x80\x30\xfb\x72\x70\x2b\xc3\xfa\x78\x08\x29\xa8\xf5\xb6\xdf\xc7\x35\x51\x27\xd4\x0e\x51\xfe\x9e\x33\x13\x6a\xa1\xbc\xb9\xa5\xd5\x71\xb7\x4e\x0b\x86\x40\xd4\x66\x1f\x80\x30\xfb\xf8\xd5\x3f\x96\x5c\xf6\x95\x7e\xa4\x9b\x53\xf7\x81\x3e\x66\x30\xaf\x58\x4b\xf1\xeb\xb6\xef\xaf\xdb\x13\x9a\x7d\x00\xed\x0b\x45\x59\x18\x02\x51\x9b\x7d\x00\xc2\xec\x8b\xac\x0d\x68\x23\x73\x24\xeb\xeb\xaf\x0a\xaa\x9d\x9a\xa8\xa4\x53\x26\xbd\x92\xc0\x83\x4b\x7b\x66\x24\xae\xc4\x2a\x30\x76\x05\x82\x21\x10\xb5\xd9\x07\x20\xcc\xbe\xd8\x97\xec\x23\xb9\x9f\x25\xdc\xbb\xbb\xb3\x16\x69\x27\x7d\xe3\xdf\x3b\xb1\x48\xf6\x44\x7d\xf4\x49\x10\xb3\x5a\x4b\xa5\x90\x56\x85\x21\x10\xb5\xd9\x07\x20\xcc\x3e\x6b\x07\x83\x8a\x6c\x2d\xbc\x99\xa7\x34\x14\x0d\x44\x77\xf2\xb7\xa5\x3f\xd8\x3b\x65\x16\xdd\xb0\xf9\xf3\x90\x90\x10\xd7\xd2\xe1\xe0\xff\x03\xb5\xd9\x07\x20\xcc\xbe\xe7\xfd\xfc\x24\x62\x79\xc1\x69\x4b\x65\x7c\x67\x5d\x8a\xde\x4d\x8f\x92\x2b\x31\x56\x13\xdd\xd5\x61\x22\xdb\x62\x5d\xbf\xd4\x77\xb0\x71\x45\x6d\xf6\x01\x08\xb3\x8f\x91\xb3\x50\xef\x04\xf1\xad\xd0\xcb\xaa\xaf\x5e\x25\x5e\x17\xdc\x08\x30\xae\xaf\x7a\xfe\xe5\xf5\x15\xbb\xed\x9b\x39\xdf\xdd\xf0\x0e\x26\x9e\x7f\x34\xfb\x8e\x5b\xbb\x1e\x36\x13\xc2\xec\x23\x8f\x68\x76\xb5\xe3\xd0\xf5\x9f\x7e\xda\xc4\xe0\xdd\xd5\x13\xb7\x8d\x59\x93\xba\xd6\xe7\x8b\x87\x91\xa9\xa6\xae\xcc\xb3\x35\x83\x21\x10\xb5\xd9\x07\x20\xcc\x3e\x90\x0a\x3c\xf1\xe5\xe6\x96\x46\x72\xca\xf7\x0f\x97\xe4\x49\xb7\xd3\x61\x1f\x21\x9d\x53\xf2\x93\xc2\xf7\x5b\x56\xdc\x8c\x86\x0e\x96\x92\xa8\xcd\x3e\x00\x61\xf6\x29\x79\xf4\xa7\x26\xf0\xd7\xe5\xef\x27\xa7\x85\xde\xb1\x2f\xed\xc6\x95\xb6\x13\xa9\xe6\xa1\xe8\xb9\xd0\x9f\x49\xb8\xbe\xe0\x6f\x0d\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x4e\x84\xa3\xb7\x5a\xbc\xb2\xaf\xde\xb8\xd9\x60\xfc\x69\x49\x3f\x6b\x4f\xe4\x8e\xe8\x8f\xba\xa5\x16\x85\x37\xa1\xf5\x1e\xf6\xcf\x2e\xc2\x10\x88\xda\xec\x03\x10\x66\x5f\xd7\x58\x05\xa9\x5e\x13\x3e\x49\x77\x8f\xac\x5a\xd8\x08\x47\x20\x0f\x96\x8c\x46\xc2\xc9\x22\x65\xe2\x39\xf6\xc5\x9b\x1d\xa2\x83\xcd\x31\x6a\xb3\x0f\x40\x98\x7d\x83\x7b\xd0\x19\x09\x07\x8a\x9d\xda\x7e\x01\xa9\x49\xae\x65\x86\xec\x81\x5a\x22\x55\x51\xb2\xd3\x1f\xa0\xf1\xd6\x07\x36\x2e\x07\x1b\x57\xd4\x66\x1f\x80\x30\xfb\x82\x53\x14\x1e\xbc\x95\xcc\x8e\xe7\x91\x5f\xa5\x8f\x7b\x13\x32\x71\x53\xb8\x5b\xf2\x8a\xe6\x54\xc3\xba\xdc\xe0\xaa\x45\xb1\xaf\x0e\x0c\x81\xa8\xcd\x3e\x00\x61\xf6\xa9\x99\x7c\xe8\xb1\x2a\x3a\x5d\x73\x9b\xf4\x82\x44\xa7\x33\xdf\x32\xc9\x8c\x0f\x48\x68\x76\x51\x49\x42\x63\xc0\x8d\x74\x9d\x81\x05\x86\xc0\x7f\x34\xfb\x8e\xdb\xdd\x1d\x36\x13\xc2\xec\x93\xa9\x53\x04\x17\x9f\xc2\xef\xf5\x06\xde\x15\x3c\xec\x9f\xba\x5c\x63\xe8\x19\x80\xff\xbb\xfa\xaf\x6b\xa9\x40\x8a\xfa\xb2\xc4\x49\x18\x02\x51\x9b\x7d\x00\xc2\xec\xa3\xa8\x2b\xcc\x14\x7e\xd8\x24\xd2\xb8\xb5\x53\x8e\xbd\x5b\x23\x6d\x61\x33\x39\x41\x76\xff\xd1\x4d\xfd\xe2\xd6\x18\xb9\xc1\x76\x2e\x18\x02\x51\x9b\x7d\x00\xc2\xec\x93\xdc\xec\xbb\x10\xd7\x63\x21\xb6\xa7\x91\x7a\x8d\xb7\xa4\xc6\x3e\x71\x8b\x29\x51\xf9\x1c\x9e\xfe\x5b\x9f\xd2\x17\xae\xf9\x44\x64\x30\x04\xa2\x36\xfb\x00\x84\xd9\x57\xf1\x9b\xa3\xef\x3e\xcb\x67\x76\x5e\xd2\x26\x47\xf7\x24\x7c\xdb\x77\x4e\x0f\xbe\xbd\xff\xca\x88\x13\xe2\xdd\xfe\x2d\xaf\xeb\xde\xc1\xa4\x80\xda\xec\x03\x10\x66\xdf\x33\xf5\xdf\x0b\x7a\xbc\x21\x43\x1f\x2a\x6e\xc7\xaf\x65\xb7\xbf\x5c\xdd\x74\x62\x74\x93\x67\xac\x8c\xaf\x9d\xfb\xcd\x92\x70\x85\x13\x86\x40\xd4\x66\x1f\x80\x30\xfb\x56\xeb\x82\x2a\x2e\xc5\x57\xeb\xe0\x84\xc9\xe0\x0d\xdf\xd5\xdd\x8e\x2b\x7f\x4a\xdd\xab\x2c\xe5\xc4\x76\x72\xea\xd3\xc9\xa5\xb6\x83\xd5\x08\x6a\xb3\x0f\x40\x98\x7d\xf8\xd7\x03\x0b\xc6\x67\x59\xda\x9f\xa8\x1a\xad\x8c\x9f\xfb\xfa\x03\x2c\x72\xa2\xc6\x5b\x7d\x04\x9e\x64\xda\x2a\xba\x46\x24\x7b\x30\x49\xa3\x36\xfb\x00\x84\xd9\xf7\xb0\x6b\xf1\x7a\xb1\x69\xdc\xba\x4a\x05\xa0\xa6\x37\x29\x75\x23\xe5\xeb\x3e\xc9\xf3\xdf\x3f\x58\x1e\xec\x6a\xbf\xf3\x5f\x17\xe0\x80\x21\xf0\x1f\xcd\xbe\xe3\xce\x3f\x0e\x9b\x09\x61\xf6\x6d\xa5\x4f\x0f\x36\x6b\x0f\x15\x76\x65\x1a\x58\x35\x99\xdb\xaa\x31\xab\x64\x98\xe2\x92\xd3\x78\xd5\xb9\x3d\x8e\x6c\x8e\x36\x3c\x58\xdb\xa2\x36\xfb\x00\x84\xd9\xc7\xe6\x6b\x21\xa9\x73\x4f\x99\x24\x4f\x81\x63\x48\xd3\xd4\x3f\x0a\x6b\x69\x50\x27\x7c\x19\x37\xc9\xcf\x54\x27\x0f\x87\x8a\x54\x1f\x86\x40\xd4\x66\x1f\x80\x30\xfb\x7e\x01\xac\x2b\x3f\x7f\x49\x78\x97\x5c\xf0\xa2\x8d\xf0\x8a\x09\x48\xba\xdf\x73\xcf\x5c\xe0\xf7\xd5\x8c\x93\xb9\xdf\xd7\xbe\xb3\x5f\x85\x21\x10\xb5\xd9\x07\x20\xcc\xbe\x99\xaf\xaa\x7d\xe7\xab\x4d\x94\x08\x97\x22\x98\x49\x6e\x45\xb5\x49\x38\x45\xd6\x93\x6f\x4e\x03\xaa\x9f\x7f\x8f\xd5\x09\x53\x1d\xdc\x2b\xd4\x66\x1f\x80\x30\xfb\xbe\xb7\xaa\x64\x3b\x8a\x89\xb4\xe8\x3e\xd1\xb4\x59\xf7\x8e\x11\xa4\xd4\x25\x3d\xd1\xa7\x6a\xc1\x78\x83\x3a\x1a\xa3\xe6\xcb\x77\x30\xa3\xa3\x36\xfb\x00\x84\xd9\x47\x2b\xc6\xdc\x27\x4f\xa7\x31\x6a\xda\x46\x35\x66\xf4\x2a\x33\xb3\xa5\x59\xcf\x32\x1e\x67\xfa\xd6\x9c\x15\xd3\x55\xc1\xf9\x78\x0b\x18\x02\x51\x9b\x7d\x00\xc2\xec\x5b\x3f\x9f\xe7\x3e\x63\x25\xf1\xec\x2d\xe6\xa9\xac\xbc\x38\x18\x2a\xc1\x8a\x69\x0a\xc7\xbe\x88\xb2\xf8\xa1\xa4\xfd\x6e\xef\xfe\x19\x18\x02\x51\x9b\x7d\x00\xc2\xec\x9b\x2b\x76\x57\xd3\x12\x9e\xd7\x90\x7d\xf9\x1d\xbf\xfb\x8a\x55\x49\x66\x28\xcd\xfd\x3b\xef\x35\x78\x18\x47\xd7\xb7\xbb\x26\xeb\x0c\x60\x08\xfc\x47\xb3\xef\xb8\x13\xc2\xc3\x66\x42\x98\x7d\xdd\x8f\x94\xe9\x6e\x2d\x79\x97\xe6\x0d\x76\xd2\xce\xd6\x09\xa9\xb7\xd4\x2d\xd8\xa5\x4b\x76\xa4\x8a\xae\x3f\x65\x4b\x4e\xad\xb1\x82\x21\x10\xb5\xd9\x07\x20\xcc\xbe\x49\x3e\xd8\xf0\xe1\x0b\x1b\x83\xbb\xd4\xd9\xda\x62\x81\x9d\x7a\xd2\x78\xc2\xaf\xcd\x12\xa7\x7b\xee\x17\xdf\x94\x6a\xf8\x2d\x7b\xf0\xf4\x43\x6d\xf6\x01\x08\xb3\x0f\x72\xd5\x13\xf8\xb1\x1b\xc7\xa9\x70\x9b\x55\xec\x06\xb7\x89\xc9\x5c\x5b\xa1\x27\x71\x77\xd1\x68\xf2\x53\x5c\x33\x51\x17\xdd\x83\x1b\x8b\xda\xec\x03\x10\x66\x1f\x9e\xdb\x8c\xa9\xf1\x28\x3b\xe3\x7b\xef\x4c\xe3\x27\x9d\x5b\xd1\x0e\x9f\x67\x1d\xbe\x9e\xfd\xd2\x76\xf9\xf4\xd5\x48\x83\x7a\x75\x5d\x18\x02\x51\x9b\x7d\x00\xc2\xec\x63\x9f\x65\x79\x17\x9d\xd9\x9e\x70\xd5\x55\xf5\xe7\xfb\x80\xf6\xd9\xa7\x91\x5d\x56\x34\xdf\x6c\xe1\x1a\xb8\x47\xd4\xca\x61\xe8\x2c\x0c\x81\xa8\xcd\x3e\x00\x61\xf6\x19\x05\xa6\x65\xce\x12\x12\x8e\x08\xb9\x41\xe5\x77\x32\x17\x26\xb5\x38\x78\x55\x13\x68\x94\xee\x49\x0c\x27\x31\x52\x5c\x1a\x72\x85\x21\x10\xb5\xd9\x07\x20\xcc\x3e\x5f\x83\x92\x1f\x78\x62\xe1\x1f\x04\xdf\x2e\xfe\xb4\x0e\xb5\x19\xb3\x09\x0f\x1e\xb3\xbb\xde\x34\x3b\x85\x13\xaf\x34\x1f\x24\x7e\xf0\x84\x45\x6d\xf6\x01\x08\xb3\xef\x82\x4f\x23\xcb\x63\xa9\x9b\x62\xe1\xf1\x2a\x45\x79\xb6\xe0\xdf\x25\x23\xce\x68\xf3\x9a\xac\x9c\xdb\x0d\xbb\x22\xc3\x72\x57\x18\x61\x08\xfc\x47\xb3\xef\xb8\x33\xf4\xc3\x66\x42\x98\x7d\x85\xf3\x3e\xbf\x4c\x6b\x5f\xfe\xf9\x52\x0f\x9b\x59\x97\xc5\x10\x0a\x4e\x3c\x1d\xed\x98\xac\x22\xb0\xb6\x7f\x43\x7f\xbe\xf8\xc5\xc1\xfa\x19\xb5\xd9\x07\x20\xcc\x3e\xab\xea\xd6\xbb\xa6\x58\xea\x58\xff\x86\x07\x0d\x1d\x91\xbc\x33\x4d\x3f\xeb\x3b\xf1\x85\xb3\xfb\x61\x7c\x62\x50\x50\xa6\x5e\x1a\x86\x40\xd4\x66\x1f\x80\x30\xfb\x4c\x66\x61\xaf\xa4\xfd\x95\x70\x37\xf7\x6d\x2e\x26\x79\xb5\xd9\xd1\x1b\x0e\x8a\x63\x6f\x63\xe2\xb2\x36\xc1\xf1\xce\xbf\xd6\xee\x30\x04\xa2\x36\xfb\x00\x84\xd9\xa7\xf6\xc9\xaa\x96\xfa\x55\xe9\x0f\x3c\xba\x08\xd2\x00\xb5\x31\x6e\xe6\xeb\x7a\x0b\xb6\x6f\xfe\x5c\x7e\x96\xa4\x14\xe2\x72\xc3\x5d\x1e\x86\x40\xd4\x66\x1f\x80\x30\xfb\x3e\x04\xaa\xaa\xfb\x47\xa9\xfa\xf1\xbd\x1d\xf2\x90\xcb\xdf\x97\xca\x0d\xa0\x16\x2d\xff\x68\x5f\xe5\xf9\xce\x99\x8f\x96\x54\xf1\x60\x52\x40\x6d\xf6\x01\x08\xb3\x6f\xb1\x7f\x7d\x71\x04\xd8\x6b\xfe\x52\x83\xcd\xdb\x97\x0c\x71\x4c\xc8\xe4\xa3\xa4\x24\x2d\x31\x9e\xb8\xca\xcf\x2f\xf8\x99\xd8\x19\x86\x40\xd4\x66\x1f\x80\x30\xfb\xac\x76\x1a\x9d\x3d\x64\xe3\x4f\xad\xa7\x50\x7c\x71\xd6\x4b\x1c\xbc\x6d\x31\x4a\x5d\x34\x4a\x27\xfd\x29\x8f\x11\x63\x51\x58\x0e\xc2\x10\x88\xda\xec\x03\x10\x66\x9f\x41\x90\x27\xe7\xfb\x75\xee\x34\x70\x5a\x43\xcd\x5d\x9e\x6b\x56\xef\xdc\xc7\xac\x9c\xb5\x8d\x81\x13\x25\xbc\xd2\x61\xb2\x25\x07\x4b\xc9\x7f\x34\xfb\xee\xd9\xfc\x8c\xd2\x9a\xef\xaa\x9c\xb8\x48\xb6\xf1\x66\xa6\xe4\x06\x1b\xfb\x2c\x44\x65\x6c\xd8\x74\x33\x37\x8d\xff\x46\xec\x92\x13\xe2\x65\xdf\x39\xb9\x6f\x9b\xa6\x39\x77\xf5\x33\x7a\xe3\x7f\xd1\xfc\xa5\x26\xce\xdf\x58\x1e\x39\x27\xdd\x7e\xbe\xeb\x6b\x6c\xfc\xe4\x2f\xd6\xb9\xa3\x3f\xe3\x59\xfe\x78\x6c\xe7\xc9\xa5\xcb\x0e\xcd\x3d\xb5\x57\x5f\xed\xdf\xd8\xf7\xd0\x8e\x9b\x49\x8e\xdd\x8d\xc1\x51\x5f\xea\xef\xf2\x35\x38\x12\x8d\x08\x4c\xb4\xe2\x1b\xe8\x17\x8e\xfe\x06\x73\x65\x9c\xac\x55\xe3\xd3\xba\x7b\x32\xbc\x28\xf6\xef\x3a\x8e\x14\x96\x2c\x64\x5f\xfb\x48\x74\x73\xc4\xd2\x44\xc8\x2f\x37\xf9\xb6\x66\x11\xde\x75\x1f\xf0\x53\x8d\xb3\x70\xae\x5d\xf0\xe4\x69\xcd\xad\xc4\xe0\x1f\xd6\x1a\xf7\x8e\x44\x15\xcf\x73\xb4\x8e\x2b\xed\x19\xec\xe3\xca\x05\x35\xd8\x9c\xff\x42\x39\x77\x3e\x29\xad\x6d\x42\x08\x96\xfd\x6b\x26\x02\xec\xca\x1d\x1d\xd5\x0e\x4f\x85\xd7\xd4\x9b\x6f\xcf\xc7\xbb\x50\xed\xd6\x77\xde\xf7\xc6\x6f\x08\x44\xf5\x88\x9c\xb5\x7a\xf9\xd6\x5b\x56\x48\x44\x8f\x44\x89\xeb\x46\x52\x37\x5e\xc3\x15\x94\x7a\x7c\x02\xe7\x62\xe7\xc7\x55\xb4\x67\x2b\xac\x2f\x45\x5d\xb1\x05\x0d\x06\xf0\x82\xa3\xbc\x8f\x44\x5f\x6d\xab\xb2\xee\x5a\xfe\x79\xb7\x68\xdc\x44\xbd\x50\xd1\xdd\xb7\x3e\x97\xe3\x3f\x3c\x56\x8d\x9d\xd2\x07\x09\x1e\xdc\xf9\x92\xfb\x3f\x2f\xfb\x8e\xbb\xab\x87\x33\x1a\xc2\xec\x83\x34\xd8\xf1\xf7\xe3\x66\xc5\x38\x67\x8b\xcc\xef\xaf\xa5\xf8\x7a\xf3\x94\x2e\x85\x52\x59\xa8\x80\x45\xcc\x74\xf5\x6b\xdb\xdc\x30\x04\xa2\x36\xfb\x00\x84\xd9\xe7\x79\x57\x55\x4a\x7a\x66\x9d\xe0\x57\x18\xd5\xac\xbc\x3b\x95\xfe\x2b\x41\xca\x12\xe2\xd7\x4f\xed\xaf\x4c\xf9\xa9\x3d\xef\xd2\xbc\x04\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x3f\x3f\x8e\xc9\x11\xdb\x8a\xd4\x8c\x84\xe1\x0c\x0a\x77\x7e\x9b\x9a\xa6\x6f\xba\x2c\xb3\x6d\xcc\x49\x73\xc5\xaf\x60\x84\x29\x8a\x1c\x86\x40\xd4\x66\x1f\x80\x30\xfb\xe4\xe7\xc4\xef\x19\x7c\xdc\x6c\x2d\xd8\x49\x1a\x9c\x29\x53\xf5\x51\x2b\x7e\x5b\xfd\xa8\x59\xbb\x87\x83\x45\x58\xe8\x97\x85\xee\xc1\xac\x89\xda\xec\x03\x10\x66\xdf\xeb\xe1\xda\xee\x04\x48\x3b\x21\x2f\x8e\xe1\xd6\x72\x79\x52\xb6\xf0\x10\x0e\x1b\x0d\x6b\xc7\x4a\x66\x2b\x2f\xd5\x2f\x12\x62\x51\x18\x02\x51\x9b\x7d\x00\xc2\xec\xbb\x16\xfe\x3b\x78\x3d\x87\xe6\xc7\x5e\xfb\xcc\x2f\x8d\x18\x1f\xca\xd3\xb2\x69\xe3\x52\x69\xf2\x43\x0d\x52\x52\xf2\x2e\x9f\xff\xeb\x18\x1d\xb5\xd9\x07\x20\xcc\x3e\x96\x7e\x35\x02\x8d\x37\x84\x9f\x64\x84\x55\xae\x6d\x93\x28\x93\xb9\x10\xd1\xc6\xa8\x9f\x2c\xe1\x66\x3d\xcf\xf6\xf8\x77\x6f\xa5\x2c\x0c\x81\xa8\xcd\x3e\x00\x61\xf6\xd9\x1a\xef\xae\x77\x7f\xdc\x6a\xd4\xe0\x8a\x4a\xd8\x0f\x3a\xdb\x0c\x96\xd9\x28\x4d\x13\xad\xc1\x7e\x64\xef\x17\x75\x1e\xbe\x14\x87\x21\xf0\x1f\xcd\xbe\xe3\xe6\x9d\xc3\x66\x42\x98\x7d\x12\x35\x4e\x27\x1d\x6d\xd8\x63\x25\x1d\x95\x35\xec\xe9\x7b\x5b\x2c\xb3\xa2\xcc\x6a\x32\xba\x19\xe5\x23\x4d\x6f\x84\x9b\x86\xe2\xc1\x10\x88\xda\xec\x03\x10\x66\xdf\xf3\xd7\x2c\xdb\xcd\xf9\xdd\x84\x83\xe7\x9f\x19\xb5\x97\x87\xbc\x29\xc2\x61\xab\xe6\xc0\x1a\xe4\xe7\xf2\xfe\xac\x8d\x6d\x00\xb1\x30\x04\xa2\x36\xfb\x00\x84\xd9\x67\x7d\x3b\x4e\xa1\x7b\xbc\xf4\x91\x85\xb4\xb3\xa0\xbb\x00\x95\xe2\x1c\xe9\x90\xf1\x19\x9f\x79\x45\x07\x52\xbc\xae\x37\x24\xf4\x9e\x30\x04\xa2\x36\xfb\x00\x84\xd9\xc7\xf1\xf7\x16\xef\x49\xeb\xe2\x4d\xfc\x53\x9b\xf7\xe3\x72\x7c\x3f\xbf\x6c\x0c\x55\x0b\x11\x33\x3e\x29\x69\x3d\xc0\x9b\xb5\x9f\x7c\xb0\xe1\x43\x6d\xf6\x01\x08\xb3\x4f\x7f\x8f\x42\x94\xf9\xf7\x0d\xc2\x1c\x27\x2b\xa5\xd2\xbb\xb9\x3a\x72\x97\xca\xcb\x79\xb8\x6b\x68\xd4\x4e\x95\x5e\x8d\xf8\x2b\xca\x0e\x43\x20\x6a\xb3\x0f\x40\x98\x7d\xc4\x5f\x03\x24\xa2\xd5\xbd\x1d\x70\x37\x4e\x14\xa7\x2a\xa6\x92\xe4\x33\xc9\xcf\xeb\xac\xe2\x63\xc5\xc2\x6f\x9e\x20\xf9\x24\x0d\xc1\x10\x88\xda\xec\x03\x10\x66\xdf\x23\x35\xbe\x76\xcf\xb7\xd7\xaa\xe3\x53\x96\x8a\xe4\xfe\xb6\x4d\xd7\x7e\x9c\x70\xce\x37\xbe\x0d\xf0\x96\x2d\x9a\xa7\x8f\xac\xf2\xc1\x10\x88\xda\xec\x03\x10\x66\x5f\x0f\x7f\x4b\x52\xe2\x77\x81\xde\xf4\x70\x30\x76\x6a\xc4\xbd\x8c\x15\xa4\xbb\x41\x2f\xc2\xce\xf7\xda\x2a\xe9\xf6\x5e\xd6\xa6\x1b\x0c\x81\xff\x68\xf6\x1d\xf7\x64\x3e\x6c\x26\x84\xd9\x27\x30\x90\x9e\xbc\x19\xa2\x61\x7c\x3e\xf2\x8c\x73\x81\xa8\xcd\x5d\xea\x8f\x35\x24\xd5\x27\xbe\x9e\xd3\x8e\x36\xd9\xe7\xc2\x80\x07\x45\x88\xda\xec\x03\x10\x66\x9f\x3c\xb9\x5f\x08\x85\xa1\xf2\x69\x4c\x4e\x90\xdd\x09\x4a\xe1\x52\x9e\xdc\x92\x11\xea\x34\x99\xfc\xe1\x14\x52\x86\xc7\xd2\xa2\x4a\x30\x04\xa2\x36\xfb\x00\x84\xd9\xf7\xa5\xde\x4c\xf4\x76\xc8\xa0\xda\x52\xee\xa4\x52\x7a\xe2\x7b\xd2\xdb\xb7\x89\xc2\xe5\xc7\xbc\xf9\xc1\x5d\x6d\x68\x56\x9d\xc3\x09\x86\x40\xd4\x66\x1f\x80\x30\xfb\xf8\x5b\x6e\xb7\xe7\x51\xb9\xef\xeb\xfa\xd6\x41\x79\x3a\x57\x6c\x37\x45\x3c\x79\x3e\xb7\x5f\x14\x7f\x72\x5e\xc1\x9c\x30\x73\x5d\x0e\x86\x40\xd4\x66\x1f\x80\x30\xfb\x6c\x3f\x2d\x60\x4c\xcc\x85\xb2\x6a\xfd\x3e\x70\x5a\x44\x66\x96\xfc\x30\x83\x03\x4a\x8d\xc8\x96\x86\x15\x62\x78\x17\xd4\x25\x01\x18\x02\x51\x9b\x7d\x00\xc2\xec\xeb\xc7\x75\x29\x71\x4c\xb2\xe0\x73\x62\xfe\x1d\x3d\x16\x37\x5a\x1e\x85\x25\x62\x9c\xa0\xaf\x2e\xba\x3b\x3b\x51\x86\xfd\xb3\x71\x0e\x86\x40\xd4\x66\x1f\x80\x30\xfb\xd4\xec\x92\x03\x49\xef\x6a\xde\xd7\x1a\xbb\xfe\xe9\x9b\x14\x5b\xaa\x63\x93\x60\x35\xe5\x7d\x4f\x9f\xd0\xe8\x3d\xf7\x8a\x2a\x1e\x55\x18\x02\x51\x9b\x7d\x00\xc2\xec\x8b\xf2\x1c\x0e\x3b\x23\x44\x92\x61\xee\xce\x4d\xd2\x7c\x46\x57\x89\x72\x1a\x77\x78\x5e\x9c\x61\xc7\x8c\x89\xfa\xae\x83\x14\x9d\x0b\x0c\x81\xff\x68\xf6\x1d\xb7\x76\x3d\x6c\x26\x84\xd9\x97\xc6\xbb\x34\x33\x35\x95\xef\x02\xaf\x29\x72\x54\xd6\x9c\x18\x7a\xe0\x51\xd3\x4a\x31\xee\x69\xf9\x5d\x80\xb4\xc7\x97\x73\xea\x60\xa3\x84\xda\xec\x03\x10\x66\x9f\x4c\x17\xc3\xac\xa5\xfd\x62\x78\xa1\x73\x98\x43\x54\x55\x92\x35\x77\x4b\x75\xe6\x90\x52\xfe\x6d\xcc\x89\x95\xb0\xa1\xa8\x10\x57\x18\x02\x51\x9b\x7d\x00\xc2\xec\xcb\x1d\x6f\x7d\x78\x91\x83\x40\x0b\xef\x4a\xb0\x30\xa6\xdd\xae\xaa\x9b\xb0\x99\x2e\x90\x6e\xb4\x63\x95\x54\x4f\x65\x9a\x57\x88\x15\x86\x40\xd4\x66\x1f\x80\x30\xfb\xec\x85\x5c\xaf\x16\xb1\xe5\x32\x14\x72\x2e\xd7\x33\xc5\xb2\xc9\x64\x15\x36\x15\xf4\x46\x99\xe3\x4a\xcb\x08\x0f\x16\x39\x60\x2e\xc3\x10\x88\xda\xec\x03\x10\x66\xdf\x5d\x3c\x1f\xf7\x3e\xbc\x3b\x3f\x4f\x7b\xd9\xe3\x71\x8f\xb6\xe5\x30\x93\x8c\xd2\x5a\x37\x95\x8f\xaf\x28\x5e\xd0\xcb\x9d\x58\xbc\x0a\x43\x20\x6a\xb3\x0f\x40\x9a\x7d\xc2\x1f\xd9\x58\x18\x1d\xed\x1a\x8c\x4e\x76\x90\x0a\xaf\x65\xbc\x9d\x8c\xfd\x22\xcc\x35\xee\x5c\xda\x63\xb5\x03\xfa\x85\xeb\xc2\x10\x88\xda\xec\x03\x10\x66\x5f\x63\x6f\xfe\x52\x2b\xe5\xac\xf9\xb8\x92\xa5\xe3\x5c\x31\xaf\xe6\x4e\x97\x65\x89\xeb\xa0\xf3\xe0\x69\xfc\xa0\xaa\x25\xaf\xaf\xca\x30\x04\xa2\x36\xfb\x00\x84\xd9\x67\xc1\x5f\x89\x4d\xbf\xcd\xc3\x65\xaa\xc7\x92\x3c\xd8\x95\xc1\x28\x62\x67\x49\xf5\x30\x5e\x01\xd3\x99\x3a\xfa\x4e\xaa\x8c\x5a\x1f\x86\xc0\x7f\x34\xfb\x8e\xdb\xdd\x1d\x36\x13\xc2\xec\x3b\xc3\xb9\xc7\x28\xf9\x18\x9c\x9f\xd5\xdb\xfd\x6b\x1f\x60\x32\xb7\xbc\xe7\x53\xe7\xc6\x6d\x33\x9c\xd8\x7c\xea\xb5\x03\xc1\x47\x4d\x18\x02\x51\x9b\x7d\x00\xc2\xec\xd3\x12\x71\x4e\x39\x7d\xad\xeb\xee\x8c\xc6\xdb\x28\x46\x11\xc3\x87\xe4\x3d\xe5\x2e\x29\x0b\xcf\x9b\x05\x6b\x93\xbd\x9f\x3d\x8a\xd5\x83\x21\x10\xb5\xd9\x07\x20\xcc\x3e\x7d\x59\x09\x0b\x47\x53\xb8\xc9\x97\x05\xd7\xb0\xb6\xf7\x3d\x9c\x9f\xad\x37\xb0\x16\x70\x62\x4e\x5f\x00\xd4\x4c\x7c\x23\x21\x05\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x7c\xb4\x8f\x4e\x79\x1b\xf5\x5d\x95\xc4\x4c\x2d\x6d\x27\xed\x75\x8f\x93\x86\x85\xb0\xa4\xa9\x74\xa4\x5d\xb7\xf0\x4a\x34\xa1\x39\x58\x12\xa3\x36\xfb\x00\x84\xd9\x37\xea\xec\x37\xf5\x58\xff\x1a\x99\xa1\xb2\xde\xfe\x0e\xd6\xfe\x91\xd5\xeb\x67\xd6\xb9\xc4\xa7\xb9\xd8\x9b\x65\xba\x5a\xe7\x08\x04\x60\x08\x44\x6d\xf6\x01\x08\xb3\xaf\x72\xeb\xa1\x6e\xf6\xf4\xc0\x93\x99\x6e\x36\xe5\x94\xf2\x9f\x44\xf0\x8c\xe1\xef\x92\x20\xb9\xf6\xee\x8b\x6b\x64\x9c\xce\x2b\x07\x4f\x71\xd4\x66\x1f\x80\x30\xfb\x06\x6e\x5f\x62\xbe\x9d\x55\x5d\x29\x62\xfe\xbe\xff\x9c\x36\xed\xcf\x6e\x9e\x61\x9d\xee\x29\x71\xf6\xcd\xde\x94\x3a\xf1\x42\x16\x6d\x18\x02\x51\x9b\x7d\x00\xc2\xec\xb3\xf7\xde\x0c\xce\xdf\xae\xe3\xa9\x10\x31\x0b\x0e\xd2\x9f\x4f\x9a\xbb\xf3\xae\xfd\x4e\xc2\x8e\xb0\x7c\x33\xd4\x43\xe4\xcf\x49\x04\x43\xe0\x3f\x9a\x7d\xc7\x9d\x7f\x1c\x36\x13\xc2\xec\xdb\xf8\x61\x90\x0a\x72\x49\xec\xb0\xdb\xd3\x26\x37\x59\x2f\xcb\x2b\x53\x30\x05\x0b\x7d\x67\xec\xf2\xa8\xd9\x10\x89\xc8\x3c\x6d\x0a\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x8e\xd2\x80\xfa\x9f\x39\xda\x67\xe6\x5b\x49\x0c\xe1\x15\x63\x25\xa7\x70\x22\x52\xab\x08\x4e\xd7\x9d\xa4\x78\x7b\x5e\x0f\x93\x22\x02\x43\x20\x6a\xb3\x0f\x40\x98\x7d\xbc\x81\xbd\x8e\xe2\xce\xf9\x72\xfc\xca\x5d\xe4\x83\x8f\xff\x1a\xfe\xca\xcf\xf4\xd7\xfc\xf8\x65\xbb\xf3\x97\x8d\x51\xa3\xcd\x0f\x0f\x18\x02\x51\x9b\x7d\x00\xc2\xec\xfb\x7c\x7e\x60\xcc\xb6\x58\x56\x82\xc8\x2c\x18\x7f\x4c\xfa\xf6\x3b\xbf\x8d\x2a\x3f\x4c\xb1\xb0\xc8\xeb\x17\x42\xe5\x65\xa2\xe2\xcc\x30\x04\xa2\x36\xfb\x00\x84\xd9\xa7\xbf\xbb\xfb\x52\x70\x96\xe4\x6a\xe1\xab\xb6\x5f\xaf\x94\x92\xf0\x9a\x27\xde\x67\xd1\x54\x5d\xea\x48\x68\xf4\x68\x88\x1d\xaa\x38\x68\x26\xd4\x66\x1f\x80\x30\xfb\x04\xff\x8c\x91\x13\x24\xd5\x46\x05\x5b\x9d\x13\xdc\xff\xd4\xc7\x34\xed\xba\x1c\xb8\xb3\xca\x71\xb1\x74\xb7\x92\x04\x57\xe0\xad\x22\x0c\x81\xa8\xcd\x3e\x00\x61\xf6\x49\x6d\xf9\x9c\x6a\xee\x38\x4f\x01\x7b\xad\xce\x39\x15\x42\xfc\x35\x39\x9f\x62\xc2\xa2\x9d\x26\x2e\x5f\x2a\x17\x1f\x5a\x19\x23\x83\x21\x10\xb5\xd9\x07\x20\xcc\xbe\x37\x66\xbf\x59\x9b\x47\x87\xda\xcd\x5c\xce\x9e\xee\x39\xcd\x13\x19\x78\xb1\x3c\xfe\x5c\x55\x5d\xa7\x12\xb0\xeb\x47\x7b\x82\x90\x13\x86\xc0\x7f\x34\xfb\x8e\x3b\x21\x3c\x6c\x26\x84\xd9\xe7\x5d\x53\x91\xeb\xfe\x8a\x60\x6e\x91\x7e\x31\xcf\x97\xed\x47\xcf\x36\xb1\x4e\x4b\x95\xd0\xd0\x8b\x81\x8a\x3e\x3b\x6e\xdf\x32\x41\x18\x02\x51\x9b\x7d\x00\xc2\xec\x63\x3c\x79\x9f\xe9\x9e\xd3\xe6\x0d\xbe\xd7\xd9\x0b\xf3\xf7\x2e\x0a\xd1\x0a\xc5\xbd\xff\xf6\xce\xee\xb2\x98\xcf\xeb\x97\x5c\x65\xf5\x07\x0d\x8b\xda\xec\x03\x10\x66\x9f\x7f\x7e\x6d\x40\x4f\x84\x67\xa0\xdf\x5b\x99\xe9\xdb\xbf\xfa\x04\xec\x5b\x29\x13\x7a\x3e\x3f\xe3\xf9\xe1\xc9\x47\xe1\xc2\x46\x74\x12\x86\x40\xd4\x66\x1f\x80\x30\xfb\xb2\xed\x42\x44\xd3\x36\x6f\x62\x7f\xda\x51\x47\xb8\xfd\x25\xbb\x98\xc8\x47\x51\xa8\xe6\x9c\x9f\xa9\x2d\xd5\x59\x2b\x76\x61\x98\x07\x86\x40\xd4\x66\x1f\x80\x30\xfb\xf0\x22\x7c\x14\xc8\x22\x16\x4a\x23\xf3\xd4\x04\x77\x23\x71\x9f\x7d\x0a\xfa\x16\xff\xf0\x95\x66\xb2\x4b\xa3\x3b\x35\xce\x79\xa7\x83\xcf\x81\xda\xec\x03\x10\x66\x9f\x5e\x3d\xd7\x87\x15\x46\xee\x84\xeb\xd8\x5f\xef\xe5\x8c\xe4\xc7\xab\xb9\xbf\xe7\x49\x07\x04\xe6\xdb\x7f\xe7\xc0\x9d\x59\x67\xb2\x85\x21\x10\xb5\xd9\x07\x20\xcc\x3e\xf5\x4b\x8c\x0f\x6f\x04\xde\x4b\x1b\xc8\x2c\xc4\x3e\xc3\x99\xc7\xe7\x3a\xb5\x19\x15\xe8\xfa\x90\x8c\x57\xc7\x35\x67\xc3\xa9\x59\x07\x86\x40\xd4\x66\x1f\x80\x30\xfb\xfa\xb5\x48\xa2\xc4\x28\x5e\x2a\x7a\xd5\x54\x16\xcb\x16\xe0\xdc\x75\xb7\x39\x51\x71\x9e\xf3\x2e\x86\xb3\x7c\xa6\xce\x92\xbe\x93\x09\x86\xc0\x7f\x34\xfb\x8e\x3b\x43\x3f\x6c\x26\x84\xd9\xf7\xe6\xd6\xc8\xc7\x6a\xdc\x87\x6e\x0a\xa6\xe2\xf5\x55\x5f\xe6\x44\xa4\x9c\x12\xbc\xee\xff\xde\x79\x9c\x9f\x68\xc6\x79\xa2\x67\xc3\x11\x86\x40\xd4\x66\x1f\x80\x30\xfb\xc2\x38\xcc\x4f\x26\x93\x62\x9c\x06\x3b\x3f\xc9\x3c\x88\xd9\x8b\x2c\xb2\xb7\xe5\x2a\xc1\x46\xfb\xff\xf5\xfc\x29\x9f\xee\x98\x41\x07\x43\x20\x6a\xb3\x0f\x40\x98\x7d\x69\xa0\xea\x6b\x1b\x32\xa6\xac\x9f\x61\x21\xf8\x35\xb6\x8d\xd3\x3e\x41\x9b\x23\x69\x6e\x6e\x29\xa1\x1e\xd2\x8d\x9d\xc9\x85\xe6\x30\x04\xa2\x36\xfb\x00\x84\xd9\x17\x2a\x6c\xa6\x59\xc0\xaa\x4f\x97\x27\x92\x32\x68\x63\x9d\x63\xe6\xd3\x62\xf1\x4c\xfb\x59\x62\x8d\x68\xe1\xef\x78\xdf\x2d\x23\x2b\x18\x02\x51\x9b\x7d\x00\xc2\xec\x53\x9f\x70\x6a\xfb\x13\xc7\x7f\x6f\x9b\xce\xf5\x63\xbb\xf5\x87\xf0\x3b\x9a\x5c\x5c\xc3\x37\x3f\x9d\x5d\x27\xd6\x8c\x1c\x93\x50\xb7\x80\x21\x10\xb5\xd9\x07\x20\xcc\xbe\x53\xef\x5e\x89\xcc\x5f\x33\xbd\xf8\x6d\x61\x69\x8b\xd1\xea\x25\xdb\x7d\x4b\xc1\x90\x09\x8b\x49\xef\x15\x87\x9a\x1e\x13\x8c\xf1\x29\x18\x02\x51\x9b\x7d\x00\xc2\xec\x0b\x4e\x58\x88\xb6\x5b\x29\xf3\x88\x76\xee\xb8\x83\x27\x70\xfe\x0f\x55\x64\xef\xf4\xfa\x18\xcd\x08\xfe\x2b\x02\xba\xf2\xb7\x85\x18\x18\x02\x51\x9b\x7d\x00\xc2\xec\xab\x3b\x81\x61\x7b\x74\xe1\x6d\x23\x31\xd1\x9b\xbe\x05\x2e\xeb\x28\xc9\xdf\x35\x42\x0c\x83\x57\x0c\xa6\x88\x08\xa5\x03\x22\x59\x0f\xf6\x65\xff\x68\xf6\x7d\x1d\xec\xeb\xff\x78\xbd\xd2\x5a\xa5\xa1\x6a\x75\xa9\xdd\xc3\x4e\xc3\x47\x6c\xd1\x65\x91\xe6\xea\xd7\x3e\xd6\x29\xcf\x64\x91\x6a\xc4\xcb\xbe\x57\xe1\x2e\x2b\xe7\xa8\xba\x1e\x2b\x64\x0f\xd2\xe1\x34\x32\xdf\x09\xe4\x36\x5a\x7b\x66\x45\xfc\xd5\x72\x65\xbb\x8b\xd8\x3a\xff\xef\xd1\xaf\xeb\x8d\xd3\x2f\x85\xfc\xbc\xca\x73\x02\xaa\x4b\x6f\xdf\xdb\x76\x0c\xb1\xd5\x76\x2b\x06\x92\x14\x42\xc3\xd5\x85\xa7\x03\x87\x12\x8e\x44\xe5\x5f\x13\xe3\x4d\xc5\xb4\x3f\x2b\xab\x4d\x14\x6b\xdf\xd8\xdf\x7a\x24\x72\x32\xf8\xaf\x98\x42\xd3\xd8\xbb\x25\x6e\x83\xfc\xb1\xa3\xbf\xf8\x19\xd0\xbc\xce\x77\x3f\x48\x7c\x5f\xe3\x4b\x0c\x85\x4f\x9b\xa2\xe5\xf3\xa7\x31\xa1\x6a\xae\x27\xdd\xef\x54\x15\xa6\x1b\xad\xa5\xaa\x1f\x89\x36\xb8\xdb\x08\xb3\x27\x0f\x24\xbc\xec\xd9\xfc\x55\x48\x46\xf2\xa5\x29\x5f\x7c\x65\x92\xc9\xd3\x3c\xed\x4a\xf0\xb4\xc2\x9d\x38\xf3\x23\xd1\x19\x41\xb8\xc2\x9f\xdd\x51\x20\x31\x83\xd3\xee\xea\x92\x95\x93\xb2\x9d\x0d\xe8\xdc\x18\xe1\x1f\xb6\xd0\x5b\x37\x71\xab\xc7\xe8\x48\xb4\x74\x95\x3b\x51\x96\x75\x97\x9f\x5e\xbb\xf9\x79\x1a\xe7\xd5\xf8\xd3\xe9\x97\xa8\xb2\xf8\x6c\x24\x0c\xc7\xc6\x74\x53\x32\x82\x76\x8f\x44\x2d\xa4\x5b\xce\x79\x16\x3d\xae\xf8\x0c\x4f\xf1\xbe\x6a\x0e\x5d\x0e\x0b\x7a\xfe\x04\xda\x52\xd4\xff\x3b\x4e\x52\x79\x33\x0b\xf7\xd5\xff\xbc\xec\x3b\xee\xae\x1e\xce\x68\x08\xb3\x0f\x24\xd1\x35\xfc\x4b\x94\x2f\xbf\x35\xfb\x77\x2d\xb2\xae\x9a\xf8\x01\x4f\x04\x9d\xaa\xeb\xda\x9d\x70\xc6\xb2\x12\xf5\xef\x01\x07\x1d\x84\xda\xec\x03\x10\x66\x9f\xe3\x4a\xdd\x25\x62\x01\xfb\xa9\xc7\xbb\x29\x55\x54\x5b\x5f\xaa\xda\x4a\xb4\x9e\x7c\x99\x7e\x25\x20\x34\xd2\xf0\x94\x38\xf5\x26\x23\x0c\x81\xa8\xcd\x3e\x00\x61\xf6\x6d\x76\x0a\x44\xbf\x15\x65\x7f\x3a\x17\x8a\xbb\xbc\x7c\x66\x75\xb8\x63\x28\x50\x58\x51\x96\xdd\x8d\x98\x62\x2d\xcd\x16\xef\xda\x45\x18\x02\x51\x9b\x7d\x00\xc2\xec\x5b\x08\x32\x9c\x6c\x22\xea\xf6\x73\xee\xc1\x9c\x50\x7e\x40\xbc\x43\x72\x52\xce\xde\xe2\xb3\xd4\x7d\x4c\xbc\x68\xfd\xee\xdf\xc7\x07\x9b\x7c\xd4\x66\x1f\x80\x30\xfb\x14\xbe\x66\x05\x90\x97\xbd\xf4\xde\x9b\xe5\x7e\x74\xf9\x7c\x15\xb6\xc8\x55\x41\xec\xe9\xa5\xb2\x5f\x09\x97\xef\x4b\xfb\xff\xe1\x3c\x58\x82\xa0\x36\xfb\x00\x84\xd9\xe7\xa2\x2f\xbf\xe9\x22\xc9\xf7\x9e\xc6\xd9\xe9\xf7\x7c\xb8\xe6\xc0\x80\x89\x0b\x17\xf3\xe6\x57\x36\xed\xf3\x72\x81\x62\x39\x0f\x18\x60\x08\x44\x6d\xf6\x01\x08\xb3\xef\x89\xf5\x03\x85\x82\x9f\x04\x67\x49\x72\x52\x4c\x94\xad\x20\x0b\x56\x06\xeb\xcc\xbb\x3f\xb9\xa8\x73\x16\xbd\x3b\xdc\xb9\x1a\x49\x60\x08\x44\x6d\xf6\x01\x08\xb3\xcf\x27\xe3\xfd\xfe\xf4\x83\x82\x41\xef\xca\x55\xb6\x82\x49\x9f\x29\x8d\x7e\x82\x87\xbd\x74\x36\x9e\x45\x2c\xd7\xa2\x27\xc8\x9f\x9f\x85\x21\xf0\x1f\xcd\xbe\xe3\xe6\x9d\xc3\x66\x42\x98\x7d\xd7\xd3\xe3\x3d\x66\x93\xd8\x94\x3c\x85\xcc\x85\x4b\x53\x8c\xbd\xcc\xa8\xbe\x7f\x68\x5a\xdd\xc0\xbc\x3a\x91\x44\x06\x2b\x68\xa9\xc2\x10\x88\xda\xec\x03\x10\x66\xdf\x5b\xef\xd1\x9f\x97\xfc\x8d\x33\xb2\x9e\xa8\xf9\x5e\x8d\x78\x9c\x56\xcd\xbc\x53\x22\x30\x0e\xac\xc4\xe8\xd8\xfb\xd2\x77\xb7\x1d\x2c\x41\x50\x9b\x7d\x00\xc2\xec\x2b\x30\x59\xcc\xe2\x58\xfc\x61\x21\x26\xb4\x94\x8a\x1f\x45\x45\xf2\x43\x4e\x8c\xb6\x6a\x10\xce\xf3\xf6\x11\xea\x8a\x5e\x7b\xe7\x0e\x43\x20\x6a\xb3\x0f\x40\x98\x7d\xd6\xf5\x9c\x36\x61\x3c\x4a\xd6\x1e\x3e\x42\x0a\x98\xeb\x1b\xac\xc5\xea\x46\xe4\xbe\x9a\x7f\xf8\x5e\x79\xad\x48\xb4\x12\xcb\x1d\x3c\xf2\x50\x9b\x7d\x00\xc2\xec\xf3\x68\xcb\x76\x3e\xaf\x11\x12\xfb\xf1\xfb\x66\xc5\x46\x2e\xee\x5e\xc0\xa5\x8b\x0f\xf6\x69\x1f\x69\xd7\xd4\xa6\xe1\x8f\x9b\x17\x1f\x4c\x0a\xa8\xcd\x3e\x00\x61\xf6\x8d\xf4\x28\x07\x19\xd1\x33\xcf\x5f\xcd\x66\x6e\xd8\x54\xd7\x3c\x93\xf0\x82\x0c\x1f\xb7\x87\x57\xc7\x26\xf5\x8b\xde\xdf\x8d\x17\x26\x30\x04\xa2\x36\xfb\x00\x84\xd9\x07\x07\xfd\x16\x52\x22\x78\x9d\x6e\x63\xbb\xb1\xc3\x78\x81\x80\x14\x6b\x14\x9d\xf1\xe7\xbd\x98\xe5\xc3\xc7\xd9\xca\x1f\xbc\x70\x25\x61\x08\x44\x6d\xf6\x01\x08\xb3\x6f\x3e\x9a\x66\x97\xa3\xc1\x9d\x91\x6f\x38\x32\x38\x8e\x88\x6f\x6f\x84\xfe\x13\xf3\x4c\xfa\xaf\xb0\x19\xcd\xc5\xf5\xc9\x96\x97\x7a\x30\x04\xfe\xa3\xd9\x77\xdc\x93\xf9\xb0\x99\x10\x66\xdf\x23\xd3\x77\xd6\x4a\xd1\x0d\xdf\x33\x92\x3b\x6c\x0a\x35\x4e\xcb\x97\x71\x6a\x95\x3c\xa7\xae\xeb\xdd\xcf\xe2\x2a\x4e\xb8\xf6\xf5\x04\x0c\x81\xa8\xcd\x3e\x00\x61\xf6\xed\xcf\x38\x9b\x5e\xa4\xb8\x14\x98\xf2\x4d\xd4\x54\xae\xdf\xe1\x31\xa3\xed\x3d\x7a\xfe\x5b\xe2\xf8\x5f\xfa\xcb\x04\x1f\xac\x5b\xe1\xc1\x10\x88\xda\xec\x03\x10\x66\x9f\xb6\x5c\x1e\x43\xd9\x22\x95\xbf\xde\xd7\xbb\x04\x17\xdf\x74\xde\x1a\x9e\xd5\xc8\xf2\x1a\x68\x6d\xc4\x7d\x42\x87\xbb\x9f\x50\x09\xc1\x10\x88\xda\xec\x03\x10\x66\x9f\x8e\xb9\x63\x46\xa6\x13\x3d\xd1\x9e\xca\xf6\x37\x77\xde\xaf\xb1\xfd\x4f\xc8\x6f\xbf\xa2\x14\x28\xd1\xc9\xef\x2c\x30\x1e\xd1\x10\x83\x21\x10\xb5\xd9\x07\x20\xcc\x3e\x4e\xff\xac\xab\x9e\x89\x41\xc9\xaf\xbd\x34\x5b\x12\x4e\xc7\x05\x4b\x16\xa8\xe2\x52\xaa\x14\x67\x44\x7e\x0b\x29\xbf\x2e\xa1\x74\xd0\xb0\xa8\xcd\x3e\x00\x61\xf6\xe5\xd0\x97\xf4\xe0\xfb\x14\x2b\x13\x93\xff\x5c\xc0\xbf\x82\xd7\x58\x79\xb2\x7e\x2f\xab\x7a\xe1\xa4\x6e\xf3\x84\xe6\x34\x75\xa7\x03\x0c\x81\xa8\xcd\x3e\x00\x61\xf6\x45\x04\x68\x1a\x9f\x28\x7a\xdc\xee\x51\xaa\x95\x70\xf5\x7a\x94\x72\x12\x68\xab\x10\xed\x61\x34\x37\xa1\xe6\xf1\x43\x98\xc8\xca\x06\x86\x40\xd4\x66\x1f\x80\x30\xfb\x44\x36\xf7\x3f\x5f\xcf\x98\x70\xbe\x56\xdf\xc5\x26\x92\xcb\xd6\xda\x01\x04\xcc\x9e\x4f\xea\xcf\xb6\xad\x37\x18\xcc\x4d\xc4\xb7\x86\x21\xf0\x1f\xcd\xbe\xe3\xd6\xae\x87\xcd\x84\x30\xfb\xd6\x8a\xd8\x6f\x7c\x0e\x28\x2d\x0b\xa8\x66\x19\x0d\xd2\xf6\x8b\x4f\xc7\x30\xa4\xf6\xfb\xc6\x07\xb1\xd4\xa6\xf5\xbe\xaf\x5f\x3b\xd8\xf0\xa1\x36\xfb\x00\x84\xd9\x27\x4a\xc7\x98\xd5\x3c\xfc\x4b\x31\x8c\xb2\x62\x96\xe9\xac\x83\x6b\x40\xf9\xef\xf1\xdb\xe1\x05\x4a\xc4\x4b\xc4\x99\x20\xe3\x43\x15\x18\x02\x51\x9b\x7d\x00\xc2\xec\xdb\xb3\xed\x8a\xe4\x79\xb9\xba\x91\x7b\x11\x98\xed\x62\x99\xff\x42\xe0\x1f\x3a\xf4\x38\xe5\xd6\xbc\xd8\xd7\x2f\x8e\xa7\xad\xde\x1c\x2c\x25\x51\x9b\x7d\x00\xc2\xec\xcb\xc8\xfb\xd0\x1f\xf2\xee\x57\x4f\x97\x30\x8b\x96\x47\x2f\xb9\x21\xad\x76\x0d\xb5\x8f\xf7\xc3\x94\x0f\x91\x83\x6f\x28\x58\x73\x2f\xc0\x10\x88\xda\xec\x03\x10\x66\xdf\x39\xd7\x27\x4c\x26\x97\xab\xdd\x32\x84\xf6\xc8\xaf\x5f\xb5\xc0\xc7\x4f\xe0\x18\xbc\x4e\x73\xa9\x28\x72\xd5\x79\x99\xf0\xd1\x49\x75\x18\x02\x51\x9b\x7d\x00\xc2\xec\x2b\xe2\x31\x1b\x24\x38\x25\x6f\x62\x7d\x9a\xdd\x16\x4c\x4c\xbe\x7e\x8a\xe8\xf9\x87\xed\xef\xac\x06\x6d\xdc\x39\x63\x78\xf9\x6c\x07\x4b\x7b\xd4\x66\x1f\x80\x30\xfb\xa0\x19\x0e\x49\x9b\xd3\xf3\x38\x3e\x06\x3d\x57\x40\x86\xdd\x02\x86\x86\xf3\xe1\x6f\x34\xc3\xe5\x3e\x9f\x2b\x94\xdd\xdf\x63\x39\x58\x29\xa0\x36\xfb\x00\x84\xd9\xf7\x9a\xf5\xe7\xc7\x77\xb8\x32\xb6\xf8\xd6\xa3\x06\xfb\xaf\x2a\x52\x7e\xbe\xbd\xc7\xf6\x6e\xad\xea\xec\xd9\xac\x89\xf8\x3f\xc2\xbf\x0e\xea\xea\x1f\xcd\xbe\xe3\x76\x77\x87\xcd\x84\x30\xfb\x78\xf5\x0b\x35\x77\xa1\x27\xc9\xed\xb1\x5f\x0a\x08\xbb\x7e\x80\x01\x16\x79\xd0\x13\x3c\x61\x23\x39\xb5\x0a\x89\x1f\x6a\xb1\x46\x30\x04\xa2\x36\xfb\x00\x84\xd9\xd7\xc2\x58\xf7\x68\x52\xfb\x41\xab\xe6\xe7\x07\x8b\xe3\x7f\x3d\x22\x85\xf0\x46\x48\xeb\x5c\xdc\xb9\x38\x14\x22\xc4\xf0\xe9\xa9\x0f\x8a\x10\xb5\xd9\x07\x20\xcc\xbe\x1b\x73\xc4\x2f\x94\x9f\xe0\x04\xf2\xb8\x6a\x3d\x2e\x77\xd1\x57\x6f\xdc\x0a\x7e\x3e\x2e\xa1\x33\xda\xf5\xc4\x12\xe4\x67\xd1\xb9\x0c\x43\x20\x6a\xb3\x0f\x40\x98\x7d\xdc\x15\x3f\x3e\xed\xc8\x7c\x31\xf4\x1d\x94\xfc\x31\x7b\xf1\x6f\xce\x35\xc9\x8f\x65\xbf\x3e\x99\x58\xc5\x5f\x1d\x0d\x70\x87\x99\x70\x60\x08\x44\x6d\xf6\x01\x08\xb3\x8f\xa0\x46\xc8\x78\xdc\x5c\xe5\xe3\x95\xb7\x0f\x54\xb2\x66\x0b\xdb\x5e\xde\xa9\xca\x6a\x30\x72\x14\x0f\x0f\x35\x63\x53\xf4\xb3\x38\xf8\x1c\xa8\xcd\x3e\x00\x61\xf6\x99\xe7\x76\xc4\x5f\x59\xb8\x9b\x77\xae\xed\x07\x37\xa5\x30\x9f\x96\x40\x57\xee\x5c\x4a\xf6\x0e\xad\x9f\x6c\x79\x7c\xdf\xd7\x3f\x07\xfb\x32\xd4\x66\x1f\x80\x30\xfb\x06\x53\xb5\x08\xfd\xe9\xba\x7f\x34\x8c\x71\x04\xdc\x02\xb6\x97\xee\xdd\xa4\x7b\xd2\xc8\xd1\x7c\xb6\xca\xc5\x95\x8e\xd9\x5b\x9c\x1e\x86\x40\xd4\x66\x1f\x80\x30\xfb\xac\x9c\x3e\x0a\x5a\x8e\x7b\x7b\x9e\xfb\x84\xb1\xbf\xc7\xc9\x27\x7f\xfe\x45\xfd\x19\xd5\x0d\xe8\x9b\xeb\xa6\xc0\x0e\x7f\x8e\x9f\x0c\x0c\x81\xff\x68\xf6\x1d\x77\xfe\x71\xd8\x4c\x08\xb3\x2f\x00\x7e\xf4\xfa\xcc\xaf\x3d\xe6\x21\x76\x65\xdc\x37\xe6\x1c\x83\x27\xaa\x9c\xdd\xbe\x44\xdf\xe5\x5b\x96\xaa\x1b\x08\xf9\x25\x70\xb0\x89\x43\x6d\xf6\x01\x08\xb3\xef\x62\x7e\xa4\x05\xc9\x37\x8d\xf9\xdf\x2b\x89\x75\xcb\x0a\x73\x17\x46\x72\x77\x8a\x3e\x94\xa5\xe2\xa4\x5b\x2c\x44\x58\xa5\xda\x51\xc0\x10\x88\xda\xec\x03\x10\x66\x5f\x86\x67\x1a\x48\x73\x8f\xe2\xa2\xae\xbd\x56\x14\x3d\xcf\xe3\xca\x73\x15\xfb\x6d\xf8\x65\x81\x19\x46\xb7\xe9\x71\x9e\x10\x48\xd2\xc0\x10\x88\xda\xec\x03\x10\x66\x5f\xeb\xbb\x28\x16\x0d\x5d\x82\x77\x3e\x22\x57\x26\xfa\x43\xff\x18\xa7\x0d\x3b\x9e\x98\x8f\xe7\xe6\xd0\x78\xa6\xdf\x94\x53\xbc\xe6\x04\x43\x20\x6a\xb3\x0f\x40\x98\x7d\xed\x1f\x44\x07\xb4\xc5\xc0\x3b\xd8\x0a\xa2\x5b\x2b\x1f\xef\xdb\x3c\xba\x68\x94\xa5\xdc\x57\xc9\x5e\xf4\xc7\xcb\x7f\xd6\x86\xf3\x60\x7f\x89\xda\xec\x03\x10\x66\xdf\x47\x9c\x5c\x01\x47\xa2\x05\x69\xda\x0a\x55\xb0\x55\xed\x72\xd1\xb2\x27\xde\x93\xe8\x62\x9f\xbe\x9f\x37\xef\x27\x47\x5a\x99\x71\xc3\x10\x88\xda\xec\x03\x16\x91\x07\x5b\x0b\x33\x60\xe4\x53\x8f\xd4\x95\xa5\x55\xf7\xd9\x87\x8b\xe2\x84\xb5\x23\xd5\xd6\x04\x1c\x9e\x95\x8e\x96\x75\x2e\x97\x95\x61\x08\x44\x6d\xf6\x01\x08\xb3\x8f\x8a\xb8\x44\x30\xd1\xcb\x84\x3b\x30\x86\x3f\xd9\x5f\xb7\xd0\xa5\xcc\x11\xce\x12\x1c\xad\x2a\x8b\x76\x98\xd7\xf3\x79\x70\x46\x04\x86\xc0\x7f\x34\xfb\x8e\x3b\x21\x3c\x6c\x26\x84\xd9\xd7\xaa\xe9\xc7\x29\x84\xa5\xd8\x7e\x12\x1d\xc8\x56\x92\xb5\x3d\xf3\xa4\x69\x8b\x9b\x80\xa1\x81\xa5\x49\xad\xf4\xfa\xb7\x61\x02\x55\x18\x02\x51\x9b\x7d\xc0\x32\xf2\x8b\x29\x2d\x03\x2d\x3d\xe2\x3b\x0c\x72\x24\x1e\xfc\xda\x1c\xac\x66\xad\xbd\xbd\x9e\xe5\x81\xcf\xfc\x77\x6a\x1c\x71\x09\x88\x15\x60\x08\x44\x6d\xf6\x01\x08\xb3\xef\x23\xf3\x5e\xc0\x67\x1a\xcb\x58\xfc\xdb\x77\x6b\xb3\x9b\x3e\xed\x65\x7d\xe9\x39\xa9\x69\x3f\xe8\x20\x10\xfd\xa8\x62\x34\x47\x5b\x16\x86\x40\xd4\x66\x1f\x80\x30\xfb\x66\x04\xf0\xee\xf8\xa4\xd5\x18\x43\xd6\xae\x9c\x79\xf8\x2c\x8e\x0f\x39\xbb\xd9\xf6\x0d\x6a\xdd\x38\x2e\x71\x52\x30\xca\x3c\xd4\x82\x21\x10\xb5\xd9\x07\x20\xcc\x3e\x9b\xae\xaf\x4d\xa5\x4f\xa8\x9f\x44\x04\x0c\x99\x90\x87\xdb\xf0\x4e\x9d\xdb\x49\x05\xfc\x57\xbb\x66\x85\x33\xbb\x53\x12\x0d\x8d\x61\x08\x44\x6d\xf6\x01\x08\xb3\x8f\x8c\x7b\x5d\xb8\xe6\x27\x61\x1c\xa3\xeb\xf3\x9e\xfb\x06\xd7\x21\x3e\x72\xb5\xaf\x85\xd6\x99\x36\xf9\xdb\x03\x8a\x4f\xae\xad\x33\xc1\x10\x88\xda\xec\x03\x10\x66\xdf\x97\x58\x3f\xc5\x2d\xb3\xdf\x35\xf1\xca\x26\x84\xf6\x31\x35\x89\x3d\x16\x94\x7b\xc5\xbf\x45\x7a\xf0\x66\x22\x15\x18\x78\x69\x25\x60\x08\x44\x6d\xf6\x01\x08\xb3\xaf\x87\xde\x70\xf4\xce\xbb\xcc\x86\x3f\x9f\xd8\x49\x88\x5f\xb9\x27\x32\xfe\xf1\xba\x60\x1f\xab\x28\x86\x67\x41\x56\x99\x1c\x72\x9d\x0e\x86\xc0\x7f\x34\xfb\x8e\x3b\x43\x3f\x6c\x26\x84\xd9\x57\x00\x7f\xb5\x62\xa2\x6b\xe6\x89\x58\xf7\xe9\xc7\x13\xdc\x9c\x73\x7f\xc3\xa5\x5a\x14\x5d\x5c\x1c\xee\x35\xda\x2c\x47\xe9\x78\xb0\xe1\x45\x6d\xf6\x01\x08\xb3\x4f\xd0\x2d\x49\xab\x8a\x2b\x60\xc4\xb8\xc1\x47\xf2\xc7\x94\x0b\xad\xfd\x87\x70\xae\xb2\x17\x96\x3d\xaa\x26\x3a\xf7\xed\x47\xbf\x1d\x6c\x78\x51\x9b\x7d\x00\xc2\xec\x33\x2d\xd7\xc1\xe0\xd0\xba\xac\x5a\x5d\xdb\x68\x37\x5c\xd2\x5e\x7e\x28\x91\x90\x6d\x8f\xb1\x32\x8b\x26\x51\xbd\x38\x75\xca\xc5\x0b\x86\x40\xd4\x66\x1f\x80\x30\xfb\x5e\x95\x9d\x7f\xbc\xcb\xaa\x46\xd7\x62\x2a\x48\x27\x9a\xd8\x75\xe3\x56\x31\x95\x47\x90\xd1\xa9\x48\x6e\xc1\x51\x01\xba\x98\x7b\x24\x30\x04\xa2\x36\xfb\x00\x84\xd9\xe7\x60\x60\xff\x53\xba\xb9\x47\x70\x22\x27\x38\x5d\xc6\x31\x66\xe4\xcb\xe6\xfc\x5f\xf3\x16\xf5\x0e\x13\xd2\x18\xf5\x9f\x97\xde\xeb\xc3\x10\x88\xda\xec\x03\x10\x66\xdf\x8a\x1b\xcd\xee\x68\xc3\xdb\x26\x85\xa7\xaf\x78\x70\x16\x43\xeb\xa8\x17\x77\x27\x9f\xdc\xd7\xaa\x5f\xf0\xff\xd9\xc7\xaf\xb1\x8a\x85\x21\x10\xb5\xd9\x07\x20\xcc\xbe\x8b\x7e\xed\x09\x26\xeb\xfa\xcf\x18\x99\x37\x47\x12\x3c\xe1\xeb\xa3\xd6\xf3\x8c\xbf\xc3\x2d\x71\x49\x47\x5e\x78\x39\x69\x52\x83\x30\x04\xa2\x36\xfb\x00\x84\xd9\x77\x9d\xd0\x4a\xa9\x32\xf8\xfb\xb6\xdf\x42\xf7\xa5\x0d\x3d\x7b\x15\x06\x33\xc2\x61\xdc\x73\x8e\x71\x0f\xf9\x9d\x49\x9d\x6a\x03\x04\x61\x08\x44\x69\xf6\xd5\x93\xfe\x77\x33\x15\xe5\x2f\xa7\x9f\x0f\x7f\x56\x65\xc0\x1b\xd9\x98\xab\xe4\x30\xe4\x73\x67\x30\x6c\xf4\x79\x2a\x65\xf1\xcf\x0e\x6f\x2c\xe9\x67\x2f\x38\x83\xef\xc8\xeb\xab\xb4\x01\xee\xd1\xdd\x42\x56\xa7\x8a\x6f\xbd\xeb\x8b\xcb\xa1\x81\x63\x56\xcd\x18\x8d\x13\xf5\x03\xef\x5f\xb4\x47\x28\x9a\x06\xba\x1d\x7d\xd5\xc6\x3a\x15\x76\xf3\xf3\x9c\xd7\x72\xaa\x1f\x94\xeb\x6e\xd7\x78\xe7\x92\xf9\xc7\x0a\xbd\x6f\xdd\x52\x61\x66\x5b\xcc\xfd\x9f\xe3\x8f\x44\x93\xd5\x09\xab\x26\xda\xde\xe6\x5a\x9e\xf9\xda\x90\x6c\xe6\x7d\x4a\xbf\xed\xd4\xe4\xa3\x5f\x56\xcf\xca\x0a\xbd\x73\x0c\xb4\x2c\x4a\x8e\x44\x2f\xdc\xd0\x6c\x1a\xb2\x2d\x8b\x59\x39\xeb\xcc\x7a\x43\x23\x7c\xcd\xff\xab\x19\xef\x9b\xe0\xe2\x04\xe5\x7b\x32\x15\xe5\x23\x7c\x47\x7f\xf0\x33\x90\xc2\xc9\x17\x56\x98\x21\xeb\xda\x4a\x7a\xfe\x8a\x0b\x34\x2e\xfd\x40\x90\x7b\xf1\xde\x65\xe7\x5b\x4a\x5d\xd8\xbd\xdc\x9a\xa3\xef\x25\xad\x83\xa9\x2e\x09\x9d\xb6\xb5\x5c\xf0\xd1\x6a\xee\x60\x4a\xe2\x4c\xf7\x1b\xae\xb3\x4f\x3e\x2b\x75\x5e\x5e\xb8\x4b\x32\x99\xa1\xee\x48\x74\xf1\x6e\x94\x70\xb3\x5f\xcf\x75\x5b\x27\x7e\x59\x0d\x8b\xc0\xb7\xc1\x3c\x94\x8a\xec\x89\xf8\x62\xd7\xbe\xd3\x2a\x9e\xa8\xd7\x7d\x73\x24\xfa\x44\xeb\x0a\xdc\x9f\x6d\x91\x3e\x91\x37\xda\x35\x79\x5b\x5e\xeb\x5d\xa0\x08\x2c\x1d\xe1\x1d\x40\x7b\xeb\xfe\x90\x4c\xda\x90\xe2\x91\x28\xa1\x88\xe4\x8e\xd1\xf8\x49\xa6\xeb\xc2\xb8\xfd\x77\xa6\x5f\x29\xf5\x94\x7e\xa4\xcf\x3b\xe7\x71\x83\x28\x86\xc4\x32\xad\x44\x4e\xea\x48\xd4\x7f\x4d\x59\xca\x30\x0c\x4f\xa6\x79\xd8\x97\xc0\x9e\xaa\x93\x77\x7c\xd4\x36\x2f\x58\xfe\xa6\x74\x8d\xae\x68\x13\x83\x75\xcc\xd1\xef\x56\xfa\x0a\x4f\x50\x66\xbc\xfd\x73\xe5\xcc\x8b\x66\xd5\xe0\xa7\x7c\x8c\xa6\x37\xed\xda\x6a\x4b\x24\x2e\xa7\x48\xf3\x7d\x88\x7a\x57\x34\x71\x24\xca\x1d\xb2\x52\xab\x53\x29\xb7\xf3\x95\xef\x55\xc4\xef\x2b\x4a\x05\x7a\x9b\x43\x6b\x31\x43\x86\xce\x21\x7b\x34\x8a\x89\xc5\x97\x2e\x1d\x89\x2e\xc0\xa5\xe4\xc6\x85\x6e\x33\x6a\x79\x13\xbf\x27\x01\x6d\xa0\xdc\x29\xb2\x58\x84\x55\xec\x76\x3e\x67\x2b\x81\x69\xf7\xd5\xf6\x23\x51\x43\x65\x15\x3c\x9b\x65\x3c\x7b\x0f\xb2\x6b\x83\xa9\x67\xc4\xb8\xbb\xf9\xc4\x3e\xe0\x95\x44\x06\xfe\xae\xf7\x0e\xc7\xeb\xbd\x27\x73\x24\xfa\xc5\x8b\xc0\x40\xc9\xee\xa4\x53\x69\x45\x97\xc0\x0d\xf6\x99\x54\x63\x85\x1b\x0f\x43\xc1\x70\x6e\xbf\xb6\x86\x9c\x44\xb8\xff\xcc\x91\xe8\x6d\x4a\x59\xf2\x39\x29\xda\x87\x72\x7f\x1e\x54\xed\x88\xd3\x5d\x95\x10\x0a\xe4\x05\x1f\xf7\xaf\x48\x29\xf4\xad\xb8\x2b\x73\x29\x1d\x89\xbe\x76\xde\xc3\x31\x5c\xd2\x90\x50\x9d\x0a\x0b\x29\xe4\xc1\xe1\xee\xc7\x4a\x8d\x0b\x94\x1b\xda\x5b\x4e\x58\x3d\x77\x5a\xad\xee\x3d\x12\x8d\x23\xbd\x37\x84\xd3\x60\xd9\xfa\xd8\xeb\xe1\x47\xf1\x2f\xee\x4e\xe6\xca\xcb\xd1\xa9\x4f\x2a\x7d\x5a\x7f\x4d\x99\x97\x77\x26\xb1\x1c\x89\x3e\x10\xa3\x91\xfc\x9e\x15\xd9\xb4\x54\x56\x96\x63\x1d\xae\x13\x30\x39\xb2\xab\xda\x2f\x76\xbf\x37\xaa\x24\x6e\x5e\x3d\x8f\xf7\xa8\xf0\xf8\xf5\xa6\xf0\x4b\x8a\x0b\x51\x44\x73\x3f\x89\xc9\x44\xc6\xac\xd4\xf4\xa2\x07\xad\x29\x36\x26\x65\x3c\xf4\x92\xde\xa4\x0c\x2f\xd1\x1e\x89\xc6\x07\x29\xe0\xde\x0c\x32\x52\xb1\xd0\x78\x92\x45\xd3\xd7\x6c\xe3\xad\xa2\x4b\xdf\xa6\xff\x34\xad\x02\x5b\xa6\xcf\x20\xb2\xa7\x75\x24\xea\xb5\xaa\x87\x3b\x60\xc6\xf7\xca\x8c\x90\xe0\x55\xc9\xcd\xef\xb8\x76\x69\x65\xae\x1b\xe1\x9e\xe3\xa5\x41\x2d\x13\x69\xab\x11\x6f\x8f\x44\x7f\xfb\x38\xed\x2e\x7b\x8d\xfc\x60\xb8\xb4\x42\xe9\xde\xba\x62\xf3\x6d\xf7\xc5\xe5\xf5\xf0\xef\xfb\x1c\x3b\x09\x61\x4f\x4f\x26\x96\x1d\x89\x3e\xcd\xcf\x1b\xfa\xc9\xf5\xa0\x4f\x1a\x26\x8b\xbc\x64\x8d\xa5\x4c\xa8\x09\x0f\xe9\xd4\xdf\x9a\x85\x17\xb6\x1a\x0b\x5a\x2c\x55\x8e\xbe\x72\x5f\x6b\x16\x5e\x22\x5a\x96\xea\x93\x72\x3f\x8b\x63\xd2\xf9\xfa\xc5\x67\x07\xbb\x59\xa7\xb7\x37\x4e\x3e\xa5\xbe\x73\xc9\xeb\x63\xc4\x91\xa8\x0b\x94\xb7\xc0\xd1\x31\x5a\x93\x1f\xa4\xc4\xe7\x70\x47\xe4\x8d\x46\x4c\xf0\xcb\xad\xcf\xee\x5d\x4d\x6b\x0b\xbc\x4e\x32\xe4\xef\x8f\x44\xd5\xb5\xc1\xb2\xaf\x01\x5d\x2a\x58\x3f\xa5\x34\x5d\x52\xd9\x81\x9c\x2e\x03\xd5\x53\x9b\x3d\x3e\xd5\xf7\x45\xde\x66\x2e\x5a\x74\x1e\x89\x6a\x5c\xed\x97\x8a\x0c\x37\x26\x31\x10\x67\x6c\x59\x7b\x4a\x3d\x2d\xa1\xb9\x56\x42\x5c\x78\x9e\xfb\xaa\x97\xdb\x33\xe6\xe7\x1e\x99\x47\xa2\x35\xc9\xf3\x72\xe6\x67\xec\xa4\x98\x9d\x30\x71\x99\x81\xa4\xdb\xdc\xda\x36\xea\xd4\xf4\xa6\xde\x12\x93\x37\x30\xef\xf3\xab\xce\x1f\x89\x0a\xbf\x67\x23\x6f\x9f\xb9\xf8\xa9\x9f\xf8\xe9\xe5\x0b\x49\xba\xa2\x9b\xa2\x5f\x40\xf2\x98\xf4\xb1\x6b\xb4\x95\x62\xca\x0c\xcf\xa8\x8e\x8e\xda\x4f\xa6\x3c\x7f\x39\x5a\x79\x8f\xd2\x41\x86\x61\xa3\x02\xd0\x0b\x3e\x75\x2d\x10\xb2\xe9\xfb\x15\xd9\x40\xf8\x6a\xbf\xea\xf3\x91\x68\x45\xd3\x90\x1c\x2d\xed\x8d\x32\x37\xf6\x7a\x9e\x10\x7e\xd1\x59\xd1\xd4\x60\x25\x89\xbf\x81\x9c\x6f\x84\x2f\xdc\x32\xeb\x92\x38\x3a\x69\x56\x89\x75\x5c\xa3\x5f\x5b\xf4\x4e\xd8\x12\xaf\x14\xa8\x08\xa4\x5b\x75\x7d\x66\x44\x37\xbc\x20\x2f\x6b\xfe\xf8\xdb\x7e\x8f\xed\xea\x91\xa8\xc7\xf5\xef\x61\x4e\x2d\xa4\x16\xd9\x26\x57\xa2\x04\x06\xb1\x64\x72\x04\xe0\xd3\x1c\x4e\xea\x3d\x57\xa9\xf7\x99\x81\x15\x72\x47\xeb\x15\x24\xd1\xb2\xe6\xfe\xb6\xe0\xa2\x5d\x6e\x7b\x36\x92\xdf\x3a\xca\x5b\x89\x77\xeb\x79\xd0\xd3\xa0\x87\x92\x43\x3e\x1f\x6c\xd5\x39\x8f\x44\xc9\xb6\x38\xff\x4c\xda\x2b\xc5\x57\x9e\xa6\xfa\xd1\xf7\xa8\x75\x4c\xc6\x90\x04\xee\x37\x2d\x30\xa0\x19\xfe\xa4\xe1\x5e\x9e\x2f\x72\x24\x7a\x73\x75\xd4\x54\x9d\x4a\x9f\x7c\xe3\x5c\xb4\x23\x11\xb8\x91\x39\x40\xe3\x9b\x94\x55\x5d\xa1\x1a\x4e\x34\xbc\x7d\x82\x3d\x5b\xfa\x48\x14\x67\x08\x97\xfb\xa9\xe9\x1d\x8a\xcc\x1b\x4b\x77\xfd\xa9\x5e\xcd\x3d\x34\x8e\xf9\x15\xa6\x49\xca\x5e\x61\xfb\x7d\x4a\x36\x79\xff\x68\x0d\xb0\xd1\x5c\xa9\x0f\x8b\x08\x29\x2c\xf7\xcd\x94\xf4\xfd\x60\xbc\x5a\xf6\x28\x41\x2b\x4d\xfc\x9a\xb8\xef\x53\xf7\xef\xf7\x31\x14\xfe\x47\xa2\x0a\x75\xba\x4b\xe6\x37\xb7\x77\xfe\xde\xb0\x5e\x53\x2f\xdd\xfd\x6e\x75\x4e\x76\x43\x5a\xe0\x63\xd9\xde\xb0\xb3\x53\xf2\x8d\xac\x47\x47\xa2\x6d\x3b\x0c\x4e\xbf\x64\x64\xbf\x25\x04\x8c\x8f\xc8\x18\x92\x0a\x93\xfc\xd1\xbe\x13\x74\xd6\x1c\xcf\x11\x4f\xd6\x28\xe1\xed\xe2\xd1\x3f\x11\xa9\x4d\xfc\x6e\xa8\xee\x46\x17\xa9\x21\x6c\xf8\xa6\x37\x80\x95\x21\x3b\x51\xc1\x40\x11\x87\xf2\xed\x65\xeb\x53\x39\x57\xf3\xd6\xc1\x23\x51\xad\xeb\x2a\x97\xcb\x7c\x8c\x4d\x2f\x0f\x37\xfa\x79\xd4\x4c\xf8\x85\x76\x96\x47\x3e\xf7\xfc\xbd\xee\x9b\x9f\xe3\x15\xf4\xb1\xb7\xf6\x48\xf4\x7a\x0a\x0d\xdd\xeb\xcf\x3f\xaa\xdb\xc6\x63\xe3\x43\x1a\xc8\xa0\xbd\xeb\xf9\x56\x59\x8f\x7b\x4e\x8b\x56\xfb\xe0\x2f\x16\x4c\x84\xfe\x3f\xdf\x88\x9f\x60\xe8\xa1\x09\x7f\xd5\x0d\x70\x76\x2b\x07\x9b\xfd\x52\xa8\x8d\x28\x53\x11\xfc\x5b\x9e\x21\xbe\xd5\xae\xc0\x1f\x7f\xf4\x59\x70\x9d\xd7\xfa\xce\x95\x6e\x6f\xec\x73\xc7\xf3\xcc\xad\x71\x0f\x2f\x92\xd5\x48\xb3\x25\xbf\xa8\x3b\x65\xf5\x9a\x87\x5a\xcc\xa0\x66\xfa\x48\xf4\x5b\x1b\xfe\xb8\x7d\xaf\x88\x43\xf6\x99\xde\xbb\x22\x09\xe6\x83\xc5\x14\x15\x3a\x7d\xf7\x88\x6c\xc7\xab\xcf\xe8\xd4\xbf\x48\x65\x3a\x12\xc5\x2f\xe9\x95\x2f\x94\x6a\xb9\x4f\x96\x6a\x76\x6f\x72\xe6\x0b\x50\x31\x5c\x3a\x5b\x9e\x11\xf8\xa7\x61\x50\xeb\xc4\xac\x5f\x0d\x51\xe4\x89\xff\x6c\x31\x70\xf3\xc8\x98\x21\xcc\xf9\xde\xcb\x8b\x23\x4d\x38\x76\x67\xde\xab\xff\xed\x70\x12\xe5\x2e\x13\xb8\x51\x80\x13\x90\x39\x95\xbb\xb5\x46\xba\xf8\xf5\x48\x74\x23\xe8\x52\x4e\x4e\xb6\x01\x14\xa2\xe6\x34\xf9\x86\x20\x6f\x5e\x59\x4a\xc4\x63\x3f\x63\xed\x1d\x9d\xfc\x34\x73\x50\xa8\xb1\xaf\xac\x2c\x35\x75\xb8\xac\xec\xe1\xbf\xe2\xb8\x91\x23\x4e\x80\x11\x72\x40\xf8\x91\x0b\x10\xa4\x09\xf5\xe5\x76\xbc\x0f\x0b\xef\x23\xbb\x6d\xb2\x38\x64\x60\x6e\x82\x3b\x72\x8a\x37\xc8\x3d\xe9\xbe\x56\xc0\x37\xac\x14\xe9\x91\x68\xab\xca\xb7\x77\xb6\x54\xd2\xd9\x56\xf3\x1d\x4a\x1d\x6c\xfd\xd5\x3e\x72\x8f\x83\x6b\x07\x3b\xb6\xfe\xbc\xff\xb9\x62\x12\x47\xfc\x31\xec\xe5\xc9\xff\x6c\xcc\xff\xda\x93\xc4\xca\xe9\xc9\xca\xca\x1e\x19\x9e\xce\x5d\x22\xca\x1c\xa4\xb5\x63\x17\x11\xf7\x53\x11\x99\x22\xf0\x91\x63\x90\xb8\xf2\x87\x60\x28\x71\x6c\xc0\xf6\x4b\x63\xf5\xc2\x91\xe8\x77\xbb\x78\x29\xda\x3e\xfc\xaf\x63\x49\x54\x35\x95\x3f\xaf\xb6\xb2\xe4\x5d\x36\xf9\x3a\xcf\x3a\x22\x26\xda\x5e\x27\x16\xac\xc9\x1b\xae\x88\x23\x8b\x83\x83\xa3\x84\x83\x39\x58\xf1\x85\xcb\xca\x86\xcb\xca\xc6\xca\xe3\x68\x9c\xf8\x7f\xaf\x28\x72\x31\xee\xd2\xea\xe0\x59\x5b\xb1\xdb\xf6\x8f\xf5\x44\x1e\x66\xcc\xf2\xd7\x6b\x0a\x41\x79\x64\x25\x5f\xf5\xf1\xa3\x3c\x69\x14\xff\xaf\x57\x54\xc0\x11\x95\x45\x5c\xf2\xd6\x28\x01\xa1\x12\x4e\x41\x08\x11\x59\x1c\x0f\xd9\x24\xe1\x85\x6f\x43\x7e\x9e\x4b\x97\x43\xce\x9e\xe4\xe9\xff\x7e\xb7\x4b\xf9\xee\xff\xfd\x92\x7a\xc8\x4b\xea\x37\xd0\x81\x9d\x86\xd7\xc5\xc9\x64\x83\xd2\x1c\xdf\xd6\x7f\x7e\xe7\x6c\x41\x5c\xc2\x97\xaf\x4a\xf2\xb3\xfd\xb6\xc9\x48\x48\xf4\xff\xfd\x92\x1e\xc8\x4b\xc6\xdd\xcd\xc1\x72\x8e\x5d\xab\xde\x2c\x5a\x0d\x9f\xd9\x0e\x7c\xf2\x96\x59\xc8\x54\x29\x4f\xd5\x5c\x2f\x6a\xe2\x9b\xc7\xab\x41\x97\xff\xfb\x25\x43\x90\x97\x24\xe4\x6f\xbb\xcf\xbb\xfa\x87\x92\xc0\x78\xb5\xda\x60\x5f\x5d\xdd\x96\x5e\x3c\x38\xb0\xb8\x84\xf0\xc3\x50\x6e\x74\x55\xa7\x24\xde\xff\xfd\x92\x19\xc8\x4b\x6e\x2e\xbc\x35\x0b\xd7\x02\x9f\x97\xed\xac\xe5\x11\x4e\x7f\x8a\x96\x2a\x4b\xd4\x7d\xfd\xa4\xf4\x25\x65\x95\x97\xa2\x1f\x94\x3d\xf5\x7f\xbf\x64\x0d\xf2\x92\x32\x39\x67\x1d\xdb\x04\xfe\x88\x53\x9d\xc4\x65\xe1\xdf\xf5\xaf\xc3\x85\x96\x13\x7a\x39\x83\xd3\x84\x75\xfd\x62\xe5\xf9\x14\x3f\xfe\x1f\x2f\x69\xf4\x9f\x75\x62\x04\xfe\x89\x08\x39\x26\xf8\xe8\x2f\xff\x9f\x95\x3d\x21\xdd\x78\x2f\xc3\xcc\x1d\x7f\x31\xf2\x47\x4f\x20\x91\x6e\x2d\x51\xf7\xd4\x1e\xbb\x60\x0a\x01\x83\x92\xc7\x29\xcf\x30\xfd\xff\x2c\x17\x21\x17\x76\x74\xd8\x2f\x15\xf4\x6b\x6c\xac\x9f\xa3\x4f\x12\x17\x56\xe8\x5c\x9c\x55\xf5\x69\xeb\xd9\x2d\x5c\x8e\x6a\x05\x6d\xa3\x92\x93\x9e\x9c\x08\x38\x1c\xf6\xb8\x5c\x84\x1c\xc1\xd1\x61\xaf\x60\x32\x39\x02\xf3\x7e\xf9\x65\x51\xd8\x91\x53\x9a\xca\x7f\x68\x48\xaf\x9a\x0f\xec\xfe\x1d\x31\xe2\xe6\x50\xd9\x31\xf2\x3e\xf8\x70\xd8\xe3\x72\x11\x72\xb8\x47\x87\xb5\x90\xa0\xd8\xfc\x91\xef\xa8\x8f\xa9\xf5\x99\x0b\x0d\x4a\xb6\x75\x7c\xe1\xf3\x7a\x34\x4a\xfa\x02\x75\xbd\x59\x9f\xe1\xad\x62\xe8\x70\xd8\xe3\x72\x88\x7b\xcb\xf2\x6c\x7c\x7c\x3a\x93\x52\x4d\x25\x70\x77\x51\xdb\x26\xb0\xaf\x9c\x7d\x3d\x82\xe3\xd3\xc8\x93\x7c\xb2\xcb\xaf\xb7\x80\x1f\xd7\x0e\x87\x3d\x2e\x17\x21\x87\x39\x3a\x6c\x7d\x90\xb3\xdf\xcf\x79\x9b\x29\xc7\xe6\xb7\xfd\x64\x51\xbc\x8d\x81\x7b\x84\xa7\xc3\x7c\x87\xd4\x1e\xdc\xb4\x65\xe7\xb7\x5d\xaa\x0d\x53\xfb\xcf\x72\x11\x72\x04\x61\x70\x94\x9c\x9e\xac\x2a\x0e\xae\xbe\x18\x0d\xce\x41\x31\x21\x4b\xeb\xc2\x7f\x56\x92\x11\x38\x38\x11\x72\x38\x61\x61\x46\xff\xd9\xf4\xfc\xbf\xcb\xd0\xcb\x74\x3c\x53\x43\xad\x43\x25\xd4\xa0\xd9\xea\x29\x09\x3d\x0d\x79\xc6\x69\xeb\xa8\x3b\x89\x4e\x32\xdc\xfb\x73\x2e\xb2\xc1\xb7\x0e\x6f\xd5\x71\x39\x44\x19\xf2\xb9\xc4\x7b\x72\x69\x08\xff\xa2\x22\x93\xf2\xf1\x70\xb9\x5b\xb1\xcd\x42\xd6\xcc\x55\xfc\x88\x2b\xe0\xf3\x88\x21\xde\x8b\x98\xca\xc3\x61\x8f\xcb\x21\xca\xf0\x4d\xa1\xf7\x4e\xe0\x1b\x7e\x0d\xf7\x69\xb1\x9f\x4c\xc5\xc1\xb5\x41\x8f\xbf\x70\x13\x5e\xa0\x22\xcb\x35\x63\x50\x7d\xd7\x47\xcb\x7a\x38\xec\x71\x39\x44\x19\xea\x0b\x24\xe7\x4f\xfe\x12\xf0\xbf\xa4\x41\xa4\xf3\x2b\x3d\xe9\xd7\x83\xf1\x1c\xcd\x08\xff\xd0\xbe\x0d\xf9\x01\x96\x1b\xce\x85\x6c\x87\xc3\x1e\x97\x43\xdc\x5b\xde\xed\x77\x21\xf5\x06\x17\x97\x72\xb2\xe1\x56\x11\x4d\x2f\xd2\x73\xcc\x2a\xd1\x05\xa6\xcd\xbf\x77\x00\x0e\x39\xb7\x7b\xae\x33\x87\xc3\x1e\x97\x43\x94\xe1\x2d\x62\xa6\xbb\x51\xa9\x6e\x6a\x99\x5a\xa9\x73\x86\x31\xb6\x03\xd7\x49\xe8\xfa\xbc\x75\x8a\xfa\x5f\x38\x77\xf4\xe7\xa9\xbb\x99\x86\x69\xfc\x67\xb9\xff\x2e\xc3\xff\x7a\xc6\xff\x7f\x14\xa2\xd1\x7f\xf6\x14\xfe\xdf\x95\x45\x81\xa1\x12\xcc\x30\xed\xda\x8d\x81\x4d\x97\x93\xd4\xb8\xa3\x86\xaa\x34\xa8\xaf\xd5\xe8\x5d\x78\x96\xab\x13\x73\xbb\x04\xdf\xe1\xf0\xd3\x1f\x97\x43\x54\xd6\xc2\x76\x2a\xf4\xd2\x3b\xff\x5d\x6a\x4d\x4f\xb9\xd9\x83\xb7\x86\xbe\x39\xcb\x74\x3c\x86\xbb\xc4\x2d\xca\xf9\xb4\x77\xfd\xf3\xff\xe7\xa6\x1e\x97\x43\x54\x16\xf1\x5d\xf7\xc8\xef\xbf\x22\x5e\xeb\xb5\xcc\xb3\x28\xbc\xf9\xb3\xf0\xe8\xe7\xb3\x02\x56\x2f\x3b\xa6\xf7\xe7\xd4\x7e\x51\x25\xb8\x9f\x3d\x1c\xf6\xb8\x1c\xa2\xb2\x92\x70\xde\x54\xfe\x2d\xb5\xb7\xf9\x9b\x41\x62\x78\x7a\x47\xf4\x9a\xe2\x29\xca\x3f\x59\x77\x5e\xbc\x74\x2f\x25\x0f\xcb\x9d\xd1\x7f\x7d\x38\xec\x71\x39\xc4\xbd\x7d\x70\x53\x4e\xae\xad\xa5\xc9\x71\x2e\x9d\x79\x67\x6b\x36\xe5\xd9\xcb\x13\xa2\x1b\x2f\x24\xcb\xe5\xf0\x2c\xf7\x37\x64\x5a\x46\xa8\x0e\x87\x3d\x2e\x87\xa8\xac\x8b\xa5\x78\x5a\xb6\x72\xfd\xd7\x9b\x06\xcf\x56\x65\xe6\x3b\x76\x17\xeb\x98\x4d\x4f\xca\x46\x77\x89\xfd\xce\x7c\x16\xc4\x7f\xd9\x20\xec\xf2\x7f\x96\xfb\xef\xca\xfa\xef\xb5\xdc\xf1\xa5\x75\xdc\x6a\xeb\x7f\x97\x96\x7b\x31\xa7\x1d\xa4\x3e\x97\x21\x5a\x7f\x5d\xdf\xac\x00\x87\xb4\x80\xa4\xe7\x0c\xfb\x42\x16\x7e\xed\x4c\x5b\xd6\x3b\x49\x9d\xe8\xc3\x8f\x7f\x5c\x0e\x51\x5a\xdd\x13\x4b\x6a\x3a\x11\x29\xeb\x6f\x19\xe3\x27\xe3\x75\x2b\x33\xbd\x5d\x7c\x28\xe7\x1b\x5d\x47\xd8\x7c\x2d\x9f\x0b\x32\x77\x0b\x1d\x0e\x7b\x5c\x0e\x51\x5a\x35\x67\x92\xe3\x32\x62\xc5\xf4\x8b\xf4\xee\x2f\x79\x5f\xb8\x10\x3d\x77\xde\x65\x97\xa6\x78\x44\x69\x91\x96\xfa\x36\xd0\xb9\xde\x76\x38\xec\x71\x39\x44\x69\x3d\xce\xf1\xb5\x8e\x11\x6b\x50\x7e\x29\x40\xa5\xbd\x9a\x92\x19\x5b\xfa\xa8\x70\x64\xd9\x4a\xf6\xba\xa7\xf9\xf7\x00\xd1\x07\x0e\xff\x33\xc5\x1e\x97\x43\xdc\x5b\xe5\xd4\xca\x1e\xf9\x6f\x15\xf9\xe5\x8c\x3e\x1a\x16\x5c\x19\x83\xaf\x1e\x7c\x66\x28\x9a\x71\xc7\x3d\xa1\x6b\x34\x80\xd9\x72\xa1\x3b\x1c\xf6\xb8\x1c\xa2\xb4\x9e\xa8\x8b\x34\xdd\xad\xfc\x74\xc9\x7f\x24\x21\x8a\x57\xc5\x1f\x7f\xab\xe2\x45\xc3\x7d\x7b\xdf\x80\xda\xfe\x88\x75\x7f\xbc\x7b\xb8\x87\xa5\x75\x5c\xee\xb0\xb4\xf4\xfe\xa3\xd2\x3a\x6e\x55\xfd\xbf\x4b\xab\x3e\x8a\xed\x76\xf6\xed\x99\x0f\xad\x60\xe9\xda\x85\x6b\xb1\x54\xa9\x21\x38\x1b\x5a\x0e\xba\xd1\x1e\xb9\x65\x7e\x32\x6b\x6f\x1a\x0f\x3f\xfe\x71\x39\x44\x69\xb9\x78\x36\xed\xd6\x65\xe9\xcf\x86\x74\x6c\x0b\x17\xbe\x55\x49\x1d\xac\xd7\xff\xf1\xf2\x1a\x01\x35\x79\xec\xe9\xf3\x76\x89\x0e\x93\x87\xc3\x1e\x97\x43\x94\xd6\xa3\xb6\xdf\xa9\x56\x18\xe1\xf2\x5e\xf0\xaa\xb2\x43\x5a\xbf\x04\xe7\x93\x30\x0b\x3f\x76\x3b\xa6\xf7\x52\xbe\x78\xa3\x22\x2a\xe6\x87\xc3\x1e\x97\x43\x94\x16\xa3\xa8\x4d\x84\x3e\x71\xca\x0b\x1d\xac\xc4\x67\x16\x5e\x6e\x67\x31\xf2\x97\x95\x9d\xbd\x9e\x54\x44\xea\x58\x0a\xf2\x64\x22\x81\xc3\x61\x8f\xcb\x21\xee\x2d\xe7\x26\x3f\x28\xf2\xe8\xdb\x8d\x55\xf3\x61\x25\x8f\xd6\x8d\x08\x1e\x12\xa6\x07\x9c\x1b\xef\x3d\x99\xcf\xee\x97\x6a\x69\xac\xfe\xcf\x13\xe1\xb8\x1c\xa2\xb4\x12\x8c\xee\xe2\x18\xdf\x4a\xae\xac\xa2\x0f\xb3\xea\x1d\x90\xa6\x24\xa1\xd3\xdb\x57\x67\x68\xe7\x4d\xfd\x72\x7d\x44\x04\xf8\x25\x7f\x58\x5a\xc7\xe5\x0e\x4b\xcb\xe3\x3f\x2a\xad\xe3\x76\x4f\xff\xbb\xb4\xcc\xa1\x1f\x37\x55\xe2\xee\xbb\x2f\x71\xea\xb3\x71\x99\x29\x4b\x31\xc7\x2c\xfc\x8d\x20\x7e\x6f\xf4\xfa\xa1\xc0\x3d\xc3\x53\xb7\x2f\x1d\x7e\xfc\xe3\x72\x88\xd2\x62\xb5\xc1\xa6\x85\xb0\x0c\x97\x1b\xfc\x30\xbe\x13\xae\x5e\x7a\x8b\xe1\xed\xad\x84\xaa\x67\x27\x2d\x23\x66\xae\x4a\x2e\x77\x6d\x48\x1e\x0e\x7b\x5c\x0e\x51\x5a\x7b\xfb\x42\x44\xa2\x84\xc9\xc5\x83\x44\xbb\x7b\xef\x76\xa3\xe7\x83\x1d\x65\xc0\xfb\x2f\xaf\x6a\x28\xf3\xda\xb1\x42\x19\x5b\xb8\x87\xc3\x1e\x97\x43\x94\xd6\xf9\xbd\xb9\xb6\x0f\x9a\x27\x0b\xc2\x39\x5b\x17\xdd\x66\xe9\x23\xa8\x36\x54\xa4\xfc\xcb\x87\x1c\xfa\x4e\x36\xff\xff\x58\x7b\xeb\xa8\x20\x9e\xbf\xef\x9b\x4e\x01\x41\x42\xba\x45\x1a\x41\x1a\x94\x06\x41\x01\x91\x46\x69\x04\x41\xe9\x50\x42\x09\xe9\x92\xee\x92\x10\x94\x92\x90\x90\x94\x10\x44\x90\x90\x06\x51\x01\x69\x90\x4e\xe1\x39\xf7\x7d\x7d\x77\xef\xef\xb5\xfc\xce\x33\x9c\xe3\xef\xff\xd7\xf9\xec\xd9\x39\xaf\xd9\x9d\x99\x7d\xcf\x2c\x26\xcb\xdd\x9e\x20\xa8\x2c\x88\x43\xb4\x6d\xb7\xc4\x96\x11\x8a\x13\xf6\x0d\xae\x19\x75\xf2\x24\x01\xd3\x99\xed\xe7\x47\xe1\x0f\xf7\xb2\x34\x88\x92\xbf\x57\x47\x89\xc4\xaa\x42\x65\x41\x1c\x42\xad\xf3\x42\xbd\xeb\x43\xc6\xbc\x82\xa6\xa3\x53\x3e\x74\x0c\x62\x06\xc2\x95\x81\xf2\x51\x37\xf7\x56\xb9\x9d\x4c\x26\x62\xc6\x12\x37\x20\xb5\x40\x1c\xa4\x96\xe7\x99\xd4\x02\xcd\x92\x4f\xab\x75\x27\x67\xa2\x24\x4a\xe7\xd1\xc8\x79\xfc\x3b\x14\x8f\xd8\x3c\x24\x48\x9a\x4d\x3a\x6d\x79\x0b\x3f\x5d\x9a\xb1\x4e\x70\x16\xb1\xa8\x84\x6e\x1f\xc4\x21\xd4\x22\xc3\x24\xbc\x5d\x14\x5d\x8a\x2a\x17\x78\x68\x4d\x69\x3a\xfa\x65\x77\xf0\x4e\x1c\x11\x8a\x88\x98\xc0\xdb\x2b\x7a\xf2\xfd\x87\xb0\x5a\x20\x0e\xa1\x16\x45\xc3\x27\x1b\x1e\x91\x80\xd6\x4f\x22\x24\xfc\x0f\x2d\x7f\x35\x3d\xfa\xbc\xf0\x43\x49\x57\x6f\x80\xac\x83\xfb\x02\x89\x77\x5e\x16\x54\x16\xc4\x21\xd4\xa2\x4e\x58\xe0\x39\x96\x7e\xe3\xe7\xf6\x15\x2d\x28\x8d\xb8\xea\x17\x6b\x61\x7b\x8c\xde\xab\x22\xce\x35\x71\x6d\xd9\x5d\x4d\xf6\x9b\x50\x59\x10\x87\x68\x5b\x36\xfe\xf4\x7b\x6b\x66\x17\x78\x22\xc8\x4b\xf4\x59\xe3\x04\x79\x28\xee\x74\x86\x27\x7e\x33\x63\xec\xe8\x18\x4e\xdc\x3c\x52\xba\x05\x95\x05\x71\x08\xb5\x02\x16\x34\x17\xad\x94\x9b\xd1\x22\x57\xba\xef\xf4\x60\x34\xeb\x60\xff\xae\xb6\xb3\xd1\xcf\xe9\x2f\x89\x57\xd1\x9d\xd8\x24\xfc\x0c\xa9\x05\xe2\x20\xb5\x12\xcf\xa4\x16\x68\x35\xe4\x3f\x0c\xe3\x6d\xc7\x62\x52\x44\x3a\x33\xb1\x76\x18\x46\x70\x1b\x57\x12\x42\x06\x1c\x58\x5e\x85\xd6\x6d\x66\x5d\xd6\xad\xdd\xb1\xc6\xd7\x82\x87\xf1\x00\x0e\xa1\xd6\x5b\xef\xe4\xce\x1e\x3d\xe5\xba\x6e\xdc\x47\x79\xa3\x2e\xf7\x07\x6f\xf2\x3d\x1d\x5a\x2f\xae\xba\xfa\xa1\xe9\xa7\x8c\xd0\xa4\xff\x06\x54\x16\xc4\x21\xd4\x1a\xbf\xb7\x8a\xab\xd0\xf1\xca\x19\x4d\x5b\x94\xdc\x6b\xfa\xba\x70\x62\x1c\xb1\x45\x60\xc4\xba\xa9\xc3\xa4\x79\xb3\x18\x79\x34\x1b\x54\x16\xc4\x21\xd4\xca\x3c\x19\x46\xc5\x4a\x7a\xf4\xeb\xdc\xb3\x2f\x73\xbf\x0a\x44\x09\xa6\x45\x63\xb5\xae\xcd\xff\x74\x2c\xde\x3f\x8c\x2a\x22\x95\x31\x85\xca\x82\x38\x44\xdb\x36\x1a\x6d\x49\x9a\x85\x2a\x65\x32\xc4\xd0\x5b\xf4\x34\x61\x3a\x64\x87\x19\xc8\x74\x6b\x0e\x6f\x75\xcb\x70\x9c\x2b\xae\x73\x09\x81\xca\x82\x38\x84\x5a\xc6\x27\x41\xea\xdd\x32\x98\xc3\x77\x72\x28\x9e\x69\x10\x4d\x3d\x58\x2f\xb4\xf2\x56\xc1\x33\x37\x0d\x61\xa6\x4e\xcf\xe3\xe0\x82\xd5\x02\x71\x90\x5a\x15\xff\xff\x6a\x3d\x47\x3f\xdb\x62\xb7\x9f\x34\xb6\xb7\x5f\xb0\x1c\x4a\x2f\x72\x89\xce\xf2\x62\xe2\x36\x9b\x59\x8f\xba\xe9\xb2\x84\x84\xe9\x98\xf8\x97\x6b\x25\x4f\xc4\xa8\xb5\xc8\xfe\xdc\x77\xe7\x56\x49\x75\x0b\xd0\xfd\xfb\x55\xc1\x09\xe4\x25\xb9\x48\x71\x18\xa9\x23\x8f\xbe\x67\x38\x59\x44\x89\x31\x08\x50\xc9\x24\x58\xb4\x25\x3f\xbf\xf2\x7d\xf7\xe7\xc4\x55\xf4\xed\x55\xf7\xbf\xbf\xe4\x1e\xf2\x92\x33\x39\xcf\xd8\xa9\x27\xf7\x03\xa6\x55\xa8\x74\x64\x84\x0d\xe2\x76\x98\xd5\xa6\x68\x7e\x9b\x29\x24\xbe\xf3\xa5\xbc\xa6\xfb\xf4\xe3\x7f\x67\x21\x12\xd4\x96\xa7\x3b\x38\x1f\x2e\x89\xe4\x79\x9b\xc3\xd8\xab\x5d\x54\x8b\xe3\xce\x6c\x9f\xbf\x61\xea\x98\x25\x88\xd5\x93\xba\x8e\x85\x2d\x0c\x6f\x58\x3c\x84\x97\x6a\x00\x1c\xb2\x83\xb3\x46\x10\xe6\x5d\xd7\xbc\x79\xdf\xa0\xc6\x54\x3c\xdf\x20\xc6\xa4\xbd\xe2\x22\x53\x52\xc2\xb3\xe1\x75\xe9\xf6\xbd\xb8\xc7\x6e\x70\x07\x07\x70\x88\x0e\x6e\xad\xf6\xb2\x8a\xd5\x47\x91\x67\x52\x5c\x66\x36\x39\xe2\x4f\xb7\x87\xe9\x1f\x0f\xf5\x4b\xb2\xfc\x2f\xf2\x78\xca\xf4\x48\xe8\xf5\xa1\xb2\x20\x0e\xd1\xc1\xc5\x76\xf5\x23\x6e\x15\x08\xb7\xb6\x6a\x5e\xa5\x88\xd1\x69\x6e\x92\x0a\xfb\xf9\xc3\x70\x79\xa1\xcd\x55\xa2\x42\xbd\x3c\x36\x8f\x01\x2a\x0b\xe2\x10\x6d\x9b\x2d\x69\x30\xe0\xb1\xe2\x57\x94\x51\x51\xbf\xfa\xf0\xc5\x9b\x6f\xc3\xbb\x61\x3d\x26\x47\x9a\x11\xc3\xc7\x64\x72\x7f\x2c\x8e\xe1\x45\x5e\x10\x87\xe8\xe0\x4e\x86\x9b\x1c\xe9\x62\x9e\x95\x4a\x61\xd6\xa4\xad\xb1\xa2\x2f\xab\x48\x0e\x09\x79\xad\xe2\x73\x65\x8c\xe8\x32\xa7\xeb\xb4\x92\xa0\x0e\x0e\xe2\xa0\x0e\xde\x7b\xa6\x77\x07\xa8\xcf\x9c\x56\x2b\x41\x82\xce\x36\x67\x07\xcb\x8d\xa0\x6e\x6f\x52\x6b\x7a\xc9\x53\xfb\x4f\xfd\xc3\xab\xb6\x66\x38\x5a\x1f\xf0\xa4\xd2\x6e\x5f\x71\x87\x6e\x1f\xc4\x21\xd4\x12\xf5\xe0\x3f\xf1\x4e\x4d\x89\xcd\xac\xa8\x4e\x2e\xf7\x12\x4c\x11\xa3\x9f\x6a\x2f\xa8\x5f\x5a\xcc\xbb\x5b\xf0\x1d\xdb\xf8\xe8\x18\x2a\x0b\xe2\x10\x6a\xa1\x37\x8c\x12\x12\xa6\xdb\xb0\xaf\x1e\x94\x54\xbe\xcf\xec\x7f\x47\xc5\xe2\xf9\xf2\x0b\xed\xe3\x9a\x1c\xf1\x81\x51\x7e\xd1\xd4\x3f\x50\x59\x10\x87\x50\x6b\x4f\x11\xad\xb6\xe7\xa9\xf3\x49\x99\xe4\xe7\xcb\x45\xf1\x35\x4d\x64\xf5\x96\xe8\x4a\x77\x2e\x63\x19\x9b\xf8\xd4\x35\x1e\x5e\xb9\x0d\x95\x05\x71\x88\xb6\x95\xa9\x27\x13\x7f\x9e\xa1\x2a\x5e\x58\xea\x43\x73\x34\x74\xf9\xe3\xee\x02\x5d\xc1\x6b\xdf\x04\x74\x06\x76\xf3\xf0\x06\x5c\xb4\x2e\xa8\x2c\x88\x43\xa8\x95\x1d\x5b\xd7\x70\x67\x93\x79\xc8\x72\xcf\xd5\xa4\x22\xd8\xbb\xdb\x2e\x3b\xc6\x2a\xee\x0a\xfb\x91\xf5\x73\x92\xa8\xfb\x4a\x2f\xa6\x20\xb5\x40\x1c\xa4\xd6\xc4\x99\xd4\x02\x3d\x1b\x4f\xab\xf5\xdb\x6e\xb7\xe5\xa9\x72\x82\x86\x8f\x49\xdf\x86\x2b\x77\x6b\xaa\x95\x81\xa6\xea\xa5\xc9\xc9\x03\xfb\xd0\xa7\xbf\x6f\xc6\x36\x24\x42\xb7\x0f\xe2\x10\x6a\x11\x88\x5f\x93\x68\xc3\xb2\x38\x8a\xba\x42\xae\xf0\x3a\xf9\xd2\x64\xaf\x70\x3b\x91\xce\xd5\xdd\x49\xf9\xae\x9d\x76\x1b\xd7\xd8\x1c\xa8\x2c\x88\x43\xa8\xb5\xc8\x7f\xc0\x35\xcc\xd2\x85\x19\x99\xa9\x39\x96\x11\xbf\x9b\x4e\xae\x46\x11\xda\xc8\x6f\xb1\xcc\xf2\xb5\x1d\xd5\x33\x48\x19\xfe\x7c\x02\xe2\x10\x6a\x49\xe0\x63\x9c\x2f\xfa\xc2\x11\x27\xd8\x99\x36\xb7\x39\x6d\x41\xd8\x91\x15\x9c\x14\x2d\xb3\xa9\x12\x3b\xea\x92\x3b\xa2\xf8\xf3\x3e\x54\x16\xc4\x21\xda\x76\x66\x43\xd7\xe0\xf0\x30\x74\x25\x95\xd5\x8f\xf7\xd0\x5d\x44\xbe\xba\x49\x5f\x3e\xc2\xf3\xee\x4b\x9a\xe1\x67\x07\x52\x82\x6f\xe1\x95\x25\x10\x87\x50\x6b\x24\x81\x4e\x8f\x5f\x8e\xef\x5d\xe4\xba\x59\xb3\x83\xc1\xbe\x6b\x5c\xa7\xcb\xce\xe7\x22\x74\xe5\xd4\x1a\x57\xd1\x35\xde\xcd\x9f\x90\x5a\x20\x0e\x52\x6b\xef\x4c\x6a\x81\xe2\x00\xa7\xd5\xd2\x75\xab\x64\x4c\x2e\xc3\x7b\x2e\xb0\x98\x9a\x5f\xbf\x4c\x78\x5c\xbb\xd7\xb5\x21\x1c\xf6\x3c\x49\x2c\xd0\x30\xee\xad\x85\xf2\x47\xe8\xf6\x41\x1c\x42\x2d\x5d\xb6\x42\x6d\xd7\x40\x41\xca\x49\xdc\xa8\x61\x09\x34\x4f\xd6\xf7\xe6\x4b\x8b\xd2\xb7\x0b\x17\x6e\xa7\xb0\x9b\x98\x33\xe6\xf0\xc2\x65\x01\x1c\x42\x2d\xea\xbd\x6b\xc7\x7e\xea\x21\xad\xfe\x0f\x05\x0f\x99\xbd\xb9\x1f\x0c\xcd\xbf\x5b\xb5\x51\x49\x4d\xc8\x0b\x1e\xe3\xb9\xb1\x73\xd3\x1e\x9e\xf5\x00\x38\x84\x5a\x34\x4a\x2f\xe7\x68\xe7\x6f\xa8\x3d\xec\xbf\x69\x96\x40\x3f\x2f\xaa\xbf\x2b\x70\x9e\xb9\x7a\xfd\x0b\xc3\x61\x46\x71\x06\x01\xaa\x38\x54\x16\xc4\x21\xda\xd6\xf2\x45\x4f\x9d\xd4\x39\xac\xc7\xca\x98\x07\x74\xf9\xf3\xc2\x6a\x91\xd5\x7f\x4c\x6b\xb0\x83\x30\x18\xaf\x7d\xd8\xc1\x4d\xd3\x2b\x83\xca\x82\x38\x84\x5a\x5f\x39\x97\x7a\x83\x50\x25\xcb\x2f\x65\x45\xde\xc9\xf0\x90\x8a\x95\xbe\xe8\xbe\x55\x27\xea\xd6\x35\x64\x2c\xfe\x8b\x0a\xfb\xa5\xbb\x37\xcf\xd9\xb8\xff\xab\x96\x8c\x33\x2a\x14\x0e\x01\x85\x50\xff\x1d\x51\x79\x34\xe4\x54\x7b\x67\x54\x44\xf8\xb7\xf7\x1d\xc5\x97\x61\x7d\x31\x7f\xa2\x2f\xbf\x7d\xe0\x13\x5f\x4b\xba\xf6\x3a\x9b\xfb\xc6\xc5\x7f\xe7\xc4\x9a\x6e\x0f\x69\x17\x3f\x0e\x10\xc9\x36\x15\x7d\x27\x76\xce\x5f\xb1\x73\x52\xa3\xe9\x77\xaf\xf7\x27\x0e\xf3\x5e\x59\x3a\x97\x96\x4d\x44\x44\x05\x54\xf9\x74\x44\x65\xfd\x04\xf7\x76\x6c\xbb\xff\x65\xd2\xb6\xc5\x6b\xb3\x56\x27\x4e\xa3\x98\xd6\x94\x1e\x98\x3d\xaa\x72\x6c\xc3\x93\xec\x36\x7e\xbf\xfe\x85\x7a\x24\x4c\x3c\xf2\x6a\xd0\xce\x59\x10\x92\x78\x22\xa1\xe2\x28\x11\xd2\xf7\x91\x6e\x42\x4e\xc4\xc0\x38\x97\xfa\x9a\x8a\xcd\xe4\x81\x77\x13\xf6\xd9\x6a\xfe\x4f\x44\x45\x46\x9d\xf4\x7f\x0f\x7b\xbf\xc5\x29\xa9\x87\x5d\x6b\xac\x5a\xd5\xe2\x21\x56\x25\xfe\xfe\xfa\x5d\x6f\x24\xd9\xdb\xc6\x17\x99\x3f\x24\x96\xfa\xb2\x66\x56\x4f\xfe\x3a\xa3\x22\x85\xcc\xa8\x64\x88\x8a\x14\x3f\x1e\xe0\x30\xb2\xdb\xd2\x76\xcc\xf4\xec\x20\xb8\xf7\x69\x59\xc4\x22\x99\x71\x7d\x2a\x2d\xd2\x68\x50\x5b\x96\xfc\xaf\xc7\xf6\x52\xa7\x32\x2a\x3b\x0c\x0c\xe7\x05\x05\xa8\xfa\x64\x2f\x0b\xb9\x9b\xea\x52\xde\x22\x53\xb9\xb7\x9f\x17\x3f\xe9\x3c\xc0\x33\xf7\xb8\x04\xe3\x30\xff\xef\x2f\x79\x2a\xa3\x22\xb5\x92\x29\xf6\x2b\xe3\x3b\xf1\xa7\xc3\x2a\x9d\x38\x0e\x76\x7b\x1c\x61\x33\xcc\xbb\x55\x2b\x4f\xce\x1b\x25\xbc\xf0\xc5\x71\xb8\xf3\xf7\x97\x3c\x95\x51\xd9\xbf\x4e\x80\x89\x9d\x25\x30\x5e\xcd\xee\x2f\xf5\xe6\x77\x37\xba\x67\xec\x25\x31\xa5\x24\xdf\x24\xfe\x7d\xd9\xe1\xf5\x75\xdf\xb9\xbf\xbf\xe4\xa9\x8c\x4a\xc7\x68\xc2\xc0\x75\xa2\x0c\xf7\xdf\x74\x5a\x35\xd9\x51\x79\x65\xcd\x0c\x85\xbe\xfa\x5b\xdf\xef\xbd\x8c\x5b\x10\x0f\xdd\xe3\xbd\xf1\xf7\x97\x3c\x95\x51\xb9\x8e\xa3\x10\xb2\x2b\x61\xee\xc7\x26\xb5\x81\x57\x9d\x32\x97\x5a\xb2\x13\x16\xeb\x7f\xed\xdb\x80\xac\xc2\x35\xce\x79\xae\xf9\x2f\x7f\x7f\xc9\x53\x19\x95\xc7\xb2\x6b\x31\x68\xc6\x81\xc4\x37\xb1\x3d\xde\x6a\x4b\x77\x62\xcb\x4e\x57\x0a\xb5\x12\x96\xa6\xcd\x32\xbb\x05\xb1\xe1\xef\xcf\xff\x77\xa6\x86\xa0\x9e\x78\xfa\x4d\x58\x6e\xa9\x4b\x17\xf4\x41\x5d\x56\x4d\x6c\xf9\xed\xd4\x7b\xb1\xf3\x5b\x8c\xf6\xee\x52\x05\xf7\x79\x1f\x89\xbf\xfa\x34\xc3\x91\x9c\x0b\x3d\xad\x41\x1c\xe2\x4d\x98\x90\xb3\xf4\xc6\xce\xe1\x87\xc3\xf3\x68\x19\x11\xea\x5f\x9d\xa2\x72\x35\x5f\x06\xa6\x6f\xa1\xd8\x53\x7d\xf0\x6d\xf3\xfd\x60\x05\x7f\x67\x03\x71\x88\x37\xe1\x17\x6d\xcd\xd7\xb1\x13\xee\xbf\x3d\xe8\x26\xbf\x8d\x9e\x9b\x36\xb2\x8f\xb3\x3b\x2a\x4f\xf6\xc2\xf7\xc1\xe3\x35\xb1\x14\xa2\x2c\x86\xca\x82\x38\xc4\x9b\xf0\x3c\xdf\xb7\x01\xd2\x38\x43\x32\xf6\xf5\x37\x47\xaf\x8b\x5f\x32\x93\x5c\xd4\x1b\x53\x1c\x98\xc2\x20\xb4\x3e\xc9\x91\x71\xbb\x06\xcf\x38\x41\x9c\x9f\xb4\xd4\xbf\xcb\xae\x30\x7c\xb8\x9c\x63\x51\x8e\x73\xd3\x28\xfd\xc6\x79\x1e\xf1\xcb\xab\x1b\x0b\xb3\x99\x99\xfd\xdf\x4b\x84\x71\x99\xae\xa0\xfd\x8c\x84\xca\x82\x38\x3f\x69\xd4\xff\x35\xdb\x28\x5e\x2b\x6e\xa1\x28\x4c\x92\x75\xa2\x37\xa3\xa3\xa1\xfe\x63\xcf\xe2\x5e\x3e\x45\x85\x3b\x9b\x48\xfb\xb0\xda\x9a\xf6\x57\x94\xb7\xca\xd9\x38\x3f\x69\x6f\x6f\x1f\xff\xff\xf3\x34\x07\x0f\xb1\x40\x0f\xdc\xd3\x62\x91\x7d\x67\x42\x77\x79\x34\x62\x3a\xe6\xcf\x37\xf6\xcc\xb6\x7e\x46\x79\xcc\xc1\xf3\xb9\x33\x1e\x2b\x19\xff\xc4\x47\xca\xf1\xcb\x34\xf0\xc2\x32\x80\x43\x88\x25\xd5\x70\x20\xb8\xa8\xfd\xb1\xac\x9d\x48\x17\x5b\xcc\x59\x0d\xbd\xe0\x6a\x80\x74\xa5\x13\x2b\xf3\x3b\xc3\x4e\x3c\x7a\xfd\x90\x15\xa8\x2c\x88\x43\x88\x55\x17\xe0\xf8\x3b\xa0\xee\x01\xcf\x48\x5e\x63\x73\x02\x79\x93\x81\x8c\xc4\x9d\x37\xd7\x05\x67\xd1\x6f\x92\x5d\xa7\x26\xe4\x89\xef\x83\xca\x82\x38\x84\x58\x26\x5f\x9f\x62\x76\x49\x07\xe7\x90\xf1\x7e\xf3\xa6\x4c\xee\x7d\x7d\xb5\x51\x62\xf8\x39\x03\x29\xcd\x0e\xe1\x62\xa9\x83\x20\x6e\x38\x54\x16\xc4\x21\xc4\xa2\xf8\x18\xf4\xc1\x49\xcc\x61\x59\xe0\x56\x35\x7b\x33\xe9\xcf\x17\x3a\x36\x33\xf7\xb5\xdc\xaf\x64\xb3\x5b\x1d\x93\xd5\x84\x1f\xc3\x93\x02\x10\x87\x10\xab\xdc\x0d\x9f\x5c\x73\x43\xb5\x53\xff\x64\x65\x62\x8f\xfa\x98\xd6\xcf\x51\x75\x2a\xc1\x7d\xf7\x88\x7d\x94\xab\x5f\x50\xb6\xf2\x13\x94\x3a\x01\x71\xff\x23\xd6\xff\x7d\x6b\x9f\x61\xf0\x0e\x78\xaf\x9e\x36\x6b\x49\x93\x8e\x55\xf3\x1c\x16\x89\x2b\x59\x44\x03\x5d\x91\xa7\xbb\x64\x60\x7d\x55\xac\x2e\xdd\x7d\xdc\x9c\xe8\x7d\x6a\xf9\xfd\x19\x38\x1e\x02\xe0\x10\x66\x75\x10\x3b\xf9\x4c\xdf\xd8\xa9\x90\xb1\xbf\x6e\xf8\x9b\x88\xec\xa0\x3e\x10\xf3\x31\xb1\xdf\x71\x6a\xff\x27\xc9\x87\x66\x7d\x19\x8f\xa0\xb2\x20\x0e\x61\x16\x6a\xab\x16\xca\x39\x9f\x56\x21\xf5\xa7\xd6\xcf\xb0\x6a\x3f\xa3\x58\xcb\xee\xa3\x4f\x2c\x5d\x13\x1f\xf1\x76\x8c\x78\x19\x98\x55\x02\x95\x05\x71\x08\xb3\x08\x75\xf9\xc6\x5d\x88\x75\x42\x86\x0f\x22\x3c\x16\x2e\x90\xca\x52\x19\x56\x90\xec\x7e\x59\x73\x50\x74\xc3\x29\xa5\x0a\xdc\x7d\x0a\x87\x59\x00\x1c\xc2\xac\xfd\x27\x0a\xed\xe2\x3f\x72\x49\x03\xf0\x64\x56\xb7\x7f\x5c\xbc\xaa\x33\x5d\x53\x8f\xa1\x47\x53\x21\x26\x21\x96\xf2\x9b\x9e\x98\x1a\x2a\x0b\xe2\x10\x66\xcd\x6a\xca\x68\x56\x90\x6d\x47\x5f\x3d\x52\x32\x6e\x4d\x7e\x4d\x4f\xf2\x87\xce\x32\x45\x90\x4d\x6a\xf7\x91\x00\xc6\x9b\xe2\x5c\x54\x68\x5e\x08\xe2\xfe\xc7\xac\xff\x19\x9d\x81\xd5\x02\x8d\x9f\x4e\xab\x45\x1c\x23\x8d\xab\x56\xc8\xec\x7b\x3b\x8d\xa6\xd4\xae\x29\xea\xce\x56\x8a\xd3\x08\x61\x05\x89\x17\x06\xe9\x06\x0b\xa7\xa3\x10\xfc\x8d\x11\xc4\x21\xd4\x62\x3e\x09\x2a\x98\x18\x1a\xed\x7b\x69\x24\x71\x61\x83\x4f\x31\x51\x2c\x49\xec\x7e\xa0\x79\xd5\x47\x85\x4f\x5e\x28\x8c\x89\x63\xec\x70\x58\x11\xc0\x21\xd4\xca\xa7\x5a\x8b\x2c\x28\xe2\x5a\x8a\xb9\xf6\xed\xb1\x97\xba\x9e\x93\xec\x44\xcb\x92\x54\x12\x37\xf6\x07\x8a\xcb\x78\xd9\xdc\x55\xf0\x4a\x06\x88\x43\xa8\x55\x38\x9d\x70\xe0\x37\x3a\xa1\x58\xd1\x37\x74\x5c\x4a\xc1\x5f\xce\x41\x5c\xaf\x95\x7e\xf1\xfb\x64\x50\x0f\x3f\xd6\x1a\xcd\x5b\x58\x2d\x10\x87\x50\xeb\x4d\x32\x51\xd9\xb5\x59\x3b\x94\x0c\x9b\x64\x6b\x07\x21\xad\x77\xbc\x0f\x09\x46\xe7\xde\x5f\xf9\x4c\xba\xf7\xbb\x93\xfb\x31\x9b\x2e\x54\x16\xc4\x21\xd4\x62\xd6\x90\xb4\xb6\x8a\x53\x3d\xb7\xb0\xe8\x10\x3c\xd3\xda\xec\xd3\x72\xdd\xdc\x92\xef\xd6\x05\x02\x5a\x15\x9f\x1f\x2d\xe5\x5c\x0e\x90\x5a\x20\x0e\x52\xeb\x6c\xa9\x13\xd0\x38\xf9\xb4\x5a\xbc\x81\xac\xab\x19\x0a\x01\x7e\xa3\x9e\x94\x0a\xb1\x27\x8b\xf6\x8f\x2d\x23\x98\xe8\xf1\xae\xfd\x19\x42\xe5\xeb\x5d\xa2\xf3\xc8\x87\x93\x82\x00\x0e\xa1\x56\xbc\x50\x94\xc4\x64\xed\xe4\xf1\x02\xc1\x7a\xea\x8d\xd7\xd7\xd3\xd6\xed\x0b\x0d\xb0\x4b\x3f\x7f\x5d\x73\x56\x14\x9e\xde\x7d\x72\x1e\x2a\x0b\xe2\x10\x6a\xc5\xbd\x24\x2f\xfd\xf2\xd8\x68\xf3\xb5\x3b\x09\xbe\x9a\xc0\x9e\x62\xcd\xf4\xdc\x58\x07\xb6\xd5\xf3\x28\x96\x87\x6d\x12\xf4\x15\xbb\x50\x59\x10\x87\x50\x6b\xff\x73\x9a\x5a\x43\x69\x81\x38\x1e\xe9\xf1\xaf\xf7\x07\xfd\xcf\x35\xbe\x3b\x7c\x16\x72\xbb\xf2\x48\x21\x64\xd6\xc2\x7c\x93\x80\x14\x7e\xbc\x00\x38\x84\x5a\x0f\xeb\x4a\x50\x02\xe2\xda\x7b\x87\x9b\x6c\x92\xa5\x0f\xc2\x2f\x34\xcb\xd8\x49\x2e\x6c\x97\xc9\x2b\xe7\x59\x78\xe5\xbc\x8f\x84\x07\xb1\x20\x0e\xa1\xd6\x01\x9a\x67\x87\x6b\xf0\xc4\x98\x14\xf5\xb9\x07\x2b\xda\x58\x42\xf8\x93\x4d\x12\x0e\x27\xfc\xf8\x1a\x76\x0a\xbb\x43\x85\xeb\xa3\x90\x5a\x20\x0e\x52\xeb\x6c\xa9\x13\xd0\x7c\xe8\xb4\x5a\xdb\x6f\x5d\xe6\xf2\xe6\xaf\xe3\x05\xeb\xaa\xff\xc9\xd8\xa8\x16\x60\x54\xb9\x49\x57\x73\xf3\x4d\xb6\x09\xeb\x1d\x1b\x17\x39\xf5\xaf\xd0\xed\x83\x38\x84\x5a\x44\x7c\xbf\x8c\x68\x35\x1b\x72\xdb\x25\x69\x37\x4d\x94\x9d\xbe\x33\x29\xb8\x31\xd3\xa4\x4d\x47\x72\xec\xb4\x8a\xb0\x1f\xbe\x87\x1f\x86\x20\x0e\xa1\x56\xaf\xb5\x66\x34\x5f\x30\xb9\xcd\xc7\x73\x9b\x29\x0a\x8b\x92\x97\xbe\x31\xe9\x1e\xb4\x8b\x58\xd1\x0e\xf9\x3b\x87\xfd\x69\x12\x83\xc7\xf0\x20\x0e\xa1\xd6\xfa\x4b\xbd\x93\xad\x7c\x6d\xf1\xc3\xf0\xc0\x95\x17\x36\xb7\xbb\x15\xc5\x8c\x4a\xbf\x4a\x27\xb3\xd2\x76\x1c\xe9\x8c\xbe\x91\x7b\x09\x95\x05\x71\x08\xb5\xb8\x2d\x1c\xf1\x2e\xa8\xe6\x31\xc8\xea\xb1\x70\x8d\x6c\xbb\xa9\x5f\x32\x3e\x3c\xa6\xc8\xda\xa9\x90\x5e\x5b\xd1\x6c\x65\xd5\xf4\x85\xca\x82\x38\x84\x5a\x73\x6b\x04\x68\x73\x2f\xee\x57\x07\xf3\x28\x99\x89\xaa\x62\xc8\x04\xe1\x1a\x15\x0d\x2b\x56\x33\x3f\xc1\xc5\x22\x7c\xf5\xc9\xe0\x03\xa4\x16\x88\x83\xd4\x3a\x5b\xea\x04\x34\xef\x3d\xad\x96\x09\x89\xf3\x6b\x01\xa5\xa7\x32\x49\xfb\xb7\x13\x0b\x6a\x5b\x1a\x2d\xb8\xcd\x02\x36\x50\x28\x7c\x37\x8f\xbf\xcb\x8f\xdb\x1d\xc3\x5f\xc5\x41\x1c\x42\xad\x28\x59\x51\x2c\x76\xd3\xdd\x2d\x05\x1d\x47\x76\x34\x6c\xa2\xab\x97\x83\xa4\x43\x49\x0b\x2f\x59\x0d\x85\x85\x44\x2c\x70\x10\x54\x40\x65\x41\x1c\x42\x2d\xd6\x05\x61\xb1\xed\xcb\x33\xd6\xf7\xd2\x3f\x85\xd3\x27\x95\xee\xdc\x95\xaf\x30\xa8\x75\x29\xa6\x75\x60\x2c\xbe\x7e\x28\x9d\x03\x8f\x8b\x41\x1c\x42\xad\x89\xd8\x9d\xef\xda\x51\xcf\x43\x5f\x2e\x0a\x2b\x51\x7a\x04\x64\xf1\x0c\x35\x25\x5c\x17\xec\x4b\xf5\xc8\xb2\x88\xe2\x21\x89\x85\x97\xf6\x41\x1c\x42\x2d\x3f\x19\x59\x3e\xb4\x94\x02\xa7\xe1\xe9\xe4\x72\xc9\x16\x6d\x9d\x02\x32\x4c\x27\xf2\x83\x9a\x67\x0e\xb4\x12\x86\xf9\x3b\x76\xf0\x0c\x09\xc4\x21\xd4\x3a\x6a\x2c\x44\xb1\xbc\x87\x82\x29\xc7\xb5\xa4\xdf\x74\xeb\x20\x5b\x57\x9a\xde\x37\xe1\xeb\xd8\x76\x06\x39\x81\x6a\xb9\x8f\x9a\x11\xa4\x16\x88\x83\xd4\x3a\x5b\xea\x04\xb4\xbe\xf1\x1f\xb2\x72\xdc\xdf\x6e\xca\x09\xdb\x1e\x2f\x3c\xc1\x60\xb9\xd1\xb0\x98\x79\x29\xe1\xd9\xe0\x36\x07\x0a\xcb\x9f\x76\xbe\x21\xad\x27\x3f\xe1\x44\x3e\x88\x43\xa8\x35\xfa\x9e\xac\x7e\x83\xb9\x8d\x49\xe1\x79\x7e\x99\xa6\x4e\xa7\xb9\x4e\xc6\x7c\xd7\xa0\xaa\xed\x25\x45\x47\x3d\x35\xe5\x3e\x59\x39\xa8\x2c\x88\x43\xa8\xd5\x3c\x33\xf9\x81\x5a\xa7\xb0\xe3\x92\xec\x78\x0c\x7a\x95\x69\x74\x5b\x37\x1f\x27\xbb\x2a\xab\xab\x9d\x8e\xe9\xc5\xa5\x8a\x07\x6a\x50\x59\x10\x87\x50\x8b\xf2\xf6\x53\x79\x0d\x6a\x43\x46\x81\xeb\xfd\xd5\xde\xc7\xd8\x66\x3f\x57\xd1\x3b\xb0\xb0\xae\x4f\xd6\x4a\xe6\x79\x8f\x14\xc5\x66\x43\x65\x41\x1c\x42\xad\x9b\x3f\x66\x6e\x4f\xdc\x9d\xd4\xd9\xe2\x8a\x20\x17\x3e\xa8\x60\xfc\x76\x2e\x91\x2a\xb3\x32\xbd\x6f\x82\x7a\x8e\x6f\x99\x1f\x7f\x1a\x2a\x0b\xe2\x10\x6a\xcd\x2b\x1c\xed\x84\x33\xbf\xc0\xe5\x18\x78\xd4\x5c\xde\xf4\x9d\xb9\xb1\xb9\x82\xb6\x7b\x44\x58\x69\x21\x61\x7c\xd5\x6d\xe2\xa1\x16\xa4\x16\x88\x83\xd4\x3a\x63\xea\x04\xb4\x7e\xfd\x4f\xea\x44\xea\x54\xea\x44\x34\xb5\x68\x31\x3b\xc2\xae\xc7\xa7\xf7\x38\xe2\x93\xfc\x0f\x54\xbf\x20\xfe\xa2\x98\xb7\x5a\xec\x81\xfe\xe7\x2f\x7f\xcb\xef\xb2\xff\xfb\x75\xbe\x53\xa9\x13\xed\xce\x89\x13\x55\xe9\xdb\xa9\xfb\x41\x4b\xce\x23\x1c\xfe\x1e\x0a\xaa\x5e\xa9\x1f\xe9\x67\xcd\x67\xa4\xca\x9e\xf1\xcc\x4d\xff\x17\x56\xa6\x4f\xa5\x4e\x0e\x1f\xc4\xe0\xbf\xc4\x0f\x48\x15\x2e\x4a\x78\x97\xc9\xff\x73\x3a\x42\x9e\x49\x36\xe8\xed\x86\x57\x57\xc1\xea\xfb\xb4\xfe\x80\xb6\xff\xce\xd2\x22\xa8\x2d\x4f\x77\x70\x5f\xdd\xa8\x4b\xda\xeb\x7d\x8b\x5c\xca\xf4\x2f\xfb\x8f\xfa\x65\x8e\x1f\x7f\x32\x1d\x30\x23\xeb\xbb\x76\xf4\x4b\x91\x91\xa3\x32\x1e\x92\x10\xc4\x21\x3a\x78\x1e\x37\x3a\x57\x42\xd2\x95\xa4\xb2\xaf\x5c\xd5\x46\xdc\x17\x2b\x17\xc8\x3e\x26\xf1\x48\xf3\xde\xe5\xf4\x8f\x91\x6b\x49\xed\xfb\x00\x95\x05\x71\x88\x0e\x3e\xfa\xa5\xef\xb6\xe6\x93\x5b\x93\x87\xef\xfd\x69\x50\xec\x1c\x0c\xb4\x3c\xa6\xda\xb8\x51\x31\x3b\xf2\xe8\x0f\x1e\xc5\x25\xb4\x19\xc0\xcf\x0d\x00\x87\xe8\xe0\x87\x53\x3f\x56\x4b\xcc\xa5\x9c\x4a\x9e\xad\x5b\x97\x7d\x9c\xef\xbe\x55\x12\x5e\xe8\xec\x20\xd1\x14\xd5\x97\x64\x61\x3e\x90\x20\x0a\x95\x05\x71\x88\x0e\x9e\xcb\x94\x3e\x26\xf6\xa6\x2e\xb3\x04\xc5\x1a\x87\x46\xa3\x5e\xde\xf5\x87\xd1\xef\xf8\x95\x93\xc3\x36\x27\xff\x2d\xfb\xc0\xdf\x57\xa0\xb2\x20\x0e\xd1\xc1\xd1\xb9\x18\x87\xfa\x2b\xcc\xdd\x70\xd4\x96\x7d\x43\x86\x67\x6a\xea\xcf\xdd\x1d\x9a\x3a\x3e\xa9\x64\xdb\xe0\x7f\x30\x1e\x82\xed\x0a\x75\x70\x10\x07\x75\xf0\xb3\xa5\x4e\x40\x7d\xe6\xb4\x5a\xb1\xfa\x3b\x73\x4d\xa4\x33\x5f\x57\xb9\xc4\x6e\x3c\xce\xdc\xc7\x21\x1f\x8d\x7e\xad\x44\x6c\xef\x57\xe9\x96\xc4\x7f\xe5\x35\x61\x33\x74\xfb\x20\x0e\xa1\xd6\xe7\xd9\xf7\x9b\xea\x72\x28\x79\xa9\x5b\xc3\x6a\xef\xde\xb3\x94\xe6\x4c\xac\x51\x86\x93\x25\x3f\x3a\xf7\x12\xcb\xac\x28\x27\x0e\x17\x2a\x0b\xe2\x10\x6a\xa5\xfc\xac\x3c\x67\x92\xd1\x77\xc2\xc3\xb3\xf5\xbe\xeb\x4b\x81\xb1\xee\x98\xa1\x23\xf1\xc3\xa4\x9a\x20\x5a\x9e\xb0\x23\xce\xa5\x60\xa8\x2c\x88\x43\xa8\x15\xe6\xd1\xf1\xfa\xd6\x88\x56\x60\xb4\x72\x76\x4a\xd9\x33\x02\x85\x9f\x89\xbd\xe8\xfb\x14\x77\x9f\xdd\x2a\x62\x14\x7c\xee\xb4\xa4\x08\x95\x05\x71\x08\xb5\x88\xa6\xfb\x71\x58\x74\xdb\xda\x64\x82\x38\xc9\x4a\xbb\x2e\x38\xc5\x46\x2a\xe8\xf1\xfd\x26\x0f\xb5\x24\x7c\x2b\xb7\xd1\x78\x0b\xfe\x88\x0d\xe2\x10\x6a\x3d\xf6\xa3\x72\x75\x98\xbb\xf8\xf4\xce\xde\x9f\xeb\x51\x2e\x92\xb9\xf5\x6d\x31\x65\xa8\x9b\x9a\x9d\x35\xb4\x9f\xe4\x25\x44\xd7\x46\x20\xb5\x40\x1c\xa4\xd6\xd9\x52\x27\xa0\x67\xe3\x69\xb5\xfc\x3e\xd6\xbd\xc8\xc0\xff\x6d\xe7\x7b\x51\x2c\x2c\x76\x1e\x77\xdc\x55\x7e\x58\xcf\xf9\x80\xf3\x62\x02\x77\x5b\xf1\x43\x47\x14\x38\xd0\x04\xe2\x10\x6a\x45\x72\x0c\x2d\x04\xbb\xf6\x6b\x2f\xbf\x62\xd3\xe5\x38\x50\xc3\x5d\xb7\xfe\x3e\x1c\xf1\x56\x2e\xb7\xa4\x5e\x0c\x8b\x93\x62\x17\x9e\xfe\x83\x38\x84\x5a\x33\x5d\x13\x42\xed\x09\x77\x57\xa4\x74\xa7\x15\xee\xce\x37\x8c\x0d\x3c\x0e\x08\xbf\xb5\xce\x2b\xdc\x7d\x2b\x2a\x58\xb5\x6c\x0a\xde\x74\x02\xe2\x10\x6a\x35\xf4\x87\x28\xa8\x17\x89\xa5\x65\xc6\x55\x86\x19\x91\xae\x19\x6e\x71\xb4\x5e\x13\x75\x98\xc0\x27\x75\x4d\xa7\x36\x22\x23\x7a\x06\x95\x05\x71\x08\xb5\xb4\xb2\x55\xa6\x02\x3a\x3e\x92\x3a\x1b\x28\xf5\x72\xf9\xa6\xd3\xcb\x5f\x5a\xed\x2c\x7c\x2a\x2c\x79\xf0\x7c\xb0\xff\x8f\xd9\x09\x11\x54\x16\xc4\x21\xd4\xaa\x29\xb4\xe3\xeb\x1b\x98\x26\xbc\x9e\xef\xfb\x6b\x90\x4d\x42\x64\x90\x76\xd7\x3e\x6c\xf7\x97\xd1\xf7\x13\xc5\x0f\x07\xf3\x4a\xe6\x90\x5a\x20\x0e\x52\xeb\x6c\xa9\x13\xd0\x17\xfe\xd3\x6a\x91\x5b\x56\x7b\x5c\x0e\x6b\xc4\x79\x48\x72\x99\xe5\x9c\xc8\x2a\x56\xcb\x07\xaa\xbe\xa0\xa8\x92\x5c\x32\xd3\xca\x2e\x95\x5d\x4b\x1c\xe8\xf6\x41\x1c\x42\x2d\x35\xdd\x6c\xf3\x16\x0b\x59\xd1\x4a\xb1\x0c\x14\xdf\xee\xa4\xbc\x54\x34\x45\xcd\x97\xe6\x2f\xac\x48\xfe\x84\x7c\xd4\x52\xa1\x37\x87\xca\x82\x38\xe4\x3c\xfd\xfe\x33\x25\x02\x6d\x1d\x45\x49\x77\xdd\x75\x97\x26\x1c\x8b\x9b\xee\xdf\x5e\xe6\x13\xd0\xba\xab\x73\xe2\x10\xdf\x46\x67\x86\x27\x53\x20\x0e\xa1\x96\x92\x5c\x45\x9f\x10\x2b\x87\x71\x7b\x97\xdf\xfa\xde\x00\x0b\xf9\x98\x2b\xb1\x44\xee\xf5\x03\xd1\xf7\xcf\x2a\x24\x98\xb3\xe9\x6b\xa0\xb2\x20\x0e\xa1\x56\x44\x81\x2e\x23\xd5\x87\xab\xb8\x49\x82\xf2\xd7\x59\x76\x14\x2a\x36\x7e\xb4\xc9\x2e\xbf\xd3\x58\xba\xc8\x30\xbf\x22\x12\x62\x0c\xbf\x11\x40\x1c\x42\xad\x3b\x3c\x6a\xec\xe9\xe7\x2f\xbf\x7b\x44\xf1\x70\xee\x21\x53\x89\x45\x2d\xa6\x64\x2b\x8a\xcc\x85\x6c\xed\xfe\x0f\xfb\x0e\x63\x32\x28\x50\xea\x04\xc4\xfd\x5f\xb5\xfe\x95\x3a\x01\x9d\x67\xf6\xef\xd4\xc9\x45\xea\x7e\x83\x5b\xbe\x5f\x1d\x09\xbe\xb9\x75\x8c\x5e\x11\x11\x97\x6e\xe8\xde\xd4\x95\xb3\x77\xa3\x7a\x5e\x3d\x72\xd4\x78\xed\xf1\xbf\xd0\xc6\x4f\x51\x68\xca\x7f\xa2\x05\x6f\xfe\xee\x47\xfd\xfc\x8a\x95\xa6\x6c\x53\x8b\xac\x75\x53\xf7\x98\x63\x9a\x79\xc1\xe1\x9c\x00\x07\x22\x75\x02\xaa\x7c\x3a\x75\xa2\x3a\x15\x8c\x22\xf4\xcd\xa8\x60\xc4\x4a\x8d\xa9\x78\xd8\xa1\x88\x3d\x6e\xa1\x86\x2f\xf4\x39\xcd\x7c\x67\xef\x24\x21\xaf\xdc\xc6\xbf\x50\xf1\x2e\x1a\xde\x32\xc6\x18\x6e\x1d\x29\x74\xa9\xa3\xdd\xc8\xf3\xc4\xbb\xdc\xed\x28\x0c\x77\xe7\x48\x73\xe8\xf5\x1e\x7b\x08\x08\xc0\xa9\x13\x50\xcd\x7f\x52\x27\x2f\x10\xa9\x93\xfc\x75\xf6\x85\x62\x0c\x9e\x0f\xae\x19\xca\x3b\x3b\x45\x53\x41\xec\x77\xa3\xf2\x70\xee\x26\xb8\x1a\xb2\x91\x4a\xf3\x05\x1a\x93\xfd\x75\xea\xc4\x1b\x99\x3a\xf9\x43\x7c\x40\x7f\xe5\x76\x12\x5a\xd1\xd5\xce\xa9\xfb\xc3\x93\xef\x88\x9c\x58\xbc\x7b\x2f\xf6\x57\xaa\x2e\xbb\xf8\xf8\x5e\xb1\x8e\xfc\xeb\xb1\xbd\xf7\xa9\xd4\x09\x93\x48\x7e\xf8\x82\xe3\x5b\x85\xf1\xfe\xa8\x35\x61\xb1\x49\x09\x82\xaf\xf5\x78\x36\xaa\x87\x94\xd2\x7d\x3f\x93\xb7\x48\x15\xb9\xfe\xfe\x92\xa7\x52\x27\xe4\x04\x95\xdf\xef\x59\x5a\xa2\xb4\x06\x89\x8a\x32\xfa\xd2\x98\x31\x45\x1a\x2b\x2c\x45\x16\xb0\x38\x12\x28\x3c\x18\x62\x64\x4f\xfa\xfb\x4b\x9e\x4a\x9d\xf0\xa6\x0f\xb3\x1d\x4a\x34\x78\x55\x5c\x8f\xfd\xcd\x40\x81\xff\x87\x7d\x9c\x06\xa3\x28\xfb\x12\xe1\x25\xe3\x6c\xba\x75\xfc\x5f\x25\x7f\x7f\xc9\x53\xa9\x93\x40\x0a\xca\xa1\xb0\x38\xba\x66\x4a\xb7\x47\xb4\x35\xf2\xca\x18\xc2\xe8\x0b\x94\xa4\x1e\xb9\xbd\x0b\x93\xc9\xe7\x15\xe5\x1c\xf3\xfe\xfe\x92\xa7\x52\x27\x9d\xda\x77\xb2\x2f\x0f\xbe\xbd\xe6\xbe\xc3\xe7\x71\x2e\xfc\x6b\x8a\xad\xf5\xc8\x6b\x8d\x87\x31\x6e\x86\x37\xfa\x88\xfa\xbd\x33\x7f\xfd\xfd\x25\x4f\xa5\x4e\x26\xe4\xfb\x66\xb7\x0b\x72\x66\xca\x73\x3a\x2e\xbf\x6a\x88\xd7\x10\xe7\x38\xf0\xe2\xc4\x53\x08\xca\x33\x0c\x65\x1a\x76\x67\x9d\xfc\xef\x4c\x0d\x41\x3d\xf1\x3f\xbc\x09\x63\x68\xa9\xac\x32\x4c\x07\x1e\x35\x24\x90\x73\x51\xd5\xf2\xc4\xf9\xf9\xf7\xdb\xdb\x1b\xa8\x78\x79\xe2\xd0\xdf\x0e\xe1\x82\x5f\x59\x20\x0e\xf1\x26\xac\x47\x2d\x14\x26\xb8\xf1\xc6\x26\xe4\x51\x93\xcb\x5c\xe9\x62\xfd\x65\x87\xb2\xf2\x5f\x5a\x3a\x0c\xaf\x36\x2a\xb8\x29\x65\xd5\x1b\xa0\xb2\x20\x0e\xf9\x9d\xad\x9e\xa5\xd6\xb4\xcf\xf0\x47\xbf\x3a\x16\x5b\x5a\x56\x45\x49\xcb\xdb\x8b\x4c\x9c\xbf\x47\x7e\x5d\x9c\x48\x1a\x7f\xe4\x66\xa1\x00\x7f\x67\x03\x70\x88\x37\xe1\x7c\x42\x5a\x02\xa9\xa5\x7c\x7c\x0e\x71\xb8\x65\xa8\x9a\xd6\xb3\xe4\x9b\xa6\x9d\xd1\x39\xf4\x6f\xdc\x5a\xf2\xc8\xcc\xb8\xb6\xe1\x8d\x4c\x20\x0e\xd1\x08\x15\x1f\xe8\x1e\xb1\xc8\xec\xe3\x65\x87\xd7\xce\x2f\xb1\x0d\xbe\xaa\xae\x13\x79\xbf\xc3\xbb\x77\x5e\xc8\x81\xb4\x11\xd7\x66\x8d\x1b\xde\x8b\x0e\xe0\x10\x6f\x42\xfd\xa1\xcd\x41\x76\xac\xa2\xde\x36\xa3\x9d\x71\xfe\x8b\x5d\x1c\xe3\x17\x5b\xb6\x2b\x8b\xde\x2b\xbc\x6d\xf8\x45\x6f\xd7\x15\x80\x06\xa5\x4e\x40\xdc\xff\x44\x7b\xff\xcf\xd3\x1c\x3c\xc4\x02\x3d\x70\x4f\x8b\x15\x54\x2f\x7d\xfc\x67\x3d\xf7\xca\xeb\xdf\xd8\xd8\x63\x57\x22\xe6\x6f\xd7\x7b\x93\x7e\xf5\xd1\x4b\xb1\x5d\x34\xef\x97\x2a\x09\x80\xd7\x54\x41\x1c\xa2\x4d\x79\x76\xcc\xa8\xb5\xc3\xfc\x76\x2e\x18\x48\x5c\x6c\x0b\xef\x57\x6d\x6f\x5e\x5f\x76\x70\xc4\xee\xb4\x8a\xb8\xe4\x44\x3f\xff\x10\xfe\x14\x02\xe2\x10\x62\xbd\x72\xea\x8c\xe2\xe3\xa3\x26\xbe\x91\xa2\x4d\xc0\x43\x39\xd2\xf4\x88\x98\x9e\xe6\x29\x65\x40\xa4\xcb\x86\xcb\x34\xc5\x9e\xab\x09\x54\x16\xc4\x21\xc4\xb2\x22\xff\x55\xfa\xe4\x0d\xa7\x82\xc6\xcf\x8f\x9d\xa2\x9d\x04\x7f\xfc\xb1\x35\x72\xb5\x0e\xe4\xd1\xb1\x23\x44\x68\xea\xe6\x77\xef\x40\x65\x41\x1c\xa2\x11\xb0\x27\x92\x0a\x30\x9d\x62\xab\xf1\xd8\x31\xfb\xfc\xf5\x31\xbb\x96\x69\x15\x64\x3e\xaf\xf0\xf7\xd5\xe3\xa3\xa9\xab\x3c\x71\x97\x84\xca\x82\x38\x84\x58\xa9\xb4\xda\x8a\xf9\x4d\x97\x33\x4c\x5d\x2e\xb7\xab\xdd\xad\x98\xcb\x98\xe7\x5f\x53\x6c\xed\x0a\x2c\xe1\xe8\x9f\xff\xd4\x47\x32\x0c\xa5\x4e\x40\xdc\x3f\x67\x9d\x78\x9f\x29\x75\x02\x7a\xaf\x9e\x36\x4b\x35\xde\x73\x73\xc7\x41\x28\x97\xda\x60\x0b\x43\xed\xb3\xc1\x6d\x17\xb7\x58\xce\x97\xaf\x8e\x3f\x52\x75\x4a\xf8\x05\x13\x46\xc1\xdf\x18\x41\x1c\xa2\x51\x2b\xdd\x3a\x9e\xab\xb7\x3c\xcd\x40\xc9\xd8\xa4\xae\xd4\x7d\x4f\x2e\xb2\xeb\x25\x55\x5d\x9a\xcf\xc6\xb7\x22\xe1\x5b\x5d\xff\x78\x07\x2a\x0b\xe2\x10\x66\xf9\x66\x6a\xad\xf2\xe8\x79\x4f\xa6\x36\x06\x48\x18\xdf\xe2\x37\x1e\x56\x76\xc8\x39\x6e\x4d\x43\xa7\x5d\xa0\xb6\x18\x30\x79\x29\x0c\xaf\xbd\x01\x38\x84\x59\x7a\xdb\xc6\x35\x77\x30\xef\x35\xfd\xf8\x5e\x2e\xb8\xb9\x91\x51\xc1\x94\x68\x2e\x6c\xa1\x59\x42\xfa\x85\x01\xff\x70\xa7\x06\x8f\x16\x2a\x0b\xe2\x10\x8d\x60\x45\x45\xc9\xfe\xe9\x0b\x43\xbb\x4f\xbb\x2c\xba\xc3\x46\xec\x93\x03\x54\x17\xe1\x06\x92\x94\xf4\x58\x41\x07\x83\x86\x41\xe2\x0c\x58\x58\x00\x87\x30\xeb\x76\xb2\xf2\xb0\xaa\xd6\xbe\x22\x7a\xa9\xc4\x9f\x13\x39\xba\x9a\xf7\x4f\xde\x75\xdf\xed\xd7\x49\xba\x8f\xb2\x8e\x9b\x7b\x4e\xcd\x11\x9a\x17\x82\xb8\x7f\x76\x23\x78\x9f\x2d\x75\x02\x1a\x3f\x9d\x56\x6b\x97\xce\x6f\xd5\xe5\x64\xd3\xfa\x78\x9b\xac\x5e\xc8\x8e\xa7\x6e\xc0\xd5\x67\x64\xd6\x45\xcc\x79\xea\x5b\xc2\x1e\xa6\xcb\x39\x1e\xe8\xf6\x41\x1c\xa2\x55\x85\x98\x35\xe9\xa6\x9e\xfe\x99\xea\x19\xaa\x93\x76\xae\x71\x66\xe4\xd6\xef\xd2\xbd\x8e\x91\xad\x29\x68\x4a\x73\x58\x46\x6b\x86\x0f\x95\x05\x71\x08\xb5\x14\x3f\xce\x18\x75\x29\x4d\xad\xa1\x11\xba\x56\xbe\x6b\x0c\xf8\x29\xfb\xe9\xc7\x85\xf4\x5c\xed\x18\xa6\x99\xd9\xa6\xdb\x38\x1f\xbc\xe1\xd3\x43\x00\x1c\x42\xad\x28\x5e\x22\xda\xd7\x7f\xee\x5d\xb2\x73\x91\x78\xf1\xc0\xdd\x2e\xe2\x6d\xdc\x85\x10\x7e\x1e\xb4\xb6\x97\x17\x0f\x26\xd3\xa5\xa9\xe0\x0f\x2c\x20\x0e\xd1\x08\xfc\xba\x33\x55\x0a\x1f\xae\x50\x84\x09\x1d\xf7\x90\x63\xb4\x84\x74\x55\xdb\x88\x8e\x39\xd6\xe3\x4f\xaf\x3c\xdc\xca\x8f\xc6\x5c\x85\xca\x82\x38\x84\x5a\x81\x2d\x6a\x7a\x0b\x72\x76\x35\x14\xe5\x9e\x94\xed\x84\xaa\x06\xea\xf5\x1a\x7a\x1e\x98\x46\x15\x8e\x35\x04\x29\xcd\x3f\xe5\xf7\x20\xb5\x40\x1c\xa4\xd6\xd9\x52\x27\xa0\x71\xf2\x69\xb5\x6e\xf9\x86\xa5\x95\xf3\x7d\x59\xb8\x4c\x21\xc7\xec\xea\x23\x7d\xcd\x43\xb1\x18\x65\xee\x8a\xd2\xfd\x42\x69\x42\xa5\x17\xc4\x9f\xe4\xa1\xdb\x07\x71\x88\x56\xa5\xbe\x28\x5e\x27\x42\x60\xa6\xa7\xe5\x5f\xcf\xf2\xd2\x35\x81\xe8\x02\xe3\xf9\x50\x77\xcf\xa3\x6b\x96\x45\x0b\x87\xb8\x02\x4e\x8e\xf0\x8e\x14\x00\x87\x50\xcb\xa9\xd8\xb9\x29\x65\x99\x50\x66\xa9\xf0\x4b\x6e\x38\xce\xc7\xef\x74\xdf\x13\xfd\x7d\x71\xe5\x0f\x75\x76\x76\xea\xdf\xa8\xad\x16\x41\x65\x41\x1c\x42\x2d\x0f\x36\x1a\x96\x92\xfa\xaf\xf5\xd6\x71\x66\xa2\xee\x13\x1f\x38\x0c\x5a\x2f\xf5\xe9\xea\x94\x57\x2f\x47\x8c\x5d\x11\x6a\x71\x85\xc3\xc8\x20\x0e\xd1\x08\xbb\xa9\x72\xaf\x72\x38\x3a\x7e\x69\x4f\x08\x58\xa7\x68\x4d\x87\xa3\x54\x62\xa0\x53\xcd\x5e\x66\x34\xe8\xbe\x47\x36\xd1\x55\x07\x1b\x0b\xe2\x10\x6a\x55\xb2\x64\x45\x92\xbf\x6d\x4d\xe6\xe7\x75\x96\x26\x78\x61\x91\xca\xf8\xce\x50\x18\x4f\xc3\x1e\xe3\xa9\x99\xc2\xaf\x4d\xaf\xa7\x84\x90\x5a\x20\x0e\x52\xeb\x6c\xa9\x13\xd0\x7c\xe8\xb4\x5a\x7d\xec\x2f\xcd\x3c\x89\x1a\x0d\x0b\xd6\xe6\x38\x2d\xa6\x36\x49\x7a\xc8\xd5\xab\x09\x7a\x9f\x33\xb0\x95\xdb\x4b\xd2\xf7\x11\x1d\x42\xb7\x0f\xe2\x90\x59\xb9\x9c\x6f\x6d\x79\x15\x2a\xf1\xc2\x49\x95\x5c\xec\xae\x17\x73\x46\xca\xdc\xbf\x9c\x24\x6d\x24\xb3\xb0\x3e\xfe\xb1\xcf\x7a\x78\x0d\xce\xca\x01\x38\x84\x5a\xe4\xe1\x9d\x8e\x23\x55\x27\x6d\x9a\x0c\x75\x4c\x5e\xc1\xe4\xec\x64\x2b\xb6\x2a\x2b\x3f\xdd\x87\x92\x6f\xf4\x75\xdf\xe0\x38\xb9\x07\xcf\x38\x00\x1c\x42\xad\x57\x1d\x15\x83\x7d\x0b\x95\xf3\xc4\xca\x9f\x2a\x7d\xc7\xdf\x88\xd1\xd6\xaa\x95\x04\x0e\x95\x1f\xb1\xc8\xfe\x8e\x10\x17\xb6\x80\x97\x75\x41\x1c\xa2\x11\xea\xae\x8c\x44\xe3\xf5\x58\x16\x8a\x94\x68\x9a\x52\x90\x74\xcd\x15\x84\xe1\x71\x8e\x3f\x69\x34\xa4\x57\xca\xe6\xd5\x0e\x9f\x83\xf7\x2a\x83\x38\x84\x5a\x32\x23\xed\xa9\x8e\xd1\x25\x1d\x3a\x3b\x16\x04\x57\x49\xb0\x6a\x0d\xa6\xaa\xbb\x83\x4d\xc5\x1f\xce\x17\x4c\x13\x36\x60\x3a\xdb\x42\x6a\x81\x38\x48\xad\xb3\xa5\x4e\x40\xf3\xde\xd3\x6a\x31\x95\x94\x93\x5b\x2d\x52\x76\x8d\x27\x84\xc4\x56\x97\x8c\x52\x8a\x13\x0f\x69\xf5\x48\xa0\xc7\xf3\xf6\x2a\x0d\x86\x69\x07\xc2\x4b\x8f\x20\x0e\xd1\xaa\xab\x14\x27\x7f\x02\x1a\xb0\xe9\x09\x17\xbd\xc7\x47\x0d\xb0\x52\x71\xda\x4e\xb4\x75\x3d\x73\xd2\xae\x6b\xa3\xbc\x3d\x69\x8c\xbe\x0b\x95\x05\x71\x08\xb5\x84\x05\x4b\xb6\x51\xfc\xa3\xf4\x46\xba\x3e\xb5\x5e\xfe\xbc\x77\xe1\xbc\x1c\x47\x5a\x4d\xb1\x4e\x2f\x59\x54\xcc\xec\x83\x24\x2a\x78\xd6\x09\xe2\x10\x6a\xa5\x47\x0c\x1a\xd1\x3b\xcc\xce\x2a\xa6\x78\x45\x4d\x56\xe0\x9e\xbb\x68\x17\x68\x16\x73\xd5\x41\x45\x9b\xc2\x34\x7b\x6f\x53\x02\x3e\xe1\x12\xc4\x21\x1a\x21\x71\xa5\x43\xfd\xb7\xbe\xd9\x8a\xa3\x03\xe7\x2d\x36\xac\x99\x41\xfe\x63\xf6\x12\x71\x2c\xbe\x9d\xc1\x39\xa2\x2f\xe7\x3f\x6b\xc3\x49\x77\x10\x87\x50\x2b\xd8\x25\xbc\xc2\x17\x6d\x4d\x78\x78\x39\xc3\x85\xf2\x0a\x76\xd7\x7d\x1e\x94\x5b\xe7\x5b\xfc\x5e\x75\xda\x0d\xe0\xc9\x67\xcf\x89\x43\x6a\x81\x38\x48\xad\xb3\xa5\x4e\x40\xeb\x1b\xa7\xd5\x9a\xb0\xac\x48\x9b\xba\x85\x67\x1a\x9d\xd1\xcd\x67\xfa\x75\xde\x8f\x40\x76\x97\xfa\xdc\x7a\xc8\xc2\xbb\x7e\x9a\xfc\x98\x85\x48\x38\xdc\x0a\xe2\x10\xad\x9a\x7f\x70\xfb\xf1\x83\xac\xf2\xef\xc1\x75\x3c\x9c\x2f\xb3\xd3\x73\xec\xd2\x9c\x13\xfe\x24\xdf\xd8\x66\x6c\x40\x1d\x91\x26\x35\x9c\x87\x97\x08\x00\x1c\x42\xad\xe7\x28\xb9\x97\xe3\xd5\xb7\xd4\xb4\x7d\x1b\x6d\x07\x74\x76\xab\x52\xcf\xff\x29\x5c\x6f\x67\x92\x2e\x61\xaf\xcd\xdf\xc2\x27\x86\xbf\xc5\x81\x38\x84\x5a\xa5\xd5\x9b\xcb\x2d\x72\x89\x7f\x18\xb9\x66\xa2\x3c\xbd\xfc\x43\x6f\x60\x35\xe9\xb6\x56\xa4\x17\xd6\xeb\xf4\x92\xd3\x09\x6a\xa2\x40\x65\x41\x1c\xa2\x11\xb6\xd0\x9e\xb0\x28\xe5\xa5\xa5\x30\x8f\x1b\x2b\x73\x3b\x8f\x1e\xc9\xa4\x8c\x3d\x6c\x67\xf2\xe0\x7d\x50\xfd\x87\xd9\xa2\x8a\x11\xfe\xbe\x01\xe2\x10\x6a\x4d\x05\xef\xeb\x0a\x84\xbe\x08\xb2\x3e\x8c\xe3\xd8\x90\xe0\xdf\x1b\xf9\x2a\xf7\xde\x3e\x3c\x80\x7a\xc6\x76\xd7\x1d\x9d\xca\xa9\x18\x52\x0b\xc4\x41\x6a\x9d\x31\x75\x02\x5a\xbf\xfe\x27\x75\xe2\x7d\x2a\x75\xc2\x6a\xda\x45\xf7\x8e\x71\x46\x25\xe4\xa7\xa5\x68\xdb\x40\x7a\x92\x76\x79\x89\xeb\xc5\x6f\xd7\x7a\x25\x72\xa6\x6e\x7f\xd9\xf6\xfc\x2f\xac\xf3\x9d\x4a\x9d\x94\x39\x50\x64\xe2\x24\xf6\xa9\xd1\xec\xb1\xec\x91\xd1\x0b\x4d\x11\x4a\x45\xaa\x08\x5e\xf7\x79\x93\x88\x82\x3d\x93\xdd\x63\x79\xe1\xef\x2f\x79\x2a\x75\x12\x74\x9f\x83\x22\xb1\x72\xfe\xbb\xc6\xab\x99\x59\x7c\xaf\x9e\x3d\x1f\xb6\xe2\x2f\x8a\x97\x6c\xfc\x0a\x32\x0f\x5a\xe2\x32\x6a\x2e\xfd\x77\x96\x16\x41\x6d\x79\xba\x83\xe3\xf8\xbe\xb0\x0b\x0a\x50\xa8\xcd\xba\x4d\x6f\xb8\xdb\x31\x6b\xcd\xa2\xb6\x3f\x5c\xae\xd5\xb4\x2e\x2a\xce\x60\xc2\x3e\x2b\x90\x07\x49\x08\xe2\x10\x6e\x97\x26\x3d\xbb\x48\x4f\xf0\xcd\x92\xad\x11\xc3\x9e\xac\x83\xeb\x4e\x35\x99\x9f\xfa\xf4\x26\xfd\xf7\xe2\xfb\xa6\xd9\x5d\x07\xa5\xef\xe0\x2e\x03\xe0\x90\x2b\x40\x79\x1b\x6c\x37\x52\x2b\x9f\xcf\x6d\x5e\x54\x0b\xf0\xef\xdb\x09\x9c\xd1\x2f\xc8\xe3\x0a\x1f\xf6\x4f\x51\xfe\xe2\xeb\x95\xcd\x08\x8f\x1f\x00\x1c\xa2\x83\xb3\x7a\x0f\x94\xd8\x5f\xce\xbb\x28\x97\x27\xf8\xe8\x92\xe2\xa1\x45\xfa\x7b\x43\xe7\xab\x56\xf9\xf2\x4d\x7d\x64\x5e\x4f\x74\x97\xe1\x9e\x08\xe2\x10\x8d\xf0\x1d\x3b\x91\xc4\xc5\xcb\x28\x4c\x2e\x62\x1d\xad\x9c\x34\x6b\xa7\x9e\x2b\x7f\x3a\x96\xac\x63\x6f\xd9\xda\x8a\x83\x66\x25\x02\x3e\x35\x00\xc4\x21\x3a\xb8\x55\x83\xbc\x1a\x3e\xf3\xc6\x86\x79\xaf\xf5\xaf\x7b\xea\x0e\x97\xb2\xd4\xc9\xd9\xb1\xbf\x54\x6a\x70\xbe\x66\x7b\xdd\xc3\x57\xf5\x09\xea\xe0\x20\x0e\xea\xe0\x67\x4b\x9d\x80\xfa\xcc\x69\xb5\xe4\x54\xee\x06\x4d\xe0\xa7\x36\x3c\x72\xb1\x4f\xfb\x60\xf7\x96\x79\xf7\xb7\x5c\x43\x75\x8f\xdb\x75\x31\x25\x39\x8b\x03\x87\xcb\x03\xd0\xed\x83\x38\x44\xab\x96\x10\x32\x60\x96\xef\xaa\x26\x3a\x5e\x0a\xcb\xfb\xe9\x57\xbb\x2f\xe1\xa7\x9a\x52\x4a\x52\x57\xd5\x2f\xa2\x81\x66\x16\xbb\x0f\x9f\x3e\x06\xe2\x10\x6a\x3d\x9e\xad\x49\xfb\x9c\x2b\xf7\x92\x69\x45\x49\xb2\x64\xb0\xda\xf1\xa5\x46\xe4\xdd\x6c\xf2\xb4\x02\xe3\x44\x81\xce\x0f\x1b\x9c\x52\x50\x59\x10\x87\x5c\x02\xb2\x57\xbf\x10\x61\xae\x79\xb0\x2c\x35\x6d\xe1\xef\x7e\xb2\xff\xe8\xa4\xeb\xf3\x8b\xe3\xae\x3b\xd6\x36\x05\x33\x65\xf7\x38\xe1\x55\x40\x10\x87\x68\x04\xbd\x1b\x36\x18\x2e\x4c\xda\xda\x7a\x2b\x04\x0b\x7b\x0f\x51\x63\x1f\x60\x2b\x3f\xb3\xb5\xff\x3e\x3f\x49\x8d\x66\xdc\x8f\x13\x0f\x4f\xfd\x40\x1c\x42\x2d\x2e\xf4\xc7\x3b\x4e\x64\xa4\xe4\xd9\x16\x21\x2b\x37\x0d\x7a\xa3\xb8\xc6\x5c\x1f\xd8\x89\xdd\x69\x9a\x3a\x78\xb3\xf9\x9a\xe3\x57\x03\xa4\x16\x88\x83\xd4\x3a\x5b\xea\x04\xf4\x6c\x3c\xad\x56\x95\x9b\xd1\x8f\x93\x37\x8e\x4c\xc2\xf8\x45\x3e\xb6\x09\xaf\x3c\x06\x07\xd7\xe7\x26\x2d\x4a\xf9\xc7\x62\xf3\xad\xbe\xb6\xff\x16\x81\x6e\x1f\xc4\x21\xc3\xb0\x8a\xac\x79\x68\xdc\x86\x46\xd7\x70\x8a\xfc\x42\x6b\x9a\xfe\x78\xa0\x3f\x8f\x4b\x0c\x63\xa3\xe9\xa9\xc5\x91\x9f\x27\xdd\x8e\x81\x43\x6d\x00\x0e\xf9\xd4\x12\xcd\x1c\xff\xe0\x47\xc0\xff\x55\x44\x9d\x88\xd4\xa1\xeb\x07\xca\xaa\x96\x79\xb9\xb3\xcb\x20\x8f\x57\xc1\x3b\xa7\xab\x2f\xe1\x6d\x8d\x20\x0e\xa1\xd6\x25\x8d\x28\x2d\x9d\xe3\x7c\x27\x65\x01\x1f\xf4\x4b\x3c\x62\xa4\x14\x94\x9f\x27\xf1\xbd\x6b\x8b\x49\x6d\x48\x8c\xd3\x8f\x47\xe1\xb5\x1a\x10\x87\x68\x84\x90\xd6\xcf\x85\x03\x0d\x66\xeb\x26\xec\x52\x4f\x6f\x92\xe2\xbd\x11\x35\x4b\x3c\xb0\xd6\x4e\x09\x5e\x19\xb9\xc2\x90\x73\xee\x0d\x7c\xdc\x2d\x88\x43\xa8\xa5\x25\x6e\xad\xd2\x8c\xb5\x4a\xf4\xa6\xfa\xb0\xf7\xc3\xfb\x34\x85\xc9\x2e\x8f\x2d\xb7\x3b\xf8\x22\x8d\x3a\x49\xdd\x97\xba\xaa\x6e\x41\x6a\x81\x38\x48\xad\xb3\xa5\x4e\x40\x5f\xf8\x4f\xab\x25\xf8\x2a\xf9\xde\x09\x3e\x75\xe3\x96\x5f\x1b\xef\x71\xfe\xcb\xc4\x06\x2f\x86\x26\xfc\x2d\x93\x4f\xac\x42\x57\x16\x42\x64\x88\xe0\x79\x04\x88\x43\xb4\xaa\x0b\x05\xbb\x7d\x92\xe1\x2f\x4d\x55\x85\x19\x8b\xf8\x96\xae\x64\x7d\x67\x82\xca\x96\xf1\xf0\x23\x8e\xeb\xcc\x73\xd3\xc9\x72\x85\x50\x59\x10\x87\x50\xcb\x3f\xbb\xdc\xbd\x99\x5f\xff\x6b\x7f\xc5\xc1\x08\x91\x81\x05\xf7\xca\xa5\xc4\xcc\xaf\xba\x18\x7a\x41\x1f\xb4\xda\xf8\x18\x31\xb1\xa1\xb2\x20\x0e\xa1\xd6\x6f\x43\x23\xd2\x86\xd0\x2a\x87\xf6\xc3\x48\xcd\x72\x92\x5f\xe9\xad\x4b\x2c\xda\x5f\xec\xf2\x71\x77\xd1\x17\xc6\x63\x14\x8b\xe1\xd0\x28\x88\x43\x34\x42\x6a\x45\x6d\xba\x6f\x22\xcf\x7e\x5b\x0a\x27\xd9\x72\x13\x4b\xbb\x75\xf0\x72\x74\x3d\x51\x85\xc8\x4c\xc6\x51\x42\x61\x8a\x05\xfc\xfa\x06\x71\x08\xb5\x80\x67\x9d\x40\x01\x0e\xd0\xbf\xee\xfe\x1d\x23\x09\x3d\x18\x52\xde\xbe\x3c\x48\xdf\xba\x9a\xa1\xe8\x1a\x66\xda\xa1\xf3\x38\x01\xff\x01\x41\x50\xf0\x22\x96\xd3\x58\x63\x6a\x10\xee\xbf\xd0\x1c\x5b\xa1\xeb\x27\x86\x37\xd8\x63\xcb\x57\xb9\x51\x38\x79\xcd\xd1\x99\xee\xe0\x49\xd6\xeb\xbb\x0a\x63\xf7\x69\x93\x3d\x1f\xc2\x46\xc4\x48\x40\x95\x4f\xc7\x48\x12\xf5\x49\xd8\x3e\x09\x96\xc6\x74\x7c\xb7\x8b\x64\x29\xc8\xf4\x74\xf6\x48\x62\x3e\x48\x7b\x27\xb0\xd6\xf8\xf6\xe1\x8a\xff\x02\xc9\xbf\xd0\xea\xd7\x3d\xdf\x19\x9a\x8f\x1f\x74\xbb\x9a\x9f\xb7\x56\x6f\xd6\x6a\x7c\xca\xa6\x1e\xab\x63\xf4\x31\x0f\xe5\x6d\x03\x6a\xf2\x78\x3a\x1c\x23\x01\xd5\xfc\x27\x46\xd2\x8b\x88\x91\xe0\x08\x4f\xe7\xe5\x69\xbe\x3f\xc0\xfb\xad\x37\x7a\x85\xb1\x80\x53\x9f\x58\x8a\xb1\xf5\x7e\xaa\x02\xee\x1b\x01\xef\xca\xca\x4f\x07\x7f\x1d\x23\x69\x42\xc6\x48\x4a\x7a\x51\xcc\xf4\x59\xdb\xb0\x5b\xcb\x4b\x3f\xcb\x67\x51\xa7\xb2\xdf\x5a\xcf\x63\xb6\x72\x6e\x69\x36\x26\xce\x6c\xbe\x28\xbb\xf5\xd7\x83\xf5\xa6\x53\x31\x92\x19\x7c\xe6\xeb\xf1\x72\x16\x6c\x56\xe7\x50\x1b\x7d\xeb\x5f\xeb\x11\xc5\x44\x98\xc7\xff\x8e\xbc\x97\x37\x75\xa5\x59\xbd\x21\x2f\xe6\xef\x2f\x79\x2a\x46\xb2\x17\x13\x74\xc3\x3f\x60\x69\x94\x3b\xd2\x4f\xd0\xfa\x27\xeb\xe0\x25\x72\x8f\x8e\xb7\xd1\xbe\x4b\x82\x8b\x9a\x57\x65\x3b\xa4\xff\x3e\xd3\xd1\x74\x2a\x46\xb2\x8b\x65\xfd\x39\x82\x96\x51\x95\xef\x8d\xf9\xc6\x58\xab\x4a\xcb\xaf\x2a\xb2\xaa\xa4\x9e\x8e\x94\x1e\x2a\xd3\x1e\xec\x51\x0b\xfc\xbf\xbf\xe4\xa9\x18\x09\x39\x7f\xc8\x5b\xbe\xbb\x15\x4b\x37\x56\xc7\x17\x4c\x99\x22\x2e\x7f\x90\xb2\x0f\x95\xdc\x5d\xc9\xa6\x6a\xe2\x75\xe0\x63\x31\x9f\xf9\xfb\x4b\x9e\x8a\x91\xd0\x38\x4d\xa4\x31\x96\x72\xc5\xf8\x0d\x68\xdc\xe2\x40\xe1\x23\xda\xfc\x7a\x83\x7a\x13\x2d\xc6\x81\x1f\x7b\x3f\x96\x29\x03\xf7\xef\xff\xe9\xd3\x74\x2a\x46\x52\x62\xd5\xf6\x87\x23\x5b\x43\x94\x4d\x46\x0c\x83\x64\xa5\xf7\x2b\xf7\x31\x61\xb8\x8d\xc2\xb3\x2b\x3c\xd9\x9c\x6c\x55\xbe\x31\xda\xff\x9d\xb9\x1e\xa8\x27\x9e\x7e\xb5\xfd\x89\x46\xb9\x7c\x24\xcc\xf5\x5c\xda\xde\x3b\xb7\xbd\xcc\x89\xd5\x3a\xd8\x26\x62\x69\x5b\x17\xe7\xb3\x89\x80\x57\xa8\x8d\x0d\x3c\x72\x06\x71\x88\xa7\xfa\xfa\x3e\x2e\x9d\x8e\x80\x7c\xe5\x41\x9a\x1d\x1a\x83\xf6\xd5\x98\xca\xfb\x05\x9d\xe2\x27\x43\x5f\xe3\x07\x42\xe4\x07\x42\xbf\xaa\xc3\x5b\x09\x01\x1c\xe2\xd5\x56\xf6\x4a\x5d\xc5\x4f\x42\xe4\x42\x6b\xf3\x95\x38\xd7\xf5\x94\x4b\x5e\x78\x97\x73\x03\xaf\x19\x18\x7b\x8d\x64\x7f\xea\xa7\x40\x83\x4f\x70\x06\x71\x88\x57\xdb\x6c\x68\x44\x6d\x51\xb1\x54\x0d\x43\x8a\x13\x51\x70\x96\x7f\xd0\x5a\x4b\x9e\x61\x38\x8a\xe3\xae\x9d\x3e\x75\x25\x2a\x27\x2f\x3c\xd7\x03\x71\x88\x46\xc0\x99\x56\xd7\x14\x2c\xab\x1a\x5f\x7a\x47\x8d\x97\x33\xcc\x42\xbf\x34\x9d\xe7\x3f\xfb\xfc\x13\x49\x40\x41\x93\xb0\x66\xe5\x2f\x78\x0d\x16\xc4\x21\xca\x6a\x79\x2f\x7f\x9f\xf3\x59\x0c\x32\xd5\xc5\xaf\xed\x4f\x8a\xfb\x21\x1d\x57\x5d\x6e\x2d\x29\xf5\x84\xc8\x87\xd0\x99\xde\x96\x68\x03\x8a\x91\x80\xb8\x7f\x0e\x2f\xe9\x3d\x4b\x8c\x04\xf4\xc0\x3d\x2d\xd6\x60\x46\xd8\xd3\x18\xd2\x95\x50\x3f\xd1\xd7\xdb\x8e\xe1\x8d\xcf\x1f\xd5\x75\xf6\x4d\x2e\xa8\x25\xf7\xa3\xd3\x95\x2f\x60\x6b\xb5\x43\x37\x0f\xe2\x10\x37\x3f\xe4\xdd\xe1\x59\x7f\x34\x36\xd6\xe0\x9c\xf7\x9a\x29\xf1\x9d\x09\x67\x8f\xa0\xc9\x03\x6d\x75\x03\xe9\xaa\x36\xfb\x37\x8f\x8a\xa3\xa0\xb2\x20\x0e\x21\x96\x67\x79\xe4\x87\x97\x3f\xb9\x36\x3e\x15\xd7\xd1\x62\xdc\xd3\x12\xcf\x7e\x5d\x83\x69\x74\xe1\xc2\xbd\x44\xf3\x4f\x93\x6e\xcb\xb4\x58\x50\x59\x10\x87\x3c\xc7\x5d\x67\xa7\x92\x0a\xab\x53\x67\xd4\x55\x99\x77\x9a\x44\x2d\x08\xed\x7a\xff\xc1\x83\x14\x2b\x5f\xa1\xcb\x9a\x85\x9a\x69\x0a\x99\x50\x59\x10\x87\x68\x84\xcb\xd3\x3f\xbe\x3f\xfe\x4c\x56\xf5\xf0\x8d\xa8\x80\xf2\xb1\xd2\x3c\xd7\x6e\x46\x1e\x8a\x65\xa5\x69\x14\xaf\xc6\xeb\x88\xf3\x8c\x36\x50\x59\x10\x87\x28\xab\xd3\x50\xab\xac\x67\xfa\xe5\x1b\xbf\x88\x29\x2d\xa9\xc6\x47\xc7\xdd\x4b\xd8\x06\x01\xc7\xec\xa8\xbb\xc3\xb9\x83\x95\xd1\x99\x37\xa1\x18\x09\x88\xfb\xe7\xf0\x92\xa6\x33\xc5\x48\x40\xef\xd5\xd3\x66\x29\x4a\x37\x5b\x6c\xf1\xd6\x29\xa9\x1f\xba\x13\xae\x0b\xc4\x45\x53\xf7\xb0\x9d\xbb\x51\x6b\x6b\x68\xd1\x8c\x3e\x6f\x61\x4a\x37\x01\x7f\x3d\x07\x70\x88\xbb\xff\x10\xab\x49\x1b\xd4\x1a\x9b\x68\x5d\xf9\x48\x40\x81\x47\x21\xd7\x99\x74\x50\xf6\xa1\xaa\xfc\x4a\xdf\x1e\x1f\xae\x85\x6e\x28\xbc\xac\x0d\xe2\x10\x66\x59\x60\x6b\xd4\x6f\xa6\xf0\x53\x12\x4a\x64\x12\x58\x36\xed\x1d\x11\x07\x4e\x96\x25\xb5\x60\x08\x62\x4b\xd7\xad\x61\x71\xd9\xe8\x41\x65\x41\x1c\xc2\xac\x27\x53\x4a\x73\x89\x94\xc1\x4f\x55\x05\xc6\x06\xeb\xb6\xe2\xee\x19\xf2\x3d\x1e\x31\xc8\x53\x2c\xbb\x67\xdc\x89\x12\xc8\x61\x0e\xa7\xb4\x40\x1c\xf2\x83\xac\xbb\x11\xe6\x5a\x41\x88\xf4\xb9\x3e\xcc\xb5\x0c\xa5\x11\x3e\x66\xe5\x0b\xca\x0d\xf1\x01\x61\x6a\x9e\x4b\x3f\xb3\x69\x6e\xc0\x5b\xb8\x40\x1c\xa2\x6c\x40\xf3\xf5\x2f\xc1\x5e\x6a\x91\xe4\x89\x24\x35\x03\xbf\xde\xfe\x69\x79\xef\x76\xfd\xdd\x0c\x7a\xa7\x7f\x49\xd8\x21\xf3\x0d\xad\x3a\xf8\x18\x77\x00\xf7\xcf\xf6\x82\xa6\xb3\xc5\x48\x40\xe3\xa7\xff\x10\x23\xa1\x58\x91\x64\x1a\x0e\x6a\x13\xb5\x10\x11\x99\x1e\xca\x55\xb2\x8d\x93\x09\x2c\x27\x78\x68\xf9\x7d\xf1\x87\x5c\x20\xde\x20\xbc\x4d\x19\xc4\x21\x6e\xff\x25\xf5\x2b\x0e\x93\x1b\x9d\x93\xcb\x6f\xd9\x72\x7d\x6b\x55\x7a\x84\x8e\x76\xcc\x8f\xf4\x8e\x18\x03\x30\x38\x9f\xe0\x84\x31\x51\x40\x65\x41\x1c\x42\x2d\xe5\xcc\x49\x56\x7a\x5d\xf5\x8c\x5e\x34\xb9\x6a\x19\xaf\xdd\x73\x68\x8c\xbe\xb2\x5c\x07\x77\xd0\x03\x75\x2e\xd6\x45\xca\xb4\x77\x40\x65\x41\x1c\x42\xad\xe0\x37\x89\xf6\x98\x74\xee\xd3\x99\xfd\x26\x98\x46\xd3\x82\x42\x25\xc7\xdf\x0c\xdd\x78\x02\x85\x7b\xb6\xbc\x46\x3e\xeb\x76\x55\x41\x65\x41\x1c\xa2\x11\xd2\xbf\x16\x89\x25\x63\xdd\xb3\xb4\x4f\x35\xa1\xa6\x26\x7f\x49\xf6\xc3\x3c\x7e\xa1\x55\xdb\xeb\x84\x93\xd4\x98\xb1\x6b\x29\x18\x3e\xe5\x19\xc4\x21\xca\xae\x60\xb8\xd5\xd9\x32\x1e\xee\xdc\x36\xf9\x5c\x64\x6b\x8b\xe2\xcf\x90\xf7\xfe\x55\xa3\xbb\x79\xb4\x06\xff\x03\x3c\x0b\x6e\x76\x45\x48\x2d\x10\x07\xa9\x75\xb6\x18\x09\x68\x9c\x7c\x5a\xad\x9f\xa1\x0b\xf1\x78\x3f\x0c\xb2\x15\x87\x2a\xee\xa3\x5b\xb6\xac\xa3\xac\x2e\x1b\x6a\x3e\xe8\x28\x9f\xe0\x9c\xa9\x5b\x0c\xf5\x87\x37\x6d\x80\x38\xc4\xed\x1f\xee\x9b\xd3\x26\xa8\x1d\xa7\x1d\x31\x35\x1f\x1f\x13\xe7\xf6\x2d\x7f\x4d\x70\xa7\x1d\xef\x4b\x98\xbb\xee\x56\x3f\x56\x83\x3f\x02\x6f\x8e\x04\x70\x08\xb5\xc8\x7c\x99\xb3\x44\xfc\x42\xee\xe5\xe6\xbd\xba\xeb\x17\x3d\xe2\x89\xda\x6d\xcf\xe5\x3f\x5b\xbc\x7f\x21\x40\xe2\x45\xe2\x2f\x3f\x4e\xa8\x2c\x88\x43\xa8\xe5\x99\x46\x75\x84\x8d\xf9\x43\x00\xcb\x5a\x75\x93\x28\x16\xfb\xc1\xf7\xfb\x33\x07\x19\xa6\x31\xc6\xdf\x42\x83\xba\x31\x5e\xde\x83\x77\x07\x82\x38\x44\x23\xc8\xc4\xbe\xa8\x88\x33\x7a\x2f\x55\xaa\x23\xce\x6a\xb3\xe8\xf0\x24\xa3\x9d\x19\xcb\xb2\x9b\xd1\xcd\xe0\xfe\x5b\x1f\xc6\xf0\x37\xf0\x99\xd4\x20\x0e\xf9\x3e\x8c\x9a\xef\xbe\x5e\xd8\x7c\x77\x66\xaf\xac\xfd\x9d\xa5\x2f\x41\xa4\xf6\xa3\xa7\x0f\xa3\xf1\x4c\x0b\x92\x72\x9d\x05\xab\x88\xf2\x20\xb5\x40\x1c\xa4\xd6\xd9\x62\x24\xa0\xf9\xd0\x69\xb5\x38\x05\x34\x64\xca\x56\x27\x85\x13\x5a\xf5\xf0\xd8\xdf\xa0\xca\x7f\x9d\x53\x45\xcb\x99\xbb\xb9\xc6\xf3\x9b\x2c\x89\x99\x8d\x1f\x3e\x71\x0a\xc4\x21\x6e\xbf\xaf\xf0\x5a\x67\xef\xcc\x25\xb1\x5d\x11\x1c\xcb\x9c\xf5\xb0\x84\x69\xb6\x14\x55\x4f\xd3\x42\xae\x1f\x15\x23\xcb\x69\xc7\xf1\x70\x66\x1b\xc4\x21\xd4\xe2\xa6\xe4\x56\x9c\xf1\x4e\xe6\xc8\xa2\x36\x42\x9f\xa4\x74\xd1\x2d\x78\x12\x37\x34\xf2\x58\x2d\x60\xa6\x9d\xb5\xc4\x67\xbc\xe1\x27\x7c\x1c\x08\x80\x43\xa8\x55\xc5\xd5\x1a\x3a\xaf\xaf\xea\xf5\xb1\xf4\x27\x07\xe1\xa8\x2e\x85\xd7\x47\xdb\x32\x3a\x94\xdf\x92\x82\xb7\x43\x6f\x79\xd6\xfe\x71\x81\x97\x7f\x01\x1c\xa2\x11\xb8\xad\x27\x76\x92\x2d\xdf\x97\x57\x60\x3a\xcc\x98\x0e\xd0\x51\x66\x28\x75\x6b\xf4\xd7\x06\x5a\x3e\xbe\xf5\x13\x35\x37\x9a\x0c\xde\x1d\x08\xe2\x10\x65\x51\x9e\xcd\x7e\x9b\x59\xf3\x26\xb5\x1e\xdc\x63\x1d\x8f\xd5\xdf\x63\xbe\x3d\x52\x59\x68\x8e\xc3\x14\x7e\x48\x5a\xa7\x3d\xaa\x6f\x0c\xa9\x05\xe2\x20\xb5\xce\x16\x23\x01\xcd\x7b\x4f\xab\x15\x18\x1f\x5b\x95\x3b\x42\x75\xa9\x59\x72\x7d\xed\x8f\x6c\x2b\x76\xa5\x17\xdd\xf3\x52\xa6\x83\x3d\xcd\x9d\x96\xf0\xe4\x1a\x3d\xf8\x58\x76\x10\x87\xb8\xfd\x9f\xbf\xc9\xa3\xcd\xbe\x51\x4a\x14\x29\x59\xcd\x71\x69\xc4\x49\x97\x55\x27\x77\x4e\xbb\xf2\x57\x09\x35\x77\x85\xc4\x50\x3c\x6c\x82\x1f\x86\x00\x0e\xa1\x56\xdb\xc9\x73\xaf\xdb\xf7\xd2\x79\xfb\x4d\x15\xcd\x37\xae\x69\xe1\x70\x3f\x56\x0a\x46\x2f\xdc\x22\x7f\x7a\x3d\x3c\x9a\x4c\xaa\x71\x10\x2a\x0b\xe2\x10\x6a\x8d\x99\x1a\xaf\xf5\xa5\x88\x1b\x89\xcf\x2e\x75\x06\x18\x7e\xf6\x76\x56\x8c\x50\x28\x58\x4d\xf4\x40\x13\x58\xfc\x92\x18\x89\xe7\x0f\x95\x05\x71\x88\x46\xd8\x17\x44\x45\x73\xd9\x50\x6e\x18\xdb\xe2\xe8\xcc\xbd\xc7\x13\x41\xbc\xee\x53\x93\xc2\xd6\xa9\x16\x7d\xc0\x60\xdf\x7f\x93\x05\xce\xd2\x80\x38\xe4\x5a\x3d\xa9\xde\x65\xd7\x50\xf4\x7b\x49\xb6\xde\x74\xc2\x6b\x7c\x71\x01\x19\x9b\x22\xad\x7d\xde\xb3\x0c\xac\xf9\xfe\x3e\x3c\x58\xf0\x0b\x11\xc4\x41\x6a\x9d\x2d\x46\x02\x5a\xdf\x38\xad\x16\xab\x49\xfd\x26\xdb\xf9\xe6\xa5\xac\xd2\xf7\x41\x7e\x8e\x99\x34\x3f\xd8\x67\x14\x5a\x7b\xf2\x49\xd6\x35\x16\x3e\x4a\x15\xaf\xc3\xbf\x75\x01\x71\xc8\x5c\x25\x89\xd9\x7c\xc8\x66\x9d\xff\x34\x57\x98\x7f\xfe\xc6\xc9\xaf\xf6\x3b\xcb\x89\x2f\x6b\x3b\x43\xde\xdf\xd1\xfc\x7a\x9e\x23\x08\xfe\x55\x2b\x88\x43\xa8\xd5\x73\xf5\xb3\x94\x23\xd5\xad\x3b\xa8\x02\x0e\x93\xa8\xe7\xea\xc2\x7f\x4b\x2d\x0a\x6b\x0a\xcf\xb2\x54\x5d\x19\xfb\x10\xe8\x16\xcd\x07\x95\x05\x71\x08\xb5\x7c\x7f\x4f\x8b\x7e\xc2\xbf\xbb\x5c\x85\x17\x3d\x40\x4f\x8d\x41\x5c\x25\x7f\xd5\x5e\xcd\x5e\x3f\xa6\x9e\xef\xd8\xc1\xab\xeb\x16\x9c\x06\x07\x71\xc8\xfe\xf5\x63\xfb\x71\x16\x2e\xc3\xfb\x68\x4d\xec\xfd\xa7\x0a\x02\x45\xe7\x5a\x3d\xd2\x83\x9d\xce\x33\x96\x65\x3c\x7d\x79\xec\xd4\xfc\x03\xee\x5f\x00\x0e\x39\x8e\xc5\x28\xdf\x36\x59\xd8\x3a\xf4\xce\x4a\x66\xc4\x20\x14\xfc\xf5\xfb\xba\xfc\x5b\x94\x67\x49\x54\xd6\xc5\xa6\x62\x36\xaa\x42\x87\x90\x5a\x20\x0e\x52\xeb\x8c\x31\x12\xd0\xfa\xf5\x3f\x31\x92\xa6\x53\x31\x12\xdb\x8c\x77\xcb\xa6\x95\x8b\x62\xf4\xd4\xb4\x94\xa2\x56\x8e\xde\xe1\x2d\x6c\x9e\xf5\x35\xb9\xa3\xfc\x09\x52\xef\x8a\xdf\x84\x0d\xfe\xfd\x3a\xdf\xa9\x18\x09\x19\xbd\x40\xa7\x6c\x9b\xc9\x8f\x77\xca\x6e\xa3\x2f\xa4\xa9\xd0\x09\x06\x3f\xeb\xbb\x7b\x34\xdb\x08\xd8\xd6\x1f\x3c\xc3\xd8\xee\xf9\xfb\x4b\x9e\x8a\x91\xd8\xef\x57\xbd\x72\x33\x48\xc6\x2f\x30\x7a\x7b\x81\x66\xb3\x24\x36\xa8\xd7\x85\x9c\xf7\x59\xe6\xaf\xa2\x66\x23\x82\x18\xe7\xf3\xbd\xff\x9d\xa5\x45\x50\x5b\x9e\xee\xe0\x03\xa8\xcf\xfe\x54\xd9\x48\x6e\x4d\xa2\xe1\x2a\x74\x31\xea\x8b\x19\xfb\x61\xa6\x60\x44\xf6\x6d\xec\x47\xbf\x1a\xbf\xec\x21\x26\x04\x49\x08\xe2\x10\x12\xde\x5e\x5b\x8b\xee\x27\xca\x56\x4b\xc9\x93\x93\xcc\xfd\xf5\x9b\x39\xa1\x80\xd6\xfb\x6a\x76\x61\xc4\xa3\x9d\xd6\x47\x7e\xc3\x23\xf0\x46\x22\x10\x87\xe8\xe0\x2a\x44\x02\x94\x1e\x8d\x7c\x56\x18\xf3\x25\x4a\x45\x57\x23\x57\xcc\x18\xd8\xb7\x25\x0a\xbf\x5c\xa3\x4b\xd1\x11\xf0\x58\xa8\x87\x0f\x3d\x02\x71\x88\x0e\x8e\x9b\xe5\x37\x9e\xda\xb5\xaa\x60\x21\x76\x5f\x59\x04\x5d\x2a\x94\x48\xd9\xe5\xd8\x17\x6f\x78\x62\x35\x3d\x7c\xf3\xa6\x2c\x3e\x7c\xc2\x04\x88\x43\x34\x82\xbd\x93\x96\x86\xe8\xa3\x9d\x90\x9a\x63\x73\x7c\x06\x47\x67\xc3\x9d\x23\xc7\x27\xb3\x37\x43\x45\xa3\x94\x38\xb7\xde\x4c\x7b\xc0\x7f\x4b\x05\x71\x88\xb2\xd2\x62\x53\xf4\x8e\xb4\x28\xe4\xdf\x1f\x3b\x07\xd5\x5c\xe9\x6d\x79\x2d\x64\x7a\xa9\xe2\x55\xd2\xf2\x7b\xa9\x3f\x45\x9d\xdb\xe3\x94\x50\x07\x07\x71\x50\x07\x3f\x5b\x8c\x04\xd4\x67\x4e\xab\x75\x12\xd9\xb4\xc5\x9e\x7c\x40\x68\xb2\x4c\x65\x2f\x42\xde\x59\x51\xaa\xda\xec\xbd\xd9\x6b\x76\x5b\xe5\x6e\x4d\x51\xd5\x44\x5a\x37\x74\xfb\x20\x0e\x71\xfb\xc2\x11\x4d\x55\x41\x57\x33\x47\x9f\x24\xda\x7a\x2e\xb6\x44\x3e\x67\xf2\xb9\xc2\xf0\x29\x9d\xc3\x98\xaf\xe7\x15\x55\x93\xc4\x90\x34\x1c\x43\x05\x70\x08\xb5\x70\xa6\x94\x9d\xe3\xfa\x6a\x2e\x7b\x94\x14\x26\xa8\x14\x50\xbe\x2c\xe1\x62\x22\xa8\xed\x1a\x29\xb0\x27\x74\xae\xc2\xa6\x26\x81\x47\xbc\x20\x0e\xa1\x56\x52\xcd\xbd\x35\x94\x49\xce\x89\x28\xba\x6c\x86\xe9\xd9\xce\xab\x92\x4d\x63\x4a\x92\x5c\xae\xfa\x85\xd7\x38\xb7\x7b\x1d\x2c\xe0\xdf\x1b\x83\x38\x44\x23\x3c\x5b\x96\x14\x91\xbf\x2e\x17\xc3\xa7\xd8\x73\x4e\x0b\x5b\x4e\x15\x2d\x7a\x4d\xe4\xa3\xfb\xa5\xa9\x8f\x42\xb6\xf1\x51\xf1\x26\x70\x42\x09\xc4\x21\xca\x36\x4a\x32\x7d\xb5\x3c\x19\xf4\x63\x55\xc0\xaa\xbf\x16\x20\x54\x34\xca\xae\x1b\x30\x98\xad\x97\x5e\x32\x7c\xf1\x68\x22\xb6\xe4\x39\xa4\x16\x88\x83\xd4\x3a\x5b\x8c\x04\xf4\x6c\x3c\xad\x56\x7b\x1f\xb3\xa3\xd8\x80\x90\x3d\x06\xb1\xaf\x40\xd0\x53\x89\x79\xe9\xe9\x60\x0d\xb1\x69\xa3\xe7\x2d\x36\x1b\xd2\x2a\x81\x3a\xf0\x6f\x93\x40\x1c\xe2\xf6\x19\x9f\xae\xa9\x8a\xcb\xe3\x8d\x17\x1b\x0f\xd9\x45\x6b\x38\x44\x5a\x95\x9f\x84\xf6\xb4\x44\x3a\xea\xbf\x52\x71\xb3\x2b\x65\x87\xf7\x29\x82\x38\x84\x5a\xec\x0d\x43\x06\x8a\x14\x23\x37\x88\xb9\xec\xdb\x4c\x84\x8b\xb6\xa2\xed\xf3\x82\xea\x42\x7a\xf2\x2b\x36\x03\x7e\xaf\xb4\xff\xbf\xa8\x1e\x88\x43\xa8\xb5\xdc\xf8\xee\xab\x05\xd6\xd6\x26\x25\xb5\x73\x3d\xf5\xf1\x78\x89\x28\xa3\xfd\x96\xf6\x38\x6b\x70\x47\x95\xaf\xc5\xc9\x70\x12\x3c\x34\x05\x71\x88\x46\x60\x2b\x26\xe5\x7b\x85\x2e\xd4\xbe\x8a\xbb\xe1\xce\x74\x89\xda\xa2\xae\xd4\x0c\x47\x5e\x83\x4a\x29\xe8\x30\xde\x7f\x13\x9d\x1f\x5e\x62\x05\x71\x88\xb2\x07\x2f\x03\x9f\xf7\x4d\xa8\x28\xc6\x6b\xb2\xdc\x39\x67\x98\x8f\x77\x2c\xa9\xe8\xd9\x96\x91\x79\xce\x1c\x55\x4f\x4a\xeb\x49\x24\x1c\x9c\x06\x71\x90\x5a\x67\x8b\x91\x80\xbe\xf0\x9f\x56\xeb\xc7\x32\x9b\xdd\xfd\xb8\x4e\xa7\x7c\x8a\xe2\x00\x21\x9a\x25\x17\x21\xc2\x90\xf8\x51\x03\xcf\xc1\x1d\xab\xf8\x29\x77\x46\x2a\x4f\xe8\xf6\x41\x1c\x32\xfc\xc6\xf7\x26\xa2\xe0\x28\xd4\x1e\x7d\xc7\x81\x52\x5d\x37\x6c\xf2\xe2\xfd\xd7\x81\x9c\x58\x57\xc8\xf0\xc8\xcb\x26\xfa\x1f\x4c\xe1\xc1\xe1\x37\x00\x87\x50\x0b\x85\xeb\x01\xff\x5e\xc5\xd3\x2d\x35\xed\xdb\xa8\x2b\x1c\x1f\x0b\xb8\xdf\x6a\xf4\x4d\x61\xd9\xb6\x5c\x18\xed\x21\xa8\x7f\x2c\x0e\xff\x7f\x14\xc4\x21\xff\x9a\x9c\x70\xe3\x6d\xce\x30\x1a\xcd\xdc\xc6\x71\x94\xae\x69\xad\x80\x61\xf0\x9c\x85\xd3\xec\xf5\xb8\x51\x45\xad\xe8\x9d\xe1\x4f\xf0\x3c\x1d\xc4\x21\x1a\x61\x2e\xd7\x44\x38\x9f\xda\xd8\xe8\x82\xbd\x77\x41\x4a\x5d\x89\x6d\x8c\xb5\xa9\x94\x83\x64\x52\x0a\xc6\x43\x03\x55\xfa\x37\x8c\x6f\xa1\xb2\x20\x0e\x51\x16\x78\x78\x09\x14\xe0\x78\x72\xc1\xda\xc5\x47\xee\x17\x71\xe7\xde\x8b\xaa\x0f\x9c\xf8\xfa\x6f\x86\x70\xb2\x84\x93\x6f\xd9\x84\x29\x74\xe2\x1d\x67\x55\xfc\xf9\x77\x8c\x84\xc5\x1b\xb5\x55\xe4\x70\x3f\xae\x27\xfe\xc9\xa4\x73\xd2\x71\x48\x5e\xef\x71\xf2\x7c\xdc\x79\x55\xa5\x17\x71\x3e\x63\x1d\x19\x3f\xff\x85\x5a\x5e\x24\xf3\x8b\xd6\xdd\xef\xc6\x96\xb5\x22\x17\x90\x2d\xfb\xbd\xbd\x14\x8d\xc2\x71\x22\x9b\x73\xe7\x24\x3c\xbe\xd0\x3c\x5a\x12\x11\x23\x01\x55\x3e\x1d\x23\xe9\x6e\x2e\x72\x69\xab\xd8\x0c\x8d\x64\xfb\xee\xe5\x1d\x20\xab\xc2\x18\xa9\x16\x4f\xca\xf6\x8c\xae\xfe\x1c\x93\xce\x73\x49\xb4\xe6\x7f\xa1\x3c\x7b\xa6\x32\xb5\x3c\xa5\x74\x8c\x1c\x0b\xe5\xe8\xe5\x59\xc5\x0c\x4b\x52\x06\x77\x1e\x50\x50\x48\xd2\x50\xb5\x8b\x67\x7d\x26\x80\x63\x24\xa0\x9a\xff\xc4\x48\xce\x93\xfd\xef\x71\xec\x43\xac\xaa\xe8\xd7\x86\x43\x59\x47\x5f\x5f\xeb\x2b\x1a\x0a\xd5\xb3\x77\xd0\xe7\x1e\xb1\x1b\xb4\xfb\x93\x7f\x7c\xff\xb6\xf5\xf8\xaf\x47\xeb\xb2\x28\xb7\x10\x23\x67\xdd\xc4\x40\x9f\x50\xd2\xcd\x69\x66\x8d\xe0\x93\x2c\x8b\x03\x8c\xec\x37\xd2\x8a\x53\xae\x52\x51\xb7\x9c\x3a\x0a\xc4\xce\xd7\x1e\xff\xf5\x60\x1d\x45\x14\x39\x58\xe7\x39\x9f\x71\x7d\xcf\xe3\x9d\x84\x15\xf5\xed\xc9\xed\x78\x6a\xc3\x9f\xac\x94\xb7\x5f\xc5\x99\xd1\xce\xe7\x07\xf0\x60\x66\xb8\x4b\xff\xfd\x25\xb5\x90\x97\x94\x99\x35\xf8\xda\xd9\x51\x15\xb5\x38\xfc\xde\x39\xe4\x0d\xbd\x50\x6a\xbc\xc6\x4b\x01\x4c\x2c\x14\x3e\xaf\xeb\x24\x7f\xe4\x5c\x84\xff\xfe\x92\x0e\xc8\x4b\x1e\xcf\xb0\x7b\x4a\x2f\xea\x0f\x36\x07\x75\x1a\x7d\xc6\x11\x78\x77\x9e\xf4\x9c\xcf\xaa\xec\x15\x5c\xfb\x17\xf1\xeb\x01\xf9\x3f\xfe\xf6\x3c\xc5\x60\x39\x14\x2f\xe4\x25\x3d\x14\xb1\x95\x8a\x71\xcf\xdd\x35\x57\xf9\xd8\xae\x36\x9e\xaf\x9c\xde\x69\xa4\x12\x32\x54\x73\xce\x9b\x75\x76\xc8\x30\xdd\x95\xfd\xef\x2f\x99\x84\xbc\x24\x86\xca\x25\x81\x23\x7d\xf2\x67\x3f\x2d\x69\x6f\x3e\xf6\xed\x1d\xef\xf0\xba\xb2\xa1\xb3\xbf\x59\x1c\x98\xef\x20\xd0\x79\x33\xfd\xe8\xef\x2f\x59\x89\xbc\xa4\xf9\x87\xd2\xc8\x0b\xa6\xd5\xc7\x79\x57\x9c\x94\x0b\x02\x50\x56\x9f\xe2\x5d\xc6\x9b\x1e\x7d\x11\xbb\x14\xc8\xe2\xaa\xf9\x96\xea\x6f\xfb\x88\xde\xd9\x7a\xe2\xe9\x57\x5b\xeb\xe5\x2b\xdd\xdf\xa6\x07\x98\x89\x43\xb2\x66\xa7\x25\xe8\x2e\xba\x69\x2e\x4a\x30\x2f\x90\x60\x29\x19\xc9\x61\xa8\xed\xc8\x5e\x82\x1e\xbf\x20\x0e\xf1\xf8\xad\x19\xba\xfa\xa0\xe5\xb7\x8a\x4e\x14\xcd\x5d\xd4\xa5\x15\x3d\xdd\x0b\x5f\xb2\x16\x77\xef\x4d\x2d\xde\x8c\x73\xb2\x8d\xef\x26\x86\xf3\x1e\x20\x0e\xf1\x6a\x7b\x18\x71\x62\xf2\xe3\xed\x58\x59\xf1\x93\x24\xf9\x60\x81\x8d\x6f\x93\xe9\x2f\xe3\x2e\x72\x98\x2e\x9a\xcc\x71\x6f\xab\x84\x5f\x80\xff\xd6\x0c\xe2\x90\x7f\xec\x8e\x47\x19\xeb\xb1\x7c\x60\x2f\xca\xc9\xa1\xff\x2c\x3c\xcc\xec\x57\x90\xba\x26\x51\x0e\x0a\xeb\x53\x21\xbd\x61\x79\x8b\x10\x78\xab\x11\x88\x43\x44\x19\x2f\x6b\x8c\xcf\x14\xa3\x75\xeb\xd6\x2c\x4c\xf6\x50\xeb\x24\xd0\xd0\x9d\x67\x26\x69\x24\xad\x60\x64\xbe\xb1\x11\x74\xcb\xbd\x10\xfe\x28\x09\xe2\x10\x6d\xdb\x35\x82\xf5\xf4\xf9\x60\x3c\xeb\xb7\xc5\xd4\xeb\x5a\x4c\x25\xa2\x38\x7b\xbb\x51\xba\xa4\xbc\x7d\x18\xf5\xeb\xfd\xaf\x94\xee\x99\x41\x31\x12\x10\xf7\xcf\x69\x24\xe7\xc9\xce\x30\x66\x02\x3d\x70\x4f\x8b\x95\x15\x7d\xf1\xb9\xd0\x45\x0f\x14\xf1\xd2\x3d\x75\x23\xbc\xa3\xab\x3b\xd7\x79\x15\xac\x5c\x74\xd6\x5c\x28\x9c\x7d\x8c\x07\x72\x74\xa0\x9b\x07\x71\xc8\xd3\x48\xc4\x8c\x79\xd5\xca\xca\xa4\xb5\xbc\xd6\x85\x5a\x72\xcb\x1c\x8e\x6b\xba\xc9\x48\x34\xbf\x52\x4c\x35\xfa\x3c\xe3\x72\xcc\x82\x77\xe0\x83\x38\x84\x01\xe9\x34\xef\x87\xcc\xb4\xe2\x0c\xbd\xdc\xb2\x9d\x49\x7f\x9f\x33\x4f\x6b\xb2\xb0\x62\x72\xa0\x7d\x96\x27\x31\xa3\x69\xc0\xf7\xec\x17\xfc\x8d\x13\xc0\x21\xca\x2a\x05\x3f\x9d\x4a\x90\xff\xa2\x3f\xf1\x86\x96\xaf\xec\x8a\x15\xd3\x15\x01\xcb\x17\x18\x97\xad\x7d\x24\x51\xda\x84\x04\x6b\xef\x19\x43\x65\x41\x1c\x42\xac\xdc\x1b\x57\x13\xd2\x6c\x82\x3e\x2c\xf3\x65\xb3\xd3\x53\xb3\xb1\x3d\x5b\xb6\x15\xe1\xbd\xe5\xc9\x5f\xe2\x76\xc2\xbc\x3b\xfb\x0c\xee\xb4\x20\x0e\xd1\xb6\xd3\x85\x52\x6b\x6f\x4b\x2b\x24\xeb\x5f\xd8\xee\x64\xed\x96\xbc\xa0\xe1\xae\xca\xef\x49\x50\x5c\xa9\xec\x1a\xfa\x9d\x79\xff\xb3\x23\x14\x23\x01\x71\xff\x9c\x46\xf2\x7f\xde\xda\x60\xb3\x40\xef\xd5\xff\xb0\xaf\xbf\x8d\xcd\xe4\xdd\xb5\x2e\x07\x9d\xf2\x55\x89\xcf\x5e\x4a\xd2\xac\x17\x2a\x7a\xc7\xc3\xfa\xf6\xef\x13\x9b\x44\x69\xd9\x4d\xc0\x79\x66\x10\x87\xb8\xfb\x8b\xe9\x23\x36\xe3\x64\x12\x2b\x14\x15\x56\x7c\xb5\x55\xc5\xf6\xb9\x5b\xfa\x8a\xb3\xb9\xe1\xcf\x2c\x45\x5b\xdf\xff\x90\xe1\x22\x87\xca\x82\x38\x84\x02\xb5\x1a\xcf\xac\x4d\x83\xbf\xae\x38\x9b\xa4\x99\xa5\x5e\x59\x44\xc1\xe7\x96\xcf\x9a\x10\x8f\xa5\x73\xb8\x77\x6d\xf7\x6e\x6a\x46\x2a\x54\x16\xc4\x21\xca\xc6\x76\xe2\x38\x76\xdc\x9a\xed\x14\x78\x90\x4f\xfe\x91\xdd\xf4\x16\x9e\x97\xdc\x85\x0e\x46\xd4\x1f\x5a\x0d\xe4\x4c\xf8\x65\x42\x70\xfc\x0f\xc4\x21\xcc\xc2\xb5\x65\x66\xb9\x35\xbf\x58\xaa\xb4\x15\x66\x9b\x7c\xb1\x94\xb5\xd2\x66\x64\x60\xb6\xf0\x06\x0f\xdf\x67\xd4\x01\x32\x03\x59\x78\xb5\x1c\xc4\x21\xda\x16\x95\x22\x58\x05\x3d\xd4\xf4\xee\xfa\xf7\xd1\x6f\xaf\x31\x88\x98\xad\xf4\xf0\x28\x8a\x9d\xbd\xd9\xec\xd0\x66\xb9\x9d\x35\xe6\x69\xa0\x89\x1e\x88\x83\xfe\x8d\x2a\x7a\xa6\x89\x1e\x68\xfc\x74\x5a\xad\x6b\xfd\x41\x54\x6a\x71\x06\x63\x17\xc9\xc9\xc9\xca\x6c\x08\x8f\x6f\x30\x78\x70\x66\x6a\xe0\xb8\x69\xc7\x18\xa7\x37\xb8\xd7\xc0\x1f\x0d\x41\x1c\xf2\xf4\xa0\xb5\xf9\xf6\x08\xb7\x51\xc2\x30\x22\xe3\x44\x5a\xbd\xf4\x77\x87\x1d\x86\x47\xa1\xad\x97\x19\x0c\xc8\x2e\x6a\xfe\xb8\x9b\x07\x1f\xf7\x0e\xe2\x10\x0e\x98\xc7\x0c\x3d\xca\x7e\xa3\xe2\xeb\x89\xea\xf2\x59\x60\x45\x82\x44\x2f\xd5\x5b\x0a\x7f\x94\xf7\x9a\x0c\xa1\xd5\x76\xc5\x4a\x2d\xfc\xef\x0b\x10\x87\x28\xeb\xb1\x1f\x6d\xf0\x78\x97\x62\x57\x79\x6f\xc5\x66\xea\x5d\xee\x62\x57\xb5\x65\x8c\x6a\xf3\x88\x1e\x59\xa7\xeb\x2d\x3f\x8d\x71\x78\x87\x2c\x88\x43\xa8\x75\x21\xa9\x9f\xeb\x44\x9d\x82\xcf\xe4\x58\xc0\xac\xee\x6e\xc9\x75\xd6\x89\x4f\xa3\xf9\x57\x15\x14\x95\xb8\x50\xbe\xac\xd9\x28\xc8\x42\x65\x41\x1c\xa2\x6d\x7d\x16\x88\x1f\x4b\x5c\x0e\x0f\x4a\x79\xf1\x31\x91\x3c\xee\xc1\xde\xb5\x37\x1a\xf8\x01\xd1\x5f\xa3\xda\xf3\x13\x1b\x9f\x9b\x58\x37\x42\x6a\x81\x38\x48\x2d\xad\x33\xa9\x05\x1a\x27\x9f\x56\x0b\x95\x60\x54\x57\xb1\x61\xee\xbb\xb8\x4a\x55\xe7\xc3\xb4\xc6\xab\xd5\xa4\xbd\x5f\x43\x19\x2c\x5a\x6f\xfb\x70\x44\x71\x19\x49\x54\x43\xb7\x0f\xe2\x10\xb7\x3f\xc6\x29\x89\xdb\x51\x9f\x62\x79\x5c\xa4\x48\x74\x93\x5f\x79\xdf\x5b\x5e\xcc\x88\xc6\x5c\x41\x8e\x70\xf7\xb8\xf1\x8d\x74\x2c\xfc\xe7\x2e\x10\x87\x70\x60\xee\x1b\xed\xcb\x9e\x1b\xee\xb5\x2d\x11\x3a\x53\x12\xdb\x53\x8d\x2d\x9a\x0f\xbb\x27\x69\x69\x25\xae\x24\xed\xdc\xdd\xc6\x5e\x5c\x82\x67\xe5\x00\x0e\x51\x96\xb7\xfe\x51\x93\x1a\x26\xf1\xf2\x07\xb6\xda\x54\xc5\xe4\x81\x92\x47\x4b\x72\x97\xde\x1e\xda\x86\x37\xa0\x31\xb3\x46\x56\xdf\x82\x1f\x2f\x20\x0e\xa1\x96\x6b\xe1\xee\x0f\xca\xf7\xbe\x1f\x76\xf4\xf8\x2e\xa4\xdd\xa0\xbb\xe0\xf5\x3d\x22\x1d\x5b\xa5\xc8\x30\x2f\x72\x86\xfd\xa0\xfb\x2d\xbc\xfc\x0b\xe2\x10\x6d\xeb\xdc\x26\x2b\xfc\x2d\xec\xed\x48\xb6\xeb\x8d\x6c\xb1\xd2\xd1\x01\x92\xa8\xc2\xd0\x7c\xce\x0e\x62\x95\xcd\x71\x8d\x96\x0c\xab\x04\x48\x2d\x10\x07\xa9\xe5\x70\x26\xb5\x40\xf3\xa1\xd3\x6a\x8d\x31\x3e\x7f\xdf\x52\x60\xcd\x98\xed\xe7\xb5\xff\x28\xcf\x51\xe5\xfd\x7d\x67\x2e\x86\x64\x31\x87\x5c\x99\x07\x75\xf9\xe4\x94\x6b\xb0\x03\x00\x0e\x71\xfb\xbe\x1e\x18\x42\x9c\xa1\x82\x73\x95\xe4\x29\x6c\xa3\xc1\xf3\x35\xfc\x7d\x85\x51\x82\x8f\x1b\xcf\x1b\xfd\x68\x9d\x7e\x70\xd9\x17\xfe\xd7\x1c\x88\x43\x38\x60\x1b\x22\xc3\xf5\xc2\xfb\xb0\xc5\x4b\xc6\x54\xf8\x9e\xad\x82\x05\xa1\xa1\xce\x67\x8c\x84\xec\x2f\xc9\x09\xde\xf2\x7c\xe8\xa2\x2a\x50\x59\x10\x87\x28\x9b\xaa\xf9\xdb\xde\x51\x65\x90\x46\xf1\x7e\xc1\x93\x65\x5e\x5c\xb4\x9f\x38\x15\xa9\x16\xfa\x9c\xef\xf9\xab\x1d\x33\xc5\x63\x5f\xc1\x1d\x01\xc4\x21\x0f\x3b\x52\xbc\xf3\x2e\xbb\x4e\x92\xec\x9c\xdf\x48\x41\xeb\x37\xd3\x82\x8b\xae\x4e\xdf\x3c\xe3\x08\x88\xbb\xd3\x30\x38\xcf\xbb\xb7\xc3\x3f\x83\x02\x71\x88\xb6\xcd\xfc\x64\x10\xf4\x05\xbb\x87\x30\xd2\x3c\x4f\x6c\xb0\xe3\xcf\x45\xe6\x57\x6f\x35\xfd\xa6\xf6\xc6\xff\xc4\x1d\x3e\x18\xf6\x0d\x0b\x81\xd4\x02\x71\x90\x5a\x5e\x67\x52\x0b\x34\xef\x3d\xad\x56\xc0\xb2\x78\xce\x4c\xc1\x53\xcb\xc6\xb5\x6f\x1f\xbd\xb7\xd1\x5d\x26\xd4\xfd\x77\xb2\xc5\x15\x43\x4c\xf4\x92\x9a\xee\xc9\x19\xc3\x79\x0f\x10\x87\xb8\x7d\xff\x40\x8c\x48\xad\xbb\xdc\x5d\x0f\x74\x0c\x5f\xc4\xb6\x39\xac\x1e\xab\x5d\xa3\x47\x4d\x23\x5c\xfc\x94\x7d\x28\x51\x7c\x6e\x21\x00\xde\xe9\x06\xe0\x90\x6a\x65\xb6\x32\xbd\xe5\x3c\x4a\x74\xe6\xbd\x74\x87\x7d\x19\xf7\x56\xce\x9d\x72\x2e\xc1\xd8\xf7\xb1\xea\x18\xf9\x71\x16\x72\x37\xe0\x4c\x1d\x88\x43\x94\xbd\x77\x37\xd7\x0d\x45\x48\xc9\xa5\x62\x84\xd1\xf2\xfc\x03\xa1\x77\x63\x6e\x75\x0a\xd9\x01\x09\xc1\x2f\xbb\xe3\xc8\x1d\xc6\x29\xe1\x17\x22\x88\x43\xa8\xf5\x8d\x8c\xb8\x7e\x6c\xec\x4b\x96\x49\x48\x90\xa1\x43\xa1\xf1\xad\xd6\x7a\xde\x37\x0a\x6c\xf1\xfe\xde\x6f\xe3\xdf\x70\xfb\x16\xc1\x71\x68\x10\x87\x68\x5b\xe5\x87\xda\x51\xe9\x4f\xf6\xc3\x63\x9e\xdc\xae\x2c\x7e\x89\x3a\xb4\x78\x21\xea\xcf\x22\x45\x7f\x27\xca\xeb\x86\xc6\x30\xeb\xd2\x5a\x48\x2d\x10\x07\xa9\x95\x74\x26\xb5\x40\xeb\x1b\xff\xe1\xcf\x5d\x42\x1f\x37\x79\x6f\x31\xb1\x98\xbc\x50\xae\x73\xe5\x8d\xf9\xb0\xf2\x42\xb0\x23\xee\x35\xa3\x24\xbf\x3e\x49\x67\x82\x65\x28\xbc\x99\x1a\xc4\x21\x6e\xdf\xba\xad\x71\xaa\x7b\xdc\xc0\xef\xbe\x1b\x5f\x7e\x9e\x21\x01\xce\x52\xfe\x35\xdf\x37\x12\x76\x62\x77\x4b\x7d\xf5\x84\xaf\xa0\xc3\x63\x2d\x10\x87\x70\xa0\x31\xd2\x72\xea\x71\xcb\xde\xcb\x8a\x7b\xb3\xde\xc2\x11\x7a\x6f\x31\xed\x6a\x96\x6a\x14\xf9\x59\xd5\x1d\x53\xc6\x99\xcb\x1e\x10\x42\x65\x41\x1c\xf2\x40\x39\xcd\xcc\xfe\x96\x90\x49\xec\xfb\x87\x16\x6e\x89\x89\x52\xc6\x4c\xbb\x38\xcc\x27\xd4\x53\xae\x27\x7e\x5e\x6b\x62\xf7\xf4\xfe\xdf\x81\x72\x00\x0e\xa1\x56\x3e\x49\x6f\x27\xce\x6e\x6b\x9f\xb7\x6f\xe4\x78\xee\x91\xd0\x1d\x9d\xd1\x07\x82\x44\x77\x97\x7a\xb8\x5c\x9b\x3e\x37\x8e\xc6\xd9\xc2\x47\xb2\x00\x38\x44\xdb\x9a\x86\xe2\x5d\xe9\xa0\x52\xfb\x83\xda\xf3\xe3\x17\x2d\x3b\xd9\x5d\xeb\x2f\x75\x71\x6a\xa5\x77\xdc\xed\x4b\x17\xa5\xaf\xa0\xa5\xc3\x4f\x2d\x10\x07\xa9\x55\x79\xb6\x18\x09\x68\xfd\xfa\x9f\x18\x09\x4a\x1f\x72\xd1\xad\xba\xc1\x33\xfa\xa6\x9f\xb1\xeb\xc3\x3f\x4d\xb5\x09\x18\x1c\xd3\xcd\xe1\x3a\xc4\xc7\xf6\x3c\x95\x47\xf5\xb8\xc7\xb4\xc3\x6b\x15\x7f\xbf\xce\x37\x79\xea\x34\x92\xb0\x9d\x57\x17\xe4\x1b\x03\x08\x7c\x6a\x44\x23\xc9\xcb\x24\xb9\xb0\xd0\x3e\x3c\x57\xff\x31\x54\x8c\x21\x74\x70\x77\xb4\xdd\xf1\xef\x2f\xb9\x8f\xbc\xe4\x11\xf3\x9c\xd8\x13\xe3\x24\xb3\x13\x8d\xed\xc5\x70\x2b\xc5\xf5\x2b\xbf\x3b\x30\xf1\xd5\x5e\x6c\xce\x7e\x8b\x23\xed\x7e\xca\x4d\xfa\xdf\x59\x5a\x04\xb5\xe5\xe9\x0e\xde\x2d\xd2\xae\xe0\x9b\x48\xf2\xf1\x0b\x47\xf6\xf7\xc5\x1c\x07\x97\x27\x3f\xbf\xb0\x06\x75\x27\x7e\x98\x1a\x29\x2d\xb4\x61\xdd\x81\x3f\x18\x81\x38\xe4\xbf\x6a\x39\x16\x9a\xe4\xea\xe3\xd1\x6a\x65\x6c\xc8\x52\x19\xf5\x25\x8a\xaf\x4e\x4e\x6f\x5f\x51\x37\x8c\xb1\xf6\xc1\xc8\xa1\xbb\xce\x0f\x95\x05\x71\x88\x9e\x28\x58\xbb\x24\x78\x42\xbd\x44\x2e\x87\x1e\xe4\x70\xf1\xd1\xa3\xe0\x5a\x29\x56\x6b\xe2\x26\x2a\xe5\x7d\xea\xdd\x6d\xa3\x70\xfa\x2f\xf0\x56\x71\x00\x87\x28\xcb\x37\xc5\x1c\xba\x9e\xe9\xf4\xc7\x90\x64\x36\xd0\xe7\x8d\x87\xa7\xf4\x8d\x5b\xb9\x3f\x9e\x18\xce\x29\xe6\xd3\x77\xf9\x31\x46\xf4\x42\x65\x41\x1c\xa2\x83\x33\x61\x89\x88\x6e\x0d\x6f\x0c\xb5\x5b\xda\x71\xbf\x68\xc6\xe0\x22\xfb\x34\x79\xee\xe7\x8a\x9f\xf2\x0c\x96\xc2\x57\x54\x4a\xf2\x0b\x50\x59\x10\x87\x9c\x4c\x7d\x99\x13\xdd\x1c\x79\x2c\xc2\x20\x3e\x76\x70\xb5\x3c\xd5\x94\x5f\xab\xee\x1a\xa1\xed\xfd\xe9\x27\xd7\xc2\x1e\x50\xcc\xe3\xee\xc0\x93\x29\x00\x07\x75\xf0\xbe\xb3\x9d\x46\x02\xe8\x33\xa7\xd5\x4a\x9d\x8d\xe5\x5e\x0d\x17\x4a\xcc\xe4\x23\xcd\x67\x4d\x79\x67\xfa\xe6\xfe\xbb\x4f\xda\x76\xf2\x4a\xd1\xad\x3d\x4c\x25\x4a\x29\xf0\xd9\x0e\x20\x0e\x71\xfb\x4e\x89\x2f\x1d\xfd\x87\x5f\x3f\x4e\x6c\xf8\xb2\x4a\x80\xff\xc1\xf0\x05\xaa\xb3\x1e\xc6\xbd\xdc\xad\xfb\x78\xbf\x12\xb5\xfc\xc5\xe1\xed\x1e\x20\x0e\xe1\x80\xec\x0b\xd2\x84\xea\xc1\x85\x26\xd5\xec\xb0\xae\x10\xdb\xdc\xeb\x9f\x97\xcd\xb2\x7c\x3c\x35\x92\xd8\x32\x1b\x25\x1e\x71\x3f\x64\x82\xca\x82\x38\x44\xd9\x0f\x6b\x97\xda\xf2\x33\x68\xb7\xc2\x29\xe7\xe9\xe3\xf5\x30\x7d\xb0\xee\xa5\xbc\xa2\xf3\x1a\x90\x8b\xa4\xbf\x7c\x5f\x3c\xe2\x05\x1c\xf1\x05\x71\x08\xb5\x92\x8d\x2d\x02\xb9\x38\x0e\x76\xd4\x69\x48\xb9\x5f\x1c\x3d\x0f\xb9\xbb\x40\x28\xcc\xb7\x12\x90\xdc\x51\x7f\x6c\x60\x63\xfe\xe9\x35\x54\x16\xc4\x21\xda\xd6\x6b\xa3\x72\xc4\x3f\x2a\x8d\x81\xdb\x8e\xa8\x5d\x75\x25\xd5\x99\xae\xf6\xc3\xb6\x44\xb5\xf2\x6b\x3c\x99\xa9\xcc\x5b\xef\x1e\xb7\x43\x6a\x81\x38\x48\xad\xc9\x33\xa9\x05\x7a\x36\x9e\x56\x4b\xbe\x6a\x51\x5e\xf4\x9d\x15\xde\x53\xc2\xc6\x17\xd3\x29\x36\xb6\xcd\x75\x93\xa8\x55\x27\x0d\xb5\x1c\x6a\x3c\xfb\x7d\x4b\x57\xe1\xbc\x07\x88\x43\xdc\xfe\x97\xb0\x7c\x0e\xd5\x61\x2d\x57\xdc\x01\x19\xdc\x2f\x9d\x62\xac\x6f\xdf\xeb\x7f\x30\x98\x2e\xd6\x2c\x93\xa1\x9a\x5b\xcb\x8d\x87\x97\x6c\x41\x1c\xc2\x81\x22\xfc\x79\xfd\xe0\x28\xce\xbb\x69\xfd\x82\x0a\xb6\x5c\x5d\xeb\x49\x77\x58\x30\x18\x97\x47\x04\xc5\x6d\x3d\x88\x57\xd5\x2e\xc3\x71\x32\x10\x87\x28\x1b\x8f\xc3\xd9\x93\x74\x93\xb6\x83\x31\x60\x7e\x75\x80\xae\xc9\xea\x3e\x71\x0c\xf5\x96\x9d\xea\x43\x46\x4e\x97\x12\x6c\xa6\x32\x38\x46\x02\xe2\x10\x6a\x79\x9e\x93\xb5\xaf\x89\x57\x52\x95\x99\xbb\xf0\x5a\x56\x01\x5d\x70\xff\xd2\x50\x8f\xed\x35\x42\x9c\xe3\xef\x6a\x7a\x47\xe3\x6d\x5e\xf0\x2e\x12\x00\x87\x68\x5b\xb1\x5d\x39\x1d\xcb\x24\x12\xc2\xdc\xc7\x82\xed\x97\xd8\x99\x65\x4b\x16\x77\xb6\xd3\x67\xf4\xaf\x9a\x4d\x76\xbb\xfa\x9f\x4f\xc6\x82\xd4\x02\x71\x90\x5a\xfb\x67\x52\x0b\xf4\x85\xff\x3f\xec\xac\x4d\x1c\xff\xbe\xde\x3e\xb9\x87\x17\xa7\x7f\x1d\xff\xc5\x88\x93\x1e\x6b\x66\x7b\x55\x4f\xf5\x2f\xdc\x5b\x34\x3e\x3a\xef\x3b\xe1\x43\x53\x41\x1c\xe2\xf6\x87\x0d\x8e\x7f\xf4\x32\x78\xc7\x05\x1c\xb1\xa2\xe5\x1f\x93\xd6\x94\x3c\x36\x1c\xf0\x6c\x0f\x0d\x52\xbe\xb4\x3c\xe6\x80\x2b\x03\x9f\x9f\x03\xe2\x90\x31\x92\x54\x6a\xab\x2c\x1e\xef\x90\x5b\xcb\xba\x25\x5f\xda\xfd\xc8\x23\x5d\x1b\xef\xd0\x86\xc8\x58\xdf\x78\x1a\x79\x60\x67\xca\x79\x11\x8e\x91\x00\x38\x44\x59\x63\x8f\x9f\xbd\xab\xfd\x06\xd7\x68\x42\x59\x6b\xb8\x95\x05\x2a\x3f\x0a\x0d\xb3\xdc\xe2\xda\xca\x1c\x88\x1a\xbf\xfa\xf3\xdc\x68\x2b\x54\x16\xc4\x21\xd4\xc2\x6f\x59\x5e\x7b\xe3\xc9\xe3\x62\xc0\x6d\x9e\x91\x76\x78\x73\x2a\xb8\x14\xcf\xd0\x72\xe1\xc1\xec\xca\xed\xa7\x3b\x5a\x8b\x72\x47\x50\x59\x10\x87\x68\xdb\x33\x9f\x46\x62\xea\x41\x26\x73\x95\xd6\xdc\x78\xc9\x59\xbd\xe1\x23\xc3\x8b\xcb\xf1\xae\x83\xd5\xf7\xa3\x98\x24\x39\x64\x05\x3b\x25\xa2\x68\xaa\xff\x1d\x23\xb9\x84\x85\xff\xb4\x2c\xdd\x75\x13\x93\x3b\x72\x5a\x66\xb6\x28\x4e\x00\x07\x53\x7d\xd7\x0d\xf3\x43\x35\x4a\xb2\x79\x8f\x3b\x9a\xe6\xbf\x50\xf7\x9e\xaa\x96\xfe\xf8\x6c\xc1\x44\xc2\x94\x1e\xa3\x80\xf8\x7e\x03\x13\xfa\x09\xed\xbc\x8c\xa7\xdf\x7c\x8c\xe6\x9b\xf2\xbe\x4d\x22\x62\x24\xa0\xca\xa7\x63\x24\x01\x7e\xf7\x8d\x2c\x24\x7b\x2d\x7e\xbf\xb3\xbd\x20\xea\xbe\x51\x2f\x48\x66\x50\xf8\xc2\x30\x53\xe3\xc3\xd7\xf8\x54\x8a\x76\xf6\xb5\x7f\xbf\x1d\x45\x0f\xcd\x6a\xbe\x1b\xa7\x7b\xed\x3e\x3c\x0c\x27\x72\xfb\x29\x46\x2e\x69\x71\xc1\xe3\x97\x3e\x6b\xed\x41\x90\x83\xba\x8c\x1a\x1c\x23\x01\xd5\xfc\x27\x46\xa2\x8e\x88\x91\x6c\x3f\x76\x62\xa7\x20\xb6\x1c\xa0\x62\xfd\x6c\xda\x8a\xc3\x96\xe0\xfa\x8c\x61\x8d\x61\x8e\x84\xba\xfc\xcf\xb4\xca\x31\xc6\xc0\x9b\xbf\x8e\x91\x48\x21\x63\x24\xb2\x3c\x33\xef\x7f\xdf\x23\x35\x8d\x42\x27\xba\x7f\xe9\xe3\xa6\x2f\xa5\xe8\xe1\x0f\xb5\xe7\x11\x97\xb4\xe6\x3b\xac\xac\x2a\xf8\x44\xfe\x7a\xb0\x2e\x75\x2a\x46\x72\x95\xf5\xf8\x5e\x8b\x9e\x9b\xf2\xe7\xca\xca\x90\x67\xe1\xea\x93\xca\x34\xf6\xfa\xb5\x1d\x68\x72\xf7\x0d\xfa\xef\x2b\x6c\x62\xaa\xfc\xfd\x25\x4f\xc5\x48\xee\xfa\x1f\x0c\xf6\x79\x45\x67\x4c\x9d\xc7\x22\xcd\x65\x3c\xc8\xc7\x88\xf1\xb3\x16\xa9\x25\xa9\x3f\x0e\x09\x58\xeb\xc6\xeb\x2d\xfb\xfb\x4b\x9e\x8a\x91\x70\x1d\xac\xbc\x57\x71\xa1\x4e\xfb\xa1\x1a\x59\x30\x29\xef\xcf\xc8\xa1\xea\xc2\xe2\xbd\x4f\x20\xb8\x90\x45\xa1\xc7\xce\xb6\xa3\xfe\xf7\x97\x3c\x15\x23\x71\x6c\xad\x10\xb7\x59\x78\x75\x1d\x93\xcd\x86\xb6\x38\x3f\xea\x61\x96\xb8\x21\x07\xe5\x88\xd5\x6b\xff\xa2\x75\xfc\xb0\x0b\x94\xfc\x7f\x7f\xc9\x53\x31\x92\xa6\x75\x4e\x5d\x94\xe7\x34\xbf\x19\xe4\x47\x71\x3a\x6b\xbf\x16\x96\x15\x3e\x74\x54\x17\x67\x53\xd2\x7e\x9c\x83\x8e\x36\x33\x6b\xfb\xf7\x97\x3c\x15\x23\xb9\xa0\x94\x4c\xed\xf9\x91\x80\x5e\xbb\x00\xdf\x2e\x45\xad\x8a\x3e\xa3\xd7\x55\x3a\x2f\x55\x06\x3f\x2f\xf6\x59\xc7\xb4\x52\x8c\xeb\x7f\x67\xae\x07\xea\x89\xa7\x5f\x6d\x29\x3f\xa3\xb6\xb4\xd2\xad\x29\x8f\xdb\x1b\x18\xdf\xb9\x4f\xe9\x17\x46\xa8\xd2\xaf\x5e\xc7\x79\xc5\x46\xdf\x15\x28\x35\x49\xe5\x07\x3d\x7e\x41\x1c\xe2\xf1\x2b\xda\x43\x3f\x68\xc1\x20\x20\x36\x9b\x72\xce\x71\xaf\x5d\x7c\x41\x27\x27\x4e\xe9\xf5\x92\xcf\x79\x7f\x8e\x27\x17\x96\x2d\x7e\xec\x41\x65\x41\x1c\xe2\x1d\xf4\x99\xdd\x49\x15\x2d\xf5\x63\xf0\x2a\xd1\x47\xc1\xe6\xdf\x2d\xd5\x1f\x96\x18\x1c\xb2\x0b\x1b\xff\x98\xa7\xbf\x88\x15\xf7\x55\xbb\x01\x95\x05\x71\x88\xb2\x51\x69\xa8\xae\x16\x3b\xdf\xd9\x65\x3b\x8b\x8e\x8b\xdb\xbb\x57\xe9\x68\xcc\xa4\x3b\x51\x72\x4a\xce\x3b\x7e\x0b\xd3\xcb\x50\x80\xff\x3e\x03\xe2\xfc\xa4\xd1\xfe\x5d\x76\x35\x9b\x28\x5f\xba\x47\x6d\x02\x15\xbb\x28\xa5\xe4\x72\x84\xf0\xf8\x5a\x48\x6d\x74\x81\x7a\x81\xe6\xeb\xe6\xae\xfc\x78\x0a\xf8\xeb\x06\x88\x43\xfc\x35\x6e\x65\xfa\x66\xf2\xe4\x39\x81\xbc\x4c\x9c\x73\xbe\xf4\x49\x84\x6f\xbc\x43\xf7\x4e\xc8\xdd\x3a\xd7\x27\xb9\xb8\x4b\x35\x12\xcb\x17\xa1\x18\x09\x88\xfb\xe7\x34\x12\xf5\xb3\xc4\x48\x40\x0f\xdc\xd3\x62\x7d\x7a\xee\x94\x8c\x27\x3e\x10\x95\x49\x98\xc6\x16\x4f\xe3\xfb\xe4\x86\xdc\xf0\x62\xa6\x3e\xef\x66\x97\xe2\xf0\x58\x62\x36\x2d\x2c\x16\x88\x43\x88\x15\x48\x93\xbe\x43\x64\x9a\x6e\x34\x99\xde\xcd\x84\xb7\x51\xf5\xd5\x83\x3d\x80\x3e\x57\x5d\x19\x33\xb8\x8a\x72\x9a\xda\xd6\x23\x0e\x5e\xd6\x07\x70\x08\x03\x36\xe6\x0c\xa9\xc6\xed\xf6\x30\x34\xf4\x0a\x5a\x9e\x24\x88\x7b\xd9\x06\x4f\x0e\xdc\xcb\x32\x5c\x31\xe2\x6d\x31\xf5\xd6\x0e\x81\xbf\xc4\x80\x38\x44\xd9\x96\x4f\x62\x0d\x2b\x8b\x17\xb6\xc5\x93\x71\x9b\xf6\xdf\x61\x97\x7e\x92\xa0\x61\x8e\x52\xeb\xbc\xd6\x77\x41\x2f\xa6\xe6\xf8\x2e\x31\x54\x16\xc4\x21\xc4\xfa\xf6\x4e\x1d\x7f\xec\x61\xc8\xb3\x85\xac\xb5\x4f\xeb\xf5\x71\xb6\xf8\x78\x83\x25\x7a\x41\x59\xe7\x0b\x17\xd6\x84\x8b\x96\x67\x34\xe0\x05\x68\x00\x87\x10\x8b\xea\xc7\xa2\xfe\x60\x93\x83\x68\xc9\xb1\xfc\x60\x40\x5a\x86\x41\xf7\x07\x0d\x47\x0c\xae\x4b\xba\x81\xa6\x81\x4f\x9a\xe7\xde\x7d\x85\x62\x24\x20\xee\x9f\xd3\x48\xa4\xce\x14\x23\x01\xbd\x57\x4f\x9b\xe5\x8d\xd6\xa6\x9c\x6a\x48\x40\x5f\x86\xfe\xea\x46\xdf\xe3\xb6\xca\x9f\xfd\xb8\x1f\xf9\xbc\x46\x7f\x4f\x97\x99\xd9\x8a\x45\x8c\xc2\xc3\x66\x10\x87\x30\xcb\xae\x26\x06\x45\x64\x35\xa0\x58\xd0\x24\x32\x2e\x99\xd7\x98\xff\xcd\xd5\xa5\x47\x44\xd4\xcd\x8c\x7a\x1a\x6b\x46\x74\x61\xfb\xf0\x9e\x11\x10\x87\x50\x80\x3a\xfc\xe0\xbe\x89\x27\xe6\x55\x76\xa1\xf3\x87\x36\x4d\x71\x17\xab\x29\x1d\xb0\x73\xb7\x2f\xe8\x52\xa8\xbd\x54\x1a\x9d\x35\x4f\x84\x77\x47\x02\x38\x44\xd9\x7a\x63\x49\x17\x87\x92\x05\x0e\x61\xb2\x9e\xdb\x86\x41\x4a\x5c\xd9\xbb\x59\xe7\xa3\x51\xe9\xcc\x12\x58\x64\x8a\xb6\x5d\x88\xe1\x63\x27\x41\x1c\xc2\xac\x3c\x67\x92\x1a\xfe\x23\x77\xb2\xb9\x65\x43\xaa\x65\xba\xa4\xa6\x85\x74\x13\x3c\x19\x91\x85\xd7\x69\x7c\x52\xe7\x2c\x3f\x90\x2b\x41\x65\x41\x1c\xc2\x2c\x34\x8b\xf7\x7e\xed\xb7\xb7\x4a\x4a\xff\x38\xe7\x9b\x3a\x59\xa6\x11\x5c\x31\xee\xdc\x7f\x55\x3c\x25\xee\xaf\xd1\xe1\x13\xf1\x91\x0c\x9a\xe8\x81\x38\xe8\x67\xa7\x67\x8b\x91\x80\xc6\x4f\xa7\xd5\x52\x2e\xd3\xa7\x30\xb3\x79\x1a\x3d\x47\xc3\xdd\x13\xc2\x6a\x54\xd6\xb5\x5d\xd5\x97\x3e\xa9\x6e\x48\x3a\x94\xe0\x51\x9b\x29\x61\x0a\x9f\xef\x01\xe0\x10\x6a\x55\xe9\xcd\xe3\xfa\xa0\xc7\x75\x3e\x9f\x92\x13\xa8\x64\x32\xfb\xdc\x31\x21\xf6\x40\x30\x84\x2b\x4c\x7c\x3b\xdb\x8f\x43\x7e\xd0\x19\xde\x29\x0f\xe0\x10\x0e\x5c\x44\xcd\xeb\xd4\x61\xb8\xbb\x9c\xc0\x47\xb9\xc3\x48\xc8\xbf\x60\x11\xd4\x59\xc0\xec\x18\x35\x48\xc2\xe4\x30\x7f\x7d\x22\xef\x01\x1c\x7c\x02\x70\xc8\x9f\x8a\x87\x5f\x24\x1c\xb1\x10\xc1\x0d\xba\x4f\xfc\xbe\x66\x88\x89\xb1\x3c\xf0\xf5\x27\xbb\x79\x77\xda\x98\x96\x65\x5d\x37\xd4\x41\xf8\x14\x02\x10\x87\x50\x4b\x28\x7c\x20\x5e\xa1\x64\x9d\x26\xc6\x57\xb3\x39\xc8\xa5\xe9\x1d\x06\xe7\x37\xda\x24\xaa\x9e\xb5\xa7\x03\x75\x84\x63\x19\xc1\x70\xe8\x05\xc4\x21\xd4\xda\xfe\x69\xd5\x66\x57\xd7\xae\x47\x4c\xa5\x76\xf0\x35\xf7\x86\xf7\x85\x74\x75\xda\x41\xe7\x39\xe3\x2f\x6f\xd2\x72\x7e\x52\x71\x2b\x43\x6a\x81\x38\x48\xad\xb3\xc5\x48\x40\xe3\xe4\xd3\x6a\x4d\x73\x1c\x2b\xca\x58\x99\xd4\x91\x1f\x6c\xf3\x1c\x9c\xb3\xdd\x98\xa3\x51\x40\xc1\xac\x20\xab\x7e\xda\x23\xb4\xaa\x3b\x6c\x06\x1f\x1f\x04\xe2\x10\x6a\x4d\x4e\xdf\x27\xda\x26\xf4\x74\x56\xcd\x47\xd3\xa2\xb1\xfc\x92\x3c\x54\xc7\xd2\xe3\x9a\xac\x14\xbd\x72\x78\x98\x18\xd0\x23\xf0\x02\x2a\x0b\xe2\x90\xfb\xfa\xed\xe5\x9a\x4b\x26\x18\x18\x39\x05\x0c\x2c\x2c\x7f\x5d\x70\xcb\x7d\x8b\x25\x1d\xf2\x8e\x9f\x23\xd0\x24\xa4\xbf\x35\xad\xda\x07\xde\xd7\x0f\xe0\x10\x65\xd5\xc3\xeb\x8f\xfa\xce\xcf\x85\xba\x3f\x3a\xd6\xbb\x58\x15\xb0\x19\xf6\x8c\x00\x4d\xb0\x68\xda\xb1\xac\x75\x37\xf2\xee\xcd\x67\xcf\xa1\xb2\x20\x0e\xa1\x96\x1f\xbb\x1b\x49\x20\xda\xa8\x32\xc6\x4e\x33\x8d\x29\x7b\x99\x5d\x79\xcb\x00\x69\x46\xfc\x98\xbe\xfd\xcc\x1b\x72\xe3\xbe\x71\x78\x50\x00\xe2\x90\xef\xc3\xac\xdf\xd1\x98\x7d\x51\x4b\xc2\xd7\xea\x03\xbe\x4f\x7c\x38\x3f\x28\x79\x4b\xeb\xe1\x85\x23\xa7\xf4\x71\xe9\x08\x86\x02\xcd\x78\x48\x2d\x10\x07\xa9\x75\xb6\x18\x09\x68\x3e\xf4\x1f\x7e\x6a\x93\xe1\x3a\x3a\x4a\x1f\x93\x33\xf9\x11\xa5\x94\x2e\xda\xd1\xee\xc8\x55\xc7\x96\xc6\x88\x59\xa2\x42\xe4\xeb\x3d\xf5\x1f\xd7\x08\xe0\x63\x43\x00\x1c\xf2\xb4\x04\x6b\x71\x5e\x21\xa6\xe2\xb1\x4f\x4c\x1c\x0d\xfb\xe7\xbb\x79\x7f\xda\xd6\x32\x75\xef\xc9\x3e\x78\x29\x91\x77\x63\x08\x0b\x1d\xfe\xdf\x25\x88\x43\x38\x40\x4b\x65\x29\xec\xfe\x54\xe6\x6a\xf1\x94\xcc\xf9\xca\x14\xd9\xbc\x8d\x4c\x34\x36\xa1\x0b\xb9\x34\x4a\xcf\xee\x5a\x1b\x14\x05\xc0\xbf\x61\x02\x71\x88\xb2\xa1\x33\xe4\x3b\x8b\x39\x34\x2c\x21\x26\x14\x77\x7d\x1e\xb1\xd4\xb8\xfb\x4d\x7d\x9b\xb7\xcf\x21\xb9\xcc\x5f\x8f\xbb\xff\x96\x0c\x3e\x43\x09\xc4\x21\xd4\x22\x0d\xe7\x0d\x0b\xe2\x62\x9c\xd5\x88\x34\x52\x7b\xe6\x70\x57\xf4\x81\x63\xaa\x98\x18\x7a\x82\x1d\x16\xdd\x5d\xd6\xb7\xcf\x9e\xc0\xe9\x2f\x10\x87\x50\xab\x2c\xce\xd9\x24\x46\xdc\x8a\xf1\x1c\x5e\xd6\xb6\x95\xe5\xb9\xbb\x92\x92\x03\xd3\x3d\x1d\xbd\xc3\xea\x1a\x57\x3f\x3d\x31\x7e\xf7\x0a\x52\x0b\xc4\x41\x6a\x9d\x2d\x46\x02\x9a\xf7\x9e\x56\x8b\xd2\x94\x90\xd1\xfe\xf1\xee\xfd\x34\x71\x7f\xe9\x7b\xc2\x86\x46\xc6\xd5\x5b\xf4\x33\x3d\xfa\xb6\x45\xa1\x0f\xa4\x65\x0b\x0a\xe1\x6d\xbf\x20\x0e\x79\xe8\xd9\x9c\xe9\xdd\xde\x31\x22\xda\x48\x4c\x47\x05\x5f\xe3\xb5\x1f\xac\x31\xed\x6a\x3c\xe3\xb6\x01\x94\x47\x49\x2a\x8a\x16\x29\xe7\xa0\xb2\x20\x0e\xe1\xc0\xc8\x82\xf7\x8f\x47\x81\x05\x19\x05\x74\x5e\x7a\x71\xeb\x07\x5e\x3a\xc9\x16\x14\xa6\x1c\x26\x17\x06\x88\xbe\x26\x89\x30\x3f\x84\xc3\x6f\x20\x0e\x51\x56\x77\x3d\x3c\xd7\xd8\x73\x93\x59\xcb\x81\xd5\xfd\x5b\xd5\x33\x17\x71\xbf\x5b\x0a\x1f\x54\x55\xf3\x53\xa3\x48\x3a\xfa\xe9\x4e\xe0\x0d\xaa\x20\x0e\xa1\xd6\xe1\xf2\x05\x93\xc4\x0e\x76\xc5\xac\x3f\x0f\x8c\x37\xd3\x6f\x9a\x9b\x85\xdc\x2c\xfc\xfc\x94\xd2\x9c\x83\x86\x4e\xfa\xa7\x6b\x02\x7c\x6a\x34\x88\x43\xa8\x45\x54\x38\xd0\xf5\x9d\xee\x15\xa5\xe4\xe8\xfb\x13\x32\xb9\x47\xf9\xb3\xf5\xc6\x26\x84\x61\x3a\x9e\x95\x55\x0a\x69\x52\x34\xa6\x6e\x90\x5a\x20\x0e\x52\xeb\x6c\x31\x12\xd0\xfa\xc6\x69\xb5\x3e\x3f\xc9\x4b\xc4\xb5\x69\xbf\xcc\xcc\x1b\x52\xc6\x53\x19\x4b\xe6\x5c\x18\xa7\xd3\xd9\x97\x1c\xee\x66\x3a\x34\x6b\x97\x5e\x0a\x4f\xb9\x40\x1c\x42\x2d\xda\x7d\x0b\xcb\xd8\xee\xf5\x61\x74\xc1\x34\xa3\xef\xad\xfd\xd8\x55\x6d\x7d\x92\x94\x62\xc7\x58\x4a\x4b\x78\x84\xe8\x72\x47\x1b\xf0\xe3\x05\xc0\x21\x1c\x58\x2b\x8b\xf8\x82\xc1\xe7\x22\xf1\x65\x58\x6e\xce\x7d\x88\x9b\x98\xba\xd1\xbf\x58\x64\xf3\x55\x88\xe9\x3d\x27\xbe\x5f\xe3\x3f\xe1\x29\x17\x88\x43\x94\x45\xdd\xdc\x6b\x31\xc2\xa5\x6e\x7b\xdb\x7b\x09\xf5\x23\x47\x9d\x0a\x9d\xbf\xff\xdc\x05\x27\x6b\x47\xf3\x62\xd2\x2d\x94\xb9\x66\x3b\x38\x5c\x0a\xe0\x10\x6a\x51\xe3\x12\x18\x2d\xfa\x94\x10\x86\x54\xcc\xcb\x73\xe7\x35\xe6\x60\x7c\xc2\xba\x4c\x65\x2a\x8d\x9f\xbd\x37\x80\x6a\x4b\x54\x3d\x06\x4f\x3a\x00\x1c\x42\xad\xa7\xb9\xce\xe7\x98\xfa\x17\x98\xf2\x45\xa7\x32\x39\x38\xb0\x7f\x61\x86\xd0\xd8\x5c\x43\xdd\xba\x9e\xbe\xc9\xb2\x61\xe0\x1c\xbe\x04\xa9\x05\xe2\x20\xb5\xce\x18\x23\x01\xad\x5f\xff\x13\x23\x91\x3a\x15\x23\x21\x56\x7b\x15\xf5\xac\x8d\xe6\x78\x5c\xc7\xd3\xe5\xb6\xc6\x49\xb9\x58\x64\x44\x4a\x0e\x03\x6e\x72\x91\x5c\x4d\xdc\x8c\xe4\x55\xe7\xbf\x5f\xe7\x3b\x15\x23\x71\xa1\x61\x53\x09\xcb\x93\xca\xa9\x61\xc1\x62\xb4\x6b\xa5\xed\xe6\xc5\xef\xfb\x65\x47\x6f\x9e\x44\xcc\xfd\x5b\x7a\xcf\xdd\xe7\xe7\xdf\x5f\xf2\x54\x8c\xc4\x23\xcb\x25\x38\x90\x44\x32\x42\xf9\x5e\xdf\xc3\xe7\x9a\xe5\x42\x03\x29\x59\x22\x93\x6d\x6c\x21\x37\xca\x0e\x56\xa7\xdb\xd1\xdd\xfe\x3b\x4b\x8b\xa0\xb6\x3c\xdd\xc1\xdd\xb2\x1f\x74\x2b\xd4\x49\x2b\x35\x8b\xec\x87\xd0\xd2\x90\xbb\x3e\x64\x55\xf3\xcf\x6c\xf4\x72\xea\x37\xb3\x41\x5d\xed\x19\x82\x7f\x2f\x05\xe2\x10\x1d\x9c\xc8\xec\x32\xca\xe2\x9f\x5b\xe6\x9f\xef\x05\x5d\xf2\xac\x89\x76\x3c\x49\x37\x31\xca\x9b\x1b\x1e\x8a\xc7\x1d\x16\x2f\xab\x4e\x87\x3f\x71\x82\x38\x44\x4f\x24\x78\x23\x16\xfa\x8a\x35\xf4\xfd\xf2\x46\x27\x01\xd6\xdc\x8f\xf2\x1b\x06\x13\x2a\x2c\x39\x3c\x17\xb1\xc4\x6f\x46\xc9\x4e\xa8\xc0\x7b\xba\x41\x1c\xa2\xec\xd0\x3d\x1e\x3c\x21\x56\xc7\x9f\x76\x02\x59\x57\x45\xb6\x56\x23\x19\x3e\x8e\xb8\x75\xce\xd7\xdc\x62\xf9\x36\x3a\xd8\x89\x4f\x0b\x1f\xb6\x0f\xe2\x10\x1d\x3c\x50\x24\x88\xe2\x5a\xc8\x45\xc6\x8e\x23\xd1\xf8\x2f\x9c\xc7\x22\x18\x5a\x16\xb3\x51\xd4\xe1\xc1\x36\xd3\xdf\x9f\xd7\x4f\x52\xc0\x1b\xdf\x40\x1c\xa2\x83\x63\xde\xbc\x64\xc5\xe3\x59\x5b\xc6\x1b\x51\xdb\xdb\xb3\x2e\xb2\xf0\x35\xc4\x5c\x24\x7c\xe8\xc7\xe1\x95\x1e\xd1\xc2\x25\xcf\x29\x38\x93\x0f\xe2\xa0\x0e\x7e\xb6\x18\x09\xa8\xcf\x9c\x56\x0b\xcf\xd7\x31\xd1\xf9\x71\x2e\x05\x66\x1f\xfe\x79\x1a\x7f\xb3\xb8\x90\xd8\x77\xaa\xe1\x8e\x92\xf2\x45\x0a\xec\x59\xfa\x59\x1e\xf0\xbb\x03\xc4\x21\xd4\x52\xcb\x5c\xa6\xb5\xbc\x83\x22\xb5\xba\x2b\x9c\x53\x5e\x55\x89\x31\x8c\xd3\x9e\xe4\xa5\xb2\x35\x92\xf8\x6d\x84\x6f\xb1\x71\x0c\x1e\xec\x81\x38\x84\x03\x34\x56\x8c\x74\x57\x87\xae\x59\x85\xcd\x97\x89\xa8\x98\xa4\xa9\xa9\x18\xe1\xe4\x97\x36\xaa\x10\x8f\x2f\x08\x3f\xd1\x7e\xb4\x96\x04\x95\x05\x71\x88\xb2\x1d\x41\x38\xf2\xd8\xe7\xcd\x4b\xce\xcb\xae\x36\x06\xbf\xfa\x9e\xf8\xa8\xd2\xbb\xd0\x1a\x5f\x7b\x99\x3d\xcd\xcb\xe6\xca\xa3\xb6\xff\x97\xa7\x02\x70\x08\xb5\x38\x5a\x1b\x34\x4b\x6a\x05\xf6\x9f\x1c\x33\x64\x4d\x7a\xb7\x26\x91\x1e\x6c\x60\x49\xb4\xd9\xb0\x24\xe7\x69\x72\xe0\x2a\xe0\x6a\x43\x65\x41\x1c\xf2\xdd\x41\xe8\xa8\xf6\xa5\xf2\xde\xfa\x48\x7a\xc5\xd7\x50\xd6\x52\xf7\x07\x04\xfc\x54\x2e\x6f\x4f\xae\xef\x29\x14\x8c\xb1\xeb\x84\x3c\x85\xdf\x1d\x00\x0e\x52\xeb\x6c\x31\x12\xd0\xb3\xf1\xb4\x5a\x79\x64\x23\x6b\x3f\xc7\xc6\x5d\xaf\xc7\x68\x36\x86\x44\xde\xba\x4d\x77\x5e\x7a\xea\xfa\x3b\x5e\x94\x8a\xb0\x5b\xaf\xe7\xcf\xb5\x06\xc3\x2b\x60\x00\x0e\xf9\xe7\x11\xfe\xcd\x6f\x1a\xdf\xe8\xb8\x67\x1f\xe0\xd2\x3f\x9d\x24\xfe\x71\x43\x84\xbe\xd9\x3d\xf5\xc9\x37\xe6\xe1\xe6\xa7\x09\xd8\xbe\xf0\x1f\x42\x41\x1c\xc2\x81\x3c\x17\x6d\x12\x97\x8a\x0c\x6e\xc1\x56\xb2\x10\x15\x86\x4a\xfa\xe4\xe6\x6f\x02\xa5\x7c\x5f\xab\xb0\x58\x72\x24\xea\x9e\xd8\xc3\xab\xec\x20\x0e\x51\x76\xe2\x97\x2f\x6f\xfa\xbd\xed\x25\xfe\xe5\xfe\xf5\xbd\xb8\x35\x2f\x2a\x5d\x89\x16\x17\x7a\xed\xbc\x79\xb5\xb7\x01\xfc\x04\x47\x29\x50\x59\x10\x87\x50\x0b\x2b\xe1\xe6\xe7\x11\x5c\xaa\xff\x8f\xb5\xb7\x8c\xca\xaa\xf9\xdf\x78\x11\xa4\x53\x90\x10\x50\x90\x12\x50\x91\x92\x0e\x91\x12\x04\x04\x09\x09\x91\x10\x90\x96\x90\x2e\x09\x25\xa5\xbb\xa4\x41\x42\xba\x53\x40\x41\xba\x91\x12\xa4\xbb\x5b\x85\xb3\xce\x3a\xcf\xbd\xff\xcf\xd9\x3c\x6b\x0d\x6b\xf1\x7b\xff\x59\xd7\xdc\xf7\xde\xd7\xec\x3d\x7b\xe6\x9a\xef\x28\x65\xec\xce\x2a\x59\x0e\xb4\xf7\xea\xbe\x32\xe1\xd3\x98\xad\xb1\xa0\x3b\xc6\xdd\x8d\x73\x3d\xb5\x43\xc8\x82\x38\xf8\x53\xeb\x73\xfa\xb8\x03\x7a\x87\xb6\xe9\xfc\x76\x84\x27\x4e\xb2\x2b\xaf\xa5\x28\xc7\x21\x35\xae\x3a\x3d\xf3\x7a\xbc\x13\xd5\xa3\x57\xd0\x53\x0b\xc0\x21\xac\x75\xbe\x18\x09\x68\x85\xff\xac\xb5\xfc\xbf\x6d\x89\xec\x5f\xf5\xe2\xa7\x93\xa4\xf7\x56\x45\x17\x26\x23\x67\x7e\x15\xf4\x32\x0f\xb7\x15\x65\x64\xd3\xb8\x29\x49\x02\xb2\x16\x88\x83\x57\x23\x49\x9d\xa0\x79\x51\xfe\x48\x40\x77\x3a\xe7\x64\xf4\x4d\x48\x33\xb7\x63\xa0\xd1\x54\x15\x9d\x55\xa4\xee\x6d\x61\xb5\x87\xee\xd0\xec\x22\x88\x83\x79\xe0\xb6\xab\xb0\xd1\x29\x55\xf4\x43\x87\xc3\xfa\x34\x2c\xd3\x9f\x25\xba\xfd\xbe\x14\xbb\x5c\x13\x1d\x2f\x48\xf1\x6a\xe9\x0b\x1a\xa0\x69\x76\x10\x07\x93\xdd\x4a\xf1\x72\xfc\x39\x99\x67\xf2\x2d\xb7\xf8\x7e\xa1\xc9\x54\xcd\x7d\x9e\x26\x56\x3f\xff\xa3\x32\x6d\x87\x61\x23\x16\x89\x77\x50\xa1\x3c\x10\x07\xb3\xd6\x9d\x44\xf1\x7b\x68\x2d\x54\xa6\x4d\xf9\x81\x79\x37\x13\x03\x5a\x63\xac\xc7\xdc\x84\xc6\xaf\x59\x4d\x35\x36\x8f\x55\x0e\x48\x41\x31\x2d\x10\x07\xb3\xd6\xb9\xab\x91\xac\x47\xbd\xbb\x5f\x67\xdb\xee\xaa\x67\xcc\xf6\x40\x46\xcb\xa1\xcb\xe9\xee\x55\x71\x86\x20\x34\x5e\xc3\x39\x32\xf1\x4b\x95\x8a\xdf\xfe\x1d\x23\x99\xc7\xbb\xf5\x45\x05\xb7\x7b\x38\x36\x3e\x47\xdc\xfa\x48\x8b\x92\x21\xe8\x9a\xeb\xcb\x92\x22\xe3\x8d\x28\x41\x6b\x17\xac\x65\xe5\x7f\xa1\xa3\x2d\x06\x32\xee\x36\x9c\xbc\x99\x79\xeb\x31\xc3\x8f\xdb\xae\xa9\xc6\xa7\x98\x36\x32\x5c\x0b\xc5\x36\xfa\xdb\xa8\x18\xe6\x2e\x00\x8b\x91\x80\x94\xcf\xc6\x48\x2a\xa2\x2f\x07\xcc\x2a\xa0\x64\x73\x4b\x70\xa2\x87\x92\x16\x67\xa6\xdf\xfe\xf5\x34\x47\xbd\xf9\x43\x1e\x0d\x43\x70\xc1\x1d\xb5\x8e\x7f\x87\xc0\x58\x34\x1d\x8b\xff\xf6\x49\x1a\x4c\x0a\xf0\xee\xbc\x8d\x41\x6a\x79\x6c\x93\x4f\x16\xb2\x19\x51\xbe\xf0\xf3\xdb\x44\x95\xe8\x25\x28\x46\x02\xd2\xfc\x27\x46\x12\x0c\x8b\x91\x04\xb6\xa3\x6b\x2a\x73\x09\xde\xb5\x6c\x8a\xe5\x29\x0c\x29\x7d\x50\x79\x63\x23\x93\xd6\x95\x41\x5a\xd3\x9a\xa5\x34\x9d\xb1\xe4\xc2\xab\xf2\xa2\x6f\xe1\x31\x92\xb6\x62\x6e\x77\x73\x51\xed\x27\xbc\xe4\xf3\xb4\xb2\xc1\x2c\xa2\x8f\xbf\x70\xa7\xe6\xb7\x92\xa5\x1d\x19\x98\x11\x56\xfb\x64\x98\x5c\x78\xb0\xfe\xf6\x4c\x8c\x84\xdf\x87\xf2\x5a\x0c\x01\x4b\xad\x66\x70\x7b\x93\xa3\xbf\xd1\xc4\x38\xc7\x6c\x64\x01\xd2\x28\x92\xb5\x8a\xff\xbc\x81\xf2\xdc\xc8\xc5\x9b\x3c\x5b\x8d\x24\x6a\x6b\xb4\xe0\x09\xeb\x6e\xc6\x24\xd2\x44\x8a\x42\x8f\xb1\xe7\x67\xd6\x54\xce\xb6\x0e\x24\xd4\xf4\xb8\x0c\x14\x22\x8c\xc4\x8b\x37\x79\x26\x46\x32\x4f\x72\xba\x5c\xfb\xc8\x79\x76\xdb\x9c\xd6\x5a\xbc\x7b\xe9\x60\x20\x80\x31\xe1\x5e\x91\xb1\xf5\xc7\xe7\x1d\xeb\xb5\x3b\x8f\x93\x2e\xde\xe4\x99\x18\x49\x06\x45\x91\x0f\x2b\x97\x3b\x8a\xe9\xf0\xa3\x5f\x0d\x63\xfa\x6a\xfb\x18\xba\x51\xb6\x3d\xd3\x6b\x93\xb1\x5b\x75\xae\xa7\x3e\x4e\x17\x6f\xf2\x4c\x8c\x04\x0f\x23\x45\x61\xe7\x8b\x53\xef\xf1\x8f\xf5\x3d\xee\x39\x21\x0f\x73\xd9\xdb\x82\x57\xde\x1c\x2f\x5e\x0d\x38\xd1\x65\xff\xf8\x2d\xe6\xe2\x4d\x9e\x89\x91\xb8\xd2\xba\x19\xcf\x1d\x64\xfa\x45\x06\xde\x59\xa4\x6a\x6e\xaa\xb3\xdc\xac\xfa\xd5\xeb\xfb\xba\x3a\xd1\x4a\xe3\xef\x65\xdd\x47\x17\x3d\xba\x47\xed\x7c\x3d\xf1\xec\xab\xed\xd1\x64\x40\x3c\x96\xcb\x47\xd1\x1d\x05\xd2\xb8\x2b\xcb\x5e\x3e\x31\xe8\x83\xdb\xd5\x35\x09\x04\xb2\x57\xbe\x4f\x77\x27\x6d\x43\x5b\x06\x40\x1c\xec\xd5\xa6\x55\x17\xa3\x13\xc3\x7f\xdb\x6a\x90\xb2\x02\x6d\x32\xae\x84\x24\x53\x6a\xf8\xf1\xca\x27\x6f\x13\x76\xb2\x9e\x89\x4b\x41\x69\x63\x08\x59\x10\x07\x7b\x07\x19\x78\x71\x66\x70\x97\x64\x2f\x3a\x34\x0a\x93\x26\x16\xbd\xb6\x79\xc6\x88\x56\xa9\x39\x15\x3a\x48\xc2\x32\xf0\x30\x21\x35\x00\x8a\xb3\x82\x38\x98\x6c\xc2\xb8\x53\xd6\x93\xec\x98\x7c\x7c\x2b\x81\xe1\x0f\xb4\xf4\x4c\x72\x68\x0d\x19\x82\xe5\xb1\x19\xef\x85\x71\x0a\x6f\x33\xa3\x41\xc1\x4b\x10\x07\xab\xdf\x45\x5d\x77\xf5\x73\xca\x4a\xe8\x17\xdd\xa8\x26\x94\xae\x97\x33\x94\xa6\xe1\xcd\x1e\x3f\x17\x72\xa3\xc3\x93\xe4\x3e\x92\x8a\x93\x42\xc3\x06\x10\x07\x7b\xb5\x7d\x39\x76\xe2\x66\xb8\x9d\x30\xa6\xbc\x2b\x4c\x35\xa7\x20\x6e\x5d\x8b\xab\xa1\x4c\xf2\x27\xfe\xf6\xd2\xb3\xf6\x6e\x15\x91\x40\x2b\x44\x8c\x04\xc4\xfd\x53\x8d\x24\xf8\x3c\x31\x12\xd0\x03\xf7\x3f\xc6\x4c\x29\x9b\x33\xf8\x0b\x93\xcd\xf9\xdc\x01\xe9\xca\x9f\xc7\xef\xf5\x3d\xf1\xfc\xdd\xbc\x39\xe8\xcc\x86\x6c\xdc\xa4\x34\x8f\x2a\x00\x8d\x99\x00\x1c\xcc\x58\xf7\xd3\x3a\xc4\x83\x4b\x58\x13\x12\x31\x3f\x5f\xc5\x98\xb4\x4b\x4d\x7f\x18\xda\xb2\xce\x3a\x55\x5c\x2b\x2d\xd7\x79\xe3\x4e\x61\x1b\xb4\x69\x04\xc0\xc1\x1c\x50\x6d\x60\xbc\x5b\xaf\x18\x1a\xc8\x57\x22\xf9\x65\x8c\x2b\x8c\xb9\xe6\xde\xfc\x51\x76\x77\xf4\x87\x40\xbf\xbb\x4d\xae\xb1\x42\x6c\x08\x59\x10\x07\x93\x35\xde\x89\x4b\xaa\x94\x9d\x11\x2f\x1e\xdc\x50\x54\xc1\x10\x67\xd9\x9a\x71\xf3\xea\x60\xc2\xe6\xc6\x1d\xfd\xe1\xfc\xf7\xb5\x54\x1a\xb4\x35\x0e\xc0\xc1\x8c\xf5\xd4\x11\xed\x5b\xf5\xe3\x9d\x11\xa1\x18\x11\xfa\x7d\x7a\x8b\x8e\x23\x46\xc9\xf7\x2e\xc8\xbc\x97\xaa\xc6\x95\x9b\x1e\x71\x32\xe4\x20\x64\x41\x1c\xcc\x58\x2e\x1f\x32\x65\xb4\x59\xbe\x68\x18\x18\x07\x56\x87\x92\xd0\x1a\x14\x77\x44\x7b\x6a\x85\x52\x1a\x98\x3f\x69\xb8\x6c\x19\x32\x77\x80\x88\x91\x80\xb8\x7f\xaa\x91\xbc\x3d\x57\x8c\x04\xf4\x5e\x3d\xeb\x2c\xa4\xbd\xd8\xef\xf7\x3f\x87\x10\xbf\x5a\xc7\xcd\xe7\x96\x4a\x0f\x1b\xf7\xce\x54\xa6\x9c\xff\xc4\xa9\x3b\x45\xa7\xf6\xe4\x73\x32\xb4\x1e\x0d\xe2\x60\xce\x92\x7f\x46\x47\xf6\xd8\xd8\x5c\x50\x68\x2b\x57\x4e\x31\x9c\x41\xb1\xf0\x7e\xcd\xdb\xc7\xc6\x11\x27\x96\x3e\x57\xaf\x0a\x25\xca\x41\x95\x63\x40\x1c\xbc\xa2\xe9\xfe\x46\x95\x50\x59\xf0\xe0\x17\x0a\xcb\xdd\xf7\x23\xe6\x41\x5c\x02\xbe\x16\x6a\x7f\xc4\xd2\x0b\x8e\xa4\x89\x82\xa2\x50\xae\x21\x64\x41\x1c\x4c\x76\x60\x2f\xb4\x2c\x66\x4e\x2c\x32\xe1\x40\xd7\x32\x88\xc3\xba\x55\x6a\x68\xa9\xc0\x4b\xd9\x84\x03\x8b\xab\xd3\xfc\xef\x0d\x76\xa8\xd8\x0f\x88\x83\x39\xeb\x1d\x7e\x3a\xf5\x2b\x6e\x4a\x6d\xf5\x8f\x55\xf5\x15\x7c\xc1\x9c\x89\x7b\xd6\x1f\xe7\x04\x19\x19\x18\x93\xef\xdd\x1d\xf1\xe4\x80\x6a\xa7\x80\x38\x98\xb3\xfc\x3f\xbf\x7e\xe4\x6c\xc4\x1c\x66\xc0\x83\xd2\xfe\x87\x7c\x60\x7f\xc3\x70\xc0\x50\x3c\x6f\xa8\xd7\x82\x82\xec\x4f\xb1\x85\xd3\x55\xc4\x87\x1e\x88\x43\x9c\x5e\x7a\xce\x6a\x24\x80\xf1\xd3\x59\x6b\x6d\xc4\xd1\xf6\xbf\xd7\x7a\xfa\xed\xc6\x30\x03\xe9\x6e\xdb\x2b\xe2\x8a\xfc\xbf\xf2\x47\x42\xe5\x2a\x66\x95\xb7\x5c\xbb\x84\xa9\x52\xa1\xc5\x02\x00\x07\xb3\xd6\x07\x8b\x44\x77\x82\x27\xe9\x27\x24\x0a\xcc\xdf\x52\x02\x87\xa2\xef\x93\xfd\x7a\x63\x20\xf8\x3a\x7a\xe0\x16\x4a\xb6\x33\x4d\x17\x74\x68\x1a\x88\x83\xaf\xf5\x6b\x7a\x0b\xe9\x1b\x8c\xd7\xf6\x6c\x4b\x6f\x2a\xd7\x88\xa0\xcf\xe2\x25\x3f\xc6\xf3\x47\x62\x67\xf3\x35\x77\x63\xfe\x5d\xf0\x1d\x5a\xeb\x07\x70\x30\x59\x9c\x95\x17\xf5\xcc\x6a\x32\x8d\x3d\x5d\xa5\xb3\x94\x65\xb5\x3a\xfb\x0f\x1a\x05\xd1\x9f\x12\xf2\x5e\xc7\xa8\xa9\x18\x3b\xbc\x0a\xad\x98\x80\x38\x98\xb5\x8a\x45\x3d\x4a\xe4\x8d\xd3\xbd\xc8\x22\xf7\x57\x39\x7d\x5b\xb5\x7b\x5d\xd4\x5f\x13\x0f\x4e\xe6\x34\xe1\xea\x3c\x50\x8f\x74\xd9\x44\xc8\x82\x38\xf8\x82\x6c\xf7\x00\x5f\xb3\x18\xc6\xef\x0f\xc2\xc7\xd5\x66\xb7\x37\x7f\x77\x27\x6d\xe7\xfc\x52\x0b\x24\xfe\x26\xeb\x3e\x61\x7b\xda\x8a\x01\x2d\xc8\x02\x38\x84\xb5\xce\x17\x23\x01\x8d\x93\xcf\x5a\xeb\xa1\xd9\x3d\x0d\x92\x64\x26\xb7\x1b\x6f\xd5\x1e\xc5\x7c\x7a\x62\xc1\x7f\x64\x30\xfd\x61\x4a\x26\x25\x62\xb4\x96\x1d\xeb\xfa\x71\x1d\xe2\xef\x83\x38\x98\xb5\x0a\xb3\x5b\x55\x0c\x92\xac\x99\x04\xe6\xde\xe3\x86\x7e\x2d\x27\x94\xc9\x27\xc9\xaf\x18\xd0\x38\x60\xff\xa3\x80\xab\x92\x6c\x00\xad\x9a\x81\x38\xf8\xcc\xe7\xbd\x12\xe4\xd4\x05\x9e\x81\x02\xbb\x2c\xe7\x0c\x61\x42\x1f\x8d\x49\xcd\x4f\xb9\x86\xa8\x9c\xa7\x4a\xdc\x83\xec\x41\x3c\x50\x94\x08\xc4\xc1\x64\xd7\xad\xb4\xb5\x97\x07\x9f\xfa\x0c\x78\x06\xd8\xe1\xe8\xad\x56\x8d\x0c\xc9\xb9\xd6\x25\x93\x60\x88\x3c\xec\x95\x7c\x7e\x73\x17\xaa\x26\x07\xe2\x60\xd6\x62\x1c\xc2\x3c\xba\x77\x62\x94\x59\xf5\x94\xd6\xfe\xe3\xa6\xd6\x69\xc9\xc9\x78\xd7\x4d\x87\x90\xca\x94\xa3\x91\x58\x06\x99\x24\xe8\x19\x0b\xe2\x60\xd6\xb2\x70\xda\xdc\xe7\xc4\xeb\x5b\x8f\x55\xff\x3c\x2c\xd2\x9f\xfd\x9d\x9f\xe3\xba\x09\x73\xd4\xe0\xcc\xe7\xeb\x7a\x75\xb7\x6d\x7a\x43\x11\xd6\x02\x71\x08\x6b\x9d\x2f\x46\x02\xfa\x1e\x3a\x6b\xad\xa6\xfa\xa8\xa3\x97\x8a\xd1\xae\xa6\xbd\x0f\x0b\x7b\x13\xbc\x94\xbf\x45\x9b\xff\x31\x70\x76\x21\x0f\xb9\x83\x6c\x79\x93\xb6\x0c\x5a\x01\x01\x71\xf0\x92\x11\xf1\x7e\xb1\xa5\x2e\x93\xa2\x4d\xd4\x04\xc1\x2e\x2f\xf7\x16\x22\x0e\xf7\xb7\x92\x69\x14\xff\x8e\x37\xe6\x3c\xf2\xf3\x43\x86\xf2\x1e\x20\x0e\xe6\x81\x95\x2c\xb3\xf4\x58\xcb\xc1\xab\x55\x41\xa8\x52\xe1\xbb\x05\xb1\x3c\xbf\x2f\x3d\x37\xe1\xd1\x3d\x15\x14\xa2\x7c\x46\x17\x35\x3d\x82\x90\x05\x71\x30\xd9\xef\xdc\xb6\xb3\x83\x58\xd7\x69\xd7\x67\xf3\x0e\x51\xd8\x2d\x1c\xfb\xf4\xc7\x58\xf7\x82\x06\x0b\xb7\x2a\x1e\x76\x8f\x9c\x84\x40\x83\x6d\x10\x07\xb3\x56\x78\x4c\x58\x8a\xa6\xe0\xf6\xdf\xe4\x78\x79\xe7\x5f\x59\x7e\xc4\x2a\x6b\x12\xdc\xcf\x45\x8a\xcd\x36\x94\x03\x77\x5b\x92\x1e\x43\x83\x0d\x10\x07\xb3\xd6\xf7\x61\x55\x62\xb3\x2f\xe5\x6e\xfb\x8f\x57\xe7\xca\xa8\x9f\x0e\xd5\x6d\xa6\x6e\xf3\x78\xca\x8c\x72\x3e\x75\xaf\x9c\xd9\xe7\x74\x42\x58\x0b\xc4\x21\xac\x75\xbe\x18\x09\xe8\xbb\xf7\xac\xb5\x88\x30\x1b\x6d\xef\xa1\x77\xd9\x34\xdb\xa8\x34\x6e\x9a\xd1\x8b\x74\x17\x8e\x4e\x92\x9b\x79\xca\x7a\x28\xb6\xca\x2d\xf8\x68\xa7\x23\xfe\x3e\x88\x83\x59\x2b\x94\x86\x09\xad\xc4\xc4\x44\xff\x8a\xea\x09\xb6\xbd\x4e\x98\x3d\x4f\x91\x62\x5c\x9b\xfa\x2b\x93\x7d\x66\x05\xff\x92\xf2\x40\x28\x5b\x0b\xe2\x60\x1e\xc0\x6c\x43\x39\x61\xc2\xc8\x99\x3e\x71\x41\x8d\x51\x94\x9f\x47\xf3\xaa\x18\x6a\x22\x77\x16\x92\xd3\xd7\x3a\x14\xd2\x58\xc7\xb9\x8a\x90\x05\x71\x30\x59\x3c\xe9\x7c\xe7\xe7\x3c\xb6\xc8\xd6\x4e\x68\xc7\x7e\xc3\x02\x7f\x27\x25\x0f\xa6\x91\x3c\x92\x73\x85\x0b\x57\xc2\xfc\x3a\xf8\xa1\x98\x16\x88\x83\x59\xeb\x7e\xb7\x90\xdc\x72\x0e\xbd\x96\x8f\xd5\x1e\x47\x57\xb4\x37\xf5\xa7\x8f\x95\x87\x04\x93\xbf\xa3\x68\xaf\xbe\xd1\x4c\xdf\xaa\x82\x56\x97\x40\x1c\xcc\x5a\x91\x31\x35\x27\xda\x6a\x35\xba\xa3\x9b\xaa\x94\x12\xa4\x1b\xc4\x96\x71\xa3\xce\x42\xae\x3c\xa9\x68\xa8\xbd\xe6\x87\xa7\x5e\x52\x08\x6b\x81\x38\x84\xb5\xce\x17\x23\x01\xcd\x6f\x9c\xb5\x96\x81\x9f\x77\x29\xea\xc6\xb5\x8f\x65\xb2\x29\x77\x0b\xa6\x93\x63\xaa\x7d\x7f\xed\x44\xe2\x63\x7d\x75\x9e\x0f\x9e\xe1\x5b\x55\x83\x16\x56\x40\x1c\x7c\xac\x75\x8b\x46\xe6\xb4\x60\x6b\xb5\xfc\xe0\xda\x90\xc8\x3c\xeb\x69\xcc\x6b\xc7\x70\x2b\x19\xd4\x45\xe9\x02\x0a\xdf\x03\x3d\x24\x75\x68\xac\x05\xe0\x60\x1e\xd0\xc5\xcd\x1d\x6c\x5d\x41\x42\x25\x13\xd9\xef\x88\x69\x27\x9c\x9e\xa6\xf8\xda\x47\x7e\xf9\xeb\xa7\x93\x29\xbf\xce\x75\x8f\xb7\x8c\x08\x59\x10\x07\x93\x9d\xf0\x33\x16\x39\xcc\x8b\x89\x0c\x0a\xe1\xd5\xbf\xff\x7b\xfb\x72\xec\x0d\x5a\xfa\x51\xf1\x81\x34\x23\x82\x7a\xb7\x3d\x3b\x3c\x68\xac\x05\xe2\x60\xd6\x72\x7c\x36\xe6\x98\x5d\xfa\xb3\xaa\x81\x9d\xad\x25\xb1\xb9\xc3\x2c\x30\x86\xd3\x8b\x9d\xf8\x56\x17\x91\x54\xd2\xda\xdb\x59\x23\x3e\x84\x2c\x88\x83\x59\x2b\xed\xf9\x0b\xc6\xd7\x87\xde\xdb\x9f\x05\x68\x24\x51\x70\x87\x36\xea\xe5\x9d\x2a\xc2\x53\x78\xe9\x4e\x64\xc3\xb4\x8c\xab\xf6\xd9\x11\xd6\x02\x71\x08\x6b\x9d\x33\x46\x02\x9a\xbf\xfe\x27\x46\xf2\xf6\x4c\x8c\xa4\x9c\x7d\x0f\x6f\xea\x95\x84\x33\x6d\xeb\x46\xfd\xa0\xa2\x56\xde\x6d\xf5\x9b\x8a\x55\x2b\xbb\x0e\xfb\x05\x32\x49\xfc\x8d\x7b\x87\x17\x9f\xe7\x3b\x13\x23\xa9\x2a\x52\x24\x5f\xa6\xa3\xff\x28\x1f\x30\x97\x7c\xab\x94\xcf\x71\xaf\x3f\x47\xab\xcb\x72\xc8\x73\x6c\x62\x5b\x65\xc6\x15\x8b\xe5\xe2\x4d\x9e\x89\x91\x4c\xe9\x67\x53\x99\x88\xd7\x49\xa0\x2e\x7f\xfc\xba\x70\x5d\x65\xdf\x64\x45\xe6\x04\x67\xb8\x04\xbf\xf1\x2d\x72\x99\xb9\x64\xd6\x45\x8b\x56\xab\x9d\xef\x5a\x9e\xed\xe0\xb7\x32\xc5\xad\x51\x14\xdf\x18\x7e\x74\xf4\xbd\x36\x73\x47\xf7\x77\x44\x5d\x1f\x6f\x61\xc1\x73\xa9\xf7\xc4\x5a\x9e\x5a\xf2\xec\xd0\xf8\x01\xc4\xc1\x3a\xb8\xc4\x5c\x70\x0e\x57\xd4\xf8\x31\x6f\x71\xb1\x95\x08\x3a\xf3\x11\x6f\x39\xdb\x14\xb2\x0e\xc9\x56\x01\x61\xdf\x68\x4e\xd4\x0a\xb4\xc4\x09\xe2\x60\x3d\x31\xf9\xbb\xfd\x37\xcc\x1c\x07\xb6\xbf\x43\x53\x57\x0e\x9e\x24\xdb\x7a\x89\x12\x88\x6a\x3f\xdb\xd7\xff\x68\x32\xe4\x1a\xfc\x33\x12\x9a\xaa\x01\x71\xf0\xe0\x74\xd1\xc8\x6e\xae\x64\x2f\xf7\x00\xc6\x91\x0a\x96\x26\xd1\xe5\x3c\xed\x8f\x9e\x61\x83\xb5\x8c\xc7\xa6\x09\xae\xe6\x4b\xb8\x29\xd0\xac\x02\x80\x83\x75\xf0\xdb\x75\x2e\x2b\xb5\xb7\x52\x1a\x43\x1c\xb9\x6f\x54\xc4\xb5\x59\x62\xbe\xb5\xbb\xc5\xf0\xa1\xa3\x84\xfc\x1b\x06\x89\xdd\x1d\x86\x5b\xd0\x1a\x1f\x80\x83\x67\xf2\xc7\x35\xc7\x91\x37\x96\xf9\x0e\x74\xc9\xbf\x4c\x50\x47\x12\x8e\xfe\x7c\x9c\x2c\x61\xe3\x98\x77\xe7\xc0\xe3\x1d\xce\xed\x1f\x5c\x50\x26\x1f\xc0\x21\x3a\xf8\xf9\x62\x24\xa0\x3e\x73\xd6\x5a\xc3\x38\xde\x34\xfc\x05\x06\x2e\x93\xf3\x7f\xcb\xfe\x18\xa9\xfd\x44\x8f\x0a\xce\x96\x73\x91\xd7\x76\xe7\xbf\xef\x46\xdd\x4a\x06\xd5\xf7\x00\x71\x30\x6b\x65\x20\x91\x3b\x4a\x56\xcc\xc5\x47\xbf\x5c\x56\x94\x18\x7e\x7f\x32\x8c\xf7\x85\xef\xa5\xb0\xea\x13\x2a\xdc\xc6\xdc\xae\xb1\x6b\x50\x35\x33\x10\x07\x2f\x76\x2d\xcd\xa3\xc3\x30\xf0\xc7\xb6\x7f\x69\x9a\xcd\xb7\x50\xd3\xe9\xce\xae\x25\xbb\x2b\xd2\x76\x97\x52\x3a\xa7\x88\x9d\x06\x05\x34\xb9\x08\xe2\x60\xb2\x75\x57\xdb\xdc\xe6\x98\x65\x36\x43\xdc\x3c\x3e\xa4\xfd\xb8\xb6\x96\x72\x82\x43\x38\x97\x59\x58\x90\x3a\x21\xe7\x7b\xef\x88\xa5\x0a\x21\x0b\xe2\x60\xd6\x8a\x97\x7c\x62\x54\xa0\xc2\x37\x9b\x79\xfd\xe6\x64\xf6\x98\xde\x70\x2b\x96\xb1\xe9\xf7\x9d\xe4\x2d\x4e\xe7\xdd\x57\x43\xd4\x59\x50\x32\x01\xc4\xc1\x47\xbc\xd9\x28\x18\xf3\x64\x48\xaa\x15\x1c\xed\xeb\x5f\x25\x67\x26\xb7\x0d\x48\x4f\x71\x03\x73\xe6\x52\x18\x8f\xcc\xc6\x19\x16\x71\xa1\x11\x2f\x80\x43\x58\xeb\x7c\x31\x12\xd0\xb3\xf1\xac\xb5\xe4\xe2\x95\x85\xa5\xd5\x3b\xe7\x0a\xdc\x58\x24\x3f\xc6\x29\x0b\xa2\xba\x25\xa0\x47\x09\xce\xfd\xc2\x61\xda\x16\xa6\xcd\xb9\xea\x81\xf8\xfb\x20\x0e\x66\xad\x04\xc6\x84\x6f\x2c\x1a\x8f\x13\xa8\x17\x91\x31\x9d\x6d\x9f\x53\x6c\x56\xeb\xb7\xfa\xd5\xc5\xcc\x38\x5b\xd4\x18\x53\x16\x47\x42\x9f\xa8\x20\x0e\x9e\xf7\xe0\xe5\x1a\x40\xf7\xf3\x70\x38\xd0\x77\xa0\xf4\xba\x69\x27\x6e\x49\xf8\x7c\x23\xb8\x6d\xfc\x84\xfc\x98\xca\x3b\x5b\xa3\xc0\x14\xca\x7b\x00\x38\x98\x2c\xa1\xbc\xec\xf5\x8f\x19\xac\xe2\xd3\x73\x32\xdb\xfe\x32\x49\x24\x48\x5a\x25\xad\x71\x1c\xaf\x66\xe2\xfe\xce\x85\x51\x50\xd5\x41\xdb\x75\x41\x1c\xcc\x5a\x6b\x26\xe2\x5f\x3c\x99\x7e\xf0\x4c\xae\x92\xd1\xe0\x89\x21\xdb\x05\x10\xdf\xd6\x60\x51\xa4\x0a\x75\xa8\xb9\x42\x3b\x5f\x62\x0d\x95\x76\x04\x71\x30\x6b\xf9\xad\x33\xc5\xe0\x49\xc6\x6f\xe2\x1b\xee\x69\xfc\xfd\xc4\x56\x1d\x4b\x61\xee\xf1\xde\xf7\xd7\xd7\x03\xee\xca\xcc\xaa\xe2\x42\x5e\xe8\x18\x47\x00\x87\xb0\xd6\xf9\x62\x24\xa0\x15\xfe\xb3\xd6\xca\x4c\xae\x21\x91\x33\x70\x70\x17\xbb\x41\x17\x1d\x42\x7f\xc9\xe3\xf6\x03\x9d\xc7\x06\x9d\x33\x58\xdb\xee\x52\x06\x27\x82\x8d\x74\x88\xbf\x0f\xe2\x60\xd6\x8a\xc2\x56\x50\xaf\x0c\xa0\x26\xa4\xc4\xef\x6f\xec\x32\x54\x96\x3f\x1e\xb9\xf9\xa7\x94\x35\xc6\xc5\xbc\x8c\x8d\x92\xe0\xda\x1e\xf4\x41\x0d\xe2\x60\x1e\x58\x34\xa9\xa5\xad\xee\xc3\xb6\x78\xf0\x86\xb7\x93\x53\x72\x6e\x6b\xb0\x32\x89\x15\xcf\x50\xa1\xb3\x87\xa0\xeb\xeb\x7d\x9f\x13\x7f\x84\x2c\x88\x83\x1f\xf2\x5e\x82\xa3\x50\xfd\xbb\x06\x17\x07\xcf\x14\x73\x63\xe7\xeb\xcd\x3e\x56\x4c\x5e\x8c\xd3\x81\x96\xbd\x41\x62\xfd\x14\xa6\x3d\x0b\x84\x2c\x88\x83\x59\x4b\x94\xae\x2d\xe3\xd0\x94\xbe\x61\x96\xfc\xcd\x52\x1c\x6b\x3a\xc6\xae\xed\x8b\x22\xd5\x10\xa6\x28\x97\x9c\xbe\x8f\x92\x34\x5b\x50\x31\x31\x10\x07\xb3\xd6\xb9\xab\x91\xe4\xc9\xcb\xb9\xf7\x26\x6a\x45\xfe\x4c\x19\xfd\x3e\x15\x28\x2a\xdf\xed\xc0\xe5\x2e\xe4\x69\x6d\x4f\x16\x10\x37\x20\x1c\x31\x20\xfe\xef\x18\x09\x45\x5c\xa8\xc4\x95\x5a\x2b\xb4\xd1\x67\x6f\xd5\x31\x62\xcc\xc3\xd2\xe7\x2c\x8b\x82\x3d\x3e\xdc\x5d\xb7\x75\xf0\xfd\x88\xd4\xe7\xf3\x2f\x34\xe8\x68\x7b\x85\x43\xf1\x7b\xce\x25\xe9\x4d\x26\x25\x2d\xe4\x13\x73\x9b\x7d\x6d\xd7\xc5\xe6\x75\x7e\x25\x47\xa9\x1a\x8f\xf7\xef\x60\x31\x12\x90\xf2\xd9\x18\xc9\x6c\xc4\x91\xbc\x59\x3f\x8d\xfd\xf7\xe4\xe9\x9b\x85\x26\xd4\x48\x45\x0d\x89\x26\xe8\x24\xdb\x96\x9f\xb8\x07\x23\x77\xd2\x12\xff\x8d\x52\x12\xc4\x37\xa5\x9e\x8e\xc4\x73\x0e\x07\x4e\xd1\xbd\x3e\xf0\xfb\x7e\xec\x7f\xdb\xa5\xeb\x7e\x82\x74\xa6\x10\xa5\xe0\x67\xe2\x40\x28\x46\x02\xd2\xfc\x27\x46\xd2\x03\x8b\x91\xd4\x87\x1b\xae\xa9\x2a\x66\xe8\x4c\x96\xa7\xaa\x8c\x73\x6e\xac\x6d\xf1\x1f\x17\x46\x24\x9a\xe9\x3e\x75\x5e\x9b\xf5\x26\x1e\xc1\xb8\x70\x8c\xa4\x01\x1e\x23\x11\xa1\x5d\x19\x10\x14\x6f\x92\x3e\x96\xf5\x2a\x8d\xdb\x24\x27\x92\x46\x92\xf9\xe4\x14\x47\x5b\x91\x98\xdc\x89\x41\x10\xcc\x5e\x7c\xe1\xc1\x7a\xc3\x99\x18\xc9\xbb\xc6\x6b\x94\x85\xed\x86\x9e\x7e\x6c\xdf\xc4\x43\xc5\x56\xf8\x37\x02\x39\xf3\x9a\x78\x82\x55\x64\x6b\xba\xf1\x15\xf0\x88\x2e\x5a\x3a\xd0\x57\xac\xe1\x4c\x8c\xe4\xc5\xd3\x5c\x6b\xfa\x89\x7a\xfe\x07\x3c\x6f\xd3\x6e\xc9\xe7\x68\xbd\xc8\x6a\x5a\xbd\xbf\x76\x2b\x7d\x19\xaf\x34\xf7\x90\xe9\x94\xfc\xe2\x4d\x9e\x89\x91\x50\x7c\x8b\x66\x10\xe9\x31\xf5\xaf\xb1\x0c\x73\xbb\x12\x44\x46\x4a\x64\xd0\x21\xe0\x4d\xc2\x2b\x66\xa8\x78\xfb\x20\xcf\xdf\x28\xec\xe2\x4d\x9e\x89\x91\x3c\xeb\x34\xaa\xa7\x2e\xa3\xea\x99\x41\xc5\x68\xab\x39\xa2\xec\x7f\x26\xc5\xf0\x92\x6b\xb4\x29\xf8\x25\x73\xf1\x58\x45\x2e\xe5\xd2\xc5\x9b\x3c\x13\x23\x79\x63\xad\xf3\x88\xff\x4d\xf0\xd5\xe7\x0c\x74\x23\x14\x45\x65\x57\x3d\x3d\xd0\xf4\x8e\xf5\x33\xe8\x52\xd9\x63\x76\x70\x7d\xbd\xb1\x2f\xde\xe4\x99\x18\xc9\xab\x99\x5f\x99\x8d\x92\x86\xa3\xf2\xcd\x8f\xa8\x68\xef\xd1\x8e\x12\xcf\x75\x64\x8f\x96\xf6\x0f\xbd\x7e\x79\x6c\x39\x2f\xca\x8b\xf2\xbf\xf9\xd6\x03\xf5\xc4\xb3\xaf\xb6\x16\x4a\xd3\x3b\x52\xaa\x01\xdb\xcc\x85\x23\xa2\x6a\x4b\x6d\xe1\xd6\x5c\xb2\x43\xe2\x8f\xf0\xe7\xf3\xd3\x27\x1a\x65\x05\xe3\xa0\x12\xd3\x20\x0e\xf6\x6a\x1b\xb2\xc3\x8e\xe6\xc4\x50\xa1\x73\x17\xdf\xe7\x10\xe0\x4b\x48\xeb\xe6\x8d\x65\xd3\xbf\xdd\xab\x23\x66\x6a\x2d\x15\x26\x16\x01\xcd\xba\x80\x38\xf8\x91\xfd\x6b\x18\xe5\xcc\xdd\x22\xb7\xb6\x64\x51\xa5\x5e\xd3\x47\xd5\x49\x19\xcf\xb5\x3e\x69\x43\x22\xe1\xae\xfd\xfc\xb9\x63\x44\xfa\x27\x42\x16\xc4\xc1\x64\x0f\x71\xf3\x5b\x83\x4f\xd3\x8a\x1e\x4f\xf4\xc9\x07\x8c\x7b\xc9\xb9\xde\x63\xf1\xee\x09\xa6\x21\xfd\x5c\x79\x2d\xfa\x89\x72\x02\xf4\xf9\x00\xe2\x60\xb2\x04\xc8\xd3\x4e\xf6\xab\x2c\xcb\x59\x14\x37\x72\xb6\xde\x3f\x1f\xf3\xe5\x1b\xfb\xd0\xd2\xe4\xd3\x12\xd6\x89\x6b\x84\x9e\x7f\xd5\x18\x21\x0b\xe2\x60\xb7\xec\x8f\x79\x89\xbc\xa1\x8e\x33\xd5\xe1\x16\x0d\x79\x8f\x22\x4d\xaf\x6a\x02\x3f\x92\x69\xeb\xef\xf4\xf7\xef\x8c\xed\x45\x68\xa9\x27\x10\x31\x12\x10\xf7\x4f\x35\x92\x9e\xf3\xc4\x48\x40\x0f\xdc\xb3\xc6\x5a\xcf\xf3\x40\x79\xc0\x4e\x44\xa2\xdf\x43\xf3\x77\xa1\x34\x5a\x26\xac\xef\x57\xf0\x0e\x4d\x19\x5a\xc3\xa3\x85\xc0\x9e\x4c\x5c\xe8\x9c\x72\x10\x07\x33\x56\x70\x3b\xff\x80\x9b\xaf\xff\x58\xbc\x49\x74\xdf\x5c\xa3\xd6\xfb\x8f\x84\x6f\xc8\xe6\x1f\x91\x55\x3f\x34\x63\x4d\xcf\x8a\xff\xbf\xc2\x31\x20\x0e\x76\xab\x5e\x10\xdd\x59\xd2\xff\xa3\xeb\x97\x73\x34\x14\x21\x3c\x7d\xd7\xfd\xc1\x9a\x98\x5e\x03\x7f\xee\xed\xf7\x48\xf8\x4f\xab\x04\xf9\xa0\xe1\x38\x88\x83\xc9\x8e\x59\x71\x37\x4d\xa8\x9b\xac\xac\x1e\x26\xda\xae\xfa\xd2\x85\xf7\xb7\x2e\x5e\xe1\x98\x32\xec\x69\x4e\x77\x30\xe2\x9c\x35\x84\x4a\xad\x81\x38\xf8\x39\xbe\xe1\x49\xcd\xb1\xf5\x3c\x21\xbf\x6d\xf0\x2a\x93\xe7\x14\xdf\x0a\x5c\x3e\x39\x5d\xa7\xfb\x9a\xb5\xcd\x83\x51\x91\xa3\x59\x11\x82\x90\x05\x71\xb0\x5b\x16\xc0\xb2\xed\x4a\xf6\x88\xfd\xc6\x02\xd5\xa7\x13\xc3\xab\x6c\x94\x68\x68\x5a\x77\x56\x7c\x32\xab\x2e\x35\x1e\x1c\xcf\xdb\x15\x75\x20\x62\x24\x20\xee\x9f\x6a\x24\x0d\xe7\x8a\x91\x80\xde\xab\x67\x9d\xc5\x1c\x80\xf4\x65\xd2\x86\x2b\xb4\xae\x78\x58\x8b\x6a\xd7\xf7\x06\xb9\x81\xd5\x4f\x45\x4f\xd9\xd9\x81\x7c\x4b\x79\x9e\x74\x0b\x5e\x68\xbb\x04\x80\x83\xcf\x21\x58\x08\x12\x5e\x3f\x18\x50\x2e\x36\xa2\x1b\xec\x7b\xb4\x90\xcc\xc7\x96\x2d\xff\xd8\xb8\x0a\xb9\xe7\xf5\x1f\xa3\xae\x1b\x37\xef\x40\x73\x08\x00\x0e\x76\xaf\x5c\x37\x13\x7c\xe8\x91\x6c\xd8\xfe\xb6\x9e\xb8\x28\x71\xec\xbd\xc6\x12\xb4\x9e\xef\x32\x59\x2d\x8a\x0f\xd6\x24\xf3\xd6\xba\x5f\x82\x90\x05\x71\x30\xd9\x72\xd4\x97\x9b\xb5\x3f\x06\x0f\x13\xea\xbe\xf5\xfe\xd1\xb0\x30\x7a\xca\x8a\xa5\x32\xb7\x73\xf8\x88\x7c\x6b\x63\xaf\x88\x13\x17\xca\x7b\x80\x38\x98\x2c\xdf\x1c\x5f\xbb\xee\x84\x05\xb3\xe8\x25\x8e\x26\x34\x15\x97\x28\x89\x8f\x91\xb1\x47\x8c\x13\x02\x15\x0b\x6b\x96\x9c\x41\x9a\x50\xa1\x75\x10\x07\xbb\x65\xef\xee\xbd\xcd\x79\x76\xe7\xa6\x45\xba\x86\x2d\xc1\x8f\xc4\x45\x9a\x46\xb9\x45\x43\x99\x12\xbc\xb0\x2d\xa7\xfb\x9a\xf6\x37\x7e\x75\x21\x3e\xf4\x40\x1c\xe2\xf4\xd2\xf3\xc5\x48\x40\xe3\xa7\xff\x58\x35\x2b\x79\x43\xd2\x17\x65\x87\x3f\xb7\x82\x4d\xb6\xe5\xa3\xe1\x6a\xd4\xa7\x57\xd2\x5c\x53\x20\xbc\x6f\xd7\x4a\x75\xa2\xc3\x05\x25\xf0\x41\x1c\xcc\x5a\x3f\x9e\x46\x84\x57\xa4\x4e\x86\x5f\x26\xaa\xc2\x75\x73\xcc\xd2\xf5\x7c\x57\x23\xbe\xae\xf1\x6e\x9e\xe0\x11\x2e\x07\x33\x83\x08\xb4\xcb\x09\xc4\xc1\x6e\xd6\x0d\xb1\xd8\x70\x27\x86\xba\x5a\x5c\x23\x4c\xf2\x0a\xb3\x28\xc9\x29\x9a\xef\xb2\x66\xf5\x6c\x98\x75\xec\x0c\xf3\x63\xf1\xd9\x2f\x10\xb2\x20\x0e\x2e\xab\xda\xe5\x23\x27\x59\x96\xdf\x12\x48\x65\xd4\x98\xb7\x2d\xc8\x4b\x3e\x21\x2f\x36\xf7\x22\x8f\x6b\x7d\xe6\x6b\xf9\xb5\x67\xbf\x21\x59\x00\x07\x93\x3d\x95\x2e\xe3\xf0\x9c\x7f\x1d\x3b\xdc\xe5\xf7\x21\x58\xd3\x5f\x55\x70\xfd\x44\xc0\xf1\x93\x2e\x46\xfc\x50\xa3\x9e\xa6\x74\xf9\x30\x42\x16\xc4\xc1\xad\xe5\xe3\xd4\x79\x2b\x0a\x47\x65\x89\xc4\x46\x21\x4e\xf4\x31\xad\xd8\xc2\xcb\xd9\x4e\x3d\xb1\x82\x75\x12\x76\x8e\xf0\xb0\xde\x19\xc8\x5a\x00\x0e\x61\xad\xf3\xc5\x48\x40\xe3\xe4\xb3\xd6\x72\x6d\x93\x0e\x8b\x97\x5c\xba\x2d\xf2\xd5\x91\x6a\xbd\xbe\xc8\xfa\xf6\xfc\x13\xe6\xa2\xab\x53\x2e\x04\xa5\xe2\xbf\xc8\x3d\x8c\xa0\x53\xa8\x40\x1c\xcc\x5a\x9d\xef\xfa\x0e\x37\x6e\xf0\x19\xfb\x68\x64\x49\x56\xea\x31\x6c\xdd\x10\xe8\x62\x35\x52\x3c\xc9\x0c\xae\x3b\x5a\xf1\x42\x2b\x68\x45\xc8\x82\x38\xf8\x5a\xff\x24\x25\x97\x23\xfa\xe5\x57\xc7\xa1\xbf\xa5\x9b\x99\xd0\x6a\x44\xbe\xa8\x84\x34\x47\x7c\xa1\x69\xdf\x42\x71\x9b\x98\xf1\x80\xd6\x79\x41\x1c\xfc\x61\x78\xc5\x48\x8e\x7f\x70\x70\xe0\x43\x54\x4e\xd9\x5f\x27\x43\x22\xd7\x71\x3d\x22\xcd\xf6\x3f\x74\x8b\x48\xf1\x43\x6d\x74\x2f\x73\xa1\x8b\x00\xe0\x60\xb2\xc5\xa4\x51\xd5\x4c\x71\x5f\x79\x90\xfa\x63\x1b\x2d\xc8\xc2\x5b\x7e\x7c\xa8\x72\x7a\x75\x65\x79\x15\x2d\xd3\x53\x02\x67\xcd\x00\x0a\x2d\x83\x38\xd8\x2d\xfb\xc2\xf9\x8d\xe1\xc9\x40\xbe\x8e\xa0\x82\xb2\x4a\xa3\xff\x44\x64\xe8\x25\xde\xbc\xdd\xb7\x22\xde\x8a\x8f\x5e\x4d\x58\xae\xbb\x9e\x22\xac\x05\xe2\x10\xd6\x3a\x5f\x8c\x04\xf4\x3d\x74\xd6\x5a\xe8\xb6\xda\x6b\xcf\xaf\xd9\xb8\x25\x04\xd2\x48\xdb\x06\x65\x4f\xa5\xfc\x1c\xce\x46\xd5\x7a\x7f\x9c\x85\x5c\xba\xc9\x98\xfd\x7f\x55\xef\x40\x1c\xfc\x78\x08\x0a\x9c\x4f\x81\xb6\x2d\x3e\x8f\xa7\x1c\x56\xe4\xa8\xea\x57\x6f\x76\xae\x1d\xba\x3e\x34\xcb\x15\x68\xd2\x2c\x26\x0c\xb2\x80\x6a\x3b\x80\x38\xd8\xcd\x32\x3c\x34\xde\x5b\x54\x5b\xc1\x75\xa9\x68\xf5\x7a\x55\xfa\x28\x88\x80\x8a\x37\xcd\xd4\xca\x95\xd5\xca\xd8\x4c\xbe\xfc\x4d\x09\x27\x42\x16\xc4\xc1\x64\x3b\xb3\x35\xc5\x64\x5f\x28\xf1\xdf\xd2\xcc\x16\x64\x7e\xb9\xc4\x48\x6b\x15\xa9\x72\x69\x79\x2d\x88\xdb\xce\x0b\x6d\x7a\xc8\x0e\xda\xa4\x0c\xe2\x60\xb2\x4a\xe3\xaa\xf1\xd9\xdb\x7f\x70\xd5\xa5\x1f\x4f\x3f\x9b\x40\x53\x14\x5e\x4c\x79\xaf\xa6\xf0\x3c\x0f\x8f\x3f\x3e\x96\x5f\x84\xeb\x2b\x42\x16\xc4\xc1\x6e\xd9\x56\xd1\xde\xef\x82\xe5\xca\xc0\xe3\x1c\x7e\xd5\xd8\xa4\xce\x6b\x5d\x7e\xa4\xdb\xaf\xb8\x54\xe5\x5f\xca\xb9\xda\x89\x99\x56\x31\x20\xac\x05\xe2\x10\xd6\x3a\x5f\x8c\x04\xf4\xdd\x7b\xd6\x5a\x4e\x28\xce\xaf\x1e\xae\xb1\xa2\xfe\x69\x11\xbf\x5e\xab\xed\x5e\x3c\xf8\x7e\xf0\x57\x38\x73\x99\x30\xe5\x88\x3f\xb7\x9c\xd2\x2c\x3f\xe2\xef\x83\x38\x98\xb5\xd4\xa4\x1e\x15\x73\x4a\xc4\x1e\xdf\x7d\x3b\xed\x4e\x7c\xd9\xe7\x19\xb1\xd6\x98\x52\x04\x5f\xeb\x4b\xbe\xe6\x72\x8d\x81\xc2\x2b\x1c\x08\x59\x10\x07\xbb\x59\x0e\xf8\x0f\x5f\xfe\x24\xe4\x3d\x50\x62\x1b\xbf\x72\x4d\x95\x74\xe4\x9b\x70\xaf\x6c\xca\xd0\x51\xc1\xb8\xca\xed\xc5\x58\x2c\x3d\xe8\xa4\x78\x10\x07\x93\x15\x0f\xcc\x44\x11\xbe\x15\x26\x95\x36\x1d\x9e\xcd\xb6\x14\xca\x66\x61\x57\x3d\xd1\xb8\x6e\xb4\x89\x2d\xe8\x73\x0d\xd7\x5d\x3d\x10\x21\x0b\xe2\x60\xb2\xb9\x3c\xb8\xfc\x2a\x76\x76\x72\x3c\x89\xf9\x25\x5e\x91\x9f\xc5\xbf\x32\xa8\x37\xf2\xa6\x79\x33\xf9\xda\x36\x13\x17\xcf\x8d\x42\xb2\x20\x0e\x76\xcb\x50\xea\x57\xd0\x08\x1f\xf7\x61\xf1\x70\xfb\xf7\x31\x3e\x8c\x71\xfe\xf2\x41\xfc\xc9\x4e\x14\xf3\xf8\x4b\xa9\xba\x6d\xc6\xbd\x78\xa8\x64\x04\x88\x43\x58\xeb\x7c\x31\x12\xd0\xfc\xc6\x59\x6b\xad\x2a\x85\x9a\x07\x4f\xf3\x29\x59\xe1\xa1\xaf\x8d\x88\x46\x63\x26\x53\xef\x3d\x14\xfb\xf4\x68\x02\x35\x2f\x82\x26\x52\x8e\xf4\x08\xf1\xf7\x41\x1c\xcc\x5a\x66\x54\x66\xcf\xdf\x59\xed\x9c\xfc\x89\xf1\xa8\xa9\x57\xb5\xfb\x3e\xfc\xf8\x83\xbf\x84\x46\xd9\x13\x5e\xd1\x68\x4a\x01\x55\x6a\x2a\x84\x2c\x88\x83\x7f\xc9\x79\x96\xf7\xde\xa8\x7b\xa7\xa0\x68\x2a\xa8\xfb\xd2\x7f\xdc\x3f\xc6\xc3\x9e\x74\xc4\x1b\x97\x55\x2f\xfa\xe0\xbd\xf9\xfa\x40\x16\xf4\x25\x07\xe0\x60\xb2\x1f\xd8\x6a\xea\x16\x63\x49\x07\x2d\xb1\xe2\xf7\xca\xef\x2b\x54\x17\x2a\x8c\x88\x78\x17\x1d\x87\x5e\x1e\x7b\xe7\x5f\x92\x1a\xbb\x05\x85\x5e\x00\x1c\x4c\x56\x99\xb2\xbd\xdf\x4b\x57\xe7\x84\x6f\x35\x66\xe7\x64\x7e\x4c\x33\x6d\xb0\x32\x47\x27\x41\x7a\x7a\xa0\xb5\x5e\xc3\x2f\xeb\x1b\x74\x1e\x19\x88\x83\xdd\x32\x77\xa6\x1a\xc3\x2c\x27\xdd\xe7\x26\x1b\x3d\xab\x1e\x16\x23\x12\xb9\x71\xc9\xe9\x84\x44\x7f\xed\x3f\xba\x88\x3e\xcf\xf9\xd5\x3e\x0c\x9d\x79\x01\xe0\x10\xd6\x3a\x67\x8c\x04\x34\x7f\xfd\x4f\x8c\xa4\xe1\x4c\x8c\x04\x3b\xfc\x6a\xb0\x35\xf6\x3d\xf7\x24\x29\x45\xd4\x99\x89\x71\xf3\x1e\x6c\xc5\xa6\xf5\x34\x86\xea\xdc\xe9\x69\xd6\x0e\xec\x69\xba\x8b\xcf\xf3\x9d\x89\x91\xbc\xf9\x3c\x4e\x2d\x8d\x1f\xdc\x17\x71\x9b\xd8\x57\x98\xdc\xec\x92\xc8\x58\xca\x44\x5b\x0a\xf3\x2f\x3b\x3f\xce\x7a\x24\x4d\x8a\xbe\x8b\x37\x79\x26\x46\x72\xc5\x44\x24\x17\x55\x5e\x73\xef\xd2\xf7\x14\xc5\xe2\x42\xa5\x32\x0f\x85\x8a\xca\x5f\x31\xbe\x0b\xe1\x9d\x2c\x1d\x89\x48\xcb\x3e\xff\x9b\xa9\x45\xd0\xb5\xfc\x8f\x7a\xb4\x9d\xc2\xa5\x99\x05\x44\xe4\x07\x5f\x0a\x88\x4a\x9e\x0f\x16\x59\x4b\xe7\xac\x7d\x36\xd9\x50\xa9\x5e\x62\x0b\xed\x62\x8a\x81\x4a\x3b\x82\x38\x58\x07\x4f\x7e\x71\xa0\x80\x71\x52\x7b\xad\xfd\x01\xd6\xb2\x32\x0e\xe6\xbb\xcf\xb9\xa8\x92\x4f\x5e\xd2\x71\x8d\xa5\x17\xfb\x06\x25\x36\x86\x42\x79\x0f\x00\x07\xff\xea\xb1\xf4\xcc\xe8\xcd\x37\x65\x42\x7f\x54\x91\x1f\x72\xb4\x4e\xfe\x63\x3a\xc4\x7d\x35\x06\xa9\xad\xbd\xbe\x9a\xf3\x19\x4a\x38\x14\xea\x03\x71\xf0\x6a\x24\x48\x1d\x06\x2e\x74\x92\xd6\xdc\xad\x75\xc8\x6c\xdf\x79\xcd\x0b\x26\xfa\xb1\x94\x29\xa9\x8f\x38\xb2\xbd\xeb\x8a\xac\x18\x1c\xa0\x89\x50\x00\x07\x93\x25\xe2\xe9\x68\x70\xa4\xb4\xb7\x8a\x26\x0c\xab\x8e\x10\x7a\x8a\x6d\x29\x25\x72\x2b\xd8\x92\xc1\x77\xe5\xd3\xc9\xf0\xd1\x17\x7f\xe8\xb0\x39\x10\x07\xbb\x65\x14\x26\x34\x44\x34\xcb\x07\x42\x66\xb5\xef\xca\x67\x26\x34\x9f\x2c\xbc\xf1\x23\x98\x3f\x1c\xe4\xc7\xed\xe0\xcf\x8a\x96\x7d\x63\x8b\xe8\xe0\x20\x0e\xd1\xc1\xcf\x17\x23\x01\xf5\x99\xff\x08\x4e\x5f\x5b\xb9\x84\xd9\x38\x6e\xe0\x98\xb7\x6b\x7e\x87\x0d\xe7\x64\x3e\x82\xfa\xca\x8e\xc4\x95\x3e\x0a\x52\x0a\x14\xa6\xee\x2f\xe4\x50\x70\x1a\xc0\xc1\xac\xf5\xd4\x25\x5a\x75\xee\x17\x6e\x4f\x40\x97\x9e\xa2\xb7\x0a\xca\x46\xb6\x94\x1c\x8f\xcf\x8a\xa7\x9f\x5f\xc0\xde\x77\x4b\xdd\x23\x28\x34\x0b\xe2\xe0\xd3\x75\x93\xfc\xba\x65\x24\xd5\x6d\x8c\x76\xef\xbe\xa2\x19\x53\x3f\x3a\x79\xac\x81\xeb\x81\x2e\x23\x33\xc3\x87\x87\x72\x17\x75\x08\x4a\x36\x82\x38\x98\x6c\x9f\x45\x07\xd5\xce\xb2\xf1\xa2\x1f\x6a\x0f\xbf\x32\x63\xb4\x5a\xdf\x69\x7d\xb6\xfb\xd5\xd2\x07\xcd\xa7\xd9\xed\x87\x7d\x9d\x5d\x08\x59\x10\x07\x93\xed\x9d\x54\x21\x7d\x1f\xbc\xf4\x63\xca\xef\x4f\x84\xcd\xda\xce\x9d\x8e\xc8\x7a\x85\x1b\x6a\x15\x74\x68\x8a\x81\x23\xd5\xa5\x9d\x50\x69\x47\x10\x07\xbb\x65\x66\xae\xef\x09\x56\xbc\x0d\x53\x7e\xee\x3b\xd9\x7e\x5f\x7b\x89\xe9\x9d\xef\x7f\xf7\x8e\xae\x30\x53\x63\x74\x20\x75\xea\x8c\x25\x13\xc2\x5a\x20\x0e\x61\xad\xf3\xc5\x48\x40\xcf\xc6\xb3\xd6\xe2\xbc\xc5\xbd\x31\x17\xe6\x86\xa5\x36\xce\xf7\xa9\xec\x55\x04\xea\x2b\x67\x94\x7e\xcc\x09\xd6\x62\x6e\x1e\xf6\xdb\x38\xdd\xd2\x50\x9c\x0c\xc4\xc1\xac\xc5\x1d\x88\x2d\xda\x86\x2d\x1a\x62\xf9\xb9\x9a\xa7\x87\x67\xec\xd2\x3a\xfd\x0c\x16\xb9\x17\x43\xd8\x3b\x9b\x91\x0c\x72\x26\xaa\x64\x84\x2c\x88\x83\xef\xcb\x78\xba\x64\x77\xea\x92\x78\x4f\xc3\x07\x2d\x18\x2d\x28\xd5\xae\xcd\xab\xf7\xbb\x83\x77\x58\x5f\xef\x0d\x64\xaa\xe7\x8e\x92\xc4\xd0\x2c\x3b\x80\x83\x1f\xe3\xf8\xcd\x1c\x65\xde\x05\xdf\x23\x53\x2d\x96\x92\x7a\xfb\xa9\x0c\x56\xda\xd8\xbb\x6b\x3b\x8a\xe9\x89\x75\x84\xf1\xd8\x4f\xe9\x6e\x20\x64\x41\x1c\x4c\x16\x9f\xe5\xf4\xa3\x6b\xd0\x10\x0a\x93\x9b\x78\xfd\x3b\xd7\xbc\x94\x19\x82\xc7\xf8\x34\xfa\xe8\x86\xf1\x5b\x44\x4a\x12\xbf\xe8\xa1\xf2\xb9\x20\x0e\xfe\x91\xb2\xda\x23\x14\x35\xcf\xd6\x49\x74\x98\x49\x9f\x25\xfe\xdb\x2c\xb2\xaf\xaa\x8f\x62\xa3\xf0\xc1\xb5\x78\x29\xca\x12\xee\xbb\x50\x0d\x25\x10\x87\xb0\xd6\xf9\x62\x24\xa0\x15\xfe\xff\x28\x74\xb3\x1e\x45\x4f\xf3\x32\xa2\x34\xbc\xef\xcf\x2a\xb3\x8d\xf2\x11\xf5\x40\x42\xa0\x89\xe4\x83\xfc\xeb\x9b\x3a\x94\xe5\x32\xc6\xdc\xd0\x0c\x33\x80\x83\x59\xeb\xd4\x4e\x1d\xa3\x75\xc3\xda\x70\x21\x3d\x86\x30\xfe\xc1\xda\x55\x1e\x97\x77\xed\x93\x89\x0f\xeb\x28\x0a\xf6\xc2\x46\xb8\xbe\x42\xb9\x2f\x10\x07\xbb\x59\x2d\xfa\xda\x15\xae\x8a\xa4\x66\xad\x7f\xa9\xd1\x0f\x2d\xd3\xbf\x2a\xf2\x04\xb5\x6c\x7e\xcf\x23\xc8\xf1\x7d\x99\x50\x41\xdf\x7d\x19\x5a\x19\x04\x70\xf0\xc7\xcb\x2b\xd2\x6d\xeb\xda\x64\x0d\x7a\xa1\x62\x4a\x13\x8b\xd7\x89\x8f\x58\xe3\x05\x32\xf3\x04\x6b\xaf\xd0\xdc\xd0\x79\xaf\x34\xc2\x04\x3d\x5e\x00\x1c\x4c\x36\x9d\x2e\x98\x69\xd9\x62\xff\xf7\x1d\x66\xe5\xf7\x15\x57\x6e\xb8\x54\xf2\x96\x64\x69\x6e\x60\x48\xdf\x92\xb9\x74\xda\xf6\x6c\xcd\x19\x21\x0b\xe2\x60\xb7\xec\xdc\xd5\x48\x30\xb9\x04\x8e\xd5\x26\xd0\xa9\x5d\xef\x5f\xee\x0d\x9d\x6d\x94\x68\xcf\x19\xa6\x48\x61\xb2\x70\xc3\xf5\xc1\xd7\x8e\xc8\x16\x11\xfc\x77\x8c\x64\x48\xff\x6a\x73\x24\x07\xab\x7b\xc2\xbc\xa5\x05\x07\x8a\x87\xf8\x0f\x39\x85\xc9\x8e\xc8\xf5\x0a\xee\x98\xe6\xd8\x47\x1f\xee\x36\xfd\x0b\x25\xd9\xc2\xfb\x71\x93\x0e\xa9\x5d\xa0\x55\xf9\xdb\x1d\xb5\xab\xbf\x24\x9e\x2b\xb6\xb4\x8e\x0d\x33\xab\x25\xef\xde\x22\x53\xde\x08\x84\xc5\x48\x40\xca\x67\x63\x24\xb5\xd9\xfb\x38\x81\xbf\x0f\x7a\x79\xf6\xaf\xaf\xed\x30\xd4\x99\xbc\x7e\x6d\xa6\xf4\xa5\xf1\x5d\x44\xff\x6a\x2c\x2b\x9e\x41\xcb\xb3\x7f\xa1\x5a\x46\x0f\x05\x1b\x55\xaa\x96\x4e\x0d\xf4\x99\xa6\x3c\x3a\xf3\x54\xa4\xf1\x62\x3f\x9a\x3c\xcc\x3d\x20\x67\x7d\x47\x2a\x4e\x9c\xf6\xf6\x0b\xfa\xf9\x34\xff\xbf\x18\x89\x28\xd2\x43\xd8\x40\x76\x85\x75\x4d\xa2\xaf\xab\x24\x9f\xe4\x93\xf6\xaf\x6a\x14\x59\x41\xe5\x68\xc1\x5b\x4e\x5b\xae\x6a\xe5\x7d\x1f\x7c\x94\x36\xef\x7f\xbc\x70\x8e\x04\x49\x0e\xd6\xa2\x37\x57\x74\xc0\xa2\x2c\x29\x5d\x99\x51\xb6\x6c\xd6\x82\x1f\xf2\x13\x22\xee\xf6\x2e\x5a\xc5\xfb\x0b\xd1\xfe\x6d\x0f\xb8\x44\x0d\x2e\x3c\x5a\x47\xe2\x3b\x13\xfa\xfe\x5b\x6a\x4c\xb4\xd7\xda\x4a\x48\x8d\xec\x81\x27\xc6\xe5\xf1\xe4\xca\xfd\xfe\x66\xe3\x0c\x5a\xb5\xa8\xaf\xfe\x57\x8b\xfe\xa4\x5f\xbc\x49\x15\x78\x93\x46\xbd\xe2\x64\xa9\x47\x7c\x8e\xd5\xee\x57\xef\xbf\xb8\x66\x58\x71\x43\xb0\x64\x54\x89\xe1\x84\x60\x7d\xd4\x44\x80\x2f\x74\x2d\xff\xe2\x4d\x5a\xc1\x9b\x3c\xc5\xc7\xfb\xcc\xaf\x57\xa2\x9b\xbd\x90\x56\xb4\xeb\x34\x90\xed\x25\xf6\xc0\x73\x41\x44\xf4\xc0\x61\xc8\x63\x83\xaa\xbb\x8e\xff\xe2\x4d\xba\xc2\x9b\x8c\x8d\xe3\xfe\x7b\x82\xaf\xc3\x75\x25\x52\x2d\xa4\xb2\x3d\xe7\xe6\xcb\xeb\x6f\x70\xcc\xd2\x74\xd3\xa5\x93\xec\x8c\xd2\x45\xca\xab\x2f\xde\x64\xec\x99\x72\x24\x96\xbd\x7f\x86\x49\xf9\xb7\x5c\x7e\x7a\x6f\x6f\xa5\x85\xf8\x3e\x16\xfc\x43\xc6\x5a\x1b\x3e\xe8\x5c\x81\x3c\x9f\x22\x43\xe9\x77\xf1\x26\xcb\xe0\x4d\x96\xce\xab\x16\x85\x44\xe8\x8e\x0c\x56\xb5\x53\xa1\x4f\xd0\x0b\xe7\x88\x16\xf4\x7b\xa3\xb5\xff\x14\xb6\x24\x69\xf4\xfe\xaa\xd1\xf4\xbf\xf9\xd8\x03\xf5\xc4\xb3\xef\x36\xe3\x79\x99\x0f\x7a\xab\xcd\x6d\x21\x51\xbd\xea\xc7\x8e\x09\x32\x11\x2c\xb8\x56\x37\x3b\x8e\x98\x45\x50\x4d\x26\x3a\xb8\x97\xed\xa1\xc9\x62\x00\x07\x7b\xb7\x7d\xfe\xec\x2e\xd8\x5e\x78\x1f\x69\xc2\x08\x33\x4c\xf0\xf5\x4b\x56\x93\x65\x9a\x61\xe7\xf1\xf2\x44\x6a\x7e\x85\x1a\xa6\xcf\x21\x50\x45\x4b\x10\x07\x2f\x3d\xb9\x2b\xfa\xf7\xb2\x9e\x81\xd0\x1b\x95\x56\x2f\x37\x72\x49\x05\x0a\x64\xe4\x61\xef\xe6\x14\xfc\x62\x8b\x74\x85\x19\xdb\x12\x68\x01\x1d\xc4\xc1\xe7\x1f\x45\xf5\x8b\xd9\xf4\x25\xfc\x9a\xc7\x87\x2e\xdb\x9b\x91\x8f\x68\x35\xde\x0c\x61\x68\x79\xd6\x70\xd7\xfe\x8d\x33\x93\xbe\x0f\x0b\x34\xff\x08\xe0\x3c\x45\x08\xfe\x7f\xfb\xcd\x22\xa9\x5d\x9b\x6b\xfe\xa8\x15\x25\xe3\xa5\xf8\x21\x93\x27\xe9\xdb\x0b\x45\x65\x7a\xc8\xab\x7d\x7a\x3f\x4c\x2b\x4a\x6e\xc7\x05\xed\x37\x03\x70\xb0\x5b\x96\xe3\xee\x31\x9a\x4b\xe5\x88\xb2\x2a\x2d\x72\x40\x38\x60\xf8\x2b\x3c\x61\x37\xba\x3c\xb9\x7c\x9a\x99\xda\xab\x43\xbc\xae\x94\x00\xb1\xdc\x0f\xe2\xfe\xa9\x1a\xf1\xff\x3e\xce\xc1\xa3\x26\xd0\x13\xf7\xac\xb3\xee\x6a\xe7\x32\x6c\xda\x7f\x7e\x81\xbc\x22\x53\xe2\xa9\x45\x9c\x7c\x22\x6c\xad\x87\xb9\x29\x32\x2f\x2d\x97\x12\x2c\xff\x9a\x16\xda\x8d\x02\xe2\x60\xce\x1a\x47\x71\x97\x14\x9d\x7f\x88\xde\xea\xe6\x54\x94\xe8\xdc\x5c\x63\xa8\x49\xf0\xac\xe7\x8f\xf7\x41\x20\x6f\x7c\x57\xe8\xf6\x67\x28\x2e\x0e\xe2\x60\x16\xe0\x88\xa1\x57\x23\x61\x1f\x5d\x77\x0e\x7f\xe8\x41\xc0\x46\x1a\x74\x35\x6e\xad\xc8\x52\xba\x69\xfe\xcd\x4d\xeb\x7b\xbd\xbc\x3b\xd0\x06\x07\x10\x07\x93\xf5\xd3\x0b\x5a\x7c\xf4\x84\x6a\xbb\x12\x95\x88\x30\xf1\xa4\xdc\x3a\xc0\xee\x92\xc1\xc2\xb7\x68\xc2\x2b\x8d\xa6\x11\x31\x71\xda\xbd\x08\x59\x10\x07\x73\xd6\x82\x04\x89\xf2\x6e\xd3\x3c\x51\x3d\x65\xd1\x54\xb7\x67\x53\xaf\x6b\x98\xaf\xad\xd4\xe6\x9c\x1a\xd9\x3b\x41\x6e\x9c\x56\xae\x7d\x84\x2c\x88\x83\xdd\xb2\x42\x52\xf6\x47\x8d\xe9\x85\x9c\x59\x5d\x3d\x6f\x6a\x48\xa9\x17\x31\x3f\xdd\x92\x7e\x31\x72\x94\x3b\xad\xfc\x22\xfe\xce\xd1\x5a\x02\xc2\x59\x20\x0e\xe1\x2c\xb9\x73\xed\x18\x00\xbc\x58\xcf\x3a\xcb\xfe\xf0\xe9\x13\xd9\x09\x8a\x4e\xc3\x96\x90\xd1\xbe\xcc\x94\x8a\x11\x6e\xee\xb1\x30\xfb\x2c\xb9\x76\xcb\x3e\xf1\xb0\xf8\x41\x68\x81\x0b\xc4\xc1\x97\x64\xf3\x92\x09\x46\xfa\x90\x16\xf0\x6c\x51\xf7\xee\x29\x4a\x0d\x96\x96\x26\xac\xe5\x6b\x8c\x60\x7c\xa5\x2b\xe7\x7a\x85\x7d\x0c\xad\xf4\x82\x38\x98\x05\x5e\x2f\x8c\x6f\x4e\x31\x67\xed\xe5\x0f\x4a\xd2\x05\x22\xd7\x1d\x18\xee\xee\xc8\xdc\x7a\xcf\x4f\x79\xc2\xed\x8a\xd2\x5f\x53\xfc\x0e\x21\x0b\xe2\xe0\xe3\x71\x86\x58\xd2\xb9\x88\xb7\x56\xed\x28\x4e\xd9\xe8\xb5\xdc\x0f\xb4\x37\x23\x47\x55\x25\x46\x2f\xaf\xa9\x71\x39\xb0\x05\x8f\x42\x91\x07\x10\x07\x73\x56\x2e\x45\x28\x35\xcb\xf4\xcb\x31\xae\x25\x5d\xce\x9b\x52\x6d\x82\x4b\x4b\x55\x79\xfb\x23\xc5\x02\x8c\x7b\xb9\x03\xd1\xbb\x23\x24\xd0\xe2\x06\x80\x83\xaf\x9b\x89\x75\xaa\xb4\x5c\xbd\x89\x4f\x8e\x41\x4d\xf6\xe1\x14\xc5\xd3\xd6\x36\x9e\x4a\x2f\xb1\x4c\xa4\xd0\x3a\xfa\x0f\x5f\xe4\x5b\x65\x68\xdd\x0c\xc0\x21\xce\x2f\xe5\x3b\xd7\xa7\x1e\x68\x00\xf5\x1f\x8b\x1b\xec\xe5\x25\x73\xa2\xa5\x68\xca\xd1\x4a\x85\x3b\x14\xf1\xef\x62\x47\x52\xa5\xbd\x45\xfc\x04\xa2\x07\x36\xb6\x59\xf8\x45\x8e\xa1\xc5\x0d\x00\x07\xb3\x56\x7c\xb1\x45\xfa\x32\xdf\xa6\x73\xdb\xca\xe5\x3e\x94\x35\x4f\xed\xdb\xf6\xd8\x69\x72\x69\x59\x42\x6a\x23\x9e\x21\xa7\x89\x41\xd0\xbc\x3e\x88\x83\x79\xe0\x48\x8e\x9c\x7c\x7b\x7a\xe7\x83\xce\xd2\x2d\xb3\xfc\x62\x2f\xbd\x0c\x41\x2a\x9b\x61\x36\x5a\xfd\x08\xf7\x76\x39\x65\x63\x0b\xe8\xe3\x09\xc4\xc1\x64\x99\xb7\xf3\xc2\x23\x85\xf6\x58\x02\x29\x6f\x86\x2e\x78\x6d\x38\x51\x10\x6a\xa7\xd0\xa9\x86\x6a\xe1\x70\xb3\x68\x8b\x39\x9c\xfe\x5f\x5d\x5b\x00\x07\xb3\xd6\xf3\xbd\xd8\x0f\xb4\xe2\x29\xd4\xf5\x4f\x1d\xcc\x1c\x2b\x7b\x95\x09\xa9\x78\xf2\x55\x1d\xa4\xb5\x6c\xc5\x85\x97\x69\xfd\xaf\x4f\x22\x64\x41\x1c\xbc\xa0\xda\x9f\xb0\x26\xff\xc9\x37\x42\x03\x3f\x95\x5f\x8b\x22\x3f\xea\x76\xd7\x5f\x77\xe3\xe4\x24\xeb\x59\x4b\x1a\x39\x6e\xf9\x88\x06\x4d\x50\x81\x38\x84\xb5\x54\xce\x65\x2d\xd0\x40\xf9\xac\xb5\x58\x2e\x5d\x51\x98\x7e\xac\xe8\xfe\x42\x23\x74\x9e\x46\xc1\x87\x29\xf8\x6a\xf3\xb5\x70\x07\x3e\xfa\x5c\xe3\x63\x73\xba\x1c\x1c\x6f\xc4\xdf\x07\x71\xf0\x2a\xfe\x44\x5c\xb4\x6a\xca\x22\x85\xa4\xda\x7f\x8d\xdb\x98\xdb\x05\xdd\xae\x3d\x13\x2f\x0f\xec\x68\xf8\x88\x9e\x4d\xa2\xcb\x36\xbd\x8a\x90\x05\x71\x30\x0f\xa8\xb5\x0c\x5c\x65\x1c\x2d\x3f\x79\xb5\x14\xe3\x27\xc4\xff\xc5\x6e\x73\x33\xa0\x0c\x0b\xe5\x28\x82\x11\x59\xdc\xac\x1a\xd9\x0e\x2a\xce\x04\xe2\xe0\x93\x13\xe5\x82\x07\x69\xb1\xa3\x72\xcb\x36\xaf\x3b\x24\xb2\xee\x7b\x5a\x75\xd9\x12\x88\x36\x8b\x56\xcb\x60\xf8\xd5\x4b\x7b\x8d\x41\x87\x71\x81\x38\x98\xb5\x68\x51\x7e\x87\xcd\x14\xb5\xb6\xef\xf1\xcf\x5d\xb9\x33\x62\xe7\xc8\x63\xa4\xe8\x48\x7c\x7b\x79\x64\xd5\xce\xd8\xaa\xae\x38\x09\x05\x21\x0b\xe2\x60\xb7\x2c\xdc\x5e\x39\x61\x85\x7a\xed\xa8\x57\x16\x17\xd7\x2e\xa5\xc3\x4c\x51\x42\xfa\x6f\xfa\x63\x57\xad\x66\xf2\xdf\x33\xc3\x79\x78\x1e\x08\x6b\x81\x38\x84\xb5\xac\xce\x65\x2d\xd0\x07\xd1\x59\x6b\x29\x97\xe1\x97\xd7\xcf\xff\xa5\x28\xfe\xb3\x8a\x3a\x96\xa0\x38\xed\x4b\x61\xa9\x64\x26\xdd\xc4\xa2\x2a\xf5\x7b\x45\x87\x52\x0d\x2a\xa7\x07\xe2\x60\xd6\x52\xd4\xa5\x17\x47\x3e\x99\xc6\xfa\x38\x90\x8f\x79\xf5\xaa\xde\x87\x62\xe4\xc7\x45\x66\x0c\xbe\x12\x3b\xb9\x98\xa8\x7e\x01\x1c\xd4\x08\x59\x10\x07\xf3\xc0\x72\x8c\x66\xab\xc1\x43\xb9\xfc\x6a\xf4\x5d\xb7\x06\xee\x92\x94\x08\xd3\x5f\x24\x4f\x6c\x32\x93\x5f\x1d\xdd\x45\xd6\x0a\x7d\xa0\x8a\x90\x05\x71\x30\xd9\x9f\xe3\x9a\xac\xb5\x1f\x2a\x13\xbe\x2c\xe9\xa3\x95\x85\x09\x73\x4f\xfb\xa4\x94\x2b\x6b\xcd\x19\xf9\xe0\xdc\xe1\x4f\x63\xf4\x81\x12\xf1\x20\x0e\x66\xad\x5f\xe6\xdf\xcb\x31\x5a\xa6\x24\xaa\x63\x6d\x77\xe3\xeb\x9c\x5c\xe3\xb0\xfe\x92\xd8\x3d\xa4\x90\x9a\xa0\xfb\xdd\x6d\x21\xab\xf5\x1e\x21\x0b\xe2\x60\xb7\x2c\xed\x5b\x71\xc2\x38\x9f\x61\x2a\x97\x6c\xca\x63\x7d\x86\x5f\xa6\x82\xa9\x4c\xd4\xd5\x9f\x95\x1a\x4e\x5c\x9f\xfc\x7d\x85\x19\x30\x06\xed\xec\x07\x70\x08\x6b\xb9\x9e\xaf\x1e\x09\xe0\xc3\xf7\xac\xb5\x04\x9c\x3f\x9b\xc5\x2b\xfc\x2e\x61\xf8\x53\x77\x68\xe6\x65\xfc\x2d\x86\x84\x6a\xe1\xdd\x98\xd9\xda\x81\xd1\xe0\x0a\x41\x66\xd9\x10\xe2\xef\x83\x38\x98\xb5\x8c\x7c\x8e\x6e\x76\x60\xbc\xb8\x7b\x57\xe3\xbd\x1f\x4d\x85\x8a\x46\x40\xf8\x60\xb5\xbd\x0d\x56\x14\xc1\x02\x32\xda\x77\xe3\xbc\x8f\x08\x59\x10\x07\xf3\x40\x41\x63\x6e\x6b\xf8\xcb\xdd\x4d\xf3\x1c\xad\xb0\xbb\x1a\xf2\x19\xa7\x44\x2e\xf4\x43\xd3\x5d\x39\x51\x15\xdb\x1f\x85\x88\x49\xa0\xb2\xd9\x20\x0e\xbe\xda\x6f\xca\xfa\xae\xe4\xfb\x6b\x8b\x7c\x67\x27\xe4\x97\xb2\x8a\xa5\x1f\x59\x8f\xa9\xfd\xac\xf5\xec\x34\x03\x39\x26\xfd\x0d\x75\xbf\x41\xab\xfd\x00\x0e\x66\x2d\x8e\xe5\xa8\x3b\x9f\x18\x2b\xf9\xc2\xf9\x5f\x04\x94\xa9\xd8\x7e\xa8\xf1\x6c\x2b\xee\x59\xe2\xb3\x89\xbd\x4c\x4f\x8f\x44\xe8\x0b\x15\x8d\x00\x71\xf0\x7d\x06\xef\xb7\xa6\xde\xce\xcc\x7a\x96\xd1\x6d\x0c\x61\x3a\x48\x7b\x25\x9a\x63\xc4\x37\xd6\xd2\x28\xdb\x12\x51\xc6\xff\x38\xd1\x20\x42\x58\x0b\xc4\x21\xac\x15\x7b\x2e\x6b\x81\x26\x38\xfe\xa3\x5c\x01\xfb\x75\xa5\xeb\x9f\x1e\x92\x4e\x7c\x2a\xc9\x33\xe7\x53\x59\x64\xe5\x0b\x24\xee\xd3\xe3\x90\x38\x32\x7b\x26\xa9\x76\x49\x78\x19\x2a\x57\x00\xe0\x60\xd6\xf2\xa9\x5f\x8a\xea\xe7\xd5\x97\xf9\x42\x17\x4a\x44\x88\x66\xfd\x76\xe7\x8e\xd9\x94\x03\x4b\xd5\xc4\x14\x41\x39\x41\x84\x7a\xde\x04\x42\x16\xc4\xc1\x3c\x10\x94\x44\x1a\x1c\x14\x97\xbe\x2b\xf2\x6c\xd8\x50\x1e\x43\xd4\xdd\xde\x2e\x91\xfa\x83\x29\xa5\xf6\xa9\xd5\xd3\x71\x3a\xe2\x24\x52\x84\x2c\x88\x83\x57\x2b\xfc\x74\xcf\x88\x70\x5e\xaf\x97\xab\x4a\x9c\x4a\xf6\xf8\xee\xdd\x6b\x0a\x3f\x3f\x61\xd7\xa0\xc5\xd8\x1e\xe8\x23\x4b\x33\xfc\x81\xac\x05\xe2\x60\xd6\x92\x65\x2a\x57\x3c\xb5\xa9\x37\x3c\xf8\x69\x51\xde\x64\x1c\xfb\x9e\xe8\xd5\x22\x65\x0d\x32\xa5\xc5\xdd\x74\xb1\xfd\x1c\x7c\xbc\x79\x84\x2c\x88\x83\xdd\xb2\x21\x7a\x5d\xd1\xd8\x75\x8a\x6b\xae\x4e\xba\xb4\x68\xef\xd0\x34\x90\x9e\x2a\x46\xc4\xce\x58\xce\x88\xb8\x7a\x1d\xe9\x0a\xa2\x31\x23\xac\x05\xe2\x10\xd6\x2a\x3b\x5f\x90\x04\x34\x83\xfd\x4f\x90\x04\xa9\xef\xcc\xe6\xbf\xfe\x36\x6d\xd7\x46\x06\xa9\xa1\xdc\xcd\xef\x77\x71\x49\x2e\x25\x4d\xb5\xae\x0e\x49\x9f\x56\x66\xac\xd7\xf6\x19\xdb\x10\x5f\xbc\x1e\x09\xd2\x4f\x78\x93\x4f\x89\x1b\x5f\x8b\xf7\xa7\xe2\x6f\xfb\x96\xfa\xb6\x5d\x1e\xc0\xf9\xd9\xee\x17\x90\xb9\xe6\x31\x4b\x37\x39\xe9\xfb\xd3\xd1\x9b\xf1\xe2\x4d\x1e\xc3\x9b\xcc\x8d\xf7\x4f\x5a\xf1\x46\x63\x8f\x7a\xc2\x29\x55\xe3\xc8\x65\x73\xd3\xad\x65\xcf\x59\x7f\x37\x44\x68\xe2\x17\xe7\xaa\xb0\xe9\x45\x0f\xef\x51\x3b\xdf\xb5\x3c\xdb\xc1\xe5\x93\x4a\xe2\x3f\x25\x76\xf4\x7b\x96\x78\x1f\xdd\xed\xfe\x36\xa3\x61\x2a\x78\x98\xac\x5c\x10\xdc\xec\xcd\x9b\xbd\xe1\xe6\x1b\x09\x95\xe2\x00\x70\xb0\x0e\x3e\x85\x65\xe5\x2d\xf7\x20\x36\x7f\x5c\x11\xef\x4d\x6f\x56\x44\x03\x3d\x4d\xe3\x0f\x1e\xb7\xe2\x1d\x61\xa7\xa7\x7a\x7c\x23\xae\x50\xf6\x0a\xc4\xc1\x0b\x0e\x1d\xad\x7e\xe3\xe5\x09\x6f\xb8\x69\x7e\x2f\xee\x55\x33\xa7\x12\x4a\x7f\xeb\x7d\xcc\xfc\xce\x8a\xcf\xfa\xec\xa8\xf5\xe2\xe3\x45\x50\xc1\x21\x00\x07\x93\x35\xc2\x36\x7d\xf4\x6a\xe6\xd4\x3d\x3d\xca\x38\x5b\xbb\x00\xcf\x6f\x06\x87\xbe\x17\x4f\x6c\xd4\x20\x85\x73\xd4\xd6\x68\xec\x14\x3a\x60\x0a\xc4\xc1\x3a\xb8\x87\x80\xb0\x4f\x12\x76\xf7\x69\x51\xc6\xc7\x8d\x5b\x5c\x76\x95\x41\x7c\x1d\x75\x5b\xbc\x89\xb3\x41\x3b\xaf\xff\x6c\xac\xef\x43\x9b\x69\x40\x1c\x7c\x8f\xce\x0c\xf5\x2f\x35\xe1\x45\x92\x20\xd4\xb6\x30\x19\xdd\x53\xbe\x12\x8b\xa9\x95\xc7\x18\x45\x0c\x4f\x46\x87\x72\x43\x32\x3b\x3d\x11\x1d\x1c\xc4\x21\x3a\x78\xdf\xb9\xde\x1d\xa0\x3e\xf3\x1f\x23\xde\xaf\xf3\x69\x85\x89\x35\xab\x5a\x2b\x94\xf7\xd9\x46\x2c\x17\xca\xcd\x85\x0d\xae\x2b\x78\x7a\xd8\x4f\xc8\xb5\xeb\x88\x0d\x40\x9b\x7e\x40\x1c\xcc\x5a\x1d\x7f\x52\x54\x68\x70\x4a\x47\xba\x2d\x71\x86\xae\x6a\x86\x33\x1a\x0a\xd5\x86\xa0\x1b\xbe\x11\x1a\x62\xb2\xc3\x37\xb3\xa1\xc5\x47\xc8\x82\x38\x98\x07\xd6\xc6\x19\xd5\x72\xa7\x9b\x4e\xa8\x75\x86\xb1\x94\x3e\xd8\xed\xbc\xfe\xc2\x1f\xe2\x90\xf8\x66\x4c\xff\x99\x5e\x30\xab\x33\x19\x34\xe2\x05\x71\x30\x59\xc9\xed\x80\x29\xc2\xf6\x9b\xd7\xf7\x4e\x3e\x85\xc4\x64\xfa\x1d\x73\x2c\xc5\xe2\x77\x62\x3c\x29\xe5\x31\x1c\x2b\x91\x25\x93\x83\x8e\xc5\x03\x71\x30\x6b\xed\xb0\xb0\xc9\x4b\xf0\x55\x52\x9f\x68\xcc\xd8\xd0\xdf\xa2\x15\x7f\xfd\xc8\x99\xf9\x9a\xa5\x82\xc0\x6a\xc0\x47\xc5\x2b\x32\x4c\xd0\x84\x15\x88\x83\xdd\xb2\xfc\xc8\x54\xf9\xaf\x74\x98\xed\x6a\xef\x1d\xf0\x3b\x97\x68\x5b\x22\x78\x9b\xa7\x48\x3d\x51\x31\xa6\xe8\x63\x6a\x57\xcd\x95\x0c\x11\xd6\x02\x71\x08\x6b\xfd\x3c\x97\xb5\x40\xcf\xc6\xb3\xd6\xf2\xc2\xe2\x4e\x8c\x31\x77\xbd\x79\xc3\x9d\x7a\xac\x7f\xee\xc3\xbb\x37\xa8\xd8\xd6\x09\x1f\xb1\x05\x35\x7d\xef\xde\xda\xf8\xec\x0e\xd5\xd1\x06\x71\x30\x6b\xad\x7f\x40\x2b\xa3\x0f\x6a\x1a\xf3\xd0\x21\xc9\xd9\xd3\x3b\xec\xb0\xc1\xc7\xa8\x5f\xa5\x6c\x2a\xd1\x60\xfd\x12\x1b\xc2\xf0\x34\x1b\x4a\x7c\x00\x38\x98\x07\xd8\x6f\x9b\x34\xa0\x2e\x33\x33\xab\x47\xe0\x3e\x9c\x6f\xb9\xa9\x98\xc0\xbf\xe9\x3f\x5c\x47\x83\xb2\x2e\x37\x94\xf7\x2c\xcb\x07\x4a\xd5\x81\x38\x98\x6c\x59\x2a\x53\x54\x26\x5d\x21\x51\xda\x5f\x7e\xb7\x40\x72\x94\xa7\x14\xfc\xd7\x99\x96\x3b\x0f\xf6\x28\x2f\xab\xee\x54\xa0\x1d\x11\x21\x64\x41\x1c\xcc\x5a\xc7\x2d\xbf\xbe\x73\x57\x0f\x70\x17\x15\xef\xfd\x55\x5a\x5e\xf9\xc0\xa1\x8e\x8a\x17\xf1\x8a\xdf\x43\xf6\xa6\xa1\x28\x79\x1e\x3b\x54\xee\x17\xc4\xc1\x6e\x99\x76\x97\x71\x4b\xe9\x4c\xd7\xcd\x21\x7d\x36\x22\x3b\x9d\x98\x48\x31\x05\x5f\xb3\x6f\x0d\x34\x82\xd9\x6a\x69\x2f\xb4\xbf\xa2\xa6\x22\xac\x05\xe2\x10\xd6\x3a\x3e\x97\xb5\x40\x6b\xfc\x67\xad\x45\x50\x1e\xfc\x5a\xd0\xe1\xa6\xce\x6c\x6d\xf7\xd7\xcc\x1e\xd2\x88\xdf\x7b\xeb\x71\x2c\x8d\x16\x0e\x8c\x5f\xb2\x99\x9f\xbd\xf4\xd1\x84\x36\x16\x03\x38\x98\xb5\x62\x7f\x6d\x4f\xe3\xe4\x53\xe4\x65\x38\xa5\x72\x24\xf3\x91\xf4\x1d\x5c\x29\xe0\x7f\xa6\x50\xf6\xd5\xdb\xfc\x72\xe6\xbd\x05\x89\x02\x84\x2c\x88\x83\x79\x80\xdf\x99\x86\x29\x30\x11\xf3\xd5\x9d\x43\x03\xdd\xa4\x70\x91\xc4\x70\x7e\x1f\xff\x46\xbf\xd3\x3b\x43\x24\x09\x87\x0a\x8d\xef\xa1\xca\xef\x20\x0e\x26\xfb\x49\xb9\x54\xe8\xaa\x71\xeb\xaa\x4c\x66\x79\xa6\x41\xc5\xc0\x7c\xe3\x2d\x5f\x6b\xf3\x9d\xbb\x5f\xbe\xce\x63\x8f\x90\x55\xeb\x41\x41\x6f\x10\x07\xb3\x16\xc5\xf5\x2b\x0f\xed\x17\xcc\x88\x9d\xdf\x37\x76\x5f\xa7\x78\xfe\xfd\x3b\x63\xd5\x53\xa1\x19\x5c\xe5\xeb\x87\x8e\xed\xf9\xda\x78\xd0\x62\x1b\x88\x83\xdd\xb2\x73\xd7\x23\xb1\xdb\x95\x14\x54\x7d\x8b\x2a\x5c\x37\x68\x83\x61\x40\xdc\x7a\x6f\x62\x54\x2f\xc5\x49\xd4\x5b\xa8\x44\x91\xa7\x96\x52\xd7\x67\xe9\xdf\x41\x92\x90\xde\x66\xc3\xc7\x76\xa6\x03\x8e\x02\xc3\xa3\xe4\x7e\xe8\x15\x4d\x92\xa8\x97\xb8\xdc\xd2\x6c\x09\x85\xb0\xfc\x79\xa3\xec\xfe\x1d\x98\xe8\x0d\x36\x66\x7b\xf9\xb3\x07\x69\xf1\xb9\xaf\x18\xe1\xf5\x66\x57\xd9\x08\x8d\x7c\x36\x9b\x99\xcf\x2f\xe2\x90\xec\x15\x17\x55\x3d\x60\x41\x12\x90\xf2\xd9\x20\x09\xda\x5d\x26\x45\xfa\x86\xef\xe1\xdd\xea\x54\x4b\xb4\x9b\xd7\x5d\xa6\x62\x2b\xa5\x78\x7e\xb7\xa9\xcd\x6b\x9a\x8e\x96\xac\x60\x3d\xff\x17\x6a\x1b\x62\xe4\xb4\x22\x2c\xcf\xfd\xc5\x12\xe9\x3a\xf9\xf8\xe4\x17\x72\x53\x2b\x5b\xad\x49\x83\x6b\xe1\xcd\x5d\x5a\x0a\xf9\x69\x3b\x50\x90\x04\xa4\xf9\x4f\x90\xe4\x01\x3c\x48\x32\x22\x28\x35\x12\x9d\xd0\x7d\x35\xdf\xc9\x55\x82\xd0\xff\xc9\xd7\xdc\x2b\x6c\x89\xb1\x74\x37\xbf\x18\x91\x4e\x6d\xda\x90\x91\x4c\x5e\x38\x48\xf2\x00\x1e\x24\x11\xea\xe2\xbc\xfb\xba\x33\xff\xfb\x73\x56\x6f\xdc\x09\x64\xfa\x17\x72\x09\x2d\xb7\x8d\xdc\x66\xbb\xd5\xc5\x85\x3e\x58\xd8\x9d\x7a\x5e\x78\xb4\xfe\xe0\x4c\x90\x24\x7d\x56\x20\x65\x53\x1c\x7d\x99\xcc\x1b\x17\xad\xd2\x4a\xb2\x39\x9e\xa2\xf6\xa1\xaa\x64\xc0\xce\xdd\xb2\x2a\xef\x20\x91\xbc\xc1\x8b\x37\x79\x26\x48\x92\x4a\xc2\xf3\x37\xc8\xf2\xfa\x1b\x91\xf9\xd3\xa3\x8f\xcd\x71\x79\x0e\x46\x68\x82\xa9\xe9\xee\x49\x9f\x58\x56\x4e\x15\x82\x4f\xe2\x2f\xde\xe4\x99\x20\x09\xea\x5d\x8c\xaa\x49\x29\x8f\x5e\x76\x1f\x47\x7c\x7b\x79\xf2\x5f\x71\xef\xaf\x55\xbc\xc1\xee\xd1\xde\x74\x2d\xd7\xb8\xfa\xdb\x3c\xfc\xe2\x4d\x9e\x09\x92\x28\x52\x9b\xce\x97\x46\x9a\x96\x7d\xe2\xc8\x2a\x9b\xb9\xdc\x2f\xf5\xc9\xe5\xd0\xfa\xc1\x64\xed\x0f\xd3\x1d\x0d\x27\x13\x23\xf5\xe1\x8b\x37\x79\x26\x48\x92\xd3\xba\xa7\x45\xae\xba\xd5\x3e\x42\x21\xad\xf7\xfb\xfb\x11\xa9\x21\x4d\xb4\x8c\xe7\xea\xe9\xf0\x67\xcb\x7b\x4b\xea\x4f\x23\x2e\x5e\x7c\xf2\xc1\x99\x20\x89\xf1\xdf\x95\xbe\x0f\x1b\x97\x4b\xf0\x2c\x93\x79\x5b\x85\x91\xf2\x3e\x0b\x0d\x1f\x3c\x1b\x4d\xe7\x1c\x57\xce\xd4\xc0\x34\xb1\x5f\xfc\xdf\x7c\xec\x81\x7a\xe2\xd9\x77\x1b\x65\x5c\x8b\x7c\xb3\x99\x30\x73\x6a\xbe\x90\x98\x20\x47\xe4\x95\x70\xfb\xcf\xf1\xac\xfa\x39\x9d\xc4\xc4\xa3\xf8\xdc\xce\x71\x92\x88\xe7\x2f\x88\x83\xbd\xdb\xfe\xa6\xb2\xcf\xe4\x70\x11\x34\x3c\x67\xca\xb1\x50\x22\xe5\x1d\x0a\xfc\xfe\x34\xb5\x8a\xa7\xf8\xb5\xcd\xd0\xeb\x9b\xc1\x7c\xb6\xd0\x1c\x19\x88\x83\xbd\x84\x02\xdd\x5e\x5e\x8f\xb9\xba\x7d\x49\x2a\x85\x2c\x3a\x50\x68\x8b\x4e\xfd\x4a\x2e\x2f\xbf\xba\x28\x85\x4f\x1e\x4e\xc2\x06\x7a\x5b\x3b\x42\x16\xc4\xc1\xeb\x9c\x54\xdb\xb0\x0d\x38\xd8\x5c\xe9\xe2\xd9\xd3\x66\x0e\xb5\x77\x79\x7c\x89\xe7\xb9\x9b\x6b\xdc\x2d\xbb\xca\xda\xb1\xc1\x17\x21\x8a\x50\x9d\x13\x00\x07\x5f\x3d\x6d\x36\x3d\xf4\xc4\xf9\x8d\x94\xb3\x63\x8a\x46\x85\x4d\x7c\x95\xb5\xbf\x58\x90\xd2\x91\x61\xa6\x54\xca\xe7\xe1\x77\x12\x36\x68\x37\x1f\x88\x83\xbd\x32\x3f\xf5\xdc\xe7\x8a\xe1\xad\x66\x7e\xeb\x6e\x34\xf6\x2b\x8e\x7b\xc5\xa8\xbc\xc9\xa2\xdf\x59\x48\xc7\x90\x3a\x93\xbc\xcc\x9e\x9e\x08\xb1\xdc\x0f\xe2\xfe\xa9\x1b\xf1\xe0\x5c\x41\x12\xd0\x13\xf7\xac\xb3\x34\xcb\x74\xdb\x64\xbd\x33\x73\x52\x9d\x2f\x69\x5f\xa7\x9e\xdc\x58\x9d\xb8\x1f\x96\x42\x19\xcb\x51\xff\xf8\x03\x13\xd1\xcc\x97\x16\x28\xd4\x0c\xe0\x60\xce\x5a\x2e\xe2\x70\x61\x15\x60\x22\xb0\x5d\xbf\xaf\xe1\xf5\x24\x85\xa9\xb3\x78\xee\xd9\x97\xbc\xc9\xbe\xec\xfc\x24\x91\xc3\x57\x5a\x50\x34\x03\xc4\xc1\xbf\xf5\x58\xee\x66\xdc\xd8\x7a\xfd\x62\x78\xfd\x7b\xb0\xaa\xa0\x6c\xc6\x65\x63\xaa\x71\x49\x64\xc9\xb6\xbb\x5f\x65\x94\x96\xd0\xd3\x04\xa1\x6f\x3d\x00\x07\x1f\x90\x17\x04\xb1\x56\xaf\x67\x24\x0f\x3a\xdd\xb1\x9c\x7b\x8c\xda\xe6\xae\x88\x89\x93\xd1\x22\x27\x3d\xcb\x7e\x68\x2f\xe8\x2b\x01\x6d\x93\x05\x71\xb0\x6b\x7b\x24\xf8\x4b\x91\x01\x6b\x16\xcb\xa6\xf4\x76\x2a\x29\x71\x16\x2d\x5d\x6f\x0b\xae\x4d\xc2\xcb\xdf\x29\x7c\xf5\x49\xb3\x22\x8c\xd0\xb1\x03\x20\x0e\xe6\x2c\x13\x24\x55\xad\xe0\xc6\x8c\x94\x44\x51\x49\x91\x5e\x46\x45\x7d\xfe\x4b\x35\x51\x52\xa3\xec\xc1\x05\x78\x01\x9a\x09\x96\xb5\x33\x08\x67\x81\x38\x84\xb3\xce\x15\x24\x01\xbd\x58\xcf\x3a\xab\xc1\xff\xf1\xdb\x59\x5e\x8d\xce\xce\x03\x19\x07\x56\x82\xdb\x47\x4f\x2e\x63\x9d\xb0\xe2\x11\x9f\xae\x44\xbd\x31\x57\x30\x7e\xf0\x16\xf1\xef\x41\x1c\xcc\x59\xec\x0b\x33\x14\x04\xe3\x68\x29\xf7\x87\x57\xc6\x6e\xcf\x33\xac\x23\xc7\xb6\x6c\x9d\xe8\x4d\x22\x63\x3c\x94\xf2\xc7\xbe\xd3\x09\xad\x46\x82\x38\x78\x7d\x40\x12\x1a\x01\xe4\x21\xee\xc3\x8c\x4d\x33\xa9\x61\x8b\xbe\x6f\x37\xee\xe2\x0b\x08\x7f\xef\x7e\xf0\xbd\xa7\x30\x71\x95\xb0\x0b\xaa\xef\x00\xe2\xe0\x45\x94\x02\xdb\x45\x47\xef\x4e\x17\x56\x38\x6f\xbf\x7e\xa7\x76\xb7\x4c\xed\x28\x52\x29\x56\x4c\xfd\x19\x56\x1e\x01\xc6\xa2\x5b\x18\xf4\xcc\x02\x71\xb0\x6b\x5b\x15\x9d\xfd\x9a\x52\x4e\x5c\x80\xa8\xb7\x34\x2b\xb2\xe6\x92\xfa\xb1\xb7\x80\xe3\x49\x91\x40\x43\x14\x69\xc6\xad\xcf\x9f\xd1\x85\x11\xb2\x20\x0e\xe6\x2c\x16\x25\x54\xac\x85\xb1\x01\x5e\x3e\xc1\x68\x41\xad\x85\x40\xc3\x2a\xbb\xc5\xea\xc1\x9e\xfe\x99\x25\x0d\x13\x4c\xd4\x45\xbf\x27\x88\x4f\x3d\x10\x87\x38\xc1\xf4\x7c\x41\x12\xd0\x00\xea\xac\xb5\x3e\x66\x5d\xdb\x1b\xef\x44\x55\x92\xfa\x15\x98\xd6\xed\xb6\x32\x2e\x22\x9c\xe8\x1e\x4d\xb5\x33\x43\x4a\x6e\xd0\x79\x8a\x46\x08\x3d\xb4\x40\x1c\xcc\x5a\xaa\x97\x0f\x9f\x15\x44\x71\x2c\xd4\x27\x90\xa2\x4b\x3c\xf7\x29\xa0\x54\xeb\x8e\x53\xbc\xee\x21\x82\x4f\x25\xa7\xcf\x2c\xd0\xf4\x19\x21\x0b\xe2\x60\x1e\x98\xef\xa9\xa5\x76\xaa\xdc\xa7\x8a\x6b\x92\x58\xd9\x54\xbf\x9d\xc5\xf1\x13\xa5\x33\x35\xab\xfd\x21\x71\xd3\x55\x64\x72\xc9\x50\xa8\xc4\x33\x88\x83\xc9\xbe\x8d\x9c\x78\xcb\x12\x63\xeb\x77\xfb\x27\x27\xaa\x5f\x3d\x8a\x71\x9e\x5b\x1e\x67\x03\x8f\x7a\x50\x99\xf0\x1b\xfc\x74\xdb\xf7\xf4\x08\x59\x10\x07\xbb\xb6\xef\xc3\x17\x09\x1b\x3b\x79\x0f\xa6\x76\x35\x49\x99\xe5\xbb\x1e\x4b\x06\x8d\x38\xbc\x68\x22\xf7\xd3\xf4\x7c\x56\x96\x40\xad\x0b\x7d\x41\x82\x38\x98\xb5\xe8\x5b\xe9\x12\xe8\x73\xc7\x0a\xd0\x25\x3e\x6f\x64\x0d\xd9\xf8\xf1\x56\x59\x53\xa2\x26\x51\x25\xd4\x18\xba\x7c\xd0\x0b\x5a\x57\x47\x58\x0b\xc4\x21\xac\x75\xbe\x20\x09\x68\xa0\xfc\x1f\x27\x08\x96\x18\xe4\xdb\xdd\x32\x09\x52\x31\x94\x57\x42\x31\xa5\x7f\x7c\x59\x2a\x2c\x9f\x6e\xe8\xab\xe8\x3e\x81\xf8\xd4\x2f\x66\x4a\x68\xff\x39\x88\x83\x59\xab\xd8\x67\x64\xfa\x74\x4e\x1e\x53\x1e\xfd\xe9\x1b\x9e\x2c\x17\x41\x0e\x8e\xc4\xc8\x01\xae\xd7\x9f\xec\xb4\xfb\x38\x6a\xc3\x4a\xfe\xef\xb8\x20\x00\x07\xf3\x40\x92\x75\x09\xe3\x09\x3f\x96\xee\x09\x99\xca\x7d\xa5\xb6\xe5\xfe\xf0\xfa\x5f\x9a\xcd\x36\x59\x94\x04\x58\x16\x2d\xb9\x98\x6b\x85\x08\x59\x10\x07\x93\x35\xf3\x4b\xeb\xbf\x3d\x9f\xda\xaa\x9f\xe6\x90\xc6\x74\x70\xbc\xa9\xf0\x6a\xd9\xfc\xcf\x44\xb3\x57\x30\x07\x5b\x9a\x82\xe7\x73\xe8\x14\x5b\x10\x07\x9f\xfc\x7b\x5d\x9c\x69\x36\xeb\xb3\x2a\x22\x67\xd7\x89\x49\xcb\xae\xdc\xcc\xa7\xac\xd3\x6f\x43\x70\x84\x9b\x27\x3c\xa2\xfb\x60\x02\xaa\x48\x02\xe2\x60\xd6\x8a\x8e\x8c\xc3\x6b\x52\xb5\x93\x5c\x2d\x97\xbc\x8c\x13\xf2\x40\xf8\xd3\x78\xef\xed\x71\x0f\xed\x96\x8c\xd6\xeb\x5d\xf1\x7d\x77\x02\x11\xd6\x02\x71\x08\x6b\x9d\x2f\x48\x02\xfa\x20\xfa\x8f\xfd\x99\xe6\x94\xd9\x11\xae\x9d\x8f\x65\xd1\xc6\x3f\x9b\x8a\xe8\xb8\x88\x76\x68\x66\xaa\x19\xed\xe7\x73\xdb\x86\x7f\xab\x7b\xb4\x09\x6d\xa6\x05\x71\x30\x6b\xdd\x79\x2d\x98\x56\xad\x14\x14\x53\xb0\x2f\x51\x22\xcd\xfc\xc3\xb3\x51\xb7\xca\xbf\x5d\x9a\xa2\xd2\x73\xf9\xf5\x1f\x97\x5f\x0f\xa1\x4d\x74\x20\x0e\x7e\x8a\x64\xa5\xec\xb5\x9d\xf9\xc7\x24\x6a\x56\xb3\x9e\x53\x9f\x08\xf0\x51\x79\x03\xef\xb3\xe8\x22\xf5\xd2\x44\x2c\x25\x6c\x68\x3d\x83\xb6\xa5\x81\x38\xf8\xd6\xdf\xb1\x9c\xb7\x87\xcb\x99\x23\xee\x28\xf6\x57\x7c\xd2\xbf\x20\xbb\x98\x11\x6c\x2e\x15\xab\x0d\x32\xf6\x59\xb1\xfa\xde\x43\x85\x46\xdb\x20\x0e\x76\x6d\x79\xdf\x6b\xf4\x84\xb0\xb5\x97\xa4\x07\x4b\xbd\xc8\x1d\xd8\xf8\xd3\xf2\xc0\x80\x9d\x09\xc7\x47\x23\xe7\xe8\x79\xf5\xf3\xb4\x9f\x7f\x11\xb2\x20\x0e\x66\xad\x58\x37\x63\x8f\x75\x6f\x19\x72\x07\xde\xf5\x37\xcf\x26\x18\x6d\x9a\x0c\x69\x1f\x45\xbd\xb9\xcd\x97\x11\xf4\x23\x30\xbc\x57\x97\x1c\x61\x2d\x10\x87\xb0\xd6\xf9\x82\x24\xa0\x0f\xdf\xb3\xd6\x12\x8a\xd9\x95\x6c\x49\x68\x8d\xcd\x4a\x97\x92\x70\x90\xa8\xec\x7f\x5e\x71\xba\x54\xb9\xee\xc5\x33\x39\x9b\xcb\x46\xf8\xb9\xb2\x13\xf1\xf7\x41\x1c\xcc\x5a\x99\x0a\xe9\x62\x33\x2c\xc4\x79\x7d\x62\x22\xa1\xdb\xa1\x69\x06\x16\x21\xdf\x37\x93\x4b\x12\x05\xda\x1b\x83\xea\xdd\xa4\x7d\x4d\x10\xb2\x20\x0e\xe6\x01\x09\x6c\x9f\xc7\xdc\x5c\x1b\xdc\x7f\x8b\xb8\x45\x8c\xa3\x99\xe2\xc3\x34\xff\xa4\xbd\x59\x13\x0f\xac\x0d\xa5\xd6\xb6\xb6\xa4\x66\x46\xc8\x82\x38\x98\x2c\xcf\xac\xac\x3d\xae\xfe\xac\x94\x9d\xde\x1b\xfd\x3a\x9f\x00\xa1\x8f\x8a\xf6\xdd\xe9\xaf\xe4\xaf\x89\xd5\x85\x38\x12\xad\x9f\x42\xa9\x3a\x10\x07\xbb\xb6\xc7\x4f\x8e\xea\x85\xbd\xcd\xb2\xaa\x12\x72\x88\x0a\x65\x90\xcc\x24\xa7\x67\x6f\x48\x3d\x42\x65\xf8\x7b\x09\x13\xb5\x93\x33\x16\xca\x28\x81\x38\x98\xb5\xde\x75\xc8\xd2\x1f\x44\xd1\xf0\xe3\x58\x6e\xab\x45\xb1\x34\x5c\x0e\x2c\x95\x7c\xe2\x6b\x22\xc0\xfa\x22\xbe\x68\x74\x34\xf4\xd6\x26\x54\xa2\x0b\xc0\x21\xac\x75\xbe\x20\x09\x68\x82\xe3\xac\xb5\xf6\xac\x4c\xda\x54\xef\xcd\xa3\x1e\x73\x4c\x66\x76\xa9\xfa\xdd\x93\xde\x54\xd1\xd5\xc9\xa2\xbc\x2c\x6e\x73\xe7\x8b\xc0\x54\x0e\xb4\xf5\x17\xc4\xc1\xac\xf5\x0b\x19\x69\xd9\xc2\x85\x34\xd9\x21\x78\xce\x8c\x74\xd3\x2a\xf2\x50\xa3\xa5\x36\x5a\x12\xc3\xcd\x32\x90\xb8\x35\x42\x16\x4b\x0f\x4a\x7e\x01\x38\x98\x07\xa8\x02\x5e\x75\xa1\x61\x5c\xe9\x55\x8d\x63\xe9\xd9\x12\x7d\xd1\xaa\x42\x8a\xd2\x1b\x7b\xfa\x43\x71\xac\xe5\xb8\x18\xf7\x0b\xdf\x3d\x84\x2c\x88\x83\x1f\x42\x3f\x84\x9b\xe6\xbf\xc3\x9f\x18\x8b\xe4\xea\xa9\x43\x24\x76\x7b\x3c\x26\x8b\xdf\x3b\x54\xcf\xca\x76\x75\x01\x1d\xb5\x6d\x0f\x0a\xeb\x81\x38\xd8\xb5\x8d\xb9\x59\x98\xba\x56\x21\x2a\x53\x55\x77\xd7\x66\xb0\xdf\x18\x27\x6a\xd1\xee\x0d\xf7\x7d\x4f\x7b\xc3\x09\xbe\x1b\x7d\x7f\xcd\xa0\x3d\xf0\x20\x0e\x66\xad\x3d\x22\xf6\xdb\xc2\xca\xbf\x03\xf7\x35\x26\xcd\xe9\xf3\xea\x3b\x1c\x2b\xf7\x3d\x47\xf0\x9f\xb5\x16\x2e\x4c\x72\x3d\xd9\x45\xb7\x80\xce\xbd\x00\x70\x08\x6b\x9d\x33\x48\x02\x9a\xc1\xfe\x27\x48\xf2\xe0\x4c\x90\xe4\xf9\x38\x16\x35\xca\x0b\x8d\x64\x5e\x27\x8d\x4b\x9c\xe1\x8c\xeb\x29\x83\x29\x36\x12\x0e\x3a\xae\x2b\x81\xaf\xe7\xdf\x5e\x79\x77\xd1\x88\x85\xaf\xd8\x83\x33\x41\x92\x26\xd1\xf9\x74\x3c\x82\x8f\x81\x5d\x0a\xed\x85\x93\x7c\xc7\x5f\xc7\xe3\xa9\xb1\x5d\x31\xe5\x0b\xdd\x5d\xad\x32\xfe\x5e\x4b\x08\xb8\x78\x93\x67\x82\x24\x8e\x5e\x04\x2c\x07\x57\x27\x3d\xa7\x9b\xa5\x35\xda\xed\x97\x03\xdc\x39\x2e\xa5\x5e\xea\x6f\xa0\xca\xff\x70\x58\x95\xaa\xbc\x30\xf1\xbf\x99\x5b\x04\x5d\xcb\xb3\x1d\xbc\xb7\x35\xa7\xd2\xb7\x33\x38\x67\xdb\xaa\x72\x29\x5d\xbd\xf0\xf5\x1b\x7b\xd7\xcb\x2b\x3e\x91\xa1\x9e\xa9\x12\x59\x1d\x69\x13\xd0\xda\x0e\x88\x83\x75\xf0\xe3\xf2\xdc\x78\xd5\x23\x89\x1b\x1b\xb8\x6d\xed\xa2\x22\x3f\xef\xea\xa8\x13\x36\xdc\x97\x88\x3f\x99\x3c\x15\xac\xbe\xbc\xe3\x01\x0d\xa4\x41\x1c\xfc\x94\x50\x7c\xcb\x44\xca\x21\xcc\x44\x46\x71\x8f\x9d\xfa\x94\x99\xa2\x14\xbd\x6a\x5e\xf2\x34\xb5\xe4\x8c\xdf\xe2\x3f\xa9\xad\xee\x41\x3b\xa5\x41\x1c\x4c\x36\x8f\x6d\x22\xb0\xea\xd2\x75\x65\x2c\x35\x6c\x15\x37\xb2\x24\x83\x11\xa3\x0f\xcd\x95\x8e\xaf\xf9\x16\x77\x7a\x97\x69\x66\x24\x91\x11\xb2\x20\x0e\x76\x6d\x95\x04\x6f\x99\x38\x2c\xd4\xf4\xd3\x7e\x7f\x5f\x82\xce\xe3\xe9\xd5\x5e\xa2\xd7\x3e\x2b\xcf\xfe\x21\x73\x31\x3d\x83\x27\x1f\x05\x1a\x44\x81\x38\x58\x07\x47\x65\xd1\x7b\xcf\xc1\x9f\x7c\x35\xc0\x04\x5f\xf8\x66\xfa\x95\x7a\x97\x78\x9e\x1b\xfe\xd6\x6d\x7d\xac\x2a\x6b\x5d\x3a\xa7\x0c\x3d\x88\x0e\x0e\xe2\x10\x1d\xfc\x7c\x41\x12\x50\x9f\x39\x6b\xad\xec\xc9\xaf\x28\x6f\xdd\x8d\x46\xf6\x2e\x3f\x1b\x9f\x1e\x73\xe1\x7a\xf0\x73\x8d\xac\x37\x98\x03\xe5\xfa\x6b\x0f\xf2\x96\xed\x1f\x04\x88\xbf\x0f\xe2\x60\xd6\x1a\x23\xa4\x3d\xa2\x10\x9f\x0e\x6a\x7f\x18\x55\xa4\xcd\xb2\x27\xbd\xac\x30\xc7\x21\xa6\xfa\xd6\x2b\x92\x05\x4b\xc1\x83\x01\x15\x7a\xc8\x83\x38\x78\x98\xa8\x90\x2d\xff\xc7\xbc\x12\x37\x7b\xf1\xb5\xd5\x2f\x78\x4f\xd7\x45\x75\xd8\x27\xdc\xee\xb4\xa6\xa7\x94\x89\x39\xd4\x6a\xdb\x9e\x40\x61\x22\x00\x07\x93\x3d\x1e\x10\xe8\x61\xb7\xa7\xb5\xfb\x13\x28\x28\xff\xf7\xf3\x03\x51\xa7\x57\xeb\xe4\x5f\x90\xcb\xb3\xd5\xee\x3e\x5a\xe8\xff\x1b\xb7\x01\x75\x04\x00\x07\xbb\xb6\xd3\x8d\xe8\x28\x45\x4b\xc9\x91\x5b\xeb\x4a\xf2\x12\x84\xd2\x96\x6a\x25\x5b\xd4\xd7\x25\xde\x59\x3d\x49\x58\xd7\xa1\x59\x72\xcf\x44\xc8\x82\x38\x98\xb5\x08\xb1\x12\x5e\x17\xe2\xcd\x75\x33\x8b\x16\x61\x9b\x29\x77\xed\x11\x07\xa6\xce\x10\xe0\xbf\x7b\xb7\xc4\x32\x21\xb0\x31\xaa\xfb\x01\x61\x2d\x10\x87\xb0\xd6\xf9\x82\x24\xa0\x67\xe3\x7f\x0c\x4b\x5c\x1f\x1b\xfc\x8c\x77\x1c\xd8\xbd\x5c\x54\x58\xac\xba\x5c\x6b\xbf\x4e\xe6\xf1\x82\x5f\x26\x0e\x53\xd5\x86\x83\xf1\x70\x1b\x9a\x60\x06\x71\xf0\xd5\x7e\x61\x06\x1b\x7d\x76\x54\x82\x3e\x1d\xbc\x9f\x9d\x31\x3d\xd7\xba\x6d\x35\x3a\x2c\xb7\x2e\xcd\x7e\xe6\x77\x7e\x42\xe7\xfc\x7f\x27\xd0\x80\x38\xf8\x21\xc4\xa3\x46\x99\x14\xaa\xbd\xdd\x44\xec\x6e\xc9\xae\x31\xee\x4b\xea\xf8\x14\x41\x92\x94\xbe\xf8\xc8\x5a\x6a\xf9\x7f\xe9\xef\x41\xe5\x63\x40\x1c\x4c\x56\x81\x0c\xd3\xb9\xdc\x7c\x88\x7d\xc6\x67\x6e\x68\xd4\xd1\x55\x6a\xd6\xe1\xc7\x69\x12\x7d\xcb\xc0\x38\x96\x7f\x52\xc6\xdd\x5b\xd0\xae\x17\x10\x07\xbb\xb6\x2f\x9e\x38\xf3\x46\x44\x9b\x08\xe7\xb9\x89\xee\x4e\x7a\x9d\x7c\xbe\x8b\x52\x73\xef\x88\xf1\x80\xdb\xa8\xe1\x27\xeb\x72\x69\x47\x00\x42\x16\xc4\xc1\xac\x25\xd0\x41\x6c\x8f\x83\xde\x14\xf4\xdc\xd7\x39\x61\xab\x5d\x29\xc6\x91\xb9\x93\x7b\x9b\x3f\x97\x83\xd6\xeb\xc7\x00\xef\x96\x57\x12\xc2\x5a\x20\x0e\x61\xad\xf3\x05\x49\x40\x6b\xfc\x67\xad\xf5\xa6\xbe\xb1\xc3\x7d\xb4\xad\x30\xd4\x50\xc9\x2a\x68\xfc\x13\x97\x9b\xaa\x4f\xd6\x52\xf3\xe6\x09\x7b\x57\x77\x7f\x3a\x81\x3a\xb4\xd7\x01\xc4\xc1\xac\x55\x13\x60\xb1\xfe\x30\x5a\x67\xf8\x32\xf3\xd4\x3b\x2c\x73\x63\xcc\xf2\x98\x44\x3d\x6c\xd2\x15\x4c\x0a\x61\xfc\xb2\x0f\x2b\x2f\xa1\xcd\x7f\x20\x0e\xe6\x01\xab\x01\x4a\xf3\x67\x0f\xfb\x72\x0d\x22\x4e\x2b\xfd\x06\x92\xcd\x3f\xc4\xff\xf2\x4a\xf2\x6c\x50\x1e\xb9\x39\x85\xf7\x06\x33\xb5\x0c\x21\x0b\xe2\x60\xb2\xa3\x16\xc6\xce\x4e\xb2\xf4\xa4\x7b\xbb\x6d\xfc\x9e\x9e\x14\x75\xd3\xb3\xde\xda\xcf\x98\x6f\xfd\x6a\xe4\xf6\xbe\x34\x6c\xc7\x0c\x7d\x51\x82\x38\xd8\xb5\xbd\xf4\x50\x62\x60\x96\xc2\xe5\x61\x3b\xbb\x48\x38\xb7\x4a\xa7\x55\xd1\x22\xe7\xcb\x2f\x31\x69\xa5\xa1\xd7\xfd\x5f\x8a\x98\x66\x40\xa9\x3a\x10\x07\xb3\xd6\xb9\x2b\x92\xd8\xdc\xff\x79\x35\xba\xeb\xb7\xdc\x8d\xea\x3a\x29\xa7\x62\x56\xaa\xe7\xde\xfa\x4d\xa5\xd9\xfc\xb2\x61\x42\xac\x43\xef\xba\x33\x7f\xfe\x3b\x48\x12\xcd\x83\xeb\xc0\xab\x7c\xf9\xb1\x89\x63\xce\x17\xa9\x1f\xd9\x49\xaa\x0b\xf6\xfa\x1d\xe4\x9f\xe8\x4e\x6f\x3f\xae\x0e\xab\xa9\xfc\x77\xd8\xd8\x4f\x2c\x11\x3b\x3f\x52\x77\x60\x98\xba\x31\x36\xb1\xa5\xb4\x61\x61\x34\xf9\xc0\x4c\x1b\xe3\xbb\x4d\xe7\xe3\x67\x57\xe2\x4b\x18\x61\x41\x12\x90\xf2\xd9\x20\xc9\xa9\x58\x89\x16\xbb\x71\x74\xdd\x98\x57\x5a\xc6\x62\x4e\xb1\x8b\xf1\xdf\x94\x6b\xbc\xaf\x97\x1a\xc7\x06\xda\x92\xfa\x52\x93\x6f\xfd\x0b\xf5\xcf\x37\x4a\xf7\x14\x90\x53\x61\x5d\xd7\xbe\x3f\x47\xfa\x63\xd7\x6f\xfb\xd6\x77\x4f\x99\x18\xc7\xe5\xf8\x53\x82\xde\xd9\xaa\x5e\x28\x48\x02\xd2\xfc\x27\x48\xf2\x16\x1e\x24\x29\x20\x5d\x75\xb8\x6d\x1d\xf4\xeb\x81\x7a\x54\xa2\x50\x4a\x88\xda\xef\x54\x7b\x67\xc2\x3e\x69\x86\x2c\xd3\x58\x33\x62\x8d\xb5\xf2\x0b\x07\x49\xde\xc2\x83\x24\x8d\x3f\xeb\x3c\x64\xd9\xde\x39\x0c\xbf\xc1\x2e\xd0\xd1\x31\xae\xea\xfb\x14\xa2\x3e\x1f\xc1\x61\x1e\xf5\xec\xa5\x5d\xf1\xe5\x20\xf4\x0b\x8f\xd6\xdf\x9e\x09\x92\xb0\xf8\xf8\xc8\x54\xc5\xd8\x60\xff\x49\x22\xd3\x54\x62\xa4\xd0\x7c\x2e\xd6\xbd\x1d\xaf\xc9\x97\x13\x5b\x2b\xdd\xf6\xe1\x26\x93\xda\xc5\x9b\x3c\x13\x24\x51\x61\xb8\xf5\x20\xc7\x33\x85\x7a\xdd\x91\x78\xe8\x6d\xd0\x11\x19\x66\x9b\x4b\x84\x15\xc7\x55\x09\x5f\xf9\xdd\x17\x3b\x2a\xa8\x2f\x2e\xde\xe4\x99\x20\x49\x8f\xda\xb3\x2b\xf2\xdc\x57\x72\xfd\xfa\x39\x65\x17\xa8\xdc\x0a\x5a\xe7\x03\x6d\x83\x48\x6e\x73\xb7\x48\x9a\xb5\x58\x60\xaf\x99\x5f\xbc\xc9\x33\x41\x92\xae\x68\x91\x3b\x56\x3a\xab\xc5\xb5\x49\x6c\xa1\x3a\x77\xde\x4b\x8f\xf9\x7c\xff\x66\x47\xf7\x47\xe4\x15\x46\x77\xa4\xf1\xfe\xd7\xfa\x8b\x37\x79\x26\x48\xb2\xcb\xfd\xc4\x6d\xad\x37\x4e\x84\x44\x1e\xb3\xb2\x2d\x85\xed\x0a\x89\xc3\x98\x7f\xd8\xe0\xbd\x0d\x4f\x14\x4b\x9c\x93\xed\xfe\xa9\x8b\x37\x79\x26\x48\x12\x78\xe9\x23\x67\x7d\xd3\x6b\x55\x35\x79\x2e\xc7\x61\x82\x83\x4c\x97\x15\xee\x0e\x3b\x1a\xc6\xc9\x02\x13\xb3\xfc\xe8\xb7\xed\x17\x2d\x68\xa3\x76\xbe\x9e\x78\xf6\xdd\x16\xbd\x35\x1a\xbb\xfa\xd5\x95\x7d\x40\xac\x53\x84\x3c\xb1\x7c\x5e\x80\x55\x51\x73\xc2\xaf\xa5\x89\x37\x92\x68\x28\x54\xd1\x18\x8a\x9e\x82\x38\xd8\xbb\xad\x24\xf7\x76\x10\x59\xba\x8c\xbc\x91\x1f\xd9\x4b\xea\xf8\x54\xf4\xcb\x62\x47\x23\x0f\xbc\xd3\x53\xd7\x90\x1c\x45\x1a\x50\xb6\xa1\x9d\xa7\x20\x0e\xf6\x12\xa2\xdd\xcb\xa3\xaf\xb4\x3e\x48\x43\x4a\xe8\x9b\xe2\x55\xe2\x12\x58\xcd\xa4\x79\xe2\xa2\x4e\x93\x67\x8e\x47\x1c\x5a\xe8\xee\xfc\x10\xda\x79\x0a\xe0\xe0\x75\x23\xb2\x59\xd8\xb6\x39\xec\xa7\xe8\x2b\x96\x96\xcb\xb4\xa7\x26\xbe\xc8\x60\xe0\x7c\x2f\xdb\x73\x67\x2d\x7d\xb2\x42\xa4\xe8\x05\xed\x43\x07\x71\xb0\xd3\xd5\xf6\x7f\x0e\x24\xfe\xce\x7a\x6c\xd6\xae\xca\xf5\xfa\xe4\xfe\x35\xec\x0f\xbf\x77\xa9\x17\x75\x74\xae\xf5\x3a\xa2\x88\x54\x48\x2c\x40\x95\xcc\x40\x1c\x7c\xd8\x74\x87\x49\x51\x9e\xbe\xdc\x5a\x49\x68\x0e\x3d\xfb\xca\x81\x5c\x6c\x62\xb4\x6e\xed\xf2\xa8\xf6\x23\x9a\x4b\xb1\x3d\x45\x6e\xa1\x88\xe5\x7e\x10\xf7\x4f\xdd\x88\xb7\xe7\x0a\x92\x80\x9e\xb8\x67\x9d\x65\x73\xb7\xd8\xe2\x7e\xcf\x5a\x2d\x7b\x83\xac\x6a\x5b\x42\x45\x0c\x8f\xf8\x1d\x5c\x2e\xc7\x5f\xcd\xab\x4f\x7a\x96\xad\xef\xcb\x43\x1f\x65\x20\x0e\xe6\x2c\xe7\xf2\xea\x2b\x18\x3f\x8e\xb5\x77\xea\x3e\x8e\x2e\xeb\x2f\x2e\x3f\xca\xd6\xee\xcf\xc1\xa4\xf1\x0d\xc3\x93\x65\xd1\x14\xac\x66\x47\xc8\x82\x38\x98\x05\xb0\xbe\xbd\x8a\xa4\x5d\x2a\x54\xc5\x69\x42\xfa\xa5\xd1\x28\xbe\xb9\xb3\x1c\x3a\xc7\xa6\x6b\x79\x1a\x7d\xfd\x8a\x77\x69\x4c\xf5\x27\x84\x2c\x88\x83\xc9\xa2\x11\xb3\x99\x76\x1a\x7e\xb8\xd9\x4a\x72\xf4\x75\xba\xb4\x4f\xee\xc8\xe3\x6a\x41\x6e\xfa\x77\x5a\x2f\x6e\xa9\x5b\xb4\xa2\x07\x50\x61\x74\x10\x07\x73\x96\xc8\x2d\x9b\x62\x7c\x0e\x06\xd1\xda\x84\x2c\xdb\xd8\xc2\xd9\x1f\x44\xba\x85\x99\x5a\x7f\x5d\x7a\x7e\xa0\x77\x6a\xe1\xb4\x95\x42\xdb\x5c\x40\x1c\xcc\x59\x32\xc1\x8b\x03\x8b\xc2\xa9\xb6\x36\xdb\xb7\x90\x5f\x47\x4f\xe2\xc9\xb0\xe7\x4b\xdb\x4b\xd7\xf4\x69\xf5\x50\x51\x94\x5a\xa2\x5a\x23\x9c\x05\xe2\x10\xce\x3a\x57\x90\x04\xf4\x62\x3d\xeb\xac\x4e\x69\xf5\x09\x92\x79\xa5\xe0\xe9\xdb\x94\x5a\x47\x19\x04\x3c\xef\x08\x42\x0e\xef\x6d\x6c\x1a\x10\x1a\xe1\xfe\xc4\xae\x3c\x81\x2a\x92\x80\x38\x98\xb3\xc4\x0a\x1f\xbb\xc9\xbc\x2a\xd9\xf6\x4b\x8a\xe4\x9a\xe2\x61\x7d\xfe\xe6\xd5\x83\x62\xeb\xad\x6f\xc6\xf4\x8c\x96\xb8\xe6\xb3\x07\xd0\xde\x7e\x10\x07\xb3\x80\x3d\xf2\x1f\xac\xa1\x68\xf5\x6e\xa3\x08\x11\x16\xee\x4b\x64\x5b\x2c\xe9\xfc\x2c\x7d\x26\xd8\x29\x86\x34\xc4\x29\xc7\xca\x28\xd0\xd1\x36\x20\x0e\x26\xeb\x34\xf7\xc6\xb3\x79\x9c\xfc\xf4\xb5\x4a\xa8\x63\x7a\x21\xdd\xcd\x5c\xbe\x38\x2d\x9a\x46\xbb\xca\xbe\xb6\x50\xac\x1d\xb3\x59\x35\x84\x2c\x88\x83\x39\x2b\xa1\xaa\x67\x31\x96\xe9\x63\xd4\xf5\x7b\xdc\xaa\x82\xb7\x16\x5b\xe3\x87\x5d\xf4\x14\xd3\x18\x82\xde\x96\x7c\x24\xfb\x7d\x53\x0e\xaa\x75\x03\xe2\x60\xce\x12\x92\xa0\x8d\x62\x77\xf8\x4a\x21\xf3\xde\x2a\xf6\xb3\x30\xcd\x3b\x7f\xec\xc4\xa2\x57\x97\xdf\x98\x07\x6f\x3b\xba\xee\x8f\x3c\x1d\x45\x7c\xea\x81\x38\xc4\x19\xa6\xe7\x0b\x92\x80\x06\x50\x67\xad\xe5\x5c\xca\xeb\x88\x32\x8c\x49\xbe\x86\x4c\x63\xd2\x22\x5c\xaa\x80\xf5\xd6\xf1\x55\xee\xe5\x06\xd2\x0a\xe1\x9c\x61\x2d\x66\x59\x68\x36\x11\xc4\xc1\xad\x85\xeb\xbf\xca\x34\xd3\x23\x33\x47\xb2\xc2\x51\x18\xf9\xde\x5b\xe5\x39\xdb\x30\xb9\x1e\xc1\x84\xbb\xf0\xe4\x8f\xbb\x59\xc3\x1d\x90\xb5\x00\x1c\xcc\x03\xcf\xb7\x8f\x91\xee\x34\x59\x3e\xd9\x2f\xde\xf8\x2a\x56\xf0\x7e\xea\x66\x8d\x44\x0e\x5d\x30\x17\x12\xd3\x4d\xe3\xe3\xcb\xcf\x54\xa1\x02\xa4\x20\x0e\xbe\xd2\xfb\x03\xbd\xf9\x06\x65\x65\x65\x72\x2a\xaf\x0e\xbd\x3a\x77\xb3\x9d\x9a\xaf\x01\xf1\x9b\x6e\x76\x92\x4b\x9d\x93\xa6\x9c\xd5\x50\xdd\x60\x10\x07\xb3\x96\xdd\x0b\xf5\x1b\x19\x9f\x0e\x1b\xf4\x29\x8a\xf7\xe5\xb0\x55\x17\x2f\xf7\x56\x46\x34\x1d\x91\x26\x77\x93\xae\x8c\x9a\x94\x0b\x25\x20\x64\x41\x1c\xcc\x5a\xbd\x53\x3d\xd8\x76\x0a\x45\xf7\x1b\x6a\xdd\x78\xd3\x0d\xdd\x63\xff\xa6\x6a\xc6\xaa\x87\x34\x15\xd0\xdf\x0e\xf9\x91\xf4\x86\x85\x03\x61\x2d\x10\x87\xb0\xd6\xf9\x82\x24\xa0\x81\xf2\x59\x6b\x95\xd9\x57\x4d\x71\xf6\x2f\x8d\x85\x72\x0a\x62\x14\x7d\xed\x48\xbd\xfc\x83\xef\xb5\x5d\x73\xf7\x38\x9e\x20\x7a\xac\x69\xcd\x65\x68\xef\x10\x88\x83\x59\xab\x5c\x66\x6a\xd4\x55\x9e\xe1\x66\x9b\xff\x5d\x23\x81\x6b\x1a\xa7\xb1\xc4\x81\xc7\xda\xee\x0a\x3f\x13\x9e\x16\x45\x19\xb4\x49\x28\x20\x64\x41\x1c\xcc\x03\x15\x3f\xdf\x17\x37\x1b\x0d\x35\x77\x3f\x19\x36\x0e\x08\x66\xbd\xfc\x4d\x1b\x5b\xea\x41\xbd\x8c\x88\xa6\x75\x4a\x52\xfb\xce\xd7\x69\x84\x2c\x88\x83\xc9\xee\xae\x0e\x75\x30\xa3\xac\xce\xd9\x10\x7b\x65\x51\x79\xf6\x33\xcd\xd3\xa2\xf4\xad\x0c\x54\x2a\xbb\x1d\x85\x3d\xfc\xbb\x82\x3b\x85\x90\x05\x71\x30\x6b\xdd\xa5\xd7\x36\x8a\xfb\xa3\x63\x5f\x3c\x6b\x6e\x99\xd1\xf8\x0c\x7d\x93\xc5\xe7\x8a\x11\x5f\x67\x2d\xff\x8f\x98\xe6\x04\x5a\x63\xe8\x22\x80\x38\x98\xb5\x5c\xc5\x88\x44\x37\xc9\x1e\x0e\x67\xba\x1c\xc8\xe2\x3b\x5d\x22\x34\x7c\x15\x75\xb0\x25\x3c\x21\xf4\xed\x53\x05\xbe\x71\x6e\xff\x23\x84\xb5\x40\x1c\xc2\x5a\xe7\x0b\x92\x80\x3e\x88\xce\x5a\xeb\x4e\xc6\x84\x94\xd1\x32\xe5\x22\xa6\xfb\xef\x79\x2a\x0d\xda\xed\x22\x21\x79\xe7\xd2\xab\x79\x2b\x03\xc8\x77\x69\x8f\xb2\x6c\x5e\x42\x89\x0f\x00\x07\xb3\x96\x4a\x6d\xd3\x2a\xe3\x0b\x56\x42\x14\x9e\x5b\x6d\xe6\xd9\x3b\xf7\x38\xae\xe7\x35\xfe\xe8\x1d\x7a\x81\xad\xa5\xab\x64\x26\x87\x21\x8e\x90\x05\x71\x30\x0f\xc4\x13\x66\xfb\x87\x45\xdc\xf8\xf2\xea\xd9\xcc\x8f\x00\x0c\x23\x8b\xab\x4c\xcc\x37\xbf\x2f\x0d\xc4\xcd\x7c\xd3\x96\x52\xce\x8c\x87\xac\x05\xe2\x60\xb2\x6c\xe1\xc4\xde\x5e\xfd\xc5\x68\xc7\xec\xa6\x32\x96\x47\x7c\xb3\x22\x9a\xfe\x8a\xc5\x74\x38\x3c\x5a\xe9\x78\x3f\xf7\x22\xea\xf7\x10\xb2\x20\x0e\x66\xad\x24\x45\xab\x6c\xbf\x99\xbb\x0c\x93\xf5\x73\xc6\xce\xb7\xab\x84\x64\x9d\x54\x67\x3a\x66\xc9\x29\x12\xb5\x66\x6d\x83\x8c\xac\xa1\x59\x3a\x10\x07\x2f\xcf\x14\x46\xfb\xb5\xfd\x51\x23\x26\xd6\xbe\x90\xaa\x3a\x19\x99\xb4\x54\xbf\x85\x68\x32\xe7\xb4\x3a\x53\x8d\xad\x53\x65\x88\xdf\x67\x84\xb5\x40\x1c\xc2\x5a\xe7\x0b\x92\x80\x3e\x7c\xff\xe3\x80\xca\x78\xbc\x1c\xbd\x2b\x3e\x71\x3d\x6f\xc4\x47\xa9\xe6\xd2\x0c\x35\x35\x1f\x85\xf8\xb6\xa7\x4d\xcc\xec\x7b\x1f\xe0\x39\x34\xf9\x41\x1b\x29\x01\x1c\xcc\x5a\xbc\x96\x71\xdf\x54\x03\x8a\x3c\x1c\x79\xa2\xf4\xb2\xb9\x83\x8a\xa3\x71\xb1\xf2\x3e\xad\x8c\xb9\xef\xcd\xae\x36\x24\x12\xe6\x42\x19\x0a\x10\x07\xf3\xc0\xc1\xb3\x77\xa7\x6d\x53\x93\x59\xfe\xe5\xf7\xd6\x22\xfa\xaf\x7f\xe7\xa5\x0d\x91\xc5\x69\xfb\xf1\x36\x7a\x36\x50\xa0\x2d\x6c\x18\x5a\xba\x04\x71\x30\x59\xb1\x4c\xc9\xab\xad\x78\x45\xa6\x84\x3f\xcb\xe7\xfb\xae\xe3\x6f\xf9\xdf\x5c\xba\x8b\x3d\xe9\x1b\xe9\xfa\xd0\xf6\xad\x3a\x7a\x82\x2b\xf4\xfa\x06\x70\x30\x6b\x9d\x5c\x37\x61\x3e\xb1\xc4\x18\x33\xc5\x2e\x0f\xe0\x5d\xa2\x0c\xf5\x88\x1e\xa0\xf0\x7f\xd0\xd4\xf6\xd4\x3e\xe6\x4f\x48\x83\x34\x24\x0b\xe2\x60\xd6\xba\xe3\x2d\x5c\x17\x63\xb2\x3b\xd6\xfa\xc7\xc9\x67\xdd\x4a\x89\xd0\xef\x01\x79\xf3\x10\x6b\x47\xf6\xb7\x2a\x92\x26\xef\xf4\x74\x68\x7f\x26\x88\x43\x58\xeb\x7c\x41\x12\xd0\x04\xc7\x7f\x6c\xfd\x4d\xac\xca\x7e\xac\xcb\xc5\x9e\x49\xc9\x99\xc0\xc5\xf8\xcc\xdf\xfb\x5b\xcb\xf6\x83\x58\x0a\x83\x26\x53\xe7\x94\x3c\x1f\x17\x77\x28\xfd\x07\xe0\xe0\x25\xba\x4c\x85\xea\xab\x70\x42\x7d\x58\x28\xc8\xa5\x4c\x57\xb1\xe6\x53\x59\xac\x87\x4f\xbd\x9a\xe5\x0a\x2e\x63\x39\x2a\x7a\xc7\xeb\x23\x64\x41\x1c\x3c\x0f\x1e\x20\x90\x12\xda\x19\x63\x4e\x37\xd3\xc3\xb3\xa8\x3e\x1c\xac\xdf\xfa\x06\xdd\x4f\x78\x84\x6c\xf4\xe0\x7d\x41\x93\x1a\x03\x54\xfd\x0d\xc4\xc1\x4b\xd3\xfb\x6f\x29\x7c\xa2\x5d\x9a\x5b\xeb\xc4\xfd\xda\x9f\xb8\xfb\xd2\x08\x9d\xe1\x27\x77\x6e\x94\x0b\xa3\x5a\x67\x5d\x4f\x86\x01\xf4\x6b\x41\x1c\xcc\x5a\x97\x8e\xe7\xaa\xde\xde\xb9\xc9\xeb\xb0\x75\x47\xb6\x2a\xad\xce\x75\x76\x9a\x48\xd7\xe9\xfe\x3c\xfe\x6f\xfd\x15\xd5\xc5\xba\x05\xe8\xac\x5e\x10\x07\xb3\x96\x71\x24\x3b\x87\xf4\x97\xdf\xdb\x4f\xab\x2b\x5d\x28\x4d\x1d\x5f\xd2\x8f\x90\x89\x3f\xca\x70\x20\x7d\x76\x3f\x5d\xc7\x89\x44\xbb\x01\x61\x2d\x10\x87\xb0\xd6\x39\x83\x24\xa0\x19\xec\x7f\x82\x24\x6f\xcf\x04\x49\xda\xe8\x28\x65\x2d\x6c\xaf\x3d\x18\x7c\x19\x9a\xf3\x78\x30\xd3\xb2\x59\x90\x3a\x26\x72\xd2\x95\xa0\x8e\x22\xda\x39\x83\xbe\xec\xdb\xc5\x27\xfa\xce\x04\x49\xe8\x25\x15\x7c\xd5\x4a\x1b\xdf\xb8\xdd\x1a\x26\x93\xca\xd6\x5a\xe7\x4d\x9d\xc9\x2c\xf7\xff\x44\xda\x63\xf0\xbb\x3c\x63\x05\xaf\xf4\xe2\x4d\x9e\x09\x92\xb8\x12\xea\x4d\xb0\x57\x77\xe6\x2d\xe6\x4a\x3c\x9c\xd6\xa6\x1e\xc6\x1b\x90\x97\x55\xe6\x7f\xed\x72\x33\x63\x05\x75\xf7\xf0\xab\xd7\xff\x66\x6e\x11\x74\x2d\xcf\x76\xf0\xca\x05\x9e\x5a\x3f\xed\x55\xfb\x26\x63\x74\x2a\x65\xd2\xbc\x14\x29\x3a\x3c\x1d\xb3\x42\xdb\x60\xc3\x46\xcd\xe5\x9f\xc4\x93\x58\x08\x13\x82\x38\x58\x07\xbf\xb1\x1f\xc0\xec\xf6\xab\x20\x80\x19\x59\xb5\x45\xc1\x6c\x11\x97\x3e\xe9\xab\xb2\xa4\x7c\xad\x96\x97\x04\xce\x7e\x44\xef\x1d\xe8\x83\x1a\xc4\xc1\x7a\xe2\x77\xe6\x0c\x3b\x85\xb9\x8c\xb6\xb6\xb1\x65\xbd\xe0\x08\xbe\x28\x4d\x8b\x23\x7c\xa6\x31\x0c\xb6\xdf\x85\xd5\xaa\x41\x0c\x62\x89\x08\x59\x10\x07\x93\xf5\xd6\x2b\x8d\x08\x1d\x7e\x99\xd9\xe6\xd0\x58\xf8\xb7\xc2\x80\xdd\x86\x33\xe9\xc6\xe1\xe6\xcb\xb5\xd6\x29\x79\xef\x97\x4f\x78\xb5\x10\xb2\x20\x0e\xd6\xc1\x4f\x3f\x6a\xbe\xdd\x0f\x23\x7d\xaf\xf7\xf4\xd3\xd8\x9d\x37\xc2\x7a\xa8\x0b\xd9\x84\xd7\x15\x6e\x04\xb8\xe7\x06\x76\xd6\x0d\xad\x6d\x23\x64\x41\x1c\xac\x83\xeb\x64\x0d\x6a\x24\x04\x33\xaa\x96\xd1\x1d\x29\x3e\xbf\x84\xab\xf0\xa6\xf3\xca\x8e\xfc\x1a\xb2\xa0\x4c\xe0\x25\x53\x6e\x43\xa3\x43\x44\x07\x07\x71\x88\x0e\x7e\xbe\x20\x09\xa8\xcf\x9c\xb5\x56\xa4\xf5\xdf\x2c\xfc\x84\xbb\x5e\xd6\x8f\x44\x34\x6c\x66\x1f\x66\x44\xa9\xe1\xb8\xc7\x87\xf6\xdb\xb7\x3f\xfd\x40\xda\xec\x12\xfa\x04\xf1\xf7\x41\x1c\xcc\x5a\x04\x4d\x2e\x54\xf8\x02\x5d\x3c\x6d\x65\x7f\xd7\xef\xcf\x56\x92\xb6\x28\x77\x88\x48\x1c\x5f\xdd\x53\x3f\x59\xe1\xce\xa0\xee\x80\x46\xbc\x20\x0e\xe6\x81\xd5\xcb\x15\x56\xf2\x25\x9e\x4a\xaf\xb6\xae\xbd\x5b\x8a\xb8\x86\xfc\x60\x42\x84\x88\x96\xcb\xb0\xea\x6e\xd7\xd7\xf1\x9d\x74\x0c\x28\xdf\x0a\xe2\x60\xb2\xd9\xc9\xf7\xff\x04\x0c\xe7\x92\x5d\xb7\x90\xec\xba\xad\xdb\x66\xe6\xa1\xdc\xdd\xe0\xa4\x50\x35\x47\x9e\xb9\x49\xa6\x40\x30\x8a\x0b\xa5\x69\x00\x1c\xcc\x5a\xed\xab\x91\x3a\xe1\x0d\x19\x6c\x52\x2d\x5b\xe5\xdf\xb2\x3a\x58\x3c\x27\x0d\x49\xbf\x8c\xba\x9b\xa1\x74\x87\x7e\xb9\xe3\xfa\x0b\x3a\x76\x10\xc4\xc1\xac\x15\x5e\x10\x2b\x9b\xa4\x40\xf4\x82\x63\x32\x20\x5e\x1a\xd7\xe9\xc9\x0b\x16\x97\x8e\x30\xbf\xcc\x3c\x1e\xab\x90\x6e\x79\xc2\x5b\x37\xa1\xf2\x8e\x00\x0e\x61\xad\xf3\x05\x49\x40\xcf\xc6\xff\x18\x96\xdc\x67\x5a\x20\x4f\x0a\xbd\x54\x2f\xf8\xc6\x07\x59\xa5\xb6\x0a\xc7\xb1\xe1\x0e\xab\x46\xc3\x7d\xd5\xbe\xd3\x2d\xcf\xb2\x66\xe8\xac\x58\x10\x07\xb3\x96\x2f\x6b\x2e\x73\xdc\xee\xc2\x16\x92\xd0\xf2\x60\xdf\xe6\xfe\x15\xba\x42\xad\xf5\x7d\xe9\x1b\x2f\xcd\x6a\x64\xfe\x8a\x94\x8e\x40\x5f\x3d\x20\x0e\x7e\x06\x8d\x89\x40\x0b\xd9\x68\x0d\x59\x66\xeb\x1d\xb9\x4f\x3f\x5e\xb4\x19\x5e\xd2\x19\xc2\xe4\x60\x33\x24\xf0\x9c\x3e\x89\x63\xbd\x1f\x06\x6d\xd7\x04\x70\x30\x59\x56\x71\xc3\x40\x03\x0c\x11\xbd\x4b\x6a\x4f\x49\x14\x1f\x0a\x57\x6c\xf6\xfc\xfa\x99\x36\xec\xec\x62\xd6\xd7\x66\x96\xb7\x12\x0b\xf5\x2f\x10\x07\xb3\x56\xd7\x4e\xcf\x40\xc8\xa1\xdc\x10\xaf\xde\x6f\xbf\x0d\x3b\x81\xdf\xfb\xbb\x6a\x11\xd9\xb7\xfb\xc8\x5a\x76\xb1\xb2\x3e\x92\x68\x1f\x20\x64\x41\x1c\xcc\x5a\xb3\xf2\xb8\x8a\x4f\xfb\xc8\xfc\x5a\x8d\x4c\xdb\x67\x0b\x4e\xa7\x37\xc9\x5b\x88\xb7\xb3\x75\xd2\x49\xc6\x12\x2a\xfa\xf5\x71\xd6\x10\xd6\x02\x71\x08\x6b\x9d\x2f\x48\x02\x5a\xe3\x3f\x6b\x2d\x5d\xa9\x10\xdd\xbe\xef\x31\xba\x32\x54\xea\x7d\x2f\x0f\x99\x89\xcc\xee\x7f\xfc\xf0\x97\xf4\xcb\x83\x09\x01\x2d\x96\xca\xa0\x6b\x50\x79\x47\x10\x07\xb3\xd6\x6e\xc4\xd6\xec\x37\xeb\x69\xdb\x05\xfd\x1d\x35\x3b\x1b\x3a\xf5\x1e\x9b\x98\xe1\xd8\x54\xb9\x21\x95\xa4\xba\x59\xfe\xb1\xd4\x19\x68\x52\x05\xc0\xc1\x3c\x70\x4f\x10\x79\xbd\xe7\xb3\xc6\x8d\x6b\x04\xe9\x66\x4c\x0f\xde\x1f\xce\xa1\xc7\xd9\x66\xde\x7e\x1b\x90\x7b\x9d\xe6\xf9\xaf\x71\x6d\x4c\x84\x2c\x88\x83\x57\x0e\xdd\xb4\xc3\x3c\x7a\xf4\xf1\xf7\xd4\xa6\x4f\xe6\x96\xbd\xf1\xfc\xb7\xb9\xbc\x45\x7a\xff\x99\x70\x11\x73\x6c\x7b\x37\x2e\x3a\x68\x1e\x0c\xc4\xc1\xac\xa5\xfc\x60\x53\x3a\x8c\x4c\xe9\x2e\x81\x54\xb0\x9c\xd8\x50\x75\x17\x4a\x11\xf6\x02\x95\x53\x02\x6b\xf1\x53\xcd\x11\x2a\xca\x0f\xb1\x08\x59\x10\x07\xb3\xd6\xb9\x2b\x92\xdc\x71\xde\x2e\x7d\x5a\x20\x72\xfc\x8b\xb5\xd1\x73\x43\x4e\x22\x5d\xe9\x60\x60\xd7\x67\x40\xd5\xc4\xf9\x84\x54\x3c\x28\xeb\xe1\xc3\x7f\x07\x49\x3e\xd2\xb1\xce\x11\xc5\xe4\xb6\x79\x48\x7a\x3c\xb3\x1a\xfc\x88\x4a\xa7\xab\x18\xf5\x64\xf8\xbe\x62\x1b\x6d\x9e\x31\x2b\xa3\xe3\xec\xbf\x57\x7a\x36\xc2\xc5\xbd\x65\xef\x93\x69\xc9\x8f\x9e\xb2\xb3\x6e\xe3\xe4\x3f\x46\x17\xb3\xba\xce\x19\x7e\xa5\x50\x6c\xa5\xde\x95\xd6\x1d\x16\x24\x01\x29\x9f\x0d\x92\xc4\xd1\x50\x13\xa2\xda\x88\xa1\x39\x29\xe9\x86\xd1\xab\xfc\x6a\x65\xf8\x15\x70\x92\xa8\x2e\x36\x5c\xf6\x9c\x97\x57\xf4\x5a\xf7\xd8\xbf\xd0\xbf\xe3\xc1\x89\x7f\x3e\x86\x79\x56\x1a\xd3\xe5\xff\xdc\x61\xec\x5d\x35\x08\x0d\x5f\x15\x57\xc2\x6a\xff\xc5\x21\x39\xbf\xdd\x47\x0c\x05\x49\x40\x9a\xff\x04\x49\x1a\xe0\x41\x92\x0d\x4f\x8c\xaf\xba\xdf\x3a\x70\x3d\xbf\x6b\xe8\x53\xeb\x9d\xa0\xaa\x63\x51\x3e\x9e\xfa\x42\xa2\xc9\x7d\x95\x93\x39\x40\x35\x31\xee\xc2\x41\x92\x06\x78\x90\x64\xcb\xfa\x21\x72\xfc\x03\x1b\xbe\x71\xae\xa5\xef\xde\xfb\x3a\xe2\x0d\x9e\x04\x46\x45\x87\x3d\x68\x29\x12\x92\x55\x83\x09\xca\x17\x3d\x28\xc4\x57\xac\xe1\x4c\x90\x04\xb5\xff\x61\xf1\x9f\x21\x45\xec\xec\x2a\xeb\xb1\x6c\x33\x12\xc5\x2a\xc6\xe6\xad\x60\xcc\x1f\xa5\x39\x77\x12\x84\xf0\x98\xc3\xde\x5f\xbc\xc9\x33\x41\x92\xa6\xcf\x37\x22\x63\x0e\x1b\x70\xf9\x1c\x6c\x65\xae\xa0\x20\x97\xb9\x19\x3a\xa1\x91\x0b\x3b\xb3\xa5\xaa\x62\xd9\x76\xd4\xd8\xe9\x5d\xbc\xc9\x33\x41\x12\xd5\x3d\xda\xa1\xfe\x89\x50\x7d\x8b\x4f\xe3\xe3\x2e\x92\xdb\x1d\x22\xcf\x90\xf9\x66\x76\xaa\x6b\xda\x02\x5c\x03\xdc\x22\x70\x32\x2f\xde\xe4\x99\x20\xc9\x48\x9f\x51\xcc\x76\xc5\x74\x1f\xe3\xa0\x7b\xf0\x95\x10\x6e\x9e\xf5\xde\x1c\x6d\x9e\x00\x7e\xad\x17\x89\xa4\x4c\x29\xaf\xb5\x2e\x5e\x1e\xa4\xe1\x4c\x90\x84\x70\x37\xae\x8c\xaf\xd0\xd6\x83\xfc\x86\x17\x69\xc5\xc6\xf3\xc7\xc5\x5e\x68\x1e\x62\x61\xe2\x63\xe9\xe4\x83\x89\x2a\xdd\xa3\xa2\x17\x6f\xf2\x4c\x90\x44\xfe\x48\x27\xbf\x49\xce\x7c\xd0\xf8\x73\x29\x25\xab\x40\x2f\x4b\x9f\xe4\x67\x54\xbe\xe1\x98\x3c\x02\x9d\xfe\xc4\xfb\xe5\x3a\xf7\xfe\x37\x1f\x7b\xa0\x9e\x78\xf6\xdd\x96\xca\xa2\x20\xa8\xf4\xf0\xb7\x83\xf9\x4f\x0f\xb1\xe7\x27\x8b\x27\x5d\x9a\xe8\x21\x54\xe2\x56\xdd\xcc\x0b\xf2\xd9\xc8\xe5\xba\x50\xfe\x16\xc4\xc1\xde\x6d\xf9\x0c\x87\x2f\x3e\x0c\xf9\x04\x3c\x99\x96\x98\xaa\xf8\x44\x14\x6c\x7e\x7b\x12\x87\xee\xb9\x54\x4a\xd4\xd1\x57\x83\x97\x3e\xd5\x50\x21\x58\x10\x07\x7b\x09\x3d\xaa\x7d\x57\x6d\x19\x90\xbc\x64\xd2\xd9\x67\x57\x64\xd3\x9a\x14\x2c\x93\x6d\x47\xc2\x57\x15\xf7\xbc\x86\x00\x15\x59\x8f\x9a\x11\xda\xd5\x0b\xe0\x60\xb2\x34\x5e\x25\x42\xb2\xf3\x79\xdf\x69\xda\x7b\x31\xcb\xda\xd2\xf7\x3f\x11\x0d\xae\x93\xef\xb9\x8c\xb1\xbd\xe9\xb0\x39\xdd\x76\x84\x42\x92\x20\x0e\xbe\x37\x6a\xc2\x30\xe4\xea\xaa\x3e\x53\x1b\x39\x92\xeb\xd8\x86\xaa\xe8\x6a\x23\xb7\x9e\xf7\x23\xc3\x21\x75\x22\xb3\xee\x2a\x87\x38\x03\x68\x6f\x14\x80\x83\x1f\x68\xa0\x67\x89\x3f\x70\xcf\xf9\x90\x55\x6f\xed\x4a\xe3\xa1\x57\xe0\x4b\xae\xc8\xdd\x3a\xb1\xd0\x34\x06\x37\xe2\xa0\x92\xfa\xee\x2f\x88\xe5\x7e\x10\xf7\x4f\xdd\x88\x86\x73\x05\x49\x40\x4f\xdc\xb3\xce\x4a\xff\xda\xba\x8d\x64\xaf\x7d\x33\x7a\x90\xb1\xbe\x3c\x72\xfd\x25\xe1\x4f\x07\x74\x6c\x77\x0d\x4e\xa7\x79\x39\x02\x86\xfd\x29\x68\x2c\x0a\xe2\x60\x17\x95\xed\xeb\xcf\x2b\x15\xad\x2f\x48\xd3\x83\xb8\xb6\x9e\xfa\x62\xbc\x9b\x67\x0c\xc0\xc5\xef\x9f\x6b\xf4\xbb\x44\x20\x71\x78\xbf\x1b\xaa\x1b\x01\xe2\xe0\xa3\x26\x31\xf7\x89\xeb\x25\x3e\x27\x9a\xf9\x81\xab\x21\x6a\x3f\xef\x7e\xe8\xa7\x9d\xbd\xda\x29\x89\x85\x17\x5b\xed\x59\x84\x2f\x07\xed\xbe\x05\x71\xf0\x88\xd2\xa7\x31\x91\x7a\xb3\x15\x73\x9f\x0c\x54\xd5\xc5\xeb\x07\x79\xd8\xb1\x6d\x35\xdf\x8c\x1c\x9a\x24\xf6\xda\x62\xd7\x86\x28\xa0\xa1\x23\x88\x83\x5d\x04\x93\xe6\x87\x18\x81\x14\x5b\xb2\x2d\x84\x52\xd2\x6f\xd3\xde\xa2\x31\x08\x1a\x0a\xf6\x44\x34\xfc\x79\xd0\x83\xf7\x4d\x58\xfa\x08\x2a\xbf\x08\xe2\xe0\xe1\x04\x66\x3d\x7d\x7a\xa4\xcb\x64\x1d\xbb\x97\x56\xd7\xe7\x8a\xb8\x9a\x64\xee\x18\x20\x7d\xe6\xae\xad\xfe\x23\xbc\x16\x60\x36\xc0\x8e\x70\x16\x88\x43\x38\xeb\x5c\x41\x12\xd0\x8b\xf5\xac\xb3\x16\x79\x83\x29\xc7\x23\x87\x0d\xde\x9a\x3c\x4f\x5f\x19\xfe\xb4\x84\x7c\x8c\xd4\x23\xfd\xb0\x45\x16\xc3\x96\xa3\x58\xca\x38\x01\xca\x12\x81\x38\xd8\x45\x9d\xac\xcb\x4c\x96\xe3\xd9\xdd\xae\x91\x4a\x1a\x79\xe1\xe9\x8d\xfc\xf2\xd9\x86\xe8\x2c\xcb\xaf\xb2\x95\xf8\x19\xad\xca\xa6\x4b\xd0\xe2\x06\x88\x83\x5d\xd4\xad\x81\xeb\x32\xbe\xa8\x51\x06\x97\xec\x57\xb0\x71\xac\xb9\x88\x71\xbf\x16\x13\x3a\xab\x5a\x87\x88\x32\x5a\xc7\xb3\x77\x0e\x43\xbb\xe5\x41\x1c\x4c\x36\xb4\x62\x3f\x41\x69\xe1\x93\x6d\xdf\xb5\xbd\x69\x42\xea\xe9\x7d\xc2\xe5\xe0\xe7\x1b\xc4\xc8\x7f\x55\x43\xb0\x6a\xe9\x56\x37\xa0\xe3\x7c\x41\x1c\xec\x22\x7c\x31\xa9\x21\x37\x1d\x8d\x34\x8e\xbb\xc5\xa5\x93\x1f\xd4\xd9\x71\xbd\x86\x4a\x24\xda\xba\xe8\xc1\xcb\xff\x87\xb5\xf3\x0e\xe7\xf2\xfb\x03\x3e\x92\x3d\x43\x66\xc8\x56\x08\xc9\x26\x7b\xcf\x6c\x32\xb2\x33\x13\xd9\xb2\x37\x49\x14\xd9\x7b\x65\x4b\x28\x64\x64\x53\x46\x46\x56\x76\x46\x32\x22\x9b\xe7\x7a\xae\xeb\xfb\xb9\x9f\xef\x73\xfb\x5d\xd7\x71\x5d\x7d\xff\x7f\x5d\xef\x73\x7f\xce\xe7\x75\xee\xfb\xdc\xe7\xbc\xef\xf7\xc9\x54\x1f\xaf\x22\xa6\xe7\x44\x84\x05\x71\xb0\xab\x7d\xbd\xc5\x6c\xa4\xee\xce\x86\x82\xb3\xc5\x52\x26\x39\x61\xb2\xa2\x5b\x8c\x3a\x3b\xf7\xe9\xf1\x2b\x81\x2b\x3f\xf8\x07\xda\x7e\xa0\x20\x5e\xf5\x40\x1c\xe2\x14\xd3\x8b\x25\x92\x80\x26\x50\xe7\xd5\xba\xff\xf6\xd5\xca\xe2\x6b\x0a\xdc\x63\xbc\x86\x49\x5f\x03\x62\x34\x96\x3b\xf8\xcf\xf3\x02\x8a\xfb\x46\xd3\x33\xc6\xb6\xd2\xb5\x88\xa1\xd4\x0c\x00\x07\xeb\xd5\x5b\x47\x58\x62\xee\xfe\x9e\x9b\xdf\x3b\x1d\x3a\x8f\xd2\x37\x96\x03\xca\x0d\xaf\x32\x76\xae\x6a\x3b\x9f\xbc\x9a\x91\x67\x7c\x74\x00\xdd\x5d\x00\x1c\xac\x57\xa5\xaf\x38\xf2\x4c\x34\xc7\x9c\x99\x13\xdf\xa9\x12\xca\x50\x13\xfe\x41\x7e\x42\x9c\x30\xb9\x91\x1a\x9c\x52\x45\x61\xc6\x15\xf1\x05\x11\x16\xc4\xc1\x8f\x35\x89\x9d\xc0\x21\x4d\x8e\x2e\x37\xd3\x73\x23\xf2\xac\xab\x68\x65\xe1\x59\x2e\xf8\x10\xc6\x75\x65\x6c\x17\x9d\xb9\x95\xe2\xa5\x3c\x22\x2c\x88\x83\x75\x82\x53\x8b\xc7\x77\x4e\xfc\xc5\x56\x56\x62\xe6\x8d\x09\xd2\x53\xbc\xaf\x8a\x7a\x36\x7d\x07\x22\x76\x9d\xdd\x9b\x43\xb4\x4c\xac\xd0\xb7\xfd\x20\x0e\x76\xb5\x3a\x6a\xdf\x5c\xf6\x30\x6e\x7f\xd4\x6a\x68\xb8\xae\x21\x18\x7a\x1a\x17\x2e\xb1\xb7\x93\xa3\x13\xd8\xa1\xea\xb7\x53\xad\x23\x4e\x8a\x50\x0b\xc4\x21\xd4\xba\x58\x22\x09\x68\xa2\x7c\x5e\xad\x32\x9d\xc0\x1f\x2c\x4f\x94\x7c\xe8\xb0\xbc\xa9\xf2\x73\xea\x7f\xf7\x48\xd3\x5a\x7e\x8d\x45\x39\x76\x76\x3c\x1a\x20\x0d\xca\x80\x3e\x99\x00\x71\xb0\x5e\xbd\x19\xfc\xfd\xf5\xeb\xe5\x2a\xde\x10\x9f\x2a\x0e\xcc\x64\x4d\x79\x76\x0b\x19\xc1\x9f\x7e\x44\xea\x47\x82\xd2\x03\x3a\x96\xfd\xfd\xd0\x27\xcd\x00\x0e\xd6\xab\x26\x57\xee\xfb\x9c\x3c\xda\xf0\xb5\xc9\xfd\xf1\x42\xee\xeb\x0b\xde\x1a\x34\xcc\x4d\x97\x36\x0f\x2c\x57\xef\x44\x25\x89\xdc\xb7\x50\x32\x11\x88\x83\x85\x9d\x77\x57\x6f\xfe\xe3\xd8\x8a\x9e\xd8\xc9\xc2\x72\x7b\x1d\xeb\x95\x64\x76\x70\x2b\xfb\x25\xa4\x0c\x32\xed\xd2\x8e\xbb\x5d\xb9\x50\x25\x02\x10\x07\xeb\x04\x73\x02\xea\x4d\x89\xe1\xd3\xd3\x0f\xa6\xa1\x8a\x04\xb1\x52\xf8\xe6\x1f\xa8\xd8\x7f\xe1\x97\xb6\x16\xff\x6a\x7a\xa8\x73\x9d\x19\xca\x5b\x06\x71\xb0\xab\xb5\xdd\xf2\xe4\x9d\x1b\xbc\x93\x6a\x68\xad\x9d\x85\x61\xdf\x99\xe8\x2f\x3d\xc4\xb6\xd9\x66\x6e\x1f\xe7\x79\x90\x94\x11\x61\x56\x8e\x50\x0b\xc4\x21\xd4\xba\x58\x22\x09\xe8\x85\xe8\xbc\x5a\x29\x35\x58\x14\x2b\xf7\x7a\xf2\x34\xab\xbc\x17\xd9\x78\x1d\x2c\xa3\xad\xc7\x8b\x9e\x56\x17\x4e\x1a\x49\x1a\x63\x56\xd5\x05\x43\x0f\x44\x10\x07\xeb\x55\xf1\x26\x9c\x5e\x9f\x06\x5a\x1b\xe1\x8c\x6b\x4d\xe4\x31\x1f\x79\x7f\xac\x3e\x41\x9a\x45\x43\x9e\xdb\xee\x27\xfd\x1e\xfb\xad\x00\x9a\xc4\x83\x38\x58\xaf\x56\xf0\x3d\xfa\x26\xcc\x7e\xed\x2a\x27\xd9\x67\xd4\xcf\xa5\xab\x27\xd9\x83\xb6\x94\x47\x3f\xc9\x1c\x03\x34\x57\xe8\x82\x22\x3e\x41\x4b\xaa\x20\x0e\x7e\x33\x74\xe2\x57\x4f\xfc\x96\x6b\xdb\x57\xa3\x3a\xac\xf1\x6c\x4d\xfc\xb1\x19\x1e\x95\xc7\x0c\x55\xac\xf5\xf5\xd6\x6b\x6e\x4c\xba\x50\x0a\x24\x88\x83\x75\xc2\xf3\x17\xa6\x8b\xdb\xab\x61\x84\xa8\x8c\x66\xad\xd9\x6e\x54\x8e\xe4\xf1\x6f\x12\x50\x2d\xdd\xaf\x4a\x9f\xcd\x15\x7f\xcb\x68\x80\x0a\xe9\x83\x38\xd8\xd5\xee\xd6\x8b\xd4\xf9\x17\x50\x6c\x6a\x33\xd8\x7d\x8c\xfa\x95\xdc\xe2\x44\xa2\xf5\x2c\x36\x75\x54\xa6\x97\x91\xdc\x8a\x24\x96\xde\x16\xfa\xb6\x1f\xc0\x21\xd4\xba\x58\x22\x09\xe8\xc5\xf7\xbc\x5a\xed\x5c\x75\x6a\x0e\xcf\xb8\x62\xbb\xe4\x05\x82\xa5\x3e\x8c\xb0\x61\xea\x9c\xe0\x12\x7e\xdc\x52\xfa\xa1\x9b\x56\x4f\x79\xa4\x03\x6d\x56\x80\x38\x58\xaf\x5e\x72\x48\xf9\x78\x42\xe9\x73\xe8\x2f\xad\x64\xc6\xf4\xfa\xd8\xb2\x9d\x5b\x1f\x0f\xb5\x25\x31\x78\x8e\x4f\xc4\xc6\xce\xd4\x9d\x1e\x11\x16\xc4\xc1\x7a\x75\xd0\x98\x41\x35\x98\x14\x6d\xa2\xdc\xad\xca\x7d\xbf\xff\x9b\xbf\x23\x96\xe0\xec\xcf\x0e\x95\xa4\x4e\x4b\xea\x0e\x59\xbb\x0a\x28\x4f\x0d\xc4\xc1\x5f\x3b\xb3\x0a\x12\x08\xf4\x0d\xdb\x27\xed\xb6\xba\x6f\x0a\x26\xd5\x29\xac\x55\xfd\x96\x14\x38\x5d\xd7\xa3\xe0\x7b\x75\x82\xbd\xb4\x02\xbd\x76\x02\x38\x58\x27\xec\x9d\x5e\x8f\x6d\xaa\xe1\x79\xa9\x90\xf3\x7e\x56\x29\xd7\x6a\x99\xf6\x99\x58\x05\x5b\x48\x5d\x52\x85\xde\x70\x66\x23\x7f\x23\x74\xe0\x1d\x88\x83\x5d\x6d\xdf\x7a\x00\x61\x1e\xdf\xf1\x82\x58\x37\xf2\xe2\x81\x0c\xf5\xb3\x37\xc8\x41\x25\x44\xf6\xe3\xe8\xe8\xbe\x43\xc5\x38\x29\x22\x5c\x08\xb5\x40\x1c\x42\xad\x8b\x25\x92\x80\x16\x38\xce\xab\xb5\x46\x96\xf0\x95\x95\x32\xdd\x21\xda\x87\xd3\x5b\xc3\x21\x08\x49\xf3\x70\x62\xfd\xf6\x5b\x5c\x02\xf5\x9d\x89\xde\x19\x6a\x4c\x68\x64\x81\x38\x58\xaf\xd6\xf9\xab\x2e\x98\xb0\x04\x9b\xcf\x38\xff\x3e\x7a\x11\x70\x43\xc6\x57\x89\xf9\x9e\x51\x8a\x74\xff\xd7\x16\x7b\x15\xea\x14\x2c\x68\x23\x08\xc4\xc1\x7a\x75\x12\x43\x77\xf9\xf5\x1c\xe9\x84\x82\xde\xbc\xf3\x4a\xfb\xf6\x02\x32\x51\x0a\xf5\x40\x76\x29\x0f\xc3\xde\x97\x90\x1b\x68\xb9\xd0\x19\xc0\x20\x0e\xbe\xcf\xbc\x9a\x43\xcc\xd7\x72\x7c\x86\x5d\x14\x26\xde\xd8\x30\x5a\x9e\xd3\x98\x62\x59\x42\xa5\x4a\x9e\xc6\x77\x39\xc6\xa3\x89\x54\x14\xda\x67\x06\x70\xb0\x4e\x10\xe1\x96\xf9\x59\x47\xe2\x18\x2a\xd3\xc8\x1f\x7d\xdc\x2c\x61\x4a\x29\xbc\xd1\xc4\x3b\x6e\x94\x80\x35\xf4\xb9\x87\xf5\x99\x2f\xb4\xb7\x00\xe2\x60\x57\x2b\x11\x48\x7e\xb0\x1a\x4e\x36\xd1\x38\xe2\x3e\x50\x72\x25\x7f\x98\xfc\x4b\x5a\x0b\xbf\xaa\x5d\x54\xa5\x94\x42\x8d\xe1\x66\x90\x2f\x42\x2d\x10\x87\x50\xeb\x82\x89\x24\xa0\x15\xec\x7f\x12\x49\x9a\xce\x25\x92\x64\x65\x8e\x5e\x09\xc2\xed\xe8\x4a\x5b\xe2\xdf\x5e\x19\xc8\xfa\x5e\xd9\xf6\xd4\xcc\xe3\xd0\xf1\x8e\x78\x05\xc5\x6e\x45\xd6\x67\xb6\xbf\x5f\xe8\x3b\x97\x48\x42\x9e\xc1\xa3\x28\xf1\xeb\x32\xb9\xd8\xeb\xbb\xaa\xf7\x6f\x6a\xbb\xda\x39\x32\xa5\xab\x39\x88\xf7\x23\x85\x76\x0d\x0c\x3b\x57\x33\xfd\x7d\x93\xe7\x12\x49\xdc\xf5\x84\x35\x09\x3d\xab\x4a\x08\x94\x1b\xa7\xeb\x12\x15\x26\x4b\x5c\x50\xc9\xb7\x0c\xef\x2c\xe1\xf1\xea\x14\x73\x57\x2c\x3e\xfe\x6f\xd6\x16\x41\x7d\x79\x7e\x80\x7f\xf5\xcf\xc0\x8c\x64\x60\xa3\xa8\x7a\x5d\x36\xb9\xb1\xa5\x63\xa9\xef\x1a\xfc\x7b\xb4\xe6\x09\xbd\xf6\x78\x9d\x1f\xd1\xe9\x2e\x34\x35\x05\x71\x30\xb7\x09\xdf\x68\x26\xd5\xa7\xb0\x48\x75\x47\x0d\x78\xda\xfa\x20\xe7\x49\x36\x34\x89\x1d\x28\xbe\x4f\xf4\x7e\x3a\x24\x13\x8b\x11\x56\x86\x08\x0b\xe2\x60\x6e\x87\x48\xc9\x76\xbf\x75\xc0\xf7\x77\x7e\xff\x06\x83\x97\x45\x63\xa5\xb8\xff\xc5\x5a\x7a\x6a\xe3\x9f\x61\x2a\x8b\x3d\x26\xf9\x76\x27\x44\x58\x10\x07\x0b\xeb\xe6\x71\x6f\x70\x2b\xd6\x7f\xee\xd8\xc6\x27\x28\x5e\x46\x7c\x25\xd3\x86\x22\x38\x46\x72\xe3\xc3\xac\xd8\x6f\x6f\xdc\xdd\x07\xf1\x50\xfa\x3c\x80\x83\x75\xc2\x30\x76\x04\xae\x50\xa4\xb9\xfe\x3c\xf5\xcc\x14\x85\xe0\x15\xac\xdd\xbb\xa3\x66\x0e\xfc\xdf\x09\xf1\x88\x9c\x58\x3f\x5c\x7a\x5b\x80\x08\x0b\xe2\x60\x57\x4b\x36\x93\x49\x40\xde\xcb\x8e\xbf\x72\x9b\x6a\xa8\xea\x46\x05\xfa\x68\xbc\xee\x84\x55\x59\x36\x1e\xfb\x98\xfa\xe6\x25\x46\x69\x1f\xc4\x00\x07\x71\x88\x01\x7e\xb1\x44\x12\xd0\x98\x39\xaf\x96\x59\xf2\xbc\xb5\x35\xdf\x13\x9a\xe3\xcb\x04\x76\x7b\x19\x39\x2b\x11\x5f\xd9\x75\xcd\xd8\x7e\x51\xc4\xf5\x71\xdc\x57\x57\xb3\x83\x96\xad\x41\x1c\xac\x57\x77\xfd\x5a\xd0\xa2\xde\x55\xe8\x8a\x9d\x86\x9e\xfa\xb3\x09\xad\xd2\xbd\x1b\x67\x30\x37\xf7\x64\xe1\xf0\x16\xc6\x71\x89\x97\x3b\x83\xaa\x51\x00\x38\xf8\x7b\xc4\x32\xde\xa3\x10\x6a\x3a\xb2\x87\x92\xba\x0a\x6f\x6b\x5c\xb8\xb8\x7e\x38\x99\x4b\x97\xf3\xb3\x77\x6b\xd4\x44\xae\x19\xd0\xfd\xbf\xe5\x3a\x00\x07\x3f\x8c\x69\x9e\xd5\x2e\xb5\x82\x3d\xf8\x07\x76\x43\x49\x90\xdc\x37\xec\x93\xb9\xb7\x5b\xe6\xdf\xc3\x03\xcb\x49\xda\x32\x94\xff\x6c\x40\x73\x33\x10\x07\xeb\x84\x47\xaa\xcd\x7b\x9a\x89\xe8\x5a\x6f\x6f\xec\x4c\x51\x5a\x3d\x51\x95\x8f\xc1\x56\xd2\x1f\x78\xd5\x2e\x1e\x39\x56\xd7\x98\x70\x04\x55\x51\x06\x71\xf0\xb9\x59\xc2\xfb\x94\x1b\xa4\xc6\x93\xf6\x3f\xfc\x32\x33\xcb\x96\x42\xe5\x9e\x56\x09\x2f\x24\xc7\xc6\x35\x30\x68\x5e\xbd\x9a\x14\x19\x83\x50\x0b\xc4\x21\xd4\xba\x58\x22\x09\xe8\xde\x78\x5e\xad\x87\xf8\x55\xf8\xc4\x34\xcf\x84\xd8\x71\xb7\xf8\x43\x0b\x64\x7c\xec\x13\x04\x86\x6f\x8c\xe9\xea\x50\x0a\x16\x0f\x97\x97\x47\xde\x84\xca\xc7\x00\x38\x58\xaf\x56\x8f\x37\x15\x7e\x8c\x49\xf0\xed\x7d\xd9\x94\xb3\xbb\xda\x9a\x2d\xf5\x4a\x99\x91\x8c\x69\xfd\xd6\x5a\xab\x18\x5e\xdd\x37\x53\xa8\x46\x3b\x88\x83\xf5\xea\x93\x9e\x48\xdb\xfe\xb5\x02\xc6\xb4\x7a\xaa\x97\xa5\x97\x6f\xbf\xc4\xd0\xae\xae\xe6\xde\x4f\x76\xd8\x7e\x5b\x22\x17\xb1\x3d\x01\x9d\x11\x09\xe2\x60\x61\xff\x08\xdf\x43\xc7\x7c\x75\xc9\xc0\x32\x4d\x53\xf3\x65\x50\x04\x8b\xb6\xc6\x41\x61\x0a\x6d\x8f\x7e\xed\x6a\x28\xfd\xe7\x92\xf9\x47\xd0\x37\xb0\x00\x0e\xd6\x09\x9f\xce\xd8\x5a\x4a\xc3\xaf\x71\x7b\x2e\xdf\xf8\xb0\x3d\xea\xf1\x86\xf4\x5e\xc3\x5e\x67\x59\xd7\x55\xcd\x09\x89\x6a\x33\xae\xaf\xd0\x71\xf7\x20\x0e\x7e\x60\x2e\x83\xbf\xe8\xe1\x13\x61\x7a\x92\xb3\x6a\x96\xbb\x3a\x38\x6d\x9f\x53\x7f\x98\xf8\xc8\xa1\x5b\x3a\x66\xec\x25\x60\x97\x35\x43\xf5\x8e\x41\x1c\x42\xad\x8b\x25\x92\x80\xf6\xf8\xcf\xab\x25\xd3\xca\x11\x78\x95\xc6\x9e\x1a\xf7\x76\xd0\xfd\xe0\x75\x91\x16\xd7\x9a\xa7\xbd\xf8\x04\x1a\xb1\x8a\xa1\x66\x3e\x79\x74\xd4\xd0\xf7\x2e\x20\x0e\xd6\xab\xe5\x4b\xf7\x15\xb4\xbd\x65\x27\xf9\xa9\x31\x36\xab\x63\xbe\x77\x20\x8b\xdc\xb2\x34\x10\x3c\x88\x6e\x1e\x17\x51\x8a\x9d\xe6\xf7\x40\x84\x05\x71\xb0\x5e\x25\x68\xb7\x48\xc9\xe6\x3d\x09\x67\x5a\x33\xf5\x92\x3b\x33\x1d\x6b\xbd\x65\x72\xc3\x31\xea\xbd\xf5\x5a\x2d\x93\xd4\x1b\xed\x6a\x68\x0e\x09\xe2\xe0\xab\x8b\xea\x55\xa2\xab\xec\x37\x3a\xf7\x33\x14\x8a\xcd\xbb\xe3\x1d\x6c\xe3\x4e\xd5\x3e\x1c\xb1\x94\x88\x06\x3e\xfc\xd8\xd7\x88\x5f\x03\xad\x2e\x02\x38\x58\x27\x50\x90\xce\x51\x0c\x68\x90\xc5\x7e\x25\x18\x6f\xa3\xd7\xd7\x9e\x10\xec\x0a\xfa\x10\xcf\x37\xca\xac\xde\x10\xf7\xee\xd1\xc1\x12\x54\xf4\x19\xc4\xc1\xae\xf6\xc2\x15\x49\xd6\xfc\xdf\x5c\xd1\xcf\x73\x58\x52\xc8\x9a\xde\x98\xb9\xa4\x7e\xa9\xd4\x26\xa8\x80\x97\x41\xe0\x59\x36\x4b\x33\xc6\xfd\x6e\xad\xb6\x7f\x27\x92\xf0\x04\x68\x35\x19\x14\xfb\x79\x3a\x66\xf7\xe1\xdd\xdc\x4f\x75\xfd\xfe\xf3\xb0\x33\x31\xa9\x26\x4f\xbc\x31\x21\x82\x7a\xad\x7c\xfc\xdf\xca\x28\x62\x22\xf9\x33\x7d\xcd\xd1\x35\x68\x7b\x23\xc9\x3a\xc8\x27\x4f\xe7\x15\x42\x6e\xba\xf9\xc0\xf5\xb2\x03\x89\x49\xdd\xcf\x7a\x58\x22\x09\x28\xf2\xf9\x44\x92\xa0\xb8\x77\xf7\x9c\x5f\x5d\xa6\x34\x34\xc8\xc3\x98\x16\x73\x69\x73\x7d\x13\xb9\x85\xa6\xcf\x59\x3b\xb1\x20\x67\x92\x82\x72\xad\xec\xdf\x6b\x01\x7d\x35\x8b\x56\x42\xd1\xe3\x93\x3d\x02\xfb\x34\x3c\xcf\xfa\x6b\xf2\x16\x3a\x5f\xbc\x5d\x09\x3f\x4e\x0f\x78\xa6\x48\x88\xbc\x06\x25\x92\x80\x62\xfe\x93\x48\x82\x24\x09\x9b\xc8\x66\x3c\x30\x3a\xf5\x76\xbe\xd4\xc7\xee\x5d\xef\x3e\x24\xbc\xb7\xd2\xfc\x9c\x7c\xde\xe6\x08\xf7\xad\xcd\x34\xe3\xad\xfa\x0d\x0b\x99\xbf\x4e\x24\x41\x52\x85\xb5\xc8\xb5\x9a\xc7\xeb\x55\xb7\x45\xda\xbc\x6a\x8c\xfa\xe7\x77\xbc\x36\x9f\xc4\x15\xbd\xcd\x99\x2d\x11\xf2\x12\xae\xdc\x5c\x1f\x03\xf9\xbf\x9e\xad\x23\x09\xc1\x67\xeb\xa2\x16\xad\xe4\x95\xda\xc6\xfc\x1a\x7f\xcc\x07\xf1\xa8\x66\xb7\x4d\xd2\x8a\x50\xe3\x36\x3b\x72\x5c\xb6\xc4\xed\x0e\xc4\x86\x19\xff\xbe\x49\x1d\x78\x93\x09\x46\x3e\x2b\x82\xed\x75\xe8\x73\x7b\x0d\x74\xf3\x6b\xa4\xea\x13\x61\x9d\xfc\x8a\x49\xed\x3d\x86\xe1\x51\x5c\xf3\xeb\xcf\x1a\xff\xbe\x49\x67\x78\x93\x37\x1b\x04\xf9\xcd\x5e\x69\xbb\x34\xed\xd1\x98\x78\x06\xf7\x59\xd9\xd8\x51\x3d\x72\xdc\x98\x93\xd1\x57\x19\xc0\xef\x4a\x30\xdd\xfd\xfb\x26\x7d\xcf\x75\xac\xd8\xd8\x84\x67\xf0\x4f\xf3\xea\x18\xd5\x94\x1f\x1f\x26\x9b\x06\xc9\x1f\xd8\x7d\x1a\xb7\x79\x45\x32\x7b\x57\xf1\x59\x21\xda\xa5\xbf\x6f\x32\xf9\x5c\x11\x14\xf1\xa7\x3d\xe1\x7e\x7d\xa4\x92\x0a\xcd\x97\xf3\x59\xfe\xdc\x55\x16\x65\xf2\x4a\x14\x61\x4c\x2e\xca\x67\x77\xd3\x55\x11\xd2\xfa\xfb\x26\x6b\xe0\x4d\x3e\xf0\x2a\x31\x1f\x21\x9a\xbc\x33\xf9\x9e\x51\xe8\x34\x6a\x77\xfe\x8b\x47\x15\xc9\xe5\x91\x25\xae\x83\xbd\x78\x1c\x19\xe9\x0d\xdd\xff\xe6\x65\x0f\x34\x12\xcf\x3f\xdb\x38\x8f\x49\x8e\x7a\x18\xa2\x84\x8b\x36\x76\xaf\x33\xdc\x9f\x23\xea\xae\xf5\x16\x4c\xb1\x61\xd6\xcc\x51\x65\xbe\x36\x3e\x13\x05\xa5\x1d\x82\x38\xd8\x6d\xbd\x67\x9f\x43\xe3\xeb\x49\x10\x11\x3f\xe5\xc9\xcf\x2f\x26\x8d\x54\x6f\x02\x5a\x8f\x5c\x6b\x29\x83\x17\xff\x54\x33\x18\xbc\x0f\x83\x3e\x0f\x04\x71\xb0\xdb\x7a\xe2\xc0\x9d\xcb\xbc\x3a\x9f\x9d\x6a\xd6\xdf\x1a\xb8\x52\xe7\xf6\xb7\x75\x10\x2a\x76\xa2\xaa\x4e\x7f\x92\xea\x75\xe4\x72\x57\x87\x8e\x89\x00\x71\xb0\xb4\xc3\x8f\x1d\x1d\x24\x3e\x04\xed\x8c\x35\xc2\x4d\x94\xe2\xd7\x7d\xa8\x5d\x99\x13\xed\xa5\x08\xd6\x6d\x23\x4c\x9f\x71\x0a\x30\x57\x35\x21\xc2\x82\xb8\x40\x71\xe4\xff\xef\x01\x1f\x30\x78\xf3\xbd\xc3\x14\xae\xd5\xfa\xaa\xf8\xcd\xd2\xb5\x33\x6b\x55\xb9\x2f\x58\xbb\x38\xf3\x36\x23\x9e\xe8\x68\xb1\xee\x3f\xa0\x07\x3c\x80\x83\x75\xc2\xa2\x70\x98\xd5\xfe\x74\x62\x60\x85\x09\x67\xe7\x22\xc1\xf7\x58\xa9\xc4\xc4\x80\xe5\x96\x48\x63\x03\xed\x07\xa4\x33\x47\x9f\xd2\x10\xdb\xfd\x20\xee\x9f\xba\x11\xff\xf7\x76\x0e\x9e\x35\x81\xee\xb8\xe7\xcd\xfa\xf2\x50\x33\x6b\x47\x5e\xfa\x5e\xf1\xea\xf0\xd4\x4b\x1e\x1f\x71\x36\x51\x7c\x9b\x98\x5e\xa3\xba\x24\x63\x4d\xaa\xb7\x1a\x39\x50\x4d\x4f\x10\x07\x33\x4b\x4b\xff\xa4\xea\x8c\x71\xc7\x02\x7f\xc2\x55\x5c\x5d\x72\x51\x24\xaa\xda\xbb\xa7\x73\x63\xea\xc5\xbd\xc7\xc1\x0c\x2a\x93\x33\x57\xa0\xcc\x53\x00\x07\xeb\xd4\xbb\x58\xfa\x07\x01\x18\xf7\x8d\x39\xab\x58\xba\xbf\xd4\x0c\x7e\x51\x13\xbf\xf6\xa5\x6e\x36\x57\x63\x79\x9e\x8c\xb9\x9d\xa3\x03\xda\x93\x05\x71\x30\xb3\xc4\x03\x1d\x7c\x9c\xbe\xa1\x8d\x13\x2e\x50\xca\x63\xdf\xf9\x21\x43\x75\x82\xc2\x2c\x25\xa4\x57\xbe\x8c\x76\x3d\x49\x9e\xc7\x16\x1b\xda\x8b\x01\x70\x30\xb3\x8a\xaa\x32\x7e\x3f\x32\x19\xb1\x68\xdf\x89\x0c\x58\x11\x13\x90\xac\x13\x53\xcc\xf5\xe8\x43\x2f\xf4\x31\x21\xc9\xf8\x32\xdf\x0f\xed\xc9\x82\x38\x58\x27\x5c\x2a\x7c\xa2\x36\x7b\x53\xae\x33\xc0\xc4\x45\x91\x40\xa0\xa2\x48\xa5\x8e\xa0\x5e\xfb\x97\x4b\x71\x3d\xfd\x15\x01\xcd\xc7\x43\x54\x08\xb3\x40\x1c\xc2\x2c\xd5\x0b\x1d\x9a\x04\x78\xb0\x9e\x37\x6b\xe9\x31\xb9\x38\x76\x3e\xd6\xe8\x0c\x47\x8b\x8b\xd4\x4c\xcc\x58\x89\xcc\xa0\x51\xfe\x15\x09\xef\x2b\x1b\xf7\xe2\x6f\x9b\x78\xc5\x20\x7e\x3d\x88\x83\x99\x35\xc9\x9b\xcd\x20\x3c\x50\x49\x6b\xac\x10\xb1\x55\x23\x7e\xdb\xc4\x42\x9c\x2e\xee\x40\xde\x48\x8c\x2b\x4b\x53\x04\x69\xf2\x35\x74\x2b\x04\x71\xf0\x03\xf6\x7d\x6e\xcf\x70\x62\xee\xd6\xc5\x9a\xce\xc8\x56\x99\x6d\x98\x8c\xb8\x27\xbe\x0a\x6e\xca\x7e\xc7\xeb\xa8\x26\xd1\xe8\x75\x0a\x55\xf0\x06\x71\x30\xb3\x6a\xad\x28\x4b\x7b\xb3\xb9\x30\x5a\x93\xb2\x26\x36\xbc\xb9\x27\x3c\x0d\x68\x2b\x39\x5b\xe6\x97\xca\x6c\xf7\xe3\x18\x1f\x70\x41\x2f\xa6\x20\x0e\x66\xd6\x9d\x08\xcc\xd8\xc7\xf7\x44\xd9\x9b\xb1\x1e\x5d\x25\x72\x7a\x29\xca\x83\xfd\x40\x24\x66\x5c\xea\x57\xfe\x67\x89\xaf\x35\x23\x7c\xdf\x10\x61\x41\x1c\x7c\x78\x49\x4b\xa2\xf7\x85\x09\x70\x12\x3e\x5f\xae\x53\xf2\x0a\x28\x4e\x15\xfa\x9a\x2e\x53\x70\xbf\x97\xdc\x37\xd8\xcc\x8f\x12\x13\x2a\x1b\x01\xe2\x10\xa7\x98\x0a\x5d\xe8\x55\x0f\x34\x81\x3a\xaf\x96\xd0\xf0\xee\xab\xc7\x87\x01\xf6\xdf\xb8\x96\x77\x53\x1c\x31\x3e\x99\x4d\xe6\xbc\x38\xfa\x48\x9d\x8b\x11\x18\xc6\x4a\xd2\xa0\x0a\x95\x51\x02\x71\x30\xb5\x42\x0e\xfa\x17\x5a\x83\x6a\x9e\xf4\x12\xb0\xa2\x6b\x7c\xab\x1a\xf5\x4f\xb2\xfc\x34\xa7\x76\x8c\xca\x5f\xd2\x4c\x24\x2d\x18\x0b\x9d\x68\x0d\xe2\x60\xbd\x7a\x3c\x67\xfe\x84\x0a\x7d\xa9\xd3\xae\xae\xa0\x84\xba\xdb\xfa\x93\x4a\xa1\xdb\x1f\xcf\xaf\xe1\x1f\x0e\xc5\x05\x26\x0d\x52\xaa\xa0\xaf\x64\x41\x1c\x4c\xad\x61\xfa\x56\xad\xa8\x97\x24\x98\x9b\xf7\x89\x3c\xaa\x46\x6f\x26\xcc\x0e\x63\x0f\xa4\x52\x68\x14\x6d\x72\x84\xe3\x2c\xc8\xe4\x41\x3b\xbd\x20\x0e\xa6\x96\xf8\x60\x8d\x4c\xf1\xf1\xed\xd2\x6f\xee\x6c\xd6\xed\xea\x41\xd5\x3a\x1c\x07\x86\xaa\xca\x72\x6c\xfa\x68\x7e\x99\x22\xdd\x21\x2d\xd0\xbd\x10\xc0\xc1\xe7\x04\x71\xab\x12\x19\xc6\x07\x13\xec\x57\x95\xbc\x29\xc9\xc8\xaa\x39\x54\x83\x58\x7f\x37\x69\xa2\x76\x4e\x60\x17\x84\x3d\xe6\xa5\x86\xce\x1f\x01\x70\x08\xb5\x74\x2e\xa4\x16\x68\xa2\x7c\x5e\xad\xd8\x6c\xaf\x13\x89\x30\xca\x0a\x86\xcf\x3d\x3c\x42\xac\xd8\xda\x4f\xe9\x92\x68\xe2\x2b\x86\x0b\x02\x22\xb0\x90\x16\xc5\xca\xa6\x10\x3f\x1f\xc4\xc1\xd4\x2a\x22\x0d\xc2\x91\xe8\x54\xe1\xfd\xed\xba\x17\x6b\xdb\x49\x66\x53\x61\x2f\xea\x59\x7f\x77\x7b\xf6\xcc\xeb\xb6\xa9\xb9\x09\x2b\x94\xa3\x04\xe2\x60\xbd\x7a\x8a\xf4\x50\xa0\x35\xde\xf7\xb4\x72\xd2\x6b\x2c\x39\x2d\xf0\x8c\xdb\x38\xd7\x47\xe8\xf6\x76\x64\x76\xef\x26\x81\x72\x68\xf1\x10\xf4\xb5\x3c\x80\x83\xa9\x55\x10\x95\xde\x80\xfa\x79\x72\x6e\x32\xfa\x84\x54\xee\xe7\xf3\xeb\x7d\x55\x58\xb9\x89\x21\x91\xa2\x14\x83\x02\xac\x2e\x5a\xac\x50\xca\x2e\x88\x83\xa9\xe5\x1e\x42\x77\x6c\x56\x43\xf7\x3a\x67\x87\xa7\x93\xd7\xda\x20\x49\xec\x19\xca\xdb\x8d\xd7\x8f\x5d\x3a\x0b\xbf\xdf\xd2\x88\x0c\x82\xea\xea\x81\x38\x58\x27\x8c\x3e\x4e\xc3\x70\x30\xeb\xba\x27\x70\x58\x8f\xb5\xf7\x29\xb0\x6b\x8f\xf9\x80\xce\x2f\x38\xd1\xa5\xcf\x26\xa1\xc9\xa0\x56\xca\x0c\xa1\x16\x88\x43\xa8\xe5\x7c\x21\xb5\x40\x2f\x44\xe7\xd5\x12\x19\x23\xd8\x38\xe2\xba\x9b\xe3\x89\xe6\xcb\xfb\x49\x68\xc5\x0b\x23\xf0\x36\xf3\xe6\x78\xeb\x62\x82\x3e\xa1\xaf\x9e\xf2\x1f\x6d\x68\xdb\x10\xc0\xc1\xd4\xea\xc0\x95\xca\x92\x7a\x3f\x18\x36\x1b\x8f\x92\x96\x75\x53\xef\xa6\x50\xd8\x6b\x5f\x83\x94\x05\xa5\x9c\x5f\x9f\xc2\x63\xb2\xd3\xa0\x6a\xcc\x20\x0e\xd6\xab\x96\x39\x14\xbf\xdd\x2a\x38\xf7\x29\x6c\x8a\x55\xbe\x53\x9c\x70\xd9\xff\xc6\x47\x33\x74\x88\x7f\x1d\xea\xa7\x70\x1f\x3f\x33\xb4\x0a\x11\x16\xc4\xc1\xd4\x92\x17\x0b\x6d\x75\x29\xa2\x9d\xe1\x7e\xfb\x5c\x3b\xea\xec\x21\x35\x6b\xdc\x3d\x0a\xeb\xfe\x15\xb7\xd5\xb0\x1d\xae\x03\xe3\x30\x68\x56\x00\xe2\x60\x6a\x9d\x12\xe4\x4e\xe8\xc8\x96\x4f\x3b\x36\xc4\x2d\xb0\x8d\xd9\x50\x04\xe0\x7c\x77\xf1\x1d\x4e\x5b\xcb\x18\x98\x7e\x41\xc0\x1c\xe7\x02\x0d\x04\x00\x07\xeb\x84\xa8\xf8\xd0\x99\x23\xa2\x52\x97\x95\xaa\x5b\x5e\x37\x33\x42\x5c\x50\x1e\x33\x52\x28\xa4\x1d\xbe\x39\x96\xc1\xc7\x0b\xfd\x65\xf5\x19\xa1\x16\x88\x43\xa8\xe5\x7b\xb1\x62\x37\x80\x17\xdf\xff\x51\x91\x04\xfd\x9a\xa2\xbf\xbc\xf7\x0f\xf4\x30\xe9\x72\x6f\x3b\xe2\xe5\xe3\xaf\x06\xdf\x32\x35\x9a\xed\xba\x27\x39\xdc\x82\xa7\x74\x5e\x41\x15\x13\x00\x1c\x4c\x2d\x3d\xc7\x49\xfd\x6f\x53\x16\xa9\x34\xd7\x0e\x90\x9b\x74\xd7\x49\x5d\x91\xe6\x28\xae\x4e\xac\x6e\x32\x63\xbe\x54\x18\x56\x4c\x0a\x82\x56\x13\x01\x1c\xac\x57\xb1\x13\x8a\x71\x9d\x6d\x49\xed\x9a\xea\xd8\x9a\x1a\x4b\x12\x0f\xdd\xe9\x72\xca\x4f\x8a\xba\x2c\x99\x23\x44\x98\x18\x83\x34\x66\x11\x61\x41\x1c\x4c\x2d\x1a\xe3\x97\xac\xa2\x15\x1d\x6f\x4a\x51\xbd\x5e\x4c\x6c\x67\xe9\xe4\x85\x5b\x51\x3b\x48\x75\x5a\x4b\x0e\x8e\x57\xda\xd8\xdf\xde\x47\x84\x05\x71\x30\xb5\xd2\xfa\xe3\x72\x35\x2c\x30\xfc\x73\xd2\xbd\x1d\xb9\xb4\xe5\x32\x57\x5f\x78\xd4\xb2\xb8\x59\x07\x60\x85\x13\x07\x3b\xac\x94\x41\x09\x9b\x20\x0e\xd6\x09\x1e\xd6\x9c\x05\x42\x7e\x5c\xae\xcb\xfa\x68\x4e\xa8\xab\xad\xc4\xfe\xc5\xbd\x3a\xa2\x77\xdf\x9e\xa0\xfe\x19\x62\x9d\xc8\x94\x9d\x40\xa8\x05\xe2\x10\x6a\x25\x5f\x48\x2d\xd0\x02\xc7\xff\xd8\x67\x6e\xde\xf9\x9a\x60\xcf\x38\xc4\xae\x2a\x83\x8d\x61\x2d\xfb\x86\xb4\x21\xf7\xd7\x74\x91\x5f\x7b\x53\x74\xb5\x04\xf5\xde\x4f\x25\x68\x9f\x19\xc0\xc1\xd4\x22\xb6\xfa\xf3\x84\xac\x19\x6d\x60\xb7\x91\xe4\x83\x94\xe8\xba\x9a\x4c\xb9\xfc\xe3\x27\xbe\xe2\x8a\xf2\xd9\xd1\x0c\x28\x8c\x89\xd0\x21\xa5\x20\x0e\xbe\xac\x6e\xf3\xec\xbe\xbe\xff\x88\x89\xda\x98\xb9\xd5\x61\x2f\x1a\x77\x7d\xe3\x9b\x3e\xeb\x54\xf9\x67\x1e\xa7\x3e\x43\x6b\x7e\xb4\xcc\xd0\xb2\x3a\x80\x83\xa9\x75\xe9\xa7\x8a\x44\x3f\x53\xce\xf6\xf7\xa5\xb6\xea\xb8\xf5\x56\x32\x0a\x6c\x6f\xc7\x8a\xad\x59\x75\xb9\xd7\xf1\x39\x28\x03\xa3\xd6\x50\x46\x15\x80\x83\xa9\x15\x80\xdb\x41\x2d\x39\xbb\x5d\x7d\x52\xad\x37\x39\xcb\xa3\x3b\x5f\x45\xa3\x70\xa0\x56\xb0\xbb\x15\xf3\x9c\xd8\xef\x4b\xdf\x1a\x74\x18\x13\x88\x83\x75\x42\xfc\x44\xef\xe5\x59\x83\x6e\x25\xed\x52\x8d\x9b\x94\xdf\x26\xaf\x66\xe8\x99\x38\x16\xc7\x50\x91\xef\xf7\x44\xf3\x35\xf0\xbd\x3b\x86\xbe\x2a\x07\x70\x08\xb5\x6a\x2e\x96\x48\x02\x5a\xc1\xfe\x27\x91\x04\x69\x08\xbe\xea\x56\x7f\xb4\x6f\xee\x73\xef\x77\x5e\x2f\x7f\xb1\xc1\xaf\x9a\x7c\x82\x25\x85\xf0\x8d\x22\x2b\x23\x4a\x16\x29\xad\xa8\xb6\x07\x38\x7f\x5d\x2b\x5b\x0a\xe9\x3b\xbc\xc9\x30\x67\x4b\x03\x34\x03\x4e\xcb\xcf\x21\x0f\xdc\xf4\x67\xf8\x87\x7e\x05\x93\x44\x7b\x09\x11\x36\xbb\xbe\x72\xbb\x5e\xa5\x24\x9f\xf7\xf7\x4d\x1e\xc1\x9b\x4c\xa7\xac\x1d\x0e\xa0\xef\xe0\xa4\x68\xc7\xdc\x0f\x74\x61\x1b\xe4\x5a\x5d\xdd\xfd\xa9\x12\xdb\xc0\xb9\xc9\x40\xe0\x83\x4c\x62\xff\xdf\xac\x2d\x82\xfa\xf2\xfc\x00\xcf\x74\xb9\x15\x89\x37\x3b\x46\x53\xbc\x4d\x5d\xd0\x77\x10\x43\xaa\xed\xae\x16\x23\xaa\x4f\xab\xc7\x11\xd8\x93\xcf\xdd\xd9\x0e\x9d\xaf\x04\xe2\x60\x03\x3c\x40\xd6\xd1\xdb\x4b\xd0\x7c\xd9\x33\x2f\xec\xd9\xb3\xb9\x16\xf2\xa8\xb2\x98\xfc\x03\xdd\xb3\x3b\x3c\xd9\x26\x1e\x53\xd4\xa8\x0d\x90\xdb\x00\x0e\x7e\xbe\x75\x31\xf9\x77\x02\x85\x6c\x95\xad\xc4\xc8\xef\x97\xde\x73\x17\xa0\x25\x97\x6a\xf8\x2f\xa0\x73\x78\xfe\x72\x08\xbc\x5b\x6f\x01\xd5\xa4\x05\x71\xb0\x01\xde\x45\xfc\xcd\xe2\x3e\x4f\x35\x81\x9a\xdb\x78\xe0\x46\x93\x59\xdc\x3c\xc7\xe9\xfd\x6b\xfa\x0b\xaf\xc3\x28\x1d\xf1\x46\x1b\x9d\xa0\x07\x28\x88\x83\x0d\xf0\x1b\x9f\x3a\x54\x6f\x69\xee\x1f\x67\xfe\xb6\x8d\xc0\xff\xd9\xf4\xb8\x1c\xe7\x66\x3f\x4e\x3a\xf1\x3c\x5a\x59\x62\x5f\x9f\xc8\x07\x06\x44\x58\x10\x07\xeb\x84\x7b\x39\x43\x7f\x5c\x8f\x4f\x39\x79\x4b\x1f\x33\x29\x3c\xba\x43\x4b\xa1\xce\x2b\xe7\xa0\x92\x11\x8f\x36\xf1\xf6\xad\x8e\xc0\x42\x0e\x62\x80\x83\x38\xc4\x00\x1f\xba\xd0\xb3\x03\x34\x66\xce\xab\x15\x30\xb1\x78\xba\x6f\x4d\x3f\x2d\xba\x69\x9c\xf0\xbc\xef\x89\x76\x23\x96\x0f\x19\x6d\xcd\x10\xd9\xdb\x7d\xda\xfe\xb6\xb5\xbb\xd0\x89\xec\x20\x0e\xa6\xd6\x59\x96\x4c\x4e\x06\x96\x21\x7e\xcc\x8d\xf7\xac\x5b\x1f\x24\x4a\xed\xde\x18\x60\xd6\x73\x85\xde\xa7\x37\xb6\xba\xa2\x9b\xb2\xa7\x03\xd5\x79\x01\x70\xb0\x5e\x6d\x90\x8e\xe9\x31\x5a\x34\x0b\x1b\xfb\xb5\xc6\xf8\xc6\x48\xb1\x74\x6f\x02\x3d\x3b\x76\x73\x37\x23\x69\x75\x08\x4d\x37\xa4\x02\x2a\x48\x0a\xe2\x60\x6a\xd9\x4f\x95\x72\x92\x7a\x09\x25\x86\xeb\xfd\x36\x53\x49\x15\xbd\xba\xe4\xa6\xc9\xbe\xbf\x3b\x57\xe9\x39\x8b\xae\xa5\x61\x29\x0f\x2d\x2e\x82\x38\x98\x5a\x5e\xa4\x26\xeb\xb9\x9b\x98\x83\x15\x8b\x7f\xc6\xd4\xa6\x31\x7f\x7f\x2c\x46\x4a\x65\x70\x3a\x39\xb2\x52\xbc\xf6\xf6\x6a\xf3\x22\xf4\xa2\x0a\xe2\x60\x9d\x50\x4d\xec\x9e\x76\x73\xec\x26\xaa\x9f\xde\xe3\xc1\x12\x53\x8d\xf9\x93\x38\xbb\x08\x43\x45\x8f\x41\xe3\x0f\x09\xc7\xc8\x8f\x3d\xa3\x10\x6a\x81\x38\x84\x5a\xdf\x2f\xa4\x16\xe8\xde\x78\x5e\x2d\xbb\x42\x4e\x4d\xba\xe7\x41\x38\xa3\xcb\x9e\xb1\x7b\x78\xf9\x4c\x58\x26\x3d\x11\xdf\xf3\x7b\xee\x4e\xcc\xd4\xd4\xe2\x35\xf3\x40\x1b\xdd\x20\x0e\x7e\x70\xf6\x48\xea\x6b\xd5\x2f\xaa\x35\x47\x21\xb8\x99\x78\xa4\x38\x39\x94\x69\x63\x23\x1b\xdd\x67\x9b\xef\xf3\x99\xa4\xec\x07\xaa\xa1\x32\xca\x20\x0e\xd6\xab\xc1\xad\x44\x46\xdf\xea\x16\x76\xea\xa3\xb4\x74\x93\x29\x56\x8f\xf4\xee\x7b\xcf\xb1\x06\x7f\xba\x3e\x3f\x51\x79\x42\x9e\xdc\xa2\x8b\x08\x0b\xe2\x60\x6a\x05\x4c\x52\xab\x09\xc5\x90\x79\x55\x5c\xa7\xdc\x91\x24\x77\x72\x54\x36\xe5\xb2\x0a\x11\x12\xac\x39\x93\x91\x93\x16\x91\xbb\xc9\x0e\x8d\x2f\x00\x07\x53\x8b\xe0\x26\x92\x2b\xe9\x1b\x5d\xf6\xc0\x62\x06\xd2\xbc\x40\x95\x9c\xae\xee\xd7\xe4\x0b\x56\x98\x77\x89\xe2\xc8\xfc\xea\x97\x03\xa1\x25\x56\x10\x07\xeb\x04\xb1\x4d\xb6\xe6\x68\xf9\xa7\xb1\xbb\x24\xdb\x31\x53\x24\x19\xdb\xda\x93\x8b\x85\xcd\xae\xc8\x55\xe4\xd9\xa4\xdf\x83\x51\x4c\xa0\xac\x7c\x10\x87\x50\xeb\xe8\x42\x6a\x81\xf6\xf8\xcf\xab\xd5\x91\xda\x2e\x37\x45\xa1\x12\x7e\x89\x96\x75\x8e\xc4\xdb\xe9\x0b\xdd\x6b\x5f\x16\xa2\xcf\x28\x95\xef\x94\xd6\xc3\x4f\xde\x09\x42\x49\x85\x20\x0e\xa6\xd6\x52\x4a\xca\xf5\xb2\xc7\x63\xea\x4e\x74\x56\x89\xe1\xd9\xca\x24\x75\x12\x6a\x34\x9f\x52\x33\x95\xd4\xea\x7d\xab\x18\x3e\xe9\x42\xa5\x7e\x41\x1c\xac\x57\xdf\x24\x34\x88\xe1\x8b\x2c\x4d\x0f\x3d\x31\x57\xc6\xbb\xac\x40\x10\x67\x46\xca\x90\x5e\x45\x63\xba\x35\x55\x79\x87\x19\xbd\x12\x2a\x1f\x03\xe2\xe0\x5b\x22\x2e\x9b\xa5\x85\x0c\xe5\x8f\x30\x86\x30\x7f\x1a\x48\x0d\xcb\xd2\xa2\x7c\xb2\xe0\x30\xaf\x6a\xe6\x74\x0e\xbf\xae\xe7\x3b\xda\x08\x2d\x03\x02\x38\x98\x5a\x21\xf9\x34\x1f\x5e\x98\xad\xe4\x2e\x04\x3d\xa5\x7b\xa6\xeb\x33\x23\xfb\xcb\xfa\x55\xa2\x8f\x19\xbf\xbc\xe3\xd5\xeb\xf5\x8f\x47\xa1\x2f\x81\x41\x1c\xac\x13\x2e\x5c\x91\x44\x57\x56\xee\xb2\xd9\xd6\x65\xcb\x47\x84\xd6\x43\xf1\xd4\x02\x6c\xdd\x9c\x02\x23\x97\x8b\x82\x3c\x36\xea\x9c\x03\x2e\xf7\x26\xdd\xfd\x77\x22\x09\xbd\x53\x96\xa6\x4c\xf9\x6e\x35\xc9\x80\x78\x09\xde\xe6\xae\xb8\x23\xa9\x68\xfe\x94\xba\xa0\x7b\x8a\xcd\x94\x71\xf0\xd5\xbb\x69\xff\xce\x74\x08\xf6\xbe\x29\x3a\x67\x11\xa7\x9d\xd1\x26\xce\x1f\xdc\xc6\xf4\x51\x3f\x33\xd4\x16\x55\xce\x92\x79\x73\xd3\xe9\x7e\xba\x17\x0f\x2c\x91\x04\x14\xf9\x7c\x22\xc9\x75\xfe\x17\x78\x03\x1a\x2f\xe7\xef\x0a\x99\x6d\x2e\x38\x77\x33\x1a\xb8\xb1\xe8\x5c\x7a\x78\x94\xe7\xa4\x32\xcf\xc7\x71\xfb\xdb\xec\xbf\x57\x58\x4e\x50\x4c\xb4\xbb\x5a\x04\x94\x7b\xba\xde\xdf\xac\x70\x7d\x5a\x6c\x3d\x95\x44\x14\x79\x2b\x37\x19\xbf\x39\xe9\xae\x9a\x8f\x2d\x94\x48\x02\x8a\xf9\x4f\x22\x89\x18\x3c\x91\xa4\x06\x87\xb4\xe1\x17\x13\xda\xdc\x82\x2b\x91\xe7\xa3\xf6\xad\xe5\xee\x9a\x0a\x52\x85\x81\x59\x9c\xca\x97\x55\x94\xfd\x9a\x5b\xc6\x7f\x9d\x48\x22\x06\x4f\x24\xf1\x8e\x19\x95\x4b\xc6\x69\xe1\x34\x08\x89\x24\x8b\xf4\x60\x17\x13\xea\x9c\xc5\x67\x9d\xea\x2b\xb2\x7e\xeb\x97\x30\x30\xbf\xce\xf0\xd7\xb3\x75\xb1\x73\x89\x24\x77\xf8\x6f\xc9\x63\x4f\xd7\xb3\x4f\x68\xa7\x5a\x25\x6c\x96\x0b\x6d\x6a\xe0\xbc\xf0\x56\xd7\x63\x1e\xb9\x93\x76\x3c\x78\x05\xef\xef\x4f\x60\x11\x3b\x97\x48\xd2\xd8\x51\x78\xb5\xb9\x0e\x07\x85\xf8\x2b\x9e\x4c\x4f\x65\x3a\xcb\xe5\xdb\x6c\x55\x5e\x29\x4c\x5f\xac\x6b\xc3\x34\xcb\x91\x3d\xff\xbe\x56\x87\xd8\xb9\x44\x92\xda\x11\x7e\xa2\x7e\xd2\x86\xd6\xbb\xf2\xb3\x96\xbf\x38\x17\x68\x65\xdd\x32\xa3\x36\x34\x29\xde\xa7\x3f\x09\x19\x64\xf8\x89\xe2\xf3\xf7\x4d\x9e\x4b\x24\xe9\x17\xc8\x44\x2a\xe0\x2b\xba\x57\x72\xf4\x46\x24\x3b\xb6\x4b\xb7\xed\xd5\x5e\x99\x83\x8f\xaa\xaf\xbc\x65\x41\xfe\x07\x5b\x07\xbb\xbf\x6f\xf2\x5c\x22\x49\x8a\x5d\x15\x2a\x92\x94\xed\xd9\x93\x3d\x2c\xd2\xc3\x00\x55\x15\x6e\xa5\xd6\x08\xa5\xbd\x58\xde\x82\x97\x53\xaa\x25\xef\x2a\xe5\xfe\xbe\xc9\x73\x89\x24\xef\x09\x85\xdf\xf4\xe0\xb1\x38\xf5\xe6\xd3\xe1\xec\xa1\x5e\xbf\x8e\x6b\x69\xdc\x10\xe8\xe5\xdb\x1f\xd0\x10\x38\x81\x93\x52\xaa\xf8\xdf\xbc\xec\x81\x46\xe2\xf9\x67\x1b\xc9\x44\xd9\xce\x24\xfe\xd9\xe1\x8c\x58\x27\x05\xb6\xc8\xd0\xac\x0d\x4f\xfb\x84\xf0\x2f\x69\xd9\xf5\x33\x6d\x62\x9b\xba\x90\x30\xe8\xf5\x09\xc0\xc1\x9e\x6d\x03\x2e\xbf\xbd\xda\x2e\x3f\x52\xb8\xfd\xdc\xbd\xfe\x59\x1e\xe5\x93\xee\x96\x00\xd6\x1d\xd3\x6b\x57\x88\xa4\xb5\x0c\xa5\x3d\x69\xa0\xd9\x18\x88\x83\xdd\xd6\x0d\xbc\x84\xbe\xd1\xda\xea\xd7\x87\x04\xf7\x49\xa1\x2d\xea\xa6\x6a\x2b\xa4\x11\x44\xc8\x3e\x60\x32\xc4\xa7\x60\x9c\x31\xa4\x82\x4e\xee\x07\x71\xb0\x67\x1b\x8f\x75\x6f\x8d\xee\xe7\x3b\x28\x31\x77\x83\x4e\xd6\x7b\x8d\x31\xe6\x74\x12\xc3\x46\x23\x75\x27\x98\xa4\x15\xbd\xcf\x2a\x0d\xa0\x85\x78\x10\x17\x28\x8e\xf2\xef\xb0\xa4\x42\x2f\x70\xef\x78\x71\xde\x4c\x53\x39\x41\x5f\x8f\x6b\x6a\x4c\xe7\xfe\xe9\xa0\xe2\x2c\xff\xb0\xf7\x76\x49\x53\x4f\xd1\x06\xf4\x0d\x32\x88\x0b\x14\x47\xfd\xff\xde\xcf\xdf\xc9\x62\x7f\xd5\xd6\xbf\xec\x7a\xac\x84\xc2\x3b\x9f\xb7\x15\xd7\x26\x29\x9d\x41\x68\xfe\x52\xaa\x63\x7a\x55\x5e\xea\xec\x0f\x62\xbb\x1f\xc4\xfd\x53\x37\x42\xec\x42\x89\x24\xa0\x3b\xee\xff\x48\x24\x71\x24\x9d\x9f\x57\x7b\x18\xd6\x21\x2b\x58\xfc\x33\x39\xec\x01\x52\x28\x27\x4a\x38\x7e\x8d\xc4\xc8\x5e\x66\xe2\x76\x0c\x33\xb4\x4e\x08\xe2\x60\x66\x1d\x2f\x2e\x19\x72\xbf\x4f\x10\xc1\x0d\xf4\xe9\x93\x28\x34\xec\x64\x09\xb7\x5c\xb4\xf7\xd6\x61\x3d\x58\x51\x8e\x4b\x0b\x5f\x94\x84\x36\x4f\x01\x1c\xcc\x2c\xa4\x2d\xcf\x86\x83\x5d\x0e\xd2\x4a\xe7\xec\x25\xc3\x87\x59\xc3\x42\xde\xd9\x47\x8d\x0f\xf8\x02\x65\x5f\x51\xa0\xdc\xc0\x4a\xaa\x44\x84\x05\x71\x30\xb3\x84\x2a\x56\xd7\x9d\x6f\xf7\xed\x6a\x86\x66\xf5\x69\xa7\x27\x54\x9a\x79\xd8\xea\xbd\xeb\x6a\xdf\x99\x4e\x64\x0c\x2d\x40\x45\x87\x3e\xca\x01\x71\x30\xb3\x4c\x9b\x37\x4b\x3f\xae\xdb\x67\x2b\x1f\xd0\xf9\x44\x28\xab\xb6\x7f\x3c\xf8\x78\x10\xf3\xd0\x4b\xc5\xd1\x50\x03\x7b\xe2\xf3\xa5\x61\xe8\x5b\x04\x00\x07\x33\x2b\x8b\xad\x3f\xc8\x02\xfd\x9e\xfa\x93\x9b\x7a\x04\x7e\xaf\x14\x09\xd5\x77\x82\x7e\x10\x46\x86\x2d\xff\x3e\x2d\xe5\x4e\x99\xf3\xf5\x41\x98\x05\xe2\x10\x66\x5d\x28\x91\x04\xf4\x60\x3d\x6f\xd6\xfa\x26\x43\x92\xde\x4f\xc5\x81\xaf\x03\x0a\x32\xc6\x1a\xf2\x8c\xd9\x1b\xa6\x65\xfe\xa5\xdb\x97\x73\xb5\x67\x6e\x93\xbc\xf6\x82\x0e\x49\x06\x71\x30\xb3\xac\x84\x17\x26\x79\xad\x4b\x1f\x8d\x0f\x15\xa8\xbc\xf0\xf6\xff\x1c\xaa\x9f\xf9\x5d\xd1\x4e\xec\x7d\x5c\x59\xef\xe3\x67\xde\x53\x09\x88\xb0\x20\x0e\x66\x96\x30\x97\xe7\x41\x25\x9d\xc5\xef\x22\xd5\xc7\x35\xf5\x0b\x92\x0f\x65\xfd\xd1\xb2\x36\x46\x75\x18\xa5\x70\xfd\xf7\x9d\x24\x72\xa1\x2d\x59\x10\x07\x33\x2b\xff\xfe\xda\x87\xef\x95\x9c\x4e\x82\x5a\xf3\x3d\x4f\x03\x24\x3f\x2c\xc6\x73\x14\x3c\xda\x7b\x87\x7e\xe4\xfe\x70\x37\xe9\x4c\xf5\x0d\x22\x2c\x88\x83\x99\x95\x14\x75\x5d\x75\xfa\x12\x61\x7b\xb8\xd5\xdb\x1a\xec\x2c\x35\x31\xdb\x96\x5b\xab\x62\x26\xe9\xb2\x5f\xb0\x9e\xc5\xb5\x94\x66\x3a\x22\xc2\x82\x38\x98\x59\x1e\x53\x16\x6b\xd2\xe3\xc9\xc4\x0a\x41\x66\x0b\xaf\x5f\x68\x9f\x86\x72\x31\x1c\x87\x0a\xc9\x4e\x66\x51\xb5\x7e\xbf\x53\xbd\xa8\x03\x6d\x6e\x00\x38\xc4\x29\xa6\x17\x4b\x24\x01\x4d\xa0\xce\xab\xd5\x53\xfa\xa7\xe7\x25\x9b\xca\x94\xd7\xc3\x03\x1e\xca\xae\xed\xe4\xdd\xd1\x1f\xad\xad\x73\x87\xc8\xa3\xe1\xef\x54\x96\xda\x0a\xa0\x81\x05\xe2\x60\x6a\x45\xf4\x0a\x84\x4a\xe3\x16\x1c\xf6\x9a\x9c\x95\x93\x3c\xc3\x47\x25\x4c\x88\x6b\x96\x19\x09\xbd\x37\x38\x90\x24\xfe\x83\x59\x03\xaa\xa4\x05\xe2\xe0\x5b\xb2\xa1\x78\x9c\x3d\x4d\x68\x2d\xaf\xf9\xa3\x4d\x73\x74\x9f\x49\xa1\x52\xdf\xdc\x3b\x22\x8a\x65\x2c\x47\xf6\xbf\xfa\x35\xc1\x06\xba\xc5\x82\x38\x98\x5a\xda\x5f\x13\x51\xbe\x0d\x5b\xb8\x21\x13\x67\xe6\xd2\xd1\x11\x24\xa3\x25\xdd\x91\xce\xb4\xa3\x7d\xe5\x73\x6a\xf2\x6d\x6a\xf8\x16\xb4\xd3\x0b\xe2\x60\x6a\x45\x75\xc9\x5c\x66\x2f\xfa\x1a\xcd\x9e\xbd\xb1\x1a\xce\xbb\x57\xc0\xa6\xa4\x99\x52\x4c\x6a\x65\xf2\x2a\x79\x97\xe6\x2e\xcd\x1e\x21\x22\x2c\x88\x83\xa9\x45\x4b\xa3\xf7\xa7\xe7\x4b\xe9\xd2\x7d\xd7\x7c\xd2\x5d\x99\xe6\xe4\x47\xd1\x12\xe6\x75\xd7\x8e\xcb\xe5\xa9\x6d\xfc\xed\xbe\xf1\xdd\x43\xa8\x05\xe2\x10\x6a\x5d\x2c\x91\x04\x34\x51\x3e\xaf\x96\xc0\xe4\x0d\x65\xe9\xa7\x27\xaf\x5c\xaf\x6b\x71\x39\x68\x9b\xcd\x75\xbb\xe5\x07\xdd\xca\x1a\x9e\xcb\xfe\x28\xb3\x5f\x71\x38\xaf\x89\xf8\xf9\x20\x0e\xa6\x56\x9c\x36\xd2\x8a\xf0\x9f\x7a\x9f\x82\x05\xf4\xb1\x1c\x26\xc6\x5b\xf5\xb5\x81\xa7\x8b\x2f\x68\x9b\x09\x38\xf2\xb6\xfa\x26\xfa\xa1\x0d\x2e\x10\x07\x53\x2b\x68\x8b\x66\xb8\xa0\xf9\xa9\x6b\x52\xcd\x13\x86\xcb\xd7\xd6\xf1\x2d\x0e\x33\xf6\x71\x2f\x77\x84\x4b\xa6\x75\x3d\xf4\xe3\x10\x86\x56\x11\x40\x1c\x4c\x2d\xfe\x9a\xfe\x94\x03\x65\xa2\x11\xe1\xf0\x38\x41\xb7\x5b\x71\x58\x2b\x98\x3b\xb4\xaa\x1f\xb6\x87\xce\x2a\x53\xeb\xa2\x3c\xb8\xa0\x43\x04\x41\x1c\x4c\xad\x78\x8d\x95\x37\xe9\x4c\x91\xa3\x59\x24\x01\xc7\xfe\x42\x5f\x85\xad\x36\x1a\x85\xb6\x3c\x36\x2f\x33\xfb\x95\xc9\xe2\x5d\xe9\x85\x2a\xf9\x83\x38\x98\x5a\x6c\xc1\x8f\xaa\x48\x17\x0c\xbb\xf6\x4b\x09\x7d\x1c\x2d\xdc\x3d\x3f\x3b\xbb\xed\xa0\xcb\xc8\x1a\x88\xf4\xa6\xec\x6c\x0b\x3f\xdf\x84\x0e\x89\x00\x70\x08\xb5\x2e\x96\x48\x02\x7a\x21\x3a\xaf\xd6\xbd\xbe\xb3\x1e\xa6\x22\x82\xad\x92\xd2\xdb\x25\x6c\xb4\xf8\x51\xbd\xbe\xb2\x5a\xed\x62\xdd\xbb\x9f\xad\x49\xdb\xd8\xde\xa2\x60\x20\x7e\x3e\x88\x83\xa9\x95\x1d\xe4\x54\x58\x22\xd7\xca\xf3\x61\xe5\xfd\xfd\x77\x18\x7c\x5d\xa9\x84\xcf\xcb\x24\xcb\x9e\xe3\x13\xb3\x3a\x77\x46\x33\x67\x79\x21\xc2\x82\x38\x98\x5a\x85\x64\x18\x26\x53\xab\x32\x8d\x7b\x11\x65\xe9\xdf\xae\x98\xa6\x13\xb0\x36\x35\xdc\xac\xb0\xaa\x75\xda\xa8\x4d\x23\xb3\x56\x81\x12\xca\x40\x1c\x4c\xad\xe7\xcb\xc5\xf6\x2d\xa2\xe5\x23\x21\x32\xfb\xfa\x03\x75\x81\x57\xed\x22\x30\xc5\xa2\x39\x3d\x90\x02\x14\x3a\x09\x8b\xd6\xe7\x20\xb5\x40\x1c\x4c\xad\x10\xf2\x2e\xfa\x88\x71\xab\xd4\xb6\xe5\xc8\x9e\xf2\x3c\x37\xb6\x28\x76\xb1\x08\xd7\x3e\x0f\x8f\xac\x2a\xe3\xf6\xcb\xb8\xdb\x54\xd0\x02\x15\x80\x83\xa9\x65\xe7\xaf\x5d\x4b\xbb\xf1\xf0\x80\x0d\xcf\x5d\xa5\x47\x2f\x56\x3b\x51\xc8\x5e\x9b\x31\xf7\x0f\x16\xcf\xe1\xe9\xca\x4c\x7c\x5a\x38\x42\x2d\x10\x87\x50\xeb\x62\x89\x24\xa0\x17\xdf\xf3\x6a\xd1\x39\x3e\x12\x45\xb6\xd5\x2e\x33\xed\x6e\xf1\x8f\xee\x1e\x4d\x8e\x88\x7c\x1c\x93\x63\x1c\x86\xee\x2f\xd7\xe0\x88\x6a\x97\x0e\x7d\xa7\x0d\xe2\xe0\x15\x2b\x9f\x86\xdf\x70\x49\x7f\x77\xfb\x1d\xe6\x3e\x7d\xbc\x56\x3b\xe3\xda\x28\x95\xca\x62\xe1\x68\xf0\xbe\x36\x9a\x29\xf7\x4a\x0b\x94\x0e\x0e\xe2\x60\x6a\x59\x24\x84\xae\xcc\x6f\xdf\x3c\x7e\x1f\x4a\xfc\xc2\x87\xd1\x79\xe3\xe6\x75\xc5\xce\x77\x8a\x27\x44\x97\x34\xe3\xaf\x8e\x18\xb8\x41\x2f\x07\x20\x0e\xa6\x96\x01\x06\x5d\x0a\xed\x6b\x97\xb2\x96\xe6\x68\x24\x46\x7f\xb9\x81\x87\x44\x4a\x76\x6f\x37\xea\x3c\x8e\xc2\xff\x48\x4d\x52\x84\x1c\x43\xaf\x9d\x00\x0e\xfe\x7e\x98\x71\x6d\xeb\x04\xa5\x43\x20\xf8\xea\x8d\x39\x43\xd3\xc3\x6c\xa3\x96\xa8\xe3\xed\xcd\xf7\xad\xe1\x65\x1b\x24\xf6\x85\x71\x1c\xd0\xfb\x21\x80\x83\xa9\xd5\xb3\x98\x40\x75\x40\xea\xf6\x08\x5f\x03\xbf\x22\x9b\x2f\x8f\x34\x91\xc4\x07\xfd\x4f\x92\x54\x52\xfc\xa1\x7e\x2e\x9d\xf7\xd1\x21\x42\x2d\x10\x87\x50\xeb\x62\x89\x24\xa0\x05\x8e\xf3\x6a\xc5\xc8\xfd\x56\xa2\x91\xdf\xf3\x1e\x96\x7c\x20\xd7\xa9\x7c\x3d\x71\x96\x69\xe9\x7e\x5b\x70\x1d\xa5\xef\x0d\xaf\xde\x6d\x93\x4f\x90\x5a\x20\x0e\xa6\xd6\xc7\x23\x0a\xd9\x92\x19\x6e\x0a\x15\x34\xe1\x93\x2b\xa5\x8f\x50\x77\xc8\x3f\x52\x36\x61\x7c\x95\x0c\x3a\xdd\x6b\xd2\x4f\x47\x5b\x85\xbe\x0a\x01\x70\x30\xb5\x84\x64\x71\x52\xc7\x2a\x72\x9e\xa2\xec\xcf\x28\x76\xa6\xb5\x95\x10\x27\x94\x44\x07\x8d\xa8\xf5\x78\xec\x18\x7e\x09\x75\x08\x84\x0a\x6c\x82\x38\x98\x5a\x1d\x1d\xbf\xdb\x05\x50\x8d\x1f\x1a\x08\x54\xac\x6f\xca\xc9\xef\xd1\x8b\x48\xc9\xd6\x1a\x86\x5f\xfe\xf2\x35\x96\x6b\xb4\xc5\x21\x0b\xda\x5b\x00\x70\x30\xb5\x02\x9e\xd0\x73\x29\x8e\xd4\x99\xde\xad\xce\x91\x7d\x4e\xba\x78\xa3\x1a\x7d\x3a\xc3\xc7\x7c\x64\x08\xd7\x56\xfa\xe0\xb5\x6e\x02\x74\x4c\x27\x88\x83\xa9\x65\x20\xa2\x7c\x16\x9a\xc6\xaa\x41\x7c\x87\x4f\xca\xd5\xf9\x41\xc1\x43\xc6\x5f\x91\xdf\xc6\x0f\x26\x84\x5d\x07\x62\xe5\xdf\xb2\x99\x22\xd4\x02\x71\x08\xb5\x2e\x98\x48\x02\x5a\xc1\xfe\x27\x91\x44\xec\x5c\x22\x49\x08\x2d\xff\xd6\x66\xdb\xd0\xf1\x11\x92\x4d\xb0\xbb\xd9\xf3\xc2\xcd\xb6\xe8\xef\xf4\x5c\x4e\x82\x24\x8b\xde\xcc\x02\x45\x07\x37\xfe\x7e\xa1\xef\x5c\x22\x49\xbf\x23\x92\x01\xa9\xa1\xb0\x19\x51\xd3\x6d\x0e\xcc\x6b\x06\xce\xcd\x1f\xba\x8a\x0c\x69\xe5\x7e\x9d\xb0\x87\xd3\x6e\x84\x33\x89\xfd\x7d\x93\xe7\x12\x49\x7e\xa2\x56\x2a\x1f\xb5\xcf\x3e\xf2\x95\x25\x3c\x8d\x7b\x66\x84\xf1\xeb\x57\xff\xb4\x1f\x51\x8b\x33\xaf\x79\x82\xd9\xf4\xd1\xb3\xbf\x3d\x8f\x5c\xef\x62\x7d\xf9\x3f\xf6\xcd\x8a\x45\xa5\x7d\xc4\x7c\xde\x2d\xff\xd6\x2d\x5a\x29\x96\x39\x96\xb2\xf7\xa3\xca\x7f\xd7\x9a\x2b\x4a\xf5\x32\xd1\xdd\xde\x01\x4a\xef\x05\x71\xb0\x01\xde\xe6\x20\xd9\xed\x99\x33\xea\x8d\x3b\xc0\x9b\xbd\xcd\xe2\xf1\xb9\xcb\xc3\xe8\x81\xfe\x69\xf3\xb5\x23\x1f\x6d\xdb\x15\xe4\x60\x7c\x44\x58\x10\x07\x1b\xe0\x78\xc3\x59\xb4\xf3\xb1\x31\x67\xf5\xbb\x04\x42\xca\xbf\x1f\x78\x76\x2b\xbc\xa1\xd1\x0c\x17\x0a\x10\x50\x97\x5b\x12\x1b\x0d\x7d\x80\x08\x0b\xe2\x60\x03\x9c\x71\xa6\xad\x88\x5c\x38\x2d\xad\x98\xea\x49\x31\x73\xaf\x05\x13\xc5\x57\xf2\x2d\xa4\xdf\xd5\x4e\x7e\xd4\x48\x11\x37\x32\x9d\xa1\x2d\x59\x10\x07\x1b\xe0\x15\xda\x9a\xd3\x37\x94\xae\x69\xb6\xfd\x2c\x62\x12\xb4\xcb\xba\x7f\xa0\xfa\x2b\x3f\xea\xd1\xa2\xee\x54\x63\xc3\x2a\x5e\x41\x03\x74\xe2\x1e\x88\x83\x0d\xf0\xb8\xbc\xc5\x37\xf7\x08\x38\xf2\xad\x42\x58\xaf\x4d\xb0\x5b\xef\xd9\x26\x52\xb3\xac\xf4\xdc\x1d\x64\xc2\x62\x8b\x8b\xf5\x3c\xfc\x8d\x18\xe0\x20\x0e\x31\xc0\x2f\x96\x48\x02\x1a\x33\xe7\xd5\x1a\x09\x89\xf6\x54\xc3\x7b\x59\x95\xf1\xea\xd2\xd4\x34\x91\xe4\x87\xf9\x06\xa3\x8d\x39\xda\xf7\x5d\x0e\xe9\x84\x59\x03\x3d\x5e\xd0\xa9\x49\x20\x0e\xa6\x56\x1e\x1b\xcf\xd7\x6e\xf2\x7e\x02\xb4\x3e\x9c\x5d\x2d\x97\x6f\xfd\xcf\x72\xdc\x5c\x35\x98\xb9\x13\xf8\x3e\xe4\x04\xd1\x95\xbf\x83\x56\x01\x41\x1c\xfc\xdc\xec\x86\xd3\x75\x86\x0a\x13\xbc\x05\xe6\xf4\xf2\x34\x97\xd1\xdd\x47\xfb\x3f\xda\x62\x44\x1e\x5a\x7c\x46\xef\x47\xfd\xd8\xcb\x78\x8a\x08\x0b\xe2\x60\x6a\xa5\x3f\x19\x9c\x55\xfa\xac\xdd\xe1\x1a\x63\x5f\xb3\x5f\x2b\xd9\x1e\xbe\x10\x3b\xa2\xf2\x7a\x46\xb9\x0d\xf5\xe5\xe7\xb4\x4e\x5d\xe8\x91\x04\xe2\x60\x6a\xa1\x10\x38\xaa\x8e\xd2\xcf\xaa\x92\xdc\x9e\x7a\xc7\xba\x50\xae\x2d\xe4\xd6\x69\xcc\x15\x55\x2b\xc1\xeb\xba\xdf\x46\x22\xdc\xc9\x84\x08\x0b\xe2\x60\x6a\xcd\xfd\x2a\x7a\xb3\xfe\x31\xa2\x5c\xbc\xc6\x90\xa3\x4e\xc6\x51\x7e\x84\xed\x8c\x62\xe5\x71\x24\xc1\xca\xb5\x9c\x8f\xef\x35\x51\x4e\x10\x6a\x81\x38\x84\x5a\x17\x4b\x24\x01\xdd\x1b\xcf\xab\x45\x98\xba\xa0\xaf\xf6\xf4\x07\xe7\x40\x3c\x9f\xbf\x4f\x89\x52\x47\x5c\x7a\xc2\xde\x63\xe2\x47\x5a\x3c\xb1\xaf\x49\x8c\xb2\x47\xb3\x11\x3f\x1f\xc4\xc1\xd4\xa2\x9f\x1b\x29\xe4\xf0\x6d\xde\x4d\xa7\xde\x60\xb3\x6d\x50\x5a\xf6\xf0\x7b\xce\xf4\x09\xf5\x9e\x42\x38\x1b\xef\x69\x6a\x87\x34\x54\x42\x08\xc4\xc1\xbf\xfd\xb3\xa3\x0b\xdc\xa4\xbc\x99\xe6\x7e\x44\x8f\x81\xf1\xc3\x1d\x1b\x45\xd0\x96\xff\xd6\x3c\xc1\xa9\x5c\xe0\xab\x58\x72\x06\x33\xe8\x1b\x58\x10\x07\x53\x6b\x70\x5e\xcf\x8e\xea\xd2\xfb\x0f\xbd\xf1\xec\x54\xa8\x99\x2d\xbf\xde\x18\x8d\xb6\xb7\xb6\xd1\xf2\x6e\xe0\xdc\x7f\x34\xfb\xd4\x9c\x06\x11\x16\xc4\xc1\xd4\xe2\x0d\x4e\xc7\x0f\xf7\x6e\xb4\x73\x15\x2f\x92\x9e\xf9\x26\xfe\xd9\xaa\xdb\xa3\x0a\x6f\x4f\x4b\xa6\x19\x4f\xe7\x31\x0a\x32\x63\x14\x22\x2c\x88\x83\xa9\x95\x37\x25\xcf\x84\x37\xe3\xf8\x0e\x59\x89\x03\x27\xa6\x87\x54\x2a\xf0\x56\xea\xf4\xcc\x12\xdb\xa0\x1f\xff\xe2\xed\xcc\xba\x85\x3a\x84\x5a\x20\x0e\xa1\xd6\xc5\x12\x49\x40\x7b\xfc\xe7\xd5\x0a\xd9\x34\xa6\x6e\x34\xd5\x90\x23\x6c\xbf\xad\x85\xb9\x7b\x69\xd8\x0f\xff\x04\x77\xf9\xb8\xef\xd4\xd6\x8c\x9e\x47\x5b\x60\x00\xda\x10\x02\x71\x30\xb5\x48\x7c\xf8\x8e\xf3\x0b\x7f\xc7\x3e\xd4\x62\x75\xb1\xd2\x33\x3f\xba\xa1\x23\x1e\xa2\xce\x17\x27\x44\x2f\xa3\xe6\xf0\xe0\x96\xab\x0f\xb4\x87\x07\xe0\x60\x6a\x61\x3c\x6d\x37\xd7\x08\xaa\x0d\x31\x72\xc5\xd0\xe9\xfc\xde\x89\x74\x83\x38\x56\xeb\x39\x8d\x95\x22\x2b\xf5\xe1\x35\xbb\x38\x55\xe8\x9b\x42\x10\x07\x53\xeb\x67\xea\xbd\x19\xbd\x3f\x5e\xaa\xa1\xd9\x0b\x27\x13\x54\x49\x58\xd9\x7f\xa8\x90\x33\x84\x70\x77\x9c\xae\xa0\x5a\x73\xf1\xec\xb5\x22\xc2\x82\x38\x98\x5a\xa3\x43\x57\x38\xf3\x24\x07\x6f\x20\xb1\x9c\xa2\x78\x7b\x0a\x1c\xb9\x30\xdb\xd7\xbd\x57\x22\xfc\xda\x54\xb2\x5e\x1e\x3f\x50\x09\xe5\xa7\x80\x38\x98\x5a\x17\xae\x48\xf2\xfd\x31\x86\x8e\x8c\x05\xba\xcd\x9b\xb2\x2e\x6e\x5f\xa6\xa5\x78\x7d\x29\xdf\x74\x1f\xec\x00\x36\xd7\xd6\xf7\x19\x31\xfe\x03\xd4\xff\x4e\x24\x11\x1e\x3b\x52\xaa\x5f\xf8\xcc\x6e\x9b\x26\x61\x84\xe9\xe7\x20\x49\xb5\x69\xad\x5f\xf5\xed\xd7\x27\x09\x1e\x05\xfb\xcd\x32\xb2\xd2\x7f\xa1\x19\xdf\x9d\x4d\xd5\x49\x7b\xb6\x70\x86\xe3\x14\xa9\x0e\x78\x3d\xbf\x61\xae\x12\x34\x5d\xfa\x99\x74\x26\x84\x11\x8c\xa4\x29\x50\x0c\x4b\x24\x01\x45\x3e\x9f\x48\xe2\x27\x66\x8e\x74\x22\x1f\xf4\xc5\x6d\xb2\x16\xfb\x51\xcd\xbb\x5f\xa4\x8b\x66\xf2\x8e\xeb\x87\xa8\x16\xdc\x9b\xa9\xeb\x6d\xdc\xc2\xff\x42\x5d\x7b\xef\xbb\x89\x8a\x61\xf3\x87\x34\x0f\xa2\x3d\x74\xe6\x72\xce\x52\x2f\xd7\x60\x8b\xa0\xa0\x7e\xf9\x39\x28\x40\xb9\xea\xd1\x09\x94\x48\x02\x8a\xf9\x4f\x22\x89\x1f\x3c\x91\xe4\x75\x42\xea\xa7\xd1\xb6\x18\x9f\xc4\x49\x05\x9e\x08\xdb\x97\xe3\x57\xcd\x5e\xd1\xe9\x54\x32\xde\xa4\xc9\xa9\x1e\x7d\x84\xcb\xa6\xf7\xd7\x89\x24\x7e\xf0\x44\x12\xa6\x40\x33\x5d\x91\xd0\x03\x19\x92\x80\xe5\x5a\x16\x8d\x63\x2f\x06\xa5\xce\x8f\x9c\xe6\x0d\x6b\x5c\xfb\xfa\x32\x6f\xdd\x9b\x37\xff\x7a\xb6\xee\x77\x2e\x91\x24\x89\x8e\xfa\x8f\xb0\xc9\x83\x84\xf5\x25\x14\xaa\x82\x93\xa4\x8a\xab\xdb\x9f\xd1\xec\x6a\x34\x46\x6c\x50\xea\x72\x1c\xb7\xfa\xc6\xfe\xbe\xc9\x73\x89\x24\x33\x6b\x25\x8d\xc5\x1c\x5e\xc4\x3e\xbf\x2a\x26\xfa\x5c\xdc\xd7\x62\xb3\xc4\x2a\xf1\xa9\x13\x75\x3e\x0f\x48\xf1\x96\x5b\x07\x44\xfd\x7d\x93\xe7\x12\x49\x3c\xd6\x24\x1a\x18\x48\xa7\xee\x8a\x29\x04\x2a\xa2\x4f\x17\xf6\x8b\xe0\x5b\x34\x48\x76\x71\x7a\xea\x5b\xfa\xa7\x5c\xd6\xf3\xff\xfb\x0c\x1d\xbf\x73\x89\x24\xd5\x97\xeb\x66\xce\xe2\x32\xcb\x93\x8e\x6c\x0e\x15\xff\x28\xde\xde\x60\xfd\x62\x53\x3c\xb7\x9d\x9e\x55\xe2\x22\x27\xea\xa2\x74\xfc\xf7\x4d\x9e\x4b\x24\x99\xba\xb4\x9e\x8d\xa5\xca\xac\x90\x63\x8c\xdb\xc3\xc6\xfd\xf5\xe4\xeb\xfb\x6a\x36\x7f\xc1\x04\xed\x44\x2a\xcb\xc3\xc2\xf7\xdb\xee\x7f\xdf\xe4\xf9\x8a\x24\x9f\xa5\x1f\xc4\x6c\x7a\x88\xbd\x67\x29\x7c\xc9\x8d\x63\x43\x83\x14\x96\x39\x39\xf1\xee\xd6\x7c\x70\xd5\xb1\xad\xc7\x4b\xd5\x89\xff\xe6\x65\x0f\x34\x12\xff\x47\x2d\xff\x5d\x27\xef\x94\x1e\x3b\x85\x4a\xbe\x9a\x90\xee\x5a\x06\xde\xe4\x16\x1a\x26\xe4\xdc\xeb\xfb\x22\xab\x77\xdc\x22\x35\xc7\x8d\x10\xf7\x5f\x10\x07\x7b\xb6\xf1\xf0\x75\x37\x74\xd9\x7f\xf6\xd0\x49\xcc\xb2\x99\x77\xde\xe0\xc4\xa7\x39\xcb\xb8\x5f\x5e\x63\xd1\x37\x62\xf2\x68\xec\x6b\x36\x23\x94\x9a\x01\xe0\x60\xcf\xb6\x13\xee\x96\x36\x86\xc0\xc6\x1b\x2c\xfa\x12\xb7\xdb\xf3\xed\x24\xfd\xb7\x67\xde\x4c\xa5\x6e\xda\xe3\x0d\xac\x8f\x9d\x64\xcb\x2d\x23\xc2\x82\x38\x78\x45\x12\x6b\xd6\xb5\xce\x4d\x49\xb7\xbe\xa5\x83\xdc\x0d\x7a\x86\xc3\x4b\x2c\xca\x5d\x98\xad\x9e\xdb\x39\x95\x6c\xcd\x7b\x06\x4a\x50\xd1\x00\x10\x07\x7b\x08\xb5\x5c\xd3\xa7\x3a\xd5\x79\xf7\xea\xbe\x83\x2f\xbf\x6f\xdf\x5b\x33\xd6\xe8\x91\x5c\x02\xd2\x94\x30\x49\x39\xf1\x1d\xac\xbc\x3a\xe8\x98\x08\x10\x07\x5f\x83\x16\xb5\xef\xc3\x32\x08\x6d\x66\x66\xf1\x41\x63\xad\x9d\xc6\x33\x40\xc9\x25\xba\xf4\xe5\xda\x60\x23\xc7\xd2\x61\x94\x18\xbf\x2b\x62\xbb\x1f\xc4\xfd\x53\x37\xc2\xef\x42\x89\x24\xa0\x3b\xee\x79\xb3\x12\x53\xf6\x6e\x6a\x3c\xc1\xd0\x75\xb9\x57\xb6\xf1\x81\xad\xb3\xaf\x72\xce\x1b\x95\x8f\x3a\x70\x75\xfd\x8b\x90\x2c\x4e\x7a\x8c\x39\x54\x3d\x06\xc0\xc1\xcc\x1a\x4d\x9a\x9e\x6d\x14\x20\xf3\x67\x28\xf6\x70\x99\x67\x3b\xd4\xbb\xcd\xa5\x13\x7f\xbf\x83\x8a\xa0\x83\xf6\x1a\xdd\x9f\xd9\x61\x0d\x68\xc2\x00\xe0\x60\x66\x29\xdd\xb8\x2b\x7d\x13\xf7\xf5\xd4\x6f\x34\x55\xac\xb0\xf7\x89\xeb\x0a\xa7\xf1\x6f\x3e\xda\x27\x26\x48\x10\xb4\xbd\x40\xa7\xd1\x8f\x44\x84\x05\x71\x30\xb3\xc2\x34\x78\xe4\xa4\xec\x58\xa5\xa7\xa5\x6b\x82\xf5\xc2\x90\x8b\xd4\x7f\x5d\x97\xf1\x1f\x0b\x2c\x1f\xcc\xe7\x29\xb5\xa6\xb8\x0c\xe5\xc9\x82\x38\x98\x02\x33\x37\x71\xec\x47\xa9\x42\x44\xdd\x52\x1c\x0f\x9e\x4f\x7d\x2b\x33\x1d\xb7\x57\xa3\xa5\x6e\xf7\x0d\xc6\xc8\x2c\xa6\x5c\x8b\x85\x4e\x57\x07\x71\xb0\xb0\x53\x58\x63\xb9\xe8\x5c\x37\x62\xb0\xea\x7c\x27\x7e\xee\xe8\x33\x73\x59\xab\xb3\xaf\x54\xf9\x09\x36\x94\x93\x99\xdd\xa1\xa3\x2b\x44\x98\x05\xe2\x10\x66\x5d\x28\x91\x04\xf4\x60\x3d\x6f\x96\x02\x1a\x77\x91\x60\xb5\xd6\x23\x17\x87\x84\xe9\x8f\x14\x8a\x32\xef\x91\x9a\xa9\xdc\xab\x36\x1e\xca\x28\x1c\xfd\x7c\x6d\xb4\x0b\x6d\x1b\x82\x38\x98\x59\x5b\xd7\xc2\x90\xbe\xf4\x32\x52\xc9\x7e\x1a\x50\x1c\x17\x2c\xd1\x29\xe2\xb2\x99\x55\x28\x5b\x0f\x1a\x41\x76\xcd\xbb\xa3\x66\x99\x87\x08\x0b\xe2\x60\x66\xdd\xa1\xb2\x33\x55\x99\x5f\xdf\x16\xc0\x1c\x95\x75\xb1\xa5\x2c\xe1\x49\x5b\x2e\x5e\x95\x20\xe7\x10\x11\x68\x93\xfd\x73\xaf\xbb\x08\xaa\xf1\x01\xe0\x60\x66\xf9\x68\xe0\x47\x0b\x2a\x53\x9b\x27\xbc\x68\xaa\xe0\x1f\x4e\x6b\x48\xe0\x15\x98\xaf\x7a\x7e\xdd\xdd\xfa\x9e\x7c\x1c\x06\x4f\x1a\x34\x0e\x40\x1c\x4c\x81\xc4\x89\xf6\xd4\xab\x78\x8e\x02\x6b\x4f\x1c\xf1\x6a\x93\xd4\xbd\x4e\x0a\x24\x48\xa8\x39\x37\x29\x4a\x4e\x6d\xb2\x31\xd7\x6c\x52\xa0\x51\x0b\xe0\x60\x61\x7f\xea\x1e\x3e\xa8\x94\xe0\xda\xe9\x2d\xeb\x38\x33\x9e\x56\x32\x53\x57\x78\x43\xec\x24\x6b\x33\x51\x85\xbe\xc6\xb6\x46\x75\x9d\x0f\xf1\xaa\x07\xe2\x10\xa7\x98\x5e\x2c\x91\x04\x34\x81\x3a\xaf\xd6\x2c\x63\x6f\x5a\xfc\xad\x85\x7e\x14\xfc\x7b\x03\x37\xe4\x6a\xb2\x49\x36\xe4\x82\x8c\x03\x78\x02\xe4\x2d\x3c\xa3\xdc\x1a\x1f\x95\x20\x7e\x3e\x88\x83\xa9\xa5\x6f\xb8\x7d\xf7\x72\xea\xb5\xc4\x21\x71\xb6\xef\x0b\x46\x33\xb8\x1f\x52\x9f\x10\x60\x34\xff\x5c\x11\x5d\x89\xa8\xd6\x91\xf3\x82\x2a\xf1\x82\x38\x98\x5a\x38\x0f\x04\x9a\x67\x46\xbf\x6c\x7a\xf7\x88\x13\xf5\x0d\x45\x47\x44\x1a\xd0\xe5\xbf\xae\x71\xd2\xa3\xce\x50\xe6\x17\xf1\xd0\x0b\x44\x84\x05\x71\x30\xb5\x76\x83\x6f\x04\x89\xea\x76\x68\xdd\x99\x57\xf1\x26\x1f\xab\xaa\x19\x6f\xbd\x54\x44\x1b\xa8\x3a\x91\x2f\x9b\x27\xe1\x87\xbd\x10\x8d\x08\x0b\xe2\x60\x0e\x24\x77\x18\x07\xef\xef\x1a\x59\x0b\xd2\xdc\x64\x1b\xc8\x13\x9b\xe0\xe0\x0c\x14\x36\xdd\x60\x69\x4a\x4d\xa5\xa1\x78\xe6\x66\x66\x88\x08\x0b\xe2\x60\x61\x29\x30\x62\xeb\x54\xbd\x2d\xf8\x49\x7e\x28\x62\xf1\x1a\xba\x4f\xee\x7d\x9e\xa0\x29\x1b\x71\x96\xb9\x75\xf6\x76\x79\xb5\xba\xc8\x1d\xa1\x16\x88\x43\xa8\x75\xb1\x44\x12\xd0\x44\xf9\xbc\x5a\xcc\x48\x26\xa7\x77\x0a\xcb\x63\x4e\x30\x9f\x8f\xdd\x8f\x68\xb3\x4e\xe3\x0e\x75\xce\x61\x79\x12\x70\x25\x30\xa7\xc8\x11\x4d\x1f\x3a\x1f\x01\xc4\xc1\xd7\x3e\xd7\x76\x12\x26\x50\x8a\xa5\x6a\xd3\xdc\x2f\x7f\x97\x52\x7c\xfa\xc6\xdc\xd7\x9d\x8e\xd1\x6e\x42\x78\x6f\xcf\xbe\xa9\x50\x17\xaa\x48\x02\xe2\x60\x6a\x1d\x96\xe2\x46\x9e\x5a\x64\x48\x25\xa9\x8d\x60\xcc\x07\xcb\x9b\x18\xac\x7d\xfc\x36\x89\x5a\x2f\x4b\x1c\xab\x18\x1a\xe6\x34\x0a\xa5\xec\x82\x38\x98\x5a\x07\x58\x1c\x0c\x2f\x0b\xe3\x0e\x7f\xb4\xfa\xe7\x60\x9c\x30\x54\x9b\x2d\x56\x25\xd2\x17\xaa\xdd\x53\x2e\xa8\x3e\x0b\x47\xa6\xa7\x43\x84\x05\x71\x30\x07\x90\x65\x6f\xb9\xb3\x7d\x4e\xe5\x66\x40\xff\x38\x90\xc1\xe4\xf0\x46\xd0\xf0\x73\xd3\x5e\xd4\x1f\x8e\x7b\x8d\xcf\xa9\x74\xdc\x4a\xa0\xab\x05\x71\xb0\xb0\x92\x96\xb9\xa6\x64\x27\x0c\x52\xea\x8d\x62\xa8\xab\x0f\xf0\x66\x0b\xc9\x7e\x7a\x9c\x30\xa9\x71\x88\xd3\x7f\xca\x70\xc6\x16\x5f\x41\xa8\x05\xe2\x10\x6a\x5d\x2c\x91\x04\xf4\x42\x74\x5e\x2d\xd2\x32\xe3\x5b\xbd\xbc\x9d\x5e\x72\xd6\x1f\xef\xe2\x24\xf3\x18\x4a\x48\x72\x93\x8c\x04\xa7\xde\x35\x4c\xff\x46\xfd\x48\x7a\x00\x3a\x30\x1f\xc4\xc1\xd4\x9a\x9e\x9d\x42\x25\x65\x2b\x4a\x2a\xd5\x5b\x9e\x7f\x53\xb5\x43\xec\xd9\x17\x4c\x6e\xef\x5d\x18\x48\xfa\xb3\xb9\xd4\xc1\xff\x29\x54\x51\x0f\xc4\xc1\xd4\xda\xee\x56\xf9\x50\x3d\x15\xbc\x52\xd2\x6b\xde\x1a\xe8\x73\x13\x59\x70\x36\x85\x12\xcf\xc5\xbb\xb9\xc2\xe7\xce\xec\x52\xc6\xc1\x75\x44\x58\x10\x07\x53\x8b\x99\xd8\x51\x45\x63\x3e\xc2\xab\xee\x60\x2e\xf8\x59\xfc\x2d\x65\x27\x4e\xa6\xab\x43\x9e\x3d\xba\x0e\x78\x3b\x6f\xfa\x39\xee\x40\x2b\x49\x20\x0e\xe6\xc0\xd6\xfd\x29\xcd\x77\x12\x56\xc9\x9f\x63\xf8\x79\x91\x16\x99\xc3\x16\x65\xd7\x04\xc8\x87\xf7\x30\x1e\xc6\x13\x1d\x3d\x65\xc9\x8c\x80\x66\x05\x00\x0e\x16\xb6\x28\xf1\xe0\xae\x14\x91\xc6\x40\xcd\x51\x77\xe8\x0a\xd1\x77\x8d\xbb\xcb\x8b\x42\xf2\xa4\x2f\xb9\xde\xe1\xe5\x4d\x0c\x8c\x36\xad\x22\xd4\x02\x71\x08\xb5\x2e\x96\x48\x02\x7a\xf1\x3d\xaf\x56\xab\x28\x63\xd0\xa9\xb0\xb4\x80\x77\xbb\xe8\xc7\x55\x9b\x22\xbb\xfd\xab\x5b\x57\xd8\xe6\x72\xe9\xd6\x70\xac\x5f\xb6\x62\xff\x86\x6a\x69\x81\x38\x98\x5a\x0d\xa6\xdc\x79\x4b\x9c\xd6\x3a\x35\x7f\x7e\x92\xad\xe6\x1d\x84\xe5\xdc\xe5\xf5\xad\x61\x9e\x2c\xb4\xc0\x0e\xba\xdf\x12\x15\x09\x7d\x9f\x09\xe2\x60\x6a\xed\x7b\x86\x2b\x67\xd7\xda\xa4\x6d\x54\xa2\x91\xde\x32\x62\x90\xc6\xc5\xb3\x64\x37\x61\x59\x2a\xc3\x33\xfe\x4d\xff\x81\x44\x95\x07\x11\x16\xc4\xc1\xd4\x6a\x1b\x0c\x5a\x75\x6f\x30\x8b\x58\x56\x19\x4c\x9c\xad\xb8\x46\x7f\x10\x69\xf6\xe4\x25\x63\xa3\x44\xae\xc4\x30\x4d\x06\xd6\x0f\x33\x68\xeb\x12\xc0\xc1\xe7\x5a\x0c\x82\x39\x2d\x25\xe5\xe5\x29\x1f\xaf\x1f\xc4\xc9\x2f\xc7\x2c\xed\x8d\xd4\x54\x1f\x0c\x52\xe7\x30\xf5\xec\x27\xa9\x1e\xa9\x41\x73\x2d\x00\x07\x0b\xbb\x58\x7c\x87\x89\x5e\x12\x7f\x25\xe8\x0d\x1a\xdf\xea\x6f\x2f\x2e\xe4\xb9\x93\x43\x77\xee\xb8\x24\xef\x22\x96\x39\x42\xd9\x1d\x41\x84\x5a\x20\x0e\xa1\xd6\x05\x2b\x92\x00\x16\x38\xce\xab\xe5\x99\x17\xe9\x4c\xde\xaa\xe6\xbf\xa7\xab\xea\xd1\xa9\x32\x19\x49\x21\x2c\xe1\x15\x84\x5e\xb2\x24\xa2\xae\x16\xf5\xea\x97\x26\x94\x64\x0f\xe2\x60\x6a\xfd\x8e\xe1\x08\xca\xb2\x20\x7a\xd5\x7e\x0b\x23\xb5\xf3\x5b\x2f\x9e\x6d\x66\x30\x9e\xf6\x40\xfb\x33\xef\xfd\xde\x5d\x94\x19\x51\x56\x44\x58\x10\x07\x53\xcb\xbf\x56\x82\xed\x49\xe0\xf5\x0f\x63\xd9\xd8\x5a\x77\xac\xb8\x3f\x88\x5a\x3c\x3d\x15\xea\x71\x4d\x1a\x7f\x67\x36\x95\x1c\x38\x0e\x3d\x62\x40\x1c\x4c\xad\x52\x4c\x5e\xee\x75\x96\x52\x2c\x82\x91\x7c\xac\xce\xfa\xd4\xa9\x5d\x0a\x4c\x31\xb2\xf2\x1b\x1d\x27\xbc\xaa\xe5\x71\x45\xb3\xaf\x11\x61\x41\x1c\xcc\x01\xb3\xd4\x10\x81\x0f\x93\x48\x6f\x43\x3f\xc5\xa6\xce\x9e\xa0\x28\x9a\x47\xc4\xaf\x99\xbe\x2c\x96\x32\x08\xc5\xca\x62\x89\xfb\x7f\x59\xab\x20\x0e\x16\xd6\xdb\xac\xeb\x86\x9a\x38\xca\xcd\x89\xfe\x14\xc9\xf1\xf8\xb5\xa6\x53\x52\xdb\x30\xb5\xde\x75\xa2\x27\x86\xac\x68\x94\x95\x57\x52\x11\x6a\x81\x38\x84\x5a\x17\x4c\x24\x01\xad\x60\xff\x93\x48\xe2\x77\x2e\x91\xc4\x52\x5f\x91\x05\x9f\xf2\xf7\xc3\xb1\xf8\xae\x86\xe8\x10\x91\x35\x3d\xfb\x90\x14\x95\xb7\x6c\x19\xe1\x37\x3e\xca\x38\x18\xdd\xf9\xfa\xf7\x0b\x7d\xe7\x12\x49\xfc\xfe\x60\xcc\x9d\x2d\xd3\xae\x8d\xbb\x39\xbd\xdc\xf0\x10\x0f\xf1\xc6\xd0\xac\x0b\xe9\xf8\x8c\x1c\xdc\x59\x3e\xa0\xc9\x52\x68\xf2\xf7\x4d\x9e\x4b\x24\x09\x0f\xbb\xac\x17\xb0\x1a\x1e\xe2\xf2\xc5\x25\x32\xf7\xc9\x6a\xb9\x5b\x84\x31\xb9\xc6\xfd\xab\xe2\x9f\x2b\x51\xbe\x1f\x93\xba\x38\xfd\x37\x6b\x8b\xa0\xbe\xfc\x1f\x87\x44\x68\x3e\xba\x42\x70\x4a\x2d\xee\x84\x2c\x7c\x0b\x33\xb2\x42\x30\xab\x0b\xf9\x81\x41\xeb\x88\x2d\x05\xda\x86\xe5\xd3\x91\x2d\x19\x84\x84\x20\x0e\x36\xc0\x6b\xf7\x3b\x38\x9e\xec\x1c\x1e\x8c\x99\x71\xd3\xbc\xd7\x22\xd9\x36\xdc\xb3\xd0\xa0\xb7\x8e\x9b\x50\xe8\xf9\xe4\xd9\x90\x61\xb4\x84\x08\x0b\xe2\x60\x03\xfc\xba\xd5\xe6\xa6\x6f\xbf\xa0\xc0\xe3\x17\x4d\x6d\xb7\x78\x4e\x79\x09\x2e\x6b\xdc\xe6\x78\xd5\x3c\xba\x61\xb9\x4a\x56\xf4\x35\x92\x1c\x11\x16\xc4\xc1\x06\xb8\x0b\xf5\x83\x57\x1c\xf8\x6f\x55\x5e\x8f\x18\xda\x6a\x2e\x8b\x45\xa9\xd5\x1d\x3a\x25\xab\xa8\x33\x6b\x79\xc9\x5e\x22\xbe\xbe\x08\xe5\xb7\x82\x38\xd8\x48\xcc\x77\x2d\xe0\xc8\x4d\x65\xd3\xc2\xee\x25\x59\x79\xef\x2a\x5d\x38\x16\x39\x1b\x3c\x78\xd7\x1c\xbd\xa5\xb7\xb0\xf9\x49\x46\x13\x74\x46\x24\x88\x83\x85\x6d\xad\x37\x0c\x62\x94\x8f\x16\xa8\x5f\x61\xa2\x0b\xfc\x79\xbd\x62\x00\xa9\x94\x8f\xc8\x14\x6d\xd5\x10\x29\x82\xbd\x95\xc8\x75\x06\x31\xc0\x41\x1c\x62\x80\x5f\x2c\x91\x04\x34\x66\xce\xab\x15\x81\xdf\x2e\x40\x73\x36\xbe\x1e\xb1\xde\x1d\x6e\x30\x14\x8c\x4e\xd4\xfd\xc5\x17\xe3\xfe\xb5\x68\x8b\xd3\x3d\x62\xac\x36\x79\x68\x5b\x1e\xc4\xc1\xd4\x9a\x77\xf6\xd5\xad\x7b\x7c\x34\xe0\x36\x5c\xfd\x58\x05\x95\x33\xb6\x8c\xea\xe8\x76\x88\x7b\xe6\xa0\xdf\x3b\xd1\x8f\x77\x38\xb0\xa0\x69\x09\x88\x83\xa9\x95\xbb\x35\x5b\x4b\x4b\xea\xe4\xfe\x12\xc7\x84\xb7\x82\x30\x12\xd9\x15\xc9\x26\xca\xf0\x3a\xbb\xe9\xfe\xf8\x7b\x8f\xb6\xce\x67\x50\xe9\x10\x10\x07\x53\xeb\xa6\x30\x66\x42\xef\x86\xce\xfc\x8b\x7e\x14\x33\xa2\x94\xf0\x72\xfc\x44\x11\x82\xd3\x89\x0e\xe7\x17\x7e\x9c\x35\x68\x73\x02\xb4\x88\xb0\x20\x0e\xe6\xc0\xf5\xb5\x2a\x5c\x22\x5c\xf3\xe5\x1a\xe6\x68\xcf\x1b\x43\xcf\x2a\xf7\x94\x19\x77\x7e\x5f\xb6\xff\x8c\xab\x7b\xef\xd2\x7d\xe9\x2a\xe8\x63\x1a\x10\x07\x0b\xcb\x5e\x8f\xe1\x93\xfa\xfc\x44\xd0\xd4\xb8\x78\x9e\xdd\x8b\x80\x99\x2c\x81\x73\x54\x2e\x6b\x1f\xeb\xa7\x94\xaa\x98\xbb\xba\x2e\x54\x39\x14\xc4\x21\xd4\xba\x58\x22\x09\xe8\xde\x78\x5e\x2d\xd7\x74\x4d\x7b\x97\x28\xf3\xfa\x44\xbb\xdb\x4c\x0f\xdc\xb0\x03\x8a\x87\x89\xd6\x14\x48\x2b\x48\xbe\xc9\x32\xa9\xd9\xf1\xd1\x40\x7f\x16\x88\x83\xa9\x75\x67\xef\xd9\x96\xc2\x2e\x3d\xfa\x8a\xce\xf4\xd3\x61\x81\xdb\x46\x23\xc2\xc1\x62\x3a\x76\x77\x96\x04\x5f\xdd\x0c\x75\xee\x47\x85\x36\x03\x40\x1c\x4c\x2d\x6e\xcc\x19\x7d\xe6\x4f\x9e\x36\x99\xdf\xeb\x1a\xd5\x46\x92\x37\xca\xef\x67\x7d\xbb\xb7\x61\x59\x48\x8a\x7d\x89\xfe\x21\x72\x06\xb4\x0c\x08\xe2\x60\x6a\x3d\x20\xba\x1e\xd9\xf6\x39\xd0\xd1\x38\xc7\x36\x1f\x55\x42\xe5\xc4\xa0\x26\x24\x88\xdb\xff\x00\x13\x2b\xd9\xb2\x8a\x97\xbc\x96\x0f\x11\x16\xc4\xc1\x1c\xd8\xc1\xc2\xc3\xc5\xf7\xe1\x33\x40\x37\x7b\x2e\x49\x88\x9f\x1f\xb5\x87\x65\x4d\xc7\xbe\xf4\xfc\xd5\x73\x4a\x19\x03\x4e\xbd\x0c\xe8\x30\x47\x10\x07\x0b\x1b\xac\xa7\x9b\x2d\x5e\xea\x43\x25\xb1\x69\xb6\x2c\xa0\xe4\x63\xae\x11\xd9\x1b\x1b\x22\x66\xd6\xc8\x86\x27\x8d\xc5\x46\x5c\xd0\x89\x50\x0b\xc4\x21\xd4\xba\x58\x22\x09\x68\x8f\xff\xbc\x5a\xd1\x02\x95\x57\x57\xbf\xe4\x44\x3a\xe7\xea\xf0\x23\x05\x2c\x8f\x49\x6e\x16\x6b\x70\x65\xf7\x1f\xed\x31\x2e\xfa\x3c\x6d\x0f\xa8\x47\xfc\x7c\x10\x07\x53\x2b\xac\xe2\x7a\x83\xc9\xfe\x94\xa9\x5d\x1f\x86\x9d\x64\x81\x19\xdf\xde\x6d\xa2\xbb\x89\xbb\x02\x73\xbb\xc8\xdb\x0a\x85\x57\x18\xa0\xac\x61\x10\x07\x53\x2b\xb3\xc5\x29\xec\xf2\x20\xae\xe0\xee\x97\x7b\x45\x6f\x0e\xbb\x0a\x04\x14\x8d\x69\x8e\xe4\xef\x5e\x6b\xf8\x39\xbc\xa1\xa1\x46\xc5\x8b\x08\x0b\xe2\x60\x6a\x61\x7e\x7c\x39\x35\xfe\x7c\xfa\xc9\x40\x52\xfd\xa7\x2f\x9e\xe3\xc2\x58\x94\x68\xed\x91\x68\xc2\x13\xab\xca\x4c\x84\x32\x3e\xbf\x33\x10\x61\x41\x1c\x7c\x75\xf1\xd9\x5b\x7b\xc2\x88\x72\xb1\x68\x13\x9c\xf1\x28\xfe\xc4\xfa\xfa\xde\x00\x76\x6f\xed\xa0\x66\x0f\xa9\xb6\x87\x77\xc9\x4e\x3b\xa0\xd5\x45\x00\x07\x0b\x7b\xe1\x8a\x24\xcf\x88\xc5\xae\xac\x88\x90\xa5\x8b\x1f\xa5\x56\x1c\x0a\x52\x68\x09\xf1\x78\xdc\xc2\x2e\x1c\xd8\x16\x91\xea\xdb\x76\x94\xbd\x29\xf3\xef\x44\x12\xfc\x2d\x76\xc5\x37\xb3\x44\xd5\x73\x2f\x6b\xde\xed\xe8\x3e\xac\xc5\x74\x0b\x59\xeb\xd6\x50\x25\xa2\x7d\x35\x77\xe9\x59\xf7\x16\xce\xbf\x7b\x4b\x81\xe6\x05\x36\xee\x67\x2b\x63\xb2\x0c\x31\x4d\x41\xcd\x2a\x96\xf5\xee\xea\x1d\x0c\xdc\xe4\xf7\x7b\x77\x7c\xf6\x66\x99\x58\x61\x89\x24\xa0\xc8\xe7\x13\x49\xf4\x0d\x5b\xd7\x7e\x46\xbe\xb8\xf1\x99\x78\x77\x26\xa2\x3a\x9f\x80\x6c\x61\xbc\x36\x46\x4e\xeb\x5a\xd9\x0b\xed\x16\x9c\x0d\xe2\x7f\x57\x47\xf1\xa4\xf2\xa7\xb9\xf4\x3d\xfc\x38\x61\x13\xdb\xca\x00\x37\x65\xa6\x33\xde\x9f\xf8\x28\x28\x26\x60\x49\x2a\x57\x27\xb1\x73\x86\x1d\x4a\x24\x01\xc5\xfc\x27\x91\xa4\x09\x9e\x48\xd2\xa7\x6f\x4f\x42\x61\x45\xb6\x5d\xe7\x71\xca\x6d\x6b\xdd\xf2\xfa\xe6\xf4\x60\x50\xcd\x90\xc5\x76\x8b\x51\x4c\x04\x3d\xff\xe6\xfc\x5f\x27\x92\x34\xc1\x13\x49\x4a\x1f\x16\x50\x7d\x44\x0b\xe3\xd2\x10\xc1\xce\x7e\xac\xf5\x20\xab\xfd\x25\xb9\xdd\x3e\xda\xd7\x9f\xfd\x34\x5b\xc9\x9a\xb7\x9d\xc2\xff\x7a\xb6\xde\x74\x2e\x91\xe4\x32\xeb\xe1\x0e\xd5\x0d\x25\x02\x1d\x6e\x65\xce\x98\xa2\xb9\x31\xc9\x51\xc1\xe7\xbb\x4e\x45\xc8\xa2\xbe\xdd\xe1\xaa\xd2\xa4\xda\x7f\xdf\xe4\xb9\x44\x12\x4f\x74\xdb\x6b\x9f\x34\x02\x6e\xb2\x84\x0b\xc7\x7f\xb1\x6c\xcd\xe2\x73\x37\x2e\x66\x6b\x7c\xa0\xa3\xab\xba\x72\xba\xda\xed\xcf\xff\xf7\x4d\x9e\x4b\x24\x49\x50\xff\x42\x9a\xc5\xc7\x97\xc5\xd1\x16\xa3\x92\x1e\xd8\xf3\x9c\xd9\x44\x6e\x83\xec\xf0\x55\xb5\xd6\xc9\xbc\x86\xfd\x4c\x77\xdf\xdf\x37\x79\x2e\x91\x64\x8b\x32\xcc\x8a\xc9\x3f\x97\x4f\x7e\xe9\xe3\x3b\x1c\xea\x90\x99\x10\xf9\x77\x18\x72\xe8\xea\xca\x39\xdf\x13\x72\x1f\x1a\xcc\x07\xff\x7d\x93\xe7\x12\x49\x7a\x56\xdf\x77\x99\x7b\xad\xd1\xdf\xb9\x2c\x48\xd0\xdd\xb7\x19\x51\xf2\xa7\xe2\xbb\xd4\xf2\x44\xa2\x91\x15\xf9\xae\x67\x1d\x79\xd1\xdf\x37\x79\x2e\x91\x04\xfb\xfa\x89\xba\x88\x3e\x79\x51\x4d\x19\x5e\x87\x81\x19\xee\x15\x9b\x92\x17\x68\x61\x65\x22\x84\xdc\xcc\x9b\x97\x5a\xf3\x07\xdb\xfe\x9b\x97\x3d\xd0\x48\x3c\xff\x6c\x53\x71\x22\x33\xb8\x46\xb3\x72\x79\xfd\x8b\x10\x3e\xf9\x76\x49\x7a\x6e\x1a\xdd\xd7\x43\xf1\xe9\xd9\x67\x35\x2a\x0a\xea\xf3\x9e\x1f\x11\xf7\x5f\x10\x07\x7b\xb6\xdd\xc6\xcf\x3b\xd1\x1a\x8e\x7a\x75\x62\xd3\x9b\xa6\x90\xfb\x8b\xdf\x76\xe1\x72\x36\xbd\xb4\x82\xd3\xc0\x35\x06\xff\x40\xe7\x24\xe8\x1d\x12\xc4\xc1\x9e\x6d\x14\x2e\x8c\x44\x52\x67\x1b\x38\x76\x57\x74\x9d\xd1\xf8\xf2\x35\xec\x73\x02\x3e\x94\x2a\x35\x53\x36\xfe\x6a\xcf\x4a\x1f\xed\x84\x4e\x14\x06\x71\xb0\x67\xdb\x18\x31\x93\xde\xa4\xa0\x52\x69\x70\x8c\xd2\x67\xb6\x2e\xd4\x9b\x8e\x47\x9b\xd7\xae\x28\x7f\x9d\x3f\x7a\x49\xf1\x88\x4b\x21\x0c\xda\x8c\x01\x71\xb0\xab\x2d\x1f\x5f\x0d\x2e\xb5\x1a\xcc\x4f\xd6\xfa\x3d\xac\x11\x19\xeb\xb5\xf1\x12\x4b\x2f\x2d\x45\x87\x4b\x56\x59\xfa\x9e\x7e\x67\x2e\xf4\x6a\x0a\xe2\x60\xb9\x97\x3f\xbf\x8e\x9b\x8d\x92\x46\xc5\x92\x3c\x4c\x29\x12\xeb\xbf\x43\xa9\x95\xe6\x9a\x1d\x6a\xb5\x8c\x96\x85\xe4\xcc\xf9\x4a\xb6\xd9\x17\xb1\xdd\x0f\xe2\xfe\xa9\x1b\xd1\x74\xa1\x44\x12\xd0\x1d\xf7\x7f\x4c\xc8\x43\x8b\x8d\xef\x0e\xdf\x46\x63\x0f\x13\x78\x3c\xb7\xa5\x59\x75\x3d\xba\x3f\x19\x37\xb3\x38\xcb\xe0\x6d\xae\x62\x68\x91\x0f\x54\xcf\x11\xc4\xc1\xd7\x09\x5f\x55\x8f\xef\xb8\x07\x2c\xae\x97\xbe\xfe\x20\x4d\x9b\x31\x7c\x3f\x51\x4f\x5b\xd9\x5b\xd2\xd0\x6d\xe1\x92\x95\xad\xf9\xa7\xdf\xd0\x3a\x21\x80\x83\xfd\x57\xd4\xe9\xc5\xfb\x81\x5f\x6a\xee\xe7\x37\xcd\xb1\x48\x65\x63\x4b\x72\x73\xae\x54\x3a\x7c\xf2\x13\x2f\xc6\x92\x4e\xcf\xb9\xf2\x07\x7a\x29\x03\x71\x30\xb3\xe4\x78\x0c\xbe\xc4\x55\x7f\x14\xff\x96\xb9\x3c\x5f\xdd\xff\x63\xd3\xde\x84\xa4\xc3\xa0\xe3\x1b\xba\xf7\xef\x43\xb4\x2b\xc2\xb4\x50\x95\x0b\x10\x07\xbb\xda\x5f\x3f\x30\x1a\x5f\x1c\xe3\xbe\xa9\xe8\x51\xf7\x65\xd1\x2a\x9f\x35\xed\x48\x3f\x7d\x72\x12\x54\xc9\x4e\x8c\x41\xbf\xd2\xba\x50\x8b\x08\x0b\xe2\x60\x66\xbd\x79\x7b\xe6\xef\xe6\x40\x46\xb0\xbf\x82\xf6\xa4\x3e\x9a\x14\xd3\x5f\x6a\xc9\x9f\x04\xd9\x75\xa4\x30\x6c\x2e\x5c\xef\xee\x8b\x5d\x84\x59\x20\x0e\x61\xd6\x85\x12\x49\x40\x0f\xd6\xf3\x66\x15\xfa\x49\x0b\x18\x84\x36\xe4\x8b\xfd\x8e\x6a\xef\xea\xb6\x1a\xd1\x45\xe7\x4b\xe4\xfc\xa3\x77\xc3\x11\xc3\x5f\x42\x5c\x5a\x13\xfa\x5a\x1e\xc4\xc1\xcc\x32\xaf\xef\x89\x71\x59\x26\x28\xc4\x0a\xe0\x43\x4d\x9c\x91\x8a\x40\x41\x1b\x28\xcb\x13\xd7\xc7\xac\xe0\x3b\x2d\x7c\x42\x2a\x0d\x7d\x8e\x02\xe2\xe0\x67\x42\xea\x64\x57\x61\xd2\x16\x65\xba\x56\xe8\x64\x0e\x52\xbe\x69\x4a\x30\xb6\x65\x7d\xe5\xd1\x11\xa7\xfd\xe0\xe9\x25\xdd\x87\x0f\xa0\x4f\x92\x40\x1c\xcc\x2c\xa3\x17\x25\x3f\xb1\xd0\x66\x38\x77\x38\x7f\xfc\xac\x25\x2a\xeb\xbe\xcd\xc3\x41\xd4\x40\x1b\x47\xff\xa8\x64\x8b\x34\xe9\x79\x38\x74\xdc\x28\x88\x83\x5d\xad\xb1\xbc\xa8\x68\x50\x6f\x90\x18\x7e\xf4\x9f\x9f\x2c\x7f\x02\xc8\xe2\xc2\x07\x33\xee\x76\x1d\xdc\x8c\xb0\x95\x4e\xe4\x8e\xc0\xd9\x40\x84\x05\x71\x30\xb3\x38\xcf\x02\xaf\x8c\xed\x1a\x2b\x2b\xe1\xae\x4a\x91\x0f\x2c\x17\x25\xe2\xa6\xd3\x5b\xad\xfe\x7c\xe5\xe7\x60\x94\xc1\x84\x5f\xc3\x80\x78\xd5\x03\x71\x88\x53\x4c\x2f\x96\x48\x02\x9a\x40\x9d\x57\x6b\x6a\x78\x81\xfd\xb2\xf7\x57\xb4\xcb\xf5\xa3\x8d\x67\x5f\x3d\xe9\xa9\xe3\x39\xb2\xde\xb1\x98\x29\x51\x7b\x0d\x35\xb5\xab\xa4\x40\x09\x90\x20\x0e\x7e\x6e\x7f\x4c\xea\x9a\x0d\x41\xcf\x8f\x12\xf1\x9d\x93\x6b\xdf\x53\x07\xb6\x1b\x78\x92\x6a\xcf\x54\x8d\x57\xe9\x87\x1f\x32\x18\xe9\x43\xc6\x82\x38\xd8\x9f\xf5\xd3\xe5\xf1\xc8\x6e\xea\x34\xce\x94\x9a\x93\x13\xcb\xc6\x66\x90\xa5\xf2\x6b\x3f\x06\x01\x86\x4b\xa3\x51\x39\x0f\x4f\xae\xa0\x40\x5b\xb2\x20\x0e\xbe\x8a\xe0\xb9\xed\x5b\xcc\xbd\xfe\x2a\x4b\xc7\xcf\xe4\x13\x3e\x9f\x4f\x5a\xf0\xc9\xd5\x4e\x46\x94\xee\x34\x1e\xdf\x44\xfb\x4f\x2a\x9b\xd0\x2a\x02\x80\x83\x5d\xad\x0a\x67\x91\x8a\x89\xf3\xbc\x74\xb9\x51\x7a\x2b\x1d\x45\xd3\x11\x81\x9d\x04\x15\xcd\x93\xcf\xed\x03\xbb\xd6\x81\xfe\x57\xa4\xad\xa0\xa9\x06\x80\x83\xa9\xf5\x14\x67\x52\xd6\xef\x29\x8f\x8a\x91\x42\xea\xe8\xb5\xc2\x65\xf1\xb9\x8a\x7a\x3b\x22\xef\xd2\x90\x9c\x2a\xda\xd8\x95\x2c\x22\xa8\xd8\x0d\x88\x43\xa8\x75\xb1\x44\x12\xd0\x44\xf9\xbc\x5a\x57\x1c\xdd\x0e\xce\x76\x6f\x3d\x9b\xb1\x5f\xbe\xa7\x79\xf5\xbe\xa2\x87\xb0\xd9\xd0\x04\x39\x8a\xa3\x27\xad\x98\xa2\x15\x99\x3a\xb4\xf6\x09\xe2\x60\x6a\x95\xd2\xb8\xca\xd1\x32\x3e\x53\x60\x0c\x4b\xc1\x6a\xe0\x70\xe6\xfc\xbc\x76\x20\x9b\xc2\x12\x2c\x58\xf7\xec\x35\xed\x8f\x28\x62\x28\x4f\x0d\xc4\xc1\xab\x31\xbf\xf1\x69\xed\x1f\xfe\x86\x1b\x76\x55\x1a\xa9\x37\x54\xe8\x0f\xfe\x36\x41\x6e\xd4\x16\xae\xaf\xde\x7b\x35\xc9\x47\x5f\xab\xa0\x27\x0c\x88\x83\xa9\x45\x5a\x2c\x79\x4b\x2a\xe6\x7d\xde\x29\x75\x5e\xd4\x99\x0b\xd1\xa3\x58\x87\x0c\x9a\x62\x0d\x75\x9a\xf8\x6b\x63\xc5\x3d\x98\x4f\xa0\x92\xfb\x20\x0e\x76\xb5\x69\xc9\xe4\x75\xf7\x76\xd5\x4f\x1b\xd0\xf4\xe9\x54\x7b\x35\xb5\xe2\xe4\x1f\x17\x04\xc6\xb6\xdd\x3d\xea\x9a\xfe\xc8\x1e\x55\x0d\x1d\x9b\x0f\xe2\x60\x6a\xed\x0b\x10\x7b\xda\xc5\xe3\xbd\x1e\xe1\xf7\x19\xf1\xc0\xac\x69\x22\x95\xbc\x42\x28\x83\xc4\xab\x2f\xfc\xfe\x47\x8d\x7f\x29\xcf\x23\x84\x5a\x20\x0e\xa1\xd6\xc5\x12\x49\x40\x2f\x44\xe7\xd5\xfa\xfd\xc3\xde\x93\xf0\x5e\x28\x7f\x13\x1d\xd6\xac\x54\xd8\x20\x92\xad\xe3\x34\x5d\x56\xc0\x94\xe8\xc9\x80\xf2\xc4\x84\x64\x26\x54\x91\x04\xc4\xc1\xd4\x52\x6b\xd6\xda\xbc\xaa\xbc\x90\x45\xf1\xb1\xad\x82\x59\x8c\xe9\xa9\x4f\x2b\xcd\xb5\xee\xd7\x24\xfe\x42\x5f\x95\xaa\x9a\x12\x07\xa0\x43\x92\x41\x1c\xec\xcf\x1a\xd6\x56\xeb\x35\x2e\x4a\xa6\x10\x4c\xe6\xc9\xeb\x2b\x5f\x2a\x68\xb9\x6e\x68\xa2\xd9\x49\x47\x2e\x6b\x27\xaa\x6e\xe4\xb7\x0a\x9d\x66\x0c\xe2\x60\x6a\x9d\x54\xb9\x3d\x7f\x75\x0f\x15\x57\x9f\x92\x1c\x63\x80\x7e\xfb\xa0\x32\xba\x36\x6b\xca\xfa\x63\x92\x95\x87\xb4\xd3\x4b\x66\x1c\xa8\x12\x01\x88\x83\x5d\x2d\x61\x8a\x9f\x39\xdf\xaf\x5f\x94\xf9\x13\x5f\x1c\xf1\xeb\x90\x55\x9f\x67\x7a\x46\x93\xbc\xd7\x53\xf4\x2c\xb1\x65\x3b\x63\x98\x83\xca\x11\x83\x38\x98\x5a\xe2\xb1\xce\x8f\xaf\xed\x62\xe5\x4b\xa8\xf1\x70\x55\x09\x9b\x09\xe6\xd3\x4f\xfb\xd8\xe3\x38\x3f\x35\x4a\xb9\x51\x67\x27\x58\x0f\xe5\x28\x81\x38\x84\x5a\x17\x4b\x24\x01\xbd\xf8\x9e\x57\x2b\x6b\x5e\xc6\xca\xdd\xb4\x69\x39\x2c\x65\xa9\x26\x83\x12\xeb\x5d\x07\xa5\xad\x4c\x89\x81\xee\xf5\xc1\x90\x7b\x2f\xde\x3d\x7c\x82\x87\xf8\xf9\x20\x0e\xa6\xd6\xb5\x79\xbf\x74\x9d\x35\x57\x7d\x89\xcd\x6c\x5c\x14\xe4\xbc\x45\x3a\x3b\xea\x7b\xaa\x35\xc9\x61\xb7\x2e\x15\xec\x7e\x2e\x16\x85\x32\xa1\x41\x1c\xec\xcf\x72\xbf\x3e\xfd\xf6\xd2\xce\x4d\xb5\x2d\xd3\x58\xb1\x16\x8a\x2d\x26\x62\x3f\x94\x78\xda\x1a\x86\xdf\x8d\xc2\xbc\xd3\xa7\xb8\x1f\xa0\xe4\x75\x10\x07\x53\x8b\x9c\xaf\xc7\x46\xac\xf1\xba\xc7\x2a\xf6\x6a\xdd\x55\xb2\x9f\x15\x8e\x36\xc9\x23\x45\x3a\x93\x18\x9b\x2e\xb5\xdc\x85\x79\xcc\xd0\xdb\x2c\x88\x83\x5d\xad\x2b\xc5\x07\x9b\xa5\xb1\x76\x7f\x91\xd2\x4a\x92\x78\x3e\x66\xae\xc6\x1b\x3d\x64\x6b\xa1\x44\xf3\xc5\xf8\x2d\xa7\x97\x93\x71\x55\xa0\x37\x24\x00\x07\x53\x4b\x96\x44\x88\x38\xa1\xa6\x66\x0c\x9b\x65\xe8\x32\x6b\xf4\xaf\x9c\x9f\x98\x23\xc6\x8d\xd8\xef\xef\x47\xa3\x84\xed\x78\x45\x2b\x12\x22\xd4\x02\x71\x08\xb5\x2e\x96\x48\x02\x5a\xe0\x38\xaf\xd6\x40\xfc\xfd\xcd\x3d\x09\xcb\x90\x2a\x11\xa1\x09\xd9\xd2\x80\x91\x37\xd2\x2c\x7f\x0c\x26\x9e\xc8\xd0\x93\x17\x99\xfa\x4a\x65\x0f\x22\x7e\x3e\x88\x83\xa9\x35\xb4\x38\x2b\xeb\xf5\x58\x94\xa3\x7c\xd2\xd9\x67\xf0\xda\x93\x49\xb6\x81\x2f\xeb\x0f\x70\x4c\xea\x33\x5f\xe9\x5f\x1a\x5a\x4a\x84\xca\xc7\x80\x38\xf8\xa9\x2e\x0a\x81\xfc\xa1\x9e\xec\x68\x3a\x9c\x33\x2e\x3d\xbd\x4a\x2d\xd7\x7d\x4e\xf6\xf7\x05\x2d\x4f\x0a\x7c\x6f\x34\x09\x8e\xe6\x05\x23\xc2\x82\x38\x98\x5a\xbd\x2b\x29\x84\xb9\x22\x0f\x0c\x27\x6a\x89\x4d\xed\x8a\xa6\x2d\x02\x15\x5f\xf6\x13\x8f\xa1\x29\x0b\xdb\xbf\x6c\x47\xa1\xb9\x01\xed\x2f\x81\x38\xd8\xd5\x3e\xf2\x72\x67\x1e\xd6\x27\x7e\x16\xf1\x66\x8d\x8f\x7e\xe5\x7d\x89\xdd\x62\xa1\xda\x8b\xf4\x31\x41\xb3\x27\x53\x09\xd9\x31\x4a\x3b\x88\xb0\x20\x0e\xbe\xf4\xa0\x1a\xea\x5e\x1c\xb7\x28\xae\x6d\x71\xb6\x80\x64\x33\x19\x78\xa6\xe0\x6c\x70\x18\x2e\xea\x86\x69\xe9\x39\xb7\x64\x9f\x2f\x0a\xe5\x83\x03\x38\x84\x5a\x17\x4c\x24\x01\xad\x60\xff\x93\x48\xd2\x74\x2e\x91\xc4\x69\x80\x8b\x28\x50\x46\x8b\xb6\x6a\x52\xc5\xf4\xf1\x06\xda\x1a\xda\x47\x89\x2f\x4f\xe7\x6a\xfc\xd0\xaf\x1a\x5c\x8e\x9f\xd3\xfd\xdb\x03\xa5\xc3\xa5\x9a\xce\x25\x92\x4c\xcd\x08\x48\xa2\xe6\xcc\x0a\x59\x4b\x4f\x16\x30\xc6\x8f\x17\xbf\x38\x29\x72\xa0\xe8\x99\x26\x52\xce\x61\x5a\x19\x49\xc2\xb7\xf9\xfb\x26\xcf\x25\x92\x90\x06\xdd\x25\xec\x7c\x66\xfc\x40\x88\xec\xc3\xc6\x7b\x86\x25\x27\xac\x97\xd4\x31\xfa\x31\x34\xc4\xad\x15\x94\xcd\x5a\xb8\xc6\xc3\xff\xcd\xda\x22\xa8\x2f\xcf\x0f\xf0\xed\x3d\xda\x72\x19\xc7\x8d\x17\x0a\xae\xd1\x22\x8f\x90\xc8\x0f\x7e\x2a\xb5\x7c\x14\xe7\x08\xc3\xe7\x71\x8c\x40\x16\x4a\xe5\x81\x32\xc5\x40\x1c\x6c\x80\xab\xdc\x6e\xa1\xef\x68\xe4\x96\x5f\xb5\x2a\xa2\xaa\xef\xeb\x9a\x5c\x3a\x2b\xf3\x24\xa4\xa0\x22\x55\xfe\x89\x7d\x75\x9a\x89\x8f\x04\x7a\x8f\x00\x70\xf0\x19\xaf\xd3\x1f\xfe\x42\xe7\xb4\xac\x77\x97\xfc\x3f\x2f\x13\x19\x05\x87\x95\x11\x07\x73\x07\x0f\x24\xc4\xdc\xf9\x32\xec\x9f\x52\x03\xa5\x74\x81\x38\xd8\x00\x67\xd0\x33\x24\x61\x94\x3d\xe8\xba\x86\xf3\xb2\x39\xb3\xea\xd3\xbe\x45\x82\xeb\x4c\x78\x55\x45\x06\x67\xff\x66\x49\x81\xf5\x27\xa8\x6a\x24\x88\x83\x5d\xed\x8f\x33\xd5\x8d\x62\xf5\xa7\xf9\xec\xa5\xfb\x71\xd9\x5d\x27\x56\xb6\x09\x7f\x22\xf7\x49\x94\xdc\xd9\xea\xd2\x5e\xf8\x11\x4b\x42\x07\x78\x81\x38\xd8\x00\x47\x97\xff\x30\x69\x35\x26\xd0\xf6\xd6\xe2\xda\xe3\x1b\xc1\x82\xec\xe6\xcb\xd1\xf5\xdb\xdf\x64\x77\x76\xc2\x09\xa8\x8d\x35\xca\xae\x21\x06\x38\x88\x43\x0c\xf0\x8b\x25\x92\x80\xc6\xcc\x79\xb5\xe8\x1f\xaa\xe5\x8f\x05\xe6\x31\xba\x22\x87\x75\x2e\x05\xcb\xb3\xec\x97\x7b\xbb\xd0\x19\xff\xda\xd1\xe5\x1e\xba\x53\x78\xcf\x0c\x2a\xf1\x09\xe2\x60\x6a\xb5\x76\x60\x0e\x21\x9d\xc4\x87\x8e\x23\xeb\xe0\xa9\xb7\x6d\xfa\xc4\x6f\x08\x08\xf8\x63\xe2\x26\x21\x73\x49\x6d\x74\xb8\x8a\x41\xe7\x05\x83\x38\xd8\x9f\xd5\x4c\xf2\x5d\xd7\x23\x49\x4b\xf9\x97\x2a\x8f\x5b\xe8\x91\xdb\xaa\x83\x9f\x4f\x38\xf7\x84\x88\xde\xb5\x92\xb2\x51\xbc\x6d\x69\x68\x22\x0d\xe2\xe0\xa7\x26\x29\x29\x9b\x9f\x7e\x38\x53\xdc\xc2\x88\xb8\x95\x45\xde\xf0\x59\x05\x0b\xbf\x11\xf5\x56\xf9\xe6\xeb\x07\x09\xa9\x64\x3a\x39\xd0\xc9\xb6\x20\x0e\x76\xb5\xe3\xa5\x6a\x0b\x78\x55\x34\xf6\x5a\x7a\x4f\x99\x44\xc3\xae\xb1\x49\xf5\x16\x1f\x7f\x32\xb8\x43\x45\x55\x10\x7c\x5b\x4e\x66\x02\xaa\x75\x0b\xe2\x60\x6a\x65\xd9\x4b\x2e\x0b\x64\x0c\x29\xdd\x99\x3a\x19\x34\x12\x89\x27\x64\xe2\x3c\x15\x5a\xe9\x78\x98\x3c\x5c\xc7\xca\xbe\xd5\xcd\x07\xa5\x4e\x83\x38\x84\x5a\x17\x4b\x24\x01\xdd\x1b\xcf\xab\x35\x1e\x93\x27\xcc\xa3\x21\xea\xf7\xfd\xa0\x23\xfd\x73\x7a\xad\x55\xb4\x84\x81\xf3\xd5\x9c\x59\x63\xe1\xfb\xa7\xee\xa5\x5e\x5f\x2e\x41\x3f\x1f\xc0\xc1\xef\x5a\xcb\x1e\xc2\xca\x43\x1c\x86\x12\x98\x7e\x97\xd7\x45\x1c\x66\x7f\x49\x59\x6c\x3d\xce\xb3\x09\x93\xb1\x42\xf9\x99\xc3\xc6\x0e\x4d\xf6\x40\x1c\xec\xcf\x72\xae\xe8\x29\x73\x5e\xd2\xf5\x2e\x73\x4a\xc4\x28\xda\x6d\xc4\x4a\x6e\xad\x6d\xed\xea\x75\xc5\x4b\x6a\x1a\xe8\x95\xb5\x4a\x87\x8e\x35\x01\x71\x30\xb5\xbc\xe8\x7c\xb8\x8c\x14\x65\x83\xb2\x96\xde\xc9\x9e\x0e\x4b\x0e\xb6\x05\xc8\x28\x09\xc9\x2d\xad\x0a\x11\x8c\x7b\x50\x20\xcf\xdb\x20\xc2\x82\x38\xd8\xd5\x2e\x1d\x3d\x2c\xe9\xbb\xed\xbc\x92\xf6\x58\xa4\xd4\xbc\xa8\x76\x4b\x24\xc3\xf9\xee\x04\xdd\xdd\x53\xee\xc1\xe6\x65\x3e\x9f\x6b\xd0\xdc\x0c\xc4\xc1\xd4\xba\x59\xa8\x75\x03\x9f\xcc\x84\xbe\x50\x5c\x40\x42\xf4\x63\xd2\xc9\x9e\xe4\xaf\x9a\xfc\x06\xae\xf8\x68\xfe\x37\xc2\xd1\xbb\x87\xc1\x08\xb5\x40\x1c\x42\xad\x8b\x25\x92\x80\xf6\xf8\xcf\xab\x65\xff\xbb\x83\x02\xd7\xa2\xbe\xd8\xf7\x29\x5f\x7c\xa0\xce\xeb\x85\xad\xbd\xf7\x12\xc1\xfc\x99\xbe\xbd\x7e\xb7\xf7\xce\xac\xd6\x7c\x11\x3f\x1f\xc4\xc1\x8f\xa0\xd5\xc5\x7b\x7c\xa3\x62\xa1\x3b\x68\x80\x39\x3a\x4f\x44\x8e\x67\xfd\x13\x5f\xe4\x4e\xda\x33\x92\xf9\xc9\x2c\x39\xcc\x17\x4b\xd0\x12\x10\x88\x83\xfd\x59\xa1\xe8\xbe\x8a\x54\xab\xa1\x95\x77\x5b\x4d\x54\xd5\x18\x1a\x22\x97\x95\x04\x08\x38\x38\x98\x96\x79\x7f\xe9\x7f\x61\x6a\xc0\xcd\x45\x84\x05\x71\x30\xb5\x52\xa5\xf8\x12\xc4\x7b\xd2\xb7\x39\xea\xef\x5f\xc5\xa8\xd4\x3e\xf9\x36\xf8\x6e\x82\xb0\xe5\x58\xf1\xa1\xf0\xcd\x48\xea\xb9\x71\x68\x3d\x1c\xc4\xc1\xae\x56\xea\xdd\x27\x95\x35\xca\xf9\x93\x36\x2f\x9d\x74\xcb\xa4\x44\x94\x56\x0e\x8a\x4b\x27\x82\xd3\x6e\x9b\x2d\x93\xfc\x62\x76\xab\x50\xe1\x6f\x10\x07\x53\xeb\xc2\x15\x49\x3e\xd9\x9e\x22\xe9\x6e\x2a\x09\xc9\xcf\xfb\x79\xe7\xb1\x23\xb1\x0d\x60\x89\x4c\x71\x97\xea\x5a\x9a\x4c\x3f\xa8\xb1\xf9\x5d\xd9\xfb\xef\x44\x92\xaa\xdb\xce\x33\xec\x53\xa4\x02\x3b\x9a\xa3\x7d\xb8\x07\x59\xb6\x92\x2e\x5e\x84\x0c\xd6\x7b\x41\xf4\x3b\x3c\xc6\xde\xac\xca\xff\x4e\x5f\xa0\x3b\xbd\x2a\xb3\x61\xf9\x39\x60\xe7\xe6\x5e\xcf\x2f\xe2\x79\x8c\x38\xdf\x9e\x7a\x14\xc1\x92\xe0\x8d\xc9\xc6\x01\xd2\xef\x06\x1d\xb0\x44\x12\x50\xe4\xf3\x89\x24\x61\xed\xec\x85\x3f\xd4\x90\x8a\x98\x5e\x36\x55\x30\x94\xd1\x3c\xd9\xa6\xb8\x9e\x92\x5c\xcc\x17\xa1\x53\x3f\x5f\x1b\x62\x55\x43\xff\x2f\xb4\x22\x01\xa9\x7f\xda\xe1\x2d\x6f\xef\xb5\xdf\xde\x37\xe2\x7f\x5b\xc8\xbe\xcc\x3b\x6d\x30\x5a\x7f\x67\x2a\xdb\xc6\x7e\xdd\x7d\xa2\xd1\xaf\x05\xfd\x62\x31\xff\x49\x24\x41\x92\x82\x4d\x64\xc9\x38\x6b\x13\xb6\xa8\x46\x82\x51\xb8\x5a\x3e\x79\xd4\xef\xac\x05\xc7\x25\x6f\xd2\xe7\xfa\x3c\x26\xf8\xa3\x9d\x9b\x3d\xe5\x95\xf9\xd7\x73\x67\x24\xce\x73\xfb\xf2\xa1\xfd\x5f\xc5\xf4\xb2\x31\xe2\x04\xba\xeb\x52\x43\xc7\x14\x22\x91\xfd\x2e\xc9\x2e\x18\xda\x0a\x31\xcf\x91\xf6\x9d\xe1\xfd\xed\xbe\x7c\xb8\x14\x92\xf0\xb9\xb4\x8e\x4c\xa4\xec\x70\x9f\xd7\xbe\xa4\x12\xa6\x37\x51\x1b\x3e\x7e\x62\x2a\x8a\xec\xa2\x6c\x29\x48\x09\x72\x7f\xf7\xb9\xd2\x82\x73\xfd\xef\x9b\xd4\x85\x37\x59\xa0\x42\xcf\x63\xf9\xfc\x57\x43\x96\xac\xd1\xbb\x69\xae\xcb\xb7\x73\xf1\xc5\xbf\xef\x5a\xf4\xbe\xbf\xca\x12\xf1\xa6\x86\xd2\x72\xe0\xef\x9b\x74\x81\x37\x39\xd1\x5b\xda\x45\x9f\xb8\x57\x34\xa2\x77\xf5\x27\x87\x2a\xa6\x1f\x8f\xee\x02\x9a\x65\xa4\x64\x4d\x28\x46\x7d\xd2\x69\xd9\xf0\xb3\xbf\x6f\xf2\x39\xbc\xc9\x12\x82\x9a\xc6\xdc\xf7\xfb\xf8\x98\x54\x6f\x09\xe2\xb2\xf1\xc6\x6a\x0d\xec\xbe\xc6\x6e\x3b\x89\xbc\x4d\xea\x24\xdb\x2e\xcc\x6f\xf8\xfb\x26\x53\xe0\x4d\xca\x93\x14\xa0\x28\xbc\xbc\x8a\x3f\xa9\x1e\x74\xb8\x1e\xcc\x9f\x34\xf6\xdc\xb6\xca\xe5\x37\xd9\x3b\x9e\xc4\x65\xd6\xd6\xfd\xe4\x90\xbf\x6f\xb2\x16\xde\xe4\xe4\xb3\xa4\x1f\x4f\x3d\x3c\xa5\x17\x13\xb0\x90\x97\xd3\xab\x1e\x88\xf5\x72\xd6\x13\x11\xfa\x13\x66\x46\x7e\x64\x31\xdc\xca\x30\xff\x6f\xde\xf6\x40\x43\xf1\xfc\xc3\x6d\x71\x84\x13\x4d\xa4\xd6\xd7\x8c\x56\xb1\x3d\xac\x30\xfc\x1b\x67\xf5\x2e\xeb\xf1\xaf\xba\x93\xea\xed\x17\xb8\x7b\xed\xd8\x01\xd0\x77\xc2\x20\x0e\xf6\x70\x6b\xc2\x78\xf5\xe5\xbd\x74\x0e\x6f\x63\xcf\xe2\xce\x1f\x1b\x71\x19\x3d\xbe\xb1\xd4\x85\x78\x5e\x2f\x16\x23\xcc\x7c\x69\x03\x67\x64\x44\x58\x10\x07\x3f\xdb\x86\x56\x78\x6a\xf0\x8e\x02\xfd\x96\x4e\x31\xfe\x4a\xd3\xea\xab\xb9\xde\x9c\x6e\x8c\x15\x24\x5e\xaa\x9f\x6e\x8d\x5a\x4f\x05\xa1\x29\x39\x88\x83\x3d\xdc\x26\x83\x8d\xe4\xbd\x3f\x79\x2c\xe6\xdf\x3a\x89\x13\xb6\xad\x62\xb0\x8b\x1b\x61\x78\x52\xa4\x65\x68\xdb\x4a\x5a\x19\x55\x75\x1b\x2a\xb7\x05\xe2\xe0\xd5\xb6\x1f\x8b\x85\xf6\x0c\x8c\xe7\xf8\xbe\x92\x6c\xfb\x1a\x88\xd1\x6d\x51\x12\xa7\x4d\x79\xa5\xbe\xe6\x79\x8d\x7f\x94\x8c\x8a\x10\x74\x12\x38\x88\x83\x3d\xdc\x0a\x32\x63\x45\x63\xaf\x8c\x9a\x39\x73\x88\x34\x4a\x3c\xa9\x95\x91\x3b\x1d\x58\x78\xbc\x65\x99\xfa\xc6\x72\xea\xe3\xc3\x27\x37\xba\x10\xfb\xfd\x20\xee\x9f\xc2\x11\xff\xf7\x7e\x7e\x81\x85\x42\xc0\x1d\xf7\xbc\x59\x71\x23\xe4\xbc\x7d\x83\xa3\x6b\x1a\x2d\x76\xf1\x03\x76\x94\xc6\x0a\x5f\xb1\xe5\x1f\x9c\xe8\x8b\x1a\x7f\xf9\xdd\xac\x91\xe7\xe5\x80\xf8\xf5\x20\x0e\x66\xd6\xd7\x08\x3e\x29\xa9\x97\x93\x96\xfd\xb2\x29\xa6\x92\xf6\xcd\x75\x3f\x54\xca\xd9\x25\xd2\x0a\x75\x84\x9f\x9a\xe5\x14\x4d\xbc\x83\x36\x65\x41\x1c\xcc\x2c\x19\x5f\xc7\x3b\x9f\x3e\x05\x1c\x74\x84\xde\x7a\x37\x3f\x40\xc0\xec\xba\xa1\x86\xa9\xe8\xa0\xdd\x85\xd4\xc5\xc8\x47\xc1\xee\x82\x84\x08\x0b\xe2\x60\x0a\x18\x3f\xa9\x1f\x6a\x1b\x91\xfc\x4e\xe2\x51\xcd\xd9\x55\x38\x98\x23\x29\xff\x23\x52\x81\xdd\xef\x55\x6a\xfd\x9a\xbb\x42\x97\x3c\x94\x9d\x00\xe2\x60\x61\x4b\xd4\x8b\xfd\x2d\x05\xc4\xae\xb3\xb2\xb5\xe0\xc9\x17\x76\x09\x2c\xd0\x6b\x89\xfb\xa7\x7c\x34\xb0\x0d\x62\x48\xff\xa4\xc2\xef\x86\x08\x0b\xe2\x60\x66\xd9\x91\xed\xc8\xf5\xfa\x3b\xa8\xd4\x4a\x1c\x4e\x66\x7b\x9b\x63\x1f\xca\xd6\x7f\xda\x21\x26\x19\xe4\xb7\xd5\x7c\xe7\xf2\xe7\x5e\x32\x54\x70\x1d\xc0\x21\x0e\x9b\xe4\xbc\xd8\x7e\x3f\xe0\xc9\x7a\x5e\xad\xc9\x07\xaf\x7b\x9c\x15\x02\x83\x1f\xdb\x8b\xdc\xbe\xc4\x4c\x71\x8f\xea\x51\x49\x65\x56\x8a\xdb\x59\xf2\xcb\xdb\xa5\xc5\x93\x12\xd0\x97\x23\x20\x0e\xa6\x16\xb6\x9c\xbd\xad\x7a\x0c\x95\xd8\x6b\xfb\x48\xc3\x25\x29\x2c\x2a\x9d\x2e\x35\x97\xa3\x06\xe5\x47\x92\x72\x64\x11\x33\x57\x39\x46\x10\x61\x41\x1c\x4c\xad\x48\xe4\xd5\xa0\x87\xd9\x11\xf4\x33\x4f\x51\x0b\x52\x91\x85\x65\xf9\x15\x15\xeb\x2d\xee\x4a\x2f\xb1\xc6\x6b\xcf\xfd\xfc\xc3\xa5\x8c\x08\x0b\xe2\x60\x0e\xf4\x97\x0c\xc5\x10\x1e\x7d\xf2\x76\xe1\x95\x93\x13\x28\x52\xe8\xcb\x60\xc5\xbc\x49\xb3\x52\x10\xe3\x10\x2a\xbf\xf7\xe4\xd8\x1c\xaa\x6e\x0b\xe2\x60\x61\x73\xef\x0f\x16\xa6\xbd\x10\x0d\xb6\x6d\x70\xbf\x44\x9c\x57\x1e\xd1\x3b\x92\x25\x3b\xb1\x9f\xbc\x46\x26\x46\xaf\xb7\x47\x2b\x03\x1d\x68\x00\xe2\x60\x6a\xf9\xed\xa9\x1a\xe4\xe5\x89\xff\x8a\x20\x8d\x22\xa1\x78\xa8\xf1\xd5\xef\x61\xfa\x55\xb2\xc0\xe1\x68\x0d\x7b\x72\xd3\x7d\xd4\x2a\xa8\x68\x2e\x88\x43\xa8\x25\x7c\x21\xb5\x40\x33\xa8\xf3\x6a\x5d\x12\x1f\xa3\x6f\xcf\x7c\xa4\x9b\xe6\xd4\xf0\x4b\x2b\xff\xa4\x4a\x1a\x37\x27\x93\x38\xe2\x7a\xef\x50\xad\xc5\xae\xab\x0d\x36\xf4\x09\x36\x88\x83\xa9\x75\xfa\xa3\x6a\x21\x85\x04\xd7\x07\x3d\x5f\x08\x95\x58\xc5\x9e\x9b\x5b\x5f\xac\x83\x83\x65\xcc\xfd\xcd\x8b\x17\x5b\x0f\xf2\xd1\xa0\x5e\x05\x71\xf0\x45\x1f\x7b\x36\x4d\xf9\x9f\xc2\xf9\x12\xf8\x26\x9a\x58\x43\x33\xf8\x18\x75\xd1\x43\xe1\xcc\x7f\x2c\x04\x82\xfe\x70\x56\xf9\x61\x42\xe5\xe1\x41\x1c\xcc\x81\xd3\x2f\x2f\x7a\x65\xb1\xe3\x4c\xd3\x7c\xb7\xd2\x0d\x1f\x89\x3c\x9e\x4c\x94\xc4\x27\x99\xa3\x6e\xd8\xc0\xfc\xf2\x6a\x7f\x3a\x19\xfa\xde\x0d\xc4\xc1\xdf\x21\xfb\xb2\x67\xd8\x2c\xff\x4c\x0c\xeb\x64\xb3\x87\x68\x1c\xab\x50\xf5\x16\xc4\x16\x1c\x91\xca\x4e\xd7\xa8\xa6\x10\xe2\xa8\x41\x75\xdc\x41\x1c\x4c\xad\x26\x4d\xda\x3f\x62\x62\xfe\x27\x15\x7d\xe5\x7f\x84\x9f\xbf\x15\xad\x74\xc2\xd9\x88\x57\xf1\xee\xeb\xff\xa3\x29\x58\xb3\x47\x6d\x83\x50\x0b\xc4\x21\xd4\xd2\xbd\x90\x5a\xa0\x99\xf2\x79\xb5\x6e\x70\x09\x99\xae\x4b\x9f\x29\x4e\x7c\xcf\xc2\x63\x2b\x3a\xa6\xa2\x14\x7a\x33\xd8\x20\x52\x2a\x3a\x6f\x98\xb3\xd2\xce\x4a\xd1\x89\xf8\xf9\x20\x0e\xfe\x41\xca\x30\xc6\xda\xee\xac\xba\x23\xcd\xf3\xc8\xdf\x45\x47\x33\xf7\x9a\x3e\x56\xbe\x41\xf2\xdb\xf7\x22\x4e\x67\x46\x0e\xe7\xec\x83\x92\x9f\x40\x1c\x4c\x2d\x14\xd1\x4b\xb9\xc9\x84\x54\x36\x21\xe3\xbf\x91\xed\xfd\x6f\x50\x90\xb9\x1b\x65\x67\xfb\x7b\xaa\xbd\x9f\x34\xfe\xda\x1c\x77\x08\xcd\x89\x40\x1c\xcc\x01\xb1\xe8\x9c\xc3\xb7\x61\x4f\x88\xb4\xc8\xa7\x99\x33\x87\x3e\x8a\xcb\x95\x28\xd6\x10\x97\xac\x86\xfa\x2c\x9a\x94\xa0\x85\x7e\x81\xce\x52\x04\x71\xb0\xb0\xbc\xbf\xc4\x32\xa9\x49\x6a\x26\xb2\xbf\x1b\x53\xfa\x99\xa9\x46\x36\xde\xb9\x73\xbd\xfc\x7e\x72\x40\xb6\xf9\x2d\x8b\xb9\xbc\x33\x68\xbe\x09\xe2\x60\x6a\x49\xd8\x94\x8f\xd5\x1a\x6e\xf1\xf0\x0e\x3f\x0a\xe7\x4b\x8b\x78\x51\x17\x92\x83\xfe\xb4\xb3\x22\xfe\x61\x04\x17\x47\x9a\xf5\x28\x05\x42\x2d\x10\x87\x50\xcb\xe5\x42\x6a\x81\xde\x88\xce\xab\x65\x64\x6d\xc4\xa4\x1c\xfc\x35\x6e\xc0\x4b\x48\x30\x25\x5e\xfd\xa4\x1f\x35\xff\x92\xa6\x22\x57\xf2\xf2\x5b\x52\x55\x7e\x92\x42\xa8\x14\x03\x88\x83\xa9\xe5\xcf\x80\xff\xea\x94\xd6\x7f\xee\xa9\x4d\xf0\x23\x29\xc2\x1f\x6b\xbc\x47\x99\x99\x86\xbb\xb1\xa9\xcf\x56\x17\x18\x78\x65\x76\xa0\xfd\x48\x10\x07\x53\x4b\x67\x20\x5f\xbd\xf9\xec\xd1\x1e\xaf\xfb\x0f\x39\x5b\x01\xd5\x06\x0b\x74\x12\x79\x99\xe1\xea\x7b\x77\x4d\x87\x34\xa2\x49\xbb\xa0\xa5\x6a\x10\x07\x73\xa0\x59\xe3\xbe\xdb\x4b\x4d\x03\x6a\xd4\x80\xe5\x4b\x4a\xd6\x1c\x98\xe3\xf2\xc7\x53\x02\xc9\x01\x8c\x1a\x39\xd8\x06\x62\xc2\x53\xf7\xa0\xf5\x7a\x00\x07\x0b\xfb\xa6\x72\x4d\x59\x08\xd3\xc9\x3b\x53\x85\x93\xeb\x30\xde\x63\xb9\x26\xdb\xdd\xac\xc9\xdc\x12\x5d\x93\xe2\x5e\x3f\xba\x96\x70\x33\x22\x2c\x88\x83\xa9\x15\x69\xde\x15\x6f\xc4\xd3\x91\x25\xf5\xe1\x84\xe6\x1a\x41\xc9\x52\x81\xe8\x63\xaf\x7c\xe2\x55\x8d\x1f\x41\x58\xee\xa8\xe2\x09\xdf\x10\x6a\x81\x38\x84\x5a\xcf\x2f\xa4\x16\xe8\xcd\xf7\xbc\x5a\xb1\x9c\xaf\xcf\x0a\xa5\x48\x97\x0f\x5c\x1e\x69\xa3\x64\xa8\x8e\x13\xf9\x98\xdf\x11\x5f\x08\x20\x78\xab\xf0\x1a\x9f\xd4\x68\xf7\x03\xe2\xe7\x83\x38\x98\x5a\x52\xa1\x85\xd9\x28\xb9\x77\x6d\xf5\x3c\xc7\x8f\x71\x3d\xdb\x54\xbf\xdc\xa6\x25\x62\xaa\x66\xf1\xff\xc1\xca\x81\x2d\xfe\x83\x6a\x16\x5a\xf8\x03\x70\x30\xb5\xe8\x76\xfd\x3e\xe1\xa0\x37\xca\x54\xf4\x86\x05\x5d\xcf\xbd\x13\x53\x39\xf7\xcc\xda\xf0\x7e\x9e\xbe\xe3\xdc\x7e\x92\xbc\x33\xee\x1f\x44\x58\x10\x07\x73\x40\x22\x94\xde\x2e\x54\x5c\x32\xdd\xfb\x55\x3a\xba\xe8\x66\x42\x3d\x2d\x05\x52\xda\x27\x1d\x39\x59\xa3\xe5\x24\xac\x21\xc6\x5a\xa8\x82\x38\x88\x83\x85\xf5\xd4\x55\xbf\x6e\x72\x5f\x48\xf7\xf5\x89\xc8\xd2\x2f\x7d\x22\xbe\xd2\x23\xec\xb0\xa8\x97\xf7\x4d\xfb\x5f\xbb\x0d\x84\xbc\x0c\x81\x16\x55\x41\x1c\x4c\xad\xb2\xd4\xdc\x24\x19\xe7\x41\x6f\x3a\xd7\xd9\xd7\x8e\xde\x8e\x35\x84\x0e\xed\x13\x36\x6f\x8c\x97\x99\x9e\x0c\x7d\xf1\x3a\x0d\x61\x42\xa8\x05\xe2\x10\x6a\xa5\x5c\x48\x2d\xd0\x0a\xc7\x79\xb5\x90\x65\x5a\xf2\xeb\xe5\xae\xf6\x4f\xf3\x38\xe3\x12\xba\xd2\x3e\xde\x32\x88\x52\x8e\x7a\x2f\xbc\xd3\x15\x59\x75\xed\xc5\xa0\x12\x74\x1f\x00\x71\x30\xb5\x18\x86\x03\xb8\xc6\xbb\x92\xb0\xa2\x1b\xec\x5d\xec\xb3\x65\x9d\x1c\xc5\xef\x3f\x2d\x55\x60\x1a\xbc\x12\x31\x5d\xa4\x6b\xfc\x0d\x7a\x16\x80\x38\xb8\x5a\x24\x8f\x9d\xb8\xf8\x5d\x43\x0d\x29\x51\x95\x82\x6e\x94\xb1\xc6\x26\x28\xfb\xdf\x9d\xb0\x52\x8c\x7f\x5c\x49\x16\x79\xe8\x05\x9d\xf8\x07\xe2\x60\x0e\xe4\x3d\xfe\x5d\xa3\xba\x4f\xb5\x41\xd8\x59\xf9\x58\x8e\x3d\xee\x43\x59\x5b\xef\x76\xcf\xe5\xce\xba\x12\x3e\xde\xb9\xc3\xdb\x2f\xa1\x9c\x2a\x10\x07\x0b\x4b\xb1\xd3\xa2\x8e\x7c\x8f\x21\x29\x34\x26\xf0\x51\xd5\xa6\x7f\xa7\x87\x23\x19\x66\x92\xf2\x26\xbd\x18\x1b\x77\x95\xe9\x13\x1a\xe8\x9b\x62\x10\x07\x57\x8b\xa6\x7b\xcc\x6c\xf8\xb8\x99\xaf\xe4\xee\xe6\xc8\x9d\x6f\xab\x7a\x38\xaf\x1d\xe5\x43\x3d\xa8\x98\xb7\xbb\x4a\xbc\xc9\x07\xdd\x20\xb5\x00\x1c\x42\xad\xda\x8b\xa5\x92\x80\xd6\xb0\xff\x49\x25\x41\xfa\x0a\x5f\x76\x43\xd6\x8b\x67\x0b\xba\xfe\x60\x51\xf7\x2a\x96\x13\xb1\x91\xa2\x4c\xdf\x40\xed\x09\x66\xcb\xd6\x58\x65\xaa\x28\x8a\xcc\xc7\xbd\xbf\xff\xe4\x10\x69\x13\xde\xa4\x7d\x38\x76\x6a\x9a\x93\x83\xc7\xf1\xbb\xc0\xb7\x97\xf8\x70\xf3\x56\x9e\x0d\x92\xbd\xea\x2d\xad\x5c\x95\x8d\xf2\xf7\xa0\x8d\xfe\xfe\xf7\x4d\x1e\xc3\x9b\x2c\x8c\xb3\x9c\x61\xfd\x61\xc1\x57\x16\x10\x90\x4f\xcf\x91\xb3\x16\xcb\x4d\xb8\xf2\xf2\x44\x91\xed\xae\x86\x18\x8e\x40\xd8\xed\xd9\xff\x66\x71\x11\xd4\x97\xe7\x07\x38\xa6\x84\xe7\x15\xe4\x13\x2d\x87\xeb\x09\x65\xbb\x8d\x1d\xb3\xd9\xf2\xba\xc7\x6e\x22\x19\xb5\x3b\xbf\x2c\x55\x37\x6d\x7b\x8f\xff\x0f\x6b\x6f\x1d\x94\x55\xf3\xff\xff\x03\x12\x82\x94\x88\x22\x29\x8d\xd2\xa8\x80\x22\x9d\x12\xd2\xdd\x21\x28\x5d\x12\x22\x02\x52\x82\x74\x88\xb4\x0a\x28\xdd\x25\x48\x2a\xdd\xad\x02\xd2\xdd\x20\x9d\xbf\xf9\xcd\xdc\xd7\xf9\xdc\xdf\x73\xbd\x67\x96\x19\xef\xff\x1f\xf3\xda\xeb\xec\x3c\xf6\x3a\xe7\xec\x79\xee\xae\x37\xb4\xfa\x18\xc0\xc1\x06\xf8\x89\x12\x7a\x64\xd9\xd9\x8e\x19\x7e\x44\x4c\xd0\x4e\x70\xd9\xef\x4d\xbd\xae\x85\x4c\x11\xfa\xef\xfb\xab\x58\x6c\x0b\x41\xf5\x22\x50\x66\x14\xc0\xc1\x77\xa5\x9d\xcc\x27\xcb\x1d\xd9\x23\xbd\x7e\xd1\xb8\x1e\x27\x66\x60\x7b\x60\x70\x7a\x9f\x7b\xe5\xf1\xbd\x62\xfa\x1a\xff\xd7\x0e\x74\xd0\x11\x01\x20\x0e\x7e\xbc\x71\x01\x07\xeb\xe4\x9b\x38\x4b\x8b\x17\x57\x9f\xcd\xea\xc8\xbb\x51\x63\xba\x38\x54\xd8\xc6\xd7\x6f\x3e\x6f\x7c\x51\xe3\xd9\x80\x87\x28\x0b\xe2\x60\x65\xc3\x86\x2c\xab\x1f\x2c\x99\x18\xaa\xe3\x98\x7e\xb0\x44\xa3\xe3\x0b\x89\x51\xe7\xa0\xf8\xfc\x64\x4d\xcd\xd9\x66\x6d\x35\x12\xb3\x1b\x51\x16\xc4\xc1\x06\x38\x2d\x63\xf6\xfc\xcf\xd1\xba\x03\xca\xce\xe4\xe0\x95\xdc\xc8\x57\x87\x74\xf6\x0e\xca\xe4\x18\x37\xde\xce\x4e\x37\xbb\x0a\x37\x40\xab\xfb\x41\x1c\x62\x80\x0f\x9c\xeb\xde\x01\x1a\x33\xc8\x6a\xbd\x0d\x6e\x4e\x38\xd4\x97\x09\x0a\xcc\x27\x99\x9b\x1e\x19\x89\x0c\xec\x89\xbc\xf3\xc3\x85\x5a\x5d\x93\x82\x38\xfc\x82\xb9\x60\x26\xe2\xf2\x41\x1c\x4c\x2d\x43\x0f\x79\x07\xd7\x61\x01\xb1\x8e\x9c\xce\x34\xd6\x5f\x22\x49\x15\xc1\x81\xf1\x8b\xd1\x1a\xed\xaa\xbc\x2f\xd7\x3d\x74\x2f\x31\x23\xca\x82\x38\x98\x5a\xbd\xce\xb7\x94\xf5\x5f\xfc\xb4\xc1\x40\x5d\x0e\xf9\xe2\x4c\xb2\x97\x69\xfc\xd3\xa0\xf1\xf0\x95\xe1\xeb\xa2\x4b\x6c\x7e\x58\x5e\x6e\x50\x68\x12\xc0\xc1\x1c\xa0\x98\x53\x6a\xf9\x4d\x23\x9c\x7b\x7f\x77\xc8\x8b\x74\x10\xb5\x86\x96\xe9\x49\x50\xaf\x48\x56\x01\x93\x80\xf5\xa7\x4c\xae\x46\x68\xc3\x63\x10\x07\x2b\xcb\x57\x67\x38\xac\x31\xc1\x13\x65\x9f\x68\xb3\x5c\x30\x60\xad\x65\x1e\xd3\xdd\x5a\xe4\x15\x6a\x9d\xae\x18\x60\xf6\xae\x6f\x86\x04\x51\x16\xc4\xc1\xd4\x7a\x60\xff\x47\x9a\xa0\x74\x33\x10\x3b\xf4\x89\xe1\xe7\xcf\xfc\x09\x07\xcc\x41\xc1\xac\x35\x5f\xb4\xc5\x4d\xbc\xa8\x39\xbe\xa8\x2c\x23\xd4\x02\x71\x08\xb5\x36\xce\xa5\x16\xe8\xbf\x11\x59\x2d\xc3\xb8\xa4\x53\x25\x7f\x67\xbf\x5b\xcb\x23\x6d\x5d\x4e\x38\xb6\xb3\xc5\xf9\xf1\xbf\xca\x65\x8d\xe7\xc7\xbe\x9b\xd9\x18\xb7\x43\x7b\x9a\x81\x38\x98\x5a\xe4\xf4\xdf\x4e\xaa\xdb\x42\x63\x2a\x37\xbd\x85\x9f\xff\xae\x6a\xc2\x53\x18\x30\x69\x77\x14\x1a\x9a\x5d\x2e\xbb\x59\x48\x20\x09\x1d\xc7\x04\xe2\xe0\x4b\x20\xdd\x2e\xc4\xf1\xee\x8a\x5c\x11\x2f\x2d\x76\x95\x30\xd5\x50\xaf\xc5\xde\x0e\x30\x7b\x84\x2b\x11\xd5\xd5\x71\xe2\x69\xfd\xec\x37\xb4\x04\x12\xc0\xc1\x1c\x98\x55\xf0\x1e\x98\x92\xc7\xeb\x10\x30\xe7\xa9\x4e\x25\x3e\xf3\x7f\xae\x21\x80\xc1\x21\x2d\x31\xfb\xb9\x43\x6f\x19\x23\x4f\x1c\x72\x00\xc4\xc1\xca\xea\x5d\x20\x5d\x7c\xd9\xe4\xae\xa7\xec\xde\x2e\xa2\xc1\xec\x8f\xf7\x36\xf5\x93\xc0\xb5\xc8\xcf\x8a\x2d\x77\x0c\x49\xf7\x78\x9c\x1d\x11\x65\x41\x1c\x4c\x2d\x6e\xcf\xb3\xc6\xef\x4b\x83\x55\xbd\xd3\xdd\x4f\xee\x95\x6b\x7f\xcf\xaf\x2b\x5d\xec\x19\xea\x7b\x76\xe8\x81\x49\xd6\xb5\xb7\x1d\x8b\x50\x0b\xc4\x21\xd4\x3a\x3e\x97\x5a\xa0\xaf\xfc\xff\xeb\x48\xae\x30\x36\xab\xbe\xcb\x7f\x52\x3f\x3e\xb3\x1d\x76\xbd\xfb\xfd\xd9\x30\x1d\x59\x4a\xc4\xd0\xc3\x04\xa3\x69\x7d\xbe\xc7\xff\x77\xb4\x2f\x88\x83\xa9\x95\x63\xff\x7c\x7c\xd3\x9d\x3f\xa8\x2d\xfc\xd7\xb3\x77\x58\x93\x51\x56\x98\xb9\x68\xc2\x0d\x9c\x3a\x37\xf1\xc5\xb5\xd5\x4b\x42\xa0\xf0\x13\x88\x83\xaf\x57\x6d\x46\x5f\x61\xd5\x6a\xb1\xa9\x49\xec\xb3\xad\x64\x9b\xdb\xfd\xe8\x4d\x6c\x17\x74\xe4\xa7\x1c\x8a\x11\xf7\x99\xfa\xc7\x21\x39\xb4\x5e\x15\xc0\xc1\x1c\xd8\x08\xc6\x8a\xab\xf9\xf4\xcd\x7a\x91\xd0\x55\xac\xd5\x64\x93\x0b\x7d\x0c\x47\xe2\xec\xc5\x1b\xbf\x35\x6b\xa2\x06\x3d\x36\x66\x3a\x44\x59\x10\x07\x2b\xfb\x24\xbc\xab\x4a\x18\x17\xd3\x55\x06\xe3\x90\x2a\x63\x81\x57\x21\xec\xcb\x89\x71\x05\x56\x00\x3a\x8d\xe0\xb7\x5d\xec\x24\xad\x22\x28\xf3\xf1\x86\x30\x7e\x00\xa5\xd2\xb0\x3e\xd3\xe1\xfd\x0f\xbe\x71\x5b\x0b\x7d\xa9\x4d\xff\xe8\xdc\x82\x67\xf5\xab\xd3\xfa\x79\x2d\xe1\x74\xff\xce\x7c\x1c\x6e\xd7\xbb\xaa\x51\xa2\xd6\x57\x9a\x0a\x95\xd3\x2b\x9a\x4c\x27\xe6\xa1\xeb\x3d\xf0\x10\x4e\xcb\xeb\xfb\xe2\x2a\x9f\xdb\xba\xf8\x2f\x94\x8d\x7b\xa2\xd9\xdb\x0b\x95\x3e\xeb\x4a\x97\xf5\xd0\x92\x03\xca\x0a\x5a\x6f\xa5\x9b\xf1\x18\xce\x5b\xab\x94\xf7\x16\x9f\x3c\xf3\x61\x99\x0f\x50\x65\xe4\xcc\x47\x7e\xa5\x4d\xdf\x8b\x03\x96\x28\xa1\x79\x1e\x01\x35\xdd\x16\x27\xc3\x48\xc2\xcf\xa7\xaf\x9e\x05\x6a\xef\x57\x78\x25\x68\x19\x71\xff\x3b\xb1\x55\x30\xad\x40\xa2\xb5\x34\x4a\x33\xac\xbc\xc3\x55\xf1\x30\x22\xa9\x9d\x8c\x65\xbf\x87\xe5\xda\x52\xb1\xda\x76\xdc\x37\xe9\x41\x28\xf3\x01\xaa\xf9\x4f\xe6\x43\x18\x9e\xf9\x28\x55\xf9\x38\xea\x53\x74\xed\xdb\xc2\x9f\x37\xbb\xd6\x2f\x0e\x34\xae\x91\x2e\xce\x7f\xd7\xd2\x96\xa5\xea\x13\x09\x6b\x47\xeb\x56\xfe\xeb\x87\x5c\x61\xa4\xcc\xc7\x60\x13\x61\x8f\x44\xb2\x76\xa9\xe5\x1f\x86\x95\xa3\xef\x05\x0a\xa9\x03\xdf\xc5\xdf\xca\x14\x78\xa2\x63\xf6\xb5\x05\xd5\xc6\x5f\xf8\xfb\x26\x91\x32\x1f\xf4\xce\x68\x77\xb3\x1a\x84\xc9\xdd\xf4\x6f\x59\x6b\x3a\x51\xf4\xa6\xbd\xec\x91\x71\x24\x9e\xba\xfa\x8c\x4c\x90\xdc\xac\x41\x7a\xe1\xef\x9b\x44\xca\x7c\x1c\x19\xab\xea\x1d\x36\x98\xb7\x1c\xdf\xef\x4b\x8d\x4d\x18\x8f\x5e\x20\xfb\xde\xa1\x92\x91\x89\xc6\x6d\x72\x75\xca\x17\xad\xf7\xcb\xdf\x37\x89\x94\xf9\xd0\xc5\x13\xb6\x8e\x5e\x58\x9d\x61\x49\x4b\xdb\x20\x6e\x58\x64\x0d\x7e\x39\x1a\x4f\xf3\x40\x49\xf1\xc1\x27\x0c\x63\x9d\x4f\x12\xff\xc1\x69\x9c\x48\x99\x8f\x4b\xcf\x19\x4f\xf9\x50\x7e\x31\x61\x0c\x93\xf5\x9a\xd4\x32\x5e\xd6\xb7\xd9\x16\x31\xb6\xb0\x58\xef\xc7\x31\x5a\x40\xfd\x9d\x63\xf4\xf7\x4d\x22\x65\x3e\x5e\xbe\x22\xc4\xfa\xad\x80\xca\x6a\x32\xb0\x3a\xab\x4c\x8a\x7e\x59\x78\xcf\xb6\x6e\xb2\xfe\x1b\x7b\x9b\xd5\x4f\xe1\xb0\x38\x1b\xf9\xbf\x6f\x12\x29\xf3\xa1\x3e\x1e\x10\x21\x70\xc7\xfa\x3d\x0f\x3e\xe5\x8f\xc3\x30\x8e\xc1\x42\xe9\x32\xfe\x69\x0e\x19\x41\x72\xbc\x9b\xc2\xe4\xb1\x93\x1e\xff\xcd\x6b\x19\x68\x28\x22\xdf\x85\xee\x51\x4c\xdd\x28\xb9\xea\x36\xc9\x51\x35\x5a\xfe\xe9\xdd\x47\x74\xfc\x07\xec\x8e\xfc\x77\x0e\x4a\x50\xea\x9d\x36\x82\x5d\xe2\xa0\x5d\x96\x41\x1c\xec\x2e\x94\x98\x4a\x67\xfd\xeb\xe1\x55\xd1\xe3\x9e\x90\x6d\x72\xc6\x34\xcb\xad\xed\x14\x94\xeb\x33\xca\x9e\xaf\x3c\x2b\xad\xa3\xbf\xcc\x88\x23\xca\x82\x38\xd8\x5d\x68\x6a\xb3\xca\xee\x6b\x81\xce\xb8\x85\xa5\xa5\xf3\x58\x1f\xb6\xd5\xd8\xbc\x92\xda\x3a\x81\xa4\x01\x4a\xe1\x4b\xb1\x1b\x66\x5b\xd0\x37\x2e\x10\x07\x3f\x2c\x84\x0b\x47\x66\xa9\x97\x7d\xb5\x75\x1f\xf3\x77\x49\xca\xec\xa7\xbb\x78\x52\x3d\x7c\x9d\x2d\x37\xa8\x9c\xef\x8e\xd4\x53\xcd\x42\xf1\x4b\x10\x07\xeb\xdb\x82\xa8\xd9\x4a\x0c\xa1\x8e\x0b\x83\x57\xc7\xe2\x93\x3e\x9a\x3c\x36\x27\x75\x1b\xd8\x9f\xf5\x6c\xa3\x58\x5c\x18\x63\xac\xcd\x80\xbe\x6f\x80\x38\x1f\x11\xd4\x7f\x97\xad\x1c\x49\xa7\xd3\x2c\xfc\x63\xbc\xd9\x6c\x57\xa5\xa6\xe1\x88\x93\xcb\xaf\xdb\xfa\x64\x3d\xd7\x71\x89\x2f\xf1\xb5\x44\x0c\x09\x1b\x22\xf3\x01\xe2\xfe\xd9\xe3\x41\xf8\x5c\x99\x0f\xd0\x3f\xee\xff\xf8\xc4\xf5\xe4\x3e\x47\x7e\xce\x48\xe1\xab\x1f\x2f\x69\xea\x9b\xf2\x4b\x75\x15\x89\x62\x49\x68\x9e\x88\x6c\xef\xbe\x22\x21\x93\x67\x6f\x85\x3e\x71\x01\x38\x98\x59\xf8\xca\x93\xc1\x85\x24\x35\x81\xce\x9f\x5c\x9a\xd5\xd0\xe7\xe6\x4e\x96\xd4\xaa\xb5\xa4\x0d\xdd\x1e\xfb\x44\xe2\x0e\x4f\x2c\x41\x66\x81\x38\x98\x59\x5e\xb3\x6f\xbe\x1c\x9a\xbd\x17\x7c\x30\xfe\x56\x46\xdc\xad\xe8\x03\x47\xc8\xa9\x10\xdb\xe5\x77\x72\x5a\x3f\x24\x6e\x3f\x27\x7c\xdd\x8e\x28\x0b\xe2\x60\x66\xbd\xa2\x40\xc1\xef\x22\xf8\x65\x59\xe3\x39\x51\x2a\x45\x36\x37\xbc\xa3\xfa\x85\xfa\xbb\x93\x4a\x08\x17\xdd\x36\xa6\xf7\xdd\xde\xff\xdb\xbc\x18\xc0\xc1\xfa\x16\x27\x51\x21\x28\xeb\xca\xdd\xe9\x17\x6c\xe5\xd2\x95\x7d\x1c\x4f\x0d\xf7\x6b\x2f\x1f\xae\x71\xdc\x95\x3d\x43\x6b\x7a\xed\xe9\x6d\x8b\x28\x0b\xe2\x60\x66\x29\x1a\xb4\xc7\x88\x5f\x71\xd0\x7e\x73\xeb\xe1\xdb\xa5\xe8\x99\xd2\xa7\x63\xbe\x5f\x8a\x6f\x68\x7e\x7c\x7c\x23\xab\x51\xe9\x81\x51\x26\xe2\xd1\x19\xc4\x21\xce\x85\x3c\x5f\xe6\x03\x74\x67\x45\x56\x8b\x74\x7b\xc2\x9d\x8d\x22\x71\x66\x8e\x25\x4f\xe8\x40\x71\x91\x8a\xec\x29\x6d\xdf\xa8\x51\x6a\x19\xa3\x86\xca\x9a\x7a\x44\x10\x74\x50\x32\x88\x83\xa9\x75\x13\x7f\x82\x8c\xe5\x6a\x55\xd8\x9f\xdb\xfb\x69\x6c\x23\x82\x42\x3c\x68\x34\x38\x6e\x01\x98\xaf\x77\xf2\xf8\x83\x3b\x32\x7f\x4d\x20\xca\x82\x38\x98\x5a\x9f\x33\xac\xa2\x4c\x79\x64\xa3\x9d\x92\x8d\x35\x06\xae\x7b\x90\xa3\x26\x5d\xaf\xe3\x11\x68\x33\x0e\x90\xb0\x41\xb9\xe4\x4a\x56\x06\xcd\xea\x02\x38\xf8\x06\xd6\xbd\x95\x6d\xf3\xab\xf2\x7a\xc5\x7b\x57\x93\x49\x69\x7c\x18\x73\x26\x5c\x14\x72\x75\xde\x8d\x27\xa6\xda\xdb\x5f\xbc\x4f\x04\x9d\x9d\x05\xe2\x60\x7d\x5b\x48\x8a\xc1\x55\x34\xbc\x17\x3a\x68\x36\xf1\x90\xf5\xb6\x05\x7f\x60\xd7\x1b\xed\xab\xa9\xb7\x1e\x1c\x4f\xc7\xd2\x70\xde\xdf\x83\x4e\x8b\x06\x71\x30\xb5\xc8\x2e\x30\x34\xf6\x5f\x0d\x69\xac\x5f\x59\x15\x63\x3c\x3d\x38\x1b\xb3\x75\x0c\x58\x43\x6f\xd2\x64\xdd\xf0\xb8\x3f\xd8\x4b\x19\x0c\x1d\x16\x02\xe0\x10\x6a\x9d\x2f\xf3\x01\x7a\x82\x42\x56\x4b\x43\x1f\x37\x56\x21\x7f\xdd\x3a\xa7\xe6\x51\x77\x61\xe6\xe2\xde\xf3\x68\x7d\x85\x53\x09\x25\x96\x13\x43\xa1\xe2\x2e\x1f\x32\x28\x49\x03\xe2\x60\x6a\x3d\xdb\xb9\xa0\x14\x8a\x79\xcc\xed\xe0\x4c\xed\xff\x69\xf9\x70\x4c\x89\xc6\xb3\x20\x54\x54\x39\x32\x3e\x71\xf3\xa9\xdd\xf4\x09\x74\x06\x09\x88\x83\xaf\x3f\x36\x4c\x96\x4f\x78\x68\x61\xe9\x80\xb9\x4d\xf2\xf4\xa4\x7f\x36\x42\xca\xe6\x22\x09\x77\x46\xcd\x6f\x9a\xdf\x84\x9f\x04\x45\xa0\x6d\x3d\x41\x1c\x4c\x2d\x22\xf2\x5c\x4c\x7c\x4e\xd7\xe3\x0e\x19\x15\xd1\x65\x0e\xb6\xcf\x3f\x93\x9f\xe2\x2b\xbc\x3c\x36\x0d\x2a\x53\xf7\x72\xa2\x8f\x1f\x86\x36\xba\x00\x70\xb0\xbe\xdd\xdf\xc7\x76\x60\x51\x2e\x57\xa7\xfd\x3c\x72\xcc\x44\x7f\x24\x9a\xf7\xe0\x33\x2d\x1a\xeb\xb3\x3c\xd1\xb5\x16\x06\xa5\xc1\x23\x09\x44\x59\x10\x07\x53\x8b\xd3\x5e\xe5\x47\x9a\x23\xd7\x65\x43\xd1\x67\x27\xcd\x8d\x9b\xc2\x75\xa7\xc9\xd3\xab\x2c\xa2\x52\x53\x5f\x22\xf5\x02\xde\x2f\x3e\x83\x76\xa6\x01\x70\x08\xb5\xce\x97\xf9\x00\x3d\x29\x23\xab\xa5\xa6\xe9\xd1\xf9\x79\xe0\x06\xf9\xf6\x4d\xc5\x62\xb4\x54\x8a\xfe\x65\x93\x60\x1f\xd5\x38\x07\xdc\xbe\x23\x69\x77\x97\x3f\x95\x6d\x88\xcb\x07\x71\xf0\xed\xb4\x92\x58\xc3\x13\xbb\xdd\x3b\xa6\xe6\x50\x8b\x1f\x1d\xd3\xee\xfe\xe2\x15\xdc\x41\xd3\xe2\x70\x49\x79\x5d\x99\xe2\x91\x16\xaa\x03\x6d\x1d\x01\xe0\x60\x6a\x1d\x2f\x6e\xe1\x78\x3d\xbc\x86\x2d\xfd\x32\x5d\x88\x40\x39\x76\x28\xfc\xb2\x09\xa6\x71\x09\x8e\xb6\x6b\x74\x5d\x5a\x8c\xc3\xff\x1d\xa0\x06\xe2\x60\x6a\xf1\x53\xe9\xb5\x8e\xfb\xb2\x10\x9d\xca\x3c\x50\x21\x58\xb8\xad\xa6\x38\x2d\xf6\xce\xa0\x2e\x5b\xcf\x1b\x75\xdb\x6f\xc3\xa7\x07\x8a\x13\x81\x38\x58\xdf\x26\x2b\xa6\x0b\xa2\x8c\x25\xf4\xa5\x68\xe3\x5f\xc2\xd2\xc5\x1e\xc3\xf4\x2f\x6e\x2e\xbe\xad\x4d\xa2\xd8\x7b\x29\x4a\x1f\x5f\x21\x0c\xda\x3e\x04\xc0\xc1\xd4\x7a\xcc\x93\x19\xa6\x9f\x22\x74\x2b\x8c\x9e\xbe\xb2\xd5\x44\x56\xea\x25\xb3\xe0\x2a\x47\x73\xb9\x47\xd4\xfc\x8d\xee\x14\xf7\x52\x69\x84\x5a\x20\x0e\xa1\xd6\xf9\x32\x1f\xa0\x37\xa2\xff\xb1\x7d\xc8\x23\xb4\xc0\xfa\x16\x06\x81\xe0\x2c\xb6\xa8\xa4\x35\x55\x94\xbe\xa0\x6c\x8c\xa6\xf7\x81\xc4\x8b\x2b\x37\x9d\xdd\x93\x79\x99\x20\x07\x00\x1c\x4c\xad\x15\x59\x53\xba\x95\xb8\x8b\xfa\xde\xd2\x9d\x87\xe4\xd8\x95\xd2\x7a\x8d\x1b\x25\xe8\xb8\x44\x77\xe6\xbe\x6a\xe3\x4f\x5f\x65\x1c\x87\x76\x27\x02\x70\x30\xb5\x26\x3a\x3c\x71\x83\xfd\xef\x4e\x4e\x8b\x90\xf4\xda\x5a\x56\x48\xcd\xd9\x8e\x6c\x63\xd1\x7e\x11\x9a\x97\xd5\x5e\x2d\x5e\xf3\xc6\x46\x94\x05\x71\xf0\x15\x6f\x6e\xcf\x5c\xf0\x8f\x5d\x2c\xf8\x3a\xb7\xeb\x03\x1f\x7c\x0c\x9b\x79\x63\xaa\xd8\xb8\x5e\xb6\x97\xc8\xc6\xcd\xee\x7b\x26\x96\x03\xad\x78\x03\x70\xf0\xd0\xc3\xf3\x98\x59\x77\x26\x94\x94\x99\x15\x07\x05\xc3\x09\x12\x39\xc6\x12\xff\xbd\x78\xf3\xb6\xdb\xcc\x62\x86\x51\x4b\x06\x1f\xef\x41\xa1\x07\x00\x07\x53\xeb\x6e\xdc\xdb\xbc\x86\xb5\x9b\x7a\x56\xcd\x65\x6e\xde\x96\x1a\x63\x41\xcc\x46\xc9\xe5\x91\x28\xf2\xb2\xfc\xb3\x6f\x3d\x82\x67\xf5\x10\x6a\x81\x38\x84\x5a\xe7\xcb\x7c\x80\xde\x7c\x91\xd5\xfa\x4c\x3e\x4b\xed\x2f\xf2\x24\xd6\x69\x8f\x5b\xac\xbe\x77\xe7\x53\x38\x7d\x4d\xa5\x64\xf7\xd7\x5d\x86\xa1\x37\x6f\xde\x52\x8b\x42\x0f\xc6\x20\x0e\xa6\x96\x6b\xd3\x1e\xa9\xee\x93\xb0\xf6\x4f\xba\xfd\x18\x4c\x91\xe1\xa6\x96\xab\xf8\x5d\xdf\x13\xa9\xd1\x0a\xd3\x6e\x67\xfe\x26\x6b\xc5\x84\xf6\xf9\x00\x70\x30\xb5\xf0\xde\x5e\xa9\x94\x5a\x0a\x22\x76\xeb\x8b\x96\x95\x13\xe0\xf5\xb2\x3f\x33\xf2\xff\x39\x10\x26\x79\x8a\x42\x22\xb6\x7e\x64\xa2\x8b\x28\x0b\xe2\x60\x6a\x29\x30\x4f\x26\x2f\x96\x8d\xe5\x26\x12\xda\x7d\xfd\x80\x2f\xba\x9e\xf8\x88\xba\xaa\x77\x6f\x80\x98\xec\x6b\x6b\xd3\x5c\xc9\x99\x18\xa2\x2c\x88\x83\xf5\x6d\x8e\x6a\x65\x90\xa7\xa9\xf6\xc7\x8d\x7c\x7c\xbb\x88\xdb\x9f\x3a\x7d\x71\x08\x87\xcb\x5b\x38\xa2\x99\xab\x35\x9e\x73\xeb\xd3\x42\x1b\x3d\x83\x38\x98\x5a\x3d\xc7\x3a\xd3\x1c\x3b\x78\xd7\xb2\xa4\x27\x30\x8a\x23\x72\x8a\xe6\xd9\x24\xea\x1c\xe2\xd5\x6b\x02\xc4\x57\x3e\x36\x60\xd4\x1c\x22\xd4\x02\x71\x08\xb5\xce\x97\xf9\x00\xcd\x70\x20\xab\x25\xca\x25\x7a\x4a\x53\xbf\x80\x9d\x16\x38\xd3\x84\x15\xd4\xa6\x90\xe1\x50\x5b\x29\x61\xf4\xd6\x38\x8b\x39\x93\xc2\x50\x3d\x7b\x00\x4a\xd2\x00\x38\x98\x5a\x0b\xb3\xe2\xf1\x1a\xee\xb6\xad\xa6\xc4\x2b\x4b\x76\xbe\xf1\xde\xa8\x38\x2e\xa6\x22\x4c\x91\x98\x04\xec\x1e\xbd\x0a\x7e\x3d\xe9\x88\xb2\x20\x0e\xbe\x43\x55\xb3\xbe\x80\x81\xe4\x8e\xb9\x70\x23\xe9\x8e\x8d\x71\xab\xf5\x59\x4e\x01\xd7\xf7\x74\xaa\x4d\xa7\x31\xab\x3f\x5f\x8c\x13\xa1\x17\x4f\x10\x07\x53\x8b\x01\x4f\xf0\x07\xce\x9f\x92\xe9\x05\xd2\x81\xf4\x4d\xd6\x17\xd4\x41\xa7\x06\x6e\xdc\x7a\x0a\x92\xd7\xfb\x9e\x7e\xe5\xaf\xed\x87\xd6\xe9\x82\x38\x58\xdf\x76\x5c\x7a\x4c\xc9\x71\x93\xa4\x05\x4d\xb6\x8f\x98\xda\x40\xbb\xf1\xfb\x75\x3b\x2d\xa3\xd3\x4c\x4c\x1b\x23\x96\x24\x41\xf9\x4d\xe8\x1c\x1a\x10\x07\x53\xeb\xc3\xdd\xd4\x21\x6d\x7f\x87\x2f\x46\xf8\x69\x51\x61\x3e\xb2\xaf\x08\xc3\xbe\x4d\x4b\xed\x45\xdc\x19\xf7\xb9\x67\xe2\x7e\x27\x7a\x0b\xa1\x16\x88\x43\xa8\x75\xce\xcc\x07\x68\x0e\xfb\x9f\xcc\x87\x30\x52\xe6\x43\x2b\x4c\xcc\x55\x79\xab\xe6\x6c\x78\xe8\x90\x70\x9c\xef\x21\xde\x4b\x77\x0c\xea\xe9\x66\xd9\x06\x1d\xdf\xee\xdf\xe3\x67\x84\x5d\x7f\x3f\xd3\x87\x94\xf9\xf8\xca\x4f\x30\xc8\xdf\x76\x8f\x0e\xe7\xa7\x94\x4b\xef\xf5\x37\x68\xb7\x4c\x2b\xbd\xec\xee\x5f\xd7\x20\x1f\x20\xae\xba\x54\x64\xfe\x1f\x34\x89\x94\xf9\x18\x36\x74\xb7\xe5\x26\xfb\xad\x42\xc0\xb2\xec\xda\x5d\x35\xfe\x40\xe9\xa3\xd1\x14\x9e\x87\xfc\xe0\xbb\x3b\xb8\xfe\x0e\x1a\x49\xcb\xff\xcd\xe4\x22\xa8\x2f\x91\x07\xb8\x72\x9f\xa7\x93\x77\x76\x24\x4e\xa7\xd6\x8a\xcd\xa5\xde\x10\xb2\xd4\x49\x5b\x1d\x9c\xf1\xc2\x4d\xa7\x6b\x0a\x84\x55\x9f\x48\xad\x11\x12\x82\x38\xd8\x00\x17\x4e\xb5\xc5\xcf\x0e\x73\x8e\x6c\x4f\x10\xda\x59\xe7\xcc\xbb\xe4\xf0\x58\x21\xb2\xa2\x5b\xd2\xd9\x99\x6a\x20\x76\x72\xf6\x90\x02\xca\x0d\x03\x38\xf8\xf6\x21\x52\x59\xa9\xd8\x6b\xdc\x42\xca\x8f\x1a\x50\x89\xc2\xb1\xe6\xac\x7f\x69\xf6\x0f\x98\xaf\xd5\x7e\x28\xcc\x8e\xdd\x3c\xc9\x8e\x85\xb6\x0f\x01\x70\xb0\x01\x2e\x9b\xd6\xe1\xa5\xdd\xb0\xbc\x96\xf4\x38\x56\xb9\xf1\xf9\xaa\xee\xaf\x07\x3e\xc6\xec\xd8\xaa\xe2\xdc\x5b\x0e\x3b\x31\x62\x9e\xd0\x27\x64\x10\x07\xeb\x5b\x7b\xb5\x08\xf6\x06\xd3\x95\xf2\xca\x8b\xa4\xfa\xd5\x37\x16\xc4\x7e\xb6\x6c\x56\x5d\x5c\x35\x2e\x2e\x1a\x2c\x0d\x57\x3b\x79\xf1\x0d\x51\x16\xc4\xc1\x06\xf8\x47\x81\xf7\x28\xc6\x12\xd8\x18\xb5\x9f\x63\xbd\x4f\x30\xe3\xd4\xd7\x5b\x53\x62\x9e\xa8\x37\xd7\x39\xce\x7d\x70\x79\x7f\xe3\x22\x37\x62\x80\x83\x38\xc4\x00\x3f\x5f\xe6\x03\x34\x66\x90\xd5\xea\xb8\x9e\x99\x1e\xc6\xd2\x14\x35\xdf\x89\xeb\xcb\x48\x67\x1e\xc0\x14\x1f\x30\x42\x46\x3b\x4f\x8e\x17\xa1\xc3\x58\xf7\xa2\x19\x3a\x7e\x03\xc4\xc1\xd4\x0a\x79\x4d\xf1\x0a\x7d\xfe\xa8\x2b\xfb\x73\x11\x41\x94\xf9\xbd\xfa\xc6\x96\x4e\xec\xf0\x3d\xc6\x43\xc5\x88\x8b\xea\x5a\xff\xca\x0b\x82\x38\x98\x5a\xcb\xec\x58\x07\xb8\xba\x33\x04\x6e\x0a\x76\xcc\x97\x31\xf0\xad\x1a\x3b\xbf\x66\x50\x2d\xba\x19\x0d\x2f\x0c\x5f\x96\x7f\x54\x02\x9d\x9c\x04\xe2\xe0\x01\x7a\x76\x6b\xed\x5c\x47\x34\xe9\x1e\x7d\x15\x86\x9f\x1e\xdb\x1c\x19\xa9\xe3\x3a\x62\xeb\x5d\x0f\x52\xb0\xd9\xb6\x39\xb9\x07\xa3\xa0\x81\x00\xe0\xe0\x51\xad\xf6\x9e\xaf\x73\x26\x17\x6f\xa1\x5a\xce\x90\xcb\x3e\x52\xfc\x52\x3d\x41\x56\x7e\xaf\x8a\x26\x32\xe2\x75\x71\xeb\x59\xa0\x10\x31\x14\xd5\x02\x70\x30\xb5\xaa\xbd\xe2\xef\x92\xcc\xbb\x4c\x3f\x7a\xfc\xc9\xb7\x35\x74\x74\x54\x9f\xe9\xf3\x8a\x20\x36\x05\xeb\x91\x2e\x6a\x29\xde\xfe\x20\x74\x86\x19\x88\x43\xa8\x75\xbe\xcc\x07\xe8\xbf\x11\x59\xad\x76\xff\xa5\xa1\x0c\x5d\xb7\x64\x23\x95\xa9\x22\x26\x19\x5a\xaa\xa7\xe5\x8d\xa5\xe3\xdd\x45\x29\x84\xb2\x16\xf1\x39\x8e\xb7\xa0\xd3\x01\x41\x1c\x4c\x2d\xb2\xdb\xd3\x59\x5d\x9c\x53\xb9\xee\xa6\x46\x5d\x32\x31\xc4\xa4\x14\xdb\x8f\xc9\x76\x47\xfc\xb9\x5f\x50\x0c\x38\x18\xbd\x9b\x85\xfe\x0c\x41\x1c\x4c\xad\x04\xf1\x86\xe4\x25\x4b\x37\xa1\x8b\x5f\x7d\xe4\x47\x29\xd2\xab\xf4\x2e\xf7\x63\x3f\x97\xf6\x5d\xff\xd2\xdf\x9f\xae\x42\xf8\xd5\x15\x51\x16\xc4\xc1\xd4\xfa\x85\xa3\x9d\x53\xb8\x2a\xfb\xdb\xda\x6c\xfb\x58\x7f\xb3\xc1\x7f\x36\x76\x5e\xf2\x65\x37\x8f\xf1\xa0\x88\x9e\x1b\x69\x9c\x64\x0c\xa2\x2c\x88\x83\xf5\xed\x4e\xeb\xb6\x4c\x62\xd9\xe1\x85\xb1\x6d\xfd\xc7\x32\x4a\x5e\x46\xea\xbb\xb7\xc9\x7e\x47\xf6\x34\xbc\x52\x58\x09\x4c\xac\xf0\x84\x12\x2a\x20\x0e\xa6\x56\xf8\xf3\x9f\x67\x1a\x78\xc4\xde\x4c\x05\x4a\x24\xfc\x2e\x8f\x2d\xaa\x06\x63\xf6\x1a\xa4\xaf\x10\x47\x5f\xf0\xf4\x7b\x7d\x49\xfe\x23\x42\x2d\x10\x87\x50\xeb\x7c\x99\x0f\xd0\x57\x7e\x64\xb5\xea\x76\x3e\xc4\xe5\xce\xe6\xd3\xb4\x49\x5a\x3a\xa4\xef\xb5\xf4\x1c\xa5\x58\xc4\x56\xd1\x14\xe8\x7b\xaf\x74\x1a\x60\xb8\xae\x42\x29\x0a\x10\x07\x53\x4b\x85\xb8\x8b\xa4\xc3\x34\x68\x37\x98\x6f\xe6\x88\x27\xf5\xa7\xdb\x2c\xa6\xcd\xb5\xec\xab\x87\x89\xcc\xfd\x0c\x01\xef\xc7\x43\xa0\x00\x1c\x88\x83\xa9\x55\xdb\x4c\x22\x9b\xd0\xbe\xe4\xa7\xf7\x44\x95\x54\xda\xe0\xe1\x85\x05\xec\x46\x3f\xca\x7b\xc7\xba\x2f\x55\x9e\x26\x09\x85\x29\x40\x1b\x67\x82\x38\x98\x5a\xc9\x77\x2c\x95\xdf\x7e\xa9\x64\xfb\xb4\x98\x79\x66\x55\x21\x71\xa7\x3f\x42\xb1\x24\xf9\x5d\x90\xca\xd3\x67\x3f\xcd\x89\x05\x54\xc8\xa0\x07\x69\x00\x07\xeb\xdb\xd0\x4c\x4d\x1a\xb2\x6f\x77\xb1\xe3\xb8\x25\x84\xe8\x77\x25\x4b\xb6\x26\x1b\xc5\x56\xca\x94\x97\xaf\x53\x2f\xac\xde\x7b\x63\x58\x0f\x65\x3e\x92\xee\x93\xf0\xcf\x26\xfa\x56\x6f\xe4\xe4\x7c\x30\xf6\x56\x76\x9d\xf8\x79\x2c\xdd\x7b\x3f\xa1\xc3\x2f\xeb\xcd\x92\x6c\x0a\x47\xe4\xbf\x33\x1f\x2f\xab\x84\x6c\x06\x8e\x19\x6c\x3b\x85\x8e\xad\x9a\x4c\x8a\x7b\xe2\x8c\xa8\x9a\x16\xfb\x34\x3b\x7d\x05\xaf\x87\x44\xcb\xaf\x7c\xf8\x17\x6a\x50\x39\x4d\xf9\x2b\x24\x40\x95\xa1\xfb\x2b\xf1\x85\x6d\x41\xd3\x8e\xaa\x39\xa2\x01\xaf\x63\xa5\x11\x6e\xcb\x34\xd6\x65\x1e\x37\x58\xe6\x03\x54\x19\x39\xf3\x51\xc6\xc3\x2a\xf8\xe3\x62\xc8\x1c\xb7\x67\xff\xda\xb0\xcb\xd2\x20\xc5\x4b\xf4\x79\x67\x8c\xa9\xa5\x53\x85\x90\x4d\xe2\x5b\xef\x9d\xff\x85\x36\x6e\x13\xa7\xac\x1e\xbd\xf6\x32\x1d\xf1\x49\xee\x6e\x9e\x70\xc4\xfd\x71\xd0\x7e\xef\x62\x6e\x4d\x54\x3b\xea\xd9\x46\x4b\xe1\x28\x94\xf9\x00\xd5\xfc\x27\xf3\xe1\x05\xcf\x7c\x08\xfd\xa9\x2d\x37\x1d\x3a\x0a\xfb\xe0\x5b\xec\x3b\xba\x79\xec\x19\xde\xc7\xee\x3a\x8b\x11\xf0\x95\x9e\x67\x97\x1f\x65\xa1\x90\xec\xaf\x1f\x72\xbd\x90\x32\x1f\x53\x1b\x83\xd1\x72\x16\x6f\x49\x03\xda\xfd\x5e\x11\xfd\x4e\xde\xb1\x12\x1a\xed\xa0\x12\xc7\xd0\x62\xa6\x92\x9b\x71\xc2\x18\xe6\xfa\xfb\x26\x91\x32\x1f\x34\xa5\xdb\xd9\xa9\x2f\x92\x63\x50\x66\x0e\xa4\x4a\x58\xae\xd4\x6d\x2b\x14\xec\x15\x96\x13\xc7\xd8\xa8\x97\xd1\x1f\xd3\x7e\x61\xfc\xfb\x26\x91\x32\x1f\x8f\x44\xd8\xf0\x9e\x5e\x28\xe6\xd9\xb8\x3d\xb1\x3f\x23\x50\xf3\x88\x24\xfd\xd6\x2d\x2c\x34\x79\xcc\xf4\xbb\xe6\xec\x51\x27\x81\xff\xc1\xc1\x99\x48\x99\x0f\xd4\x03\xe5\xa8\x19\x3b\xec\x07\x4a\xf5\xcf\x7c\x87\x14\x4e\x77\x5a\x30\x12\x13\x8c\x47\x96\x79\x09\x7a\x3e\xab\x51\x6a\x6b\xbe\xf9\xfb\x26\x91\x32\x1f\xf1\xeb\xaf\xb5\xac\x89\x9e\x73\x06\xdf\x9c\xbf\x18\x1a\x3d\x93\x1c\xcd\xcf\x7c\xd3\xe0\xf8\xc6\xc9\xfa\x19\x56\xe8\xd7\x05\x17\x9c\xbf\x6f\x12\x29\xf3\x91\x2e\x27\x87\x57\x65\x77\x37\x5d\xf0\x6b\xb4\x6b\x36\xa3\xfd\xd0\xcc\xe7\x6b\x6c\x32\xf2\x7c\x8e\x55\x2a\xae\x79\xe1\xe6\xc7\xb5\x7f\xdf\x24\x52\xe6\xe3\x62\xe5\x18\xe9\xa6\xf4\x09\x36\xab\x42\xa4\xa5\x32\xbd\xe9\x30\x5d\x40\xcb\x9b\xbe\x20\x11\xed\x92\xe6\x2e\x46\x8d\x36\x37\x96\xff\xe6\xb5\x0c\x34\x14\x91\xef\x42\xdc\x56\x39\xd6\x09\x0a\x7a\x04\xe6\x69\x45\x75\x77\xaa\x8c\x8c\xb1\xed\xdd\x31\x39\xd4\xf1\xef\xe8\xdd\x29\xb9\xe0\x24\x7f\xa2\x8f\xf8\x03\x06\x71\xb0\xbb\x90\xd8\x42\xf6\xf7\x86\x0e\x3a\x5f\xda\xf4\xb2\x2f\x41\x2a\x5e\x2b\xbd\xef\x8d\xe5\x9f\xa0\x71\xfe\x21\x2b\x66\x49\x16\x42\x1d\x6a\x44\x94\x05\x71\xb0\xbb\x50\xfe\x67\x9b\xb1\xea\xc2\xeb\x73\x2f\xf9\x34\x68\x1d\x9f\x57\x53\x78\x2d\xfb\xf3\x63\x48\xa8\x1c\x7a\x7b\x68\x90\x51\x91\x99\x43\xbb\x31\x80\x38\xd8\x5d\xe8\xf0\x4f\xc1\xca\xb7\xae\xc3\x1e\xf9\x87\xc4\xa4\xc1\x3b\x6e\x6e\xf6\xb4\xef\xea\xb7\xa4\x96\xee\xae\xb5\x2d\x69\x84\x30\xb7\x42\xb7\x62\x10\xe7\x23\x22\xfc\xff\xcc\x69\x49\x33\x32\x6c\x60\xc8\x49\x12\x5d\x55\x0c\xb7\x52\x56\xdd\x9c\x7a\x61\xf2\x98\xa3\xb4\x5b\xae\x95\x5a\x6d\x38\x90\xe3\x3a\xf4\xa1\x0f\xc4\xc1\x1e\x70\xae\x7e\xf9\xe0\x25\x43\x99\xcc\x7a\x25\x2d\xa3\xbf\xff\x0a\xd1\x0f\x8e\x67\x0c\x5b\xcc\x5e\x5d\xe5\xf2\xd7\x8f\xda\x0a\xeb\xe8\x92\x11\x99\x0f\x10\xf7\xcf\x3e\x1f\x5e\xe7\xca\x7c\x80\xfe\x71\x91\xcd\x62\xbb\xa8\xca\xff\xe6\x96\x22\x46\xd7\x4a\xf0\xe0\xeb\x1e\x25\x4b\x13\x5f\x54\xf3\xdd\x67\xa1\xfc\xde\xaf\x8d\x9a\x7c\x5a\xed\xa1\x15\xf3\x20\x0e\x3e\xa3\x47\x24\xbc\x50\x79\xc0\xd6\xc1\x12\xf4\xce\x95\x35\x42\x46\x45\xd5\x58\x8c\x9b\xbf\xf1\x84\x59\x82\xdd\xae\x79\xb9\xf4\x0e\x15\x34\xa3\x07\xe0\x60\x66\x95\x58\x2e\x39\xf8\xa6\xa2\xfc\x0a\xfe\xf2\x88\x6f\xa7\x3e\xb8\xc2\xea\xfa\x4f\x52\x65\xdd\xf7\x2a\x66\x9b\x78\x5d\x3d\xfc\xf3\xd0\x83\x3e\x88\x83\x99\xe5\x70\x91\xd8\x05\x9b\x72\x0c\x77\x69\x98\xeb\xc5\xbd\xd4\x3e\xf5\x5c\x5d\x32\x66\x8a\x4b\x6f\x36\x6b\xdd\x67\xaf\x88\x39\xdc\x85\xf6\x72\x07\x71\x30\xb3\x9a\x64\x56\x77\x52\xfa\x7b\xb3\x49\x78\x4f\xdb\x50\x30\xef\xd4\xa3\x90\xd9\xca\x67\xdb\x7a\xd6\x78\x36\xc6\x76\x9e\x25\x86\x72\x21\xca\x82\x38\x98\x59\xb8\xfc\x3a\x69\xfa\x8a\xf4\x81\x95\x0b\x7b\x91\x06\x92\x16\x51\x4d\x93\x0c\x0c\x15\x5f\xdd\x66\xc6\x06\xfd\x97\xd5\x84\x54\x09\x10\x8f\xce\x20\x0e\x71\x84\xe3\xf9\x32\x1f\xa0\x3b\x2b\xb2\x5a\x57\x7e\xf2\x5b\xbf\xcf\x52\x14\xc0\x1f\x79\x94\x34\x33\xbc\x43\x50\xf5\xb4\x55\xfd\x3d\x07\x43\x2e\x6d\x98\x7d\x55\x17\xf5\x7d\x68\x9b\x65\x10\x07\x53\x4b\x75\xed\xe6\xcb\x3f\x66\xc3\x92\xb2\x0f\x4c\x69\x92\x7a\xb7\x2b\xdc\xfd\x5a\x45\xec\x95\x4b\x30\xbe\x45\x2c\x3d\x5d\x8b\xec\x83\xbe\x49\x83\x38\x98\x5a\xfd\xce\x9c\x5c\xd3\x17\x6f\x74\xc8\xc4\x5c\xb7\xf7\xbb\xcd\x8f\xbf\x4b\xe3\xc0\x18\x41\xfe\xe2\xee\x2f\xce\x4b\x98\xa8\x38\xbd\x46\x88\xb2\x20\x0e\xa6\x96\x5f\xba\xa0\x14\xc3\x7a\xe4\x35\xaf\x63\xb1\xf5\x47\xda\x93\x68\xad\x42\x39\xdc\x81\x4a\x3b\x07\x8a\x11\x9a\x7f\x4a\xf9\x08\xa0\xb5\x23\x20\x0e\xa6\x56\xf0\xbd\x24\x1c\x9a\xfb\x1d\x0a\xe9\x9b\x7a\x2e\xec\x56\xe6\x3b\x5e\x9c\xfd\x97\xdb\xfa\xca\x6c\xf0\xee\x3b\x73\x4c\xb1\xd6\x48\x21\xca\x82\x38\x78\x50\xcd\x3f\xa7\x6d\xd7\x2a\xae\xf1\x46\x8d\x4c\x61\x49\x60\x90\x6c\x50\xdd\xb0\x3d\xe9\xde\xaf\xa1\x80\xca\x8c\x2e\xd3\x7b\x68\x4f\x11\x6a\x81\x38\x84\x5a\xe7\xcb\x7c\x80\x9e\xa0\x90\xd5\xaa\x7f\x6f\x87\xcd\xfe\x9a\xc3\x7e\x54\x60\xe3\x4c\x63\x8b\x29\xa1\xde\xff\x28\xcb\x28\x4c\x83\x7c\xa6\x45\xd7\xe8\xa8\xbf\x31\x1e\x5a\x2c\x0e\xe0\x60\x6a\xb1\x0e\x19\x49\xb7\x0e\x4b\x8b\xea\x77\x75\xbc\xaa\x3a\x6e\x8a\x2f\xc7\xe7\xff\x60\x9c\x1d\xb6\x4f\xc6\x70\xfc\x51\x64\x7d\x82\x16\x51\x16\xc4\xc1\xd4\xaa\x7a\xc5\x28\xc3\xb8\x9c\xee\x78\x8d\x04\xdb\x9b\xda\xa0\x68\xfa\xcd\x9f\x2a\xb3\x42\x76\x8a\xfd\x47\x62\x4b\xb9\xbc\xbf\x98\xdf\x23\xca\x82\x38\x98\x5a\xea\xfe\xad\xb7\x7a\xea\x3b\x34\x30\x13\xaa\xcd\x88\xf1\x46\xcd\xb3\x5f\x1c\x64\x86\x4e\xf6\x2d\xee\x65\xe7\x9b\x39\x06\xe1\x9a\x21\xca\x82\x38\x98\x5a\x5c\xa7\x1d\xc1\xd8\xde\xbd\x0f\xe8\xec\x4f\xe3\x9c\xdf\x9e\xf0\x47\xbd\x6b\x4b\x28\x94\x8e\x2a\x68\x67\xe5\xe9\xef\xce\x11\x85\x26\xd4\x40\x1c\x4c\xad\x46\xb9\x03\x12\xd1\x5f\xe2\x1c\x5a\xa4\x3a\x1d\x22\x65\xfd\xd3\xe2\x16\x5f\x8e\xa2\x42\x27\xf7\xbf\x8a\x95\x44\x33\xa5\x04\x8e\x21\xd4\x02\x71\x08\xb5\xce\x97\xf9\x00\x3d\x29\x23\xab\x75\x7d\x4f\xb3\x26\xb1\x7e\x3e\xef\x79\x9b\x37\x97\x43\x91\xd5\x80\x4b\xfd\xf4\x73\x8a\xab\x46\x2c\x59\xab\x11\xc9\x94\x66\x34\xd0\x49\x19\x20\x0e\xa6\xd6\xe0\x34\x9d\x0b\x59\x01\xef\xc6\x25\xe3\x95\x37\x06\xee\x3e\x91\x51\xf3\x7a\xb6\x64\xd3\x6d\x89\x2f\x39\xe2\x0c\x52\x06\x9b\x6e\x20\xca\x82\x38\x98\x5a\xbe\x3b\x92\x92\x8c\xb9\x81\x5a\x4f\x52\x25\xca\xb6\x1d\x53\x0b\x6c\x4d\x68\xb5\xf0\x9f\x5b\x11\x05\x4c\x27\xb0\xfa\x3a\x32\x41\xe7\xd9\x82\x38\x98\x5a\xeb\x2b\x5d\xce\x78\x36\x13\x36\x8c\x93\x0d\x42\x73\xd5\x2f\x2b\xd9\x68\x67\xd3\x5d\x09\xd5\xe9\x5e\x98\xda\xac\xbb\xe2\xdf\x81\xbe\x45\x81\x38\x98\x5a\x65\x8e\xb3\x64\x85\xd7\x82\x28\xec\x31\x31\x9d\xbf\xc9\xff\x22\x66\xe9\xdf\xbc\xdf\x39\x5f\x45\x94\x7a\xa9\x2d\x58\x72\x7b\xbe\x00\x51\x16\xc4\xc1\xd4\xfa\xd9\x5f\x51\xe1\x3d\xeb\x82\x7d\xe3\xfa\xd6\x19\xef\x99\x9f\xa5\x8f\x5c\x60\xdd\x61\x58\x44\xdb\x1f\x01\xe1\x37\x7f\x54\xe8\x76\x10\x6a\x81\x38\x84\x5a\xe7\xcb\x7c\x80\xde\x88\x90\xd5\x6a\x5b\xbd\xbd\x9a\xb7\xe4\xd9\x9a\x7d\xa7\x9f\xf6\xf7\x23\x3c\xfc\x2b\xb3\x97\x51\x17\x32\x2b\x6e\x48\xe4\x51\x2a\x44\xfe\x70\x71\x42\x5c\x3e\x88\x83\xa9\xe5\x1b\xd4\xeb\xbb\x23\x78\xc0\xc8\x9c\xe3\xf9\x83\x36\x9d\xe7\x2a\xaf\x5d\x5e\x8d\xe2\xba\x5f\xe7\x9a\xe1\xab\x5b\xb5\xef\xf9\x22\x20\x07\x00\x1c\x7c\xc5\xbc\xc3\x11\x59\xd7\x52\xb8\xbe\x8b\x0f\x81\xae\xdc\x90\xb3\xec\xa4\x7b\xc1\xf2\x37\x87\x77\x33\x39\xee\xdf\xa9\x6b\xa7\x76\x4b\xa1\x15\xf3\x00\x0e\xa6\x16\xce\xd4\x37\x97\x98\xe9\x9c\x12\xcd\x67\x8b\xa7\x77\x9e\x56\x4f\x6c\x9b\x1b\xe6\x99\x68\x91\x1d\x6d\x48\xcf\xf0\x3d\xb9\xfc\x04\x3a\xdc\x04\xc4\xc1\xd4\xca\x30\xb8\x31\x9c\x39\xf8\xb1\xd4\x58\x3e\x0c\xcd\xca\x04\xff\x53\x26\x4f\x75\xc4\xae\x88\xd1\x86\xf2\xc4\x05\xca\x41\xd5\x22\xe8\xa8\x08\x10\x07\x53\x4b\x61\x5a\x56\xe6\xb9\xc1\x4b\x9e\x9d\x05\xfe\xc2\xe9\xf5\x6f\x65\x16\xd4\x71\x5c\xe4\x3c\xa3\x51\xc9\x63\x06\xea\xf3\xae\xdf\x55\x11\x6a\x81\x38\x84\x5a\xe7\xcb\x7c\x80\xde\x7c\xff\x47\x52\xad\x27\xdc\x19\x6f\xfd\xc6\xb7\x6b\xbd\x0f\xc9\x98\xb8\x24\x4b\x56\x03\xbb\x47\xd0\x1f\x49\x7c\x2a\x53\x30\x6a\x23\x59\x49\x87\x76\xe2\x05\x71\x30\xb5\xb6\x13\x77\x30\xeb\xa5\x47\xa3\x1c\x5c\xf1\xde\x33\x1f\x6c\x8c\xb4\x36\xf5\x3d\xfa\x35\x65\xf2\x6d\x95\xee\xfa\xe3\xca\x9f\x9a\x23\x88\xb2\x20\x0e\xa6\x96\xb1\x2c\x53\x83\xc7\x12\x5d\x87\x45\x37\x33\xae\x6e\xd4\x8f\xfb\xd6\x9a\xba\xde\x1a\x36\x37\xba\xc3\x59\x4c\xbb\x22\xd8\xdb\xb6\x10\x65\x41\x1c\x4c\x2d\x25\xf2\x78\x33\x25\x42\x92\xf0\x67\xbf\xca\x39\x7e\x9f\x7c\x2c\x6f\xee\xf2\x68\x52\x5d\x21\x5f\x55\x1e\x46\xb9\xce\x1c\xa6\x0c\x2d\x4d\x03\x71\x30\xb5\x14\x63\x0e\xb5\x78\xed\x5c\xc5\x69\xf2\xc8\xfb\x8a\x6c\x4b\xec\x6a\x67\xfe\xb0\x9b\x07\x1c\x4e\x3d\xc3\xb8\x7d\xaf\xa5\xfc\x31\x94\xa9\x02\x71\x30\xb5\x5c\xf1\x35\x7f\x9b\xe0\xc5\x7d\x51\xbd\xf7\xa6\xf9\xda\x4c\xed\x57\x3d\x39\x9e\xaa\xc2\xdb\xa2\x73\x25\x2b\xce\xb2\xb7\x86\xea\x8b\x11\x6a\x81\x38\x84\x5a\xe7\xcb\x7c\x80\x66\x38\x90\xd5\x7a\xb5\x85\xf1\x18\x0d\x2d\x54\x24\x24\x40\xaa\xa7\x3a\x40\x8e\x4e\x87\x5b\xdb\x92\x4a\xf9\xf2\xa1\x4d\x89\xef\xf8\x32\xdd\x37\x73\x28\x10\x0f\xe0\x60\x6a\x59\x46\x7e\x55\xfc\x12\x6a\x65\xc0\x9b\x38\x79\x90\x8e\x37\xf2\x52\xa2\xc1\xf1\xd0\x30\xe5\xed\xa5\xc6\x45\x3c\x81\x5f\xf4\x9c\xda\x88\xb2\x20\x0e\xa6\xd6\x2b\xd6\x88\xbb\x8b\xa3\x29\xfe\x86\x0a\xc2\xe4\xe4\x3e\x8e\x35\x7a\x23\x74\xbc\xbb\xa3\x64\x8f\x35\xe6\xfb\xef\xf8\x50\xa5\x40\xc7\x06\x81\x38\x98\x5a\xaa\x8b\x3a\x5f\xde\x61\x48\xd2\x8b\xd6\xa5\x5d\x59\x66\xf9\xca\x48\xc4\x54\xf7\x54\xef\x6a\x7e\xcd\x3c\xdd\xe5\xd3\x1f\x18\x8e\xd0\x94\x06\x88\x83\xa9\xa5\x1d\x48\x1d\x2f\x56\xaa\xed\xfc\xf8\xee\xb1\x8c\x1d\xc9\xb2\x29\xd6\xad\x97\xb4\x6f\xfc\xc2\x7f\x12\x9c\x49\x1e\x55\x85\xaf\x43\xdf\xed\x40\x1c\x4c\xad\xb9\xed\x36\x15\x5e\x92\xe8\x11\x2f\x73\xe6\xa2\xa9\xd8\x10\x97\x92\x95\x2a\xc6\x8c\x8a\x6b\x79\xa3\xba\x1b\x7a\xb7\x96\x57\xf9\x10\x6a\x81\x38\x84\x5a\xe7\xcc\x7c\x80\xe6\xb0\xff\xc9\x7c\x78\x21\x65\x3e\x72\x1b\x16\xa2\x14\x09\x51\x6e\x51\x74\x70\xf3\x5c\xcf\x10\x4a\xac\x36\x7b\xb8\x7f\x53\xce\xb5\xeb\x64\xf9\x73\xe8\x3a\x71\x37\xc3\xdf\xcf\xf4\x21\x65\x3e\xbc\x53\xdc\x7c\x7b\x35\xa2\x0b\xe2\x25\x68\x8f\x5e\x45\xf3\x98\x3b\x47\x9b\xaf\x0b\x5c\xf9\x5d\xf4\xb0\x55\xcd\x91\xb6\x01\xeb\xf9\xdf\x37\x89\x94\xf9\x38\x13\xbc\x54\x5d\xd9\x70\xcb\x2f\x31\x18\x43\x2c\xae\xe0\xf8\x11\xde\x1a\xfd\x35\xf4\x9b\xae\x2a\x36\xe6\x94\xc2\x9f\x15\x42\xee\xff\x37\x93\x8b\xa0\xbe\x44\x1e\xe0\xec\x09\xc3\x24\xb7\xa6\x59\xe9\x3f\xb7\x9b\x34\xd9\x37\x09\x62\x4a\x58\x73\xc4\xe5\x13\xf1\x77\xd8\xa7\x6b\x5b\x52\x46\x13\x41\xbb\x26\x80\x38\xd8\x00\x6f\xbd\x45\xac\x38\x6e\x94\xa5\x31\x83\x3b\xd6\xa8\x98\xf8\xf8\x43\x5c\xa5\x7f\xee\x73\xb5\x1f\x1f\x24\xf9\xb5\x17\x94\xcc\x97\xa1\x2d\xe8\x40\x1c\xfc\xb8\x31\x8d\xfa\x08\xf4\x54\xed\x9c\x3e\xb6\x48\x8e\x15\x4c\xa2\x5b\x0e\xd6\xf3\x5f\x63\x7b\xaf\x6c\x73\x98\x68\x8c\xce\xac\xfe\x68\x80\x62\x88\x00\x0e\x36\xc0\xb1\xa6\xf6\xcf\xda\x5b\x56\x64\xce\x9c\x71\xc6\x07\x76\x8a\x7c\x8c\x43\xf6\x08\xd6\x4e\x09\xca\x08\xd2\xc5\x6f\xe3\xbb\x97\xca\x20\xca\x82\x38\xd8\x00\xdf\x64\x30\xe7\x0a\xfe\x79\x52\x31\xb5\xc8\xca\xdf\xb5\xad\xed\xc3\x4d\xb6\xa7\x5e\x77\xd8\xe9\x72\xaf\x5d\x3f\x79\x9a\xb3\x0f\x8a\xa2\x82\x38\xd8\x00\x0f\x64\x13\xc8\x45\x4b\xc2\x0e\xd2\x0d\xaa\x63\x6f\x4b\x4c\x54\x45\xb9\xb7\x81\x79\x95\xc5\x84\xf8\x5d\x3a\x57\xa2\xa1\x18\xfe\x26\x62\x80\x83\x38\xc4\x00\x3f\x5f\xe6\x03\x34\x66\x90\xd5\x62\xea\xb9\xf1\xf1\xd4\x46\x56\xb1\xd6\x41\xe2\x2d\xf6\x64\x54\xc6\x62\xf5\x4d\x9b\x19\xf4\x96\x03\xb1\xda\x78\xfc\xa5\x7b\x8e\xd0\x51\xcc\x20\x0e\xa6\x16\xcb\x61\x77\x7f\x4d\xde\xa5\x47\xe6\x27\x15\xb7\x3f\x63\xd2\xc9\x1c\xc5\x99\xf6\xdd\x4a\xe2\xaf\x31\x61\x73\xcf\x67\xb9\xc2\x28\x8b\x28\x0b\xe2\x60\x6a\xd1\x05\x04\x37\xdc\xaa\x2b\x39\x1b\x29\xfe\x15\x4b\x7a\x7a\xfb\x4f\xf4\xd5\xdd\xd6\x50\x0b\x12\x91\x01\x4a\xbb\x90\x03\x66\xb1\x10\x44\x59\x10\x07\x53\xab\x4b\x30\x33\x56\x74\x6c\x28\xad\xdc\xff\x9b\xba\x22\xb5\x65\xa0\xf9\xc1\xa8\xee\x96\x12\x49\x5a\xed\x47\x43\x63\x6a\xde\xd2\x04\x44\x59\x10\x07\x53\xab\x55\x4d\x5b\xee\x5a\x39\x77\xab\x1a\xf5\x05\x6d\xe3\xae\x17\x3f\x0f\x8e\xa6\x5e\xe1\xbd\x5d\x53\x96\xe4\x4d\x89\x95\xd6\xab\x82\xb6\x0d\x00\x71\x30\xb5\x2e\x7e\x99\x31\xad\xe5\xaf\x6c\x71\xb6\x10\x3d\xce\xff\xb3\x71\xfa\xa3\x7b\x38\x16\x1f\xe7\x76\xcf\xed\xdf\xf6\x82\x0e\xdd\x1d\xaf\x10\x6a\x81\x38\x84\x5a\xe7\xcb\x7c\x80\xfe\x1b\x91\xd5\x8a\x24\x62\x60\x0a\xa1\xf8\x10\x16\xb5\x3e\x6a\x81\x82\xc7\xf6\xea\x90\x93\xbb\x6b\xb2\x96\xca\x4b\xed\xb6\xe3\x58\xdd\xa0\xd7\x4f\xc4\xe5\x83\x38\x98\x5a\x71\x09\xf7\xef\xef\x4c\xc6\x7c\xc5\x3f\x1b\x7a\x2f\xfa\x9d\x88\xd1\xcd\x75\x95\x42\x29\x31\xc9\xf7\xf6\xb7\xbc\x4a\x33\xc2\xe7\x50\x4a\x09\xc4\xc1\xd4\xd2\xef\xbf\x75\x81\x3b\xf1\xf0\xab\xf9\x48\xc2\x61\xac\xcb\xda\x1d\x53\xd6\x3b\x72\x55\xee\xfd\x87\x1e\x7b\xcf\x76\x5e\x58\xde\x56\x42\x94\x05\x71\x30\xb5\x2a\x67\x0a\x93\x0f\x5f\x5e\xca\x71\x8f\x7e\x57\xce\x44\x7a\xb7\xa7\x40\x2a\xd3\xf4\x11\xdf\xce\x8f\x26\x76\x11\x6c\x5c\x93\xa2\x55\x44\x59\x10\x07\x9f\x02\xfa\x34\xad\x1d\x69\xdd\xca\xab\x96\x2b\xee\xc6\x60\xe9\x5b\x1f\xff\x36\xa6\x96\x49\x8d\x75\x99\xd7\xc0\xc6\x5c\x63\xef\x02\x34\x1f\x0e\xe2\x60\x6a\xd1\x9b\x68\x36\x5e\x96\xff\x21\x64\xdb\x52\x24\xcd\xe1\x75\x7d\x4a\x5d\x34\x76\xb7\x58\x6e\x4e\xbd\x20\xe8\x20\xee\xea\xa6\x62\x3f\x42\x2d\x10\x87\x50\xeb\x7c\x99\x0f\xd0\x57\x7e\x64\xb5\xa6\x3a\x43\x1a\x1e\x5d\xec\xb9\x6a\xe8\xb3\xe9\xc7\xaf\x72\xe5\x20\xd4\xa3\xaf\x6d\x50\x8e\xfa\x9a\x63\xbc\xe0\x9f\x2e\x09\x3b\x2c\x68\xcd\x32\x80\x83\xa9\x75\x2c\xc0\xb1\xaf\xd1\x63\x61\x76\xa3\xad\xcc\x84\xb1\x75\x8a\x45\xe2\x3d\xbb\xec\xbd\xfe\x97\x86\x5f\xbb\x77\x66\x37\x30\x8e\x47\xa1\xf5\x39\x00\x0e\xa6\xd6\x24\x79\xf1\x31\x1a\x3a\xc5\x9c\xd7\x98\x1b\x6a\xf5\x1c\x5f\xe6\x4e\x95\x86\xb8\x73\x48\x3b\x45\x9c\xf4\xa0\x96\x75\x1b\x23\x34\x17\x0a\xe2\x60\x6a\x89\x28\xbf\x98\x99\xb0\x7d\xe7\x5e\x9e\xc5\x44\xad\x37\xe9\x42\xa9\x32\xf6\x61\xd7\x2f\x21\xbb\xa1\x6a\xcc\xd5\x39\x63\x64\x51\x0d\x51\x16\xc4\xc1\xd4\x4a\x2c\xa9\x4c\xf6\x8e\x65\x3f\x68\x4c\x60\xb9\xba\x52\x47\xdf\x64\x11\xb8\x12\x59\x4d\x50\x72\x6f\xe6\xfd\xf1\xbb\x9c\x04\x53\x1a\x28\xf3\x31\xf9\x9a\xbb\xf6\x0a\xbb\x1f\xde\xe2\x0a\xfe\x65\x9e\x11\x23\x19\x55\xff\x7e\xe3\x2b\xbb\x13\x42\x76\xaa\xe1\x4d\x51\x83\x1b\xd7\xff\x9d\xf9\x70\x9a\xbb\xff\xe3\xb8\x5d\x93\x68\x9c\x6b\xfc\xad\x77\xc7\xe5\x1f\xba\x05\x6f\x38\xb9\x29\x36\xd3\x46\xe4\xed\x4e\x53\x4c\xde\x3d\xfc\x17\xea\x63\x38\x93\x87\x42\x66\x7f\x81\x79\xcc\x8b\x2a\x69\x33\x77\xe8\x96\x75\xf6\x68\x46\x1b\x55\x80\xc0\xe1\x22\xfa\xdc\xec\xb7\x15\x58\xe6\x03\x54\x19\x39\xf3\xb1\x4e\x4e\xd5\xcc\xcf\xee\xbe\x3e\x22\xf3\x2d\xcf\x95\x3c\xe9\x71\x72\xc0\xc9\xb1\xf2\x12\xae\x33\xce\x62\xa2\xd0\xea\x42\x9c\xf4\xbf\xd0\x07\xea\x5f\xe4\x51\xcc\xd8\xf3\x3d\x2f\x0d\x3f\xb9\x9b\xba\xde\xe1\x82\xa7\x56\x83\xdd\x4b\x16\xf6\xd2\x9a\x6b\xac\x28\xd2\x0f\x0f\xca\x7c\x80\x6a\xfe\x93\xf9\xa8\x83\x67\x3e\xd4\x1a\x4c\x24\x71\x9d\x65\x82\xf1\x25\x6f\x33\x6b\x48\xe0\xb4\xc9\x51\xa1\x32\x07\x2b\x69\xa1\x7c\xe1\x40\x47\x13\xa0\x27\xfd\xfb\x87\xdc\x3a\xa4\xcc\x47\x2f\x4a\xd1\x9e\xd1\x8d\xa0\x8a\xc9\xcb\xaa\x0a\xf7\x49\xe3\x98\x13\x25\xab\x5e\x08\x31\xf7\x17\xe3\xf4\xa4\x6c\x28\x27\x63\x6f\xfc\x7d\x93\x48\x99\x8f\x21\xde\x47\xaa\x43\x8e\x69\x67\x67\x16\xe4\x02\x45\xe4\x14\x6a\xd5\xad\xf3\xaa\x4f\xf0\x39\x68\x16\x95\xfb\xae\x8c\x74\x5d\x91\xf9\xfb\x26\x91\x32\x1f\x4e\x18\x3c\x53\x26\x4f\x88\x23\xab\x51\x4c\x6f\x58\xeb\x1b\x0a\x75\xdc\x8d\xf1\xf0\x66\xc1\x27\x74\x63\x8b\x7c\xe0\x73\x2b\xa0\xe7\xef\x9b\x44\xca\x7c\xa8\xe3\xfa\xdc\x70\x36\x5f\xe6\x4e\x7b\xe1\xcb\x9c\x3f\x3a\x51\x48\xfe\xde\x71\xd1\x39\x4d\x50\x39\x8b\x01\xa5\x5f\x9c\x16\xed\x6f\x8f\x20\x09\x14\xaf\x43\xca\x7c\xe0\xcc\x0d\xc6\x87\xb1\x32\x94\xe2\xba\x8e\x06\x26\xb8\x93\xbf\xe9\xf8\x9e\xaa\x58\x25\x75\x6c\x50\xe2\xee\xbe\xf4\x88\x0e\xbf\xe2\xef\x9b\x44\xca\x7c\xe8\x09\xad\x6d\x1c\x38\xdb\x19\xc7\xe2\x9c\x5c\xe9\xe3\x64\x6c\x89\x5b\xfd\x23\x9d\x3a\xf3\xc8\x38\x87\xf1\xd5\xd4\xcf\x08\x53\x8d\xbf\x6f\x12\x29\xf3\xa1\x90\xb7\x48\xa8\x85\x55\xcb\xfb\xc3\x5e\x57\x23\xa1\x84\x22\xcf\xe0\xe5\x8f\x21\x6d\x13\x49\xd9\xb7\x11\x43\xee\x46\x01\xb9\x56\xff\xcd\x6b\x19\x68\x28\x22\xdf\x85\x3c\xd2\x14\xf4\x24\xaf\xb6\xf4\x5c\x92\xb7\xce\x7b\x22\xd4\x1c\xfa\x9a\xec\x63\xc6\x90\x7b\x22\x47\xf7\xe7\x93\x1d\x7b\xc1\x93\x29\xc4\x1f\x30\x88\x83\xdd\x85\x2e\x48\xe4\xf5\x3c\xb8\x82\x15\x1d\x5d\x2e\x76\xe0\x53\x47\x61\x84\x1b\x94\xf5\x70\x28\xc4\xb4\xd3\xa1\x8a\x3b\x2c\xad\xfa\xf3\x25\x44\x59\x10\x07\xbb\x0b\x31\x99\x26\x3a\x88\x45\x4e\x56\x1e\x45\xed\x9e\x31\xfa\xed\x63\x64\x3f\x72\x0a\x7b\xc2\x65\x7a\x33\x34\x67\x4d\x78\xa0\x0a\x1f\xfa\xd8\x0b\xe2\x60\x77\xa1\x9f\x4d\xdd\x73\x0a\x07\x4f\x2e\x7c\x9f\xa9\x40\xd5\x35\x6a\xd3\x6c\xbf\xad\x6b\xbd\x2f\x1a\x1f\xfd\x8b\xae\x03\xf7\xca\x7b\x32\x68\x0f\x6b\x10\x07\x9f\x77\xd1\x6d\x1c\xed\x6e\x7d\x2d\x40\xea\xac\xb9\xf9\x01\xef\xf0\x7e\x78\xac\xe0\x43\xc5\xcc\x95\x53\xbe\x6b\xd5\x53\x8e\xbe\xee\xd0\x47\x1e\x10\x07\xeb\xdb\xbd\xb8\x3d\xd5\xc2\xb0\xee\x5b\x09\x1e\x8e\x67\x07\xa5\x3c\x89\x32\x6a\xac\x02\x09\x72\x9d\xb7\x1e\x45\xf1\x9c\xba\x4e\x74\xfc\x42\x64\x3e\x40\xdc\x3f\xfb\x7c\xd4\x9d\x2b\xf3\x01\xfa\xc7\x45\x36\x8b\xe2\x9e\xcd\x97\xc9\x2b\x32\xaf\xa5\x92\x19\x9c\x13\x84\x22\x3e\xf3\x4c\x55\x37\xbf\xb7\x52\xdf\x24\xfb\xbc\xa7\x35\xe9\xda\x4a\x83\xb8\x7a\x10\x07\xbb\xfa\xa1\x79\x9a\x71\xfd\x2f\xef\x38\x19\x5c\xec\xed\x37\xd2\xbb\x3e\x7c\x58\x39\xc8\x5e\x70\x38\xe6\x6a\x6b\xf4\xd5\x66\xee\x61\x81\x96\xb4\x82\x38\x98\x59\x35\xa2\x4e\xa1\x66\xb1\x58\x92\xdf\xe6\x02\xc4\x69\x5e\xdb\x9b\x04\x30\xf9\xb5\x93\x24\xca\xa5\xe8\x8e\xb5\xef\x5e\xd2\x0a\x80\x16\x61\x83\x38\xf8\x41\x9e\xbb\x4e\xa6\xaa\x5a\x5f\x0a\x48\xac\x12\x9f\x19\xcd\x91\x10\xa8\x4a\xeb\x76\x2a\x06\xaa\x32\xb1\xab\x4d\xf3\x7b\x36\x18\x7e\x81\x5e\x9f\x00\x1c\xcc\xac\x4f\xe9\xab\xb6\x05\xd7\x7e\x7d\x3a\x79\xc5\x41\x64\xbe\xc2\x35\x43\x90\x1b\xb2\x7f\xc7\xbf\xd9\xb6\x2e\x5b\x49\x64\xd6\xc1\x0f\xda\x19\x1b\xc4\xc1\xf7\x72\xc7\xf1\xe9\x73\x9f\x1b\x56\x73\x51\xfa\xaa\x45\x20\xe6\xd4\xd8\xd0\xfc\x66\x15\xeb\x7a\xf0\x27\xa9\x31\xdc\xe4\xd4\x14\xbf\x40\xc4\xa3\x33\x88\x43\x9c\xb6\x78\xbe\xcc\x07\xe8\xce\xfa\x3f\x4e\x5b\xec\x51\x7f\x62\xf9\x31\x49\x8e\x88\xf9\x00\xb5\xd3\x22\xc0\x44\x44\x27\x8b\xca\xa6\xad\xcb\xd4\x49\xf9\x81\xd9\x0e\x51\x9d\x34\xe2\xf2\x41\x1c\xec\xf2\x49\x56\x4e\x76\x2a\x8d\x5b\x4f\x9e\x08\x8a\x55\xe9\xa6\x98\x64\x0f\xd4\x15\x86\x66\xcf\x9b\x29\x25\x2b\xa0\xf7\xd3\xe2\x7a\x40\x1f\x0e\x41\x1c\x7c\x91\x07\xb3\xf1\xfe\xfc\xc6\x48\x79\xd1\xd4\x7b\x0b\x39\xe9\x0e\xfc\xb9\x76\x9d\x5b\xae\x45\x05\x7b\x55\x97\x66\x0d\xbd\x6e\x7e\x83\xe6\x92\x40\x1c\x3c\xa8\xd6\xb2\x62\xc9\x59\x7e\xbb\x8e\xf4\xd1\xf8\x05\x06\x75\x76\xdc\xe3\x7e\x16\x4d\x4a\xa3\xa7\x69\xf1\x9a\x54\x49\x6b\xaa\xd9\x35\x50\x50\x0d\xc0\xc1\xd4\x1a\x2d\x62\xa5\x28\xf5\xe1\xfb\x45\x62\x3b\xbd\xd7\xdb\x4d\x76\xfd\x02\xe1\xe0\x78\x94\xc8\x45\x85\x42\x03\xa3\x83\x60\xdc\xae\x50\x44\x59\x10\x07\xff\x7c\xd8\x62\x30\x48\x97\xc1\xe7\x7a\x23\x3e\x92\x9c\xc9\xd4\xa8\x40\x5e\xe0\xca\xc9\x33\x21\x0e\xc5\x6e\xbd\x0e\xd3\x64\x3e\xee\x4e\x84\x5a\x20\x0e\xa1\xd6\xf9\x32\x1f\xa0\x27\x28\x64\xb5\x02\x58\x02\xa8\x9a\xaf\x64\x9b\x9e\x2c\x14\x59\x68\x28\xdd\x47\x3d\x3a\x1e\x90\x4a\x68\xb9\xb0\x3e\x9a\x83\xb5\x53\xd5\xce\xf5\x19\x71\xf9\x20\x0e\x76\xf9\xfb\xa2\x57\xaa\xef\x19\x5c\xb4\x16\xf9\x60\x2a\xab\x30\xa7\x6c\x3d\x79\xcd\xc0\x2f\x06\x35\x61\x6a\x28\x56\xed\x71\xf3\x2b\x6c\x28\x32\x0f\xe2\x60\x6a\xf9\x0f\xb4\x2c\x36\x25\xaf\x38\x95\xa2\x09\x09\x91\x63\x93\x67\x6a\x1a\x27\x32\xd8\xd8\x5e\xdd\xf5\xd9\x3e\x4a\xb5\x17\xca\x86\x8e\xa0\x06\x71\xf0\x6d\x12\x05\x5f\x63\x65\xb3\x1e\xd0\x11\x0d\xb4\xcc\xf9\xbb\xda\xd8\x1a\xb4\xdd\xe1\x28\x6c\xa9\xbe\x4c\x9f\x57\x4a\x6e\x1c\x2f\x0f\x3d\x14\x80\x38\x98\x5a\x14\x34\x05\x34\x4f\x72\xd8\xf0\xe4\x3f\x62\x18\x8c\x5b\x25\xf4\x3e\x11\xbe\x8b\x52\x7b\x93\x69\x1c\x9f\xe7\xc9\x0b\xdf\xa8\xc1\x3b\xd0\x1d\x01\xc0\xc1\xfa\xb6\x92\xec\x6c\xe4\x7e\xdc\x02\x2a\x1e\xe7\x57\x39\x42\x4d\xaa\xfa\xbc\x93\x0d\x46\xe7\x25\x33\x6e\xa7\x6b\xed\xe5\x9f\xa8\xba\xd6\xa1\x38\x11\x80\x43\xa8\x75\xbe\xcc\x07\xe8\x49\x19\x59\x2d\xf9\xf8\x95\x3c\x93\x37\x06\x2f\x9e\x07\x58\x6e\xe8\x8f\xf8\x9e\x0e\xd4\x19\x2c\xa7\xab\xed\x71\x38\x4d\xa7\x61\x2a\x71\xff\xdf\xd9\x2e\x20\x0e\x76\xf9\xe6\xa2\x56\xde\xe5\x54\xa3\x6f\x8d\x18\x92\xfc\x7a\x30\x69\x0d\x62\x67\xb9\x5b\xfa\x59\xc8\xe8\xf5\xd5\x84\xe2\xe2\xd1\x8c\xa1\xf5\xc7\x20\x0e\xbe\x3b\x11\xde\x3a\x4f\xee\xeb\x28\x79\xff\x71\x27\xfa\x39\x79\x82\xd5\xbc\x90\x12\xba\x6b\x31\x2a\x35\xe9\x6d\x9b\x7c\x45\xde\x1e\xd0\xc4\x1f\x88\x83\xa9\x65\x6e\x86\x5a\xdb\x9e\xa0\x91\x54\x89\x6e\x56\x7a\x23\x3c\xca\x2f\x94\x66\x0d\x5d\x4d\x4d\x9d\x3f\x6a\x1d\x6d\x2a\x54\xeb\x0f\x14\x29\x03\x71\x30\xb5\x70\x3a\x1f\xcc\xbd\x16\x18\xa6\x15\x41\xe3\x69\x14\xde\xf1\x1a\x9b\xcd\x63\x0e\x24\x4c\x37\xb6\xa3\x95\xa2\x6d\x75\x96\x58\x81\x36\x15\x03\x71\xb0\xbe\xcd\xba\x33\xcc\xfb\xed\xfb\x60\x92\xf2\xed\xf4\xc2\xe5\x8e\x7a\xeb\xe1\x8e\x3f\x1e\xe1\x97\x0f\x68\x65\x8f\xd7\xfc\x25\x5f\xee\x6f\x20\xd4\x02\x71\x08\xb5\xce\x97\xf9\x00\xbd\x11\x21\xab\x35\x59\xce\x2a\xf7\xe6\xd2\x29\x85\x8e\x6b\x5e\x60\xce\xb5\x75\x42\x7d\x8c\xde\x81\x63\x25\xf4\x70\xd3\x3a\xbb\xf2\x02\x8b\xff\xdb\x90\x03\xc4\xc1\x2e\x5f\x71\x84\xaa\xac\x94\x3f\xae\xe2\x57\xfe\x53\x3f\xcc\x9c\x48\xb7\x46\xbb\xd7\x43\x25\xc1\x95\xa8\xae\xdf\x44\x8f\x30\x30\xfc\xa1\x9d\x78\x41\x1c\x4c\xad\x32\x7d\xe5\x87\x58\xbb\xdc\x0e\xa4\x93\x6b\xe5\x5f\x4e\x32\xcb\xfa\xd8\x7f\x6a\xbb\xd2\x89\xea\x94\xb2\x13\x97\x32\x5b\x62\x41\x01\x38\x10\x07\x53\xeb\xe9\xbd\x27\xba\x27\x4a\x17\xac\xec\x2f\xbc\x7e\x60\xa9\x58\x69\xcd\xea\x5a\x8e\xf3\xfc\xf4\x2e\x55\x17\x6f\x4b\xa7\x39\xe1\x6d\x28\xfc\x04\xe2\x60\x6a\x65\x35\x14\x77\x5d\x34\x6b\xb6\x5f\xd0\x12\x1e\xda\x31\xdf\x4b\x92\xcf\x60\x7c\x9d\x16\x47\x68\x87\xd6\x14\x4f\xa9\xb6\xb0\x08\xed\x4c\x03\xe2\x60\x7d\xfb\x82\x9d\x84\xda\xae\x8f\x87\x3a\xe3\xb5\xd3\x63\xfb\x97\x1c\xbd\x7f\x16\x2a\x24\xd0\xc2\xf2\x0a\x87\x59\x29\x2f\xdf\x69\x99\xc5\x46\xa8\x05\xe2\x10\x6a\x9d\x2f\xf3\x01\x7a\xf3\x45\x56\x4b\xa9\x32\x7d\xf8\xcf\xd6\x9f\xf7\x61\x2d\xb2\x04\x86\xe4\x25\x8e\x21\x5b\x6f\x69\x42\x1e\xc8\x66\x86\xf9\x5d\xdc\xbc\x6b\xc1\x27\x0a\xc5\x1d\x00\x1c\xec\xf2\x67\x0d\x35\x9b\x9a\x5c\xd0\x19\xb4\x78\x16\xdb\x1f\x04\x12\x4d\x46\x99\x3d\x94\x5a\xf3\x28\xfe\x50\xad\x28\xed\xae\xc9\xf4\x13\xba\x21\x82\x38\x98\x5a\xd2\x07\x67\xd3\xda\x25\x8f\x51\x98\x53\x16\x95\xba\xb9\xfb\xf0\x84\xb2\x15\x3e\x35\x75\x9e\x30\x45\x9b\xab\xb0\x53\xcb\x15\xa2\x23\xca\x82\x38\x98\x5a\x94\x5c\x9d\xbf\x6e\x8f\x4a\x2a\x6e\xd3\x75\x29\xf6\x2c\x90\xec\x19\x5f\xa2\x49\x0a\x45\x79\xfb\x78\xf1\x3a\xe9\xad\x0a\x09\x2b\x2d\x44\x59\x10\x07\x53\xcb\x8a\xf3\x9d\xd6\x29\x53\xc8\x31\x4b\x48\xe9\x7c\xb5\xc1\xd9\x90\x26\x0a\xca\xd2\xfe\xc9\xa8\xda\xe6\x91\xe8\x9b\x79\x57\x96\x20\x44\x59\x10\x07\xeb\x5b\x9f\x44\x27\x9a\x9a\xaf\x3f\x6c\xcc\xac\xcf\x92\x72\x95\x34\xa8\x71\x3b\x64\x64\xc6\x93\x1f\x85\x2e\x44\x70\xf7\x36\xf0\xdd\xf4\x40\xa8\x05\xe2\x10\x6a\x9d\x2f\xf3\x01\x9a\xe1\x40\x56\x8b\xd0\x44\x46\xe4\xf3\x5d\xa6\xdf\xf8\x58\xd2\x6e\x0a\x4c\xe9\xa9\x7e\xa6\x7d\xb3\x31\xa8\xf3\x2e\x77\xb8\x27\x24\xbc\xd9\x8e\x93\x11\x97\x0f\xe2\x60\x97\x8f\xf5\x32\x96\xa9\xe8\x40\x35\x21\xd8\x52\x63\x92\xef\x4c\xed\x86\x2b\xe9\x9c\x55\xd5\x98\xe7\xb3\x11\x0a\xea\x3d\x02\x21\x11\x68\x5b\x72\x10\x07\x53\x8b\x2d\xbf\x28\x42\x4f\xda\xb4\xbe\xee\x19\xfe\x7d\x92\xd6\x58\xfe\xeb\xdc\x4a\x67\x42\xe6\xcf\xd0\x93\x45\xe7\x95\x93\xe9\xdd\xa1\x0d\xf0\x40\x1c\x4c\x2d\x99\x3b\xc5\x19\x3b\x94\x3a\xe8\x5b\x98\x39\x57\x15\xc7\x09\xb3\x50\xd9\x43\x56\x4d\x72\x6f\x13\x6e\x5c\x1a\x6a\x19\x4c\x7d\x58\x82\x28\x0b\xe2\x60\x6a\x61\x0f\x32\xdf\x94\xfc\xac\x16\x3d\x21\x89\x33\x86\xf2\xc4\x54\xaa\xd5\x2a\x6b\x37\x48\x58\x9a\x42\x51\x48\xac\x7f\x10\x87\xf5\xff\xd6\x6a\x03\x38\x58\xdf\x5a\x99\x13\x18\x16\x19\x76\x5f\x7c\xc2\xb9\xcf\x7f\xa1\xe7\xd2\xd1\xfe\x73\x36\x5b\x46\x8a\xfd\xc3\x4f\xa5\xda\xed\x54\xec\x2c\x58\xd0\xe9\x9f\x00\x0e\xa1\xd6\x39\x33\x1f\xa0\x39\xec\x7f\x32\x1f\x75\x48\x99\x8f\x8a\xbc\x53\xdd\xb6\x26\xac\xcf\x16\x61\x63\xd1\x54\xb8\xfa\xc7\x8c\xe5\xd3\x11\x3b\xca\xa1\xba\x94\x92\x9d\xb2\xef\xab\x6e\xf3\xfd\xfd\x4c\x1f\x52\xe6\x63\xd4\xc5\xa2\x3a\x7c\x8b\xd5\xeb\xd0\xd2\xe3\xd9\xae\x86\x6b\xdc\x01\x0d\xff\x92\x5a\x86\x4c\xfc\xa6\x2c\x46\x67\x2e\x9d\x82\xde\xdf\x37\x89\x94\xf9\x28\x27\x33\xdf\x27\x08\xc4\xb0\x7d\x2d\x99\xc8\x6b\x3f\xf9\xdd\x99\x28\x43\x04\x43\x74\xc6\xc9\x97\x31\x64\xd1\xac\xe3\x94\x1a\xed\xbf\x99\x5c\x04\xf5\x25\xf2\x00\xbf\x55\xc7\xf7\x4e\x8c\xa2\x5d\x88\xeb\xa3\x65\xc3\x85\x56\xfc\x02\xa7\x2f\x91\x1c\xdc\xa7\x41\x72\x7d\xc1\xe9\x65\x06\x6c\xed\xd0\xb1\x68\x20\x0e\x26\x61\x81\x47\x16\x6a\xb3\x6d\xdc\x8d\xe1\x97\x6c\xc7\xed\x92\x3b\xa1\x59\x84\x2f\xf4\xbf\xe5\xfb\x78\x94\x38\xfd\xc8\x3f\xae\xca\x82\x4e\x78\x06\x71\xb0\x01\xfe\xa2\x90\x1e\xd5\xe5\x01\x7d\xc3\xde\x68\x62\xa2\x1f\x5b\x8b\x7b\xea\xa9\xdf\x4e\xdd\x46\xb3\xc6\x50\xd9\x2d\xfe\xbd\x84\x38\x68\xc3\x3c\x10\x07\x1b\xe0\x5b\x31\x02\x34\xfe\x9a\x96\xb9\x2f\xe4\x35\x1f\xaf\xdf\x3d\x4a\xa1\xd6\x98\x7e\x2a\x77\x6a\xf5\xe6\x63\xc3\x2f\x97\x13\xfa\x7b\x71\x88\xb2\x20\x0e\x36\xc0\xc7\x72\x33\x51\xdf\x27\xeb\x51\x9a\xb8\xad\xde\x42\x41\x63\x8f\x69\x76\x36\xfd\xdd\x8b\x16\x92\x11\x3d\xfe\x4e\x86\x18\xb3\x21\x17\x51\x16\xc4\xc1\x1f\xf9\x08\xcb\xee\x95\xd6\x3d\xb3\x34\xa4\x70\x9a\x13\x9e\x54\xf9\xee\x18\x4a\x7d\x2d\xa0\x63\xdd\xa4\x38\x68\x8b\xfd\x25\x9e\x21\x74\x4a\x02\x88\x43\x0c\xf0\xf3\x65\x3e\x40\x63\x06\x59\xad\x12\xae\x94\xad\x6c\x2f\xf3\x1a\x8d\x5f\x6f\xd3\x9f\xb5\xaa\x85\x5e\xbe\x12\xb5\xc4\xc1\x89\x7d\x44\x7c\x67\x38\x4b\xf7\x12\x73\x30\xb4\x46\x0b\xc0\xc1\x2e\x9f\x6f\x9f\xaf\x9d\xbd\xc0\xf9\xe7\x73\x5d\xdd\xc1\xdb\xa5\x94\x37\x84\xde\xb0\xdc\x4c\x11\x9a\x32\xe2\xca\xd5\xbe\x66\x26\x75\xc2\x8e\x28\x0b\xe2\xe0\x2b\xca\x7e\xb7\x53\x7c\xca\xfc\x68\xbf\xcd\x27\x57\xf8\x79\x80\x0a\x6d\x76\xe0\xc8\xc0\x31\x83\xbb\x7a\xea\x05\x56\x48\x5f\x47\x30\x06\xf4\x6b\x01\x1c\xfc\xf0\xf0\x50\x2b\xb1\x98\x0f\xd1\x54\x75\x07\x2d\xf6\x1d\xef\x67\xf5\x2a\x46\xa9\x75\x2c\x1c\xc6\x8b\x3d\x09\x4e\x24\xd9\x6d\x97\xa1\x5d\x13\x40\x1c\x4c\xad\xab\x07\xd1\x1f\xd5\x46\x19\x52\xf4\x4a\xaa\x73\x23\xf8\xc7\xda\x56\xc8\x1b\x2b\xfa\xd0\x6d\xea\x0f\x64\x52\x3d\x4f\x25\x4f\x48\x11\x65\x41\x1c\xac\x6f\xa7\x0a\x74\xd1\x5f\x7a\x0a\x6a\xd6\x4c\x35\x87\xff\x71\xc2\x42\xdb\xfb\x59\x37\xc6\x20\xd1\x7d\xe9\x09\xdd\x9d\x97\x91\x82\xe5\x25\x08\xb5\x40\x1c\x42\xad\xf3\x65\x3e\x40\xff\x8d\xc8\x6a\xc9\x61\x0b\x51\x90\x98\x54\x8b\x47\x1d\xc4\x27\xd4\xe9\x24\x57\x33\x15\x76\x31\xf6\x69\x54\x1e\x4f\x8f\x28\x1b\xb9\x1d\x3c\xd9\x47\x5c\x3e\x88\x83\x5d\x3e\x86\xb9\x51\x75\xe5\xd1\x95\x0c\xf1\x53\xa1\x22\x4f\xe6\x3d\x2a\xa1\xb9\x02\xf4\xe6\xdf\xa8\x5b\x1a\x5f\x8c\x3f\x16\x5b\x56\x41\x03\x16\xc4\xc1\xd4\x5a\x5a\xd5\x2c\xbe\x98\x41\xdd\x74\x9c\x9e\x37\xea\x59\x63\xa0\x63\x72\xf1\xfd\xaf\xf2\x01\xe6\xc4\x69\xf7\x86\xb3\x9e\x45\xac\x66\x44\x59\x10\x07\x53\xeb\x44\xde\xfa\xed\x7b\x5a\xc1\x56\x8e\xc8\xe6\xd7\x94\x21\x64\xfc\x02\x65\x0a\x9c\xe6\x99\x57\xb9\xc4\x2e\x5c\xad\x3c\x8b\xbd\xcb\x87\x28\x0b\xe2\x60\x6a\x85\xcd\x54\x78\x55\x75\x91\xc6\xff\x61\x7d\x2c\x7e\xb6\xf9\x0a\x5f\x37\xe7\xfe\xf8\x66\x8c\xfe\x0d\xeb\x07\x2b\xd6\x38\x4d\xec\xd0\x5c\x28\x88\x83\xef\xfc\xa4\xa5\x46\xce\x6a\xe0\x7f\x99\x17\xfb\x39\x75\x05\x3d\x03\xed\x2c\xa6\x15\x45\xa3\x2c\x7f\x7b\x11\xb5\x7f\x9e\x16\xe1\x6d\x06\x84\x5a\x20\x0e\xa1\xd6\xf9\x32\x1f\xa0\xaf\xfc\xc8\x6a\xd9\x65\xe4\x55\xa0\x99\xfd\xc0\x4d\xca\x3d\xfe\x20\xe2\xf7\xcc\x79\x85\xf6\xec\xf7\xe7\x7d\xe9\x0b\x2e\x51\xfb\x41\xde\xe4\xf4\x82\x88\xcb\x07\x71\xb0\xcb\x1f\xb7\xf3\x2b\x89\x7f\x18\x18\xde\x95\xc1\xe9\x50\xff\xda\xde\x4f\x79\xfc\xf3\xe2\x43\x29\xb9\xb6\x78\xc9\xdc\x39\xae\xd0\x4c\xe8\x9b\x08\x88\x83\xaf\x28\x13\x53\xf0\xc3\x69\xfc\x41\x15\x3d\xe7\x51\x42\xd4\x83\xda\x89\xd3\xdc\xa9\xe1\xbe\x58\x45\xe2\xe6\x5e\x1a\x1a\x97\x44\x0a\x9d\x75\x0e\xe2\xe0\x07\x65\x92\x5d\x7f\x29\xce\xce\xf4\x84\x24\x45\xcf\x14\xed\x49\xc8\x85\x77\xd1\x02\xd1\x9b\x15\xbe\x54\x33\xfb\xda\xdf\x9c\x32\xfc\xa0\xc3\xce\x40\x1c\x4c\xad\xf9\x4f\x46\xbc\x19\xe4\x86\x06\x57\xec\xbc\x32\x13\xaa\xf2\x6d\xa2\x2c\x8c\x85\xed\x05\xe2\x12\xd0\xad\x74\xe4\x6f\x64\xd3\x14\x42\x99\x8f\x20\x37\x71\xf4\xd7\x6e\x5a\x0f\x0d\xe4\x72\x13\x49\x3a\x6b\x4c\x1c\x1f\xaa\x90\x7f\x57\x2f\x7e\x9b\x8f\x93\xa3\x4e\xc1\x73\xaa\xf8\xef\xcc\x07\x3a\xaf\x87\xd4\x5b\x3d\xed\x9a\xbb\x7b\xac\xcb\xb7\x0d\x68\xef\xb3\x71\x36\x9d\x5c\xe4\x2c\x57\x3b\xa1\x75\x88\x54\xf4\xbb\xf9\xef\x6c\x83\x29\xe7\x55\x06\xe5\xfb\x9d\x1e\x7e\x84\x36\x6e\xcd\xf2\x1d\xdb\x18\x6e\x01\xfa\x57\x7b\xaa\xba\xba\x29\xe7\x75\x2b\xe8\x23\x26\x61\x99\x0f\x50\x65\xe4\xcc\x47\x94\xdf\x56\x8a\xde\xf5\xcc\x87\x0c\x4b\x56\xf2\xf5\x9a\x96\x9b\x92\x4c\xbf\xe8\x70\x3e\x0a\xb3\x5d\xcc\x21\xaf\x39\x95\x9a\x79\xf1\xef\xa7\x7f\x12\xfb\xda\x57\xce\x2a\x8c\x53\x1b\x2a\xf1\xb7\xae\xad\x0c\x5d\xc9\x4c\xf7\x67\x55\xeb\x90\x09\x70\xf5\xb0\x75\x2a\x6a\x49\x85\x32\x1f\xa0\x9a\xff\x64\x3e\x50\x24\x60\x4f\x9c\xe6\xc6\xbd\x09\x2f\x57\x36\xfc\x36\x7b\x4d\x05\xbe\xae\x5e\xcc\x8c\x56\x5d\xf3\xb7\xe6\xc8\xde\x69\xc7\x29\x92\x21\x48\x47\x0f\xfb\xeb\x87\x5c\x14\x2e\xf8\x43\xee\x65\xd2\x6e\xce\x87\xbb\x95\x44\x77\x37\x9f\x32\xf4\x2f\xbe\xca\x24\x74\xa2\x3e\x10\xeb\x17\xc9\xc5\x3a\x25\xef\xa2\xa7\xc8\x67\xfe\xfb\x26\x05\xe0\x4d\x12\x9a\x59\x1e\x9a\xdf\x3c\xd1\x40\xb9\xb0\x11\x85\x5e\x74\x53\x87\x67\x23\x63\x7e\x3d\x4f\x9d\x9d\xd7\x33\x26\xa6\x35\x93\x05\xe3\xef\x9b\xd4\x82\x37\x59\xff\x96\x1f\xfd\x6a\xc2\x0f\x52\xbb\x6c\x6b\xeb\x9e\x33\x71\x3a\xdf\xf2\x72\x21\x7b\x31\x69\xbe\xaf\x86\x13\x45\x92\x1d\xad\xbe\x7f\xdf\xa4\x13\xbc\x49\xfd\x2d\xa2\xd9\x17\x05\x6f\x73\x35\x8a\x46\xb6\xad\xf8\x6a\x45\xee\x8a\x1c\x10\x1c\xf0\x73\x61\x7c\x74\x44\x29\xa8\xe0\x8f\xe4\xfd\xfb\x26\x23\xe0\x4d\xa6\x11\xc7\x78\x4f\xac\xfd\xee\xb3\xd8\xae\x4d\x79\x43\x5c\x74\xf3\x33\xb1\x03\x06\x31\xee\xb1\x73\x61\x36\x5e\x52\xfb\x19\xfd\xe9\xdf\x37\x99\x04\x6f\x72\x69\x1a\xed\xf3\x20\x37\x6f\xe2\x53\xde\x0b\xa1\x41\xa2\xcc\x89\x04\xc6\xd3\xd6\x1f\x32\xb8\x6b\xa4\x7a\x12\x54\x9e\x62\x3b\xae\xff\x7d\x93\x15\x48\xfb\x7c\xe8\xd2\xad\xd2\x93\xb8\x5c\x70\xb1\x9a\xc9\x6a\x7f\x9a\xa3\x1b\xdc\xf3\xe6\xb4\x2a\x62\x50\x29\xaa\x24\x46\x4f\x03\x9d\x85\xfa\xbf\x79\x2d\x03\x0d\xc5\xff\xb1\x75\x2f\x6d\x13\x49\xae\xed\x0b\xec\x5f\x97\xcf\x70\x33\x3c\xfe\xfc\x1a\x6d\xdb\xc2\x25\x4f\x64\x23\xe0\x15\xd7\x66\xd3\xf7\xed\xac\x85\xa6\xf6\x01\x1c\xec\x2e\xe4\x77\x8b\xc4\x53\x2f\x18\xcd\x33\x48\x2c\x3a\x8a\x36\xeb\x4b\xa6\x75\xf0\x40\x6c\xc7\xb4\xdd\x2d\xd6\xab\x3a\x65\x6c\x8c\x1a\xd0\x6e\x53\x20\x0e\x76\x17\xfa\xd8\x10\x77\xcb\xd6\xa9\xb5\xdb\x39\xdf\x4d\xf7\x93\x4c\x74\xaa\x5a\xeb\xef\x57\xd4\xfb\xb2\xaa\x53\x2d\x8f\x08\xa3\x5a\x8d\xa1\x08\x2e\x88\x83\xdd\x85\x48\x83\x38\xf3\x14\xd7\x27\x62\x4c\x7c\x6e\xda\x0b\xdc\xaf\x5d\xd8\x6b\x39\xc5\xa3\xec\x89\x6e\xd4\x7c\x9f\xff\x93\xfc\x9a\x0c\xb4\x42\x10\xc4\xc1\x3a\xc1\x93\x44\x2d\xf5\xe1\x52\x80\x7d\xf6\xd4\xe6\x94\xca\x15\x7b\xcf\x21\x53\x36\x8b\xe9\xfb\x7a\xba\x97\x89\x64\x06\xbc\x64\x58\x1f\x20\xca\x82\x38\x58\x59\xea\x69\x31\x5b\xe5\x3b\x17\x70\xde\x2c\x90\x84\x96\x64\xd4\xd3\x54\xbc\x7a\xcf\xb8\xc9\x15\xbc\x2f\x2a\xf3\xdc\x86\x23\xf0\x7a\x14\x22\xf3\x01\xe2\xfe\xd9\xe7\xe3\xff\xff\x3f\x07\x3f\xdf\x80\xfe\x71\xff\xc7\x41\xe0\x62\xda\x53\x2c\x09\x23\x3d\x45\x4c\xdf\x32\x93\x68\x44\x9e\x25\xb0\xa9\xfa\xce\x2d\x2c\x32\x48\x7d\x1f\x41\x79\xc0\x6a\xc4\x88\xb8\x7a\x10\x07\xbb\xfa\x6e\x22\xd7\xf7\xd5\x89\x21\x4f\x8a\xb2\x6c\x5a\xd5\x8d\xea\xfc\x3f\x05\x4e\xc6\xdc\xda\xd1\x8f\xf0\x1b\xb2\xb3\xfc\x94\xab\x0c\xed\x85\x0b\xe2\x60\x66\xa5\xfa\x89\x63\x8b\x3b\x6c\xd6\x0e\x51\xef\xb2\x63\xfd\x5c\x5a\x9f\xe0\xad\x22\x52\x89\x0b\x5e\xca\x1b\x92\xd0\xe0\x90\x67\x87\x5e\x9f\x40\x1c\x7c\x53\xe8\x2b\x2d\xed\x3a\x23\x4b\x06\x16\x64\xa8\x36\xd1\xd8\x5d\x55\x6c\x7c\x73\x54\x82\x77\x8f\xc2\xa4\xc2\x7b\x5b\x5b\x7d\x16\xa1\x4e\x00\x71\xb0\x4e\xf8\x75\x31\xd6\x21\x76\xce\xe2\xd1\x43\x34\x6b\x5f\x23\xf4\x0e\xf3\x13\xa6\xe0\xa8\x40\x8a\xb7\x3b\x9a\xcc\x89\x58\xb5\x5a\x52\xc6\x88\xb2\x20\x0e\x9e\x26\xca\xcf\x5c\xb6\xdd\xc9\xd3\xb9\xb4\xcf\x46\x34\x8b\x4b\xaa\x4e\xa7\xf1\x68\xdf\x9e\xa8\xfa\x2c\x80\x96\xce\x52\x36\xc8\x5f\x16\xf1\xe8\x0c\xe2\x10\xc7\x22\x72\x9d\xeb\xd1\x19\x74\x67\x45\x56\xeb\xb6\xe9\x13\x5d\x35\xba\x11\xcd\x75\xa1\xf6\xe9\x43\xe6\xd1\x7c\x19\xcb\xc2\x62\x95\x55\xae\x9b\x78\x1f\xb6\x33\x0d\x1e\x92\xdc\x45\x5c\x3e\x88\x83\x5d\x3e\xfb\x80\xec\xb1\xe0\x62\xa1\x3f\x1b\x01\xab\xd4\xa7\xef\x27\x3d\x18\xa7\x8e\x71\x4f\x6e\x50\x8a\xe9\x0a\x14\x96\xeb\xf3\xaa\x42\x73\x49\x20\x0e\xbe\xac\x79\x51\x50\x15\xed\xa7\x00\xab\x7b\x5a\xe3\xb6\x77\x2b\x59\x93\x5b\x07\x36\x8f\x93\x79\xd8\xcf\xaf\x17\x8c\xf4\x06\x5d\xba\xa1\xb3\x5d\x40\x1c\x4c\x2d\x65\xd6\x55\xad\x55\x8f\xde\x3f\x66\x9b\x18\xe6\xad\x93\x61\xad\xaf\x25\x76\x1d\x9a\x34\x27\x52\x56\x2b\x15\x6e\xaf\x99\x0b\x7b\x22\xca\x82\x38\x58\x27\x5c\x46\xfd\x53\xd8\x12\xfd\x0a\xaf\xe0\xc3\xe3\x3b\x0f\xa9\xf8\x4b\x29\x44\x79\xe7\xf7\x29\xaf\xdc\xfe\x89\xed\x13\xdb\x7a\x47\x05\x8a\x92\x80\x38\xf8\x5e\xee\xb1\xf5\x37\x9b\x84\xd2\xad\xbd\xf0\x2f\xdd\xdb\xa8\x8c\xa8\x22\xcc\xe9\xa2\x20\xbc\x29\xca\x9c\x57\x7e\xf8\xf0\x30\x9b\x40\x04\x5a\x7b\x0a\xe0\x10\x6a\x09\x9c\x4b\x2d\xd0\x13\x14\xb2\x5a\x3d\x0c\x33\xdf\x15\x5e\xe9\xda\xfd\xa2\xbc\x91\xf0\x32\xa5\xe4\x79\x77\x86\x9d\xac\xa7\xbd\x2a\xd3\xe3\xcc\x83\x5b\x6b\x03\x4d\xd0\x8a\x1c\x10\x07\xbb\x7c\xdb\xf1\x52\x81\xac\x23\xa3\x75\x5a\xca\x26\x4f\xaa\x70\xbc\xd5\xe3\x78\x25\xb9\xcf\x55\x02\x64\x52\x59\xb8\x56\x7d\x07\xd2\xd0\x9e\xf3\x20\x0e\xa6\x56\x57\x45\x75\xe7\x8b\xdf\xcd\x6b\x43\x19\x8f\xfc\x8b\x59\x17\xcb\x96\x57\x2f\xf2\x8c\x58\xcb\x6b\x3e\xa4\x4f\x47\x3f\x73\x6a\x83\xfe\x0c\x41\x1c\x7c\xfd\x90\xdc\x83\x94\x51\x87\x40\xeb\xcc\x77\xf8\xf9\x68\x55\x82\x94\x81\x9f\xc8\x99\x17\xb1\xdd\xaa\x49\x7d\x9d\x27\x0a\x33\xd0\x85\xa0\xb2\x00\x0e\xd6\x09\xa4\x0d\xc6\x19\x4b\x1a\x7c\xa9\xba\xd7\xbf\x19\x92\x8d\x88\xa2\x67\xb6\x62\x45\x57\xb4\x79\xfd\x22\xba\x49\xfa\xa1\x90\x1e\x1f\xda\x3a\x02\xc4\xc1\xca\x0a\x65\x78\xb7\x35\xdf\x2c\xf2\x4e\x92\xe6\xe6\xc4\xa0\xea\xf1\x0f\xff\xf6\xc0\x5b\x04\xd7\xbc\x73\x11\x4b\x2d\xe7\xe0\xcb\xfb\xbb\x08\xb5\x40\x1c\x42\x2d\xad\x73\xa9\x05\x7a\x52\x46\x56\xcb\xf8\x8d\x9d\x6c\x7e\x3e\xee\xdd\x19\x15\x4f\x25\x7a\x29\x3f\x5a\xe2\x26\xd4\x6c\x21\xd1\x62\xfe\x36\xdc\xf6\x6a\x97\x9e\xef\xd0\x71\x06\x20\x0e\x76\xf9\xf6\x5d\xad\x4e\xa9\x8d\x7c\x79\x99\x8b\x01\xaf\xe8\x79\x4c\x2f\x25\xba\x6f\xad\x7c\x31\x1e\x0b\xb6\xb5\x0d\x6b\xce\x26\x5d\x83\xfe\x0c\x41\x1c\x4c\xad\x6f\xd6\x0e\xee\xc2\x74\xe6\x2e\xdc\x77\xfa\xbd\x8a\x6d\xe4\x6a\xc5\x4f\xa3\x78\x8f\x68\x3b\x46\x1e\xc5\x5e\xa9\xfe\x8d\xbf\xde\x85\x28\x0b\xe2\x60\x6a\xc5\xc8\x63\x3f\x9e\x0c\x0d\xdf\xa0\xbd\xbe\x2a\xe4\xf8\x58\x86\x5d\x5d\xaa\x91\x30\x83\x5e\x74\xbf\x7c\x4d\xca\xe6\x39\x51\xf8\x0e\xa2\x2c\x88\x83\x75\x42\xee\x9d\x70\x2e\x8e\x34\xc6\x84\x62\xcf\xc3\x50\xdf\xb9\x1c\x37\xc7\x43\x85\xce\x38\xc6\x78\xb7\xa0\xd6\x09\xd7\x5d\x22\xda\x0c\x44\x59\x10\x07\x2b\x8b\x39\x73\x5c\x6c\x93\x56\xa5\x89\x99\x22\x21\xef\x94\xdd\x96\x7e\x25\x91\xab\x23\xda\x90\xf8\xec\xc5\x73\x25\x94\xbe\x9f\xec\x36\x08\xb5\x40\x1c\x42\x2d\xa7\x73\xa9\x05\x7a\x23\x42\x56\xcb\x3f\xd5\xa4\xb6\x35\x03\xbd\xeb\xe0\x3e\x5b\x45\xe2\x74\x21\x4e\x72\xd9\x64\xe7\xa8\x7f\xb3\x73\xbb\xfb\xf0\x45\xbc\x2c\x42\x68\x87\x2a\x10\x07\xbb\xfc\xbe\x3c\xb1\xaa\xc4\xe0\x1a\x3f\xcf\xfc\xd2\xf4\x9f\x8c\xa5\xf4\xd7\x66\xd5\x3f\x19\xd9\xe4\xa8\x06\x6d\xb9\x05\x92\x4f\xb1\x42\xbb\xb0\x82\x38\x98\x5a\x86\x93\xf2\x8a\x2f\x66\x27\xd1\x7b\xad\xe6\x79\x4c\xce\xde\xf4\xa9\x15\xd0\xde\x67\xb5\x67\x1d\x9b\x5e\xd3\xa5\xb7\x2f\xfa\x04\x1d\xf3\x0f\xe2\x60\x6a\xdd\xac\x8c\x14\x5a\xe5\xed\xae\x8d\x5c\x9e\xde\xef\xf5\x79\xb5\xcb\xa0\x84\x43\xff\x73\xeb\xd5\x66\x6e\x5e\x78\xb5\x60\xd8\xcb\x35\x44\x59\x10\x07\xbf\x21\x7a\x76\x5d\xc3\x4e\xbe\x87\xb5\x12\xc6\xe5\x65\x74\xf3\x39\x2d\x27\x0a\x7e\xd0\x4b\x22\x1c\x36\xca\xc7\xbd\x12\x46\x47\xe4\xd0\x9e\xcc\x20\x0e\xfe\x75\xe1\xe8\x32\xea\xc3\x3b\xc2\xd6\xf5\xbd\x45\x5b\xef\x31\xee\xb6\x0c\xcb\xf9\x4a\xd7\x19\x65\x17\xbc\xd9\x60\xc1\x79\x34\xdc\xc5\x8c\x50\x0b\xc4\x21\xd4\x8a\x38\x97\x5a\xa0\x37\x5f\x64\xb5\xa2\x2b\xc7\x2c\x92\xb7\xe8\x08\x2f\x8a\x3b\x46\x79\x94\x55\x85\x7d\x4b\x6c\x72\x67\x31\xf0\x7e\x50\x7d\x43\x35\x35\x2b\xf6\x33\x14\x84\x05\x71\xb0\xcb\xc7\xa9\x5e\xb7\x0f\x98\xd1\x21\x32\x57\xce\x5c\xdb\x1a\xdf\x76\x5a\x0d\xea\xdc\x7b\x67\x9c\x48\x4d\x31\x78\x56\xe4\x48\x75\x0d\x52\x0b\xc4\xc1\xd4\x2a\x2a\x11\x6a\xa5\xc7\x90\x2a\xdc\x23\x32\xdf\xe1\x2d\x9e\xb5\x55\x4f\xaf\xc8\xfc\xf0\x38\x28\x09\xbb\x97\xa9\x86\x9e\x67\x05\x8a\x92\x80\x38\x98\x5a\xda\x27\xeb\xb1\xaf\x42\xba\xf0\xc3\x67\x1c\x30\xea\xdc\xc7\x57\xe6\xe5\x58\x34\x6f\x90\x06\x26\x28\x97\x1e\xaa\x1d\xf4\x30\x41\x9b\xa8\x83\x38\x58\x27\x54\xe0\x3f\xc6\x13\x1b\x78\x96\xd2\x41\x27\x53\x54\x27\xde\x57\xeb\xf5\x70\xe6\x7d\xb4\x13\x81\x3d\x2a\xe9\xd3\x5c\x51\x3b\x42\xe8\x44\x2a\x10\x07\xdf\xea\xf9\xfa\x57\xcb\xe8\x62\x14\x76\x95\x0b\xc1\xd7\xce\x96\x83\x9f\x12\xe0\xa5\x25\x1b\xcc\xfe\x2e\xf8\xec\x47\xf6\x56\xfa\x18\x37\x07\xa1\x16\x88\x43\xa8\x95\x74\xbe\x7d\x3e\x00\x33\x1c\xc8\x6a\x29\xac\x3f\xdd\x46\xfd\x91\xa0\xf3\x8c\xa2\x42\xf6\xd4\x29\xb1\x4f\x70\x9c\xcd\x9c\xc0\x83\x6a\x73\xe7\x25\xa3\x0f\xbe\x83\x12\xb4\x96\x14\xc4\xc1\x2e\xff\x3a\x7b\x5d\xdc\x51\x56\x85\x5c\xfc\x9d\x43\xa1\xa3\xb7\x7f\x28\x71\xa2\xa8\x2c\x8c\x13\x4b\x5b\x06\xf0\x78\x7f\x30\x4c\xa5\x42\xdf\x6c\x40\x1c\x4c\xad\x11\xdc\xd8\x66\x21\x46\x29\xf3\x60\xb5\x57\x62\x8d\x7c\x07\x1a\xa1\xcb\x54\x3b\x9c\x89\xb4\x68\xbf\x63\xd1\x19\xbb\x72\x58\xa0\x03\x25\x41\x1c\x4c\x2d\xfc\x1e\xe7\x27\x39\xd7\x22\x71\xaf\x59\x36\x50\x85\xb9\xd2\x0b\x73\x52\x53\x27\x56\xe8\xae\x3c\x4a\xb9\xb1\x13\xed\xb4\xff\x1b\x8a\xef\x83\x38\xf8\xbf\x96\xf7\x89\x8f\x10\xf3\x27\x69\x6f\x39\x45\xcb\x09\x82\x3b\x8b\xf1\xae\x9f\x3c\x5c\xa5\xea\xf7\x5f\x5c\x2a\x8d\x17\xc0\xab\x82\xf6\x6f\x05\x71\xb0\xb2\x75\x73\xf5\x4d\x94\xe9\x3d\x14\x3f\x93\x52\xee\x87\x4c\xed\x4b\x15\xc7\x9c\x45\xee\x08\x53\x3c\xe5\x0e\xf8\xf3\x58\x7d\x3f\xa3\x12\xa1\x16\x88\x43\xa8\x55\x71\xbe\xcc\x07\x68\x0e\xfb\x9f\xcc\x07\xca\x20\x7c\xda\x6d\xff\x7b\xaf\x55\x5b\x5b\xf8\xc9\x45\x35\xc2\x91\xd3\xa0\xc4\x67\x0b\x67\x42\x63\x35\xf5\x36\x4b\x3d\xe1\xf8\x62\xcd\x9c\x97\x5c\xfe\x7e\xa6\x6f\x13\x29\x66\x32\xaa\x5c\xe1\x65\x91\xb1\x99\x33\xf1\x46\xae\xdf\x60\xef\x72\x5e\x99\xca\xae\x06\xbf\xd6\xf5\x9c\xb7\x94\xe5\xe2\xe2\xa6\x7f\xbf\x04\x12\xe5\x04\xde\xa4\x0a\x6a\x16\x16\xee\x45\x36\xcd\x1e\x91\x87\x2c\x87\x81\x07\x24\xed\xc7\x39\x49\xbf\xce\x0e\x2c\x02\x66\xe9\xa7\xe9\xe9\x6b\x08\xfe\x9b\xc9\x45\x50\x5f\x22\x0f\xf0\xf7\xb7\x49\xe6\x7b\xaf\x4d\x9b\xdb\xd9\x8f\xfe\xf8\x4c\x38\xf1\x76\xbc\xce\xdd\xe4\xbe\xf9\x35\x9d\xea\x61\xd9\xc5\xb1\x74\x1f\x28\x33\x0a\xe2\xe0\x5b\xbd\x9a\x97\xf7\x61\x53\xb0\x10\x32\x8a\x6e\x89\xd8\x69\xe5\x64\x62\xd6\xe8\x33\x1e\x13\x94\x71\xe8\x14\x9e\xd8\xc8\x0e\xbe\x85\xf6\xf9\x00\x71\xb0\x01\x1e\x12\x3c\x53\xc0\x70\x20\xa7\x43\x59\xd6\x61\x19\x1b\xe3\x3d\x36\x34\x25\x35\x1c\xd1\x6c\x78\x29\x34\xf8\x85\xc5\x85\x40\x36\x68\x57\x12\x10\x07\x1b\xe0\x6f\x6f\x5d\x31\x30\x60\xf2\x24\x21\x50\x61\x96\x1a\xe4\xbe\x70\x2b\xcb\x40\xeb\xeb\xe5\x01\xcc\x61\xe3\x22\xce\x86\x4f\x24\x6c\x50\x94\x04\xc4\xc1\xff\xe5\x94\x95\x32\x2e\x57\xa2\x7c\xcf\x68\xd8\xa0\xc4\x57\xf1\xf7\xb0\xcc\xf6\xb6\x96\xf1\x89\xd5\xca\xeb\xe2\x98\x35\x68\xb2\x87\xb2\x62\x20\x0e\x56\x76\xab\x96\x2c\xcb\x7d\x4b\x24\x3e\xc4\x32\x75\x38\x46\x5d\xf1\x25\x29\x61\x78\xad\x99\x40\xf5\xca\xf5\x8f\xb3\xef\xee\xd7\x7c\x81\xa2\xa8\x20\x0e\x31\xc0\x07\xcf\x75\xef\x00\x8d\x99\xff\xb1\x1f\xe7\xa3\x5f\xbd\x25\xa7\xa7\xe2\xfe\xe3\x45\x9f\xb4\xb0\x9f\x5c\x97\xfa\xf5\xfd\xc9\xbd\x88\xb1\x3f\x3d\x8b\x5e\x31\x9f\x7d\xf0\xa1\x3b\x32\x88\x83\x5d\xbe\x4c\xdb\x93\x51\x29\x8d\x2b\xf3\x9c\x15\x6e\xef\xb8\x14\x0a\x05\xf1\xff\x68\x34\x24\xf0\x87\x7e\x5d\xd9\xa7\x91\xfd\x88\xbd\x0b\xad\x98\x07\x71\x30\xb5\xb4\xa3\xf8\x30\x1f\x89\x2f\xf3\x69\x07\xeb\xbe\x2c\x61\xc9\xff\xf4\x90\xfe\x79\xe0\x69\xcc\xd3\x63\xac\xb7\xfb\xd1\xbc\x91\xb9\xcf\xa1\xe7\x07\x00\x07\x53\x4b\xfc\xe9\xfd\x37\x7c\xa6\xf8\x4a\x4e\x02\x79\xe9\x4b\x0c\x49\x13\xb5\x23\xbb\x1f\x33\x55\x48\x29\x5d\xc4\x18\xaf\x05\x86\xed\x40\x87\x87\x83\x38\x58\x27\xc8\xe1\x19\x54\x9f\xa4\xd3\xe0\x92\x5c\x71\xa8\xe3\xd7\xdc\x9c\xc9\x3e\x8b\x98\xa6\xcf\xb9\x1c\x39\x15\xe6\xc9\xbb\x67\x5d\x03\x1d\x1b\x04\xe2\x60\x65\x39\xbf\x86\xd8\xc7\x53\x28\xb7\xf2\x16\xb5\x5e\x7e\x1a\x83\x32\xc5\xe8\xca\xf6\x9b\x8b\xbd\x3f\x72\xb1\xfe\xf6\xec\x97\x3b\x9b\x8c\xd0\x19\xac\x00\x0e\xa1\xd6\xe6\xb9\xd4\x02\xfd\x37\x22\xab\xb5\x65\x9e\xe0\x6b\xcb\xc8\x9d\x18\xff\xcc\x0c\xf3\x87\xe4\x0d\x03\xba\x69\x5c\x1c\x35\xfc\x0f\x17\x4a\x49\xe7\x7e\xdc\x10\x5f\x39\x85\x42\x5a\x00\x0e\x76\xf9\xa6\x1f\x6a\x57\xc4\x23\x3e\x3e\x0d\xd1\x5c\x6d\xb5\xc8\x1a\xfe\x85\xed\x70\x75\xeb\x51\x08\xaf\x65\x40\xf1\xc7\xb1\xba\xcd\x01\xe8\x3d\x1d\xc4\xc1\xd4\xc2\xa6\xc2\xa8\x39\xf2\x9d\x7b\xe4\x4f\xdb\xc9\xcf\xaa\x30\xb2\xbc\x33\xa0\xd9\xf9\xce\xb0\x6f\x7e\xc5\x58\x3f\x9c\x66\x21\x19\x7a\xa1\x06\x71\xf0\xb5\x19\x22\x93\x15\x09\xd3\x1c\x5b\xdb\x3b\x51\x2a\x1e\x77\x55\x33\x79\xb4\xde\x06\x86\xa1\xe7\x8a\x7b\xdd\x3d\xa2\xc9\x30\xe5\x83\x76\x11\x06\x71\xb0\x4e\x78\xf4\x36\x97\x75\xe2\xa9\x5c\x64\x91\xc4\x45\xaf\xce\xaf\xfb\x28\xc9\xb1\xb1\xfa\x8c\xfd\xf9\xf9\x18\x03\x37\xac\xd9\xd4\xf7\x2b\x10\x65\x41\x1c\xac\xec\xcf\xa1\x91\x58\x1d\x06\x9e\xfb\xc3\xb9\xa3\xa5\x54\xea\x46\xbe\x85\xe9\xcb\x96\xb9\xd7\xf5\xb1\xb9\x22\xb8\xf3\x3c\x07\x1f\x42\xb3\x8b\x20\x0e\xa1\xd6\xc9\xb9\xd4\x02\x7d\xe5\xff\x1f\xbb\x13\x1d\xb6\xa3\x93\x0e\x3c\xb2\x62\xfd\x54\xb9\xd9\xe6\xfa\x80\xf3\xd0\x6d\x81\x9a\x21\xdb\x4a\x24\x99\xa3\xc9\x51\x6f\xce\x8a\x1e\x5a\xb3\x0c\xe0\xe0\x1b\x5f\x0d\x75\xff\x21\xf3\x51\xd1\x65\xcc\x52\x50\xe1\xf6\x7c\xa6\xda\xbd\x64\x60\x29\x82\xb7\xfc\x7a\x06\x55\x69\xe7\x7a\xfc\x22\x94\xcb\x07\x71\x30\xb5\x14\x54\xbf\x32\xd9\x54\x7e\x8b\x1c\xc5\xa6\x92\x44\x19\x48\x56\x79\x7c\x9a\xb1\x7f\xe5\xf0\xc9\xf7\xc4\xdd\x86\xa3\x90\x93\xf8\x37\xd0\xf3\x39\x80\x83\xa9\xb5\xb1\x79\x7a\x74\x3f\x3a\xf2\xe1\x8a\x7b\xb3\x92\x88\xce\x5a\x33\x5e\x6d\xb6\x5c\x91\xbd\x24\x63\x62\x37\x6f\x83\x4c\x4d\x16\x74\x9f\x05\x71\xb0\x4e\xb8\xf4\x7d\x65\x3d\xdb\x9d\xdd\x49\x87\xed\xf1\xfb\xa4\x23\xb9\xf1\xc0\x02\x1c\xfd\x27\x8b\xe6\xb3\xab\x4a\x1e\xbb\x6a\x4b\xe2\xc7\x50\xe6\xc3\xe1\x8f\x2a\x7a\x9f\x1e\xe7\x37\x3d\xec\x8b\xdf\xb2\x5e\xcf\xa2\x9b\xbe\xcd\xb1\xde\xf5\xb6\xff\x9d\xed\x56\x37\xf6\xf6\x8f\x4f\xd7\xbf\x33\x1f\x39\xce\x64\xd1\x1a\x7c\x47\xfa\x2e\xe1\xee\xc2\xa8\x26\x81\x2f\x6c\x9e\x37\x0a\x1c\x75\x4c\xd3\xb2\x4c\x5a\x0c\xee\xd2\x12\x90\xfe\x0b\xd5\x13\x96\xe8\xcc\x2a\x26\x3d\x0a\x3c\xed\x37\xb2\x38\x7e\x8c\xa1\x29\x2d\xc8\x79\xa3\x5f\xae\x2e\x3f\xa1\xe5\xe3\x63\x81\x90\x1f\xb0\xcc\x07\xa8\x32\x72\xe6\xc3\xbe\x0b\x05\xbb\x2e\x48\xe6\x1d\xfe\xa3\x57\xbf\xdf\x8b\xe5\x8f\x12\x0d\x70\xfe\x91\xe8\x19\x7e\x3d\xb3\x5a\xa1\x37\xd6\xd3\x99\xfb\x2f\x54\x44\x4c\xe6\x2a\xed\x93\x8f\xfe\xa4\x27\x3f\xaf\x7d\xcc\x29\xb9\x7a\xe8\x1b\x8e\x15\x48\xcb\xdd\xfe\xed\x50\xb7\x81\xd6\x96\xd1\x09\xca\x7c\x80\x6a\xfe\x93\xf9\x10\x86\x67\x3e\x24\x48\xac\x4c\x07\x4d\x43\x93\x7e\x97\x39\x74\x2d\xd3\xd2\x28\x37\x1b\x92\x52\x32\x90\x5f\x36\x7e\x3a\xae\x2a\x78\x93\xbf\xf2\xef\x3f\xda\x0b\x23\x65\x3e\xd0\xe2\xbc\x5f\x08\x33\x76\x5f\xb8\x8e\xed\xbc\x83\xff\xc1\x5d\x81\xa0\x2f\x66\x2a\x9d\x53\xaa\x69\x20\x72\x29\xba\x77\x7e\x32\xf4\xef\x9b\x44\xca\x7c\x0c\xca\x3c\x59\xd2\x28\xe6\xd4\x46\xad\x35\xba\x9d\x81\xa5\xdb\x12\x6f\xad\xd5\x8f\x79\x6c\xff\x43\x9a\xa7\x4c\x7a\xe4\xa3\xbf\xc8\xdf\x37\x89\x94\xf9\x18\xa5\x6c\x13\x0b\xda\x25\x0b\xa3\xc4\x68\x68\xc4\x5b\xd5\x0a\xa3\x6f\x3d\xd5\x5e\xda\xa7\xbf\x9f\xed\xb2\x3d\xf2\xe5\x95\xea\xbd\xbf\x6f\x12\x29\xf3\x21\xdd\x2e\x2c\x25\x15\xeb\xed\x19\xb2\x25\x3c\xa7\x14\x31\x33\xd1\x87\x5f\xea\x7e\x77\x2d\x33\x14\xfb\x8c\x45\xe6\xb9\xba\xfa\xdf\x87\x69\x84\x91\x32\x1f\x33\xce\xef\xba\x1e\x63\x9a\x71\x9e\x48\x4f\x34\xe9\xf5\xdc\x11\xac\x72\x8e\xc3\xfe\xb9\xc5\x5d\x4e\x22\x2f\x86\xae\xa4\xc1\x89\xfe\xf7\x4d\x22\x65\x3e\x66\x1f\x76\x6c\x46\x3b\xbd\xaa\xd6\x31\x69\xd1\x92\xea\xaf\x5a\xb1\x71\x58\x4c\x1a\x57\xac\x21\x0b\x94\x0a\x79\xf9\x95\xa5\xe2\xfd\xdf\x37\x89\x94\xf9\xb8\xcb\xbb\xad\x69\xa1\xa6\x13\xa8\xfc\xa6\xef\x4c\x4d\x21\x68\x9f\xfd\x89\x48\xf5\x15\x3e\xfb\x9b\x1d\x5a\x95\x0b\xfd\x5f\x6e\xfa\xfd\x37\xaf\x65\xa0\xa1\x88\x7c\x17\x92\x76\x89\xe2\xf9\x25\x54\x91\x90\xf6\x61\xa4\x27\xaf\x0c\xc3\x23\xe0\xfd\xeb\x4d\x32\x06\x5b\xbb\x6a\xac\x01\xf9\x2e\xaf\x1e\x68\x8f\x3c\x10\x07\xfb\x03\xb6\xe8\xc7\xc0\xf1\x33\x2d\xc8\xd3\x24\x7a\x8f\xb7\x35\x52\x40\xe6\x9c\x72\x7c\x68\x61\xcb\x21\xce\xeb\x9b\x9f\xb5\x1b\x25\x0f\x2d\x8e\x03\x71\xb0\xbb\xd0\x3a\xd3\x87\xa0\xde\x46\x2e\x2c\x15\x45\xf9\xc8\xf9\xdb\xc9\x97\x73\x9e\x2e\x59\x15\x2e\x92\x5d\x8b\x7d\xa5\x30\x4f\x1f\xfb\x1c\xda\x6c\x1a\xc4\xc1\x3a\xe1\x6c\xff\x9b\xbc\x68\xc9\xd3\x42\xad\x07\x06\x0e\x5f\x8f\x71\xda\x06\xa7\x07\x77\xf2\x56\xa2\x5f\x7a\x4a\xe6\xf1\x9b\xa5\xd1\x40\xab\x44\x41\x1c\x6c\xc7\xb1\xcf\x84\x0f\x3c\x9b\x25\x83\xeb\xb1\xb1\x6f\xf1\x77\x48\x6d\x07\x92\x58\xdc\x6f\xd5\xed\x0b\x75\x94\x3d\x60\x17\xd4\x51\xfd\x61\x0f\xe5\x69\x00\x1c\x2c\xd0\xe8\x69\x45\x48\x7c\xe7\x44\x60\xa9\xe5\xe5\x5a\x99\x67\x4d\xb9\xe4\xd5\x8f\x21\x1d\xb9\x39\xa8\xbb\x7b\x2b\x95\x68\xcc\xd4\x73\x64\x88\xcc\x07\x88\xfb\x67\x9f\x0f\xe1\x73\x65\x3e\x40\xff\xb8\xff\xe3\xb4\x66\x05\xf1\x64\xb2\xc7\x82\xe3\xa5\xda\xd5\x09\xcc\x2d\x94\x3e\xef\x7a\xbd\x4f\x19\xf6\x14\x3e\x7e\xb8\x8b\x97\x77\x95\xfe\xf5\x02\x14\xe7\x04\x70\xf0\x15\xf3\x2e\x73\xaf\x92\xbd\x24\xe2\x1f\xd0\x5a\x52\x4b\x31\xd4\xab\xb5\xa9\x68\x1f\xbf\x93\xb1\xbf\xe7\x66\x93\xc9\xfd\x80\x1b\x13\x3a\x32\x06\xc4\xc1\xcc\x6a\x93\xf8\x6d\x24\xed\x54\x17\x12\xf8\xd6\x26\xee\x5b\x48\x51\x57\xf9\x7d\x7c\xa3\x08\xea\x18\x3a\x39\x2d\xb3\x98\xa2\x6f\x0b\x76\x88\xb2\x20\x0e\xd6\x09\x28\x11\x02\x2e\x75\x1c\x3d\xc6\x95\x3c\xf8\xce\xf9\x6a\xfe\x64\x81\xb1\xf9\x17\x14\xf1\xf3\x97\x6a\x67\xfb\xcc\x51\x24\xd2\xa0\x90\x12\x88\x83\x99\xb5\xec\x77\x3a\x5e\x22\x4b\x90\xde\xa3\x1a\x93\x74\xcb\x0d\x57\x2b\xe4\x07\x8f\x73\xda\xd8\x44\x7b\xf3\x0a\x01\x7e\xe7\x69\x7a\x21\xb4\x75\x04\x80\x83\xef\x35\x2d\xa5\xa3\x75\xaf\xe5\x79\xec\xcd\x41\xbd\x8f\x5e\x85\xc6\xbf\x3e\xdb\xd8\xbd\xca\x77\x99\xa8\xe1\x5d\xe2\x91\xd0\xe3\x67\xaa\x85\x16\x79\x00\x38\xc4\xb1\x88\xe7\xcb\x7c\x80\xee\xac\xc8\x6a\x31\xf7\x19\x08\x7b\xf3\x98\x18\x2f\x19\x73\x13\xad\xd8\x05\xdd\x7a\xc5\x91\xf8\x7b\x8c\x70\xfa\x85\xfc\xeb\x17\xbd\xbe\x0c\xb9\xac\x88\xcb\x07\x71\x30\xb5\x1a\xb1\x84\x08\x49\x79\x8b\x45\xef\xf3\xaf\x17\xee\xf1\x3c\x13\x5e\xb8\x6d\x21\xa8\x1a\x3d\x94\x74\x28\x3d\xf1\xa4\x34\xfb\x67\x27\xa2\x2c\x88\x83\xa9\xc5\x6c\x96\x69\xcc\xdc\x5e\x57\xf3\x3b\xa0\xdc\x6c\x15\x5f\x84\x94\x62\x52\xad\x3e\x4b\xb4\xcc\x82\xe7\x42\x4b\x6c\xdd\xd7\x0c\xe8\xc3\x3c\x88\x83\x75\xc2\xe6\xc2\xcf\xae\x87\xae\xda\x76\xb3\x89\xb3\xc9\x8e\xa5\x7a\x2e\x0f\xc3\x82\x4d\xee\x3f\x16\xc3\x3a\x73\xa7\xfc\x64\x93\x1c\x00\xbd\x43\x82\x38\x98\x5a\xdd\x65\xf8\x94\x5e\x1a\x97\x5e\xca\x5d\xba\xee\xf0\xf8\x12\x8d\x21\x67\xb0\xd3\x1c\x1b\xd6\xfe\xbb\x67\x5d\xb3\x49\x95\xb5\x43\xdc\x50\xa6\x0a\xc0\xc1\xd4\x8a\xf0\xc5\x4c\x28\xc3\x72\x0a\xb9\x36\x49\x4f\xd4\x5b\xee\xfa\x5e\x27\xb4\x1c\x75\x55\xec\x95\x7f\x1f\x4f\x40\x5c\xf5\x3a\x0f\x94\xc4\x07\x71\x08\xb5\xce\x97\xf9\x00\x3d\x41\x21\xab\x55\xaa\x78\xf1\x38\xea\x58\x26\xa6\xb2\x55\x89\xc9\xca\xf7\x70\x40\x32\xf2\x1d\x09\xc3\xf8\xe6\x35\x83\x4b\xc6\xe4\x6c\xa1\x49\xd0\x39\xa6\x20\x0e\xa6\x96\xce\xc0\x6c\x5e\x06\x96\xa5\x07\x1e\xbf\xc3\x55\x2e\x22\x4e\xfd\xe7\x4d\x2b\x15\x2d\x79\xde\x38\xf2\x17\x3f\x0d\x52\xef\xae\x41\x29\x0a\x10\x07\x3f\x82\xfa\xfa\x3b\x1b\xb5\x8d\xe9\xd1\x9c\xbd\x6b\x7d\x4e\xa6\x23\x83\x51\x92\xf3\x44\x83\x6c\x47\xce\xd6\xbf\xe2\x58\x84\x57\x18\xa0\x23\xd4\x40\x1c\xfc\x7e\xc8\x2b\x21\x31\x60\x87\xf1\x7a\x26\xe6\x6a\xf6\xbb\x5a\x65\xfa\x0f\x9a\x69\x04\x6e\xbe\x89\xa3\x04\xfc\x17\x07\x73\xc2\x8b\x9e\x41\xf7\x43\x00\x07\x53\xeb\x37\x8d\x69\xe5\xf7\x94\xf6\x7c\x8b\xcb\xbe\xef\x1a\x0e\x3c\xd3\x52\x69\xef\xd3\x73\x1a\x7d\x30\x7c\x65\xbd\xe2\xad\xbd\x1c\xce\x81\x28\x0b\xe2\x60\x6a\x65\x7e\x78\x67\x21\xeb\x4d\x89\xf2\x98\x93\x47\x7f\x5c\x13\xd3\xa5\x06\xe7\x0a\x6e\x20\x4d\x9c\x14\xdb\xb2\xa6\xf6\xee\x87\x50\x49\x84\x5a\x20\x0e\xa1\xd6\xf9\x32\x1f\xa0\x27\x65\x64\xb5\x64\x27\x47\x43\xb3\x92\x68\x3c\x6a\xb2\x7b\xc2\x14\xba\xc4\xb8\x1f\x72\x58\xaf\xae\x13\x71\xd6\x8e\x19\xd1\x37\x18\xe9\x50\x89\x21\x2e\x1f\xc4\xc1\xd4\xda\xe4\x2a\xb4\xb8\xef\x4f\xd1\x9e\xe2\x7e\x32\xfc\xf4\x54\x82\x59\x5b\x65\x8b\x72\xc5\x60\xc9\xb3\x98\xb9\x51\x33\x91\xb3\x0a\x7a\x26\x02\x71\xf0\x47\x2d\x1c\x17\x63\xe3\x1a\x3a\xfe\xaf\x1f\x48\xde\x7c\x65\xdd\xd7\x31\xaf\xba\x3f\x69\x36\x79\xd6\x8c\x63\x7e\xa9\xa3\xf1\x99\x58\x31\xf4\xa8\x05\xe0\x60\x9d\x50\x40\x58\xf6\x62\x36\xc7\xca\x7f\x6d\x34\xfd\x90\x6e\x5b\x71\x30\x76\xeb\xf1\x17\x14\xc3\x4a\x9e\x17\x23\x5d\x63\xd7\x46\x28\xa1\xb9\x24\x10\x07\x3f\x3a\xca\xcc\xc5\xcb\xa0\x99\xb1\x67\x68\x72\x4b\xf7\x61\xd4\xc4\xc9\xbb\x6e\x0c\xa1\x56\x0a\x45\x57\xed\xda\x75\x5a\x5e\xdc\x5c\xe8\xf0\x05\x10\x07\x53\x2b\x9c\xed\xcd\xa8\x15\xeb\x55\x01\xaf\x09\x83\xb9\x93\xd5\xa8\xf5\xf2\xbb\x25\x2e\xc5\x61\xb2\xdb\x1c\xeb\xdb\xa3\x36\xa3\xbd\x55\xd0\x39\xc1\x00\x0e\xa1\xd6\xf9\x32\x1f\xa0\x37\x22\x64\xb5\x5e\xd8\x32\xdc\xfc\x53\xed\x6c\xa9\x7f\x98\xff\xfc\x1d\x15\x1e\xe7\x50\x19\xd3\xc3\x50\x6a\x29\x42\xdd\xa7\x99\x5f\x6e\x0a\xde\x78\x02\x2d\x51\x05\x70\x30\xb5\x88\x76\x12\x9f\x46\x13\x56\x04\x50\xdd\x98\xea\xbc\x1c\x6b\x2a\x34\x5b\x88\x4b\x34\x12\xf8\xf4\xfe\xfd\x1f\x69\xde\x82\xc3\x04\x50\xaf\x82\x38\x98\x5a\xb1\x61\x89\x95\xdc\x66\x07\x74\x53\xe9\x91\x47\x3a\x49\x8a\x34\xc4\x0b\x68\x5d\x3a\xe9\x7b\xb8\x67\xc4\xba\x3e\xcf\x96\x38\xa1\x35\x9a\x20\x0e\xd6\x09\x54\x69\xc4\xa2\x9c\x8f\x22\x28\x64\xb8\xbb\xaa\xdd\x1f\xe6\x12\x51\x3f\x78\xf3\xd4\x1d\xc3\xb4\x26\xda\xba\x97\x45\x68\xff\x3a\x74\x86\x1a\x88\x83\xa9\x95\x23\x67\x31\xcc\x24\xc8\x99\xbe\x33\xf1\x3c\xc2\x43\x31\x71\xcc\xfd\x08\x87\x78\x5f\xbc\xf3\x6e\x76\xe1\x6d\x03\xaa\xe3\x30\xe8\xe5\x00\xc4\xc1\xd4\xea\x9d\x9d\xe2\xdb\x9c\x5e\x8d\xdf\x19\xd1\xde\x9a\x53\x91\x18\x23\x4f\x5c\xbc\x43\x7a\x9b\x7b\x04\x77\x0a\xab\xb6\xb4\xff\x2d\x2e\x42\x2d\x10\x87\x50\xeb\x7c\x99\x0f\xd0\x9b\x2f\xb2\x5a\x2b\x92\xf5\x5d\xe1\x86\x93\x84\x69\x1f\x83\x82\x27\xfc\xb7\x99\x7b\xa2\x03\x45\x73\xb5\xb2\x86\x85\x5c\xab\x1a\x42\x77\x6e\x40\x27\x65\x80\x38\x98\x5a\xe8\xe9\xeb\x5f\xdc\x75\xa9\x53\x0e\x17\x0f\xd8\x3f\x6f\x7f\xa6\x29\x18\x8d\x0b\xb0\xe3\x56\x6f\x14\xf5\xf4\x0d\xc8\x37\x7b\xe5\x82\x28\x0b\xe2\x60\x6a\xcd\x51\xc4\xe4\xee\x56\x33\xbc\xfb\xc2\x58\x90\x55\x93\xac\x32\xce\x97\xeb\xc8\x6e\x3e\xcb\x3b\x23\xa8\xe4\x89\xa9\xfa\xfb\x30\x0b\x51\x16\xc4\xc1\x3a\x61\x3c\xf3\xc2\x74\x78\x2a\x85\xfc\xe5\x64\x5b\x8a\x2f\x8b\x8d\xbe\x18\x26\x39\xd5\x2c\x81\x9d\x84\xfe\x15\x4f\xc7\x42\x7b\x98\x36\xa0\x85\x74\x00\x0e\xa6\x96\xda\xe5\x46\x5f\x0c\xc9\xe0\xb2\x66\xa2\xa8\x13\x8a\x88\x07\x99\x31\x62\x86\x79\x96\x5b\x14\x99\xa2\xc5\xe2\x2b\x91\x8a\x1d\x50\xc0\x14\xc4\xc1\xd4\xd2\x53\x5e\x6b\x9d\x75\xfc\x75\x92\xca\x46\x4d\xd7\x61\xfb\xcd\xe8\xc3\xf1\x01\xfb\x99\x1e\xea\x34\xc6\xc6\xb2\x4b\x62\xd7\xab\x25\x84\x5a\x20\x0e\xa1\xd6\xf9\x32\x1f\xa0\x19\x0e\x64\xb5\x4e\xef\x0c\xce\xb2\x5c\x14\x3b\x6c\xa8\xac\x3e\x13\xbe\x35\x9a\x93\xc2\xd0\x49\xf0\xfc\x94\xaa\x47\x7a\xb8\xae\x94\x97\x3d\x06\x3a\x91\x0a\xc4\xc1\x43\x90\x74\x31\xb1\xa6\x71\xaf\xbb\x78\x79\x4b\xb3\x69\x23\xa7\xa8\xe3\xab\xf3\x5a\x3e\x13\x47\xfb\xe8\xde\xef\x77\x37\x75\xcc\x34\x81\x42\x90\x00\x0e\xa6\x96\x24\x63\x21\x47\xd0\x1f\x9c\xd9\xc1\xc4\x79\x27\x9f\xae\x3a\xb6\xe2\x07\x3f\xe7\xc3\xe3\x1e\x5f\xd5\x4e\xcd\x29\x1c\xbf\x99\x0a\x4d\x69\x80\x38\xf8\x89\x6f\x97\x58\xbb\x4c\x38\xb8\xee\x28\x51\x4d\x94\x19\xc6\x50\xde\xb3\x0f\xfe\x9a\xe3\xf3\x08\x5b\xe1\xf6\x24\xbd\x5e\xf1\xd7\xfb\x3d\xd0\xb7\x5b\x00\x07\x53\xcb\xfd\xf1\xac\x8b\xff\xd3\x02\x1a\x17\xce\xef\xbe\x33\xf9\x34\x37\xe8\x09\xb7\x25\x14\xe6\xeb\xde\x4a\x33\x39\xca\x7d\xba\xf8\x06\x7a\x4d\x06\x71\x30\xb5\x92\x05\xaf\x98\xb2\x1d\xab\x2b\x2f\xb4\x63\x85\x2d\xe5\x8f\x1c\x66\x8c\xdf\x59\x98\xbb\x1b\x25\xff\x1e\xf7\x5e\x82\x3e\x4d\x39\xb4\xa7\x1a\x88\x43\xa8\x75\xce\xcc\x07\x68\x0e\xfb\x9f\xcc\x87\x30\x52\xe6\x03\xcd\xed\x36\x9e\xc1\x3b\xae\xf1\xde\xd1\xf6\xee\xc8\x86\x89\x30\x26\x21\x75\x7d\x5e\x1d\xb3\xf5\x84\x55\x82\x08\x6d\xe9\x3b\xda\x7f\x3f\xd3\x87\x94\xf9\x48\x99\x3c\x5e\x0d\xc5\x27\x3d\x48\xe2\xda\x70\x23\xc2\xc0\xf0\xa0\xe2\xa2\xf4\xa6\x9c\x8e\x32\xf5\x97\x25\x2f\xfb\x35\x3e\xdf\xf6\xf7\x4d\x22\x65\x3e\x6e\x8a\xd3\x4a\xca\xe5\x7c\xbe\xe8\x68\x66\xc1\x1c\xc6\xc5\x36\x8e\x8e\x2e\x9f\xd0\x20\xc0\xf7\xba\x25\x20\x2c\x28\x7d\xca\x91\xe2\xbf\x99\x5c\x04\xf5\x25\xf2\x00\xe7\xf2\x1a\xc6\x54\xd3\x7e\x58\x9c\x1c\x29\xbc\xf4\xe0\x8f\x78\xeb\x8f\xa5\xf2\x87\xb2\x7a\x3f\x9f\x06\x4d\xb0\xb4\xd4\x89\x25\xbe\x46\x48\x08\xe2\x60\x03\xbc\xe3\x5b\x98\x7b\xc6\xfa\x06\x93\x74\x71\xa1\xe4\x66\xdc\x8b\xce\x56\x0f\xab\x63\xaa\x6a\xc3\x0b\x1f\x1b\x58\x7b\xaf\xd2\x2b\x43\x33\x4b\x20\x0e\x36\xc0\x43\xfb\x9d\xbf\x57\xc5\x65\xfa\xbc\xbc\xfe\x8e\x74\xdb\xc7\xc4\x22\x44\x33\xc9\x57\xd8\xf0\xa4\x02\xe5\xa2\xc0\x1b\x79\x8f\xb7\x5e\x88\xb2\x20\x0e\xd6\x09\x7a\xef\xbc\x30\x8c\xfd\xfa\x1c\xd4\x4d\xd3\x14\x75\xf6\x73\x5a\xed\x66\x30\xb4\xdf\x9e\x28\xf6\x2b\x73\x88\x50\x9c\xbe\xc6\x84\xb6\xf7\x03\x71\xb0\x01\x9e\xd6\xf3\xcc\xf1\x42\xfd\xc3\xa7\x25\xd7\x02\xd9\x45\x29\x7f\x95\xd8\xed\xf7\x1e\xb3\x3b\xa9\x5c\x3a\xb8\xd9\xcf\x9b\x3a\x65\xf0\x01\x51\x16\xc4\xc1\x06\xb8\x02\xfa\xd7\x27\xb7\xab\xef\xe3\x50\xdd\x22\x5a\x47\x8b\xc2\xb7\x6b\xcb\x3b\x68\xd5\xbf\x23\x2e\xb8\x5a\xa1\xd3\x59\x8e\x55\x4e\x03\x1d\x39\x07\xe0\x10\x03\xfc\x7c\x99\x0f\xd0\x98\x41\x56\x0b\xfd\x3d\x63\x58\x54\x91\xeb\x62\xd9\x58\x65\x73\xdc\xee\x9a\xe6\x38\x37\xfb\x4b\x39\xea\xe0\x56\x8c\x6f\xb4\xe5\xb2\xac\xe1\xea\xd0\xf3\x03\x80\x83\x1f\x94\xc9\x5b\xfb\x6e\x19\x97\x70\xdd\xfd\x13\xf5\xe9\x67\x9d\x17\xa5\xec\xb8\xd3\x89\xed\xc7\x79\x97\x0f\xb0\xdf\xf6\x48\xa7\x97\x0a\x20\xca\x82\x38\xf8\x2e\xc2\xee\xcd\xb7\x8f\x07\xfb\xc4\x1e\x7b\xfd\x20\xff\x89\x91\xbb\x3d\x9f\xc3\x13\x98\x56\xd0\x92\x6d\x14\x58\xf9\x52\xd4\x95\x0c\x3a\x17\x0c\xc4\xc1\x3a\xc1\x2c\xb1\xac\x97\x9d\x92\x4a\xb3\xf0\x6b\x4f\xda\xcf\x5f\x6f\xaf\xa0\x46\x99\x58\x68\x7d\xc4\x64\xd2\x76\xea\x7f\x78\x31\xea\x18\x3a\xc9\x0e\xc4\xc1\xd4\xda\xd7\xc5\x2c\xe5\xa2\xed\xe7\xfc\xed\x7a\x91\x90\xad\x78\x66\xdd\xc8\x7e\xc4\x43\x70\x48\xc6\x36\xdd\x5e\x2b\x45\x64\x92\x18\x7a\x90\x06\x71\x30\xb5\xd6\x9e\x9b\x63\x7b\x55\x59\x73\x5a\xe9\xe4\x9d\x7c\xdb\x0d\xaa\x7a\x61\xe6\x33\xae\x6a\x69\x29\xe3\xd2\x2e\xf6\xb5\x45\x6b\x8e\x02\xa1\x16\x88\x43\xa8\x75\xbe\xcc\x07\xe8\xbf\x11\x59\xad\x05\x0a\x99\x16\x5b\x0f\x06\x0e\xd9\xa8\x61\x2a\x47\xf7\xea\x17\x71\x37\x88\x4b\xad\x44\xaf\x28\x72\xbc\x5f\xa6\x47\x4f\x55\xf3\x87\x22\x65\x00\x0e\xbe\x17\x45\x12\xf9\xa5\xe8\xa4\x7b\x72\xd7\x94\x06\x5e\x7d\xea\xd5\x63\x55\x39\xb9\x81\x55\x35\x3d\x99\x96\x39\x97\x1d\xc1\x41\x19\xf1\x02\x51\x16\xc4\xc1\xd4\xa2\x7f\xbf\x74\xc4\x46\xf4\xd6\x38\x8f\xd1\xc1\xae\xf9\xe1\xac\x0c\x85\xe8\x01\xff\x13\x4b\x82\x48\x0d\x7c\xf6\xfc\x9e\x62\xbe\x31\x44\x59\x10\x07\x3f\x96\x8b\x9b\xe5\xd9\xae\x09\xba\x66\x4f\xea\x34\x21\x07\x4e\xf2\x27\x2a\x53\xd7\x84\x12\xa1\xf8\x7b\xcd\xa8\x27\x17\x7a\xe9\x32\x78\xa0\xf5\x6f\x00\x0e\xa6\x56\x4a\xfc\x27\x59\xa2\x23\x42\xbb\x8a\x43\xcd\x47\x82\xd7\xcc\xea\x62\x39\xe9\x83\xeb\x82\xc4\x0a\xdb\x82\x9a\x86\xea\xce\xb2\xa0\xcf\x4d\x20\x0e\xfe\xc4\x8b\xbb\x78\x24\x5d\xd6\xea\xcc\x98\x62\x73\xe7\xb5\x0f\xfb\xac\x12\x0f\x1d\x4e\xee\x2f\x73\x01\x05\xfd\xf8\xb6\x07\xe2\xaf\xb7\xa0\x27\x5e\x00\x87\x50\xeb\x7c\x99\x0f\xd0\x57\x7e\x64\xb5\x86\x7a\x4c\x05\x28\x45\xd4\xbf\xdf\x9a\xf0\xdc\x13\xbd\x11\x8c\xbf\xf5\xe3\x5a\xb9\xa2\x08\x6e\x97\x77\xf4\x95\xa4\x78\x45\x42\xe8\xf5\x04\xc4\xc1\xd4\x42\x53\x7f\x9d\x37\xbd\xc8\x25\xb2\x7a\x8b\xf4\x77\x63\x3f\x77\x78\x77\x5c\xf7\xc6\xbd\x9a\x6a\xd3\x07\x2c\x38\x1f\x89\xef\xa4\x42\x6b\x96\x41\x1c\x4c\xad\xfc\xf5\x13\x26\x86\xcf\xcf\x0b\xca\x59\x2a\x1f\x17\x75\x52\x28\xbf\x3a\xab\xba\x6a\x80\xda\x7a\x43\x17\x57\xe8\x44\xe1\xb2\x48\x20\xa2\x2c\x88\x83\x75\x42\x43\x85\xe6\x11\xa7\x48\xd9\x98\xaa\x3a\x76\x99\x60\xb3\x51\x01\xce\xd0\x70\xe4\xb5\xbe\x81\x6a\xde\xd6\x4d\x26\xc2\xd7\xbb\x37\x11\x65\x41\x1c\x4c\x2d\xd6\x64\x09\x0e\xcc\xe6\x1b\x56\xdf\xf3\x43\x73\x69\x92\x83\x5b\xe2\x1c\x47\x3c\x05\x47\x49\x1d\x26\xbe\x35\x8c\x54\x0c\x48\x33\x42\x99\x8f\xf5\x67\x16\xc7\x9b\x0e\x3f\x17\x28\x44\xb7\x88\x6d\xeb\xb7\x4c\xa6\x8e\xbf\x3e\xda\xf1\x9e\x3d\x63\x3a\x0c\xf1\x2a\xc6\x0a\xcb\xf9\x77\xe6\x23\xef\x51\x4e\xe7\xb4\x3d\xd6\xac\x76\x0a\xdb\x32\xef\x34\xaf\xef\x59\x85\x57\xb7\xfd\x29\xfb\xeb\x0d\x4e\xc2\xaf\x2f\x77\xde\xff\x7b\xd3\xb6\xaa\x02\x8c\xac\x48\xf2\x9d\x68\x9c\x4e\x81\x1f\x32\x02\x14\xbb\xb6\x27\xfc\xd3\x6c\x9c\x2e\xcf\x6d\x54\xbe\x8d\xa5\x35\x6a\x47\xc1\x32\x1f\xa0\xca\xc8\x99\x8f\x99\xb4\x59\x2b\x3b\xa7\x37\x64\x1f\xe6\xa6\xb0\x09\x85\xa2\x66\xa6\x36\x30\xdd\x53\xde\x29\xdf\xd8\x54\x1d\x99\x6f\xd1\xfc\x48\xf2\x2f\x94\xcf\xde\x76\x53\x98\x1b\x8d\x94\xf6\xd5\xe6\x3d\xa9\x0b\x8f\xe5\x8c\x88\x5e\xea\x6e\x32\x0f\x36\xa8\x39\x93\xe3\x78\x57\xf0\x5a\x43\x99\x0f\x50\xcd\x7f\x32\x1f\x5e\xf0\xcc\x47\xf5\xb5\x60\xfd\x82\x90\x76\x5b\xd4\x0b\x6f\xc8\xaf\xd1\x76\x5d\xb9\xc8\x6d\x20\x5c\xdb\x68\x8b\xa5\xdb\x7a\xc9\xdf\xed\xe8\x8a\xeb\x5f\x3f\xe4\x7a\x21\x65\x3e\x3c\x4b\xd0\x97\x22\x5e\x3b\x2f\x6d\x72\x9a\xdd\x9d\xdc\xd7\xf8\x3a\x55\x9c\x97\xa7\x93\x1a\xa6\x18\xd3\x48\x4c\xf2\x70\x8d\x41\xea\xef\x9b\x44\xca\x7c\xe0\x15\x9f\x78\x3f\x3c\x6e\xa3\x70\xf8\xe8\x7c\xf0\x8e\x30\xea\x83\x90\xbd\x1a\xcd\x41\xe4\xfc\x90\xb4\x8c\xf8\xf6\x5a\x65\xe2\xfc\xdf\x37\x89\x94\xf9\xd8\x08\xa0\xc8\x72\x39\x71\xc7\x2d\x7d\x32\xdc\xed\x68\xd7\xbf\xe6\x7b\xb1\x84\x1e\x77\xa3\x66\x75\x23\xd5\xb0\x4c\x3e\x30\xb4\xf0\xef\x9b\x44\xca\x7c\xa4\x16\xda\x79\x2d\x8f\x94\x78\x6d\xe1\xae\xed\x7e\xe0\x6b\x32\x0e\xe3\x8e\x8e\x20\x3e\x94\x62\xf8\xa4\x77\x31\x0e\x25\xc2\xc4\xf1\xef\x9b\x44\xca\x7c\x98\x5f\x99\xc8\xd0\xca\x75\x5f\xbd\x71\xdc\x7e\x77\x13\xf3\x37\xc6\x40\xfd\xb7\x08\x7a\x7e\x1e\xb6\x0e\x27\x31\x27\x26\x7a\xed\xdc\xbf\x6f\x12\x29\xf3\x51\xf2\x8d\x99\x98\x9c\xf8\xc1\xf8\x8f\x41\xfc\x0e\x4c\x6a\x01\xd1\xd6\xc2\xb2\x3a\x23\x8c\xef\xef\x3d\x5b\xf6\xd0\xa7\xa8\x5c\xd5\xfe\xbe\x49\xa4\xcc\x47\x8a\xc8\x45\x0c\xab\x93\x97\x6d\x13\x9e\x97\x26\x0c\x23\x7e\x29\x9c\x7c\xe4\x5d\x69\x77\xaa\x23\xcb\xf8\x58\x68\x26\x7f\x87\xcf\xf9\xbf\x79\x2d\x03\x0d\x45\xe4\xbb\x50\x86\xcf\xed\x70\x93\x77\xa5\x25\xea\xc5\x7a\x8c\xd1\xd7\x7a\xa9\x46\xfd\xc3\xbe\xff\x21\xfd\x80\xe9\x7f\x70\x47\x35\x89\x8a\x56\x0f\xf1\x07\x0c\xe2\x60\x77\xa1\x51\x32\xc6\xac\x34\xb5\x1f\xf6\x67\x5f\xbd\xfc\xf6\x55\xb6\xf6\x6d\x14\x3b\x2b\x17\xaf\xe4\xfe\xf8\xff\x58\x7b\xeb\xa0\xac\xba\x37\xde\x9b\x06\x11\x10\x50\xba\x11\x29\xe9\x46\x1a\xa4\x91\x2e\x41\x1a\x04\x25\x04\x04\x94\x46\x24\x94\x92\x94\x94\x16\x90\x4e\x69\x41\x09\x29\xe9\x50\x04\x69\x91\x90\x4e\xa9\x77\xde\x99\xe7\xde\xe7\x39\x9b\xdf\x9c\xc5\x8c\xcf\xff\x9f\xb9\xd6\xbe\xd7\xfd\x5d\x7b\xaf\xf8\x5e\xd7\x2a\x1d\xa1\x88\x60\x63\x0c\x95\x42\x84\x05\x71\xb0\xaf\xd0\x03\x2b\x9e\x40\x41\x8c\x10\xc7\xa9\xae\xb9\x7c\x35\x3d\xf3\x27\x98\x91\x2e\xb1\x6f\x5b\x2a\x72\x93\x8c\x16\xb0\x68\xa8\x2c\xa0\x8f\x1b\x88\x83\x75\xc2\x5c\x62\x03\x57\x85\x88\xb4\xbe\x4e\x72\x95\x99\x8c\x08\x69\x90\xbf\x07\x85\xa6\xa5\x6c\x8e\x86\x71\x03\x01\x4b\xbd\xc4\x4f\xa8\xd8\x09\x88\x7b\x2e\x85\xf2\x7f\x25\x9d\xdd\xfb\x1a\x87\x7f\x70\x45\x43\xa2\x60\x52\x55\xa5\x3a\xc0\x76\xec\xd2\xfa\xc7\x4f\x6e\x75\xcb\x74\xb7\xfd\x7c\x07\x06\x97\x35\xa1\xa4\x33\x00\x07\x9b\xe0\x04\x76\x47\x99\x29\x05\x99\xd6\x4c\x1d\x23\xc9\xb3\xfd\xc4\x59\x88\xee\x48\x0c\x7e\x7c\xf3\xa9\xb5\x45\x48\x85\xa9\xe2\x3d\x32\x62\x84\xe7\x03\xc4\xfd\x53\xe7\xc3\xef\x42\x9e\x0f\xd0\x1b\xf7\xbc\xb2\xda\xa3\x45\x7f\x6b\xa9\xfc\x92\xac\xa9\xfc\x71\xe4\xab\xf4\x58\x14\x7b\xb2\xd5\xbd\x59\x5f\xca\xe3\xa7\xcf\xf2\x9f\xf7\xf3\xff\x27\x9b\x13\xc4\xc1\x94\xc5\x38\x16\x1f\x40\xca\xc5\x4f\x17\x25\x68\x1a\x26\xe8\xb6\x8f\x1d\x75\x56\x3b\xbe\x99\xc8\x16\x6c\xe0\x6f\x42\x2d\x44\xcb\x40\x8a\x08\x0b\xe2\xe0\x09\x82\x92\x73\x3e\x24\x3d\x75\x67\x2c\xca\x02\xd3\xb7\xc8\xf5\xf8\x29\x2c\x4c\x5d\x2c\xcc\xc4\x4d\xe4\x47\xb9\xb7\x7d\x3e\xa2\x43\x69\xcd\x20\x0e\xd6\x09\xef\x86\x4f\x4d\x64\x7b\xfa\x46\x5c\x57\x5b\xdf\x71\xab\x60\x6e\x25\x8d\x6d\x9b\x34\xca\xa2\x48\x1d\x3a\x2e\xb3\xcc\xbf\x7f\x09\xf9\x9a\x41\x1c\x4c\x59\x24\x35\x6c\xb7\x4e\x2c\xd5\x7f\x4b\xde\x93\x15\xed\xe7\xcb\x1e\x27\x15\xdf\xc4\xcd\xfe\x35\xab\x1c\xdf\x62\x9b\xda\x50\xd8\x07\x9d\x9c\x81\x38\x98\xb2\xc6\xb5\x5f\xb8\x93\xfb\x50\xbf\xb3\xbc\x25\xc5\x14\xed\x23\x9c\xab\xa1\x1b\x11\xc9\x49\xd5\x43\x98\xfe\x98\xed\x0d\x32\xf7\x6e\x1a\x62\xea\x0c\xe2\x10\xd7\x22\x5e\xcc\xf3\x01\xfa\xb2\x9e\x97\x56\xc8\x58\xa4\x61\xca\x81\xd5\x4b\x4f\xa3\x04\xf5\x36\x1f\xee\xc6\x17\xdc\x3f\xc6\x50\x4a\xc2\x5b\xa3\x2b\x1f\x7d\x49\xff\xf8\x08\x32\x20\x83\x38\xb8\xb4\x08\xae\x59\x0c\x0f\xf4\x76\x7c\xb9\xec\xfc\x85\x6f\x5f\x59\xab\x38\xba\xdc\xa3\x8e\xfe\x07\x49\x5b\x85\x92\xf1\xe9\xea\x06\x35\x24\x2d\x00\x07\x93\xd6\x6c\x9a\xeb\x98\x8a\x8e\x35\x32\xbe\xfe\xab\x17\x98\xcb\xfb\x7c\xc5\x6a\x32\xda\x2f\x8e\x0d\xc7\xde\x69\x99\x9e\x0d\xdd\x8a\xab\x43\x84\x05\x71\xb0\x4e\x28\xec\x35\x13\xa4\x0e\x15\x98\xc7\xaa\x60\xd7\xbd\x87\x1e\x45\xb5\xfa\x3c\x2f\xdb\xac\x31\x23\xb6\x6e\xc5\xc0\xf3\x4d\x76\x0d\x54\x3a\x02\xc4\xc1\xa4\xe5\x19\x72\x96\x74\x55\x65\x52\xb9\x54\xf2\x4c\x20\xc1\x6b\xe5\x53\xaa\xc1\xf0\x68\x59\x60\xd4\x0b\xfb\xea\x9b\x4c\xb1\x5f\xe5\x68\xa1\xe3\x43\x00\x07\x93\x56\x12\x4e\xa5\x4e\xf7\xb3\x6d\x3c\xdd\x9b\xa6\xe9\xba\x6f\x52\xb3\x98\x6d\xdf\x90\x97\x3c\xf9\x24\xe7\xd1\x77\xe7\x6b\xd9\x12\x43\x11\x42\x5a\x20\x0e\x21\xad\x8b\x79\x3e\x40\x33\xa8\xf3\xd2\xfa\x76\xfc\xc8\x24\x75\x67\x05\x77\x86\xb3\xcd\xe5\x6a\xf1\xf6\x63\x9d\xb4\x22\x4f\xc6\x62\x54\x43\x82\x8c\x28\x43\xe2\xc2\x54\xe8\xf5\x02\xe2\xe0\xe5\x88\x95\x18\x27\x24\x9c\x31\xf8\x26\x37\xdf\xc8\x32\x90\xbc\xb7\xb5\x2a\xa7\x99\xe8\xd5\x89\x0e\xf1\xf5\x56\xad\xbe\xee\x33\x08\xbd\x5e\x40\x1c\x4c\x5a\x9b\x27\x9f\xf7\x8a\xfe\x94\x9e\xe9\x9c\x1c\xf8\x7b\x52\xb8\x08\x5f\xd1\xe1\xb6\x95\x8d\x41\x21\xb3\x5d\xbf\xf3\xc0\x2a\x91\x0f\xb2\x13\x81\x38\x58\x27\xe4\xa7\x70\x33\x34\xf4\xe1\xbf\x65\x23\xc9\x75\x5d\x0b\x3c\x3e\x8c\x64\x2c\x34\x5c\x21\xcb\x14\xd9\x8e\x50\xbc\x73\xcd\xc3\x11\xda\xab\x05\x71\x30\x69\x71\xc4\x08\x14\xc6\x64\x76\xce\x78\x0b\xd3\x55\x46\x3a\x0e\x23\xdd\xb3\xf8\xed\xfa\xe2\x24\x5b\xf0\x76\xe6\xae\x87\x92\x31\xc6\x10\xb4\x8f\x00\xe0\x60\xd2\x32\xdf\x5f\x2b\x3a\x1d\x1b\x74\x70\x93\x91\xa8\x5e\x46\x9b\x73\xec\xf1\xb5\x21\x0c\xaf\x8d\x19\xbd\xe5\x33\x31\x5f\x7a\x4c\x01\xa5\xa6\x81\x38\x84\xb4\x2e\xe6\xf9\x00\xcd\x94\xff\xc7\xe9\x69\xca\x9c\xd4\x9d\xfd\x96\x4a\x83\xb7\x67\x06\x36\x1d\x77\xbb\x58\x35\x62\x25\x0b\x64\x08\x4e\x82\xe9\x7e\x61\xcf\x65\x24\x42\x27\x7c\x20\x0e\x26\xad\xef\x5e\xf2\x4f\xbb\x0a\x89\x85\xd3\xaf\x3e\xf9\xc6\x77\xc3\xd5\x18\xe7\x79\xbc\x8b\xaa\xad\xbf\x96\x7c\x20\xed\xe5\x50\x1d\x6f\xc8\x49\x03\xe2\x60\xd2\xfa\x98\x7b\x39\x60\xaa\x9b\x7e\x79\x56\x51\xae\x3d\xb8\xe2\x4c\x8c\x8f\x7a\xe0\x1b\x4d\x52\x28\x61\x88\xab\xe6\x97\x4f\x1d\xe5\x01\x50\x22\x1d\x80\x83\x7b\x3e\x9a\xdd\x4d\x9f\x1f\x24\x07\xd2\x25\x91\x7e\x8c\xf1\xbc\x62\xf6\x34\x31\xde\x04\x85\x16\xa7\x8c\x04\xab\xcf\xe2\xd9\x60\xae\x1a\x34\x10\x00\x1c\x4c\x5a\x26\xd6\x92\xb7\xab\x8b\x5a\xc4\xbe\xf0\x4b\xd2\x5b\xef\x7d\x97\x69\x50\xa1\xde\xd1\x44\x9f\x92\x6e\xd5\x88\x26\x17\x40\x13\xa1\x40\x84\x05\x71\x30\x69\xf9\x39\x6e\x34\xaf\xbe\xe5\xc0\xd7\x9a\x69\x96\x30\x96\x5f\x3d\x20\x6d\x5b\xdc\x44\xf3\x95\xbc\x2f\xf1\x00\xed\x4f\x83\xc4\xfa\x1b\x84\xb4\x40\x1c\x42\x5a\x17\xf3\x7c\x80\x56\x44\xe7\xa5\xe5\x65\xf9\x62\xf7\x45\x19\x4a\xb7\xe6\x9d\x43\xfd\x7d\x62\x74\x1f\xb1\x92\xc5\x8d\x31\x0e\x6f\x21\x9d\xd1\x19\x3a\xe7\x36\x95\xa2\xff\x73\xc2\xf7\xff\xe6\xe0\x4e\xb5\x4b\xf4\x4a\xc4\xaf\x26\xdb\xc2\xcc\x85\x0b\x8e\xb4\x5c\x78\xcd\xd2\x86\x33\xbe\x64\xf3\xc8\x09\x26\x51\x0d\x23\xcb\xad\xdc\x80\x9c\x6a\x00\x0e\x26\xad\xd6\x68\xf7\xe4\xc7\xde\x6d\xe3\x2c\xaf\x54\x91\xee\xbd\x4a\x9e\x79\xb8\xd3\x51\x11\x24\xc4\x6c\xba\x5f\x81\x36\x27\x43\xdc\x0b\x7d\xb9\x40\x1c\xac\x13\xc2\x54\xc8\xc3\xef\x77\x26\x68\xeb\x07\xa4\xbc\x5b\xcf\xa6\x9c\xf7\xb1\xc8\xc2\xdd\xb3\x97\x3a\xb4\x3b\x76\x7d\xc9\x16\xd2\xc5\x8e\x08\x0b\xe2\x60\xd2\x72\xa0\x0b\xf9\xe0\xb4\x4c\xb9\x89\x47\xe3\x22\xaf\xb0\x88\xf1\xca\xc6\x75\x3f\x9c\xc6\xb7\xbb\xbc\x4b\x49\xcf\x66\x3c\x71\x16\xba\x48\x0e\xc4\xc1\xa4\x45\x61\xf3\x40\xc5\x02\xaf\xe3\xa8\x46\x90\x99\xac\xb5\x38\x58\x3d\x90\x24\xf0\x41\x4c\x31\xba\x31\xed\xf4\x6e\x92\xdb\x56\x7b\x0d\x42\x5a\x20\x0e\x21\xad\x8b\x79\x3e\x40\x2b\xdf\xf3\xd2\x22\x0c\xe6\x0a\xef\xbb\xf7\xd4\xc0\x7d\x6f\xec\x6e\xc3\x50\xd9\x89\x63\x58\x84\xfd\xd3\x7b\xe6\xc3\x9f\xd7\xd9\xa8\x23\xbe\xbf\x3f\x83\x7c\x3f\x00\x0e\x26\xad\x53\xb9\x67\xad\x9e\xad\x48\xa8\x78\x25\x29\x59\x85\xfc\x9d\xbd\x96\xf2\xc2\xc1\x59\x68\xa3\x42\x39\x76\x3c\x42\x3d\x99\x5d\x50\xb2\x17\x88\x83\x49\x8b\x20\xbb\xbf\xe8\x92\x9a\x15\xca\xc8\x6e\x9a\x5f\x37\x51\x8f\x62\x58\x16\xfa\x98\xec\x4c\x7b\x9f\x6b\xd5\xe5\x32\x0e\x55\x76\x28\x47\x13\xc4\xc1\x3a\x41\xc0\xc6\x94\xc1\x15\xfb\x5d\x9e\x40\xef\x3b\xd9\x36\xc5\xcf\xb2\xfc\xeb\xf4\x0e\xe4\x37\x52\xb1\x5a\x6b\x1d\x5f\x51\x1b\xf8\x42\x33\x43\x10\x07\x93\x56\x7a\x62\x8d\x10\x5e\x56\x12\xf9\x25\x14\x4b\xcf\x59\xf4\x8f\x9c\x2c\x19\x21\xd7\x32\x38\x1f\xee\xf6\x5e\x2a\xcc\x32\x53\xad\x83\x36\xd6\x41\x1c\x4c\x5a\x34\xb3\xdb\xf9\x91\x4a\x06\x0f\x7a\xd3\xc8\xa8\x1b\xf4\x8e\x0f\xdb\xe6\x9f\x2c\x9b\x3f\xbf\xec\x5a\x71\xbd\x74\xb2\x3d\x5b\xb2\x02\x21\x2d\x10\x87\x90\xd6\xc5\x3c\x1f\xa0\x1d\x8e\xf3\xd2\xea\x6e\x99\x88\x69\x3f\x5a\x39\xa9\x4b\x5e\x0e\xc7\xff\x3a\xd3\x8f\x2d\x58\x1c\x68\xb7\xc7\xf0\x6c\xf9\x45\x39\x61\x2c\x17\x45\x2e\xe2\xe7\x83\x38\x98\xb4\x72\xdf\x0e\x64\xb1\x7c\xbf\x42\x45\xe1\xd4\x38\x77\x39\x36\xee\xc1\xde\x81\xcb\xd9\xea\x38\x5f\x56\xc6\x6a\x56\xba\x72\xec\x95\x63\x44\x58\x10\x07\x93\xd6\xf0\xa3\x35\x3c\x2f\xb5\xa8\xed\xcb\x98\xd7\xde\x59\xe8\x7a\x6b\x14\xed\xbb\xc7\x06\xaa\xe0\xfb\x46\x57\x6d\x7c\xe7\x48\x3c\x80\x76\xc0\x41\x1c\xac\x13\xa2\xb3\x7e\x8f\xbf\x25\x55\xa1\xdc\x53\x6c\xbe\x57\x6a\x9e\xf4\x94\x40\x1e\xf5\x8d\xe0\x4f\x62\x8b\xd3\xfb\xbb\x3f\xad\xc6\x03\x09\x11\x61\x41\x1c\x4c\x5a\x8f\x6a\xa9\x45\xc5\x66\xab\x1a\x2c\x3a\x4e\x9b\x7a\x36\x23\x87\x0d\x7f\xfe\x49\xb8\xbb\xf8\x76\xd1\x85\xf4\x17\xb6\xd2\x3d\x3b\x2b\x44\x58\x10\x07\x93\x96\x7b\xfe\x27\x65\xe9\xfb\xe9\x9c\xd9\x6a\x57\xe3\xcd\x7f\xde\x38\x6a\x1a\x90\x4c\xae\x5d\xa6\x13\x18\x5c\x5b\xb5\x56\xc6\x96\x63\x47\x48\x0b\xc4\x21\xa4\x75\x41\xcf\x07\x68\x0f\xfb\x1f\xcf\x87\xdf\x39\xcf\xc7\xcd\x9c\x2a\x24\x06\x25\xbd\x79\x77\xb6\xc3\x7d\xaf\x1e\x69\xfc\x95\x09\xfe\xc9\x90\xe9\x5a\x61\x66\xde\x4d\xab\xe1\xde\x77\x15\x7f\xbf\xd3\x77\xce\xf3\x41\x20\x68\xa6\x79\xb2\x9e\x24\xc1\x9b\x31\xb4\xa2\x67\x6d\x22\xf5\x30\x12\xf9\x13\x0d\x29\x1d\x8a\x40\x5d\xc1\x4b\x8b\x76\x52\xaf\xbf\x6f\xf2\x9c\xe7\xe3\xee\xa1\x66\xc1\xc0\x94\xec\xe5\x4f\x03\xc1\x56\x3b\x8d\x3d\x62\x15\xd7\x84\xe2\xca\xf3\x6d\x8d\x35\x3e\x7c\xb6\xcd\xb9\x52\xf5\xeb\xbf\xd9\x5c\x04\xf5\xe5\xf9\x01\xfe\x3c\x28\x9d\xb2\xc9\xdc\x5c\x1d\x3b\x11\x2d\xb7\x84\xd6\xc9\x1c\x93\x31\x4d\xb6\x61\x86\x92\x69\xcb\xaa\x7b\xf2\x87\x9d\x35\x54\xcc\x09\xc4\xc1\x06\xb8\x8f\x4f\x3c\x7f\xb7\x86\x8c\xce\x96\x08\xf3\x81\xb3\x8d\xe9\xeb\xac\xd5\xb7\xcf\x13\x4e\x07\x63\x1b\x71\x74\x02\x16\xab\x13\x1e\x21\xc2\x82\x38\xd8\x00\xa7\x8e\xde\x14\x21\x37\x6b\xbb\xc4\xdc\x70\xd5\x2d\xc1\xa4\x6d\xf3\x1a\xc3\x53\x1d\xfc\xf2\x35\x0c\xe6\x6c\xdf\x29\x1c\x8f\x58\xa8\x36\x31\x88\x83\x17\x25\x75\xbb\xb1\x8b\x27\x38\x84\xc1\xbf\xe7\x7e\x48\x1b\x24\xfe\xa6\xb7\xc3\xf2\x9a\x57\x46\xd0\x51\xe5\xc8\x97\x13\xc9\x00\x54\x75\x44\x58\x10\x07\x1b\xe0\x54\xc6\x8c\xe6\xed\x3b\x4d\x98\xc8\x19\x2f\x5e\x10\xef\x74\x6a\x8b\x62\x6e\xb9\x19\xf3\x91\xf5\xbf\x11\x92\x20\xdb\x94\x39\x1c\x43\x84\x05\x71\xb0\x01\xde\x6f\x4e\x71\xe5\x7e\x0b\x63\x3e\xd5\xca\x51\xa0\xbe\xa1\xeb\x6f\xb9\x2f\x8d\x24\xf1\x58\x82\xf6\x2e\x43\x82\x43\xbc\x38\x19\x44\x88\x01\x0e\xe2\x10\x03\xfc\x62\x9e\x0f\xd0\x98\x39\x2f\x2d\xdb\xfa\xbb\xcb\xb5\x38\xad\x62\x1d\x97\xa5\x44\x62\x52\x51\x2b\x6f\x88\x2a\x7d\x9c\x53\xad\x53\x27\x8b\x53\xe3\x8c\xb0\x61\x11\x42\xfc\x7c\x10\x07\x93\x96\xfe\x6f\x22\xb6\x77\xe5\xc4\xf6\x9b\x9a\x3a\x0a\x45\x1c\xe5\xf4\x52\x68\xeb\xdb\x14\x87\x6e\x33\xa7\xef\x8c\x6e\xef\xca\x3f\x6a\x44\x84\x05\x71\x30\x69\x5d\x66\x2b\x69\x52\xb4\x8c\x94\xe0\x11\x1b\xa9\x0a\x65\x77\x55\xfe\xe8\x55\xbf\x85\x71\xfd\x52\xd1\x20\x3f\xf9\xcb\x10\xeb\x16\x28\x49\x09\xc4\xc1\x73\x33\xac\x65\xdc\xf4\x1c\x5e\x69\xb5\x6a\x6d\x29\xbc\x3f\xad\xe1\x7a\x5a\xae\x68\xef\x56\xaa\x4f\xd8\xd2\x23\xb4\x5d\xe4\x5e\x96\x06\xe5\x66\x00\x38\x98\xb4\x08\x5a\x67\x91\x9c\x8f\x9d\xec\x3d\x2e\x3b\xdb\xcb\x1a\x63\x11\x8a\x95\x87\x79\xe2\x2e\x39\x70\xb8\x53\x57\xcb\x64\xab\xcb\x41\x03\x01\xc4\xc1\xa4\xf5\xb4\x78\x6b\x39\xc3\xb3\x20\xdf\x79\xc5\xc4\x88\x90\xd6\xc0\x41\x31\x32\xf4\xfe\x99\xb7\x21\x83\x3b\xe7\xa5\xad\x54\x0c\x47\x54\xa8\xd4\x2b\x80\x43\x48\xeb\x62\x9e\x0f\xd0\xbb\xf1\xbc\xb4\x0e\x63\x18\xae\x59\xf0\x7c\xdf\xbd\xcf\x67\xf4\x95\x0d\x99\xec\x8b\xa3\x89\xd2\x13\x2f\xe9\xfd\xf5\xc9\x70\xb5\x31\xc6\x27\x1f\x12\x10\x3f\x1f\xc4\xc1\xa4\xf5\xb2\x29\xbf\xa9\xf6\x9d\x9a\x0d\xa5\xd0\x8a\xd0\x9c\x9c\xb6\xff\x55\x9d\x17\xd1\xb2\x5c\x33\x53\x4e\xdb\x92\x1a\x48\xa8\xc4\x50\x75\x22\x10\x07\x9f\x96\xf4\x78\x79\xeb\x2d\xb6\x6a\xba\xc6\x5c\x4f\x27\xec\xb3\x30\xbf\x1b\x23\x36\x73\xe5\x71\xd0\xeb\xc0\x3f\x36\xaf\x7e\x3d\xc4\x82\x66\x3b\x20\x0e\x7e\x11\x2d\xc6\x35\x2a\x93\x63\x4e\xe9\x95\x03\x2a\x87\xc7\xbb\xb9\x3f\x30\x1f\x12\xb4\xb4\x98\xff\xbe\x21\x19\x19\x13\x15\x42\xa2\x12\x88\x08\x0b\xe2\xe0\x6f\x2d\xc5\xcb\xb8\x9e\xd2\xcf\x47\x48\xf8\x36\x69\x13\x68\xd9\x89\x1f\x5a\x1a\x36\x75\x84\x3a\x1b\x3f\x57\xdb\x51\x4d\xd4\x5e\x83\xe6\xe7\x20\x0e\x26\xad\x78\x36\xcd\x16\xfc\xce\x76\x69\xdf\x52\x49\xdb\x5b\x62\x5c\x1f\xe9\xee\xd8\xe9\xea\x58\x69\x9a\xd0\x84\x16\x63\x16\x87\x9f\x91\x20\xa4\x05\xe2\x10\xd2\xba\x98\xe7\x03\x74\xca\xff\x3f\xd6\xe9\x05\x36\xee\x0a\x6f\x3d\x5d\xdc\x33\x71\x7a\xc9\x76\x72\x3e\x48\xcd\x36\x53\xf7\x28\xb1\x98\xf5\xae\xce\xf8\x27\x75\x7f\x73\x83\xd6\xe9\x00\x0e\x26\xad\xfa\x9e\x86\xad\x76\x6c\xc6\x63\x24\xc6\x12\xbc\x97\xe8\xd7\x9b\x2b\x5e\x09\x07\x4a\xca\x3b\x12\x0a\xca\x69\xe5\x72\xa8\x86\xf2\x20\xc2\x82\x38\x98\xb4\x44\xd5\x3e\xf2\x3e\x69\xd0\x7b\x63\x7e\x3d\x25\xae\x5b\x76\x97\x65\x45\x55\x06\x35\xa6\xd6\xe5\x54\x66\x7a\x54\xf1\x56\x31\x25\x74\xcf\x35\x88\x83\x75\x82\x37\xfd\x6e\x1e\xb2\x8d\xba\xe0\x3d\xcd\x4c\x3d\xad\x83\x85\x1b\x62\x83\x85\xb4\xf4\xab\xd2\x1d\x82\xca\x69\x89\xec\x7c\x32\x28\x88\xb0\x20\x0e\x26\x2d\x19\x86\xae\x9c\x03\xbb\x1b\xcd\xf3\xe4\x2e\x4b\xc9\x5c\x6f\xb1\x76\xdc\x8c\xcb\xf5\xa3\x58\xe2\xbd\x0b\x06\xd3\xe4\xe9\x37\xfb\x20\xcf\x47\x45\x56\xe6\xf0\xea\xcd\x37\x5f\xc4\x9f\x11\x04\x48\x9b\x63\x5f\x0b\xaf\xf4\xf7\xea\xd0\x3d\x58\x7c\xb6\x72\xd0\xf0\xb6\xd9\x54\xe1\xdf\x9e\x0f\xdb\x57\x9a\x33\x96\x55\xb7\x43\x82\xb4\x92\x32\x34\x0c\x88\xed\x93\x42\xac\xab\xcd\x93\x53\xca\xd2\xea\xa9\x22\x55\x15\xbc\xff\x7d\xbb\x07\x87\x43\x63\x33\xe1\xc4\xaa\xb9\x1c\x2b\xc9\xb7\x9b\x18\x03\x9b\x09\x69\xa5\xe6\x0a\xdd\xb7\x9b\x09\x29\x93\xad\x3f\x1b\x36\x85\xc1\x3c\x1f\xa0\xc8\xe7\x3d\x1f\xb8\x4f\xbe\xce\x08\x5e\x19\x4f\x2a\x20\x52\xf0\xe8\x64\x69\xed\x73\x4e\x7a\x96\xff\x62\x53\xca\x92\xeb\xcb\x83\xbc\x49\xda\x16\x8f\x7f\x7b\x0c\x45\xbb\x57\x1f\x5d\xca\x8c\xdf\xc5\x25\x8d\x60\xa2\xdc\x54\xb1\x8f\xbf\x59\xc9\x57\x35\x40\x94\x30\x13\x51\x8d\x3b\x7b\xb2\x06\x79\x3e\x40\x31\xff\xf1\x7c\x34\xc3\x3d\x1f\x07\x9d\xe3\xcb\x3b\x9e\x0a\x3f\x98\x37\x22\x8f\x8c\x58\x5b\x8e\x32\x45\x1e\x98\x50\x6a\xee\x0b\xb0\xde\xd3\xa5\xcc\xf4\x4f\xb0\xf8\xeb\x49\x6e\xf3\x39\xcf\x07\x85\x37\xe6\xef\xfe\x3a\x36\xcf\xc0\x02\x0c\xbe\x2a\xd9\xe4\x70\x37\xcf\x67\xde\x71\xbc\x34\x4a\x36\xfe\x23\x58\x3f\x63\x1a\x83\xff\xbe\xc9\x73\x9e\x0f\xfd\x3d\x8f\xa9\xf9\x7a\x32\xa1\x23\x12\x97\xe8\x6c\x6d\x97\x6b\x97\xd0\xc2\x49\xb9\x47\x1c\xb1\xd7\x43\x05\xaa\x2f\xb5\xbd\xb9\xf9\xf7\x4d\x9e\xf3\x7c\x44\xfe\x40\xf7\x41\x27\xa0\x6b\x0e\x1d\x33\x92\xf6\x5d\x4c\x17\x44\xaf\x38\x15\xb1\xd9\xa6\x7a\x50\xb0\x1d\xf2\xe3\x18\x4d\xb3\xf8\xef\x9b\x3c\xe7\xf9\x40\x4d\xbf\xf7\x42\xf7\xbd\x14\xa9\x7b\x1c\xa3\x92\xe6\x84\xc4\x58\xbc\x7e\x47\xe9\x56\x3f\xbe\xd2\x6b\xa9\xac\x51\xb5\xb1\x11\xf2\xbf\x6f\xf2\x9c\xe7\xa3\x38\x9f\xfb\x1a\xbf\x21\x9d\x9f\xc6\xf3\xcd\xfc\x5a\x2b\x03\x43\x31\xf4\x37\x8f\x39\x03\x44\xda\x3a\x51\x08\xff\x18\x70\xe4\xff\xfd\xa5\x39\xcd\xe7\x3c\x1f\xd3\x67\xb7\x84\x2a\xed\xe2\x58\x38\x49\x1f\x26\x20\xf3\xf1\xeb\xa0\x56\x48\xd1\xbe\xd0\x78\x87\xef\xfb\xa6\x59\xca\xc7\x13\xa3\xf4\xef\x9b\x3c\xe7\xf9\x20\xc8\x7a\xf4\x5b\x89\x69\x89\x88\x63\x49\xb9\xaa\x7c\xd6\xba\x59\x17\xfb\x16\x0d\xba\x4c\x11\xdb\xf4\xc0\xd6\x82\xf8\xf0\xea\x9b\xff\x66\x59\x06\x1a\x8a\xe7\xbf\x42\x23\xbe\xbf\x5e\xb4\x07\x47\x3c\x60\x73\x6e\xf0\xb8\x73\x8a\x63\xb1\x77\x5f\x13\x57\x2a\xd5\x58\x0c\x67\xfa\xd2\xd3\x1f\x77\x77\xb8\x20\x63\x33\x80\x83\xa7\x71\xdd\x22\x65\x57\x9c\x3a\x8a\x93\xb0\x8d\x4c\x55\x63\xed\x8e\xc4\xdf\xc8\x18\xf2\x26\x0c\xce\x0f\x75\x8f\x72\x3b\x88\xe8\x81\xb2\xc3\x40\x1c\xec\x2b\x74\xd5\xe1\x27\xe6\x90\xf6\xc6\x76\xb1\xf9\xef\x85\xe5\x2a\x63\xe5\xdb\x44\x7a\x13\x92\x0e\xb9\x31\xfa\xdb\xb5\xef\x96\x07\xec\xa0\xbb\xeb\x41\x1c\xfc\x62\xe1\x97\x43\x6b\x84\x0b\x9a\x13\x06\xf1\x61\x34\x59\xca\xea\x43\x92\xaf\xe5\x22\xe6\xbe\xbb\xe6\xef\xcf\xa5\x3c\x77\x8c\x18\xd7\x41\x84\x05\x71\xcf\xa5\xd0\xfe\x1d\xb6\x62\x19\xa9\x28\xb2\x99\x22\x56\xfe\x47\x46\x3e\xb3\x18\x8e\xc8\xa6\x17\xf7\xa5\x44\xd3\xad\x79\x07\xad\xda\xf1\xb2\xc8\x51\x28\x97\x0d\xc4\xc1\x9e\x56\x22\xd9\x7f\x41\x86\xdf\xc2\x27\x92\x95\x4c\x2c\x84\xaa\xeb\x32\xfe\x40\x73\x58\xf7\xaf\x63\xbd\x77\xfd\x06\x53\xcf\x7e\xb3\xb4\x20\x3c\x1f\x20\xee\x9f\x3a\x1f\xcd\x17\xf2\x7c\x80\xde\xb8\xe7\x95\xe5\x1c\x27\x81\x7f\xa3\x49\xf8\x36\x66\x98\xd5\xb1\x2a\x26\x53\x85\xc3\xaa\xd0\xe7\xba\x88\x4f\x6c\x6c\xa8\x6b\x4d\x5d\xd5\x0e\x36\x88\x5f\x0f\xe2\x60\xca\x4a\x67\x24\x10\x34\x6f\xc6\x13\x8d\xef\x3f\xc8\xe9\x19\x39\x6e\xeb\xca\x41\x17\xc1\xb9\xf5\x6b\x64\x2e\x86\x60\x8a\xb9\x79\x0f\x32\xa1\x83\x38\x98\xb2\x12\x29\x7f\xbd\x34\x4a\x43\xcf\xb2\x23\x7d\xad\x42\x4a\xf2\x36\xb6\xec\x69\xa8\x34\xde\x8a\xc9\xb0\xdf\x0f\xb5\xf9\x94\xda\xfa\x3d\x44\x58\x10\x07\xeb\x84\x3d\x19\xa2\x6c\x11\xf9\xaf\xdb\xc1\x92\x2f\x03\x6f\x98\xd8\xfb\x5e\xea\xfe\x13\xf0\x65\x2f\x84\xb8\x51\xec\x68\xef\x65\x85\x35\xb4\xab\x0b\xe2\x60\xca\x12\xb0\x78\x44\x7c\xda\xac\x1b\x5e\xa0\x34\xa4\x53\x91\x2c\xcc\x65\x4d\xa6\xad\x6e\xf2\xf5\x39\x32\x87\x12\xc1\x53\x6c\x1e\x3e\xe8\xe4\x0c\xc4\xc1\x9e\xf6\x03\x9e\xce\x6a\xcb\x25\x91\x3b\xbb\xc5\x81\x5f\xab\xa7\x90\xe2\x88\x7e\xd9\x88\x6f\xeb\xbf\xcf\x53\xd0\xa6\xcc\xb0\xae\x98\x10\x47\x4c\x9d\x41\x1c\xe2\x5a\xc4\x8b\x79\x3e\x40\x5f\xd6\xf3\xd2\x32\x48\xb8\x43\x9b\xec\x93\x11\xf2\x69\xfa\xbe\x92\x95\x29\x16\xf7\x4b\x61\x11\x24\xf7\xef\x3a\xb9\xb3\xcd\x82\x5d\xe6\x29\x97\x55\x11\x3f\x1f\xc4\xc1\xa4\x15\x45\xfa\x20\xfe\xee\xf3\x03\x4c\xe6\x5d\xb1\x0d\x92\x69\xb1\x74\x5c\xa7\xb3\xea\xc9\xbc\x3c\x81\x41\xfe\xeb\x77\x91\xce\x06\xa1\xc9\x28\x88\x83\x49\xcb\x59\x59\x2d\xac\x3a\x80\xed\xc5\x07\x83\x6f\x9e\x54\xc6\xa2\x9d\x7f\x3c\x7e\x7d\x11\x43\xa1\x92\x41\xee\x54\xc4\x9f\xb5\x7e\x00\x65\xf2\x81\x38\xf8\xae\xc7\x49\x47\xac\xe6\xe6\xc7\xd8\xa1\x66\xe6\x4c\xf5\x0a\xf9\x18\x72\xde\x28\xb4\x36\x39\x91\x98\x68\xd1\xe8\x97\xe6\xa9\xb1\xde\xd0\xae\x07\x80\x83\x49\xeb\x97\x98\x6d\x7a\x4c\x87\x52\x6b\xf8\x65\x2c\x7b\xb7\x94\x03\xee\x5d\xe6\x5f\x85\x56\xef\xf7\x07\xe8\x7a\x67\xb3\x04\x0f\x29\xa0\x6b\x83\x40\x1c\xec\x69\x79\x25\xee\x0f\x9d\x04\xda\xcb\x86\xdd\x7f\x1f\xd1\x64\xe2\x68\x51\x91\x8c\x67\xa4\xf5\x48\xe9\xba\x53\xc7\x03\x89\x5b\xcf\x90\x7e\x22\xa4\x05\xe2\x10\xd2\xba\x98\xe7\x03\x34\x83\xfa\x1f\x47\x5c\xbc\xe6\x72\xe9\x7b\x6f\x86\xa6\x8d\x24\x35\x3a\x2d\x18\x1b\x66\xd6\x13\xa3\xa9\xd8\xaf\x63\xc7\x46\xf8\x84\x72\xce\x12\x42\x26\x74\x10\x07\x93\x56\xc4\x88\x8d\xfd\x28\x56\x5d\xc8\x02\xeb\xc8\x67\xe9\x3b\x0d\xe5\x3b\xcf\x55\x0e\x48\x54\x34\x54\xa8\x2b\xea\x9c\xb6\x8a\xf7\xf1\xa1\x1c\x32\x00\x07\xbf\xcc\x15\x3d\x59\xbf\xa9\x04\x5b\xe6\x41\x52\x01\x8f\xc2\x4f\x51\xf3\xb5\x49\x75\x81\xcc\xe1\xe7\x19\xca\xc9\x93\x57\xab\x23\x69\xa0\xb0\x20\x0e\xd6\x09\x24\x6d\x5c\xee\xb4\x2a\x7d\xe3\xe8\x44\xd5\xa1\x21\xc4\xdf\x37\xd7\x1a\x89\x72\x59\xcc\x9f\xd2\xa7\xde\x2e\xc3\xc0\xc7\xce\x84\xce\x7a\x41\x1c\x4c\x5a\xd3\x48\x6a\x1b\xa5\x83\x5c\xbb\x75\xfb\x16\xe2\xd5\x26\x07\x5b\xa2\x3d\xee\x39\x2c\x61\xad\x13\x68\x6e\xe8\x31\xeb\x79\x91\x76\x88\xb0\x20\x0e\xfe\x3d\x14\x15\xf9\x70\xad\xc6\xc7\xcd\xa5\xe6\xd9\x33\x71\xbd\xa8\x57\x68\xf5\x4e\xdf\x43\xc7\x6e\x0d\x31\xe6\xba\x35\x6c\x0f\xdb\x36\x43\x77\xbb\x00\x38\x84\xb4\x2e\xe6\xf9\x00\xcd\x94\xcf\x4b\xab\xf8\x9e\x31\xd6\xe0\x68\x0f\x32\x95\x02\x12\x11\x99\x16\x71\x43\xa4\x68\x9b\x7c\xd6\x1d\xde\xe6\x4e\x37\xbc\x40\x82\x40\x34\xa8\x12\x2f\x88\x83\x49\x8b\xa9\x7e\xd8\xe7\xea\x53\x21\xa7\x74\x51\xfd\x5b\x37\x33\xf6\x7e\xb3\xe9\xaf\x6f\x8f\x16\x60\x9b\x04\x75\x2e\x14\x23\xa9\x8a\x43\xc5\x5d\x41\x1c\x4c\x5a\xc6\x8e\x0f\x87\x59\x4e\x95\x17\xf9\x46\xc6\xd2\x0e\xb7\x3f\xd7\x1d\x67\xde\x4f\xbb\x47\xbf\x34\x55\x8e\x9a\x63\x1a\x31\x35\x7b\x1f\x11\x16\xc4\xc1\xed\xb5\xcf\xbb\x6a\x6e\xd0\x8f\x1d\x26\xe7\x3f\x59\x63\x4b\xbe\x6b\x72\xa9\xfc\x8b\xaf\xd1\xa3\xbd\x57\xa7\x71\xa6\x09\xdb\x5a\x97\xa0\x64\x4a\x10\x07\x93\x16\x85\x62\x4a\x96\x69\xf8\x6c\xc3\xa0\xda\x16\xda\x0a\xbb\x02\x39\x36\xb7\xf0\x17\x8c\x91\x1d\xe6\x93\x49\x95\xd5\xb1\xd6\x50\xe8\x1a\x3d\x10\x07\x37\x17\xd6\x1b\x1f\x66\x24\xff\xb6\x71\xfe\xf9\x91\x26\xa7\x20\xb0\xd6\x21\xd9\xd1\x79\xea\x87\x58\xe8\x6e\xb5\x0d\xea\x78\x99\x86\x33\x42\x5a\x20\x0e\x21\xad\x8b\x79\x3e\x40\x2b\xa2\xf3\xd2\xba\xdc\xe1\xc4\x1d\x97\xa3\xb7\x99\xbf\xce\xf3\x21\x78\xb0\x6b\xa0\xdf\x00\x2d\x82\xea\x9d\xfe\xfa\x5e\xbb\xa5\x66\x18\xf7\x4b\x24\x68\x4f\x19\xc0\xc1\xa4\xf5\x26\xcd\xe8\x4c\xeb\xcd\x9a\xea\xf5\x13\xdd\x3a\xc1\xe8\xbd\xa5\x38\xe5\x52\x39\xf6\x20\x4b\xa5\x57\xf9\x63\x39\x2a\x18\x54\xc4\x88\xb0\x20\x0e\x26\x2d\x1c\xb1\x8e\x32\x26\x89\xe8\x62\xa7\x62\x5d\xf4\xa8\x00\xa7\x49\xe9\xd7\x5f\xe3\x3e\xb5\xb7\xc9\x4e\x4e\x2f\xd1\xb1\x59\x8b\x41\xfb\xf5\x20\x0e\xd6\x09\xd8\x0e\x37\xc7\x3d\x12\x8d\xd3\xbf\xb1\x5c\x13\xd3\xd6\x96\x2d\xb1\x5a\x79\x72\x1b\x77\xb0\xf4\x91\x79\xf0\x5b\x9e\xf7\x95\x5d\x57\x10\x61\x41\x1c\x4c\x5a\x41\x4b\xe3\x4c\x21\x7b\x1a\x2f\x06\xf5\x16\x50\xb5\xbb\x0a\xb0\xc5\x1c\xfc\xc4\xe8\x8a\xcc\x9c\x66\xab\x7f\x64\x04\x0e\x7c\x81\x66\x05\x20\x0e\xbe\xa9\xca\xd6\x57\x1c\x98\x4d\x86\xbb\x64\x27\xbb\xc1\xe6\xdb\xff\xc3\x26\x3a\x74\x44\x98\x52\x74\xe7\xe4\x47\x64\x88\xc6\x13\xca\x58\x84\xb4\x40\x1c\x42\x5a\x17\xf3\x7c\x80\x56\xbe\xe7\xa5\x75\xb6\xf1\xed\x86\x6d\xc8\xca\x4b\xce\xf2\x60\xc3\x34\x2e\x95\x18\x76\x15\x54\x49\x5e\xe3\x22\xf1\x07\x55\xf2\x16\x98\x19\xc5\x50\x9a\x32\x88\x83\x49\xcb\xee\x78\x50\x6b\x78\x43\xa8\xfb\x95\x83\xd1\x96\xa1\xa8\x19\xd9\x46\x5e\x22\xc3\xef\xdc\xa3\xe8\xa3\xd7\x25\xd8\x83\x2f\x36\xf7\x11\x61\x41\x1c\x4c\x5a\x3d\x75\x5a\x55\xb6\xae\x9f\x67\x63\x3f\x31\x48\xb1\xfe\xca\x7f\xb8\x7d\xe3\xd1\x20\x55\x97\xc2\x0e\xa6\x8c\x30\x4f\xe2\x1f\xc5\x6e\x28\x05\x1c\xc0\xc1\x3a\x61\x96\x95\x38\x9a\xbf\x71\xbf\x08\x3f\x85\x81\xce\xf4\x36\x4a\xce\xef\xb5\xf7\x25\x6a\x84\xda\x4f\x74\xf2\xbe\xcf\xcf\x4e\xb7\x0b\x42\xb6\x5d\x00\x07\x93\x16\x73\xf8\x63\xec\x76\x46\xea\x95\x97\x7c\x5e\x56\x03\xae\xd3\x8b\x48\xf9\x21\x86\xee\xad\x74\x36\x15\x96\xef\x16\xaf\xfd\x7e\x02\xd5\x52\x02\x71\xb0\xa7\xc5\xcc\xab\xbe\xbc\x55\xef\xe6\x57\x31\xfe\xf8\x5d\x6f\x27\x77\x0a\xf7\xa0\x06\x85\xab\xc4\x8d\x39\xed\xc2\xd7\x8e\xae\x65\x79\x6a\x08\x69\x81\x38\x84\xb4\x2e\xe6\xf9\x00\xed\x70\x9c\x97\x56\x7c\x35\x6a\x82\x2a\x87\xf9\x78\xb5\x91\xb4\x59\xf4\x1c\xf2\x3b\x4d\x82\x14\x64\x2e\xc3\x22\x31\x25\x8c\xec\xc8\x07\xd7\x9b\xa2\x11\x3f\x1f\xc4\xc1\xa4\x95\x52\x98\x29\x49\xc1\x1c\x9e\xf6\x74\x9f\x23\x60\x2a\xba\x37\x50\x8c\x89\xe3\x96\xcc\x4f\x69\x66\x31\xd2\x27\x4d\xe4\x3f\x90\x68\x10\x61\x41\x1c\x4c\x5a\x31\xad\x75\xa7\x4d\x3f\x59\x17\x88\x84\x6e\x4e\xbb\x9d\xdc\xcf\x6b\x89\x13\xa6\xca\xb1\xeb\xfd\x74\xfb\x19\xd7\x97\x92\x68\x86\x23\x44\x58\x10\x07\xeb\x84\x27\xf4\x61\xe8\x16\x0c\xc2\x94\xc2\x74\x27\x1a\x89\xda\x2b\x22\xed\x97\xb8\x84\x16\x2b\xac\xc2\xbf\x7f\xfc\x65\xa3\x68\x14\xea\x83\x08\x0b\xe2\x60\xd2\xea\xb6\xa5\x8b\x79\x3b\xc9\x7f\x26\x10\x7a\xfd\xa9\x27\x9a\x5b\xfe\x17\x81\x87\xef\xab\x92\x5f\x58\x23\xcf\xbd\xa9\xa3\x72\x17\x84\x2e\xba\x02\x71\xb0\xa7\xed\x6c\x9b\xa1\x38\xed\xb6\x9d\x7c\x68\xc4\x61\xf2\x38\xaa\x35\x39\x57\x52\xcc\x69\x9a\x31\x76\x07\xad\x73\x17\x93\x93\x51\x43\x06\x21\x2d\x10\x87\x90\xd6\x05\x3d\x1f\xa0\x3d\xec\x7f\x3c\x1f\xcd\xe7\x3c\x1f\x99\xb2\xd5\xa9\x05\x3c\xd1\xe4\xd7\x96\x0a\x17\xab\x58\x59\xad\x7f\xba\xca\xe7\x8f\x77\x09\xae\x5e\x76\x23\xad\x5f\xf8\x7c\xe3\xf2\xdf\xef\xf4\x9d\xf3\x7c\x14\xab\xd5\x30\x1f\x36\xba\x77\x5c\xfd\x8e\xa5\xfa\x50\x45\x65\x42\x2d\x62\x25\x5d\xf2\x9e\x46\x65\xe3\x42\xd0\x61\x79\x64\xe7\x8b\xbf\x6f\xf2\x9c\xe7\xa3\xd9\x87\x23\x23\xc9\xf5\xa7\x52\x9b\x3a\x7a\xd7\x3b\x6f\x57\x19\x6b\xd9\x63\xe4\x97\x48\xce\x7a\x84\x42\xb7\xbf\x6f\x73\xf2\xdb\xff\x37\x9b\x8b\xa0\xbe\xfc\x1f\x75\x3e\xa8\x88\xcc\xe6\xc9\xfa\x6d\x4c\x08\xbf\x9d\x50\x13\x5f\x49\x71\xe9\x98\x3c\x5b\x7e\x18\xde\x14\xa3\x42\x9c\xff\x56\xf2\x15\x54\xe8\x16\xc4\xc1\x06\x38\x31\x7b\x84\x34\x5d\x9d\x44\x1c\xdd\xcf\x17\x61\x99\x33\x21\x71\x7c\xdb\x11\x1c\x5a\xc4\x6d\x7a\x52\xaf\x2d\x25\x68\xfe\x88\x41\x9e\x0f\x10\x07\x3f\x98\x27\x48\x90\xe9\x27\x26\x90\xc9\x79\x9a\xb5\x87\x52\x36\x25\xb2\x6b\xa0\x22\xe0\xed\x49\x36\x9c\xfc\x13\x97\xd2\xe1\x84\x39\x15\x9a\x44\x01\x38\x58\x27\x0c\x9d\x91\xd7\x1d\xac\xd2\x4b\x18\xca\xcf\xc7\xee\x7a\xfb\x4c\x2a\xa4\x2a\x19\x25\xd7\xa0\x75\x0c\xcb\x59\xcb\x55\xd7\x73\x42\x65\x03\x40\x1c\x6c\x80\xc7\x9a\xa2\x53\x5f\x6e\x75\x5f\x2c\x8a\x8c\x63\x0d\x88\xc5\x24\xea\xaf\x4b\x98\x77\xe3\xc4\x99\xa6\xe2\x17\xb0\x7e\xb0\x15\x59\x8d\x08\x0b\xe2\xe0\x85\x69\x17\x5d\xbd\x33\x16\xdd\xaf\x92\x47\xe1\xf1\x8a\xde\x96\xee\xa5\x65\x0f\x3c\xb6\xf6\xeb\xec\x78\xcc\xbc\xe5\xac\xf9\x5b\xea\x03\x62\x80\x83\x38\xc4\x00\xbf\x98\xe7\x03\x34\x66\xce\x4b\xeb\x52\x4f\xbd\xef\x47\x24\xee\xe7\x34\xec\xef\x94\x9d\xf0\x63\x1d\x4b\xb2\x9a\x1f\xca\xb6\xdc\x36\x2f\x7c\xbb\x56\x75\x47\xed\x2e\x94\xed\x00\xe2\xe0\x95\xed\xd4\x78\xb6\x52\xc2\xd0\xde\xf4\x2d\x88\xf4\xec\x9b\x7f\x52\xde\x2a\xbc\xd3\x4f\x25\x5d\xc4\x14\x95\x62\xad\x6b\x82\x3e\x58\x0f\x2d\xff\x01\x1c\xfc\x36\xc3\x55\x7f\xa2\x59\x24\xda\x03\x4a\x91\xa1\xb2\xa1\xfb\xf2\x61\x92\x1a\x33\xca\xcc\xda\x82\x0d\x35\xda\xad\x5a\x6e\x21\x59\xd0\x25\x47\x20\x0e\xd6\x09\x8e\xca\x24\xac\x7d\xa9\xcf\x58\x62\x6f\x2c\x53\xfa\x94\x3b\x49\x25\x7d\xe7\xbe\x75\xc4\x29\x6b\x28\xe4\x94\xee\xb6\x7a\xab\x91\x0a\x11\x16\xc4\xc1\xa4\x25\xd6\x22\xb6\x79\xcf\x75\xcd\xd2\x03\xff\x89\xd1\x60\xd6\x2d\x34\x35\x75\x51\x2d\x3c\xa9\x31\xc9\x0c\xc9\xc9\xf9\x7b\x8b\x5f\x46\x10\x61\x41\x1c\xdc\xfc\xf4\x20\x48\x2a\xcc\x7a\xf4\x13\xe7\xc6\x08\x1e\x4a\x7f\xea\x0c\x17\xa3\x00\x0b\xae\x5b\x57\x02\xf9\x4b\xe7\xe0\x84\xee\xf8\x67\x08\x69\x81\x38\x84\xb4\x2e\xe6\xf9\x00\xbd\x1b\xcf\x4b\x8b\x3d\xc9\xbc\xfb\xcd\x0e\xab\xa7\x81\xc4\x8d\xa9\x91\x0c\x69\x54\x92\x3f\xa1\x69\xbb\xdb\x9f\x24\x5c\x08\xdd\xba\x9f\x6d\x4f\x41\x3b\xcc\x20\x0e\x26\x2d\xe7\x92\xe4\xdb\x38\x2b\x77\xbf\x05\x05\xde\xb5\xbd\x4f\x35\x2a\xba\xa1\x68\x26\x6c\x58\x7a\xaa\xd9\xdb\x2d\x94\xa8\x90\x71\xf7\x23\xb4\x0d\x08\xe0\x60\xd2\x72\xa8\x31\x6c\x23\x5f\xdd\x33\x79\xe3\xa5\x41\x44\x84\xc1\x70\x8d\x82\x77\xa4\x73\x25\xa8\x56\x89\x5c\x77\xea\x78\x8d\x89\x45\x1c\xb2\xa4\x03\x38\x78\x82\x8a\xd6\x23\x6f\xec\xab\xad\x1d\xa1\x39\x2d\x0a\xa8\xb7\x63\xe2\xac\x3c\x83\xd5\xf2\xb7\xcc\x3c\xb7\xbb\xd0\x87\xe8\x3d\x57\x7b\xa0\x04\x15\x00\x07\x93\xd6\xf3\xbb\xb7\xe9\x87\x97\x7f\x9e\x6c\xb0\x1a\xe4\x7c\x08\x1f\x7f\xf8\x4c\x7a\xb3\x30\xf0\x18\xc5\xc9\xde\x5f\xdb\xfb\xe6\x36\xe3\x30\xe4\x02\x04\x70\xf0\x9a\xc7\x1c\xbf\xc8\x02\x38\xa7\xf2\x65\x93\xee\x87\xa0\xce\x17\x1d\xe8\xf4\x5e\xcd\x1d\x5d\x15\x50\xbe\x42\x95\x5a\x70\xc6\x5c\x35\x8a\x90\x16\x88\x43\x48\xeb\x62\x9e\x0f\xd0\x29\xff\x79\x69\x8d\xc5\xee\x46\x48\x7a\x32\x7b\x67\x34\x7d\xb8\xc7\xc5\x9e\x69\xd6\xfb\x03\xf7\xcb\xea\xbe\x3e\x93\x0b\xcd\x5c\x90\x3a\x5b\xd7\x2d\xc4\xcf\x07\x71\x30\x69\xb1\x2d\x68\x19\x89\xe3\x7a\x1e\xe2\xd9\x33\x5e\xad\x15\x28\x4a\xdf\x8e\x6d\x35\xed\x71\xb4\x2a\xd9\xcc\x66\x4a\xe7\x0c\x21\x87\xc2\x82\x38\x98\xb4\xd0\xed\xe8\x85\xcd\x76\x0d\xbf\x0e\xf0\x79\xc4\xa9\x1f\x3a\x37\xe0\x6d\x7d\x41\x12\x5e\x5c\xe2\x4c\x79\xff\x49\x90\xff\x13\x25\x94\x59\x0a\xe2\x60\x9d\x20\x2c\x6e\xaa\x35\x2f\x79\x1a\x14\x90\x39\x5d\x77\x36\xf6\x82\x56\x03\x85\xc6\x33\xa7\x09\xe3\xc3\x19\x71\xcb\x48\x8d\x98\xfb\x09\x22\x2c\x88\x83\x49\xeb\x2d\x43\x24\xcb\xb2\xe3\xde\x11\x1b\xab\x4e\x50\x0d\x01\xb5\x77\xad\x70\x65\x9e\xd1\x3a\x96\x12\x93\x0a\xf2\x59\x97\xde\x6f\x2f\xc8\xf3\xf1\x74\xe7\x03\xff\x06\xee\xa6\xd8\x17\xb1\x47\xf4\x48\x86\x1d\xad\xf5\x13\xd6\x56\x8b\x0f\x7b\x7d\x31\x2b\x88\xa3\xa5\x9d\xc7\x9e\xff\xdb\x3d\x60\xd3\xe7\x5c\x5e\x12\x28\x8f\x59\x84\xe9\x38\xe6\x57\x60\xfd\x92\x1b\x1d\x89\x87\xe2\x3e\xc9\xf7\x57\x36\x74\xb8\x57\x5e\xf2\xda\xfd\x0b\xb5\xa0\xd9\x74\x79\xd7\xe2\x1d\x4c\x69\x6d\xf4\x29\x3b\x43\xb0\x2e\x2f\xec\x41\xa9\xb6\x6c\xe9\x03\x73\xc1\x4b\x54\x23\x53\xa1\x0f\x61\x9e\x0f\x50\xe4\xf3\x9e\x8f\x55\x85\x33\x3f\x83\x37\x4c\xd7\x85\x13\x09\x5d\xd1\xb4\xed\xea\xc2\x9e\xbc\x0b\xba\x62\xf0\x5e\x08\x9d\x82\xce\xfd\xfe\x61\xc3\x87\x7f\xa1\x2a\xf7\xea\xfb\x3e\x05\x4b\x3b\x19\xd5\xcb\x13\x1c\xf4\xa7\xba\x3d\xfa\xf6\xd4\xc1\xe8\x6b\xd2\x7d\x74\xb3\x2b\xbf\x82\x6e\x3b\x4d\x43\x9e\x0f\x50\xcc\x7f\x3c\x1f\x48\x72\xb0\x19\x27\x6b\x5b\x19\xf2\x38\xfa\x89\x61\xd1\xda\x03\x94\x9d\xc4\x12\xd2\xb0\xd5\xe3\xc8\x16\x17\xf3\xbb\x4f\x5b\x04\xf9\x62\x6a\xc5\x36\xff\x7a\x92\x8b\xc4\x03\x9f\xe4\x76\xfd\xec\x53\xc0\x0e\x24\x96\x8d\x4d\x8e\xfe\x6a\x9f\xa1\x59\xf2\x72\xa2\x80\x2c\xd7\x72\xab\xe3\xc1\x9f\x31\x8f\x88\x7a\x05\xbd\xbf\x6f\x52\x1c\xde\x24\xd2\xd5\xb7\xd1\x3f\x5f\x8e\xbc\x79\xa9\x5c\xfb\x48\x7f\x76\xe3\x60\xd5\xb2\x9e\xfd\x45\x8e\x13\xab\xa1\x43\x3f\xbd\x71\xc8\xc6\xdf\x5f\xb4\x82\x64\x00\x6f\xd2\x51\xdf\xb5\xa0\xd1\x5b\x62\x85\x37\x6b\xc5\x99\x2d\x4e\x03\x4b\x4b\x25\x91\x94\xc9\xab\xa9\xed\x4f\xbd\x4c\x97\x76\x92\x74\xfb\xdf\x37\xe9\x06\x6f\xb2\x42\xad\xf2\x74\x25\xac\xe9\x09\x7d\x5f\x87\x82\xfa\x0f\x0d\xdd\x68\xa9\xc6\x8d\x4d\x53\x09\x29\xba\x2e\x31\xe6\xdb\x35\x2a\xd4\x7f\xdf\x64\x34\xbc\xc9\xe0\xb3\xdc\x74\x3e\x9d\xd3\xeb\xd7\x7a\x2d\xd5\xf1\xef\xa8\x0a\x19\xff\x2e\x48\xa9\xdc\x0c\xcb\x0e\x4d\x41\x36\x4d\x4a\x6c\x30\xfb\xfb\x26\x53\xe1\x4d\x7e\xff\xe5\xef\x60\xa2\xfa\x91\xba\x4d\x6c\x75\xae\x39\xf2\x8e\xd1\x4d\x54\x1e\xfe\x08\x13\x9c\xd4\xe0\x38\x1f\xca\xc1\x00\xdf\xac\xbf\x6f\xb2\x0e\xde\x64\x46\xcb\x71\xdd\x5c\xf4\xc4\xe3\x48\xbc\xe3\x99\x21\x9f\xd0\x33\xc3\x53\x76\x62\x1a\x61\x46\x2b\xdc\xe1\x27\x49\x6f\x49\x26\x36\xfe\x9b\x65\x19\x68\x28\xfe\x8f\xaf\xd0\xd7\x93\x13\xca\x5b\xaf\x12\x67\x17\x6b\xf1\xf1\x9c\x92\x62\xf8\xae\xfc\xfe\x68\x3d\x88\xed\x25\x8c\xf7\xa1\x98\xf7\xd7\x3c\x74\xa7\x05\x88\x83\x7d\x85\x8e\xfc\xce\xda\xbb\xda\x32\xcb\xc4\xaf\x38\xb0\xc7\xfd\x92\x51\xed\x6c\xd5\x7c\x25\xfc\xcc\x96\x49\xfb\x0b\xf3\x0c\xf9\x06\x2f\x94\xd3\x0a\xe2\xe0\xf5\x55\x6b\x48\x8b\x5e\xf1\x2c\xec\x5c\x9e\x28\xb4\x46\xe3\xb2\xae\xfa\x1d\x20\xbd\xf2\xe2\x4b\x42\xe4\x54\x3c\x97\x63\x12\xfa\x65\xa8\x7c\x08\x88\x83\xdf\xb4\x5f\x60\xe7\xf6\xfa\xc3\xfa\x34\x96\x91\x52\xda\x13\x53\x5e\x9e\x41\x82\x55\x66\xd1\x06\x87\xa2\x42\x63\x2b\x2f\xcb\x65\x46\x7d\x44\x58\x10\x07\x7b\x5a\xbe\x08\x3a\xcb\x84\x4b\xbd\x3f\x3d\xee\xdb\xfb\x84\x91\x52\xa2\x05\xed\x48\x3e\x6e\x3f\x2a\x7d\xab\x64\x39\x90\xa9\xce\x60\x0d\xad\x4d\x41\x1c\xec\x69\x71\x99\x97\xab\xfb\x32\xf0\x49\x7d\xcf\x30\xfb\x79\x07\x9f\xd2\x6d\xe9\x23\xe5\x0c\xaa\x90\x9d\xe4\x0a\xff\x76\x61\x69\x9e\x70\x43\x78\x3e\x40\xdc\x3f\x75\x3e\xfe\xff\xf7\x39\x78\x7e\x03\x7a\xe3\x9e\x57\x96\x23\xfb\xab\xc1\x18\x8c\xe4\x9a\xde\xa8\xf7\x85\x3d\xe4\x16\x9a\x95\xa3\xaf\x9b\xcd\xcc\xe3\x6e\x91\xf9\xe9\xb8\xb6\x1f\xf7\xbe\x81\x16\x24\x00\x0e\xa6\x2c\xf2\xa0\xb2\x7a\xd1\x82\xc8\x1e\x01\x5f\x0d\x1d\xfe\xd7\xae\xee\xec\x4d\x18\x82\xc2\x3f\x7b\x90\xed\x9c\x51\x88\x65\x44\x55\xa0\xe3\x0d\x10\x07\xfb\xaf\xc6\x57\x6b\x15\xf5\xae\x71\xd8\x7f\x76\x66\x7b\xbf\xd8\x4d\xf1\x4b\x0a\xf7\xac\x51\x36\x40\x1d\xe9\x91\x65\x21\x6b\x9d\x57\xac\x09\x22\x2c\x88\x83\x75\x42\x0c\x65\x31\x41\x99\xdf\xc0\x19\x36\x8f\x23\xbd\x54\xd8\xb6\x0a\xc7\x9b\xb9\xbe\x4a\xd4\x48\x7c\xea\x13\x92\xe3\x15\x16\x7d\x05\x68\xa3\x10\xc0\xc1\x9e\xd6\x7c\x4e\xf2\x35\xb3\xc4\x01\xfb\x62\x6a\xc2\xf4\xaf\x1f\x0f\x4c\x4c\xfd\xac\x25\x25\x8e\x84\x08\x46\xbd\xfa\xb2\x3b\x27\x6f\x28\x43\x82\x05\x70\xb0\xa7\x3d\xca\xa0\xf5\x4f\xe7\xc9\x33\xc2\x33\x79\x97\xd1\xaf\xe6\x60\x81\x9b\xa8\xb4\x5d\x81\x8f\xd4\xe4\xd8\x44\xe0\x9d\x69\x27\x0d\x15\x85\x06\x71\x88\x6b\x11\x79\x2e\x34\x75\x06\x7d\x59\xcf\x4b\x2b\x77\xd6\xde\x9a\x8f\xed\x67\x8e\xfc\xde\x34\xee\x40\xd6\xca\x41\xbc\xdd\x8f\x70\x07\x27\x71\x52\x03\x3f\x2e\xf1\x31\x5b\xa3\x62\x28\x93\x0f\xc0\xc1\xa4\x15\xed\xe9\x1e\x73\x64\x81\x6a\x23\xfd\x91\x89\x22\x67\x9e\x74\x49\xfd\xf5\xb3\x81\x8f\x39\x8e\xd7\x78\x08\x96\x96\x14\xd6\x39\xff\x40\x29\x77\x00\x0e\xf6\x67\xcd\x5f\xed\x26\x72\x9f\x5c\x9e\xff\x15\xf7\x89\x25\xed\x76\x52\xdd\xb7\x04\xa7\x1b\x57\xa6\x89\xbd\xa3\x54\x51\xda\x77\x7f\x55\xd9\x23\xc2\x82\x38\x58\x27\x08\xdd\x5c\x78\x14\x6e\x18\xd0\x8a\xc6\x8b\x1e\x95\x6f\xac\x61\x29\x40\x67\x19\x88\x56\x17\x36\x7d\x2d\xad\xc6\x6c\x5c\xf8\x06\x74\xcc\x09\xe2\xe0\x2f\xad\x0a\xd3\x8c\xa2\xab\x4f\x02\x7c\xd0\x94\x7e\x49\x62\x6d\x6b\xbf\xeb\x6a\x6d\x72\x5b\xb9\x8b\x4f\x1b\x4f\xe5\xa1\x38\x3a\xb2\x03\xbd\xb4\x00\x1c\xec\x69\x9d\x78\x55\x3e\x14\x13\x26\xeb\x5d\x65\x7e\xc5\xbf\x28\xd1\xc3\x42\x22\x61\xa4\x97\xfd\x93\x8b\x4c\xca\x99\xc1\x88\xca\xe8\x10\x2a\x0a\x0d\xe2\x10\xd2\x12\xbf\x90\xb4\x40\x33\xa8\xf3\xd2\x5a\x6a\x7b\xf0\x3d\xe2\xdd\xab\xaf\xa4\x8f\x1f\x2a\x3f\x95\xb4\x7d\xa6\x8b\x82\x4c\x5d\xca\x39\xa6\xe4\x29\xf8\x75\xe4\x52\xf2\x08\x94\xd6\x0c\xe2\xe0\xf7\x98\xfe\x6a\x28\x5e\xd2\xfd\x54\x69\x6a\x72\x37\x26\x66\xbb\xfc\x6b\xc1\xe0\xca\x4b\x49\x81\x68\xd3\x14\x9a\x84\x93\xa6\xb5\xb4\x4b\x88\xb0\x20\x0e\xf6\x67\x29\xdb\x76\xe7\xda\x05\x89\x5b\xc8\xab\xc6\x84\x95\xd1\x9b\xff\xc8\xd5\xc1\x3d\xce\x8b\x0b\x66\x7a\x22\x76\x65\xa3\x44\x8c\x09\xfa\x7a\x83\x38\x58\x27\x10\x2d\x6b\x2e\x4b\x44\x47\xdd\x35\x9e\x50\xc4\x71\x9c\xb1\xe2\xc1\xc2\x23\x97\x2d\xe7\xf1\x27\xf1\x8a\x45\xaf\x47\xc5\xd1\xc5\x41\x84\x05\x71\xb0\xa7\x15\xc7\xcf\xea\xf5\x6f\xca\x6f\x56\xba\xfa\x61\xef\x9d\xb9\xbb\x0a\x61\x4f\xa1\x2e\x5d\x54\xb6\xd7\xe2\x8b\x15\xa6\xcd\xd0\xe0\x76\x44\x58\x10\x07\x7b\x5a\x79\x64\x2d\x0d\x9d\x72\xbe\x8a\x0e\xcc\x94\xb4\xa0\x0a\xf2\x11\x34\xd3\x44\xb5\xc8\x38\xd3\x62\x4d\x52\x3b\x3e\x3e\xe7\x5a\x6c\x84\xb4\x40\x1c\x42\x5a\x06\x17\x92\x16\x68\xa6\x7c\x5e\x5a\x04\x44\x14\x7e\xfd\x89\xe9\x33\x3b\xaf\xe3\xab\x12\xf1\x82\xaf\x54\x3b\x26\xaf\x5c\xa1\x6f\xa8\xd2\xaf\xba\x51\xf8\xc9\x41\xee\x1b\x94\x3e\x05\xe0\x60\xd2\xfa\xfc\xbc\x96\x3e\xfd\xf6\x48\x0f\x95\xf7\xf3\x4b\xfd\x21\x9f\x1f\x3e\xa4\xac\x94\x08\xb4\x1a\xc1\x92\x4c\x24\x6d\x50\x8b\x32\x62\x41\x84\x05\x71\xb0\x3f\x6b\x75\x69\xe7\xc1\x91\x6b\xc8\xfa\x3a\xdd\x4e\x76\x52\x78\x80\x4a\xde\x2c\xb9\x5d\xb7\x35\x12\xf7\xca\x95\x95\x42\x43\x8a\x46\xe8\x3b\x0b\xe2\x60\x9d\xa0\x87\xcd\x56\x35\x97\xc8\x25\x8b\xa1\x24\xc2\x2a\xb4\x46\x5f\xbf\xb6\x37\xc6\x88\x4c\x58\x7e\x6a\xc0\x55\xfe\x72\x5f\x13\x0b\x4a\x4d\x03\x71\xb0\xa7\xe5\xc1\xa4\xca\x55\x3f\x25\x45\x0d\x90\x7c\x8c\x2b\x10\xab\xeb\x33\x22\x3d\x94\x93\x14\xe6\x5a\xd4\x1f\x49\x14\x16\x76\x49\x04\x9a\x6a\x81\x38\xd8\xd3\x0e\x8f\x5b\x4c\xc5\xca\x64\xec\x23\x5b\xce\x28\x97\x3b\xf8\x89\x74\x98\xcd\x7c\x17\x7a\xc3\xe4\xe2\x77\xe8\xf4\xbe\xeb\xc6\x55\x42\x84\xb4\x40\x1c\x42\x5a\x6e\x17\x92\x16\x68\x45\x74\x5e\x5a\x07\xc9\x2d\x98\x6f\x89\x33\x2a\x9f\x5d\xc9\xef\xd4\x50\xa6\xd9\x13\xc6\xc8\x8c\x73\xa2\xb3\xb4\x2d\x7a\x95\x73\xfc\x43\x59\x14\x32\x69\x81\x38\x98\xb4\xac\x3b\x5c\xdf\xe5\xf7\xba\xb2\x4f\x3d\xfd\x40\xad\x54\xf4\x95\x01\xfb\x33\x06\xf9\xf3\xaf\x03\x9d\x7d\x45\xbc\x32\xbf\x3d\x73\xa0\x43\x59\x10\x07\xfb\xb3\x98\x8a\x97\x5f\x04\xd2\xd0\xaf\x8a\xf1\x62\x3e\x91\xc5\xc3\xe5\x73\xa7\x70\x8d\xea\xe3\x19\xad\x0e\xb0\x0a\x15\xbe\x7c\x44\x5a\x0e\xb9\x94\x00\x1c\xac\x13\x54\x84\xc2\xbd\x73\x4f\xe3\x1f\xcc\xc9\x7f\xc5\x30\xe1\x17\x4f\x69\xbc\xf6\x4a\x51\x36\x53\xdc\xd5\x34\x5e\x6d\xfe\xda\x9c\x3e\xb4\xa9\x0a\xe2\x60\x4f\x6b\x9b\x82\xcf\x56\xf7\xe4\xd3\x81\xa8\x83\x8e\x0d\xf5\xbd\x91\x61\xce\xfe\xd0\x85\xd3\xb5\x1a\x2f\x57\xad\x47\x3a\x58\xe9\x49\xd0\x4d\x34\x20\x0e\xf6\xb4\xa8\xf6\x0f\x37\x4f\x6e\x5e\xe2\x20\xa8\x5e\xff\x20\xbd\xd0\xc0\x4e\xf2\xe6\xa4\x01\x57\x8a\x51\xab\x4c\xdc\xa7\xfc\x5e\x7c\xed\x31\x42\x5a\x20\x0e\x21\xad\xe8\x0b\x49\x0b\xb4\xf2\x3d\x2f\x2d\xef\xe4\x32\xb2\xe0\x50\x96\xd6\xb4\x00\x92\x41\x0f\x0a\xb2\x0f\x43\xba\x46\xaa\xca\x9b\xbe\x78\xd6\x37\xda\xc3\xe7\xc9\x72\xa0\x01\x0b\xe2\xe0\x4e\xb5\xd9\x82\x5e\x97\x14\x5e\x5c\x0c\x62\x27\x87\x16\xea\xd7\xe2\x1d\x09\xd8\x97\xc2\xc3\xa4\x16\x2a\x67\x46\xf4\x18\xd0\x1e\x28\x41\x1a\x00\x70\xb0\x3f\x2b\xab\x62\xad\xd7\x97\x09\x93\xfd\xe3\x04\x83\xa1\xd8\xb7\x9d\x5a\x86\x1b\x85\x98\x5c\x9f\xb6\x79\x39\xfe\xb4\x7e\xef\x27\xaf\x81\x92\x02\x40\x1c\xac\x13\xb4\xc4\xbd\xee\xe9\xea\xf9\x11\x60\xd6\x0a\xd8\xdc\x7d\x61\xf6\x7b\x92\x46\x3a\xa4\x9b\x76\xb5\x71\x44\x21\x2c\x7e\x9c\xb5\x1e\x9a\xc6\x83\x38\xd8\xd3\x2e\xf4\xfb\x3c\x17\xc1\x43\xbb\xcb\xa4\x61\xd9\x18\x96\xd0\x74\x0d\xc7\x64\x7b\x74\xd4\xd5\xe6\xfa\x9d\x75\x0a\x6f\xfa\xdb\x3f\x21\xef\x32\x88\x83\x3d\xed\xe0\x3c\x9e\x24\x97\x17\xba\x60\x12\x21\x8a\x2a\x9b\x2c\x99\x23\xe7\x7b\x3b\xa5\x8f\xae\x06\x74\x1e\x0d\x33\x1f\x8d\x3e\x37\x4f\x21\xa4\x05\xe2\x10\xd2\x4a\xbd\x90\xb4\x40\x3b\x1c\xe7\xa5\xa5\x21\x41\x92\x1c\x23\xdd\xb3\xbc\x51\x31\x7b\xf4\x73\x79\xa6\x5d\xb4\x83\xd0\xcf\xb3\x3d\xb6\x6c\xa5\x9b\x78\xe2\x69\x99\x3f\x54\xf1\x1e\xc4\xc1\xa4\xf5\x9b\x31\x72\x94\x9a\xbb\x5f\x6a\x97\xf8\xe0\x25\xd7\xfb\x9d\xbc\x3b\x49\x9d\xdb\xf8\x1c\xe8\x7a\x5f\x88\x4d\xec\x19\xc4\xa9\x56\x11\x61\x41\x1c\xfc\xad\xe5\x19\x44\xf2\xc5\xae\xf7\xd1\xfb\x7a\x5d\xd9\xb4\xfc\x9d\x46\xd6\xc1\x95\x7d\x59\x21\xe6\xbe\x68\xd2\xdb\x6c\x11\x42\xbd\x73\x90\x62\x01\x1c\xac\x13\x32\xdf\xe5\x9b\xe8\x8a\x38\x4c\xbf\x3a\x18\xcc\xd3\xb6\xb8\xe4\x12\xd6\x67\xab\xc7\x91\x83\xaf\x44\x72\x7f\xff\xf4\xae\x8b\x37\x3d\x22\x2c\x88\x83\x3d\x2d\xb7\xb4\xba\xb7\xc4\xd7\x26\xe7\x50\x91\xe0\xe2\xc5\xbc\xdc\x77\x84\x72\xde\xea\x6a\x5e\x3a\xea\x89\x5d\x29\x0b\x16\xec\xfd\x29\xd0\x71\x3b\x80\x83\x9f\x87\x2d\xf9\x39\x9f\x75\x78\x7d\xb4\x3d\xa2\x19\x3b\xac\x60\xdf\x7a\xd8\xc1\x95\x93\x97\xa7\xc7\x15\x23\x45\x13\xb4\x19\x71\x37\x11\x21\x2d\x10\x87\x90\x56\xdd\xc5\x3c\x1f\xa0\x3d\xec\x7f\x3c\x1f\x48\xa3\xf0\x6d\xb7\x47\x95\xd6\x25\xf1\x41\x7d\xd1\x15\x69\x1c\xdd\xeb\x8f\x34\x3f\xa2\xf5\xc7\xc6\xd5\xad\x0e\x15\xc5\x73\x7c\x94\xba\x53\x49\x6e\xfa\xf7\x3b\x7d\x5b\xf0\x26\x57\x68\xb1\x3d\x6f\x93\x13\x0f\x51\xea\x73\xcf\x6d\xff\x2e\xcb\x72\xab\x9b\x37\xb3\xbd\xa7\xba\x8c\x1a\xe8\xd1\xd4\xd1\x9d\x1d\xf0\xf7\x4d\x9e\xc2\x9b\x0c\xd7\x33\x56\xed\xfa\x74\xd2\x59\xa6\xa7\x8b\x14\x5f\xac\xfa\xb6\xf6\x32\x7e\x45\xbc\xd3\xbd\xd0\x6a\xae\x5a\xd5\x47\x86\xd4\x8a\xff\xcd\xe6\x22\xa8\x2f\xff\xc7\xb4\x24\x6c\x6f\xf2\x2e\x4d\x5f\xcb\x69\x7a\xc4\xe8\x3d\x66\xe9\x98\x8f\x6b\xd4\x83\x85\x83\x3e\xcb\xf8\x35\x9f\x99\x29\xe9\x0c\xa1\xab\x27\x41\x1c\x6c\x80\x4b\xa8\x7a\xa1\xe2\xbc\x33\x56\xf3\xb0\x7b\xb8\x10\x89\x6f\x10\x90\x38\x8a\xb2\x95\xfc\x5a\x9c\x21\xfb\x9b\xe3\x52\x78\x8e\x2a\x34\xdb\x01\x71\xb0\x21\xf3\x68\x67\x7c\xc5\x5c\xaa\x8c\x9a\xa1\xed\xbe\xc6\x21\x77\x25\x7e\x8d\x0c\xfb\x18\xae\x7a\x65\xf6\xc2\xb3\x97\xa4\xe4\x2f\x7c\xb7\xa1\xd2\x38\x00\x0e\xd6\x09\xda\xda\xba\x0e\x46\x2a\xa7\xc7\x1c\x54\x12\x7d\xd5\xbd\x3d\x13\xcf\x50\xf2\x2a\xcd\xc5\xbf\xe3\xa7\xab\x4f\x04\x5e\xa7\xc3\x42\x46\x84\x05\x71\xb0\xa7\x7d\xd8\xf2\x8c\xfe\x4f\xc5\x64\x29\xa9\xf3\x33\x41\x9b\x82\xaf\xba\xaf\xae\xef\x4c\xd5\x6c\x9b\x84\x68\xb4\xcb\x85\xe7\x61\x56\x43\x77\xbb\x80\x38\xd8\xd3\xf2\x09\x36\x94\x69\x7c\x77\x5f\x50\x64\xa7\x24\xea\x93\xf1\xec\xd1\x1a\xb2\xc3\x3b\x0c\xbf\x3a\x67\xec\x77\xdc\xc7\x9f\x21\x5a\x82\x18\xe0\x20\x0e\x31\xc0\x47\x2f\xf4\xed\x00\x8d\x99\xf3\xd2\x12\x62\x8f\x68\x97\x33\x24\x1d\x1d\xfb\xda\x51\x68\x42\x3c\xfd\x78\x4b\xaa\xbf\x46\x6c\x03\x77\x01\xcf\xc8\xea\x92\xed\x82\x53\x24\xb4\xfb\x01\xe0\xe0\x07\xf3\xf6\xd9\x9f\x58\xf7\x14\xd5\x1e\x2c\xde\x24\xd2\x2d\x7e\xdb\xb8\x96\x3b\xfc\xd5\x15\x4f\xd8\xdb\x2d\xe8\xc9\x6d\x4c\x9b\x3a\xa8\x04\x1d\x88\x83\xfd\x59\x9a\x2f\x70\x47\xd0\x65\x4e\x0f\xe5\x93\xe3\xa4\x0c\x78\x2c\x87\xd9\x38\x8b\xf6\xfd\x46\xdd\xc5\xf2\x2d\x15\xd4\xe6\x6f\x29\xcd\x22\xc2\x82\x38\x58\x27\xbc\x3a\x11\x5b\xa4\xd5\x11\xb9\x6c\x91\xdd\xcd\x58\x36\x4a\x30\xe6\xee\xdb\x51\x94\x63\xde\xde\x99\x68\x9e\x9e\x79\xeb\xb6\x30\xe4\xc7\x05\x71\xb0\xa7\xbd\xc5\x4a\xd9\x94\x4c\x3b\xa5\x5f\x37\x1e\x41\xfe\x48\xe9\x9a\x8a\xe6\x83\xc1\x94\xef\x58\x06\xd3\x96\xca\xe3\x8e\x8e\x2d\xe5\x50\xb1\x13\x10\x07\xbf\xec\x3b\xc7\x66\x6a\xd0\xc2\x3f\xb8\x28\xda\x88\xde\x7b\xf9\x8d\x0d\xd5\x66\xc3\x86\x9e\x59\x64\x3e\x4a\xa0\x75\x38\x77\x28\xbf\x3c\x42\x5a\x20\x0e\x21\xad\xad\x0b\x49\x0b\xf4\x6e\x3c\x2f\x2d\xb2\x67\x0d\x8b\x1e\x8d\xc7\xdf\xc8\xcd\x2d\xe3\xb6\x1f\x92\xa0\x64\xcc\x88\x60\x57\x61\x54\x7d\xf2\x72\xf9\x96\x11\x40\xa6\x00\x15\x65\x01\x71\x30\x69\x0d\xb2\x19\x2a\x34\x66\x52\x34\xbf\xa6\x65\x69\x2d\x38\xfd\xee\xa2\xe2\xeb\x43\x99\xa6\x16\x13\xc2\x35\x91\xf0\xc5\xc0\x6a\x5a\x1a\x11\x16\xc4\xc1\xfe\xac\x06\x69\x31\x61\x79\x0e\xe6\x21\xec\xa2\x26\x63\xcd\x07\xcf\xbc\xca\x8b\xf3\xdb\x98\xf2\xb3\x25\x4e\x4d\xc5\x5b\x18\x2c\xa3\x21\xc5\x82\x38\x78\x1a\x6c\xa5\xec\xaf\x9c\xd1\x3c\xb9\x9a\xcc\x78\xb6\xe0\xce\xb5\xab\xaa\x6f\x79\x1f\xd9\xc5\xca\x96\xd0\xf1\xc8\x8e\x59\xfb\xbc\xea\x82\xd2\x60\x01\x1c\xec\x69\x1f\x4f\x31\xc6\x12\x3e\x12\x6e\xd0\xe5\x2b\x7e\xee\xe1\x8a\x6b\xc5\x7a\xfd\xd8\x4d\x9d\x90\x3a\xdf\x9d\x42\xaf\xbc\x4e\xba\x01\xaa\x48\x01\xe2\x60\x4f\xdb\xa4\xe3\x1f\x29\xff\xe2\x3b\x83\xf1\x8d\x59\xb2\x4a\x53\x3b\x05\x81\xa7\x5d\x7a\xaf\xf9\xc4\x38\x3e\x6c\xbc\xc9\xe3\x6f\xe2\x87\x2e\xca\x04\x71\x08\x69\x9d\x5e\x48\x5a\xa0\x53\xfe\xff\x91\x07\x5b\x40\x66\xc2\xbb\x13\x40\x99\x65\xd6\xbf\xb3\xc3\x49\xa0\x73\xfd\x8f\x9d\x2d\x0d\xf3\x1d\x26\xfc\x79\x34\xae\x4f\xd9\xee\x50\x66\x29\x88\x83\x49\xcb\xa4\xfa\x93\xdf\x0f\x63\xcd\x96\x2f\x03\x96\x8d\x69\xd9\x89\x4b\x6f\xf7\xe9\xbf\xa5\x05\x95\xe4\x5b\x17\x74\x68\xdc\xe1\x68\x87\x76\x96\x40\x1c\xec\xcf\xca\xf1\xfd\xe1\xa7\x9d\x38\x8f\x1b\x89\x92\xc9\x75\xa3\x3a\xc8\xe9\xa6\xbd\xcc\xa2\x9f\x41\x72\x6f\xfa\xde\x82\xe4\x86\x09\x29\x64\x9e\x06\x71\xf0\x69\x7f\x2b\x97\xe5\x4d\x5b\xf6\x20\xaf\xae\x7d\x62\x37\xfb\x2a\xf7\xb1\xcc\x1e\xe9\x1e\xba\x7d\xb6\x75\x5b\x24\x0d\x51\x83\x4c\xa8\x82\x2c\x88\x83\x3d\x2d\x05\x15\x81\xf4\xd3\x45\x7b\x22\xaf\xa0\x4f\x7d\x54\x14\xf7\x3a\x3b\x99\xeb\x34\xc5\xe7\x70\x75\xa8\x0e\x3c\xba\x4b\x4c\xf1\x04\x20\xcf\x87\x1d\x59\xe6\x0a\xd3\xe7\xf1\xca\x2c\x0f\x39\x2e\xeb\x68\x81\x76\x95\x17\x9e\x4d\x07\x13\x8f\x3a\x1b\x77\x56\x38\x1f\x4a\x10\xf6\xff\xdb\xf3\x41\xaa\x68\xd3\xe9\xcc\xa4\xa3\x5a\xf2\x2e\x7d\x3b\x5d\x02\x75\xf2\xcb\xbe\xa6\x9c\x7e\x90\xa5\xe3\x67\x69\xec\xf5\xec\x7e\xf9\xdc\x7f\xa1\xb5\xfc\x58\x51\xcf\xf5\x26\x9d\xb3\x78\xae\x9b\x38\xdd\x8c\x8c\x94\xdf\x77\xbb\x29\x20\x80\x22\xc5\x1a\x45\x43\x25\xf8\x59\xfa\x1b\xcc\xf3\x01\x8a\x7c\xde\xf3\xe1\x1d\x4f\x71\x53\x2a\xb4\xb1\x9d\x29\xdd\xc1\xae\xb9\xaa\xca\x37\x7e\x32\xb4\xff\xc9\xc6\x6c\x0f\x6d\x42\xbe\xec\x57\xf3\xfb\x77\xfe\xfd\x52\xf8\xc0\x33\xd7\x20\xc6\x4f\xc5\x39\xe5\xf9\x65\x22\xda\x53\xc9\x66\x1b\x13\x93\x8a\x76\xbe\x09\xc5\xfa\xb0\xa6\x5c\xc0\x3d\x19\xf2\x7c\x80\x62\xfe\xe3\xf9\x90\x84\x7b\x3e\x7a\xa9\x1a\xb2\x2a\x85\x03\x08\xd8\xe8\x4b\xcb\x9f\xba\xdc\x3d\x7c\xe8\xd0\xa3\xae\xc4\x2f\xc8\x39\x81\xdb\xf6\x9e\xcb\x6c\x88\xec\xaf\x27\xb9\x92\xe7\x3c\x1f\x99\xb2\xcd\x85\xdc\xfe\xb9\xbf\xb4\x7c\xe5\xd6\xcf\x5a\x3e\x5d\xc3\x0f\x5d\xff\x1e\xb7\xfa\xe4\xda\xef\xdf\x25\xef\xf6\xb4\x1b\x42\xff\xbe\xc9\x73\x9e\x0f\x0e\x3b\x19\x69\x0b\xe6\x3a\xc7\xa1\x8f\xa1\x8e\xeb\x83\x29\x49\xe8\xda\x8f\xa2\xe4\x3e\xac\xa6\xe0\xd6\x1d\x0b\x53\x1d\x79\xe1\xfc\x7d\x93\xe7\x3c\x1f\x27\x9a\xac\x01\x8f\xa5\xfd\x9f\x8f\x76\x57\x29\x8b\x94\x3d\x20\xff\x38\xaf\xa0\x47\xbf\x99\xb7\xef\xcb\x4a\x84\x24\x1d\x85\xbc\xfe\xf7\x4d\x9e\xf3\x7c\xfc\x64\x3e\xd4\x89\x90\xe0\xed\xd2\xb2\x7b\xde\xaf\xdf\x60\xf3\x81\x7f\x2f\x8c\x8d\xfa\x77\x43\x53\x96\x2b\xcd\x63\x09\xaf\xf6\x4f\x7f\xdf\xe4\x39\xcf\x47\x48\xb1\x71\x14\x49\xd7\xc8\xdc\xe5\x58\x99\xb7\x47\x58\xbf\xfb\x96\x6f\x46\xc5\xb1\x86\x27\x35\xf2\xf5\x25\xa2\x19\x13\x5b\xd0\xff\x7d\x93\xe7\x3c\x1f\xe2\xb2\x1e\xe6\x74\x1a\x7d\x19\x09\x09\x6e\x21\xd6\xa5\x9f\x25\x02\xae\x12\x8b\x8e\x13\x3a\xbb\xa6\xf5\x27\x3d\x7f\x20\x7b\xe7\xec\xef\x9b\x3c\xe7\xf9\xa0\x77\x1b\x96\xc3\x7a\xf8\x8b\x6f\x34\x54\x97\x88\xc4\xe2\x0a\x61\x62\xfe\x69\x8c\x33\x89\x5f\xed\x83\x01\x13\xa6\x88\x59\xa2\x94\xff\x66\x59\x06\x1a\x8a\xe7\xbf\x42\x33\x1b\xcc\x99\xb8\xac\x56\xab\xc7\x03\x07\xe9\x9f\x4a\x19\x59\xec\x53\xee\xa3\xbf\x0a\x16\x67\x56\x35\xa6\xe9\x6b\xc4\x69\x1d\x44\xbc\x80\x41\x1c\xec\x2b\x84\xe3\x63\x29\xfd\xa2\xc6\x4b\x21\xc3\x8c\x65\xce\x5e\xaa\xf8\xeb\xc6\x25\x3b\xbc\xa7\xcf\xa2\x1f\x7f\x76\x34\xe3\x75\x5a\xf6\x82\xac\xc2\x20\x0e\xbe\x93\xb1\xd4\x16\x53\xea\x93\xe8\xff\x6d\x71\x59\x0f\xc7\xf1\x89\xce\xd9\x30\xf7\xa3\xad\xc3\x00\x46\xb1\x9d\x86\x91\x31\x91\x54\xe8\x30\x0a\xc4\xc1\x3a\xa1\xbf\x53\x84\xbc\xc0\x15\xcf\xe6\xa1\x0e\x19\x72\x4e\xbc\xec\xcd\x95\xd2\xb4\x9d\x75\x4a\x23\xd4\x97\xd6\x91\xe3\x7e\x8b\xa6\x2b\x88\xb0\x20\xee\xb9\x14\xfe\xff\xb5\x09\xcd\xf2\x2d\x0b\x3b\xa4\x94\x70\x1c\x03\xef\xd1\xf0\xd0\x5c\x76\xea\x4a\x76\xc2\xb5\x98\xb4\xd7\x98\x29\x41\xf5\x67\xf4\x61\x8b\xd0\x26\x34\x80\x83\x85\xfd\xfe\xe1\x79\xcc\xee\xa7\xeb\xeb\x99\xc7\xf6\xcf\x0d\x3f\x07\x97\x97\x08\xb7\x26\x8c\xc8\xd3\x6a\x2e\xd6\x14\xb2\x67\xa6\x17\x30\x22\x3c\x1f\x20\xee\x9f\x3a\x1f\x92\x17\xf2\x7c\x80\xde\xb8\xe7\x95\x15\x76\xe5\xe6\xd3\x2c\x36\xf4\xac\x80\xec\x28\x8f\xaf\xbb\x87\x29\x9f\x76\x08\xaa\x69\x68\x54\x05\x8a\xd9\x04\x15\x19\xdc\x0c\x0f\x11\xbf\x1e\xc4\xc1\x94\x55\x34\x87\x19\x63\xfd\x3a\x66\xb5\xa0\x62\x5c\x6c\xe5\xfa\xa5\x9d\x5d\x66\x1e\x0f\xf3\xf7\x32\xbe\x93\x83\x84\xac\x81\x5e\x7b\xd0\x8c\x1c\xc4\xc1\x94\x45\x4e\xc3\xd9\x84\x37\x7c\x85\x4f\x97\xd4\x8d\x19\x6b\xf0\x4a\x14\xcf\x51\xfc\x31\x91\x9e\x75\x54\xb0\xd8\xc8\xa2\x32\x6e\xd1\x14\x64\x25\x01\x70\xb0\x4e\x98\xee\x3d\xb5\xeb\xe4\x66\xb9\xa2\x11\xbb\x61\x15\xba\x70\xa8\x5c\xac\x4f\x8c\xd6\xa6\x4c\x50\xfc\x45\xf3\xa0\x70\xe8\x50\x1c\xda\x9e\x00\x71\x30\x09\x44\xe6\x99\x79\x8e\x1e\x54\xe5\xae\x09\xde\x69\x8d\x9d\xb1\xfa\x23\xe5\x6f\xe0\x81\xdc\x3a\x94\x5b\xba\xf3\x52\x5c\x50\xa0\x1c\xaa\x20\x03\xe2\x60\x61\x31\x8b\xf1\xa7\x4b\xdc\x79\x05\x78\x43\x87\xf7\x05\x77\x23\x16\x5a\xe4\xc3\x4d\x32\xdd\x44\xe6\xf7\xba\x70\x93\x27\xb8\x4b\xf6\xa0\x04\x41\x00\x87\xb8\x16\xf1\x62\x9e\x0f\xd0\x97\xf5\xbc\xb4\xcc\xc5\x51\x4c\xe5\x38\x93\x0f\xef\xfc\x7c\xba\x72\x6b\x2a\xec\x74\x90\x55\x54\x10\xa7\xbe\x8c\x44\x78\xf6\xaa\xe6\xf7\x4c\x34\xe8\x98\x13\xc4\xc1\xa4\x85\x71\x07\x95\xe1\xf7\xfb\xfc\x51\xa3\xd8\x0f\x1b\x0f\x5b\x6c\x05\x1f\x58\xac\x4a\x71\x12\xd4\x14\x48\x28\xc4\xb3\x7e\x4c\x5e\x85\xee\x62\x02\x71\xf0\xe2\x44\x4c\x46\xf6\xe6\x6e\xe6\xcf\x1d\xc6\x9e\x75\x7c\x43\x5f\xfc\xce\x89\x7c\x52\x32\x91\x5e\xe6\xf6\xb0\xcd\x98\x91\xe9\xd5\xfc\x53\xa8\x38\x11\x80\x83\x75\x82\xe9\x4f\xcd\x35\x8a\xc9\x6f\xe1\x1c\x4f\x3c\xec\x55\xb1\x03\x75\x36\x82\x3f\xeb\x1a\x0d\x52\xba\x7e\xdd\x53\xb8\x14\xeb\x32\x1d\x05\xe5\x8e\x00\x38\x98\x06\xe4\x27\x31\x9a\x6f\xc5\xb9\x86\x95\x6e\x63\x37\x39\x86\x2b\x9a\x28\xd6\x1f\x5d\xbe\x62\x3d\x30\x4f\xa3\xd3\x5b\x9c\xf3\xb9\x13\x32\xf8\x83\x38\x58\xd8\x18\x1c\x06\x4c\x59\x2f\x92\x69\x3f\xe5\x97\x14\xae\x38\xe1\xa2\x26\xdf\x7f\x4d\xf9\x32\x19\x2d\x4d\x13\x20\x73\x31\x7c\xe6\x80\xee\x09\x06\x71\x08\x69\x5d\xcc\xf3\x01\x9a\x41\x9d\x97\x16\x11\x69\xf5\xa3\x8c\xcb\x2d\x62\x52\xd3\x7d\xc3\x8e\x44\xef\x28\xd0\x3a\x2e\x51\x06\xe6\x51\xe1\xb1\x8a\x54\x57\xa7\x7d\x11\x85\xce\x21\x40\x1c\x4c\x5a\x09\x8d\xc2\x21\xaf\x7d\x34\x1b\x84\x0b\x98\x7a\x78\x85\x1c\xa2\x78\x5f\x39\xa5\x6c\x7e\xdf\x55\x8a\x97\xd1\x9f\x0e\x29\xcd\x84\x76\xf6\x41\x1c\x3c\xc9\xc3\x20\x63\x16\x5b\xef\x7a\xdd\xaf\x31\xe3\x0d\xd6\x21\x6a\xc6\x00\xc7\xd9\x1d\xe5\xe1\x87\x24\x0a\x66\xb3\x82\x99\x79\xe3\x07\x50\x92\x07\x80\x83\x75\x82\xb8\x9a\x87\x75\x14\x9f\x1f\x63\x3e\x4d\xe8\x52\xc5\xd0\x31\x35\xbe\xe6\x88\x5c\xf1\x1e\x25\x5a\xfb\x1b\x6b\x5c\x52\x76\xf5\xbb\x90\x39\x03\xc0\xc1\x34\x40\x1b\xa8\xa8\x61\xef\xf4\x9e\xa9\x24\x90\xea\x79\x7d\x64\xd6\x5d\x07\x6e\xab\xbe\x23\x95\x49\x5a\xd5\x55\x81\x82\x86\xa5\xa7\xd0\xf7\x10\xc4\xc1\xc2\x4e\x19\xb5\x7a\x7b\x7f\x74\xe1\x6c\x45\x22\x62\x8b\xd0\xff\x89\xbd\x56\x1b\x1c\xed\xe7\xc4\x96\x36\xb8\x92\x44\x1c\xad\xeb\x9b\x8f\x90\x16\x88\x43\x48\xeb\x62\x9e\x0f\xd0\x4c\xf9\xbc\xb4\xd8\x2c\x6b\x71\x76\x4c\x04\x4c\x39\x58\xe2\xf9\x1d\x86\x89\xae\x6b\xed\xfb\xf0\x74\x19\xf3\x6c\x90\x2b\x29\xa7\x91\x05\x33\x41\x59\xdd\x20\x0e\x26\x2d\x8e\x91\xe2\xfa\x5f\xc7\xef\x58\x84\x4e\xd4\xc9\x1e\x71\x52\xad\xa5\xf8\xf7\xff\xe9\x65\xe4\x2d\x78\xc9\x5d\xc2\x66\x78\x8a\x06\xd9\x1d\x40\x1c\xfc\x46\xaa\xb9\x4e\xca\x90\x93\x94\xba\x83\x44\x97\xfe\x84\x13\xb4\xa8\x85\x76\x42\x35\x62\xe4\x84\x77\x06\x59\xa6\x55\xd3\xaf\xb3\xa1\x4d\x1f\x10\x07\xeb\x84\xed\xe5\x69\x92\x9d\x56\x24\x8c\xf7\x65\x87\x36\x5e\xb2\x3a\x95\xf9\xfd\x4b\x9e\xf2\xe3\x68\x89\xc7\x35\x92\xba\x1f\x9f\xab\x65\x22\xc2\x82\x38\x98\x06\x8e\x34\xba\xb4\x1a\xd7\xc8\xeb\xae\xae\x0c\xb0\xba\x3d\x9d\x57\x50\x77\x1a\xce\xbe\x95\x34\x9e\xf4\x4a\x02\xf5\x77\x30\x91\x0d\x54\x3a\x02\xc4\xc1\xc2\x72\xf1\xb9\x7c\xe2\x7e\x4f\x66\x10\x1f\x3c\xb5\x6e\x7f\xe7\xf1\xb0\xd2\xd8\xc4\x55\xf6\x55\x21\xcd\xbd\x89\xcc\x64\xcb\xfc\xf0\x09\x84\xb4\x40\x1c\x42\x5a\x17\xf3\x7c\x80\x56\x44\xe7\xa5\x45\x5d\xc7\x10\x14\xf9\x67\x57\x7c\x63\x85\x92\xcb\x0c\xd5\x9a\x84\xe3\x6c\xef\x1a\xc7\x7b\xe2\x70\x77\xd9\x5d\xa7\x01\x5e\x93\x49\xc4\xcf\x07\x71\x30\x69\xe5\x5c\x3e\x3e\x10\x2d\xc7\xf3\x7a\xfc\x67\x4a\x0e\xeb\xd3\xf7\xf2\xeb\x07\x05\xcf\xfe\xb8\xf3\xdc\xe2\x0c\xce\xd4\x0f\x42\xd5\xce\x86\x36\x7d\x00\x1c\x4c\x5a\x2a\xdc\x47\x62\xb1\x2e\x7a\x23\x8f\xcd\x73\xa3\x9b\xc2\xb3\x3a\x0f\x9e\x53\x06\xc9\x4d\x70\xfc\xf8\xcc\x5f\xd4\x85\xe7\xf8\x1b\xaa\x70\x0b\xe2\x60\x9d\xf0\x9e\x11\xb7\xfe\x29\xad\x51\x13\xe1\x7d\xed\x5e\x0a\x8d\x9b\x6e\x36\x5c\xba\x42\x73\x37\xbd\x08\x5a\x71\x82\x7f\xcf\xa5\xe2\x41\x39\x64\x20\x0e\xa6\x01\x9a\x12\xdd\x4a\xa3\xa8\x43\xa4\xd6\xee\x72\xda\x5b\xf1\x2b\x22\x3b\x65\x8c\xdf\x7d\x1b\xa6\x27\x5c\x25\x63\xeb\xe3\x3e\x7e\xff\x8e\x08\x0b\xe2\x60\x61\xbf\x49\xf7\x8a\x7e\x11\x57\x57\xc8\x66\x9c\xb3\x79\x5e\xf6\x63\x1a\xa5\x93\xe2\x43\xc8\x99\xf3\xdd\x0d\x3c\xfd\xba\x0f\xe2\xd3\xbe\x08\x69\x81\x38\x84\xb4\x2e\xe6\xf9\x00\xad\x7c\xcf\x4b\xab\xf5\xa5\xde\xbb\xb2\x58\x55\xa1\xf9\x02\x5d\x1e\x91\x91\x7a\xbc\xfd\xe6\xd9\xd2\x0d\xfb\x98\xd8\x6b\xf7\xc3\xec\x0b\x46\xea\xa0\x3c\x42\x10\x07\x93\x96\x55\xa6\xe9\x98\x06\x93\xff\x71\xf5\x2b\x91\x20\xd9\x85\xae\xf6\xcd\xae\x3e\x54\x2b\x5f\xcc\x4f\x21\xca\xee\x4b\x07\x67\x54\x2e\x88\xb0\x20\x0e\x26\x2d\x2a\x2d\x2d\x62\x0d\x05\xbd\xd2\x32\x96\x43\xd1\x4b\x6b\x31\x97\xcd\x4f\x42\x7b\x3f\xdb\xb0\x6f\xe0\x32\x16\xba\x45\x6b\xa1\xcc\x20\xc2\x82\x38\x58\x27\x88\x04\x5a\x04\x45\x28\xac\x0d\x3a\x24\x6b\xaa\xb7\x3d\xb8\xec\x6e\xa4\x97\xe3\x53\x5a\x7d\x4a\x9e\xf4\x27\x68\xd1\x67\x7f\x21\x0f\x11\x16\xc4\xc1\x34\x70\x7a\x3d\xe1\xa5\xc4\x23\xbe\xea\x4c\x3d\xc7\x0a\xf4\x23\x33\xef\xf7\xd1\x12\xef\x03\xcc\x0e\x2e\x7f\xee\x74\x31\xb0\x53\x2b\x74\x45\x84\x05\x71\xb0\xb0\x6f\x06\x3e\x75\x2f\x89\x58\x1a\xd0\x96\x1b\xd8\x8e\x97\x3a\x3b\x0c\xa8\xb3\x5d\x3d\x30\xcc\x4c\x6d\x12\x67\x48\x10\x3c\xe6\xbf\x8b\x90\x16\x88\x43\x48\xeb\x62\x9e\x0f\xd0\x0e\xc7\xff\x48\xa8\xdd\xbe\x54\x89\xd2\x11\x2a\xb1\xdf\x99\x1d\x3a\x75\x0d\x39\xb8\x3b\xf5\x35\xca\x6d\x96\x67\x55\xc8\x49\xb5\xfa\x0f\xde\xa7\x41\xbe\x04\x10\x07\x93\x56\x52\x89\xdd\x63\x21\xa1\x63\xad\xca\xbd\x3e\xce\xec\xe3\x5f\x73\xd6\x27\x74\x37\xea\x90\xe4\xb0\x1c\x1a\xfd\x2a\x32\x31\x59\x51\x11\x61\x41\x1c\x4c\x5a\x99\xc3\x55\xd7\x4f\x6c\xd3\xa3\x5d\x8a\x52\x8d\xe9\x1e\x78\xea\x30\x1a\x13\xb7\x91\xdd\xd4\x43\xa7\x1f\xe0\xa1\xbd\xb7\x78\x82\x06\x99\x33\x00\x1c\xac\x13\xba\x46\x0a\xcb\x6f\xfb\x31\x46\x8e\xba\x69\x8a\x7e\xd8\x3d\x68\x70\x42\xc1\x3c\xfa\x65\xe7\x1c\x10\x94\x59\x9b\xcd\xfd\xac\x46\x06\x11\x16\xc4\xc1\x34\x80\xdd\xa2\xff\x83\x39\x18\x09\x2b\x9d\xe3\xdd\x5a\x06\x23\x6a\xcb\x8c\xd7\xc0\xac\x58\x2f\x56\xaa\x44\x79\xd3\x8b\x3e\xae\x57\xd0\x8d\x12\x20\x0e\x16\x36\xd5\xe9\xf5\xb5\xe1\x5a\xbe\xeb\xd3\xaa\x07\x68\x8b\x05\x3f\xbf\x68\xa6\x5d\x9d\x15\x6a\xa5\x68\xbb\x34\xfd\xec\xbb\xf8\x31\xcb\x1a\x42\x5a\x20\x0e\x21\xad\x0b\x7a\x3e\x40\x7b\xd8\xff\x78\x3e\x24\xcf\x79\x3e\x7a\x8d\xed\xb7\x62\xf8\x42\xfe\x2c\x1d\xc9\xf5\xf0\x1f\x3e\x4f\x9a\xdb\xc7\x9b\x1d\xfa\xf0\x56\xb8\x8b\x7c\x73\x7b\xab\x55\x3d\xfc\xef\x77\xfa\xce\x79\x3e\xf8\x0b\x9c\xed\x1f\x6e\x86\xa9\x56\x18\x16\xf9\x60\xb0\xf0\x29\xa3\xb1\xd3\xba\x3f\xe6\xf1\xc2\x41\x55\x9f\xfd\x1c\xf7\x12\x3d\xe2\xef\x9b\x3c\xe7\xf9\x88\x75\x92\xf0\xcf\xcc\x15\x62\x4a\x5c\xd5\x66\xbd\x7f\x65\x12\x05\xeb\x56\xa6\x7c\xaa\x7b\x7b\x96\xec\x64\x9d\xdf\x3a\x7e\xde\xab\xff\x68\x73\x11\xd0\x97\xe7\x07\x78\x54\xbe\xdf\x7e\xaf\x40\x8f\xb5\xd7\xc2\x47\xaf\xaf\x9f\xf7\xfc\xca\xee\x62\x18\x3a\x12\xfa\x7d\x5d\x72\xdf\xeb\x30\x24\x7d\x06\x15\x73\x02\x71\xb0\x01\xbe\x10\xe3\xf1\x8c\xc3\xeb\x6e\xcb\x24\xd6\x81\xf4\xe0\x97\xea\x42\xcd\x3f\xc3\x45\x55\x41\x57\xbf\xe8\x05\x3c\xb6\x3e\xf9\x76\x09\x9a\x9a\x82\x38\xd8\x00\xef\xd6\x24\xd6\xec\xf5\xb2\xe9\xf3\x1c\x9e\x8a\xa7\xe9\xcb\x79\xaa\x9d\xdd\xab\xf9\xf8\x17\x79\x41\x41\xbb\x84\x91\xdc\x68\x22\x54\x93\x15\xc4\xc1\x3a\xa1\x8a\x25\x72\xf4\xc5\x2f\xda\xb9\x72\xe4\x47\x24\x47\xdf\x0a\x92\xdf\xf6\x45\xe5\xeb\xd6\xa0\x66\x46\x4f\xad\x45\xdd\xa2\xdf\x82\xdc\x09\x20\x0e\x36\x12\x0f\xa5\xb6\xe2\xc2\x4b\xcf\xda\xde\x16\xb1\xf8\x6e\xa3\x0a\xac\xcb\xa3\x3e\xee\x8a\x98\x48\x20\xbc\x53\x5f\x11\xd7\x16\x75\x60\x81\x08\x0b\xe2\x60\x61\x2d\x14\x42\x12\xdd\xd0\xcc\xe4\x30\x78\xbb\xca\x8f\xf9\xb4\x26\xf4\x6a\x37\x5e\x13\xb8\x4b\x7f\xcb\xe1\x7b\x8c\xd9\x1a\xb3\x04\xf9\x05\x41\x1c\x62\x80\x5f\xcc\xf3\x01\x1a\x33\xff\xe3\xe6\xe8\x69\x93\xe4\xcb\xc5\x2a\x09\x78\xad\xa2\x68\xa5\xdf\x93\x88\x52\xb2\xad\x9e\x3b\x68\xf7\x84\x69\x6b\x6c\xa8\x8b\x63\xb9\x40\x05\xbd\x40\x1c\x4c\x5a\xb3\xd4\xd6\x14\x93\xbf\x69\x49\x33\xbf\x87\x5f\x43\x5b\x4b\xe6\x7e\xcd\x77\x84\xbe\x51\xae\xe9\x7c\x10\xb7\x47\xe0\x50\xf0\x31\x14\x5a\xf5\x00\x38\x98\xb4\x2c\x33\xc8\xa2\x53\x3e\xf2\x1a\x3a\x35\x1e\x5d\x5e\xe1\x36\x7a\xfb\x25\x7a\x1a\xfb\xba\xa3\x70\x7c\x2e\xc3\x15\x5f\xb5\xd3\x23\xa8\xe6\x31\x88\x83\x75\x42\x1d\x9b\xd9\x57\x9f\xe9\x69\xe9\xa9\x37\x6f\x4f\x45\xab\x0b\xdd\x4b\x75\xbc\xb3\xdf\x48\x05\x55\xbb\xb5\xf8\x1a\xa2\x9b\xb4\x41\x45\x49\x41\x1c\x4c\x03\x5d\xe4\x24\x2e\x5b\xc4\x52\x1b\xdb\x12\x09\xa8\xf4\x62\xf3\x0f\xe6\x9b\x76\x7d\x02\x64\x28\x4d\xd9\xa9\xa9\xe7\xee\x79\xe1\x33\x42\x9f\x24\x00\x07\x0b\xab\x3e\x3c\x8e\x1a\xee\xd0\xb5\xac\xd1\xef\x58\xef\x7e\x7c\xc5\x4a\x0f\xbf\x71\xdf\x74\x82\x0e\x8f\x0f\x2d\x69\x2b\x80\x13\xc7\x15\x21\x2d\x10\x87\x90\xd6\xc5\x3c\x1f\xa0\x77\xe3\x79\x69\x65\x91\x3b\x37\xdc\x39\x62\x52\x43\xa9\xf2\xcf\x0f\x0f\x55\xdc\xc3\xc9\x16\x49\x64\x0a\x9c\x78\x8a\xf7\x83\x05\x63\x83\xd1\x07\xfa\xb3\x40\x1c\x4c\x5a\xbe\xdd\xd1\xae\x1f\x58\x4d\xbe\xfc\x61\xce\xfa\x2a\xcb\x95\xb5\x58\x56\xab\xd6\x4d\xd3\xcb\x40\xf2\x20\x25\xed\x52\xe2\xab\x35\xc8\x33\x0a\xe2\xe0\x17\x70\xa0\x71\x5e\x96\xe1\x63\x2c\xbc\x25\xfc\xd9\xbf\xff\x7e\xd7\xf6\xb0\x6f\x9f\x8f\xf1\xf3\x43\xff\x50\x8e\x93\x34\xd9\xc7\x95\x50\x19\x42\x10\x07\xeb\x04\xb9\x5b\x57\xaf\xd8\x9f\x60\xb1\xb0\x3b\x72\xf1\xcf\x18\x37\x28\x2f\x57\x34\xbf\x53\x12\x24\xdf\xb2\xab\x34\xbb\xa9\xee\xe9\x0a\x55\x35\x03\x71\x30\x0d\x5c\xa5\x68\x17\x22\x3e\xfc\x2e\x70\xb4\x56\x60\x69\xff\x25\xd6\x9b\xb9\x1f\x93\xe3\xca\xb8\x64\x17\xf1\xb8\x67\xa1\xab\xd5\xbd\x32\x68\x2f\x14\xc0\xc1\xc2\xb2\xd1\xcd\xe1\xf4\xb8\xaf\xba\x27\x71\x1a\xa6\x12\x62\x29\x2f\x7f\x48\x7f\xe2\x13\x48\x93\x66\x8f\x94\x31\x34\x2d\x1c\x57\xee\x81\x90\x16\x88\x43\x48\xeb\x62\x9e\x0f\xd0\x29\xff\x79\x69\x15\x1a\x5e\xad\x68\xf4\x3a\xba\xc6\xe9\xf4\x69\x48\xf0\x81\x27\x92\x64\x51\x74\xa9\xee\xd1\xc3\x92\xb6\xa7\x21\x2d\xf7\x36\x7c\x6b\x10\x3f\x1f\xc4\xc1\xa4\xd5\xb3\x6f\xa0\x7d\x7d\x26\x88\x54\x46\x5e\x70\xba\x31\xe6\xeb\x55\x85\x57\x3a\x49\xbc\xbc\x37\x6b\x53\xe3\x0c\xc3\x0b\xbf\xeb\x41\xde\x71\x10\x07\x93\x56\x9f\x75\xd6\xdd\x03\x03\x5c\x2c\x29\xb7\x15\x75\xe6\x50\x82\x55\xcd\xc1\xb4\xba\xe6\xec\x84\x17\x37\x90\x2c\x6c\x8e\x32\xd4\xdd\x11\x61\x41\x1c\x3c\x63\x93\x94\xdb\x77\x73\xc0\xe8\xdb\xb0\xa1\xb1\xa2\xe6\x9d\x2c\xad\xec\x9b\xc8\x16\xf5\xc9\x7d\xe9\x51\x85\xa1\xcc\x8a\x8f\x56\xa1\xef\x2c\x88\x83\x69\x00\x59\x5a\x6e\x78\x9e\xc2\x5b\xba\x9b\x47\x2a\x56\x50\xf7\x8b\x73\xf9\x2f\x3e\x8b\x8f\x89\xd9\x55\xd1\x54\xa1\x16\x52\x76\x39\x98\x90\xe7\x43\x59\xe3\x72\xe1\xcc\xd3\x4e\x05\x6c\x37\xb9\x38\x2d\x7c\xc9\xc1\xf4\x4e\x3d\x45\x9c\xfd\x6e\x97\xf2\x64\x81\xde\xc4\x35\x93\x8e\x7f\x7b\x3e\xe6\x7b\x0f\x6a\x7d\xa3\xaf\x7d\xcb\xa9\x9a\x9e\x4a\xd7\x9e\x71\xbf\x63\xee\x44\x13\xdc\x57\xb9\x77\xb5\x75\xf1\x72\xe7\xdd\x8a\xd8\x7f\x9f\x4d\xfe\x99\xf7\x0d\x4d\xcd\xc9\xbf\x7a\xb7\xc6\xb0\x93\x76\x74\x3b\x61\x41\x83\x04\xe3\xda\x4a\x18\xbb\x0c\xd1\x08\xea\x96\x47\x26\xcc\xf3\x01\x8a\x7c\xde\xf3\xf1\xf8\x7a\xd8\x4e\x95\xf6\x99\xef\x3d\x9a\x2a\x3a\x52\x6f\x6a\x11\xe2\x30\x7e\x2b\xea\xeb\xb4\x95\x9c\x7e\xc2\x6f\x33\xe6\xca\xcb\xff\x85\x0e\x18\xd2\x23\x1f\x7f\x37\xe0\xe6\x17\x5f\x0f\xfe\x34\x94\x24\x43\xfa\xf6\x88\x9a\x9f\x43\xe6\x43\x56\xe6\x76\x44\x0c\x75\x1f\x32\xe4\xf9\x00\xc5\xfc\xc7\xf3\xe1\x07\xf7\x7c\x78\xbd\xb8\x37\x7e\x68\x51\x36\xfa\x32\xec\x12\x87\x5c\xaa\xe8\x24\xe5\x2f\xbc\x87\xf5\x47\x4c\x65\x64\xfb\x6f\x29\x6e\x2c\xe3\xfd\xad\xcb\xf8\xe5\x6d\xbf\x73\x9e\x0f\x9b\x91\xf4\x4e\x03\x59\x2f\xbc\x5b\x52\xc7\x27\xad\x74\xfb\xcb\x65\xfe\x14\xd5\x9d\x31\xae\x05\x5a\x66\x62\xbf\xd8\x46\xfa\x96\xff\xbe\xc9\x73\x9e\x8f\xa8\x27\x13\xbd\x93\xe5\x2b\x77\x3d\x31\x03\xea\x07\xaa\x35\xae\xee\xc6\x94\x2b\x5e\x7e\x63\xef\x7a\xf5\xdd\x7a\x76\xf6\xc6\x83\x67\x7f\xdf\xe4\x39\xcf\x07\x47\x7c\x0a\xca\x6c\xbe\xd6\x6d\xfc\xab\xed\x38\x01\x98\x2e\x7a\x1f\x1c\x15\x32\x49\xa4\x9f\xb1\xf5\xd7\xde\xcf\x9e\x63\x67\x7b\xfb\xf7\x4d\x9e\xf3\x7c\x2c\x5b\x11\xd4\x7e\x90\xd8\xbe\xb5\x6d\x32\xf8\x21\x55\x35\x77\x9a\x63\x7e\xe9\xe3\x04\x36\x5e\x67\x24\x8d\x25\xd6\xe8\x7d\xd5\xaf\x7f\xdf\xe4\x39\xcf\x87\xcf\x80\x3c\xb9\xba\x22\x06\x32\x0a\x9e\x0d\xfb\x20\xaa\x58\xfc\x48\x1c\xed\x4f\xd6\x93\xce\x53\x29\x4c\x2b\x57\xff\xe7\x4d\x55\x7f\xdf\xe4\x39\xcf\x07\xff\x0d\x01\x65\xd4\x1f\x5a\x55\x9c\x0f\x62\xd4\x99\x14\xe3\x5e\x7a\xf1\xe6\xc5\xd0\x38\xd9\x71\x95\xe7\x31\x9c\x65\x84\x2c\x89\xff\x7d\x93\xe7\x3c\x1f\x3f\xdf\x44\xed\x61\xfa\x13\x70\x4c\x86\xa3\xcd\xba\xb3\x4d\x95\xec\x92\xb0\x5b\xea\x0e\x57\x6b\x77\x4e\x32\x7c\x42\x12\xcc\x7f\xfd\xdf\x2c\xcb\x40\x43\xf1\xfc\x57\x28\xf3\x33\x56\x0d\x87\x99\x7f\x25\xde\x88\x58\x32\xa3\x07\xe6\xd3\x56\xd6\xd6\x1c\x39\x7b\xb7\x3d\x43\x2c\xbc\x58\xf3\x10\x57\xc8\xd3\x0b\xe2\xe0\xb9\x36\x24\x8c\x2f\x34\xd8\xd9\x58\x38\xf4\x7a\xd1\x67\x48\xa2\x57\x1d\x5a\x19\x17\xa7\x9f\x59\x7d\x12\x35\x23\x4e\x5c\x0e\x89\xd6\x82\x72\x6d\x00\x1c\xec\x2b\xa4\xe7\x5d\x56\x4d\x4a\x1a\x5e\x29\x73\xf9\xd7\x9b\xad\x69\xc6\xc4\xeb\xdd\x6c\x12\x03\x8a\x82\xee\x8b\xd9\xfa\x42\xf4\x5f\x76\xa1\xf2\xcd\x20\x0e\xd6\x09\x79\xae\xa9\x73\x68\x72\x6f\xd5\x1f\x1e\x57\x5e\x79\xe7\x9b\xc1\x1c\x6c\xe9\xfb\xc8\x56\x2e\x25\x33\x63\xe8\x43\xf3\x62\x48\x0b\xb4\x5b\x0c\xe2\x60\x61\x59\x30\xfe\x3c\x7d\x85\xc7\xaf\xd0\xf4\x44\x5e\xe1\x8e\xc8\x97\x28\x09\x07\x7a\x8f\x93\xd7\xb2\x34\x0f\x85\xfc\xca\x42\xf3\xee\x40\xa5\x2d\x41\x1c\xec\xe3\x86\xf5\xa1\xdf\x9c\xe7\x87\x47\xf0\xbd\x9e\xd2\x8c\x62\x62\x3d\xc6\x26\x6f\xe2\x20\x51\x45\x5b\xf6\xdd\x88\xe1\xd9\x4b\x6e\x01\x7c\x08\xcf\x07\x88\xfb\xa7\xce\x87\xdf\x85\x3c\x1f\xa0\x37\xee\x79\x65\xd9\x9c\x39\x8d\x7b\x67\x6d\xc5\x92\xf3\x94\x5b\x60\xde\x25\x67\x11\x5d\xba\x91\xf1\x87\x2d\xa9\xe7\x46\x78\x96\x14\xd5\xed\x78\xa8\xbc\x01\x88\x83\x29\xcb\x1b\xf7\xc5\x9f\x31\xee\xe7\x37\x8b\xce\x4a\xe5\xf0\x17\xea\x35\x1f\xf1\x27\x91\x3f\x66\xb7\xd6\x22\x32\xc5\xd0\xfa\x44\x98\xf2\x15\xca\x3b\x04\x70\xf0\x8c\xf9\x8e\xa4\xd2\x21\x2f\xd3\xba\x99\x72\x9f\x6b\xf9\x0a\xeb\xe5\x8b\xf3\xbe\xf9\xaa\xe5\xfa\xbd\x5a\x65\x32\x0d\xac\x7a\x0f\x21\xf3\x29\x88\x83\xaf\xca\x06\x2d\x97\xcf\x6c\x77\xee\x09\xe6\x86\x7d\xc5\x66\x38\xbe\x49\x7c\x5b\x64\x8e\xb9\x34\xaf\x1b\x75\x24\x48\x59\x6f\xf9\x21\x74\xbc\x01\xe2\x60\x61\xd3\x6a\xaf\xc8\x46\x88\xbb\x31\x86\xb4\xd0\x7f\x15\x71\xf2\x6b\xe9\xeb\xd5\x5e\x2d\x69\xa6\x44\x09\x17\x15\xc3\xea\xd7\xe7\xad\x45\x84\x05\x71\x70\x65\xdd\xec\x16\x97\xd0\xd0\x33\x8d\xfb\x9e\x5e\xd0\xfe\xf9\xd6\x10\x47\xde\xa4\x5a\x3c\x6e\x4d\x00\xed\x7a\xd3\x9f\x6b\xb7\x37\x05\x10\x53\x67\x10\x87\xb8\x16\xf1\x62\x9e\x0f\xd0\x97\xf5\xbc\xb4\x5e\x98\xfd\x78\x54\xaa\x55\xf1\xd5\x51\x45\xc7\x59\x59\xda\x9b\xa7\xc7\x8a\x7d\x8c\xb7\x37\xca\xc7\xf4\xfe\xd6\x2b\xa4\x85\x4e\xe8\x92\x08\x10\x07\x5f\xf0\x33\xdd\x57\x2b\xe5\xa0\x13\x14\xf7\xd0\x88\x43\xa7\xf3\x2f\xdc\x6f\x4b\xbf\x9c\x5d\xd1\xe9\xfc\xfa\xce\xcb\x46\x56\x8d\x2c\x68\x09\x0d\xe2\x60\xd2\x3a\x0e\xc6\x2f\x39\x10\xc3\x0f\x0b\xfe\x9c\xaf\x2d\xa7\xe2\xb3\x7c\x13\x0b\x1b\xff\xe9\xd5\x74\xd5\x02\x8f\x3b\x91\xd2\x6a\x5a\x50\x85\x7c\x10\x07\xeb\x04\xe2\xd5\x87\x65\x07\xdd\x03\xf9\x3b\x4d\x56\xbf\x44\x42\x95\xdc\xbf\x52\x4f\x95\x12\x06\x7f\xaf\x99\x28\x23\xba\x61\x78\xc9\x1a\x3a\x41\x07\x71\xb0\xb0\xeb\x55\x86\x09\x51\xfa\x75\xcf\x3f\xc9\xcd\xeb\xfe\xcc\xd5\x13\xef\x8b\x88\xcb\x8c\xb2\xec\xb0\x51\x75\x25\xa2\x78\x85\xf1\x08\xba\x7c\x01\xc4\xc1\xa4\xb5\xfc\x89\x46\x7d\x53\x76\x35\xd2\x6e\x96\xbe\x5b\x37\xd3\x24\x3d\x47\xde\xf4\xe3\x02\x2b\xb9\xb1\x78\x99\x9e\x98\xfe\xb1\xea\x20\x42\x5a\x20\x0e\x21\xad\x8b\x79\x3e\x40\x33\xa8\xf3\xd2\x1a\x24\x7f\x7d\xa3\xab\x9e\xe9\x57\x0e\xd6\x6b\xb3\xe9\xb5\x36\x31\xf9\x6e\xe1\xf6\xa7\xf5\xed\x04\xdd\x6f\x0b\x59\xd1\xa5\xdb\xa1\x03\x03\x10\x07\x93\xd6\xbb\x2c\xb4\x04\x71\x3d\xdc\xb0\xf9\x6a\x05\x5e\x9a\xbd\xd2\xe9\xa5\x4e\x86\xe1\x70\x17\x42\x63\xde\x90\x40\xf2\x91\xb5\x10\xe8\x4c\x1a\xc4\xc1\xa4\x55\xa6\xc7\x55\xd8\x79\x46\x4f\x72\x77\x2e\xdb\x3c\xa9\x28\x0e\x59\xc2\xb0\xff\x53\x45\x12\x4a\x5e\x0c\xa5\xc0\xce\xd3\x27\xb2\xb6\x88\xb0\x20\x0e\x9e\xe4\x31\x41\x59\x24\x48\x5e\x4c\x2f\xad\x66\x1f\x11\x29\xe2\xff\x40\x36\xa1\xf6\xcd\x33\x8f\x9d\xe8\xcb\xe1\xb8\x0f\x7f\xdc\x91\x69\x85\x92\x3c\x00\x1c\x2c\xec\xf8\xea\x87\x1a\xf3\xfe\x6b\x32\x55\x13\xea\x62\x6d\xde\xa5\x84\x77\x65\xaa\xd8\x6f\x74\x3d\xe1\xfd\x8d\x43\x65\xc0\x4a\x1c\x00\x55\x7e\x02\x71\xe7\xf6\x92\x48\x54\xea\x55\xbc\x5d\x65\x2c\xab\xb9\x82\x47\x57\x95\xc7\x25\x3a\xeb\x39\x13\xbe\x17\xf0\x65\x60\x7d\xe6\x0c\x3f\x78\xfe\x7f\xf6\x92\xfe\xdf\x1c\x42\x5a\x17\xf3\x7c\x80\x66\xca\xe7\xa5\xd5\xcc\x91\x38\x43\x26\x32\x3e\xb5\x1c\x3d\x35\xcd\xe1\xbf\xb4\x46\xe8\x27\x66\xa8\x84\x1b\xd7\xda\x22\xe0\x9d\x7c\x95\x6d\x0a\x32\x69\x81\x38\x98\xb4\xda\xc8\x32\xae\xdd\x48\xab\x6a\x51\xf0\xee\xc2\xdc\x1b\x2e\x45\x1b\x65\x77\xd6\xfc\x3a\x23\x76\x3c\x54\x8c\x9e\xea\xb1\xac\x01\x5d\x9a\x0e\xe2\xe0\xc9\x5e\xfd\xd7\x47\xc3\x5b\xc8\xc2\xdc\xe5\x90\x1f\x2e\x37\xd0\x55\x52\xd9\xa8\x11\x4f\xf9\x5d\x33\xc0\x34\xd6\x7c\x7b\x60\x6b\x94\x0c\x25\x7b\x01\x38\x78\xbd\x9f\xda\x0e\xa1\x87\x43\x11\x34\x47\xc4\x83\x81\xaa\x0c\xe5\xd7\xd2\x7b\x0e\xb9\x97\x31\xf4\x7c\x6b\xbf\x26\xbf\x77\xe2\x27\x83\x6e\x49\x00\x71\xb0\xb0\xba\x67\xc9\x62\x2b\x71\x3a\xeb\x66\xc8\x7d\x63\x18\x73\xb6\xf8\x61\xbe\xda\x86\xa2\xdf\xf4\x5f\xe6\x62\xa1\x68\xe5\x22\x7f\x82\xb6\xa8\x40\x1c\x4c\x5a\x74\xc7\x74\x3d\x42\xf8\x16\xe8\x14\x09\x42\x0c\x26\xc4\xd9\xe9\xa6\xa7\xd7\xbd\x48\xaf\xac\x6e\x7d\xf7\x90\x28\xbb\x26\x43\x95\x8c\x90\x16\x88\x43\x48\xeb\x62\x9e\x0f\xd0\x8a\xe8\xbc\xb4\xfe\xf4\xbf\x4c\x96\x4a\xf8\xaa\xc7\xf6\xa8\x74\x29\x8c\xff\xf5\xc0\xef\xdc\xf0\xad\x03\x73\x5b\x14\x41\x43\xfa\xc5\xc2\xe4\x7b\x50\x71\x57\x10\x07\x93\x56\x5d\xbf\x66\xf3\xb5\xc2\xe6\x6b\xd6\xb8\x22\x97\xc6\xf9\x7f\xdb\x7d\xf7\xea\x78\x34\x3e\x8e\x79\xf9\xa5\x56\x7d\x68\x1f\x03\x61\x01\x34\x7b\x01\x70\x30\x69\xd9\x8c\x20\x0d\xdc\x99\x42\xcb\x43\xab\x9a\xbb\x5e\x7f\x3a\x27\x1f\xe9\xa3\xf4\x16\x9d\x0c\x43\xe6\xce\xd8\xcf\xbb\x76\x48\xe2\xbc\xd0\xcc\x10\xc0\xc1\x3a\x81\x4a\x3d\x31\xe0\xb5\x81\x83\xa2\xe9\x87\xc0\xe3\x9d\x3b\x4c\x0b\x9a\xfc\xe2\x27\x36\x82\xeb\xea\xeb\xc9\x33\xd9\x7a\x19\x3b\xa4\xd0\x79\x3f\x80\x83\xaf\x90\x7e\x10\x91\x4a\x9b\xe5\x31\xdf\x90\xb2\x2e\x4a\xf0\x93\xbf\x51\x1e\xc8\x38\x10\x95\xaf\x5e\xb1\x31\x3c\x49\x78\x6d\x4b\x59\x14\x5a\x21\x01\x38\x98\xb4\x3e\x3a\x58\xa6\xca\x13\x45\x4c\x3d\x6f\x98\x4c\x0d\xce\xd9\x74\x51\x45\xbd\xa6\x38\xd2\xb7\x41\x39\x73\x8f\xcc\x2d\x8e\x6d\x92\x11\x21\x2d\x10\x87\x90\xd6\xc5\x3c\x1f\xa0\x95\xef\x79\x69\xa5\x75\xe7\x79\x19\x8b\xdf\xff\x86\x59\xdc\x47\xbe\xd8\x8c\xaf\xc4\x93\xd3\xf6\x33\x59\x2a\xf7\x67\x30\x9a\x07\xf1\x54\x21\x8b\x03\x34\xd5\x04\x70\x30\x69\x1d\xb3\x07\x18\x99\xed\x96\x60\xe5\x6d\x94\x32\x51\xfb\x57\x0a\x34\x7d\x94\xcc\x26\x28\xb3\xe9\xdb\xe4\xf3\xd1\x96\x23\xa4\x81\x56\x72\x20\x0e\x26\xad\xcf\x63\xba\x2d\x61\x63\xe8\x0b\xe4\x34\x3e\xbf\x1e\xed\x34\x1f\xc9\x25\x31\x56\xb7\x71\xe0\xbc\xda\x8b\xe8\x9f\x15\xba\xda\xaf\x82\x08\x0b\xe2\x60\x9d\xb0\xbc\x15\x3e\xda\xcc\xca\xe8\x41\x3c\xbf\x6e\x81\xf7\xf6\x49\xc2\xeb\xf9\x9a\x1f\x04\xf1\xc9\x72\x48\xcd\x1e\x01\x8f\xf1\xf4\x38\x11\x61\x41\x1c\xfc\x22\xb9\xd7\x96\x91\x2e\x5f\x3f\x67\x70\x2c\x30\xc4\xe5\xa7\x65\x6c\x15\xfe\x66\x57\x8d\xb1\x27\xbe\x3d\xae\x7d\x7b\x3c\x96\x68\x06\xca\xd1\x04\x71\x30\x69\x7d\xb9\xa1\x2a\x19\x58\x55\x61\xec\xa4\x11\x1f\x80\x95\x3e\x52\xdb\x9b\xd8\x22\x36\x91\xd3\xe1\x9d\x78\xd7\x7a\x90\xe7\xc6\x75\x68\x07\x1c\xc4\x21\xa4\x75\x31\xcf\x07\x68\x87\xe3\xbc\xb4\xe6\x50\x29\xe6\x19\x68\x32\xad\x6f\x32\x3a\xf7\xdb\xd2\x87\x75\x50\x14\x17\x17\x2a\x86\xc9\x92\x3d\xbe\x31\x9d\x86\xa6\xe5\x00\x8d\x2c\x10\x07\x2f\x7c\xa5\xcf\x12\xc5\x60\xc8\xb8\x20\xb0\x2f\x83\xad\x26\x61\x80\xc5\xc6\x71\x92\x2b\x9b\xb9\x8c\x55\xb4\xbc\xd9\x8f\x5c\xea\x0d\xfd\x59\x20\x0e\x26\x2d\x9a\x9d\x9e\x99\xf6\x3f\xc8\x38\xe8\x06\xf6\x0e\xb5\x09\x4a\x16\x9c\x95\x5f\x6b\x91\x08\x0b\x95\x83\x7a\xd9\x3f\xf2\x31\x85\x40\x2e\x25\x10\x07\xeb\x84\xb2\xbc\x17\xa9\x19\xa9\x09\x25\x7d\x39\xfb\xd6\xae\x1d\xc1\x3c\x8b\x27\x75\x01\x3f\x3e\xea\x54\x4b\x99\x2a\x65\x65\xfd\x12\x11\x86\xa6\x70\x00\x0e\x16\x36\xd2\x7d\xee\xea\x81\x57\x6f\x6b\x30\x6a\x82\xbe\xe0\x1b\xac\x80\xe2\xdf\x6a\x0c\xf9\x6f\x69\x47\x70\x84\x25\xbd\xd6\x84\x3e\xdf\x84\xb2\x02\x00\x1c\x4c\x5a\x45\x84\x75\x41\x74\xab\x56\xaf\x68\x3a\x02\x88\x75\x6f\x62\x65\x93\x6f\xaa\x62\x39\x0d\xb2\x8c\x38\xf2\xff\x48\xf7\x6d\xea\x3b\x42\x48\x0b\xc4\x21\xa4\x75\x41\xcf\x07\x68\x0f\xfb\x1f\xcf\x87\xdf\x39\xcf\xc7\xc7\x5f\x1d\xc4\xd1\xea\x76\x83\xa6\x57\x1b\xdf\xfd\x78\x1b\xc5\x2a\xf8\x79\xa1\xf7\xfa\x71\x4f\xfd\xaa\x83\x68\xe2\x94\xe8\xfb\xca\xbf\xdf\xe9\x3b\xe7\xf9\x90\xd0\x31\xa4\xf7\x2c\x65\x30\xeb\x0b\x0a\xee\x79\xe9\xc7\x8d\xe4\x7f\xa3\x4c\xf6\x1d\x16\x57\x38\x26\x8f\x91\xc9\x78\xd4\x3d\xaf\xbf\x6f\xf2\x9c\xe7\xc3\xa5\x11\x73\xad\x38\xc7\xce\x4f\x2e\xcc\x65\x8a\x8b\x4d\x92\xa0\x3e\x75\xdd\x65\x61\x9d\x22\x8c\xfd\xb0\x09\x4b\x31\x92\x63\xe7\xbf\xd9\x5c\x04\xf5\xe5\xf9\x01\x6e\xed\xf8\xcd\xc4\x0a\xa7\xa6\xc5\x5a\xc7\x1e\xbd\x70\xbd\x0d\x8f\xb6\xb5\x6e\xcf\x00\x97\xa4\xd0\xd0\xfa\xa7\x14\x6a\x95\xb9\x24\x42\x84\x20\x0e\x36\xc0\xc9\xfa\xb3\xa2\x35\xbf\x6c\x3f\xe9\x23\x22\xea\x92\xe1\xb0\xb1\x6b\xf6\xff\x2c\x17\xa1\xf6\x9a\xdf\x61\x1d\xf9\xfa\x13\xc2\x9b\x44\x50\x22\x3e\x80\x83\x0d\xf0\x49\x1c\x8a\x57\x41\x52\xb7\xb3\x89\x90\x14\x78\xf5\xf7\x43\x9a\x36\x50\x50\x67\xf9\x77\x53\x7f\x3a\xcd\x3a\x4b\x0c\xdd\xed\x80\x2c\x68\x20\x0e\xd6\x09\xc9\x4a\x76\x7c\x42\x8a\xac\xbb\x0d\x5e\xb2\xd5\x8f\xbd\x8c\x1e\xd6\xa7\x5c\x61\x97\xf6\x1d\x6f\x78\xaa\xd9\x43\x23\x77\x66\x1e\x81\x08\x0b\xe2\xe0\x35\x59\x25\xef\xa7\x18\x59\x44\x3f\x7c\x6d\x1e\xe6\xdb\x98\xfe\x68\x5d\xc7\x7e\x0a\x89\x08\x85\x73\x23\x4f\xb0\x0b\xa3\x3d\x99\xd7\x0a\x72\x39\x03\x38\xf8\x00\x57\x13\xf5\x14\x12\xaa\x17\x92\x74\x8a\x45\x8d\x7d\x63\x7f\xca\x2a\xd7\xa8\x7a\x4d\xa8\xd2\xc4\x98\x5a\x95\xc7\x8b\x76\xcc\x1a\x1a\xe0\x00\x0e\x31\xc0\x2f\xe6\xf9\x00\x8d\x99\xf3\xd2\x72\xad\x0a\xe3\x79\xec\x2c\x90\x3f\xc5\x82\x2b\xe7\x1f\x67\x54\x9e\x51\xc3\x46\x31\x2f\x62\x7c\x6b\x6d\x8f\x6d\xdf\x43\x45\xf9\x35\xe2\xe7\x83\x38\x98\xb4\x6e\x12\x22\x45\xab\xeb\xda\xc9\xd9\xca\x87\xf6\x7a\x7c\xd3\x5f\xdb\x3a\xad\xa9\xe2\xc6\x78\xa3\xdb\xcf\x86\x35\x91\xa4\xa9\x06\x2d\x51\x41\x1c\x4c\x5a\x2f\xb4\x8a\xf1\xca\x3f\xaf\x7f\x79\xf6\x31\x30\xef\xde\x91\xc1\x6d\x45\xa3\x25\x2b\x8c\xb6\x0e\x6c\x76\xc3\x04\x2c\xfc\x49\xb7\x38\x68\xc3\x0a\xc0\xc1\x2f\x66\xef\x74\xeb\xbe\x7b\xa3\x24\x48\x4d\xbb\x55\x6a\x92\xb2\x76\x01\x47\xb4\x50\x57\x7b\xb4\x81\xb8\xc8\xe7\xb2\x7c\xe8\x3a\x55\x2c\x22\x2c\x88\x83\x5f\x48\x6d\x1e\x4c\xb1\x70\xa7\x66\x70\x0b\xa7\x1e\x2b\xa5\x67\x91\xee\xfb\xb3\x27\x34\x87\x6d\xb9\x01\x38\xb6\xd9\x9e\x78\xf7\x07\x29\x11\x61\x41\x1c\x4c\x5a\xaf\xd8\xbf\x37\x96\x14\x3e\x73\x69\xbb\xa5\xd1\x2b\xd1\x20\xc4\xc1\x1f\xd8\x18\x3d\xe4\xa9\xf1\xe3\x7d\x71\xf1\x28\x46\x62\x93\x10\x42\x5a\x20\x0e\x21\xad\x8b\x79\x3e\x40\xef\xc6\xf3\xd2\x32\x5c\xf4\xa7\x43\xc9\x76\x53\x90\xd6\x08\xa9\x6d\xfc\xcc\x9e\xf4\xb5\xbb\x66\x7d\xa1\xc4\xae\x23\x7b\x71\x28\x5f\xdd\x27\x7b\x02\xf1\xf3\x41\x1c\x4c\x5a\x5a\x27\x06\x46\xea\x4c\x94\x31\xc9\xad\x57\xfc\x38\x5a\x3e\xb3\x84\x1a\x9f\xe0\x8b\xfc\x18\xaf\x5b\x2c\x47\xfb\xb0\xe4\x5a\x3c\x8e\x08\x0b\xe2\x60\xd2\xda\x7e\xa1\xdd\x2f\xa0\xf4\x7a\xe3\x33\xa9\xc5\xc6\xde\x9d\xb5\xa1\xd8\x9c\xce\x5d\xdb\x9f\xee\xfc\xa1\x2a\xe2\x57\xaf\xbc\xdf\x35\x84\x92\x28\x00\x1c\xfc\xee\xa4\x05\x6d\x29\x2b\xc9\xa5\xe2\xc4\xdc\x2f\x2f\xdc\x13\x87\x8e\x71\xba\xa9\x27\xf1\xbc\x4c\xb5\xd0\x59\xf0\x2e\x05\xc6\xfb\x43\xfb\xe1\x20\x0e\x5e\xf9\x29\xc3\x85\x91\x33\xc2\x99\x80\x77\x4f\x34\x38\xd7\xa8\xe4\x16\xb6\x9f\x2e\x7f\x42\x2f\xf3\x2e\x52\x7d\xce\xd1\xf3\x8c\xe6\x0c\x44\x58\x10\x07\xb7\x92\x3c\x6e\xe4\xe8\x7f\xbc\xb9\xaf\xa3\x1e\xdf\xfe\x58\x65\x21\x4c\xf0\x7e\x59\xeb\xcb\xac\xd4\x02\x8a\xaf\xd8\xfb\xeb\xd1\x6c\x3a\x08\x69\x81\x38\x84\xb4\x2e\xe6\xf9\x00\x9d\xf2\x9f\x97\x96\x62\xb9\x60\x6a\x56\x86\xa7\x07\x0a\xf7\xe3\x0f\x5d\x13\x13\xfa\xfd\xf5\xd9\x3d\x75\x0f\x8b\x96\x0b\xf0\x1c\x0d\x4e\x0b\xda\xa1\x4f\x0c\x88\x83\x49\x6b\xe2\x2e\xea\xad\x8d\x4f\xf7\xbe\x32\x28\x7e\xa3\x2e\xdc\x53\xb9\x7c\x1d\xbf\x75\x29\xc0\x5e\xc5\xc2\x98\xe0\xcb\x40\x3a\xa1\x1e\x74\x7d\x18\x88\x83\x49\xcb\x7f\x54\x53\x6e\x32\x15\xab\x22\xcf\xa4\x79\xc8\xfb\xe7\x7c\x57\x38\xad\x73\x89\xd9\xe6\xe3\x4d\x3c\x34\x42\x39\x6b\xf2\x6d\xe8\xad\x05\xe2\x60\x9d\x50\xd3\x1a\x68\xc6\x72\xd2\x69\x37\xf2\xa7\x2c\x6a\xe9\x57\x17\x17\xaf\x9b\x46\xed\x18\x55\x64\x92\x59\x9a\x9f\x87\xfa\x1b\x32\xa8\xa4\x3a\x88\x83\x85\xd5\x91\xdc\x50\x8a\x21\xd5\x66\xc7\x57\x8c\x54\xbd\x3d\x5a\xdf\x8b\x5a\x7e\x79\x91\xc6\xf3\x0d\x57\x85\xa6\xd1\x37\x1a\xca\xf0\x24\xc8\xf3\xa1\xa2\x33\x20\x16\xe0\x6f\x70\x45\xef\x16\x4d\xf3\x4e\x05\xf1\xbc\x88\xda\x4e\x3e\x5e\x0e\x2b\x9b\x8e\xb3\xc3\x7b\xba\x6a\xc7\xc4\x7f\x7b\x3e\x7e\x91\xff\xd8\x79\xd7\x5e\x7a\x7d\xc1\xc9\x8a\xd5\x61\xfe\xc5\x9a\x67\x60\x90\x9e\xdd\x40\x49\x42\xfe\x0e\x9d\xe9\xa0\xc8\x68\xe9\xbf\x50\xb7\x52\x87\x04\x4e\xe7\x1f\xaf\x09\x03\xd1\x1c\xdf\x86\x0e\x35\x5e\x67\x26\x0f\xb3\x73\x39\xe3\xc3\xb5\xc9\xfe\x9a\xf7\xa0\x8e\x15\xe6\xf9\x00\x45\x3e\xef\xf9\x70\x49\x47\xa7\x44\x7e\x7b\x98\x66\x9b\xc7\x9e\x31\xc5\x82\x9a\x30\x87\xe9\x1f\xf4\xb6\x44\xf3\xd6\x4d\xd1\xb6\xec\x1b\xd4\x8d\x0d\xff\xde\x69\x7d\xce\x30\xbb\xeb\x26\xe7\xaf\xc4\x24\x8d\x84\x82\x81\x7d\x45\xee\x2a\x0f\x0e\x1b\xa3\x40\x2c\x0b\xb6\x22\x7e\x41\x60\xdc\x1f\xc8\xf3\x01\x8a\xf9\x8f\xe7\xa3\x19\xee\xf9\x78\x56\x57\xba\xe2\x28\xfa\x71\x49\xce\x4f\x94\x5a\x9d\xb1\x4c\xe7\x0c\x0d\x73\x17\xa7\xe8\xe9\xa2\xaa\xea\xcb\x86\x6f\x26\x15\x22\x7f\x3d\xc9\x6d\x3e\xe7\xf9\xf8\xe0\xbf\x7c\xbb\xfd\x38\x67\xa5\xd5\x63\x8e\xa0\xae\x29\x2d\x4f\x3a\xa2\x41\x46\xff\x74\xb4\xa8\xf6\x49\x09\x76\x94\x1a\xd7\xa3\xbf\x6f\xf2\x9c\xe7\x23\x3e\xcc\x47\x99\xf0\x39\x6e\xac\x73\x90\x98\x7b\x70\x1c\x49\x5e\x30\x8b\xfa\x01\xdf\x5d\xe9\x83\xdf\x99\x69\xad\xbe\x11\xdd\x82\x7f\xdf\xe4\x39\xcf\x87\xb9\xf2\xf7\x37\x3d\xf6\x52\x84\xf7\x3b\x75\x28\x6f\xb1\x44\x85\x89\x74\xd0\x10\x94\xd8\x3a\x0c\x2b\x69\xca\x96\x11\x07\x0d\x78\xff\x7d\x93\xe7\x3c\x1f\x48\x8c\x77\x6b\xdf\x27\x9a\x9b\xa9\xbe\xbb\xcf\x89\x8a\xa7\xdd\x6c\x7b\xff\x7a\x8b\x42\xdb\x89\x13\x31\x9a\xfe\x83\x57\x73\x2f\x6b\xfe\xbe\xc9\x73\x9e\x0f\xcb\x5e\xb9\x48\x4d\x2d\xdd\x81\x2d\xfb\x3f\x9e\xb9\xfe\x2c\x4c\x73\xed\x15\x14\x31\x3d\x05\xc7\x46\x77\x39\xdd\x26\x92\xeb\xfe\xbe\x80\x4a\xf3\x39\xcf\xc7\xf1\xa3\x20\x5e\x9f\x84\xf2\x59\x7c\x9c\x23\xe2\xe6\x8c\xfe\xa8\xbb\x54\x69\x7e\x1f\x15\xdf\xa3\x5c\x0e\x19\xce\x14\x7b\xf6\xfb\x3f\xb8\xe5\xf3\x9c\xe7\x63\xb5\x4e\x48\xd9\x99\x9d\xd4\x2f\x1a\xa5\x42\x63\x6d\x23\xdb\x65\x79\x44\x44\xd4\xca\x6f\x96\x04\x2f\xc6\xf3\x26\x0a\xff\x63\xba\xff\x66\x59\x06\x1a\x8a\xe7\xbf\x42\xc6\xbf\x3b\xef\x7c\xd2\x51\x73\x2f\xc8\x6b\x57\xfe\x19\x4c\x5d\x66\xc3\x10\xac\xa4\x6d\x7f\xd2\x26\xa9\x9b\x26\x1f\x63\x18\x0a\x5d\xae\x05\xe2\x60\x5f\xa1\x8f\xbd\x45\xef\x76\x91\x79\x7a\x2e\xd5\xfd\xba\x8d\xe2\x7a\xef\x90\xa8\x77\xf4\xb6\x2d\xaf\xa9\x96\xc1\x71\x38\x73\x76\x4d\x39\xb4\x07\x0f\xe2\xe0\x27\xf3\xa8\x71\x03\x0f\x63\xd4\x96\xe2\x55\x3a\x3b\xdd\x77\x2c\x08\xe9\xbe\xc8\xf9\xf9\x77\x66\x72\x1a\x99\x1b\x2a\x3a\x66\xef\x43\x65\x13\x40\x1c\xac\x13\x2a\x0c\xb0\x17\x53\xd4\x24\xb0\xca\x1a\xea\x34\x9e\x4e\x57\xae\x45\x63\xf6\x06\x30\x5a\xe6\x25\x96\x0a\xcf\x0c\x89\x1c\xa5\x41\x69\x92\x20\xee\xb9\x94\xe4\xbf\xc3\x6e\xa2\x49\xf8\x71\x8f\xad\x49\x0c\x20\xfb\x87\xe4\xb6\x58\xb6\x36\xf6\x44\x5b\x7e\xee\xca\x49\x9f\xe2\x26\x7a\xab\xed\xed\x07\x15\x1a\x06\x71\xb0\x4e\xb8\xdd\xb4\xbb\xef\x33\xb0\xbe\x7f\x4f\xb6\xe4\xce\xe9\xd1\x31\x43\x0f\x7a\xd0\xd1\xf4\xfd\xa7\x22\xa5\xed\x67\x18\x84\x3e\xa1\xe5\x08\xcf\x07\x88\xfb\xa7\xce\x47\xf3\x85\x3c\x1f\xa0\x37\xee\x79\x65\x95\x46\x6b\x8d\xf8\xd2\x8f\xbd\x9d\x19\x61\x78\x83\xc2\xbc\xc0\x1d\xbc\x1d\x1b\xb4\xc4\xac\x8c\x6d\x6f\x72\xf8\x71\x63\x5f\x20\x1e\xf1\xeb\x41\x1c\x4c\x59\xfb\x74\x12\x94\xd2\x19\x1a\xf5\x1a\xba\xb7\x7e\xb8\xc7\x9b\x52\x46\x73\x51\xb4\x2f\x6b\x87\x9f\xa9\xe1\xe1\x62\x8c\x60\x7a\x42\x4b\x68\x10\x07\xeb\x54\xd9\x03\x3f\x5b\x93\xbb\xb2\xc2\xc5\x93\xf7\xff\xd4\xa4\x4d\x8c\xa2\x58\xd6\xb4\xfa\xf7\x5a\x64\x95\xc5\xd2\xfa\x28\x15\xda\xe5\x22\xc2\x82\x38\x58\x27\x4c\xdc\x6e\x1c\x2d\x90\x09\xe2\xcc\xd8\xbc\xf3\x71\xef\xaa\xd6\xf2\xfb\xfb\xc9\x8e\xac\xa5\xeb\xbf\xfc\x45\x0b\x5f\x92\x96\x6b\x2a\x42\xb3\x31\x00\x07\x53\xd6\xe4\xd7\xf5\x4e\x4e\x8e\xca\x77\x81\x8e\x73\x83\x4f\xc7\xc3\x6d\xe5\x38\x6b\x71\xeb\x56\x2b\xbd\x69\x0a\x22\x29\x6b\x92\xd7\x21\xe3\x0b\x88\x83\x75\x42\x57\xec\xb7\x39\xb7\xcf\x41\x33\x74\x31\xda\x48\x8d\x35\xca\x6b\x1d\x52\xca\xac\xe4\xbe\x98\x0c\xc5\xef\xbd\x82\x9f\xa5\x9d\x96\x23\xa6\xce\x20\x0e\x71\x2d\xe2\xc5\x3c\x1f\xa0\x2f\xeb\x79\x69\xa9\xe3\x57\xe2\x33\xf4\x36\xad\x2f\xf7\x5c\x47\x0b\x0b\x46\xc6\x68\x8e\x74\x74\x38\x1d\xc2\x5d\xac\x2c\x41\xe5\x7b\x8d\x14\xf6\x0a\xf1\xf3\x41\x1c\x4c\x5a\x79\x45\x37\x4a\xb0\x90\xae\xfd\x78\x81\x8d\x41\x72\x75\xa6\x3b\xf2\x94\x34\x81\x4b\x2a\xa8\x6b\x4b\x46\x8b\xe9\xac\xc8\x51\x1e\x17\xb2\x7e\x01\x38\x58\xaf\x16\x59\xd0\x1a\xfe\x60\xc3\x52\x32\xfc\x64\x69\xec\x6d\x16\xf7\xae\x86\x67\x84\x8c\x40\xa0\xe7\xba\x05\x67\x71\x0c\x77\xca\x17\x0a\xa8\x32\x0d\x80\x83\x75\x42\xf5\x6e\x76\xe2\x9d\x45\x5a\x56\x5f\xf5\xf8\xcf\x37\x8d\xc5\x74\x58\x0a\x9e\x3e\x21\xe4\x65\x90\xff\xac\x91\x6b\x74\x93\x25\x17\xba\xe0\x06\xc4\xc1\xa4\x25\x3c\x5d\x58\x72\xb9\x77\x12\xbb\x8d\x5f\x3f\x97\x52\xef\x87\xce\x9b\xe3\xed\xb5\x0c\xd5\x77\x51\x45\x22\xc1\x04\x64\x67\x5a\xd0\x79\x3f\x88\x83\x5f\x96\xcc\x12\xa0\x24\xdd\xa8\xb6\xba\xba\x5d\xf4\xe6\x48\xad\x09\x47\x26\x93\x55\x67\xbd\xbd\x76\x77\x65\x6c\x0e\x49\x9d\xdf\xce\x04\x21\x2d\x10\x87\x90\xd6\xc5\x3c\x1f\xa0\x19\xd4\x79\x69\xf1\xaa\xa0\x63\x2f\x5d\xd9\xfb\x4d\x8f\x9b\x40\x82\x52\x16\xed\xf3\x0e\xbf\x7f\x7b\xe8\xf1\x6d\xe1\xd3\x5b\x7f\xb8\x09\x5f\xd2\x7f\x46\xfc\x7c\x10\x07\x93\x16\xd5\xfd\xa5\x3f\x81\xa7\xdf\xfa\x2d\x64\xc9\xe8\x2c\x72\x58\x02\xdb\xf4\x7e\xef\xef\x0f\x4b\xd5\xcb\xb6\x0f\x60\xeb\xf6\x26\x40\xa9\x33\x20\x0e\x7e\xc4\x45\x80\xb6\xcf\x26\xf7\x78\x80\x56\x64\xe5\xa3\xdb\xef\x20\xb5\xbe\xad\xdf\xe6\x7f\x6a\x46\x46\x6c\xaf\xdb\x59\x30\xf3\xd3\x43\xe5\x88\x41\x1c\xac\x13\x14\xa2\x70\x66\xe6\x86\x06\x12\xa8\x4f\x2f\xc5\x89\x96\x16\x59\x63\x70\xce\x9b\x8f\x2d\xa5\xa6\x91\x50\x7b\xcc\xbb\xbc\xcf\x84\x5e\xdd\x20\x0e\x26\x2d\xb9\x2b\x74\x06\x5a\xc8\x5b\xde\x18\x2f\xea\x31\xb1\x8e\xa6\xdc\xef\x95\xce\x0b\x16\xea\xc7\xdf\xce\x72\xcf\xff\x4d\xc3\x9c\x6e\x00\xe5\x8e\x00\x38\x58\x27\x1c\xe8\xf7\xcb\xa7\xe0\xf1\xb0\xa0\xde\x17\x66\xea\x32\xb2\xe9\xc6\x47\xb5\x0a\xce\x7b\x12\x50\xf8\xba\xf5\x17\xab\xe1\xad\x30\x28\x7f\x08\xc4\x21\xa4\x75\x31\xcf\x07\x68\xa6\xfc\x3f\x16\xfc\x32\xdf\xd8\x6c\xc3\x90\x97\xcc\xab\xf8\x05\xb3\xf6\x94\x8c\x6a\x14\x55\x90\x6e\x68\x1f\x4a\x70\xbc\x96\x0c\x2a\x48\x0c\x81\xea\xfd\x80\x38\x98\xb4\xd2\x63\x7f\xfc\xd1\x6e\xa9\x19\xa6\x77\xc5\x53\x08\x6f\x50\x7e\x9f\x2b\xe9\x79\x96\xc3\xfa\x93\x8c\x08\x29\x55\xdc\xab\x7f\x11\xb2\x15\x82\x38\xf8\xb7\xa0\xa4\x3f\xd0\x38\x25\x55\x2a\xd5\xb4\xdd\x9e\xfa\xb1\x98\x3e\xb3\xe0\x72\x93\x71\x42\x64\x1e\xf2\x4a\x3f\x73\x8e\x9a\x32\x94\x47\x08\xe2\x60\x9d\x40\xdb\xb1\xec\x75\x29\xc6\xfa\x39\x21\x83\xe9\xeb\x04\xa4\x7c\x21\x53\x73\x5d\xf4\xe4\x61\x9b\xf2\xf4\xc7\x04\x4a\x33\xd3\x0f\xa0\xb0\x20\x0e\x26\xad\x8e\x90\x66\x1f\xd3\xc9\xf4\xdc\x29\x73\x6e\x1c\xe2\x59\xf2\x8f\xbc\xc2\x66\xec\x5a\xe3\xf2\xd3\xca\x46\xc3\x2e\xb4\xad\x13\x39\x88\xb0\x20\x0e\xd6\x09\x62\xae\xa2\xeb\x11\x6a\xbe\x13\x06\x1d\xf3\xd6\x9c\x92\x7d\x98\x98\x0e\x72\xea\xd3\x06\xa8\x26\x85\xb1\xb5\xd4\x65\x87\x2d\x9a\x08\x69\x81\x38\x84\xb4\x2e\xe6\xf9\x00\xad\x88\xce\x4b\xab\x51\xfc\x4a\x34\xa7\xfe\x6b\x2e\xa2\xbc\x07\x71\x97\x5f\xc4\x3e\xa3\x9e\x41\x4b\x7b\x54\x5b\x3d\x5d\xc2\x81\x3f\x41\x53\xb2\xa0\x81\xf8\xf9\x20\x0e\x26\x2d\x91\xb0\x2b\x13\x8d\xab\x39\xf5\x4b\x5b\xea\x9a\xac\x0d\x53\x0a\x6a\x6b\x44\x33\xb5\xd6\x31\xb3\xb3\x69\x6e\x97\x6b\x43\xb3\xb8\xa0\xf2\x06\x00\x0e\xd6\xab\xf7\x71\x1d\x2f\xa7\x98\xd4\x78\x56\x0d\x99\x4d\x20\x97\xa3\x9a\x09\xa0\x52\x84\xba\x85\xbe\xcc\x11\x79\x10\x42\x3b\xfe\x63\xe9\x19\x22\x2c\x88\x83\x75\x82\xe0\xc4\x67\xcf\x1b\xb2\xb5\x68\xf7\x0a\xc9\x17\x63\x32\xdb\xe8\xd2\xbf\x3d\x7c\xc4\x41\x35\xa4\xea\xd5\xda\x31\x2b\x96\xfb\x00\x9a\x6e\x83\x38\x98\xb4\x02\x98\x55\xd1\x25\x6f\x9f\x35\x4d\xbe\x42\x6d\x46\x8f\x20\x64\xa3\x36\x65\x71\x67\xd9\x6a\xbd\xc2\x73\xc3\x41\xb2\x17\xdf\x00\xba\xf8\x11\xc4\xc1\x27\x9c\xe1\xda\xa7\x44\x62\x93\x75\x67\x36\x75\x6e\x49\x0b\x39\xd6\x86\x93\x4d\x9e\xe3\x03\xc5\x0a\xcf\x8e\x2e\xb7\xfb\x96\x2f\x92\x23\xa4\x05\xe2\x10\xd2\xba\x98\xe7\x03\xb4\xf2\x3d\x2f\x2d\xd1\x0f\x5a\x28\x09\x3b\xd2\x99\x06\x09\x1d\xfc\x57\xe9\x9f\xca\x2f\x59\x33\x9d\x1e\x87\x5c\x6f\xa5\x7b\xbb\x5a\xe4\xc6\xdd\x06\xcd\x60\x41\x1c\xfc\x60\x5e\x55\x3a\x7b\xd4\x85\x5b\x75\x6c\x76\x9f\xac\xb2\x8f\xe3\x49\x51\xbe\xea\xb1\xd7\x91\x11\xc5\x91\x6e\x6b\x20\x17\xc7\xff\xc7\xda\x7b\x87\x73\xf9\x3d\xf0\xff\x46\x42\xc8\x2e\x11\x21\x7b\x66\x95\xbd\x57\x76\x88\x6c\xb2\xb7\xc8\xce\xde\xd9\x23\x23\x7b\xef\x1d\x21\x64\x64\xcf\x8c\x08\x95\x59\xb2\x95\x84\x8c\xdf\xf5\xfd\x5d\xef\xd7\xfd\x79\x7f\x6f\x9f\xeb\x7b\x5c\x57\x9f\xff\x1f\xd7\x39\x5e\xc7\xe3\xdc\xf7\xb9\xcf\x79\x9e\x73\x42\xa0\x7f\x16\x88\x83\xb5\xea\x7b\xac\xe8\x63\x0d\xa7\xfc\xd4\xd3\x30\xfa\x66\xf5\xcd\x39\x92\x11\x7f\x06\x35\x32\x0a\xdb\x92\xba\xe5\x00\x4a\xc6\xbc\xff\x1c\x4b\x0e\xe2\x60\x8d\x30\x3c\xd9\xac\xb4\xa5\x52\x38\xf3\x43\xc5\x8e\x1a\xef\x73\x54\x94\x65\x8f\x14\xc7\xb8\x0a\x92\x88\x46\xb9\xf7\x93\x56\xa3\x1d\xa8\x11\x40\x1c\x4c\xad\xc4\x30\x79\x0a\xa5\x14\x47\x9d\x36\xf9\x03\x06\x8c\x5b\xba\x0b\x03\x76\x0c\x4a\xd8\x91\xd1\x62\xa7\x4e\x85\x68\x12\xc7\x41\x9e\x88\x62\x41\x1c\xac\x11\x88\x99\x5e\xcd\x48\x34\x29\x5b\xcb\x2f\x2d\xe3\x25\x4c\x26\x78\x5f\xfd\x9e\x2d\x33\x57\xff\xc7\xf3\x0f\xda\x54\x54\xb9\x10\xfd\x14\x42\x2d\x10\x87\x50\xeb\x62\x99\x0f\xd0\x0c\xc7\x79\xb5\x3e\xe9\x6a\xcc\x10\x5f\x15\xf8\xd3\x64\xeb\xf3\x26\x8b\xc1\xb0\x3e\x5d\x93\xdc\xec\xed\x0f\xfe\xaf\x6a\xec\xba\xd6\x37\x1f\x74\x43\x4b\xc2\x20\x0e\x1e\xdd\x76\x73\xe1\xa6\x3f\x8e\x1f\x7e\x22\xab\xdf\xdb\xc8\x8a\xe3\xde\xa8\xcb\x6f\x6e\xa3\xdc\xc8\xd6\x61\x17\x7d\xf6\xbb\xdc\x17\x4a\xd2\x80\x38\x58\xab\x3a\x3f\x1e\x7d\xa8\x54\x34\xce\xec\x72\x59\x79\x60\xf3\xb7\xe9\xaa\xc4\xd5\xdb\xd9\x57\xb6\x4d\x55\xde\x7f\x62\x4c\xf3\x1d\xbc\x04\x85\x20\x41\x1c\x7c\x6b\x04\x92\xa8\x17\x09\xad\x49\x2e\xdb\xef\x3c\x9d\x80\xb9\xe5\x1b\x4a\x51\xde\x05\x9e\x34\x0d\x36\x9e\x23\x3b\xa1\xb4\x7f\x7e\x42\xcb\x00\x20\x0e\xa6\xd6\xf5\x7b\xdf\x6d\x1f\x65\x3d\x6e\xf6\xb5\x39\xaa\x13\x7a\x26\x15\x7a\x9d\xfc\x17\x5a\x6b\xf1\x4d\x0a\xb6\x5f\xb4\xf7\x63\x6d\xfc\xa7\x10\xc5\x82\x38\xf8\x15\xa8\x76\xb9\xce\x83\xe3\x33\x57\xf6\x25\xb3\x58\x2c\xee\x71\x13\x99\x1b\xfb\xb0\xd1\xfc\x08\x4c\x28\xd5\x97\xb2\x44\xc9\xa8\x90\x44\xa8\x05\xe2\x10\x6a\x5d\x30\xf3\x01\x9a\xc3\xfe\x27\xf3\xd1\x76\x2e\xf3\xe1\xe0\xca\x3c\xfd\x62\xf2\x70\xf8\x43\x13\xff\x74\xab\x93\xe9\xdc\xdc\x8d\x41\x45\x77\x25\x75\x9f\x4c\x65\x57\xf5\xa0\xe4\xb8\xfe\xbf\x9f\xe9\x3b\x97\xf9\x48\x1b\xc4\x5f\x08\x7b\x95\xa2\xea\x1b\x66\x31\x78\xf8\xea\x93\xb2\xe2\xb6\x52\x8e\x47\x9d\xf9\x4e\xe1\xeb\xc8\xfb\x78\xdf\x4d\xe2\xfe\xbe\xca\x73\x99\x0f\x2d\x55\x9d\x8d\x0c\xd7\xcb\xa6\x0f\xb2\x82\x6f\x64\x62\xd1\x64\x6b\x6f\xfb\x26\x7d\xd5\x5c\xd9\xff\xe4\xe1\x3a\xc7\x59\x8b\xf2\xe0\x7f\x33\xb9\x08\x6a\xcb\xf3\x1d\xbc\x48\xf2\x2d\x71\xa0\x40\x84\xc3\xe6\xb7\xc9\x8f\x7b\x4b\xc7\x31\xf3\x09\x9d\xfb\x7b\xd7\xee\xbf\x66\x6d\xb0\xdd\x7b\x6c\xf4\x1c\x3a\x1a\x07\xc4\xc1\x3a\xb8\xca\xf5\x0d\x1a\x9d\x35\x8a\x21\xed\x24\xd9\xe6\x2e\x86\x87\x2c\xb4\xbc\xdf\x96\xf4\xa9\x67\xa4\x9a\x05\xc6\xd2\x59\x14\xdb\x7c\xa0\xcf\x7f\x00\x07\x73\x7b\xae\x80\xc6\x70\xd2\x75\x23\x83\xe4\x26\x93\xc4\x23\x3c\xc5\xd5\xfb\xc2\x81\x05\x24\xec\x37\xcc\xb1\xc9\x37\x52\x2c\x97\x22\x4c\xa0\xb9\x1a\x00\x07\xbf\x8a\x39\x4c\x86\xac\xf6\x8a\x70\x5e\x07\xf1\xb0\xd2\x4e\x15\xd6\xfb\xc5\x94\xdd\xd2\xa1\xcf\xa2\x39\x84\x07\x4c\x64\xfe\xa6\xa2\x34\x88\x62\x41\x1c\xac\x83\x57\x90\x3b\x1e\xe0\x47\xf2\x67\x49\x9f\x5e\x0b\xbb\x9e\x29\xdd\x97\xc0\xf1\x6d\xa4\x1a\xb5\x99\x78\x56\x84\xc5\xfb\x5b\x03\x37\xf4\x35\x01\xe2\x60\x8d\xe0\xf2\x38\x20\x64\x32\x3f\x41\x57\xbd\x8f\xe6\xbe\x38\xba\xa8\x94\x4a\x6a\xfd\x50\x73\xc3\xe2\x7b\x37\x2c\xe4\xb9\xe7\x4f\x17\xea\x10\x1d\x1c\xc4\x21\x3a\xf8\xc5\x32\x1f\xa0\x3e\x73\x5e\x2d\x4b\xb7\x79\x3d\xff\xd2\x98\xcb\xc9\x8f\x8f\xaf\xa3\x57\xe6\x1b\xff\x5a\x9e\x45\x4e\x5f\x77\xb5\x3d\xfa\x48\xbc\xf3\xb5\x93\xb6\x19\xf1\xf3\x41\x1c\x4c\xad\xa5\x07\x07\x54\xbc\xdd\x68\xe4\x4f\xb9\x8d\x87\x70\x12\x89\x9e\x66\xed\xb4\xdf\x9e\xc0\x4a\xce\x8b\x41\x46\x0d\x3a\x13\x6b\xbd\x01\xc5\x10\x01\x1c\xac\x55\xef\x4a\x3e\x0f\x44\xbe\x99\x90\xaa\x4c\xab\xaa\xed\x68\xc3\x7f\x68\x2e\x1f\x12\x61\x42\x1b\x2e\x2a\x87\xfa\xfe\xd1\x5d\xd3\x07\xd0\x8e\x79\x10\x07\x6b\x84\x01\x21\xba\x77\x09\x3d\x4e\x8d\x2e\x5f\x1f\xf2\x6a\x87\x78\x6e\x6e\x72\x96\xbc\xc7\x0a\x78\x1d\xf7\x4e\x3e\x4a\x3a\x8f\x24\x16\x7a\xd3\x81\x38\x98\x5a\xb8\xe1\x77\x0b\xe4\xbd\x43\x8d\x2d\x3a\x94\x68\x7f\x79\x95\x3c\xfa\x58\x36\x7a\x40\x72\xad\x6c\x27\xd5\xc3\x23\x2a\xf8\x6a\x0c\x74\x74\x04\x88\x83\x35\x02\x51\x1e\x9d\xfc\x11\xd9\x33\x67\xa5\xdd\xf5\xc2\x65\xf5\x75\x5b\xd2\x4a\x62\x14\x31\xa7\xfd\xdc\x97\x6f\x3b\xf7\xd9\xd7\xb7\xc8\x11\x6a\x81\x38\x84\x5a\x17\xcb\x7c\x80\x9e\x8d\xe7\xd5\x1a\xfa\xbd\x6c\x64\xb9\x28\x32\xb6\x61\xdb\xb5\x24\xe5\xc6\x27\x81\xcc\xe8\x47\x53\xd8\x94\x58\xdb\x13\xbb\xca\x4e\xd4\x2f\x06\x5d\x41\x0b\xe2\x60\x6a\x85\x52\x2f\x70\x76\x88\x56\x7c\xba\xbe\xf4\x7d\xeb\xe1\xa3\xeb\x5e\xdc\x3e\x4c\xbc\xb3\x66\xd7\x98\x32\x35\x54\x22\xd6\x69\x76\xa1\x56\x05\x71\xb0\x56\xfd\x38\xa3\x6b\x67\xeb\x21\x1b\xc9\x15\xa8\xb3\xd5\x38\x34\xdf\xb6\xf7\x5c\x3b\x18\x8f\xac\x59\xcf\x47\x75\x63\xf6\x66\x69\x6b\x19\xa2\x58\x10\x07\x6b\x84\x92\xbb\x24\x1f\x91\x4c\x24\xfd\x1b\x78\x2f\x39\x84\xd0\x11\x3f\xb3\x1a\xf2\x3c\x7a\xdb\x72\xfb\x76\x14\x1f\x29\x66\x82\xb3\x8f\x23\xa2\x58\x10\x07\x53\x8b\x31\x7a\x72\xd7\x45\xe9\x75\x54\xde\xcd\x57\x7d\x91\xc5\x1c\xde\x69\xc4\xc5\x53\xdf\xba\x72\xad\x33\x4d\xb8\xbe\xbe\xf6\x15\x85\xf6\x02\x83\x38\x58\x23\x3c\x9b\xdf\x17\x3f\x61\xbc\xbc\xc4\x42\x47\xbf\x6f\xad\xcd\xef\xe7\x88\x6b\x26\xa8\x5c\x3e\x6e\xcf\x1f\x8a\x7a\x76\xb8\x38\xb6\x82\x50\x0b\xc4\x21\xd4\xba\x58\xe6\x03\xb4\xca\x7f\x5e\xad\x6f\x46\x82\x21\x7d\xf1\x45\x96\x47\xc6\xaf\x16\xf2\x0b\xf1\x5c\x29\xc4\xc9\x17\xa4\xad\xf6\xca\x50\x0b\x5d\x45\xed\x0f\x1e\x43\x01\x7a\x10\x07\x53\x6b\xf8\x97\x2c\xc9\xe3\x1f\x5b\x0c\x2f\x56\x1b\x85\x9b\x9f\xde\x28\xd6\x7d\xd3\x11\x19\x7f\xc9\x48\x73\x01\x8f\xbd\xc7\x4d\x3a\x4a\x0a\xfa\x3c\x01\x70\xf0\x0b\x73\x0d\xe8\xd9\x4b\x5f\xb6\x5e\xad\x4e\xf1\xd7\x2e\x64\x3f\x39\xba\x15\xb8\xc6\x79\x8f\x83\xea\x8d\x16\x95\x64\x37\xd5\x78\x88\x3f\xa2\x58\x10\x07\x6b\x84\x97\x4a\xcc\x66\xbf\x04\x85\x8c\x4a\x4b\xfc\x30\x0c\x6b\x65\xbe\x6b\x54\x63\x11\x0c\xec\x70\xcb\x12\x28\x2a\x7e\xc6\xf8\x91\x03\x1d\xa7\x0d\xe2\x60\x6a\x91\x5e\x5f\x24\x7d\xaf\x46\x12\x3b\x81\x37\xd3\x75\x5b\x5b\x63\x96\xbf\x2f\xf0\x4d\xc2\xbd\x29\xfa\x07\x2d\xf1\xf5\x0e\x87\x5f\x2b\xa0\xcc\xc7\xab\xd8\x35\x31\x7d\x0a\x53\x21\x2a\x2b\x94\xe7\x29\xee\x78\x87\x2c\x0f\x8c\xe5\xaf\x91\xe9\x3a\x09\xcc\xfb\xa0\x8c\xe6\x56\x33\xfd\x3b\xf3\x71\x7f\x9b\xbe\x1a\x2f\x50\xe1\x51\x6e\xf4\xa5\xc5\x31\x21\xb6\xc7\x64\xbf\x09\xd5\xce\xa6\x70\x91\x5d\x58\x36\xbb\xd6\xb2\xbc\xd0\xfe\x85\xb2\xf4\xbf\x59\xa2\x08\x26\x7a\x5b\x6b\x60\x30\xd3\xf7\x6e\x90\xbc\xf0\xdb\x95\xc4\xe9\x5f\x9a\x7c\xee\xe3\x6e\x81\x37\x83\xcb\x63\x61\x99\x0f\x50\xc9\xe7\x33\x1f\xf1\x0f\xef\x50\xc4\x90\xbd\xaa\x2e\xb1\x7c\x5b\x71\xe9\xc8\xe4\x6b\xb6\xfe\xb4\x48\x6a\x69\x48\x88\x77\xe5\x96\x7e\xce\xce\xc6\xf0\xbf\xd0\xcc\x6e\xf9\xa9\x52\x89\xef\xb1\x22\x15\x9d\x34\x56\x96\x4d\x67\x11\x29\x75\x92\xc4\x11\xdf\x16\x2a\x3f\xbb\xa0\x78\xe4\x4a\x8e\x40\x99\x0f\x50\x99\xff\x64\x3e\x90\x64\x60\x23\xce\x17\x61\x0a\xbb\x99\xb5\x13\xd6\x31\x2f\x2c\x85\x12\x68\xee\x7e\x41\x15\xfe\xfa\xda\x85\xe8\x95\x0c\x93\xd0\x6e\x5b\x26\x1a\xb2\xc3\x5f\x0f\x72\x91\xb8\xe0\x83\x5c\x96\x02\x0e\x5b\x0f\xb5\x49\xfe\xb2\x37\x2f\x9c\x73\xa2\xee\x1c\x4c\x7f\x5d\xf1\xc0\x7f\x78\xad\xed\xf4\xfd\xfb\xe8\x0e\xba\x95\xe3\xbf\xaf\x52\x04\x5e\xe5\xc8\xe7\xa2\x5f\x5a\x92\x28\x7d\x46\x89\x59\xcf\xcb\x1e\x68\x9f\x54\xa8\x08\x14\x21\x1b\xe0\x90\x90\x2d\xb5\xfd\x1c\xc2\x1e\x13\xfa\xfb\x2a\x75\xe0\x55\x3a\x63\xd5\x0f\x51\xab\x6c\xb7\x3c\xcd\x91\xec\xe3\x88\x92\x19\x9f\xc9\x72\x89\x89\xc6\x16\x12\x58\xdf\x1d\x38\x09\xcb\x51\xc1\xf9\xfb\x2a\x5d\xe1\x55\x76\x57\xd5\x3a\x63\xaf\xd2\x65\xba\xdd\xba\x14\x4b\x10\xc5\x50\x74\x77\xff\xe5\x89\x48\x42\xc9\xbd\x38\xbe\x05\x73\x5b\x4f\x99\xcd\xbf\xaf\x32\x1e\x5e\x65\x17\x37\xda\x71\xa9\x79\x95\x99\x42\xde\x5e\xcb\x14\x4e\x8b\xed\x67\xa1\x55\x0a\xc7\x16\x9b\xee\x67\x02\xdc\xf5\x56\xee\xf2\x8d\x7f\x5f\x65\x26\xbc\xca\xd3\x8e\x15\xa5\xad\xdc\x95\x3f\x2b\xfd\xe4\x31\xc3\xee\x84\x09\x72\x35\x6a\xea\x78\xeb\xd6\x4b\x2e\x9e\xaf\xb5\xf9\x35\x1f\xca\xfe\x7d\x95\x6f\xe0\x55\xde\xd8\x6a\xfa\xa6\x5b\xa6\xf2\xdc\xc0\x35\xee\x63\xfc\x29\xf3\x8e\x7d\x98\x4a\x95\xa7\xba\x42\x7a\x3c\xe9\x4f\x93\x97\xb7\xad\xfe\xf6\x02\x24\xad\x8b\x75\xc5\xf3\x6f\x21\x32\x1a\x95\xf0\xac\x6d\xe9\xf0\x6f\x07\xe2\x45\x19\x2a\x04\x9f\x1e\xef\xd9\x7d\x1b\x8a\x66\xb5\x19\x64\x92\xc4\x16\xbc\xdc\x01\xdd\xc0\x01\xe2\x60\x6f\x21\x7b\x17\x83\x42\x41\x0b\x8c\xbb\x7e\x2d\x37\x82\xc5\x31\x50\x5b\xd0\x53\x75\xea\xf3\x8e\xe7\x0e\x36\x59\xdd\x0c\xf2\x3e\x62\x75\x20\x8a\x05\x71\xb0\xb7\xd0\x51\x8e\x83\x83\x0f\x77\xbf\x13\xcd\x92\x45\xc2\x7d\xae\xdf\xd8\x6f\x34\x2a\xa9\x54\x5a\xb3\x12\xeb\xa5\x33\x26\xa7\xa4\xd1\xff\xb3\x9f\x11\xc0\xc1\x27\x9f\x5e\xda\x27\xcc\x57\x2c\x4b\xd7\xba\xed\x87\x68\x90\xa7\x5c\x79\xab\x47\xec\x87\x8d\xfc\xdc\xa6\x81\x80\x68\x3f\xef\xf7\x75\x68\x53\x0c\x88\x83\x35\x02\x6d\x90\x2b\xc3\xe1\xfe\x07\x14\xd4\x71\xe2\x26\x31\x81\x26\xfe\xa3\x47\x4c\xba\x4a\xee\x03\x41\x91\xa7\xbf\x82\x54\xf6\x0b\xa0\xe3\x43\x40\x1c\xfc\xae\x88\x5e\xa1\xe7\x7b\xab\x76\x01\x7e\xb8\x26\x4f\x79\x0a\xc4\x9f\xd1\xd1\xb2\x14\x7f\xda\xc5\x7a\xc0\xef\x74\x6d\x9f\xf6\x12\x16\x2a\x22\xf3\x01\xe2\xfe\x39\xe7\xe3\xff\x3c\xcf\xc1\xe3\x1b\xd0\x13\xf7\xbc\x59\x0c\xee\x79\xed\xd2\x2b\x09\xf1\xc3\xaf\xe2\xb9\x43\x1f\x9b\x54\xbc\xa9\x78\x92\x5e\x20\x7f\xec\x27\xe4\x7c\xd7\xc5\xd9\x5e\x0c\xba\x30\x07\xc4\xc1\x1a\x75\x87\x83\x4e\x2b\xf9\x75\x02\xce\xd0\x9c\xbc\x9d\xf3\xa5\xe9\xce\x33\xec\xe8\x32\x4a\xe2\x0c\x49\x85\xa2\x97\xdb\xb1\x4d\x25\xd0\x3d\xa6\x20\x0e\xd6\xa8\x6a\xa3\x76\x3c\x94\x56\xcd\x71\x0b\x7e\x27\x5e\xf1\x47\xa8\x97\xaa\xcb\xec\x26\xd7\x4a\xe9\x71\x2d\x6c\x9b\x4c\xa3\x31\xbe\x1a\x41\x29\x6c\x00\x07\x6b\x04\x7e\xfd\xd0\x60\xbd\xe6\xf7\x69\xa9\x87\x64\x1a\x6f\xfa\xf8\xb4\x6d\xaf\x35\xd0\x3e\x2a\x69\x29\xc7\x75\x96\xe1\x79\x2d\x71\x56\x02\xed\x96\x06\x70\xb0\x46\xe0\xd2\x4d\x2a\xde\xb9\x4c\x6e\xc1\xeb\x40\x4f\x66\x1c\x69\x87\x56\x95\x4b\xae\x42\x95\x65\xc6\x39\x11\x48\xc8\x80\xfb\x79\xff\x3f\x2b\xd3\x00\x0e\x7e\x47\x6c\x4a\x2a\xab\x1b\xea\x76\x0d\x4f\x9a\x7e\xdd\xa1\xa8\x40\x27\x99\x44\x04\xf3\x87\x9a\x47\x74\x25\xcf\x4d\xf8\x91\x2a\xc9\xe8\x11\x43\x67\x10\x87\xb8\x16\x91\xeb\x42\x43\x67\xd0\x9b\xf5\xbc\x5a\x42\x8e\x62\xf9\x64\xe8\xda\xc6\xbd\xf6\xe3\xf5\x5a\x3f\x6a\x46\x59\x16\xf7\x9f\x7f\xee\x41\x1a\x1f\xae\xbd\x39\x36\xfd\x0c\x19\x5a\x34\x02\x71\xf0\xa1\xf3\x82\xaf\xa6\xdd\x1a\xeb\xb2\x64\xa9\xb3\x72\xfb\x8f\x89\xd6\xbb\xb8\xeb\xa3\x03\xe5\xc9\x12\x6a\x76\xde\x18\xed\x21\x24\x56\xd0\xd0\x19\xc0\xc1\x5a\x55\x51\xd2\xe8\x53\x67\xfa\x1d\x1a\x8f\x47\x2f\xa2\x8e\xda\x1b\xe6\xae\x27\xcc\x13\x11\xc4\x07\x77\x61\x85\x53\xe2\x48\xfd\x2c\x36\x44\x14\x0b\xe2\x60\x8d\xe0\xa3\x7e\xdd\x4b\x44\xf0\x56\x05\xc5\x8a\x17\xd7\x1e\x37\x29\x9b\x61\x1a\x67\xd0\xae\x94\x30\x1f\x11\x95\xf8\x50\x70\xc5\x0a\x74\x22\x05\x88\x83\x35\xc2\x82\xaa\x04\xa1\x63\x11\xc1\x4a\x76\xe3\x8d\x24\xeb\x99\xbb\x6d\xa8\x9a\x1b\x59\x14\x3e\x18\x4d\x79\x83\xce\xf7\x76\xd7\xcc\xa0\x4b\x1c\x41\x1c\xac\x11\xe4\x86\x24\x50\x2a\xc2\x2c\xae\xf2\x0d\xc6\xe4\x31\x5e\x55\xf3\x57\x2c\xd8\xbb\x45\x33\xe5\x41\xd9\xe0\xd5\x3d\x92\x10\x2a\x8d\x8c\x50\x0b\xc4\x21\xd4\x12\xb9\x90\x5a\xa0\x11\xd4\x79\xb5\x7a\x63\x9b\x06\xac\x8c\x6b\x3e\xaa\x1c\xd0\x5d\x3b\xed\x49\x94\x62\x20\x66\x45\xe5\x88\x9a\xac\x5b\x5f\x79\x8d\xb9\x3c\x97\xaf\x0e\x2d\x1e\x03\x38\xf8\xea\xa9\x7c\xea\x4b\xab\xda\x81\xbe\xcf\x6f\xb6\x62\xcb\xd0\x63\x75\x22\xb1\xef\x19\x4f\xb9\x57\x4e\x2d\xbc\xac\xdd\x9e\x0c\x45\x37\x87\x56\x4f\x01\x1c\xac\x55\x87\x55\x05\x51\x99\x82\x48\xc3\x5c\x4d\xaf\xfd\xdc\x0c\xb3\x0a\x69\x64\x8d\x1a\xc2\xfc\xf9\x23\xf0\xce\x8b\x69\xd5\x15\xd7\xc4\xf7\x90\xb1\x00\x0e\xd6\x08\xca\xbe\x5c\x78\x78\x16\xee\x55\xc2\xe1\x71\xab\xde\x2e\xc2\x48\x78\x5f\x59\x07\xca\x13\x58\x87\x3e\xfb\xde\x12\x95\xb7\xad\x58\x46\x14\x0b\xe2\x60\x8d\x30\x79\x59\x25\x82\xe7\x7a\x3f\x07\x33\xd6\xc6\xcc\xf5\x4e\xbf\x37\xa1\xed\x0f\x70\xe4\xf9\xc4\x3b\x16\x76\xb6\x1a\xbd\xbb\xb6\xa8\xa0\x6d\x49\x00\x0e\xd6\x08\x79\x9c\x84\x71\x84\x83\xd6\x24\x94\xfb\x45\xcf\xbb\x22\xeb\x23\x66\xf5\x6c\xdc\x06\x9f\x93\x87\x62\x76\x44\x3a\x8a\xa5\x37\x6c\x20\xd4\x02\x71\x08\xb5\x74\x2e\xa4\x16\x68\xa4\x7c\x5e\x2d\x5d\x69\x02\x42\xa1\xab\xea\xd7\x57\xec\xc9\x13\xa5\x17\x86\x32\xb5\xbc\xca\x83\x8f\x27\x46\xc4\xbe\x2d\xbc\x29\x26\x74\xd0\x84\x56\xf8\x40\x1c\xac\x55\xa9\x16\xb7\x87\xb2\x75\xd1\xda\x52\x94\x3c\xd4\x2a\xcb\x9a\xd5\x37\xf7\xf9\xae\xee\xb0\x86\x8b\x53\xb8\x13\xfe\x31\x52\x12\x80\x4e\x4d\x00\x71\xb0\x56\x55\xd9\x33\xd9\x15\x0a\x10\xde\x54\x2c\xfd\xa3\xb6\xd9\x35\x17\x85\xcd\x8a\x5c\x96\x15\xa2\x4c\x61\xac\xb4\xd8\x11\xc3\xde\x0e\x45\xca\x40\x1c\xac\x11\x36\x44\x1c\x0e\x50\xd4\xd8\x13\xbd\x89\x33\xb9\x3d\xf9\x13\x44\x6e\xcf\x28\x5f\xdb\x95\xdc\x37\x5f\x7e\xe9\xa5\x9f\x99\x7a\x0b\x3a\x3a\x02\xc4\xc1\x1a\x21\xac\x7c\xe6\xac\x31\x21\xa0\xc3\x6a\xbf\xe2\xcc\xe0\x19\xca\x9c\xf8\xc4\x1f\x23\x8e\x22\x64\xa2\x80\xda\x8f\x48\x06\xd9\x32\x29\x88\x62\x41\x1c\xac\x11\xde\xe9\xd6\x54\xf5\xbf\x36\xcb\xe7\x9e\xb7\x5c\x9d\x0a\x94\x96\x42\xc3\x4c\xab\x4e\x51\x34\xef\x96\x3f\x51\x68\xff\x42\x82\xda\x82\x50\x0b\xc4\x21\xd4\x72\xbd\x90\x5a\xa0\x2f\xa2\xf3\x6a\x8d\x63\x68\xe6\x71\xe1\xbd\x62\x08\x21\xe8\x2a\xb8\x83\x27\xcf\xb7\xf1\x0c\xa3\xf5\x6c\xe5\xc5\x1e\x75\x6b\x9d\xc2\x27\xcb\x0c\x68\xb3\x17\x88\x83\xb5\xea\x95\x34\xdc\x79\xad\xc5\x57\x3b\xf3\x97\xbf\x47\xb9\x55\xea\x1a\xde\x28\x98\xed\xbb\x9c\xe0\x92\xa8\x73\x3a\xae\x7e\x2b\x73\x12\x8a\x96\x82\x38\x58\xab\xf2\x58\xfa\xaf\x71\xf3\xe8\xdf\x29\x7b\x14\x13\x81\xc9\xce\xb3\x40\xa3\x4e\x8c\xd3\x62\x3d\xc7\xe1\xfe\x8c\xf7\x49\xcb\xc1\x09\x74\xc9\x11\x88\x83\xdf\x9d\x64\x9a\xe9\x5b\xbe\x31\x87\x5c\xc4\x43\x70\x77\x0c\xb3\x4e\x09\x93\xba\xe4\xfa\x74\x49\x2b\x2b\x1d\x16\x57\xff\x40\xcb\x1a\x14\xd9\x04\x71\xb0\x46\x48\xaa\x77\x70\x4f\x67\x4a\xb7\x6e\xd5\x78\x4a\x1a\xb0\xc3\xe7\xb2\x95\x6f\x20\x5b\x3c\x3e\x9d\xb3\xd4\xd0\x7d\x59\x7c\x08\x63\x17\x51\x2c\x88\x83\x35\xc2\xed\x62\xc1\xaf\x57\x9e\xad\xa4\x7d\xd5\x15\x6a\xc2\x9a\x19\x8e\xbf\x17\xf0\x28\x4c\xc6\x70\xee\x55\xfd\xe3\x78\x9b\x84\x18\xcc\xcb\x08\xb5\x40\x1c\x42\xad\xf8\x0b\xa9\x05\xfa\xf2\xfd\x2f\x2f\x44\x23\xb4\xfe\xe5\x22\x1a\xbd\x22\x89\x2f\xfa\xb3\x9b\xf7\x52\xf3\x2f\xf1\xa1\x0f\x18\xe4\x30\x3c\xdc\xb5\x78\xdb\x72\xf6\xfa\x21\xf4\x42\x04\x70\xb0\x56\xfd\x7e\xd3\xa4\x9c\xe6\x4d\x46\x81\x89\xfa\x8b\xc6\x3b\x2e\x53\x9d\x9f\x44\x3d\x5f\xdb\x46\xf9\xba\x0d\x0e\xb3\x5b\x26\xe5\x6e\x43\x57\xc8\x81\x38\x58\xab\x56\xbe\xf5\x0a\x11\xf1\x4c\x66\xef\xd7\xa2\x9f\xd2\xa9\x2d\x5c\x33\xb1\xe1\xb5\xee\x27\x2c\x60\x8f\x1e\xb6\xce\xab\x2a\x1e\xed\x42\x14\x0b\xe2\x60\x8d\xd0\x9a\x18\x4b\xa4\x87\xc6\xbd\x44\x9d\x11\xc3\xf4\xf6\xfe\xe3\x07\x8e\x1f\x6f\x12\xe7\x5a\xbf\xa2\x46\x92\xec\x2f\xc0\x22\x2b\x25\x42\x14\x0b\xe2\x60\x8d\x60\x19\xdf\x7f\x83\xc7\x7d\x98\xaa\x48\x70\x23\xb0\xe1\x64\x0c\xab\xc2\x95\xcc\xd1\x98\xe2\x29\xb6\x44\x46\x6c\xd6\xfa\x16\x1e\x74\xc6\x03\x88\x83\xdf\x6c\x7d\x2a\x5c\x9b\xa0\x34\x7a\x17\xad\x0d\x2d\x2c\x66\xbf\x55\xe1\x03\xfa\x96\xa6\x52\xa0\xba\x7c\xf0\x92\x90\x56\x74\x94\x96\x3c\x42\x2d\x10\x87\x50\x2b\xf3\x42\x6a\x81\x66\x38\xce\xab\xf5\xa1\x91\x96\x41\xb6\x3b\x30\x74\xa7\x38\x2a\x80\xab\xb5\x58\xde\x36\xe1\xb5\x76\xd4\xa3\x69\xa9\x20\xaf\xc6\x50\x89\xeb\xa6\x47\x88\x9f\x0f\xe2\x60\xad\xaa\x90\xf2\xd3\x80\xae\xcb\x92\xb8\xed\xad\x18\x71\x7f\xc3\xbd\xe1\xd7\xce\xda\x97\x87\xc8\xf6\x7d\xc8\xd5\xe9\x7f\x2f\x3b\x3e\x84\xae\x7e\x00\x71\xb0\x56\x4d\x63\xf7\x49\xc2\x0a\xda\x2a\x27\xf2\xf3\x25\x3a\x24\x30\xac\xbc\xaa\xf8\x60\x53\xe9\x3a\x9a\x61\xbd\x03\xdb\xa9\x6b\xc1\x2b\x4a\x44\xb1\x20\x0e\xd6\x08\xbb\x6d\xb7\x65\x7e\x7d\x1e\x4f\x8d\x8e\x27\xdc\xb9\xd4\x87\xaa\x43\xd5\xbb\xbb\x38\x77\x68\x7b\xaa\x16\xff\x61\x3c\xe5\x76\x33\x74\xb9\x2e\x88\x83\x35\xc2\x17\x15\xf7\x57\x3a\xad\x49\x7f\xa8\xec\xa6\x06\xf0\x91\xac\x46\xb4\x89\xb4\xca\xaf\x3f\x72\xec\x61\xed\xab\x4a\xda\xfe\x49\x07\xdd\xa1\x06\xe2\x60\x8d\x50\x47\xfa\xc7\xb7\x2f\xce\x6d\xb6\x7b\xec\xe6\xa7\xea\x4c\x3f\x54\xda\xd3\xca\xa5\x20\x39\x2e\xfa\xec\x77\x16\x23\xb1\x49\xf2\xbf\x10\x6a\x81\x38\x84\x5a\x6f\x2e\x96\xf9\x00\xcd\x61\xff\x93\xf9\x40\x9a\x3a\x77\xb7\x4b\x25\x3e\xe1\x20\x3b\x75\x46\x80\xd0\xcc\x18\x0d\x6e\x1a\x05\x5f\x84\x4e\x93\x83\x41\xd8\xeb\x7b\x86\x67\xde\xab\x91\xd6\xa8\x7f\x3f\xd3\xf7\x13\x5e\xe5\x04\x21\xca\x5b\xf9\x8e\x62\x27\xb6\x1d\x92\xc4\x9b\x98\xfe\x9a\xe2\xd1\x66\x24\xd5\x72\x5f\xd2\x05\x84\x71\x37\xd7\x53\xc3\xfe\xfe\xa8\x64\xa4\x33\x78\x95\x71\x5b\xa3\x47\xb9\x1f\x62\x56\x83\x44\x0e\x32\xc9\xc3\xf0\x30\x97\x5c\xc9\xfc\x64\x83\xcf\xde\xd4\x3d\x63\x59\xcb\x99\x1d\x0b\xfe\xdf\x4c\x2e\x82\xda\xf2\x7c\x07\x67\x92\x7f\x32\x87\xb4\xbf\x6e\x33\x6f\x73\xdd\x3f\xbe\xb5\x60\x40\xd6\xc5\xca\xb2\x00\x5d\x18\xe7\x7b\xa0\xb4\x57\xe5\xd8\x3d\x02\x84\x84\x20\x0e\x7e\x46\x94\xba\xdc\xa0\x7b\x47\x90\xe5\x69\x74\x79\x7b\xf5\x25\xbc\x93\x58\xd5\x84\xa2\xc3\x26\xfa\x17\x53\x24\xc1\x6e\xf9\xfc\x67\x23\xd0\x19\x51\x00\x0e\xe6\x36\x9f\xba\x37\xf5\x47\xbe\xa7\x58\xfe\x47\xd4\x46\xf4\xf4\x19\x63\xd2\x06\x8b\x04\x57\x23\xf3\xd1\x2f\x13\x5d\x9a\x6c\x58\x99\x82\x86\xa6\x20\x0e\x7e\x0b\x89\xb4\xd8\x87\xde\x98\x3f\x6a\x5c\xb2\xad\xf4\x8f\xae\xaf\x18\xfa\x5a\x53\x4e\xcc\x72\x45\x96\xd5\xd5\x08\x9c\x95\x3f\x6b\x81\xce\x64\x05\x71\xf0\xa7\xdc\xab\x77\xac\x7e\x18\x15\xc8\x8f\xb3\x75\x17\x3e\xc4\xb6\x62\x1b\x8e\xfe\x48\x08\xe2\xb9\x2c\xba\x9f\xcc\x26\x95\xe9\x7e\x0d\x9a\x03\x01\x71\xb0\x46\xe0\xaa\xb6\x3a\xe2\x53\xa9\xb8\x9c\xa4\x7e\x45\xee\x9b\x17\x9d\x74\x75\x9e\xd8\x1e\xb6\x1f\x71\x47\x5d\xa2\xbc\x0d\xad\x97\x78\x26\xa2\x83\x83\x38\x44\x07\x9f\xba\xd0\xbb\x03\xd4\x67\xce\xab\x55\xd3\xdb\x4b\xd8\x1e\x79\xc4\x70\x18\x56\xd2\x3a\x1f\x40\xec\xb6\xe8\x63\x32\xdc\xd3\x17\xaa\x56\xe6\xb9\x41\xf7\xe0\x04\x09\x9a\x06\x04\x71\xb0\x56\x65\xb0\x23\x4c\x76\x9d\x6b\xc3\x15\x90\xb2\x3f\xae\x1c\x26\xe8\xc6\x08\x6c\x44\x1f\x52\xd5\x79\xbd\xbe\x2b\x16\xd3\x34\xc7\x91\x0b\x4d\x5a\x02\x38\x58\xab\xb6\x4f\xfd\xe6\x54\xaf\x1a\x7d\xa6\xd6\x27\x1f\xe0\xc8\x76\xeb\x85\xec\xfc\x87\x86\x2e\x85\x79\xa2\x5c\x47\xbe\xb7\x9c\xc8\xa1\xd0\xc1\xb4\x20\x0e\xd6\x08\x87\x22\x55\x37\x3a\x6c\xc8\x7f\xb4\xa4\x05\xbc\x79\x28\x7c\xd3\xc6\xec\xbb\x33\x4a\xdf\xf3\x06\x8e\x6a\x7c\xb7\xb8\x05\x29\x1e\x6e\x44\xb1\x20\x0e\xd6\x08\xef\xfe\x04\x4f\xc6\x26\x7c\xbe\xd3\xf9\x83\xdc\x47\x2d\x36\x43\x03\x83\xb7\xd9\x7a\x63\xd4\x38\x38\x77\x76\x92\x8e\xf1\x71\x0a\xb4\x8b\x00\xc4\xc1\x4f\x8e\x8c\xf3\xdd\xfb\xb0\x7a\x0b\x73\x82\xdf\x02\x3b\x85\xbb\xf1\xab\x3a\xf5\x52\xb2\x05\xe3\x77\xf7\x7c\x74\xa7\xd4\x95\x21\x94\x67\x08\xb5\x40\x1c\x42\xad\x9f\x17\x52\x0b\xf4\x6c\x3c\xaf\xd6\x4a\x8b\xed\x9a\x94\xcc\xc1\x92\x56\x84\x76\x84\xa8\x77\x98\x92\x41\x6e\x86\x5f\x0f\xb2\x2a\xae\x8f\xa3\x8f\xd5\x67\x6c\x0d\x33\xc4\xcf\x07\x71\xb0\x56\x7d\x3f\x7d\x8a\xbd\x1d\xf4\x25\x2e\x28\x2c\xa1\xb1\x5b\x03\xff\x90\xe7\x1b\xc1\xa6\x04\x83\xda\xab\xc1\xfe\xa7\x4a\x31\x04\xa5\xfb\x50\x1c\x19\xc0\xc1\x5a\xf5\xc5\x27\x5d\xea\x4d\x45\x94\x00\x09\xe9\xec\x56\x97\xe7\xa7\x59\x24\x61\xc9\x9f\x89\x9b\xd2\xb5\x57\xdc\x5d\xe5\xc9\x31\xec\x03\x10\xc5\x82\x38\xf8\x11\x4d\xbd\xdf\xda\x1d\x23\x7f\x9b\x2c\x50\x37\x9e\x75\xc8\xfc\xf2\xe7\xcb\xd9\x1c\xe8\x22\x29\x27\xb2\xca\xb4\xd3\x74\xc9\x75\x97\x45\x14\x0b\xe2\xe0\xd7\x67\xc7\x2b\x5b\xd9\x7e\xd4\x55\xe5\xdf\xc5\x3e\xf1\xb2\x11\xe8\x0b\x7d\x34\x84\xfc\xbb\xf7\xf8\xb2\x60\x88\xa5\x23\xd1\xc9\x1f\xe8\x78\x3f\x10\x07\x6b\x04\xef\xd6\x59\xbc\x8f\xea\xc6\x58\x42\xc3\x06\x33\xb9\x34\x5e\xa2\xd7\xd2\xdd\xe2\x34\x85\xd9\xc6\x71\x96\x2d\x1a\x9a\xb0\x57\xca\x10\x6a\x81\x38\x84\x5a\x67\x17\x52\x0b\xb4\xca\x7f\x5e\x2d\xdb\xee\xfb\x0f\xd2\xbf\x6c\xc4\x14\x48\x1e\xbc\xe2\x28\x9f\x95\x7a\x7a\x6a\x28\xa2\x19\x73\xfb\xd3\x25\x66\x64\xb4\xc4\x7e\x0a\xe8\x32\x47\x10\x07\x6b\x55\xb4\x08\x63\xab\x03\x5f\xef\x47\x82\xce\x05\x52\xd4\xde\x8e\x65\xbf\xdf\xbe\x98\xe7\x65\x4b\x7c\x67\x95\x31\x41\x52\x35\x3a\x06\x5d\x1b\x04\xe2\x60\xad\x7a\xd5\x1e\x03\x63\x60\x0e\x6f\xa1\xfe\x89\xc5\xb3\xa3\xce\x22\xcb\x46\x9b\xdd\x47\x56\xe6\x7f\xea\x7e\x2c\xe1\xe7\x38\x3d\xbc\x0a\x9d\xa5\x04\xe2\x60\x8d\xf0\x51\x3c\xd6\xdd\x94\x76\x2b\x5f\xf5\xaa\x44\xad\xe0\xda\x8b\xaf\x76\x4f\xb8\xae\x32\xa2\x94\xfa\x73\xda\x5f\xa6\x5c\xff\x45\xbd\x0d\xa5\x94\x00\x1c\xac\x11\x82\x0b\x6f\xbd\x89\x33\xfe\x9e\xbf\x1c\xe8\x4d\x1d\xf5\xc8\x6b\x5e\x66\xcb\x22\x31\xd9\xcb\x98\xf7\xbe\xfd\x35\xaa\x66\xc7\xa9\x6c\x28\xf3\xc1\x33\x4a\x4b\xd0\xf5\xf5\xde\xc7\xf7\x57\x6b\x15\xd9\x62\xd4\x78\x7f\xf3\x7e\xc1\x22\x08\x4d\x9c\xb5\x20\xa9\xe2\x93\xb9\x59\x4f\xfc\xef\xcc\x87\x51\xc6\x25\x4f\xfc\x50\x9e\x1f\x89\x97\xb5\x68\x64\x3d\x32\xf1\xc6\x3d\x90\x34\x7a\xed\xde\x0e\xa3\xf0\x17\xbd\x8d\xc8\x76\xfa\xf7\x85\x22\x13\xcf\x4a\xb7\x78\xb0\x26\x97\xd2\x28\xee\x48\xdc\xb7\x96\xef\x6d\xf9\x40\x39\x73\x85\x6a\x4e\xe4\x8f\x2c\x51\x67\x05\xae\x08\x3c\xf3\x01\x2a\xf9\x7c\xe6\x43\xf1\xc9\x2b\x8e\x5a\x12\x39\xab\x2b\x58\xb2\x74\x07\x41\x64\x7a\x0a\x94\xd4\xb8\x7b\xf8\xfe\xf1\x2c\x58\xa3\x22\x15\xdd\xf3\x9f\xfe\x3d\x27\x28\xae\x79\x57\x39\xa8\x81\x46\x21\xcb\xfe\xcd\xa3\x8d\x2c\x9e\xa3\x14\x24\xdf\x4e\x03\xd3\x82\x17\x53\xb1\xc6\x4e\x1c\x4b\x41\x50\xe6\x03\x54\xe6\x3f\x99\x0f\x51\x78\xe6\x43\x81\xe2\x5a\xe8\xd7\x6a\x5a\x1f\xa6\x68\xfa\x4e\x2e\x8b\x16\xcf\x98\xb5\x7d\x5c\xb1\x59\x66\xc7\x14\xd9\xd3\xd0\x93\x7e\xa7\xb2\xbf\x1e\xe4\x8a\x9e\xcb\x7c\xe8\x65\x45\xa2\xd9\xbc\x58\x55\x55\x2a\xd5\xdd\x6d\xee\xbd\x5e\x6d\x70\x38\x62\xc0\xf0\x9d\x6e\x08\xab\xef\x4c\x7d\x30\xd8\x82\xeb\xef\xab\x3c\x97\xf9\x08\x4d\xdb\xdb\x9a\xf7\x4b\x0f\xe0\x60\x74\x8c\x21\xd0\xdb\x51\x94\x8a\x3a\xe9\xff\x31\xf0\xc7\xe0\xf9\x1b\xb7\x3a\xe6\x28\xec\xad\xbf\xaf\xf2\x5c\xe6\xe3\xca\x48\xce\x24\x5f\xcc\xad\xae\xb5\xee\x4b\x93\x98\x7d\x3e\x6f\x96\x3e\x7f\xf0\x4b\xe3\xbc\xef\x63\xab\xcd\x8f\x25\x3c\x1e\x2d\xfa\xf7\x55\x9e\xcb\x7c\x90\xd0\xa9\xda\xd1\x45\x78\xcf\xec\xf5\x4e\x96\xdc\xe7\x23\x7c\x59\x58\x26\xa4\x50\x3c\xde\xf7\xa5\xa7\x2c\x52\x5c\xae\xd3\x74\xf1\xef\xab\x3c\x97\xf9\x58\xc3\x27\xf0\x1c\x5d\x0b\x70\xcd\x7d\xf1\x00\x15\x6d\xcd\xe7\xed\xba\xff\x15\x96\x5f\x2b\xb5\x21\x4b\xba\x6d\x01\xcd\x9d\x55\x15\x7f\x5f\xe5\xb9\xcc\xc7\xc3\x37\x53\x37\x56\x56\xbe\x49\x7c\xb6\x1e\xed\x9e\x47\xb6\xd2\x78\x1a\x95\x52\xf1\xbe\xc4\xab\x73\xba\x25\x96\x7f\xe0\x98\x65\xf4\xef\xab\x3c\x97\xf9\x28\xba\xc3\xdc\x88\x77\x24\x7f\x67\x52\x62\xfa\x0a\x5f\x51\x44\x23\xdb\x44\xa6\x81\x7f\xf7\x1d\xbe\x80\xcc\x37\x18\xeb\x63\x87\x01\xff\x9b\xcf\x32\x50\x57\x3c\xff\x16\x4a\x6f\x6a\x7f\x6c\xe3\x59\x20\x9e\x33\x91\x3e\x78\xf6\x64\xf0\x0e\xe1\x73\x29\x1d\xd4\xb0\x2f\x2d\x0f\x42\x73\x5f\x25\x3a\x37\x48\x23\x1e\xc0\x20\x0e\xf6\x00\x9e\x57\x66\x59\x0f\x4f\x9d\xee\x37\x25\xf4\xf1\x0c\xae\x6c\xf0\xfd\x1c\x50\x7b\xd2\xb9\x7d\x89\x3b\xdf\x89\xc0\x0b\xdf\xa4\x29\x03\x51\x2c\x88\x83\xbd\x85\xd4\x13\x3b\x52\x05\x78\x3f\xec\x7b\x14\x45\x0e\xc7\xda\x77\x7e\x78\x16\x24\x3b\x84\x75\x4c\x6a\xb8\xe0\xbe\xf4\x23\x9b\x27\xf2\x3a\xa2\x58\x10\x07\x8b\x08\x4a\x38\xf0\x9f\xf5\x26\x7f\xe9\x95\x58\xd2\x6d\x67\x78\xe8\xed\x75\xda\x9c\xf0\xf0\xeb\xfa\xcd\x57\x7d\x7d\x5f\x8b\x1b\x6c\x2c\xa9\x11\xc5\x82\xb8\x00\x31\xe4\x7f\x17\x1b\x65\xb2\xc1\x23\x82\x5a\x7d\x5f\xe2\x8b\xd2\x62\xda\x07\xf4\x77\x96\x77\xa9\x71\xf4\xcb\x78\x1e\xd2\x4c\x7b\x60\xdc\x9a\xdf\x87\xa6\xcc\x41\x5c\x80\xd8\xa5\xff\x6b\x07\xee\x2b\xb3\xaf\x5e\x0f\x34\x06\xae\x5c\xf3\xfe\xd0\x28\x50\x8f\x6e\x9f\x11\x8b\xbc\x5c\xd8\xf3\x87\x83\x67\xa2\x36\xd2\xf3\xce\x3c\x22\xf3\x01\xe2\xfe\x39\xe7\x43\xf4\x42\x99\x0f\xd0\x13\xf7\xbc\x59\xb7\x9c\x89\xf9\xb2\x09\x44\xae\x13\x5e\x46\xe9\x96\x4b\x36\x09\x96\xd4\x25\x3d\x16\xc0\xb1\x95\xc7\x4c\x8a\xd1\x7e\x7c\x37\x0e\xba\x0c\x1e\xc4\xc1\xcc\x22\x28\x4a\xd5\xf0\xac\x6c\xf8\x38\x74\x96\xa9\x43\xc8\x7f\xc8\x76\x40\xaa\x13\x6b\x39\x60\x94\x11\x5a\x71\xaa\x36\xf0\xba\x0e\x9a\x47\x00\x71\xf0\x10\x7a\xd6\x89\xd9\xdc\x37\x16\xef\xa0\xe4\x07\x27\x75\xc5\xa4\xc5\x1f\xaa\xcb\x70\x15\x6e\x6d\x14\x0f\x9f\x74\xd2\x6e\x8f\xff\x84\x72\xcd\x20\x0e\x66\xd6\xc7\x75\x71\x61\x4c\x0c\xf1\x63\xa7\xc5\x20\x36\x7e\xe4\x61\x4e\x5e\xf9\x6b\x4d\xb1\xa4\x24\xcf\x70\x1e\x32\xb4\x71\x7b\x34\x40\xdf\x90\x20\x0e\x66\xd6\xa7\x7b\xed\xb9\x53\x98\xb8\xbe\xf9\xee\x8d\x34\xed\x37\x78\x77\x45\xc4\x86\xc2\x90\x59\x37\x34\xa9\xab\x04\x5b\x5f\xa4\x4c\x43\xc7\xe8\x80\x38\x98\x59\x75\x9f\xcb\x27\xf4\xee\x5f\xf3\xd2\x08\xc9\xd1\x7a\x88\x54\xc6\x5e\x99\x82\xd1\x16\x29\x7f\xeb\x66\xd9\x6e\xfa\xd3\x88\x77\x63\x7d\xd0\x8c\x1e\x80\x43\x5c\x8b\x78\xb1\xcc\x07\xe8\xcd\x7a\x5e\xad\xa9\x17\x58\xc7\x36\xe8\xec\x21\xf4\xad\xd5\x0b\x83\x6f\x1b\x79\x46\xdf\xe1\xc5\x35\x48\x26\xae\x3d\x68\xd8\x2c\x4d\x3b\x63\xc1\x42\xfc\x7c\x10\x07\x53\x6b\xc6\x7b\x3f\x27\x74\x84\x2d\xf4\x6d\xf3\xa6\xbe\x16\xfa\x12\xd2\xaf\x9a\x00\xf2\xa0\x4b\x6f\x64\x3f\xed\xde\x6f\xe2\xd3\x8f\x87\x8a\x05\x71\xf0\x24\x4d\x70\x87\x8d\xd0\x94\x53\x82\xa6\x75\x68\x8f\x8e\xd5\xa5\x3b\xcf\xc5\x94\xcb\x24\x23\x96\xa6\x6a\x67\x49\x98\x4e\x53\x47\xa0\xf5\x48\x10\x07\x53\x8b\xd7\x6c\x26\x8e\xde\x78\x8e\x78\x32\x0d\x67\x31\x87\xe5\x92\xca\xea\xa3\x1f\xab\x54\x1b\x4d\xbf\xb0\xab\xac\xed\x1e\x50\xdc\x80\x2e\x61\x01\x71\x30\xb5\xde\xef\x1c\xba\x5a\x2e\x15\x56\xa5\xef\xff\xe2\xd0\x7b\x61\x9a\x79\x72\x97\x6e\x05\xcb\x73\x6f\xe4\x54\x90\x70\x3d\x72\x91\x1e\x3a\x21\x1f\xc4\xc1\xd4\x7a\xc2\xc0\x17\x9c\xee\x3d\x3c\xfe\x27\xe5\x17\xb2\x98\xd3\xc3\x32\xa3\x2f\x0d\x02\x5f\x9b\xb6\xee\x51\x87\x65\x34\x7c\x18\xc9\x26\x41\xa8\x05\xe2\x10\x6a\x5d\x2c\xf3\x01\x1a\x41\x9d\x57\xeb\xe1\x5a\x41\x72\xf4\x19\xd3\x80\x7f\x99\x96\xb5\xf1\x3b\x65\x52\xb9\xda\xcc\xa7\xb2\xa2\x48\x32\x35\xaa\x1d\xf6\x6e\x1a\x07\xd0\x7d\x5c\x20\x0e\xa6\x56\xad\x5f\x47\xca\xc7\xef\x42\x55\x7e\x93\x4e\xaa\x85\xf4\x16\xd5\xb5\xfd\x7b\x63\x85\xfd\x69\x9d\xd1\x79\x63\xc8\xa9\x65\xa1\x75\x88\x62\x41\x1c\x7c\x86\xee\xc6\x95\x6e\x9e\xcf\x82\x8f\x90\x2a\x5e\xce\x6e\xe5\x1c\x44\xb6\x2c\x68\x3a\x9b\xcc\xc6\xb7\x6b\x24\x9a\xfd\x8a\x75\x76\x84\x16\x8d\x40\x1c\xfc\xac\x97\xe9\x36\xdd\x94\x93\x77\x6a\x99\xf9\x5a\xb7\x6f\xa6\xb0\x3c\x45\x66\x36\x7e\x87\x69\xe6\xa0\x85\xc3\xf1\x3a\x4f\x0f\x37\xbc\x0f\x9a\xfd\x04\x70\x30\xb5\x7e\xff\xf6\xd6\x12\x73\xaf\xfd\xd9\xc1\xe0\xb5\x5c\xf1\x80\x66\x60\x90\xe6\x3b\x66\x8b\x3c\x92\xeb\x09\x7a\x6d\xd5\x31\x95\xcd\x24\xa2\x58\x10\x07\x53\x0b\x89\x4f\x37\xca\x70\x49\x48\x33\x9f\xdf\xa2\x71\xce\x22\x19\xdb\x65\xd1\x02\x69\x31\x46\x0c\x63\xec\x56\x38\x8a\x1b\x79\x32\x17\x42\x2d\x10\x87\x50\xeb\x62\x99\x0f\xd0\x48\xf9\xbc\x5a\xaf\xa7\x7f\xe3\x5c\xa2\x59\xfa\xa4\x82\xa4\xf0\x79\xcf\xab\x45\xba\x36\x9e\x60\xe4\xb9\xd0\xb5\x62\xfa\xf9\x5f\x7d\x7d\xc2\xf7\x90\xa1\x83\x79\x00\x1c\x4c\x2d\x3e\xcf\x0d\xff\x38\x8b\x90\xd1\x60\xb2\x11\xb3\x6b\x5f\xb0\x3a\x5f\x6e\xe7\x25\x63\x0e\x51\x0f\xf2\x79\x87\xc6\x1a\x19\x5e\x7b\x06\xfd\xb3\x00\x1c\x4c\x2d\xfc\x82\x47\x55\x19\x2c\xc4\x0a\x31\xd7\x93\xf5\xe9\xce\xe6\x3d\x0f\xc7\x84\xc3\xe4\x74\xf0\xa4\x70\x47\xae\x35\x5a\x9a\xea\x43\x5f\xe6\x20\x0e\xa6\x96\x18\xd7\x24\xf5\x27\x99\x1f\xfc\xe9\x7a\x3b\xa8\x5d\x03\xc1\xf7\xe8\xb2\xf3\x57\x70\x28\x2a\xd5\x7a\xf2\xb0\x4c\xee\x49\x1a\x86\x20\x8a\x05\x71\x30\xb5\xd8\xfc\xa2\x8b\x06\xd9\x4a\xba\x79\x6e\xf3\xa8\x7c\x23\xa1\x48\x6e\x35\xb1\xfa\x4a\x99\xc3\x2c\xf2\xfc\x95\xb8\xc1\xe0\xa4\x09\x94\x31\x06\x71\x30\xb5\xd2\x56\x4f\x71\x9b\x4e\x1e\xa5\x9a\xed\xdf\xb9\xfb\xa5\x75\x28\xbe\x2c\x89\x97\x96\xab\xf5\xd7\xb0\xe5\x65\xcf\x5b\xa2\xc7\x57\x42\x10\x6a\x81\x38\x84\x5a\x17\xcb\x7c\x80\xbe\x88\xce\xab\xb5\xef\x67\xd5\x8d\xe6\xb5\xe1\xfd\x34\x2c\x97\xb0\xf8\x06\x4e\xfb\x53\x2f\x0c\xdf\xe0\x3e\x1b\x7e\x17\x69\x8e\x83\xc3\x4c\x56\x68\xb3\x38\x88\x83\xa9\xa5\xad\xfc\x29\x99\x7b\xc9\x2f\x99\x65\x63\x95\xa8\xea\xb6\xb2\x14\xf7\xf8\xa5\xf0\x1d\xbf\x8d\x72\xc1\x45\x87\x99\x84\xa0\x09\x6f\x44\xb1\x20\x0e\xfe\x42\x3c\xe6\xcf\x6a\x46\xa2\x1c\xa7\x72\x7d\x80\x91\xd6\xea\x94\x66\xfa\x8b\x5f\xc5\x25\x36\xe5\x7d\x7c\x13\xfd\x55\x4b\x74\xda\x48\xe8\x85\x08\xe0\x60\x6a\x69\x44\x4b\xe0\x2e\xef\x2e\xa5\xca\xe9\xc8\x4b\x51\xc4\x8f\x66\x1d\x2a\x2b\x53\x7f\xe4\x0d\xa7\x3c\xb6\xd7\xbd\x29\xb5\xf4\x08\x3a\xeb\x05\xc4\xc1\xd4\xba\xe3\xe4\x8b\x3c\x8e\xb9\x7e\xf5\x76\x60\x0a\x51\xd7\x93\x96\x78\xf1\x86\x4e\x93\x21\x1b\xa9\x4f\xbb\xba\x66\x67\xb3\xc9\x9d\xc9\x88\x62\x41\x1c\x4c\x2d\xab\x3d\xd4\x6f\x68\x5d\xa6\x97\x3d\x3e\x70\x2b\xa2\x7e\x90\xa1\xf1\x1a\xa0\x73\x64\x7d\x20\x5a\xaa\xc3\x27\x51\x6d\xbd\xd1\x9b\x0c\xe5\x6b\x01\x1c\x42\xad\x8b\x65\x3e\x40\x5f\xbe\xe7\xd5\x1a\x19\x1a\x7f\xae\x59\x4a\xbf\x57\xd6\xb9\x1a\x21\xb8\xfe\x6e\xcf\x2f\x2c\xec\x19\x0e\xa6\x67\xb4\x47\xc7\xb7\x22\x8d\xf7\x9f\x5e\x22\x7e\x3e\x88\x83\xa9\x15\x11\xd9\x51\x51\xd2\x6d\xa2\x90\x55\x54\x1a\x33\x6b\x58\x3a\x73\x2c\xfd\x44\x2f\x04\x53\x7a\xea\x05\xa9\x31\xd6\x5d\xcf\x9e\x05\x44\xb1\x20\x0e\xa6\x16\xde\x53\x82\xd2\xf0\x4c\xd5\x34\x1c\x42\xf7\xb5\x1f\xfd\xcf\x06\x3e\xe0\x4a\x97\x65\x3a\xea\x5a\x18\x8d\x44\x97\x10\xad\x28\xc8\x21\x8a\x05\x71\xf0\x9d\xaf\x61\x55\x8c\x12\x8b\xcf\x18\xc2\x65\x55\xed\xf9\x63\x76\x38\x3b\x6f\x3a\xe7\x1e\xbf\xb3\xf3\x7e\x21\x56\xf8\xad\xbf\x54\x0c\x7a\x73\x81\x38\xf8\x58\x2b\x54\xed\x11\xda\xb2\xb7\xa4\x32\x51\xe1\xf2\x03\xca\x51\x14\x72\xf1\x4b\xde\x3b\x4e\xbc\xac\x6d\xf9\x19\xed\x09\x3b\x3a\xe1\xd0\x58\x0b\xc0\xc1\xd4\xf2\x92\xcb\x88\x37\x2f\x4e\xcb\x6b\x0c\x7f\x40\x37\x32\x50\xcf\xa0\xc4\xa7\xc5\xb3\x55\xcb\x71\xa3\x51\xb8\xb4\xff\x95\xf9\x11\x1b\x42\x2d\x10\x87\x50\xeb\x62\x99\x0f\xd0\x0c\xc7\x79\xb5\xba\x5b\x19\x9b\x52\xe7\x53\xaf\x66\xaa\x30\x4b\xef\x52\x2a\x46\x5e\x67\x09\xc7\x2f\xe5\x7c\x3d\x52\x6c\xe7\x3c\x73\x28\x1a\xaa\x09\xad\x86\x02\x38\x78\x9c\x08\x8b\xfc\x1a\x5a\x98\xae\x2e\x4f\x6d\xff\x4f\xf4\x60\xb3\x79\x66\x2c\x4e\x73\x05\x6d\x15\x6c\xed\xb9\x32\xc2\x4d\x1e\xeb\x2a\x28\x4e\x04\xe0\x60\x6a\xa5\xb8\x9b\x09\xa7\xba\x90\x69\xbc\x0b\x0a\x4c\xa8\x4f\x21\x52\x66\xcf\xcc\x14\xb2\x5e\x63\xff\xe3\xda\x16\x24\xad\x7a\xf4\x41\x0b\x51\x2c\x88\x83\xa9\x65\x34\xfb\xe8\x85\xd6\xb6\x7f\xb3\x68\x5a\xc6\x03\x39\xc5\x26\x8a\x7d\x1f\x93\x1a\x01\x2a\x8f\x98\xc4\x35\x8a\x67\x7d\x6f\x3a\xa0\xcd\x94\x20\x0e\xa6\xd6\x3d\xff\xbd\xb4\xc0\xe2\xef\x9d\xfe\xea\x35\xa3\x65\x28\x11\xca\xf4\xb3\x5a\xc2\xeb\x32\x34\x67\x02\xce\xc7\xdb\x04\x3f\x83\xa1\x73\xb9\x41\x1c\x4c\xad\x07\x3c\xf1\xf2\xca\x1f\x03\xf6\xc7\x66\xd4\xaa\x57\xb5\x5c\x37\xf5\x48\xd0\x64\xd0\xb3\x37\x5a\x6e\x20\x75\x1f\x0c\xc4\x3e\xed\x42\xa8\x05\xe2\x10\x6a\x5d\x30\xf3\x01\x9a\xc3\xfe\x27\xf3\x21\x7a\x2e\xf3\xf1\xea\x4e\xa5\xec\xa1\x7c\x51\xed\xd3\xb9\xe4\xad\x7e\x64\xa9\x49\xc3\x07\x58\xf5\x39\xa7\x48\xae\x69\xd9\x4f\x5a\x3f\xb2\xb2\xc9\xff\xfd\x4c\xdf\xb9\xcc\x07\x2a\x0e\x09\x91\xb5\x01\xeb\x20\xe7\xf8\x95\x45\xc7\xef\x44\x16\x4c\x69\xeb\x99\x3a\x1e\xa7\x33\x73\x3a\xb9\x36\x1c\xc3\x93\xcc\x7f\x5f\xe5\xb9\xcc\xc7\x2c\xf9\x6a\xe8\xcb\x8d\x93\xa5\xe0\x4d\xf3\x2f\x67\xe1\x39\x9d\x86\x1f\xf7\x95\x12\xe6\x75\x9f\x88\x61\xf4\x62\x8d\xd9\x52\x8d\xfc\x6f\x26\x17\x41\x6d\x79\xbe\x83\xaf\x11\xbe\x37\x74\xf7\xd7\xa7\x3d\x4a\x73\x23\xda\x23\xf9\x13\x68\x2b\x66\x51\x3d\xa0\x73\x42\xf8\xe4\x56\x1f\x1d\x5a\xda\xc3\x4a\x84\x84\x20\x0e\xd6\xc1\x6f\x0a\x8a\xf7\x63\x9a\x87\xc8\xbd\x30\x7d\x21\x39\x9c\x7c\x12\x99\xbc\x5b\xf7\xaa\xa3\xd8\x5f\x3e\x45\x62\x37\xbf\x7f\x59\x74\x0f\x51\x2c\x88\x83\x75\xf0\x5a\x27\xda\x86\xdf\x81\x9a\x9d\x9d\x5c\x16\x69\x51\x64\xa1\x02\xcd\x98\x11\x8f\xf7\x69\xe9\xb8\x33\xcc\xdf\x52\x31\x35\x25\x40\xcf\x0d\x10\x07\xeb\xe0\x6c\xed\x37\x5c\x71\x9e\xbf\xfc\x6c\x7f\x20\x1b\xfd\xaa\xd1\xf1\xf5\xfa\xa6\x54\xf6\x80\x95\xbc\x02\x4f\xdd\xaf\x85\xb9\xfd\xf7\xe5\xd0\xd0\x14\xc0\xc1\x87\x25\x1b\x1b\x9f\x33\x69\xe6\x4c\x96\x5b\x5e\x24\x56\x9f\x1d\x88\x4e\xed\x89\xd8\x97\x61\xef\x3f\x54\xc7\x20\x63\xbe\x46\xb1\x05\x85\x26\x41\x1c\xac\x83\xe7\xae\x26\xe7\x97\x36\x27\xe1\xfd\xc1\xc9\xc2\x1d\x5a\xa1\xfc\xa5\xdc\x95\x7b\x45\xaf\x99\xb7\xec\x14\xe7\xe3\xee\x63\x1f\x3c\x42\x44\x07\x07\x71\x88\x0e\x7e\xb1\xcc\x07\xa8\xcf\x9c\x57\xeb\x87\x7f\x6f\xe6\xfb\xef\xc3\x7a\x73\xa8\x79\x87\x41\x4a\x77\x79\x0d\x43\x62\x39\xce\x16\xdc\xbf\xb7\x18\x9c\x66\x6b\x7c\xb8\x07\x6d\xa2\x00\x71\x30\xb5\x30\xf5\x88\x0d\x09\x44\x1a\xdf\xe7\x0d\xbf\x19\x4e\xb6\x22\xd8\x79\xf7\xb1\x02\xa5\x31\x4b\x24\x23\x9b\x7c\xab\x77\xca\xc9\x0b\x0a\xf8\x82\x38\x98\x5a\xd6\xe5\x43\xb9\x05\x27\xc6\xd7\x2f\x5f\xdb\xc8\x7b\xcb\x2d\xc5\xb4\x9c\xde\x9c\x3a\xe9\xf0\xb2\x41\xd0\xc4\x2e\x97\x90\x36\x30\x0e\x51\x2c\x88\x83\xa9\xc5\xad\x62\x98\xbd\x35\xfe\x23\xa8\x48\xd0\x4d\xea\xaa\x1f\xed\xa6\x37\x8e\x95\x80\x4f\xff\xa5\xd8\xbd\x8c\xe1\x04\x02\x67\x75\x28\x8f\x0b\xe2\x60\x6a\x75\x1c\xfe\x91\xb0\xce\xef\x13\x0f\xbd\x8d\x79\xeb\x00\x7d\xc6\xe0\x17\x59\xe0\x49\x9a\xdc\x31\x47\x88\x1c\xdb\x70\xc5\x19\x2f\x74\x1a\x01\x88\x83\xa9\x55\x9b\xd9\xb0\x6a\x63\xeb\x65\x6c\x93\x1a\x98\x96\x77\x29\xb4\x67\x60\xe7\x43\xee\xd4\x1c\xeb\xfc\x77\x4a\xe3\x70\x81\x79\xea\x1c\x84\x5a\x20\x0e\xa1\xd6\xc5\x32\x1f\xa0\x67\xe3\x79\xb5\x0a\x9d\xcb\xce\x84\xf9\xfe\x0c\x89\x5b\x2f\xaf\x4e\x20\x0f\xae\x5d\x4e\xf1\x3d\x52\x76\x72\xdb\xc0\xd6\xbe\xc4\xfe\xd2\xfd\x0c\x9a\x61\x06\x71\x30\xb5\x52\x33\x50\x4b\xe8\x0a\xb3\x5e\x4c\xf7\xa4\x68\x79\x19\xc8\xa2\xbf\xb0\x43\xd3\x0b\x5e\x9a\x9e\x38\x7a\xba\x6e\x75\xbc\xec\xac\x8f\x28\x16\xc4\xc1\xd4\xf2\x28\x25\x9e\xb7\x28\x4b\x14\x56\xd0\x49\x49\x31\x9a\x0c\x7d\x3f\xd7\x5b\xfe\xf8\xc3\x53\xde\x3f\xdd\x23\x5f\x4a\x19\x95\x73\x3e\x23\x8a\x05\x71\x30\xb5\xca\xea\x07\xda\x78\x0e\x8a\x27\xe7\x03\x18\x51\xb1\x8a\x25\x71\x49\xa7\x8b\x4c\x99\x46\xb0\xae\x5f\xc1\x0d\xb8\xaf\x29\x2b\x26\x80\x28\x16\xc4\xc1\xd4\x1a\xe0\xc7\x78\x81\x4d\xd9\xff\x42\x8d\x80\xc1\x15\x3b\x37\x86\x02\x63\xdd\xc7\xeb\x89\xcb\x8d\xdb\xcd\x07\xc9\xc8\x4f\xdf\xdd\x85\x36\x2b\x82\x38\x98\x5a\xbb\xa6\x71\x04\x37\xb1\xad\xb8\xd4\xdf\x60\x91\x8e\xfd\xea\xbd\xbe\xa6\x4d\x50\xee\x52\xe7\xfb\xe4\x38\xca\x8e\x44\x36\xb3\x0e\xba\x83\x15\xc4\x21\xd4\xba\x58\xe6\x03\xb4\xca\xff\x5f\x0e\xa8\xee\x7b\xbc\x79\xd3\x5b\xb1\xe1\x85\xcf\xcb\x98\xb6\x0a\x75\x9e\xa8\x3b\xee\xf2\xcf\x7c\x96\xf9\x35\x7e\x8c\xd7\x84\x7c\x90\x83\xee\xe3\x06\x71\xf0\x3b\x58\x29\xa3\x8f\xc3\xb3\x1f\x88\xa9\x5f\x09\xf2\x8d\x44\xce\x9c\xb8\xcc\x74\xfd\xc0\xd6\xc8\xd2\xe1\xcf\x33\x96\x9e\xd5\x34\x3f\x46\x44\xb1\x20\x0e\xa6\x16\xb3\x50\x52\xeb\x14\xae\x46\xfe\xfc\xd9\x70\x0d\x66\x96\x59\xe2\x34\x5a\xff\xfc\x32\x9f\xff\x17\x5e\xfb\x36\x8d\xd3\xf1\x09\x28\x52\x06\xe2\x60\x6a\xdd\xe9\x37\x2f\x09\x13\x3d\xb0\x10\x56\xe2\x7f\x37\x99\x8a\xa3\x77\xa9\xbf\xea\xe1\x3e\x55\x73\xa9\xa7\xac\x83\xc3\x5a\x99\x0e\x74\x44\x13\x88\x83\xa9\x35\x35\x4e\x70\xa7\x40\x62\x8c\x09\x89\xe1\x14\xe5\x99\x07\xdf\x9f\xa7\xf4\xb6\x8d\x4d\x0a\xf8\x13\x6d\xe5\x9b\x55\x09\xef\x6b\x5a\xff\x73\xce\xc7\x7b\x7c\x99\x35\xc5\x60\x99\x53\x22\x73\x91\x9b\xfb\x95\xa8\xea\x9e\xd8\x16\xee\x37\x8c\x87\x36\x03\x9b\x30\x3b\xce\xaa\xe7\xfe\x9d\xf9\xa0\xbc\x35\xd1\xe3\x84\xdf\x98\xf8\xe6\xae\xb3\x13\xd1\x75\x22\x39\x0c\x26\x27\x5a\x8f\x51\xba\x42\xff\x26\x43\x1c\xfb\xf2\xe3\xae\x7f\xa1\x9d\xec\x9d\x5f\xa8\xf2\xaf\xe7\xbd\x41\x7d\xb3\x56\x39\xf0\x07\x03\xcd\xda\xbd\xa5\x93\x2c\x10\x2b\xb9\xb3\xd7\xee\xc1\xd5\x2b\x05\xb0\xcc\x07\xa8\xe4\xf3\x99\x8f\xb7\xd6\x63\xad\xa6\x35\xdd\xe5\xb5\x8d\x69\x37\x43\x52\xc9\xeb\x67\xc4\x65\x26\xb7\x49\x6e\x54\x66\xfc\x69\x94\x54\x7c\xf3\xb8\xf8\xdf\x5f\x56\x8c\xcd\xeb\x53\x65\x04\x4f\x2f\x6b\x6d\xe9\x0d\xd5\x61\x37\xcf\x7e\x57\xd1\xd9\x75\x2a\xb9\x97\x42\x9f\x72\xcd\xf9\x39\xba\x2d\x94\xf9\x00\x95\xf9\x4f\xe6\xc3\x17\x9e\xf9\xd8\x16\xc7\xdd\xa1\x3c\x2e\x1f\x9d\xa2\x54\x93\xc7\xdb\x1e\x6c\xb0\x8f\xc9\x0d\x9f\xc6\x19\xc2\x2c\xee\x8f\xd1\x7f\xfe\xd4\x87\xe4\xaf\x07\xb9\xbe\xe7\x32\x1f\x3d\xc2\x5b\x4e\x15\xfd\x9c\xed\x94\x72\x4d\x74\x57\xa4\xad\x89\x6b\x14\x4c\x09\xfa\xad\x7e\xe5\x6b\x30\xea\xfe\xce\x44\x31\x2f\xfe\xfb\x2a\xcf\x65\x3e\xaa\x9f\xbe\x0b\x53\xc3\x24\xde\xf9\xfd\x76\x95\x68\xbe\xde\x36\xb0\x77\x77\x5c\x3a\xf8\x00\x4d\x7c\x4d\xb2\x31\x9d\xf3\xfa\x7e\xcd\xdf\x57\x79\x2e\xf3\xf1\x9c\x88\x2f\xfa\x13\xd6\x1f\xe4\xd6\x2f\xab\x39\x71\xfe\xfa\x13\x15\x41\x37\x09\x35\x4a\x89\x6e\x8f\x24\xbc\xd2\xfc\xe2\xf4\xe0\xe8\xef\xab\x3c\x97\xf9\xa0\x89\x70\x54\x0f\x28\xe4\xf5\x9b\xc5\xb7\xa8\xb2\x1f\x9c\x44\x36\x26\x2a\x0f\xe7\x28\xe0\x29\xe0\x57\x6d\x2f\xdb\xa1\xe9\x22\xfc\xfb\x2a\xcf\x65\x3e\x9c\xa6\x3d\xfb\xd8\x5e\xb1\x10\xbc\xa6\xe7\x9b\xd7\x22\xaf\x6a\xff\xd4\xfb\xb4\x07\x05\x97\xc9\x64\xc6\x6c\xe5\xae\x56\xce\xc3\x96\xbf\xaf\xf2\x5c\xe6\x63\xfb\xf3\x8c\xe7\x4a\x8e\x38\xf6\x8f\xc5\xef\xcf\x48\x52\x7a\xf0\x56\x5f\xe4\xf2\xfd\xa6\x3f\x18\x42\x61\xb8\xf3\xfe\x10\x73\xf8\xef\x93\x2d\xbe\xe7\x33\x1f\x0d\x37\xec\x4d\x57\x57\xcd\x1b\xb9\x9d\x15\xee\xcd\xbc\x5e\x1c\x91\xe2\x67\xe1\x15\xf1\xb9\xca\x39\xf3\x9b\x58\xb4\xb0\x4b\xf7\x7f\xf3\x59\x06\xea\x8a\xe7\xdf\x42\xbf\x31\x37\x47\x85\xe9\x7f\xcb\xf6\x0e\xaf\xff\x2a\xc6\xae\xd7\x3c\xcd\x69\x15\x22\x49\x74\x61\x74\xe5\x5d\x35\x79\xa4\xb0\x08\xed\x16\x07\x71\xb0\xb7\xd0\x16\x83\xe9\xee\x9e\x01\x8a\xe7\xee\x16\xb2\x9e\xc1\x3d\x69\xb9\x89\x4f\x35\x78\x47\x4b\xcf\xc2\x59\x9e\x6f\x05\xe8\xa7\xeb\x43\x7b\xee\x40\x1c\xec\x2d\x94\x50\xb1\x74\x14\xad\xc5\x74\xe7\x06\xb3\x23\x16\x75\xfd\x4a\x5a\xf8\x25\x3e\xfb\x2b\x9c\x4e\xbf\x92\x1c\x4f\x51\xf1\xa4\xa2\xbe\x20\x8a\x05\x71\xb0\xb7\xd0\x6b\x0e\x94\x44\x75\x89\xdc\x1a\x2a\x1a\xea\x6e\x15\x7b\x14\xa7\xa1\x22\x3d\x2c\xab\xba\xa3\xdf\x77\x1f\x78\x5a\x0d\x21\xeb\x42\xbb\xc3\x40\x5c\x80\x18\xca\xff\xb5\x01\x59\x8f\x33\xeb\xf4\xa1\x03\xca\x9d\xe9\xc3\x43\x0b\xcd\x1c\xd5\x46\x0e\x73\x66\x02\xf2\xe1\xef\x14\xc2\x9f\x97\xf0\xbe\xd4\x8c\x22\x8a\x05\x71\xb0\x01\xce\x98\xeb\x97\x92\x9e\xd0\x77\x02\x16\x3d\xef\x0c\x8d\x9b\x39\xeb\x0e\xa3\x50\xb9\x82\xb8\x50\x6c\x6a\x4a\x1b\xc5\x94\x05\x8b\x03\x10\x99\x0f\x10\xf7\xcf\x39\x1f\xbe\x17\xca\x7c\x80\x9e\xb8\xe7\xcd\x0a\xe1\x31\xcd\xa6\xed\x51\xa8\x49\xfa\x85\x47\x9d\x2f\x7a\xb3\x78\x41\x7b\x11\xbb\x36\xac\xe8\x76\x11\x56\xf1\xd6\x0f\xda\x74\xe8\xb6\x14\x10\x07\x33\x2b\x6a\xcd\x38\xdb\x13\xef\xe8\x38\x27\x7f\x6c\xf6\xfe\xb6\xf9\xd0\x37\xa7\xa3\x0c\x95\x9a\x88\xfb\x55\x1e\xde\x1c\xc6\x4b\x95\x50\x3e\x07\xc4\xc1\xcc\x42\xa9\x34\xc1\xc7\xc1\xaa\x1a\x0b\xe7\x58\x98\xb1\xa9\x98\x31\x72\xd7\x1d\x62\xdc\x09\x3d\x3a\xac\x6c\xe5\x3c\x56\xb4\x3b\xc2\x44\x14\x0b\xe2\x60\x66\x09\x2e\xc5\xcc\xfb\x48\x0b\x36\x5f\xc2\x0f\xc6\x89\xf9\xe0\x4c\xa7\x7a\x09\x6b\x1f\x4b\x61\xaa\xff\xd0\x5d\x93\xd8\x8a\xb7\x18\xfa\x2a\x03\x71\x30\xb3\x44\xea\x35\x75\x9c\x32\x46\xfd\x34\xe6\x29\x84\xb9\x0e\xda\x46\x7f\xf9\xf6\xe7\xda\x92\x5d\xaa\xd4\x32\x12\x94\xef\x0f\xa0\x84\x4e\x45\x06\x71\x30\xb3\x6e\xd4\xe4\xbf\x29\xd1\x7b\x28\xcd\xdc\x6a\xdf\x2d\xe6\xb6\xa4\x3b\x81\x37\xea\x87\xc6\x48\xd1\x2e\x47\x49\x8b\x51\xd5\x22\x12\x83\x18\x3a\x83\x38\xc4\xb5\x88\x17\xcb\x7c\x80\xde\xac\xe7\xd5\xa2\xfb\x79\xc2\x59\xc3\xad\x3e\xe8\x1f\x2d\x9c\xa4\x28\x7e\x46\x8d\xb5\x58\x66\x84\x67\xc3\xf0\xe9\x0c\x57\xa8\xaf\xc7\x6a\x09\x3a\x6e\x1d\xc4\xc1\xd4\x52\x2d\xac\x7a\x98\xeb\x97\x10\x69\x78\x29\xc4\x8b\xc9\x58\x4b\x24\x40\xaf\x36\x7e\xc0\xb8\xc2\x7d\x94\xbe\x2e\x9f\x63\x88\x0d\x3a\x81\x13\xc4\xc1\x8f\xb8\x38\x26\xd7\xa2\x2c\xfc\xec\x1c\x15\xd8\x76\x85\x2f\x40\x2c\x7d\x52\xf2\xe3\x0d\x8d\xfd\xbd\xce\xbb\xf7\x83\x3c\x13\xcf\xf6\xa0\x14\x36\x88\x83\xa9\xf5\x24\x09\xeb\xce\xf5\x0c\xa5\x8a\xb6\x84\xe5\xd2\xb7\x99\xef\xeb\x49\xd8\xe3\xb0\xfd\x47\x1e\x85\xe1\x7f\xa9\xeb\x5a\x5a\x34\x14\x47\x14\x0b\xe2\x60\x6a\x8d\x49\x9e\xbc\x15\xe4\xe1\x78\x27\x69\x68\x5f\xf4\x70\xe2\xbe\x08\xe7\xef\x5c\xca\xdc\xc2\xd0\x42\xdb\xc6\x56\xff\xd5\x16\x7a\x68\x4b\x2b\x88\x83\xa9\x85\x9b\x9f\xbb\xbb\x7e\x57\xaa\xe6\x6b\x84\xda\xbe\x1b\x89\x2c\x12\x11\x63\xbd\xfd\x47\x42\xea\x88\x09\xdc\x20\x9f\x6b\x4f\xde\x90\x21\xd4\x02\x71\x08\xb5\x2e\x96\xf9\x00\x8d\xa0\xce\xab\xb5\xfb\xd2\x7f\x5b\xd2\x44\xfa\x96\x3e\x6a\x3c\xa3\xd9\xbd\x5b\x0d\x8a\xeb\xf7\x86\xee\x49\xa6\x3a\x4f\x23\x93\x5c\x8b\x8f\xf2\x6f\x87\xb6\x5d\x02\x38\x98\x5a\x4e\xc3\x2f\x83\x28\x99\xe5\x0a\xdb\x99\xc7\x77\x0e\x31\x6f\xf1\x10\x85\x5d\xe9\x8c\x5a\xbc\xfc\x7b\xf7\xcb\xd7\xea\xe7\xad\xdd\x50\x48\x0b\xc4\xc1\xd4\xba\x47\x14\x3c\xcc\xbf\x7c\x45\x69\x8c\xbb\x3c\xe1\x29\x9f\xe2\xd3\x89\xf4\xaf\x23\x64\xd1\x1f\x13\x9e\x89\x21\xd3\x28\xea\x07\x42\x7b\xc8\x40\x1c\x4c\x2d\x96\xbe\x77\x56\xb6\x6e\xaf\xa5\xd9\xee\xa8\xf4\xb1\xf3\x8b\x7d\x61\x45\x0d\x8f\x7b\xef\x36\x83\x62\xc4\xcf\xd5\xba\xe9\x65\x0e\xdd\x68\x0b\xe2\x60\x6a\xa9\x14\xf3\x13\x15\x2e\x29\xa3\x65\x8b\x10\x1d\xe4\xbc\xfa\x23\xe4\x5b\x7a\xe6\x97\x42\xa8\x4a\x9f\xa5\xc7\x50\x92\x4c\xfb\xe3\x31\xf4\xc5\x0b\xe0\x60\x6a\x5d\x2e\x76\x78\xb1\x5d\x77\xa5\xfe\x77\xc9\x61\x0b\x5f\x79\x66\x9d\x1a\x53\x88\xdf\xbd\x93\x95\x8e\xfc\xc7\xe4\xb3\x06\x28\x51\x25\x08\xb5\x40\x1c\x42\xad\x8b\x65\x3e\x40\x23\xe5\xf3\x6a\x7d\x7f\x99\x94\x1f\xd2\xc2\xb2\xef\x1c\x10\xe7\x96\xd4\x4c\x13\x3f\xc2\x4f\xcf\xc8\xb0\x33\x2f\x44\x95\x78\xb9\x57\x25\xe2\xda\x57\x68\x2d\x0a\xc0\xc1\x4f\x27\xea\xde\x11\xb9\x43\xae\xab\x82\xd5\x7a\xa4\x27\xf7\x92\xd9\x85\xe2\x06\xee\x2c\x81\x25\x35\xcd\x23\xec\x9a\x68\x81\x44\x2b\xe8\x7a\x54\x10\x07\x3f\xe9\x3a\xf1\xdb\x81\x62\x7f\xcd\xc3\x0e\x4c\xa9\xf1\x49\x2d\xad\xa2\x87\xc8\x9c\x31\x05\x8a\xa6\x42\x12\x97\x2d\xb0\xab\x4e\xf8\xa0\x38\x11\x88\x83\xdf\x4a\x96\x77\x27\x38\x75\x40\xbb\xbe\x63\xab\x62\xcf\xe6\xc7\xb4\x68\x77\xeb\xca\x36\x21\x32\xfb\xf7\xfd\xc2\x35\xa3\x30\x46\x41\xa8\x7f\x81\x38\x98\x5a\x3c\xd4\x95\x41\xbc\x7f\xcc\x46\x52\x9c\x13\x4a\x9f\x92\x08\x3e\x56\xd3\x56\x52\x14\x3c\x53\xe0\x20\xb2\xee\x24\xf3\xc1\xc8\xde\x84\x8e\x8e\x00\x70\x30\xb5\x0e\x14\x0f\xef\xbc\x0a\xa5\x8a\x47\xdd\xf6\xeb\xd8\x9e\x8c\xca\x7c\x17\x6d\xc0\xab\x3b\x9c\x3e\x62\x77\xed\x30\x2e\xfd\x7b\xe1\x47\xe8\xda\x20\x00\x87\x50\xeb\x62\x99\x0f\xd0\x17\xd1\x79\xb5\x56\x19\xc7\xd0\x24\x82\x5f\xd8\x5d\x93\xa8\x88\x19\xa0\x18\xef\x69\x61\x0b\xfe\xfe\x38\x64\x45\xde\x27\xd5\x37\xc8\xb1\x5c\x95\x1c\xf1\xf3\x41\x1c\x7c\x71\x45\x9a\x3e\x3c\xbe\x7f\x5d\xe5\xab\xb3\x69\xd9\xa9\x74\x17\xb7\xd6\x77\xa7\xfa\x58\x39\xb4\xd7\xd8\x06\x1d\x61\x9f\xa8\xe6\x94\xa1\xc5\x15\x00\x07\x53\x4b\x63\x95\x47\xf9\x47\x91\x11\x6d\x61\x9d\x22\xe1\xd4\xa6\x04\xb9\x2a\x6a\xb5\xac\x40\xce\x97\xa7\x3d\xf3\x37\xf5\xc5\x9b\x64\x18\xa0\x70\x06\x80\x83\xa9\x45\x41\xe2\xc0\x11\x91\xc8\x55\x6e\xc2\x8c\x53\x2d\xe0\x17\xc6\x9d\xa1\xf8\xd8\x89\xfd\x96\x2e\x5f\x8d\x8d\xcb\xa3\xc4\xba\x62\xe8\x1c\x1d\x10\x07\x53\x2b\xb9\xf3\x66\xfd\xfe\x2c\xf2\x9d\x14\xb2\xe9\xfe\x13\xf5\x3c\x13\xdc\xb2\x12\x57\x59\x1c\x8d\xed\x74\x01\x61\xa5\xf2\x00\x82\xcb\x88\x62\x41\x1c\x4c\x2d\xf3\x87\xda\x9b\x25\x0b\xa4\x5f\xd8\x8d\xde\x7e\xbb\x71\x20\xf3\xfd\x0b\x2f\xe1\x3d\x9a\xbc\xf5\xf1\xa8\xda\xe0\x0e\x7d\xe9\x47\xb7\x10\x6a\x81\x38\x84\x5a\x17\xcb\x7c\x80\xbe\x7c\xcf\xab\xb5\xcc\xcc\xf0\x39\x98\x9d\xe8\xb3\xba\x94\xde\xb1\x09\x4f\x2e\x39\x16\xfe\xfa\x81\x19\xff\x95\x89\x7e\xba\xa0\x5a\x93\x95\xef\xd0\x2c\x2d\x88\x83\xa9\x65\x32\x22\xb0\x24\x4d\x22\xc7\x93\x8c\x87\xec\xe9\x20\x3f\x6d\x23\x39\xb6\xf0\x6d\xf3\x8c\xfb\x41\xc0\xc8\x50\x1c\xe3\x9e\x19\x34\xf1\x07\xe2\x60\x6a\x69\x5a\xf3\x8c\xcd\x2a\xdd\xc5\xe3\x8e\xef\x2b\x58\xe3\xd6\x3b\xb0\xae\xab\x19\x6a\xc2\x0c\x51\xdc\x7b\xef\xe2\x5b\xe5\xa3\x09\x25\xd5\x40\x1c\x4c\x2d\xcd\x56\x8b\xb5\x08\xe6\xd1\x88\xf5\x58\xc2\xc1\x4d\xc2\xb8\x77\xe4\xb5\x76\x4d\xf7\xb8\xeb\xa5\xbb\xe9\x2f\xe7\xad\x1f\x1d\x40\x37\x52\x81\x38\x98\x5a\x77\x16\xde\x67\x5c\x8b\xe2\x34\xc5\xac\x76\x8c\xab\xe9\x32\x50\x6b\xa9\x1a\xa3\xbb\x33\x94\xcb\x6d\x5b\xe1\xbe\x37\xc2\xc5\x0d\x9d\xa9\x06\xe2\x60\x6a\x35\x7c\x3c\xe5\x5e\x4c\xe5\xce\x62\x26\x9e\xc7\x0a\xc6\x13\xfe\xf5\xcb\x3f\x27\x70\xde\x2f\x96\x97\x66\x17\xd7\x80\xae\x3b\x57\x1c\xa1\x16\x88\x43\xa8\x75\xc1\xcc\x07\x60\x86\xe3\xbc\x5a\x1f\x95\x3a\xf4\x59\xbd\x58\x6f\x7d\xc0\x94\x10\x66\xdb\xc4\x6c\x9f\x3a\x7d\x2d\xcd\x78\x46\x35\xd1\x16\x5f\x89\xfe\xe9\xc1\x14\x29\x14\x88\x07\x70\x30\xb5\xea\xd3\xe6\x98\xc4\x36\xcb\xb7\xcd\x04\x85\x1a\x6b\x8d\xe3\xb7\xdd\x56\xfc\x4d\x5e\xc9\x48\xa4\x4d\x34\xe7\x67\xbf\xfb\x93\x07\x9d\x9c\x01\xe2\x60\x6a\xdd\x67\xae\x89\x9e\x47\x8d\x3e\x29\x26\x65\x5e\x4d\x24\xff\x2a\xe5\x84\x37\x5b\x9c\x3f\x57\xde\x7a\xf8\x70\x16\x3d\xfb\x2e\x3d\xb4\xdf\x04\xc4\xc1\xd4\xfa\xf9\xfe\x47\x82\x99\xc9\x89\xbe\x5c\x67\x7e\xa0\xf5\x32\x97\xce\x15\x4e\xf2\x2e\xe6\x3b\x38\x3f\x95\x28\x62\xf4\xeb\x98\xd0\xa1\xdd\x31\x20\x0e\xa6\x56\x58\xf8\xdd\xf1\xe3\x66\x5d\xf1\x8d\xf6\x20\x6b\x55\x3d\x39\x85\xc1\xb1\x79\x91\xb9\x26\x9d\x0a\x65\x69\xcb\x7d\x46\x5c\x55\x57\x44\xb1\x20\x0e\xa6\x96\x6f\xea\xed\xcc\x3a\xb9\xac\x31\x2e\x64\x63\x5a\x1f\xd1\x85\x78\xda\x53\x01\xf5\xb2\xd3\x8f\x1d\x0b\x5d\x36\xdd\x2d\xc2\x47\xd0\xdd\x2e\x20\x0e\xa1\xd6\x05\x33\x1f\xa0\x39\xec\x7f\x32\x1f\xbe\xe7\x32\x1f\x54\x39\x3f\x34\x9b\x2d\xde\x64\x93\xfa\xff\x92\x11\xb2\x34\x4a\xa3\x73\x50\x63\x4c\x7e\xa4\x5c\x3d\x96\x7f\x96\x63\x49\xcf\x6a\xf5\xf7\x33\x7d\xe7\x32\x1f\x7e\xcd\xe4\x56\xe1\x55\xa8\x4f\xa8\xbf\x67\x3f\x49\x65\x2e\xc4\x3f\x3c\x32\x7d\x58\x7a\xf8\x0c\xb7\x95\x6e\x85\xd2\x9f\xb4\x5e\xe1\xef\xab\x3c\x97\xf9\xd0\x73\x51\xa5\xdc\x8f\x0b\xfa\x2e\xe8\x22\xbd\xff\xa1\xaf\xfd\x3d\xf9\x01\xb3\xa3\x78\x6a\x41\x46\x59\x41\x2b\xfa\xa7\xdd\x29\xa3\xff\xcd\xe4\x22\xa8\x2d\xcf\x77\xf0\x63\x8e\x4f\x9e\x12\xe3\xb6\x7c\x27\xc6\xd6\x0b\x67\xcb\x34\xf6\xf7\x44\x9a\x65\x12\xb3\x4e\x3d\xf0\xd5\xee\x1e\x65\xa1\xdf\x87\x36\x51\x80\x38\x58\x07\xaf\xc1\xd8\xd5\xd4\x71\x14\xda\x9a\x2e\x29\x62\xa0\xcd\xa7\x2f\xea\x39\xe6\xdb\xfc\x54\xfb\xf2\x17\xa3\xfe\xbe\xe7\xcd\x87\x7d\xd0\x25\x2c\x20\x0e\xd6\xc1\x5b\xa3\xca\x32\x71\xea\xaf\x63\x87\x11\xbb\xf3\x79\xdb\xeb\x84\x7c\x0d\xd3\xb8\xe9\xf0\xb1\x89\xf8\x4e\x1c\x12\x0d\xfd\x37\x54\x68\xc4\x0b\xe2\x60\x1d\x7c\x7f\x27\xe3\x35\x45\xe9\xfa\x98\xd4\xc6\x0c\xbd\xc5\xd5\x8d\xa0\xfb\x05\xd9\xf4\xc9\x48\x1c\x91\x59\xb6\x41\x98\x45\x1c\x9e\xab\x50\x1e\x17\xc0\xc1\x3a\x78\x31\x49\xb8\xe0\xc9\x14\xcf\xb4\x32\x23\x5f\x9f\x6d\x79\x52\x5f\x23\x2e\xaa\xe9\xb0\xe4\x59\xfc\xf3\xfd\xcd\x5f\x5d\x7b\x8a\xd0\x01\xcd\x20\x0e\xde\xc1\x91\x88\xf9\x72\x45\x48\xf7\x69\x9d\xec\xa3\xeb\x4e\xd0\xbf\xb4\x65\xd9\x5f\x65\xf1\xfa\xa3\x72\x5f\xe7\x68\x1e\x47\x21\xed\x39\xd4\xc1\x01\x1c\xa2\x83\x5f\x2c\xf3\x01\xea\x33\xe7\xd5\x32\x38\x58\x65\xdb\x30\x28\xd5\xcb\xdd\xd3\xf6\xce\x71\x3f\x16\xb0\xd4\xa2\x96\x17\x2d\xe9\x1c\xf5\x37\xd0\x69\xa9\x99\xf3\x80\x1c\x00\x71\x30\xb5\xf0\x93\x26\xdb\x6b\xf4\xf5\xd5\x6a\x3f\x84\x77\x54\x3b\x78\x04\x24\xb9\xc7\xc4\xa6\x1b\x8d\x26\x9a\xf7\x5f\x41\x56\x72\x73\x84\x1e\x9b\x20\x0e\xa6\xd6\xf7\x16\x9f\xd4\x05\xd2\xe7\xc1\x5f\x27\xb3\xb1\x07\x6b\x91\x1a\xc8\x9e\x36\xe4\x9d\x59\xf8\xd3\xf3\x0b\x24\xf7\x65\xdc\x17\x84\x1e\xf2\x20\x0e\xa6\x96\xbc\xac\xef\x5a\x9b\x51\xfe\xdb\xa4\xa2\x41\xa7\x27\x21\x78\xa5\x61\x91\x16\x11\xd9\x86\xc9\x5b\x69\xa5\xec\x21\x2d\xf3\xab\xd0\xdd\x2e\x20\x0e\xa6\xd6\xe3\xae\x63\x86\x3e\x37\x8b\x4b\xc2\xe8\x4a\xcf\x9f\xe8\xf1\xa4\x64\x73\x66\x96\x5c\x17\x43\x45\x5b\xcd\xc1\xda\x2c\x38\x08\x81\x26\x2b\x40\x1c\x4c\xad\x6f\xab\x98\x36\x6d\x76\x66\x18\x6c\x99\x09\xb3\x46\xba\x5d\x02\x2f\xb9\x82\x30\x92\x66\x1f\x7e\xfb\xe8\xf7\xdb\x74\xa4\x6b\xb7\x1e\xa1\x16\x88\x43\xa8\x75\xb1\xcc\x07\xe8\xd9\x78\x5e\xad\x24\x99\x20\x92\xa0\x16\xbf\x56\x8e\x4c\x7f\xc6\xeb\x38\x5f\xfd\x3d\xd0\x4b\x08\xa3\xac\x6a\x5d\xeb\xdd\x0c\x9d\x43\x76\x7e\x6f\x21\x7e\x3e\x88\x83\xa9\xb5\x6d\xc4\xf4\xa6\xae\x05\xd9\xe8\x5a\x8b\xbe\x79\xa7\xa8\xa4\x70\x14\x7d\x4d\xf1\xc9\x14\x95\x5b\x09\x79\x71\xea\xd8\x54\x35\x14\xce\x00\x71\x30\xb5\x84\xfb\x04\x29\x32\xf8\x07\x85\xe7\x0d\xd3\xb5\xee\x59\x63\xe7\x48\xb0\xb8\xa7\xd2\x16\xb1\xab\x8c\xa3\x6d\xba\x4c\xf6\x63\x41\xb7\x19\x82\x38\x98\x5a\xa3\x4d\x7e\xb5\x04\x98\x0a\x06\x3f\x4f\x3b\xad\xc5\xb5\x0f\xb7\xc4\x85\xfc\xf6\x04\x71\x67\x9e\x50\x33\x58\xf7\xe8\xd1\xa0\x43\x83\x28\x10\x07\x53\xcb\x32\xd6\x99\xed\xd6\xdd\x85\xb7\x0f\x97\x5a\x07\x1e\x70\xf1\xc4\xe8\x84\x3c\x89\x75\x19\xff\xf8\x53\xe3\x76\x43\x56\x32\xb7\x3f\x74\xd4\x2b\x88\x83\xef\xcd\x50\x98\xf3\x8a\x5c\x2c\x78\x67\x75\xbf\x4f\x33\x5a\xeb\x4f\x53\x44\x61\x2d\x21\xfe\x2d\xef\x80\xa5\x08\xc3\xf6\x24\xe4\x2a\xe8\x63\x0a\xc4\x21\xd4\xba\x58\xe6\x03\xb4\xca\xff\x5f\x6e\x8e\x36\x7c\x3f\x17\xf3\xf9\x48\xf1\x91\xdb\x63\xf6\x60\x74\x8a\xfe\x38\x77\xcb\x4c\xe9\x5c\x41\xb6\x3b\x59\xc2\x0a\x85\x19\x68\xd0\x72\x00\x88\x83\xa9\xc5\xcf\x94\x7f\x65\x01\xab\x37\x88\xc8\x85\xd6\x30\x80\x89\x29\xc8\x57\xea\x2b\x7e\x83\x87\x67\x0d\x8b\x8a\x78\xcf\xfa\x6e\xed\x07\x44\xb1\x20\x0e\xa6\x56\x10\xee\x82\x05\xfb\x3a\x6a\x8c\xb5\x26\xfa\xda\xc0\x41\xc9\x5c\x73\xf5\xe4\x2a\x4f\x94\x5b\x83\x64\x8e\xc8\xe6\x07\x1e\x4d\xe8\xe6\x68\x10\x07\x53\x6b\xf0\xc0\x78\x07\xb7\xf7\x44\x51\xe0\xc4\x81\xc3\x67\xac\x56\x5f\x43\x77\xa5\x80\x72\x8e\x88\x62\xe8\xf7\x0f\xc2\xb1\x29\x0b\x68\x56\x01\xc4\xc1\xd4\x4a\x8d\x7a\x65\x8b\xff\xbc\x4a\x34\xd2\x10\x7b\x26\x82\x37\xb9\xb9\x79\xd0\x9f\xf5\x99\x46\x60\xbb\xbb\x64\x97\xa5\x08\xc9\x69\x0f\x94\xf9\xa8\x6c\x99\x10\x23\x21\xf1\x29\xb3\xa3\x6b\x64\x7d\xc6\xc1\xfb\x8d\x37\xc1\x53\x5a\xe0\xc4\x9d\xa1\x9b\x87\x2d\x42\xaf\x4f\xc0\xee\xdf\x99\x8f\x13\x31\xc7\x72\x0c\xd6\x40\x2d\x37\x6f\xeb\x54\x62\x33\xd1\x51\x17\xbf\xcc\xb3\x24\x2b\x85\x5b\x2f\x1c\x5c\x51\xd2\xb6\xf4\x17\xfe\x9d\x49\xb0\x7a\xa4\x5a\x94\x39\x4e\xf9\x8a\xb2\xfe\x94\x71\xe3\xda\xfc\x14\xca\x09\x37\x71\x83\x13\xed\x5e\x78\x54\x5b\x24\x13\x91\x27\x2c\xf3\x01\x2a\xf9\x7c\xe6\x43\x88\x7a\x1d\x9b\x2c\x44\xf9\xc5\xa3\x57\x9c\xbe\xed\xd3\xa7\x19\xaa\x2a\x68\x71\x15\x8d\x8d\x7a\x4c\xe5\xea\x2f\x93\xa4\xe9\xaa\xff\xdd\xcd\xd4\xe3\xad\x76\xec\x88\x72\x02\xae\xb5\xc9\x30\xae\xf0\x09\xcb\xa7\xe4\x56\x13\xb9\x18\x38\x13\x2d\xb8\x5c\xb7\x17\x2e\x75\x81\x32\x1f\xa0\x32\xff\xc9\x7c\xb4\xc1\x33\x1f\x07\x66\x11\x64\xfa\xcd\xb2\xe5\x95\x9d\xa3\xfe\x25\xe3\xe4\x78\x61\xf8\x9a\x7d\xfa\xf4\xdc\xad\xba\x49\x33\xa5\x39\xce\x69\x7f\x9f\xa5\x6e\x3b\x97\xf9\x70\xc8\x74\xef\x2d\x5f\xa9\x2a\xfe\x72\xb0\xf9\x69\x3c\x68\xf4\xaa\xd7\x2a\xeb\xc8\xc6\x67\x42\xd5\xa0\x0f\x77\x42\x6e\xf7\x33\x91\xfd\x7d\x95\xe7\x32\x1f\x8f\x19\x7f\x11\xca\x51\x6a\x89\x75\x6e\xab\x2e\x34\x5f\x21\x96\x20\x46\xa2\x34\xd2\x90\x32\x50\x12\xe3\xea\xd5\xe4\xe4\xe8\xd4\xfb\xfb\x2a\xcf\x65\x3e\xb4\x68\x3f\x06\x5d\x3d\xbc\x92\x80\x33\xb1\xad\xa4\x40\x60\xe1\xe5\xc6\x3e\xe6\xaf\x6d\x49\x99\x5c\xad\xa8\x91\xd1\xe5\x17\xf5\xf7\x69\x88\xb6\x73\x99\x0f\xaa\x4c\xec\x3f\x4c\x72\xf3\xa3\xc7\x85\x56\xe4\xbc\x37\x04\xbf\xfb\x52\x4b\x64\xe2\x1a\x0f\x70\xe6\x4e\xc7\x35\x8e\x45\x79\x2a\xff\x7d\x95\xe7\x32\x1f\x25\xb8\x73\xb4\xa8\xdc\xa5\x87\xf7\x70\xae\x70\x5a\xc6\x11\x8c\x6a\x3f\xb7\x51\x5a\x73\xbf\xdc\x3e\x25\x3e\x49\x16\xce\x49\x78\xf8\xf7\x55\x9e\xcb\x7c\x94\x2d\xcb\x4d\x97\x90\x4e\xf5\xd2\x70\x2b\xab\x5f\x2b\x8f\x54\x3d\x44\xed\x1f\x14\x44\xc7\x1c\xfb\xa9\xf2\xf2\x14\x69\xc6\xe5\xef\x23\x43\x6d\xe7\x32\x1f\xb3\x31\x09\xd3\x05\x03\x85\x83\x79\x49\xf7\xd1\xe2\x45\xaa\x1f\x7c\xf7\x1e\xd1\x77\x7d\x9b\xd4\x2f\x6e\xd9\xe0\xb4\xa3\x2a\xfd\xfd\x7f\xf3\x59\x06\xea\x8a\xe7\xdf\x42\x62\xfe\xf3\xcf\x13\xa2\x5c\xd8\x85\xdf\xb7\x1f\x31\xe6\x28\xbb\xde\x9f\x69\xb5\x9d\xa9\x31\xb2\x31\xbf\x46\xe5\xbd\x5c\x1c\x04\xdd\x69\x01\xe2\xe0\x99\x8f\x62\x56\xb5\xf6\xe4\x60\xae\x21\x27\xb5\xf0\x1f\x77\x77\xa9\xa4\xf6\x67\xaa\x29\xcd\x7d\x1c\x37\x7f\x7e\x68\x0c\x38\x5b\x80\xee\xec\x02\x71\xf0\xbb\x5d\x22\x14\x4b\x2b\x74\x57\x35\x3a\x4d\xf3\x48\xeb\x59\x88\xd9\xf7\x28\xb6\x13\xa6\x46\x65\xed\xea\xdf\xb8\x95\x88\x13\x0f\x42\x17\x97\x81\x38\xd8\x5b\xa8\x12\xfd\x71\x05\x91\xe0\x8a\x58\x7c\xbe\x0a\x99\xe7\x47\x31\x3d\xdb\x13\x1a\xf3\xb9\x4b\x4f\xd5\xa6\x66\x6e\xac\xd9\x8a\xac\x40\x9f\x65\x20\x0e\x36\x12\xd1\xd0\xd4\x65\xc9\x93\x67\x31\x2a\x3d\xd1\x7a\xce\x25\xf9\x7b\xc1\x8b\x4d\xa6\x30\xb0\x21\x77\xad\x5e\x7d\xc8\xaa\xf2\x7b\xd4\x3c\x34\xb7\x0d\xe0\xe0\x93\xd0\x62\xf2\xea\xb3\xf1\xa8\x42\x43\x37\xbf\xb5\x85\xf0\x45\x1e\x88\x50\x2e\x3f\xd2\x7d\xcb\xa0\xbd\x26\x51\xf2\xba\x2f\x85\x72\x15\x91\xf9\x00\x71\xff\x9c\xf3\xd1\x76\xa1\xcc\x07\xe8\x89\x7b\xde\x2c\xef\x40\xe6\x64\x0d\xb2\xac\xcf\x29\xcf\x94\x7b\xc8\x3a\x2d\x18\xda\x94\x7f\x19\x97\x5c\x1d\x37\xf3\x70\x5b\x08\xbc\xc1\xa7\xa0\x8d\xf8\xf5\x20\x0e\x66\x56\x95\xe8\x27\x72\xb9\xbc\xb3\xa2\x15\xf3\x8f\x02\x74\xcd\x7c\x6c\xa5\x65\x29\xca\x2a\x46\x5b\x77\xd7\x47\xc3\xa3\x13\x43\x09\xa1\x33\x2d\x41\x1c\xfc\x6e\x17\xc6\xb0\x49\xbe\x25\x55\xed\x8e\x90\x1e\xd2\x93\x71\xda\x57\x65\x7b\x48\x4d\x27\xab\xee\xa1\xd6\xc2\x21\x67\xde\x92\xa1\xd0\x8d\xf8\x20\x0e\x66\x16\x35\x7d\xaa\x30\xed\x09\xe1\xe1\xed\x37\xe9\xaa\x6a\xef\xbe\x10\x0c\xab\x61\x61\x47\xcb\x66\x14\xa5\xce\x84\x68\xd2\x17\x98\x40\x3b\x5d\x40\x1c\xcc\x2c\x17\x59\xcd\x2c\x74\x7f\x6f\xe2\xae\xe9\x63\xfe\x89\x4e\xb3\xc8\x5f\x8f\x6a\x8e\x73\x94\xe4\x6e\x37\xdc\x28\x4c\xa9\x7c\x9e\x06\x9d\xe7\x0f\xe2\x60\x66\x7d\x55\x10\x18\xba\xfb\x8c\xd8\xf2\xac\x77\x1f\xbd\xc0\x09\x3d\x1e\x67\xe4\x77\x00\xed\xde\x9d\x1e\xeb\xed\x36\x7d\xd9\xe9\x83\x7e\xc4\xd0\x19\xc4\x21\xae\x45\xbc\x58\xe6\x03\xf4\x66\x3d\xaf\x56\x53\x1b\x89\x63\x41\x65\x46\x5b\x5a\xe0\xdb\x20\x7c\x5c\x6d\x93\xef\x16\x92\xf2\x8a\xdd\x67\x58\x95\xc7\xb5\x0f\x30\x4a\xa9\xa0\x63\x96\x41\x1c\x4c\xad\x67\x8d\x97\xa8\xa8\x91\x34\x3c\xb0\x9e\xfd\x88\x21\xa0\x97\x6b\x0e\xa0\xa2\x9c\x98\xc2\x5f\x75\xf1\x6e\x66\xd7\x0b\xb7\x34\x84\x26\x7d\x40\x1c\x4c\x2d\x51\xe6\x36\xaf\xf6\x0d\x0f\x07\x2c\xe9\xe2\xb7\xc7\xe6\x48\xbb\xc7\xe3\xd3\x69\x3a\x15\x4e\x73\xfd\xaf\x52\xcd\x28\xd9\xcc\xa1\x53\x13\x40\x1c\xfc\x42\x5f\xa4\xf1\x28\xad\x11\x13\x07\x23\x54\x5f\x4d\xbc\xd1\xce\xd3\x87\x64\xd3\x34\x14\x99\xe4\x1c\xa5\xca\x6c\x54\xbf\xe2\x4c\xa0\x25\x2e\x10\x07\x53\xeb\xe3\x54\xe1\x60\xcc\x1f\xd7\xa6\xd8\xfa\xe3\x99\x52\xaa\x1a\xcf\x88\x62\xc1\x07\xfa\xbc\x14\x81\x95\xfa\x8e\x57\xac\xec\xde\x42\x99\x2a\x10\x07\x53\x2b\x57\x3f\xf2\xde\xc9\x26\x86\x1d\x67\xb0\xbd\xe9\xdd\x70\xc5\xbb\xca\xe6\x47\x8c\xa9\xe5\x94\xe2\x9f\x5e\x9d\xa0\x87\x30\x2f\x42\xd7\x06\x81\x38\x84\x5a\x17\xcb\x7c\x80\x46\x50\xff\x65\xf5\xd4\x55\xfc\x5a\xab\xf2\xcb\x99\x3e\x27\x8b\x42\x3b\x47\xba\xe6\xac\x9f\xe2\x7f\xba\x1b\x5e\x63\x8c\xab\xb9\x0c\xa2\x7b\xfc\x3c\x81\x56\x4f\x01\x1c\x4c\x2d\xd7\x61\x5c\xf9\xe3\x55\xd1\x52\x5e\x9f\xdd\x8d\x38\x8f\x1f\x02\xaa\xa3\x7e\x83\x8b\x43\x55\x89\x48\xdd\x33\x38\x2e\x63\x99\x90\xb1\x20\x0e\xa6\x56\xe4\xa9\x24\xae\x09\xdb\x53\xbe\xe6\x5b\x4c\x68\x45\xc6\xbc\xf5\x8c\xab\x3c\x5e\xf8\x38\xfd\x87\xe3\x6a\x6f\x6f\x71\x6e\xe7\xf2\x20\x8a\x05\x71\x30\xb5\x44\x0e\x35\x04\xba\x6c\x51\x14\x0c\x27\x0e\x99\x58\xdc\x90\xf6\x0c\x4a\x6c\x38\x1c\x7e\x28\x06\x64\xba\x9b\x37\x75\xd6\xda\x43\x7b\xc8\x40\x1c\x4c\x2d\xba\x62\x66\x6c\xd4\x41\x4b\x5e\xb7\x12\xe3\x39\x15\x2e\xdd\xdd\x87\xa8\x7e\xde\xd8\xa4\xb3\x51\xe6\x3c\x0c\x9f\x58\x26\x9e\x42\x37\xe2\x83\x38\x98\x5a\x4d\xbd\x74\xdc\xfe\x26\x34\x0d\x34\x6f\xc2\x50\xc3\x31\x45\x6d\x6b\xde\x71\x7b\x69\x94\xda\x45\x16\xe4\xbc\x7e\x67\xe8\x3d\x65\x8a\x50\x0b\xc4\x21\xd4\xba\x58\xe6\x03\x34\x52\x3e\xaf\x96\x68\x48\xc5\x9b\xdb\xa2\x65\x36\x39\xf1\x12\xfb\x77\x07\x37\x3e\xd5\x86\x97\x49\xb2\x59\x70\x59\x2d\x88\x5a\x51\xf3\x98\xe9\xc5\x40\xcf\x01\x00\x07\x53\x6b\x2f\x18\x7d\x68\xa2\x5f\x87\x09\x7d\xea\xee\x78\x1c\x37\x8b\x4e\x9d\x0f\x95\x2d\x96\xa7\x3b\x0f\xef\x54\xfb\x9a\x25\x75\x14\x74\x5c\x2a\x88\x83\xdf\xdc\xbf\xc0\x9e\x2d\x25\xbc\xf7\xf3\x15\x3d\xa9\x63\x3b\xe9\x53\x93\x4a\xaa\x23\x82\x4f\xe6\x97\x74\x96\xfe\xdc\x24\x34\x1b\x9c\x86\xb6\xa4\x80\x38\x98\x5a\x01\x8b\x63\x04\x1c\x0b\x57\x2f\x75\x91\xe1\xa6\x30\xf5\xf9\x6a\xf8\xdc\x9b\x19\xad\x1c\xa6\x4f\x79\x47\x86\x9d\x94\xff\x00\xd3\x02\x51\x2c\x88\x83\xa9\xb5\xf4\x54\x78\x81\xfb\x6e\xdb\xda\x9a\x4c\xe5\xad\x2e\x72\xcb\x96\xd7\x3d\x37\x6b\x25\xb9\xd0\xef\x66\xac\xa1\xe0\x3c\x29\x6a\x5f\x41\x14\x0b\xe2\x60\x6a\x79\xe9\xd1\xaf\x93\xdc\xc3\x94\xea\xb0\x40\x8a\x7b\xf3\xe1\x7a\x67\x97\x03\x91\x74\x9f\x68\x15\x33\x9b\xd6\xcb\x3e\x94\x31\xb9\x36\x68\xc7\x3c\x80\x43\xa8\x75\xb1\xcc\x07\xe8\x8b\xe8\xbc\x5a\x9b\xd7\xb4\x64\x13\x3f\x2c\x59\xd7\xd6\x91\xfc\x64\x8b\xa6\x1e\x51\xb1\xd1\x79\xf9\xa4\xfe\x52\xe2\x03\x53\x07\x9d\x69\xa6\x5e\x68\x71\x05\xc4\xc1\xd4\x62\x56\x78\xac\x6f\x57\x71\x69\xe7\x41\x88\xde\x8a\xcc\xb6\x62\x74\xb0\x0a\x47\xd8\xfb\x91\xc1\x04\x1d\x0b\xe7\x20\x6d\x5b\xdc\x77\xd0\x46\x1f\x00\x07\x53\x4b\xbb\xac\x5e\x06\xf7\x4f\xff\x89\xe0\xc0\xd1\xe5\x14\x1c\x1b\x43\x97\x96\xfa\x88\x97\x34\x7b\x11\x01\x0d\x62\x63\xcc\x97\x4f\xa0\x67\x2c\x88\x83\xa9\xd5\xb4\x15\x17\xcb\xeb\x67\x2a\x54\xde\x70\x4f\x2a\x8d\xd9\xe0\x75\x8b\x3e\xde\x92\xc1\x34\x09\xc7\x3c\xd5\xb4\xec\x0b\xc9\x23\x7c\x68\x54\x00\xe0\x60\x6a\x69\xee\xe4\x58\x4f\x15\x2a\xa6\xf9\xf2\x69\x6d\xe3\x67\x7c\xa2\x1b\xc0\xa7\xa2\xfd\x91\x2b\x20\x93\xb3\xef\x36\x61\x7e\x1f\x75\x0d\x5a\xef\x07\x70\x30\xb5\x44\x57\x98\xe4\x42\xce\x6a\xde\xa7\x3f\x6e\x60\x34\x3c\xd3\xea\xa4\xce\xc4\x9a\x1d\xfe\xad\x4d\xe6\x75\xd4\x41\x9f\xc4\x23\x7d\x17\xa1\x16\x88\x43\xa8\x75\xb1\xcc\x07\xe8\xcb\xf7\xbf\x8c\xb5\x1c\xd4\xf0\xa2\x1f\x61\xe5\x98\xdd\x14\x43\x4a\x61\x13\x79\x3c\xab\x10\x9d\xbe\x8f\x62\x43\x30\x8d\x77\xb7\xfb\xa6\xb6\x05\x74\xd2\x35\x88\x83\xa9\x45\x41\x16\x87\xa4\x2c\x4b\x2e\xf2\x99\xe4\xba\xd4\xe3\x2b\x0f\x9f\xf2\x9a\xd7\x73\xc5\x49\x39\xed\x6f\x78\x5c\xc7\xdc\xb0\xc4\x18\x86\x02\x3a\x00\x0e\xa6\xd6\xb8\x69\xbd\xc6\xea\x55\x89\xc7\xa6\xfe\x4c\x31\xd4\x7b\x9f\xe3\xf5\x19\x86\x3e\x69\xf4\xd4\x05\xd4\x87\xeb\xdd\x1a\xc9\x5c\x67\x47\x14\x0b\xe2\xe0\x07\x41\xca\x86\xbc\x6d\xb7\x5c\xab\xc5\x98\xee\xb5\x1c\x60\x6a\x1a\xb8\x35\xd6\xaf\xbc\x34\xfb\x94\x6e\x8a\xc6\xe3\x8f\xd0\x8f\x18\x28\x57\x07\xe2\x60\x6a\x39\x08\xe5\x8c\x96\x8a\x10\xf5\x54\x78\xa9\x4b\x59\x55\xa4\x25\x1c\xdf\x77\xda\x09\x1a\x96\x3b\x51\xa8\x4f\x36\x6e\x7e\x1f\xe2\x81\x28\x16\xc4\xc1\xd4\xc2\xaf\x49\xfa\x9a\xb5\x39\x8f\xe9\xb7\x4d\x18\x97\xb1\x25\x70\x2b\xe6\x95\xd0\xb2\xf1\x69\xb7\xda\x22\x39\x9d\x7a\x9e\xde\xc0\x30\x42\x2d\x10\x87\x50\xeb\x62\x99\x0f\xd0\x0c\xc7\x79\xb5\xbe\x72\xf2\x97\x9c\x0c\x22\x87\x24\x39\xbe\x5e\x12\x4a\x11\x95\xb2\xc1\x23\xd0\x3d\x3c\x89\xdb\x17\x68\xac\x5b\x7c\xd4\x93\xdd\x84\xf8\xf9\x20\x0e\xa6\x56\x2b\x57\x36\x7d\x80\x6a\x29\x65\xba\x3d\xc1\xa4\xc4\x6e\x83\x6f\x49\xdc\xd3\x51\xd1\xdb\x03\xbe\x12\x81\xbe\x51\x6e\x33\xfd\x42\xd0\xda\x2d\x80\x83\x9f\x31\xca\x1f\x4a\xe1\xf5\x5b\x85\x68\x6c\x8d\xac\xc1\x09\xef\xce\x8a\x89\xa7\xfc\xe5\xd0\xe7\xa5\x7c\xdf\x23\x97\x18\x5f\x31\xda\x40\xc7\xf5\x81\x38\x98\x5a\x05\x36\x63\x9c\x0c\x63\xc3\x92\x71\x18\x03\x78\x86\xe2\xe9\x91\x39\x1e\x69\x0f\xd6\x29\x49\x7d\xd7\x96\x0a\xd0\x0a\x32\x26\xe2\x11\xc5\x82\x38\x98\x5a\x7c\xc9\x18\x6f\x12\x92\x58\xc2\x97\x07\x53\x26\x52\x8e\xa2\x5a\x85\xd8\xae\x62\x62\x5a\x65\xb2\x2f\x3b\x68\xf7\x7d\xf0\x2e\x86\x3e\x93\x41\x1c\x4c\xad\x18\x6c\x22\xeb\xd6\x37\x49\x7f\x18\x6e\x78\x2f\xf4\xf9\x98\x5c\x8f\xd6\xd0\x36\x68\x9a\x6e\x28\x7c\xf8\x54\x05\x3f\x21\xcf\x3a\x11\xa1\x16\x88\x43\xa8\x75\xc1\xcc\x07\x68\x0e\xfb\x9f\xcc\x47\xdb\xb9\xcc\x47\x47\xad\xf6\xde\xc7\x45\xde\x29\xd4\x67\xbd\x52\xb7\x4d\x13\x5c\x35\x1f\x69\xed\xbc\xf8\xb9\xb6\x68\x9b\xc9\x42\xfc\x81\x65\x2a\xef\xef\x67\xfa\xce\x65\x3e\x6a\x4c\x96\xcc\x9d\x07\x89\xf3\xba\x1d\x3e\x8d\x19\x89\x8e\xd2\x52\x25\x9c\x16\xb2\x92\x75\x8a\xc4\x66\x86\x73\xa8\x36\x30\x69\xfe\x7d\x95\xe7\x32\x1f\x27\xa3\xc4\x22\x95\x54\x43\x5c\x0a\x1c\x2d\xb3\xf9\x9f\x4f\x9f\x0c\x1f\x94\x07\x0d\xea\x4b\x99\x9b\x32\xe3\x3b\xbb\x2d\x3d\xfb\xdb\x33\xa8\xb5\x2e\xd6\x96\xe7\x3b\xf8\x23\x21\x4b\x63\xda\xe3\x36\xbc\x9c\xc7\xf1\x8d\x72\xc9\x7c\x38\xe9\xba\x95\x61\x5b\x0a\x16\x07\x51\xb3\x4e\x7e\xf8\x28\xfa\xd0\xa1\x6e\x20\x0e\xd6\xc1\x7f\xb0\xa0\x16\xb1\x5c\x8a\x9d\xc8\x6d\xc9\x8b\xd5\x57\xca\x89\xbd\x69\xc0\x47\x22\x48\xf0\x71\x12\xf5\xce\x3b\x45\xf6\x03\x6b\x68\x5b\x33\x88\x83\x5f\x94\xc9\x92\xdf\x88\x8b\xb5\x9f\x54\x5a\x81\x7f\x9a\x2b\xb9\x64\xd6\x17\x4e\xf9\x08\xcb\xb6\x84\x4b\x98\x4e\xc2\x89\x4d\xf1\x00\x5a\x8b\x02\x71\xb0\x0e\x1e\x34\xeb\xcc\x30\xef\x9b\x26\x3c\x41\x65\xc3\xdc\x17\x3e\x30\xda\x83\xd9\xb1\x44\xa1\x72\xc4\xa4\xac\xe3\x8a\xab\xb3\x59\x58\x04\xad\x9c\x01\x38\x78\xd2\x5d\x5c\x57\xea\xc6\x14\x27\x0e\x2d\x27\xbd\x39\x31\x07\xb1\xbd\x3e\x5b\xbc\xa8\x74\xe5\xfd\x51\x9d\xca\x7c\x4c\x82\xce\x4e\xe8\x29\x07\xe2\x60\x1d\x9c\x63\x44\xab\xad\xdd\x36\xcc\x4b\xc5\x60\x8f\xec\xd6\xe1\x7b\x2e\xbc\x86\x27\x3a\x92\x68\xa7\x37\xe5\xd8\x67\xb4\xf6\x02\xc8\x49\x11\x1d\x1c\xc4\x21\x3a\xf8\xc5\x32\x1f\xa0\x3e\x73\x5e\x2d\xc5\x53\x4d\xdf\xf7\x12\x6d\x2f\x35\xba\x7d\x62\xe4\x83\xb1\x1c\xe4\x3b\xbb\xa2\x71\x13\x9f\x4d\xba\x71\xb1\x44\x0f\x92\x52\x43\x77\x57\x81\x38\x98\x5a\xc8\x0a\x59\x44\x8b\xc2\x21\xf7\xf0\x07\x7b\x95\x7d\xca\x15\x48\x7f\x1d\x7e\xf3\xfa\xb8\xf7\x98\x03\x6d\x97\x80\x2b\xd5\xa6\x0b\x3a\x9c\x18\xc4\xc1\xd4\xf2\xaa\xbc\x6a\xd9\x5b\x10\x99\xd7\x96\x66\xd2\xd5\x15\xad\x75\x63\xa7\x71\x69\x32\x85\xb9\x1e\xeb\x97\xc7\xcd\xcf\x3a\x6f\x27\xa1\xb3\xe2\x40\x1c\x4c\x2d\x5d\xd2\x7a\x39\x7d\x75\x1f\x2e\xd3\x56\xab\xda\x46\x03\x77\x95\x5d\xf6\xfb\x72\x7b\x21\x97\x15\xe7\xca\x32\x39\xf7\xde\x49\x43\xfd\x0b\xc4\xc1\x0f\xce\xdc\xc2\x4a\xc4\x51\xec\xfc\x21\x55\xee\x8d\x4f\xed\xcc\x51\x38\x55\x84\x49\x15\x32\xc5\x7a\xf8\xc9\x47\x91\x9d\x55\xdf\xec\x37\xa2\x58\x10\x07\x53\x8b\x41\x76\x5a\x21\x3a\xd8\xdc\xfd\xe8\xca\xcd\xda\x7a\x2c\xf1\x36\xba\x46\x4f\x02\xf9\x3e\xa5\x16\xeb\xfd\xa9\x42\x87\x37\x1a\x50\x14\x15\xc4\x21\xd4\xba\x58\xe6\x03\xf4\x6c\x3c\xaf\x96\xfe\x55\xea\xea\xca\x56\x9c\x4b\xdc\xc1\xe4\xb3\xee\x79\xc7\x57\xdc\x7f\x49\x4d\xd2\x94\x54\x05\x75\xbb\xed\x8d\x96\x65\xdf\x85\xce\x7a\x01\x71\x30\xb5\x86\x9e\x89\xf0\xb8\x7f\x22\xf1\x65\x5e\x15\x9b\x54\x76\x57\xff\xcc\xd9\x67\xb1\xce\x9c\xbe\xc6\xae\x75\x54\xe0\x6a\xa8\xf9\x9f\xdc\x30\x88\x83\xdf\x6c\x1b\x90\xed\x7d\xdd\xce\xf6\x70\xb9\x93\xfc\xf2\x2f\xae\xad\xa2\x56\x7c\x95\x24\x2a\x36\x41\x3f\xe9\x44\xdd\x33\xdf\xf9\x03\xe8\x0e\x56\x10\x07\x53\x2b\x82\xfa\xc7\x64\x68\x69\xde\x96\x78\x7b\xbc\x40\xcf\xb3\x80\x40\xdd\xac\xc9\x47\x1c\xc7\xbe\x4d\x23\x0b\xcd\x05\xc3\xb1\x1c\x50\xc2\x15\xc4\xc1\xd4\x7a\x2b\xa1\x4f\x63\x6d\x19\x30\xcd\xc5\xa9\xf9\xca\x69\xc0\x42\x33\xab\x07\x53\x33\x40\xc1\x54\x5b\x72\xb8\x84\x68\xb7\x25\x09\xba\x45\x1f\xc4\xc1\xd4\x7a\xa2\xe4\xbd\x3d\x6b\x69\x68\x9a\x4e\xef\x19\xab\x52\x67\x5b\xbf\xa6\x3e\xae\xc7\xe7\xd2\x3f\x44\x6b\xc1\x2a\x49\x45\xd3\xd7\x0c\x9d\x22\x0c\xe0\x10\x6a\x5d\x2c\xf3\x01\x5a\xe5\x3f\xaf\x96\x8f\x23\x45\x04\x8f\x66\x92\x55\x7d\x4d\x3a\x9b\x77\x7d\x6e\xff\x29\x95\x5c\x9f\x24\xeb\x72\xb1\xc4\x4b\xce\x3f\xcc\x3e\xd5\xd0\xc4\x1a\x88\x83\xa9\xd5\x86\x97\x66\xde\x8d\x24\xb8\x3a\x5f\xec\x77\xd7\xe1\x76\x8e\xeb\xfc\x29\xe6\x81\x5f\xfd\x13\xbd\xcf\xf1\x54\x67\xd9\x81\xbc\xd0\x79\x81\x20\x0e\x1e\x82\x14\xb4\xfd\xf0\x63\x5b\x32\xc6\x5f\xd1\x19\x6d\x35\xae\x74\xb7\xca\xc0\xf2\xc6\x88\x8a\x81\xd6\x23\xcb\x54\xb5\xc8\x6a\x24\x68\x0f\x24\x88\x83\xa9\xf5\x76\x42\xed\x58\xa2\xe0\x23\x72\x32\x2d\x99\x45\x9c\xd6\xd7\x9a\x4a\xfc\x88\xba\x87\xbf\xd5\xe9\x64\x7e\xaa\xbd\xa0\xb8\xb6\x0f\xc5\xfd\x41\x1c\x4c\x2d\xc9\xfa\x77\x4a\xeb\x64\x4b\x27\x5d\x9e\x9a\x99\x66\x2f\x93\x51\x3a\xd9\x48\x51\x4f\xf8\x3f\xbb\xee\x74\xcc\xf1\x8a\xda\xac\x8d\x43\x99\x8f\x6a\xbe\x1e\x0b\xb2\xbd\x2d\xa7\xc8\x03\xfe\x2a\xce\x4a\x77\xd2\x9f\xb6\xf5\x5a\xa4\x93\xeb\x12\xa2\xfa\xc5\x8b\x67\x03\x26\x3f\xff\x9d\xf9\x50\xbc\xec\x7d\xe9\xad\xd7\x59\x5c\x41\xba\x4f\xf7\x35\x2c\xd3\x94\x7e\x16\xda\x05\x83\xaa\xa3\xf7\xfc\xcb\xdc\xbd\x6f\x95\xc6\x8e\xff\x85\x62\xa3\x55\x8f\x56\xe3\x63\xc9\x3d\x49\xde\xe2\xf7\x74\xc3\x88\xf5\xa7\xa9\xfb\xce\xa5\x21\xe1\xb9\x6a\xcf\x9d\xf5\x8d\xc7\xfd\x95\xa8\x28\x11\xd1\xbf\x32\x1f\xa0\x92\x03\x90\xaf\xc0\x32\x1f\x22\xc1\x66\xa9\x6d\x31\x46\xd3\x8e\x77\x62\x8d\xfd\x90\x87\xe9\x14\x9c\x87\xc7\x69\xcc\x13\xdf\xdf\x57\x63\x36\xae\x45\x71\x92\xfc\x17\xea\xbc\xbb\x4f\xc1\x6e\x91\xdb\x48\x9c\x87\x7e\x7a\x78\xec\x16\xb6\xcb\x67\xf1\xd6\x5a\xfb\x3a\x55\xdd\xe3\x43\x93\x22\x63\xc2\x2e\x28\xf3\x01\x2a\xf3\x9f\xcc\x07\x92\x2c\x6c\xc4\x79\xe9\x4c\x46\x4c\xfa\x91\xd2\x55\x64\x85\x96\xe0\x2f\xec\xbb\x56\x1a\x9f\x4c\x95\xa9\x12\xeb\xee\x57\xd3\x09\xd8\xc4\x37\x71\xfc\x0f\xee\x4c\xe4\x86\x0f\x72\xd3\x6d\x4a\x17\xa2\x12\xd3\xe9\xb7\x26\xc9\x6d\xfb\xe3\xe6\x82\x5a\x7e\x0f\x73\x1a\x84\x8a\x1c\xe4\x09\x7e\x61\xe1\x0d\xd9\x5b\xfb\xfb\x2a\x55\xe0\x55\xde\xbe\x49\x17\xf3\xa2\x9c\x98\xd6\xe8\x4b\x7b\xeb\x12\x09\x69\x27\xed\x87\x17\x5e\x14\x43\xc4\x36\xed\x13\x0c\x85\x06\xee\x32\x0b\x7f\x5f\xa5\x2e\xbc\x4a\x4b\xea\xb3\x40\x12\x0c\xfe\x7a\x21\x8d\x5a\x7c\x31\xdf\x5e\x0f\x83\x1b\x12\x21\x9f\x71\x55\x15\xbc\x0c\x43\xb6\xf7\xae\x1a\x5f\xfb\xfb\x2a\xdd\xe0\x55\xf6\x76\x7a\xb2\x6e\x2b\xe1\x33\xf5\xf6\x1a\x7d\x40\x4b\x66\xaf\xd8\x1f\x32\xab\x48\xc4\xaf\x52\x89\x4a\xb8\xf7\xdd\x34\x9a\xcf\xfa\xef\xab\x4c\x80\x57\x59\x1b\xc8\xdc\x6f\xf7\x76\xc0\x83\x6f\xd4\xcd\xfb\x13\x7a\x69\xb9\x40\x69\x90\x42\x20\x0b\x13\xb6\x0c\x77\xfc\xc6\x6c\x4d\xc4\xfd\xbf\xaf\xb2\x0a\x5e\x25\xa9\x3c\x59\xaf\x19\xa7\x71\x44\x1e\xfd\xf8\x92\x8c\x8b\x91\x59\x1a\x67\xde\x26\x47\xb8\x7d\xa1\x81\x16\x35\x3a\xcd\x02\xd5\xc1\xdf\x57\xd9\x0c\xaf\x32\xfe\xa0\x82\x93\xe5\x9e\x8a\x1a\x1e\x57\xe9\xb1\x20\x01\x47\x3f\xf7\xf1\x4c\x3c\x85\x2e\xda\xa2\xf8\x69\x95\x57\x7a\xd4\xd4\xb7\xff\xcd\x67\x19\xa8\x2b\xfe\x97\xcc\x87\x54\x73\x66\xda\xfd\xfb\xbe\x13\x43\xdc\xf6\xb2\x7c\x5d\x1a\x4d\x3d\x5c\xec\x63\xed\x53\x0c\x5c\x1e\x19\xd9\xc8\x6b\x56\xd0\x68\x14\xc4\xc1\xde\x42\x6f\x97\xab\x5d\xf4\x35\x0a\x45\xaa\x12\xe9\x4b\x07\x99\x36\xa3\x1b\x4e\xa3\x65\x6b\xd9\x5e\x32\x99\x8f\xd2\xd0\xcc\xc6\x84\x42\x59\x59\x10\x07\x7b\x0b\xd9\x52\xb9\xad\x6e\x44\x94\xca\x53\x2f\x96\xab\x3b\x13\xbc\x76\xc4\x89\x73\x11\xd2\x23\xbd\xc1\x5d\x9c\x2f\xcf\x70\x0d\x43\x18\x03\x51\x2c\x88\x83\xbd\x85\xdc\x88\x36\xe2\x7e\x98\x77\x4c\x9f\x39\xa9\x1a\x18\xd3\x53\xaa\xe0\x61\x89\xf4\xac\x1d\xf3\x62\x9f\x7a\xfe\xe8\x7c\x77\xbb\x48\x0d\x51\x2c\x88\x83\xfd\xb5\x6f\xb1\xc5\x76\xfd\xef\x68\xb2\xf6\xa7\xfa\xa8\x48\x3c\x34\x3a\x19\x68\x6c\x76\xa4\xf6\x50\x19\x9e\x58\x90\xbb\xd6\xcf\xc7\x04\x7d\xed\x81\x38\xd8\x00\xa7\x5e\x69\x75\x53\x91\x58\x53\xce\xbd\xc4\xa7\xd9\x15\x27\xc5\xd2\x7c\xa5\x59\x20\x86\x4b\xe3\x46\xe9\x75\x9a\x34\xbb\xdd\x71\x14\x44\xe6\x03\xc4\xfd\x73\xce\xc7\xff\x79\x9e\x83\xc7\x37\xa0\x27\xee\x7f\x39\x7d\x71\x93\x5a\x7b\x9f\x9f\x94\x58\x53\xe1\xb7\x60\x11\xde\x32\x57\xc6\xf3\xcf\xba\x43\xd9\x9e\x3f\xed\xaf\x13\x28\xd5\xa9\x88\x42\x9b\xc5\x41\x1c\xcc\x2c\xf9\x5f\x2b\xb7\x14\x34\xf6\x65\x6d\x86\x8d\x8b\x14\x6c\x2b\x24\xfc\xef\x14\x62\x7d\x1f\x5a\xaa\xbd\x5e\xfd\x29\x19\x23\xdb\x0d\x5a\x39\x03\x71\xb0\xff\x15\x15\xc9\xbc\xd3\x13\x0f\xf7\x3f\xaf\xdc\x95\xc4\x63\x50\xbb\x34\x97\x14\xa4\xf3\x85\xb3\xee\xbc\xee\x13\xc8\x61\xeb\x71\x66\x86\x6e\xca\x00\x71\x30\xb3\xe2\xdf\xa4\x78\x7a\x3e\xc3\xaf\x2c\xdf\x42\x6d\xa3\xdd\x6b\x93\xdb\x18\x1d\x1c\xab\x56\xf9\x44\x15\xd0\xb9\x4c\xcd\x75\xb5\x1c\x3a\x19\x1b\xc4\xc1\xfe\x5a\xcf\xf1\x15\x8f\xd2\x1f\x76\x2f\x9d\x8c\x8c\xfb\x59\xb1\x30\x46\xc5\x54\x73\x46\x9b\x7a\x9f\x5d\xa9\x3d\x9a\x6c\xaa\x5c\xa9\x80\x7a\x2d\x88\x83\x99\xb5\xa9\xdf\xdf\xc9\x27\x7e\x74\xc3\x25\x8e\x58\x79\xa1\x57\xef\xaa\x15\x8e\x59\xc4\x94\xfa\x99\xab\x19\xf6\xe2\x98\xfe\x93\xa2\x55\xc4\xd0\x19\xc4\x21\xae\x45\xe4\xbe\xd0\xd0\x19\xf4\x66\x3d\xaf\xd6\xe5\x71\x0d\x07\x33\x91\x95\xdd\x5e\xc5\x5c\x74\xdb\x65\xa9\x64\xba\xb3\xb6\xa7\x9e\x32\x07\xec\x04\xd9\x0c\xac\x51\x63\x65\xdd\xd0\x7c\x07\x80\x83\xa9\xd5\x57\xfb\xc6\x6d\xf6\x84\xc5\x2c\xf0\x1a\x6a\x5c\x34\xd6\x53\x17\x4b\x53\xb4\x3a\xed\x8a\xdc\xd2\xdb\x1f\xec\x0c\x2b\xee\x4b\x42\x47\x5c\x80\x38\xd8\x3f\xeb\xa5\x43\xc4\x7b\x7f\xe4\x27\x61\x93\x4d\x57\x43\xec\x9f\x3c\x44\x67\x37\xae\xd5\x10\xaf\xe9\xba\x59\x7f\x40\x7f\x63\x75\xc2\x16\x3a\x33\x16\xc4\xc1\xd4\x72\xcf\xdd\xd9\x2f\xc0\x33\x7b\x5b\x45\xf1\xbc\xc1\x23\x53\xbc\xf4\x55\x92\x0b\xf2\x75\xdd\xc1\x92\x00\xca\xe7\x4d\x62\x29\x62\xd0\xb5\x41\x20\x0e\xf6\xd7\x3a\x12\x26\x9e\x7a\xcf\xca\xa4\xeb\x62\x57\x6b\x22\x6b\x54\xd1\x91\xa1\xc4\xae\xa5\x31\xc8\x6a\x4f\xb9\x87\x52\x7f\x94\x28\x81\xee\x76\x01\x71\x30\xb5\x76\xb3\x9f\x27\x59\x87\x7f\x15\x61\x7b\xa1\xa7\x6e\x27\x6e\xf3\x0b\x1f\xf5\xb7\x61\x20\x2d\x4b\xf2\x13\x92\xd7\x3b\x45\x32\x46\xd0\x3a\x04\x88\x43\xa8\xa5\x72\x21\xb5\x40\x23\xa8\xf3\x6a\xad\x57\x1b\x50\xd9\x49\xdb\x2e\x9a\xe2\x0b\x75\xaf\xe9\xe5\x45\x74\xb3\xbc\x7a\xea\xf1\x9c\x74\x4c\xfb\x01\x4e\xfc\xa8\x9e\x1e\x74\xe4\x13\x88\x83\xa9\x95\x39\xd5\xf0\xbc\xfd\xd9\x87\x70\x9e\x79\x8c\x67\xd4\xd1\xe6\x47\xf1\xeb\xa4\x49\x8b\x86\xfd\xa5\x4d\xf5\xc7\x83\xd3\x37\x7e\x42\xab\xa7\x20\x0e\xf6\xcf\xca\xbe\xe3\x3a\x29\xc3\x3a\xdd\x21\xc3\x20\xe7\x6e\xb7\x68\x3c\xa0\x5f\x60\xc8\xc4\x98\x16\xb3\xd3\x71\x0f\xf7\x2a\x5a\x35\x25\x94\xd8\x04\x71\x30\xb5\x7a\xf9\x95\x38\x9d\xf1\x82\xa4\x7f\x18\xda\x39\xef\xf6\x97\x99\x0e\xb3\xb0\x8a\x76\xab\x11\x1d\xcf\x14\x17\xb1\x8f\xd3\x79\x84\x21\x8a\x05\x71\xb0\xbf\xf6\xf8\x16\x89\x4b\xf6\xa9\xcb\x13\x5a\x0a\x4e\x71\x7f\xda\xc4\x61\xe4\x44\xb1\x1a\x62\x47\xd5\x63\x52\x99\x23\x8c\x9e\xb9\x19\x68\xe5\x0c\xc4\xc1\xd4\x52\x1a\x1e\x40\x6e\x66\x13\x7f\xce\xdf\x5f\x94\x4a\xa5\x1a\x33\x1d\xec\xae\x6e\x9f\x19\x4c\xf8\xae\x35\x3d\xe4\x41\xde\x6b\x22\x1c\x84\x5a\x20\x0e\xa1\x96\xee\x85\xd4\x02\x8d\x94\xcf\xab\x55\x61\x9f\xda\x45\xc8\x2c\xb4\x8f\xaf\xac\xa6\x64\x6c\x33\x28\xcf\x59\x2e\x8c\x59\x77\x2f\x42\xd6\x39\xd3\x83\xfe\x4d\xc3\x47\xe8\xe0\x2b\x10\x07\x53\xeb\xb5\x47\xf8\xc8\xfe\xdb\xe5\x60\x93\x49\xf1\x34\xb4\xc0\x57\xa6\xbe\x55\xce\xec\x64\xa3\x81\x49\x62\x96\xa2\x03\xb7\x22\x93\xa1\x93\xda\x40\x1c\xfc\xe6\xfe\xfb\x94\x56\x0f\xe2\x3d\x14\x5e\xc7\xbc\x7c\x4b\xb6\x1b\xac\x1a\xcb\xbd\x84\xbe\xa0\xe3\xfb\xf9\x17\x59\x70\xb4\xa2\x15\x26\xf4\xcf\x02\x71\x30\xb5\x7e\xd1\xa9\x46\x60\x58\x5b\x6a\x5f\x95\x7d\xc6\x73\xd7\x4c\x05\x67\x80\x57\x35\x71\xe4\x5e\x47\xdc\xdc\x32\x8b\x93\x2d\x89\x37\xb4\xd6\x0b\xe2\x60\x7f\xad\x9b\xd5\xcf\x87\x14\xe3\x25\xa9\x2a\xbe\xbe\x27\xac\x5f\x32\x3e\x8f\xa7\x3b\x39\xcc\x65\x48\xa8\x9f\x76\x65\xba\x15\x63\x4f\xfc\x67\x04\x07\xe0\x60\x6a\x95\x22\xd9\x87\xdb\xb8\xa2\x4e\x49\xbc\x5f\x13\xf4\xec\x2a\x76\xac\xd5\x1c\x7a\xe1\x14\xf1\x78\xa3\x58\xb8\x09\x95\x20\x88\x21\x12\xa1\x16\x88\x43\xa8\xe5\x76\x21\xb5\x40\x5f\x44\xe7\xd5\x52\xa0\xd0\x55\x0f\x1e\x53\x0d\xd0\x47\xa6\x14\xc4\xb3\x67\x4b\xf7\x90\xaf\xfc\xea\xfb\x9b\xa6\x3a\xb8\x4d\x2c\xe8\x60\xf9\x0a\x74\xcc\x09\x88\x83\xa9\xf5\x9b\x34\x4c\x49\xf1\xe6\x7b\x53\xba\x5d\x5e\x01\x9a\xcc\xf4\xd0\x59\x47\x39\x3f\x59\x8a\x26\x7a\xcc\xdc\x66\xee\x7b\x83\x96\xfd\x88\x62\x41\x1c\xec\x9f\x25\xb1\xb6\x67\xb5\x88\xbd\x58\x58\xc2\xac\x89\x8c\x6f\x42\xc2\x4e\xb7\xd0\x85\xe4\x7c\xdf\xd5\x44\xda\xeb\x67\x46\x91\xb6\x1a\x74\x7f\x16\x88\x83\xa9\x55\xeb\xef\xf6\xa5\x6f\x3d\x66\xf4\x0f\x51\xfb\x64\x38\x8a\xd9\x1d\x6a\xaa\xb5\x69\x7e\x29\xd2\xa0\x2d\xeb\x6d\x4c\x89\xee\x94\x65\x44\xb1\x20\x0e\xf6\xd7\x22\xa9\x27\x5d\x17\x97\x78\x77\xf4\xd4\xca\xb8\xf5\x06\xc1\xa4\x18\x97\x72\xd9\xcd\x6b\x4d\xcf\xfc\xd1\xcc\x92\xb9\xaf\x88\x18\x41\x2b\xd3\x20\x0e\xa6\x56\xc5\x82\x6b\x61\x4a\x42\x2e\x72\x75\xd6\x9f\xc6\x08\xe6\x26\x4e\xba\xcb\xc1\x9b\x11\xac\xd4\x2b\xec\xc9\x8f\x79\xce\xae\xb2\x43\x17\x70\x80\x38\x84\x5a\x09\x17\x52\x0b\xf4\xe5\x7b\x5e\x2d\xa5\x1e\x6f\x5c\x39\x33\x7d\xb1\x19\x77\xa3\x93\x91\xed\xb3\xe8\xf6\x10\x62\xf6\xb2\x0f\x6f\xca\x57\x63\xfa\x0e\xf3\x9c\x9b\x15\x10\x3f\x1f\xc4\xc1\x6f\x37\xcf\x70\x8b\x77\x20\xd8\x56\x15\xc4\xaa\xfb\x64\x35\xda\x4a\x75\x90\xdd\x69\x69\x62\xff\x70\x5d\x6e\x44\x91\xdf\xa5\xd3\x09\x52\x0b\xc4\xc1\xfe\x59\xfe\x47\x16\x3d\xc4\xc3\x98\x46\xfc\xc3\x06\x81\x65\x99\x3b\x37\x6c\xa5\xf8\x08\xd9\x44\x35\x1d\xa9\xdb\x44\x17\x17\xaa\x9f\x40\xe3\x6d\x10\x07\x53\x0b\x1d\x47\xa9\x27\x58\x38\x7a\xf2\x30\x89\xb1\xf1\xfe\xcb\xdb\x48\xb7\x1d\xea\x8a\x5f\xc9\xc4\x1c\x93\x85\x2f\xdc\x09\x70\xc9\x82\xce\xd3\x02\x71\xb0\xbf\x36\xe0\x75\xed\x57\x34\xf3\xfd\x4f\x89\x4b\x44\x89\xe1\xfb\xca\x97\x27\x18\xbe\x21\x2f\xe9\x7d\x91\x28\xf6\x5c\x5a\x14\x30\x1a\xe7\x87\x02\x70\x00\x0e\xa6\x16\x57\x4e\xb2\x12\x2b\xd7\x1a\xb2\xd6\x36\xd2\xd9\x7e\x39\x16\x4f\x8e\xe8\x48\xd0\x9b\x4d\x1e\xf1\x9b\xbb\x78\x06\x3d\x14\x8a\x16\x08\xb5\x40\x1c\x42\xad\xaa\x0b\xa9\x05\x9a\xe1\x38\xaf\x96\x21\x39\x65\x9c\x15\xad\x21\x4a\xe2\xf7\x35\x79\x2f\x27\xcd\xa2\x51\xeb\x88\x9b\x34\x3a\x97\x9a\x3a\x6c\x64\xee\x8a\xe0\xd5\x42\x21\x2d\x10\x07\x53\xeb\x31\x72\xf0\x74\xa4\x7d\xe8\x31\x05\x9e\x7d\xe5\xab\x0c\xc9\x98\x0c\x61\x1b\x3d\xdc\x0f\xaf\xaf\x1a\x4d\xcf\x8b\xb3\x93\xaa\x3f\x85\xb6\x29\x03\x38\xd8\x3f\xeb\x84\x51\xfe\x97\xb7\xa5\xd9\x97\xd1\xaa\x9f\xeb\xe9\xa3\xfe\x76\x86\x7e\xe2\x16\x4d\xa8\xfc\x13\x4a\x05\x32\x6f\xe2\x96\xa8\x24\x10\xc5\x82\x38\x98\x5a\x57\x3f\x79\x54\x93\x11\x7e\x23\xc5\x1f\xd4\x66\x70\x1e\x64\xfe\xc0\xb7\xfc\x3d\x80\xb0\x96\x55\x9b\x61\xe2\x25\x2b\x66\x5d\x01\x74\x65\x0c\x88\x83\xfd\xb5\xdc\x15\x47\xce\xd9\xb7\x9a\x7e\x06\x69\xaa\x5e\xc2\xdb\x59\xc7\x11\x26\x08\x2c\x7b\xd0\x94\xe3\x2b\xed\x1d\x64\x42\x5b\xf8\xb8\x1a\x51\x2c\x88\x83\xa9\x45\xc8\xdd\x8d\xf2\x39\xa5\xb3\x51\x93\xf6\xca\x55\x8a\x32\xbb\x44\xad\xee\xd3\x69\x8b\x41\xbd\x26\xa3\xa4\x9f\x2d\xde\x04\xd8\x29\x08\xb5\x40\x1c\x42\xad\xe6\xff\xb7\x5a\xb1\x28\x17\x9b\xc3\x0e\x10\x43\xf5\xf5\x0f\x93\x44\x9a\x3e\xb7\x53\xef\x0e\x13\xdd\x50\xa9\xc5\x97\xd5\xe6\x54\xf2\xe7\x05\x8c\x8b\x4f\x07\xda\xb0\x74\x7f\x6c\x17\x57\x38\x3f\xa5\xa9\x44\x49\xf6\xf8\xfb\x99\xbe\x3d\x78\x95\x33\x62\x4f\xc2\x5e\x39\xd8\x7f\xba\x4c\x12\xb3\x94\x39\x5e\x6e\xc3\x2f\x2b\x4d\xcc\xf2\xa8\x8d\xfe\x5e\x15\x7e\xc7\x76\xfe\xbe\xc1\xff\x66\xa6\x0f\xf4\xc3\xce\xf7\x36\xd7\x26\xd2\x51\x66\x99\xc5\xa1\x96\x2d\x65\x14\x9a\xe9\x6f\xcf\xf3\xa3\x09\xeb\x09\x09\x23\x83\x5b\x87\x50\xe7\x85\x58\x1f\x40\x73\x06\x20\x0e\xd6\xdb\xae\xc8\x85\x6d\x92\x3a\xb8\x7a\x8b\xe5\xab\x7e\xe1\xc8\xca\x5e\x23\xb9\xfe\xe2\x38\xe8\x8a\xa4\xdc\x06\x43\x8a\xe8\x6a\x8b\x04\x74\x89\x10\x88\x83\xf9\xfb\xf0\x5e\x19\x1e\x5f\x80\x59\x18\x5e\xde\x7b\xa4\x0f\xcb\x8f\xdd\x4e\xb0\x31\x22\xef\xb9\x3e\x90\x33\x1f\x9d\x95\x91\xa8\x09\xa8\x41\x14\x0b\xe2\x60\xbd\x6d\xf2\x18\x85\x6f\x31\x84\x57\xce\x7e\x9d\xf9\x92\x4e\x60\x43\xf0\x5a\x9b\xc3\xac\xcc\xdc\x6c\xd4\xac\x44\x85\xb1\xfd\xec\x57\x68\xb3\x0c\x88\x83\xfd\xb5\x2b\xcf\x65\xe2\x6c\xfa\x38\x05\x0f\x0a\xa7\x43\xd1\x24\x4f\x4a\x9f\xa8\x7d\x59\xba\x41\x33\xc8\x6d\x19\x31\xcb\x4d\xa4\xc2\x03\x5d\x2d\x08\xe2\x60\xbd\xcd\x2e\x93\x5b\x61\xc3\xc9\x55\x1e\x5b\x18\x1d\x7d\x47\x27\xc1\xb1\xf8\xea\x62\x26\xab\xfb\x94\x01\xeb\x24\xda\xc8\xb1\x13\x3e\x26\xa2\xb7\x81\x38\x44\x6f\x9b\xbe\xd0\x83\x1c\x24\xf0\x79\xb5\x06\x7f\xcb\xdd\x4f\x1c\xb7\x4a\xd9\xc3\xbe\x44\x74\x33\xee\xe5\x08\x73\xc6\x1f\xe5\xb3\xef\x83\x2f\x5f\xb0\x8b\x64\xdd\x54\xf4\x81\x6e\xad\x04\x71\x30\xb5\x44\x2a\x5b\x27\xdf\x6a\xd8\x78\xce\xb7\x17\x05\xc9\xf6\x25\x70\x21\xdd\xed\x45\xa3\x40\x55\x23\x4b\x19\xa6\x5e\xab\xba\xfb\x63\x04\xda\x7a\x00\xe0\xe0\x1f\xcd\x06\x4e\x81\x32\x5e\xa2\x0c\x46\xb9\x1f\x39\x2c\xe5\x26\x6d\xbd\x7b\x9f\x6c\x6d\x7b\x0a\xbf\x5c\x9a\xe5\x76\xe6\xfa\x61\x02\x4d\xf5\x81\x38\x98\x5a\xd2\x1f\x57\x30\x4a\x71\x36\xae\x91\x7e\x7f\xb4\xed\xf3\xbe\xaf\xc8\x0b\x43\xf7\x1e\xef\x36\xce\x97\xb0\x0f\x5f\xa3\xd1\x8e\x6b\xa0\x15\x52\x10\x07\xfb\x6b\x69\x99\x1f\x66\x73\x9e\x18\xf6\xb0\x8a\x85\xbc\xa3\xa0\x23\xda\xd3\xd4\x1e\x1f\x98\x67\x8c\xa2\x74\xcc\xd2\x55\xff\x6c\x57\x08\x5d\x10\x0e\xe2\x60\x6a\xf9\xdd\xf2\x95\x35\x25\xd9\xe1\x63\x14\xcd\xf1\x2e\xd1\x93\x33\x99\xe8\xf3\xbc\x87\xd5\x80\xb3\x24\x25\xf5\xd9\x67\xd5\xcc\xdb\x0c\xa1\x16\x88\x43\xa8\xb5\x77\x21\xb5\x40\xeb\xa2\xe7\xd5\x3a\xb5\x45\x23\x0e\xd0\x75\x7d\x50\x5f\x2f\x51\x51\x2c\x23\xa0\xd5\x37\xcf\xbb\x20\x23\xff\x31\xdd\x81\xb1\xdd\x81\x89\x16\x09\x0a\xf1\x82\x38\x98\x5a\x37\x3c\x5f\xeb\x88\x25\xcd\x7d\x1e\x63\xd4\x1b\x4b\x58\x7d\x67\x54\xd3\xd6\x42\xd5\x2a\xb6\x2b\x95\x51\xeb\x70\xe7\xf5\x09\x0a\x74\x50\x32\x88\x83\xfd\xb3\x30\x90\xb8\xfd\x7f\xb0\x33\x89\x1d\x95\xf8\xb9\xeb\x7e\x4c\x52\x11\x21\x32\xaa\xfe\x94\xdf\x7b\xf0\x1e\x8b\x97\xf4\xf4\x11\x03\xb4\xa3\x01\xc4\xc1\xd4\x22\x57\xfd\x8c\x61\xff\x52\x31\xe0\xb6\x36\xc6\x56\x4f\xd1\xeb\x9e\xe4\xd7\x37\xac\x96\xa5\x04\xb1\x94\x8c\x6b\xbd\xef\x14\x4b\x42\xa7\xd7\x81\x38\xd8\x5f\x1b\x8f\xae\x62\x2f\x19\x11\x60\xdb\x68\xaa\x59\x65\xf7\x42\x53\x4f\xba\x67\x04\xbf\xbd\x67\xd2\x5e\x3d\x42\x47\x20\x71\x33\x01\xba\x5f\x11\xc4\xc1\xd4\x6a\xe9\x76\xc4\xbd\x12\x6c\x96\xdb\x1c\x2f\xaa\x50\xcd\x42\x21\xa7\xba\x30\x5a\xbc\x4f\xbe\xa9\x46\x10\xef\x29\x63\x35\x69\x78\xd9\x97\xed\x62\xdc\xff\xaf\x96\xb8\x3a\x32\x62\x95\xdc\xc1\x7b\xc5\xd7\xaa\x0d\xcf\x20\x43\x47\x29\x88\x73\xfc\x0a\xbe\x18\x06\x56\x6d\x16\xc3\xb5\x53\x5b\xa1\xd1\x14\xf7\x4a\xb1\xdb\xff\x5e\xab\x9f\xb6\x0c\xcb\xe0\x23\xe5\x66\x64\x95\xfc\x3a\xde\xd4\x7b\xf3\xa5\x47\xb8\x5e\x78\xd3\x6b\xca\x8e\xe7\xd8\x69\x85\xef\xd6\x15\xff\xbd\x8e\x99\xbd\x4e\xf2\x05\x0f\x25\xa7\xab\xdb\x65\x64\x1f\xfd\xa0\x47\x4f\x24\xf2\x65\x02\xed\xc1\x9d\x27\x4e\x71\x9e\x6e\xbf\xce\x6e\xc4\xc1\xd6\xea\x41\x25\x9f\x5f\xab\xf7\x59\x19\x9a\x11\xa6\x5e\x9e\x2e\x5f\x11\x54\x0f\x4e\xfd\x70\x75\xd5\xcc\x26\x29\xd3\xae\x53\xf3\x5a\x51\xd3\x9e\x55\xdb\x70\xd0\xbf\x50\x9d\x28\x7e\xfd\x62\xf3\x2a\xfc\xdb\xb4\xae\x2a\x0f\xeb\xae\x65\x6e\x7f\xb4\x8c\x66\xfd\xac\x62\x71\x7d\xc7\xd4\xcb\x48\x96\xd8\x0e\x5a\xab\x07\x95\xf9\xcf\x5a\xbd\x28\x7c\xad\x1e\x49\xf1\xba\x58\xe5\xc3\x77\x1b\x37\xd2\x9b\x8d\x37\xe7\x83\xe8\x6a\xfd\xba\xd2\xd2\xb5\xc9\xcc\x31\x71\x2a\x6e\x66\xff\x7f\xac\x9d\x75\x50\x56\xcd\xfb\xff\x41\x44\x29\x91\x10\xa5\xa5\xa5\x41\x94\x94\x52\x42\xba\x54\xba\xa5\x44\x24\x04\x41\xba\x44\x42\x5a\x4a\xa5\xbb\xbb\x1b\x01\x41\x04\x44\xba\x41\x3a\x44\x3a\x24\x7f\x33\xbf\xf9\xdc\xe7\xfb\xcc\xb9\x9f\x99\x65\xc6\xe7\xff\xd7\x5c\xe7\xec\xde\xef\xbd\x77\xcf\xbe\x77\xaf\xeb\x15\xfa\xc9\x5f\xaf\x87\x44\x91\xbc\xfa\x97\xe2\xe8\x86\xd8\x67\x4d\x0a\x34\xf9\x6d\x67\xfd\x0b\xc2\x55\x6e\x4b\x8f\xc9\x34\x7a\x2f\xb4\x72\xc7\xb7\xce\x52\xfc\x11\x78\xf5\xf7\x8f\x44\xf2\xea\xc7\x3b\x7e\x51\x0d\x63\x07\x60\x5d\xee\xe5\xb7\x3e\x1c\x4a\x24\x97\x2b\x8e\xd3\xff\xe8\x90\xab\x55\x14\xf3\xfc\xa5\x3e\x46\x46\xca\xdf\x3f\x12\xc9\xab\x77\xd2\x63\x9d\x5c\xfb\x79\x8b\xe3\x96\x54\xad\xdd\x2f\x3f\xfc\xc0\x91\x86\x17\x9b\x1f\x2c\xbf\x8b\xdf\xcc\xbf\xd3\x98\xfa\x80\x17\xeb\xef\x1f\x89\xe4\xd5\x73\x4b\x04\x64\x3c\x9b\x31\xbb\x3c\x64\x1d\xff\xda\xe4\x9d\x89\x70\x80\x95\xf5\x7b\x89\x2b\xe5\x1e\x06\x35\x3b\x57\x94\xb7\x72\xe9\xff\xfe\x91\x48\x5e\x3d\x0a\x31\x63\x2e\xa6\x6c\xe3\x20\x59\x91\xd9\xfb\x19\x72\x43\xe1\xbe\xa6\xcc\xc7\x92\x6f\x99\xcb\x28\x57\x3f\x5e\xf7\x9d\x66\x5b\xfb\xfb\x47\x22\x79\xf5\xbf\xf5\xb5\xe2\x14\x04\xe2\x5d\xc5\xd6\xf9\x51\xf3\x76\x7c\x7f\xdd\x7c\x93\xc7\xff\x67\xc4\x3d\xee\x80\x9a\x76\x79\xf3\x37\x3e\xd1\xdf\x3f\x12\xc9\xab\x0f\x7c\xac\x68\x34\x57\xa4\x62\xb4\x3f\x12\x77\x98\xa7\xa8\x62\xdf\xe0\x24\xf5\xae\xae\xe2\xca\x3b\xb1\xd1\x49\xda\xb8\xac\x20\xd4\xff\x66\x05\x0f\x1a\x8a\xc8\x73\xe1\xf4\x96\x6d\xad\x51\x6e\xd6\x15\x4e\xdd\x7e\x8d\x13\xc5\x45\x4f\x23\x86\x7d\x0f\x87\xcd\xed\xfa\x4f\x07\x9d\x3e\x33\xd1\x58\x92\x88\xff\x6b\x10\x07\xaf\x67\x87\x15\xd3\x2c\xb3\xf7\xe1\xa7\xcd\xe3\x44\xb9\x54\xe1\x0e\xfe\x5f\x6d\xf6\xf9\x24\x3e\xf5\x31\xc1\x38\xb9\xea\x61\x4e\x8c\xe5\x88\xb0\x20\x0e\x36\xbb\xdc\x8c\xea\xb7\xd9\xe1\xef\xfb\x64\xa5\x8c\xde\x33\x43\x62\x51\x33\x45\x65\x7a\xa3\x64\x54\xac\x51\x2a\x4b\xa9\xca\x4d\x27\x00\xba\x23\x01\xe2\x60\x73\x21\x9a\xf1\x20\x01\x8d\x00\xd7\x8f\x6f\x78\x57\x38\x96\x9f\xb3\x47\x8f\x3b\xd3\x7e\x4a\xf3\xcd\xe7\xb6\x4b\x39\x70\x36\xc3\x50\xa0\x43\x84\x05\x71\xde\xf7\xf1\xfe\x19\xf6\x4b\x1e\x91\xb1\x72\x8d\x8d\xef\x56\xd9\xd8\xfc\x35\x9e\x58\x0b\xf4\x11\xbe\x34\xd1\x8f\xed\x79\xb4\x1f\xfe\x28\xac\x54\x1b\x42\x77\x24\x40\x1c\xac\xe0\x54\xa9\x1d\xab\x75\xb5\x41\x53\x17\x0e\x77\xc4\x5a\x57\x7f\x90\x22\xbd\x4a\xe8\x8e\xaa\xa1\xd4\x31\x3e\xd9\xb4\x06\xa9\x78\x82\x2c\xc2\xab\x07\x71\xff\xcb\xcf\x20\x7a\x2e\xaf\x1e\xf4\x8f\x8b\xac\x2c\x91\x06\x36\x9b\xba\x2f\x44\x86\x04\x69\xd6\x41\x1b\x59\x62\x12\xed\x7d\x0f\xaa\x39\x88\xdf\x8f\xbf\x7b\xe4\x5f\x4c\xb5\x4f\xf0\x7f\x2b\x6d\x00\x07\x53\xd6\xdc\xa9\x27\x53\xdb\x27\xe1\x9d\x9e\x52\xa6\x96\x33\x79\x4c\x59\xe6\x20\xa5\x2e\x03\xe5\x5b\x47\x99\x51\xdc\x16\xa7\x8d\xb5\x5a\x88\xb0\x20\x0e\xa6\x2c\x53\xd6\xa2\xc5\x08\x13\x62\xce\x30\xea\x67\xea\x75\x5c\x9a\xe2\x01\xaa\xd2\x31\xf5\x17\xbf\x04\xfc\xce\x26\xe6\x3b\x70\x53\x9f\x41\x84\x05\x71\x30\x65\xf5\xcf\x5d\xee\xdd\x8b\xe6\xac\xf4\xad\x2e\x37\xb8\xf4\x81\x01\x8f\x37\x6b\xb0\xce\x6f\x9d\x8d\xdb\x9f\x44\x93\x92\xff\xc2\x04\x74\x37\x1f\xc4\xc1\x94\xb5\x3e\xfc\xb1\x51\x2a\xe4\x0e\xfb\xeb\xde\x6e\xc7\x15\x82\xcd\xd8\x63\x03\x67\x6e\xfa\x15\x23\xea\xe0\x69\x59\x0c\x52\xb4\x12\x3c\x44\x58\x10\x07\x53\x96\xfc\x70\xef\x19\x9b\x4c\xb5\x9f\x40\x51\xc8\x96\xab\x30\xed\x1a\x7b\x5b\x3c\xa6\xa1\x80\xd3\xf7\xc0\x9b\xdb\x52\x7b\x51\xba\x82\x88\x05\x3c\x88\x43\x94\xb3\x3b\x9f\x57\x0f\x9a\x59\x91\xa5\x55\x2e\xd4\xe0\xe9\x7a\x39\xfb\x52\x45\xc4\x85\x9f\xdf\x3a\x62\x59\x63\x0d\x99\xdb\x4a\x0d\x6f\x5b\xe2\x55\x72\xb5\x9f\x26\xd7\x42\xe5\x28\x40\x1c\x4c\x5a\x31\x18\x96\x2a\x14\xa3\x2b\xad\x6e\x6a\xa1\xa2\x52\xad\xf2\xa6\xeb\xde\x78\x96\x3f\xdc\x74\x67\xd4\x16\xb0\x42\x1a\x4f\x2f\xbe\x45\x84\x05\x71\x30\x69\xe5\x4e\x3f\x1c\x47\xfb\xd6\x5a\xe5\xff\x27\x78\x61\xcc\x53\x1e\x75\xb4\x4f\x5e\x73\xc8\x0b\xdf\x72\x9e\x6b\xf7\x20\x5d\xd7\x1a\x3a\x41\x0d\xe2\xe0\x0b\xf8\xd9\xfd\xa3\x8c\x68\x8a\x50\x59\x23\x8e\xce\xdc\x41\x31\xef\x9b\x2f\x7f\xda\xeb\x17\x5e\xc5\x2d\xfd\xa3\xec\xc9\xf3\xa5\x00\xda\x96\x06\x71\x30\x69\x6d\xf0\x05\xb3\x0d\x37\xff\xb8\x49\x49\x2b\x66\x62\x2f\xfc\xaa\xea\x0a\x1f\x9d\xe6\xac\x12\x8e\x45\xc8\xef\xef\x49\x32\x4f\xde\x97\x20\xc2\x82\x38\x98\xb4\x52\xf6\x94\x3b\xef\x6c\x44\xbc\x8c\xd3\x65\xe6\x78\xe7\x28\xe9\x80\x7b\x24\xf6\xd0\x32\x90\x86\x5b\x63\x6d\xcc\x21\x61\x4a\x46\x17\xca\xcf\x00\xe0\x10\xd2\x3a\x9f\x57\x0f\x5a\x41\x21\x4b\xeb\x72\x41\xa1\xf2\x69\x5e\x3d\x7e\xd4\xce\x05\xbe\x98\xbd\xe1\xac\x77\x74\x65\x28\x4c\x17\xc2\x5b\x4c\xfa\x53\x4d\xaf\x30\x08\x2d\x43\xbb\xf2\x00\x0e\x26\xad\x57\x04\xef\x7f\x60\x0f\x1a\xc7\x72\x68\x1d\xc4\xb3\xa5\x84\x49\xa5\x0e\x39\xf4\x8b\x7b\xd6\xec\xa9\xb7\x5b\xa4\xc8\x5f\x2d\x94\x45\x84\x05\x71\x30\x69\xed\x2a\x3f\xfd\xd9\x75\xf0\x7b\x4e\x44\x3d\x2d\xc7\x73\x7e\x69\x50\x4e\x54\x90\x5a\xe8\x4e\xea\xbe\xb7\xfb\xf0\xbb\x76\x23\xe1\x2e\xc8\xf9\x04\x70\x30\x69\x19\x4e\xb2\x93\x1f\x50\x92\x76\x05\x7a\x3c\x4a\x4c\xd3\x49\xc7\x78\x2e\x2f\x6a\xf0\xfe\x79\xe1\x3a\x7b\x94\x36\x01\x41\xe5\x6f\x28\xd7\x27\x88\x83\x49\x2b\xe2\x54\x7f\x65\x91\x23\x27\xc8\x04\x15\x45\x5f\x13\xa5\xa1\xd3\xe9\x16\xbb\xca\x5d\x76\x7a\x7d\x3c\xd2\xc4\xaa\x66\xc9\x38\xe8\x1c\x04\x88\x83\x49\xeb\x66\x5c\x0b\x31\x75\xf2\xd0\xf4\x4c\xf8\x6c\x5f\xcb\x95\xdd\x7b\xa7\xc2\xca\x1f\xea\x8c\x9e\xdf\x35\x2d\xbe\xac\xc9\x4d\xf7\x36\x12\x21\x2d\x10\x87\x90\xd6\xf9\xbc\x7a\xd0\x4a\x19\x59\x5a\x61\x0b\x5f\xe9\x29\xa8\x83\x36\xd8\x8b\x50\x29\x09\x49\xa8\xa4\xa8\x72\xc9\x97\x43\x6a\x6d\xd5\xf2\x42\xfb\xea\x93\x8e\xe3\xa0\x0c\xec\x20\x0e\x26\xad\xce\x37\x09\xe2\x2c\x7c\xc3\xf8\xc3\xf2\x96\x34\x18\x93\x15\x0b\x23\x9d\xbc\x53\x1f\x3f\x93\xcb\x2e\xec\x2e\x99\xdd\x92\x0d\x84\xf6\x60\x41\x1c\x4c\x5a\x4a\x9c\x7f\xa2\xc8\x48\x5e\xaa\x93\x56\xd7\xbf\x79\x92\xa6\xef\xe3\x7b\xa6\xdb\xe2\x39\x7f\x7b\x80\x98\x63\x2a\xe6\xb9\xa6\x5a\x18\x22\x2c\x88\x83\x49\x8b\x97\xaf\xd1\xe4\x3a\x71\xba\x3b\xd9\x0a\xd5\x87\xe8\x40\x9d\x90\xa0\x6a\x5d\x75\xa6\x4b\x5e\x33\xd7\xd2\xea\xf3\xc5\x4d\x43\xa1\xb4\x0f\x20\x0e\x26\xad\xc9\xf8\x8a\x24\xa1\x47\x18\x35\x0c\x6c\x99\xea\x95\xdb\x59\x24\x98\x0d\x25\xde\xa4\x3a\xf5\x36\x25\x99\xe5\xd3\xe1\x0d\xf4\xd0\x4d\x67\x10\x07\x93\x96\x64\x7f\x85\x6c\x50\xea\x9a\x5d\x3c\x31\x4f\xcb\xa1\x0f\xe3\xb4\x49\x82\x8b\xa5\xfb\xd9\xcc\x45\xdb\xba\xc9\xee\x23\xbc\x3d\xe8\xf0\x1a\x88\x43\x48\xeb\x7c\x5e\x3d\xe8\x8b\x08\x59\x5a\xf1\x03\xbc\xd2\xf9\x51\x57\x0e\x86\x55\x69\x0f\x6e\x69\x53\xcc\xf5\xd4\xdd\x53\x8c\xf1\x5e\x8c\x17\x96\xc5\xbf\xb4\x79\xe3\x01\x54\x38\x01\xc4\xc1\xa4\xf5\x36\x89\x26\xf8\x86\xe2\x8e\x10\x9b\xea\x85\x0a\xde\x11\x7c\x8b\xe4\x0f\x12\x55\xe4\x4c\x97\x1f\x89\x63\x87\x62\xc7\x61\xe9\x43\x67\x76\x40\x1c\x4c\x5a\x9d\xac\x99\x3b\x0c\x59\x6c\x9b\x2f\xa5\xe5\x09\xab\xb4\x06\xe8\x6d\xe5\x15\x1c\x2f\x3f\x2e\xe1\x79\xd0\x7c\x2b\xba\x7f\x58\x85\x1c\x52\x2c\x80\x83\x49\x8b\xb0\x57\xa9\x88\xf2\x52\x5f\x2c\x79\xaf\x80\xf5\x5d\x79\x52\xcb\x1f\xd6\x37\x09\x33\x0a\xac\x30\xdc\x57\x88\xbd\x37\x4a\x94\x77\x11\x61\x41\x1c\x4c\x5a\xf2\xef\x56\xc8\xea\x73\xc9\xc3\x1d\xb4\xec\xd2\x85\xc2\x7c\x57\xad\x8b\x57\xe6\xef\x18\xfe\x6a\x63\xbf\x7a\xaf\xae\xfc\xe6\x14\x11\x74\x13\x10\xc0\xc1\xa4\xb5\xaf\x2b\xe5\x82\xfd\xb0\x6c\x8c\xd8\x66\x89\x8d\xa7\xd3\xaa\xdf\x56\x43\xbc\x7d\xd0\x35\xfc\xd7\x30\xcb\x1d\xd2\xb4\xa8\xb6\x40\x84\xb4\x40\x1c\x42\x5a\xe7\xf3\xea\x41\x5f\xbe\xc8\xd2\x32\xc3\xd3\x19\x75\x19\x37\x91\x3d\x4c\x26\x25\xce\xb4\xce\xeb\x4b\x7a\xf6\xab\x79\x98\x98\xa2\xc3\x5b\x51\xde\x96\x76\xe2\x39\x74\xea\x1a\xc4\xc1\xa4\xd5\xfa\x8b\x26\x2c\x2b\xae\xd6\x5f\x6f\x75\xf3\x89\xd5\x8b\xb6\x5b\x3d\x76\x2e\xaa\xbf\xfb\x6b\xc4\x5e\xc8\x48\x51\x96\x56\xdd\x85\x0e\x30\x82\x38\x78\xb9\x17\xcd\xa3\xa8\xeb\x35\x22\x03\xc5\xcc\xe9\x9a\xf4\x2e\x8c\xa1\xfa\xcd\x86\xdf\xd7\xdf\x7e\x09\xc1\xf7\x7d\x66\x2b\xba\xdc\x0d\x9d\x87\x02\x71\x30\x69\x7d\xcd\xa5\x48\x76\xfb\x41\x7f\x1c\xa8\x27\x77\x59\x64\xb0\x95\xff\x4e\xc8\x7e\xb2\x9b\xbf\xc3\x9b\xc8\xbb\xb2\x1e\xf7\x88\xee\x05\x42\xa7\x38\x01\x1c\x4c\x5a\x73\xa2\x68\xe3\xb1\x7c\xcf\xc7\x49\x68\xc6\x73\x04\x73\xa2\x49\x57\x28\x70\x30\x8b\xa6\x4e\x30\x3f\x0a\x87\x74\x6b\xe2\x74\x43\x7d\x0b\xe2\x60\xd2\x32\x0a\x7d\x6f\x15\xc6\xb6\x44\x84\x9a\x9c\xf0\xd5\x28\xeb\x7e\x38\x8a\x15\x9f\x59\x99\x4d\x39\xe7\x18\xc1\x11\x2a\x6e\x5d\x4d\x22\x42\x5a\x20\x0e\x21\xad\xf3\x79\xf5\xa0\x1d\x0e\x64\x69\xbd\xe0\xdb\xbd\xa8\x96\x85\x61\xb7\x48\xb3\x8f\xfa\x2a\x0c\xfd\xba\x9a\xea\x14\xfe\x28\x21\xfd\xc3\x9f\x14\x1f\xaa\x54\x66\xbf\x41\x17\xa2\x41\x1c\x4c\x5a\x25\xaf\x8c\xad\x1e\x11\xaf\x45\xeb\xa3\x37\x2f\xba\x63\xd1\x1f\xad\x31\x36\x1c\x2c\x0a\x53\x89\xf6\xa6\xb5\x60\xb8\x38\xaa\x43\xbd\x0a\xe2\x60\xd2\xc2\xc4\x49\xe8\x5e\xd4\x79\xa7\x83\x53\xa0\x9f\x97\x11\xd1\x68\x1f\xa3\xd2\xda\x8c\xa3\x55\xd5\x51\xa3\xf3\xfc\xb2\x89\x01\x07\x74\x68\x05\xc4\xc1\xa4\x75\x8b\xf1\x83\xac\xd3\xd8\x18\x26\x2f\x91\x5c\xa8\xfa\xe9\x3a\x76\xdc\x1c\xf1\xf8\x8d\xfb\x43\xb8\xe2\x84\x57\x35\x72\x0d\xb8\xdd\x11\x61\x41\x1c\x4c\x5a\xc2\xf5\xb3\xaa\x46\x54\xb8\xec\x61\x85\x6d\x5c\xf1\xbe\xf7\xd6\x46\x71\xc2\x7f\xf4\x6f\xd1\x4a\xb6\xf5\x86\x61\xfd\x5e\xd9\x81\x3c\x0e\x10\x07\x93\x16\xba\xe7\xa5\xa7\xbf\x6e\x12\x29\x76\x61\x26\xb9\x0a\xad\x7e\x57\x2f\xf1\x35\x99\xf9\xad\x11\xd0\xf9\x7d\xc8\x78\x85\x3b\x17\xc7\x15\x21\x2d\x10\x87\x90\xd6\x39\xbd\x7a\xd0\x1e\xf6\xff\xbc\x7a\x51\x24\xaf\xde\x4b\xec\x95\xcb\xf5\x23\x65\xe7\x27\x65\x9a\x12\xd1\x84\xb8\xc7\x31\x22\x36\x8a\x5d\x81\xef\xc8\x6b\x3e\x68\xea\x3a\x46\xb8\xdd\xf8\xfb\x9d\x3e\x64\xaf\x3e\x24\x54\xd8\x23\xb0\xe8\x6e\x7d\x9a\xc4\x4b\xaf\xf6\xb5\x93\xbc\x4f\x97\x2f\x3a\x10\x7d\xde\x71\xae\xe0\xec\x9b\x7c\xb3\xef\xff\xdf\xec\xf4\x81\x1a\x86\x3c\xda\x18\x1f\xb4\x10\xd0\x5a\x88\x5a\x16\x72\xc4\xe0\x99\x90\x61\x8f\x8c\x0f\x32\x87\xd0\x59\x7d\x68\xac\x6f\xc1\x10\x8a\xd5\x8f\x87\xbe\x6e\x41\x1c\x6c\xb4\x05\x26\x7f\x91\xbe\x24\x8f\x7d\x7c\x31\x4d\xe8\xd9\x6c\x93\x70\xc0\xdb\x27\xa1\xbd\x1d\x07\xd2\x7e\xaa\x11\xec\x7d\x2a\x09\x83\xd0\xc9\x18\x10\x07\x1b\x6d\x78\x2d\xde\xce\x5d\x8b\x3b\x2a\x0a\xee\x8c\x2f\x0a\x6e\xcb\xb8\xf6\x46\x96\x97\x7b\x15\xab\xad\x4c\x04\xdf\xed\xac\xf8\x49\x85\x82\x08\x0b\xe2\x60\xa3\xed\xbb\x63\x7e\x95\xf1\x9d\x84\x39\x46\x7b\x59\xfa\x83\x51\x25\x81\x3e\x74\x11\xeb\x6f\x3a\x9c\xf9\xd7\xd0\xce\xee\x49\x5c\x7a\x49\x86\x08\x0b\xe2\x60\xa3\x8d\x9e\x89\x8b\xb0\xa5\xdc\xb6\x72\x4a\xc4\x9a\xb2\x0e\xfb\xc1\x55\xd3\x56\x36\xc1\x7b\x69\x1d\x33\x26\x4f\xb6\xa4\x0a\x28\xb0\xa0\x03\x37\x20\x0e\x36\xda\x32\x50\x6f\xbe\xc6\xd3\x96\x7e\x6e\xdb\x5a\x7e\xd0\xf6\xb5\xfa\x83\x99\x7a\x96\x65\x1c\x2b\x8b\x03\xf3\xfa\x4e\x69\xc8\xf5\x6a\x73\xc4\x68\x03\x71\x88\xd1\x76\x4e\xaf\x1e\x20\x60\x64\x69\x31\x6f\xfd\x62\x40\x4f\x53\x42\x9b\x53\xe9\x35\x38\xc1\xf4\xb2\xdb\x7e\x93\x99\x82\xa5\x75\x45\x95\x28\x56\xcd\xf8\x15\x69\x13\xf4\x75\x0b\xe2\xe0\xd7\x72\xf4\x0a\x42\x8a\xad\x19\x31\x43\x3b\x76\xe8\x85\x04\x76\x4e\xcd\xf5\x5e\x0b\x3c\xbe\xe7\xf9\xe8\x65\x24\x93\x42\xb4\x36\x75\x2c\x74\x2d\x07\xc0\xc1\xa4\x15\x67\x47\x18\x15\x2a\x93\xd6\xc5\x3a\xe0\xdb\xc5\x8c\xa3\xba\x27\x20\x85\x2e\xb3\x2d\x7a\x81\x25\xdb\xe2\xa3\x29\x59\xa3\x42\x38\x22\x2c\x88\x83\x49\xcb\x36\xe6\xc2\x7e\x2c\x91\x9e\x12\x81\x34\x9e\xdd\xfc\x4b\xce\x43\xb6\xda\x3b\xf6\x0e\x06\x01\x9d\x36\x6f\xae\xbf\xd0\xa2\xa1\x87\xfe\xc8\x41\x1c\x4c\x5a\x7f\x58\xf5\x97\x05\x4e\x86\x5f\x28\x7a\xfb\x64\x57\xc5\xd6\xc8\x30\x92\x4c\xe1\x7d\xc1\x3c\xd8\x43\xdf\xf0\x0e\x63\x68\x5e\x86\xf6\x63\x40\x1c\x4c\x5a\xe1\xfe\x26\x61\x8a\x26\xaf\x6c\xd1\x33\x5a\xc5\xa6\xaf\xfe\x2a\xc2\xbe\xe4\xc9\x91\x93\x97\x69\x7f\xfa\x8d\x87\x61\xb1\x5a\x27\x1f\x21\x2d\x10\x87\x90\xd6\xf9\xbc\x7a\x90\x2f\x8a\x2c\xad\xd7\xad\x0f\x7a\xda\x9d\x23\x6c\x4a\xa2\x5c\x09\x64\x24\xea\x05\x9f\x4b\x11\x11\xda\x9d\x3d\x7f\x64\xd9\xfd\xe0\x55\x7b\x94\x30\x54\x24\x05\xc4\xc1\xa4\xb5\xf8\x36\xe0\xd1\xde\x3d\x92\x55\x22\x55\xfd\x01\x14\x33\xec\xd0\x0a\x93\xae\x2e\xa1\xcc\xac\x9d\x33\xf1\xc3\xea\xb0\x59\x92\x10\x44\x58\x10\x07\xcf\xc3\xf1\x27\xed\xbb\xfa\x2d\xdd\xa4\xef\x5c\xac\x42\xb7\xc4\xa8\x45\xa9\xb9\x70\x18\xd9\x9c\xe8\x07\x97\xac\xf6\x9a\x0f\x2f\x59\x42\x7f\x86\x20\x0e\x26\xad\xfd\x96\x32\xde\xec\x80\xa6\xa1\xb1\xbb\x91\x1c\x6f\x7e\x15\x9b\x1c\xf1\x7c\x34\xbb\x1a\xca\x7d\xd1\xe3\x69\x32\x2e\xde\x4b\x52\xe8\xfe\x0c\x88\x83\x49\x4b\x20\xd8\x47\xbb\xb1\xba\x42\x93\x45\xa9\x3b\xdd\x33\x57\x6e\x4d\x6c\xba\xf0\x10\xcf\x6b\xf4\x96\x9a\x33\xd7\x8e\xd5\x23\x43\xa8\x70\x3a\x88\x83\x49\x4b\xcb\xea\x34\x9f\x6d\xb5\x41\x22\x7a\xee\xe8\x9e\xfb\xb3\xb0\xe3\x71\x9b\x89\xd4\x50\x71\x83\xad\xb2\x02\xdd\xfe\xef\x32\xf8\xc1\x08\xaf\x1e\xc4\xfd\x7f\x69\xfd\xc3\xab\xc7\xbe\xaa\x64\xc8\x3a\xb3\x6a\xa1\x9c\x6f\x44\xf3\xe6\xb6\xa1\x8f\xad\x24\xc7\x41\x85\x53\x89\x53\x82\x60\xbf\xdd\xa0\x91\x2c\xe3\x3f\xbd\xfa\x5a\xcb\xc4\x21\xce\xca\x18\xf5\x14\xff\x9f\xf8\x4d\x14\xc9\xf8\x59\xcd\x58\xc6\x17\x5d\x7e\x65\xb0\xd3\xd1\xb2\x8b\xdc\x8a\xf8\xf1\x0f\x54\xc7\xfb\x70\xc0\x45\xea\xb2\xb5\x4d\xf9\x52\xb5\xd9\x27\x1b\xbe\xa8\x8f\x2c\xf7\xeb\xaf\xed\x68\x29\xe9\x2f\xdf\xa3\x0f\xd0\xa9\x81\x79\xf5\xa0\xc8\xc8\x5e\x7d\xf0\xe8\xc7\xdc\x17\x49\x6f\x71\xbc\xf7\x74\x06\x76\x04\xdf\xde\x5c\xbf\x6c\x4a\x94\xce\x77\x3f\xad\x91\xea\x1e\x99\xc1\xe7\xf7\xff\x5c\x10\x88\x26\xed\x09\x10\x6a\x25\xb5\x5c\xc7\x66\xb1\x19\x6d\x4b\x89\xf1\xcc\x27\xc2\xb4\xd0\x39\xa1\x4e\x51\xca\xb3\x3a\xa0\xed\x6f\x84\xbc\x7a\x50\xcc\xff\x79\xf5\x1e\x70\xaf\x3e\xa8\x5f\xfa\xe0\xc7\x9f\x18\x9f\x64\xaf\xd3\x78\x2c\x5c\x4c\xd3\x94\x66\xbf\xf4\x33\x17\x0c\x7a\x94\x9c\xb2\x71\xdd\x33\xc3\xbf\x5d\x9c\xf8\x8b\x7b\x20\x79\xf5\xf8\xdd\x27\x2c\x77\x34\x6d\x5a\x8c\xee\x9c\xaa\x35\x3f\xff\xed\xe3\xf0\xa9\x79\xb3\x87\xb4\xa8\xff\x5b\x65\x81\x4d\xd1\x78\xe9\xdf\x1b\xe7\x1e\x48\x5e\x7d\xb4\xa8\x7b\xf2\x4d\x5f\xe1\x27\x9b\xbb\xd4\x6e\x4f\xea\x49\x6e\x57\xe7\xf4\x54\x5c\xbf\x70\x2d\x9b\xf7\x36\x0e\xcf\x3c\x76\xdd\xfc\xdf\x3f\x12\xc9\xab\x6f\x62\x88\x8e\xba\x7a\xab\x54\x87\x36\x2e\x8d\x73\xfb\x68\x6f\x03\x3f\x84\x93\xb0\x1f\x83\xbb\x6d\xa3\x7e\xf3\x97\xd6\xc3\x1b\x63\x7f\xff\x48\x24\xaf\xfe\x30\xa8\x6f\xda\xe9\xf4\x37\xf1\xb1\xb9\xde\x5a\xa5\x0a\x4b\x96\x37\x3f\x5a\xa9\x1e\xc9\x92\xd3\xd5\xde\x79\x4a\xad\xcf\x5d\x71\x7f\xff\x48\x24\xaf\x7e\x8d\x32\xcd\xfa\x91\x4c\x7a\x93\xb6\x76\xf1\xf6\x55\x8d\xd9\x81\x35\x32\x4d\xe2\xa3\xee\xb4\x8c\xea\x4b\xf7\x8e\x0b\x63\x3a\xfe\x3e\x47\x82\x07\x92\x57\x2f\xea\x84\xc9\x39\x57\xf7\xda\xb2\xed\x83\xb2\xcf\x1d\xbf\xc9\xfb\x85\x4d\x0f\xbc\x1e\xf8\x67\xb8\xb5\x25\x8f\xf7\xf0\x91\x7d\xab\xf9\xfb\x47\x22\x79\xf5\x1d\x1e\x26\xa2\x21\x7e\x3a\xd9\x7b\x81\x37\x86\xdb\x31\x1b\x5a\xd6\x6d\xee\x49\xdb\xbc\x2c\x0f\xfe\xc4\xbd\x4b\xd1\xd1\xb3\x63\xf9\xdf\xac\xe0\x41\x43\x11\x79\x2e\x6c\x27\x1f\xe2\xa6\x2d\x15\xe6\xbe\x78\x4f\x95\x38\x8d\x66\x96\xee\x87\xc7\xbb\xa6\x4d\x39\xe5\xc2\xcd\xbc\x70\x2c\x99\x2a\x92\x3e\xe8\x0a\x1d\x80\x83\xcd\x85\x68\xe4\x5e\xb3\x86\x23\x37\x3e\x51\xc4\x1d\x5c\x57\x4b\x5c\xf2\xd7\x57\xe0\x8a\x56\x78\xa0\xb3\xc1\x81\x6d\xa2\x51\x52\xd4\x00\x19\x49\x20\x0e\x36\x17\x1a\xb4\x97\x67\xb1\x75\x3d\xd1\xd1\xd4\xf4\x1a\x13\xcb\x5a\x38\x0e\x90\xe6\xb6\xb2\x0b\x5d\xd1\x3e\xba\xbc\x60\x51\x2c\xfd\xf2\x07\x22\x2c\x88\x83\xcd\x85\x95\xc2\xaf\x39\x69\x46\x63\xeb\xa7\x64\xdf\x85\x7c\xa5\x48\x36\x3f\xba\x19\x7e\xd7\xe8\x73\x88\x48\x47\x98\x0e\x2f\x55\x55\x25\x94\xe1\x07\xc4\xc1\xfa\xf6\x66\xc4\x54\xd2\xe0\x84\x73\x81\xf1\x15\x83\x9a\x17\x63\x6d\x3e\xfa\x2f\x2d\xb5\xfc\xaf\x94\x6e\x87\xb5\xf8\x13\x68\xc8\xb2\x41\x09\x7e\x41\x1c\x6c\x2e\x1c\xa7\x95\x61\xd1\xd1\x35\x48\x3f\x18\x4e\x5e\x95\xfc\xfa\x6a\xe0\x87\xb7\xdc\x83\x0b\x92\xc3\x12\x54\x5e\x11\x55\x3f\xcc\x63\x6b\x11\x5e\x3d\x88\xfb\xdf\xbd\x7a\x8f\x73\x79\xf5\xa0\x7f\xdc\x7f\xd9\x3f\x16\xe1\xee\x4d\xd9\x79\x1f\x19\x72\x9d\x4f\xdc\x5e\x9f\xda\x20\xb4\x75\x58\xff\xde\xed\x36\xee\x34\xfd\x86\xcd\x8e\x74\xae\x3d\x68\xff\x18\xc0\xc1\x94\x75\x0f\xdd\x5f\x43\x74\xe0\xca\x4b\xb1\x7a\x27\xe2\xd5\x08\x9d\x51\x17\xda\x90\x10\xaf\x1a\x47\x83\x5b\x5c\xd2\xc1\xed\xd2\x5f\x31\x11\x61\x41\x1c\x4c\x59\x58\xdb\xca\xe5\x8f\x09\xcf\xde\xc8\x3a\x5d\x7b\x11\xee\x2c\x3c\x4d\x17\x54\xe1\x6c\xa0\x10\x1d\x76\xdb\xfc\x8f\xf2\x93\xca\x19\xe8\xaa\x36\x88\x83\x29\xab\x4a\xe6\x4f\x5f\x46\xe9\x13\x73\xb9\xbb\x9b\x52\x07\x55\xd7\x14\xde\xca\x6e\xb9\xad\xbf\x3b\x15\xbf\x99\xa2\x14\x6c\xc2\x66\xff\x0c\x11\x16\xc4\xc1\xfa\x36\x8d\x2e\x98\x56\x6a\x4f\x02\x4f\x2c\x4c\x44\x2e\xed\x46\xba\xa1\xcc\xdb\x63\xc3\x51\xee\xa4\x62\x02\xb9\xd6\xb7\x16\xe5\x2b\xd0\xe7\x06\x88\x83\x29\xeb\x67\xad\xb8\xbf\x86\x7d\xbb\x9e\xa0\x5f\x6b\x90\xfc\x03\x3c\xfe\x5d\x26\x6b\xa7\x7a\x1e\x89\x0a\x5a\xee\xa6\xa0\xe3\x4e\xda\x16\xc4\x02\x1e\xc4\x21\xca\x90\x9d\xcf\xab\x07\xcd\xac\xff\x72\x21\x27\x3c\x23\x2d\x0e\x3d\x4b\x80\xee\xcf\x58\x63\xfc\x63\x47\x03\x2c\xe6\xdc\xf1\x47\x8c\xf3\x44\x01\x57\x88\xe5\xad\xe3\x3c\xa0\x32\x1d\x20\x0e\x26\xad\x4c\xad\xd8\x09\x74\xba\xd6\x33\x3d\x42\xd3\x16\xa1\x85\x13\x8f\x65\x5e\xaa\x86\x7c\x3c\x3a\x01\xfe\x67\x9e\xac\xd2\x4c\xa6\xd0\x3d\x1f\x10\x07\x93\xd6\x4f\xaa\x87\x7e\x53\x9f\x8a\xb9\xbe\x58\xaa\x33\xa6\xec\x78\x7f\x52\x62\x52\xee\x94\xef\x75\x31\xbb\x63\x91\xf9\xea\xe6\x74\x14\x54\xa6\x03\xc4\xc1\xa4\x65\x65\xe8\xb4\xcb\xf8\xcc\xaf\x32\xa3\x64\x6b\xb3\x32\x43\xe0\x7a\xf9\x78\xb3\xe3\xe0\x18\x91\xda\xb3\x71\xc9\xe9\xfd\xd9\x37\xd0\xb9\x25\x10\x07\xeb\x5b\x2a\xfb\xe6\x9f\xb5\x44\x85\x6c\x23\x2f\x86\xe2\x1b\x6b\xb5\x76\x2e\x97\x26\xa1\x58\xfa\xb3\xc5\x7d\x77\xed\x63\x57\xc1\x6d\x81\x6a\xb1\x81\x38\x98\xb4\xb8\x17\x7d\xb8\xef\xd3\x68\xee\x5c\xb4\xd1\x71\xf9\xe1\x82\xdb\x28\x6d\xfe\xab\x06\x43\xe3\xd4\x49\x77\x78\xea\xe6\xef\x38\xa3\x75\x84\xb4\x40\x1c\x42\x5a\xe7\xf3\xea\x41\x2b\x28\x64\x69\x15\xb1\xaa\xb0\xdd\x11\xfd\xfa\x36\xa8\x91\x45\xf5\x5d\x59\x52\x87\x57\x29\x95\xef\xc0\xa6\x2d\x76\xf5\x85\x9c\x34\xa9\xea\x97\xd0\x31\x10\x10\x07\x93\x96\x73\x96\xba\xc6\x81\xa9\x92\x02\x4f\x10\xae\x3f\x6d\xc9\x73\x96\x06\xe3\x46\x0c\x7e\x46\x6f\x14\xfe\x6b\xcf\x12\x46\xe5\x9f\x41\xae\x17\x88\x83\x49\x8b\xc0\xd1\x41\xaa\x79\x48\x31\xe5\xd4\x6c\x80\x59\x88\x5f\x1e\xfb\xfd\x4c\x74\x67\xe2\xd9\xca\x25\x1e\xc7\x2a\xa2\x6f\x9e\x86\x50\x11\x55\x10\x07\x93\x56\x13\x9d\x62\x6f\xa1\xb6\x35\x79\x65\x73\xca\xe5\x04\xaa\x4c\x9e\x6f\x9f\x7f\x66\x08\xcb\x3e\xa4\xd9\x5b\xc8\xab\x4a\xf9\xcc\x0f\x85\x05\x71\xb0\xbe\x6d\xb6\x36\xf3\xd6\x7b\xc0\x10\xaf\xf1\xb6\x4d\x39\xda\x4c\xdf\x6e\xf5\x6a\x4c\x49\xac\x4e\x43\xe2\xd0\xec\x43\x1a\x16\xa5\x42\x1f\x44\x58\x10\x07\x93\xd6\x48\xe7\xcd\x93\xaf\xfa\x77\xdd\xbc\x5b\xbe\xde\xb4\xac\xf5\x95\xb0\x12\x88\x57\x14\x49\xe4\xca\xd1\xa9\x24\x33\x0e\x2b\x3a\xf0\x46\x48\x0b\xc4\x21\xa4\x75\x3e\xaf\x1e\xb4\x52\x46\x96\x96\x20\xea\xb4\xb8\xb8\x35\xf9\xd5\x96\xc0\x3b\xbe\x5f\xdc\x51\x84\xff\x38\xd3\x67\xfc\x28\xe1\xcc\xb3\x9e\x67\xbf\xc6\x90\x4e\x56\x81\x68\x3e\x88\x83\x49\xeb\xea\xac\x0b\x73\x60\x22\x15\xa5\x8c\x85\x4b\x62\xf5\xe0\xcb\xf0\x40\xd4\xa9\xea\xef\x57\xbb\xd2\x86\x71\x9c\x71\xae\xfb\x99\x42\x59\x45\x41\x1c\x4c\x5a\xd5\x98\xba\x9a\x66\x12\x15\xf4\xa9\x13\xa1\xfe\x1c\x42\xe6\x1f\xbc\xed\x2b\x7b\x6e\x67\xf6\x77\xcb\xf0\xa0\xe7\x3c\x2a\x57\x67\x45\x84\x05\x71\x30\x69\x65\xf4\x71\x24\x71\xa1\xfc\xc6\x56\x9c\xce\xbe\x9c\xfa\x02\x6f\xf3\x73\x50\x64\xa0\xaf\xc2\xae\x7b\x99\xfc\xc3\x1b\x2f\xe2\x2b\xa0\xdb\x27\x20\x0e\xd6\xb7\x84\x44\xac\xdb\x05\xb2\xdf\x85\xd5\x0e\xd2\x1d\x87\x6e\xe6\x6c\x77\x4d\xc6\x3c\x6c\xfd\x91\xb1\x8c\x67\xe3\xc5\xf1\x28\xf3\x1a\xe4\xd5\x83\x38\x98\xb4\x4e\xaf\xba\x04\x3d\x5e\x0b\xf5\x7e\x97\x18\xf8\xce\x7f\xa7\xa1\x20\xe0\x63\xa3\x1a\x53\xa1\xc6\xed\xbd\x1b\x2d\x3d\xe1\x51\x87\xfb\x08\x69\x81\x38\x84\xb4\xce\xe7\xd5\x83\xbe\x88\x90\xa5\x85\xe2\xe4\x67\x37\x8e\x15\x1f\x3f\x75\x71\x32\xce\xe1\x83\xbb\x64\x6e\x42\xb2\x5e\xbd\xc9\x3b\x6d\x9a\xc1\x8d\x3e\xb3\x92\x96\x53\xe8\xee\x37\x80\x83\x49\x2b\x23\xfc\xd4\x59\x9b\xf8\x61\xb3\x59\x6a\x40\x59\x5b\xe3\x74\x19\x86\x4e\xe2\x09\xd9\x64\x43\xef\x65\x92\x44\x0b\xed\x32\x51\x28\x5f\x2f\x88\x83\x49\xeb\x6b\xf8\xca\x46\xa1\xe3\x08\x13\xb5\xbf\x19\xe6\x73\xbb\x5d\xdc\xc7\x5e\x06\x1c\x22\x3e\xd7\x37\xbf\x74\xf9\x38\x78\xb5\x1d\xf3\x41\xce\x27\x80\x83\x49\x2b\x2e\x29\x35\x50\x56\xaf\xb9\xbb\xd6\x78\x66\x3b\x81\x83\xd0\x7f\x20\x5c\x1a\x1d\xe5\x87\x64\x8f\x9b\x1f\x86\x1e\xef\xfd\x57\x50\xdd\x2a\x10\x07\xeb\xdb\x4f\x81\xc5\x0c\x86\x73\x17\xa5\xdc\xd7\xdf\x79\x74\x8f\xc6\x0d\x57\x7e\x30\xc6\x8d\x74\xba\x9f\xef\x61\x3e\xb0\xb1\xf9\x47\x15\xaa\xfc\x00\xe2\x60\xd2\xb2\x14\xef\x4f\xe1\xa0\xf0\xf7\x26\x0a\xfd\xdc\x1a\x75\xdf\xe7\xc1\x7b\x82\xb7\x9f\x97\x18\xd0\xfc\x69\x33\x3a\x5e\x9a\xfa\xbb\xdc\x86\xee\xcc\x01\x38\x84\xb4\xce\xe7\xd5\x83\xbe\x7c\x91\xa5\x35\x2b\x83\x55\xff\x62\xcc\xd7\xf2\xec\x52\xeb\x66\xaf\x2a\xff\x89\xc9\x19\xb6\x96\x56\x73\x83\xcb\xa7\x8f\x3b\xea\x9b\x2e\x6f\x9a\x10\xcd\x07\x71\x30\x69\xfd\x92\xc6\xc2\x5e\x5b\x3b\xb8\x7d\x58\x54\xc7\xb5\xd1\x78\x69\xee\x8d\xf7\x15\x1a\xab\x72\xe7\x83\x98\x8b\xb9\xf7\x54\x6f\x51\x41\xe7\x35\x40\x1c\xfc\xaa\xd0\x45\x35\xff\xb0\xc5\x26\x69\xa7\xcf\x28\x5c\xbd\xcb\x0d\xdd\x5b\xa8\x32\x97\xc4\x6d\x2e\x4e\xb6\xe5\x15\x39\xe2\x3a\x8d\xd9\x42\x57\x85\x00\x1c\x4c\x5a\xaf\xe2\x37\x6e\x33\x5d\x6f\x9d\x55\xf9\x29\x6b\x97\x47\x1e\x20\xef\x9a\xfe\x67\x10\xa5\x34\x56\xbc\xff\x68\x77\x8e\x5e\x46\x1f\xda\x83\x05\x71\xb0\xbe\x1d\x29\xad\xda\xb0\x6f\xa0\xae\x71\x27\xc7\x36\x62\xc4\x40\x4f\x71\x65\xad\x27\xbb\xf0\x3c\x9a\x48\x3e\x5f\xf3\x54\x4c\xad\x06\xda\x31\x06\x71\x30\x69\x4d\x16\x4b\xd4\xa5\x5b\x6e\x79\x7d\xc3\xf5\x45\xa3\x2f\xcc\x5e\xe5\x64\xba\xb9\x74\x99\xc6\xd8\x48\x7c\x3f\xa9\x4f\xb9\x05\x6b\x12\x21\x2d\x10\x87\x90\xd6\xf9\xbc\x7a\xd0\x0e\x07\xb2\xb4\x0e\x2b\x14\x37\x0b\x70\xc5\x3e\xaa\xaf\xb4\x59\xfd\x34\x92\x64\x7d\x18\xdd\x93\x78\x5f\x99\x23\x89\x9d\x0c\x23\x79\xfc\xca\x1c\x74\x96\x1d\xc4\xc1\xa4\x85\xf1\x5b\xed\xfd\x9f\xd3\xf7\x57\xa3\x65\xe8\x96\x4d\xd9\xfd\xb8\x7f\x2a\xd2\x08\xc8\x5c\xc6\x36\x65\xbe\xe4\xba\xfd\xfd\xf3\x59\x25\x74\xb9\x0d\xc0\xc1\xa4\xa5\xdd\x89\xfb\xe0\x4b\xc7\x28\x85\x50\x48\xc3\x3a\x89\xda\xc9\xe4\x04\x61\x51\xee\x1b\x33\x6f\x75\xcb\x2a\xb9\x79\xf9\x46\x45\x2b\x44\x58\x10\x07\xcf\x06\x42\x10\x29\xf6\xb0\x1f\x6b\x82\x72\x5c\xe5\xf2\x85\x3d\x06\xb5\x6c\x61\x95\x00\xa5\x8e\xe6\xbd\xbe\xe3\xfb\x67\x6f\xa7\xc5\x46\xa1\x93\x05\x00\x0e\xd6\xb7\xbf\x9d\x62\xb8\xf2\x4e\xd2\xbf\x36\x4f\xd2\x8b\xd5\x86\x2f\x1b\x64\x18\x5f\x66\xcf\x6a\x9d\x7a\x1f\x35\xc0\xa9\x74\x12\x95\x45\x88\x08\x0b\xe2\x60\xd2\xc2\x6f\xe6\x10\x61\x1a\x1a\x9a\xad\x2f\x96\xb5\xca\x98\xaf\xaf\x27\x93\x6d\xef\x7d\x32\x72\xe1\xbe\xf8\x66\xef\x16\x2d\xa5\xd0\x0e\x54\xa6\x03\xc0\x21\xa4\x75\x4e\xaf\x1e\xb4\x87\xfd\x3f\xaf\xde\x03\xc9\xab\x27\xf2\xef\x56\x7b\x58\x16\x2c\xd7\x97\xf7\xbc\xf9\x81\x81\xbb\xf1\x75\x9e\xcf\x0b\x33\xc1\x3d\xaa\x23\x69\x92\xa3\xaf\x5e\xed\x66\xfc\xfd\x4e\x1f\x92\x57\x3f\x93\xf4\x39\xa2\xfc\xf0\xcf\x6b\xa7\xbc\x69\xfe\xf4\x3d\x79\xed\x87\xdc\x02\xba\xb3\xe3\xd7\xe2\x6e\xef\x91\x29\x48\x27\xef\x7b\xfc\x37\x3b\x7d\xa0\x86\x21\x8f\x36\xd5\x12\xe1\x06\x05\x42\xe5\xbb\x02\x68\x4c\x4c\x57\x68\x06\xa9\x96\x56\x7e\xad\xc5\x06\xb8\x91\xb3\xa1\x17\x25\x76\xfc\x61\x85\x6e\x23\x80\x38\xd8\x68\x3b\xc0\xf4\x68\x5c\x11\xe2\xc0\xb3\x2c\x4f\x17\x43\xbd\xff\x48\x83\x8f\xaf\xdc\xcd\x26\x4f\xd0\x31\x74\xcc\xd5\xaa\xa9\x82\xd4\x0f\x11\x16\xc4\xc1\x46\xdb\x19\xf5\x4e\xce\x4c\xae\x44\x3e\x7e\x4e\xfc\xa6\xed\xe4\xa3\x42\xf4\x7d\x8b\x74\xdc\x7b\x0a\x14\xe4\xe2\x98\x14\x6f\x2f\xbe\x81\x3e\xf1\x41\x1c\x6c\xb4\x9d\x8a\x65\xe4\x74\x10\x1c\x08\xed\x7e\xb9\xab\x78\xb1\x57\xb6\x4e\x97\x7b\x35\xf1\x4c\xea\xc5\x0f\xbb\x59\xb2\x5b\x7e\x37\xf3\x8f\xa0\x6b\xba\x00\x0e\x5e\x72\x5f\xe1\x3b\xee\xe4\xb3\x89\x70\x8a\x40\x42\x47\x1f\x97\xe4\xd9\xdf\x55\x45\x8b\x61\x2e\x3b\x7d\x0c\x0a\x25\x6c\x1f\x79\xc3\xa0\xc5\x32\x88\x83\x8d\xb6\x4e\x5b\xf6\x13\xe6\xab\xf1\x1e\x61\xee\x76\x52\xef\x37\xe5\x62\xca\x53\xf8\x09\xe6\x26\xd4\xed\x38\x97\x8a\x93\x8e\x87\x5e\x40\xc9\xe8\x40\x1c\x62\xb4\x9d\xcf\xab\x07\x09\x18\x59\x5a\xe3\xa3\x62\xb3\x09\x77\xe7\xd8\x8c\x4f\x02\xd6\x0d\xcd\x97\x8c\x2a\xe9\x29\x35\x1f\xa1\x69\x77\xd3\xec\xbf\xb5\xd7\xf6\x24\x82\x4e\x47\x81\x38\x98\xb4\xb0\x27\xf2\x09\xda\x6b\x5b\xb5\x5d\xb3\x5a\x28\xdc\x9d\x2b\xbb\xe5\x9f\xf8\x4b\x85\x3c\xf8\xad\xef\xb5\xb1\x53\xc9\x9c\xcf\x96\x83\x08\x0b\xe2\x60\xd2\x7a\x5e\x3b\xf3\x73\xb7\xab\x97\xa4\xd3\x85\x5c\x0b\x53\x8d\x83\x64\x89\x3d\x45\x28\xe1\x96\x2f\x59\x7f\x74\x39\xfe\xe6\xc8\x36\x94\xee\x14\xc4\xc1\xa4\x65\x84\xdf\x36\xe2\xd5\x65\xdf\xdd\x68\x1a\xb6\xa5\x31\xf9\x3e\x86\x4e\xeb\x9b\x95\x08\xdb\x05\x12\x8a\x07\xe9\x94\xe6\xb7\x4d\xa1\x55\x2d\x88\x83\x67\xf6\xef\x49\x65\xea\x9c\x12\x9f\x3b\xb8\x7a\xaf\x30\x67\x92\x1f\x3f\x81\xff\xeb\xcf\xb5\xd7\x17\x26\xb2\x3f\x0d\x3b\xa7\x0e\x55\x42\x69\xd3\x40\x1c\x4c\x5a\x87\xc4\x02\xf4\x6f\x0f\x9a\x59\x45\x4c\xcc\x7c\x0a\x79\x8a\xb6\xd5\x38\x66\x32\xc8\x03\x46\xad\xfd\xee\x46\x4b\x6e\xdf\x7f\xd5\x8b\x90\x16\x88\x43\x48\xeb\x7c\x5e\x3d\xc8\x17\x45\x96\x96\xf5\x9d\xd7\x85\x82\x22\x64\x47\xda\x2d\x2a\xe4\x39\xcf\xef\xa5\x95\x46\x16\x7a\x92\x5c\xb4\xb3\xed\xa5\x23\x6d\x27\xd5\x58\x5c\x45\x34\x1f\xc4\xc1\xa4\xd5\x92\x4d\x2f\x16\xe1\xc9\x29\x65\xe7\xa0\xe5\xf7\x58\x12\x13\x47\xe4\xea\x76\x8d\xb3\x54\x52\xa8\xfa\x63\x76\x89\x21\x53\x0d\x28\xad\x13\x88\x83\x49\xeb\xa8\x3d\x5c\x55\xe2\xa2\xee\xc3\xad\xd5\xb0\x11\xc5\xab\xce\x0b\xd4\xb4\x91\x83\x05\x57\x59\x88\xa7\x1e\xcc\x5d\xb9\x3d\x51\xfc\x04\x11\x16\xc4\xc1\xcb\xa6\x5a\x0f\xc7\x1f\x06\xe1\x2f\xca\x48\x17\x61\xdf\x8e\x31\x70\x16\x49\x90\x7b\xa4\xfd\x11\xc7\x7c\x4d\xd3\x9a\x66\x02\x45\xed\x25\x22\x2c\x88\x83\xf5\x2d\xa9\x67\x82\x95\xb0\x7d\xac\xa5\xe4\x97\xb2\x60\x63\xa2\x8d\x3c\xe7\x27\xa9\x3e\xb2\xfd\xc6\xce\x69\x3c\xb4\x17\x2e\xdd\xbf\x75\x11\x11\x16\xc4\xc1\xa4\x05\xbc\x57\x8f\xb0\xbd\xf1\x0f\x18\x8f\xa6\x4d\x24\xdf\x15\x52\x10\x2d\x75\xa5\x36\x8d\x89\xa8\x5f\xf5\xfc\xa1\x9d\xa6\x76\x63\x60\x44\xce\x2a\x3f\x85\xe7\x9f\xe6\x3b\xf6\xbd\x8f\x7d\x5e\x96\x76\xcd\x7b\x0f\xf8\x99\x8d\x1c\xaa\xaf\xf4\xad\xeb\xfa\x09\x4d\x71\xdd\xdc\x7f\x51\xc2\x52\x51\x8a\x39\xf5\x0f\xd4\xc4\x01\x3f\x21\xd1\x8d\x5b\xe5\x49\xea\x8d\x2f\x9e\x3e\x8b\x2b\xfa\xd1\x7e\x2b\x56\x16\xc1\xa4\x7b\xcf\x2c\xee\x1c\xb2\x76\x34\xc3\xcc\x77\x50\x64\x64\xf3\xdd\xc0\x42\xe9\x27\xf9\x60\xbb\x84\xbe\xe4\xb3\x0e\x5f\xe6\x53\x8c\x1d\x8f\xe7\x41\xf9\x03\x8f\x2d\x0a\x73\x98\xf6\xf3\x17\x67\xcc\xfe\x81\xb6\x15\x25\x6f\xb8\xa6\x97\x11\xd4\xad\xad\xe3\x8f\xbd\x4e\x4c\xea\xa2\xbc\x6d\x34\xa7\x91\x4b\x11\x20\x93\x53\x1a\x99\x51\x94\x05\x99\xef\xa0\x98\xff\x33\xdf\x1b\xe1\xe6\x3b\x9a\x94\xfa\x57\x76\xa6\x2d\x87\xfb\x6f\x54\x59\xd4\x37\x72\x1d\xbd\x1b\x45\xec\x89\xcb\x23\xdb\x43\x5d\xf8\x50\x0b\xf2\x04\x78\xff\x7a\x81\xd3\x88\x64\xbe\x2f\x7f\x1d\x0d\x2f\xb4\xaa\xa4\x29\xb9\xf0\x80\x93\x76\xc6\xcc\xc1\xcf\x5b\xdb\x6d\xc6\xda\x10\xd7\x40\xa1\xe1\x2e\x2d\x6b\xba\xf1\xdf\x3f\x12\xc9\x7c\x97\x6b\xdd\x58\x45\xdd\x6f\xed\x35\x70\x10\x31\x62\xeb\x25\xc8\xb8\x48\x8b\xa1\x5f\x42\x70\x66\xb9\x46\x3f\x3f\x84\x2d\xd4\xc5\xfd\xf7\x8f\x44\x32\xdf\xcb\xe7\x92\xa7\x2a\x23\x08\xcc\x86\x79\xa4\x34\x99\xb0\xe9\x73\x6a\x05\x19\x3e\x53\xd6\x5e\x47\x11\xc9\x7d\x12\x60\x1d\xe3\xb1\xf3\xf7\x8f\x44\x32\xdf\x6f\xeb\x73\x52\x84\x29\x9d\xc6\x12\xfb\xe6\x3f\x73\x09\x61\x40\x21\xba\x4f\x7a\x83\xd2\xf2\xee\x17\xf3\xb8\x93\xbb\x94\x77\x97\x44\xfe\xfe\x91\x48\xe6\xfb\xf2\x02\xcd\x74\x77\x6a\x87\xb9\x75\xc6\x08\x81\x1c\x83\xb5\xf0\x2f\x37\x2c\x9c\x7d\xa2\x4b\x2a\xb1\x1a\x3c\x0f\x2a\x96\x7b\x67\xff\xfe\x91\x48\xe6\xfb\x56\x9d\x09\xbf\x36\xbd\x21\x59\x96\xc1\xd5\x41\xfc\x94\xa2\x38\x1c\xfe\x5b\x91\x7f\x8e\xd5\xf6\x02\x9e\xea\xf3\xce\xa1\xb4\xbd\xfe\xfb\x47\x22\x99\xef\x13\x5f\x09\xbe\x96\x1b\x7f\x54\xa1\x3e\xab\xed\x66\x0c\x76\x13\x29\xa7\xbf\xca\x96\x43\x5e\xd3\x72\x25\xe3\x43\xb7\x0f\x93\x7d\xd6\x7f\xb3\x24\x07\x0d\x45\xe4\xc9\x2d\xd3\x94\x05\xb7\x35\xd1\x90\x71\xe3\x08\xdd\x58\x5f\x5e\xa5\xe8\xbb\x31\x3f\xb3\xa8\x79\x62\x45\x61\x4e\x5a\x82\x79\x0b\x9e\x3d\x64\x38\x01\x38\xd8\xe4\xf6\x80\xcb\xba\xef\x2e\x57\x3a\x9e\x3d\xd5\x33\xa9\xbd\x1e\xba\x46\x72\x0d\xce\x47\xd5\xab\x39\x5a\xf4\x65\xdc\x63\x66\x47\x26\x90\xf3\x0a\xe2\x60\x93\xdb\x70\x93\x99\xd7\x2c\x37\x8b\x8f\xdb\x70\xdf\xa5\x14\xa7\xd2\x0b\xac\xb1\xda\x22\xf5\xc3\xa5\xd7\xcf\x82\xea\x8f\x1a\xa2\x9e\x61\x21\xc2\x82\x38\xd8\xe4\x86\xba\x31\xab\x15\x4a\xe1\xdf\xb2\x6c\xfe\x44\x9c\xae\xe8\x5e\xbf\xcc\xfd\x91\xee\xef\x5f\x75\x8a\x8b\xba\x4b\x05\xf4\x1a\xd5\xee\x21\xc2\x82\x38\x58\xdf\x0e\x34\xb2\x46\x12\xc4\x72\x3e\xb7\xbb\x1b\x43\xdc\xfd\x0b\xfd\xfe\x72\xaa\x60\xf3\x48\x34\x5f\x11\xb7\xb2\xce\x9b\x18\xc6\x48\x1e\x28\x83\x16\x80\x83\x97\x97\xfd\xde\x59\xce\x98\x6d\x41\xc2\xaf\xd0\x8e\xf3\xb1\x3f\x31\xa1\xb3\x29\xf0\x63\xa0\x64\xbd\xb4\xb2\x47\xf8\xbb\x2b\xb9\xa9\x35\x08\xf3\x1d\xc4\xfd\xef\xa2\x7c\xe3\xb9\xcc\x77\xd0\x3f\x2e\xb2\xb2\x72\xb7\x19\xeb\x04\xfc\xbc\xda\x4e\x85\x9e\xc5\xfc\x6e\x9c\x90\x5a\xb9\xfd\x3b\x7e\x38\x2d\x31\xfc\xc2\x05\xc7\x47\xb4\xda\x77\x5e\x40\xf7\x83\x01\x1c\xac\xf5\x75\x86\x8e\x0f\x3d\x31\xd9\xc2\x6b\x23\x4f\x51\x23\x2f\x17\x73\xe2\x3f\x17\x4b\x26\x74\x7b\xc8\x1f\x68\xf8\x72\xcc\xb6\xa4\x1c\x3a\x38\x0a\xe2\xe0\x99\xae\xa8\x92\x9a\xc3\xa3\x5c\x53\xf2\xed\xea\xd7\x63\x5e\xa0\x85\xc7\xb6\xbe\x49\xa9\xdc\x54\xd2\x2e\xd7\xd4\x96\x3b\xa4\x7f\xb8\x04\x65\xba\x02\x70\x30\x65\xdd\x90\xbd\x38\x8a\xbe\xc8\xad\xf4\x8c\x1e\x23\xe5\x90\xd6\x91\x64\xa3\xcc\x53\xb2\x5f\x9f\x7e\xdc\xa6\x24\x85\x56\xc2\x82\x3d\x1b\x11\x16\xc4\xc1\xfa\xf6\xe0\x62\xdd\x03\x73\xf5\x6b\x89\xd1\x26\x8c\x91\x6c\xa1\x94\xad\xd7\x3d\xbf\x9f\x0e\xab\x9e\x92\xaf\x38\x49\x26\xd1\x93\x97\x6d\x41\x5f\xbc\x00\x0e\xd6\xb7\x0b\x72\x8c\xe9\x19\x3d\x9a\x98\xc9\xdf\x03\x32\xc8\x37\x1c\xad\xdf\xa6\x5f\x78\x74\x3c\x3b\x5a\xea\xa1\xf2\xed\xe9\x8f\xf2\xaf\x7c\x88\x15\x39\x88\x43\xd4\x83\x3a\x9f\xf9\x0e\x9a\x59\x91\xa5\xc5\xd2\xb7\xfd\x85\x2b\x2f\x60\xdf\xda\x24\xe9\xbb\x36\xe5\x25\x77\x15\x35\xf6\xeb\x96\x8c\xed\x0b\xde\x37\x78\x22\x3a\xee\x66\x93\x20\x9a\x0f\xe2\x60\xcd\x0f\x66\x92\x37\x5e\x89\xe7\x0a\x67\xee\xe7\x2c\x0f\xed\x25\x58\x0c\xcd\x93\xd2\x09\xb5\xb3\xd1\x31\xd1\x95\x0a\xe4\x31\x55\x87\xaa\xd8\x81\x38\x98\xb4\x74\x9f\x9a\xe7\xf3\xad\xbc\x16\x18\x20\x5c\x7b\x6d\x9f\xb5\xef\xaa\xc2\x95\x38\xa0\x71\xb3\x5b\xf4\x1b\xd6\x52\xe7\xc4\x32\x31\x74\x9b\x19\xc4\xc1\xa4\x95\x80\x3e\xe3\xb7\x2b\x38\x7f\x4d\xd7\x97\xbe\x83\xc7\xca\xdb\xbe\xc9\x5f\x7f\x98\x5b\x34\xf7\x10\xa3\x88\xa0\x45\xf3\x85\x1a\x74\x38\x1f\xc4\xc1\xfa\x16\x4d\x6f\x37\x06\xb5\x64\x92\xf1\xa1\xb6\x7c\xef\x5c\xec\xd2\x1b\x3f\xef\x6e\xe6\x33\xd3\x5c\x8e\x97\x5a\x6b\xe4\x6e\xcc\x34\xdb\xd0\xb1\x29\x00\x07\xcf\x34\xca\xf8\xd4\xd5\xc6\x8e\xd4\xae\xa6\x35\x9c\xa1\x78\x67\x64\xdd\xe6\x5d\xf6\x9b\x27\xf8\x97\x12\xeb\xb3\xf1\xed\x6e\xb9\x5d\x4e\x41\x48\x0b\xc4\x21\xa4\x75\x3e\xf3\x1d\xb4\x82\xfa\x97\xba\xcd\xbb\xaf\x88\xbc\x3a\xef\x67\x89\xc8\xb3\x1b\x56\xeb\x95\xd0\xd6\x60\xdf\x9d\x13\x8a\xa4\x21\x13\xe5\xf6\xb7\xee\x51\x0d\x62\x80\x3c\x47\x00\x07\x6b\xbe\x72\x2d\x9b\xa5\x0d\xcf\x43\x93\x3f\x37\x34\xf2\x33\x03\x71\xc5\x50\x24\xbc\xdf\xdf\xb4\x7d\x93\x96\x3b\xe4\x7e\x3c\x7a\xc4\x0e\xf5\x2a\x88\x83\x49\x8b\x78\xb5\x76\x78\xeb\x17\x85\x23\xce\x59\x15\x07\x9f\x2a\xa5\xeb\xcf\x00\xc6\x0f\x57\xd1\xaf\x3f\x7b\x3b\x4e\x37\xc6\xa6\x51\x09\x9d\xeb\x00\x71\x30\x69\x75\xa0\xe6\x7e\x4f\x66\xc4\xa2\x99\x37\x22\x3e\xe8\x53\x35\xf0\x29\x9d\x0c\x29\x10\x42\x49\xc5\xb7\xa1\x3e\x5a\xf0\xf7\x64\x38\x44\x84\x05\x71\xb0\xbe\x55\x8b\x57\x38\xe2\x1f\x18\x7b\x97\x63\xb8\x13\x11\xfa\x36\x31\xde\x74\x9d\x93\x8f\xc7\x60\xf1\x92\xbd\xb1\x72\xdd\x95\x2b\xb2\xd7\x11\x61\x41\x1c\xac\x6f\x05\x0b\xb8\x5d\x27\xb1\x1c\xd7\x89\xbd\x3c\x4d\x99\x0d\x34\x28\x3c\xee\xe2\xd0\xe9\xf7\x9d\x5c\x39\x46\xe9\x53\x41\xc1\xca\xa1\x41\x48\x0b\xc4\x21\xa4\x75\x3e\xf3\x1d\xb4\x52\x46\x96\x16\x6f\xd6\x0a\xee\x67\x96\xc5\xa4\xee\xce\xfb\x18\xbc\x0f\xdf\xf7\x04\x4b\x5b\xe5\x74\x36\x10\x1d\x76\xad\x0e\x7b\xc7\x7d\x2b\x90\x81\xee\x88\x03\x38\x58\xf3\x57\x97\xad\x07\x04\xa2\x8a\x99\xa9\xf5\x0e\x5e\xb1\x5f\x7d\x5d\xdf\x59\x7b\x94\xac\x3f\xc3\x92\xe6\xa1\x53\x53\xd3\xf8\xf9\xb6\x20\x22\x2c\x88\x83\xe7\xe7\xa3\x27\xfd\xf3\xab\x68\x4c\xab\x54\xec\xd6\xb0\xf8\xd1\xfe\xe2\x24\x16\xdd\xfb\x8a\xbc\xc5\x01\x0b\x0d\x96\x89\xc3\x57\xab\x50\x22\x3d\x10\x07\x93\x16\x4d\x3d\xfb\x8c\x98\xb8\x96\x74\x8c\xf4\xa9\xcc\xcc\x2e\x5d\xee\xc4\xe5\x28\x4f\xaa\xb0\x47\x49\xbc\x28\x84\x6e\x29\x4c\x5b\xa6\x88\xb0\x20\x0e\x7e\xae\xc3\x56\xdd\x90\x6a\x80\xdc\x91\x57\xba\x8d\x9d\xdc\xdb\x35\xc8\x11\x8f\x26\x92\x1a\x43\x39\x3b\x3f\x5b\x02\x8f\xb7\x31\x12\xea\x04\x10\x07\xbf\x29\x5e\x48\xcf\x66\x6b\x3a\x86\x7d\x34\x6f\xe5\x6f\xfa\x18\x2d\xee\xb4\x22\x3b\x95\x3f\xad\xd0\x5f\xfa\xf5\x4a\x8b\xf2\xde\x71\x1b\x42\x5a\x20\x0e\x21\xad\xf3\x99\xef\xa0\x2f\x22\x64\x69\x59\x2e\xef\xd7\x52\x76\x45\xb6\xfc\x68\xba\xa6\x6e\x3d\x50\x19\xad\xe7\xd2\xf7\xc6\x34\xde\x38\xcd\x3e\x87\x6f\x77\x49\xfa\x90\x14\xd1\x7c\x10\x07\x6b\x7e\xd0\xd9\xdb\xc4\xf4\xa4\xa1\x7d\x7b\x9c\xc7\x9d\x8e\xd9\x16\x35\x77\xa3\xee\x60\x8b\xcc\xd2\xf5\x7f\xd0\xe1\x28\xc9\x62\x93\x78\x88\x08\x0b\xe2\x60\xd2\x3a\xed\x91\x29\xb8\xfe\x7e\xf7\x67\x4b\x3b\xba\xad\xe2\xc8\x23\xc5\xf8\x86\xe4\x87\x3c\xbc\x8f\x9b\x14\x5e\x54\x8a\x68\x75\x3e\x1a\x83\x76\xc0\x01\x1c\x4c\x5a\xe4\xc5\xf6\x4d\x9c\xdf\x48\xbe\x60\x7e\xe7\x89\xbe\xef\x83\xda\x3f\xbd\x24\x98\xf4\xb6\x3b\x1a\xc3\xdb\x6c\x83\x71\x91\xa0\x7f\x08\x11\x16\xc4\xc1\xfa\xd6\x7f\x3a\x1d\xf7\x05\x35\xc1\x06\x5e\xf4\x02\xe5\x83\x48\xcb\x2f\x92\xfa\x39\xdf\xec\x28\xf2\xeb\x1f\x47\xa1\x49\x6f\xae\x1f\x41\x1b\xeb\x20\x0e\xd6\xb7\xd2\x25\x18\xfc\xc6\x3f\xb2\x3c\x57\x06\x9e\xe1\xc8\xfb\x9a\xce\x4a\x0f\x51\x3a\xd4\xbb\x5d\x42\xbd\xcf\xf5\xba\x01\xb3\x5b\x2b\x16\x21\x2d\x10\x87\x90\xd6\xf9\xcc\x77\xd0\x97\x2f\xb2\xb4\x88\xe6\xf7\x66\xe3\x99\x82\x1e\x48\x46\x3d\x5d\xf9\xb2\xad\xc1\xff\xa5\xfc\xb1\x5d\x49\x0b\x99\x50\x6d\x58\x86\x9e\xc8\x31\xee\x14\xa2\xf9\x20\x0e\xd6\xfc\x78\xda\xa1\x2f\xbf\xd6\xfc\x7f\x91\xdf\x9c\xa7\xa9\xe1\xa4\xa6\x32\x33\x3d\xa1\xfe\x6d\x9d\x91\xe1\xb6\x37\x2d\xb6\x41\xf6\x14\x2a\xc7\x02\xe2\xe0\xb5\x37\x7f\x85\x97\x0c\x3b\xce\xf5\x16\xc5\x60\xeb\x37\x31\xa2\x79\xb9\x5b\x8f\x06\xd7\xb7\x7e\x6f\xf4\xbe\xaa\x67\x11\xba\xf0\x3d\x09\x11\x16\xc4\xc1\xa4\x75\x65\xe4\x98\xa5\x42\xbf\xe2\x82\xf7\x5e\x3e\xd9\xfc\xc0\xaa\x95\xc3\x22\x19\x67\x49\xfc\x9e\xee\xfd\xba\xa7\xf6\xe6\xd4\x9f\xa1\x2b\xdd\x20\x0e\xd6\xb7\x17\xef\xa9\x7b\xf1\xe8\x6f\xae\x3f\x4c\x10\xfa\xb1\xfa\x58\xaa\x9a\x3c\x62\x67\x65\xe8\xb6\x56\x73\x0f\xd9\xc8\x97\xdb\x59\xd5\x50\x52\x7b\x10\x07\xeb\xdb\xa8\xc5\x31\x91\x56\xd1\xa9\x40\x9e\x46\x9e\xa3\xb9\x2a\xcf\x39\xf9\x65\x7e\x69\xe5\x60\x52\xd7\xe6\x3d\xdd\x47\x6f\xe8\xde\x10\x21\xa4\x05\xe2\x10\xd2\x3a\x9f\xf9\x0e\xda\xe1\xf8\x97\x84\xb5\xb4\x1f\x50\x9f\xb0\x69\x29\xfa\xb6\xfb\x85\x26\x5d\x2b\xbe\xd4\x42\xdd\x5c\x7f\x78\x44\xa7\xff\x26\x53\xbc\xf5\x9d\xac\x22\x54\xc3\x1f\xc4\xc1\x9a\xff\x65\x58\xf2\x5b\x7a\x37\xe7\x6d\xb2\x55\xd1\xec\x4f\x7a\x19\xb2\x62\x7f\x2a\xcd\x04\x5f\xf2\x62\x26\x88\x3e\xbf\x41\x98\xe7\x01\xed\x29\x83\x38\xf8\xf1\x6c\x34\x6f\xa1\x6f\x49\x6f\xe8\x99\x5d\x34\x37\xd6\xa4\x86\x8d\x6a\xc3\x43\x2f\xcf\xdc\xb3\xb7\x6a\xae\x61\xc9\xfe\x33\x62\xfc\x7f\xc7\xb3\x01\x1c\xfc\xc8\xd0\x2a\xe9\xaa\xaf\x67\xcb\xcd\x8a\x6f\x51\x2d\x39\x8f\x53\x4f\x8e\x16\x47\x48\xdf\x3f\x96\x52\x5f\x30\x53\x8c\x37\xf0\x9d\x94\x80\x8e\x0c\x01\x38\x58\xdf\xd2\x36\xf7\x47\x9d\x08\xaa\x98\xa4\xf4\x51\xd1\x6c\xae\x05\x4e\x48\x8d\x3c\x91\xb4\xc6\xdf\x3d\xfe\x6c\x3a\x45\x15\x3e\x8d\x0b\xa5\xcf\x01\x71\xb0\xbe\x2d\xc6\x28\x55\x5f\xb6\x31\x37\xf8\x5c\xd6\x49\x41\xff\x55\x4b\x7c\x26\xed\xfd\xf5\x1b\x16\x3f\x3e\x77\x77\x9f\x8a\x77\x7f\x2b\x25\x46\x48\x0b\xc4\x21\xa4\x75\x4e\xf3\x1d\xb4\x87\xfd\x3f\xf3\xbd\x11\xc9\x7c\x27\xf9\xe3\x9b\x69\xd0\xdf\xfe\x62\x27\x43\x7a\xe7\x70\x8f\xa5\x78\x84\xcd\x77\xe6\x54\xca\x9b\xb8\xce\xbe\x36\x8b\x22\x2b\xe9\xdb\xdf\xef\xf4\x21\x99\xef\x7c\xcf\xb1\x96\xb1\x2e\xf0\xee\xe4\xfa\x5b\x5c\xcc\xc5\xb3\xb7\x48\x4a\x7f\xc3\xe4\x3f\x52\xdb\x29\xdd\x23\xd3\x7f\x37\xb9\xf8\xf2\x7f\xb3\xd3\x07\x6a\x18\xf2\x68\xdb\xf9\x3a\x81\x93\x6d\x49\xf7\x58\x6f\xa4\x6e\x88\x33\xa1\x70\x30\xeb\x8e\x60\xfe\xdb\xaf\x95\xc6\x1b\x9d\x7f\x5e\x5b\x4c\x8f\xc7\x21\x14\x01\xe2\x60\x8a\x70\x25\xe4\x12\x3d\x43\xc3\x68\x5b\x30\x64\x2e\xcf\xff\xa4\xfa\x75\xd3\xae\xc8\x8f\xb6\x7f\xdb\x61\xbe\x92\x3d\x94\x32\x4d\x54\x18\xba\x1b\x0a\xe0\xe0\x3b\x7d\x9f\x55\x53\xaa\xdb\x2d\x5f\x9d\xd1\xac\x7c\x35\x41\x99\xd1\x9b\x10\x0b\xe9\xca\x32\x76\xa5\x4e\x1d\xbd\x91\xf8\xe5\xa8\x71\x02\xda\xe9\x03\x70\xb0\xd1\x16\x69\x5c\x27\x3a\x63\xba\x49\xe0\x60\x1c\xfa\x4b\x58\x40\x42\xa5\x28\x47\x60\xe6\x49\x3f\x33\xd7\x32\x3e\x97\xd3\x1a\x21\x2b\x54\x15\x13\xc4\xc1\xfa\x96\xf5\x26\xe9\x96\x6e\x09\xd5\xc8\xe5\xec\x1b\xa3\x2d\xfb\xa2\x2e\xe6\xa9\xa1\xdf\xb4\x7e\x73\xc8\xf7\x31\x11\x5e\x19\x3d\x18\x76\x45\x84\x05\x71\xb0\xbe\x15\x92\xc1\xad\x17\xa2\xbd\x19\xc3\x73\xec\xea\xc8\x6d\x53\x64\x35\x79\xc5\xf2\xc0\xeb\x05\x23\x8e\x0e\xde\x87\x12\x41\x37\x71\x11\xc4\x68\x03\x71\x88\xd1\x76\x3e\xf3\x1d\x24\x60\x64\x69\xb5\xe2\x86\x5d\x74\xbf\xfd\xfa\xf1\x97\x86\xe5\xf5\x56\x17\x89\xa7\x89\xc4\x05\x6f\x23\x0a\x06\x27\xe8\x5a\x0a\xfc\x13\x02\x92\xe2\xa1\xac\x37\x00\x0e\xd6\xfc\x6d\xf7\x3d\x7b\xe2\x61\xfd\x0b\x13\x76\xf3\x31\xe8\x2f\xb9\x58\xbe\x6c\x79\xe3\x4e\xbf\xf4\xa3\x4c\x94\xda\xf7\x91\xfd\xd6\x78\x17\x11\x16\xc4\xc1\xa4\x45\xa1\x7e\xc7\x56\x37\x75\xaf\xf9\xfd\xfa\x52\x49\xcb\x60\x89\x72\x2e\x5a\xc2\x4c\x45\x2e\xbe\xd5\xb5\x6c\x72\xb6\xfb\x0f\x06\xa1\x5c\x5d\x20\x0e\x26\xad\x1c\x0a\x12\x39\xe9\xe6\xbb\x5f\x64\x0b\x27\x07\xf7\xf3\xa4\xcc\xb4\x93\x71\x0c\x19\xa8\xce\x96\x2f\xbd\x76\xca\xf4\xed\xea\x83\xaa\x80\x81\x38\x78\x29\xb4\x66\x0f\xdf\xe6\xa2\xe2\x57\xb7\x78\x79\xe4\x29\xa5\xb4\x2c\x0a\xc2\x9d\x4f\x7f\x64\x9a\x10\xd8\x14\xef\x5e\xd2\x27\x77\xa1\x87\x8c\x57\x00\x07\xeb\xdb\x61\xd2\xd6\x1f\x1c\x95\x7c\xbf\x32\x6e\xbd\x7a\x95\xa3\x64\x5a\x58\xa3\xa0\x77\xfb\xea\xcc\x13\xd5\x00\xdc\x1f\x8d\x56\xd7\xbc\x9c\x11\xd2\x02\x71\x08\x69\x9d\xcf\x7c\x07\xf9\xa2\xff\x52\x64\x70\x27\x22\x48\x36\x70\x41\x4d\x8e\x86\x36\xd9\x5d\x4b\x73\x4b\xeb\xe9\xbc\x2a\xde\x75\xf4\x22\x35\x8a\x8c\x77\x8e\xef\x1d\xa1\x52\x32\x20\x0e\xd6\xfc\x93\x16\xb3\x11\x69\xd3\xc1\xb5\x36\xb1\x8f\x16\x02\xcb\xa9\x97\xe6\xf7\xa5\x18\x29\xf5\xdc\x6d\x7f\x2a\xd6\xa1\xe5\x8c\x94\x43\xbd\x0a\xe2\x60\xd2\xe2\xc3\x71\xcf\x75\xd5\x92\x51\x48\x70\x17\xa4\x1a\x7e\x6b\x35\xa4\x6e\x2b\xfb\x80\x2d\x45\xa4\x71\x1f\xa5\x73\x7c\x91\xc7\x11\x4a\x58\x06\xe2\xe0\xa5\x51\x7f\x44\xd2\xbd\x9e\xb4\x21\xa5\x48\xfd\x2c\xbe\x17\x86\x73\xcf\xfa\xec\xdb\x9a\x77\x7d\x70\x2f\xff\xa6\xf2\x07\x9a\x96\x27\x50\xf6\x46\x10\x07\xeb\xdb\xd4\xc9\x86\x6d\x12\x29\xc5\x29\xf4\x62\x54\x9f\x31\x5b\xa5\x84\xc8\x9f\x44\x7b\x99\xbc\xdb\x9d\x11\xbe\xc3\x13\xac\xdc\xa4\xd0\x8a\x06\xc4\xc1\xfa\x16\x78\x51\x1e\x61\x7b\xfb\x6e\x8f\x6a\xcb\x12\xa9\x12\xec\x31\xbd\x7d\x76\x05\x7b\xef\x43\xef\x8d\x57\xa1\xb1\xc5\x05\xd2\x5e\x57\x06\xfe\xa0\x32\xc4\x0b\xff\xd3\x7c\x0f\x7e\x72\x5d\x11\x4d\x7a\xa8\xb3\xbf\x2d\x6a\xb3\xd9\xe3\x92\xe3\x25\xd6\x95\xc5\x57\x2e\x5d\xfa\x24\x06\x74\xbb\xef\xbf\x10\xfe\xf3\x8a\xee\xc3\xa0\x2f\xec\xd5\xd9\x9f\x33\xd6\xed\x62\x51\x0f\x12\x0b\xa2\xaf\x52\xa7\xac\x8a\xcb\x35\x7c\xfc\xfd\x23\x0a\xb5\xee\x4f\x71\x0b\xcc\x7c\x07\x45\x46\x36\xdf\x9d\x08\x06\xa3\x8e\xcc\xd9\x19\xee\xf4\xd1\x2f\x61\x4f\x5b\x64\xbd\x62\x6f\x7d\x30\x45\xe7\x6b\x3b\xc1\x24\x82\x52\xe9\xca\x64\xf3\x0f\x34\x90\xc9\x23\x2b\x86\xd5\x93\xde\x37\x98\x3f\xab\xcc\x24\xeb\xb6\x5a\xdf\xd2\x36\x46\xcb\xcf\x56\x8a\x5d\x8a\x25\x3e\x9b\x7a\x27\xc8\x7c\x07\xc5\x44\x54\x94\x97\x86\xad\x36\x08\xd4\x74\xa5\xd4\x68\x6e\x7b\x86\x52\x65\xd8\x3e\x20\x5b\x0f\xf8\x5d\x5d\x41\xf6\xcd\xfd\x38\xfc\x8f\x62\xfc\xcc\x23\x6e\x1d\xc2\xbf\x5e\xe0\xa0\x70\xc3\x17\x38\xcf\x3f\x68\x1e\xb4\xe8\x84\x0a\xd3\xdc\x3c\x24\xa8\x64\x96\xa6\xa2\x10\x8b\x18\x5c\x9e\x78\x3a\xe7\x4e\x2f\xf7\xd3\xe5\x76\xa8\xcc\xdf\x3f\x52\x19\xfe\xc8\xac\x8a\x9a\x81\x7b\x94\x62\x68\xb3\xd1\x7e\xd2\x65\x91\x2b\x7f\x4c\xe4\xee\xad\x38\xa5\xaf\xc8\xfa\x0d\xef\xdc\x46\x31\x64\xec\xfe\xfb\x47\xea\xc0\x1f\x39\x76\xa8\xe3\x11\x15\x1a\x31\x1e\x8c\x2f\xcf\x74\x80\xd6\x3f\x28\x8b\xc2\x7e\x99\x35\xbd\x44\xf7\xeb\x82\x2f\x41\xf0\xc4\xd5\xbf\x37\xdf\x51\x1c\x91\x2e\xdb\x37\x1e\xfc\xa6\x13\xf7\x36\x18\xc0\x6d\x27\x76\x38\x89\x15\xe1\x4f\xd0\x20\xe2\x74\x9a\x17\x8e\xff\xec\x36\x46\xe7\xf3\x41\xf0\xef\x1f\x19\x09\x7f\x64\x5b\x0e\xe5\xfb\xd3\x4f\x66\x5c\x54\xd6\xed\x17\xff\x18\x04\xbb\xec\xa8\xf6\x6a\x26\x32\x7e\x2b\x54\x1a\x72\xd6\x9e\x14\xef\x6d\xf8\xfb\x47\x16\xc1\x1f\x69\xdd\x10\x29\x32\xf7\x38\xe5\x21\xc9\x69\x24\xae\xdf\xfb\x05\x4e\xd1\xc5\x00\x89\x0a\x4e\x74\x22\x0a\x95\x06\xbc\x32\x4d\xec\x8f\x7f\xff\xc8\x3a\xa4\x8e\xdd\x8a\x32\x7f\xcd\x12\xc3\x22\x48\x20\x44\xf1\xd4\xd2\x31\xcd\xad\xac\xaf\x68\x55\xd5\xad\x3b\xd5\x73\x00\x5f\x2c\x08\x77\xf8\xbf\x59\x92\x83\x86\x22\xf2\xe4\xb6\xff\x71\x0c\x3d\xc1\xf7\xcd\x8b\x1b\x0f\x3f\x47\xbc\xed\xdc\xd0\x5c\x21\xf6\x78\x7a\x87\x08\x6f\x5e\x20\xd1\x76\xf6\xea\xbd\x36\x1d\x28\x01\x0a\x80\x83\xfd\x01\x9b\x6c\xc7\xe1\xf5\x78\x1d\x67\x97\x69\x48\xea\xd7\xf5\x92\x5b\x10\xd9\x60\x84\xf9\xf4\x10\x2f\xdb\x16\x19\xc4\xf9\xa3\x04\xa8\x21\xc2\x82\x38\xd8\xe4\xf6\xc3\xaf\xb5\xcf\xdf\x36\x99\xc8\x58\xf4\xe0\xa9\x68\x6c\xd2\xd9\x4f\xb9\x3f\x3f\xe4\x33\xf4\xa9\xdf\xe0\xeb\xa6\xb8\xf9\xce\x40\x77\x53\x41\x1c\x7c\xdd\xf4\xfa\xbe\x84\x3d\xeb\x92\x96\x3d\x9a\x51\xa5\x04\xe1\x88\x93\x53\x5c\x9e\x4d\x47\xc5\x9b\x72\xe2\xf0\x54\x97\xd7\xc9\xb1\xd1\xd0\xba\x09\xc0\xc1\xc2\x3e\x5a\x4e\x9b\xd3\xf4\x53\x24\xdc\xb0\x23\x30\x2a\xcf\xd5\xff\xba\x97\xbf\x1d\xf2\x08\x9f\x7d\x3a\x18\x7b\x55\x0d\x4b\xf4\x83\x09\x22\x2c\x88\x83\x5f\xd0\xdd\x75\xb5\xe3\xe3\x96\xca\x27\x7c\x84\xba\x9c\x55\x52\xfb\x71\xa3\xe2\x4e\xb8\xe3\xca\xde\x0a\xcb\x80\x21\x67\x76\x2b\xe6\x35\x84\xf9\x0e\xe2\x10\x15\xe5\xa5\xcf\xb3\x6c\x02\xfd\xe3\x22\x2b\xeb\xdb\xf0\x93\xf6\xcd\xef\x2f\x14\xfe\x24\x94\xbd\xf2\xd0\x8e\xd6\x29\x9e\x59\x3b\x91\xee\x68\x5e\x6e\x6b\xb3\xeb\xde\xe7\xc4\xf9\x84\x68\x3d\x88\x83\xb5\x3e\x6c\x30\xde\xfc\x14\x33\xfd\x92\x82\x14\xcb\x71\x34\xae\xad\x4e\x76\x5f\xb4\x4d\xdd\xae\x60\xc9\x40\x6b\x1f\x03\x46\x35\x46\x2d\x22\x2c\x88\x83\x29\x8b\xad\xd4\xb3\x2d\x2b\xb2\x6e\x11\x23\x55\x7e\x67\x69\x5f\xbe\xba\xd4\xf0\x93\xf2\x3d\x8a\xa7\x58\x09\x95\xc1\x5d\xaf\x8e\x89\xa1\xdd\x7b\x10\x07\x93\xc0\x7d\xc3\x80\xac\xca\xc1\xeb\x47\xb5\xbf\xb4\xdd\x5e\x39\xfc\x0a\xbc\x9d\xb5\x96\xbb\x36\x91\x97\x21\xa0\x4c\x23\xec\x49\xcd\x02\x25\x59\x02\x71\xb0\xb0\xbf\xf4\xd2\x17\xa9\xdc\x9a\x8f\x86\xca\x47\xe2\xeb\x49\xaf\xb9\x6a\x2f\x97\x0d\xa0\x63\xdd\x4a\x3f\x2c\xbf\x7f\xb0\x40\x53\x87\x0e\xdd\x1b\x02\x70\xb0\xbe\x3d\xb4\x98\x46\x79\x8a\x1e\xa2\x8b\x92\x3f\xb6\xd1\x3d\x69\xb9\x3f\x88\x1b\xb7\x8c\x26\xda\x73\x61\x34\xce\x81\x6e\x34\x52\xda\x06\x3a\x0e\x0b\xe0\x10\x65\xa6\xb8\xcf\xb5\x22\x07\xcd\xac\xff\xb2\x22\x57\x72\x61\x4c\xae\xbe\xf9\x7b\x7a\xa4\xfd\x22\xe3\xb5\x41\xd6\x0f\xe9\x67\x3c\xe6\x41\x9a\x16\xc5\xbc\xba\x64\x3d\x0d\x26\xd0\x1d\x37\x10\x07\x6b\xbe\xce\x22\xc7\xcb\x31\x86\xe3\x16\x67\x9f\x3d\x11\x1a\xac\xdb\xfa\x38\x9c\x77\x8b\x4c\x6e\xaa\x4e\x9d\xe9\xd5\xb2\x53\xb5\x1f\x42\xd5\x8e\x41\x1c\x4c\x5a\x0a\x7e\x5b\x05\x5c\x69\xfd\x84\x98\x0b\xc2\x65\x0b\x5e\x97\x5e\xb9\x60\x63\xbf\xce\x6e\xfb\x13\x72\xb3\x3b\xe0\x46\xc3\x40\x0b\x74\x8f\x18\xc4\xc1\x34\xd0\x39\x52\xb1\x85\xbb\x6d\xd2\x2d\xe4\xac\xcf\x6d\xf5\x6e\x38\xd5\xf3\xd3\x3a\x1b\xfd\xf7\xa3\xb9\x83\x58\xbb\xe5\x9a\x0f\xbf\xa1\x2a\x76\x20\x0e\x16\x96\x6c\xfb\x58\x94\xff\x37\x07\xc6\xc7\x45\xef\xea\x31\xab\xe3\x57\x05\x9a\xc2\x13\x15\x05\xba\xbc\x57\x6e\xc7\x3a\x9e\x29\xbd\x81\x56\xe4\x20\x0e\xd6\xb7\x11\x9f\x78\x24\x37\xcf\xea\x82\xdf\xf6\x77\x5f\xf2\xf7\xaf\xca\xbf\x53\x3f\xf4\xa6\x44\x85\xfc\x3a\xaf\xb1\x2f\xa1\xc2\x25\x76\x2d\x84\xb4\x40\x1c\x42\x5a\xca\xe7\x92\x16\x68\x05\x85\x2c\x2d\x79\xb5\x35\x13\xfc\xe0\x74\x75\x79\x16\xa2\xa5\x9b\xda\x17\x17\x92\xcd\x33\x03\x25\xbc\x18\x37\x94\x50\xaa\x32\x2b\x8e\x1f\x41\x5f\x65\x20\x0e\xd6\x7c\xfb\x16\xf2\x0f\x82\xb3\xfe\xce\xf1\x9f\x5a\x3d\x8a\x7f\x57\xc9\x3d\xcd\x22\xd5\x46\x9b\x2c\x77\x4d\x36\x6f\xc2\x71\xad\x34\x82\x76\xbe\x40\x1c\x4c\x5a\x8f\x1f\xe9\xe6\xa8\xb8\x0c\x4e\xb2\x1d\x96\xe6\xe5\xab\xf4\xe7\xb5\xdb\xb3\x52\x79\x3e\x5d\xd3\xdd\x88\xc2\xb8\xda\xfb\x69\x7b\x01\x11\x16\xc4\xc1\x0f\xf1\x13\x96\xcd\xa0\x52\xc7\x33\xb0\x77\x7d\x91\xfe\xc5\x3e\xe8\xc5\x16\x90\x54\x6a\xb3\xb5\xdd\xc1\xc0\x83\xba\xe5\x6d\x87\x79\x01\x3a\xc4\x0f\xe0\x60\x61\x99\x32\x38\xfb\x64\x8e\xe5\x23\x4b\xbf\x45\x9d\x8a\xbe\xed\x98\xbe\x4b\xbf\xe9\x2b\xd8\x43\x2a\x37\x2e\x3a\xa5\x33\xaa\x10\x0d\x1d\x9d\x03\x71\xb0\xbe\x2d\x5d\x9c\x4e\xe0\xd0\xe9\xa0\x08\x32\x75\xce\xde\x2c\xed\x65\x15\xf8\x34\xf5\x75\xa1\xfd\x69\x06\x71\xae\xdc\x87\x1c\xf4\x48\x6b\x84\xb4\x40\x1c\x42\x5a\x3a\xe7\x4b\xaa\x00\x58\x29\x23\x4b\x2b\xcb\x45\x63\xc1\xb4\x1a\xa5\x8a\x2a\x49\xd5\x87\xb7\x19\x85\xff\xe3\xf3\x4d\x77\x3a\x8d\xab\x6b\xd3\xbc\xa1\x55\x42\x8e\x99\xd0\x5c\x00\xe2\x60\xcd\xbf\x6d\xfa\x70\xe6\x0e\xc9\xf0\xbc\x08\x13\xf3\x82\x72\x61\x1c\x09\xae\x55\x77\xe2\x0a\xa9\x9c\x0a\x43\x54\x89\xcc\xf2\x87\x5e\x67\x44\x58\x10\x07\x93\x16\xe9\xc9\x27\x67\xa6\xaa\x2c\x8e\x4a\xfa\x6c\xfd\x27\x22\xfe\x55\xf9\x6d\x37\xf8\x27\x65\x4e\x6a\x7d\xea\xd7\xc9\x17\x4e\x37\xa0\x4a\xa1\x20\x0e\xa6\x81\xc2\x4f\x49\x63\x5f\x66\x7c\xc4\x7e\x0e\x3f\x61\x7f\xe8\xfd\x7c\x57\x4d\xf9\x45\x16\x05\x66\x5b\xcf\x9b\x3d\x1d\x14\x8a\xc5\x65\x28\x97\x23\x88\x83\x85\xdd\x31\x7d\x79\xdd\xfe\x6a\xcf\xb7\x93\x97\x9f\xd2\xf7\x85\x08\x3a\x16\x68\xfb\x84\xee\xa8\x6d\x8a\xec\x98\xe3\x4d\x5c\xd9\x16\x7d\x0e\xed\x2c\x03\x38\x58\xdf\x9a\x91\x1b\x77\x99\x75\x5d\x90\x52\x2c\xe4\x33\xfe\xdc\x2a\xfd\x9e\xc5\x8a\x62\x8e\xaf\x08\x95\xa6\x61\x63\xa8\xf7\xcf\x23\x74\x28\x15\x0c\x88\x43\x48\xcb\xf1\x5c\xd2\x02\x7d\x11\xfd\xcb\x69\xb4\xc2\xc4\x48\x8f\xbd\x6d\x3a\x23\x6c\x79\xc5\xc7\x22\xb5\x11\xf7\xc9\x8b\x75\xdc\x58\x82\x30\x56\xc8\xd9\xce\x62\x02\xfe\xa8\x40\xa7\xd1\x00\x1c\xac\xf9\xec\x11\x8a\xfb\x39\x2e\x44\xec\x8f\xa3\x58\x97\xb5\xd5\x7f\x9f\x78\xb1\x2b\x18\xc8\x09\x7e\x60\x5a\xaf\x51\x7c\x50\xaa\x6f\x46\x85\x08\x0b\xe2\x60\xd2\x5a\xb0\x11\x35\x6f\xd9\x3e\x35\xc7\xab\xd6\x69\xd0\x0f\x4e\xf9\x15\xcb\x10\xcd\xa4\xa3\xbc\x19\x4f\xa1\xa7\xe1\x46\xec\xf8\x16\x3a\x3a\x08\xe2\x60\x1a\x18\x53\xe1\xb0\xff\x68\x99\xb8\x75\x74\xf9\xc0\xa0\x37\xf4\xc4\x83\x7b\x6f\xb3\x82\xcb\x94\xff\x4b\xe5\xe4\xef\xc5\x5b\x4d\x12\xd0\x25\x19\x10\x07\x0b\xcb\xf2\xc5\x7b\x97\xaf\x27\x41\xa9\x93\xc2\x86\xec\xed\xec\xfa\xec\xd8\x96\x8f\x76\x1f\x07\xe9\x0c\xcf\xe7\xef\xfc\x05\x68\xff\x97\xd0\x12\xc4\xc1\xfa\xb6\xcb\xcc\xe6\xc1\xea\xb0\x9e\xef\xc3\x77\xc9\x29\x5a\x26\x31\xb4\x2d\x37\xf2\xb9\x7f\x61\x69\x86\x64\x76\x6c\x44\xd9\xef\x61\xdd\x45\x48\x0b\xc4\x21\xa4\x15\x79\x2e\x69\x81\xbe\x7c\x91\xa5\x75\x44\xc5\x59\xdb\x69\xa2\x14\xdb\x24\x23\x1f\xdf\xae\xcc\xd6\x3d\x1e\x2d\x83\xfe\x55\xc5\x8c\x56\x67\xe3\x64\xdb\x6e\x88\x44\x0a\xba\xcc\x03\xe0\x60\xcd\x7f\x26\xa8\x45\xa5\xd3\xff\xbb\x5c\xd2\x3a\xfc\x2d\x95\xa1\x82\xb4\xac\x4c\xca\x86\x92\x58\x8d\xcf\x8d\x18\xc2\x7b\x85\x47\x86\x50\x02\x2b\x10\x07\x93\x96\xa6\xa6\xc0\x8a\x89\x49\x92\xfc\xeb\x05\xd1\xcc\xba\x02\x87\xc8\xb6\xd1\xa4\xd1\xa9\x5e\xb4\x86\x2d\x7b\x67\x6d\xf2\x2b\x46\xd0\x3d\x62\x10\x07\xd3\x80\x7e\xbf\x53\xeb\x3d\xad\x15\x1b\x23\xa3\xa9\xf7\x45\x8c\x32\x4d\x6d\x9e\xeb\xdf\x4b\x25\x8e\xac\x1c\x53\x89\x28\x1d\x98\x5d\xeb\x11\x61\x41\x1c\xbc\x9a\x38\x11\xd5\xe5\x90\xd9\xf5\x5f\xa8\x92\x59\xd3\x43\xd4\xba\xaa\x03\xc5\x9c\xb6\x42\x87\x0f\x55\xaa\x2b\xc3\x3e\xaf\xd1\x56\x40\xf5\x8d\x41\x1c\xac\x6f\xfb\xc6\xaf\x15\xb2\xc4\xc6\x54\x86\x08\x2b\x57\xbd\x75\xbd\xf6\x25\xef\xe9\xf3\x0d\x63\xa5\xcb\x3b\x38\x5d\x5d\xda\x55\x9d\x42\x07\x08\x69\x81\x38\x84\xb4\x8a\xce\x37\x21\x02\x76\x38\x90\xa5\x25\x47\xfe\x5e\x5c\xea\x43\xe5\x8f\xa7\x17\x8a\x7c\x0d\xd4\x78\xb7\x74\xe9\x6c\x06\x5f\x4f\xe9\x78\x8d\x3b\x4b\xcd\xfb\xd7\x2f\x43\xe7\xbb\x40\x1c\xac\xf9\x96\x17\xeb\xc9\x59\x51\xcc\x86\x86\xe9\xc3\xf6\xcd\x5e\x3c\xe9\x50\xbe\x79\x7f\x6c\xc5\xc8\x1a\xd5\x71\xdf\x56\xeb\xbe\x48\x27\x74\xab\x0d\xc4\xc1\xa4\xd5\xdf\xfb\xd5\x95\x21\x60\xa4\xe4\x16\x71\xb2\x45\x4c\x19\x37\x6a\x6c\xf2\xa2\x3d\xe1\xe5\x13\xb6\xe9\xab\x03\xca\x1f\x51\xc9\x21\xcf\x06\xc4\xc1\x34\xf0\x29\x7b\x05\xfb\x93\xa7\xdd\x57\x76\xb1\xd3\x9f\xee\x05\x59\xfe\x14\x18\x33\x0e\x58\xde\x0e\x71\x03\xef\x5a\x31\x3f\x28\x54\x41\xb5\x6d\x41\x1c\x2c\xac\xc3\x0a\x43\x65\xf0\x25\x2a\xd2\xc7\x75\x2f\x2b\x0a\x2c\xbd\xa8\x0d\x56\xfb\x1f\x86\xfc\x26\xfe\x86\x36\xf7\xa0\x7e\xec\x71\xc8\x0a\x22\x2c\x88\x83\xf5\x2d\x3a\xde\x16\x79\xa2\x69\x70\xf3\xb0\x09\x8d\x9e\x47\x30\x6f\xe6\x9e\x8a\x80\x63\x0e\x63\xbe\x6b\x6a\xd1\x9b\x04\xf3\x34\x5a\x74\x28\x4b\x3d\x80\x43\x48\xab\xee\x7c\xe6\x3b\x68\x0f\x1b\x51\x51\x7e\x04\xbe\xed\xc6\xbf\x6c\x13\x1c\x11\x6f\x93\x2e\x64\x36\x7c\xa4\x24\xdd\xb5\x20\xf5\x7b\x81\x6a\xc8\x37\x03\xf7\xfe\x27\xe2\x27\xf1\xdb\xe1\xa4\x7f\xbf\xd3\xb7\x0b\x7f\xe4\xf1\x4d\x06\x54\xfb\xb1\x07\xab\x29\x6e\xa1\xab\x2d\x97\xc5\x03\x4e\x52\xc4\xeb\x5c\xee\x72\x31\xab\xbb\xab\xbf\xca\x6a\x1d\xb5\xfa\x6f\x76\xfa\x40\x0d\x43\x1e\x6d\x2a\x45\xef\x9b\x30\x14\xaf\x17\x69\xf0\x3d\x21\x1a\x33\x54\x23\x97\x39\x6e\x9a\x26\x9a\xc6\x5a\x14\x4f\xac\x44\x41\x97\x30\x87\x8a\xb8\x80\x38\x98\x22\x92\xde\xf2\xf6\x8a\xdb\xe8\x05\xb1\xab\x87\xa1\x0a\x26\x3c\x8b\xea\x4d\x9e\xa1\xaf\x93\x11\xa8\x4e\xef\x64\xf4\x8e\xaf\xde\x82\x2a\x3c\x82\x38\xd8\x68\x33\xb7\x29\xac\x10\xbc\xdc\x10\xf0\x38\xee\x0e\x46\x2f\xbe\xe9\xa7\xd6\x84\xc7\xb1\xdf\xe9\x74\x25\xed\x7e\x45\x88\xeb\xfd\x16\x87\x72\xea\x83\x38\xd8\xb0\x28\x08\xb2\xc3\xa2\x21\xf7\x8d\x59\x97\x09\x92\xfa\x2a\xca\xa8\x70\x64\xe3\x10\xf3\x22\x49\x8c\x75\xdc\xc0\xe1\x99\xd9\xa0\x63\x2e\x22\x2c\x88\x83\x85\xbd\x80\x23\x34\x74\xd2\x23\xd0\x4a\xee\x91\xe1\x78\x13\xe7\xe4\x5d\x00\xa5\x15\xfd\xbc\x40\xd7\x07\x6a\x03\x96\x77\x17\xcc\x70\xa1\xd4\x99\x20\x0e\xd6\xb7\x1a\xe9\x4b\x63\x21\xfd\x15\x8b\xb1\x0b\xf3\x3f\x35\xc3\x48\xef\xd0\x10\xe4\xa8\xa3\x59\xbc\x14\x78\x6f\xfa\x8b\xcd\x82\xd5\x3c\x04\x31\xda\x40\x1c\x62\xb4\x8d\x9c\xeb\x8f\x1c\x24\x60\x64\x69\xa1\x9e\xbe\x65\x7e\x36\x58\x17\xf8\xe0\x71\xea\x12\x99\x4d\xc3\x45\xce\x1c\xde\x28\x91\xae\x8b\x3b\xa1\x71\x5e\x29\xdd\x55\x9c\x50\x55\x33\x10\x07\x6b\xfe\x8a\xa8\x38\xfd\xd8\x46\xc3\xb5\x94\x3b\x68\x0c\xd2\x74\xd9\xf4\x0d\x26\x25\x8b\xfd\xeb\xfb\xdc\x89\x17\x17\x9d\xd6\x30\x6e\x43\xf5\xb9\x41\x1c\xdc\x7c\x67\xa4\xd9\x50\x7a\x80\x81\xcb\x77\xa7\x59\x42\xfa\x47\x61\xd5\xd0\xa4\xb1\x5b\xfa\xa1\x52\xd3\x95\x50\x8d\x23\x2e\x97\x5d\xe8\x10\x34\x88\x83\x6f\xf5\x2d\xf4\x72\x66\x98\xd0\x98\x7e\x9f\x92\xc7\x64\xc7\x14\x12\x61\x73\xf4\xc7\xfc\x4e\x48\x6c\x55\x59\xb9\x92\x27\x72\x63\x12\x3a\x4e\x08\xe2\x60\x61\xb3\x9a\xa6\xdf\x59\x09\x85\x1b\x84\x45\xda\x85\x36\x4e\x3f\xe6\xbd\xd4\x96\x9c\x79\xd3\x71\xf6\xda\x29\xea\x64\x79\xa0\x56\x21\x74\xee\x0f\xc4\xc1\xfa\xd6\xdf\x9f\x77\x2a\xf0\xab\x04\xd9\xb3\xf6\x3d\x3f\xc6\x10\x83\x5c\xab\x71\xd6\x20\x9e\x52\x1d\x2b\xa9\x41\x49\xbb\xaa\x91\xab\x7a\x08\x69\x81\x38\x84\xb4\x76\xcf\x25\x2d\x90\x2f\x8a\x2c\x2d\x7f\xfd\x85\x97\xf1\x06\x17\x4b\x5e\x09\x89\x65\x5e\xea\xfa\xec\x94\x2d\x66\xfa\xf8\x31\x77\x96\x24\x2a\xea\xaa\xf2\xde\x9f\x05\xe8\x2e\x39\x88\x83\x35\xff\x6e\x53\xe6\xf2\x3e\xa7\xd8\xe4\x71\x0f\x4d\x1e\xa1\x1e\x15\xc7\xcf\x45\x5d\x21\x94\xea\x61\x76\xab\x81\x60\xae\x8d\x9a\x19\x28\x0b\x1d\x88\x83\x17\x40\xf8\xe4\x67\xa0\x76\xe1\x1d\x05\x85\x2c\x49\x9c\xbb\x16\xf1\x0b\xfd\xe0\x5f\x02\xf3\x8b\xcc\x33\xeb\xb2\xce\x2a\x58\xbe\x7b\xd7\xa0\x93\x74\x00\x0e\xa6\x81\x72\x92\x4d\x5a\x0e\xbc\x7c\x1b\xdf\xc8\x50\xd3\x2f\x41\x51\x62\x77\x94\x6b\x2e\xc7\x93\x31\x56\x6a\x74\x7d\x46\x35\x54\x90\x85\x8a\x92\x82\x38\x58\x58\x25\x7c\x7c\x49\x06\xe6\xd7\x43\x11\xcf\x96\x44\x7d\x3a\xdc\xf7\x30\xdb\xd8\x71\x8f\x8a\xd9\xff\xfc\x7c\xdb\x4f\xf2\x7d\x9e\x53\x1f\x11\x16\xc4\xc1\xaf\xc7\x9d\xf7\xe6\x3b\x4a\xff\x45\xd6\x12\xed\x70\xc2\x0f\xee\x1b\xd1\x0e\x44\x9f\x97\x13\x34\xfd\xd6\x3c\x14\xf1\x18\x0a\x8c\xe6\x67\x45\xc3\xce\x7a\xfe\x69\xbe\x7f\x1c\x57\x7d\x45\xc7\xc4\x33\xe3\x1c\x3a\x8b\x86\xa6\xfb\x53\x24\x09\x4f\x33\xaa\x30\x9b\x1a\xdd\x9d\x34\xb8\x61\x2b\x27\xf3\xc5\x3f\x50\xd3\xe2\x28\x32\xd2\xa8\x1b\xb9\x67\xc9\x35\x9d\x3d\xfa\x7b\x17\xb5\x9d\x22\xc9\x4a\xfd\x96\x05\x72\x04\xf8\xcc\x68\x98\xef\x44\xc2\xcc\x77\x50\x64\x64\xf3\x9d\xa9\x42\x6f\xd1\x31\xd5\x03\x87\xf2\x63\x66\x54\x07\xb1\x5c\xb6\x37\xbd\xff\x54\x77\xf6\x73\xdb\x8f\xeb\x71\x2e\xf9\xc3\x17\xff\x79\x0f\x9b\x7c\x2a\xf6\x59\xa1\x20\x1e\xd5\x1b\xea\xb0\x50\xd7\xa3\x62\xa9\x14\xff\xd7\x78\x79\x92\x51\x74\x87\xaf\x0b\x1f\x1f\xa2\x0a\x94\x42\xe6\x3b\x28\x26\xa2\x44\x3c\xdc\x7c\xd7\x41\x3d\x7a\xc7\xad\xff\xc4\x2c\xe8\x43\x41\xf9\x75\xed\x2c\x17\xca\xe2\x9b\x0f\xad\xab\xb4\xbf\x05\x1a\xe8\xec\xc7\x46\x38\xdb\xfe\xf5\x02\x47\x14\xc9\x7c\x1f\x29\x6c\x59\xd5\x79\x94\x7b\x71\xa3\x4d\x55\x3b\xeb\x2b\xd7\x17\x71\xe7\x12\xbd\x4e\x15\xc7\xa4\xf6\x9d\xe2\xc8\x0b\x59\x3a\x4c\x7f\xff\x48\x24\xf3\xbd\xc0\x8c\x3e\xc9\x3e\x59\xa8\x7f\x7d\xc1\x68\x30\xb3\x7b\xc7\xe2\x2d\xfa\xd1\x5b\x03\x81\x0e\x3b\x03\x9c\x59\xc2\x98\x12\x82\xbf\x37\xdf\x45\x91\xcc\xf7\xb3\x82\x90\xe7\x76\x9b\x7b\xcc\x99\xbb\x2b\x4f\x5a\xf9\xd3\x1c\xb2\xcd\xd0\x15\x5d\x5d\xbc\xd1\xa4\x3d\xb2\xb8\x46\x89\x93\x6f\xfd\xfd\x23\x91\xcc\xf7\xca\x8b\x12\xfa\xb7\xe8\x48\x25\x33\xd8\xd6\xca\x39\x7d\xb1\x7d\xea\x67\xf5\x2e\x0f\xbd\x12\xd0\x69\x65\x7e\xd1\xd9\xa9\x27\x3b\xf1\xf7\x8f\x44\x32\xdf\x25\x3f\xdc\x9a\xe7\xa9\x41\x6d\xa0\xe5\x4b\x31\x15\x10\x58\x4e\x7a\xde\x9d\xa3\x24\x30\xca\x40\xf0\xf8\xe7\x0b\xf4\xf8\xba\x5b\xe1\x7f\xff\x48\x24\xf3\x5d\xe5\xb7\xcb\xf6\x0a\x6b\x6a\x98\xa1\x4e\xf3\x20\x0b\x17\xb3\x72\xda\xeb\xcc\xd9\x05\xdd\xa0\xc1\xe4\x72\x56\x52\xcf\x98\x98\x7b\x7f\xff\x48\x24\xf3\xfd\x97\x27\x6e\xcc\x0f\x39\xe6\x9c\x1a\x9e\xa6\xde\x19\xfa\x32\xa9\x78\xb4\xaf\xc4\x56\xc6\xa1\x89\x9e\x37\x6d\xad\xaf\x97\x7c\x5d\xf8\x6f\x96\xe4\xa0\xa1\x88\x3c\xb9\xc9\x92\xe0\xd3\x51\x56\xca\x75\x15\x8f\xcb\x68\x1a\x61\x86\x6a\x11\x50\xce\x1b\x0a\xe0\xf9\x7a\x06\x13\x93\xb3\xbc\x18\x16\x84\xb2\x0c\x83\x38\x78\x5a\x97\x44\x34\xa2\x17\xf5\xc2\x99\xb6\x19\xa6\x18\xeb\x68\xbf\x4f\x15\x67\xed\x44\xce\x06\x04\xc4\x9f\x4d\x32\xdc\xbe\x53\xda\xb1\x09\xa5\x75\x01\x70\xb0\xc9\x2d\x92\xcd\xe6\xae\x7c\xab\xa8\x66\xb1\x54\x9d\xa0\x0c\x1a\xaa\xf9\x4b\xe7\x8b\xb7\xd8\x5f\xd0\x2b\x0b\x06\x75\x37\xce\x70\x3a\x42\xe5\x1a\x41\x1c\xbc\xda\xf2\xc5\xe7\x16\x5d\x3a\xda\x2b\xc5\xac\x6a\xa8\x98\x17\x74\x82\xed\xb7\x9f\x33\xa8\xb8\x7f\xa3\xae\x9b\x9d\xa8\x7e\xa5\xb5\x3f\x02\x2d\xc7\x00\x1c\xac\x13\xd6\xdc\xea\xeb\x6f\x71\x39\xac\x7f\x97\xf0\x41\x1f\xe9\xcd\x38\x3a\x6e\x8d\x68\x36\x77\xef\x29\x3a\xb4\x63\x7b\x99\x9f\x3c\xc7\x89\x08\x0b\xe2\x60\x6f\xeb\xff\x75\xa1\x6e\xcc\x38\x22\x5a\xc5\xff\xcb\xa7\xbc\x83\xa1\x07\x77\x74\xd3\xe3\xc9\xec\x99\x2f\x0d\x97\xd7\xf8\x1c\xa0\x99\x62\x23\xcc\x77\x10\x87\x28\x11\x7f\x2e\xf3\x1d\xf4\x8f\xfb\x2f\xa9\x50\x13\x94\x5b\x96\x7b\x7f\x2b\xb2\x6c\x39\x74\x92\x78\x4d\x3d\xed\xff\xf8\xa4\x45\xdb\x82\x87\xf8\x69\xa2\x07\x4e\x5f\x98\x7d\x22\xa2\xf5\x20\x0e\x7e\xd1\x6f\x94\x59\xb2\xbe\xb2\x8e\x6e\xd9\x27\xe3\xab\xe1\xd2\x0d\xec\xa2\x09\x2f\x0d\xa6\x8d\x6f\xd9\x9e\xdb\xad\x0e\xce\xb2\x1d\xd8\x90\xf1\x0a\xe0\x60\xca\xa2\x4c\xbe\x26\x26\x81\xde\xd8\xb3\xd2\x7c\xa8\x72\xdd\xcb\xde\xc9\x21\x93\xb8\xf9\xe3\xd4\x8f\x8a\x6f\xb7\x13\xad\xee\xe6\x0d\x41\x9b\x15\x20\x0e\xf6\x5b\x29\x5f\x50\x49\x93\xeb\x47\x51\xc2\xb0\x7b\x4c\x5f\x2e\x7d\xcd\x21\xe0\x45\x65\x53\xf7\x50\x7d\x49\xe2\xf2\xe2\xd0\xfd\x67\x99\xd0\x66\x20\x88\x83\x75\x82\x8c\xab\x48\x59\x8d\x5e\x57\x30\x77\x57\x36\x71\x92\x26\xe1\xe7\x81\x7d\x8f\xbb\x6d\x73\x3e\x53\x9a\x17\xaa\xe9\x48\xfc\x4a\xa1\x83\x0d\x20\x0e\x5e\xbf\x77\x7e\xf3\xa2\xd9\xa3\xbb\x18\x5d\xbc\x29\xd7\x3e\x78\x84\x93\x4b\xcf\xcf\x6d\x84\xe8\x3b\xaf\xa5\x97\x7e\xf1\x6f\x0d\x57\xe5\x47\xac\xc8\x41\x1c\xa2\x6e\xd4\xf9\xcc\x77\xd0\xcc\x8a\x2c\x2d\x86\x3e\xf2\x97\x01\xb4\x84\x5f\xef\x60\xff\xe9\xdc\x90\x32\x69\x40\xf9\xd0\xfb\xdd\x49\x8b\xb9\xd6\xf7\x5a\xfe\x15\x37\xf6\x63\xe8\x63\x0f\xc4\xc1\xcd\x77\xac\x23\x72\xd6\xe9\xcc\xdd\xf7\x3d\x37\x62\x47\x25\x3c\x9c\x13\xd5\x74\x5f\xe8\x5d\xc4\xa8\x7a\x88\x76\x6f\xbc\x3d\x37\x00\x3a\x6d\x0f\xe2\xe0\x87\xf8\x29\xac\xff\x58\xb6\xd0\x4f\x3a\x66\x77\xb8\x90\x08\xf6\xad\x92\x53\x18\x87\xe9\x27\x64\x96\x71\xa3\xbd\xfc\x46\x23\xe8\x0d\xa5\x39\x03\x71\xb0\x1f\x8b\xfe\xf6\x1e\xd5\x37\x57\xdf\x7c\xee\x36\xac\xc4\x67\x86\x0a\xd2\xf7\xd5\xed\xad\x92\x62\x39\x07\xa7\x16\xe7\x3e\x89\x7f\xda\x82\xee\x11\x83\x38\x58\x27\x5c\xf2\x6e\xbb\x77\x75\x13\x87\xbc\xaf\xd3\xfe\xe0\xdb\x4a\x8f\xee\xeb\x7d\x7c\xcd\xbd\x15\x1c\xee\x9a\xb2\x88\x9f\xd5\x7e\xbc\x14\x88\xb0\x20\x0e\xf6\xb6\xce\x2a\xf8\xb2\xd3\x79\x35\xe6\xc7\x0a\xfd\x4b\x0c\xdb\xb4\x4e\x9a\xfa\x37\x33\x02\xad\x3d\xc9\x6b\x04\xea\x18\xd6\x0e\x67\x19\x10\xd2\x02\x71\x08\x69\x9d\xcf\x7c\x07\xad\xa0\xfe\x25\x13\xcc\x5c\xd6\x5c\xc3\xe7\xfb\x7a\xa4\x0b\xef\x29\x04\x67\x3c\x78\x68\xcb\x55\x31\xef\x62\xd9\xfa\x2d\x62\x17\x4e\x3c\x3c\x74\x82\x2e\xfa\x81\x38\x58\xaf\x52\xa9\xf5\xb7\xac\x08\xdc\x90\x0f\xf5\x40\xad\x22\xbc\xba\xcd\x91\x4b\xfb\xa6\x95\x55\x85\x3d\xe5\x17\xe3\x23\x07\xef\x8b\xd4\x86\x88\xb0\x20\x0e\x26\x2d\xb3\x8a\x2b\xd8\x7c\x6a\x04\x41\x77\x0c\x99\x9c\x37\xb2\x63\xcb\xe9\x8e\xb4\x9d\x0c\x35\xa7\x76\x83\xc4\xf6\x7f\x4a\x10\xb8\x43\xbb\xf7\x20\x0e\xf6\x63\x89\xd0\xe4\x27\xb6\x7a\x8b\x78\x8c\x8e\x95\xe7\xcc\x8c\xb6\xbc\x66\xac\x16\xbc\x46\xf8\xb6\x80\x2f\x01\x47\xf1\x35\xc3\x46\x00\x34\x1f\x82\x38\x58\x27\x18\xc4\xa1\xbd\xcb\xfa\xad\x31\x42\x2c\x40\x4b\x9a\x9b\xef\x72\x83\x9a\x97\x66\xb0\x9d\x67\x65\x53\x5d\xc2\x71\x2f\xe8\x4d\x0b\x34\x1f\x82\x38\xd8\xdb\x92\x0e\x93\xd2\xe0\x8d\xdd\x47\x5f\x4a\xa8\x5d\xca\x7f\xdc\x86\x37\xf2\x51\x42\x81\xd2\x7a\x5b\xac\x46\x6e\xf1\xe9\x41\xb8\x69\x21\x42\x5a\x20\x0e\x21\xad\xf3\x99\xef\xa0\x95\xf2\xbf\x24\x67\x4c\xa0\xe2\xed\x15\x32\xfa\xa0\x81\x5b\x4c\xc3\x64\x17\x19\xbb\x21\x95\x86\xda\xa3\x99\x57\xaa\xf3\x44\xf4\x0a\x67\x11\x0d\x54\x74\x1d\xc4\xc1\xd3\xce\x8b\xaf\x4b\xe4\x19\x6e\xfc\x50\x78\x43\x7f\x48\x43\xcf\x9b\xf5\x59\xdd\xed\x8e\xb4\x9a\x2a\x5d\xfa\xb8\xc7\x0f\x7b\x52\x3b\xe8\xb8\x08\x88\x83\x49\x4b\xb1\xae\x12\xa7\x7a\x08\x4f\xfc\x19\x6f\xb4\xef\x84\xff\xdb\x24\x9d\x9f\x2a\xdf\x99\x82\x1a\x36\x88\x78\xdb\x89\xbc\x4b\xcc\xa1\xfd\x44\x10\x07\x9f\x10\x6b\x16\xb3\x53\xb7\x06\xf6\xe4\x72\x2a\x03\x4a\xf9\xfc\xef\x2b\xe9\x56\xe6\x50\x95\x18\xbd\x8a\x98\x76\x7e\xc9\x6c\xf5\x26\x08\x9a\x10\x01\x1c\xac\x13\x54\x18\xdc\xd1\x5f\x90\x7d\x0c\x3e\x28\x43\x69\x0d\x6a\xdc\x8f\xf6\xdb\x69\x57\x78\x20\xec\x64\xee\xdf\x73\x20\x47\xcd\xe4\x0a\x19\x2e\x20\x0e\xf6\xb6\x72\xea\xe5\x95\x95\x9b\x04\xba\xbb\xc9\x4b\xf9\xfc\x41\x32\x84\xd9\x94\x61\xf7\x85\xdf\xdd\x3f\x45\x61\xb0\x13\x66\x9a\x49\x46\x45\x48\x0b\xc4\x21\xa4\x75\x3e\xf3\x1d\xf4\x45\x84\x2c\xad\xa1\xd4\x4a\xc9\x8f\x94\x97\x9e\x8b\xb0\x6e\x5d\x4c\x70\x39\x36\xcc\xf6\x19\x50\x1d\x25\x78\xe7\xf7\x63\x2a\x45\x98\x77\xa5\x2a\x02\xd1\x7c\x10\x07\xeb\xd5\x46\x7a\x12\xdd\xc3\x78\xb3\xac\x3f\xb7\x71\x93\xec\x8f\x67\x5b\x18\x4e\xaf\x8b\x30\xde\xca\x36\xd2\xcd\x10\x20\xdc\x09\xd7\x0a\x45\x84\x05\x71\x30\x69\xd1\x90\x78\xb1\x3f\x39\x69\xd7\x7b\xcf\xec\x2c\xea\x58\x25\xa6\xaf\xa0\xbe\x27\xd5\xb0\x67\xe8\xac\x7d\x30\xbf\x7f\x1b\x37\x1c\xca\x54\x0b\xe2\x60\x3f\xd6\x49\x76\xa3\x8b\xd5\x8d\x7d\x49\xd3\xf7\x2f\x44\xcc\x1c\x99\xb9\xbe\xe3\x2e\x1a\xa8\xb1\x60\x60\xdf\x58\xb7\x56\x0d\x4f\xb6\xb9\x0f\xdd\x66\x01\x70\x70\x97\xbc\x52\x9f\x32\x88\xf4\x48\x5a\xd6\xb5\x9f\x7d\xcf\xd4\x5f\xdc\x39\x1c\xbf\x32\x55\x28\xf4\x62\x5f\xe1\xa7\x88\x2e\x4d\x5f\x68\x9e\x05\x71\xb0\xb7\xbd\xe6\xd5\x9b\x76\x88\xcf\x82\x7e\xdd\xb4\xcd\x90\x89\x48\xba\x86\x3a\xf2\xb8\x50\x3b\x9a\x4d\xdd\xf3\x8f\x9b\x3c\xc5\x0f\xff\x71\x84\xb4\x40\x1c\x42\x5a\xe7\x33\xdf\x41\x5f\xbe\xc8\xd2\x52\x92\xb5\xa8\xd5\xe1\xbd\x74\xa5\xe7\xd0\xcb\x95\x57\xa9\x54\xef\xcf\x95\x7b\x59\xec\x8a\xa7\x77\x7a\x2f\xd8\x84\xca\x27\x3a\x4b\x43\x3b\x74\x00\x0e\xd6\xab\xfd\x56\xb4\xde\xbc\x0a\x4b\xd4\xe3\x4a\xe3\x05\xca\xc2\xa4\xad\x27\x77\xca\x93\x58\x55\xdf\xb3\xf7\x96\x25\x4c\x7d\xe2\x57\x83\xfe\x5e\x40\x1c\x4c\x5a\xab\xa2\xa9\xf5\xb4\x22\x0b\x83\xa8\xee\x2c\x4f\xa9\xee\x5e\xbd\x7c\xc4\x34\x9a\xd9\xc0\x78\x87\xe4\xda\x99\x76\x59\x22\xb1\x3c\x74\xe8\x1b\xc4\xc1\xad\x4c\x5c\x54\x8d\xba\x49\xdd\xe8\x7d\xfd\xc6\x0e\x8e\x08\x3c\x2b\xc9\xb9\x95\x1c\xcf\x2b\x69\x7a\x71\x62\x49\xe2\xb5\x81\xb5\x50\x71\x36\x10\x07\xeb\x84\xb1\x15\x7a\x22\x1b\x2c\xed\x62\xac\xd5\xd0\xdb\x4f\x59\xca\x5e\x8b\xdc\xb7\xf2\x89\x48\x47\xdd\x91\x33\x26\x76\x17\x26\x5e\xe3\x85\x8e\x8b\x00\x38\xd8\xdb\x5a\x3e\x2b\xc1\xeb\x7f\x39\xf7\xcb\x64\x17\x2d\x43\x89\x80\xb7\xfe\xa6\x81\x7c\xd3\x19\x11\x76\x62\xdb\xd4\x36\xdf\xa2\x11\x26\x94\x65\x08\xc4\x21\xa4\x75\x3e\xf3\x1d\xb4\xc3\x81\x2c\x2d\x32\xf2\x9e\x96\xd1\xb0\x88\x29\xc2\x0d\xee\xc1\x8a\xdd\xd4\x6a\x9a\x17\xd9\xdc\xe2\xe5\x55\xa1\x9c\xbd\xc4\xbd\x73\xe8\x06\x16\xd0\x39\x4f\x00\x07\xeb\xd5\xf0\xc8\x19\xec\xeb\x55\x2a\xb2\xfb\xd2\x4f\xb7\xfa\x55\xdc\x1d\x46\xbd\xbe\xcb\xb3\x51\xef\x3f\x1d\xc5\x08\x4d\x23\x88\xf7\x4a\x47\x84\x05\x71\x30\x69\x6d\xd5\x7c\x4d\xee\x1d\x30\x57\x5b\xf8\x1d\xb0\xd0\x94\x8e\xb1\xf9\x5c\xad\x42\x7e\xb5\x82\x2a\x7b\x16\x23\xc1\x3b\x9e\xea\x19\x94\x08\x1b\xc4\xc1\x7e\xac\x61\xb9\x8e\xf5\xf7\x14\xb7\xd6\x69\xab\x7d\x94\x38\x3f\x33\x0f\x77\x71\x2b\xab\x12\x47\x6f\xde\x0c\x36\xcf\x36\x9d\xcb\xb5\x83\x8e\x8d\x81\x38\xf8\x84\x98\xa3\x57\xaa\x54\x5a\x51\xc9\x62\x33\xc3\xbf\xd4\x94\x53\x11\x78\xed\xd1\xac\x57\x01\x57\x9f\xb8\x53\xf8\xde\xe0\x54\xd3\x31\x34\x21\x02\x38\xd8\xdb\x6a\x4e\xf2\xd0\xba\x39\x5c\xdb\xe0\x49\xd8\xa5\xe2\xff\xfe\xcd\x8c\xa0\x9c\xd7\x3d\xf3\x4c\x97\xe6\xc3\x91\x91\x31\x7f\x16\xc6\x23\x84\xb4\x40\x1c\x42\x5a\xe7\x34\xdf\x41\x7b\xd8\x88\x12\xf1\x48\xe6\x3b\x7d\x09\x75\xa2\xb4\xcb\x5e\x92\xe0\xbc\x82\x43\x1e\xb5\x26\xbb\x2f\xf3\xfd\x74\xd3\xcf\x2d\xd1\xca\x61\x73\x25\x2b\x72\xfc\xd3\x7f\xbf\xd3\x87\x64\xbe\x0b\xe2\xb8\xe4\xb3\x86\xc9\x8b\x7e\xc5\xd6\x50\x7c\x89\x3b\x44\x58\xc1\x22\xa8\x30\xf0\xa5\x5e\x99\x69\x8d\xcb\xb7\xed\x37\xd6\xdf\xd6\x27\xd5\x38\x5f\xc3\xfe\xe5\xa8\xcb\xcf\x75\x92\x8e\x60\x03\xd5\x36\xe6\x52\x3a\x86\x28\xe1\xb2\x3b\x21\x0f\x7c\x7f\xf7\x61\x09\xd3\xaf\x36\xe0\x6d\x30\x86\x40\x29\x03\x41\x1c\x4c\x68\x0f\xa7\x72\x1e\x4d\x5c\xbd\x24\x2d\xbd\x2b\xb5\xbd\x1a\xc8\x47\x2f\x56\xb6\x3a\xbd\x4b\x1f\xa2\x2c\xaa\x95\x32\x4d\xfe\x75\x1d\x32\xdf\x41\x1c\x6c\xb4\x91\xd0\xdf\x7e\xf7\xa0\xbc\x9b\xab\xc2\xca\x7a\x89\xdc\x23\x55\x93\x90\xe0\x98\xd4\x4b\xba\x67\x27\xe6\xb1\xc3\x99\xe1\xcb\x0e\xe8\xb4\x32\x88\x83\xe9\xd7\xf7\xe4\xe2\x2d\x55\x72\x95\xcc\x67\xb6\x45\x41\x05\x49\xab\xdc\x98\x97\x7f\x39\xeb\xc9\x85\xc8\x2b\x5d\xdf\xfc\x69\x99\x7b\x0a\x4d\x3b\x20\x0e\xd6\x09\x78\x5e\xb3\xec\x19\x67\x95\x77\xc9\xf6\x57\x49\xe4\xda\x23\x5e\x0e\xf3\xe1\x62\x32\xaa\xcb\xa8\xff\x22\xf2\xbe\xd5\xcf\x42\x09\x95\xa6\x01\x71\xb0\xb7\x1d\xaf\x5f\x58\x16\x70\x42\xd9\x94\xe1\x41\xcb\xac\xfe\xd8\xd2\x5c\x17\x6e\xce\xf7\xc5\x79\x77\x37\xb1\x4b\x81\x38\xcf\xe9\x0b\x94\x1b\x1c\xc4\x21\x46\xdb\xf9\xcc\x77\x90\x80\x91\xa5\xb5\x32\x7d\x84\x76\x25\xc9\xe0\x6b\xfc\x85\x1f\xaa\x2f\x8a\x59\x55\xaf\x2d\x2a\xbd\xf2\x2a\xc5\x69\x4a\x71\x0d\x7b\x12\xbb\x25\x0a\xdd\x89\x02\x71\xf0\x5e\x7d\x16\x47\x1f\xb0\x39\x3d\x87\x22\x95\x6d\xe8\x97\x4d\x9f\xef\xbe\xf8\xe5\x53\xc2\xa3\x38\xe2\xd6\x3c\x06\xe3\xb7\x81\xcb\x50\xd5\x23\x10\x07\xaf\xe3\xdd\xf3\xdc\xc7\xb5\x4b\xd6\x05\x9f\x78\x02\x4b\xe8\x7e\xe4\xfe\xf1\xc8\x2a\xb3\xd7\xa4\x2c\xc9\x2e\x4f\xbf\x64\x84\xd1\x2e\x94\x37\x11\xc4\xc1\x7e\xac\x74\x0b\xad\x06\x7f\xcd\xa6\x82\x90\xce\x66\xcf\xab\x8f\x6b\x3e\x89\x30\x1b\x91\x74\x5c\x21\x51\x18\xe2\x0b\xa1\x66\x76\xe2\x86\xce\x56\x83\x38\x58\x27\xc4\xe0\x0a\x6b\x52\x2c\xbc\xbc\xd3\xea\xa1\x79\xdb\xe3\x42\x47\xb7\xdc\xe6\x49\x00\xb6\x79\xa1\xc5\xce\xbc\x82\x4a\x54\xa0\x36\xb4\x29\x05\xe2\x60\x6f\x3b\x68\x91\x7f\xb1\x53\x70\xa5\x72\xf3\xea\x6e\xe2\xfa\xb8\x1a\x4d\xa2\x3d\x5f\x6b\xd0\xea\x44\x8c\x7a\x75\x0d\x53\x49\xac\x7b\x1c\x42\x5a\x20\x0e\x21\xad\xf3\x99\xef\x20\x5f\xf4\x5f\x3e\x9a\xb1\x37\xec\xa3\xd2\x4f\x6a\xb4\x8a\x58\x9b\x7d\x14\xd6\xa8\xa4\x88\x7e\xea\x99\x61\x0b\x7e\x1d\xfb\x11\xa1\xf5\xd3\xcf\x0b\x4a\xaa\x00\xe2\xe0\x6b\x84\xe7\x3d\x4e\xfd\x4c\xea\x9e\x71\xb7\xb3\x15\x38\xee\x8d\x7e\x8b\xf8\x88\x27\xf8\x93\x64\x83\x94\x18\xad\xff\xa5\x90\x53\x26\x74\xb4\x1c\xc4\xc1\xa4\xa5\x56\xfa\x6b\x49\xc0\xbf\xe6\x26\xd7\xa5\x07\x7d\x61\xf5\x2c\x1c\x83\xe9\xf7\x7d\xb8\x72\xed\xaa\xf4\x04\x73\x26\xb1\xa5\x4c\xa0\x9b\xef\x20\x0e\xf6\x63\x29\x8e\x1c\x5c\x3c\x6e\x6f\x3a\x25\x4c\x9d\x10\xd8\x32\xdf\x40\x1b\xd7\xcb\x2c\xe0\xed\xc5\xf7\x0b\x1c\xcf\x99\x71\x5d\xc8\x85\x8a\xf8\x82\x38\x58\x27\x5c\xa8\xa6\x4e\x0c\x9f\xef\x7b\x7e\xb2\x54\xb9\xa9\x3f\x65\xc3\xfe\x81\x3f\x22\xda\x68\x6f\x00\xed\x82\x4a\x87\xad\xe3\xd6\xfe\x0d\xe8\xc8\x10\x80\x83\xbd\xed\xb9\x6f\xbe\xd3\xdf\x50\xa8\xf2\xf0\x76\x49\xcf\x7f\xf5\x41\xf0\xd5\xa0\xe6\x76\x6e\x6a\x90\x52\xa4\x80\x99\xc0\xab\x12\xab\xf9\x4f\x17\x08\x1d\xfe\x69\xbe\x7b\x2b\xb2\xa6\x3a\xe8\x13\x9a\xc6\x2d\x7f\x26\x1f\x68\x7a\x6e\x62\x55\x70\x92\x2d\x2e\xc8\x49\xf7\x78\x5c\x1f\x07\x47\x75\xa6\xf1\x1f\xa8\xd7\x78\x8a\x56\x2e\x93\x67\xef\xd1\x70\x0a\x0a\x99\x90\x4f\xca\x55\xf4\x1b\x42\x19\x32\x16\xea\xaf\xaf\x79\x1b\x34\x18\xef\xd1\xc3\xcc\x77\x50\x64\x64\xf3\x5d\x49\xc9\x2d\x9d\xbe\x59\x75\xae\x27\x97\x5a\xa8\xd3\x59\x0d\x9b\x14\x55\x10\x6f\x83\xd6\xcc\x40\xa4\x65\x4a\xc3\x11\x95\xca\xe7\x1f\xe8\x9b\x7d\x0c\xdd\xf2\x27\x5d\x84\x01\xdc\xad\xae\x76\x67\xec\x58\xf8\xa2\xbd\x2b\x6a\x99\x79\x3d\x01\xeb\xf4\xc5\x13\xeb\x51\x72\x90\xf9\x0e\x8a\x89\xa8\xf9\x0e\x37\xdf\xbd\x6c\xa9\x6f\x59\x3a\x7d\x5d\xfb\x71\x46\xff\x9d\x9b\x4a\x22\x83\xb8\x93\xa5\x51\x7f\x28\xd5\xdf\x9d\x59\xd0\xcb\x51\xdb\x49\xed\xaf\x17\x38\x1e\x48\xe6\xbb\x79\x86\x70\x38\x4e\x47\xdc\xd6\x42\xce\x5d\xb2\x2c\x5a\xad\xe0\x6b\xed\xf1\x9f\x89\x3e\xc9\xf9\xf8\xff\x92\x49\x94\x2f\xad\xff\xdb\x24\xde\xfe\xe2\x1e\x48\xe6\xbb\xdf\xe7\x0c\x99\x48\x72\x3b\xf9\xd2\x5a\x46\xba\x3b\xc7\x1f\x57\xc6\xad\xac\xe7\xef\xda\x66\x47\x9e\x49\xe4\xf5\x7f\x38\x9b\x6d\xfd\xfb\x47\x22\x99\xef\xee\x9c\xd5\x32\xbd\x5d\x1d\x36\x19\xd4\xca\xc3\xe9\xdf\xd4\x03\x2b\x2f\x48\xd0\xef\xcd\x73\x28\x33\xb5\xac\x62\xef\xe5\x6f\xff\xed\x19\x4a\x7f\x71\x0f\x24\xf3\xbd\xd6\x7d\xbf\x7c\xb0\xb1\x2b\x36\x9f\xbc\xb2\x62\xe6\xe4\x2c\xf7\x46\x54\xd7\x40\xc4\x24\x5f\x63\x6e\xaa\x89\x80\xba\x2e\x6b\xde\xdf\x3f\x12\xc9\x7c\x27\x7f\xfc\x93\xbc\x55\x8d\xeb\x49\x57\x08\xd1\xd7\x87\x62\x64\x59\x46\xd7\x32\x45\x76\xd9\x3c\x2d\x9e\x7d\x8d\x11\x6a\x1d\x0b\x62\xf8\xfb\x47\x22\x99\xef\x76\x22\x69\x33\xc2\x21\x2b\x29\xbf\xba\x2e\x15\x2a\x1a\x67\x6f\x05\xde\xfd\xf3\xe9\x1e\x91\x0c\xd6\xf5\xab\x74\x54\x67\xe8\xa1\x7d\x7f\xff\x48\x24\xf3\x3d\x9a\x8a\xf7\x80\x2f\x5e\x75\x0e\x67\xf9\xc3\xd3\x23\x8d\xdf\x62\xc7\xe3\xd5\xe6\xa8\x0d\xb1\x33\x3f\x36\xca\x87\xcf\x7e\x79\x48\xff\x37\x4b\x72\xd0\x50\x44\x9e\xdc\xa2\x4c\x51\xf3\x5c\x5f\xd2\xb9\x56\x85\xff\x32\x13\x5c\x49\x39\x35\x7c\xcc\xd0\x3b\xe2\x65\xc9\xdd\x8d\xd3\x43\xe8\x71\xec\x61\x8d\xf8\x03\x06\x71\xf0\xcc\x77\xcf\x39\xc3\xd5\x6e\x06\xfc\x16\xe1\x5a\x54\xc6\x26\xa9\x4a\xe0\x46\xf9\xe0\x97\x99\xd7\x98\x14\xe7\x83\xba\x5f\xc9\xff\x4b\x0e\x0a\x0b\xe0\x60\x93\x9b\x56\x49\x3d\xfd\xb4\x68\xc5\xf3\xa3\x6b\xea\x75\x0c\x0c\x51\x4e\x28\x1d\x81\xb1\xaf\x9b\x49\x1f\x68\x7f\x52\xe0\xf7\x97\x54\x85\x0e\x2d\x82\x38\xf8\x79\xee\xf0\xfb\xb2\xfc\xe5\x57\xbe\xf2\x1a\x4f\x10\x71\x08\xb7\x7c\xfc\xa9\x27\x47\x3d\xca\xab\xa4\xca\x53\xd4\xcb\x82\xb2\x55\x1a\x8c\x08\x0b\xe2\x60\xc5\x4f\x70\xee\xb4\x11\x36\x75\xd1\xb7\xdf\x1e\x69\x45\x75\x51\x18\xf1\xc5\x90\x70\xf4\x13\x1d\x45\xa3\xf0\x99\xef\x7c\x61\xf1\x80\x10\x4a\xfd\x06\xe2\x60\x93\x5b\x04\x6f\x8e\x4c\xff\xe8\xa3\x2f\xa7\x6c\xfd\x3f\xce\x8c\x37\x03\x54\x71\x0f\xf0\xc2\x83\xbf\xf7\x9b\x7e\xfa\xe2\x6e\x37\xb2\x9f\x8d\x30\xdf\x41\x1c\xa2\xe6\xfb\xb9\xcc\x77\xd0\x3f\x2e\xb2\xb2\x34\x2f\x2b\x2b\x1a\xe0\x1f\xdb\x1a\x71\xbe\xee\xbf\xbe\xa9\xde\xc7\x33\x74\x5f\xf9\x7a\x14\x3b\x3f\x4d\xca\x74\x16\x85\xed\x2b\x2f\xe8\x12\x0a\x80\x83\x27\x15\x6c\x4f\x53\xff\x93\xcd\xd1\x77\xd9\xe1\xf2\x35\x97\xe5\xd9\x82\xca\xb1\xf4\xc1\x25\xcd\xd8\x92\xbc\xd9\xc8\xee\xf1\x62\xae\x56\x44\x58\x10\x07\x53\x96\x5f\x4f\xde\x09\x73\xce\x78\xc5\x99\xb2\xf8\x09\x8d\x95\xad\x79\x4a\x9c\x72\xa4\x7a\x5c\xdc\x5b\xf6\x72\xca\xb9\x2b\xb9\xff\x77\xc2\x12\xc4\xc1\xde\x16\xb7\x38\xe3\x7a\x12\xaa\xc2\xd1\xcb\x05\x76\x23\xb1\x42\xd7\xbc\xbe\x4c\x85\x7c\xd3\xcf\xd4\x59\xa9\x98\xaf\xe3\x17\x87\x95\x26\xa1\xbb\x2d\x00\x0e\xa6\x2c\x77\x94\x06\x5d\xb4\xd0\x16\x1f\x07\x12\xd6\xb8\x58\x33\x6e\x54\x25\x3c\xe2\x6d\xd7\xab\x37\xef\x2e\x8f\x76\x8c\xab\xef\x5b\xcc\x21\xc2\x82\x38\x78\x26\xf3\xc2\xc5\x66\x45\x66\xcf\x28\xce\x97\x5e\xb7\xde\x10\xec\x5f\xf0\xfc\x3e\x8b\xb5\x3d\xd3\x42\x69\x8b\xb6\x56\xf2\xa0\xb7\xe6\x16\x62\x45\x0e\xe2\x10\x85\xa0\xce\x67\xbe\x83\x66\x56\x64\x69\xcd\xd9\xe7\xd3\x51\x9a\x5d\xc0\x76\x2b\x5f\xe5\xbd\xd4\x62\x44\xe8\x15\xa3\xed\xad\xc3\x3b\x8d\x53\x73\xca\xd2\xce\x37\xe3\x3f\x8d\x68\x3e\x88\x83\xfd\x58\xe4\xd5\x4f\x44\xfe\xe4\xd1\xb9\x49\x84\x97\x50\x3e\x52\xe5\xc9\x2d\x66\x16\xcc\xe9\xdb\x26\x39\x7b\xea\x35\xfd\xe2\x72\x80\x54\x20\x22\x2c\x88\x83\x49\x6b\xd7\x87\x69\x12\x35\x94\xac\xc6\xd3\x96\x44\xd4\x31\xc2\xc5\xf5\xae\x81\x81\xd2\x6d\x0b\xb5\xda\x41\x91\x7c\x53\x95\xda\xd2\x37\x88\xb0\x20\x0e\xf6\xb6\xf2\x97\x97\x7e\x56\x4e\xbc\x8b\xd1\xcd\x7e\xe6\x29\x52\x3c\xdd\x5d\x8e\xc2\x91\x28\xed\xa4\x46\x55\x98\x38\x52\xce\x51\x95\x0b\x7d\x96\x80\x38\x98\xb4\xb8\xf4\x8c\x75\xe5\xb9\xaf\xf5\x1c\x6f\xda\x62\x5d\xb3\xf6\xbd\x4b\x54\xde\x85\x19\xa6\x14\x21\x9a\x83\x43\xe3\x43\xb9\xab\x02\x5d\x47\x02\x71\x30\x69\x95\x12\xe7\x7e\x30\xdb\x7f\xbf\x33\xb1\x8e\xb7\xe5\x52\x39\xa4\x58\x45\xbd\x94\x20\xaa\x83\x1d\x47\x5f\xf6\x45\x91\x63\xd8\x82\x16\xba\x9e\x0c\xe0\x10\xd2\x3a\x9f\xf9\x0e\x5a\x41\x21\x4b\x6b\xd9\xf3\x45\x87\x39\xd3\xf0\xe3\xfb\x5c\xf7\x9f\xca\x32\x72\x6d\x1e\x7d\x3b\x59\xb3\x6f\x61\x2a\x9b\xe1\xe4\x0e\x43\x5f\x49\x80\xec\x6c\x10\x07\xfb\xb1\x9a\x51\xcf\x2c\xdb\x31\xe5\x13\x8d\x46\xe8\x88\xd4\xdc\x4a\x26\xac\x34\x9e\xb9\x39\xbd\x15\xf9\x92\xe5\x56\x66\x68\x19\xb6\x54\x86\x08\x0b\xe2\xe0\x09\x9c\x7f\xc7\x1c\xef\xff\xee\x11\x6e\xa3\xb3\x31\xb5\xf5\x6f\xea\xc8\x78\xee\x6b\x6b\x6a\x84\x67\xf4\x34\xc9\x4d\x79\xcb\x42\x1a\xf2\x1c\x41\x1c\xec\x6d\x7d\x0f\x0e\x6b\x2d\x3b\x0e\xbe\x08\x36\x6f\x94\x9b\x6a\xb7\x0b\x0a\x4b\x71\xb4\x9a\x1d\x09\xaa\xa5\xe5\x91\xf5\xaf\xd3\x29\x41\xd9\x45\x40\x1c\x4c\x5a\xc9\xaf\xcb\x2e\xa9\x67\xce\x5a\x18\x37\x84\x79\x3f\x58\x61\x73\x38\x14\xce\x3d\xc0\x1d\x76\x8e\x34\x21\x08\x2e\x09\xc2\x2c\x83\xaa\xbb\x80\x38\x98\xb4\xe6\x67\x6c\x9f\xc9\xbd\xa2\xfe\xd4\x26\x1a\x62\x6f\x6c\xc2\x38\x38\x1c\xf0\x39\x9b\x6e\xc8\xeb\xce\x05\x31\xa9\x45\xc9\x68\xa3\x1a\x84\xb4\x40\x1c\x42\x5a\xe7\x33\xdf\x41\x2b\x65\x64\x69\x4d\x50\xdf\x59\x11\x9d\xb8\xbb\xf4\x72\xe9\xf5\x5e\x45\x77\xc2\xca\x01\xbe\x57\xb0\xb7\xd0\xd0\xbd\x99\xaa\xaf\xea\xb7\x9f\x56\x71\x21\x9a\x0f\xe2\x60\x3f\xd6\xb4\xc8\x36\x57\x85\xa5\xf7\x99\x8b\xf9\xa5\x9f\x57\x6d\xdc\xbc\x96\x22\xbd\xfc\xa2\xdd\x99\x76\x0e\x1e\x5f\x17\x28\xf4\x6f\x18\x47\x84\x05\x71\xf0\x54\x30\xd7\x8d\xf7\xaf\x95\x09\xf7\x62\xf8\x72\x1b\xd8\x98\x7f\xca\x26\x27\xd7\x7e\xd7\xff\xb1\xae\x8c\xd7\x3f\x3f\x9b\x11\xc7\xa4\x14\x4a\x05\x03\xe0\x60\x6f\x4b\x33\x86\x47\x9b\xb9\x7c\x6d\xdc\xe7\x86\xc0\x9b\xd7\x16\x09\xf6\x41\x81\x0c\x49\x5a\x29\x01\xf8\x54\x5d\xe4\x67\xf4\x77\xf4\xa1\x2d\x2a\x10\x07\x93\x96\x05\x5f\x09\x2b\x17\xea\xb5\x5b\x0f\x87\x36\xd6\x85\xf8\x70\xd9\x51\x7e\xc4\x4c\xb0\xf1\x14\x0a\x96\xfe\xf0\xd5\xab\xa9\x8e\x85\xce\x90\x82\x38\xb8\xd7\x80\xe2\xf9\x8e\xcc\x24\x3d\x8d\xb6\xd7\xb0\x5d\xe9\x01\x83\x37\xdb\x26\x3f\xe7\x35\x32\x05\x54\x8d\xa3\xda\x84\x56\xa5\x56\x51\xc8\x6b\x00\x70\x08\x69\x9d\xcf\x7c\x07\x7d\x11\x21\x4b\x4b\xbc\xa9\x3b\x66\xb4\x71\x24\xb0\xe0\xdb\xa5\x51\xa7\x92\x49\x41\xd3\xfa\x20\x34\x29\xbc\x8e\x0c\x4c\xdc\xef\xec\xdf\x58\x24\xf3\x11\xcd\x07\x71\xf0\xa4\x0a\x17\xb4\x97\xb1\xf9\x6c\x88\x92\xc9\x19\x58\xbd\xc5\x32\x87\xb2\x28\x7c\x9f\xc6\x35\x4a\xe9\x64\x76\x54\x66\xbf\x60\xbb\x0f\x1d\x1b\x03\x71\x30\x69\xf5\x8e\x2a\x8c\x19\xd8\x7f\x0e\x28\xe0\xad\x3a\x51\x9b\x47\x19\x6d\xbf\x29\x74\x43\xef\xc5\x8f\x2b\x27\xd7\xc6\xa3\x9b\x9b\x62\x3a\x11\x61\x41\x1c\xbc\x46\x80\xd8\xc2\x57\xcf\x40\xd9\xeb\xdc\x2d\x9b\x23\x4e\x29\x81\xef\xad\xa9\x47\x54\xf3\xa2\xe7\x88\xbb\x4c\x96\xfc\x1f\x48\x0f\x41\x9f\x32\x20\x0e\x26\x2d\x32\x45\x23\x1f\x8d\x97\x82\xbc\x94\x4d\x56\xb7\x66\x8d\x6a\xf1\x3f\xb9\x96\xc9\x4f\x50\x1d\xe9\x65\x1e\x2e\x56\xae\x92\x0e\x42\x95\x83\x40\x1c\x4c\x5a\x97\x87\x3f\x70\x04\x10\xbc\x66\xd9\x39\xfb\xa2\x4e\x69\x38\x6e\xbb\x13\x37\xb1\x8b\x21\xff\xf3\x84\xc0\xb6\x38\x99\xa5\xfd\x53\x3f\x42\x5a\x20\x0e\x21\xad\xf3\x99\xef\xa0\x2f\x5f\x64\x69\xf5\xba\x7d\x89\x55\xa5\x71\x61\xd7\x7d\xff\x98\xd7\xcb\x0d\x4f\x9c\x20\x60\x0f\xb3\xa6\x45\xc7\xb0\xb3\x20\x18\xc7\x2b\xbe\xee\xff\x7e\x2c\x00\x07\xcf\x84\x73\xe9\xce\xb3\xb2\x09\x34\x17\x6d\xb2\x5d\x6e\x2d\xe1\x20\x89\x8f\x94\x45\x4b\x81\x9c\xc3\x0e\x6c\xaf\x33\xbe\xcf\xd7\x8f\x40\xff\x03\x20\x0e\x26\xad\x1d\x2c\x6e\xc9\xa9\xdd\xb9\x29\xda\x0b\x42\x4e\xac\xd5\xc3\x52\x4a\x02\x17\xbd\x8a\xa5\xef\xd6\x28\xe6\xf1\xe5\x5d\xc9\xc3\x85\xd2\x14\x80\x38\xd8\xdb\x7a\xf3\xe3\x97\x48\x86\x87\x95\x1f\x8c\xf9\x92\xf3\x2e\xdf\xad\x99\x53\x15\x2d\x1d\x72\x78\x9e\xfb\x70\x6c\x7f\xce\x9c\xa3\x08\xca\x56\x0c\xe2\x60\xd2\xfa\x1a\xcc\x4d\x56\xd1\xfa\x8a\x10\x63\x3c\xf6\xde\x4e\xc3\x14\xa1\x8e\x4b\x67\x56\x92\xe2\xde\xaf\xdd\xf7\x2b\x87\xa8\x25\x1f\x21\xf7\x19\xc4\xc1\xa4\xc5\x30\x2a\x9d\x41\xa1\xe9\x12\xc0\xf2\x5d\xa2\xae\x3a\x50\x6a\xa0\xa1\x6b\xe5\xda\x67\x33\x82\xc7\x23\xca\x97\xd2\xa4\xd5\xde\xfb\x23\xa4\x05\xe2\x10\xd2\x3a\x9f\xf9\x0e\xda\xe1\x40\x96\x96\xc3\x67\x97\x7d\xb6\x8a\x53\x93\x61\x9e\x40\xb1\x56\x4b\xfe\xfc\xfd\x45\xe2\x14\xdc\x1f\x87\x7f\xdc\xf3\x22\x9c\x3b\x3e\x15\x43\xd5\x6d\x40\x1c\xbc\xe6\xfb\xdc\x8b\x46\x41\xcf\x5d\x6f\x6e\xa3\x22\xf7\xc0\x19\xec\x22\x31\x32\xbc\x55\xfe\xd6\x4a\x42\x8d\xa3\xb5\x10\x69\x4d\x4a\x59\x44\x58\x10\x07\x93\x96\x44\xf0\x25\x91\x13\x79\xdb\x3c\xd1\x7d\xbb\x1b\x44\x16\x1d\x2f\x53\x84\x25\xd1\xae\x32\x3e\x92\xcd\x0d\xf6\x0c\xbd\x5a\x98\x03\xbd\x2d\x88\x83\xbd\x6d\xab\x73\x32\x25\x5d\x67\xa9\xbc\x50\xe2\x11\xe6\x46\x16\x05\x97\xc1\x9b\x01\x5d\x17\x6a\xea\x96\x91\xe7\xbd\xb9\x84\xd5\x71\x90\x15\x04\xe2\x60\xd2\xba\x7b\xe6\x53\x52\xee\x17\xf6\xbb\x54\xbd\x40\xa8\x36\x2a\x97\x32\xe4\x86\x65\x60\xea\x53\xf5\xa3\x17\x21\xc1\x6d\x1e\x61\x3c\xd0\x19\x75\x10\x07\xb7\x01\x9e\xf3\xec\x9a\x58\x2e\x8d\xbf\x99\x7a\xa9\x23\xd4\x7b\xaf\x43\x83\xe1\xe5\x49\xce\x96\xbb\x09\x19\xd6\xf0\xeb\x5b\xb7\x6f\x56\x22\xa4\x05\xe2\x10\xd2\x3a\xa7\xf9\x0e\xda\xc3\x46\xd4\x7c\x47\x32\xdf\x9f\x10\x12\xe6\x70\xbc\xe7\xa0\x5e\x4b\x52\x4a\xae\x94\xaf\x7c\xbf\x47\xd1\x3c\x4a\xbe\x16\x99\x3c\x14\x57\x2c\xcd\xf5\xf0\x87\xe2\xdf\xef\xf4\x21\x99\xef\x3c\x63\xea\x11\x44\xbe\x41\x66\xd3\x5a\xab\xb8\x4a\xe1\xcd\x29\x97\x3b\x84\xd6\x82\x52\x5d\xbf\x4b\x52\x0a\x97\x7c\x14\xff\x74\xf6\xdf\xec\xf4\x81\x1a\x86\x3c\xda\x7c\x49\xdc\xc2\x5c\x9b\x22\x6c\xd8\x63\xde\xd5\x1b\x8e\xcb\xe9\x09\x71\xb1\x8a\x3e\x35\xa6\xc6\x9f\xff\xd1\x22\x39\x79\x59\x11\x3a\xa4\x09\xe2\x60\xfa\x75\x36\xaf\xe5\xd1\xde\x9e\xdf\xc5\x1a\xc5\x5e\xff\xb8\xff\x39\xf3\xbe\xf5\xe5\x14\xc9\x48\xb6\xc3\xa6\x3f\xb4\x23\x8c\xb9\x3b\x50\xed\x08\x10\x07\x1b\x6d\xd3\x12\x77\xf1\xd1\x6e\x52\xfe\x79\x1e\xe7\xfd\x88\x7e\x17\xef\xaa\x19\xd5\x9c\x74\xb0\x7c\x94\x85\xf4\xda\x8c\x3a\x07\x71\x1f\x74\x7b\x07\xc4\xc1\xde\xb6\x32\xa6\xfe\x4c\x65\x20\xc6\x48\xa9\x40\xae\x4f\x7e\xe4\x41\x3e\xbe\xb2\xef\x04\xa6\xb5\xc9\x04\x4d\xce\x3b\xac\xf4\x27\x7b\x36\x88\xb0\x20\x0e\x36\xda\x1c\x8b\x0b\x2d\x2a\xd6\x57\xeb\xb4\xa3\xfa\x65\xa7\x09\x3a\xf5\xad\x28\xa2\x3a\x27\x18\x17\x08\x1d\xbb\x28\xd2\x79\xe7\x47\xc3\x11\x61\x41\x1c\x6c\xb4\x79\x73\x6b\x8c\x27\xd8\x6f\x15\x2a\x1c\x86\x78\x75\xfd\x1a\x8c\xbc\x90\x7b\xeb\x36\x7b\x48\xe7\xfe\x43\xc7\x0d\xb3\x90\x76\x5d\x03\xc4\x68\x03\x71\x88\xd1\x76\x3e\xf3\x1d\x24\x60\x64\x69\xd5\xc7\x96\xfd\xc6\xb4\x22\x3c\x6e\xbb\xd2\x16\x85\xad\x8c\x5f\x3a\x5f\x30\x78\xd6\x81\x9e\xf2\x25\x7b\xcb\x90\x26\x9f\x71\x1e\xca\x96\x07\xe2\xe0\xb3\xee\x89\x5b\xcf\x4d\x4b\x1e\x86\x4b\xfe\x03\x42\xfe\xd1\xe1\x1f\xc9\x2f\x5b\xad\xae\xbd\xf7\x22\x9f\x9a\x3c\x7c\x6a\xf2\x87\x63\x00\x9a\x75\x01\x1c\x4c\x5a\xcb\x97\x85\x93\x27\x06\xc7\x69\x0d\x23\xf6\xd0\x5b\x88\x18\x9b\x32\x24\x94\x85\x6a\xe4\xf7\x92\x1b\x32\xc6\x75\xdd\x2f\xb2\x1c\x40\x9f\xf8\x00\x0e\xf6\xb6\xa3\x37\xc4\xbd\x84\xe9\xc5\xa5\x16\xfa\x75\x43\xaa\x4b\x64\xd2\x0a\xce\x7e\x56\x4a\x17\x67\x1b\x06\x3f\xe7\xcf\xa3\x4f\xce\x74\x43\x84\x05\x71\x30\x69\x51\x5a\xfb\x2c\x6f\xd9\x5b\x62\xe5\x49\xcd\x7f\x52\x6a\xdd\x09\xa5\xf9\x20\xb8\x5b\x95\x34\xc8\x5e\xd5\xe5\x6a\xe9\x99\x45\x04\xcd\x66\x20\x0e\x26\x2d\xab\x96\x36\x4f\x74\xac\x07\xe9\xd2\xb4\x8b\xfc\x7a\x63\x74\x05\x99\x65\xc6\xdb\xbe\x92\xc6\x26\xc5\x23\x7b\xb6\x65\x6d\x99\xb2\x08\x69\x81\x38\x84\xb4\xce\x67\xbe\x83\x7c\xd1\x7f\xa9\xf9\x6e\x1f\x62\x19\xea\x33\xa5\xd7\xef\x67\xba\x38\x1e\xa1\xcb\xef\xc1\x57\xd8\x5f\x8b\xd3\xa6\xb9\x43\x16\xad\xd7\xd3\xf1\xf4\x0c\xd1\x7c\x10\x07\xfb\xb1\x3c\xae\xb4\xbc\x9e\xfc\x7f\xac\xbd\x65\x54\x55\xcf\xfb\xff\x8d\x4a\x87\x80\x20\xdd\x20\x29\x20\x29\x48\x08\xd2\xdd\xdd\x2d\x9d\x22\x4a\x87\x84\x74\x49\x87\x34\x08\x28\x28\xa8\x80\xd2\x29\x20\x21\xdd\x25\x22\x20\x82\x94\xe4\xfd\xe8\xec\xfb\xf3\xdf\xfc\xd6\x1a\xd6\xf2\xfb\xfc\xb5\xae\x99\x33\xd7\x7b\x9f\x3d\x7b\xde\x33\xd7\x60\x59\x4e\x90\x36\x7e\xa4\xc8\x62\xe4\xe9\x5f\xad\x48\x1c\xfc\xb5\x27\x82\xfa\xe9\x9a\xf3\xf8\x55\x09\x2c\xe8\x76\x41\x10\x07\x93\x56\xad\x9f\xb8\x81\x19\x9e\x55\x55\x0f\xab\xf7\x2a\x6f\x4e\x69\x88\x93\x63\xcf\x6f\x5b\xd3\xa6\x2f\x8c\x8e\x63\x09\xfc\x12\x12\xd0\x32\x0f\x88\x83\x3f\x08\x89\xfd\x4e\x48\xab\x7a\xc9\x74\xe4\x61\x0a\x42\xc5\x52\x39\x49\xcd\x93\x7a\x27\x81\x75\x72\x73\x59\x83\xf4\xf7\xd4\x6f\x1d\x43\x0f\x02\x80\x83\x49\x8b\xa2\x7e\xc8\xb4\x14\x29\xcd\x93\x3d\xc0\xbd\x26\x2f\xa8\x49\x2c\xc1\x4a\x0b\x39\xf1\x9e\x72\xc6\x5e\xbb\x41\x53\x84\xe2\x34\x3d\xb4\xde\x09\xe0\x60\xd2\xba\xf4\xc9\x77\xc9\x0f\x1a\xbf\x8d\xc3\xfe\x1e\x9d\xfa\x9b\xef\x2a\xbc\x3a\x59\x31\x63\x11\xdb\x17\xe5\x1e\x2b\x3f\x1b\xb1\xb7\x8b\xf7\xcf\x2c\xf8\xaf\xf9\xde\x2b\xcc\xbe\x95\xba\xdb\x85\x8d\x7f\xf8\x8d\xcc\x13\x5b\x40\xc4\xf9\xb5\xed\x0b\xc9\xb0\x58\x85\xdf\x3d\x61\xf1\xe4\x9f\x06\xb4\xff\x83\x9e\xc7\x18\xc6\xb6\xbd\x12\xc7\x34\x28\x9c\xb6\xb8\x69\xd8\x3c\xfd\xe0\x53\x6f\x8f\xcf\x43\x35\x53\xa7\x50\x9d\xac\xab\x2f\x8c\x24\x61\xe6\x3b\x28\xf2\x45\xf3\x3d\xf6\x2f\x53\x8c\x58\xf5\x0c\x09\x71\x12\x3a\xed\xe3\x3d\x9b\x06\x14\xae\xf0\x5f\x5a\x9e\xef\x17\xe7\xf2\xf2\x63\x1d\x1b\x0c\x3b\xfe\xbb\xc7\xe5\x5d\x81\xbd\x2c\x9e\xb1\x53\x13\x71\xb0\x33\x6b\x86\xea\xd1\xf2\x8d\x7c\x9b\xb0\x2a\xdc\x87\xcc\xa8\xe1\x8f\xb1\xa3\x76\xbf\x43\xe6\x3b\x28\x26\xe2\xce\x77\xb8\xf9\x4e\xdd\x7e\x9d\xa3\x39\x8b\x5b\x6e\x5b\x49\x69\xbe\xba\x90\x18\xeb\x86\xfd\xdf\x96\x90\xf9\x0e\x61\x92\x85\x22\x7f\xdf\xe3\xcf\x78\xff\x3c\xc1\x69\xba\x60\xbe\xf7\x3a\xe0\x8e\x99\x64\x9c\xfb\x33\x17\xbb\xbf\x16\x60\x7f\x4c\x46\xef\x57\xf7\xfd\x9a\xc2\x5c\xf1\xeb\xdf\x16\x43\xf7\x4a\x47\x45\xfe\xbd\xc9\x0b\xe6\x7b\x49\xcc\x83\xbf\x5b\x8f\xf3\x72\xf7\x28\xc2\xb6\xf1\x3d\x6a\xc3\xf1\xa2\x84\xbe\xc7\xe8\x91\x9e\xf5\x2e\xe9\xc9\x24\xaa\xb7\xdd\xf9\xf7\x26\x2f\x98\xef\x56\xe7\x22\x0f\xa8\xd2\x55\xbe\x05\x71\xff\x4a\xaa\x40\x4f\xab\x8b\x5b\x8e\x32\x77\xae\x17\x50\x67\x27\xf4\xa7\xba\xd9\xba\xf7\xeb\xdf\x9b\xbc\x60\xbe\xbb\xe4\xdb\xb0\xdf\x08\x69\x92\x12\x54\xa6\xfb\x3d\xb6\x1d\xd1\xf3\xe1\x31\xb5\x07\x79\x79\x4c\x76\x09\xcd\x3d\x41\x9f\x1a\x8f\xbe\x7f\x6f\xf2\x82\xf9\x7e\xbc\x63\xd4\x96\x4d\x9c\x1b\x31\x82\x3c\xe1\xe0\x15\x22\xf0\xed\xe3\x2d\x31\x35\x4a\x06\xae\xa6\xd1\x33\x14\xdb\x24\x8b\x10\xa4\x7f\x6f\xf2\x82\xf9\xbe\xee\xba\x6d\x46\x2a\xdc\x3e\xd2\x13\x72\x7b\x1a\xbb\x4a\xc3\x29\x99\xed\xbb\x5d\xbf\xad\xf2\x38\xce\x5f\xfa\xb2\xb0\x47\xd7\x7a\xfe\xbd\xc9\x0b\xe6\xbb\xb2\x5d\xd5\xc6\x94\x23\xb9\xf7\xb2\x87\xd7\xbc\x4e\x65\x55\x7f\xf6\xbd\xd3\x3a\x99\x2a\xef\x26\x9e\xb6\x74\x39\x89\x67\x65\x99\xff\x9b\x29\x39\xe8\x51\xbc\xf8\x72\xbb\xa1\x1a\xca\x9f\xb9\x6a\xe0\xd1\x50\x3b\x72\x63\xcf\x7e\xae\x43\x9a\xc9\xd5\x59\xe2\xee\x4f\x35\x6b\xde\x13\x9e\x83\xb5\x70\xe8\xce\x77\x10\x07\x7b\x5d\x88\xf7\xd2\x8f\xbe\x1c\xa1\xea\x7d\xa6\x1a\x22\x90\xc8\x51\x4c\x45\xa4\x3f\x88\xa4\x86\xd9\xc0\x5e\xff\xb2\x37\xdd\x5f\x79\x0a\x2a\x0c\x0d\xe2\xe0\xcb\x76\xb6\xd3\x06\x1f\xbc\x55\x78\x65\xe7\xcd\x98\x71\xc3\xe5\x3b\x92\x37\x19\x74\x7b\x0a\x5f\x27\xc5\x3d\xbf\x6b\x9c\xf1\x70\x0c\xaa\x1a\x05\xe2\xe0\x1f\x10\x7b\x5d\xec\x8d\x67\x98\x45\x77\x09\x9f\x27\xd1\x92\x6e\x46\xa1\xb6\x3b\x6c\x87\xa3\x70\x1f\x18\x04\x68\x90\x3f\x6c\x5a\xd1\x86\x3e\x20\x00\x5c\xb0\xf8\xd5\xff\x86\xfd\x93\xf0\xf8\x4a\x72\xbf\x82\xba\xd6\xb4\x64\x55\x41\x5d\x4d\x77\x19\x9d\xf8\xd3\x9f\xa7\x5a\x3d\x77\x1d\x5f\x96\x60\x4c\xe8\x41\x6b\x97\x20\x0e\x96\x32\xe7\x97\x19\x89\x0a\x3d\xe7\xbe\x44\x93\xc7\x0a\xab\x2f\x9a\x73\x0b\x31\x7b\x92\x55\x06\x03\xb5\x24\x34\x8d\xc2\x4b\x66\xb9\xda\x11\xe6\x3b\x88\x43\xdc\xf9\x7e\x29\xf3\x1d\xf4\x8f\xfb\x7f\xec\x59\xbc\x76\xa2\xfd\xa6\xf4\x37\x56\xa7\xe8\x08\x2d\x2d\xed\xa4\x87\x50\xbf\xad\xaa\xc2\x71\x0a\x05\xda\xe3\xcf\x15\xf7\xff\x12\xb3\x43\x7b\x16\x01\x1c\xfc\xd0\xf7\xc6\x83\xcc\xd3\x0f\x03\xda\xbc\x46\x8e\xe2\x3c\x41\xf3\x31\xd7\x62\x90\x96\x5f\x0e\x6d\x2d\x97\x85\x15\x07\x04\x3a\xdf\xd3\x80\x0e\x7d\x03\x38\xf8\xc5\xdc\xce\x9a\x6f\x90\x4a\x58\x69\x33\x68\x3f\x53\x9c\x49\x9e\x73\x5d\x63\x17\x94\x0a\x2d\xcc\xb2\xce\xd7\x98\xdc\x33\x9f\x54\x87\xcc\x77\x10\x07\xeb\x6d\x51\xc4\x8c\x7f\x63\x0e\xee\x6b\x6d\xf7\x5f\x13\x69\x1f\x8c\x13\x35\x46\x09\xb4\xcd\x0d\x58\x1f\xa6\x59\xfc\x12\xe2\x14\x7f\x03\xd9\xc4\x20\x0e\xa6\xac\xd8\xcf\xdd\x66\x77\xec\xb6\xbf\xd5\x2d\x2b\x5d\x15\xcc\xe5\xcf\x66\x08\x34\x92\x10\x8c\x44\xa9\x5b\xb2\xd9\xf8\x28\x81\x6d\x7f\x86\x08\x0b\xe2\x60\x29\xbb\x35\xad\x7d\xe3\xdd\xcc\xf8\xc9\x84\x08\xd7\x6b\xa3\xbb\x9e\x3d\x55\x1c\x6a\x81\xbe\x6c\xd1\x3b\x85\xa8\x5a\x1f\x59\x7f\xee\x18\x22\x66\xe4\x20\x0e\x71\x11\xd4\xe5\xcc\x77\xd0\x9b\xf5\xa2\xb4\xea\x1b\x33\x6d\x23\x9a\xdb\xac\xd4\x38\x23\x3f\x31\xa4\x8b\x23\xef\x8f\xf2\x6d\xa4\x93\xea\x54\xa8\xb5\x0f\xb6\x14\xdd\x0f\x80\x96\x58\x41\x1c\x2c\x59\x79\x7a\x46\xaf\x17\x16\x2a\x6f\xa4\x17\x7f\x29\x79\xbd\x8f\x7a\xe5\xd1\xb8\xac\xda\xac\xc4\x9b\x46\x6a\x32\xa3\xa5\x78\x2f\xbd\x3a\xc8\x1c\x04\x70\x30\x69\xc5\x9e\xdc\x67\x4d\x3c\x2b\x91\x1a\x36\x71\xe3\xf3\x57\x1f\xb7\x9e\xca\xdc\x69\xd2\xfc\xa0\x64\x4d\x65\x30\x96\x78\xae\x55\x4d\x0b\x25\x0b\xc0\xc1\x7a\xdb\xc5\x2f\xff\xd0\xe8\xdd\xad\x21\x5e\x57\x0d\xbc\x0c\x63\x97\x0e\xd5\x3d\x7c\x37\x37\x5b\xb1\x97\x15\xb2\xbf\x9c\x27\x33\xb8\xa0\xdb\xb0\x40\x1c\x4c\x5a\xab\xf8\x53\x69\xb8\x47\x15\xc9\x81\x3d\x6f\x4b\x13\xb9\xef\x23\x27\x30\x69\x32\xcd\xf7\xd0\x13\x1c\xaa\x9a\xd6\xe4\x11\x44\x40\xb5\xc1\x41\x1c\x5c\x5a\x43\x15\x96\x2f\x05\x45\x8c\x79\x4a\x88\x6f\xec\xd5\x1f\xb8\xd9\x97\x19\x1e\x60\xbc\xb2\x1b\xbc\xeb\x67\x1a\x3b\xd5\xba\xc1\x0f\x49\x0b\xc0\x21\xa4\x75\x39\xf3\x1d\x34\x83\xba\x28\xad\x7e\x6b\xa1\x4f\x37\x92\x45\x48\xf8\x03\x5f\x91\x32\x9f\xff\x56\xb9\x61\x80\xc9\xcd\x19\xcf\x6b\xfb\x8b\x95\xe3\xcf\x23\xdf\x9f\xd0\xde\x1e\x10\x07\x4b\x56\xfe\xf5\x31\xae\x27\x2e\xfe\x8a\xe7\x64\xc6\x75\xaa\x2e\x39\xe4\x1a\xa9\xc1\x09\x5f\xbc\xcb\x85\x5e\xad\x2a\xd5\x14\x59\x5b\x7d\x41\x84\x05\x71\x30\x69\xd9\x2e\xca\xf2\x5a\x67\x8f\xe0\xfc\xf8\xec\x5d\x48\x3a\x17\xff\x92\x2c\xcb\x3d\x7a\x4c\x3b\xff\x83\x09\xd6\x0b\x5a\x25\x81\x46\x16\x44\x58\x10\x07\xeb\x6d\xa9\x93\xc2\x53\xd5\x67\x4b\x34\x8f\x59\xd6\x31\x55\xc4\xcd\x5f\x52\xf6\x9d\x50\xa1\x5e\x1f\xcb\x51\xf1\xe2\xb6\x44\x3a\x5f\xd7\x43\x84\x05\x71\x30\x69\x6d\x7d\x4f\x66\x12\xd0\x7a\xc0\x2a\x7f\x0f\xf9\xf1\xf4\x67\x1c\x89\xb5\x57\x8f\x5f\x7b\xab\x9c\x89\x4a\xd5\x0d\xd9\xbe\x8d\x08\x82\x3c\x7d\x10\x07\x2f\x7a\xf8\x92\xc6\x65\x70\x7b\x68\xbe\x88\xb2\x55\xf4\xf6\x0a\xdf\xac\x00\xed\xf6\xdd\xbd\x13\x97\x2b\x55\x27\x1b\xe7\xb3\x65\x53\xb5\x08\x69\x81\x38\x84\xb4\x2e\x67\xbe\x83\x66\xca\x17\xa5\xc5\xc1\x42\xf2\x82\x31\x9c\xe0\xa9\x35\xdd\x8d\xac\x34\x7b\xeb\x9c\xc3\x89\x38\x63\x19\xc2\xa6\x58\xcf\x6b\x25\x3d\x8a\x8e\xfa\x50\x51\x05\x10\x07\x4b\xd6\xe8\x77\xc5\x81\x2b\x2f\x17\x86\x09\x38\x9f\x1c\x54\x32\x68\x0d\x3b\xc5\x5d\x9d\x66\xa1\x42\x3b\x1f\x08\x1c\xe5\x2d\xc7\x8b\x86\x3e\xf8\x41\x1c\x4c\x5a\xf5\xa8\xaf\xd2\xa4\x09\xcf\x68\x7e\x3e\xa3\x5c\xd2\xec\x75\x61\x18\x5d\x6a\x6b\x53\xfd\x8e\xbd\xcf\x19\xb5\xda\x31\x6c\x85\x73\x1d\xfa\x8f\x05\x70\xb0\xde\x7e\x76\x56\x38\x7b\xf6\xfc\x03\xae\x48\x65\x1c\x6a\x5a\x48\x9e\xda\x23\x3b\x7b\xae\x3f\x37\x7d\xdf\x94\xde\x93\xe2\xcb\xeb\x0b\x83\xce\x06\x80\x38\x98\xb4\xd6\xfd\xe3\xc9\xda\x0d\x5c\xba\xfd\xbf\xe9\x3a\xfb\x3e\x7c\xe3\x10\xb5\x4a\x9a\x98\x5a\x82\x1a\xee\x6b\xfe\xfc\x8e\x54\x7c\x28\xb4\xaf\x03\xc4\xc1\x52\x26\xaf\xc0\x83\xb2\x2d\xbb\x1c\xbf\x82\xdb\x41\x1c\xc3\xd2\x77\xce\x3e\xc9\xc0\x67\x77\xbe\x99\xf1\xf2\x8a\x4d\x76\x3c\x06\x1b\x74\x3e\x04\xc4\x21\xa4\x75\x39\xf3\x1d\xf4\x45\x74\x51\x5a\xda\x06\xad\x9d\x58\x81\x69\xbf\xa3\x05\xde\x2b\x8d\x5d\xf9\xc0\x59\xbf\x94\xa9\x4a\x9f\x61\xf8\xca\x57\xad\x71\x9a\x17\xa3\x11\xda\x32\x04\xe2\xe0\x47\x8f\xc6\x98\x06\x56\x77\xe2\x08\x97\x27\xc7\x37\x0e\x23\x1e\x1d\xa9\x90\xe2\xca\x3c\x7d\xc2\x1b\x33\x3e\xf3\x58\x99\xf5\x26\x96\x2a\x74\xf4\x08\xc0\xc1\xa4\x85\x5c\x3a\x69\xa0\x9c\xf5\x71\x97\x56\x9d\x42\x5d\xc7\xef\xb9\x92\x69\x69\xaa\xd6\xee\x9f\x94\x57\x1b\xfc\x2a\x18\xed\x58\x35\x50\x81\x4e\x10\x07\xdf\x85\xa2\x8e\x16\xa1\xab\x26\x96\x2b\x98\x53\x56\x53\xd7\xd5\xc5\xdb\xfa\xd4\x5d\xa0\x39\xdb\xbb\xaf\xe3\x76\x3a\x71\x75\xbf\x31\xb4\x85\x16\xc4\xc1\xa4\xb5\xf9\x5c\x26\x2c\xb1\x18\x53\x9d\xed\xaa\x1b\x86\x96\x66\x97\xb0\x86\x7c\x1d\x35\x76\x5f\x4a\x75\x3d\x1a\x83\xd4\xd5\x61\x2b\x68\x16\x0f\xe2\x60\x29\xf3\xc0\x7c\xd8\xaa\x65\xe0\xff\x50\xfe\x11\x6b\x7c\x10\xa6\xfb\x44\xfa\x95\x80\x2e\x69\x19\x37\xe6\xdf\x3e\x58\x85\xec\x9b\xa7\x68\x08\x69\x81\x38\x84\xb4\x2e\x67\xbe\x83\xbe\x7c\x2f\x4a\x2b\xb5\xeb\x28\x77\x24\xb6\xfa\x9e\x12\xe7\xf9\xc2\x27\xb6\x5b\xd5\x13\x77\xd1\xee\x70\x84\x8b\x7d\x43\x2f\x6d\xe3\x45\xb9\x61\xa6\x0b\x9d\xbc\x02\x70\xb0\x64\xf1\xe4\xc8\x7f\x9a\x91\x5a\x0d\xd5\x55\x23\x4e\xa8\xa0\xfd\xfc\xec\x33\xeb\x3d\x6c\x3b\x27\xfd\x03\x1a\x8f\xe4\x0f\xa8\x9e\x47\x90\xe7\x08\xe2\x60\xd2\x7a\x89\xde\x8a\x1e\xdd\xfe\x46\xfc\xba\xea\x9c\x83\x97\x0e\x61\x55\x36\xfb\xb9\x29\x93\xdd\xf4\x9f\x64\x46\xc7\x7b\xd7\xdf\x8b\x43\x67\x84\x40\x1c\xac\xb7\x52\xb8\xa1\xc1\x16\x1d\xbb\x0c\xb6\xc9\x79\xfa\xd7\x4c\x05\xf3\xb4\x31\xb3\x95\xb2\xa6\x96\xe5\x74\xea\x8b\xbe\xd5\xd7\x2c\x7c\x83\x8c\x57\x00\x07\x93\x56\x48\xf0\xf7\x13\xe7\xa2\x87\x1c\x89\x5b\xf9\xe9\x24\xc1\xfd\x5c\x0d\x74\x83\x74\x84\x8c\xa5\x35\x15\xbd\xd7\x55\xf6\xaa\x76\xa0\x85\x75\x10\x07\x4b\x59\x1e\x6d\xeb\x32\x7a\x87\xc9\x8e\x5b\x80\x95\xb1\x46\xd7\x7c\x96\x7e\x8e\xc1\xce\x6c\x1e\x8e\x25\xc3\x3c\x83\xe6\x11\xdf\x72\x38\x42\x5a\x20\x0e\x21\xad\xcb\x99\xef\xa0\x15\x8e\xff\xe3\xc0\x64\xb5\x8d\x56\xad\xd6\xc2\x6c\x58\x5a\x70\xe9\xd3\x8f\xa9\x1e\x71\x5d\x8a\xac\x1f\x72\xa5\x75\xe5\xdb\xff\x2e\xc8\x3e\xe4\xf8\x0a\x1d\x98\x04\x70\xb0\x64\x45\xf1\x1a\x5c\x1d\x4d\x34\xe0\x8a\x92\x71\xea\xb0\x10\x22\x33\x3e\x1e\xdb\x1a\xad\xe6\x47\x8a\x4d\x5e\xb1\xb7\x90\x61\x26\x81\x1e\x58\x10\x07\x93\x96\xc3\xaa\x2f\xb7\x46\x9b\x9a\xef\xf9\xb5\x21\xd6\x2c\xe1\x9a\xaf\xcf\xaa\x64\xf0\x52\x8f\x15\xa7\x64\xda\x43\x5a\x42\xd8\x7c\x07\xa1\xfd\x5d\x00\x0e\xd6\xdb\x58\xe9\x32\x7f\x82\x4f\x37\xb4\x4d\x9f\xf1\x74\x93\x06\x7b\x95\x8e\x4c\xd5\x3e\x88\x12\x2d\x1b\xc2\xe7\xf5\xdc\x35\x38\x4e\x82\x8e\x77\x82\x38\x98\xb4\x6c\x4c\xb8\x13\xeb\xac\x0a\xb9\x9e\x4b\xbb\xb3\x14\xfc\x2c\x2f\xf5\x9b\xd0\xf2\x8c\xa4\x76\x2b\xc1\x9e\x41\xbb\x35\xea\x75\x08\x7d\x7d\x83\x38\x58\xca\x7e\x64\x5a\x89\x2a\xae\xfa\xde\x9b\xbe\x66\x99\xfb\x47\xf3\xad\x6c\xd8\x08\xc6\x5d\x9d\x07\x9e\x6f\xd7\x22\x71\xd2\xe6\x2d\xaa\xa0\xed\xd9\x20\x0e\x21\xad\x4b\x9a\xef\xa0\x35\x6c\xc4\x9d\xef\x17\xcc\x77\xce\x98\x03\xc2\x68\xd5\x3d\x24\xe7\x9f\xca\xeb\xb5\x7d\x7d\xc8\xa1\x8a\x1d\xb6\xc7\x3c\x7f\xa7\x63\xb9\x32\x1e\x2a\x09\xc7\x12\xff\xfb\x4a\xdf\x05\xf3\x1d\x29\xfb\x21\xdf\xdb\x85\x8e\x6c\x75\xc9\xf6\x4a\x1c\x15\x4d\xaf\x55\x9a\x97\x8e\xcf\x9b\x85\x4c\xcf\x03\xe9\x6d\xf5\x04\xec\x5c\xfe\x37\x2b\x7d\xa0\x1f\x76\xf1\x69\x33\xce\x20\xde\x09\xcf\x09\xed\xc9\x52\x4f\x95\x1d\x92\x4e\xc3\xf1\xce\x63\x50\xee\xba\xf2\x6a\x2b\x05\x83\x60\xdf\xfb\xe3\x57\xe8\x74\x36\x88\x83\xe9\x97\x2d\xa8\x9b\x40\xa7\x29\xe1\x98\x82\xb1\x4c\x27\xd0\xf2\x16\x6d\xfc\x82\xd4\x75\x71\xb7\xda\xe6\x40\xf3\xc4\x64\x82\x96\x0e\xe8\x62\x6e\x10\x07\x7b\xda\xf8\x92\xc5\xec\x0d\x42\x37\x66\x7d\xf5\x89\x8e\xd6\xf6\x59\x5b\x1a\x6c\x5f\x85\x21\xb5\x4c\xd3\xa0\x51\xa0\x15\xae\x3b\xbe\x86\x0e\xd4\x83\x38\x78\x31\xca\x2a\x75\x2b\x17\x42\xf2\x29\x7a\xe2\x08\x42\x8b\x95\xab\xe5\xca\x77\x7e\x07\x5b\x38\xb5\xa8\xdc\x39\xb7\xef\x3d\xf9\x60\xf3\x06\x7a\x99\x03\x38\xd8\xd3\x56\xa4\x2a\x6c\x72\xf8\xe1\x26\xc9\x77\xbf\xa6\xfd\xf8\xd5\x04\xb9\x66\x51\xc6\x03\x11\xa9\xd7\x8b\xb6\x8e\x52\xa2\x2b\x1d\x9c\xd0\xe6\x2c\x10\x07\xaf\xb9\x6d\x93\x58\xd9\x92\xf0\xc0\xc1\xe2\xae\x92\x74\x72\x95\xed\x35\x2b\xbc\xbf\x84\x0b\x24\xf4\x52\xb7\x52\x8f\x8f\x8e\x45\x62\x0b\xa1\xda\xe0\x00\x0e\xf1\xb4\x5d\xce\x7c\x07\x09\xf8\xa2\xb4\x2a\x6f\x62\xf4\x76\x0d\x6e\x6c\xdd\x78\x2d\x7c\x6b\xaf\x7f\x32\xc1\x53\x88\x54\x53\x02\x5d\xbc\xe4\x73\xe5\x52\x4d\x23\x26\xaf\x1a\xe2\xe7\x83\x38\x58\xb2\xd8\x23\x84\xdf\x48\xd8\xcc\xbd\x1a\x67\xef\x4a\x98\x59\xa0\x6e\xc2\x22\x3b\x0c\x7d\x3d\xae\x91\x8e\x6c\xe4\xab\x79\xbb\x27\x15\xaa\x9d\x09\xe2\x60\xd2\xb2\xe1\xbb\xf7\xa1\xaf\xc4\x4e\x97\x86\x40\x03\xb9\x79\x8e\x20\xca\xf6\x66\x91\xa2\x24\x72\xdb\xa2\x55\xd6\x17\xd4\x5e\x32\x9d\x29\xe8\xaf\x11\xc0\xc1\x7a\x3b\x92\xc3\xce\xb7\x33\x5a\x79\x3b\xe2\xda\x59\x2e\x91\xf9\x10\xb2\xd0\x5b\x41\x5f\x8d\xa5\x96\x77\x0a\xbb\x7b\x92\x87\x64\x59\xd0\x51\x2b\x10\x07\x93\xd6\xa4\xee\xf6\x2b\xab\xbd\x03\xf2\x2f\x13\xf8\x4c\xe9\x44\x67\x1e\x81\xb4\xeb\x8e\xca\x68\x57\xa7\x5d\xef\xa5\x92\x6e\xf2\x3e\x82\x56\x10\x41\x1c\x2c\x65\x22\x3c\x1d\xb1\x84\x45\xa7\x72\x8f\x1e\x5e\xdd\x35\xc4\xe0\xfd\x72\x53\x6c\x92\xab\x77\x25\x3f\xd4\xb6\xb1\x0d\x49\xfe\x83\xfe\x22\x42\x5a\x20\x0e\x21\xad\xcb\x99\xef\x20\x5f\xf4\xa2\xb4\x36\x5a\xb6\xb0\xd7\x56\xdb\xe9\x3a\x74\xfd\xe2\xbe\x62\xac\x74\x78\xe1\xbd\x72\x28\x31\x1d\x8c\x14\x40\xf1\x9a\x56\x21\xe6\x86\xae\x9f\x00\x71\xf0\x7a\x02\xaf\xc9\xe3\x6f\xf4\xfe\xcc\x35\x31\x27\x9b\x5f\xfd\xca\x39\xfc\x52\xb5\xe9\x75\x8d\x88\x62\xb8\xf8\x0d\xfc\xf2\x39\x7b\x71\xc8\x7c\x07\x71\x30\x69\x29\x3c\xe5\x43\xe3\x1a\x31\x0e\xf8\x75\x5f\x71\x6d\x36\x65\x19\x3d\x8b\xde\x69\xe3\x7c\x29\x60\x6c\x8d\x57\xef\x39\xdb\xf2\x5d\xc8\xf6\x00\x71\xb0\xde\x12\x74\xaf\x71\x30\xc5\xe6\x1e\x2b\xcb\xee\x8a\x59\xc8\xba\x1e\xfd\x58\x3d\xf2\x98\xf6\xa8\x5b\xce\x0f\x7c\xa2\xb1\x94\x10\x7a\x0f\x11\x16\xc4\xc1\xa4\x75\xab\xfb\xd1\xa1\xb0\x36\xd7\xcd\x14\xdf\x8f\x53\x33\xb7\x43\xf3\xf6\x78\xf3\x0f\x5f\x33\x2f\xe7\x6d\xd0\xa0\x69\x7b\xdf\x78\xb7\x82\x08\x0b\xe2\x60\x29\xbb\xf4\xc9\xf7\xd6\x23\x0a\xbb\xcd\xfb\x62\x8b\xd1\x5e\x33\xe3\xf7\x75\xf1\xf8\x70\x8f\xd5\x12\x9e\xd2\x19\xa3\xd8\xa2\x88\xe9\x45\xf7\xff\x52\xf8\xaf\xf9\xfe\x8b\x90\xff\x53\x97\xf5\xad\xb4\x65\x2f\x6b\xc9\xd5\xe7\x46\x87\x94\x58\x96\xa8\xa1\x1b\x46\xc8\x1f\x8c\x65\x84\xee\x86\x74\x2c\xfd\x07\xbd\x6a\x67\xed\xe3\x1d\x90\x7e\x87\xe3\x38\x64\x72\x8f\x17\xe3\x7e\x13\xa1\xa6\xbf\x4c\xfc\x0c\xf9\xfb\x07\x33\x25\x25\xf4\xef\x6f\xc3\xcc\x77\x50\xe4\x8b\xe6\xbb\xe3\xc0\xb3\x4f\xc3\x44\x14\xee\xdb\x82\xb7\xdb\x4d\xbe\xae\x68\x92\x44\x3a\x0f\x87\x8d\x7f\xf2\xed\x7f\xe0\x6c\xe1\x7d\xbf\x3b\xe6\xbf\x43\xfc\xf2\xe1\xf9\xe8\x91\x5f\x88\xa9\xbf\xa9\xa1\xf5\x10\xe9\x98\x73\x2a\x2b\xb3\x57\x88\x70\x22\x59\x38\x0d\x32\xa5\xc4\x96\x13\x64\xbe\x83\x62\x22\xee\x7c\x97\x87\xcd\x36\xa2\xbb\xd6\xae\xaf\xba\x75\x28\xa6\x64\x2a\xb2\xeb\x91\x7b\x16\x50\xf7\xe4\x6b\x1b\x52\xcf\x1c\x2d\x25\xf4\xbc\xff\xa5\x93\x26\xfe\xcf\x13\x1c\x24\xfe\x0b\x47\x97\xa9\x44\x8f\xa9\x8c\xe9\x0f\x0e\x1e\xcd\x12\x90\x6f\x35\x9b\x4e\xe8\x5a\xd4\xc8\xcc\xf2\x05\xde\x1d\x2c\x98\x0b\x6c\x48\x9d\xfa\xf7\x26\xd5\xe1\x4d\x1e\x32\xb7\xd8\xb2\xac\x6d\xac\x74\x4f\xb5\x29\x50\x84\x46\xa6\x36\x39\x49\x13\x95\x1d\x0f\x9a\x77\xf7\xb0\x07\xca\xc9\xcc\xd5\xfd\x7b\x93\xc6\xf0\x26\x65\x32\x69\x6e\x9e\x57\x9a\x55\x61\x6b\x74\xb8\xf9\xbf\x69\xc4\xf4\xb2\xf3\x53\xee\x29\xb1\xf4\xcc\xee\x9e\x18\x0c\x98\x51\xfb\x77\x8f\x18\xe9\x29\xbc\x49\xbd\xdf\x5b\x5d\x12\x95\x2a\x63\x0e\xd3\xf1\x39\x98\xf2\x56\xe2\xe3\x4d\xdc\x8f\x33\xed\x8f\x03\x64\x2b\x4c\x70\x14\xeb\x31\xfe\xbd\x8a\x01\xd2\x0b\x78\x93\x89\x8a\xdb\x39\x41\x77\x50\x13\x35\x22\xa3\x0f\x8d\xf1\xdd\x3c\x5b\x9d\x0f\x6b\x59\xac\x14\x07\x8c\x6a\x2a\x36\xa8\x59\xa3\xfc\xff\xbd\xc9\x6a\x78\x93\x16\x4a\x2f\x2c\x93\x68\x62\x69\x3f\x49\x30\x20\xf3\xa4\xf2\x97\xc4\x09\x49\xc6\xa7\x72\x1d\xdd\x89\x2b\xec\x91\xb7\x3e\xec\xbc\xfb\xef\x4d\x7e\x86\x37\x69\xa4\x18\xe3\xfa\x71\xc8\xe2\x36\xb9\xc0\x6e\xa8\xa8\xed\x63\x5f\x41\xb7\x63\xcd\xef\x7b\xb6\x14\x92\xcc\x57\xaf\x2b\x84\x23\x0d\xfd\x6f\xa6\xe4\xa0\x47\xf1\xe2\xcb\xed\xae\xc8\x23\xfa\xec\x18\xaf\x8e\x71\x17\x85\xb1\x61\x89\x84\x4f\xe1\x46\xfd\xcf\xb1\x7f\x07\xa4\xb5\x9f\x73\xa5\x71\xa7\x6e\x5b\x22\xfe\x80\x41\x1c\xec\x75\xc1\x40\x53\x31\xc7\x54\x28\xb9\xeb\xf9\x6d\xf5\x55\x4f\xd9\x42\x79\xc3\x40\xb8\x42\x18\xf7\x19\x06\x2b\xdb\xd3\xdb\x25\x1d\x03\xd0\x56\x50\x10\x07\x7b\xb9\xe1\xa8\xaa\x27\x1c\x93\x97\xb8\xd2\x57\x7c\x26\xfd\xf1\x53\x5d\xbc\xac\xad\x2f\x92\x52\x8b\xb5\x8c\xaa\x8c\xc8\xa0\x1a\xab\x21\x0d\x11\x16\xc4\xc1\x7a\x2b\x92\xb7\x76\xf6\x4b\x8b\x8b\xff\x94\xaa\x66\x9f\x7e\x33\xfa\xf7\x75\x3b\x82\xd6\x13\x09\x52\xea\x18\x81\x53\x42\xf6\x43\x03\xc8\x75\x03\x71\xc1\xe2\xc8\xff\xcf\x97\xea\x77\x81\x19\xd9\xaf\x71\x3f\x59\x0e\x86\xed\x2a\x73\x77\x0f\xe2\xe8\x76\xdf\x04\xae\x46\xd2\xc4\x73\xba\x4b\x5c\xbf\xc7\x0b\x79\xfa\x20\x0e\x96\xb2\x10\x67\x19\xcd\x15\x14\xc5\xd4\x87\xcd\x37\xca\x8a\x31\xf6\x8b\xf4\x82\x82\x4e\x49\x39\xbc\x93\xae\x18\xcb\x78\x78\xc8\x0b\xe4\x20\xcc\x77\x10\x87\xb8\xf3\x5d\xfe\x52\x47\x66\x00\xff\xb8\x17\x95\xf5\xdb\x55\x25\x90\xbb\x92\x06\xe3\xc4\x21\x7d\x72\x50\xc1\xf3\xd5\x53\x25\xb1\xcf\xe7\x1b\x1e\x54\xee\xec\x69\xc7\x06\xe8\x4f\xa1\x7a\x49\x20\x0e\x96\xab\xbd\x9a\x3b\xaa\xb6\xeb\xf2\xcc\xcf\x7e\x17\xd0\xbc\x0f\x1c\x78\x52\x8e\x76\xfd\x46\xf5\xeb\x6e\x46\xfe\x55\xb3\x37\xa8\x57\xf1\xe8\xa0\x73\xc4\x00\x0e\xa6\x2c\xec\x2a\xf2\x83\x19\x29\xfc\x5e\x82\xfa\x8d\x32\xf9\xc0\x55\x1a\xac\x54\x23\x63\x5b\x19\x53\xeb\x93\x91\xeb\x1e\xf9\xb3\x28\xd0\xd9\x31\x10\x07\x2f\xe2\x8d\xb1\xde\x55\x64\x9f\x7e\x1e\x9e\x64\x27\x52\xb9\x98\xdd\xf5\x6c\x02\xa7\x3a\x94\x8d\x83\x61\xfb\x53\x17\x05\xc6\x6b\x2f\x68\x79\x0d\xc4\xc1\x94\xf5\x84\xd1\x3d\x79\x96\xe5\x67\x75\xb9\x16\x9d\xb3\x42\x6a\x9f\x6a\xbd\x79\x23\xcf\xa2\xc5\xe0\x83\x83\x17\xea\x8d\xbd\xfe\x2e\x9a\xd0\x4e\x6b\x00\x07\x4b\x99\x8c\x8d\xf7\x47\xfc\x47\xcc\x31\xbf\x89\x3d\xf8\x3a\x73\x12\xa4\x91\xd7\xb3\xfa\x8b\xa9\x91\xde\x97\x33\xbf\xb0\xdc\x94\x71\xd8\x46\xcc\xc8\x41\x1c\xe2\x22\x28\xfe\x4b\xcd\xc8\x41\x6f\xd6\x8b\xd2\xf2\xc3\x62\xc1\x4c\x1d\x62\x8e\x38\xb4\x51\xd3\x40\x6a\x31\xb7\x76\xd8\x4d\x0b\x77\xec\xe9\xe4\xd1\x7c\xfa\xed\xd6\x46\xbb\x08\x54\x3c\x0e\xc4\xc1\x92\x25\x8c\xe6\x23\xf8\x3d\x6c\x5e\xbc\x1c\x77\x0c\x93\xae\x3d\xa5\xb9\xe4\xc4\xf3\x33\x3f\x63\x55\xd9\xb0\x35\x0f\xe6\x08\xa1\x22\x1a\x22\x2c\x88\x83\x49\xab\xe9\xfb\xcc\xc2\xf5\x72\x23\x14\xdb\xa1\x56\xec\x17\xe5\x79\x0e\x38\x23\x89\xc4\xc5\x22\x1a\x7e\xd8\xbb\x19\x38\x7d\xe5\x9b\x90\x3b\x06\xe2\x60\xbd\x75\xa4\x52\x2d\x9c\xcb\x1e\x39\x7e\x5b\xa9\xea\x9c\xc6\xe1\x5a\x9b\x72\x85\xa1\xd5\x2f\x03\x39\xe4\x66\x9a\xf7\x41\x8d\xd8\x0b\x6c\x44\x58\x10\x07\x93\x56\x5e\xde\xe2\x1f\xab\x80\x1a\xbd\x46\x22\xdd\x0e\xca\xa7\x4f\x5c\xcf\x50\x35\x18\x5d\x12\x33\xfc\x5f\x4a\x57\xd2\xb3\x88\xab\x42\xe7\x73\x41\x1c\x2c\x65\x5e\xf7\xbf\x4d\x75\x5f\xdf\x5b\x3a\xff\xdd\xd7\x4d\xb7\xa7\x73\x93\xc3\x62\xf5\xc6\xc9\xa3\x8f\x1d\xd5\x3a\xbd\x44\x4d\xe6\xe9\x54\x08\x69\x81\x38\x84\xb4\xd4\x2f\x77\xc7\x18\x60\x06\x75\x51\x5a\x3f\xfc\x14\xe5\x54\xba\xb9\xe6\xb8\x27\x5d\x1f\x5e\xc7\x37\x71\xc1\x79\x15\xe9\xf3\xb4\xab\xb3\x3d\x4c\x68\x97\x78\xf8\xea\x03\xe8\x81\x05\x71\xb0\x64\x1d\xf1\xe7\x77\x98\x86\x13\xf4\xee\xf3\xf6\x44\xb6\x95\x90\x64\xa3\x92\x58\x67\x3a\x27\x70\xd8\xce\xde\x6c\x62\xf1\xe0\x96\x83\xea\x42\x83\x38\x98\xb4\xd2\x9d\xeb\x2b\x77\x9f\x35\x06\x3d\x4c\x66\xa6\xc9\x78\xec\xfc\x90\xba\xe1\xce\x9f\xf1\xa7\xd2\x05\x68\xed\x22\x55\x58\xb1\x94\xd0\x6b\x16\xc4\xc1\x8f\x25\x4e\x59\x09\xda\x3f\xfb\xe4\xd0\xae\xa0\xd6\x43\x96\xb2\x27\x13\x23\xc2\xd7\xa0\xef\x20\x52\x8f\xdd\xbd\x3a\xd2\xd8\x63\x09\xbd\x0f\x41\x1c\x4c\x5a\xad\xe2\x15\x96\x6c\xd4\xc1\x41\x74\x6a\x73\xc3\xcf\x03\xba\xe7\x5e\x19\x4b\x0a\xf9\xe3\xdc\x92\xaf\x97\xf0\x21\x12\xa6\x24\x82\x3c\x7d\x10\x07\x4b\x19\x66\xcd\xd3\xc7\x54\x4b\xa4\xd3\x8e\x77\xf1\x34\x26\xdd\xa4\x2d\x64\xfc\xa3\x6a\x37\x3c\xf6\x65\x30\xab\xc6\x34\x4d\x46\xbe\x60\x21\xa4\x05\xe2\x10\xd2\x32\xbe\x94\xb4\x40\x33\xe5\xff\xc3\x6b\xc0\xe0\xe3\x23\xf3\x3b\xc6\xdd\x5e\xb3\x76\xfb\x16\x69\x75\x73\x4b\x90\x4f\x6b\x72\xc4\x66\xe3\x01\x7a\x8f\x33\x6d\x5c\x04\x74\xb3\x09\x88\x83\x25\x6b\xe3\xbe\x6d\xeb\x52\x71\x5d\x99\x0c\x8d\xa9\x1d\xbd\xd2\xe1\x7d\x2d\xc1\xdf\xf1\x66\x4f\x22\x14\x55\x78\x4d\xdb\x7f\xaf\x3c\x80\x0a\x6b\x80\x38\xb8\xd7\x90\xd3\xcd\x8b\x76\x85\xb1\x77\xb4\x28\x8b\xd5\xe8\xce\x0e\x21\xa7\x65\xc5\x84\x70\x26\x37\x3e\xed\xdc\x5b\x94\x63\x66\x71\x63\xc8\x6b\x00\x70\xf0\xbd\x73\xa6\x11\x59\xde\x8d\x55\x3e\x8b\x42\x45\x2a\xb8\x05\xcc\x85\xe8\xdf\xbc\x1f\x1e\x64\xb5\x4d\xdf\x59\x12\x24\x4f\x33\x14\xc8\x84\xf6\xce\x01\x38\x98\xb4\xbe\x38\x37\x34\xe0\xee\xb5\x3a\xfb\x4c\xfb\x62\xe1\x7d\x35\xa0\x5b\x0b\x3d\xb3\x22\x23\x95\x75\x98\xb8\x61\xdd\x95\x54\xfd\xe7\x36\x22\x2c\x88\x83\xa5\xcc\xe1\x55\x57\x96\x42\x52\x8c\x91\x54\x94\xca\x20\xc6\x9a\x37\x03\x52\x22\xfd\x39\xd1\x97\x64\x93\x94\xec\xd6\xe5\x9c\x92\x96\xe7\x08\x69\x81\x38\x84\xb4\x9e\x5e\x4a\x5a\xa0\x2f\xa2\xff\xe3\x78\x72\x81\xae\x6c\xa8\xac\xcb\x68\xac\xd7\x20\xca\x8a\x79\xed\xfe\x7c\x8b\x9a\x68\x57\x3f\xf7\x03\x17\x49\xd6\xce\xe5\x07\x19\xe4\xd0\xa6\x54\x00\x07\xbf\xe2\xc7\x23\x71\x58\xc7\xfe\x76\x37\x55\xf0\x0b\x7a\x67\x14\x12\xab\xb7\xa5\x25\xec\xd5\xdb\x8a\xb4\x9e\xa1\xaf\xb2\x0a\xe2\x87\x9c\xa0\x2d\x0d\x00\x0e\x26\x2d\x2e\xb1\xe1\xa7\x2c\x7b\x4c\x57\xba\x29\x6d\xb5\x86\xfd\xf9\xe6\x95\xbc\x54\x97\xcc\x1a\x96\xc6\xec\xab\xe5\xd6\x3e\xf1\x7f\xbb\x01\x1d\xa8\x07\x70\xf0\xbd\x73\xbd\x7e\x5d\x6f\xb0\x0a\xdf\xa7\x62\x3e\xba\x31\x6c\x51\xac\x84\x5d\x20\x4d\xe4\x6a\x48\xf5\xc8\xa8\x41\x80\x23\xc8\x9f\x01\x32\x5e\x41\x1c\x4c\x5a\xd2\xdb\x49\x19\x6f\x9f\xe5\xd4\xa1\xec\x56\x9b\xf1\x95\xe7\x2c\x86\x9b\x12\x71\x90\x68\x29\x1a\x6d\x63\x94\xbc\x3c\x69\xe9\xb5\x45\x84\x05\x71\xb0\x94\xdd\x7e\x73\xca\xa8\xd0\x74\xf5\xa6\x43\x90\x65\x9e\xe5\x80\x50\x8a\x27\x5e\x88\x61\x98\x65\x75\x8a\x63\x1b\xb3\xa8\xf1\xe7\x34\x68\x61\x1d\xc4\x21\xa4\xf5\xe2\x52\xd2\x02\x7d\xf9\x5e\x94\x96\xe3\xf3\xc8\x13\x0f\xdf\xad\x8c\x71\x0b\x85\xc9\x4a\xea\x4c\x99\xb2\x0f\x3a\x59\x2e\x3a\x06\xfd\x07\xbc\xa9\x7a\x0c\x34\x0f\xa0\x7d\x1d\x20\x0e\x96\xac\x43\x6d\xa2\x86\x83\xcd\xd5\x37\xd2\x03\x1e\x5f\x1a\x6c\xd4\x83\x56\xcf\xf2\x5a\x33\xf0\x13\x4e\x71\xc6\xca\xeb\x7f\x48\xb9\x40\x8b\xaa\x20\x0e\x26\xad\x16\x6a\x8f\x29\xfd\xa8\xdd\x8a\x5e\xd7\x68\x02\xa3\x92\xed\xb7\x73\x21\xe3\x84\x18\x93\x64\xdd\x94\x38\x51\xfb\x59\x2c\xdb\xd0\x9f\x21\x88\x83\xf5\x96\x99\x55\xfb\x16\x6f\x40\x09\xbf\x54\xac\x0e\x09\x4f\x04\x7e\x7f\x2b\xf1\x9b\xf8\xf2\xb4\x14\x1f\xc9\xf1\x33\x0d\x73\x39\xe9\x25\x44\x58\x10\x07\x93\x96\x36\x41\x83\xac\xe8\x34\xd2\x89\xe0\x5d\x7b\x23\x14\x8c\xef\x1f\x90\x0d\x17\x5a\x83\x7c\xd2\xeb\x89\xf5\xf0\x22\x4f\x49\x7c\x2c\xa0\x3d\x33\x00\x0e\x96\xb2\xf5\x86\xb9\x64\x62\x0d\xcb\xe7\xfc\xcb\x8a\x11\x6a\xba\x72\x73\x39\x1f\x8a\x57\x53\x68\xc2\xb8\x26\x97\xd0\x3b\x6f\xc7\x74\xaa\x20\xa4\x05\xe2\x10\xd2\xaa\xbe\x94\xb4\x40\x2b\x1c\x17\xa5\xd5\x94\xc3\xb6\xf8\xca\xb9\xc2\x12\x3d\x5a\x1c\x25\x76\x8a\x59\x81\x3f\xdb\xb6\x79\xdd\x38\x37\x4f\xb7\xf2\xad\x41\xa8\x94\x83\x17\x34\x31\x06\x70\xb0\x64\x39\x1c\x86\xb3\xaf\xdc\xd5\x7a\x80\x99\x7e\xc2\x52\x42\x52\x6c\xa7\x55\xbd\xfc\x72\x30\xe6\xe1\x8a\x7d\xdf\x36\xaa\xa0\x9c\xd6\x00\xf4\xe6\x02\x70\x30\x69\x5d\xcf\x09\xe3\x4c\x9d\x59\xbd\x11\x68\x62\x53\x6c\xab\x5c\x88\x7a\x0f\xb9\x9b\x07\x63\x90\x6d\xb4\xf9\xc1\x33\x02\x33\x9f\x4e\xe8\xf2\x5d\x10\x07\xeb\xed\x0f\xcf\xa4\x91\x40\x4a\x27\x9b\xc4\x86\x9f\xab\xc8\x5f\x18\x88\x7d\xd0\xe2\xab\x99\x93\x42\x90\x59\x7a\x42\xca\xbd\x38\xf7\x6d\xa0\x09\x27\x80\x83\x49\x0b\x2f\xe4\xd3\x79\x74\xc7\xb0\xe8\x20\x23\x1b\xff\xed\xe1\xa9\xc9\xc7\xc1\xb4\x28\x12\x43\xd7\xa9\x7a\xcd\x8b\xb2\x4e\x67\xdc\xa1\xca\x12\x20\x0e\x96\xb2\xe6\x9f\x93\x69\xc3\x1d\xc2\xfe\x93\x23\xdf\x8a\xb4\x1b\xe2\x3d\xb0\xc5\xf0\xff\x72\x2f\xc9\x9a\x7f\xf8\x21\x93\xb9\xac\xa0\x84\x87\x90\x16\x88\x43\x48\xeb\xf3\xe5\xcc\x77\xd0\x1a\x36\xe2\xce\xf7\x49\xf8\xb2\xdb\x56\xae\x99\xb4\xaa\xf1\xc4\xda\x79\x15\xa5\x76\x7b\x8c\x7d\x93\x75\x1e\x05\x29\xb1\x1f\xc3\x9f\xdb\x62\x02\xc3\x26\xef\x9e\xff\xfb\xc9\x1e\xa4\x7d\x78\x93\x68\x0b\x6b\xa4\x0d\xb1\x2d\x43\x67\xdf\x34\xaf\x4b\xea\x08\xc4\x32\xd0\x53\xa5\xe4\x30\xbc\xb0\x4a\xdf\x43\xaf\xa8\xc0\x7e\x49\xf3\xbf\x59\xe9\x03\xfd\xb0\x8b\x4f\x9b\xd0\xf0\x4f\xfe\x53\x1c\x7f\xf6\x84\x41\x09\xc6\xc3\xbe\x08\x3e\x2f\x85\xe4\x92\x76\x0a\x56\x1c\x01\x72\xd9\xa6\x45\x42\xda\x75\x84\x22\x40\x1c\x4c\xbf\x75\x94\x4a\x1b\xfd\xe5\x53\xf2\x18\x89\xcc\xac\xa9\x05\xe8\x44\x55\x96\x34\xaa\x04\x8c\x33\x61\x01\x1e\x38\xa2\xb8\x86\xf6\xd0\xc2\x09\x88\x83\x3d\x6d\x84\x96\x7e\x57\x8b\x5d\xd5\x05\x4d\x3d\x91\x89\x6b\x4b\x8b\xe3\x51\xa6\xb7\xa3\x93\x3f\x8f\xe3\x86\xcd\x35\xb8\x50\xd0\x06\x40\x9b\xa0\x41\x1c\xac\xb7\x68\x2c\xc5\xa7\x38\x6f\xd7\x4e\x3b\xb2\x12\x66\xb9\x65\x4c\x2c\x0b\xd4\xaf\x04\x56\x7e\x9c\xfc\x81\x6c\xdb\x8a\x96\xcd\x24\x01\x9d\x7a\x06\x71\xb0\xa7\xed\x11\x43\x85\x65\x34\xb3\xc4\xfb\x1d\x5b\xe7\xdc\x87\x3d\x3e\x66\x44\x93\x0a\xb7\x4d\xd5\x89\x83\xe2\x8f\xf2\x9d\x1d\x23\x6f\x40\x3b\xd6\x41\x1c\x2c\x65\x38\x43\x8d\x1c\xad\x15\x15\xbe\x23\xa5\x31\x1b\x37\x4f\xf5\x43\xe9\x34\xf9\x12\x37\x3d\x7f\x3d\x2c\x3e\x5e\x63\x9b\x63\x90\xac\x41\x3c\x6d\x20\x0e\xf1\xb4\x4d\x5e\xea\x8f\x1c\x24\xe0\xff\xa3\xf0\xd2\x07\x67\xfc\x9f\x6e\x36\x3e\x8e\x06\xb2\x4c\xee\x83\x48\xdb\x9f\x3b\x93\x4e\x8c\xc8\xab\xaf\x61\x2a\x1a\x6c\x29\x87\x58\x42\x97\x2b\x82\x38\x58\xb2\x66\x51\x97\x6f\x1f\xd0\x28\xc9\x67\xe6\x4f\xe1\x0c\x29\xc5\xdf\xd6\xfa\xbd\x7c\xf0\x68\xc1\x11\x3d\x5e\x1a\x73\xe7\xc3\xd5\x0e\x12\x44\x58\x10\x07\x93\x56\x1e\x4f\x6d\xc1\x28\xe7\xc0\x1d\xee\xe8\x6d\xee\x09\xb3\xf5\x72\x7c\x7f\x1e\x46\x05\x7f\x2f\x1b\x0c\x85\x49\xb1\x08\xbd\x55\xe8\x32\x25\x10\x07\x5f\xf2\xfe\x2a\xf5\xee\x75\xe2\x43\xae\x37\x84\x3f\xea\x6a\xde\x3f\xbc\xc1\x4c\x45\x40\xe9\xb2\x16\x49\xbb\x6e\x35\xab\x2e\xfa\x45\x55\x14\x5a\xf2\x06\x70\x30\x69\x7d\x2b\x79\x69\x72\x6e\x68\x77\x77\x84\xa6\xf0\x05\xea\x67\x39\x91\xd5\x3a\xd7\x46\x19\x36\xee\x3e\x8a\x96\xaf\x0e\xb9\x3a\x07\x5c\x88\xb0\x20\x0e\x7e\x51\x95\xef\x67\xfa\x69\x0a\x07\xd2\xbc\x66\x4f\x8d\xc0\x4d\xd1\x95\x44\x23\x3f\xbf\x2c\x89\x87\x64\xb3\xa6\x34\x16\xc2\x98\xbd\x9d\x08\x69\x81\x38\x84\xb4\xf6\x2f\x25\x2d\x90\x2f\x7a\x51\x5a\x51\xb4\x86\xd4\xbd\x15\xe5\xad\x56\x6d\x91\xda\xfe\x0f\xc2\x39\x83\xd5\xa9\x5c\xe4\x5f\x1b\x44\x76\xe1\xa0\x07\x9d\xbf\xd4\x86\x56\xfc\x41\x1c\x2c\x59\x5e\x9f\x9b\x98\xda\x39\xd1\xe5\x14\x5d\x44\x79\x0a\xaf\x19\xf5\x84\xea\x98\x04\x45\x54\xae\x1b\x8f\xb1\x6c\xf4\xc9\x74\x23\x43\xd7\x13\x81\x38\x98\xb4\x4e\xd8\x9b\x5e\x10\x8a\x6c\x70\xfd\x0d\xc9\xc9\xdb\xf8\xbc\x7c\xb4\x3c\x70\xa7\xf2\x97\x42\x30\xca\xec\xd3\xf1\x5e\xcd\xe0\x7d\x68\x93\x26\x88\x83\xf5\x76\x4d\xdf\x57\x22\x50\x8e\x7b\x9a\xec\x79\xc0\x7c\xac\xd9\x9f\x07\x57\xee\x38\xc5\xc6\x27\xef\xb0\x3e\x56\xcf\xa8\xd8\x09\x30\x83\xd6\xbc\x41\x1c\x4c\x5a\x9b\x77\xd7\xc7\xab\xf5\xa2\x29\x25\x9a\x95\x9c\x8c\x0b\x8f\xfe\x56\x29\x14\xfd\x12\xfd\x4b\xde\xfd\xb5\x56\xb7\x3c\xf2\x8b\x98\x37\xb4\x13\x09\xc0\xc1\x52\x76\xe9\x93\xef\x35\xb1\x2b\xba\x0a\x4e\x64\x21\x8a\x7c\xba\x1d\xbd\x5e\x0c\x14\xd9\xb1\x92\x3a\x52\x48\x84\xfd\x4a\xe6\xd8\xb9\x5a\x79\x7b\x58\xff\x35\xdf\x91\x02\x17\x5c\xc2\xde\x88\x4c\x4b\x63\x98\xf1\x47\xaf\x5a\xe5\xeb\xa3\xff\x98\xf8\x59\xf4\x55\xde\xce\x36\xf1\x21\xf6\xce\xbe\xe1\x7f\x50\xa6\x9f\xf8\xe7\x29\x8f\x82\x2d\x9d\x0d\xac\x37\xdb\x24\x0e\xda\x0e\x73\x13\xfe\x5e\x8f\xf9\x69\x8b\x8f\x96\x82\x39\xed\xb0\x8d\x0f\x33\xdf\x41\x91\x2f\x9a\xef\x84\x03\x5d\x38\x78\xae\x0b\x9e\x33\xa9\xb6\xd4\x03\x6f\xce\x07\x59\x5d\xff\x1a\x59\x2c\x56\x1e\x0f\x87\x70\xdf\xda\x4b\x4a\x26\xfa\x0f\x5a\x56\x32\xab\x49\x26\x60\x1b\x98\xb3\xc5\xc9\x65\x79\x60\x45\x21\x8d\xdd\x81\xbb\x24\xe1\x4a\xce\xb0\xa5\xc9\xf8\x9d\xf1\x8a\x39\x64\xbe\x83\x62\x22\xee\x7c\x87\x9b\xef\x6c\xc6\x67\xb8\x37\x65\x66\xc2\x70\xac\xbe\x26\x5a\x8c\x95\x47\x74\x3f\x62\xa4\x3b\xcd\x6d\xdc\x12\xa5\x1e\xfe\xc6\x8b\xb7\x64\xfa\xcf\x13\x1c\xb1\x0b\xe6\xfb\x04\x95\x32\x0b\x59\x5c\x93\x9e\x17\x29\x3a\xe7\x4e\x8f\xf1\xec\x17\xac\x6c\x9b\x3d\x45\xc1\x27\x5f\xf3\xf7\x88\x2d\xaf\x39\xd0\xfd\x7b\x93\x17\xcc\xf7\xb4\x17\x59\x33\x53\xb3\x79\x04\x9b\xd7\x44\x0a\x4e\x8c\x5e\x52\xad\x06\xf2\x55\x96\x76\x53\xb1\x4c\xf4\xd9\x26\x2b\x39\xce\x5d\xfd\xf7\x26\x2f\x98\xef\x75\xb7\x74\xf2\x83\x0e\x54\x44\x74\xe7\x99\xb6\xab\x4a\x05\xd7\x1e\x5a\xde\x94\xba\xe7\xc5\x79\x4b\xa5\xe5\xca\x9f\x47\x47\x52\x07\xff\xde\xe4\x05\xf3\xbd\x9e\x9e\xb1\x80\xf6\xa9\xe0\x0b\x4b\xa2\x72\x47\xfc\xf3\xa8\x7a\x22\xaf\x53\x7f\xdd\xc9\xf2\xec\x77\x13\xfb\x0b\xc3\x98\xc7\xab\xff\xde\xe4\x05\xf3\xbd\xed\x93\x6f\xac\x3c\xf7\x9e\xa5\x1c\x85\x98\x9a\x9e\x3b\x8b\xd0\xbd\xe7\x4a\x5f\xc4\x87\xbf\x2a\x9f\x54\x45\xbe\xbb\xf2\x75\x22\xe0\xdf\x9b\xbc\x60\xbe\x8b\x37\x31\x04\xba\xcb\xbe\x27\xfc\xfd\x38\x80\xdd\x1b\xb7\x83\x64\xe3\x87\x2b\x63\x61\x7f\xa2\xb5\x17\x45\x7c\xc2\xde\xdd\x37\x91\xff\xde\xe4\x05\xf3\x9d\xa5\x85\x8b\xcc\x3c\xfe\xf1\x08\x2f\x06\x99\x9d\xd9\xa2\x5f\x6d\x88\x31\xb2\x19\x15\xf2\x46\xbd\x6a\x2e\x4a\x89\xcf\xfe\xa3\xdd\xff\xcd\x94\x1c\xf4\x28\x5e\x7c\xb9\x75\x7c\x70\x9f\x0a\xaa\xab\xa7\x24\x8e\x13\x7c\x71\xaa\x4e\xaa\x23\x23\x15\x66\xcb\xf7\x66\xf3\x4b\x89\xa1\x1b\xb1\xf9\x2b\x17\x61\xc4\x1f\x30\x88\x83\xbd\x2e\xce\x4e\xae\x85\x04\x19\x50\x44\x52\x92\xba\xfd\x99\xed\x5f\x57\x1f\x52\x8f\xde\x79\xc0\xa3\x83\x7d\x95\xf9\xbd\xf9\xf4\x15\x32\xe8\x52\x6a\x10\x07\xdf\xb4\xd8\x79\x46\x9b\x77\x42\x18\x68\xd1\x50\x5e\xf4\xa7\x1a\x79\xb3\x6f\x13\x65\xb9\x8c\x9c\xd8\x90\xdb\x46\x3f\xaf\x53\x95\x07\xaa\x2e\x0a\xe2\xe0\xe5\x35\x15\xf9\x4c\x85\x90\x33\xfb\xa3\xb9\x18\x4d\x90\x55\x8f\xf6\x0c\xf6\xea\xdf\xf1\xdf\xea\xc8\xfb\x1e\xa1\x13\x71\xc4\xf1\xad\x15\x5a\x0d\x04\x70\xb0\xde\xb6\xa9\x3e\x68\x50\xdf\xa2\xdc\x93\xb6\xe1\x21\x34\x23\xc9\x7e\xe7\xcc\x49\xf8\xab\xde\x78\x94\x52\xf9\xac\x80\x6d\x29\x3d\x1e\x5a\xb6\x03\x71\xc1\xe2\x78\xff\xcf\x92\x8d\xf7\x14\x05\xca\x94\x3b\xd2\x63\x9f\x35\x69\xbc\xb5\xc6\x3b\x3a\xd3\x0c\xef\x36\x7c\xbc\xb6\xd3\x06\x37\xb8\x87\xa3\x6e\x5d\x47\x98\xef\x20\x0e\x71\xe7\xfb\xa5\xcc\x77\xd0\x3f\xee\xff\x51\x53\xe1\x26\x7f\xf7\xad\xdd\x43\xb2\xd9\xf8\x5a\xfa\xef\x13\xa2\x01\x8f\xc4\xd5\x3e\x30\x0b\xb9\xa4\xac\xd8\x89\xce\x3d\x52\x7f\x0a\x2d\x56\x80\x38\x58\xae\xb6\x77\xda\x7a\xc7\xbd\x50\xd3\x24\x7e\xfe\x1a\x7b\x1b\xf9\x79\xa2\xd0\xe4\xcb\x89\x6e\x69\x02\x3a\xb1\xff\x5d\xdf\x60\x8a\x0a\xe8\xd4\x33\x88\x83\xe5\x6a\x9a\xca\xb6\x95\x41\x3f\xe3\xcf\xca\x16\xbf\xcf\x3b\x52\x45\xbf\x81\x13\x6d\x54\x9e\xc1\xce\x61\x26\x9f\xd5\x3c\xcd\x08\x5d\x37\xe8\x9c\x3e\x80\x83\xf5\xb6\x21\x70\x4c\x27\xe3\x46\xf9\xa1\xb3\xfa\xe4\x6b\x3f\x72\x1c\xa4\xd3\xab\x1a\x4b\x16\xce\x4f\x47\xc3\x96\xe7\xba\x35\x35\x93\xa0\x23\xea\x20\x0e\xd6\xdb\xd4\x25\x3d\x46\xe3\xe3\xd7\x51\x74\x4c\x4e\x09\x93\xa9\x46\x59\xd4\x25\x2b\xcf\x45\x52\xe8\xa2\xd3\x74\xa5\x7d\x26\x57\xff\xd4\x43\x1b\x37\x01\x1c\x4c\x59\xc1\xc9\x7c\xa7\x86\x63\x0b\x9e\xb6\x99\x85\xcf\xfc\xee\x2c\x13\xa2\x99\xd3\x35\x95\x07\x65\x9d\x7e\xc1\x99\x66\x33\x3e\x22\x85\xaa\xec\x82\x38\xc4\x45\x50\x97\x33\xdf\x41\x6f\xd6\x8b\xd2\xaa\xd1\xd4\x36\x68\x8e\x15\x24\xe2\xb1\x96\xfb\xf9\x90\xe3\xd0\xd8\xe2\x95\x3e\xdd\x6e\xd2\x3e\x1f\x47\xeb\xce\xc0\x9c\xdf\x69\x33\xe2\xe7\x83\x38\x58\xb2\x74\xb5\xa8\xdf\x50\x5c\x51\x93\x7f\x25\x9b\x48\xf9\x9a\x18\x67\x1e\x93\xb4\x9f\x78\xe0\x13\x8a\x20\x06\xc3\xcc\x11\x5e\x41\xcf\x26\x22\x2c\x88\x83\x25\xcb\x7d\xee\xd3\xe1\xb4\x3a\x6e\x49\xb9\xfb\x64\xe0\x3b\x93\x9f\x5a\xc9\x79\x5a\xf9\xd9\x9f\xff\xfc\xad\x8e\x0d\x77\x0d\x10\x6d\x81\x3e\x9f\x40\x1c\xfc\xe4\x7b\x59\x8a\xeb\x2f\x25\x34\xb2\x72\x5c\x31\x34\xc5\x18\x22\x6e\x43\xfd\x4c\xb5\x84\xc6\xa4\x5a\x21\x11\x9a\xfd\x8f\x9f\xde\x5d\x85\x4e\xbe\x03\x38\x58\x6f\x99\x1c\x88\xb1\x8b\x68\x78\x5c\x3d\xfd\x6c\xac\xcb\xf6\x0a\xb2\x42\xb2\x1b\x62\x50\x5e\x6c\x75\x08\x7d\xd6\xd8\x41\x9b\x88\x82\x0e\x48\x80\x38\x98\xb4\x9c\x7a\x24\x6d\xc8\x97\xbc\xb8\xbf\x3a\xa6\x99\x56\x57\x79\xc6\x7f\x62\xfc\x7b\xa6\xb2\xab\x88\x1e\x9f\x70\x44\x77\x1e\x78\xf4\x1e\xba\x87\x14\xc0\x21\xa4\x75\x39\xf3\x1d\x34\x83\xba\x28\x2d\x4f\xc3\x90\xe7\xa5\xb4\xf5\xf9\x18\xb2\x6a\x05\x9d\x6e\x4a\x39\x74\x21\xf2\x53\x66\xd2\x99\x42\x78\x1e\x04\xcb\x6c\xbf\xd4\x37\x10\x3f\x1f\xc4\xc1\x92\x55\x5d\xcb\x92\x10\xf3\x84\x05\x9f\x1b\x89\x98\xb3\x5b\x8d\x47\xf8\xaf\x4c\xdb\x81\xb9\x85\x39\x43\x9c\x24\x81\x06\x2a\x1d\x1a\x54\xfd\x00\xc4\xc1\x92\xd5\x7f\x57\xff\x30\xeb\xa9\xc9\xaf\x80\x9b\x52\xfb\x72\xb1\x7c\xa6\xf3\x35\x01\x72\x27\xb5\x5d\x94\x71\x0c\x06\x3d\xdc\x74\x4c\x90\xe7\x08\xe2\x60\xbd\x95\xd8\x27\xf8\x86\xd7\x69\x1c\xf3\x40\x79\xcc\x3d\x70\x95\x33\xf9\x0f\xee\x9b\x7a\x14\x95\x06\x4e\x13\xed\x7b\x15\x71\x19\x94\xe3\x88\xb0\x20\x0e\xd6\x5b\x02\xb6\x9f\xf7\x1b\xfb\x43\x1e\x1c\x49\x86\x78\x8b\x73\xc5\xbf\xfa\xc0\x99\xb7\x78\x3f\x2f\x3f\x8a\xdd\xd7\xf2\x7c\x3c\x46\xe5\x11\xb4\x81\x1b\xc0\xc1\xa4\x85\x75\x54\x12\xbe\xfd\xf8\xe6\x83\x72\x0f\x4f\xd2\x03\xf9\x3e\xde\x45\xec\x6a\x09\xbb\x9c\xbf\xd4\x2f\xd8\x6f\xdc\xff\xe3\x7b\x57\x19\x21\x2d\x10\x87\x90\xd6\xe5\xcc\x77\xd0\x4c\xf9\xa2\xb4\xf4\x24\x9b\x17\xcd\x32\x35\xbb\x1f\x7a\x2c\xe3\xb8\xf5\xff\xf6\xef\x89\x79\xe0\x14\xd3\xcf\x56\x81\x7f\x37\x97\xfc\xee\x28\x1b\xb4\x4c\x09\xe2\xe0\x37\x1a\x9c\xa6\x7d\x2e\x14\x0b\x1a\x91\x24\xab\xc9\x41\x92\xee\xbb\x73\x75\x80\x60\x72\x1b\xfb\xab\xee\x88\xdf\x47\x33\x75\xaf\x44\x68\xb7\x0c\x88\x83\x25\x2b\x64\xbb\x86\x86\x62\x9c\xe6\xd9\xb5\x96\xe7\x77\xf2\x54\x4d\x5f\x31\x6f\xf1\xdd\x75\x3d\x5b\x76\x79\x14\xf0\xd1\xc1\x77\xe2\x00\x2a\x89\x0c\xe2\x60\xbd\xd5\x66\xb3\xc2\x1c\x16\x2f\xa8\x50\x45\xa9\x55\xfd\xc8\xa7\x73\x73\xea\xfe\x79\x09\xc3\x6c\x31\xd2\xf2\xe9\xd8\x23\x5c\x89\x8f\xac\x90\xdf\x04\xe0\x60\xbd\x95\x4c\x4c\xdf\x6f\xe1\xc6\xa9\x37\xbc\x75\x0f\xc7\x90\xbf\xfd\x27\x16\xa6\xb6\xb3\xba\xd3\x5f\x3f\x3a\x35\x83\x29\x54\xab\x35\xe8\x24\x03\x88\x83\x49\x4b\xe2\x85\xb7\x40\x59\x78\x29\x9e\xa3\x82\x71\x3b\x75\x34\xfe\x49\x67\x43\x26\x27\x0a\xc9\xf3\x8d\xc2\x93\xa9\x43\xb6\x9d\x52\x5e\x84\xb4\x40\x1c\x42\x5a\x97\x33\xdf\x41\x5f\x44\x17\xa5\x15\x78\x15\x7b\xf7\x07\x72\x26\xc7\xac\xc8\x98\xe0\xce\x53\xe5\xcd\xc8\x79\xdf\x7d\x46\xa9\x4a\xe1\x3e\x21\xb6\x37\xdd\x92\x56\xd0\xc5\xdc\x20\x0e\x96\xac\x88\x1a\xde\x79\x21\xbe\xb5\x9e\xbe\x97\x99\x3f\x1e\xbc\x37\x6f\xaf\x7b\x1b\xe7\xb5\xcf\xbe\xf5\x22\x3b\x5a\xa3\x66\x2e\x01\x09\xba\x38\x18\xc4\xc1\x92\x45\x22\x5e\x6b\xa9\x59\x45\x4c\x47\xe0\x85\xd2\x77\xd7\xaa\x7f\xa2\xc7\xcc\xcf\xda\x8a\x20\xf2\x37\x3e\x69\xdd\x78\x71\xd6\x3e\x54\x4a\x12\xc4\xc1\x7a\x2b\x40\x78\x7f\xe5\x36\x83\xc6\x68\xe7\xfd\xee\x3d\xa1\x3e\xcb\xc1\x66\xb5\xc4\x8d\x82\x6b\x48\x66\x9f\x47\x99\x38\xe6\xe6\xc5\xa0\x52\x30\x20\x0e\xd6\xdb\xb4\xcf\xe8\x54\x38\x0c\x68\xbf\x88\xd3\xe5\xaf\x2d\x8c\xc7\x05\x27\x7d\xd7\x7e\x96\xe6\xfe\x82\xdd\xd5\x2b\x4a\xbe\xb6\xbc\x0b\xda\x32\x04\xe2\x60\xd2\xba\x9e\xe7\x41\xeb\xb1\xb5\xdd\x41\xeb\x28\x2a\x4b\x85\x86\x81\x7d\x36\x7f\xfd\x61\xf2\x1d\x85\x67\x5c\xf8\x0f\x29\xc7\x9f\x6d\x59\x23\xa4\x05\xe2\x10\xd2\xba\x9c\xf9\x0e\xfa\xf2\xfd\x3f\x76\x67\x5b\xdf\x14\xc9\x32\xc2\xb8\x31\xec\x3e\xea\x61\xf3\x30\x97\x20\x4f\xfa\xdd\x52\xb4\xc1\xd3\xe3\xeb\x5a\x4b\xea\xf8\xf6\x0b\x06\xd0\xee\x6c\x00\x07\xdf\x43\x3b\x29\x81\xaa\xd9\xbc\x86\xee\xe3\xaf\x9d\xe0\x72\xf6\x92\xf7\xe5\xf2\x06\x71\x82\x97\x6d\x0c\x75\x8d\xf9\x73\x6f\xab\x69\xe8\xbb\x13\xc4\xc1\x92\xe5\xb2\xab\x1b\x4b\xbd\xab\x47\x84\x62\xb2\x6f\x2e\x95\xc1\x39\x9f\xc1\xe0\x10\x89\xf6\xa6\x97\x98\x21\x81\x21\x8d\x04\x03\x0b\x2a\xae\x02\xe2\x60\xbd\xb5\x09\x6e\xbe\x13\x91\x5b\x2c\x3b\x1a\x1d\x88\xa9\xc9\x78\xb2\xbb\xc8\x74\xc3\x27\xa4\x16\xf7\xca\xb4\xdb\x16\x57\x7c\xa3\x37\x2e\xf4\xdd\x09\xe0\x60\xbd\xc5\x0b\x9c\x40\x25\xf2\xfe\xfa\xb3\x63\x27\x30\x5c\x08\xdf\x98\x5c\xe1\xb5\x75\x02\x9f\x75\xe5\xcf\x73\x3c\x53\xf3\x8a\x69\x7f\xe8\x6a\x0f\x10\x07\x93\xd6\x23\xf2\x0d\x14\x55\x0d\xbe\xd3\xf1\x8e\x3d\xaf\x3c\xd9\xec\xba\x6d\x65\xe5\x21\xe3\xf2\x98\xf2\xdb\x77\x51\x8c\x7f\xe9\x74\xdf\x44\x48\x0b\xc4\x21\xa4\x75\x39\xf3\x1d\xb4\xc2\x71\x51\x5a\x44\x92\xd5\x4c\x9f\x97\x5e\xd7\xf3\x64\xdf\x14\xbf\xa2\xe3\x2e\x10\xaa\xb7\x6e\xde\xa7\x7c\x05\x73\x29\xae\xcd\x89\x53\xc7\x19\xba\xd1\x00\xc4\xc1\x92\xe5\x52\x72\x7b\xb4\x6d\xdb\xa9\xd4\xc0\xb6\xee\xd6\x13\x42\x45\x7f\xb9\x5f\xe6\xdc\xcf\x5b\xf8\xff\xb0\x4b\xbf\x4c\xea\x58\xbd\xb6\x00\x69\x00\xc0\xc1\x92\x15\xda\x2b\xfc\xdc\xab\x4c\x31\xaa\xab\x05\xdd\x8f\x2a\xa9\xbb\x87\x76\xc8\xde\xa7\x72\x8a\x6f\x02\xd3\x78\x95\x64\x52\xac\x09\xda\x9a\x0b\xe2\x60\xbd\x6d\x5c\xa0\x29\x21\x3a\x55\x5e\x89\xdc\x77\xdf\x45\x57\xa4\x60\x8e\xf5\xc1\xde\x26\x4f\x9e\x41\x5b\x34\x9f\x23\x4c\x1b\x2f\x83\xb6\x65\x82\x38\x58\x6f\x23\x5a\xbf\x91\x4d\xfe\xbe\xae\xcc\x95\x58\xde\xb1\x78\x7b\x87\xec\x76\xf3\xf3\xa6\x8d\x2f\x1d\x4a\x6a\xdc\xe5\x56\xb3\x78\x3f\xa0\xa2\x25\x20\x0e\x26\x2d\x83\x1d\x73\x9e\x20\x0d\xeb\xdd\xb2\x5f\x4a\x6f\x12\x39\x6a\xb0\x79\x07\x48\x6b\x45\x55\x9c\xbb\xee\x9f\x68\x37\x6c\xce\x18\x62\x22\xa4\x05\xe2\x10\xd2\xba\xa4\xf9\x0e\x5a\xc3\x46\xdc\xf9\x7e\xc1\x7c\xaf\x1b\x8d\xbe\xaf\xbe\x2b\xfe\xac\x17\xef\x46\xea\xf8\xf7\xf0\x4f\x37\x73\x9b\xb9\x69\xdf\x38\xab\x72\x2e\x26\x07\xe4\x2c\x5e\xc3\xf9\xf7\x95\xbe\x0b\xe6\xfb\xce\x5d\x0d\xbe\xca\x5b\xf1\xe4\xb6\xbf\xde\x3f\x29\x8f\x9b\x1b\x5f\xd2\xd5\x63\xa5\x16\x64\xd1\xf2\xdd\x0a\x4b\x15\x8f\x62\x7b\xff\xbf\x59\xe9\x03\xfd\xb0\x8b\x4f\x1b\x4d\x69\xc4\xd7\xe1\xf9\xaa\xfc\x2d\x0c\x6e\xf1\xdf\xf3\x9a\xf4\x37\xa7\x5f\x8b\x3c\xa9\xe9\x3c\xf3\x11\x8e\xdd\x9c\x9b\x43\x87\x4a\x2c\x80\x38\x98\x7e\x6f\x49\x36\x98\x0a\x87\xad\xaa\x1a\xda\xa8\x76\xf8\xeb\xad\x3f\x6e\x68\x2c\x3f\x4f\xf9\xac\x33\x7b\x38\x2e\xbe\xd9\x7b\x50\x03\x5d\x30\x09\xe2\x60\xfa\xbd\x32\xd5\xe7\x51\x4c\xeb\xe7\x14\xaa\x78\xc5\xbd\xb8\x38\xa2\x84\xc4\x67\xfe\xea\x93\x9a\xf4\x0d\x5e\xde\xd2\x80\xf0\xd6\x12\xe8\xe4\x3b\x88\x83\xf5\xf6\x71\x4c\xf7\x5b\x7b\xae\xd3\xe4\x10\x45\xbc\xdd\xa3\x6c\x6a\x2a\x9d\x64\xde\x54\x0a\x1b\xa5\xed\x57\x9c\x38\xef\x93\x2c\x4e\xa0\x42\x9f\x20\x0e\xd6\x5b\x6e\xa4\xc7\xef\x14\x6c\xae\xe7\xc8\x0c\xfd\xf6\xb5\xdc\xe2\x08\xca\xaf\x2a\xc7\xd9\xf8\x49\xb3\xda\x20\x9b\xea\x41\xe4\xf7\x87\x19\x11\x16\xc4\xc1\x9e\xb6\x83\x7b\x83\x33\xf1\x4d\x67\xc7\xc3\x62\xbf\xde\x5f\x5b\x49\xbd\xe3\xc3\x7b\xaf\x82\x01\xe7\x94\x17\x3d\x05\xb7\xab\x3d\x64\xae\x1b\xf1\xb4\x81\x38\xc4\xd3\x76\x39\xf3\x1d\x24\xe0\x8b\xd2\xc2\x7b\xd3\x75\x77\xd6\x52\xbb\x6f\x90\x03\x35\xbf\x44\xa8\xb8\x80\xdf\x68\xc5\xfa\xfb\x57\x75\x2c\xec\xc0\x3b\xe5\x7a\x1e\x41\xd0\x26\x4d\x10\x07\x4b\xd6\xe9\xe3\x26\x86\xf2\x89\x94\x60\x4d\xbd\x82\xee\x2d\x3c\x47\xe6\x77\xed\xe5\x55\xf5\xd1\x85\x65\x3c\xa8\x66\x6b\x4f\x4f\x85\xa0\x85\x13\x10\x07\x4b\x56\xe2\xd3\xd8\x71\x8e\x99\x99\x79\x51\xb1\x6b\xa1\x86\x71\xeb\x49\x39\xf9\xc3\xbd\x7e\xfb\xa4\xaa\x9c\xf6\x46\xab\xd4\xaf\x06\x21\xe3\x15\xc4\xc1\x7a\x1b\x63\x76\x35\x47\x8a\xd4\x1c\x57\xdc\x97\x35\x4d\xdd\x42\xdb\xfe\x2d\x2f\x09\x52\xea\x11\x09\xef\xce\x26\x5b\xa6\x4d\x4b\xca\x67\x44\x58\x10\x07\xeb\x2d\xe5\xbc\xa6\x76\xda\xfe\xc7\x2b\x84\x31\xa6\xf3\x57\x3a\xa2\xcb\x65\xa8\xf9\xf0\x07\xff\xbc\x94\x9d\xfa\xdd\x6a\x1a\x17\xca\x0c\xed\x99\x01\x71\x30\x69\xd5\x58\xcb\xb0\x7d\x91\xf4\xf7\xa7\x7d\x10\x7b\xc3\xe0\x76\xfb\x41\x69\x62\xed\x0f\x3e\x54\xd9\xc3\x07\xcd\xca\xfc\xc9\x4e\x6b\x0e\x08\x69\x81\x38\x84\xb4\x2e\x67\xbe\x83\x7c\xd1\x8b\xd2\x9a\xfd\x69\x25\xaa\x6e\x99\x73\x62\x4f\xb3\x3c\xf6\x60\xc0\x8b\x9e\xf4\xcd\xc7\x26\xe2\x12\xde\x09\xcb\x61\xd7\xf1\x02\xe1\x1a\x68\xcd\x00\xc4\xc1\xaf\x3b\xaf\xfa\xd3\x19\x25\xa5\x32\xd2\x80\x2f\x92\x59\xd8\x80\xd1\x91\x93\x3a\x2a\xb6\xb5\x80\xc7\xc0\xf6\x37\xed\x6e\xeb\xb3\x81\x9b\x88\xb0\x20\x0e\x96\x2c\x21\xef\x5b\x13\xca\x67\xfc\x8f\x13\xa9\x06\x4b\xea\xb9\x98\xcb\x3e\x59\x52\xcf\xff\x41\x89\xf2\xcc\x4e\x08\x15\xa1\x4e\x4e\xf9\x01\x6d\x70\x02\x70\xb0\xde\x4e\xf3\x44\x2d\xe9\x1c\x38\x5b\x29\xfa\xda\x2b\x2e\x7d\xa5\x7e\xf5\x56\x69\xe4\xcf\x89\x28\xde\xb3\xf4\xa4\x66\x3a\x11\xff\xc5\x07\xd0\xe2\x34\x80\x83\xf5\x16\x1f\xcf\xdf\x3a\x49\xe1\x66\x1b\xa3\x96\xbf\x22\x91\x68\x9c\xd0\x13\x15\x8c\x1c\xaa\x20\x23\xe9\x97\x0f\x2a\x4b\xf9\x70\x8b\x7c\x10\x61\x41\x1c\x7c\x8e\x70\xd9\x93\xef\xaa\x7e\xb2\x4a\xe5\x1e\xfa\x86\x4a\x23\x0d\x9e\x2e\xef\x66\x3d\x7d\xbb\x2a\x43\xde\xbb\x6e\xed\x3d\xca\xcf\x75\x7b\x3a\xd6\x5b\xf3\x5f\xf3\x9d\xd0\xa6\x25\x61\x8e\xbc\x8f\x69\x75\x95\x42\x4a\x57\xdf\xad\x58\x15\x1f\xeb\x67\xd6\x53\xe2\xa2\xc4\x17\x7a\x29\x51\xc1\xcf\x16\xfe\xfb\xce\x97\xab\x6e\xf0\x5f\xa7\x16\xb5\xba\xce\x44\x4c\xa3\x4a\xfe\xb4\xee\x8a\x43\x0d\x75\xa0\x47\xb6\xf6\xce\xa7\xde\xc8\x0f\x78\xdd\x30\xf3\x1d\x14\xf9\xa2\xf9\x6e\x42\xd1\xbc\x26\x3d\x8f\xca\xc3\x17\x83\x96\xe4\xa7\x83\x9f\xdf\xd3\x73\xad\xf7\x0f\x8e\xd7\x28\x7f\xfb\x0f\x82\x02\xe6\x81\xf9\xff\xa0\xbd\xaf\xc3\x7e\x74\x49\x39\x04\xdb\x90\xf4\xea\x4f\x06\xd1\x52\x4d\x71\x32\xe7\xb2\x7e\x78\x1c\xea\xe4\x4b\x20\x80\x31\x80\xed\x0d\x99\xef\xa0\x98\x88\x3b\xdf\xe1\xe6\x3b\xa9\xbf\xaf\x45\xea\xd7\xd4\xa6\x44\xf3\xd6\x9e\x3d\x14\xff\x3f\x89\x4a\x73\xbe\x47\xe2\x43\xe3\x68\x71\x07\xf3\xdf\x85\xd2\xd6\xfe\x79\x82\x13\x70\xc1\x7c\x67\x2a\x99\xe1\xc1\x5b\x90\x15\x37\x66\xf6\xf5\x17\xd9\xae\xc1\xc9\x0e\x3d\xfb\x6c\x36\xac\xaf\x95\xe6\x2c\x51\x6e\x16\x9f\xd1\xf1\xef\x4d\x5e\x30\xdf\x3f\x9e\x75\xa8\x84\xd2\xe4\x75\xf5\x19\xe8\xa0\x58\xc8\x94\x4e\xd6\x22\xa9\xdf\xf7\x10\xad\xef\x44\x65\x7f\x49\x30\x24\x6a\x65\xf3\xef\x4d\x5e\x30\xdf\xe3\x27\x4b\x5f\x27\xc9\x21\x91\x22\x39\x4e\x07\x4b\x7a\xb0\xb6\x68\xfa\xe6\x48\x35\xba\xfd\x76\x3a\xbb\xe2\x86\xf5\x22\xd2\xfa\xe7\xbf\x37\x79\xc1\x7c\x57\x92\x5f\x1a\x7b\xc0\xc4\x13\x4a\xe4\xe4\x5e\x71\xc5\xdd\xb3\xd6\xff\x9e\x47\x44\xa3\x0e\x91\x9c\x3a\x5e\xea\x81\xa5\x1f\xc6\xd1\xbf\x37\x79\xc1\x7c\x97\xa2\xfc\xbe\x1b\x2a\xfb\x9d\xa6\xe2\xf4\x23\x55\xcc\x06\x9b\x69\x77\xb8\x75\xcd\x47\x24\x92\x2c\x6b\xda\x3e\x7f\x3f\x92\xc3\x8f\xff\xde\xe4\x05\xf3\x5d\x61\xc7\x50\xf9\x48\xcc\xd4\x4f\x27\xcf\xbb\x34\x4d\xc8\xef\xb4\x10\x2f\x6d\x4f\xe7\x51\xf7\xf9\xf7\x6c\x7b\x87\x17\xb7\x95\x2d\xfe\xbd\xc9\x0b\xe6\xbb\x71\xb7\x4f\x36\x36\xe5\xd7\x22\x9d\xab\x8a\x83\xcf\xbb\x9b\xef\x13\x5b\x2a\x3c\x79\x6f\x58\x5a\x99\xa3\x93\x9e\x66\xe9\x3f\x8e\xf6\xbf\x99\x92\x83\x1e\xc5\xff\xa3\x60\x65\xac\x28\x73\x96\x46\xae\xc8\x84\x41\x12\xca\xe6\xb7\x8f\xa6\x4f\xbe\x15\x31\x9b\xc4\x93\x04\xb4\xcd\xf9\x68\x6f\x71\x11\x40\xd5\x45\x41\x1c\xec\x75\xf1\xb4\xa4\xeb\xeb\x16\x09\x59\x91\x1e\xbe\xb6\x16\x95\xe6\xcd\x2a\xbf\x50\x9e\xef\xcb\xf8\x22\x99\x45\xfe\xcd\x5e\xda\x48\x23\xd0\xb2\x1d\x88\x83\xfb\x58\xbf\xe4\xef\xe6\x44\x8e\x66\x71\xfd\x1c\x09\x37\x9d\xe6\xfe\x2d\x6d\xa3\x23\x60\x1b\xdf\xa5\x2b\x2d\xce\xdb\xb1\x48\xbb\x04\xd5\x1c\x07\x71\xb0\xde\xca\x70\x7b\x39\xa8\xfd\xb8\x2b\x5b\xea\xde\x94\xf0\xd2\x9c\x40\x04\x6f\xf5\xa3\xf8\xb1\x81\x3e\x65\xa1\xef\x7b\x83\xd7\x45\x05\xd0\xfa\x1a\x88\x83\xbb\x02\x64\x95\x57\xa6\xa4\x36\x96\x7d\x5a\x43\x7f\xa0\x4f\x4f\xa5\x1a\x3f\xc1\x1a\x5d\x19\x0a\xd8\x27\xfb\x18\x91\x50\xaa\x43\x5a\x85\x08\x0b\xe2\xe0\x3e\x56\x67\x41\x0c\x29\x27\x7e\xd0\x55\x62\xe1\x5f\x51\xbb\x66\x58\x38\x95\x85\x71\x3c\x9b\x05\xb4\xca\x61\xfd\xc9\xf1\xba\xb4\x8c\x08\xf3\x1d\xc4\x21\xee\x7c\xbf\x94\xf9\x0e\xfa\xc7\xfd\x3f\xea\x55\x2e\xde\x33\x09\xeb\x44\x23\x61\x3c\x71\x31\x54\x9f\xc3\xfa\xfc\x64\xd1\x5c\xe0\xc7\x12\x43\x50\x66\x56\x22\xa1\xf8\x93\xfb\x18\x90\x41\x0c\xe0\x60\xb9\xfa\x68\x57\x9f\x27\x7d\xf8\xf6\x9b\xb6\x32\xba\x93\xe5\x47\xa2\x9d\x5a\xd7\x8a\x62\xa5\x4f\xa7\xbe\xa3\x14\x21\x9b\xdf\x1c\x82\x4c\x10\x61\x41\x1c\x4c\x59\x33\xfa\xed\x6f\x06\x8c\x28\x7a\x59\x13\x6d\x7f\x22\x39\xef\xfb\xd7\x84\xa3\xb4\xba\xba\x9e\xad\x12\x1f\x5c\x8f\x20\x42\x72\xf8\x83\x08\x0b\xe2\x60\xbd\x65\x0c\xf6\x7b\xc3\xa2\xb3\x27\x3a\x36\xc8\xf0\x49\xf3\x75\x56\x1d\xaf\x3e\x0e\x5d\x96\xb3\xbe\x85\x3e\xb5\x8d\xec\x59\xd2\xff\x5f\x3d\x0d\xc4\xc1\x24\xc0\xc8\xe2\xbe\xf4\x6c\x41\xfb\xb5\xf0\x95\xae\xea\xee\x1d\xbd\xfd\xac\x5b\x1a\xf5\xf1\xbc\x16\xcd\xcc\x15\x53\xea\xdf\x28\xa6\x08\xa1\xb0\x00\x0e\x16\xf6\x96\xb7\xb7\x50\x4e\x92\x6d\xaf\x5f\x74\x15\xaa\xbe\x0b\xcb\xd8\x1e\x9f\xa1\x46\x19\xd7\x08\x91\x46\x2e\xf3\x07\x5e\x7c\x55\x6f\xa8\x36\x38\x80\x43\x5c\x04\x75\x39\xf3\x1d\xf4\x66\xbd\x28\xad\xac\xc0\xfe\x9e\xdb\x8e\xfe\x1d\x13\x47\x53\xc1\x15\xc2\xce\x8f\x23\xa3\x84\x2a\x9c\xf4\x86\x63\x19\x72\xa7\x45\x27\x1f\xed\x40\xd2\x02\x71\xb0\x64\x95\x84\xa5\xf7\x16\x7b\x7f\x52\x91\x66\xdd\x09\x6c\x76\xaa\x53\xc8\x62\x1c\x7b\xc5\x28\x7a\x9d\xc6\xfa\x2c\x89\xea\xa9\x2b\x21\x54\xe6\x0c\xc4\xc1\xa4\xe5\x53\x5e\x73\x90\xec\x2e\x4a\xea\x22\xdd\x85\x49\x25\x1d\x80\xaf\x24\x9c\xee\xda\x2e\x2e\xd2\x9e\x98\xcf\xea\x38\x20\x31\x00\x5d\xce\x0e\xe2\x60\xbd\xcd\x41\xf2\x90\x34\xa9\x3e\xd3\x3a\x36\x5b\x58\xfb\x1d\xdd\xde\x22\x86\x91\xc3\xa0\x2c\xf5\x23\x69\x00\x2d\xf1\xd0\xf5\xa5\x1a\x54\x59\x02\xc4\xc1\x34\xd0\xbc\xa0\xd1\xb7\xac\x55\xef\xd3\xfb\x66\x50\xc2\xc5\x71\x5b\xf3\xb9\xf1\x41\x68\x22\x7d\x4e\xb3\x35\xfa\x6f\xa7\x7c\x1f\x46\x73\x44\x58\x10\x07\x0b\x8b\xbb\xf8\xfa\x6d\x96\xd2\xeb\xc7\xfb\xab\x5c\x8e\xd4\x69\x6e\xb6\xcf\x15\x39\x5e\xff\xe1\xa3\xd6\xca\x49\x51\xf4\x5c\x1c\x33\xe7\x44\x48\x0b\xc4\x21\xa4\x75\x39\xf3\x1d\x34\x83\xba\x28\x2d\xe9\x43\x8e\x47\xc5\xae\x77\x28\x46\x4e\x56\x18\x5d\x2b\x06\x6f\xde\x2b\x6b\x7f\x2a\xa8\x8e\xcf\x27\xf0\xe0\x4b\x95\xfd\x6d\xba\x21\xe8\x9c\x23\x80\x83\x25\xcb\x8e\xa4\x71\xe9\xd9\xc4\x9d\x31\xc7\xcf\xf6\x98\xa5\xba\xef\x54\x23\x8a\x0a\x86\x46\x53\xfa\x0e\x48\x3f\xd0\xa0\xf4\x54\x54\x50\x21\xc2\x82\x38\x98\xb4\x0a\x45\xa4\x04\xde\x2b\xe0\x88\xdb\x8e\xde\x3f\x8b\xb7\xfc\xe5\x5f\x7a\xdd\x54\x0d\x15\x5b\x3f\x2c\xfe\x93\xc9\x47\xc3\x78\x63\x68\x17\x0a\x88\x83\xf5\x16\xf3\xce\x54\xda\xba\xea\x0e\x0a\xf2\x3b\xbf\x15\x64\xad\x8c\x84\x2f\x8e\xd1\x46\x02\x93\xc5\xec\xb4\xea\xc1\x76\x87\x2e\x79\xe1\x88\xb0\x20\x0e\xa6\x81\x2e\x4c\xd7\x12\x76\x5d\x8d\xb9\xb5\xc6\x9b\xee\x2a\x29\xd1\x34\x1e\xcf\x8d\x56\x8c\x13\x85\x1f\xa5\xed\xf1\x2b\x1b\xe5\xcc\x43\x83\x00\xe2\x60\x61\xab\xe7\x58\x02\x23\x26\x7e\x2d\x91\xf0\xc5\x7b\x45\xf7\xa9\x9f\xc5\x67\x0e\x44\x8b\x52\xc5\x7d\x20\x0a\x49\x9a\x36\x69\x40\x86\xa4\x05\xe2\x10\xd2\xba\x9c\xf9\x0e\x9a\x29\x5f\x94\x96\x4f\x81\xd0\x69\x9f\xbb\x64\xf6\x32\xc9\xec\x78\x29\x93\x6f\xaa\xfe\x3d\x1d\xff\x7c\x2a\xa3\xe7\x4c\x2b\x41\x91\xcd\x29\x3c\xa8\xd0\xff\x00\x80\x83\x25\x6b\x31\xbd\x3b\x8c\x97\xef\xa5\xb5\x31\xfa\xdf\xa7\xf7\x27\xbe\x07\xa1\x77\x91\x5b\xda\x93\xa8\xfb\xd8\xf9\x9f\xd3\x7a\xb3\xab\x42\x75\x09\x41\x1c\x4c\x5a\xaa\x4f\x16\x90\xba\xc2\x12\x3a\x66\x3b\x08\xd5\xc9\x75\x99\xff\x34\x97\xb2\xa0\xab\x7f\xee\xb7\x50\xe1\x0c\xd0\xf6\xa7\x4a\x38\x40\x84\x05\x71\xf0\xb5\xda\xa6\xdc\x41\x35\x91\xd0\xb9\x18\x25\x9e\x87\xad\xce\x14\x2b\x98\xc3\x35\xf1\x16\x11\x2a\xc4\x62\xf9\x1f\xf1\x26\x2a\x44\xa0\xed\x22\x20\x0e\xa6\x81\x59\x05\x55\x5a\x35\x03\x42\x8c\x12\x66\xb6\x9b\xde\xa5\x04\x2d\xba\xd9\x0f\x78\x7d\x27\x84\xcf\x18\xe3\xc8\x47\x84\x5b\x0f\x28\xa1\x35\x1a\x00\x07\x0b\xdb\xf1\xcd\x65\xea\x2b\x21\x69\x42\x68\xf8\xbd\x6c\xe6\x39\x5a\x3f\xa9\x4f\x9e\x5e\xf6\x2d\x34\xd1\xbf\x69\x62\x5b\xae\x07\x57\x9a\x23\xa4\x05\xe2\x10\xd2\xba\x9c\xf9\x0e\xfa\x22\xba\x28\xad\x20\x61\x73\x11\x65\x9a\xc6\xa4\x7e\xdf\x9a\xe4\x1a\x0a\xc1\x17\x58\xb9\xc9\x87\xa3\xe2\x23\x37\x12\x08\x9c\xe2\x07\xc9\x3f\x43\xf7\x4d\x82\x38\x58\xb2\x94\xfc\xfb\xda\x6a\xdb\xeb\xb0\x3e\xf9\x25\x88\x1d\xbe\x39\x5b\x92\xd9\x7b\x97\xbd\x7a\x75\x0f\xdf\xe6\xce\x35\x79\x33\xb1\xa7\x50\x25\x4d\x10\x07\xff\xd7\xea\x7b\xee\x54\x9a\x80\x23\xa4\x67\x68\x93\x44\x50\x6a\x52\x9b\x7d\x25\xf8\xe0\x3d\x5e\x37\xb3\x95\x98\x8e\x00\x27\x67\x9f\x3c\xf4\xaf\x05\xe0\x60\xbd\x95\x24\x60\x39\x91\x45\xd7\x69\x24\xac\x20\x1e\xb1\x95\x4c\x1b\x94\xe7\x7b\x5e\xb2\x19\x94\x75\xd8\xc9\xb9\x2f\x46\x24\x78\x0b\x3a\x1f\x02\xe2\x60\x1a\xd8\x6c\xc1\x8a\x96\xb5\x6b\x27\x79\xa6\xef\x66\x3e\xb9\xcc\x3b\x2e\x60\x51\x34\xd6\x1d\xdb\x84\xd2\x8b\x7e\x93\x5f\xf8\x3e\x33\xf4\x9e\x05\x71\xb0\xb0\x1f\x2d\x4b\xae\xc8\x33\xf6\x10\x87\xdd\x3e\xe0\x40\x0f\xab\x2d\x70\x9e\x5a\xd6\x17\x5f\xfd\xc8\x2e\x7a\x16\x33\x18\xd0\xc7\xee\x89\x90\x16\x88\x43\x48\xeb\x72\xe6\x3b\xe8\xcb\xf7\xa2\xb4\x7a\x96\x28\x3d\x3b\x1c\xf2\x46\x1a\x9f\xa0\x3c\x5a\x24\xb5\xfd\x72\x7d\x83\x59\xd7\xf1\xd9\xc7\xc7\x0f\x23\xbd\x09\xfb\x04\xe4\xa1\x1d\xc4\x20\x0e\xbe\x2b\xd5\x63\x2e\xa9\x49\x64\x0b\x3f\xd9\xec\xc3\x92\x9e\x4d\xb1\x4e\x7a\xcd\x16\x75\xe7\xea\x19\x7d\xfb\xd0\x19\x96\x45\x76\x04\xf4\x9e\x05\x71\x30\x69\x79\x90\x16\x30\xc7\xac\x50\xdd\xc2\x22\x3f\x99\xbf\xce\x7d\xbf\xcd\x91\xf3\x91\xe0\xec\x9f\x7b\xd7\xa7\x57\x49\xce\x33\x5f\xf7\x42\xd7\xbb\x80\x38\x58\x6f\x87\x55\x3c\x99\xf3\xf9\xe3\x5b\xd2\xf4\xbd\x1a\x5e\x55\x4e\x71\x3e\xa8\x6e\x55\xb1\xa5\x53\xc5\xcc\x7d\x96\x6a\x90\x45\xae\x31\x8b\x08\x0b\xe2\x60\x1a\x20\x8e\x79\xa0\xfd\xc6\xce\xd4\x44\x2e\xdb\x37\x91\x2d\x94\xb9\xd5\x66\x2e\x3b\x44\xa9\x32\xed\xc3\xbb\x2f\xfc\x0e\xf3\x6e\x58\x50\xed\x7d\x10\x07\x0b\x6b\xc3\xf6\x7e\x8c\x2b\x48\xc1\x24\xda\x77\x43\xdb\x73\x8d\x4f\xfb\x63\x23\x99\xdf\x3b\x5a\x07\x33\x2b\xcf\xa2\x0a\xef\xe3\x49\x68\x37\x1a\x88\x43\x48\xeb\x72\xe6\x3b\x68\x85\xe3\xa2\xb4\xe2\x70\x26\x2c\xd1\xc9\xad\x37\x3e\x3b\xa7\x85\x27\x6d\x94\x7c\xf7\xb3\x73\xf7\xb3\x9f\xac\x28\x6b\xf1\x8e\x98\x67\xf2\xce\x80\xaa\x15\x83\x38\x58\xb2\x7c\x63\x7d\x65\x98\x23\x9d\x25\x29\x93\xd6\xe9\x1e\x66\xa8\x68\x3f\x5b\x52\xc1\x90\x7e\x77\x7c\xbe\x8f\x5c\x33\x11\xff\x69\x03\x9a\x6f\x83\x38\x98\xb4\xa4\xab\xc4\xe9\x04\xd8\x69\xa5\x3d\x22\x4f\x2d\xd5\x53\xca\xdd\x0c\x8d\x14\x79\x54\x04\x7c\x77\x8d\xef\x5f\xb9\xb5\x24\x7a\x0a\xed\x42\x01\x71\xb0\xde\xde\xe6\x63\x66\xd1\x15\xe7\xa7\x8c\x33\xd9\xb8\xa9\xfa\xc0\x9d\x67\xad\xee\x4d\x6d\x25\xa7\xec\x74\x5d\x91\x7b\x4f\xc7\xf5\xee\xf7\x88\xb0\x20\x0e\xa6\x01\xe5\x87\xb6\xd5\x0a\x1f\xf0\xf7\x18\xec\x3a\x37\x56\xcb\x92\x5d\x8c\x27\xbf\x5a\x44\x3c\x27\xbb\x87\x7f\x5f\xde\x42\x57\x25\xc5\x0e\x11\x16\xc4\xc1\xc2\x1e\xd9\xb7\xa8\x5b\x4c\xcb\xf4\x93\x13\x4d\xdb\x71\xb8\xda\x38\xb8\xb5\x6c\xaf\xbb\xbb\x45\x04\x4e\x9f\xcd\xab\x7e\x3a\xb1\x9b\x41\x48\x0b\xc4\x21\xa4\x75\x49\xf3\x1d\xb4\x86\x8d\xb8\xf3\xfd\x82\xf9\xee\x4f\x53\x78\x6b\x8a\x4b\x86\xc0\xba\x53\x7b\x30\x87\xe3\x63\x7d\x5c\x55\x93\x7c\xf5\xf5\x27\x4b\xda\xe6\xe5\x2c\x4e\xc3\x42\xff\x5a\x70\x32\x42\x32\xe0\x82\xf9\xbe\x38\xe1\xa6\x44\x6c\xdb\xc0\x4a\xe1\xaa\x98\xb9\x5e\xf5\xe1\x61\x17\x86\xd8\x17\x53\x3f\xb4\xde\xdd\xd8\xb5\x14\x1d\x47\xcb\xef\xff\x9b\x95\x3e\xd0\x0f\xbb\xf8\xb4\x8d\x10\x31\x64\xcc\xcc\xd7\xca\x0d\xa0\x6f\xac\xee\xcc\x28\x1a\x44\x92\xb2\x69\x09\xdf\xe5\xf9\x1d\xac\xc3\x4a\x9c\x5c\xde\x04\x5d\x1c\x0c\xe2\x60\xfa\x55\x99\x2a\xd4\xc0\xe5\x1e\x55\xba\xe3\x5a\xbd\x29\xd4\xb3\x7b\x28\xf5\x64\x61\x35\x32\xf6\x5d\x3a\x2b\xef\xbb\x20\xcd\x99\x4d\x68\x52\x0f\xe2\x60\x4f\x5b\xc5\xd7\xc2\xc0\x66\x52\x4f\xf6\xaf\xa9\x5c\x8a\xfe\xeb\xd3\xcf\x8f\xd5\xed\xcc\x4b\x6e\x73\xd3\xc9\x71\xa7\x6f\x3f\x13\x4e\x81\x76\xd0\x80\x38\x58\x6f\xb3\x98\x47\x46\x7c\xcd\xee\xbc\x09\x43\xdf\xe7\x1d\x8a\x7a\xd2\x14\x81\x54\x48\xca\xf6\x20\x64\xd5\x5e\xe3\x88\xba\x7e\x6a\x49\x19\x5a\x39\x00\x70\xb0\xc7\x82\x1d\x07\xd7\xf9\x36\xae\x7d\x15\xb1\xf9\xd8\x4d\x3f\xcb\xde\x9a\x39\xce\xc7\xa9\xd2\x61\xc4\x26\xe8\x8f\x50\x7b\x34\xd9\xf8\x57\x11\x61\x41\x1c\x2c\x2c\xb6\x51\x04\xeb\x8a\x89\xfe\x0e\xc1\xc8\x13\xcf\xd4\xce\xab\x3c\xd2\x98\x6f\x79\xaa\x24\x6f\x4f\xfb\xa6\xba\x26\x4c\xf4\x9e\x43\x0e\x29\x88\x43\x3c\x6d\x97\x33\xdf\x41\x02\xbe\x28\x2d\x15\x82\x2f\xb9\x8c\x56\x9d\xd4\xd1\xde\x3b\x82\xc2\xa4\xa5\xc5\xf6\xe9\x7b\x67\x59\xd4\xa7\x26\xf9\x9d\x63\xc5\xeb\x6f\xc3\xdb\x20\x0d\x00\x38\x58\xb2\x7e\xad\xf1\x46\xe4\xf8\x28\x0b\xf7\x35\xf2\xd1\x7c\xc4\x59\x3b\x3a\x27\x70\x63\x4d\x30\x40\x66\x6a\xa8\xc4\x68\x31\x97\x9b\x84\xae\xa8\x02\x71\xf0\x5d\x54\x79\xbf\x28\xc2\x0b\xc8\x7f\xce\x4c\x78\xc8\xee\xd1\x49\x30\x20\x3f\xc6\x7d\xab\x7a\x27\xa3\xaf\x5e\x5b\xee\x51\xc1\x4b\x5e\xe8\x8c\x05\x88\x83\xf5\xf6\x37\x49\x2c\x81\x89\x92\x01\x91\x33\x1f\xbb\x49\xdc\x2e\x76\xe7\x07\x92\x79\x9f\x6b\xc6\x3b\xa6\x66\xa1\x0b\xc6\xc7\x3b\xf6\x52\x88\xb0\x20\x0e\xa6\x01\x0c\xe1\x27\xe3\xab\xb5\xa2\x93\xbd\xf6\x3a\xda\x2c\x56\x75\x76\xf2\x06\x1d\xe5\x77\x04\x23\xa4\x09\xec\xde\x25\x57\x7d\x78\x05\xad\xa4\x83\x38\x58\x58\xff\x55\x02\x5d\x83\xcf\x6a\x5f\xee\x39\x77\xa2\xfb\x19\xe1\xe3\xb1\xc8\x36\xc9\xf9\xa5\x1c\x5d\x67\xe8\xb8\x16\x2a\xf8\xd8\x6a\x0f\x21\x2d\x10\x87\x90\xd6\xe5\xcc\x77\x90\x2f\x7a\x51\x5a\x8f\x14\xb5\x1e\xde\xf6\x8f\xe1\x4c\xfb\x9e\x38\xd9\xcc\x43\x2c\x3b\xf4\xc0\xa1\x74\xeb\xe0\x28\x61\xe7\x73\xeb\x44\x16\xf1\x8f\x3c\xa8\xa6\x04\x80\x83\x25\xeb\xe6\x46\x94\x52\x1c\x3a\xf7\x56\x6c\x66\x24\xd9\x89\xc3\x58\xc9\x77\x4d\xad\x79\x63\xbb\xea\x8d\xd8\x3e\x6b\x54\x71\xa2\x2a\xe8\x70\x20\x88\x83\x49\xeb\x2b\xb1\x3a\xee\xdb\xa2\x6f\x45\xaf\x96\x56\x6e\xae\xcd\xb3\x73\xb1\xd6\x18\x97\xbc\xad\x6b\xd8\x2d\x32\x55\xdb\x65\xcf\x2a\xa3\x40\x84\x05\x71\xb0\xde\x4e\xe0\x57\x53\x12\x76\x29\x10\x3d\x29\xb7\x7d\x78\xe5\x59\x59\xf4\x14\x0f\xb5\xcd\xd8\x4d\xba\x57\xa9\x3a\x4c\x5d\x02\x45\xc2\x3d\x88\xb0\x20\x0e\xa6\x81\x89\xa7\xf2\xef\xde\x06\x4b\x37\x24\x12\x9a\x99\xe1\xa7\xc5\xf6\x96\xbc\x6a\x14\xc5\x64\x89\xa3\x67\xd6\x9f\x71\x13\xe3\xd7\x80\x4a\xf1\x81\x38\x58\xd8\x4b\x9f\x7c\xf7\x4b\x24\x26\x6b\x9b\xfe\x51\xdd\x3a\x13\x11\xe9\x53\x87\x4f\x7a\xe6\x97\x6f\x96\x59\xfa\x85\x52\xa0\xda\x03\xf5\x57\xe1\xac\xef\x7f\xcd\xf7\x87\x0f\xea\xc3\xc2\x02\xe2\xcb\xb2\xd3\x66\x5e\xf6\xa4\xa1\x04\x09\xe5\xd7\xb7\x4e\x69\xe3\xdf\x24\x23\xf5\x3d\x18\x12\xc6\xa1\xff\xef\x3a\x0b\x87\x63\x9e\x8f\x0e\xd9\x49\x6d\xeb\x9c\x6c\xd6\xae\xf5\x99\x41\xd6\x71\xb6\x2b\x3f\xb5\xc9\x9a\xa5\xd3\x3a\xfb\x33\xcd\x48\x98\xf9\x0e\x8a\x7c\xd1\x7c\x0f\xc6\xe6\x60\x95\x70\x20\x64\xf4\xc5\x9a\xdf\x60\x27\xbc\x2a\x77\x4f\x38\x3f\x72\xc3\xd1\xf1\x5a\x11\x96\xbb\x87\x83\xe1\xad\xff\x1e\xfd\xd6\x2c\x2a\x23\x55\xc7\x5e\x2e\xc6\x2b\x3c\xa3\xfe\x54\x70\x66\xb0\xea\xaf\x1e\x48\xeb\xf8\xba\x70\x79\xbd\xb3\x84\x62\xbb\xef\x23\x64\xbe\x83\x62\x22\xee\x7c\x87\x9b\xef\xf2\xaa\xc4\x64\x7d\x87\x25\x8c\x6c\x71\x98\x25\x4a\x6c\x78\xe1\x3b\x01\x1a\x6d\x62\xa3\xf8\xa7\x9d\x23\xc6\xb5\x0e\x36\xa9\x46\xff\x3c\xc1\x69\xba\x60\xbe\xff\x4a\x6f\xd4\x8e\x51\xc5\xe2\xa0\x3a\x0a\x98\xf3\xbf\x7b\xc5\x7f\xd5\x86\x24\x7b\x77\xb4\x66\xd1\x6d\x7c\xc9\x25\x05\xbf\xe4\xe5\xbf\x37\x79\xc1\x7c\xc7\x2e\x51\x69\x3f\xa8\xc9\x0a\x97\xb6\x59\x28\x31\x77\x0f\xb6\xc6\x1e\x97\x1e\x53\x19\xf1\x91\x2b\xec\x9e\xc9\x68\xaa\xe2\xac\xff\xf7\x26\x2f\x98\xef\xb8\xf5\x81\xbd\xe5\xcf\xfc\xe9\xf9\xbe\xd2\x3f\x66\x94\xdd\xdb\x1c\xed\x98\xd5\xc3\xde\x60\x5d\x30\xc0\xdf\xc8\xef\x55\x91\xc4\xfa\xf7\x26\x2f\x98\xef\xd7\xd2\x24\x0d\x66\xa6\x38\xe3\xdc\xca\xec\x6f\xe4\x61\xbe\xc0\x77\xbd\x49\xe4\xa7\xf5\x9c\x9f\x3a\xe4\xdc\xb7\x5b\x58\xcc\x8c\xf3\xdf\x9b\xbc\x60\xbe\xd7\x60\xce\x3b\xbb\xa8\x7e\x48\x45\xf9\x5a\xf3\x55\x5c\x90\xc8\x44\x37\x3f\x75\xe8\xb3\xd1\x63\x0d\xe1\x86\x2f\x47\x2d\x15\x33\x4e\xff\xde\xe4\x05\xf3\x5d\x97\x48\x22\xfb\x37\xcd\x3b\xe1\x0d\x34\x87\xda\xa1\x3d\xfc\xf2\x2a\x47\x3f\x0d\x45\xd9\xab\xf3\xc6\xee\x2f\x78\x8f\x33\xf1\x66\xfe\xbd\xc9\x0b\xe6\x7b\xf8\xa2\x3c\x8b\x66\x0a\x36\x1f\xf9\x9f\xbe\xc1\xab\x68\x46\xa9\xa4\x14\xbf\x14\x9f\xbd\x93\x22\x42\x15\x5b\x6f\xdb\x14\x9d\xff\xf1\xbf\x99\x92\x83\x1e\xc5\x8b\x2f\xb7\x2e\xb1\xbd\x4a\x72\xe6\x3e\xd9\xe3\xb7\xde\x3e\xb7\xca\x0a\x24\xb4\xf6\x7e\xa6\xf4\xb2\xb3\xe0\x39\x8f\xd7\x5a\x05\xfe\xe8\x86\x76\x96\x81\x38\xd8\xeb\xa2\x9c\xc2\x20\x48\xc2\xbe\x3c\xe9\xca\xac\x20\x9d\xa9\x01\x51\x82\xc4\x91\xe0\x0f\x92\x50\xa5\xfe\x0e\xa1\x8a\xf4\xc5\x86\x43\xa8\x04\x24\x88\x83\xbd\xdc\x8a\x5f\xef\x0b\xe9\x63\x69\x9a\x29\x93\xb4\xbb\x8d\x53\xea\x0f\x6c\xa8\x74\xbe\xdc\x1e\x9e\x38\x0a\xd7\x37\x4c\x67\xe9\xeb\x83\xd6\xd7\x40\x1c\xac\xb7\x9d\x3d\xd5\x18\x86\x3f\xb2\xc7\x35\xb3\xf4\x9b\xbf\x39\xbd\xc7\x8f\xc4\x43\xa2\x23\x49\x78\x2d\xf4\xd3\x0a\xe3\x8a\x4d\x15\xef\x11\x22\x2c\x88\x83\x8d\xed\x6a\xb7\x03\xf3\x1d\x79\xe1\x28\x6d\x53\x53\xbf\xd0\x0e\xa2\x05\xd9\xaf\x24\x68\x2c\xbb\x27\x01\x83\xaf\x4b\xd8\xe8\x64\x12\xa0\xb3\xa9\x20\x0e\xbe\xcd\xd6\x89\x54\xe3\x3b\xe5\xa3\x96\x34\xcd\xab\xc6\xa6\xaf\x9d\x12\x77\x63\x90\x46\x06\xca\xe6\xe2\xd3\xb8\x57\xa8\x51\x34\x4b\x58\x10\xe6\x3b\x88\x43\xdc\xf9\x7e\x29\xf3\x1d\xf4\x8f\x7b\x51\x59\xc7\x8b\xfe\x7a\xfa\x04\xba\x12\xee\x9d\x4d\x3a\xf1\x0f\xf0\xf8\x1e\x2f\xfc\xfa\x9a\x88\xe1\xa9\x4e\xb6\x86\xe6\x5a\xd6\xc4\x06\x55\xff\x03\x71\xb0\x5c\x25\xb7\xd9\x6d\x35\xea\x6d\x4c\xf3\xf5\x7c\xfc\x8b\x2a\x40\x1b\x5c\x57\x31\xb5\xff\xbc\xe9\x5e\x76\x32\xe9\x9d\xef\x0e\x4c\x66\xa6\x88\xb0\x20\x0e\xbe\x0b\x70\x85\xe2\x04\x8b\x67\x62\xa8\x45\xae\xa9\xfd\x2a\x5b\x5d\xfa\x02\x63\xcd\x96\x72\x2e\xeb\x96\x01\x29\xf7\x7e\x62\xc0\xd4\x16\xb4\x0b\x10\xc0\xc1\xab\x6b\x6e\xa2\xf7\x99\xd3\x36\x9a\x20\x61\xde\xe3\xfc\x6a\x62\xc3\xaf\x76\x6f\x38\xab\xc1\xc5\x84\x61\xe8\xce\x8b\x4c\xe2\xaf\x1c\xd0\x21\x2f\x10\x07\x1b\xdb\x65\x59\x05\x33\x93\x1c\xd9\x7e\x83\x77\x56\xee\x42\xe2\x85\x5d\xcc\x3d\xe1\x1d\xa3\x64\xcf\x16\xe9\x24\x76\xdf\x14\x57\xce\x3f\x44\x84\x05\x71\xb0\x41\x08\xe7\xad\xfa\x34\x3f\x85\x9f\x51\x80\x4d\xf1\x3d\x9e\x54\x9c\xf0\x3e\x89\x84\xf8\xfa\x99\x28\x8b\x58\x86\x58\xe4\xa3\x15\x8f\x09\xc4\x8c\x1c\xc4\x21\x2e\x82\xba\x9c\xf9\x0e\x7a\xb3\x5e\x94\x56\x8e\xd2\x14\xc9\x7e\x74\x07\x1e\x92\x7d\xfc\x39\x1f\x0e\x8b\xc6\xf1\x13\x6d\xcb\xf5\x85\xa4\xe7\x31\x6f\x2b\x04\x07\x3e\xf7\x41\xc7\xa6\x40\x1c\x2c\x59\x4f\xb0\x37\xb9\x6a\x67\xff\x7c\x94\xb4\xa6\x51\x58\x52\xdb\x50\x33\xf8\xf9\x34\x91\xa3\x1b\x4f\x94\xdc\xa1\x51\xfa\xce\x0a\x7d\x20\x22\x2c\x88\x83\x8d\xaa\x6f\xcc\x9b\x1f\x03\xb7\x46\x15\x52\x3c\x37\xb6\x18\xd6\x92\x8e\xe6\x19\xd5\xf0\xfe\xfe\x4e\xc5\x22\x2b\xff\x9b\x3a\x1b\x5b\xeb\x0e\x2d\x06\x02\x38\x58\x6f\x83\x8b\xa4\x25\xd9\x82\x78\xf6\x2d\xb4\x03\x5e\x7e\x08\x23\xac\xd6\xe4\x7e\x8e\x39\x38\xf4\x37\x25\xdf\x18\x53\x3a\x25\x51\x1d\x05\x11\x16\xc4\xc1\x2d\xc2\x1b\x8a\xd7\xe8\x7f\xc5\xf3\xe2\xde\xef\x7e\x3a\xb6\x1b\x7e\xb8\x2c\x61\x1d\xf7\xa2\xe5\x24\xda\xd2\xe0\xc8\x69\x80\x3b\xff\x29\x64\x11\x02\x38\xd8\x20\x60\x84\x6a\xd9\xdc\x1d\x89\xd7\x3b\x57\x19\xe8\x65\x9e\x8f\xbb\x7b\x35\xa2\x93\xf9\xe7\x93\x39\x41\xce\x56\x4a\xae\xd6\x37\x5a\xc2\x08\x69\x81\x38\x84\xb4\x2e\x67\xbe\x83\x66\x50\xff\xc7\x66\x34\xd6\x0d\x29\x8a\x1b\xb9\xf3\xe2\xb4\xf7\x3c\xe2\x97\x3c\xdf\xb5\x3c\xd1\x8b\x1f\xc9\xfd\x53\x29\x8d\xbb\xd0\x7b\x37\xa4\x97\x1a\xda\x8c\x06\xe0\x60\xc9\x5a\x5e\x9f\x39\x2e\x74\xfb\xe8\x37\x82\xdc\x5c\x19\x42\xc1\xfa\xcb\x33\xbc\x3f\xca\x66\x1b\xfb\xcb\x4d\x06\xa2\x7a\x96\xfe\x7b\xd0\xf9\x10\x10\x07\x1b\x55\xaa\x2f\x9b\x7d\xef\x69\xd6\x72\xbf\x14\xfc\xd9\xfa\x31\x1c\x98\xd4\xe9\xd3\xfb\xde\xe0\x95\x90\x78\x96\xac\xd3\xe1\x27\x3b\xe4\x1c\x44\x58\x10\x07\xdf\xe0\x44\x54\x14\xb0\xb2\xf4\x4e\xa8\x87\xe9\xb6\x9a\x20\x53\x6b\x81\xf7\xe0\x72\xa1\xad\xb6\x16\x4a\x04\x7b\x1d\x9b\x40\xf9\x15\xe8\x5f\x0b\xc4\xc1\xc6\xb6\x00\xef\x6e\xcb\xc9\xa9\x5f\xf4\x6c\xb7\x5d\xe2\x9e\x88\x91\x51\xae\xbf\x66\x40\x5e\xba\xea\x0d\x7f\xe9\xb1\x49\x8f\x30\x13\xe8\xf8\x3f\x88\x83\x0d\x82\xce\x63\xf2\x12\x75\xd4\x14\xaa\xac\xb4\x56\xa6\xb4\x84\xb5\x59\x8f\xc8\x3a\x5f\x79\xfe\x38\xd4\x7b\x9b\xcb\x27\x54\x4f\x70\xaf\x21\xa4\x05\xe2\x10\xd2\xba\x9c\xf9\x0e\x9a\x29\x5f\x94\x16\xc3\xd7\x80\x60\x3a\x3f\xd9\x7b\x8c\x69\x48\x43\x06\x29\x41\xa5\x55\x91\x6d\x04\xa8\x42\xab\xdf\x6e\x3f\x96\x3b\xc9\x7c\x78\x17\x7a\x21\x82\x38\xb8\x43\xfa\x81\x7f\x02\xad\x56\x2b\xe6\x84\xe2\x1c\x55\x10\xf7\xb1\x7c\x18\x63\x7f\xf5\x1f\xe9\xac\xc6\x2d\x1a\xfa\x05\xab\xa7\x0c\x45\x90\x43\x0a\xe0\x60\xa3\x5a\xae\xd6\xef\x2c\xff\x23\x7d\xd6\xde\xa0\xd6\x8d\x21\xe2\x99\xcb\x1f\xec\xdb\x71\x22\x49\xcc\xfb\x7a\x99\x8a\x52\x0d\xb3\xf5\x2f\xa0\x19\x1c\x80\x83\x97\x44\xf2\xf4\x45\xdb\x65\xf1\xaf\xe5\xdd\x2f\xdd\x98\x12\x33\xb7\x65\x30\x21\x2d\x2b\x32\xa7\x36\x1a\xaf\x97\xc5\x67\xff\xda\x0e\xf5\x16\xc4\xc1\xc6\xb6\x3b\x2c\xd0\xd5\xc2\x73\xb6\x88\x59\xaa\x39\x2a\x56\xde\x93\xea\xc4\xdf\x97\xa3\x9a\x55\xe7\x1b\xe5\x47\x45\x49\x11\xee\x06\x49\x44\x58\x10\x07\xaf\xd5\x30\xd2\xf8\x07\x49\x94\xa8\x12\xe5\x1a\xda\x41\x6c\x1d\x55\xd2\x5f\x71\xb7\x98\xdf\x7c\x32\xcd\x6b\x94\x2b\xed\x4d\x57\x47\x66\x11\xd2\x02\x71\x08\x69\x5d\xce\x7c\x07\x7d\x11\x5d\x94\xd6\x34\x9b\xaa\xf5\x75\x0e\x9a\x6c\x73\x8b\xed\x7e\xc1\x53\x76\x41\x1d\xdc\xb4\x6b\x1f\x77\x12\xc4\xcb\x33\x69\x31\xdf\x4f\x18\x20\x43\x47\x23\x00\x1c\x2c\x59\xd1\x62\xb7\x6a\x9d\xb9\xeb\x3d\x3e\x47\x06\x9a\x5d\x79\xcb\x30\xe0\x3f\xf5\xcd\xd2\xa9\x79\xf9\xd0\x30\x87\x55\x1e\x8f\x88\x0e\x9a\x6b\x81\x38\xd8\xa8\x0a\xda\xe8\x10\x6f\x29\x7e\x99\x1d\x10\xe5\xce\x4c\xd7\x19\x5a\x24\xb0\xff\x3d\x12\x98\x97\x41\x65\xdf\x96\x7d\x58\x45\xc7\x03\x95\x13\x05\x71\xb0\xde\x9a\x55\x99\xb0\xe2\xdc\xd0\x63\x59\xb9\xed\xf7\x65\x29\xb7\xcf\xa7\x04\x5b\x38\x7f\xf4\x97\xaa\x81\x88\x3e\xe6\x57\xda\x51\xad\x09\x44\x58\x10\x07\x1b\x5b\xb1\x1e\xcd\x63\xf3\x93\xc5\x8c\xf0\xbf\xc5\x7f\xe2\xcc\x55\x2d\x53\xde\x3b\xd1\x0a\xfa\x62\x34\x0d\x2d\x50\x11\x27\xf1\xee\x42\xb7\xc6\x80\x38\xd8\x20\x88\xab\xe6\xb5\x45\xdb\x68\xdd\xfb\x3e\xc9\x37\xcd\x20\xb1\x46\xa5\x3d\x79\xc4\x36\xbf\x3f\x84\xbb\xee\x29\xf3\x9d\xf6\xe6\x97\x75\x84\xb4\x40\x1c\x42\x5a\x97\x33\xdf\x41\x5f\xbe\x17\xa5\xc5\xd7\x8e\xdc\xf8\x87\x67\x8f\x79\x64\x15\x07\x45\xba\x6d\xdc\xcf\xd0\xd6\x96\x44\x89\x8b\xf6\xa0\x12\x7f\x87\xcf\xa6\x6b\x50\x08\xf1\xf3\x41\x1c\xfc\x86\x54\x13\xd6\x84\xb1\xa1\x82\x95\x49\xe4\xf5\x5d\x7e\xb9\xd3\x5e\x65\x65\xbf\xf1\x8d\x8c\xc1\x6f\x78\x15\x29\xd8\xd8\x37\x12\x20\x73\x05\xc4\xc1\x46\x35\x3f\x8c\x2b\x84\x63\xa7\xfb\x9e\xbb\x81\x93\xfd\xe1\x7e\x59\xe5\x40\xc2\xc4\xf6\x23\x6e\xf3\x0c\x34\xdb\x9c\xa1\x77\x11\x3f\xa0\x7a\x1d\x20\x0e\x5e\x52\x96\x5f\x14\x5d\x27\x27\x8b\x58\xcb\xc9\x81\xf1\x66\x4b\x8e\xa6\x05\xbb\x7a\xe6\xfa\xe3\xa6\x41\x25\x55\xda\xc7\xee\xd1\xe9\x04\xd0\x5f\x37\x80\x83\x8d\x2d\xe9\xa2\xfa\x59\x42\x92\xf2\x86\xdf\x11\x13\xc1\x5f\x2a\xc3\x88\x35\x02\x4c\x3b\xf7\xe5\xa7\x15\x0c\xfe\xdd\x5e\x5b\xa1\x46\xd0\xbe\x0e\x10\x07\x1b\x04\xd7\x2f\x99\xfd\x0a\x01\xd9\xdf\xbc\x03\xab\x2b\xdf\x9a\xda\xcf\x69\xb9\x5c\xf5\x96\xa6\x8e\x56\x62\xe1\x12\xe3\x6e\x93\xee\xd4\x41\x48\x0b\xc4\x21\xa4\x75\x39\xf3\x1d\xb4\xc2\x71\x51\x5a\x8f\x89\x06\x46\x8b\xd3\xe3\x24\x2a\xbe\xc8\xeb\x2f\x62\xc6\xa5\x1b\xc6\x04\xbf\x18\x28\xb4\x37\x54\x6a\x45\x71\xf7\x47\x19\x81\x36\x3c\x83\x38\xf8\x15\x3f\xfe\xec\x09\x4d\x6e\x64\xa9\x3f\x05\x87\x0b\x2b\x08\xaa\x7f\xdb\xc9\x51\x94\xc6\x2e\x3a\xc8\xe5\x0c\xf7\xd2\x65\x5e\x21\x82\xf6\x75\x80\x38\xf8\xbe\x0e\x3a\xe6\x84\xeb\xec\xae\x94\xe5\xfc\xd1\xb4\x9b\xee\xf9\x91\xf9\xe8\x7a\x54\xd4\x6b\x2e\x22\x81\x92\xb9\x04\x37\x96\x79\xa0\x25\x0d\x10\x07\xaf\xad\x9c\x7f\xa2\x2b\x6e\xaf\x77\x9d\x94\x59\xed\x9b\xe6\x96\xb6\x10\x1a\xbd\x30\x0d\x07\x93\xd1\x9f\xfc\xce\x53\xca\xd5\xf1\xc5\x20\x68\xdb\x18\x80\x83\x8d\xed\x67\xeb\x2a\xfa\xfc\x17\xce\x2e\xc5\x75\x95\x9e\xf4\x3b\x5c\xa7\x7e\x01\x22\x6e\xdd\xb9\xda\x43\x2f\x99\x9b\xb2\xc8\x71\x02\xa1\xed\x22\x20\x0e\x36\x08\xe7\xd3\xfb\x09\x36\x22\xf6\x39\x13\xf3\x1e\x96\xdf\x76\x6d\xa4\x28\x4f\x85\xd6\xbf\xa1\x30\xa5\x69\x12\x85\xef\x72\x85\x64\x54\x20\xa4\x05\xe2\x10\xd2\xba\xa4\xf9\x0e\x5a\xc3\x46\xdc\xf9\x7e\xc1\x7c\x37\x96\x4a\xf8\x15\x9a\xc4\x85\x32\x57\x99\x6f\xec\x27\x6e\xb2\x2a\xb5\xe3\xf7\xf2\xad\x6c\x4d\xb0\x3f\xe1\x7b\x3c\x47\xb3\xf3\xb2\x7f\x5f\xe9\xbb\x60\xbe\x3f\xa4\xf1\x52\x13\x62\xf5\xba\xee\x66\xf1\x2b\xb9\x23\x97\xb9\x92\xee\x05\x0f\x32\x67\x00\x5f\x29\x26\xaa\x9b\x21\x71\xd8\x2d\xb9\xff\xcd\x4a\x1f\xe8\x87\x5d\x7c\xda\xd8\xf4\x19\xba\x6e\x1d\x19\x5e\xbd\xa3\xa0\xfd\x22\x28\xb6\x4c\x2e\x34\xd7\x90\xed\xf0\x1d\xde\x48\xbc\x92\x50\x1b\x8d\x4a\x0b\xf4\xd7\x08\xe2\x60\xfa\xfd\xd2\x76\xb7\x74\xc7\xca\xb0\xb8\x29\xa1\x91\xb8\xbb\xb7\xc2\xec\xf9\x93\x7b\xf3\x66\xc7\xfa\xed\xcb\x45\x7b\x9f\xbe\x3a\x87\xb8\x22\xc2\x82\x38\x98\xd0\x72\x88\x56\xee\xad\x0f\xc6\xa2\x29\x24\x66\x0f\x38\x47\xe7\x2d\x79\x1f\xa4\xb6\x8f\x3c\xf4\x40\x89\xbd\xfa\xe9\xb3\xdd\x0d\xf4\x69\xe8\x13\x1f\xc0\xc1\x7a\xfb\x41\xe2\xed\xd6\x79\x56\x16\x45\xa5\x41\xf8\xe6\xb9\xdc\x7c\x7c\x97\x6a\x7f\xdc\xf4\xeb\x8d\x67\x05\x92\x35\x25\x48\x7b\xc8\x50\xa5\x65\x10\x07\xbf\xac\x4c\x08\x29\xcb\xf7\x79\x4d\xc6\xa3\xac\x1f\x3b\x07\xbf\x47\x35\xec\xea\x4c\xa5\x6c\x88\xb4\x12\x31\x5f\xd0\x6a\xae\xd3\xaf\x40\x67\xb4\x41\x1c\x6c\x10\x5e\xb2\x38\x7b\x9c\xd1\xb7\xfb\xba\xe6\xbb\x59\x2a\xf8\x1b\x54\x9e\x50\x86\x90\x85\x99\x6e\xee\x2b\xfc\xf0\x36\xa9\x88\x6a\x69\x41\x3c\x6d\x20\x0e\xf1\xb4\x5d\xce\x7c\x07\x09\xf8\xff\xb8\xd1\xe0\xb1\x94\x5c\x72\x82\x64\x4d\x71\x71\x1c\xda\x8b\xb0\x17\x71\xea\x39\x8d\xb9\x22\x9a\x77\x82\xef\xf4\xca\x2a\xba\xbe\x59\x59\x83\x0e\xfc\x02\x38\x58\xb2\x1e\x60\x23\x7f\xd2\x20\xd9\xb9\x75\x3b\xca\xa3\xdc\x37\x92\x28\xc7\xa0\xc2\x62\x6a\x5b\xed\xf7\x11\xbe\x40\xdb\x8b\x53\x79\x49\xa8\x4c\x01\x88\x83\x8d\xaa\x88\xc5\x8d\xd3\xea\x30\xf9\x74\x4d\xfe\xd0\x1f\x7e\xfd\x5b\x89\x7e\x49\x62\xa3\x2f\x14\x51\xeb\x8d\xd9\x26\x2a\x91\xb9\x16\xa0\xcb\x5e\x40\x1c\xac\xb7\x9f\xde\xc7\x44\x71\x4d\xfd\x09\x5e\x20\xf8\x39\xb7\xc3\x58\xab\x2e\x9a\xa8\x43\x38\xc0\x97\xf4\x8d\xbd\xc0\xc5\x03\xcf\xe1\x2b\x74\x7f\x08\x88\x83\x8d\x2d\xa5\xf9\x01\x9f\x7e\x19\xef\xbc\x85\xb5\x1b\x93\x0a\xf9\xc0\xd1\xdb\x6f\x35\x67\x25\x8b\x45\x33\x6c\x94\x4f\xd3\xdf\x07\x57\x42\x6f\x33\x10\x07\x7f\xbe\xc4\x66\x5a\xc8\x4b\x98\xb2\xdc\x6d\xab\xb0\x92\x6e\x4a\xe4\x3c\x93\x54\x9f\xf5\xf4\x67\xe2\xa8\x14\x79\xb5\xf8\xfd\xea\xcb\x55\x84\xb4\x40\x1c\x42\x5a\x97\x33\xdf\x41\xbe\xe8\x45\x69\xfd\xd5\x30\xd2\xa9\x9d\xe3\x98\x8f\x61\xb2\x2b\xf8\xd0\x13\x9f\xa9\x49\x81\x73\x2f\xb7\x3c\x69\xd1\xb6\x9a\xef\x58\xb7\xe6\x06\x74\x7a\x09\xc4\xc1\x92\xb5\xff\xe6\x44\xdb\xbf\xe4\x40\x94\xc5\x24\x91\xe8\x4a\x7c\x01\x67\xf6\x50\x68\x5b\xa7\xcd\xbe\x77\x4a\x8c\x6f\x8f\xb9\x6c\x31\x3b\x22\x2c\x88\x83\x8d\x2a\x3f\x5a\xf8\x9e\x26\x0b\x93\xa9\xd4\x10\x57\x5b\xe5\xb7\x75\x81\x67\xec\x29\x2f\x17\x3a\x93\xc6\x17\x47\xa8\x2c\xa4\x9e\x8c\x93\x21\xc2\x82\x38\x58\x6f\x57\x13\xc3\xe3\xcd\x7c\x2c\xf9\xc4\x7d\xab\xb0\x69\xe4\x6e\x17\xe8\xbe\x9a\x23\x45\xbb\xc9\xce\xa1\xdb\x31\x99\x77\x22\xcf\xcd\x0b\x19\x09\x00\x0e\x36\xb6\x4b\x28\x29\xf7\xac\x9d\x65\x8a\xc2\xbf\x4f\x67\x8a\x17\x26\x47\x7d\xc6\xd7\x2e\x33\x22\x66\x7b\xf3\x24\xc4\xf1\x68\x37\x8d\x0d\xfa\x60\x02\x71\xb0\x41\xb8\xf4\xc9\xf7\x6f\x95\xb3\x14\x5f\x88\x83\x5a\x7a\xae\x31\xf7\xc8\x78\x1b\x6d\x4a\xd6\x04\x97\xcb\xf2\x9c\x56\xa6\xde\x3b\x6c\x97\xe4\x8a\x14\xf9\xaf\xf9\x1e\xd5\x9d\x3e\xad\x39\x61\x58\xe9\xd8\xef\x94\xb6\xe6\x2a\xa6\x76\xa5\xa7\x74\x4c\xb8\x08\xdb\x47\x3f\xb6\x08\x95\xa3\x79\xa8\xfd\xbf\xab\x57\x21\xda\x6a\x1c\xb9\x28\x5f\x7d\x3b\x08\xeb\xea\x85\xab\x77\x02\x22\xe3\xe5\xe4\xe6\xdb\xec\x66\x38\x58\x98\xb5\x7a\x59\x86\x61\xe6\x3b\x28\xf2\x45\xf3\x1d\xed\x19\xc7\x73\xed\xe1\xb3\x99\x44\x6e\x32\xf4\x3e\x29\xac\x42\x46\x7d\xbe\xcd\xe0\xd1\x90\xa4\xe5\xec\xba\x3f\xed\x98\x02\x1a\xff\x41\x77\x53\x6c\x74\x0f\xb3\x0c\x3e\xa3\x5e\xbf\xfd\xc6\xf1\x8f\x56\xc8\x9d\x45\xbd\x58\x8a\xc9\x3c\x59\x1d\x85\xe2\x70\xeb\x9a\x5b\x6f\x20\xf3\x1d\x14\x13\x71\xe7\xbb\x02\x6c\xb6\x31\x53\xa4\x72\xa3\x28\x60\x04\x9d\x98\xe1\x21\xd7\xad\x17\x2e\x44\x7a\xef\x6d\xfb\xc9\xf4\xa6\xe8\x36\x09\xd0\x7a\xc4\x63\x75\xb0\xff\x79\x82\x83\x74\x17\x3e\xc1\x69\x98\xb4\xe8\x4c\xe7\x60\xe1\xd9\x3a\x36\xed\x9d\xd5\x66\xc6\x97\x0c\x7c\xd5\xc8\x26\x4d\x20\x9b\x4c\xf8\xe9\x19\x66\xd2\x4b\xdc\x7f\x6f\x52\x03\xde\x24\xc3\x79\xc7\xc3\xa6\x16\xc1\x3d\x6b\x57\xfc\x46\x79\xab\xb8\xb3\xb7\x43\x39\x26\xec\x95\xb8\x3c\x63\x11\xbd\x9b\xd1\x3c\x57\xc2\xfe\xbd\x49\x13\x78\x93\x55\x04\xb4\x5d\x46\x76\xef\xaa\x4d\x55\xd3\xbf\x60\xd0\xeb\xdc\xb3\x13\x0d\xa5\x6a\x9c\x36\x18\x4f\x69\x1b\x13\xff\x16\xd8\x3a\xff\xef\x4d\x7a\x5f\x38\x13\x3e\x90\x95\x8b\x67\x71\xdf\xeb\xbc\x55\x87\x25\x6f\xb7\x7a\xea\x98\xab\x49\x50\x87\x69\x34\xba\xa0\x1a\x65\x85\x8d\x8d\xea\xca\xbf\x37\x99\x02\x6f\xb2\x6b\x68\x01\xa7\x6f\x6f\xb3\x79\x81\x04\xfb\xbb\xd6\x69\xbf\xcb\x60\xd3\xdb\xe3\x83\x5c\xb6\xac\x57\x09\x01\x6f\x31\x53\xc5\x5a\xff\xbd\xc9\xb7\xf0\x26\xc9\x89\x26\x7d\x62\x71\x15\x98\xf4\x94\x7d\x1f\x49\xa6\x3c\x6f\xa4\x23\xa4\x5b\x36\xd1\x1e\xa8\xcc\x23\xcd\x5f\x7a\x17\x22\xfe\xef\x53\x72\xa4\xc6\x0b\xe7\xfb\xb9\xd8\x8f\xfa\x70\x15\x3c\xb5\xb3\x8b\x70\x4f\xf4\x44\x95\xcd\x1c\x8f\xb6\x0c\x44\x8d\xf8\x4c\x30\xa2\x0a\x46\x82\xeb\x43\xff\x37\x53\x72\xd0\xa3\x78\xf1\xe5\x46\x76\x9d\xa1\x5b\x37\xb3\xc9\x37\xa6\xb5\x3c\xbe\x88\x27\xdf\xd0\x4f\xc7\x5f\x24\xe9\x07\x2a\x39\x4f\xbc\x41\x51\x37\xe5\x1a\x74\x7d\x32\x88\x83\xbd\x2e\xe8\xf3\xe9\x4c\x99\xce\x0a\xe8\x9b\x4d\x8e\xe4\x23\xb0\xd4\x6b\x68\x8c\x82\x48\x0b\xcb\x5e\x74\xc9\x55\x27\x27\x3d\x9b\x79\xa2\x8b\x08\x0b\xe2\x60\xff\xeb\x5a\x04\xc8\x6b\x21\x86\xca\x55\x66\x4b\xa2\x43\xb4\x62\x05\xcc\xbc\x24\x86\xb8\x24\x1b\x65\x11\xa8\x04\x5f\xf7\x5d\xf0\xb4\xa0\x73\xfa\x20\x0e\xd6\x5b\x8d\x37\x65\xf3\x0f\x89\x8a\xae\xd0\x9f\x49\xe5\xdb\x25\xe1\x1e\x77\x87\x17\x92\x49\xd1\x67\xf8\x60\xee\x27\x97\x19\xe5\x34\xb8\x20\xc2\x82\xb8\x60\x71\xb1\xff\x86\x1d\xa5\xc1\x56\xa9\xeb\x5b\x99\x77\x26\x8d\x64\xcb\xb9\xea\xd6\xe1\x94\x75\xab\x97\x33\x50\xb3\x8e\xe4\x51\x05\xab\x06\x8e\xac\x15\x22\x2c\x88\x83\x0d\x02\x03\xc9\xe3\x6a\xef\xc7\x24\xe3\x51\xaf\x4e\xe3\x0c\x44\x91\x2d\x53\x1f\x4b\xbb\x89\xff\x60\x6e\x52\xfb\x18\x2e\xd1\xb0\x3f\xfd\x02\x61\xbe\x83\x38\xc4\x9d\xef\x0a\x97\x99\x36\x81\xfe\x71\x2f\x2a\xcb\xe9\x4f\xf5\x58\x4f\x68\x0a\x41\x6e\x16\x97\x1c\x52\x5d\x8b\x9e\xd9\xea\x6a\x53\xe3\x98\x8f\xf2\x41\xf9\x24\xf5\xe4\x51\x35\xf4\x55\x06\xe2\xe0\xa7\x32\x3f\xd1\xf0\x0c\xa1\xfc\xa0\xf0\x9d\x9d\xc9\x70\x2e\x12\x92\x59\x5c\x2d\x35\x99\x7d\x12\x13\xf0\x5b\x8b\x2a\x89\xbf\x4b\x0d\x2a\x8b\x0d\xe2\x60\x83\xba\xfd\x35\x1c\x33\xe5\x09\x8d\x94\xce\x77\xa6\x7a\x96\xe2\x60\xae\xa1\xe0\xfb\x1f\xfa\x5b\x8e\xc7\x18\xb5\x68\x5a\x5e\x86\x63\x40\x8b\x15\x20\x0e\xd6\xdb\x28\xf7\xd1\xdf\x67\xe6\x74\x4f\x73\x35\xc2\xd3\xba\x7e\x1b\x8f\x7e\xe9\x53\x8d\x32\x7d\x7c\x2a\x2c\x47\x57\x81\xe3\x55\xd9\x9b\x8f\x08\x0b\xe2\x60\xca\xa2\xd1\xf5\x36\x6f\x49\xf9\x40\x73\xf3\x4c\x78\x1a\xbd\xcb\xea\x3b\x7e\x42\xaa\x05\x4f\x1b\x27\x83\xcd\x2d\x03\x0a\xac\x95\xb4\x3d\x44\x58\x10\x07\x1b\x84\x80\x5b\xae\x28\x94\xda\x8b\x9d\x31\xbb\x4c\x29\xf7\x17\x2a\xf6\xd9\x98\x8a\xc6\x1c\x46\xe3\xa9\xc7\xc7\x96\xd2\x8d\xa3\x14\xfd\x10\x33\x72\x10\x87\xb8\x08\xea\xee\xa5\x66\xe4\xa0\x37\xeb\x45\x69\xa1\xb4\x56\xf2\x3d\x45\x23\x12\x88\xb3\xa7\x1e\x36\xab\x31\x6b\xa3\xe6\xe1\x7b\x1d\xa7\xe0\xe4\xa1\x42\xcf\x85\xb7\x5b\xc9\x0b\x7d\x90\x80\x38\x58\xb2\x8a\x90\x6d\x15\x08\x27\xd0\x08\x86\x19\x6d\x5f\xe5\xbe\xbf\x2b\x65\x97\xdd\x40\x4a\x77\xcd\x3a\x84\xf5\x18\xed\x9d\x7e\xe6\x1c\x74\x86\x14\xc4\xc1\x4b\x22\x8b\xe8\xb4\xa9\xde\x10\xaf\xce\x75\x74\x77\x15\xdd\xb8\xa6\x9c\x58\x47\xfc\x21\xe5\x2e\x55\xc9\xfb\xc6\xec\x6f\x6c\xf7\xd7\xa0\xb3\x2d\x20\x0e\xd6\x5b\x22\x3c\xb5\x77\x04\x67\x37\x5c\x9d\x8f\x6b\xa7\x2a\x3b\x88\x03\xbd\xe5\x7d\xcf\xf4\x1b\xcb\x0b\x46\x25\x0a\x5a\x64\x0a\xb9\xa0\xa2\x51\x20\x0e\x26\x2d\x27\xeb\x42\x93\x8c\xf4\xc1\x3a\xbf\xd7\xfa\x85\xb7\xb2\x06\xa4\x38\x15\x8e\xf3\x26\x26\xd2\x39\xd7\xd0\x75\xec\x9e\x08\x60\x37\x42\x8f\x2d\x80\x83\x0d\xc2\xe0\xf3\xec\xfb\xaf\x17\xd7\x55\x8a\xf0\x7d\x4d\xf3\x08\xfe\xa8\x04\x72\xe6\xfe\x18\xfd\x63\x97\xc7\x5f\x41\x11\x41\xfe\xf9\x8b\x3c\x42\x5a\x20\x0e\x21\x2d\x8d\x4b\x49\x0b\x34\x83\xba\x28\xad\x62\x7d\x8f\xfb\xba\x4e\x1d\x18\x0c\x9e\xf8\xa5\x5a\x57\xde\x75\x10\x2b\x0f\xfc\x3d\xae\x5f\x29\x3e\xd3\x47\xa3\xaa\x0f\xfa\x05\x6d\x89\x06\x71\xb0\x64\x89\xba\x36\x7d\x7d\x30\x83\xe3\x77\x35\x80\xb6\xbf\xf8\x44\x4e\x97\xa7\x78\xe0\xaa\x7c\xd7\xdf\xb0\xef\xaf\x58\x93\x5e\x8a\x52\x42\x2f\x2e\x10\x07\x1b\xd5\xbd\x7c\x66\xf9\xdc\x79\x64\xad\xfc\x06\xf4\x8f\x6c\x8c\x6e\x43\xef\xa3\xd6\xed\x62\x22\xb3\x83\x53\xb6\xae\xce\xd5\x9d\x3d\xb4\x44\x84\x05\x71\xf0\x5d\x28\xcc\x7a\xc5\x87\xc4\xe4\xd3\xea\x51\xd1\x9d\x0a\x87\x94\x71\x04\xcf\x71\x7f\x19\xfd\xf1\xa1\xc3\x0e\x64\x56\x41\xf9\xfb\x81\x09\xda\x85\x02\xe0\x60\xd2\x4a\xcc\x12\xc8\xf4\x1c\xb2\x9c\x0e\x9b\x15\x98\x6a\xb0\x52\x0f\x89\xdd\x89\xbc\xde\x73\xfc\x6d\xa2\x28\x8f\x4e\xdf\x3b\x83\x17\xea\x2d\x88\x83\x0d\x42\x7d\xaf\x8a\x97\x0c\x76\x56\xe0\xf8\x7c\x84\xd7\x93\xaf\xef\x15\x39\xb6\x0f\x34\xfb\x7d\x58\x5b\x2a\xf5\xde\xbb\x9b\xcb\x09\x4c\x22\xa4\x05\xe2\x10\xd2\x32\xb9\xdc\x19\x52\xc0\x4c\xf9\xa2\xb4\xb0\x9b\xca\x24\x2a\x9d\x6d\x68\x9b\x1d\x4a\xe6\x87\x85\x0b\xaf\x26\x48\xae\xdf\xc2\x98\x6b\x27\x18\x50\xb1\xbf\x76\xb0\xdd\xda\x84\xf8\xf9\x20\x0e\x96\xac\xd7\x3c\x18\x26\xbe\x7a\x1a\x0e\x96\x09\xde\x58\x32\x92\xe3\x95\xc2\x8d\xbf\xcd\xf4\x57\x45\x84\x87\x92\xcc\x51\x2a\xd2\xa3\xb1\x10\x61\x41\x1c\x6c\x54\x9b\x5b\x31\xc8\x35\xb4\x04\x1d\xc9\xae\x7b\xb9\xc7\x5f\xf9\xb8\xa9\xb7\xe9\x39\x32\x7d\x1d\x9b\x4b\x80\x0b\xf5\x4a\x4f\xda\x1e\xf4\xc1\x0f\xe2\xe0\xc7\x93\x4b\x9e\x91\xe5\x6a\x3f\x4f\x50\x23\x0d\xe2\xfb\x24\x6f\x91\x17\x7f\x1c\x3f\xe7\x61\xf9\x8b\x7f\xb9\x79\xe4\xe5\xfa\x21\xbe\x0c\xf4\x67\x08\xe0\x60\xd2\x92\x30\xb3\xe3\x93\x63\x51\x32\xa5\xd9\x4c\x71\xce\x50\xfa\x94\xab\x47\x46\x26\xfd\xd2\x56\x94\x3a\xea\x24\xff\xf7\xaf\xaa\xd5\x5f\x88\xb0\x20\x0e\x5e\xa1\x32\x84\xe5\xdd\xfd\x47\x9b\x2f\x05\xad\x1a\x18\x8c\x19\xb0\xdf\x73\x55\xec\x97\xa6\x5f\x6b\x35\x76\xdd\x18\x94\x4b\x95\x91\xba\x8a\x90\x16\x88\x43\x48\xcb\xfb\x52\xd2\x02\x7d\x11\x5d\x94\x16\x3f\x46\xe6\x50\x55\xeb\x2b\xda\xd6\x65\x74\xb2\x23\x9c\x4c\x21\x9f\x6d\x81\xe5\x01\x12\xe6\x2b\xa6\x4c\x13\x1d\x75\x09\xef\xa0\x1d\x53\x20\x0e\x5e\x76\xfe\xfd\x67\x9a\xd8\x19\x23\x21\x45\xf7\xc6\x94\x39\x5d\x76\xf2\x3a\x83\xda\xf3\x2f\x42\x3f\x3d\xd9\xc9\x3e\x06\x7e\x5b\x3f\x87\x6e\xb7\x01\x71\xb0\x51\xed\xb0\xf7\x50\x08\x99\x2a\x46\x6d\x0c\xa9\xd6\xa5\xa7\x29\x4a\x1d\xa6\x31\xc3\x30\x53\x55\x72\x22\x17\x61\x79\x7a\x62\xd6\x89\x84\x08\x0b\xe2\x60\xbd\xdd\x0d\x6b\xf9\x92\xf7\xe3\x67\xa8\xd8\x5c\x46\x52\x35\x97\x4c\x6b\xca\xe6\x3a\x3e\x52\x16\x8f\x32\xe3\x30\xbd\xcd\xc6\x9f\x30\x3c\x44\x58\x10\x07\x93\xd6\x37\x47\x8b\x6e\xe6\xa1\xac\x9a\xa8\x05\xaf\xb6\xec\xb5\x46\xfa\x64\x05\xe2\x57\xd1\x39\xd2\x94\xbb\x05\x1f\xc6\xc6\xa8\x82\xa0\x6d\x99\x20\x0e\x7e\x73\x50\x9c\x83\xc6\x19\x1a\x7e\xfd\xf3\x07\x07\xa2\x5f\x4c\xce\xcb\x8d\x9a\x04\x2b\x39\x7f\xd6\x7e\x64\xf5\x88\xbd\xab\xc3\xa7\x32\x80\x90\x16\x88\x43\x48\x2b\xe5\x52\xd2\x02\x7d\xf9\x5e\x94\x56\xdb\xbb\x02\x49\x0a\xf1\xf7\x82\x54\x41\x03\x77\x76\x54\xe4\x3f\xe5\xbc\x6d\x7f\x34\xb0\xbe\xf1\xe6\xf3\x37\xf9\x19\xb7\x63\x7a\xa8\x12\x0e\x88\x83\x25\x2b\x3c\x63\x25\x53\xb8\xfe\x5e\xe7\xf0\x7a\x80\x93\xd8\xb9\x62\xec\xf7\x6a\xcc\xbd\x08\x7d\xc1\x0f\xb6\xde\xc1\x34\x16\x62\x1a\x59\x88\xb0\x20\x0e\x36\xaa\xa7\x68\x0a\x15\x86\xc1\x12\xa9\xb4\x4d\x37\x1f\xe5\x5c\xf7\x3d\x71\x41\xdb\xe7\xef\x50\x89\xdb\xe7\x25\x5e\xe3\xbd\x96\x50\xbb\x82\x08\x0b\xe2\xe0\x7e\xae\x1d\x32\xf5\x66\xc7\xd5\xab\x9a\xa8\xf3\x4a\x5e\x64\x0d\x53\x3f\x9b\xc4\x9a\x5b\x67\x5f\xbf\xf8\x5b\x8c\x67\x8b\x4c\x53\x05\xed\x44\x02\x71\x30\x69\xdd\x91\x7e\x3c\x7b\x90\x9b\xde\x2e\xf0\x76\x06\x99\x04\x1d\xd7\xa2\x71\x61\x54\x36\xd5\x4b\x8a\xab\x82\xf9\xf0\x3a\x36\xda\x2e\xf4\xf1\x0d\xe2\xe0\x25\xc7\x03\xce\x3e\xec\xce\x0b\x16\xd4\x94\x88\x36\xc8\x7f\x66\x75\x45\x7d\x17\xb0\x18\x23\x66\x6b\xeb\xda\xca\x30\xc7\x33\x7f\x54\x84\x90\x16\x88\x43\x48\xeb\xed\xe5\xea\x75\x00\x56\x38\x2e\x4a\x8b\xe2\x4b\x1c\x7d\xf7\xab\x74\xcb\x6b\x86\x82\x9d\x0a\xd9\x6e\x0c\x0f\x70\x1a\x3d\xc2\x3b\x6c\x49\x1f\x89\x73\xd9\xcc\xe2\x1d\x41\x87\xfa\x40\x1c\x2c\x59\x8f\xe2\xd2\x86\xd7\x68\x9d\xde\x25\x3f\xcf\xd5\xb4\xee\x31\xdd\x61\x61\x1b\x35\x78\xa3\xf3\xb4\x6a\x73\x65\x77\xa8\xee\x26\x26\xb4\x75\x10\xc4\xc1\x46\xd5\x9a\xde\xdb\x4f\xf1\x26\xa6\xc6\xa3\x94\x2e\x43\xe7\x13\x5c\xaf\x97\xbf\x67\xa7\xe4\x69\x24\xdf\x8f\xb0\xbb\x4e\x06\x84\x4c\x41\xe5\x80\x40\x1c\xac\xb7\xb2\x66\x2e\xcb\x35\x19\xa5\x77\xce\xe6\xef\x9e\x56\x96\x4d\xa0\x75\x69\x76\xe4\xa9\x74\xd6\x7b\xa1\xf6\xe6\x86\x25\x37\xcb\x42\xb5\x1a\x40\x1c\x4c\x5a\xc8\x7d\x58\xf7\x27\xad\x9c\x2a\x24\x18\xe9\x90\x6b\x82\x82\xae\xa9\x6f\x61\x92\x74\x2c\xc7\xcd\xc7\x9d\xed\xdd\x7f\xca\xea\x0a\xdd\x99\x0d\xe2\x60\x83\xa0\x19\x8a\xaa\xfa\x53\x82\xa0\x81\x2e\x3c\x1d\x0d\x6b\x06\x77\x97\xac\x94\x09\xa9\x5d\x2e\xfd\x80\x23\x4a\xc0\xf5\x6b\x9c\x86\x12\x42\x5a\x20\x0e\x21\xad\xc6\xcb\x99\xef\xa0\x35\x6c\xc4\x9d\xef\x53\xf0\x65\x37\xea\xcc\x2c\xc2\x22\x2c\xd5\x37\xc5\xe5\x04\x7f\x23\x2d\xf7\xab\xc8\x48\xee\x7d\x98\x7d\xc7\x37\x63\x4c\x58\x5d\x5e\xc6\xe9\x8a\xfe\xef\x2b\x7d\x07\x17\xfc\x7e\x02\xa2\xde\x77\xd1\x23\x86\x1b\x02\x7b\xf5\x1b\xda\x2c\xaa\x43\x8b\xe3\x53\x48\xb6\xcc\x9f\xec\x9b\x69\xb0\xf7\x77\xa2\x73\xff\x37\x2b\x7d\xa0\x1f\x76\xf1\x69\x8b\x3c\xa7\x0f\xda\xb3\x98\x5e\x16\x53\x57\xf7\x55\x76\x3b\x0a\xdf\xcd\x73\x12\xd4\xcf\x60\x76\x73\xf7\x62\x62\x36\x98\x72\x84\x26\x74\x20\x0e\x5e\x80\x4d\x9f\x6b\x3c\x2b\x6c\x2e\xfe\x04\xf9\x30\x4f\xd6\xde\x3f\xfe\x3b\x3e\x83\x15\x3b\x03\x8b\x78\x80\x42\xfd\x69\x7a\xb6\x4f\x39\xe4\x92\x03\x38\x98\xd0\x6e\x59\xdf\xdd\xd4\xea\x3f\xe6\xc5\xe9\xcf\xc8\x09\x2f\x9b\x6d\x93\x0a\xf9\xfa\x24\x80\x58\xd8\x8e\xdb\x26\xaa\x4b\xc5\xe3\xfa\x30\x22\x2c\x88\x83\xf5\xd6\x68\xc9\x73\x70\xf4\x35\x9f\xf6\xaa\x2b\x53\xaa\xac\xff\xa7\xb7\x2b\xea\xe8\xed\x7a\xec\xa7\xbe\xdf\x97\x25\x83\x4e\x96\xde\x41\x3b\xd6\x41\x1c\xec\x69\x7b\xe6\xf7\xea\x2f\xef\xec\x6f\x81\xf0\xc3\x87\x02\x1c\x0f\x5c\xee\xe0\xa8\x99\x9d\xfc\x7f\xac\xfd\x75\x5c\x55\xdb\xfa\xfe\x0f\xd3\x1d\x12\xc2\xa2\x91\x92\x4e\x29\x91\x4e\xe9\x6e\xe9\x14\x90\x94\xae\x05\x08\x12\x8a\xa0\x74\x83\x4a\x48\x8a\x84\x20\x08\x0a\x48\x49\x37\x22\x0d\x02\x4a\xab\x84\xc2\xf3\x3a\xdf\xbd\x59\x3f\xd6\xe4\x3c\xaf\xe9\x3a\x7e\xf6\x3f\x7b\x6f\x7d\x73\x5f\x63\x4c\xae\x31\xe3\xbe\x47\x70\xbc\x52\x7c\xe6\x1f\x3b\xff\x36\xb2\xea\x04\x76\x32\x35\x18\x07\xb8\x08\xf3\x89\x09\xe5\xaf\x9b\x58\x1e\x7c\x8b\x22\x13\xcc\xaf\x91\x66\xa1\x1b\x8d\xd5\x59\xa2\xde\x25\x65\xb7\x8a\x57\x5c\x08\xc7\x97\x3b\x1b\x6d\x60\xdc\xd9\x68\x9b\xfe\xb3\x2d\x4c\x40\x0c\x7c\xd1\x5a\xb3\x57\x5f\x86\x91\x24\x76\x90\xf1\xe8\xcc\x17\x07\xf9\xed\x58\xe7\xbb\x65\xad\xf1\xf4\x76\xda\xdb\xb9\x3f\x26\xaa\x4f\x72\x42\x3e\xeb\x3e\x18\x07\xf8\x65\x7d\x6b\xeb\x11\xef\x26\xcb\x77\xa7\x29\x7e\xd7\x4d\x78\x79\x92\xab\x97\x0b\x27\x2f\x2a\xcf\x06\x3d\xbc\xc3\x20\x4b\x73\xa8\xa3\x04\xb6\xe7\x10\x08\x07\xb8\xaa\x8b\x39\x6b\x98\xb8\x2c\xc2\xef\x68\x76\x6c\xc9\x89\x5f\xdc\x6b\x40\x0f\xef\xd0\x62\xbd\x7e\x28\x30\x1f\x72\x13\xb2\xf1\xaa\x1a\x56\x78\x05\xe3\x00\xad\xbd\x43\x55\xff\xbe\xb0\xed\x30\x42\x05\xb9\xb7\x8f\x20\xea\xce\x51\x4b\x88\x7a\xee\xfe\xb6\x8d\x9e\x1e\x6f\x80\x24\xab\x0b\x06\xec\xac\x36\x30\x0e\x60\xad\xba\xfb\xf6\xab\xa1\x14\xf9\x07\xda\x24\xf1\xd6\xf7\xeb\xb2\xe8\xb9\xdf\xf8\x72\x92\xf0\x57\x62\xd6\x27\xb7\xfb\x44\x69\x7f\x89\x3e\x0b\x0b\xc6\x01\x2e\x02\x5a\x43\x6e\x1f\x9a\x27\x9e\x8f\x87\x20\xe9\x78\x97\x71\xee\x23\x2a\x05\x8f\x4b\x57\x51\x50\x31\x35\xa0\xd6\x1e\xa1\xda\x97\x9a\xcf\xac\x05\xc6\x9d\x59\xeb\xe7\x9f\x6d\x72\x09\x52\x17\xbd\x68\xad\x7d\xbe\x6f\x3a\x81\x89\x77\x56\xd6\x64\xc9\x9f\x22\xf3\xa7\x73\x0e\x51\xf1\xe8\x56\x3d\x71\x2b\x4a\xdd\x70\xf7\x95\xf4\x61\x84\x4d\xd4\x05\xe3\x00\xbf\x2c\x6d\xbd\x26\x5f\xa7\x83\x41\xa8\x3f\x6d\x51\x56\xec\x89\x69\x0f\xaf\xc5\x95\xef\xab\xe5\x02\x95\x6a\xb8\x91\x1b\x77\xf3\xea\xa4\xcf\xc2\x82\x71\x80\xab\x2a\xa2\x5d\x93\x90\xf6\x31\xfe\x9d\xb6\xfe\x93\x97\x91\xb7\xe6\x08\x37\xb8\x5e\x3b\x18\xa0\x72\x86\xbf\xba\xf2\xb3\x1c\x9d\x38\x02\x36\x09\x1a\x8c\x03\xb4\x96\xd0\x89\xf7\xbb\x57\xcc\x83\xd4\xb2\xc1\xa6\x5f\xa2\x46\xdf\x56\x84\xc7\xe2\x52\x54\x53\xdd\xa6\xf0\x46\xbe\x61\x04\x6d\x7a\xc3\x12\x27\x60\x1c\xc0\x5a\x97\x6d\xb9\x77\x71\x18\xb0\x06\xf5\xe7\xd9\xee\xce\x9e\x8a\x86\xca\xa5\xe1\x55\xa5\x7c\x3f\x0a\xf8\xea\xfd\x48\x06\x2f\x85\x15\x16\x16\x8c\x03\x5c\x84\x3f\x5f\xf9\xce\x63\x95\xa8\xde\xed\x89\x53\xe7\xc8\x7e\xa5\x35\x26\x47\x98\xe8\x95\x04\x73\x42\x63\x3d\x9e\x65\x1b\x17\x99\xa8\xc1\xab\xa5\xf3\x35\xd5\xbb\x3c\xd7\xc4\xa3\x48\xc6\xec\xe3\xd5\xcc\xee\xcb\x2c\x1f\x18\x6c\x53\xf6\x27\x27\xa3\x97\xf3\xb2\x43\x2e\x0f\xfb\x69\x2c\x3a\x9d\x43\xaf\x87\xaa\x6b\x79\x75\xae\x53\x7d\x15\x7b\x43\x3e\x73\xf2\x0d\xab\x0b\x99\xe8\x1d\xa7\xf8\x76\xf9\xeb\x39\x4e\xdc\xad\xb5\xb6\x32\x40\xf1\x1d\x2c\xf2\xc5\xe2\xfb\xd7\x3a\x95\xa7\x52\x83\x6e\xf6\x1e\xd2\x57\x4b\x3e\xf9\x99\x38\x8c\x06\x89\xe6\x78\xe6\x4a\xa6\x0d\xfc\xac\xf1\xbe\x33\x79\xbf\xe6\x1c\x3a\x6d\x63\x71\xb2\xd3\xd6\xed\x40\x72\xe0\xb2\xbf\xb5\xd4\x5c\x2a\x61\x47\x94\xf3\x68\x5f\xf8\xf5\xab\x62\x01\x39\x53\xd9\x31\x23\x58\xf1\x1d\x2c\xe6\xd9\x99\xef\xc0\xe2\xbb\xec\xe7\x14\x6e\xee\xb5\x27\xeb\x4a\x61\x8c\x22\x83\x15\x5a\xec\x3e\xa4\x9d\x14\x98\x2d\xdf\x6c\xa3\x1c\xdb\x18\x79\x82\x8d\x9b\xfe\xfa\x05\x47\xea\x42\xf1\x9d\x35\x16\xe3\x73\xe8\xd0\x4c\x4e\x97\x46\xa4\x0b\x5e\x4f\x50\x08\xbf\x7c\xbe\x15\xd1\xf4\xc8\xd0\xf3\xe7\x82\x7a\x72\x0c\xf7\xfd\xfe\x5e\xf2\x42\xf1\x7d\x53\x35\xf9\x43\xad\x47\x5b\x04\x59\xc6\x92\x2f\x8b\xac\x6e\xcc\x33\xce\xbd\xf4\xd4\xec\xfe\x7e\xd9\x20\xaf\xc1\x89\x41\x85\xc0\xbf\x97\xbc\x50\x7c\x7f\xe6\x2f\x38\x36\x34\xb8\xee\xdf\xf3\x30\x44\x0e\xe9\x81\x1d\x74\x3a\x71\xc3\x2e\xf4\xf6\x6c\x76\xfd\xbd\x69\x72\xe2\x9b\xe9\x37\xfe\x5e\xf2\x42\xf1\x5d\x3f\x98\x7e\xa6\x4f\xd2\x92\x6c\xf9\xe6\xa3\x36\x49\x56\xfd\xb1\xfc\xc1\x78\x6b\xef\xd7\x57\xd0\x6f\x0d\x4f\xc7\x5d\xcf\xc9\xe6\xfb\x7b\xc9\x0b\xc5\xf7\x4c\x72\xec\xac\xd0\x51\xbe\x07\xce\xb7\xf2\x7f\x69\x68\xd7\xae\x8b\x7b\x52\x79\x8c\x7f\xeb\x08\xda\xc2\x31\x0f\x0c\x57\x55\xe4\xf8\x7b\xc9\x0b\xc5\x77\x8f\x69\xe7\x72\xaa\xab\xfa\x15\x8d\xc6\x2f\x7d\xe8\x62\x74\x5b\x26\x9e\x04\xd9\xf7\x84\x9d\xcc\x21\xa1\x39\xa3\x4f\x89\x85\xfd\xfd\xb6\xf3\x52\x17\x8a\xef\x0f\x7d\xba\xda\xf3\x4e\xf6\x36\x5c\x33\xf6\x6b\x65\xaf\x76\x94\x2e\xde\x73\x69\x5a\xcf\x93\x2a\xf9\x9e\xdd\xba\xe4\xf3\x8a\x1d\xfd\xff\xe6\x95\x1c\x6c\x28\x5e\x7c\xb8\x15\x2d\x7d\xb8\x62\xd6\x3f\x90\x97\xa2\xa3\xbb\xb3\x36\xd7\xa8\xca\xff\xd3\x24\xa5\x74\xed\xdb\xcf\x9a\xd4\xf7\x7b\x55\xbe\x83\xb0\xb4\x02\x18\x07\x78\x5c\x08\x87\xef\xdd\x60\x2a\x2c\x7e\xfb\xbe\x19\xed\xf1\x53\x4d\xd4\x8e\x67\xae\xb7\x7d\xd4\xc3\xe8\x65\x6a\x72\x33\x2a\xee\xd7\xec\xc3\x56\x79\x81\x71\xc0\x03\x70\x7a\x4e\x02\x4d\xbe\xf2\xee\xff\x98\xf7\x2e\x44\xce\x9a\x2c\x8a\x58\xea\xd6\x78\xda\xbe\xfc\xfd\x72\xdf\x14\xce\xd3\x98\x2d\xd8\xd6\x6f\x60\x1c\xa0\xb5\x14\x93\x1f\x97\x89\x03\x33\x72\x76\x14\xe4\xfa\x9f\xcf\x8e\x0a\x8c\x6a\x48\xae\x76\x37\xbc\x55\xe6\xb9\xd2\x20\xb4\x19\x98\x0d\x9b\x66\x0b\xc6\x01\xf7\xbf\xcb\xe6\x87\xb4\x07\x68\xf5\xf5\x2e\x3e\x78\xf2\xa3\xb5\xee\x73\xb6\xf4\x96\x96\xa6\x53\x5f\x17\x63\xeb\x38\x8b\xd5\x89\x1b\xec\x03\x18\x8c\x0b\x97\x46\x3b\x1f\xf6\x65\xf3\xae\xdb\x3b\xd3\x4c\x26\xdd\x40\xbe\xc2\xfc\xef\x77\xb0\x30\x1d\x0c\x75\xbf\x4b\xc4\x6b\xe3\xda\x3c\xdb\x44\x5f\x7c\xbb\x7f\x56\x7c\x07\xe3\xce\xce\x7c\xff\xa3\xe2\x3b\xd8\x1d\xf7\xa2\xb3\xa8\x0e\x33\xf4\x9f\xd7\x87\xfa\x54\x5a\x1c\xea\x1d\x5c\x66\xce\xf4\x4b\x4a\xaa\x41\xce\xd1\xaf\x7c\xc0\x2a\xfc\x2c\x8a\x63\x1d\xb6\xc6\x0d\x8c\x03\xee\x57\x79\x85\x8f\x86\x13\x6a\xff\xa0\x07\xb2\x43\xaa\x9a\x6d\x35\x34\x49\x21\x9b\x40\x6d\x12\x3f\xa2\x74\x79\x61\x35\xe7\x61\x8b\xe0\x59\x58\x30\x0e\xe0\xac\xa7\xa1\x0c\xc6\xb1\x39\x1d\x1d\xae\xbf\x57\x5b\xa9\xd1\x39\x64\xe2\x76\x53\x5e\x35\x0b\x2a\x6e\xd3\x6f\x43\x51\x1e\xc6\xf5\xc3\x16\xa1\x80\x71\x80\xd6\x5a\x6f\x72\x68\x4d\x93\xf1\xf9\xda\x7f\x6d\x53\x32\x70\x9b\x98\x84\x64\xe3\x62\x31\x7c\x6c\x51\x5d\xd9\x8c\x09\xb0\xb1\xd0\x85\x1d\x04\x05\xc6\x01\xc2\x36\x16\x4d\xaf\xdd\x78\xfa\xeb\xc7\x2e\x8e\xca\xc4\x47\x8f\x61\xd7\xf6\xeb\xcf\x4f\x1f\x6a\x2f\xbd\x84\x7e\x71\x19\x0a\xc6\x5f\x85\x95\x08\xc1\x38\x80\xb3\xe6\x99\xca\xc9\x26\xaf\xdb\xda\xbe\x68\xdb\x7a\x24\x5b\xfd\x7b\x68\xb7\xcb\xcb\x43\x82\x48\x31\xe7\x58\x56\xf8\x0d\x57\x1f\x2a\x1d\xec\x63\x0f\x84\x3b\x3b\x08\xea\xcf\x8a\xef\x60\x4f\xd6\x8b\xd6\xaa\x34\x79\xe6\x63\x4d\x47\x8a\x9e\xac\x99\x5f\x30\xaf\x62\xdb\x9c\x11\x98\x77\xdb\x42\xf5\xee\xf0\x31\xe5\xfc\x28\x19\xf3\x2f\xd8\x19\x48\x60\x1c\xe0\xaa\xee\x5d\x3f\x91\xa5\x6d\xbf\x91\x13\x3a\xff\xd3\x35\xbe\x25\x7a\xf6\x1a\x05\x5d\x77\x2f\xd7\x90\xfb\xd8\x2e\xab\x25\xbd\xb9\x37\xec\x20\x28\x30\x0e\x60\xad\xb9\x23\xef\x1b\x6f\xef\x64\xb9\xee\xce\x8f\x95\x87\x61\x2c\xe1\xd1\x61\x99\x30\x54\x34\x65\x21\x49\x40\xa6\xa3\xac\x5e\x29\x1c\x9c\x85\x05\xe3\x00\xad\x35\x86\xbc\x54\x98\x4a\xb1\x7c\x49\x7d\x49\xeb\x4d\x44\xc0\xeb\x4f\xa7\x77\x26\x74\x8b\xef\xbf\x7f\x19\x48\xf2\xfa\xfd\xe7\x8f\x8c\x2a\x67\x61\xc1\x38\x60\x09\xa3\x4c\x22\x3c\x54\x90\x70\xc7\x99\xc6\xbc\xe1\x8d\x23\x97\xfc\x00\xa5\x5e\x39\x6e\xda\xc8\xa6\x07\x1f\x25\xd6\x42\x7e\x89\x30\xec\x6b\x07\x84\x03\x58\xeb\x75\x7c\x45\x77\x53\xea\xaa\x3d\x6d\xae\xa5\x7f\x37\x1d\xc3\x8e\x92\x5e\x1a\x92\x2f\x17\x5d\x66\xf3\xb5\x36\x87\x54\x37\xfc\x87\xb0\x5d\x76\x41\xb8\x33\x6b\xfd\x59\xf1\x1d\xec\x0d\xea\xa2\xb5\xf0\x43\x27\xe7\x9e\x2e\x44\xda\x92\xc6\x6e\xcf\xcf\xbc\xc3\xe2\x99\xab\xf5\x70\x76\x55\x32\x5b\x78\xc9\xe9\xb8\xa2\xba\x42\x1a\x75\xd6\x7d\x30\x0e\x70\x55\xfb\x39\xf2\xde\x89\xfa\xea\x8e\x69\xdf\x0a\xdc\x14\x7d\xb8\x81\x1f\x7d\xf5\xba\xf9\xf7\x8f\x41\xfb\x45\x9a\x54\xa8\x07\x72\x65\x0a\x67\x61\xc1\x38\x80\xb5\x18\xa4\x6f\x58\xdd\xaf\xcf\x0f\x38\x76\x36\x73\xaf\x4d\xa8\x79\x8d\x12\x85\x26\x85\xc9\x49\x1a\x8d\x2d\xa0\xe9\x80\xc4\x15\x06\x9b\xe3\x06\xc6\x01\x53\x54\x83\x32\x6a\xc8\x6f\x3a\xa4\x68\x68\xd6\x9d\x9d\xbf\xe7\x45\x33\xa8\xea\xc9\x63\x0d\x4a\x99\x04\x88\xdb\x7d\xff\xa8\x6b\xdd\x05\x4b\x51\x81\x70\x80\xb0\xd5\x4b\xb6\xbc\x46\x5d\x04\x5c\x2c\x6c\x2c\xe2\x89\x3f\xac\x71\xaf\x45\x33\x8a\xcd\x2b\xea\xfc\xf6\xbd\x15\x3e\x36\x23\xe1\x0c\x3b\x86\x05\x8c\x03\x58\xab\x49\x72\x18\x5f\x38\x80\x73\xfc\x65\xeb\x21\x25\x31\x9e\x71\xc7\x55\x05\xa1\xea\xed\x32\xd7\xb7\xb1\xd8\xde\xc8\x11\x37\x53\x16\xcf\xac\x05\xc6\x9d\x59\xeb\xcf\x8a\xef\x60\x6f\xca\x17\xad\x35\x1d\xea\x90\x9d\xd7\x26\xd1\x34\xb6\xde\x3f\x28\x7a\xc8\x1c\xf3\xe9\xf2\x8e\xb8\xe4\x48\x90\xdc\x7b\xf9\xce\x06\x82\xd7\xa4\xb0\x7a\x13\x18\x07\x3c\xe2\xd6\x8e\x23\x79\x5f\x80\x05\x45\x7d\x58\xe2\x55\x68\x82\xa5\x95\xf8\xe7\x4c\x0f\xd7\x0f\xe4\x2c\x8b\x05\xa4\x4f\x7f\x94\x8d\xc2\x52\x54\x60\x1c\xc0\x5a\xc7\x37\xeb\x85\x67\xae\x0d\x51\x65\xec\x06\x60\x3b\xde\xde\xb1\x64\x8e\xb8\x9f\xd7\x44\xf6\xad\xc4\x43\xb5\x4f\xef\xf3\xcb\xaf\xb0\x73\x1c\xc1\x38\xe0\x06\xce\x5d\x76\x90\xfc\xef\x3a\xa3\x96\x42\xa5\x2b\xa9\xc5\x37\xcd\x23\x57\xf9\xd7\xa1\x3f\x3e\xeb\x47\xdc\xdd\xa4\x3f\xb9\xa1\x06\x3b\xf3\x1d\x8c\x03\x3e\x67\x29\x77\x77\x34\x51\xb9\x2e\x9b\x92\x44\x3f\xd2\xfc\x98\xa4\x3a\x64\xf7\x3c\x5d\xf4\x6a\xeb\x8c\xd7\xf5\xe9\xce\x11\x5f\xc9\x20\xd8\x73\x16\x84\x03\x58\xab\xdb\xc3\x19\x5d\x52\xfd\x11\xf9\xef\xf2\x50\x54\x82\xba\x1b\xcf\x96\x65\x5e\x72\x7f\xa5\xb6\xdd\x7e\x73\x7b\xf5\xd0\xa0\x06\xdd\xfa\xcc\x5a\x60\xdc\x99\xb5\xfe\xac\xf8\x0e\xf6\x45\x74\xd1\x5a\x51\xf3\x8b\x28\x1d\x98\xbf\xe9\xd3\x1e\xbb\x08\x5c\x37\x33\x94\x0f\x56\x21\xf9\x32\x75\x5a\xfe\x49\x69\x72\x2a\x28\x3f\xa1\x7d\xea\xac\xfb\x60\x1c\xe0\xaa\x72\x89\x24\xfd\x16\x5c\xd8\x84\x6c\x89\x3a\xe2\x79\xf6\xb8\xb9\x3c\xbb\x47\x53\xc5\xb0\x2e\xe9\x77\x4d\xdd\x08\x7d\xfc\x92\x3e\x6c\xe5\x3b\x18\x07\x2c\xbe\x87\x30\x2b\xf4\x39\x66\xa0\x13\x3f\x6e\x2d\xa2\xbf\x1d\x30\xd2\x40\xff\xde\xe5\x3e\x97\x76\x23\x41\x7c\x84\x95\x9c\xa8\xc7\x09\xac\xf8\x0e\xc2\x01\x5a\x8b\xff\xf9\xeb\x2e\x6d\x9a\xff\x30\x3d\x75\x7a\x0a\x75\x50\x75\x6f\xee\x0d\x9c\x76\xa2\x96\x32\x5b\x4c\x82\x9d\xc3\x67\x5c\xfd\xb0\x1d\x2a\xc1\x38\x40\xd8\x44\xbb\xf9\xbb\x6b\x6c\x7d\x63\x6a\x51\x22\x55\xd6\x3b\x5a\xaf\x5e\xe7\xa7\x16\x63\x4b\xce\x2a\x15\x10\x68\x98\xf3\x14\xf1\xc3\xf6\x42\x01\xe3\x00\xd6\x6a\xee\x88\x82\x96\x5c\xaa\xb9\xfb\x4c\x9c\x6a\x48\x38\xca\x0e\xfa\x4b\x65\x2e\xe0\x49\x02\xf7\x12\x4f\xe0\x7a\xfe\x17\x56\x99\xc1\x33\x6b\x81\x71\x67\xd6\xfa\xb3\xe2\x3b\xd8\x97\xef\x45\x6b\x39\xb6\x8f\x88\xd2\x63\x5d\x3b\x59\x1a\xf8\x76\x79\xed\x91\x3c\x29\xb3\x37\x67\x70\xf9\xed\xa4\x04\x8c\xb6\x5e\x22\x8a\xeb\x54\x4a\x67\xdd\x07\xe3\x00\x57\xd5\x39\x74\xaa\xb2\x5f\x69\x08\xbf\xca\xe8\x10\x3f\x32\x39\xd7\xab\x23\x2d\xe4\xe3\x49\x13\x1b\xd5\xa4\x1c\x89\x26\xc3\x08\x27\xec\x94\x5c\x30\x0e\xb8\xf4\xa8\x52\x94\xc5\xea\xb0\xa1\x84\x6f\xf4\x90\x2e\xa5\xf1\x79\xf0\x37\x83\xdf\x65\xb4\x06\x42\x1d\x63\xb1\xe9\x92\xea\xcf\x0f\x60\x2f\x45\x60\x1c\xa0\xb5\xf9\x83\x2c\x66\x22\x3f\x76\x6f\x95\xcc\x5e\x21\xc4\xd8\xdd\xc1\x2a\x29\xd7\xbf\xaa\x37\xfa\xac\xe1\xbd\x3d\xba\xb3\x5f\x81\x25\x6c\x5e\x07\x18\x07\x7c\x20\x72\x5d\x71\x13\xf0\x9a\x45\xb2\xe1\xe0\x37\xf3\x41\xeb\xae\xf4\xf3\x2e\xdc\x44\xb7\xb6\x63\x96\xaf\x7c\x54\x44\x87\x81\x0d\x4b\xac\x83\x71\x00\x6b\x51\x3d\x93\xd6\x6a\x53\xf5\xf6\x2b\x6e\x47\x0a\xb3\x20\x56\x79\xa4\x74\xe8\x99\x79\xeb\xa4\x93\xa0\x74\x9f\x55\x91\x5b\x38\x0e\x76\xe6\x3b\x18\x77\x66\xad\x3f\x2b\xbe\x83\x65\x38\x2e\x5a\xeb\x07\x66\xfb\xa7\x6f\x7d\xdd\xf7\xda\xba\x9d\xb0\x7c\x67\xb2\xa9\xaa\x8b\x4d\x39\x8d\xaf\xc5\xcc\xe5\xf2\xd0\x07\x18\x35\xd7\xc2\x4e\xb5\x00\xe3\x00\x57\x15\x52\x1d\x9c\xa5\xca\x80\xda\xe1\xdb\x6f\x68\xcf\x21\x86\x44\x38\x4c\x11\xf0\x16\xcf\xef\xd1\x55\x26\xfc\x2d\x97\x58\xef\x67\xb0\xa3\xe4\xc1\x38\x80\xb5\xec\x27\x25\x0a\xdf\x5a\x3c\xc1\x4a\xc4\x4a\x59\x26\x68\x88\x1d\xc9\x9b\x7c\xf8\x63\x57\x2f\xfd\x1b\xd4\x26\x37\xff\xc4\xf1\x3d\x6c\xef\x57\x30\x0e\xd0\x5a\xf2\xd6\x4b\x34\x1d\x32\x9f\x9d\xe6\x2e\x51\xe1\x7f\x80\xb6\xb5\xb6\x99\x26\xaf\xdd\xbd\xb1\x83\x44\xe1\xb0\x54\xd4\xeb\xdf\x02\x3b\xd3\x17\x8c\x03\x84\x0d\x1e\x2d\xbf\x91\x4a\x45\x2b\xe5\xa9\x30\x80\x5e\xc6\x90\x23\x3b\x1d\x9c\x23\x5c\xd7\x97\xf4\xcb\x70\x67\xd0\xec\x11\xa5\x11\xec\xd4\x18\x30\x0e\x60\xad\xda\xfc\xfb\x42\x65\x4b\xcf\xa3\x62\x6b\xbf\x33\xbd\x5e\x69\xa8\x62\x8f\xea\x89\x99\xcb\xf8\x16\xe7\xe9\xdb\xda\x2a\xbc\x1e\x9f\x77\x66\x2d\x30\xee\xcc\x5a\x7f\x58\x7c\x07\xcb\x61\x9f\x9d\xf9\x7e\xa1\xf8\xbe\x36\xdf\x11\xca\x23\xd1\x16\x80\x0a\x8d\xa0\xc9\xbe\x9c\x62\x2c\xf4\x58\x1b\x42\x33\x29\x18\xb8\xff\x0e\x1b\xe7\xf2\x93\xc7\xdc\x7f\x9f\xe9\xbb\x50\x7c\xbf\xe9\x78\xdf\xe2\x25\xc7\xae\xd8\x5d\x5d\xa5\x01\xbc\x55\x05\x0d\x35\xc3\x64\x42\x53\x95\x84\xd3\x02\x8a\xe2\x48\x8f\x16\x71\xb1\xff\x9b\x4c\x1f\x58\xc7\x2e\x8e\xb6\x90\x66\xb4\xec\x04\xb9\xfe\x49\x15\xce\x0f\xf6\x3e\x93\xeb\x2d\x6c\xa9\x5f\xc7\xa2\xca\x67\x7f\x66\xb9\xb0\xde\x1a\xa1\xb2\x7f\x7f\xe6\x08\x30\x0e\x60\x34\xaf\xab\x33\xca\xd5\xf5\x95\xd8\xc8\x77\x84\xbb\xb2\xc4\x78\x88\xf4\xf7\xa4\x35\x0f\x46\xcb\xeb\x70\x5b\xef\xa6\x04\x95\x3d\xad\x84\x6d\x08\x01\xc2\x01\x46\x9b\x62\xf2\x7c\x11\xd6\x92\x96\xec\xf1\xa7\xf0\xed\x13\x96\x2f\xed\x75\xd2\x73\x8d\x4b\xf1\xba\x8f\xe8\x34\x33\x94\xd1\x5e\x8a\xc0\x12\x88\x60\x1c\xa0\xb5\x9e\x14\x1d\x9e\x79\xdf\xa9\x06\xd8\xbe\xbc\x52\x97\x5c\xfc\x26\xea\x3b\xfa\xaa\x92\x7b\xa5\x82\xd0\xbb\xa6\x23\x6d\x80\x67\x00\x96\x40\x04\xe3\x00\x61\xd3\x9f\x06\xd1\xcf\x4f\x84\xdd\xc4\xa6\xc3\x20\x57\xd5\xc3\x59\xe9\x5a\x60\x0c\x50\x25\x0c\x6d\x10\x2b\x7a\x70\xa3\x07\xf3\x2b\x6c\xbb\x69\x30\x0e\x30\xda\x52\x1f\xef\x6c\x41\xe3\x56\xec\xab\xef\x50\x10\x6d\x45\x60\xad\x70\x2c\xb6\xe0\x7a\x52\xdf\x52\xc3\x76\xea\x3f\x0a\x5f\x56\xf3\x82\x4d\xd0\x03\xe1\xce\x46\xdb\x9f\x15\xdf\xc1\x0c\x7c\xd1\x5a\x35\xfb\xd5\x1c\x76\xe5\xcd\x0f\x44\xec\x21\xd8\x65\x4f\xcb\x8d\x3c\xc5\x5a\x5d\x54\x3a\xad\xa2\x30\x47\xbe\x4e\x28\x2f\xb8\x17\x9d\x75\x1f\x8c\x03\x5c\xd5\xb7\x75\x5d\x47\x6b\x4c\x1b\xd4\x6b\xf9\xc9\xb4\x39\x46\x9e\x74\x6a\x2a\x61\x56\xc3\xdd\xd3\xab\x3a\x5a\x43\xa8\x48\xae\x12\x09\x67\x61\xc1\x38\xe0\x3a\x9b\x19\x97\xd9\xc5\x3b\x91\xa7\x3d\x04\xe1\x62\xb9\xda\x09\x97\x62\xae\xd8\x72\xed\x07\x6c\x0b\x61\xbe\x3a\x08\xea\x61\x71\xd6\x85\xad\xb3\x01\xe1\x80\x27\xd4\x8f\x10\x92\x48\x35\x7c\xe7\x45\xbf\x55\xdb\xe8\x45\x11\x4f\x17\x4a\x9d\x2b\xb6\x6b\x30\x80\x6c\xbf\x6a\x71\xd9\x99\xdc\x23\x09\x36\xef\x0f\x84\x03\x5e\x04\x74\xa1\x5b\x58\xef\xdb\x36\x97\xdf\x16\x79\x77\xb4\x4d\xc5\x2d\xf2\x67\x7a\x16\x66\x50\x16\x05\x30\xf2\xa3\x16\xb0\x85\xc3\x36\x5e\x02\xe3\x00\xd6\xaa\x93\xdc\xbe\x5c\x38\x9c\xaf\xee\x98\xe6\x15\xfd\xf1\x89\xe1\x6a\xc1\xfb\x14\x7a\x82\x30\xd3\xec\x2b\x37\x27\x3d\xfa\xc3\x2d\x76\xcf\xac\x05\xc6\x9d\x59\xeb\xcf\x8a\xef\x60\x75\xd1\x8b\xd6\x2a\xb1\xdb\xb2\x24\xec\xdf\xc9\x77\xd4\x6f\xf9\x66\x23\x57\x71\x73\xdc\xf1\x90\x27\x8a\x89\xfc\xca\x00\x2d\xa7\xe4\xf5\x27\x27\xb0\x74\x2f\x18\x07\xb8\xaa\x79\x28\xa1\xb3\xd2\x4a\x0d\x7b\x43\x93\xbb\x15\xb3\xad\xcd\x12\x81\x4a\x6c\x57\xec\xf2\xf0\xb6\x8b\x76\xd7\x19\x68\x3d\xad\x60\x65\x0f\x30\x0e\x60\xad\x92\xb7\x82\x7b\x02\xc5\x01\xef\xe8\xd2\xa7\x1e\xcd\xb1\xee\x76\xd0\x3d\xbc\x2c\xc2\x12\x77\x3f\x5c\x2f\x9d\x3a\x0d\x5b\x7a\x04\xe6\x58\x30\x0e\xd0\x5a\x9a\x8f\x45\x22\xfd\x99\xbe\x10\xed\x43\x45\x32\x0e\xac\x10\x1b\xe6\x66\xab\xc3\x94\x69\xcc\x89\xfb\x5b\xc6\x95\x12\x34\x2f\x60\x67\xc8\x80\x71\x80\xb0\xa7\x73\xf5\xa2\x54\xe2\x25\xd8\x5e\xed\x68\x03\x53\xe4\xaf\xc8\x7b\x95\x31\x78\xa2\x0f\x3b\x78\x9f\x4e\x20\xdb\x94\x8e\x16\xc3\x8e\xfd\x01\xe3\x00\xd6\xfa\xe3\x95\xef\x0b\xef\x31\x66\xec\x7a\x85\xec\xb3\x69\x7b\x53\x84\x1e\x98\x0d\x17\x91\x54\x68\x7f\x4c\xc7\xb7\x99\x79\x49\xab\xfd\xba\xf1\x09\xfd\xf9\xe2\xfb\x16\xe1\x87\xde\x26\xb9\x27\xd5\xf5\xb6\xe6\xbe\xd7\x13\x49\x29\x02\x9c\xc7\xe5\xc7\xba\x7c\x8b\x1f\xe2\x7f\x3a\xf5\x63\xab\x3d\xbf\x78\x35\xf8\xe4\x9a\x50\xf3\x89\xde\x2d\x9c\xdd\x4a\xb9\x82\x9c\xc1\x92\xdc\xcf\x14\xf3\x77\x03\xb1\x0c\x8f\x34\xda\x1d\xae\x4f\xd6\xfe\x00\x14\xdf\xc1\x22\x5f\x2c\xbe\x3f\xe2\xeb\x5d\xdd\x98\x4d\x19\x51\xa0\xa7\x2d\x54\x80\xf2\x0a\x84\xb4\x10\x7a\x06\xb6\x58\x5a\x9b\x6b\x7d\x45\xb6\xa3\xe2\x7c\x76\xfe\xe3\x11\xf5\xc3\xe4\xbd\xea\xda\x10\xd6\x5b\xe3\x1b\x84\x97\x53\xae\xb3\x64\xef\x5c\x89\x60\x1a\xb9\xfb\xb0\xae\xf6\x0d\xcf\xfa\x9b\x9b\xb0\xe2\x3b\x58\xcc\xb3\x33\xdf\x81\xc5\xf7\xb8\x84\x7d\x5e\xd7\x14\x86\x8d\xe5\x6c\x46\xa3\xa7\x87\xa1\xb3\x3c\xaa\x69\xc8\x4d\xfb\xb1\x2f\x6b\x19\xca\x23\x95\xdc\x07\x42\xff\xfa\x05\x27\xf4\x42\xf1\xfd\x8e\xa2\xf4\x8f\x9b\xa6\xc1\x99\xe5\x94\xbe\xb8\x51\xad\xd8\x0f\xa0\x1c\x99\x2f\x91\xaa\xdc\x52\x6b\xd9\xbc\x32\x9d\xef\x37\xfb\xfc\xbd\xe4\x85\xe2\xfb\xdb\x77\xd3\x94\x69\x5d\x98\xd1\xe2\x55\xd4\xfa\xbb\x7c\x8f\x79\xa7\xb4\x2e\xf1\xb3\xda\x2f\x1d\x4b\xef\x98\x6e\x86\xe3\x19\xd2\xfc\xbd\xe4\x85\xe2\x7b\x91\x81\xb2\x72\xc6\xab\x66\xa2\x21\x5c\x71\xda\xc7\x71\x8b\xf8\xcd\x7b\x71\x65\x0b\x86\xd5\x57\xa2\x5c\xec\x76\xb4\xc9\x90\xff\xbe\x2c\x1d\x7a\xa1\xf8\x3e\x10\x96\xbc\x57\xdb\x40\xea\xf3\xa2\xfb\x5e\x1a\x9e\xa5\x23\xd6\x66\xb9\x1c\x7b\x4a\xcd\x5a\xdd\x76\x89\xce\x64\x52\x81\xf9\xef\xbf\x97\xbc\x50\x7c\x8f\xa9\xef\xc3\x6e\x31\x5f\x16\xa9\xbe\xf5\xab\x0c\xab\xc5\xe1\x9b\x00\x85\xda\xa6\x64\x10\x33\x04\x6b\xa7\x66\xd1\x54\x3c\xef\xef\xd7\xf7\x87\x5e\x28\xbe\xf3\x0a\xa8\x51\x55\x64\xef\x3e\xbf\xbf\x14\xd4\xe2\x46\xe8\xba\x4e\xc0\x3d\x21\x3a\x72\x68\xaf\x20\x8a\x3c\xfe\x1b\x27\xbb\x8f\xf7\xef\x25\x2f\x14\xdf\x57\x88\x9d\x5d\x5b\x32\xd9\x89\x3c\xb7\xf8\x7e\x44\x6a\x38\xd9\x6f\x67\x7f\x61\xaa\x4e\xe8\xc1\x7b\x10\x2c\xd6\x3b\xf2\xfc\xf9\xc2\xff\xcd\x2b\x39\xd8\x50\xfc\x2f\xc7\x27\x6f\x6d\xad\x66\xf5\xf3\x6b\x73\x6a\x25\x76\x9f\x66\xec\x3d\x3d\xed\xf3\xc2\x23\xcc\x29\xf3\xbb\x1e\xb7\x15\x2f\x50\x7c\x37\xe4\xec\x06\x0c\xc6\x01\xee\xeb\x83\x5d\x6e\x9d\x34\xc3\xeb\xd3\xc8\xe6\x32\xa8\xe4\xb3\x2e\xd4\x89\x81\x5b\xf6\xf3\xbb\x7d\x4d\xc6\xe2\xbc\x49\xf7\xa3\x02\x61\xcb\x9e\xc1\x38\xc0\x71\x22\x39\xc3\x61\x89\xd4\x4e\xe4\x8f\xae\x0a\x3f\x2e\x1f\xd1\x57\xac\x12\x13\xe2\x08\x09\x35\xb8\x63\xa9\xb7\xa8\xc9\x88\x3a\xb2\x12\x07\x9b\x66\x0b\xc2\x85\x4b\x23\x9f\x0f\xab\xec\xfe\xbb\xfd\xf3\x2a\x26\xa1\x23\x01\x5e\x29\x33\xd5\x0c\x55\xff\x52\xb3\x7b\x85\xd2\x6b\x3d\x3e\xfc\xb7\x49\x68\x7d\x2f\x60\x5b\x2b\x82\x71\x80\xb0\x63\x0f\xf7\xd8\x9f\x10\xae\x8d\x98\x78\x75\x3f\xe3\x43\x8b\x12\xe7\x18\xa5\x0b\xa4\x7c\x3b\xcf\x95\x81\xdb\x8e\x07\xdd\xb9\xc7\x0c\x5b\xf9\x0e\xc2\x01\x1e\x6e\x3a\x49\xeb\xf1\x06\xc7\x1f\x7f\xb7\x8a\xd1\xee\xd9\xec\xd7\x6a\x3a\xe9\x75\xd8\xc7\xcd\xd3\x6d\x61\xae\x2b\x06\x0c\xdb\xb5\xd3\x9d\x15\xdf\xc1\xb8\xb3\x33\xdf\xff\xa8\xf8\x0e\x76\xc7\xbd\xe8\xac\x6f\x6a\xc8\xd9\x8f\x2a\xf5\x8f\x3a\x77\xaf\x0e\xde\x22\xdd\x63\x72\x8a\x58\x70\x6f\x7e\x4b\x6f\xf7\xa0\x61\x5b\x88\x2d\x4c\xb0\x13\x36\x6f\x15\x84\x03\x38\x4b\xaa\xdb\x29\xe8\xdb\x81\xed\xc1\x8c\xf4\x31\x5f\x82\xc7\x35\xfc\x27\xc1\x9f\x57\x79\x4e\x6c\x2f\xd1\x05\x54\x5f\x2b\x5a\x11\x7a\x7a\x16\x16\x8c\x03\x38\x8b\x4c\x7b\x98\x91\x6c\x4f\xf3\x75\x0e\xea\xd7\xe6\x03\x07\xe1\x3c\xcc\x76\x0e\x3d\x06\x53\x02\x82\xcd\x95\x50\x99\x42\x65\x26\x58\x22\x08\x8c\x03\x58\x60\x11\x0f\xd7\xcd\xcc\x55\x71\x2f\x9a\x38\xf1\xf4\xc5\x84\xdb\xed\x07\x10\xdc\xa2\xfc\x05\xa3\x62\xe2\x57\x1f\xde\x12\xed\xe6\xc0\x4e\xc3\x02\xe3\x00\x61\xbf\x64\xf1\x2d\x89\x4e\x79\x78\x51\x18\x49\xc9\xb6\x38\xb4\x97\x79\x3c\xfb\x26\x7c\x77\x50\xc3\xb6\x75\xac\x5a\x6e\xfa\x55\x1d\x6c\xba\x39\x18\x07\x70\xd6\x87\x37\x32\x86\x76\xb2\xea\xaf\x8f\x6f\x48\x99\x57\xd6\x09\x5f\x31\xc9\xff\x78\x5d\x4d\x0d\xf7\x34\xa9\x83\x30\x59\x63\xef\x0e\xec\x88\x5b\x30\xee\xec\x20\xa8\x3f\x2b\xbe\x83\x3d\x59\x2f\x5a\x8b\x37\xd1\x2b\x88\xfa\x1a\xf9\xe3\xcf\x8f\xf7\xde\xd7\xe2\x9b\x3c\xf3\xbe\xd4\x3d\xd4\x42\xd3\xdd\x38\xef\x7a\xec\xf1\xa0\x82\x13\xf6\xcb\x02\xe3\x00\xd6\x6a\x6f\x59\x9d\xf6\xc7\x42\x6d\x9d\x33\xea\xbb\xc6\xc5\x90\xfb\x35\xc3\x3b\x37\x20\xaa\x0d\xc5\x87\x9d\xaf\xe5\x9d\x23\x3f\xce\xbb\xb3\xb0\x60\x1c\xc0\x5a\xcf\x35\xc6\x7d\x42\x7d\x95\xd2\xd8\x96\x8d\x8d\x55\x5e\xf8\x08\x5e\xbe\x16\xb8\xc5\xf9\x23\x6b\xfb\xb5\x61\x30\xf3\x26\xa5\x14\x19\x6c\x41\x3d\x08\x07\xf0\x40\x5c\xee\xe5\xe0\x6d\x8c\x21\x9d\x4e\xd2\x4b\x02\xd5\x15\x86\xf6\xd4\xed\x5a\x8f\x5e\xf5\x3c\xbc\x31\x65\xc6\xba\x78\xdc\x4f\x07\xcb\xdc\x82\x71\x80\xb0\x8d\x3b\x5e\x22\x03\x3a\xe4\x0c\x0d\xe8\x05\x18\x8e\xcb\x7b\xbc\x4c\x97\x06\x38\xdb\x6f\xfb\x39\x05\x7c\x92\xdc\xa3\x7f\xc2\x0b\x5b\x3b\x06\xc6\x01\xac\xa5\x19\xe6\x9c\x94\x6f\x9b\x20\x28\xe0\xa7\xd9\x20\x97\x0f\x89\x76\x2c\x3c\xc8\xb0\x8d\x36\xfe\xad\x8d\x51\xc7\xb4\xc1\xda\xe7\x7b\x66\x2d\x30\xee\xcc\x5a\x7f\x56\x7c\x07\x7b\x83\xba\x68\xad\xf2\x87\xeb\x7c\x8f\xa0\x0e\x21\x11\x59\x84\x25\x45\xa9\x01\x41\x38\x42\xca\x7a\x8e\xf1\x0f\x42\x34\x3a\xdd\x3b\xcc\x5d\xcd\x62\xce\xba\x0f\xc6\x01\xac\xd5\x7a\xe2\xe1\x60\x9a\xa7\x8b\x6f\x25\x5f\x9f\x0d\xed\x35\xd1\x7b\xde\xae\xc0\x14\xed\xb8\x93\x8e\xed\x76\x4b\xcc\x3a\x78\x19\xb6\xd5\x1d\x18\x07\xb0\xd6\xd8\x03\x75\x67\x4e\xb7\x87\x37\xb1\x07\xdc\xc7\x33\x05\xe3\x6b\x63\x8d\xf1\x6b\x74\x7e\x1a\x96\x36\x15\xda\x38\x7c\x47\x9f\x82\x65\x3d\xc0\x38\x80\x07\xb2\x66\x6c\x8f\x12\xd7\x7f\x3e\x08\xbb\xb1\xb9\x21\x6b\x9a\x9f\xa3\x6c\xf8\x55\x4f\xbc\x2f\x9d\x81\x4f\x3d\xce\xb3\x85\xfa\x1e\x6c\x7f\x78\x30\x0e\x10\xd6\x7a\x59\x5a\x9c\xe5\xcd\x4f\x8a\x04\xf1\xd8\xb8\x99\x6e\xe9\xe3\xcb\xd6\x89\xec\xa7\x94\x0a\x4d\x66\x9a\xd7\xa4\x32\x31\xba\x61\xf3\x3a\xc0\x38\x80\xb5\x50\xf0\x4b\x78\x7b\x72\x08\x45\x6b\x07\x6d\xc5\xfc\x65\x9b\x5e\xcb\x71\xad\xa3\x08\x35\x7c\xd6\x4c\x34\xfe\x99\x80\xe7\xe5\x49\x7c\x66\x2d\x30\xee\xcc\x5a\x7f\x56\x7c\x07\x7b\x53\xfe\x2f\xcb\x93\xdf\xa0\xbf\x3c\x99\xdb\x42\x5f\x56\x94\xc1\x36\xe2\x1e\xa9\xbf\x99\xce\xad\x47\xce\xdc\x9f\x6d\x79\x2a\x9b\x70\x7a\x4f\xca\x05\x56\x18\x02\xe1\x00\xd6\xea\x5e\xdb\x69\x7c\x03\xb1\x8e\x50\xab\xa5\xe9\xca\x72\x60\x16\xa9\x70\x0f\x69\xd5\x4f\x3c\xc5\xad\x33\x37\x4e\x8d\xdc\x4b\xc2\x3b\x0b\x0b\xc6\x01\xac\x55\x83\xfe\x6a\xb3\x9f\x2e\xfc\xbd\xc8\x87\x79\x12\x2f\x6d\x6f\xe4\xd3\xf8\x2f\x39\x23\x0a\xa3\x1f\xae\x4b\x13\x59\xa9\x35\xda\xc3\x92\xaa\x60\x1c\xc0\x03\xdc\x44\xdb\x35\x7d\x4f\x30\x89\x23\x4e\xd9\xc8\x08\x7e\x2f\x70\xf4\x66\x17\x40\xda\x4c\x16\x85\x69\xf9\xec\xd2\x2f\x2b\xf7\xc1\x66\xdb\x83\x71\x80\xb0\x62\x79\xc6\xa1\x1c\x7a\xdf\x89\x03\x3e\x68\x08\xed\xa0\x7f\x0e\x95\xb4\x89\xab\x5e\xd1\x5b\xde\x53\x86\xdc\x2b\xa9\xc8\xf2\x86\x6d\x5a\x02\xc6\x01\xac\xb5\x3e\xfe\x49\x75\xe0\x65\x30\x07\x49\xd9\xae\x73\x20\xcb\x84\x41\xf0\xf3\x84\x92\xa7\x75\x52\xbf\xae\x96\xb7\x4f\x19\xfe\x0a\x85\x1d\xcc\x0d\xc6\x9d\x59\xeb\xcf\x8a\xef\x60\x5f\x44\x17\xad\x45\x77\x8d\xa3\xc5\x8a\x53\x9f\x59\x23\xe3\x79\x6d\x9c\x67\xbf\xe4\x1b\x43\x86\x00\xac\x6a\x71\xef\xda\x7a\xe6\x7d\x64\xcb\x98\xea\xb3\xee\x83\x71\x00\x6b\x0d\x31\xb3\x0d\xb2\x69\x3f\x60\xc8\x28\x1d\xd2\x61\x1f\xc8\xcb\xe5\xc3\xa6\xfc\xfe\xa9\xaa\x08\xfd\x70\x7a\x65\x73\xfb\x67\x1f\xec\x59\x00\xc6\x01\xac\x35\x7c\x4a\x9c\xfa\xe9\x63\x6e\xdd\xd4\x9e\xfd\xc3\xab\x2e\x93\x43\xe6\x78\x93\x5f\x7f\x1c\x07\xae\xfd\xb8\xed\x75\x2c\x75\x9c\x09\x9b\x94\x0a\xc6\x01\x3c\x80\xc6\x89\x7e\xa9\x1d\x97\x5e\xa7\xc3\xa9\x39\xe7\x90\x87\x9d\xb6\x47\x24\xc2\xdd\x62\x2e\x5a\xbf\x4c\x4a\xa7\x3d\x19\x92\x05\x3b\xda\x03\x8c\x03\x84\x25\xdd\x7f\x81\xc5\xa1\x74\x73\xaa\x3b\xbb\xcc\x47\x32\x43\xc2\x80\xd3\x61\xdb\x3c\x50\xcb\xa2\x24\x86\x18\x4b\x31\x35\x65\xcc\xe8\x2c\x2c\x18\x07\x4c\x51\x4d\xe9\xe3\x58\x0b\x3e\x43\x89\xfb\xbe\xd6\xee\x2a\xdb\xa9\x23\xbb\x9e\xdd\x1a\xc6\xf5\xc9\x1b\xcf\x98\x63\x6e\xb6\x6c\x03\xf9\xcc\x5a\x60\xdc\x99\xb5\xfe\xac\xf8\x0e\xf6\xe5\x7b\xd1\x5a\x65\x3b\x2f\x06\x8e\xfb\x04\xe3\x45\xbe\xbe\xe7\x48\x5d\x8a\x35\xbd\xfa\xb0\x51\x7e\xb6\x49\x5d\xe5\xb8\xaa\x2d\x78\xdc\xf8\x32\x6c\x47\x5d\x30\x0e\x60\xad\x75\x8d\x2b\xbe\xa6\x7e\xd1\x77\xef\x90\xe2\x3c\xb2\x6d\xc3\xd8\x88\x50\x7d\xa9\x72\x4a\x8a\x22\xd9\xcf\x12\x28\x8e\x4c\x7d\xe8\x77\x16\x16\x8c\x03\x58\x6b\x0e\x57\x4c\x2a\x54\x4e\x52\x7e\xff\xbd\x8b\x14\xe9\x78\x41\x6a\xe8\xdd\x58\x27\xb4\x70\x27\xda\xde\x13\x8f\xe2\x67\xa4\x1b\x76\xb0\x89\x8e\x20\x1c\xc0\x03\xf3\x7d\x78\x3d\x93\x56\x1f\x65\xcc\xd5\x32\xee\x84\x99\x49\xe2\x5e\x1d\x3c\x6d\xc8\x72\x7b\x37\x8f\x7e\xd8\x1e\xf2\xf9\xdd\x01\x6c\x65\x23\x18\x07\x08\xab\xf9\xf9\x08\x77\x9b\xfd\xe8\x74\x5e\x79\xbb\xa6\x45\x88\x2d\xbd\x7b\xdf\xd3\x28\x62\xfb\xa9\xd4\x78\x78\xb2\x50\xdd\x3c\x8f\xce\x59\x58\x30\x0e\x60\x2d\x42\xe7\x55\xc7\x16\x8f\x61\xe2\xeb\x8f\x73\x7f\x28\x5f\x66\xfc\x69\x64\xfc\xac\xb3\x71\x36\x30\x91\xbe\x34\x34\x7a\xec\xd1\xed\xb9\x33\x6b\x81\x71\x67\xd6\xfa\xb3\xe2\x3b\x58\x86\xe3\xa2\xb5\xea\x26\xd8\xaa\xe5\xb0\xfd\xb6\x4e\x1e\x09\xa4\x55\xf1\x38\x7a\x90\xd8\xe7\x31\x63\x72\x3f\xe9\x34\x64\x76\x6a\x8f\xbc\x73\x15\x76\x2c\x1b\x18\x07\xdc\x12\xaa\xac\x3f\x4b\xae\xaa\xec\x43\xee\x5a\xa9\x5f\x58\xce\x02\x53\x78\x6b\xcb\x13\xbd\x8f\x96\x83\xa5\xc7\x8e\x56\xb1\xdd\x2d\xb0\x24\x01\x18\x07\xb0\x96\x32\xa3\x40\x74\x62\x4a\xf2\xcf\xd7\xaa\x4f\x12\x33\xd2\x9e\x71\xb8\x8a\x35\x99\xc5\x85\x86\x21\xb9\xbf\xd4\xf4\x19\x22\xe8\x86\x59\x0b\x8c\x03\x78\x60\x5d\x68\x33\xe7\xf3\x2d\x0c\x61\x12\xb4\x26\x64\xcd\x8d\xb4\x4f\xcd\xbb\x27\x1a\x3f\x29\xe6\xcd\x71\x44\x2c\x05\x58\x08\xb8\x60\x5b\x36\x83\x71\x80\xb0\x19\xe4\xc9\x58\xe8\x86\x03\x39\x5a\x56\xe9\xc1\x8f\x98\x87\x7f\x3d\xe3\x6c\x1a\xd2\x53\xe4\xbf\x17\xd0\xa1\x4e\x59\xb2\x17\x0c\x3b\xd6\x01\x8c\x03\x58\x4b\x63\xf5\xe9\x35\x5f\xb2\xe7\xda\xfe\x25\x6d\x23\x5b\xac\x4a\xdb\xd9\x1a\x02\xaa\xa7\xf9\xdc\xdb\xe8\xb5\x69\x14\x8a\x11\xee\xfa\x67\xd6\x02\xe3\xce\xac\xf5\x87\xc5\x77\xb0\x1c\xf6\xd9\x99\xef\x17\x8a\xef\x8d\x53\xad\xb9\xe4\x91\xae\x8f\x90\x9e\x71\xe7\x69\x35\x6b\xd1\x30\x76\xbd\x7a\xbb\x6f\xe4\x89\x24\xa1\x9d\xc7\x3f\x76\xab\xab\xfc\xef\x33\x7d\x17\x8a\xef\x07\xb8\xe5\x90\xe4\x5b\xf1\x2a\xfe\x98\x41\x42\x7c\x26\xbd\xfe\x32\xfd\xd3\xa2\x33\x2a\xab\x72\xaf\xfb\x62\x42\x0e\xa8\xaf\x27\xfc\xdf\x64\xfa\xc0\x3a\xf6\x5f\xca\x58\x85\x52\xe8\x65\xe6\xcf\xe5\x7a\x3f\xe8\x62\x13\x97\xb7\x7a\xcb\x0d\x1b\x08\xfe\xb4\x52\x12\xc9\x79\x8e\xbb\x17\x26\x31\x8d\x0d\x2b\x0c\x81\x70\x80\xd1\x36\x6b\xd2\x1e\xf9\xf4\xde\xbd\xf0\xe3\xe8\x85\x15\x3e\x13\x11\x79\x9a\xc6\x92\x51\x74\x6d\x2e\x6c\x9d\x5f\x54\xa3\xb3\x24\x7b\x34\xb0\x55\xcf\x20\x1c\x60\xb4\x61\x91\xbb\x73\x9b\x29\x12\xdf\xf4\xe6\xbb\xeb\x4f\xc4\x11\x72\x53\xe5\xc5\xaf\xae\x16\x39\x27\x89\x85\x00\x0c\xc6\x76\x86\x14\xfe\xb3\xb0\x60\x1c\x60\x58\x70\xfd\x7e\xcf\xa4\xac\xb3\x6b\x53\x25\xa3\xfc\xc4\xcf\xc3\xd7\xba\xdb\x71\x2a\x68\xda\xcc\x8e\x33\x93\x8a\xa5\x39\x1e\x2d\x63\x1c\x36\x9d\x10\x84\x03\x84\x2d\x9c\xa6\x5f\x8f\x40\xae\xa0\x13\x6a\x54\xa0\xd6\xd2\xef\x5c\xd2\xfe\xa8\x59\xe4\x95\x3c\xb1\x10\xcd\x29\xb3\x8c\xf5\xc4\x0f\xb6\x3d\x0c\x18\x07\x18\x6d\xa5\x46\x39\x6d\x36\x42\x0d\x24\xb6\x12\xda\xbf\x77\xd7\xf7\x95\xe6\x44\xb0\x87\x82\x30\xb9\x94\xe4\xd1\xc6\x5d\xe6\x8e\x8b\x45\xcf\x46\x1b\x18\x77\x36\xda\xfe\xac\xf8\x0e\x66\xe0\x8b\xd6\x5a\x6d\x76\x41\xd9\x0c\x09\x6b\x5c\x6f\x0a\x95\x9d\xd4\xeb\x5a\xf4\xab\x68\x1f\x3b\x74\xda\x69\xef\xa5\x7d\xbd\xa9\x34\x2b\x07\x3b\x05\x11\x8c\x03\x58\x8b\x98\xbd\x1c\x77\x22\xd9\x76\xde\xb6\x38\x2f\x72\x27\xba\x3f\xb3\x51\x4c\xbe\x19\x3b\xc2\xc9\xc3\x7d\xc5\x70\x6d\x98\x87\x11\xb6\x29\x08\x18\x07\xb0\xd6\xd5\x96\xfb\x3f\x36\xef\x19\xf0\xee\x5b\x9a\x04\x77\xbb\x7d\x69\xec\xea\xc2\x49\xbb\x24\xf3\xe3\x94\x7a\xda\x72\xe1\x5e\xf0\x75\xd8\x56\x46\x60\x1c\xc0\x03\x72\xb7\x56\xb6\xbc\x5f\x07\xe4\x5e\xc9\xd9\x48\xe3\xbc\x3d\x5f\x25\xd2\x59\xd6\xa0\xc2\x6d\xd0\x3c\x66\x6b\xf2\x64\x55\x97\xa8\xe1\x2c\x2c\x18\x07\x08\x3b\xc3\x7c\x7d\x3b\x94\xb3\xc4\xf4\xed\xd8\x5d\x54\x17\xed\x7b\xa3\xc4\x01\x82\x32\x3d\x7b\xb5\xed\xba\x66\xe1\x14\x99\x9d\xf1\xf1\x67\x61\xc1\x38\x80\xb5\xd6\x1c\xee\x44\xcf\x7b\x4b\x53\xf9\x9e\xe6\xea\x1f\x56\x79\xd8\x4d\xbc\x58\x18\x13\xe3\x2d\xfc\x1a\xfa\x26\xf9\x47\xd4\x81\x04\xc7\x99\xb5\xc0\xb8\x33\x6b\xfd\x59\xf1\x1d\xac\x2e\xfa\x5f\x56\xbe\x7f\xa5\xd6\xc1\xe5\x1b\xcb\xe0\x4d\x7a\xf1\xa4\x92\xe6\x67\xf3\x68\x31\x5a\x58\x5e\x55\x42\x18\x59\x62\x1b\x4b\x6c\x66\x02\x6c\x46\x2d\x18\x07\x5c\xb9\x52\x40\xc4\x7c\xc4\x89\x5f\x7a\x69\xab\x74\x63\x23\x9b\xee\x05\xee\xea\x84\x34\x31\xd4\xea\x1b\xc1\xdd\x48\x99\x4f\x7c\xc7\xb0\x6f\x71\x30\x0e\x60\x2d\x28\xba\x4f\x8c\x55\xf3\x10\xe3\x6e\xa2\xa3\x1c\x5d\x4e\xea\x13\xd7\x47\x5b\x58\xb4\xfa\xeb\x9d\xbd\x0e\x24\x73\xd2\x05\x3d\x8f\xcf\xc2\x82\x71\x00\x0f\x4c\xbc\x70\x47\x6f\x67\x8b\xa5\xc7\xd7\xf3\x19\x3a\x9a\xb0\x26\x0f\x25\x23\x1b\x23\x5f\x33\x23\x13\x6a\xc9\x3c\x3d\x1d\x78\x4a\x71\x16\x16\x8c\x03\x84\x95\xc9\x6c\x71\xb5\xa3\xa5\x12\x3c\x79\x15\x6b\xc0\x7c\xca\xfc\xee\x8e\xb4\xd6\x56\xbd\xf5\x96\x1d\x03\x76\x92\x4c\xac\xba\x01\x6c\xc3\x5f\x30\x0e\xb8\x18\xe2\x4f\x57\xbe\x63\x94\xf4\xca\x3e\x17\x6f\xc9\x20\x7a\x72\x2b\x7d\x6e\x65\x16\xb5\x62\xf4\xc5\x6a\x79\xaa\xdf\x71\xc3\xb0\x26\xf2\xaa\xf7\x2b\xfc\xf3\xc5\xf7\xdf\xe5\xf9\x81\x97\xc5\xde\xb6\x5b\x3f\xef\x4b\xd8\x79\xf0\x11\x15\xbb\x44\xd5\xd8\x2e\x07\x15\x43\xef\x57\x56\x44\x33\xdd\xd6\xf9\x15\xde\x13\x99\x3f\xbb\x4a\x9f\x2a\xc4\x36\x1e\x29\xce\x61\xf3\x65\xfb\x78\x35\x76\x6a\x38\xf4\x38\x1c\xa4\x56\x7b\x4f\x60\xdf\x2d\xb2\x07\x14\xdf\xc1\x22\x5f\x2c\xbe\xeb\xdc\x78\x7a\x12\x5d\xef\xdf\xea\xec\x88\x42\x4c\x7a\x1c\x6b\xde\x10\xff\x65\xf2\xd1\x72\x1a\x56\x47\x10\xb4\x83\x1b\xf5\x01\xe6\xf9\x7b\xcd\x25\xbb\xc3\x57\xe3\x5a\x0d\x5f\x7d\x03\x6c\x7a\x1f\xb4\x8e\x8b\x04\x78\xef\x3b\x1e\x27\x88\xec\xab\x2f\x4a\x38\x8f\xdf\xfe\x05\x2b\xbe\x83\xc5\x3c\x3b\xf3\x1d\x58\x7c\xbf\x31\x21\x49\x68\x2e\x5d\xa7\x2e\xdf\x9e\xf4\x0e\xa3\x74\xed\x72\xba\x00\x0e\xeb\x1d\x7e\xcc\xdf\x83\x8c\x03\xfb\x0c\x83\x97\x38\xff\xfa\x05\xa7\xe5\x42\xf1\x9d\x78\x96\x82\x71\x61\x38\x41\xcb\xec\x81\xc7\x77\xe6\x07\x39\xc3\x23\x24\x4f\x58\xd1\x0a\x3d\xd3\xdb\xdd\x52\xc2\x5d\x24\x98\x9a\xff\x5e\xf2\x42\xf1\xfd\x2e\x44\xa4\xba\x73\x44\x61\x1d\x47\x7a\x97\x66\xac\x42\x4a\x3a\x40\xaf\xe2\xf6\xcd\xa0\xd9\x29\x39\xc7\xad\x5c\xe4\xa3\xc2\xbf\x5f\xf9\xde\x72\xa1\xf8\x1e\x15\xc7\x7a\xe4\xa4\x4c\x79\x39\xbe\x47\x44\xdd\xe1\x51\x8f\xad\x21\xd5\x13\x23\xd9\x43\x23\x65\x5e\xa1\xca\xe9\xc5\xd7\xd7\x9e\xfd\xbd\xe4\x85\xe2\xfb\x2d\xcf\x2f\xbf\xb3\x96\x77\xbc\x90\xaf\x67\x18\x86\xb3\x2f\x0c\xcf\x77\x26\xed\xbb\x78\xeb\xb2\x6c\x1f\xfa\xa5\xe6\xca\xe2\xc7\xff\xbd\xe4\x85\xe2\xfb\x50\xa5\xd8\xe7\xc5\x06\x03\xfa\xbe\xc3\x7e\x35\xa7\xd2\xa1\xc3\x0c\xa6\x84\xc5\xe7\x0b\x7a\x4a\x4a\x63\x5e\xdc\xae\x86\x44\xea\x7f\x2f\x79\xa1\xf8\xee\x07\x59\x7e\x47\x1d\x2b\x19\x6c\xf9\x34\x17\xd5\x8e\x18\x3b\x77\x0a\x4d\x5a\xcd\x12\x4f\xce\x56\x6d\x62\x5a\x46\x9a\xef\x97\xec\xdf\x4b\x5e\x28\xbe\xab\xbf\x4f\xf2\xbf\xde\xe8\xa3\xbd\xc2\x5b\x7c\x8f\x55\xdd\xc4\xe0\x38\x4b\x4e\x34\xfd\xd8\x4b\x3c\xf7\x61\x51\xf7\xaf\x6d\x96\xbf\x75\xac\xd1\x9f\x0d\xc5\xff\x52\x7c\x1f\xe1\x17\x63\x56\x0e\x96\x91\x59\x25\xb6\x49\xa4\xf9\xd2\x8d\x2c\x30\x78\xc7\x98\xeb\xe0\x43\x68\x10\x54\x0a\x7d\xf5\x07\x6c\x7b\x27\x30\x0e\xf0\x70\x33\x32\x2b\xa5\xf8\xa5\x13\xf6\x41\x68\xf1\xbe\x54\xe2\x58\x78\xa1\x6a\x85\x40\x70\xa8\xbf\x74\xfe\x9a\x84\xb6\xd6\x75\x2d\x46\x58\x36\x10\x8c\x03\xcc\x2c\x83\x36\x6b\x84\x36\x2c\x73\x94\x5b\x5d\x9e\x15\x6d\xe4\xdd\x28\xf9\xe2\x64\x4e\xcb\xb2\xde\x47\xea\x8e\x8e\xab\xb6\xed\xaf\x0c\xdb\xb4\x14\x8c\x03\x3c\x2e\xf0\x0b\x75\xb4\x23\x3e\x1f\xcb\x1a\x57\x6d\xf1\x9e\x64\xef\xb6\xdd\x0f\x32\x58\xa2\x5d\xf3\x8a\x82\x1e\x2b\x52\xa6\x1f\x13\xc0\xea\xc4\x60\x1c\xe0\x51\x4c\x8d\xba\x4d\x29\x72\x9f\x9c\x52\x05\x3d\x07\x72\x55\x53\xf8\x7e\x59\x55\x06\x47\x04\x47\xbc\xb0\x04\xed\xca\x97\x14\xf1\x35\xd8\x7a\x24\x30\x2e\x5c\x1a\xe5\x7c\x58\x8b\x82\x5c\xda\xee\xbb\x19\xe1\xfd\xc3\x48\xd2\xc1\x44\x56\x2b\x38\x9e\x2c\x73\xd7\x94\xfd\xd3\xd8\x97\xb7\x6d\x6c\xbe\x4f\x95\x9c\x15\xdf\xc1\xb8\xb3\x33\xdf\xff\xa8\xf8\x0e\x76\xc7\xbd\xe8\xac\x5d\x12\x37\xa5\xd9\xec\x4c\x11\x77\xe3\x49\x4b\x95\x71\x13\xee\x96\x03\xf5\xe5\x5a\x33\xbe\xa2\x67\x77\xef\x0f\x38\xea\x2e\xc1\xb6\x61\x02\xe3\x80\x4b\xe7\x3e\xd5\x43\xaf\xfe\xa8\xdb\xc7\x9f\x75\x91\xbf\x52\x60\x89\x43\xf3\xfd\xb1\x10\x4e\x21\xfa\x31\xfd\xcb\x32\xf6\x6d\x63\x5d\xd8\x9e\xa5\x60\x1c\xc0\x59\x12\xfe\x53\xc9\x99\xba\xdd\x59\x1d\x95\xef\xa5\x35\x93\x7f\x28\xd1\xc9\x04\x57\xf3\xbb\xdc\x70\x4b\x16\x13\x0e\xf1\xc5\x78\x04\x4b\x08\x83\x71\x00\x67\x21\x59\x44\x92\x58\x28\x0e\xd2\x53\x3e\xdc\x1e\x74\x9d\xfd\xc2\x58\x56\x6c\xdc\x09\xf1\x93\x77\xbf\xf3\xd9\x10\x69\xe9\x53\x32\x2c\x7d\x0d\xc6\x01\x9c\x15\xcc\xf4\x62\xd3\x2c\x58\x9f\x25\x7a\x94\xb2\x8d\x70\xf1\x30\x33\xba\xd4\x66\x2a\x97\x06\x47\xa8\xd5\xdf\xb6\x71\xef\xd7\x58\x21\x6c\x5d\x03\x08\x07\x70\x96\x25\xe9\x74\xba\xca\x65\xa3\x91\xa7\x9f\x79\x6a\xd3\x7d\xf7\xcc\xb1\xa9\x5e\x4a\xc9\x8a\x6b\x3e\xe0\x94\x37\xba\xde\x17\x97\xfe\xf2\xec\x8d\x1c\x8c\x3b\x3b\x08\xea\xcf\x8a\xef\x60\x4f\xd6\x8b\xd6\x2a\x5d\x4a\xec\x2b\xb5\x32\xaf\x68\x89\xa5\xa6\x18\x5a\xbe\x6a\x33\x93\x3d\x78\xe9\xed\x8f\xc9\xb8\x27\x3f\xcd\x93\xd0\x2f\x67\xc0\x32\x4b\x60\x1c\xc0\x5a\xb4\x0e\xdf\x44\x22\x47\x4d\x15\x7f\x1a\x96\x5e\xb9\x41\x78\xc3\xc7\xc4\xfd\xdb\x2d\x29\xb1\xe7\xf8\x44\xb9\x9a\x9a\xc4\xb1\xb4\xb0\xdd\xb6\xc1\x38\xe0\x5e\x54\xcc\x64\x89\x39\xa4\x33\xed\x24\x2e\xd0\x84\xe3\xa7\xc6\x57\x93\xc3\xca\x12\xd7\x3d\x9d\x90\xf0\x84\xec\xa9\x9f\xa6\x48\xc1\xd2\x6b\x60\x1c\xc0\x5a\x72\x6c\x28\x53\x41\x96\xfb\x16\x41\x89\xb1\x5e\xc7\x73\xe6\xfe\x2c\xb7\x07\x0f\x9f\x61\x4e\xff\x4a\xf1\x63\x33\xb4\x7c\xfe\x0d\xb6\x0d\x26\x18\x07\xb0\xd6\x5a\xe2\xe3\x56\x0c\x14\xf1\xad\x4c\x33\x7d\x15\x1f\xc6\x43\x95\x1e\x99\xeb\xd9\xee\xf3\xf4\x8d\x47\x6f\xb6\x16\x36\x86\xe7\xf7\xcf\xc2\x82\x71\x00\x6b\x75\xeb\x6c\xb1\xaa\xff\xbc\xf7\xea\xbd\x9a\xd3\xe1\x51\x75\x53\x52\x85\xc6\x62\x51\xa1\x00\x0e\xd1\xfa\x54\x85\xa4\x37\xcb\x2c\x21\x6c\x0d\x29\x08\x77\x66\xad\x3f\x2b\xbe\x83\xbd\x41\x5d\xb4\xd6\x17\x88\x4c\xfd\xac\xf2\x1c\xde\x93\xb8\x54\x9a\x4f\xb3\x18\x91\x3b\x8b\x3d\x7a\x16\xbf\xeb\x1e\x1b\xaa\x77\x0d\xe1\x85\xa6\x7d\x84\x4d\x6b\x01\xe1\x80\x6b\xdc\x9e\xa0\xa4\x65\xaa\xb6\xe9\x69\xc6\xe9\x4a\x74\x4a\x28\x68\xaf\x7d\x51\x5f\x7b\x8b\xca\xff\x36\xae\xfc\xcb\xbd\x0a\x61\xd7\x23\xd8\x1a\x37\x10\x0e\x60\x2d\xb7\xee\xe9\xaf\x4e\x91\x83\xfb\x0f\xa9\x4f\xc6\x1e\xed\x45\xae\x8e\x16\x3c\x26\xa3\xde\x2c\xfe\xee\x3b\xab\xc1\xad\xd1\x44\x0a\x5b\x1f\x02\xc6\x01\xac\x35\xa8\xf3\xc8\x40\x2b\xa2\xa4\xf1\x4a\x63\xd6\xce\x3e\x3b\x01\x79\x55\xca\x3a\x9d\x80\x6d\x82\x5b\x2f\xda\xb1\x34\x9a\x44\x21\x2c\x2b\x0e\xc6\x01\xac\x65\xdf\x17\x76\xa5\x22\xb6\xfd\xf9\x8d\xc4\xdf\x81\x28\x6e\xfa\xbf\x1a\xa4\xb8\x8e\xab\xed\x88\xdf\xc8\x7a\x97\xf3\xb8\x77\x2a\xc1\x4e\xa8\x07\xe3\x00\xd6\x72\xc2\xab\x36\x39\xa6\x9d\x22\x52\xa2\xb4\x1b\x27\x7e\x35\xef\xf3\xe8\x78\x23\x82\xf7\xf5\xd7\xe1\x5f\xb1\x74\x65\x1a\x24\xa2\x23\x67\xd6\x02\xe3\xce\xac\xf5\x67\xc5\x77\xb0\x37\xe5\x8b\xd6\x4a\x84\x38\x1f\x68\x94\x2c\xcf\x38\x5e\x6d\x74\xec\xb1\x8d\xa8\x9b\x33\x22\xd3\x2c\xb8\xbc\xff\x35\x4b\xe4\x09\x1f\x59\xb6\x04\x6c\xa6\x04\x18\x07\xb0\x56\xb6\xc2\xc7\xc0\x3b\xf9\x79\x8d\xe4\xe1\xa6\x87\x61\x4e\x71\xf7\xbe\xbd\x4e\x0e\xfd\x54\x72\xfa\xe9\xf0\x0a\x01\xc7\xb2\x7a\x3b\x2c\x3b\x03\xc6\x01\xac\xf5\x52\xa4\xd7\x29\x7e\xaf\x9e\xf4\x2a\x43\xd4\xc2\x89\xf0\x8d\x5a\x36\x5d\xf9\x39\x91\xde\xd1\x2f\x5e\xd8\x01\x8c\x33\xa1\x28\xb0\x03\x53\xc0\x38\x80\xb5\xac\xb7\x33\x9e\xe2\x96\x0f\x67\xf3\x74\x79\x0c\xbb\xbf\x23\x54\x74\xdb\x37\x4e\xc9\xbc\x2e\x61\xba\xc1\xe9\x19\xb2\xd9\x54\x04\x4b\xa6\x80\x71\x00\x6b\xcd\x76\x3f\x90\x0f\x96\x43\x5e\xbf\x9e\x5c\xa6\xac\x86\x5d\xb0\xf5\xe5\xf8\x19\xba\xdf\xa5\xc4\xbe\xf8\x67\x25\xb2\xee\x5c\x42\xb3\xb0\x14\x30\x08\x07\xb0\xd6\x0f\xb9\xb0\x72\x3c\xd2\xbb\x66\xe2\x79\x53\x47\x24\xd5\x26\x38\x64\xdb\xf4\xeb\x89\xc9\x7c\xc4\x4d\x2d\x11\xb6\x37\xf7\xc4\x60\x0b\xfd\xc0\xb8\x33\x6b\xfd\x59\xf1\x1d\xec\x8b\xe8\xa2\xb5\x34\x4a\x15\xd2\x50\x8b\x70\xef\xfb\x3e\x1c\x2d\xf0\x53\x15\xac\xc1\xc5\xc0\x97\xc7\x19\xb8\x4d\xb1\xf9\x0a\xfd\x93\xf1\x6b\x53\xfd\xb3\xee\x83\x71\x00\x6b\xcd\x99\x2c\xe2\xaa\x52\x65\x9a\x4f\x1f\x0b\x7b\x85\x08\x7e\xbb\x27\x51\x93\x59\x90\xa4\x9c\x43\xdd\x4b\xdd\x95\x31\x47\xf5\x3e\x0f\x56\xca\x04\xe1\x00\xd6\x2a\xfe\xf2\x84\x5e\xec\xdd\x70\x7d\xec\xc7\xa8\xec\x09\x59\x02\xe5\x1b\xf7\x5b\xdc\x26\xb2\x93\x04\x1a\x54\x1e\x96\x39\xf4\x6b\xc2\x4e\x0e\x02\xe3\x00\xd6\xa2\xee\x5f\x86\xda\xcc\xaa\xb6\x93\xa3\x1f\xe8\x77\x93\x31\xf8\x6c\x5b\xe3\x56\xb1\x95\x8d\xbd\x66\x9a\x33\x44\x83\x8e\xa7\x8f\xc1\x5e\xb7\x41\x38\x80\xb5\x9c\x4c\x31\x2a\x07\x7f\x10\xa0\x5a\x14\xa6\x3e\x8e\x43\xae\x46\x41\xca\x73\x5e\xe6\x4a\xd6\x56\x76\x16\xa0\xa4\x4f\x3a\x84\xc0\xe6\x75\x80\x71\x00\x6b\x2d\x25\x70\xc7\x7e\x62\x3e\x8a\xf2\xc8\x79\x42\xdc\x8e\x5d\x1a\xc2\xa8\x75\xe7\x6b\xd7\x5a\xe6\x50\x26\xf9\xe2\xef\xbb\x73\x6c\xac\x67\xd6\x02\xe3\xce\xac\xf5\x67\xc5\x77\xb0\x2f\xdf\x8b\xd6\xda\xdc\x1f\xe0\x7c\x3a\x58\xfa\xa0\x89\xf8\x67\x49\x48\x89\xc1\x1d\xd9\x40\x1c\x62\x07\x22\x33\x52\x61\x8b\x5a\x41\xd6\xcd\x93\x17\x67\xdd\x07\xe3\x00\xd6\x2a\x46\xa3\xcc\x54\x40\x6e\x6a\xe4\x8f\xde\xc8\x16\x8d\x3c\x96\x7d\x55\x2c\x95\x24\x89\xe3\xa7\xd8\x66\xee\x8e\x1c\x2a\x97\xf6\x10\xe6\x01\x10\x0e\x60\x2d\xd2\xb0\x95\x87\xc9\x7d\x19\xa9\xa3\xca\x36\x78\xfe\x79\xe1\x68\x65\x9f\xde\xd9\x68\x59\x90\xa1\xa4\x9d\x72\x61\x5d\xb7\x94\x86\x4d\xcb\x04\xe3\x00\xd6\xea\x2c\x30\x17\x8c\x29\xb8\x8d\xe9\xb2\xbc\x52\x56\x20\x48\xe4\x45\xf7\x35\x5b\x65\x22\xae\xbc\xb6\x7e\x39\x5f\x9c\xef\x92\x8f\xe5\x59\x58\x30\x0e\x60\xad\xd6\xc3\xcb\xd3\x1c\xa2\xa9\x96\x55\xa2\x5e\xd4\xb7\xd9\x1a\xe2\x98\xc7\x0f\x42\xc9\xb6\xaf\x74\x7b\x0c\xdc\xc9\xdf\x38\xb0\x80\x1d\x9f\x04\xc6\x01\xac\x25\x39\x25\x9f\x54\x46\xe7\x3b\x6c\xe4\x85\x31\xe4\x51\x3e\x21\x23\xe0\xc6\x14\xe8\x82\x31\x2b\x27\x13\x3f\x13\xf2\x25\x7c\x8d\xf6\xcc\x5a\x60\xdc\x99\xb5\xfe\xac\xf8\x0e\x96\xe1\xb8\x68\xad\xcb\x48\x1e\x64\x5e\xb2\x37\xbd\xc6\x62\x08\xd1\xa2\xd8\x69\x9d\x86\xcb\x39\x63\x6d\x66\xb8\x0e\x67\x84\xea\x6b\xa5\x33\x63\x61\x93\x5d\xc1\x38\xe0\x06\x56\xc6\xbe\xbd\xf7\x3a\xa9\xd4\xe4\x50\x3d\x27\x6f\x52\xf9\x48\xbe\x5f\xb8\xf9\x80\x57\xc7\xd2\xdd\x3f\xb4\xe0\xea\x11\x81\x0d\xec\x04\x31\x30\x0e\x60\xad\x86\xde\x85\xf7\xf6\xed\xcf\x28\x42\x6d\x56\xae\xbd\x96\xd4\x11\x7b\x3c\xe5\xf0\x10\x4b\x96\xe5\x43\xec\x4f\x02\x8a\x24\x09\x27\x58\x39\x10\x8c\x03\x58\xeb\x99\x74\x6d\xa2\x99\x5f\xdd\x46\xac\x5f\xf4\x47\xbb\x70\x16\xe4\x28\x87\xbb\xea\xda\x47\x62\x74\x87\x32\x31\xa5\xd1\xee\xca\xb0\xb9\x73\x60\x1c\xc0\x5a\x05\x3d\xa8\x21\xfa\x22\xc2\x18\xc5\xa5\xbb\x81\x9e\xcf\x7e\xf9\x59\x06\xd7\x68\xbb\x99\x22\xe3\x8f\xdd\xb7\x48\x66\xf5\x27\x81\xed\xaf\x0d\xc6\x01\xac\xa5\xeb\xe2\x43\x6d\x23\x65\x96\x35\x82\x94\xcb\xef\xb6\xed\x28\x62\xf1\xb0\x6f\xae\x94\xc2\x2b\x16\x7f\x7d\x99\xb3\x42\xa6\xa9\x07\xb6\xed\x3c\x08\x77\x66\xad\x3f\x2c\xbe\x83\xe5\xb0\xcf\xce\x7c\xbf\x50\x7c\xc7\x6e\x2e\xd8\x13\xd3\xb3\xc8\x8b\xf1\x85\x0e\x66\x2c\xeb\x3d\xe7\xe3\x91\xe5\x0c\xe9\xb7\x73\x30\xde\xf7\xbd\xee\xc8\x5c\xa3\xfd\xf7\x99\xbe\x0b\xc5\x77\x53\xba\x80\x11\xab\x42\x59\xf2\x03\x65\xce\x5f\xe9\xf6\x4e\xe5\x35\x59\x54\x9a\x84\xef\x8c\x8a\xd4\x9f\xab\x28\x7b\x42\x2d\xff\x36\x1d\x6e\xf4\x67\x1d\xbb\x38\xda\x4e\x9e\x9f\x8c\x0b\x25\x47\x93\xdf\xa8\x6d\x5f\xa8\x9a\x8b\x9e\xef\xb3\xae\x14\x34\x72\x0f\x52\xf0\x18\x2e\xe3\x4a\x9d\x56\xc5\x3c\x73\x04\x18\x07\x18\x6d\xaf\xad\x46\x26\x6b\xde\xbf\x20\x17\xb6\xf1\xf9\xb9\x47\x5d\x8d\xf4\xcb\xf5\x4d\xb3\x25\x1b\x5e\x75\xb7\xa9\x8e\x84\x45\x49\x24\x6c\x2b\x23\x30\x0e\x30\xda\x4a\xbd\x17\x16\xf3\x32\xc3\x65\x0f\xbf\x10\x06\x1a\x19\x6e\x8c\x27\x23\x4f\xba\x1e\xc8\x2c\xbb\x78\x6a\x0d\xf3\x5d\x7a\x12\x95\x0e\xfb\xc4\x07\xe1\x00\xa3\xed\xeb\xcc\xe6\x54\x50\xee\xc7\xc8\xb6\x62\xc7\x2f\x45\x76\xcb\x1e\xcc\x6f\xde\xa5\x54\x19\xcf\xba\x1b\x41\xcb\xba\x1e\x63\x3b\xc2\x3e\xef\xc0\x38\xc0\x68\xb3\xc8\xd7\x43\xba\x39\x3f\xd9\xc5\x1b\xc7\xf1\x39\xcd\x01\xdd\xa7\xff\x20\xef\x7e\xd1\x97\x91\x17\x8f\x7c\xa8\xa0\xc5\x5e\xac\x89\x67\x61\xc1\x38\xc0\x68\xcb\xd7\x97\xaf\x4c\xd2\x26\x1d\x2d\x28\xf6\x57\x63\xaa\xcc\xe0\x51\x1f\x67\xbf\x6d\xff\x96\x3b\xe1\x63\x59\xdf\x8c\x00\x1b\x6e\xe2\xd9\x68\x03\xe3\xce\x46\xdb\x9f\x15\xdf\xc1\x0c\x7c\xd1\x5a\x6e\x5d\x2a\x7e\xd2\x8c\x93\x15\x15\x0c\x9e\xb7\x7d\xe6\x3e\xd5\x0d\xbe\x5a\xa2\xd0\xcd\xc4\x59\x23\x49\xc2\xfe\x9e\x8e\xe2\x07\xdb\xc8\x1d\x8c\x03\xee\xef\x18\xb3\xc8\xe0\x3a\x66\x47\x29\xf5\x18\xc3\xf1\x36\xaf\xa1\xbe\xd9\xe2\x02\x26\xf2\x31\x24\xea\xe9\x96\x01\xfd\x86\xc7\x6f\x6d\xd8\x3a\x00\x10\x0e\x60\x2d\x47\xeb\xbc\xd4\x8d\x15\xf4\xa5\xd4\x2d\x2d\xff\x65\xd5\xa8\xef\xf5\x0b\x9f\xe9\x71\x27\x6e\xed\x3a\x19\x6d\xb1\x99\x95\xbd\x82\x1d\xce\x0e\xc6\x01\xac\x05\x1d\xfd\xd8\xca\x4c\xf7\x8c\x9e\x4a\x12\x7b\xad\xdb\x23\x05\x5f\x64\x06\xe3\x07\x6f\x07\x39\xde\xb5\x78\xfd\xf0\xc1\x1c\x75\xd8\xc3\x1c\x8c\x03\x58\xeb\x99\x77\x11\x3f\xa9\x8d\x77\xf2\xbb\xce\x88\x9b\xd4\x9f\x88\xdc\x78\x6c\x2b\x06\x33\xb5\x17\xf2\x5f\x1e\x07\x1e\xf4\xec\x36\x89\xc3\x9e\x0f\x20\x1c\xc0\x5a\x09\xb8\x2f\xa3\x7a\x42\x58\xd8\xb4\xf4\x7e\xb3\x7f\xa7\xf9\xa0\x01\x8d\x78\x1c\x9f\x2d\x5a\xba\x7a\x4d\xc7\x24\xa5\x47\xb0\x13\xf3\xcc\x5a\x60\xdc\x99\xb5\xfe\xac\xf8\x0e\x56\x17\xbd\x68\x2d\xaf\x85\x7c\x1a\xe4\x04\xe5\xf4\xfd\xad\xed\x7b\xbb\xb4\x66\xe1\x1f\xc4\xf1\x53\x89\xec\x89\xb1\x5a\x20\x4b\x1f\x13\x08\x13\x60\x8b\x21\xc0\x38\xe0\xee\x38\xd8\xe4\x57\x1a\x5c\x1b\x92\x73\x90\x6f\x6e\x57\x43\xfa\xbe\x63\xec\x1a\xd4\xe2\xcd\x69\x10\x6d\xfe\x1a\x80\x28\xd9\x99\xc2\xb6\xaa\x00\xe3\x00\xd6\x6a\xcb\x0f\xa1\x92\xcf\x5d\x1f\xb1\x60\xc6\x90\x1e\xe8\x42\x2b\x6a\xa4\x89\x0b\x48\x19\xed\xa4\x56\x68\xc9\x9f\x5d\xdf\x0c\x84\x6d\x92\x0f\xc6\x01\xb7\x32\x2a\x73\xb8\xa1\xc0\x65\xd9\x5d\x16\xb3\x91\x9f\xd3\x38\x29\xe8\xb1\x96\x60\xa3\x96\x4c\x33\x8e\x59\x95\xc3\x9f\xd7\x1e\xb3\x74\x16\x16\x8c\x03\x58\xeb\xf1\x8d\xb7\x4d\x0c\x69\x12\x97\x2c\x9c\xc2\x8b\x24\x0e\xaf\x6b\x53\xfa\x33\x5d\x11\xbc\xc5\xe9\x50\x43\xa7\x34\x48\xf3\x55\x17\xb6\x42\x12\x8c\x03\x58\x0b\x74\xe5\x3b\x2d\xb2\x1e\x12\xbe\x9d\xa3\x33\x0f\x1f\x8f\xa5\xb5\xb5\xeb\xdd\x3b\x5e\x70\xff\x23\xfe\x4f\x18\xe3\xde\x68\xb4\x74\x0a\x6e\xd3\xfb\x73\x46\x06\xed\xbc\xdf\xd2\x0f\x22\x47\xd7\x85\x4c\x0c\x6e\x30\xe3\xa3\x89\x90\x8a\x91\x63\x43\xf5\x90\xd1\x8c\xad\x8e\x86\x1d\xe9\x7e\x76\x89\x33\x7d\x52\x5c\x92\xc5\xf6\x7d\xbf\x68\x4e\x8f\xac\x87\x44\xf0\x4f\x3c\x97\xbb\xce\x5e\x8e\x9e\x8e\xf6\xf0\xff\x67\xff\x4f\x78\x7a\x8e\x3e\xb1\xc6\xa5\x00\xcd\xfd\x25\x8e\xe8\xb9\x1a\x5b\x1c\x9b\xe3\x2c\x07\x08\x4b\x79\x86\x8b\x9f\xa9\xbe\x04\x9f\xad\x64\x14\x54\x06\xe9\x36\x32\x92\x2a\x12\x1a\x43\x85\x1b\x33\x5b\xab\x60\xe5\x7f\x8c\x7d\xde\x42\x27\xb7\x7b\x2d\x0b\x0a\x9c\xf0\x84\x6f\x28\x5f\x7f\xf8\x5c\x05\xca\xb1\xdb\x9d\xa1\x1d\xaa\xf9\x28\xd3\x77\x04\x4b\x2f\x06\xcf\xf8\x1f\xcc\x57\xcf\x89\x3b\x68\x59\xec\xd7\xe8\xb1\x5e\x2c\xa5\xdc\x80\xe6\x8d\x87\xbf\xeb\x98\x5c\x57\x3c\x17\xd2\x0d\xb3\xee\x54\x05\x31\x40\x0d\xf9\x50\x5f\x7c\xdc\x32\x9a\xbf\x15\xb4\x6c\xae\x38\x91\xa5\xc5\xbb\x9f\x56\xf8\xf9\xa5\x61\x5e\xc5\x72\x94\xdd\x8a\x3b\xcd\xf8\xfb\x0e\xdf\xc2\x83\x81\x90\x26\x8e\xc0\xc7\x44\x16\xac\xbe\x4d\x05\xaa\x58\xbc\xc8\x7a\x48\x64\xff\xf4\xca\xdb\xd6\xc3\xd1\xce\xd1\xd6\xc6\xc3\xd6\xde\xd1\xd3\xcb\xc3\xef\xbf\xff\x69\xe8\xbf\x13\x0d\xbc\x39\x6b\x3e\x2b\x7f\x0f\xd1\x18\x41\x95\x21\xc3\x95\xcd\xf2\xd6\x0c\x7a\x8c\x51\xc7\x72\x77\x28\x79\xa3\x9b\x7a\x8f\x9f\x23\x32\x5c\x06\x49\xf3\x5c\x17\x5b\x90\x65\x22\xae\x3e\xab\x25\xc2\x62\xb2\x2c\xfc\x39\x13\xba\xb1\xee\xbb\xdc\xe6\xd2\xd2\x84\xdc\xf3\x38\x62\xd9\x50\x77\xd5\x10\x81\xab\x21\xf4\x67\x11\xc3\xe4\xe8\x91\x90\x90\xa0\x79\x96\x7c\xd0\x30\x19\x24\x2d\x29\x56\x64\x3d\x24\xe2\x7f\xfa\xe4\xe9\xe5\xea\x61\x69\x6f\xeb\xe6\xea\x63\xeb\x71\xf1\x4f\x76\xfe\xed\x61\x68\xbb\xc2\xc0\xfb\x5b\x1e\x43\x3e\xac\xaa\x3a\xfb\x6d\x21\x95\x8a\xd3\x97\xb4\x17\xd4\x24\xe5\x74\x1a\xa3\xc7\xf5\xaa\xbc\xbf\x3e\x52\x44\x42\xfe\xcf\x3d\x09\xe9\xff\xfb\x37\x21\xd2\xf9\x7f\x2b\x23\x51\xa2\xeb\xc7\x20\xfd\x37\x44\x2a\xcc\x10\x82\x84\xf2\xc9\x19\xe9\xbf\xfc\x63\x80\x84\xda\xf2\xdf\xfe\x1c\x15\xf5\xdc\x45\xb2\xab\xa0\x0e\xf2\x79\x18\x1c\x27\x22\x60\xc5\x15\xae\x78\x8d\x46\xb5\xe4\x83\xbf\xf1\xb5\x9b\x73\x8f\x39\x9c\xd9\x2b\xf1\xfc\x47\x90\xe8\xcf\xcf\x21\x8e\xf0\x4e\xfa\x7d\x30\x67\x11\x42\x41\xde\xac\xe5\x3d\xaa\x31\xf7\x40\xc8\x2a\x0b\x45\x90\x40\x7b\x65\xa6\x88\xea\xd7\xa1\xc2\x8f\x76\xe4\x3f\x8b\x1a\x26\x4b\x8f\x24\x17\xfe\xcf\x25\xcd\xbe\x7c\x4e\xa1\x27\xa2\x80\x3f\xf4\x0e\x97\xe3\xc6\xd3\x9e\x84\xcf\x8a\xa9\x75\x29\xb7\xc4\xbf\x86\xef\xae\x96\x25\x6e\xef\xe5\xac\x7c\x95\xb8\xf4\xcf\x8f\xbc\x44\x39\xf7\x23\x24\x1e\x06\x77\xf9\xe6\x46\x71\x0f\x98\xe6\xf1\xf2\xf4\x37\xa3\x83\x6d\x47\x72\x12\x5e\x1f\xe6\x87\x1e\x50\x6c\xb3\x68\x8f\x52\xfc\xf3\x23\xf9\x38\xe7\x7e\x24\x62\xc3\xb7\x3b\x26\xa0\xe1\x34\x65\xc2\xf6\x10\xc9\x9f\xc9\xd5\x6e\xe8\x75\xd8\x77\x89\x7b\xa7\xac\x56\xef\x64\xd5\x7a\xf6\x88\x85\xfe\xac\x31\xe1\x48\xc8\xe1\xd2\xc8\xa1\xd0\x30\x59\xa4\x75\x4c\x19\x28\xb2\xd0\x9f\x35\xe8\xdc\x8f\xad\x9d\xfb\x31\xb0\x46\x9d\xfb\xb1\x2f\xff\xf9\x31\xdf\x3f\xfb\x9d\x84\xc9\x85\x22\x23\x21\xff\x73\xad\xff\xd3\xce\x30\x05\xa4\x7f\x1d\x84\xfe\xff\xdc\xf0\xef\x5f\x7c\xf9\xff\xf7\x17\x6b\x17\xfe\xe2\xdf\x9b\xe1\x60\xec\xcd\x7c\x97\x87\x75\x1f\x46\x99\x31\x58\x57\x15\x7c\x27\x3a\xee\x79\x8f\x09\xba\x8a\x42\xd2\x4f\xa0\x8c\x8f\xd5\xa7\xec\xa0\x7a\xc8\x44\xa8\xcd\x14\x2f\xc9\x73\xcb\x1f\x06\xbb\x6e\xba\x5a\xe8\x77\x32\x3d\x8e\xfc\x0a\x41\xd6\x43\xc2\xf9\x67\xb0\x58\x7b\xb8\xde\xf9\xff\xfe\x8b\xff\x9f\xb0\xb6\x83\x53\xe3\x36\x89\xbd\xa3\x03\x97\x28\x82\xde\x39\x8d\x1e\x63\xb6\xf4\xdf\xeb\xfd\x54\xb1\x7b\x29\xa2\x65\x24\xe0\x37\xb9\x11\x34\x2c\x4c\x06\x09\x0d\x3d\x4c\x06\x09\x1d\x9b\xfd\xdf\x0c\xaa\xbc\x57\x47\x75\xde\xeb\xdb\x9d\x6f\x2a\x9f\xbc\x4a\x09\x7c\xcc\xf6\xc0\xd7\x79\x60\xeb\xe8\xe5\xd0\xea\xd3\x71\x2a\x9f\x54\x1c\xa8\x0c\x92\xf5\xbf\x8d\xfe\x4a\xc9\xba\x71\xf7\xf1\xe2\xb8\xf5\x57\x2f\xbd\x75\x2c\x1e\xa9\x3d\xc2\x07\x9f\xa7\xe9\x82\x42\xd4\x6f\x15\x7d\x8e\x88\x7c\xb6\x05\xd5\x43\xc6\xd1\x2a\xea\x0f\x73\x74\x88\xbc\x5c\xb0\xbb\xf0\x73\x97\xc8\x33\xb6\x61\xf5\xe9\xca\xbf\x1f\x7d\xcf\xef\x04\xaf\xca\xbb\xd1\xec\x9b\x2f\x12\x8f\x2e\xd2\x68\xb9\x7d\xa8\x0a\x27\xa0\x4c\x09\x79\x3b\xcd\xa7\xb1\x75\xa8\xf7\x3b\xe7\xc1\x39\x93\xa9\x8d\x97\x37\x0f\x0f\x0c\x2f\x34\xc7\x3f\x6d\x3d\x42\x89\xe9\x93\x48\x2b\xb3\x52\xa5\x7f\x43\xf7\xf4\xc9\xea\xfb\x04\x2f\x88\x09\xdc\x17\x1a\x19\xc4\xdf\x3c\xf0\x83\xf4\xc1\xa8\x6f\x4d\xcc\xcf\x87\x41\x59\x42\xd1\x1c\x61\x77\x7a\xa3\x34\x47\x8c\x33\xc6\x7f\x7f\x72\xe6\x53\x46\xc2\x2a\xf5\xe0\x46\x42\xf0\x7e\x7f\x0e\xe5\x14\xd6\x32\xe9\x15\x28\xac\xbe\x15\x6a\x6b\x16\xc5\x3e\xca\x43\x9f\xad\x69\xff\xd1\x08\x3d\xe1\x5d\x3d\xc7\x4d\xde\x47\x7a\xe7\x37\x77\x70\x97\x48\x22\xc1\xeb\xce\x91\x36\xe6\xb1\x50\x94\x7b\x71\x14\x73\x3f\x17\x79\x4b\x62\x79\xe2\x54\xd7\xf3\xea\x73\x4a\x3d\x9f\xd6\xf3\x73\xe5\x64\xde\xdc\x59\x29\x34\xc9\xaa\xb5\x54\xaa\xbe\x57\x6c\xaa\xfa\x15\x59\xd2\xeb\xbe\x27\xae\xf4\x40\xa8\x69\xbd\x34\xe6\x8e\x39\x05\x4a\xe2\xf9\xf6\x9a\x11\xd1\xd8\xdf\x76\x95\x74\x91\xac\x1f\xa1\x3d\x4e\x22\xa2\x96\xd0\xf8\xf6\xce\x97\x93\xa7\xfe\xf2\xe2\x7e\x75\xd6\xdb\x83\x26\x29\xf3\x3f\xbb\x74\xd1\x32\x48\x36\x32\x48\x36\xa1\x3f\x0c\x59\x90\x98\xb0\x90\x89\xe9\xaf\x19\xbe\x70\x62\x21\xf9\xca\xdc\x97\x79\xa7\xa2\xc8\xd0\x7e\x3e\xde\xa6\x3b\x76\x1f\xe3\x45\x1b\x61\x41\x81\x13\x0b\x52\x27\x6e\x28\x0a\xe5\x7f\x6e\xe2\x28\x46\x7f\x76\x31\xc2\xd1\x90\x01\xaf\x3b\xb2\xfd\x85\x35\xb4\x8a\x81\xc1\x9a\x6f\x03\x4e\xc9\x6e\x1c\x3d\x1e\x64\x6c\x5e\x98\x73\xc4\x64\x40\x73\xbb\x52\x57\x85\x77\x15\xb6\x0b\x3d\x18\x07\x78\x39\x63\xfc\x31\x50\x83\xed\x4f\x22\xbf\xa3\xba\x4a\x76\xd3\x04\x87\x2a\x45\x54\xfe\xde\xce\xf0\xb0\xe9\xb7\x2c\xa9\x59\xad\x5b\x6f\x60\xbb\xe3\x82\x71\x80\xb7\xa8\x74\xc3\x6e\x94\xbe\xe8\xd6\x24\x93\x76\x5d\xdc\x61\xfe\xd1\xc0\x98\x07\xd3\x01\xd8\x55\x84\x6d\x49\x26\xaa\x81\xd7\xbb\x07\x8c\x61\xbb\x9e\x81\x70\x80\xb0\x2e\x66\x5b\x3f\x94\x1f\x8d\x35\x76\x05\x53\xb7\x67\x99\xca\x32\xcc\x08\x17\x24\x6e\x46\x65\x9f\xaa\x39\xa6\x5a\xd1\x93\x28\xb3\x85\xf2\xfc\x19\x17\x2e\x8d\x16\x0a\x95\x45\xbb\x84\x1c\x89\xfc\x67\x36\x0a\x47\xa5\x40\x43\x02\x4c\x37\x44\x79\x9e\xa2\xf8\xeb\x6d\xe4\xd3\xb9\xa2\x79\x5a\x61\x8d\xe7\x93\x9e\x02\x92\xc5\xfd\x41\xcd\x12\x6d\xfe\xbc\xc3\x3d\xe1\x01\x11\xe7\x50\xde\x63\x07\x61\xae\x4b\x9d\x93\x6c\xaf\x62\xa5\x7c\xdc\x6e\xd8\x66\x0c\xd5\xc5\x92\xb7\x48\xeb\xb6\x98\xae\xf7\x4f\xbe\xaf\x7d\x12\x1a\x8e\xfa\x67\x31\xc3\xa5\x4f\xef\x9f\x2f\xce\xab\xa3\xda\xbf\x78\x4c\x89\x4e\xf6\x10\xdf\x92\xe8\xb3\x81\x75\x7b\x3f\x57\x6b\x5f\xe4\xae\xe0\xf2\xb7\x1f\x1b\x91\x66\x0d\x4a\xe7\xd0\x57\xfc\x16\x95\xf9\x8e\x3b\x19\x11\xe8\x65\x38\x10\xb7\xa1\xa8\x94\xe5\xfe\x41\xd6\xf4\x90\xa8\x3d\xb1\x9d\xd9\x95\x5e\xc7\x90\x73\x68\x78\x7d\x22\xbd\xf8\x7d\x7c\xe7\xa0\x69\xac\x75\xc1\xb1\x44\xb9\x3a\x81\x19\x42\x3f\x6f\x9d\xde\x15\x62\xfe\xeb\x7b\x74\x87\x6a\xe7\xd0\xf1\xf4\x44\x52\xfc\x17\x09\x58\x62\xce\x6a\xdc\x05\x22\x7c\x65\x4a\x7b\x41\xda\xe1\x7c\xa7\xef\xe4\xb7\xf7\xec\xfc\xef\x6b\xc6\x9e\x9f\x11\xc9\x83\xce\x86\x9e\x2e\xb5\xd5\xb6\xb1\xdd\x9f\x5b\xd4\x62\xea\xb0\x6a\xd7\x66\x9e\xfb\x22\x85\x91\xad\x63\xb9\x3b\xd5\x70\xea\x7c\xae\x96\x7d\x85\xc1\xf2\x35\xba\xe4\x14\xba\x69\xcf\x53\x8b\xc6\x5b\xec\xd9\x9a\x32\x92\xef\x70\x75\x8c\x71\x1a\xcc\x5e\x93\x11\x9f\x3f\xdd\xa6\xd9\x52\x16\x6d\xb8\x4b\x42\xa8\x2a\xe8\x2a\xbf\xdf\x86\x96\x92\xf8\x4d\xc7\xc1\xb6\xea\xd5\x1c\x94\x6d\xde\x5e\xf7\xee\x0d\xdf\x73\x28\xc5\x0c\x47\x0e\xc5\x75\xb9\x12\x9a\xbb\x76\x38\x71\xdd\x6d\xcb\xd9\xab\x44\xaf\x7c\x08\x9b\x19\x38\x8b\x3c\x6e\x51\xa8\x90\xea\xc3\x7e\x09\x60\x57\x15\xf0\x4b\xc8\xee\xc1\x45\x57\x7d\xe8\x8d\x8a\xe2\x43\x92\xff\xce\xb2\x52\x1e\x45\x24\x39\x9c\x84\x49\x8e\x5a\x6c\x48\xa7\xe0\x19\x7b\x59\xdc\xf9\x04\xce\x60\xde\xba\x93\x6a\x64\xd5\x57\xc8\xe9\x6f\xed\x25\x97\xf6\x1f\xb1\x1d\xf4\x2e\x64\x3a\x2f\x2b\x56\xd3\xba\x53\x53\x86\xae\x9c\x7f\x0f\x21\x1c\xbb\xfc\x85\x72\x42\x88\xd5\x6f\xb0\x26\xb6\xa1\xcf\x08\xab\x32\x35\x4f\x82\xaf\xec\xc3\x03\xff\xaf\xd8\x64\x4b\x7e\xce\xe7\x27\xb3\x6e\x54\x2e\xc7\xa8\xe6\xb5\x26\x4d\xf0\x2b\x27\x2b\xd4\xdf\xa0\x50\xc3\x68\x15\x3f\xbc\x72\x29\x66\x73\xe8\x72\x13\xd5\x55\xe9\x73\x68\x47\xbf\x55\xcc\x47\xcf\xe0\x63\x62\x7a\xeb\xd7\xac\xf8\x1a\x8f\x65\x04\xab\x78\xd9\x9e\x33\x93\x86\xe7\xf4\xf1\xef\x8d\xfe\xa4\x38\x7f\xab\x7c\x75\x30\x3c\x11\x4b\xd9\x59\x7a\xab\xb8\x55\xec\xb9\x7b\x56\x16\xb6\xe1\xdc\x15\x7a\x1e\x3c\x0f\x2a\xae\xab\x33\xa9\x28\xa7\xe7\x50\x34\x4b\x87\xe0\x94\xce\x9d\xe2\xe2\x8f\xfd\x04\xbe\x4e\x74\x55\xb1\x24\xbf\xcb\x44\xcb\x27\x8c\x04\xf0\xc2\x25\xe6\x65\xb9\x7f\x9d\x43\x23\xeb\xeb\x09\x39\xed\x16\xe3\x98\x18\xc8\xf9\xae\xfd\xb8\xfb\x30\x8c\x63\xce\xf1\x63\x86\x41\x9f\xf5\x86\x05\x23\x3f\x46\x15\x43\xe8\x0b\x8c\x3f\xbb\xaa\xff\x6f\xe2\x6d\x2c\xd2\x7f\xde\xc3\xd8\x90\x90\xc3\x16\x50\xa1\x5f\x50\xe8\x6f\x61\xd3\xf4\x4a\x7e\x3b\xbe\xd7\x12\x54\xea\x1d\xb8\x6e\x2d\x6c\x42\x69\xd2\xa9\xbc\x8b\xcc\x19\xc4\x4c\xc0\x26\x27\xf4\xe2\x0e\x14\x09\x89\x12\x89\xfc\xa5\x96\x94\x12\x12\xca\x0f\xe5\xff\xdc\x90\x6f\x22\xa1\x70\x50\xc7\x86\xfe\xbf\xff\x42\xee\xf3\x62\xea\x73\x7c\x4f\x7a\x13\x09\xb5\xe1\x51\x8b\x41\xcf\x67\x8f\x58\x64\xf8\xf8\xd3\x6a\xf1\x8e\x52\xa7\x9c\x74\xdb\xd7\x56\x0b\x28\x0d\x0c\x25\x13\x91\x71\xe8\xb1\x71\x03\x7f\x87\xd9\x3f\x9b\xef\x0c\xa8\xd6\x80\x22\x23\x18\x1f\x05\x3e\xbe\x03\xd7\xbe\x77\x09\xb6\xc1\x3b\x4d\x64\x2b\x41\x4f\xd7\xae\x1c\x05\x2f\x99\xd0\xa4\xbd\x83\x20\x1c\x8e\xfe\x59\xeb\x9e\xcf\x96\x50\x14\x04\xe3\xa3\xc2\xc7\x3f\x51\x52\xad\x2c\xc1\x35\x9c\xa3\x5f\x3b\x61\x79\x70\xc4\xc7\xa3\x9c\x73\x5f\x44\xf2\x77\x99\x6e\xa1\xc1\x0a\xad\xbe\x77\x0e\x0b\x14\x15\xc1\xf8\x68\xf0\xf1\x9d\x16\xd9\xdd\x97\x1e\xd5\x79\xd9\x3f\xcf\x3a\xf4\x58\x36\x73\x58\xf3\x88\x49\x1f\x4b\x53\x28\xbe\x3c\xf3\x32\x6b\x78\xaa\x92\x12\x8a\x86\x60\x7c\x74\xf8\xf8\x82\x5c\x2f\xc6\xf2\x19\x85\xcd\x9a\x65\xc4\x87\x82\xf8\x98\x2a\xcc\x91\xc5\xea\x94\x6a\x54\x28\x31\x2e\xc5\x88\xc7\x1f\x8a\x19\x40\xd1\x11\x8c\x8f\x01\x1f\x9f\x57\xd9\x0c\xed\x75\xb7\xcd\xc1\x65\x2e\xb5\xb0\xf5\x14\xf4\x0f\xe4\x68\x81\x36\x9a\x91\xa8\x99\x71\x0d\x59\x06\x99\x9d\x53\x98\x50\x0c\x04\xe3\x63\xc2\xc7\xa7\x7a\x6b\xda\xc8\x46\xfa\x23\x44\x00\xdb\x52\xe0\x7e\x2e\x09\xae\x6c\xb0\xe6\xa4\xf2\xe5\x4a\x51\xac\xba\x30\xe7\xbc\x50\x4a\x51\x28\x26\x62\xf1\xcf\x06\x0b\xd8\x7d\xe5\x9f\xc1\x82\x05\xdf\x18\xb7\x9f\x59\x2d\x29\xc1\x37\xd9\x1e\xae\x20\x85\x08\x1d\xd2\x36\x57\xc9\x17\xdd\xc3\x14\xee\xbf\x3b\x4c\x38\x17\xbe\x4a\xb2\xc3\x07\xc5\x42\xb0\xb3\xd8\xf0\xf1\x4b\x96\x62\x5e\xd3\x74\x15\x5c\xfe\xe4\xe9\xa8\x22\xe9\x06\x61\xb3\xa6\x77\xbf\x6c\x21\xd7\xef\xc5\x1a\x2d\xbc\x33\xa0\x50\xa5\x01\xc5\x46\x30\x3e\x0e\x7c\xfc\xc3\xd2\x4c\x3b\x8c\xce\x03\x57\x86\x3e\xa4\x0c\x0b\x3e\xce\x05\xa4\xe9\x77\x64\xf7\xaa\xa9\xaa\x69\xad\x3c\x89\x8f\x2a\xa2\xed\xa0\x38\x08\xc6\xc7\x85\x8f\x9f\x7a\x35\xe2\x94\xd4\x70\xb2\x08\xa9\x47\x88\x08\xc5\x79\xe2\xf6\x01\x5b\x22\xcd\x94\xc6\x15\x66\x01\x75\x0c\x2a\x33\xcf\x4f\xe2\x50\x5c\x04\xe3\xe3\xc1\xc7\xd7\x8d\x61\xd4\x42\x33\xad\x6e\x7a\x83\x5d\xd0\x94\x85\x9d\xed\xeb\x8f\x9b\xd0\x7e\x2a\x79\xf3\xed\xce\xaf\x2e\xcd\x85\x43\x6a\x06\x28\x1e\x82\xf1\xf1\xe1\xe3\x6f\x64\x19\x0f\xa0\xb5\x29\x3a\xbe\xac\xef\xd6\x56\xa7\x27\x4d\x0a\xff\xe8\x9c\x4d\xe5\x7e\x23\xb9\x7e\xa1\x55\x88\x48\x27\x97\x10\x8a\x8f\x60\x7c\x02\xf8\xf8\x9b\x1b\x93\x72\x19\x01\x23\x96\xfa\xd4\x4b\x52\x15\xdf\x47\x52\x0a\x89\x7a\x8c\x78\x83\xb9\x0d\xa4\x63\x3d\x3f\xe0\x54\x2c\x1a\x43\x09\x10\x8c\x4f\x08\x1f\xdf\x48\xb7\xe2\x76\xa8\x59\x2a\xa9\x52\x77\xda\x25\x5b\xee\x58\x93\x3a\xd1\x77\x91\x45\xa2\x3b\x7c\x09\xaf\xef\x6d\x0f\xda\xe8\xd2\x42\x09\xff\xb7\xc1\x02\xf6\x64\xfd\x67\xb0\x5c\x82\x6f\x4c\xf1\x71\xb1\xae\x3f\x8e\x00\x7b\x23\x81\x05\x3a\x71\x5b\x0b\xe1\x78\x8b\x02\x0b\x6d\x9e\xbc\x79\x44\x39\x69\x45\x70\x52\x21\x0d\xf4\x12\x82\x9d\x25\x82\x8f\x4f\xad\x66\x54\xd3\x7c\x8d\xc8\xf9\xd0\x40\x20\x9c\x3a\xb0\x5c\x80\xdb\x1d\x9a\xe2\xa0\xdd\x0f\x61\x0d\xc1\x24\xfe\xba\x17\x83\x0b\x25\x42\x30\x3e\x31\x7c\xfc\x82\x2b\x0f\xee\x35\x6f\x7c\xed\xed\xf8\x4a\xc1\x0b\xd9\xe3\x88\xbc\xbc\xa6\x3d\xbe\xb5\x4c\x6d\x12\xe7\x8b\x76\x62\x75\x25\x8c\x0e\x4a\x8c\x60\x7c\x12\xf8\xf8\x91\x2d\xc9\x3f\xb4\x75\x63\x2b\x9f\xde\xdc\xdf\xa7\xdb\x70\x68\x79\x53\x2a\x4a\xf9\xfe\x66\xd6\xd0\x2d\xab\x95\x2e\x39\x7b\x57\x53\x28\x09\x82\xf1\x49\xe1\xe3\x4b\x46\x75\x6f\x41\x69\x35\xde\xef\xf9\x0c\x6e\x7a\xbe\x7a\x6b\x95\x78\x7f\xb9\xda\x18\xe7\x3d\xf9\x92\xe1\xf2\x89\x1b\xb6\x8a\x22\x94\x14\xc1\xf8\x97\xe1\xe3\x8f\xb3\xef\xb0\xee\x56\x0d\x9e\xa8\x1c\xab\xcd\x1a\x1d\x59\x1c\x7d\x51\x23\x1d\x49\xc9\x2e\x9b\xd5\xf4\x53\x28\x81\x12\xaf\x5a\x41\x2f\x23\x18\x9f\x0c\x3e\xfe\xa7\x9a\x8f\x85\x5f\x90\x43\x88\xe2\x46\xfb\x96\x66\xf3\x48\x8d\x79\xd1\xef\x32\x1d\xa3\xfa\x4b\xb1\x08\x45\xe3\x33\xe7\x34\x1b\x43\xc9\x10\x8c\x4f\x0e\x1f\x9f\x28\x52\x27\x29\x34\xa3\x2f\x73\x5d\x16\xdb\x2e\xef\x8d\xbf\xba\x88\x06\xb3\xd0\x03\x7e\x95\x5a\xed\xa3\xd3\x7b\xe4\xdf\xbf\xf2\x43\xc9\x11\x8b\xdf\x88\xf1\x67\xef\x96\xff\x0c\x16\x08\x04\xbe\x35\x2b\x5c\x0a\x6d\x9e\x05\xd3\x85\xd5\x2e\xf2\x14\x92\xb4\xfe\xd7\x1f\xb2\x3b\x5a\x35\xec\xe4\x7a\x7f\x8a\x09\x7f\x16\xfc\xee\x85\x2e\x14\x02\x41\xb0\xbb\x10\x0a\x78\x05\x6e\x82\xf7\x48\x85\x90\xf2\xa9\x9b\xeb\x02\xb5\x4f\x9e\xf6\x0d\xea\x75\xf4\xde\x5d\xce\x10\x7a\x79\xc4\xa2\xc9\xee\x53\xc0\xc5\x00\x85\x50\x20\xaa\x40\x09\xaf\xf0\x6d\x4e\x67\xe3\x28\xad\x53\x2e\xc0\xe1\x90\x25\xe1\x6e\xcd\xca\x6b\xea\x3b\x4c\xc2\xcb\xed\x9d\xdc\x0f\x2a\x19\x51\x87\xa3\xae\x41\x21\x94\x88\x2a\x50\xc1\x2b\x98\x9f\x96\xa5\x61\x12\x43\xd4\x1b\x7e\xf1\x4e\x70\xcf\x61\xd5\xd5\x54\x16\xd1\xf8\x91\xe9\xf5\x88\x07\x33\xea\x9c\x9e\xac\xb1\x40\x21\x54\x88\x2a\x50\xc3\x2b\x18\x77\xd7\x38\x4d\x63\xe9\xac\x7e\xb3\x4e\x30\xac\x2d\x61\x57\x55\xde\xe3\xeb\x2c\x24\xfc\x49\x6c\x94\x44\xdf\x51\xf9\x89\x9a\x17\x0a\xa1\x46\x54\x81\x06\x5e\xa1\xf4\xc5\x71\x8d\xdc\x11\x8e\x41\x7a\x99\x99\x29\x57\x6a\x9d\xae\x8e\x69\x7f\xfe\xfe\x4c\x08\xdd\xe3\x17\xc5\x14\x93\x35\xda\xdc\x50\x08\x0d\xa2\x0a\xb4\xf0\x0a\xf1\xb7\xbf\x8f\xfb\xe3\xd2\xa6\x93\xf6\xc5\x7f\x70\x53\x1d\xf1\x60\x9d\xcc\x73\x5a\x75\xc5\x1e\xe0\x17\xb5\x56\xf8\xf8\xcc\xd9\x16\x0a\xa1\x45\x54\x81\x0e\x5e\xe1\xb8\x02\xf7\xd3\x2d\xaa\x14\x0c\x77\x45\xac\xde\x84\x23\xd6\x03\x6e\x1f\xb3\x27\x55\x38\xeb\x32\x55\x89\x2e\x91\xd7\x20\x27\x96\x50\x08\xdd\xff\x36\x78\xc0\xbe\xb6\xfe\x1d\x3c\xf4\xf0\xcd\x09\x5e\x12\x19\xa7\x98\x7b\x8d\x9b\xbd\x20\x94\x7a\x50\x4f\x06\x99\xc1\x37\xd4\xfa\xde\x13\xb9\x6b\x2f\x5a\x7c\x57\xa3\x5f\x8e\x17\x0a\xa1\x47\xb4\xc3\x57\xe0\x15\x46\x45\xcb\x22\x3b\xb4\x18\xe3\x34\x6f\x8a\xa3\x7d\x90\xdc\x30\x3e\xaa\xbf\xf5\x63\xf7\x88\x0d\x37\xe4\x77\x82\xd5\xa3\x7e\x26\x42\x28\xe4\x0a\xa2\x0a\x0c\x80\x17\xf5\x90\xf9\xb7\x07\x2f\xbe\xde\xfe\xee\x6f\x87\xab\x28\xc4\x97\x5c\xd8\x44\x9c\x74\xc7\x70\xbb\x8e\x4f\xa7\x5b\xcc\x78\x24\x48\x01\x0a\x61\x40\x54\x81\x11\x5e\xe1\x00\x47\x67\x44\x43\x82\x6d\x07\xea\x8d\xdf\x25\x38\x55\xea\xbd\x88\x9d\x27\x33\x10\xa4\xb5\x40\x68\xa3\x25\x31\x2a\x62\x62\x00\x85\x30\x22\xaa\xc0\x04\xaf\xf0\xd8\x3a\x5f\xf9\x8b\xef\x44\xb8\x5e\xf5\x8c\x91\x8e\x13\x41\xb4\x5b\x86\xfb\xf0\x4e\x60\x17\x0a\xb9\x01\x59\xbb\xe4\x2f\xee\xab\x50\x08\x13\xa2\x0a\xcc\xf0\x0a\x4f\x04\x1f\xb3\x2d\xd1\xcd\x3a\x34\x28\x6d\x1c\x3b\x45\x8d\x1e\x92\x3e\x59\xd9\x49\x9d\xd8\x8d\x6f\x4f\x17\xc4\x30\x8a\xad\x17\x84\x42\x98\x11\x55\x60\x81\x57\x48\x17\xdd\x38\xfe\x15\xe6\x6b\x61\xc3\xb8\xbc\xe0\x10\x9e\x90\xa0\x70\xe3\x73\x25\x52\x3d\xfa\x25\xa7\xb2\x6b\x37\x7b\x9a\x69\x55\xa1\x10\x16\x44\x15\xae\xc2\x2b\x7c\xef\x30\x5e\xb5\x48\xee\xd8\x9b\xa7\xdb\x91\x4a\xd8\x5b\xf9\xe9\x11\xf3\x50\x93\xc7\x67\x41\xd6\xe5\x61\x95\x8e\x46\xbc\x3f\x2b\x14\x72\xf5\x7f\x1b\x3c\x60\xf9\x87\x7f\x07\x0f\x2b\x7c\x73\xdc\x17\x2a\x16\x93\x1d\xd5\x3a\xc8\xbe\x21\x6b\x1f\x97\xa2\xd3\xe7\x3b\x28\x49\x7e\xce\xcd\x10\xfa\x98\x8d\xc2\xba\x3b\x82\xa7\x04\x85\xb0\x22\xda\x61\x36\x78\x85\x70\xa6\xfb\x29\x83\x4c\xa7\x99\x37\x78\x87\x85\x1f\xe8\x29\x51\x26\x1d\x4a\x42\xd2\xa9\xbe\x4f\x15\x13\x3e\x3b\x0e\x59\x79\x26\x00\x85\xb0\x21\xaa\xc0\x0e\xaf\xe0\x4b\xe0\xfa\x35\xa4\xdf\x8f\x75\x59\x51\x26\xe1\x30\x66\x73\x57\x20\x89\x61\x7a\x27\x86\x73\x57\x4d\x6f\x42\x5f\xae\xba\x45\x05\x0a\x61\x47\x54\x81\x03\x5e\x81\x84\xbd\xb9\xac\x30\x23\x5e\x98\x63\xdd\xe4\x27\xa5\xd4\x70\xc8\x98\xe6\xd8\xdc\xcb\x12\x7c\xae\x6d\x33\xee\xa0\xef\xe2\x3b\x57\xa0\x10\x0e\x44\x15\x38\x01\x1f\x67\xbb\xfd\x90\x9a\xe7\x69\x0b\x4f\x2a\x54\x02\x23\x42\xbd\x7f\x61\xce\xf1\xeb\x98\x7e\x41\x5a\xa5\x50\x09\x43\x0b\xb3\x3c\x36\x85\x42\x38\x11\x55\xe0\x82\x57\x10\xd8\xc8\xd9\xf4\xf1\x4e\x7b\xe8\xa3\xeb\x7b\x12\x2c\x1b\xd3\x18\xe8\x4c\x86\xc1\x5b\x9b\x70\x63\x1a\x79\x94\x86\xa6\xa4\xc6\x05\x0a\xe1\x42\x54\x81\x1b\x5e\xe1\xc1\xfc\x6c\xf4\x10\x6d\xff\x7b\xfe\x42\xf6\x0a\xc3\x2a\x64\xc3\xd3\xf7\xcb\x05\xbf\x0b\x1f\x51\x14\x0c\x04\x5f\x5f\xba\x75\xac\x0f\x85\x70\x23\xaa\xc0\x03\xaf\xf0\xb5\x95\xae\xb6\x11\x5b\xc1\x77\x9a\x8a\x84\x41\x4c\xa0\x93\x5e\xb9\xcf\x45\xd0\x56\xe4\xcd\x25\x85\x98\xfa\x3e\xe6\x7b\x98\x97\xa1\x10\x9e\xff\x6d\xf0\x80\x65\xe4\xfe\x1d\x3c\xbc\xf0\xcd\xa1\x53\x09\xaa\xdf\xab\xe7\xac\x1d\x9b\x8e\x4d\x75\x9d\x76\x34\xb1\xb3\xfd\x9c\x83\x3d\x80\x5b\x79\x3f\xf2\x95\x4d\x2f\x81\xf9\x15\x28\x84\x17\xd1\x0e\xf3\xc1\x2b\x90\xe6\x28\x12\x2b\xbc\xe4\xa1\xee\xaf\x5b\xa4\x12\x43\x7f\xc0\xff\xd0\x88\x3f\x0d\x8a\xd3\x62\x8c\xf7\x65\xe9\xb3\x45\xa4\x8d\x05\x14\xc2\x87\xa8\x02\x3f\xbc\xc2\x8f\x52\xeb\x2c\xe1\x97\x2f\x3c\x8c\xbf\x6a\x7d\xa4\x75\x6d\x99\x5f\x42\xfa\x68\xe8\x24\x85\xc7\x18\x24\x3f\x5a\x30\xcb\xe5\x8a\x03\x85\xf0\x23\xaa\x20\x00\xaf\xc0\x12\x96\xe9\x76\xa4\x37\xf8\xa2\xee\x76\x1b\x59\xbb\xdd\xc2\x64\x20\x0b\xbd\x12\x01\x37\xcf\xdd\x2d\xb1\xeb\xa3\xb2\xe1\x14\x8a\x50\x88\x00\xa2\x0a\xd7\x00\x6f\x00\x98\x93\x76\xf2\xa6\x61\xc1\x66\x8b\x8d\xaf\x2a\xe8\xd0\x04\xa6\x9c\xbb\x79\x9a\x44\xe6\x8b\xee\xee\xcb\xd0\x9c\x7a\x15\xe2\x40\x21\xd7\x10\x55\x10\x84\x57\xc8\x0a\x7f\x95\x17\xdd\xea\xa9\xb4\xbf\x35\xf8\xfd\x67\x5b\x54\xff\x30\xa1\x89\xc3\xd4\xee\x62\x21\x5f\xd8\x0f\x5c\x3e\xc3\x04\x4a\x28\x44\x10\x51\x05\x21\x78\x05\x7b\xa4\x3c\xee\x2b\x8a\xda\xaf\x88\xd8\x9f\xd5\xd3\x35\x67\xc4\x6e\x50\x08\xbb\x70\x26\x34\x36\x78\x3c\x9b\x91\xa2\x59\x3a\xbc\x0e\x85\x08\x21\xaa\x20\x0c\xaf\x80\x93\xdc\xd2\x60\x09\x51\xca\xce\xad\x13\x66\xe6\xf4\x16\xc2\xc3\x54\x3d\xda\x91\xc2\xb9\xf5\xdb\x33\xb0\xf9\x88\x34\x3a\x58\x17\x0a\x11\xfe\xdf\x06\x0f\x58\x8e\xfa\xdf\xc1\x23\x02\xdf\x1c\xca\xf8\xdb\x44\x76\xc5\x0e\xca\xa5\x93\xba\xc2\xed\x8c\xaf\x4c\x37\xef\xb4\xf4\x54\x4a\x91\x19\x8e\x5f\x22\x08\xc0\xf0\xc0\xa3\x80\x42\x44\x10\xed\xb0\x28\xbc\x82\xff\x1b\x8a\x52\xde\x19\x09\x53\x05\x4b\xbb\xa1\xab\x1c\xad\xa4\xb9\x7e\x49\x18\x12\xea\x26\xc2\x1d\x79\x57\x27\x6c\x1e\x77\xda\x40\x21\xa2\x88\x2a\x5c\x87\x57\x48\x13\x2b\x14\x27\x78\xbb\x14\x6b\x9c\x52\xb0\x9b\xa5\x53\x49\x21\xe3\xa8\xa7\x4a\x83\xff\xcb\x6b\x01\x9d\x65\x75\xf3\xde\x7b\x2b\x28\xe4\x3a\xa2\x0a\x62\xf0\x0a\x3b\x7c\x97\x56\xf7\xa7\xd2\x65\x1a\xd0\x7f\x9a\x61\x3f\xf5\xdf\xff\xa5\x4d\xc2\x56\xf1\xd6\xb0\x35\x07\xe7\xe5\xbd\x24\x64\x52\x74\x28\x44\x0c\x51\x85\x1b\xf0\x0a\xda\xfd\x7a\x9f\xb7\x56\xb0\xd0\x98\x15\xb6\x0b\xa9\x70\x0b\xf4\x3e\x8d\xa2\xd1\xd7\x0d\x52\x39\xa0\x2b\xbd\x71\x3d\x8c\x3d\x62\x80\x42\x6e\x20\xaa\x20\x0e\xaf\xf0\x90\xd7\x2e\x7b\x2e\x3e\xda\xd9\x5a\x44\x24\x25\xc6\xa1\xc6\x74\x30\xdf\x03\xad\x71\x05\xf7\xda\x8b\xcc\x3e\x72\xf6\x93\x19\x35\x28\x44\x1c\x51\x05\x09\x78\x85\xa7\x5d\xd9\x78\x45\x07\xed\xcb\xfa\xb2\xea\xc3\x7b\x6c\x0f\x3d\x8a\xde\xc7\xcf\x5e\xd5\x9d\xc6\xf8\x92\xd3\x35\x30\x4f\x4c\xcf\x09\x85\x48\x20\xaa\x20\x09\xf8\xf6\xcc\xdb\xfc\xad\x7d\x30\x1c\x82\x51\x28\x2c\xb2\x4e\x56\x75\xbf\x8e\xa8\x6d\x12\x6b\xee\xf6\x00\x79\xde\x03\x6a\xee\xdf\x23\x84\x50\x88\x24\x62\x0a\x67\xc5\x33\xb0\x3a\x23\xb0\x78\xd6\xaa\x60\x13\x64\xc0\xb2\x51\xb9\x2f\xb9\x79\x37\xbd\xfb\x8b\x7c\x8a\xf2\xc1\x4c\x6d\xed\x66\x07\x8d\xc8\x8a\x2b\x75\xc5\xf9\xaa\x20\x99\x8f\x51\x32\xa5\x73\xe9\xb1\x8a\xc9\x30\x84\x9f\x2d\x4a\x32\x72\xbf\xaf\xce\x2e\xa6\x96\x03\xfb\x0b\x51\xab\x1d\x9d\x91\xdc\x39\x94\x41\xd3\xee\xda\x4e\x61\xfe\xcc\xb7\x9f\x8f\x59\x58\xb3\x6e\x9d\x88\xed\xbc\xbb\xc4\x1d\x97\x4a\xc2\x1d\xce\x34\x74\x93\x92\x2f\xfd\x1c\xfa\x3e\xb8\xfd\xe1\xb5\xdf\x33\xe4\x75\x4a\x24\x3c\x5a\xe6\x76\x74\x49\x56\x5a\x2b\x3c\xcc\x15\x33\x56\x57\x5a\x51\x8a\x4e\xd0\xbc\xce\xa1\x65\x1b\x42\x4e\xca\x84\xbb\x39\x39\x46\xad\x1a\xf1\xcf\x29\x4d\x29\x82\x85\x73\x6b\x4d\x84\x6e\x30\xf2\xc7\xfa\x26\x88\xd6\xa0\x9d\x43\xcb\xbf\x7e\xd3\x26\xb2\x35\x3c\x1a\xcc\xc1\x35\xcb\xc7\xb9\x47\x4a\xce\x4e\xef\x9b\xf5\xfd\x96\x60\x9a\x28\x1b\x0f\x86\x43\x4f\xfd\xf9\xea\x5d\x69\x0f\x8a\x74\x98\x9b\x7f\x7d\x7a\xe0\x9d\xdb\x2b\xdd\x11\x97\xee\xfd\x32\xb0\x38\x24\x3f\x1a\x7f\xb5\x63\x03\x61\xf3\xc4\x38\x87\x7e\xb8\x56\x5b\x37\xbd\x32\xf2\xfc\x4d\xa6\xdd\xe0\xb5\x9b\x7a\xef\x25\x71\x05\x79\xf4\x2b\x6c\x71\x75\x56\xc5\xc9\x7a\x33\x5d\x13\x43\xcf\xee\x60\x60\x57\xf5\xdf\x3b\x98\x14\xbc\x27\x58\x91\x50\x7f\x4f\xd7\xf5\x8b\xd8\x1a\xfb\x36\xa7\x8d\x6f\x68\xfb\x0b\x97\x5a\xa1\x69\xf9\x45\x70\xa9\x64\x1a\xad\xfc\x32\xd7\x81\x42\xa4\x10\x75\x9d\x34\xbc\xc2\x6e\x37\x29\x21\x2d\xc5\x7b\xd6\x9b\x64\x79\x43\x65\xef\xab\x76\x99\x42\x06\x5b\x89\xb4\x65\x1e\x2f\xcd\xe9\x0e\x8f\xbe\x6e\x45\x81\x42\xa4\x11\x55\x90\x81\x57\xe8\x7f\x41\x7f\xba\xe7\xc8\xa4\x3e\x5c\x54\xd3\x92\x41\x7a\x7f\xe6\x45\xa0\x66\xc5\x33\xa9\xb1\x0f\x58\xd4\x85\xd2\x45\x9c\x57\x95\xa1\x10\x19\x44\x15\x64\xe1\x15\x5c\xec\x1f\x73\xe5\x28\x2b\x65\x4c\xde\xda\xc5\xf8\x5e\xa9\x71\x53\x38\x2f\x8d\x88\xbe\xfe\xe6\xeb\xbc\x51\xd4\x89\x3c\x2e\x52\x1a\x28\x44\x16\x51\x05\x39\x78\x05\x95\xf5\x6e\xfd\xda\xba\x84\xce\xb9\xbe\xa0\x4d\xf4\x88\x1e\xbb\xf7\xc4\x79\xa8\x1a\xc5\x24\x3e\x84\x74\x23\x81\xa9\xca\x97\x31\xa0\x10\x39\x44\x15\xe4\xe1\x15\x5e\x90\xe6\x20\x91\xb6\x7c\xd3\xe9\xdc\x15\xf1\xfd\xfc\xb4\xac\xef\x50\xca\xf8\xf6\xb1\x0e\x5a\x6e\x47\xf6\xf4\x50\xd8\x80\x00\x19\x14\x22\x8f\xa8\x82\x02\xbc\x42\x1d\xf6\xbb\x6f\x09\xed\x1b\x9c\x49\x7c\x98\x41\x21\xc8\xe1\x5a\x3b\xfa\x26\xb8\x57\x13\x7b\x96\xd1\x3d\x36\x4a\xa7\xa2\x7e\xe9\x42\x21\x0a\x88\x2a\x28\xc2\x2b\xbc\x2f\x76\x93\x29\x2c\x89\xb0\xbb\x2a\x17\x85\x66\x98\x14\xef\x30\x8e\xc4\x4f\x4f\x3a\x46\xd4\x72\x87\x80\xb5\xa5\xb2\x06\x97\x08\x0a\x51\xfc\xdf\x1e\xff\x60\xf7\x99\x7f\x07\x8f\x12\x7c\x73\xb8\xa8\xfc\xba\x13\x8a\xb4\x5a\x8a\x5a\x5b\x79\x9f\x45\xca\xe5\xbf\xf3\xac\x5f\x22\x8b\xd2\x28\xdb\xca\xf6\xa7\xa2\x47\x6a\x20\x86\x42\x94\x10\xed\xf0\x4d\xc0\x25\x95\x8b\x97\xb7\xc6\xcc\x4c\xc8\x9f\x4b\xf0\xd7\x49\x73\xd2\x5b\xb5\x39\x40\xbb\x5b\xae\xd6\x1c\x26\xa4\x7f\x67\xb3\x7e\x4b\x16\x0a\xb9\x89\xa8\x82\x32\xa0\xfc\x39\xea\xb2\x8a\xc9\xc5\x5e\xf5\x64\x31\xe4\x80\xbc\x8f\x80\x9a\x6e\x1e\x75\xf4\x0b\x1e\xe6\x5d\xfd\x8f\xb7\xd1\x85\x1f\x79\x5b\x40\x21\xca\x88\x2a\xa8\x00\x32\x4f\x9d\xad\xb6\x02\xe3\x16\x43\x0b\x79\x9f\x4d\x32\xe2\xaa\xda\x17\x69\x21\x21\xee\x87\xc8\x4d\xd6\x3d\xb4\xcd\x31\xaf\x8c\x79\xa1\x10\x15\x44\x15\x54\xe1\x15\xb0\x7d\x55\x82\x99\x72\x74\x0e\x5f\xde\xf1\x1d\x6e\x8a\x44\xdd\xe0\xa4\x68\x63\x97\x55\xd9\x9e\x7a\x9c\x13\xe5\x10\xfe\xb4\x85\x1d\x0a\x51\x45\x54\x41\x0d\xf0\x66\x5b\x12\x96\x7b\x72\x60\xbf\x75\xfb\x79\x60\x14\x8b\x99\x7b\x85\x77\x34\xaf\x0f\x49\x6e\xfa\x77\xdc\x18\xcc\x77\xb4\x41\xb3\x6e\x50\x88\x1a\xa2\x0a\xea\xf0\x0a\x5b\x25\x51\x71\x28\x8c\xd9\xf2\xb9\x71\xcc\x11\xbd\xc5\x1f\x43\x28\x4f\x77\x6b\xbb\x27\x43\xd9\x2b\x99\x4d\x30\xfb\x1c\x6b\xb5\xa1\x10\x75\x44\x15\x34\xe0\x15\x4c\xd2\x71\xca\xb4\xb0\x2a\x0f\xcb\x49\xee\x7f\x67\x5a\x42\x46\x21\x30\xe3\xca\xe8\x12\x50\xf4\x79\x9e\x5d\x82\x9a\x6b\x70\xc3\x1e\x0a\xd1\xf8\xdf\x06\x0f\xd8\x93\xf7\xdf\xc1\xa3\x09\xdf\x9c\x16\xc6\x11\xb9\xf8\x97\x38\xf7\x6c\xe4\x54\xbb\x7d\x3e\x7a\xbb\x9c\x2e\x60\x46\x3f\xbb\xf7\xb2\xeb\x68\x7c\x3a\x2d\x46\xd4\xda\x04\x0a\xd1\x44\xb4\xc3\x5a\x80\xac\xcd\x08\x4e\x30\x27\xe7\x42\x58\x0d\x13\x5e\xbd\xc9\xf1\x48\x05\x6f\xa2\x86\x4e\x46\xa7\xc5\xae\x7c\xbd\x99\x96\x1b\x12\x29\x15\x14\xa2\x85\xa8\x82\x36\xbc\x02\xa3\x01\xdf\x4f\x85\x70\x5a\x8e\x63\x7a\x19\xf4\xb7\xc8\xb7\x9a\xc4\xa5\xbe\xbf\xf5\x0a\xa7\xaa\x24\xbb\x9e\xac\xb2\xba\xa2\xc2\x07\x85\x68\x23\xaa\xa0\x03\x78\x7a\x5e\x61\xdd\x48\x6e\x40\x1b\x51\xf1\x76\x15\xa2\xcf\xc1\x31\x76\x92\x51\xd3\x96\x5d\xc2\xa7\xe1\x27\x48\x40\x6d\xba\xf1\x0a\x07\x0a\xd1\x41\x54\x41\x17\x5e\x41\xf1\x23\x7a\xaa\xe7\x78\x67\xb9\xce\x4f\xb1\x9a\x42\xb1\x19\x11\x9f\x1f\xd8\xf2\x24\x3b\x77\x87\x0f\xbd\x4b\xcd\xc3\x8b\x3e\x7b\x40\x21\xba\x88\x2a\xe8\xc1\x2b\x94\x33\xd6\xaf\x52\xc5\x41\xf5\x2c\x18\x22\xab\x50\x78\x83\xa2\x8a\xe3\x2b\xed\xd9\x76\x70\x86\x86\xfb\x88\x75\x5f\xd0\x7f\x77\x86\x42\xf4\x10\x55\xd0\x87\x57\xc8\x1f\x3c\x4c\xb5\xa1\x11\x7c\xf0\x44\x14\xef\x73\x80\xd3\x41\x9c\x60\xb2\x68\x70\xcc\x5d\x0f\x6b\x79\xb4\x6d\xc2\x36\x5b\x5a\x0b\x28\x44\x1f\x51\x05\x03\x78\x85\x61\x8e\x98\xa1\x21\xf5\x2d\x9f\x54\xd7\x6b\xca\xf9\x4b\x3c\x4d\x33\x76\xfe\xbd\x21\xce\xf4\xb1\x52\x83\x69\x1a\x8e\xec\xa1\x86\x50\x88\xc1\xff\x36\x78\xc0\xde\x45\xff\x1d\x3c\x86\x80\x2c\x32\xa6\xec\x78\x25\x84\x0a\xdb\x7b\xc6\x8d\x12\x49\x6a\x15\xdb\x51\xbd\xf2\xb1\x4f\xc5\x5b\x5e\x28\xe5\x18\x6a\xb6\x91\xa3\x14\x14\x62\x88\x68\x87\x8d\x00\x05\x92\xf2\x43\xec\x86\x9e\xa1\xba\xdc\x1d\xcd\x7d\xb6\xfb\x4f\x35\x55\xdd\x8a\x7e\xa8\xaf\x57\x7a\x65\x79\x60\xd5\x91\xa6\xed\x89\x41\x21\x46\x88\x2a\x18\xc3\x2b\xd0\xc7\x5e\xbf\x75\x87\x94\xdb\xcb\xcc\x99\x1c\xb7\x3b\xff\xa1\x5a\x5a\xd2\x5d\xe2\xef\xca\x1a\x6f\x62\x51\x6c\xac\xee\x75\xef\x1b\x40\x21\xc6\x88\x2a\x98\xc0\x2b\xfc\x0c\x7d\xef\xea\x5d\xdf\x28\xe0\x91\x4b\xf3\x72\x41\x19\x9b\xa8\x73\x30\x43\x57\xd3\x94\x5d\x41\x19\x29\x48\x0e\x59\x4d\x9f\x19\x0a\x31\x41\x54\xc1\x14\x5e\xe1\xae\xcd\x5b\xe5\x9e\xef\xc3\x5b\xf9\xb7\xe5\x55\xa6\x02\xf1\xf3\x33\x5e\xbd\x4c\x8a\x71\x91\x76\x66\x94\xbb\x9f\xdb\xc6\x9d\x45\x0d\x85\x98\x22\xaa\x70\x0b\x50\x92\x7c\x77\xbc\x4a\x1a\x80\x3a\x73\xda\xde\x80\xd7\xe8\x7d\xb4\x8a\xfa\xed\xcd\x0f\xd1\xfa\x13\xc1\xd3\x49\x66\xde\x92\xc0\xbd\x2b\x50\xc8\x2d\x44\x15\xcc\xe0\x15\x18\x58\x35\x69\x0b\x8e\xbf\x74\x2b\xdc\xa6\xbb\xcc\x83\x86\x2c\xba\xf2\x84\x3d\x7b\xce\xab\xb1\x9b\x8e\xe0\x78\x4c\xd1\x7f\x86\x12\x0a\x31\x43\x54\xc1\x1c\x30\x51\xe0\x7a\x57\xcf\xf2\x50\xbb\xc7\x08\x26\x49\x4b\x6b\xa1\xbc\xb8\x8b\xb1\x72\x3d\x3d\xde\x62\x00\xb9\xc6\xed\x2b\xfa\x26\x36\xe4\x50\x88\xf9\xff\x36\x78\xc0\xbe\xce\xfe\x1d\x3c\x16\xf0\xcd\xf1\xc6\x58\xe2\x9d\x7d\x26\xaf\x13\x7d\x4f\x1d\x85\xd4\xfc\x31\xea\x78\xbf\x74\xf9\xa7\xbe\x0d\x9e\x91\x2f\x7b\x48\x01\x46\x77\x1c\xa0\x10\x0b\x44\x3b\x6c\x09\xaf\xb0\xee\xd3\xa2\xf5\xbc\x72\xde\x82\x40\x36\x3e\xfd\x3b\xc6\xf8\x5a\x61\x8a\x8c\x93\x53\xf7\xf3\x57\x37\x44\x38\x6d\xd9\x7e\x40\xae\x42\x21\x96\x88\x2a\x58\xc1\x2b\x84\x0c\xe4\x65\xed\xbb\x64\x96\x4f\x73\xf2\x36\x38\xdb\xde\x08\x22\x5d\x4b\xd4\x09\xed\x68\x1e\x4f\x38\x92\x7c\x66\x72\x88\x6e\x08\x85\x58\x21\xaa\x60\x0d\xaf\x50\x15\xdb\x39\x07\x25\x10\x09\x7f\xf8\x3c\x62\xa4\x30\xd6\xcc\x2e\x8f\xfe\xc0\xa8\xa6\xd9\xee\x36\xb9\x45\xd4\x43\x8e\x07\x99\x78\x50\x88\x35\xa2\x0a\x36\xf0\x0a\x14\xea\x05\x0e\xd5\x86\xbe\xc9\xe9\x47\x4f\xd3\x26\x1e\x29\x6e\x2c\x5a\x8c\x39\x49\xf9\xac\xf2\x6a\x4f\x9c\x30\xde\x20\x7f\x86\x02\x85\xd8\x20\xaa\x60\x0b\xf8\x5e\xb0\xd5\x47\xfe\xe8\x5b\xd1\x4b\xc5\x15\x4b\x2e\xb8\xe9\xd6\x90\x2b\x3f\xd4\xd2\x43\xd0\x31\xa2\xf4\x8c\x86\xe3\xfe\x51\xa5\x1a\x14\x62\x8b\xa8\x82\x1d\xbc\x82\x1c\xfa\xfb\x81\x62\xb6\xd2\xd6\x8f\x46\x10\x5a\x81\xbb\xda\x27\x77\x4e\x69\xd0\xbb\x92\xd4\xbb\x5a\x84\x39\x7e\x3c\x20\xbc\xaa\x09\x85\xd8\x21\xaa\x60\x0f\xaf\x80\x91\x20\x6c\x39\xba\xcc\xce\xfc\xf9\xcd\xf0\xaf\x9e\x5e\xcd\xe7\x8a\x8e\xf1\xe2\xb1\x8a\xa9\xe2\xb8\x53\xf7\x77\x3a\x3d\xd8\xd1\xa0\x10\xfb\xff\x6d\xf0\x80\xe5\x2b\xfe\x1d\x3c\x0e\xf0\xcd\x09\xf5\x62\x42\x1e\x67\xd6\x78\x2d\x3f\x71\xaf\x41\xe4\xa8\x99\x68\xc6\xa4\x3d\xc7\xe8\x52\xbc\xe5\x7c\xaf\x82\xcb\x41\xfc\x0a\x05\x14\xe2\x80\x68\x87\x1d\x01\xe5\xbc\x28\x02\xe1\x2d\xac\xab\x2b\x61\x32\x6d\x62\x6b\x7c\x5d\x57\x23\x74\x33\x55\x6f\xc5\x95\xc9\xdf\xf0\x23\x5d\xea\xea\x79\x41\x02\x85\x38\x22\xaa\x70\x1b\x5e\xa1\x4b\xfa\xc9\x9b\x24\xeb\xec\x84\x40\xf2\x9c\x80\x4b\x4b\xad\x85\x6a\x56\x2e\x95\xf9\x76\x37\x08\x1d\xaa\xf2\xfa\x23\x2c\x2b\xf8\xa1\x90\xdb\x88\x2a\x38\x01\xb2\xf9\x64\x9b\x8e\x10\xe3\x40\xc5\xf4\xd8\xd1\xe0\x27\xe2\x4c\xd8\xdf\xfa\x74\xb7\x8f\xf1\x8a\xaa\x3d\x05\xbd\x49\x97\x0c\x31\xcc\xa1\x10\x27\x44\x15\x9c\xe1\x15\x8e\x5a\xb8\xb9\xe9\x7f\xa1\x96\x85\xec\x24\xa7\xa3\xf0\x6a\x56\x8c\x0d\xee\x77\x6c\xa6\x1f\xdc\x0c\x21\xb1\x63\x24\x45\x5b\xd0\x84\x42\x9c\x11\x55\x70\x81\x57\xa8\x3f\x3e\xa9\xcd\xeb\x6f\x59\xd6\xa5\xe1\x1b\xe9\x7d\x64\xc2\x55\x41\x70\xdd\x4e\x1a\xb9\xcf\x25\x92\x1b\x6f\x59\x6d\xe3\x21\x01\x14\xe2\x82\xa8\xc2\x1d\x40\xda\x96\xa2\x20\xb8\x78\xdf\xfe\xf3\x95\x7e\x59\x16\x3a\x49\x81\xfe\x7e\xb1\x95\xa1\xcf\x4c\x07\x9f\x6c\x04\x53\x24\xe6\x27\xf7\x28\xa1\x90\x3b\x88\x2a\xb8\xc2\x2b\xf8\x29\xda\xfa\x67\x20\xb5\xe6\xf7\xbe\xcc\xe7\xd2\x4b\x19\x50\x8f\x56\x6e\xe0\x67\x93\xba\x3a\x02\x1d\xa9\x74\x8d\x18\xd0\xf3\x80\x42\x5c\xff\xc7\x39\x52\x20\x19\xbc\x7f\x07\x8f\x1b\x7c\x73\x9a\xee\xa6\x09\x62\x08\xe3\x9b\x86\x95\x26\x77\x49\x69\x07\x7d\xdc\xee\xa7\x18\xcd\x5a\x3e\xbd\xbe\xc1\xe3\xc6\xff\x73\xb1\x41\x10\x0a\x71\x43\xb4\xc3\xee\xf0\x0a\x52\x98\x4f\xa3\x1d\x16\xdf\xa2\xfd\x7c\xeb\xf2\xa2\xb8\x24\xaf\x69\x13\xd7\x94\x1d\xf3\xc9\xe0\x65\x1b\x25\x8b\xd9\x0a\x6c\x4c\x08\x14\xe2\x8e\xa8\x82\x07\x20\x4f\x8d\xd1\x50\x47\x2c\xcc\xb0\x67\x8d\x5f\x25\xfe\x26\x43\xb4\x18\xcb\x4d\x55\x4c\x0f\x93\x1d\x3b\x88\x29\xe9\xd7\x4f\xd9\x24\x37\x28\xc4\x03\x51\x05\x4f\x78\x05\x5b\xa3\xcb\xc3\xa5\xfa\x6d\xec\x0f\xdd\x0b\x23\x7f\xa4\x7a\x54\x5d\xfa\xe9\x8d\x3f\xa8\xe4\x27\xb9\xec\x6a\xf4\xa2\xbc\x89\xdc\x11\x0a\xf1\x44\x54\xc1\x0b\x5e\xa1\xef\x1b\xba\x67\x6c\x50\xb9\x52\x6b\x9a\x04\x87\xe8\xbb\x06\x27\x48\x21\xf7\x37\xdf\xdc\xa1\x87\x71\x28\x2c\xfa\xad\x3c\x43\x0e\x50\x88\x17\xa2\x0a\x77\x01\x69\x95\x11\xd4\xa7\xf2\x84\xd5\x25\x37\x73\x36\x37\x27\xfa\xb3\x3c\x22\x9b\xb5\xd1\x7e\x0e\xb6\x1c\xfe\xe8\x41\xaa\x71\x7c\xd9\x66\x02\x85\xdc\x45\x54\xc1\x1b\x5e\xc1\xfa\x69\xbe\xee\x80\x83\xcb\x95\x99\xf4\xf0\xe4\xec\x0f\x1f\x65\x6f\xb6\xad\xbb\xae\x51\xb8\x71\x8d\xa8\x18\x08\x78\x4b\x98\x20\x41\x21\xde\x88\x2a\xf8\xc0\x2b\xfc\x22\x95\x8a\xc0\xa3\x09\xb4\xb8\x74\xe0\x27\x79\x23\x45\x50\x80\xed\x31\x3b\x19\x9a\xc2\xd8\xdb\xd9\xad\xc7\xb7\xc8\x76\xf0\xae\x41\x21\x3e\xff\xdb\xe0\x01\xcb\x69\xff\x3b\x78\x7c\xe1\x9b\x13\x57\x8f\x4e\xde\xb8\x67\xc2\x83\xef\xbe\xfa\x5c\x41\x4e\xf8\x7a\xa4\x1f\xbe\x01\x46\x90\xcc\xe0\x92\xfc\x63\x26\x0b\x4e\x51\x01\x28\xc4\x17\xd1\x0e\xfb\xc1\x2b\x4c\x30\x94\x08\x4e\x12\xa4\x90\xb4\xec\xee\x17\x3d\x12\x37\x88\x89\x6f\xfe\x16\x4b\x46\xa7\x52\xcf\xac\x10\x69\xd1\x47\x9f\x78\x13\x0a\xf1\x43\x54\xc1\x1f\x30\xbf\x39\xf0\xaa\xdc\x55\x23\x59\xdb\x23\x97\x00\xbf\x65\xc2\x9d\xe4\x4f\x84\x0e\xbe\xda\x3c\x2f\x26\xba\x7b\x26\xde\xf6\x1c\x0a\xd9\x40\x21\xfe\x88\x2a\x04\x00\xea\xf9\xd9\x36\x8d\xfb\x9b\xb8\x1d\xaa\x34\x29\xaf\xe4\xfb\xda\xa9\xd4\xda\x4f\x5c\xdc\x37\xc5\x4d\x38\x88\xa6\x24\xf9\x55\xf5\xa4\xa0\x90\x00\x44\x15\x02\x01\xd5\x76\xef\x97\x07\x83\x91\xd4\x94\x9c\x4e\xa3\xf5\x91\x56\xfe\x76\x0b\xec\x54\x44\x57\x5b\xc8\x8a\x4c\x4c\xaa\x1e\x86\x3b\x22\x21\x43\x21\x81\x88\x2a\x04\xc1\x2b\x64\x68\xca\x7c\xaa\x51\xe7\x5d\x51\xcc\xf4\x9e\x36\x65\x1f\x20\x28\x82\xe2\xf7\xaa\x6d\x24\xcb\xa7\x15\x2d\x5f\xd6\xdf\x7e\x8b\x0a\x85\x04\x21\xaa\x10\x0c\xaf\xf0\xdb\x11\x65\x7d\xb9\xc3\x74\x32\x4b\x50\x8c\x8d\x88\x69\x06\x95\x60\xdb\xe5\x7b\x14\xf6\x9b\xf5\x08\xeb\x8a\x38\x4b\x6a\x75\x5c\x28\x24\x18\x51\x85\x10\x40\xb6\xad\xef\xe0\xc3\xb7\xb0\xa8\x11\xd6\x78\xbe\xe7\x4a\x64\xf3\xfa\x0e\x24\x84\x2e\xa3\x6b\x53\xc2\x0e\x4d\x03\x54\x7d\x6a\xbe\x0e\x50\x48\xc8\xff\x56\x6c\x03\x5b\xa9\x07\x28\xb6\x2d\xb4\x29\xe3\xd7\x36\x31\x56\x7f\xe4\x7e\xc9\xd3\x2d\xc3\x6f\x1c\xcb\xf0\x6e\x56\xaa\x72\xb2\x82\x98\x5b\xbb\x96\x62\x5a\x9a\xea\x1c\x9a\x2c\xfe\x36\xc9\xaa\x86\x2d\x6c\xdc\xd2\xfe\xa8\xc5\x2d\x5b\x2d\x8f\x53\x68\x59\xe3\xcd\x27\x7f\xb2\x28\xed\x8f\x29\x03\xae\x29\xe7\xd0\x7a\x16\xa9\x03\xd4\x19\x0e\x1f\x3c\x4f\x0f\x46\x09\x8d\x85\xc2\x23\x7d\xfb\x35\x52\x5f\xf7\x4a\x11\x86\xfc\x44\x61\xe1\xd9\xc5\x73\xe8\xcc\x8f\xc0\x34\x54\xc6\xac\x19\xef\x8c\xd1\x5a\xa3\xce\x3d\xb4\xe8\x69\x6b\x81\xfa\xfb\xfc\x78\x78\x3f\xd8\xd7\x26\x36\x05\xcf\xd7\xba\xc2\xdc\x76\xec\xe9\xd8\x3b\x22\xd8\x06\x1c\x51\xc8\xfc\xfd\xef\x6c\xd4\x2e\x0b\xeb\x77\xc5\xb2\xef\xda\xe0\xd8\x6b\x8e\xec\xbd\x3c\xbf\xfb\xf5\x0a\xe3\x2d\x27\xd9\x0f\x0b\xa4\x5b\xd6\x63\xaf\xf5\x18\xf7\x2a\xc7\xb2\x08\xd0\x7e\x8f\x10\x5a\x56\xb7\x1d\x3f\xf9\xa6\x7b\x74\x0e\xc5\xea\xf8\xfc\x8d\xd2\xa4\x22\xf8\x46\x42\x08\xe7\xc9\x21\x57\x31\xce\xb7\x26\x2f\x83\xd7\x50\xc7\x6b\xd9\x5a\x22\x8b\xde\x3c\xe7\x17\xe0\x91\x8f\x9b\x73\x52\x4b\x85\x67\x88\x69\x7f\x90\x5c\x8e\x59\x32\xe7\xb1\x63\xee\x32\x29\xed\x8b\x11\x4c\x37\xbf\xc3\x1a\x7b\x8a\x07\x2b\xb6\x81\x5d\xd5\x7f\xef\x60\xa1\x80\x62\xfe\xc9\x9b\x25\xe7\xb1\xc8\x07\x97\x33\x0b\x1e\x15\x53\x3c\x7f\x9a\x71\xc3\x3c\x65\xbe\x96\xdb\x7f\xee\x37\x3e\x2a\x1b\xab\x23\x26\x14\x12\x8a\xa8\xeb\xa0\xf0\x0a\x93\x3f\x2c\x43\x27\x50\x92\x47\xbb\x78\x87\xe4\x49\xae\x45\x3b\x84\xde\x63\x65\xf4\xdf\x59\x94\xd6\xed\xfe\x25\xfb\xe4\xe9\x55\x5d\x28\x04\x8a\xa8\x42\x18\xbc\xc2\xab\x7c\xc3\x4f\xd8\x90\xc6\x36\x5b\xf7\x30\x97\xf8\xb1\xde\x0f\xd2\x93\x1e\xa6\x13\x39\xe3\x3b\xf6\x3f\xfd\x19\xcd\x53\x1f\xc9\x42\x21\x61\x88\x2a\x84\xc3\x2b\x0c\xf8\x69\xe5\x17\x11\x2f\x5c\xc2\xf6\xba\x6c\xb2\xc5\x90\xdf\xc2\xb1\xfd\x59\xf4\xb4\x59\x86\x62\x9c\xb1\x81\x68\xb7\xdf\x4c\x00\x0a\x09\x47\x54\x21\x02\xf0\x79\xce\x72\x2a\x72\xf3\x47\x0b\xc4\xc8\xf1\x83\xf3\xb0\xf6\x0e\x64\xad\xda\xce\x4c\x90\xa8\x79\xdd\xcc\xe7\x48\x64\x9a\x63\x43\x16\x0a\x89\x40\x54\xe1\x1e\x20\x6b\x43\x11\x3b\x76\xba\x66\x2f\x8b\x25\x89\xe1\xce\x38\xc1\xfe\x85\xf8\xc9\x84\xd0\xad\x3b\x33\x92\x76\x98\x28\xce\xc8\x6b\xa2\x0e\x50\xc8\x3d\x44\x15\x22\xe1\x15\x46\x6a\xa4\xfe\x7f\x9c\xdd\x77\x38\x96\xef\xe3\x07\x7c\xa7\x19\xc9\xca\xb8\x4f\x2b\x44\x46\xf6\x4e\x64\x14\x21\x14\xd9\x99\x19\xa9\x6c\xca\x2a\x5c\x4a\x42\x14\x65\x24\x23\x94\x1d\xc9\xca\xc8\xde\x23\x42\x28\xd9\x7b\x54\x14\x29\xf3\x39\x3c\xcf\xd7\xef\xc8\xf5\x4f\xcf\xf5\xf9\xff\x3c\x8e\xf7\x7d\xdd\xee\xf7\x79\x9d\xd7\x79\xde\xb7\xd7\x05\x9f\xc7\xd3\xc1\xa3\xc2\x8a\xd2\xa7\xb3\xbf\xf0\x18\x38\xf1\x95\xfb\x65\x65\xe8\x2f\x92\xac\x19\x90\xbc\x1d\xe6\x40\x70\xf7\xb0\x26\x04\xed\x4f\x78\xe5\x35\x71\x37\x89\xb6\xa7\x58\x57\x8b\xf8\x89\x5e\x2c\xe1\x41\xf1\x05\x87\xd5\x63\xe4\x84\xb7\x35\x02\x67\x29\x29\x87\xcb\xb4\x11\x5c\xd0\x7f\xbb\xfd\xff\x6b\x9e\xf9\x5f\x79\xee\xa3\xb6\x3c\x37\xc5\x52\x06\x43\x68\xbf\x84\xeb\xcf\x04\x2c\xd0\x48\xd4\x66\x78\x14\x39\x8d\x2e\x65\xdf\xff\xe6\x0d\xca\xfd\xea\x95\x0e\x21\xb8\xfb\x58\x2f\x38\x78\x7f\x42\xda\xd9\x78\x86\x07\x2c\xbc\xc7\xf1\x99\x59\x0f\x96\xb2\xaf\x70\x0b\x0e\x27\x98\x2f\xdb\xf7\x58\x96\x9e\x57\x3a\x90\x31\x20\x2c\x8f\xe0\x82\xb1\x26\x84\xa0\xd6\x6c\x8e\x3b\xad\x3a\xba\x8b\x2e\x9e\xc3\x27\x03\xde\xbb\xb6\x7e\x20\x97\xfd\x85\x8f\x7f\x20\xde\x61\x24\xca\xef\x51\xcd\xdd\x29\x15\x04\x17\x82\x35\x21\x74\x7f\x42\xe4\xc4\x33\x8a\x27\x07\x7e\xbe\xf1\xd4\x4d\xa4\x2b\x7a\x72\xd4\xfe\xf1\xcc\x62\x8e\x65\x1b\xd3\xc1\xe7\x47\x95\x8f\x0d\x69\x99\x10\x23\xb8\x50\xac\x09\x0f\x50\x87\x6d\xfd\xec\x59\xd7\x8e\x0d\x5a\x2a\x04\x71\x55\x30\xb9\x7d\xf6\xd6\x7c\xca\xc8\x28\xf5\x54\xe0\xc5\xe1\x54\x4b\x3e\x15\x62\x69\x16\x04\xf7\x00\x6b\x42\xd8\xfe\x04\xdd\x7c\xc7\xc3\x2d\xdf\xce\xe2\xd9\xf0\x7e\x5d\x6f\x0e\x1e\x6c\x52\x8d\x5a\x3f\x41\xca\x7a\xb3\x8a\x67\x88\x70\xf3\x85\xce\x53\x37\x04\x17\x86\x35\x21\x7c\x7f\x82\xd0\x57\x97\xa3\x46\x1b\x4b\x89\x9b\x42\x4e\x62\x62\xee\x87\x1e\x83\xc7\x8a\xde\x7e\x03\x8b\xe6\xf5\x5a\x1f\x29\x13\x6f\x2c\x5f\x41\x70\xe1\x58\x13\x1e\xee\x4f\x38\x59\xd3\x14\x3d\x05\x49\xf2\x34\x44\xdd\xfc\x7d\x6a\x6d\x46\xf2\x83\xe8\xca\x1f\xe6\x04\x74\x24\x26\x69\x52\xcf\x87\x2e\x9c\x44\x70\x0f\xff\x5b\x79\xfe\x75\xe7\xfd\x5f\x79\x1e\xed\x7f\x39\xc9\x43\x23\x89\x69\x74\x4b\xcb\x17\xeb\x46\xf9\x23\xb5\xee\x73\x8c\x7a\xbc\xd1\x6d\x1a\x66\x3c\x41\x14\x46\xb9\xb3\xae\x64\x60\x8c\xe0\x1e\x61\xbd\xe0\x08\xd4\x83\x67\xc0\x56\x4c\xc1\xb3\x5e\xe1\x93\xac\x09\x6c\xf5\x61\x4d\xe5\x01\xd6\xcf\x8d\x43\x06\x35\xb9\x2e\x93\xae\x51\xdd\x3e\x99\x73\x00\xc1\x45\x60\x4d\x88\x44\x1d\x85\xad\xcb\xdc\x8c\xcc\x69\x1e\x2d\x62\xff\xda\x39\xd9\xac\xd0\xd2\xcd\x2d\x42\x9f\xab\x4a\xe5\x16\x9a\x92\xc0\xc3\x9e\x68\x7d\x06\xc1\x45\x62\x4d\x78\xbc\x3f\xa1\xe8\x5c\x0d\x85\x75\x7e\x42\xc7\x49\x9f\xbb\x1c\xa3\xc3\x7f\xde\xd8\xc8\x4e\x7c\xea\x73\x3a\x15\xaf\xda\x65\x4b\x92\x94\x9f\x45\x81\xe0\x1e\x63\x4d\x78\xb2\x3f\x21\xd1\x40\xd1\xc7\x28\xbe\x85\xe2\xf4\xa4\x8f\xca\x72\xf4\x5b\x6b\x97\x94\x47\x55\xf4\x2f\xdf\xfe\xf9\x83\xa4\xe5\x22\x91\xfe\x96\x08\xee\x09\xd6\x84\xa8\xfd\x09\xa9\x94\xaa\x2d\x41\x86\xda\x79\x59\xfe\x86\xac\x5e\xcd\x31\x15\xdf\x4f\x2a\x5d\xf8\x72\x94\xe2\x33\x19\xc1\xf9\xf0\x7e\x18\x74\x05\xc1\x45\x61\x4d\x88\xde\x9f\x70\x88\x51\x52\x54\x2f\x87\x8d\xbe\x8b\x64\x82\x37\x4c\x4a\x32\x86\xcf\xc7\xd9\x59\x79\x79\x76\x25\x38\xac\xfd\xfa\xe6\x87\x96\xb3\x08\x2e\x1a\x6b\x42\xcc\xfe\x04\xfb\x38\x13\xd7\x7b\xe1\xe6\x1a\x8f\xff\xdc\x2c\x98\x79\xaf\xfd\x3b\xde\x34\xce\xf8\x26\x83\x96\xea\xd9\xe5\x94\x66\x1c\xcd\x01\x49\x04\x17\xf3\xdf\xca\xf3\xaf\xb5\xe8\xff\xca\x13\xbb\xff\xe5\x8c\x59\x8b\x10\x5a\xac\x5a\xdd\xbb\x4f\xd2\x4e\x24\x48\x74\x79\xe2\xc0\x91\xf0\x53\x95\xfe\x1c\x37\xbc\xda\x4f\x3f\x30\xeb\xe8\x35\x43\x70\xb1\x58\x2f\xf8\x29\x6a\x51\x55\x43\x1a\xb0\x95\xea\x7b\x2b\xdd\xf0\x77\xfe\x35\xc6\xbb\xb4\xf6\x02\x7a\x4d\x97\x77\x3c\x32\xaa\x0a\x93\xc7\xd9\x3a\xf9\x6d\x11\xdc\x53\xac\x09\x71\xa8\x0d\xc9\x3b\xcb\x87\x32\xe7\x76\x32\x3b\xfa\x66\xb2\x37\xb4\x62\x3e\x52\x85\xd8\xaf\xd1\x0f\xcd\xa7\xb1\x3f\xd2\x2b\xed\x21\x57\xa7\x42\x70\x71\x58\x13\x9e\xed\x4f\x60\x0f\x38\x61\x08\x0f\xef\x54\x37\x33\x57\x9f\x37\xb8\x70\x8d\x46\xb0\xc2\xd6\x0b\x7f\x6d\xba\x65\x73\xa9\xf4\xc0\x5a\x7f\xb9\x05\x82\x7b\x86\x35\x21\x7e\x7f\x42\xbc\xfd\x94\xdf\xf8\x7d\x9b\xed\xef\x8f\xbf\x1b\x3d\x33\x53\xcf\x91\xcb\xbf\xa9\x75\x74\x5e\xf9\x3b\xe1\x63\x95\xe2\xda\xe7\xa1\x67\x11\x5c\x3c\xd6\x84\x04\xd4\x59\x38\xc5\x7b\x47\x28\x7d\xef\xd1\xe0\x8d\x23\x05\xef\x63\xae\x67\xfe\x36\xbd\xef\x52\x88\x7f\xdd\xa1\xd2\x77\x35\x46\xc8\xd7\x55\x0a\xc1\x25\x60\x4d\x48\xdc\x9f\x10\xb2\x2c\x7e\xb5\x52\xad\xc3\x4c\x60\x75\xe6\x97\xcf\xd5\xb4\xb7\x1a\x36\xba\x55\xd7\x00\x67\xeb\xa9\xec\xd2\x5b\xcf\x44\x2b\x2f\x22\xb8\x44\xac\x09\x49\xfb\x13\x18\x6c\x8a\x35\xbf\x13\x3c\x18\x3f\x6f\x96\x49\xdd\x5a\xf0\x55\xce\x84\xac\x32\x78\x20\x36\x9f\xf6\x8a\x85\xae\xc7\x21\x5a\x2e\x0d\x04\x97\xf4\xdf\xca\xf3\xaf\xa7\xb3\xff\x95\xe7\xf9\xfe\x97\x43\x4e\x1e\xdb\x74\xf0\xc5\x00\x17\x55\xda\x19\x5b\xd9\x0f\x47\xef\xdf\x75\x89\x6d\x78\xd7\xa6\x37\x99\xe7\x45\x92\xc8\x8e\x9f\x72\x1a\xc1\x3d\xc7\x7a\xc1\xc9\xfb\x13\xa8\x2d\xa5\x75\xb8\x99\x8f\x17\xeb\x26\x94\x9f\x14\x2c\xfb\x91\x9e\xd8\x7f\xc6\xf7\xc2\xfd\xaf\x16\x3f\xbc\x53\x7b\x23\x73\x67\x6d\x11\x5c\x32\xd6\x84\x94\xfd\x09\x4d\x3e\x51\x44\x6f\xa2\x32\x1f\xf0\xbc\x50\xe0\xd2\x09\xca\x22\xc9\xb2\x38\xd3\x5e\x65\xaa\x46\x48\xa3\xbf\xfc\xde\xc4\xb8\x8c\x0e\xc1\xa5\x60\x4d\x48\xdd\x9f\x70\xe1\x16\xeb\xd2\x7a\x80\xc2\x0c\xc1\x4b\x8e\x7b\xd4\x96\x84\x66\x6f\x2d\x07\xa7\xff\x1c\xaa\x3e\x42\x2d\x73\x56\x3b\xde\x2d\xd9\x10\xc1\xa5\x62\x4d\x78\xb1\x3f\x41\x2e\xb0\x7e\x55\x4b\x47\x69\xd5\xb1\x69\xc7\x72\x54\xe3\xc6\x6f\xc5\x1f\xf6\x97\xfd\x2c\xba\x5a\x99\xdf\xb4\x48\x17\xec\x24\xb8\x20\xb8\x17\x58\x13\x5e\xee\x4f\xd8\x5e\xa8\x0a\x1c\x78\x50\x72\x55\xa5\xa6\xa4\xdd\x4f\xe3\xd6\x39\x27\x9c\xa3\x4c\x6d\x96\x13\xe7\xc1\xf5\x98\xd0\x9c\xf0\xf3\x64\x08\xee\x25\xd6\x84\xb4\xfd\x09\xea\x94\x84\xc4\x0f\x65\x94\x4e\x53\x05\x19\xb9\x47\x4b\xe6\xfd\xa8\xb2\xe7\xe1\xbe\xaa\x7b\x5f\x4b\xdb\xe2\xcf\xf1\xdf\xe5\xc1\x8a\x08\x2e\x0d\x6b\x42\x3a\xea\x7b\x5e\xca\x1f\x37\x12\xd7\xfa\xb5\x1a\x55\x07\x92\x5e\xc4\xd0\x28\x6c\x54\xc0\x88\xed\xfb\x2a\xb9\x71\x87\x9a\xe2\x25\x38\x6e\xe3\x23\xb8\xf4\xff\x56\x9e\x7f\xed\x57\xfc\xaf\x3c\x19\xfb\x5f\x8e\x68\xa0\x71\xf5\xeb\x0f\x11\x79\xd2\x3e\x9c\x9e\x64\xb5\x8c\x7a\xaa\xcd\x73\xda\x02\x73\x77\x17\x55\xcd\x66\xa7\x32\xaa\x26\x58\x11\x5c\x06\xd6\x0b\xce\xdc\x9f\x10\x17\xf4\x8d\x9a\x92\x82\x39\xd4\xe7\xf0\x6c\xce\x65\x27\x9d\x55\x71\x27\xc6\xd6\x5b\xd1\x0f\xc9\x2e\x3f\xea\xcb\xa5\xe7\xe6\x27\x46\x70\x99\x58\x13\xb2\xf6\x27\xd4\x67\xc6\x31\x5f\xe7\xd8\x6c\xf9\x13\x77\xf6\xc2\xa4\xd0\x89\x53\x7e\xcd\x15\xdb\x14\x02\xaf\xec\xef\x8e\x4b\x90\xf9\x89\x26\x1e\x43\x70\x59\x58\x13\xb2\xf7\x27\xe0\x07\x19\x10\x0d\xfc\x88\xf9\x53\xf9\x82\x8b\x65\x14\x9e\x3f\xcb\xe6\x2b\xa1\x7e\x5b\xe6\x42\x51\x85\x46\xfe\x10\xb1\x72\x9c\x05\x82\xcb\xc6\x9a\x90\x83\x3a\x6c\xfb\xe0\x50\x66\x5b\xf5\x6c\x65\xb9\xdc\xca\xfc\xf1\xa9\x9b\x75\x2c\x84\xa2\xec\x92\x5d\x6b\xc6\x6d\x53\x63\x79\x5f\x3b\x8f\x00\x04\x97\x83\x35\xe1\x15\xea\xde\x46\xc4\x3d\xe9\x79\xe3\x16\x9b\xa9\xd1\x38\x08\x38\xd5\xbd\xfe\x21\x7d\xc7\x40\x32\xdb\x51\x25\x30\xd8\x42\xdf\xc7\x07\xca\x23\xb8\x57\x58\x13\x72\xf7\x27\x9c\xe0\x91\x59\x55\xbf\xde\x1d\x40\xc9\xa7\x74\xbb\xeb\x6a\x96\xaf\x3b\x37\x09\x37\x57\x0b\x11\x43\xee\xa1\x62\x5e\x02\x42\x1d\x2d\x04\x97\x8b\x35\x21\x6f\x7f\x82\xf3\x7b\x61\xe3\x6c\x0e\x35\x5c\x9d\x7a\x99\x65\xca\x6f\x25\xc3\x6d\x0f\xcb\x29\xe4\xfc\x4b\x6a\x99\x6c\x51\x0f\x7f\xeb\x7e\x33\x04\x97\xf7\xdf\xca\xf3\xaf\x1d\xbc\xff\x95\xe7\xf5\xfe\x97\x73\x91\xff\x07\xf9\xa3\x2b\xba\xfc\xb4\x72\xfe\xc7\x5f\xe4\x83\x23\xc1\x11\x25\x23\x84\xbe\x95\x3d\x7a\x8d\x3c\xf1\xb6\xd7\xc8\x2e\x20\xb8\xd7\x58\x2f\x38\x7f\x7f\xc2\xf5\x65\x0b\xb6\x0f\x7c\x05\xc3\x85\x69\xca\xa6\xa4\xd7\xf2\x9f\xac\xb5\xfe\x36\x58\x0f\x9e\x52\x8e\x2f\xef\x66\xd7\x8d\x3d\x6e\x88\xe0\xf2\xb1\x26\xbc\xd9\x9f\xd0\x66\x2e\x7a\x14\x59\x93\x19\x7a\x53\xc0\x42\x98\x52\x7b\xe1\x5b\x4c\x86\x00\xd3\xb9\x8f\xa6\xcb\x49\x52\xd9\x6d\x1a\x08\x95\x3e\x82\x7b\x83\x35\xa1\x60\x7f\xc2\x5c\x93\x1c\xe3\x8d\x39\xfb\xf4\x9f\xa7\xe5\xbe\x72\x5d\xe1\x89\xfd\xf0\x2c\x11\xa1\x1e\xb2\x70\x1b\x96\xe4\xbc\x9d\xde\x3f\xc3\x8f\xe0\x0a\xb0\x26\x14\xa2\x3e\x78\x37\x4e\x46\x49\x79\x5b\xd1\xb1\xf2\x7e\x1d\xd8\x21\xde\xfc\x43\xfa\x7d\x34\xe9\x4f\x68\xc9\xa2\xf0\x6a\x6c\x24\x39\xd5\xb6\x31\x82\x2b\xc4\x9a\x50\x84\xfa\xaa\x4a\x80\x34\xd4\x48\x16\xd5\x1f\x70\x58\x27\x97\xba\xe9\x52\xf4\x36\x4b\xb5\x3f\x0d\x3f\x2c\x8a\xf8\x1e\xab\x91\xae\xcb\x37\x62\x04\x57\x84\x35\xa1\x78\x7f\xc2\x65\x62\xe2\xa9\x90\x32\xaa\x76\x87\xed\x90\x9d\x20\xab\x5a\xd7\x0e\x59\xe7\x23\x14\xb1\xc9\xf2\x4f\xbd\x92\xae\xa5\x18\x34\xd0\x20\xb8\x62\xac\x09\x25\xfb\x13\x22\x84\x38\xa7\x05\x73\x97\x5a\xcd\x6d\xa0\xe1\xf7\x80\x57\x55\x24\x81\xeb\x8a\x99\xad\x51\x0f\xb7\xf2\xc5\xcf\xde\xd6\xf9\x7d\x00\xc1\x95\xfc\xb7\xf2\xfc\x6b\x4f\xfb\x7f\xe5\x79\x8b\x7a\x50\x2d\x9d\x7c\xf3\xdb\xe6\x3b\xa7\x3b\x8b\x65\xf8\xd7\x19\x89\x61\x0b\xf1\x4e\xe4\xa8\xf7\x5b\x4d\xd6\xb5\x4f\x57\x5e\xca\xff\x94\x46\x70\x6f\xb1\x5e\x70\xe9\xfe\x04\x5b\xc6\x83\xbf\x04\xbc\x4c\xb8\x3d\xc9\xf8\x6c\xea\x8b\xc7\x62\x69\x4a\x79\x39\xd6\xdd\x0a\x46\x89\x57\xe6\xf9\x8f\xe4\x4f\x29\x23\xb8\x52\xac\x09\x65\xfb\x13\xc2\x82\xaa\x25\x4f\x1f\xba\x92\xd0\x7c\x73\xea\xc9\x95\xf0\x11\x6b\x42\xda\x07\x5a\x21\x13\xd2\xb7\xa3\xb9\x93\x2d\x62\x16\x17\x5c\x10\x5c\x19\xd6\x84\xf2\xfd\x09\xbc\x2a\x0b\xde\x0b\xb7\xa7\x8f\x30\x2a\x4a\xb7\x95\xbf\xaf\x93\x9d\x4d\x73\x69\x8a\x11\x7d\xef\x14\x77\xb8\xf0\xdd\xe1\xa5\x6e\x36\x04\x57\x8e\x35\xa1\x62\x7f\x02\xe7\x76\xc7\x90\xf7\x77\xcf\x10\x7c\x15\x27\xc0\x63\xa4\x7c\x5c\xad\xe6\x9c\xdc\x8a\xf2\x66\xd7\x73\xe7\xc0\x00\x46\xdd\x26\x5a\x04\x57\x81\x35\xe1\xdd\xfe\x04\xed\xb6\xb0\x16\xe1\x2c\x02\x82\xe7\xbf\xb2\x1c\x7f\x74\xba\x1c\xb2\xf1\xbc\xdf\xf6\x22\x27\xd6\xdd\xfb\xe1\xfa\x8f\x7c\x1b\xf3\xeb\x08\xee\x1d\xd6\x84\x4a\xd4\x17\x7a\x7c\x1b\x0d\xcf\x11\x64\x65\x73\x66\xd8\xe6\xd4\x7c\x5b\x9c\xbe\xeb\x84\xc4\x27\x3d\x3f\x9c\xf2\xa9\x87\xf0\x68\x9c\xc5\x25\x63\x04\x57\x89\x35\xa1\x0a\x75\x9e\x7f\x7b\x2b\xf2\x61\x6e\x2a\xaf\xd5\x6b\xfc\x13\xcf\x25\xa7\xc8\xc7\x13\xcc\xb2\x42\x77\xd4\x1b\xe5\x03\xf4\x74\x2e\x5a\xde\x36\x40\x70\x55\xff\xed\xb0\xed\x5f\xff\xeb\x12\x75\xd8\x86\x37\x95\x26\xe3\x91\xd9\x6a\x17\x6b\xde\x90\x9e\x1b\x67\x1b\xa3\x52\x29\x63\x7e\x86\xc8\xe6\xdd\x9a\x66\xd0\xe5\x4f\x2f\xed\x84\xfe\x1a\xba\xa9\x70\xb5\x69\x9b\xf0\xab\xc6\x58\x8d\x29\x87\x77\xef\x9a\xa7\xfc\x33\x02\x3b\x99\xd4\xfa\xa9\xe2\xcb\x03\xf7\x6c\x05\xeb\xfe\xfe\xc7\xd1\x56\x46\x86\xc5\x57\x6f\x2b\xdf\xa1\x13\xb1\x63\xb6\xd4\xa0\x78\xaa\x25\x70\x73\x49\x2e\x44\x46\xff\xe3\xc2\x16\x27\xbb\x91\xd9\x81\xbf\x86\xb2\x37\x91\xc9\x69\x95\x57\x3f\x0b\x39\x3f\xed\xff\x72\xc3\xee\x76\xc8\x55\x8a\x86\x63\x4e\xe2\x87\x05\xc9\x6d\x56\x54\x2e\x15\x78\xfc\xfd\x2b\xbc\xfa\x9f\xb7\x17\xd5\x1c\x64\xaf\xb2\xa7\x17\xf4\x1b\x95\x93\x57\x8d\x4c\x5f\xb2\xfb\x13\x70\x9e\xf2\x2d\xf7\x3c\x01\x07\xd1\xdf\xff\xc2\xf2\x4d\x29\x72\x5b\x98\x7a\x9d\x69\x7d\x65\xa6\xd3\x86\xfc\x87\xbb\x46\x11\x85\x5a\x26\xf7\xf1\xdb\x37\xbc\xc5\x7f\x73\xb0\xe5\xff\xfd\xff\x87\x5f\x79\x72\x9c\x89\x09\x53\xd4\x7a\x5e\xc5\xea\xe6\xfe\xa0\xfb\x62\x59\xf3\x63\xa2\x66\x06\xb5\xc8\x6c\x7c\x15\xbf\x33\xf4\xee\xbf\xfe\x1a\xfa\x69\xe7\x92\x0f\xb5\x6c\xc3\x17\x02\x93\x1e\xff\x5f\x37\xb7\x6b\xbf\xda\xf3\x12\x18\x0a\xf7\xe9\xa7\x26\x2b\xac\x8f\x47\x82\xf1\xff\x3b\x6c\xfb\xd7\xbb\xfa\xbf\x19\xac\x1a\xb5\x4d\x15\x9b\xfd\x83\xfe\x5d\xd5\x85\xdf\x27\x1f\x38\x28\x88\x56\x26\xdd\x2f\x33\xf0\x16\xa0\x6e\xba\x47\xf9\x2b\xfd\x7b\xe7\xc6\x3d\x5d\x04\x57\x8d\xf5\x53\x57\x83\xfa\xc9\x46\xe6\xa6\xd8\x9f\x86\x44\xd7\x07\xf3\x9c\x25\xef\xf8\x46\x49\x71\x8d\xc6\xf9\xfe\x3d\x25\x1f\x09\x94\xd4\xc9\x44\x83\x67\xe9\x10\x5c\x0d\xd6\x84\xda\xfd\x09\xf2\x21\xa1\xf9\xe4\x35\x95\xfd\x25\x01\x6c\x11\x6f\xcc\x97\x54\x3a\x79\xb3\xf0\x9e\x91\x66\xea\x74\x1e\xf6\xce\xf5\xec\xff\xc6\x8b\xe0\x6a\xb1\x26\xd4\xed\x4f\xf8\xfc\x75\x22\xf2\x9b\x6b\x5e\x31\x77\x5e\xfc\x8c\xdd\xfb\x4e\x5c\xa1\x24\xd9\x6c\x46\xd7\x35\x6f\xde\xa3\xc7\xaf\xf0\xec\xd4\x71\x20\xb8\x3a\xac\x09\xf5\xfb\x13\x56\x6f\x5d\xa1\x91\x2f\x31\xc5\xcf\xf7\x8a\xd8\xd2\xe7\x3a\x2a\x3d\xd6\x56\x30\x4f\xa2\x3d\xd2\x7f\x87\x31\x32\xef\x51\xfc\x2f\x88\xe0\xea\xb1\x26\x34\xec\x4f\x98\x28\x27\x2e\x18\x95\x3b\xc4\x94\xf1\xfc\x5a\x7a\x6a\xc1\x8d\xb0\x13\x06\xee\x22\x9e\x8e\x56\x24\x4b\x6f\x13\x98\x15\xc7\x1a\xaf\x21\xb8\x06\xac\x09\x8d\xa8\xcd\xed\x51\xc8\x36\x6d\x6c\xff\x85\xf0\xa1\xc3\xcb\xe9\x0b\xad\xea\xdf\x63\xdb\x1f\x48\x1e\x0c\xd5\xcc\x20\xea\xb8\xaf\xfd\xfd\x97\x18\x82\x6b\xc4\x9a\xd0\xb4\x3f\x61\xa7\xe8\xcc\xac\x5b\x99\x42\xe0\xc5\xc5\xe7\x81\xed\xf8\x62\x0f\x48\x57\x5e\x6c\x84\xcf\x55\x4e\xdf\x7c\xd5\x76\xc1\x50\xa6\xe1\x34\x82\x6b\xfa\x6f\xb7\xff\x7f\xcd\x33\xff\x2b\x4f\x33\x6a\xbd\x33\x3e\xa3\xec\x9b\xba\x83\x5f\x51\xff\x49\xe9\x41\x65\xe2\x7d\xbe\x8a\xc1\xe8\x42\x8d\x84\xda\x34\x8d\xfe\x52\x89\x03\x7f\xe8\x11\x5c\x33\xd6\x0b\x6e\xd9\x9f\x20\xce\x06\x6a\x87\xbb\x82\xb4\xa9\xcd\x14\x3b\x2c\x8b\x22\x94\x9e\xd7\xd2\xc7\xa7\x1c\x39\x65\x10\x68\xab\x93\xa3\x79\x56\xf6\x12\x82\x6b\xc1\x9a\xd0\xba\x3f\x41\xfa\x4b\x54\xd6\x3b\xda\xb8\xf3\xbf\x14\x07\x03\x33\x99\x8d\x84\xea\xdb\x20\x4d\xc1\x54\x42\xba\x7c\x23\x53\xed\xe8\xbb\x11\x5a\x04\xd7\x8a\x35\xa1\x6d\x7f\x42\x76\x65\xa2\xbb\x90\x07\x9d\x22\x5b\xda\xb2\x73\x00\xd9\xe3\xcb\x4d\x75\x66\x8d\xc7\xac\x56\x49\x78\xc6\x2c\x18\x8a\x3a\x9e\x1b\x22\xb8\x36\xac\x09\xed\xfb\x13\x64\xd9\x69\xa3\xf5\xec\x67\xf2\xef\xbd\x3f\x51\x56\x75\x9e\xe5\x74\xcd\x8d\x11\xeb\xea\x40\x6d\x7a\xd9\x73\x8e\x4d\x07\x9f\x4a\x10\x21\xb8\x76\xac\x09\x1d\xa8\x2f\x61\xb3\x8f\x92\xae\x87\xc5\x21\x1e\xd1\xa4\xb7\x16\x89\xf4\x40\xda\x49\xe2\xe4\x6e\xf1\xf2\xc0\xbb\x64\xe2\xdb\xf1\x0b\x15\x1c\x08\xae\x03\x6b\xc2\xfb\xfd\x09\x77\x17\xed\xf1\x69\xd2\x9f\x9e\x44\xc0\x35\x50\x62\x78\xdf\xee\x1c\xeb\xc2\x07\x2f\x6a\x9d\xf6\x3a\x9d\x4f\x62\x11\xcd\x6b\x7c\x08\xee\x3d\xd6\x84\x4e\xd4\xe9\x96\x22\xf7\xc7\xa4\xca\xfb\x30\xda\x25\x31\x83\x90\xe5\xf0\xc2\x45\x7f\x51\x31\xe0\x1a\x9a\xc8\x5a\xef\xa4\x72\x56\x68\x49\x0d\xc1\x75\xfe\xb7\xf2\xfc\xeb\xce\xfb\xbf\xf2\x74\xa1\x66\x6d\x3e\x97\x2f\xd1\x65\x27\x94\x80\xc3\xad\x4f\xfa\xe9\x41\x72\x83\x1e\xed\xb8\xa1\x23\xd5\x6c\x6b\x1e\x55\xe7\xf5\x34\x32\xa5\x10\x5c\x17\xd6\x0b\xfe\xb0\x3f\xa1\x24\xbc\xac\xd6\x30\x31\xa7\x36\x43\xc0\x4a\xd4\xe6\x4d\xfa\x9c\xcb\x1c\xe5\xd5\x57\xd4\x4f\xad\x4e\xca\xdb\x8a\xde\x15\x77\xbb\x8e\xe0\x3e\x60\x4d\xe8\x46\xed\xda\xc8\x57\x84\xda\x47\x84\xe6\xd2\x31\x37\x7e\xd6\xb0\x18\xba\x7b\xb4\xa9\x37\x2c\xb1\x51\xfb\xb9\x6a\xb6\x16\x3b\xb7\x9f\x88\x29\x82\xeb\xc6\x9a\xd0\xb3\x3f\x61\xea\x62\xde\x11\xf5\x11\xfa\x78\x5b\x43\x36\xc3\xd8\x9f\xfa\xe2\x8e\x35\x53\x1a\xa4\x9b\x62\xbf\x94\x0b\x63\xe9\xec\x1e\x4b\x12\x20\xb8\x1e\xac\x09\xbd\xfb\x13\x68\xd8\xce\x39\xbd\xd3\xd5\x38\x1f\x7d\x4c\x1b\xc6\x04\x45\xe5\x29\x1a\x68\xe9\xbc\x11\x6d\x22\xb7\x8c\xbb\xdf\x65\x64\xf9\x4d\x02\xc1\xf5\x62\x4d\xf8\xb8\x3f\x81\x27\x32\x6f\xa2\xf9\xfd\xd5\x23\x22\xa1\x74\x27\x87\xc8\x5b\x8a\x65\x83\xed\x5e\x7d\x32\x53\x1a\x3e\x26\x03\x7e\x68\xb6\x3b\x9e\x40\x70\x1f\xb1\x26\xf4\xed\x4f\x48\xa8\x1a\x12\xd6\xd2\x38\xca\xc1\x2e\xa6\x98\x5d\x64\x23\xd9\xfd\x83\x39\xe9\xd6\x75\x51\xfe\xb3\x9a\x3a\xf3\x95\x46\xda\x12\x27\x11\x5c\x1f\xd6\x84\x7e\xd4\xdd\x73\x15\xef\x13\xbf\xfc\xb1\xa7\xa9\x77\x8b\xb4\xb4\x4a\x5c\xbf\x27\xb7\xa8\x17\x49\x90\x09\xb5\x0f\xc6\xe9\x64\xd6\x1e\x7f\x74\x04\xc1\xf5\xff\xb7\xf2\xfc\x6b\x2d\xfa\xbf\xf2\x0c\xec\x7f\x39\x1e\x2e\x7c\x9e\xe5\x9b\xcf\x33\xd5\x43\x6d\x62\x1c\x0e\xcc\xa6\xe8\xdd\x2f\xdc\x91\xf5\x51\x54\xec\xf6\xb1\xb7\x30\xf5\x63\x77\x45\x70\x03\x58\x2f\xf8\x13\xea\x83\x27\x5b\x1f\x2d\x21\xa5\xa3\x1c\xb3\x13\xe7\x78\x68\x32\x2d\x15\xf7\x81\x8f\x6b\x4a\x7b\x79\xf4\xce\x4a\xde\x93\x7e\xd2\x83\xe6\x08\xee\x13\xd6\x84\xcf\xfb\x13\xdc\x6e\xfc\x7e\x51\x4d\x41\x5e\x71\x3c\xaa\x0f\x4f\x7f\xb3\x8c\x91\x3c\xd5\x51\x65\x9c\x6b\x38\x3a\x6c\xc1\x6a\x5b\xf0\xa4\x20\x21\x82\xfb\x8c\x35\x61\x10\xf5\x3d\x52\xe3\x13\xf3\xad\x8e\xee\x0d\xb9\xba\x86\xdf\xbb\xae\x77\xf6\x97\x4a\xc9\x30\x88\x69\xd7\x7e\xed\xf0\x6c\x2b\xed\x5c\x17\xb5\x40\x70\x83\x58\x13\xbe\xa0\xce\x60\x85\x84\x3a\xe2\x3b\xcd\x07\x1c\x8c\x5c\x93\x9c\x0f\x99\x9d\xff\xee\x78\x46\x72\x8b\xed\x6a\xf8\xd2\xf2\x8a\x91\x5a\x21\xbe\x12\x82\xfb\x82\x35\x61\x68\x7f\x42\x31\x3f\x7b\xa1\xf1\x89\x47\xd4\xc4\x1d\x35\x73\x54\x41\xb6\x1f\xe3\x6d\xfd\xcf\xd3\xdb\xda\x94\x74\x9c\x95\x9d\x72\x34\x5f\xd4\x46\x70\x43\x58\x13\x86\xf7\x27\x68\xf1\xcb\xbb\x92\xf3\x9e\x89\xb9\x35\x48\xa0\x10\x6c\x7e\xe9\x82\x1b\xc5\x76\xe5\xcf\xd2\x08\xd2\x22\xef\x51\x46\x51\xc2\x16\x1d\x04\x37\x8c\x35\x61\x64\x7f\x02\x77\x15\xdd\xc6\xb6\xdb\xf5\xd9\x85\xbc\xb7\xf7\x35\x18\x86\x59\x0e\x7f\x1b\x55\x2f\x7b\x4e\xd3\x5f\xe0\x76\xf9\xfc\x9a\xa5\x87\x2c\x82\x1b\xf9\x6f\xe5\xf9\xd7\xd3\xd9\xff\xca\x33\x8a\x7a\x22\xe1\x78\xe5\x44\x32\xfe\xa4\xc5\xf1\xb6\xb5\xd8\xfc\x0c\x33\xf4\xee\x5d\x0b\xc1\xe3\x2e\xce\x37\x82\x69\x3b\x14\x5e\xab\xb4\x08\x6e\x14\xeb\x05\x8f\xed\x4f\xe0\xbb\xfd\xf4\x65\xe2\xa9\xf9\x2b\x64\x07\x64\x09\xa8\x47\x68\x78\xd5\x9f\x07\x3d\x3f\x28\xb0\xb4\x30\xcb\x65\xa7\xc6\x76\xe3\xc8\x55\x04\x37\x86\x35\x61\x7c\x7f\xc2\x37\xaf\xb7\x33\x49\xc7\xc7\x72\x87\xdd\x78\x02\xec\xb3\xd9\xc7\x9f\xde\x3b\x21\x7a\x70\x81\xd1\xe8\xe0\x28\x23\x91\x89\x0f\x42\x82\xe0\xc6\xb1\x26\x4c\xec\x4f\xa0\x5d\xf8\x93\x18\xe6\xc0\x12\x36\x5b\x2c\x99\xf2\xb2\xef\xf3\xbd\xb8\xb2\xf3\x46\xcb\x23\x57\xbd\x7f\xb3\x2f\x70\x69\x91\x06\x02\x04\x37\x81\x35\x61\x12\xf5\xab\x30\x55\xfe\x3b\x23\xc2\xe2\xfd\x4b\xb9\x4e\x5b\xc3\xbc\xd1\x67\x9d\xa2\x4e\xc6\x1a\x58\x05\xdd\x8a\x35\x54\xb8\x61\x7b\x49\x9c\x1b\xc1\x4d\x62\x4d\x98\x42\x7d\x0b\xab\xb0\xef\x8a\xd4\x44\xe8\x67\x4a\x8a\xab\x2f\x5b\x1d\x34\xbf\x4d\xd0\x67\x36\x0f\x2e\x89\x99\xb2\xd6\xc9\x77\x12\x7d\x50\x3e\x80\xe0\xa6\xb0\x26\x4c\xef\x4f\x50\x53\x4f\x96\xd3\xab\xda\xb8\x6e\xf5\x4c\xb3\x7c\x38\xe3\x60\xb5\x3a\xfd\xeb\xc0\x77\x36\x4c\x27\x28\x2c\xf0\xfe\x54\x5a\xff\xb4\x47\x70\xd3\x58\x13\x66\xf6\x27\x1c\xa0\x27\x8a\xbc\xb9\x9a\x9b\x2b\x3e\x15\xf8\x4a\x9b\x9a\xaa\x52\x70\xfb\xd0\x23\xc2\x0a\x87\x4b\xec\x51\x2f\x39\x8e\x26\x24\x69\x22\xb8\x99\xff\x56\x9e\x7f\xed\x57\xfc\xaf\x3c\xb3\xfb\x5f\xce\xb8\xc8\xca\xe4\x63\xe6\xbc\x2a\x12\x27\x09\x51\x3c\xe5\x07\x95\xe2\xf7\xf1\x99\xf1\x59\x85\x1b\x2f\xea\x51\xaa\x8a\x1c\x95\xd7\x45\x70\xb3\x58\x2f\x78\x6e\x7f\xc2\x2d\xd9\xcd\x79\xe1\x7a\x5f\xb7\x50\x6b\x65\x67\x1a\x03\x39\x91\xde\x2f\x19\x21\xaf\x5d\xd9\x5a\xab\xcf\x4e\x70\x77\x8c\x95\x9f\x47\x70\x73\x58\x13\xe6\x51\xf7\x85\xd0\x2b\xde\xb1\xb8\x70\x43\x05\xa6\xd7\x8e\x4d\x89\x22\xae\x8c\x61\x63\x97\x56\x48\x1e\x58\xf5\xdd\x0b\x7c\x89\xbf\xb4\x49\x86\xe0\xe6\xb1\x26\x2c\xec\x4f\x50\xb9\xe0\x9b\x43\x30\xa0\x99\x2d\x2b\x29\x99\x7c\x70\xa6\x62\xf4\xfd\x68\xa2\x1a\x33\xde\x54\xc6\xc7\x5b\x09\x64\x27\x84\x23\x18\x11\xdc\x02\xd6\x84\xc5\xfd\x09\xbf\xaf\x42\x1c\x7d\xf7\x91\x5a\x63\xf6\x1d\xe9\x87\x51\x22\x0d\xe3\xb6\xb2\x9d\x86\x0e\x9c\x72\x12\xd7\x3b\xf5\x76\xb8\xa4\xe9\x10\xdc\x22\xd6\x84\xaf\xfb\x13\xa8\xb6\xff\x7c\x6f\xa6\x67\x24\x64\x4d\x51\xbe\xf6\xec\xcb\x4e\x07\x93\x82\x7b\x4a\xc8\xc0\x50\x7d\x69\xb5\xe5\xb9\x83\x93\x6b\x17\x11\xdc\x57\xac\x09\xdf\xf6\x27\xb8\x9f\x59\xb4\xb5\xfc\x94\x2a\xf5\xea\xc6\x47\x51\xad\x83\xf3\x49\xe3\x37\x0b\x38\x6e\x3a\x5d\x3f\xfb\xb0\xa8\x6f\xb3\xed\x4b\x1b\x15\x82\xfb\x86\x35\xe1\x3b\xea\x8b\x24\xf9\x0d\x33\x93\x34\xe6\xaf\x95\x93\xfd\x5d\x38\x03\xcb\x33\x44\xbb\x8c\x1f\x9c\x11\xa1\x73\x89\x8e\xe5\xfe\xca\x6d\xf6\xc4\x09\xc1\x7d\xff\x6f\xe5\xf9\xd7\x0e\xde\xff\xca\xb3\xb4\xff\xe5\x74\xa4\xad\x48\x38\xe8\xce\x33\x36\x5c\xea\xa3\x2d\xf8\xc0\xd4\x41\x10\xfb\x33\x40\xe6\xb8\x43\xa7\xf4\xaf\x73\x40\xc7\xde\x5b\x07\xc1\x2d\x61\xbd\xe0\x65\xd4\x77\x67\x6d\x49\xdc\x29\x9f\xbe\xba\x72\x32\xa0\xd4\xcd\xc9\xc2\xf3\x91\x79\xa4\x9f\x42\x10\xe5\x9a\xa4\xc4\x9d\xbb\xe9\x74\x45\xab\x72\x08\x6e\x19\x6b\xc2\x8f\xfd\x09\x99\xfc\xcf\xea\x0b\x77\x7a\x23\xee\x50\x13\xea\x05\x3a\x46\x06\x05\xdf\x95\xa9\xbb\xc7\x74\xed\x66\x88\xde\x1f\x4d\x56\x96\x0e\x45\x04\xf7\x03\x6b\xc2\x4f\xd4\x7d\xa1\x41\xcb\xcc\x6b\xb1\xf3\x22\xde\x96\x7a\xe5\x67\xcf\x2d\x22\x26\x9f\x37\x1f\xa8\xf4\x48\xfe\x2c\x0b\xaf\x4a\x30\x6a\xd5\x18\x23\xb8\x9f\x58\x13\x56\xf6\x27\xe4\x89\x64\x27\xcc\xff\x10\xa4\xaa\x3b\x1b\x63\xf8\xfa\xa8\xc9\xb7\xf7\x47\x8a\x6d\x29\x2c\xf5\x67\xd7\xad\xd8\x0e\x3e\x3d\xce\xe3\x86\xe0\x56\xb0\x26\xac\xa2\xd6\x18\xaf\x04\xa2\x0e\xb4\x16\x8b\x1d\xd0\x94\x6f\x68\xf6\x1f\xf1\xf1\xbf\x72\xea\xcb\x41\xcb\x4a\x16\xa3\x38\x96\x31\x86\x8c\x17\xac\x08\x6e\x15\x6b\xc2\xaf\xfd\x09\xd6\x45\xab\x7e\x07\x14\x56\x4e\xe9\xcd\xdc\xe9\x77\x8f\x8a\x94\x64\xd7\x5d\xb0\x6d\x73\x4a\xe4\xbd\xf6\x7c\x98\x47\xa7\xfd\x00\x0b\x82\xfb\x85\x35\x61\x0d\xf5\x8d\xbe\xd5\xa4\xee\x19\xbc\xea\x42\xd6\x07\x3c\x96\x51\x38\x7b\xed\xbc\xc9\x8d\xe9\xfc\x53\x64\x02\xbe\xaf\x7e\xba\xc7\x1b\xb5\x1f\x47\x70\x6b\xff\xad\x3c\xff\xda\xd3\xfe\x5f\x79\x7e\xef\x7f\x39\xaa\x8f\xd5\xec\xcd\x5b\x7f\x8d\xab\x13\xf8\x70\x04\x24\xc6\x3e\xd1\xad\xa4\x0d\x9d\x7d\x18\xcc\x73\xe9\xe4\xf7\x1e\xc6\xa5\x64\x6e\x04\xf7\x1b\xeb\x05\xff\xd9\x9f\xa0\x24\x79\x23\xe3\x06\x22\xa3\xee\xc1\xdd\x93\x7a\x86\xfc\xac\xbd\x32\x7f\xdb\x47\x2f\x6f\x7d\x65\xed\x75\x1e\xe1\x84\x02\x81\xe3\x08\xee\x0f\xd6\x84\x75\xd4\x3e\x12\xf7\x42\x40\x57\xd7\x31\x45\xa9\xb0\xdb\xe3\xb1\x0c\xac\x5c\x15\xdc\xe1\x62\xde\x51\x15\xeb\x16\x31\x71\x77\x36\x03\x0d\x4f\x21\xb8\x75\xac\x09\x1b\xfb\x13\xf4\x4b\xe4\xd2\x7e\x6d\xea\x4a\x35\xe7\xc8\x10\x3a\x74\x0d\x17\x5d\x93\xee\xa0\x8d\xfe\xac\x42\x29\xee\x1a\x6b\x11\x7a\x30\xdc\x16\xc1\x6d\x60\x4d\xd8\xdc\x9f\xc0\xb4\x6e\x76\xdc\x8f\x75\x8e\x60\xa3\xdd\x5d\xf6\xe2\x5c\xc1\xa1\x47\xf1\x54\xe7\x5a\xfa\x06\x83\x2b\xff\x24\xb9\x0a\x27\x09\xc9\x23\xb8\x4d\xac\x09\x5b\xfb\x13\x58\x1c\xb4\x82\x9a\xd8\x9c\x0a\x32\x7f\x68\x72\x4f\xbc\x30\x9c\xe5\x6e\x9d\x65\x11\x5c\x68\x7b\x6d\xc7\xa7\xb4\x39\x58\xdd\x75\x0e\xc1\x6d\x61\x4d\xd8\xde\x9f\x40\xf1\x7c\x39\xa3\x97\x59\x26\x51\xe8\xa5\xa6\xa6\x7f\x88\x13\x2b\xbe\xec\xcf\xdc\xa8\x9a\x44\x81\x21\x03\xcf\x9e\xa1\x03\x40\x17\xc1\x6d\x63\x4d\xd8\xd9\x9f\x30\x84\x4f\xf2\xe0\xf3\x4d\x9e\x57\x91\x87\x5b\x8b\x8f\x46\x9f\x4a\x3d\x4f\x4b\x34\x8c\x53\xbc\x92\xb4\x6c\xf2\xee\xb6\xb8\x5c\xba\x1a\x82\xdb\xf9\x6f\x87\x6d\xff\xd2\xe2\x50\x87\x6d\x5f\x86\xbf\xf0\xc6\x6f\xd9\xbc\xc4\x7b\xc6\x6e\x44\xad\x5b\x75\xe5\x5c\xd5\xab\xb4\x2d\xd7\xe1\x9f\x57\xec\xf8\xa5\x89\xa4\xe3\xc2\xff\x86\x14\xdd\x1f\x84\x71\xe2\x9d\xe1\x57\x91\xf9\xd5\x95\x60\x34\x6d\x81\xff\x25\x31\xe0\xc1\xe2\x91\x33\x85\xa4\xbf\xa5\x02\x1f\xc9\x9d\xf8\x6b\xa8\x87\xf7\x22\x67\x75\xcb\x12\x4f\x17\xf3\x8b\x32\xd2\x7e\xd3\x51\x43\xef\x84\xf1\xb8\x65\xbf\xdc\xc7\x0d\x24\x1c\xfc\xb1\xc7\x22\xfe\xfe\xd7\x8c\x5e\xc7\x4f\x04\x18\x35\xab\x68\x09\x3e\x9b\x1b\x73\x78\xf0\x49\x44\x66\xed\xf4\xcd\x44\xbd\xcf\xcd\x1c\xf4\xbf\x26\xe3\x6e\xfc\xfd\x02\xfe\x8c\x44\x2d\x28\x0b\x7b\x11\x8a\xf7\x57\xbe\x10\x63\x72\x21\xbb\x36\xe6\x4a\x9b\xa8\x2a\x15\xf3\xf2\x05\x45\xa4\x1d\xac\x29\xff\x6b\xe8\x8f\x91\x6c\xeb\xf3\x11\xeb\x7e\xdd\x61\xdb\xec\x29\x30\x27\xbe\xbe\x2c\x68\xf6\xf9\x66\xaa\xcd\xb7\xda\x42\xcf\xf7\x9f\x5a\xfe\x3e\xc2\xd3\xfa\x11\x91\x98\xfa\xab\xcb\xa9\x37\x78\x42\xef\xe6\xf9\x83\xc9\x6e\x07\xe2\xa7\x1d\x2c\x18\xcb\x16\xdb\xed\x2a\xaf\x77\xd2\x0d\xfc\x35\x34\x7c\x40\x67\xe3\x7b\x68\xac\xe8\xe0\xc3\x1a\x11\x0e\xa9\xe1\xdf\xc2\x45\x3a\xd5\x1c\xb9\x94\x0c\xbd\x65\xac\x4a\xb3\xb7\xac\x04\xfc\xdb\x88\xff\xff\xbd\xab\xff\xdf\x0c\x06\x01\x4a\x61\x3b\x67\xbc\xc2\x8f\xe3\x74\xe3\x55\x9b\x5d\xae\x60\x29\x73\x2c\xa0\x1e\x8c\x4b\x6f\xc8\x1c\x08\x7d\xde\x0f\xd3\x75\xdc\xa9\x4c\x10\x08\xb0\x3a\x6c\x10\xa0\x24\x36\x66\x98\xf8\x9e\xc0\xde\x4b\x5d\x66\xee\x5a\xcd\x4c\x5b\xb7\xb6\xe4\x29\x20\xdc\x26\x10\xda\xe8\xfe\xd6\xf2\x40\xd3\x40\x05\x35\x02\x01\x56\x8b\x0d\x02\x94\xc6\xe6\x76\x74\xdc\xa2\xeb\xac\x24\xe7\xc8\x8e\x46\xfd\x41\x85\xd9\x94\x34\xef\xe8\x15\x9c\xc2\x3b\xda\xdb\x04\x03\xf2\x29\xdf\x97\xec\x10\x08\xb0\x7a\x6c\x10\xa0\x44\xb6\x5b\x82\x27\xd7\xa5\xf1\x19\x4e\xaa\xa4\x18\x33\x46\x79\x95\x5d\xde\xa6\x5a\x72\xf5\x95\x66\xaf\x1e\x38\x0c\x67\xbb\xcc\x7d\x01\x02\x01\x56\x93\x0d\x02\x94\xca\x16\x93\xab\xd5\xe0\x45\x1d\x49\x3d\xee\x99\x1e\x47\xf1\x20\xaf\xa3\xe6\xe3\x60\xc1\xdc\xd9\x37\x37\xf2\x66\xa3\x09\x69\x87\x81\x3c\x02\x01\x56\x97\x0d\x02\x94\xcc\xf6\x6e\xd0\xed\xfc\x80\x84\xeb\xcd\xe5\xc8\x1a\x3a\xb5\xd8\xf3\xe7\xfc\x86\x05\xf4\xe7\xae\xb5\x85\x3f\x1c\xa9\xa6\xc0\xe7\x20\x33\x45\x20\xc0\x6a\xb3\x41\x80\xd2\xd9\x4c\x35\x9c\x68\xe8\xa7\x7f\xde\xb7\xdd\x7c\x63\x2d\xee\x55\xa6\xe8\x9a\xb9\x15\x3f\x80\x63\x1f\x6c\x55\x5e\xff\xd5\x68\x61\x4b\x8c\x40\x80\xd5\x67\x83\x00\x25\xb4\x9d\x2a\x09\xd0\x5c\xec\x75\xb3\xa1\x9f\x64\xbb\xd7\x73\x89\xd4\xfe\x01\xc9\x45\x36\x2a\x06\x26\x4e\xeb\x14\x8f\xa9\x4b\x89\x2b\x34\x08\x04\x18\x8d\xb6\xbd\x32\xfd\x6b\xde\xd9\x2b\x13\x4a\x69\xe3\x0a\xa4\x08\x1f\xf3\x30\x7a\x5c\xab\xd9\x37\x5a\xc9\xd4\x15\xbe\xae\xf1\x4b\xe5\xb2\xbd\xb4\xc8\xc3\xf3\x7f\x32\xba\xfa\x3a\x38\x11\x08\xb0\x3a\x6d\x10\xa0\xa4\x36\x62\x96\x3f\x69\xd3\x57\xdc\xcc\x9f\x14\x1a\xae\x69\x4d\x2c\xa6\xd7\x96\x88\x3a\x7e\xda\x4c\x88\x0f\x4a\x3b\x68\x48\xc9\x37\xb9\xfb\x01\xc1\x6a\xb5\x41\x80\xd2\xda\x14\x58\xb4\xa8\xf2\x49\x8e\x7f\x8c\x39\x26\xe5\xf2\xe1\x76\xe0\x0a\x63\xc8\x8a\xcd\x1c\xf9\x94\x0f\x72\x32\xdb\x80\xfd\x5d\xef\x79\x04\x02\xac\x5e\x1b\x04\x28\xb1\xed\xb5\x86\x18\x6b\xf5\xab\x32\xff\x90\x9e\x1a\xd2\x61\x4f\x4e\x9a\xeb\x6e\xda\x47\xf1\x7f\x9c\x8a\x39\x61\xbc\x3a\x36\xe5\x71\x79\xf7\x43\x88\xd5\x6c\x83\x00\xa5\xb6\x95\xbf\xac\x4a\xbb\x1d\x7d\xf2\xba\x7c\x83\xc8\x60\x2d\x10\x1c\x6a\xba\xf1\xab\xd8\xc1\x9d\xee\x6c\x39\x3d\x31\x7d\x87\xd5\xd6\x75\x04\x02\xac\x6e\x1b\x04\x28\xb9\x2d\x5f\xfd\xc0\x47\xb3\x4f\xb9\xb5\x41\xa5\x11\x45\x56\xd9\xac\x4d\x09\x31\x3e\x6a\xdc\x0a\xe2\x6d\x31\x3f\x63\x8f\xcc\x65\x08\xf2\x23\x10\x60\xb5\xdb\x20\x40\xe9\x6d\xea\x4f\x1d\x76\xa2\x3e\xe7\xbc\x52\xec\x20\xfc\x76\x42\xb6\x02\xe7\x10\xf5\xe1\xb8\xe9\xc8\x5a\xf3\xb9\xfb\xf7\xef\x23\x0f\x1d\x4e\x23\x10\x60\xf5\xdb\x20\x40\x09\x6e\xaf\x26\x27\x72\xdd\xbe\xdc\x49\x49\xca\x2d\xea\xd7\x33\xd5\x93\xff\x1a\x75\xb1\x91\xb4\xec\x34\xa9\x53\x82\x43\x8b\x07\x91\x9a\x36\x02\x01\x46\xc3\x6d\xaf\x4c\xff\xba\x33\xef\x95\x09\xa5\xb8\x0d\xdd\x79\xac\xfa\x5a\x54\xcd\x8c\x6f\x23\x8a\xbe\x61\xe4\xee\xf1\x1e\x7d\x33\x01\x64\xf9\xe2\x90\x6a\xe0\xcb\x23\x73\x11\xb1\x66\x08\x04\x58\x1d\x37\x08\x50\x92\x5b\x1e\x79\x11\xb5\xde\xc0\x2d\xc7\x86\xf7\x82\x7a\x8a\x94\x3c\x71\xb7\x55\x3e\x4a\xc4\x95\x2b\xcd\x80\x5e\x5e\x22\x6f\xf5\x4d\x76\x04\x02\xac\x96\x1b\x04\x28\xcd\x0d\xef\x08\xeb\xd7\xc7\xe1\x3d\x72\x91\x59\x77\xfc\xc3\x42\x9e\x1d\xcb\xa8\x6c\x29\x6d\x31\x7f\x7b\x25\x24\x4f\x71\xf8\xdb\xe7\x5c\x4d\x04\x02\xac\x9e\x1b\x04\x28\xd1\x8d\xff\x81\x70\xfa\x89\xe0\xeb\x5a\xfc\xb3\xf7\x5d\x7e\xa9\xde\x71\x10\x6b\x73\xad\x16\xd3\x15\xec\x6f\xff\x9c\xe7\xf9\xdb\xa0\x46\x02\x81\x00\xab\xe9\x06\x01\x4a\x75\xe3\xc1\xe5\x1c\xed\xf9\xc0\x7d\x43\x9c\xa5\x4b\x72\xae\xd7\xf8\x88\x42\x49\xd9\xb7\x72\x5b\x3b\x76\x13\x6a\xe3\xbb\x52\xd6\x96\x94\x08\x04\x58\x5d\x37\x08\x50\xb2\x5b\xd6\x16\xe3\x0e\x8e\x33\x98\x56\xcc\xf8\x42\x74\xda\x27\x26\x13\x49\xb3\xe5\xdf\x9b\x60\xda\xfe\x43\x4c\xde\x08\xa9\xa2\xcc\x6e\x06\x56\xdb\x0d\x02\x94\xee\x66\x60\xba\xc4\x99\xec\xa0\x26\xaa\x14\x20\x7a\x52\xd0\x38\xa5\x62\xd4\x92\x2a\xbb\xd1\xf4\x8d\xc0\x72\xb6\xd7\x64\xed\x52\xb4\x24\x02\x01\x56\xdf\x0d\x02\x94\xf0\xb6\xee\x57\x26\xd9\x13\x29\xc2\xd7\xa3\x63\xd2\x74\x9c\x52\x50\xca\x82\x91\x5a\xea\x21\x35\x0e\xc7\xb0\xb5\xb3\xcd\x6b\x49\x4b\x8f\x40\x80\xd1\x78\xdb\x2b\xd3\xbf\xd6\xae\x7b\x65\x42\x21\x6f\x46\x07\xde\xab\x3e\xee\xf2\x15\xcb\x9c\xa0\xf4\x4f\xa1\x5f\xb8\xa4\xe0\x88\xaf\x21\x78\xea\xde\x1b\x92\x87\x27\x66\xcc\xfd\xa9\x79\x10\x08\xb0\x2a\x6f\x10\xa0\x98\xb7\x04\x71\x92\xb2\x73\xc5\xbf\xc7\x7d\x79\xea\x23\x8a\x4f\x2d\x59\x93\x33\xbe\x3a\x7c\x96\x44\xd8\x22\x82\x9f\xe2\xdb\x0b\xca\xa3\xcc\x08\x04\x58\x9d\x37\x08\x50\xd0\x5b\x45\x9b\xaa\xdc\xf8\xd3\xd4\xa6\xea\x77\x83\x44\xc5\x16\xcb\x77\xe2\x5c\x49\x5d\x78\x57\x56\x05\x3e\x67\xde\xbf\x6a\x73\x82\x49\x0a\x81\x00\xab\xf4\x06\x01\x8a\x7a\xab\xd0\xae\x3e\xb2\x7d\x39\xc1\x0e\x74\x1f\xdd\xa0\xdd\x88\x74\x67\xa8\xd5\x25\xa7\xa6\x16\x31\x14\x8a\x3f\x31\x73\x5b\xc4\x86\x10\x81\x00\xab\xf5\x06\x01\x0a\x7b\xa3\x79\x11\x90\x34\xea\xb8\xf0\xd3\xed\xa6\xc1\x03\x83\x2a\xa7\x78\x85\xf7\xdf\x01\x33\x97\xe3\x09\xcd\x08\xde\x67\xdc\xef\xbf\xe1\x21\x10\x60\xd5\xde\x20\x40\x71\x6f\xe7\x4c\x73\xf9\x1c\x3f\x84\x4b\x99\x84\x66\xdf\x24\xf7\x99\x2d\x2f\xe8\xcc\x2a\x7a\x38\xa0\x3f\xc1\xa2\xf0\x9c\x78\xb3\xbd\xdc\x1e\x81\x00\xab\xf7\x06\x01\x0a\x7c\x7b\x14\x5d\x6f\x1c\x74\xb1\x5b\xf8\x30\x9b\x91\x54\xa7\xfa\xba\xbc\x2c\x27\xee\xfc\x24\xb5\xe2\x5c\x84\xae\x5c\x6f\xcb\xdc\xef\xe3\x08\x04\x58\xc5\x37\x08\x50\xe4\xdb\xcf\x63\xf7\xda\xfe\x44\x99\x53\x3a\x28\x33\x5e\x8b\xd7\x5b\x39\x4c\xdc\x70\x99\xfd\xb4\xdd\x9c\x81\xd2\x4d\x79\x6b\xc9\x2d\xd9\xdd\xc2\x62\x34\xdf\xf6\xca\xf4\xaf\xa7\xbb\xbd\x32\xa1\xd0\x37\xc1\xe8\x4e\x5f\x1a\x96\x06\x0e\x1d\xa9\x0f\xc7\x74\x09\x3b\x8a\x15\x13\x58\x7c\x00\xdb\xc1\xe6\xb3\x83\xd0\xca\xf5\x8e\x19\x0e\x81\x00\xab\xfa\x06\x01\x8a\x7d\x5b\x9e\x7f\x9d\x14\x27\x1b\x2c\x7b\xb6\xb3\x09\x97\x23\x5b\x96\x92\xfc\xde\xf9\x75\xa8\xd9\x57\x1a\x6e\xde\x11\x86\x09\xe7\x16\x5e\x04\x02\xac\xee\x1b\x04\x28\xf8\x6d\x96\x4c\x28\xea\xbb\xad\xdf\xa2\x27\xbd\xe2\xa4\xd1\x9f\x86\xb8\xc8\xe7\x71\xd2\x13\x27\x06\xf5\x1f\x14\x5e\xa6\x51\xee\x3f\x78\x11\x81\x00\xab\xfc\x06\x01\x8a\x7e\x1b\xd3\x7f\x42\xd9\x20\x4e\x1d\x1c\x46\x1c\xb4\x16\x67\x3c\x92\x15\x4c\x31\x75\xf2\x94\x9d\xdc\x4b\x9d\xb5\xbc\xbb\xdb\xd1\x7e\xd6\x08\x04\x58\xed\x37\x08\x50\xf8\x5b\xc3\x4a\xed\xa5\x63\x42\x31\x6e\xed\xbe\x89\x89\x17\xa4\xa6\x7c\xa9\x5a\x32\x85\x1c\xe5\x87\xbf\x0a\x6b\x10\x27\x3e\x53\x3d\x23\x87\x40\x80\x55\x7f\x83\x00\xc5\xbf\x9d\xa0\x15\xeb\x6c\x99\xff\xd1\xc9\x18\xc7\x7a\xb4\xad\xa6\xf0\xe3\x43\x4e\xbb\xe9\x67\xe1\xc9\xb3\x51\x9d\x09\x66\x7c\x5b\xd4\x46\x08\x04\x58\xfd\x37\x08\x50\x00\xdc\x9a\x05\xf3\xf6\xa3\xc2\xbb\x1d\x41\x71\x31\x3c\xe6\x5d\x07\x48\xd5\x32\x26\x2c\x3d\x6f\x59\xe9\x1c\x32\x0e\x71\x5b\xda\x98\xe7\x46\x20\xc0\x2a\xc0\x41\x80\x22\xe0\x4e\xc4\x94\x88\x2d\xd8\x72\xcb\x3c\x22\x6e\x4f\xcd\x36\x1d\x09\xa8\xc9\x35\x4d\x25\x4a\x3f\xeb\x4e\xf6\xf0\xc1\x94\x5c\xf9\x4b\x06\x04\x02\x8c\x06\xdc\x5e\x99\xfe\xb5\xff\xb1\x57\x26\x14\x02\xd7\x2d\xfc\x5b\x8a\xf6\x23\x5b\x8d\xd5\xca\xf6\x96\xc1\xbd\x12\x1a\x9a\x1c\xbc\xaf\x31\xa2\x39\xdc\x71\xa1\x7d\x78\x76\xf7\xa5\xc4\x11\x08\xb0\x2a\x70\x10\xa0\x18\xb8\xc3\xef\xa9\x19\x28\x68\x3a\x62\x7f\xc6\x2b\x67\xa8\x8a\xd9\x6a\xa9\x7c\x7c\x7a\xd4\x77\x30\x63\xf2\xc8\xc8\x86\x79\xc0\x05\x5d\x6a\x04\x02\xac\x0e\x1c\x04\x28\x08\x8e\xde\x6a\x78\x64\xbd\xe6\xbb\x29\x51\xfe\xd2\x01\xda\x32\x2e\xbe\xa6\xc8\x47\x86\xdf\x0c\x52\x77\x4e\xdd\x31\x22\x4d\xbe\x61\x28\x82\x40\x80\x55\x82\x83\x00\x45\xc1\xbd\x27\x16\x78\x9c\xd1\xde\x26\xf1\xee\x52\x6b\x57\xf1\xf5\xa9\x33\x1e\x22\xfa\x45\xc8\xe4\x19\x9d\x2c\xcd\x6f\x57\xf3\xf5\x88\x2f\x20\x10\x60\xb5\xe0\x20\x40\x61\x70\x2f\x5e\xe4\x59\x52\x09\x90\x06\x6e\x4f\x38\x99\x4e\x12\x64\x10\xfb\xbf\xd7\x19\x2b\x22\xba\x83\x13\x6c\x24\xf6\xa6\x2c\xc9\x73\x46\x20\xc0\xaa\xc1\x41\x80\xe2\xe0\x82\xcb\x55\x5c\x6f\x1f\x50\xfa\x19\xdd\x70\x20\xd7\x43\x3d\xfe\x45\x73\xa0\x4e\xd4\x2a\x3e\xee\x6e\x85\xfd\x40\xc6\x7d\xa5\x13\xba\x08\x04\x58\x3d\x38\x08\x50\x20\x5c\x3a\x43\xdd\x69\x7b\x8a\xc4\x35\x01\xed\x44\xff\xee\xcb\x34\xf4\xd6\x4b\xfd\x97\x44\xd5\x7e\x36\x15\x5c\x15\x38\x45\x30\xe2\xb3\x3b\x49\x63\x15\xe1\x20\x40\x91\x70\x6a\xf5\x64\x5f\xb7\xad\x4d\x13\xea\x1f\xde\xe6\xc6\x43\xae\xe7\x88\xf2\x08\x4c\xaa\xa7\x8c\xbc\x5b\x6a\xea\x63\xb4\x48\x6e\x24\x42\x20\xc0\x68\xc2\xed\x95\xe9\x5f\x3b\x84\x7b\x65\x42\xa1\x70\x43\x7e\x2a\xa4\x41\x1f\x53\xe4\xb2\xf3\x8e\xaa\x48\x73\x71\xfd\x5e\xaf\x22\x61\x3a\x93\x22\x49\xf0\x8d\x9f\x56\x4c\xb5\xeb\xfc\xee\xb3\x06\x56\x15\x0e\x02\x14\x0b\x37\xc8\xb0\xcc\xd4\xee\x36\x4a\x5b\xa9\x2f\x1c\x44\xaf\x32\x51\x2f\x3f\x1f\x4b\x10\x6e\xb2\x69\x62\xe2\x5e\xac\xf3\x81\xe1\xd3\xee\x07\x1d\xab\x0b\x07\x01\x0a\x86\x13\x79\xbd\x78\xfb\x0d\x8d\xb8\xbf\x46\xb4\x57\xc9\xb3\xae\xd4\x33\x8d\x2a\xf9\x61\x19\xae\x0e\xb6\xe7\xf1\x7a\x7c\x47\x15\xf2\x69\x10\x08\xb0\xca\x70\x10\xa0\x68\x38\xb7\x99\x11\xae\xbb\x97\x82\x67\x7e\x86\x26\xe3\x3f\x0c\x79\x7c\x44\xec\xf0\xed\xa7\x77\xc8\x3f\x9f\xde\x22\x81\xeb\xa7\xdb\x5d\xf9\x10\x08\xb0\xda\x70\x10\xa0\x70\x38\xc1\x9c\x2f\x6d\x9e\x4d\x27\x3b\x16\x0b\xb6\x28\xf4\x72\x57\x9c\x3f\x76\x38\x15\x5e\x15\x5c\x9e\xed\xb4\x71\xfe\x36\x90\xf1\xd0\x02\x81\x00\xab\x0e\x07\x01\x8a\x87\x33\x4e\x10\x36\x58\xeb\x95\x3c\x96\x41\x73\x0e\x61\xec\xe3\x3e\x61\x46\x24\x10\x30\xfa\xf2\x0c\x68\xb6\x39\x4f\x12\x69\x4d\x7a\x16\x81\x00\xab\x0f\x07\x01\x0a\x88\xeb\x1c\xf0\x32\x6c\xfd\x40\x31\xfa\xe8\xb9\xd5\x63\x52\xa2\x51\x49\x01\x71\xae\xf3\x84\x67\x7b\x34\x75\xaa\xb2\x59\x4d\x63\x4f\x39\x22\x10\x60\x15\xe2\x20\x40\x11\x71\x7d\x5d\x1b\xf9\xa7\x7b\x5d\xa2\x16\x63\x2e\x4a\xb5\xfa\x12\xae\x8b\x2f\xf5\x8b\xb2\xf5\x52\xfb\xc7\xd2\xbd\xd4\xd0\xbb\xff\xe1\x18\x02\x01\x46\x23\x6e\xaf\x4c\xff\xda\x43\xdf\x2b\x13\x0a\x89\x5b\x24\x9a\xe7\xd1\xd7\x8a\x14\x12\x5d\x65\xe1\xdf\xd9\x6c\x5d\xe5\x78\xeb\x2b\x75\xad\x2e\x7b\xbe\x6a\x54\xae\xd7\xf9\x75\x19\x23\x02\x01\x56\x25\x0e\x02\x14\x13\xf7\x47\x83\x89\x45\xae\xd1\x77\x86\x7f\xe2\x8d\xbd\xc2\x44\x0f\x95\x53\xa4\xeb\x43\x9e\x90\x2b\xbd\x02\x2f\x9a\x2f\x70\xb1\x9c\xda\x9d\x09\xb1\x3a\x71\x10\xa0\xa0\xb8\x65\xb5\x2b\x55\x01\xe3\x0b\x09\x36\x23\x62\x5e\x4a\x0c\x3b\x97\x0f\x09\xca\x71\xb3\xdd\xb6\xeb\x7e\xaf\x79\x2b\xe8\xa5\x66\xb5\x00\x02\x01\x56\x29\x0e\x02\x14\x15\x47\x74\x9e\xe9\xca\xcf\x81\xb6\x2f\xc7\x78\x57\x0f\x29\x6f\xd7\xde\x38\x55\x5d\xf7\x2a\x83\xe9\x52\xb9\x78\x0d\x5e\x10\xde\x61\x65\x1d\x04\x02\xac\x56\x1c\x04\x28\x2c\x4e\xed\xe5\x83\x90\x52\xdf\x7a\x01\xba\x40\xcb\x52\x05\x36\x2a\x01\x55\xa1\x60\xa1\x0b\x97\x11\x6d\xa3\xa8\xb5\x98\x73\xcc\x5a\xf2\x08\x04\x58\xb5\x38\x08\x50\x5c\x9c\x83\x16\xeb\xb3\x8d\x17\x2b\x5b\x12\x04\x1a\x96\xe2\x5a\xcc\xbd\xdd\xe6\x2a\x4c\xf7\x9a\x43\x65\x92\x4d\xad\x26\xad\x0f\xbd\xd9\x5d\x29\x60\xf5\xe2\x20\x40\x81\x71\x02\x72\xd4\x8d\x7d\x02\x54\xcf\x17\x69\x4c\x02\x8b\xb7\xbf\xdf\x9b\x9d\xa1\x51\x49\x4b\x9a\x15\xd3\x4b\xce\x4e\x13\x89\x90\x77\x41\x20\xc0\x2a\xc6\x41\x80\x22\xe3\x7e\xcf\x5e\x33\x71\x4e\xfb\x72\xad\x43\xe5\x59\xac\x14\x8b\x77\xf4\x56\x47\xde\xf4\x8f\x83\x88\x0c\x8b\x89\x78\xfe\xc1\x97\x52\x4e\x08\x04\xff\xd1\x8c\x93\xe7\x9b\xe6\xb0\x2c\x25\x92\xff\x4c\x64\xd2\xf6\xc2\xa2\xdc\x94\x2f\xf1\x82\x92\x7c\xed\xc1\x8b\xc6\x64\x65\x66\xa5\xf4\x34\xb2\xa8\xc3\xbe\x77\x85\xe2\x22\x97\x63\x03\xe7\x77\x8a\xb7\x68\x48\xe3\xde\xa6\x89\xf9\x3d\x54\x54\xea\xb2\x5d\x7e\xc3\x16\x40\x61\xc6\x46\xd0\xf8\xd7\x50\xa2\xd2\x71\xea\x96\x73\x89\x2f\x47\x7b\x9a\xb2\x1f\x9e\x5d\x72\x31\x3f\x99\x72\x9e\xb1\xbe\x26\xb9\x2d\x20\x21\x48\xa8\xbb\x7e\xe9\xaf\xa1\x5e\xa7\x52\x1a\x6b\x5e\xac\x84\x37\xf1\xb3\x7b\x1e\x9d\xb2\x20\x6f\x68\x22\x8e\x97\x17\x11\x20\xe9\xab\xc0\x05\x7b\xe5\xcf\xbd\xfa\x6b\x28\x9d\x1b\x9e\x55\xed\xe5\xae\xb9\xcf\x01\xf6\x3f\x28\x0f\x3d\x58\x97\xf1\x78\xe0\x3c\x12\x3e\xef\x78\x1a\xa9\x5f\xe2\x29\x79\xa8\xf7\xd7\x50\x1b\x8f\x39\x59\x51\xba\xd3\x27\x98\xcc\xbe\x68\xbf\x52\xd5\xf1\xba\x79\x49\x8c\xc1\x61\x45\xb9\x94\xe9\x57\x4a\x38\x6f\xd9\xe2\xf8\x5f\x43\x0f\xdd\xbc\x63\xd3\xf5\xd8\x99\x33\x86\x1d\xaf\x37\xc1\xd7\xab\xb2\x25\xe5\xfa\x9d\xb7\x93\x3f\xc4\x1f\x91\xd8\x65\x54\x67\x0b\x7d\xf9\x6b\xa8\xaa\x52\xe6\xa4\xe5\xbb\xcd\x2b\x22\x3c\x32\xa2\x61\xc2\x37\x68\x82\xdf\xa5\xca\x28\x73\x31\x1d\x11\x0a\x29\xa4\x65\xac\xfc\xe0\xf7\xf7\x65\xd5\xaa\xdd\xaa\x11\xd0\xef\x7c\x2d\x4a\xa7\x45\x66\xc6\xf4\x40\x64\xe5\xd4\xaa\x61\x71\xff\x68\x81\xc8\xda\xa1\x7e\xd6\xde\x4f\xff\x77\xd8\xf7\xaf\x77\x75\x6f\x46\x43\xa1\x71\x13\x8c\x37\x3d\xed\x1e\x96\x77\x17\x79\xe3\x87\xc6\x7e\xd2\xac\xb0\xaa\x8b\xdb\x91\x51\xfd\x34\x23\x39\x21\x66\x38\xa3\x96\xa5\x8e\x40\x80\x55\x8d\x83\x00\xc5\xc6\x8d\xfc\xa6\x5a\x70\x51\x59\xe2\x63\x75\x3a\x80\xb7\x40\x54\x48\x36\x61\xb3\x54\x34\x7b\xbd\x0e\xca\x0a\x5f\x67\xad\x13\xe4\xda\x5d\x3f\x62\x75\xe3\x20\x40\xc1\x71\x89\x47\x08\x78\xbf\xdf\xfa\x5a\xfc\x76\xe9\xea\x7b\xda\x5a\xdd\xf7\x86\x94\x26\x24\x5f\x91\xcf\x34\x1e\x47\x45\x52\xb9\xed\x97\x2d\x11\x08\xb0\xca\x71\x10\xa0\xe8\xb8\x0a\x6e\x1a\x37\x69\xde\x43\x7a\x83\x78\x36\x6c\xba\xfa\x4e\x1f\x8b\x06\xd5\x77\xfc\xbe\xdb\xe7\x70\x86\x85\x93\x5d\x89\xfe\xb0\xbb\xb6\xc3\x6a\xc7\x41\x80\xc2\xe3\x24\xd7\x99\x3a\x07\x55\x88\x7f\x4f\x87\xa7\xda\xbc\x1a\x57\x3f\xa9\xd6\x3e\xc4\xf0\x20\x9b\xc6\x81\xac\x22\x6a\x3d\x0b\xbf\xf2\x32\x02\x01\x56\x3d\x0e\x02\x14\x1f\x47\x19\xf5\xf3\x37\xf5\x8b\xbc\xbb\xe0\x5b\xed\xa1\x53\xe7\x56\x9c\x99\x64\xc5\xc5\xf0\x06\x56\x09\x9c\x80\x49\xe9\x8b\xab\x2a\xf6\x08\x04\x58\xfd\x38\x08\x50\x80\xdc\xdd\x0b\x5d\xd9\x4d\xa6\x4a\xaf\x9b\x6e\x0e\x94\x39\x13\x8c\x5b\x07\xde\x6f\xba\xde\x7b\x77\x3d\x6e\x24\xb1\x99\x98\xc7\x54\xed\x2a\x02\x01\x56\x41\x0e\x02\x14\x21\x37\xee\x59\x50\x70\x38\x24\xc5\x4d\xcd\x26\x51\xf9\xed\x5b\x3a\x96\x40\x32\x09\x8d\x87\x81\xdf\x69\xef\x55\xea\x17\xb1\x14\x04\xf0\x20\x10\x60\x34\xe4\xf6\xca\xf4\xaf\x79\x67\xaf\x4c\x28\x44\x4e\xe4\xc3\x82\x82\x22\xab\xfd\xe4\x8a\xa5\x5b\x9a\xe8\xb3\xab\x62\xc4\x12\xf7\x1c\xca\x0c\xbb\x6a\xec\x9f\x48\x46\xe3\x2b\x88\xec\x7e\xd0\xb1\x2a\x72\x10\xa0\x18\x39\xbb\x6e\x19\x7e\x67\x3a\xaa\x28\x89\xb5\xa4\xab\xd4\x46\xa6\x3f\xcf\x14\x12\xab\x28\x6f\x5d\x5e\xbd\x36\x67\x56\x38\xef\x01\x77\xd7\x5d\x58\x1d\x39\x08\x50\x90\x5c\xdf\xd0\x95\x2b\x3f\xe2\x3b\x14\xe3\xbe\x9d\x65\x12\x0c\x74\xa6\xbb\xd9\x3b\x5e\x75\x4e\xe6\x92\x6a\xc4\xb9\xe2\x13\x91\x75\x9a\x72\x08\x04\x58\x25\x39\x08\x50\x94\xdc\xa2\x41\xdd\xb9\xcd\xf0\xcd\x49\xe4\x58\xbb\x78\xfd\x25\xc6\x78\xe4\x9a\xbe\xf7\x54\x5c\xd7\x94\xd6\x60\x03\x53\x4e\x8b\x00\x40\x20\xc0\x6a\xc9\x41\x80\xc2\xe4\x8c\xce\x3e\xce\xe5\x29\xa1\xb3\x39\x27\xaa\x47\x92\xe4\x7e\x56\xe4\xe1\x8f\x95\x9b\x83\xc4\xb2\x8a\xb5\xa9\x9d\x51\x83\x23\xdc\xd6\x08\x04\x58\x35\x39\x08\x50\x9c\xdc\xbc\xba\xa2\x10\x8b\x7e\x75\x84\xec\xab\x23\xa7\x9d\x8c\xa9\x2a\x88\x7e\x18\x1c\x6f\xdb\x7c\xb7\x50\x7f\x79\x3a\x47\x33\x85\x58\x08\x81\x00\xab\x27\x07\x01\x0a\x94\x8b\x24\x11\xd0\x67\x9f\x1f\xb9\xeb\x13\xf8\xac\xaf\x46\x5d\xe1\xf5\x44\x22\x42\x68\x9f\x7c\x19\x9f\x52\xa4\xe6\xe4\x0c\x6e\x9e\x17\x81\x00\xab\x28\x07\x01\x8a\x94\xcb\x14\xfc\xbc\x29\x67\xdf\xca\xd3\x71\x99\xfc\x35\x5d\xeb\x7a\x68\xe2\x63\x66\x09\xab\xc3\xe3\x41\x8b\xc9\x02\x48\x02\x2f\x9f\x14\x02\x01\x46\x53\x6e\xaf\x4c\xff\xba\x33\xef\x95\x09\x85\xca\xd9\xea\x59\x0e\x49\x98\x77\xb7\xc6\xf3\x8f\x45\xbc\xbf\xb1\xe8\x95\xfb\x47\x40\xeb\x03\x1b\x17\xd0\xfc\x85\xaf\xac\x37\x78\xd4\x00\x81\x00\xab\x2a\x07\x01\x8a\x95\xfb\x21\x25\xcf\x3d\x44\x1f\x5e\xce\xac\xa4\x76\xf4\x68\x3f\x95\x4e\xe8\x3d\x3f\x2d\x49\xf9\x8d\xf1\xd5\xae\x15\x87\xd4\xda\xfe\x6b\x08\x04\x58\x5d\x39\x08\x50\xb0\x9c\x07\x81\x5d\x46\x97\xfb\xdb\x74\x03\x2f\x32\xfe\x2b\x0b\x94\x5f\xa1\x00\x1e\xeb\x78\x62\x2d\xbc\xe0\x40\xa8\x57\xe1\x48\xc0\x81\x40\x80\x55\x96\x83\x00\x45\xcb\x11\x8a\x12\xb1\x1f\x74\x31\x7f\xc1\xfe\x48\xa2\x53\xfd\xfa\xb1\xf2\x28\xe7\x67\xca\x49\x64\x69\x43\xd5\x05\x99\x94\xa3\xc2\x22\x24\x08\x04\x58\x6d\x39\x08\x50\xb8\x9c\x95\xf2\x3d\x71\xcb\xdf\x9a\x82\x4f\xf1\x2d\x2d\x87\x5f\x64\xb5\x72\xd9\xdd\xbc\xde\xfb\x43\xb7\xd2\xab\xde\xbb\x70\x92\xd6\xe1\x38\x02\x01\x56\x5d\x0e\x02\x14\x2f\xd7\x2d\x63\x7d\x6e\x38\x3a\xf0\xfc\xc5\x55\xf0\xde\xdf\xfe\x62\xe1\x52\x08\x89\x1c\x2b\x5f\x5e\x31\xd5\x79\x5e\x09\x33\xa1\x03\x67\x10\x08\xb0\xfa\x72\x10\xa0\x80\x39\xd9\xc9\x1c\xe5\x5c\x35\xdd\x21\xce\x88\xdf\x03\xdf\x8d\xc3\xd7\xda\x67\xca\xf3\xca\xe4\xed\xbc\x25\x7c\x7a\xd4\xd8\x9b\xa2\x76\xd7\xda\x58\x85\x39\x08\x50\xc4\x1c\x83\x86\x45\x37\x5d\x47\x7e\x1c\x6c\x29\x1f\x26\x35\x3e\xf4\xfe\x7a\x52\xe1\x9b\x00\x3f\x07\x77\xb3\x76\xcf\x63\xdb\xb7\x56\x77\x27\x50\x8c\xc6\xdc\x5e\x99\xfe\xb5\x76\xdd\x2b\x13\x0a\x99\x13\x37\x28\xaf\xca\xb8\x54\x67\xf8\xc8\x76\x8d\x66\xa6\x9b\xb9\x3e\x8a\xdf\x4a\x70\xb2\x80\x99\x74\x44\xbd\xff\x04\xa7\xfa\xd4\xee\xad\x12\xab\x32\x07\x01\x8a\x99\x93\xb8\xf7\xb9\x42\x3b\x4a\xf3\xd9\xf4\x6f\xb2\x65\x72\x07\xb6\x5c\xd3\x85\x5f\x01\xbe\x95\xc2\xa7\x46\x2d\x8f\xfa\xc4\x66\xe9\x69\x21\x10\x60\x75\xe6\x20\x40\x41\x73\xe2\xf4\x85\x71\x53\xcb\x84\xba\x8a\x1c\x7e\x2c\xae\xbe\x31\xaf\x1a\xcd\x0d\x11\xc9\x1f\x47\x4d\x48\xd6\x17\xaf\x0c\x31\x51\xb1\x22\x10\x60\x95\xe6\x20\x40\x51\x73\xf7\x2a\x19\x7d\xe9\x53\xce\x94\x71\xfb\x9d\x79\x41\x39\x56\x36\x95\x9a\x75\xf5\x51\x89\xdb\x57\x6a\x3a\x67\xc5\xac\x67\x29\xb7\x76\x0b\x8b\xd5\x9a\x83\x00\x85\xcd\x85\x3e\xb7\xf5\xa5\x51\x45\x04\xef\x3c\x50\x1b\x16\x09\x3d\x22\xaa\x73\x99\x7c\x26\xfc\xa2\xb0\x27\xed\x3a\x65\xc0\x6a\x6b\x09\x1d\x02\x01\x56\x6d\x0e\x02\x14\x37\xc7\x15\xa5\x30\xdd\xf1\x69\xb3\x81\x47\x6a\x35\x21\x99\x9c\x28\x23\xb5\x9b\xef\x90\xb7\x6e\x67\xc4\x81\x81\x72\x01\xcf\xa2\xfa\x13\x08\x04\x58\xbd\x39\x08\x50\xe0\xdc\xa8\xb3\x56\xb1\x9a\xf2\x58\x1b\x6b\xd9\x57\xbd\x1d\x29\xb3\x9f\x3e\x6e\xed\xbf\x6e\x9e\x45\x8e\x1d\x31\xcf\xfd\xfe\x50\xba\xfe\x18\x02\x01\x56\x71\x0e\x02\x14\x39\xf7\x8a\xfb\xaa\x1b\xe0\xdf\x2c\x0b\x5b\x0b\x28\xdc\x98\x3b\x1b\xd9\xa7\x2b\xd8\x02\xf0\x0b\x94\xdf\x0c\xe3\x46\x58\x9f\xa4\x28\x22\x10\x60\x34\xe7\xf6\xca\xf4\xaf\xa7\xbb\xbd\x32\xa1\xd0\xb9\x23\x4b\xcf\x0b\xa9\x95\x7c\x0b\x09\xde\x46\x66\xda\xc9\x66\x95\x6e\x1c\xb9\xe9\x79\xe0\xf7\x09\xfa\xa7\xb9\x32\x4d\xf7\x9d\x4f\x5e\x47\x20\xc0\xaa\xce\x41\x80\x62\xe7\xd2\x5e\xaf\xfc\x20\xb7\xfc\x7c\xf2\xd4\xc7\x4c\x1e\xd2\xcc\x4b\x53\x78\x12\xc9\x45\xa7\xdb\xae\xd8\x94\xe6\xdf\x2b\x20\xbe\xe7\x4e\x8d\x40\x80\xd5\x9d\x83\x00\x05\xcf\x35\x99\xfa\xf6\x37\xe8\x4b\x1f\x9f\x7a\xe9\xce\x15\x6a\xb1\x4a\x32\x2d\xfa\x67\xf9\x8d\xd8\xc3\x00\x3e\xe1\xc7\x83\xa1\x9b\x25\x76\x08\x04\x58\xe5\x39\x08\x50\xf4\xdc\xd5\x02\x9d\x5c\x62\x3e\x37\xc5\x47\x47\x8b\x52\x73\x47\x37\xc2\xcb\x26\xaf\x50\xa9\x2c\xcc\xd6\x3c\x34\xc9\x68\xc9\x92\xa4\xd8\x7d\x9e\xc1\x6a\xcf\x41\x80\xc2\xe7\x9c\xef\x89\xe7\xba\x1d\xb7\xb3\x65\xc3\xe7\x39\xfb\xcb\x73\xe7\x75\x9e\xb8\x56\xca\xb9\x1c\x27\xe9\xac\x11\xef\x39\xa5\xac\x56\x4d\x04\x02\xac\xfa\x1c\x04\x28\x7e\x4e\xa7\x99\x9a\x98\xdb\x37\x7d\x3b\x69\xfb\xfc\x6b\xb1\xb4\x0f\x5c\x2f\xdd\x65\xae\x67\x93\x2b\xe8\x7e\xdc\x4e\xfb\x2e\x2a\x7d\x71\xf7\x83\x8e\xd5\x9f\x83\x00\x05\xd0\xa5\x25\x57\xcc\x1c\x95\x24\x36\x3e\xee\x1b\x8d\x13\x6b\xd5\x4d\xb5\x7a\x36\x2a\x31\x44\x67\x21\xd4\x4b\x39\x78\x67\x4b\x7c\x99\x1e\x81\x00\xab\x40\x07\x01\x8a\xa0\x53\x89\x2e\x0c\x99\xad\x5d\x51\xbc\xb4\xe0\x34\x12\xb8\x93\xe5\xde\x75\x64\xc7\x81\x19\x4f\x4a\x80\x31\xbd\x29\x78\x52\x33\x8f\x1d\x81\x00\xa3\x41\xb7\x57\xa6\x7f\xed\x7f\xec\x95\x09\x85\xd0\xd9\x74\xfe\xcc\x8d\xea\x19\x25\xca\x99\x56\x76\x71\xb9\x74\x1f\x56\x54\x7b\x30\x13\x97\x3b\xa6\x1f\xf1\xe5\x8a\x7b\x68\xc2\xbd\xfb\x82\xb0\x2a\x74\x10\xa0\x18\xba\x83\x94\x34\x1a\xc9\x3a\xd1\x03\x7c\x9c\xb5\x31\x5b\x8a\x13\x39\x8b\xbe\xd3\xbd\x7e\x2e\x37\x3c\x1f\x91\xbf\xe0\xf7\xca\x7d\x27\x8e\x40\x80\xd5\xa1\x83\x00\x05\xd1\xed\x18\xfe\x78\x1f\x36\x71\x4f\x20\xa7\x9f\xc7\x62\x3a\x53\xca\xd9\x7b\xee\x94\xa1\x54\xc1\xef\x11\xff\x5f\x6d\x93\xfe\xdf\xb6\x77\x97\x2e\x58\x25\x3a\x08\x50\x14\xdd\x83\x28\xda\x65\xf5\x36\xc3\x55\x2b\x45\xa1\x8a\x92\x98\xb9\x1d\xb6\x85\x84\xcf\xd7\x8c\x4c\xbd\x48\x4d\x6c\xaa\x68\xee\xb1\xee\x3e\x6b\x60\xb5\xe8\x20\x40\x61\x74\x61\x77\x28\x55\xe7\x0f\x1e\xa7\x19\xfb\x1e\xdb\x7c\xf5\xfb\x68\xda\x6b\xa5\xae\xf1\x0c\x5d\xf7\xf6\xe9\x99\x57\xb7\x0f\xcf\x7d\x26\x42\x20\xc0\xaa\xd1\x41\x80\xe2\xe8\xae\x4f\x68\x13\x49\x3c\xf9\xb2\xc5\xe5\x59\xf9\xfe\xc3\x0d\xbb\x69\xed\x46\x5f\x11\x3d\xb5\xe2\xaa\x68\x4a\x1b\xb6\x96\xdb\x69\xa2\x08\x04\x58\x3d\x3a\x08\x50\x20\x9d\xa8\x5e\xbf\x8c\x10\x47\x3c\xe3\x2b\x82\x69\x11\xbb\xee\xa3\xad\xcf\xa6\x94\x04\x45\xbe\x1e\x33\xea\x4b\x8b\x0b\xcf\x94\x70\xe4\x44\x20\xc0\x2a\xd2\x41\x80\x22\xe9\x9e\x55\x51\x4c\x50\x9d\xbb\xf6\x23\xda\xf7\x97\x6a\xb3\x5d\xc0\xdc\x91\x92\xfb\x92\x21\x14\x0f\xe3\xed\x19\xae\x77\x68\x19\x4b\xef\x4e\xd2\x18\x4d\xba\xbd\x32\xfd\x6b\x87\x70\xaf\x4c\x28\x94\x4e\x99\xc7\x1f\x5f\xe5\x88\xbb\x3d\x85\x79\x42\x72\x8d\xe8\xf2\x65\x7d\xe2\x3a\xcb\xea\x96\x19\x1b\x7b\x78\xdb\x58\x99\x67\x44\x10\x81\x00\xab\x4a\x07\x01\x8a\xa5\x13\x35\xfe\x9a\x85\x33\xcb\xf6\x57\x11\x15\x23\xfc\xea\xd3\x67\x7e\xb2\x8d\x49\xc1\x9e\xac\xf4\x5c\x6b\x41\x9d\x30\xb9\x9b\xf0\xee\xed\x18\xab\x4b\x07\x01\x0a\xa6\xfb\xc6\x6a\x36\xa6\x70\x5a\x63\x95\x7a\xea\x8e\xc1\x5a\xc3\xd4\x8d\x84\x8b\x30\xd8\x9d\x49\x2e\x49\x94\x6c\x7b\x38\xf5\x47\xdf\xee\x52\x12\xab\x4c\x07\x01\x8a\xa6\x53\x10\xc7\x97\x7e\xda\x73\x90\x82\x5d\x9c\xf5\x95\x49\xdd\xfd\xb3\x7d\xb2\x05\x5d\x34\x0c\x16\x79\xb9\x67\x62\xcb\xb3\xec\x53\x0e\x23\x10\x60\xb5\xe9\x20\x40\xe1\x74\xe9\x14\x4f\x4d\x4d\xe4\xf1\xcd\x75\xec\x54\x42\x7e\x1d\x2d\x17\xbb\xfd\xdb\x5b\xfe\xb2\xd1\x23\xc2\x9e\xb0\x81\x61\x81\x70\x53\x7e\x04\x02\xac\x3a\x1d\x04\x28\x9e\xce\xa7\x97\xee\xd4\xd0\xb1\x0d\x1b\x9d\xbc\xeb\x83\x6f\x90\xa7\x94\xaa\x7f\xce\x2c\xb5\x5d\x8a\xbf\x16\xcb\x39\xd0\xd7\x25\x17\xbb\xbb\x94\xc4\xea\xd3\x41\x80\x02\xea\x6a\x7e\x72\xd8\xa7\x3b\xf8\x45\xf7\x84\x1d\x16\xbb\x6d\x35\x52\x6b\xcc\xc6\xfc\xa7\xee\xd1\xc1\xcf\x6b\xc5\x0c\x97\xc2\x1d\xd9\x98\x10\x08\xb0\x0a\x75\x10\xa0\x88\xba\x6f\x5e\x8c\x61\x42\x09\x24\x37\xcd\x26\x9b\xaf\x4f\xbe\x3a\x23\x95\x1a\xb7\x40\x82\x13\xbd\x74\x6e\x81\xd9\x95\x08\xaa\x7d\xb3\x45\x20\xc0\x68\xd4\xfd\xdf\x06\xc4\x3f\xf6\xd0\xf7\xca\x84\x42\xea\x1c\xe2\x3b\x43\xa4\x2b\xb5\x88\x12\xa3\x57\x53\x79\xa9\xc6\x75\x07\x36\x6a\x79\x29\x16\xfd\xdc\x66\x3d\x19\x73\x8c\xdf\x9a\xed\xae\x9f\xb1\x2a\x75\x10\xa0\x98\xba\x03\x3d\x55\xf2\x7a\x5f\x6b\x33\xa5\xef\x4e\x0e\x9a\xb4\x15\x85\x7d\x36\x0a\x56\xb0\x22\xb8\x1c\x6d\xd8\xea\x3d\x19\xc6\x6c\x78\x08\x81\x00\xab\x53\x07\x01\x0a\xaa\xab\x70\xfd\x7d\x34\xf3\x8d\xdf\x0f\xc4\x17\xcf\xe1\xb4\xb3\x22\x75\xf1\x48\xde\x64\x98\x2a\x4f\x7c\xeb\xd5\xf2\xa4\xbc\x23\x03\x4a\x08\x04\x58\xa5\x3a\x08\x50\x54\x5d\xe1\x25\x5f\xee\xcc\x4f\xe3\x52\x3a\xb5\x89\x13\x4c\x9c\xb7\xb7\xba\x7f\xd8\xf6\xbc\xb0\x0b\x60\x38\xa6\x74\xdb\x6e\xad\xf7\x89\x21\x02\x01\x56\xab\x0e\x02\x14\x56\x17\x2e\x22\xc7\x64\x1d\x87\x67\xce\xa1\xa6\xc2\xa5\xad\xae\x21\xe1\x78\xd1\x7a\xad\xa9\xd0\x19\xac\x73\x65\x08\x88\x27\xdf\x60\x43\x20\xc0\xaa\xd5\x41\x80\xe2\xea\x0a\x7e\x68\x46\x2b\x24\x49\xf2\x89\xd5\x5d\x76\xf4\xad\x89\xae\x16\x9e\x98\x18\xfa\x16\xe0\x77\xaa\x78\x61\xe6\x91\xe5\x1f\x69\x17\x04\x02\xac\x5e\x1d\x04\x28\xb0\x2e\x23\x54\xb8\x59\xd3\x77\xd6\xee\x20\x85\xaf\x66\x60\x8e\x45\xe0\x5a\x19\xd9\xe2\x03\x19\x52\x5b\x2d\xb9\xf6\x8a\xe4\xd5\x68\x59\x04\x02\xac\x62\x1d\x04\x28\xb2\xee\xd5\x0b\x10\x70\x98\x62\xd4\x85\xb1\xcb\x8b\xee\x1b\x4d\x59\x48\x8e\xa7\xe4\x61\x1a\x86\x3c\xfd\xc0\x7e\xc6\x9e\x3b\x1a\x7e\x00\x81\xe0\x3f\x9a\x75\x95\x96\xa7\x09\x7b\x5a\x4e\x49\xe6\xdf\xe6\x16\xf5\x5a\xd0\x56\x95\x53\xbb\xfa\xa1\xbe\x60\x26\x09\x7f\x49\xb8\xdd\xa5\x75\xc1\x13\x75\xd8\x57\x3f\xfb\xf3\x46\x8d\xa8\xc1\xc6\xa3\xd3\x82\x99\x1f\xb9\xbe\x1e\xa2\xd8\xfa\xdc\xd4\x1e\x71\x40\x80\x71\xe3\x20\x61\x09\x9e\x07\xee\xaf\xa1\x5c\x41\x52\x4f\xec\x92\xda\x2c\xdf\xf3\x3d\xd5\x4d\xdc\x29\x2f\xe2\x0e\x98\xd5\x76\x27\x1f\x0d\x9e\xed\x74\x7c\xb4\x21\xfb\x36\xeb\xaf\xa1\x49\xf7\x0b\x18\x26\x36\x0a\x1f\x08\x1a\xae\xe3\xac\x62\x9b\xfa\x13\xb3\x3d\x22\x4a\xc7\x75\xfa\x85\x12\x8f\xd5\xd9\x94\x3c\x8a\xfd\x6b\x28\xdc\x9a\xa7\xf3\x61\xdb\x1e\xbd\x70\xd8\xc3\xf8\x28\x0d\x72\xed\x74\xdd\x77\xcb\x9d\xce\x92\x7c\xc1\x80\xdf\x62\xd1\xbe\xa6\x97\xfe\x1a\xfa\x88\xe2\x29\x2e\x4b\x94\x11\xbf\xf3\xc9\xab\xe2\x90\xfa\x03\xe3\x78\xd3\x8c\x39\xe4\x64\xe5\xba\xfc\x4c\x7f\xcc\x32\xa5\xe8\x38\xfe\x1a\xea\xcc\x12\x3d\xa4\x96\x72\xa5\x83\x59\xe2\xaa\x9d\x93\xe0\x18\x29\xc1\xba\xbd\xa9\xd5\xb9\xd2\x57\x37\xe4\x10\xcf\x9a\xac\xd4\xbf\x0f\x26\x39\xd7\x2e\x8a\x50\xeb\xea\xdc\xbb\x22\x6d\x66\xc6\xd3\xaf\x1a\x8c\x3f\x8e\x9c\xab\x59\x62\x90\xdf\xa8\x56\x29\x14\xfd\x91\xc7\xf5\xd7\xd0\x0f\x2e\xae\x4d\x16\x2b\xae\x0e\xb6\xd2\x31\x5c\x92\x05\xa1\xae\x1f\x91\xf6\x12\xdb\xfe\x74\x52\x65\x57\xee\x65\x9d\xc8\x3c\xa5\xff\x3b\xec\xfb\xd7\xbb\xba\x37\xa3\xa1\xd0\xba\x54\x7e\x2b\x09\x27\xa4\x3c\xce\xa4\x83\xd4\xcf\xde\x3b\xa2\xb4\xf1\xa4\xc3\x8d\x88\x38\x09\x95\x1c\x4b\xb3\xc8\x52\xad\xee\xdd\xf5\x23\x56\xb5\x0e\x02\x14\x5b\xc7\xa2\xf5\x54\xd2\xba\x2b\xd9\x72\x3e\x2b\x42\xc9\xfe\x3b\x17\x73\x80\x16\xbe\xa4\x88\xb0\x57\x5e\x6f\xdd\x40\x0d\x99\x75\xc6\x39\x04\x02\xac\x6e\x1d\x04\x28\xb8\xee\x0a\xb8\x50\xa4\xd9\x4c\x73\x64\xde\xea\xf2\x94\xb2\xea\x8a\x45\xde\x21\x0a\xce\x17\x5c\x78\xb4\xac\xf0\xc2\xb8\x67\xcc\x2c\x0e\x81\x00\xab\x5c\x07\x01\x8a\xae\xf3\x48\x88\xbc\x70\x50\xf0\x46\xce\x8d\xd7\xed\x3e\xb6\x06\xf9\x97\xdf\x0a\x1c\x2a\xb0\x08\xa9\x98\x1a\xf2\xc9\xfc\x08\x1d\xb2\x54\x10\x08\xb0\xda\x75\x10\xa0\xf0\x3a\x6b\x2e\xa1\xab\x36\x60\xa2\x7a\x6c\xd9\x43\xff\xe6\x9a\x69\xbb\x7f\x3e\xd5\xc8\xcf\x9f\x8d\x61\x1d\x95\x27\xee\x9d\x4e\x7a\x6b\x80\x40\x80\x55\xaf\x83\x00\xc5\xd7\x4d\xab\x15\xc6\xc8\x1c\x17\xba\xfe\xb6\xae\x4d\xbc\xd3\x5e\x43\x5d\xce\x2c\x74\x8c\xe8\xc0\x93\x79\x55\xbc\x59\xcf\x36\xea\xc7\xcc\x08\x04\x58\xfd\x3a\x08\x50\x80\x5d\x85\x14\xa1\x89\x28\x79\xab\x53\x66\xf2\x6b\x06\xae\xc6\x54\xe3\xe5\xe3\xd3\xdc\x47\xbf\xe8\xab\xdf\xf5\x81\xaa\xdd\x19\x35\x56\x08\x04\x58\x05\x3b\x08\x50\x84\x9d\x51\x89\xc7\x54\x9e\xbf\x89\x93\x94\xb4\xaf\x81\x25\x2e\xe0\xe4\x09\x2e\xe9\x90\x23\x8e\x20\x4e\x50\x65\xc8\x4d\x3b\xe3\xc6\xee\x33\x03\x46\xc3\x6e\xaf\x4c\xff\x9a\x77\xf6\xca\x84\x42\xec\x34\xb4\x65\xf2\xc2\xfc\x47\x85\x18\x8a\x28\xd5\x4d\xe6\xdb\x70\xa9\xe9\x57\x0a\x22\xb8\x6c\xc7\x73\x3e\xde\x11\x0b\x3e\xc7\xbd\xbb\xd6\xc6\xaa\xd8\x41\x80\x62\xec\xc2\xaf\x39\xbf\xd0\x11\xbb\xcf\xde\xa0\x51\x67\x11\xcc\xa8\xce\x62\x2c\x7a\xd6\x57\xc2\x9b\xe9\x5c\x5f\xd1\xf0\xbb\xbb\x44\xc0\x1a\x81\x00\xab\x63\x07\x01\x0a\xb2\xcb\x9a\x49\xf6\x7e\x72\x54\x74\x65\xfe\x74\xd9\x93\xf6\xc5\x8b\xc7\xde\x2c\x3b\xbc\x0c\x7f\x24\x5d\x35\x56\x2b\xa1\xeb\xa3\x1b\x24\x80\x40\x80\x55\xb2\x83\x00\x45\xd9\x3d\xd2\xf0\x9f\x96\x57\x6c\x7d\xcb\x59\x5b\x5a\xe2\x37\x34\xb4\xc3\x0a\x9e\xf8\xfd\x7c\x53\x7a\x57\xf1\x60\x4c\x2a\xbe\x52\x39\x07\x02\x01\x56\xcb\x0e\x02\x14\x66\xb7\x10\xf8\x9c\x77\x81\x24\x29\x96\xb9\xf8\x4e\x8c\x6a\x9d\x80\xe5\xd3\x31\x1e\x63\xbf\x99\xb2\x39\xa3\xc7\x97\x85\xbf\x71\xf1\x93\x21\x10\x60\xd5\xec\x20\x40\x71\x76\xec\xf7\x74\xd3\xbf\x2d\x97\x9f\x02\xdc\x19\x2c\xeb\x0d\xcf\x6b\x1a\xf3\x07\x05\xc4\x66\xa6\x7e\x9d\x3f\xa7\x1a\x72\x31\xf3\xb3\x29\x02\x01\x56\xcf\x0e\x02\x14\x68\xe7\xbc\x5d\xb9\x3c\x34\x3b\x2e\x15\x74\xe3\xb9\xbd\xd8\x4a\x42\x3f\x7f\xd5\xa5\x64\xa6\xda\x3f\x9e\xe6\xe5\x87\x1f\xcd\x7c\x89\x61\x47\x20\xc0\x2a\xda\x41\x80\x22\xed\x8e\xe6\xcf\xda\x1f\x32\x8a\x23\xe3\x6c\xe8\x0b\x46\x2c\x7a\xc5\x4e\x3d\x0b\x33\x39\xa9\x69\x0b\x41\x1b\x7f\xff\xb3\x64\xc1\xab\x08\x04\x18\x4d\xbb\xbd\x32\xfd\xeb\xce\xbc\x57\x26\x14\x6a\x67\xba\x96\xe1\x4b\x4c\x11\x3c\x29\xfe\xea\x0d\xe7\x71\xcf\x88\xb7\x76\x97\xa2\x84\xaf\xe4\x82\x50\xbd\x2f\x49\x72\x26\xa5\xc2\xc4\x08\x04\x58\x55\x3b\x08\x50\xac\x9d\xa0\x44\xd2\x69\x83\x07\x01\xaf\xad\x6e\xa5\x16\x4a\xef\xb8\xb6\x3c\x3f\x13\x22\xe5\x69\xce\xef\xa7\x4f\x9c\xc3\xba\xf5\x92\xdd\x09\x81\x00\xab\x6b\x07\x01\x0a\xb6\xab\xd2\x76\xd2\xce\x06\x8e\xfa\x94\x60\x55\x6a\xcc\x40\xe8\xe4\x78\xe1\x8b\x9c\x51\x82\x3a\xb3\x69\xff\xb0\xca\x1b\x3c\xe9\x0c\x08\x04\x58\x65\x3b\x08\x50\xb4\xdd\xe6\x83\x90\xc3\xd6\x75\xc9\xa7\x1f\xeb\x7f\x9d\x43\x96\x57\xd3\x1c\x1e\xb3\x9c\xae\x9d\xfe\x0d\x79\xde\x1e\x14\x8b\x9d\x68\x94\x44\x20\xc0\x6a\xdb\x41\x80\xc2\xed\xe2\xfd\xb5\x7e\x3a\xbb\x6d\x98\x4f\x6a\x1f\x38\xfe\x2c\x8e\x8b\xe0\xdb\x8d\x15\x69\x5d\x76\xaa\x85\xbb\xbc\xc6\xa2\xa6\x53\x78\xae\x08\x04\x58\x75\x3b\x08\x50\xbc\xdd\xb8\xaa\x54\x08\xd5\xd5\x33\xb4\xb6\x42\xf5\x6b\x64\x12\xb1\xc7\x77\xb8\x0e\x10\x2c\x9d\xf3\x50\x7d\x5f\xfa\x79\x92\xd3\xb7\x9b\x10\x81\x00\xab\x6f\x07\x01\x0a\xb8\xe3\x61\x37\x10\x9a\xf2\x0f\x7e\x62\xb9\x90\xf3\x4b\x50\xa8\x9a\xf3\xf7\xa9\x15\x47\x86\x13\xdd\xe1\x27\x42\x24\xe4\x4c\x90\xc3\xda\x08\x04\x58\x85\x3b\x08\x50\xc4\x9d\x2b\x1f\xff\xc0\x9b\xbb\x13\x5d\xc5\x1a\x69\xe3\xe6\xae\x01\x03\xdf\xdf\x1f\x79\x18\x56\xe2\x1a\x4e\xf0\xb2\x93\xf8\xa4\xf6\x25\x63\x04\x02\x8c\xc6\xdd\x5e\x99\xfe\xb5\x76\xdd\x2b\x13\x0a\xb9\xeb\x59\x6a\x20\x5e\x6e\x12\xed\x35\x14\xad\xcc\x1f\x54\x88\x70\x1e\xb6\xf2\x09\x25\xbd\x57\x3b\x24\xd9\xd8\x9d\x94\xe7\xd4\x20\x8f\x40\x80\x55\xb9\x83\x00\xc5\xdc\x91\x9e\x58\x4f\x6e\xf9\x15\xba\xf3\x5d\x51\xca\xca\x34\x30\xec\x5c\xff\x2f\xe9\xce\xea\x87\x19\x97\xe1\x90\x61\xfc\x09\x97\x5a\x56\x04\x02\xac\xce\x1d\x04\x28\xe8\xce\xad\x2a\xf1\x97\x99\x6b\x4f\xf6\x81\xf1\x83\x12\x66\x69\x3a\xfc\x1b\xde\x25\xe6\xd1\x5c\xfc\x71\x42\xd7\x89\x5d\x29\x35\x2a\xae\x21\x10\x60\x95\xee\x20\x40\x51\x77\xc7\x2b\xc6\x72\x6a\x7a\x9a\x4a\x53\x43\x95\x53\x4d\x8d\x63\x86\xda\x2c\x9e\xa8\x32\x13\x65\xdc\x96\x9d\x16\xcb\x0d\x14\xbd\x28\x82\x40\x80\xd5\xba\x83\x00\x85\xdd\x39\xdf\x39\x48\x31\xf0\x90\x9b\xcd\x56\x3f\xb6\xfa\xda\x8d\xde\xb2\xd8\xdb\xaa\x6d\x1f\xdf\x7d\xad\x35\x7a\x72\xd3\x5a\xb7\x84\xc7\x16\x81\x00\xab\x76\x07\x01\x8a\xbb\x0b\x70\xe6\xbc\xc6\x79\xe1\xf4\x70\x45\xcc\xad\x1a\x10\x35\x7e\xed\x8e\xf6\xd6\xd5\xab\xc6\x6c\x59\x17\x7f\xd2\x39\xbf\x89\x24\xdf\x9d\xd1\xb1\x7a\x77\x10\xa0\xc0\x3b\x9f\xdf\x2f\x47\xf4\x29\xca\xb4\x92\x22\xa7\x89\xcc\xa3\xcf\xc7\x79\xeb\xda\xd6\xac\xa6\xcb\x5d\x38\xbd\x5e\xa3\x5f\x53\xd5\x68\x86\x40\x80\x55\xbc\x83\x00\x45\xde\x99\x4f\xbf\xfc\xda\x65\xff\xd3\x53\x96\x6a\xb5\xc5\xb4\x82\xe8\x74\x76\xfe\x85\x03\xcc\x04\xe5\x97\xab\xbd\x1e\x6a\x77\x9d\x14\x95\x40\x20\xc0\x68\xde\xed\x95\xe9\x5f\x4f\x77\x7b\x65\x42\xa1\x77\x17\xe8\xe9\x3e\xc8\x18\xf1\xba\x0c\x4e\xc7\xd7\x9d\x14\x36\xee\xbc\xfb\x7a\x9d\xd0\x3a\x08\xe9\xeb\xb4\x03\x4d\x9c\x2c\x3e\x27\x10\x08\xb0\xaa\x77\x10\xa0\xd8\xbb\x34\xfd\xed\x93\x5a\x25\x0c\xe6\x35\x47\x75\x34\x79\xcb\x0b\xfb\x36\x5a\x4e\x77\x49\xa6\x58\x08\x05\xdb\x98\xa4\x77\x39\x8c\xee\x3e\xcf\x60\x75\xef\x20\x40\xc1\x77\x32\x85\xf6\xfe\xc3\x93\x61\xb7\xe6\x13\xe9\xdf\x46\x53\xeb\x6c\x5c\x1d\xa4\x0b\xb1\x11\xb9\xb2\xd6\xd7\x3c\xb8\x34\xc0\x2f\xb2\xbb\x7e\xc6\x2a\xdf\x41\x80\xa2\xef\xaa\xa8\xc5\x84\x1f\xdf\xe6\x10\xb7\x1c\x97\x7e\xb3\x18\xf0\x1c\xfe\x6a\x17\xf6\x4f\x12\xd9\xca\x6a\xa6\xdd\xf0\xeb\x79\x33\x02\x10\x08\xb0\xda\x77\x10\xa0\xf0\xbb\x8e\x11\x1a\x3d\xc9\x4e\x36\xe2\x97\xc7\x3f\x9e\x30\xea\x23\xf8\x7d\x79\x82\x56\xf8\x2c\x93\x3d\x1d\xc3\xd3\x20\x42\x87\xa8\x8e\xa3\x08\x04\x58\xf5\x3b\x08\x50\xfc\x5d\x7b\x99\xc3\x5c\x3b\x5d\xff\x49\x62\x6d\xa5\xfc\xee\x0c\x9d\xca\x57\xbf\xe8\x37\xa9\xd6\xca\x0e\x7f\x21\x74\xea\xbf\xbb\x2e\x72\x06\x81\x00\xab\x7f\x07\x01\x0a\xc0\x5b\x5f\x66\xa9\x3c\xf8\xc2\x51\xa3\x2c\x77\x74\xa4\x76\x58\x6d\xa3\xa7\x38\x32\x33\xff\x7a\xff\xc4\xd9\xd0\xfb\x94\x93\x49\x89\x8c\x08\x04\x58\x05\x3c\x08\x50\x04\xde\xa1\x17\x2c\xf7\xd3\x16\x0f\x67\xdf\xbb\x3a\x6e\xd7\x65\xd1\x22\xd3\x3d\xfd\x91\x76\x90\xef\x47\x83\x7c\xff\x4d\xe2\x43\x99\x36\x46\x08\x04\x18\x0d\xbc\xbd\x32\xfd\x6b\xff\x63\xaf\x4c\x28\x04\x8f\xf0\x5b\xbe\xb0\x58\xd1\xcd\x17\xbe\x87\x0b\xfc\x4b\x23\x1a\x97\x5c\x65\x6b\x6a\xf0\xde\xbd\x33\xe9\xf9\xe8\xd0\xa0\x74\x51\x6b\x77\x26\xc4\xaa\xe0\x41\x80\x62\xf0\x7e\x37\x50\xe7\x0e\xf1\x7d\x7d\xec\xcc\x15\xaa\x2e\x9e\xeb\x73\xcd\x50\x76\x8b\xc2\xb8\xf4\x73\xa8\xb2\xac\xb5\xef\xe3\x70\xed\xdd\x8b\xc6\xea\xe0\x41\x80\x82\xf0\xf2\xdd\xab\x0a\xd4\x6a\xde\xe0\xf7\xb9\x4a\x58\xc2\x4e\x3d\x9a\xc1\x8e\xf9\xc7\x6e\x17\x82\xdc\xbe\x3e\xd2\x3c\x5b\xb5\x52\xb5\x3b\x4b\x61\x95\xf0\x20\x40\x51\x78\x5f\xb8\x1d\x4b\x38\x95\x05\x9c\x22\xb2\x32\x57\x0d\xae\xe9\x42\x97\xcb\xd1\xf8\x30\x7e\x38\xa7\xae\x81\x61\x6c\x52\x7b\xcb\x05\x81\x00\xab\x85\x07\x01\x0a\xc3\x6b\x71\xc0\xfb\xa6\x51\x5c\x91\x27\x75\x88\x7f\x44\x39\x46\xc6\xeb\x39\xa5\x12\xd3\x5b\xa3\xd8\x5b\xcd\xfc\x17\x9f\xdd\xe3\x49\x3f\x8c\x40\x80\x55\xc3\x83\x00\xc5\xe1\x55\xbb\xd4\x2c\x72\x3d\xcf\xf0\x4e\xba\xdf\x3f\xd9\xbf\x69\xf0\x3c\x85\x66\x92\xd1\xdd\x93\xca\xfc\xe7\xa5\x2b\xab\xfa\xab\xf4\xbb\xef\x15\x56\x0f\x0f\x02\x34\x88\x37\x73\xde\xfb\xfa\x27\x93\x88\x0f\x1a\xb7\xbc\xa4\x46\x0f\x5d\xac\x69\x65\x0b\xfa\x40\x2d\xbb\xa6\x50\xa9\x06\x3f\x9b\x98\xdb\x21\x10\x60\x15\xf1\x20\x40\x91\x78\xfe\x99\x0c\xd4\xea\x86\xb8\x7a\xfc\x2b\x3f\xfd\xc0\xb7\x4f\x4e\x72\x79\x3b\x74\x84\xe3\xfd\xc7\x63\x6a\x3d\x2e\x92\x6f\x1d\xb6\x42\x20\xc0\x68\xe2\xed\x95\xe9\x5f\x3b\x84\x7b\x65\x42\xa1\x78\x95\x1b\xc2\x67\x07\x79\xca\x77\x54\xb6\xdc\xde\x6d\xdb\xdb\x51\xd2\x4f\xcd\xe8\x50\xd8\xad\xa6\xf7\x2a\x20\x41\xda\x2b\xda\x06\x08\x04\x58\x55\x3c\x08\x50\x2c\x9e\x2d\x0b\x29\x89\xff\xa1\x9a\xad\x2a\xc6\xd4\x57\x0b\xa4\xa6\x22\x71\xee\x9b\x7a\xd3\xf8\x56\x37\x69\x66\xc3\x26\xf5\x02\x9b\x77\x9f\x35\xb0\xba\x78\x10\xa0\x60\x3c\x47\xb7\x9e\x5b\xc6\x8a\xb7\xfc\x64\x08\x26\x7b\x9c\x36\x69\x18\x9f\x04\xc9\xbf\xeb\x09\xe2\x8c\x57\x90\x1b\x48\x4c\xb6\x63\x73\x44\x20\xc0\x2a\xe3\x41\x80\xa2\xf1\x0e\x05\x75\x5a\x6f\xf1\x0d\x88\x4a\x88\x07\x46\x98\xfc\xfa\x7d\x45\xaa\x42\x5d\x3a\x9d\xc5\xe2\xbe\xef\xbb\x13\x19\xeb\xe7\xe5\x84\x11\x08\xb0\xda\x78\x10\xa0\x70\x3c\xc9\x98\x43\x2d\x97\x13\x14\x4e\xff\x9c\x25\x99\xb8\xa3\x15\xa9\xd9\xff\x49\x6e\xb0\x68\x55\xbd\xdb\xce\x67\x98\x77\x8a\x68\x4e\x1f\x81\x00\xab\x8e\x07\x01\x8a\xc7\x7b\xe5\x5f\x7d\xfb\xac\x90\xb9\xfc\x28\xd5\x53\x5f\x9a\xb9\x2e\x1b\xf6\x05\xfe\xfa\xef\xe1\xd7\xca\xf1\xe4\x5f\x38\x93\x6f\x69\x8b\x21\x10\x60\xf5\xf1\x20\x40\x01\x79\x73\x13\xc8\xd7\x0f\x57\xf0\xdf\x3d\x6e\xbd\xf5\x4a\xb6\xb2\x38\x49\x67\xbc\xc6\x32\xbd\x6b\xe9\x98\x28\xc1\xce\xc5\x1b\x2e\x2d\xbb\x13\x0f\x56\x21\x0f\x02\x14\x91\x27\xdb\x6f\xc4\xa8\x2f\xec\x7c\xf3\x03\x97\x95\x5c\xc8\x2f\x47\xfe\x05\xf6\xcb\x5e\xd5\x1e\xc5\xcf\xa7\x69\xc9\x71\xe7\x0e\x34\xba\x21\x10\x60\x34\xf2\xf6\xca\xf4\xaf\x3d\xf4\xbd\x32\xa1\x90\x3c\x91\x76\xed\x8d\xe7\xfe\x2e\xe3\x29\x25\x14\xf7\x7c\xfa\x03\xbe\x5b\x67\x5d\x66\xca\xe8\xe3\xf2\x2b\xe6\x30\x55\xb8\x7d\x66\x96\x02\x81\x00\xab\x92\x07\x01\x8a\xc9\xc3\xc7\xf7\x75\xa4\x9f\x7a\x1d\x33\x58\x70\x61\x23\x81\x83\xfe\x7e\xe3\x7a\x84\x05\xb1\x7d\x94\x8b\x76\xcf\x9b\xbe\x67\x55\xd3\xd2\x08\x04\x58\x9d\x3c\x08\x50\x50\x5e\xb2\xe0\xf8\x8d\xef\x3a\x2f\x65\x2e\x4c\x34\x36\xe9\x7e\x77\xab\xa1\x66\x9f\xfd\x11\x44\xbc\x30\x27\x57\x4c\xbf\xf4\x79\xc6\x0e\x0f\x81\x00\xab\x94\x07\x01\x8a\xca\x7b\xfe\x27\xc2\xd3\x80\xe0\x43\x54\x8e\x00\x3e\x23\x58\x5f\x9c\x7e\x9d\x37\x72\x41\xdd\x90\xef\xd6\x07\xf6\x50\x64\x13\xbf\x66\x77\x49\x8c\xd5\xca\x83\x00\x85\xe5\x29\x1f\x2c\xf8\xbc\x51\xd6\x4b\x4c\xa5\xf0\xb8\xfc\xeb\x3b\x66\x79\x2e\x83\xf6\x6c\x53\x8a\x55\x01\x56\xeb\x63\x3f\x6e\x17\x3e\xc6\x47\x20\xc0\xaa\xe5\x41\x80\xe2\xf2\x26\xa5\x86\x7c\x2c\xf9\x5f\x48\x84\xbc\xff\x54\x9f\x9f\x98\x2a\x98\xf8\x36\xd6\x34\xe5\x4f\x91\xf3\xc0\x36\xef\xb8\x3f\xcd\x17\x0d\x04\x02\xac\x5e\x1e\x04\x28\x30\x8f\x63\x43\x6b\x51\x3c\xf8\x38\xc5\x25\x9c\x94\x59\xde\x29\x85\xbc\xd6\xac\x2f\x37\xee\x7e\x75\x4e\xac\x3e\x8e\x83\x17\x94\xac\xf8\x11\x08\xb0\x8a\x79\x10\xa0\xc8\x3c\x5b\xda\x8c\x3e\xc2\x1e\xea\x03\x57\x54\x2e\x07\x07\xea\x99\x7d\xd0\x22\x48\x31\x09\x73\x0e\xe8\x2b\x37\xdc\xbe\x75\x8d\x22\x82\x19\x81\xe0\x3f\x9a\x79\x70\xe8\x78\x12\x94\x39\x93\xc5\x72\xc3\x96\xec\x41\x6b\xfd\x54\xe2\x0c\x75\xa1\x07\x65\x25\x07\x7f\x86\xab\x29\x3c\x47\xab\x8f\x3a\xec\xa3\xd0\xc4\xd1\x92\x6a\x45\xa9\x9e\xfb\x3c\x8f\x5b\xe1\xdb\x12\xb2\x7e\x22\xfd\x24\xb3\xd0\xe8\xcb\xb0\x8b\xea\x18\xf7\x47\xf5\x90\xbf\x87\x92\xb9\x36\xf8\x15\x10\x90\x57\xf6\xf3\x2a\xec\x1c\x16\x16\x37\xb6\x90\x29\x8d\xba\x72\x70\x7d\xbb\xbd\x49\x3d\xfd\x63\xa4\xc0\xdf\xbf\x17\xec\x5c\x6e\x51\xb5\x9e\xce\x1b\x37\xe9\xe8\x54\xc4\xd7\xbb\x75\xa1\x99\x67\x13\xbf\xbb\x9f\xb3\xf0\x8c\xa9\xfb\xab\x34\xb7\xbf\x7f\x2f\x28\x74\x4d\x5d\x8a\x6e\x5b\xa9\x14\x2f\xa2\xf4\xb7\xa2\x18\xde\x50\xee\x13\x61\x82\x05\xbc\xb8\xf5\xf8\x36\x79\xe5\x8a\x4f\x71\x7f\xff\x5c\x6f\xc9\x24\x4a\x44\xc8\xca\x1c\xcf\x78\xe1\x65\x3b\x43\xbd\x66\xd3\x29\xfe\x9f\xdc\x97\x53\x28\x6e\x0e\x40\x7b\xd1\xb7\xbc\xe5\x7f\xff\x6f\x4e\x82\x03\x79\x92\x8d\xbc\xb9\xd4\x4a\x3b\x7c\x92\xba\x3c\x82\x15\x0d\x09\x2c\xf6\x25\x13\x3d\x1e\xd6\xdf\xa9\x6e\x2a\x5c\xb1\x31\xfa\x6b\x68\xbb\xdf\xe9\x9b\x2d\x5d\xc7\xd5\xe3\x2c\x8a\x10\x21\x52\x65\x1e\xf5\x8d\xe5\xd1\xaf\xb9\x6d\x6c\x3a\xce\xde\x9d\xa3\xa6\x0f\xfe\xfe\x15\xa2\x3c\xe1\xf5\x82\x3f\x1a\x73\x4a\x63\x55\xf2\x02\xab\x77\x3f\xdf\x3b\xe5\x5b\x1b\x13\x33\x6b\x10\x40\x15\xa4\x90\xe3\x90\x37\x79\xea\xff\x0e\xfb\xfe\xf5\xae\xee\xcd\x68\x28\x34\x6f\xde\xab\x8f\xf7\x67\x87\x56\x6a\x4f\xf0\xa1\xd0\x17\x7a\x71\x8a\x63\x82\x51\x31\x44\xbf\x4f\x3e\x70\x78\x9e\x26\xbf\x9e\xf8\xfc\x08\x02\x01\x56\x35\x0f\x02\x14\x9b\xf7\x99\xb9\x80\xa9\xc9\xbc\xbf\xea\x59\xec\x4d\xe5\xeb\xd1\xc7\xe5\x16\x3c\x6f\x8b\x3f\xfa\x65\xfe\xfd\xad\x8f\x48\xc8\xce\xdd\x3f\x5a\x08\x04\x58\xdd\x3c\x08\x50\x70\x1e\x11\xeb\xdb\x8f\xb6\xe2\xd7\x42\xca\xad\x0f\xfd\xfc\xa8\x79\xb0\x9d\x33\xf0\xc4\x5b\xad\x7b\x1e\x2e\x7c\x57\xda\xc7\xc4\xbe\x58\xc8\x23\x10\x60\x95\xf3\x20\x40\xd1\x79\xa3\x19\xdc\x6b\x9f\xde\x14\xdd\xb2\x72\x56\xbd\x77\xc1\xa8\xf1\xe0\x38\xbf\x92\x4e\xd9\xf2\x37\x61\x6a\xcd\x57\x3f\x9b\xa8\xab\x74\x11\x08\xb0\xda\x79\x10\xa0\xf0\xbc\x78\xe2\x16\x7f\x1f\x82\xc8\x54\x86\x54\xf6\x27\x62\xbe\x2f\x25\xdc\x3a\x2d\x78\x7d\xc5\x6f\xd2\x59\x57\x76\xdc\xd4\xe3\x53\xdf\x5d\xe6\x60\xd5\xf3\x20\x40\xf1\x79\xf7\xeb\x83\xa8\x6f\x19\x84\x15\x27\x33\x1c\x5e\xfd\x48\x5a\x58\x6f\xd9\x5b\x1d\xf5\x85\xb3\x98\xb5\xf4\xd8\xda\x61\xdb\x5e\xc9\x8b\x08\x04\x58\xfd\x3c\x08\x50\x80\xde\x3c\xb7\x8e\x26\x95\xd7\xdc\x33\xc1\x09\xc9\x43\xaf\x5a\x9f\xd4\xca\x99\xdc\x69\x25\x8e\xc8\x96\xf0\xe2\x0a\xad\x76\xa7\xcc\x13\x47\x20\xc0\x2a\xe8\x41\x80\x22\xf4\x7c\x68\x05\xeb\xaf\x10\xf7\xe2\x64\xa6\x7c\x23\xbe\xfc\xd8\xd0\x5a\x21\x61\x9a\x50\x15\x30\x75\x78\x4d\x47\xb9\x6a\x42\x38\x46\x86\x40\x80\xd1\xd0\xfb\xbf\x32\xfd\x63\xde\xd9\x2b\x13\x0a\xd1\x23\x72\xf9\xf8\x92\xb0\x31\x78\x93\xab\xfa\x7d\xde\xe7\x6b\x26\x83\x9f\x14\x86\xb7\xcb\xef\x28\xe5\x74\x7b\x66\xfa\x64\xf6\xac\xef\x3e\xad\x63\x55\xf4\x20\x40\x31\x7a\x97\xb2\x1f\xcf\xaa\x6f\x98\xdd\x3a\x3f\x99\xc2\xd0\x5c\x95\x36\xe0\xad\x89\x67\xeb\xf4\x6b\x2a\x85\xcb\x6b\x78\x71\x58\x6a\xce\x02\x81\x00\xab\xa3\x07\x01\x0a\xd2\x53\xe8\x57\x2e\xb7\x74\x6c\x96\x0d\x27\xa0\x33\x14\x96\x98\x73\x7f\x7c\xc1\x67\x4b\x9a\xa5\x76\xe1\x83\xd3\x4e\x53\xfa\xb8\x3a\x1f\x02\x01\x56\x49\x0f\x02\x14\xa5\xf7\xfd\x10\xa5\xad\x93\xcf\xa2\xae\xb7\x49\x4a\x89\x6f\xc0\x06\xa4\x38\x84\x64\x8a\x55\x9f\x14\x13\xf0\x88\x56\xc9\x28\xe5\xb2\x41\x20\xc0\x6a\xe9\x41\x80\xc2\xf4\x3e\xdf\xf9\xa5\x98\x71\x2a\x40\x68\xa0\xf5\xc1\x12\xc7\x72\x4c\xea\x22\xf8\xae\x31\xe3\x98\x4f\x6f\x76\xed\x6a\x9d\xc1\x5d\xfa\xd3\x08\x04\x58\x35\x3d\x08\x50\x9c\x1e\x6f\x87\xde\xce\xc7\x6b\x7d\xe4\x39\x7c\xe3\x72\x91\xde\x6f\xf3\x67\x2e\x10\x0e\xb8\x34\xf0\x6e\x94\xf2\x7f\x51\x96\xf0\x8e\x27\x40\x20\xc0\xea\xe9\x41\x80\x02\xf5\x48\x15\xcd\x88\x09\xf8\x8a\x62\xb4\x03\x3f\x4a\xe6\x7e\xa4\xf9\xc2\x7a\xcf\x28\x81\x35\x97\x63\x73\xc6\x8e\x2d\xd2\xe0\x46\xcf\xee\x75\x60\x15\xf5\x20\x40\x91\x7a\xdf\x6e\xa9\xa9\x7d\x79\xa5\x3f\xa5\xcc\xca\xeb\xe4\x77\x3c\x4b\xc3\x54\xaa\x5b\x63\x7c\xa7\x3d\xd6\xa4\x49\x02\x22\xc7\x0a\xc8\x11\x08\x30\x9a\x7a\xff\xf7\x9b\xf3\x7f\xdc\x99\xf7\xca\x84\x42\xf5\x6a\xd5\x8d\xd6\x9b\x58\x6c\x64\x12\x8c\xee\x4a\x4a\x06\x66\x6d\xcc\x39\xbf\xd2\xbb\xf2\xc8\x45\xec\xc3\x6d\x30\xdb\x42\x72\xdf\x09\x81\x00\xab\xaa\x07\x01\x8a\xd5\xb3\xc2\x3f\xec\x9c\x93\xf0\xa9\x8c\x3b\xed\x38\x77\x88\x4d\xe7\x46\xdb\xc7\x96\xe7\xea\x74\x7c\x55\x1f\xb2\x67\xc2\xb5\x54\x1d\xae\x23\x10\x60\x75\xf5\x20\x40\xc1\x7a\x9b\xab\x94\x2f\x9e\x08\x4f\x45\x2f\x91\x10\x96\x75\xf4\x69\xb0\xac\xe1\x7a\xce\x30\x7e\x1e\x66\x8d\xde\x3e\x6c\xa4\x46\x9e\xbc\xbb\xb6\xc3\x2a\xeb\x41\x80\xa2\xf5\x58\xfd\xd6\x65\x4b\x82\x08\x74\x7d\x8c\x53\x83\xd9\x13\x4e\xcf\xcd\x3c\xad\x11\x3f\x1d\x60\x35\x59\x28\x98\xa9\x30\xee\x6b\xa3\x88\x40\x80\xd5\xd6\x83\x00\x85\xeb\xb5\x85\x9c\x9e\x9d\x26\x93\x3e\xf1\x23\xda\x54\xbf\xf8\x54\x99\x8d\x95\x1f\xd5\x09\xb3\xac\xa0\xa7\xd9\xa2\xc2\xb2\x63\x9e\xf2\x0e\x08\x04\x58\x75\x3d\x08\x50\xbc\xde\xa3\x87\x74\xb6\x39\xb9\x97\x4d\x3d\xfa\xdf\x17\xa7\x3d\xfe\xb0\xd6\xfb\xb4\x73\x5c\x89\x2b\xdc\xf0\xbd\x39\x55\x18\x6e\x88\x94\x05\x81\x00\xab\xaf\x07\x01\x0a\xd8\xeb\x9c\x03\xcc\x65\xc2\xe7\x9e\xd8\x72\xe0\x99\x05\xbe\x6e\x69\x7b\xf6\x21\xb9\xd5\xd2\x74\x84\xd4\x10\x9e\x88\x66\x4b\xe5\xdd\xbd\x6b\x60\x15\xf6\x20\x40\x11\x7b\x67\xe1\x8f\x1b\xd2\xb7\x68\x16\x1f\xb6\x9f\x1b\x21\x67\x2a\x62\x3e\x2a\x51\x71\x4a\x73\x99\xa7\x51\xf4\x4c\xd9\x84\x5e\x08\x05\x07\x02\x01\x46\x63\x6f\xaf\x4c\xff\x5a\xbb\xee\x95\x09\x85\xec\x19\x5d\x5a\x22\x4b\xe0\x91\xb3\x5a\x98\xbf\xae\x4a\x67\x5a\xec\xbf\xd8\x0c\xd5\xda\xd9\x5e\xe8\xdb\xbd\x8f\xd7\xa3\x7d\x75\x91\x1a\x81\x00\xab\xb2\x07\x01\x8a\xd9\xbb\x03\x9d\x54\xb3\x5f\xb7\x9c\x1b\x63\x58\x10\x10\x63\xe0\xa2\x98\x4b\x1a\x3c\x9b\x39\x1d\x41\x15\x51\xea\x6c\xdc\x5f\xe6\xa1\x82\x40\x80\xd5\xd9\x83\x00\x05\xed\xb9\xd0\x9f\x1c\x7b\x54\x42\x16\x93\xf2\xe6\xf1\x3d\xea\x07\xf5\xf7\xcf\xde\x7d\x3a\xf5\xe6\xfb\x63\xf2\x10\xc6\x00\xb1\x6c\xcf\x3c\x6d\x04\x02\xac\xd2\x1e\x04\x28\x6a\xaf\x3f\x6d\x03\x87\xcc\x66\x5c\x71\x5b\xa0\x3d\xa6\x37\x96\x26\x40\x7e\x47\xd4\xc6\x97\x55\x41\x4d\xfe\x5a\x03\xcb\x3a\xcd\xf2\xee\x12\x0c\xab\xb5\x07\x01\x0a\xdb\x7b\xc7\xbe\x23\x78\xc3\xc3\x66\xe3\x1e\xdf\x9b\xc2\xd5\xc6\x77\x8c\x0a\x4c\x69\x17\x69\xa6\x94\x68\x85\xeb\xd6\x68\x67\x9f\x7f\xd1\x43\x20\xc0\xaa\xed\x41\x80\xe2\xf6\x08\x1f\x3c\x4c\x52\xe3\x17\x6f\xe1\xfc\x92\x70\x75\x5a\xf5\xd3\xb0\x1c\x81\xdc\xc0\xf7\x94\xe0\xb7\x06\x47\x24\x99\x4b\xb7\xae\xed\xfe\xcd\xb1\x7a\x7b\x10\xa0\xc0\x3d\xb7\x80\xf3\x02\xcd\x07\xf9\x15\xd4\x0e\x27\xa5\xf1\x52\x49\xfc\x72\xc3\x1b\xfb\x78\x86\x8b\x89\xc3\xcd\x9b\x57\x9a\xcd\x2f\xc5\x0c\x81\x00\xab\xb8\x07\x01\x8a\xdc\xeb\x2f\xff\xea\x9a\x9b\xb1\xc0\x3f\xe3\xd9\x47\xc6\xfe\xd9\x23\x23\x5b\x5d\x4c\x89\x17\x11\xa1\xbd\xf8\x2c\x25\xcb\x6a\x33\x98\x01\x81\x00\xa3\xb9\xb7\x57\xa6\x7f\x3d\xdd\xed\x95\x09\x85\xee\xb5\xb6\x16\xd5\x0d\xd0\xba\x71\xcc\x2b\xd4\x78\xb9\x66\x6e\x05\x54\xf9\x7f\xcd\xbe\x7b\xd6\x23\x9b\x5c\xb0\x3a\x26\x38\x89\x79\x77\xb6\xc5\xaa\xee\x41\x80\x62\xf7\xaa\x9b\xc7\x64\x8c\x6a\x5f\xdc\x78\xb4\x6c\xee\xaa\x3c\x16\x56\x1e\x21\xef\x68\x23\xbf\xe6\xf4\x0d\x30\x56\xbd\x7c\xd3\xf3\xff\x7e\x45\x04\xab\xbb\x07\x01\x0a\xde\x63\xd2\x7f\x62\xbd\x6e\xc5\x20\xbb\xfc\x68\xc8\xc6\x26\x50\x95\xf9\xa8\xa6\x58\xad\xdb\xdb\xdb\x74\x2f\xb6\x2f\xe8\xbf\x54\x2a\x36\x42\x20\xc0\x2a\xef\x41\x80\xa2\xf7\x4e\xc7\xf8\xf9\x0f\x7d\x8e\xdc\xf6\x1b\xe3\x3b\xdb\x3a\x47\xfe\xe5\xe1\xb7\x16\xfb\x91\x09\x6e\x95\xc3\xb1\xe9\xc7\x05\xbf\xa5\xb3\x23\x10\x60\xb5\xf7\x20\x40\xe1\x7b\xfc\xbe\x8b\x54\x02\x01\x1c\x7e\x74\xce\xbc\xc1\xee\xe5\xc1\xaf\xab\x76\x56\xc2\x49\x65\x68\xa7\xad\x4c\x77\x9c\xe9\x75\x7c\x76\xef\x1a\x58\xf5\x3d\x08\x50\xfc\x5e\x14\x29\x4f\xcd\xfa\xeb\x22\x66\x4e\xb9\x2a\x1b\xc1\x88\xb7\x66\x76\x7f\x84\x2f\x9a\x49\xbf\xda\xb2\x37\x0b\xca\x6e\x67\xc4\xa9\x23\x10\x60\xf5\xf7\x20\x40\x01\x7c\xb6\x93\x1c\xe4\x8f\x35\xed\x92\xae\xbf\x0f\x52\x73\xbf\xaa\x59\xf6\xbc\xfc\xec\x5a\x7f\xaf\x8c\xc7\x69\xb6\xb5\x23\xf1\x42\xc1\xf4\x08\x04\x58\x05\x3e\x08\x50\x04\x9f\x13\xa7\x3e\x2b\xee\x57\x76\xd9\x27\xe1\x17\xad\x8a\x71\x4c\x4b\x4c\x87\xde\x94\xb2\x1f\x14\x69\xc0\xf7\x66\x39\x35\x9f\xd0\xef\x8a\x40\x80\xd1\xe0\xdb\x2b\xd3\xbf\xf6\x3f\xf6\xca\x84\x42\xf8\x0c\xbb\xf5\x7b\x24\x17\xce\x1d\xe1\x8d\xcc\xa6\xac\x55\xe5\x3a\xb9\x5e\x29\x16\x89\x1f\x7e\xc0\xbd\xd6\xed\xe9\x44\x03\xf3\xd6\xee\x8c\x8e\x55\xe1\x83\x00\xc5\xf0\xd9\xd2\x64\xd2\x2b\xad\xf3\xf7\x7d\x09\xf8\x73\x4f\xf3\x64\xb8\x81\x92\x43\x98\xdb\xb7\xa2\xa9\xd3\xc1\x6e\xdc\xf7\xde\xc4\x68\x73\x21\x10\x60\x75\xf8\x20\x40\x41\x7c\xe5\x5f\x02\x1c\xab\x9b\x2a\xba\x5f\x0e\x39\x0e\xae\x89\xd2\xda\xd8\x3c\x94\x71\x66\x11\xcc\x60\xa3\x21\xec\xcb\x92\x1e\xf4\xdd\x5d\x1e\x61\x95\xf8\x20\x40\x51\x7c\x89\xa2\x47\xb5\x12\x05\xd7\xca\x7e\x50\xe1\xd9\x09\x0b\x05\x91\xe5\x33\x0d\x4a\x1a\x96\xf4\xfd\xe6\x8a\xb2\x34\x0a\x56\xed\x53\x42\x20\xc0\x6a\xf1\x41\x80\xc2\xf8\x1a\x13\xc4\x0f\x70\xb7\x74\x14\xd7\x99\x14\x8b\x8f\xdb\x3e\x98\xe0\x7c\x12\x5a\xe7\xbc\xc9\xa9\x10\xbb\x75\xbe\xdc\xec\xdc\xc8\x61\x04\x02\xac\x1a\x1f\x04\x28\x8e\xaf\xf8\xb5\xb9\xc7\x3b\xbc\xce\xde\xfc\xc4\x37\xd7\x79\xdf\x52\xd6\xf3\x89\x22\x1d\xed\x79\xc5\x41\x71\x86\x92\xdb\xd5\x89\x4f\x59\x11\x08\xb0\x7a\x7c\x10\xa0\x40\x3e\xcb\x79\x45\xaf\x4e\x22\x5e\xdf\xa4\x94\x60\x61\x8e\xcb\x8e\xf2\x11\x02\xa1\xf5\xd1\x5f\x4c\x16\xd7\xb2\xda\xc6\x5e\xf5\x2a\xec\x4e\x6e\x58\x45\x3e\x08\x50\x24\x9f\xab\x49\xe0\x13\x41\x44\x64\x5c\xa6\xf9\xf3\xa5\x53\x97\x56\x79\x1c\x2a\xc9\x64\xc2\x57\x1c\x7e\x0c\x69\xd3\xab\x90\xf8\x84\x1e\x45\x20\xc0\x68\xf2\xed\x95\xe9\x5f\x3b\x84\x7b\x65\x42\xa1\x7c\x02\xaa\x04\x77\x12\xd7\xad\x09\x2f\x36\x2a\x84\xb1\x9e\x19\xcd\xde\xe6\xf7\x63\xae\xbb\xa5\xf6\x7e\xab\x4f\xa0\x4e\x34\x31\x63\xf7\x96\x8f\x55\xe5\x83\x00\xc5\xf2\x29\x7f\x5f\x8b\x6b\xe1\x65\x22\x4e\x95\xb2\xe0\x8a\xbc\xad\x42\xf0\x86\xe2\xc6\xf3\x27\xe1\x8f\xde\x71\x18\x3a\x3e\xba\x9b\xe4\x82\x87\x40\x80\xd5\xe5\x83\x00\x05\xf3\xf5\x1c\x6e\x22\x15\x6d\x7d\x52\xf9\x65\x55\xb7\x7b\x96\x93\x3a\x69\x83\x4f\x96\x94\x9e\xa1\x3f\xa9\xa6\xfd\xc0\x66\x9f\x0f\x8b\x31\x02\x01\x56\x99\x0f\x02\x14\xcd\xf7\xa5\x4e\x80\x34\x05\x72\xf3\x5e\x13\xa1\x0b\x50\xbe\xd6\x24\x98\xb6\xda\x40\xbf\x4a\xde\x17\x9e\xb6\xc1\xc9\x7c\x29\xe6\x86\x08\x02\x01\x56\x9b\x0f\x02\x14\xce\x67\x74\xfa\xc9\x44\xd1\x10\xfd\xa6\x89\xad\x85\x10\xf7\x84\x4f\xd3\x83\x4a\x91\xd9\xb3\xf6\x76\xdb\x25\xc7\x0c\xdf\xdd\x21\x34\x15\x47\x20\xc0\xaa\xf3\x41\x80\xe2\xf9\x4c\x5f\xbe\x57\xb2\xf4\x7e\x9d\xb9\x29\xce\x89\xc4\xfd\x60\xb8\x5a\x70\x87\x3a\xb2\x8a\x88\xec\x76\x18\xed\xed\xe4\xed\xa9\xfb\xa6\x08\x04\x58\x7d\x3e\x08\x50\x40\xdf\x01\x99\x43\x2c\x72\x47\x2a\x97\x93\xdf\x4c\x34\x53\x4e\x88\x25\xfe\x89\xe0\xf2\x6b\xed\x27\x5b\x11\x12\x36\xea\x59\x7a\x61\x4d\x8c\x40\x80\x55\xe8\x83\x00\x45\xf4\xdd\xad\x9a\x76\x79\x9b\xde\xe8\xd8\x56\x9f\x71\xd3\x05\x38\x33\xac\x67\xe8\x4c\xde\xe9\x3b\xed\x90\x5a\xda\xdb\xf2\xb5\x23\xed\x00\x02\x01\x46\xa3\x6f\xaf\x4c\xff\xda\x43\xdf\x2b\x13\x0a\xe9\xbb\x94\x7e\x88\xc9\x94\x34\x42\x56\x47\x9e\xfe\x4f\x3f\x7d\x89\xcb\x4a\x90\xac\xb7\xc2\x92\x28\x1d\x59\xf6\x3d\xc9\xe4\x3a\x43\x02\x04\x02\xac\x4a\x1f\x04\x28\xa6\x4f\x97\x59\x0b\xfa\x93\x74\x7c\xc8\xbc\x35\x52\xed\x15\x10\x8d\x4f\x7e\x77\xf6\x6b\x5f\x8f\x40\x50\xe5\x93\x6c\xa7\x98\x79\xa1\x2b\x08\x04\x58\x9d\x3e\x08\x50\x50\x9f\xd7\x7a\xa4\x4d\x44\x83\x16\xc3\xa3\x97\x9b\xb6\x1e\x51\xe9\xf5\xef\xf8\x97\x99\xc4\xd3\xad\xcd\xe6\xdc\x05\x93\x13\x96\x46\xd5\x10\x08\xb0\x4a\x7d\x10\xa0\xa8\xbe\x54\xaf\x2f\x3a\x53\xae\x8d\xed\x77\xa6\x36\xbe\xd9\xbf\xcd\x4a\xed\xad\x1d\x3e\x7f\xb3\x58\xfd\xfc\x37\x59\x5a\xdf\x7b\xee\x33\xbb\xcf\x33\x58\xad\x3e\x08\x50\x58\x9f\x45\x9f\x89\xe1\x88\xc3\x91\x47\x67\xf3\xda\xc3\x28\x83\xdf\x6d\x5b\x90\x8e\x38\x48\x33\xd1\x85\x83\x12\x1f\x4a\xe5\xae\xe8\x83\x08\x04\x58\xb5\x3e\x08\x50\x5c\x1f\xdf\x87\x9e\xbe\x3a\x89\xf4\x9f\x4b\x03\x03\xf5\xe5\x6f\x8a\x4b\x2d\xf5\x63\x96\x7c\xd5\x13\x5a\x79\x3c\xad\x67\x2c\xb3\x53\x77\xef\xe2\x58\xbd\x3e\x08\x50\x60\xdf\xa9\x8a\x93\x7a\x1f\x53\xb8\x39\x79\x1b\xb9\x9c\xed\x02\x2e\xd2\x53\xbc\x3d\xe5\x67\xbd\x95\x39\x22\x4d\x15\x52\x3a\xf3\x94\x6e\xf7\x99\x09\xab\xd8\x07\x01\x8a\xec\xe3\x90\x1d\x17\xa3\x64\x9d\xb7\x6b\xa7\xbf\x75\x95\x29\x7d\xfb\x8c\x52\x09\xee\xea\x97\xbb\x32\x37\x3b\xca\xe6\xff\x5c\xb6\xc7\xed\xde\x08\xfe\xa3\xd9\x27\xbc\x61\x27\x25\x40\xd5\xfc\x89\xb7\x30\x54\xc1\xc3\x59\xd6\xe6\x59\x77\x49\x28\x43\xb5\xa2\x6e\xb5\xc9\x7c\xe7\xa7\xba\xe2\x27\xa8\xc3\xbe\x59\xbc\x4e\x42\xa7\x6f\xf7\x49\xe4\xe6\x7b\x5d\x3f\xbe\x68\xe4\xb4\xbe\xe7\x4e\x35\x13\x95\xe3\x15\x4f\xf9\x32\xa3\xfb\xea\xa4\xfa\x5f\x43\x23\xcc\xd4\xa8\x64\x3f\x15\x8f\xc9\xf2\x4f\x5d\x91\x88\x37\xfa\xa2\xc2\xeb\x72\x5e\x26\xaf\x97\x29\xe2\x54\x4e\x5b\x87\xeb\xd5\xbf\x7f\x58\x77\xee\xba\x77\xad\x4c\x0f\xaf\x22\xc9\x66\x66\x2c\xab\x65\x9f\xf6\x99\xad\x64\x9b\xa0\x6d\x59\x22\xf2\xc3\x4c\x1e\xf7\x4f\xe8\x8c\xfd\x35\xf4\xb7\xc4\x83\x18\x1e\x09\x8f\x81\xcd\x91\xee\x87\xbd\x8b\xd1\x78\x86\x17\x58\x1d\xff\xcc\xc5\x8e\x73\x35\x1c\x7a\xeb\xf3\xbb\xf8\x6f\x32\x2f\x46\xa0\xb8\xf9\xeb\x58\xea\xe0\xe9\x3a\x65\x0e\x16\x1f\x90\x5f\x1c\xa9\x7f\x34\xf0\x5b\xb7\x50\xf3\xfb\x84\x5b\x4f\x4d\x40\xeb\xdf\x66\xdf\xe2\xa1\xde\x28\x7f\x91\x47\x3c\x4f\x03\x1a\x37\x6b\xee\xea\x30\x7b\x70\x19\x0a\xc4\x71\x10\x8e\xae\x8a\x25\xdb\x45\xe7\x69\xfd\x35\xd4\x58\xa8\x97\xdf\x49\x7c\x02\xaf\x54\xcf\xe0\x99\xed\xe1\xe7\xd9\xba\xc3\x51\x45\x0f\xff\x38\x8d\x32\x64\x85\x0c\x2d\x3e\xb0\xb7\xfb\x6b\xe8\xa7\xe6\xc4\x71\x91\xaa\x2f\x91\xec\xf5\x9f\x9a\x1f\xd3\xf6\x5f\x1b\x39\x76\xfc\xfd\x9d\x4f\x17\x17\x02\x5e\x5d\xf6\xd8\x64\xb6\x6f\xf3\xdf\xfb\x23\xfc\xeb\x5d\x45\xfd\x11\xc2\x46\x6d\xd6\x64\x8a\xc5\xd3\xfd\xa9\xc7\x8e\x6a\x86\x65\x55\xd9\x72\x1f\x57\x63\xf1\x1b\xfd\x61\xda\x18\x5d\xca\xd7\xab\xd0\xfb\xd7\x50\x85\x9c\xca\x2a\x26\x0b\x9d\x05\xd3\xb6\xa7\xf2\xe7\x3d\x52\x8f\x53\x84\xba\xd3\x59\x37\x50\x84\x71\x29\x1f\x01\x4d\xc2\xe3\x04\x7f\x0d\xb5\x3a\xf9\x21\xd3\x3d\x7e\x62\x8a\xa4\x8e\x47\x81\xdb\x80\x80\xbd\xd9\x9e\x79\xb2\x42\xbd\xbe\xf7\x60\xa4\xdf\x0f\x3f\x91\xa6\xbf\xff\x08\xa6\x7d\x3e\x02\x9f\x37\x1f\x2b\x0f\xfa\xf3\x71\x57\x90\xe2\x75\xbe\x3f\x78\x44\xa6\xfb\xa1\xf4\x83\x49\xb6\x48\x6b\xf1\xf1\x85\xe1\xbf\x86\x6a\xb6\x3c\xcc\x3f\x2e\xe6\x7e\x4c\x4d\x75\x48\xfd\xc3\xc0\xf3\xf2\xfa\x95\x3f\xcb\xd7\x3e\xb9\xce\x57\x9e\xd3\x9f\x33\xde\xd6\xf9\xdb\x58\x9c\x66\xbd\xfe\x83\x32\x8c\x8d\x12\x87\xaf\x92\xea\xfe\x35\xe9\x26\x75\x99\x4a\x99\x42\xed\x68\x61\x53\x45\x1b\x07\x59\xa9\x6c\xfc\x5f\x43\xf9\xef\x34\xb0\x0f\xf3\xe4\xfb\x32\xf3\x3e\xf4\xba\x90\xe8\x72\xcd\xb4\xef\x40\x74\xd3\xff\xc3\xd9\x7d\x47\x73\xf9\xfe\x7f\x00\xd7\x75\xdb\x23\xb2\x6f\x3b\x22\x65\x66\xef\x11\x29\x94\x99\xf8\x20\x23\x33\xca\xcc\x16\xee\x42\x42\x46\x48\xa4\x34\x8c\xb2\x29\xb2\xa3\xac\x22\x25\x23\x91\x99\x64\x96\xec\x64\xfc\xce\xfb\x9c\x5f\xdf\xd3\xb9\xfe\x71\xee\xfe\x7f\x9d\xe3\xbc\xef\xf7\xfb\x79\x5d\xaf\xd7\x75\x9d\xdb\x43\xb2\x68\xae\x49\x7b\xb8\x75\xf9\xce\x09\x8e\xbf\x4a\x5b\x1e\xd8\x35\x48\x4e\x8e\xb3\xe4\xba\xd2\x4e\x67\x9a\x46\xfa\x16\x92\xc5\x17\xe8\xea\x2a\x1f\xae\x97\x79\x10\x69\x42\xea\x97\xfd\xbf\x1b\xd7\xdd\x9e\xea\xff\x6f\x2b\x00\x82\x13\x59\x2e\x5a\x12\x4d\xed\x57\x09\xf6\x69\xab\x57\x52\x94\x3c\xbf\x9a\xc8\x25\x2a\x6f\x53\x21\xcd\x49\xfc\x70\x61\x43\xe2\xeb\x4f\x75\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x59\x1d\xf7\x2c\x76\x3a\xf4\x68\xf4\xb7\x17\xd5\x06\x9e\x2f\x7e\x2b\xbb\x85\x1d\xad\xb9\x7a\xeb\x1d\xf1\xf1\xd7\xe3\xcc\x9d\x8a\xff\x61\x28\xc0\x0d\x27\x02\x08\x4e\x6c\x63\xb2\x7f\xdb\x89\xf9\x1e\x38\x3c\xb4\xcd\x56\x2f\x2d\xf2\x3d\xb3\x55\xa7\x69\x8e\x79\x93\x6e\x81\x4f\x5f\xa7\xfd\x25\x0d\x2d\x86\x02\xdc\x70\x22\x80\xe0\xc4\xfa\x89\xfb\x92\x16\xa1\x3c\x13\x91\x72\x2e\xaa\xba\x62\x13\xd7\x92\x7a\xe2\x94\xda\x0b\xac\x03\xb7\xc3\xa4\x92\xb5\x3f\x5f\x39\x86\xa1\x00\x37\x9c\x08\x20\x38\xb1\xd1\x47\xf1\xfd\xc5\xc8\x06\xf7\x10\xbe\x79\xb7\xc9\x67\xbd\x0b\x49\x0e\xbe\x68\xda\x83\xce\xc8\x88\x53\xa0\x44\xe2\x2c\xd1\x29\x0c\x05\xb8\xe1\x44\x00\xc1\x89\xee\x9c\x6c\x76\xac\xa3\xd2\x43\x6b\x57\x9c\xa5\x87\xfb\xde\xbf\xd5\xf7\xa8\xa7\x1c\x36\xb5\x5f\xcf\x3a\xca\x13\x9e\xdb\xeb\x27\x89\xa1\x00\x37\x9c\x08\x20\x38\x31\x62\xd1\xd3\x29\xc2\x6b\x68\xbf\x5a\x4e\x5c\x6a\xae\xf7\x89\xdb\xbe\x2f\x2e\xb1\x31\x4f\x36\xfa\x91\xba\xb3\xba\x36\x6c\xc8\xea\x63\x28\xc0\x0d\x27\x02\x08\x4e\x34\x38\x5f\xb4\x7c\x21\x47\xd8\x3b\xd8\x16\x69\x73\x54\xdf\x9f\x54\x9c\xbd\x72\x64\xc1\x70\xef\xb4\x04\xf5\x87\x00\x71\xbe\x7e\x25\x0c\x05\xff\x08\x27\xee\xb6\xee\xfc\x09\x13\x04\x27\xc6\x3d\x0b\xde\xee\xcb\xb9\x59\xb6\x32\xad\x1c\x97\x27\x5a\xdd\x7e\x77\xa1\xef\x13\xfd\xa1\xa6\xb3\xfd\x0c\x6d\x22\x4c\xe2\xbe\x17\x31\x14\xe0\x86\x13\x01\x04\x27\x7e\x31\x92\xe2\x30\x72\x2d\xff\xcf\xfa\x04\xed\xb8\xbc\xbb\xd7\x82\xff\xde\xd3\x3f\xbd\x4a\xf9\x73\x19\x04\x6c\xd2\x4c\xac\x1f\xb1\x63\x28\xc0\x0d\x27\x02\x08\x4e\x8c\x4b\x5e\xfb\x7a\x68\xe1\xf4\xb1\xdf\x4f\xde\xcb\x4e\x4c\x87\x1f\x73\x5f\x7f\xfd\x89\xbc\xf1\xc9\xfb\xff\x2a\x1a\xfc\xea\x3a\xd8\x65\x31\x14\xe0\x86\x13\x01\x04\x27\x8a\xfb\x95\x08\x86\x65\x7f\x1c\x43\x8b\x72\x2e\xb5\x5b\x9a\xee\x64\xd6\x1b\xdd\xc4\x56\x8c\xcf\x3f\x69\x93\xf7\xd2\xce\x7d\x28\x83\xa1\x00\x37\x9c\x08\x20\x38\x31\x62\xe3\xe6\x97\x07\x8a\xcf\x16\xbf\xf0\x25\xcf\xbd\xe7\x68\x30\x4a\x32\x0e\xa8\x60\xb9\x3e\x7d\x56\xfd\xa9\xdc\xa5\x59\x26\xda\xe3\x18\x0a\x70\xc3\x89\x00\x82\x13\x6b\x48\x42\x9c\x59\xd5\xbb\x0c\x8b\x84\x72\x4b\x6d\x6f\x96\xc8\xa6\x55\xfb\x7d\xfc\xb5\xdc\x24\xcf\xfc\x25\xdd\xcd\x7f\x36\x84\x13\x43\x01\x6e\x38\x11\x40\x70\xe2\x16\xdd\x2c\xd6\xc1\x60\xa4\x41\xb3\xf3\x92\x62\x60\x6c\x38\xb0\x67\xb0\xf7\xe3\xea\xe4\xce\xfe\xe4\x04\x6d\x93\xb5\xe8\x27\xf2\x18\x0a\x70\xc3\x89\x00\x82\x13\xb5\x83\xd6\xac\x78\xac\x9a\x13\xc6\x8a\x0b\xaa\x88\x81\x65\xcd\x98\x65\x96\x11\x73\x9a\x07\xfa\xb8\xff\xd7\xc1\x90\x34\x2d\x0e\x0c\x05\xff\x08\x27\xee\xb6\x33\xff\x09\x13\x04\x27\x4e\x3f\x6b\xf5\xcf\x55\xee\xe6\x44\x6f\xbe\xbe\xbc\x58\xf3\x5d\x6a\xe0\x6c\xb7\x91\x95\x38\x97\x3f\x4d\x8b\x86\x57\xbc\x87\xbf\x09\x86\x02\xdc\x70\x22\x80\xe0\xc4\xeb\xab\x1c\x77\x4f\x2d\x79\x84\xf0\xf2\x2b\x0a\xef\x7b\xc3\x9f\xce\xd1\xbe\x15\x5f\xd5\xbf\x87\xdd\x5c\xe0\xf1\xcc\xb4\x73\x06\x0d\x86\x02\xdc\x70\x22\x80\xe0\x44\x4b\x59\x9d\x80\xb5\xea\xbb\xf9\xcb\xa7\x48\xdf\xc8\x6d\x38\x87\x2b\x09\x4a\xd8\xdc\x5b\x9b\x39\xff\xb2\xab\x60\xef\xac\xbf\xae\x19\x86\x02\xdc\x70\x22\x80\xe0\xc4\xa4\x0b\xcb\xfd\x51\xb6\x4e\xe1\x4c\xf4\x5b\x71\x5c\xaf\xb7\x31\x80\x5a\xa5\x4e\x6c\xc5\x67\x16\x1b\x69\x4d\xca\x7c\x77\x56\xc1\x50\x80\x1b\x4e\x04\x10\x9c\xc8\x39\x79\xa3\xda\xf1\x75\xc1\xfc\xea\x23\x3b\xa2\xd5\x66\xc1\xa6\x99\x20\xf7\xe9\x66\x9b\x61\x89\xe0\x50\x9f\x96\xa1\x0c\x3a\x04\x43\x01\x6e\x38\x11\x40\x70\x62\x6f\xcf\x05\xf3\x5e\xd9\xb2\x71\x75\x9b\xec\x78\xef\x8b\x4c\xfe\x67\x86\xf7\x77\x0e\x88\xe4\xf8\x10\x07\x3b\xde\xbc\x7f\xa6\x95\x0b\x43\x01\x6e\x38\x11\x40\x70\x62\xd8\xdd\x9e\x35\x21\xc7\x0b\x2c\x5d\xf7\x1c\xf8\xce\x86\x2b\x64\xfa\x8c\xa9\x24\x5d\xe5\x53\x22\x36\x38\x86\xaa\x05\xe8\xd5\xee\xc3\x50\x80\x1b\x4e\x04\x10\x9c\x38\x70\xca\x69\x9f\xc5\xbd\xa9\xc3\x5c\xe9\xfc\xa4\xf2\x07\xed\x47\x48\x1e\x79\xe7\xbd\xeb\x3f\x7e\xf1\x00\xe7\x94\x82\xa1\xc1\x84\x29\x86\x82\x7f\x84\x13\x77\xeb\x5d\xff\x84\x09\x82\x13\x07\xae\xb7\xdc\xb4\xf7\x2b\x3b\xcb\xb1\xfe\x3d\xe1\x52\xce\xd1\x80\xad\x68\xea\x6f\x7d\x57\xcf\x9a\x92\x5c\xb9\xbc\xa9\x9d\xdc\xc4\x83\xa1\x00\x37\x9c\x08\x20\x38\x71\x89\xc3\x55\x70\xe0\xec\x11\x2a\x81\xa2\xb7\xfd\xaa\x1c\x46\x9a\x52\xcc\xd1\x2b\xbf\x8e\x67\x89\x1a\x7b\xe6\xf6\x8c\x8d\xa8\x11\x56\x5b\xdc\x70\x22\x80\xe0\xc4\x67\x0d\x51\xed\xec\xd4\xa9\x67\x8c\xd8\xb7\x65\xf7\xda\xae\x84\xb5\x48\x7e\xfc\xd5\x5d\x3a\x71\xcd\xc8\x95\x8e\xe8\xb1\x61\xf4\x21\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x39\x6a\xc8\xe9\x0e\xc9\xa8\x64\xa6\x80\x7d\xad\xd9\x2c\x94\xa7\x6c\xbf\xff\x3c\x30\xcb\x38\x1a\xe2\x21\x50\x72\xe9\xc8\x6a\xe5\x05\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x46\xb5\xef\x32\xa6\x2f\x36\x9b\x71\xef\x71\x2a\xf0\x12\x98\x17\x34\xfc\xe8\x3a\x35\x1a\x75\xfc\x5c\xf0\x7f\x9e\xde\xce\x52\x5c\x46\x18\x0a\x70\xc3\x89\x00\x82\x13\xcf\x16\x71\x28\x18\xb3\x46\x9d\x8a\x9d\x38\x94\xc5\xae\x92\x64\xe8\x54\x6f\x69\xca\x4e\x21\xf4\x22\xfa\x40\x9b\x9d\x20\xf6\x4c\x1b\x43\x01\x6e\x38\x11\x40\x70\xe2\xc6\xe0\x4b\xdd\x12\x07\xb1\x88\x12\x60\x26\x34\x5d\x9e\xed\x23\x68\x9f\xb0\x60\x76\x2c\x3f\xf4\xed\x39\x2a\x83\xf7\x62\x6a\x84\x9d\x09\x37\x9c\x08\x20\x38\x71\x2e\x53\xf5\x54\xdc\x44\xea\x6b\x19\x8d\x08\xf6\xab\xa6\x47\xbb\x6c\x2a\x6b\x74\xff\xf3\xa8\xb6\xd7\x78\x27\x2c\xa7\x5f\xeb\x60\x8d\xa1\xe0\x1f\xe1\xc4\xdd\xa6\xbb\x3f\x61\x82\xe0\x44\x33\xc7\xff\xe6\x8f\xb1\x45\x8c\x3d\x8b\xb1\x53\xb6\xcf\x94\x5e\xbd\x9d\xe5\x7c\x3e\xeb\x56\xd4\x67\x7b\x1b\x3e\xb7\xbb\x62\x36\x16\x18\x0a\x70\xc3\x89\x00\x82\x13\x6d\x95\x92\xec\xf7\xa5\x71\x1d\x7b\x72\x32\x8f\xec\x51\x93\x61\xc3\x66\x60\x2f\x99\xd2\x63\xa1\x11\x67\x5b\x53\x26\x3d\x15\xd2\x33\x18\x0a\x70\xc3\x89\x00\x82\x13\x75\x65\xf7\xcb\xda\xa6\xce\x6f\xd8\x8c\x0b\x50\x5d\x35\x7f\xc4\xc2\x46\x7e\x85\x26\x4c\x5a\x20\xd1\x76\x46\xd3\x2a\xc0\xda\x89\x0f\x43\x01\x6e\x38\x11\x40\x70\xa2\xd3\x4d\xf9\x97\xe3\x4d\x65\x4f\x3d\xd4\x58\x5e\x2a\xb6\x93\x96\x15\x50\x96\x12\x1f\xca\x9a\xff\x4f\x0f\xe1\xa8\x8a\xe5\x78\x44\x86\xa1\x00\x37\x9c\x08\x20\x38\x31\xe7\x0e\xcd\x1a\xc7\x24\x31\x7f\x80\xfb\xdb\x83\xcb\x36\x75\x19\x09\xb4\x2d\x3f\x49\xf9\xb3\x4d\x7f\xd2\xee\xf1\x18\x1e\xfb\xe4\x8c\xa1\x00\x37\x9c\x08\x20\x38\x51\xc6\x54\xcc\x35\xf5\xc7\xa5\x1f\x33\xa4\xd7\x48\xbf\x90\x0f\x0c\x3f\x7e\x95\x7f\xd7\xa9\xa8\x7c\x9f\xd0\x6f\xe7\x76\x1f\xfa\x11\xc2\x0c\x8b\x1b\x4e\x04\x10\x9c\xc8\x1f\x6c\xfa\x54\x44\x8d\x86\x37\xac\xe2\xd7\x8c\x1e\xbf\x04\x39\x87\x38\xe5\xfb\x32\x3a\x43\x9a\xaf\xb9\x97\xdb\xd9\x2f\xe4\x13\xe6\x19\xdc\x70\x22\x80\xe0\x44\xb9\x03\x7e\xe7\x24\xc9\xaf\xb0\x25\xd9\x58\x5e\x8a\x36\xff\xc0\xce\xd2\x3a\xfc\x51\x86\x45\xea\x90\x59\x93\x4d\xd2\xc5\x07\xe3\xf4\x18\x0a\xfe\x11\x4e\xdc\xed\xfc\xe3\x4f\x98\x20\x38\xf1\x38\xe7\xf5\xad\xec\xa2\x2b\x55\x9b\x6f\x46\x5f\x88\xd8\xb4\xde\xa9\xb2\x22\x06\x44\x3e\x3b\xbf\xe7\xe5\xf9\x1b\x85\xe7\xca\x08\x03\x2f\x6e\x38\x11\x40\x70\xe2\x1a\xd3\xc0\xc7\x1d\x37\xaf\xa9\xf8\xc7\xcb\x4e\x86\xc1\x43\x51\xa4\xee\x0f\xc4\x17\xbd\x94\xfe\xeb\xa3\xfa\x95\x4c\xfc\xc5\xdc\x13\x43\x01\x6e\x38\x11\x40\x70\xe2\x9d\x0c\xa9\xc0\x93\xae\x11\xed\x5a\x5c\x44\x0a\x37\xc9\x76\xce\x71\x09\xf0\x49\x96\xba\xef\xed\x3a\xf7\x51\x23\x44\xbc\x39\x48\x18\x43\x01\x6e\x38\x11\x40\x70\xe2\xe9\x65\x31\x13\x31\xbb\xe9\xc6\x7a\x20\xac\xe2\x65\x18\xfb\xd3\x5d\x77\x58\xe1\xc2\xfa\xe8\x23\xe5\x68\x0d\x8a\xfa\xba\x3b\xfb\x31\x14\xe0\x86\x13\x01\x04\x27\xae\x1e\xa5\xbc\xfa\xa0\x98\x34\x53\x2d\xc9\x3b\xa1\xd4\xec\xb7\xd6\x71\x03\x2a\x06\x86\xd5\x0f\x9e\xde\x4c\x4c\x35\x13\xa2\x19\x0e\x18\x0a\x70\xc3\x89\x00\x82\x13\x99\x5a\xde\x5d\x9e\xfc\xc4\x90\x48\xca\x93\x67\xdf\xe2\x26\xad\x90\x12\xd1\xb3\xa0\xf3\x05\x59\x4d\xf9\x19\x91\x79\xef\xba\x83\x3d\x86\x02\xdc\x70\x22\x80\xe0\x44\x52\x19\x26\x49\x4e\x71\x3e\xaf\x53\x1b\xae\x63\xd1\xa5\x76\x8a\x4a\x92\x5e\x95\x4f\xf5\x73\x3a\x2f\x88\x4f\x29\x26\xf9\x86\x12\x76\x58\xdc\x70\x22\x80\xe0\x44\x69\xab\x90\x8b\xb7\xe9\x3a\x9d\x27\x19\x41\x9a\x94\xeb\xaf\xd8\x93\x29\xee\x5d\x2f\x45\x12\x95\xef\x77\xec\x6f\x8d\x60\x94\x67\xc6\x50\xf0\x8f\x70\xe2\x6e\x27\x84\x7f\xc2\x04\xc1\x89\xed\xe5\x82\xb3\xc9\xb4\x14\x33\xb1\x8f\xd4\x94\xef\xf6\x7c\xca\x7f\x78\xb0\xb1\x7a\xe1\x8d\x9f\x84\xf3\xa7\x27\xe2\xd2\x8b\x66\x6e\x18\x0a\x70\xc3\x89\x00\x82\x13\x79\xb5\x03\x42\x15\x99\x54\x07\xef\x4a\x79\xcb\x4e\x8f\xe4\xaf\xb2\xd6\x3f\xe0\xec\x98\x37\x21\x06\x2c\x2f\xc5\x2f\xbf\x3e\xa7\x8a\xa1\x00\x37\x9c\x08\x20\x38\x11\xbb\xba\xd7\x5f\x37\xb4\x73\xa3\x3a\x55\xd4\x5b\x55\x5a\x11\x51\x17\x4a\x70\xff\xd4\xa6\xf3\xde\xe8\x93\x0d\xf6\x3e\x88\x81\x1d\x43\x01\x6e\x38\x11\x40\x70\x62\x96\x97\xe2\xc9\x91\x50\xdb\x06\xb9\x62\xde\x59\x30\x75\x37\xd9\xe0\xb9\xb2\xcc\x9b\xa8\xc1\x88\x1d\xfe\x3d\x62\x72\xbf\xbf\x11\x06\x77\xdc\x70\x22\x80\xe0\x44\x6c\x68\x4f\x8e\xae\xe0\x17\x3a\xef\x2d\x35\xae\xcf\x79\x67\xba\xc7\xb4\x9f\xac\x3f\x4b\x57\x4f\x52\x78\x7a\xa4\x65\xda\x23\x44\x0a\x43\x01\x6e\x38\x11\x40\x70\xe2\x77\x7b\xeb\x6b\x3e\x13\x95\x25\xfb\xb1\xfe\xc1\x5e\xaf\x44\xd1\xf1\xae\xae\x17\xe3\x68\xe2\xca\xd4\xbb\x53\x27\x9a\x16\x0f\x12\x76\x26\xdc\x70\x22\x80\xe0\x44\x91\xa5\x03\x9a\x73\xef\x1c\x9f\x5e\xd0\xe5\x19\x55\x11\xfd\xaf\x96\xb4\x2e\x20\xea\xa4\xfa\x86\x78\xde\xb0\xa9\xb5\x51\x5b\x2c\x05\x86\x02\xdc\x70\x22\x80\xe0\xc4\xb3\x7d\xc7\x45\xd7\x29\x56\x67\x15\xdf\x4b\xbd\xde\x4c\x71\x2d\xfc\xaa\x53\xef\x4b\x73\x82\xae\xa4\xee\xfa\xc0\x99\xca\x16\x39\xc2\x02\xfa\x8f\x70\xe2\x6e\x67\xe8\x7f\xc2\x04\xc1\x89\x23\x6c\x1b\x24\xc9\x1c\xeb\xa7\x39\xe6\x76\xc2\x92\x9e\x7c\x7e\x6c\x4d\xf3\x92\xf8\x6a\x79\xf1\xa9\x02\x1e\xd7\x1f\xe2\x3d\x74\x47\x31\x14\xe0\x86\x13\x01\x04\x27\xfe\x17\x48\x1f\xb7\xd5\xb2\xf5\xc5\x26\x62\xf6\xb4\x61\xb5\xd8\x5d\xcb\xd8\x81\x71\xbd\xc4\x03\xf9\xcf\x88\x85\xde\x8b\x1c\x97\x72\xc1\x50\x80\x1b\x4e\x04\x10\x9c\xf8\x72\xd9\x2c\x67\x6e\xcf\x0d\x3f\xbf\xf3\xc6\x2b\x09\x97\xe9\xf4\x84\x0e\xc8\x4f\x52\xcd\x5f\xb9\x30\xfc\xda\x5c\x28\xf9\x21\x91\x02\x86\x02\xdc\x70\x22\x80\xe0\x44\x7d\x6b\xce\x4d\xbe\x40\x63\x96\x36\xfe\xcf\x8f\x12\xcd\xbe\xa7\x5a\xa5\x0a\x65\xa7\x04\x34\x58\x0b\x5c\x16\xb5\x3a\xac\xbe\xc7\x18\x43\x01\x6e\x38\x11\x40\x70\x62\xbd\xf9\xa0\xb7\xed\x48\x8d\xfe\xd6\xd7\x1b\x61\x1f\x8f\xc5\x37\xeb\xbe\x09\x97\x60\xf2\xf9\xc8\x33\x85\xb5\xd2\x48\x58\x35\x10\x7e\x84\xb8\xe1\x44\x00\xc1\x89\xa7\x7f\xf3\x45\x31\x30\x2a\xf3\xc8\xb5\xe7\x31\x6e\x9a\x4d\xa6\xde\x3f\x5d\x1e\xdf\xa9\x1d\x23\xbe\xd1\xe1\xa6\x1f\xa2\xf8\x80\x0d\x43\x01\x6e\x38\x11\x40\x70\x62\xaa\xc4\x5e\xf3\x07\xf2\x36\xc7\x98\x3d\xa2\x6b\xf9\xcf\xd0\x07\xed\x93\x8c\x0d\x28\xf0\x3b\xa4\xed\xd7\x47\x1e\xad\x9b\xf3\xfe\x04\x86\x02\xdc\x70\x22\x80\xe0\xc4\xe1\x74\x03\xb9\x40\xd7\xa1\xb1\x1b\xc7\x6f\xdd\xf7\x79\x5a\x29\xd6\xc3\xe2\x96\x45\x7f\xf9\x0b\x59\x63\xdd\x55\xa3\x9f\x39\x51\x07\x31\x14\xfc\x23\x9c\xb8\xdb\xbd\x28\x74\xd9\x77\x8d\xac\x2c\xbe\xf1\x91\xd5\x11\xe7\x9a\xbe\x53\xce\x8f\xf6\x9d\xdb\xf0\x73\xfa\x6e\xdd\xa8\x2d\x36\xd7\x4e\xd1\x73\x3e\xbd\xeb\xef\x97\x0b\x0d\x97\xa4\xe9\x96\x17\x58\x75\x2c\x9f\x87\x87\xe4\xb0\x36\x14\x56\x33\x7f\x1d\x1d\x20\xce\x3c\xed\x18\x31\x91\xda\x1a\xf3\x76\xf0\xaf\xd2\xdc\x0c\xc1\xfb\x4d\x5f\x63\xdf\x9a\x77\x5f\x16\x7d\xaa\xea\x77\xe9\x3c\x45\xdc\x4a\x91\x96\x89\xac\xec\x5e\xc1\x58\x0b\xeb\x5b\x7f\xbf\x08\xb9\xff\x0e\x67\xb6\x0f\x8f\xa7\xa1\x81\xee\xa3\xb0\xc3\x5b\x62\x37\x68\x35\x06\xf5\xac\xaf\x48\x69\xbb\x6b\x85\x56\x89\x9e\x08\xb2\xfe\xab\x34\x5f\x65\x82\x59\x7c\x43\xb5\xab\x64\x51\xbf\xc0\xe6\xa9\xc2\xd7\xe0\x70\xee\x23\xbd\x1d\x71\xcf\x13\x46\x5f\x78\xb4\x15\xb0\x47\xfe\x55\xca\xae\xb9\xc0\x4a\x42\xbe\xe7\x21\xcb\x8d\xd5\xef\x33\xd7\x6f\x64\xd1\xed\x97\x50\xe4\xcd\xe0\xbb\x1b\xa5\x94\xfb\x4c\x1d\x6d\xa9\xfa\xab\x54\x52\xee\xfd\xa1\x9d\xb1\x66\x81\x79\x4f\x31\x6f\xfe\xe7\x35\xf1\x0e\x0f\x35\x4b\x9f\x15\x0e\xb8\xb8\xaa\x2d\x98\x0f\x45\xc6\x54\xff\x55\x6a\x11\xa0\x1a\xe8\xc3\xcc\x3c\x5a\x78\xc5\xc2\x9c\x06\x55\xeb\xa6\x2d\xf2\x78\x4d\x53\x35\x9c\xa4\xa2\xc2\x7f\xdd\x2f\x7a\x30\xf8\x7f\x97\x7d\xbb\x3d\xd5\x3f\x2b\x1a\x04\x27\x36\x16\xf2\xfb\x6f\xd1\x19\x8d\x04\x36\xde\x51\xd8\x17\xe1\x26\x34\x4c\xe5\x1c\xd4\x17\xf2\x3b\xae\x75\xe9\x52\x82\x43\xd6\x2f\x42\x1f\x8c\x1b\x4e\x04\x10\x9c\xd8\x7c\x77\xfb\x1e\xfd\xe3\xa5\x59\x4d\x75\x2b\xd5\xcd\x9f\x41\x71\xc5\x45\x77\x0f\x64\x69\x65\xc7\xc4\x7e\xeb\xbc\xeb\x4a\x27\x4a\xe8\xe7\x71\xc3\x89\x00\x82\x13\xa7\xd9\xf5\xce\x5b\xe5\x64\xdf\x75\xaf\xe7\x66\xfc\xf0\xca\xee\x00\xad\xf6\x5e\x93\x49\xcd\xab\x4e\xd7\xe5\x6a\xc5\x28\x1d\x74\xad\x31\x14\xe0\x86\x13\x01\x04\x27\x7e\x17\x3d\xb1\x77\xf1\x02\x79\xd5\xbb\x03\x7c\xcb\x1e\x5a\xb1\xdc\x3f\x5b\xdb\xae\x13\xa5\xee\x3f\x3d\xe1\xb3\x5c\x05\x36\x94\x35\x31\x14\xe0\x86\x13\x01\x04\x27\xce\x95\xf8\xc8\x88\x7d\x50\x97\x58\x4d\x59\x91\x8c\xea\x30\xe7\x95\xd3\xac\x7d\x67\xe0\xab\x4e\xb7\x20\x7b\x25\x64\xd9\x6a\x8c\xd0\xae\xe1\x86\x13\x01\x04\x27\x8e\x87\x77\xec\xed\x5f\xba\x74\xe2\xc6\x81\xb7\x79\x86\xca\x1c\x89\x06\xda\x7c\x12\x85\x0d\xfa\x97\x4d\x86\x73\xbb\xaa\x2e\x89\x12\x3e\x07\x6e\x38\x11\x40\x70\x62\xb9\xd7\xdb\xe1\xbb\x56\xd5\x51\x51\x5f\x68\xbf\xb2\x9e\xa5\x67\x1a\xa5\x90\x3f\xe0\xa7\x57\xc9\x24\xd6\x22\x3c\x61\x5c\xf6\x7e\x2f\x86\x02\xdc\x70\x22\x80\xe0\xc4\xb3\x5c\xa5\xdc\xc3\x2b\xf1\x0d\xa3\x01\x2f\x6b\xba\xd9\x66\xe5\xb8\xa4\x8a\xae\xd7\x0e\x78\x81\x0e\xad\xb9\xb4\xe6\x50\x1a\x59\x0c\x05\xff\x08\x27\xee\xb6\xee\xfc\x09\x13\x04\x27\x86\x93\x86\x4c\x19\x54\x5d\x5d\x62\x1c\xf3\x9b\xab\x3b\x20\xd0\xe9\x9b\x9b\x50\x56\xad\x4e\xbd\x2d\x9b\x5d\xfb\xf8\x43\x54\xd9\x3e\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x19\xad\xf1\x5f\xcc\xd3\xb5\xd4\xb2\xee\x6b\x6c\x16\x3d\x46\x56\x1b\x65\x37\x84\x23\x3f\xec\x65\x8c\x0b\xb5\x52\x49\x8e\xb5\x3c\x80\xa1\x00\x37\x9c\x08\x20\x38\xb1\x74\x2b\x5b\x3e\x79\xe5\x7a\x98\x1e\x90\x51\x67\x0c\xcf\xb6\x54\x26\x95\x06\xdd\x64\xbe\x1f\xcf\x92\xd1\xaa\x78\x55\x45\x13\xfa\x47\xdc\x70\x22\x80\xe0\xc4\xa2\x2f\xe2\x0b\x34\x22\xbe\xec\x5c\xf1\xdc\x2a\x45\x64\xaf\x47\x1c\x6a\x25\x9c\x81\xec\x85\x24\x17\xda\x2f\x45\x09\x9c\xf2\x47\x30\x14\xe0\x86\x13\x01\x04\x27\x5e\x7b\x44\x71\xce\xf3\x61\x4c\x38\x2f\x93\xf2\xc9\xf2\xbd\x92\x1c\x07\x96\xa7\x0f\x6b\x1f\xdf\x5b\xa7\x7f\x73\x56\x9e\x83\x5a\x81\xd0\x82\xe0\x86\x13\x01\x04\x27\x8e\x19\x3f\x67\xa1\xef\xba\x78\x0a\x1d\x4b\x96\x25\xdf\x5f\x91\xac\x79\xac\xc2\x5a\xde\xe2\xd5\x54\xea\x0b\xb6\x0f\x3b\xae\x94\x92\x18\x0a\x70\xc3\x89\x00\x82\x13\x8d\x45\x4f\x24\x2f\x08\x5f\x8b\x70\x69\x35\x15\xb6\xea\x36\x67\x20\x72\xb8\xb3\xe0\x93\x7d\x85\xb6\xe3\xda\x03\x66\xcb\xc7\xac\x4a\x18\x0a\x70\xc3\x89\x00\x82\x13\xad\xdc\xd9\x2c\x39\x36\x67\xa9\x3e\xd4\x2f\x7f\xb8\x00\x72\xef\x99\x98\x10\x61\x2f\x9f\xca\x67\xba\x5f\xa3\xed\xdc\xd6\x6b\xe5\xc3\x50\xf0\x8f\x70\xe2\x6e\x3b\xf3\x9f\x30\x41\x70\xa2\xaf\xd4\xb0\x8a\x8a\x28\xf1\x9d\x95\x77\x4a\x2d\x2e\xd7\x8f\x87\xbd\xef\x2a\xde\x94\x73\xd7\x16\x49\x1b\x53\xf4\x91\x54\x4f\x14\xc1\x50\x80\x1b\x4e\x04\x10\x9c\x18\x7c\x9d\x8a\xaf\xb5\x64\xe5\x67\x3b\xef\x84\x9c\xf6\xd2\x09\x93\xfb\x69\x94\xa0\x24\xda\xd7\x75\xd4\xfe\xa6\xa1\xda\x89\x05\x5d\x0c\x05\xb8\xe1\x44\x00\xc1\x89\xd4\x5f\xa9\xfa\x1d\x5b\x6e\xe4\x3e\x08\xfb\x9a\xb2\x68\xfa\x98\xef\x60\x6d\xcf\xbd\x4b\xb3\x51\x6e\x41\xb1\x47\x2a\x26\xac\x5b\x08\x7d\x17\x6e\x38\x11\x40\x70\x62\x01\x0d\xcb\xa1\xf9\xfa\x8a\xb4\x27\x05\x62\xd6\x4a\x4b\xd6\x12\x89\xcf\x1c\xdd\x87\x4f\x7f\x63\xab\x1b\x7c\xde\x95\x36\xd6\xc0\x8b\xa1\x00\x37\x9c\x08\x20\x38\xb1\xed\xae\x93\xfa\x39\x8a\x1c\x3d\x91\xd2\xf0\xf3\x0f\x37\x33\x58\x18\x2f\x5d\x06\xa6\x85\x07\x2d\xf7\xb8\x3e\x19\xda\xcb\xa7\x60\x87\xa1\x00\x37\x9c\x08\x20\x38\x51\x38\x80\xe2\x17\x67\x94\x55\x18\xb1\x33\x53\xaf\xca\xf7\xee\x00\x9d\xc4\xe5\xc8\xf3\xab\x94\xa9\x7b\x0d\x42\x2b\x94\xc4\x4f\x10\xe6\x12\xdc\x70\x22\x80\xe0\xc4\x96\x05\x2b\xe9\x2e\x36\xac\xa4\x21\x42\xaf\xd4\x4c\xf9\x6e\x6f\x5b\xef\x6d\x7f\xe3\x7e\x99\xdf\x39\xc9\x71\x81\xc5\x2c\xab\x84\x99\x01\x37\x9c\x08\x20\x38\xb1\x8c\xc7\xbf\x8c\xb7\x56\x7c\x25\xac\xf8\x06\xff\x41\xbf\xad\x70\xd6\x1f\xcf\x38\x5b\xc3\xce\xfe\x74\x3a\x2b\x77\xa5\x55\xfe\x99\x2a\x86\x82\x7f\x84\x13\x77\xeb\x5d\xff\x84\x09\x82\x13\x07\x4d\x0c\xc9\xaa\xcd\x8a\xea\xa9\xb7\xbf\x3e\xed\x94\xfa\xd9\xea\x3c\xff\x71\x7a\xc9\xc3\x95\xa9\x51\xfb\x74\xc4\x43\xaf\x36\x2b\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x82\x61\x8e\xbf\xcc\xbd\x5d\x18\x1e\x1f\xd7\x31\xa2\x78\x09\x5a\xc9\xb6\xbe\xa9\xac\x69\x32\xcf\x85\x54\xe4\x96\x94\x2e\x3d\x27\x7c\x68\xdc\x70\x22\x80\xe0\x44\x87\xcf\x1a\x54\x48\x79\xe7\xc6\x93\xd7\x5f\xf5\x94\xc9\x3e\x15\x1f\x53\x76\xbd\x16\x57\xbe\x2f\xe1\xd0\x48\x8b\x12\x9d\xa8\xba\x29\x86\x02\xdc\x70\x22\x80\xe0\x44\xf5\x18\xd9\xf2\x1f\x4c\x91\x1b\xc4\xad\xfb\xb8\x67\x43\x6f\xb5\x17\x8b\x49\x57\xc7\x23\x97\x48\x2c\x42\xd3\xd3\xed\xda\x6c\x08\x81\xc5\x0d\x27\x02\x08\x4e\x2c\xae\x21\x3a\x4c\xf4\xcc\xfc\x5b\x1a\xa5\xe9\xeb\x93\x9d\x3f\x4e\x77\x32\x06\x96\x79\x9d\x0d\xb6\x4e\x10\xba\x14\xa8\x25\x75\x85\xd0\xae\xe2\x86\x13\x01\x04\x27\xda\x8e\x4a\xc5\x7b\x7d\x56\x3d\x1c\x7a\x66\xcd\x5f\xa4\xda\xbf\xd4\x61\x82\xf5\xf0\xbe\x84\xdb\x89\x89\xeb\x2c\x8c\x89\x2f\x53\x8e\x62\x28\xc0\x0d\x27\x02\x08\x4e\x54\xd9\x5c\x0f\x90\xcb\x28\x29\x49\x7c\xb2\xfe\xfd\xb2\xd9\xaf\x8e\xf9\x34\x8b\xc5\x8c\x67\x81\x53\xb6\x47\xbd\xf9\x8f\x53\x53\x29\x63\x28\xc0\x0d\x27\x02\x08\x4e\x3c\xf9\x88\x3d\xdb\xbb\xda\x54\xcd\xed\xd7\x8b\x71\x53\x35\x4e\x89\x67\x96\x9f\x9b\x0a\x4a\x46\x55\x6e\x3d\xaa\x4f\xf3\xe2\xcb\x02\x18\x0a\xfe\x11\x4e\xdc\x6d\xba\xfb\x13\x26\x08\x4e\x8c\x3d\xa5\x5f\xc0\x2a\x12\x38\x21\xc8\x5c\xd4\xd5\xc8\xae\x60\x3b\xa4\x15\x51\xf2\xbc\x6a\x99\x2d\xd3\x27\x2d\xe2\xa3\x56\x02\x19\x86\x02\xdc\x70\x22\x80\xe0\xc4\x07\x41\x74\x56\xca\x0f\xee\xbb\x3b\x91\x71\xc6\xfa\x8a\xf5\x58\x9b\xbf\x7b\xcc\x5a\x1b\x88\x6a\x79\x4e\xbe\x0c\x31\x97\xc8\x37\xc3\x50\x80\x1b\x4e\x04\x10\x9c\xe8\xc7\x64\xc2\x5c\x3d\xea\x51\x2a\x10\x79\xf1\xd7\x55\x77\x6f\x85\x38\xd6\x47\xca\x0e\xd7\xd6\xc8\xd9\x24\x5b\x72\x47\xbb\x4d\xdd\x31\x14\xe0\x86\x13\x01\x04\x27\x66\xc6\x1e\x5a\xcb\x9f\xae\x14\x7c\xf3\xfd\x57\xab\x79\xd4\xa3\xd3\xb5\x4e\xde\x42\xac\x23\x9e\x36\xb5\x62\xa6\xeb\x81\x3b\x62\x84\x1e\x1d\x37\x9c\x08\x20\x38\xd1\x42\xc7\xbc\x2b\xba\xd6\x3b\x8a\xf4\xb9\xf6\xea\x9b\x88\xac\x65\x97\xf1\x99\xf5\xdc\x91\xcd\x43\x91\x16\xf2\x64\x5a\x83\x12\x67\x30\x14\xe0\x86\x13\x01\x04\x27\xe6\xc4\x17\xaa\xf1\x18\x1d\x59\x3f\xf8\x7b\x5c\x7b\x7f\xe8\x54\xa1\x43\x0d\x67\x5d\x42\x6d\x4b\x8a\xac\xba\xb3\xac\xc2\xf2\x41\xc2\x9c\x8c\x1b\x4e\x04\x10\x9c\xa8\xb0\x42\x76\x9f\x4f\x73\xfd\x7e\xdf\xe0\x8a\x2f\xcb\xd3\xc1\xc0\x23\x97\x45\x0f\x66\x2d\x3a\x58\xdd\xe6\x92\xe2\xd4\xd3\xa7\x61\xc1\x50\x80\x1b\x4e\x04\x10\x9c\x78\xf5\x9d\x20\xa5\x57\x0a\xd7\x87\x91\xfa\x3b\xdf\xfe\xa3\xe0\x34\x5b\xfb\xc9\x91\xaf\xb9\xe1\xbe\x5d\xb8\x69\xb4\x6f\x3c\x35\x92\xf0\xdb\xfd\x47\x38\x71\xb7\xf3\x8f\x3f\x61\x82\xe0\xc4\xbb\x26\xc6\x6a\x92\xe2\x4b\xcb\x91\xb4\x5d\x0e\x7c\x65\xc8\x93\x37\xe2\x49\xb2\x66\x2a\xab\x9f\xbc\x1e\x3a\xcd\x91\x72\x90\x10\x86\x51\xdc\x70\x22\x80\xe0\xc4\x49\x19\x25\xfb\x3b\x27\x04\x2f\x07\x17\x2f\x1f\x15\x52\x7f\xfe\xc8\xb1\xf7\x79\x38\xe3\xa1\x1b\xee\x17\xee\xdf\xbe\xc2\x59\x7f\x82\x30\x33\xe1\x86\x13\x01\x04\x27\x7a\x36\x3e\x78\x2e\xe1\xf0\xee\xce\xaa\xe5\xbc\xee\xe1\x0c\xea\x7a\xc0\xcf\xfc\x46\xf0\xb8\x32\x47\x4a\xd4\x2d\x53\xff\x53\x5f\xd9\x31\x14\xe0\x86\x13\x01\x04\x27\x6a\x73\x92\xde\xa2\x2b\xf8\x39\xcc\xd1\x69\x97\xab\xc7\x2e\xff\xd6\xe3\xd6\x21\xf7\x1b\xb1\x9d\xf4\x95\x29\xfe\x2e\x9e\xde\xd9\x84\xf6\x08\x37\x9c\x08\x20\x38\x91\xca\x21\xa8\xda\xf3\x9c\xf3\x8b\xf2\x69\x92\x9e\x89\x7a\xa7\x6b\x4b\x33\x82\xd6\x14\xef\x6f\xd5\x5d\x66\xbb\xf7\x9f\x74\xf1\x47\x69\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x65\x5f\xe8\x5f\x39\xb2\xdb\x65\x76\xbe\xba\xb7\x3c\xbb\x5f\xe6\x97\xeb\xce\xcb\x81\x8d\xb2\x5e\xaf\x3e\x2a\x41\x2f\xed\xf4\x0c\x7d\x0c\x05\xb8\xe1\x44\x00\xc1\x89\xd7\x3b\xd7\x0a\x07\xc7\x86\x0c\xbf\x8b\x2a\x9b\xaa\x2d\x1e\x15\xc8\x22\x7b\xac\x19\x7b\xf6\x85\x38\xb7\x7a\x69\xaa\x53\x87\x3c\x1b\x86\x02\xdc\x70\x22\x80\xe0\xc4\x4d\x31\xde\x13\x51\x07\x5c\x19\x12\x62\xbf\xeb\xc4\x30\xd2\x9a\x2d\x78\x4b\x46\xa0\x51\x4e\x58\x78\x4b\xd1\xf3\x87\x45\xd7\x48\x31\x14\xfc\x23\x9c\xb8\xdb\x09\xe1\x9f\x30\x41\x70\xa2\x6a\xd1\x42\x41\xff\x33\xe9\x17\xbd\xe7\x8e\x3d\xe4\xbf\x75\x60\x7a\x6e\xdc\x71\x4b\x62\xf8\xd8\x61\x22\xa7\xc9\xbb\xde\x8f\x33\x75\x30\x14\xe0\x86\x13\x01\x04\x27\x76\xda\x81\xc0\x62\x9e\x2b\xab\x4f\x7f\x4c\x25\x1a\xf0\xbe\xfe\x92\xd0\xe1\x27\x1e\xfb\x25\xe5\xda\xf9\x53\x3e\x1a\xdb\x0f\x7e\x12\x86\x6a\xdc\x70\x22\x80\xe0\x44\xfd\x3b\x91\x49\x5f\x39\x68\xc8\x3b\xc3\x8e\xa8\xaa\x0b\x2c\xa4\x51\x6e\x1a\x29\xfb\xf2\xeb\x1c\x18\xa5\x9f\x33\x6c\xae\xaa\x16\xc5\x50\x80\x1b\x4e\x04\x10\x9c\xe8\x74\x46\xcb\xa9\xf8\x77\xf9\x51\x81\x08\xc7\x78\x4e\xc3\x6c\xe5\x56\x31\xd1\x81\x47\xa9\x59\xa7\x0f\xb4\x76\x6d\x13\xdf\x3a\xc5\x8d\xa1\x00\x37\x9c\x08\x20\x38\xd1\xb7\xb0\xfc\xc0\xb8\x5e\x62\x66\x72\xbf\x20\x9b\xcd\xbe\xac\xd8\x1f\xd3\x33\x62\x13\xda\x83\x12\x1e\xfb\x97\x39\x25\xfa\x4a\x11\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x95\xca\x37\x62\x9e\x9c\x16\x3f\x72\xdb\x5c\x67\x2b\xac\xd8\x61\x7f\xc1\x13\x87\xdc\x4b\x9f\xb5\x8e\x6e\x64\x38\x05\xbe\x7b\x6d\x66\x83\xa1\x00\x37\x9c\x08\x20\x38\x71\x92\x9a\x7e\x04\x7d\xfc\x9f\x66\xca\x3b\xf3\x41\x86\xe2\x6d\x87\xa3\x8e\xbf\xbe\x71\xd6\xee\x95\x04\xc7\x64\xa6\x97\x97\x93\x09\xf3\x25\x6e\x38\x11\x40\x70\xe2\x7c\x66\x36\x77\xaf\xd8\x6f\xfd\x23\x02\x54\xbf\x86\xc4\x5d\xdc\x88\x35\x29\xc9\xdf\xb6\x1f\xea\x78\xbe\xf0\xfb\x6a\x1d\xf5\x11\x06\x0c\x05\xff\x08\x27\xee\x76\x86\xfe\x27\x4c\x10\x9c\x28\xdf\xba\xdd\x26\x7e\xf3\xd2\x70\x8b\xcf\x4c\xd6\xcd\xd0\x7c\xb3\x74\xbe\x3e\x36\xd3\x57\x7b\x5f\x70\x39\x5c\x7d\x78\x6f\xcf\x17\x5a\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x5d\x75\xda\x6f\x31\xcb\xc2\x42\x1e\xce\x37\x39\x1b\xed\x3f\x97\xd5\x24\x6b\xc3\x7d\x4a\x9f\x52\x72\x19\x0b\xbf\xd0\x3f\x3d\xaa\x88\xa1\x00\x37\x9c\x08\x20\x38\xd1\x9f\xa8\xe5\xf9\x61\x45\x91\x3d\xc7\x3d\xc6\x7f\x14\x64\x70\x3b\xb7\xb1\x57\xdc\xf7\x7c\x70\x2e\xbd\x8a\x6e\x38\x38\xd9\xa7\x81\x30\xfb\xe1\x86\x13\x01\x04\x27\xf6\x11\x3d\x3d\xc6\x55\xfa\xe2\x53\xb1\xe9\x3a\xff\xf3\x3a\x0f\x33\x4f\xf2\xd6\x5b\x27\x65\x85\xe2\xcc\xf6\xe8\xe6\xdd\x7c\xf3\x83\x1f\x43\x01\x6e\x38\x11\x40\x70\xe2\x98\x11\x3b\x76\xf2\xdd\x31\xbe\x1d\x45\xb1\xc7\x53\x8d\x6e\x3a\xe3\x2a\x74\x1c\x2f\xba\xfd\x38\xce\xdc\xf5\x21\x67\xe7\x27\xde\x8b\xa1\x00\x37\x9c\x08\x20\x38\xd1\x48\xed\x4c\xeb\xd7\xaf\x94\x52\xca\x1c\x0e\xba\x0c\xdc\x3f\x6f\xff\x36\xa9\xa6\x14\xca\x48\x30\xe4\x1d\xb5\x95\x95\x38\xe4\x4f\x08\x13\x6e\x38\x11\x40\x70\x62\xdc\x5c\xc8\xf1\x94\x73\xdb\xd8\x27\xda\x38\x7f\xdf\x17\x27\x89\xd7\xa5\x88\x8d\xb8\x7f\x8c\x9a\xfe\xfa\x7c\xf4\xfb\xba\x54\x30\x35\x86\x02\xdc\x70\x22\x80\xe0\xc4\x83\xb1\xce\xbf\x8d\x8d\x0f\x15\x1f\xb5\xcb\xce\xd2\x5a\x21\xcf\x22\x8a\xc8\x78\x75\xad\x77\x59\xa5\x30\x5e\x46\x16\xa3\x2d\x22\x74\x3c\xff\x08\x27\xee\xf6\x66\x23\x74\xd9\x47\xbc\x72\x3a\xdf\x81\x41\x34\xe0\x3f\x8a\xcf\x06\xd4\x47\x62\xb2\x0e\x77\x1c\xeb\xdb\x3b\x77\xb1\x34\x8f\xaa\x7a\x6b\x29\x02\xa9\xfb\xab\x34\x2c\xde\xe3\xee\x1d\x4d\x71\xb1\x6d\xb7\x21\x9d\xf9\xc1\x60\xef\xa3\x54\x73\xf3\x5c\xc6\xe9\x37\x93\x6e\xf4\x74\x9e\x0f\xf1\x98\xfe\xab\x94\xaf\x93\xaa\x4e\x6a\x4d\x7f\x81\xbb\x53\xf0\xd5\xbe\x7d\x51\x9a\x4a\x9c\x11\x8c\x43\x41\x3b\xce\x05\x51\x54\xe9\x99\xc1\xce\x25\x7f\x1b\x8b\x01\x47\x3e\x55\x6a\xf0\x5f\x1c\x79\xd9\x5b\x4c\xf5\x3d\xeb\xcd\xab\x7e\x4f\xb5\xa3\x67\x84\xee\x51\xd6\x03\x32\xef\x74\xf9\x3d\x7f\x95\x8e\x91\x0c\x98\x63\xf7\xf6\xf1\x27\x14\x25\xd1\xdd\xf2\xc8\xf0\x24\xcf\xd0\x1c\x11\xfb\xcf\x3d\xc0\x3d\xda\x68\xad\xdd\x4e\xee\xef\x77\x26\xad\x5f\xb4\x15\x6c\x92\x4b\x3c\x90\x10\x7a\x32\x14\xc8\x48\x94\xf9\xe2\xfd\x79\xbe\xe4\xa1\xab\xfd\x1b\xea\xd2\x83\x24\x41\x42\x39\x7f\x95\xfa\xdb\x1a\x28\x1a\x3f\x6e\xba\xbe\xaf\x61\xaf\x2f\xcb\xbe\xb0\x89\x67\x39\xf2\x8f\x50\x83\x10\xee\x17\x8a\x73\x20\xc7\x9c\xea\xef\xd7\x2b\x89\x1a\x4c\xad\x0d\x89\x4f\x28\x95\x4c\x1a\xac\x7d\x2b\xdd\xbe\x4d\x6a\x40\xf5\x6c\xf4\xcc\x89\xe2\x31\xcf\xbd\x9a\x29\xe6\xa4\x1c\xff\xbb\xec\xdb\xed\xa9\xfe\x59\xd1\x20\x38\x51\xe1\x65\xaa\xc1\xb7\x3d\x42\x51\x89\x25\x8f\x9f\x56\x3d\xaf\x44\x0e\xfa\xe7\xad\xb3\x08\x17\x0b\x55\x6f\x5e\xee\xbd\xf9\x2a\x40\x0e\x43\x01\x6e\x38\x11\x40\x70\xa2\x6a\x1c\x5d\xed\x53\x71\x9d\x20\xe5\xd7\x33\x9c\x0f\x25\x22\x9c\x58\x59\xbc\x8c\x92\xce\x5e\xa9\x3f\xc8\x70\xf4\x16\x7d\x4b\x1a\x61\xc0\xc0\x0d\x27\x02\x08\x4e\x94\x0c\xa2\x1b\xb8\x2e\xcf\xf7\xa9\x68\xeb\x71\x3b\x9f\xa3\x41\x8c\xba\x83\x22\x6d\xc4\x80\x2a\x65\x55\x79\xb5\xe4\xf5\x05\x65\x42\x6f\x87\x1b\x4e\x04\x10\x9c\xf8\x89\xe5\x3f\xc5\xd0\xa7\x02\x24\x02\x9a\x1f\x74\xc8\x36\x9a\x43\x42\xe6\x1c\xcc\xb6\xb8\x8b\x5f\xdb\xa2\x02\x24\x6f\x7b\x42\x09\x73\x09\x6e\x38\x11\x40\x70\xe2\x30\x5f\x4b\xbe\xf2\x5c\x48\xaf\x9d\xc1\x3d\x81\x9b\xd3\x25\x57\x96\xc4\x5c\x93\xa7\x2e\xf8\x47\x16\x2a\xb2\xe5\x3f\x4b\x8d\x38\x8a\xa1\x00\x37\x9c\x08\x20\x38\xb1\xe2\xd1\xb7\x33\x3d\xfa\x37\x14\xdb\x1a\xa2\xc2\x1c\x4e\x1e\x7c\xe6\xaf\x73\xf5\xdd\x60\xdc\xb3\x9b\xdc\x2b\xce\x5d\xc1\x13\x74\x9c\x18\x0a\x70\xc3\x89\x00\x82\x13\xf9\x0c\xeb\x8d\x4e\x3c\xe1\x22\x51\xe8\xf1\xb7\x38\x62\x93\x62\x21\x62\x2e\x94\x99\x7d\xab\x40\xc8\x54\x5f\x7e\xeb\x16\xd1\xb2\x1d\x86\x02\xdc\x70\x22\x80\xe0\xc4\xd3\xfd\x1e\x97\x42\xfc\xbc\xe8\xb8\xf5\x4b\x47\xe8\xd3\x14\x64\x6e\xd2\x57\x9a\xf6\x2c\x52\x37\x4d\x14\x3f\x4a\x9f\xe6\xbe\xed\x85\xa1\xe0\x1f\xe1\xc4\xdd\xd6\x9d\x3f\x61\x82\xe0\x44\x61\x07\xef\xfb\xaa\xba\xc5\x59\x1b\xad\x2e\x77\xa9\xac\x8b\x24\xbc\xbe\x8b\x3f\x13\xa6\x12\x50\x4b\xec\xa4\x1f\x1c\x3f\x60\xc8\x88\xa1\x00\x37\x9c\x08\x20\x38\x31\x43\xb6\xc8\x8d\xa4\xf3\xce\x89\x69\xda\xbd\xe5\x5b\xb3\x8c\x54\x4e\x9c\xb9\x3d\x94\x0d\xf4\xe4\x61\x5f\xbe\xb0\xd6\xac\x8c\x9d\xc0\x50\x80\x1b\x4e\x04\x10\x9c\x78\x99\xfe\x96\x39\xe5\x7d\x9a\x81\x73\x0e\xdc\x4d\x8d\xcb\x59\x3a\xf5\xdb\xfb\x47\xf8\x39\x5f\x87\x5a\xbd\x6d\x5a\x64\xa6\x6d\x24\xc6\x50\x80\x1b\x4e\x04\x10\x9c\xe8\x72\x80\x99\xf9\x54\x7a\xd7\xea\x2f\x2c\x45\x36\xf5\xe6\x4b\xb5\xf3\x42\xf1\x05\x0e\x0b\xce\xef\x44\x93\x9c\xaf\xe7\xd1\xbf\xd0\xc0\x50\x80\x1b\x4e\x04\x10\x9c\xc8\xca\x63\xab\xc0\xf3\xc1\x68\x93\xb4\xb7\x7f\xd0\x74\xa6\xfe\x1c\xd3\x29\x1a\xd7\x8d\xdb\x2f\x8b\x9e\x0a\xe8\x5d\x38\x76\x08\x1c\xc4\x50\x80\x1b\x4e\x04\x10\x9c\xb8\xef\x64\xe4\x14\xbb\x2a\x43\x76\xe8\xe3\x7d\xcb\x5e\xa5\x0e\xa2\xef\x7f\x4f\x57\x92\x3b\x65\x98\x13\x4f\xd7\xa0\x57\x93\x4f\x10\x06\x57\xdc\x70\x22\x80\xe0\xc4\x9a\x8c\x64\xa4\x62\xd6\x54\xe3\x4b\x32\xc9\xa9\x4c\x43\x63\x61\x09\x05\x1f\xf3\xa7\xb1\x54\x1f\x4f\xf6\x96\x3f\xb5\xd2\x5e\x3a\x84\xa1\x00\x37\x9c\x08\x20\x38\xd1\xfe\xc7\x6a\x15\x6f\xc8\x1e\xf9\xc8\x9e\xd7\x21\x6e\x99\x82\x65\xa5\x94\x69\xf6\x74\x5c\x85\xeb\xd4\xd2\x11\x8a\x8a\x9b\xa5\x4e\x18\x0a\xfe\x11\x4e\xdc\x6d\x67\xfe\x13\x26\x08\x4e\x5c\x74\x39\x7e\x5d\x95\xc7\xe0\x7c\x90\xe9\xf9\x23\x68\xc2\xbb\x73\x7b\xa9\xca\xcb\xc6\x04\x5b\x53\x8e\x91\x66\x24\x4d\x9f\xb9\xc7\x85\xa1\x00\x37\x9c\x08\x20\x38\xf1\xbb\xda\x8f\x5a\xcd\x6a\xfd\x2b\xe3\xe7\xbb\x16\xb2\x38\x87\xe2\x89\x02\x7f\x8d\xf7\x57\xd7\x76\xe6\x53\x0c\x7b\x94\xaa\xd8\x1a\x62\x28\xc0\x0d\x27\x02\x08\x4e\x94\xf0\x65\x74\xc7\x78\xf8\x37\x3c\x16\x88\x33\x79\xdf\x1b\x15\x67\x07\x51\x62\xc2\xed\x0e\xb1\x63\x9f\x67\x1c\xcf\xdd\x12\x66\xc5\x50\x80\x1b\x4e\x04\x10\x9c\xc8\x5c\x92\x72\x26\x43\x2f\x22\x73\x6e\x6e\x8e\xc8\x32\x3b\x9e\x97\xf1\xd3\x98\x5a\x11\x7b\xa9\x3b\x93\x64\x74\x49\xd2\x65\x5e\x42\x8f\x8a\x1b\x4e\x04\x10\x9c\xe8\x95\x61\xab\x77\xef\x23\xd3\x52\x45\x96\x5e\x49\x4a\xb3\x93\x9c\x75\xe5\x15\xb9\x84\x53\x7b\x84\xbc\x9e\xea\xeb\xaf\xce\x9a\x19\x61\x28\xc0\x0d\x27\x02\x08\x4e\x64\x35\xbf\xaf\x68\xbc\xac\xb6\xc3\x3e\x8c\xde\x1e\x3c\x3b\x4b\xda\xab\x12\xb4\x78\xf1\x11\x3b\x18\x96\x6d\x76\x75\x32\xef\x24\xc1\x50\x80\x1b\x4e\x04\x10\x9c\xd8\xaa\xa0\x56\xc5\x24\x06\x58\xd7\x82\x46\x85\xfb\xf5\x7e\x9b\xaa\xe9\xdc\x8a\x4c\xa6\x99\x4a\x08\x31\x71\x4a\x7d\x3c\xa7\xc8\x8e\xa1\x00\x37\x9c\x08\x20\x38\x91\x1a\x14\xdd\x95\xbd\xd7\x2f\xe2\x20\xbe\x75\x3e\xf0\x2c\x55\xf7\x1d\x27\x8f\x2f\xbd\x3f\x66\x3f\xc7\x34\x3e\x28\xb1\xec\xff\x02\x30\x14\xfc\x23\x9c\xb8\x5b\xef\xfa\x27\x4c\x10\x9c\xd8\xf2\x44\xf3\x99\xd0\x80\x4c\x10\xc5\x3c\xf9\x7b\xae\xd8\x82\x51\x23\xd5\x71\xf2\xd1\x80\x13\x27\xfb\x4a\x4a\x69\xcc\xc0\x6f\x0e\x0c\x05\xb8\xe1\x44\x00\xc1\x89\xfe\x58\x37\xed\xc9\xae\x1e\x8b\xd5\x58\x9d\x3d\xba\xb5\xb2\x91\x1e\x83\x5a\xc4\x3d\xeb\x3c\x8f\x64\x0e\xfc\xd6\xc8\xd0\x9f\xf1\xc0\x50\x80\x1b\x4e\x04\x10\x9c\x38\x99\x1a\x57\xef\x97\xe7\xd7\x92\xa3\xf7\xeb\xe6\x45\x20\x52\x42\x34\x79\xe3\xe5\x26\x0d\x6b\x8b\xb5\x58\xdb\x4c\xf2\xa5\x10\x2d\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x37\x77\xe8\xce\x79\xf2\x73\xb6\x08\xd3\x88\x67\x5f\x52\x1c\xd1\x1e\xbd\xae\x81\xe4\xf6\xbc\x38\xa2\x40\xce\x73\xa9\x6f\x33\x9d\xb0\xc3\xe2\x86\x13\x01\x04\x27\x5e\xd0\x3b\xef\xb3\xf2\xad\xaf\x3b\x46\xe6\x95\x97\x4a\x0b\xf1\x50\x9d\x1b\xef\x68\x5d\xcf\xd8\xa2\xbe\xd2\x48\xec\x9e\xbe\xa3\xe2\x18\x0a\x70\xc3\x89\x00\x82\x13\x4f\x56\xb1\x31\x59\x46\x96\x78\x45\x3c\xff\x5a\x62\xf1\xc6\x39\xc8\x89\x1a\x2b\x10\xed\x96\x0c\xf2\xd8\x76\x58\x95\xd9\x73\xed\x02\x86\x02\xdc\x70\x22\x80\xe0\xc4\xcb\x1e\x72\x6c\x86\xf2\x0c\xbd\x74\xc9\x14\x6a\x7a\xb2\xa4\x6f\xd6\xdc\xb1\x31\xeb\xb6\x97\x1b\xb7\xd4\x68\xe3\x78\xc8\x50\x42\xa7\x80\x1b\x4e\x04\x10\x9c\x18\x5a\xa7\x45\x29\x6e\xda\x2d\xfa\x46\xec\xc1\x52\xcd\x1e\x2d\xd5\xd3\x76\x9c\x05\x4f\xcf\x17\x0c\x7c\x0f\x88\x7d\x5f\x44\xab\x4d\xf8\x3e\xfe\x11\x4e\xdc\x6d\xba\xfb\x13\x26\x08\x4e\x7c\xe9\x1b\xd9\xe6\xbd\xbf\x6b\xc6\xad\xfd\x59\x3c\x16\x28\x5f\x93\x9b\xcf\x7f\xb3\x38\xa1\xfd\xb2\xe9\xb7\x5b\x67\xbf\xc6\x4b\xab\x62\x28\xc0\x0d\x27\x02\x08\x4e\x9c\x92\x09\x16\x3f\x78\xf8\x55\x53\x62\x54\xf0\x35\xc5\x0b\x2e\xc8\x71\x2c\xfa\xb6\xad\xf9\x4b\x3f\x62\x8b\x45\xe9\x67\x6d\x06\x8e\x18\x0a\x70\xc3\x89\x00\x82\x13\x9b\xdd\xd6\xb5\xbd\xaf\x33\x7b\xbb\xbe\x50\x95\x16\xa8\x7c\x13\x70\x89\xf1\xb0\x8e\x59\xdf\x92\xb6\xe7\x2f\x86\xb8\xa0\x46\x9f\xbd\x18\x0a\x70\xc3\x89\x00\x82\x13\xad\x2e\xb1\x18\x37\xd2\xb4\x6a\xce\xd7\xa4\x0b\xa3\x23\x73\xad\xe4\x9a\x57\xd1\xa6\x9c\xc8\x84\x57\x4f\x15\x97\x91\x2c\x3f\x5d\x0c\x05\xb8\xe1\x44\x00\xc1\x89\xf9\x9f\x2d\x73\x7f\x05\x24\xde\x97\x7f\xee\xf4\xf9\x59\x65\x88\xee\x8b\xd7\x4b\x19\x34\x65\x17\xb7\x64\x2d\x38\x2f\x72\x17\x51\x91\x63\x28\xc0\x0d\x27\x02\x08\x4e\xec\x35\xa1\xbc\xa3\x77\xc7\x62\x3a\x85\x5d\x5e\x52\x47\xfb\x04\x9f\x90\xe8\xb5\xc5\x95\xbc\x03\x76\xbd\x2a\xf2\xe4\x1b\xa3\x54\x47\x30\x14\xe0\x86\x13\x01\x04\x27\x0e\xf9\x89\xf5\x9b\x66\x37\xec\x43\xee\x4b\x0e\x2a\x1d\x40\xaf\xb1\xfb\xee\xbb\x7b\xaa\x6a\xe6\x76\xa2\x1a\x56\xe2\x63\x91\xb1\x07\x43\x01\x6e\x38\x11\x40\x70\x62\x46\x3e\x4b\x31\xeb\xc3\x4c\x26\x57\xd2\x11\x49\xd2\x72\xf6\xe2\xab\x7d\x9c\xab\xec\xa7\x7e\x53\xfd\x78\x64\xa3\xc5\x7a\xa1\x9d\x0a\x43\xc1\x3f\xc2\x89\xbb\x9d\x7f\xfc\x09\x13\x04\x27\x2e\x4e\x06\xe9\xee\xb7\x62\x88\xf8\x62\x18\x1b\x7d\x63\xf2\x6c\x9b\xce\x4d\x4f\x5a\x0b\x62\x7b\xba\x57\xba\x9b\x91\x3c\xb9\xdb\xca\x18\x0a\x70\xc3\x89\x00\x82\x13\xaf\x0a\x51\x3f\x33\x99\x36\x54\x3e\x9f\x1c\xc2\xe4\xdb\x2a\xf0\xa6\x20\x77\x39\xff\x4a\xc8\x7b\x5f\x67\xe3\x65\xa2\xd5\x89\x6c\x42\x0b\x86\x1b\x4e\x04\x10\x9c\x48\x63\xa3\xec\x1e\x13\xd1\x9c\x20\x12\xd8\x20\xe1\x25\x63\xf8\xf0\x2a\xd9\x06\xaf\xf2\x7b\xe1\xdf\xa5\x59\xa7\x9e\xd0\x0c\x19\x58\x62\x28\xc0\x0d\x27\x02\x08\x4e\x94\x7a\xc7\xec\xeb\xa2\xd2\xf5\xab\xe1\x50\x77\x43\xf5\xa3\x3d\xcd\xda\x87\xc7\xc8\xce\x2e\xdd\x2d\x4a\x90\x7d\x20\x6b\x63\x7e\xcd\x1a\x43\x01\x6e\x38\x11\x40\x70\x22\xd1\x11\x2f\xde\x11\xe1\x4f\xfe\x8a\x29\x6f\x74\x3c\x27\xf2\xf7\xfc\x27\xed\x63\x5b\x19\x35\x7a\x2c\x82\xe1\x6d\xc2\x41\xc7\x69\x19\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x0c\x5d\xce\x37\x39\xd3\xf8\x23\x2c\x35\xfa\xee\x91\xba\x3e\x14\xfe\x94\xb2\xcc\x1a\x67\xc9\x4c\x4c\x19\xf3\xd4\x58\xd3\xe5\x9a\x37\x86\x02\xdc\x70\x22\x80\xe0\xc4\x81\xc9\x8a\x53\x01\x1f\xd2\xa5\x15\x6e\x78\xda\x26\xf3\xef\x3f\x3e\x73\xc3\x41\x92\x07\xfd\x29\xed\xcb\xe8\xf1\xd8\xa5\x26\x93\xb0\xf0\xe0\x86\x13\x01\x04\x27\x82\x6f\xb3\xee\xef\x52\x8e\x3d\x7e\xc2\x6d\xb4\x1e\xbf\xb3\xd6\x1c\xc3\x60\x1e\x4d\xc1\xb6\xc8\x58\xe4\x96\x74\xb3\xae\x71\x9d\xb0\xc3\xfe\x23\x9c\xb8\xdb\x09\xe1\x9f\x30\x41\x70\xa2\x03\x5d\x82\xe8\x4b\xd7\x4c\xbe\x65\x25\x29\x67\x51\x3f\xe2\xc2\x2c\x7f\x77\xc1\xb3\x4b\x42\x0e\xe7\xbf\x67\x2c\x8f\xde\x38\x69\x8f\xa1\x00\x37\x9c\x08\x20\x38\xf1\xe4\x8b\x17\x0e\x79\x88\x07\xc5\x79\x9f\xe4\x9e\xde\x97\x73\xfa\x32\x79\xef\xf3\xad\xa5\x86\xaf\x1b\x4c\xe7\x11\x79\x8a\x92\x53\x62\x28\xc0\x0d\x27\x02\x08\x4e\xb4\x1f\xf7\xde\xfb\xdd\x3e\xaa\x92\xf8\x9b\x04\x45\x12\xfd\xdb\x46\x61\xed\x43\x98\xbd\xe9\x4d\x9b\x0f\x6c\x3c\x7c\x14\x9f\x03\x04\x30\x14\xe0\x86\x13\x01\x04\x27\xae\x95\x6b\x22\xaf\xb1\xc5\xee\xae\x2b\x62\xc9\x4b\x8b\xde\xc2\x85\x1a\xe3\x4a\xe3\xea\xa7\x04\x10\x9d\xed\x26\x86\x5a\x71\x6a\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x53\x39\x15\xe3\x9f\xda\xf7\x7f\xab\x28\xbf\x11\xa1\x77\x2e\x30\x62\x90\xe3\x61\x68\xeb\x0f\x79\x61\x9d\xfd\x26\x0f\xb2\x45\x74\xd5\x31\x14\xe0\x86\x13\x01\x04\x27\xe6\xa5\x7f\x0c\x64\x21\x41\xae\x34\xa7\xcd\x7d\xaf\x4f\x4b\x75\x01\x92\x66\x4e\x4f\x4b\xbe\xe4\xae\xdc\x59\xe3\x1b\xd3\x3f\x4d\x8f\xa1\x00\x37\x9c\x08\x20\x38\xf1\xca\xe4\x33\x7a\xb7\x37\xf5\x3e\x74\xe5\xe1\x7d\xde\x0d\x2d\xde\x3d\xd9\x5c\xe1\x3f\xbb\xc4\x48\x89\x65\xa7\xe2\xca\x7c\xbf\x98\x62\x28\xc0\x0d\x27\x02\x08\x4e\xdc\x7e\xf3\xf0\xe5\xcf\xe9\xcd\xff\xf8\x7f\x79\xab\xfd\x77\x22\x62\xaa\x32\x4a\x48\x3b\xae\xad\xce\x9e\x97\x8c\x7c\x7a\x9a\x22\xce\x0d\x43\xc1\x3f\xc2\x89\xbb\x9d\xa1\xff\x09\x13\x04\x27\xa6\x6f\x6f\xfb\xeb\xd7\x2d\xf1\x3e\x36\xe2\xfa\x96\x12\xc4\xec\x26\x4d\xcd\xa4\xcd\x18\x6e\x46\xb9\xee\x1f\x75\xcc\x39\x6c\xff\x39\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x0f\x0b\x95\x4c\xc6\x9f\xcc\x67\xba\x0e\x04\x5d\x63\xdc\xdc\xa6\x7e\xf2\xaa\x77\x71\xe0\xc9\x0c\x51\xff\x21\xc5\x43\xaa\x07\x47\x09\x2b\x3a\x6e\x38\x11\x40\x70\xe2\xa3\xb0\xc5\x9f\xc9\x27\x24\xcf\x39\xad\x9f\xa7\x3b\x93\xae\x32\xc0\xec\x67\xc4\xc0\x7d\x42\xe9\x1b\xc6\x2b\x9b\xa7\x7e\x5e\x59\x0d\x43\x01\x6e\x38\x11\x40\x70\x22\x23\xdf\xd9\x9f\x14\x4b\x7b\x5e\xda\x0c\x93\x71\xe4\x07\x54\x36\x05\x53\xae\x6e\xd2\x64\xa6\xed\x9f\x99\xc8\xd6\xb9\x15\xba\xa3\x81\xa1\x00\x37\x9c\x08\x20\x38\xf1\xb7\xec\xc7\xc8\x0f\x1f\xa7\xc4\x7c\x8c\xe6\x0a\x2a\x6b\x39\x3a\x59\x6e\xcd\xdb\x9f\x99\x0d\x3f\x60\x1c\xb8\xf6\x6a\xd6\xd0\x9c\x1f\x43\x01\x6e\x38\x11\x40\x70\xa2\x86\x5e\x00\xfb\x4c\xa8\x4d\xdc\x4b\xa3\xfe\x7e\x43\x35\xf1\xd0\x8b\x89\x07\x50\xcc\xf5\x13\x6b\xc3\xab\xb1\x87\x11\x7e\x1b\xf2\x18\x0a\x70\xc3\x89\x00\x82\x13\x9b\xf8\x94\xef\xb1\xa4\x72\xa7\x6d\x0f\x1f\xf4\xde\xdb\x97\x21\x4f\xb1\x43\x3f\xc8\xa0\x6b\x22\x52\xa8\x10\xb1\xe5\xdf\xb9\x64\x8b\xa1\x00\x37\x9c\x08\x20\x38\x51\x36\x53\x6d\xd1\x2e\x9a\x4e\xe7\x15\xeb\x76\xc9\xed\xf2\x7d\xec\xea\x82\x97\x9f\x37\x49\xbb\x0a\x99\x3d\xb1\x64\xde\xb1\xde\x26\xcc\x65\xff\x08\x27\xee\xf6\xbf\x49\xa1\xcb\xbe\xc6\x10\xdd\x51\x12\x17\xf3\xa9\xae\x29\xaf\x19\xfa\xfd\x29\x1a\x14\xf2\xc5\x0d\x3a\x05\x7c\xc7\x57\x03\xeb\xe2\x8b\x95\xab\x9b\xfe\x2a\x2d\xb1\x96\x3f\xe4\x2c\xd3\x2f\x91\xc5\xfd\x29\x4c\x6a\xf4\xf8\xc5\x0f\x69\xf9\x97\xd2\x94\x95\xa8\xab\x6e\x65\xf2\xde\x35\x3e\xc6\xf0\x57\xe9\xe3\xfd\xd7\x64\x92\xd6\x3c\x3a\x1c\xe3\x75\xc3\xef\xb9\x48\x6e\x53\x3c\x5b\x94\x98\xf4\xcf\x99\xd6\xa1\xfd\x6d\x0b\xbc\x75\x7c\xfe\x2a\xc5\x14\x68\x76\xda\x74\x7c\x5b\xa6\x02\xa3\x1f\x5d\x2c\x57\x16\x3f\x9b\x31\x7e\xd9\x50\xbb\xfa\x8a\x11\x2d\x3d\x55\x90\xf9\x7f\x06\x7f\x95\x26\xc7\xda\x06\x3d\xd0\x09\x73\xa9\xcc\x13\x72\x73\x39\x5d\x96\x74\xe5\xb3\xbf\x83\xd6\x96\xfe\x64\xad\x32\x53\x69\x73\xac\x8d\xd2\x5f\xa5\xdd\x91\x88\xdc\xd4\x98\xfa\x79\xcb\x1f\x7e\x6f\x59\xef\xbd\xbd\xee\x6f\x9d\xd0\x95\x5d\xed\xe2\xbb\xc7\xc1\x21\x9b\x37\xff\xf7\xfd\xbf\x4a\xf7\xa4\x29\x5e\xf1\xd6\xef\xe9\xfd\x9d\xd6\x6e\xef\xda\x2b\x26\xe3\x94\x32\x6c\xf6\x30\x49\x41\xe4\xeb\xeb\xd3\x85\xf6\x54\x0a\x56\x7f\x5f\xf6\xf1\xeb\xad\x50\x7e\x28\xdc\x77\xaf\x4f\x04\x49\x5d\x66\xfa\xe0\xd2\x6e\xd3\x44\xf2\x4b\x87\x3d\x2e\xaf\xea\x69\xf5\xcc\xc9\x8f\xff\xbb\xec\xdb\xed\xa9\xfe\x59\xd1\x20\x38\xd1\x42\x4a\xb8\xa9\x58\xef\x60\x66\x0c\x96\x22\xe9\x72\xf3\x54\x51\x02\xcb\x95\xcc\x82\xd6\xac\xe8\xd9\x7a\x27\x3a\xad\x84\x7d\x84\xde\x0e\x37\x9c\x08\x20\x38\xf1\xc8\xc9\x3e\x3b\xba\x61\x50\x62\x95\xb5\x52\x2a\x64\xc0\x74\xfd\x93\x06\x03\xd5\xbd\x15\x27\xbe\x87\x9f\x84\xb7\xdf\xaa\xbb\x13\x56\x1b\xdc\x70\x22\x80\xe0\xc4\x43\x5d\x79\x5c\x65\xf2\x52\x97\x04\x5f\x6f\x53\x3d\x29\x5c\xbf\x4d\x2e\x77\x42\x94\x96\xd1\x38\xd2\x64\xa0\x49\xfe\xc8\x0d\x1e\x1a\x0c\x05\xb8\xe1\x44\x00\xc1\x89\xec\xbf\xba\x99\x2a\x8c\x6f\xfa\x14\x33\x57\x68\xa8\x7d\x64\x7c\xd9\xfe\x3e\x27\x9d\xbb\xb5\xf0\xfd\xc9\x36\xff\x39\x62\x3a\x63\xc2\x50\x89\x1b\x4e\x04\x10\x9c\x58\xe5\x28\xe0\xee\xd9\x11\x3c\x48\x2f\xbc\x1c\xba\x44\x36\x5e\xf5\x61\xe7\x18\xc9\xe0\xf5\x07\x22\x3c\x8f\x7e\x36\x1f\x48\x3d\xc5\x8b\xa1\x00\x37\x9c\x08\x20\x38\xf1\x52\xf8\x8f\xc4\x35\xce\x4e\xcc\x52\xe3\x3f\xbd\xbd\x4f\xa5\xf3\x49\x1f\x9f\xe6\x29\xd6\x34\x5f\xd4\x9f\x0b\xfe\xef\x81\xc0\x61\x6e\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x0d\x97\x4e\x98\x06\x3f\x27\x5f\x5a\x3a\x71\xe3\xd2\x59\xdb\x02\x35\xd3\xd7\xde\x7b\xf2\x0b\x1f\x7f\x28\xfd\xaf\xec\xc4\xe3\x91\x1b\xb2\x18\x0a\x70\xc3\x89\x00\x82\x13\x7d\x82\x67\xaf\x37\x92\x98\x87\xd2\xb7\x2f\xd8\xd3\x3f\x5a\x96\x95\xcc\x33\x5e\x48\xed\x7e\x50\x60\x76\xf5\x76\x73\x4c\x35\x09\xa1\x95\xfa\x47\x38\x71\xb7\x75\xe7\x4f\x98\x20\x38\xf1\xe4\x71\xa5\xcf\xda\x6e\x27\xe4\xb9\x62\xb7\x04\x2e\xbc\x62\x49\xe6\x76\x34\x62\x5a\x11\xe2\x48\xdf\x53\xee\xdc\x4c\x2d\x47\x44\x82\xa1\x00\x37\x9c\x08\x20\x38\x31\x33\x85\x9c\x7d\xb1\x43\x6f\x44\x76\xbe\x34\x5b\x24\xd8\x6c\x33\xe3\x3f\x79\xdf\xa4\xb5\xc8\xd3\x39\x83\x6e\xe3\x79\x91\xb6\x5c\x18\x0a\x70\xc3\x89\x00\x82\x13\xd5\x5d\xa4\x4b\x8d\x7e\x92\xb6\x52\xa8\x11\x3d\x3a\x7e\x4e\x35\x24\xfe\x93\xf9\x1a\x5d\x22\x65\x45\xc4\xfd\xc9\x65\x29\x81\x4d\x4e\x0c\x05\xb8\xe1\x44\x00\xc1\x89\xd4\x3a\x19\x37\xd7\xad\xda\x9c\xef\x56\xea\x4c\x4f\x38\x73\x55\x39\x2f\x4b\xd6\x0d\xf2\x7e\x13\x65\x23\x0b\x2d\x1e\x37\x76\x57\xc2\x50\x80\x1b\x4e\x04\x10\x9c\xc8\xdf\x7b\x8d\x32\xcc\xb7\x69\x86\x71\x7b\xe0\x63\xcc\xf2\xf3\xf7\xe6\xfe\x95\x01\x49\xe9\x0a\x44\x3a\xb9\xd6\xc4\x92\x4e\x34\xfb\x30\x14\xe0\x86\x13\x01\x04\x27\x26\x9d\x4c\x9a\x5c\xfb\x9c\x4d\xdb\x96\x71\x82\x25\x90\xed\x2a\xa9\x96\x59\xa3\x24\xb9\x96\xf4\x31\x9e\x32\x33\x3b\xd7\xf5\x31\x2f\x0c\x05\xb8\xe1\x44\x00\xc1\x89\xc5\xe3\xb3\xad\xdc\xee\xf7\x66\x93\xdf\x0b\xca\x4e\x55\xcd\x55\x96\xd7\x52\x8e\x5a\xd2\x4b\x86\xd3\x48\x69\xde\x61\xe5\xf7\x21\xc5\x50\x80\x1b\x4e\x04\x10\x9c\x28\xf6\xd9\xf5\xa5\xf8\x94\x99\xdc\xac\x52\xca\xe6\x7a\x03\x53\x48\x03\x67\x4a\xde\xc8\xda\x4a\xea\x09\xa5\xd5\x8a\x84\xbb\xf2\x8e\x18\x0a\xfe\x11\x4e\xdc\x6d\x67\xfe\x13\x26\x08\x4e\x8c\x30\x0f\x97\x35\x90\xfc\x7c\x87\x5c\xad\x78\x3d\xb2\xb3\xc5\x6e\xc0\x6d\x8f\x52\xeb\x65\x86\x35\x6e\x11\x15\xcd\xc1\xde\x83\x54\x18\x0a\x70\xc3\x89\x00\x82\x13\x3f\x24\x91\x14\x7f\x37\x23\xf2\xf1\x56\xf1\xe6\x1d\xdb\x5c\x2b\xdb\x23\x14\xf4\xd9\x2e\xc0\x36\xc0\xec\x98\x59\x46\xf1\x09\x3a\x55\x0c\x05\xb8\xe1\x44\x00\xc1\x89\xc6\x39\xc2\x22\x5f\x57\xb3\x9b\x86\x4b\xbf\x04\x30\x55\x3c\x92\x0a\xff\x16\x64\x16\x4c\xed\x32\xa7\x3d\x77\xce\x6d\xda\x3a\xe9\x28\x86\x02\xdc\x70\x22\x80\xe0\xc4\x36\x1d\x46\x65\xd2\x3d\x59\x2b\x0c\xaf\x25\x3d\x7b\x0e\x9d\x9a\x65\xfd\xc6\xbf\xff\xbc\x07\x07\x0f\xb1\xb5\xa9\xe5\xc1\x27\x05\x27\x30\x14\xe0\x86\x13\x01\x04\x27\xaa\xd0\x1e\x1c\x6a\xaf\xa2\x6e\x32\xdb\x51\x7d\x1d\x9e\x97\x7a\xd7\xc6\xda\xcf\xd5\x35\xaf\x24\xa7\x7f\xeb\x62\xe7\xbd\xff\x0e\x9c\xc2\x50\x80\x1b\x4e\x04\x10\x9c\x38\xae\x30\xa0\x33\xdf\x4a\xf1\xdc\xc1\x35\xb2\xc2\xb7\x66\xac\x4d\x84\xe9\xd7\xc1\x1e\xee\x07\xc3\x9e\x1b\xa7\x3e\xac\x12\x6d\x13\x76\x58\xdc\x70\x22\x80\xe0\x44\x92\xd5\x89\x52\x4f\xa7\xef\xfb\xc5\xfa\x92\xc7\xdf\x69\x1e\x55\xd6\x53\xb5\x28\x68\xfa\xba\xbe\x63\xfc\xf1\x96\xe4\x0b\x36\x73\xc2\xb3\xc2\x0d\x27\x02\x08\x4e\x6c\xb7\x46\xce\x67\x17\x93\x8e\x86\x64\x39\x47\x0a\x64\xa9\x2e\x98\x17\xe8\x28\x6e\xc7\x38\xf3\xba\x08\x44\x09\x0f\xce\x2b\x10\x16\xe9\x7f\x84\x13\x77\xeb\x5d\xff\x84\x09\x82\x13\x3b\xc5\xe8\x2f\x26\x53\xa9\x8b\xbe\x68\x5c\x8d\x6d\xcf\x52\xa1\xe2\xb4\xbc\x78\xdf\xf8\x5a\x9c\x22\x59\xfd\xe7\x80\x1c\x6e\xc5\xfd\x18\x0a\x70\xc3\x89\x00\x82\x13\xd5\x83\x1b\x25\x1c\xb2\x1b\xa7\x7e\x09\xbf\xd6\xf9\xca\x79\x94\xa6\xfb\xab\xd5\x03\xed\x8a\xfe\x0f\x9b\xbe\xe9\x4f\x18\xe8\xe2\x05\x30\x14\xe0\x86\x13\x01\x04\x27\x7e\x9c\xa5\x6f\x08\xec\x10\x0f\xd4\x1a\xe1\xd9\x2b\xae\x52\xf5\x23\x50\xf4\x70\x5a\x0a\x4f\xf2\xf1\x9a\xfd\x4d\xb7\xd6\x3c\x2e\x10\x1e\x2c\x6e\x38\x11\x40\x70\x22\xfd\x5a\x1e\xd9\x67\x6d\xae\x79\x32\xc3\xbe\x48\x99\xa5\xc7\x5f\xab\xdf\xc6\x5f\x8c\xb7\xba\x92\x24\xd7\xa9\x16\xf3\xa4\xbe\x85\x16\x43\x01\x6e\x38\x11\x40\x70\xe2\x2d\xf5\xc8\x84\xec\xc8\x7b\xc6\xa5\xda\x7b\x7f\x61\x46\x14\x34\xfb\xb4\x8e\xb5\x2a\xd9\xcd\x3b\x1d\x78\x0c\xf6\x1e\x16\xd7\x21\xac\xe8\xb8\xe1\x44\x00\xc1\x89\xe5\xc6\xaf\xfc\x91\x41\x03\x27\x36\x73\xc6\x8b\x91\x7b\xfa\xdd\x64\x7c\x2e\xcb\x06\x27\xf2\x26\x86\xf3\x47\xbf\x5c\x7c\x2c\x4f\x68\xbb\x71\xc3\x89\x00\x82\x13\xe9\xaa\x34\x4b\x59\xe2\x43\xa2\x6b\xda\x98\x6f\x97\xfc\x77\x40\xaf\xbd\x4f\xdd\xe4\xe4\xf8\xa1\x47\x4a\xc2\xfa\x35\xd4\x0b\x17\x5d\x30\x14\xe0\x86\x13\x01\x04\x27\x96\xce\x5b\x8d\x1c\xbe\xe9\xc6\x7c\xe9\x30\x3d\x7b\xc5\x07\xe4\x21\xdb\xa6\x4c\x0a\x37\xa9\x5a\x68\x0d\x07\x52\xa7\xe1\x73\x9a\x01\x43\xc1\x3f\xc2\x89\xbb\x4d\x77\x7f\xc2\x04\xc1\x89\x97\x74\x7a\xc4\xe4\x72\xf8\x7f\x04\xb2\x19\x6f\x16\xdb\x78\xb5\xbb\xc5\x7b\xe6\xfa\x94\xc6\x0c\x91\xaf\x27\x23\x0e\x11\x11\x84\x49\x1a\x37\x9c\x08\x20\x38\x71\x8e\x34\xe6\x45\x5d\xdb\x86\x43\xdb\x17\xc5\x0f\xfc\xa4\xec\xa4\x8e\xe8\x36\x83\x8c\x7d\x42\xa9\xc3\x5b\x32\xae\x1e\x03\x65\x1b\x0c\x05\xb8\xe1\x44\x00\xc1\x89\x15\x57\x72\xc2\xda\xe7\xa4\x5a\x99\x6e\x1e\x27\xfb\xf8\x24\x36\xd1\x84\xd9\x8e\x34\x01\x53\xe3\x1e\x7f\xa9\x21\xd9\x96\xe7\x49\x8d\xa1\x00\x37\x9c\x08\x20\x38\x91\xb1\xe7\x66\x70\x51\x15\xfd\x6c\xbe\x68\x2c\xd3\x8b\xa3\x9b\xac\x4c\x43\x6c\x0b\x0f\x6a\xf3\xcd\x27\xbb\x3a\xca\x59\xc6\x98\x08\x6d\x05\x6e\x38\x11\x40\x70\xa2\x59\x04\xed\xd3\x6a\xdf\x3d\xf6\xf5\x05\xf7\x94\x42\x35\x07\xf2\x6e\xec\x18\xdf\x21\x4a\x39\x4c\x26\xf0\x9c\x8c\x9c\xa3\xa8\xca\x09\x43\x01\x6e\x38\x11\x40\x70\xe2\xcf\x9f\xe7\xd8\xc6\x7f\x5c\xaf\x8c\x18\x93\x11\xd5\x27\x19\xb8\x73\x71\xb6\xe7\xdb\xeb\x04\x07\x43\x5b\xf9\xa3\xed\xa1\x77\xea\x08\x6d\x1e\x6e\x38\x11\x40\x70\xe2\x83\xaa\x8b\x6f\xca\x41\xc8\xed\xf0\x44\xa3\xe0\x43\x01\x11\x31\xa2\xf9\xdd\x13\xb7\x36\x7f\x76\x4c\x73\xef\x1c\xa8\xdd\xca\x23\x3c\x2b\xdc\x70\x22\x80\xe1\xc4\xb7\xac\x09\x67\x39\x0b\xaf\xd0\x8f\x55\xb9\xb5\x8e\xab\xf9\x27\xc6\xaa\x7e\x7f\xd1\x14\x09\x58\xce\x7d\x5b\x99\x8b\x24\x3b\x84\xa1\xe0\x1f\xe1\xc4\xdd\xce\x3f\xfe\x84\x09\x82\x13\xfb\xbc\x15\xd3\xcd\x93\x79\x6c\xaf\x6b\x4d\x5d\xbc\x13\xe1\x70\x8c\x32\xef\xf3\x4e\xba\xf0\xfc\x84\x7b\xfb\x99\x1c\x85\x3b\x80\xb0\x82\xe0\x86\x13\x01\x04\x27\xb6\xb8\x8e\x6e\x7c\x7d\xb0\xa4\x72\x88\x48\xc4\x7e\x9a\x9f\x44\xe0\x8b\xca\x42\x48\xe8\xed\x06\x37\xf7\xc0\x9e\x8b\xbe\xbd\x31\x7a\x18\x0a\x70\xc3\x89\x00\x82\x13\x95\x4e\x2f\x95\xb4\x8c\x94\x2c\x21\xac\x2b\x6a\xdf\x29\x7e\x79\xc7\xd2\x4e\x9e\xa1\x50\xda\xb8\xeb\x1c\x90\x6e\x44\x1a\xcf\x60\x85\xa1\x00\x37\x9c\x08\x20\x38\x31\x8d\xe5\xd2\x23\x0f\xfd\x30\xba\xa8\xf7\x86\x6c\x54\x43\xdc\x2b\x63\xc7\x2e\x6c\x3b\x34\xa6\xba\x0f\x8f\xd0\x1f\x94\xae\x90\x30\xc4\x50\x80\x1b\x4e\x04\x10\x9c\x98\xa8\x7f\x26\x61\x99\xeb\xc5\x9b\xb0\x57\xd4\x0f\xd3\xca\xa4\x79\x04\x1a\x9e\x38\x8b\x7c\x10\x91\x57\xb5\xa7\x39\x3d\xd4\xbb\x42\x08\x13\x6e\x38\x11\x40\x70\xa2\x71\xe5\xfb\x70\x8f\xd0\x7a\xd5\xab\x03\x47\x59\x78\x7d\xd8\x74\x6f\x54\x9c\x55\x7c\x76\x67\xab\xa5\x40\xb9\x83\x7b\x38\xa4\x4e\x0b\x43\x01\x6e\x38\x11\x40\x70\x62\x90\xcd\x0f\x93\xc1\x67\x71\xdb\x94\xd7\x54\x46\xdd\xbd\xde\xb8\x44\x85\xe7\xeb\xb0\x25\x9e\x8a\x1c\x20\xed\x23\xdd\xcb\x72\x4d\x12\x43\x01\x6e\x38\x11\x40\x70\xe2\x3e\x87\xe7\x47\x28\x7b\xab\x3b\xeb\x4a\x45\x35\xf6\xe7\xad\x9c\x9e\x4e\x14\xd1\x6d\xbf\xe9\xe6\x51\x7f\x72\xf3\xd3\x92\x64\x86\x0c\x86\x82\x7f\x84\x13\x77\x3b\x21\xfc\x13\x26\x08\x4e\xb4\x90\x79\x4c\x75\x29\xc7\x90\xa6\xf3\x4c\x56\xd4\x72\xcc\xec\x96\xde\x04\x0d\x15\xb1\x02\x05\x7d\xdb\x97\x99\xf2\xa7\xe9\x0a\x1a\x18\x0a\x70\xc3\x89\x00\x82\x13\xb3\x32\xb2\x39\x27\x24\xfa\xfb\xa9\xd4\x5d\x7f\x31\x7d\x3b\xf4\xba\x34\xe3\x49\x89\xc1\x78\xdb\x97\xcb\xb9\x86\x06\xbf\xfe\x6b\x21\x0c\xee\xb8\xe1\x44\x00\xc1\x89\x5f\xde\xc6\x6a\x84\x3b\xdc\x7f\xe7\x3d\xba\x87\x59\xd2\xf3\x70\x15\xb3\xa1\x8d\x89\x00\xcb\xc8\x48\xb1\x49\x43\xd4\xac\x6d\x18\x2f\x86\x02\xdc\x70\x22\x80\xe0\x44\xf9\x84\xf1\xfa\xae\x19\x4a\x13\x9f\x3d\x24\x2d\x5c\xb6\x65\x36\x8d\x3c\x2a\x33\xb4\x34\x2c\x6e\x9e\xa4\xc7\x4d\x5f\x1f\x0c\x3b\x88\xa1\x00\x37\x9c\x08\x20\x38\x51\xb8\xc2\x3c\x36\x24\x28\xb3\x26\x5b\x49\x72\x1f\xc3\x25\x2e\xea\x5a\xd3\x0b\xc5\xfa\x3f\x5f\x53\x34\x49\xe6\x7f\xbd\x5d\x71\x59\x18\x43\x01\x6e\x38\x11\x40\x70\xe2\xad\xd9\x8d\x0b\x3d\x03\x9c\x5b\x94\x8e\xee\x51\x56\x2b\xe9\xd2\xc5\x1e\x5a\x3f\x0a\x7d\x9c\x9f\x67\x70\x85\x55\x33\x9a\xf1\x5b\x63\x28\xc0\x0d\x27\x02\x08\x4e\xa4\x38\x9e\x57\x36\x7d\x98\x52\x81\x3f\xef\x33\x57\x69\xc8\x0f\x1e\x73\xf3\x4e\xc9\x43\x43\x16\xca\x5e\x8d\xe7\x2d\x03\x9d\x5c\x08\x7f\x03\x37\x9c\x08\x20\x38\x51\xb4\xfb\xe4\x74\xfd\xd5\xfb\x51\xdf\x2a\x4f\x7f\x8e\x51\x7f\xf7\x5f\x0e\x5d\x42\xff\x76\xca\xe0\xb6\xab\xe1\x83\x29\x4e\xfa\x21\x53\x0c\x05\xff\x08\x27\xee\x76\x86\xfe\x27\x4c\x10\x9c\xe8\xc7\xca\x30\x49\x45\xa3\xbc\x5f\x53\x50\x36\x55\x89\x9e\x5b\x34\x55\x30\xc3\xf9\x9c\x93\x5d\xda\xa9\x35\x3d\xea\xb8\x1b\x28\x21\xdd\xb8\xe1\x44\x00\xc1\x89\x76\x1a\x5a\x47\x47\xaf\x9e\xab\x36\xae\xb5\xbb\xfe\xf0\x65\x59\x9a\x64\x7a\xc9\x78\xa4\x85\x83\x46\x7f\xed\x9d\xdc\x56\x62\x32\x42\x0b\x86\x1b\x4e\x04\x10\x9c\x58\xff\x9c\x9d\x46\x32\xee\x57\x02\x25\xef\x4a\xca\x1c\x65\xe3\xa8\x43\xfc\x16\xa6\x2b\xd5\x51\xe2\xc7\x1f\x55\x1c\x71\xd6\x87\x11\x43\x01\x6e\x38\x11\x40\x70\xa2\x82\xf5\x41\x66\x36\xe1\x0a\x0b\xb1\x46\x35\xbe\xa6\x4c\x3e\xa1\x9b\x85\x9b\x9b\x69\xef\x7d\xf4\x6a\xac\x3c\x0e\x1f\xd1\xa8\x23\x04\x16\x37\x9c\x08\x20\x38\x71\xcd\xff\x52\x64\x4a\xcc\x47\x06\x6f\xa6\xa3\xdf\x55\x4e\xe6\xcb\x85\x98\xf6\x5f\x6e\xee\x5a\x77\x3a\x75\x40\xaa\xb2\x45\xae\x99\x30\xb8\xe3\x86\x13\x01\x04\x27\x7a\xb6\x0e\x18\x9e\x9a\x78\x11\x69\xf9\x5d\x81\xcd\xef\x8a\x8b\x62\xd4\x89\x03\x4d\x11\x1e\x96\x14\x77\xaf\x45\x30\x5c\xaf\x7b\xa0\x82\xa1\x00\x37\x9c\x08\x20\x38\xd1\xec\x69\x85\xce\x82\x62\x8a\x8c\x65\xbc\x50\xda\x44\x8a\x5f\x3f\x93\x69\x74\x83\x55\x2e\xff\xd0\x4f\xfd\x93\x96\x44\xab\x25\x84\x39\x19\x37\x9c\x08\x20\x38\xb1\x98\x21\x5f\x5c\xa6\xc2\xf4\xd2\x1d\x8d\xf8\xaf\xa7\xef\x0e\x87\x0b\x4e\xd7\xb6\x7d\xca\x3f\x92\xc0\x77\x20\x92\xcc\xc9\xaa\x09\xc1\x50\xf0\x8f\x70\xe2\x6e\xba\x20\x74\xd9\x27\x3b\xb5\x1a\x6e\xf4\xd8\xde\xff\x24\xe7\x57\xf1\x62\x70\x84\xc4\x8f\x27\xb6\xaf\xf3\xd3\xde\x1f\x3b\x6c\x8c\x17\xc4\xed\xa9\x4d\xff\x2a\x1d\x77\xf9\x69\x2b\xd3\x1d\x47\xf5\xb6\x9a\xee\xeb\xcc\xed\x49\xba\xf3\xb6\x57\x83\x52\x3e\xf5\x33\x4c\x9d\xa4\x4a\x59\x4f\x5f\x57\xff\xab\xf4\xca\xa7\xd8\xbb\x87\x6f\x89\x3b\x78\x3b\x1d\x71\x49\xe9\x67\xff\xb6\x7a\x37\xf9\x7c\xeb\x39\x53\x47\x77\xad\x5e\x46\xb3\x0e\x39\x8a\xbf\x4a\x97\xac\xf7\xd1\x47\x4a\x7f\x0e\x9d\xa5\x9a\x60\x66\xdd\xea\xe0\x78\xb2\x6f\x71\xab\x62\x52\x8f\x53\x9b\xef\x51\xce\x52\xda\x54\xda\x5f\xa5\x69\x42\x45\xaa\x99\x9c\x83\x1e\xf7\xaf\xad\xb5\x99\x17\x06\xbd\x55\x9f\xe7\x34\x8e\x72\x12\xd5\x7e\x6d\x37\xe4\x3d\x1c\x78\x38\xf4\x6f\xe4\x51\x42\xf0\x33\x9f\x07\x9f\x4c\xb1\x6f\x4f\x90\x6c\xab\x81\xd8\xa1\x1b\x97\xb5\xe9\x0c\xd6\xef\x9c\xff\x64\x2e\x6c\x42\x39\x2f\xfd\x57\xe9\x71\xd4\x3b\x2c\x85\x2c\x6c\x31\x70\x5b\x24\xf4\x9d\xee\x8b\x69\x47\x83\x67\xc5\x6e\x53\x77\x8c\x6b\x5b\xba\x2a\x59\xfd\x58\xdb\xfe\x2a\x35\xb3\x0e\x7b\x9b\xbf\x6c\x68\xbb\x71\xf2\xd5\xfd\x1e\xd9\x30\x97\xd8\x97\xcd\x82\x56\xb2\x4d\x51\x54\xa5\x29\xed\xf7\x6c\x99\x12\xff\x77\xd9\xb7\xdb\x53\xfd\xff\x15\x0d\x81\xcc\xbe\x63\x2f\x89\x7a\xd8\xf6\xd3\xcc\x80\xc3\x67\x63\xea\x26\x1f\x14\xdf\xbf\x32\x2c\xdd\x90\x74\xc0\xd9\x9f\xc3\xf1\xfd\x49\x91\x3c\x6a\x0c\x45\x70\x9b\x7d\x08\x64\xf6\x85\xa9\x2b\xaf\x2c\x9e\x71\xf0\x8b\x31\xae\x54\x33\x7a\x78\xf9\xa6\xf7\xcc\x7a\x5c\xcf\x8a\x6b\xa4\xe1\x64\x80\xdc\xe9\x53\xca\x7c\x18\x8a\xe0\x36\xfb\x10\xc8\xec\xab\xbc\xd0\x47\x5b\x1d\x65\x54\xd1\xa9\x5c\xf0\xad\x2c\xf0\xf2\x41\xc5\xc4\xca\x1c\xe7\x9f\xcd\x4c\x71\xf1\x9a\x92\xfd\x22\x9e\x8c\x18\x8a\xe0\x36\xfb\x10\xc8\xec\xe3\xd7\xc2\xba\x17\x2a\x8b\x24\x95\xf4\x9d\x33\x6e\xe6\xdc\x56\x75\x37\xf0\x9b\xe2\xdf\x94\x7c\xa5\x10\xd0\xf5\x83\xe1\x15\xb7\x11\x86\x22\xb8\xcd\x3e\x04\x32\xfb\xfc\x14\x99\x7a\x6a\x90\x04\xc9\xed\xe8\xdb\x47\x88\xc3\x18\x05\x19\x45\xfa\x54\xd9\x26\x94\x18\x73\x6d\x9b\x94\xe5\x92\xd4\x08\x9f\x03\xb7\xd9\x87\x40\x66\xdf\xc4\x7f\xb5\xd1\x52\x1c\x02\x7e\x74\x7a\xa9\xd5\xb9\xc7\x79\x93\x5a\x3f\x78\xc6\x45\xcc\x9c\x8f\x3d\x63\xa7\xca\x7f\x83\x64\x9b\x04\x43\x11\xdc\x66\x1f\x02\x99\x7d\xb1\x05\xd7\xf8\x46\x1c\x93\xd7\x44\xfc\x72\x6a\x34\xb9\x90\xc0\x55\xa2\x83\xc6\xc2\x5d\x0b\xa3\x07\x4e\x06\x15\xcf\x77\x37\xbb\x63\x28\x82\xdb\xec\x43\x20\xb3\x6f\x2f\x77\x4b\x70\x25\x7d\x50\xe1\x60\x54\x8e\x7e\x76\xf8\x84\xe4\x95\x91\x4e\xce\x43\xb7\x92\x47\x91\xec\x1b\xb9\xa3\xa5\xa6\x74\x18\x8a\xfc\xa3\xd9\xb7\xdb\xba\xf3\x27\x4c\x90\xd9\x77\x40\x28\x69\xb2\xb3\xe3\xf8\x3e\xb7\xf4\x5b\xc2\x2b\x36\x01\x1f\xcf\xf2\x18\xe8\x67\x07\x9c\x7e\x9c\xe3\xf6\x8d\x25\xbc\x8a\x52\x12\x43\x11\xdc\x66\x1f\x02\x99\x7d\x3c\xd7\xfa\x5a\x89\xdf\xb3\x9e\xe6\x30\x4a\xf5\xde\xeb\xeb\x50\xbf\x38\x56\xc8\xfb\x7e\xb5\xb0\x74\xfe\xc1\xef\x47\x5f\xd9\xf7\xef\xc3\x50\x04\xb7\xd9\x87\x40\x66\x9f\x25\x45\xb0\x8c\xa0\x8a\x11\x30\xf6\xec\x92\xe3\x0d\x7c\x3d\xf0\xd0\xef\x04\x9f\x50\xcd\x65\xc5\xcf\x09\xed\xcd\x65\x6a\x67\xce\x62\x28\x82\xdb\xec\x43\x20\xb3\x6f\x7f\xfa\x8d\xf4\x5b\x89\xa7\x8d\xa2\xcb\xfb\xc0\xf9\x37\x31\x36\x36\x6d\x79\xa8\xb7\x42\x50\xb4\x70\x98\xd8\x5c\xe5\xd9\xc6\xe3\x18\x8a\xe0\x36\xfb\x10\xc8\xec\x73\xb9\x20\x1e\x38\xac\x53\xc1\xd1\x2f\x61\x67\x91\xd2\x97\x61\xc1\x49\x45\xb9\x1a\xca\xf4\xd0\x43\xc9\x2b\xb5\xae\x31\xf8\x09\x05\x86\x22\xb8\xcd\x3e\x04\x32\xfb\x98\xff\xbb\x68\xe0\x32\x7d\x15\x98\x4a\xaf\x44\x27\xa8\x80\xe2\xef\xf7\x8a\x7e\x5b\xaa\x27\x17\x50\x85\x2f\x44\x8e\xed\xb8\x58\x60\x28\x82\xdb\xec\x43\x20\xb3\x0f\x88\xc8\x7e\xb9\x7f\xe3\x70\x8f\x10\x55\x7e\x40\xf5\x11\xb9\x13\xea\x13\xe6\xe5\xe7\xc9\x6b\xf4\x54\xe7\xe7\x46\xc4\x83\xc9\xec\x30\x14\xc1\x6d\xf6\x21\x90\xd9\x17\xb1\xf7\xc9\xe6\x7e\xe9\xb9\x13\xaa\x87\x28\xf6\xef\xe3\x49\xb3\x34\xdc\x8a\xa1\xe5\x6b\x12\x90\x79\xc4\x19\x72\xe0\x8d\xeb\x98\x06\x86\x22\xff\x68\xf6\xed\xb6\x33\xff\x09\x13\x64\xf6\x3d\xf6\x1d\x6e\x53\x11\x16\x6d\xd2\x79\xc8\x97\x28\xc4\xcc\x72\xb2\xba\xb7\xe1\x57\x5e\x93\x55\x82\x07\x43\xc9\x05\x7a\x73\x27\x11\x0c\x45\x70\x9b\x7d\x08\x64\xf6\xad\xaf\x7c\x76\x6c\x74\x3a\x16\x7d\x56\x99\xab\x2f\xe7\xe1\x86\x88\xcd\x3d\xed\x68\x25\xad\xc2\xb1\x66\x27\xbb\xca\xa2\x2f\x8c\x84\xc0\xe2\x36\xfb\x10\xc8\xec\xe3\x5d\xa4\xac\xea\x0b\xee\xc6\xfe\x5b\xa7\xde\x66\xbd\xe8\x35\x28\xbf\xde\x6d\xe6\x63\x33\x54\x7b\x6f\x80\xb9\xf7\x93\x0c\xbf\x2e\x86\x22\xb8\xcd\x3e\x04\x32\xfb\x62\x5e\xc6\x6c\xfc\xd0\x8f\xb3\x3c\x13\x14\xf7\xfe\xa7\x3e\xe3\x64\xe4\x60\x13\x91\x8f\xdf\x3a\xdf\xe6\xa7\x8e\x1d\x9b\x95\xfd\x82\x18\x8a\xe0\x36\xfb\x10\xc8\xec\x9b\x15\x28\x88\x4d\xa9\x2f\x0c\x7d\xcb\x93\x62\x14\x5b\x13\x37\x6c\x48\x72\xba\x6f\xff\xe3\xb6\x0f\x4b\x34\xa6\x89\xbc\x1f\x3c\x6c\x31\x14\xc1\x6d\xf6\x21\x90\xd9\xf7\x5b\x98\xfd\x7e\x1e\x76\xec\xc3\x8b\x23\xf9\x31\x8b\xad\x2c\x4c\x1a\x8d\x6f\x2b\xe8\xda\x3b\xdd\xcc\x03\xa3\xe5\x89\xdd\x2d\x08\x7f\x03\xb7\xd9\x87\x40\x66\xdf\x8e\xce\x1c\xad\x82\x79\xda\x94\xfc\xa5\xdc\x58\xcd\x3d\x20\xe6\xd9\x21\xb9\xaf\xb4\x9c\xb4\x0d\xca\xe2\xf4\x55\x9b\x15\xeb\x87\x30\x14\xc1\x6d\xf6\x21\x90\xd9\x27\x88\xf6\x30\x91\xf6\x92\x46\xd4\xaa\x7e\xfe\xe0\x16\xa8\x66\x71\xff\x73\x0c\x5d\x7d\x45\xa7\xe3\xbd\x38\x21\x69\x3f\x86\x65\x42\xc7\xf3\x8f\x66\xdf\x6e\xbd\xeb\x9f\x30\x41\x66\xdf\xef\x00\x79\x0b\x81\x4e\x3d\xca\xf7\x69\xb1\x3f\x8b\x76\xf8\xfc\x0b\x39\x1f\xcd\x35\x38\xd5\x68\xf1\x05\xd6\x54\x58\xc7\x37\x19\x60\x28\x82\xdb\xec\x43\x20\xb3\xef\x59\x69\xb4\xb4\xc1\x6d\x71\xb9\x71\x2c\x46\xf4\x23\xcb\x02\xe5\xd6\xaa\x8a\xa4\x98\xc4\x53\x43\xda\xa7\x45\xb6\x43\x9a\x8a\x7a\x18\x8a\xe0\x36\xfb\x10\xc8\xec\x5b\x0e\x5a\x30\x1e\x91\xbb\x29\x5b\x7b\x6a\x67\xab\x81\xa3\x76\x53\x12\x6d\xd1\x2a\xa5\x26\xa5\x1a\x5d\xae\x4c\x1b\x57\x09\x27\x04\x16\xb7\xd9\x87\x40\x66\x9f\xa4\x79\xca\x37\x86\xd3\x8c\x1a\x8a\x1c\x32\x3c\x5a\x14\x3d\x1d\x22\x1b\x4f\x47\x6c\x4e\xf4\xbd\x6b\xee\x3b\xa3\x28\x76\xcb\x49\x0b\x43\x11\xdc\x66\x1f\x02\x99\x7d\x74\xec\x02\xeb\x15\x87\xa3\xb5\x89\x0a\x0c\x8e\x7e\xb7\xdf\xf9\x9c\x9f\x72\xea\x15\x4d\x36\xfd\x71\x7a\xd2\xed\x37\x0f\xab\x1e\x11\x02\x8b\xdb\xec\x43\x20\xb3\x6f\x39\x3a\x7d\x5f\x88\x68\xb4\x41\x8e\x69\x37\x7d\xcb\xb5\xd2\x84\x4b\x4b\xf5\xb1\x34\x5b\x11\xda\x9e\xf4\xe6\xc9\xae\x1e\x17\x65\x31\x14\xc1\x6d\xf6\x21\x90\xd9\xc7\x63\x2e\x18\x79\x2f\x82\x32\x84\x81\xa8\x62\xb8\x55\x37\xef\x71\x31\x75\x36\xfb\x85\x73\x43\xec\x3c\xb9\x47\x5d\xbf\x7e\xa4\xd0\xc1\x50\x04\xb7\xd9\x87\x40\x66\x9f\xdb\xed\x10\x11\xcd\x85\x18\xf5\xf4\x98\x75\xbb\x9b\x19\x99\x64\x44\xb7\x0d\x49\x58\xbb\x97\x87\xcb\x58\xcd\x1d\x67\x65\xdc\x55\x31\x14\xf9\x47\xb3\x6f\xb7\xe9\xee\x4f\x98\x20\xb3\x8f\x8d\x27\xaf\xbb\xf0\x90\x12\xa9\x67\x7b\xb3\x8c\x04\x4f\x8f\x0a\x3d\xe3\x8d\xe7\xcc\x37\x58\x22\x75\xba\x64\x6b\x27\xcc\x45\xc4\x30\x14\xc1\x6d\xf6\x21\x90\xd9\x67\x69\xc1\x54\x64\x32\xa4\x39\xa3\xd6\x70\xfb\x7c\x7b\x54\xc1\xf7\xeb\xf6\x22\x2a\x55\x93\xb6\x46\xe6\x37\x7b\xf9\x0e\xec\xf9\xb6\x07\x43\x11\xdc\x66\x1f\x02\x99\x7d\x91\x5f\x8e\xbc\xab\xaa\x98\xd6\x49\xbf\x29\x23\x1c\x26\xbb\xf2\x43\x7e\xcf\xfa\xf5\xcc\xd0\x4e\x4d\x0b\xa5\xca\xc0\xd6\x67\x1a\x07\x31\x14\xc1\x6d\xf6\x21\x90\xd9\x97\xfa\xe8\x00\x12\xaa\xef\xee\xc3\xd4\x11\xdc\x7f\x8e\x83\xb7\x3e\xca\xda\xfb\x73\xd9\x9c\x1e\xbb\xcf\x74\x50\x7d\x5f\x66\x2b\x61\x25\xc4\x6d\xf6\x21\x90\xd9\xa7\x22\x65\x94\x1a\x74\xb5\xbd\xe1\x4d\x8c\xb2\xfb\xf3\xe5\xe3\x57\x03\x2f\xcd\xde\xbd\x13\x9d\x6b\xe6\xb8\x20\xaa\xa7\x1c\x48\x6d\x86\xa1\x08\x6e\xb3\x0f\x81\xcc\xbe\x07\x16\x3d\x5f\x85\x96\xb4\x8a\x0b\x9f\xd9\x4e\xd4\xf9\xcb\x36\x1f\xca\x69\xfa\x94\xe3\x2b\x34\x2a\x9b\x96\x70\x9c\x48\x98\xc5\x1c\x43\x11\xdc\x66\x1f\x02\x99\x7d\xe7\x8d\x46\x4f\xaa\x4c\xc9\xc5\xf3\x1f\xcb\xbd\xa8\x4f\x5b\xae\x58\x1e\xae\x4a\xaa\x35\x55\x78\xb1\x26\x54\xc5\x6d\xf3\x9b\x19\x25\x86\x22\xb8\xcd\x3e\x04\x32\xfb\x96\xea\x81\x5d\xde\xbb\x73\x48\xf5\x91\x42\xe6\xbb\x55\xea\xdd\xb6\x3e\x35\xe5\xd1\x69\x67\x0e\x6f\xfe\x32\x59\xa2\xfe\xfa\x93\x30\x33\xfd\xa3\xd9\xb7\xdb\xf9\xc7\x9f\x30\x41\x66\xdf\x19\xdb\x2d\x27\x1d\xea\x2e\x6a\xc3\xbd\x45\x83\xc1\xe5\x87\x99\x3e\xfb\x31\x9a\x2f\x48\xba\x57\xa8\x32\x59\x7a\x90\x99\xf8\x0b\x60\x28\x82\xdb\xec\x43\x20\xb3\x8f\x04\x91\x7b\x38\x33\x57\x74\x6d\x35\xfc\x25\x9b\xee\x8f\xd8\x83\x6f\xed\xe4\x91\xb2\xaa\x2b\x44\x96\x7b\x28\xc8\x33\xdf\xb1\x10\xda\x0a\xdc\x66\x1f\x02\x99\x7d\x51\xc0\x66\x65\x34\x49\x86\x44\xa4\xca\xf8\xab\xa1\x8d\x6f\xdf\x8a\xde\x56\xf4\x5e\x65\x6f\xa1\x89\x6f\xb3\xa5\x8e\x5f\xc9\x51\x0c\x45\x70\x9b\x7d\x08\x64\xf6\x8d\xc4\xc5\x98\xe7\x24\x3c\x7c\x7f\xb4\x41\x67\x2a\x78\xe6\x16\x35\x5b\xd4\xa8\x54\x43\xe5\x69\x4d\x03\xcb\xf7\xfa\xd7\xaf\xcb\x11\x76\x71\xdc\x66\x1f\x02\x99\x7d\xd6\xb3\x3f\x16\x06\xa5\xed\xf2\x03\xd6\xd3\xb3\xb0\x4f\xb2\xba\x4c\x76\x6f\x64\x10\xf6\x75\x03\xb7\xe3\xcd\x61\x44\x6b\xae\x56\x18\x8a\xe0\x36\xfb\x10\xc8\xec\xbb\x1e\x79\xdf\x37\x47\xe7\xc7\x8c\x0e\x8d\xdc\x8b\x11\x95\x0b\xef\x19\x24\xcb\xbe\xbd\x39\xfd\xe6\x96\xc1\xba\x54\x7a\xa3\xb9\xca\x61\x0c\x45\x70\x9b\x7d\x08\x64\xf6\x75\x64\x11\x8f\x5b\xf3\x4e\x9e\x88\x3a\x68\xb1\xf4\x53\x67\xc7\x39\xf5\x49\xc9\x54\xa2\xa7\x50\xab\x94\x17\x5d\x7e\x52\xae\x0c\xa1\xcd\xc3\x6d\xf6\x21\x90\xd9\x47\x95\x56\x1c\x1e\x5b\x1e\x25\x23\x1b\x39\xff\x6a\x72\x2a\xbf\xe6\xe0\xbe\x66\x45\x21\xaf\x13\xdd\xfe\x0e\xce\x23\xb1\x23\x35\x72\x18\x8a\xfc\xa3\xd9\xb7\xdb\x09\xe1\x9f\x30\x41\x66\x9f\x7a\x74\xb5\x41\xfa\x4f\xa3\xaf\x37\xe6\x86\x4d\x15\x89\x88\x92\xe7\x9f\x2b\x8a\x46\x1f\x8b\xca\xcd\x59\x5d\xd4\xba\xdb\x5b\x60\x8d\xa1\x08\x6e\xb3\x0f\x81\xcc\xbe\x85\x4b\x4a\x65\x71\xa5\x5a\x09\x9b\x41\x54\x19\xa3\x37\x6b\x79\x03\xee\x3f\xcf\xd9\xa2\x59\x9d\x46\xc5\x9b\x73\x2f\xbe\x3f\x23\x81\xa1\x08\x6e\xb3\x0f\x81\xcc\x3e\xdb\x3b\x8e\x05\x5c\x1f\x2a\x0c\x5e\x3e\xac\x0c\x26\x73\x52\x35\x90\xbd\x77\x96\xbe\xf7\xee\xe9\xe6\x27\x97\xf3\xda\x4f\x97\xb5\x91\x60\x28\x82\xdb\xec\x43\x20\xb3\xaf\x5f\xc0\xa3\x46\xf0\x9a\xb6\xb1\x1d\x0d\xc3\x48\xa0\xc4\x3b\xa1\xa3\x01\xa4\xfb\x46\x0f\x29\x1a\x97\x7a\xf8\x72\xd4\x8f\xfb\x1e\xc1\x50\x04\xb7\xd9\x87\x40\x66\x9f\x03\xdb\x0d\x6a\xa1\xb9\x77\x75\xdb\xfd\xc1\x4c\x16\x22\xe4\xd6\x22\xf1\x93\x4f\x5d\x3e\x5b\x71\x4c\x14\xf0\x8a\xa8\x04\xe8\x12\x5a\x62\xdc\x66\x1f\x02\x99\x7d\x3f\xae\xc4\x25\xbc\xbe\x6a\x92\xf1\x21\x2d\xea\x64\xc2\xec\x4c\x5b\x9a\xe7\xeb\xb7\x0a\x75\x13\xae\xfc\x2f\x67\x84\xaa\x6c\x76\xec\x30\x14\xc1\x6d\xf6\x21\x90\xd9\x47\xc6\xb3\xa9\xdf\xd9\x5c\x27\xb2\xa3\x59\xa7\xf5\x3b\xf7\xb5\x8d\xfe\xc5\x4b\x0d\xd1\xca\xed\xe1\xa3\x0a\x87\x69\xce\xe7\x78\x73\x61\x28\x82\xdb\xec\x43\x20\xb3\xef\x5d\x48\xec\xd0\xbd\x1a\x8d\xee\x0d\x8d\x5c\xfb\xa9\x45\xdd\xe2\x03\x74\xc7\xf9\x78\x05\x64\xbc\xd6\xaf\xd1\x7b\xee\x7c\x53\x62\xc3\x50\xe4\x1f\xcd\xbe\xdd\xce\xd0\xff\x84\x09\x32\xfb\x9e\xac\x64\xcc\x48\xb7\xbd\x96\x1b\x0f\x16\x6f\xfb\x14\x15\xe2\x78\xc9\xb0\x9d\x9f\x51\x28\x53\xcd\x2e\x71\x66\x9e\xa1\x50\xeb\x2c\x86\x22\xb8\xcd\x3e\x04\x32\xfb\x94\x7f\x5f\xe2\xf7\x38\x56\x33\x1d\xfb\xbe\x30\x39\xf4\x5c\x20\xcf\xb7\xc3\x8e\x79\xaf\xda\xd6\x0e\x69\x35\x73\x5a\x88\x3e\x69\x61\xc1\x50\x04\xb7\xd9\x87\x40\x66\xdf\x13\xad\xcf\xb4\xac\xcc\x3a\xcc\xf9\xe4\xee\x66\x49\xd7\x5d\x67\x12\xd7\x6e\xa4\xa8\x64\x45\xbd\x62\x89\xae\x4b\x1e\xf8\x68\x7b\x0a\x43\x11\xdc\x66\x1f\x02\x99\x7d\xb7\x42\x62\x5c\x8a\xcf\x60\x6c\x32\x26\x6c\x4a\x8e\x1d\x9c\x34\x82\xdf\x6b\x25\x4c\xa2\x35\x45\x4b\x5f\x0b\xd0\xbd\x4d\xa7\x94\xc7\x50\x04\xb7\xd9\x87\x40\x66\xdf\x91\x59\x7b\xce\x94\x0e\xd9\x70\x51\x91\x74\xe5\x73\x24\xad\xae\xcc\xe2\x3b\x67\xb9\x0c\x82\xdd\xcb\x79\x29\x0d\xe2\x9e\xad\xb8\x62\x28\x82\xdb\xec\x43\x20\xb3\x2f\x46\x4f\x27\xb7\xe6\xc1\xfc\x5e\xa5\x3c\xea\xdc\x78\x6a\xf2\x8f\xc1\x1d\xe7\x27\xdf\x6c\x47\x5f\x1a\x93\xf4\xa6\x08\x74\xde\x22\x3c\x2b\xdc\x66\x1f\x02\x99\x7d\x29\x01\xdc\x7a\x05\xaf\x4c\xbc\xeb\x1a\x37\xf6\x02\xaf\xa1\xfb\x57\x3c\x97\xdb\xbe\xf7\xb9\xbe\x8b\x4e\xf8\x92\xbb\x6d\x31\x4b\x18\x1f\x70\x9b\x7d\x08\x64\xf6\xc5\x7f\xef\xb1\x21\x61\xaa\x54\xe1\xcc\xab\x58\xb7\x3d\x18\x6d\xba\x28\x9e\x7d\x92\x2a\xca\xfe\xb5\x43\xa4\xd3\xf2\xc0\xed\x40\x7d\x0c\x45\xfe\xd1\xec\x5b\x9c\xa3\xe9\x49\x09\x3b\x92\x20\x98\x76\xa5\x65\xb3\x31\xdc\x88\xc3\x8f\xdf\x4c\x24\x9d\x97\x78\x74\x45\xf2\x81\xf3\xad\x62\x3d\xe8\xb2\x0f\xa9\xb8\x36\x7e\x75\xe0\x6d\xb0\x65\x87\xd6\xd7\xdf\x7c\xc7\x1f\x7f\xa8\xb9\x30\xf4\x8c\xc6\x54\xb1\x29\x4b\x4d\xda\xe4\xfb\x6f\x87\xbf\x4a\xb3\x0d\xde\x3b\xeb\xdd\xf1\xdf\xb7\xec\xe2\x33\xd0\xbc\x7d\xfd\xcd\xdc\xce\xf8\xf8\x81\x45\x1f\xba\x8c\xac\xca\xc5\xbb\x4b\x1b\xdf\xff\x2a\xb5\x29\x1b\xcc\x40\x9b\xb3\x6f\x63\x05\xd8\xf1\xf8\x9d\xb7\xe5\x41\x7a\xea\x3f\x43\x77\x18\x56\xf3\x59\xb8\xf5\x4b\x28\x98\xff\x7e\x5d\xef\x45\x5c\x9d\x62\xe5\x23\x57\xdb\x18\x79\xf7\x04\x52\x19\x97\xb7\x23\x16\x59\xcd\x2a\xfc\x45\xa2\xe7\xe7\x97\x9d\x1e\x74\xb0\x8a\xfc\x55\x2a\x33\xfa\xfa\xe6\x10\x46\xff\x48\x35\x92\x69\xa8\xf1\xf2\x19\x72\x07\xce\x81\xa1\x3e\xa1\x5a\xe9\x5b\x8f\xee\x8d\x6c\x90\x7f\x95\xfd\xab\xd4\xa0\xee\xfa\xd8\xde\x71\xc3\x47\x46\x0a\xbf\x49\xca\x1c\x0d\xda\xb3\xb2\xac\xb8\xe8\xd3\xb7\x6a\x2e\xa7\x79\xd6\xd3\x66\x1c\xbc\xf8\x57\xe9\xc8\x6f\xab\x82\xb1\x45\x56\x3b\x77\xbf\x1f\xee\x7a\xb4\x27\x79\x42\x68\x0f\x3a\xa1\xee\x27\x97\xa2\xe6\x34\xac\xed\xfc\xb2\x5a\xfe\x2a\x7d\x56\xc8\xe0\xde\xdc\x87\x6c\x90\xc4\x8a\x3c\x9f\xbe\x7d\x51\x4c\x34\x59\x02\x79\xf5\xa0\x70\x55\xd7\x94\xfe\xf6\x80\x7a\x88\xd2\xff\x2e\xfb\x76\x7b\xaa\x7f\x56\x34\xc8\xec\x3b\x21\x58\xf1\xc2\x2f\x86\x5c\x2e\xfc\xca\x59\x79\xed\x3a\x0e\x0a\x29\x29\x31\xd9\x52\x1b\x7b\x47\xcb\x8a\x33\xc7\x7b\xe4\x79\x19\x31\x14\xc1\x6d\xf6\x21\x90\xd9\xa7\xc1\xff\xe0\x5b\x74\xdf\x25\xcf\xa3\x26\xce\x9b\x8d\x5e\xd5\x0c\xa3\x3d\x5c\x8d\xce\x4b\x9f\x04\x3b\xcf\xd1\x9f\x4b\xf7\x7d\x23\x88\xa1\x08\x6e\xb3\x0f\x81\xcc\x3e\xd3\x3b\x2a\xb7\x6e\x53\xdb\x45\x5b\x7e\xdf\x7a\x7e\xc2\x50\xa7\x6e\x51\x56\xc3\xf5\xe5\x72\x78\x30\xe5\xa4\x75\x6a\xff\x7f\x3d\x0c\x18\x8a\xe0\x36\xfb\x10\xc8\xec\xc3\x9c\x7a\x63\x3f\x98\xfd\x28\x58\x3c\xe9\xc1\x30\x29\x8f\xdc\x24\xb1\x0c\x89\x35\xb5\xd2\xa9\x3f\xfc\x2b\xe3\x97\xd2\xe2\x9a\x26\x86\x22\xb8\xcd\x3e\x04\x32\xfb\x7c\x96\x6c\x2f\xdc\xe0\xb2\xe0\x14\x4c\x61\xca\xf4\xb9\xca\xd5\x7a\x43\x9f\xe8\x4c\xc7\xf9\x2d\x61\x16\x5f\x27\x4b\x46\x2a\x37\xc2\xaa\x89\xdb\xec\x43\x20\xb3\x8f\x63\x84\x58\x95\x27\x87\x4a\xf0\xee\xec\x73\xf1\xc9\x65\x3d\x6a\x09\xc6\x91\x6d\x5a\x09\x34\xc6\xa3\x67\xd2\x85\x25\xb0\x92\xf0\x7d\xe0\x36\xfb\x10\xc8\xec\x73\x7a\x40\xd9\x7a\xed\xfd\xc6\x76\xd0\xa7\xf2\xfe\x23\x33\xa1\x35\xe6\x6e\xf7\x26\xa8\x2f\x27\xf5\xe8\x3c\x64\xea\xf6\x89\x7e\x2a\x8d\xa1\x08\x6e\xb3\x0f\x81\xcc\x3e\x4b\x81\x02\x62\xff\x63\xad\x9f\xef\x75\x5e\x2a\x09\xca\x1d\xfe\x28\xa4\x72\x9d\xb6\x1c\x34\x71\xc9\x5b\xb3\xd5\x7b\x94\xd2\x9e\xc0\x50\xe4\x1f\xcd\xbe\xdd\xd6\x9d\x3f\x61\x82\xcc\x3e\xb9\xd1\xaa\x23\x05\xf3\x47\x82\x7c\x7e\x7c\x4e\x65\xd9\x99\x31\x9f\x39\x36\x60\x39\xa7\xb3\x58\xed\xae\x7e\x52\xad\x27\x80\x6f\x3f\x86\x22\xb8\xcd\x3e\x04\x32\xfb\xca\x72\xae\x74\x46\x1d\x3b\x7f\xd7\x0d\x91\x3f\x75\xfd\xd5\x99\xac\x2f\x49\x25\x9c\x82\xb9\xb3\xe7\xe3\x2b\x7f\x51\xfe\x6a\xa3\x3a\x80\xa1\x08\x6e\xb3\x0f\x81\xcc\xbe\x19\x8b\x08\xaa\xf4\x95\xda\x6f\x0e\xf7\xc7\xc3\x3e\x93\xc8\x5b\xfd\x98\x8e\xda\x73\xf5\x88\xa4\x69\x57\x3a\x1f\x6f\xe2\x2f\x2f\x53\x0c\x45\x70\x9b\x7d\x08\x64\xf6\x65\x06\xf9\x5f\x38\x71\x7d\xf3\xa7\x2a\xf1\x58\x41\xe3\x60\x2a\xab\xf0\xdd\xa4\x40\x46\x4f\x96\x6b\xd5\xaf\xd7\x5c\xfb\x92\xef\x10\x5a\x29\xdc\x66\x1f\x02\x99\x7d\x4f\xc3\x7b\xc2\xc5\x4f\xfc\xac\x0c\xaa\xf9\xf4\x2b\x9a\x3a\x80\x6c\xcf\x37\xc3\x30\xb3\xdf\x73\x34\xd9\xd4\x1d\xea\x77\x13\x78\xf7\x60\x28\x82\xdb\xec\x43\x20\xb3\x4f\xa0\xdb\x48\xa6\x66\x49\xe3\xe2\xd5\x11\x09\xb7\x0f\x0d\x77\xda\xdd\x79\x68\x3f\xdc\xd5\x71\xbc\x41\xb4\x7c\xa8\xe6\xc6\x94\xe4\x3e\x0c\x45\x70\x9b\x7d\x08\x64\xf6\xb9\x38\xb3\xe9\xc9\x7a\xee\xec\x5d\xf4\x7c\xd9\xbe\x8f\x76\x9e\xf4\xa1\xad\x62\x97\xad\x89\x42\x90\x43\x75\xf3\x50\x1e\xd1\x45\x45\x0c\x45\x70\x9b\x7d\x08\x64\xf6\xa9\x2e\x57\x95\x13\x23\x9f\x22\x64\x1e\x7f\xb1\xea\xfb\xf5\xa5\xf1\xba\x7f\x11\x20\x29\x7e\x76\xca\x3f\xaa\xdb\x70\x44\x2d\x56\x07\x43\x91\x7f\x34\xfb\x76\xdb\x99\xff\x84\x09\x32\xfb\xf6\x02\xdd\xbb\x3f\x19\xaa\xa2\xa7\x32\x5f\xcf\x3c\x2e\x7e\xce\x75\xb5\xa0\x8f\x3e\xdf\x44\xc0\x55\x93\xfc\x4c\x69\xfd\xb5\x52\x33\x0c\x45\x70\x9b\x7d\x08\x64\xf6\x21\x07\x5a\x12\x79\x39\x7b\x18\xd0\xb3\x09\x94\xcc\xdd\xa2\x26\xb9\xb3\x15\x48\x40\x9f\x3c\x53\x83\xf7\x63\xeb\xe1\xd9\x49\x14\x43\x11\xdc\x66\x1f\x02\x99\x7d\x65\x53\xaa\xc6\x6d\xe5\x31\x47\xf3\xd3\xe7\xd8\xee\x7c\x22\x71\x79\xee\xaa\x35\xff\xfe\x8a\x8e\xb1\x11\xd5\xe9\xd8\x23\xba\xe1\xe4\x18\x8a\xe0\x36\xfb\x10\xc8\xec\xb3\x1b\x8b\x51\xb8\x6a\x27\x74\x9b\x52\xe4\xb5\xe2\xf7\x84\xda\x28\xae\x15\xe7\xb3\xfb\x28\x07\xb6\xd1\x8f\x56\x3c\x52\xef\x15\x85\x30\x14\xc1\x6d\xf6\x21\x90\xd9\x87\xd8\xeb\x38\xcc\x8d\x4f\xbc\x28\x9e\x8f\xdd\x3b\xd2\x7b\x8e\xe3\x09\xe3\xc1\x6a\x7b\x47\x2b\x2a\xcd\xc0\x3d\x57\x0d\x5f\xe4\x1d\xc6\x50\x04\xb7\xd9\x87\x40\x66\x5f\x1c\xd9\xef\xf7\xd8\x04\xe9\xe5\x8d\x1c\x75\xdf\x96\x63\x02\xdf\x86\xe2\x62\xdb\xaf\x16\xf6\xf6\xca\x75\x90\x54\xf9\xea\x56\x10\x7e\xe8\xb8\xcd\x3e\x04\x32\xfb\x2e\xcb\x3a\xf1\x5e\xb4\x27\xa9\x4a\xd7\xe6\x3f\x2a\xd1\x3f\xf4\xc3\x22\x73\x6f\xf7\x07\xdf\xdb\xfd\xca\xc7\x77\x94\x1d\xf6\x66\xc8\x60\x28\x82\xdb\xec\x43\x20\xb3\xaf\x98\x65\x8f\x5a\xaa\x56\x77\x2f\xaf\x42\xbb\xfc\x99\x62\xc4\xf7\xd3\x79\x3a\x33\x01\xf7\x8d\x35\xe7\x7b\xdc\x64\xfe\x16\x6a\xee\x18\x8a\xfc\xa3\xd9\xb7\x5b\xef\xfa\x27\x4c\x90\xd9\x47\x42\x9d\xe9\x13\x5a\x68\xa9\x62\x38\x8e\x39\x3d\xf7\x74\x98\xab\xf5\x7f\xd4\x86\x68\x2a\x91\x28\x34\xb2\xbe\x8d\x48\xff\x75\x04\x43\x11\xdc\x66\x1f\x02\x99\x7d\xba\x8d\xb7\x79\x8a\x1e\x27\x5e\xbb\x6a\x7d\x30\x91\xf6\x09\x7b\xc9\xb7\x9b\xa7\xbb\xb7\xc6\x9c\x24\x40\x9d\x89\xe3\x9c\xed\x37\x6a\x0c\x45\x70\x9b\x7d\x08\x64\xf6\xe9\xf4\x0c\x66\x36\xb2\x9e\xe3\xf4\x62\x3b\x23\x7f\x2c\xb7\xe3\x20\xfb\x07\x41\xf0\xa1\xfc\xe6\x59\xa1\xe2\x43\x09\x71\xbc\x43\x6c\x18\x8a\xe0\x36\xfb\x10\xc8\xec\xb3\x56\xfb\xaa\xf9\x5c\xc9\x38\xf5\x4b\xec\x7a\x48\xb0\xf8\xd3\x60\x7e\xac\x29\xe3\x73\x6c\xd3\x96\x29\x52\x5d\x94\x2c\x26\x4c\x83\xa1\x08\x6e\xb3\x0f\x81\xcc\x3e\xf1\x0b\xe9\xf6\x4b\xed\xbc\xc7\x10\x93\xd9\xed\x15\x64\x42\x84\xe2\x77\xbc\xc0\x65\x91\x05\xaf\xdc\xde\x6f\xf7\x8e\xce\x76\x1e\xc2\x50\x04\xb7\xd9\x87\x40\x66\x5f\x46\x6a\xd7\xd1\x08\x44\x03\x9d\x5e\xb3\x7c\xdc\x7d\x15\xd1\x64\x79\xa9\xfb\xa9\xc3\xed\x64\xf8\xfd\xb3\xcd\xa3\x43\xd2\x71\x84\xa1\x12\xb7\xd9\x87\x40\x66\x1f\x40\x7e\x46\x93\x59\x38\xd6\x7b\x6d\x9d\x9d\x54\xcf\x4b\xd0\x1d\xea\x2c\xd8\x39\x33\x9f\x7d\xb7\x74\xd6\x77\x46\xbc\x85\x9b\xb0\x28\xe0\x36\xfb\x10\xc8\xec\xd3\xcc\x31\x7a\x90\x51\x5d\x51\x26\x4c\x9e\xfa\x9b\x36\x17\x0d\xce\xf0\x8f\xa5\x28\x2f\xb8\xf8\x95\x9c\x4d\x69\x66\x98\x49\xca\x0b\x43\x91\x7f\x34\xfb\x76\x9b\xee\xfe\x84\x09\x32\xfb\xc4\xa8\x6e\x84\x66\x6f\xeb\x1f\x5a\xa6\x2c\x6e\x88\xaf\x4f\xfa\xbd\xdf\xb6\x47\xe1\xd6\x16\x1a\x5f\x18\x25\x68\xb2\xef\xc5\x43\xc2\x96\x8f\xdb\xec\x43\x20\xb3\xcf\xd2\xaa\xc3\xe0\x2c\x45\xf4\x7f\x5f\x52\xa4\xbf\x51\x35\xed\x2f\x1a\x7d\x8d\xd8\xea\x6e\x98\x56\x9e\x79\xeb\xd6\x9d\x3f\x1b\x49\x98\xd6\x71\x9b\x7d\x08\x64\xf6\xbd\x36\x28\xe4\xd2\x38\xae\x9a\x96\x57\xba\x3f\xb7\xdd\xa6\x0e\x93\xb2\x90\xbd\x54\xd4\x22\x95\xa5\x6f\x76\x57\x80\x51\xeb\x1c\x61\xcb\xc7\x6d\xf6\x21\x90\xd9\xa7\x2e\xc1\x5f\x20\xda\x5f\xd2\x32\xa3\x43\xcf\xbc\x6d\x62\xef\x56\x96\x58\x8d\x3c\xc8\x0e\x94\xde\x9c\x08\x9d\x25\x06\x22\xca\x18\x8a\xe0\x36\xfb\x10\xc8\xec\x73\xf8\x0d\xd6\xdc\xeb\x66\xd2\x14\xf5\x18\x7a\xfe\x4b\x54\xb2\x65\xe5\x7e\x71\x2c\xc6\x65\x4c\xe5\xd5\xf3\xb5\xaf\xa7\x18\xf9\x4e\x63\x28\x82\xdb\xec\x43\x20\xb3\xaf\xaa\x54\x4e\x99\xa9\xfa\x93\xc9\xb2\x5d\xe5\x8e\xd8\x75\x46\x9f\xd7\xd7\x39\x12\x3a\x68\x5b\x52\xd4\xae\x2d\x78\x50\x5f\x78\x4e\xd8\x35\x70\x9b\x7d\x08\x64\xf6\xb1\xef\x53\xd0\x91\xe4\xd8\x18\x1c\xbd\x9f\x79\x90\xb5\xb7\x20\xc4\xf6\x38\xfb\x7c\x6f\x93\x84\xe5\x9d\xe2\x23\xe5\xd5\x61\x8f\x0f\x62\x28\x82\xdb\xec\x43\x20\xb3\x6f\xe9\x8d\xed\xd3\xab\xdc\x58\xa4\xe5\xf5\x49\xfb\xe9\xfd\x21\xf4\xf1\xd1\xc1\x3f\xa3\x77\xee\x17\x2f\x5c\xd0\x5c\x3e\x3c\xc5\xcc\x84\xa1\xc8\x3f\x9a\x7d\xbb\x9d\x7f\xfc\x09\x13\x64\xf6\x71\xb7\xfa\x0b\x7c\x4c\x02\xc5\xa1\x8f\xbc\xc5\x93\xf7\xf2\xe8\x37\x92\x9c\xcb\xab\x27\x76\xe1\x24\x3e\x19\xf2\xf0\xd5\xcd\xf7\x64\x18\x8a\xe0\x36\xfb\x10\xc8\xec\x6b\xa5\x3d\xb2\x2d\x56\xf3\xf5\xf9\x8f\x12\xab\x7b\x17\x38\xd7\x8a\x12\x3a\x63\x3b\x79\x03\x39\xec\xd9\x1a\xbb\xcc\x89\x0c\x0a\x1c\x30\x14\xc1\x6d\xf6\x21\x90\xd9\x77\x95\xcc\xe7\x13\xdb\xcb\xcb\x76\x81\xaa\x15\x51\x8a\x05\x94\xb3\xee\x67\xe3\x93\xdb\x4f\x97\x31\x9c\x3d\x62\x47\xcc\xc0\xc0\xc9\x8c\xa1\x08\x6e\xb3\x0f\x81\xcc\xbe\x1b\x2e\x34\x3f\x8d\x75\xdf\xbf\x29\x3a\xcf\x5b\xf7\x3a\x46\x54\xc5\x74\x2b\xf5\x98\xec\x81\xda\x23\xd3\xd2\xbe\xe5\x79\xab\xb7\x2d\x31\x14\xc1\x6d\xf6\x21\x90\xd9\xe7\x7c\x89\x3c\x33\x06\x30\xa4\x9e\x29\x5b\x2b\xf3\xba\x46\x5b\xfd\x30\x99\xfd\x23\xf8\x61\xf9\xdd\x9d\xdb\x4d\x22\xfe\xf8\x5d\xc2\x7c\x89\xdb\xec\x43\x20\xb3\xcf\x42\x7f\xf0\x6c\x57\x40\x5a\x4f\x42\x56\x69\xf5\x87\x9f\x9b\x19\x2a\xd5\xc2\x27\xb4\x9c\xa6\x26\xd8\xc6\x1f\x3b\x34\x0b\x04\x4b\x61\x28\x82\xdb\xec\x43\x20\xb3\x8f\x97\x2b\x35\x9b\x64\x9e\x61\x73\xe6\x8e\x0a\x26\x6b\xcc\x1f\xf8\x2c\x63\x92\xea\x15\xf7\x62\x58\xe2\xec\xba\x27\x47\xda\x2c\x31\x86\x22\xb8\xcd\x3e\x04\x32\xfb\xa4\x82\x2d\xef\x34\x6e\x90\x14\x98\x1f\x7b\xc7\xee\xc3\xb8\x87\x84\xf7\x02\x83\x8b\xa7\xc6\x39\x5b\x43\xc6\x73\xed\x9c\xaf\xae\x3b\x63\x28\xf2\x8f\x66\xdf\x6e\x27\x84\x7f\xc2\x04\x99\x7d\x82\x4f\x24\xe8\xa8\xe8\x24\x29\x2e\x87\xf9\x35\x28\x6f\x3d\x12\xfd\x75\x9f\x8c\x94\x8d\xd7\x63\x32\xf9\xbe\x87\xd4\x78\x62\xbc\x1e\x86\x22\xb8\xcd\x3e\x04\x32\xfb\x3c\xa3\x97\x92\x7f\xf8\x68\xf4\x56\xce\x5e\x5d\x0d\xe5\x49\xbc\xac\xea\xf3\xa2\x16\x91\xfb\xa5\xd9\xb4\x70\xe0\xe9\xf9\x1e\x6f\x46\x0c\x45\x70\x9b\x7d\x08\x64\xf6\x3d\xa1\x0e\x6e\x20\x39\x92\x97\xdb\x7d\x63\x6a\x67\x3c\xa1\xfb\x5a\xd0\xad\xa6\x2d\xee\x2b\x25\x3b\xaa\xf4\x1d\x0c\x03\x6a\x13\x6a\x18\x8a\xe0\x36\xfb\x10\xc8\xec\x6b\xa7\x9b\x3e\x1e\x69\x85\x31\x67\xe8\x7e\xb8\xb1\x3d\xeb\xc9\xa0\x18\x40\x1a\xa3\xe5\x61\x79\xbe\x84\x6b\x8e\x4c\xdf\xf1\x24\xe1\x6f\xe0\x36\xfb\x10\xc8\xec\xfb\xb2\xbc\xd8\xa1\xf3\x2c\xea\x63\x66\xfa\x9c\x5e\xb1\x47\xf1\x04\xfa\xe9\x95\x71\x80\xc9\x99\x98\x2a\x92\x7b\x85\xdc\x5a\x3e\x6e\x18\x8a\xe0\x36\xfb\x10\xc8\xec\x8b\x71\x6c\xa6\x6f\x67\x40\x99\xfa\xe9\xa9\xf4\x34\x0e\x1f\xab\x72\x9a\x29\x90\x1a\x0e\x0b\xe5\x63\xa8\x60\xb8\x78\x4b\xe5\x22\x1f\x86\x22\xb8\xcd\x3e\x04\x32\xfb\x2c\x8d\x2f\xfa\x6e\x95\x53\x7e\x15\x37\xb6\x55\x8b\xbe\x1d\xd6\x66\xcc\x68\x31\xd0\xfc\xcb\x45\xb9\x50\xaf\xcf\xf2\x77\x87\x38\xe1\x3b\xc7\x6d\xf6\x21\x90\xd9\x67\xb1\x54\x92\x18\x32\xa1\xae\xd4\x17\x77\x6e\xba\xf9\x9e\x75\x98\xa6\x42\xd2\xfe\x1f\x7c\x25\xe3\x43\xb9\x7c\x0b\x4e\xf7\xb9\x11\x0c\x45\xfe\xd1\xec\xdb\xed\x0c\xfd\x4f\x98\x20\xb3\x8f\xfb\xf0\x95\x25\xe6\xb0\xa7\xf9\x2a\x6a\xde\xc3\xe6\x1a\xe2\xd3\x32\x09\x1f\x62\x74\x0c\x13\x38\xbd\xed\x2b\x1e\x2d\x1a\x19\x1d\xc7\x50\x04\xb7\xd9\x87\x40\x66\x5f\xc4\x60\x50\x0e\x5a\x24\x48\x99\x52\x55\xa3\x6b\x72\x78\x61\xa9\xce\x2a\x3c\x98\x25\x43\xc6\x48\xac\x20\xec\xb2\x15\x67\x06\xe1\x47\x88\xdb\xec\x43\x20\xb3\xaf\x20\x53\x74\x9c\x33\x91\x8e\x21\x5b\x98\x9c\xf6\x98\xdb\xd7\xc1\x33\x4c\xaf\xb6\xdc\x92\x18\x63\xa4\x8a\x59\x0f\x24\x56\x0b\x13\x5a\x17\xdc\x66\x1f\x02\x99\x7d\x47\x2e\x5b\xc5\x21\xc1\x7b\x89\xc5\xcb\xf7\x2f\x25\xcc\x74\x5e\x60\x6c\xba\x53\xb2\x4f\xe3\xe2\xa8\xc5\x58\x6a\xf2\xea\xba\x31\x61\x87\xc5\x6d\xf6\x21\x90\xd9\x97\x34\xd3\xb8\xde\xe5\x2c\xd5\x8b\x91\x98\x81\xf7\xf3\x1f\xd9\x27\xde\x51\xd1\xde\x62\x78\xd8\xdc\x70\xf2\xd6\xde\x52\xa1\x01\x80\xa1\x08\x6e\xb3\x0f\x81\xcc\xbe\xe2\x0d\x51\xdd\x5e\x0d\x1f\x23\x8b\xba\xe1\x38\x2d\xc5\x8d\x6d\x2f\xab\x10\x81\x20\x91\xd7\xd2\x8c\xda\x9a\x13\xc1\x51\x29\xc2\x18\x8a\xe0\x36\xfb\x10\xc8\xec\x8b\x91\x3d\xfa\x30\x92\xd4\xbe\xad\xd0\x30\xe6\xf5\x2d\x3d\x91\xb7\x43\x56\xbd\x94\xa2\xab\xa6\x96\x25\x3a\x97\xaf\x95\x85\xe8\x91\x62\x28\x82\xdb\xec\x43\x20\xb3\xcf\x31\x5c\x4e\x5c\xa3\x9f\xbb\x6f\x39\xc9\xb6\xa4\xb2\x26\x2c\xa1\xb9\xfa\x1a\xb7\xe0\xf9\xf0\x23\xd3\x03\x3d\xcf\x3f\x6b\x2e\x1b\x60\x28\xf2\x8f\x66\x9f\xb9\x58\x8f\xb0\xbb\xd4\x17\xa2\x2a\x13\xd3\x3b\x8e\x0c\xf7\xf3\x4f\x0f\xa7\x94\xc7\xff\x72\x1f\x65\xc9\x8b\x1e\x9a\x8b\xbd\xe0\x0c\x5d\xf6\x45\x3c\xa3\x4a\x9e\xd4\xaf\xd3\xc9\x0a\x26\xf6\xfc\xd9\x14\x33\xb6\x3c\x24\x21\x12\xc3\x6e\x3e\x49\x4e\x27\x3b\xa3\x93\x61\x53\xf4\x57\x29\x4b\xb7\x2c\x29\xfb\x3a\x7d\x77\x0a\x15\x47\x31\x8f\xbc\x49\x5f\x81\x9d\xc1\xbb\x1c\x9b\x9e\x92\x7b\xd2\xc1\x8e\x1e\x37\xde\xe8\xfc\x55\xfa\xf9\xa0\xd4\x97\xef\xd6\x41\x53\x56\xe7\xba\x02\xb5\x7f\x07\x06\xa7\x6a\x70\x39\x5e\xd6\x4e\x6d\x30\x79\x7b\x79\xd4\x80\x5c\x3e\xf5\xaf\x52\x43\xdf\x97\xf3\x19\x85\xde\x33\x65\xcf\xac\xcb\x63\x74\xe2\xde\x08\x9d\x7a\xd1\xc0\x47\xc7\x7b\xf4\xc5\xda\x61\x2d\xa2\x57\xd2\x37\xff\xbe\xec\xa3\x6e\x05\xc8\x3c\x6f\x78\x50\x36\xc7\xad\xe3\xcf\xe2\xba\xb2\xb6\x27\x56\x1d\xbb\x9e\x2e\xcc\x7f\xab\x18\x31\x0e\x6c\xb7\xfd\xfb\xbf\x93\xd2\x7b\x99\xb4\xea\x55\x50\xe9\x35\x85\xbe\x2b\x5e\x4e\x1a\x54\xd1\x65\xe9\xa3\xbf\x52\x11\x96\xfb\x80\x25\xdf\xbd\x4e\x56\xec\xaf\xd2\x0f\x6c\x8c\xcc\x87\x28\xed\xff\x0b\x2d\x7a\xd5\x08\xe8\x5c\x9f\xdf\x79\x7a\xb2\x83\xd9\xcb\xd2\xdd\xe5\xc2\x7f\xd3\xed\xed\x63\x9d\x7f\x95\x56\x87\xde\xb8\xa9\x56\xc8\xca\x63\x31\x39\xec\x74\xbc\x54\x30\xb2\xa3\x9d\x8a\x38\x4a\xd4\x64\x2c\xcb\x9e\x55\x21\xea\x7e\x93\xe7\xff\x2e\xfb\x76\x7b\xaa\x7f\x56\x34\xc8\xec\x5b\x6e\xd5\xba\xd8\x7d\xfb\xa8\xbe\x8d\x54\xfc\xda\x74\xda\xa8\x71\xf4\x31\xaf\x98\x00\xc7\x76\xc9\x85\x5b\xb5\x2f\xbe\x1f\x6a\x21\xc2\x50\x04\xb7\xd9\x87\x40\x66\xdf\xf3\xaf\x4f\xbe\x4b\xf4\x4b\xfb\x3e\xd3\x08\x8d\xf0\xb7\x8a\x48\xeb\x1e\x4a\x0c\xf7\x1f\xd5\x3f\xb9\xe0\x31\x1e\x7d\x64\xf4\x1e\x61\x38\xc6\x6d\xf6\x21\x90\xd9\xf7\x63\x05\xb5\x76\x78\x64\x77\x78\x4f\xfb\x35\x92\xfa\x71\x8a\x79\x55\xfb\x3d\x58\xb8\x53\xa2\xd2\x36\xf5\x3b\x19\xea\x97\x4f\x14\x31\x14\xc1\x6d\xf6\x21\x90\xd9\xa7\xe1\x29\x5e\xfb\x72\xde\x9d\x21\xe6\x50\xad\x5a\x89\x66\x38\x1f\xf7\x67\x03\x92\xa2\xe3\xbc\x79\xc2\xcf\xb5\xc9\x7c\xaf\x6e\x72\x63\x28\x82\xdb\xec\x43\x20\xb3\xef\xea\xb1\x27\x4f\x6d\x12\x4c\xc3\xe8\xcf\x79\x4a\xd6\x1d\xa6\x2d\xcb\x32\x3c\x13\xdf\x3f\xf7\x76\xd9\xba\xe1\xf4\xc6\xe7\x43\x9a\x28\x86\x22\xb8\xcd\x3e\x04\x32\xfb\xe4\x0b\x66\xc5\x2f\xb1\x7a\x7f\xcb\xc8\xf2\x3f\x51\x9e\xff\xb8\xaa\x43\xdd\x9e\xe5\xbc\x9e\xaf\xfb\x49\x26\x1a\x09\x8e\xd2\x42\x0e\x0c\x45\x70\x9b\x7d\x08\x64\xf6\xbd\xbb\x6b\x4f\x6d\x25\xb6\x7e\xa0\x5e\xf4\xc9\xe6\xa7\xa7\x1b\x92\x46\x31\xcb\x91\xd2\xc4\xa3\x72\x5f\x8d\x5b\xf2\x54\xb3\x6c\xec\x31\x14\xc1\x6d\xf6\x21\x90\xd9\xc7\xcc\xd9\x6b\xb4\x02\xae\xbc\x88\xba\xbc\x9f\xda\x9c\x22\x46\x64\xa6\xd8\xd3\xfe\xde\x23\x9b\x02\xc7\xe0\x1c\xd2\xb7\x5f\x85\x5d\x31\x14\xf9\x47\xb3\x6f\xb7\x75\xe7\x4f\x98\x20\xb3\x8f\x89\x86\xca\xd9\xe6\x09\xd3\xfa\x03\x7e\x2d\xd5\x79\xaa\xef\x06\xdd\xc2\x82\xc8\x72\xe6\xc7\xfe\x5c\xfe\xde\xd2\x0c\x7d\x76\x71\x0c\x45\x70\x9b\x7d\x08\x64\xf6\x45\xde\x5e\xbb\xfc\x7f\xac\xfd\x75\x58\x15\x61\xbb\xff\x81\x02\x43\x08\x12\x4a\x2f\x90\x0e\x41\x69\x11\x44\xba\xa4\xa4\xbb\x53\x1a\x14\x90\x92\x5c\xa0\x28\xdd\x48\x97\x48\x83\x82\x80\x20\x5d\x12\x0a\x82\x94\x4a\x2a\xd2\x29\xd2\x79\x2e\xf7\xbb\x17\x87\xdf\x70\xae\x33\xae\xd7\xfd\xff\xe7\xba\x67\x66\xcd\xf7\x99\x79\xe6\x99\x7b\xd6\x47\x76\xca\x87\xf9\x82\x2d\x21\x03\x89\xfe\xdb\xb9\xf8\xc7\xd3\x89\x51\x3c\xc5\xb6\x2a\x0b\x93\xe6\x87\xb5\x5a\xf8\x70\x18\x80\xb4\xb3\x0f\x00\x39\xfb\x2a\x0d\xaa\x5d\x67\xf9\x6a\x9e\x69\xd3\x14\x93\x58\xa6\xc7\xc9\xbe\x50\x93\x79\x25\x70\xd9\xd6\x43\xd7\x63\x5e\x66\x75\x13\xf6\xe7\xb6\x8a\xb4\xb3\x0f\x00\x39\xfb\xe2\xeb\x78\x13\xd7\x15\x8f\x3e\xc2\xba\x6c\x38\x66\x15\xd0\x3c\x0f\x0d\xb1\xdc\x95\x2e\x2f\xaf\x7c\x77\x95\x91\xc2\x76\x1f\xc5\x81\xc3\x00\xa4\x9d\x7d\x00\xc8\xd9\x57\x72\x7f\x2f\x53\x3d\xad\xa7\x2a\xb0\x9a\x7d\x62\xec\x50\x69\x49\xad\x6c\x01\x9b\xe6\x52\x0a\x1e\xad\xf3\x01\xb5\xad\x10\xeb\x9f\x80\x20\xed\xec\x03\x40\xce\xbe\x2f\x96\x2d\x6f\xbc\x15\x1b\xfa\xf4\x6c\x57\x5f\x13\x17\xde\x25\x09\xaf\x5f\xcd\x47\x51\x11\x18\x99\x37\x34\x6f\x54\x91\x92\x97\x82\xc3\x00\xa4\x9d\x7d\x00\xc8\xd9\x17\x32\x50\xcb\x44\x53\xcc\xb4\x84\xbb\x2f\xd3\xc8\xb7\xc1\xef\xd0\xae\xfd\xa8\x7b\xdd\x3f\x8d\xe7\x3b\xb1\xef\xb1\xaa\xf2\x7b\x3c\x38\x0c\x40\xda\xd9\x07\x80\x9c\x7d\xcc\x1d\x73\x93\x6b\x34\xc1\x9b\xd1\xd3\x07\xf4\xae\xd5\x7e\xcb\xef\xf4\x26\xd8\x22\x07\x6f\xe7\x32\xdc\x7a\x57\xd2\x4c\xe8\xe7\x04\x87\x01\xff\xa5\xb3\x0f\xea\xce\x8c\x18\x4c\x20\x67\xdf\xfb\x16\xf6\x24\x6b\x3b\x97\x0d\x12\xe1\x21\xbb\x88\x67\x58\x59\x59\x9f\x12\xe4\xe2\x52\x23\x62\x75\x29\xeb\x71\x49\x80\x02\x4e\x38\x0c\x40\xda\xd9\x07\x80\x9c\x7d\x0f\x2f\x38\x31\xb4\x4a\xd9\x91\x2f\x65\x4f\x7c\x7d\x29\x46\xdb\xfc\xea\x91\x1c\x5b\x99\xf7\xb0\x16\x7a\xb2\x17\x5e\x52\x68\x83\x19\x1c\x06\x20\xed\xec\x03\x40\xce\x3e\xc9\x0f\xd2\xa8\x37\xae\x78\x74\x05\xb9\x0b\xed\xcc\x75\x24\x10\xb6\xdb\xa4\xc8\xac\x27\x0e\xc0\x03\x72\x9f\x64\xbb\x29\x17\xfe\x99\xcf\x23\xed\xec\x03\xc0\xce\x3e\x52\x32\xf2\x92\x6c\xb3\x7d\x58\xfb\xdb\xdc\x7b\x21\xf1\x3e\x62\xb6\x54\x1c\xc4\xab\xe4\x59\xb1\x2d\xd5\x4a\xe1\x38\xa5\x77\xe0\x30\x00\x69\x67\x1f\x00\x72\xf6\xd9\x7f\x68\x36\x39\x10\x5e\x33\x99\xd9\x20\x10\xa5\x28\x8f\x67\x2e\xc3\x7f\xb0\xfc\x09\x63\x94\xf0\x64\x6c\xbe\xae\x3c\x5a\x44\x1b\x0e\x03\x90\x76\xf6\x01\x20\x67\x9f\x54\x75\x41\x36\xdb\x5d\x55\x2a\x63\x79\x96\x91\xfb\xbb\x46\xdc\x8d\x45\xa2\x94\x65\xf2\xfd\x71\xec\x34\xfa\x13\x02\x63\xce\x7f\x1e\xf8\x90\x76\xf6\x01\x20\x67\x9f\x59\x83\x30\xea\x57\xd5\x49\xe5\x63\xc7\xa8\xa7\x13\x4c\xf8\xec\xd7\x2f\xcc\xe9\xf5\x4b\x19\xfc\x3a\xd6\x68\xf4\x7d\x1c\x7f\x55\x16\x0e\x03\x90\x76\xf6\x01\x20\x67\x5f\x6e\xe1\xda\xc7\x01\x3a\xf8\x23\xc7\x3b\x8a\x78\xf1\xa8\x63\x34\x96\x3e\xf1\x23\x4a\x93\xac\xcd\xaf\xb1\xda\xee\x94\xbe\x22\xfe\x73\x87\xfd\x2f\x9d\x7d\x50\x73\x57\xc4\x60\x02\x39\xfb\x4c\xd2\x2f\xdb\xed\xca\x15\x64\xd6\x4f\xc6\xe1\xcd\x4f\x48\xac\x8a\xd0\x5a\x5e\xa8\x7d\x13\xca\x3b\x10\x50\xe5\xd0\xfb\x45\x92\x19\x0e\x03\x90\x76\xf6\x01\x20\x67\x5f\x26\xba\xed\x8a\xad\x4e\xd4\xbc\x56\xf4\xe1\x85\x5a\x63\xce\x42\x54\x71\xeb\x6e\xba\x59\xc9\x40\xd6\xcb\xa5\x5a\xf3\x56\xfe\xf6\x70\x18\x80\xb4\xb3\x0f\x00\x39\xfb\x84\xdd\xf5\x17\x25\x5b\xbe\xe8\xf4\xbc\x77\x23\xd1\x99\xe3\xb3\x97\xf3\xaf\xa2\x6f\xbc\x95\xbe\x2f\x7f\x1c\x0a\x7b\x65\x3f\x8b\x05\x87\x01\x48\x3b\xfb\x00\x90\xb3\x2f\xc4\xee\xaa\xf9\xc2\x46\xaf\x86\x6d\xed\x17\x0d\x89\x97\x0f\x3a\x36\x25\x12\xbf\xe2\xb6\xaf\x6f\x8c\x74\x97\xe1\x11\xb4\x52\x53\xc3\x61\x00\xd2\xce\x3e\x00\xe4\xec\xdb\xda\xbe\x62\xd1\xaf\x17\x75\xdb\x77\xa1\x98\x9e\x70\xf8\x38\x62\xe1\xdb\xcb\xef\xdd\x58\xb5\x47\xb7\x0b\x3a\x56\xb5\xd3\x59\x2c\xe1\x30\x00\x69\x67\x1f\x00\x72\xf6\x2d\x32\xe8\xd4\x5f\x8f\x7c\x93\x3a\xe3\x45\x3f\x9e\xeb\x6f\x83\x6d\xe8\xf6\x72\x3d\xa5\x55\xfb\xb7\x6c\x8c\x69\x69\x6b\xeb\x8a\x15\x1c\x06\x20\xed\xec\x03\x40\xce\x3e\xcf\xa0\x32\xd6\xc1\xf6\x87\x27\x16\x61\xba\xe9\x8f\x63\xaa\x7b\x9f\xdf\x24\xe8\x5e\x08\xa3\xbb\x3f\x7e\xe1\x65\x20\x26\x8e\xb7\x12\x1c\x06\x20\xed\xec\x03\x40\xce\xbe\xb8\x3a\xfa\xe6\x2a\xab\x8c\xa2\x95\xed\x61\x6d\xe6\x92\xab\x2a\xa5\x37\x1e\x52\xe8\x6e\xd5\x1e\xdb\x92\x7f\x70\xaa\xc4\xc1\xa4\x87\xc3\x80\xff\xd2\xd9\x07\xf5\x74\x87\x18\x4c\x20\x67\x9f\xe8\x7e\x24\x6e\xb0\x93\xe5\x00\xbf\x10\xd1\x43\x93\x34\x47\xda\xbb\x28\xdd\x5b\xd3\xa1\x27\x23\xd5\x7d\xf9\x99\x4a\xb9\xeb\xa2\x70\x18\x80\xb4\xb3\x0f\x00\x39\xfb\xda\xfc\x89\x42\x0f\xfb\x82\x73\xb7\x3f\x5c\xf3\xa1\xb6\x8e\x1f\xc1\x61\x17\xa6\x98\x10\xc6\x7c\x6d\x9c\x68\x6e\x55\x2e\x54\xff\x67\x30\x21\xed\xec\x03\x40\xce\x3e\x14\x6b\xe9\xd6\x01\x1f\x12\x65\xeb\x9b\x3b\x11\xd5\x6f\x7f\x6e\xd9\x97\xa3\xe8\xda\x7c\xf9\xb6\xba\xc5\x35\x1f\xb8\xb5\x7c\xc1\x08\x0e\x03\x90\x76\xf6\x01\x20\x67\x9f\xd9\xde\x04\x8c\x23\xee\xa6\xce\x06\xcf\x13\x9a\xcd\x6c\x95\x81\xa1\x0b\xb4\x3c\x45\x44\x36\x9e\xde\xf1\xd3\x1f\xf6\x8c\x12\x95\xe1\x30\x00\x69\x67\x1f\x00\x72\xf6\x51\xf2\x53\xe2\x8f\x3c\x09\x2a\xd2\x9a\x63\xa2\x1f\x87\x31\xf2\xbc\x11\x49\xf9\x5c\x6e\xfd\x32\x61\xaa\xa8\xe2\xae\x39\x57\xce\x7d\x38\x0c\x40\xda\xd9\x07\x80\x9c\x7d\x44\xbe\x9a\xfd\xab\x07\x3a\xe2\x94\xca\xb5\xfc\x97\x1d\x5e\x94\xdf\x59\xa4\x4b\x64\xff\xd9\x59\xa7\x71\x51\x9d\x16\x88\x13\x93\x87\xc3\x00\xa4\x9d\x7d\x00\xc8\xd9\xe7\x2f\xa2\x58\xed\xfc\xdd\xd5\xe8\x06\xaa\x83\xc3\xcf\x90\x1e\x81\x31\x1a\xeb\xe3\x3d\xf1\x7b\x9a\x49\xad\xf7\x51\xd3\x49\x5f\xe8\xc3\x61\x00\xd2\xce\x3e\x00\xe4\xec\x9b\x7e\xec\x67\xb8\x4a\x82\xc2\x54\xef\x5c\xc8\xd7\xc7\x76\xb3\x8a\x72\x4b\x57\xc7\xee\xad\xb1\xe7\x38\xba\x77\x5b\xe0\x4a\xc7\x9f\xe7\xe4\xff\xd2\xd9\x07\xb5\xfe\x81\x18\x4c\x20\x67\x5f\xdc\x87\x4f\x47\x73\x52\x14\x03\xc9\x77\x30\xb7\x66\xde\x61\x9e\x64\x7f\x3d\x84\x5f\xb4\xca\xf3\x38\x96\xca\x3f\x24\x9c\x7a\xff\x67\x9a\x87\xb4\xb3\x0f\x00\x39\xfb\xcc\xca\xc2\x5a\x5c\x08\xd2\x24\xb9\xed\x1c\x98\x33\xd4\xda\x09\xef\x19\xb4\x60\x0b\x91\xd7\xa0\x69\x9c\xfc\x0a\x99\xf3\x56\xa6\x85\xc3\x00\xa4\x9d\x7d\x00\xc8\xd9\xd7\xe1\x44\x2e\xe6\x5c\x40\x93\xb0\x4e\xc2\x51\x73\x29\xe3\x25\x4d\x86\x54\x82\x7b\xd5\xf8\xe5\x8d\xc3\x7b\x18\x5f\x6d\xdf\x45\xeb\xc2\x61\x00\xd2\xce\x3e\x00\xe4\xec\x0b\xd5\xed\x24\x4b\xa4\xd1\xd7\x95\x59\x6c\x91\x4f\xae\x68\x93\xe3\xf6\xc0\x27\x29\x05\x84\xd2\xdd\x2c\x5c\x85\x3e\x4a\x3f\x24\x82\xc3\x00\xa4\x9d\x7d\x00\xc8\xd9\xc7\x75\xbf\xe7\x89\x95\x58\xbc\xff\x7c\xd5\xbb\x56\x47\x99\xe3\x74\xb3\x14\xf1\x08\x8e\xe8\x80\xfe\x19\xf9\x4f\xa2\x2e\x82\x2f\x08\xe0\x30\x00\x69\x67\x1f\x00\x72\xf6\x0d\x77\xbc\x90\x7d\xe2\xd9\xf3\xfb\x05\x5d\xc1\x8f\x34\x41\x19\xff\xa0\x7c\x31\xb9\xa9\xf1\x63\x6e\x56\xb3\x4f\xce\x0f\xf9\x34\x51\xe0\x30\x00\x69\x67\x1f\x00\x72\xf6\xcd\xa8\x3c\xfe\x28\xa1\xf0\x7a\x90\xf1\xc0\x55\xfc\x68\x97\x95\x13\xb5\xe7\x0b\xdc\x9f\x6b\xb1\x38\x2f\x5e\xd1\xf4\xe6\xc9\xee\x0d\x38\x0c\x40\xda\xd9\x07\x80\x9c\x7d\xdb\x02\x2c\x1e\xb2\x5c\xdd\xa5\x49\xc7\x04\x4a\x89\x6f\x9c\xd8\x0b\xab\x9c\x6f\x74\xb2\xf4\x2a\x5e\xfd\x71\x83\x8e\x24\x3e\x9c\x02\x0e\x03\xfe\x4b\x67\x1f\xd4\x0a\x21\x62\x30\x81\x9c\x7d\x3a\x4e\x8f\x9e\x15\xe4\xfa\xb7\xe7\xcd\xb2\xa4\x7e\x5e\x5c\xb7\xde\x6b\x78\xea\x1d\xf2\x98\x6a\xc8\x5a\x70\xfd\xbe\x2f\xd3\xa6\x0c\x1c\x06\x20\xed\xec\x03\x40\xce\x3e\x4c\xcf\x48\x67\x87\xce\xc5\xae\xbb\x4c\x82\x2d\x62\x9f\x0d\x9a\x9b\x77\x12\x4a\xd0\x85\xdc\xe5\x17\xd0\x37\xbe\x60\x3e\xad\x30\x84\xc3\x00\xa4\x9d\x7d\x00\xc8\xd9\xd7\x47\x44\xd6\xf4\x22\xc7\x27\xbb\x68\x59\xf2\xb8\x8e\xa3\x50\x3d\x38\x62\xe8\xb0\x60\x9b\x78\xac\xe6\x67\xb0\x05\x23\xbd\x98\x16\x1c\x06\x20\xed\xec\x03\x40\xce\x3e\xf9\xdb\x81\x2f\xad\xa4\x82\x0b\x8a\x6a\x92\xe4\x6e\x06\x4d\xcc\xc0\x8b\x17\xb0\xa5\x9d\x4b\x31\xdd\x99\x05\x2d\x07\x39\x46\x2e\xc0\x61\x00\xd2\xce\x3e\x00\xe4\xec\x93\xeb\xc9\xc1\x7b\xfa\x58\x97\xb1\xd8\xe7\xad\xeb\xa7\x37\x22\xe6\x9b\x53\x9d\x2f\xd1\x03\x85\x2e\x60\xff\xae\xef\xec\x2c\xb8\xf8\x67\xc0\x22\xed\xec\x03\x40\xce\xbe\xc7\x93\xed\x3e\x68\xd2\xf2\x0f\x1a\xad\x31\x58\x87\x82\x00\x8a\xa5\x07\xae\x96\x44\xc7\x2c\x43\xb2\xc3\xda\x5f\x4f\x52\x6f\xeb\xc0\x61\x00\xd2\xce\x3e\x00\xe4\xec\xc3\x1e\xd4\x78\x1c\xcd\x86\xcd\x5b\xa4\xfa\xe4\x16\x56\x61\x98\x30\x3f\xd3\x4b\x6a\x3d\x26\xa2\x86\xf7\x41\xf8\x4b\x65\xf0\xc9\x3f\x33\x1e\xa4\x9d\x7d\x00\xc8\xd9\xc7\x9a\x6c\x65\xbf\x71\x70\x6f\x44\xb2\x7f\xa7\x5d\x36\x39\xe9\xae\xd1\xae\x33\xce\x97\x04\xfe\x8a\xf4\x15\x02\x42\x82\xa0\x4f\x7f\x66\x0a\xff\xa5\xb3\x0f\x6a\x0d\x1d\x31\x98\x40\xce\xbe\xc0\xb6\x87\x15\x44\x8a\xbd\xe9\x31\x12\xee\x9b\xfa\xb6\x8a\x1d\x8b\xa2\xb3\xb2\x11\xb2\x17\x97\xa9\x14\x6c\x32\xef\x99\xd5\xfd\x09\x21\xd2\xce\x3e\x00\xe4\xec\xc3\xe8\x8f\xe9\x0a\xe9\x44\x89\xbc\xcf\xb4\x16\xa7\xe3\x2a\xb9\xcd\x73\xd2\xff\x92\x8e\x70\x54\x47\xf5\x11\xe5\xb2\x1c\x6b\xf3\x9f\x07\x45\xa4\x9d\x7d\x00\xc8\xd9\x67\x53\x51\x42\xfe\xb6\x0e\x73\x98\x8e\x81\x63\x53\x50\x33\xe2\x68\xd3\x59\x27\xaf\x3a\xa4\x50\x2a\x43\xa7\xff\xbd\x00\x80\xf1\xe7\x38\x90\x76\xf6\x01\x20\x67\x9f\x66\x40\xb6\xf3\xbe\xa9\x8f\x69\x3c\x9b\x07\xe5\x88\xd9\x8f\xd1\x7a\x15\xb7\xdd\xec\x1e\xf1\x0f\xc3\x17\xc8\x08\x04\xab\xf1\x55\xe0\x30\x00\x69\x67\x1f\x00\x72\xf6\x1d\x2e\x1a\x3f\xf2\x10\x3a\xc2\x20\xd8\xab\x21\x75\x96\x21\xd6\xd8\xfc\x72\xd8\x3c\xa7\xae\xeb\x66\xba\x95\x5d\xc4\x50\x69\x0a\xc0\x61\x00\xd2\xce\x3e\x00\xe4\xec\x63\x7b\x78\x4d\x63\x06\x26\xc3\xa1\x2c\xe7\xb0\x9a\x4e\xc3\xfb\x61\xef\x76\x45\x01\x8a\x60\x98\xa3\x3f\xa3\xd1\x3b\xcf\x45\xbb\x3f\x21\x44\xda\xd9\x07\x80\x9c\x7d\xe2\x8b\xb7\xf7\x73\x27\x2a\xa2\xb4\xc5\xdb\x5c\x19\x4c\xd5\x5a\xe8\x59\xbc\xfb\x2c\x45\x9f\xf1\x57\x79\xf4\xac\x66\x50\x2c\x70\xc0\x61\x00\xd2\xce\x3e\x00\xe4\xec\x93\xd7\xe7\xae\xa9\x9f\xe4\xbb\xb5\x4c\x20\x76\x8c\x67\x39\xe8\x17\xc5\x51\x9e\xd4\xc7\x15\x3c\x73\x11\x9d\x73\xd9\x8f\x47\xf9\x1e\x1c\x06\xfc\x97\xce\xbe\xaf\x9d\xe9\x3f\xb8\x1b\xc7\x62\xe8\xda\xbe\x76\xc6\x12\x8f\xd8\x4e\x32\x5f\xef\x0d\xfc\xaa\xbe\x14\x50\x62\xe6\x7e\x78\xc5\xfe\x03\xe8\x65\x1f\xe5\xa7\xe8\x59\xd7\xfb\x63\x56\x11\x07\x7d\xb1\x72\xd6\x22\x27\xc3\x8f\x7d\x2c\x7b\x25\xdd\x99\x67\xbd\xd3\x27\x6f\xfe\xa0\xcf\x38\x83\x66\xc8\xd9\x60\x4c\xed\x3f\x24\xac\xe5\xe1\xf6\xb9\x25\xde\x5a\x45\x5d\x29\xfc\xf8\xd9\x93\xdb\x8e\x77\x42\x3d\x7e\x84\x7e\x37\xe0\x38\x2b\xe2\x7b\xc8\xdb\x46\xf1\xcb\xd4\x91\xbb\x3a\x27\x15\xbd\xa5\xf0\x02\x7e\xb9\x95\x89\xd0\xad\x50\xe2\x2d\xd2\xe7\x81\xb9\x17\x6d\xf7\xce\xa0\xee\x7a\xc2\xb8\xcf\x6b\x49\x9e\x1b\x0d\xd2\xbb\x4c\x7b\xa8\x71\x5f\xb8\xf9\xe9\x61\xb7\x5c\xa4\x74\xb9\x79\x63\x42\x78\xd8\xcc\xc7\x33\xe8\x56\x8e\x59\x72\xa9\x22\xcb\x0b\x4c\xea\x29\x81\xf2\x45\x8c\x94\x9b\x3c\x12\x95\x0a\x8e\xec\x41\x57\x14\xc9\xed\xad\xd8\x5e\x50\x9d\x41\xb7\xcd\x53\xf0\x30\x0e\xd5\xb3\x98\x3b\xe1\x27\x7b\x26\x4d\x32\xe1\xdc\x2f\x0d\x84\x4d\xbb\x0c\xb4\xe2\x78\x07\x65\xdf\x2e\xc7\x9f\x41\x73\x74\xe1\x1f\x19\x36\x59\x7a\xe2\xb8\xcc\x4d\x42\x72\x75\xd2\xbf\xa2\xdf\x0d\x18\xfa\xfd\xd6\x8e\xf7\xf5\xce\x78\xfa\x47\x77\xb3\x33\x28\x2b\x91\xd7\x57\xfd\xd1\xbb\x55\x6c\xdc\x15\x98\xe9\xf7\x50\x64\xf4\x4b\x5e\x6e\xaa\xb2\xbe\x2c\xc7\x9a\xdd\xdc\x78\x6a\xf6\x80\xe3\xf4\x65\x1f\xd4\xaf\x8a\xb8\xa2\x81\x9c\x7d\x8e\x1d\x7e\x07\x17\xb6\xb5\x3b\x5c\xc9\x7d\x07\x58\x94\x5c\x14\x06\x0b\xaa\xa5\xdd\x58\x98\x07\x39\x85\x57\x22\x02\x09\xc2\xb8\xe0\x30\x00\x69\x67\x1f\x00\x72\xf6\x4d\x09\xc5\x1a\x3e\xc9\xfd\xde\xe1\x62\xb0\x10\x63\x46\x9f\x21\xbc\x95\xb2\x9b\xec\x21\x44\x67\x33\x0e\x10\x97\x02\x36\xd4\x8c\x70\x18\x80\xb4\xb3\x0f\x00\x39\xfb\x92\xf2\x6b\x84\x43\x79\x81\x74\x63\xb2\x77\xfb\x86\x9c\xa3\x04\x84\xc7\x25\x27\xcc\x30\x0c\x18\x25\xb9\xed\x01\xb3\x67\x39\x36\x1c\x06\x20\xed\xec\x03\x40\xce\xbe\x9c\xa1\x03\x29\x7d\xe3\xb0\xe5\x94\xc8\xb8\x11\xe2\x2b\xb5\xbc\xe2\xbf\x52\xc9\x7c\x1c\x95\x06\x8a\x29\xbf\xde\xa7\x74\xf9\xfc\xe7\x41\x09\x69\x67\x1f\x00\x72\xf6\x31\xbe\xd5\x2a\x96\xf9\x56\xc6\xd8\xc1\x35\x67\xa4\xa6\x3f\x53\x1d\x34\xd4\xc0\x98\xbe\x70\xb8\xa3\x8f\x5d\xe4\x62\xbe\x7c\xfc\x67\x0a\x82\xb4\xb3\x0f\x00\x39\xfb\xca\x9c\x4d\x36\xbd\x3b\x69\xee\xd7\x35\x98\x9e\x24\xe4\x67\xec\x14\x7d\x24\x66\x7e\xef\xf7\xf9\x68\xd0\xfa\x91\x19\x57\x76\xe4\x9f\xab\x0d\xd2\xce\x3e\x00\xe4\xec\x93\xa6\xf3\x09\x08\xb9\x98\x3e\xe6\x84\x3d\xc6\x30\x57\xb7\x1d\xc0\x8c\x6e\xd6\x98\xea\x44\x42\x12\x39\x72\x93\xfb\xae\xb0\x07\x0f\x1c\x06\x20\xed\xec\x03\x40\xce\xbe\x76\xea\x79\x6c\xa5\xf8\xe5\xaf\x1f\x9e\x95\x92\x79\x25\x2f\x06\x0b\xf4\xb6\xcc\x67\x8f\xf2\x74\xc2\x05\x93\x9e\x73\x29\xe6\x1a\xc3\x61\xc0\x7f\xe9\xec\x83\xba\xee\x20\x06\x13\xc8\xd9\xc7\x1b\x7d\x63\xe4\x23\xa5\xa2\xa0\x89\x75\xa1\xac\xd4\x15\xc9\x21\xd5\x37\xfc\x0c\x9e\x09\xb9\xcf\x34\x5c\x9b\xb3\xc7\x2b\xf4\x6f\xc2\x61\x00\xd2\xce\x3e\x00\xe4\xec\x53\x69\x51\xb7\x12\xd2\xd5\x11\x78\xde\xdb\x28\x85\xb3\x13\x94\x5f\x4d\xcd\x90\xf9\x55\x75\x0d\xa7\xd4\x75\xc0\xec\x8b\x06\xc5\x9f\x80\x20\xed\xec\x03\x40\xce\xbe\xab\xcc\x33\x2a\xf4\x86\x36\x3c\x93\xbf\xde\xbf\xc1\x66\x87\x45\x46\x38\xc7\xd9\xa0\xe0\x59\x33\x5c\x97\x7c\xff\x40\x7c\xf6\x07\x2e\x1c\x06\x20\xed\xec\x03\x40\xce\xbe\xa7\xee\x98\xbc\x07\x7c\x87\x56\x6a\xee\x17\x86\x23\x2c\xfc\x9d\x8d\x9e\x49\xcf\x3b\xfc\xfe\xee\x53\x66\x60\x9b\xec\x9a\x58\x69\x04\x87\x01\x48\x3b\xfb\x00\x90\xb3\x4f\x49\x3d\x08\xdb\xcf\xe8\xe6\xa4\x7d\xf7\x53\xba\x5a\x7f\xce\xa5\xab\x0c\x3d\x1f\x1c\x4b\x86\x96\x30\x05\x0d\xaa\x73\x5a\x66\xe5\xe0\x30\x00\x69\x67\x1f\x00\x72\xf6\x31\xc7\xc5\x4b\xe4\x93\x75\x09\x19\x08\x86\x8d\x5f\xb2\xdd\xc0\x27\x01\x86\xa2\x3c\xe5\x6f\xfa\x62\xa6\xfa\xaa\x70\x76\xc8\xfe\xb9\x28\x20\xed\xec\x03\x40\xce\x3e\x8e\x15\x97\x88\x2d\xd5\x18\x09\x51\xac\xc3\x6b\xd7\xa7\xf0\x4e\x08\x76\x45\xc3\x2f\x66\x5b\xc6\xec\xc7\x17\x8a\x5f\xea\x29\x57\x84\xc3\x00\xa4\x9d\x7d\x00\xc8\xd9\x57\x7b\xa8\x66\x38\x8e\xdf\x24\xcf\x33\xd0\x91\xf8\x48\x92\x3f\x9c\xb0\xa2\x55\xf8\x76\x81\x54\x97\xfd\x28\xbb\xf7\x70\x68\xea\x03\x38\x0c\xf8\x2f\x9d\x7d\x50\x77\x66\xc4\x60\x02\x39\xfb\x7c\x71\x2e\x5d\x61\x46\x7d\x1a\x2e\x41\x42\x33\x58\x65\xff\x92\x2f\x70\xd9\x54\xdb\x27\xe1\xce\xe3\x79\x9d\x87\xfe\x26\x17\x8d\x08\xe1\x30\x00\x69\x67\x1f\x00\x72\xf6\xe5\x97\x57\xbe\x98\xa2\xdf\x6f\xf3\xb9\xf2\xfa\x51\xa2\xeb\x71\xbd\x43\xbd\xbb\x20\x85\x3a\x2d\x63\x11\x15\x6d\xbb\x80\xc8\xd0\x9f\xa0\x23\xed\xec\x03\x40\xce\x3e\xaf\x36\x27\xe2\xde\xa6\xd6\x6d\xb2\x49\xcd\xdf\x7e\xef\x1f\x95\x2c\x51\xa5\x60\xf2\x7e\x54\x69\x51\x21\xce\x8c\x67\x34\x8d\xe1\x85\xc3\x00\xa4\x9d\x7d\x00\xc8\xd9\x37\xf0\x94\x78\x94\x41\x98\xf9\x87\x68\xd3\x7e\x79\xa7\x44\xaf\xf9\xde\x0f\x25\x83\x6f\xe5\x2c\x3f\x81\x63\x9e\x18\x79\x69\x76\x07\x38\x0c\x40\xda\xd9\x07\x80\x9c\x7d\x45\x34\x5e\x1e\x4f\x8c\xcc\x12\xe4\x5e\x1d\xe9\xb3\x25\x71\x2e\x7f\xe6\x20\x80\x1b\xa4\xc7\x99\xa2\x72\x04\x85\x3b\xe2\x7e\xfb\x73\xb5\x45\xda\xd9\x07\x80\x9c\x7d\xad\xfd\x2a\xc4\xa2\x61\xdd\x9a\xca\x4f\xf6\x6f\x79\x0c\x7b\x98\xf8\x6d\xa3\x06\x5d\xfb\x64\xe0\x3b\xbc\x96\xf0\xaa\x98\x92\xe9\xcf\x5d\x1c\x69\x67\x1f\x00\x72\xf6\x05\xdc\x55\xce\xbc\x2d\x7f\x69\x42\xde\xe8\xb6\xf2\xc4\xe2\xf2\x5d\xa2\xd9\xf1\x0f\x79\x0f\xe2\xb5\xbc\xc5\x0c\x93\x43\x9c\xd8\x34\xe0\x30\x00\x69\x67\x1f\x00\x72\xf6\x1d\x73\x24\x2a\xef\xb0\xbc\x75\x59\x88\x10\xaf\x08\x25\x24\xd0\x3e\x4e\x0f\x87\x45\xee\xf0\x84\x19\xf4\x8d\xde\x4b\xf9\x92\x46\x06\x87\x01\xff\xa5\xb3\x0f\x6a\xee\x8a\x18\x4c\x20\x67\x1f\xd3\xc8\xd2\x06\xcb\xeb\xf0\x08\x7d\xbe\xb8\x8a\x70\xbb\x20\xa3\x8a\xd4\x1a\xcc\x7d\x7e\x58\xc8\xdd\xa7\xf8\x7d\x87\xe6\x2c\x14\x70\x18\x80\xb4\xb3\x0f\x00\x39\xfb\x9e\x99\xe1\x87\xda\x52\x32\x61\xf5\xe5\x32\xec\xbd\xe1\x2c\x5f\x9b\xbb\x4b\xf7\x8a\xf1\x3e\x77\x5e\x6a\x92\xcd\xb3\x97\x9d\x8c\x7f\xa6\x79\x48\x3b\xfb\x00\x90\xb3\xaf\x72\xea\x73\x27\x43\xd5\xad\x05\xe3\x47\x37\x44\xc9\xf5\x78\xa7\xc7\xf0\x38\xf1\x0a\x93\x15\x2a\xe2\xdc\xe9\x3a\xe5\x27\xbe\xeb\xc2\x61\x00\xd2\xce\x3e\x00\xe4\xec\x9b\x99\xd2\x82\xb3\x0b\x5d\x3f\xd1\xe0\x55\x8e\x1a\x5d\x12\xa9\xf5\xca\xb4\xed\x46\xb3\xed\x78\x22\x67\xd2\xd4\x7f\xa4\x56\xfa\xe7\x0e\x8b\xb4\xb3\x0f\x00\x39\xfb\x2c\xb1\xa9\xb7\xdf\x45\x10\x24\x15\x6d\xd5\xc7\x32\x5c\x7e\xee\xac\xb3\xfa\xf9\x0a\x05\xb3\x46\x7e\x6d\x22\x2e\x43\x96\x49\x09\x06\x1c\x06\x20\xed\xec\x03\x40\xce\xbe\x5d\x89\x23\xc2\x85\xed\x52\x62\xe3\xb4\xd7\xb8\xc5\x72\xd2\xec\x11\x57\xe3\x6f\x27\xfd\x94\x61\x89\x4d\xdc\xde\x1f\x1c\xef\xf8\x73\x45\x47\xda\xd9\x07\x80\x9c\x7d\x3b\xf3\xf4\xdc\x65\xf9\xdb\x2e\x7e\xd3\x97\xc8\xad\xe6\xa5\xf2\x1d\x5f\x28\x99\x73\xdc\x1a\xb0\x9b\x51\x1b\x71\x50\xbc\xb8\x47\x0a\x87\x01\x48\x3b\xfb\x00\x90\xb3\xaf\xf7\x56\xf8\xd4\x4b\x9c\xab\x8a\xaf\x63\x70\xf9\x5f\x62\x33\xe8\xae\xb4\x70\x26\x0a\x1a\x33\x19\x63\x73\xc8\x99\x8d\xd7\xc8\x48\xc1\x61\xc0\x7f\xe9\xec\x83\x7a\xba\x43\x0c\x26\x90\xb3\x4f\xee\xc7\xda\xbb\x4d\x8f\x2c\x65\x41\xf4\x4b\x7e\xe1\xf4\x3b\x56\x9b\x26\x0f\x39\x60\x4a\x55\xe6\x09\x82\xb7\xbf\x46\xde\x52\x32\x81\xc3\x00\xa4\x9d\x7d\x00\xc8\xd9\xb7\x26\x5e\xae\xf4\xe9\xd1\x4e\x7b\xe4\x4a\x6d\x02\xc7\xfd\x87\xe3\x07\xec\xbf\x2e\xef\x6c\x6e\xfa\x5c\x28\xde\x7c\xcb\xe6\xaf\xfd\xe7\xb9\x0c\x69\x67\x1f\x00\x72\xf6\x89\xa3\x5c\x7b\x94\x51\xe8\x83\x0e\xdf\x44\x67\x2a\x56\x7e\x68\xbd\x6c\x9f\x55\xe1\x94\x58\x9c\xb6\x03\xaf\x09\xe5\xa8\x8e\xf9\x73\x25\x44\xda\xd9\x07\x80\x9c\x7d\xd7\x74\xd9\xf9\x05\x0a\x0d\xd6\xde\xe6\x3c\x0f\x2b\x3d\x2e\xa0\x55\x6e\x30\x2a\xbb\x83\xfd\xfc\x5d\x02\x07\x45\xef\x45\x0f\x13\x5b\x38\x0c\x40\xda\xd9\x07\x80\x9c\x7d\x98\x7a\x6a\x22\xd4\xfa\x6f\xdf\xa9\x90\x5f\xc3\xd6\xc0\xfe\x89\x45\x78\x45\xbd\xab\x84\x7a\xe0\xba\xf7\xde\x85\x09\xbf\x2a\x66\x62\x38\x0c\x40\xda\xd9\x07\x80\x9c\x7d\xee\x1e\x6c\xf5\xef\x57\xc7\xa8\x4b\x35\xb5\x3f\xff\xf2\x10\x3c\xd0\x69\x68\x32\xd6\x54\x67\x13\xbf\x8f\x66\xaf\xfb\x54\xb9\xe9\xcf\x80\x45\xda\xd9\x07\x80\x9c\x7d\x41\xf6\x6a\x5f\x63\x7e\xd4\xaa\x91\x98\x48\x26\xdd\x7c\x25\x18\x95\x69\x7a\xbd\xb8\x79\xe5\x40\xc4\xd9\xa3\x6e\x4d\x0f\x2d\x56\x12\x0e\x03\x90\x76\xf6\x01\x20\x67\x1f\xe1\xc0\x8b\xde\x31\xda\x5f\x01\x63\xd7\x62\x92\x5d\xbf\x59\x5c\x79\x46\xe8\xd0\x4f\x91\xb1\x22\xc2\xbb\xf0\x6e\x7a\xdd\x9e\x56\x15\x0e\x03\xfe\x4b\x67\x1f\xd4\xfa\x07\x62\x30\x81\x9c\x7d\x06\x9c\xcb\x5d\xfd\xa8\x09\x75\x87\x15\xcb\xf5\x37\x5e\x2a\x86\x37\xab\x35\xf1\xc7\x69\x4e\x7e\xf8\xb1\x59\xef\xa5\x7e\xb3\x00\x0f\x0e\x03\x90\x76\xf6\x01\x20\x67\x1f\xef\x9c\x24\xb6\xca\x55\x5f\x9f\x42\x63\x8b\xdd\xc7\xd3\xef\x06\xbf\x64\x3f\x51\xc1\xd8\x4b\x7c\xfd\xe3\xb5\xb2\x63\x82\x8a\x22\x00\x87\x01\x48\x3b\xfb\x00\x90\xb3\x4f\x8b\xfa\x5a\xe9\x64\x9c\xaa\x1d\xdf\x12\x41\x39\x0a\x76\xcd\x9b\x9e\x38\x86\x4b\x5e\x17\x50\x84\x77\xae\x3d\x99\x53\xbb\x39\x60\x01\x87\x01\x48\x3b\xfb\x00\x90\xb3\x2f\xf5\xd5\xf7\xef\xa3\x57\x6b\xf2\xa2\x0d\x52\xed\x4a\x3b\x37\xeb\x0b\x09\x89\x7b\xb3\x51\x4c\x7d\x96\x33\x68\x60\xb4\x9c\xdb\x68\x70\x18\x80\xb4\xb3\x0f\x00\x39\xfb\xa8\x82\xaf\xdf\x19\x70\x14\x59\x0b\x5b\x30\x7e\x5b\x2d\xff\x09\x23\xaa\xd9\x8f\xd5\x30\xfb\x40\xe0\x8a\x0c\xcd\xe0\x30\x61\xfc\x9f\xdf\x0a\x69\x67\x1f\x00\x72\xf6\xf1\x94\xce\x73\x5c\xbe\x39\x42\x4e\xf1\x58\x36\x2e\x92\x46\x96\x84\x2e\x26\xc8\x4d\xba\xe9\xdb\xe6\x04\xfb\x98\x0d\xa0\x71\xf1\xcf\x6f\x85\xb4\xb3\x0f\x00\x39\xfb\x18\xa8\xd3\xe7\x19\x4c\x6e\xf5\x36\x6e\x78\xe6\x64\x19\x77\xe4\xed\x44\xe7\x1c\x15\x07\xdd\xce\x25\x19\xfc\xbc\xf7\xa3\xd3\x92\x1a\x0e\x03\x90\x76\xf6\x01\x20\x67\xdf\xef\x93\xdf\xae\xea\x2c\x89\x15\x6f\xcc\x0e\x4d\x86\xe7\xd4\xd7\x97\x64\xf0\xa5\xd0\x7d\x46\x7d\x58\xfc\x0c\xa5\xb1\x82\x15\xcd\xe0\x30\xe0\xbf\x74\xf6\x41\xad\x10\x22\x06\x13\xc8\xd9\xa7\xad\x91\xad\xc7\x95\x3d\x6e\x32\xf7\xfd\x5e\x9f\x4c\x89\xd7\x83\x22\x93\xaf\x84\x2b\x5d\x6e\xbe\xed\xd8\xbd\xdb\x9d\x54\x57\x39\xe0\x30\x00\x69\x67\x1f\x00\x72\xf6\xb5\xd7\xbf\x62\x78\x23\x32\x80\x55\xe4\xe6\xb8\x48\x5d\xf2\xf3\x98\xa6\x6b\x4e\x00\x45\x28\xd1\xb0\xd2\x2c\xa9\x0e\x66\xa1\xfe\x67\x8e\x8e\xb4\xb3\x0f\x00\x39\xfb\x5a\xa8\x73\xe2\x28\xd1\xee\x2f\x60\x47\x97\xfb\x7c\xed\xda\x4e\x0b\xa4\x6a\xb2\x63\x3a\x28\xf0\x67\xc3\x91\xc1\x14\x53\x79\xa5\x06\x87\x01\x48\x3b\xfb\x00\x90\xb3\x2f\xf4\xde\x0c\x8f\xac\xb9\x94\x23\x3f\xfc\x2d\xe3\xe8\x1a\xbb\xaa\xdf\x76\x62\xa3\x61\x98\xd5\x11\x41\x43\x0f\x5d\xeb\xb3\x3c\x01\x38\x0c\x40\xda\xd9\x07\x80\x9c\x7d\xf1\x35\x8f\xb5\xd5\x6c\x32\xec\x63\xdf\xb4\xb2\xb6\x62\x59\xf1\x1b\x97\x98\xef\x2d\xf8\xb3\x16\x90\x1f\x94\xc7\x32\xd1\xcb\x09\xc3\x61\x00\xd2\xce\x3e\x00\xe4\xec\xbb\xcc\x19\xf2\x33\xe9\x42\xd8\x47\xa0\x75\x30\x20\xf5\x4e\x58\xb6\x9d\xe0\xb7\x8a\x92\x87\xfd\x3c\xf5\x75\x59\xfc\xeb\xf7\x84\xff\x4c\xbb\x91\x76\xf6\x01\x20\x67\x1f\x2d\x25\x75\xca\xdb\x29\xb7\x07\x1f\x3b\x7c\x2c\x8b\x15\x89\x31\x59\xf6\xd2\x4a\x7f\x1b\xb9\xce\xc8\x8b\xba\x9a\xae\x84\xfb\x32\xc3\x61\x00\xd2\xce\x3e\x00\xe4\xec\x8b\xe0\x23\x95\xd6\xbc\x6a\xee\x48\x56\xae\xd0\xb4\x10\xf2\xc0\xa2\x2f\x73\xef\xca\x03\xec\x57\x05\x14\x1e\x4a\xe3\xf7\x42\xa2\x04\xe1\x30\xe0\xbf\x74\xf6\x41\xad\xa1\x23\x06\x13\xc8\xd9\x27\x74\xa5\xec\x79\xe8\xf4\xb6\xf5\x87\x4a\x39\x9c\x78\x56\xfe\x44\x0b\x7e\x31\xb3\xf0\xdf\xdf\x49\x08\x46\xea\x9a\x4d\x2b\x86\xff\x8c\x6e\xa4\x9d\x7d\x00\xc8\xd9\xd7\xb8\x6b\x3c\x88\x23\xea\xb3\x87\x2e\x41\x9c\x4b\xd5\x03\xb4\x18\xc8\x93\x3d\x3c\x9c\xc3\xa7\x58\x15\x63\x55\xdd\xd9\xbb\xfe\x67\x30\x21\xed\xec\x03\xc0\xce\xbe\x1e\xf2\x32\x89\x0e\x67\x15\xba\x5f\xd4\x75\xaf\xcc\x9f\x4e\xdc\xae\x5a\x0a\xa0\x8e\x35\x18\x48\xc6\xed\x1b\x30\xc1\x94\xbb\x01\x87\x01\x48\x3b\xfb\x00\x90\xb3\x6f\x4f\xbe\x17\xbb\x28\x0f\x25\x4e\x32\x47\x36\x5a\x87\x56\x62\xc3\x54\xc0\x33\xa0\x66\xee\x87\x5a\x78\xdb\xac\xc2\xee\xa7\x32\x02\x38\x0c\x40\xda\xd9\x07\x80\x9c\x7d\x45\x85\xe4\xfe\x9a\x1d\x65\xfd\xaf\x15\x9b\xb5\x24\x79\x99\x6e\xdf\x44\x3b\x61\x37\xbd\x7c\xe5\x17\xaf\xed\xc7\xed\xb7\x7e\xb9\xdc\x70\x18\x80\xb4\xb3\x0f\x00\x39\xfb\x70\x97\x7f\xae\xba\x96\x86\xe2\xc5\x5a\x3c\x9d\x5e\x4e\x16\xb1\x9a\xbd\x3a\x5d\x6f\x6e\x69\xd1\x8c\xee\x8f\x7a\x68\x80\xc3\xf0\x67\x7a\x84\xb4\xb3\x0f\x00\x39\xfb\xa8\x68\x84\xcb\xf5\x15\xdd\xd6\x98\x18\x22\x18\x48\xf1\xd2\x32\xdf\xa7\xb8\xc9\x76\x53\x96\x8e\x79\xaa\x5c\xc2\xdf\xb2\x9d\x22\x82\xc3\x00\xa4\x9d\x7d\x00\xc8\xd9\x57\x3a\x28\xf3\xc5\xe4\x26\x23\x6b\x5f\x73\xd8\x72\x46\x4b\x63\xe8\x86\xdd\xfb\xdb\x87\x1f\x5e\xa3\xad\xed\x4f\xa3\xa0\xf3\xc9\xb1\xc1\x61\x00\x92\xce\xbe\x9a\x4b\xff\x19\x4c\x46\x97\xa9\xac\x6c\xef\x8b\x3a\x88\x56\x0f\x52\x1f\xc4\x5f\xbe\x22\xa2\xbc\xd2\xe2\xc1\xc6\x59\x4d\x32\xbd\xf9\x26\xad\x71\xb7\x1e\x9e\xc8\x75\xe6\xf5\x95\xa9\xb4\x9c\x24\x2b\x8f\x7a\x0e\xb3\x91\x3c\xf7\x8c\x16\x66\xc2\x5c\xde\xfd\x54\x39\xec\x59\x5d\x76\x6a\x15\x3c\xd4\xba\x65\xcb\x33\x68\x17\x81\x21\x4d\x77\x75\x20\xab\xc3\x4f\x7b\xd9\x8f\xf3\x95\x26\x53\xb6\x0f\xbe\x89\x67\x5f\x5e\xa0\x7f\xb2\x72\x9c\x5f\x42\x7e\xf5\x0c\x7a\xdd\x05\x6b\x86\xa3\xee\x70\x88\x36\xd8\xeb\xed\xf1\xe6\x93\x0b\xee\xf8\x44\xe5\x11\xf1\xf6\xe8\x8c\x94\x1b\xfd\x5e\x91\x36\xbf\xcf\xa0\x28\xea\x8d\xcc\xc9\xce\x59\xac\x8d\xa3\xe9\x66\xdb\x0e\x35\x40\x24\x7d\x75\x46\x15\xe6\xef\x9b\x32\xd1\x02\x5b\x41\x00\x0e\xde\x19\x54\xb7\x52\x9e\x4a\xff\x32\xee\xf2\x8f\xac\x0c\xaa\xed\xfd\x5e\xcb\xfb\x3e\xb7\x05\x36\xb5\xab\x13\x6c\x72\x3e\x24\xca\xa4\xa2\x1f\x9d\x41\x99\x33\xaf\x3c\xad\x6f\xca\xbd\xc0\x3e\xf0\xcd\x48\x0f\xef\x6a\x1a\xef\xfa\x09\x1f\x66\xf4\x03\xcf\x3d\x75\x85\x3d\x54\xca\x67\xef\xce\xa0\xf7\x34\xeb\xa6\xe3\xa3\x9f\xaf\xb6\x47\x3c\x5c\x37\xbc\xbe\x13\xc2\x93\xab\xa9\x51\x99\x66\x8c\x21\xff\xe4\x37\x69\x8d\xf7\xca\xab\x33\x68\x75\xc0\xa7\x51\xf2\x5f\x0a\x13\xe4\xbf\xb5\x1e\x14\x1e\x30\xa3\x51\xe6\x77\x7d\xcc\x4d\x45\xa1\x71\x30\x2c\xca\x40\x7f\xec\x2b\x77\x06\xe5\x84\x91\x3b\x8b\xb2\x3f\xad\x37\xaa\x8f\x31\x0f\xc5\xb8\x76\x7d\xec\xbe\xd9\x52\xf2\xee\x82\xe3\xfd\xcf\x33\xde\xa9\x29\xb5\x59\x67\x50\xb7\x71\x3d\x71\x91\xf0\x44\x75\x16\x42\xbc\x34\x97\xd4\xd2\xfe\xed\x1f\x12\x5f\xf3\xf0\x75\x1e\xdb\x4a\xdb\xc3\x7f\x7a\xdd\xa4\x38\x83\x7e\x13\x28\x6a\x3c\xc2\x1b\x9c\x96\xab\xee\xdc\xf8\x32\x1d\x37\xd9\xb8\xd6\xfd\x15\x36\x44\x61\xa7\xe5\x2e\xf0\xf3\xbd\x9f\xe7\xcc\x19\x94\x7e\x70\xbd\xdd\x88\xc4\xb1\xc0\x52\x72\xd9\xff\x03\x7e\x0b\x91\xef\x88\xe5\x26\x93\x4a\xee\x52\x11\xeb\xfb\xed\x99\xc1\x37\x67\x3f\x98\xcc\xd5\x8b\xbd\xfc\xb3\xc1\x3a\xc1\xbe\x0e\xfb\x4a\x59\xc1\x51\xc2\xeb\x1e\xd4\x46\xfb\xb7\xad\x15\x1f\xc8\x82\x4d\x4a\x1c\x70\x5e\x9e\x41\xd1\x9d\x96\xa2\xb8\xad\x42\x78\xad\x5e\x3c\x35\x6e\xa0\xfc\x99\x98\xe9\x66\x69\x81\xf2\x2b\xc0\x28\x17\x4d\x53\xd3\xdd\x87\x8c\xec\x0c\x4a\xfc\xf8\xa4\x35\x3f\x65\xc5\x2c\xe3\x5d\x0f\x6b\x6c\xa4\xd3\xbb\x27\x6c\x22\xaa\xf2\xfc\xcd\xda\xab\x6a\xb0\xfc\x3b\xb7\xca\x83\xce\xa0\x7d\x38\x16\xbc\x89\x5b\x0a\x49\x77\xb6\x1e\xc4\x99\x85\x76\xab\x62\x1e\x59\xed\x1c\xab\x55\x7a\x8e\xc8\x14\xa1\x9b\x54\xa3\x05\x9c\x45\x2f\x27\xc7\xcc\xae\x51\xbb\x6d\x58\x59\xdd\xc5\x8b\x41\xa1\xcf\xa7\x7d\x65\x9e\x39\x4f\x60\x87\x5a\x35\x28\x4c\x9f\x63\x44\x7c\x06\xbd\x95\x82\x4b\x28\xb4\x3a\x3a\x72\x41\xb7\xf7\x13\x75\xd8\x54\xb2\x99\x75\x56\x3b\xb1\x3a\xfe\xf1\x87\xb2\xaa\x78\x23\x03\xa3\x9d\x33\xa8\x8d\xca\x43\x6f\xa6\x4e\xe2\x55\x54\x89\x5f\x97\x3d\x85\x2b\xde\x75\x1a\x66\x5f\xae\x30\x0d\xdf\xc0\x29\x4a\x89\x7d\xf8\xbb\xaa\xef\x0c\x7a\xe8\x60\xc5\x3f\x4e\x12\x27\x7a\xdc\x40\xd5\xe4\xcd\x38\xc6\x84\x5f\xa0\x9c\x55\x27\x9e\x25\x51\xb2\xc2\xc3\x7a\x3b\x90\xfb\xec\xbb\x69\xec\x85\xa9\x6a\xa1\xa1\x4a\x6e\xab\x97\x7c\x7c\x26\xad\xfd\xe5\x84\x9a\xb5\x61\xa2\x9e\x15\x3d\x64\x0d\xa3\xb4\xef\x98\xea\x17\xce\xa0\xe2\xa9\x83\x97\xae\x5d\x61\x5d\xaa\xf8\x42\x83\x91\x37\x74\x8b\x00\x2e\xf4\xaa\xc4\xc0\x51\xdb\x5f\x38\x76\x42\x6e\x36\x97\xba\xe5\x0c\xba\x92\xdf\xfc\x7b\xe0\x93\x9f\x9e\xfc\xc3\x57\xd4\x0a\x52\x7d\x84\xb5\xcd\x47\x3d\xd6\xa9\x86\x09\xe8\x15\xe5\x9f\xfd\x1b\xfa\xce\xbe\x9b\xa6\xb6\xbc\x4b\x19\x9b\x78\x55\xfc\x5a\xc9\x1b\x23\xae\x93\xfc\x88\x43\xc2\x4b\x39\x42\x85\x28\x52\x9b\x2d\x18\x87\xf8\xf7\xdd\xce\xa2\xe1\xbf\x8f\x16\x5e\xeb\xcc\xde\xfa\x56\x20\x2e\x9f\x4d\xbc\xfc\x72\x68\xd6\x55\xe8\x36\xff\x6a\xbb\x90\x53\x33\x4e\x5a\x76\x65\xca\x19\x34\x8f\x7f\xd7\xd3\x82\xf6\xea\x33\x95\x2e\x81\xd5\x19\xd4\x4c\xfe\x6b\x03\x1e\x32\x6e\xc1\xcb\xd7\x3b\xa9\xf1\x8f\xdd\xa5\x2e\x9e\x6d\x0f\xf8\xf5\x7e\x24\x9f\xe6\xa3\xf7\x62\xc5\xa3\x48\xb2\xa7\x02\xdb\x9b\x5c\x0a\xfa\xd8\x69\x4b\xc4\x8d\x9e\xc9\x72\x7b\x27\x42\x1e\x4d\x67\x2f\x44\x64\xed\x11\x3d\xef\x82\x7f\x5d\xd5\xb9\xfa\xa9\x27\xfb\xfb\x87\xf4\xe5\x0a\xb9\xb8\xbb\x3f\x7e\x95\xd5\x1a\x2e\x8a\x35\xd3\x9d\xf5\x71\xa6\x6a\xba\xc5\x4c\xa3\x65\x4e\xdc\x95\xa1\x60\xa4\x0b\x0b\x24\x85\x79\x58\xf3\xab\x3c\xee\x63\xb1\xee\x6a\x2b\x60\x16\x28\x28\x3a\x83\xca\x59\x71\xd7\x12\x07\x79\xfa\x3f\xb8\xa7\xbd\x4b\x45\x65\xe8\xa2\x9c\x15\x05\xb3\x16\xef\x9b\x25\xd6\x86\x89\x50\x75\xa3\x9f\x8d\x36\x7e\xa3\x8e\xbd\xde\xfd\xe5\xe9\x88\xf5\x9b\xa1\x2a\xa9\x59\x6c\x1f\xbc\xae\x45\x87\x15\xf3\x71\xf5\x52\x1d\x85\x51\x7a\x57\x9f\xfd\x18\x99\x6e\xe1\xcb\x25\x99\x60\xf8\x0b\x7c\xbc\xef\x55\x4f\x1f\x54\xfa\xcc\xfe\xb8\x1b\xb1\x6c\xe6\xad\x4d\x15\x00\x33\xe7\x50\xc5\x3d\xab\x19\x15\xa8\xe6\x2c\x63\x2c\xb0\x68\x26\x0e\x8b\x67\x9e\xb9\xb4\xf7\xc0\x8b\x63\x82\xb4\x92\xde\x46\x7f\x9b\x96\x74\x7a\xa7\xa9\x41\xf1\xec\x61\xad\x4d\x14\x76\x45\xc8\xb6\x67\x1a\x26\x3b\x7f\xdc\x36\x88\x19\xc5\x6a\xee\x8e\xc8\x12\x65\xb7\xcb\xc1\x28\xba\xb4\x11\x2f\x78\x06\xed\xa8\x81\xf9\xce\xeb\xc6\x12\x3e\xa5\x36\xa0\x74\x14\xa1\x6b\x0f\xcf\xfe\x32\x38\xee\x79\x1d\x0f\x75\x99\x83\x9b\xe0\x55\xbe\xd1\x19\x74\xe6\x3a\x0b\xd5\x62\xbe\xec\x95\x29\xc2\x32\x4c\xa9\xfe\xfc\x50\xc7\xbd\x2b\x91\xe1\x2e\x65\x21\x53\x18\x65\x2c\xe6\xd7\xa3\xe1\x67\x33\x80\xc3\x28\xd4\x70\x20\xa4\x99\x4e\xa0\xa2\x53\xd6\x45\x90\xe5\x9c\x07\xaf\xb3\xa2\x51\x61\xfb\x36\xc4\x45\x25\x39\x4b\xa8\x70\xf6\xea\x22\x56\xd4\xaf\xa6\xdb\xae\xff\xbe\x82\xce\xc2\xde\xba\xe6\x05\x31\xde\xb3\x0d\xcb\x92\xb0\x8a\x34\xf6\x31\x26\xa7\x07\xdf\x75\xcf\xa0\xab\xdf\xac\xe5\x1f\x76\x35\xa6\x46\x8f\x51\xa0\xf2\xab\x30\xe3\x3f\x67\xb6\x09\xc2\x21\x1e\x7a\x31\x50\xc3\x96\xd8\x44\xec\xa3\x7f\x06\xe5\xd5\x59\x1a\xc9\x3f\x19\xde\x56\xaa\xc3\x9c\x8e\x29\x36\xf3\x68\xf4\x9e\x49\xe4\x0b\xff\x26\x5a\x91\xd0\x9d\x12\xc0\xd3\x76\xf6\xbe\x15\x51\x18\x79\xbb\xbb\xe3\x9a\x6c\x53\x82\xc1\x44\xa6\xbe\x28\xae\x64\x71\xf0\x81\xf3\x0c\x45\x6b\xf0\x8d\x8b\x59\x22\x4c\x82\x67\xbf\xdc\x5e\x37\xe0\x74\x63\xc5\x52\xb8\x53\x85\x36\x6f\x55\x70\x4c\x10\x1a\xf8\x36\xbe\x53\xc0\x88\x04\x6d\xf8\x1e\xbb\x78\x25\xe9\x76\xec\x19\xb4\x88\x75\xb0\xc3\xd3\x33\x8f\x5e\x9e\xce\x3e\x82\x97\x52\x9f\x76\xe7\xa3\x4c\x85\x88\x04\x61\xdd\x53\xbe\x11\xa7\xae\xc8\xd2\xb0\xb3\x19\x18\x7d\x4a\x5c\xe4\x5e\xdc\xdb\x3e\xc9\x2b\x8c\xdf\x3d\x84\xb9\x4a\xe1\xd0\x4a\xce\x3b\x76\x95\xa7\x55\x23\xcb\x63\x62\xa4\xf2\xec\xf7\xe0\x7d\x85\x35\x6f\x6f\xde\x8a\x19\xe3\xaf\x8d\x0c\x88\x9b\x9b\xd1\xea\x5f\x6c\x52\x51\xad\xa6\x49\xb8\xc1\x12\x70\x89\xa5\x01\xf7\x0c\xba\x5f\xe2\x9d\x48\x27\x69\x1c\x31\xcf\x77\xdb\x97\x8c\x48\x43\xf2\x80\x18\x2d\x4f\xe3\x5e\x58\x04\xde\x75\xa6\x70\xcb\x6e\x83\xb3\x17\xcd\x98\x2b\xe6\x3d\xfe\xcf\x57\xf3\xd9\x0b\xdb\x2e\x93\x0d\x36\xda\x92\xb6\x7e\xd0\x9a\xd0\x02\x08\x3d\x15\xd7\x45\x24\x08\xdc\xcc\xcf\xa0\x1a\x36\xac\x4d\x8f\x00\xb4\x20\xdf\xf1\x5f\x12\xdb\x06\x71\x54\x71\xa6\x52\xee\x6f\x16\xa6\x6d\x92\x45\xdc\xd6\x87\x6f\xa8\xd2\x3d\x46\xfd\xbb\xc9\xc0\xd3\x33\x35\xf5\x78\xd0\xbf\xbc\xf3\xdb\xa6\x8e\x05\xd0\x06\x78\x4f\x74\xf5\xf3\x5b\x28\x6e\x59\x0a\x84\x54\xdc\x2f\xa2\xa1\x68\x27\xa8\x3c\x8b\x96\x5d\x12\x2d\xdd\x2d\x7e\xa3\x34\x64\x15\x19\x3d\xf0\x8e\xfe\x93\xf9\xb1\x62\xcf\x4f\xe7\x8a\xa8\x7b\x46\x4f\x3e\x2f\x5e\x2a\x8c\x12\x13\x23\x25\x0d\x10\x13\x43\xec\x05\x54\xe5\x40\xd4\x8b\x81\xe2\xc0\xd9\x9b\x02\x5d\xa1\xea\x5d\x7b\xad\x21\x0f\x91\xac\xf0\xce\xa9\xa6\xae\x29\x6c\xed\x06\xa7\xfc\x80\xe8\xf5\x00\xa7\xbd\xd6\x4b\xad\x69\x67\xef\x4a\xe4\x77\x38\x6d\xca\x5f\x97\x67\x3d\xa1\xc7\x8d\x2f\x98\xf6\x5b\x1c\x64\x61\xc7\xe4\xb1\x4a\x63\x65\x98\x6d\xb7\x5e\x65\x42\x5d\xf2\x6f\xc4\xfa\xbb\x9a\xff\xf3\x4c\x12\x2c\xae\x21\x26\x26\x76\xf6\x7f\x12\xd6\x19\xab\xf5\x61\xda\xeb\x26\xa6\x03\xd7\xe3\x4f\x68\xb9\x08\xbc\x55\x29\xf1\x27\xb9\xaf\xd9\x7a\x8b\xd5\xf5\x85\xaf\xa6\x9f\x1d\x98\xf7\x42\x85\xc9\x7b\x30\xbf\x8f\x46\x91\x54\xbc\x5e\xd6\x6c\x66\xc8\x56\xd4\xff\xbe\xc8\xf8\x45\xe0\x56\x7b\xb5\x80\x97\x32\x67\x80\x34\x8a\x18\x0a\x0a\xca\x1d\x14\xb4\x3f\x33\xbe\x00\x31\xb1\x00\x31\xb1\x60\x49\x94\xbb\xa8\xff\xef\x16\x0d\xfc\x68\xba\xd3\x9e\x4f\xa2\x29\x0a\xdf\x9a\x15\xb8\xe3\xb4\x3e\x4d\xb5\xf3\xf8\x93\x9b\x96\x07\x53\x1c\xaf\x1b\xe7\xef\x88\x5b\xff\xba\x45\x29\x94\x5b\x62\xa0\x4d\xb6\xa1\xd5\x4a\x8c\x9b\x2f\x98\x3e\xf6\xe9\x78\x6c\xc5\xe5\x3c\xda\x3d\xb3\x60\x7f\x23\xfb\x93\xdf\x75\xee\xe8\x6c\xd1\x79\x3e\xa3\x7f\xdf\xa4\x06\x78\x93\xc3\xa4\x24\xaa\x15\xd4\x8c\x49\x87\x6f\x7a\xa5\xa7\xe1\xb6\xc2\x42\x4f\x35\xe9\xf8\xd3\x60\x79\xb5\x6c\x63\x01\x6e\x9b\xf7\xe7\xfe\x7d\x93\x0f\xc0\x9b\xdc\x9d\xc2\x71\x66\xc8\xc1\x9e\xe2\x76\x3e\xba\x28\x1a\x1a\x26\x91\x49\x90\x89\xc3\x7b\xef\x77\x9a\xdc\xed\xa6\x06\x17\xfb\xca\xec\x7f\xdf\xa4\x37\x78\x93\x06\xe1\xe5\xf8\x2e\x3b\x96\x04\xa3\x3c\xab\x3f\x3c\x62\x50\x54\xad\xc4\x30\x50\x52\x0e\x9a\xc3\x13\x4d\xbe\x0f\x15\x78\x28\xf7\xfc\xfb\x26\x13\xc1\x9b\xdc\xc4\x6f\x7b\x29\xa1\xf2\x32\x49\xc0\x0d\x20\xf2\xb8\xf9\x66\x93\x57\x71\x7a\xc5\x30\x2e\x11\xd3\x5e\x47\x36\x59\x78\x62\xc4\xfc\xdf\x37\x59\x01\xde\xa4\x2f\xd7\x67\x8d\x30\xee\x46\x55\xb8\x65\xac\x9a\x5b\xf3\x8b\x06\xad\xd7\xc5\xaf\x5a\xbb\x18\xf5\xbe\x55\x2f\xb0\x51\x8d\x3f\xf0\xf8\xc7\x4d\xea\xfe\xdd\x48\x0c\xc4\x44\x0d\x14\xa7\x3d\x7b\xfb\x53\x33\x9f\x7d\xba\x58\xfa\xc2\x28\x4b\x3c\xcd\x6e\xc2\xe3\x0b\x2e\xb1\x89\x9d\x13\x0a\xfc\xed\x10\x61\x68\x6f\xe4\xf5\x83\x8b\x74\xfe\x5a\x7f\xc7\x05\x8a\xfb\x9f\x2d\x2b\x1b\x43\xe5\x27\x74\x51\x23\xa4\xa4\xa5\x64\xad\xe4\xdd\x57\xd5\x8d\x2c\x31\x59\x82\xfa\xb5\xf6\xcb\x26\x78\x2d\xf7\x4c\x63\x5e\x23\xca\x42\x71\x81\xe2\x17\xce\x96\x4d\xee\x83\xd9\xbb\x39\x37\x79\x2f\x2c\xa7\xb5\x60\xf7\x6c\x32\xf7\x31\x13\x5b\x1a\xce\xe3\x48\x51\x2f\xb3\x8d\xc3\xb8\x52\xea\x10\x65\xa1\xb8\x40\x71\xb4\xb3\x65\x6f\x88\xbf\xd6\x9c\xec\xf6\xf5\x5e\x58\x9e\x63\xbe\xe5\x55\xea\x38\xe1\x5c\xfc\xc0\xcc\x8a\xbb\xf2\xdb\x9d\x04\xe2\xd0\xd1\xea\xd3\x1f\x01\x8a\x0b\x14\x47\x3f\x5b\x16\x77\x2c\x67\xe7\x3e\xe9\x83\x1d\xd6\xd0\xde\xed\xb6\x23\xf9\x12\xd7\x2f\x2a\x7a\x61\xce\x6c\x8a\x55\xef\xbc\x37\xc7\xba\x5f\x09\x23\xca\x42\x71\xa0\xbd\x1d\x4d\xfd\xca\x7b\x61\x92\x09\x43\x57\x9d\x51\x9c\xbe\xd4\x8d\x51\x6d\xe2\xde\xe0\x4a\xc6\x97\xa5\xb6\x30\x0f\x8d\xe3\xde\x9f\x7a\xfe\xf2\x7f\xc7\x05\x8a\xd3\xfa\xc3\x9f\x88\x6b\x88\xc9\xa1\xa0\x6b\x09\x90\xa1\xfc\x09\x13\x38\x5a\xba\x7f\x77\xbd\x3d\x9f\xab\x10\xed\xb5\x94\xbc\x82\x5f\x19\xed\xb5\xbc\x44\x2a\x4f\x51\xb1\xcd\x9b\xe5\x5c\xc8\x35\x6e\x3c\xb7\x89\x0d\x8f\x54\x1f\x6e\xf0\x42\x1c\x3b\x14\x07\xca\xd5\x12\xae\x17\xd9\xb3\x55\xe5\x99\xe4\xe1\xe7\x5f\xa6\xee\x86\xf0\xb2\xdb\x1f\x8a\x6e\x2f\x5b\xaf\x56\x05\x27\x9a\x08\xe3\xa4\xf2\x20\xca\x42\x71\xa0\x5c\x25\x3c\x77\x7e\xd7\x49\x51\xfb\xcb\x27\x69\xaa\xb5\x36\xe0\x91\x9e\x4b\xcf\x9a\x3f\x91\xc5\x6e\x8d\xb4\xa6\xd9\x00\x6b\x78\x06\x1f\xa2\x2c\x14\x07\x3a\x53\x22\xe9\xc3\x9f\xc9\x0c\xab\x42\x56\xea\x9f\x7f\x07\xb4\x3b\xef\x57\x7f\xf7\x25\xb4\x7d\x98\x31\xfd\x22\x49\xe3\xbb\x4c\x8c\x84\x36\xa2\x2c\x14\x07\xca\xd5\xcb\xa7\x79\xd9\xd7\x35\xa8\x3b\xbe\xb3\x6b\x74\x56\xe8\xc3\x07\x95\x4a\x1c\x64\x2e\x4a\xbe\x51\x3f\x29\x8c\x2a\x62\x0a\xaa\xfd\x89\x28\x0b\xc5\x81\xf6\xf6\xa7\xf7\x9b\x1d\x18\xdc\xe1\xfa\xcc\x15\x8d\x7c\xb7\xdd\x9f\x75\x16\xc2\xc9\xad\xe2\x56\x55\x81\x97\xed\x88\x9e\xc7\xba\xea\x2a\xfa\xdf\xfd\x3b\xee\x3f\xb9\xfa\x9f\x9b\x36\x74\xb2\xa0\x6e\xab\xe7\x93\xb5\x11\x9e\xab\xd8\x74\x45\x4b\x50\x85\x92\x6f\x3b\xfe\xe5\xd3\x5d\x0e\x35\x5b\x29\xd4\x91\x9b\xfa\x2b\x8e\xb0\x39\x32\x85\x6b\x6f\x11\x47\x0f\xc5\x81\x92\xe5\xae\xe3\x24\xe8\x41\x28\x95\xba\x8b\x77\xf9\x8b\xea\x65\x6f\x39\x14\x57\x1a\x3c\x8c\xec\xb5\x0a\xae\x7e\x03\xba\x88\x82\xc6\x29\x44\x59\x28\x0e\x94\xac\x25\xb3\xe6\x4e\xeb\x45\xa9\x25\xad\xe0\x03\x35\x16\xb5\x45\x29\x8e\x11\x61\xce\x17\xaa\x52\x68\x97\xa3\x24\x43\x6a\x36\xd2\x8f\x4f\x03\x0b\xc1\x81\xce\x55\x25\x3a\x81\x0c\xc6\x43\x6b\x82\x93\x57\xe2\x5e\x97\x58\x55\x88\x6e\x7f\xfa\x65\xac\xc9\x7d\xb7\xc4\xae\x7c\x30\x4e\x40\xf6\xe3\x0e\xa2\x2c\x14\x07\x4a\x16\xfd\x6f\x2c\x94\xdf\x8d\xba\xaf\x0f\xae\x34\x61\x66\x8d\x3b\xcd\x0c\x1b\xe0\x2e\xef\xd6\x28\xef\x67\x08\x0a\x38\x3f\xf3\xed\xc2\x43\x94\x85\xe2\x40\x7b\x7b\xf0\x19\x6b\x65\xc8\x5a\x42\xc2\x76\xe8\xe8\xdd\xba\x07\xeb\x93\x9a\x94\x26\xdd\xad\x11\xdd\xad\x6b\x14\x22\x17\x7f\x87\xa0\x1c\xfb\x2b\xfe\x1d\xf7\x9f\x64\xfd\x67\x72\x06\x1d\x2d\xa8\xe9\xd3\xf9\x68\x19\x65\xab\x3f\x1b\x7c\xef\x20\xe0\x3d\x5b\xf7\xd1\xc4\x61\xb2\x15\x77\xe4\x47\x14\x77\xf4\xed\x61\xc7\x92\x34\x01\xc2\x1c\x8f\x35\xc4\xe1\x43\x71\xa0\x68\x45\x66\x35\x19\x86\x71\x86\x8e\xb9\xa0\xde\xeb\x91\xe9\x9a\x18\x0a\x79\xaf\x51\xbe\x38\xb7\x50\x67\x15\x6e\xf0\x6a\x25\xb3\x11\x0b\x51\x16\x8a\x03\x45\x8b\x4a\x09\xa8\xb0\x36\x4a\x99\x6b\x0e\x60\xbf\xba\x6b\x25\xd0\xfc\x30\x66\xc8\xf2\xfa\xe2\xa6\x5c\xd4\x31\xe6\x23\xb5\xa5\xf8\xd3\xbb\x16\x14\x07\x3a\x59\xea\x57\x1d\xbf\x05\x5a\xd0\x7d\xee\x4d\xa0\xc9\x3d\x5e\x22\x16\xd8\x3f\xd1\x89\x73\xe7\x7a\xd3\x75\x09\x6f\xd9\x32\x26\xfb\x03\x3f\xa2\x2c\x14\x07\x8a\x16\x66\x6a\x58\xfd\xce\x43\x69\xc6\x7c\xb8\x3e\x86\xed\x70\x9b\x65\x2e\x2d\xca\x37\x0c\x19\x2e\xf9\x31\x7a\x81\x57\xe9\xdc\xa2\x05\x88\xb2\x50\x1c\x68\x6f\x5b\x5e\x89\x3c\x78\x44\x4a\xb2\xc4\x21\xb2\xdb\x6a\x34\xfb\x36\x8a\x7c\x47\x20\xa4\xef\xb5\x8d\xa6\x97\x9a\x25\x03\xeb\xf2\xc6\x12\x22\x5a\x50\x1c\x22\x5a\x1a\x7f\x15\x2d\xa8\x69\xf2\xf9\x68\xb1\x96\xb5\xba\x84\x92\x10\xd9\xad\xd4\x68\x37\x0e\x4e\x1e\x57\xa9\xc5\x3e\xfb\x88\x87\x66\xfe\x2a\x2a\x3d\x8b\xcd\xc2\x68\x79\x12\x71\xf8\x50\x1c\x28\x5a\xb0\x0b\xe5\x83\xfd\x68\x47\x7e\xb8\x2b\xda\xd7\x9a\x1e\x98\x0a\x2e\x74\x11\xd1\x1b\xbf\xdf\x4a\xef\xcb\x44\x49\xdc\x38\x1c\xa3\x41\x94\x85\xe2\x40\xd1\xaa\xb9\xc9\x91\x23\x98\xe6\xd0\xff\x6c\xa5\x93\x51\xfa\x19\x61\x67\xb4\xc9\x88\x57\x5d\xef\x22\x5d\x43\x78\x99\x74\x8a\xc7\xc5\x04\x44\x59\x28\x0e\x74\xb2\x22\x9c\x37\x9a\x2b\x2d\x4a\x68\xf9\x66\x37\xe7\x58\x1f\xdb\x85\x09\xb5\xc1\xb1\x54\xa3\x89\xea\x59\x3e\xf3\x9b\xde\x89\xda\xfd\x8d\x28\x0b\xc5\x81\xa2\xc5\xfc\x6e\xc4\x86\x97\x33\x3a\x6d\x3e\xf6\x0b\x07\xfa\xb4\xf1\xbd\xe7\xb7\x55\xdb\x1a\x58\x6d\xfb\x9f\x7d\xd1\xc4\xbd\xfd\xf0\x9a\x0d\xa2\x2c\x14\x07\xda\x5b\xf1\xc3\x3c\x35\xbd\xd5\x88\xc1\xa8\x58\xdd\xe4\x62\xf5\xcc\xb6\x0d\x74\xc3\x30\xbc\x85\x12\xe6\x7d\x4f\x56\xf3\xd5\xd2\x50\x13\x44\xb4\xa0\x38\x44\xb4\x1e\xfc\x55\xb4\xa0\x1e\x87\xce\x47\x0b\x03\x65\x64\x08\xdb\xf1\xd6\x57\x46\x8a\x86\xac\xaa\xaa\xad\x52\x4c\xc7\xd5\x51\x2b\xcd\x3b\x5f\x9d\x2c\x87\xfd\x9f\xec\x5c\xbd\x88\x38\x7c\x28\x0e\x7c\xd5\xba\x2e\xfd\xe6\xa4\xe2\x20\x75\xef\x86\xd9\xde\xed\xbe\x4f\xcf\x66\xed\x3e\x51\x95\xd5\xb7\x4f\x9b\xab\x0f\x1a\x31\xd5\x6c\xb2\x9c\x5e\xb5\x20\x38\x50\xb4\xbe\x39\x33\x0f\x38\xe2\x32\x08\xf5\x8d\xbe\x11\x2d\xbe\xe7\x45\x4a\xc6\x9a\x06\x5c\x98\x7b\xd6\x23\xec\x5b\xea\x86\x57\xd1\x7b\x1d\x51\x16\x8a\x03\x9d\xac\x9d\x6b\xcb\x24\x71\xf3\x0b\x0f\x9f\x0d\xf8\xf6\x8a\x3f\xd2\x46\xbd\x86\xd5\xb0\xf6\x88\x83\x4b\x4f\x85\x73\x4e\xaf\x36\xe4\xb3\x35\xa2\x2c\x14\x07\x8a\x96\x37\xc6\xf3\xde\x30\x8f\xe1\xdf\xc1\x51\xd8\xd2\x6b\xe2\xfd\x8a\xbf\x95\x2b\x62\xf8\x6c\x65\x94\xd8\x28\xc8\xc9\xf6\x60\xef\x14\x11\x65\xa1\x38\xd0\xde\x16\x53\xe2\x7e\x26\x7b\x14\x21\xe2\x7a\x27\xf6\x73\xb1\x81\x12\x5f\xa0\x9f\x35\x03\x83\xb1\x86\x0a\xac\xa9\xa4\xd3\x8c\xb6\x79\x11\x11\x2d\x28\x0e\x11\x2d\xef\xbf\x8a\x16\xd4\x63\xef\xf9\x68\xf1\xd3\x2a\xec\xdd\x99\xad\x92\xd0\x57\x3a\x9c\xb7\xb5\xb6\x30\xf1\x3b\x1a\x0f\x0a\x7e\xac\x45\xf2\xbe\xaf\x6c\x9c\xc1\x74\x9c\x1d\x71\xf8\x50\x1c\x28\x5a\xa8\xfd\x82\x1e\xda\xb9\x39\x6d\xa6\xd1\x8d\x5d\xf1\x96\x93\x1f\x29\xa3\x08\xcb\x0a\x12\xa5\x5f\x1d\x57\x8e\x13\x8d\x04\x9a\x3c\x42\x94\x85\xe2\x40\xd1\xda\xde\xe5\x33\x17\x37\x51\x78\x86\x8e\x17\xe7\xc8\xba\x3c\x45\xda\x97\xaf\xe1\x6e\x14\x3c\x17\x17\x43\x3a\x2b\x26\xf4\x6e\xf1\xf4\xe1\x00\x8a\x03\x9d\xac\x84\x16\xb2\xfd\xea\x46\x73\xd9\x7b\x97\x1b\x37\x14\x1c\xf1\x24\xe6\xdd\x46\x49\xb6\x4f\x62\x32\xe5\x2f\xc3\xa6\x7b\xc8\x7b\x94\x4e\x1f\x0e\x20\x38\x50\xb4\xcc\xb5\x25\x7d\x74\xcb\xe5\x0f\xe7\x46\xd2\x66\x53\xf8\xde\x1d\x57\x0b\x57\x44\x04\xf7\xd7\xa4\x6a\x1e\x08\x4d\xc2\xbd\x7b\x69\x11\x65\xa1\x38\xd0\xde\x92\x6e\x8c\x78\x75\x5e\x7b\x82\xea\xd5\xf3\x22\x75\xe5\x5e\xe1\x5a\xd6\xd1\xaf\x88\x65\xf7\x8e\x9f\xdb\xfe\x38\x34\x1c\xb7\x12\x30\x11\xd1\x82\xe2\x10\xd1\x4a\xfc\xab\x68\x41\x2d\x6f\x9c\x8f\x56\xc0\x81\xca\xa1\xe8\xee\xa7\x91\x6a\xec\xa3\x1e\xa2\xfd\xa5\x58\x85\x36\x45\xad\xa3\x37\x1b\x37\xbf\x5d\x7a\x24\x5e\xeb\xf5\x4a\x06\x71\xf8\x50\x1c\x28\x5a\xbb\x5c\xf0\xf4\xa4\xe9\x5a\x27\x83\x0d\x61\x73\x1c\x8a\x28\xcb\x99\xbc\x67\x7c\xbf\x5d\x70\x8b\x2b\x58\x4a\x30\x1c\x25\x3d\x4a\x11\x65\xa1\x38\x50\xb4\xc2\x06\xde\x39\xa6\x8a\xa4\x9b\xc5\x5e\x7f\x1b\xe3\x76\xb5\xeb\xc8\xe4\x4e\x1c\x2d\xa3\xc9\xf1\xf3\xce\x57\xf5\xd5\x29\x42\x0f\x31\x10\x65\xa1\x38\xd0\xc9\xba\x07\x1b\x95\x27\xde\xd1\xe6\xd6\xca\x14\x1a\xcb\xe7\x8c\xbd\x24\x2e\x6b\x94\x0d\xa3\x9e\xf4\x50\x7e\x9c\x21\x61\x71\xf8\xed\x31\xa2\x2c\x14\x07\x8e\x56\x1b\x67\x10\x3b\x93\xb5\xc6\xf2\xaa\x02\x05\xc3\x84\x66\x76\x92\xf8\x0c\x1a\xfe\xc3\x84\x15\x74\xb6\x0e\x96\x9f\x39\xd8\xdb\xa7\xd1\x82\xe0\x40\x7b\x3b\xb8\x51\x89\xc5\x59\x3d\x19\xa7\x57\x5d\x57\xf6\x9d\xbb\xcd\xe7\x01\xa1\x8a\x9d\xf7\x47\x3f\x7d\xb3\x12\xd5\x0b\x8f\xb4\xa3\xe9\x11\xd1\x82\xe2\x10\xd1\xaa\xf8\xff\x1f\xad\xc7\xc0\xdf\xad\x5e\x07\x8a\x63\xf9\x07\x06\x4b\xa1\xf4\x81\xd7\xdc\xd2\xa6\x93\xa5\x93\x7b\xd1\x54\xa2\x67\xa5\xa6\x30\x4a\x9e\xa4\x93\x1e\x74\xfb\x10\x91\xe2\x35\x54\x45\x77\xab\x02\x8b\x4b\x8d\xff\xbe\xcc\x37\x06\xde\x64\x2b\x3e\x5c\x96\xcf\xc3\x7d\x29\x93\x9e\xf9\x29\x7e\x1f\xd9\xad\x07\xc4\x0d\xcd\x6b\x0d\xd1\xe3\x22\x43\xe8\x71\x95\xd2\x01\x8e\xff\xbe\xc9\x5d\xf0\x26\x55\x0d\x23\x55\x80\xa4\x31\xc1\x18\x6d\x57\xdb\xb9\xa1\x3d\xe5\xdb\xa4\x0c\xac\x41\x44\xa6\x15\x53\x9f\x3c\xed\xa2\xf3\x3e\x5e\xfa\xbf\x59\x59\x84\xfa\x2d\xcf\x0f\xf0\x1f\x5a\x2d\x4f\xc3\xd2\x0c\xe3\x35\x1a\x83\x3d\x99\x70\x89\x42\x4a\x1a\x42\xe9\x2a\x33\x8e\xaf\x6a\x2e\x2a\x6c\xb4\x93\xc7\xb9\x23\x42\x08\xc5\x81\x06\xf8\x85\x6e\x3b\xd5\x0a\xce\x3a\x52\x9e\xcc\x06\xfc\x9f\x23\x3a\xb5\xed\x3f\x97\xe7\x67\x3d\x3a\xaf\x48\x7e\x68\xad\x77\x06\xde\x5c\x45\x94\x85\xe2\x40\x03\xfc\xa3\xf6\x8f\xb6\x81\x07\x34\x84\xd7\x62\xc9\x94\x84\x32\x26\x9a\x3a\x26\xe6\x3a\x57\x07\x52\x53\x79\xfa\x2c\x52\xba\xa6\x12\x37\x11\x65\xa1\x38\xf0\x8d\x5e\x2b\x65\xa4\x9a\x8d\x33\x15\x9e\xb1\x6a\x12\x38\xe8\x65\x6a\x1c\x96\xba\xe4\x68\x31\x04\x93\x4c\xab\xec\xb5\xda\x78\x7a\xba\xb0\x04\xc5\x81\x06\xf8\x35\x35\x62\xb2\x59\x0d\x26\x1e\xf1\x4e\x36\x46\x58\x22\xe3\x12\xc1\xb5\xe0\x66\xee\x7d\xdf\xf4\xdd\xa7\xd6\x9a\x84\xfd\x43\x69\x88\xb2\x50\x1c\x68\x6f\x19\x95\x68\x0e\xfb\xfd\x4f\x36\x0f\x13\x14\x4e\x3e\x7c\x2a\xb0\x4b\xf7\xb1\xa2\x0c\xe1\x1a\xec\xf5\x33\x96\x54\x1c\x55\x09\x9a\x44\x0c\x70\x28\x0e\x31\xc0\xfb\xfe\xea\xde\x01\x35\x66\xce\x47\xcb\x4e\x35\x87\x6d\x38\x57\x30\xcb\xf1\x48\x65\x52\x67\x27\xe0\x15\x55\xfd\x11\x59\xdf\x8c\x43\xce\x8a\xc2\x6d\x61\x5b\xfa\xe9\xd3\xd5\x0f\x28\x0e\x14\xad\xcf\x5c\xbb\x9e\x4f\x71\x8f\x72\x2b\xb3\x19\x70\x24\x4d\xa7\x26\x74\xf1\x88\xfa\x94\x7e\xf9\x7f\xf9\x18\xd3\x94\xd4\xde\xf5\x4e\x13\x51\x16\x8a\x03\x45\xcb\x6d\x6d\x23\x89\xf2\x2d\xb7\x49\xf7\xc2\x62\x95\xb1\xb5\x69\x09\x77\xed\xa3\x4a\x26\x22\xc1\xfa\xe7\x58\x2a\xf2\x3e\x70\xff\xd3\x7b\x07\x14\x07\x3a\x59\x05\xa1\x4f\xf6\x39\xde\x5d\x26\xab\x85\xe5\x7b\x7d\xa7\x30\xe1\xea\x0e\x71\x19\x96\xca\x3e\x1e\x3d\xfc\xc4\x57\xf0\x6d\xac\xd0\x0f\x51\x16\x8a\x03\x45\xab\x34\x86\x34\xcc\xff\xd2\xda\x25\x9d\x9c\x1e\x61\x07\xc1\x66\x5e\xf8\x87\x27\x56\xb7\x37\xec\x33\x45\x0f\x95\xad\xf7\x6f\xfc\x3c\x5d\xac\x80\xe2\x40\x7b\x2b\x8b\x1e\xcc\x68\x40\x9f\x7f\xf7\x7b\x9b\xef\xa0\x83\x61\xd1\xd1\xb0\xff\xa6\x8e\xc6\x8a\xaf\x57\xb2\xc3\x8b\x31\xbe\x47\x73\xda\x88\x68\x41\x71\x88\x68\x8d\xfd\x55\xb4\xa0\xae\x8d\xe7\xa3\xd5\xa6\x37\xbb\xb6\xc4\xcf\x4e\xf4\x30\xf7\x33\x1f\x9b\x66\xc4\x27\xdc\x14\x29\x6c\xd5\xaf\x2c\x77\x70\xf3\xda\x55\x66\xef\xc4\xea\x20\x0e\x1f\x8a\x03\x45\x4b\x8f\x65\xf9\xf3\xb2\x69\x6d\xc9\x1d\xa6\x66\x34\x43\x67\x94\x6f\x23\xf7\xe6\xe8\xd9\xf2\x2e\x4b\xaf\x8b\x13\x5d\xd2\x9c\x2b\xa0\x44\x94\x85\xe2\x40\xd1\x32\x31\x11\x4a\x4a\xeb\x9c\xbe\x17\x7c\xa7\x7b\x90\xd6\x33\x59\x5a\x4d\xaa\x46\xae\xea\xa8\xb5\x22\xd0\x9a\xf8\xd2\xa8\x63\x4d\x2a\xa2\x2c\x14\x07\x3a\x59\x78\x54\x0c\xe9\x07\xdc\x5a\xb5\x4a\xf3\xdb\xe9\x2c\xdf\x3d\xed\x94\x4e\x50\x68\xad\x32\x3b\x5a\xa4\x9f\x90\x5c\x1c\x73\xc7\x3d\xbd\xc6\x42\x71\xa0\x68\x09\xb0\x46\xaf\xd2\xfc\xc4\xaa\x8a\xc9\x7a\x11\x45\xb3\x54\xf9\xe2\x13\xc7\x4d\xd7\x7a\x89\xa9\xfe\xbc\xb4\x78\xd2\xb5\xad\xc2\xd3\xb7\x37\x50\x1c\x68\x6f\xbf\xcc\x2c\x51\x75\x55\x5f\xb5\xee\xc4\x7f\xf1\x99\x56\x22\x8c\x3e\x32\xaa\x04\x75\xde\xe5\x59\x54\xbb\xd3\xd0\x31\xef\x56\x9b\x2b\x22\x5a\x50\x1c\x22\x5a\xbb\x7f\x15\x2d\xa8\xf7\xfb\xe7\xa3\xe5\xc7\xb4\x76\x25\x53\xa0\x3d\x71\x5e\x92\xbf\xc1\x53\x8c\x7a\xd0\x8a\xc2\xb5\x9b\xc1\x87\xd0\xdb\x88\xbd\xa2\xaa\xeb\x39\x97\x19\xe2\xf0\xa1\x38\x50\xb4\xc6\x99\x43\x7c\x71\x15\x34\x7d\xcb\x06\xac\xc9\x26\x16\xc9\x4d\xb8\x12\x87\xb4\xda\x34\x69\xe2\x3c\x26\xa6\x53\x50\x0a\x3f\xc6\x21\xca\x42\x71\xa0\x68\x5d\x9c\x1c\x24\x41\x1f\xf4\x51\x63\x0c\xde\xd6\xf3\xfd\x40\xf3\x68\x4a\x77\xcc\xa4\x62\x54\x38\x5b\xce\xd7\xff\xf5\x6f\xac\x55\x14\x44\x59\x28\x0e\x74\xb2\x1c\x30\xc7\xaa\x24\xb6\xc7\x6b\x5b\x84\xc8\xd5\xe7\xb9\xd6\xaf\x12\x38\x10\xe9\xe6\xcb\xcf\x27\xba\xdd\x39\x0e\x98\xb8\x65\x45\x85\x28\x0b\xc5\x81\xa2\x95\x2b\x32\xa9\xfa\x86\x20\x4f\x5e\x2f\xd1\x42\xd2\x9b\xbd\x93\xff\x9b\x8b\xcf\x42\x3e\x11\x2a\x90\x84\xee\xdf\xd1\x58\xc6\x2e\x8f\x28\x0b\xc5\x81\xf6\xd6\xcb\x48\xc7\x9f\x3e\x2e\xbd\x35\x5f\xda\x46\xad\xe3\x55\xdc\xf2\xad\xac\x62\x02\xc6\xc5\x86\x8a\x8a\x2a\x7e\x62\x56\xb9\xba\x48\x7f\x8e\xbf\xe3\xfe\x27\x5a\x12\x0f\x51\x11\xdd\x1e\x50\x5d\xa5\x67\x1b\x49\xd2\xda\x8d\x4b\x72\x5b\x8a\x48\x2f\x7a\x35\xcb\x85\x06\xd6\x01\xf4\x68\x6a\xf3\x2d\xfb\x3c\xd3\x57\x19\xb2\x0e\x7e\x35\x2c\x9c\xed\xbb\xf2\x8f\xff\x38\xfa\x51\xd2\x7b\x7f\x2b\x79\x86\xeb\xb1\xbe\x13\x76\xbe\xe1\x1d\x51\xda\x3d\xbd\x1c\x29\x14\x66\xcc\xb2\x78\x1c\x0e\x50\xcf\x09\x54\xe5\xf3\x3d\x27\x2d\x5a\x7d\x14\x6a\xba\x19\x53\x58\xfc\xb5\xc9\x1d\x25\xf9\x1a\x93\x98\x14\x52\x57\x26\x49\xa9\x6a\x29\x0d\xbb\xfd\x51\x5c\x8f\xcf\xa0\xda\x4d\x44\x6e\xaf\xe2\xf5\x7c\x4d\x7d\xbe\xfd\x34\xf7\xf5\xbb\x2a\x19\xb3\xbc\xa9\x37\x2c\x5e\x51\x2b\x41\xee\x52\xfc\xcd\xa1\xc8\xbf\x09\xeb\xef\x6a\xfe\xa7\xe7\x44\x42\x85\xf8\xff\x9d\xf6\xee\x53\x47\xf7\xbd\x28\x49\xfc\x35\xc8\x7b\x92\x2e\x1b\xd1\x10\x4e\x96\xa6\xd4\x7a\x05\xb3\x13\x4b\x86\x74\x85\x11\xe0\x7a\xc3\xfd\xcf\x4d\x27\x62\xe0\xa6\x13\xec\xe1\xa6\x19\x6f\x67\xfa\x39\xd4\xb6\x20\xaf\xef\x41\x34\x97\x42\x6a\x8e\x09\x56\x04\xbd\x57\x86\x2a\x32\xfa\x1d\xd1\x70\x63\xff\x79\x6e\x2f\x76\xae\xe9\x24\xff\x16\x2c\x26\xd9\xeb\x37\x5d\xa5\xcb\x87\x0e\x25\xf1\x1c\x3a\x82\xf7\xe3\x33\x7c\x97\xaf\x15\xf4\xbf\xb6\xf3\x37\xb3\xfd\x5a\xf6\xef\x9b\x3c\xd7\x74\x12\xc4\x5e\x97\x46\x8b\x55\x12\x98\x35\x5f\x48\xd0\x39\xaf\xc0\x6b\x94\xf7\x31\x24\x50\xbe\xed\x65\x7d\xeb\xfa\x47\xd5\x37\xdf\x49\xff\x7d\x93\xe7\x9a\x4e\x9c\xed\xdb\xdb\xf8\x5f\x78\x35\xc6\x77\x39\x69\x26\x2b\x7b\x14\xb4\x2e\x77\x5d\x1c\x18\x7b\xea\x5a\xbb\x7d\x9b\x3a\x74\x43\x75\xf0\xdf\x37\x79\xae\xe9\xc4\xf7\x99\x9a\x56\x02\x8e\xcd\x2b\xde\xa6\xd7\x4e\x3f\x80\x5b\x0a\x12\x56\xdb\x3b\xbf\x05\x89\x60\x7d\x79\x91\x5d\x8e\x59\xc7\x49\xff\xbe\xc9\x73\x4d\x27\xf9\x62\x3a\x75\xdf\x4d\xb6\x7a\x23\xed\xd3\x2a\x5f\xba\x6b\x7d\xd0\xc5\xba\x90\xbc\x92\x59\x19\xbe\x6a\xfa\xb5\xfa\xfb\x0d\x94\x1f\xff\xbe\xc9\x73\x4d\x27\x49\x32\xa8\xcd\x1a\xbe\x77\x31\xc6\xbf\x76\x6f\xa9\x8f\x1a\x7c\x7d\x4c\x23\x4f\xa2\x1e\xd0\x97\x45\x25\xc0\x88\x45\x2a\xb1\x1b\xf5\x7f\xf3\x68\x08\x35\x12\xcf\xdf\x09\x63\xd2\xda\x09\x62\xc2\xee\xc7\x7a\x61\xdb\xca\x5c\xc3\x74\x30\xc6\xd4\xe5\xe0\x1e\x9a\xee\xc2\xf3\x8f\x5b\x70\x1f\x32\x5d\x38\x5d\xa4\x81\xe2\x40\x77\xc2\xaa\x37\x2a\xda\x74\x3f\x3a\x30\x09\x57\xf3\xc3\x13\x06\xdd\xcb\x02\xb7\x28\xf3\xb2\x00\x0b\xe2\xeb\xad\xc6\x89\xb1\x12\x9e\x3d\x88\xb2\x50\x1c\xe8\x4e\xb8\x40\xe5\x77\x25\x63\xe8\xc8\xf8\x35\x7d\xd7\x8d\xf7\x9b\x04\x7c\xa9\xb7\x56\xd4\x31\x9f\xe8\x4d\x71\x98\xa5\xc8\xdd\x1f\xc8\xf3\x45\x94\x85\xe2\x40\xf7\x96\x5c\xde\x00\xdd\x61\xdc\x0d\x1b\x2f\xac\xb4\xd8\xb1\x1a\x0f\xd5\xd0\xcf\xab\xe5\x27\x73\xf5\xaf\xe6\x27\x12\x6e\xf7\xbf\xac\x14\x38\xbd\x65\x41\x70\xa0\xbd\x4d\x1a\x88\xe5\xa0\x42\xdf\xd7\xe7\x94\x95\xc6\x29\x27\xdf\x20\xb0\xe3\xab\x8c\x98\x69\xd2\x6c\xe0\xcb\x0b\x76\xdd\x91\x64\x3c\x9d\x0e\x40\x71\xa0\xbd\x25\x7b\x9f\x56\xe5\xda\x41\x30\xf8\x0a\x2b\x8b\x1a\x85\xb3\xfc\x05\xeb\xd5\xda\xfa\x96\x39\xdc\xef\x58\x7e\xa3\x31\x76\x44\x4e\x33\xfe\x0a\x7f\xc7\x05\x8a\xa3\xf9\xc3\x9f\xfc\xb9\x9a\x43\x4f\xb1\xa0\x2e\xb8\xe7\x83\xc5\x6e\xb8\x3b\xc1\x25\x7c\xb5\x93\xeb\xa7\x9e\xc1\x37\x89\x1b\xdd\x34\x09\x38\x05\x93\xf1\x82\xca\xa4\x79\xa4\x58\x5d\x84\xaa\xcb\x88\x83\x87\xe2\x40\xc1\xa2\x4d\xd9\xe6\x8e\x88\xe6\x79\xe1\xef\x13\xad\xf0\x28\x36\x05\xb6\x92\xe8\x28\x47\x95\x0b\x8c\xbc\xa9\xa7\x7b\x7b\x2c\xcf\xb2\x8a\x28\x0b\xc5\x81\x4e\x55\x7f\x12\x77\x31\xc6\xc1\x5c\x54\x38\x16\xde\x05\x7a\x77\xc5\xb0\x58\x86\xd6\x26\xea\x3e\x96\x51\xe3\x8e\xeb\x19\xb6\x3a\x1c\xa2\x88\xb2\x50\x1c\xe8\x54\xbd\xe2\x68\xfb\x2a\x25\xee\x4a\xd3\xda\x62\x36\x79\x74\x6c\x56\x5e\xf7\xf3\x9a\xfb\xaf\xf7\x42\xf8\x27\x07\x3d\x38\xcd\x6d\x17\xe4\x10\x65\xa1\x38\xd0\xde\x62\x2c\x6d\x49\xaa\xa2\xc3\x71\xed\x89\xad\x81\x90\xa4\xb7\x15\x91\x1e\x2b\x17\xf7\x42\x31\xc2\xb8\x12\x1e\xf6\x35\xd9\x58\x99\x9f\xbe\x66\x82\xe0\x40\x7b\x6b\x75\xdf\x53\x8c\xdc\xca\xea\xa7\xa8\x9f\xb1\x1d\x56\xec\x42\xc2\x45\x3d\x31\xd6\x25\x53\x87\xf7\x0c\x3e\xfb\x21\x34\x2f\xa8\xee\x21\xba\x4e\xa0\xb8\xff\x04\xeb\x7f\xee\xda\xd0\xc9\x82\xba\xaf\x9e\x4f\x56\x3d\x3f\x51\x9e\x4e\xc3\x24\xba\xbd\xd0\x6d\xef\xb2\x4b\x16\x62\xad\xdc\xaf\xdb\xdf\xcb\xc3\x83\xaf\x5b\xed\xc4\x7d\xbe\x37\x76\x7a\xc9\x82\xe2\x40\xc9\xd2\x7c\xe4\xa1\x64\x2e\xc9\x67\xbe\x74\xf7\x80\x97\x94\x7f\xa9\xae\xa6\x37\x6b\x3b\x8d\xe7\x29\x60\x95\xfe\xfb\x51\xa2\x93\xc8\x05\x44\x59\x28\x0e\x74\xae\xfc\x8f\xae\x04\x63\x61\x7b\x85\xef\x68\x4a\x7f\xf6\x34\x74\x7a\x92\x24\x94\x74\x53\xe1\x28\xac\xe2\x8e\x70\x6c\x7c\x97\xad\x66\x00\xa2\x2c\x14\x07\x3a\x57\xb6\xe3\xd4\x93\xa2\x01\xd2\x89\x3c\xbf\x68\x2f\x3e\x78\xad\x17\xee\xaa\x67\xff\x10\x9b\x2a\x3e\xc4\x98\xd7\x25\x17\xeb\x45\x79\x17\xa2\x2c\x14\x07\xda\xdb\xf2\x01\xe6\xd7\xbf\x70\x64\x39\xfd\xbe\x6b\x73\xe0\x32\x93\x9b\xe6\x9c\x98\xbb\x44\x0a\x78\x35\x4f\x8f\xdf\x94\xae\xb8\x7e\x8d\x02\x51\x16\x8a\x03\xed\x2d\x13\xd9\x20\xff\xa3\xb2\xf2\x24\xa6\xc4\x4f\xe1\x0d\xb2\xd8\xe4\x97\x19\xa7\x5b\x94\xf7\xe6\xb0\x8f\xa2\xf9\xb5\x86\x26\x5d\x9d\x11\xcf\x85\x50\xdc\x7f\x92\xf5\x9f\xd9\x19\x74\xb4\xa0\xe6\x4f\xe7\xa3\x65\xbb\xf4\xd4\xfc\x13\xe3\xdc\x15\x7a\x5e\xb2\xb1\x84\x9b\x2b\xd9\x5f\x57\x5c\xbf\x66\x72\x91\x8d\x5a\xbf\x0b\xfa\xe8\x88\xfd\x74\xf1\xf4\x57\x85\xe0\x40\xd1\x22\x9b\xbb\xdb\x78\x37\x57\xe5\xb5\xf8\xc5\x88\x23\x58\x46\x1f\xe5\xf0\x4b\xc3\x9c\x87\x5f\x02\xbe\x8f\x24\x06\xce\xd6\x67\x0c\x9c\x3e\x6d\x43\x71\xe0\x86\xa6\x3b\x4f\x2a\x73\xcc\x59\xd6\x26\xad\x26\xd9\x88\x71\x3c\x63\x88\x82\x5f\x17\x89\x14\x8b\x97\xbb\xd6\x15\xe3\x86\x9a\xeb\x75\x9f\x36\x34\x41\x70\xa0\x93\x45\x84\x62\x4b\xb5\xaa\x9c\x8a\x13\x36\xaf\x2b\x95\x67\x13\x95\xec\xef\x7a\x7f\x68\x8a\xe4\xd3\x63\x43\x47\xb6\x2c\x42\x8f\xb9\x14\x44\x59\x28\x0e\xb4\xb7\xe3\x0f\xd8\x6d\x53\xf4\x3f\x06\xfc\x56\x7e\x2c\xdb\x52\xa7\x79\xb9\xdd\xf4\xcb\x3a\xbd\x5b\xdb\x87\x5c\xce\xfc\x19\xf1\x78\xd6\xff\xef\xc3\x31\x04\x07\xda\xdb\xdd\xba\x69\x9d\xb1\x7b\xd2\x9d\x07\xa5\xa1\xd7\x48\xd8\xa6\x82\x5c\xea\xe5\xbb\x39\xde\x3d\x51\x74\x70\x9e\xcd\x31\x56\xaf\x92\x46\x44\x0b\x8a\x43\x44\xeb\xef\xba\x4e\xa0\xe6\xc9\xff\x3f\xba\x4e\x1c\x94\x12\x65\xd4\x05\xa5\xe3\x4b\x07\x43\xf4\x32\x7c\xca\xe6\x6e\xe7\x5c\xd5\x8d\x74\xdd\x5e\x2a\xba\xa7\x46\x5a\xf5\xe2\xb4\x9f\x0b\x8a\x03\x45\x4b\x34\x72\x72\xff\x39\xb6\x9c\x4f\xf6\x9a\xac\xc5\x98\x8e\x8d\xc4\xf7\x5d\x8d\x47\x2a\x0f\x03\xe3\x39\x7b\x47\xdd\xfb\x85\x0b\x4e\x97\x9d\xa0\x38\xf0\x44\xeb\x57\x50\x88\x47\xa1\xaf\x11\x01\x7b\x34\x11\xb1\x88\x4c\xb0\x67\x75\x3a\x31\x01\x3b\x5b\xb1\x65\xca\x3a\x43\xc8\xea\xef\xf9\xd3\x89\x16\x04\x07\x7e\x6d\x85\x39\xc1\x82\x33\x3f\x45\xec\xd5\x76\xaf\x71\xe0\xdb\x9d\xce\x2b\xc3\x98\xda\xbf\x04\xaa\x99\x8a\xf6\xe3\x2c\xdd\x27\x44\x88\x11\x65\xa1\x38\xd0\xde\xd2\x5d\x4f\x50\x1f\xdb\xdb\x68\x91\x36\x53\x27\x4f\x1e\x4d\x3f\x34\x5a\x0c\xd2\x10\x68\x79\xae\xdf\xb0\x2e\x21\xb0\xc7\x59\x3e\x80\x28\x0b\xc5\x81\xf6\xd6\xcd\x1b\x83\xbb\x77\x27\x7c\x87\x38\xaa\xc9\xef\x4d\x57\x9f\x0e\xf6\x52\xcd\x86\x82\xe4\x2e\xb5\x6a\xf1\xc6\xe5\xd9\xb6\x71\x72\x44\xb4\xa0\x38\x44\xb4\xfe\xae\xeb\x04\xea\x79\xe8\x7c\xb4\x5a\xeb\x68\xb8\xe4\x4c\x14\xb5\x3c\xa9\x22\xbd\x82\x6f\x14\x72\x35\x60\xf5\xc0\xed\xda\xee\xf9\xe6\xda\xb5\xea\x0c\x4c\x70\xcd\x20\x0e\x1f\x8a\x03\x45\xab\xd3\x69\xc5\x33\xf3\x6b\x31\x87\x91\xe0\x7e\xa2\xaf\x4e\xe3\x8f\x0a\x1b\xa3\x3e\xef\x12\x03\x93\xdc\x94\x74\x92\x1c\x4b\xe9\x3b\x88\xb2\x50\x1c\xe8\x64\xdd\x8a\xaa\xe9\xa0\xca\xb5\xe6\xe6\xd0\x38\xae\x97\x10\x57\xb0\x63\x22\xcd\x14\xc8\x7f\x9c\xb2\xa5\x86\x62\xcd\xc5\xe3\xd8\x88\x8b\x28\x0b\xc5\x81\x4e\xd6\x77\x65\x86\x92\x3e\xe7\x20\x33\x33\x69\x5b\x9a\x3c\x9d\x9f\xdf\x82\x57\x5b\x4d\x4a\xe7\x65\xbd\xf9\x84\xde\x76\x6d\x92\x84\x65\x20\xca\x42\x71\xe0\x81\x60\x5a\x6c\x9d\xa8\x94\x0e\x68\xcf\x55\xeb\xb7\xd2\xf2\x5d\xc7\x0a\x68\xc4\x87\x79\xf8\x17\x3f\x6f\x6f\x5e\x6e\xaf\x1e\x18\x3f\x1d\x08\x10\x1c\x68\x6f\xbb\xfb\xab\x70\x07\xec\xc8\xb7\xb4\x13\xd4\xa2\xd2\x85\xf4\xd8\x5b\x6e\xda\x31\xae\xaf\xa3\x56\xd4\x72\x0d\xb6\x59\xac\x89\xf8\x22\xa2\x05\xc5\x21\xa2\xf5\x77\x5d\x27\x50\xcf\xbd\xe7\xa3\xa5\x27\x5d\x3a\x29\xf3\x22\x19\xd6\xf7\xc6\x77\x43\xb7\x4a\xc8\xfd\x52\xc9\x75\x89\x6d\xf9\xfd\x25\x2c\x17\xd5\xc9\x69\x4a\x96\x90\xd3\xc5\x72\x08\x0e\x14\xad\xa2\x07\x7e\xb6\xc3\x9e\x05\x9f\xe4\x58\x9c\xbb\x81\xed\x0f\x06\x23\x69\xf6\xf4\x16\xfd\xe8\x37\xbc\xa9\x69\x3c\x37\x0e\xc6\x25\x11\x65\xa1\x38\xd0\xc9\xea\x44\xb9\x40\xd7\xf1\x81\xfc\xc9\x3b\x9b\x13\x09\x9b\xd0\x44\x92\x32\xb3\x10\xd3\xcf\xd6\xfb\xa3\x7d\x2f\x47\xfc\x58\x6a\x88\x4e\x33\x00\xc5\x81\x4e\x16\xbe\xab\xf9\x33\x5a\x1d\xff\x9d\x6f\x9c\x95\x27\xa2\xf1\x6e\x7d\xaf\x0c\x47\xe3\x72\xfc\x29\x55\xc6\xdd\x74\x5a\x53\xd2\x98\x75\x11\x65\xa1\x38\xd0\xde\x66\xd9\xb5\x9c\x54\xb4\x3d\x87\xf5\x0c\x62\x2b\xfe\xfc\xb0\x4d\x26\xc8\x94\x89\x45\xf5\xce\xc7\x59\xe4\xf3\x7b\xbc\xf7\x3d\x9b\xe8\x88\xb2\x50\x1c\xf8\x0b\x0a\x13\x8d\xb5\x60\x32\x27\x25\x6b\x14\xce\x77\xaa\x5d\x71\x4e\xb4\xaa\x6c\x4c\x65\xfd\x2d\x05\xbe\x37\xfc\xa7\x9f\x9b\x75\xc3\x10\xd1\x82\xe2\x10\xd1\xfa\xbb\xae\x13\xa8\xf5\x8d\xf3\xd1\xda\x55\x4e\xb3\x30\xdd\xe2\x6d\x5d\x8c\x0c\x10\x14\x5a\x9f\x30\x32\x97\xbc\x9e\x9d\x4a\xe9\xc4\x56\x2c\x92\x6b\x92\x65\x5b\x7d\xfa\x8a\x0f\x8a\x03\x45\xeb\x56\xf8\xe3\x18\xe7\x9a\xb5\x66\xf6\x30\xc3\x10\xd5\xd7\xef\xc4\x5b\x0c\x8e\xd3\x8b\xa2\xe8\xe4\x05\x26\x05\x6a\xa7\xbe\xae\xce\x9d\x5e\x5e\x20\x38\xd0\xc9\xc2\x3e\xa1\xbb\xf3\x71\x01\xbb\xe9\xb8\x64\xbe\x8f\x90\x51\xf7\x42\x80\x77\xe9\xbc\xfb\xa3\x87\xea\x18\x4d\x8d\x94\xec\xa5\xbf\x1a\x11\x65\xa1\x38\x70\xaf\x9c\x78\x52\x14\x69\x0e\xaf\x86\xbf\x6b\x7c\x81\xce\xfa\xc7\x6d\xb4\xbc\x2c\x12\xf1\x43\xd7\xee\x06\xe7\x95\x7e\x7f\xa0\xf6\x74\x66\x08\xc5\x81\xf6\xb6\xd8\xf4\xca\x62\x8f\x68\x88\xb1\xd4\xb7\x8b\xd7\x69\xb8\x1a\x46\xca\xa7\xde\xdb\xfd\x4c\x9a\xb5\xb9\x1d\xfd\x7e\xb9\x5d\x21\xe5\xf4\x11\x09\x8a\x03\xed\x6d\xac\xb7\xa2\x64\x7a\xcb\x4f\xb4\x2b\xe2\x39\x85\x92\x64\x3f\x69\x31\x63\x49\xaa\xb2\xa5\xca\xbd\x1e\x8f\xf2\xf8\xde\x2c\x38\xa2\x42\x44\x0b\x8a\x43\x44\xeb\x2f\xbb\x4e\xa0\xd6\xaf\xff\xb7\xeb\x44\xec\x5c\xd7\x89\x0a\x57\xa2\x18\xa6\xf2\xe0\xcd\x92\xdd\x10\x4c\xba\xcd\x15\x92\x02\xed\xe7\xea\x41\x21\xc1\xa1\x8b\x3a\x18\x0e\xc9\x21\xc5\xc0\xbf\xaf\xf3\x9d\xeb\x3a\x79\x76\x67\xbd\xda\xa1\x2a\x93\x62\x3a\x00\xdb\x6c\xee\x59\x45\xdb\xb4\x59\xad\xb3\x80\x93\x9d\x80\x47\xdd\x0b\xc5\x98\xc4\xb2\xe0\x7f\xdf\xe4\xb9\xae\x13\xda\x10\x9b\xeb\x57\x6b\x57\xf6\x9b\xbc\x5b\x0c\x16\x05\x84\x27\xf7\x85\x8b\xa9\x7c\x0f\x22\xa8\x82\xcd\x17\x43\x9f\xe1\xeb\x91\xfd\xdf\x2c\x2d\x42\xfd\x96\xe7\x07\xb8\x47\xe0\xa5\xb4\xf0\xfb\x94\xa1\x66\xf7\x8a\xb3\x7e\x4d\xe9\x15\x94\xc9\xa7\x8a\x64\x45\xcb\x26\x44\xdc\x5f\xbe\x72\xfb\x75\xe3\x2e\x22\x84\x50\x1c\x68\x80\x57\xa7\xd8\x3d\x22\x72\x29\xfa\x20\xa8\x4d\x6a\x2d\x85\x16\xb9\x50\x85\xed\xf7\x99\x7b\x6e\x5a\xeb\xd7\xe6\xfb\x5b\x31\x1f\xe0\xef\x11\x65\xa1\x38\xd0\x90\x51\x14\x09\x4b\x33\xe0\x89\x97\xec\xf9\xe6\xf2\x9c\x48\x79\xf3\x22\xec\xb9\x20\xe6\x5b\xda\xb7\xaa\x81\x41\xe8\xfe\xd3\xf8\xc4\xa7\x4f\xbe\x50\x1c\x68\xc8\xb4\x57\xe9\x78\x8c\xd8\xf9\xae\x3f\xfa\x14\x1f\x8f\xa6\xf0\x28\xf5\x29\x5f\x32\xcd\xb7\x74\x0c\x75\xce\x99\x1b\x19\x75\x8d\x03\x52\x88\xb2\x50\x1c\x68\x6f\xd9\xf1\xdf\x16\xfb\x7a\x63\x52\xaa\x93\x6f\x5b\x8d\xdd\xfe\x9d\x6b\xdf\xd2\x1d\x9d\x48\xbf\x5f\x17\xfd\xbb\x85\x89\xda\x00\xff\xb4\x63\x11\x8a\x03\xed\x2d\xc3\xd5\x6a\x9e\x9f\xfd\x6e\x4c\x7d\xce\x1b\x96\x6c\xd7\x5a\x22\x30\x05\xd4\x49\x48\xe4\x1f\xb3\x6e\x39\x2c\xf7\x91\xdc\x11\x74\x40\x0c\x70\x28\x0e\x31\xc0\xff\xae\xeb\x04\x6a\xcc\x9c\x8f\x96\x13\x69\x32\x1e\x63\x41\x05\x13\xc5\x5b\x4f\x83\x8a\xa4\x18\xad\x4a\x95\x3c\x38\xb3\x95\xbc\x34\x85\x17\x41\x61\xfd\xcb\xf2\xd3\xcb\x26\x14\x07\x8a\xd6\x15\x0d\xff\xa9\x8e\x57\x36\xc7\x3c\xb1\x1f\xc9\xba\xc7\x61\x27\x3c\x43\x94\xef\x1a\x13\x44\xa4\x5c\x1d\xb3\x2f\x90\x3e\xf5\xeb\x43\x94\x85\xe2\x40\x27\xeb\x02\x29\x77\x1d\xa3\x29\x85\xd8\xcf\xa0\x90\x3b\x8e\x12\xa1\xfd\x2a\xde\xce\xca\xf9\x0f\x12\x2f\xbe\xb6\x93\xac\x29\x27\xcf\x39\xfd\x96\x05\x8a\x03\x9d\xac\x35\x6a\xc0\xfe\x72\xcb\x7d\x1d\xcd\xe3\x4c\xde\xa8\xf6\xa2\x76\x4e\x55\x07\x43\xd5\xce\x5c\xbe\x01\x85\x13\x9a\xe3\x20\xc1\x0a\x44\x59\x28\x0e\xb4\xb7\x5f\xae\xe0\xbf\x4e\x15\x49\x32\x34\x44\x79\x1e\x4f\xe0\x57\x7e\x91\x25\xef\x8b\x32\x6e\x87\xeb\xc7\xcb\xab\xcd\x47\xb0\xd2\x0b\xa7\x4b\xa1\x50\x1c\x68\x6f\xe9\xd8\x30\x96\xbf\xf0\xdf\x19\x6c\x35\x39\x34\xbc\x7d\x49\x99\xc3\x7a\x6b\x72\xe0\x75\x45\x8f\x96\xe7\xe1\xb4\x54\xe2\x86\x69\x17\x22\x5a\x50\x1c\x22\x5a\x7f\xd7\x75\x02\x75\x6d\x3c\x1f\xad\x65\x4e\xd7\x21\xdd\xb0\x75\xbf\x0e\x99\xa1\xe2\x7b\xf5\xa6\xa6\x18\x86\xbd\xa8\x3d\x2d\x4a\x5f\x0e\x97\xed\xd9\x83\x96\xbc\x4d\x11\x87\x0f\xc5\x81\xa2\x95\x28\x86\xff\x46\xdb\xd1\x3b\xcc\x65\xbb\xe3\x99\x0c\xda\xf3\x88\xfb\xc9\xa8\x34\x95\x82\x65\x0b\x8c\xe6\x3c\x4f\x30\x43\x58\x07\x11\x65\xa1\x38\xd0\xc9\xd2\x66\x5e\xfe\x61\xfe\xf1\xd0\xb4\xeb\x22\x65\xc7\xb7\xd6\xeb\x4f\x68\xd2\xb5\x15\xbc\x5a\x6d\xb0\x05\x61\x1d\xf5\x5f\x96\x68\x03\x11\x65\xa1\x38\xd0\xc9\x2a\x17\x4d\xb8\x41\xf5\xd6\x3a\xd6\xf8\x4e\x94\xb7\x23\x73\x51\xf5\xee\x86\xe0\x90\x6e\x74\x86\xee\x2d\x2d\xf6\xbc\x0b\x06\xb0\xd3\xc7\x7f\x28\x0e\xb4\xb7\xcb\xa1\x27\xdd\x42\x75\xdb\x0a\xac\x85\xa5\x31\xd2\x1c\x59\x18\x04\x4f\x92\xa8\x09\xd9\x9b\xfc\x47\x75\x8a\x6c\xee\x2d\xf1\x9f\x36\x8b\x41\x71\xe0\x17\x22\x3f\xa5\x01\xd9\xfc\xfb\x38\xad\x69\x01\xaf\xc3\x7f\x1b\x57\x3a\x3c\xe1\x8f\xaf\x56\x4d\x16\xc5\xc8\x8f\xa7\xcc\x20\x78\xbf\x81\x88\x16\x14\x87\x88\xd6\xdf\x75\x9d\x40\xbd\xe1\x3f\x1f\xad\xbb\xab\x15\x92\x5e\x0e\xef\x07\xb7\x83\xa4\x1f\xe4\x88\xa9\x12\xde\x82\x65\xea\x5f\xcb\x48\x1b\x33\x4b\x90\xfa\x7e\xf2\xab\xe5\x13\xe2\xf0\xa1\x38\x70\x0b\xff\x5e\xf3\x05\xc7\xc1\xad\x1f\x6f\x9d\x30\xc7\x4b\xab\xe6\x7c\x16\x22\xab\x8d\x5f\xd7\x85\xa4\x08\x1a\xfd\xda\xc8\xa1\xa6\xdd\x3f\x6d\xe1\x87\xe0\x40\x27\x8b\x4f\x84\xc9\xd1\x36\x3c\xc4\x04\x47\xb2\x42\x29\x78\x84\x51\xb7\xbb\x84\xff\x81\x97\x33\xcf\x44\xff\xbb\x43\x8f\x52\xaa\xfd\x16\x44\x59\x28\x0e\xdc\xc7\x31\x4e\xd0\x86\xe2\x5d\x7b\xc2\x23\x06\x4b\x28\x0b\x36\x39\x0c\xb9\xf5\x7c\x63\xce\xa8\x52\x43\xa2\x82\xd1\x60\x79\xeb\x9d\x3a\xa2\x2c\x14\x07\xda\xdb\x5c\xbc\xcf\x5a\x94\x71\x37\x47\x24\x77\xc3\x9a\x0f\xda\x5a\x6f\xa6\xbc\x89\xa1\x53\xee\x94\x9a\x28\xdc\xdf\xed\x0b\xb2\xf0\x18\x3d\x7d\x85\x07\xc1\x81\xd7\x42\x23\xd3\xf9\x12\xa5\x22\xbf\x86\xc4\xa6\x3c\x7c\x75\xec\xca\x6d\x8a\x61\x1b\x3a\x76\xf5\xb5\x36\xd5\xf1\x40\x01\x26\x81\x44\x0e\xa2\xeb\x04\x8a\xfb\x9f\x68\x9d\xe9\x3a\x81\xfa\x83\xb2\xb3\x5d\x27\x66\x52\x49\xdf\xc7\xfd\x04\x88\x50\x79\x72\x18\x57\x75\xe6\xf7\xd2\x7d\x67\xca\xac\x7a\x70\xdf\xd7\xe4\x7c\xb7\x7e\xd9\x2d\xf3\xf5\x0c\xca\x83\x77\xb2\x26\x55\x50\xa1\xd0\x28\x36\x8d\x3d\x17\x4c\x63\x71\x33\x1d\x5b\xd4\xa8\x35\x5b\xc9\xef\xe0\xa9\xb4\x1c\x99\xb5\x17\xa8\xeb\x04\xaa\xf2\xf9\xae\x93\x7d\x8c\xca\x4c\x9e\xe7\x92\x6f\xd7\x4d\x53\xcb\xa2\x67\x7b\xf7\x84\x7f\x0b\x7c\xc4\x6a\xce\xf1\x7e\xe5\xfc\xd4\xa7\x34\x85\xef\xec\x5f\x1f\x4d\x71\x85\x11\xed\x7e\xae\xa6\x53\x3d\xda\x4b\x04\x70\x72\x29\x5f\xce\xbd\x44\x7d\xdf\x13\x40\x41\x3a\x5b\x5b\xb6\x2d\xeb\xa5\x7c\xda\x75\x02\x55\xf3\x7f\xbb\x4e\xa2\x40\x5d\x27\x2f\x2d\x6b\x0a\x3c\xc9\x46\x93\x46\x44\x4b\xeb\xd4\xa5\x24\x72\x92\xf8\x75\x73\xe1\x3d\x84\x6a\xd9\x65\xc7\x81\xb4\x2d\xdc\x52\xff\xdc\x75\xe2\x0f\xee\x3a\x49\x3c\xf9\xe9\x22\xb5\x42\xf9\x60\xf7\x5b\x17\x6e\x35\x6b\x34\x8d\xf4\x10\xae\x80\xc8\x91\x80\x83\x98\x4a\xdc\x89\x4b\x0b\x89\xca\x3f\xcf\xed\xfd\xcf\x75\x9d\xdc\x4c\xde\xda\x79\xa8\xaf\xab\x02\xc7\xbe\x7e\x71\x7c\xfa\x86\xeb\xfa\xc8\x7e\x15\xfa\x58\x28\x9c\x7d\xda\xc9\x59\x1c\xc7\xf2\xdf\xff\x1e\xc3\xff\x5c\xd7\x49\xc6\x30\x33\xd5\x4f\x3c\x6a\x9d\xbd\x92\x72\xab\xc2\xbe\x8e\x3b\xdd\xaf\xe6\x87\x2f\x48\x4d\x66\xb7\x0d\xe3\x24\xb6\xde\x18\x90\xfc\xf7\x4d\x9e\xeb\x3a\x21\x51\x67\xf1\x57\x67\x36\x6b\x4a\x5f\xea\x0c\xc6\xe1\x67\x95\xef\x9d\x7f\x1e\x5a\xee\x2f\xe4\x90\xd9\x52\x70\xe5\x4d\x11\x51\xca\xbf\x6f\xf2\x5c\xd7\x89\xaa\x90\xcd\xcb\xa3\x16\xfd\xfc\x5c\x74\x17\xe7\xe4\x71\x21\x1e\xe6\x61\x39\xbd\x0b\x4f\x22\xa2\x3c\x2e\xeb\xbc\xee\xad\x68\xfc\xf7\xbf\xad\xf1\x3f\xd7\x75\x12\x28\xea\x55\x51\xc5\x24\xf7\x48\xb7\xca\x81\xca\x72\x2c\xf7\x43\x1a\x8e\x1d\xb5\xb0\x07\x33\x89\xa9\x8c\x4e\x4d\x41\x31\x35\xe3\xbf\x6f\xf2\x5c\xd7\xc9\xb7\xe9\x5e\x4c\xa7\x75\xf8\x8f\x0b\xc5\x34\x9e\xbb\xe3\x6f\xb9\x8f\x1c\x3b\xf6\x7f\x90\xd2\xaa\xcb\x90\x04\xd2\xc6\x5d\xfd\x3d\xfc\x7f\xf3\x68\x08\x35\x12\xcf\xdf\x09\x6f\xd2\x7c\x71\xd9\x08\xa2\xb6\xad\x1d\x32\x7f\x55\x48\x55\xed\xe8\xbf\x23\x18\xf7\xd4\xd9\x29\x58\xf7\x5a\x2e\x8c\x98\x44\xf5\xb4\xe1\x02\x8a\x03\xbf\x67\x9b\xc2\x57\xc1\x6e\x5d\xde\x72\x3e\xc0\xd2\xa8\xa7\x16\xc7\x9e\x89\x4f\x5c\xe1\xcb\x10\x93\x0d\x6e\xf7\x2b\xbb\x41\x5d\x57\x7d\xfa\x9e\x0d\x82\x03\x2f\x2b\x7a\xe0\xd5\xa6\x76\x8f\x72\x5c\xc3\x30\xbe\x3c\x34\x50\x1e\x31\xc7\xf7\xa6\x39\x7b\xbf\x14\x8b\xa2\xa3\x89\xe5\x1b\x29\x55\xc7\xe9\xb2\x22\x04\x07\xba\xb7\x30\x17\x66\xa2\xaf\xb0\xfc\xa4\x0d\xdf\xf1\x56\x2a\xfa\x16\xd2\x2b\x3f\xf4\xe3\xa1\xce\xd8\xe6\x20\x27\x5a\x53\x8d\x05\x16\xa3\xde\xe9\xb7\xb2\x10\x5c\xa0\xf8\xa5\xb3\x65\xf5\x37\x0b\x2f\x2f\x7b\x14\x57\xe7\xd1\xc4\x7e\x90\xba\x52\x7b\x68\xb1\xc8\x8f\x1d\xd4\x71\x65\x73\xa2\x09\x6e\x51\x3b\x59\x7c\xfa\x9d\x24\x14\x17\x28\x8e\xfa\xff\xf4\x37\x63\xb5\x27\x03\x4a\x6f\xda\x95\x13\xb4\x15\x86\x14\x89\x38\x4c\xec\x14\x82\xbb\x83\x8c\x26\x31\xae\x47\xd1\xab\x5c\xca\x51\x43\x74\x9d\x40\x71\xff\x69\xed\xfd\x73\x35\x87\x9e\x62\x41\x5d\x70\xcf\x07\x8b\xa8\x78\x24\xe6\x83\xee\xeb\x97\xb5\xba\x97\xa8\x04\x4c\x5b\x5c\x73\x0e\x48\x6b\x4c\xbe\xaf\x7e\x34\x14\x8e\xe6\x35\xbf\x86\xad\x7f\xfa\xee\x12\x82\x03\x05\xeb\x09\x5e\xc7\x61\xfd\xdc\x7c\x83\xb7\xf8\xac\xd5\xd5\x12\xc7\x57\x5f\x35\xd4\xf6\x85\x8a\xed\xf1\xe0\xb9\x16\xfc\xfa\x69\x24\xc1\x88\xb2\x50\x1c\x28\x58\x68\xee\x8f\x74\xd5\x98\x1d\xbb\xab\x43\x59\x68\x1a\xe2\x50\x70\x9d\xa4\x4a\xef\x1a\xdc\x18\xc9\xe5\x90\xa5\xfb\xf5\xd1\x99\x29\x1e\x51\x16\x8a\x03\x05\x4b\x2b\x46\x5a\x77\xc5\xd9\xe0\xc1\xe3\x32\xcf\x8a\xf0\x2c\xef\x76\xa9\xeb\x9e\xfc\x29\x47\x33\x56\xf9\x03\x6f\x54\x1a\x9b\xbd\x14\x10\x65\xa1\x38\x50\xb0\xc8\xaf\x16\xc4\xae\xc8\x16\x14\xe8\xb9\x5e\xea\x0a\x9d\x70\xf0\x42\x9f\x4a\xb5\x42\x45\x11\x33\x76\xb0\xbd\xf1\x6b\x93\x5d\xe7\xf4\xe5\x38\x14\x07\x0a\xd6\x11\xd9\xa7\x5f\x5f\x6e\xa0\xf0\x1d\x73\xea\x32\x1f\x13\x26\x04\x14\xac\x29\x1c\xe1\x17\x72\x1d\xd7\xb6\x92\xbd\xf9\xea\x45\x6d\x8e\xe8\x3a\x81\xe2\xfe\xf7\xbf\x4e\xfc\xff\xaa\xeb\x04\xea\xbe\x7a\x3e\x59\xa5\xb9\x27\x1e\xdc\x9f\xfa\xb9\x28\x3f\x86\x98\x04\x11\x27\x1c\x29\x26\x19\x5d\xb9\x59\xe5\xa5\x3e\x21\x11\x77\x49\xbf\x97\xf3\xf4\x9f\x5e\xa0\x38\xf0\x4b\xb6\x39\x1e\x8f\xab\xb2\x8d\x21\xe5\x43\x9e\xa2\x80\x0d\x39\xcd\x3d\x54\x2a\xe2\x5b\xd2\xf1\x98\x18\x85\x57\x2f\xb6\x10\xdc\xfe\x76\x7a\x6d\x81\xe0\x40\xc9\xa2\x7c\x41\x91\x36\x3e\xe3\x35\x3a\x54\x9f\xb8\xf7\x2c\x4d\x3f\xb2\x40\x8c\xf6\xd6\x26\x4d\xad\x0f\x6e\xa3\x36\x5f\x84\x7c\xdc\x67\x44\x59\x28\x0e\x94\x2c\x17\x6a\xcc\x14\x7a\x9b\x1b\xb9\xcc\x46\xf5\xe4\xde\x82\x5c\x3a\x11\x3b\x61\x0b\x36\xec\xfd\x9a\xe6\x5b\x1d\xe9\xde\xbf\x1c\x4f\x3f\xef\x87\xe2\x40\xc9\xfa\xfe\x4e\xee\xcd\x96\x87\x21\x7a\x8d\xd6\x82\xba\x5e\xde\x2c\x85\x6c\xc9\xac\xac\x94\xc4\xf1\x5e\xe0\xc5\x3e\x47\x94\xd7\x7b\x85\xa7\xef\xee\x20\x38\x50\xb2\xb0\xb5\x65\x69\x9c\xaf\x67\x58\xa2\xe3\x06\xd7\x8c\x6a\xc1\x04\x05\x56\x89\xd9\x18\x62\x6d\x42\x56\x1a\x19\xdb\x9a\xdd\xf8\x3e\x20\x9e\x0b\xa1\xb8\xff\xfd\x1a\xc1\xff\xef\xba\x4e\xa0\xe6\x4f\xe7\xa3\x35\x86\x55\x7a\x63\x9b\x4f\xa3\x38\x2d\x11\xd5\xce\x87\x52\xa7\xe8\xfe\xcb\xc7\xbc\x74\xc1\x38\x01\x49\xd7\xa3\x65\x82\x56\xd6\x4e\xff\xe6\x03\x8a\x03\x45\x4b\xe7\x52\x5f\xe9\x94\xf1\xa7\x8d\xb9\xc7\xaa\x30\xbe\x2a\xf7\x2c\x31\x09\x52\x93\x7e\x17\xb4\xf1\x2b\xe3\x0d\xf1\xf2\xe8\xc5\xa7\xaf\xad\xa0\x38\x50\xb4\x74\xbf\x85\x3b\x78\x5f\x92\x5d\x4c\xb8\x98\xf4\xa2\xbc\xa0\xd6\x77\xe2\x57\xcc\xe0\x7e\xe7\xe6\xcf\x8e\x98\xc9\xad\xfb\xd1\x36\xfe\x88\xb2\x50\x1c\x28\x5a\x15\x42\x31\xf0\x9d\x03\x87\x55\xf7\xf2\x08\x4a\x91\x5e\xd1\x1b\x86\x38\xba\x6e\xd5\x51\xfc\xdb\x58\xb1\x6f\x9f\xf9\x90\xf4\x9d\x2e\x39\x40\x71\xa0\x68\xad\xe5\x88\xf2\x3c\xf0\x0f\x0f\x0e\xe9\x3d\x64\x7b\x22\x2d\xaf\x42\x50\x71\xbb\xa3\xaf\xac\x38\xc2\x20\xff\x2b\x19\x1b\xdf\xfa\x93\xd3\x45\x32\x08\x0e\x14\xad\xdd\x7a\xd2\xfb\x69\x8a\x5f\xbd\x0f\xfc\x62\x56\xe7\x1f\xdf\x55\x6b\xc3\xc7\xbd\xd6\xa8\xc7\x42\xb3\x15\x49\xb2\xe3\xb2\xe4\xa4\x76\xda\x75\x02\xc1\x21\xa2\xf5\x77\x5d\x27\x50\xf3\xe4\xf3\xd1\x7a\x27\xf5\x62\x0f\xc8\x24\x90\x3f\x71\xb0\x58\xe0\x3e\xc8\xfe\x19\xf9\x3c\x8d\x6a\xef\x62\x7e\x15\x1d\x69\xaa\xf1\x60\x15\xc0\x84\x38\x7c\x28\x0e\xbc\x9a\x35\xd2\x5a\x56\x95\x5a\x63\x66\xaa\xd8\xe4\x0d\xf3\x67\x1c\xf8\x24\xc6\x8c\x5b\xe5\xf2\xd2\xb9\x71\x18\xab\xba\x93\x3b\xf3\xf4\x3b\x7c\x28\x0e\x14\xad\x92\x35\xa7\x5d\x75\x42\xad\x98\x1d\xa2\xfc\xeb\x96\xb1\x21\xb4\xa9\x31\x02\x56\x28\x4c\x21\x2b\xbf\xec\xc9\x47\xcc\x85\xf2\x4e\x9b\xda\xa0\x38\x50\xb4\x78\xcc\xd1\xc6\x77\x7d\x47\x7f\x8e\x30\xad\xaa\x99\x7e\xc3\xdb\xfe\xe0\x89\x67\x8f\xfe\x12\x53\x66\x7e\x6e\x37\x73\x84\x27\xd5\x00\x51\x16\x8a\x03\x45\xab\xd8\xc7\x33\x12\xf3\x27\xb7\xc2\x44\xdc\x64\xe4\xe1\xf8\xd7\xa4\x30\x79\x81\xd4\xc5\x84\x68\xef\xc4\xc4\xa8\xcc\xbb\xca\xe8\xa7\xbf\x2d\x14\x07\x8a\xd6\x9a\xe9\x14\xa9\x9b\xc6\x2e\xcd\xb0\x0a\xc1\x45\xaa\xe5\x8f\x25\x9d\xf4\x14\xb4\xd6\xbd\x0a\x1f\xbd\x69\x8b\x0f\xbc\x42\xae\xb4\x20\xa2\x05\xc5\x21\xa2\xf5\x77\x5d\x27\x50\xcf\x43\xe7\xa3\x65\x3c\x95\xe3\xcd\xed\x45\x24\x97\x3e\xc9\x74\xa9\xf6\xae\x78\xb2\x39\x8b\x1c\x7e\x41\x8b\xe7\x82\x89\xea\x77\x4a\x54\xe9\xad\xdb\x88\xc3\x87\xe2\x40\xd1\x32\x0c\xfc\x89\x4d\x8d\x6e\x3f\x73\xb2\xbe\x31\x78\x30\x68\x50\x1a\x6e\x4d\x3d\x98\xd6\x74\x2b\x24\x57\xdc\xf8\xbe\x08\xc3\x8b\xd3\x5e\x1e\x28\x0e\x14\xad\x1b\x26\x35\xba\x6f\xe1\x6e\xbf\xdd\x3c\x7e\x77\x8c\xb1\x4c\xe5\x61\x4a\x1d\xa7\xb0\x60\x2d\x14\x27\x6f\x2a\x6f\xf0\x25\xb7\x7a\x20\xca\x42\x71\xa0\x68\x2d\x25\x08\x26\xc4\x35\xdc\xa5\xdf\xfc\x64\x42\xdd\x44\xba\xdb\xf2\xb2\xa6\x6b\x1e\x57\xde\x2f\xf3\xc5\x90\x2c\xfe\xbe\x08\xed\xe9\xa7\x59\x50\x1c\x28\x5a\xbb\x71\x15\x63\x1e\xf1\xef\x5a\x4b\xcb\x23\x2d\xef\x70\xa5\x62\xb4\x8f\x5a\x8c\xc4\xe6\x3f\x90\xba\xa1\xe8\x9b\x96\xa5\x15\x1d\x7d\xfa\x6e\x1c\x82\x03\x45\xcb\x28\xfe\x57\x7d\x9f\x30\xe7\xbd\x0c\x9e\xcb\x3d\x5b\xae\x13\xb3\x4a\x58\x9a\x38\x4f\xf2\xf9\xa2\x72\xa5\x7e\x3f\x2a\xbf\xbb\x51\x81\x88\x16\x14\x87\x88\xd6\xdf\x75\x9d\x40\x3d\xf7\x9e\x8f\x16\x63\x63\xa6\x51\x17\xbd\x70\x2c\xed\xce\x67\xc1\xdb\xf6\x75\x68\x38\x72\xaf\x8e\x2f\x09\x57\xb2\x96\x3c\x2b\x93\x6e\x78\xf9\x78\x1d\x71\xf8\x50\x1c\x28\x5a\x2d\xe6\xc6\x01\xee\x37\x74\x18\x32\x99\xa7\x35\xf8\x5c\x25\xee\xdf\x92\xdf\x7f\x6b\xed\x95\x98\x58\x8a\x23\x9c\xfb\xb6\x93\xfc\x3b\xa2\x2c\x14\x07\x8a\x96\xe7\xcf\x5f\xe6\x51\xf7\x6e\x35\x96\x50\x51\xc9\x9b\x45\xec\x92\xc6\x73\xe8\x10\x57\xa3\x50\xf8\xe3\xaa\xdf\xb5\xc7\x15\xd3\xf2\x41\x94\x85\xe2\x40\xd1\xfa\xc8\x63\x96\x3e\xf1\xdd\x21\xe5\x63\xf1\x58\x62\xd9\x55\x7f\x52\x7b\xa1\xe2\x5b\xed\x2a\x6c\x93\x8f\x69\xf8\x06\xd2\x45\x34\x8b\x4e\x3f\x83\x87\xe0\x40\xd1\xa2\xab\xbd\x5a\x36\x5d\xbf\xda\xdf\x2b\xaa\x3b\xfa\x9e\x9f\x1c\xff\x22\x6e\x97\xa3\xf6\x2f\x3f\xcc\x45\x95\xf0\xe9\x70\xdf\x3c\xfb\xd3\x5e\x39\x08\x0e\x14\xad\xc8\xa3\x67\x7d\xa2\x0e\xd5\x2e\x43\xb7\x42\xa3\x2a\x07\x1b\x5c\x0d\xb5\x8a\x89\xb0\xdd\xbe\xc2\x63\xda\x48\xc6\x24\x98\x4a\xb7\x10\xd1\x82\xe2\x10\xd1\xfa\xbb\xae\x13\xa8\xf5\x8d\xf3\xd1\x12\x78\xec\x49\x3c\xf4\xb4\x84\x62\x7d\x3f\x63\x62\x91\xff\x4d\xde\x3b\xfc\x4c\x97\xe5\x96\x93\xa6\xce\xe5\x2f\x19\x24\xb0\x88\x8d\xd3\x0f\x5f\x21\x38\x50\xb4\x18\x86\xdb\x29\xea\x76\x49\xa7\xa3\x08\x9a\x1c\x43\x5a\xa2\x2d\xf6\x52\x57\xc9\xf4\xc5\x1e\xb4\x15\xeb\x52\x19\x4c\xf2\xe2\x9c\xfe\xc7\x26\x14\x07\x8a\xd6\x81\xf7\xfb\x16\xef\xd6\xfb\x78\x29\xaa\x1d\x43\xcc\xe3\xba\x95\xcc\xc3\x11\x6d\x3f\x34\x1e\x8a\x53\xdb\xe7\x91\x97\x99\xec\x9e\x20\xca\x42\x71\xa0\x68\x51\x8a\x74\x17\x5a\x2a\x52\xa9\x87\x57\xdd\x7a\xb4\xf6\xe2\x24\xa9\x13\x43\x89\x46\x21\xf3\xbd\x0a\xdb\x44\x45\xc4\x54\x87\x58\xf2\xe9\xd3\x01\x04\x07\x8a\xd6\x32\x2c\x41\x22\x87\xdf\x22\xe7\xf5\xe7\xca\xfb\x0f\x71\x27\xf0\xdb\xeb\xbf\x4b\x75\xab\xbc\xba\xf9\x92\xf4\x52\x20\x6b\x54\xdf\xfd\xd3\xd7\x3b\x10\x1c\x28\x5a\xe6\x66\xd8\xc2\x5a\xba\xbb\xb3\x4e\x5d\x47\x01\x94\x5e\xa5\xf7\xca\x07\x57\x29\x23\x5d\x33\xdf\xeb\xf6\x55\xd3\xbe\xe6\xdd\xb5\x44\x44\x0b\x8a\x43\x44\xeb\x2f\xbb\x4e\xa0\xd6\xaf\xff\xb7\xeb\xc4\xff\x5c\xd7\xc9\x6f\xc3\xd6\x1e\x51\x21\xae\xa9\xb5\x07\xb3\x1f\x65\x7e\x25\xd8\xf9\x97\x2e\xd2\x2a\x74\xd3\x73\x66\xe3\xfa\x84\x63\x39\xa0\x61\xff\xfb\x3a\xdf\xb9\xae\x93\xa1\xca\xed\x18\xec\xea\x4a\x15\xd6\x87\x2e\xbf\x54\x69\x6f\x2f\xa4\xfa\x2a\x38\x14\x2c\x7a\xbc\x3f\xa8\xda\x98\xa0\x59\xfc\x89\xf1\xef\x9b\x3c\xd7\x75\x62\x14\xa9\xf1\xe3\xdb\x15\x71\xe2\x71\x86\x01\xb2\x03\xe6\x19\xe3\xbb\x76\x3d\xa4\x1a\x2a\x77\x5d\x48\xdb\xdb\x37\x3d\xf8\x79\x92\xff\x6f\x96\x16\xa1\x7e\xcb\xf3\x03\x3c\x62\xef\x21\x7e\x7a\xab\x6c\xd6\x56\x4a\xd8\xd8\x78\xdb\xb6\xac\x75\x11\x80\xfd\xc1\x72\x22\xe8\x81\xbc\xc8\x14\x63\xd9\x78\x2c\x22\x84\x50\x1c\x68\x80\xc7\x6c\x17\x66\x10\xac\x2e\xae\x27\x85\x6a\xf5\xdd\x36\x24\x6d\xcd\x6d\xc0\xfa\xde\x46\x61\xf0\x19\x25\xc4\x25\x73\x5c\x10\xff\xf4\xbf\x18\xa0\x38\xd0\x00\xa7\xef\xa7\x7e\x4c\xc2\xad\xb5\xbe\x28\x7a\x64\x77\x72\xe3\x47\x45\x73\xcf\x95\xd2\xa0\x8f\x3a\x77\x9e\xce\x29\x78\x46\x0f\x47\x68\x20\xca\x42\x71\xa0\x01\x3e\x76\x71\x20\x36\x2a\xf5\xd2\xe7\x6e\x56\x1c\x7a\x06\xf7\x9b\x1f\xf2\x14\x05\x3f\x14\x2b\x1c\x67\xe2\xa8\xe5\x8d\x51\x56\x5b\x9c\xfe\x0f\x1d\x14\x07\x1a\xe0\xb7\xbe\x85\xd3\x28\xad\xc5\xdf\x69\x8f\x17\xcd\xc5\x4d\x4e\x92\x3d\xbe\xaf\xec\x9e\x12\x90\xf7\xe6\x7b\xd9\xfb\x47\x5f\x05\x49\x4e\x2f\x47\x50\x1c\x78\x5a\x92\x3a\x24\x34\x2e\xe5\x2d\xea\xf1\xa9\x65\xc3\xbf\xf3\x32\x6b\x4c\xdf\xc5\x67\x0e\xfa\x0a\xfd\x89\x31\xfc\x0e\x25\xa8\xd7\x76\x4f\xa7\x25\x10\x1c\x62\x80\xff\x5d\xd7\x09\xd4\x98\x39\x1f\xad\x6e\xe9\x67\x44\xca\xa1\x52\xc1\x8a\xbe\xcc\xfc\x1d\x3e\xc1\x33\x78\xde\x84\x40\x5f\x7a\x7f\xf0\x96\xa6\x6e\x55\xfc\xba\xc0\xe9\x3a\x30\x14\x07\x8a\xd6\xcf\xd5\xe0\x24\x52\xf9\x72\x57\x47\x97\x6b\x3a\xe2\x17\x69\x9e\xfb\x4f\xdf\x4c\xb3\x14\x08\xd6\xa5\x60\x4d\x97\x5d\x56\x4b\x07\x10\x65\xa1\x38\xf0\xff\x64\x3d\xff\xe4\x81\x57\xe1\xd5\x7c\x53\x94\xbe\x5f\x74\xbb\xe9\xc3\x78\x5f\xeb\x30\x4f\xc7\x1d\xfc\xc1\x64\x7f\xfc\x90\xd8\x85\xd3\x8e\x45\x28\x0e\xdc\x67\x2d\xdd\x0f\x4f\xe0\xc3\x51\x95\x29\xd3\xd6\x63\x7e\x63\x8d\xfd\x4b\xff\x37\x81\xb4\xe3\x14\xed\x3d\x09\x42\x56\xb4\x8c\x27\xa7\xff\xce\x03\xc5\x81\xa2\x65\x41\x06\xa7\x12\x6a\x2e\xb3\x62\x1c\xee\x34\x70\x4f\xbd\x1a\xe5\xa0\x1b\x10\xe5\xbb\x74\xf7\xe1\xb6\x4d\xdf\x40\xeb\x2d\x91\xd3\x3e\x29\x28\x0e\x14\x2d\x45\x60\xb5\xc2\xe2\xad\x01\x0b\x99\xfb\x76\xaa\xc0\x1a\x9f\x0c\x46\xc7\xde\xdb\xbd\x9e\x8c\xa6\x97\x72\xea\x2f\x33\x17\xc3\x85\x10\xd1\x82\xe2\x10\xd1\xfa\xbb\xae\x13\xa8\x6b\xe3\xf9\x68\x71\xfd\x5a\xd9\x98\x99\x95\x23\xb9\xc0\x51\x44\xdd\x75\x5b\x69\x6b\x68\xa3\x4d\xc2\xe6\xf6\xc6\xd6\x0b\xe9\x4b\x9e\xc0\xe1\x49\x19\xe2\xf0\xa1\x38\x50\xb4\x74\x71\x18\x15\x69\x08\xeb\x24\x33\x9e\x5f\x22\xc5\xab\x38\x9a\x57\x9e\x28\x65\x97\x96\xe2\x7e\x10\xe0\x77\x0d\x08\xfe\xf4\xb9\xf8\x74\xad\x06\x82\x03\x45\x0b\x90\x95\x36\x98\xd6\xbb\xd0\x97\xdc\x1f\xd0\x6c\x7e\x4b\x3c\x38\xcf\x6d\xf6\xd9\x35\xa5\x07\xfe\xcc\xcd\xf6\x5a\x41\x89\xf7\x4e\xff\xf3\x08\x8a\x03\x45\x2b\x87\x52\x30\x89\xf1\x07\xdb\x94\x68\x0a\x5d\xef\x7b\x1c\x93\xa2\xbd\x5d\xa2\x2d\xf7\x0e\x72\x4f\x4e\xa7\xcb\xfd\x96\x18\x7a\xa7\x5f\xf7\x42\x71\xa0\x68\x4d\xc8\x57\x98\x35\x5c\x6b\xd5\x9c\x8e\x35\xd0\xa5\x58\x0d\x7c\x6c\x8c\x13\x2b\x95\x51\x48\xd1\xf3\xd9\xe8\x9e\x24\xce\x32\xd7\xe9\x77\x0c\x50\x1c\x28\x5a\x56\xa2\x68\xf5\xeb\x7b\x23\xcc\x17\x33\x43\x62\x5d\x55\xbb\xbb\x15\x30\x8b\x14\x9a\xa4\xe6\xa8\xac\x1a\x27\x7d\xe7\x2d\x8e\xd8\x10\xd1\x82\xe2\x10\xd1\xfa\xbb\xae\x13\xa8\x37\xfc\xe7\xa3\x65\xd8\xcf\xa0\xc7\xfd\xf2\x07\x0e\x57\x53\xe5\x61\xbc\x93\xa6\x41\xe9\xeb\xb9\xa4\x29\xd4\x1a\xdc\xbc\x6c\xd3\xa4\xfe\xf4\xb9\xff\xef\x03\x35\x04\x07\x8a\xd6\x9b\x42\x3c\x25\x9c\xdf\x6f\x30\x8e\xc7\x2d\x74\x7b\x69\x76\xb7\x82\x17\x13\x17\x63\xab\xa8\xbf\xa4\x07\x9a\xff\x70\xc2\x94\x22\x40\x94\x85\xe2\x40\xd1\x4a\xa1\x5b\x43\x7d\xed\xcd\xff\xc5\xee\x59\x8f\xce\xd8\xc3\x9a\xf7\xfc\x87\x19\x5d\x3c\x8c\xb8\x7c\x85\x5e\x34\x1f\x2e\x53\x16\x49\x23\xca\x42\x71\xa0\x68\x8d\xb3\x99\x12\x58\xf4\x74\xd5\x0d\x88\x8a\xd0\x78\x5e\xfe\x8e\xbe\xc7\x3b\xf9\x79\xb0\x52\x07\x2d\x8e\xe9\x27\xc6\x76\xc0\xd4\xde\xe9\xc7\x67\x10\x1c\x28\x5a\xd7\x5e\x9b\xb8\x5b\x39\xdf\x1a\x95\xd6\x17\xd3\x57\xbd\x91\xf8\xbc\xc1\xee\x6d\xdf\x4a\x84\xa5\x13\x6e\x57\x99\x9c\xd7\x6a\x83\x18\xa2\x2c\x14\x07\x8a\x16\xe4\x7f\x9d\x20\x1a\x38\xa0\xe4\x75\x67\xdb\x48\x24\x0e\x99\xf0\x23\x6c\x6d\xae\x33\x64\x7b\x7d\x7d\x1f\xc9\xed\x78\xeb\xcb\xb1\x5b\xdd\xea\x30\xce\xfa\xca\xc9\x23\xd5\xa1\xa8\xbb\x67\x5b\x00\x1f\x0f\x6f\x5c\x34\xb1\x4f\x3b\x69\xbd\x3a\x43\x7d\xf3\xad\x72\x53\xf5\xf6\xd2\x51\x8c\x7e\x3c\x13\xaa\x28\x73\x76\x85\x49\x00\xa8\x8d\x04\xaa\xf2\xf9\x36\x12\x89\xea\x83\xd9\x56\xc7\xb0\x29\x7f\x67\x9e\x16\xfd\x10\x15\x9d\x9a\xae\x60\x72\xa3\xfb\xcb\x9f\x3e\x69\xa1\x89\xc2\x59\x66\xf6\xcf\xce\x39\xc8\x3e\x6f\x4b\x70\x98\xef\x67\x3f\xff\x4e\xd4\xb4\xa1\xdd\xa5\xc2\x96\x7d\x42\xbf\xb8\xf7\x38\xfe\xaa\xdc\xfd\x26\x83\x03\xac\xd3\x36\x12\xa8\x9a\xff\xdb\x46\xd2\x07\x6a\x23\xc9\xf1\xe0\x8c\xa8\xc5\xa6\xb6\xad\x43\x6d\xf7\x4d\x78\xc1\x6f\x2c\xda\x12\x6f\xf9\x56\xd5\xab\x59\xa3\x4f\x90\xf0\x7d\x78\xd2\xfc\x3f\xb7\x91\x34\x81\xdb\x48\x5a\x8c\x2e\x0c\x5b\xc8\xd7\x52\xcf\x57\x49\xc6\xcd\x6b\x5a\x2a\xe4\x26\xd1\xf1\x65\x7c\x1b\x08\x28\xa1\x11\xd5\x23\x0c\x7f\x61\xf9\xcf\x93\xf5\xa6\x73\x6d\x24\x82\x1a\xd4\x07\x3a\x0f\xde\x35\x98\x73\x46\x0d\x5e\xda\x1b\xc7\xb6\x41\xeb\x9a\xee\x31\xf8\x5e\x3b\x5b\x61\x62\x36\x1d\x44\x6b\xf7\xef\x9b\x3c\xd7\x46\x32\xc9\x85\x63\xaa\xcc\xdb\xf8\x4c\x6b\xc7\x70\x16\xbf\x42\x9b\xc5\x3a\xa8\x39\x25\x7f\xa1\x30\x7a\xb6\x36\x44\xe9\x5a\xdb\x02\xeb\xbf\x6f\xf2\x5c\x1b\x89\x43\xe9\xa0\xc7\x67\x2a\x6c\x1a\xdb\xfd\xf7\x05\x43\x32\xfd\x46\xe8\xf7\x34\xcb\xc9\xd1\xc5\x9b\x95\xe1\x17\x97\x5a\xcb\x69\xf7\xff\x7d\x93\xe7\xda\x48\xf0\x3e\xf5\xc7\x3f\xb9\x11\x34\xef\x46\xf1\x20\x00\x3f\x95\x97\x41\x52\xac\x07\x6b\xcf\x22\x29\x4e\x93\x00\xa5\x84\x34\xcd\xd1\xf6\xdf\x37\x79\xae\x8d\xa4\x7a\xc7\xcf\xcd\x84\xb8\xb3\x5e\x37\xea\x09\x5a\x97\xd4\xbb\x26\x41\x2e\xdc\xe9\x71\xef\xab\x57\x8f\xbb\x99\x71\xcb\x98\x2c\xea\xfe\x7d\x93\xe7\xda\x48\x70\x5d\xf0\xd2\x18\x78\xdb\x3e\x7d\xdd\x7d\xf6\x64\xf4\xb5\xbf\x7f\x5c\x40\x29\x1f\xd5\x22\xd9\xcd\xe3\x88\x05\xd6\x50\x9e\xf2\xf5\xff\x9b\x67\x3d\xa8\x91\x78\xfe\xd6\x96\x17\x54\x8e\xbe\x61\x92\x35\xa8\x92\x36\x92\xdb\xa3\x7c\x98\x44\xc6\xf3\x23\xc6\x6d\x45\x3d\x52\xcc\x7a\xf0\x46\x31\x39\x99\x27\xe2\xf2\x0b\xc5\x81\x6e\x6d\x4e\xea\xee\x0f\xa3\xdd\x12\x51\xfa\x03\x42\x69\xb2\x29\xab\x86\xbb\xc4\x1f\x8f\x06\xfa\x66\x62\x17\x4e\x99\xa6\x94\xeb\xa9\x9e\x36\xd5\x42\x71\xa0\x5b\x9b\x37\xd1\x91\x95\xf1\x98\x6e\xcc\x0a\x63\x54\x78\xda\x5d\x4d\xf5\x69\xb4\x4a\xa9\x1a\x71\x39\x31\xa9\x72\x11\x99\x56\x4c\xd7\xd3\xb7\x1b\x50\x1c\xf8\xcf\x07\x97\xc2\xdf\x7a\xc3\xaf\x2d\x5e\xa2\xce\xe2\xd7\xab\x72\xde\x28\xa1\x3c\xae\x49\xf6\xae\x26\x71\x63\x7c\x5e\x50\x17\xfc\xeb\xf4\x83\x27\x28\x0e\xf4\xdb\xde\xe0\xc9\x62\xc7\x22\xbb\x79\xbb\x8a\x62\x7d\xc1\x85\x6a\x6b\x60\xba\xf6\xb6\xc8\xab\x1f\x07\x57\x43\x3f\x76\xa8\x97\xe8\x25\xe4\x9d\x2e\x98\x43\x70\xa0\x5b\xdb\xfb\xd4\x0f\xd5\x71\x66\x6a\xe1\xcf\xd6\x83\x64\x50\x47\xb9\x46\xe1\x7c\x7c\x5c\xda\x43\xed\xc4\x23\x2d\xcd\xd7\xc4\x5e\x2b\x39\x21\xda\x48\xa0\xb8\xff\xfd\xf3\x92\xbe\xbf\x69\x23\x81\xba\xe0\x9e\x0f\xd6\x97\x1b\x7c\x9b\x6c\xe6\x9a\x3d\x52\x37\x49\x71\x77\x63\x5c\x18\xab\x35\x3f\x08\x19\xdd\x3b\x6a\xb7\x11\x7b\xa8\x14\x8b\x69\x0c\x3b\xed\x81\x87\xe0\x40\xc1\xa2\xee\x5d\x6e\xe8\x21\xed\xbd\x82\xaf\xd3\x8c\x16\xb0\xb9\x1a\x11\xed\xbb\xc6\x3a\x42\xea\x5e\x99\x27\x54\x96\xf6\xb9\x75\xe0\xf4\x8b\x18\x28\x0e\x14\x2c\x56\x03\xf9\x4f\xe2\x0a\xfd\xf7\x94\xbe\xe7\xff\xee\x1b\x67\x65\x09\x24\xf1\x1c\x78\x64\xd4\xe3\x63\xf8\xa1\x4c\x63\x79\x67\x2c\xff\xf4\xd3\x72\x08\x0e\x14\xac\xcf\x5f\x39\xde\x2e\x39\xd2\x48\x75\x0f\x4d\xf5\xf2\x4d\xbe\x43\x79\x49\x37\xad\xbe\x7c\xaf\x07\xf8\x78\x18\x53\x2d\x13\x11\x7a\xda\x00\x0c\xc5\x81\x75\x44\xfc\x9d\xd3\xf9\x27\x07\x85\x5b\x38\xae\x19\xed\x62\x9c\x9e\xb1\xcc\x40\x42\xc1\x35\x16\xf3\xe3\x2f\xff\x1f\xd6\xfe\x3a\x2a\x8b\xee\x8d\xdb\x87\x69\x14\x14\x04\x29\x69\x25\x14\xe9\x06\x69\x09\x41\xe9\x6e\xa4\x91\x96\x06\xa5\x04\x41\x5a\x90\x4e\x01\xe9\x2e\x11\x69\x69\x41\x42\x91\x0e\x25\xa5\x4b\x1a\xe4\x5d\xcf\x7a\xef\x6b\x9e\xfb\x19\xee\xf5\xdb\xac\xe5\xf7\xff\x63\x9d\xb3\x66\x5f\xc7\x5c\x33\x7b\xcf\x67\xce\x3d\x98\xad\x4b\xaa\xf5\x1c\x51\x16\xc4\xc1\xc4\x4a\x49\x5b\x4a\x30\x70\x4c\x9b\x3c\x9b\xea\xb6\x59\x2c\x76\xc1\x2d\x0a\x19\x5a\x9a\x7d\xf2\xfe\xf2\x1b\xb3\x97\xcc\x58\xa5\x4e\xcf\x11\x31\x12\x10\xf7\x4f\xf3\x92\xa6\x0b\xc5\x48\x40\xf7\xd5\xf3\x66\x05\xd0\xe0\x57\x3f\xbe\xdc\x92\x76\x33\x56\x54\x9a\x38\xdd\x5c\x85\xa9\xb2\x26\xbb\x4b\x63\x48\x39\x62\x40\xe3\x8c\xbb\x70\x4e\x11\x71\xf6\x20\x0e\x66\x16\xbe\x67\x59\x72\xd2\xcc\xe1\x3d\x23\xfe\x02\xb3\x5e\x26\xce\xdd\xbd\x2f\x79\x64\xb2\x1c\x69\x89\x37\xf9\xfb\x2c\x71\x96\x76\xa1\xa5\x57\x10\x07\x33\xeb\xce\x6e\xc0\x2f\xd3\x64\x31\xd1\xfe\xdb\xaa\xb7\x6f\x94\x2a\x24\xac\xb7\x8c\xc5\xff\xd1\xb5\xa3\xaa\xd9\x2a\x25\xf8\x99\xf2\x19\x6a\xc1\x09\xe2\x60\x66\x19\x73\x63\x5a\x7c\x0e\xe8\xef\xdd\x7e\xa9\xf9\x12\xfd\x33\xb6\x9b\x95\x9c\x9e\x0f\x2d\x2a\xf1\xe3\xf9\x31\xe6\xc5\x85\xc9\xc2\xbb\x88\xb2\x20\x0e\x36\xb6\xef\xb4\x06\xe6\xe3\x36\x59\x96\xae\x04\x15\x31\x7b\xb7\x25\xcc\xda\x72\x6a\x50\x17\x77\x88\xd9\xf7\xa5\x46\x50\x8a\x9e\x46\x40\xa9\x42\x10\x07\x33\x6b\xf2\xd3\x03\xd4\xfb\x84\x2e\x0b\x43\x15\x55\x91\xbe\xeb\x49\x6a\xa2\x1b\x5e\x25\x5a\x0f\x36\x0e\xb8\x1c\x6d\xcb\x88\xab\xce\x5a\x11\x13\x3d\x10\xf7\xcf\xe7\x05\x4d\x17\x8b\x91\x80\x9e\x9f\xfe\xe3\x5d\xbf\x43\xa1\x6e\xae\x64\xc5\xbc\x6b\x50\xc3\xa8\x43\x2f\x57\xca\xab\x29\x4e\x33\x11\xa2\xdf\xee\x1d\x3f\x7f\x2d\x20\x55\x09\x40\x4b\x28\x20\x0e\xa6\x56\x8c\xc7\xbe\xd8\x74\x67\x3d\xb7\xca\x62\x67\x0c\x16\xd1\x74\x8f\x5a\x8f\xe8\x91\xf0\x5d\x1a\xc3\x0c\xd2\xd7\x64\x66\x74\x34\x25\x88\xb2\x20\x0e\xa6\x56\xff\xb6\xcb\x9f\xeb\x6a\x77\xd4\x77\xca\x36\x04\x7d\xda\x3d\xe6\xf7\xc6\x8b\x9d\x82\xcb\x99\x3b\xaa\xfb\xd8\x72\xed\xa5\xe6\xa0\xf4\x23\x88\x83\x7f\x14\xb5\xa5\x40\x6e\x3a\x88\x3c\x82\xfd\x8a\x87\xa2\x4a\x3b\xd0\xfa\x55\x9e\xe8\xe8\x67\xaf\x9d\x9d\x47\xb6\x63\x63\x93\x2b\x14\x61\x50\xde\x03\xc0\xc1\xc6\xf6\x1a\x96\x4d\xfb\x60\x7d\xe5\x9f\x9d\xdc\x1f\x63\xd5\x39\x28\x9c\xdd\x2e\x75\xcf\x7e\x5d\x27\x62\x5b\xe6\x96\xcd\xc7\x2e\x2e\x85\x5e\xc6\x81\x38\x98\x5a\x71\x53\x1b\x27\xef\xe4\x91\xd7\x88\xde\x06\xf0\xf9\x95\x51\x62\x75\x60\xcb\xea\x45\x4e\x91\x61\xbd\x54\x4f\x13\xa3\x78\xa7\x07\xad\x21\x80\x38\x84\x5a\x17\x8b\x91\x80\x9e\x93\xcf\xab\x55\x28\x49\xb6\xe9\xfb\xc8\x68\xcf\x27\xbf\xf3\xe6\x46\x02\x4a\x45\xc6\x83\x11\x47\x6f\xf1\x27\x5c\x05\x92\xab\x35\x66\xd7\x38\x1a\xa0\xa8\x03\x80\x83\xa9\x45\x75\xdf\xa2\x52\xd7\x72\x6d\x40\xce\xbc\x17\xed\x41\xe5\x9e\x49\xd5\x93\x17\xa5\x02\x1f\x56\x97\xab\x92\x91\x27\x44\x0c\x0f\xa1\xcf\xf8\x40\x1c\x4c\xad\x21\xfb\xda\xd7\xb7\x1a\xde\x8e\xad\x45\x56\x53\x64\xbd\x11\xeb\x21\x5c\x99\xf0\x9f\xe0\x95\x9a\x4b\xaa\x98\x0b\x54\xb6\x7d\xf0\x18\x51\x16\xc4\xc1\xd4\x12\xd1\xd4\x6c\xbc\x3d\x3b\x59\x24\x9e\x60\x54\xaa\xaa\xd4\x87\xa3\xc5\x66\xd8\xe0\x9f\xb7\x76\x7a\xac\x30\x2d\x69\xf3\x2d\x0c\x7a\xd7\x0f\xe2\x60\x63\x7b\xb7\x72\x59\x3a\x12\x55\xaa\xb5\xb0\xe0\xb2\xd6\xb3\xea\x00\x65\xa7\x89\xa0\xdf\x5e\x63\xf4\x9f\xbf\x0a\xdb\x7d\xd0\xae\xb0\x7e\x0f\xad\x21\x00\x38\xf8\x83\x56\xe4\x95\x83\x67\xf4\x56\x74\x06\x8f\x99\x75\x3a\x02\x3e\x67\x13\xd4\xb8\xae\x54\x21\x33\x17\x3d\x75\xcb\x2a\xb3\x1f\x0e\xd7\x44\xa8\x05\xe2\x10\x6a\x5d\x2c\x46\x02\x9a\x0f\x9d\x57\x6b\x36\x79\x9d\xb9\x7a\xa3\xa0\xfd\xd8\x08\x2b\xfb\x8e\x4f\x8f\xdd\xe4\x67\x7b\x2c\x5a\x92\x63\xa6\x9c\xd7\x9c\xa8\x69\x9c\x6e\x19\x88\xd3\x07\x71\xf0\x1b\xe2\xad\x13\x5a\xed\xd6\xf5\x15\x9a\x3e\x82\xee\x67\xc9\xbf\xf1\x07\x59\x7f\xd9\x5a\x8f\xf3\x16\xbb\x8d\xac\x1e\xc6\x05\xe7\x43\xa3\x0a\xe2\x60\x6a\xb5\x90\x53\xd5\x9b\xdd\x61\xe2\x9b\x39\xc8\x73\x70\x2e\x4c\x45\x99\x3d\xdb\xa0\xfe\x7d\xff\x25\xf3\x9f\x41\xe1\x36\xfc\x10\x27\x61\xa8\xd5\x0a\x80\x83\xa9\xf5\x88\x7a\x52\x40\xeb\x76\x5b\x4a\x15\xcd\xd1\xdd\x5c\xf6\x26\xe9\x2c\xf5\x2a\x5b\xeb\xef\x0c\xa8\xd2\x9b\x4f\x17\xdf\x33\x0f\x35\x23\xca\x82\x38\xd8\xd8\xa6\xb4\x62\x85\x96\x35\xd9\xc7\x38\x16\xdd\xb9\xf6\xd1\x8f\xc2\xdb\xc7\x46\xe2\xab\xfd\x1b\x0a\x1a\xec\x81\xc5\x79\x7c\x7a\x55\x67\x44\x59\x10\x07\x53\x8b\x49\x31\x54\xdd\x7c\x5e\x5b\x56\x6e\x41\xee\x67\x4d\xf5\x5b\x7f\xde\x96\x7b\x12\x23\x6f\x5a\x42\xa8\x38\x4b\x87\x75\x89\xad\x5b\x10\x6a\x81\x38\x84\x5a\x17\x8b\x91\x80\xe6\xbd\xff\xf1\x95\x01\xcd\x7d\x69\x85\xc5\xb7\xf3\x97\xf9\x13\x79\x45\x1a\x33\xa5\xac\x1a\x4a\xa6\xde\xac\xe8\xaf\x9f\x88\x26\xac\xbd\x5c\xdc\x86\x56\xe7\x40\x1c\x4c\x2d\xcf\xb6\xd8\xaf\x6a\x01\x67\x5d\xfa\xd9\x0a\x28\xea\x97\x73\x82\x56\xec\x37\x34\x98\xbd\xcb\x95\x7d\xc8\x0d\x9b\xc6\xa3\x78\x5a\x11\x65\x41\x1c\x4c\xad\xc6\xc9\x8c\xba\xb3\x3e\xeb\xf0\xf5\x5b\xb2\x13\xcf\x06\x50\xee\x9c\x70\xda\x2c\xd0\x24\x90\x07\x69\x14\xbc\x4c\x44\x4b\xc4\x85\x5e\xac\x80\x38\x98\x5a\x21\x48\xb3\x0d\x56\x53\xc4\x81\x09\xea\xe6\x1f\x5a\xa6\x1d\x7d\x92\xa6\xca\x47\x7c\xad\x92\x7e\x1d\x3b\xf5\xe9\xe3\x33\xd4\x40\x3d\x51\x40\x1c\x6c\x6c\x19\x23\xdb\x50\xc3\x05\xe3\xec\x33\xb0\x8c\xc3\x47\x83\xf0\x5c\x29\xc5\xee\x4e\x86\xf6\xa0\x7c\x2e\x29\xde\xe5\x39\x5d\xd2\x86\xfa\xe2\x80\x38\xf8\xbb\x7e\x0d\xd3\x59\x5b\xbe\x15\x71\x8c\x49\x39\x93\x23\xfd\xed\x08\x7f\xa9\x53\x51\x39\xcb\x7a\x0f\xe3\x35\x8d\x10\x85\x19\x39\x5b\xe8\x5d\x3f\x80\x43\xa8\x75\xb1\x18\x09\x68\x7d\xe3\xbc\x5a\x21\xc3\x24\x78\xfe\xc5\xa9\x79\x7c\xd4\x2f\x0a\xe2\x05\xd9\x85\x99\xaa\x95\x63\x9f\x92\xdd\x89\xbc\x8e\x4a\x8f\x62\x98\x2d\x06\xed\x6f\x04\xe2\x60\x6a\xfd\x08\x78\x37\xd1\x57\xd9\xe0\x93\xfe\xf0\x5d\xf0\x66\x2e\xe7\x04\xae\xc3\x90\xd1\xee\x4c\x92\xcc\xbb\xde\x43\x02\x6d\x37\x89\x10\x44\x59\x10\x07\xef\xea\x37\xb3\x20\xbe\x6d\xe4\xfe\x78\x3f\x36\xf6\x43\x01\xbb\xd5\x7a\x30\x37\xe1\x4c\xce\xa6\x57\xfd\x22\xf7\x7b\x2a\x7c\x3d\x71\x68\x3a\x0b\xe2\x60\x6a\x51\xa9\xe7\x1b\x60\x10\xc7\x25\xfa\xa1\x92\x94\x73\xe0\x51\x04\xa5\x5b\xbe\xdc\xad\xdf\x5a\xc5\x2c\xbe\x8a\xd4\xec\x40\x22\x04\x5d\x5f\x20\x0e\x36\xb6\x59\x54\x61\x46\x8c\xb9\x79\xf6\x81\x0f\x58\xaf\x1f\xe7\x0e\x59\x7c\x52\xa6\xc8\xbb\x8f\x94\x45\xde\x9b\x50\x48\x91\x88\x6a\x1a\x8a\x28\x0b\xe2\x60\x6a\xa1\x32\xcc\x04\x57\x59\xde\xd7\x78\x8a\xbf\xe9\x40\xed\x67\x98\x8a\x53\xf4\x3c\xc7\x14\xb3\x76\xfb\x43\x84\x9d\xa9\xde\xb5\x22\x1e\x84\x5a\x20\x0e\xa1\xd6\x05\x63\x24\xa0\xf5\xeb\x7f\x62\x24\x4d\xe7\x62\x24\xe3\xb7\x8c\x44\x59\x28\xb2\xd1\x79\xe5\xaf\x0e\x3f\x27\x10\xc1\xbc\xf3\x33\xb9\x31\xbf\xa5\x32\x9d\xd1\x3e\x62\x73\xca\xfc\xf9\xdf\xef\x5f\xd3\x74\x2e\x46\xc2\x98\xf7\x32\xd4\x44\x30\x4e\x94\xcd\xdf\x17\x2d\x62\x55\xd8\xad\xe3\xb8\xe5\x9d\x3e\xc1\x76\xad\xc6\x43\x66\x71\x4d\x69\x1f\xac\xbf\x3f\xe4\xb9\x18\x89\xae\x3b\x47\x62\x5c\x25\x5a\x01\xeb\xeb\x0d\xfa\xb3\x77\x0f\x19\xa2\x83\x16\xeb\xca\xba\x69\x47\x35\x03\xae\xd0\x16\xaa\xd5\xaa\xfd\x6f\x96\x16\x41\x63\x79\xfe\x02\x1f\x34\xf2\x6b\xfe\x8c\xae\x32\x4e\x43\x63\x28\x75\x82\x12\x5b\x8c\xdf\x3e\x53\xea\x1b\x9b\x3b\x5a\xb7\xc2\x65\xfa\x70\x72\x18\x9a\xa2\x82\x38\xd8\x05\xfe\x53\xe2\xc9\x30\x1a\x99\x89\x0d\xad\x3a\xe9\x5e\x29\x07\xc3\x4a\xa5\x3b\x65\x14\x0e\x7f\x68\xa6\x2c\xcb\x9d\x24\xe4\x55\x77\x68\x7a\x02\xe2\x60\x17\xb8\xde\x0b\xbd\x38\x3a\x57\xf7\x60\x81\x62\xc1\x74\x52\x55\x0a\x3e\xe4\x82\x58\xf9\x0e\xee\x0d\xf9\x4f\x04\x3a\x3c\x8c\x83\xe2\xd0\xe6\x70\x20\x0e\x76\x81\xff\x19\xc6\xcd\xd5\x9e\xe6\x46\x17\x23\xda\x4d\xd8\xa6\xa6\x51\x5f\xdc\x30\xd9\x23\xda\x62\x2f\xdd\xab\xec\xc7\x5c\x4a\xff\x20\x88\x28\x0b\xe2\x60\x63\x7b\xe6\x13\xae\xef\x11\x79\x07\xaf\xd7\xae\xe3\x4d\x5e\x7f\x8f\x6d\xdc\xd1\x2f\xe9\x27\xb3\x7d\x1e\x0d\x09\x7a\xa8\x95\x37\x37\xa1\xe6\xd0\x20\x0e\x76\x81\x23\xdf\x35\xa7\x6f\xa1\x23\x48\x63\x78\x69\x96\xe9\x5e\x6a\x8a\xf1\x69\x9f\xf6\x8b\x58\x31\xf1\x2f\xe5\x5d\xeb\xe4\x72\x0c\x8d\x12\xc4\x05\x0e\xe2\x10\x17\xf8\xc5\x62\x24\xa0\x6b\xe6\xbc\x5a\x7f\xde\xa6\x5d\xa6\x9c\x54\x7e\xf6\xe2\xd1\x33\xb3\xef\x25\x54\xe2\x92\x4d\x62\x6b\xab\x18\x5e\xb4\x1a\x54\xf3\xda\x02\xba\x76\x35\xd0\xa8\x02\x38\x98\x5a\x14\xdf\xc8\xec\x79\x05\x6a\x1b\xd4\x0f\xc8\x2c\x96\x58\xb9\xbe\x84\xb9\x2c\xfd\x2c\xa0\x5e\xd8\xc2\x3d\x95\x99\x6f\x3a\xb1\x83\xa6\x27\x20\x0e\xa6\x56\x97\xa4\x1d\xef\xd8\x88\x84\x01\x95\x77\x00\xe6\x86\x8e\xb4\xb2\xd9\xa9\x2a\xa1\x6f\x07\x36\x46\x79\x4e\x20\x63\x8d\xd1\x1c\xb4\x59\x2c\x88\x83\xa9\x75\xa3\x11\xc7\xf1\x6a\xd5\x75\xf1\xbb\xc9\x81\xf7\xcc\xeb\x5f\xb3\xee\xed\x19\xbb\x62\x64\x31\xcf\x7d\xb7\xa8\xeb\x98\xe8\x09\xb8\x8f\x28\x0b\xe2\x60\x63\xbb\xee\x2a\x8d\x2d\xa0\xf6\x65\xce\xed\xe3\x91\x9a\x1b\x97\x2c\xdb\x5d\xaa\x9e\xc3\xfa\xb9\x71\x1a\x24\x47\x1a\xb9\x0e\x56\x0c\xe8\x53\x1a\x10\x07\x53\x8b\x6b\x95\xf6\xe5\xe6\x48\x9d\x71\x84\xcc\x81\x4d\x66\x58\xb6\xa4\xb8\x26\x4f\x37\x73\x58\x02\x7b\xfc\xec\xa5\xb4\xa0\x1e\x55\x79\x84\x5a\x20\x0e\xa1\xd6\xc5\x62\x24\xa0\xff\xc6\xff\x58\x5d\xc4\x5a\x31\x8e\x7e\x64\x3e\x6e\x85\x67\xb7\x48\x99\xc3\xd4\x37\xd4\x5f\x4c\xcf\x2f\x79\x6f\xab\x8e\xd1\x64\xb0\x9a\xd3\x02\x8a\xa1\x82\x38\x98\x5a\xd7\x4e\x3a\x96\xb1\xcb\x38\x2f\xcb\x39\x7f\x19\x9a\x5e\x7f\x45\xfc\x73\xfc\x3d\xb5\x69\x46\xad\x3f\x51\x98\xa2\x05\x09\x5d\x30\xd4\xa9\x0e\xc4\xc1\x57\x17\xb3\xe2\xec\xde\xe9\xd2\xbc\x5a\x93\x97\x24\x63\x95\x6e\x7c\x33\x92\x7b\xeb\x66\x71\xd3\xc8\x62\xf6\x9b\x27\x57\xa6\xcd\xe3\xa0\x0f\x0a\x41\x1c\x4c\xad\x86\xfd\x99\xdf\x43\xd1\xc9\x3e\x54\x58\x39\xd1\xcc\xc6\x81\x83\xb7\x2d\x08\xa2\x79\x48\x05\xa4\x08\xfd\x53\x9f\x6a\xf5\x50\x90\x23\xca\x82\x38\xf8\xf2\xda\x7a\xd4\xb3\x26\x4f\x27\xca\xb3\x09\x13\xf9\x6a\xca\xdf\xd7\x8a\xdd\xe7\x9f\x37\x6d\x7f\x12\x16\x5d\x2f\x0d\x8e\xc9\x88\x87\x22\x04\x20\x0e\xa6\xd6\x77\x93\x35\x61\xb2\x55\x45\x1e\x5a\xa6\x67\xf4\x1d\xad\x04\xcc\x0f\xa4\x5e\xd1\xe8\xca\x75\xe3\xb1\x7a\x6d\x4b\x47\xbc\x79\xf5\x0a\xa1\x16\x88\x43\xa8\x75\xb1\x18\x09\xe8\x0d\xff\x79\xb5\x1a\x95\x34\x87\x58\xab\x3f\x09\x5d\x0a\xe6\xc4\xd2\xff\x99\x8d\x54\x61\xdb\xe0\x51\x9f\xad\xec\xeb\xd8\x3d\x5a\x11\xd6\x50\x38\x0a\x4d\x4f\x00\x1c\xfc\x5f\xeb\x56\x82\x55\x2e\xdd\x99\xcd\xab\x48\x23\x07\x8e\x18\x55\x1c\x47\xb7\x39\xa3\x1b\x8b\xca\xd7\x58\x9f\x4f\x46\xbf\x72\x36\xa6\x84\xfe\xb5\x00\x1c\x4c\x2d\x3f\x99\x2b\xdb\xf6\x6a\xd6\x35\x94\x7c\x71\x6a\x58\x4c\x6e\x3d\x3d\xe4\x4b\xf4\x15\xd2\x36\x5e\x51\xf8\x61\x26\x1b\x79\x25\xf5\x88\xb2\x20\x0e\xa6\xd6\x9d\x85\xa6\xa6\x53\xba\x1e\x8d\x3f\xa8\xe6\xae\x05\xbe\xa3\x38\xd5\xae\x31\x07\x6b\x7c\x5e\x85\x2f\xcd\x83\xd6\x4c\x95\xef\x41\x8f\xfd\x20\x0e\x36\xb6\x8e\x38\x9c\x3f\x17\x51\x13\xd8\x90\x9f\xbf\x13\x7c\xbc\xae\xbb\x56\xc1\x70\x7b\x71\xae\xc3\x37\xcf\xe8\x3a\x26\x57\x6b\xef\x75\xa8\x79\x09\x88\x83\xa9\x05\x6c\x5e\x82\x08\x70\x68\x55\x3d\xa4\xd0\xc1\xbb\xb2\x3a\x93\x9e\x46\xb1\x77\xd4\x6b\x66\xe7\x79\x8f\xff\xb7\xc6\x87\xd8\x27\xef\xba\xe3\x1f\x24\xa3\x9d\xfe\x3b\x46\x42\xfe\x71\x72\x42\xe3\x3a\xf3\x8b\xc5\xc7\x81\xbb\xf3\x0d\x2e\xa6\x65\xe1\xa4\xf3\x8f\xee\x9a\x2c\xd6\x32\xf4\xdd\xe7\xd4\x17\x10\xfc\x77\xae\x73\x47\xf0\x71\xb5\x09\x9b\xd5\xfd\x7c\xbc\x5e\x6e\xa7\x9f\x87\x6c\x77\xb7\xdf\x7b\x9b\x07\x5f\x0a\x4f\x1b\x51\x9a\x12\x0c\x61\x87\xc5\x48\x40\x95\xcf\xc7\x48\x32\x16\x49\x6f\x1f\x75\x62\x39\x60\x2d\xea\x33\xd4\x2e\x61\x93\x98\x2c\x36\xd6\x72\x3c\x10\x36\xcd\x9b\x22\xcb\x22\x7c\x38\x1d\xf2\x2f\xd4\xb4\x8a\xb8\xab\xc3\xd4\x7a\xfc\x09\xea\x69\x06\x46\x37\xfa\xe0\x5b\xb6\x00\xbc\x05\x87\x5a\x1b\xca\xd6\x4e\xaa\x9d\x13\xcb\x08\x28\x46\x02\xaa\xf9\x4f\x8c\xe4\x1a\xe1\xff\xfb\x1c\x1b\x52\x26\x63\xf2\xda\xc3\xcc\xe0\x31\xc7\xfa\xf7\xd4\x38\xc6\x1b\x38\x64\x1e\x81\x78\xbe\x41\x9f\x2e\x9f\xd5\xde\xb7\x6f\x7a\x24\xfd\xd7\x31\x12\x24\x39\xd8\x93\x33\x2d\xeb\x21\x49\x9b\x7b\x18\x77\xfe\x4b\xac\xe6\x43\xa6\x27\x72\x1b\xdc\xaa\x67\x72\xdb\x38\xfc\x1b\x91\xdf\xd7\x93\x45\xa9\xf5\xff\xfa\x61\x1d\x89\xff\xdc\x96\x9a\x2e\xa6\x03\xcd\xe4\xc1\x49\x07\xd6\xf2\x8b\xce\xf2\xc5\x37\x2b\x8a\x7d\xed\x9e\x20\x19\xb5\x6a\xff\xd2\xed\x42\xfd\x64\x31\xf2\xf7\x87\x54\x83\x1f\xf2\xc7\x6d\x7a\x31\xae\x50\xea\xda\xc7\x52\x0c\xde\xaf\x4a\x3d\x63\xe5\xe4\x02\x3f\x37\xd6\x65\x85\x7c\xf2\xe0\x1d\x54\x29\xb4\x0d\xfd\xfb\x43\x3e\x85\x1f\x92\xb7\xa5\x4b\x2a\x16\xa5\xbb\x64\x25\x08\xbd\x43\xb3\x80\x64\xa9\x15\x2b\xe5\x3d\x29\x19\xb2\x57\xa6\xe5\xf2\xa1\x6c\x78\xc8\xf3\xbf\x3f\xa4\x27\xfc\x90\xeb\x3e\xd7\xfb\x95\x33\xf2\xc6\xd0\xeb\x3d\x12\xaa\x1a\x7b\x44\xb8\x2e\xfd\xe9\xd0\x8a\x97\xdf\xa5\x7b\x2f\xac\x8d\x4b\xf8\xfb\xe6\xdf\x1f\x32\xe1\x5c\x37\x12\xb3\x13\xe3\x7c\x52\xf1\xf2\xbc\xbe\xe9\x99\x22\x1d\x59\xfe\x4f\x68\x8c\x63\x54\x19\x55\x44\x28\x98\xc7\xb9\x1f\x4f\x09\xff\x3a\xf7\x24\x81\x54\x05\x3f\xe4\x35\xd4\xd5\x5f\xa1\x05\x3d\x58\x89\xc8\x26\x57\xa4\xa2\x88\x3a\xd9\x67\x8b\x35\x4f\x07\x75\xcc\x7d\x57\xe9\x07\xbe\xe7\x0b\x6b\xfe\x6f\xe6\x7a\xa0\x2b\xf1\xfc\xad\xed\xc9\x51\xb3\x6c\xc1\x09\x1f\x4f\x11\xcb\x66\xc5\x2a\x07\x26\xe1\x03\xeb\x2a\x52\xba\x51\x6e\x9c\x74\xa5\xa2\xd0\x69\x9e\x5e\x68\xff\x63\x10\x07\xbb\xb5\x21\x05\x64\x66\xcb\xce\xbc\x19\x38\xeb\x64\x99\x95\xc2\x34\x96\x74\x5b\x61\x63\x7f\x66\x46\x62\x33\x21\xf7\xf6\x74\xec\x01\x12\xb4\xbf\x1a\x88\x83\xdd\xda\xde\x0d\xbd\x36\x2d\x36\xf4\xe7\x68\x8e\xad\x99\x08\xdd\x46\xca\xa7\x7a\x34\xcc\xcc\x76\x6a\x94\xc5\x27\x99\x98\xa0\xa8\x22\x8e\x01\xbd\xe5\x04\x70\xb0\x5b\xdb\x31\xed\xad\xbc\x97\x84\x7e\x28\x18\x67\xc8\xfe\x96\xee\x32\x33\x4b\x3b\x2c\xed\x32\x1b\xbf\x47\x49\x3d\x39\x18\x71\x0b\xfe\x40\x1b\x0d\x82\x38\xf8\x1a\x2c\x67\xc6\x2e\x76\x72\x6d\xac\xa1\x3b\x99\x5f\xc9\x3b\xa4\xa2\xeb\x37\xb4\xc3\x36\x46\xb5\x5c\x4e\x9e\xac\xde\xa1\x77\x7a\xfe\x16\x5a\x83\x05\x70\xb0\xb1\x75\x27\xff\xda\xad\x34\x7d\x5c\x3a\xe9\x96\xe4\xc6\x97\x73\x2f\x65\xf5\x86\xfb\x2f\x74\xf7\xa7\x29\x24\x9e\x2f\x25\xa8\xcb\x2e\x57\x22\x62\x24\x20\xee\x9f\x6e\x24\xd7\x08\x2f\xf0\xcc\x04\xfa\xc3\x3d\x2f\x56\x87\x65\x7b\x36\xae\x5a\x45\x04\xc9\x55\x15\x6c\xbd\x13\xb2\x9f\x0f\x28\xed\x1a\xf4\xc9\xf5\xbb\x5d\x76\x30\x30\xd6\xdf\xb5\x41\x2f\xfb\x41\x1c\x7c\x11\x41\x50\x55\x5e\x0a\x8f\x3b\xfe\x5b\xfe\xf7\xb8\x91\xe2\x26\x9d\x39\x43\xc7\x62\x8f\x5c\x15\xc1\x89\xbc\x5c\x3c\xed\xc7\xc2\xd0\x02\x19\x88\x83\xef\x54\x62\xdc\xa1\xf2\x65\xab\x97\x79\x00\xbb\x13\x9d\x92\x59\xb4\xe1\x28\xd2\xbe\x58\xae\xc0\x31\x6d\xea\x67\x08\x03\x77\xee\x36\xb4\x95\x00\x88\x83\x89\x55\x8a\x8e\x12\x45\x42\x6d\x40\xf7\x86\x8d\x99\x6e\xe5\x39\xb9\xe1\xf2\xc8\xdb\xe6\xc0\x04\x5e\xb6\x38\x12\xb7\xab\x8e\x2e\x74\xd0\x66\x35\x20\x0e\x36\xb6\x03\x34\x4d\x5b\x4a\xa1\x82\xd5\x0a\x99\x93\xf6\x14\xb6\xa3\xc7\x31\x43\xc8\x38\xfd\x5e\x9f\x55\x9f\x60\x09\x3e\x61\x6d\x3b\x82\xbe\x45\x01\x71\xb0\xb1\xdd\x29\x0b\xbc\xec\xc2\xcd\x64\x99\x31\xf2\x93\xfd\xe3\x65\xaa\x01\x1d\x3c\xaa\x66\xb5\x7d\xff\x94\xcc\xf8\x5c\x99\x2d\x11\xea\x27\x88\x18\x09\x88\xfb\xa7\x1b\xc9\xff\xb9\x6b\x5f\x60\xdb\x5d\xc0\x7d\xf5\xbc\x59\xf4\x55\x5b\xb7\x86\x07\x24\x52\x7e\x5f\xe2\x4b\xa2\xaf\x6b\xce\x4b\x59\xdb\x91\x0c\x22\x16\xf9\x66\xbd\xcb\x43\x56\x39\x38\x05\xed\x2a\x03\xe2\x60\x67\xff\xa5\x56\xc1\xe2\x2e\xb5\xdc\x8a\xc2\x9c\xd9\x6d\x4d\x22\xe6\xab\x7d\xdf\x55\xd0\x98\xd3\x1d\x25\xeb\x6f\x8c\x46\x11\x3e\xc5\x80\x84\x05\x71\xf0\x2e\x95\x87\xec\x0f\xb6\x3b\xa5\x0c\x74\x3b\xab\x94\x9d\x70\x9c\x25\xbb\xd5\x05\xac\xf9\x3e\xaf\x28\x25\xf1\x9b\x20\x75\x89\x68\x40\x9f\x8a\x83\x38\x98\x59\xab\x33\xdd\xca\xd6\xd5\x87\x5f\xf9\xfe\xec\xf6\x88\xb7\x4b\xff\x2a\x5d\x9f\x4e\xc1\x0c\x6b\x71\x4e\xa0\x0a\x45\xbb\xce\x34\x03\x45\xd0\x41\x1c\x6c\x6c\xe5\x5c\x0d\x0b\x4a\x3a\xe6\xe2\xbb\x65\xe8\x8f\xe7\xc4\x9a\xb0\xe9\xfb\x7e\x98\x53\x4b\x27\xb7\x44\xf2\x4e\xe4\x15\x38\xdc\xd6\x47\x94\x05\x71\xf0\x0f\xdb\x0b\x95\xf7\x52\xb2\x25\xc6\xbe\x69\xdc\x64\x5c\x67\x9f\xa7\xbb\x33\x1a\xd2\xc2\x42\x27\xf9\x47\x59\x60\xce\xb6\x48\xcc\x70\x05\x31\xd1\x03\x71\x88\xbd\x51\xf9\x2f\x34\xd1\x03\x3d\x3f\x9d\x57\xeb\x74\xcb\x7f\x52\xc6\xe9\x6b\x8c\x86\xc7\x93\x8c\xf9\xfb\x83\x66\x0e\x53\x99\xba\x18\xe1\x81\x6e\x27\x26\x82\x12\x29\xf6\xd2\xd9\x88\xd3\x07\x71\xb0\xd3\xef\x95\x73\x41\xc1\xc2\x4b\x66\xb3\x09\xfd\x14\x10\x1f\xce\xfa\xe8\x59\x82\xeb\x54\x40\x57\x97\xd7\x96\x39\x56\x42\x51\x03\x6f\x26\xa2\x2c\x88\x83\x7f\xe5\x44\xd9\x7f\xb8\xef\xc0\x61\x69\x81\x2c\x48\x91\xb7\xc7\x64\xb3\x82\xaf\xf5\x38\xee\xdb\xda\x12\xe5\x97\x2b\x2e\x38\xc7\x1a\x4c\xd0\x57\x4e\x00\x0e\xa6\x56\x23\x5d\x8b\x34\xb2\x90\xe6\xcc\x06\x9a\x1f\x61\x8c\x71\x7e\xa9\x71\x98\x67\xa7\xa3\xaf\x94\xfa\xe6\x09\xb2\xd9\x95\x04\x6e\x22\x68\xb6\x0b\xe0\x60\x63\x6b\xbf\x97\x1a\x3c\x45\x64\xe5\xa4\x32\x60\xd4\xa1\x7e\xe6\xe1\xc0\x42\x67\xe5\x47\xf6\xbb\xba\x95\x2b\xfc\x0b\xb6\x59\x66\x06\xb4\x07\x39\x88\x83\x8d\xad\x6d\x67\x8c\xbb\xf3\xc6\xe1\x12\x56\x66\x68\xff\x25\xaa\x6f\x2a\xb7\xee\x74\x1b\x4d\x31\x68\xde\xe5\xfc\xf6\x28\x18\x17\xff\xb8\x1d\xa1\x16\x88\x43\xa8\xa5\x76\x21\xb5\x40\xcf\xc9\xe7\xd5\xd2\x24\xb1\x96\xe2\xd0\xb5\xc7\xfe\x2d\xe9\xe9\xae\x82\xd4\xf6\xb3\xf5\x2d\xc1\x4c\x61\x90\x95\x79\x7f\x44\xd1\xd9\xa1\x09\x03\xd4\x5a\x18\xc4\xc1\x4e\x3f\xc1\x2c\x6c\x3a\x6b\x3e\x44\xe9\x39\xaf\x41\xec\xb7\x9b\xdb\xee\x57\x67\xeb\xb4\xba\x1b\xcc\x12\xfa\x78\x7a\x0b\x0f\x8b\x37\x07\x10\x65\x41\x1c\x4c\x2d\xe2\x04\xd5\xcf\x11\xe9\x8a\x5c\xf7\xf0\xbb\x9e\x78\x87\x9d\x76\xd6\x35\x56\x1e\xea\x08\xa2\xff\x34\xfb\x84\x5f\x6e\xd5\xfb\xcd\x1f\x51\x16\xc4\xc1\xd4\x7a\xa1\xed\xa7\x65\x3f\xa7\x3d\x90\xaf\xd8\x85\x5e\x3f\x5c\x13\xff\x7c\x99\xef\x07\x2d\x32\x6a\xa5\x7f\xca\xac\x7b\xcd\x6f\x39\x7c\x44\x59\x10\x07\x1b\xdb\x92\x3d\x8e\xcc\x9b\x87\x02\x06\x55\xdf\x52\x9b\xaf\xd9\xb3\x7e\x29\x72\x9d\x42\x5b\xc4\x59\xd5\x7c\xf8\x2b\x67\x65\x69\xcf\x06\x05\x51\x16\xc4\xc1\xc6\x36\xfa\x91\x67\x4c\xe6\x1d\xcf\x39\x11\x0d\x11\x71\x4c\x13\x39\x4b\x79\x5f\x05\xa9\x88\xfa\x9b\x8d\x54\x81\x9d\xa2\x9f\x4c\x50\x83\x10\x6a\x81\x38\x84\x5a\x4f\x2f\xa4\x16\x68\x3e\x74\x5e\xad\x74\xf1\x8a\x1b\x1f\xf4\x25\x4f\xf8\x6a\xce\x6c\xb3\x27\xa3\x4b\xe8\xef\x27\xfc\xac\xbd\x6e\x8a\x29\x79\xc2\xf1\x05\x2d\xde\x11\x7a\x78\x01\x71\xb0\xd3\x1f\x22\x45\x6d\x2e\xef\x3d\x50\xcf\x68\xca\x33\x91\x2a\xdf\xbe\xf4\xb8\xd2\xe0\xd0\xa1\xfc\xd6\x1d\x31\x92\x66\xcb\x83\xab\x5d\x50\x3a\x05\xc4\xc1\xd4\xb2\xa9\xbc\x61\xfa\xe9\x0d\x8e\x4e\x0b\x55\x2c\xc6\x65\x3c\xfb\xe5\x7c\xd5\xd0\xc6\x94\x41\xbd\x81\x2b\x2e\xdf\xdc\x37\x7a\xe7\xe9\x11\x65\x41\x1c\x4c\xad\x5a\xbd\x68\xc1\x4a\x8e\x4d\x39\x8e\x37\x37\x9b\x25\x8b\xcd\xe9\x28\xa9\x16\xf4\xbb\x1f\xb1\xbd\xe4\xc1\x2c\xc2\xfb\xe5\xa7\x0b\xf5\xae\x06\x71\xb0\xb1\x15\x29\xdb\x93\x15\xa1\x90\x50\x2b\x7b\xc3\xd9\x70\x4b\xa9\x34\x74\xd4\xed\x12\x0d\x7e\x73\x93\x1a\x1b\xad\x89\xff\x8f\xa8\x4e\x06\x28\xf8\x04\xe0\x60\x63\x5b\x93\xf6\x25\x2f\x20\xa6\xd9\xe0\xf9\xf1\xa8\x52\x0d\xc3\xe7\x0e\x96\x1a\x65\xe5\x4b\x51\xc1\x0e\x27\x24\x74\x0c\x76\xad\x54\x54\x08\xb5\x40\x1c\x42\x2d\xcf\x8b\x75\x23\x01\xcc\x7b\xff\xa3\xd9\xbc\xd3\xc7\x27\x21\x9d\x56\x47\x43\xfe\x28\x44\xe5\xb6\x0e\xce\x48\x4c\x48\xeb\xbc\x2d\x4a\xd6\x86\x99\xc3\xad\xfc\x9f\x6a\xa1\x04\x05\x88\x83\x9d\xbe\x45\x8f\x47\x8f\x7c\xe5\xaa\x6c\x6b\x1f\xf1\x59\xc8\xcb\x2f\x87\x55\x33\xb2\xef\x68\x5e\xab\x47\x37\xbb\x04\xf7\x17\x51\x9d\x40\x3b\x59\x82\x38\x98\x5a\xc5\xb6\x09\x8f\x72\x4f\x3f\x62\xbe\xf8\x92\xf6\x1a\xcd\xbd\xf7\x38\xae\xe6\xf3\x4c\xe1\x83\xe5\x4f\x68\x96\x89\x62\xfb\x04\xb3\x50\x6b\x26\x10\x07\x4f\x28\xd5\xf7\x0a\x47\x3f\xec\x65\xc0\x35\x8c\xa0\x55\x63\x20\x0c\x2c\xbc\x61\xd9\xbc\xe2\xdd\x9a\x72\xfc\x47\xc1\x93\x34\x23\x0a\x5a\x50\x05\x71\xb0\xb1\x65\x9d\xac\x35\x7e\xb9\x11\xc4\x1e\x6d\xa6\xf2\x61\xe9\x4a\xce\x23\x87\xb6\x3b\x07\xc9\x33\x38\x41\x49\xac\x87\x24\x6f\x8f\x67\xf7\x10\x65\x41\x1c\x7c\x2f\x47\x76\x91\xbe\x79\x2f\x03\xcc\x43\x5e\xab\xaf\xbd\x85\xe5\x0a\x74\xf2\x02\x09\xf8\x02\x59\x84\xd4\x83\x84\x6b\x21\x69\xa3\x2f\x10\x6a\x81\x38\x84\x5a\x09\x17\x52\x0b\xb4\xbe\x71\x5e\x2d\xc6\xc7\x93\xab\x92\xed\xc3\x5e\x81\xa3\xdf\x94\x71\xe5\x6e\x85\xcb\xdb\x7f\x8a\xd4\x63\xb9\x79\xb4\x71\xb7\xf4\xbe\x50\xd1\xa9\x23\x94\xa2\x01\x70\xb0\xd3\x57\x58\xc0\x49\xfb\xa3\x24\xf4\xa5\x88\x3a\x38\xbb\x78\xf1\x8d\xb1\x8b\xa2\x13\xfe\xb2\x77\xbe\xc4\x5c\xda\xc7\xb6\x4a\xa6\x67\x50\x2f\x35\x10\x07\x53\x8b\xeb\xf8\x03\x47\x3a\x41\xc9\x57\x4b\x8f\xfd\xb9\x6d\x4f\x2b\x87\xe5\x0f\x91\xa2\x9f\x46\xfa\xd3\xbb\xb8\x07\xad\x55\x94\xd8\xa1\xd7\x40\x20\x0e\xde\x9e\xcb\xce\x76\x54\xc4\xc0\x78\xfb\x72\xbf\x32\x6d\xe9\x7e\x11\xe6\xe9\xdd\x1e\xdb\xfb\x16\x45\x85\x7c\x6b\x05\x1a\xe6\xf7\x36\xa1\x95\x07\x10\x07\x6f\x04\x21\x3a\xa1\x10\xfb\x4b\x5e\x94\x9d\xad\xf0\x96\xe6\x8b\x22\xdd\xf8\x87\xca\xdb\xf6\x3d\xa1\x8d\x5f\x08\x08\x1a\x79\xc6\x17\xc4\xa0\x46\x10\x00\x0e\x36\xb6\xb5\xe2\x3f\x16\x1c\x0e\x38\x3c\x27\x2d\xab\x9e\xc5\x4c\xe1\xd9\x66\x71\x21\xe9\x57\x32\x76\x7f\xad\xce\x0f\x35\xfd\xec\x53\x74\x1b\xa1\x16\x88\x43\xa8\x55\x75\xb1\x18\x09\x68\xfd\xfa\x9f\x18\x09\xd2\x00\x7c\xd1\x8d\x63\xf2\x1e\x61\xd9\xae\x62\xd4\x46\xef\xb2\x22\xa9\x7a\xe6\x34\xb3\xc3\x00\x6f\x02\x49\xcc\x60\xe5\x3b\x17\x71\x8d\xf0\xfd\xbf\x6f\x74\x8c\x34\x09\x3f\xe4\x4b\xc3\xa4\x88\x9b\x89\x4b\x09\xcf\x9f\xd0\xd6\x79\x46\x67\xda\xde\xff\xb5\x78\x03\xb7\xca\x7f\xd6\x71\xb5\x6b\x7a\xe0\x8a\xe8\xfd\xbf\x3f\xe4\xe1\xb9\x05\x54\xe2\xd3\xa6\xfb\x45\x52\xc2\x97\x14\xd4\x78\x23\xc8\xf3\xcd\x54\x23\xcb\x0f\x12\x86\xf9\x49\x92\xc6\xde\x87\x8f\xa5\x6b\xfd\xed\xee\xec\x5a\x17\x1b\xcb\xf3\x17\xf8\xa7\x5f\x79\x58\x78\x34\xa6\x96\x64\x02\x18\x31\xc3\xbb\x21\x8a\x14\x7c\x92\x72\xa6\xa7\xec\x13\x78\x83\x34\x1b\xaf\x34\xc6\x03\x10\x12\x82\x38\x98\x84\x8a\x4a\xf5\x07\x2e\x3b\x19\xe1\xf1\x3e\x62\x76\xd2\xf6\xaf\x6f\xfb\x10\x3d\x4d\x5e\xb3\xb2\x8e\x6f\xdd\xab\xe5\xf1\x0f\xfc\x0e\xbd\xe6\x06\x71\xb0\x0b\x9c\x9e\x4b\x8d\xb9\x7f\xce\xf0\x93\x5f\x49\x5c\xac\xff\x36\x26\xaf\xbd\xf0\x99\xc6\xb1\xfa\xa7\xdb\xf7\x4c\xb1\xd5\xc9\xe2\x17\xa1\xa7\x1d\x10\x07\xbb\xc0\xeb\x6e\x2d\x48\x62\x1a\x29\xd6\x48\x3e\xaf\x9b\xbd\xdf\x49\xd5\x1c\x3b\xb9\x6a\xdb\xc1\x50\x86\xa1\xd9\x78\x64\x9a\xb8\x8a\x94\x85\x28\x0b\xe2\xe0\x5f\xa8\x25\x07\xd5\x9a\x3f\x3a\x99\x1f\xfa\x1a\x92\x1a\xad\xd6\xf2\xb8\xa6\x14\x8f\xf4\x57\xbc\x80\xef\x35\xe6\x79\x1e\x43\x1a\x7a\x42\xe8\x0b\x35\x00\x07\x1b\x5b\xdf\x6b\xc7\xef\x13\x3a\x33\x12\xc5\x5a\x96\x4f\x6a\xf9\xea\xd9\x3d\xc9\x76\x3b\xf8\x6e\xf7\x14\x7f\xfe\x18\x38\x43\x4f\xbd\xae\x84\xb8\xc0\x41\x1c\xe2\x02\x1f\xb8\xd0\xbd\x03\x74\xcd\x9c\x57\x4b\xff\x90\xdd\x50\x66\xa1\xf2\x51\x72\x24\xaf\x1f\xa6\xab\x0e\xa3\xdb\xf1\x54\x12\x05\x8d\xa1\xba\xf5\x22\x57\x50\xda\x6d\x46\x12\xc4\xe9\x83\x38\xd8\xe9\xeb\x2c\xac\xe2\x3d\xca\xf6\x9f\xa6\x10\x6a\x1b\xc4\x7e\x4e\x64\x8d\xc5\xca\xe2\xf6\x64\x7e\x4c\xa0\xd6\xa5\xf0\x79\xde\x7e\x9c\x00\xa2\x2c\x88\x83\xef\xa3\x98\xd9\xf9\xa1\xfa\xf9\x78\xc1\xe4\x5b\xd2\xde\xd1\x21\x52\x6a\xd1\xdb\x76\x39\x22\x04\x22\x2b\xf4\x3b\x06\x1e\x42\x92\x1b\x50\x04\x11\xc4\xc1\xd4\xc2\xf3\x7c\xda\xcc\x54\x79\xd0\xec\x19\xc8\x79\xef\xf9\xab\x23\x56\xbb\xd4\x1e\x42\xcc\x01\x67\x87\xef\xf1\x62\xa1\x02\x4b\xc8\x50\x68\x16\xc4\xc1\xc6\xd6\xd5\x6c\xf4\xb2\x98\xa3\x64\xd4\xd5\xc1\x94\xd0\x62\x9f\xd1\xe6\x47\xc6\xc1\x71\x33\xf2\xef\x93\xa2\x93\x87\xd1\x37\x4e\x4c\xb8\x11\x65\x41\x1c\x6c\x6c\x27\xb8\x7e\x73\xe0\xeb\x0b\x6a\xbe\x7a\x29\x33\x52\x84\x8e\xb5\x19\x6b\xf6\x7e\xc2\x2b\xe3\x8b\x5e\x6b\xef\xf3\xdf\x92\xac\xb1\x50\x27\x2b\x10\x87\x50\x6b\xf2\x62\x93\x29\xc0\x7f\xe3\x79\xb5\x6a\x62\x82\xfb\x1e\xb6\xb4\x77\x05\x07\xea\x89\x2d\x8b\x29\xfc\x7e\xeb\x33\x69\x8a\xe4\x24\xd2\xeb\x7a\x29\x83\xc6\x4a\x58\x0c\x19\x71\xfa\x20\x0e\xbe\xb6\x4a\x30\xb1\x14\x4d\x41\xde\xe3\xcf\x85\x44\xee\x8d\xd4\x1e\xe3\xb0\x38\xa1\x3f\x1a\xe3\xf8\x90\x16\x63\x5d\x38\x6e\x87\x01\xda\x0d\x1d\xc4\xc1\xd4\x5a\x28\xcb\xbc\x91\x40\x4f\x64\xec\x41\xc2\xe6\x73\x20\x9a\x2d\x22\xd8\x96\xab\xc4\xac\xe7\xa1\xed\x8e\x6e\x4c\x90\x80\xfb\x10\xda\x07\x09\xc4\xc1\xd4\xe2\x2d\x21\xea\xfe\xce\x12\x2a\x99\x67\x94\x6c\x58\xe6\xe3\x8b\x21\x37\xd2\xc7\x84\xe2\x4a\xf6\xb2\xc2\x9c\x28\xfe\xc7\x74\x16\x94\x50\x02\x71\xb0\xb1\x2d\xd0\xec\xd8\xd9\xc7\xc8\x74\x0a\x08\xe3\x68\x53\xf4\xad\xf5\x7d\xce\x7c\x9a\xa0\x8b\x96\x4d\xff\x46\x24\x71\x8b\x50\x7a\x3f\x0e\x51\x16\xc4\xc1\xc6\x76\x23\x48\x49\xd6\x9b\xc7\xef\x86\x90\x03\x72\xc2\x0e\xd6\x2b\xb5\x47\xca\x16\xa2\x7a\x2b\x97\xbc\xa3\xb0\xf0\xbf\xd4\xe9\x5b\x1c\x43\x5d\x43\x01\x1c\x42\xad\xc3\x8b\x35\xba\x01\xbc\xe1\x3f\xaf\xd6\xe3\x7b\xd6\x3e\x69\x7a\xa4\x39\xc1\xc8\xb7\x69\x2a\x82\xae\x6c\x1d\x15\xdd\x24\xd6\x9d\xe8\xd3\xef\x5f\xb5\xc3\x76\x25\x36\x82\xbe\x55\x05\x71\xb0\xd3\x8f\x35\xbe\xfa\x66\xc3\xc8\x3d\xba\x9d\xa7\x27\xf4\x84\x43\x27\x4f\x8a\x3b\x5c\x2d\x69\x09\xbf\xa0\xd5\x62\x98\x2a\x99\x55\x69\x18\x51\x16\xc4\xc1\x7b\x1d\x87\xd6\xd5\x9d\x12\xfb\x9d\x9d\x38\xf7\x95\x69\x2d\xca\xa8\x10\x86\xf0\x1c\x7f\xc7\xa5\x9c\x4b\xe8\x8d\xd6\xd8\xf7\x43\x83\x3e\x30\x07\x71\x30\xb5\x24\x3f\x8c\x85\x27\xb6\xb0\xad\xe7\xbd\x38\x78\x1a\x55\x99\xd3\xc0\x1f\x5c\xc1\xcd\x25\x82\x62\x2b\x30\x18\xf6\x00\x89\x7e\x15\xea\x77\x0d\xe2\x60\x63\xcb\x9e\xfa\x93\x6b\x88\x96\x33\x67\xef\xd6\xdd\xd3\xb5\x78\xc5\x2b\x6c\x37\xe5\x1a\x89\x2c\x90\xd1\x0f\xb8\x8f\x36\x32\x2f\x8d\x40\x7f\xdd\x20\x0e\x36\xb6\x17\xee\x46\x42\xff\x96\x3c\xb0\xbe\x29\xfb\x12\xf3\xb7\x31\x7d\xed\xab\xb7\x53\xb8\x36\xcf\x78\x30\x22\xed\xdd\x0f\x55\x1e\x1d\x22\x93\xbd\xfa\xf8\xef\x18\xc9\x99\xe7\x6c\xe8\x18\x86\x41\xb6\x5c\x56\xf4\x5b\xf5\xa4\xec\x91\xa7\x3c\xd4\xb3\xc1\x72\x4c\x1c\xf4\x5f\xd0\x28\xf6\x66\x93\x77\xfe\x85\x0a\xad\x57\x93\x34\xe6\xf9\xd7\x2a\x04\x2e\xf2\xc6\x32\xc6\x46\x05\x0f\xbc\x61\x17\xcb\x5e\x1f\x9a\x62\x64\xc2\x08\x67\x3c\x7e\x00\x8b\x91\x80\x2a\x9f\x8f\x91\xdc\xb5\xac\xaa\x8f\x90\x9f\xd1\x67\x0a\xf9\x72\xac\xeb\x92\x67\x20\xe3\xc3\xbe\x6c\x65\xc6\xb2\x9d\x8d\x2d\x11\xeb\x91\x19\x39\xf5\xef\x7f\xf0\x4a\x33\x8d\xa3\x62\xcd\xab\x6c\x02\x9d\xa4\xc8\x91\x55\xa9\x71\xda\xac\x8e\xc2\x1f\xd0\x58\x4d\xb5\x29\xb4\xb7\xfe\xd4\xe8\x42\x31\x12\x50\xcd\x7f\x62\x24\x8a\xb0\x18\x09\xa7\x75\xb3\xb3\x9f\x50\x21\xaf\x01\xe5\x6e\xa0\x1f\x9a\xa4\x53\xc6\xa8\x55\x52\xf0\x37\xf6\x82\xfe\x31\x5d\xef\x0e\xf6\x45\xec\xbf\x8e\x91\x88\xc2\x63\x24\x7b\xb3\x51\xde\xce\x23\x3b\x2a\xf1\xf7\x48\x67\x1c\xc4\x27\x15\xe6\x9a\x5e\x76\x09\x49\x2f\x67\xac\x62\x5e\xa5\xb8\x82\xb1\x81\xf9\xd7\x0f\xeb\xa2\xe7\x62\x24\x37\x59\xd7\xfc\x9f\xe1\x9b\x05\xd9\xf0\x12\x87\x4a\x7d\x97\x24\xde\xb8\xe7\x50\x29\x58\xf7\xdd\xe6\x8f\xe7\x7e\xb8\x50\x11\x96\xf6\xdf\x1f\xf2\x5c\x8c\xc4\xc7\xe1\x43\x42\xf7\xca\xaf\xf1\x3e\x16\x03\x2c\x0f\x6c\x97\x90\xc9\xa5\x50\xc5\x97\x2d\xd7\xbd\xa4\x5f\x90\xdd\xc0\x0e\xed\x29\xfd\xfb\x43\x9e\x8b\x91\x38\x4b\x19\x10\x99\x28\xb7\x6b\x94\xbf\x47\xf5\xe6\x2a\xd7\x7c\x87\x79\x26\x3b\xde\xbe\xf3\x98\x6f\xb8\x84\xd6\xa6\xa8\xa4\xf1\x7f\x70\xc8\x73\x31\x92\xaf\x35\x9d\x5d\x9e\x68\xf1\x4e\x9f\x0d\x47\x17\x52\xfa\x58\x62\xa5\x74\xe7\x9a\x89\x79\xf4\xbc\x68\xa8\x66\x56\x28\x0b\x79\x79\xff\xfe\x90\xe7\x62\x24\xaf\xf5\x8d\x85\x48\xd4\x82\xb6\xaf\x49\xf5\x62\x72\x6f\x31\xac\xd5\xfe\x22\xe0\x10\x8e\x2b\x4a\x92\x0b\x4e\x0f\x79\xc5\xb9\xfc\xb7\x99\x8e\x20\x09\xd1\x73\x31\x12\x6b\xfd\x77\x4a\x4d\x41\x47\x7b\x68\x5b\x38\xf6\x32\x7a\xca\x42\xb5\xcd\x51\x7c\xba\x4c\xe8\xf1\xce\x65\x6d\xcf\x6a\xdd\xd2\x5f\xfc\x6f\xe6\x7a\xa0\x2b\xf1\x3f\xc2\xb7\xa6\xed\x71\x0d\xa5\x22\xf2\xd3\xfd\x59\xb9\x1d\xed\xa2\x56\xa4\xfd\x9c\x4c\xb9\x63\x0a\xc8\x55\x6f\x45\xda\xd9\x83\xd8\xa3\xa1\xf0\x2d\x80\x83\xfd\xfd\x92\x5c\x3e\xce\x15\x52\x20\x5d\x60\x48\x8c\xa5\xd7\x7f\x3f\xb8\x19\x94\x14\xc4\x50\xef\x77\xf7\x3d\x36\xe6\x42\x76\x96\x63\x36\xd4\x15\x0d\xc4\xc1\x6e\x6d\xb1\xc4\xaa\x86\x9d\x9e\x4d\xac\xd1\x68\x67\x0a\x3e\xa2\xa9\x0c\xec\x15\xe4\xcf\xf0\x0d\x54\x5a\xe3\x04\xb2\x77\x93\x58\x6e\x6b\x40\x77\x4c\x00\x07\xbb\xb5\x75\xbd\x67\x9c\xad\x94\x9c\xd5\xbc\xb3\xa8\x70\xfa\xbd\xfa\x36\xce\x53\x81\x01\x2a\x16\xb4\xdc\x44\x74\x0c\x99\x64\xd7\xc7\x8c\x50\x77\x07\x10\xe7\x27\x26\xfa\xff\x2c\xe6\x0c\x0f\x08\xa5\xff\x21\x79\xb6\x6b\xe6\xe9\x17\xc7\xed\xd3\x90\x86\xc7\x1a\x2b\x66\xd5\x8e\x12\xc7\xec\x7b\x2d\xdc\xdb\x00\xda\x34\x1e\xc4\xc1\xc6\x76\xad\x55\xa4\x5a\xda\xe8\x14\x43\x5b\xfb\x73\x8e\xce\x6e\xcb\x95\x4c\xf6\x48\xe6\xf9\x59\xbf\xab\xdd\x7a\xa3\xa4\x36\x5b\x52\x5d\x88\x18\x09\x88\xfb\xa7\x1b\x89\xe2\x45\x62\x24\xa0\x3f\xdc\xf3\x62\x51\xd6\xec\x7c\xb7\xda\x1f\xec\xb0\x89\xb2\xf4\x10\xe3\xde\xcd\xb7\x50\xa6\x94\xca\x8f\xcb\x0b\x4a\x54\xf8\x76\x58\xb2\x93\x08\xbd\xec\x07\x71\xb0\x93\x5f\xff\xf5\x46\xd0\x8d\xc5\xa5\x83\x9d\x60\xb9\xac\x8b\x9e\x2f\xac\x77\x1d\x07\x0d\x77\x46\x9a\x7d\x89\xdf\xc3\x81\x48\xac\x0b\xea\x39\x08\xe2\x60\x62\x45\xf8\x5c\x7a\x3b\xe8\xfa\xe0\x2b\xa3\x31\x2d\x3f\x65\x95\x79\xa5\x61\x98\xc4\xb7\xf7\xd3\xcf\x16\x2f\x09\xcf\xc4\xf9\xaa\x99\x42\x9b\xa8\x82\x38\x98\x58\x62\xb3\x1a\x5f\x92\x9b\x07\x5f\x7f\xf1\xca\xef\x7b\xb7\xc3\x17\xd1\xa7\x9d\x9e\xfa\xe4\xf3\xf7\x4a\xc6\x8f\xfb\xf2\x38\xb9\xfa\x42\x88\xb2\x20\x0e\x26\x16\xf1\x4a\xfb\x04\x6b\xb8\x74\xfc\x55\xd9\xc0\x4b\x9c\x29\x3f\x05\x7e\x39\x26\x53\x93\x7b\x4b\x1d\x88\x61\xd5\x97\xd1\x2a\x6d\x4e\x41\x2f\xf9\x00\x1c\x6c\x6c\x17\xc2\xa2\x55\x22\x3e\x84\xdd\xfc\x74\xea\x36\x33\x33\xdc\xb1\xc5\xfd\x42\x9b\x6f\xb2\x2a\x7f\x2f\xf0\x55\x33\x07\x9d\xb8\xfd\x28\x22\x46\x02\xe2\xfe\xe9\x46\x22\x7a\xa1\x18\x09\xe8\xbe\x7a\xde\x2c\x4f\x89\x77\x16\x05\x65\x5a\x3a\xed\x52\xd9\x0b\x39\xd4\x8d\x85\x34\xf2\xcf\x62\x37\x26\xa5\x1d\x12\xf9\xab\x15\xaf\x76\xbb\x43\x1f\x77\x80\x38\xd8\xd9\x13\xfa\x0b\xa3\xec\x09\x92\xad\xf2\xeb\x70\x6a\xa1\x32\x99\xb1\x1b\x6b\x8c\x1b\x77\x0e\xaf\xa5\x69\xf6\x96\xca\x86\x72\x67\xd4\x22\xca\x82\x38\x98\x59\xa9\xa9\x57\x1f\x4c\x38\x55\x77\xb1\xf9\x1d\xeb\xd0\x30\xe9\x58\x3a\x9a\xed\xc8\x20\x67\x60\x55\x78\x3c\xc5\xb2\x33\x98\xa7\xfa\x83\x28\x0b\xe2\x60\x66\x0d\x86\xc9\x92\xd5\x4d\xd6\x7f\x9e\x1a\x1e\xd5\xba\xcb\xfd\xf5\x1d\x9f\x01\x35\xde\xb3\x83\x84\xca\xce\x70\x46\xb1\x4d\xb3\x13\xa8\x41\x22\x88\x83\x99\x85\xb9\xee\xd1\x33\xc9\xc0\xd0\x50\x14\x29\x46\x63\xae\xea\xc4\xe1\xfa\xe0\xad\xac\x16\x83\x6d\xcb\x6e\xda\xfb\xd4\x0a\x51\x75\xe8\x45\x0c\x88\x83\x8d\xad\xdf\xee\x87\x66\xa1\xd9\xac\xf7\xcd\xc6\xda\x27\xd7\xcd\x06\xd3\x62\xe4\x2a\x71\xbf\xe4\x04\xcb\xef\xbd\xc6\xb0\x25\xe1\xc3\xde\x43\x4c\xf4\x40\x1c\x62\xb3\xd3\x8b\xc5\x48\x40\xcf\x4f\xff\xb1\xd9\xa9\x02\xd2\xca\x75\x7f\xac\x21\xab\xb3\x59\x71\x85\x9a\xb0\xb4\x7e\xee\xb0\xea\x51\x1f\xf1\x56\x6c\x99\x87\xf8\x71\xd5\x22\x50\xa8\x12\xc4\xc1\x57\x3e\x97\x24\xd4\x2c\xc4\x5f\x17\xd7\x20\x5d\x0a\xdd\x9d\x72\x46\x7e\x40\x6d\xba\x92\x3b\xf5\x2c\x41\x73\x77\x22\x12\x7b\x31\x01\x0b\x5a\xf9\x04\x70\x30\xb5\x72\x79\x6f\x95\xd9\xbd\x12\x7c\x53\xc0\xf9\xf0\xc9\x4c\xd9\x17\x5b\x8e\xdb\xe5\x1f\x77\x2d\xd2\x36\x7d\x9d\x84\xd2\x36\xee\xfb\x41\x1b\x2e\x80\x38\x98\x5a\xba\x0c\xba\x06\x94\x96\x59\x0c\xe9\xd1\xea\xf6\xd9\x4a\x1e\x5e\x7c\xe3\xa5\x49\x0f\x31\xe9\x64\xa5\xc9\x37\x8b\x73\x68\x48\x2d\x10\x65\x41\x1c\x4c\x2d\xa7\x46\xdf\xdb\x85\x3d\x01\x53\x7e\xa4\x95\x45\xec\x5e\x36\xf6\x21\xee\xb5\xab\x0e\xd7\x5d\xd4\x9f\x54\xa3\x4d\xb9\x36\xae\x42\x4d\xec\x41\x1c\x6c\x6c\xdf\x50\xb6\x18\x8c\x72\xc4\xa5\xc8\xbb\x36\x2e\xa7\x5c\x4f\x25\x2a\x5c\x77\xd3\x7c\x8c\x7e\x2b\xef\x6d\x09\x8d\x99\x17\x95\x40\x1f\xb4\xbd\x3f\x80\x43\xa8\x75\xb1\x18\x09\xe8\x39\xf9\xbc\x5a\x54\x47\x9f\x90\x76\x03\xec\xc4\x96\xc4\x94\x2b\xad\xa3\xa5\x57\xf5\x1f\x1f\x39\xd7\xf6\x4d\x5c\x1b\x33\x57\xb1\x9b\x2f\x0d\x80\x12\x85\x20\x0e\x76\xfa\xa7\x38\x8b\x84\xb2\x56\x03\xb6\x0f\x39\x28\x05\xdc\x9f\x61\xd9\xaa\xf8\xbf\x9a\x52\x7d\x2d\xe8\xaa\x7a\x95\x78\xea\x53\x4e\x1e\xd4\x3e\x08\xc4\xc1\xd4\xda\xd6\xc9\xb2\x78\x60\xd8\xa9\xf4\xd3\x89\xb4\x70\xeb\xc6\x3e\xcd\x57\xef\xec\x55\x4a\xce\xaf\x99\xce\x7d\x14\x7f\x3a\x48\xfd\xa0\xbd\xe3\x40\x1c\x3c\x46\x82\xee\x4b\x54\x9d\xf9\xfd\xd9\xe9\x8b\x5b\x92\x21\xfc\x41\xdf\x79\xac\x9a\x71\x29\x30\x15\xf7\x9e\x3c\xd8\x4f\x1b\x68\x13\x80\xa2\x7a\x20\x0e\xa6\x56\x4b\x0b\xd5\x46\xfc\xfb\xb4\xa1\xe1\x17\x99\x51\x18\x09\x9a\xaf\x95\x93\x4f\xd1\x4c\xd1\x1f\x8d\xfe\x6c\x11\x8a\x25\xbb\x91\x05\x3d\x68\x81\x38\xd8\xd8\x76\x5b\x95\xe6\x55\xbe\xf2\xad\xb3\x0b\xbe\x2e\xf6\x5e\xd8\xe9\x97\x6b\x91\x3c\x8a\xc9\xe3\xe5\xc9\xcd\xb0\x41\x57\x5e\xb3\x0e\x4c\x84\x5a\x20\x0e\xa1\xd6\xc5\x62\x24\xa0\xf9\xd0\x7f\x44\xc1\x9d\x96\x9f\x45\xaa\x38\xdb\x33\x04\x1b\x92\x8d\x69\xcc\xb8\xf2\xdf\x95\xef\x6b\x09\x2a\xfb\x85\xb7\x59\x11\x1a\xa0\xdd\xd8\x02\x45\xc1\x01\x1c\xfc\x2b\xa7\x12\x8f\x4c\xb3\x24\x9b\xb0\xed\x37\x0c\x1d\x81\xfa\x5c\xf7\x82\x3a\x3d\x9a\x4d\x42\x13\x99\xec\xa6\x5e\x8a\xe2\xeb\x48\x42\x5b\x71\x81\x38\x98\x5a\x96\x6a\x75\xbf\xee\x61\x2c\x37\xb8\xee\x33\x7c\x45\x5e\x6c\xe2\x9b\xf8\xec\xab\x87\x73\xe3\x9d\x5a\xce\x48\xd5\xec\xd0\xdb\x1d\xe8\xf6\x0d\xe2\x60\x6a\x05\x05\x89\x89\x65\x9c\x8e\x24\xb7\xd8\x73\xe2\x3d\xf3\x1b\x98\xfe\x82\xb5\xad\x3f\x28\xc2\x1b\x1b\x28\xe8\x5a\x78\x80\x4c\x06\x6d\xa2\x08\xe2\x60\x6a\x55\xba\x45\xef\x61\xb5\xbd\xfd\x2a\x87\xb9\xf9\xb3\xf5\x9d\xdb\xd5\x2f\xaa\x32\x96\xf3\xd1\x6c\x54\xc9\x6f\xb7\xc7\xbd\x4c\x1e\x41\x8f\x5a\x20\x0e\x36\xb6\xfa\x14\x9e\xb4\x3e\x03\x73\xfb\xe9\x28\x5b\x9d\xd5\x78\x7d\x2b\x92\x5f\x85\xbe\xf0\xdf\xae\xc3\x57\x11\x16\x2b\x59\xc5\xa3\xa7\x83\xba\xc7\x03\x38\x84\x5a\x17\x8b\x91\x80\xe6\xbd\xe7\xd5\x5a\x78\xd9\x3b\xa1\xc0\xbe\x7b\xfa\xe6\x66\xaf\x42\x77\x54\xff\xdb\x49\x15\xff\x7b\xe8\xf8\xd3\xfe\x8a\x11\x3c\x89\xba\x91\xee\x3b\xd0\x32\x35\x80\x83\x67\xff\x34\xda\x32\x65\x4b\x64\x68\x42\x0c\x26\x1f\x1f\xf9\xac\x1b\x7b\xba\x54\xfb\x9e\xa9\x13\x3a\xb1\x8b\x4b\xaa\x33\xdc\xf9\x01\xf5\x14\x04\x71\xf0\xad\xb8\x2c\x59\xb3\x1b\xd2\x68\x05\x6d\x97\x22\xbb\x85\x50\x84\x16\x02\xa9\x5d\x78\x06\x77\xaf\x7d\x08\x9d\xb5\x59\xfe\xba\x79\x02\x5d\x08\x20\x0e\xa6\x56\xdb\x7b\x2f\xaa\x5f\xec\x76\xd7\xb1\x50\x51\x68\xd5\x5b\xfd\x14\xeb\xc3\x19\xfa\x30\xf8\xa3\x62\xc6\x3b\x62\xf5\x8a\x72\x24\x5d\x11\x65\x41\x1c\x4c\xad\xe1\xc7\xa6\x2b\xd6\x68\xa8\x38\x55\xfa\xdf\x3e\xb1\x28\xd4\x0c\x5b\x5c\xce\xcf\xeb\x3a\x51\xb6\x65\x65\xb7\x67\xb0\x69\x6f\x80\x7a\xdd\x83\x38\xd8\xd8\xf6\x28\x8c\xab\x30\x58\xe9\xe6\x96\xd3\x32\x0f\xb3\x8a\x2f\x0f\x25\xb0\x8f\x37\xd9\x74\x6e\x5a\x79\xf5\x97\x3c\x2a\x49\xf2\x87\x62\x24\x20\x0e\xa1\xd6\xc5\x62\x24\xa0\xf5\x8d\xf3\x6a\x4d\x07\xe3\xeb\x22\x79\x1d\xee\x52\x3e\x98\x36\x26\x47\xb7\xa2\xb6\x41\xc5\xb0\xa0\x67\x7f\xa5\x6c\x7a\xfb\xbb\xfe\xda\xa1\x25\xb4\xc9\x1d\x88\x83\xf7\x50\x3a\xd0\x0c\x25\x65\xcf\x39\x7c\xbc\x22\x98\xee\x3b\x12\x5e\xd7\x83\x46\xac\x9f\xfa\xfb\x90\x85\xdb\xfc\x28\x92\x5d\x76\x14\x4a\xa7\x80\x38\x98\x5a\x31\x36\xfa\x92\xa6\xa7\x04\xaa\x47\x8f\x1f\x3c\xe1\x30\x30\x55\x19\xf0\x37\x53\x94\x91\x5d\x9f\x72\xe0\x22\x09\x66\xbe\xe4\x63\x8e\x28\x0b\xe2\x60\x6a\x09\x2f\x63\x6e\xbf\x44\x67\xa1\xb6\xbf\x7d\xe3\x20\xf3\xe3\xba\xca\x93\xc9\x5c\xa9\xc7\x5e\x9f\x44\x32\x13\x6f\x3d\x4c\x7d\xf8\x11\x4a\x00\x82\x38\x98\x5a\x05\x5a\x61\x2b\xb3\x6b\x3d\x7e\xd7\xfe\xe4\x37\xe6\xf8\x1b\x14\xf9\x05\x51\x99\xda\xab\x05\x96\xf6\x77\x3c\xe8\x52\x91\xa0\x86\x96\x5f\x40\x1c\x6c\x6c\xad\x9f\xfd\x12\xd6\x4d\x4c\xa0\xbc\x93\x7d\xfb\xa9\x5d\x7e\x4c\x93\xf6\x2d\xaf\x8a\x0e\xb1\x26\x99\xc9\xfe\x2b\x9f\x26\x72\x6f\x6a\x20\xd4\x02\x71\x08\xb5\x2e\x18\x23\x01\xad\x5f\xff\x13\x23\x11\x3d\x17\x23\x99\x90\x32\xe9\xdf\xc6\x22\x74\xb0\x2c\xfc\x49\x55\x35\x4c\x8a\x9b\xfd\x34\xa6\x26\x18\xe9\x70\x81\xd9\xae\x7b\x34\x28\x9f\x8f\xe8\xef\xd7\xf9\xce\xc5\x48\x0c\x04\x25\x6c\x04\x9e\xfc\x4e\xc4\x29\x8f\xa8\x78\x63\xd1\xe3\x35\xb8\xf2\x4b\xd0\x36\x7a\xb1\xbf\x66\x80\x63\xed\xee\x8c\xd2\xf1\xdf\x1f\xf2\x5c\x8c\x04\x75\xc6\x69\xa9\xe8\x87\x4f\xf9\xdc\x07\xaf\x2a\x49\xe5\xd7\x19\xcf\x2b\x7d\xe5\xc4\x37\xb6\xb9\x1a\xcc\xc6\x9d\xaf\x0b\xb3\x0d\xff\x6f\x96\x16\x41\x63\xf9\x1f\x39\xb1\x8e\x79\x7a\x93\x3b\x1a\x8a\x93\x02\x5f\xf5\x9d\xf1\x36\x95\xb9\xb8\x6d\x04\x7e\xb0\x14\xbc\x19\x29\x15\x8d\xb5\xbb\xc9\x06\x6d\x31\x06\xe2\xe0\x2f\x0d\x47\xd5\xa6\xef\xca\x7e\x6a\xba\xc2\x22\xa8\xf4\xca\xde\x8f\xc3\x99\xb5\xe2\xd4\x33\x6c\xae\x2b\x60\x21\x67\x5e\x8b\x21\x04\xda\x2b\x07\xc4\xc1\x2e\xf0\xf9\xe4\xa5\x82\xa2\x95\x1f\x7d\xa6\x6e\x7e\x98\xfe\xf7\x6c\xe5\xc8\x7c\xe4\xdb\xd5\x12\xb0\x7b\xd4\x25\x79\xc8\xce\xea\x82\x57\x11\x65\x41\x1c\xec\x02\x37\x24\x7f\xaa\x38\xe7\x41\xb7\xcc\x77\x16\xc7\xb4\x82\xa1\xd3\x1e\x77\xc5\x60\x4d\x48\x22\xfa\xa4\x91\xb3\x42\x48\xd9\x7e\x6f\x1a\x51\x16\xc4\xc1\x2e\x70\x33\x26\xdb\xc4\x7c\x94\xfe\xdf\xfb\x0e\xe2\x44\xd5\xaf\x23\x70\x54\xd9\x29\x12\x51\xad\xc7\x59\x5a\xef\x99\x5d\xd7\xc1\x57\x84\x9a\x10\x82\x38\x78\x4e\x8c\x81\xe0\xfa\xd7\xa4\xaf\x34\xcf\x33\x95\xc6\xea\x92\xac\x91\x9f\xe6\xfc\x20\xf4\x9c\xfd\x84\xb6\xec\x9b\xaf\xbb\x3d\x65\x91\x0f\xe5\xc4\x00\x1c\xe2\x02\xbf\x58\x8c\x04\x74\xcd\x9c\x57\x2b\xe2\x6e\x8a\x38\x99\xe4\x47\x6e\x05\x02\x8f\x01\x4b\x6e\xd3\xba\x79\xdc\xbe\x26\xed\xf5\xaa\xdf\xaf\x38\x33\x32\x5b\xf3\x24\xa0\x4d\xf1\x40\x1c\xbc\xd5\xb1\xe9\x15\x46\x8a\xb4\xa5\xf1\xb7\x3a\xd4\xf8\x36\xf1\x6d\x89\xa6\x65\x33\x9e\x84\xa5\xfe\x94\x54\x6d\x56\x9f\xd4\x55\x90\xa0\x60\x06\x88\x83\xbf\x90\xfd\xb2\xc9\xfd\x8c\x4a\x3a\xc3\x6c\xf4\x1d\xd1\xda\x6b\xcc\x2e\xce\x88\x1b\xc1\x73\x5c\x6d\xd5\xad\x1b\xde\x4f\xce\x88\x6e\x1c\x43\x2f\x64\x01\x1c\x4c\x2d\x6f\xbc\xba\xb3\xec\x07\xa4\x38\x76\x23\xf8\x22\xa5\x43\xfc\x63\x4f\xac\xdb\xfa\x26\xe9\x6f\xc7\x3f\x7a\x7d\xd3\x54\x20\x48\x19\xfa\xa2\x0e\xc4\xc1\xd4\xc2\xe0\xe6\x7b\xba\x44\x8a\x79\xd3\x36\x81\x3e\x5b\xeb\xbe\xa7\xd4\x6f\xd4\x97\x8a\xce\x7b\x18\x37\xfd\xf0\xb3\x36\x0b\x5c\xe4\x95\x10\x65\x41\x1c\x6c\x6c\x6f\xaa\xd7\xcd\x38\x3c\x98\x52\x90\x7f\x7e\xe7\x56\xe2\x8e\x77\x73\xc3\xe6\x4d\xbd\xd9\xb7\x93\x9d\xfd\xb4\x58\x7f\xfa\x63\xc8\x9d\x11\x6a\x81\x38\x84\x5a\x17\x8b\x91\x80\xfe\x1b\xff\xa3\x6b\x68\xa9\xbc\x76\xc1\x26\xbe\x3c\xfa\xe9\xcd\x21\xcf\x27\x52\xde\x14\xdf\x34\xa5\x59\xa2\xdf\xb8\x8c\xbc\x69\xc0\xfa\xe9\xe4\x05\xa5\xd4\x40\x1c\xec\xf4\xf9\x8f\xeb\xd7\x08\x05\x0f\x0f\xe4\x8f\x84\xd3\x1f\xb5\xb1\x45\xb6\x4f\x13\xbd\x2c\x2b\xe0\x37\x26\xed\x61\x1e\x24\xd3\x35\x80\x5e\x73\x83\x38\x78\x6b\xc7\x96\x9f\xfd\x44\xa4\xbd\x87\xce\x6c\x4f\x3d\x14\x8b\x6f\x61\xbe\x61\x90\x0f\x1f\x47\x59\x44\x91\x75\xf9\x34\x7a\xcf\x5b\xbd\xe6\xff\xce\x7c\xff\xbf\x39\x98\x5a\xa6\x01\x31\xe2\xf4\x2f\xda\x54\x78\x5a\x4d\x9b\x66\x74\x27\x8f\x99\xe4\x5e\xd3\x79\x65\x51\x58\xb5\xb5\x4b\xfc\x20\xc5\xf1\x84\x9a\x1d\x81\x38\x98\x5a\x42\x3a\x82\x6c\x11\xce\x41\xb4\xf5\x23\x75\x2b\xd4\x58\xc7\xea\xd3\x45\x51\x22\x1f\x7f\x5c\xf9\x3c\xc8\xbc\xb3\xe7\xda\x80\x0e\xfd\x75\x83\x38\xf8\x23\x9f\xa2\x36\xcf\xc7\xb7\x3b\xb3\xc9\x2a\xde\x15\xd7\x71\xbf\x3b\x5d\x26\xdd\xf2\x78\xcb\x24\xf7\xb5\x99\x30\x76\x5d\xf8\x07\x33\x36\x42\x2d\x10\x87\x50\xeb\x62\x31\x12\xd0\x1b\xfe\xf3\x6a\xf5\xdf\xc4\xf6\xda\xad\x65\x7c\x67\x50\x81\x7f\x1b\x83\xbb\x20\x98\x39\xe2\x8f\xbf\xfe\x44\xae\x8b\x59\x07\x5b\x82\x60\xd5\x15\x5a\xc4\xe9\x83\x38\xd8\xe9\x37\x4f\xcb\x8c\x1a\xf9\x94\x62\x8f\xa4\x94\x54\x3f\x21\xc1\xa1\x1f\x0d\xc6\xd3\xd1\xc2\xf3\x93\xb2\xfc\xed\x45\xd6\x21\xe7\xd9\x8b\x28\x0b\xe2\x60\x6a\xb5\x5b\x8d\xf8\x5a\xdd\xad\x9b\x57\x8a\x2a\x66\xf6\x41\x93\x14\x54\x56\x5e\xde\x8f\x4a\xc2\x5f\x8e\x27\xcf\xaa\x11\x5d\x1b\xe8\x44\x94\x05\x71\xf0\xce\xff\x9d\x07\x14\xca\x07\xfc\xae\xac\x33\x97\xb2\xc9\xa7\x51\x4d\x5f\x3c\x0c\xbe\x3b\xb8\xf7\x9d\x83\x6f\x40\x83\xc7\xf6\x9b\x1d\x34\xa1\x06\x71\x30\xb5\xde\x34\x44\xed\x92\x31\x5c\xf6\xf8\xe0\xe6\xf1\xda\xfc\x95\xf6\x5c\xf3\x28\x5e\xda\xb3\xe9\x90\xca\xe1\xeb\x6d\xd4\xb1\x39\x49\x15\x88\xb2\x20\x0e\x36\xb6\x17\xee\x46\x62\xaa\x56\x37\x1b\x13\x19\xb7\xde\x16\xee\xb4\xa9\xc7\xb8\x1f\xcc\x91\xad\xa6\x5a\x95\x62\x80\xfe\xf0\xe5\x0e\x51\xcd\xf3\xb5\x92\x7f\xc7\x48\x52\x05\x9f\xdd\xed\xfc\x82\x9d\x84\xa4\x39\x8b\x4e\xe9\x40\x8f\x46\xb0\xe3\x65\x31\xba\xbf\x7c\x6b\xd1\xda\x6f\x2b\x8f\xa6\xfd\xdf\xcf\x88\x38\x73\x6b\x3b\x8d\xee\x58\xf3\xb8\xe5\xbc\x95\x0f\xcf\x26\x2e\x73\x0e\x16\x69\xb9\x85\x1a\x62\x8d\x47\xdc\x9b\x25\x7c\x19\x46\x06\x8b\x91\x80\x2a\x9f\x8f\x91\xc4\x7c\x53\x5c\x20\xf5\x92\xc6\xcb\xd1\x0b\xb9\x94\xa4\x25\x15\xee\x16\xa7\xd9\x92\xcf\x5e\xe9\x15\x32\x73\x73\x96\xfb\x15\x8b\xd7\xbf\xd0\x9c\xc8\xe5\x3e\x3d\xf1\x1b\xa4\x4b\x75\x5b\xa4\xe9\x24\x2a\xe4\x8a\x2b\x5f\x95\x49\xca\x26\x66\x0f\x08\x2a\x6f\xc9\x27\x9a\x91\x41\x31\x12\x50\xcd\x7f\x62\x24\xaf\x61\x31\x92\x09\xc2\x27\x9f\xab\xab\x77\xd3\x9c\xc3\xea\x87\x28\xa9\x63\x2c\x5b\x89\xeb\x5e\xae\x7e\x3a\x6a\xf9\xec\xc2\xfa\xfd\x37\xc1\xa5\xc8\xbf\x8e\x91\xf8\xc0\x63\x24\xa4\xeb\xf7\xef\xde\x4e\x9b\x88\x4a\xb9\x53\xce\xaf\xf8\x85\x49\x70\x22\xab\x30\x7c\xb5\x9d\xf0\x2b\x93\xb9\xed\xfe\xdb\xb8\x1f\x52\x7f\xfd\xb0\xee\x73\x2e\x46\x92\x11\x1e\xc6\xe7\xec\xbe\x11\x27\xe1\xec\xfb\x74\x55\xb9\xd7\xea\x13\x65\x01\xce\xb7\x3a\xac\xae\xcc\x1b\x11\xb9\x8e\x48\xf4\x22\x7f\x7f\xc8\x73\x31\x92\x13\xc1\xb8\xf8\x5b\x1c\x74\x6d\x97\xae\xd5\xe2\xb5\x96\x4a\xf3\x7d\x78\xf8\x3d\x2d\x7c\x91\xef\x32\x6d\x5f\x7a\x38\xb7\xc4\xbd\xbd\xbf\x3f\xe4\xb9\x18\x09\xfa\x43\x1e\xcc\x19\xc7\x74\xc5\x97\x89\x62\x57\x92\xf0\xf8\xc5\x0e\x5f\xf0\x97\xe1\xd3\x26\x38\x92\x63\x53\x6a\x09\x25\xc9\x65\xfe\xfd\x21\xcf\xc5\x48\x42\x4e\x47\x4b\x4b\x28\xbd\xfd\xac\xb4\x43\x77\x52\x5b\x7a\x56\xec\xf8\xb2\x31\x70\xde\x1d\xbd\xd7\xd7\x57\x2c\x30\xdd\x8c\x73\xfc\xfb\x43\x9e\x8b\x91\x10\x54\x86\xa7\x22\x3d\xdb\x38\x93\xe3\x9f\xbe\x61\x1c\xdd\xb6\xb6\x5b\x1f\xbf\x42\x9f\x13\xca\xdc\x32\x79\x9a\x91\xa4\xa6\xb4\xf5\xf7\x87\x3c\x17\x23\x89\x64\x75\x5e\x4d\x2e\x20\x75\x23\x56\x6b\x7b\x9a\x2f\xf1\x5e\x84\xba\xa0\xea\x4a\xd5\x0c\xd7\x5d\xa3\x11\x56\xf7\x7b\xa3\xbf\x22\xfe\x47\x73\x3d\xc0\x95\x78\xfe\xd6\x36\x83\x84\xfa\xa3\xda\xfa\x64\x72\x16\x87\xa4\xf4\x41\x49\x8a\xa5\x45\x6b\xb1\x55\x69\xf3\x59\xf1\xa2\x71\x95\xea\xb0\x67\x00\xf4\x91\x2c\x88\x83\xaf\x13\x9a\x39\x35\xdb\x63\x28\x72\x2a\xec\xda\x1a\x2a\xe4\x57\x5f\xe5\x34\x10\xe2\x67\xe3\x9a\x33\xe2\x44\xe7\x68\x56\x2d\x0e\x22\x83\xd6\x09\x01\x1c\xec\xd6\x56\x7f\x22\xfb\xa9\x94\x87\xb7\xef\x54\xf1\xb8\xc3\x17\x8d\xe0\xb0\xe7\x24\xee\x5b\x9d\x4c\xeb\x96\x93\x5d\x0e\x9d\x14\xf6\x06\x94\x4d\x00\x71\xb0\x5b\x5b\xf7\x80\xc0\x5a\xee\xcf\x0f\x74\x4f\x7e\xf0\x9c\x89\x7c\xdb\xff\xe8\xba\xa6\x95\x2c\xcb\x4b\xe0\xf2\xf9\xeb\x23\x9a\x82\x40\xcf\x3b\x88\xb2\x20\x0e\xfe\x35\xab\xdd\xf5\x66\x8b\x2e\x2f\x6b\x7a\x1a\x1e\x24\x6a\xa9\xd4\xf8\xda\xeb\x1e\xa4\xd2\x47\x52\x5c\xd8\x48\x0a\x9b\xec\xf4\xce\xd0\xe7\x18\x20\x0e\x76\xc7\xe4\x3c\xb2\x44\xff\xca\x13\x97\xf8\x31\xc8\x4f\xfc\xdb\x2b\xba\xa0\x1d\x1e\x64\x8c\x65\xf1\xb7\x5f\x38\xb1\xcf\xd0\xc7\xa9\x31\x38\x10\x31\x12\x10\xf7\x4f\x37\x92\xd7\x17\x89\x91\x80\xfe\x70\xcf\x8b\x25\x25\x5e\x4b\x5c\xae\x12\x9c\x40\x37\xf4\xa1\x10\x57\x97\x3f\xe1\xb3\x23\xe6\xdb\xdb\x1f\x0f\xde\x73\xd6\x90\xc7\x6b\xb4\xcc\x6f\x21\x4e\x1e\xc4\xc1\xc6\xd4\x50\x59\x3b\xca\x30\xfb\x45\x59\x1f\xd5\x1b\xab\x7d\x22\xc6\xb7\x4a\x12\x0f\x75\x8f\x58\x9e\xe3\x95\xd5\xde\x2e\xbe\xfe\xee\xe5\x1a\x34\x2d\x07\x70\x30\xb1\x8c\x3c\xa6\x2e\x7f\x15\x0a\xcc\x20\x90\x98\xa8\x7d\xee\x85\x1e\x19\xde\x98\x1a\x63\x54\xfa\xa8\x69\xdd\xe8\x74\xc8\x2b\xee\x0a\x35\xa2\x2c\x88\x83\x89\xf5\x25\x9b\xa1\x53\xb4\x89\xf3\x8c\x6a\xfd\xe1\x60\xe3\x35\xe2\x89\xa0\x75\x25\xfa\xb1\x48\xc7\x2f\x7d\x7f\x50\x27\xd1\x14\x5c\x6f\x41\x1d\x2e\x00\x1c\x6c\x10\xdc\xf4\x77\xb1\xde\xa6\x8b\x47\x78\x28\x15\x07\x0c\x14\x92\x1d\x08\x99\xa8\x97\x35\x1d\x1c\xa5\xec\x7e\xaf\xb2\xb8\xdc\x6b\xf1\x1d\x51\x16\xc4\xc1\x27\x90\xb3\xa7\x03\x47\x62\x4a\x4c\x9b\xaf\x6e\x49\x78\xd2\xb8\xe1\x3f\x61\xe7\xb9\x9f\x7b\x20\x6a\xb6\x5e\x37\x7b\x28\xf9\xbc\x66\x10\x11\x23\x01\x71\xff\x74\x23\xf1\xb9\x50\x8c\x04\x74\x5f\x3d\x6f\x56\x09\x6a\xb1\xcc\xf2\xbe\xb3\x98\x17\x8d\x99\x43\x9e\xad\xbb\x7e\x76\xbc\xde\xa0\x7a\x4f\x76\xff\x40\x2c\x92\xdd\xd8\x8d\x70\x68\x9e\x0b\xe2\x60\x83\xfa\x48\xfa\xd7\xaf\x17\xd7\x05\xdb\xb9\xaf\x7d\x37\x69\xb8\x11\x18\x73\xec\xb4\x90\xa3\x53\x11\x1c\x9c\x5f\x50\xb7\x14\xdb\x98\x4b\x07\x7d\x73\x0a\xe0\x60\x66\x5d\x77\x99\xf8\xdd\xef\xc3\xfa\xc2\x24\x67\x00\xed\x36\x2f\xbd\x73\x0f\x12\xd6\x9f\xcb\x92\x65\x49\xaf\x8d\xb2\x1a\x36\x77\x1d\xa0\x37\x26\x20\x0e\x66\x16\x1f\xe9\xeb\x09\xbb\x7a\x92\xb9\xcf\xea\xea\xb9\x5a\xa9\x0a\x01\x81\xdc\x45\x4e\x0f\xd4\xbf\xd0\x71\xbd\x0d\xbf\xe5\x21\x2e\x0e\x25\xdb\x41\x1c\x6c\x10\xea\xde\x9f\xac\xf8\xe0\x78\xfb\x29\xaf\xb0\x65\x69\xb2\x72\xa4\x69\x10\x07\x74\x37\xc5\x04\xd2\x3d\x94\xe3\x58\x29\xf1\xee\x83\x96\x26\x40\x1c\xcc\xac\xe7\xb8\x3a\xda\xc3\x9a\xf6\x59\xea\x94\xdf\xf2\x8c\x67\x35\x39\xe8\xa4\x86\x14\x32\xc2\x3e\x8f\x62\xac\xd9\x38\x18\xb9\xa7\x89\x22\x26\x7a\x20\x0e\xb1\x7b\xe9\xc5\x62\x24\xa0\xe7\xa7\xf3\x6a\x61\x9f\x49\xa3\x4f\xbe\xaf\xb0\x44\xca\xe3\x8e\xf8\x1d\x3c\x45\x16\xfb\xb2\x34\xdf\x87\x68\x49\x60\xff\xa6\x99\xb4\xde\xe8\x5d\x1b\xc4\xe9\x83\x38\xd8\xa8\x86\x08\xd1\x11\x36\x46\x8e\x92\xa9\xa3\xf0\xf0\xaa\xbb\xcb\x59\x34\x72\xdf\x78\x19\xee\x25\x5e\x89\x9e\x45\xe1\xac\xe7\xa1\x0b\xbd\xe6\x06\x71\x30\xb5\x32\x69\x85\x48\x06\x30\x91\x6c\xa6\x07\x62\x5c\x36\x79\xbd\xb2\xdc\xc7\x52\x6d\x27\xb2\x76\x0f\x89\x9b\x96\xad\xef\x93\x5b\x40\x93\x7d\x10\x07\x53\x6b\x65\x43\xfd\x1b\xdb\xd8\x4e\x69\xa9\x3b\x86\xc6\xbd\x12\x94\x6e\x3a\x55\xed\xed\xe9\x12\x4b\xc6\xd7\x49\xa9\x3f\xa2\xe6\x4e\xa0\xbd\xd8\x40\x1c\x3c\x4a\xc4\x4f\xca\x82\x52\x45\x47\x3e\xb4\x39\xa4\x16\xf3\xbd\xd9\x80\xa6\xe8\x93\x45\x20\xaf\x9c\xa6\xbe\x4a\x39\x65\x70\x9d\xfb\x55\x44\x59\x10\x07\x53\x4b\x45\xfe\xd2\x13\x63\x02\x7d\xee\x00\x12\x1e\xe3\x3e\xa3\x5b\xaf\x27\xab\x76\x7e\x3e\x95\x0b\x50\xde\x3b\xb0\x2f\xa6\x2a\xb4\xc5\x42\xa8\x05\xe2\x10\x6a\x5d\x2c\x46\x02\x7a\x4e\x3e\xaf\xd6\x9d\x87\x39\x2d\x25\x85\xe4\xbf\x24\x37\x1a\x77\x88\xd3\xd1\x52\x15\x93\x8d\x76\x56\x90\xc9\xaa\x04\xc2\xdf\x12\xb4\x69\x39\x2b\x23\x4e\x1f\xc4\xc1\xd5\x1a\x67\x7e\x95\xc6\x4b\xc9\x4d\x24\xfe\x65\xa7\xa8\xb1\x81\x69\x20\xf4\xd9\x95\xbe\xbe\x69\x8c\x4c\x1f\x1b\xa5\xf1\x12\x4c\xa8\x87\x3f\x88\x83\xa9\x25\xd3\x65\x36\x8b\x2d\xa3\xd9\xa1\xd4\x9e\x1a\xaa\x76\xbc\x39\x39\x12\x40\x16\x98\xd3\x2f\x73\x15\x8f\xd8\xf0\xcc\xd8\xf5\x0e\xf4\xcd\x08\x88\x83\xa9\x75\xfb\x1d\x99\xc0\xd3\x5f\x92\x5b\x4f\x5b\xf7\xad\xfb\xba\x36\xdb\xa5\xa4\x45\x76\x13\xad\x2d\x0a\xf6\xd6\x6e\xf5\x77\x8c\xbf\x84\x5e\x6f\x81\x38\xd8\x20\x28\x3b\x86\x8a\xa5\x84\x22\x53\x66\x86\x0b\x0d\x54\x1c\x18\x6c\x97\x3c\x7c\xa2\x20\xd6\x39\x19\xce\x47\xda\x69\x1a\x24\x75\x00\xed\x10\x0d\xe2\x60\x6a\x79\x9b\xce\x21\x87\xf3\xa4\xca\x5a\xf1\x52\x59\x17\x57\xeb\x1d\x5e\x55\x6c\xb0\x7b\xe7\x7e\xcb\x6c\x4b\x41\xbf\x43\x38\x1a\x9d\x14\xa1\x16\x88\x43\xa8\x75\xb1\x18\x09\x68\x3e\xf4\x1f\x3d\x94\x66\x70\x5e\x7f\xdc\xd2\x68\x88\x70\x27\xe0\xd7\x94\x59\x70\x18\x93\x8e\x6e\x15\xaf\xcf\xe5\x27\xdf\xef\xa5\x49\x14\xdb\x0c\x86\xa2\x44\x00\x0e\x36\xaa\x5d\x83\x31\xa1\x0b\x5a\x32\x96\xb2\x9a\xdf\xbd\x39\x28\x8b\x52\x37\x25\x72\xd9\xb2\x1e\x56\x1c\x05\x59\x25\xed\x1d\x25\x60\x5b\x42\xe1\x6a\x00\x07\x53\x6b\xe4\x26\x6e\xb7\x52\xd4\x55\x51\xa6\xd9\x51\x02\xad\x02\x65\x33\xd5\x79\x4b\xa1\xea\x92\x3b\xc4\x84\x43\xb6\x51\x4f\x54\x5e\xf2\x21\xca\x82\x38\x98\x5a\xb9\x2a\x33\x9d\xc7\xc3\x8b\x27\xd9\xcf\xde\xdf\x25\xf6\xdc\x6a\x63\xa4\x60\x71\x5c\x56\x7d\x61\xbd\xee\x3b\x3e\x95\x1d\x12\x08\x35\x4c\x06\x71\xb0\x41\xf0\x0e\xee\x7a\x4a\x96\x3a\x6a\x5c\x64\x8a\x8e\x9b\x82\xe1\xda\xa4\xd6\xae\x69\x32\x23\x3e\x9e\xf1\x81\x08\xab\x50\xc1\x84\xcd\x1a\x5a\xab\x07\x70\x30\xb5\x04\xa7\x08\xd7\x74\xe2\xb8\xbe\x8a\x1c\xb3\x8c\x86\xe2\x3c\x19\x25\xb2\x9d\x7c\xf4\xf8\x61\xf6\xf5\x82\xfb\x79\x51\x2e\x72\xce\x35\x08\xb5\x40\x1c\x42\xad\x8b\xc5\x48\x40\xf3\xde\xf3\x6a\xe5\x29\xf7\x90\xfb\x87\x5d\xa2\xcb\x70\xd9\x66\xf2\x43\x4e\xe6\xbb\x2a\xdd\xf6\x35\xa7\xbe\x9d\x56\xbe\x58\x6a\x8f\x6b\x29\x06\xda\x45\x14\xc4\xc1\x46\x75\x4a\x8d\x49\x8d\x22\x91\x70\x29\x3b\x7d\x46\xe4\x03\x26\xd6\xb5\x2e\xc7\xdf\xca\xa9\x3d\x01\x11\xd5\x4f\x26\x93\x91\x03\x23\x9b\x10\x65\x41\x1c\x4c\xad\xd7\xe3\x93\xf1\xfe\x69\xbf\xe6\x49\xd8\xea\x50\xf8\xff\xb4\x26\xa4\x64\xe9\x7c\xbb\x39\x24\x60\x19\xba\x8f\x81\x6a\x35\x36\x0d\xdd\x10\x41\x1c\x4c\xad\x51\xc7\x44\x96\x72\x06\x2d\xa5\x12\xb3\x25\x85\xe2\xb3\xb7\x16\xdb\x3c\xf3\xbc\xc5\xa3\x04\x26\x84\xfb\x1d\x44\xb6\x0e\x4f\xaf\x21\xca\x82\x38\xf8\x9e\xe6\xde\x12\x81\x9d\x12\xc1\x9e\xcf\xef\xce\x99\xe7\x15\x51\x99\x7d\x3e\x35\xb7\x15\x7f\x17\x7b\x2b\xc5\x4a\x35\xac\xe4\x8d\x0f\x14\x7c\x02\x71\x30\xb5\xde\x71\xff\x18\xe3\x7a\xe4\x67\xd4\x23\x28\x5d\x1f\xa5\xeb\x85\xe9\x5b\x9e\xa1\x11\xa8\x26\xb4\x6b\x7d\x4f\x89\x87\xff\xcb\x35\xe8\x59\x0b\xc4\x21\xd4\xba\x58\x8c\x04\xb4\xbe\x71\x5e\x2d\x66\x29\xd6\x51\x1f\xb2\xf9\x14\xf4\x52\x66\x49\xfd\x5c\x59\xc3\x00\x9e\xee\xb7\x52\xeb\x6a\xda\x57\xa9\x9e\xe8\x48\x85\x99\x15\x22\x4e\x1f\xc4\xc1\x46\x75\x6b\x6b\xec\x0d\xbd\x91\x90\x39\xf2\x3a\x99\xa4\xda\x41\x27\xfe\xc3\xb6\x6b\xb3\xd8\xb3\x8e\x27\x23\x8c\xfd\x0b\xf3\x29\xaf\x55\x10\x65\x41\x1c\x3c\x46\xe2\xe6\x70\x0f\xb5\x5e\x9a\x70\xa7\x23\xf4\x8b\xf6\x49\xb4\xd2\xc4\x67\xe9\x77\xcf\x0d\xd1\xad\xab\xae\x19\xc5\xc9\xa6\x64\x42\xdb\x1d\x82\x38\x98\x5a\x05\xb6\x3b\x31\xec\xbe\x8f\x27\x2a\x64\xc9\x84\xab\xa6\xca\x79\x19\xfb\x48\x7f\xb1\xa8\xba\x65\x37\x38\x2e\x73\x9c\xda\x58\x9a\x41\x79\x0f\x00\x07\x1b\x84\xb4\x5f\x24\xa8\x65\x71\x1c\xfd\xc7\x87\x34\x91\x36\xc9\xa5\xa5\xbb\x7f\xa8\xfb\x90\x9a\x96\xc4\x6e\x7c\xbd\xd5\x57\x1d\xf2\xa4\x08\x51\x16\xc4\xc1\x6f\x88\x63\xa3\x46\x8a\x54\x3d\x2c\x9b\x5b\x84\x76\x2c\xaf\xcb\x57\x36\xd7\x7e\xa0\xcb\xa0\x3f\x2e\x97\xf3\xa7\x3b\x2b\xd5\x12\x4f\x80\x6e\x88\x00\x0e\xa1\xd6\x05\x63\x24\xa0\xf5\xeb\x7f\x62\x24\x3e\xe7\x62\x24\x52\xde\xf7\x55\x6d\x6a\x29\xef\x29\x20\xa5\xf0\xac\xd5\x73\xd5\x48\xdb\xbc\xbc\x4a\x56\xc1\xeb\x53\xea\x14\x67\x52\x4a\xf5\xac\xeb\xef\xd7\xf9\xce\xc5\x48\x6e\xa8\xc8\x54\xdf\x69\xce\x6a\x0c\x5c\x11\x3c\xd2\x64\x48\xf2\xdf\x43\x95\x75\x4d\x44\x77\x76\xfb\xe8\xf3\x90\x01\x53\xad\x3f\xfb\xef\x0f\x79\x2e\x46\xe2\x64\x1a\xf0\xcd\xad\xc7\x5d\x98\xca\x47\x71\x0b\x25\xa8\xf1\x46\xfa\x33\xbe\x32\x59\xa3\x98\xd5\xab\x77\xff\x9c\xda\x65\x37\xe7\xfc\x6f\x96\x16\x41\x63\x79\xfe\x02\xaf\x88\xa0\xb8\xf2\xfb\x3d\xb9\x28\xa5\xcd\x1a\x1f\x23\x8f\xa1\x34\xab\x72\xed\x6f\xda\x86\xd7\x92\xf9\xd1\x43\xd6\xee\x0c\x3a\x50\x0f\x7f\x10\x07\x73\xbb\x63\x59\x5c\x8f\x27\x60\x6d\x46\xcc\x52\xb8\x9a\x26\x52\x70\xc1\x3d\xe5\xf1\xbc\x8c\xca\xfc\x33\x45\x77\xee\x9e\x3f\x11\xff\xf7\x5d\x24\x88\x83\x3f\x96\x70\xbd\x72\xa7\x48\x1f\x0e\x41\x1d\xfa\x21\xa6\x20\xf5\x7b\x2e\xcd\x45\xdb\xd1\x57\xc9\xdb\xe2\xa6\x90\xfe\xc0\xca\x8c\x09\xd4\x85\x00\xc4\xc1\x2e\x70\x7b\xee\xa7\x79\xce\x81\x03\xef\x3c\x18\x02\x4d\x0b\x6f\xa4\xa2\x18\x2c\x16\xe9\x78\x6f\x69\xb1\xd5\x4c\xb5\x37\x0b\x1f\x11\x41\x1d\x23\x41\x1c\x3c\x2b\x98\x95\x72\xc9\x64\xff\x04\xd7\x36\xae\x5b\xaa\x19\x33\x74\xf0\x41\xf3\x2a\xea\x3d\x86\x89\x2b\x15\x89\xb9\x6f\x9e\x6a\x0a\x56\x23\xca\x82\x38\xd8\x05\xbe\xfa\x2e\xfd\x87\x81\xf0\xdc\xf4\x48\x5e\x03\x4a\xa3\x81\x7e\xeb\xa9\x21\x6b\xdc\x1b\xe7\xfb\x32\x6f\x17\x8f\xb4\x64\x32\xba\xb5\x10\x17\x38\x88\x43\x5c\xe0\x17\x8b\x91\x80\xae\x99\xf3\x6a\xbd\x7f\x2e\x41\xb8\x22\xb4\x5c\xd1\x57\x40\x5e\x5e\x67\x6c\x80\x3d\xf2\x78\xb9\xb7\xde\x21\xeb\xcb\x37\x1a\xc6\xf0\x0c\xc1\xa7\xd0\xb7\x39\x20\x0e\x36\xaa\x04\x9d\x2f\x5c\x94\x53\xfc\x92\xd3\x7f\x85\x73\xd6\x62\xe2\x59\x6d\x6a\x19\x18\x32\xf4\x6d\x5c\x0f\x4a\xa7\x2e\x65\x0b\xbf\x04\xc5\x50\x41\x1c\x4c\xad\x7d\x43\xb7\x01\x2e\xeb\xe6\xe1\xbd\xc2\x1f\x68\x2e\xa3\x48\x46\x31\xf2\xf3\xe8\x63\x3e\xaf\xb6\x7d\x98\xf6\xbb\x03\xe4\xdf\x43\xf7\x0e\x10\x07\x53\x8b\x35\x57\x7f\x6f\xaf\xca\xb1\x82\xba\xf3\xdd\x6d\xe1\xee\x8d\x09\xbc\x1a\xad\xbd\xaf\xf9\x03\x7b\x18\x1d\x33\x45\x4c\x1d\x4b\xd0\xd4\x0f\xc4\xc1\x06\x81\x99\x6e\x9c\xdb\xdf\x6b\x3e\xeb\xfb\xae\x96\x52\x8e\x66\xca\x87\xf6\xdf\xfa\xd6\xdc\x82\x1f\x44\xbc\x1d\x3f\x8f\xab\x3c\x73\x85\xd6\xc1\x40\x1c\x4c\xad\xb2\x90\xd9\x2d\x99\x77\x64\xa9\xe9\x92\x0f\x6c\xcb\xb9\xe5\xae\xd0\xe2\x92\xf1\x4d\xa3\xe1\x06\xfe\xd1\x27\x43\xfb\x95\xa4\x91\x85\x50\x0b\xc4\x21\xd4\xba\x58\x8c\x04\xf4\xdf\x78\x5e\x2d\x07\xdd\x9a\xc2\x3a\xbe\xc0\x3f\xad\x58\xe5\xcc\x28\x8a\x13\xef\x2e\x4f\x78\x3c\x36\x2f\x14\xed\xd8\x92\xc6\x2d\x6b\x2e\xa8\x86\xb6\x08\x01\x71\xb0\x51\x3d\x9b\x8b\xd4\xd2\xbd\xad\x8e\xb1\xe6\xba\xf1\xe4\x41\xef\x50\x73\xb4\x9d\xac\xc3\xea\x3d\xf5\x2f\x02\x31\x1a\x97\x1e\xad\x27\x43\xcd\x8e\x40\x1c\x7c\xbf\xa4\xc9\x63\x13\x43\xeb\xf5\x96\x88\x3f\xfc\xb5\x5f\x64\x66\x53\x1c\x54\xcd\x1f\xe0\x66\xba\xfc\x3a\x7e\xf7\xde\xcb\xf2\x48\x0e\xfa\xec\x0b\xc4\xc1\xd4\xb2\x28\x7e\x70\x89\xf5\xe7\x86\x5a\xb8\x94\xce\x80\xa3\xbc\xd0\x4b\x5f\xd7\x95\xf7\xca\x68\x3d\x4f\x19\x35\x33\xc8\xef\x10\x45\x40\xd3\x7f\x10\x07\x1b\x04\xbb\x45\x2c\x16\x67\xe1\xe3\x2c\xfb\xd1\x2b\x3f\x2f\x11\xf9\xa1\xd1\xbf\x96\x5e\xe7\x7d\x80\x92\x24\x51\x69\x19\x7b\xe5\xeb\x7b\x07\x44\x59\x10\x07\x53\xab\x74\x5b\xe5\xcc\xff\x98\x5d\xf8\x0b\x73\x71\x8a\x61\xe7\xfc\xe4\x1f\xe7\x36\x9f\xdd\x40\x22\x1b\x87\x82\xed\xc2\x39\xd5\xe7\xc8\x08\xb5\x40\x1c\x42\xad\x8b\xc5\x48\x40\x6f\xf8\xcf\xab\x75\x23\xd5\x37\x9e\x8e\x37\x15\x63\xb2\xe9\x24\xbf\xf2\x00\x7b\xf8\xcb\x53\xd5\xda\x18\x51\x51\x16\xf7\xea\x5d\x5d\x6a\x43\x1e\x5f\xc4\xe9\x83\x38\xd8\xa8\x6a\x72\xe4\x39\x72\x63\x1a\x89\xdd\x7e\x66\xe0\x6b\xd6\xad\x9d\xa4\x2a\xea\xb2\xba\x91\xe1\xf5\xda\x5b\x4a\x9f\x80\x7d\x13\x0d\xea\xf1\x02\xe2\xe0\xfb\xfc\x6b\xb0\x39\x91\xda\x35\x64\x9a\x6c\x79\x34\x7a\xda\x7c\xd6\x94\x51\xb9\xab\x83\xa4\x7a\x47\xb7\xbe\xf0\x0d\xd6\x95\xc2\x04\xe8\x4d\x0b\x88\x83\xa9\x65\x62\x2e\xcf\x6c\xb1\x99\xe1\xa1\x57\x98\x55\x1a\x3d\xc6\x95\x7a\xff\xb8\xde\xd3\x6d\xe9\xd6\xa4\x18\x2b\x9f\xfc\xf5\x3b\xdd\xd0\x3a\x18\x88\x83\xbf\x12\xd9\x74\x25\xe8\xaa\x73\x3a\x79\x5c\xf3\x80\x1c\x59\x76\x46\xfc\x16\xa6\x8b\x54\xeb\xb6\x19\xb2\x7c\xf8\x9b\x96\x12\x2c\xf3\x54\xe8\x95\x08\x80\x83\xa9\x75\xe1\x6e\x24\x1f\x5e\xf4\x8d\x93\x6c\x3d\x9a\x22\xd9\x51\xb7\xcf\x3f\xa6\x47\x21\xcb\xed\xea\xc9\x4e\x46\xa2\xb2\xd1\x2b\x48\x43\xf3\xf7\x92\xf9\x77\x8c\x24\x9d\x41\x45\x49\xb5\xbd\xae\xc5\x82\xf2\xe0\xf3\x9e\xf2\x38\xae\x2f\x09\x83\xce\xb8\x92\x9d\x90\xef\xf5\x69\x09\x45\x4c\xdf\x7f\xc7\x48\xa2\x6f\x24\x87\x08\xc6\xd9\xeb\xb6\x7a\x04\x24\xcd\x2b\x56\xe9\x44\x1b\x06\x85\x72\xde\xa4\x0e\x2f\x6c\xba\x4a\x4c\x98\x8f\xf1\x0a\x16\x23\x01\x55\x3e\x1f\x23\x49\x67\x7c\x4d\x2f\xd3\xed\xde\x4d\xbb\xd9\xe2\xe6\x82\xe7\xd9\x96\x4b\x2e\xa4\x4d\x6e\xce\x38\xf4\x51\xb1\x2f\xb2\xb4\x95\x8d\xe9\xdf\xd9\x4d\x74\x81\x8a\x47\xeb\x13\x66\x2c\x4f\xe6\x8f\xf5\xee\x5f\xfa\x76\xd8\x87\x65\xbc\xb0\xbf\xf1\xda\x7e\xa1\x36\x8d\x8a\x3c\xb6\x1b\x8a\x91\x80\x6a\xfe\x13\x23\xe9\x87\xc5\x48\x0c\x88\x9f\xf5\x92\xe9\xf9\x57\x50\xe5\x32\xb8\x2d\x49\xef\xf2\x76\xad\x93\xee\xc8\xc7\x2b\xd6\x7e\xee\xc6\x9a\x8a\x20\x8a\xfb\xeb\x16\x16\xe2\x4d\xf0\x18\x49\x7d\x8c\xd0\x29\xb1\x9b\xb1\x46\xba\xf7\xa9\x79\x30\x6d\x0a\x41\x8e\x43\xd4\x96\x52\x91\xab\x98\xe5\x7c\xba\x72\x27\x03\xb9\xe4\x5f\x3f\xac\x37\x9d\x8b\x91\xf8\x08\x3d\x38\x73\xd8\xd4\xe6\x5b\xd7\x8b\xba\x47\x77\x09\xe3\x96\x60\x7c\x4c\x81\x6d\xf4\xf6\xab\x70\x32\xd4\xb3\xb8\x3c\xe3\xdb\x7f\x7f\xc8\x73\x31\x92\xdf\x5c\x8d\x7a\x11\xbd\x8d\xf9\xc4\x2e\x86\xb3\xad\x03\xde\xf2\xfb\x59\x57\xbe\x26\x3b\x3c\x63\xfa\xee\x90\xb6\xda\xf2\x5a\x8b\xf5\xef\x0f\x79\x2e\x46\xc2\x91\xac\x72\xc5\xdc\x48\xcf\x41\xd6\xd5\xd1\x30\xb5\xa7\x3b\x48\x51\x5a\xb2\x0f\x23\x8d\xf3\x51\xc5\xa6\x3e\xb1\xce\x87\xe0\xf1\xbf\x3f\xe4\xb9\x18\x09\x47\x2b\x91\xc9\x8e\xf7\x63\x65\xa9\x1c\x1b\xf9\x81\x05\xa6\x24\x9e\xcf\x45\x59\x66\xd8\x4a\x6d\x04\xbc\x3d\x18\x92\xcb\x74\x4b\x7f\x7f\xc8\x73\x31\x92\x91\x5c\xee\x1d\xdd\x68\x94\x35\x47\xf2\xc2\x9b\x81\xb3\xa5\xea\x8a\xd7\x17\xf3\x57\x4f\x59\x51\xd7\xdb\xe6\x5e\xcd\x61\x8d\x60\xfc\xfd\x21\xcf\xc5\x48\x3a\x34\xda\xe8\x4c\x8c\xef\x2e\x17\xc4\x0e\x6e\xea\x37\xc7\x8b\x50\x5a\xdb\x30\x75\x07\x22\xe3\xa6\xe6\xfb\x2b\x25\x8a\x31\x67\xfd\x6f\xe6\x7a\xa0\x2b\xf1\xfc\xad\xed\x79\x43\xd7\xe3\xa0\x82\x7b\x5e\xd1\x3f\xe6\x6e\xfa\x05\xd0\x58\x32\xcf\xdf\xc1\xdd\x5f\xb0\xb8\xf1\xd3\x91\x3c\x87\xb9\x2e\xec\x04\xf1\xf7\x0b\xe2\x60\xff\xea\xc9\xf7\x54\xbf\x12\x66\x10\xc9\xb7\x8f\xa5\xef\xde\x2f\x31\xfb\x6d\x5d\x5c\xc6\xcb\x52\x6a\xab\x41\x70\x7b\xa2\x68\x8d\xd9\x1f\xea\x8c\x07\xe2\x60\xb7\x36\xf5\xe6\x86\x92\x7b\x7f\xa6\xa9\x4a\x2f\x5b\xab\xc7\x93\x92\x94\x7b\x7c\xa7\x16\x40\x61\x44\x36\xd4\x0f\xd0\xda\xbe\xfb\x9b\x78\x10\x51\x16\xc4\xf9\x89\xa1\xfd\xbb\x6c\x14\xd3\x27\x8a\x9d\xb5\x98\x6b\x94\xca\xe4\xe9\x9b\x4c\x57\x76\xbb\xc6\x3d\xcd\xcd\xf2\x07\x54\x7a\xa8\xee\xa8\xec\xb3\x57\x40\xbd\x28\x40\x1c\x6c\x63\xb5\x21\x5e\x01\x74\x6f\xd7\x0c\xaf\x88\x43\xfd\x1a\x2c\x65\x95\xfd\xa0\xb0\xa0\x1b\x89\x4d\x92\x42\x45\xe4\xc3\xa1\x41\xf3\x59\xd0\x77\x97\x20\x0e\x76\x6b\x53\xed\xde\x9f\xe3\xe6\x43\xd9\x5c\x0c\xe3\xa7\xbc\xfc\x62\x74\xb6\x42\xb2\x3d\x49\x3f\x54\x51\x88\xeb\xa9\xc9\x2d\x3a\x32\x9a\x44\x44\x8c\x04\xc4\xfd\xd3\x8d\xa4\xff\x22\x31\x12\xd0\x1f\xee\x79\xb1\x82\xec\x32\x2d\x88\x0f\xae\x44\x19\xdc\xbd\x4c\x3f\xb9\x82\x87\x83\x4a\xc3\x36\x96\x38\x7d\xe7\xe1\x46\xb2\x9f\x2c\xd3\xb7\x4e\x68\x47\x1f\x10\x07\x13\x8b\x34\xc6\x39\x74\x9d\x41\x24\xfc\x49\xf0\x46\x92\xa4\xd4\x53\x93\x6c\x06\xef\x89\x42\xa9\x70\x94\x8c\xa8\x91\x50\x8d\x4f\x0b\x50\x27\x68\x10\x07\x13\xeb\x5e\x29\x0f\xde\x01\xe1\xc3\xc2\xe9\x5e\x13\x59\xea\x39\x32\x7c\xde\xd4\xfb\x02\x65\x31\xa4\x9f\x08\x73\xca\x4f\x35\xc7\x7c\xa1\x26\x27\x20\x0e\x26\x56\x50\x0d\x39\x6a\x03\x52\x60\x90\xe0\xb0\x98\xad\x93\x82\x88\x4f\x63\x5c\x75\x4c\xae\xba\x51\x77\xfc\x8e\x61\x44\x69\xf6\x4d\x68\x1f\x5f\x10\x07\x13\x2b\x2c\xd3\xf4\xa0\xf1\xe3\xa9\x4e\x93\xfc\xad\x8d\xaf\xd9\x19\xb2\x4b\xef\x47\xc9\x1b\xae\x5e\xdd\xc6\x0c\xd2\x2e\xf4\x51\xa6\x4d\x44\x94\x05\x71\x30\xb1\x4c\xe2\xfd\x93\x4e\x30\xca\x92\xe5\xac\xf9\x54\x2c\xd7\x4b\xfb\x35\x9a\xae\xfe\xa9\xbb\x2d\x13\xf8\x8a\x6b\x9a\xc7\xc4\xc9\x38\x16\x11\x23\x01\x71\xff\x74\x23\x69\xba\x50\x8c\x04\x74\x5f\x3d\x6f\x16\xcb\x56\x76\x66\xc7\x73\x9d\x72\xed\x76\x9d\x01\x3e\x07\xdd\x1f\x19\x42\x96\x57\xab\x09\x4f\x39\x9e\xba\x7c\x1d\xd4\x56\x31\x87\x02\x4a\x20\x0e\x66\x96\x24\xb5\x80\xae\x7d\x9c\x9b\xd5\xe4\x30\x2f\x45\xda\xe0\xc4\x7b\x82\x1b\x62\x84\xd9\x28\xb2\x9e\x4b\x36\xd8\xb2\x16\x49\xe4\xd0\xa6\xa8\x20\x0e\x66\x56\x07\xde\xc0\x90\x40\xc0\xca\x82\x1f\x0e\x72\xea\xf7\x5f\x5f\xbb\x4f\x3e\x4a\x5d\xcb\x32\x8f\x7b\x55\x3a\xf7\xaa\x23\x8b\x89\x65\x03\x5a\xf5\x02\x70\x30\xb3\xae\xd9\xa0\xb0\xdf\x61\x71\x32\xbd\x9e\xc5\x25\xab\x8b\xf1\xbe\x6d\x85\x11\xdb\x21\x73\xe5\x23\x35\x85\xca\x40\x64\x1a\xd7\xe0\x1c\xa2\x2c\x88\x83\x99\x35\x18\x31\xd2\x49\xf2\x22\x8d\x56\x83\x55\xe8\x48\x8c\x76\xc1\x8e\xbe\x66\x4c\xfe\x18\x87\x90\x35\x39\x54\x50\x7e\xf6\x0d\x0f\xf4\xf1\x14\x88\x83\x67\xc5\xf3\x2d\x9d\x0b\x6c\xa8\x74\x8f\x35\x59\xa8\x7d\xdf\x7f\x0b\xa3\x56\xb0\xb5\x16\x2a\xee\x30\xf1\xa6\xd7\x69\x1d\xa5\xc3\x9c\x85\x5a\x46\x00\x38\xc4\xee\xa5\x17\x8b\x91\x80\x9e\x9f\xce\xab\x15\x58\x59\x84\xcb\xb7\xcc\x6e\x11\x48\x42\xe6\x3c\xa4\xc2\x49\x6d\xab\x3b\xf8\x6a\xe6\xc6\xcf\xcc\x63\x5a\xd9\xbb\x4d\x18\x8d\xd0\x77\x43\x20\x0e\xa6\x96\x43\xdd\xee\x90\xc7\x35\xd6\xa9\x48\xa9\x3c\x9d\x7d\x69\x5b\xea\x29\x1f\x69\xc6\xef\x1a\x87\x5e\xe5\x2f\x26\x6c\x35\x78\x45\xa0\x8e\xe8\x20\x0e\xa6\x56\x73\xcd\x89\xf9\x54\xfb\x98\x27\xcf\xde\xcc\x89\xe1\x4d\x56\xb7\x0c\x61\x1c\x76\x74\x05\x45\xbf\x38\xa9\x99\xaf\x27\x9f\xdc\xa1\x8e\xa6\x20\x0e\xa6\xd6\x78\xc0\xb2\xbf\x50\x29\xcb\xc2\xec\x5b\xce\x7c\xd9\xc8\x71\xac\x08\xac\xb8\x53\x5c\xad\x6c\x1f\x9d\x01\xfd\xf1\x65\x99\x8c\x4f\x88\xb2\x20\x0e\xa6\xd6\xa2\x1d\xdf\x37\x46\x09\xe2\xdd\x3f\xfd\x6a\xa5\xbe\xf1\x09\x45\xf4\xc9\xaa\x86\x01\x6f\x1f\x47\x10\xef\x65\x48\x60\xc7\x06\x40\x7b\xe5\x80\x38\x98\x5a\xa7\x87\x6a\x18\x01\x72\x23\x2e\xd5\x93\xb4\x39\x9b\xef\xfa\xc7\xe9\x7e\x2b\x3e\xaf\xb7\x6b\xad\x20\x4a\xd3\x3a\xc6\x59\x58\x0d\x45\xa8\x05\xe2\x10\x6a\x5d\x2c\x46\x02\x7a\x4e\x3e\xaf\x96\x44\x6d\x00\xa5\x08\x93\x08\x63\x37\xfd\x7b\x99\xdc\xdb\x1e\x06\xda\x25\x77\x97\x6e\x62\xd2\xeb\x0a\x05\x38\x3e\xcb\x7c\xfe\xe7\x12\xe2\xf4\x41\x1c\x4c\xad\xdc\x4a\xde\x67\xfc\xc9\xe2\x46\x31\x84\x4e\x3c\xdf\x43\x18\xcb\xed\x30\xea\x15\x9f\x2e\xca\xac\x9f\xc5\x7a\x24\x9e\x3d\x4a\xb7\x82\xde\x9e\x03\x38\xf8\xfd\x30\x37\xdd\xf6\x34\x90\xea\x96\x2b\xd2\x1d\xf3\xac\x04\xe7\x58\xf7\x44\x89\xbc\x83\xda\x51\xd9\xa5\x1d\xee\x94\xb8\x9b\x77\x6f\x42\xf7\x43\x00\x07\x53\x2b\xf6\xd1\xdb\x4f\xe9\x64\xe5\x39\xf2\xcd\x3a\xdf\x68\xc8\x45\x2e\xb7\x9c\x2e\x3c\xb9\x76\xe5\x00\xc7\xc4\x83\x57\xe0\xf5\x24\x0b\x74\xe3\x02\x71\x30\xb5\x96\x45\xeb\x08\xcf\x34\x77\xdb\xaf\xeb\xf9\x7e\xb8\x86\x97\xbf\xb4\x2f\xed\xeb\xbd\x77\x2b\xe0\x72\x40\x1e\xbb\x92\x9d\xaf\x4b\x1b\xa2\x2c\x88\x83\xa9\xa5\x36\x19\xc2\x34\xa8\xa8\x60\x92\x4a\x14\x78\x29\x1f\x37\x6e\x9f\x68\xbe\x6d\x53\x0b\x9f\x4d\x70\xe4\xc1\x72\xd7\x4f\x19\xbe\xa7\xd0\xf6\x10\x00\x0e\xa1\xd6\xc5\x62\x24\xa0\xf9\xd0\x79\xb5\x6e\x31\x08\x7e\xb7\x67\xa7\x7e\xba\xac\x61\x59\xd7\x39\x15\x53\x8e\x6f\xf7\xc7\x75\xf9\xa4\xec\x1b\x51\x97\xe4\x3e\xfb\xe5\x5c\xa8\x71\x3a\x88\x83\xa9\xd5\x56\x67\xf2\xf2\xc8\xbc\x1c\x43\xd9\x7d\x3f\x1b\x39\x64\xca\x4c\xfb\xe5\x5b\x24\xc3\xb3\xd3\xe0\x33\xc2\xfb\x28\x19\xd7\x48\xbc\xa1\x26\x0c\x00\x0e\xa6\x96\xf8\x11\xfe\x46\x02\x52\x07\x56\xbf\x6d\x3c\xc7\x02\x5b\x85\xea\xc7\x02\xea\xd3\xa4\x67\xd9\x69\x46\x56\x0a\xf2\x4a\x74\x0c\x82\x88\xb2\x20\x0e\xa6\x96\x98\x7a\xa4\xd6\xba\x13\x09\x81\xee\xf1\x35\xda\x76\x1c\x49\x3b\x1a\xbb\x67\xaf\xfb\xf9\xb1\x4a\x87\xf4\xa6\x38\x6f\xa3\x52\x4d\x22\xca\x82\x38\x98\x5a\xb2\xf2\x82\xc8\x6b\xe3\x01\x24\x97\x6f\x71\xe5\x09\x56\xd8\xa3\xd7\x5f\xf7\x2f\xbc\x56\x21\x5e\x76\x43\xdf\xbf\xeb\xa1\xae\xa0\x1d\xa2\x2c\x88\x83\xa9\x95\x85\xc9\xd1\xe7\x44\xeb\xa4\x43\x80\xc5\xca\xcb\xba\xf9\xc1\xf6\x4a\xd4\x91\xa0\xf5\x2b\x9b\xd7\x8d\x6a\x4a\xfe\xb4\x28\x0f\x90\x10\x6a\x81\x38\x84\x5a\x17\x8b\x91\x80\xe6\xbd\xe7\xd5\xaa\x13\x7a\x39\xd7\xbe\xcf\x3d\xfe\xe5\x28\xc8\x23\xb3\x19\xc9\x9d\x65\xf6\xda\x0b\x7a\xb9\xc3\x13\xc1\xc6\x6c\xcd\xc1\xb1\xa6\x19\x28\x56\x0a\xe0\xe0\xeb\xc9\x13\x2f\x27\x35\xf2\xae\x19\x1c\x6c\x99\x86\x6e\x06\xda\xb0\x7e\x7d\xc7\x2c\x19\x97\xd4\x37\x76\x84\xf6\xda\xb1\x04\x2f\x05\xca\xd6\x82\x38\x98\x5a\x2c\x9f\x8e\x68\x72\x7c\x8b\x34\x78\x0f\xc8\x6f\x0c\xab\x90\x67\x0a\x22\x79\x86\xd3\xbc\xdc\x8b\x32\xff\x81\xbb\x65\x18\x85\x01\x5d\x08\x20\x0e\xa6\x56\x49\xb2\x80\xc6\xe3\xec\xfe\xa0\x00\x1f\x9d\xa5\x07\x4d\xea\x89\xbc\xfe\x16\xc3\xa8\xd3\x84\x94\x49\x92\xf8\xad\x55\x9f\xbe\x0a\x43\xb9\x65\x00\x07\x53\x6b\x62\x7f\xe8\x38\x3f\x69\xec\xf1\x9f\xb8\x5b\xc9\xf7\x43\x0b\x1f\xb4\xd0\x4c\x8f\x92\xf2\x6d\xeb\xeb\x1c\x7f\x74\x25\x77\x27\x36\x45\x94\x05\x71\x30\xb5\x18\x98\x30\x64\x3e\x7e\x2e\x2c\x26\xbb\x6a\x9a\x1f\x9d\x4f\xb9\xeb\x56\xb2\xea\x80\x39\x5d\xbf\xe4\x5a\x33\xae\xbd\xf0\x5a\x23\x12\xa1\x16\x88\x43\xa8\x75\xb1\x18\x09\x68\x7d\xe3\xbc\x5a\x97\xbd\x24\xf7\xc9\x59\x8c\x70\x5a\x3f\x98\x95\x35\xee\x9d\xea\x8d\x96\x55\x2d\x35\xe8\x05\xa2\xd2\x50\x4f\x6e\x8a\x9f\x6d\x12\x20\x4e\x1f\xc4\xc1\xd4\x4a\x21\xbb\xdd\x7a\xd2\xc8\x9e\xeb\x3d\x29\x72\xbc\xca\xf3\x58\x98\xdd\xcf\x9b\x4e\xe2\x84\x7c\x76\x2b\x30\x59\x3e\x52\xfb\x17\x74\xc1\x82\x38\xf8\x7e\x49\x78\x5c\x0d\xdf\xb4\x12\x84\x99\xda\xc9\x99\xc4\x43\x4d\x50\xe5\xcc\xcc\x30\x57\xd8\x42\x3c\x9e\x2e\xb2\x93\x2a\x2b\xdc\x8c\x45\x94\x05\x71\x30\xb5\x9a\xd3\xb4\xc4\xa7\x1f\xdf\x73\x9b\x92\x7a\x2f\x7e\x9f\xba\x63\x4c\x10\xc9\x60\xbb\xd8\x42\x4c\xaf\x26\x5d\x7b\x05\x3f\x8c\x4c\x0d\x7a\x84\x03\x70\x30\xb5\xb2\x92\x64\x5d\xf0\xeb\x57\xf4\x4e\x1b\xfc\x1c\x30\x9a\x66\x2f\xf9\xdf\xe7\x99\xbd\xe7\x8e\x57\x16\xb8\x2c\x22\x58\x50\x1b\x02\xa5\x53\x40\x1c\x4c\xad\x2d\xaf\x16\x1c\xa3\xde\xa9\xe7\x1f\x1e\x6f\x2a\x2a\x1f\xaa\x2b\xfa\xf9\x13\x7c\x41\xf1\x4b\x0b\xaf\x9e\x5d\xfb\xb6\x70\xb7\x84\x01\xa1\x16\x88\x43\xa8\x75\xc1\x18\x09\x68\xfd\xfa\x9f\x18\x49\xd3\xb9\x18\x49\x89\xbf\xa2\x54\x17\xe9\xa4\xa4\x8c\x80\x54\x63\xd8\x09\x7e\xb1\x9f\x16\x5d\xfb\xb3\xb7\x56\x56\xc9\x9a\xba\xcd\x39\x25\xcf\x18\xff\x7e\x9d\xef\x5c\x8c\x24\x87\x1a\x07\xbd\x91\xef\xaa\xf2\x33\x6f\xbb\xd0\xf4\x0f\xc4\xb7\xa6\xe4\xde\x26\xa4\x96\x17\xdd\x17\x59\xab\x2b\x3d\xab\x1e\xa1\xf9\xfb\x43\x9e\x8b\x91\x54\xe8\xed\x17\x68\x87\x45\xdb\x18\x10\xbd\x7e\xcc\xfe\x55\x5f\xab\x86\xa6\xf9\x86\x80\xba\xf1\x6d\xc6\xef\x34\x93\xe8\x35\x8c\x6d\xff\x9b\xa5\x45\xd0\x58\xfe\xc7\xb6\xc6\xf5\x4a\x72\x0b\xeb\x66\xc8\x8d\x3d\xc1\x6d\x58\x2d\x15\x99\xd2\xea\x72\xe4\x69\xd3\xb7\xef\xb3\x56\x3d\x62\x62\x68\xb5\x84\xda\x0f\x82\x38\xd8\x05\xfe\xd8\x96\x27\xb8\xc2\x62\xf8\x76\x0f\x7a\xae\xa6\x59\x52\xc3\xa7\x87\x9f\xb8\xc4\x79\xd4\xcf\x84\x89\xea\xb5\xcd\xc6\x9f\x58\x43\xc9\x46\x10\x07\x6f\x74\x7c\xc5\x1c\x37\x2e\x66\xe4\x59\xa0\x76\xdf\x34\x91\x85\xe2\x65\x83\x09\xda\xe8\xa8\x06\x1f\x82\xdf\xf5\x77\x57\x2e\x37\x8e\x41\xfd\x3d\x40\x1c\xec\x02\x9f\x76\x13\x8a\x6e\xb8\xd7\x5e\xb8\x4b\x52\x3a\xd6\xf6\xe6\x93\x76\xe2\xfc\x0f\x35\x0d\x77\xbe\x17\x5c\x8e\xf3\x9a\xbf\x17\xde\x33\x43\x3d\x97\x00\x1c\xec\x02\xb7\x51\xaf\xed\x75\xa2\xe9\xbb\xdb\xda\xb1\x1b\x1e\x2c\xc3\x4e\xfc\xe6\xf1\xdb\x3c\x8d\x9f\xa8\xd9\x5b\x0a\x8e\x4f\x1f\xd4\xd0\x8d\x20\xca\x82\x38\xf8\x0b\x59\xd6\xee\xad\x07\xed\x6d\x6d\xa1\x06\x55\xbd\x83\x19\x8d\x36\x4b\x6d\x41\xd9\x24\x38\x64\x4f\xe3\xa3\xbf\xeb\x60\xba\x7f\x38\x83\x5e\xc8\x02\x38\xc4\x05\x7e\xb1\x18\x09\xe8\x9a\x39\xaf\x56\xd5\x3e\xc5\x01\xb1\x3c\xef\x80\x2a\x0a\x89\xa2\x09\x12\x5e\x4c\x59\xd9\xf5\xdb\xb6\x78\x39\x09\x3d\xcf\x8a\xf1\x70\x77\xfc\xa1\x51\x05\x71\x30\xb5\x8e\x7f\xe4\x5c\xcb\x75\x5a\x58\xeb\x7f\xf3\x7b\x61\x58\xc0\x32\xe7\xae\x30\xa6\xc2\x6f\x3f\xab\x78\x69\xab\x0e\xcb\xa4\x89\x2c\xa8\xc9\x09\x88\x83\xa9\x15\xdf\x4f\x89\xf5\x0e\xad\x59\x3b\x74\x4f\xb0\xe3\xa4\x4e\x99\xef\x03\xb6\x3c\xfa\xd9\xcc\x08\xc1\x17\xa3\xbc\x62\x83\x56\x1e\x28\xf3\x03\xe2\x60\x6a\xd9\xb6\xdf\xe8\x16\xd8\x18\xf8\x78\x10\x22\x57\xda\x73\x73\x20\x37\xf6\xe3\xd7\x2e\x93\xfb\xf1\x1d\xd5\x97\x91\x91\x28\xb6\xa4\xa0\xac\x20\x88\x83\xa9\xc5\x45\xd7\xbc\x86\x5a\x11\x36\x69\x46\xaa\x76\x32\x30\xa6\xd9\x3d\xae\x1a\x73\x5f\xa0\x2a\xc1\xae\x55\x9a\xbf\xfb\x71\x62\x11\x34\xfd\x07\x71\x30\xb5\xb4\x6f\x56\x5a\xf9\x3f\xfb\x12\x6f\xfc\x47\xf1\xb1\xf6\x77\xc5\x37\x1f\xe5\x23\x93\xb6\x67\x27\x18\x79\x94\x52\xdc\x3d\x72\x18\xa1\x18\x09\x88\x43\xa8\x75\xb1\x18\x09\xe8\xbf\xf1\x3f\x1e\x4b\xee\x94\x72\x8a\x90\x0c\x15\x89\xa2\xfe\xe1\x09\xcc\x93\x8c\xb8\xb5\xd1\x66\x95\x45\x31\x19\xfd\x39\x30\x90\x63\x5c\xc0\x0b\x5a\x02\x02\x71\x30\xb5\x22\xfb\x72\xfe\xe4\x9b\xda\x92\x23\x95\x0e\x55\x78\x84\xfe\xb8\xea\xc8\x92\x90\xbe\x15\x95\x3f\x62\xde\xef\x7c\x4d\x46\x45\x5a\x1d\x51\x16\xc4\xc1\xd4\xaa\x72\x3c\xb6\xa2\xb3\x36\x23\xf8\x40\x89\x26\xb1\xeb\x77\xcc\x5f\x4a\xbd\x32\xc5\xbb\x13\x94\xe4\xa0\xeb\x10\xb7\xf7\x45\x12\x6a\x72\x02\xe2\x60\x6a\x79\xb5\xce\xb1\x14\x5f\xdf\x11\xab\xc2\x63\x0c\x24\xf0\x0b\x20\xc9\x37\x24\xab\xef\x2b\x70\xd0\x96\x6c\xf4\xb5\x0b\xe8\xd1\x21\x46\x94\x05\x71\x30\xb5\x56\xad\xb6\x0f\x88\xdd\xca\x15\x48\xcb\x63\xfa\x92\x46\x51\xcb\xec\x5f\x19\x4b\x12\x32\x74\x24\x44\xe9\xf7\x72\x8c\xf7\x1e\x5d\x47\x94\x05\x71\x30\xb5\x62\xe3\x98\x0d\x49\x3d\xb3\x1f\xe6\x4a\xd1\x09\xeb\xad\x32\xec\xf1\xbd\xb3\x2e\x10\x20\x77\x7b\x45\xcf\xc7\xf4\xc7\xed\xe5\xe4\x1a\x42\x2d\x10\x87\x50\xeb\x62\x31\x12\xd0\x1b\xfe\xf3\x6a\x59\x50\xc5\xbe\x7c\xd2\xac\xbf\xfc\xde\x2e\x81\x6b\xfc\x5a\x70\x52\x4d\x91\x64\xbe\x1a\xef\x0f\x2a\x7f\xea\x7c\x72\x0a\x9b\x29\x68\x3b\x57\x10\x07\x53\x0b\x8d\xaa\x45\xe9\xb5\x44\xd3\x6d\x97\x85\xb9\xd3\x6c\xa9\x92\xdc\xac\x4b\x13\x1c\x21\xfc\xbd\x31\xbf\xb1\x07\xba\xc7\x8a\xb5\xa1\x6f\x73\x40\x1c\x4c\xad\x44\xe2\x74\x39\x2b\x7a\x89\x44\xd2\xab\x0b\x72\x5c\x41\x2c\xf1\x6c\xe1\x84\x9c\xad\xac\xbe\x11\x9c\x97\xbe\x4c\xb0\x50\xae\x42\x1f\xa7\x80\x38\x98\x5a\x73\x61\xa3\xfe\x16\x42\x42\x13\xc6\xfc\x68\x33\x72\xc2\x65\xce\xb2\xab\xef\x55\xef\xba\x45\xaa\x52\x39\x9b\x96\xdd\xd3\x32\x82\x3a\x33\x83\x38\x98\x5a\xc6\xda\xe3\x91\x1b\xeb\xe6\x46\xd7\x7f\x35\x7b\xdf\x11\x46\x59\x6f\x6c\x17\x10\xfc\xf0\xa0\xb7\x42\xd8\x38\xb5\xcc\x32\xf6\x2d\xf4\x20\x0d\xe2\x60\x6a\x5d\xb8\x1b\x09\xeb\x0d\x12\x07\x11\xe6\xc0\x7a\xfd\xfa\x28\xe3\x10\xf4\xbb\x8c\x13\x76\x46\x2b\x89\x07\x4b\xb6\x76\x5f\xe7\x9f\x27\x27\xd5\xa6\xff\x3b\x46\xb2\x2d\x2a\xea\x30\xdd\x52\x82\xc9\x50\x78\x6f\xdf\x78\xbf\x8f\x3a\x4a\xdd\x3b\xc7\x5e\xa7\x4d\xee\x45\x37\xd9\x52\xbb\x6e\xd4\xbf\x1f\xd8\xa4\xa5\x7e\xe7\x71\x9b\x0d\x7e\x10\x62\x1a\xe6\x2f\x1c\x77\xde\x71\x0d\x16\xa1\x0f\xec\x17\x1c\x2d\x11\xfb\xa3\xd4\x73\xc9\x1a\x19\x16\x23\x01\x55\x3e\x1f\x23\x61\xb6\xe6\x59\xb1\xae\x8d\x5b\x59\xfc\x18\x76\x77\x8c\xed\x4d\x96\xd5\x8a\x9d\xe5\xc2\x1f\x43\x4c\x24\x8a\x38\x69\x13\xea\xf1\x82\x7f\x87\x2e\x7e\xcd\xd4\x61\x51\x79\xaa\xe2\x5f\x6f\x1f\x0e\xb9\x7f\x94\xd0\xa1\x75\x10\xfe\x80\x9b\x23\x35\x58\x42\xaf\xe2\x76\x23\x4e\xbc\x4f\x33\xe6\xc5\x6a\xfe\xff\x63\x24\xe2\x48\xf7\x61\x0f\xb2\xc7\x49\xf8\x87\x66\x41\xcc\x2b\x1b\xb5\x3f\xcb\x6c\xbe\xe4\x4e\x77\x9a\xb5\x36\x44\xa8\x4d\x27\xe0\x7d\x7f\x73\x69\x64\x5c\x27\xfa\xaf\x73\x24\x48\xf2\xb0\x23\xca\x77\xe5\x2c\xb8\xac\x84\xad\x79\x50\x2c\x56\xdf\x57\x7b\x1c\x1d\xb2\xbf\xe6\x7b\xb5\xcd\xc0\x5a\x3f\x1c\xe5\x5b\xe6\x29\x6b\xec\x5f\x3f\xad\x23\xdd\x83\x3f\xad\x23\x0d\x4b\x2c\xc8\x16\x9a\x16\xe1\x7e\x70\xc3\x22\x8a\x3d\xee\x72\xa7\xf4\xfe\x55\x53\xf0\xc0\x4a\x61\x38\xbe\xdb\xb2\xb8\xf8\xef\xbb\x66\x20\xa9\xc3\x0f\xf9\xf3\xce\xd4\xd5\xd6\x1e\x6f\x16\x8b\xae\x9a\xb7\xe8\x69\xdd\x09\x37\xaf\xf6\xa6\xf3\x12\x85\xcb\x63\x23\xff\x16\x1f\x33\xeb\xd1\xf9\xfb\x43\x3a\xc0\x0f\x69\x49\x7d\xc8\x88\x11\x5d\x2c\xf1\x04\x99\xde\x43\x67\xf2\x23\xf1\xd3\x08\x35\x83\x8c\x1f\x3b\x06\xfd\x36\xb8\x96\x43\x83\x9f\xe3\xfe\xfe\x90\x5e\xf0\x43\x26\x66\xae\x9d\x28\x61\xeb\xfb\xf5\x8d\xc5\x0b\xa5\x04\xe1\x5e\xc7\x7f\x15\xd5\x26\x19\x59\x61\x13\x22\xb5\xdf\xab\x2f\x52\xf9\xfc\xef\x0f\x99\x08\x3f\x64\x61\x9c\xf5\x1f\x92\x90\x10\x97\x4f\xb1\x5e\x93\x0d\xee\x8a\x8c\xf4\x77\x7f\xb2\x4b\x1f\x92\x49\xdd\x92\x98\x1d\xc1\xff\x8c\x1a\xf5\xf7\x87\x7c\x0f\x3f\xe4\x5e\x4a\xd3\x23\xe9\x5a\x46\xbd\xfd\xf4\x47\xf7\xb8\xd2\x9e\x69\x89\x3c\x8a\x2b\xf4\x58\xba\xee\xd0\xfb\x71\xfb\x05\x45\x3d\x5a\xf2\xff\x66\xb2\x07\xba\x12\xcf\xdf\xdb\x4a\xa3\x5c\x0f\xd7\x84\xe9\x62\x69\x23\x09\x9f\x7c\xae\xbc\x94\x2f\xa5\x12\xfe\x29\x5d\x70\x79\xf2\xb6\x8c\x63\xa2\x40\xa8\xb5\x36\xe2\xff\x17\xc4\xc1\xee\x6d\xe9\x5d\xd9\xf1\xd9\x4d\xaa\x0a\x79\x47\xdd\x0c\x6d\x6c\x8f\xf0\x32\x3f\xbb\xa3\x64\x45\xce\xaa\xe9\x05\xc8\x3a\xda\x66\x9f\x41\x5f\x70\x81\x38\xd8\xbd\x4d\xee\x54\xf0\x91\xf8\x87\xf7\xd2\x05\x73\xfb\x72\x87\x1f\xee\xcd\xe9\xd3\xd2\x99\xb5\xe2\x09\x8f\xa8\x85\x2b\x32\x84\x97\x8d\x43\xcd\x53\x40\x1c\xec\xde\x76\x95\x41\x2b\xbd\x71\xe3\xca\xda\xec\xeb\x3f\xda\xb3\x58\xbb\xdd\x34\x23\x38\xd1\x45\x7e\xb6\x39\xdb\xe5\x35\xdf\xee\xbc\xfb\x01\xa5\x6f\x41\x1c\xbc\x65\x00\xf3\xd8\x28\x52\xfd\x9c\x99\x8a\x1e\xc5\x8f\xfe\x5f\xbf\xe5\x75\x34\xc2\x1b\x66\xc4\xc2\x6d\x89\xcd\xac\xce\xb2\x87\x1d\x1e\x41\x2d\x03\x00\x1c\xec\x27\xd3\x3e\x41\x5a\xca\x09\x34\x98\xc2\x47\xbb\xe7\xf8\x63\x90\xa9\x04\x27\x9e\x79\x61\xe8\xe4\xd5\x43\x02\x37\xcd\xc4\xe6\xe3\x4a\x3d\xc4\xeb\x7e\x10\xf7\x4f\xd7\x88\xff\xf3\x77\x0e\x7e\x6a\x02\xfd\xe3\x9e\x37\x6b\xa7\x8a\x73\x30\x0f\x59\x18\xc9\x35\xc7\x01\x67\x69\xbf\x05\x5b\x95\x48\x0b\xa9\xff\x75\x68\xa3\xaa\x1c\x6b\xf4\x2a\x4f\x3f\xd4\x14\x1d\xc4\xc1\x3f\x37\x7b\x12\xfe\x28\x39\x5d\x8b\xe6\xd1\x80\xb6\xac\x66\x8a\x8f\x2c\xda\x06\x2b\x1b\x57\x9a\xea\x44\xf5\x0f\xe5\xdc\x7c\xfd\x64\xe8\x0d\x17\x88\x83\x99\xc5\xb1\xa7\xd2\x5f\x9f\xc4\xae\x4c\x2c\xac\x96\xa8\x31\xfa\xa1\x6f\xc8\x21\x89\x55\x23\x51\x35\x40\xe8\x11\xcd\x9d\x3a\x89\xf7\xd0\xb7\x33\x20\x0e\x66\x96\xfe\xb5\x3c\x26\x03\x92\x6e\x7a\x61\x6b\x36\x6e\xbc\xaf\xde\x39\x58\xc8\xae\xe5\x14\x58\xe6\xc4\xfa\xf9\xde\x52\xef\xea\x38\xb2\x11\x65\x41\x1c\xbc\x7f\xce\xd3\xaf\x13\xb8\xa4\xa4\x75\x86\xfa\xfa\x8e\x93\x7b\x73\x28\x59\x78\x68\xd7\x3b\x7f\x73\x4f\x25\x0b\xbd\xb3\xb1\x90\x09\x22\x85\xfa\xe7\x00\x38\xd8\x4f\xb6\x55\x60\x31\x45\x48\x13\xe2\x10\x30\x26\x55\xf3\x45\xb1\x9a\xba\x04\xad\xb4\xaa\xfe\xe0\xa1\xd8\xd9\x3b\x8e\xea\x52\xf6\x20\x7e\x84\x59\x20\x0e\x61\x96\xfc\x45\xcc\x02\xdd\x58\xcf\x9b\xb5\xfd\xd6\xf5\x8a\x68\xfb\xbd\x5f\xc6\x8c\xd3\xcf\x3f\x72\x14\x1a\xca\x2c\x7c\x27\x55\x0e\x2c\xec\xc2\xb6\x2d\x0d\x4d\xdc\x39\xf8\x81\x38\x7b\x10\x07\xdf\x7b\xc4\xcb\xb2\x18\x63\x5f\xc2\x6c\x61\x48\xa1\x3f\x4c\x61\x31\xe0\xf9\x90\x1f\xb1\x45\x04\x9b\xb4\x8f\xc7\x5a\xff\x7b\x7c\x4e\x68\x81\x0a\xc4\xc1\xcc\xea\x76\xb8\x3c\x46\x8e\x7e\xfd\x7b\x1c\xe5\xaf\x31\x92\x47\xf6\xf8\xed\x31\x98\x04\xa2\xed\x0d\xad\x02\x63\x5d\xf1\xf7\x71\xd2\xa0\xcf\x2e\x41\x1c\xcc\xac\x8c\x59\xf7\x6c\xc1\x3f\x72\x02\xf5\xd6\xac\xe5\x75\x6b\xb4\xe8\x19\xd7\xf6\x55\x13\x22\x3d\xb7\x39\xee\x15\x9e\x06\x5a\x4a\xf4\x21\xca\x82\x38\x98\x59\x67\xa8\xbd\x59\x0a\x84\xe9\xe5\xfa\xfc\x89\x6f\x13\x71\x09\x8b\x7e\xb0\xfc\x70\x26\x4e\xa0\xbe\x69\x33\x52\x27\x6c\x5f\xc7\x66\x04\x7d\x36\x01\xe0\x60\x3f\x19\xea\xf8\x89\xc6\x49\x3b\xdd\x83\x9e\x56\x52\x91\xed\x74\x9f\xd5\x35\xc1\xf1\xcb\xb7\x2a\x4f\xca\x74\x69\x1c\x4b\xf1\x49\xc5\x7a\x11\x53\x3d\x10\x87\xd8\xbf\xf4\xde\x85\xa6\x7a\xa0\x07\xa8\xf3\x6a\x45\x25\x1c\x3e\xf4\x77\x23\xc4\x14\x25\x95\xc7\x65\x2a\xe9\x30\x93\xe0\xc9\x0a\x7b\xa3\xbf\x1a\x12\x93\xfb\x6a\x13\xf5\xea\x77\xa8\x1f\x09\x88\x83\xa9\x35\x36\xf5\xca\xe2\xd0\x71\x96\xc9\xb9\x39\x55\xa9\xc6\x6f\x0d\xd9\x7f\xea\xfd\x6f\x69\xd5\xd9\x5f\xe4\x23\x57\x8e\xa8\xdb\x73\xbf\x22\xca\x82\x38\x98\x5a\x51\xab\x0f\xe3\xcd\xe5\xda\x64\x8e\x18\x12\xa5\x18\x54\x9f\xa6\x4a\xb1\x45\xe3\x92\xe9\x2b\x36\xdd\xf8\xb8\xcb\x8d\x12\xe3\x08\x7d\xe7\x04\xe2\x60\x6a\xb1\x6f\x52\xac\xb4\x6a\x9e\x52\xd9\xab\xb7\xca\xb3\x6c\xcc\x93\x4a\x3d\x1a\x3f\x3b\xfa\xee\xac\xf4\xf1\x01\x0b\x6e\xef\xfd\x3b\x50\xb4\x1f\xc4\xc1\xd4\x52\x20\xd4\x40\xa1\xba\x69\x7b\x36\x3d\x9e\x9e\x2c\x4a\xc6\xe5\xb1\xc9\x69\x8a\x3e\xfe\xe3\xac\xd7\x9c\xff\x61\xb2\xa4\x2a\x16\x94\xd6\x04\x71\xb0\x9f\x2c\xbb\x5b\xbf\x6a\x7e\x12\x3f\x59\xf9\xf9\x2c\x9d\x00\x0f\xc6\xa2\x73\x66\x5f\xcb\x32\xa7\x4e\xe1\x6e\x7c\xf4\x4b\x96\x8d\xb9\x61\x84\x5a\x20\x0e\xa1\x96\xfa\x85\xd4\x02\x3d\x28\x9f\x57\xcb\x2d\x1b\x4b\xe6\x6a\xc1\xa3\x43\x6b\x27\xe2\x6d\xed\x7b\xc2\xdb\xba\x29\x92\x92\x0f\x4d\x79\xcf\x3e\x9b\x51\xe8\x62\xa4\x10\x2c\x40\x1f\x4c\x00\x38\x98\x5a\x23\x43\x3f\x31\x2c\x9d\xe6\x5d\x58\x28\x4a\x3b\xb8\x38\x4c\x35\x44\xb6\x1e\xb7\x05\xf8\x90\xb7\xd6\xe3\x8f\xa4\xb2\x46\x73\x42\xad\x52\x41\x1c\x4c\x2d\xca\xcb\xc4\x2b\x47\x29\xae\x5f\x8d\xae\x52\xa2\xc8\x0e\xe1\x64\x12\xf3\x79\x8f\xa1\x59\x6d\x62\xf3\xa6\x8d\x97\x9b\xd0\xa0\x9a\x20\xca\x82\x38\x98\x5a\x2b\x79\x67\xe1\x4c\x0a\x74\xd8\x72\xba\xe2\xdf\x22\x23\xae\xde\x1d\x99\xd9\x7a\x38\xfa\x1d\x8d\x7b\xa4\x9d\xd6\x82\x9c\xe0\x15\xf4\xf2\x10\xc4\xc1\xd4\xb2\xf2\x37\xd5\x73\x52\x75\x68\x64\x7d\xdb\x69\x36\x7a\xa3\xf4\xce\x8f\x91\x2c\x4d\x9c\x38\x42\xab\x68\x82\x88\xbb\xa5\x71\xe1\x4e\x88\xb2\x20\x0e\xf6\x93\x19\xd1\xfa\xd7\xf5\xbf\xe4\xdd\x41\x3d\x78\xa0\x40\x9b\x4e\x56\xec\x3d\xcb\xd9\x89\xf2\xad\x4c\x43\xc6\x89\x2d\x4c\xd7\x92\x0a\xda\x20\x02\xc4\x21\xd4\x72\xb8\x90\x5a\xa0\x09\xd1\x79\xb5\xb4\xab\xa4\x92\xc6\x59\x7e\xde\x29\xaf\x7b\xf3\x4a\x42\x32\x38\xf9\x25\xbf\xa1\xc0\xf6\x51\x36\xc3\x99\x3c\x43\x77\xad\xc4\xd7\x1e\xc4\xe9\x83\x38\xf8\x77\x4e\x99\xe6\xc6\xc4\x8f\x09\xfb\x08\x7d\x7f\x26\x4f\x37\x90\xa4\x45\xbe\x25\x13\xfd\x5d\x4b\xaa\x47\x4e\x71\x89\xce\x6d\xcc\x02\xca\x28\x81\x38\x98\x5a\xc2\xe6\xfe\x6e\x5d\x2e\xae\x34\x61\x53\xd5\x04\xd6\x0e\x38\x16\xee\x3c\xd3\x4f\x7e\x47\xa2\x66\x6b\x08\x10\x3f\x3c\x38\x9a\x81\x9a\x46\x80\x38\x98\x5a\xd9\x13\x2d\xcf\x0f\x44\xb8\xdb\x1f\xd6\x35\x47\xd5\xd3\x13\xc9\xe5\x3c\xe8\x12\x10\xd4\xf3\xf1\xed\x7f\x2e\xd4\x5f\x18\xd9\x11\x85\x28\x0b\xe2\x60\x6a\x71\x5f\xfb\xe0\x74\xf5\xd7\x65\x99\x3f\xe5\x14\x0a\xf9\xca\xaa\xae\xf7\x33\x5a\x6f\x0a\xdd\x13\xa3\x2b\xf8\xd4\xf4\xf4\xdd\xc3\xf6\x25\x44\x59\x10\x07\xfb\xc9\x7a\x05\xc4\x37\x84\x4e\xaf\x85\x4b\xa4\x86\x16\x46\x74\xa1\x0a\xe1\x8c\xf5\x5b\xa5\xac\x54\xe4\xd3\xbf\x9a\xa8\x88\x41\xb5\x0b\x43\xa8\x05\xe2\x10\x6a\x79\x5d\x48\x2d\xd0\xc4\xf7\xbc\x5a\xf9\xfb\x77\xfb\x71\xcd\x66\x0e\x69\xf4\x37\xb4\x72\x1e\xfc\x76\x17\x18\x1e\xee\x90\xfd\x20\x33\x80\x7b\x16\x69\x8c\xe6\x84\x05\x6d\x6b\x03\xe2\x60\x6a\xfd\xa8\x72\x8b\x3a\x32\x70\xe1\xc9\xc2\x4a\xed\x40\xb6\x26\xf6\x53\x7b\xdc\x5d\x78\xd3\x64\xf4\xae\xb2\xbe\xa0\xc2\x96\x9c\x42\x09\xa2\x2c\x88\x83\xa9\x55\xdb\xf9\xce\x36\xff\x21\xeb\x7a\xfa\x56\x52\x42\x1d\x11\x17\xfe\xb8\xc1\x35\xc3\xe7\xa6\xe5\x65\xc6\x9d\x35\x0e\x12\xe8\xd7\x8e\x10\x65\x41\x1c\x4c\xad\x37\xdc\x07\xb8\x71\xbe\x72\x94\x3e\xa5\xcd\xd4\x53\x8c\xd3\x74\xbc\x6b\x57\x5f\x06\x3f\x5a\x99\xc1\x6d\x73\x45\x39\x99\xbc\x09\xa5\xcc\x41\x1c\x4c\x2d\x1e\x37\x7c\x16\x86\xd7\xce\xb3\xd7\x71\x83\x1e\x29\xb2\x62\x64\xe6\x4b\x33\xc8\xbc\xd9\x0a\x0d\xed\xa7\x7c\x57\xa2\xc4\x81\x3c\x8f\x28\x0b\xe2\xe0\x1d\x46\x53\xb3\x84\x2d\xa5\xd8\xdb\xcd\xee\xb3\xfe\xb8\x47\xf1\xf4\x98\x26\x23\x7b\x7b\xf6\x72\xf1\xfc\xa7\x6f\xbf\xdc\xcd\xae\x8e\xb1\x20\xd4\x02\x71\x08\xb5\x12\x2f\xa4\x16\x68\x81\xe3\x3f\xba\x28\xcd\xda\xe1\xdc\xbe\x92\xcc\xa9\xec\x33\x33\x24\x78\x9f\x42\xfa\x32\x6a\xb2\xa8\x08\xde\xb1\xf8\xf3\x11\x0b\x49\x5f\x7e\x6d\xa8\xd3\x0f\x88\x83\xa9\xa5\xb4\x90\x75\x45\xb7\xd3\x4c\x0b\xb9\x31\x53\xda\x12\xad\x32\xed\x75\x7e\x94\x34\xf7\x64\x5e\x9d\xd8\x57\x1d\x57\xb2\xc6\x20\xa8\xcb\x0b\x88\x83\xa9\x35\x5e\x72\xe4\x7d\x6d\xbc\x44\x4c\x55\xf5\xb7\x08\xb7\xd7\x7a\x8a\x11\xd3\x7c\xb8\xcc\x6f\xfe\x61\xfc\xea\xe8\xd7\x35\x5b\xb3\xfb\x50\xba\x16\xc0\xc1\xd4\xb2\x1e\x34\x2e\xf3\x64\x75\xcd\xe8\x38\x59\xad\x35\xbc\xd5\x38\x7f\x05\xa9\xfd\x7a\xc3\xf8\xf6\x7d\xa9\x14\x3c\x0f\xc9\x4e\x01\x0e\x44\x59\x10\x07\x53\x2b\xe1\xe4\x52\x97\x34\xaf\xfb\x8d\xff\x1f\x6b\x6f\x1d\x94\x55\xf3\xff\xff\x83\xa4\x74\x09\x48\x89\x74\x37\x28\x8d\x08\x88\x84\xd2\x08\x52\x22\x29\x8d\x08\x82\xa4\x08\x48\x49\x4a\x88\x28\x21\x2d\x48\x77\x0b\x48\x23\xd2\x08\xd2\x20\x92\xd2\xcd\x6f\x7e\x33\xf7\x75\x3e\xf7\x1c\xee\xf9\x2e\x33\xbc\xff\x7f\xcc\x6b\xaf\x6b\xcf\x63\x4f\xec\x79\x9e\xdd\x04\x7d\xe1\x5e\x86\x34\x9b\xc0\x9c\x20\x86\x09\xb4\xe4\x3b\xfa\x9b\x68\xfe\x87\xd7\xe8\x3d\xa0\x65\x05\x41\x1c\xec\x90\x8d\x90\x94\x7c\xd5\xad\xac\x3f\xfd\xc8\x50\xac\x13\xda\xe8\xd7\xea\xe1\xcf\x1a\x14\x1e\x85\x16\xcc\x8f\x46\x34\x46\xef\x6b\xef\x8d\x50\x0b\xc4\x21\xd4\x2a\x3d\x5f\x90\x04\x34\x83\xfd\x4f\x90\x04\xe9\x07\x7c\xd6\xed\x8f\xef\x68\xb3\xe6\x8f\xd8\xac\x61\xf6\x2c\x97\xaa\xb9\xcd\x26\x43\x8a\xbc\x34\xd2\xda\x48\x23\x5b\x75\x5e\xb2\x44\x54\xd5\xf2\x8b\x4f\xf4\xfd\x82\x37\x89\x87\xfc\x91\xfa\x2f\xc1\x16\x8e\x05\x8d\xc3\xf3\xba\xce\xe4\xcf\xb1\x16\x93\x57\x2f\x29\xe1\xfe\x21\xd4\xcf\xe1\x5e\xd2\xb6\x9c\xbc\x78\x93\x07\xf0\x26\xdb\x4c\x16\xda\xf4\xf6\x48\xdf\x3b\xef\x2b\xd7\xe2\x25\xab\x31\xcb\x32\x1d\xb6\x7e\x1a\x7b\x3f\xeb\x80\x57\x7e\x9b\x4f\x28\xb1\xfd\x7f\x33\xb7\x08\xea\xcb\xb3\x03\xfc\x6f\x42\x80\x73\xe9\x91\xfb\xcc\x5b\x95\x37\x75\x25\x83\x18\xb1\xc5\x69\x81\x43\x7b\x6b\xc8\x77\x19\x97\x4b\x0a\xbf\x15\x1e\xb9\x42\x53\x35\x00\x0e\x36\xc0\x1b\x33\xdf\x28\x0c\x31\xe6\xa3\xae\x4c\xed\x06\xf8\x56\x72\xff\x19\x8a\x38\xbc\x63\x95\x23\xf6\x8b\x60\xe6\xe0\x81\x68\x2e\x0d\xf4\x1c\x01\xe2\xe0\x4b\x1d\x2f\xe2\x2f\x0e\x39\x3e\xda\x1d\xe9\x12\x0f\x59\xbe\xf6\x07\x45\xe9\xcf\x6f\xdf\x3f\xc1\xe2\x8e\xf7\xe2\x6f\xe4\xbf\x79\x5d\xee\x86\x28\x0b\xe2\x60\x03\xdc\x6a\xbf\xd4\x12\xe3\x70\x62\x92\x9a\x99\xb8\x75\x40\xe1\xf6\xe9\xb0\x85\x31\x63\x23\xa3\xb4\x28\xd3\xc1\x16\xd3\x1c\xfd\x0c\xf4\x65\x06\x88\x83\x0d\xf0\x23\xea\xe6\xc3\xa3\x0f\x76\xbf\x49\x3f\xb6\xcf\x96\x7b\x39\x28\xab\x0a\x11\x0a\xf4\xd8\x2b\xea\x28\x79\x39\x39\xe8\xbb\x8e\x12\x21\xca\x82\x38\xd8\x21\xdb\xca\x2e\x1d\x8d\x7e\xfc\xfa\x34\xe8\x75\x0a\x56\x9d\x6d\x79\xe1\x31\xae\xea\x4e\x73\x8b\x07\x5a\x83\xa5\x9b\x4b\x19\x33\x25\x3d\x62\x80\x83\x38\xc4\x00\xff\x71\xbe\x2f\xfb\x01\x63\xe6\x3f\xb6\xb5\x21\xe1\x72\xc6\x6f\x32\xf4\x6d\x0c\x9d\x57\x3d\x31\xbc\x76\x3d\xca\xe9\x4f\x29\xad\xa2\x9a\xd2\x33\xa5\xbf\x26\x95\xfe\x62\x25\x88\xbf\x0f\xe2\xe0\x9f\x3f\x0e\xbf\x4d\x8f\x8e\x73\xcb\x6e\xd9\x89\x1b\x9a\x99\x45\xce\x89\xdc\x40\xaa\x73\xad\x7c\x78\x2b\xf7\x9d\xcb\x1e\x91\xa4\x2d\x94\xf8\x00\x71\x30\xb5\x62\x71\x5f\x52\xce\xcb\x3e\xb1\x6a\x09\xc3\xfe\xfc\x2b\xbf\xb9\x68\xee\xab\x6e\x29\xe6\x1e\x73\x39\x79\xb7\x39\x51\x71\x45\x04\x94\x4f\x01\x71\x30\xb5\xe6\x57\xeb\x1d\x65\xa8\xdf\xa7\x50\x2a\xb0\xc5\x12\x8f\x95\x62\xcd\x28\x78\x7a\xca\x24\x2e\x54\x25\x87\xc8\x68\xd1\x48\x90\x41\x4b\x5c\x80\x38\xf8\xbe\x13\x51\xef\x0e\x5b\xbc\x0d\xb5\xf5\xdf\xfe\x8e\x2c\xd3\x90\xac\xb9\x5c\x1b\x31\x63\x78\x7c\x23\x93\x39\xfe\x89\x6c\x6f\x62\x11\xf4\xf1\x1b\x88\x83\x1d\x32\x24\xcf\x65\xf5\x47\x65\x2d\xbc\x5f\xca\x3a\xee\xd3\xa0\xdc\x31\x89\x20\x70\xdc\xa6\xc8\xf4\x39\xe6\x8e\x35\xaa\x66\xf1\x0a\x6d\x41\xa8\x05\xe2\x10\x6a\xfd\x3a\x97\x5a\xa0\x73\xe3\x7f\xec\x3d\x12\x86\xfb\xf0\x4d\x9b\xe5\x43\x55\xb3\xe9\x91\x47\xbb\x46\xaf\x91\x15\xf1\xc8\x57\x19\x82\xba\x7b\xf2\xf5\x89\xad\x46\xa9\x9f\x21\xfe\x3e\x88\x83\xa9\xa5\xf7\xa6\xf8\x8f\xe3\xb5\x5f\xdf\xd8\xb0\x56\x13\x30\x42\xf0\x35\x3e\x89\x1a\x61\x9f\xf0\x55\xdf\x3f\x24\x2a\xd0\x71\x36\x4c\x1f\x42\x94\x05\x71\x30\xb5\xdc\x48\xc9\x2e\x57\xbe\x2d\x51\x79\x11\xaa\xd5\x91\xb4\x3c\xdb\x82\xa5\x25\x75\x97\xad\xf4\xc0\x5f\x14\x5d\xc4\x3d\x36\x3f\x04\x7a\x98\x02\x71\x30\xb5\xb2\xad\x4d\x65\x0d\xf3\xbe\x75\x55\xda\x85\xe9\x4a\xf7\x65\xe2\xb6\x77\xa1\xde\xb2\xd6\x2f\x17\x22\xf1\x5a\x1b\xac\xd1\xee\x3c\x86\x6e\xfb\x01\x1c\x4c\xad\x0d\x07\x5f\xd7\xbe\xe7\x9f\x5f\x45\xe8\x31\xba\xe7\x8d\xcf\xae\xf4\xf8\xc8\xfc\x5a\xb2\x58\x4c\xf2\x9d\x20\xf6\x08\x4f\x68\x52\x82\x66\x6e\x01\x1c\xec\x90\xb9\x66\xae\x1b\xe6\x86\xfd\x75\x34\xc8\xd6\x0f\x61\x23\x8f\x31\x69\x0c\xc1\xe1\x2c\x3e\x36\x29\xe5\x66\x7b\x3c\xb0\xf5\x80\xec\x11\x42\x2d\x10\x87\x50\xeb\xe0\x5c\x6a\x81\xde\xf1\xff\x47\x90\x44\x5c\x7e\x3b\x87\xc5\x80\x53\x46\x75\x51\xa2\x80\x06\xf7\xea\xeb\x52\x7f\x2c\x94\x87\x4b\x45\x58\x5d\xd8\x5f\x9f\x15\xde\x87\x96\x3b\x02\x71\xf0\xcd\xb8\xd4\xfa\xea\x18\xa6\xcd\x86\x23\x23\xc7\x95\x52\x51\x78\xe9\xba\xd5\xee\x61\xe5\x0a\x92\xdd\x33\x8f\x32\xdb\x7b\x7f\x37\x10\xda\xe1\x1c\xc4\xc1\xd4\x0a\x50\x58\x7e\x71\x5f\xca\x87\xd5\x59\xd1\xfe\x23\xa6\xed\xbd\xcd\x4f\x8d\x42\x74\x39\x09\x82\x21\x1a\x8e\x8e\x04\x74\x0a\xee\xd0\x5c\x28\x88\x83\xa9\x35\x69\x3e\x40\x4e\x35\xc0\x6b\x38\x9d\xa6\x3b\xb0\xa3\x94\xda\xc2\x7c\x9d\xfa\xd0\x24\x1b\xf7\xf3\x92\xc7\xf2\x2c\x4a\xec\x2f\x28\xa3\x04\xe2\x60\x6a\x9d\xb8\x5b\x94\xd4\x58\x59\xaa\xe4\xde\x74\x91\x37\x52\x59\x37\x30\xe2\x09\xd9\x1e\xfc\x1e\x5b\x51\xf2\xe5\xb4\xb9\x70\xfb\x33\x1a\xa2\x2c\x88\x83\x1d\xb2\x73\xaf\x47\xe2\x3c\xae\x7b\x4b\x22\x34\x4e\x9d\x85\x08\x37\xf1\xe9\xfb\xbc\xde\x9d\x69\xe9\x91\x0c\xbc\x07\xaf\x9e\xc8\x5a\xfb\xcc\xbe\x10\xa4\xf8\x77\x90\xe4\x48\x73\x93\x2f\xca\xab\xf3\x0f\xa5\xd7\xba\xe2\xe7\x6c\xfb\x57\x11\x32\xdd\xac\x8d\xfc\x45\xc2\x7e\x26\x2d\x2b\xe6\x76\xd1\xff\xde\x87\xf0\x6a\xe4\xb3\x87\x4b\xa8\x02\x0d\x6b\x66\x31\x48\xe1\x26\x23\x2d\x1d\x7a\x0a\x4d\x7a\xa3\x7f\xaa\x0b\x56\xb1\x44\x67\xe9\x14\xd3\x60\x41\x12\x50\xe5\xb3\x41\x92\xa0\xb7\xfd\x93\xd1\x26\xfa\x21\xfd\xa2\xed\x84\xa3\xe9\x37\x7d\x56\xaa\x22\x28\x4b\x96\xe3\x5a\x8c\xf6\x2a\x2a\xa9\xea\x1f\x89\xfc\x0b\xd5\x6f\xf4\xd5\xb9\x57\xc6\x47\xf1\x87\xaf\x24\x1b\xdd\x5a\x2a\x7e\x3e\xf7\x96\xb1\xfb\x33\x59\xcd\x7c\x16\xca\x3e\x4e\xea\x17\x65\x50\x90\x04\x54\xf3\x9f\x20\x89\x14\x3c\x48\x42\x5d\x2b\x56\xfe\xcb\xfd\xa1\x65\x4b\x0b\x3f\x35\x85\x6d\xae\xff\x44\x60\x09\x09\x2e\x6b\x3c\x43\x8d\x8d\x97\xed\x41\x7d\x36\xf5\x85\x83\x24\x52\xf0\x20\x09\xd3\xe4\xd2\x61\x2e\x9a\x01\xfa\x7d\x31\x2e\x1f\xdb\xb5\xdf\xbe\x48\xea\x0a\x41\xb6\xed\xb1\x4f\x70\xba\x22\x5c\xe5\xbd\x5e\xdb\x5d\xf8\x6e\x5d\xea\x4c\x90\x24\x72\xb7\x8b\x3c\xc6\xe7\x46\x96\xb4\x87\xbd\xc1\xf6\x73\x5c\xde\x80\xfc\xde\x11\x0e\x9d\xab\x6e\xc4\xa3\x7b\xa1\xfb\x19\xbb\xb5\x17\x6f\xf2\x4c\x90\x64\x95\xe1\xee\x8d\x1f\xd5\xdf\x3b\x9a\xee\x9a\x59\xcf\xd6\x11\xdd\x7b\x6c\x21\x37\xd3\xd5\x72\x9c\x75\x32\xda\x45\xbf\xf2\x7c\xf3\xeb\xc5\x9b\x3c\x13\x24\xa1\xa2\xe5\xd0\x4b\x0a\xfa\xf8\x7c\x63\xe9\xea\xc3\xe4\x10\xaf\xfe\x84\x07\x24\x5d\x5a\xb7\x3b\x2a\xd6\x95\xba\x30\x9f\xcf\xe1\x67\x5f\xbc\xc9\x33\x41\x12\x65\x19\x9b\xbe\xa4\xe2\xd6\x50\xd6\x3b\xf5\x24\x5f\xf1\xcd\xfb\x5e\x87\xbf\x72\xcd\xa9\x53\xa3\x78\xdc\xa4\x67\x2d\x7f\xf2\x57\xf5\xe2\x4d\x9e\x09\x92\x3c\xd7\xfa\x89\xcf\x71\xff\xae\xdd\xec\xb6\x10\x99\x88\x98\x6f\x51\x1a\x43\x9b\x9d\xd1\x10\xe6\x33\x55\x25\xf6\xe4\x8d\xbe\x6d\xcf\x8b\x37\x79\x26\x48\xc2\xe8\xf8\x60\x4f\xf4\xb5\xd3\x67\x42\x87\x0f\xe5\xfd\x52\xd9\xc7\xb7\xda\xcd\x92\x55\x50\xbe\x5e\xed\x59\xab\x75\x51\x5c\x30\xb9\x68\x5c\x46\xe7\x7c\x23\xf1\xec\xb5\xad\x26\xec\x59\x40\x13\x8e\x6a\xaa\x6d\xf1\xc4\x89\x6c\x9e\x9b\x90\x2b\x69\xf3\xdf\x31\xfd\xae\x79\xa7\xfc\x52\xdb\xab\x8d\xef\xa1\xd7\x9c\x20\x0e\xbe\xd2\x38\x5a\x27\xf6\x89\xc4\x5b\xb4\x70\x9c\x4c\x7a\x8b\x37\xbc\xca\x0b\x3f\x33\x6d\x06\x32\x05\x5e\xa7\xc6\xd6\x51\x59\xa6\xfc\x82\x3e\xbf\x05\x71\xb0\x6b\x5b\x54\x77\x92\xb1\xab\x0a\xd9\x09\xf6\xbd\x36\xe3\xb7\xd6\x55\x68\x1f\x64\x89\x51\x23\x3e\x4f\x67\x10\xca\xbc\xa6\xbe\xf5\xa4\x47\x0e\x9a\xd1\x03\x70\xf0\xaf\x06\xa6\xfb\x45\x04\xf5\x24\x96\xe6\xc4\xbb\xb4\x36\x5f\x72\x5a\xc6\x45\x6f\x37\x7e\x1d\x32\xd3\x3d\xed\x2f\x8a\x59\x7e\x68\x02\x7d\xc4\x04\xe2\x60\x65\xb1\xbb\x5d\x7d\x4f\x04\xf1\xad\x58\xa3\x5f\x8e\xec\x13\x78\x68\x55\xbc\x29\xdd\xe2\x45\xd3\xb0\xf9\xbb\x5b\x4b\xb9\x3e\xca\x90\x8a\x28\x0b\xe2\x60\x87\x2c\x87\x59\xcd\x4a\x6a\xce\x8f\x08\x97\x69\x16\xf7\xcd\xcb\x21\xcc\xa9\xa7\xdb\x1c\x36\xc8\x6c\xda\x5f\x84\x30\x57\x67\x4c\x1f\x11\x21\x5e\xf7\x83\xb8\x7f\xd6\x8d\x90\x3a\x57\x90\x04\x74\xc6\xfd\x8f\x25\xb1\x85\x1a\xae\x3d\xff\x3d\xef\x91\xfd\x66\x44\x9d\xff\xd6\xdd\x1f\xed\xa3\xe8\x21\x8b\x1c\xa2\x3e\x1c\x65\xdb\x1e\x76\x52\x04\x4d\xd0\xf3\x08\x80\x83\x99\x25\x9a\x3d\xa5\xbd\xa0\x52\x1a\xf3\x60\x65\x3b\x5d\xc6\x73\x46\xe0\xa0\xb9\x3d\x91\xcf\x1a\xe3\x8f\x4c\xae\x6a\x78\x15\xde\x9d\x78\x44\x59\x10\x07\x33\x2b\x9a\x3c\xdb\x96\xd1\x63\xe6\x10\x7b\x9b\x4f\xab\xbf\xea\x6b\xc6\x9b\xe6\x2a\x95\x9f\x22\xaf\x29\x26\xde\xfb\xe5\x3f\x68\x08\x83\x3e\x95\x06\x71\x30\x05\x1c\x7b\x6e\x8b\xdc\xfa\x15\xc1\x87\xab\x95\x2d\xea\xe9\xf9\xce\x33\xf8\xe4\x0f\x3d\x69\x73\x55\xfb\x76\xa3\xb8\x86\x08\x56\x28\xb4\x6e\x04\x88\x83\x95\xad\xd7\x16\x13\x7b\x99\x8b\xf7\xf1\x3d\x2e\xf6\xfc\xaa\xb3\xb6\x96\x92\x66\x46\x67\x07\x6b\x91\xc4\xee\x17\xf3\xa1\x6b\x86\x91\xd0\xec\x04\x88\x83\x1d\x32\xc6\x37\xef\xf7\xc5\xb0\xb3\x1e\xa9\x9b\x21\x51\xfb\xe0\x58\x1c\x20\xc9\xcb\xb1\xde\x09\x10\x7f\x9f\x6c\x9d\xdc\xe0\x89\x72\x32\x86\x30\x0b\xc4\x21\xcc\x3a\x57\x90\x04\x74\x61\x3d\x6b\x96\xca\xe4\xd7\xa5\xe7\xf4\x66\x9b\x92\x1d\x1e\x31\x1b\x96\xac\x02\x2c\x54\x8b\xb1\x3b\xaa\x55\x72\x5a\x0b\x77\xa7\xf3\x48\x44\xa1\xcf\x59\x41\x1c\xcc\xac\x37\xaa\xd3\x14\x48\xec\x33\xc5\x62\x38\xa1\x96\x06\xd4\xc1\x95\xfd\xe9\x5f\x36\xb5\xec\xfc\xbe\xc7\x78\x5d\x3a\x0e\x6f\xd1\x56\x41\x94\x05\x71\x30\xb3\x9a\xa2\x8a\x03\x57\x71\xdb\xde\x34\x4a\x7d\x0b\x79\x90\x23\x90\xa2\xde\xc5\x7b\xf8\x5d\x1a\x07\x8f\xc8\x7a\x57\x38\xea\xf9\x4b\x68\x17\x7c\x10\x07\x53\x20\xcf\x45\xa1\x8c\x55\xe7\x72\x29\x13\x81\xa9\x0b\xbd\x42\xa5\x4a\x91\x68\x3a\x4b\xe5\x37\x0d\x05\xff\xc2\xda\x95\xce\xf4\x64\x68\xc9\x27\x10\x07\x2b\x4b\x9d\xe7\x91\xa8\xd9\xbc\xde\xf4\xb5\xae\xb3\x55\x48\x52\x58\x7c\xae\x9d\x8f\xca\xcd\x8c\x24\xbb\xa5\xca\xae\x26\x08\x2d\x4f\x0a\x51\x16\xc4\xc1\x0e\x59\x6f\xe2\xdf\x81\x57\x19\xcc\x4f\xad\xde\x1b\xdf\x5d\xf7\xcb\x73\x2a\xa1\x0a\xf7\x22\xf9\xce\x19\x13\x15\xfa\xe7\xf9\xba\xf0\x33\x68\xb1\x75\x10\x87\xd8\xc1\xf4\x7c\x41\x12\xd0\x0d\xd4\x59\xb5\x96\x15\x06\x5c\x23\xa3\xdf\x7d\xb8\x8d\x1b\x91\x5f\xfd\x4a\xde\xc5\x8d\x81\x17\xcb\xe6\xf9\x4d\x5e\x0f\xed\xb7\x45\xe5\x8f\x13\xb9\xa0\x4f\x26\x00\x1c\x4c\x2d\xa5\xdb\x9c\x84\x71\x5a\x8a\xab\xcf\x73\xf1\xaf\xdd\xb7\x94\xd6\xdc\xed\xab\xec\x8e\x2b\x8d\x53\x94\x66\x08\x50\x48\x79\xa6\xa4\x01\x7d\xd6\x0e\xe0\x60\x6a\x4d\xba\xd5\xd6\x66\xe3\xd7\x9d\xfa\x14\x59\x08\x2a\x61\x5d\xae\xee\x53\xc3\xd1\x62\xf9\x5b\x62\x3a\x5c\xb4\x96\xd9\x54\x79\x05\xda\x13\x14\xc4\xc1\x1f\xf5\x0a\x90\x68\x09\x9c\x73\x44\xfa\xcc\x91\xc6\x77\x18\x47\xdf\xaf\x6f\x0d\xa2\x77\xbf\xbe\xb9\x90\x47\x6f\x5f\x51\x6b\xce\xa9\x07\x95\x05\x70\xb0\xb2\xa5\xac\xfe\xee\x2c\x1c\x3a\xe2\x04\x2c\x2f\x07\x0f\x14\xb3\x23\xba\xed\x9e\x7a\x6a\x60\xd8\xe5\xbd\xa9\x5b\xc2\x70\xd8\x5c\x87\xd6\x4f\x01\x71\xb0\x43\x76\x1d\xeb\x5e\xbd\xe8\x8b\x89\xc1\x2d\x11\xcd\xc6\x50\xbe\x14\x45\x14\x25\xb2\x29\xd7\xa3\x1a\xfa\xc7\x0a\x43\xbf\x89\x3d\xae\x28\x40\xfb\x2e\x03\x38\x84\x5a\xe7\x0b\x92\x80\x6e\x94\xcf\xaa\x65\xea\x95\x89\x6f\xa7\xe9\x37\x8e\xd6\xcc\x2b\x5b\x99\xfe\xad\x88\xe1\x17\x46\x8d\x6c\xce\xdf\x4f\xcd\x86\x6c\x18\x4b\x96\x26\xfa\x88\xbf\x0f\xe2\x60\x6a\x55\xe6\x86\x2e\x3f\x59\xe5\x59\x20\xba\x5e\x17\xf2\xa9\xaa\xa6\xba\x2b\xc2\x27\xbf\x6d\x64\x7a\x43\x81\xdf\xf7\x59\xe3\x5e\xa4\x00\xa2\x2c\x88\x83\x6f\x6c\x43\x5b\x24\x44\xe8\xde\x36\x53\xb4\x41\x80\xde\x47\x7c\x7a\xbd\xfe\xfa\xd2\x9f\xf2\x55\x1c\x56\xf4\xee\xfe\xbc\x1d\x3d\x53\x68\x26\x09\xc4\xc1\x1c\x30\xce\x37\xee\xda\xef\xf5\x56\xa5\x22\x14\x0c\x62\xcf\x15\xf1\xdb\x7b\x58\xbb\x7d\x4f\x37\x8f\x23\xe6\xe6\xdb\x8a\xdf\xa6\xb9\x01\x88\xb2\x20\x0e\x3e\x5b\x1f\xf5\x25\xb5\xfa\xcd\xc7\x04\x51\xba\xe1\x67\x0a\xca\x92\xec\x09\x63\x1f\xed\x9e\xc7\xdd\xa0\xf9\xc2\x92\xaf\xf3\x0c\x19\x1b\xba\x8b\x05\x71\xb0\x43\x46\x38\x4b\xae\x5f\x12\x21\xa6\xd9\x70\xd4\xf4\xe9\x34\xff\x90\x1d\x89\x38\x6f\x50\xbc\x80\x2d\xcf\xbf\x85\xe4\x28\x3b\x59\x28\x06\xa1\x16\x88\x43\xa8\x75\xbe\x20\x09\xe8\x81\xe8\xac\x5a\x9d\xf4\xe4\x6c\xd5\x28\xf7\x74\x57\x38\x23\x67\xcc\x3c\x5b\x35\xbd\x9e\x8a\xa8\xe3\x75\x4b\xde\xab\xf7\xa6\x09\xe1\xcd\xd0\x7e\x8e\xf8\xfb\x20\x0e\xa6\xd6\xba\x61\xc6\x67\x2e\x3f\xc1\x57\x85\x54\xc1\x6a\xe8\xe5\x05\x5f\x1b\x0f\x51\x1e\xc9\x3b\xf9\x91\x87\xd4\x79\xc5\x68\x4b\xea\xd9\x23\xca\x82\x38\x98\x5a\xfc\x2b\x49\x3b\xa1\xee\x99\x24\x6a\x68\x0d\x89\xdb\x4d\x05\x48\x78\x01\x1a\x1b\x7f\xab\xe3\x34\x12\xe8\x71\x15\xd4\xd1\x8c\xa0\x4f\x7f\x41\x1c\xcc\x01\xfd\x1e\xad\x11\x32\x8b\x63\xd3\xbe\x11\xd4\x93\xee\xce\xdf\x4f\x8d\xaa\x4f\xbf\x18\xa6\x97\x0d\xf7\x63\x25\x8c\x2c\x20\x33\x63\x23\xca\x82\x38\x58\xd9\x21\x83\x34\x43\x17\x1c\x51\x19\x8b\x0e\x7a\x0f\x54\x8f\xf2\x6f\x8f\x55\x32\x23\xf3\x3e\xb8\x5e\xcb\xf0\xfb\x7b\xc9\x86\xae\x14\xba\x83\x03\x71\xb0\x43\xc6\xf0\x14\x97\x63\x32\x4d\xb1\x32\x94\x4a\x2f\x07\xbf\xb3\x34\x90\x62\xdd\x38\x8a\x87\xfa\xf4\x6a\x87\xa8\xcb\x4f\xda\xa9\xcc\x3f\x08\xb5\x40\x1c\x42\xad\xf3\x05\x49\x40\x0f\xbe\x67\xd5\x9a\x62\xf9\x12\x54\xfd\xf8\xa5\x49\x76\x87\x74\xf5\x6f\xe3\xaa\xc7\xef\xbe\x27\x62\x05\x4f\xb3\x35\xd1\xed\x57\xa2\x8a\xe2\x4d\x40\xb3\x89\x20\x0e\xa6\x56\x79\x43\xe9\x17\xfd\x12\x53\x24\x7d\xbf\xbb\xec\xf7\x64\xf6\x6a\x3e\xd1\xd6\x1d\x2e\x27\xb3\x04\xf6\x9a\xf3\xe1\xf5\xce\xfe\xdf\xc2\x67\x20\x0e\xa6\x56\xf9\x07\x1e\xdf\xbb\x11\xd5\xa9\xd7\xfa\x7e\x1f\xbe\x4a\xf5\xd5\x3f\x98\x30\x90\xdd\x27\x79\x6b\x20\xa1\x7d\xc4\xf1\x91\x38\x0e\x7a\xbf\x04\xe2\x60\x0e\xb0\xdc\x44\xbe\x7a\x44\x4a\xb6\x2f\xc7\xd4\x3d\x21\xb6\x5f\x9d\xce\xf8\xf3\xad\xd2\xd8\xe0\xf1\xb6\x79\x31\xff\x96\x41\x84\x34\xb4\x96\x16\x88\x83\x95\xcd\x67\xf4\x6e\x91\x6a\xfc\x2a\x55\x39\x22\x7d\xa5\x15\xd3\x93\x72\xc6\xe1\x50\xd9\x20\x8b\x5e\xc9\x6e\xab\x20\xef\x06\xb6\x14\x74\xc3\x09\xe2\x60\x87\x8c\xbe\x23\xe0\x4b\x74\x1c\xdf\xd0\x78\x81\x45\x43\xa1\xba\x89\xba\xd5\xe5\xb1\xd7\x3a\x57\xc4\x69\xb9\x4a\x1a\x9b\x09\x43\x3d\x4d\x11\x6a\x81\x38\x84\x5a\xe7\x0b\x92\x80\x26\x38\xfe\xe3\xab\x72\x2e\xc3\xc5\xe5\x17\x7c\xcb\x57\x1c\xfb\x1e\x5c\x9b\x33\x90\x63\x14\xae\xc0\x7d\xda\x71\x77\x54\x00\x0b\x8d\xf4\xe3\x03\x5a\x6a\xe8\x63\x5a\x00\x07\x53\x4b\xc2\x57\xe0\x53\x5e\x11\xbd\x7f\xf4\x15\xc3\x85\xa9\xc2\x68\x21\x14\x82\x6e\x7d\xdc\x84\x00\x71\xb5\x5d\x45\xc5\xf1\xee\x40\x68\xb7\x78\x10\x07\x53\xeb\xc9\xb5\xba\x47\x16\x8a\x01\x1b\x6d\x27\x56\x4c\x39\xb5\x12\x4e\x15\x25\x49\x5f\x6a\x24\x38\x9e\xab\xef\x39\xd8\x7f\xe6\x5c\x83\x52\x3f\x20\x0e\xe6\x80\xd9\xc7\x14\x66\xa5\x21\xd5\x90\x7d\xfa\x66\xdf\xd1\xf8\x42\xe5\x5e\xe4\xef\x8a\x0c\xd3\x63\x0d\xbd\x0f\xda\xf3\xa7\xd9\x58\x6c\x11\x65\x41\x1c\xac\xec\x4e\x91\x5c\xa1\xef\x74\x10\x3d\xe5\x5c\xf1\x90\xf6\xbd\x25\x2e\x6d\xfd\x2b\x8c\x36\x83\x13\xef\xa3\x2d\x57\x49\xf5\x34\x4a\xa1\x7d\x5a\x41\x1c\xec\x90\x31\x2b\x11\xe3\x96\x89\xbc\xbe\x54\x6b\x3c\x43\x73\x15\x6b\xea\x72\x4b\x8d\x51\x8f\x51\x89\x5c\xb0\xd9\x6c\xf6\x48\xa4\x8c\xe4\x3b\x84\x5a\x20\x0e\xa1\xd6\x39\x83\x24\xa0\x19\xec\x7f\x82\x24\x52\x67\x82\x24\xda\xe5\x7c\xd1\x9e\xb9\x14\xa2\x68\x04\x7f\x4f\x32\x1f\xfc\x24\xdf\x16\xd7\x79\x66\xaf\xc4\x9a\xd1\xc8\xf3\xe6\xea\xbb\x35\x4a\x82\x8b\x4f\xf4\x9d\x09\x92\x3c\x6b\xc0\xfd\x63\x2f\x38\x60\x9b\x13\x1e\xa4\x7b\x29\xb5\x8c\x2f\x39\x6c\x8f\xe0\xd7\x44\xb6\x77\x61\x4b\x63\x0f\x8e\xe9\xb3\xf8\x8b\x37\x79\x26\x48\xb2\x79\xe8\xcb\x45\x5c\xf4\x87\xfa\xb9\xcf\xf6\xd0\xc3\x4d\x0e\x2c\x36\x52\xec\x11\x02\x0d\xfc\xd2\x3e\x85\x40\x63\x3c\x3a\x22\xe4\xff\xcd\xdc\x22\xa8\x2f\xcf\x0e\x70\x6f\xaa\x3b\x9d\xba\x3c\x7f\xe6\x04\x22\x19\x27\x4b\x59\xb1\xc6\xac\xfb\x1e\x7d\x3d\x58\x76\x88\x0d\x18\xe3\x41\xa6\x36\xae\x34\x47\x48\x08\xe2\x60\x03\x1c\x23\x9c\xca\xef\x87\xba\x16\x73\xe9\x1e\x06\xeb\x0d\x95\x78\xcb\x57\x6e\x9b\x5f\x75\xfa\x7d\x2e\x8f\xa1\x6f\x96\x89\x8c\x69\x41\x6f\x7a\x41\x1c\x6c\x80\xb7\xa8\x3e\x0b\xe2\xd6\x7f\xc9\x61\xb8\xa3\x82\xf9\x66\x4b\x9e\xd8\x6c\x59\xa1\xe1\xe1\xf1\xdf\x40\x83\x6b\x3e\xe5\x91\x2e\x87\xef\x11\x65\x41\x1c\x6c\x24\x72\x54\x70\x59\x6c\xa0\x4a\xd1\xf5\x6c\x0b\xb9\x58\x3f\x73\x61\x1f\xf0\x12\x49\x96\xe8\x90\xb4\xe0\x41\x72\xbf\xb9\x21\x8b\x09\xe5\x53\x40\x1c\xac\x6c\x67\x4f\xe5\x56\x79\x9c\x50\xe7\xf1\x25\xe3\x2f\xcf\x22\x77\xb9\x76\xec\x98\x1d\x9f\xe9\x08\x5c\x6a\xb9\x36\xc9\xdb\xfa\xc5\x14\xba\xd2\x81\x38\xd8\x21\x7b\x90\xc0\xfb\xbd\xe9\xe1\xef\xa4\xaa\x4a\x92\x57\x22\x89\x02\x46\xf2\x0b\xc3\xf1\x3c\x5c\x8b\x35\x81\x62\xe8\xec\xfc\xdf\xc7\x65\x10\x03\x1c\xc4\x21\x06\xf8\xf9\x82\x24\xa0\x31\x73\x56\x2d\x89\x4e\xfd\xe9\x45\xdc\x5e\xef\x40\xa7\x4b\xce\xcc\xc2\x24\xbd\x14\xd2\x53\xf8\x0e\x1f\x6c\xd3\x56\x64\x38\x37\xee\x29\x74\x42\xcf\x92\x20\x0e\xa6\xd6\xb3\x83\x9e\x97\x77\xeb\xe3\xab\x91\xa9\x44\x2b\xb2\xda\xf7\xdf\x4e\xe2\x2a\x60\xed\xfe\x28\x9d\xbb\xfd\x46\xe1\x76\x27\x33\xb7\x07\xa2\x2c\x88\x83\x6f\x6c\xf3\x47\x59\x9d\x48\x84\x9e\x45\x1e\xa5\x28\x24\xa7\x53\xe9\xb0\xf5\xe7\xd3\xef\x83\x21\x92\xc6\x1c\x3c\xe4\x78\xa7\x2d\x8c\xeb\x88\xb2\x20\x0e\xe6\xc0\xfb\xb0\xa0\x41\x05\x5b\xb4\x5b\x09\xf7\xba\xfa\x5e\xf4\x87\x33\x17\xe0\x46\x29\xd8\x3e\xf3\xff\xa3\xfd\x4e\xdc\xdb\xf2\xa1\x13\xb4\x1d\x3b\x88\x83\x95\x8d\x48\xa5\xd6\x6e\x0d\x8d\x0e\x4d\xbf\xed\x3d\x37\xa7\x47\x9d\x33\x2d\x9d\xae\x49\x4b\xaf\x2c\xb0\xf3\x80\x5e\x3f\xbc\xcc\xf7\x0f\xb4\x76\x06\x80\x83\x1d\xb2\x70\xbc\xbc\x3b\xf4\xef\xe2\x9c\x7b\xcb\x48\xc5\xbc\x48\x86\x9a\xeb\xba\xe8\x17\x6b\xdb\x0a\x3b\x83\x4d\xf9\xa4\xbf\x59\xe5\x67\x23\xd4\x02\x71\x08\xb5\xce\x17\x24\x01\x9d\x1b\xcf\xaa\x85\xea\xea\xf6\x6e\x10\xaf\x16\xe9\xa7\xa7\x94\xa7\x7f\x72\x30\x35\x3b\x6a\x8f\x0e\x3b\x29\x3f\x77\xdb\x4c\xef\xe0\xe3\xb7\x8a\xd0\x8a\x24\x20\x0e\xa6\x56\xae\xd1\xc2\xd5\x47\x22\x42\x92\x55\x31\x06\x0b\x5e\xbc\x56\x4b\x25\x9f\x19\x82\xbb\x74\x46\x5b\x4b\x98\x6f\xab\x77\x2a\xed\x5a\x22\xca\x82\x38\x98\x5a\x0f\x7f\x67\x86\x59\xa9\x0d\x12\x9b\xee\xa6\xa2\x2c\xdf\x6a\x5c\xc5\xd8\x2d\x18\x4e\xf7\xd3\xd0\xe1\x98\x2b\x3c\xd1\x2f\xb4\x40\x42\x94\x05\x71\x30\x07\xec\x16\xd1\xa8\xcd\x5e\x5e\x6f\xfb\x1a\x47\x86\x24\x92\xca\xf9\x5b\x74\x9f\x20\x8c\xae\x5d\xf8\xc1\x47\x5a\x87\x82\x93\x9b\x6b\xd0\xde\xe1\x20\x0e\x56\x36\x7e\x60\x6e\x93\x66\xbe\x18\x2b\xbb\xfa\xa7\xa6\xbd\xf4\x2f\x6e\x61\xc5\xed\x77\x49\x0f\x08\x39\xd3\xf4\x62\xea\xf0\x6c\xf1\xf0\xa1\x7c\x2b\x80\x83\x6f\x18\x33\xcb\x4d\x7f\x68\xe6\x31\xcd\xe5\x40\xf0\x48\xb3\xeb\x29\x07\x2f\x81\xce\x93\x83\x85\x6f\xb2\x84\xec\xac\xbb\x19\x9b\xc9\x16\x08\xb5\x40\x1c\x42\xad\xf3\x05\x49\x40\xef\xf8\xcf\xaa\xb5\xb6\x9c\x96\x32\xdb\x37\x1a\x4a\x24\xf7\xab\xee\x60\x3b\x5a\x97\x89\x14\xef\xdb\x97\x97\xbd\x3a\x2b\x7f\xe5\xec\x3d\xdd\x87\xa0\xb5\x38\x41\x1c\x4c\x2d\x11\xbb\xb6\x54\xa6\x5f\x4c\x6a\xb8\x64\xe4\xbe\xbe\xa8\xc1\xfb\x36\x54\x5a\xb7\xf1\x36\xc6\x4f\xf7\xb4\x42\x6e\x72\x74\xb0\x85\x23\xca\x82\x38\x98\x5a\xe3\xad\xf1\x1e\x1d\xbb\xb6\xfd\xef\xc8\x7f\xf3\x47\x38\xa7\xb8\x99\x4c\x14\x0e\xa6\x59\xcb\xd3\x44\x20\x9f\x04\x0c\xcb\xbc\x83\xf6\x4c\x02\x71\x30\x07\x06\x6d\x26\x25\xe8\xeb\xb3\x14\x82\x9d\x14\xf8\x7e\x2c\x54\x8f\x8c\xa2\x8f\x8f\xae\x5c\xb7\x0f\x78\x13\xac\xc9\xdd\xab\x6e\x0a\x4d\x56\x80\x38\x58\x59\x7c\x12\xfd\xeb\x97\x87\xb4\x8a\x87\xef\x19\x7d\x8d\xfb\xbd\x82\xf9\xad\x18\x45\x73\xf6\x39\xba\xc4\xab\x3e\x9d\xc9\x0f\xe8\x4e\x3f\x11\x65\x41\x1c\xec\x90\x9d\x7b\x45\x92\x51\xe1\x9c\xba\x63\xdc\xfe\x99\xbb\xe5\xad\x1b\xc3\x33\xd1\x13\x75\x6b\xed\x23\x57\x07\x28\xac\xb4\x5c\x84\x67\x5b\xbc\x5c\xe7\xfe\x1d\x24\x21\xc6\x61\x9f\x44\x71\x91\x22\x36\xef\xf8\x52\xe3\xe5\x12\x72\x55\xb6\xf5\x15\x67\x34\x8a\xce\x9d\xdf\x72\x0c\x9e\x66\x98\x2f\x65\xfe\x85\xb2\xfd\x26\x73\xed\x9f\xe8\xfd\xd8\x1c\x32\xdb\x71\xc7\x3f\xc3\x0d\x79\xc6\x43\xb2\x78\x3f\xe4\xd7\x7d\x2e\xcb\xac\x57\xb2\x06\x2f\x61\x41\x12\x50\xe5\xb3\x41\x92\x89\x28\xbd\x09\x2f\x2e\xfa\x22\xd7\x92\xfe\xbb\x09\xa2\x0a\x6b\x35\x0e\x8c\xe8\x79\x7d\x42\x94\x77\xab\xb7\x5e\x34\xf5\xaa\xee\xfe\x7b\x98\x55\xad\x0b\x30\x5b\xe3\x47\x65\xb3\x97\xb6\x06\xfc\x2e\x93\xfa\x63\xf2\xc7\x86\xf7\xfb\x3d\x9b\x1f\x29\x48\x28\x68\x46\x54\x8b\x50\x90\x04\x54\xf3\x9f\x20\x89\x37\x3c\x48\xe2\xaa\x78\xf4\xc3\x9a\xee\xf0\x71\xd2\xa7\xab\x26\x76\xe5\xa2\x4c\x3a\x18\x9c\x9d\x68\x2d\xbf\x4c\xd0\x32\x2e\x7b\xc7\xb0\x4b\x9f\x5c\x38\x48\xe2\x0d\x0f\x92\x2c\x4d\xcf\x6c\x27\x67\x35\x1a\x10\xda\x0c\xd8\x47\x26\xb5\x57\xd3\x7c\x33\x21\xac\xc3\x63\x23\xb0\xf2\x6c\x5d\x75\x7a\x35\xc5\x7b\xe1\xbb\x75\xef\x33\x41\x12\x1a\xae\x29\x3a\x4c\x26\xfb\xad\xa4\x9d\x4d\xbc\xca\x43\x8b\xf1\xe7\x6e\x89\x37\x66\xbf\xf6\xb5\x8d\xe2\x84\xb6\xce\x11\x0f\xe9\x5e\xbc\xc9\x33\x41\x12\xe5\xc8\x60\xae\x47\x37\x06\xea\x9b\xee\x27\x0d\x86\xfd\x26\xa5\xfd\xc0\xe9\xbd\xf0\xcb\x47\x8a\x83\x1d\xb3\xe3\x73\x92\x06\xcf\xed\x8b\x37\x79\x26\x48\x72\x19\x5f\x9b\x4a\x8d\xe0\x6f\xdd\x3d\xfa\xe5\x74\xc7\x86\x62\x7b\xa4\x5f\xf8\x11\x8f\xc6\xde\x6a\x9c\x1e\x65\x70\x3a\x52\x89\x5d\x7c\xff\x1e\xef\x33\x41\x92\x42\x5c\x5c\xf6\x3b\xaa\x51\xdf\x62\xea\x59\x8a\xe9\xc6\x04\xc8\x58\x7e\xab\x5d\xfa\x64\x95\x4f\xea\xe2\xbb\x7a\x0b\xa3\xe9\xb3\xd5\xc5\x9b\x3c\x13\x24\x79\xc6\x56\xdf\x6c\xfe\x9c\x87\xe5\xd3\x6b\x39\x07\x82\xda\xb6\xea\xc2\xb8\x86\x80\x0a\x09\x5d\xf5\xfd\xf8\x0f\x9a\x4b\xd6\x59\xf2\x17\x6f\xf2\x4c\x90\x44\xcc\xee\x04\xbd\x46\x75\x5b\x69\x0e\xf3\x61\xd1\xbe\x16\x1a\x2a\x77\x99\xe3\x36\x97\xde\x74\x88\xbc\x58\x89\xa5\x5f\xf2\x04\xcf\xff\xe6\x61\x0f\x34\x12\xcf\x5e\xdb\x0c\x3f\x1c\xd1\xb6\x24\x61\xfd\x09\x7f\x19\x6f\x24\x98\xbd\x31\x25\xae\xd6\xd5\x75\xcd\xd4\xb5\x35\xd3\xff\x07\x09\xc7\x68\x3f\xb4\xc0\x03\x88\x83\x5d\xdb\xa6\xd0\x93\x5c\x36\x9d\xba\x48\x69\x8c\x3c\x7c\x25\xa8\x9b\x87\x6f\x73\x93\x8a\xf0\x95\x37\x9c\x5e\xc9\x2a\xb3\xa7\x6f\x8d\x80\x3e\x11\x05\x71\xb0\x6b\x9b\x59\xda\xb0\xe4\x2b\xfa\x07\xb9\xa2\x7f\x6b\xb4\x2e\x3d\xe1\x95\xb4\x67\xc4\x52\x7e\x50\x49\xff\x1a\x89\xd6\xc3\xc7\x8c\x79\x11\xfa\x0c\x1f\xc4\xc1\x2e\x42\x77\x14\xd4\x97\x67\x17\x66\x1e\x4f\x7e\xc0\xab\xfd\x9b\x8e\x37\x1b\x61\x81\x7a\x35\x6d\xcb\x86\x22\x77\x1b\x55\x96\xdf\x25\x13\xba\xc0\x83\x38\xd8\xaf\x5d\xb7\x7a\xd7\x76\x2b\x70\x99\xef\x86\x61\x63\x23\x7e\x66\x3d\xee\xed\x7d\x41\x16\xc5\x21\x5c\xf2\x16\x67\xad\xcf\xfa\xa5\x6f\xa1\x6d\x3c\x41\x9c\xef\x2d\x82\x7f\x97\xb5\x1f\xb7\xeb\x76\x30\x7c\xaf\xb0\x7b\x2f\x62\xb4\x8c\xa9\x95\x3f\xd0\x78\xca\x4c\xb6\xb4\x83\x9a\xe8\xc9\xae\x33\x2b\xb6\x07\x3a\xe2\x75\x3f\x88\xfb\x67\xdd\x08\xef\x73\x05\x49\x40\x67\xdc\xb3\x66\xe1\xe1\x51\x5b\x72\xc6\x3d\x88\x79\x45\x2b\x87\x34\x7b\x3c\x2f\xd8\x2e\xf4\x8d\x4c\x95\xf5\xde\x28\x9f\x0f\x81\x83\x34\xd3\x27\x68\x3d\x68\x10\x07\x33\x6b\xbf\x34\xcd\xb4\x78\xd7\x5d\x72\xf7\x78\xf5\xb5\x6e\x16\xd3\x10\x0b\x67\x73\x56\x74\x20\xc6\x83\xcb\xe2\xac\xec\xca\xd8\x5f\xda\x11\x65\x41\x1c\xec\x58\x19\x73\x26\xff\x89\x10\x98\xa7\x1f\x51\x16\x59\x9a\xe8\x38\xa0\xf1\xed\x8c\x99\xe9\x0f\xc1\x78\x18\x88\x15\x4c\xc9\x7e\x3b\xa4\x14\x7a\xc3\x05\xe0\xe0\xeb\xad\x4f\x19\x2e\x8a\xac\x8f\x70\x34\xdc\xb4\x8c\xbc\x7c\x24\x7d\x99\xf6\xb8\x3c\x24\xe4\x91\x3b\xea\xe3\x4a\x77\x02\xff\x49\x8a\xb7\x88\xb2\x20\x0e\xf6\x6b\xc3\x2c\x1a\x45\x24\x65\x65\x66\xc7\x6e\xde\xce\xa9\x3b\x78\xa9\x22\xf7\x97\xcc\x50\xbf\xc5\xb0\x56\xc9\x38\x93\xa9\x31\xe3\x95\x21\xf4\x41\x06\x80\x83\x99\xe5\x15\x90\xf0\x3b\x50\x02\x55\x94\x24\x7e\x6e\x7c\x2d\xd8\xcd\x32\x9b\x9f\x5d\x87\xea\x6b\xdb\x87\x27\x0c\xaf\x74\x4f\xde\x6d\x6e\x21\xcc\x02\x71\x08\xb3\xce\x15\x24\x01\x5d\x58\xcf\x9a\x35\x89\x67\x94\xb7\x39\xa0\x76\x3f\xaa\x33\xdf\x99\x1f\x6b\x47\x52\x1c\xbf\x70\xb2\x31\xec\x29\xfd\xe8\x84\xe3\xed\x4f\x65\x21\xd0\xe4\x2b\x88\x83\xef\xda\xff\xc0\xca\xeb\x28\xad\xae\xff\x2f\x5e\xb3\x1f\x96\x9d\x14\x0e\x87\x2a\xce\x6f\x0b\x33\xa7\x25\xd9\xa2\xa3\x6b\x82\xda\xcb\xd0\x6a\xb1\x20\x0e\x76\xac\x48\x44\x1c\x51\x82\x39\x37\xbf\x99\x5f\x2a\x3a\x8d\x7e\xe9\xfb\x46\x17\x9d\x7b\xe0\x86\xcb\xe5\xb9\x27\x37\xdb\x53\xb0\xa8\x77\xa0\x35\x9f\x40\x1c\xcc\xac\xa7\xac\x64\xa3\xd9\x57\x70\x27\x95\xa4\x04\xed\xf8\x9d\xae\xf0\x1f\x1e\xee\xfa\xe8\xd7\xe3\x87\x56\xb6\xed\x84\x8a\x9d\x36\x40\xeb\x19\x82\x38\xd8\xaf\x1d\xb9\x7c\x37\x6f\x48\x30\xc6\x46\x21\x4e\x6b\xb8\xe9\xa5\x03\x19\xff\x3b\x99\x13\x3b\xb4\xdd\x67\xa5\x89\x5c\x2d\xc6\xf3\x43\x78\x88\xb2\x20\x0e\x66\x16\x05\xf1\xe5\x8c\xb7\x94\x1d\x99\xaa\x27\x8e\xd9\xfc\x48\xa3\x45\xaf\xd2\xf9\x38\x45\x58\x05\x9c\x90\xa4\xf8\xc7\xae\x08\xad\x16\x21\x1e\xf5\x40\x1c\x62\x0f\xd3\xf3\x05\x49\x40\x37\x50\x67\xd5\xa2\xf9\xe8\x30\x5c\x3d\xaa\xea\x18\xf8\xc6\x39\x44\x8a\x6c\x8b\x7d\xad\xe8\x11\xb5\x68\x89\xe9\xc1\xd3\x72\x83\x5b\xc4\x41\xc7\xfc\x50\xb8\x1f\xc0\xc1\xd4\x7a\xb4\xd7\xcf\x11\x5a\xac\xa5\x62\x85\x17\xc1\x55\xac\xef\x9e\x6a\xb5\xc9\xd2\x2c\xb3\x43\xd9\x75\xe5\xf0\xf5\xd1\x06\xc3\x13\x68\x92\x12\xc4\xc1\x0e\x96\xf3\xd0\x8d\xe5\x4b\xbf\xf4\x5f\x2f\x5f\x32\x12\x0a\x65\x9c\x70\x72\x65\x2b\xa4\x55\xf0\x3b\xd1\x15\x7d\x67\x72\x5c\x31\xf3\x08\xda\x7d\x1b\xc4\xc1\xd4\x4a\xc3\xaa\x9b\x2d\xb1\x3b\xcc\xfb\x12\x1b\x3c\x88\xf7\x47\x29\x4f\xd0\xb3\x26\xed\xa6\xb2\x55\xdb\xbd\xdb\xf5\xeb\x64\x8b\x56\xd0\x0b\x2e\x10\x07\xfb\xb5\x69\x4a\x41\x43\x44\x97\x13\x43\x69\x90\x65\x39\xd4\x5d\x48\xdf\xa2\xbe\x94\x67\xc4\xbb\x62\xf8\xc6\x8e\x67\xf5\x95\x55\xc6\x26\xf4\x5d\x37\x88\x83\xa9\x95\x19\x20\xc9\xf4\xf8\x58\x99\x59\xf8\x68\x4f\x31\xea\xc7\x95\xd6\x94\x49\xae\xc1\x5f\x0e\xb4\x85\x42\x9a\x33\xaf\xf5\xac\x9a\x35\x11\x6a\x81\x38\x84\x5a\xe7\x0b\x92\x80\x6e\x94\xcf\xaa\xf5\x93\xfa\xc0\xbc\xd6\x02\x5b\x77\x75\x7b\x62\x77\xde\x7d\x73\xa4\x2a\x53\xa0\xbf\xc1\xfb\x8a\x9f\x81\x08\x97\x9b\x74\x9e\xf9\x6f\xe8\x93\x66\x00\x07\x53\xcb\x00\xfd\x5d\x85\xdb\xed\x09\x5b\x37\x5d\xca\xe3\xa5\xf0\x84\x8c\x5a\xe1\x09\x59\xcd\x3f\x54\x3d\xae\x0a\xf7\xda\xfe\xf2\x0d\x52\x22\xca\x82\x38\xd8\xc1\xba\xbf\x39\x88\xbf\x2d\x63\x2d\x74\x55\x39\xa4\x57\x52\xfe\x56\x99\x6f\x9f\xd0\x81\xd2\xbc\x3c\xc7\x83\x4e\x2a\x01\x85\x20\x09\x68\xa3\x10\x10\x07\x53\x6b\x1a\x93\xab\x68\xe9\x52\xe2\x70\x4d\xf6\xa5\xcf\x4e\xed\x2f\x7e\x8f\x8c\x1e\x5f\x6d\xcd\xb1\x1e\xe7\xbc\x95\x8f\x69\xcd\x84\x0f\xad\xfa\x04\xe2\x60\xbf\x76\x9b\x9c\x95\xa4\x00\xcf\xc7\x40\x99\xcd\x4b\x30\x74\xc3\xc9\x87\x12\xc9\x79\xd2\x39\x82\x9b\xe8\xaa\x96\x95\x27\x66\x7b\xde\x12\xa2\x2c\x88\x83\xa9\xc5\x26\x50\x70\x43\x44\x7a\xd1\x06\x3d\x74\x85\xe2\x05\xb7\xd8\x0d\x8c\xac\xf6\xae\x9b\x5c\x6a\xd8\x65\xbc\xec\xaa\xe1\xbe\x1a\xd0\x26\x11\x20\x0e\xa1\xd6\xf9\x82\x24\xa0\x07\xa2\xb3\x6a\xd5\x65\x12\xd7\xd2\xd2\x12\xca\xec\x6e\xfc\x3a\x11\xb3\x2c\x42\x0d\xdb\xad\x37\xf8\x39\xab\x5e\x8d\xeb\xb3\xcf\x20\xd1\xd9\xd7\x81\xf8\xfb\x20\x0e\xa6\x16\x51\xf1\x8b\x59\x89\xa9\x6b\x92\x75\x21\xe6\x59\xf6\xb2\x44\x34\x42\xac\xd7\x06\x7f\xb0\xb3\x23\xab\x12\xf3\x67\xaf\x6f\x14\x42\xb7\x5a\x20\x0e\x76\xb0\xe4\xba\x33\xd4\xf6\xfd\xda\x29\x55\x2c\x2d\x07\x9f\x9a\x1c\x69\x96\x30\xe2\x64\xcf\x9d\x66\xe2\xf9\xe5\x9b\x4e\x1d\xdd\x2a\xbb\x82\x28\x0b\xe2\x60\x6a\xf9\xf2\x8b\x63\xed\xc9\x93\xc7\x51\x08\x7a\x3d\xf3\xa1\x1d\xd6\x3d\xe5\xc0\x8f\x93\xa3\x1c\x8c\x7f\x97\x44\x8a\x2c\xa6\x91\x08\x65\x94\x40\x1c\xec\xd7\x92\xe1\x70\xb1\x65\xd7\xdf\xc7\x1a\x7a\xc1\x98\x5b\x4e\xdc\xe8\x2d\x19\x5f\x12\x5b\x6a\x9e\x71\xf5\xf2\x03\x79\xb3\xe0\xeb\x73\x1f\x11\x65\x41\x1c\x4c\x2d\xbb\x82\x0d\x4e\x3a\x8f\x8c\x69\x91\xbd\xd2\x08\xf4\xe7\x27\x91\x29\x0a\x4b\xc8\x96\x82\xe5\xe3\x2f\x8e\xcd\xe3\x58\x2d\x43\x70\x10\x6a\x81\x38\x84\x5a\xe7\x0b\x92\x80\x1e\x7c\xcf\xaa\xe5\x9c\x65\x69\xcf\x48\x2d\x1e\x4c\x12\x88\x84\xa7\xa2\x91\xb6\x22\xa9\x44\xa9\x46\x16\x19\xc4\xec\x5f\xee\xbe\x40\x75\xe0\x11\x0d\x5d\x62\x00\x1c\x4c\xad\x6f\xbf\x6e\x89\xd9\x3e\xd2\x71\x60\x78\x62\x75\x94\x8d\x8a\x35\xec\xa0\x4b\xe7\x18\x52\x5a\x85\x59\xdf\x71\x53\xbc\x9b\x0d\x0d\x7a\x3e\x04\x71\xb0\x83\x15\xb4\x31\x8e\x4a\xb6\xf8\x72\x9d\xc1\x26\xf6\x6d\xc2\x93\x93\x6e\xf7\x9a\x7a\x8d\xa7\x6b\xde\x59\x5c\x8c\x1b\xf4\x6d\x1a\x41\x50\xf4\x09\xc4\xc1\xd4\x4a\xa0\x89\x30\x0b\x2f\x4d\x96\xd9\xd7\xfb\x13\x5d\xb1\x73\xf9\xe8\x59\x94\x28\xd6\x20\x63\x9b\x4b\x8a\xe9\xb5\xc3\x3b\x3d\x64\x61\x88\xb2\x20\x0e\xf6\x6b\x13\xc6\xd1\xdc\x7e\x8a\x87\xd1\x69\xfc\xf4\x0c\x55\x62\xbc\x51\x97\xb4\x42\x78\xeb\x89\x4f\x03\xfe\xa3\xdc\x17\x1f\xa8\x6e\x2e\x0f\x42\x65\x01\x1c\x4c\xad\x60\xad\xe0\xee\xdb\xb5\x8a\xa1\x68\x78\x09\xef\x02\xb0\xae\x09\x6a\xd3\x87\x5f\x13\x97\x79\x90\xb5\x89\x7f\x9a\x15\xa0\x42\xb7\x8f\x50\x0b\xc4\x21\xd4\x3a\x5f\x90\x04\x34\xc1\x71\x56\xad\xfd\xd4\x94\x87\xd5\xe1\xfc\xbc\x77\xc6\x2b\xaa\xba\xf3\xd5\xf9\xda\x1a\xfa\x1c\x6e\xfd\xd6\xad\x5e\xac\x98\x7c\x60\x4a\x41\x02\xed\x47\x06\xe2\xe0\x67\x2d\xad\xe7\x3f\x17\x56\x03\x3e\xe2\xc8\xdf\x21\x8c\xa3\x9a\xb5\x3c\xc0\x7e\xb3\xce\x4d\xc1\xa6\x30\x66\xe9\xab\xde\x19\x1a\x05\x85\x0a\x41\x1c\xec\x60\xad\xa8\xdf\xba\x4e\xfd\x97\x6b\xee\x76\xe8\xf5\xd1\x75\x3f\x6d\xe2\x13\x7c\x11\xbb\x35\xbc\x07\xf2\x8d\x63\x6f\xd2\x52\xf7\x70\x66\x10\x65\x41\x1c\x4c\xad\x4b\x6e\x6b\x07\x99\xa3\x45\xef\x03\xd9\xad\x7e\x3c\x90\x22\xaa\x35\x0f\x4c\x0e\x9c\x55\x58\x2f\x0b\x30\x5e\x9f\x9d\x70\x72\x1b\x45\x94\x05\x71\xb0\x5f\x2b\x9c\x13\x3e\xba\xea\xc2\xff\xfc\x72\xbe\x1b\xf9\x70\x12\xba\xeb\x5f\x87\xd9\x37\x98\xa6\x27\x83\xc6\xdb\x12\xc6\x69\x91\x04\x84\x88\xb2\x20\x0e\xa6\xd6\x93\x87\x2a\x49\x51\xaf\xa4\xe8\x27\x6c\x97\x1f\x33\xe1\xa3\xaf\xd7\xd2\x72\x3a\xb6\x71\xca\x72\x08\xc4\x84\xce\x57\xd7\xa2\xf2\x20\xd4\x02\x71\x08\xb5\xce\x19\x24\x01\xcd\x60\xff\x13\x24\xf1\x3e\x13\x24\x69\x78\x1f\x6a\xf8\x03\x5f\xe2\x6f\xa6\xf7\xcf\x4d\xde\x76\xcd\x42\x69\xe9\x9f\x0b\x8e\x49\x7b\x68\xa9\x9a\x23\x93\xe5\x54\x3c\x16\x17\x9f\xe8\x3b\x13\x24\x09\x78\xe1\xfc\xa7\x24\x4f\xfe\xcd\xf5\xf0\x09\x0c\xa6\x47\xa9\xd2\x6c\xe8\x89\xd5\x36\xd5\x7d\x0a\xb5\x5f\xee\x32\x14\xbd\xeb\x56\xbc\x78\x93\x67\x82\x24\xaf\x2d\x53\xe6\xfc\x3d\xd5\x45\x8c\x0a\x9e\x76\xb9\xbb\xfe\xe9\xf7\x34\x4f\xc7\x23\xe9\x3c\x7c\xe5\xb3\x62\x2a\x24\x45\xa4\x8f\xf6\xbf\x99\x5b\x04\xf5\xe5\xd9\x01\xae\x7e\x7a\xcc\xe8\x17\xcd\x7b\xd9\x9d\x74\x66\x50\xc1\x5a\x6e\x4a\xf5\x43\xe2\x8f\x1d\x09\xae\x9c\x01\x47\x53\x81\x44\x2a\xd9\x0a\x84\x84\x20\x0e\x36\xc0\xfd\xdf\xcf\xaf\x13\xd9\x84\x1e\x1d\xad\xf5\x05\xb2\x97\x6e\x6f\xb3\xa8\x52\xcc\x94\x36\xb8\x9e\xe2\x3b\x0d\x27\xbb\xec\x76\x43\x91\x2e\x10\x07\x1b\x32\xb2\xca\x37\x50\xde\xf0\x27\x1c\xc6\xbd\x7b\x55\x2b\x3e\xfd\x78\xac\x93\xc4\xa8\xe6\x79\x66\x24\x87\xb0\x9d\x1e\x3f\x8d\x3d\x09\xf4\xc1\x07\x88\x83\x0d\xf0\x26\x53\xe6\xa6\xb5\x26\x49\xd7\x95\x3f\xb8\x5d\x85\x68\xd9\x62\x4f\x4a\x16\x0b\x7f\x24\xd5\x6a\xbd\xba\xa2\x45\xdc\xf8\x89\x08\x5a\x72\x08\xc4\xc1\x7e\x6d\xad\x72\xcc\xe0\x40\xe3\x66\x38\x19\x4b\xba\x8b\x41\x8b\xe0\xe3\xf4\x78\x4e\x1e\x87\x3a\x03\xff\x85\x91\xea\xc9\x9b\x48\x13\xd0\x05\x14\xc4\xc1\x06\xb8\xa7\xc4\x9c\x4a\x9a\x4c\xe6\xd3\x6e\x2b\xcc\x81\xb1\x6b\x0f\x04\x5b\x3d\xa4\xaa\x6f\xce\x37\x8e\x63\xc4\x04\xec\xb0\x6c\x87\x58\x22\x06\x38\x88\x43\x0c\xf0\xf3\x05\x49\x40\x63\xe6\xac\x5a\xdd\x28\x9e\x7c\xed\x42\xc4\x1b\x89\x93\x45\x06\x1b\x6b\xa5\x36\x6d\xac\x12\xe6\xad\x39\xd5\xb3\x36\x63\x12\xaf\x56\x36\xc5\xa0\xc5\x9e\x41\x1c\xfc\x6d\x7f\x11\xc5\xec\xaf\xda\x4e\x9b\xf7\xed\xd8\xec\xe3\xa3\xb7\xf2\x2f\x07\x5d\x4e\x8f\xda\x29\xbd\x54\xfb\xd3\x76\xec\x92\x29\x1e\xb4\xb4\x1f\x88\x83\x1d\xac\x7d\x95\x16\x85\x4a\xbc\x70\x8d\xe0\xb5\x07\x3a\x32\x2a\x1f\xa8\xc9\x9a\x2f\xcb\x70\x87\xae\x7e\x52\x9e\xae\x30\xc6\xaa\xc8\x4d\x86\xae\x74\x00\x0e\xa6\x56\x5c\xc6\x8d\xba\xcf\xf2\x87\xec\x57\x5e\x8a\x70\x7c\x72\xc8\xf2\x4b\xb4\x1a\xa1\xad\xe2\xb5\x62\x36\xfb\x10\x70\x4d\x38\x56\x99\x07\x51\x16\xc4\xc1\x3f\x4f\xd9\x20\x2b\xdd\x4b\x8f\x1a\xf8\xfd\x22\xc1\xf6\xf1\x9e\x63\xb2\x11\xab\x70\x04\xcb\x82\x1e\xea\x96\x85\x25\x6a\xdd\x7a\xb7\x3a\x34\xbd\x06\xe0\x60\x6a\x5d\x99\x10\x77\x18\x42\xeb\x89\x3b\xf5\x2d\xaf\x5d\xa7\x3d\xf9\x19\xba\xdb\xb9\xaa\x38\xb2\x36\x97\x12\x1d\xde\xf8\x4a\xa1\x3d\x18\xa1\x16\x88\x43\xa8\x75\xbe\x20\x09\xe8\xdc\x78\x56\xad\x56\x45\x69\x7c\x9e\x3f\x2f\xc6\xe4\xa5\x71\x8e\x0f\xd0\x7d\x18\xb8\xc9\xc5\xb9\xfb\x75\xec\x2b\x75\x87\xb1\xbf\x62\xef\x3e\x82\xde\x88\x80\x38\x98\x5a\xa1\xaf\xab\x2c\x8e\x9b\xbd\x7f\xcc\xa6\x91\xb1\xac\xed\x0b\x4b\x73\x13\x7e\x42\xf9\x14\x23\x5a\xaf\x4e\x57\x1d\xc9\x29\xb6\x09\xed\xc7\x0d\xe2\x60\x07\x4b\x57\x1f\xc7\x71\x65\x87\x7d\xf0\x30\xaa\xed\x4a\xe3\xb4\x64\x3c\x83\xf0\x9a\x46\x93\x23\xeb\x1f\x2c\x49\xbc\x02\x9d\xa9\x05\xe8\x19\x0d\xc4\xc1\xd4\x32\xef\x62\x74\x47\xf6\xe4\xf2\xea\x15\x10\x16\x26\xc7\x5c\x4a\x4d\x0d\xf1\x56\x08\xaa\xf6\xf8\x9a\x3c\xc1\x4b\x26\x70\xb7\x1d\xba\x91\x06\x71\xb0\x5f\x8b\x75\xf5\x23\xbd\x68\xa1\xcb\xf7\xbb\xe6\x34\x63\x7a\xee\x83\x1f\x25\x9c\xd7\xec\xd7\x42\xba\xb9\x8f\xf1\xe6\x2e\x3f\xac\xbb\x06\x2d\xcd\x03\xe2\x60\x6a\xc9\x8a\x05\xf6\xaa\xc5\xea\xa2\x53\xe2\x33\x47\xe3\x7d\xcb\x6e\xb9\xfb\x05\xbf\xfd\x01\x5f\x56\x9e\x5d\x83\x6a\x05\xc5\x5c\x9a\x00\x42\x2d\x10\x87\x50\xeb\x7c\x41\x12\xd0\x3b\xfe\xb3\x6a\xad\x1b\x15\xd8\xb1\x38\x71\xcf\xa0\x0e\x08\x9f\x18\x6f\x50\x73\x8e\x69\x94\x3e\x7c\x93\xc1\xe7\x63\x26\x13\x8a\x19\x9a\xd6\x24\x0e\xbd\x10\x02\x70\x30\xb5\x52\xec\x3d\x8c\x98\x2a\x7c\x32\xde\xff\x4e\x89\x22\xeb\xee\xc0\x26\xbb\x84\xe2\x87\xc7\x1b\x7e\x64\xf6\xd5\x3b\x7b\xe3\x9d\x6c\x3f\xa2\x2c\x88\x83\x1d\x2c\x52\x8b\x74\x3b\x4b\x3b\x15\x22\x15\xab\x9b\x23\x7a\xa9\xae\x56\x86\xe6\x54\xa6\x86\x5a\x91\xb1\x76\x77\x9d\xe2\x89\x46\xab\xfd\x11\x65\x41\x1c\x4c\x2d\x12\xae\x36\xa7\xa5\xd9\xbf\x3f\xb5\xaf\xd2\x6e\x0a\xa5\xf2\x27\x8c\x24\xc4\x71\x79\xf5\xe7\xbd\x45\xd7\xa0\x92\xe2\x11\x41\x87\x32\x80\x20\x0e\xf6\x6b\x5d\x8b\x5a\x03\x5b\x13\x3e\xd8\x09\x3c\xa1\x4b\xc1\x0e\x6b\xc4\x58\x76\x7d\x77\x33\xef\xe4\x07\x47\x99\x1a\xfa\xa1\xd0\xd2\x5f\x68\x7c\x81\x38\x98\x5a\xe7\x5e\x91\x84\xae\x7f\xbd\xd9\xe0\x8a\x6d\x96\xd9\xed\x65\xef\x0e\xbc\x46\x62\xcf\x21\xb3\x2d\x46\x95\xf4\xa5\x1c\xd6\x96\x9d\xb9\xfe\xa2\xc8\x7f\x07\x49\xca\xab\xb2\x6c\x7a\x62\xda\xe7\x79\xb9\x92\x78\x18\x6c\xb8\x45\x1b\x0e\x75\xff\x5e\xdd\x5e\x75\x7b\x92\xaa\xd9\xfb\xed\x2f\xdd\xfd\x7f\xa1\x3a\xfd\x4a\xf1\x93\x84\xa7\x6a\x15\xeb\x8f\x3f\x70\xbf\xec\x1d\x9f\xc3\x7a\xae\xff\x6b\x97\x10\x7f\x93\x80\xe7\xf1\x94\x0a\x29\x1a\x2c\x48\x02\xaa\x7c\x36\x48\x52\x91\xc5\xa4\xe5\x5c\xed\x47\x33\x49\x99\x6d\xcb\xd8\xfd\xeb\x3b\x79\xb8\x26\x77\x90\xec\x70\x46\x81\xc0\x1a\x71\x7c\x45\x92\xfe\xbf\x83\x8b\xd3\x66\x6a\x0e\x05\x9a\x22\xe2\xac\x9c\x68\x95\x71\xba\xf7\x12\x12\xc9\x99\xc9\x9f\xbe\x24\xc7\xbb\xb6\xd9\x70\xe7\xfa\x8d\x5d\x28\x48\x02\xaa\xf9\x4f\x90\xa4\x1e\x1e\x24\xf1\x69\x40\xe6\x4c\xa7\xc6\x3b\x54\x7e\xe7\x36\x23\xdd\xed\x8d\x15\xf2\x63\xdb\xf1\x9a\x1e\x43\xc8\x32\xd2\x82\x65\x2b\x56\x52\xc1\x85\x83\x24\xf5\xf0\x20\x49\x4f\x2b\x52\xe7\xd0\xab\x77\x9b\x61\xdb\x9d\xfb\x2b\xad\xac\xd7\xac\x0f\xd6\xb3\x42\xad\xb9\x38\x50\x19\x4b\x5a\x36\x37\xec\x77\x2f\x7c\xb7\x5e\x7f\x26\x48\x42\x9b\xfb\xc1\x40\xf8\xc9\xcf\x9d\xdf\x24\x4f\x0a\xf3\xbc\xba\xde\x64\x45\x0c\x4e\x77\x8b\x0a\x5d\xd5\xd7\x48\x22\xb5\xfc\x14\xf8\xe0\xe2\x4d\x9e\x09\x92\x90\x7d\xd4\x9c\x28\x7b\xf4\xb0\x9b\xf6\xf2\xf5\x7b\x5a\xa7\x99\x92\x51\x81\x69\xec\x54\x86\x1d\x57\x5d\x02\xf2\xc8\xf1\xef\x6f\x60\x5f\xbc\xc9\xb3\x41\x92\x87\x51\xc8\xbe\x0f\xb7\x64\xbb\x8e\x58\x2c\x0e\x5a\xc8\x6d\x05\x03\x8a\xdb\xcd\x16\x24\xec\xae\xa2\xbb\x17\x2e\xf7\xbc\x24\xbb\x78\x93\x67\x82\x24\x4d\xd2\x6c\x35\xf5\x66\x42\xf5\xe3\x49\x57\xe7\x7c\xb8\x16\x1a\x1c\x1e\x74\xc9\x58\x5c\x09\x99\x2a\xd3\xc0\x12\x2f\x67\x2e\xbb\xf8\x22\x28\xf5\x67\x82\x24\x27\x9b\x24\x5e\xe1\xaf\xe5\x7f\xb2\x75\x97\xff\xb0\xe7\x94\x7d\x6b\x2d\x7e\x3f\x3b\x90\xf3\x0a\xeb\xfc\x21\xf3\x47\x2e\x41\x01\xe5\x8b\x37\x79\x26\x48\xe2\xe8\x76\x44\x3c\x4f\xd5\xcd\x73\xe7\x5e\xc2\x30\x5f\x9e\x78\x78\x7b\xf7\xa7\xe1\x57\x71\x27\xfe\x73\x94\xba\x1c\x6d\x7f\x2a\x5b\xfe\x37\x0f\x7b\xa0\x91\x78\xf6\xda\xf6\x2a\xf9\xcb\xed\xa3\xa4\xd6\x6a\x86\x3e\x7e\x1a\x7f\x43\xc2\xa7\x39\xb2\x37\xd9\x99\xda\xc9\x0e\xc7\x52\x76\x35\x04\xaf\x7e\x86\x3e\x5d\x01\x71\xb0\x6b\x1b\x17\xba\x5c\x86\x67\x6e\x54\x1b\xd9\x3c\xc1\x27\xac\x8c\x3d\x9c\x00\xe3\x8f\xc9\xa5\x2d\x04\xfb\x6f\x99\x22\x36\xe4\x33\x2b\xa0\xb0\x34\x88\x83\x5d\x2d\x88\xbf\x7c\x7d\xdb\x38\x9b\x93\xe2\xbe\x6d\x1a\xd8\x99\xf9\x74\xf4\xe5\x5d\x1b\xf9\x98\x5c\x6b\x42\xe6\xce\xe3\x4f\x22\x76\x84\xca\x88\xb2\x20\x0e\x76\x6d\x63\x76\x8d\xd5\x9e\x0d\xa7\x46\x75\xb9\xb7\x26\xd3\x22\x49\x92\x54\x75\x7c\xdc\x3b\xb3\xd0\x24\x21\xbb\xc8\x82\x76\x69\xd6\x18\xca\xa7\x80\x38\xd8\x45\xa8\x3f\x98\xf1\xa9\xc6\x03\xb2\x7e\x32\x0c\xa5\xe6\xa4\xce\x69\x9d\x30\x2c\xba\x4a\x81\xc0\x1c\xdd\x2d\xab\xc7\x46\xc4\xb3\xd1\x34\x88\xb2\x20\x0e\x56\x36\xe8\x29\xd6\x6a\xc9\xf4\x92\xdb\x0d\xe2\x2e\x7c\xd2\x0a\x81\xa4\xf6\xda\xc0\x34\x55\x1e\xe2\xb8\x2e\x41\xaf\x22\xae\x74\x67\x45\xc4\xeb\x7e\x10\xf7\xcf\xba\x11\xf5\xe7\x0a\x92\x80\xce\xb8\x67\xcd\x3a\x31\x69\x26\x19\x57\x8d\xe8\x88\x47\x8e\xdd\xed\xfd\xf0\x72\x7e\x19\xb5\xfe\x4d\x6a\x18\x61\x7a\x8a\x9d\xde\xa8\x88\x67\x3c\xb4\x94\x3f\x88\x83\x99\x65\x32\x30\x12\x19\xbd\xd0\x75\x22\xcf\x77\xdd\xf4\x4a\x30\xe9\x26\x5e\x91\xf2\xfa\x9c\x43\x70\x8e\x9e\x7c\x92\xc4\xdc\x89\x3d\xb4\xbb\x11\x88\x83\x99\x55\x26\x27\x9f\xf5\x35\x2c\x46\xbf\xf3\x7e\x06\xb5\xad\x62\x53\xdb\x89\x61\x94\xf5\x37\x3f\xf4\xee\xa8\x15\x2a\x69\xff\xbf\x1f\xa0\xf7\x71\x20\x0e\x66\x96\x69\x45\x77\x5a\xd7\x33\xed\xb6\xce\xd7\xab\x7a\x28\xe6\xc8\x64\x54\xfb\x97\xff\x44\x3a\xd1\x28\xb5\x51\xa5\x64\x29\x60\x18\xd1\x41\x9f\xa1\x03\x38\x98\x02\x24\x5c\x68\x3f\x0a\x7d\xf6\x13\x73\x85\xc7\x89\x8f\x85\xd8\x4d\x9a\xe9\x06\x3e\xbd\xb9\x31\x15\x12\x3e\xbb\xba\xef\x36\x32\x19\xfe\x7f\x37\x63\xff\x6f\x0e\x56\xd6\xc4\x9d\x21\x4a\x35\xf7\x7a\x71\x92\xa8\xcc\x70\x59\x9f\xc9\x4d\xba\xfa\xca\x71\x12\xdc\xd9\xde\x34\x2e\x6e\x6b\x92\x6b\x0e\x4a\x08\xb3\x40\x1c\xc2\xac\x73\x05\x49\x40\x17\xd6\xb3\x66\x5d\xe1\x7a\xfc\x7c\x61\x9a\x96\x46\x78\x75\xeb\x28\x62\xab\x8a\xff\x44\x59\x96\x55\x74\xcf\x77\x99\x3f\xcd\xbd\x33\x48\xd6\x06\x7a\xb9\x01\xe2\xe0\x41\x12\xdd\x5e\x17\x26\xec\x43\x9a\xd3\x66\x93\xd4\x54\xa5\x6f\x05\x6b\xcc\xc7\x7f\x13\x28\x6d\x0e\x4c\x33\xae\xa0\x84\x56\xfc\xdf\xc4\x36\x88\x83\x99\xa5\x99\x60\x18\x19\x52\xdf\xff\xf5\x6b\xc9\x16\xe6\xb5\xaf\xcb\x2c\x58\xf4\x5e\x52\x77\xcc\x4d\x9b\x86\x51\x87\x73\x8e\xf7\x9c\xa1\x60\x37\x88\x83\x99\x25\x9c\xa4\xaa\x6a\xd9\xb1\x58\xf3\x75\x9c\xc2\xe6\x7b\xba\x49\xbb\x12\x5d\x56\xc7\xc8\xd4\xf5\xbd\xaf\x2f\x48\xf4\x55\x2b\x7a\xa1\xe4\x13\x88\x83\x29\x80\x5f\xfe\xe4\x38\xa8\xeb\x34\x1c\x35\xb7\xdc\x6a\x3f\xe3\x23\xf6\xc4\x5d\x09\xc2\x56\x0e\x63\x8b\xec\xf9\x6f\xe1\x76\x13\x51\x50\x36\x01\xc4\xc1\xca\xe2\x2d\x2e\x5b\xd3\x31\x52\xad\xe3\xb5\x5d\x7b\x26\xcc\xae\x2f\x91\x3c\x99\x7b\x47\x90\xbe\xb0\xe3\x73\xf0\x17\x5c\xa5\xf9\xa6\x32\xc4\xa3\x1e\x88\x43\xec\x62\x7a\xbe\x20\x09\xe8\x06\xea\xac\x5a\x31\x99\x23\x04\x69\xd8\x19\xfb\x5e\x6f\xae\x6e\xd4\xd5\x4d\x6e\xfd\x26\x0d\xea\x9c\x7e\x12\x4b\x58\xd5\xb6\x4b\x52\x67\x5f\xb1\x80\xf8\xfb\x20\x0e\xa6\x56\xd7\x43\x29\xfa\x75\x1d\x35\x7b\x02\xca\x5a\x7b\x74\xae\xed\x59\x03\xb5\x56\xa1\xa3\x0a\x2c\xc7\x24\x3b\x45\x32\xed\x77\x59\xd0\x95\x00\xc4\xc1\xd4\xca\x94\xc8\x17\x5e\xc7\x13\xee\xf5\x0f\x7b\x4c\x9f\x30\xbc\x8d\x26\x4b\x57\xcb\xfa\x0b\x5b\x53\x77\x3b\xd8\xd1\xd1\xa9\x89\xb9\x0a\x51\x16\xc4\xc1\xd4\x72\xa5\x5b\x72\xa5\x3c\x5c\x7b\xa2\xd9\xf5\xbd\xfd\xc1\xb0\x7f\xce\x69\x67\x03\x25\x9d\x5e\xc1\x09\x46\x45\x40\xda\xbe\x5f\xec\x2f\xe8\x99\x0c\xc0\xc1\x1c\x58\x16\x7e\x83\x76\x83\xff\xee\x0b\xa5\xc7\xdf\x55\x56\xb9\xa2\x59\x3d\x5d\xed\x31\xc2\x97\x7e\xa0\xbd\x79\x9b\x5c\x9a\x19\x6c\xfb\x09\x5a\xed\x05\xc0\xc1\xca\xea\x17\xc6\x6b\xd4\x6b\xff\x0d\x74\xf5\xfa\x79\xd7\x38\x88\xb1\x9e\xe8\x36\xee\x1e\x59\xad\xec\x20\x1b\xf5\xc6\x8b\x5a\x02\x69\x5f\x84\x5a\x20\x0e\xa1\xd6\x39\x83\x24\x80\x1b\xe5\xb3\x6a\x8d\xd7\xc8\x23\x59\x59\xea\x9b\x7e\x91\x68\x8c\x49\x16\xf2\x57\xbc\xea\x1a\x5b\xbf\x78\x43\x5e\x0a\xe9\x77\x3b\x8b\x1b\x61\x2c\x74\x93\x01\xe2\x60\x6a\xb5\xdf\xd9\x6e\x14\xd1\x32\xb0\x2c\xb9\xad\x9c\x4b\xc9\xdd\xbe\x25\x7f\x2d\xc2\xec\xa7\xba\x92\x2f\x09\xaf\x98\xad\xdf\xc8\x04\xb4\x6b\x12\x88\x83\xa9\xa5\xaf\x4d\x27\xa5\xe4\x4f\x21\x47\xb9\x93\xd2\x38\xe1\x43\xd5\xe9\xb3\xea\x73\xcd\x3b\x20\xe3\x0b\x03\x39\x19\xf7\xf3\x9e\x20\x07\x68\x7d\x07\x00\x07\x53\xab\x7c\xac\x70\x3b\xc2\xb1\xd8\x79\xf9\x63\xe6\x5f\x99\xb7\x6d\x42\x1a\x12\xc2\x16\x18\x7f\x71\x56\xe7\x2b\x57\x88\xc2\xde\xf4\x41\x0b\x1c\x80\x38\x98\x03\xb5\xf3\x3e\xdf\x14\x2a\x4a\x39\x19\x3e\x63\x56\xee\xe2\xe8\x71\x8b\x5c\xaa\x72\x9d\xc2\xfb\x69\x44\xf2\xab\x65\xd2\xc3\x78\x18\x9a\xad\x07\x71\xb0\xb2\x33\xe2\xaa\xa9\x89\x2f\x5e\x3a\x7c\x8a\x1f\x31\xf1\x91\x88\x53\x53\xc3\x91\xc5\x9b\x0b\x0e\xe1\x7f\x29\x33\xb8\x8c\x46\x43\xe6\x81\x50\x0b\xc4\x21\xd4\x3a\x5f\x90\x04\xf4\x40\xf4\x1f\xab\x31\xdb\x98\xa6\x30\xaa\x73\xbb\x15\x57\x66\xcb\xf2\xb6\x30\x46\xa9\x4a\x7e\x66\xcb\x39\xe4\xb0\x59\x35\xd6\xfe\x7a\xe3\x25\x1e\x06\xe2\xef\x83\x38\x98\x5a\x0d\xbb\xf7\x7e\x70\x23\xb3\x11\xe3\x47\x69\x67\xfb\xfe\x9c\x10\x5b\xba\xe2\x14\xff\xba\x7f\xb2\x47\xbf\x47\xee\x90\x35\x46\x4b\x0d\x51\x16\xc4\xc1\xd5\x72\x71\x5a\x0c\x34\xe2\x76\x91\x60\x37\xbe\x81\x9e\xe9\xaf\x64\x6a\x3b\xdd\x5c\x68\x9e\x3a\xb5\xfa\x03\x05\x5f\xea\xe4\x16\x2e\xa4\x16\x80\x83\xa9\x15\x3d\x73\x92\xff\x74\x08\xef\xc9\x75\xcb\x30\x16\x8a\x4c\xb9\xcb\xbb\x51\xc1\xf8\x7c\x24\xdd\x66\x8b\xcf\xbe\x12\x5f\x56\x20\xc8\x47\x94\x05\x71\x30\x07\x42\x17\x2c\x14\x88\xd6\x72\x72\x16\xb8\x9f\x72\xdb\x37\x7a\xf5\x32\x70\x0f\x2e\x68\xf7\x34\x70\xa3\x18\xda\xa9\xe7\x92\x76\x43\xe7\x58\x10\x07\x2b\x2b\xa0\x6f\xa3\x54\xfd\xa2\xbf\xbd\xff\x45\x55\x89\x86\x54\xb9\x42\x49\x64\x53\xd4\x53\xfa\x3b\xe9\x9b\x71\x2c\x31\x3c\xdf\xc5\x02\x10\x6a\x81\x38\x84\x5a\xe7\x0b\x92\x80\x1e\x7c\xcf\xaa\xf5\x56\x9a\xd2\x02\xf7\xab\x83\x65\x46\xaf\xab\x94\xc3\x25\xd2\xbf\xf2\x77\xfa\x76\xc8\xf5\xb5\x99\x28\x74\x50\x09\xcc\x7e\x74\x40\x37\xb0\x20\x0e\xa6\x16\xfa\x75\x5c\xf9\x45\xfc\x0f\x2d\xc8\x8a\x54\x73\xdc\xeb\x29\xc8\xbe\x8b\x8d\x7a\xb1\x9f\x0b\xc6\xaa\xef\xea\x8f\x5e\xeb\xba\x9b\x83\x28\x0b\xe2\x60\x6a\xe5\x97\x77\x67\x67\x49\x6e\x44\x0d\x39\x6e\xce\x62\x08\xff\xd2\xb4\x78\x54\x72\xc2\xbc\x3b\xf6\xa2\x32\xdf\x86\x6d\x8e\x08\x2f\x18\x5a\xe3\x03\xc0\xc1\xd4\x1a\xa9\x1c\x49\xae\x64\x41\xbf\x5d\x75\xeb\x0f\xab\x4e\xc5\xf7\xe8\x75\x69\x5a\x8f\xa7\x97\x6c\xe9\x98\x95\xf4\x9a\x7a\x68\xc2\xa1\x55\x9f\x40\x1c\xcc\x81\xb1\xdd\x4b\x7a\xfd\x41\x9d\xb8\xea\xed\x3f\xde\x9b\xfc\x3a\xc6\xe0\xcd\x0a\x62\x3a\x64\x18\x38\x8d\x59\x76\x74\xb5\xcd\x16\xdc\x40\x94\x05\x71\xb0\xb2\x1a\xb5\xa4\xb3\xa1\x5f\xbd\x24\x5c\xd9\x7e\xcc\x39\x8b\xee\x56\x13\x98\x34\x62\x0c\x75\xb7\x8c\xcc\x1f\x8c\x3b\x4d\x59\xfd\xb0\x47\xa8\x05\xe2\x10\x6a\x9d\x2f\x48\x02\x9a\xe0\x38\xab\x56\xd2\xb3\xa7\xf9\xb1\xca\x59\x6d\x47\x29\x85\x75\x82\xb4\x18\x3f\xe7\x4a\xb5\xa9\x24\x6f\x5c\x2a\x48\x8e\xd4\x2e\x76\x3d\x48\x87\xbe\xd1\x05\x71\x30\xb5\xd4\x1f\x1b\x35\x5d\xf2\xd2\x74\x3d\x4e\x4b\x1e\x2d\x1c\x53\x7f\x34\xc6\xa7\xf0\xd9\xaa\xee\xbd\xb2\x54\xfa\xa1\x94\x5d\x55\x2d\xb4\x64\x25\x88\x83\xa9\x15\xec\x6a\xa9\x47\x32\x47\x85\x62\x7a\x60\x18\x42\x55\x7b\xf5\x09\x3a\xc5\xb7\x45\x1f\xee\x5e\xc5\xbe\x85\xf4\xf9\xe7\x4d\xd1\x97\x11\x65\x41\x1c\x4c\x2d\xdd\x99\x79\x97\x09\x22\xbe\xe2\xd4\xda\xee\xfc\xce\x17\x59\xe6\xfa\x12\xa8\x98\xb2\xf5\x22\xd1\xa1\xf2\x13\xc5\xe2\x9c\x4b\x0a\xd0\x8b\x20\x00\x07\x73\x00\x7d\x47\x4a\x22\x4d\xc0\xc4\xcb\x17\x83\x5b\xd9\xb1\xda\x06\x79\x61\x2c\xc4\x8f\x35\x50\x80\x79\xc5\xfd\x33\xe3\x28\xdb\x3b\xa8\x2c\x88\x83\x95\xad\xa8\xa3\xd3\x75\xc3\xa5\xf8\xb0\x9e\xf1\x72\x7f\x7f\x93\xcb\x33\xa0\x36\xaf\xd5\x5f\x59\xbd\x4a\xe0\x78\x5d\x3f\x64\xbc\x46\x1e\xa1\x16\x88\x43\xa8\x75\xce\x20\x09\x68\x06\xfb\x9f\x20\x49\xfd\x99\x20\x49\xab\x9f\xeb\xa1\x6c\xfc\x8f\x51\xcf\x4f\x7f\x5a\x1a\x5e\x6c\x48\x85\x36\x90\xba\x16\x49\x67\x4e\xe9\x94\xf4\xf3\x94\x1b\x58\xe8\x5d\x7c\xa2\xef\x4c\x90\x84\x83\x82\xa0\x46\x88\x31\x94\x95\xe0\xed\xb8\xd8\x16\xeb\xb4\xa2\xb8\xa6\xfc\xe2\xdb\xb2\xd6\x87\x8d\xc7\x26\xd3\x1e\xc2\x32\xc1\x17\x6f\xf2\x4c\x90\x84\xd2\x54\x97\x4e\xc2\xe8\xf1\xe2\xac\x28\xe3\xf1\xcc\xcd\xdb\x5f\x27\x59\xd7\x4c\xdb\x7f\x48\x29\xa2\x73\x6e\x89\xba\x93\xdb\x66\xfd\x6f\xe6\x16\x41\x7d\x79\x76\x80\x7b\x8c\xec\x27\xbb\x24\x92\x39\xab\x12\xf3\xde\xab\x22\x92\x6d\x92\xaa\xe8\x62\xf0\x62\xc9\xc6\x08\xd9\x21\x91\xe0\xe6\xa1\x81\x6e\x4b\x40\x1c\x6c\x80\x53\x50\xbc\x08\x6f\xf9\x91\xf4\xdc\xb2\xff\xb3\x36\xea\x69\x40\xe8\x2c\x07\x61\x7d\x12\xae\xb0\xaf\xa1\x4b\x18\xaa\xab\xeb\x3a\xf4\x88\x0a\xe2\x60\x03\xfc\xfd\xf0\x49\x06\x76\x02\xd3\xee\x08\x53\x12\x01\xb1\x89\x37\xde\xdc\xf8\xe9\xb8\x34\x96\xa5\x7c\x37\x79\xc6\x8b\xa6\x99\x61\x68\xa3\x10\x10\x07\xff\x48\x8d\x6c\x46\x18\xcd\x5c\xea\x76\x0b\xb2\xa3\x54\xaf\x71\x5a\x63\x35\xd3\xe2\x1e\x07\xaa\x07\x36\x99\x58\x78\x01\x56\xf6\x73\x68\x89\x4f\x10\x07\x1b\x89\xb4\x4a\x4e\x85\xea\xad\x1f\x23\x7c\x5f\x56\xfa\xf5\x48\x7f\x73\x24\xe7\x73\x7e\xa2\x41\x15\xc4\x19\x20\xe5\x36\xe2\x4c\x97\x05\x6d\xef\x0b\xe2\x60\x65\xd9\x67\xff\xde\x77\x43\xbb\x97\xc9\x78\xc3\x5b\x38\x6b\xd6\x86\x77\xd4\xd0\x2d\xe6\xd5\x0b\x9e\x54\x8d\xd4\x9a\xbc\xc8\x1d\xa7\x28\xc4\x00\x07\x71\x88\x01\x7e\xbe\x20\x09\x68\xcc\x9c\x55\x2b\xb9\x00\x5d\x44\xe1\x61\x26\x53\x76\xb4\xfc\x4e\xfe\xdb\xa7\xf6\xdf\x17\xf3\x34\x42\x22\xb5\x93\x94\x22\xb9\x9f\x04\xea\x35\x40\x9b\x91\x83\x38\x98\x5a\xd3\x64\xa8\x46\xaa\xdf\x56\x4a\x5c\x19\x90\xbb\x92\xb5\xeb\xc5\xc9\xd0\xc7\x38\xd9\x6e\x38\x62\x06\xd2\x55\xe0\x13\x09\x71\x40\xb1\x3e\x10\x07\x53\x4b\x20\xd2\xc6\xb9\x46\x75\x52\xb8\xda\xd6\xf8\x60\xa2\xd7\xcb\x2a\x45\xee\x71\x94\xe8\x69\xde\xb8\xec\x65\x92\x47\x2c\x0e\xa6\xd0\xde\x13\x20\x0e\xa6\x56\x6c\xfa\x0d\x9f\x82\x0a\xed\x51\xbe\xd8\x94\x81\x66\x8c\xb0\xfc\xdb\x69\xae\x45\x41\xb3\x0c\x87\x72\x9c\xf2\x46\xf3\xa1\x1c\xd0\xfe\x80\x20\x0e\xe6\x40\xa0\x38\x6a\xb8\x82\xc3\x28\x65\xbc\xb3\x10\x6b\xc0\x2c\xcb\x89\x87\x8b\xb3\x98\x82\xad\xa0\x59\xea\xd2\x48\x24\x7b\xfe\xc8\x25\x44\x59\x10\x07\x2b\xfb\xc1\xee\x64\x09\x99\x5b\x80\x7a\xd8\xa0\x9c\x32\x41\xd5\x8b\x75\x6d\x6a\x47\x66\xe0\xdd\x66\x3d\x1a\x65\xdf\x11\x55\xfd\x91\x20\x42\x2d\x10\x87\x50\xeb\x7c\x41\x12\xd0\xb9\xf1\xac\x5a\x0b\x87\x28\xd7\x83\x74\x5e\x6a\x53\x18\x2a\x46\x8e\x0d\xdb\x62\x62\x04\x9a\xaa\xe4\xbf\xd6\x7b\x6b\x96\x17\xca\x16\xc2\xa0\x01\x6d\x6f\x04\xe2\x60\x6a\xf1\x44\x90\x22\x75\x90\xa2\x34\x5c\x4a\x3a\xad\x4e\x0f\x44\x1a\x74\xf9\xec\x3a\xd4\x59\x27\xf0\x2d\x3e\x5d\x74\x9c\xf7\xa4\x0c\x19\x51\x16\xc4\xc1\xd4\x4a\x94\x39\x49\x36\xe2\x7d\xb7\x1d\xae\xe6\xd9\x7e\xcb\x8b\xd7\x1e\x3b\xe0\xfb\x1b\xce\x12\xcb\x66\x94\x9f\xfc\x27\xa1\x6f\x93\xd3\x10\x65\x41\x1c\x4c\xad\xa4\xef\x4f\x52\xea\xb3\xf7\xa2\x95\x84\x0d\x9e\x7c\xf0\x76\xf1\x41\xc6\x14\x44\xbe\x93\x7f\xdf\x55\x39\xec\x80\x79\xff\xd8\x17\x7a\xd1\x02\xe2\x60\x0e\xa4\x9c\x9a\x25\x16\x8f\x3a\x7d\xfb\xf2\xaa\x84\x86\x5c\x49\xbe\xf4\xbe\xfc\xb0\xe4\xfb\xe8\xcc\xdb\x6a\xf2\xfa\x2c\x11\x84\x6a\xd0\x77\x24\x20\x0e\x56\xf6\xce\x12\x9b\x44\x23\xdd\x96\x9d\x70\xd2\x93\x87\x94\x6c\x45\x35\x5a\x7f\xf8\xba\x65\x42\x65\x51\x29\x18\x30\x95\x06\x36\x3a\x4c\x10\x6a\x81\x38\x84\x5a\xe7\x0b\x92\x80\xde\xf1\x9f\x55\x8b\xb2\x6e\x22\x27\x64\xd1\xc9\x85\xde\xed\x95\x23\xf9\x44\x7a\xaa\x47\x86\xd6\x62\xdf\x48\x91\x5d\x5b\x96\x4a\x9f\xf0\xe2\x38\xb4\x6f\x38\x88\x83\xa9\x55\xa1\xb7\xa4\xca\xe5\xed\xfa\xa5\x37\x8c\xc7\x80\xb5\x58\x31\x44\x4f\x6f\x62\xee\x31\xce\x1b\xcc\xc8\x3b\x49\x07\x1e\xbe\x2f\x20\x07\x40\x1c\x4c\xad\xd4\xc0\xa3\x6d\x09\xd2\x87\xd7\x29\xd2\xdc\xfc\x3f\x26\x0f\x6c\x48\x1b\x26\x70\x2f\x97\xda\xf8\xc6\x7c\x2a\x4d\x51\xf9\x5e\x01\x4d\x01\x81\x38\x98\x5a\x96\x81\x42\x4f\x76\xc8\x2e\x31\xee\x62\x1c\x4b\x4f\xbf\xd4\xa9\xe0\x29\x6f\x0b\x98\xb9\xad\xfc\xa2\x49\x49\x8a\x6d\x24\xd5\x0d\x9a\x62\x05\x71\x30\x07\xe6\x2b\x7d\xbb\x2d\x19\x16\xb2\x59\x45\xf1\x30\x91\xa3\xbf\xb1\xbc\xd7\xeb\xb6\xf9\x39\x6b\x25\x85\xbc\xd4\xc1\x74\xb4\x2b\x04\x5d\x10\x41\x1c\xac\xec\xb9\x57\x24\x49\xd7\x8d\x22\x9c\xad\xb5\x88\xb1\xae\xbe\x4c\x55\x90\x75\x1c\x93\xdf\x85\x5c\x67\x5d\xf6\xb5\xb8\x83\x2c\xd0\x28\xd7\x06\x2b\xed\xdf\x41\x92\x11\xbe\x94\x36\xcf\xc9\xac\xd0\xd8\xc4\x06\x09\x59\xb1\x1b\x53\xe6\xbb\xc4\x77\xc6\x69\xbf\x64\x7f\x2e\x5e\xfc\x81\xdc\x87\xb2\xf2\x2f\xd4\xfe\xa6\x08\x8f\x9f\x7d\x02\x06\x13\x1d\x72\x32\xda\x54\x12\x41\xc2\x8b\xb1\x21\xed\xc5\x11\xb1\x9b\x09\xfd\xae\x9d\x95\x11\x4c\xb0\x20\x09\xa8\xf2\xd9\x20\x89\x20\xd2\xaf\x8c\x9b\x3f\x28\x59\xde\xba\x9d\x28\xc7\xad\x57\x2f\xd3\x7f\x73\xd7\x97\x19\x50\x0c\xdc\x7b\xca\xca\x94\x95\xf4\xe1\xf7\xbf\xd0\x8e\xc1\x69\xe4\x81\x4b\x68\x39\x9c\xdb\xfe\x5f\x8d\x75\x95\xc9\x59\xbd\xe2\x24\x90\xf8\xc3\x6f\x87\x4c\x79\x5e\x31\x77\x23\x29\x85\x82\x24\xa0\x9a\xff\x04\x49\x90\x6e\xc3\x6e\x64\x3f\xfc\x98\xc1\xd7\x5e\xfb\x20\x11\x78\x18\xce\xc4\xfc\x1c\xe9\x66\xfa\x82\x9e\x64\xb2\x3b\x71\x03\x2b\xcf\xf5\x5d\xb9\xa8\xad\xe1\x0b\x07\x49\x90\xee\xc3\x77\x60\xb9\xe6\x29\x8f\xf3\x52\xe6\xdb\x97\x46\x3b\x56\x66\xc9\x49\x01\x5c\xb7\x94\xcd\xe7\x93\x52\x33\xf4\xfd\xb7\xac\x9a\xa3\x36\xaa\x2e\x7c\xb7\x8e\x24\x0a\xbf\x5b\x4f\x6c\xd7\xa1\x32\x4d\x9f\x20\x54\x31\x3a\x94\xc7\xa8\x34\x7a\x35\xbf\xfc\x7d\xc9\x64\x5e\x45\xae\xc4\x70\x0e\x1d\x39\x74\xff\xc7\xc5\x9b\xd4\x86\x37\x49\xc4\x7a\xac\xab\x9e\x78\xe5\x08\xd7\x72\x1b\x7d\xca\xba\x48\x20\x24\x27\x9c\x68\x2c\x49\x3d\x94\xf9\x9b\x21\xdf\xa3\x4a\xbb\xa9\x8b\x37\xf9\x14\xde\xa4\x0f\x5b\x65\x7a\xa9\xe8\x83\x11\x13\x63\x11\x6a\x66\x62\x23\xd7\xea\xd9\xcb\x1e\xd2\xa5\xbb\x7c\x24\xc9\x32\x5e\x7e\x7a\x2a\x43\x17\x6f\xd2\x0b\xde\xe4\x8d\x26\xaf\x87\x7b\x6a\x28\x73\x43\xf8\x8d\x7a\xb4\x86\x65\x6d\x34\xd3\x71\x6d\x91\xe6\x31\xe2\x7a\xac\xe4\x26\x93\xec\x8f\xbf\x5f\xbc\xc9\x04\x78\x93\xc5\x48\x21\x74\x0e\x01\xde\xf2\x66\xc1\xd4\xbc\x31\x98\x0a\xb9\x37\xea\x77\xcc\x93\x9d\x32\xc4\x3a\x51\x6d\x1b\xb0\x4e\x16\x5f\x5c\xbc\xc9\x32\x78\x93\x3c\x7d\x86\xfe\x05\xab\x6a\xa4\x83\xb3\xa9\x4c\x81\xd6\xc6\x7f\x79\x98\x95\x25\x68\x32\xdf\x72\xe7\x65\x50\xde\xa0\xed\x8a\x3e\xfe\xdf\x3c\xec\x81\x46\xe2\x7f\xec\x81\xdd\x32\xf5\xec\x4b\x29\x47\x2c\xf1\xaa\x14\xea\xd3\x86\x59\xee\x97\x31\xcc\x34\x43\xd2\xb8\x13\xb1\x86\xd4\x8b\xc2\xf5\x91\xd0\xfd\x0d\x88\x83\x5d\xdb\xf6\x42\x3d\x39\x3b\xca\x56\x3c\x43\xbf\xb7\xb6\x62\x9d\xba\x8b\xe8\x67\x1e\x4f\xcf\x84\x89\x46\x5a\x97\x10\x1c\x52\x33\xbc\x8e\x43\x94\x05\x71\xb0\x6b\x5b\xa9\x41\xe7\x35\xde\x77\x94\xdf\x4f\x1e\x96\x6a\xeb\x09\x2c\x48\x4f\xff\xc8\xe1\x2f\xf7\x67\xf5\x50\xb9\xf2\xc4\xbd\xca\x3e\x38\x1d\x51\x16\xc4\xc1\xae\x6d\x77\x1d\xb6\x73\x0d\xd3\x89\x06\xef\xbd\x93\xfe\xea\x42\xbf\x8c\x8e\xaa\x82\x52\x2d\x8f\xfa\xb5\xbb\xe9\xe3\xcf\xb2\x3f\x19\x1e\x5e\x88\xb2\x20\x0e\xd6\xb7\x5c\x52\xf2\xe9\xce\x24\x7a\x09\x6f\x74\xc4\xc5\x52\x7f\x0d\x6c\xfa\xa3\x6c\x4a\xb2\xbc\x3f\xf4\x16\xf5\xf7\x88\x72\x9d\x29\xa8\x84\xd2\x34\x00\x0e\xfe\xe9\x04\x86\xa1\x77\x24\x4e\x2a\xfd\xad\x91\xcd\x51\x0d\xa2\x60\xd5\x27\xe8\x95\x12\x22\x0f\x05\x86\x43\x77\x86\xbf\x0d\x6b\x45\x25\x21\x5e\xf7\x83\xb8\x7f\xd6\x8d\xf8\xff\x4f\xe7\xe7\x58\xca\x1f\x70\xc6\x3d\x6b\x56\xca\xc4\x62\x84\xcf\x51\x30\xf6\x3b\xf6\xe6\xe0\x34\x02\x77\xc1\xcc\xb6\xd6\x96\xfc\x97\x33\xd6\x05\xfe\x59\xab\xd4\x1b\xcb\x50\xf2\x14\xc4\xc1\xcc\xba\xc2\xc1\x7a\xd0\xc6\xe8\x5f\xf7\x4e\xa9\xa9\x1b\x87\x32\x59\x66\xe3\x7e\xdc\x2b\xaa\x97\x46\x03\xdf\x5f\xb6\x4e\x49\xf6\xf2\xf8\x41\x29\x02\x00\x07\xeb\x54\x1f\x43\xde\xe3\xdc\x17\x2d\x25\xaf\x6f\xb1\x7d\xec\x1c\x7b\xc0\x1e\xf4\x28\xab\x8f\xa3\xe6\xe6\x53\x1c\x61\x1b\x36\xf1\x3b\x2b\xd0\x5a\xdb\x20\x0e\x66\x56\x0b\x29\x43\x8f\xdd\x63\xbf\xe7\x89\xdd\x25\xd3\xb9\x2e\xd7\xa4\x1e\x8d\x31\xbd\x8f\xc1\x09\xfb\x44\x19\xf7\x39\x7a\x77\x91\x0c\xfa\x7a\x06\xc4\xc1\xfa\xf6\x0b\xca\xa8\x96\x95\x7a\xa5\x83\xef\xa4\xd8\xcd\xaa\x94\x77\x97\x7a\xbf\x53\xfc\xd8\xc0\xe9\xe7\xf0\x7b\x5d\xf0\xda\xb2\xb6\x75\x1a\x51\x16\xc4\xc1\xf7\x72\xcd\x97\xde\xab\xbd\xda\x43\x43\xd3\xb5\xb0\x88\x45\x17\x82\x63\x81\x77\x3b\x59\x88\x5c\xe5\xdb\xf4\x60\x93\xa6\x66\xe3\x27\x52\x84\x59\x20\x0e\x61\xd6\xfd\xf3\x98\x05\xba\xb0\x9e\x35\xab\x7d\x23\x24\x8b\x7d\xbc\x7e\xac\x84\x22\x85\x6d\x90\x34\x52\x75\xcb\xad\xfb\x0a\x52\xcf\x4b\xaf\xbe\x1a\xca\x80\xc6\xe4\x5a\x5f\xe8\xdd\x29\x80\x83\x99\x25\x2e\x42\x60\x90\xbc\x3b\x50\x93\x1c\x3b\x57\x6a\x9c\x25\xb6\xa7\xbe\xa6\xb4\x3a\x52\x69\x6f\x98\x6c\xd5\x37\x49\xf0\x34\xf6\x2e\xa2\x2c\x88\x83\x75\xea\xec\x92\x7e\xf9\x11\xe9\x07\x7d\x2e\xfe\xf7\x07\xb3\xf5\x12\x04\x9a\xb9\x7e\x12\xb7\xb6\xef\x06\xfb\xf4\x12\x79\x2c\x5a\xcf\x42\x8b\xd2\x80\x38\x98\x59\x61\xd5\xba\x2a\x76\x84\xe5\xa9\x2e\x84\xfc\x9f\xd2\x7a\x3e\x1c\x9a\xb6\x95\xcd\xae\x27\xf7\x95\xc9\xe5\xde\xfb\x68\x2b\x32\x06\x75\x02\x88\x83\xf5\x6d\xd7\xcc\x8d\xd0\x0d\x53\x9f\x0d\x65\x86\x4b\xcf\xe2\xcd\xe6\x6e\xf5\x58\xaa\xab\xbe\x22\x76\x89\xab\x67\xf8\xe8\x4d\xdd\x83\x49\x00\x45\x1e\x00\x1c\xac\x13\x8c\x0a\x45\x7e\x7f\xdb\xd2\xbe\x5e\x2f\x41\xdf\x60\x19\x3c\x9c\xf5\xed\xf5\x8a\x67\x71\xd8\x4f\xb7\xca\xa4\xb6\xa8\x67\xe9\x99\xaf\x11\x8f\x7a\x20\x0e\xb1\x8b\xa9\xe8\xb9\x1e\xf5\x40\x37\x50\xff\xb1\x8c\x92\x4f\xf1\x62\xaa\x32\xdd\xec\x43\xcd\x0e\x8c\x83\x13\x74\x81\x2a\xd3\xf1\x9a\x87\xf2\x23\x2e\xf6\xd3\x79\x48\xa3\xbe\x28\x07\x88\xbf\x0f\xe2\x60\x6a\x11\x53\x6c\x28\xf9\x5d\x17\xc4\xf8\xb0\x79\xa5\xc5\xe9\x9d\xf9\xaf\x3c\xf6\xe8\x7e\x47\x21\x1c\x9e\xda\x4c\x06\x9d\x2e\xe3\x03\x0a\x28\x00\x09\xe0\x60\xbd\x7a\x47\xbf\x3c\x36\xf3\x74\x37\xf7\x30\x9a\xe4\xde\xee\x68\xf6\xb5\xa2\xe1\xd5\x15\xb5\x2e\xb2\xea\xc2\xa9\x57\x7a\xa6\x5c\xca\xd0\x83\x29\x88\x83\xa9\x65\x22\x58\x50\x3b\xbb\xf0\xc8\x29\xbb\xd0\xe4\xdd\x89\x52\x22\x2e\xc5\x13\x19\x19\x9f\xb4\xd5\xbd\x8e\x46\x41\xdc\xc0\x88\xe2\x1d\x28\xab\x07\xe0\x60\x7d\x2b\x19\xe5\xc5\x59\x83\x6e\x33\x37\xe1\x3b\x15\xf0\xb2\x3e\xdb\x97\x43\xf6\x1b\xde\x3a\x67\xb6\x4b\x67\x36\x67\x18\xfd\x73\x7b\x74\x44\x59\x10\x07\xbf\x27\x28\xfb\x7e\x67\x4e\xd4\x94\xbd\x5d\x95\x9c\x9c\x7c\xe1\x6f\xb2\xd1\x9f\x19\x0c\x03\xf3\xf7\x5c\x24\x1b\xab\x7d\xc5\x55\x42\xfc\x08\xb5\x40\x1c\x42\x2d\xed\x73\xa9\x05\xba\x51\x3e\xab\x96\xe6\xdd\x37\x09\x9e\xd6\xf6\xb6\x2e\x4c\xee\xa9\x99\x77\x4a\x3a\xd8\x42\x33\x9c\x9e\x25\x30\xc6\x7f\xde\x79\x48\x1f\x90\x13\xc1\x09\x05\xca\x00\x1c\x4c\xad\xc4\x96\x4b\xe3\x7c\x36\x04\x9d\xd7\x84\xd7\x2d\x8a\x34\xb2\x5e\x24\x0a\x37\x3c\x6f\x0f\xda\x73\x3b\x29\xc2\x2c\x2a\x79\xe3\xc6\x0d\xcd\x24\x01\x38\xf8\x04\x55\xe1\x47\x25\xff\x79\xdc\x56\xc5\xfb\x3a\x63\x5d\x09\x3c\x64\x5f\x56\x97\x19\x09\xf5\x59\x43\x47\xa5\x9a\x8d\x62\x8f\x6c\xa1\x59\x04\x10\x07\x53\x6b\x63\xd1\xde\x91\x36\xa0\xd1\xda\xa7\x3e\x1e\xc7\xeb\x48\x8b\x89\xcb\x3a\x32\x49\x9d\x30\x3b\x34\xb8\x3f\xd6\xd8\x7c\x2b\x0d\x9a\x49\x02\x71\xb0\xbe\xad\xb8\x43\x71\xe7\xcb\xf3\x78\x02\x1a\xaf\x4f\x1e\xdd\x66\xd4\x4e\x2a\x3f\x2a\x6c\x9b\x55\xdf\x68\xa5\x31\x7f\x34\xb5\x48\xf2\xb9\x05\x4d\xa5\x00\x38\x58\x27\x88\x45\x30\xf3\x3a\xfd\xe4\xdc\x94\x5f\x5a\x2b\x6a\x16\x1d\x9b\x6e\xd7\xf7\xfd\xd3\xf3\xb0\x6e\x30\x4b\x4c\x2e\x78\x85\x75\x83\x18\xa1\x16\x88\x43\xa8\xf5\xf4\x5c\x6a\x81\x1e\x88\xce\xaa\xf5\x5a\x6e\xed\x6f\xf5\xdd\xb8\x7d\x65\xbe\x2a\xe6\xd1\xfc\xc4\xbe\x50\x4c\x59\x65\x1f\x02\xee\x60\x2b\x1a\x06\x07\x4d\x8d\x72\x68\xc5\x60\x10\x07\x53\x2b\x93\x2a\xe2\x68\xdd\x4d\xbe\x79\x75\xec\x5a\xc4\x6b\xf5\xc9\x07\x9e\x99\x44\x6c\xcd\x64\x56\xd8\x83\xeb\xec\xb5\x3c\x55\x2b\xd0\x3a\x2f\x20\x0e\xd6\xab\x32\x43\x07\x39\xf2\x8f\x6c\x23\x0a\x8f\xfe\x30\x09\xaa\xe0\xa4\xcf\x18\xf9\x90\x04\xb7\x4b\x9e\x50\x93\x64\xac\x48\x4a\x53\x42\xb3\xf5\x20\x0e\xbe\xff\x88\xa8\x27\xfb\x6d\xa3\x41\x07\xb7\x82\x7b\x2e\xe3\xeb\xda\x2b\x14\x5e\xe8\xe3\x25\xee\x32\xc4\x22\x94\x19\xda\x01\x1c\x0c\x8c\x88\xb2\x20\x0e\xd6\xb7\xf2\x54\x7d\x5d\x73\x09\x34\x3d\xf6\x95\xf6\x0f\x59\xbf\xef\xf1\x62\xde\x39\x6e\xe7\x4c\x30\x92\xce\xb9\x14\x76\x9a\xba\xa1\x06\x0d\x5b\x10\x07\xeb\x04\xe4\x59\xfc\x1c\x5f\x3d\x15\x22\xca\xec\x18\xd5\xa5\xe2\x8d\x47\xc5\xad\xef\xdb\xa7\x29\x03\x2f\x8d\x15\x9c\x12\x7d\xca\x9b\xdc\x40\xa8\x05\xe2\x10\x6a\x79\x9d\x4b\x2d\xd0\x83\xef\x59\xb5\x9e\x45\xa4\x71\x6e\xf1\x95\x96\xda\xac\x10\x71\x5d\x13\xc7\x09\xb8\xbd\x40\xaa\x59\x75\xec\x6c\x67\x6a\x69\x9a\x5e\x60\xe4\x8b\x85\xf8\xfb\x20\x0e\xa6\x96\x9b\xe1\x8d\xaa\xb2\x06\xea\x96\x25\xd3\x0d\xb1\x0c\x49\x99\xb0\x72\x4b\x51\xea\xc5\xe6\xe8\x32\x5d\x2a\xcb\xfe\xd8\x6f\xe2\xd0\xa6\x6c\x20\x0e\x3e\x60\x5f\x0b\x48\x60\x52\x58\x1a\x0d\xfb\x2c\x6e\x30\x3d\x70\xc0\x32\x16\x79\x66\x11\xff\x65\x3e\x5a\xf9\x29\xbb\x94\xdd\x4e\x06\x31\xa2\x2c\x88\x83\xa9\x45\xa6\xbc\x7b\x75\x14\x53\x61\x21\xc3\x37\xb8\x4b\x87\x4c\xf9\x11\x31\xfd\x8e\xfc\x46\xd0\xe5\xf5\xa5\x5e\xdf\x99\x5e\xcf\xcd\x35\x68\x55\x1a\x00\x07\xeb\xdb\x1b\xbd\x5e\x4a\x62\x4f\x59\x47\xee\x3f\xb0\xde\x98\x15\xf1\xe9\xe1\xe6\xfb\xf3\x5c\xa7\xc6\xb8\x82\x39\xdd\x11\x3d\xa3\x28\xcd\x05\x51\x16\xc4\xc1\x3a\xe1\x98\x69\x8a\x56\x4d\x75\x7d\xa4\xa2\xe9\x41\xd2\xa9\x54\x8e\x92\xb4\x8c\xb8\x8b\xd1\x0b\xb2\xbc\x4f\xd4\x6b\xdd\x06\x39\x5b\x22\x08\xb5\x40\x1c\x42\xad\x84\x73\xa9\x05\x9a\xe0\x38\xab\x56\xe5\x17\xf3\x20\x9b\x92\x71\xf2\x55\xa9\x9e\xb7\x82\xa8\xdf\x2c\x93\xbf\x09\x3a\xe4\xbf\xd3\x70\x7f\x8d\x24\x42\x63\x4c\x63\x07\xdd\x14\x81\x38\x98\x5a\xa7\xdd\xa2\x54\x99\xba\x3f\xe3\x59\x6a\x58\x1b\x31\x16\xc4\x93\x7c\xdc\x93\x37\x30\x82\xb6\x9a\xc5\x1a\x35\xbc\xa7\x05\x06\xa0\xaf\x5e\x41\x1c\xac\x57\x71\x2b\x82\xae\xe0\x12\x92\x78\x94\x3c\xd4\x60\x10\x1a\xb7\x14\x67\x19\x51\x0a\x65\xd7\x35\xa6\x1b\x7c\x31\x12\x4c\x47\xb1\x2e\x83\x28\x0b\xe2\x60\x6a\x2d\x8a\x98\x87\x15\xa1\x07\x72\x3d\x51\xb8\xfc\xde\xc0\xe8\x37\x41\x62\xea\xd8\x8b\xf0\xa0\xdd\xd2\xfd\xf0\x68\x11\x53\xc2\xc7\x9b\x88\xb2\x20\x0e\xd6\xb7\x2b\x42\xf9\xf6\xb3\x33\x6f\xa9\x3b\x73\x17\x63\xf3\xfa\xc6\x70\xd2\xe2\xeb\x3d\xb4\x72\x19\x69\x0b\xa7\xbc\xdf\xcc\x65\x2e\xd2\x43\xeb\xa7\x00\x38\x58\x27\x74\xbb\xf5\x25\x47\x3f\x8b\xc2\x4f\x5a\x34\xcc\x5e\x39\x7e\x66\x53\x44\x7b\x99\xe9\x72\x4b\x5c\x50\x4a\xda\xf5\xeb\x3d\x65\xb5\x8a\x08\xb5\x40\x1c\x42\xad\xb2\xf3\x05\x49\x40\x33\xd8\xff\x04\x49\x90\xfa\xe0\xb3\x6e\x79\xb3\xc9\x84\x5b\xe3\x33\xd3\x3e\x13\x2d\xc4\xc5\xe5\x68\xc4\xaf\x05\x25\x93\x2d\x7f\x52\x67\xb7\x76\x31\xe5\x8e\xe8\x57\x5c\x7c\x9f\x19\xa4\x09\x78\x93\xec\x63\x73\x16\xb5\x78\x2f\x75\x50\xc6\xba\x7c\x42\x7f\xa9\xed\xbd\x9c\xa4\x88\xac\x93\x77\x7c\x94\xa9\xee\x8f\xd6\xcf\xdd\x4c\x77\xf1\x26\x0f\xcf\x2c\x96\x5d\x9a\x79\xc7\x8b\x37\x47\xfb\x94\x57\xe2\x8b\x9d\xd3\xcd\xfa\xaf\xe9\x6b\xc3\xf5\xcb\x33\x69\x07\xd4\x3d\xc8\xa3\x3f\xcd\xf0\xfe\x37\x73\x8b\xa0\xbe\x3c\x3b\xc0\x2b\x02\x0c\xa8\x77\x7f\x56\xa1\xac\x7e\xa6\x9c\x8e\x88\x65\x5f\x65\xe3\x4d\xbc\xf4\x25\xb4\xef\x93\x9d\x35\x4f\x0e\x89\x4f\xb3\x36\x74\x57\x06\xe0\xe0\x4b\x0e\x9d\xa0\x7c\x13\x28\x4d\xa8\xe5\x1f\x8f\x26\xc0\x18\x10\x78\x66\x82\x3a\xcb\xd3\x93\x51\x7d\xbc\xe5\x25\xcf\xad\x1b\x4c\x0d\xad\x0f\x05\xe2\x60\x6e\x8b\x3b\x65\x2a\x12\x92\x5d\x23\xf4\x6e\xfe\xfe\x25\x52\x2a\xec\xe3\xa2\xec\x51\xcd\x94\x72\xcb\xd6\xaa\x5a\xf0\x0b\x5c\xec\x3c\x68\x4b\x0b\x10\x07\x1b\xe0\x0a\xaf\xdc\x0d\xb0\xae\x48\x3d\xdc\xfd\x10\x52\x2b\xff\xd7\xe1\xe9\x8c\x66\xe0\xe9\xdc\xb7\x8a\xdc\x83\x37\x0c\x85\xd2\x05\x57\x65\x11\x65\x41\x1c\xac\x6f\x37\x24\x98\xfb\x3a\xf7\x7e\xe7\x76\xbe\xd5\x11\x4e\xdb\xd4\x8e\x2a\xb8\xdd\xca\xbe\x4f\xb6\x77\x49\x53\xfb\xba\xf7\x43\xa5\x08\x68\xb7\x35\x10\x07\x0f\xf9\x06\x30\xb9\xe3\x71\x6b\x16\xb9\xf3\x84\xdb\xea\x39\x95\x99\x24\xa5\x8c\x33\x7f\xfa\x86\xa7\x60\xfb\x57\xfd\x16\xbe\x11\x16\xb4\xe4\x10\x88\x43\x0c\xf0\xbe\x73\x5d\x3b\x40\x63\xe6\x3f\x16\xa5\x95\x1b\x1a\x90\x32\xa9\xa1\x22\xcf\x0a\xe9\xdd\x19\x55\xbc\x25\x9d\x53\x30\x4c\xc1\x8a\x82\x6c\xe3\x66\x3d\xcd\x1e\x24\x07\xc5\x7b\x41\x1c\xfc\x39\xfd\x61\x05\xea\x31\x4a\xf9\x09\xef\xe7\xb0\x63\xda\x9a\x19\xbc\x98\xaa\x38\x3a\x1d\xb9\x5d\x45\x6b\xd6\xdf\x02\x8f\xaf\x67\x43\x0f\x53\x20\x0e\xd6\xab\x83\x78\xf8\xb8\xdc\xa7\x05\x07\xd9\x44\x71\xeb\x4b\xc7\xb6\xbd\xeb\x8c\x1e\x8e\x29\x91\xb6\x8d\xca\x44\xa8\xb3\xef\xf2\x9a\xf7\x11\x65\x41\x1c\x4c\xad\x6a\xea\x9b\x7a\xcf\xea\x68\x69\x6d\xd4\x50\xab\xe7\xe4\x79\x3c\x90\xd5\x45\x4a\x26\x94\x29\xde\xd4\xbd\xf8\x28\xcc\x2f\x31\x0f\xad\xc1\x07\xe2\x60\x7d\x1b\xa2\x5b\x4c\xdf\x6a\x60\xfc\x1a\x95\x8e\xd2\xcc\xd9\x02\xeb\x1d\x6d\xe6\x9d\x57\xf3\x42\x98\xae\x1c\x54\x94\xd7\x1b\x5a\x0d\xa0\x95\x08\x40\x1c\xfc\x02\xea\x10\x2b\x6d\xcd\x52\x2e\xf0\x99\x1d\x9f\x66\x47\x46\xe5\x49\x6b\xb8\xcd\x10\x83\xc3\x44\xec\x33\xe4\xd5\x51\x4a\x31\x3a\x06\x84\x5a\x20\x0e\xa1\xd6\xc4\xb9\xd4\x02\x9d\x1b\xcf\xaa\x95\x39\x37\x32\x13\x32\xd2\xd2\x23\xaa\xd6\x9a\x24\xfc\xbe\xdd\x3b\x31\xdd\xbd\x84\x8b\xa1\xcb\x39\xce\xe3\x85\x74\xc2\x47\xcf\xc7\xd0\x53\x0f\x80\x83\xaf\x1c\x2a\xcb\x86\xd6\x5a\x47\xf9\x22\x3d\x62\x77\xc4\xa3\xe1\x7b\x6e\x30\xe9\x3c\xa5\xbb\x65\xa6\xb1\x0d\x0f\x96\x58\x71\xcd\x1c\xf4\x1c\x01\xe2\x60\xbd\xea\xe7\x66\xcd\xb2\x77\x85\x58\x1b\xf7\x17\x76\xf6\x33\xcd\x04\xa7\xec\xe5\x59\xd2\xd7\xd2\x3d\x98\x2b\x83\x24\x58\x29\xc3\xf3\xd0\x8d\x34\x88\x83\xa9\x65\x38\x41\x4c\x3f\xaa\x8f\x2e\x4f\x84\xe3\x1e\xfd\x5c\x60\xf0\xe5\xad\xe7\xde\x7f\x9b\xbe\xde\x7e\xa7\xcd\xea\xd3\xdb\xa0\x25\x01\x05\xb5\x40\x1c\xfc\x41\x35\x32\x2d\xde\xdc\xe9\xb5\xa1\x45\xd7\xaf\xaf\x7b\x1a\x79\x38\x7e\xc1\x4c\x8c\xf2\xb9\xe1\x5f\x94\xd2\x2c\x1e\x17\xce\x56\x41\x5f\xbf\x81\x38\x58\x27\x94\x30\xf7\xe7\x10\xf4\xc9\xcb\xc9\x78\x94\x66\x7b\x3c\x0e\x34\x32\x20\x10\x7d\x6a\xb5\x42\x3e\x89\x4e\x92\xd3\xc2\x66\x28\xd6\x83\x50\x0b\xc4\x21\xd4\x3a\x3c\x97\x5a\xa0\x77\xfc\xff\x91\xac\xd4\x2d\x0f\x8d\xdf\x5e\x98\x75\xe2\x22\x1f\x26\x5a\x76\x35\xf7\x1c\xc9\x50\xd6\xb1\xcd\x2b\xfd\xa8\x37\xde\x27\xb5\xbf\x6c\x0a\x25\x2b\x01\x1c\x4c\x2d\xe1\x78\x5c\xf7\x9d\xf7\xf7\xc4\x44\x50\xd0\x15\x53\x1c\x54\x7f\x16\x61\x61\xb5\xf7\x66\xb0\xc8\x61\xbb\xf2\xc5\xfd\xe9\x40\xd7\x84\xbe\x29\x04\x70\xf0\x65\x5e\x7f\x18\x60\xb8\x52\x59\xe1\x5b\xc9\x87\xd3\xd1\x32\xcf\xa4\x1d\xbd\xb2\xab\x68\xd8\x9e\xd6\xd7\x2c\x20\xdc\x6d\x5b\x74\x82\x1c\x00\x71\x30\xb5\x28\xd5\xee\x49\x7d\x58\x70\x5f\xfd\xc8\x5c\x55\x8c\x56\x21\x1a\xb6\x29\x93\xe4\xa1\x96\x59\x48\xf9\x3d\x98\x52\x26\xf3\xea\xfa\x03\x28\x4d\x03\xe0\x60\x7d\x4b\xa1\x29\x3a\xbe\xb0\x59\xcc\xdf\xfd\xb9\x94\x99\xab\x69\x43\xce\x06\x37\x25\xb5\xc5\x80\xec\xa3\x2c\x3f\x36\xed\xec\x6b\xf5\x2d\x28\x5e\x0a\xe0\x60\x9d\x70\xee\x15\x49\x50\x1d\x96\xc2\x79\xcd\x83\x04\xcc\x53\x03\x0c\x6b\x29\x67\xe3\x92\x9c\xcd\x4c\x90\xfe\xbe\x34\x48\xbf\xa4\xa9\xe9\xe2\x41\x46\xf6\xef\x20\xc9\xc0\x70\xae\xcb\xaa\x63\xf7\x82\x0d\x41\xf2\x41\xdd\x74\x56\xcb\x5c\x0a\x21\xd3\xfa\x51\xf4\x6c\xb2\xb2\xf7\xcf\x8f\x0e\x5d\x37\xfe\x85\x92\xcf\x6e\x30\x7b\xfb\xfa\xdd\x34\xf0\x7d\x3e\xfb\x6e\x67\xa3\xfb\x7d\x33\x8a\x93\x99\xc6\xfb\x05\x3a\xe7\xe2\x83\xb7\x63\x8a\xec\xb0\x20\x09\xa8\xf2\xd9\x20\x09\xa3\xfd\xf3\x8f\xaf\xb3\x30\x43\xc6\x8a\x39\xf0\x05\xd7\xad\xbe\x9b\x6b\xfc\x2e\x74\xa6\x93\xea\xfb\x44\x41\x59\x34\x16\x2e\xf5\xeb\x5f\xa8\xf3\x71\xc9\x61\xe7\x86\x3a\xca\x5b\x56\x8c\x79\xda\x22\xa6\x81\x7a\x1e\x02\xc3\xdb\x1e\x1a\xe2\x9d\x22\x36\x1d\x91\x54\x48\xe8\x50\x90\x04\x54\xf3\x9f\x20\x89\x14\x3c\x48\xf2\xdc\x62\xfb\x4b\xf9\x60\x31\xbf\xf0\x90\x4f\xe5\xa5\xde\xa8\x61\x1b\x0f\xbf\x2f\x3f\x0a\x58\x54\x44\x82\x2d\x5a\xd3\xd1\x1e\xcb\x5d\x38\x48\x22\x05\x0f\x92\x30\x23\xf3\xde\x30\x8f\x5f\x24\x4d\xc4\xd6\xb8\x2f\xfb\x7d\x84\xf2\xad\xa8\x51\xe6\x08\xf1\xe3\xa1\x9f\xe2\xe1\xca\x7a\x9c\x48\x17\xcd\x60\x07\xca\x48\x9d\x09\x92\xdc\xb5\x34\x57\x3c\xd0\xc4\x13\x26\x3f\x96\xbe\x9a\x63\xfe\xe4\x9d\xf6\xb0\x17\x65\x27\xd5\x06\xa7\x90\x6f\x3b\xfa\x65\x3a\xb7\xed\x8b\x37\x79\x26\x48\x52\xf4\xc7\x49\xf6\xd9\xd1\x31\x6a\xd7\x33\xf7\x9e\x7b\xef\xe7\x1a\xb1\x31\x0f\x12\x1f\xbf\x7f\xff\xec\x6f\xc5\x08\xae\x64\x86\xd8\xa3\x8b\x37\x79\x26\x48\x42\xc4\xd1\xfc\xe1\xe4\x49\x52\x6f\x78\xf3\x2f\x59\x33\x8d\xa4\xaa\x06\x6e\xac\x0e\x11\xdd\xe9\xc8\x6f\x6c\x03\xd2\x85\xfd\x41\x8c\x17\x6f\xf2\x4c\x90\x84\xef\xf7\x4e\x8a\xe9\xea\xec\x7d\xdd\x88\x57\x23\xba\x02\x97\x5c\xaa\xd3\x69\x9d\x7d\x2b\xbc\xd1\x19\xd1\xb5\x36\x71\x59\xdd\xd4\x2f\xde\xe4\x99\x20\x89\x51\x1b\x4b\x72\xe9\x03\x57\x9f\x9c\x3d\x4c\xf2\x27\x96\x0c\xdb\xb6\xa9\x89\x5a\xec\xd5\x0f\x76\x65\x19\x3e\x7c\x52\x6e\x69\xbc\x72\xf1\x26\xcf\x04\x49\x12\xdb\xf3\x43\xf3\x35\x03\x45\xa3\x9f\x58\x50\xdc\xa6\xab\x96\xd4\xe7\x65\x61\x65\xb3\x4e\xc6\xa3\xe2\x4f\xa0\x88\xb7\xf2\x8d\xfa\xdf\x3c\xec\x81\x46\xe2\xd9\x6b\x5b\x00\xb3\xaa\xd2\xbd\x1b\x4e\x12\x19\x71\x6b\x1d\xb1\x37\x62\x8f\x28\x0d\xc6\xc3\xfa\x92\xbf\xd3\x7c\xba\x29\xd7\x11\x75\x8a\x7b\x84\x38\xff\x82\x38\xd8\xb5\xed\x01\xde\xce\x6c\x3a\x86\xb7\x64\x98\x66\xa2\x25\x03\x0f\x0e\xe3\xf3\xb9\xbc\xa1\x8f\x4d\x2e\x52\xb4\x04\x13\xbc\x73\x71\x71\x2d\x88\xb2\x20\x0e\xfe\xba\x9f\x9c\xfe\x7a\xe5\xd0\x58\xcd\x56\x4f\xcc\x95\xbe\x37\xe3\x64\xb7\x44\x0e\x30\x1a\xe4\x48\x09\xbd\x75\x1d\xc2\xef\x71\x07\x41\x6f\xce\x40\x1c\xec\xda\xf6\x39\xe0\xc9\x82\x24\x46\x17\x2b\x2e\xf5\x1b\x46\xc6\xc6\x07\x6e\xc6\xe5\xe2\x5b\xc5\x24\x16\xf2\x7b\x34\x9a\x0f\xdc\x91\x69\xa1\x65\xb1\x40\x9c\xef\x2d\xa9\x7f\x97\x55\xab\x0b\x27\x9a\x23\x6a\xf6\x1c\x2e\xb9\x41\xd4\x76\xb9\x4b\x9f\x73\x3f\xac\x46\x8d\xb4\x3f\xd5\x21\x16\x53\x40\x48\x82\x27\x08\x51\x16\xc4\xc1\x3a\xa1\x99\x80\xea\x34\x5d\x86\xed\x8e\x29\x5d\x71\xe9\x8e\xda\x58\xa4\x1a\xb9\x4e\x78\xa8\x85\x61\x5b\x42\xf5\x25\x49\x23\x1e\x67\x6f\xc4\xeb\x7e\x10\xf7\xcf\xba\x11\x52\xe7\x0a\x92\x80\xce\xb8\xff\xb1\xfa\xe4\x22\xf6\xfc\x7c\xf3\x72\xc8\x36\x73\x5e\xa6\xa9\x66\xd4\x8c\xa2\xff\xe6\x29\xe7\xdb\xd0\x38\x3b\xe1\xc9\xdf\x56\x4b\x1f\xcc\x10\xff\x1e\xc4\xc1\xcc\xba\x29\x10\xb0\x89\xf9\xf4\x8b\xc2\x9f\x83\xcf\xbc\x98\x06\xba\x3f\xee\xeb\x46\xad\xb3\xe5\x2b\xbc\xef\xa3\x2f\x5f\x16\x0e\x23\x26\x42\x94\x05\x71\xb0\x4e\x8d\x3c\x8c\x5e\xce\xac\x2e\x8b\x91\xb6\x66\x64\xb9\x19\x56\xc2\x75\x1a\xfb\xd3\x50\x96\x49\x14\xfb\x8a\x5c\x7e\x18\xf6\x25\x07\x68\xdf\x05\x10\x07\x33\x4b\xf0\x3b\x2a\xb3\xa7\x30\xcb\xbd\x93\xc1\x57\xe4\x93\x32\xe4\x2b\xe4\x2a\xbb\xf6\x9e\x3e\x2d\x55\xe9\x36\x36\xda\x95\x15\x8a\xcc\x88\xb2\x20\x0e\x66\xd6\xb5\xbf\x99\xca\x0b\xaf\x19\xe8\x76\xc2\x6e\x4b\xdd\xaf\xdb\x52\x90\x58\xba\xed\xbd\x92\x44\x29\x73\xf7\x59\xf4\xf0\xa3\xbd\x4d\x68\xf5\x49\x10\x07\xeb\x84\x82\xfb\x93\xba\xa3\xa8\x5d\x7f\x59\x2c\x13\x26\x6d\xaf\xe4\xcf\x36\x2a\x5c\x56\xce\x41\xc7\xc8\xde\x1e\x73\xc8\x33\xb5\xb4\x4d\x45\x98\x05\xe2\x10\x66\x9d\x2b\x48\x02\xba\xb0\x9e\x35\xeb\xbd\xc1\xd1\xc8\xea\x9b\xd5\xf1\x44\xcb\xf4\xa4\x9e\x0e\xe9\x15\xfd\xdb\x0f\xc8\x3b\x53\xde\xf0\xd1\x7d\xbd\xef\x5d\x8c\x3c\x53\x0d\x7d\x3b\x04\xe0\x60\x66\xa5\x6e\x47\xfd\xc2\xe9\x8b\x30\x79\x1a\x64\xf1\x79\x86\xb5\x64\xef\xfa\xdb\x8c\x1e\x2a\xc2\x9e\xb0\xd9\x9e\x67\xdf\x57\x8c\xfb\xa1\xb9\x19\x10\x07\xeb\xd4\x1d\xda\x2a\x3d\x2c\x92\xf7\x77\x97\x12\x1c\x44\x4c\xd4\x7f\xe2\xa0\x90\xea\x26\xe8\x46\xf7\x38\xde\x27\x76\x76\x9c\x62\x2c\x84\xb6\x78\x02\x71\x30\xb3\x5a\x55\xe7\x33\x4a\x2e\x13\xf5\x76\x6d\x87\xb3\x3d\x1e\x18\x1b\xd7\xe5\x35\x5f\x92\x18\x50\xbb\x91\x3f\xef\x9b\x21\xa9\x17\x9b\x89\x28\x0b\xe2\x60\x66\xc9\xcd\x30\x1f\xb6\x44\xda\x77\xcb\x7f\xb0\xd6\x4c\x54\xd7\x25\x34\xc8\xd2\xcb\xa3\x14\xff\x9c\x96\x6e\x54\x73\xbc\x48\x6f\xb4\x8a\x28\x0b\xe2\xe0\xb3\x74\x14\x3a\x8a\x8c\x63\xcb\xc9\x45\x2a\xaf\xfa\x91\x64\xb6\x68\x52\xbb\xe8\x12\x54\x65\x2c\x06\x42\xc4\xaf\x32\x86\x90\x3c\x5b\x43\x3c\xea\x81\x38\xc4\x2e\xa6\xe7\x0b\x92\x80\x6e\xa0\xce\xaa\x75\xf7\xad\x1c\xb1\x84\x07\x33\x9a\xc3\xe5\x20\x06\xaa\x37\x3a\x05\x2f\x0a\x14\x9e\xde\xa4\xb1\x09\x4e\xe4\xc7\x47\x56\x1d\x3a\x10\x81\x22\x85\x00\x0e\xa6\x16\xb5\xae\x33\xab\xca\xe5\x6b\x53\xf6\xca\x99\x96\x98\xdd\x23\x86\x4d\xf1\x69\xd1\x21\x59\x7d\x5d\xf2\xbf\xef\x69\x3e\x71\x13\x81\x36\x39\x03\x71\xb0\x5e\xe5\x95\xa3\x1b\x93\x13\xbe\xf6\xcc\xf1\xe8\xe1\xdd\x4d\x82\x6c\xea\xad\xcd\x6a\x4c\x41\xa5\xe6\xa9\xd2\xbb\x4f\x17\xf1\xc7\xc3\xa1\x77\x26\x20\x0e\xa6\xd6\xfc\xab\x1c\x52\x6a\xf5\x5a\x37\x1e\xe7\x31\x11\x07\x57\x4f\x24\x9d\x1c\xdb\x2a\x59\xbc\x71\xf9\x07\xf5\x6d\xd9\xb4\x51\x5d\xd0\x29\x16\xc4\xc1\xd4\x52\x54\x27\xcd\x1d\xbf\xfb\xe5\xb3\x90\xa1\x53\x6d\x43\x1c\x92\xb6\x81\x83\x73\x4f\x7a\xed\xdd\xd4\xbb\xdc\x72\x6e\x83\xce\x1b\xb1\x88\xb2\x20\x0e\xd6\x09\x7a\xa7\x3a\x4c\x48\x65\x0c\x0e\x5a\x6d\x19\x7d\xa1\x8b\xbd\x57\xe6\xae\xd2\xeb\x28\x25\x08\xee\x5e\x9d\x9f\x93\x9e\x69\xef\xe5\x40\xa8\x05\xe2\x10\x6a\x9d\x2f\x48\x02\xba\x51\x3e\xab\x56\x56\xf0\xc0\x18\xf2\xc8\xe5\xa8\x94\xaa\x14\x97\xaa\x70\x6c\xea\x11\x93\xdb\xa6\x74\x18\xdf\xbe\xe6\xa0\xfb\xb2\x0c\x19\x19\x42\x4b\x69\x81\x38\x98\x5a\x34\x92\x71\x82\xd1\x66\x37\x31\x4d\x3b\xda\xae\xee\xbb\xf7\x55\x49\x5e\x33\x7b\x57\x72\xe7\x4a\xf2\x6e\xe1\xbb\x30\xa1\xf4\x91\xef\x88\xb2\x20\x0e\xd6\xab\x85\x56\x54\x61\x56\x1b\x64\x7f\x82\x06\x09\x5e\x77\xad\x46\x57\xc8\x6a\xdb\x52\x12\x71\xec\x75\xea\x25\x44\xf6\x7f\xcd\xe5\x83\xb6\xf5\x06\x71\x30\xb5\x62\xf6\x89\xc4\xe7\x34\xf8\x6e\x5d\x33\x30\x11\x5b\x64\xf6\x7b\x6b\x4d\xe3\x80\x8b\x5f\xe2\x7c\x25\x29\xd1\x74\x27\x89\xb4\x1b\x7a\x1d\x07\xe2\x60\x6a\x65\xe2\x1b\xac\xdf\x7c\x1d\x63\x66\x52\x2c\x78\x49\xe7\x1a\x45\x56\x64\xb9\xaf\xa2\xc7\x67\x0a\x8d\xdd\x88\x2f\x96\x91\x8e\x6d\xb3\xd0\xe4\x1f\x80\x83\x75\xc2\xdc\x56\x64\xfb\xb7\xc2\x6c\x19\x81\xca\x24\xb5\x74\x8c\xd5\x2b\x46\x19\x7d\x5f\xeb\xad\x9b\x72\x13\x47\x7d\xec\x90\xae\xdf\x87\xf6\x5e\x06\x71\x08\xb5\xce\x17\x24\x01\x3d\x10\xfd\xc7\x12\x5d\xce\xf7\x4e\x50\xf1\xaa\xad\x3f\x36\xc7\xfe\x5c\x74\x76\xbd\xfe\x76\xca\x2a\xb2\x44\x10\x3d\x0d\xd7\x75\x39\xd3\x22\x6c\x63\x0f\x0a\xd7\x02\x38\x98\x5a\x1b\x86\x26\x44\x57\x9f\x46\x49\xc5\xd6\x6e\x3d\x8b\x33\x56\xea\x18\xae\x51\xf9\xcc\x1a\x17\x17\x7c\x8d\x47\x71\xb2\x7f\xad\xea\x35\xf4\xb2\x02\xc0\xc1\x7a\x35\xc2\x2d\x56\x1c\xc7\x61\x87\x30\x28\xc5\xe2\xd6\xcb\xae\xaa\xf7\xee\x71\x8c\x1d\x6f\x6e\x31\x2d\xd0\x69\xb2\x9c\x96\x63\xa3\x41\x2f\x90\x41\x1c\x4c\x2d\x56\x0c\x3f\x9d\x02\xbe\x53\xdb\x4f\x89\x7e\x43\x03\x02\x6c\x8d\x74\x2f\x66\xaf\x76\x47\x07\xc6\x67\x59\xc9\xfa\x1d\xd2\x86\x3f\x42\x94\x05\x71\x30\xb5\xdc\x07\x70\xa3\x0e\xd3\xb4\xf6\x32\xc4\x0a\x18\xc7\x0e\x66\x23\xdc\xbb\x75\x51\x1e\x47\x04\x27\x45\xf9\xae\x16\xe8\xb9\x87\x43\x7b\x2f\x83\x38\x58\x27\x3c\x59\x73\x58\xfc\x8e\x56\xff\x94\xf4\x49\xc7\xa0\xfb\x50\x26\x05\xca\x34\x03\x4d\x19\x1d\x45\x95\x2e\x07\xdf\x3b\x29\x55\x63\x28\xfe\x06\xe2\x10\x6a\x9d\x2f\x48\x02\x7a\xf0\xfd\x8f\xad\x6d\xa8\x75\x0e\x03\x0b\xdf\xa7\xe5\xde\xfc\xd6\xc1\x2b\x78\xd5\x9b\x80\xff\x39\x6e\xfa\xd1\x62\x4d\x44\xab\x57\x49\x9a\xb4\x17\x36\xe2\xef\x83\x38\x98\x5a\x98\x84\x18\x3c\x32\xd9\x7f\xfa\x82\x06\xa7\x68\xb3\x07\xa9\xef\xfe\xaa\x23\x23\x8d\xd4\xe6\xaf\x6d\x64\x8f\xe3\x8c\xd3\xe1\x76\x45\x94\x05\x71\xb0\x5e\xbd\x4b\x67\x68\xb0\x2e\xaa\x9b\xa8\x88\x55\x12\xbf\xf0\xb5\x8d\xcd\xe1\xd8\x43\x84\x7e\x2c\xfd\xa6\x61\x89\xee\xec\x8f\xdd\x79\x28\xfa\x04\xe2\x60\x6a\x49\x18\xa0\x2c\xe9\xfb\xa5\xf1\x0f\x38\x94\x7c\xd7\xcc\xc9\x67\xaa\xd9\x0c\xab\x1c\xff\x2c\x6b\xf3\x10\xe3\x23\x75\x58\xde\x43\x68\xaf\x37\x10\x07\x53\x6b\xa1\xe7\x65\x99\xcb\x15\xbb\xdc\xe9\x17\x3e\xf1\x2f\xcd\xcd\x13\x8b\xa3\x2b\x59\x36\x5c\x27\x8b\x0c\x69\xb4\x72\x91\x68\x5c\xa0\xf5\x53\x40\x1c\xac\x13\x42\xbc\x12\x86\xf6\xb8\x0c\xa3\xe9\xc5\xf5\xfd\x5f\x56\xc7\x9c\xee\x29\x91\xc6\x1e\xa5\x04\x16\xfe\x74\xe0\x20\xbc\x9e\xba\xf0\x11\xa1\x16\x88\x43\xa8\x75\xbe\x20\x09\x68\x82\xe3\xac\x5a\x83\x59\xf5\xc5\x3e\xa2\x8f\x77\x85\xdd\xf9\xfc\x56\xb8\x54\x98\x5c\x78\xd3\x7b\x48\x57\x58\x53\x92\x7d\xbb\x5f\x28\xd7\x4b\x41\xdf\x10\x82\x38\x98\x5a\xc1\x8f\x85\xc6\x70\xc6\xaa\x7c\xf2\x89\xab\x86\x08\xb3\x47\xc3\x3b\x1b\x0f\x82\xb7\xbb\x35\xa2\x8e\x3e\x84\xc5\x65\xab\xd9\x40\x59\x60\x10\x07\xeb\x55\x1d\x22\x2a\x02\xc1\x0a\x21\xee\xce\x95\xfe\x01\xba\x5f\x2e\x0b\x77\x58\xf2\x71\x05\xca\x42\x3e\x78\xf1\x3c\x1f\x56\x95\xa6\x42\x41\x94\x05\x71\x30\xb5\x64\x7e\x14\x4a\xaa\xe7\x7d\xca\xf1\xbf\x35\x57\x35\xe3\x33\xe0\xa3\xb6\x75\xf3\x6d\x6e\x77\x01\x99\xf9\x40\x05\x06\xce\x71\x0a\xf4\x49\x00\x88\x83\xa9\xc5\x4e\x63\x2d\x73\x24\x60\xdf\x35\x25\xb0\x50\x46\xc0\xb5\x4c\x52\x30\xb3\x92\x48\xf5\x4d\xdf\x9f\x38\xb7\xbd\x92\xee\xb8\x73\x17\x51\x16\xc4\xc1\x83\x24\x5b\x73\x0a\x44\x8f\x3f\x65\xeb\x79\x05\x7d\x30\xe2\xde\x68\xca\xb2\x74\xd9\x0d\x6f\x8d\x0f\xd5\x59\xc5\xbc\x1e\x67\x9a\x66\x04\x05\x49\x00\x1c\x42\xad\x73\x06\x49\x40\x33\xd8\xff\x04\x49\xa4\xce\x04\x49\xdc\x04\xab\x77\xb4\xe5\x93\xa7\x9a\x2d\x39\x88\xb9\xa7\x3c\x34\x07\xe4\xa5\x3c\xff\x7e\xc3\xfb\xf8\x5e\xdd\xee\x97\xa9\x32\xd2\xf5\x8b\x4f\xf4\x9d\x09\x92\x08\xde\x8f\xbb\x57\xb0\xd9\x40\xbe\xa7\xf1\x30\x8f\x52\xfe\xe4\x03\x9f\x36\xce\x24\xd3\xac\x75\xa6\x91\x56\xb8\xb0\x88\x12\x31\xd7\xc5\x9b\x3c\x13\x24\xa1\x5c\xc7\xd8\x89\xb9\x45\x27\x68\x37\xf2\x59\x28\x12\xc5\xd0\x9f\xb7\xac\xb1\xa7\xca\x11\xff\xed\xde\xd0\xca\x7c\x6f\x68\x96\xe7\xff\x66\x6e\x11\xd4\x97\x67\x07\x78\xe2\x75\xd9\x97\x3e\xef\x0a\xba\x0d\x49\x18\xff\x7e\xda\x78\x28\x46\xd2\x4e\x15\xa2\xe8\x19\x5f\x19\x40\xbc\xe2\xaf\xe5\x29\x07\xad\xf1\x01\xe2\xe0\x03\x3c\x4c\x40\x71\xfc\x27\x3a\x9f\x5c\x30\xa6\x66\x12\x29\xce\x4d\x96\x03\x75\xaf\x07\x49\x61\xa8\x04\x91\xbc\x6f\xc5\x0a\x48\x6e\x42\x03\x1c\xc0\xc1\xdc\x66\x6c\xf8\x10\xa9\xb6\xa5\xbd\xf2\xb8\x49\xec\x78\xc6\x29\xd4\x58\x82\x02\xa3\xc8\x01\xd7\xf6\x53\xeb\xd0\x7b\xa9\x23\xa1\xcd\xfb\x88\xb2\x20\x0e\x36\xc0\xb1\xfd\x5f\xb0\x78\xbc\xcd\x8a\x3a\xc4\x78\x87\x53\x10\xec\x2f\x4a\xdd\x80\xc5\x41\xc8\xa9\xec\x30\x5a\xc1\x24\x18\xaa\x5b\xdb\x8a\x28\x0b\xe2\x60\x03\xfc\x6d\xff\x6d\x13\x83\x69\x53\x46\x39\x59\xfe\x47\x48\x49\x5a\x91\x72\xf9\xea\xae\xa3\x58\x82\x33\x43\xd6\x51\x92\x83\x5b\x87\xd0\x6d\x3f\x88\x83\x75\x42\xc7\xcd\x43\x97\x95\x66\xf6\x4c\xce\x6d\x95\xe6\x35\xbb\x06\xba\x2f\x9e\xdd\x65\x57\xe7\xc3\x33\x82\x1e\xf2\xcd\x28\x20\x25\xa1\x23\x06\x38\x88\x43\x0c\xf0\xf3\x05\x49\x40\x63\xe6\xac\x5a\xde\xb2\xab\xa4\xc2\x4f\xc9\xe9\x0d\x2b\x37\xf5\x6b\x2d\xc8\xa6\x28\xb5\x83\x76\xd5\xf7\x8f\x9b\xc8\x34\xf0\xa6\xba\x25\x4c\xca\x11\x7f\x1f\xc4\xc1\x77\xdc\xc3\xb6\x5b\xc3\x7d\x2a\xd9\x46\xd4\x63\xac\x81\xa2\x8f\x9e\x6d\xca\xf5\x9d\xd6\xbb\xab\x38\x21\x37\xc6\x9f\x4c\x1d\x17\x13\xfa\x50\x11\xc4\xc1\x7a\x95\x2f\x7d\x93\xfb\x5a\x75\x4a\xac\xfb\x96\xf5\xaf\x38\xca\x87\xc6\xf3\x93\xbf\x6f\xf1\x8e\x3b\x07\x50\x6e\xa7\xdd\x32\xf3\x6f\x80\x26\xd9\x41\x1c\x4c\x2d\xb1\xeb\x7c\x52\xe9\x31\xde\xb1\x68\xa2\xa9\x7e\x3c\x35\x04\xd2\xbf\x02\x55\x36\x1b\xa4\x19\x29\x3f\x5f\x5a\xd6\x95\x60\xea\xf7\x86\x62\xb3\x00\x0e\xa6\x96\xab\x23\x0d\x5d\x9c\xca\x32\xd2\x68\xaa\x26\x8f\x4d\xb4\x61\x11\x33\x41\x6d\xdf\xeb\x5d\xe5\x98\x45\xcd\x04\xf1\x2a\xb3\x0c\x72\x44\x59\x10\x07\xcf\x28\xd5\xdd\xbc\xd3\xd0\xd2\x28\xe0\x71\xb8\xb2\xfb\x2a\x9a\xfa\xb3\x36\x97\x04\x75\xe9\x48\x23\xd6\xbb\x80\xfd\x3a\x2b\x73\x8a\x0f\x50\x46\x09\xc0\x21\xd4\x3a\x5f\x90\x04\x74\x6e\x3c\xab\xd6\x72\xda\x89\x34\xfe\xa3\x84\x93\xc8\xf1\x98\x5f\x9f\x42\xda\x7f\x52\xac\xdb\xee\xf2\x34\xcf\xaf\x21\x7f\xe7\xec\x6b\x28\xd9\x82\x5e\xcb\x83\x38\x98\x5a\x46\x7c\x6a\x2a\x57\xb1\xb0\x68\x87\x9f\x0b\x47\x5b\x65\x76\x2e\x44\xf1\x11\xa2\x66\xf4\xdc\xa4\x26\xd1\xa7\x7f\x8c\x4a\xb9\x9c\x88\x28\x0b\xe2\x60\xbd\xfa\xe5\xb3\x12\x95\x91\x79\x9f\x6c\x7d\x25\x9a\x46\x8f\xf6\xfe\x1d\x56\x6c\x49\x39\x62\x6b\xef\x0a\x35\x8d\xe4\xd2\xf0\xba\x60\x68\x7b\x44\x10\x07\x53\x8b\x1e\xf5\x32\xae\x2c\x77\xa5\x19\xbd\x31\x7b\x87\x4d\x02\xeb\x7d\xf2\xb9\xe5\x5c\xc1\xa1\x77\x13\xb6\x32\xf4\xd4\xdd\x2b\xf8\xd0\x33\x1a\x88\x83\xa9\x85\x13\xb1\xfe\xde\x93\x73\xc4\xa9\x05\x7d\xf3\x69\x1e\x12\x81\x1f\xcf\x5f\xf7\x63\xd1\xc8\x10\x25\x7c\xa1\xad\xd4\x60\x49\xc1\x54\x44\x59\x10\x07\xdf\xd6\x04\xef\xfa\xf3\xa0\x15\x03\xdb\x48\xf4\x60\xc5\x40\xd9\xf8\x9a\xb0\x28\x72\x15\x4d\xf2\x17\x1f\x6b\x6c\x03\xee\x7c\x41\x5d\xfc\x89\x50\x0b\xc4\x21\xd4\x3a\x5f\x90\x04\xf4\x8e\xff\xac\x5a\xf3\xe9\x9b\x63\xc1\x4c\xc9\x7f\x89\x0e\xf1\xaa\xb0\x76\x62\x32\x39\xdb\x9b\x3a\x7e\x11\xea\x23\x3d\xca\xbf\x1d\x93\xcc\x4f\x09\xed\x17\x0c\xe2\x60\x6a\x45\x58\xf8\x06\x26\x5c\xf2\x64\x39\xb5\xea\xe9\x5e\x4e\x37\x88\xfc\x2e\x39\xb6\x66\xf1\xc3\xff\xb9\x80\xf4\x95\xce\x1b\x0a\x77\xa1\xf3\x00\x88\x83\xf5\x2a\xdb\x97\x62\x65\xbd\x39\xbf\x87\xfc\x0a\x4a\xe1\x0e\xca\x73\x91\xa8\x14\xd3\x65\x9b\x28\x35\x12\x74\x49\x6c\x95\x65\x5f\x0d\xa0\x54\x3e\x88\x83\xa9\x55\xb1\x5b\x11\x7f\x74\x72\xbf\xc1\x33\x56\x79\xb0\x2f\x78\x3f\xcc\x25\xd2\x5f\xf3\xfa\xe4\xf5\xd3\x5b\x6f\x25\x3b\x3c\x8b\x8b\xa0\x2b\x17\x88\x83\xa9\x25\x24\x58\x92\x82\x25\x17\x2d\xd1\x91\xe8\xfd\xe3\xf4\xbe\xba\xca\xc7\xd7\x81\xb2\x97\x51\x89\x14\x22\x0a\x3d\x9a\xee\x30\xd0\x0d\x20\xca\x82\x38\xf8\x1e\x08\xe7\x5d\x91\x84\xe4\xd5\xe9\xd7\xcc\x84\x15\xe3\x8f\x95\x5d\xac\x51\x61\x0e\x95\x7e\x1c\x12\xaa\x0a\x37\x1a\xb4\x57\xd5\xae\x66\xca\xdd\x2c\xf4\xff\x77\x90\xc4\xe6\x19\xd5\x34\x6b\x7a\x15\xd3\xe5\xac\xdf\xe8\xea\xde\xf8\xc8\x91\x53\xc5\x7e\xdb\x14\x95\x0f\xc7\x63\xf1\xe5\x57\x3f\x9a\xf5\xfe\x0b\xa5\x62\x58\xf8\x4e\xf6\x90\xca\xbb\xe1\xf6\xf5\xcb\x77\x46\x16\x57\x4f\x09\xaa\x8a\xd7\x26\x97\x52\xa5\xae\xb3\xbe\xde\xbc\x6f\x2d\x0d\x0b\x92\x80\x2a\x9f\x0d\x92\x84\xbb\xfe\x1a\xda\x47\x3f\xb6\x1a\xff\xfa\x84\x28\x23\xa2\x47\x34\xb8\x20\xe7\x3b\xd9\xcf\x41\x6c\xf2\xf5\x42\xbf\xe7\xfa\x2a\x4d\xff\x9e\xbc\x73\xb6\xe7\x0b\x09\x74\x6f\xde\x74\x0b\xaa\xc5\x96\x57\x79\xc4\xeb\xa7\xc7\xd3\x85\x17\xd0\x3e\x1b\x60\xaa\x38\x2a\x33\xa2\x0c\x05\x49\x40\x35\xff\x09\x92\x78\xc3\x83\x24\x3d\xe6\xd7\xc3\xe9\x63\xdf\xc7\xc7\x0c\xb5\x69\xc7\x29\xd6\xa1\x17\x67\x6f\xd1\x55\x31\x07\x94\x50\xc5\x7d\x3b\xf1\x18\x25\xc0\xbf\x70\x90\xc4\x1b\x1e\x24\x11\xb4\x8f\x75\xbf\x7e\xbb\x9e\xf8\x23\xb6\xc2\xd8\x76\x91\xb3\x54\xe9\xb1\xa5\xbe\xd2\x2c\xba\xfc\xca\x1a\x6a\xc6\x9d\x4a\x93\xc4\x0b\xdf\xad\x7b\x9f\x09\x92\xdc\x21\xec\x22\x29\x57\xbf\xba\xd4\xaf\x7e\xdb\xe0\xff\x63\xed\xac\x83\xb2\x6a\xfe\x36\x0e\xa8\x80\x28\x21\x20\x48\x0a\x02\x12\xd2\x4a\x48\x97\xa0\x74\x77\x88\xd2\x48\x4b\x4a\x83\xb4\x28\x82\x74\x88\xa4\x20\xdd\xa0\x34\x48\x77\x48\x83\x48\x23\x21\xd2\x02\xef\xbc\x33\xcf\x7d\xe6\x99\x73\xff\x66\x96\x19\x9f\xff\x3f\x73\xed\x7d\x9f\x73\xed\x39\x67\x77\xaf\xfd\xee\x4a\xac\x78\xa8\x19\x79\xf1\x7d\xe6\x5c\xb2\xe8\x81\x0c\xd1\xa2\xfb\x1b\xbf\xbf\xfe\x7d\x93\x48\x41\x92\x6f\x85\x6f\x7f\x45\x52\x9b\xde\x97\xa0\xe3\x61\x9d\x79\x2e\xfa\xa1\x60\xb0\xf6\xbe\xfb\xd5\x5a\x5f\x61\x0b\x26\x43\xc6\x3b\x8c\x54\x7f\xdf\x24\x52\x90\x64\x43\xfc\x91\x60\xae\xef\xf7\x7e\x99\x2f\x76\x6c\xe2\x07\xb6\xe3\x82\x79\xe1\xb4\x09\xc1\xe6\x64\x64\x07\x53\x8a\x96\x5d\x12\x7f\x5f\x04\xc5\x1b\x29\x48\x52\x18\xb9\xa7\x36\xf4\x9b\x53\x9d\xea\xe7\x9f\xf4\x03\x2a\x33\x93\xa8\x63\xb4\x4b\x8f\x75\x0b\xbe\xd3\x37\x44\x06\xcc\x1a\x16\xd0\xfc\x7d\x93\x48\x41\x92\xef\x26\x78\xa1\x0e\x2c\x39\x0c\x6d\x4c\x34\x12\xb9\x1e\x12\xe9\xca\x9f\x7e\x56\x04\x54\x33\x61\x58\xec\xf8\x16\xd4\x46\x0a\xa0\xfd\x7d\x93\x48\x41\x12\x53\xc2\x44\x9a\x88\x0a\x0a\xf5\xce\x23\x75\x7c\xfd\x31\x87\x0f\xf7\xc7\x1e\x4f\x5f\x8a\xcc\xde\xfb\xe4\x45\xbe\x8c\x89\x5a\xba\xf4\xdf\x0c\xf6\x40\x3d\x11\xf9\xdd\x76\xc4\xdb\x8a\x66\x39\xe9\x64\xe0\x19\x75\xc1\x6f\x70\x23\x9a\xbd\xf7\xca\x9c\x62\x4f\xd9\x84\x81\x1c\x3e\x23\x95\xac\x1f\x37\x34\x07\x0d\xe2\x60\xef\xb6\x99\x60\xa1\x24\x4a\xf7\xec\x1e\x0f\xb3\xa5\x7b\xcb\x59\xbb\xcd\xe3\x0e\x07\xcc\x4a\xe6\x91\xf6\xef\xef\xba\x6c\x92\xa2\xde\x83\x4e\x0a\x01\x71\xb0\xc7\x7a\x8e\x76\x26\x9a\xf0\xb7\xf9\xba\x64\x47\x4f\xbf\x0c\xb1\x87\x55\xaf\x0a\x08\xe8\xa3\x94\xec\x1b\x95\xc6\x88\xae\x6d\x29\xe0\x42\xc7\xa5\x80\x38\xd8\xbb\xcd\xab\xc6\xab\xaf\x92\xc4\xeb\x7d\xe1\x8d\x3c\xb2\x79\xbe\xe8\xd0\x8b\x56\x8a\xee\x8d\x6f\xc5\xf1\x7c\x96\x4d\x3a\xb2\xea\x33\xa0\xcd\x08\x20\x0e\x76\x11\x30\x0a\x6a\x85\x3c\xc3\x6d\x76\x26\x2c\xaf\xaa\x5f\x0c\x43\x11\x19\xb5\xb9\xfc\xe4\x2c\xdd\xef\x47\xa2\x7b\xb9\x00\x19\x4a\x0e\x13\x42\x16\xc4\xc1\x7e\xad\x9c\xce\x82\x66\x08\xeb\xc3\x67\xa2\xf2\xdb\x41\x5a\x02\xc6\xf1\x28\x91\x26\x6d\x01\x09\x1b\x36\xa5\x0b\x95\x3f\xab\x62\x9d\x27\x11\xcb\xfd\x20\xee\x9f\xba\x11\xde\xe7\x0a\x92\x80\x9e\xb8\xc8\xce\x8a\x7c\x71\x83\x33\x3c\x19\xdd\x72\x23\xf8\xa6\x2d\x6b\x7f\x09\xe9\xe4\x73\x61\x0c\xf6\xe8\x06\x5b\x62\x2b\x85\x34\xd6\x09\x17\x68\x8a\x0c\xc4\xc1\x2e\xea\x5d\xed\x1b\xa7\x36\x2b\x24\xb7\xb0\xc5\x64\xb3\xd1\x30\xbc\x42\xe8\x03\x43\xe5\x5c\x4c\x36\x88\xdf\x68\x2c\x55\xa9\x3b\x2c\x19\x20\x64\x41\x1c\xcc\x59\xdf\x0a\xa7\xca\xaf\x8b\xc9\x2b\x3f\x93\xdb\xa3\xed\xbe\xf0\xe1\x6c\x71\xa9\xd8\xe9\xfa\xc0\x25\x69\xf3\xb2\xf4\xcb\x5a\xb8\x1d\xd0\x27\x2e\x88\x83\x7f\x35\x7d\x61\x35\xa8\x32\xa2\xbb\xa6\xf6\x42\x9c\xc2\x6e\x12\x0d\xab\xa6\x91\xbb\xf5\xe3\xd6\xbc\x96\x6a\x62\xbc\x99\xba\xe9\x29\x74\xf0\x2e\x88\x83\x5d\x84\x46\x3d\xc5\x0f\x92\xe5\xd7\x46\x7e\xfe\x69\xb5\x9a\x7b\x9b\x3b\x72\xdd\x91\x37\xa7\x30\xe7\xa9\x4a\x32\xd1\xc4\xed\x0d\x7c\x5d\x68\xa9\x17\xc4\xc1\x7e\xad\x4e\xee\x15\xdf\xf6\x89\x4b\x1a\xed\xfc\xea\x8a\x2b\x47\x6c\x3d\x1c\xd2\x77\x33\x93\xe3\xab\xa9\x30\xcd\xef\xde\x9b\xa4\x7d\x6f\x86\x70\x16\x88\x43\x38\xeb\x5c\x41\x12\xd0\x8b\x15\xd9\x59\x65\x35\x5e\x37\x47\xae\x13\x30\x28\x17\x4f\x66\xe3\x17\xb8\x67\x98\xf4\x5d\x95\x47\xed\xfc\x70\xb1\x3b\x63\x8e\xca\x97\x69\x12\xba\xa8\x20\x0e\x7e\xfe\x48\x51\x58\x88\x1e\xa7\xc7\xcd\x1c\xbc\xe9\x6f\x6b\x64\x5c\xcf\x7b\xaa\x43\xae\xfd\x78\xfe\x9c\xf8\x99\xe3\x93\x14\x7c\xe5\x6a\x6d\xa8\x18\x07\x80\x83\x4f\x50\x49\xa7\x68\x6a\xda\x1e\xc6\x4f\xc7\x5a\xb6\xb5\x7e\xdf\xdc\xa2\x7b\x7e\x3f\xf5\x9b\xd0\x45\xd2\x8e\x88\xd6\x9b\xd1\x04\xe2\x5f\xa1\x09\x2a\x00\x07\xbb\x57\x16\xc4\xdc\x4f\x3c\xf9\x1f\x0b\x12\x15\x72\x4f\x53\xb2\x66\xeb\xc7\xd0\x58\xe7\x5b\x05\x3f\xe6\x7d\x9e\x5c\x15\x54\x4a\x21\x04\x55\xf0\x06\x71\xb0\x8b\x70\xcb\x95\xce\xe5\xe8\xae\xda\x31\x5e\x22\x7b\x81\xf3\x19\xb3\x0c\xad\xb7\x4e\x1b\x71\x2c\x87\xf3\xe6\x1a\x6b\x6c\x1e\x59\x26\x0f\x42\x16\xc4\xc1\x7e\x6d\xad\x90\xd6\x08\xe6\x42\x92\x4b\x0d\x7a\x86\xc0\x9b\x87\x3c\x74\x5f\x04\x65\x38\x8c\xe4\x2e\x45\x49\xab\x4c\xf6\xe5\x9d\x68\x43\x47\xdb\x80\x38\xc4\x29\xa6\xe7\x0b\x92\x80\x3e\xa0\x90\xad\x15\x1c\x79\xdf\xbb\xb1\x72\x30\xfe\x53\x91\xc2\x4b\xac\xc0\xf9\xcb\xaf\x0f\x7e\x55\x67\xb5\x11\xf8\xdc\x26\xeb\xde\xc5\x69\x7f\x13\x86\xf8\xfb\x20\x0e\x76\x55\xf9\x65\x2f\x27\x0d\x84\x27\x3c\x1f\x56\x78\x85\x51\xbf\x24\x6e\x15\x7d\xeb\xf7\x31\xcb\x4e\xd9\xe4\x95\xcb\x1b\xaf\x4c\xed\xd4\xa0\x14\x3e\x88\x83\x5b\x0b\xe7\xe3\xfd\x87\x49\xe8\xca\x97\x3d\x7a\xf9\x73\x74\x25\x32\xa8\x64\xa9\xea\x88\x88\x1a\x48\x7f\xff\x16\x9e\xb5\x4e\x24\x81\xe6\x3c\x40\x1c\xec\x66\x59\x4b\x99\x12\xf6\xb0\xdb\xdf\x60\x58\x22\x32\x48\x54\xdc\xbf\x53\xd0\xe9\x48\x92\xf8\x2e\x56\xd7\x54\xdf\xf1\xd9\x18\xf9\x23\xe8\x11\x0b\xe2\x60\x17\x61\xd7\x88\x82\xfb\xcd\xae\xc3\xae\x0f\x31\x8a\x2a\xb7\xdb\x38\x9b\xc9\xd3\x54\xc6\x0f\x87\xd2\x0b\x17\x0c\xbb\xc3\x65\x77\x22\xa0\xe3\x0c\x40\x1c\xec\xd7\xee\x3a\x51\x9a\xbf\xc1\xf3\x1a\xe0\x3a\x6b\xb8\x23\xaf\x6b\x58\x1e\x6c\x73\xb8\xbf\x4a\x9e\x1b\xa3\x7b\xf6\x68\xf7\x71\x80\xf2\x24\xc2\x5a\x20\x0e\x61\xad\xf3\x05\x49\x40\x1f\xca\xc8\xd6\xfa\x3c\xb0\xe7\xce\x52\x76\xd9\xec\x29\xa5\xcf\xe7\x62\xab\xe6\x8b\xd1\x12\x64\x9e\x65\x96\x57\x44\x9a\x67\xf4\x71\xd8\x2d\xd6\xa0\x02\xa4\x20\x0e\x76\x55\x4b\x1b\x66\xe4\xed\x43\xf9\x19\xbc\xf4\xa8\x46\xaa\x15\x4c\x12\x5b\x16\x50\xde\xab\xce\xac\xe8\xfd\xd4\x4f\x21\x15\x6e\xa1\x36\x43\xc8\x82\x38\x98\xb5\xd6\x4a\xd3\x88\xa2\x03\xfd\xd1\x73\x0b\xd5\xaf\x47\xeb\x97\x3c\xad\x99\xb7\x26\x0c\xd8\xba\x2b\x9d\xc3\xa2\x9c\x40\x90\x2e\x7c\x15\x21\x0b\xe2\x60\x37\xab\x3c\x83\xf1\x64\x63\xfa\x9d\xee\x85\x5d\x9f\x6e\xc5\x2f\xea\x28\xab\x7e\xb8\x17\x55\xc8\x65\x22\x38\xb5\x47\x7e\x06\x49\x68\x09\x20\x64\x41\x1c\xec\x22\x1c\x3a\x99\x59\x8e\xf6\x90\x11\xcb\x74\x77\x56\xf1\xfd\x16\x56\x56\x72\xbd\x29\xf7\x8d\xec\x4d\x5a\xf8\x4f\xe3\x31\x0d\xab\x4e\x0b\x84\x2c\x88\x83\xfd\x5a\xb5\x37\x09\xef\xcb\x22\xd3\x55\x85\x6c\x1d\xa4\xb6\xad\xaf\xa8\x5e\x72\xc7\x0c\x68\x8d\x6f\xe1\xb2\x58\x79\xc9\xae\xfe\xab\x81\x03\x61\x2d\x10\x87\xb0\xd6\xf9\x82\x24\xa0\x01\xd1\xff\x58\xed\x2f\x7b\xd6\x51\x53\x5b\x1e\xc2\xed\x62\x6e\x58\x8e\x82\x7d\x9b\x54\xba\x58\xeb\x35\xe1\x7b\xdf\x7a\x3c\x81\xec\x07\x4b\xef\xef\x42\xab\xfd\x00\x0e\x76\x55\x95\xaf\xdd\xba\x72\x94\xab\x94\x45\x47\x7d\x5d\x2b\xe4\x3a\xf6\x7b\x6c\xed\x8b\x7c\x46\x9d\x83\x44\x03\xbd\xf9\x2c\xdd\xa3\xde\xd0\x39\xfc\x20\x0e\xbe\x3f\xf3\x91\xf8\x42\x04\x41\x51\x70\xa4\x9b\x5f\xf1\x4f\x51\xfb\xb1\xf6\x0a\x9f\x99\x41\xba\xc7\xe9\x2c\xfb\xdf\xc2\x62\x5e\xb3\x43\x15\x49\x40\x1c\xec\x66\xe1\xd2\xdb\x9f\x0c\x2f\x4a\xf8\x59\x99\xbc\xc4\x4d\x24\xa6\xb6\xdc\x5e\x29\xc9\x7f\x25\x92\x26\xce\xaf\xa3\x73\x70\x99\x78\x08\x3a\x29\x1a\xc4\xc1\x2e\xc2\xa7\x07\x39\xcc\xba\xcc\x4c\xeb\x2f\x65\x1f\x32\x96\xb5\x71\x76\x06\x5f\xcf\xbb\x64\xae\x66\xf0\x22\x59\x96\x64\x4d\xac\x58\x14\x9a\x56\x07\x71\xb0\x5f\xbb\xdf\xa7\x3d\x29\xca\xd0\x7a\x76\xf3\x9e\xdd\xf6\xd8\x87\x2b\x5a\xef\xcb\xdb\x09\xdf\xc4\xf5\xc6\x29\xde\x08\x19\x20\x27\x55\x86\x4e\x8c\x07\x71\x08\x6b\x9d\x2f\x48\x02\x1a\xf8\x22\x5b\x8b\x26\xea\xe1\x61\x8a\x80\x68\x60\xa0\x3d\x55\xe8\x52\xe8\xb0\x06\x89\x70\x5a\xd3\x47\x2d\xef\x5c\x67\xb9\x1a\x3d\xa3\x46\x26\xe8\xa1\x0d\xe2\x60\x57\xd5\x93\x53\x59\x3b\xb7\x79\xe1\x13\xa6\xff\x3e\xe6\xe4\x60\x72\xb6\x83\x57\xd2\xcc\x46\xf2\xc9\xd6\x34\x05\xdb\x52\xdb\xa5\x53\x28\x02\x09\xe2\xe0\x71\x70\xfa\xcd\xfb\x7f\x48\x86\xe3\xde\xfb\x72\x34\x5b\xf6\x7a\x91\xb2\x33\x7c\x35\x24\x5f\x67\xa3\x35\x34\x64\xbd\x20\x53\xea\x81\x09\xc5\xc1\x01\x1c\xec\x66\x05\xec\xa7\x72\x9a\x76\xde\x5c\x1f\x0a\xd6\x73\x0c\x59\x6d\x7c\x43\x1e\x87\x26\x9e\x8b\x93\xd5\x84\xb3\x25\xdb\x30\x44\xf4\x1b\xaa\x2b\x08\xe2\x60\x17\x61\x5e\xd1\x2c\x71\xf0\x7e\xdf\xd9\xd3\x88\x3b\xb2\x29\xb2\x5a\xa7\x7f\x06\x96\xa5\xb0\xe8\x6f\x3e\xc2\x2f\x19\x3b\x30\x5e\xf4\x82\x46\x48\x20\x0e\xf6\x6b\x59\x50\x85\x5b\x97\xff\x38\xac\xe5\x92\xdf\x4d\x39\xbb\xc3\xb8\x97\xce\xfe\x8e\xcd\xb6\xc1\xfe\x02\x9f\x96\xee\xaf\xfa\x5f\x4e\x4c\x08\x6b\x81\x38\x84\xb5\xce\x17\x24\x01\x4d\x70\x20\x5b\x8b\xeb\x24\xe8\x85\xbc\xdb\x0f\xf5\x9b\x6c\x28\x16\x78\x0f\x9c\xe3\xed\x3c\x13\xc8\x75\x1c\x84\x79\x42\x93\x7c\xf1\x96\xff\xdc\x86\x86\xc7\x20\x0e\x76\x55\x5f\xeb\xf2\xa7\xa5\xb3\x3c\x2b\x4b\xa5\x9c\xb1\x29\xd7\x70\x37\x92\xd1\xa7\x79\x6f\x9f\x68\xac\xd5\xf7\x4e\xe5\x28\xb9\x98\x02\xaa\x2d\x09\xe2\x60\xd6\xa2\x92\x11\x33\x75\x4f\x9b\x8c\xd6\x6c\xfa\x9a\xb3\xd7\x34\x19\xfb\xf6\x58\x62\x06\x3f\xfc\x4b\x15\xc6\x55\x31\x9f\x4f\x2b\x5f\xa0\xf7\x2c\x88\x83\xdd\xac\x63\x99\x0f\x1d\xf2\x37\x62\x49\x16\x79\xae\xd5\xbe\x26\xec\xcf\xd8\x0b\xe7\x25\x17\xe1\x0d\x4b\x56\x3c\xcb\xde\xfe\x9e\xfb\xea\x0c\x21\x0b\xe2\x60\x17\x81\x2a\x92\xb3\xd5\x96\xe7\xbd\xfe\xf5\xfc\x8f\xba\xe5\xa8\xe6\xce\x0f\xe9\x8e\xdd\x0d\x3c\x9b\x6e\x38\x1d\x78\x70\xc8\x3e\x54\x69\x80\x7e\x2d\x80\x83\xfd\xda\x34\xab\x29\xe5\xb1\x35\x15\xe9\x77\x98\x56\x9b\x4c\x77\x31\xea\xbd\x26\x54\x84\xd0\xd9\x26\xaa\x16\xb0\x95\xdd\x26\x5a\xb0\xde\x21\xac\x05\xe2\x10\xd6\x3a\x67\x90\x04\x34\x83\xfd\x4f\x90\xc4\x1b\x29\x48\x62\xa3\xd0\x6b\xc5\x2e\xf8\x3b\x56\x3c\xce\xba\x3e\xb7\xb8\x53\xfa\xa4\xe9\x3a\x8b\xc2\xe1\x20\x83\x69\xf0\x8d\xaf\x56\x4f\x06\x0f\xfe\x7e\xa2\x0f\x29\x48\x52\x81\x76\x3b\x4d\x7d\xb8\x18\xb7\x70\x3b\x61\xf6\xf3\x97\x30\x5a\x87\x5c\x83\x4a\xa7\x32\x49\xab\x62\x47\xcc\x47\x8b\x2f\xe5\xff\x3e\x48\xe2\x8d\x1c\x24\xb9\x2d\x5f\x42\xb3\xee\xf6\xe3\xe5\xc7\xba\xf4\xe3\x0d\xc3\xcf\xab\x57\xd8\xcb\xb8\xdd\x64\xfb\x3c\xab\xb1\x02\x55\x9f\x0f\x44\xff\x37\x73\x8b\xa0\x6b\x89\xdc\xc1\x3f\x29\x64\x3b\x4e\x85\x30\x8d\x49\xf7\x3b\x37\x79\xbf\x9c\x6e\x49\x8a\xc2\xcb\x64\x64\xe6\xfb\xf0\xdb\x30\x69\xc2\x16\xfd\xbe\x12\xf4\xea\x04\x70\x30\x6f\x0f\x6d\x8c\x9a\x30\xf9\x92\x55\x88\xd4\xeb\x0e\xd2\xeb\x3a\x39\x88\x4b\x85\xe2\x0f\x47\x6a\xf0\xe6\x17\x13\x5d\x88\xda\x79\x94\x87\x90\x05\x71\xf0\x42\x4e\xae\xd8\x7b\x2f\x5f\x8a\x3e\x50\xd7\x2e\xd2\xc4\xce\xe9\x78\xc0\x9f\x28\xc2\x74\xe2\x3c\xdd\xd8\x67\x20\xb3\xa1\xee\x2d\x01\x85\x91\x41\x1c\xbc\x6c\xc4\xbb\x28\x0f\x39\xa9\x7d\x6e\xe9\xdc\x14\x6a\xd2\x69\xfe\xf4\x82\xc5\x7d\x6e\x25\x7e\xd4\x72\x7b\x51\x4c\x5c\xd1\xca\xb0\x7c\xe8\xb3\x1f\xc0\xc1\x2e\x82\xdf\x83\x78\x3b\x06\xd9\x08\xec\xed\x65\xf3\x25\xbb\x9e\xeb\x47\x97\x09\x1f\xb5\xcb\x97\xfb\x4d\x47\xca\x50\x90\xcf\xcb\x47\x73\x21\x64\x41\x1c\xec\xd7\x6a\xf1\xe6\xb4\x4f\x65\x0e\x9b\xbf\xe2\xa1\x23\x12\xa4\x7f\x11\xda\x83\x83\x2e\xe1\xb6\x22\x70\x81\xf2\x9e\x77\xc2\xd6\xae\x76\x2b\xa2\x83\x83\x38\x44\x07\x3f\x5f\x90\x04\xd4\x67\x90\xad\x75\x6f\xd1\x56\xf6\xcb\x4f\x77\x6c\xf9\x9b\xa7\x37\x2e\xf6\x6e\xc6\x95\x5e\x4c\xe6\xb9\xd0\xbd\xfa\x82\x46\xbf\x41\x9d\x50\xf9\x35\x0e\xe2\xef\x83\x38\xd8\x55\x8d\x13\xbc\x36\xe8\xf4\x9a\xdc\x3d\xba\x3d\x91\xc3\x9d\xea\xe2\xb8\xaa\x20\xa3\xa7\x12\x65\xb9\x46\xb8\x17\x8b\x75\x0a\xc7\x29\xf4\xfd\x00\xe2\x60\xd6\xca\xe4\x20\x75\x35\x9b\xa1\x62\x58\x42\x57\x3f\x89\x29\x7a\x3c\x78\x23\xd2\x8c\x5b\x9b\xb5\xfd\xa6\x7b\xb1\x11\xb7\xb2\xb5\x39\x14\x7b\x01\x71\xf0\x53\x93\xe8\x73\xd5\x0a\xe8\xc5\x7e\x09\xd4\x30\xb2\x15\x4c\xe1\xaa\x60\x52\x50\xc7\x74\xa1\xaf\x63\x4d\xef\x67\x84\x79\x37\xe0\x7b\x20\x64\x41\x1c\xec\x22\x5c\x6b\xb6\x3c\xa8\x22\xb2\x78\x73\x3b\x42\xe9\xf4\xa4\x40\xb8\xf2\xf6\xa4\xb2\xbb\xa0\x20\x1f\xa5\x54\xcc\x53\x15\x1e\x1c\xfd\xdb\x08\x59\x10\x07\xfb\xb5\xd7\xba\xb7\xb6\x9a\xf8\x9c\x2f\xec\x18\x84\xbd\x57\x5c\x7f\x12\xc7\x9f\xe0\x11\xf4\x4e\xe7\x1a\x0e\x71\xc4\x70\xad\xe5\xde\xd4\x77\x84\xb5\x40\x1c\xc2\x5a\xe7\x0c\x92\x00\x9e\x8d\xc8\xd6\x62\xfa\x24\xb0\x74\x3b\xaa\xbc\x76\x4f\x67\x7f\xf0\x73\x11\xfb\x91\xda\xe4\x4e\x8e\xf4\xee\x8f\x50\x52\x31\x46\x0c\x1e\x4f\x73\x68\xb3\x2a\x88\x83\x1f\xf6\xbf\xca\x75\x98\xcc\x5c\x85\xad\xf4\xfa\x26\xe7\x58\x85\xae\x0d\x8b\x63\x85\x44\x0d\x13\xdf\x37\x9e\xac\x88\x51\xdb\xd4\x2d\xa8\x6a\x24\x88\x83\x59\xab\xed\xb8\x9c\x34\x71\x69\x78\x68\x5d\xc1\xd5\xf1\xbe\x80\x71\x2b\xf6\x46\x64\x76\xe1\xb2\x45\xe2\x2a\xd6\x59\x9d\x08\xbf\x01\x0a\xb4\x9f\x0c\xc0\xc1\x6e\x56\xbd\xc0\x09\xbd\xd8\x55\x3a\xa1\x88\xad\xb5\x02\x4e\xda\x5d\x87\xb9\xe7\x79\x01\xde\x11\x7a\x99\x0c\xbc\xf1\xe4\x56\x9d\x84\x17\x11\xb2\x20\x0e\x76\x11\x16\x75\x4e\x24\x8b\x4b\x36\xe8\xe6\x76\x2f\xcc\x07\x7e\x6f\x31\xa6\x99\xa4\xe6\xfd\x70\xe3\x94\x9d\xc8\x70\xf4\xe2\x91\x9c\x99\x0b\x94\xa4\x00\x70\xf0\x62\x94\xc3\x4c\x82\x0f\x8d\xdc\x97\xea\x6c\xaf\x3e\x71\x22\x3e\xa8\xe7\x2a\x1e\x77\xd5\x19\x3b\x95\xd4\x17\xc5\x58\x62\x30\x4c\xbd\x8f\xb0\x16\x88\x43\x58\xeb\x7c\x41\x12\xd0\x1a\x3f\xb2\xb5\x4c\x1b\xd4\x82\x1f\xb4\xfb\x60\x89\x6e\x26\x5b\xac\x6e\x71\xa7\x35\xf7\xf3\xb1\x86\xfb\xb2\x8c\xda\x11\x9a\xef\x4d\x73\x4a\x43\xe3\x74\x10\x07\xbb\xaa\x84\x2a\x73\x3e\x27\xb9\x4f\x7d\x17\xdc\x5f\xa5\x7f\x74\x93\xbb\xd9\xe8\xbb\x82\xfb\xa1\x1d\x9f\xdc\x6e\xe0\xbd\xca\x5a\x88\x34\x54\x8f\x15\xc4\xc1\xac\x45\x21\xc1\x4f\x37\x7e\x30\x7a\xff\x8d\x35\x4b\xa0\xc7\xd8\xed\x89\x94\x3a\x9a\x0d\xc5\x34\x17\x53\x94\x7b\x95\xbd\x81\x1a\x39\x50\xc1\x23\x10\x07\xdf\xa6\x76\xa6\x7e\xd3\xf0\x39\xd3\x52\xa6\xaa\x48\x3d\x01\xa7\xf8\xcf\xcb\x92\x77\xc4\x5b\x7c\xbd\x3b\x67\xe9\x47\xf8\x3b\xb1\xb4\xa0\xef\x73\x10\x07\xbb\x08\x1a\x0a\x5b\xc9\x62\xde\x61\x32\xf3\xa2\xc5\xb7\x23\xe9\x9b\x99\xbd\xf7\x96\x6a\xf3\x55\x0e\x0b\x05\x77\xe2\xfa\x0b\x94\xbe\x41\x35\xf8\x40\x1c\xec\xd7\x9e\xbb\x22\x49\x1f\x96\xd1\xbd\xd8\x5d\x99\x38\xc9\x5d\xdb\xa8\x27\xa1\x1d\x4a\xe8\x27\xa6\xfb\xa7\xca\x65\xae\xa3\x52\xb9\x17\x1f\x57\xa2\xf9\xfe\x3b\x48\xe2\x83\xf9\xf3\x8d\x0e\x8f\xf4\xa7\x67\x31\x32\x34\xf5\x46\xf6\xab\x5c\xb6\xd1\x33\x0b\x26\x71\x1e\x8f\x68\x1a\x73\xc3\xf8\xf3\xc4\xfe\x85\xea\x9b\x58\xb2\xfe\x7c\x65\x6d\xd7\xc5\x9e\xb2\x1f\x29\xc4\x37\x2a\x12\xed\x3c\xc0\xd8\x2f\xc0\x51\x1a\x17\x5a\x55\x2c\xf6\x8b\x05\x16\x24\x01\x29\x23\x07\x49\x44\xee\xb1\xa8\xad\x08\xc5\x47\x66\x0f\x7a\x46\x08\x37\x75\xad\x70\x04\x4d\x24\xf5\x37\x77\x9a\x1e\x31\x62\x5e\x0d\x38\x30\xfb\x77\x85\x83\xcb\x21\x19\xe4\x28\x4f\x36\x7c\x59\xca\xe6\x7e\xfd\x88\x92\x8a\x79\x7e\xe5\x7a\x5c\x45\xc1\x26\x31\x7f\xd5\x13\xdf\x8d\x96\xde\x77\x50\x90\x04\xa4\xf9\x4f\x90\xa4\x1e\x1e\x24\xa1\xa4\xc4\x09\x5a\x16\xf0\x17\x48\x2e\x18\xb9\xfe\x70\xce\x86\xb1\xf8\xfb\xb7\x3b\xbe\x8a\x15\x71\x2a\x57\xb2\xdc\x19\x23\x3f\x5c\xfb\xeb\x20\x49\x3d\x3c\x48\xa2\xd1\x55\xdb\x7f\x93\x12\x27\xa3\x0c\x87\xac\x7e\x35\x5b\x39\xe0\x73\x77\x6e\xe6\xdd\xdc\xe5\x88\xd5\x1c\x01\x7b\x9f\x7d\x13\xd4\xbf\xfe\x5a\xaf\x47\x0a\x92\xf8\x67\xe2\x7a\xf2\x5e\x7b\xf9\xfc\xd7\x96\x41\x17\x4f\x52\x69\xe1\x9b\xc3\x7c\x5b\xaf\x8b\x63\x4b\x78\x23\x4e\xe6\xf1\xc5\xea\xb1\x7f\xdf\x24\x52\x90\x24\x27\xc3\x36\x47\x76\x35\xeb\x8a\x21\x21\x9d\x45\xd9\xa3\x0b\xfa\x69\x36\xf2\x0b\xfd\x42\xc3\xf9\xb3\x7b\xae\x73\xd3\x76\xee\x7f\x3b\x40\x08\x96\xa8\x47\x0a\x92\x90\xf6\x74\xf1\xea\x05\x6f\xc6\x1e\x7e\x0c\xc7\x55\x16\x74\xe1\x45\x19\x67\x7a\x49\xce\x7c\xc1\xa8\x6a\xc9\xa8\xb0\x5a\x7a\x7f\xf9\xef\x9b\x44\x0a\x92\x44\x0f\x64\x16\xa6\xdf\x31\x26\x0f\x8e\x5f\xf0\xef\xe1\x38\x09\x4d\x2f\xf4\x19\x1e\x7e\x3c\x5e\xad\x44\xa1\xe5\xc8\x67\x16\x41\xf8\xf7\x4d\x22\x05\x49\xa8\x8e\xd8\x3a\x4c\xc7\x4e\xd6\xb8\xf6\xc8\x9b\x19\xb8\x5a\x71\xa5\x45\x58\x87\xbd\x5f\x7c\x9d\xfe\x69\x24\x92\x61\x91\x2c\xee\xf1\xf7\x4d\x22\x05\x49\x74\xb4\x48\xeb\xef\x5e\x0f\x8b\x78\x43\xed\x91\xa7\x5e\x62\x28\xc5\xd6\x99\xc2\x7a\xab\x59\xbe\x9d\xf9\x17\xe9\xd3\xe6\xb9\x3b\x5d\xff\xcd\x60\x0f\xd4\x13\x91\xdf\x6d\x2b\xdb\xe5\x0c\x5c\x6d\x6f\x6a\xf0\xba\xb9\xa8\x5d\x04\xc8\xe4\xa8\x6b\x5b\xdc\x3c\x57\xd8\xf0\x3c\x52\xd1\x07\xd0\x5a\xe9\xa1\xa3\x6d\x40\x1c\xec\xb1\xae\x9e\x9c\x3b\xe0\xdd\xd2\x2b\xc9\x67\xb2\xeb\x78\xd7\x52\x42\x88\x2e\xfb\xeb\xae\x7f\x13\xe3\xcb\x47\xbf\x5d\xcf\x1a\x6f\x2c\x42\xeb\x91\x20\x0e\xf6\x6e\x1b\x34\x42\x93\xfa\x7d\x5b\xe1\x97\xfb\x64\x62\xb3\x6d\xfd\x24\x76\x77\xc2\xd1\x8e\x86\x30\x36\x85\x90\x5e\x68\x7d\x88\xd3\x82\x3b\x42\x16\xc4\xc1\x64\xd9\xae\x29\xe9\x76\x3a\xe4\x14\xe1\x66\x5c\x1c\xd1\x4d\xee\xf3\x97\x75\xa5\x27\x17\x79\x50\x17\xa4\x2a\x98\x47\x48\x1e\x17\x51\x85\x90\x05\x71\x7e\xa2\xa8\xff\x96\xad\xcc\xb8\x8b\xcb\xf4\x85\xdf\x9b\x28\x74\x91\x33\x63\x40\x9a\x5b\x76\xd1\xea\x34\x61\xd7\xd5\x4c\xc2\xa4\x17\x4b\xa0\x4f\xaa\x1e\x21\x0b\xe2\x60\xef\xb6\xcb\x1f\x46\xb4\xc8\x15\xf8\x65\xee\x38\xd3\xa4\x30\xb9\x06\x44\xd6\x8f\x5e\xf8\xfe\xb5\x57\xfa\xe0\x53\x56\x94\xd6\xc4\xb3\x36\x6c\xc4\x72\x3f\x88\xfb\xa7\x6e\x44\xfd\xb9\x82\x24\xa0\x27\x2e\xb2\xb3\xc8\x95\xc4\x94\x0f\x5d\x5f\xb6\xac\x3f\x3b\x73\x3e\x8e\x13\x64\xe8\x2f\x6c\xe5\x73\x2a\x91\xc3\xd4\x6b\xe0\x0a\x20\x51\x23\x87\x96\x23\x41\x1c\xcc\x59\xc7\xa6\x7c\xfb\x05\x38\x3e\x31\xd2\xa3\xd8\x0c\xdc\x24\x33\x46\x32\x41\xb6\xca\x43\x5a\x33\x6d\x24\x43\x31\x68\x8b\x65\xa1\x03\xd0\xcc\x1b\x80\x83\x59\xa0\xd4\xb1\xb2\x88\x92\xa0\xa2\x84\xaf\xeb\x99\xdc\x49\xc5\xcb\xcb\x21\xaf\xbf\xf3\x48\x3f\x90\x7f\xa0\xf1\x32\xf2\x11\xed\x43\xf9\x5d\x68\x3d\x0e\xc0\xc1\x8f\xf4\xe8\xbe\x46\xe5\xea\xaa\xb3\x81\x7f\x6f\xa6\x5d\xaf\xec\xb0\xc3\x7f\x4d\x3e\x76\xdd\xba\xf4\x8f\xfc\x25\x91\xbd\xd7\x39\x3a\x50\xbd\x75\x10\x07\x73\xd6\xc4\x46\xc7\xf5\xa2\x88\x41\xae\xf9\x5f\x6f\xb0\x22\x82\xd4\x9e\x0f\xf9\xde\x09\x2a\xd6\x51\x95\xb7\xfd\x96\xd0\x23\x25\x94\x06\x6d\x38\x03\x71\x30\x67\x55\x24\xe5\x97\xfe\x20\xb7\x09\x53\xd3\xe8\xbf\xff\x6b\xc3\x86\xe8\x57\x1a\x7b\x19\xfd\x9d\x54\x85\x96\x82\x83\xf0\xd3\x17\xcc\x73\x08\x67\x81\x38\x84\xb3\xce\x15\x24\x01\xbd\x58\x91\x9d\x75\x2a\xa4\xf6\x2e\x9b\xab\x91\x89\xf8\x94\x07\x1f\x73\x9d\x98\x8d\x6c\x95\xe0\x0f\xa1\xa6\x4b\x6c\x7d\x63\x6d\x63\x3a\x86\x2c\xb4\x6c\x08\xe2\x60\xce\xaa\x1f\x67\xdd\xba\xf1\xd4\x9c\xd7\x3a\x46\x4a\xcb\x72\xd5\x53\x8a\xd5\x2c\x8e\xfb\x13\x1b\x1a\xd6\x8d\x0d\xf3\xa5\x8a\xef\x3b\x50\x49\x4f\x10\x07\xb3\x00\xa9\x5f\x69\xd1\xc8\x24\x8b\x46\x59\x8f\x2c\xb7\xa3\x22\x2a\xe9\x4a\x56\x18\xf6\x42\x3b\x13\x0d\xdd\xbd\x52\xc9\x3d\xd5\x6b\x50\xad\x1b\x10\x07\x93\x75\xb1\x48\xfb\xc1\xdc\x68\x1f\x4d\x46\xfa\x5e\x18\x9b\x71\x52\x63\x43\x48\xac\xc4\xcd\xfe\x76\x25\x19\x3b\xbd\xa3\xbb\x02\x2f\x94\x4f\x01\x71\x30\x67\xcd\xbe\x8b\x0e\xbc\x5c\xec\xfb\xc9\xea\x7d\x2f\x49\xa9\xce\xe8\xc9\xf1\xeb\x82\xc0\xc3\x84\x3c\x2f\x0f\xea\x9b\xb3\x2a\xe6\x3f\xa1\x18\x3a\x88\x83\x39\xab\x98\x9a\xe8\xfd\x2f\x0a\xac\xf4\xb1\x3a\x94\xbb\x3d\xcd\x2d\x11\x6c\x66\x6e\x5a\x43\xa3\x47\x07\xda\xbc\xdf\xab\x7a\xfc\xf1\x3f\x21\x86\x7a\x20\x0e\x71\x8a\xe9\xf9\x82\x24\xa0\x0f\xa8\xff\xb1\xda\xff\x1a\xfd\xb7\xf2\xa8\x92\x14\x6e\x48\xbc\xc5\xbb\x2f\xea\x6d\x76\x54\x9d\xef\x74\x17\x4d\x14\xf8\x8e\x0d\x9d\x3e\x11\x4a\x42\x4f\x17\x10\x07\xb3\xd6\x08\x9d\xa1\x0b\x1d\x75\x56\xf4\x13\xeb\x92\xde\x8b\xad\x74\x79\x02\x6d\x47\xbc\x58\x5f\x30\x04\xb0\x6f\xad\x5c\x5a\x50\x2d\x84\x5e\x87\x20\x0e\xe6\x81\xd7\x97\x8d\x46\x9d\xa9\x36\x52\xac\x56\x2a\x76\x76\x22\xc8\x48\x7e\x77\xa0\xe6\x3e\x2a\x8b\xae\x7e\xea\x3e\x2a\xf6\x47\x23\xf6\x12\xb4\x66\x02\xe0\x60\xb2\xf6\xdb\x53\xe8\x6f\x5c\x26\x2b\x99\xdf\x4e\xfe\xd1\xe3\xe8\xd4\x0b\x8e\x49\x22\xf9\x13\xb0\x76\xb2\xd3\x1a\xfc\xca\x2f\x9e\x59\x1f\x21\x0b\xe2\x60\xd6\x6a\x6b\xf1\x9a\xf3\x58\xaa\x27\x42\x1f\xa0\x72\xe3\x9d\x39\xb4\x73\xa2\x68\x17\x4e\x6a\x79\xbd\x7d\xa5\x75\x92\x3d\xc4\x73\x18\xba\xb6\x20\x0e\x66\x2d\x0c\x5c\xd1\x40\x82\x0d\xfb\x30\xe6\xe7\xec\x4f\x8d\x68\xae\x8c\xf2\x7b\x98\xed\x57\x2d\xa2\x86\x36\xe8\x11\x3f\xd6\x21\x3c\x75\x42\x58\x0b\xc4\x21\xac\x75\xbe\x20\x09\xe8\x43\x19\xd9\x5a\xbf\x55\x2b\xd0\xfb\xcb\xd7\x38\x54\x9d\x8e\x2d\xd6\x23\x6b\x0e\xa8\x8e\xb0\xec\x0f\x0b\x09\x4c\xa9\xdc\x0f\xa9\x9c\xbb\xa8\xa1\x22\x6d\x20\x0e\x66\x2d\x1e\x67\xb7\xfd\x46\x8d\x17\xad\xea\xe6\x57\x64\x6f\x5c\xa2\x38\x0a\x3c\x42\xcf\x10\x5d\xa1\x74\x92\x58\xfb\xd8\x84\x52\xae\x03\x9d\x66\x0c\xe2\x60\x1e\x78\xcf\xb4\x9c\xaf\x80\x37\x5c\xa5\x3d\xb5\x1b\x6b\x48\x71\x12\x10\xac\x64\x44\xab\xf8\x21\x80\x65\xf7\x90\xbc\x2a\xf3\x77\x2c\x54\x91\x1b\xc4\xc1\x64\x53\xc3\xbe\xd9\xf3\x4b\x19\xf7\xde\xd7\xa1\x6c\x1a\x6f\x6b\x22\x7e\xd4\xb6\x25\x45\x5f\xc7\xf6\xbc\xee\xed\x0d\x11\xf1\x78\x62\x4b\x84\x2c\x88\x83\x59\xab\xf3\xdd\xd3\xdf\xb7\xce\x2a\x32\x3e\x11\x64\xc9\x2c\x10\x17\xdd\x9c\x5b\x11\x96\xd5\x4b\x5a\x7d\xd1\x7e\xd5\x4b\xcf\x9f\x70\x24\x1d\x21\x0b\xe2\x60\xd6\x3a\xd0\x7c\xbc\x52\xe7\x5c\x4b\x37\x11\x1d\xe1\x37\xcd\x6a\x1a\x62\xfa\xea\x8c\x73\x62\xbb\x2b\x46\xa9\x7d\xce\x71\xea\x80\x48\x1f\x61\x2d\x10\x87\xb0\xd6\xf9\x82\x24\xa0\x01\x11\xb2\xb5\xdc\xcc\x2e\xdb\x24\xf5\x7c\x14\x16\x96\x09\xf8\xfd\xc1\x35\xbb\x52\xd1\xaf\xdb\x9a\x41\x99\xd8\x6a\x15\xfd\x5a\x9f\x66\xc9\x61\x13\xe2\xef\x83\x38\x98\xb5\x2e\x0a\x17\x89\x65\x2c\x60\xa3\xda\xaa\x0a\xb4\x3e\x97\xfb\xdd\xc6\xcb\x2a\xaf\x37\x85\x46\xe7\xed\x2b\xc2\x6d\xc9\xc3\xc9\x0b\xdd\x2c\x10\x07\xf3\xc0\x14\x4b\x7e\xaf\x50\x5f\xa9\xfe\xbc\x09\xc7\xce\xaf\x96\xe0\x6e\x35\x4e\xcd\x81\xb3\xc3\x53\x5c\x47\x41\x51\x1a\x87\x75\x19\x28\x05\x0b\xe2\x60\xb2\x95\xb3\x09\x32\xcf\x8c\xfb\xca\x99\xd4\xae\x1d\xe6\xd1\xb3\x2a\x7d\xfa\xce\x64\x27\xb1\x33\xa5\x23\x2c\x31\x23\x78\xe7\x97\x23\x74\x94\x22\x88\x83\x59\x0b\x5b\xab\x1c\x35\xed\xf6\xd7\x53\x99\xe0\xf1\xbc\x22\x0a\x8e\x00\x8c\xeb\x0d\x4a\x94\x92\x27\xa6\x98\x69\x56\x22\x07\x35\xd8\xd0\x00\x09\xc4\xc1\xac\x15\xc5\x72\x89\xaa\xc7\x5f\x41\x17\x63\xd1\xce\xce\x8b\xa6\xf2\xb1\xc2\x43\xd1\x30\x87\x17\xb2\xd3\xf8\x26\x81\x9d\x9e\x9d\x63\x17\x11\xd6\x02\x71\x08\x6b\x9d\x2f\x48\x02\x1a\xf8\x22\x5b\x6b\xd2\x5c\xee\x4c\xfd\xea\xfc\x87\xe1\xd3\x58\x73\xef\xc8\xa1\x1f\x61\xc7\x9e\x43\xaf\xb6\x27\xd5\x04\xdf\x9a\x4c\x29\xbb\x73\x43\x15\xca\x40\x1c\xcc\x5a\x89\xf5\xa3\x61\xb9\x82\x53\x6b\x71\xef\xaf\xfa\xf4\xb6\x3f\x0a\x22\xfb\xc3\xac\xc2\xf3\x88\xf1\x43\x20\x7b\x7e\xf8\xfc\xad\x1b\x50\x65\x22\x10\x07\x2f\xd6\xf8\x87\x73\x5a\x85\x39\x15\x8f\xdc\x54\x46\x71\x3d\xa5\xec\xf9\x89\x78\x4d\x54\x51\xd2\x2b\x91\x8f\x39\x01\x71\xc7\x83\x64\xd0\x33\x16\xc4\xc1\xb7\xa5\x4d\x91\x92\xfc\x31\x26\xe8\xcf\xde\x44\xef\xe5\x0b\xbb\x25\xda\xc4\x14\xa2\x6b\x96\xb3\x4b\xdd\xec\x4a\xab\xdd\xbd\x1b\x0e\x95\x65\x01\x71\x30\x6b\xe9\x25\x2e\xe1\x7a\x36\xd3\x26\xa0\xb9\x30\x15\xa2\xdf\xd1\x68\xb1\xab\xeb\xb4\xfe\x4d\x32\x25\x49\x20\xb8\xf3\x1d\x67\xb7\x3d\x02\x21\x0b\xe2\x60\xd6\xb2\xcb\xdb\xbe\x35\xf7\x8c\x51\x36\x6f\xb0\xd1\x34\x7a\xed\x8b\xfd\x95\xe9\x03\x4d\x22\x09\xc5\xee\x78\xfb\xb8\x46\xdc\x94\xcf\x50\xf5\x37\x10\x87\xb0\xd6\xf9\x82\x24\xa0\x09\x8e\xff\x51\x43\xfe\x4c\xed\xdd\xcf\x2a\x93\xd5\x6e\x52\x9e\x9b\x3f\x33\xef\x06\xbc\xbb\x29\x90\x85\x65\xf8\x65\xca\x2e\xb9\x65\x73\xff\xa8\x07\x1a\x72\x81\x38\x98\xb5\x50\x27\xee\xd3\x70\xdb\xc6\x79\xca\xd9\x68\xed\x0c\xf2\x6a\x06\x79\xe3\xcc\xb4\x88\x4d\x98\x7c\xfd\x88\x3e\x7e\x22\x4b\x77\x21\x01\x21\x0b\xe2\xe0\x07\xca\xf2\xcb\x35\xee\xcf\x99\xb5\x2d\x29\xf2\xdd\x44\xfb\xfe\x58\x3d\x70\xcd\xc5\xd3\x96\x34\xd1\xd7\xc3\x2e\x94\x90\xc7\x21\x1f\x2a\x1f\x03\xe2\xe0\x87\x31\xa1\xcc\x12\x30\x26\x60\x16\x91\x2e\x48\x17\x38\x66\xfb\xbf\x4f\x7f\xc3\xe0\x17\xcb\xb7\x97\xef\x9b\x27\xea\xd1\x1a\x4c\x09\xd5\x29\x03\x71\x30\x6b\x7d\xe9\xdd\x74\xde\x6b\x7b\xea\x7a\x76\x5b\x8a\xdc\x05\x2f\xd0\xe1\x4c\xbc\x60\x33\x6e\x40\xd7\xf8\xa3\xfa\x99\xd9\x28\x63\x24\xb4\xd0\x0a\xe2\x60\xd6\x2a\x55\xd2\x9a\xda\x28\x28\x6e\xb7\x96\xd2\x63\x3f\x13\xb3\x88\x3a\x35\x4e\xcc\xf0\x68\x42\xb3\xe2\xb2\xcd\xb9\xa6\xfd\xe8\x0a\xb4\x62\x03\xe2\x10\xd6\x3a\x67\x90\x04\x34\x83\xfd\x4f\x90\xa4\x1e\x29\x48\xf2\xf2\x95\xbb\x0e\xd6\xfd\xa8\x6f\x7f\xfc\xe2\x5e\x54\x2b\x0d\x73\x8a\xfd\x79\x4f\xe6\x83\x16\x61\x77\xf9\x23\x1b\x73\x7b\x87\xe3\x7f\x30\xb7\x88\x14\x24\x21\xd1\x4f\x96\x6c\x26\xde\x47\x49\xad\x76\xfe\x92\x9a\x7b\xb5\xba\x9d\x9e\x8a\xe8\x9d\x99\x37\xbe\x63\xf0\x05\xad\x70\xad\x5d\x8a\xbf\x6f\x12\x29\x48\x52\x19\x49\xd7\x78\xe7\xfb\x74\xe7\x82\xbf\x44\x92\xde\x78\xe4\x26\x7d\x75\x4d\x74\x46\x9b\x40\xa0\x49\xe6\x3b\xc6\x38\x7f\x0d\xf9\xff\x66\x6e\x11\x74\x2d\xff\x47\xa1\xb4\x4b\xe5\xc5\x5f\x5c\x2b\x0c\x31\xd4\x8a\x3a\xb8\xdd\xb6\x63\x39\x04\x32\xd0\x1f\x7a\xd1\x65\xbe\x89\xa0\x27\x10\x24\x88\x29\x44\x98\x10\xc4\xc1\x3a\xf8\x87\x94\xbb\xe9\xf6\x03\x54\x47\xf1\xe1\x34\x09\x07\xaf\xa7\xe8\x35\x5d\xe3\xfc\x15\x37\xb2\x89\xf7\x56\x75\x96\x24\xb7\x31\xa0\x13\x73\x40\x1c\xac\x27\x86\x73\xd4\x30\x4e\x5f\xc3\x7b\x95\xd6\x4d\x76\x66\xe7\xe7\x6f\x20\x40\x8e\x87\x46\x3b\xf6\x22\xf7\xe2\x6a\x0c\x96\x33\x5f\x32\x31\x42\x16\xc4\xc1\x64\x93\x1b\xac\x22\xf0\x8c\xc5\xd1\x66\x97\x52\x87\xb6\x5a\x3d\xac\x69\x2e\xf7\x58\xea\xbc\xe2\x1f\xa9\x1a\x8e\x0f\xf1\x2c\xb4\x69\x44\xc8\x82\x38\x58\x07\x97\x48\x7a\x42\xfa\xca\xfd\xe1\x6d\x72\x4f\xc2\xd7\xba\xae\x4f\x3b\x92\x87\xc7\x59\x79\x5e\x4a\x28\x89\x24\xd5\xe7\xbf\xbf\x78\xe7\x16\x54\xc9\x08\xc0\xc1\x6b\x6f\xe5\x39\x61\x16\x48\x87\x8b\xbd\x58\xfa\xf1\xc7\xae\xda\x24\xb2\x27\x31\xb0\x70\x1e\x55\xe6\xb5\x85\xd5\x2e\xdf\x2a\x5d\x57\x12\xa2\x83\x83\x38\x44\x07\x3f\x5f\x90\x04\xd4\x67\x90\xad\x15\x85\xb1\xe3\xf7\x67\x0d\x4b\xa3\x81\xc7\x7e\x9a\x07\x75\xd4\x51\xd1\x2a\x94\x6c\xfa\x7a\x8b\xc3\x98\x8c\x21\x49\x4f\x4a\x24\x34\x05\x04\xe2\xe0\x81\x74\x2f\x01\xca\x12\xdc\x97\x8e\x24\xa2\xa2\x45\xd1\x2a\xf1\x74\x73\xeb\x15\xa8\x2d\xb5\x8f\x8f\x62\x05\x74\x86\xbe\x73\x14\x52\x40\x81\x74\x00\x07\xf3\x00\x7b\x36\x43\xbb\xc6\x7c\xe0\xe5\x3f\x94\x7a\xce\x23\x9d\x2d\x2f\x5c\xc7\x97\xe6\x4d\xc2\x4e\xcc\xdb\x6e\xe9\x1f\x3c\x63\x26\x83\x8e\x21\x06\x71\x30\xd9\xdf\x3f\xb4\x54\xc4\x32\x9d\x9d\xaa\xc8\x02\x94\x5b\xe5\x76\x1a\xc8\x7f\x4d\xc7\xf2\xac\xde\xf8\xf0\x2d\x24\xe8\x2c\x86\xb4\xf3\x2d\x34\xa2\x04\x70\x30\x6b\xc9\xa1\x9d\x39\x34\xbe\xbe\xdb\x4c\x44\x6a\xfc\x7b\xb1\xcf\x4e\x2d\x2a\x59\xb8\xbd\xc8\x53\x7d\x3b\x00\xef\xeb\x51\xab\x10\x0d\x54\x9a\x07\xc4\xc1\xac\xe5\xf7\x74\xc6\xc0\x9f\x95\xa5\xe4\x11\xef\xa7\x77\x77\xb2\x66\x51\x2f\x26\x6e\xdf\xa0\xae\x46\xe1\x7a\x1a\x94\x9f\xf5\xe9\x70\x99\x10\x61\x2d\x10\x87\xb0\xd6\xf9\x82\x24\xa0\x67\x23\xb2\xb5\x4a\x32\x3c\x6a\xc6\xbf\xc5\x5c\xf7\x0b\x69\x2d\x70\xfa\x3c\xe5\xc7\x7f\x2c\x25\xda\x3f\x67\x40\xca\xf3\xb0\x34\x6d\xa8\x15\x17\x3a\x81\x17\xc4\xc1\xac\xc5\x7e\x42\xfe\x4c\x4b\x01\xd3\x5b\xb1\xbe\x98\xbe\x2d\xd2\xf6\x96\xfc\x90\x95\xe1\xb8\x0f\x63\x80\x5c\x8b\x97\x7d\x74\xbf\x1d\x64\x2d\x10\x07\xf3\x40\x94\x75\x18\xe5\xdb\xae\x86\x0b\xcc\x5a\x18\xda\x55\xba\x61\x55\xa6\xa9\xc4\xf1\xeb\xcc\xbd\x61\x5f\x6d\xc9\x8f\x18\x25\x45\xc4\xa0\x8e\x00\xe0\xe0\x87\x26\xe7\x07\xf0\xfc\x0e\xcb\xb1\x3a\xfa\x8c\x5f\x73\x4d\x00\xe3\x15\xfb\xc5\xc9\x43\x65\x9b\x56\xc1\xd9\x4a\xf1\xac\xe0\xe7\x55\x50\xff\x02\x71\xf0\x15\x11\x1c\x37\x1d\x1f\x35\xee\x17\xcb\xdf\x99\xde\x3d\x2a\xd9\x0f\x9f\x72\xfd\x32\x2b\x40\x7f\xe8\xe1\xfa\x89\xf9\xc0\x6e\x7f\xaf\x13\x1a\xa3\x01\x38\x98\xb5\x42\xe8\x3e\xdf\xce\x4a\x69\xbb\x28\x67\x29\x71\x37\xb7\xdf\x46\x6e\x5a\x4b\xb3\xe1\x9b\xcc\xf3\xf0\xa7\x9f\x2c\x83\x79\x0b\xc8\x25\x10\xd6\x02\x71\x08\x6b\x9d\x2f\x48\x02\x5a\xe3\x47\xb6\xd6\x92\x6f\xf8\xa4\xc9\x68\x44\xba\x5f\xd8\x97\x1d\x71\x52\xbd\xb8\x78\x06\x81\x8f\x35\x27\x5d\xed\xf7\xd6\xb9\x71\x74\xaf\x56\x73\x20\xfe\x3e\x88\x83\x59\xcb\xd8\x70\xb8\x99\xba\xef\xa9\x89\x81\xbe\xeb\x55\x19\xc3\x92\xd5\x85\xa9\x97\xb7\xd1\x03\xc4\x82\x5e\x27\xdc\x5a\xef\xa2\xa1\x86\x4a\x69\x83\x38\x98\x07\xb2\xb9\x2c\x6d\xc8\xae\xb8\xd5\x06\x0c\xcc\xf5\x27\xaa\xbd\xb9\x25\x68\x47\x28\x68\x7e\xc9\x91\xe8\x30\x43\x4b\x6e\xe7\xc7\x57\xc8\x03\x20\x0e\x26\x1b\xef\x88\xf3\x1d\xb5\xe9\x46\x45\x72\x91\x45\xd8\xbb\x77\xdf\xbc\x8c\x8d\x3b\x28\x0f\x9c\x7d\xb7\xd8\xb7\x9f\xb6\x7e\x57\xd4\x7f\x81\x90\x05\x71\x30\x6b\xa1\xa1\xa4\x2d\x6b\xb3\xe5\x58\x7f\x50\x0b\xd2\x0f\x5e\x2e\x67\x31\x59\xc0\x95\x74\x2d\xbc\x3b\x43\x3d\x24\x63\xce\x9e\x40\xa7\x85\x90\x05\x71\x30\x6b\x9d\xbb\x22\x49\xdf\xb5\xf8\xb7\x8b\x9b\x94\x4e\xbf\x4c\x4d\x65\xb1\xdf\xa2\xdc\xca\xa6\x2a\x78\xfa\x7e\x19\xd7\x12\xb5\x7c\x48\xf0\x56\xba\x3e\xe1\xbf\x83\x24\x5e\x0c\xd8\x37\x70\xf2\xa3\x95\xa2\x57\xed\x96\xb8\xa3\x63\x67\x7a\xd1\x4b\x0b\xd8\x3e\xd7\xc9\x71\x17\x7e\x52\xbf\x13\x53\x76\xf7\x5f\x68\x93\xd5\xa3\x92\x82\x7e\x82\x14\xaf\x14\x89\x4f\xc5\x2e\xcb\xf5\x39\x9f\x79\xbb\xaf\xc7\xed\x3c\x9b\x73\xf1\x22\x1e\xfe\x2d\xf6\x1e\x16\x24\x01\x29\x23\x07\x49\xbe\x5c\x94\x15\x5a\x74\x0d\x69\xef\xe1\xcf\xbb\xdf\x41\xa2\x6f\x49\xab\x2c\xf7\x63\x85\x2c\xf5\xe8\xdb\xfd\xa1\xa5\x74\x89\xeb\xa4\xff\x8e\x00\x75\xd8\xfb\xb3\x3c\x58\xc3\x23\xc1\x16\xbe\x98\x3e\x8b\xe1\x34\xb8\x35\xed\x2b\xc0\xf9\x15\xc7\xb6\x57\xfc\x8c\x45\x00\x45\xc5\xbb\x11\xe3\x7c\x9a\xff\x04\x49\x50\x24\xe0\x1f\xb2\x5f\xe9\x0e\x2d\x2c\x33\x79\x92\x7e\xcf\x49\x3c\x9c\xd6\x17\xc0\x5a\x36\x89\xa5\xb5\x21\xae\x20\x70\xd8\x0a\x55\x97\x3b\x5e\xff\xeb\x6f\x67\x14\x76\xa4\xf4\x81\xbf\x52\xda\x90\x4d\x6f\x4c\x4a\x48\xd0\xf1\xfe\xad\xad\x8a\xbb\xfc\x9a\x7b\x62\x87\x7d\xbd\xb1\x59\x37\xa3\x14\xb0\xd3\xd0\xff\xbe\x49\x01\x78\x93\x37\x3b\xfa\x28\x7e\x25\x08\x95\x37\x90\xbe\xc8\xaf\xa9\xee\x61\xf3\x69\xc9\x3e\x32\xbe\xd2\xd5\x53\x47\xeb\xd5\x95\xe6\x8a\x52\xf0\xf7\x4d\x6a\xc2\x9b\x9c\x09\xb1\x58\x52\x2f\xcb\x8e\xfc\xce\x7d\x64\x34\xf0\xc9\xaf\x87\x9a\xa4\x6b\x39\x94\x38\x51\xe8\xd6\x6c\x84\x75\xd8\xd7\x70\xad\xbf\x6f\xf2\x39\xbc\x49\x54\x5d\xab\x88\x38\x81\xc1\x03\xf1\xd2\xf0\xe2\x13\x74\xd6\xfe\xd4\x51\x95\xa7\xf2\x62\xf6\xd1\xbf\xd9\xc5\x0f\x70\x0b\x93\x3f\xff\x7d\x93\x6f\x90\xea\x4f\x36\x11\x2f\x94\xf5\xde\x61\x3b\xa5\x7b\xfc\x2e\xb0\xa8\xaf\xfb\x68\x44\x96\x29\x61\x6d\x46\x26\xe1\x11\x9b\x40\xd0\x4a\xbe\xdb\xdf\x37\x99\x08\x6f\x12\x57\x5e\x37\x71\xe7\x06\xde\x1f\xfa\xe3\xc9\xf2\xa9\xb1\x4e\xc7\x42\x86\x28\xb9\x2d\x75\xf4\xaf\x0d\x4a\xc4\xcf\xaa\x7c\xc3\x6d\xfe\xbe\xc9\x4a\x78\x93\xb9\x61\x9f\x68\xd9\xce\x36\xc7\x28\xf0\xf3\xc6\x28\xe8\xab\x72\x33\xdf\x93\xd1\x07\x84\x3f\x29\xd2\xb8\x6d\x73\x3b\x3a\xfa\x15\xf7\x7f\x33\xda\x03\x75\x45\xe4\x97\xdb\xc3\x84\x84\x03\x76\xb4\xa1\xab\x53\x51\x2e\xad\xfa\x82\x8d\xbe\x19\xcf\xce\x1a\x5a\x8f\x3d\x2e\xd1\xbd\x32\x96\x37\xff\xca\x02\xad\xf7\x83\x38\x78\x49\x92\xe6\xab\x96\x39\x0e\xba\xcd\xfa\x6e\x9a\x24\x71\x69\x17\x5e\x30\xd6\x68\x58\xe1\xf7\x3a\xa4\x88\x55\x11\xaf\x38\xa7\xd9\x40\x91\x56\x10\x07\x7b\x0b\x75\xf4\xbe\x9b\x26\x20\xd0\x62\xfc\x2e\x86\x3f\xb6\xad\x43\xc7\x57\x6a\x74\x35\x54\xa7\x73\x77\x25\xa9\xbe\x63\x01\xfd\x64\x5d\x07\x21\x0b\xe2\xe0\xfb\x6f\x6b\xee\xfc\x68\x16\x7a\x7d\x47\xc5\xfc\xf6\x7d\x9b\xab\x4a\x73\x8f\x30\x55\x26\x7a\x99\xc2\xaf\x92\xa8\x8d\xd4\xfe\xc9\x30\x84\x36\xa2\x83\x38\x3f\x51\xb4\x7f\xcb\xd6\xd0\x56\x8f\x70\xd7\x16\xd5\xea\xf5\x10\x06\x89\xf6\x98\xda\x28\x25\xf5\xf8\x2b\x10\x6f\xde\x67\x17\xe1\x70\x6a\x4f\xfe\x2e\x8f\x90\x05\x71\x30\x59\xe3\xa1\x60\x62\x1f\x92\xa6\xec\xdc\x49\xee\x4d\xbe\xce\xa7\xf4\x01\x22\x2e\xe3\xc7\x09\x59\xe1\x0c\x97\x4b\x8d\xca\x7d\xdd\x22\x10\xeb\xfd\x20\xee\x9f\xc2\x11\xff\xff\x3c\x3f\xc7\xf2\x06\xe0\x89\x8b\xec\x2c\x99\x9c\x00\x14\xaf\x04\xe1\x86\x3d\x35\x95\x15\x27\x7d\xd5\x10\xb1\x9b\x28\xa3\x3b\xdd\xac\x57\xae\xba\xf1\x9b\x89\x58\x52\x7d\x43\xfc\x7b\x10\x07\x73\x56\xbc\x16\x83\xc4\x67\xbb\x68\x9a\x31\x47\x0d\x6e\x05\x93\x3b\x53\xea\x73\x7a\xf4\xf4\xfe\xad\x14\x5f\xe4\x51\x3e\x5d\xef\xe4\x96\x82\x3e\x44\x00\x1c\xcc\x02\x13\xa9\x4b\xb6\x8e\x54\x76\xf7\xaa\x62\x89\xff\x64\x7c\x94\xe6\xc8\x31\x5b\xba\xfe\x2a\x67\xa6\xc4\x97\xfd\x5b\x88\xf0\x9a\x33\xb4\x7a\x0a\xe2\x60\xb2\x7d\x8e\x41\x74\x8d\x1b\x9b\xe1\x75\xae\x97\xf3\x64\x3f\x9a\xa2\x78\x50\x55\xe0\x5d\xcf\x90\xc6\x17\x25\x6d\x63\xe6\xfe\xd4\xe7\x83\x90\x05\x71\x30\x0b\x5c\x69\x37\x2a\xbd\x7c\x17\x97\xb5\xc3\x7c\x99\xfa\x04\xdb\xee\xd9\x0d\xd7\x1e\x9f\x8c\xba\x93\xfb\xb5\x11\xd9\xc5\x26\x26\x2f\x99\x11\xb2\x20\x0e\x26\xbb\x37\xf3\x09\x35\x7e\x31\xed\x59\x04\xb9\x62\xa7\xee\x87\xbd\x4f\x9a\xc7\x85\x86\xa2\x89\x9d\x5b\xee\x8b\x8e\xd3\x11\x6a\x75\xab\x88\x2f\x72\x10\x87\x38\x6c\x92\xfd\x5c\x5f\xe4\xa0\x37\x2b\xb2\xb5\xc6\x27\x5b\x7a\x2e\x1f\x38\xbb\xf8\xc6\xee\x0b\x5c\x56\xff\xa6\x7d\x60\xa0\x85\x22\x35\xb3\xf9\xcb\x07\xb7\xf2\xe0\x84\xfd\xf0\x15\xe2\xef\x83\x38\x98\xb5\xd4\x2a\x88\x72\x5e\xff\x2a\x1f\x22\x62\xfb\x48\x9f\xdc\xe7\x7c\xdf\xe9\xb9\xb5\x2d\xdd\x8d\xfc\xed\x1f\x1c\x73\x36\xf3\x0f\xcd\x18\x11\xb2\x20\x0e\xe6\x01\xc9\xbb\x7e\x56\x38\xb8\xbb\x1f\x31\xb0\x07\xec\xda\xab\xda\x0c\x12\x28\x29\x48\x93\x9a\x4c\xb6\xaf\xb2\xfe\x59\x31\x62\x78\xd5\x8f\x90\x05\x71\x30\xd9\x8d\xfe\xce\x30\x6f\xdd\xca\x8b\xd3\x0d\xc4\x9e\x8f\x7e\x71\x04\xef\x49\x4d\x0a\xce\xed\xd7\x29\x1c\x5f\x4e\x58\x5f\xa0\xc3\x85\xac\x05\xe2\x60\x1e\x18\xd6\x35\x9b\xb7\xb0\x92\x7f\xcc\x58\xed\x78\x15\xeb\x41\xc9\xfe\xe0\x99\x29\xbe\x76\xa7\x64\x4b\x04\xdf\x43\xd1\xd7\xe4\x44\xd0\x81\xbe\x20\x0e\x26\x8b\x2d\xad\xe4\x83\xf2\x19\x9f\xd5\xb1\x32\xde\xcd\x9f\xbb\x43\x45\xe9\xe7\x8b\xb2\x52\x8e\xa4\x44\x19\x13\x1d\x2e\xf2\x26\xb6\xf7\xd0\x11\xb9\x00\x0e\x61\x2d\x81\x73\x59\x0b\xf4\x05\x85\x6c\xad\x6d\x92\xbe\xce\x83\x05\x8a\x09\xfc\x3e\xfd\xf1\xad\xd5\xe5\x18\x3b\xe7\x0f\xde\x87\xe5\xd8\x8f\x6c\x5e\xc7\xb4\xf2\xa7\x25\xd5\x22\xfe\x3e\x88\x83\x3f\xb5\x22\x0a\xbf\xb7\xb3\xb3\x2e\xdd\xb0\x6a\x24\x97\x7c\xb0\x47\x2d\x14\x19\x72\xe9\xb1\xe3\x90\x14\x3f\x15\x5d\xd3\xbc\xb3\x1e\xb4\x20\x07\xe2\x60\x1e\xd0\x10\x9f\xa4\x7a\x53\xe7\x5b\x30\xee\x14\x8b\xd6\x11\x96\xb2\x10\x2b\x4f\x4a\xfe\xd6\x30\x24\x92\x02\x63\xb1\x7b\x66\x6c\xfe\x11\x94\xc3\x07\x70\xf0\x93\x77\x59\xe7\x68\x4c\xa7\x74\x9b\x66\xe8\x1f\xf8\xe7\x26\x2e\x59\x3e\x7a\x4d\x90\x2a\xbc\x39\xfd\x63\x69\x98\x49\xef\x79\x43\x28\x14\x54\x03\x71\x30\x0f\x68\x18\x56\xb8\x62\x7e\x97\xc1\x7b\x40\x5d\xdf\xa5\x6a\x22\x79\x6a\xf4\xf4\x6d\xcc\xed\xcd\x6e\x91\x39\xff\x6d\xaf\x5b\x36\x4f\xa1\x47\x37\x88\x83\xc9\x32\xfb\x7c\x93\x14\x0a\x99\x67\x60\xe1\xa8\xe2\xa8\xe6\x6e\x0e\x75\x75\xda\xcc\x63\xf2\x98\x26\xdb\x0d\xad\x52\x5a\xc5\x70\x99\x46\x58\x0b\xc4\x21\xac\xa5\x79\x2e\x6b\x81\xbe\x94\x91\xad\xc5\x79\x25\xfa\xd6\xd5\x51\x3b\x0c\x5a\xb1\x0f\x02\xf7\x6e\x18\x4b\x5f\xc4\x38\x20\x0f\x97\xf4\xd1\x0d\x5b\xea\xf9\xa2\xc2\x6b\x02\x4d\xfe\x82\x38\xf8\x0e\xcd\xec\xb8\x6b\x18\x09\x53\x9f\xd9\xd2\xd8\x39\x6b\x89\xba\xdf\xe5\x0e\xf6\x12\x7d\x0d\xaf\x49\x8b\xc1\xbb\x29\x3b\xae\x11\x0b\x15\xf5\x04\x71\x30\x0f\xa0\xbe\xba\x4d\xd8\x44\x11\x13\xa9\x8b\xff\xc5\x0f\xdf\x29\x93\x6c\x6b\x07\xfb\x19\x4e\x4a\xa7\x97\x62\xa7\xb9\xd6\x88\x9e\x08\xb4\xd6\x0b\xe2\xe0\xfb\x5c\x94\x36\xc6\xaf\x8c\x4e\x1b\x53\x2b\x34\x14\x48\xaf\xdd\x43\x95\x33\xf2\xc4\xed\x15\x91\xbc\x87\x6d\x6d\x5e\x53\x9f\xe7\x47\x09\xed\x73\x01\x70\x30\x0f\x5c\x96\xe6\x2a\x72\xbd\xea\xb2\x15\x84\xff\x71\x89\x95\x5e\xd2\xf0\xfe\xed\xae\xe7\xdc\x06\xd9\x4c\xa9\xbe\xdb\x83\x5e\xa7\x2f\xa0\xdd\xfd\x20\x0e\x26\xbb\x68\xe0\x26\xf7\x20\xdf\x5c\x73\x38\xc1\x53\x72\x49\x6e\xb0\xa7\xa6\x12\xc5\x2c\xd3\x67\xbf\xed\x24\xe1\x4e\x37\x93\x84\x39\x14\x25\x01\x71\x08\x6b\x3d\x3f\x97\xb5\x40\x23\x22\x64\x6b\x75\xdc\x6a\xfc\xe1\x95\x9d\xc3\xc0\x2c\x64\x9c\x3c\x63\x5f\x8a\x8a\x3d\x94\x9d\xad\x50\xe5\xf4\x20\xa1\xa6\xa8\x95\xbd\xf5\x27\x54\xee\x06\xc4\xc1\xcf\x11\xd4\x1b\x42\xc3\x38\xd1\x69\x30\xbf\xb0\xd8\xca\x7b\xb1\x61\x38\x89\xe0\x4f\xb1\xe2\xdc\xa8\x43\x09\x8f\xbc\x62\x0c\x81\x02\xb4\x0a\x02\xe2\x60\x1e\xb8\xb4\x46\xe2\x91\xc0\x28\x3a\xb2\x9e\xbe\x6c\x4c\x4c\x90\xd6\x88\x59\xef\xd1\xd3\xd7\xa1\x13\x77\xa9\xb2\x2f\x4d\xff\x51\xc7\x63\x84\x2c\x88\x83\xc9\xca\x15\xba\xfa\x7c\xff\xe1\x91\xfb\xc5\x4f\x6d\xc2\xf9\x88\x44\x71\x38\x42\x80\x2a\xed\x40\x78\xfc\x68\x53\x5a\x38\xb8\x68\xa7\x07\x9a\x01\x07\x70\x30\x0f\xcc\x60\x97\xed\xb1\x3f\x2a\x31\xf6\x94\x73\xc8\x4b\xfc\x2a\x63\x89\x66\xfd\xdb\xd1\xd1\xf9\xcc\xed\x01\x9d\xf4\x67\xcc\xe3\x79\xe8\x8c\x46\x10\x07\x93\x35\x12\xe4\x28\x99\xc8\x91\x5f\x99\xba\xa5\x41\x1d\x6c\x26\xd7\xf3\xcb\xc6\x97\x4e\xfe\x55\xda\x43\xaf\x48\x45\x8e\xa0\x91\x32\x68\x77\x3f\x88\x43\x58\xeb\xcd\xb9\xac\x05\x1a\xf9\x22\x5b\xcb\x06\x93\x44\xb7\x45\x56\x16\x8b\xe9\xa5\x93\xe6\xb0\x68\xc9\x35\xec\x8f\x24\xdf\xbd\x2c\x55\xba\xda\xb3\x09\x03\xd4\xee\xbc\xd9\x44\xfc\x7d\x10\x07\xb3\x56\xd1\x65\x8b\x14\xbd\xa8\xe2\x92\x0d\x0d\xe3\xf4\x07\xfb\xc5\xcf\x57\x27\x6f\x90\x67\x58\xa2\x7d\xde\xe2\x12\x28\xb8\xb4\xb6\x05\x9d\x7b\x00\xe2\x60\x1e\x10\x96\xe0\x2a\x7c\x77\x9d\xf8\x98\xaf\x3b\x59\x6e\x14\x97\x57\x33\xf0\x45\x76\x09\xa1\x14\x4e\x59\xfc\xf5\xcf\xb7\x79\xe3\x98\xa1\x63\x0f\x41\x1c\x4c\x76\xec\x9e\xad\xf6\xa8\x03\x85\xd2\x6e\xc3\x75\x42\x37\xf6\xab\xfe\xf8\x41\x52\x4f\xca\x84\xb2\x65\x6f\x1d\x33\xfe\x2a\xdc\x79\x07\x4d\xaa\x82\x38\x98\x07\x1e\x6f\x9a\x5c\xaa\x55\xa0\x26\x4e\x63\xf9\x96\xeb\xf9\xd0\x9f\x6d\x42\x9b\x5c\xe6\xc9\x57\xca\x9a\x59\x93\xf0\xaf\xf6\x66\x0c\xd0\x99\x39\x20\x0e\x26\x8b\xb2\x4f\xd2\xf2\xd3\x65\x93\xa7\x9e\x8f\x8f\x56\xfc\xce\x1d\xb4\x6c\xec\x0f\x39\xd7\xdc\x68\x32\x08\xe2\x96\x19\x9a\xe5\xfe\x48\x23\xac\x05\xe2\x10\xd6\x4a\x3c\x97\xb5\x40\x33\x1c\xc8\xd6\xea\xbf\x46\x57\x2c\x63\x6c\xc8\x6a\xda\xcf\xc2\xbd\x3e\xff\xd1\x66\x6c\x62\xbe\xe3\xfa\x46\xeb\x68\x3d\xfa\xe9\xf5\xbb\x5f\xbe\x41\x07\x7f\x82\x38\x98\xb5\x98\xa6\xe7\x3c\xdf\xaf\x6d\x73\xbf\x0e\xe5\x52\xb3\x1f\xda\x63\x12\x5c\x41\x2f\xef\xe8\xcc\xba\x32\x78\x45\x62\xd7\xaf\x98\xcc\x1a\xda\x53\x0c\xe0\x60\x1e\x38\x78\x29\x9a\xbd\xf8\x93\xc5\x54\xfc\xba\xdb\xd6\x0a\x73\xea\x20\xb7\xdc\x38\xfa\xaf\x27\x81\x15\x09\x7d\xe3\xf8\x97\x48\x13\x3e\x21\x64\x41\x1c\xfc\xcc\x1c\xb2\x23\x4e\x56\xee\x9c\x5f\xa1\xdf\x62\x17\x1a\xf2\xf2\x44\x98\x54\xa3\x04\xca\x9e\x7d\x6f\xdc\x11\x36\x5c\x39\x9b\xd1\x82\x64\x41\x1c\xcc\x03\xf3\xac\x97\xaa\x5d\x5f\xa7\xad\x8d\x90\x72\xce\xcb\x87\xda\xc5\x8c\xf4\x11\xf1\x37\x97\x2d\x76\x57\xbe\x78\xe7\x57\x95\xb3\x02\x05\xcd\x41\x1c\x4c\xb6\xf2\xb2\x6b\xe6\xd6\xbd\x16\x46\xb2\xfe\xfb\x82\x1e\x46\x6c\x0d\x38\x74\x5b\x96\x58\xd5\x2b\x8f\x48\xae\xab\x9f\xbe\x5c\x99\xb7\x45\x58\x0b\xc4\x21\xac\x55\x79\xbe\x28\x09\x68\x0e\xfb\x9f\x28\x09\xca\x10\xd2\x59\xdd\x43\x72\xa4\x96\x1e\x2e\x9b\x7f\x30\x4e\x93\x7d\x92\xda\x18\x08\x55\xb9\xed\x1e\x73\xf2\x09\x7c\x61\x6c\x4d\x5f\x6f\xa5\xe9\xfe\xfb\x99\xbe\x2d\x78\x93\xb7\x44\xdd\x9e\x9a\x8d\x09\xf0\xdf\x67\x0c\x4b\x55\x7a\xf0\x8a\xa7\xb7\x7a\x48\x98\x69\x0e\x1f\xdd\xcc\xe6\xdd\xc8\xbb\x4f\xdf\x87\xff\xbe\xc9\x3f\xf0\x26\x53\x15\x7f\x8b\x3c\xf0\xdf\x18\x2e\x2b\x56\x0d\x7d\x61\x3f\x54\xbf\x9d\xad\x1c\xd2\x74\xaf\x34\xf3\xa6\x82\x75\x56\x8c\xf8\xc5\xbf\xad\xd0\xad\x75\xbe\x6b\x89\xdc\xc1\xf1\x25\x9d\x15\x13\xdc\xcf\x98\x7f\x8f\xbc\x7b\x6f\x8c\xa2\x68\x6e\xca\x48\x9a\x3a\xd0\xa1\xde\x8b\x61\xb1\x1e\x19\x1a\x54\xfb\x13\x61\x42\x10\x07\xeb\xe0\xed\x33\x67\xc2\x97\x8e\x82\x70\x4b\x8c\xc4\x36\x3f\xbd\x9c\x15\xcb\x1b\xeb\x35\x5a\x2c\x52\x6d\x8a\x40\x51\xda\xba\xe4\xed\x8d\x81\x90\x05\x71\xb0\x9e\x38\x7f\xec\x6c\xd4\xb5\x67\x1e\x89\xae\x17\xfc\xd1\xa8\x5b\x07\xdb\xfe\x65\xd0\x3a\x33\xae\x27\x05\x2b\x4a\x54\x3b\xb7\x78\xa1\x1b\xd4\x65\x00\x1c\x4c\xb6\x7b\x0c\x5b\xc3\xfa\xa6\xc2\x99\x6d\xff\x65\x9a\x60\x5b\x99\x22\xb6\x63\xfe\x65\xab\xcc\x59\xa2\xf0\xed\xb4\xf6\x52\xf6\x56\x68\x9c\x0e\xe2\x60\x3d\x91\xd1\x6f\x3d\x63\x61\x81\x9e\x5c\x4f\x72\xc7\xab\x26\x76\xcd\xfa\xe9\x93\xaa\x88\x21\x7d\x65\xbd\x31\x39\x4a\xf7\xa9\x39\x3e\xa8\x44\x12\x88\x83\xc9\x86\x95\x18\xde\x08\x41\x61\xe9\x55\x8f\x50\x98\xad\x22\xbc\xf5\xf5\x73\xdc\xee\x13\xf5\x91\x67\x6b\xea\xbf\x66\xb6\xd8\xd2\x0b\x6f\x43\x07\xa3\x01\x38\x44\x07\x1f\x3a\xd7\xbb\x03\xd4\x67\xfe\xc7\xee\xfe\x50\x06\x36\x29\x15\xef\xac\x2d\x45\xe3\x5a\xca\x85\x3d\x65\xba\x14\x05\xf1\xdf\x3d\x89\x35\x8c\x71\x31\x51\xad\x77\x87\x4a\xa0\xdd\xfd\x00\x0e\x66\x2d\x13\xa1\xb7\x3d\xd3\x2c\xec\x5c\x59\xdc\x65\xd2\x2e\x86\x25\xaf\x5a\xda\xde\x50\x2f\x69\x3d\xde\xdd\x4c\xdc\x0b\xf6\xb3\xa6\x81\x3c\x00\xe2\x60\x1e\xe0\xa3\x36\xe7\xbd\xa0\x2b\x98\x49\x6f\x58\x86\xad\xb3\x36\xb2\xf1\x39\x9e\xba\x62\xfa\x1a\xa6\x27\xc5\xf6\xfa\xed\x2b\x61\xbf\xbd\x10\xb2\x20\x0e\x26\x2b\xf4\xd6\x4c\xdd\xc6\x49\xd0\xce\x26\x52\x8a\x65\x81\xe5\x40\x4a\x8a\x2d\x96\x54\x6c\x0c\x87\x61\x9c\xb5\x49\x53\x58\x7c\x00\x4a\xa8\x80\x38\x98\x07\xe4\x5d\xd9\x9e\x0b\x3d\xeb\x61\xa8\xfc\xf4\xf5\xad\x3d\x2d\x75\xd7\x42\x2a\x21\xd7\xa5\x1a\xe7\x1c\xbb\xbb\x76\x0d\x1c\xaa\x79\xd0\x67\x09\x88\x83\xc9\x7e\xeb\x88\xe9\xd8\x89\x6c\xff\x32\xe8\xbb\xdf\x63\xb1\x13\x74\x77\xc7\xe3\x34\xbe\x67\x96\x1a\xbf\xb1\xe3\xa9\xd2\x6c\xb3\xd3\x30\xc2\x5a\x20\x0e\x61\xad\xad\x73\x59\x0b\xf4\x6c\x44\xb6\x96\x03\xaa\x8a\x64\xfc\x07\xe3\x05\x57\x7c\x17\x9e\x17\xaf\xe2\x74\xf0\x68\x9d\x65\xc3\xb3\x6b\xd2\x3f\xfe\x89\xd3\x34\x65\x2a\x15\x47\xfc\x7d\x10\x07\xb3\x96\xf9\xef\x28\x8f\xde\x2f\x47\xb2\x59\xa5\xf9\x76\x94\x89\x2a\x66\xf7\xd1\x23\x98\x25\x7c\x5d\x79\xca\xab\x1e\xea\xc6\xbb\x26\x43\x27\xdd\x83\x38\x98\x07\x02\x5e\x65\x7b\xc4\x0d\x65\xe2\x1e\x67\x29\x1f\x0a\x4f\x88\x89\x2e\xda\x52\x9d\xb2\xdd\xf3\xbb\xbc\xfc\xc8\xcd\xaf\x43\xca\xcf\x18\x21\x0b\xe2\x60\xb2\x59\xd1\xe4\x2f\x3a\xbe\xa8\x89\x09\x70\x67\xb0\xdb\x5c\x33\x2c\x6f\xf2\x9a\xba\xc9\x25\xea\xcc\x58\x17\xbd\x15\x98\xd8\x8e\x9a\x83\x90\x05\x71\x30\x0f\xfc\x8c\xae\x8f\x89\x1f\x2d\xc1\xd1\x4e\xc6\xab\xc5\xf6\x91\x22\xe8\x8a\x66\x8e\xbe\x77\x44\xb8\xf1\x73\xe0\x50\xc8\x4c\xe8\xe6\x28\x42\x16\xc4\xc1\x64\x85\x6a\xc3\xcb\x84\xbf\xcf\xf4\xb5\xd9\x6b\x55\x68\xba\x86\x99\x51\x47\xbf\xd3\xd9\x1d\x52\x88\xab\xa0\x2f\xe6\x34\x2c\x2a\x38\x85\x02\x70\x00\x0e\x61\xad\x3f\xe7\xb2\x16\x68\x95\xff\x7f\xec\xae\xcd\x33\x4d\xa1\x45\xe5\x78\x5d\x58\x2a\x2b\x32\x5a\x83\xd7\xf2\xed\x83\x4c\x51\xb5\xfa\xe6\x5e\xd1\xc0\x5e\x6a\xd7\x33\xc7\x76\x68\x77\x2d\x80\x83\xef\x81\xc4\x3c\x1b\x99\x51\x3b\x99\x1f\x6c\xc1\x6f\x2f\x98\x62\xd9\x9c\xc1\x91\x51\x9f\x9a\xcd\x55\x71\x72\x99\xfb\x9e\x8d\xa5\x69\x0f\xed\x81\x04\x70\x30\x0f\x28\x07\x91\x65\x18\x0b\xb6\x4d\x2f\xcc\xde\xf9\xdc\x58\xb9\x5d\xf3\x52\x7f\x96\x39\x48\x21\x7e\xee\x19\xee\xb3\x88\x47\xa2\xcf\xa0\xfd\x39\x20\x0e\x26\xfb\x31\xd7\x91\x42\xc8\x10\xc7\x5b\x7f\x81\x8d\xcb\x14\x5d\xfa\x92\x43\x1e\xd9\xd9\x60\x13\x19\xe3\x6c\x3d\xd9\x2a\xf3\xa6\xfb\x1d\x84\x2c\x88\x83\x79\x20\x53\x68\x46\xa9\x04\x37\x4b\x5a\x3b\xd6\x48\xdc\x9d\xa5\x8d\x67\xdc\xc1\x63\x25\x9b\x00\xf5\x42\xdc\x45\xef\xaf\x75\x45\x2c\xd2\x50\xe6\x83\x37\xe1\x2a\xbe\xc0\xc6\xc4\x28\xa6\x56\x4f\x2f\x65\xd8\x6c\xfc\x13\xb3\xd4\x16\x42\x15\x9c\xd3\xce\xa2\xf2\x77\xfa\xba\xfa\xfb\xff\xce\x7c\xc4\x39\x4e\x55\x9a\x8b\x3e\xf6\xbf\x91\x35\xb4\xdf\xf5\x0a\xef\x27\xcf\xb7\xa3\xca\x92\x10\x19\x25\x71\xf6\x2e\xf2\x37\x36\x18\xf6\xff\x5e\xef\x7a\x73\x7c\x71\xd3\xd8\x58\xa4\xbc\xbd\x66\xb8\x02\x2d\xfa\xf3\x6b\x97\x72\x93\x6b\x1b\x06\x17\x3c\xd3\x82\x06\x59\xb9\x9e\xb8\xc0\x32\x1f\x20\x65\xe4\xcc\x87\x24\x0b\xc9\x26\x3b\xcd\xb1\xc7\xec\x61\xd4\xc3\x96\xfb\x59\xaf\xa3\xe2\xf7\xb6\x88\xb2\x9f\x0f\x5e\x20\x58\x4e\x41\x4f\xb8\xf4\xed\x5f\x68\x0a\x35\x23\xfa\x70\x4a\x46\xe5\xce\x15\xed\x53\x0a\xba\xcb\x35\xdb\xd4\xb6\x2c\x82\xef\xfa\x55\xd4\x29\x8b\x4c\x0c\x02\x8e\xde\x43\x99\x0f\x90\xe6\x3f\x99\x0f\x11\x78\xe6\x23\x43\x8a\x88\xa2\x7c\xcf\xf6\x11\x87\x6b\x5c\x62\x7d\xaf\x66\xfb\x7b\xb6\xe1\xda\xa9\x02\xcb\x66\xf9\x2b\x36\x79\xf7\xa2\x6a\x7e\xfd\xf5\x47\xae\x08\x52\xe6\x03\xfb\xf2\xbd\xf4\x30\xdc\xa4\xba\xbc\x65\x19\x2e\xbe\x79\x6b\x1a\x99\x81\xa6\x67\xcd\x07\xb2\x0e\x68\x68\x5f\x5e\xab\x61\x06\xf9\xff\x7d\x93\x48\x99\x8f\x8c\x2f\x63\x76\x09\x81\x75\x5a\x5c\x9e\xfd\x1d\xec\xe4\xf7\x54\x45\x9f\x36\xd6\xe2\xda\x76\x36\x13\xf0\xfb\x19\x11\x6f\xcb\xca\xfc\x7d\x93\x48\x99\x0f\xd2\x54\xda\x7a\xd7\xa9\x32\xe9\x5d\xb6\x88\x46\x1c\xd7\xe6\x5c\x7b\x52\xbb\x80\xfc\x6a\xce\xcb\xa9\xf5\x25\x82\x26\x26\x1a\x6b\x7f\xdf\x24\x52\xe6\x43\x75\x80\x0a\x33\x5f\xcc\xf5\xde\xfd\xf8\x11\xad\x68\x71\x5a\x35\x89\xd9\xa5\x0b\x86\xe8\x1a\x96\x4c\x38\x9a\x82\xca\xad\x5d\x4a\x7f\xdf\x24\x52\xe6\x23\x33\x61\xbe\xcf\x9f\x6b\xb9\x62\x42\x2c\x5a\xce\x24\x51\x2e\x85\x4d\xb1\x45\x50\xc0\x2e\x3a\xf8\x86\x4f\x54\xb2\x49\xe1\x02\xc9\xdf\x37\x89\x94\xf9\x58\x2f\x1f\xf9\x75\xe9\x64\x31\x8c\xfe\xe6\x83\x49\x2e\xf3\xcd\xa1\xad\x6f\x5f\xe3\xcd\x3e\x84\xdd\x9f\x6d\x7b\x2c\xf4\xd9\xdf\xb0\xee\xef\x9b\x44\xca\x7c\xd4\x07\xbf\x67\xe8\x0c\xcb\x9d\x33\xd0\x63\xf1\xac\x8d\xa0\x3e\x28\xb1\xb1\xea\x9c\x34\xcb\x67\xba\x16\x5d\x8b\x9e\xd5\x91\xd0\xf2\xdf\x0c\xcb\x40\x5d\x11\xf9\x2d\x54\xc3\x8d\x1d\x63\xae\x93\x39\xec\xff\x54\x29\x3d\xbe\x2b\x08\xc7\xaf\x8c\x6f\x2f\xd6\x19\x9f\x41\x3c\x8d\x4f\x6e\x84\x75\x1e\x3a\xb3\x1c\xc4\xc1\xde\x42\x9f\xf9\xe9\xa2\x32\xe8\xda\x9f\x12\x2d\x10\x7d\x3b\x5b\xd2\x1b\x78\x15\x93\x9f\xcb\xdf\xfc\x3a\xec\x53\x20\xfd\xf2\xb5\xfc\x22\x65\x68\x17\x36\x80\x83\xe7\xa5\x7f\x5a\x4d\xf4\x49\x35\x6d\xe3\x07\xb6\xa0\x53\x57\x3f\x64\x63\x8d\x21\x8b\xc7\x8e\x1e\xfb\x16\x2e\x37\xef\x2b\x58\x36\x0e\x6d\xe3\x02\x71\x30\x59\x16\x85\x07\x6c\xe2\xfe\x05\x11\x52\xce\xb5\x7d\x5e\x65\xcd\x97\x6e\x56\x6f\x90\x8a\x27\x3a\xbd\x6c\x9b\xe9\x1e\x6a\xef\x63\x82\xce\x1c\x05\x71\xb0\xe4\x61\x5c\x67\x62\x15\x6b\xe0\x2f\x4c\xec\x7b\x17\x2b\x82\x97\x2b\x52\x31\x77\xb3\xb0\x5e\x04\x8a\x98\xf0\x1b\x16\x24\x0c\x59\xcb\x43\x53\xe6\x20\x0e\xf6\x72\xab\xd6\x5c\x31\x10\x6e\x7c\xf3\x99\x63\x3b\x3e\xe4\x47\xc0\x17\xe6\x84\xbd\xae\xce\xbe\xa6\x3f\xb9\xc9\xdd\x9c\x58\xf1\xb7\xfa\x4b\x11\x99\x0f\x10\xf7\x4f\x8d\x07\x91\x73\x65\x3e\x40\x4f\x5c\x64\x67\x8d\xae\x62\xc9\x67\xcc\x62\x05\xa5\x6c\x55\xca\x55\x1a\x92\xaa\x9a\x31\xfd\xbc\x24\x7d\xf1\x45\x95\x83\x2e\x9d\x05\x31\x5d\x81\x0d\xe2\xdf\x83\x38\x78\x81\x5d\x4c\x6d\x2d\xc7\xa1\xb5\x79\x42\x5c\xac\x3e\x1c\x92\xd9\xd9\x20\x92\xcd\x07\xb1\x99\x26\x29\x3c\xba\xf4\xd5\xa1\xc2\xa1\x50\x38\x03\xc4\xc1\x2c\x40\x7f\xa3\x72\xf9\xe7\xca\x30\xfb\x32\xe9\x8d\xe1\x52\xf1\x6d\xb2\x37\xfd\xd5\x06\xba\x8b\x19\xeb\x2b\xd1\x5f\x34\x2c\x5f\x1c\x41\x6b\x51\x20\x0e\x26\x3b\x54\x7b\x10\xa6\x96\x19\xc5\xb5\x6a\xa6\x8e\x19\x8a\x8d\xf5\x6d\xed\x3a\x6b\x4e\x40\x08\x89\xe5\xd5\xd4\x46\xff\xab\xb4\x7b\x50\xb9\x6d\x10\x07\x73\x56\xcf\x97\x55\x4e\x5b\x6f\x12\xeb\xcb\x5c\xaf\x7a\xad\x97\xaf\x4b\x48\x63\xf7\x28\x58\x0e\x3b\xaf\x29\x13\x94\xb5\xdd\x7e\x91\x04\x95\x72\x03\x71\x30\x67\xd5\x61\x08\x4e\xe9\x06\xda\xce\x04\xe6\xd5\x52\x35\xe4\xd8\x5e\x92\x7a\x10\x80\x6b\x44\x2a\x96\xd1\x4c\xdf\x10\xad\xe4\xfa\xf2\x2b\xe2\xd3\x19\xc4\x21\xce\x85\x3c\x5f\xe6\x03\xf4\x66\x45\xb6\x96\xc0\x82\xf9\xb4\x2f\x8d\x0b\xbf\x4b\xa7\xb3\xfb\xe7\x9c\x05\xf3\xb8\x58\xd3\x7e\xcb\xf4\x55\xeb\xa7\x25\xf6\x85\xd3\x4b\x26\xaa\xd0\x96\x3b\x00\x07\xb3\x56\xc0\x27\xa3\x04\x85\x5f\xef\xd6\x66\x3b\xd3\x1a\x5b\x5d\x6c\xfd\xe5\x2e\xec\x56\xcc\xf6\xdc\x23\x3f\xad\x51\x0d\x48\xa2\x18\x87\xa6\xa8\x40\x1c\xfc\x10\x70\x7d\x8e\xaf\x38\x0f\xe2\xeb\xb8\x4d\x31\xbf\xee\x63\x38\xf3\xad\xdc\xe2\x9c\xfe\x92\xf7\x89\x4e\x38\xf1\xc1\xef\x25\x07\x3d\x6e\xe8\x66\x01\x38\x98\x6c\xd2\xfd\x0a\xa1\xf2\xaa\x36\xaf\x51\xfb\x25\x93\xe3\xb9\xec\xab\x6d\xc9\x93\x9a\xb6\x01\x9b\xe1\xfa\xea\xe9\x02\xee\xe8\xdb\xd0\x89\x0e\x20\x0e\x66\x2d\x62\xaf\xfc\x57\x01\x1a\xfd\xc9\x0a\x1f\xed\xf0\xf9\x55\xac\x8e\x4b\xa3\x0b\x0e\x6f\x5b\x06\x0a\xb1\x37\xea\x11\x53\xbe\x1a\x85\xb6\xa4\x80\x38\x98\xb5\xea\x49\x8f\xbc\x02\xf6\x68\x55\x23\xdd\xc4\xa9\x16\x3e\xd3\xbd\x1d\x7c\x62\xc5\x35\x27\xca\xf2\xa9\xbf\xd4\x63\xd6\xa3\x57\x0c\x3a\x09\x1d\xc4\x21\xac\x75\xbe\xcc\x07\xe8\x0b\x0a\xd9\x5a\x33\xea\x05\x9b\x4d\x11\x78\x86\x85\x19\x1b\x9e\x41\xc1\xfd\x03\x97\x5c\x9e\x24\x88\x52\xdc\xda\x89\xed\xac\x12\xca\x66\xf0\x5a\x82\x56\xf8\x00\x1c\xcc\x5a\xbd\xe5\x4d\x0b\x1a\x38\x9f\xf2\x22\x7f\x47\x0d\xc8\x92\x5d\x24\x4c\xa2\xac\xe1\x69\xf3\xe8\xe1\xc6\x10\x51\xbf\xc9\x4f\x4b\x59\x8e\x90\x05\x71\x30\x0f\x94\x49\xc6\x19\xd4\x9d\x58\xea\x3c\xa3\xef\xf2\x10\x65\xf6\x35\xe4\xac\x46\xf9\x45\xcb\xa4\x80\x47\x8d\xc6\x6d\xfd\x68\xad\x0a\x2a\x40\x09\xe2\x60\xb2\x9f\x63\xdc\xee\x72\x8a\xc4\xc7\x4d\x9d\x91\x58\x30\xd0\x34\x4f\xdc\x13\xe1\x9b\x46\x7f\x58\xad\xb3\x97\x69\x59\x99\xf3\x23\x60\x12\x7a\x7b\x03\x38\x98\xb5\x3c\x4f\x45\x32\x52\xab\x1e\x9b\x53\x12\x36\xf8\x0e\xae\x3f\xbb\x3e\x62\xa2\x4a\x24\x12\x28\x1e\xbe\xb6\x53\x40\x7a\x59\xf2\x3e\x74\x36\x1d\x88\x83\x59\x8b\x76\x53\x80\xfa\x6b\xcc\x3d\x7d\xb7\x9b\x8e\x12\x34\xa1\xfa\xb9\x51\x18\x84\x31\xa6\x74\x13\x8f\xcd\x6c\x51\x86\x7b\x2e\xcb\xdd\x42\x58\x0b\xc4\x21\xac\x75\xbe\xcc\x07\xe8\x4b\x19\xd9\x5a\x74\xfd\xee\x26\x3d\x7e\xdb\x59\x85\x0d\x55\x13\x57\x29\x03\x43\x03\x43\xaa\x92\x3e\x6b\xb8\xdf\x58\xa7\x63\xc5\xc5\xc2\x8b\x81\xf6\x8e\x80\x38\x78\xf9\x90\xab\x59\x61\x6f\x3d\x54\x94\x1c\x2e\x34\x93\x53\x92\x84\xa7\x73\xbd\x9b\x0d\xf1\x58\x15\x57\xc1\xd7\xcc\xd5\xfe\x42\x4c\x0c\x95\x76\x05\x71\x30\x0f\xa4\xcc\x0f\x04\xa5\xb0\xde\xbf\xbb\x8f\x79\xcc\x5a\xff\x15\x95\xbd\x2e\xbe\x99\x48\x3e\x36\x9b\xc1\xf3\xb2\x64\x4c\xdf\x1f\x14\xa8\xd8\x37\x88\x83\x57\xa6\x79\xf2\x8a\xc1\xf8\x02\xc7\xe5\x38\xcb\x18\x72\x8f\x3d\x7d\xcb\x0f\x8b\x2b\x77\xf3\x2d\x6c\x74\x66\xed\x97\x31\xc2\x4b\x9c\xa1\x4d\x1e\x20\x0e\x5e\x3e\x9b\x72\x4b\xb1\x28\x76\x0c\x5f\xe1\x26\xb3\x1a\xa6\xde\x0c\x8e\xba\xbd\xda\xef\x8f\x05\x3f\xfb\x77\xd0\x84\x5c\x02\x55\x46\xa1\x2a\x5d\x20\x0e\x66\xad\xd2\xdc\xb7\x8a\xd6\x8c\xb2\x39\xf3\x1a\xc4\x0b\xe8\x7c\x6c\x71\xa2\xf5\xc1\xf1\x8c\x9e\x5f\xf9\x5b\xb3\x4c\x15\x74\x6e\x18\x3e\x80\x76\x4b\x03\x38\x84\xb5\xce\x97\xf9\x00\x8d\x88\x90\xad\xf5\x48\x67\xc6\x94\x49\xbc\x47\x21\x3f\xc8\xef\xd6\x3c\xdf\x78\xe3\xf1\xec\xfb\x5a\x33\xe5\xea\x2f\xb7\x37\x77\xa4\x77\x0c\xd9\xa1\x1a\xac\x20\x0e\x66\xad\xb0\xc0\xb7\x58\xa4\xf1\xbc\x07\x49\xc4\x22\x9c\x02\x97\x32\xc4\x62\x3d\xf8\xf2\x55\x77\x63\xd8\xe9\xde\x0b\x93\x27\xdb\x7e\x6e\x41\xc8\x82\x38\x98\x07\xea\xbd\x8d\xe7\xc3\x67\xfc\xf9\x0e\xae\x78\x8b\x65\x05\x26\x0c\xe3\xcf\x9b\xe3\xdd\x59\xe1\x65\xdf\x49\x39\x0e\x23\x9b\xd4\x80\x64\x41\x1c\xbc\x06\x60\xce\xe3\xf6\x33\x63\x4d\xf3\xe6\xaf\x95\xf7\xa4\x67\xb3\xc6\x17\xaa\x86\x51\xcf\xb0\x42\x8b\x71\x08\xbf\x46\xa5\x2d\x64\x43\xe5\x43\x40\x1c\xcc\x5a\xde\xe6\x3f\xec\xee\xc5\x9c\xd5\x39\x72\x55\xec\xad\x7c\xd8\xfc\x54\xb1\xfa\x5e\xe7\x4a\xf2\xf0\xf8\xf6\xb5\x12\xc5\x35\x91\x7d\xa8\xd8\x37\x88\x83\x59\xcb\x34\x5e\x5e\x58\x3b\xb3\x76\x23\x38\xb3\xd0\x57\xe0\xda\x89\xe7\x1b\xca\x0e\x05\x61\xb1\xde\x4e\x94\xe5\xf6\xfe\xd2\x46\xc6\x3d\x84\xb5\x40\x1c\xc2\x5a\xe7\xcb\x7c\x80\x46\xbe\xc8\xd6\xf2\x71\xe2\x76\x4d\x62\xc7\x7a\x3c\x90\x36\x4e\xd7\x51\x6f\x71\x59\x4b\x58\x4c\x14\xb5\x41\x47\xfb\x99\xb7\xba\xb5\x53\x5c\xca\x2a\xe2\xef\x83\x38\x98\xb5\x9c\x7f\x30\x53\xa1\xa7\x76\xbe\x13\x4d\xec\x14\x7d\xc1\x5f\x86\x29\x49\x6c\x77\xf1\x69\xfd\x9d\xa2\x4a\xcd\x04\xb3\x17\x45\x1b\xd0\x34\x25\x88\x83\x79\xc0\x33\x93\x2a\xe8\x2d\x59\x1c\x4d\xbd\x17\x8d\x12\x35\x7f\x12\x51\xc3\x07\x3f\x3c\xe2\x83\x37\xbf\x9c\x45\x5e\x38\x4d\xa9\x07\x42\x1f\xc6\x20\x0e\x26\x4b\x2b\x59\xb4\x50\x7a\x9a\x19\x9a\x14\x1e\x61\x7a\xdc\xce\x79\x74\x9b\x5e\xa4\x91\xb6\xc5\xf6\x6a\x76\x28\x46\xe8\x70\x9d\x19\x0b\x42\x16\xc4\xc1\xac\x75\xff\xf7\x4e\x65\x93\xc0\xe6\xd7\xcd\xd3\x9c\x67\xd2\x98\x13\x63\x2e\x68\x98\xed\x5f\x48\xdc\xac\x67\x51\xcc\xfa\xeb\x3f\x7b\x43\x71\x3d\x10\x07\xb3\x16\xf7\xf3\x76\xba\x93\xe3\x3c\x96\x93\x01\x46\xff\x0b\x11\xf7\x70\x84\x9a\xa2\x25\x5d\x23\xcb\x33\xc5\x2a\x2e\xa3\x7a\xa9\xa7\x62\x22\xac\x05\xe2\x10\xd6\x3a\x5f\xe6\x03\x34\xc3\x81\x6c\x2d\xa5\x98\x8c\x93\x72\xe9\x51\x6f\x9f\x2b\x99\x8a\xa5\x2b\x4f\x2c\x29\x4c\x97\xd5\xa7\xfd\x4b\x75\xc4\x5f\xb8\xf0\xd1\x5a\xd0\x43\xf9\x5a\x10\x07\xb3\xd6\x6d\x3b\x12\x65\x42\x9d\x45\x2c\xfc\xd3\x8c\xb4\x8f\x7d\x4d\x5e\x18\x8a\x51\x8d\x61\xde\x71\x57\x79\xfd\x72\xf0\x49\x6b\x19\xa0\xf2\xd9\x20\x0e\xe6\x81\x1b\xb4\x16\x4f\xf9\x78\x39\xae\x46\xb7\x0d\x56\xff\x14\x19\x25\xcb\x1f\x51\x1d\xde\xdd\x59\xfd\xbd\x96\xe2\xbc\xc8\xd3\x63\x08\x1d\xca\x05\xe2\xe0\x4b\xc2\xa3\xe6\xd2\x13\xd1\x4a\x87\xee\xe5\xcd\xa8\x7e\xb4\x7e\x9f\x0e\x8f\x68\x92\x57\xad\x24\xf2\x78\xc4\x6f\xa3\x4e\x45\xf0\x50\x41\x4b\xc2\x00\x0e\x66\xad\x4d\x6f\xd4\xc2\x0b\x07\x39\x34\x05\xd5\x1c\x4b\xbd\x8c\x8b\xe2\x5d\xae\x4e\xb3\xda\x99\xc9\xfd\x57\x27\x84\x51\x53\x23\x6a\xa0\x21\x12\x88\x83\x67\x2b\x53\x2a\x7a\xeb\x6a\xd3\xf7\xe4\x67\xb8\x69\xac\x8a\x72\x73\x4a\x0b\x7a\xb1\x0e\xa4\xbd\x3e\xf4\x7f\x8e\xa3\x8e\x1b\x5b\xba\x8c\xb0\x16\x88\x43\x58\xeb\x9c\x99\x0f\xd0\x1c\xf6\x3f\x99\x0f\x11\xa4\xcc\x87\x41\xf5\xf1\xc1\xee\xb8\x5d\x7c\xa8\x9a\x98\xfb\xd2\x2a\xeb\x75\x05\x81\x25\xea\xc4\x0f\x22\x17\x7e\xe9\x50\x93\xb4\x39\x3e\xf0\xfd\xfb\x99\x3e\xa4\xcc\x07\xab\xcf\xcd\x4a\x9a\xfd\x3f\x3f\xc2\x99\x3e\xf0\x2d\x30\x95\x06\x18\xf8\x15\x4e\x2e\x24\x7b\x64\xc9\x99\x92\x6f\x19\x39\x07\x0d\xfe\x7d\x93\x48\x99\x8f\x1f\xdf\x12\x7b\xc3\xaa\x5d\xe5\x2d\x89\x29\x8d\xd8\xd6\xd7\x79\x08\xbf\xf3\x1b\xe6\x3b\xa9\xf8\xbf\x5c\x56\xd2\x0e\x98\xf9\xe1\xfd\xdf\x4c\x2e\x82\xae\x25\x72\x07\x6f\xd3\xfe\x2c\xb0\xf7\xb0\x63\x8d\x7b\x56\xa5\xd3\xef\xdd\xc5\x0a\x0d\xd5\xa2\x9d\x6f\x66\x74\x78\xca\x6c\x25\x1d\x84\xa2\x59\x50\x76\x1c\xc4\xc1\x3a\x78\x88\x16\x8b\xc6\x0f\x3b\x07\x83\xce\x67\xa4\xf7\x3a\x26\xb3\x5f\xc5\x90\xd0\x04\x67\x70\x95\x26\xb4\x4d\x3f\x9c\xfd\xcc\xf7\x8e\x04\x21\x0b\xe2\x60\x3d\x51\xbd\xd1\x8d\x21\xca\x14\x47\x0d\xa3\x70\x65\x83\x36\xb1\x91\x32\xfc\x62\xd3\x60\x08\xbb\x5c\x1c\xc7\x91\xc7\x81\xea\xdd\x01\xa8\x7c\x08\x88\x83\xef\x26\xba\xb4\xfd\xf1\x5b\x2a\xe6\xec\x8d\xf8\x2f\x68\x15\x52\x78\x42\x37\xb3\x2e\x3d\x3c\x42\xbb\x66\xf6\xe6\xde\x71\x39\xc6\x12\x31\x94\x6c\x03\x71\xf0\x23\x83\xef\xd0\xab\x89\xb7\x37\xb2\x10\x7d\x41\x89\x22\xf1\x71\xb0\x88\x2f\x6b\x7d\x26\x84\xc2\xbe\x3d\x2f\x99\x4a\x35\xd5\x42\x0a\x2d\x21\x83\x38\x58\x07\xe7\x18\x0b\x1a\xb5\x71\x5d\xe4\x7c\xd9\x58\xb5\x69\xfc\x5c\xae\xe4\xf2\x7d\xc7\xc5\x2b\x13\xa6\x9a\x2b\x59\x75\xe3\x2f\x1d\x24\x1a\x11\x1d\x1c\xc4\x21\x3a\xf8\xf9\x32\x1f\xa0\x3e\x83\x6c\xad\xdb\x91\xb8\x95\xf7\xfa\x29\xad\x94\x96\x77\x42\x6e\xf4\xae\xda\xb6\x99\xe3\x70\x11\xdb\x8b\x96\xeb\xea\x39\x0d\xb5\xe5\xab\xd9\x42\x0f\x79\x00\x07\xb3\x96\xf6\xd6\x48\x60\x6c\xb8\xad\xa6\xe8\xfd\x6b\x87\x16\x31\x1d\x5d\xa6\x81\x29\x29\x33\x28\xf1\x4d\x8f\xa3\xf3\x55\x26\xcd\x9e\x42\xe1\x69\x10\x07\xf3\x80\xff\x19\x17\xeb\xba\xed\xf1\x85\x3b\x9e\x7d\x77\x8c\xf4\xd7\xf5\xb0\x50\x5f\xce\x6e\xa0\x5a\x3c\x99\xbc\xb5\x83\xb7\x39\xac\xe9\x8c\x90\x05\x71\x30\xd9\x90\x9b\xa4\xaf\x31\xbd\xa7\x05\xa8\x22\xd7\x95\xb6\x2f\x25\x78\x92\x73\x0c\xf4\x17\xc8\x2b\x07\x64\x97\xb8\x39\x28\x5b\xb1\x77\x41\x1d\x01\xc0\xc1\xac\x75\x81\xbd\xe7\xec\x19\x41\x68\xdc\xc2\xe5\x84\xa5\xfb\x16\xdb\xcf\xae\xe0\xf6\x6d\x97\xaf\x39\xf8\x2c\xcd\x65\x9a\x95\x88\xac\xbd\x44\xc8\x82\x38\x98\xb5\xa6\x70\xc3\xe3\x38\xcb\xc5\x0c\x42\xc7\x5b\x05\x92\x9e\x11\xc9\x11\x4c\xea\x46\x1b\x29\x2f\xa6\x4b\xf9\x32\x7d\x17\xae\x12\x5d\x42\x58\x0b\xc4\x21\xac\x75\xbe\xcc\x07\xe8\xd9\x88\x6c\x2d\xa1\x7b\x04\x86\x37\x17\xb6\x1e\xe4\x53\xa6\x6d\x6f\xa2\xa2\xd3\x12\xd6\xeb\x67\xab\xfa\xe7\x13\xfc\x8e\x99\xc9\x94\xbd\xf7\x03\x8a\x3b\x80\x38\xf8\xe9\x3e\x6f\xde\x70\x3f\x60\xec\xc3\x23\xb4\x59\x62\x94\xdb\x90\xd8\xaf\x72\xbf\x15\xee\xd5\x6e\xa4\x29\x12\x71\x81\x73\xc5\x2b\x15\x9a\x0f\x07\x71\x30\x0f\x1c\xa2\x89\xd4\xe0\xb0\xc4\x86\x5a\xca\x1b\xd7\xf1\x75\xa1\x60\xf0\xfb\x90\x08\x60\x59\xca\x05\x93\xe7\x2c\xcc\xc4\x62\xe2\xf7\x42\x05\x6f\x00\x1c\x4c\x36\x61\x82\xc1\xc1\xc0\xb3\xcf\xfc\x30\x9c\x93\x89\xc7\x37\xaf\xdf\xdd\xff\x6a\xab\xf7\xbd\x16\xb3\x37\x99\xef\x5e\xde\xf3\xda\xcc\x42\xc8\x82\x38\xf8\x53\xcb\x54\x67\xbc\xef\x68\xe6\x22\x9d\xf4\x9f\xde\x3f\x3b\x72\x45\xd2\x13\x2f\xe8\xbf\xbd\xc3\x5d\xde\x8f\x24\x35\xa3\x3e\x6a\x30\x85\x9e\x5a\x00\x0e\x66\x2d\xae\x1a\x3c\x63\xce\xf1\x7b\x3f\xeb\x18\xba\xcc\x0a\x2c\x57\x14\x07\xd7\x58\x13\x25\x96\xf2\xf6\x3a\xa2\x73\x1d\xa6\xa9\x56\x05\x10\xd6\x02\x71\x08\x6b\x9d\x2f\xf3\x01\x5a\xe5\x47\xb6\x56\x55\x24\x4f\xe7\x4d\x55\xe9\x87\xe4\x52\xfd\xf4\x64\xe1\xb5\x1f\x83\xd3\xf4\x69\xf9\x57\x99\x06\xd0\x32\xb7\x9f\x32\x69\x3e\x86\xea\x05\x82\x38\x98\xb5\xd0\xc6\x5a\xa6\x9b\xb2\xd6\x09\xe2\xed\x4f\x88\x77\xbb\x78\xef\x0e\x32\x99\xac\x25\xac\x1c\xf2\x74\x93\xa6\x3e\x4f\x79\x33\x7d\x13\xaa\x9c\x01\xe0\x60\x1e\xe8\x34\x9a\x2f\x22\x92\x95\x66\xe5\x30\x61\x9a\x10\x0b\x24\xd6\xc8\x4f\x10\xde\x8c\xe0\x9f\xe4\x6c\xb9\xa4\xb8\x43\x82\xb7\x08\xbd\xbe\x41\x1c\x4c\x56\x7a\x5d\xb2\x7b\x94\x45\x74\x6e\xf1\xf1\x74\x9a\x23\x05\xea\xcd\xe8\x58\x49\x89\x7e\xdf\xaa\x4f\x72\xfd\x28\x0e\x3d\xb2\x58\xd0\x9b\x0b\xc4\xc1\xac\x95\x89\x3d\xa0\x4e\x16\xc5\x35\x2a\x7e\x10\xd6\x70\xdc\xdc\xc4\x95\x50\xf2\x96\x5a\xa1\x4d\x62\x3a\xe7\xe8\xa0\x2f\xc0\xc8\x65\x02\xca\x7c\x98\x2b\x3e\x77\xa7\x6b\x23\xdc\x40\x15\xdb\xbe\xe6\x2a\x58\x5a\xdd\xa6\xf7\xe1\x5a\xa9\xe1\xab\x5f\x58\xb9\x09\x91\xcf\x77\xca\xfb\xfe\x9d\xf9\xc0\xae\xaf\xb9\xd7\x33\xd0\x43\x32\x37\x91\x28\xb6\xdd\x40\xca\x86\xa5\xe0\xc0\xf8\xa4\x77\x6c\xf1\xc7\xe4\x0b\xce\x4a\x82\xf9\xab\xff\x6e\x3f\x91\xce\x2c\xdb\x6b\xf0\x79\x82\x01\x4b\x45\xb0\x9f\x8f\xdb\x28\x2b\xe1\xaf\xec\x32\x3b\x62\xa3\x1d\x2a\x5b\x79\xbd\xac\x0c\x58\xe6\x03\xa4\x8c\x9c\xf9\x28\x1c\xfa\x53\x50\xd9\x95\xc7\x34\x3a\x94\xa0\xb0\x43\x70\x5a\xed\xb5\xc9\x49\x89\x12\xf2\xa1\x4e\xbf\x65\x1f\xef\x14\xa3\x79\xec\x5f\xe8\x15\x03\x7d\x8b\xd4\x36\x5c\x76\xb3\xe5\x15\x0f\x93\x66\x6f\x7a\x31\x7d\x9f\x02\x76\x94\xee\xd1\x8c\xf7\x73\x18\xe1\x43\x22\xcd\x50\xe6\x03\xa4\xf9\x4f\xe6\xc3\x1b\x9e\xf9\x18\xa4\x65\x2b\xde\x30\x9b\x9b\x62\x7e\x85\xaa\xc9\xae\xa8\x7e\x52\x72\x05\x95\xa9\x3d\x67\x27\xbb\x72\xd0\x8c\x4b\x34\xb3\xa7\xe9\xaf\x3f\x72\xbd\x91\x32\x1f\x18\x05\xcf\x53\x3c\x06\x09\xde\xdc\x7f\xe4\xb7\x3b\x40\x14\xbd\x1f\x7b\x96\xa7\x2a\xe8\x5a\xbd\x6e\x6f\x18\x23\x67\xd5\x13\x90\xfe\xf7\x4d\x22\x65\x3e\xd0\x17\x78\x51\x83\x15\xc2\xd3\x5e\x0a\x5b\xf1\x52\x1f\xe5\x1b\x37\xa3\x1e\xc4\x35\x5d\x88\x13\xef\x6d\xbb\x66\xda\x51\xac\x93\xf6\xf7\x4d\x22\x65\x3e\xbc\x4b\xa7\x1e\xab\x75\x73\x0a\xaa\x27\xdc\x11\x1f\x26\x4f\x25\xe9\x1c\x51\xf2\xa3\xbc\xb2\xea\xd2\xb3\x89\x32\x71\xc9\x0a\x5d\xfb\xef\x9b\x44\xca\x7c\xb8\x77\xcd\x6d\x0a\xd1\xbb\x74\xd4\x35\xdf\x79\xd9\x59\xf1\x94\xd5\x49\x7f\xe3\x1a\xfe\xc7\x93\xcf\xa8\x41\x97\xd7\xed\x75\x52\xff\x83\x7b\x89\x94\xf9\x98\x67\x49\x15\xbd\x1b\x7e\xe3\xf7\xc9\x01\xe1\xe9\x70\x95\xab\x39\x3f\xc3\xc6\x8e\xca\xba\xe9\xe3\xc5\x8c\xea\xc1\x33\xfd\xce\x77\x7f\xdf\x24\x52\xe6\x63\x6a\x77\xbc\xe9\xc6\xc6\x9d\xab\x2c\x2a\xc7\x99\x05\x7c\xf8\x36\xaf\x9f\x3e\xfc\xcc\xb7\x9b\xf6\x82\x3f\xdc\xaf\x5d\x4a\xc5\xff\xe1\xdf\x37\x89\x94\xf9\x18\x9b\xfb\x65\xb0\xf0\xc9\xd0\x9c\x84\xa5\x53\xce\x9b\xc3\x28\x16\x3f\xcc\x44\x21\x4c\xc8\xd1\x91\x82\xcb\xe8\x28\xe7\xd5\xcf\xa5\xff\x66\x58\x06\xea\x8a\xc8\x6f\xa1\xe7\x2b\x01\x22\x18\xeb\x66\xa7\x81\x16\x77\x69\x0f\xf5\xec\xe2\xbf\x3d\x8d\xd2\xf7\x3b\x21\xb2\x7e\x91\xdc\x13\x53\x4d\x71\x31\x05\xf1\x00\x06\x71\xb0\xb7\x90\x3e\xe9\x85\x07\x17\xf6\x93\x62\x5f\x1c\xd4\x27\xae\xe0\xc7\xa3\x1b\x36\x5c\x5c\x96\x0e\x70\x3d\x94\xb1\x96\x52\x78\x44\x7d\x30\x8f\x90\x05\x71\xb0\xd7\xc5\x76\x3e\x21\x8b\x94\x5c\x51\xc8\xd6\x5b\xda\x4f\x8a\xc1\xae\x11\xe1\x14\x39\x59\x14\x6c\xa5\x1e\xcf\x32\x3c\x1f\xb9\x2e\x7e\x82\xd2\xdd\x20\x0e\x26\x7b\xb6\xdf\xf1\x41\x4a\xfe\x7b\xe7\xdd\x26\xcf\xdd\x23\xff\x88\x51\x16\x0b\x3f\xa3\xd7\x33\xf3\x0f\x2d\x86\xdc\x39\x4b\x79\x29\xa0\x13\x27\x41\x1c\x4c\xd6\x27\xb5\x82\x2e\x5c\xdb\xb0\x41\x4c\xc5\x7e\x3f\x77\xa0\x6c\x45\xb3\xa9\x5b\x96\xb8\x9e\x3f\x72\x82\x82\x72\x27\xea\x77\x3e\xb4\xc8\x03\xe2\x60\xb5\xb1\xe8\x4b\xb6\xb7\x84\x53\x6f\xc4\x59\x4e\x88\xc9\x14\x5b\x77\xdd\xcc\xf0\x4d\x34\x14\xbc\x42\x9d\x3d\xb2\xee\x33\xc5\x74\x8f\x60\x06\x91\xf9\x00\x71\xff\xd4\xf9\xf0\x3e\x57\xe6\x03\xf4\xc4\x45\x76\x56\x08\xeb\xac\x60\xb8\xd0\x93\x26\xd1\x67\x42\x06\xaf\xd3\x58\x59\x36\x5a\xb2\x53\x5f\x1c\x56\x77\x94\xbb\x8e\x3b\xeb\x4e\xcc\x40\x05\x03\x40\x1c\xcc\x59\x19\xd5\x22\x4f\xd9\x7f\x8a\x1d\x16\x1f\x58\x30\x70\x5f\xb9\xfe\xe4\x40\x54\x17\x7f\x2a\xd2\x5c\x5b\x23\x40\xd0\x1d\x7b\x78\x0c\x3a\xc2\x11\xc4\xc1\xee\x15\x3f\x7e\xcf\x4b\xa1\x08\xa1\x91\xa8\xf8\xb5\xdb\xd4\x41\xfb\xd5\xe2\xdf\x7c\x64\x07\x9f\xd6\x12\xc8\x27\x24\xc8\xe3\x07\x1c\x43\xc5\x18\x40\x1c\x4c\x96\x84\xe2\x24\x45\x55\xfd\x0d\x76\x99\xf3\xe9\xba\xb3\x38\xa9\x62\x55\x82\xcd\x95\x80\x74\xbd\x5b\xe1\x71\x31\x3e\xda\xcf\x1c\xeb\x10\xb2\x20\x0e\x26\xcb\xbb\x4d\xe5\x84\xfd\x56\xc8\x36\x58\x58\x7f\x47\x76\x80\xe7\x38\xee\xfd\xe1\x07\xb9\x3a\x92\x24\x87\x63\xc1\x2e\x16\xb3\xee\x0e\x68\x03\x2e\x80\x83\x39\x6b\x12\xef\xd7\x43\x59\x8d\x11\x5d\xb2\x4a\x82\x74\xa7\xe2\x9b\xe6\x14\x2f\x94\xf5\xf7\x71\xe6\xbb\x7c\x08\x16\x7e\x2a\xa0\x0a\x0d\x21\x3e\x9d\x41\x1c\xe2\x08\xc7\xf3\x65\x3e\x40\x6f\x56\x64\x6b\x49\xba\xb5\xdc\xe8\xf3\xf9\x6c\x9b\x5d\xbe\x64\x7a\x61\x8b\x4c\x8a\xe1\xf3\x56\x86\xac\x3b\xce\xcf\xa8\x2a\x42\x39\x9e\x90\x7d\x68\x37\x27\x88\x83\x59\x6b\x85\xf1\xc9\x43\xf6\xae\xb5\x58\x65\x6b\xb6\x37\xf5\x2e\xa7\xef\x1e\x91\x3d\x30\x4d\xda\x5a\xa4\xe8\x7c\xa9\x5a\x89\xf1\xad\x73\x0f\x21\x0b\xe2\x60\x37\xcb\x0e\x5d\x24\x3f\x4d\xd1\x06\x1d\xbb\x67\x39\xf1\x26\xf5\x01\xb3\x65\xcd\xe9\x6d\xfa\x97\xfb\x75\x3d\x4e\x91\x51\x8a\xe5\x5f\x0d\x11\xb2\x20\x0e\x26\x7b\xb3\xe0\x4d\xba\xf7\x60\x0d\x2d\xbb\xd2\xd3\xab\xdd\xc2\x7a\x7f\x5e\x95\x99\xdf\x6f\x38\x39\x51\xe1\x65\x0e\x92\xf9\x41\x56\x00\x9d\x44\x03\xe2\x60\xb2\xba\xed\xad\xde\xcf\xaa\x94\xc6\x06\xa3\x57\xea\x35\x0e\x0c\xbc\x23\x52\xf4\x25\x0b\xfe\xb0\x7b\xe7\x59\x4c\x35\xb0\x3c\xe3\x80\xd6\x21\x40\x1c\xcc\x5a\x1f\xfa\xbf\x44\x26\x6c\x9a\x76\x4b\xd4\x2c\x5b\x57\x3d\x9e\x79\xdc\x48\xba\xf3\x71\xa3\xf7\x4c\xbe\x7e\x2b\x4d\x7c\xe9\x48\xad\x0d\x61\x2d\x10\x87\xb0\xd6\xf9\x32\x1f\xa0\x2f\x28\x64\x6b\xf1\x3a\xa2\xd4\x15\x79\x3d\x31\x6d\x7a\x3f\xd2\x42\xcc\xcd\x3d\x4f\x31\x7d\xd1\xbf\x1c\x25\x7a\x35\x85\x5d\xb5\xc7\xef\x28\x2a\x16\xea\x59\x00\x0e\x66\xad\xe9\x55\xbf\x49\x69\x67\xea\x63\xce\xee\xe7\xb9\x06\x0d\x66\xfc\x5d\x2d\xab\x95\x8f\x0d\xde\x6f\x75\x47\xb3\xfe\x2e\xcd\xac\x86\x76\x63\x80\x38\xd8\xcd\x12\xd7\xf8\xe3\x99\x26\x42\x4c\x99\xac\xe4\x48\x10\x6d\xcf\x38\xa0\x84\x76\x75\x89\x53\xd4\xcb\x60\x33\xaf\x03\xc7\xf2\x03\x01\x34\xd8\x03\x71\x30\xd9\x65\x6f\x3a\xe9\x1b\x5e\x05\x3a\x2f\x6b\xa5\x96\x25\x8b\x1c\x1b\x3e\x54\x26\x17\x52\x1c\x6d\xd2\x7b\x29\x91\xde\xe8\x92\xa3\x82\xf6\x90\x81\x38\x78\xae\xce\x3a\x37\x4b\x92\xf0\x61\x26\xd6\xeb\x58\xbf\xb6\xb3\xc1\xee\xc9\x27\xd2\xee\xd2\x47\xac\xed\x58\x9c\x97\x46\xcd\x3a\xab\xb3\xa1\x5c\x1d\x80\x83\x59\x6b\xdf\x3a\x97\x80\x9d\x7e\xf0\xe9\xc6\xcf\x19\xbf\x5a\xc6\x29\x9a\x28\xed\x41\x21\x47\x6d\xba\x43\xbf\x5f\x85\x39\x17\xa9\x68\xbf\x20\xac\x05\xe2\x10\xd6\x3a\x5f\xe6\x03\xf4\xa5\x8c\x6c\xad\xf5\xa8\xad\xd0\xb7\x07\x68\x34\x6e\xed\xa3\x6f\xbf\x7e\x0f\x8f\xd5\xce\x75\x6f\xd8\xaf\xd3\x1b\x2f\xde\x70\x5e\x6f\x76\x4d\x83\x5e\x31\x20\x0e\x1e\x82\x54\xab\x48\x7e\xc1\x73\x21\x38\xc4\x68\xb0\x30\x28\x9e\x79\x35\x2e\x83\x99\x2a\xc7\xbc\x77\xd3\xb2\xc3\xbf\x0e\xff\x4b\x22\xb4\x75\x06\xc4\xc1\x6e\x96\x92\xa5\x79\xf7\x38\x5e\xca\x95\x01\xed\xf0\x7e\x59\xb5\x3f\x7d\xc2\x04\x69\xda\x6c\x56\xc4\x03\x7a\xba\x4a\x3a\x99\x31\x91\x3b\xd0\x82\x1c\x80\x83\xc9\xfe\x3a\xfa\xfd\x85\xe7\xb7\x55\xca\x61\xf2\xb2\x56\x37\x5a\xb6\xa5\xa7\xe2\xd2\x93\xef\x8a\xa4\x72\xbb\x6f\x09\xae\x38\x58\xb4\x38\x21\x64\x41\x1c\x7c\x8a\x4a\x36\x6c\xd4\x3d\x4c\x62\xae\x9a\x0d\xab\xb6\xd0\x63\x27\x76\x43\x4e\x70\xaf\xae\xfb\x5a\x00\xfa\xfe\x8a\x96\x35\xeb\x73\xa8\xf0\x15\x88\x83\x59\xeb\x89\xcd\x50\x31\xed\x5b\x7e\x6a\x6f\xd6\xdb\xab\xdd\x4f\xdc\x57\x22\xb7\x6e\xa0\xdd\xba\x9d\x17\x9d\x15\xa2\xd9\xac\x3e\x24\x5a\x8c\xb0\x16\x88\x43\x58\xeb\x7c\x99\x0f\xd0\x88\x08\xd9\x5a\xa4\x93\x3d\x03\xbe\x65\x03\x9c\x24\x7d\x09\xc5\xaf\x94\xf3\x3e\x86\xd5\xdf\x4e\x8c\xba\x7c\xd7\xf9\xc1\xc8\xcd\x84\xd6\x9b\x28\x23\x88\xbf\x0f\xe2\x60\xd6\x7a\xdb\x5e\x50\xfc\x44\xed\xa5\xda\x0c\x76\xf3\x93\x62\xff\x15\x4b\x1a\x4e\x54\xd1\xa1\x1c\xa9\x29\x0f\x5c\xed\xf9\x47\x86\xcc\xd5\x08\x59\x10\x07\xb7\x96\x9b\xc3\xba\x72\x8b\x37\x5a\xc9\x2d\xcc\xe4\xda\x3f\x93\xf9\xdf\x2a\x93\xdd\xf6\xcc\x2b\xf9\x82\xf9\x56\x5d\x12\x74\x17\x65\x20\x6b\x01\x38\x78\x52\x8d\x95\x6b\xe7\x87\x9b\x49\xd2\x37\x06\xef\x47\xbf\x0b\x84\xd3\x4d\x53\x4a\x7a\xcb\x85\x0c\x8b\xf2\x50\x73\xfe\x2c\x87\x3f\x84\x4e\x7c\x03\x71\x30\xd9\x11\x6b\x06\x9f\x96\x7b\x3a\xe8\x25\x7a\xa5\xf9\xf1\x07\x1b\x78\x1f\x2b\x77\x0a\xf2\xb3\x7b\xbb\x95\xf4\x5b\x2f\x5f\x10\x99\x38\x46\xc8\x82\x38\x98\xb5\x7e\x30\xe8\x7d\xef\xfa\xf6\x53\x30\x28\xaf\x56\x6e\x1a\x6d\xd8\x62\xb5\x60\xe0\x01\xc6\x49\x99\x90\x66\x41\x1d\xfe\x45\x3a\x5e\x1e\x84\xb5\x40\x1c\xc2\x5a\xe7\xcb\x7c\x80\x46\xbe\xc8\xd6\x72\xae\x66\xdc\xa0\x5a\xd9\x26\xba\x85\xcd\xd1\x1d\x2a\x59\x8a\x43\x46\x10\x58\x6e\x3d\x32\x79\x38\x25\x9c\xff\x96\x6c\x80\x94\x14\x0a\x67\x00\x38\x98\xb5\xa2\xd4\x86\xa9\xbf\x2e\x06\x63\xf3\x72\xc9\x54\xd0\xb3\x1b\x16\xef\x66\x93\x76\xa1\x3e\xbf\xa6\xbb\xa5\x16\xf3\x24\x5d\xf6\xfe\x20\x42\x16\xc4\xc1\x6e\x96\xe5\xd0\x5c\x96\x56\xc3\xa5\x35\x13\xce\xfc\x3c\x8b\x45\xfb\x5f\x63\x65\x3b\x53\x77\xf5\x49\xfe\xa0\x7c\x7c\xb8\x93\x50\x98\x7a\x1f\x21\x0b\xe2\x60\xb2\xb6\x05\x72\xd7\xbf\xfc\xaa\x57\xf7\xd1\xf0\xab\xd7\xef\x7b\xbf\x67\x29\xf9\xf9\xc5\xe0\x18\xb1\x9d\x28\x6d\xe8\xac\x51\xd7\x04\xb4\x30\x0f\xe2\xe0\xc7\x54\x1a\x68\x8d\x53\x8a\xdb\x46\xaf\x4d\x19\xd0\x65\x73\x0c\x27\x95\x2d\x1b\x1e\x29\x87\xb7\x70\x8c\x88\x3c\x37\x27\x6a\xfe\x92\x86\x90\x05\x71\x30\x6b\xfd\x8c\xee\x29\x8b\xde\x58\xa2\xf3\xbe\xd4\x6a\x7c\xbd\xe9\x65\xf8\x40\xbc\xec\xe6\x42\xa3\xdf\xe6\x52\xef\x16\xcf\xb2\x35\x0f\x74\x64\x0c\x88\x43\x58\xeb\x7c\x99\x0f\xd0\x0c\x07\xb2\xb5\x58\x9a\x54\xfd\xdf\x09\x26\x8f\xd5\x7c\x7a\x16\xa7\x78\x23\x1a\x67\x2c\x37\x92\xe6\x60\xf3\x69\x93\x00\x45\xc4\x77\x95\xb1\xae\x23\x68\xab\x05\x80\x83\x59\x8b\x81\x57\x01\x8f\xf7\x15\x77\xe6\xdc\x45\xdb\x8e\xfd\x6e\x3e\x4c\x9d\xb6\x3f\x3e\x57\xe5\xe3\x5c\xc6\x7b\xef\x53\xae\x48\x3e\x84\xf6\x9b\x80\x38\xd8\xcd\xd2\xe7\xe1\xa9\x61\x9f\x14\x69\xd8\x08\x48\x5b\x0f\x5f\xa7\x7b\xbb\xd7\xe5\x46\xae\x6a\x2f\x4b\xf7\x03\xcb\x46\xf7\x21\x09\x29\xb4\xeb\x11\xc4\xc1\x64\x09\xdf\x9e\xe6\xdd\xca\x66\x8f\xde\xb9\xce\x55\xb4\xe7\x7e\xf7\x7d\x91\xa5\x83\x2d\xb5\x28\xb5\x17\xc6\x60\x00\xaf\x31\x8e\xb6\x15\x42\x16\xc4\xc1\xc7\xb3\x9a\x39\x98\xa5\xf6\xcf\x75\xef\xa0\x46\xeb\x5b\x9d\x5a\x6a\x0b\xa0\x5c\xbc\x4d\x8f\x8b\xd9\x9a\xf8\xd3\x28\x88\x3e\xf2\xda\x33\x68\x3c\x0b\xe0\x60\xd6\x4a\x91\xe8\x67\xa5\xdc\xd3\x1e\xc1\x88\x18\x15\xfc\x42\xf1\x9d\x7c\x44\xfd\x70\xf7\x8e\x2f\xe1\x53\x83\x7b\x27\xc3\xa1\xd3\xba\x67\x08\x6b\x81\x38\x84\xb5\xce\x99\xf9\x00\xcd\x61\xff\x93\xf9\xf0\x46\xca\x7c\x78\x44\xe2\x27\xf9\xbc\xae\x8e\x24\x77\x74\x17\x2d\xa9\xc1\x14\xff\x39\x22\x46\xa6\xba\xe9\xe6\x7b\xe0\xac\xf4\x46\xf1\x43\xf7\xdf\xd7\x2d\xf6\x46\xca\x7c\x1c\x2f\x2e\x2d\xf5\x0e\xed\x4d\xa3\xf0\x9a\x27\x59\x77\x65\x62\x66\x75\xdf\xad\x7b\x47\x44\x34\x78\xb9\xe9\x52\x15\x43\xf6\x6b\xb9\xbf\x6f\x12\x29\xf3\x41\xd4\x6c\xd8\xea\xdc\x38\x8b\xd1\xc8\x26\xf6\xd6\x31\x02\xcd\x8d\xcc\xdf\xcf\xd4\xed\x82\x3b\x19\x4d\xe7\xd4\x07\xd4\x27\x38\x6d\xff\xcd\xe4\x22\xe8\x5a\x22\x77\x70\xa3\x07\xbc\x6d\xbf\x53\xe4\x2d\x77\x98\x71\xd3\x5f\x86\x53\x8b\xb7\xab\xb0\xd7\xd3\x60\xb7\xcd\xdc\xb3\xb8\x3d\x6e\x1a\xe0\x09\x1d\x10\x00\xe2\x60\x1d\xbc\xa4\x5d\xc4\x2f\x64\x36\x5a\xc9\x80\xf6\x58\xc7\x10\x23\x32\xca\x02\x87\xc2\x39\x58\x81\x24\x93\x50\x3d\x22\x8f\x73\x27\x00\x2a\xcb\x0b\xe2\xe0\x15\x77\x6c\x5f\xbd\xa9\x0a\xc8\x35\x6f\xa2\x27\xda\xff\xbc\x22\xcd\xf5\xb3\x49\x1d\xed\x2a\x35\x19\xfd\xd2\xd5\x6b\xab\xb6\xd7\x4c\xa1\x5c\x3e\x88\x83\xe7\xf2\x33\xef\x97\xd9\x17\x25\xcf\x73\x5c\xff\x69\x9c\x91\x52\x5a\x44\x69\x73\xcd\x85\xe7\xcb\x0d\x35\x12\x3e\x8e\x58\x8e\x90\x1f\xbc\x50\x2e\x1f\xc0\xc1\x64\x7f\x24\x5b\x6c\xc9\xba\x9d\x8d\x3e\xf3\xc7\x8c\x69\x61\xfa\xe1\x62\x54\x2a\x96\x65\x75\xcf\x3f\x67\x6e\x8e\x7d\x61\x47\xbe\x16\xda\x9b\x01\xe2\x60\x1d\x7c\xec\xab\x22\x86\x7d\xdd\xcf\x47\x9e\x3f\x5a\x8d\x0d\x74\x14\x0e\xad\x13\x55\xfe\x68\x7c\x94\xa3\xfd\xfe\x2c\xd8\x58\x8c\x7d\x4c\x0d\xd1\xc1\x41\x1c\xa2\x83\x9f\x2f\xf3\x01\xea\x33\xff\xa3\x3e\xb5\x73\xfa\xb7\xdb\x8e\x5e\x9a\x04\x91\xc1\xf4\xf2\x61\xb4\x3d\x16\xb3\xdb\x35\x0b\xfa\xc9\x05\xc1\x24\xd1\xd9\xed\xea\xb9\xd0\x38\x1d\xc4\xc1\xac\x95\xf3\xe6\x52\xfd\x7d\xcc\xeb\x17\xf1\x8c\x65\x59\xa2\x7f\x3b\x88\x7f\xa0\xae\xe6\xf2\xeb\xb8\xd8\x78\x96\xad\x66\xe2\x48\x65\x8f\x85\x90\x05\x71\xb0\x9b\x75\xdf\x76\xd4\xb8\xd7\xc0\x37\xb6\xc9\xb1\xe4\x3d\x6f\xc8\x1f\xe7\xb7\x75\xcc\x47\xed\x86\x5d\xf6\x14\xd3\xa5\x06\xd2\x99\xde\xd0\x91\xe4\x20\x0e\x26\x6b\xb6\x6d\xdd\x28\xcf\x72\x4f\x27\xa7\x6a\x2d\xeb\x83\x7c\x5f\x95\x43\xfe\x9d\x32\x54\x8e\xaf\x1e\x35\x45\xb4\xda\x9f\x3a\x8e\xa1\xcc\x07\x88\x83\xc9\x0e\x53\x4e\x12\x31\x3d\xad\x6a\x66\x67\x0e\x71\x7a\x58\x6a\x99\x5b\xc3\x69\x78\xdd\xa4\x45\x53\x53\x19\xed\xaa\xde\xdd\xc1\x8a\x1b\x08\x59\x10\x07\xb3\x56\x40\x76\xef\x73\x33\x5b\x41\xec\x60\x5d\x8d\x4f\x25\x59\xa4\x94\x14\x0f\xb7\x18\x6e\xc8\x99\xa0\xdf\xcd\x18\x8b\xac\xf5\xf0\x44\x47\x58\x0b\xc4\x21\xac\x75\xbe\xcc\x07\xe8\xd9\xf8\x3f\xf6\x66\x38\xbd\xee\xd8\xed\x7c\x9a\x25\x62\x5f\x29\x26\xeb\x23\xcf\xc0\x9a\x9c\xf3\x11\x03\xd3\xbf\x53\x72\xfa\xe3\x4b\xad\xa2\xc7\x7a\xd0\xde\x0c\x00\x07\xb3\xd6\x8d\x17\x69\xdd\x7b\x75\x0f\x49\xae\x6a\x31\xe3\x52\x35\xcd\x4f\xec\x61\x7a\xf2\x96\x51\x06\x2f\x5d\x72\x97\x16\x92\x3f\xe3\x1b\x82\x32\xa3\x00\x0e\x76\xb3\x2e\x56\x77\x6f\x63\xa1\xb7\x7f\xad\xad\xea\xd4\xbe\x87\xa9\x1c\xe8\xfc\xea\x5b\x4d\xc9\x9f\x7c\x93\x6a\x07\x6c\x65\x37\x95\x22\xa8\x7a\x28\x88\x83\x4f\x5c\x1f\xf4\xe1\xb5\x32\xee\xa3\x96\x0a\xbe\x36\xbc\x57\x36\x83\x77\xb0\x56\xfb\xc6\x49\x51\x53\xb8\xc7\x48\x5d\x6a\xff\xf6\x3d\xe8\xa0\x4c\x10\x07\x93\xbd\xb6\x34\xc8\xfa\xd9\x62\x4c\x1a\xdd\xc5\xc1\xb3\x24\x84\xc4\xb2\x43\x2f\xe4\x50\xe4\xa8\xc3\xbf\xf1\xc9\x4d\xdc\xdd\x2a\x73\x68\xbd\x1f\xc4\xc1\xac\xb5\xe3\xc9\x75\x80\xa3\xff\x82\x71\xc5\x77\xff\xcd\x67\x6a\xd3\x35\x2b\x9a\x28\xf3\x17\xe9\x67\x3b\x4e\x13\xa4\x41\x47\x5f\xdf\x5e\x45\x58\x0b\xc4\x21\xac\x75\xbe\xcc\x07\x68\x95\x1f\xd9\x5a\xc1\xc7\x0f\x7a\x97\x28\xbb\xdb\x9a\x75\xcd\x3e\xdd\x44\xb3\xce\xbd\x5e\x50\xa7\xe1\x3f\x72\x72\x36\xf3\x38\xb0\x76\x68\x5c\x18\x5a\x6d\x03\x71\x30\x6b\x69\xa9\x24\xa8\xee\x6d\xa1\xec\xb0\xb1\x5c\xef\xbc\xab\x1b\x87\x97\xc9\xdc\x47\x29\xb1\x71\x85\xdc\x2d\x6a\x13\x9b\xe0\xc2\x48\x0d\xf4\xe6\x02\x70\xf0\x72\xbf\x89\x8e\x8f\xaa\x5c\x2b\x9a\x9e\x44\xdd\x21\xe4\x28\xd5\xc1\xe2\x9a\xe3\x4b\xa3\xfb\x3c\x2d\x71\x75\xfc\xf9\xf6\x1e\x87\x08\x94\xcb\x07\x71\xf0\x01\xb5\xca\x9e\x58\x0d\x99\xca\xc3\x57\x7a\xd7\x8a\xac\xa5\xc4\x54\xab\x7e\x8e\xb9\xbf\xc6\x4b\xba\x57\x5a\xb0\x91\x24\xa0\xdf\x05\xad\x0d\x82\x38\x98\x2c\x53\xe1\x63\x67\x53\x7b\xde\x89\x07\x3a\x22\x3a\x4a\x77\x63\x63\x6a\x2d\x2b\xfa\x7e\x86\x9b\xd8\x5d\x6d\x2f\x7a\xf4\x62\xa3\x56\x04\xca\x7c\xfc\xb1\x32\xe5\x99\xba\x1e\x25\x7c\x5a\x4b\x51\xef\x4e\x3b\x49\x87\xf3\x51\x21\xf5\xb3\x68\xaa\x58\xde\x4f\x4e\x46\x3e\x3f\x8e\xae\x7f\x67\x3e\x2a\x87\x33\x94\x3b\xaa\x35\xf4\xbc\x62\x7e\xd3\x88\x3b\x49\x3e\xf2\xa0\xf8\xec\x65\x7f\xa7\xb7\x09\x37\xcd\xe7\x0f\x39\x66\x8f\xe8\xbf\x47\xb4\x0f\x55\xa8\xd8\xcd\xbe\xf8\xf8\x6c\x7f\x24\xf8\x83\x15\x38\xc1\xe5\x7b\xf9\xd9\xe8\xd6\xa9\xe4\xf3\x2e\x15\xcd\x27\xad\xfb\xa9\xb0\xcc\x07\x48\x19\x39\xf3\xd1\x55\x68\xa6\xff\xd5\x5a\x9d\x6e\x82\xcc\x56\xf3\x42\x15\xef\x70\x95\x2b\x1a\xfd\xa3\x28\xc9\xa4\xc5\x57\x81\x3e\x78\xa8\xc2\x27\xff\x42\x5d\x93\x23\x58\x74\x34\xc6\xeb\x38\x0c\x51\x53\xbd\xa4\x4e\x2f\x4e\x50\xb4\x90\x11\x09\x0d\x2b\xdf\x24\x0f\x48\xc6\xf8\x6d\x3f\x01\x65\x3e\x40\x9a\xff\x64\x3e\xea\xe1\x99\x8f\x61\x3c\x0e\xb6\xe1\x1d\xeb\x8a\xcc\x3c\x12\xbf\xba\x37\x9d\x0d\x32\x0c\x1c\xc7\xd9\xa3\xdd\xbd\xa4\xa4\x16\xbb\x2e\xf6\x37\xfa\xfe\xfa\x23\xb7\x1e\xf9\x6c\x17\x9f\x55\x6f\x01\x91\x89\x82\x3d\x01\xbb\x54\x17\x31\xda\xc8\x93\x3e\x1e\x8d\x18\xc6\xf8\x25\xa2\x27\xfb\x18\xcb\xeb\xc1\x01\x7f\xdf\x24\x52\xe6\xc3\xba\xf7\xb1\x13\xc3\x6a\xd9\x0d\xd6\x17\x84\x81\x2f\xef\x6f\x15\x4d\x19\xda\x2c\x27\xcd\x8e\x95\xf0\x97\x26\x76\xb2\xda\xca\x1f\xfe\x7d\x93\x48\x99\x8f\x54\xdf\xbd\xb6\xbc\xcb\x05\xba\x54\xce\x89\xde\x7d\x38\xb1\x25\x1d\x7d\x32\xf8\x63\x3f\x2b\xbe\xcd\x7d\x60\x4c\xff\xf5\x59\xc9\xf6\xef\x9b\x44\xca\x7c\x48\xb6\x75\x7c\xd6\xc8\xb2\x76\xfe\xcc\x79\x7b\x64\x91\xb4\xf3\x78\x26\xb9\xbf\x5d\x64\x9b\xf5\x01\x96\x4d\xa7\xf1\x77\x6c\x73\xd7\xbf\x6f\x12\x29\xf3\x61\xde\x56\xe4\x96\x28\xd8\x7b\xe0\x5c\xdc\x5b\xf6\xfd\x29\xb9\x64\xf1\x4a\x8e\xef\xc7\xf9\xa1\x37\xbd\xac\xc6\x77\x54\x95\xbf\x61\xfd\x7d\x93\x48\x99\x8f\x74\x6d\x65\x03\x1a\xa2\x64\x41\x81\x1c\xb6\x1a\xd7\xb1\xbb\x7c\x0e\x2d\x0f\x37\xf7\x78\xec\x18\x75\xd2\xc5\x50\xbe\x1e\x25\xc5\xfd\x7d\x93\x48\x99\x0f\x59\x87\x95\x46\x61\xc6\x9c\x11\x93\x24\x11\xd1\x5b\x17\x3e\x1a\xf8\x88\x8e\x16\x3f\x17\xbf\xa0\x2a\x59\x7a\xd9\xdd\x7a\x43\x32\xfe\xbf\x19\x96\x81\xba\x22\xf2\x5b\x28\x62\x35\x36\x2b\x95\xc9\xf2\x65\x68\xdf\x51\x1a\x25\x01\xf1\x7a\x82\x4d\x5a\xf3\x5d\xaa\x2e\x26\x76\xf2\xb5\x07\x0f\x04\x48\x44\x10\x0f\x60\x10\x07\x7b\x0b\xb9\xbd\x28\xcd\xcd\x58\xf8\x1e\xa0\x63\x74\xff\x83\x5d\xca\x0d\xa6\x97\x36\x7c\xea\xaf\x2b\xea\xef\x3c\x18\x65\xc2\x2e\x13\x27\x84\x0e\x99\x07\x71\xf0\x69\xdd\x01\x26\x8c\xde\x04\x6f\xe1\xcc\x69\x03\x5e\x09\x32\x99\x1f\x58\xb7\xbc\x9e\x70\x17\x85\x16\xeb\x24\x99\x4d\x07\x9a\xa8\x41\x9b\x4f\x41\x1c\x4c\xf6\xc4\x88\xe8\x53\x7a\x07\xed\x8f\x57\xcf\xde\xe3\x1d\xff\xd6\xa0\xb8\x6f\x6c\xd0\x75\x73\xe3\x2b\x41\xfb\xc6\xf8\xb7\x49\x8f\x5b\xe3\x08\x59\x10\xe7\x27\x8a\xf7\x6f\xd9\x63\x51\x77\x63\x74\x8c\x38\x2c\x36\x97\x90\x40\x9a\xa0\x63\xc9\xf6\x52\x8b\x06\x4b\xf7\xdb\xac\xef\x67\xa9\xd9\xe9\x3f\xbc\x81\xea\xab\x82\x38\xd8\x07\x4e\xfe\xcc\xe7\x69\x6b\xd3\x81\x48\x8f\xd3\x9e\x03\x74\x6f\x95\xbb\xcb\x6d\xa8\xca\x6b\x06\x85\xbb\xf6\x6b\x2e\x65\x7a\xca\x8c\x26\x88\xcc\x07\x88\xfb\xa7\xce\x47\xfd\xf9\xce\x76\x01\x3c\x71\x91\x9d\x45\x98\x3d\x37\x96\xc6\x3a\x5d\x58\xc4\xa9\x7a\xb8\x80\x51\xc9\x1e\xf1\xa5\x12\x9f\x91\xf3\x3d\xaf\x39\x35\xe7\x97\xd0\x79\x61\xe8\x64\x1b\x10\x07\x73\x96\xa1\x1d\x6d\x92\x55\x11\x9f\x3a\x66\xbe\xe3\x73\x92\x4d\x43\xf3\x90\x32\xe1\xd2\x9c\xb9\x9d\x10\x95\x59\x9e\x4d\xae\x44\x6f\x73\x84\x2c\x88\x83\x57\x4d\x20\x2e\x18\x37\xd5\x75\x68\xda\x67\x90\x1b\xe3\x88\xbc\x8a\xfd\x8d\x40\x71\xd8\xb9\x96\x8f\x45\x7b\x94\xe7\x97\xb3\xd0\x25\x26\xa8\x6a\x02\x80\x83\xc9\x12\xe1\x4f\x7f\xbf\xcd\xf4\xf0\x42\x44\xfe\x73\xa5\xb4\xd4\xfc\xa6\x92\xf6\x38\xba\x36\xbe\x8a\x6a\x12\xcf\x81\xa9\x8e\xe6\x98\x3e\x84\x2c\x88\x83\x39\x8b\x45\x0f\xa7\x90\x0c\xbb\xf2\x4b\x73\x72\x78\xcd\xad\xc3\x57\x3f\xb3\x1e\x3c\xd9\x53\x1c\x1b\xbb\x6c\x92\xec\x6e\xbe\xa9\x2f\x05\x9d\x86\x0e\xe2\x60\xce\x8a\xa1\x4f\x55\x26\xf2\x69\xe0\x37\x3b\xe8\x20\xb5\x4d\x90\x69\x7b\x6f\x1d\x87\xaa\xf4\x81\x3a\x71\xc5\xfc\x39\xab\xea\x29\x36\x54\x7d\x11\xc4\x21\x4e\x5b\x3c\x5f\xe6\x03\xf4\x66\x45\xb6\xd6\xda\x47\x33\x63\x57\xd9\x80\xc2\x2c\xcb\x41\xb5\x30\x7f\xc1\xa7\xb3\x23\x9a\x5d\x29\x6f\x48\xd9\xfc\x47\x52\x6e\x2d\xba\xa0\x0a\x21\xfe\x3e\x88\x83\x59\x8b\xac\x20\x61\x0d\xf7\xd2\xf7\x0b\x47\x4e\xea\x7f\x34\x84\x2f\xc9\x84\x56\x9c\xa8\xdf\xf1\xa0\x3c\x43\x65\xb0\x4a\xb9\x6b\x20\x0a\xdd\x2c\x10\x07\xdf\x8d\xb1\xd0\xbd\xbf\x79\xe5\x59\x36\x7a\xcb\x66\xaf\x36\x4b\xae\x74\x83\x14\x7d\x4c\xc4\xfb\x19\x93\xb4\x9c\x09\x93\x8c\x77\x0b\x50\xee\x07\xc4\xc1\x57\x4f\x7f\x72\xcb\x79\x2a\xd6\x30\x8b\x1f\xc5\x4d\x7f\x3f\x28\xdf\x68\x46\x0f\xf7\xd6\xfd\xfd\xf6\xbe\x2d\x3e\xd3\xa9\x3f\x66\x0e\xb4\x72\x06\xe2\x60\xd6\x0a\xe1\x6a\xcb\x2d\x93\xa8\x0a\xdd\x28\x65\x9a\x95\x94\x1d\x7e\x47\x28\x13\x86\xaa\x83\x26\xb7\xcd\xf6\x6a\xa9\x25\xa9\x30\x1d\x3a\x23\x16\xc4\xc1\xac\x95\x41\x23\xc1\x87\x3d\x85\xf6\xb2\xa4\x68\xf9\x08\x8b\xcd\x4a\xd1\x02\xbb\xf0\x41\xb5\x8b\x16\x39\x63\x6c\x1e\xcf\xe8\xba\x77\x27\xc2\x5a\x20\x0e\x61\xad\xf3\x65\x3e\x40\x5f\x50\xc8\xd6\xba\x20\x5b\x4a\xb8\x66\xfb\x48\x9b\x6a\xe8\x98\x36\x68\x5d\x75\x47\x93\x59\xa1\xf7\x2d\x96\xc6\xfc\x77\x05\x1e\x99\x86\xc7\x8b\x50\xc1\x00\x10\x07\xb3\xd6\x93\xc5\xc3\x8f\x28\x1d\x1f\x43\x52\x66\x14\x3c\x7e\xd7\x24\xf4\x3b\xa9\x06\xa2\xba\x5e\x09\x62\x66\x6f\x60\xbd\xfa\xdc\x91\x76\x19\x21\x0b\xe2\x60\x1e\xf8\x60\x2c\xe1\xb8\x52\x61\x71\x75\xaf\x4e\x9c\x7c\xce\x8c\x27\xe1\x29\x9d\xc0\xdc\xe1\x3c\x67\xa1\x42\xb3\x63\x24\x95\x9b\xaf\x3b\x42\x16\xc4\xc1\xcf\xf5\x70\x52\x41\xa5\xd1\xf5\xf0\x73\x7f\x66\x29\xba\x7d\x96\xf9\x9c\x5f\x9c\x50\x79\xaf\xa1\x6c\x8b\xc3\xe2\x87\x29\x5f\x90\x3d\xb4\xd3\x05\xc4\xc1\xac\x15\x75\x4d\x9b\x9c\x5f\xa7\x78\x7e\x71\x67\xb8\x03\x8b\x8e\x2d\x82\x68\x8a\x06\xef\x8a\xd2\x64\x80\x43\x6c\x2b\xd7\xcb\xeb\x75\xbf\xa0\x75\x3e\x00\x07\xb3\x16\x5d\xb7\xd7\xb8\xac\xaf\xe4\x6b\x09\xe6\x9b\x81\xb4\x8b\x13\x0f\xd7\x84\xc6\xa8\x76\xdf\xbf\xd3\x8e\x4d\xd6\x67\xf8\x1d\xf4\xbc\x0a\x61\x2d\x10\x87\xb0\xd6\xf9\x32\x1f\xa0\x2f\x65\x64\x6b\x7d\x7f\xb1\xff\x72\x20\x42\x6c\x7e\x46\xc8\x76\x5a\xaa\x2e\xea\x38\x5a\x6b\xee\x9d\xa7\x7f\xf8\x98\x7c\x1d\xf3\xe5\x87\x17\xb1\x38\x11\x7f\x1f\xc4\xc1\xac\xa5\xfb\xa0\x5f\x43\x36\x41\xc4\xed\xc7\x83\x59\xa7\x78\xa3\xc7\x07\x02\x1b\xe3\xc4\x33\x79\x27\x12\xf7\x66\xd9\xf0\x93\x04\x69\xa1\x22\x65\x20\x0e\xe6\x01\x51\x9f\x48\x8f\x52\xc5\x5f\x1e\x46\x1f\x4f\x9d\x15\xd3\xb3\xcc\xd1\x33\x43\x16\xde\xdb\xa6\x2f\xbc\x6e\x4d\x55\xd0\xa5\xde\x84\x4e\xe7\x03\x71\x30\xd9\x66\x52\xe5\x70\x87\xe5\x4d\xa2\x71\xb6\xef\x89\x95\x9a\xcc\xa7\xdd\xdf\x7e\x14\xfa\x0e\xa9\xe6\x56\x32\x6f\xcd\xae\x7c\x56\x89\x43\xc8\x82\x38\x98\xb5\x38\xda\xa2\x2a\xbc\x3b\xb0\x7a\x47\x3d\x0e\xf9\x86\x7c\xdf\x5c\x5a\xcb\xa0\xbd\xd2\x39\xd8\x95\xd6\xe6\x78\xf8\xe4\xc7\x94\x8b\x3a\x42\x16\xc4\xc1\xac\xe5\x42\xed\x62\xaa\xc9\xf2\x84\x50\x9b\x73\x0a\x95\xd3\xab\x95\xcc\x7a\x59\x3f\x3d\xb4\x2b\x86\xf7\xa9\xb2\x32\x2d\x7f\xf6\xb1\x10\xc2\x5a\x20\x0e\x61\xad\xf3\x65\x3e\x40\x23\x22\x64\x6b\x85\xdd\xe9\xd0\x4f\x0a\x9b\x74\xc0\xf5\x66\xa2\x5a\x8e\x57\x5d\xb9\xa8\xdd\x5f\x5d\x4c\xac\x74\x42\x93\xf6\x7f\xac\xbd\x75\x50\x57\xcd\xff\xfe\x4f\x83\x84\x48\x8a\x80\x48\x29\x21\x20\x25\x25\xdd\xdd\xa1\x84\x48\x8b\xb4\x84\x34\x48\xa7\x34\x22\x28\x92\x12\xd2\x82\x34\xd2\xd2\x08\x12\x82\x48\x4b\x83\xb4\xb4\xbf\xf9\xce\xdc\xaf\xf3\xb9\x7f\x87\xf7\xcc\x32\xe3\xfd\xff\x63\xae\xe5\x2c\xd7\xbe\xce\xee\x9e\x6b\x9f\x6b\xa1\x71\xf6\xab\x0d\xaa\xf9\x04\xe2\x60\xd6\xba\x96\x63\x44\xb5\xf5\xad\xce\x80\xbc\x9c\xec\x29\x47\xa6\xc4\xc7\x08\x2f\xa2\x4a\x9a\xd6\xac\xb5\x14\xfd\x34\xaf\xb3\x95\x5f\xa6\xd0\xc6\x1f\x80\x83\x79\x20\xa9\x57\x23\x0c\x0d\x03\xbb\xa6\x3e\xb5\x30\x61\xc7\x6e\xc5\x9f\xd2\x9e\x2a\x48\x72\xe4\xab\x67\x57\xf2\x7b\xa2\xf5\x1f\x13\x50\xed\x68\x10\x07\x93\x95\x5a\xf9\xba\x71\x2d\x52\x83\xdb\x0a\xd3\x5f\x32\x9e\x9f\x5e\x7d\x6c\x2f\x4c\xf6\xe6\x90\x6a\xd8\x1e\xe5\xa1\x91\x66\x97\x25\x54\x8c\x01\xc4\xc1\xac\x75\x38\xda\xc9\x89\x4f\x52\x31\x33\x3b\xd1\x7e\x18\x71\x52\x71\x79\xa0\x7f\xb0\x90\xb4\x2a\xec\x47\x58\xa2\x52\xcf\xcb\x06\x76\x68\x9b\x12\xc4\xc1\xac\x25\xd0\x65\x5a\xe7\x27\x70\xb4\xab\x49\xf4\x86\xc5\x7e\x82\x2b\xe0\x8b\xe8\x51\x4d\xee\x64\x73\xf3\xf1\x81\x50\x5d\xb8\x95\x49\x14\xc2\x5a\x20\x0e\x61\xad\x8b\x65\x3e\x40\x2b\xdf\xf3\xd6\x0a\xfe\x53\xf3\x4c\x53\x1f\xf7\xeb\x63\xbe\x3f\x7b\x8f\x6d\xec\xea\xe9\xc4\xe6\xf1\x99\xb8\x59\xbf\x6b\xf2\x3d\x27\x27\xe5\x31\x82\x7e\x5e\x40\x1c\xcc\x5a\x76\x8e\xdf\x09\x38\x14\x9e\xe0\x4b\x6b\x09\x28\xdb\x63\xbe\x24\x55\xbd\x5b\xa6\x50\xa7\x9f\x25\x9e\x8e\x6e\x2f\xda\x8d\x72\x52\x8c\x90\x05\x71\x30\x0f\xd0\xb4\xfa\x2e\xb0\xf7\x3e\x89\xa3\xb7\x55\x69\xcc\x32\xc8\xf2\x8b\xc1\x6e\x0a\xc8\x32\xed\xba\x9e\x9e\xc1\xfd\xcd\x4a\xf5\x05\x74\x69\x3a\x88\x83\x97\x90\xf9\xf4\xed\x33\x8b\xfd\x53\xa7\xb6\xd1\xc9\xf6\xf8\x17\x0b\x8a\x87\xfd\x8a\xe1\x65\x22\x8c\xac\x83\x66\xee\x6f\x24\x23\x73\xa1\xb9\x16\x88\x83\x59\x6b\x59\xba\xc0\xae\x7e\xc5\x13\xbd\x2f\x21\x97\x46\x85\x5b\xf9\xd2\x8d\x8a\x4e\xfe\xe9\x23\xeb\x10\x05\xf6\xd4\xc0\xa8\xd7\x95\xd0\x11\x06\x10\x07\xb3\x56\x4d\x39\x96\x17\xd1\x1d\xca\x21\xd3\x1f\x28\x89\x57\xdc\x9e\x4e\x0d\x90\x3d\xfe\x10\x55\x82\x53\xa0\xda\x34\x6e\x40\xad\xd9\xd7\x80\xb0\x16\x88\x43\x58\xeb\x62\x99\x0f\xd0\x0e\xc7\x79\x6b\xd9\x2b\x24\x16\x8c\xb5\x8a\x13\x8a\x91\xad\x7d\xe2\x93\x27\x49\xe2\xf7\xdd\x7a\xaf\x75\xec\x19\xc5\xdc\x97\xb1\x28\x45\x6a\x02\x55\x29\x03\x71\x30\x6b\x9d\xbc\x30\x21\xbb\xfd\x58\x51\xb2\x1a\x97\x6a\xbb\x88\xc8\x0a\xf5\x9a\xce\xa3\x4a\x8b\xba\x6c\x8c\x92\x2d\xd5\x37\x4f\xdf\x8d\x40\xd7\x90\x83\x38\x98\x07\x6a\xf1\x2c\x3f\x10\xdf\x91\x88\x9d\x11\xd2\x52\x7d\x1d\x5d\x50\x79\x2b\xbe\x9a\x1e\xb9\x8d\xb4\xeb\x32\xb1\xb5\x85\x37\x97\x35\x74\x5e\x1f\xc4\xc1\x64\xb9\xe4\xa3\x4f\xf8\x9e\x46\xa5\x7c\x52\x69\x72\x6d\x30\x5d\x0b\xab\x3d\x31\x11\xd2\x95\xb4\x75\xf2\x76\xc8\x59\x6b\xa4\xd8\x86\x12\xe1\x20\x0e\x66\xad\x71\x36\x0d\xe2\xb8\xaf\xbb\x9a\xac\x0f\xce\xd2\xf0\x9a\x8d\xf2\x94\xc3\x88\x78\xb6\xe4\x0d\x0c\x37\xc9\x4a\xa8\xf6\xba\x55\xa0\x03\xb5\x20\x0e\x3e\x8d\x8f\x2e\xce\xd8\x7a\x26\xd3\x55\xa4\x71\xb7\x35\x9a\x70\x52\x5f\x58\xfd\xac\xd2\x5c\xa5\x1c\x9b\x77\xf3\x09\x9f\xc7\x5c\x08\x54\x44\x1d\xc4\x21\xac\x75\xc1\xcc\x07\x68\x0f\xfb\x9f\xcc\x47\xe3\xb9\xcc\x47\xb9\xea\x5a\x2a\x46\xe7\x4f\x0c\x83\xba\x61\x4e\x07\x5a\xbb\x8e\x30\xca\xb6\xb6\x25\x19\x8c\xb9\x38\xbf\xe4\xd4\x85\x24\x8e\xf2\xbf\xdf\xe9\x3b\x97\xf9\xc0\x96\xb5\x72\xf4\xc2\xe5\xd1\xd8\x24\x12\xc4\xa5\xfb\x99\x32\xbb\xae\x1e\x5e\xfc\xa2\x36\xf2\xf1\x60\x28\xe5\x38\x6e\xfb\xd2\xdf\xd7\x2d\x6e\x3c\x97\xf9\xb8\xc7\xdb\x92\xec\x9a\xe8\x5b\x3d\xa1\xbb\x6a\xc5\xfd\xce\x4d\x62\x63\x40\x67\xa5\x4c\xc4\x63\x26\xff\x55\xc7\xa1\xb7\x37\xff\x8f\xff\x66\x73\x11\xd4\x97\xe7\x07\xb8\x52\xe7\xab\xa1\x21\x34\xba\x12\xb2\xb3\x21\x1d\x7e\xda\xe5\x0f\xe8\x77\x07\xfe\x68\xdd\xa4\x56\x46\x9e\x7f\x71\x16\x9b\x83\xfa\x0e\x61\x42\x10\x07\x1b\xe0\xad\xb2\x06\xe4\x54\x47\x43\x8c\x01\x8e\x5e\xc2\xba\x93\xc9\x66\xcc\xc3\x83\x46\xfa\x1e\xb3\xcb\x05\x0c\xfe\x04\xa3\x19\x0e\xd0\xce\x12\x88\x83\xd7\xe3\xec\x78\xbc\x44\xf0\xe0\x33\x4b\x44\x86\xbf\x35\x35\x8e\xa7\x0c\xb3\x2a\xbe\x4a\xf7\x6e\x69\x21\xb5\x99\xfd\x9f\xc1\x28\x19\xe8\x9a\x6b\x10\x07\x93\x4d\x45\x31\xc5\x53\x42\x8a\x8a\xeb\x14\xe4\x8c\x58\xd3\x55\xcc\x55\x67\xfc\xf8\xc3\x79\x33\x33\x88\x49\xbc\x4a\xf2\xaa\xf3\xaa\x33\x42\x16\xc4\xc1\x06\xf8\x4d\x83\xa1\x4f\xcb\xce\x83\x0f\x36\xea\xd9\xe6\xa2\xae\x35\x1a\xfa\xf8\xde\x2f\x3a\x33\xc2\x7b\x92\x42\x86\x9d\xc3\x94\x49\x0e\x15\xcc\x03\x71\xb0\x01\x5e\xc9\xdb\x73\x9f\x98\x88\x44\xd4\x32\x48\x20\xd7\x73\xae\xa6\x85\xd7\xb9\xe6\xd5\xfa\x01\x87\x44\x40\xc7\x88\xe8\xb4\x5e\x13\x74\x36\x03\xc4\x21\x06\xf8\xc5\x32\x1f\xa0\x31\x73\xde\x5a\x4b\x8a\xcf\x4c\x19\x4e\x8c\xea\x32\xc9\x05\xaa\x3b\x9a\x48\x1c\x0a\x14\x23\x0b\x3a\xed\x4a\xab\x30\xa9\xaf\xac\x47\x1f\x3a\x42\xb5\xe2\x40\x1c\xcc\x5a\x0e\x6a\x53\xe6\xfa\x9f\x5d\x25\x50\x8c\xf5\x85\x31\x27\xbe\x7d\xfb\x2d\x5b\x5d\xc6\x46\xdf\xf0\x5d\x04\xad\x72\xbe\x16\x53\x61\x0b\x3a\x9f\x03\xe0\x60\x1e\x48\x0b\x88\x08\xec\x39\x5c\xa5\xe8\x0b\xf6\xe7\xa1\xeb\xcd\xdf\xc4\x52\xd7\x0f\x9b\xc1\x58\x6b\xb9\x6f\xf5\xe6\x6d\xd4\xa1\x4f\x11\x42\x16\xc4\xc1\x64\xed\x34\x5e\xb2\xae\xf3\x5c\x13\xd0\x4e\xb3\x32\x8e\x3a\x1d\xd9\x5e\x77\x0c\xe4\xbb\xf7\x7e\x81\x2a\xf1\x0b\x93\x40\x6c\x09\x4f\x0a\x34\x89\x02\x70\x30\x6b\x9d\x16\xba\xbc\x10\xdc\xe7\x93\xd4\xf5\xe4\x5b\xac\xdb\x9f\xae\x3d\x79\x9d\xd5\x1a\x25\xd6\x66\x62\x23\x20\xcf\xd0\x66\x18\x0e\x1d\x81\x04\x71\x30\x6b\x8d\x50\xdf\x4d\xb9\x3a\x81\x4d\xc6\xcc\xa4\x1b\x85\x8a\xe7\x52\x74\xd9\x45\x7c\xa0\x42\x48\x37\x9d\xae\xe7\x72\x36\x33\x77\x3a\x26\xc2\x5a\x20\x0e\x61\xad\x8b\x65\x3e\x40\xbf\x8d\xe7\xad\x85\x3e\x90\xae\x1d\xcc\x91\x45\xb3\xe4\x62\x35\x65\xe5\x66\x13\x52\xa5\x5c\xee\x4a\x10\x38\x77\x86\x5a\xd4\x47\xa7\x83\xde\x06\x6d\x05\x83\x38\x98\xb5\xca\x7a\x70\xbf\x94\x64\x6f\x96\xbe\x37\x78\x9a\x33\x3c\x89\x84\x41\x36\xc2\x54\xfd\x6a\x2f\xbb\xe3\x25\x15\x2b\x83\xe3\x35\xd9\x64\x84\x2c\x88\x83\x79\x80\x71\xff\x1b\x53\xe0\xcc\x8f\xfa\x97\x5a\xe8\x93\x0a\x8d\xef\x6c\x73\xe7\xdf\xea\x44\x98\xe7\xfc\x7e\x9f\x49\x79\xe3\xaa\x3b\x2b\x34\x91\x06\x71\xf0\x70\xc6\xf2\x71\xdd\x74\x25\xea\x16\xc7\xb0\xa1\x51\x6f\xac\x3d\x52\xd1\x89\x78\xef\x01\x7e\x3a\x85\xc9\x2d\x1e\x57\x03\xbb\x47\x50\xf5\x50\x10\x07\xb3\xd6\x6c\x79\x95\x69\x82\xa9\x55\x87\xc5\x0e\x51\x94\xc0\x82\x74\x5f\xc5\x3e\x4d\xdf\x51\x82\xd2\xde\x87\x9f\xc2\xe8\x12\x3f\x3c\x4d\xa0\x3d\x10\x00\x07\xb3\x16\xc5\x15\xbf\xc3\xfb\x57\x1f\x4a\x1e\xdc\xf3\x0a\x7e\xc8\x70\x55\x6c\x45\xd5\x2e\xba\x43\x23\xe8\x5e\x43\x2b\x81\xf4\x4b\x9a\xc4\x67\x08\x6b\x81\x38\x84\xb5\x2e\x96\xf9\x00\x7d\xe5\x3f\x6f\xad\x8d\x75\x0f\x5e\x91\xcf\xb8\x4f\x22\x2b\xe2\xe4\xd2\x62\x49\x6e\x59\x90\xcd\xf1\x5d\x29\x8f\x97\x56\x4a\x8e\xcb\x17\xa4\x79\x50\x86\x78\x7c\x10\x07\xb3\xd6\x84\xb9\xe5\xe2\x7d\xd5\x07\x6e\xc1\x66\x5f\x91\xbb\x4c\x4b\xfa\xfb\xf4\x93\x9d\x53\xaf\xed\xf7\xbe\xcd\x9d\xea\xb5\xdc\x79\x83\x8b\x90\x05\x71\x30\x0f\x50\x13\xdb\xb8\x87\xcd\x8f\xf8\x87\xde\x38\x1a\x7d\x2f\xc5\xb9\x76\x48\x24\x79\xc4\xdd\xf7\x6a\xda\x25\x60\x6e\x2a\xbe\x34\x1b\xfa\x79\x01\x71\x30\x59\x65\x46\x39\x89\x47\x86\xf8\x7b\x46\x73\xf6\xca\xbf\xf1\x7f\xbd\x0b\x78\x63\x4d\x32\xd4\x5d\x54\x3c\x2d\x7b\xc3\xb4\xb2\x9b\x03\x5a\xa7\x83\x38\x98\xb5\x1c\x2f\x73\xcd\x2c\xa2\xbe\x62\x47\xf6\xcc\x12\x7c\xb4\xa1\xbf\xfe\x81\x89\x61\x71\xfe\xf3\xf3\x3c\x63\x22\x4c\xee\xd6\x3e\xa2\xff\xab\xf3\x71\x69\x79\xba\x4a\x70\xb8\x82\xc3\x22\x9b\x87\xe7\x51\xcb\x40\x19\xa1\x56\x6d\x84\x88\x5b\x79\xef\xd5\x86\xef\xd4\x35\x37\xeb\x97\xff\x9d\xf9\xc8\xf0\x18\xd7\xe9\x59\x9e\xd0\x32\xaa\x79\x12\x2b\x46\x99\xfb\xd8\x2f\x49\x69\xa2\xed\x58\x59\xda\x31\xbb\x87\xcd\x73\xc2\x82\xed\x5f\xe8\xee\x27\x8e\x39\x73\x1f\xb4\xce\xfc\x62\xef\xe5\x85\xa7\xc8\x7b\x06\x0c\xa9\xb5\x2e\x22\x4c\x4f\xb7\x91\xde\x1c\xe0\xd8\xdf\x25\x83\x65\x3e\x40\xca\xe7\x33\x1f\x57\x77\xb7\x7f\xa0\x9d\xa9\xe4\xfa\xee\x5f\xeb\x2b\x26\xad\x4a\x21\xec\x5a\x65\xc5\x46\x2d\x36\x8c\x13\x8d\xec\xcc\x63\x8d\xfc\xf8\x2f\x54\xe7\xab\xfb\x90\x32\xd7\x98\x73\xd4\x67\x3f\x92\xd2\x50\x4b\xf4\x76\xe7\xe7\x9e\xc5\xe4\x06\x6b\x82\xe2\x93\x82\x0d\x59\x24\x32\x50\xe6\x03\xa4\xf9\x4f\xe6\x03\x49\x0a\x36\xe3\x1c\xbf\x2a\xfd\xe2\x7e\x21\xb1\xbc\x8e\x59\xe8\x0f\xcd\x90\x1b\x7d\xba\xc6\x32\xc2\xa7\x71\x4d\xf7\xdb\x0c\xe2\x93\x46\x1f\x8b\xff\x6d\x09\x83\x50\x49\x24\x0e\xf8\x24\x37\xf3\xa6\xa3\x85\x1f\xc3\xb3\x08\x0e\xe7\x30\xfd\xbb\x36\x9c\x77\x5e\x5a\x3c\xaf\xbd\xcf\x40\x7e\x44\xc1\xd4\x94\xba\xbc\x59\x9a\xfb\xf7\x4d\x0a\xc1\x9b\x6c\x8e\x30\xc8\x32\x2d\x76\x08\x7f\x67\xf0\x54\xf0\xe4\xbb\xe9\xba\xfe\x95\x4a\xe2\xce\xf5\x98\x7b\xa4\x4f\x6f\xa1\x91\x7f\xf4\x39\xfb\xfb\x26\x1f\x9c\x8b\x6f\x0b\xff\x08\x7e\x71\xe6\x14\x19\xf7\x86\xe7\x15\xca\xdb\x3f\x0d\xea\xcc\x0e\x13\x9c\xac\xd8\xc4\x9f\xe5\x5e\xfd\x22\xad\x8b\x2f\xfd\xfb\x26\x9d\xcf\x2d\x58\x9e\xc5\xd6\x2e\xad\x5b\x0f\x73\xf6\xee\xba\x29\xbd\xf9\xa9\x89\x13\xd8\x2d\xd3\xff\x30\x11\x57\xe1\xd9\x4e\xde\x0b\x73\xf9\xeb\x7f\xdf\x64\x0c\xbc\xc9\x98\xcb\x19\x8d\xd7\x3d\xa5\x05\x46\x44\x8d\x2e\x8f\xc4\x36\x61\xb6\x8b\x8a\x5d\x37\x58\xc9\x32\xd1\x92\xbb\xd6\x93\xa0\x33\xfe\xfb\xef\x9b\x7c\x03\x6f\xf2\x26\x72\xcc\x68\x5f\x98\x4b\x00\x3a\xb6\x4a\x54\x93\x92\xfb\x72\x7d\xfe\x68\xfb\xad\x66\x63\x76\xcf\x35\xb6\xeb\x8e\xe4\x0f\x55\xff\xbe\xc9\x6a\x78\x93\x07\xf3\x0e\x74\x47\xcb\xb5\x39\x9f\xf0\x29\x92\x84\x96\x6e\xe2\x2b\x3b\x3f\xdb\x8e\xc2\xda\x7a\x33\x78\x8f\x8d\x43\x0f\x95\xe0\xe5\x7f\xb3\x2c\x03\x0d\xc5\xf3\x6f\xa1\xed\x09\xb1\x21\x5f\x8a\xa5\x1a\x13\xf4\x38\x72\x2d\xac\xcc\x57\xf9\x7f\xf0\x1c\x45\xa3\x7b\xa2\x98\x30\x66\xf6\xdf\x55\x12\x40\xf5\x9b\x40\x1c\xec\x2d\x24\xec\x40\x48\x3e\x70\xfc\xb9\xe1\x96\x61\xdc\xa7\x1c\xda\x5d\xfd\xdb\x8e\xdf\x35\x86\xc9\xc9\xaf\x11\x95\x17\x32\xe8\x8d\xdd\x82\x3e\x46\x81\x38\xd8\xeb\xc2\x87\x64\xdb\xbf\x49\x53\xdc\x27\xf5\xfa\x44\x2a\x5e\x91\xfc\x6b\x83\xed\x87\x97\xec\xb7\x7f\xe6\xd5\x27\xdb\x3f\x39\x30\x41\x85\x0e\x46\x81\x38\x98\xac\xff\x7b\x7b\x9f\x71\xd1\x64\x7e\x16\x2e\x67\x3d\xfa\x99\xbe\x5f\x21\xd3\xe4\x26\x37\x4d\xd3\x8b\xfa\x15\xdc\xbe\x4c\x98\x66\xf8\x22\x64\x41\x1c\xec\x2d\xa4\x6c\x47\x9c\xa2\xe1\x92\xe7\xc1\x36\xa9\x74\xbf\x6e\x51\xe3\x6d\x25\x73\xb5\x2e\x9e\x14\x4b\xa5\xb4\xad\xb8\x69\xce\xea\xc6\x4b\xe8\xe5\x06\xe0\x60\x7d\xeb\x3f\x1b\x7a\xbd\x90\x75\xf0\x0c\x0d\x6f\xee\xc7\x4f\xd6\xce\x99\x91\xea\xc1\x1b\x38\xed\x28\x68\xfa\xa7\x0b\xcf\xd6\x29\x27\x1c\x11\x99\x0f\x10\xf7\x4f\x9d\x8f\xff\xf7\x7b\x0e\x9e\xdf\x80\x7e\x71\xff\xc7\x82\xbf\x21\x39\x5d\x9c\x7c\xbd\x17\xe3\x43\xc9\xfb\xd0\xc4\xab\x7e\xbe\x72\xa2\x57\x6b\x05\x69\xcc\xbb\xf5\x1a\xb9\xbb\xaf\xd1\x63\x40\x0b\x7e\x00\x07\x7b\x7a\x0c\x1c\x9b\x4f\x93\x57\x79\x55\xd3\xdb\xbb\x6a\x1f\x5b\x94\x09\x32\x56\x7a\xd8\x8d\xf8\x0e\xbf\xf9\xf8\xf5\x6a\x9c\x7b\xf9\x29\x3d\x42\x16\xc4\xc1\xbf\x9e\x46\x9a\x3d\x6b\xbd\xa7\xf2\xa6\x86\x17\xa5\x56\x3d\x80\xde\xd7\xeb\x67\x96\xbd\x08\x92\xff\x0e\xf9\x50\xc7\xd0\xe1\x41\x2d\x2f\xf4\xf5\x14\xc0\xc1\x57\x65\x9d\x24\xd5\xe2\xef\xd5\x7d\x02\x93\x48\x5a\x1d\x5a\x8e\x36\x13\xbf\xac\x63\x26\x5c\x3b\xbe\xde\x2e\x74\x16\x7d\xcd\xa7\x0c\xfa\x18\x03\xe2\x60\xce\x8a\xfe\x3d\xd0\xff\x4e\x64\xf4\x30\x15\xe5\x7a\x75\xee\x65\xd3\xb5\x14\x16\x19\x2f\x93\xdd\x78\xab\x83\x50\xd1\x49\x74\xa9\x19\xe8\x13\x17\x88\x83\xf5\xad\xeb\x23\xa7\xd6\xbe\xd3\xef\x05\x39\x67\x57\x3f\xb9\x0a\xd1\x96\x32\x5d\x72\x94\xe1\xc9\xee\xbb\x1c\xa6\xf0\xb3\xde\x45\xed\x0c\xda\xd1\x03\x71\x88\x6b\x11\x39\x2e\x34\x75\x06\xbd\x59\xcf\x5b\x6b\x5d\x3a\xe2\xed\x9e\x1f\xf6\xfe\x19\x3a\x3f\xd9\x71\xfb\xb4\xd8\xa5\x1b\x27\xc8\x78\xaf\xf1\xb3\xca\x6c\xdf\x10\x3f\x52\x13\x84\xaa\x37\x83\x38\xd8\xe3\x53\xd6\x5c\x47\x31\xe9\xd1\x91\x0c\xbc\xfa\xbb\xc3\x43\x74\xa6\xb7\x3c\xd7\xf5\x85\x43\xf6\x8c\x42\xd2\xf8\xef\xd0\x77\x58\x9b\x50\x31\x06\x10\x07\xf3\x80\xdb\x93\x2b\x1d\x4d\x93\xf1\xe6\x9f\xad\xdb\x19\x95\x90\x54\xcc\x2d\xbb\x2d\xf3\x42\x06\x17\x72\x2f\x87\x79\x9a\x1b\x70\x17\x43\xf7\x17\x82\x38\x98\xec\xf2\xfb\xa8\xd9\x60\x71\x2c\x1e\xc6\x02\xde\x46\x3d\xa5\x85\xc5\xa5\xda\x79\x22\xe7\xb7\xb5\x14\x2b\x5b\x6f\xfe\xc4\xdd\xd5\xd4\x82\x3e\x18\x00\x38\x98\xb5\xea\x30\xf5\x6a\x5f\x1f\x74\x6c\xd8\xe1\x3b\x20\x3f\x4c\x5f\x92\x1c\x5b\x76\x44\xdd\x7e\x92\xd7\x47\xa0\x8b\x63\xc7\xed\xbf\x00\x15\x85\x06\x71\xb0\xbe\x4d\x7e\x4a\x97\x65\xd3\xba\x43\xab\xf1\x5b\xce\x02\xe5\x5d\xab\xf5\x1d\x19\xd1\xd8\x7a\x82\x8d\xce\xab\x59\x98\x29\x21\xee\x9c\xd0\x2d\x09\x20\x0e\x61\x2d\xa1\x8b\x1d\xf2\x00\xcc\xa0\xce\x5b\x4b\x4a\x8f\x16\x3d\xfe\xa3\x49\x03\x4a\x4b\x0c\x4a\x72\x5b\x9a\x4f\x96\x37\x5b\x90\xd7\xb8\x6c\x24\x9f\x59\x0a\xd7\xf6\xa1\x0f\x54\x41\x07\xc4\xc1\x1e\x7f\x5d\xcd\x01\xd5\x92\x7d\x24\x33\x89\x98\x34\x64\x38\x51\x42\x2d\xa7\xff\x91\x4f\xbe\x85\x5f\x1b\xd3\xef\x9a\xc5\xf7\x8b\x4a\xad\x90\x63\x01\x1c\x7c\x3f\x11\xe3\xca\x12\x49\x75\xad\x92\x28\x47\x4e\xa6\xe1\xa6\xf2\x21\x01\x41\x2d\xa9\x5a\xa8\xed\xa4\x46\xf1\x24\x35\x96\x57\x2c\xf4\xf5\x14\xc4\xc1\x6b\xbd\x30\x15\xdb\xec\x73\xfa\x2b\x19\xcf\x8a\x33\x86\xa5\xfb\x16\xf5\x77\x1b\xa3\x7b\xcc\xb1\x4b\x10\xcd\x29\x95\x3d\xe6\xbd\x09\xdd\x6a\x0c\xe2\x60\xd6\x92\x7b\xf8\x9b\x2c\x99\x23\xea\x85\x4f\xf0\xaf\x8d\x99\x3e\x03\x7e\x73\x12\x14\xc9\x0d\xc2\xec\x98\x03\xcf\x6b\x83\x18\x3e\x02\x7b\x08\x59\x10\x07\xdf\xa7\x23\x56\x35\x1c\x9a\xa4\x4b\xbe\x69\x9c\xef\xf1\xfc\xa3\x58\x6a\x48\xf5\x4d\x31\x36\xc5\xa6\x0e\x92\x69\x8d\xd5\x84\xf1\x3b\x6b\x08\x6b\x81\x38\x84\xb5\x1e\x5c\x6c\x9b\x12\x30\x53\x3e\x6f\x2d\xed\x6f\x77\xe5\x6e\x2d\xe4\x4d\x7c\xcf\x24\x8e\xfc\x28\x18\x6d\x59\xa6\x39\xb8\x2f\x27\xd7\x7f\xf5\x97\xe9\x8e\x32\x4e\xaa\x23\x54\x2e\x15\xc4\xc1\x1e\xdf\x40\xe8\x06\x47\xd1\x1c\x5f\xe8\x78\xd5\x77\xc5\x4f\xc2\x41\xc5\x79\x36\xcb\x3f\xcf\xb8\x23\xd7\xee\x5d\xa5\xe2\x2e\x91\xfe\x0c\xcd\x32\x40\x1c\xcc\x03\x46\xe9\x65\xbf\x04\xa3\x45\x44\x25\xf1\xdc\x66\xea\x72\x57\x8c\x45\x58\xc9\x35\x09\x66\xa8\xbb\xb2\xd1\x5e\xc5\xd4\x65\x34\x40\xf5\xb4\x40\x1c\x4c\x36\xff\xed\x1b\x2a\x9b\xf1\x67\xe3\x1e\xf9\x9c\x8d\x84\x55\x97\x18\x18\x19\x8d\xd8\x78\xe6\x85\xa9\xb9\x0e\xf0\x8e\xe5\x59\xa3\x5b\xa0\x83\x74\x00\x0e\x66\x2d\x1f\x56\x67\xc9\xeb\x79\xce\x0a\x3b\x9b\xd1\xe8\xf3\x46\xcb\x55\x96\xb3\xb4\x7b\xfc\x3c\xc4\x0d\xde\xa6\x58\xe1\x2a\x59\x0d\xd0\x6d\x44\x20\x0e\xd6\xb7\x51\x09\x73\x6f\xdf\x27\x51\x17\x48\x92\xdd\x29\xde\xeb\xde\xc4\x5d\x2f\xb2\x08\xa1\x8c\xa1\x2d\xca\xd6\xed\x74\x9e\x43\x2b\x0c\x42\x58\x0b\xc4\x21\xac\xe5\x7c\x21\x6b\x81\x56\x44\xe7\xad\x85\xc4\x3b\xe0\xe6\x62\x6b\xc5\x55\xc1\xdd\x10\x5f\x21\x11\xe1\xac\xa1\x7c\xad\x71\xb6\x66\x33\x9e\xa2\xde\x57\x39\xe0\xe3\xbd\x5f\x88\xc7\x07\x71\xb0\xc7\xdf\xa9\x5f\x67\xd7\xca\x53\xbc\x87\xfb\x23\x3d\xf9\xca\x0a\xbd\x14\x07\x71\xb7\x73\x05\x51\x85\xd7\xef\x7d\xab\x3b\xf9\x4c\xac\xd0\xe5\x0b\x20\x0e\xe6\x81\xc2\x23\xa2\xf5\xd6\x3b\x43\x24\x98\x8f\xf6\xb7\xf9\x86\x94\x85\x3b\xea\x95\xfe\x20\x8d\x18\x47\x28\x58\x0b\xcd\x4c\xa5\x7f\x09\x45\xc8\x82\x38\x98\xac\x89\x04\x52\xba\x77\x86\x6f\x88\xbd\x4c\xac\x79\x56\x9e\x96\x23\xd3\xa0\xfd\x26\x4a\x36\xf2\xeb\x2c\xef\xd9\xb0\x80\xdf\x66\x7f\x10\xb2\x20\x0e\x66\x2d\x43\x3f\xeb\x8e\x2f\x82\x03\x72\x1a\x92\x15\x97\xd7\xb7\xcb\x43\x56\x62\xa8\xc6\x6a\x82\x55\xf3\x35\x0c\x55\x2c\x35\xa5\xac\x2f\x21\x64\x41\x1c\xac\x6f\xaf\x5f\x73\x4f\xde\xb1\xf8\xde\xbc\x64\x38\xd7\x84\xc9\xc8\x3c\xaf\xea\x48\x63\xe6\xd8\x61\xa5\x88\xcc\x29\x35\xd3\x87\x33\x5f\x8e\xb0\x16\x88\x43\x58\x2b\xe6\x42\xd6\x02\xad\x7c\xcf\x5b\xcb\x21\x1e\x03\x37\x32\xd6\x8c\xc4\x6b\x59\x2a\x87\x39\xd0\xde\x86\x75\xfe\x51\x7e\x26\xfb\x4f\xe1\xaa\x78\x85\xfb\xd6\xd2\xbf\x19\xa1\xaf\x20\x00\x0e\xf6\xf8\x6f\x99\xd5\xb4\x72\x07\x82\x6a\x48\x1b\xbf\x0b\xda\x35\x33\xd3\x74\x1e\x4b\x86\x5b\xa9\x7e\x63\x21\xf8\xd2\x67\x71\xe5\x55\x2e\x74\x4e\x17\xc4\xc1\x4b\x49\x3d\xc9\x1a\xf7\x9b\x21\xca\xf6\xe2\x9f\x37\x33\xcd\x59\x10\xbc\x52\x31\xa4\xc8\x39\xea\x97\xa0\x21\xcb\x91\x63\x79\xcd\x16\xda\xfd\x04\x71\xf0\x38\x91\xee\xe3\xb6\x84\x39\xdf\xe1\x99\x4b\xd7\xf2\x7a\x1e\x9a\xff\x2c\x6e\x77\xf2\xc5\x72\xa8\xab\x2a\x46\xb5\xba\xf3\x95\x11\x37\x0f\x9a\x15\x00\x38\x98\xb5\x2c\xe8\x3f\xf6\xea\x85\x17\x1e\xbd\xe2\xcd\x70\xdd\x91\xda\xea\xbb\xe9\xd0\x7e\x2b\x95\x48\xb2\x82\xde\x3a\x54\x79\x7f\x04\x5b\x11\x21\x0b\xe2\x60\x7d\x4b\x43\x3e\xf1\x22\xd4\xf9\x9b\xfb\x78\x31\x75\xc8\xb5\x62\xf5\xe5\x1b\xbb\x24\x37\xd2\x67\x89\x6e\x17\xf8\x5d\x51\x6e\xc8\x5c\x11\x47\x58\x0b\xc4\x21\xac\xf5\xe6\x42\xd6\x02\xed\x70\x9c\xb7\x16\x4e\x08\xf5\xc0\x73\x1a\x4a\xdf\x4f\x5d\x33\x92\x0b\x5c\xcf\xef\x1c\x35\xd0\x84\x6e\xdd\xd6\x5c\xbd\xfe\xa1\xc7\x81\xd5\xc7\xfa\x0e\xe2\xf1\x41\x1c\xec\xf1\x55\x45\x4e\x57\x1f\xde\x94\xb6\xc6\xc2\xae\xa5\xac\x2d\xd2\x19\xe2\x94\xd3\xfe\xc0\x90\x2b\x90\x50\xea\xd5\x55\xf5\x45\x44\x82\x10\x21\x0b\xe2\x60\x1e\x88\xb7\x49\xa6\x99\x90\xed\x8b\x3a\x22\xf3\x2a\xa7\x5e\x1f\xbe\x3c\x26\xdb\x9c\xde\xa8\xa1\x1f\x90\xad\x24\xe1\x9c\x76\x27\xfa\x1b\x94\x58\x05\x70\xf0\xf3\x26\x77\x3d\xb2\x23\xaf\x7e\x8b\x6b\x9e\x28\xc2\xfb\x54\x42\x88\xf4\xb6\x46\x17\x8f\x7e\x4c\x7b\xbc\xab\x0b\x97\xe9\xc1\xbd\x40\xa8\x1c\x26\x88\x83\x59\x2b\xe7\xcf\x77\x87\x93\x86\x14\x93\xb3\xbb\x7b\xbe\x86\xcf\x51\x0a\xca\xf8\x29\x4c\x8b\x9d\xea\x2a\xbf\x84\x4c\xaf\x89\x31\x8d\x43\x8b\x0e\x10\x07\xeb\xdb\x10\x1e\x73\x33\x37\xe9\x5b\x31\x4d\xbf\x02\x1f\xed\xad\x49\xb5\xfd\x4c\x4e\x08\xe7\x79\x3c\x57\xf9\x72\xed\x61\xf4\xb5\x17\x53\xd1\x08\x6b\x81\x38\x84\xb5\xaa\x2f\x96\xf9\x00\xed\x61\xff\x93\xf9\x40\x1a\x86\x6f\xbb\x6d\x76\x2e\x93\x51\x50\x63\xcb\x79\xad\xaf\xbf\xbe\x8e\xf4\x85\x45\x89\x65\x91\x39\xf8\xbb\xb1\x91\xe3\xae\x53\x9a\x4a\x15\x4d\xc3\xdf\xef\xf4\x6d\xc1\x9b\xac\x35\x17\x5e\x3c\x79\xf9\x75\x56\x3f\xa0\xf1\xe1\x8b\x2a\x21\xd6\x2f\xa9\xf1\x42\x94\xd8\x16\xb2\x29\xc1\x5a\xe1\xd2\xd5\x8e\x45\x7f\xdf\xe4\xe9\xb9\xeb\x64\x18\x4b\xf8\xc9\xfa\x97\x37\x04\x68\x6d\x88\x7a\x33\x63\x30\x87\x7b\x2b\x30\x18\x9c\xf9\x29\xb9\xea\x9c\x17\x68\x66\x3d\x9c\xfe\x9b\xcd\x45\x50\x5f\x9e\x1f\xe0\xee\xd3\xf7\xcd\x05\xd1\xb6\x57\xa8\x0c\x02\xae\xb8\x06\xe3\x64\x51\xf2\x3f\x18\xbc\x35\xcf\xfc\x56\xd8\x2f\xff\x4b\xee\x34\x3b\xf4\x75\x07\xc4\xc1\x4c\xd8\x29\x90\xa9\xcd\x82\xe6\xbc\x53\x4e\xf4\x70\xec\xa1\xed\x47\x4e\xbc\x8d\x8f\x97\x7b\x58\xa9\xd7\x91\x77\x75\x83\x90\x32\xb5\x75\x10\xb2\x20\x0e\xbe\xb9\x78\x45\x67\xf5\xbb\x65\x6d\x26\x6d\xa6\x9a\x7b\x7b\x9d\x78\x6e\x73\x54\x81\x41\x5c\x9c\x5c\xe5\xf5\xd7\x15\xc3\xdd\x31\xf4\xec\xd0\x1c\x12\xc0\xc1\x2b\xee\xd4\x69\x0d\xd6\xfb\x16\x13\xbd\x1a\x56\x74\x73\xca\xda\xcb\x43\xd2\xf0\x26\x88\x98\x9c\x4f\xae\xc0\xe4\x2e\x6c\xc0\xa9\x3b\x83\x2a\xee\x00\x38\xd8\x00\xf7\xdc\xe2\x92\xe2\x92\x36\x0a\x31\x26\x4b\x7c\x9a\x96\x62\xf4\x44\x78\x77\x92\xfc\x93\x26\x75\xd5\x4e\x02\xe3\x1f\x4e\xef\x26\xe8\x16\x33\x10\x07\xeb\xdb\x1a\x3a\x8c\xea\x2b\xa4\x33\xf5\xce\x1c\x7f\x1a\x6e\xf5\x0c\xd8\xc9\x9b\x0b\x0c\x18\x12\xae\xbc\x42\x51\x96\xb6\x34\x4a\xc4\x70\x84\xf2\x82\x00\x0e\x31\xc0\x87\x2f\xf4\xee\x00\x8d\x99\xf3\xd6\x22\x9d\x15\x51\x8f\x9a\xae\x2e\x69\x08\xea\xc3\xe5\xf4\xf1\x5a\xe7\x34\x71\xde\x1b\xc7\x97\x7b\xb9\x44\x46\xee\x1a\xa8\x18\x0f\x25\xf0\x40\x1c\xfc\x6c\x06\x9e\x2d\x79\xcc\x27\xb5\x74\x71\x16\x6a\x5a\x45\x82\xa1\x9b\x81\x9c\x96\xe8\x23\x73\xfb\x8e\xe5\x51\x2f\x24\x0a\x58\x63\x4f\xa1\xb3\x19\x00\x0e\x1e\xec\x1b\x66\xbd\xb1\x2b\x1f\xd2\x37\x76\x89\x3d\xa4\x69\x5c\xf2\x50\x99\x35\xcb\x08\x33\x52\xba\xd4\xf2\x56\xf7\xf2\xcf\x7e\x89\x5d\x28\xd8\x07\xe0\x60\xb2\xdf\xa6\xa9\x85\x44\xdc\xba\x1f\xcf\x67\x28\x10\xb9\xb3\xac\xb2\xb2\x52\x68\xb4\xf2\x70\x7b\xbe\xe2\xbb\x5e\x76\xe6\x31\xd8\x06\xd5\x60\x03\x71\x30\x6b\xb9\x3b\x28\x4a\x3c\x6f\xe2\xdd\x7b\x92\xbb\xf0\xab\x7b\xaf\xdb\xcc\xdd\xc1\x38\xaf\xa0\x45\x92\x72\xf1\x11\xc7\xd9\x70\xc1\x2d\xa8\x84\x0c\x88\x83\xf5\x2d\x83\xdc\x22\xb1\x22\x9a\xb5\x12\xd9\x9d\x2c\xab\xb5\x78\x17\xa9\xfc\x7a\x35\xe2\x4f\x97\x69\x98\x8f\x2b\x99\xf0\xce\x58\x31\x6c\x10\xd6\x02\x71\x08\x6b\x6d\x5d\xec\xda\x20\xc0\x6f\xe3\xff\xb8\xde\xf7\xc5\xc6\x2b\x27\x6b\x93\xb7\x04\xaa\x8c\xf1\x44\xb4\x6a\x51\xf6\xec\xc3\xcb\xfb\xb8\xf7\x6e\x3f\x9f\xda\xae\x6c\x64\xac\x87\xaa\xa7\x80\x38\xd8\xe3\x4f\x45\xd8\x3c\x9c\xe8\x51\xf4\xb2\xc3\xa4\x56\xef\x22\xb8\x64\x12\x15\xa7\x6f\xfd\x13\xcf\x9c\x0a\xfb\x95\xaf\x76\x12\xd1\x1b\xa8\x7a\x0a\x88\x83\xcf\x78\xb5\xad\xcc\xd2\xbd\x6b\x42\x73\x7d\x37\xd3\xda\x09\xda\x97\xc4\x7f\x61\xe5\x3d\x73\x32\x0a\x50\xf4\x8f\xb6\xab\xa9\xf6\xbd\x05\xcd\x78\x01\x1c\x4c\x16\x6b\xca\x20\x66\x50\x6b\x0d\x9b\xb1\x4c\x78\xcb\xa7\xdc\x33\x9a\xd1\xd0\x89\xd1\xdc\x78\x7d\xc3\xbf\xfb\xe9\xb5\x9c\x9b\x2b\xd0\xae\x02\x88\x83\x59\x6b\x7a\x89\x9d\x75\x6c\xcf\x86\xaf\x00\x8b\x8a\xe0\x7e\xd2\x7b\x82\xfb\x89\x35\x27\x44\x0b\xd2\x42\x91\x7b\xd8\xab\xdf\xc3\x7c\x9a\x10\xb2\x20\x0e\x7e\x09\xe9\xbb\x40\xa4\x2b\x0f\x6a\x09\xb7\xf4\xfd\x2b\x84\x71\xe9\x28\xf3\xa2\x89\x0b\x1f\xe7\x22\x09\xcd\x27\xe9\x45\xbe\x95\x5a\x37\x41\x58\x0b\xc4\x21\xac\x75\x7a\x21\x6b\x81\xbe\xf2\x9f\xb7\xd6\x0c\xf7\xd5\x86\x64\x9a\x45\x8d\xfb\x3f\xc7\x22\x9f\x13\xde\xd3\xc9\x60\x2c\xd0\x43\x53\xb8\xe7\x39\xca\xb5\x9d\xf5\xa5\x86\x09\x2a\xa2\x0c\xe2\x60\x8f\xff\xea\x9e\x41\x4e\x46\x98\x0d\xa5\xd8\xd9\xca\x2d\x8b\x20\x5b\x17\xbb\x2d\xae\x43\x29\x4d\xa7\xc2\xac\xa9\xd5\xbb\x7b\x7e\xdf\xa1\x80\x2f\x88\x83\x79\xa0\xb3\xf8\x74\xe7\x32\x8d\x49\xc8\x20\x49\x60\x11\xd2\xca\xca\xb7\xb1\x76\x71\x0f\xb7\xfb\x9a\xa1\x1e\xc4\x1f\x05\xb6\xb5\x8b\xa1\xa4\x1a\x88\x83\xc9\x22\xd9\xf7\x54\x76\xc6\x7c\x75\xea\x66\x7d\xc7\xb9\x5f\x9c\x9b\x63\x5c\xcc\xd5\xc0\x94\xfa\x51\x02\x93\x07\xe3\x85\x43\xbe\x25\xb4\x71\x0d\xe2\xe0\xc7\x7e\x52\x67\xb8\x47\xe8\xb9\x72\xf6\x69\x99\x4f\xd7\x93\x54\x71\xd9\x69\x94\x3e\x91\x3e\x46\x46\x3f\xb8\x7b\xf4\x2b\x13\xeb\xdb\x3d\x28\xf3\x21\xf6\x7a\xe8\x0a\x33\x25\xd3\x6a\xf9\xb7\x1b\xe8\x39\xc3\x7c\xf8\xcf\x05\x8b\x0b\xf5\x6d\x75\x7c\x85\xe2\x26\xe5\x16\xde\x51\x35\xff\x3b\xf3\x41\xe8\x18\xe2\x82\x9a\x27\x5c\x89\x63\x58\x66\x2d\xbe\xf1\xfa\xed\x00\xc1\x84\x20\x41\xbc\xcf\x80\xd7\x4d\xff\xc8\x40\x35\xdc\xfa\x7f\xa3\x45\xe6\xe3\x4c\xa9\xae\x07\x5f\x7f\x46\xee\x9c\x6d\xc8\x6d\xd6\x95\x7d\x3f\xf8\xdd\x42\x3a\xf8\xdd\x52\x29\xc5\x3e\x28\xa2\x0d\x96\xf9\x00\x29\x9f\xcf\x7c\x30\x53\x10\xeb\xf9\xe8\xac\xa9\xe4\x5e\xe7\x4c\x3a\x68\x11\x90\xb0\x0d\x72\x5c\xfe\xed\x76\x5d\xcf\x73\x12\x23\xe6\x3d\xd5\x29\xda\xbf\x50\xf3\xd0\x89\xb8\x1f\x0c\xfb\x34\x68\x5f\xa2\x22\x25\x2d\x3b\x68\x8e\x1e\x0d\x71\x56\x29\xe3\xdc\xf1\x59\x15\x93\x58\xbe\x79\x63\x1b\xca\x7c\x80\x34\xff\xc9\x7c\x88\xc2\x33\x1f\xe8\x0e\xf6\xea\x7d\x3e\xa8\x18\x1f\xa5\xf3\xcc\xde\x3e\x13\xec\x89\xfd\x59\x48\xe7\x77\xad\x44\x99\x7c\xe3\x4b\x2c\xe5\x6b\x6d\xa2\xbf\x9e\xe4\x8a\x9e\xcb\x7c\xe4\xbc\x9f\x7f\x89\x67\x1e\x42\x76\x77\xb7\x49\x53\xad\x3b\x2e\x19\x79\xb7\xbd\xb4\xf5\xb2\x05\x1f\xf5\xa9\xe4\xb0\xc2\x14\x2f\xe1\xdf\x37\x79\x2e\xf3\x51\x73\xf9\xfa\xae\xf0\x5c\xaa\xc8\x92\x79\xbe\xae\x12\xc7\xa5\x71\xa6\x88\x93\x22\x6d\x39\x26\x23\xe6\x9e\xe4\x94\xcf\x14\x46\x74\x7f\xdf\xe4\xb9\xcc\x07\xb7\xf6\x8d\x4b\x86\x45\x0d\x41\xed\xd5\xda\xc6\xab\xd5\xb1\x76\x7d\xd9\xe3\xb3\x91\xc3\xe8\xab\x07\x2e\x91\xd6\xdf\xae\x7f\x30\xf9\xfb\x26\xcf\x65\x3e\x3e\x46\xba\xab\x77\xf6\xf6\xf0\xbe\x13\x6b\x77\xf1\xf9\xd9\xcf\x7c\x73\x00\x5f\x21\x2a\x2b\xca\x1f\xb5\xd8\x8f\xa1\xcb\x26\xe5\x3f\x78\xca\x73\x99\x0f\xdb\xd6\x52\xdf\xee\x6e\x6b\x93\x8f\xef\xd0\xaf\xf9\x66\xf6\x5b\x95\x1a\x27\xd7\x58\xde\x2c\x5f\x3b\x3d\x2a\x6b\xe4\x8d\x3e\xfe\xfb\x30\x8d\xe8\xb9\xcc\x87\x5e\x34\xd2\x55\xfa\x45\xed\x49\x55\x15\x86\xaa\x22\x02\x1b\xde\xeb\x44\xd6\x97\x05\x05\x6d\x82\xfb\x5c\x22\x87\xb2\xec\xbd\xfb\xff\xbe\xc9\x73\x99\x0f\xce\xbb\xee\xf2\x6a\x73\xf7\x4d\x69\xaf\x30\xc9\x2a\x99\xa8\x37\x73\x1d\xb4\x76\x3e\xda\xbb\x52\xfe\x52\xdc\xa9\x37\xfc\x3a\xb9\xd0\x7f\xb3\x2c\x03\x0d\xc5\xf3\x6f\x21\xc6\xa7\x76\xfe\xf1\x4f\x34\xcc\x05\x78\x8a\xfa\x9b\xaf\x94\x4e\x18\xf8\xee\x77\x0a\x6e\x1a\x65\xb1\x12\xb6\x27\x17\xfa\x53\x36\x43\x31\x51\x00\x07\x7b\x0b\x61\xbb\xea\xed\x19\x52\xa8\x6e\x8b\xb4\x93\x6e\x3d\x21\xd3\x32\x68\x28\xf2\xbf\x6f\x3b\x36\x7a\x0d\x25\xbc\xec\x76\x92\x86\xcf\x65\x84\x2c\x88\x83\xbd\x2e\xee\x0a\x8e\xe1\x0e\xa8\x21\xb9\x06\x71\x2e\xc5\x1b\x0c\x50\x2e\xbc\xfa\x89\x76\x09\x79\x76\xf5\x30\x3f\xa9\x7c\xb5\x20\x23\x6f\x10\x21\x0b\xe2\x60\xb2\x97\x57\xdf\xe5\xa6\x92\x25\x3e\xe5\x18\x72\x3d\x4d\xfc\x7c\x8f\x6b\x1a\x9d\x41\x07\x6b\x4e\x3a\x3e\xb6\xfc\x26\x76\x8c\x75\x28\x34\x77\x06\x71\xb0\xbe\x6d\xb2\xa5\x56\xb0\x25\x4f\x79\xaf\x87\xb2\x37\x7b\x98\xb5\x51\x30\x56\x83\x54\xfa\xed\xf4\xd6\x55\x83\xe0\xe0\x66\xff\xf6\xb0\x19\x84\x2c\x88\x83\xf5\xed\xe3\xfb\xe2\xd8\x34\x3d\x7a\x0c\xd1\x55\xf4\x8f\x65\x1e\xa6\x4a\xd1\x05\x9f\xde\x6e\x23\x91\xe0\xe5\x7f\x6d\x42\x48\xa7\xac\x30\x87\xc8\x7c\x80\xb8\x7f\xea\x7c\x88\x5e\x28\xf3\x01\xfa\xc5\x3d\xef\xac\x97\x3e\xa9\x82\xd7\xc6\x3e\x84\xdf\xda\x70\xb9\x31\x72\x8b\xad\x47\x33\x46\x64\x5f\x5c\x2b\xfe\xfa\x9b\x5f\xd3\x91\x62\x4b\x2b\x50\x1d\x33\x10\x07\x7b\xfa\xb3\x53\x1d\x7f\xe9\x11\x27\xaa\xca\x67\x45\x6e\x11\x9c\xeb\x35\x7d\xe5\xcf\x7e\xc7\xa6\xd1\xdf\x49\x61\xc9\x89\x4b\x37\x48\x85\xae\x33\x00\x71\x30\x0b\x78\xd9\xb4\xcf\x3b\x46\x77\x46\x7d\x08\xf9\xd0\x7f\xc9\x74\x36\xed\x11\x96\x73\xbe\xd9\xf6\x2a\xa9\x46\xca\x08\xd6\xb2\x8e\x11\x54\xbd\x19\xc4\xc1\x64\x2b\x0b\x38\xd8\x5f\x85\xea\x8b\x86\x3f\xdf\x98\xe7\x12\x93\xc5\x66\xea\xec\x59\x08\x60\x09\xa4\x1f\x44\x72\x57\x59\x49\x10\xb8\x8f\x90\x05\x71\xb0\xbe\x75\xc4\xef\x6c\x93\xc7\x93\x24\xe1\x57\xbe\xf5\x85\x91\x92\xd4\xd3\x90\x59\xd0\xd8\x90\x05\xe9\x38\xc3\xd9\x00\x19\x55\x10\x1d\xfa\x6b\x41\x1c\xac\x6f\xaf\x5a\x36\xfe\xe8\x7c\xa6\xf4\x8a\x49\x1b\x93\xd2\xf0\x7d\xac\x14\xd7\x87\xd0\x8f\x81\x27\xcf\x15\xf6\xf8\x16\x0c\x85\x7a\xed\x92\x10\x53\x67\x10\x87\xb8\x16\xf1\x62\x99\x0f\xd0\x9b\xf5\xbc\xb5\x1a\xa3\x32\x97\xb0\xd6\xb5\x51\xc6\x99\x90\x04\x28\x49\x5b\x48\xaa\xa6\xc5\x33\x02\x52\xcc\x7a\x66\x3f\xd4\xa2\xf0\xa2\x58\x08\x21\x1e\x1f\xc4\xc1\x1e\xff\x89\x55\x48\x98\x69\x88\xdf\x6a\x24\xfd\xf2\x98\xe0\x17\x2e\x9c\xb9\x59\x07\x9a\x1b\x3c\xf9\x6f\x77\x94\xfc\x62\xc4\x36\xa7\x99\x10\xb2\x20\x0e\xe6\x01\x63\x85\xb9\xf7\x54\xfe\x78\x6e\x9f\x23\x6f\xda\x75\x92\x09\xe5\x3b\x1c\xf2\xdc\x2d\x31\xd6\xc1\x6e\xf2\xde\xd2\x1b\xc5\xcc\x80\xaa\x92\x80\x38\x98\x6c\xfb\x40\xfb\xe5\xba\x36\xde\x57\x94\x27\x48\xfa\x34\x09\xad\xf1\xf8\x1b\x36\x89\xa7\x1e\x0d\xab\xd7\x1f\xce\x7c\x5b\x9e\xaf\x87\x62\x04\x20\x0e\xd6\xb7\x3f\xb1\x5d\x93\xb1\xe4\xdf\x7b\xcd\x32\xf1\x0a\x20\xf1\x86\xf6\xed\x6f\xee\xda\x4a\x26\x79\xf6\x25\xf6\x7f\x35\x99\xd8\x0f\x82\x2e\xb8\x01\x71\xb0\xbe\xcd\xf4\x3e\xd4\xe2\x78\x67\x39\xa8\xd0\x67\x20\xf3\x6c\x45\xf1\x45\xc4\x3e\xe5\x0c\x3a\x87\xc7\x7b\x23\x7c\x0b\x6f\xa7\xd0\x9b\xfe\x08\x6b\x81\x38\x84\xb5\x2e\x96\xf9\x00\xcd\xa0\xfe\xc7\xb5\x41\xab\x28\x92\x57\xf5\xfd\x12\xdd\x7e\x5a\xf6\xbc\xee\xf0\xf7\x16\xcf\x5a\xdc\x8c\xf0\xe6\xd2\xdb\x6b\xbf\xac\xa9\x5d\xf7\x01\x3a\xd1\x0b\xe2\x60\x8f\x3f\xaf\x47\x85\x25\x6e\xd0\xe7\xb1\x50\xec\xcb\x39\x33\x6d\x8c\xa3\x30\x33\xd8\x1b\xa6\x77\x4f\xf3\x98\xc3\x8c\xdc\xbb\xbe\x00\x3a\x2c\x0e\xe2\xe0\x97\x92\x89\xb3\x37\x64\xd4\x18\x59\x9e\x54\xbf\x36\xa2\x90\x78\x7c\x5f\x7f\x84\xaf\xa6\xed\x92\x1f\xd9\x9f\x8f\x22\x56\x38\xbe\xa7\xd0\xd9\x11\x10\x07\x93\xfd\xf0\x69\xee\xcb\x5c\x4d\xbc\x23\x93\xeb\x72\x0d\xd7\x7a\xa3\x7e\xd6\x3d\x61\x64\x73\x7e\xef\x24\xdc\xbb\x64\xe3\x14\xed\x41\xa9\x08\x59\x10\x07\xaf\xe5\x6e\x91\x2c\xae\x16\xd5\x41\xe1\xf5\x26\x8d\x7f\x07\x8f\x51\x6b\x23\xa2\x4e\xe9\x8e\x25\x4b\x3b\x63\x7e\xba\x28\x85\x43\x02\x37\x54\x9d\x08\xc0\xc1\x8f\xfd\x31\x9f\x4d\x14\xb9\xab\x18\x09\x22\x87\x92\x90\x35\x79\xe2\x4e\xe3\xf8\x48\x13\xf1\x7c\x2f\x5b\xe2\x56\x38\x73\xdd\xc7\xfc\x84\xb0\x16\x88\x43\x58\xeb\x62\x99\x0f\xd0\x4c\xf9\xbc\xb5\x9e\xc8\x6a\x8e\x6c\x74\xfe\x78\xe1\xcb\xdf\x17\xd5\x97\xb1\x86\x4d\xa0\x64\xa7\x1c\x7a\x18\xa4\xe9\xfa\x6e\xa4\x8b\x6d\x3d\x95\x04\xfa\x79\x01\x70\xf0\xe9\x40\x2c\xe6\xb7\xf2\xa4\xe4\x2e\xd7\x6c\xae\x3e\x47\x8c\x6a\x07\x7e\x3c\x94\x23\xbf\xf6\xca\x3f\xed\x36\xcf\xc5\x45\x04\xe8\x1d\x11\xb2\x20\x0e\xe6\x81\x74\x93\x0d\xd1\x1e\xce\x7c\x7c\x83\x7d\x4a\x41\x6f\x96\x85\x99\x43\x94\x80\xdd\xa1\x7e\x55\x96\xee\xb6\x8f\xd4\x65\x25\x1f\xa1\x3d\x65\x10\x07\x93\xcd\xdb\xfb\xbc\xda\xb3\x58\xb1\xa9\xae\xc0\xfd\x3d\xd6\x97\x4f\xf1\x2a\xf6\x5b\xfc\x39\x34\xc1\x77\x77\x77\xff\x48\x3f\x1b\x1d\x28\x41\xc8\x82\x38\x58\xdf\xfa\x1d\xe0\x39\xce\xe3\xbc\x1f\xab\x94\x19\xa8\x2d\x7d\xe7\xb3\x83\x23\x98\x75\xb8\x48\xfd\xeb\x3b\x9d\xfd\xea\x0b\xbd\x1e\x2e\xe8\xc2\x6c\x10\x07\x8f\x2e\xbf\x4b\xdf\xad\x79\x16\xdb\x33\xd8\xdf\x29\x34\xac\xc6\x55\x6a\x9a\xf9\x01\x7b\x5b\x1c\x29\x72\x21\xdc\xa0\x6a\x99\xaf\xfb\x0e\xc2\x5a\x20\x0e\x61\xad\x8b\x65\x3e\x40\x2b\xa2\xf3\xd6\x9a\xee\x56\xcf\x6d\xb2\x2f\xae\x38\x3c\x51\x46\xa9\xd9\x9a\xb1\x2d\x99\x42\x0f\x2b\xc7\xe2\xf0\x26\xbe\x5a\xce\xed\x9b\x3e\x0b\x6d\x55\x83\x38\xf8\x5c\x0b\x3b\xe4\xc6\x86\x5c\x33\xfb\x78\x1f\x5d\x2c\x8b\x9e\x1c\x53\x40\x3c\x75\xe2\x58\x47\x18\xd1\x0a\xaa\xbf\xca\xb8\xcb\x02\x54\x9d\x08\xc4\xc1\x3c\x70\xab\xee\x4f\x61\xf4\x0b\x9c\x87\x59\xfc\x2d\x8d\x4b\xf2\xc6\xcf\xb8\xc5\x28\x32\x25\x52\x25\xb5\x66\x97\x64\x3f\x5b\xdf\xd7\x85\x8e\xff\x82\x38\x78\x08\xd2\xd6\xc7\x29\xa9\x34\x65\x44\x46\x32\x4c\xee\x13\x6f\x33\x57\x8f\xf8\x2f\x36\x6b\x67\x62\xb5\xd3\x9f\x0a\xae\xcf\x04\xfc\x9f\x40\x21\x48\x00\x07\xbf\xdc\x04\x89\x62\xdb\xee\x1a\x2d\x6b\xc9\x82\x75\x4e\xbb\x73\x6d\x51\x72\xf1\x6e\x73\xbf\xea\x4b\xfd\xb5\xb3\x06\x86\x2e\x4d\x47\xe8\x54\x31\x88\x83\xf5\xed\x58\xcb\x90\x17\x01\xeb\x83\xa3\xb2\x34\x42\xb3\x7d\x2b\xe1\x03\xe6\xe4\x8c\x87\xdf\x63\x51\x16\xdc\xb2\x03\x36\x6a\x03\x1e\x53\x41\x45\xd4\x01\x1c\xc2\x5a\x17\xcb\x7c\x80\x56\xbe\xff\x23\x5f\x6b\x2b\x4d\xbf\x2a\xd6\x4d\x2d\xfd\xd4\x28\xc8\xf3\xeb\xaf\xbc\x47\xc4\xac\x74\x04\x1c\x22\x2f\xc3\x3e\x4a\x07\x07\xb7\x65\x15\x40\x69\x45\x00\x07\x4f\x53\x79\xbf\xf6\x8b\x74\xaa\x72\x27\x8b\xc0\x57\x66\x7b\xe6\x24\xf2\xeb\xa6\x95\xf3\xca\xdd\x6f\x7f\xc2\x4b\x95\xa4\x2f\xd1\x91\x42\x61\x68\x10\x07\x0f\x41\xae\xe4\x45\xb1\xa1\xa7\x47\xd8\xc6\x27\xcd\x0b\x6f\xd4\xd1\xca\x86\x3c\x20\x79\xea\x52\x17\xa2\x6b\x3b\xae\xf2\xe6\x0d\x11\xf4\xd7\x82\x38\xf8\x0b\xb1\x29\x9b\xc2\xae\x49\xb1\x6a\x09\xb3\xea\xf7\xc2\x30\x0f\xdd\xd8\x72\xba\x0f\xbb\xca\x62\x03\x2d\xea\x0e\x9e\xe5\xe9\x1c\x14\x7e\x02\x71\xb0\xbe\x8d\x22\xbb\x49\x98\xe2\xfb\xca\x71\xef\xa3\xc2\xf4\x6d\x6f\x9c\x16\x3e\x01\xbe\xb1\x9a\x52\x82\x01\x7a\x0a\x3f\xce\x9c\xa7\x26\xd0\x95\x4c\x20\x0e\xd6\xb7\x7e\xf1\x7d\x52\xab\x62\x29\x38\x8f\x0b\x3c\x68\x67\xcf\x5e\x7d\xfa\x14\xb9\x37\x2b\x9c\x9c\xb7\x2d\x54\xb6\xab\x43\xbc\x12\x13\x88\xb0\x16\x88\x43\x58\xeb\x62\x99\x0f\xd0\x0e\xc7\x79\x6b\xf5\x7c\x5f\xd2\x71\xe2\x35\x7e\xec\x3a\x3c\x63\x37\xec\x95\xf6\x21\x7f\xa2\x79\xea\x33\x65\x44\x54\x4c\x9a\x81\x2c\x59\x9a\x04\x14\x2b\x04\x71\xb0\xc7\xc7\x5a\x7c\x18\x85\x1a\xf1\x4d\x63\xb9\x8d\xf2\xa1\xd7\x86\x74\x8e\x72\xb0\xe6\xba\x15\xb9\x5f\x4d\xd8\x7a\x2d\x9a\xe3\xaa\x09\xb4\x3a\x00\x71\x30\x0f\x0c\x09\xb2\x7c\xc2\x7d\x11\xbe\x1f\xa5\xa0\x3e\xf4\x85\x59\x76\x34\xac\x7e\xf7\xe7\xe1\x83\x75\xee\x82\x6f\xbd\x9b\xef\xdd\x0d\x4f\x10\xb2\x20\x0e\x1e\x82\x1c\x6b\xee\x09\x2c\x65\xcc\xf0\x98\x8e\x34\xfb\x24\xd5\x6f\x8f\x71\xd0\xe4\xef\x3e\x40\x8f\xb1\x70\x23\xf2\x8e\xb5\x55\x05\xb4\x3a\x00\x71\xb0\xbe\x7d\x3d\x62\xd8\xfb\xaa\x2b\xe3\xd5\x86\x7c\x92\xcd\x7b\x6b\xa1\x47\xf4\x5b\xa5\x33\x45\x78\xa8\xed\x33\x28\x86\x84\x9e\x34\xfa\x55\x08\x59\x10\x07\xeb\x5b\xf5\x37\xea\x41\xd6\x25\x45\xd3\xda\x87\x41\x49\x3b\x2e\xd6\xfe\xf8\x7b\xbf\xe8\x53\xcb\x1f\x49\xbf\x30\xbf\x6f\x54\x17\x47\x75\x82\xb0\x16\x88\x43\x58\xeb\x82\x99\x0f\xd0\x1e\xf6\x3f\x99\x0f\xd1\x73\x99\x8f\x1f\xdf\x54\xd7\x48\xdc\x6b\xd1\x93\xef\x99\x75\x5b\x63\x6b\xa1\x75\xfb\xc8\x05\xe9\xf2\x17\x94\x68\x8b\xb7\x2b\x48\xf4\xa3\xcc\xfe\xfd\x4e\xdf\xb9\xcc\xc7\xaf\x2d\xa3\xa3\x80\xa4\x82\xf7\x0e\x66\x9b\xd5\x8b\xb5\x18\x23\x45\x59\xe3\x4c\x09\x4e\x9f\xc5\xbe\x3d\x3a\xad\xa3\xf8\xc2\x1a\xf7\xf7\x4d\x9e\xcb\x7c\x34\x0f\x69\x06\x74\xfc\xd6\x99\x9a\xe8\x53\x92\xc9\xe1\xb2\x7f\xa2\xcd\x1c\x58\xd0\x25\xb8\xa8\x34\x5a\xc2\x22\x1b\x9d\x2b\xd2\xfa\xdf\x6c\x2e\x82\xfa\xf2\xfc\x00\x4f\x49\xbc\x36\xda\x4f\xc5\x33\x13\x8a\xdf\x3c\x10\x89\xc2\x11\xc0\x76\x63\x56\x6f\x1a\xed\xb7\x7d\x3b\x39\x79\xdc\x09\x7a\xab\x1c\xc2\x84\x20\x0e\x66\x42\x53\x59\xdb\xdb\x4f\x1a\x06\xa4\x9a\xc2\x07\xe9\x26\xa7\x05\x8b\xe3\xe8\x89\xc7\x34\x59\x8d\x0c\x2a\xd7\xd0\xc5\x6f\x48\x47\xf0\x20\x64\x41\x1c\x6c\x24\x86\x0a\xe6\x89\x7e\x68\xb4\xbb\xdd\xd1\x9c\xf9\xda\xea\x67\x52\x50\x3a\xa3\x1e\x9a\x4e\xc4\xfa\x23\x1f\x8b\x22\xa3\x9a\xcc\x13\xe8\x95\x04\xe2\x60\xb2\x07\xa3\x92\xc7\x9b\xee\xd6\x39\x9b\xea\x98\x6a\x54\xd3\x44\x7b\xe5\x52\x2b\x6b\x7b\x61\x49\xa8\x0e\x1f\x05\x3a\x8b\x1a\x02\xa1\x6a\x46\x20\x0e\xd6\xb7\x7b\x92\x6b\xa3\x1c\xf6\xc9\x78\x48\x36\xdb\xb8\x98\xbf\xd5\x3b\x22\xef\x12\xb1\xa8\xd9\x3f\xac\x57\xb4\xd2\xfa\xba\xf7\x81\x0d\x3a\x52\x05\xe2\xe0\x65\x74\x55\x7e\xa4\xb3\xe1\x19\x9b\x52\x33\x9a\x4a\x0a\x5a\x57\x35\x1b\xc4\x57\xb1\xfd\x89\xe3\x56\x0b\xb9\x7a\x59\xab\x7a\x9f\x74\x0b\x31\xc0\x41\x1c\x62\x80\x5f\x2c\xf3\x01\x1a\x33\xff\x23\x8a\xda\x4e\xfb\x4c\xf2\xf2\x8f\xa2\x0d\x22\xbe\x84\xa9\xd1\x84\xb7\x95\x6f\x52\x4e\x62\xab\xa3\x9b\xc5\x3a\x88\xe2\xcb\xce\x30\xf5\xa1\x28\x2a\x80\x83\x3d\xfe\xb0\xaa\x4f\xc2\x93\x61\xec\xc9\x7c\xea\xf6\xb0\x57\x6d\x7c\xdf\x5b\x63\x9e\x70\xfe\x51\xc9\x61\x21\x7d\x63\xa4\xea\xff\x54\x10\x9a\xf1\x82\x38\x98\x07\x76\x70\x75\xda\x3f\x4b\xc7\x48\x27\x76\xa5\x27\x13\xda\xcd\x0b\x16\x49\x93\xae\xa2\xe1\xb5\x5a\x2a\xd8\xaa\x86\x97\x91\x56\x40\x37\x5a\x82\x38\x98\xac\x76\x5a\x3a\xbb\x4d\x93\x81\xda\xb3\xdd\x3b\x6a\x61\x71\x27\xc2\x14\x2c\x72\x0f\xd7\x87\x07\x70\xdc\x4e\x87\x1f\x11\x28\x4d\x89\x40\xa7\x08\x00\x1c\xac\x6f\x49\x26\xd5\x45\xdd\xe7\xdd\xb6\xaa\x79\x12\x51\x72\x5c\x06\xf0\xf5\xa2\xae\x57\x66\xbe\x7b\xa7\x4f\xc2\xc8\x79\x87\xf0\x63\x0d\xb4\x59\x01\xe2\x60\x7d\xab\x91\x5b\xd1\x8c\x2e\xc7\xa4\x88\xa1\x87\x89\x22\x13\xd7\x3b\xda\x70\xc3\x97\x4e\x53\x64\x3d\x71\xf9\x8e\xde\xb6\x04\xcf\xf4\x25\x84\xb5\x40\x1c\xc2\x5a\x17\xcb\x7c\x80\x7e\x1b\xcf\x5b\x2b\x3c\x8a\x04\xeb\xb3\x42\x55\x91\xf7\xf6\x99\x3a\xea\x78\xd9\x6b\x54\x61\xcf\xb5\x98\x6d\x89\x90\x50\xe6\x8d\x7c\x34\xfa\x48\x28\xa9\x06\xe2\xe0\x45\x13\xdf\xf3\xe4\xf2\x9f\x32\x08\xd6\xd2\xd0\xd3\xae\xeb\x08\xed\xf9\xd4\xb5\x1f\x5d\x93\x33\x4f\xe5\xaa\xd7\x0f\xb1\x77\x7a\x01\x1d\xf9\x00\x71\x30\x0f\x74\xb1\x5e\xcd\xdc\x5d\x71\xb4\x5c\xf8\xfe\x3c\x90\x9a\xd6\x69\x5d\x74\x20\xd7\xa0\xfc\x99\xe2\xd8\xf5\xde\xdf\xca\x6e\x7b\x4a\x50\x65\x3b\x10\x07\x93\x55\x37\x0e\x38\x16\x26\x95\x09\xf2\x7b\x91\x2b\x93\xa0\x80\x55\x1a\x54\x8f\xca\x78\x85\x24\x89\x84\x35\x1b\x6f\xb9\x13\x9f\x7f\x01\x21\x0b\xe2\x60\x7d\x9b\x67\xaf\xfc\x24\xaf\xe5\x63\x93\xa7\x34\x9b\x70\x37\xb2\x2b\x19\xe5\x8d\x16\x34\x0d\x9a\x9e\x40\xa6\x6d\x7c\x9c\xcf\x07\xcf\x5e\x43\xcb\x7f\x00\x07\xeb\x5b\xb1\x24\x71\xbc\xb9\xe6\x23\x14\x63\x9f\xcf\x48\x91\xc1\xbe\x57\xbc\x1b\x32\x91\x26\x58\xa5\xba\x19\x75\xd9\x5f\xda\xe3\x2d\xd9\x23\xac\x05\xe2\x10\xd6\xba\x58\xe6\x03\xf4\x95\xff\x7f\xa4\x9c\x0d\x7e\x58\xf2\x04\x0d\x2f\xa5\x8b\x6f\x88\xb2\xdf\x6e\x4c\x52\xb1\xe1\xc8\x73\x1d\x2e\x1c\xa3\x33\x21\xbc\x7b\x2a\xb8\x0f\x8d\x2c\x10\x77\x6e\x64\xed\x1e\xb7\x7c\x4c\x8e\xbb\x4b\x14\x42\x53\xbd\x71\x2f\x95\x70\x7e\x7c\x7e\x32\x6c\x3e\xcd\x0f\xeb\x48\x8d\x51\x32\x96\x0e\x21\x0b\xe2\xe0\x55\xf5\x93\x6e\x88\x37\xd3\x24\x39\xb5\xda\x74\x88\x24\xf8\x13\x8b\xcf\xc8\xcd\x37\xc4\x55\x38\xc8\xda\xc7\xc7\xb7\x67\x79\x45\x95\x43\xc7\xff\x00\x1c\x4c\x96\xa8\xf5\x8e\xb7\x54\x9e\xba\x02\xa5\xad\x2c\x9e\x65\xc0\xed\xce\x72\xbd\xb7\x6b\xe4\x44\x21\x04\x4e\x76\x76\xc1\x85\x7f\x7a\xa1\x59\x01\x88\x83\xf5\x6d\x5c\x43\xec\x1e\x05\xd3\x25\xf7\x2a\x57\xf7\x68\x8b\x10\xdd\xf9\xa6\x31\x82\xb7\x1e\x53\xe1\xe5\xa3\x44\x6d\xd4\x89\x39\x29\x1f\xa0\xcc\xc7\x7a\x6e\xd3\xce\xd7\x7e\x1f\x5d\x79\xa7\x62\x2a\x05\xc9\x2f\x84\xb5\x4d\xa7\xbd\x8f\x5f\x1b\x24\xa2\x95\x97\x0d\xfa\x36\x7c\x31\xfe\x77\xe6\xc3\x12\xcd\xae\x24\xd1\x3d\x3f\x53\x7a\x62\x3e\x41\x82\xb9\xea\x9a\xf6\x44\x14\x3b\x43\x5d\x0c\x67\x48\x9b\xce\x1c\xf3\xd4\x6f\xa3\x7f\xa1\xc9\xcc\xa2\x55\x6c\xb9\xda\x97\x53\xa7\x75\x9d\x4a\x48\x4c\x15\xbc\xf4\x17\x3c\x2b\x83\xac\x16\x05\xad\xac\xf7\xd2\x97\x32\xb9\x61\x99\x0f\x90\xf2\xf9\xcc\xc7\x77\x3f\x0f\x76\x62\xec\x58\x61\xa2\x88\xb3\x78\x85\x25\x36\x12\xcb\x3d\x66\xbd\xcd\xa8\xdc\xb6\x72\x21\x5c\xda\x5d\xbd\xcf\xff\xbe\xf6\x63\x0d\xd9\xc5\x75\x47\xe3\x40\xa3\x47\x44\x55\xe4\xae\xd7\x22\x9b\x5f\x35\x73\xa1\x3e\x19\x79\x48\x35\x07\x5e\xd6\x52\x6d\x1d\x16\x94\xf9\x00\x69\xfe\x93\xf9\xf0\x85\x67\x3e\xa4\x55\x9e\x78\x88\xa5\xf6\xa5\x90\x38\x4a\xf1\xcd\x3e\x5f\x56\xd3\x6a\x73\xcb\x3c\x14\xe0\x59\x3d\x9e\xb5\xc1\x2c\xdd\xc9\x13\xfc\xeb\x49\xae\xef\xb9\xcc\xc7\x01\xf6\x8d\x27\x2c\x32\x7a\x6f\x05\x1c\x92\xb3\xf7\xe7\x35\x2c\x5b\x1d\x6d\x51\xd0\x9c\xd0\xf5\x26\x38\xf8\x09\x06\x6e\x25\x0a\xfc\x7d\x93\xe7\x32\x1f\x37\x2e\xbf\x0d\x69\x14\x21\xfe\xe3\x7e\xc7\x22\x82\x95\xe5\x4f\xe7\xb2\x6a\x80\xb3\x5a\x0e\x4d\x94\x45\x17\xc3\x6c\x08\x01\x89\xe4\xdf\x37\x79\x2e\xf3\x11\xbe\x3b\xb1\xed\x4c\xb9\x61\x40\x15\x68\x1e\xbf\xe5\x3a\x43\x6d\x13\x5a\x2c\x11\xe1\x43\x77\xb6\x93\xf3\x54\xdc\x5b\x3e\xe5\x6f\x6b\x43\x84\x4a\xfa\x9e\xcb\x7c\xf0\x97\xce\xc8\x4b\x96\x47\x06\x86\x20\xf7\x5c\x8a\x61\x91\x79\xc7\x5e\x51\x7b\x63\x5c\xb7\xe5\x69\x40\xd7\xbb\x1f\xc4\x55\x62\x8c\x7f\xdf\xe4\xb9\xcc\x47\x50\x02\x95\xa1\x85\x78\xeb\x5b\x97\x50\xb4\xc4\x86\xd3\xca\x23\xd4\xcf\xfe\x1c\x26\x6f\x2a\xe8\x5d\xd1\xa8\xfb\xaf\x35\x61\xe2\xfd\x7d\x93\xe7\x32\x1f\x61\x2e\xba\x9f\xa8\x5f\xde\x1e\x09\x3c\x89\x88\x8a\x9e\xee\x0e\x20\xcd\x13\x30\xb2\x75\x67\xb0\xf0\xca\xcb\x10\x10\xd2\xb9\x17\xf0\xf7\x4d\x9e\xcb\x7c\xcc\x47\xd3\x39\x7a\x8f\x70\x92\x8e\xce\xd2\x3e\xe7\x89\x0c\xce\x4d\x94\xbf\xa6\xb3\x2a\x3a\xf2\x39\x50\xa5\xcb\x48\xd6\xbb\xbf\xf1\xbf\x59\x96\x81\x86\xe2\xf9\xb7\x90\x88\x41\x8b\x78\xf0\xd1\xd5\xed\x30\x87\x02\x79\xcb\x44\x67\x11\xb3\x0f\x32\x9b\x63\x6f\xa9\x9e\xf3\xde\x7d\x22\xed\x94\x58\x7f\x0d\xf1\x03\x0c\xe2\x60\x6f\xa1\xdd\x92\x7b\x1c\xda\x5a\x73\x59\xb8\xac\x4d\x47\x35\x4a\x46\x58\x0b\x4d\xee\xd2\x5a\x36\x3b\x9b\x66\xe4\x69\xf9\x0e\xbd\xf1\xd0\xe5\xb7\x20\x0e\xf6\xba\x60\x6b\xb4\x1a\xa4\x59\xf3\x6d\xec\x91\x9f\x55\xe4\x4c\xef\xa0\x0d\xc5\xc4\x27\xc4\x2d\xbd\x55\xb4\x84\x87\xdd\x74\xd7\x3e\x0a\x9a\xe0\x80\x38\xf8\xdd\x98\x9b\xe6\x3a\xa6\xa9\xf8\x4a\xbf\xd2\x86\xf3\x47\x43\x6b\x70\x4a\xbd\xd8\xa8\x30\xbb\x51\x51\x07\x79\xe2\x49\x52\x12\xde\x43\xb7\xc1\x83\x38\x7f\x31\xd1\x7f\xcb\x96\x64\xdd\x7b\x49\xf6\x02\x63\xd4\x51\xa7\x8e\x63\xdc\x60\xac\x73\x7b\xae\xf7\x41\xe7\x00\x3e\xb5\x50\x0a\x4d\x2e\x97\xa5\xfa\x3a\x42\x16\xc4\xc1\x64\x9d\x4c\x12\x56\xde\x7d\x7e\xd7\x11\xff\x36\x4f\x72\x26\x43\xcd\x7b\xfa\x14\x7f\xb2\x3a\x4f\xe9\x21\x97\xe5\x16\xd9\xd9\xb3\xa3\x5f\x88\xcc\x07\x88\xfb\xa7\xce\x87\xef\x85\x32\x1f\xa0\x5f\xdc\xf3\xce\xea\x6b\x20\x91\x09\x5a\xc0\x7b\x98\x63\xc4\x14\xb0\x44\x4c\x87\x34\x21\x77\x5c\x6b\x1f\x2b\x47\x97\x67\xcd\xee\xb6\x5f\x49\x6b\x8f\x78\x7a\x10\x07\xdf\xd1\x4b\x24\xe6\xba\x73\x73\x70\x8b\x7b\x81\x96\xe8\xaa\x77\xb5\xf9\x1d\x15\xb6\x96\xd2\x83\x31\xeb\x89\x90\x76\xd4\xaf\x3e\xfb\x02\xd0\x8e\x1e\x80\x83\x59\x20\x71\x0c\x4f\x7c\xb3\x79\xb4\x48\x96\x9a\x83\xf6\x68\x5a\xec\x94\x80\x4a\xe3\x89\x29\xed\xfd\x3c\x9f\xb7\x66\x85\x54\xc4\x41\xd0\x44\x1f\xc4\xc1\x64\x4b\xac\xae\x6f\xc6\xb3\x86\x0b\x04\xf8\xa8\x9a\xdc\x31\x08\xef\x17\x6e\x5e\xd2\xfc\x15\xd0\xc1\x1a\x3a\x7c\xf2\xdb\x4e\x62\x16\x2a\x8f\x06\xe2\x60\x16\xd8\xdc\x22\x63\x0f\x7e\xf8\x55\xdd\x8b\x55\xa7\x25\xb9\xe0\x25\xab\xac\xc2\xf3\xf8\x06\x8f\x67\x41\x9a\x1a\x28\x5d\xb6\x31\xab\xd0\x6d\xcd\x20\x0e\x26\x4b\x77\xf4\xb6\x99\x67\x43\xad\x74\x2a\xd0\xab\xab\xe0\x4b\x1d\x26\xbe\x2b\xd9\x0d\xa4\x78\x2b\x73\xeb\x53\xbd\xc6\x15\x5d\xd6\x79\xc4\xd4\x19\xc4\x21\xae\x45\xbc\x58\xe6\x03\xf4\x66\x3d\x6f\x2d\xc2\x4b\xca\x46\x82\x81\x77\x83\x2a\x25\xe5\x12\x7f\xf7\x73\x3f\x7d\x28\x40\x3f\x94\xf1\xd3\x2d\xfe\x09\x91\xc3\xe0\x71\xc1\x19\x94\x14\x06\x71\x30\x6b\x8d\xe4\x45\xf1\x72\x17\xdf\xeb\x2e\x78\x4e\xf1\x52\xb5\x80\x19\xf5\x83\xec\x58\xd3\x77\x7e\xcb\xf0\x1b\xf9\xa2\xb5\xdb\x7e\x7b\xd0\x47\x23\x10\x07\xf3\x40\x4b\x56\x18\x3f\x72\x6a\xd7\xf2\x1d\xce\x27\x3f\xd0\x0d\x33\x1e\x10\xb7\x0d\xdc\x29\xec\xef\x8b\xe1\x4e\xa8\xd1\xca\xc1\x4c\x4b\x47\xc8\x82\x38\x98\xac\xcb\x03\xfa\x8f\xb6\x85\x25\x6b\xa7\x18\x81\x32\xc9\xa5\x8c\xdc\xcf\x51\x44\xfa\x39\x5d\x8c\x5b\x18\x9d\x38\x9a\xdc\x34\x5d\xa1\x23\xad\x20\x0e\xe6\x01\x5a\x29\x65\xef\xcb\x06\xcc\xda\xd7\xfb\x67\x64\x88\x70\x87\x04\x29\xed\xdb\x22\x22\x57\xe3\x17\xa5\x39\xf1\xde\x5b\xd1\xe2\x41\x7b\xd0\x20\x0e\x26\xfb\x99\x7b\x2c\x19\x39\x04\xd7\xbf\xcd\xae\x7b\x85\x85\x5c\x63\xf1\xba\x11\xd1\x4b\x3b\xb1\x66\xd5\xc9\x2b\x27\xa1\xdf\xaf\x5b\x0a\x20\xac\x05\xe2\x10\xd6\xba\x58\xe6\x03\x34\x83\x3a\x6f\x2d\x47\x17\x0d\x77\xb4\xbc\xe6\xeb\x13\x9e\x16\xd9\xa7\x6a\x67\x4f\x9f\x29\x3c\xb8\x41\x1e\x47\x22\x1e\x3f\x34\xcd\xc8\x6b\x32\x01\xed\xce\x80\x38\x98\xb5\x12\x07\x22\x2c\x31\xbd\xab\xc5\x68\xeb\x49\xfe\x58\x99\x35\x2a\xc7\x8d\xf3\xcf\x3f\xda\xc7\xbb\xe3\xd4\x5f\xf1\xd2\xd0\x43\x32\x10\xfa\x79\x01\x70\xf0\x4d\x1f\xf6\xd5\x20\xd5\x1e\xac\x3e\x13\xf6\x44\xb2\x0a\xa1\x4c\x05\x05\x1f\x87\x26\xe2\x23\xdd\xaf\x69\x73\xea\x38\x8d\xcf\x87\xa0\xf3\xfd\x20\x0e\x26\x2b\x23\xb3\xff\xfd\x76\xed\x35\x24\x17\xf7\xdb\xc8\xcd\x76\xc9\x61\x0e\x19\x57\x65\x1f\xf5\x69\x28\x15\xa7\x11\x39\xf2\xb1\x1e\x42\x27\x5d\x40\x1c\xcc\x03\x44\x32\x01\xf2\x33\x3d\xf2\xa9\xc1\x9a\xf8\xa1\x56\x95\x63\xdb\x11\x9f\x6e\x29\x9e\x11\x61\x2c\xd0\x32\x04\x0b\x7c\x8f\x1f\x84\x3e\xc6\x80\x38\x98\xec\xe3\x3a\x11\x86\xc7\x54\x39\xd4\xf4\xbf\x44\x54\x14\xfd\x9e\x32\x58\x6f\x0e\xe0\x59\x7e\x49\x15\xd6\xa2\xc0\xf4\x49\xd0\xbe\x69\x85\xb0\x16\x88\x43\x58\xeb\x62\x99\x0f\xd0\x4c\xf9\xbc\xb5\xea\x72\x44\x9b\xbe\xef\x73\xb2\xc6\x77\x0f\x33\xdc\x7a\x45\xdf\x15\x51\xb6\x69\xf2\xfa\xd3\x70\xc3\xb6\x37\x91\xe3\xdc\xd1\x0e\x74\x6d\x10\x88\x83\x59\xab\xea\x8e\xf1\x4a\x64\x7c\xec\xf5\x92\xef\x1e\x29\x1f\x89\x75\x03\x12\x97\xc3\xef\xb2\x0f\xf7\xed\x1e\x06\xe8\xa1\x3e\xad\xa8\xb9\x87\x90\x05\x71\xf0\xf3\xc7\xb4\xaf\x8e\x52\xc8\xde\x33\xfa\x44\x11\x37\xd6\x0a\x2b\x88\x7d\x34\xa4\x9e\xe2\x92\xb5\xc7\xf4\xf5\x6b\xd0\x40\x46\x13\x8d\x82\xce\x1f\x03\x38\xf8\xd1\xb4\xb0\xc7\x54\xf2\xa7\x6f\x74\xd4\xf8\x73\x7b\xfc\x6a\xe9\x62\x1f\x4b\x7c\xc0\xaa\x69\x5f\x25\xbb\xdd\x96\xee\xac\xcc\x93\x03\x95\xb2\x07\x71\x30\x0f\xcc\x97\xa8\xe4\xf9\x5e\xe3\x9e\xf0\xdd\xbe\x54\x92\xa3\x3b\x53\xba\xb7\xc4\x8c\x7a\xe9\xb6\x2d\xc1\x8e\xf5\x9c\x79\x99\x0f\x3a\xf4\xad\x17\xc4\xc1\x64\xa5\x6f\xe7\xe1\x19\xf8\x71\x63\xab\x63\x3e\x33\xc3\xa7\xbb\x44\x52\xb4\x9d\xef\x79\xb3\xba\x3a\x94\x86\xb8\xa3\x57\xb9\xce\xc1\x17\x61\x2d\x10\x87\xb0\xd6\xc5\x32\x1f\xa0\x15\xd1\x79\x6b\xad\x51\x3e\x2e\x21\x54\x62\x2b\x32\x6b\x3d\x99\xc1\x34\x9f\x74\x7e\xd3\xc7\xa8\xb4\x30\xf3\x22\xa7\xf2\xce\xf3\xa5\x41\xb2\xba\x78\xc4\xe3\x83\x38\x78\x45\xb9\x20\x1d\xfd\x20\x5f\x62\x9b\xf7\x72\x36\xcd\xe3\x21\x3f\x77\x7c\x27\x3c\x1d\x6b\x26\x7d\x49\x73\x83\x1c\x39\xb8\x9a\xb4\xa0\xd9\x0b\x88\x83\xdf\xbc\xcb\x36\xd9\xf3\x56\xcc\x8b\xf6\x97\xf7\x37\x7e\x54\x74\xab\x9c\x4b\xf6\x04\x74\x59\xe8\xf1\xdf\x04\x24\xd9\x7a\x52\x3f\xdf\x86\x4a\x47\x80\x38\xf8\xbd\x1e\x6c\x3d\x8d\xe4\x95\x6d\xbb\xf3\xe3\x04\xd2\x38\xaa\x5e\x31\xcd\xec\x3c\x05\x95\x54\x04\x4d\x01\x18\x2b\x83\xd7\x85\x39\xa0\x48\x19\x88\x83\x79\xa0\xd8\x95\x88\xc8\xbe\xad\x63\x38\x2a\xe8\xca\xe3\x27\xbe\x6f\xac\x5c\xf9\x9b\xa2\x9e\x90\xcc\x4a\x15\x8a\x72\x5b\xd6\xc5\x1b\x40\x9d\x00\xe2\x60\xb2\x22\x56\xbe\x2e\x47\x52\xa3\x1c\x3c\x1c\x8c\x92\xa8\x18\x47\x2c\x41\x1a\xf1\x61\xc7\x45\xe5\x68\xb3\x1d\xcb\xea\x04\x12\x4a\x50\x39\x62\x10\x87\xb0\xd6\xc5\x32\x1f\xa0\x95\xef\x79\x6b\xe1\xb1\xf8\x4b\x3f\x25\x1c\x0c\xae\x5e\x75\x78\x8a\x3d\x89\x1f\x9c\x29\x93\x9a\xc5\xd8\xe1\x10\x79\x97\x81\xf0\x04\x3f\x27\x76\x03\xf1\xf8\x20\x0e\xbe\x4b\xab\xf1\x67\xe1\xa1\x4b\x27\xce\xef\x39\x1b\x73\x9a\x81\xab\x03\x2d\xcd\x97\xb6\x6d\x9c\xc2\x82\xcb\xa6\x3c\x33\xb0\xae\x0a\x40\xf5\xb4\x40\x1c\xcc\x03\x63\xa6\x56\x53\x97\x4e\xd4\x4b\xdf\x46\xe0\xe6\xd9\x36\x58\xc5\x2a\xca\xf0\xb9\xdc\x37\xea\xcf\xf0\xb5\x2f\x24\x0d\xfd\xb1\xf4\x03\x21\x0b\xe2\xe0\xb5\xd9\x7f\xc9\x2d\xf2\x0b\xbf\x50\x61\xbe\x9a\x30\xe9\x23\xd4\xd2\xdd\x1d\xef\xd6\x3a\xd1\x2b\x76\x43\x39\xf0\x93\x5a\x54\x4f\xad\x1d\x42\x16\xc4\xc1\x3c\x60\x69\x17\x2c\x16\x8c\xf5\xba\xc3\x2d\xd9\xea\xc9\xcf\xe2\xed\x8f\x81\xdd\xe3\x19\x65\x76\x57\x44\xf1\x9b\xb9\xcb\xef\x54\x89\x87\x23\x64\x41\x1c\x4c\x76\x2a\xe8\x64\x53\xf7\x00\x33\xf9\xd2\xa4\xea\x87\xdd\xa2\x6b\x69\xb3\xb7\x54\x6b\x33\x17\x3f\x62\x12\x05\x48\x69\x28\x16\xea\xf6\x20\xac\x05\xe2\x10\xd6\xba\x58\xe6\x03\xb4\xc3\x71\xde\x5a\x3f\x03\x6e\xfe\x14\x6f\xba\xeb\xa2\x68\x5a\x9b\xa8\xf2\x70\x82\xe9\x5d\x45\x43\xc4\x62\x56\x81\x2c\xaa\xcf\xd3\xb0\x77\x04\xa7\x50\x79\x4d\x10\x07\xb3\x16\xce\x7c\x88\xfe\x19\xb3\xda\x00\xbe\xc9\xa5\xef\x6c\x3b\x46\x9e\x2b\xdf\xb0\x50\x0a\xd4\xe5\x7e\x6c\x2f\x88\x94\x96\xee\x0d\x41\xcb\x6e\x10\x07\xf3\x80\xb5\x93\x01\x6e\xf8\xd5\xf5\x43\x94\xea\xdb\xdf\x33\xf9\x35\x5d\x5f\xa0\xe6\x1c\x4b\xa9\x95\xca\xcb\x44\xa6\x9c\xf0\x8e\x88\xa3\x23\x64\x41\x1c\xbc\x7c\x48\xf0\x38\xda\x8d\x5d\xcb\x38\xfa\x56\x97\x93\x10\x4f\xbd\x67\xfb\x2e\x92\x34\x0f\x4f\xd4\xbd\x66\xeb\xfe\x98\xde\xbb\x8f\x36\x06\x95\x0f\x01\x70\x30\x0f\x44\xba\x4a\xeb\x85\x04\x65\x74\xd4\x3f\x5e\xad\xdc\x99\xde\x8b\x41\x21\x2b\xdc\x96\x9b\x5d\x7a\x6e\xf1\x40\xd6\x96\xf3\x86\x0a\x74\xde\x04\xc4\xc1\x64\xfb\xb1\xa4\x16\x75\xfd\x7b\x3a\x34\xae\xf4\x8c\x5c\x59\xa6\x7c\x4c\x51\x23\x8f\xed\x40\x2b\x54\x2f\x2b\xe5\x3d\xf1\xf2\xcf\xa7\x49\x84\xb5\x40\x1c\xc2\x5a\x17\xcc\x7c\x80\xf6\xb0\xff\xc9\x7c\xf8\x9e\xcb\x7c\x0c\x18\x09\x1d\x2e\x05\xe1\x56\x87\xb6\xdd\xab\x37\x33\xf9\xe4\x63\x1f\x15\x68\x7a\xec\xea\xe0\xb6\x68\x2e\x24\x1b\x39\x22\x9c\xfa\xf7\x3b\x7d\xe7\x32\x1f\x2b\xa8\x75\x87\x55\x18\xa2\xaf\x48\x5e\x92\xa1\x8e\x2e\x5d\xfd\x3c\xf3\xed\x52\x44\xc0\x87\xe8\x96\xa0\xb7\x8c\xc5\x13\x32\xde\x1a\x7f\xdf\xe4\xb9\xcc\x07\x56\x09\x06\x89\x20\x15\x9d\x08\xed\xae\xe3\x0e\x87\xe3\xe3\x9d\x47\x83\xae\x26\x21\x2d\x83\x7c\x38\x33\x04\xac\xfc\x09\xe6\x7f\x5b\xb7\xf8\xc1\xc5\xfa\xf2\xfc\x00\x97\xbd\x8d\xd7\x9d\x36\xa3\xee\x29\xf8\xd3\x55\x97\x8c\xa0\xf6\x86\x3b\xb9\xa6\x95\xfc\xcf\xe8\xaf\xa4\xaa\x66\xbf\x14\x69\x8e\xd6\x10\x26\x04\x71\xb0\x01\xee\x86\xaa\x67\xb1\xa4\x54\x16\x30\x30\x64\xb2\x48\x6c\x72\x9f\xbe\xd1\x81\xf2\xb2\xad\xee\xd6\x0f\x0c\xea\xb9\x59\xc6\xac\x2a\xa8\xca\x29\x88\x83\x1f\xfb\xb9\x1e\x15\x9f\xfb\x93\x1b\x77\xaa\x62\x69\x50\x77\x65\x99\xbf\x7e\x84\x8d\x7d\xcd\xed\xb2\x6b\xab\x87\xba\x65\x3e\x7e\x78\x00\x74\xec\x07\xc0\xc1\x37\x17\xb1\x6a\x5f\x73\xc8\x34\x05\x94\x0d\x6d\xfb\x38\xdb\x57\x05\x8c\xbf\x1b\xc2\x38\x63\x19\xb3\x1b\x2c\xd8\xeb\x50\x79\x64\x4d\x09\x4d\x4d\x01\x1c\x6c\x24\xd6\xc6\x34\xbe\xcd\xdd\x43\x45\xbe\x76\xd0\xdd\xb9\xa5\xc3\xa8\x2c\x7f\xe9\x63\xbf\x5a\x89\xce\xba\x7f\x1d\xd2\x70\x81\xda\x2d\xa8\xfc\x18\x88\x83\x2f\xff\x7f\x30\x70\xa4\x4b\x53\x3e\x8e\xfa\x83\x6f\x9a\xf1\xbb\xd3\xa0\x95\x63\xea\x7d\x66\xc3\xa0\x18\x79\x8f\x26\x16\xaa\x96\xee\x06\x62\x80\x83\x38\xc4\x00\xbf\x58\xe6\x03\x34\x66\xce\x5b\x8b\x4b\x23\xe1\xd3\x89\x3a\x55\xf2\xf6\xf7\x6a\x0f\x47\xc5\xec\x1c\x61\xff\x37\x26\x48\xab\xbd\x84\x13\x26\xf7\x6a\xf2\x0a\xba\x56\xa0\xca\x19\x00\x0e\x66\x2d\x79\x81\xee\x7b\x12\x84\xc6\xf5\x0c\x3f\x98\x1b\xd2\x25\x32\x48\x26\x8f\xde\xf6\x34\x61\xec\x73\xd1\x35\x25\x77\x0b\xca\xe3\x41\x49\x77\x10\x07\xf3\x80\x84\xd9\x24\x8b\xb1\x93\x77\x5d\xef\x5b\xe3\x35\xd6\xde\xdd\x9d\x7d\x5e\xe4\x0f\xdb\x45\xc1\x82\x89\x14\x19\x4b\x54\xc6\xcf\xa1\xbd\x50\x10\x07\x93\xb5\xef\xda\x43\x8e\x7e\xfb\x91\xbd\xd9\xa7\x21\x63\x0d\x67\xda\x3a\x69\x8b\x69\x55\x0b\x47\xad\x77\x41\x26\xac\xe6\xa0\x29\x08\xba\x2d\x14\xc4\xc1\x3c\x50\x69\x51\x3a\x4a\x4b\xa0\x41\xb7\x3b\xd8\xe2\xfc\xc7\xf8\x56\x66\x6e\x85\x9e\x76\xfd\x66\x61\xba\x8a\xc2\xe9\xd1\x23\xf3\xef\xcb\xd0\x41\x35\x00\x07\x93\xdd\xba\x82\x3f\x35\x50\xc4\x3e\xdb\x11\x7b\x14\x6a\x77\xe5\x5e\xa9\x45\x60\xba\x94\x0e\x36\x5b\xa5\x5a\x2a\xb9\x31\xc1\x24\x37\x94\x72\x06\x71\x08\x6b\x5d\x2c\xf3\x01\xfa\x6d\x3c\x6f\xad\x3b\x24\x1f\xdb\xa6\x8e\xdc\x06\xb6\x8a\x7e\x07\xe2\xd3\x3e\xa9\x7e\xf8\x68\x78\x18\x3d\x89\x80\x90\xb6\x45\x2b\xe8\xd1\x9d\x11\xc8\x5a\x20\x0e\x66\x2d\xcc\x60\x79\xa1\xc7\x02\x8a\x74\x3b\xe4\xeb\xeb\xde\xa5\x3f\x27\x71\x2d\xba\x04\x3e\xbc\xe6\x7b\xe4\xb1\x76\x2a\x16\x5c\xf0\x10\xaa\x51\x0e\xe2\x60\x1e\x20\x9c\x2b\xc9\x0b\x7a\xfe\x66\x2e\x95\x55\x84\x70\xf4\xce\x14\x5b\x24\xd2\xdb\x4b\x6d\xe9\x8e\xb6\x14\xef\x02\xa3\x7c\x51\xb4\xde\x40\x7b\xa1\x00\x0e\x26\x5b\xad\x8d\xe6\x23\x36\xee\x99\xd9\x11\xfe\x04\x7b\x47\x6d\x66\xe9\xbb\x11\xad\xd7\xc3\x5b\x67\xa5\x6b\xed\x63\x15\xf9\x89\x03\xf3\x08\x59\x10\x07\xf3\xc0\xce\xb5\x0d\x63\x57\xb3\x2a\xd6\x4b\x24\xa4\x7f\x8e\x49\x12\x7f\x48\x91\x86\x8b\xf0\x9c\xf1\xde\xe1\xec\x75\x96\x4b\x3d\xbd\x53\x0b\x85\x9f\x00\x1c\x7c\x22\xcd\xe8\x17\x77\xbb\xcd\x92\xc7\xbc\xd8\x37\xf7\x76\xdd\x4b\xf9\x9f\x02\xcf\xce\x30\x65\x22\x1d\xdd\xad\x83\x30\x17\x0d\xbc\xd6\x11\xd6\x02\x71\x08\x6b\x5d\x2c\xf3\x01\xfa\xca\x7f\xde\x5a\x77\x19\xbe\xb0\xa0\x96\x33\x3c\x5c\xef\x09\x38\x40\x2e\xaf\x1c\x41\x19\x14\xbe\xf6\xe1\x90\xf5\x45\xdc\x28\xa6\xe3\x24\x4d\x1d\x2a\x74\x66\x19\xc0\xc1\x0b\x5f\x75\xfc\xee\x2b\x09\x0e\xa8\x6d\x7c\xb3\xcc\xa6\xcc\xca\xa1\xec\x7e\xb6\x16\x71\x5f\xab\xd6\x60\xef\x99\xdc\xdb\x27\x86\x1c\xd0\xa6\x25\x88\x83\xd7\xe3\x64\x23\x64\x7f\x12\xcf\x55\x90\xf6\xd1\x33\xe2\x47\x96\xdf\xa5\x76\xd2\x9f\xef\xb0\xd3\x33\xb1\xf1\xf9\xf5\x2e\xc7\xf7\x5c\x86\x56\x3d\x20\x0e\x26\xfb\xfa\x47\xe5\x44\x70\x5f\x12\x7a\x63\x36\x2e\xa7\xc7\x3a\x25\x7a\x33\xd5\x04\x3f\x7f\x9a\x87\x6b\x14\xa1\x01\x43\xea\x28\x0a\x74\x70\x1b\xc4\xc1\x3c\xe0\xba\xf9\x8c\xb8\xb3\xce\xe9\xe4\x51\xb5\x0c\x25\xb2\xe2\xac\x04\x2d\xa6\x8b\x74\xeb\xb6\x39\xb2\xf2\x8b\xb8\x96\x62\x6c\x8b\x54\x28\xf3\x41\x65\xae\x48\x11\x97\xc4\x20\xc6\x5c\xf8\xe1\x21\xfb\x9f\xdc\x17\x27\x84\x57\xb2\x04\xf3\x91\x24\x77\x9b\xd1\x4f\x2e\xdb\xb9\xfc\xff\x32\x1f\x0f\x8c\xf3\x88\x5b\xeb\xc5\xd6\x7d\xb8\xbf\x09\xbb\x17\x4d\xfb\xdc\xff\xb4\x56\x80\x3f\x39\x60\xf4\xcd\x5c\x88\x45\xe8\x8f\xcb\xfe\xbf\x50\xf7\x97\xa6\x97\x0f\x64\xe6\x0f\x6c\x3c\xd0\x83\x48\xbf\x3e\x7a\xc9\xfb\x66\x22\x15\x39\xa9\xbc\xaa\x92\x0a\x27\xf1\x92\x48\xac\x3e\x2c\xf3\x01\x52\x3e\x9f\xf9\x20\x28\x31\x3e\x29\x35\x1e\x98\x7b\x54\x58\x59\x50\xea\x1b\x73\xf4\x25\xa0\xc8\xe8\xd4\x59\x43\xee\xd7\xbb\x35\x33\xc7\x55\x0b\xbe\x7f\xff\xd9\xa4\x0d\x64\x63\xf5\xf3\x94\x36\x34\x51\x33\xf8\xa2\x3f\x72\x24\x3a\x6f\x5f\x26\xbf\xbe\xff\xc6\xbe\x8e\x51\x0b\xa7\xfd\x03\x2d\x94\xf9\x00\x69\xfe\x93\xf9\x68\x84\x67\x3e\x94\x48\xbc\x7c\xb2\x6f\xe8\xf8\xd9\x7c\x30\xb6\xbb\xab\x54\x80\x46\x2b\xf3\x63\x3a\xca\xd4\xaa\x9a\x8b\x8e\x3c\x55\xc6\x46\xb5\xeb\xaf\x27\xb9\x8d\xe7\x32\x1f\x51\x3a\x4b\xdc\xbf\xbb\xf6\x31\x29\xc6\xc7\xca\x04\x4e\x3e\x39\x1c\xac\xe5\xc9\xfd\x9a\x0b\x68\x8b\xba\x24\xa3\x66\xa5\x7a\xeb\xc9\xdf\x37\x79\x2e\xf3\x71\x84\xb7\xbd\xff\xca\x23\xd8\xb3\x84\x72\xef\x61\xe0\x6d\xc6\x2c\xa2\x7c\x8e\x91\x68\x81\x6f\x7b\x11\x6e\x5e\x38\x34\x7c\xb3\x99\x7f\xdf\xe4\xb9\xcc\xc7\x2d\x3f\xb1\x22\x52\x7c\xb3\xdb\x12\x6a\x0a\xa2\x25\xd2\x4c\x31\x96\xc1\xf2\x85\xc1\x4c\xa2\x46\x55\xa4\xb1\x39\x61\x53\x58\x7f\x9f\x18\x6f\x3c\x97\xf9\x38\x20\xaf\xc2\x75\xbb\x1c\x19\xcf\xe0\x78\x5d\x45\x21\xf3\x19\x99\xc7\x92\x44\xb2\xd9\xc9\x4e\xc7\x06\xde\xc0\x6f\x24\x9a\x96\x81\xbf\x6f\xf2\x5c\xe6\xc3\xc2\x82\xc1\x41\xfb\x6a\xd6\x35\x9d\xe0\xc7\x04\x16\xcc\x2a\xf7\x18\xbb\xab\x4d\xca\x6d\x9f\x65\x7c\x14\x0b\x09\xf5\x26\x64\x98\xfa\xfb\x26\xcf\x65\x3e\x82\xc3\x0c\x82\x39\xf9\x66\x5d\x23\x8b\x79\x0a\x91\xfa\xb0\x8d\x70\x2f\x25\x06\xa9\x7c\xcb\xa6\x1c\x40\x7f\x81\xf6\x2b\xc1\x8a\xea\xef\x9b\x3c\x97\xf9\x20\xb5\x77\x2c\xba\xb5\xdd\x55\xfd\xd6\x34\x93\x84\x53\xf5\x66\x82\xef\x52\x6f\xf6\x56\x8d\x12\x17\xfe\x3b\xef\xa0\x93\x15\xba\xb6\xff\x66\x59\x06\x1a\x8a\xe7\xdf\x42\xe5\xcd\xa2\xcb\x65\x1c\xdd\xd6\xe3\xaf\x0a\xa6\x66\x3a\x17\x57\x49\x18\x44\x86\x7c\x91\x5d\x84\x9c\xb7\xe9\xae\x3f\x1c\x24\x82\x22\x82\x20\x0e\xf6\x16\x22\xbe\xdd\x15\xec\xa2\x7e\x53\xcd\xba\xc5\x80\xa9\x5e\x4d\xa4\xbf\xe0\x76\x47\x53\xfc\xe8\x6d\x9e\x03\xfc\x88\x24\x6d\x65\xee\x04\x84\x2c\x88\x83\x7f\x8c\x4a\x63\xb6\xe6\xf1\xa1\x16\x78\x62\x16\x22\xda\xf8\x3c\x7a\xdd\x7a\xac\x88\x25\xf8\xeb\x7d\x8f\xd5\xcb\x13\x53\xb1\x9c\x4d\xd0\x95\x9b\x20\x0e\x7e\x77\x7d\xe6\xdd\xf0\xb5\x8e\xf4\xf7\x69\x5b\xf7\xc9\x4f\x1d\xd6\x38\x88\x24\x46\x30\xd0\xc3\xd7\xde\x15\x39\x4b\x44\xd2\x36\xbb\x43\xdb\xba\x20\x0e\xd6\x09\xd9\x63\xb6\x85\x33\x3a\xad\x2f\xfd\x12\x2a\x91\xb9\x72\x79\xd0\xf0\x28\x86\x69\x64\x4c\xca\xa2\x1f\x4f\x65\xb6\x91\xd5\x27\x40\x55\x1d\x41\x1c\xec\xe5\xd6\xfa\xc7\x10\xdf\x83\x72\x52\x7c\xa0\xd9\x27\x92\xf6\x9e\xc8\xd8\xa5\x4e\x0d\xac\xb2\xe7\x7c\x6a\x9b\x42\x89\xd5\xe9\x58\xa7\x1d\x88\xcc\x07\x88\xfb\xa7\xce\x47\xe3\x85\x32\x1f\xa0\x5f\xdc\xf3\xce\x2a\xbd\x5d\xe4\x7c\x93\xb9\x55\x74\xd8\xf2\x6e\x5d\xce\xeb\xa1\x91\xdb\x39\x94\xc7\xca\xdd\x3b\x58\x03\x0c\x42\xea\x7d\xad\xb7\xa1\x0b\x47\x41\x1c\xac\x53\xf7\x02\x7f\x7e\x98\x4a\x1d\xc1\xc6\xdf\xe3\x60\xfe\xbc\x42\xf8\x93\xd3\x98\x40\x50\xb5\xf6\x16\xe1\xb1\xa5\xb2\x94\xbd\x93\xdc\x1c\x74\xbe\x01\xc0\xc1\x2c\xd0\x40\x69\xd3\xd6\x65\x9c\x75\x90\x45\x7e\xd2\x2e\x80\xba\x7a\x70\x88\x62\x55\x14\x98\x2f\xae\x39\x37\x44\x45\xcd\xf6\xc9\x7a\x14\x21\x0b\xe2\x60\xb2\x09\x3f\xc9\x2c\xa9\x42\x64\x6a\x50\xb6\x32\xe5\xe4\xa3\x9b\xad\xf8\x8c\x1f\x93\xbd\x62\x58\x70\x7e\x2f\xed\x29\x15\x73\x3f\x17\x2a\xb1\x0b\xe2\x60\x9d\x70\xab\x52\xd6\xa9\xae\x6c\xff\xab\xcb\x57\x59\xb6\x57\xee\x31\xd9\xb9\x76\xea\x75\x2f\xd0\xd7\xbe\x6e\xd1\x56\xd0\xa2\xa1\x3e\x83\xc6\x01\x88\x83\x2f\xf8\x8f\x71\x6a\xf4\x45\xb2\xb5\x9b\xa5\x37\x5f\xbe\x25\xf4\xd5\xde\x36\xd3\x4b\xdf\xa5\x77\xac\xa5\xa0\xe1\xb8\x63\x1a\x88\x09\xd5\x1b\x07\x71\x88\x6b\x11\x2f\x96\xf9\x00\xbd\x59\xcf\x5b\x6b\xb6\x64\x7d\x09\x69\x06\x53\x81\xcf\x11\x2f\xf3\xb6\x4d\x85\xef\x97\xa6\xee\xf5\x43\x33\x59\x91\x1b\x5d\xb5\x49\x93\xc4\xa8\x50\x41\x0e\x10\x07\xeb\xd5\xcb\x6e\xee\x37\x8e\x8e\xdd\x6f\x07\xa2\xc8\xa4\x56\x04\x17\xeb\x75\x75\xd7\x7d\x56\xe6\xbb\xe1\x62\x5d\xe7\xb3\xec\xac\xe8\x01\xc9\x82\x38\x98\x07\xb4\xde\xaf\x4a\x7c\x5e\x2b\x1b\x35\xbc\x9c\x69\xd5\x26\xf8\x41\x7f\x6c\xa4\x6e\x42\xe2\xa4\xcd\x95\x2e\xd2\x63\x6a\x48\x5e\xe2\x2e\x42\x16\xc4\xc1\x64\x91\x0b\x0a\x15\x07\x29\x8b\x9c\xec\xbd\x83\x65\x63\x4d\xae\xdf\x7f\x5e\xfc\x7c\xf2\x79\xcf\x70\x0c\x0a\xfe\x8f\x14\x95\x35\x3e\x15\x84\x2c\x88\x83\x75\x82\xbe\xaf\x01\x0b\x4e\xa9\x4e\x0e\x2f\x89\xe5\x54\xd5\x3d\xed\x48\x89\x98\x7e\x52\xfe\x45\xfa\xd8\xae\x56\x0e\xd4\x4e\x3d\x3c\xa8\x6c\x00\x88\x83\x59\x0b\xeb\xf0\xa4\xe6\xce\xa0\x2e\xb6\x4b\x2a\x52\x19\x66\xa9\xf4\x1b\xe1\x44\x24\x69\xc3\x33\x8a\xe9\xcb\x53\xe3\xb7\x88\x0c\xda\x89\x11\xd6\x02\x71\x08\x6b\x5d\x2c\xf3\x01\x9a\x41\x9d\xb7\x56\x4e\x41\x8b\xf2\xc6\x98\xb7\xb7\x04\xb6\xf3\x1e\xde\x15\x69\xe5\xb0\xb9\x2b\x38\xbf\xb9\xca\x3b\xf8\x8e\x92\xa6\xa7\x12\xa6\x5e\x21\x1e\x1f\xc4\xc1\x7a\x95\x94\x60\xe1\x84\xc8\xf8\x52\x2b\x9e\xd7\x49\x72\x7d\x4a\xab\xd9\x6a\xfb\xce\xa9\x53\xdc\x6d\x8d\x59\x0e\x59\xcd\x6a\xa9\x20\x75\x84\x2c\x88\x83\x79\xe0\xa7\x16\x72\xc8\xe7\xa3\x98\xb2\x82\x18\x91\xb8\xa5\xa3\x97\x5d\x26\x66\x8c\xe4\x01\xcb\x37\x53\x7d\x50\xd6\x34\xab\xe6\x64\xa1\x5a\x2f\x20\x0e\x7e\xb3\x35\x2d\x07\xdb\x84\x27\xb5\x5e\x58\x9c\x2c\xd5\x0b\xea\x94\x7e\xfd\xc9\x04\x11\x2c\x81\x0a\xdd\xba\xc9\xaf\xa9\xe6\x49\xbe\xc4\x50\x5c\x0f\xc0\xc1\x3a\x81\x77\x97\x58\xf9\x46\x31\x0b\xf2\xe5\x40\xa2\x2f\x21\xaf\xc5\x46\x1d\x0a\x87\x1a\x59\xa8\x79\xbe\xbf\x7c\xfd\x76\xf7\x0d\x4e\xf1\x38\x42\x16\xc4\xc1\xac\x55\x98\xe8\xff\x4c\x9b\xc2\x40\xc2\x47\xec\xce\x8a\xea\xba\xa5\x7a\xcc\x33\x6e\x6c\x33\x71\x16\x57\x12\xcb\x14\x27\xef\x07\xaf\xba\x10\xd6\x02\x71\x08\x6b\x5d\x2c\xf3\x01\x9a\x29\x9f\xb7\x56\xf2\xd8\xbb\xad\x3d\xba\x97\x5b\x53\x8b\xad\xc3\x3d\x9c\xa1\x5f\x5a\x1a\xe4\x48\x5e\x6b\x4e\x8b\x7d\x3b\x51\x7e\x94\xc3\xfd\x08\x9a\x0e\x80\x38\x58\xaf\xe2\xef\xee\xdf\xbc\x1e\xbf\xf1\x43\x83\x9c\xd5\xb5\xc7\x6b\x6f\x26\xbc\xf2\xf9\xae\x4d\xe4\xca\x23\x8e\xe9\x2a\x74\x14\x03\x24\xe8\xe8\x0c\x88\x83\x5f\xe8\x7b\x2b\x2d\xed\x8c\xeb\x87\x21\xdf\x22\xd9\x31\xe3\x0b\xfd\x47\x07\xb6\xda\x72\x02\x48\x28\xf1\xa9\xe3\x19\xf9\xfc\x4e\xcf\xa0\x33\x64\x20\x0e\x26\x7b\xdc\x51\x30\x28\x8e\x65\xc6\x65\xdf\x85\x1c\x28\xb5\xc7\x31\x26\xb0\xeb\x8e\xa2\x6d\xb6\xae\x2e\xbd\x75\xf5\x4b\x5e\xb6\x18\x94\x56\x04\x71\xf0\xb2\x01\x78\x55\xea\xce\x32\x4a\xc9\x54\xf4\x01\xda\xa8\x76\x41\x86\x94\x3f\xad\x48\x4a\x0c\x44\x7a\xdc\x6f\x4a\xdc\x7f\x65\xe6\xda\x0d\x9d\x98\x07\x70\x30\x6b\x75\x52\x68\x04\xdc\xc2\xa6\xe8\xf4\x16\x09\x73\xb2\xa7\x0f\x43\x4d\xff\xe2\xd4\x95\xf6\xc7\x6d\xd3\xb6\xa8\xf9\x2a\x7b\x3a\x7f\x2c\xc2\x5a\x20\x0e\x61\xad\x8b\x65\x3e\x40\x2b\xa2\xf3\xd6\x12\xa6\x6b\xb8\x6f\x29\xa7\xaf\x1a\xf7\x4b\xe8\xc6\xcf\x9f\x4c\xb2\x9f\x1f\x97\x85\x2a\x6d\xc6\xab\x51\xb9\x7f\xf3\xa5\x10\x09\x87\xaa\xf5\x81\x38\xf8\x25\x11\x57\xb0\x9a\xba\x96\xdf\x37\x6d\x4e\xdd\x37\x22\xe6\x65\xfd\xb4\xb9\x51\x7d\x3c\x6e\x8a\x4e\x3b\x2c\xd5\x4c\x36\xb6\xcd\x04\x15\xf8\x05\x71\xf0\x6a\x7d\x03\x86\x0d\x43\x59\xbf\x5a\x94\x1f\xdd\x4e\x88\xff\xb0\xa4\x9c\x22\xe7\xd6\x7a\x8d\xa5\x37\xa8\x57\x9e\x5d\x38\xeb\x46\x0a\x54\xf0\x06\xc4\xc1\x64\xb7\x57\xef\x6b\x86\x59\x25\x97\xdd\x1b\xc6\x7a\x97\x26\x59\x50\xbf\xe1\x8e\x43\x58\x9a\xff\x83\x90\x30\x44\x5e\x93\x21\x71\x0a\x2a\xf9\x0e\xe2\x60\x9d\xd0\xe4\x87\x9d\xd8\x98\x80\x26\xbd\xfd\x75\x3d\x8e\xd4\x02\x99\x80\xe1\xa5\xd5\x1a\xb3\xd5\x8e\x2a\x0f\xaa\xe2\xae\x2f\x6f\x18\x74\xd9\x19\x88\x83\x27\xd5\x9e\x5a\xeb\xea\xab\xd3\x61\x36\x9b\xd1\x11\x54\x0f\x4b\xa5\xdf\x5c\x44\x21\xc7\x2c\x2b\x0c\xf6\x50\x34\x1b\x90\xe2\xa8\x4c\x83\x92\x6a\x00\x0e\x61\xad\x8b\x65\x3e\x40\x2b\xdf\xff\x51\x44\xdd\xdd\xe6\xde\x61\xe3\xf7\x63\x26\x6e\x99\xaf\xf5\x2e\x8b\x63\xa5\x95\x33\x75\x14\x83\xc9\x65\xe8\x85\x64\x51\x79\x77\xb4\xa0\xba\x7a\x20\x0e\xd6\xab\x9f\x25\xf2\x30\x65\xee\xfa\x7c\x48\x2e\x9e\xce\x72\x3f\x73\x63\x19\x55\x8c\x49\xbb\x47\x59\xfa\x5c\x77\xec\xdb\xd4\x9c\x7d\x38\xb4\x03\x0e\xe2\xe0\x1f\xd8\x78\x8f\x90\x07\x55\xca\xef\xc4\x57\xcf\x0c\x44\x3b\xae\x3e\xf4\xcb\x98\xd2\xd6\xcf\x56\xcb\xe4\x15\x48\x71\xfb\xa5\x18\xbe\x0a\x7d\x60\x03\x70\xf0\x4a\xd7\xd4\x83\xc9\x91\x97\x71\xc5\x3a\x12\x85\xbf\xd5\x6f\x13\xaa\xda\xc6\x07\xf5\xbc\x7f\x7e\x5d\xe4\x56\xf2\xdb\x23\xec\x63\x0e\x68\x66\x08\xe2\x60\x9d\x50\x11\xec\x90\xeb\x96\xab\x8a\xd5\x37\x49\x57\x49\xd2\xa2\xfe\x9d\x1e\xf7\x21\xb6\xed\xd6\x3e\x87\x27\x1b\xc3\xa5\xea\x2b\x58\x50\xe8\x01\xc4\xc1\xac\xb5\xb1\x70\x39\x0d\x85\xb6\x31\x44\xd9\xf4\x4d\xa6\xac\x7c\xcf\x0f\xbb\xea\xdf\x75\xb2\x2e\x75\x59\x47\x2b\x8d\x0e\x72\x06\xb8\xdf\x10\xd6\x02\x71\x08\x6b\x5d\x2c\xf3\x01\xda\xe1\x38\x6f\x2d\x2a\x99\x86\x42\x8c\xab\xa1\xeb\x5c\x09\x01\x18\xbc\xb3\x8d\x3e\xe3\xa7\x24\xd4\x65\x41\xfd\x3e\x24\xa4\x82\x6e\x61\xef\xa2\x25\x10\x8f\x0f\xe2\x60\xbd\x5a\xe4\x45\x5b\x97\x17\xac\xdd\x9c\x7d\x16\x86\x74\xbc\x60\x5d\x7b\xe6\x9c\xf6\xcb\xe3\x55\xc9\xfc\xed\x37\xf6\x13\x6b\x63\xc4\x5f\x10\xb2\x20\x0e\xe6\x81\x97\x13\xc8\xe1\x79\xc8\x4f\x86\xf0\xb3\xc4\x1b\x74\x92\x9e\xbe\xb4\x7e\xad\xf6\xc2\xe2\xf2\xd8\x46\x65\x36\x09\x03\xcb\x09\x1a\x74\x09\x0b\x88\x83\xc9\xca\x49\x37\x32\x6f\x30\x7e\xb0\xb0\x7d\xf5\xf6\x70\xde\xd3\xd4\x44\x4f\xd3\x56\xb0\x86\xe0\x83\x47\x8a\x6a\x58\x31\xad\xe5\xaa\x3f\x42\x16\xc4\xc1\x4b\x36\xa2\x84\xb2\x27\x8b\x4c\x74\x38\xd1\x51\xdc\x37\x96\xe9\x0c\x4e\x92\xc4\x7a\x28\x5d\xd5\xa1\xe5\x97\x29\xad\xc9\x1c\x60\x30\x80\x90\x05\x71\x30\x6b\xb5\xb7\xe9\xd2\xdd\x27\x8a\xf9\xba\x5e\xad\x94\x50\x60\x87\xc9\x58\xaa\x4b\x65\xc3\x65\x73\xf4\x5a\x48\x35\x30\x35\x2e\x2f\x8b\x06\x61\x2d\x10\x87\xb0\xd6\x05\x33\x1f\xa0\x3d\xec\x7f\x32\x1f\x8d\xe7\x32\x1f\x34\xcf\x6f\x74\x4b\x1f\x3d\xd7\x95\x10\x66\x51\x88\xdc\xb3\xc8\x4f\xb1\xd5\x8b\x7c\x2a\x5a\x67\xfd\xa9\x5f\xac\xe9\x09\x4b\x51\xec\xdf\xef\xf4\x9d\xcb\x7c\xb4\x26\x18\x3f\xaa\xff\x89\x1b\x44\xfe\xca\xc6\x0b\x93\xfe\xa9\x5a\x37\x7a\xad\xe8\xce\x1c\x8f\x8f\xb6\xa6\xe3\x1f\xe6\x1f\xbd\xa2\x7f\xdf\xe4\xb9\xcc\x87\x22\x36\x96\xc4\xc1\x43\x24\x55\xda\x4f\xc5\x3c\x0c\x1b\xec\x21\x81\x37\x24\xcb\xd3\x33\x82\x77\x99\x43\x6f\xd5\x38\x1a\x13\x5a\xfd\x37\x9b\x8b\xa0\xbe\x3c\x3f\xc0\x2d\x19\xec\x1c\x73\xa9\x6e\xa3\x39\x93\x74\x59\x8c\x1f\xb0\x46\x13\xc6\x5a\xbf\xde\x78\x65\x70\x83\xf4\x6a\x09\x7a\xc7\x3b\x0b\x2c\x28\xd3\x06\xe0\x60\xde\x0e\x73\x6f\x32\xe2\x70\xfd\x3c\x92\xb0\x9a\x41\x34\x31\xed\xa7\x50\x28\x75\x7b\xd0\x23\xcf\x3b\xef\x8e\xc0\x4e\x17\xf5\xcd\x18\x34\x84\x2c\x88\x83\x8d\x44\xf1\xbb\x1d\x83\x14\x2b\x5f\xf5\x1a\x35\x8d\x9e\xe6\xd9\xa4\xd5\x1f\x2a\xde\xdd\x6f\xf8\x45\x5c\xd2\x85\xc1\xc3\xf2\xdb\xdb\x88\x03\x21\x0b\xe2\x60\xb2\x8b\xa1\x6b\xba\xeb\xa5\x71\x37\x30\x52\xb6\x42\x45\x8e\x8e\xd8\x9b\xf0\x15\x37\x90\x9b\x6d\xdf\xc4\x11\x7a\x28\x29\x8e\x65\x42\xb7\x90\x80\x38\x58\x27\xac\xb2\x53\x6e\xfc\xcc\x25\x5c\x1e\xb0\x62\x71\x58\x1d\xe3\x1e\xef\xb3\xe3\x99\xb8\x77\xcb\x46\x9d\x27\x71\x8f\x39\x1c\x65\x1e\x7a\x81\x82\x38\xd8\x00\x97\x0f\xab\x39\x29\x9e\xb8\x55\xce\xb4\x8c\xf7\x21\xfb\x17\xea\xfd\x4a\x49\x49\x54\x3c\xd9\x75\xe3\x63\xaa\x34\xfa\x05\xa2\x80\x7a\xc4\x00\x07\x71\x88\x01\x7e\xb1\xcc\x07\x68\xcc\x9c\xb7\x56\xcc\x1c\x32\x6e\xb5\x7b\x6f\xcb\xbc\x5b\x9f\x63\xb0\x65\x9e\x10\xaf\x02\x1a\x26\x7f\xce\x9f\x33\xfb\xca\x07\xdf\x36\x52\x24\xb0\x11\x8f\x0f\xe2\x60\xbd\x9a\xf0\x0b\xe3\xb6\x1c\x5b\x1c\xe9\x4b\xf7\x28\x99\xd3\xc2\xfe\x32\x0b\xdf\x59\xcc\xb3\x8f\x2f\x88\xea\x1b\xfb\x0d\x9e\x8d\xb3\xfe\xdf\x7e\x1d\x80\x83\x79\x00\xb3\x3e\x5b\x90\x4d\xdc\xc8\xf1\xc5\xd9\x0e\x2b\xa7\x41\xfa\xee\x94\x27\xb1\xa1\xbb\xcc\x93\xc7\x25\x02\x47\x51\xf3\x71\xeb\xd0\x06\x33\x88\x83\x1f\xfb\xd9\x0f\x28\x18\x6b\xff\xa0\xaa\xba\x67\x61\xb8\x5f\x6e\xb8\xf3\x92\x84\xa1\xf7\x40\x88\x29\xb8\xe0\x50\x3b\xf9\xd2\xb7\x02\x59\xe8\xd8\x0f\x80\x83\x75\xc2\xdd\x39\xbf\x50\x7c\x9f\x88\x4b\x5f\x9e\x23\x0d\x08\x3e\x89\x5a\x9c\x38\x71\xfc\x85\xc3\xfb\x0d\x15\x27\x43\x7e\x22\x2c\x9c\x7d\x1b\x9a\x9f\x03\x38\x98\xb5\xdc\xb5\x47\x04\xd4\x0a\x0c\x47\xb9\xdc\xaf\x4c\xcb\x3f\xaa\xe9\xc8\x75\xef\x33\x24\x14\xda\x8a\x98\x2d\xd2\x45\xa6\x88\x2c\x1c\x41\x58\x0b\xc4\x21\xac\x75\xb1\xcc\x07\xe8\xb7\xf1\xbc\xb5\x34\xb5\x8e\x63\x5d\x6e\x2e\xf7\x1f\x7c\x88\xc8\xd8\x32\x37\xcd\x7f\x90\xad\xcd\xfe\x52\x83\x56\x79\xe4\x94\xbb\xc3\xd0\x46\x0d\x0a\x69\x81\x38\x58\xaf\xba\x88\x12\xd6\xfc\x39\xf6\x2f\x7f\xd6\x60\xfe\x74\x8a\xfa\xe0\xdd\xef\xaf\x51\xd1\xa9\x8f\x27\xf4\x48\xef\x4e\x38\xa6\x1d\xdb\x41\xc5\xc4\x41\x1c\xcc\x03\xbb\x91\xef\x59\x5d\xd3\x3e\x79\xae\x78\x06\x64\x9c\x15\x6e\xde\x59\xc1\xf8\x3a\xd3\x9c\xd9\x68\xc2\x66\x4d\x63\xbf\x8e\x74\x00\xdd\x6a\x0a\xe2\x60\xb2\x91\x74\x4a\xd1\xb6\x39\x6d\x97\x58\x6a\xc9\x2c\x95\xd5\x02\xbe\x84\xfb\x12\x8c\x46\x7c\xa2\xfe\xaa\x52\x63\x20\x2b\xa9\x61\x61\x0c\x65\x46\x01\x1c\xac\x13\x92\x6e\x4e\xd4\x91\x6e\x7c\x4b\x50\xf9\x78\x98\xf9\x98\x9f\x3e\x66\xaf\x21\xca\xa7\x2b\x2c\xca\x96\xd4\xb7\xdc\x92\x68\x27\xc3\x07\x21\x0b\xe2\x60\xd6\xba\xe2\xd8\x51\xd0\x6b\x77\x0f\xc9\x3f\xa8\xee\x57\xf8\xe6\xd5\x5a\x89\x74\x55\x17\x59\xf6\x48\x9f\x7d\xcd\x91\xd3\xca\x7a\x95\x1d\x84\xb5\x40\x1c\xc2\x5a\x17\xcb\x7c\x80\xbe\xf2\x9f\xb7\x96\x9d\x7d\x62\x39\xd2\xd9\x98\x7a\xb2\x42\x4e\x37\xb5\xc7\xc4\x0b\xbc\xd1\xb4\xab\xe3\x3d\x0e\x12\x62\x07\xbc\x26\xbb\xc4\xe3\x1f\x10\x8f\x0f\xe2\x60\xbd\x2a\x92\x87\x8e\x49\x13\xc2\x13\xe0\x8c\x89\x87\xc5\xb9\xe4\xc9\x87\xa1\xd9\x52\x4c\x5d\x50\x51\xd0\x31\xdb\xd0\x8a\xa1\x10\x01\xbd\x62\x40\x1c\xcc\x03\xbd\x54\xdb\x94\x46\x8b\x97\x89\x7d\xbf\x5f\xb9\xf5\x84\xf0\xbe\x7b\x13\x6b\x1e\xba\x96\x31\x09\x5e\xbc\xe3\x4d\x89\x2b\x62\x9c\xd0\xc1\x6d\x10\x07\x9f\xf1\x12\x7e\xb0\x79\xaa\xf4\x51\xef\x92\x71\xaf\xbf\x4b\x75\x13\x63\x68\xd4\xd0\x62\xe3\x75\x54\x97\x6a\x85\x1d\x51\xbf\xe5\x63\x28\x00\x07\xe2\x60\x9d\x60\xa2\xfb\x3d\xe6\xd7\x86\x85\x31\xd1\x52\x93\x0f\xa3\x30\xca\xc6\xa7\xf6\x7b\x82\x55\x32\x7d\x1f\x84\x4d\x52\x4b\x9f\x24\xa6\x69\x41\x99\x8f\xc8\x9d\xd3\xe5\x92\xfb\x0b\x7c\xe3\x79\x62\xf2\x19\xc4\x6b\xd9\xc3\x0b\xce\x82\x02\xbc\x1b\x6d\x82\x0e\x4d\xd8\x6f\x32\x2a\x52\xfe\x9d\xf9\x90\x96\x9a\x36\xca\x72\xc7\x6c\xf2\x5d\x59\x63\xeb\x88\x56\xcd\xa2\xf3\x73\xb8\x37\x5f\x31\x74\x5b\x82\x15\x73\xa1\x24\x4e\x46\xf7\x5f\x68\xa0\xe7\x6b\xa5\x28\x81\x3d\x62\x54\x02\x0a\x4e\x4e\x03\x6d\x67\x51\xa1\xbe\x77\x6d\xc2\xc6\x8e\x2a\xda\xfa\x5f\xb3\xbe\xb0\x05\xc1\x32\x1f\x20\xe5\xf3\x99\x0f\x26\xbb\xf1\xdf\xfd\x76\xbe\xed\x3e\xd5\xad\x8c\xc6\x3e\x02\x37\x57\x3f\x27\x84\x0b\x8c\xe1\x68\x25\x62\x97\x67\xa3\x92\x4f\x6d\xfe\x3b\x77\x3c\x8b\xee\xb5\xc2\xed\xca\x20\xf1\xed\x11\x15\x45\x83\xac\x2f\xad\xc5\x03\x66\x67\xfb\x67\xbe\x34\x1b\x0c\xde\xb5\x8f\xd2\x8d\xa0\xcc\x07\x48\xf3\x9f\xcc\x07\x92\x34\x6c\xc6\x79\x4d\xfc\xb0\xcf\xe7\x19\xaf\x0e\x71\x3f\xff\xa1\xb7\xcc\x52\xa5\xb9\x78\xfe\x93\xf8\xa2\x2c\x75\x5a\x94\x0a\x05\x2f\xe5\x78\xfd\xbf\x9e\xe4\x22\x71\xc2\x27\xb9\x84\x1b\xda\xd8\x34\x23\xfb\x1e\xb3\xd4\x2c\x2e\x4f\xa4\x42\x14\x66\xdb\x16\x7c\xfa\xef\xbd\x33\x8d\x78\x5d\x2a\x87\xc2\xfa\x58\xef\xef\x9b\x14\x86\x37\x69\xa7\x20\xb6\xbc\xef\xbf\x89\xd1\x4b\x85\x36\x65\xe4\x7d\xf9\x5d\xad\x84\xc0\xbc\xe8\xb8\xd6\x43\x3b\xa9\x06\x1c\x91\x37\xd6\xbf\xff\xbe\x49\x5d\x78\x93\x3c\xb5\xbb\x44\x36\x8d\xea\xd1\x5e\x5d\xf2\xb1\x25\xb7\x9e\x4e\x8e\xb6\xff\x36\x7a\x79\x96\x7c\x84\xff\xee\x37\xcb\x31\x93\x8c\xda\xdf\x37\xe9\x02\x6f\x12\xa9\xc5\x61\xff\xf7\x96\x67\x85\xea\x5d\x01\x34\xcb\xba\x8a\x23\xc9\xa3\x47\x19\x89\xad\x09\xd4\x77\x83\x70\xea\xe9\xa7\x5b\xc7\xfe\xbe\xc9\xd8\x73\xff\xcb\x4f\x89\xd2\x97\xb8\x72\x9f\x04\x8e\xb9\xc5\xd7\xa9\xf0\x89\xf9\x1f\x7d\x99\x41\x0e\x7a\x37\x63\x69\xcf\x9a\x25\x31\xb6\x90\xf6\xf7\x4d\xa6\xc2\x9b\xec\xe7\x88\xda\x1f\x77\x0f\x0d\x1a\xf7\x29\x8b\xc7\x25\x5d\x17\x56\x40\xb5\xb3\xb5\x21\xf7\xf6\x59\x67\x63\x4d\x3a\x11\x9c\x72\xff\xfb\x26\x6b\xe0\x4d\xd2\x99\xf2\xbe\x63\xce\x34\xb8\xa4\xe8\xb2\xce\xb3\x47\x63\xd7\x53\xbd\xec\xaf\xd5\xde\x66\xc6\x9d\x55\x67\xed\xbb\xfd\x49\xa7\xef\xbf\x59\x96\x81\x86\xe2\xff\x38\x6b\xc3\xc4\x2c\xa2\xdf\xa0\x78\x35\xb6\xaa\xcc\x95\x7c\x4f\x65\xe0\xa9\x92\x92\xa6\xe1\x35\xb7\xd1\x90\xdd\xe7\xba\x2f\x34\xec\xbf\x42\x5f\x8d\x00\x1c\xec\x07\xb8\xae\x6f\xf6\xf4\x75\xba\x10\xc5\xd5\x37\x05\x34\x13\x96\xef\xcf\x5c\x57\xe2\x24\x36\x23\x49\xca\x96\xb4\xfb\x46\x7a\x68\x5f\x40\xaf\x0b\x10\x07\x7b\x5d\x38\xf2\x31\xaa\xdc\xfd\x73\x93\xaa\xe7\x19\x9a\x27\x8f\xa1\x59\xdc\x80\x90\x8a\x55\xb1\xdd\xdb\x51\xeb\xc9\x31\xd5\x57\xfc\x5f\xa1\xcf\x26\x20\x0e\x76\x15\x58\x3d\xb3\xa5\x30\xaa\x5d\x4f\xc1\x01\x49\x4f\xbc\xf6\x21\xe6\x7d\xba\xc7\x96\x6a\xb1\x8d\x89\xee\x5e\xfc\xea\xdb\x9a\xe1\x61\x38\x08\x59\x10\xe7\x2f\x86\xfc\x6f\x59\x12\x0d\x9f\xec\x48\x0f\xde\xef\x49\xc7\xe1\x8c\xc5\x07\x87\x53\x8c\x7e\x31\xcc\xbf\x58\xd0\xd8\x87\x35\x6c\x04\x72\xfe\xb4\xd8\x20\x64\x41\x1c\xec\x5f\x46\x2e\xd1\x30\x8c\x4f\x9f\x9a\x21\x14\x2a\xff\xc7\x72\x20\xe4\x6d\x74\x22\x61\x71\xb6\xc9\x62\xa7\x8f\x13\x6d\xcd\xec\x78\xd6\x47\x44\xe6\x03\xc4\xfd\x53\xe7\xe3\xff\xfd\x9e\x5f\xa0\x8e\x19\xe0\x17\xf7\xbc\xb3\x8a\xbf\xfe\xbe\x56\x27\x64\xea\x8b\xf6\x54\x4e\xdf\x92\x07\x0b\x85\xab\xff\x69\xf2\xe9\xa2\x61\xe1\x75\xea\xcd\x3e\x03\xbd\xeb\xd0\x64\x14\xc4\xc1\x9c\xd5\x6b\xa3\xdd\x9c\x3b\xd1\x66\x16\x7d\x82\x74\x52\x85\x65\x4d\xdc\xef\xa0\x86\x71\x3d\xff\x34\xa9\xc4\x02\x69\x74\x16\x47\x9e\x19\x9a\x88\x00\x38\x78\x61\x70\xf1\x30\x72\x63\x2a\x16\xfc\x8c\x91\xa7\xd1\x61\x2c\xcd\x5f\x71\xce\x86\xd2\x4a\xf6\x29\x58\x1e\xaf\x57\xa9\x6f\x7a\xb2\x40\x05\xc7\x40\x1c\xcc\x59\x6b\xea\xa7\x8d\x02\xe5\x14\xbc\xab\xc1\x0a\x14\xe5\xc8\x4c\x58\x4e\x0d\x9a\x77\x0c\xba\x64\xcb\x9d\xbe\x7b\xdf\x6b\x9c\x3c\x81\x3e\x73\x82\x38\x98\xb3\x6c\x3a\xbf\x1f\x65\x3b\xd7\xa7\xb4\x96\x93\x0d\x36\x08\x7d\x36\xb4\x6a\xb9\x9d\xf2\xe2\x39\xf9\x53\xaa\x87\xeb\x19\xf5\xfe\xdc\xd0\xd5\x49\x20\x0e\xf6\x2f\x13\x2f\x68\xb6\xba\x55\xf1\xa5\x98\x91\xc2\x52\x2a\xeb\x54\x52\x38\x02\x3f\x26\x35\x86\xe1\x69\x9b\x72\xd9\x5b\x33\x65\xd4\x7e\xe8\x90\x07\x88\x43\x5c\x8b\xc8\x79\xa1\xa9\x33\xe8\xcd\x7a\xde\x5a\xd7\xf4\xf7\x3d\x73\x8b\x52\xf1\xde\x1b\xcf\x38\x09\x5c\x79\xff\x40\x32\x1b\x57\xbe\xf2\x2e\x1e\xc5\xab\x02\xaf\x6a\x6d\xe5\x0d\x28\xf2\x02\xe2\xe0\x67\x4f\x4f\x22\x3d\x33\x2f\xe7\xbc\x65\x3f\x0c\xd0\x1c\x89\x08\x3c\x09\xf7\x5e\xfd\xd8\xc2\xe7\xca\x34\x99\xa9\xfa\x98\x50\x6d\x4f\x15\x8a\x7e\x01\x38\x98\xb5\x6a\x45\xc7\xd4\x23\xbb\xe2\x1e\xf1\xbb\xe4\xe1\xba\xf5\xe0\xbe\x5b\xb9\x17\x85\xd9\xf7\x99\x9c\xfd\x37\x45\x4a\xc2\xd0\x28\x1d\x74\x6b\x3b\x88\x83\x59\xeb\xcb\x31\x95\x07\xc5\xeb\x17\x4a\xc8\x92\xb8\xd7\xd1\xad\x78\x03\x66\x16\x95\x70\xbd\x68\x95\x44\x87\xbb\xe7\xda\xdb\x0b\x43\xd4\x10\xb2\x20\x0e\x66\xad\xb7\xe6\x6e\x21\x13\x21\xb9\x58\xf8\xcd\x97\x7e\x28\x88\x57\x9a\xd8\x07\x6d\x95\xf3\xaf\x46\xd8\xf9\xd3\xf1\x1e\x2e\x87\xef\x43\x27\x65\x41\x1c\xec\x5f\xa6\xbc\xb8\xb0\x98\x61\x93\xc1\x10\xfa\xec\x75\xcf\x0d\xd3\xe1\x13\x81\xaa\xcb\x48\x13\x9e\xce\xc2\x7d\x01\x67\x86\xec\xae\xd8\x32\x08\x6b\x81\x38\x84\xb5\x84\x2f\x64\x2d\xd0\x0c\xea\x7f\x5c\x41\xed\xe5\x67\xf3\x99\x21\xc5\x72\x30\x56\x1b\x2d\xce\xf4\x37\x27\x7b\x51\xf1\xa8\x33\xd6\xdb\x05\x89\x04\x7b\x79\xb4\x0a\x41\xe8\xc3\x21\x88\x83\x59\xeb\x51\xc9\xad\xbc\x07\xf9\x0d\x57\xb8\x9b\x68\x4b\x2c\xf8\xd5\x72\xf3\x6c\xe3\xbb\x76\x6d\x3c\xbe\xdd\x61\x13\x2a\xdd\x13\xab\x86\xaa\xa7\x80\x38\x98\xb5\x72\xcb\x63\xb8\x0d\xde\x3b\xb9\xe2\xd7\x4e\x6b\x86\x9f\x12\x9f\x96\x7f\xf3\x60\x4e\xd0\x9c\x1a\x22\x7e\x72\xf0\xfa\xe0\x4d\x6e\x27\x42\x16\xc4\xc1\xac\x35\xca\xf5\xa1\x60\xae\x58\xa9\x2e\x64\xb1\x90\xeb\x13\x3d\x96\x45\xb6\xb7\xcb\xf0\x98\x2d\xb7\x93\xc3\x67\x39\x41\x9d\x49\x2a\x69\x84\x2c\x88\x83\x59\xeb\x75\x7b\x58\x1b\xd7\xed\x82\xc4\xed\xa4\xa2\x37\x62\xea\xca\xce\x28\x3d\x2a\xe9\x81\x8c\x43\xd1\x0d\x8f\xb1\x5b\x35\x44\x8f\x2c\xa1\x80\x3f\x80\x83\x4f\x61\x4c\x24\x37\xf0\xda\xbc\x1e\xd7\xf2\xf8\x48\x26\x6f\x1a\x89\xe8\x3c\x47\xd3\x34\x44\x2a\xc8\xcc\xf2\x3f\xfb\x76\x20\xfb\x32\x1e\x61\x2d\x10\x87\xb0\x96\xee\x85\xac\x05\x9a\x29\x9f\xb7\xd6\xf3\x1f\xe9\x8e\x39\x59\x73\x16\xf8\xf5\x49\x9a\x47\xc1\xb1\x8e\x9d\x3d\x85\x5f\x57\x8a\xcd\x5d\xe9\xfd\x7b\xda\x27\xcf\x02\xf9\x10\x8f\x0f\xe2\x60\xd6\x7a\x18\xdc\x90\x47\xd7\x4c\x73\x33\x3c\x65\xc7\x65\xbd\x76\x93\x7a\x8a\xb8\xe4\xc4\xf5\xe3\x2a\xad\xbc\x60\x9f\xcf\xce\x8f\x7b\x50\xbd\x50\x10\x07\xb3\x56\xe6\x28\x56\x4f\xd7\x35\xdb\xa8\x1f\xfa\x13\xe5\x99\x31\xc3\xaf\x4c\x79\xb9\x7e\x90\x3e\xbe\x43\xff\xa7\x4e\xf3\x41\xd1\xd3\x32\xa8\xd2\x35\x88\x83\x59\xeb\x13\x5f\xc2\xd4\x03\x91\x7c\x6e\x01\x53\x8e\x2a\xb7\x38\x87\x4a\xfd\xc0\x9f\x6c\xe6\x91\x85\x65\x85\x84\x2c\x74\xd5\x6c\x75\xd0\xd5\xb3\x20\x0e\x66\xad\x17\xfb\xf5\xc4\xd7\xb1\xc5\x6d\xd0\x5a\x9c\x42\x87\x27\xe6\xea\x3d\xf7\x3f\xb1\x98\x69\x2b\x52\x6a\xfc\x98\x0e\x16\x26\x6f\x82\x3e\xca\x82\x38\xd8\xbf\x6c\x60\xa1\x60\x69\x10\x77\x3c\x1f\xc9\x08\x87\x17\xef\x6c\x2d\x30\xa1\x62\x49\xfc\x7e\xf5\x6e\xee\x0e\x85\xe1\xb8\x3d\xea\xad\x3d\x84\xb5\x40\x1c\xc2\x5a\x2e\x17\xab\x19\x0b\x58\x11\x9d\xb7\xd6\x71\xc6\x95\x91\x49\xf3\x34\xc5\xa4\x36\xd1\xdd\x11\x6d\x4c\x75\x99\x84\x42\x6f\xc6\xdc\xe1\x1d\xd7\xc9\x6b\xce\x8f\x28\x53\xb7\xa0\x24\x0d\x80\x83\x59\xeb\xad\x6d\x7f\x53\x43\x4c\x86\xf9\xec\x3b\xde\x96\x74\x32\x0f\xe9\x3f\xc5\x29\x77\xa2\x9e\xef\xce\x58\xbb\x3e\x90\x68\x9c\xfa\xfd\x08\x7a\x17\x00\x38\x98\xb5\xb0\x2d\x15\xc3\xd9\xdd\xda\xc8\x0c\xe3\x52\x04\x9e\xf6\x3b\xd0\xa1\x2d\xbd\xf5\xbd\x26\xd3\x66\xfe\xe7\x66\x9b\xb5\x8a\x39\x5b\x34\x42\x16\xc4\xc1\xac\x55\x47\x1b\x70\x86\x34\x94\x79\x13\x73\x9b\x5e\xf2\xe9\x25\x2c\xde\x4f\xcb\x55\x57\x7e\x61\xdf\x7e\x78\xfa\x0d\x4b\x8b\x97\x21\x03\xca\x99\x83\x38\x98\xb5\x52\x42\x23\x2d\x2b\xca\x13\x42\x88\x16\x73\x8e\xe6\x5c\x2d\xab\xbe\xa7\x30\xaf\xcf\x4b\x92\xf0\xf1\x2b\x06\xbc\x6c\xf6\x34\x08\x45\xc8\x82\x38\xd8\xbf\x4c\x63\x6e\xf8\xf5\x83\x7e\x2a\xa4\x9b\x16\xb4\x64\x67\xe6\x2c\x6b\x15\xfe\x16\x64\xa4\x03\xcc\xb7\x2e\x77\x24\x4c\x64\x5a\x29\x40\x49\x35\x10\x87\xb0\x56\xec\x85\xac\x05\x5a\xf9\x9e\xb7\x56\xf4\x9b\xf1\x94\xbc\xba\xfb\xc9\xca\x36\x75\xa8\x48\xcf\xbd\xb3\xb9\xa4\x97\x1d\x8e\xbd\xad\xa8\x24\x79\x7e\x21\x91\xcb\xb5\x41\x75\x08\x40\x1c\xfc\xc3\xbc\x52\xe1\x4b\x4e\x33\x13\xb4\x7d\x81\xbc\x8c\x5b\xc7\x6d\x09\x1b\x49\x46\x6f\x04\x8f\x16\x5a\x04\x7e\xa4\xd9\xcc\x84\xfa\x40\xb9\x1f\x10\x07\xb3\xd6\x4a\xb5\x1e\xb9\x8a\xeb\xf2\xe6\xa8\x6d\x97\xcd\x4f\x45\x3a\xe6\xd6\x53\xc5\x13\xfe\x9c\x50\xba\x46\x2d\xc1\xbb\xad\xd3\x28\x8d\x08\x59\x10\x07\xb3\x56\xec\xe1\x53\x17\xfe\x92\x3f\x8c\xcb\xa2\x1e\xed\xc3\xb4\xd1\xda\x63\xc4\xa3\xf7\x39\x4a\x3a\xb5\x5a\xea\xa5\xd3\x1d\xdf\xbf\x81\xee\xe3\x07\x71\x30\x6b\xe1\x57\x49\xc7\x9b\x63\xb1\x72\xd3\x2b\x19\x2a\x25\x6f\x15\x72\x63\xb9\x14\xde\xbc\x13\xb2\xd0\xea\xf1\x80\x49\xef\x6b\xe3\x73\x68\x1e\x0b\xe2\x60\xff\xb2\x3f\x8e\xa4\x0e\xf9\x61\x8a\xfa\xf9\xe1\x09\x4d\x74\x1f\x74\x8c\xff\xb0\x4e\x29\xbf\xaf\x53\x72\x18\x58\x0e\xda\xd2\x5d\x3f\x96\x46\x58\x0b\xc4\x21\xac\x95\x7a\x21\x6b\x81\x76\x38\xce\x5b\x4b\x7e\xf7\xec\xee\x44\x78\xce\xac\xc4\xab\xb9\xb8\xf5\x7e\xb9\x17\xa9\xaf\x44\x1a\x54\xfb\x1e\xec\x14\xd4\xa1\xcd\xb0\x1d\x2b\xe5\x43\x87\xaa\x01\x1c\xcc\x5a\xe3\xee\x8b\xb4\x4a\x2f\xb7\x4d\x85\xba\xd9\xa4\xca\x70\x12\x32\x8e\x3f\x39\x06\x69\xbf\x78\x15\xae\x83\x41\x58\x86\x5c\x68\x6f\x8b\x90\x05\x71\x30\x6b\xe9\xd4\x69\x71\x0b\xb5\xa3\x2b\x0e\x0f\xf6\xfb\xe3\xae\x79\xba\xf1\x49\x3f\x68\x23\xa2\x7b\x18\x40\xd6\xd7\xa1\x88\x1c\x29\x02\x9d\x7a\x04\x71\x30\x6b\x49\x12\x9e\xe8\x4d\x7f\x73\xdb\xbb\x7e\xb2\xa8\xa1\x93\x58\x46\x96\x47\x86\xd5\x77\xcd\x99\xea\x99\xcd\xd6\xcb\xbd\x29\xaa\x58\x67\x84\x2c\x88\x83\x59\x4b\xd1\x8d\x80\x78\x45\xd4\x3d\x13\xb7\xf0\xb4\xd6\x38\xaf\x94\x54\x31\x4a\x32\xf6\xf7\xf3\x05\x21\xf7\xee\xe7\xd6\xac\x61\xa7\xb3\x08\x59\x10\x07\xfb\x97\x51\x64\x92\xb4\x79\x63\x39\x6b\x71\x9a\x73\xba\x29\xa0\xf1\x54\x6f\xb2\x78\x92\x5a\x26\x1b\x06\xb8\xbd\xb0\x30\x66\xd1\xf9\xd1\x8e\xb0\x16\x88\x43\x58\xab\xe6\x62\x99\x0f\xd0\x1e\xf6\x3f\x99\x0f\xa4\x11\xf8\xb6\x9b\x77\xe1\xa5\x1a\xb5\x55\xe1\x5c\xc2\xcb\xbf\x78\xd4\x05\x55\x55\x16\x03\x99\x51\xf6\x33\x1f\xb4\x65\xcb\xa2\x55\x89\xde\xfd\xdc\xfb\xf7\x3b\x7d\xdb\xf0\x26\x1d\x67\xbd\x46\xdd\xd6\x93\xa5\x7b\x0b\x3f\xf0\xcb\x5c\x0d\xa5\xb6\x10\x5a\x35\x35\x1f\xda\xc9\xf2\x13\x95\xce\x36\x98\x46\x7e\xff\xf7\x4d\x9e\xc1\x9b\x6c\xa9\x9f\x38\xb8\xed\xe4\xc8\x4f\x39\xbe\xac\xe8\xd8\x3b\x70\x49\x0f\x5d\x92\x71\x2a\x00\x6f\x37\xd9\x53\x1a\x89\xdf\xea\xe5\xdf\xde\x55\xfd\xe0\x62\x7d\x79\x7e\x80\x7f\xf3\x30\xdd\x7d\x90\xfd\x98\xf0\xe8\x40\xae\x3e\x43\xfe\x52\x17\xb1\xae\xa1\x7d\x12\x47\xa5\xc8\x2e\xc1\x60\x02\x7f\x50\x30\x54\x82\x0e\xc4\xc1\x3f\x1c\xde\xbb\x99\xb6\x5e\xc7\x3f\x16\x49\x84\xbd\xd4\x1e\x27\xa3\x21\xc5\x69\x64\xda\xdc\x30\x5d\x41\x14\x1d\xdf\x32\x8c\x42\x02\xd5\x88\x02\x71\xb0\x01\x6e\x52\xe5\x3f\xd9\x44\xe8\x64\xe2\xeb\x6d\x1a\x29\x55\xad\x42\xf2\x66\x60\xbb\xa2\x89\xad\xa7\x56\x9f\x46\xfd\x7e\xf8\x7b\x41\xa8\x56\x1c\x88\x83\x6f\x01\x99\xde\x2b\x4d\x6b\x93\x2a\xb5\x5b\x32\x63\xc9\xfb\x3a\xb8\x63\x45\x15\x5b\x9c\xfa\xe4\x51\x08\x5f\xb6\xb0\x6c\x6d\x3d\x1a\x14\xec\x03\x71\xb0\x01\x5e\x3a\xa0\xe1\x27\xdc\x8e\x57\xbd\xfa\xdc\xe9\x8b\x71\xb0\xfc\xaf\x4f\xa5\x04\x8b\xcd\x7e\xc2\xdd\xb5\x72\xd8\x02\xef\xde\xf4\x42\xb7\x90\x80\x38\xf8\x75\x3c\xe5\x37\x3e\x29\x9c\xd9\x56\x53\xfa\x1b\x60\x45\x75\x3d\xa1\x3c\x24\xb5\xb7\x75\xe5\xb8\x2b\x90\xfa\xc3\x23\xe5\x03\xbb\xf6\x7d\xc4\x00\x07\x71\x88\x01\x3e\x72\xa1\x77\x07\x68\xcc\x9c\xb7\x56\x26\xca\x8c\xf4\xf7\xa8\x84\x5b\x3b\xcc\x45\xf3\x02\x87\x21\x0e\xbb\x18\xac\xcd\xbe\x66\x0b\x11\xc6\xd4\xef\x9f\x4c\xe3\xf8\x41\x37\x47\x83\x38\x98\xb5\xec\x32\x03\xa3\xc6\x69\x9c\xec\x9e\xf6\x6b\x13\x7d\xbe\x89\xc1\xc4\x9f\x33\x4a\xa7\xb4\xc2\x6e\x74\x9b\xa5\x77\xa6\xbf\x55\x1a\x9a\x3f\x80\x38\x78\xe6\x23\xfe\x4a\xbc\xc1\xd9\x95\x45\xa9\x3e\xe7\x09\xd2\x6c\xa5\x9f\x67\x5f\x08\xa6\x32\xbe\x98\xc7\x2c\x56\x16\x4e\x09\xcd\xca\x40\x37\x65\x80\x38\x98\xb5\x8a\x75\x63\x83\x2a\xe5\x7b\xef\x4b\x7f\x2e\xbd\xdc\x42\x18\xcf\xa1\xdf\x91\x7f\xe3\xc7\x37\x8c\xdf\xbb\x96\xb3\x33\x1e\x29\x8a\x8f\xa1\x2d\x56\x00\x07\xb3\x96\x9a\x7c\xdb\x97\x5f\x11\x47\x71\x4f\xaf\xa9\xa5\xd1\xdc\x7b\x5f\xa5\x33\xc5\xc2\xe0\x7a\xc7\xc7\x63\xd7\x46\xdd\x3e\x57\xaa\xc0\x13\x21\x0b\xe2\xe0\xaf\x7b\xf9\xa2\xcc\xdb\xd4\xa3\xea\x71\xc7\xb9\x7c\x28\x1c\x11\xb8\x2f\x1a\x79\xd3\xe3\x26\x8c\x4a\x4f\xc9\xcc\x7f\x23\xb1\x19\xdf\x86\xe2\x44\x00\x0e\x61\xad\xed\x0b\x59\x0b\xf4\xdb\x78\xde\x5a\xde\x9b\x1f\xe4\x5f\x1a\x57\x45\xf0\x2d\x5c\xdd\x55\x38\x3b\x2d\x99\x29\xc5\x7d\x48\xc1\x1d\xed\x10\x3a\x29\x25\xc7\x51\x11\x07\x55\xfd\x06\x71\x30\x6b\x59\x52\x3a\xca\xdc\xe5\xd9\x60\x78\x7e\x65\xe6\x0f\xdf\xba\xfc\x62\x83\x4f\x24\xd7\x64\xb5\xa9\x4b\x73\xe8\x5d\x79\x73\x9d\xc7\xd0\xf2\x1f\xc4\xc1\xac\x35\x23\xf5\x88\xf5\x94\xf6\xb8\xfb\xb4\x3b\x7e\x96\x7e\x2c\x48\x3c\x87\x6e\x0b\xbb\xb1\xca\xa3\x42\xff\xbb\xde\xfb\xf5\x46\x34\x36\x84\x2c\x88\x83\x59\x6b\xac\x0f\x3b\x5f\xaa\x25\x44\x6a\xaf\x7f\x11\xa9\x3c\xb4\x30\x25\xd8\xd9\x85\xb5\xa9\xfa\x8f\x5b\x94\xf7\x71\x37\xf2\x97\x4f\xd0\x82\x1a\xc4\xc1\xac\xf5\xdc\x83\x1a\xf3\xf5\x51\x61\xd8\xc7\xe2\x97\x69\xb4\xff\x1f\x6b\x7f\x1d\x95\x55\xf3\xbe\xff\xc3\x94\x20\x1d\x22\x20\xa5\x20\x22\xd2\x29\xd2\x25\x9d\x2a\x8a\x84\x74\x2a\x48\x49\x09\x48\x23\xa0\x22\x0d\x82\xb4\x84\x80\x74\x77\x37\x08\xa2\xa4\x94\x74\x08\xd2\x20\xf5\xac\x67\xad\xfb\xda\x9f\xfb\xb7\xaf\x7b\x7d\x87\xb5\x78\xff\xff\x5a\xe7\xec\x3d\x73\xcc\x9e\xd8\xc7\x9c\x43\xdf\x32\xfb\x68\x91\x7f\xfe\x33\x17\xe9\xe3\xb7\x4b\xf8\x69\xcb\x77\x76\x6d\xa1\x3d\x10\x00\x07\x6b\x32\x56\x7c\x95\xfb\x41\x7d\x81\x1f\xba\xf4\xb8\x6b\x14\x84\x86\x44\x7f\x3f\xc0\xb5\xbb\x29\x7d\xf7\x4a\xa9\x82\x6f\xd6\x6e\xa1\x90\x15\x42\x5a\x20\x0e\x21\xad\x93\x33\x49\x0b\xf4\x97\x1f\x59\x5a\x9c\xbb\x23\x77\x78\x25\x62\xbb\xb4\x77\x67\x7e\xa7\xf0\xb8\x63\x12\x46\x2d\x1b\x45\x5c\xd5\x88\xe2\x6d\xd4\xf8\x25\xc7\x65\x0d\xcd\xca\x40\x1c\x4c\x5a\x82\xd6\x64\xea\xe8\x6d\x7d\x6a\xdb\x65\x15\xca\x32\x19\xba\x9a\x41\x6b\xe2\xdc\x2f\xd1\xb6\x99\x45\x93\xa3\xc2\x1b\xa5\x5c\x88\x10\x61\x41\x1c\xfc\x0e\x56\xe5\xf4\xb7\x76\x61\x3a\xe2\xc1\x99\x5e\xaa\x05\x42\xea\xef\x6e\xec\xea\x2a\xe3\x97\xad\x53\xba\x16\x7a\x73\x71\x50\xba\x41\x17\xd3\x83\x38\x98\xb4\x1a\x87\xd8\x73\xcb\x74\x53\x70\x34\xd0\x85\x07\x79\x4b\x4f\x72\xa5\xe6\x49\xde\x2e\x68\x17\x13\x62\x5f\x5c\xfb\x50\x50\xb8\x08\x99\x9f\x40\x1c\x4c\x5a\x27\x6e\xe6\x25\x35\xcf\x2c\xd4\xbe\xdc\x71\x92\xd3\x57\xfb\xa3\xab\xcf\xf9\x76\x67\xb0\x2f\xba\xa2\x24\xef\xb4\xa5\x70\x27\xe7\x02\xe4\xf9\xc8\xe0\xdf\x77\x31\xbe\x76\x33\x40\xad\x43\x60\x6d\x0e\x35\x89\x9f\x79\xc0\x59\xd6\x31\x70\x95\xa5\x9d\x96\xe0\xc4\xe9\x2e\x6e\xe2\xbf\x3d\x1f\xc1\x1c\xd5\x32\x1c\xa8\x61\xea\xad\x8d\x17\xef\x17\x0b\x88\x64\xe3\x51\x46\x8b\x75\x61\x3a\x68\xd8\xa3\x63\x06\x35\x1b\xdd\x5c\xf8\x17\x4a\x10\x55\x64\xa1\xa0\xcf\xa3\x4a\xa5\xd6\xb3\xcd\x25\xfb\xd7\xb2\x4a\xfd\xb8\xfc\x62\x44\x6a\x08\x37\x3e\xdf\x4d\x2a\xe5\xed\x05\x98\xe7\x03\x14\x19\xd9\xf3\x81\x5e\xc9\xa2\x79\xdb\x2b\x70\xda\x77\xcc\x54\x57\xe7\x52\x65\x16\xea\x76\x5b\xd5\xaa\x36\xff\xfe\xc1\xce\x13\x1f\xbf\x06\xdf\xdf\xff\x42\xbd\x3f\xe0\xca\x2d\xac\x95\xdf\x3d\xc6\x35\x2c\xa6\xfc\x73\x29\x9f\xb6\xce\x04\x3d\x3a\x53\xf3\x91\xcb\xe2\x65\x2e\x37\xb2\x75\x7c\xc8\xf3\x01\x8a\xf9\x8f\xe7\x43\x1c\xee\xf9\xe8\xd0\x58\x21\x18\x67\x88\x6a\x69\x4e\x63\x61\x9f\xfc\x5d\x57\x64\xf8\xd9\xc5\x4d\x43\x49\xf8\x56\x16\xad\xf0\x84\x74\x75\x0c\xe6\xb9\x27\xb9\xe2\x48\x9e\x0f\xf9\x92\x07\x1a\x63\x43\x82\xfa\x79\x3b\xf8\x22\xee\x99\x23\x35\x5b\x6e\x19\x37\x08\xd2\xb0\xc8\x73\xa6\x3f\x7a\xbf\xbb\xce\x26\x73\xfe\x22\x91\x3c\x1f\x76\xaf\xe6\x17\x16\x7d\xc7\xdf\xbc\xcd\x1e\x34\xcc\x6a\x4b\x5d\x2c\xe1\x98\x6b\xa3\x5c\xb3\x27\xc4\x9e\x6c\xbb\x2d\x6f\x60\x10\x78\xfe\x22\x91\x3c\x1f\x7d\x0c\x13\xd1\x8f\x0b\x3e\x33\x44\xd9\x3f\x77\xb9\xb5\xe9\xf6\xc0\x8e\xf0\xad\xca\xd8\x32\xa7\x7c\xd4\xdf\x0c\x94\x7e\xc3\x1f\x5a\xe7\x2f\x12\xc9\xf3\xc1\x4d\x23\x13\xb3\xfc\xd5\x27\xd8\xee\x42\x8f\xf4\xdb\x9c\xfa\x4b\x86\xdd\x1c\x2f\xde\x7b\xfa\x52\x25\x88\x7b\x5e\x5a\x0f\xee\xf0\x39\x7f\x91\x48\x9e\x0f\x85\x2b\xfc\x8c\xb7\xc3\x8a\x9e\xe1\x4e\x5e\x3a\xcd\x65\x0e\x25\xe0\x7f\x73\x8a\x97\x2a\xe4\xa0\xa6\xfb\xe0\x29\x06\x3e\x76\xef\xb5\xf3\x17\x89\xe4\xf9\xf0\xba\xb6\xfd\x57\x50\xe3\x35\xf6\x13\xce\xa7\xd1\xda\x01\x1b\xfc\xb4\xf9\x1f\x58\xfc\x9a\x62\xd4\xa9\x19\x3e\xdd\x37\xb7\xeb\x67\x38\x7f\x91\x48\x9e\x8f\xb6\xec\xf8\xd8\xc7\x46\x28\xf6\x3c\x7a\x5f\x1f\x72\x06\x74\x08\xa4\x6f\x47\xb2\x94\xa5\x46\x29\x13\x33\x4e\xa7\x67\xcd\x28\x3c\xff\xdf\x2c\xcb\x40\x5d\xf1\x3f\xb6\xf4\x30\xaf\x73\xbb\x7a\xef\xf9\x2e\xaf\x0b\x24\xbe\xdc\xcc\x9e\xc9\x5c\xba\xee\x35\x81\x7f\xbc\x69\xbc\x3a\x94\x6a\x43\x6c\x0c\x9d\x6b\x06\x71\x70\x53\xeb\xef\x9a\xd6\x75\x07\x9a\x61\x22\xcd\x67\x0f\x8c\xee\x8b\xeb\xde\xd3\x09\x77\x25\x56\x93\x78\x7d\x8f\x5b\xff\x9a\xfd\xdb\x08\x23\xc8\xd4\x0a\xe0\x60\xa3\x50\xb1\x93\x1e\x3d\xab\x66\xb8\xf5\x93\x12\x25\x39\xae\x38\x53\x42\x6c\x29\x87\x12\xe5\x68\xf9\x12\x5c\xc5\xf7\x99\x7f\xc3\x1a\x5e\x41\x59\x49\x00\x1c\x6c\x14\xd2\xbf\xd3\x5d\xd0\x3f\x7b\xdc\x96\x77\x73\xaa\xf2\xbb\xa5\xe8\x23\x9d\x42\x47\xb4\x6b\x7b\x12\x86\xb7\x25\x03\x30\x0d\x8b\x35\xa0\xc3\xa7\x20\xce\x47\x02\xed\xff\xe3\x95\xd5\xee\x33\xa3\x74\xab\xd5\xaa\xad\x4b\x1f\x40\x5d\xa7\x27\xda\x77\x57\x11\xa7\xfd\xa2\x55\xc0\xd7\x1a\x80\x89\xfb\xf3\x73\x0d\xe4\x95\x05\x70\xb0\x26\x93\x35\x71\xbe\x78\x23\xc2\xf7\xf3\x8d\x58\x3b\xeb\xeb\x69\x42\x5f\x6f\x26\x87\x99\x62\xb2\xee\x7d\xb2\x0c\xaf\x58\xa7\x2f\x88\xa7\x47\x78\x3e\x40\xdc\x3f\x79\x3e\xc4\xcf\xe4\xf9\x00\x7d\x71\x91\x95\x65\x74\x33\x28\xad\xb5\xff\xa3\xdc\xc4\x57\x2b\x79\x6c\x1b\x72\x85\x4f\xd3\x12\xa3\xb9\x29\x2f\xeb\x53\xf0\x4d\x8a\x05\x46\xd7\x77\xa1\x25\x34\x80\x83\x29\x6b\xf6\x2d\xc1\xe3\x8e\x07\x09\xec\x95\xf4\x5a\x2d\x55\x23\xb7\x2c\xef\xdf\x0d\x93\xf5\x33\xde\x0f\x52\x09\x36\xf8\xaa\xd6\xb3\x0f\x5d\xe4\x09\xe2\x60\xca\x92\xd6\x35\xdf\x4b\xf0\xda\x2d\xa8\x98\xb1\xae\x9b\xfa\x5b\xff\xa1\xe5\xbe\x69\xf8\x96\xdd\x97\xf0\xf6\x06\xd2\x40\xfb\xf1\x6d\xc8\xf3\x01\xe2\x60\xca\xda\x6f\x8f\xb1\xe2\x4e\x2d\x0e\x4e\xcb\x3b\x12\x92\xe3\xb1\x1a\x7a\xe7\x62\x7e\x35\x30\x38\x67\x9c\x68\x83\x5e\x92\xe8\xb8\x10\x72\xa8\x80\x38\x98\xb2\x30\x74\x24\xea\x8f\x87\xcc\x53\x1a\x9f\xed\xd1\xdb\x53\x74\x8b\x1d\xd0\x74\x66\x4c\x6c\x8c\x4c\xc7\x5e\x98\x31\xd0\xf9\x32\x34\x87\x08\x0b\xe2\x60\x4d\x66\xae\xb7\x95\x15\x8c\xb6\xad\x94\x49\x72\x48\x16\x7c\x99\x63\x7e\xa7\x7a\x54\xc1\x39\x6d\x28\x57\x35\xd1\x0f\x37\xde\x42\x2d\x12\x3a\x7b\x0a\xe0\x10\xd7\x22\x9e\xcd\xf3\x01\x1a\x59\x91\xa5\xb5\xd9\x60\xd1\xdd\xd6\xf3\x6e\x4b\x67\x30\x8d\xa3\xcb\x7d\x8a\x41\xb2\xb7\x4e\x51\x8c\x71\x7c\xbe\x51\xd9\xb0\x80\xc1\xe4\x04\x4a\x6f\x00\xe2\x60\xd2\x52\x79\xec\x62\xfa\xfe\xda\x6f\x9d\xc3\xae\x7c\xe1\x86\x14\x33\xe7\xe3\xa6\xc0\x9c\x1e\x7c\xc9\xae\x15\x8e\xc3\x99\x3f\x46\x81\x50\x63\x81\x38\x98\xb4\x6e\xe3\xcc\x51\x49\x70\x0a\x88\xea\xa9\x57\x8e\x07\x46\x06\x5b\xe6\x67\x7a\x68\x1c\x9f\xe6\x2f\x2b\x9a\x5b\x74\x3c\x98\xc9\x85\x14\x0b\xe2\x60\xd2\x2a\x31\x58\x99\xa2\x79\xfd\x51\xe0\x07\x9b\x62\x0a\xc7\x85\x85\x57\xcf\x3d\xaf\xdf\x50\xd3\x55\x21\x78\xda\xe4\x51\x23\x39\xd9\x02\x6d\x16\x83\x38\x98\xb4\xba\x72\xfd\x32\x56\x8d\x66\xc9\x1d\xb1\x95\x62\x07\xbf\xed\xd7\x84\x24\x98\xbe\x77\xc9\xc7\x5f\xe1\x59\x8d\x94\xe4\x95\x37\x83\xce\x0f\x81\x38\xb8\xc3\xfd\x75\xc6\x74\x9b\x27\x2b\x2b\x71\x9a\x2e\x83\x21\x76\x65\x47\xc3\x2a\x41\x3e\xc9\x85\xad\xc7\xcc\xf6\x37\x5e\x74\x93\x64\x41\xe7\x87\x40\x1c\x42\x5a\x67\xf3\x7c\x80\x66\x50\xff\x31\x1e\xae\x5d\xd7\xaf\xee\x08\xa8\xce\x35\xba\x32\xcc\xc8\x1f\x52\xa1\x77\x67\xec\x8a\x5a\x63\x8e\xca\x56\x5a\x83\xe0\xd3\x07\x07\xc4\xd0\x78\x08\xe0\x60\xd2\x5a\xe2\x48\x1c\xf4\x1c\xba\xc5\x64\x53\x79\xdb\xfa\x63\x9d\x6b\xfe\x33\x3c\xa3\x6d\xcd\xca\xb8\x4b\x9f\xaa\x42\x46\x42\x24\x4a\xa0\x3c\x1f\x20\x0e\x26\x2d\xc5\x3b\x5b\xb7\x5b\x9c\x8d\x88\xb4\x89\xa6\xb0\xfd\x87\xcd\x5f\x5c\xd1\x5f\xd8\x7b\xe1\xf5\xb6\x0e\x4d\x19\x4f\xbf\x23\xb1\x09\xba\x2b\x1a\xc4\xc1\xa4\xe5\x4a\x41\x15\x3c\x30\xdb\x38\xfe\xb0\x8e\xc2\xef\x09\x79\xca\xf2\x71\x1f\x63\x58\xc8\xe3\x69\x2a\x5f\x34\xdf\xd8\x12\xf2\x55\xe8\x67\x0c\x88\x83\x49\x8b\x9a\xa1\xf2\x57\x04\x79\x77\xb1\xf4\x63\x86\x07\xfb\x19\x25\xd2\x7a\x03\xe8\xcf\x2d\x1e\xf1\x3c\xea\x8e\x75\x5d\x60\x11\xd7\x87\x14\x0b\xe2\x60\x4d\x36\xee\x2c\x18\x9d\x98\x39\x1f\xa1\xd7\xbc\x44\xe3\x98\x36\x8e\x8b\x37\xb7\x6c\x86\xef\x99\xaf\xd3\xc0\xbe\x55\xf0\x95\x73\xd4\x1e\x21\x2d\x10\x87\x90\xd6\xd9\x3c\x1f\xa0\x99\x32\xb2\xb4\x2a\x3f\x18\x79\x1d\xbe\xba\x8c\x15\x38\xf2\xab\xd0\x34\xe6\xe7\x6d\xe3\xe3\x1f\xd6\xe8\x61\x25\xf5\x99\x05\x7e\x17\xef\x24\xdc\x80\x8e\xde\x82\x38\x98\xb4\x3a\xab\x0d\xbc\x68\x31\x9b\xa9\x87\xca\xc9\x37\xd8\xac\xee\x6f\x50\xf6\x7a\x73\x4a\xd2\x93\x49\x67\x59\xde\xc3\xfa\xe1\x17\x56\x82\x08\x0b\xe2\x60\xd2\xaa\x3b\x58\xe2\x22\xb2\x0e\xf3\xda\x92\x2f\x0d\xea\xa3\x3e\xb8\x70\x5f\xc1\xd3\xf4\x35\xf1\x35\x4a\xe6\x4c\x2f\xaf\x59\xf7\x64\x72\xc8\x9c\x01\xe0\x60\xd2\x9a\xa6\xc0\x2e\x1d\x59\x74\x9f\x9c\x22\xe6\xde\x65\x19\x79\x53\x66\x88\x33\x18\x9a\xbd\xaf\xd7\x8b\xa6\x88\xcf\xa4\xff\xd7\x03\xfa\x21\x07\xe2\x60\xd2\x4a\x09\xb2\x41\xc9\xa2\xdf\x22\xd5\x9a\x57\x08\x6c\x3d\x71\x90\xde\xba\x25\xc0\x81\x75\x38\x6f\x9d\x9f\xd5\xab\xdb\x7d\x4b\xf7\x05\x22\x2c\x88\x83\x35\xd9\x6d\x8f\x28\xd9\x7a\x61\xd4\x49\x35\x91\x64\xe2\x4d\x14\xf9\xdf\xce\xfe\xeb\xc6\x07\x24\x31\xb6\xea\xa3\xa2\x57\x15\xd5\xe8\xbe\x23\xa4\x05\xe2\x10\xd2\x3a\x9b\xe7\x03\xb4\x22\x42\x96\x96\xc1\x05\x93\x45\x7c\x95\x7d\xef\x16\x8a\xf0\xb5\x58\xb3\x27\x5f\x26\x3b\xbb\xd8\xa5\x6f\x0d\xb5\xdb\xfc\xf1\xe3\x25\x3a\xbd\x8b\x86\x78\x7d\x10\x07\x93\x56\xe3\xc3\x9d\x56\xec\xef\x94\xdf\xe7\xb7\xc5\xdd\x1d\xb7\x93\xcb\xab\xaf\x0c\x3e\xbe\xf6\x5b\x49\xef\x72\xa6\x69\x30\x6b\xdf\x77\x2a\x68\x77\x06\xc0\xc1\xa4\x95\xf8\x38\x4a\xc9\x75\xf5\xca\xa7\x93\xd0\x9b\xaf\xba\xd1\xba\xe5\x6e\x8c\x4b\xca\xac\x3c\x7e\x99\x43\x88\x77\x1b\xbd\xc4\x0d\x1f\xb2\x94\x81\x38\x98\xb4\x0c\xf8\x30\x9d\x19\xc3\xbe\x6f\x0c\xc9\xbb\x4c\x26\x3f\xd8\x90\xab\x1b\x39\xa5\x15\xc1\x56\x93\xc6\x2a\xb3\x4e\xfb\x39\x96\x07\xfd\x5c\x01\x71\x30\x69\x1d\xeb\x75\x6e\xe6\x9f\x0a\x96\x62\x33\x49\xff\x1d\x26\x13\x75\xbb\x22\xd3\xb2\x20\x8c\xb3\x35\x68\xae\x7d\xc5\x1f\x55\xa2\x1e\xba\x4c\x10\xc4\xc1\x9a\x8c\x25\x93\xed\x90\x87\xfe\x8a\xea\x75\xbf\x24\xf6\xed\xaa\xe3\xf7\x2f\x5b\x9e\x25\x93\x99\x52\x87\xe2\x44\x7f\xf1\x26\x89\xf4\xa1\x44\x48\x0b\xc4\x21\xa4\x75\x36\xcf\x07\x68\xe5\x8b\x2c\x2d\x17\x7f\xec\xdf\x32\xf1\xf8\x3b\x5f\x5d\x71\xe6\x83\x3c\x2b\x70\x12\x8c\xc2\x59\x15\x3d\x49\x5e\xba\x87\xc7\x39\xfd\xd5\x45\x85\x32\x67\x80\x38\x98\xb4\xc2\xbe\x2e\xad\xea\x6f\x30\xd7\x1d\x6b\x13\x46\x45\xfa\x1a\xb4\xde\x74\x2d\x7b\x2f\x2d\x50\x18\xea\x28\xb3\x6e\x15\xd0\x6e\x00\xe5\x78\x00\x71\x30\x69\xa1\x1f\xd4\xe2\xaa\xa1\xb9\xfc\x1d\xd8\x8b\x4e\x14\xc1\x69\xf7\x88\x8d\xfa\x25\x34\xd3\xaa\xb8\x35\x45\x94\x8b\x8a\x85\xe2\x0a\x2d\x10\x41\x1c\x4c\x5a\x22\x69\x7c\x97\xb5\xbe\x93\x6d\x3a\xe0\x3e\x8b\xdf\xe6\x6a\x71\xd6\xef\x7c\xaa\x76\x53\x58\xa5\x2c\x3d\x45\xf0\xfe\x83\xca\xd7\xd0\xaf\x20\x10\x07\x93\x96\x28\xfa\xc7\x6f\x2b\x2f\x7e\x3a\x33\xdb\x7d\x7f\xb9\x3a\x7a\x22\xf7\xb5\xac\x8d\x96\x60\xbc\x77\x45\xe2\xd5\x50\xf7\xfd\x97\x0f\x4f\xa1\xf4\x3c\x00\x0e\xd6\x64\x75\x61\xd7\xf3\x8c\xed\x45\xd4\x55\xc4\x4e\x83\x92\x15\xf0\x89\xcb\x2f\x7f\x8e\x45\x8d\xb3\xaf\xaf\x60\x20\x1d\xfb\xa3\x22\x45\x85\x90\x16\x88\x43\x48\xeb\x6c\x9e\x0f\xd0\x0e\x07\xb2\xb4\x04\x7a\xb1\x9a\x02\xb1\x55\x44\xb2\x94\x79\x2e\x3d\x88\xa8\x29\xbf\x4f\x61\x95\xa2\xf6\x0c\x07\x2b\xc7\xc4\x0a\xfb\xa2\x0f\x01\x74\xe0\x0f\xc4\xc1\xfd\xb5\x6c\xea\xdd\xf6\x14\xa4\xc9\xa5\xcf\x7f\xf7\x61\x2b\xf5\x8f\x4e\x53\xbc\xd6\xdc\xc2\xf7\x7b\xf9\xe5\xf4\x69\x90\xfb\xdc\x0d\x6f\x68\x35\x0f\xe0\x60\xd2\xc2\xf8\x3a\xc7\x84\x16\x7d\x22\xe8\xb6\x4c\x7a\xc3\xd3\x51\xb6\xe5\x79\x61\x6c\xfb\x6f\x23\x99\xd9\x0d\x8d\x03\xbc\x8f\x8f\x46\xc3\xa1\x35\x17\x80\x83\x49\xab\x67\x59\xb1\x0d\x8d\xf2\x3a\x06\xe1\xcd\xd4\x8a\x2d\x92\xea\xa0\xb9\xf7\x31\xaa\x66\x4c\x04\x04\x97\x94\xc2\x56\x4f\x31\xa9\xa0\x63\x2c\x20\x0e\x26\x2d\x1f\x01\x2d\xbb\xdc\x48\x8d\x1c\xc5\xe4\x9f\x23\x21\x56\x91\x57\xed\xef\xb0\xa7\xb8\xce\x2f\x11\xfc\xb9\x83\x6f\x91\x6a\x75\x95\x10\x11\x16\xc4\xc1\x9a\xcc\xd1\xf8\xfd\x93\x3f\x5d\x97\xbe\x64\xb5\x61\xfb\xb0\x89\x6e\xfb\x3d\xa1\xc3\x98\xe0\x79\xbe\xc0\x42\x36\xad\xb0\xb3\x33\x7e\xa1\x1d\x21\x2d\x10\x87\x90\xd6\x19\x3d\x1f\xa0\x3d\xec\x7f\x3c\x1f\xe2\x48\x9e\x8f\xd5\xca\x7c\xf2\x1f\x69\x1b\x94\x9c\x09\xeb\xdc\x0e\x3c\x7e\xd9\x63\x09\xde\x74\x7d\xce\x76\xe4\xfe\x17\x36\xf9\x23\xac\x25\xa6\xce\xbf\xd3\x87\xe4\xf9\x18\xf9\xce\x1d\x1d\xcc\x23\x4b\x61\x1a\x1b\x53\x4a\x38\x84\x33\xff\xa6\x0a\x6b\xf6\xad\x96\xdd\xfc\xc7\xe7\x98\xf9\x29\xaf\xef\x9e\xff\xd8\x9c\x38\x92\xe7\x83\x7f\x31\x51\xfd\x65\xd0\x66\x0d\x65\x4e\x61\x90\xfc\xe0\xc5\xe9\x5b\xfd\x21\x62\xe2\x79\xcb\x87\x2e\x8f\x2d\x5a\x49\xe2\xdb\x68\xfe\x37\x9b\x8b\xa0\xba\x44\xee\xe0\x33\x38\x1a\x13\xb7\xc9\x30\x5e\x7c\xd9\x98\x08\xb8\x3f\x1c\xd8\xc1\xea\x3e\xf7\x3a\x54\x67\xd0\xe6\xe9\x6d\xc2\xd2\x6d\xfb\x21\xe8\x0e\x56\x10\x07\xeb\xe0\xb6\xa8\x4e\xb6\xdd\xb2\x3d\x44\x8b\x69\x0e\x42\x1c\x15\x49\xb5\xdf\x69\x03\x36\x92\xd2\x5f\x5f\x4e\x3a\x78\xf8\xaa\xab\x8b\x1a\x13\x11\x16\xc4\xc1\x3a\x38\x47\x19\xfb\x1b\x3b\xa5\x89\x59\x86\xde\x4b\x9d\x01\x97\xe4\x31\x14\x34\x93\x09\x14\xfa\xad\x6d\x3c\x29\x48\x77\x2f\x5f\x4e\x53\x40\x84\x05\x71\xb0\x0e\xee\x10\x54\x25\x72\x85\xb5\x9c\xbc\xe5\x5a\x0b\x79\xae\x9c\xf7\x3c\x09\x2a\x4a\x1c\x65\x43\x90\xc5\x71\x01\x13\x86\x29\x19\x1d\x74\xef\x1e\x88\x83\x75\xf0\x1b\x5b\x9e\x5d\xa6\x3e\x51\x8a\x4c\x29\x2f\x52\x26\xe7\xae\xb3\x73\xbe\xbc\xeb\xcd\xe9\xfa\xce\x99\xeb\x38\xc6\x2a\x33\xb0\x15\xf2\x7c\x80\x38\x58\x93\xd1\x8d\xca\x14\xda\x6c\xb9\x68\x3f\x2a\x4d\x1a\xeb\x7e\x67\x4b\x5a\x87\x1d\x7f\x67\xb9\xb6\x55\x88\x58\xef\x43\xce\x97\x46\x77\xe8\x7a\x5f\x10\x87\xe8\xe0\x67\xf3\x7c\x80\xfa\xcc\x7f\x5c\x39\x97\x3a\xbf\xbd\xa5\x63\xf1\x3e\x71\xaa\x77\xad\xc2\x61\x3f\x1c\xa7\xbd\xd0\x58\xb8\xcf\x7c\x40\xac\x19\xe5\xd3\x17\x51\x32\xe8\x6c\x06\x88\x83\x49\xab\xe8\xe6\xfb\x35\x5a\xe1\xfd\x42\x09\xfc\x4e\x0b\x49\x7a\xe2\xdd\xd2\x0d\xf9\x30\x37\xf7\x88\xd5\x70\x1a\xd5\xe5\x97\xe5\x04\x50\x16\x61\x10\x07\x93\xd6\x8b\x97\x4d\xe9\x3f\x59\xf2\x34\x49\x37\xf6\x2c\xe7\xc5\x13\x23\x86\xae\xca\x97\x6d\xfc\x59\xfd\x92\x61\x17\x71\xef\x47\x9c\x87\x33\x22\x2c\x88\x83\x49\xab\xe3\x72\x24\x03\xfa\x44\x94\x75\x6a\x66\x5b\x6d\xd7\xd4\x58\x95\xb3\xb5\xbf\x5f\xa9\xb6\x96\xd8\x5f\x7a\xf7\x15\x75\x5b\xaa\x52\x44\x58\x10\x07\x93\x56\x39\xc9\x96\x0c\x11\x2e\xdf\xc4\x53\xbd\x67\x65\x3c\x3d\xe4\x0b\xe5\xd5\xb2\x3f\xc4\xa8\x07\x16\x65\xe3\x13\x0e\x59\x68\x73\xa0\x44\x17\x20\x0e\xd6\x64\xdd\x34\x1c\xb7\xef\xc4\x4e\x32\x36\x62\x34\xa8\xac\x29\x44\x5b\x05\xca\x36\x4f\x4d\xfa\xa2\x9a\xac\x9b\x68\x7e\xfc\x3a\xfe\xf8\x39\x42\x5a\x20\x0e\x21\xad\xb3\x79\x3e\x40\xdf\x46\x64\x69\x3d\xc3\xdf\x0b\x3e\x20\x2d\x65\xe4\x96\x0e\xc6\x70\xb6\xee\x98\x99\xc5\x56\xc3\xad\x25\x7d\xf9\xdc\xf1\xa0\x31\x3f\xf7\xb6\x2a\xe4\x74\x07\x71\xf0\x2b\xe7\x26\x49\xf1\x7a\x88\x02\x1a\x51\xf1\x78\x7f\x5f\x7d\xf7\x93\x52\xda\x18\xf7\x31\xed\xb1\xd3\xd1\xf0\x5f\xbc\x30\xff\x14\x2c\xe8\x1e\x5e\x10\x07\x93\x56\x72\xb6\xa1\x8b\xfd\xd5\x02\x17\xb2\x97\x55\xe1\x5e\x9d\x4a\xaa\x95\xfd\x26\xcf\xb0\x3c\x6e\x92\xa2\xf3\x72\x56\x06\xad\xa3\x43\x59\xcd\x40\x1c\x4c\x5a\xe8\x5a\x84\x6b\x79\x52\xcd\xd8\xf4\x0e\x37\x16\x3e\x5c\x2e\x36\x15\x52\x38\xba\x2c\xf6\x9d\x70\xdc\x87\x9a\x88\x16\x25\xfc\x3b\x74\x3e\x07\xc4\xc1\xa4\xe5\x4e\x79\xe1\xe8\xf4\x83\x02\x4d\x41\xed\x61\x56\x9b\x3e\x7e\x5d\x42\x42\x6b\x0d\x79\x85\x89\xc7\xa2\x39\xed\x23\x9b\xd4\x2c\xa8\x12\x40\x1c\x3c\xa1\x14\xa5\x96\xc6\xfd\x57\x05\x3c\x0a\x97\x3f\xdb\xf8\x1d\x0c\xb3\x53\xbc\x76\x78\x74\x07\xcb\xc0\xa7\xfe\x96\x65\x91\xad\x1b\x16\x37\x74\xb7\x0b\x80\x43\x48\xeb\x6c\x9e\x0f\xd0\x5f\xfe\xff\x70\x39\x17\xba\x17\xed\xd1\x24\x06\x72\xf2\xbc\xa7\xb2\x3c\xbe\x3b\x2c\x90\x7c\xc0\x88\x95\xcc\x77\x78\xe7\x61\xbf\x86\xdf\x85\x70\xe8\xf8\x1f\x88\x83\x49\x4b\x39\x21\x21\x24\x94\x49\xc7\x27\x75\x9b\x16\xbb\xe9\x79\xf9\xce\xaf\x4d\x33\x8f\xc2\x1f\xbb\x57\xfe\xdc\xf5\x76\xf6\xc7\xa2\x82\x2c\xe9\x20\x0e\x26\xad\x6b\x32\x7f\x73\xc3\xb9\x8f\xfb\xfa\xa3\x7b\x0e\xcb\x13\x28\x7b\xba\x42\xbd\x8c\x92\x82\xf9\xa3\xc4\x3e\x3a\xd7\x6d\xde\xdd\xdb\x42\x84\x05\x71\xf0\x13\xd6\xb8\xb1\xf4\x61\xad\xb4\x47\xba\x81\x77\xc7\xc4\x25\xa4\x84\xb2\x02\xbb\x25\xa9\xbb\xc6\x70\xde\x35\x1f\x6c\x3d\x58\x6a\x85\x4e\x13\x81\x38\x98\xb4\x08\x49\x9f\xd0\x61\x0f\x3d\x2a\x1e\x56\xd1\x6f\x8a\x59\xfc\x7d\xb1\xad\x18\xfd\xe1\xac\x33\xa6\xa8\xef\x80\xe6\x54\x02\xe6\x8b\x31\xc8\xf3\xb1\xd1\x3a\x94\x79\xb5\xdb\x6d\xb9\xf8\xe5\x7b\xf2\xd7\x02\xbb\xdb\x9c\x8a\xda\xd8\xf1\x2b\xa4\x75\x2e\xb1\xf2\x07\xa7\xc2\xce\xf5\xff\xf6\x7c\xf8\x06\xee\xab\x27\x9b\x60\x54\x53\x6c\xdb\xfa\x51\x59\xbf\x28\xf5\x26\x54\xea\xf8\x78\x29\x68\xe7\xde\xf3\x6e\x32\x56\x43\x6a\xcf\x7f\xa1\xdf\x2e\x9f\xcc\xc5\x44\x4f\x14\xbf\x51\x95\x34\x3a\xe9\xf5\x7f\x72\x10\x19\x98\xba\x49\xd3\x7a\x09\x35\xe0\xa3\x3d\xcf\x6a\x45\x32\xcc\xf3\x01\x8a\x8c\xec\xf9\xe0\x7c\xd2\x88\x6f\x2f\xeb\x76\x7c\xd5\x89\xe5\xa7\xd5\x3a\x9b\x4c\xd4\xdd\xbc\xf7\x1f\xd5\x6e\xcf\x3b\x5f\xdf\x09\x70\xbb\xdd\x1c\xfa\x6f\x47\x64\xaa\xd5\xe5\x64\xb6\xe5\x9b\x97\x8b\x08\xdb\x67\x2f\x3c\x66\xc0\x6b\xfb\x2c\xf2\x0c\xa3\xff\x26\xdb\xeb\xb0\x83\x4f\x77\x77\x15\x21\xcf\x07\x28\xe6\x3f\x9e\x0f\x4f\xb8\xe7\x23\x82\x34\x75\x58\x69\xb1\x22\xc8\x46\x79\xfc\x54\x32\xb6\xe4\x36\x7a\xb6\xc2\xb5\xd0\x94\x4b\x57\xb1\x9e\x65\xe2\x99\xe5\x89\x19\x9c\x7b\x92\xeb\x89\xe4\xf9\x50\x7f\x62\xa6\x4f\x9e\xdf\x39\x98\x3d\x4d\x21\x69\xe1\x9e\xac\x7a\x35\x8e\x3f\x06\x73\x79\x8c\x53\x6f\x63\x57\x27\x55\xee\x96\xca\xf9\x8b\x44\xf2\x7c\xe8\x76\x88\xeb\x08\xf7\xf4\xcd\x05\xa3\x9f\x70\x5f\xa2\x23\x62\xa3\x33\x7a\xc0\x9a\x85\x19\x59\xca\x13\x58\xfd\x46\x3d\xe0\x69\xc7\xf9\x8b\x44\xf2\x7c\x6c\x7d\x1a\xba\x8e\xfb\x78\xd0\x96\x4d\xbf\x23\x5e\x3d\x3c\x4e\x9d\x5b\x97\xf6\xed\x5a\xad\x97\xe3\x84\xe1\x4d\xc6\xfd\x2f\xd4\x68\xe7\x2f\x12\xc9\xf3\xa1\x23\x46\xb4\x22\x55\x60\x27\x39\xdb\x48\xea\x92\x2e\x8d\xa5\xd3\xc7\x9c\x2a\x64\x67\xa7\xb7\xd7\x21\xb7\x77\xb1\x49\x33\xd1\xeb\xfc\x45\x22\x79\x3e\x62\x06\x38\xd6\x3c\x9f\x91\xe7\x54\xcc\xaf\xfa\xa5\x8b\xfe\xcd\x33\x72\xc2\xb9\xf0\x6b\xef\xa4\xec\x6d\xcf\xce\x88\x80\x1f\xd1\xbb\xf3\x17\x89\xe4\xf9\xb0\x88\xf8\xdb\x7a\x22\xc5\xfc\x8a\xd6\x3b\xe5\x1e\x67\x9f\xd0\x1d\x09\xee\xd6\xf9\xd0\x80\xd1\xa3\x2f\xf3\xbf\xcd\x8d\xb7\x44\xd7\xcf\x5f\x24\x92\xe7\x23\xf1\x8d\xa1\x8b\x8a\xe0\x66\x93\x32\xd1\xc3\x80\xc3\xb1\x8e\x7a\xf3\x91\xc4\xdc\xbc\xc0\x80\x6f\xe2\xf7\xf7\xff\x66\x7e\x78\x20\xfd\xbf\x59\x96\x81\xba\x22\xf2\x28\xf4\x3c\x80\xe8\xe0\xa1\x67\xbb\x0d\xa1\xa6\x79\xc5\xeb\xd7\x46\x06\x24\x63\x77\x69\x98\x8e\x53\x4a\xf7\x6d\x6e\x68\xa7\xcd\xc9\x43\x77\xf7\x81\x38\xd8\x28\x84\xba\xe0\xb0\x20\x68\x22\x2b\x48\x55\x67\x95\xf8\x3d\xbd\xe6\xf3\xa5\xb5\xa3\x51\x62\x09\xa3\xef\xd3\xb6\x35\x0a\x6c\x21\x2e\xd0\x95\x31\x20\x0e\x36\x0a\xa9\x1e\x9d\x18\x08\x7d\xda\xfc\xbc\xba\x7a\x44\x6c\xd1\xab\x7f\xeb\xba\x5c\xf5\x48\xfb\x2b\x11\x82\xba\x43\x4d\x83\x36\x6f\xf5\x5e\x44\x58\x10\x07\x1b\x85\x56\x3e\xdf\xf5\x29\xba\xba\xe9\x87\x55\x45\x57\x5a\xc3\xe4\x52\x34\x65\x6e\xf3\x78\x4f\x89\x9a\x4b\xfc\x8a\x18\xc5\xe4\x90\x26\xe4\xf9\x00\x71\x3e\x12\x18\xff\x0e\x1b\xa8\xc0\xf2\x63\xb7\x48\xe3\xed\x4e\x21\x6b\x15\x1f\x89\x67\x40\x00\x67\xf7\x2e\x35\xda\xdb\x1e\xad\xec\x06\x75\x1a\x0f\x14\x68\xcc\x04\x71\xb0\xa7\xad\x7d\x65\x39\x38\xbf\xf8\xbb\xf8\x9d\x53\xdc\xd8\x5f\x46\xcf\x07\x47\xfb\x64\x46\x6e\xdf\x44\x70\x5f\xe4\xe6\xa5\xf8\x57\xab\x68\x21\x3c\x1f\x20\xee\x9f\x3c\x1f\x9e\x67\xf2\x7c\x80\xbe\xb8\xc8\xca\x2a\x63\xba\xcc\xf4\xfc\x71\x4f\xe8\x2d\x6b\xec\x5a\xaf\x3d\xe6\x0a\x92\x17\xaf\x1f\xbd\xed\x1c\xd1\xc2\x95\x9a\x89\x4d\x13\x99\x80\x52\x5c\x80\x38\x98\xb2\x68\x4d\x9a\x71\xb8\x73\xbb\xfb\x25\x45\x93\xf1\x1d\xde\x87\x39\x2e\x4c\x5c\x65\xff\x9d\x1f\x99\x39\xfb\xdb\x93\xf5\xb2\x3d\x07\x94\x8c\x01\xc4\xc1\x94\x35\x15\x2d\xc0\xba\x66\x55\x29\x7e\x4b\x8f\xc7\x74\x1f\x43\x83\x87\x0a\x7d\x7d\x51\x9e\xf7\xa8\x89\xf2\xed\xd3\xee\x90\xf2\x84\x56\x44\x58\x10\x07\x6b\x2b\xef\x8a\xbc\xc0\x7b\xcd\xb5\x8e\xa4\x5b\x97\xd0\x7b\x2b\x08\x22\x85\x63\x87\x69\x5a\xfc\x58\x25\x44\xe6\x5d\x5b\x5d\x3b\xe7\x7b\x10\x61\x41\x1c\x4c\x59\xc4\xba\xa4\x6c\x2f\xc6\x2f\x95\x5b\xdd\x55\xdc\x3d\x61\x7e\x95\x66\xf6\xfc\x4b\x78\x0d\x79\xcf\x94\xd5\xa3\xcc\xd0\xe6\x37\xae\x2a\x88\xb0\x20\x0e\xf6\xb4\x89\xf1\xc9\x11\x45\x7d\xc2\x35\xcf\x5a\x5f\x8d\x2f\x0d\x86\x1e\x32\x95\x3d\x9c\x8c\x57\xa9\xe8\xc9\x29\xbe\x61\xff\x4d\x6e\x25\x07\x31\x75\x06\x71\x88\x6b\x11\xcf\xe6\xf9\x00\x8d\xac\xc8\xd2\xe2\x1a\x32\xbd\xcd\xfb\x51\xa6\x32\xf8\xef\xab\x9f\xbf\xaf\xc7\xce\x96\x0a\x47\x3f\x9d\x15\x0f\x3e\xad\x78\xea\xe8\x1d\xd2\x1b\x0f\xad\x73\x40\x1c\x4c\x5a\xf6\x7c\x6f\x44\xb6\x94\x26\xec\x18\x3d\xb1\xef\xea\x0a\xd5\x14\xb6\xbc\xf3\x6e\x88\xd8\x5d\x97\x6c\x93\xfa\xf1\x09\x25\xa3\x1a\xba\xdf\x07\xc4\xc1\xa4\x45\x5a\xbc\xaa\x67\xc0\x33\xfc\xa6\xb3\xbd\x97\xeb\x19\x8d\xb0\x8e\x3d\x1b\x17\xee\x14\xce\xa9\x90\x85\xe9\xca\x76\x9e\xd3\x7b\x28\x29\x0b\x88\x83\x35\xd6\x62\x3b\x67\x64\xde\xbe\x64\xad\x56\x52\x3b\xd6\x23\xb3\x27\x4f\x89\x96\x25\xa6\x0b\x8f\x3e\x62\xfe\x6a\xd1\x9e\x45\x19\x91\x81\x0e\x79\x80\x38\x98\xb4\xda\xb6\xaf\x09\x5c\xfe\x80\x63\xfd\x68\xec\xdd\x3b\x7a\xfc\x80\x68\x85\xfe\xf1\xe0\x63\x69\x6b\xc1\xb4\x5c\x89\xe3\x4f\xaf\xef\x43\x49\x53\x41\x1c\xec\x69\x9f\xf8\x63\x52\x33\x6d\xb6\x4d\x2d\x98\x99\xa5\x1d\xf7\xf8\x94\xae\xaf\x7c\x99\x29\x47\x17\x6e\x58\x38\xbe\x13\xa9\xc2\xb6\xe5\x89\x90\x16\x88\x43\x48\xeb\x6c\x9e\x0f\xd0\x0c\x0a\x59\x5a\xd9\x18\x27\xc5\xb2\x0c\x89\x0f\x99\x2f\xa8\xdc\xc8\x20\x90\x10\x45\x79\xc5\xe0\x96\xf5\xcb\x91\xe6\xf1\x3b\xcd\x04\x05\x7e\x94\x29\xc4\xeb\x83\x38\x98\xb4\x78\x99\x54\x2e\x88\xf3\xe0\xb4\x88\x65\xd3\xa5\x0e\xff\x68\xdf\xbd\x1b\xd2\x35\xac\x2f\xf0\x3a\x81\xf5\xe0\xe5\x22\xc9\xfd\x51\xe8\x9f\x34\x88\x83\x49\x2b\x0a\x67\xea\x1a\x67\x2b\xf1\xe9\xf5\x0f\x21\x61\x8c\xe9\x86\xd6\xbf\x36\xab\x79\x35\xc4\xc8\xb7\xbd\x0c\x8d\xe6\xb8\xbf\x78\xb9\x20\xc2\x82\x38\x58\x63\x05\xc9\x3c\x97\x53\x38\x29\x79\x4d\xc9\x19\xb1\x44\x69\x59\x82\x1a\x53\xf1\x5a\x65\x6d\xdc\xd3\x82\x66\x36\x36\x69\xe9\xb9\x13\x1b\x22\x2c\x88\x83\x49\xcb\x1c\xd7\xa6\x71\xa8\xe5\x5a\x54\xec\x61\x95\x43\xc6\x33\xb2\x0d\x9e\xe2\xca\xf7\xf1\x59\x77\x42\x7c\x38\x4b\x84\xcd\x79\x63\xa1\xdd\x4f\x10\x07\x7b\xda\x0f\xa3\x8f\xbd\xe2\xb8\xa3\xf7\xdf\x47\x35\x77\xe2\x45\xdc\x68\xd5\xc1\xff\x40\xc7\x68\x19\xce\x25\xcd\x63\xdb\x34\xad\xf6\x77\x1d\x21\x2d\x10\x87\x90\xd6\xd9\x3c\x1f\xa0\x99\xf2\x7f\x7c\xb5\x3e\xa4\x50\xb4\xf2\x17\xc6\x14\x5b\xff\xda\xd5\x8d\xa6\x0e\xa5\xec\x4a\xd7\xda\xac\xd8\xef\xc1\x4a\xac\x76\xa3\x19\x44\xbf\x02\x7d\xb5\x00\x1c\xfc\x32\x57\xc2\x6f\x55\x1e\x29\xcc\x6f\xfc\xd5\x1c\x6f\xc9\xf3\x27\x3f\x61\xfe\xd0\x17\x7a\x54\x9d\x88\xaa\xb0\xd4\x47\x27\x48\xa8\x0c\xdd\x3d\x01\xe2\x60\xd2\x2a\xd5\x28\x92\x1d\xe9\x3a\xb5\x5a\xdd\xd2\xd1\x76\xbd\xee\xf6\x41\x85\xe5\xe2\xa0\xa3\xde\x8e\xcf\xe6\x14\xa7\xbe\x3e\xfb\x5d\xe8\x58\x12\x88\x83\x35\xd6\x77\xc5\x5d\xc3\x74\x29\x67\x36\xec\xf0\x6e\xab\x7b\xa7\xcb\xc3\x0c\xed\xf6\x09\x8b\xda\xfb\x6d\x68\xf9\x42\xbc\x8f\x35\xa7\x21\x27\x28\x88\x83\x49\x8b\x5f\x57\x76\xe5\x89\xe7\x34\x9f\xaa\x15\x56\x74\x84\xe2\x81\x45\x31\x1a\xc9\xcc\x41\x01\xca\xb1\x25\x2e\xef\x95\xeb\x37\x36\xf3\x10\x61\x41\x1c\xec\x69\x03\x47\xe9\x7e\x84\x95\x68\xa1\x98\x9e\x78\x34\xbf\xd7\x2a\x44\xc9\xfd\xb1\x72\x29\xc8\x74\x21\x9f\x84\x55\x2c\x5d\x72\xa9\x33\x15\x21\x2d\x10\x87\x90\xd6\xd9\x3c\x1f\xa0\x15\x11\xb2\xb4\xfa\x50\x53\xc8\x28\xbe\x0c\x2e\x0c\x34\x76\xc6\x6d\xe0\x47\x08\x3a\xdf\xba\x23\x5f\xb6\x82\x5b\x44\xbf\xfa\xec\x99\x2f\xe7\x08\x74\xa0\x16\xc4\xc1\x53\xc8\xf0\x3d\x96\x28\x14\xc6\x68\x3c\xa2\xe1\x29\xf6\x89\x33\xcf\x18\xcb\x36\xf1\xc4\xa9\x10\x4b\xc5\xa1\xdc\xe4\x59\xfe\xa8\x07\x7d\x07\x40\x1c\x4c\x5a\xde\x6c\xa4\x85\xcb\x47\x04\x5d\xe5\xd6\xbf\xd5\xbd\x07\x6d\x50\xb4\xc8\xb2\xde\xd9\x2b\x3f\xa5\x8e\xef\xff\xbe\xec\xaa\x41\x0a\xfd\x5c\x01\x71\xb0\xc6\xa2\x14\x26\x15\x78\x40\x22\xb0\xbf\x24\x50\xb4\x9b\xe4\xa9\x14\x48\x83\xee\xb9\x12\xad\xb6\xe3\xc2\x45\xa4\x6e\xf6\x49\xf0\x2d\xf4\x79\x01\x71\x30\x69\x9d\x8a\x8e\xfe\x9e\x4a\x7b\xb1\x9e\xef\xcb\xde\xd5\x80\x4f\xad\x14\x93\x47\x4e\xc4\x40\x7f\xbf\x4c\x46\xef\x6d\x17\xf1\xce\x78\x03\x22\x2c\x88\x83\x3d\xad\x47\x8c\x87\x74\xd6\x15\x32\xbf\x9e\x34\x1c\x1d\xd2\xa8\x92\x67\xb6\x1c\x29\xf9\xd6\xcf\x09\xfa\xf0\x73\xb2\x8f\x5e\x24\x0c\x7e\x44\x48\x0b\xc4\x21\xa4\x75\x36\xcf\x07\x68\xe5\xfb\x1f\x89\x20\x07\xc5\x3a\x95\x42\xd4\x8d\x7f\x69\x1b\x3f\x4e\x93\xc9\xb4\x14\x75\xfc\x5a\x3e\xf2\x7b\x58\xf8\x8d\x5e\x7a\xe9\x72\x44\xe7\xff\x25\x82\x04\x70\x30\x69\x65\xac\x9a\xd5\xec\x36\xa6\x96\x0b\x53\x1e\x34\xf4\x44\x5f\x4e\x47\xbf\xf6\xa8\x96\xb5\xde\x7d\x77\x8e\xd1\x2f\x96\xd1\xd6\x01\x05\x11\x16\xc4\xc1\xa4\x75\x47\xea\x47\xd7\x2d\x02\xdf\x98\xa0\x79\xcf\x8c\x31\xc2\x3a\x9a\x0d\xfa\x18\xa6\x0c\x9a\xfb\xcd\x61\x4f\xfa\xc4\xd5\xed\x3e\x43\xbf\x03\x41\x1c\xac\xb1\xe6\x5f\x8c\x84\xe0\xcd\x06\x91\x46\xb0\x53\x74\x8d\xcd\x3d\xbd\x48\x39\xab\xe7\x90\x5a\xf2\x0d\x7f\xee\x90\x33\xc4\xe6\xc9\xc2\x3e\x22\x2c\x88\x83\x49\xeb\xee\xe5\xc5\x93\xb4\xb8\x46\x29\x6b\xde\x46\x47\x54\x63\x41\xe9\x77\x5f\x95\xd0\x75\xc2\x82\xbc\xbe\x3c\x28\xd4\x74\xe8\xfc\x05\xad\x92\x41\x1c\xec\x69\xf9\xf3\x58\x32\x12\x34\x99\xc4\x23\x5b\xcd\x3f\x5c\x17\x7d\xae\x28\x4b\xc7\xf0\x21\xec\xaf\x0e\xfb\x80\xca\xbd\x9a\xc8\x93\xb1\x06\x84\xb4\x40\x1c\x42\x5a\x67\xf3\x7c\x80\x76\x38\x90\xa5\x65\xaf\x9c\x2a\xf4\x38\x2f\xe7\x9b\x81\xa7\x5f\xcc\x86\xd1\x1f\xf6\xd8\x25\x31\xb7\xba\x2c\xdf\x76\xb1\xaf\xd3\xc2\x0f\x5f\x2f\xdc\x85\xe6\xdb\x00\x0e\x26\xad\xd3\x09\xae\x87\xfb\xc7\x07\x78\x98\x79\x84\xf5\x68\x74\x4b\x4e\x8d\xfc\x73\x49\x58\xf1\xed\xa5\xbb\x8a\xef\x4d\x3f\xe6\xad\x40\x89\x79\x40\x1c\xdc\xba\xfd\xf7\x50\xb7\x33\xff\x9e\x60\xa2\x06\x2b\x27\x65\x45\xdb\x3b\x23\xd2\xba\xb6\x86\xa2\x83\xc2\xba\x8f\x42\x8b\x9f\xc2\xc6\xa1\xfd\x7a\x10\x07\x6b\xac\xcd\xae\xd8\x72\xb1\x6b\x94\x2d\x7e\x59\x22\x5b\xdb\x14\xb9\xf9\x7a\x16\xfa\x82\x91\x81\x8e\x15\x9f\xe8\xd6\x42\xe3\x4b\x14\x38\x20\xff\x3a\x80\x83\x49\x8b\xe2\xd1\x0a\xf5\x2e\xaf\x63\xf6\x2d\x32\xc7\x26\x7f\xcc\x22\xe6\x5d\x37\x2c\x77\x3d\x4d\x1f\x3b\x36\xf4\xe4\xf6\x0b\x14\x56\xd0\x61\x65\x10\x07\x7b\x5a\xdf\x03\x25\xe3\x2a\xd4\xb7\x69\xed\x5e\x49\x2c\x04\x5e\x55\x97\xf0\xd3\x68\xfb\x87\x70\x2a\x26\x82\x9e\xe7\xe9\x86\x53\xec\x40\x9e\x0f\x10\x87\x90\xd6\x19\x3d\x1f\xa0\x3d\xec\x7f\x3c\x1f\x9e\x48\x9e\x8f\x32\x62\xfa\x30\xca\x0a\x2d\xae\xdf\xf2\x69\x96\xae\xbc\x42\xc9\xe3\x8e\x38\xfb\xdf\x64\xa4\x4a\x3a\xba\x94\xdb\xf2\x1a\x5f\x9f\x3f\xe9\x86\x27\x92\xe7\x23\xe0\x33\x3b\x35\x8e\x35\x2b\xe9\xa3\xef\x28\xb7\xd0\xed\x89\xa7\xba\xaa\x66\x4f\x5b\x3d\xc8\xb9\xc8\x68\x4d\xf8\xc9\x1e\xda\xd6\x9d\xbf\x48\x24\xcf\xc7\x38\x4d\xf5\x06\xcf\x6b\x6b\xae\x7d\x4a\xe6\x9c\xcc\x61\xbd\xab\xa2\x72\x66\x92\x53\xd2\xfb\xcd\x61\x78\xae\x1a\x12\xc9\xb3\x96\xff\x9b\xcd\x45\x50\x5d\x22\x77\xf0\x37\xee\x9c\x63\x6d\xae\x82\x41\x49\x55\xf4\x78\x92\x99\x4f\xf5\xbd\x71\x37\x48\x4f\x66\x13\xb8\x53\xcd\xfc\xbf\x2a\xf0\x31\x40\x57\x5a\x80\x38\x58\x07\xc7\xd8\x6b\x32\x9c\xe8\x8f\xd5\x3f\x3e\x1d\x32\x9d\xe0\xe2\x0b\x12\x16\xa9\xba\x7c\xa3\xd9\x63\x79\x90\x40\x43\x37\x7f\x84\x41\x1b\x72\x5f\x01\x38\x78\x66\x3b\x2a\xb4\x0e\x56\x7f\x85\x6f\x8c\xb6\x1d\x78\x8f\x52\xd0\x57\xb9\xd6\x5e\x68\xdf\x22\x54\x93\x29\x90\xce\x26\xd0\x79\xa4\xda\x02\xa5\x8e\x00\x70\xb0\x2e\x53\x75\x31\x18\xd3\xc8\x63\x89\xd5\xfb\x05\xb5\x51\x60\x06\x96\xd4\x4f\x59\x6d\x42\x8f\x6a\xa9\x84\xbf\x15\x18\x96\xe3\x66\x46\xd0\x2d\x09\x20\x0e\xd6\xc1\x3d\x6e\x54\x7d\xdf\x5c\xd5\x99\x34\x3b\x0e\x8a\xf1\x67\x0b\xcc\xd9\xcb\xef\x0e\xdf\xa4\x76\xb9\xca\xd0\x51\x2e\x57\xd6\xb6\x08\xfd\x98\x07\x71\xf0\xf9\xf9\x28\x4d\x41\x4e\x92\xe2\x6b\xa7\xdf\x63\x35\xa8\xfa\x31\x3e\x79\xc7\x92\xf5\x36\x96\x5c\xca\x13\x14\xe3\x03\xe5\xce\xae\xfd\x88\x0e\x0e\xe2\x10\x1d\xfc\x6c\x9e\x0f\x50\x9f\x41\x96\xd6\xa4\xe1\x28\x25\xfd\xe4\x0a\x46\x02\x2f\x4e\xef\x05\xfb\xa0\x00\xf4\xe7\x5d\xce\xbe\xc2\x52\xb4\x12\x4b\x5c\x6e\xc5\x18\x7d\x26\x88\xd7\x07\x71\x30\x69\x49\x8f\xca\xac\x9f\x3c\xe7\xb3\x28\x2d\x55\xf1\x27\xbb\xff\xb9\x51\x89\x9b\xfb\xf7\xb8\xe9\x20\xbd\xa6\xbc\xa6\xcb\x27\xfd\xcb\xd0\x69\x07\x10\x07\x93\x56\x2c\x7a\xe1\x95\x8d\xda\xdb\xea\x6e\xcb\x16\x63\x1c\x39\x13\xdd\x28\xca\x98\x0f\x45\xba\x83\x24\x36\xc5\x1d\x4f\x2e\x47\xfe\xd6\x45\x84\x05\x71\x70\x03\xfd\x95\x54\x12\xf5\xf4\xa2\x00\xff\x51\x4f\x92\x8f\xb3\xb4\xd9\xba\x56\x5a\x2d\xcf\x07\x9a\xf2\xaf\xa3\xfc\xa2\xfc\xa8\x5a\x6c\x07\x19\xe8\x01\x1c\x4c\x5a\xf8\x4d\xdc\x3e\xfd\x6a\x86\x91\x0a\xb7\x71\xee\x4e\x2f\x29\x0f\xe0\x3c\x11\x3e\x4d\x70\x8b\x94\x1d\x0e\xb6\x09\xd4\xcf\xf4\x87\xc6\x0e\x10\x07\xdf\x02\x9a\xf9\x29\x2b\x6c\xf3\x10\xc7\x0e\xdb\xa1\x32\x6e\xd5\xb2\x4f\x65\x53\x4f\xa6\x50\xf7\xc1\x4e\xe8\xfd\xde\x23\x54\x4e\xa1\x00\x68\x0b\x08\xc0\x21\xa4\x75\x36\xcf\x07\xe8\xdb\x88\x2c\x2d\xa7\xf2\xbb\xb9\x72\x29\x17\xdd\x0c\x58\xfc\x06\x8b\x84\xf1\x7e\x6e\x5b\xd0\xe7\x0c\x5c\xcc\xdc\xa1\x1a\x9b\x76\x8e\xa7\x8b\x86\x92\x31\x80\x38\xb8\xcb\xf9\xcf\x65\x81\x94\x93\x72\xcf\x68\xd7\x94\x2c\x5f\xb2\x66\xae\x8f\xe1\x71\x22\x7b\xf4\x27\xaa\x2e\x4d\x11\xd7\xd4\x49\x6a\x21\x97\x12\x88\x83\x49\x6b\xa6\xed\x92\x9d\xc0\x4d\xf5\x88\xd9\xc8\x9c\xb7\xb1\x21\x77\x69\x2e\x48\x6f\x49\x5e\xe7\x7b\x9e\xc7\x3b\xf7\xd1\x4d\xa8\x84\x0f\x7a\x5a\x10\x07\x6b\x2c\x35\x7e\xfe\xfa\xa5\x6f\x6b\x57\xc8\x6f\x0c\x4a\x6f\x76\x2e\x2b\xa0\x6b\x7f\x99\x1c\x66\x4a\xee\x96\xdc\x9c\x35\x8b\x2b\xec\x86\xb6\x01\x41\x1c\x4c\x5a\x4b\x49\x53\x31\x79\x0f\xfa\x35\x92\x7f\xb5\xe9\x99\x7e\x2d\xa9\xf9\xf2\x77\x0e\x8b\x23\x17\x4d\xc5\x4b\x1f\x77\xff\x4f\x38\x46\x1b\x74\xf6\x09\xc0\xc1\x9e\xd6\xb9\xc8\xc0\xf2\x9e\x25\x77\x30\x81\x4a\x93\xa5\xe0\x0e\x51\x49\xaf\xf4\xef\x1b\xcb\x3e\x81\x49\x45\x6f\xe2\x8d\xb1\xbd\x76\xe5\x11\xd2\x02\x71\x08\x69\x9d\xcd\xf3\x01\xfa\xcb\x8f\x2c\xad\xf1\x83\xee\xfb\x9d\xcc\xbc\x69\xb8\xa3\x25\x32\xbf\x02\x4d\x26\xd1\xc8\x12\x13\x7c\xdf\x9b\x58\x16\xa4\xc8\xfb\x0c\x6c\x7d\x83\xf6\xeb\x40\x1c\xfc\xd8\xcf\x8d\xde\x67\x21\xf2\x2d\x5d\xae\xb9\x7e\xa8\x74\x5a\xa9\xac\x52\xb3\xbb\x8e\x84\x3d\xc2\x0e\x11\x9a\xa6\xb7\x9d\xa2\x3e\x41\x06\x1d\x10\x07\x93\x56\xe3\x23\x9e\xa8\x8b\xea\x99\xbd\xb1\xee\xaf\x37\xaa\xbc\xa7\x97\xef\xd0\x8e\x13\x0e\xef\xa5\x52\xb9\x25\xba\x0b\x71\x56\x96\x64\x40\x47\x3e\x00\x1c\xac\xb1\x48\x45\x1e\x3a\x6e\x2f\xbe\x29\xee\x97\x68\xfb\x3e\x7a\x75\xe4\x58\xaa\x2c\xe0\xc3\x01\xf9\xe2\xa5\x27\x77\xac\x6a\xd9\x2a\xec\xa0\x9b\x68\x40\x1c\x4c\x5a\x2e\x45\xed\x81\xed\x71\x09\xd6\xbc\x4f\xe9\x53\x70\xdf\x37\x62\xad\xba\xc4\xde\xc9\x3d\xf9\xc6\x5a\x76\x1f\xf3\xf0\xf6\xca\xc6\x06\xe4\xf9\x30\x20\x6f\x09\xee\xa9\x0c\xdc\xb8\xf9\xf8\xe6\xd7\x9e\x94\xe9\xae\x84\xd5\x62\xf9\x08\xa5\x5f\x1b\x05\x55\x4f\x96\xc5\x1b\xe8\x3c\xfe\xed\xf9\xc8\x2b\xea\xda\x94\xda\x78\x57\x31\x40\xe5\x27\x2c\x8b\x55\x93\xfc\x44\x5a\xaa\x41\x43\x9b\xa9\x5c\x90\x8d\x7a\xac\x65\xe1\x00\xf7\x5f\xa8\xac\xa2\x6a\x6d\xdb\xbb\x61\x46\x2a\x8c\x79\x41\x63\x26\x16\x54\x4e\xfa\x57\xcc\xcc\x53\xb4\x1f\xfe\xc4\x8d\xd2\x54\x1a\xf3\xf3\xc1\x3c\x1f\xa0\xc8\xc8\x9e\x8f\xbd\x80\x99\xdd\x9f\xbd\x19\xa7\x03\x7c\xea\xe3\x09\x41\x1f\x97\x97\xbd\xa2\x8d\xcb\x98\x2f\xb5\x3d\x18\x2f\x1f\xe9\xf9\xe8\x95\xfa\xef\xed\xe6\xc2\xfd\x8b\x2b\x09\x14\xed\xda\x52\xa4\xd5\xfd\xcc\xac\x6a\x27\x54\xf1\x9b\xa1\x14\x36\x83\x71\x1b\x3e\x9e\xaa\x9e\xa1\x62\x90\xe7\x03\x14\xf3\x1f\xcf\x47\x3d\xdc\xf3\xb1\x48\x86\x95\x9b\xd3\x76\xa7\x92\x6a\x6f\xf1\x67\xde\x9d\x95\x0f\x07\x43\x83\xb5\x22\xd3\x45\x1f\x25\xfd\xcd\x14\x69\xfa\x66\x42\xce\x3d\xc9\xad\x47\xf2\x7c\x64\x79\x6d\xba\x45\x08\x8f\xa0\xc5\x47\xdf\xc0\x2b\x51\xb1\x13\x9f\xca\x92\x75\x8b\xdb\xe5\x32\x65\x98\xd9\xde\x1b\x25\x2e\x13\x39\x7f\x91\x48\x9e\x0f\x85\x14\xec\x67\xbd\x58\x77\x23\x56\x62\x52\xe4\xbd\xb1\xc8\xd9\xd1\xcd\x9a\xeb\x65\xde\x16\x6f\x67\x35\x73\xd1\xfb\x35\x66\x98\x9c\xbf\x48\x24\xcf\x47\x92\x6f\xb1\x23\xfb\x4f\x6a\x7d\xe1\x9e\x1b\x49\xdc\x25\x59\x69\xbf\xa8\x0c\x13\xf0\x09\xef\xf9\xfa\x3d\xce\xbe\x56\x93\x5d\x83\x75\xfe\x22\x91\x3c\x1f\xf6\x12\x12\xa7\x07\x89\x5a\xd6\xae\xe1\x9f\x78\x73\xd7\x46\x5d\xa5\xca\x6f\x64\x47\x67\x54\xc7\xbf\xda\xd2\x78\x7a\xf7\x78\x76\xf9\xfc\x45\x22\x79\x3e\xb4\x1d\xd8\x1d\x42\xc6\x3b\x2e\x5b\x8f\xaa\xb6\xd9\x1b\xb9\x62\xf7\x1f\x7c\x09\xce\xe3\x18\xf2\x68\xc0\xe2\xcf\x92\x35\x67\x8d\x3b\x7f\x91\x48\x9e\x0f\xbf\x9e\xdf\xa1\x94\xf4\xbc\xe2\x99\x9b\x83\x6f\xca\x2f\x8c\x34\x92\x4e\x39\x17\x90\xe2\xe8\x8e\x44\x34\x0d\x6c\x76\x69\xc7\x88\x9e\xbf\x48\x24\xcf\xc7\xda\xc2\x60\x3e\xba\xee\xd3\x23\xea\x32\xf1\x1f\x07\x27\x6f\xaf\x75\x12\x49\xff\x90\xdc\x8f\xca\xf2\x3a\x10\xb1\x33\xe1\x46\x49\xfc\xdf\x2c\xcb\x40\x5d\x11\x79\x14\x6a\x68\x97\x6e\xfe\xe9\x33\x29\x72\xb2\x6e\xbc\x56\xc1\x3d\xc0\xb0\xd6\x9a\x6e\x6f\xd2\x4e\x37\xd2\x2d\x74\x2f\x40\xfb\x1a\x1a\xb4\x2c\x03\x71\xf0\xeb\x9a\xf1\x3f\xd3\x1d\xfc\xf8\xf2\x6a\x2d\x22\xee\xf7\x50\xc2\xc1\x13\x23\x26\x0c\xdd\xf8\x2a\xb1\x10\x27\xcf\x3b\x93\xe6\xd8\x17\x20\x2f\x1f\x88\x83\x8d\x42\x16\x3c\x8d\xe4\xb7\x83\x26\x0f\x6f\xd4\xbf\xa1\x97\x74\xba\xfd\x7b\xb7\xa5\xe0\x7a\x6f\x39\x53\xee\x81\x08\xcb\x25\x25\xc6\x42\x68\xa6\x0f\xe2\x60\xa3\xd0\xf3\x28\x76\x0b\x1e\x2b\xe3\xf6\x6a\xcd\x30\xf7\x9a\x21\x2e\x86\xdd\xdc\x7e\x2a\xed\xb6\x47\x72\x2e\x6d\x21\x8e\x69\x78\xdc\x61\x90\xf1\x05\xc0\xc1\x9e\x36\xe3\xc0\xdf\xf4\x80\x95\xa3\x17\x73\x2b\x86\xd4\x8c\xea\xc6\x47\x3d\xf1\x1a\x2e\x46\x65\xce\x67\x2a\x99\x62\xae\xfc\x44\x91\x50\xdd\x82\x38\xd8\xd3\x72\xea\x90\x54\x25\x7d\x68\xb8\xbd\xaa\x62\x3b\x59\x79\x89\xdc\x7c\x94\x63\x91\xeb\xb7\x61\xcf\x7a\x51\xb0\x6c\x8a\xec\xfd\xf9\x7d\x84\xe7\x03\xc4\xfd\x93\xe7\xa3\xfe\x4c\x9e\x0f\xd0\x17\x17\x59\x59\x29\x57\x24\x23\x18\xa4\x57\x14\xd8\xaa\x93\xbb\x94\x5b\x7b\x5f\xae\xc7\x64\x11\xce\x08\x88\xf5\xbf\xea\x5f\x4b\x0f\x51\x5e\x86\xcc\x19\x20\x0e\xa6\x2c\xf4\xea\x2b\x39\x25\x7f\xbb\x7f\x71\xfa\xdf\xbc\x4b\x3c\x41\xd2\x2b\x57\xfb\xdc\x63\xe5\x23\x4e\x3c\x9b\xc8\x88\x40\x53\xa1\xca\x17\xc8\x80\x0c\xe0\x60\x6d\xb5\x62\x71\x51\x82\x72\x31\xb9\x1d\x6f\x23\x25\xf4\x31\x1b\x4b\x4e\x75\xce\xdf\xc5\x7c\xb6\x6d\xc5\xd5\x28\x12\x6f\xd9\xf8\x43\xc8\x9c\x01\xe2\x60\x6d\x45\xef\xe9\xca\xa3\x6d\x70\x6b\x3a\x89\x4c\x81\xc4\x7e\x8b\xc5\x54\x45\xd6\xf3\xba\x14\x0a\xf6\xb3\xd6\x96\xc7\x9f\xe7\xd4\x4c\x6e\x20\xc2\x82\x38\xf8\x25\x8e\xc1\x2c\x9f\xdb\xa9\xe3\xb7\xf5\x18\x4f\x88\xf6\xd6\x6a\xd2\x38\x39\x88\xfe\x7e\xca\xac\x3c\xf6\x73\xe3\xb1\x70\x3d\x7c\xbe\x80\x08\x0b\xe2\x60\x4f\x7b\x7d\xe4\x18\x67\x0e\x9d\xfd\xc2\x1f\xdc\x2c\xbc\x4f\xeb\x27\x29\x1b\x98\xba\x23\x5a\xa3\xb6\x82\xaa\xef\xdd\xf5\x49\x39\x73\x49\x10\x53\x67\x10\x87\xb8\x16\xf1\x6c\x9e\x0f\xd0\xc8\x8a\x2c\x2d\xe7\x0f\xd6\xee\x5b\x44\x9e\x62\xbc\x17\x7b\x0d\xb1\x31\xfc\x50\x68\x7f\xa3\xba\x86\xdc\xde\xd2\x38\xe0\x7e\xa6\x91\xd4\x66\x06\x1d\x16\x07\x71\xf0\xe4\x44\x4f\xee\xd0\x38\xda\xf9\x32\xba\x0a\x5b\x31\xdd\x1d\x48\xf3\x4f\xbd\xea\x59\xef\xbb\xf0\xd5\xee\x7d\x6f\xc9\xa8\xbb\x17\xeb\xff\x25\x27\x02\x70\xb0\xc6\x1a\xa9\x4e\x49\xfa\xec\x6c\xde\xa9\x9d\xdc\xf8\x9d\x83\xdb\xc7\x43\x82\x50\x6d\xaf\xe0\x4a\x33\xfa\x7b\x8d\x71\x5d\xc6\x5a\xcb\x65\x44\x58\x10\x07\x6b\xac\x49\xb6\x17\xe9\x97\x2b\x6a\x31\x9e\xa7\x5a\x16\x27\x27\xac\x7e\x1a\x56\x68\xe2\x8e\x17\xfa\x91\xfb\x95\xe9\xa4\x38\x4f\xed\x2f\x94\xcf\x1f\xc4\xc1\x9e\xf6\x0b\x8f\x12\x83\xa7\x61\xc7\x78\x3c\xab\xf6\x82\x62\x52\xfb\x1d\xf2\x97\xdc\x91\xa4\x8c\x36\x76\xc9\x7c\x24\x6f\x05\x86\x5f\x0f\x22\xc2\x82\x38\xd8\xd3\xfe\x31\x4e\x50\x1d\x9f\x1f\xd8\x3f\xc1\xbc\xc0\x61\xfa\xd9\x81\xfd\xf0\x03\x7d\x38\x9f\xb4\x7c\xd1\x5b\x47\x9d\x81\x32\x42\x4a\xe8\x58\x33\x88\x43\x48\xeb\x6c\x9e\x0f\xd0\x0c\x0a\x59\x5a\x2f\xc2\xf8\x7d\xe3\xea\xa5\x6c\x1f\x8b\x64\xec\xc5\xd0\xe7\xd9\x39\x3c\xd6\x08\xe2\xf0\xca\x4a\xbe\x70\x7b\xf6\x9d\x99\x8b\x30\x94\x6e\x1d\xc4\xc1\xa4\xc5\x73\x14\xee\xc9\x2c\x47\x87\x46\x5d\x26\x45\xcb\x62\x32\x3b\x52\xa1\xcf\x7e\x91\xba\x93\x07\xcb\xf3\xd5\xf7\xb4\xf8\x35\x32\x28\x03\x27\x88\x83\x35\xd6\x84\xd2\x8e\xb2\xde\xed\x56\x4b\xe9\xa4\xf4\xfb\x7b\x0e\xb7\x99\xd9\xdf\x66\x90\x24\x7c\xc8\x69\xff\xfd\xb8\x86\x55\x88\x3d\x46\x0c\x11\x16\xc4\xc1\x1a\x2b\x77\xeb\xb4\x6a\xc2\xea\x3a\xf9\xf2\x77\xd5\x80\x9b\xa7\xd9\x37\x1c\x5e\x4e\x7b\x46\x6c\x2d\x67\x79\xad\x49\xe5\x5f\x4d\x23\x67\x40\x84\x05\x71\xb0\xa7\xdd\xf5\xa3\xbe\xba\xcb\xb4\x30\x7d\x33\xa5\xda\xc5\x61\xa0\x8f\x3d\xac\xf1\xa4\x45\xfe\xe0\xe1\x7b\x67\x55\xeb\xdc\xf2\x52\x0a\xc8\xfc\x04\xe2\x60\x4f\xfb\x6d\xbd\x40\xf0\x54\x48\xa7\xab\xcc\xe3\x57\xe9\xee\x6b\xcb\x92\x16\xb1\xdc\xd7\xed\xfa\x96\xd5\x1d\xf3\x1b\xfe\xe3\x45\x35\xe1\x08\x69\x81\x38\x84\xb4\xce\xe6\xf9\x00\xcd\x94\x91\xa5\xb5\xf4\x7b\xb4\xe7\x62\x79\x3f\xbb\x5f\x52\xa2\x9c\x23\x17\x16\x83\x6e\x6a\x26\xdd\xcf\xf8\xb1\x34\x9b\x6f\xd7\xd7\xc9\x39\x45\xa0\xa4\x2c\x20\x0e\x26\x2d\x4f\x23\xc9\xa2\xb5\xb7\xa9\xfc\xf7\x37\x18\xde\x1d\x5c\xef\x7f\x19\xdf\x34\x94\x94\x3d\x74\xd9\x35\xd4\xfb\x49\x04\xd1\xa7\x1b\xdf\x10\x61\x41\x1c\xac\xb1\x82\x9a\x62\xb6\x18\xd6\xdf\x35\x71\x56\x14\x47\x84\x11\xfb\x6c\x3a\xa7\xc9\x58\xde\xc4\xce\x91\x0f\x38\xd9\xd2\xd6\x60\xe0\x81\x12\xde\x80\x38\x58\x63\x31\xf5\xa5\xf7\xc4\x09\x18\x27\x27\x85\x87\x1c\xef\x67\x63\x04\x52\xf3\x4d\x16\x59\x27\x6d\x13\x89\xcb\x62\xcb\x8a\xa9\xf9\x40\x97\xa6\x83\x38\xd8\xd3\x9a\xa0\x6a\x72\xd7\xf0\x4b\x3e\xb9\xb9\x9d\xfd\x39\x7c\xf8\x51\x7b\xc3\x0c\x9a\x88\x41\x44\x06\x8f\x8d\x40\xd7\xbb\xa7\xcf\x78\xa1\x94\x6a\x20\x0e\xf6\xb4\xdb\x97\x0a\x89\x33\x0d\x1e\x34\xf7\x61\x9d\x7e\x92\xbf\x8c\xfe\x37\xb2\x61\xd9\x4b\xbd\xec\xbb\xf7\x76\x30\x31\x8e\xf5\x2d\x5a\x68\x9b\x12\xc4\x21\xa4\x75\x36\xcf\x07\x68\x45\x84\x2c\x2d\x1c\xf5\x4b\x41\xa8\xb8\x26\x6f\x47\x0b\xa6\xb8\x52\x53\x29\x0f\x14\x1a\x27\xc9\xcd\xe8\x0a\x2b\x5c\x53\xa5\xae\xc5\x7e\x30\x72\x44\xbc\x3e\x88\x83\x49\x6b\x9e\x46\xae\xe8\x45\x4b\x1f\xf7\xcf\x2b\x4c\xbb\x99\x47\xe8\x5d\xc4\x4c\xcd\xd9\x47\xc2\xa1\x29\x25\x86\x1c\xe2\x17\xdd\x74\xa0\x01\x11\xc4\xc1\x1a\x8b\x2d\xac\x8c\xb1\x44\xe6\xce\x0c\xad\xb8\x56\x47\x9e\xdc\x64\x2d\xcb\xcc\x0e\xe5\xf4\x30\xf7\xd0\xc7\xe2\xea\x19\xf7\xcb\x39\x90\x9d\x08\xc4\xc1\x73\xaa\x39\x4e\x18\xcb\xf6\xab\xe1\x0a\x5c\xfb\x56\xdc\x2f\x62\xe1\xfb\xe5\x8d\xf2\x80\xad\xc8\x4d\x23\x4d\x3b\x1c\xa9\x2d\x2a\x85\xdf\x88\xb0\x20\x0e\xf6\xb4\x83\x15\x7c\x84\x1d\x8d\x29\xa3\x43\xda\x14\x26\x56\x25\x8d\xea\x2f\x8a\x1b\x34\xac\xda\x7f\xe5\x77\x0e\xea\xc8\xbe\x6d\xcd\xa4\x40\x84\x05\x71\xb0\xa7\x95\x1c\x37\x61\xd2\xa0\xa6\xff\x19\x5c\xea\xfa\xec\x1a\x99\x7e\x2b\x9b\x73\x90\x7c\x49\xab\xa2\xd6\x4c\x7d\x62\xdb\xc8\x18\xcb\x0d\xe8\x1e\x3d\x00\x87\x90\xd6\xd9\x3c\x1f\xa0\x95\x2f\xb2\xb4\x84\xbe\xfc\x62\x1d\x4a\x27\x9d\xac\xc2\xda\x47\xb9\x4c\x7b\x14\x74\xe4\x9f\xfc\xb3\xab\xa7\x92\xf1\x97\x49\x81\x46\xc6\x82\x25\x64\x82\x04\x71\xf0\x7b\xf4\x26\xfc\x1a\x0b\xd7\x97\xd3\xac\x6f\x6b\xda\xe7\x53\x17\x30\xd7\x7c\xad\x78\xe3\x7d\xda\xbc\x12\x8c\xd6\x56\xae\xe7\xf3\x28\x14\x11\x16\xc4\xc1\x1a\x6b\x33\x60\xbb\x6d\xcd\xff\xd9\x08\x8f\xd0\xd1\x32\x4b\x6e\x60\x5c\xb9\x77\xb1\x44\xe3\x5a\x86\xfc\x45\x9d\x67\x14\x0e\x2e\x73\xb7\xa1\x3f\xe8\x00\x0e\xd6\x58\x02\x65\x58\x4b\xfd\x06\xc5\x06\x43\xfc\xfd\x25\xed\x76\x55\x7f\x9c\x4e\xe4\xb5\x5e\x52\x84\xfc\x1c\x53\x54\xc2\x43\xcd\x5b\x5b\x85\x32\x52\x00\x38\xd8\xd3\xda\xcd\x05\xaf\xd7\x69\x0e\xc7\x8d\x30\x05\x97\x45\x50\x95\xbb\xa6\x27\x67\x4e\x52\x4c\xff\x51\xca\x2c\x3c\xfc\x10\x24\x79\xa1\x0c\x11\x16\xc4\xc1\x9e\xd6\x30\xfb\xad\xdc\xb6\xb0\x76\xb1\x02\xe9\x22\x09\x55\xf1\x0b\xa1\x38\x3a\x46\xe5\x03\xcd\xee\x45\x01\x39\xdb\x09\xf3\xd5\x7b\xdd\x08\x69\x81\x38\x84\xb4\xce\xe6\xf9\x00\xed\x70\x20\x4b\x8b\x0e\x07\x2d\xed\x3b\x96\xd6\x21\x8f\xaf\xcd\xa1\x25\x66\xc8\x9a\x7b\xe7\x74\x08\xcd\xbb\xc7\x0b\x56\xb6\x7e\x1b\x87\x2f\xdf\x41\xc7\x94\x41\x1c\xfc\xe7\x8a\xdf\xe3\xd4\x61\x07\x39\x51\xdd\xb4\x14\xee\xd0\x6c\xb5\x96\xcf\x4d\x16\x7e\xfe\x8f\x7e\x3f\xc5\xb2\x72\x1b\x7b\x63\xdf\xf4\x7f\x29\x64\x00\x1c\x3c\x89\xba\xf1\x6e\xae\x8b\x9e\xf8\xe9\x0c\xa1\x7c\x5b\x79\xf8\xfd\x5e\x67\xab\xf8\xf7\x5c\x1c\x38\xfe\xa1\xce\x71\xd5\xc9\xe2\xd6\xd0\x37\x16\xc4\xc1\x1a\xeb\x22\x69\x9f\xd0\xea\xbc\x28\xb5\xcc\xf3\xe8\x2b\x63\x06\x61\xdd\x8b\xfa\xbc\x2f\xc2\x09\xa4\x1b\x1a\xeb\xe6\x8e\x1d\x36\x63\xa0\x01\x11\xc4\xc1\x9e\x36\x5b\x8e\x86\x98\xa8\xc9\x9e\x2c\x60\xf9\x83\x57\x52\x42\x8e\xb5\x40\x9b\x47\x4f\x7d\xd9\x6e\xf8\x2f\x7c\xbb\x87\x34\x7e\x54\x18\x90\x77\x19\xc0\xc1\x9e\x76\x29\x9f\x3f\xc3\x43\xde\x3b\x57\x69\xa1\x27\xe1\x0f\xb7\x71\x41\x5f\x08\x06\x93\xbe\xf3\xb7\x80\x0f\x1e\x17\xba\x08\x16\xb8\x9e\x21\xa4\x05\xe2\x10\xd2\x3a\xa3\xe7\x03\xb4\x87\xfd\x8f\xe7\xa3\x1e\xc9\xf3\xa1\x25\xe4\xf1\xa4\xa8\x2e\xad\x7d\xa0\xf2\x07\x8b\xac\x13\x53\x2e\xda\xc8\x80\x36\x43\x0f\xfd\xc8\x40\xcb\x9f\xb7\x2f\xbd\xd5\xd5\xce\xbf\xd3\x87\xe4\xf9\x88\x43\x09\x6d\x6e\x4b\x37\xe5\x9d\x50\xa3\xc5\x8c\x35\xec\xf1\xb8\xff\x30\xd4\x35\x48\xad\xe3\xe6\xfd\x95\x17\x12\xc5\x47\x2f\xcf\x9b\x74\x23\xf0\x6e\x3d\x92\xe7\xc3\x50\x72\x3e\x3f\xc6\x12\x6d\x13\x03\x6f\xe9\xca\xf2\xb5\x1a\x87\xce\xa3\x58\x69\x61\xf4\xcd\xa4\x57\x31\x89\x4b\xd2\x84\x2c\x43\xff\x9b\xcd\x45\x50\x5d\x22\x77\xf0\xd3\x31\xc7\x96\xe4\xb1\xd7\x34\x3e\x66\xbd\x3d\xef\xa6\x37\xae\xe9\xca\xd2\xf7\x3c\x7a\x5b\xa4\x65\xd4\xfe\x67\x6f\x99\x4a\x13\xda\x00\x03\x71\xb0\x0e\xfe\xfd\xe5\x0c\xf3\x8f\x3c\xd3\x8b\x46\xde\x26\x8a\x1a\x4c\x03\x94\xcd\x58\x47\x15\xc1\x8c\xcc\x0e\x8c\xee\xf8\xf5\x4c\x7a\x98\x45\x90\x6f\x18\xc0\xc1\xba\xcc\x47\x31\x49\xb5\x5f\x9f\xc3\xff\x26\xf6\x19\x69\xe8\x9f\x6e\x14\x4e\x61\xb4\xd9\x67\xa8\xfd\x4d\xee\x1e\xa0\x29\x4f\x11\x5c\x4b\x41\x84\x05\x71\xb0\x2e\x93\x19\x50\x78\x6c\x26\x49\xfe\xd6\x9e\x87\x1d\x8b\xd5\xe5\x2a\x6b\x1d\xde\x2c\x2b\x5b\xc8\x85\x80\x57\xee\x94\x37\xae\x2b\x0c\x41\xd9\x0d\x41\x1c\x3c\xc5\x63\x5a\xc4\xc3\xd3\x98\x0d\x3e\xe9\xfc\xfe\xfc\x2b\xfa\xaa\xb1\xe8\x1a\x86\x0b\xf9\xb9\xa8\x3e\x6e\x7c\x0c\x93\xc6\xac\xe6\xd0\x91\x2a\x10\x07\x7b\xda\xa7\xeb\x49\x1b\x83\x04\xcd\xc6\x37\x6e\xb0\xff\xac\x9f\x49\x57\xca\xab\xeb\x11\x55\xb6\x7f\x13\x6b\xb9\x8f\x12\x69\xfe\x52\x5a\x18\xd1\xc1\x41\x1c\xa2\x83\x9f\xcd\xf3\x01\xea\x33\xff\x71\xa2\xac\xd5\xa4\x51\x40\xab\x81\x5d\xf1\xd3\xb7\x9c\x7e\x5e\xf4\x9b\x87\xa5\x26\x89\xbb\x4e\x94\x81\x5d\x7d\x38\x69\x2f\xb8\x27\x93\xa0\x13\x65\x00\x0e\x9e\x23\xaa\xee\x76\x1f\x4b\x4d\xde\x89\xf5\xfa\xa9\xa6\xa4\xda\xb5\x63\x76\xca\x8f\x54\x7e\xcb\x1f\x64\x07\xb2\x7f\x3e\x34\xb1\x4c\x87\x72\xc5\x81\x38\x58\x63\x05\x8c\x47\xbb\xa3\x60\x54\x76\xb8\xa8\xf8\x12\x64\xa3\xfe\xb4\x6a\xd1\xec\x13\x2f\x33\xc3\xa9\xbd\x4c\x49\x54\xf5\xe9\x41\x06\x94\x2b\x0e\xc4\xc1\xf3\x53\xbb\x4a\x53\x1b\x58\x07\x97\x98\xef\x0a\x90\x17\x3d\x53\xdd\x59\xc0\x6e\x0a\x88\x7e\xf4\x8d\x85\x44\xc1\x97\x6c\xf4\x89\x39\x94\x98\x16\xc4\xc1\xef\x74\x70\xd9\x77\x8e\xe4\xa7\x3d\xac\xbb\x59\x4b\x3c\x47\x27\xda\xc5\xb6\x61\x4a\xcc\x75\x77\xac\x04\xf7\x8b\xf3\xf7\x77\xb8\xb3\xaa\x88\xb0\x20\x0e\x9e\x2c\x2d\x37\x24\x0f\xc3\xbc\xdb\x60\x96\x9a\x79\x93\xc5\xce\x44\x90\xe4\x86\x88\xdc\xf7\x1c\xae\x96\x49\xc3\xc2\xd7\x5b\x4e\xcc\x6e\x08\x69\x81\x38\x84\xb4\xce\xe6\xf9\x00\x7d\x1b\x91\xa5\xe5\x9f\xc9\x3b\xf6\x54\xc5\xf4\x8b\x2f\xfe\xac\x88\x24\xd6\xed\x1f\x7d\xcf\xaf\xc6\x89\x68\xe0\x27\xa5\x66\xb3\x4d\x86\x71\x0b\x43\x2e\x0a\x10\x07\x93\x56\x1d\xbd\x3a\x5e\xc1\x20\x1e\xed\xef\x62\x49\x8b\x1d\xdf\xee\xc3\xb4\x9b\x76\xb8\xdf\xb5\xd1\x37\xa2\xef\x7e\x75\x97\xb7\x6f\x4e\x40\x84\x05\x71\xb0\xc6\x7a\x54\xfe\xd9\xed\x87\xd0\x17\xb9\xbf\xf4\x0c\x35\xd6\x06\xbc\x56\xc6\x54\x0e\xc6\x62\xa3\xa1\x8b\xfc\xf4\x6f\x86\xb6\xc7\xd1\xa1\x7f\x17\x20\x0e\xd6\x58\x37\x83\x28\x14\xc8\xb8\xac\x86\xb5\x0f\xa2\xee\x5d\x6e\xad\x7b\xd9\x10\xc4\xef\x46\x3a\xc5\xc7\x6a\xff\x65\x9b\x58\x3d\x60\x7d\x18\x11\x16\xc4\xc1\x2f\xe7\x5f\xce\x6a\x36\xe6\x98\x5d\x7e\xad\x34\x2b\x38\x1a\xe4\x25\xb3\xa5\x84\x4a\x48\xdb\x94\x17\x74\xed\xd6\x71\xad\xfd\x0f\x0c\x68\xb3\x02\xc4\xc1\x9e\xf6\xab\x34\xfa\xf2\x71\x12\xe5\x0b\x14\x41\x86\x5f\xaf\xc2\x4d\x62\x1f\x18\x2c\xd3\x1a\x0b\xa6\x07\xa7\xd4\x7e\x7a\x14\x8e\x93\xb5\x8f\x90\x16\x88\x43\x48\xeb\x6c\x9e\x0f\xd0\x5f\x7e\x64\x69\xb1\x9f\xbe\xbb\xea\x60\x68\xe3\x45\x93\xb0\x95\x7e\xf7\xf7\x97\x1b\x6f\xfb\x6f\xf5\x50\x44\x1b\x7e\x8a\x50\x15\xfa\x7c\xd3\x20\x00\xda\xaf\x03\x71\x30\x69\xbd\xdd\x6c\xc7\xd0\x8a\x95\x0a\x4e\x90\xb4\xa5\xf7\xa2\x1b\xcd\x8c\xf5\x32\xb2\x29\xd9\x4b\xf1\x75\xd0\xa3\xb8\x57\x74\xc2\x0a\x0d\x31\x20\x0e\xd6\x58\xb7\xae\xe5\x2b\xa1\x74\x30\xac\x48\x47\xfc\xe0\x6b\x7a\xf2\x7e\x31\x7b\x87\xfd\xad\x2b\x07\xcb\x29\xc1\xaf\x57\x2e\x71\x6f\x26\xdb\x11\x61\x41\x1c\xac\xb1\x3c\xaf\x75\xc9\x0b\x30\xd7\x31\x56\x54\x8b\xe5\xa0\xe1\xca\x53\xd4\x0b\xb9\x6d\xe6\x4a\x62\xe5\xa4\x6f\xa7\x93\xbc\xd7\x58\x81\x0c\x70\x20\x0e\xf6\xb4\xf3\x95\x3e\xbd\x16\x0c\x0b\x59\xb7\x84\x08\x2e\xa2\x46\xb4\x31\x7d\xd4\xe9\xb5\x1a\x9b\x7d\x26\x8e\xba\xd2\xc5\x78\xb4\x77\x7b\x0a\xf2\x7c\x7c\x7c\xe8\x18\x36\x83\x96\x34\xa1\x24\x4b\xc9\x40\xf7\xd6\x87\xec\x8a\xb3\x39\xbf\x9a\x6f\x1f\x93\x79\x47\xf3\x67\x46\x81\xcf\xd9\xff\xf6\x7c\xc8\xee\x3b\x04\xee\xd2\xea\xad\x5c\x4d\x94\x9e\x78\x58\x3b\xe3\xe5\x33\xf5\x3d\xb3\x8f\xfb\xef\xd3\xd4\xbd\x91\x7b\x98\xef\x2c\x67\xff\x85\xd6\x2c\x5a\xd8\x9a\x47\xdf\x09\xbd\x54\xcf\x10\x84\x12\x83\xb1\x44\x7c\x3a\x3d\xa8\x38\x8b\x3d\x8c\xbe\x99\xaa\xe0\x40\x65\xaf\x06\xf3\x7c\x80\x22\x23\x7b\x3e\x52\xc6\xdf\x93\x17\x6a\x4f\xbb\x09\xf3\x25\x92\x16\xa6\xcf\xf2\xb3\x33\x1a\xa6\x18\xaa\x92\xf3\xec\x86\xa2\x1a\x87\xd3\x0a\xff\x3b\x81\x5c\x8c\xd6\x1b\x7e\x12\x1e\x3b\x55\xac\xcb\x2a\x18\x6b\xf2\xfe\x74\xfa\x8f\xe9\xb5\xd7\x0a\xbf\x46\x5c\x8c\xc3\xbc\x57\xdc\xf8\x2d\x0a\xf2\x7c\x80\x62\xfe\xe3\xf9\x40\x91\x85\xcd\x38\xa7\x74\xd5\x26\xa8\x38\x09\x1f\xed\x32\xda\x67\xe1\x2b\x4b\x17\x91\xbd\x28\x31\xbc\xa5\x50\xcc\x40\x56\x91\x2e\x79\x7b\x80\x6e\xeb\xdc\x93\x5c\x14\x1e\xf8\x24\x37\xa5\xc7\x3c\x60\xb1\x29\xbe\x40\x47\x4f\xb7\x42\x21\x10\xe5\x5e\x0d\x1f\x1a\xaf\xc0\xdf\xc9\xd3\x3a\xbf\xdd\xa8\xfa\xe1\xfe\xf3\x5f\xb4\x82\x22\x06\x2f\xb2\xc4\xb6\x1c\xe3\x35\xbf\xbe\x6c\x88\xcc\x5e\xcd\x1f\xf5\x45\x6b\x41\xfc\x6a\xec\x54\xea\x5b\x83\x12\x35\x54\xe3\x65\x64\x44\xe7\x5f\x3d\xa0\x68\x23\xa5\xa3\x78\x13\x23\xde\x9f\xa9\x1a\x66\xd5\x4c\x9d\x54\x57\x7c\x3b\x96\x56\x3b\xe3\x5b\x69\x0f\x15\xc3\x64\x56\xc2\xf8\x0d\x73\xfd\x17\xe7\x2f\xd2\x09\x5e\x64\x8f\x65\xd4\x40\x46\xf5\x4e\x0d\xc5\x85\x72\x7f\xfa\x4f\x03\xb9\xf8\xe9\x3f\x18\xdb\x2d\xb3\x34\x33\x22\xd0\xb5\x43\xc3\xbf\x9d\xff\x3a\x19\x94\x70\x78\x91\x1a\x53\xbd\xa3\x8a\x95\x98\xf5\x4a\x77\x55\x13\x56\xf1\x08\x1f\x89\xa0\x1b\x91\xa6\xfe\x42\x35\x89\x4f\x1c\xec\xad\x13\xfb\x81\x7f\xfe\x22\x13\x91\x2c\x43\x5d\xa7\xf2\x8d\x6f\xad\xf7\xad\x5b\x5d\x73\x9b\x9e\xbf\x2f\xd4\xc9\x4f\x10\xea\x57\x8a\xcc\x7d\xe1\x40\x57\x5d\xc5\xac\x16\x7a\xfe\x22\xab\xe0\x45\xd6\x9a\xda\x62\x8a\x8f\xdc\xe2\x9b\x8d\x64\x46\x49\x72\x20\xde\x48\x92\x6c\xee\xdc\xbc\x6a\xd4\xfd\x70\x97\xdf\x50\x29\x9f\xc8\xf4\x7f\xb3\x2c\x03\x75\x45\xe4\x51\x68\xf1\xeb\x57\x71\x65\xbe\xc0\x9b\xe1\x54\xf8\x2e\x07\x0d\xd9\x42\x57\xd7\xcc\x63\xad\x99\x16\x42\x54\xe5\xc2\xf1\xa4\xc7\x1f\x6a\x42\xa7\xc5\x01\x1c\x6c\x14\xea\x92\xb3\x79\x7b\x97\xcb\x26\x2b\x1f\xef\xd2\xce\x36\xdd\xaa\x5a\x8e\x6e\x48\x81\x24\xce\x04\xaf\x40\x00\x5e\xfa\xe1\x0c\x0e\x09\x22\x2c\x88\x83\x7d\xd7\x2f\xf4\x61\x7b\x2c\x2c\x37\x18\x9c\x16\x0e\x9f\xaa\x2b\x66\xea\xd6\x0a\x2a\xd6\xb7\x57\xbc\x96\x11\x75\xa0\xfb\x3c\xf1\x24\x9c\x0c\x11\x16\xc4\xc1\x46\x21\x6d\xa2\x79\x7f\xf5\xa9\xf0\xaf\x6f\x34\xff\xf4\x1a\xa4\x25\xf8\x93\x5f\x7b\x66\xbe\x9b\xd0\x70\x77\x45\x75\x31\x5f\xaf\x95\x05\x3a\x25\x0a\xe2\x60\x61\x9b\x3f\xfe\x90\x97\xaa\x97\xf3\x97\x1f\xb5\xa1\x34\x97\x34\xf5\x8f\x0a\xad\x7f\xeb\xf5\x04\x5f\xb7\x68\xdf\x20\x13\xcb\x83\x4b\x04\x11\x16\xc4\xc1\x2a\x61\x8d\x35\xed\xba\xad\xeb\xce\x45\xd4\x92\xdf\xd6\x1e\xf1\x3f\x64\xf6\x3f\x84\x87\xda\xd2\x52\x61\xf8\xb1\x34\xc7\xd9\x76\xee\xfe\x45\x78\x3e\x40\xdc\x3f\x79\x3e\xfe\xff\xdf\x73\xf0\xfc\x06\xf4\xc5\x45\x56\x96\xb2\x38\x81\x97\xfd\x7a\xc4\xf2\x4f\x03\x31\xef\xe8\x1f\x0f\x58\xb6\x6b\x56\x62\xaf\xf2\x5e\xe2\x19\xbb\xa0\x4d\xcf\xc1\x79\x1d\x3a\x6e\x05\xe2\xe0\xc7\x9a\x8b\xcb\xb7\x66\x36\x66\x2f\xa3\x4f\x4d\xd3\xa2\x39\x68\x0c\xa2\xe2\x2e\xec\xbe\xd6\x09\x1b\x08\xe1\x9c\x13\x35\xf4\xd8\x86\x5c\x14\x20\x0e\x56\xa9\xc2\xb8\xf2\xf1\xa6\x79\xad\x9d\xca\x68\x13\xa5\xf7\xd8\xbd\x2a\x43\xd6\x7b\x9d\x9c\xbc\xe8\x1a\xa2\x76\xc4\x73\x0f\x47\xe3\xa0\xdf\x1b\x20\x0e\x26\x81\x67\x33\x77\xe6\x8b\xe3\x72\xc7\xdc\xdf\x0f\x46\x10\x5e\x17\xb6\x48\x5d\x5f\x34\x74\xd2\xa4\xa7\x44\x7f\x2a\x94\xfe\x80\x8a\x10\x5a\x3e\x81\x38\x58\xd8\x90\x8b\x9d\xb8\x2f\xef\xad\x0f\x49\xcf\xbd\x29\xf4\x54\x64\x71\xb9\x38\x14\x16\x67\xc6\x8d\xb9\x9e\xac\x9a\x59\x8e\xbd\x8b\x0d\x25\xf6\x04\x71\xb0\x4a\x38\x1c\xcd\xa2\x65\xe2\xcd\x25\x79\x5e\xae\xaa\x4b\xe0\x80\x85\x7d\xd3\x7f\xc7\x9e\xe7\xbe\xf1\x2d\x7c\x14\xfb\xe7\x2f\x0e\x96\xaa\x11\x53\x67\x10\x87\xb8\x16\x91\xe7\x4c\x53\x67\xd0\xc8\x8a\x2c\x2d\x2a\x0f\x82\xb9\xad\xbf\x57\x65\x03\x89\x17\xe7\x5e\xb3\x26\x6d\x90\x10\x09\x3f\xfc\xb9\x6f\xa6\x7a\x75\xed\x05\x66\x99\xab\x3c\xb4\xe9\x03\xe2\x60\xd2\x22\xf0\x20\x4b\xe2\x73\xc7\x66\x37\x5f\x7e\xab\xe7\x4a\xc2\xb7\xa1\x90\xce\xe1\x83\x22\x49\x13\xaa\x7b\x21\xb9\x52\x93\x92\x1b\x9a\xe3\x82\x38\x58\xad\xfa\xcb\x14\x99\xa9\xeb\xb3\xf4\x09\xbd\xa9\xe9\x2f\x16\x5e\xa8\x1b\x7f\xfd\x8c\x32\xbb\xa0\x54\x34\x3a\x55\x33\xfb\x90\xd8\x06\x0f\x5a\x43\x02\x38\x98\x06\xac\xec\xbf\x75\x78\xd9\x93\xdd\xf3\x11\xb1\x78\xd2\x45\x13\x2f\xfe\x9c\xa9\x89\x7b\xc8\xf9\x99\x00\x8e\x08\xcd\xf3\x10\xfa\xfe\x2e\x44\x58\x10\x07\x0b\x7b\xbf\x6d\x66\xff\x77\xcc\x97\x3c\xfc\x57\x0c\x69\x18\x2b\xfd\x43\x26\x56\x38\xa1\xcf\x08\x1c\xd9\x2a\x6b\xe9\x64\xda\xd7\xbb\xa6\x11\x61\x41\x1c\xac\x12\xde\x15\xc6\x0b\x3f\xc3\xb5\xfc\xf1\x88\xe9\x35\x45\xb7\x84\x53\x51\xb3\x24\xbe\xa4\x72\xfc\xd7\x8e\xd1\x81\xcf\x6d\xf1\x97\xd8\x5f\x22\xa4\x05\xe2\x10\xd2\x12\x3b\xdb\xb1\x66\xc0\x0c\x0a\x59\x5a\x28\x09\x38\x5d\x2f\xf5\x4f\x27\x71\xb3\xe9\x6c\x9c\xf3\x27\x3c\x3b\x3a\xef\xa3\x1e\x7d\xae\x36\x37\x60\xbe\x75\x6d\xea\xab\x13\xf4\x79\x01\x71\x30\x69\xb1\xe8\x15\x5d\xf6\x1a\x4e\xb8\x43\x80\xb6\xc7\xcc\x23\x9f\xd2\x63\xff\x8a\xc0\xe6\xe7\x7b\xee\x79\xf5\x12\xfc\x7b\x23\x09\xf9\xf6\x88\xb0\x20\x0e\x7e\x05\xf5\xd8\x05\x03\x5e\x27\x2f\x5b\x8a\xf9\xfd\x8f\xdc\xcb\xd6\x6d\xfc\x32\xf1\x7f\xa5\x37\x57\x6f\xd0\x05\x56\x93\xd7\x4e\xda\x42\xd7\xa3\x82\x38\x98\x06\x2e\x84\x4e\x97\x6e\xa5\xa1\x8f\x12\xcd\xf9\x4d\x05\xe5\x05\x84\xc9\x8a\x61\x12\x16\x1a\xdc\x47\x53\xb7\xc9\xfa\x98\x95\x71\x5c\x0d\x0d\xb3\x00\x0e\x16\xf6\xfd\xd2\x15\x45\xd4\xde\xb0\x10\xba\x5b\x42\xb1\x7f\x56\xe9\x8c\x68\x07\x96\xd6\xde\x7c\xf9\xc6\x5d\xf0\x12\x23\x80\xa0\x7e\x16\xfa\x6b\x02\xe2\x60\x95\xd0\x3b\x40\xef\x16\xbf\xe2\x20\x56\x84\x7f\x8b\x82\xe6\xcd\x57\x9a\x38\x2e\x5b\xe1\x47\xbc\xfc\x2a\x7c\x34\xdb\x93\x61\x34\x47\x4c\x08\x69\x81\x38\x84\xb4\xb4\xcf\x24\x2d\xd0\x4c\xf9\x3f\xae\xa0\x76\x51\x52\x7e\xfc\x8d\xfd\x93\xb9\xc1\xe1\xbd\xd9\x44\x61\x2c\xbe\xd3\xd8\x19\xcc\x71\x4e\xa9\xfa\x27\x74\x65\x5a\x5b\x63\x8c\xd0\x39\x42\x00\x07\x93\x56\xea\x89\x62\xb6\x67\x81\x91\x7b\xf5\x4d\xb4\x17\xcc\xe5\x6e\x0c\xaf\x4e\xca\xbe\x1c\x53\x34\x98\x3d\xac\xf1\xeb\x0c\x0d\xfa\x01\x99\xb4\x40\x1c\xac\x56\xe3\xd8\xe6\xc3\x89\xf5\x67\xfb\x4e\xdf\x10\xfb\x3c\x9a\x2e\x62\xee\xea\xfe\xd8\x4b\x14\x35\xfe\xc1\xbe\xfa\xe1\xec\x26\x83\xe9\x33\x44\x58\x10\x07\xff\xbc\x5c\xff\xda\xce\x23\x66\xba\x9a\x7b\x53\xd5\xf3\xfd\x8a\xe4\xe3\x81\x5e\xee\xe2\x97\x57\xcb\x69\xfe\xdc\x78\xc9\xb0\x2b\x8f\x02\xdd\x4a\x06\xe2\x60\x61\xbf\x74\x10\xca\x2d\xc9\xd8\x77\x7f\xdf\xe0\x89\x41\x31\x5e\x0d\x3b\x58\xd6\xfa\xab\x59\x56\xbe\x80\xb2\x31\x95\x98\xb7\x5a\x42\x07\x39\xd5\x00\x1c\xac\x12\x5a\x87\x89\xfb\x8d\x82\x04\xaa\x53\x27\xa5\xe9\x06\x4b\x95\x48\x92\x71\x5c\xf3\xf1\xf8\x26\xa5\x0a\x6e\xf2\x1f\x78\xdc\x2e\x7c\x8d\x90\x16\x88\x43\x48\xcb\xe9\x4c\xd2\x02\xad\x88\x90\xa5\x45\x4b\xaa\x89\xcb\xff\xec\x86\x80\x51\x6e\xb8\xac\x31\x4d\xcd\xc5\xdd\xb5\x87\x51\xab\xf5\xaf\x4a\x2c\x22\xc9\x56\x0e\x6c\x5e\x43\xdb\x94\x20\x0e\x26\xad\x17\x24\x91\x97\xe5\x88\x47\x6d\x79\x9d\x22\x1e\xd8\x8f\xc5\x11\x2a\x58\x48\x11\x46\x76\xe0\xa9\x51\xbb\xe6\xaa\x1e\x0b\xe7\x3d\x80\x0c\x70\x00\x0e\x56\xab\x0a\x8c\x3a\xca\x2c\x09\x95\x4b\x6b\xa2\x53\x35\xe6\x98\x1c\x18\x43\x26\xcf\x44\x93\x28\x6a\x5a\x0c\xa4\x47\x2e\x8d\x4d\xd9\xba\x23\xc2\x82\x38\x98\x06\xa8\xf2\x43\x9b\xcd\x5f\xce\xdf\x73\xa8\xbc\xdf\x7c\xe7\xf9\xbe\x1a\x05\xdb\x77\x47\xc1\x7e\x22\x61\x02\x81\x0f\x15\xeb\x7c\x66\xd0\x0e\x38\x88\x83\x85\x95\x7b\x3f\x48\xe7\x79\x2b\xb1\x75\xfc\x5d\xa0\x6a\xde\xbe\x49\xf2\xf4\x36\x61\xae\xd2\xd3\xc4\x65\xc9\x5e\xd3\x90\x35\x3f\xd6\x5c\x44\x58\x10\x07\xab\x84\x0f\x55\xbf\xb4\xe3\x36\x45\xb1\x72\x94\xe3\xa6\x7f\xfa\xf6\x1b\x6f\x4a\x06\xa0\x5d\x5f\xc6\xc1\x18\x8c\x62\xf9\x3a\x7f\x7f\x13\xca\xa9\x06\xe2\x10\xd2\x0a\x3f\x93\xb4\x40\x2b\x5f\x64\x69\x05\xa3\x05\xd5\xdf\x8c\xb4\x8a\x8c\xc1\x6d\xac\xf1\x6a\x56\x98\x58\x8b\xba\xf8\xfd\x84\xe2\x59\x44\x21\x67\xe1\x93\x14\x09\x8f\x3d\xc4\xeb\x83\x38\x98\xb4\xda\xc3\x1d\x43\xdb\x5f\xe9\x36\x94\x35\x0f\xaf\xf4\x04\xd2\x93\x4f\xf4\x1e\x90\xd2\x69\xb4\x78\x2f\x11\xbf\xac\xb4\xe8\xe9\x83\x36\xfe\x40\x1c\xac\x56\xf1\xfc\x9b\xad\x77\xa9\x33\x8b\x74\x5c\x12\x3f\xd5\x4d\x2c\xff\x62\xe9\xe9\x08\x78\x42\x51\x62\xc3\xf0\x9d\x2c\x4c\x38\xfc\x0a\xf4\x31\x04\x71\x30\x0d\xec\xa4\x74\xf7\x1b\x18\xf2\x17\x5b\xb6\xb8\x0f\x34\xd5\x58\xb4\x50\xc7\x4c\x5c\x0d\x7b\x60\x57\xb2\x34\x7f\x4a\x32\xc5\x10\x0a\xa5\x7c\x07\x71\xb0\xb0\x63\x87\x5a\xea\xfc\xaf\x17\xc3\x4e\xee\x3b\xa6\x13\x15\xf5\x46\x9b\xb5\xe9\x05\x2b\x2a\x6a\x3e\xc9\x15\x90\xf5\x3a\xda\x74\x87\x52\x34\x81\x38\x58\x25\x64\x35\xce\xf8\x4e\x7c\xb2\xf9\xda\x5b\x3e\xea\x91\xd6\x6d\x3a\x22\xa7\xbc\x4f\x6e\xf7\x15\x8b\x6c\x36\x78\xf8\x86\x51\xb8\x2d\x64\x27\x02\x71\x08\x69\x25\x9e\x49\x5a\xa0\x1d\x0e\x64\x69\x3d\xd6\xf9\xe6\x39\x96\xb3\x78\xc8\x1a\x7c\x5f\xe6\xf7\x73\x11\xe1\x0e\xff\x4d\x87\xe0\xa8\xad\x27\x5b\x2f\xf5\x7f\x86\x3b\xc9\x42\x59\x3b\x41\x1c\x4c\x5a\x91\x85\xf6\x6f\x5d\xc9\x02\xaf\x11\x24\x07\x64\x47\xa8\x24\xef\x19\x3c\xa4\x7d\x58\xeb\x47\xee\xc6\xf3\x9a\xe3\x16\x6d\xc1\x3c\x64\x88\x07\x71\xb0\x5a\x7d\x28\x97\xb8\x55\xd3\xc6\xdc\x8c\xb7\x80\xb1\x59\x6f\x75\x7f\xdf\xe7\xa6\x28\x66\x63\x3b\x46\xa3\x93\x59\x52\xd2\x13\x2b\x6a\x28\xe5\x3b\x88\x83\x69\xc0\xa2\xb0\x30\xf3\x83\x5c\xff\x48\xcb\xa5\x2b\xe9\x1c\xd1\xef\x64\x93\x97\x86\x9b\xbe\xef\x2f\x89\x79\x49\x76\x3e\x77\xd6\xba\x03\x7d\x63\x41\x1c\x3c\x0b\x20\xdb\xd4\xbe\x5d\x45\x27\xa7\xd4\xe1\xd6\x3a\xee\x30\x39\x59\xd3\xb7\x45\xbe\xb8\xc0\xbf\x2a\x9e\xb1\x06\xb2\x4f\xdd\x32\xa1\x6e\x0b\xe2\xe0\x95\xa0\x76\xcd\xfa\x48\xc4\x94\xec\xf8\xe2\xf7\xf7\xe1\xbc\x3b\xd7\x45\x77\x09\xde\xeb\xd5\x88\x3f\xc1\xa3\xed\xb0\x75\x3b\xfe\xbf\x9c\x6a\x20\x0e\x21\xad\xaa\xb3\x79\x3e\x40\x7b\xd8\xff\x78\x3e\x50\x86\xe0\xdb\x6e\xb4\xfc\xf2\xf7\xc6\xde\x2c\x39\xf7\x37\xd9\xc4\xf9\x99\xf9\xb9\xaf\x17\x1c\x5b\x66\x86\xe5\xa5\x59\x9b\x04\xd6\x10\xb7\xe0\x76\x9e\x7f\xa7\x6f\x0b\x5e\xe4\x2d\x05\xe5\xe0\xcd\x25\x63\xc5\xf0\x80\xcd\xf0\xc4\xfa\x10\x91\x0a\x77\x6f\x25\x95\x28\xd1\x56\x94\xc2\xc0\x39\x15\x03\x6e\x9b\xf3\x17\x79\x0a\x2f\xb2\xdb\x5c\x66\x4f\x92\x78\x54\x59\xf5\xfb\x62\x89\x0d\xbe\x44\x51\x65\x00\x95\xd3\x4a\xdb\xeb\xee\x87\x26\x59\xc3\xfb\xd7\x89\xcf\x7b\x86\x4d\xf3\x6c\x75\x89\xdc\xc1\xf7\xa3\x59\xb1\x86\x5c\xe7\x9d\xb9\xaf\x88\xaf\xd6\xa4\x5d\x0d\xb8\xe5\x72\x52\xa7\x1d\x45\x95\x87\x82\x72\x89\x44\x39\xfd\xee\x0f\xc8\x85\x09\xe0\x60\x1d\x5c\x2e\x29\xdc\xec\xc9\x17\xf1\xfb\x99\xee\x14\x11\x0e\x65\xfc\x4c\x63\x7f\xee\x2e\xab\x73\x5c\x96\xeb\x42\x7d\xe2\x5a\xef\x88\x0b\x65\x35\x03\x71\x30\x6d\x6f\x65\x3b\xa1\x65\x16\x5e\x27\xcf\x4c\x2b\x3b\x0d\xc0\x2f\xe7\x92\x9a\x9d\xf9\xd3\x56\x51\xc0\x7d\xcc\xb5\x38\x8e\x89\x37\x10\x8f\x08\x0b\xe2\x60\x3d\xd1\x3d\xbb\x2d\x97\xb8\x61\xed\x72\x88\x3b\xd5\xf0\xdc\x56\xf9\x63\x5e\xcd\x9b\x0d\xb9\x0c\x64\xad\x89\x58\x9e\x7f\x03\xc5\x6e\x57\x20\xc2\x82\x38\x58\xd8\x34\x01\xb7\x2f\xe4\xb6\x77\x6f\x3c\xcc\x8e\xee\xd2\x91\xce\xb8\x44\xb1\x93\x3e\xb7\x71\x0b\xbd\x98\x34\xaf\x8c\x40\xc5\x3c\xb8\x1b\x11\x16\xc4\xc1\x2a\x81\x3e\x47\x5c\x96\x5a\xf0\x22\xe7\x7b\x82\xd5\x08\x09\x13\x74\xbb\x6c\xaa\x63\x15\x52\xaf\xae\xa0\x4c\xee\xd9\x15\x1e\x2b\xca\x0f\x88\x0e\x0e\xe2\x10\x1d\x7c\xe8\x4c\x63\x07\xa8\xcf\xfc\xc7\x62\xea\xbe\xfa\xf6\x05\xd7\xbb\x9e\x41\x0f\x44\x1d\xbf\x4d\xce\x69\xcd\xf9\x5f\xc3\xb9\xff\x23\xe6\x5b\x06\x56\xbe\x0a\x8f\x5c\xe0\x11\xb4\xea\x01\x70\x30\x69\xad\x05\x74\xe6\xb1\xb2\x51\x9b\x84\xba\xd5\x96\x1b\x65\xce\xb7\x38\xe6\xf1\x07\x9e\xc8\x1d\x62\xcc\x3a\xda\x92\x58\x32\x14\xa6\x23\xc2\x82\x38\x58\xad\xbe\xd9\xdb\x10\xb3\x78\xba\x45\x73\x78\x21\x15\x45\xb4\xdd\x69\xc6\x89\xad\xf6\x5e\x57\x9b\xcf\x47\x02\x8a\xa7\x79\xb7\xd8\x24\xe6\xa1\x84\x37\x00\x0e\xa6\x81\x9f\x9f\xfb\x0e\xc7\x31\x0d\x0e\xef\x7b\xcb\x8b\x32\xc9\x10\x4f\x09\x7f\x35\xe9\xf8\xb0\xee\xf7\xbb\x7f\xa5\xc4\x35\xcc\x32\xb5\x18\x11\x16\xc4\xc1\xc2\x9a\xca\xfe\xc1\xfa\xa1\xdd\xde\x47\x2b\xe8\xcc\xd1\xea\x13\xe9\x4e\xbc\xb2\xdb\x70\xe8\xc0\x32\x1f\x60\xec\x62\x75\x92\xe5\x09\x75\x5b\x10\x07\xab\x84\x4f\x37\xd3\xa9\x12\xec\x26\x1f\x26\x4e\xb1\x26\xb5\x10\xbf\xba\x4f\x38\x97\xe3\x61\x49\x50\x7f\x5b\x79\x9c\x3f\x25\xfc\x1e\x2d\x0d\x42\x5a\x20\x0e\x21\xad\xad\x33\x49\x0b\xf4\x6d\x44\x96\x56\xe1\xa2\x9d\xca\x7c\x70\x90\x21\xd1\xf7\x16\x89\x62\xab\x0c\x12\xb9\x71\x6f\x47\xbc\xb8\xa2\xe3\x1d\xf3\xac\x9c\x11\xeb\x3c\x68\xb2\x07\xe2\x60\xd2\xba\xe5\xc4\x8c\x81\xf5\x20\xda\x6e\x9a\x4e\x69\xd5\x78\x98\x97\xd7\xc9\xd5\x6b\x75\xb3\x6b\xec\xb5\xa9\x40\xe0\x12\xfe\x58\x35\x94\x9c\x18\xc4\xc1\x6a\xf5\x22\x6a\xf4\x9f\xd7\x64\x53\xc7\xd4\xaf\x8f\xdb\x1a\x26\x77\x56\xc2\xde\x7c\x42\xff\xf5\xeb\xdb\xba\x75\xcf\x46\xce\x6c\xb4\x86\x01\xe4\x19\x05\x70\xf0\xf9\xc3\xb5\x67\xf7\x54\xb0\x8a\xbd\x30\xf5\x70\xf5\x2b\x6a\x27\x08\x92\xd1\x12\xfb\x75\x05\xc8\x65\xc5\x71\x19\xfd\xe6\x3b\x7f\x41\x57\xce\x81\x38\xf8\xd1\xaf\x03\xc2\x5b\xac\x79\xa8\x8a\x36\x6b\xf4\x41\xdf\x6a\x4d\xd8\x1a\x99\x09\x83\xe4\x22\x55\x6e\xb6\xaf\xad\x0a\xc8\x34\x67\x40\x7b\x20\x20\x0e\x3e\xe3\x4d\xbd\x3c\x64\x48\xfc\x36\x41\xb6\x73\xf4\x51\x55\x65\x03\xe6\xa7\x35\xa2\x95\xd2\x16\xed\x74\xa1\x5e\xe9\x1a\x1a\x3b\x86\x64\x68\xc6\x0b\xe0\x10\xd2\x3a\x3d\x93\xb4\x40\x7f\xf9\x91\xa5\xf5\xae\xac\x82\xe0\x95\xa9\x70\xd9\x83\x9f\xf2\x91\xfa\x6d\xab\xfe\x99\xf6\xf8\x55\xe3\x3c\xab\x8f\xd8\x76\xf1\xfe\x8a\x05\x10\xbf\x47\xbc\x3e\x88\x83\x49\x8b\xe1\x57\x0e\xe5\xcd\x2b\xfa\xe2\x87\x22\x77\x39\xf9\x9a\x9f\x5e\x9e\x11\xbb\x95\x28\xda\xbd\x93\xd8\x36\x39\x63\xfc\xe8\xbd\x2d\x14\x16\xc4\xc1\x6a\x95\x46\x45\xba\xa8\x5a\xac\x2c\x26\xc7\x33\x32\x48\xed\xc4\xbb\xe7\x09\x25\xcb\x68\x76\x84\x7c\x9b\x5e\x4c\xb3\x90\x53\x53\xa8\x32\x22\x2c\x88\x83\x69\x60\x30\x45\x4a\xef\x8f\x72\xdb\x87\x04\xc9\x7d\xd2\xe3\x7e\xdc\x58\x0f\xda\x95\x9f\x3d\x9c\x8d\x85\xaa\x14\x5e\x3a\x21\xa8\xa5\xb3\xd0\x21\x0a\x00\x07\x4f\xf3\xf9\x50\x68\x7c\x61\xab\x98\xa7\x37\xa7\xf4\x26\x7b\xf3\xa6\x8c\x15\x7e\x4a\x6a\xab\x2e\x79\xa2\x34\x0f\xee\xb5\xd9\x80\x07\xdb\x90\xe7\x43\xde\x8c\xab\x8a\xd4\xdf\xc5\xd3\xc6\x44\x63\x9f\x86\xe6\x89\xbd\x6a\x72\xc8\x15\x73\x89\xbe\x79\x52\x8d\x2b\xa2\x34\x9d\x18\x69\xff\xf6\x7c\x8c\x9c\xa4\xfc\x79\x3f\xc3\x3b\x36\x35\x5a\x6f\xa5\x1d\x9d\xf0\x4d\xcc\xa6\x6c\x12\xd7\x0c\xdb\xd2\x11\xab\xbf\x5e\xa6\xdd\xf0\xe4\xdf\xaf\x95\x63\xd9\x56\xfc\x2a\x15\xaf\xec\x47\x5b\xa8\x94\xb4\x48\x87\xbc\xb8\xdd\xe9\xee\x92\xca\x80\x6a\x61\x69\x9b\xb1\xf8\xd2\x3c\xcc\xf3\x01\x8a\x8c\xec\xf9\x48\x18\x24\xc5\x52\x1a\xf0\xb2\x2d\x23\x0f\xb5\x7d\x3f\xb0\x32\x96\x56\x28\xf1\x07\x47\xbf\xda\xdc\xf3\x5e\x19\xcb\x66\xd0\xab\xc9\x7f\xa1\x39\xf7\x2e\x35\x44\x56\x77\x74\x3e\xd5\x6b\x99\x8e\xb1\xc1\xa9\xf3\x26\xcc\xd8\x5c\x18\x26\x64\x13\xe8\x25\xc1\xe1\xc1\xca\xef\x87\x3c\x1f\xa0\x98\xff\x78\x3e\xc4\xe1\x9e\x0f\xdd\x08\xaa\x37\x0f\x9f\xeb\xc4\xb2\xeb\x7b\x1c\xb7\xd8\xfe\x7d\xf7\x61\xdc\x88\xb8\x75\x5c\xa8\x89\xc2\xc0\xe0\x5a\xb2\x3e\xb9\xc4\xb9\x27\xb9\xe2\x48\x9e\x0f\x4a\x0c\x3b\xa3\xa6\x4c\x14\x15\x99\x81\x62\x6a\xb7\xee\x13\xdf\xe4\x97\x0f\xbc\xc3\x17\x8c\x1a\xb5\x3b\x6f\xee\x94\xf3\x7d\x77\x39\x7f\x91\x48\x9e\x8f\xc8\xce\xad\xe3\x5f\x8f\x65\x7e\x29\x97\xb0\x9f\x38\x1f\xdc\xe8\x14\xef\x8c\x58\x31\x66\xda\x75\x68\x7f\x6f\x94\xfb\x68\xfb\xd1\xaf\xf3\x17\x89\xe4\xf9\x60\xa2\xc9\x22\x14\xf5\x62\x77\x55\xd7\xa9\x7c\xad\x5e\x95\xac\x4e\x64\xf7\x90\x61\xad\x96\xad\x90\xfe\x8e\xf1\x0c\x17\x1b\xcd\xf9\x6d\x26\xe2\x48\x9e\x0f\x7a\xcb\xe7\xf5\xbc\x41\x22\xae\x98\x4c\x34\x23\x81\xfe\x83\x85\x97\xa7\xbe\xf8\x16\x63\x32\x0d\xc6\xbd\x25\x7c\x25\xe6\x86\x7a\xfe\xc4\x84\xe2\x48\x9e\x0f\x91\x8b\x91\x59\x14\xf3\x35\xdd\x8a\xa8\xbe\xbe\xfc\xa1\xa3\x4c\xcd\xe1\x27\xe9\x33\xbf\xd2\xb2\xc2\xd9\x08\xdf\xf1\xb8\x4e\x97\x9d\xbf\x48\x24\xcf\x07\xdf\x08\x73\xcf\x94\x6a\xe3\x46\xba\x55\x1d\x8d\x62\x23\xc1\xa9\xb8\x91\xea\x32\x5b\x15\x1b\x99\x50\xea\x3a\x53\xdc\xc1\xc6\xa5\xf3\x17\x89\xe4\xf9\x08\x13\x5c\x77\x53\x0f\xf3\x98\xdc\xa9\x16\x59\xbe\x74\x62\x8b\x49\x13\x53\xe3\x58\xc7\x18\x53\xed\x5a\x4a\xdd\xb7\x50\x78\x40\xf2\xbf\x59\x96\x81\xba\x22\xf2\x28\xe4\x33\x94\x38\x40\xfc\xc0\xa9\x40\xdc\xab\x90\x89\x61\x44\x65\x2d\x88\xad\xe6\xe8\xdb\x73\xd1\xf6\x28\x8c\xba\x96\xf6\xc8\x30\xc8\x8a\x0f\xe2\x60\xa3\xd0\xd0\x20\xdd\x6a\x80\xa0\x96\x63\x7b\xec\xd3\xa0\x45\xd2\x67\x87\x98\xa2\x71\xb2\x89\xaf\xbe\x58\x8f\x61\x7f\x1b\xfd\xe5\x25\x45\x8a\x08\x0b\xe2\x60\xa3\xd0\xd3\xa1\x95\xad\xd2\xe5\x60\xdb\x77\xbe\x8e\x47\xb4\x61\x61\x36\x35\x51\x21\x72\x36\x27\x46\xd7\x6f\x25\x14\xe0\xa9\xd7\x35\x42\xa7\xb0\x41\x1c\x6c\xb8\x78\x98\x9c\x77\x07\xbd\xa7\x60\xe5\xd7\xf3\xbb\x43\xa4\x89\xbf\x64\x0a\x33\xb6\xda\x03\x70\x7a\x6b\xbb\xf7\x4c\x22\x7d\xb4\xee\x5e\x82\xb6\x73\x00\x1c\xac\x6e\x87\xdc\x18\x55\x63\x7f\xea\xbd\x3e\x7d\xd3\xad\x28\xb5\x91\xe6\x6b\xe8\x71\x37\x1e\x6f\x35\xc3\xe4\x11\x3b\xf9\xf6\x37\x71\x8b\x3a\xa8\x12\x00\x1c\xac\x12\x5e\xad\x4d\x85\xb6\x7d\x31\xdf\x8b\xe5\x7d\xdc\x22\xf1\xf7\x48\x68\xed\x7a\x76\xf6\x40\x5f\xe5\x5a\xa2\xd0\xca\x77\x61\xd1\x13\x3d\x84\xe7\x03\xc4\xfd\x93\xe7\x43\xfc\x4c\x9e\x0f\xd0\x17\x17\x59\x59\xb5\x37\xf1\x94\xde\x45\xf3\x19\x7c\x69\x12\xa7\xb3\x30\x6e\xb5\xd1\x0c\x0d\x26\x3f\xca\xe4\x6b\xe5\x71\xe8\x7b\x43\x64\xbb\xfe\x14\xf1\xf6\x20\x0e\xa6\x2c\xa7\x4f\xba\x26\x86\x83\x81\x07\x01\x5f\x02\xb7\x03\x3f\xd6\x25\x3a\x7a\x0a\xb2\xdf\x77\x8b\xff\x1e\xeb\x49\xd4\xc7\xe7\x7c\x00\x59\xe6\x41\x1c\xac\x52\xb9\xe3\x31\x3f\xad\xc5\xa3\xd6\x1e\x0b\x0d\x52\xfd\x28\x54\xfb\x89\x6e\x72\xbc\xcf\x39\x1c\xf0\x01\x55\x70\xf6\x49\x55\x16\x27\x37\x22\x2c\x88\x83\xa7\x59\x0e\x8f\xb7\x2c\x98\x78\x60\xcb\x21\x49\x2b\xc7\x31\xf3\x35\xe3\x60\x57\x59\x9b\x6d\x68\x22\xb1\x33\xae\x5e\xd3\x04\xab\x6b\x07\x11\x16\xc4\xc1\x77\x4b\x67\x1f\xb2\x05\x5b\xaa\x6b\x3c\x93\xcf\xaa\x68\xef\xa7\xff\xf1\x23\xdc\x24\xed\xf7\xc5\x77\x87\x0e\x5c\xb1\x4c\xa3\xe9\x74\xd0\x01\x41\x10\x07\xab\x04\x7e\x5c\xc3\x84\x50\xce\x0b\xaf\xe3\xd0\x3b\x4c\xd6\x5f\x9a\x56\x51\xf9\x58\x7c\x2b\xde\x7b\xe1\x52\xe5\xaf\x5a\xd3\x86\x5f\xa3\x05\x25\x85\x06\x70\x88\x6b\x11\xcf\xe6\xf9\x00\x8d\xac\xc8\xd2\x92\x0d\xf4\x75\x30\xbe\x51\x77\x68\xad\xc8\xc0\xae\xe9\x71\xef\xaa\x4f\x72\xaa\x81\xf0\x9f\xc8\x7e\xc7\xdf\xa7\x66\xd7\xf8\xe7\xa1\x8b\xc0\x41\x1c\x4c\x5a\x73\x84\x3b\xfb\xf4\xa1\x22\x0b\xeb\xe4\xeb\x57\xb4\x02\x5d\xab\x06\xfc\x12\x64\x95\xe2\x8c\x43\x8c\x32\xbc\x5c\x3a\xed\x52\x36\x11\x61\x41\x1c\xac\x56\xbf\xef\x77\x73\x7e\x4d\x79\x4b\xd1\x3f\x58\xe7\x3f\xd8\xf6\xf2\x7d\xb6\xdc\xed\x07\x25\x4c\xd8\xf6\x99\x13\xe8\x35\x52\x3f\xb0\xa1\x34\xe6\x20\x0e\x26\xad\x98\x97\x49\x87\x42\xe3\x7e\x8d\xae\x57\x4f\x9a\xdb\x35\xb0\x0c\xaf\xba\x39\xfd\x3c\x08\x70\x14\x5e\x6d\x38\xbe\x22\x6e\xd1\xc8\x82\x08\x0b\xe2\x60\x75\xfb\xa3\xaa\x47\xf3\xa5\xcf\x0a\x19\x8e\x85\x21\xfd\x6c\x93\xcf\x2f\xf6\x4f\x8c\x5c\x46\xab\xb4\x5b\x54\x9c\xe2\x5a\xc4\x13\x1f\x79\x11\x61\x41\x1c\xfc\xcb\x2d\xaa\xac\xe9\x32\xba\x76\xb0\x2e\x8f\x25\xca\xd4\xb6\x3d\xd8\xdc\xcb\xdc\x1a\xca\x19\xec\x1a\x81\xfb\x26\x45\x80\xda\xf4\x02\x74\x7e\x08\xc0\x21\xa4\x75\x36\xcf\x07\x68\x06\x85\x2c\xad\x2c\x94\x86\x97\x89\xf1\x92\xba\xa6\xf1\xca\x49\x31\xae\xe6\x35\x4e\x45\x6e\xc5\x94\x63\x23\xaa\xf6\xfc\x91\xb7\xed\xa8\x3f\x40\xe9\x0d\x40\x1c\x4c\x5a\x7f\x6a\xd8\xae\x8c\x1c\xce\x5e\x79\xda\x65\x45\x16\x75\xc1\xde\x30\x3b\xfe\xfb\xc5\x49\x9c\x28\xa7\x1f\x39\x59\x9f\x5e\xcc\xb5\xbd\x83\xd6\xba\x00\x0e\x56\xab\x37\x67\x30\x05\xa5\x86\x1a\x05\x96\x06\xa5\x37\x98\xb8\x43\x19\xc3\x57\x7f\xa8\x60\x33\x84\x7d\x18\xee\x9d\xc4\xc0\x40\xb3\x82\x52\xc8\x80\x38\x98\xb4\x88\x48\xa2\xf4\x23\xc5\xd1\xbd\xcd\x2f\x85\x64\x52\xf2\x10\x7e\x4f\x98\xf9\x4b\x2b\xfe\x0d\x3b\xb2\x0d\xff\xb4\xce\xd3\x63\x1a\xda\x54\x05\x71\xb0\xba\x25\xc2\xfd\xf3\x2e\xf6\x72\x47\xe1\x58\x98\x13\x37\xcf\x0a\x96\xf3\x85\x7b\x21\xd7\x2e\x84\x94\x86\x2c\x8f\xba\x30\x5c\x24\xbf\xf8\x17\x0a\x0b\xe0\x60\x95\x70\x97\xfb\x1d\x83\xbf\xfc\x65\x0e\x8d\x97\x5e\x83\x26\xb9\x2a\x51\x16\xbe\xef\x89\xc7\x98\xd6\xba\xae\xcd\x26\xe9\xe1\x75\xe3\x4d\x22\xa4\x05\xe2\x10\xd2\x3a\x9b\xe7\x03\x34\x53\x46\x96\x96\x9d\x5f\xba\xb0\x21\xb3\x52\x3e\x0b\x16\xe9\x9b\xe7\xed\xa9\x9d\x4e\x15\xaf\xef\xed\x4d\xa5\x97\x5f\x6f\x7c\x2a\x7e\xbd\x59\x14\x4a\x25\x05\xe2\xe0\x79\x3e\xf6\xcb\x0f\xda\x02\x2f\x6e\xc7\x31\x2c\x2e\x1e\x4d\x71\x55\x2f\xc5\xe6\x4f\xb3\xf9\xbc\x40\x27\xa6\x71\xb1\x09\xac\x12\x84\xee\x78\x02\x71\xf0\xbb\x5d\x18\x2a\x58\xe6\x96\x84\xac\x63\x5e\x6d\x4d\x4d\x55\x5a\x48\x19\xbc\x43\x53\xb6\x6d\xcb\x48\x76\xb3\x48\x7c\x80\x19\x96\xf6\x09\x11\x16\xc4\xc1\xa4\x25\x8a\xaa\x65\x5f\x6c\xbc\x40\x6c\xd8\x93\xe7\xe2\xba\xe1\xae\x34\x53\x17\x54\xd9\x24\x13\x3b\xd9\xff\xd3\x96\x89\x5b\xe4\x4f\x2c\x22\x2c\x88\x83\xd5\xed\x32\x39\x6e\x47\x17\x76\x2a\x9b\xbc\x62\x63\xf3\x52\x84\xf3\xd1\x6e\x47\x1c\x6a\xad\xb2\x32\x26\xbb\x60\x2a\x43\x07\x0a\x9b\x3f\x22\x2c\x88\x83\xe7\xd3\xba\xf4\x29\x6b\x14\x4d\x69\xcb\x7d\x59\x6b\x7a\xb6\x58\x06\x63\x2f\x67\xae\xf9\xc3\x97\xfc\xf8\x57\x4f\x50\xee\x4b\x7e\xcb\xab\xfe\xbf\x3c\x1f\xff\x6f\x0e\x21\xad\xb3\x79\x3e\x40\x2b\x22\x64\x69\x89\x3a\x1f\xfc\xed\xa5\x70\xd3\xf9\xdc\x8e\x5d\x2d\x7d\x07\x63\x80\xba\xf1\x72\xe3\x41\x18\x93\xf7\x13\xaf\xa6\x23\x8d\x3d\xb6\x68\xa8\x56\x01\x1c\x4c\x5a\xdf\x3a\xc5\xe4\xeb\xdc\xc3\x4a\x9e\xfe\x55\xb7\x36\xfe\xeb\x48\xa0\xd6\x90\xae\x6d\xc4\xbe\xa3\x66\xe2\x7d\xc0\xc8\x38\x9c\x01\x4d\xb7\x41\x1c\x7c\x40\xb4\x48\xe6\xae\x97\x3d\x1e\x19\x68\x7a\x15\xf7\x37\xfb\xfa\x2f\x7b\xc1\x4a\x22\x6f\xb4\xb2\x97\xb6\x54\x4a\x1b\x35\xc2\xdf\x14\xa1\x01\x11\xc0\xc1\xa4\xc5\x18\x88\x61\x12\x41\x67\xe9\xd0\xf2\xeb\x4b\x06\x89\x80\xa9\xf0\x3d\xa6\x37\x8f\xef\xd0\x4f\x6e\x96\x30\x52\x5a\x38\xb0\x69\x40\x27\xe6\x41\x1c\xac\x6e\xef\xd2\xb9\x97\xfc\x9a\x7c\x98\x42\xa4\x35\x79\x8b\x3c\x30\x4c\x14\xf7\xa0\xfb\x9d\x33\x5d\x24\x61\xb1\x90\xf3\x91\x2a\x79\x2d\x94\x3a\x02\xc4\xc1\x2a\xa1\x5c\x82\xa3\xe9\xd6\x94\x8a\x0c\xff\x51\xc8\x05\x53\x91\xa9\x9e\x6b\xc1\xb9\xbc\x63\x3b\xc7\x51\x6f\x43\xa5\xc3\x6e\x60\x3e\x8f\x46\x48\x0b\xc4\x21\xa4\x75\x36\xcf\x07\x68\xe5\x8b\x2c\xad\x29\xaa\x37\x77\xa4\xaf\xd7\xaf\x47\x92\xc9\x3e\xb5\x43\xe7\xe6\x10\x12\xa5\x66\x51\xf4\x9f\xd4\x8d\x34\x4e\xa1\x48\x7d\x98\x0a\xf9\xff\x40\x1c\x4c\x5a\x62\xf7\x15\x9c\x63\x6f\x34\x0c\xa7\x05\xa0\x0a\xca\x06\x24\x0f\x1d\xe8\xe8\x59\xec\xbf\xc1\x63\x66\x9e\xe3\xbc\x5f\xfe\xc7\x17\x32\x41\x82\x38\x58\xad\x72\x72\x68\x1c\xda\x8a\xae\xa8\x31\x7b\xa5\x30\x5e\xba\x7e\x44\xf8\x51\x95\xf3\x62\xe9\x0f\x43\xf7\x98\x30\xc6\xcf\x56\xe8\x2e\xd0\x10\x03\xe2\xe0\xd7\x87\xc9\xb5\x0b\xb6\x18\x25\xf6\x3a\xcc\xff\xa1\x61\xa6\xc1\x9f\x34\xee\x2f\x0e\xf4\x15\x1e\xa0\x5a\xa9\xf1\x0f\x78\x3c\xc3\x2b\x8b\x08\x0b\xe2\x60\x75\xcb\xc8\xb7\x38\xf1\xeb\xce\x8f\x1c\xfa\xe6\x64\xbf\x8f\x37\x9c\x32\x9b\x6c\xab\x1f\x0e\xa8\x64\xd4\x09\x1a\x4b\x9d\x64\x9a\x0c\x43\x26\x63\x10\x07\xab\x84\x6a\xf2\x54\x99\x0b\x7e\x05\xe5\xb6\x7a\xc5\xbd\xed\x8d\x84\x63\x86\x13\xc9\x66\x38\xe4\x58\xbc\xd6\xbe\xd7\x2f\xb1\x17\x65\x2c\x20\xa4\x05\xe2\x10\xd2\x3a\x9b\xe7\x03\xb4\xc3\xf1\x1f\xa7\x02\xa2\xca\xb6\x6e\x13\x4d\x47\x99\x4d\x9c\xd8\x1f\xf6\xd7\x32\x0a\x37\xc7\x3c\x2c\x0d\xa6\x62\x16\x5e\x12\x22\x96\xcf\xf6\xc3\x86\x4e\x05\x00\x38\x98\xb4\xc8\xfb\xa4\xf4\x2d\x6b\x47\x25\xee\xd2\xb1\x3a\xd5\x0d\xa9\xe1\x3b\x28\x3d\x92\x7d\xa8\x5d\xf7\x3b\xd2\xcc\x84\x47\x6c\x3e\x08\xfa\xc9\x0a\xe2\x60\xb5\xba\xa7\x11\xa7\xdb\x82\xe9\x7e\x49\x49\xa2\x4b\xd3\x8a\x43\xe3\x69\x17\x1e\x7f\x59\xff\xf8\xaf\x2d\x3a\x09\x02\xb3\x0c\x93\x5f\x50\xe6\x0c\x10\x07\x93\xd6\xec\x5e\xc4\x1d\xbc\xce\x07\xe9\x4f\x3d\x8e\x1f\xb1\x09\xf0\x91\x5d\xa4\x91\xec\x67\x69\x34\x14\x8c\xa4\x24\x55\xcd\x8e\x6b\x27\x47\x84\x05\x71\xb0\xba\x25\x1c\x89\xaa\xa7\xe9\x9c\x32\xa8\x22\x7f\x76\xad\xeb\x9e\xda\xc4\x9f\xae\xb9\x3c\xd9\xb8\xab\x6b\x61\x27\x64\x34\x2d\xc5\xc2\x50\x46\x54\x10\x07\xab\x04\x3d\x21\x5c\x15\x9f\x0b\x55\xac\x64\x03\xf9\xde\xf1\xa3\xc6\x4d\xc4\x11\xbe\xa6\x28\x98\xf9\x11\xac\xfa\x6f\x68\x43\x6d\x05\x98\x11\xd2\x02\x71\x08\x69\x9d\xd1\xf3\x01\xda\xc3\xfe\xc7\xf3\x21\x8e\xe4\xf9\x28\xe4\xc7\x99\x39\x88\xf1\xb8\x92\xbf\x3a\x8b\x6f\x8b\xc1\x47\x9a\x61\xb6\xf7\x54\xdd\xd9\x72\xc9\x9a\xc5\xdf\x72\x4c\xd9\x98\xe9\xfc\x3b\x7d\x48\x9e\x0f\xdd\xcb\xe4\x8b\x27\x85\x68\x7e\x1f\xe3\x6a\xa5\x58\x58\x92\xc2\xc9\x47\x55\x12\xb2\x55\x9d\xc6\x1a\x2d\x50\xd6\x53\xc6\x52\x17\xcf\x5f\x24\x92\xe7\xc3\xe4\x71\xe5\xce\x0f\x49\x87\x99\xda\x72\x54\xbd\xd9\x97\x2a\xdd\x7f\x14\xfc\x48\x06\xab\x79\x7d\x6f\x72\xbc\xa8\xbb\xe5\xef\x52\xf9\xbf\xd9\x5c\x04\xd5\x25\x72\x07\xaf\x5f\x98\x64\x16\x60\x8f\x7e\x5e\xf5\xa8\xfa\xbb\xa4\x41\xb0\xe2\xf0\xa1\x1c\x0b\x3b\xeb\x16\x9a\xad\x3a\x7b\x9c\x8a\xc4\x55\xe8\xef\x29\x88\x83\x75\x70\xb6\x02\xce\x52\x15\xf2\x93\x5b\x87\xd3\x24\x71\x21\xd4\x8c\x45\xc1\xdd\x34\x32\xfb\xdc\x7e\xdb\x3b\x44\x09\x8c\x29\x9c\xe6\x50\x12\x61\x10\x07\xd3\x36\xca\x0d\xbb\x20\x41\xbb\x9c\x66\xf6\x14\xc5\x91\xe0\xaf\xf4\xd2\x6b\x8b\x6a\x5f\x82\x52\x71\x5b\x83\xfd\xd4\x6d\x16\xed\x9c\xa1\x5f\x5c\x20\x0e\xd6\xc1\x8d\xc6\x1c\xed\x27\xf9\xe8\x7c\x5e\x05\xfb\xcf\xf5\x0e\xe2\x31\xee\x95\x62\x5d\x77\x92\x13\xf0\xea\xbd\x9c\x20\x5e\xb1\x2f\xbd\xf4\x7f\xbe\xfc\xff\x37\x07\xab\x5b\x7d\xb3\x2b\xdc\x76\x04\x7c\x14\xf9\x1b\x0b\xe8\x3c\xfa\x4a\x0a\x1b\x7c\xa4\x8c\x4f\x1d\x95\xe9\x08\x38\x1a\x84\xdb\x0a\x3f\x41\x89\xf7\x41\x1c\xac\x12\xb8\xf2\x77\xbe\xda\x48\x57\xd5\x0d\x4a\x64\xce\x25\xd5\x44\x72\x90\x14\x5d\x17\x28\xad\x62\x7e\x59\x63\x38\xb5\x1e\xc9\xb8\x7e\x05\xd1\xc1\x41\x1c\xa2\x83\x9f\xcd\xf3\x01\xea\x33\xff\xe1\x17\x3c\xe2\xce\x29\x88\x68\xbd\x20\x33\x6a\x92\xdc\xeb\xca\xe0\x2c\xc0\x19\x54\x18\x45\xfc\x14\x0f\xf5\xbd\xaa\x3c\xe3\x27\x2d\x68\x83\x19\xc4\xc1\xa4\x35\x73\xf1\x93\xf5\x49\x69\x5b\xb6\xd5\xc8\x37\x0d\xef\x30\x86\x08\x47\x54\xe2\xce\x51\xdd\x68\x73\xd3\xe7\x7c\xa4\xe5\x19\x0b\xde\x88\xb0\x20\x0e\x56\xab\x8f\xb1\x70\xd5\xfe\x2c\xdd\xd1\x5d\x2d\x5c\x35\x99\xdc\xc6\x56\xab\x74\xf1\xd7\xeb\x96\x39\x1e\xd2\xea\xee\x67\x6b\xb1\x5d\x85\x76\x17\x41\x1c\x4c\x5a\x68\x87\x6e\xeb\x6f\x25\xbf\x8d\x8f\x48\x31\x8d\x0d\x85\xd9\x94\x32\x68\xe9\x37\x5e\x1d\x7d\x30\x6c\x25\xcf\xfc\x83\x24\xce\x02\x5a\xa7\x83\x38\x58\xdd\xaa\x15\xec\xb5\xb0\x10\xbe\xc8\x54\x39\x8a\x0c\x9c\x3b\x28\x9e\x58\xb2\x75\x57\x2e\x5d\x20\xac\x0c\x69\x8d\xb2\x9c\xb7\xa1\x82\x2e\x5f\x00\x71\xf0\x63\x3f\xd5\x47\x57\x7d\x77\xf5\x47\x15\x83\x6c\x06\x27\x92\xae\xbe\x8f\x23\x39\x9d\x99\xb8\x26\xd4\x2b\x51\xec\x9c\x2f\x27\x26\x29\x0e\x1d\xfb\x01\x70\x08\x69\x9d\xcd\xf3\x01\xfa\x36\x22\x4b\x4b\x6d\x7a\xdc\x5f\x1d\xe3\x64\xe9\x23\x59\x38\x17\x73\xbb\xe9\x2f\xfd\xec\xd3\x8f\x97\xae\x3a\x1f\xb4\x7e\xc0\xdf\x43\x61\x77\xc9\x84\x5e\x1f\xc0\xc1\xaf\x0d\x62\x63\xb2\x13\xa0\x8e\x31\xc3\x9c\x1d\x97\xa3\x2a\x1f\x4e\x30\x66\x4f\x8c\x16\x90\xfd\xf3\xde\x32\x0c\xef\x19\x6b\x44\x5e\x27\x22\x2c\x88\x83\xd5\x6a\x58\x1b\x7f\x7a\xdb\x04\x39\xd6\xb1\x77\xc3\x4a\xb9\x40\xe9\xf7\x2f\xbe\xaf\x88\xfc\xbe\x85\x14\xb1\x71\x5f\xe5\x65\x21\xd0\x09\x47\x84\x05\x71\xf0\xd4\xe7\x22\x2c\xe3\xfc\x14\xaf\xf6\xcb\xb3\xcc\xe5\xbb\xdf\xf3\xac\xa6\x3e\xcb\xbf\x92\xcb\x56\x65\x98\xf2\xdb\xe8\x8a\x69\xcd\x2a\x3f\x22\x2c\x88\x83\xd5\xad\xc0\x62\x07\x4d\x44\xa6\x1e\xea\xad\x86\x17\x8e\xbf\x1f\x0e\xa2\xb5\xa4\x77\xb4\x48\xa7\xae\x46\x93\x1b\xfc\xe9\x46\x19\x97\x86\xb6\x58\x41\x1c\xac\x12\xf4\x75\x02\xa6\xf7\xbb\x96\x26\x54\x5e\xe0\xb2\xef\x3a\x1d\xdf\xf3\xfe\x4d\xd3\x17\x83\x6e\x8c\x6b\x7d\xff\xd1\x97\x4d\xdc\x9d\x79\x84\xb4\x40\x1c\x42\x5a\x67\xf3\x7c\x80\xfe\xf2\xff\x47\xee\x73\xaf\x26\x87\x0c\xca\xd7\x98\x39\x53\x0f\x9e\xe4\x3c\xd1\xc7\xfe\x15\xd9\x3c\x1a\xa8\xbc\xa5\x2b\x9a\x9d\xdc\x5b\x5e\x14\x1c\x83\x78\x7d\x10\x07\xcf\x6c\x37\x27\xb5\x26\x67\xe2\x4f\xb8\xf9\x6e\xcf\x0b\x2f\xb2\x43\x9e\xb9\x43\x38\xed\xd1\xf2\x69\x8f\xa7\x41\x6f\x15\xaf\xe3\xa0\x16\xa4\x01\x00\x07\xab\xd5\x61\x7b\x1b\x1c\x0f\x3a\x7f\xea\xdd\x72\xcf\xd8\xfd\xe5\xd0\x1d\xe6\x9e\x4f\xb8\xd4\xd3\x0b\xd6\xe3\x3a\xd1\xa1\x1e\x5e\xe5\x50\xd2\x23\x10\x07\x93\x56\xf9\xd3\x07\x4c\x2f\x18\x66\x4f\xf0\xc8\xd8\x17\x5f\x8a\x55\x7e\xa2\x57\xe0\xeb\x7e\xa4\x38\x99\x2e\x56\x5a\xbc\x4f\x56\x8d\x03\xdd\xbf\x09\xe2\x60\x75\x7b\x9b\xaf\x24\x05\x47\x26\x42\xb4\x2b\xde\xf3\xdb\xa9\xea\x03\xb5\xc4\x80\x40\x69\x6c\x0c\x12\x85\xd0\x42\xf7\x66\x59\x06\xfa\x1f\x90\xe7\x83\xa0\xee\xb1\xa5\x96\xf5\xea\x4c\xf0\x1f\xbe\x37\x6a\x1f\x93\x59\xbb\x5c\x99\x43\xdf\xe6\xdc\xe6\xec\xa5\x39\x7e\x4b\xe5\x56\x1e\xfd\x6f\xcf\x87\x2f\xfa\x9f\x6f\xb3\xe8\xd1\x4e\x79\xec\x61\xe5\x5b\x82\xcf\xf6\x4d\x64\xae\xfa\x13\x3e\xc0\xc2\x9a\xfb\x2b\xff\xd9\x77\x5c\xe0\xf4\xdf\x33\xee\x35\x3f\x12\x8b\x02\x34\xfd\x5e\x1b\xcc\x06\x17\xa3\x20\xc3\x62\xd6\x8f\xfc\xef\x2e\x0d\xe4\x47\x50\xf5\xd1\x4d\x25\x79\xba\xc1\x3c\x1f\xa0\xc8\xc8\x9e\x8f\x2f\x43\x57\x62\x93\x84\x2f\x51\x35\x65\xb2\x95\x36\x0a\x9a\xad\xb7\xb9\x0f\x3c\xe7\x88\x14\x4f\x10\xb1\x9d\xa9\x23\x3a\xa1\xa4\xfb\x17\x3a\x96\x61\x62\x5c\xf0\x2d\x95\xcc\x51\x88\xb7\xae\x97\x1e\x35\xeb\xeb\x7e\x36\x19\xd1\xc0\xf3\x87\x57\x85\x1a\x75\x2e\x79\x97\x50\x42\x9e\x0f\x50\xcc\x7f\x3c\x1f\x9e\x70\xcf\x07\xe7\xfb\xe8\xed\x7b\x57\x98\x42\xe4\x83\xf8\x3e\x5e\xd7\xe9\x7b\x1c\x6d\x79\x1c\x3c\xe2\x1a\xd3\x49\xf2\xc2\xe0\xb3\x4a\x6f\x4d\xdb\xb9\x27\xb9\x9e\x48\x9e\x8f\x1f\xec\xf5\x3b\xb6\xd7\x5a\xa2\xf4\x6b\xcd\xb1\xde\xb5\x78\x99\x92\xe9\x5c\xdf\x92\x51\x26\xf7\x38\xc6\x53\x71\xb4\x68\x6e\x8d\x3f\x7f\x91\x48\x9e\x0f\xaa\xc1\x77\xeb\x63\x9e\xf6\x33\x6e\xea\x0e\x79\xfb\x93\x0b\x14\xe4\xbc\x0b\x1d\xac\xd9\x5f\x7d\xc6\xf0\x82\xbe\x4c\xc4\x5d\xb8\x7d\xfe\x22\x91\x3c\x1f\xc2\xfd\x82\x5b\x2c\xb4\xec\x54\x68\xdf\x28\x89\x89\xe9\xb9\x95\xef\xa7\x04\xb8\xc5\xa1\x36\x1a\xfe\x64\x50\xde\xd4\xff\xf9\x8e\xeb\xfc\x45\x22\x79\x3e\xa4\xdb\x24\xa5\xb0\x88\xb5\x36\x9b\xca\x5e\x78\x6e\x2a\x79\xe0\x7c\x9d\xcb\xb5\xf0\xf4\x4c\xfd\xdd\x5c\xf2\x98\x24\x2a\x9b\xfb\xe2\xf9\x8b\x44\xf2\x7c\x98\x9b\x9b\x3d\x58\xfa\x51\x3d\xfe\x58\x2f\xde\x9b\x2a\x70\xaa\x6b\xa5\x86\x2e\x04\x1d\x6f\x57\x3a\xf7\x7e\x20\x4e\x6d\x86\x0b\xe5\xf9\x8b\x44\xf2\x7c\xd8\x2b\xaa\x84\x84\x78\x73\x3c\xab\x24\x18\x56\xe4\xee\x23\x9b\x95\x13\x6b\x7d\x5b\x5a\x23\x4c\x37\xde\x2f\x20\xfb\x20\xbc\xd6\xe2\xfc\x45\x22\x79\x3e\x74\x70\x84\x2f\x0e\xa1\x67\x96\x38\x14\xa1\x28\x46\x5e\x6a\x3f\x71\x19\xef\x2c\x79\xee\x17\x76\x31\x95\x93\xfc\xca\xdd\xb6\x4a\xeb\xff\xcd\xb2\x0c\xd4\x15\x91\x47\x21\x06\xbe\xd5\xc8\x0d\x41\xee\xc6\xe8\xbc\xed\xc1\x4f\x89\xc6\x63\x6d\xef\x2c\x8e\x1e\x3a\xb4\x13\x90\xf6\x5d\xb8\x45\xc6\xdc\x08\x79\x7a\x41\x1c\x6c\x14\xf2\xa3\x10\x7a\xa4\xb5\xdc\x75\x88\x41\xe6\x5c\x8a\x76\xd9\xee\xb2\x47\x88\xc6\x64\xe9\xbd\x4b\x43\x46\xef\x08\x6f\xf1\x14\xb6\x40\xf7\x22\x82\x38\xd8\x28\xb4\xfe\x58\x32\x1c\x85\xd6\x8e\xf8\x91\xe4\x7c\xd4\x6a\x64\xcd\xd5\x8f\x77\xd9\x94\x9e\xf4\x8a\x94\x07\x55\xbf\x16\xed\x7e\xc3\x06\xa5\x4d\x00\x71\xb0\x51\xa8\x61\x4d\x84\xcb\xa7\x4a\xee\xb3\xc9\x05\xaf\xc1\x1d\x97\x47\x0f\x8d\xcd\x4d\x96\xad\x6f\xb7\xbd\x6f\x64\xe2\x1e\xec\x3d\x75\x9f\x44\x84\x05\x71\x3e\x12\xe2\xff\x0e\xcb\x8a\x5e\xc2\x37\x5d\x87\xed\xca\x73\x90\xb6\xb0\xc6\x65\x6b\x40\xf5\xb9\x2e\xd8\xae\x21\x44\xd3\xe7\xe2\x88\x4a\xe1\x2e\x4f\x33\x22\x2c\x88\x83\x5d\x5c\x56\x97\x89\xd9\xab\xbd\xc5\xbe\xeb\x74\xa4\xda\x51\x89\x7a\xd3\x33\xb9\xcc\xac\x68\x6d\x52\x6f\xb1\xfd\x93\x3f\x1d\xe5\xa9\x73\x18\xc2\xf3\x01\xe2\xfe\xc9\xf3\xe1\x79\x26\xcf\x07\xe8\x8b\xfb\x1f\x77\xd7\x7d\x8a\x53\x5b\x6e\xb5\x34\xd4\x11\xe0\xa0\x28\x6c\x9b\xf4\x6a\xfa\x74\xa7\x2c\x1a\x6d\xe1\xd1\x4c\x80\x1f\xee\x87\x7a\x0d\xe8\x14\x17\x88\x83\x29\xcb\xf5\x79\xdc\x03\x1f\xea\x37\xed\x57\x24\x04\x7d\xd7\xb8\x06\xd8\x63\x72\x56\x43\x92\x1a\x4e\x0e\x6f\xb4\xcf\xec\xd1\xf4\xaf\x40\x97\x4d\x82\x38\x98\xb2\xae\x7e\xbf\xad\x9d\x50\x6b\x92\x2e\x2d\xe1\xbe\xbe\xe9\x9e\xa6\xd0\x18\x1b\xa6\xf1\xc0\xf9\xe8\x81\x9c\xd2\x4b\x83\x71\x09\x39\x28\xbd\x01\x88\x83\xff\x87\xb8\x2c\xa2\x1b\xe0\x49\xff\x63\xfd\x54\xb9\x3d\x3b\xc9\xc5\x68\x31\x38\x37\xa5\x46\xdb\x3e\xe2\xc6\x4d\x43\xc7\x0c\x9d\xca\x60\x68\x57\x17\xc0\xc1\x94\xa5\xf1\x98\x3d\xcc\x25\x70\xae\x5a\x4a\x48\x20\x45\x70\xa4\x3c\x87\x50\xd3\x4c\x66\xc1\xba\x7d\x24\xe5\x8a\x29\xf6\xab\xe3\x3d\xc8\xdc\x0d\xe2\x60\xca\x12\x28\x8a\x2d\x34\x4a\x2e\x35\xbf\xa5\x57\x70\x45\x6a\x58\x31\xfd\xad\x27\xb5\x5c\x32\x5b\x33\x93\x90\x44\x7f\xd5\x01\x5a\x23\x3b\x62\xea\x0c\xe2\x10\xd7\x22\x9e\xcd\xf3\x01\x1a\x59\x91\xa5\xc5\x17\xbc\x9c\xde\xe3\xa0\x2a\x2a\x27\x21\x92\xdf\x7c\xff\xcf\x83\xcf\xa8\x93\xed\x4f\x26\xbb\x3f\x3f\xd5\x54\x52\xb5\x6b\xbe\x05\x65\x08\x04\x71\x70\x3b\xd1\xa6\xf0\x6d\x12\xd4\xba\xd1\xd5\x80\x50\x37\xb9\x09\xc2\xa3\x47\xc4\x17\xd0\x2e\xcd\x25\xea\x38\xe5\x4a\x94\xf0\xff\xd6\xfd\x03\xd9\x89\x00\x1c\x4c\x5a\xab\xb9\x69\x47\xc9\xec\x96\x21\xc5\x83\x6f\xb4\x07\x51\x99\x6b\x9d\xad\xc7\xf0\x62\xa4\x68\x34\xa6\x9b\x53\x24\x16\x5d\xa5\xa0\x6f\x21\x88\x83\x49\x0b\x55\x02\x3f\xa9\x11\xf7\x49\xd4\xbe\x21\x9d\xa2\x01\x51\xad\x23\xe1\xb5\xe0\xdf\x2f\xef\x73\xc4\x52\xa0\x10\xb4\x53\xc5\xb8\xf7\x23\xc2\x82\x38\x98\xb4\x0a\xa4\xfc\x72\x2e\x44\xfc\xd9\x9d\x8d\xd0\xdb\x69\x28\xdd\x8b\x69\xf7\xcd\xbf\x10\xde\x1b\x56\xf0\x69\xde\xbb\xf5\x50\xa1\xea\x0a\x22\x2c\x88\x83\x49\x6b\x9e\x3a\x4e\x7e\xeb\xff\xc7\xda\x5b\x47\x55\xd5\xbc\x0f\xbc\x34\x48\x4b\x83\x80\x22\x25\x12\x52\xd2\x8d\x94\x34\x82\x74\x8a\x84\x02\x92\x0a\x22\x48\x77\x08\x82\x82\x74\x28\x4a\x08\x48\x37\x82\x20\x48\x97\xb4\x74\x4a\xa7\x88\xc0\x5d\xf7\xb7\xde\xb3\xef\xbb\xf6\xf9\xae\x3b\xac\xe5\xfb\xff\x67\x3d\xfb\xec\x39\x9f\xd9\x7b\xf6\x3c\xcf\xcc\xd4\x3d\x23\x51\x77\xc2\x0f\x8f\x64\x79\x75\xc9\x3f\x9a\xe1\x60\xe3\xae\x61\xf6\x80\x21\x0f\x5f\xb6\x44\x63\x28\x42\x2d\x10\x87\x50\xeb\x7c\x35\x1f\xa0\x11\x14\xb2\x5a\xca\x1c\xdf\xd4\xa8\x89\x07\xf7\xee\xbc\x67\x18\x61\x5d\xe2\x57\x38\xfc\xcd\xf3\x40\x7d\xcb\x35\x7b\xcf\x6e\x81\x9f\x18\x73\x17\x72\x00\xc4\xc1\xd4\x9a\xbd\x1b\x7d\x15\xb5\x4e\xfc\xb3\x0d\xee\xe8\x9d\x32\x97\x4a\xa7\x40\xc7\x7e\x59\xff\x51\xf5\x50\x7b\xad\x9c\x8d\xc2\x29\x45\xe8\xe8\x7a\x10\x07\x53\xeb\xa5\x1e\xe1\xae\xfd\xfb\x3f\x72\x19\x5d\x04\x5f\x8e\x9a\xc7\x45\x74\xa8\x2d\xfc\xeb\x8c\xbf\xae\x58\x1f\x5c\x08\x63\xd6\xcf\x85\x8e\x33\x00\x71\x30\xb5\x64\x27\x85\x95\x26\x25\xf9\x5c\xc3\x3d\x13\x23\x6a\x5e\x19\xaa\x64\xc8\xca\x35\x58\xa0\x6d\x65\x3f\xc3\x67\xf0\x61\xd9\x61\xa6\x47\x84\x05\x71\x30\xb5\xaa\x92\x6e\x98\x92\xc5\xc5\x72\xe4\x2f\x5d\xa3\xaa\xe9\xff\xbc\x6b\xb5\x2d\x47\x9a\xf0\x09\x13\xe5\x8b\xfc\x4d\x42\x81\xa3\x1c\x68\x1e\x01\xc4\xc1\xd4\xba\xb7\xda\xc1\x3b\x72\x3f\xca\x97\x49\x7a\x73\x94\x4a\xe3\xb9\xb5\x0b\x1a\xcd\x63\x3f\x9d\xa2\x9d\x3e\xe9\xeb\xbf\x2c\x7d\x87\xb0\x10\x6a\x81\x38\x84\x5a\xe7\xab\xf9\x00\x8d\x94\xff\x47\x11\xa4\xdd\x8e\x03\x97\xfc\xd6\xdc\xfd\x38\x59\x63\x87\x90\x72\x5a\xcb\x43\xd9\x3c\xfc\xd1\x67\xc7\x07\xbe\xf6\x63\x07\x35\x66\xd0\x89\x54\x20\x0e\xa6\xd6\x32\x9d\xae\x77\xaa\xca\xf4\x43\x02\xba\xd4\x20\xc6\xfc\x12\xd1\x46\x7c\xf2\x2a\x6e\x5f\xfa\xb9\x0e\x2b\xea\x37\x05\x7b\x9e\x97\xa0\x15\x39\x00\x0e\xa6\x96\x56\x7d\xdc\x72\x39\xdb\xdd\x50\x99\xc3\xcb\x92\xaf\xcb\x4f\x9d\xfa\xeb\x72\x28\x0f\xf0\xcb\x38\x30\x58\xfd\x5e\x0c\xfe\xe6\x37\x82\x36\xe4\x00\x70\x30\xb5\x6e\xe9\x8c\x95\xdd\x68\x18\xff\x69\x55\x56\x3c\x1b\x36\xb5\xf6\x5c\xfe\xdd\x64\x3c\xbb\xf6\xe9\xf5\xaa\x88\xcb\xc1\xa2\xcb\x94\x50\x23\x80\x38\x98\x5a\x7b\x82\xb3\x9f\xf0\xe7\x36\x3e\x18\x27\x38\x5c\xee\x9f\x0d\x5b\x33\x98\x9b\x0c\xfa\x88\xfd\x4d\x97\x4f\x7d\x24\xb2\xa5\x28\xdd\x1e\x11\x16\xc4\xc1\xd4\x22\x2c\x1a\x2a\xb7\x79\x6a\x4b\x13\xda\x3c\x9e\x1f\xca\x92\x33\x14\x81\xfd\x4c\x1e\xa7\x23\xfe\x56\x99\x56\xc0\xf7\x04\x69\x49\xe8\x9c\x60\x10\x87\x50\xeb\x7c\x35\x1f\xa0\x2f\xa2\xff\x31\x97\xa4\xe5\x5b\x69\x40\xbb\x47\x46\x10\xe6\x39\x15\xf0\x47\x74\xca\x8c\xcd\xb0\xe2\x3d\xcd\x3d\x6b\xfb\x6b\x65\x97\xba\x0f\xe5\x6b\xa0\xb9\x24\x00\x07\x53\xeb\xc1\x47\xec\x0f\x0a\x16\xbb\x69\x5c\xce\xd1\x4f\x65\xb4\x8d\x36\x8d\x6d\x78\x4a\x03\xd2\xbe\x2e\x30\x7f\xd6\xf0\x4b\x35\x14\x8b\x87\x4a\xac\x01\x1c\x4c\xad\xb3\x2f\x2b\x72\x46\xdb\x75\x9a\xae\xb3\xbc\xd1\x3a\x53\x7a\x17\xa3\x96\x0d\xde\x49\x52\x5d\x4d\x7f\x97\xe0\xf9\x9d\x3e\x29\xa5\x15\x11\x16\xc4\xc1\xd4\xba\xd1\x19\x12\xb0\xd9\x5a\xc5\xee\x12\xf6\x50\x43\x8e\xb0\x21\xfb\xdd\x6a\x6a\xfb\xe6\x80\x42\x8d\xe6\x33\xcd\xf5\xad\x42\x27\x68\xc5\x3c\x88\x83\xa9\x35\xd8\x22\x32\xf4\x9e\xb0\x82\xff\xde\x86\x94\xde\xe5\xde\x16\x41\x8f\xd0\xfd\x81\x44\xf5\xda\x74\x6c\x83\x44\xb3\x81\x3a\x35\xa8\x23\x80\x38\x98\x5a\x65\x8f\xda\x0f\x6d\x07\x1e\x65\x4f\xd8\xba\xab\xe7\xfb\xaa\x79\x31\x5a\xa2\x4a\x58\x76\xe1\x7d\xfd\x8c\x22\xbb\xdc\x2b\xbe\x46\x8e\x50\x0b\xc4\x21\xd4\x3a\x5f\xcd\x07\xe8\xcb\x17\x59\x2d\xd4\xb8\xd1\xed\xf8\x4c\x12\x65\xa5\xbe\xcc\x61\x36\xe5\x3d\x42\x4c\xc6\x86\x97\x25\x6c\x1f\xdb\x45\x3c\xbf\x3e\xb5\xca\x1e\x83\x76\xce\x00\x71\x30\xb5\xf2\x77\x9f\x61\xf4\x0e\x1a\x49\xe7\x3c\x1d\xc2\x5f\x56\xfa\x49\x84\x66\xac\x71\xc7\xb1\x5b\x68\x3b\x48\x2e\xdb\x46\x29\xf4\x1b\xb4\x25\x35\x88\x83\x2f\xa8\x4d\x42\xe1\x8b\x6a\x8b\x73\xd9\xc2\x1c\x96\x0d\x58\xb2\xc5\x88\xde\xed\xf0\x55\xa8\xbc\xf1\x86\x65\xfa\xe9\x59\xfd\xab\xdf\x50\x7d\x2d\x88\x83\xa9\x35\xa2\x79\x31\xff\x4e\xcb\x49\xe6\xc6\x40\xfa\xc0\xb5\xf1\x30\x97\xf7\xed\x59\xb9\x57\xec\xcd\x7e\x53\x85\x06\xff\x91\x4c\xb9\x03\xad\x8c\x00\x71\x30\xb5\x54\xde\xa6\xda\x4f\xc9\x98\xe9\x71\x33\xf6\x65\x7e\xb1\x9b\x3d\x40\x35\xf7\x26\x3f\x5c\xbe\x9b\x21\x4b\x9f\x2a\x8e\xc9\x15\x0d\x6d\x2e\x08\xe2\x60\x6a\xe1\x14\xd8\xa8\x11\x68\xab\x12\xbb\xb7\xd4\x7c\x51\x0b\x38\x62\xc9\xbc\x1b\x1f\x77\x54\x57\x5e\x79\x73\xf6\x43\xaa\x57\xbb\x49\x1e\x42\x2d\x10\x87\x50\xeb\x7c\x35\x1f\xa0\x19\x0e\x64\xb5\x38\xbb\xbc\xd8\x2f\xdd\xa0\x30\xe9\xda\xb1\xe8\x4a\xc8\xb2\xbf\x7a\x16\x5e\x67\xc3\x59\x38\xa2\x8e\x15\x4c\x32\xd9\x5d\xbd\x0d\xb5\x2a\x88\x83\xa9\x55\x7d\x45\xa9\xd5\xeb\xe2\x7d\xb3\xc1\xd2\x1e\xec\x0d\xb9\xba\xf8\x88\xd7\x0d\x6f\x1d\xdf\x1d\x36\x84\xea\x14\x05\x78\xf8\xd0\x42\xc3\x0c\x10\x07\xdf\x42\xc6\x2e\x32\xdd\x55\x56\xf9\xc9\x24\xe3\x7e\x56\x09\xf6\x7a\x5b\x78\xd8\xf1\x22\x76\x45\x24\x5e\x32\xbf\x29\x6e\xe6\xed\xc9\x3d\x68\x0b\x19\x00\x07\x53\xeb\x55\xa9\xdd\x9a\x5b\x68\x1f\x96\x16\x47\xa8\x1d\x65\x06\x39\xa1\x95\xd3\x82\xdc\xf6\x1f\x23\x8a\x22\x3a\xf3\xf0\x2d\x6a\x45\x68\x33\x50\x10\x07\x53\x6b\xc7\xc9\xec\x96\x27\xfa\x83\x92\x0a\xbd\x38\xde\x09\x0f\xc2\x00\xf6\x69\x91\xcd\x9b\x9d\xfd\xd3\x25\x17\xb1\x2b\x71\x2d\x18\xa1\xbc\x38\x88\x83\xa9\xe5\x7b\xf7\xeb\x0c\x17\xff\x81\xdc\x1f\x6a\xf1\x0a\xc1\x82\x49\x14\x9b\x61\xd1\x01\xcb\xac\x86\xee\xf8\x8c\xbe\x0e\x14\xba\x98\x33\x84\x5a\x20\x0e\xa1\xd6\x39\x6b\x3e\x40\x73\xd8\xff\xd4\x7c\xf8\x20\xd5\x7c\x70\x07\xcd\x30\xf0\xcf\xcd\x54\xba\xa5\xdd\xd2\xb8\xac\x4b\xa4\x63\x63\xa1\xf8\xd0\x2f\xa2\x7f\xd7\x2d\x0e\xed\xf7\xa3\xaf\xd3\xff\xc1\x7c\x26\x52\xcd\x87\x9d\x0c\x8b\x08\x9b\x9a\x91\x7b\x11\x6e\x48\x0f\x89\x23\x25\xfa\x2d\x1a\x8f\x16\xa3\xb4\x58\xe5\x02\xd5\x33\x16\xbe\xd0\xff\xe0\x6c\x17\x1f\xa4\x9a\x0f\x89\xfd\x50\x7a\x21\xf4\x9f\xd3\x55\xd2\xaa\x1b\x77\x31\xf1\x3f\xe7\xcd\x14\xe0\x9a\x28\x33\xd0\x69\xdc\xbf\xd7\xbd\x6b\x54\x8c\xf7\x1f\x4d\x2e\x02\xda\x12\xb9\x83\x6b\xd2\x3e\xdb\xf1\x24\x99\xf8\x9c\x80\x23\x2f\xa3\x95\xd3\x5c\x58\xc2\xb4\x60\x56\x6f\x12\x16\xf4\xe0\xf1\xfe\xe2\x6d\xf7\x37\xd0\x91\x58\x20\x0e\xd6\xc1\xdf\x8d\x95\x04\xfd\x29\x5d\xb2\xff\x3e\x51\x7c\x09\x8d\x78\x2c\x26\xf3\x50\xb5\x3b\x95\xe1\xcd\x93\xab\x5f\xf2\x63\x9f\x50\x6c\x64\x20\xc2\x82\x38\x58\x07\xb7\x9b\x64\x56\x09\xb2\x7d\x9a\xc6\xbf\x8a\x2f\x1e\xe0\x8b\x5b\xda\x41\xf2\xdb\xdf\x64\x57\x63\x2b\xe9\x71\xd5\x27\x49\xdf\xe4\xab\x88\xb0\x20\x0e\xd6\xc1\xad\xa5\xb2\x33\xb5\xdd\x63\x83\x4a\x6e\xc8\x5f\x1e\xbe\x32\x46\x21\x30\x9d\xd1\x43\x45\x9e\x7b\xe5\x8c\x0a\x6f\xa4\xbe\x68\x13\xda\x8b\x11\xc4\xc1\x3a\xf8\x9a\xa2\x8f\xb6\xc7\x8b\x7e\x27\x5b\x74\x3d\x46\x7e\x17\xa9\x79\x6a\x36\x9d\xaf\x4b\x2a\xc7\x46\x4f\x0a\x3e\x6d\x9f\x3d\xa7\xb1\x84\x66\x15\x00\x1c\xac\x83\xe7\x32\xae\x0b\x67\x4d\x5e\xa8\xa1\xb4\xdb\x9a\xbf\xfd\xee\xc6\xc5\x32\xbc\xdd\x26\x94\xf8\xcf\xb5\xf4\xac\xcc\x6f\x2b\x9b\xbe\x0b\x40\x2b\xe6\x01\x1c\xa2\x83\x9f\xaf\xe6\x03\xd4\x67\x90\xd5\x4a\x0c\x2f\xf9\x7a\x87\x8e\xe0\x64\xe9\x13\x2f\xb9\x1f\x96\x79\x5e\x5c\x77\xca\x1f\xbc\x92\xc0\x94\xdb\x5c\x8b\xb7\xdd\x5a\x44\xb3\xa0\x2a\x4c\x00\x07\x53\x4b\xe7\x5e\xcf\xeb\xd8\x62\x1d\xd9\x45\x6e\xa2\xac\xfa\xd2\xac\xce\x45\x8a\x75\x33\x6a\xb9\x7e\x6b\xea\x19\x95\x47\x0b\x3c\xeb\xd0\xb9\x60\x20\x0e\xa6\x56\xda\x15\xaf\x3a\x37\xef\x6e\x2e\xb7\x88\xd7\x2f\x76\x1e\xe8\xb2\x04\xbb\xde\x53\x4c\xc3\x2e\x91\x6f\xde\x2b\x1f\x7a\x79\xa5\x01\xda\x93\x15\xc4\xc1\xd4\xaa\x95\x3e\xdb\xd6\xc7\xf5\x36\xc8\x1d\x1a\x79\xcc\xf8\x73\xbe\x25\x5d\xca\x72\xf1\xf1\x6f\x87\xc1\x0b\x7c\x1e\x81\xd8\xf4\x4e\xd0\x77\x3a\x88\x83\xa9\x75\x88\xe9\x4e\xdb\x5e\xbc\xf4\x8c\x7e\xca\xfd\x7b\x1e\x26\x8a\x8d\xe5\x55\x43\x1c\xc6\x4c\xad\xc6\x7c\x5b\xad\xdb\x7d\xd5\x4d\x50\x52\x16\xc4\xc1\xd4\x7a\x9d\xd4\xe3\xc2\x2a\xe9\x64\x5f\x98\xe8\xdb\x7b\x43\x51\xf2\x0d\x97\x7a\x38\x63\xc0\xb2\xb6\xe0\x52\x87\xe2\xe5\x61\x66\x7e\x61\x84\x5a\x20\x0e\xa1\xd6\xf9\x6a\x3e\x40\xcf\x46\x64\xb5\xee\x87\xaa\xd1\xa9\x5e\x9b\x96\xa3\x28\x8c\xff\x7a\x20\x9f\x4a\xb4\xf1\xc8\x95\xf2\xb0\xd0\x4a\x89\x68\xc4\xfe\xd9\xd1\xab\x5d\x68\x8b\x2c\x10\x07\x3f\x91\xea\x11\x15\x47\xe1\x95\x3f\xf7\xc7\x5a\x1c\x15\x54\x66\x95\x8d\xfc\x2f\x3c\x29\xb9\xbf\xaf\x29\x68\xeb\xdb\x35\x6c\x66\x17\x0b\xfd\x59\x20\x0e\x3e\xbb\x48\x9e\x44\x5d\x3f\x93\x2f\x8d\x32\x46\x48\xf2\x8e\x8b\xfc\xe7\xbc\x77\x7e\xeb\x6f\x94\xc9\xf4\xd1\xda\x60\xbb\x1f\x9a\xb5\xd0\x0c\x33\x88\x83\xa9\xa5\xb0\x53\xfb\xf5\x17\xa5\x1d\x05\xba\x74\x8a\x58\x75\x67\xe1\x0f\x81\xb8\x52\x76\xe9\xcd\x86\xe5\xd5\x1d\x99\xbc\xc0\xa1\x1d\x39\x68\x59\x1d\x80\x83\xa9\xd5\x52\x13\x62\x18\x9e\xdd\x8a\xf5\x63\xf7\xcf\xa8\xde\x3c\x66\xf5\x85\x95\x5e\xdc\x36\xcd\xd2\x14\xd9\x92\x67\xf1\xa8\xea\x5e\xc7\x88\xb0\x20\x0e\xa6\xd6\xe6\x69\x16\x87\x27\x45\xcd\x43\x11\x6c\x53\x6d\x72\x26\x74\x2d\x2e\x96\xb0\xde\x0d\xf2\x57\x8f\xc2\x42\x7d\xbd\xa4\x76\xbe\x1d\x23\xd4\x02\x71\x08\xb5\xce\x57\xf3\x01\xca\xf2\x23\xab\x55\xf3\xab\x89\x3b\x96\xeb\xb0\xae\xa3\x8d\xe0\xfa\x43\xb5\x0b\x72\x5a\x8b\xe5\x96\xf8\x26\xc1\xb9\x84\xa4\x18\x9c\xa5\x8f\x6a\x5a\x10\xb7\x0f\xe2\x60\x6a\x29\x2b\x24\xda\xd9\x1a\xe5\xfc\x70\xd7\x1e\x4b\xb4\x38\xa3\xa6\xfa\x94\xfc\x05\xcd\xb4\xc9\x7a\x4e\x89\x49\xd6\x2e\x5c\x2c\x0c\xda\x40\x17\xc4\xc1\xcf\x07\xdc\xb2\xef\xb8\x12\x34\xc9\x59\xfe\xa8\x49\xf2\x58\x79\xfc\x92\x5e\xfe\xe6\x18\xef\x88\x94\xe5\x4d\x41\xfb\xf6\x20\x16\x4e\x68\x86\x19\xc4\xc1\xd4\x52\xbe\xa0\x1f\xc7\x96\xef\x12\xcd\x15\xfd\xbd\xcb\x86\xee\x3b\x7b\xb3\x61\xc7\xdc\xef\xfe\xed\x26\xdb\x68\xbb\x8b\x51\x3e\x97\xa1\x95\x24\x20\x0e\x9e\x13\x51\xdf\x4a\x95\xf1\x89\x50\x9e\x93\xfe\xc4\xf2\x92\xf5\x0b\x87\xcf\xc1\x52\xfd\xc7\x3b\x47\x45\xe2\xbb\x89\x7d\x85\x9a\x23\x8c\x50\xcd\x07\xc3\xca\x08\xb1\x42\xa8\x6f\x16\x21\xc1\x4c\x79\xb0\x63\x99\xd7\xe2\xac\x4a\xd4\x9a\xc5\x33\x5d\x3a\x3f\xea\x7b\x5c\x9a\xf8\x89\xff\xae\xf9\xb8\x26\xef\xa2\xff\xc5\xd2\x32\x33\xd2\xf0\xd3\x33\x57\x6c\xbf\x60\x1b\x87\x41\xe5\xd2\xd0\x62\x27\xb6\xe5\xb5\x15\xf6\x5a\x4d\xb4\x7f\x77\x44\xe5\x5f\x2f\x77\x88\xef\xb6\xad\x4e\xad\x75\xdf\xfe\x45\x7d\x5a\xba\xfc\x6a\xb0\x28\x3c\xd4\x2f\xea\x0b\x6b\xd4\xa5\x88\xee\x8b\xb0\x9a\x0f\x50\x64\xe4\x9a\x8f\xac\xb4\x85\x13\x7e\xb4\x06\xdf\x21\x81\xfd\xa5\x07\x4e\x12\x84\xf3\x98\x94\xd6\x29\x1f\x85\x86\x29\x5d\xd3\x87\x7e\xcd\xb6\x39\xff\x7b\xba\xb9\x54\x2f\x39\xee\x8a\xa8\x76\x0c\xf1\xe6\x86\xff\xc4\x53\x03\x0d\x0d\x31\x05\xe1\xba\x9b\xd2\x8c\x14\x32\xbf\x75\x7a\x6f\x68\x40\x35\x1f\xa0\x98\xff\xd4\x7c\x34\xc2\x6b\x3e\x6e\xde\xf0\xbf\x34\xf8\x40\x42\x39\x59\xb7\x3f\x55\x9c\x51\x60\xf4\xe5\xcf\x3f\x78\x64\x34\xb9\x49\x39\x6e\x37\x54\x2e\x3e\xdf\x61\xfe\xeb\x41\x6e\x23\x52\xcd\x47\xbd\x6c\xe1\x58\x5b\x21\xee\xa3\xf5\xf9\x82\x64\x25\x47\xbd\xfd\x7a\x9b\x47\xd4\xd6\x5d\xaf\xbb\x13\xf3\xb5\xe2\x62\x5d\x67\xa6\xff\xfe\x92\x48\x35\x1f\x8f\x3a\x8b\x6f\xb2\x76\xc9\x07\x5f\x0c\x6a\x18\x63\x4b\x36\xab\x08\x2a\x1e\x36\xe0\x66\xe8\xe7\xaa\x78\xbc\xd4\x5d\x5e\xc2\x7c\xe9\xef\x2f\x89\x54\xf3\x61\x52\xb4\x4c\x8a\xf7\xf8\x73\xf6\x7b\xed\x88\x4e\x55\xb4\x79\xbd\x84\xb0\xd6\xdc\x06\x51\xed\x99\xb6\xe5\xe5\x71\xb9\x62\xee\xf2\xbf\xbf\x24\x52\xcd\xc7\x6b\x35\x3e\x53\xeb\x83\x4b\xf1\xb2\xc5\x26\x0d\x42\xab\x1f\xa6\x13\xd3\xd7\x25\xd0\x8f\x13\x74\xea\xb3\xbf\xb6\xac\x84\xb8\xfe\x7d\x35\x44\x23\x52\xcd\xc7\xbc\x13\x76\xcd\x85\x67\x3f\xee\xfd\x79\x16\x5c\xb5\xed\xf1\x89\x8a\xf9\xc2\x37\xf7\xfc\x4e\x0e\xfd\xfb\x85\x37\x05\x9b\x24\x08\xc5\xff\xfe\x92\x48\x35\x1f\xf8\xa9\x0d\xad\x1c\x34\xf1\x55\x34\x97\xbc\xb0\x19\x56\x8e\xcc\xf9\x51\x42\x89\x71\xe5\xf0\xbb\x03\x7f\x31\xd4\x6f\x6a\xda\xff\xfd\xd6\x22\x8d\x48\x35\x1f\x85\x47\x89\xc4\x43\xd6\xfd\x12\xb2\xd7\x8b\x73\x29\x5b\x70\x0a\x9f\x6d\x27\x37\xd9\x12\x7c\xbc\x53\x41\x85\x33\xfe\xc1\x8d\x44\xe5\xbf\xf9\x2c\x03\x75\x45\xe4\xb7\x90\x43\x47\x73\xdb\x45\x49\xe6\x17\xec\x77\xa7\xb8\x4f\x9f\x88\xcd\x4d\xea\x1a\x5f\xf8\xf1\x4c\xf1\x87\xc5\x80\xc1\x8b\x21\x77\x41\x68\x7b\x38\x10\x07\x7b\x0b\x4d\xf9\x53\x76\x19\x11\x7e\x0e\xfc\xec\x1f\x35\x26\xa3\x25\xd5\x27\xaf\xa9\xaf\xaf\x9a\x8a\xcf\x4d\xaf\x39\x21\x1b\x6f\x35\x7b\x19\x11\x16\xc4\xc1\x4f\x02\x77\xfb\xad\x37\x66\x32\xdc\xfc\x66\x13\x7f\xb3\x5b\x8c\x79\x8f\xab\x3e\x0e\xc7\x22\xb8\xb7\x6a\x81\xf2\xa3\x66\xd3\xfe\x2e\xb4\x47\x1e\x88\x83\xbd\x85\x48\x8a\x82\x2d\x3c\x70\x9e\x13\xaf\x69\x9f\x44\x61\x8e\x78\xf7\x0d\x8c\xec\x3d\xca\x39\x9d\xbc\xce\x68\x60\x9d\x1c\x8f\x15\xd9\x83\x08\x0b\xe2\x60\x8d\x90\xa7\xfd\x92\xb0\x23\x72\xab\xe2\xae\xcd\x6c\x84\xc6\x8d\x2b\x3d\x1c\xa1\xaa\x35\x3b\xc7\x43\xf5\x18\xc3\x74\x04\x4c\x5a\x91\xd0\x7a\x46\x10\x07\x4f\x44\x98\x76\x61\xb5\xcc\x63\x7a\x3d\xc5\x6a\xde\x15\x7d\xfd\x70\xfd\x61\xda\x55\xac\x3f\x3b\x87\xec\x85\x28\xc4\xb9\x2f\xa8\x04\x77\x11\x35\x1f\x20\xee\x9f\x7d\x3e\x1a\xcf\x55\xf3\x01\x7a\xe2\x22\x9b\x85\x77\x44\xdf\xa4\x14\x9b\xec\x2f\x79\x91\x9b\x9d\xa8\x55\x42\xb8\xbc\xc0\x94\x23\x57\x27\x72\xeb\x33\x16\xd6\x2e\x81\x05\xe3\x11\xe2\xee\x41\x1c\x7c\xed\xe9\xe8\x44\x7f\x80\xb0\xc0\x1b\xaa\xe3\xd4\xe7\xfb\x28\x6d\x4f\x77\x79\xd1\x02\x33\xd3\x51\x96\x1c\xac\xf4\xc9\x15\xf1\x6b\xa1\x23\x63\x40\x1c\xfc\xd4\x20\xb7\xef\x58\x5b\x9f\xdf\xff\x9a\xdc\x19\x4a\xde\x23\x46\xfd\x61\x2b\x93\x95\x42\x6f\xea\xe6\xd6\x73\xc7\x3e\x59\x9f\x96\x03\xda\x74\x0e\xc4\xc1\xcc\xba\x70\x64\xae\xfb\x4a\x3a\xa7\x40\x66\x8d\x07\x1f\x9b\x82\x75\xbe\xf7\x6d\xea\x26\x03\x9f\x79\x6f\x2a\xce\x5e\xf1\x10\x4a\x13\x94\x94\x05\x71\xb0\x46\xe8\x5d\xb2\xa9\xb8\x51\xec\x2a\xa0\xfe\x9a\xd7\x43\x2e\xba\xc2\x0d\xdd\x22\x90\xd3\xde\x74\xf5\xf5\x05\xac\x6f\xa8\xdc\x93\xe6\xaf\x10\x61\x41\x1c\xcc\xac\xd1\x9a\x44\x1b\x47\x6d\xfe\x2b\xb3\x34\x6f\xc3\xf1\xe5\xf8\xa9\xc7\x79\x4d\x6a\xbc\x0b\x4c\x30\x05\x8e\xdf\x5c\x29\xf5\x91\x11\x44\x0c\x9d\x41\x1c\xe2\x58\xc4\xf3\xd5\x7c\x80\xde\xac\xc8\x6a\x09\xb6\x36\xcb\xee\xb7\x0c\x5c\xfb\x81\xcd\x71\xf9\x8e\xe4\x5c\xfd\xbd\x95\xbc\x1b\xeb\xea\x4b\x87\x05\x8f\x46\xbc\xf5\x55\x94\x86\xa1\xdd\x53\x00\x1c\x3c\xc5\x45\x65\x6a\xe7\x3c\x89\xfd\xc4\xff\x78\xd3\xbc\x8d\x7f\xed\x45\x72\x1c\x06\xe5\x1b\x73\x36\x4a\x5d\x0b\x4f\xc5\x43\x2f\x79\x77\x28\xc5\x05\xe0\x60\x6a\x19\xe9\xdf\x22\x08\xe5\x73\xde\x18\xfe\xac\x71\x5f\x57\xf5\x93\xcb\x45\xcf\x6b\xf1\xe8\x61\x03\x35\xb2\xcc\xa4\x5f\x19\xc7\x35\x3f\x21\xc2\x82\x38\x98\x5a\x5c\x61\x17\xc9\x59\x2b\x5b\xc2\xd1\x0e\x9d\x8f\x17\xf3\x89\x58\x77\xec\x14\xb3\x86\x84\xf9\xee\xc8\x27\xbb\xd7\xe3\x49\xdc\xe6\x43\x84\x05\x71\xb0\x46\x60\x55\x8c\xc9\x61\x0a\x26\x47\xd5\x98\x77\xaf\x58\x89\x71\xa6\xd7\x1f\xcd\xa8\x74\xc9\x2e\x24\xd1\x74\xec\x43\x37\xa8\xc7\x84\x26\x53\x40\x1c\x3c\x31\x7f\x4d\x8d\xd4\xf6\x09\x27\x81\x9f\xf7\x5e\xa0\x7b\xde\x1d\xde\x89\x88\xef\xf6\x0a\x96\x67\xfc\x2a\xa5\xa6\x3c\xf1\xbd\x2b\x17\xa1\xc4\x3c\x80\x43\xa8\x75\xbe\x9a\x0f\xd0\x08\x0a\x59\x2d\xb3\x03\xe1\x71\x16\x45\x5d\xf9\x85\x5e\x26\x49\x75\xd9\x55\x94\xdb\xce\x45\x26\x4d\x49\x5a\x34\x53\xac\x21\x1c\x9a\xe2\xfb\x04\xd0\xf2\x29\x00\x07\x6b\x55\x02\xd5\x67\x09\xf2\xd5\xaf\xe3\x23\x55\x63\x36\xc5\xe7\x5c\x9c\xbe\xc8\xb1\x58\xb2\x06\xf5\x64\x12\xd2\x8b\x72\x3a\x3f\xdc\x85\x56\xbc\x81\x38\x98\x5a\xcf\xd1\x6a\xfc\xee\x5a\xf8\x84\xd2\x18\x84\xb0\xe3\x04\xc7\xba\x6f\xfd\xbc\x47\x80\x55\xf1\x88\xbd\x23\xf2\xd6\xb7\xdf\xdb\x95\x50\x39\x11\x88\x83\xa9\x45\xae\xc0\x5d\x36\x89\x25\x15\x5c\xc0\x3e\xb9\x23\xa2\xca\x54\xdd\xad\xb6\x32\x38\xbd\x28\x7c\x67\x70\xba\x88\xd7\xda\x0e\x07\x3a\xce\x00\xc4\xc1\x1a\x01\x25\x76\xbb\xc9\x8f\x49\x74\x30\xf7\xe7\x80\x36\xcb\x5b\x4c\xdd\x98\xf2\xeb\x7a\x18\x4c\x0c\x93\xdd\xed\x1a\x1e\xf1\xb3\x43\xd0\xa7\x29\x88\x83\xa9\x65\x9a\x64\x93\x5c\x29\x63\xae\xd3\x85\x32\xd4\xe5\x7d\xcd\x52\xc7\x68\x57\x23\x44\xc9\x4d\x70\x9e\x6f\x26\x35\x6b\xbd\x3e\x3f\x19\x5a\x7b\x0a\xe0\x10\x6a\x9d\xaf\xe6\x03\x34\x52\x46\x56\xeb\xb8\xee\x41\xdc\xbb\xb3\x49\xbc\x87\xdc\x2e\xc2\x67\x93\xf9\x24\x17\x72\x78\x57\x1c\x73\x19\x19\xae\x63\xbc\xbc\x92\x59\xe3\xcc\x8d\xb8\x7d\x10\x07\x6b\xd5\xc2\x89\xb1\xe1\xce\x46\x4a\x6c\x6b\x13\x1e\xe1\x3c\xce\xa0\x17\xdf\xa6\x15\xff\xc8\xed\xe5\xcc\x18\x8b\xce\x27\x99\x5f\x2d\x81\x96\x35\x83\x38\x98\x5a\x85\x9a\x12\x0b\xd2\xec\x6d\xa6\x0b\x73\x8c\x02\x71\x6f\x9e\xfd\xa4\x4b\xf6\x2f\xd8\xb4\xdf\xbf\xe2\x43\xed\x28\x37\x12\x90\x09\x0d\x0c\x41\x1c\x7c\x63\xcf\x9a\xa7\x4f\x17\x48\xb3\xf1\xb1\x18\x56\x6b\xd8\x9c\xc4\x53\x9a\x31\x46\x7b\x3c\xf1\x92\x87\xbd\xf2\x8c\xcf\x58\x4f\x3f\x41\xaf\x6f\x10\x07\x6b\x84\x54\xa7\x6d\x63\x9b\x99\xd6\xa6\xc3\x97\x37\x3f\xf5\xb9\x69\x32\x87\x5c\x71\x7a\x5e\xf6\x8c\xf7\x46\xf5\xda\x5a\x87\x46\x5d\x01\xb4\x10\x1f\xc4\xc1\xd5\xc2\x29\xbf\x3a\xc9\xfa\x38\xa9\x99\x35\xed\xa4\x67\x83\x88\x5e\x5f\x30\xe8\x65\x81\x91\x75\x9b\x16\xc1\x0d\xff\xc5\x26\x8b\x08\x48\x2d\x00\x87\x50\xeb\x7c\x35\x1f\xa0\x2f\x22\x64\xb5\x68\x27\xfd\x8f\x1e\xfa\x8a\xe9\x99\x61\x8e\x9c\x45\x78\xa6\xa4\xd0\xee\xa2\xe1\x5b\x08\xd5\xbd\x4f\x8f\x0d\xda\x65\xd0\x96\x80\x92\xc7\x20\x0e\xd6\xaa\x7e\x36\x95\x43\x12\xf9\x4c\xb7\x4a\x0a\xbc\x47\x57\xef\x55\xca\x78\xe5\xc4\x9a\xad\xcc\x7e\xae\x4b\x7e\xac\x49\xb8\xfe\x79\x62\x03\x11\x16\xc4\xc1\xd4\xc2\xb8\xf9\xbe\x41\xd1\x53\x96\xa6\xba\x67\xf0\x40\xfd\x91\x45\xd0\x35\xde\xb2\x4d\x7d\x5a\x7f\x71\x1e\x14\x2b\x72\xd1\xf5\x51\x28\xb9\x02\xe2\x60\x6a\x6d\xbb\xb8\x19\x8a\xbf\xf9\x83\x63\x45\xd0\x36\x85\x59\x56\xaa\xc3\xa3\x7e\x92\x2c\xdf\x84\x97\x1f\x63\x4e\x25\xd2\xcb\xff\x05\x5a\xf5\x08\xe2\xe0\xe5\xeb\x97\x4f\x3f\x12\x6b\x59\xff\x66\xd0\xf8\x62\x89\x6d\xb7\x9c\xf0\x27\xef\x49\x7b\xda\xfa\x48\x9c\x8c\x88\x99\x63\xc3\x8e\x06\xf4\xfa\x06\x71\x30\xb5\x34\xd0\x7b\xbe\xf2\x6f\x47\x8d\x73\xae\x0a\xb1\xf0\xbc\xa0\xa3\xb1\x29\x53\x26\x95\xcd\x66\x0b\xe7\x7f\x4a\x4a\x47\x2c\x29\x37\x8e\x50\x0b\xc4\x21\xd4\x3a\x5f\xcd\x07\xe8\xcb\x17\x59\x2d\xdf\x6b\xb7\xa5\xf6\xdb\xc3\xe4\x95\xef\x18\xdb\xee\xbe\x0e\xb9\xf9\x45\x26\xfe\x68\xb7\xd1\x62\xff\xbb\xc7\xb5\x2b\x06\x9e\xfd\xd0\x61\x67\x20\x0e\xbe\x34\x2d\xee\xd9\x7d\x1d\x96\x30\x4c\x93\x54\x57\xa1\x9a\xee\x95\x55\xf5\x18\xec\x08\xdd\xce\x98\xb3\x6a\x49\x71\x94\x15\xde\x31\xa8\x48\x0b\xc4\xc1\xd4\xba\xe4\xf5\x16\x2f\x47\x9f\x2c\xda\x6b\xc9\x69\xfd\xb0\x66\x4b\xc3\x91\x20\x7d\xd3\xb0\xed\x80\x8f\xbc\x35\x28\xaa\xc1\xf2\x31\x39\x22\x2c\x88\x83\xa9\x55\x9d\x2b\xca\x62\xe0\xfc\x1b\xf7\x4f\x4a\x3f\x56\x7c\x1d\xdd\x2f\xaa\x8b\xb3\xb6\x18\xe8\xc3\xf8\x39\x0f\x62\x9f\xff\xe8\x4b\x0c\x81\xca\x08\x00\x1c\xac\x11\xd4\x87\xea\xfa\x6e\x08\xe7\x7f\xc3\x6a\x0c\xc8\xe9\x7f\x11\xb8\x65\x41\xdf\xc1\x55\x89\xd6\x87\xeb\x40\xfd\x75\xd9\x4a\x14\x0d\xda\x42\x06\xc4\xc1\xd4\x0a\xf4\x8d\x97\x69\xe2\xff\x1e\xe8\xc8\x2c\xa2\x25\xed\xd9\x9b\x27\x47\xf6\x9c\x76\x2b\xd2\x31\x5c\x3f\xee\x37\x57\xb3\x47\x36\x29\x42\x2d\x10\x87\x50\xeb\x7c\x35\x1f\xa0\x19\x0e\x64\xb5\xba\x4c\xaa\xa3\xf8\xb6\xa3\xc5\x83\xc4\x98\x8a\x28\x9d\x2e\x0d\x6a\x60\xa5\x60\x8c\x90\x26\x32\xcf\xcb\xe7\x33\x2c\xf9\xc9\xa7\x23\x6e\x1f\xc4\xc1\xb7\x01\x88\xbc\x8a\xb2\xc4\xc0\x16\x90\x40\xdb\xc9\x5b\x60\x66\x5a\x7d\xd9\x9b\x9f\x9d\xd7\x8c\xdd\xcc\xa9\x76\xf6\x83\x9b\x86\x36\xb4\x33\x0d\x88\x83\xef\x4e\x44\x77\xeb\xfb\x69\x2b\xe7\x2b\x3f\xcf\x16\xfd\x81\xa8\xc8\x9d\x33\x19\x7d\xdd\xae\x56\x91\xb9\x94\xb9\x5b\x5d\xb8\xae\xb7\x34\xa1\x9c\x0d\x80\x83\xa9\x55\xa5\xbf\xe7\x90\xe4\xf7\x7e\x5f\xea\xe1\x6c\x7b\xe4\xeb\xb7\x04\xe6\x4a\xc9\x39\x55\xaf\x45\x0d\xe6\x27\x4d\x1c\xda\x5e\xfa\x29\x42\x85\xb0\x00\x0e\xd6\x08\x13\x15\x01\xe3\x38\xbb\x61\xc3\x61\x58\x07\xbf\x4f\x92\x07\x3b\x88\xba\x2e\xda\xf0\xb8\x24\x68\xd9\xa1\xed\x08\x8f\xa1\xbd\x71\x45\x84\x05\x71\x30\xb5\xc4\xd0\xe2\xeb\x74\x83\x69\xb4\x66\x7c\xfa\xa4\x45\x1e\x19\xcf\xb3\x56\x09\x71\x84\x7d\x8a\x5f\xe1\xfa\x4c\x6c\xee\x66\x66\x9f\x82\x50\x0b\xc4\x21\xd4\x3a\x67\xcd\x07\x68\x0e\xfb\x9f\x9a\x8f\x46\xa4\x9a\x0f\x46\x19\x57\x96\x9d\xb3\x44\xa5\x9c\xc4\x24\xe9\x2c\xd1\xa4\x23\xbb\x67\x86\x17\x8f\x8a\x0c\x78\x0f\xc6\xdd\x48\xfe\xc4\x32\xff\xfd\x59\xd5\x8d\x48\x35\x1f\x24\xad\x4b\xa7\x79\x2c\x54\xb2\x3f\xc9\x4c\xdd\x4f\xcd\x56\x27\xd5\x22\x3b\x9e\x92\x9b\x27\x6a\xa8\x7f\xc5\xf5\xff\x5e\x8d\x25\xf2\xf7\x97\x44\xaa\xf9\xf8\x45\xe6\xbc\xc8\xcc\x73\xd8\x7a\x90\xa7\x37\x26\xce\xb1\xe9\xd0\x76\x91\x86\xf3\x8a\xe9\x54\x2e\x6f\x39\xce\xef\x2d\xe1\xbe\xbf\x9d\x42\xd5\x3f\x5f\x5b\x22\x77\xf0\x22\x4f\x6d\xc5\x34\x7e\x9c\x61\x89\x5f\x28\xfa\x32\xf6\xc7\x49\x87\x4d\x5b\x2f\xdf\x57\xe3\x46\xad\x88\xe0\x84\x66\xb0\x8f\x41\x83\x3d\x10\x07\x73\x3b\xfc\x69\x53\x27\x63\x76\x8c\x0d\x51\xa0\xdc\x55\xb5\xe7\x63\x05\x86\x82\x7a\xd8\xb5\x71\x97\xd7\x1e\x0e\x0d\xbd\xce\x5f\xeb\x3f\x81\x0a\xfb\x00\x1c\x3c\x31\xef\x80\xa2\xb6\xf8\xfd\xe1\x94\x09\x66\x60\x0d\xe1\x85\x6d\x01\x0c\xe9\xb7\xfe\x9d\x8d\x81\x0a\xef\x3e\x67\x10\x9e\x99\xf5\x6a\x40\x89\x79\x00\x07\xeb\xe0\x9f\xf8\xe8\xd7\x5b\x4c\xed\x77\xe9\xa9\x89\x7d\x1a\xad\xcb\xfc\x86\x56\x4b\xd6\x4c\x9d\x64\xe2\xbe\x76\xb9\x4e\x74\x78\xd7\x41\x5b\xd9\x83\x38\x58\x23\x30\x9b\xf3\xb1\x3e\x0f\x26\x7d\xeb\xbb\xe3\x14\x90\xcb\x34\xde\xd4\x8e\x21\xa7\xa7\x86\x13\x2f\x89\x67\x9b\xff\xea\x79\x5f\xe8\x23\x44\x58\x10\x07\xeb\xe0\xac\xe2\x4c\xfa\xed\xb6\x8a\x19\xce\x04\x9d\xba\x0f\x6e\x0d\xc9\xce\x48\x51\xd0\x5f\x49\x17\xa4\x6f\x51\x51\x1e\xb5\xf0\x3c\xb6\x40\x74\x70\x10\x87\xe8\xe0\xe7\xab\xf9\x00\xf5\x19\x64\xb5\x04\x24\x1f\xa1\x71\x97\x71\x5f\x0a\xd9\xe3\x6f\x4b\xad\x35\x26\x53\x2a\x72\x08\xf3\x17\x93\x7c\xce\xdf\x35\x6e\x1b\x7e\x9f\x13\xfa\x44\x05\x71\xb0\x56\x95\xa7\xba\x7e\xfc\x89\x3b\x52\x26\xbb\xc3\x93\x8a\xfb\x65\x35\x8f\x7d\x94\xc5\xa7\x5c\xe3\x3a\xce\xc4\x9c\x23\x79\xc6\xab\x2e\xd0\x27\x2a\x88\x83\x1f\xc7\xfd\x58\xe4\xe2\x23\x6e\xe2\x89\x37\x5b\x8e\x4a\x65\x9f\x1b\x59\x31\xd8\x3e\x44\xcc\x11\xbf\xaa\x99\x65\x31\x47\xb9\x7d\xf8\x1a\x3a\xd1\x12\xc4\xc1\xd4\x6a\x5d\x8c\x41\x61\x16\x13\x51\xbe\xf7\xda\x1f\x1d\xf3\xcd\x23\x07\xbd\x01\x19\xfe\xb5\xfc\xed\x98\xb2\x8e\x93\x8c\x86\x2f\x52\x11\x88\xb0\x20\x0e\x5e\x8f\x5b\xef\x3e\xa3\x56\x4b\x7a\xda\x7c\xe0\x48\x51\xfd\x59\xb4\x76\x7a\x8e\xcb\x0c\xe7\xf9\x25\x14\x62\xa6\xb9\x40\xae\x1f\x9e\xd0\xac\x02\x88\x83\xa9\xe5\x61\x69\xec\x47\xaf\xf7\x6c\xda\xd8\xf4\x65\x6b\x63\xfc\x56\xa8\x49\x22\x66\x84\xca\xa5\x9e\x9f\x9a\x62\x65\xca\xd3\x5f\xc4\xdf\x21\xd4\x02\x71\x08\xb5\xce\x57\xf3\x01\x7a\x36\x22\xab\xe5\x5d\x31\x42\x69\xfc\x4b\xff\x8b\xda\x4c\xd8\x6f\x63\xbd\xbb\x45\x8e\xbf\x46\x84\x67\x72\xe3\x3d\x54\x75\x6d\xab\xff\x04\x55\xa9\x20\x6e\x1f\xc4\xc1\x5a\xf5\xfd\x10\xd1\x06\x73\xaf\x69\x16\x7f\x8c\xdb\x72\xa1\x4f\x91\x1c\xd7\x5b\x09\x4f\x5d\xad\xa6\xc6\xd0\x39\x05\x5e\x55\xcb\x53\x68\x68\x0a\xe2\xe0\xc3\x92\x8f\x79\x1c\xa4\x8c\x15\x22\xe6\x82\xb9\x83\x87\x5b\xcf\x71\x04\x43\x9b\x5f\xd3\x2b\xdb\x3a\x8a\x69\x3d\x0a\x4e\x23\x58\x86\x2a\x54\x40\x1c\x4c\x2d\xde\xc5\xdc\x32\x96\xca\x94\x3a\x9e\xe8\x0f\x15\x4f\x42\x07\x14\xcd\x83\xb0\x6b\xbb\x97\x5a\xdc\xa9\xdf\x05\x62\x64\x18\x5f\x87\x46\xbc\x20\x0e\xd6\x08\x1a\xb8\x3f\xea\xc6\x38\x5f\x09\xba\x60\x11\xc4\x3c\x88\xc8\xe3\x23\x77\x39\x55\x9c\x64\x79\x8a\xe1\x7b\x61\x32\x24\xd0\x19\x15\xfa\x46\x03\x71\x30\xb5\x6e\x0f\xa4\x1b\xc9\x76\xc7\xd0\xb3\x86\xec\xfa\xd7\xfa\xbe\xbb\x8d\xfa\x49\x2f\xee\xa5\xe9\xcc\x99\x0b\xff\x3d\xd7\x8c\xa1\x43\x49\x84\x5a\x20\x0e\xa1\xd6\xf9\x6a\x3e\x40\x59\x7e\x64\xb5\xe2\xe2\xce\xf6\x1f\x4c\x79\xc9\xfa\xec\xae\xa0\x92\x75\x0d\x7f\xfa\xce\x39\xa7\xb5\x61\xfc\x8e\xe9\xfd\x07\xd1\xe8\xc0\x1a\x67\x68\xf3\x54\x10\x07\x6b\xd5\x8c\xfc\x53\x15\x1a\x15\x42\x74\x8a\xf9\xa5\x6d\xbb\xd6\x76\xd1\x17\x51\xa4\x9a\x17\xdc\x97\xf0\x58\x54\x58\x27\x65\xcb\x6f\x41\x07\x5d\x81\x38\x98\x5a\x2c\xda\x68\x17\x4d\xcf\xcc\x04\xf7\x7c\xe3\x5c\x1f\x16\xce\x33\xcc\x62\xc6\x6c\x48\x5d\xf3\x88\xce\x76\xd7\xbe\x8e\x85\x8f\x07\x1d\x98\x0b\xe2\xe0\x9b\x26\x26\xdd\xab\x61\x1f\xf4\x9c\xbe\x7b\x77\xf6\x18\x25\xad\x95\xce\x81\x21\x96\x89\x8e\x2e\x36\x76\x6c\xec\xd2\x8e\x5c\x22\x33\xb4\x18\x18\xc4\xc1\x1a\x01\x0d\x25\x6b\xd9\xe0\x46\xae\x43\xa6\x4e\x88\x49\xe8\x72\x39\xa7\xd5\x02\x91\xbc\x47\x11\xdf\x14\xc3\xa0\xb2\x2d\x77\x12\xb3\x3e\x54\xf3\x21\x5c\x79\xa3\x98\xe9\x83\xe5\x67\xb2\x88\x78\x96\x05\xe2\x23\x47\x4f\xae\x1f\x14\x65\x57\x6d\x0d\x0f\xae\x50\xcc\x1d\x36\xd6\xab\xfe\xbb\xe6\x43\x4c\x96\x68\x38\x90\xa4\x58\x2b\x64\x85\xe9\x0b\x46\x98\x43\xee\x29\x1b\x41\xa4\xec\x4b\xbb\x3e\xe9\x99\x89\xf7\xe6\xd6\x7d\x3a\xff\x7e\x6a\xba\x37\x99\x55\x60\x7c\x48\xeb\x32\xc5\x4e\x2b\xff\x98\x10\xb8\xfb\xeb\x23\xb5\x94\x97\xe2\xcf\xc4\xb2\xc9\x83\xfc\x81\x03\x5e\x29\x29\x32\xb2\x7f\xd5\x7c\x80\x22\xfb\xa3\xe2\xc2\x6a\x3e\x96\x3f\x6e\x14\x3f\x18\x23\x15\xe5\x4f\xa0\xe2\x2f\x67\x43\x2b\x8d\xbb\x1d\x95\xe9\x6d\xf0\xe0\xb3\x45\x94\x85\x13\xc9\xf5\x08\xb7\x7f\xa1\x7a\x87\x31\x77\xcb\xe4\x57\x7e\x84\x95\xe1\x44\x18\x85\x8c\x69\x07\xce\xa8\x4c\x47\x0e\xef\x2a\xd5\x32\xbc\xa0\x2d\x5b\x9b\x2c\x87\x6a\x3e\x40\x31\xff\xa9\xf9\x40\x51\x84\x8d\x38\x6b\x13\x72\xd6\x83\x09\x1e\x95\x07\x37\x77\xa1\x72\xec\x7d\x33\x66\xda\xa0\xa1\x7d\x27\xfd\x6b\x5d\xbf\xb2\x9b\xa8\xde\x36\xe2\xe2\x5f\x0f\x72\x51\xf8\xe1\x83\xdc\xc5\x47\x04\xdc\x5f\xf8\xe6\xa7\xdd\x35\xac\xb5\xa7\x27\x17\xea\xe3\x7a\x2c\x7f\xc6\xfe\xaa\x8a\x16\xb4\x98\x15\xe6\x1c\xa4\x1f\xfa\xfb\x4b\x6a\xc0\x2f\xf9\x30\xbf\xfd\x55\x41\xf1\x2b\x0c\x07\x8b\xdf\x28\x6c\x0b\xe3\x54\xd6\xea\xeb\x36\x87\x14\xb4\xc3\x37\x5f\x66\xa9\x10\xe3\xea\xdc\xfe\xfb\x4b\x1a\x21\x55\xb6\xbc\xf4\x33\xa5\xf1\x33\x6f\xb6\x67\x55\x35\xcf\x29\x32\xf7\xb4\x97\x5b\xea\x58\xbd\x3c\xe8\xf3\xae\x6e\xaf\x76\xc3\xf2\xc1\xdf\x57\x8c\xa3\xb8\xc3\x2f\x39\x9b\x9c\x23\xd3\xc8\xf6\x46\x37\x4a\x56\x31\xd1\xe8\xe5\xeb\x94\x5e\xe1\x71\x43\xe6\x5c\x3f\x8f\x33\x1d\xcc\xcc\xde\xe5\xdb\xf7\xfe\xfe\x92\x71\xf0\x4b\x4e\xdf\xf8\x35\x3c\xd7\xed\x4d\x3b\xf5\x3d\xf4\x54\xa9\x2b\x87\xff\xcf\x16\x09\x6b\xd8\xc0\xad\x65\x35\x87\x26\x2a\x86\xc7\x2e\x2c\x7f\x7f\xc9\x22\xa4\x6f\x24\x4a\xe6\xef\xa9\xfd\x8b\x28\x79\xa5\xda\xb1\x67\x22\x3e\xe3\x84\xf5\x72\x3e\xcb\x4f\x9e\x05\x84\xbb\x88\xb6\x3e\x33\xe6\xfa\xfb\xfa\x1d\x94\x5a\xf8\x25\xf7\x33\x47\x13\xf0\xcf\x72\xb6\xe5\xdb\x24\xad\x6e\xfd\x76\xba\x1f\xf5\x43\x21\x74\xdd\x6c\xde\xec\x88\xb6\x50\xb3\x13\xcd\x78\xf8\xbf\xf9\x2c\x03\x75\x45\xe4\xb7\xd0\x5c\x0e\xdf\xb3\xe6\x82\x08\x85\x77\xe9\x64\x0a\xde\x3a\x26\x24\x81\x6f\xb6\x33\x8f\x98\x8b\x6f\x6f\x94\x54\x35\xdf\x9f\x8b\x7c\x8b\x78\x00\x83\x38\xd8\x03\x98\x6c\x33\x5e\xa2\x02\x37\xa4\xea\x3b\xfd\x66\x26\x7a\xc4\x40\x42\x92\xff\xd5\x1a\x09\x5b\x29\xb3\x03\x3c\x02\xbb\x80\x09\x46\x79\x44\x58\x10\x07\x7b\x0b\x4d\x99\x78\x70\xb6\x05\x88\xb8\x54\x7c\x2d\xd9\xd4\xdf\x58\x9e\x4a\x74\x7e\x69\x51\xbc\xe3\x6c\x11\xbc\xcb\xa5\x77\xeb\x91\x17\xb4\x85\x37\x88\x83\x35\xc2\x6b\x35\x52\xbe\x99\xfd\xe0\x50\x09\x17\xc9\x88\xa5\x25\xfd\xf7\x81\x81\x6a\x17\x49\xb4\x16\xa6\x43\xcf\x2e\xef\x75\xfc\x26\x6f\x42\x84\x05\x71\xfe\xd2\xa8\xff\x0e\xdb\xbc\x4a\x14\x23\xd8\x5a\xa9\x8b\x9a\xae\x93\x5a\xf0\x6a\x7d\x64\x39\xea\x8c\x64\x48\x68\x48\xf0\x69\x80\xc2\x12\xf9\x77\x51\xe8\x9c\x00\x10\xe7\x2f\x8d\xf6\xef\xb0\xe6\xf6\x49\xe1\xcf\x3c\x82\x3b\x5f\x14\xbb\x0c\x88\x38\x2d\xf1\x5e\x5f\x9c\x7e\x20\xdb\x74\x74\x73\xd9\x3b\xe3\xd9\xc9\xeb\x5a\x29\x44\xcd\x07\x88\xfb\x67\x9f\x8f\xff\xf7\x79\x0e\x1e\xdf\x80\x9e\xb8\xff\x63\x53\xe8\xe8\x0a\xa9\xab\xa6\x23\x78\xca\x0f\xe7\x8b\xde\x91\xca\x32\xe8\xde\x50\xd9\x2a\xa2\xcb\xaf\xce\x43\x99\x38\x11\x94\x53\xd6\x47\xdc\x3d\x88\x83\x99\x45\x3d\x7e\x26\xce\xdb\x2d\x73\xba\x35\xbc\x64\xca\x4d\x15\xf0\x50\xc7\x3d\xec\x93\xce\x1c\xce\xf2\xed\xbc\x2a\xbf\x60\x9b\x43\xe8\x83\x1f\xc4\xc1\xcc\x3a\xad\x0e\xe4\x7c\xa6\x6a\x3d\x3a\x1c\x8e\x51\xf0\x74\x7e\x6d\x60\x53\x88\x56\x34\xf3\x0f\x13\xde\xc2\xe9\x1a\xb7\xf1\x5d\x7a\xa8\x12\x1f\xc4\xc1\x1a\x21\x02\x7b\x20\xfe\x82\x8d\x9b\x2c\x01\x07\xcf\xb4\xa4\xa4\x9a\xc5\xfd\xab\x5e\xc6\x46\xd9\xe2\x93\xd9\x1c\x9c\x5f\x9a\xaf\xb0\xa3\x23\xc2\x82\x38\x98\x59\x93\x53\x5f\x63\x69\xbb\x3c\x0e\xca\xe7\x70\xd4\x69\x99\xb1\xd0\x07\xaa\x6b\x0c\x99\xb8\x56\x16\xa6\x7b\x70\x02\xc6\x6f\x85\x4d\x43\x7b\xa8\x00\x38\x98\x59\x36\x12\x77\x49\x05\x47\x79\x37\xc2\xc7\x7a\xec\xd5\xcb\x8b\xfe\xb0\x8f\xb2\x84\x98\x44\x19\x93\x54\x61\x87\xbc\xc4\x11\x5e\x90\x40\x0c\x9d\x41\x1c\xe2\x58\x44\xfe\x73\x0d\x9d\x41\x6f\x56\x64\xb5\x3a\x9b\xff\x24\x34\x73\xbe\xa1\x17\x63\xb2\xcc\x0c\x4b\x1d\x17\xc6\xb8\xdf\x3a\xec\x66\xd6\xcd\x9e\xf0\xab\x70\xbc\x6e\xa1\x6d\x19\x71\xfb\x20\x0e\xa6\x96\x97\xf4\x4f\xaf\xab\x6b\xa1\xb1\x97\xd1\x2f\x4f\xf5\xde\x5c\x5f\x16\xc7\xa9\xe5\x89\xb9\x48\x8d\xd1\xbd\x1a\x91\x7e\xa2\xfa\xca\x19\x11\x16\xc4\xc1\xd4\x12\x1e\x69\xd1\xd3\xf1\xd7\x41\x4f\xdf\x33\x1d\x50\x5b\xf7\x9c\x34\xca\xfd\x78\x98\x41\x4c\xe0\x4d\xb8\x2f\xa9\xdf\xb0\xd2\x8d\x8a\x08\x0b\xe2\x60\x8d\xa0\xe8\x63\x7f\xf3\x02\xa9\xe7\xed\xf7\xca\x8a\xf6\xbe\x41\x56\x93\x8d\x5e\x36\xcd\x5e\x9c\x6d\x2b\x8b\xa8\xdb\xfc\xcb\x84\x02\xd0\xb3\x10\xc4\xc1\xd4\x62\x43\xeb\x1c\x39\x19\x1b\x16\x89\xfc\x4d\xac\x41\x88\xf5\xf3\x88\x73\x34\x55\xb0\x70\x8b\x5e\xc5\xf9\x1e\x56\x35\x4a\x72\xf1\x13\x44\x58\x10\x07\x53\xeb\xfb\x0f\xf4\xb1\xc4\x33\x7d\x9c\xfe\x7b\x67\x6f\x9b\x35\x8e\xdb\x85\x95\xd0\x1b\x22\x3f\xa0\x97\x17\x0a\x0c\xb0\x62\x5b\xb3\x9a\x21\xd4\x02\x71\x08\xb5\x34\xce\x77\xc6\x3c\x60\x04\x85\xac\xd6\xe7\xea\x0a\x41\xc1\x0f\xc5\x15\x64\x11\xbb\xdf\xc7\x6a\x89\x3f\x8a\x32\x2b\x88\xf2\x5b\x8a\xa6\xec\x57\xf6\x2f\x75\xbc\xeb\x90\x46\xdc\x3e\x88\x83\xa9\xd5\xe8\x43\x2b\xa8\xf7\x91\x79\x0e\x93\x63\xc3\x35\x24\xb4\xa2\xa8\x17\x4d\x7f\xd6\xf2\x91\xe5\x98\xf5\xab\x9f\x3f\xae\xe9\x3e\x8b\x43\x84\x05\x71\x30\xb5\x32\x51\x02\x70\x2b\x55\x87\x0b\xe9\xcb\x32\xf0\x71\x2f\xce\xee\xaa\x1b\x08\xc7\xf2\xd4\x2d\x6b\xe1\xdd\xb8\x96\x2c\x54\x26\x40\x05\xad\xef\x07\x70\xb0\x46\xf0\x29\x3d\x79\x4c\xab\x17\x7c\x4d\xab\x4d\x80\xc9\xa0\xf4\x90\x24\x3d\x32\x45\x6c\xf5\xad\xaa\x96\xe6\x6d\x6a\x76\x57\x0d\xd6\x11\x44\x58\x10\x07\x53\xab\x68\x3e\x51\xe0\xed\xae\x79\x24\xf7\x9b\x5d\xc6\xc9\x1c\x94\x10\xb1\x99\x06\x26\x91\xb7\x01\x4b\xdb\x94\xcc\x97\x24\xb4\x1f\x40\xb3\x1e\x20\x0e\xa6\x56\xbf\xb4\x8f\x17\x1a\xc1\xa3\x64\xca\x99\xfb\x1a\x4a\x02\x29\xf1\x78\x3d\x4a\x8e\xea\x45\x0f\xcb\x1b\xef\x11\x55\x36\x0b\x70\xa6\x21\xd4\x02\x71\x08\xb5\x8c\xce\xa5\x16\x68\xa4\x8c\xac\x56\xd3\x06\x59\x75\x44\xd3\xfc\x53\x9a\x1e\xf1\x87\x35\x75\x26\xb4\x59\x53\x31\xa5\xc1\x1b\xac\x0c\x33\x6b\x2c\xa4\xd6\xaf\x69\xbe\x22\x6e\x1f\xc4\xc1\xd4\x7a\xd3\x93\xe7\x98\xe2\xd2\x3d\x7d\x59\x2a\xcb\xfa\x8e\x5a\x5b\xae\xed\x3d\xe9\x57\x77\x44\xc8\x4a\x84\xf4\xbf\xb0\x4e\xd3\x0c\xd7\x23\xc2\x82\x38\x98\x5a\xc6\xbd\xb7\x75\x83\x5a\xe5\xe5\x88\x3d\xd4\x3d\xd7\x3b\xce\x52\xf3\x57\xf1\x71\x50\xc7\x54\x0d\x4d\x9d\x0b\xaf\x95\xac\x66\x43\x05\x70\x20\x0e\xd6\x08\xc1\x6a\x95\x82\x18\x95\x2f\xd8\x63\x30\xb8\x73\x2b\x0e\xcd\xf2\xd2\x67\xc3\x53\x6b\xaa\x0d\x55\x62\xdf\x04\x14\x2d\xf3\x7d\x2e\x40\x84\x05\x71\x30\xb5\x9c\x08\xaf\x7d\x8b\xa9\xfc\x80\x4e\x93\xfc\x24\xa0\x46\x82\x27\x73\x9c\xd7\x32\x6c\xf2\x57\xa0\x79\xb3\xf8\x3c\x85\xb6\x1a\xb7\x2d\x22\x2c\x88\x83\xa9\xf5\x63\xbc\x76\x48\x19\x7b\xa8\xe3\x01\x6f\xf7\x1f\xe6\x8b\x04\xcd\xe1\x07\x32\x4a\x92\x89\xf8\x86\x28\xb9\x37\x6e\xaa\x86\x8e\xc7\x22\xd4\x02\x71\x08\xb5\xdc\xcf\xa5\x16\xe8\x8b\x08\x59\xad\x33\x1d\x2e\x12\xaf\x89\x5f\xbe\xbb\xca\x53\x19\x93\x21\x4d\x9c\x46\xaf\x97\x2d\x9d\x5d\x6e\x66\x9f\x26\xa9\x08\xa6\x08\x86\x42\xcb\xa7\x40\x1c\x4c\xad\x45\x1c\x85\x81\x3c\xe2\x0e\x0f\x1e\x4c\x7e\x03\x2d\xc3\xe3\xda\xc3\xc5\x6f\xa7\xb7\x28\x94\x8c\xcb\x67\x23\x84\xae\x59\x1c\x6c\x23\xc2\x82\x38\x98\x5a\x41\xfc\x1b\xb3\x26\xc5\xc4\x26\x63\xa4\x8d\x6a\xdd\xbd\x3c\xb2\x12\xa7\xd3\x21\x6d\x32\x67\x29\x17\x8e\x19\x15\xc5\xea\x6b\xa1\xbd\xa3\x41\x1c\xac\x11\xdc\xdf\x9c\x8a\xe9\x53\xcb\x6f\x6f\xe4\x19\x6a\x8c\x99\xee\xa7\x6b\x35\xb3\xc9\xc7\x54\xee\xeb\xe2\x10\xa5\xb6\x67\xc6\xa2\x40\x9b\x27\x83\x38\x98\x5a\x05\x97\x9c\x2e\x57\x07\xa6\x7e\x7c\xd9\x50\x61\x7e\x31\xd5\xb9\x5a\x43\x26\x27\x28\x39\xdb\x5b\x98\x70\xeb\x5b\xd6\x8f\xe8\x69\x68\x63\x39\x10\x07\x53\x4b\xe1\xa5\x30\xcb\xb3\x41\x23\xa9\xdd\x76\xad\x9f\xf2\xbb\xa4\x8d\xfb\x2f\x5e\xd2\xb7\x1b\x46\xbc\x37\xce\xb1\x1e\xf1\x39\xcb\x8b\x42\xa8\x05\xe2\x10\x6a\xc5\x9d\x6f\x06\x1c\xf0\xe5\x8b\xac\x56\xc4\xf7\x65\xcb\x56\xca\xbb\xfe\xf7\xd6\x1e\x39\xa1\x29\xed\x25\xe0\xb2\x96\x4d\xf9\x0d\x5e\x55\x59\x57\xb7\x27\xdd\xb3\x52\x86\xf6\xf9\x00\x71\x30\xb5\xea\x84\x58\xec\xad\x98\x93\x7e\xa4\x99\xb9\x59\xe6\x75\x10\x1f\xe3\xf8\x51\x5d\x6b\x7a\xa7\x36\xff\xa5\xea\x7a\x06\x5a\xbd\x57\x26\x22\x2c\x88\x83\xa9\xf5\xc8\xa3\x3f\xe8\xa5\xdb\x80\x94\xa8\x0d\x6e\x41\xb5\x82\x9d\x63\x91\xe9\x88\x21\x33\x56\x27\xae\x1b\x76\xc7\x37\x5d\x03\x2d\x2b\x44\x58\x10\x07\x6b\x84\xc0\x9b\xdd\xd9\x53\xfb\xd3\x42\x09\xf8\x9f\xd0\xd4\xe8\x2a\x94\x96\x09\x96\xd8\xcb\x6b\xbf\x68\xb3\x45\x9e\x5e\xac\xca\xbb\xe0\x01\xd5\xfd\x00\x38\x98\x5a\xa9\xe1\x52\x19\xf8\x55\xf6\xcb\x3f\x2f\x1b\x6f\x57\x8b\x3d\xe9\xa7\x11\x69\xa1\xa4\xa2\x73\x5d\x0d\x26\x21\x36\xd1\xe4\x56\x82\x0e\xb8\x01\x71\x30\xb5\x4c\x46\xcd\x44\x1e\xe8\xc4\xdd\xfe\x4a\xa6\x7a\xdf\x26\x28\xf0\xde\xbe\xe2\xcc\x53\xcb\xd9\xf5\x99\xc0\xd2\x88\x45\x2f\xfb\xf2\x46\x84\x5a\x20\x0e\xa1\x56\xd1\xb9\xd4\x02\xcd\x70\x20\xab\x55\x4c\x64\xc5\x7d\x58\x7f\x21\xe6\xda\x62\xd9\x57\xbe\x16\x8e\xa7\xbf\x35\x9f\x1d\xd3\x95\xbd\xa1\x65\xa9\xf9\x56\x4a\xa8\xa9\x08\x9d\x4c\x07\xe2\x60\x6a\x3d\xbd\x7b\xa8\xae\xaf\xac\xb9\xdb\x70\x4c\x63\x95\xea\xfe\xc4\x71\xb7\x58\x8f\xba\x49\xf5\x5a\x43\x1d\xfb\x03\xa5\xcc\xf4\x6d\x22\x44\x58\x10\x07\x53\x4b\x6a\x67\xdc\xf7\x96\x3f\xa6\x6d\x1e\x6f\xdf\x2f\x6e\xba\xbe\x77\x2a\x82\xbe\xb6\x84\x67\xaa\x37\xf0\x9e\x8c\xe4\xe9\x63\x2f\x43\x83\x22\x10\x07\x6b\x84\x27\xee\xca\x78\xe9\x6a\xaf\x3f\xb9\x5a\xec\x1f\x3a\x07\xa6\xc4\x59\xa5\xd1\x97\x7e\xa1\xdd\x73\x6c\x97\x90\x7c\x90\xfc\x54\x86\x0d\x11\x16\xc4\xc1\xd4\xfa\xe4\x78\x7c\x3a\x94\x17\x68\xc4\x68\xf4\x61\xf4\x95\xb4\x27\x95\x96\x14\x75\xee\x47\x89\x25\xf2\x46\xa7\x37\x4f\x9d\xf8\x2b\xb9\xa0\x4c\x33\x80\x83\xa9\x75\xf1\xc7\x25\xe1\xcd\xb6\xd8\x9b\xd1\xf1\x83\xd9\x6d\x2b\x2d\xc3\x9f\x34\x9e\xd2\x87\xe2\xb9\x3b\x69\x28\x87\x5a\xf7\x3d\x48\x87\x36\x51\x07\x71\x08\xb5\x6a\xff\xff\xd5\x8a\x41\x3b\xdf\x1c\xb6\xbf\x34\xba\x8f\x5f\xe8\x2d\x94\x11\xf8\xb4\xdb\xfb\x23\x01\xe3\x1b\x18\x74\xdf\x51\x63\x97\x48\x64\xe9\x23\xe5\xc3\xea\xd3\xa2\x1f\xcf\xaf\x15\x74\x94\x98\x1d\x4a\x0f\x84\xef\xfe\xfd\x4c\xdf\x1e\xfc\x92\xd5\x7d\x8e\xa2\x1c\xdd\x0c\xc2\x9c\x4b\x4f\x7d\xad\x4e\x22\x27\x62\xe2\x87\xf6\xdf\x7e\x2a\x54\x78\x73\xc4\x50\x2e\x32\xc0\xbc\xf5\xdf\xcc\xf4\x81\x6e\x0c\xb9\xb7\xa1\x24\x5e\x15\x5c\x59\x5a\xb6\x4e\xf2\xb7\xbf\x3f\x9d\x23\xa8\xdc\xd5\x6f\xeb\x97\x61\x21\xba\x6b\xbf\x9d\x5b\x7b\x97\x29\x46\x07\xaa\xb8\x06\x70\xb0\xde\x76\x46\x9e\xab\x13\x84\x87\xfe\x58\x35\xfa\x7b\xce\x3b\x8a\x90\xdf\x6f\xdf\xc8\x89\xb7\xdb\x54\x67\xfc\x2a\x13\xff\x1d\x72\x85\x85\x09\x1a\x7a\x00\x38\x58\x6f\x2b\x3e\x43\xff\x12\x24\xf0\x5d\x7f\xb1\x75\x94\xba\xfb\xd9\xed\x0f\x66\x5f\x0f\xf2\xac\xd4\x8d\x7b\x16\x36\xa3\x5c\xd6\x26\xd9\xd4\xa0\x67\x03\x80\x83\x35\xc2\x85\x19\xfe\xac\xc6\x38\xc7\x3a\xcd\x56\xac\x71\x7f\xef\x2b\x1b\x4f\x73\x4c\xba\x06\x46\xa5\x56\x29\x77\x9a\x93\x74\x97\xeb\xa0\xcd\xf5\x41\x1c\xac\xb7\xdd\x0a\xf2\x2b\x45\x5b\x3c\x98\xec\xc8\x9d\x38\xd5\x0c\x3b\x14\x20\xd9\xd7\xa8\x08\xa8\x13\x11\xb9\x1d\x30\x61\x9a\xe0\x9f\x37\x88\x08\x0b\xe2\x60\xbd\x4d\xe6\x55\xe3\x3c\x7b\x60\x89\xe1\x2f\x59\x56\xbf\x36\xa7\x82\x00\x7f\xdf\x01\x37\xab\xd5\x83\x5a\xc2\xbd\x1d\xab\x0d\x49\xbb\x19\x44\x6f\x03\x71\x88\xde\x36\x72\xae\x07\x39\x48\x60\x64\xb5\x3a\x9c\x2d\x3d\x5b\x43\x79\x5b\x1d\x7c\x28\x33\x87\x26\xea\xdf\xff\x30\x7b\x5d\xc3\xde\xe8\x71\x1a\x6b\xe9\x1f\x6c\x4d\x87\x0b\x1d\x33\x0b\xe2\x60\x6a\x79\x4f\x85\x16\x3a\xbc\x54\xe6\x4e\xb8\x41\xb3\x77\x12\xaa\x3a\x51\xd2\x99\x93\xcb\xba\xbd\x5c\x46\x15\xd3\xce\x9c\x38\x87\x0b\xed\x93\x0c\xe2\x60\x6a\xc5\x71\xda\xcf\xe1\xd9\x16\xb8\xe3\x2f\xb4\x62\x44\x39\x32\x5e\xdf\xd6\x70\xd0\x2b\xc0\x33\xf2\x1c\x59\xbe\x2f\xc7\xc0\x7f\x03\xda\x6a\x10\xc4\xc1\x4f\x2e\xfd\xd4\x15\x3e\xa8\x5d\xcd\x69\x90\x1f\x66\x2f\x58\x98\x40\x4e\xed\x3d\xcc\x75\xd0\x24\xcd\x5f\x9f\xdd\x99\x61\x74\x85\x20\x0f\x11\x16\xc4\xc1\xd4\xc2\xeb\xa6\xbf\xf8\xdd\x46\x9c\xd4\xd4\x73\xfb\xc2\x13\x9c\x3c\x43\xa7\x4e\xea\xd1\x63\x06\x59\xfa\x8f\x86\xf3\x2d\x09\x0a\x7a\xc5\xd0\xd2\x39\x00\x07\x53\x4b\x44\xea\x7e\x68\x01\xe6\xa9\xad\x5d\xed\xc4\x50\x0c\xdd\x83\x80\xc7\x19\xbb\xfe\xc2\x2c\xb6\x31\x7d\xb5\x89\x65\x02\x98\x17\xa1\xbd\xc0\x40\x1c\x42\xad\xbd\x73\xa9\x05\xca\x8b\x22\xab\xd5\x70\x40\x4e\xee\xc9\x83\x62\x6f\x1f\x2d\x4a\x65\x24\x2a\xf8\xeb\xb4\xed\xf8\x67\xca\xef\x1e\x8e\xf1\xa4\x05\xa9\xc7\x52\xf3\xd0\x59\xa0\x20\x0e\xa6\x16\x63\x91\xa3\x35\xbf\x85\xf3\x6f\xb9\x3b\xa4\x5b\xdc\x98\xb9\x94\x65\x1f\x55\xdf\x46\x94\x96\x8e\x7f\x8c\x96\xba\x90\x2b\x23\xfd\x0c\x11\x16\xc4\xc1\xd4\x52\x2e\x89\xe6\x74\xbb\x89\x9f\x23\xcf\x72\xf4\xc3\xbb\x94\xab\xf4\x6b\x33\x75\x0a\x7d\x7b\xcb\x23\xa6\x2f\x19\xf6\xd2\x1f\x23\xa1\xc5\x68\x20\x0e\xd6\x08\x0c\xd9\xf5\xa5\xe4\xe6\x82\xe4\xfb\x92\x0c\xbc\xb8\x3c\x9d\x24\xeb\x69\x2c\xae\x3c\x2d\x15\xf7\x16\xda\xd9\xbc\x85\xaf\xc7\x43\x67\x59\x83\x38\x98\x5a\x41\xd4\x03\xce\x1c\xc2\xde\xc4\x76\x55\xdc\x68\x5a\x8b\x78\x73\x4e\xbf\xb8\x8a\x9a\x43\x6a\xc6\x84\x4a\x1b\x52\x66\x6e\xb0\x78\x42\xdf\x61\x00\x0e\xa6\x16\xe7\x67\x7e\x4e\x3c\x1c\x55\x4c\xd4\xee\xd9\x55\x9f\x92\x1d\xb4\x6c\x99\xa4\x60\xde\x41\x83\xed\xb0\xc1\x09\x7c\x9a\x5a\x89\x56\x1f\xae\xf3\x71\xff\xa7\x96\x8c\x36\x2a\x22\x4b\x9e\xbc\xf9\x23\xb7\x3d\x4a\xb1\x25\xdd\xf8\x8d\x73\xe7\x81\x51\xec\x38\xf6\xe7\x6f\x51\x19\x92\x9c\x0f\xb3\x31\xf3\x88\x77\xe2\x45\xff\x9d\xab\x97\x0d\xbd\xda\x2e\xfb\x38\x80\xb3\xe3\xf4\xc1\xfe\x4a\x04\xcf\xa4\x3c\xcf\x46\xc7\x70\x0e\xdf\x4c\x73\xb1\xd0\x93\xd0\xcf\x1e\x1c\xff\x42\x5b\x4e\x1d\x34\xe5\xd5\x48\xa6\x1d\x1d\x58\x2a\x6a\xcf\x04\x3e\xe9\xa7\x9b\xd4\xca\x04\xc7\x7d\xaf\xa8\xfe\x36\xe0\x12\xba\x88\x06\xcb\xd5\x83\x22\x23\xe7\xea\x69\xf4\x73\x56\x47\xb2\xc6\x68\x72\x30\x39\x1a\x6e\x9e\xcc\x69\x1b\x74\xde\xa6\xdf\x48\x66\x7b\xaa\x73\x53\x1d\x0b\x87\xf0\xa3\xf5\xbf\x50\x17\xc5\x45\xe3\xc2\x62\xa1\x35\x09\x27\x0f\x31\x2f\x95\x71\xbd\x4f\x5f\x30\xbb\xd4\xff\x90\x6d\x94\x59\x0e\xc5\x34\xdc\x36\xd7\x85\x72\xf5\xa0\x98\xff\xe4\xea\xa5\xe0\xb9\xfa\x46\x7f\xea\x3e\x25\x74\xcb\xcd\x0c\xb3\x97\x24\xbc\xca\x0e\x9f\xfb\x0d\xc2\x1f\xc4\xd4\xbe\xd5\x66\x58\x9e\x48\xee\xde\xc2\x7c\xfe\xd7\xe3\x21\x29\xa4\x5c\xfd\x87\x17\x6e\x72\x47\xc1\x23\xb6\xd7\xf8\x23\xa2\x12\x99\x13\x7a\xc9\x1e\xcd\x61\xd6\x48\xed\xcc\x7d\x55\x7d\xee\x4c\xf6\x1d\xeb\xef\xcb\x6e\xa5\x90\x72\xf5\xc9\xbf\x66\x7a\xd0\x39\x26\x62\x17\x85\x5f\xdd\x65\x14\x66\x0c\x79\xd3\x7b\xaf\x74\xd6\xbf\x46\x55\x28\x39\x3b\x66\xea\x87\x98\xea\xdf\x5f\x12\x29\x57\xdf\xa8\x81\xfd\xe9\x5a\xae\x2e\x8e\x19\xdf\x60\x50\xd0\x66\x73\x37\x7e\x2f\xb7\xff\x63\xc3\x5b\x68\x1a\xe8\xbf\xf7\x1d\x7a\x7e\xf8\xfd\xfd\x25\x91\x72\xf5\x01\xc3\x96\x2a\xeb\xa9\x05\x5d\xab\x8f\xd3\x98\x27\xf9\xcc\x53\x5a\xc7\xca\x6b\xc9\x51\x26\x5a\xc2\xa6\x7d\x70\xde\x19\x87\xd6\xfd\xfd\x25\x91\x72\xf5\xea\xd3\xed\xa7\x74\xee\x27\x71\x36\x7c\xb8\xb4\x3e\x61\xeb\xe3\x79\x6d\x13\x6d\x3a\x2a\xae\x77\x51\x59\x4a\x0c\x03\x7f\xdd\x36\xfb\xfb\x4b\x22\xe5\xea\x13\x3e\x93\xea\x58\xde\xc2\x90\xa6\xf6\x1b\x16\x14\xd8\xf7\x9e\x34\xbf\x14\x52\x76\x19\x3b\xff\xc8\xdd\x98\x99\xe1\xf7\x55\x95\x07\x7f\x7f\x49\xa4\x5c\xbd\x24\xfa\xcd\xdf\x29\x73\x9b\x54\x1f\x76\x23\x5d\x86\x2b\xfe\xbc\xbb\x27\xf6\x3c\xb0\x41\x31\x54\x9c\xe9\x83\xda\x74\x72\xcc\x2f\xf6\xff\x66\x04\x0f\xea\x8a\xc8\xef\xc2\x4b\x85\x97\xf8\x5e\x90\x18\xed\x44\x15\x30\x84\x5c\xe1\xb7\x65\x2b\x7f\x27\x1a\xc8\xce\xd5\xf7\x59\x9c\x66\x21\x47\xe5\xb0\x55\x18\x5a\xd0\x02\xe0\x60\xef\x42\x1b\x16\x92\xc3\xfb\xcd\x3b\x69\x7c\x63\xd7\x7d\xc3\xd7\xde\x7d\xee\xba\x21\xb4\xa5\xa0\xa9\x2e\xb2\x3a\xc4\xd3\xf9\xdd\xea\x05\xf4\xbd\x0c\xe2\x60\xef\x42\x2c\xb4\x26\x34\x37\xbb\xef\x11\x9b\x0d\x17\xd5\x9d\x62\xd1\xae\x73\x89\x54\x6d\xbd\xc7\x23\x0e\x34\x34\x55\x18\xa4\xae\x2f\x17\x41\x84\x05\x71\xb0\x46\xc0\x65\xbe\xa1\x24\x65\xd5\xfe\x56\x86\x9c\x3d\x42\x13\x4b\xf8\x78\x87\x29\x43\xea\xa9\x78\x39\xb7\x04\x46\x45\xac\xde\xee\x24\xb4\x77\x20\x88\x83\xbd\xb4\xb4\x8d\x23\xdf\xac\x69\xef\x8c\x8b\x15\x79\xbb\x59\xec\x69\x6f\xcf\xbe\x10\xb5\x75\x4b\xb0\x7a\x4b\x73\xbc\x38\xaa\xa1\xd5\x04\x25\xe9\x40\x1c\x2c\x6c\x7b\xaa\xd3\x83\x47\x6c\x78\x91\xf4\x7e\x23\x27\xe5\xc9\xd5\x22\x29\x1c\x04\x17\x95\xdf\xb7\x60\x9c\x5c\x70\x2c\xd1\xef\x14\xed\x45\xe4\xea\x41\xdc\x3f\xfb\x33\x48\x9d\x2b\x57\x0f\x7a\xe2\x22\x9b\x95\xc3\x42\xe5\x15\xcc\x73\x5b\xa2\x2a\x8f\x99\x3d\x6d\x86\xdc\x55\x53\xd5\x71\x4f\xd6\x6e\xa7\xea\xae\x7c\xb5\xad\x0f\xca\x2a\xb4\x97\x31\x88\x83\x99\x15\x4f\x5d\xb1\x13\xa4\x5a\xfa\x5c\x4f\xc9\xe9\x96\x31\x86\x52\x4c\xa9\x51\xb2\x9e\x4d\x76\x7a\x40\x82\x7d\x48\xd9\xc6\x32\x91\x37\x22\x2c\x88\x83\x9f\xe4\x46\xb1\x5b\xbf\x57\xca\x39\xce\x96\xbb\xe9\x23\x7b\xfa\xa1\xbe\x5e\x0a\x13\xd7\x3e\x91\xf7\xf9\x95\x02\x9f\xf4\xa9\x4a\x72\x28\xfd\x0b\xe2\x60\x8d\xe0\xf7\xf2\x64\xd7\xbb\x82\x77\x55\xd3\xc8\x4c\x7f\x7d\x26\xc7\xf3\x96\xe5\x97\xec\x30\x9e\x09\x82\xd1\x52\x7e\xba\xb9\x24\x21\x68\x75\x1b\x88\x83\x29\x20\x8a\x1f\x26\xa8\x49\x56\x52\xcb\x7d\x24\x7f\x27\x34\xe1\xcc\x8b\x6c\xd6\x72\xde\xe8\x91\xb7\xbf\xbf\x3e\xc5\xc3\x79\x8a\x6b\x50\x42\x15\xc4\xc1\xc2\x8e\xdf\xab\x6a\x67\x5d\xb5\xbc\x55\xcb\xac\xc1\x88\x85\x17\x72\x59\x64\x6b\x4e\xed\x5e\xce\x8b\x3e\x33\xd9\xd7\x21\x41\x1a\xc1\x1f\x10\x03\x78\x10\x87\x38\xce\xee\x7c\xb9\x7a\xd0\x9b\xf5\x7f\x6c\xe6\xbb\xe5\x7c\x2c\xe1\x2e\xaa\xab\x79\xc1\x51\xa9\x75\x5f\x8a\x62\xce\x95\x41\x44\x9c\x9f\xbd\xfa\x4b\x61\xc0\x83\x69\x7b\xcd\x4d\x68\x05\x16\x80\x83\xa9\xa5\xa0\xa6\x75\xb0\x8a\x69\x75\xa7\x15\xa7\x49\x7e\xf0\x16\x76\x3d\x9b\x24\xcd\xb7\xdd\xbc\xdb\x04\x6f\x05\xa6\xcb\xed\xcb\x85\x7c\x11\x61\x41\x1c\xfc\x7c\xd7\x0a\x66\x96\x5a\xd6\x82\x4e\x26\x9d\x6e\xe3\xde\x95\x41\x1d\x81\x7a\x59\xf9\x23\x27\x8b\x98\xd0\x69\x09\x9e\xbb\x8d\xa2\x50\xfa\x17\xc4\xc1\x1a\xa1\x5d\xe2\x7e\xd5\x88\xaf\x36\x35\x8b\x67\xb6\x71\xc6\x7a\xcd\xdd\xa8\xac\xdf\x9b\x55\x1f\x07\x0d\xe2\xad\xea\x67\x12\x9d\x63\x71\x11\x61\x41\x1c\xcc\x01\xa2\xbb\xa4\xa4\xca\xb3\x94\x1d\x6a\x52\x68\xeb\xb7\x16\x0c\x30\x8f\xcc\x82\x07\x34\x54\x5f\xf0\xdc\x58\xdb\xde\x6d\x0b\x34\x83\xe6\x5e\x40\x1c\x2c\x6c\x52\xeb\x92\x04\xdd\x52\x49\x09\x5a\xf8\xf1\xf4\xbb\x2c\x8f\xdb\x72\x65\xc2\x3b\xbd\x07\xe4\x5e\xb2\xb5\x2a\xf7\xa8\x77\x9a\x65\x11\x6a\x81\x38\x84\x5a\xe7\xcb\xd5\x83\x46\x50\xc8\x6a\xc9\x08\x84\xc7\x6d\xb8\xed\x08\x5f\x96\x0f\xcf\x53\x92\xa5\x56\xab\x45\xd7\x53\xa0\x70\x30\xb2\x1e\x89\xc6\x3c\x9b\xe0\x75\xbe\x89\xb8\x7d\x10\x07\x7f\x1f\x86\x7a\x89\xa0\x7a\x09\x8a\x35\xf9\x10\xe1\xd9\x1c\x5e\xac\xd6\x96\xb0\x42\xb1\xfa\xe6\xad\x55\x57\x35\x5f\x7b\x3c\x52\x07\x95\x6d\x81\x38\x98\x5a\x8c\xa2\x81\x7a\x7e\xf9\xfa\x54\x14\xae\xb2\x0f\x31\x15\xac\x87\x57\x2f\xee\xad\x54\xf8\xad\x99\x90\x31\xd1\x62\x0d\x5a\xd7\xbc\x80\x3e\x39\x01\x1c\x7c\x50\xf0\xf1\xf9\xda\x29\xc5\x97\x66\x4c\x4a\x17\x6e\x85\x34\x45\x4e\x4d\x35\x9d\xc5\xb5\xad\xd6\x2c\x7a\xed\x22\x0d\x05\x63\xa3\x34\x68\x50\x00\xe0\x60\x0e\x3c\x29\xde\xa6\xa5\x48\xc7\x26\x7a\x65\xd6\x1f\x71\x35\x21\xa7\x25\xb2\xf4\x4b\x17\x39\x67\x1b\xff\x0f\xef\x6c\xf1\xa5\x76\x69\x68\x36\x03\xc4\xc1\xc2\x1a\x5d\xd8\xef\xc6\x33\xc8\xa9\x50\x1c\xa9\xb6\xf5\xb3\x19\xa7\x11\x8b\x16\x70\x7d\xfe\xf8\xa6\x14\xae\x8a\x01\x8f\xcc\x24\x06\x11\x42\x2d\x10\x87\x50\xeb\x7c\xb9\x7a\xd0\x48\x19\x59\xad\x9f\x56\x3b\x62\x4f\x0e\xe3\xe6\x12\x8f\xef\x8e\x0d\x68\x7b\x4a\x48\xde\xbc\x83\x52\x97\xd7\x22\x5c\xc6\x69\x96\x79\x19\xdf\xeb\x35\xe2\xf6\x41\x1c\x4c\x2d\x5f\xde\x86\x08\xe9\xc8\x84\x3d\x15\xc5\x40\xaa\x80\x37\xa2\x4f\x7c\xdc\x73\xec\x9f\xba\x37\x5f\xe3\x6b\x6f\x40\x1d\x10\xc4\x88\x81\x16\x50\x03\x38\x98\x5a\xed\x1f\x15\xb2\x24\xd9\x7a\xa7\xdb\xd9\x17\x7c\x0d\x8d\xe6\xaa\x0e\xda\xc4\xd8\x43\x63\x71\x1a\xe7\x6e\x34\xaa\xad\x0e\xa5\x42\xef\x59\x10\x07\x6b\x84\x4a\x19\xdb\xea\x9a\xa6\x3f\x57\x1a\x06\x58\xf0\xbd\x34\x22\xf3\xd9\x49\xc9\x9f\xe9\xf8\xab\x9b\x64\x9c\xfd\x6a\x12\xca\xc1\xb3\x46\x84\x05\x71\x30\x07\x5a\xbe\xd6\xbd\xfc\x80\xd3\x9b\x13\x8e\x47\xcd\xf3\xe4\x55\x34\xc5\x07\xc7\x4a\x4f\x6b\x35\x0c\x1e\x2c\xbb\x6b\xd9\xf2\xfb\x39\xd0\xeb\x1b\xc4\xc1\xc2\x72\xc5\xbe\x59\x21\xa4\x56\x10\xda\x2c\x0d\xe5\x77\x9f\xce\x54\x49\xdb\x62\x25\xe5\x30\x29\xe2\x0d\x39\x62\x1c\xe6\x29\xf2\xa1\x45\xa8\x05\xe2\x10\x6a\x9d\x2f\x57\x0f\xfa\x22\xfa\x1f\xb9\xfa\x8f\x69\xa3\xea\x67\x82\x5f\x3f\xae\x6e\x89\xe7\xa2\x77\x96\xbe\x5a\xa0\x28\xea\x26\x74\x60\xcf\x08\x75\xbe\x46\xef\xeb\x02\x1d\x9e\x01\xe2\x60\x6a\x49\xe9\x18\x76\x4a\xca\x1d\x10\xa1\x4b\x8c\xb2\xdb\x7f\xb8\x32\xe0\x9f\x70\xb7\x9c\x0d\xeb\x4e\xcb\xe8\xf8\xcf\x45\xd4\x25\x74\x68\xdb\x07\x10\x07\x53\x0b\x17\x35\x7c\x65\xef\xba\xb8\x3d\xf6\xb0\x42\x15\x8d\xe7\x53\x7d\xc6\xbb\xdf\xeb\x57\xbb\x2b\xf4\x94\x9b\x9b\x98\x5b\x69\xea\xa0\xbd\xb0\x40\x1c\x7c\x6b\x1d\xc6\xbb\x32\xd2\xdf\xad\xfb\xaf\x61\x90\x5c\xcd\xcb\xe2\xd2\x4e\x4f\x94\x71\xe5\xc3\xf6\x9c\x96\x7f\xfc\xc4\x6e\xd5\xe9\x0b\xd4\x08\x20\x0e\xe6\xc0\x88\xb1\x82\xb2\x1c\xdb\xe5\x95\xd5\x50\xa2\xe7\x3f\xf2\x28\x7e\x36\x47\x66\x93\x7a\xbb\xbc\xf0\x43\xcd\x95\x3b\x90\x7f\x79\x34\x86\x08\x0b\xe2\x60\x61\x03\xee\xc4\x6c\x96\x9e\x06\xe7\x6c\x59\xa0\x25\x39\x15\x0a\x24\x14\x5d\x62\x7f\x7c\x87\x3f\xa0\xfb\xb6\x65\xa2\xcb\xb5\xc4\x8b\x28\x08\xb5\x40\x1c\x42\xad\xf3\xe5\xea\x41\x5f\xbe\xc8\x6a\xb1\x11\xa6\x36\x5f\x28\xf9\xb9\x4a\x3b\x73\xa4\xca\x35\xf2\xd0\x70\x69\x07\x23\xee\x3b\xed\x1c\x2b\x9b\xd3\xa4\x4a\x40\xdd\xe0\x5d\xa8\x76\x0f\xc0\xc1\xd4\x12\x95\x27\xbd\xcf\x73\xfb\x80\x0f\x8f\x61\xd8\xf4\xe8\xf1\x80\x56\x0e\xcb\xb1\x23\x89\x69\xb3\x61\xe4\x95\xd3\xdf\xe3\x31\x6f\xa0\x39\x58\x10\x07\x53\xcb\x5d\x57\x3a\x03\x9b\x28\x39\x57\xeb\xb1\x7a\xa9\x70\xdf\x44\x0b\x57\x57\x8f\x6b\xf1\x0b\x8d\xeb\xad\x32\x3c\x07\x6f\x5c\xde\x43\x6b\xf3\x41\x1c\xbc\x78\x4d\x9a\x72\xc9\x4e\xfa\x7a\x16\x0a\xea\x20\x61\x4c\x0f\xda\x1c\x5d\x71\x4a\xf8\xbc\x6b\xa8\x1b\x75\x7e\x2c\xeb\x42\xdb\x00\x94\x55\x06\x71\x30\x07\x4e\xc5\x72\x86\x3e\xaf\x38\xa5\xee\xfd\x76\x5d\x9b\x4a\x3c\x7d\xa9\xd6\xe7\x48\xc3\x22\x82\x23\xb8\x8d\x8f\x7e\xf5\xb5\x25\x77\x18\x54\x20\x0c\xe0\x60\x61\xef\xcf\x85\x5f\xb4\xc7\xc4\x7b\xee\x30\x8f\x96\x87\x1a\x83\x3d\xd1\xdf\x83\x97\xcb\x31\x91\xf0\xc8\xae\xfe\x5a\x85\x91\xb7\xc7\x26\x42\x2d\x10\x87\x50\xeb\x7c\xb9\x7a\xd0\x0c\x07\xb2\x5a\xb6\x27\x2e\x1f\x3e\x3e\x57\x36\xdc\xb5\x5f\x29\xe9\x9b\x7d\x4c\xf4\x35\xa0\xd8\xb4\xe5\xfa\xab\xd7\x3e\xe9\x3c\xfa\x5f\x38\x51\xa0\x8a\x63\x10\x07\x53\x8b\x29\x19\x25\x4a\x89\x5a\x42\x6d\x7d\xd8\x25\x84\x91\x96\x8e\xef\x26\x13\xc3\x4e\xc6\xe7\x6b\xbc\x4c\xb5\x17\xe6\xc9\x07\xb0\xa1\xad\x84\x41\x1c\x4c\x2d\x67\x03\x8b\xb7\x3a\x91\xb4\x0d\x69\x11\x9f\xde\x66\xea\x8e\x09\xac\xbb\x16\xc5\x71\xdc\x68\x7e\x97\x50\x91\x47\x8f\xb2\xc0\x0f\x9d\x7b\x04\xe2\x60\x8d\x40\xa5\x27\xbd\xdb\x7f\x68\x41\x14\x7a\x5b\xfc\x85\x54\xe6\x8b\x64\xf6\x78\x86\xd0\x41\xa1\x18\x75\xa6\xc1\x97\x0b\x49\xb6\xbf\xa0\xed\x95\x40\x1c\xcc\x81\x68\xae\x5c\xca\x05\xf7\xbc\xfd\x04\xf6\x29\xbd\xda\xda\xab\xb4\x31\x3e\xfe\xb7\xc7\x0d\xb0\x8a\xdf\xdf\x39\xf8\xda\x92\xe0\x02\xd5\x9e\x83\x38\x58\xd8\x69\xcc\xd7\xf3\x0e\x7c\x13\xb3\xea\x4b\x96\x2f\x3e\x52\xa6\xa9\xd7\x24\x7e\x51\xbe\xbb\x91\x55\x26\x7d\xbd\x8d\x5e\x34\xd5\x8c\x07\xa1\x16\x88\x43\xa8\x75\xce\x5c\x3d\x68\x0e\xfb\x9f\x5c\xbd\x14\x52\xae\x7e\xab\xf0\x99\xce\x21\x97\x7c\x7d\xd6\xb8\x31\xc6\x94\x7c\x93\x95\x4b\x81\xcd\x7c\x5e\x6f\xa5\xe8\x2d\x3a\xcf\x29\x59\x8e\x76\xb4\xbf\x9f\xe9\x43\xca\xd5\x3f\x95\xc1\xe9\xd7\xdc\xf5\x88\xd5\x7c\xfb\x89\x57\x7d\x7c\x95\xec\x26\x8f\xaf\xe0\xbb\x16\xdb\xf9\xd1\x37\x0d\xa6\xac\xf7\x7b\xfa\xff\x9b\x99\x3e\xd0\x8d\x21\xf7\xb6\x2c\xce\x89\x7b\xfc\x13\x1c\x1f\x6f\xa0\x17\xb6\x56\x32\xe3\xa8\x45\xf3\x7f\xa5\xdf\x8b\xf5\x52\x1e\xd5\xd1\x5b\x34\x7a\x78\x1f\xda\x70\x0b\xc4\xc1\xf7\xcb\x9c\x32\xc6\x75\xe0\xc1\x1c\x92\x57\x3c\xf4\x9f\x65\x3b\xbe\x1c\x33\xb3\x43\xf4\x40\xe8\xfa\xe0\x2e\x8d\x95\x0f\x5e\x3d\x83\x1f\x22\x2c\x88\x83\xf5\xb6\x07\x66\x87\xc7\x32\x52\x63\x15\x53\x34\x99\x65\xdf\x83\x04\xc4\xbf\x0a\x7f\x50\x72\x23\xa4\x50\xe6\xfc\x62\x24\xf8\x60\xd4\xf3\x25\x22\x2c\x88\x83\x6f\x1a\xba\xdb\xf0\xd4\x80\xe3\x43\x8a\xe7\x74\xc5\xf5\x84\x37\xb5\xae\xdd\x83\xcb\x4d\x05\x0e\x5d\xe1\x4d\x32\x58\x57\xa5\x5f\x3d\x87\x92\xea\x20\x0e\xd6\x2d\x2a\x66\x50\x1f\x89\x35\xd3\xcc\x71\x99\x39\x8f\x33\xa6\x5e\x3a\x5b\x5f\x6b\xf7\xa4\xa7\x72\xc8\xb5\x23\x74\xcc\xb7\x40\x63\x84\x0e\xc2\x07\x71\xb0\xb0\x4c\xa9\xc6\xc3\x89\x9e\x07\xd4\x7e\x7d\x8b\xd8\x8c\x3b\x7a\x9f\x08\x42\xec\xb6\xe8\xd4\xcd\xfe\xac\xbd\x0a\xa3\xa2\xb9\x29\xd3\x8a\xe8\x6d\x20\x0e\xd1\xdb\xce\x97\xab\x07\x09\x8c\xac\x56\x82\xb5\xfb\x98\xcd\x20\xc1\x97\x07\x11\xe6\x1d\xb7\x56\x06\x07\xd6\xf1\x45\x02\x7f\xd5\x75\x76\xce\xf3\x7d\x4d\x3e\xcc\x8c\x81\x16\x7c\x81\x38\x98\x5a\x92\x02\xdc\xd1\x13\x1a\x2c\x26\x19\x87\x89\x9d\x2e\x8f\x0b\x66\x4c\x3c\x23\x73\xb4\x2a\x42\xe3\x7b\xea\x35\x02\x52\x02\xdb\xa0\xed\x8b\x40\x1c\x4c\xad\x87\x95\x57\x66\xd9\x86\x7c\x79\x52\x1f\x12\x8a\xf3\xfc\xa1\x8d\x7f\x57\x6d\x43\x29\x75\x74\x8f\x75\x53\xe0\xa9\x74\x57\x50\xd3\x0f\x44\x58\x10\x07\x6b\x04\x92\x42\x13\xe2\x39\x54\x74\x37\x3f\xe5\x76\x14\xde\xbc\xf2\x9f\x21\x0d\x56\x87\xcb\x8e\xfb\x1a\x0d\xe3\x4f\x39\x44\x05\x9e\x43\x27\xcd\x81\x38\x98\x03\x1d\x2e\xb6\x68\xd6\xaa\x9f\xac\x48\x08\x1c\x5f\x87\x19\x8f\xa9\x5b\x7a\x49\xe8\xbd\xe8\x7c\x61\x44\xfe\xc9\x6a\x5d\x97\x3a\x15\x9a\x44\x06\x71\xb0\xb0\x92\xd4\xc6\xdd\x24\x23\x81\x7b\xc4\x1b\x9d\x99\x3a\x96\xef\xb4\x2d\x88\xf1\x43\x7c\x32\x67\x47\x12\x89\xc6\xe7\xe3\x34\x9c\xef\x21\xd4\x02\x71\x08\xb5\xce\x97\xab\x07\xe5\x45\xff\xc7\x2c\x32\x8a\x9d\x72\xcc\xc0\x1d\x0f\x6a\x0a\xaa\xc8\x6b\x07\x9c\xba\xe5\xde\x2d\x14\x35\x11\x28\x87\xe5\x39\x77\xe9\x2e\x6f\xf4\x7a\x41\xb3\xc8\x00\x0e\xa6\x96\xeb\xa1\x34\x2b\x8e\x0a\x95\x10\xeb\x15\xc2\x79\x45\xd4\xe7\xca\xca\x87\xd7\x27\xd9\x7a\xff\x5c\xcf\xfa\xe1\x48\x9b\x83\x7b\x06\x6d\x11\x07\xe2\x60\x6a\x65\xe0\xf7\x8b\xa1\xfd\xe4\x89\x96\x3f\x64\xec\x69\x75\xa5\xac\x0c\x26\xee\x32\xb7\xb9\x89\xbf\x35\x68\x64\xb9\x49\x42\xe6\x05\x0d\x3f\x41\x1c\xac\x11\xf8\xc8\x84\x88\xa5\x4c\x89\xba\xac\x33\x44\xb0\x3f\xe4\x5e\x9a\x8e\x6f\x89\x4a\x51\xee\x4e\xa8\x49\xf4\x65\x2c\x96\x44\x1b\xc5\x41\x84\x05\x71\x30\x07\xde\xdf\xd1\xdd\x3a\xa9\xc3\xc0\xb2\xfb\xc6\x11\x2d\x45\xf0\xa6\xf1\xd2\x4f\x45\xfc\x88\xe1\x24\xcd\x6f\x12\x4d\xe9\x86\x58\x1b\xd0\x1e\x0c\x20\x0e\x16\xf6\xf8\xe9\x51\xf3\x19\xfe\x90\xac\xc8\xfc\x2f\xad\x5e\xb1\x3d\x26\xe7\xf6\xfd\x0a\xab\xd6\x27\xa9\x5a\x65\xb6\xda\x65\x06\x5f\x96\x10\xb9\x7a\x10\xf7\x7f\x6a\xfd\x2b\x57\xff\xb5\x8a\xda\x7b\x59\xff\x25\x49\x30\xbd\xd1\x25\x07\x09\x86\x96\xc8\xcc\x91\xc1\x49\x0f\x76\x02\xd4\x35\x2e\x1e\xa2\xc2\xf7\x26\xff\xce\xd5\x0b\x45\x6e\x2f\xfc\x9e\x3e\x15\xae\x89\x29\xbd\x78\xf7\xdb\xcf\x7a\x1b\x1c\x7c\xac\x0b\x98\xed\x43\x0b\xb5\x7a\x9f\x9f\x06\x24\xc9\xfd\x0b\xb5\x74\x5f\xfc\xf6\xfa\xd5\x9d\xfb\x58\xf4\x7d\xa2\xbc\xbc\x0d\x7f\x24\x1b\x2b\x13\xe4\x5b\x70\x29\x1d\xd7\x5e\x68\xc4\xdf\x8c\xd3\x86\xe5\xea\x41\x91\x91\x73\xf5\xa1\x89\x03\x27\x0a\xef\x76\x63\xec\xd7\x25\x1d\x94\x37\x39\xc7\xcd\x03\xa4\x56\xc5\x8b\xa3\x7e\x69\x3c\x26\xdc\xa5\xbb\xe8\x2c\xfa\x2f\xb4\xf5\xb1\x77\xf2\x54\x6e\xa9\x17\x91\xad\xd2\x0e\xd5\xdb\x62\x59\xde\xd6\x15\xdd\xbd\xc2\xe0\x93\xa3\xd5\x0e\xb6\xb8\x64\xfd\x5e\x28\x57\x0f\x8a\xf9\x4f\xae\xde\x07\x9e\xab\xb7\xfc\x81\xdd\x40\x2e\x9b\x5a\x80\x67\xad\xfb\xdb\x29\x70\x1d\x3b\x6a\xbc\xb4\xf7\x6c\x3c\xac\x69\xe3\x3a\xdf\xf5\xb3\xfd\xbc\xb1\xbf\x1e\x0f\xf9\x20\xe5\xea\x1b\x47\x9f\xe8\xff\xfa\xe9\xad\xbf\x7d\xf1\x8c\xa0\x8b\xce\x69\xcd\x74\x68\x40\xe0\xe4\x4b\x66\x9d\x45\x9f\xfb\xaa\xd2\xd8\xb4\xc3\xdf\x5f\x12\x29\x57\x4f\xe7\xf7\xf1\x5e\xeb\x2b\x73\x1d\x7c\x81\x36\x46\x15\xce\x36\x7b\x9a\xeb\xa6\x8a\x9c\xf6\xef\xee\x8a\x59\xd1\xe1\x6e\xd0\x58\x48\xfc\xfd\x25\x91\x72\xf5\xdf\xaa\x5f\xdc\x71\x42\x11\x0b\xb4\xa9\xd7\x8f\x9a\xaf\xf7\x52\xd4\x24\x8f\x3f\xe9\xf7\x73\x43\xdf\xdf\x79\x68\x3a\xdf\xd1\xb5\xf0\xf7\x97\x44\xca\xd5\x57\x79\x7b\x0f\xe3\xbe\xf7\xec\x5a\x58\xec\x51\xe5\xee\x7e\xd7\x1c\x3a\x28\x5f\xa7\xc4\x10\x1c\x45\x70\x8f\xb8\xa0\x39\x96\xb0\xf7\xef\x2f\x89\x94\xab\x6f\x92\xff\xd3\xe7\xc2\xd0\xe4\x98\xaa\x78\xc8\x12\x1a\x41\x72\x90\xef\x14\xa8\x1e\x42\x4b\x9d\xfe\x87\x9e\x05\x4f\x8f\x2e\xf0\xc9\xdf\x5f\x12\x29\x57\x7f\x86\xd6\x93\xf2\x82\x6b\xc6\x3d\x99\x3a\xa5\xc2\xef\x94\xc3\xb0\xfc\x5d\xa1\xd6\xaf\x69\xa9\x1e\x32\x92\xf0\x13\xdf\xfe\x4a\xbe\xbf\xbf\x24\x52\xae\x5e\x48\x82\x6c\x3a\x5b\x2b\x8d\x68\xf8\x45\xd1\x0c\xc9\x78\x70\x0c\x26\x87\xbb\x11\xaf\x77\xa1\xb9\xf0\xb1\xc0\x70\x7b\x59\x22\xdb\x7f\x33\x82\x07\x75\x45\xe4\x77\x61\x94\x37\xa6\x50\x88\x9d\x7a\x74\x62\x75\xce\x03\xdf\xbd\x29\xfd\x6e\x67\x9b\x6e\x46\x31\x21\xab\x62\x21\xd6\x4f\xfb\x85\x72\xd0\x30\x0b\xc4\xc1\xde\x85\x72\xa3\x8e\xac\x43\xbb\xdf\x62\xd0\xdf\x92\x18\x9d\x6e\x98\x66\x76\x4b\x94\x2a\x27\x77\x32\xf5\xe8\x10\x18\x98\x93\xcd\xbf\x84\x72\x94\x20\x0e\xf6\x2e\x3c\x6a\x15\x4c\x16\xc3\x6a\x5d\x2b\xb8\x18\xb3\xf7\x33\x3e\xbb\x70\x9e\x67\x58\x79\x56\xa9\x52\xfb\x9d\x25\x93\x90\x45\x7f\xa2\x19\x22\x2c\x88\x83\x35\xc2\xcb\x13\xe7\x42\x17\xe5\x28\x6d\x93\xde\x67\xa9\x77\x5c\x6e\xcb\x04\xd1\x74\xdd\xc7\x3c\x62\xd0\xd7\xb8\x54\x22\xfe\xca\x80\xb4\x10\x11\x16\xc4\xc1\x76\xf8\x91\x2f\xf0\x66\x24\x69\x7e\xde\xfc\xd4\x58\x9d\x1b\xb7\xf0\xc5\xb7\xf2\x02\xb6\x26\xe3\x39\xfd\xcb\x12\xa7\xad\x8c\x2e\x9a\x35\xd0\x41\x9e\x20\x0e\x56\x0e\xd7\xcd\x28\x25\xfe\xb6\x4d\xb1\xfa\xc3\x9a\xe6\xe5\x08\x4c\x69\xfa\xfa\x4a\xb6\x64\x31\xc2\x8d\x68\xc7\x31\x2a\x19\x9d\x8d\x3f\xf1\x88\x5c\x3d\x88\xfb\x67\x5d\xbd\xcf\xb9\x72\xf5\xa0\x27\x2e\xb2\x59\xd1\xf7\x2f\xde\x9e\xa5\xdd\x13\x63\xc2\x89\x1f\x32\xbe\xa9\xff\xdd\xa2\x4c\xe6\xad\xe4\xe7\x37\xb8\x9b\x94\xb9\xc3\xb6\xbe\x37\xa1\xcc\x0c\x88\x83\x99\x45\xe5\x61\x7c\x93\xce\x59\x5e\x8f\xf6\x61\xf1\x88\x37\xa5\x69\x10\x19\x45\xd7\x6f\x2c\xea\x57\xfd\x01\x07\x12\xac\x3f\xc5\x86\xba\xa0\xb9\x0d\x00\x07\x33\x8b\xaf\xfb\xfe\x69\x03\x71\x4f\x57\xd6\xbb\xe1\xcc\xcd\x1b\x9f\x03\xb1\xd9\x77\x17\xef\xdc\xdc\x99\x4b\x7c\x6b\xe1\x68\xd6\x4b\x47\x08\x0d\x87\x00\x1c\xac\x11\xc8\xbe\xff\xbc\x58\xf6\x6a\xe1\x65\xab\xc1\x7d\x09\xac\x4c\x1e\xa5\x0e\x42\x7d\xb4\x67\x9a\x68\x3f\x79\x3a\xe7\x0e\xd9\x54\x13\x07\xa0\xfd\x25\x00\x1c\xcc\xac\xc7\xaf\x55\xe7\xb6\x64\x7d\x6a\xdd\x7e\x34\x87\x5a\x8e\xef\xb8\x2e\x89\xdb\xa0\x6f\xf9\x08\xbc\x27\x21\xcc\xaa\xa9\x96\x5a\x84\x8a\x4b\x40\x1c\xcc\x2c\xb9\x93\x2b\xb9\x5c\x02\x62\x71\x84\x11\xa3\xdf\x1c\xff\xe8\x1c\x27\x92\xe4\xe8\xaa\x5f\x5b\x96\x78\x96\x3c\xaf\xf0\xb2\x5e\xf1\x00\x31\x80\x07\x71\x88\x63\xc8\xce\x97\xab\x07\xbd\x59\x91\xd5\xea\x91\x8b\xe4\x97\x21\xa0\xd5\x40\xef\x72\x0f\xb8\x64\x7b\x7b\x83\xfa\xf3\x1c\x21\xa5\x82\xcc\x4a\xe8\x88\x26\xa3\xc7\x6a\x3b\x74\x48\x09\x88\x83\xa9\x65\x66\xa6\x2d\x56\xfc\xe8\x67\x85\x24\x3a\xf3\xc7\xef\xf6\xd6\x3e\x26\xa4\xc6\x58\x2a\xbf\xbe\x86\x7d\x3e\xbe\xf9\x87\x83\xca\x18\x0a\x0b\xe2\x60\x6a\xd5\x5a\xf9\x7e\xe2\x0c\x76\x7e\x7e\xe1\x6a\x1f\x8a\xf0\xe5\x6a\xfe\xda\x32\x8a\x28\xfd\x6b\xad\x52\x5c\x8d\x34\x9d\x4e\x49\x64\xd0\x48\x1b\xc4\xc1\x53\x13\x9b\x42\x43\x4f\xbe\xf5\x1e\xaf\xa9\xbf\xf2\x7a\x6c\x99\xe5\x27\xf0\xd8\x1e\x8f\x82\x22\x7d\x91\x3f\x7c\x75\x4e\x39\xad\x04\x13\xfa\xb5\x00\x0e\xa6\x56\xf4\xa7\x6c\xa6\x8e\xa4\x57\x16\xd6\x75\xd9\xfd\x79\x8b\xba\x6b\xaa\xed\x5f\xb1\x7d\xc4\x7e\x73\x44\x3e\xe8\xf6\x8d\x41\xa3\x11\x82\xba\x2d\x80\x83\xa9\x35\x54\x86\xc5\xae\xd8\x71\xd7\xe2\x83\x8f\xb3\x49\x95\x07\x1d\x41\x75\xab\x60\x61\x5a\x0f\xb7\x61\x85\x40\x75\x0a\xcd\x64\x2b\xb4\x8c\x10\xc4\x21\xd4\x3a\x5f\xae\x1e\x34\x82\x42\x56\xab\x12\x95\x7f\x46\x20\xaf\x4a\x59\x9a\x9c\x80\xf9\x37\x53\xc5\x76\xb3\x3b\xf5\xad\x4e\xd7\xab\xa7\xc7\xa4\xf6\xd6\xec\x25\xc7\xd0\x16\x95\x20\x0e\xa6\x16\x06\x75\xa8\xa3\x92\x5e\x53\xcc\xcb\x5a\x0e\xf1\xa7\x67\xcf\xee\x54\x3b\x59\x2e\x97\x4d\x78\x93\xa3\x89\xdf\x5e\xb6\x9b\xaf\x83\xe6\x88\x40\x1c\x4c\xad\xeb\x7c\x04\xf2\xb2\xfc\xaf\x79\x74\xaa\x0d\x83\xe9\x18\x15\xec\xe2\x1b\x3f\x2c\x3d\x75\xab\xb4\x4f\xd2\x17\x10\xe0\x9a\x48\x0a\x44\x84\x05\x71\xf0\x0f\xe4\xb1\x92\xb6\x85\xf6\x0c\x37\xef\xb6\x5d\x49\x1f\x75\x5e\xbf\xd5\x8f\xec\x5f\x3c\x18\x04\x55\x84\xbf\xa6\xb8\x61\x38\x75\xad\x40\x1f\xc8\x00\x0e\xa6\xd6\x99\xdd\x93\x1f\x37\xc7\x06\x0a\x71\x28\xb4\xf3\x02\x72\x6e\xe7\x1d\x56\x3d\x89\xcc\x2c\xa9\x4d\xf4\xb9\x9c\x15\xdb\x51\xae\x4e\x02\x65\x14\x01\x1c\x4c\xad\x3f\xec\x67\xce\x36\xb9\xfd\xab\xf6\x7e\x96\x26\x58\x9f\xfe\xf8\xa7\xba\x4b\xa6\x07\x10\x73\xa4\xa2\x7c\x1a\xdb\xc6\x97\xe7\xc3\x41\xa8\x05\xe2\x10\x6a\x9d\x2f\x57\x0f\x1a\x29\x23\xab\xa5\xef\xda\xdc\x82\x3d\x43\x23\xbd\x7b\xbc\xf8\xb6\x2f\xf9\xc2\x78\x68\xf8\xc0\x07\xed\xb5\xab\x0f\xed\x4a\xf0\x93\x1b\xdc\x08\xa0\xb2\x48\x10\x07\x53\xeb\x96\xd2\xab\x77\x0f\x89\xe3\x50\x98\xa9\x97\xd9\x9b\x15\x30\xca\x3d\x99\x7e\x55\x37\x1a\xd0\x94\xb7\xf0\x6a\x3c\xaf\xfc\xf6\x0e\xda\xe3\x19\xc4\xc1\xd4\x92\x31\x19\x9d\x95\x1d\x8a\xc7\x71\x91\x11\xbc\xce\x8e\x59\x60\x40\x52\x67\xc5\x7e\xd4\x97\xf4\xf0\x6b\xc5\xcd\xbb\x16\xc9\x66\xd0\xc2\x57\x10\x07\x6b\x04\x71\x33\xe6\xb4\x6d\x93\x6c\x8c\x87\x8b\x59\x1b\x57\xad\x24\xf0\x38\xb5\xc3\xbc\xcf\xcc\x99\xbc\x7b\x6c\x92\xf6\xf0\xd2\xf8\xa1\xc2\x25\x10\x07\x53\xeb\x20\xd9\x21\xb0\xb8\xaf\x37\xe3\x7a\x82\x56\x78\x60\xb6\xcd\xf2\xea\xcb\x09\xf6\x93\xd8\x5a\xc5\x9d\xc2\x41\xfd\x09\x3b\x53\xe8\xa9\x05\xe2\x60\x6a\x1d\xbe\xc2\x64\xb5\xcd\xec\x53\x76\x9d\x60\x63\x6b\x53\x52\xb9\xf4\x71\x59\x34\x25\xb1\x53\xca\xbd\xed\xb1\x29\x06\x45\x57\x5a\x1c\x42\x2d\x10\x87\x50\xeb\x7c\xb9\x7a\xd0\x17\x11\xb2\x5a\xdf\xf4\x3e\x9e\xf5\xe6\xbd\x52\xd4\x08\xac\x5b\xb9\x6f\x72\x5d\xe6\x67\x6a\x43\x85\x6f\x83\x61\xda\xcb\x9b\x59\xfd\xcf\x49\xab\xa1\x1a\x56\x10\x07\x53\xab\x25\x9d\xef\xe6\x8d\xc8\x18\x3d\x61\xfe\xeb\xb1\x5d\x9c\xa5\x9f\xd6\xac\xc3\x5a\x73\x6b\xa2\xad\xb2\xcb\x08\x9a\xbb\xee\x3c\x85\x66\xb4\x40\x1c\x4c\xad\xa1\xaa\x88\xac\x95\x82\x82\xe6\x57\x7a\x9b\xab\x28\x94\x8a\x3d\x3c\xbf\xf6\x82\xa8\xba\xe3\xfd\x47\xae\xdc\x0a\x99\x7e\x2d\xe9\x83\x08\x0b\xe2\x60\x8d\x20\x5d\xbd\x96\x22\xc2\xab\x8b\x6a\x84\x96\xc7\xf4\xb0\x30\xbd\x8c\xbe\x88\x2d\x49\x55\x97\xf5\x75\x6b\xa9\x42\x56\xcc\x08\x3d\x74\x50\x35\x88\x83\xa9\x25\x4b\x3a\x7b\x2b\xb0\x84\x48\x56\xcc\xf6\xd7\x88\xa1\x63\x88\x66\xc2\x2d\xb5\x17\x7e\x78\xcd\x3f\xb1\xfd\x51\xac\x18\x14\xfb\x2b\x10\x61\x41\x1c\x4c\x2d\x45\xfc\xc3\x55\xc7\xb5\x3f\x93\x6e\x97\x4c\xe2\xbe\xcd\x51\xf2\xfb\xb3\xca\xa6\x6d\x55\x57\xfa\xb2\xa3\x92\xb6\x39\xab\x5c\x73\x45\xa8\x05\xe2\x10\x6a\x9d\x2f\x57\x0f\xfa\xf2\x45\x56\xeb\xb2\xeb\xdb\xcb\x84\x1f\x54\xd2\x15\xf8\xfb\x7b\xd9\xed\xe8\xd3\x7f\x13\xa0\x2e\x63\xa5\x49\x5a\xab\xa0\x10\x48\xab\x8d\x18\x43\x25\x81\x20\x0e\xa6\x56\xfb\x16\x23\xd7\xf4\xa4\xcd\xd9\x49\xd8\xa7\xa2\xd5\xc8\xf7\xbb\xc1\x0a\xd2\x0f\xd2\xdd\x30\x36\xb6\x99\x7f\xf5\xff\x58\xfb\x05\x9d\x8a\x07\xe2\x60\x6a\x9d\xd4\x1f\xd6\xde\x52\xfd\xec\x87\x5d\xf0\xb8\x8a\xb4\x38\xd4\xa1\x4d\x08\x75\xa7\x21\xa7\x97\x44\x29\x5f\x99\x92\xad\x64\x1b\xda\x9e\x1f\xc4\xc1\x1a\x81\xbf\x92\x6f\xf3\x5e\x56\x37\x5e\xd9\xe3\xaf\x6f\x0f\xbe\x68\xa4\x6c\x71\x92\x91\xbe\x13\x9c\xf3\x8d\xf1\x90\x8b\x66\xf0\xd0\x83\x0e\x15\x01\x71\x30\xb5\x78\x33\xef\xf1\x57\x69\x3d\x2a\x73\xea\x32\xe2\xce\xcb\x36\xbf\x6c\x1c\xcb\xf3\x95\x20\x65\x93\xba\xa8\xe8\xe3\x7c\x7d\x21\xfa\x75\x44\x58\x10\x07\x53\x4b\x28\x36\x4d\x3b\x12\xfd\x27\xd6\x01\xeb\xcd\x9b\xe1\x39\x57\x73\x33\xb8\x3e\x09\x2d\x74\x3f\x43\x45\xc5\x24\xf3\x52\xd5\x75\xe0\x40\xa8\x05\xe2\x10\x6a\x9d\x2f\x57\x0f\x9a\xe1\x40\x56\xcb\xab\xdf\x81\xab\x6c\x00\xeb\xd1\xe2\x74\x21\x41\xa1\xcf\xe5\x53\x8d\x25\x35\x0a\x96\x00\xb7\xce\x17\xb6\xe6\x21\xde\x36\x59\xd0\x73\x00\xc4\xc1\xd4\x32\xdd\x3e\xd6\xf1\x18\xe0\x7e\x3a\x3a\xf7\x52\x9a\xfb\xc1\x42\x87\xb3\x8d\x43\xac\xb7\x93\xc2\xd9\x4f\x43\x8e\x56\xd5\xa9\x6a\x75\x44\x58\x10\x07\x53\xcb\xf0\xee\x64\xc5\xde\x20\x1b\xc5\xf0\xcb\x7b\x13\x87\x8d\x09\x95\x77\x69\xb1\x7f\x2e\xa3\x34\xea\xec\x46\x73\x54\x08\xd5\xd2\x69\x23\xc2\x82\x38\x58\x23\xd4\xf3\x2d\x9e\xc4\xa1\xd2\x2f\x57\x95\xa9\xfc\xd1\x63\xbb\x35\x7d\xca\xfd\x8e\x5a\xa8\x6b\xbf\x30\x5e\x55\x95\x54\xf4\xfa\x18\x74\xe4\x20\x88\x83\xa9\xc5\xf6\x64\x8e\x27\x6b\xfc\x96\x61\x7a\xd4\x51\xa3\xb7\xd2\xd2\x92\xac\x2a\xe5\x22\xbd\x70\x10\xf7\x1e\xab\x55\x87\x6f\x78\x2a\xf4\xfa\x06\x71\x30\xb5\x02\x50\xd2\xde\xec\xdf\xec\x74\xb9\xd3\x5a\x49\xc2\x58\x61\x23\x2c\xf1\x61\x6b\x61\xf1\x1e\xfd\xe4\x92\x24\x7f\xf3\x3a\xbd\x93\x29\x54\x61\x04\xe0\x10\x6a\x9d\x33\x57\x0f\x9a\xc3\xfe\x27\x57\xef\x83\x94\xab\x17\x19\x1b\xc4\x99\x79\x43\x7e\x83\x55\x76\xf5\xe7\x10\xd9\xb5\x52\xb2\x22\x7e\x49\x14\x91\x10\x51\xa5\x75\xfe\x03\xf5\x63\xfc\x94\xbf\x9f\xe9\x43\xca\xd5\x53\x51\x2b\x7f\x8e\x79\x44\x9a\x3e\xa6\x3b\xa2\x98\x53\xe9\xb9\x22\x9c\x33\xf3\x05\x15\x37\xf0\x33\x1d\xa9\xc5\xd7\x79\xdc\x7a\xf4\xff\x66\xa6\x0f\x74\x63\xc8\xbd\xcd\xc6\xd7\x8f\x32\xe1\x0c\xcd\x1c\x77\x22\x7e\xa5\x0d\xfd\x94\x1f\x67\x8c\x61\xbc\x6a\x5b\x92\xa0\xb1\x9c\x86\x47\xa0\xf7\x96\x14\x54\x2e\x0c\xe0\x60\xbd\xad\x44\x37\xa3\xa5\xdb\xa7\x31\x6a\x20\x8c\x33\x31\xe6\x6d\xa5\x51\xa6\xd3\x51\x32\xeb\x41\x7b\xb9\xc3\xca\x8e\xff\xa4\x83\x07\x94\xf9\x04\x71\xb0\xde\xc6\x7a\xd9\xb8\x9e\x5d\x26\xc9\xd1\xbf\xf9\xcd\x0d\x61\x69\x4b\xc9\x85\xca\x36\x75\x45\xe5\x30\xa9\x8f\x24\x33\xf4\xcd\x54\xbc\x50\xf1\x25\x88\x83\x35\x82\x01\x33\x1a\xae\x59\x40\xfa\x1d\x9a\x0b\xdd\x1f\x2f\x98\x98\x3a\x14\x76\x34\x8a\x5b\xcc\x95\x93\xaf\x68\x5d\x7b\x5c\xfb\x9c\x13\xda\xda\x0b\xc4\xc1\x7a\x9b\x34\x86\x0b\xda\x2b\x2a\x1b\x7f\x16\xf7\x52\xed\x72\x4c\xd1\x27\xab\xe2\x38\xd5\x3f\x1c\xf8\x5c\xfc\x38\xe7\x18\xe5\x15\xf2\xa1\x59\x54\x10\x07\xeb\x6d\x23\xcb\x9f\x5d\x7f\xe0\xbd\x88\x1c\xbb\x3f\x28\x79\xff\xd7\xb8\xec\x9d\xdc\x84\x7b\x95\xee\x83\x54\x1d\xe4\x7b\xdf\x14\xf3\x27\xa1\xc5\xcf\x20\x0e\xd1\xdb\xce\x97\xab\x07\x09\x8c\xac\xd6\x15\x6d\xc3\x2f\xb3\xa5\x78\x71\x5f\x97\xae\x6f\x53\x91\x3b\x95\xdf\xec\xb2\xe8\x54\x24\x7a\x9d\x28\x93\xf5\x05\xdf\x55\xd1\x5b\x16\x71\xfb\x20\x0e\xa6\xd6\x4f\x76\xec\x8a\x1c\x8a\x3d\xaf\x49\x92\xad\x81\xaf\x58\x05\x6f\xa5\xb1\x07\xb9\x5e\x05\x9c\x28\xcc\x36\xf3\x27\x72\x26\x24\x40\x07\xad\x83\x38\x98\x5a\x97\xb5\x12\x7f\x06\x9c\x6e\x3e\xaa\x13\xb8\xaf\x3d\xf5\xea\x8c\xec\x57\x68\x68\x8f\xf0\x37\xd6\xfb\xb6\xa4\x8f\xdf\xdd\xcc\xcb\xc9\x80\x46\x34\x00\x0e\xd6\x08\xc9\xb4\x57\x04\x32\x87\xaf\xf9\xab\x16\x7f\xfa\x79\x82\x7e\x22\x2c\xe7\x33\x84\x3d\xfe\xd9\x8f\x71\xa0\xb6\xa2\x99\x15\xd7\x1a\xda\x24\x07\xc4\xc1\xd4\x22\xc0\x25\xcb\x74\x4e\xf4\x39\xb4\x2c\x7f\x68\x7f\x71\xe9\x82\xb3\x65\xef\x9e\x6c\x62\x43\xc8\x37\x36\x82\x46\xed\x4b\x77\x1f\x27\x22\xc2\x82\x38\x98\x5a\x67\x9b\xda\x83\x79\x06\x09\x77\x9a\xd2\x8c\x96\xfb\xa3\xd3\xcd\x4a\xa3\xd6\xf7\xa4\xea\xa4\xf6\x03\x6c\xda\xea\x42\xd9\x1e\x4d\x21\xd4\x02\x71\x08\xb5\xce\x97\xab\x07\xe5\x45\x91\xd5\xd2\xdc\xc6\xe1\x93\x2c\x21\xed\x5d\x22\x56\xf4\x11\xd8\xf6\xe4\x76\xc5\xbc\x14\xfd\x9b\x42\x67\x86\xef\xc6\xe4\xb5\x69\x0d\x45\x68\x7f\x0d\x10\x07\x53\x0b\xb5\x62\x87\x2d\x00\x3d\x50\x1f\xed\x49\x06\x8b\xcf\xfb\xdb\xad\xe8\xe8\xe1\x2a\x8b\xeb\x9a\x4e\xdf\x2b\x5f\x13\x1e\x6b\x54\x6d\x21\xc2\x82\x38\x98\x5a\x74\xb7\x9f\x48\xb0\x86\x88\xfd\x21\x0e\x13\xe1\x26\x48\xd8\x26\xa1\x74\x74\xec\xbb\x9a\x11\xe9\x52\x46\x11\xd1\xca\x48\x32\x01\xed\x04\x01\xe2\x60\x8d\xa0\x16\x65\xff\xda\x5c\xef\xed\xa3\x8c\xfb\xfd\x54\x62\x56\x2f\x5a\x08\x98\x3f\xa1\xb5\x94\x15\xdd\x6d\xaa\xb5\x7b\xad\xe9\x50\x00\x4d\x9c\x80\x38\x98\x5a\xfb\xed\xf3\x8c\x58\x03\x86\x6b\x22\x2a\x4f\xc5\x0e\xf7\xb2\xe9\xee\xf7\x1b\xdd\xe8\x99\x1a\x18\x7a\xa1\xa5\x90\x40\x23\xa9\x0c\x0d\x3d\x40\x1c\x4c\x2d\xe0\xba\x7a\x44\xda\x7b\x81\xfd\x1a\xdd\xea\x7b\x45\xda\x69\x92\x62\xac\x5b\x7d\xef\xc3\x1d\x8e\x68\xa3\x23\x5d\x8a\xc3\xa6\x31\x8b\xaf\xdd\x63\x8f\xf1\xfd\x77\xf2\x7d\x66\xe2\xc8\x79\xc5\xc1\x60\xfa\xcb\x3b\xd6\x9f\x0e\xae\xcf\x16\xeb\x4c\x7f\x44\x63\xaa\x5c\x19\xc6\xd7\x2f\xea\x09\x5a\x35\x6e\xfa\x17\xda\xf9\x2a\x7f\x0f\xf3\xa3\xf9\xdd\xad\x32\x3c\x4d\x0d\x59\xd2\xbc\x2b\xb7\x8c\xfc\x46\x9f\x56\xfd\xe0\xdc\x92\x6b\xf3\x78\x78\x9d\x00\x96\x7c\x07\x45\x46\x4e\xbe\x27\xcc\xa8\x07\xcb\x35\xc5\xbc\xde\xe9\x64\xc1\xfe\x90\x7f\xdf\xf2\x43\xb9\xbf\x92\x4d\xa3\xdb\x8d\x12\xa1\x69\x8b\x64\x21\x3e\xb1\x7f\xa1\x21\xf9\xcc\xfa\x75\xe6\x6f\xf1\x9f\xbe\xda\x31\x98\xa6\x43\xbb\xde\xe6\x97\x61\x73\x59\x53\x88\xcf\x24\xa8\x36\xf1\xdb\xfd\xc4\x1f\x50\xf2\x1d\x14\xf3\x9f\xe4\x7b\x23\x3c\xf9\xce\x59\x4e\x62\x87\xa7\x9f\x5f\x7b\x52\x99\xa2\x38\x5c\x75\x31\x79\x1d\x45\xf6\xde\x93\xac\x64\x42\x13\xc9\x30\xac\x9f\xb2\x66\xc6\x7f\x3d\xc0\x69\x44\x4a\xbe\x0f\xe9\x8e\xd1\x0e\xaf\xaa\x89\xbb\x4c\x8a\x08\x1a\xfc\x31\xb9\x3c\x81\x4f\xd0\x64\x95\xa5\xf2\x70\xec\x80\x3f\xab\xa8\x57\x52\xef\xef\x2f\x89\x94\x7c\xd7\xfd\xc1\xd1\x63\xc2\xbd\xd3\x17\xf9\xc8\x9b\x44\x88\x45\x24\xd3\x62\x98\x3c\x3f\xf0\x6e\x9f\x1b\x21\x9a\x4a\x19\x81\xac\xfd\xf5\xbf\xbf\x24\x52\xf2\x5d\xa9\x8e\x98\xeb\x5d\x23\xf3\x34\x79\xc9\xaa\xe5\x94\x18\x87\xaa\xa7\x3b\x0e\xca\x40\x91\x80\x0d\x27\x43\x06\x77\x65\x5e\xdc\xd2\xdf\x5f\x12\x29\xf9\xce\x81\x4e\x3e\xf6\xb0\x6a\xc4\x87\x9d\x01\x55\x81\x78\xac\xf1\xc4\xd9\xa4\xe5\x71\x9a\x23\x81\xf8\x71\xeb\x37\xfc\x38\x41\xc2\x83\xbf\xbf\x24\x52\xf2\xfd\xf2\x1d\x7f\x8f\xbb\x3d\xed\x7f\x86\xba\x4b\x89\x5e\x3a\x8f\xd7\x4d\xf5\xa4\xcb\x8c\xf0\x6d\xda\xca\x7e\x4b\xcc\xc3\x64\x66\xdf\xfe\xfb\x4b\x22\x25\xdf\x4f\xb4\x74\x94\xfa\x2e\x9b\x8e\x4d\x7f\x4d\x65\x59\x74\xf0\xcd\xef\xc3\xc2\x78\x6c\xfa\x22\x16\x6d\x4c\x2c\x32\x39\x8d\xf1\x6a\xe8\xdf\x5f\x12\x29\xf9\x2e\x4a\x37\xf6\xfe\x4a\xaf\xfb\xe9\x48\x75\x96\x3f\x59\x41\x90\x1e\x6f\x37\xfb\x95\x34\x0d\xb3\xfd\x6b\xea\x6f\x5f\x4f\x34\x34\x28\xfd\x37\x43\x72\x50\x57\x44\x7e\xb9\x95\x33\x2f\x04\xdc\xb9\xf3\x08\x3d\x6e\xca\xc0\x4a\x26\x8e\xcc\x25\xff\x8a\xce\xad\x9f\xbc\xcf\xcf\xbe\x2f\x1a\x2b\x55\xbb\x8e\x1e\x20\x1e\xc0\x20\x0e\x5e\xac\x7e\x9a\x93\x26\xd8\x81\x3b\xa4\x45\xe6\x1f\xc9\x4f\x78\x69\x51\xc5\xd9\xdc\xc3\x0a\xdf\x63\xef\x80\xcc\x0c\x75\x74\x76\x0d\x5a\xca\x0a\xe2\xe0\x47\xa0\x4e\x7d\x7c\xca\xa5\xad\xa5\xe6\xaf\xc3\x59\xdf\x72\x5f\xba\x8d\xf9\x3a\x55\x9c\xfb\xd4\x8b\x00\xe7\x4e\x12\xbe\x4c\x5d\x06\x32\x28\x87\x01\xe0\x60\x8d\x50\x53\xc0\x57\x6e\x26\xc9\xa4\xf5\xe1\xde\x92\x99\x28\x41\x5f\xb3\x4c\x79\x51\xd2\x89\x83\x4c\xca\x8b\x72\xb2\x77\x91\x6f\x78\xa0\x85\x81\x20\x0e\xf6\x6b\xb9\x82\xc5\xdc\x7d\xb6\x2e\xc4\xc4\x3c\xe5\xaf\xed\x69\x1a\xcc\x78\x96\x16\x41\x74\xb5\x81\x2d\xfc\xf6\x85\xf2\xc6\xca\x29\x7d\x68\x4f\x50\x10\x07\x7b\xb9\xb5\x6a\xd8\x73\x84\x65\xcd\x0e\x1f\xed\x56\x25\xd5\xcb\x44\x61\x68\xcd\x7c\x77\x27\xa9\x0c\x48\x8d\x50\x3d\x92\xc8\xb3\x66\x57\x43\x24\xdf\x41\xdc\x3f\x0b\xe5\x1b\xcf\x95\x7c\x07\x3d\x71\x91\xcd\xba\x13\xe3\x1a\xcd\xb1\xf3\xd1\x4c\xdb\xa4\x71\x2f\x03\xdb\x56\x7f\x98\x4d\xcb\x89\x2e\x71\x41\x73\x2c\x34\x57\xd8\x5c\x64\x88\x1f\x71\xf7\x20\x0e\x66\x16\xd1\x49\xa0\x44\xc9\x42\xf4\xf5\xc2\x47\xb1\xc1\x86\x1d\xa7\xa6\x67\xe8\xa7\x58\x5a\xa1\xb2\xaa\x6d\xaa\xc4\xbc\xd6\x7c\x5d\xd0\xf4\x1a\x88\x83\xfd\x57\x5a\x52\x14\x69\xfb\x76\x41\xb8\xc1\x05\xd7\x42\xf3\x7d\x33\xce\xf0\xd3\xf4\x4a\x3a\xb6\x5e\x17\xdc\x71\x77\xc6\x61\xc7\x18\x87\x16\xc8\x82\x38\x58\x23\xcc\xea\x47\xdf\xb0\x17\x7a\xe2\xe0\x33\x25\x86\xb3\xac\x15\x35\x65\x17\x5e\xec\x4c\x1d\x32\xf9\x4a\x6a\x73\x0b\x87\x9b\x0c\x17\x3a\x05\x17\xc4\xc1\x7e\x6d\x79\xa9\x1d\x91\x4b\x94\xf1\x3b\x0f\x0b\x06\xaa\xc6\x87\xf9\x02\xa8\xf7\xde\x9c\x39\x12\xac\x3a\xf3\x8e\x12\x7d\x0d\x44\x09\x35\x86\x7a\x2d\x80\x83\x99\x75\x5c\xc8\xfc\x72\xe5\x01\xa3\xf9\x89\x2c\xe1\xa8\xe4\xf4\x3a\x66\xa8\xa9\xc9\xdc\xca\xb7\xe7\x6e\x2d\xc4\xfd\x34\x7b\x29\x14\xf5\x88\x11\x39\x88\x43\x9c\x07\x75\xbe\xe4\x3b\xe8\xcd\x8a\xac\x16\x83\x76\x14\x83\xf6\xb6\x62\x99\xb2\x2c\x8e\xc9\x20\x27\xf6\x80\x38\xe5\x8f\x4e\x65\xe3\xfe\x55\x94\x7c\xd7\x85\x66\xd3\x13\x5a\x68\x93\x27\x00\x07\x53\xcb\xd9\x90\xf2\x02\x5d\xed\x2a\xef\x13\x4a\x7d\x14\x91\x4f\x1d\xf8\x9f\x50\x79\x12\x2f\x8e\x74\xef\x7d\xfe\xae\xee\x79\xff\x56\x1b\x34\x21\x0c\xe2\x60\x7f\xd6\x81\xef\x7b\x37\x8a\x1c\xf1\x8e\xdf\x73\x3c\x2a\xe5\xda\x6f\x7f\xb8\x9f\xe0\xfe\xa2\xcd\xed\x21\x19\x3f\x76\xe7\x20\x7a\x23\x38\x0b\x25\x86\x00\x1c\xfc\x8b\x97\xd1\xc7\x8d\xc8\xc9\xc2\xbe\x35\x31\x7a\x26\x3e\xf4\xde\x1d\xca\xcd\x32\x99\x90\x52\x07\x3f\x95\x8a\x62\x39\xee\x00\x6d\xa8\xb8\x05\xc4\xc1\x7e\xed\xdb\xbb\x53\x4f\x92\x5a\x5a\x15\xcf\x3e\x14\xee\x8f\x78\x09\xf3\xa2\x8a\x5b\xe6\x2c\x84\x17\xd9\x11\x65\x7a\xb0\x3d\xda\x7f\x41\x83\x08\x0b\xe2\x60\x6a\xb1\xa7\xb0\x09\xf1\x6d\xa1\x8c\x8a\x19\xa3\x55\x3c\x21\x64\xc3\x69\x5c\x79\x1b\x1e\xca\x46\x34\x30\x5b\xfa\xb0\x53\x45\x46\x86\x09\xa1\x16\x88\x43\xa8\x75\xbe\xe4\x3b\x68\x04\x85\xac\x16\x0b\x4a\x1f\xa6\x53\xe6\x77\x61\xeb\x87\x61\xa6\xeb\x0d\x23\xf6\x5c\x47\x42\x57\x09\x66\xd2\xf4\x32\xfc\xfb\x5c\x2c\xc4\x02\xa1\xfd\xc3\x40\x1c\x4c\xad\xb5\x69\x5d\x87\x34\xf3\x7b\x8c\x12\xd1\xc1\xdc\x5c\x79\x4a\x81\x29\x49\xe2\x34\x9f\xb3\xc5\x5d\x26\xd1\xcd\x76\xd2\x43\xf1\xa1\x22\x1c\x10\x07\xfb\xb3\xec\xa7\x02\x68\xd6\xa2\x93\x98\xda\x14\xa7\x9c\xa8\x33\x9e\xbf\xd0\x95\x2f\x13\xb8\xa9\x19\xc4\x29\x4e\x7a\x92\xfa\xcc\x40\x08\x0a\x0b\xe2\xe0\x75\x53\x4c\xf1\xd1\xde\x7e\x61\x0c\x64\x37\x3e\x90\x3c\xcb\x2b\x90\x60\x1f\x3b\x23\x58\x2f\xa7\x62\x9c\x18\x24\x32\x4a\xab\x92\x82\x32\xa4\x20\x0e\xf6\x6b\xa7\xcb\x5d\x99\x47\xea\xe5\x55\x9a\xbb\x1e\x2b\x0f\xde\x9b\xf7\x17\x99\x5b\xfc\xf0\x6e\xfc\xc4\xf6\x53\xea\x26\x7d\x54\xe4\xe4\x1e\x22\x2c\x88\x83\xa9\x85\xd3\x21\x3b\x76\x4d\xe2\x98\xe1\x99\xf9\x45\x81\xa4\xb1\xd6\x7a\x97\xe5\xe7\x1b\x85\xde\x0a\x23\x4c\xf2\x64\x38\x8c\x67\x06\x85\x08\xb5\x40\x1c\x42\xad\xf3\x25\xdf\x41\x23\x65\x64\xb5\xfa\x44\xef\x65\x2f\x0c\x54\x04\x85\x37\x1c\x2a\x14\x63\x33\xfd\x7e\x5b\xa3\x47\x8c\xd7\xb6\x35\x74\xea\x27\x70\x55\x91\x78\x01\xda\xfa\x11\xc4\xc1\xd4\x12\x78\xff\x3c\xc9\xe6\x9b\xc3\xb5\xba\x2f\x67\x2c\x03\x07\x79\x17\x85\x30\x22\x19\x95\xe9\xb9\xbe\xb6\x0b\x35\xc6\x06\xb4\x11\xd2\x21\xc2\x82\x38\x78\x1a\x8b\xd2\x48\x24\x8a\xf3\x25\xeb\x6d\xb6\xfb\x64\xa9\xc2\x9f\x2f\x7f\xe4\x41\xcb\xe5\x5b\xcb\x0c\xad\x39\xa3\xee\x60\x0f\xbe\x06\xad\x0d\x05\x71\xb0\x46\x20\x17\x8f\x3b\x18\x68\x16\x75\xe1\xfd\x16\x59\x78\x27\xe5\x12\xfb\xe5\x9a\xdf\x3a\x95\xfd\x32\x0b\xf1\x0b\x06\xaa\x38\x8d\xc1\xd0\x66\x24\x20\x0e\xf6\x6b\x49\x0e\x39\x3a\xff\xec\x07\x45\x56\xf6\xb1\x2a\x92\xe1\xf4\xb6\x2b\x84\x2f\x9e\xd2\x93\xca\x62\x70\x48\xd3\x93\x51\xd2\x5b\x88\x41\xab\x54\x00\x1c\x4c\xad\x47\xc3\x05\x5d\x63\xa5\x17\xdf\x7b\xd2\x26\x0a\x93\x76\xdd\x56\x8c\xef\x72\x42\x93\x51\x24\xa2\xff\x9a\x7b\x7f\xea\xa4\xb5\x4e\x18\xa1\x16\x88\x43\xa8\x75\xbe\xe4\x3b\xe8\x8b\x08\x59\x2d\x69\xb4\xea\xd2\xe7\x58\xfc\x33\xbf\x28\x95\xfc\xa3\x83\xf7\xbb\xb0\x7e\x3e\x91\xb9\xb0\xfc\xb2\x76\xfa\x82\x20\xaf\xfc\xc3\xce\x14\x68\xf2\x17\xc0\xc1\xd4\xe2\x9a\xfa\x58\x30\xd3\x16\x48\xfd\x55\x91\xb5\x87\xfe\x7b\xc3\xbd\x85\x8b\xbf\x35\x4c\x33\x70\xd7\x86\x9f\xda\xf4\x8d\x8f\xcc\x43\xe9\x6c\x10\x07\xfb\xb3\xea\xd3\x69\x75\xdc\x8a\x55\xe6\xd0\x9f\xec\x06\xda\x70\x7a\xbc\x2d\xa8\x3c\xe3\xe4\x27\xf3\x7e\x52\xfb\x63\x1e\xd5\xb5\x74\x1e\xda\xc7\x19\xc4\xc1\x1a\xc1\x3c\x96\xf6\xf1\x7c\x74\xe0\xc7\x1f\xd3\xdf\x0c\x64\x0b\xdb\x2e\x0a\x34\x04\x25\xcd\x70\x45\x5f\x67\x21\xe6\xf8\xc5\xf1\x29\x02\xca\x92\x83\x38\xd8\xaf\x1d\x31\x54\x90\x62\xff\x33\x2d\x3b\x38\x2f\x89\xc7\xb4\xde\xfd\xcd\xc3\x34\x6d\xd5\xda\xa9\xf6\x8e\x29\xaa\x8a\xe6\x73\x23\xcc\xff\x6f\xa1\x3c\x80\x83\xa9\x35\x4e\xd9\x59\xf7\xf6\x08\xb3\xc4\x71\x4a\xe6\x8f\xe3\x63\x07\x47\x1a\x1d\xfb\xeb\x76\x4f\x5a\x0d\x9c\x63\x9e\x71\x9d\xe9\x0a\xed\x41\x9b\x12\x01\x38\x84\x5a\xe7\x4b\xbe\x83\xbe\x7c\x91\xd5\x9a\xfa\xfa\x5d\xee\x66\x54\xa4\x27\xb9\x81\xa1\x8b\xb1\xf4\xb4\xcc\xfd\x84\xc8\xd4\x96\x23\x6e\x7e\x01\x2b\xfc\xca\x3f\x9a\x85\x32\x88\xdb\x07\x71\x30\xb5\x84\x2f\x64\x4f\xc6\x54\xf3\xf9\x3d\x27\x0c\x73\x73\xbe\x8e\x79\x3f\xfe\x7d\x13\x3e\x6f\x45\x63\x43\x28\x26\x2b\xbe\xcb\x34\x3b\xd4\x61\x41\x1c\xec\xcf\x22\xd4\x58\xd0\x0c\xf7\xfa\x55\x93\x76\x7d\x61\x7a\x57\xee\x06\x61\x49\x42\x4d\x11\x9d\x35\x63\x83\xd7\xe0\x23\xde\x0e\xaf\xc7\xd0\x53\x0b\xc4\xc1\x1a\xc1\xd8\xee\x09\x0e\x3f\xe5\xdb\x8f\x03\x86\xcf\xdc\xb7\xc6\x89\x5e\x7f\xcf\x0f\xa4\x5e\x27\x2c\x48\xff\xdc\xb2\x70\x82\x9d\xe8\x02\x2d\xd7\x02\x71\xf0\xed\x75\xf7\xfa\x9f\x66\xeb\x3f\x7d\x1d\xed\x6a\x75\xe7\xb1\x23\x26\x05\xed\xe7\xdd\x52\x21\xf6\x25\xe2\xfb\xb9\x83\x3f\x3f\x66\xbc\xa5\x47\x84\x05\x71\x30\xb5\xf2\x82\x6a\x13\xba\xa8\x03\xaa\x56\x58\xe4\x5c\x9e\x6a\x36\x78\x0f\x46\x88\xaa\x62\x87\xb7\xfd\xa4\x38\x12\x7d\x7d\x63\x90\x9f\x19\xa1\x16\x88\x43\xa8\x75\xbe\xe4\x3b\x68\x86\x03\x59\x2d\x4f\xea\xb8\xfa\x52\x8d\x16\x8a\x1a\x9d\x0c\x07\x27\x03\xbb\xea\x6f\x25\xf9\xdb\xc4\xf8\x47\x56\xb2\xc2\x55\x4f\x12\x1f\x63\xe0\x23\x6e\x1f\xc4\xc1\xd4\x12\xec\x19\xa5\xc8\xf4\x36\x2c\x91\x26\x4b\x37\x9d\xdc\xc8\x9f\xf9\xa2\xcf\xbb\xd1\xb8\x9c\x37\xf2\x67\xc2\xb1\x02\xa7\x2f\xac\x1a\x11\x16\xc4\xc1\xfe\x2c\x85\x17\xd2\x16\xc5\xbf\x55\x28\x97\x8e\x8c\x37\xfd\x75\xbe\x7b\xb0\x92\x16\xfc\xa2\xc5\x0e\x26\x24\x3d\x38\x70\x17\xea\x91\x84\xce\xe0\x05\x71\xf0\xc3\xde\x79\x55\xc6\x26\x79\xcc\x43\x88\x5e\x25\x8c\x06\x38\x89\x27\x54\xdc\xbc\x80\x6b\xcc\x4d\xfc\x44\x3d\xe7\x47\x51\x81\x14\x3d\x74\x66\x06\x88\x83\xfd\xda\x65\xa1\x9b\x8e\x47\xdd\x0f\xae\x59\xd2\xba\xa1\x3d\x53\x5f\xf4\x0f\x32\xed\xf1\x22\x11\x0c\x56\xad\xc6\x51\x5b\x9c\x14\x62\x81\xc6\x5a\x20\x0e\xa6\x96\xc5\xda\x8f\xd9\x9c\x8a\xd8\x19\x6b\x13\xfb\xe9\x4b\x1b\x95\x0f\x34\x73\x3a\x5f\x58\x3e\x27\x17\xde\x3e\xfc\xc8\x24\x1d\x1b\x0f\x55\xa3\x81\x38\x84\x5a\xe7\x4c\xbe\x83\xe6\xb0\xff\x49\xbe\x37\x22\x25\xdf\x03\x7c\x1e\x57\x0e\x45\x92\x7a\xeb\x85\xa7\x90\x33\x17\x2d\x9b\xcd\x5d\xf7\xc8\x49\xbb\x2d\x79\x84\xe1\xea\xf3\xf4\x4f\xf9\xbc\xc6\xdf\xcf\xf4\x21\x25\xdf\xdb\xcc\x57\xa9\x89\xb1\xfd\x87\x71\x5b\x3f\x15\xce\x51\xdb\x28\xa4\xa3\x7c\x38\x1b\xf8\xe1\x21\x77\x3c\x9a\x6d\x74\xc0\x6b\x37\xf2\xdf\xcc\xf4\x81\x6e\x0c\xb9\xb7\x75\x63\x14\x51\x85\xbf\x10\x20\x56\x94\x0a\x75\xcb\x1a\x16\xbb\x2f\x98\xf7\xc5\xbf\xbc\xcc\x4f\xf9\xf4\x88\xc1\xf4\x9a\x1f\x31\xb4\x98\x1b\xc4\xc1\x7a\xdb\x51\xd6\x1e\x0b\xd9\x9d\x9b\x6c\x83\xae\x7b\x76\x1f\xe2\x09\x9e\x50\xd2\x53\xf1\xb0\x4a\x3c\x39\x75\xa8\x68\x7d\x89\xff\xb9\x0e\xda\x91\x01\xc4\xc1\xfc\x4d\xaa\xcc\x93\x6f\x70\x64\x29\xd8\x98\xb8\xe2\x25\x97\x3f\x20\x1c\x23\x3d\x67\x38\x26\x84\xc6\xbd\x75\x8a\x3d\x70\xf8\x4c\x04\xfa\xba\x05\x71\xf0\x3d\xb2\x33\xf9\xae\x87\x52\x71\x5d\xc0\x64\x25\xed\x6c\x51\xc7\xcb\x2e\x0a\x11\xfa\x7c\x66\xdc\xf6\x0e\x8b\x28\xfd\x88\xce\xd3\x04\x3a\xeb\x01\xc4\xc1\x7e\xad\xa9\x8a\x7e\x52\x8f\x03\x0d\x1f\x1e\x91\x9b\xdf\x43\xcd\x86\xe4\xfd\x9a\xfe\x4b\xa1\xb3\x91\xd8\x4b\x31\xa9\xcd\xdb\x7a\x49\xd0\x7c\x0c\x88\x83\xf5\xb6\x41\x8b\x5c\x6d\x73\x8e\xca\xfe\x6d\xea\x07\x45\x2c\xa2\x73\xea\xeb\x52\xba\x78\xe5\xfb\x17\x4c\xa5\xf0\x36\xb6\xb3\x5e\x6d\x9d\x22\x7a\x1b\x88\x43\xf4\xb6\xf3\x25\xdf\x41\x02\x23\xab\xf5\xd2\x23\x30\xfa\xfb\x1d\x12\x3d\xca\x5a\x5c\x42\x94\xa2\x28\x7b\xfc\xd0\xd7\x24\xf5\xd7\x4c\xa3\x36\x06\xba\x68\x6d\x63\x8a\xa0\x74\x36\x88\x83\xa9\x35\x39\x92\x54\xd7\x71\x43\x3f\xba\xb4\x49\x0b\x4b\x42\xe6\x98\x5d\x57\xc4\x50\x34\x6c\x7d\xe4\x7e\xda\xce\x4f\x3a\xdb\xa3\x12\xa8\x10\x1e\xc4\xc1\xfe\xac\xba\x15\x41\x29\xaa\x9e\x86\x69\x27\xec\x00\x2d\x52\xa5\x76\x0d\x79\xa3\xf4\x8c\xe7\xb6\x27\xdc\x4e\x36\xaf\x96\xee\x32\x5a\x40\xe7\xf4\x83\x38\x58\x23\x58\xc9\xa2\xda\xe3\xee\x7e\xfc\xfa\x63\x51\x63\xfe\xf7\xb2\xce\x03\x3d\xc3\xa1\x17\x2d\x43\xe3\x0d\xac\x7e\x11\x45\xe2\xa7\x16\xd0\xc2\x30\x10\x07\xfb\xb5\x16\xcf\xf1\xd2\xa3\xc5\x5a\x46\x09\x42\x94\x4c\x1a\x0a\xcf\xa8\x1e\x7c\x7b\xa6\x72\x56\xc5\xaa\xf1\x38\xdf\x93\x87\xef\xcd\x2b\xa8\xbe\x1e\xc4\xc1\xd4\x32\x73\xbf\xa5\xb9\x68\xfc\xc7\x71\xe0\x53\x5c\xc3\xeb\x97\xc2\x8f\xc8\xe4\x50\x3e\x50\x67\x38\x50\x74\x3a\xf7\xad\x17\x32\xed\x65\x20\xd4\x02\x71\x08\xb5\xce\x97\x7c\x07\xe5\x45\xff\xc7\x79\x09\x8c\x12\x8e\x98\xdf\xf8\xde\x4b\x2c\xac\xda\x25\xf1\xde\x4b\x11\x90\xd4\x78\x3d\xe5\x93\x6f\x56\xa8\x24\xf4\xa6\xda\x42\xe2\x3d\xb4\x4f\x00\x80\x83\xa9\x75\xe3\x80\xb3\x76\x3a\x97\xba\x39\x9d\x63\x66\x40\x8f\xa4\x46\x5f\x63\xc5\x66\x71\x66\x51\x72\x85\x4e\x3e\xe0\xa6\x0e\xea\x0c\xf4\xad\x00\xe2\x60\x7f\xd6\x62\x0f\x96\xb9\x81\xac\x50\xc4\xec\xb1\x35\x1f\xeb\x12\x9d\x47\x2f\x59\x1b\xfa\xc1\x83\x46\x42\xb1\xe7\x29\xa3\xef\x44\x1f\x42\xe5\x22\x20\x0e\xd6\x08\x6d\x07\x06\xe6\x27\xa3\x7a\x71\x04\x15\x16\x1c\x29\xb5\x7a\xad\x35\x6b\xad\x8a\xd6\x65\x4e\xad\x01\x47\x83\x69\x5f\x30\xf8\xa0\xef\x30\x10\x07\xfb\xb5\x1c\x45\x3b\xf5\x53\x4d\xb7\xcc\xc2\xf1\x89\x7c\x2e\xec\x3b\xe9\xee\xab\x45\x32\x0e\xd1\x1d\xe0\xfe\xc8\xa6\x1e\x18\x2d\x1d\x80\xe6\x3b\x41\x1c\x7c\x16\x19\xb4\x50\x1e\x91\xf6\x8e\xc4\x65\x12\xab\x3f\x16\xd3\x49\x25\xd2\xd0\x2b\x6e\x27\xca\x70\xce\xf1\xad\xb5\xbe\xac\xc1\x31\x36\xc4\x4d\x27\xbb\x48\xa2\xfc\xef\xe4\xbb\x57\xc6\x60\x54\x81\x49\xd0\xc6\xc9\xf1\xda\xe5\xc0\xbc\x14\xea\xaa\x94\xd9\x14\x2f\xe6\xe2\x64\x79\xe9\xc4\x61\x25\x69\x75\xee\x7f\xbf\x91\x72\x2a\x8b\xfa\xb4\x98\x97\xc2\x04\x0e\xac\x48\xd6\x88\x13\xe5\xab\x5a\xbf\xb1\x1b\x4c\x74\xd9\x79\x8d\xdd\xf8\xee\x5d\xd0\x0b\x4b\xbe\x83\x22\x23\x27\xdf\x95\xda\xbb\x3f\x48\xda\x72\x8b\x46\x77\x30\xb3\xf7\xa5\x53\x07\x32\x94\x58\xa0\xe6\x39\x08\xfc\x4a\x0d\x9a\xda\x67\x35\x3c\xbc\xf5\xef\x99\xb4\x62\x35\x9e\xf2\xb8\xe1\x7e\xfb\xf4\x4c\xdf\x44\x63\x1d\x42\x25\xf5\x4b\x41\xe2\xff\x0f\x6b\x67\x19\x95\xd5\xf3\xbd\x7d\xba\x4b\x90\x10\x50\x4a\x52\x10\x10\x01\x29\xa5\x53\x40\x09\x01\xe9\x46\x4a\xa4\xa5\x1b\xe9\x6e\x45\x42\x42\x04\x69\x15\x49\x41\x42\xba\xbb\x15\x29\x49\x01\x05\x44\x9e\x57\xe7\xac\xef\x73\xf8\xaf\x35\xac\xe5\xef\xfd\x67\xed\x39\xb3\xef\x6b\xee\x33\x67\xae\x99\xd9\x61\x6a\x75\x7b\x4c\x1b\x22\x82\x6e\xdc\xcb\xb0\xf9\x0e\x8a\x09\x55\x94\x57\x40\xcc\x36\x42\xca\xd1\x86\x63\xff\x66\x28\x27\x6b\xcc\x1c\xf8\x15\xcb\x64\xd8\xdb\x8e\x06\xde\xe7\xa0\xa2\xbc\x21\x1d\xe9\xb6\xe6\x45\x56\xfb\xcf\x13\x1c\x14\xfe\x33\x85\xcf\x4f\xee\x55\x59\x65\xcf\xbc\x34\x7e\x16\xc6\x41\xe1\x3e\xa2\xd4\x99\x59\x54\xe4\xdb\x31\xeb\xb5\x24\x52\xeb\xf9\xdb\xcd\xfc\xf5\xbf\x37\x79\x1f\xd9\x24\x8a\xe2\x2f\xee\x8f\x17\x0b\xdd\x71\x1b\x5d\x96\x3b\x72\x9d\xbd\x7f\xbb\x8c\x25\xbf\x1b\x56\xfd\x28\xa0\xdd\xac\x1e\x74\xf3\x97\xda\xbf\x37\xa9\x8f\x6c\xd2\x4c\xbf\xbe\xc7\x8e\xf1\xa5\x13\x69\x26\xf9\x5b\xbb\x2a\x4e\xb9\x8e\xfe\xab\xfe\x9e\xf4\x39\x79\x11\x9c\x4f\x98\x34\xf3\xa2\x27\xfe\xbd\xc9\xa7\xc8\x26\x47\x51\xad\x8e\x95\x3a\x82\xa9\x15\x2d\xf0\xdc\xf9\xee\x3a\x57\x4f\x9f\x90\x18\xb7\x17\xd3\x7f\x26\x8f\xc0\xdc\xa2\xeb\xfa\xf5\xee\xdf\x9b\x4c\x42\x36\xc9\x15\xaa\x90\x6b\x72\x22\xc7\xe9\x9e\xd2\x3e\x90\x40\x29\x17\x1d\xe4\x4a\x5d\x94\x15\x85\xd3\xe1\x77\xbf\xce\xc1\xf1\x5e\xe1\xbf\x5f\x8c\x8f\x52\x8e\x6c\x92\xfc\x6f\xee\x17\xbf\x9f\x5f\xe7\xc8\x42\x5c\x1e\x17\xed\xe1\x4c\xa2\xf3\x0f\xff\xe1\x1a\x95\xb7\xb2\xa0\xee\x29\x22\xea\x52\x51\xfa\xf7\x26\xeb\x91\x4d\x7e\x78\x7b\xa7\xda\x91\xa8\x13\xf5\x0b\x21\xb7\x52\x4c\xf4\xd3\x89\x42\x39\x52\x5c\x47\xde\xec\x0b\x89\x9f\x67\x92\x4a\xb9\xd4\x75\xfe\x37\x53\x72\xd0\x50\x3c\xfb\x72\xab\xb0\x43\x1f\xa9\xbb\x2b\xf3\xba\x2d\x21\x2a\x41\xb9\x60\x5a\x3e\x7a\x9d\xd7\xe8\xde\x06\x77\x4a\x3e\xb1\xaa\x76\x51\xcb\x08\x5c\x38\x14\xc4\x21\x0b\x06\xf2\xf4\xf6\x85\x2b\x92\x96\xd2\x7e\x27\x29\x1c\xfc\xed\x30\x1f\xf2\x5b\x48\x91\x66\x50\x3e\xbd\xe7\x33\xce\x56\xd7\x6c\x9b\x31\x3c\xc1\x01\x70\x88\xd7\xc5\x06\xeb\xfe\x41\x90\xab\x31\x01\x91\x6b\x5f\x6b\xc2\x60\xa5\x26\xc5\xc5\xa1\x88\xbd\x7e\x4b\x4d\x67\xf4\xa7\xbb\xee\x69\x5f\xe1\x85\x30\x10\x87\x3c\xdd\x71\x40\xa5\x50\x8b\xb6\x79\x7c\xe1\x47\x80\x9b\x39\x5e\xa8\x75\xc3\x65\x32\xa9\x28\xbf\x22\x1e\xc5\xd0\x72\xbb\xf6\xb5\x20\xf8\xda\x4c\x10\x87\xb4\x48\x25\x02\xf8\x7c\x6e\xdd\xac\xc4\x8f\x0f\x8a\x54\x28\xf2\x25\x2f\x8a\x0d\xe8\x19\xaf\x0c\xb9\xf1\x51\x5d\x6e\x9b\x6a\x6f\x15\xde\xb5\x07\xe2\x10\xb9\xdd\x2b\xa3\xa3\xb4\xde\x77\xce\x29\x20\xdd\x28\xbd\x10\xb2\xcd\x19\xf1\x5a\x58\x33\x97\x4f\xd1\x29\x6a\xbd\x64\x56\x9b\xde\xfa\x05\x64\xbe\x83\x38\xa8\xa2\xbc\xc2\xb9\x0a\xe8\x02\xfe\x71\xcf\x2a\xcb\xb5\x55\x8a\xe1\x30\x96\x71\x62\x3f\xec\x72\xa1\xb4\x68\xb4\x44\x2b\x35\x35\x1f\xd9\xc2\x6d\x4d\xfe\x22\x86\x15\x4d\xf3\x29\xf8\xb2\x40\x10\x87\xe8\x3d\xfe\xfd\x80\x37\x01\xcc\x7a\x0e\x3e\x2a\xf1\x7b\x35\xa4\x32\xf9\x5d\xbb\x7d\x73\x09\x6f\x7f\x19\x13\x5f\x21\x7f\x54\xe1\x35\x02\x5f\x04\x04\xe2\x90\x77\x10\xc6\xaa\xd3\x79\xff\x26\x2c\xa9\xbc\xfe\xf4\x33\xa7\xf8\xf2\x86\xb9\xd3\xb6\xd9\xf5\x2e\x09\xfa\xcc\x28\x3b\x15\xdc\xb5\x9a\x5e\xd8\x78\x05\x70\xc8\x83\xb4\xe9\x5f\x18\x29\x37\x87\x46\x6b\x05\x03\xe3\x7c\x85\x58\x35\x98\x68\xef\x69\xca\xd2\x39\x64\xc8\xdd\x8c\xff\xab\x4d\xe5\x3c\x07\x1f\xa4\x05\x70\x88\xa7\xfd\x54\xc6\x4a\x93\x51\x7f\x83\xaf\xfc\x6b\xee\xed\x97\x7a\x9d\xfc\x96\x8b\xbc\x63\xbe\xda\xb9\x58\x63\xbf\xd0\x8e\xb7\xf3\x93\xb9\xa1\xb0\x20\x0e\x91\x5b\x9d\x59\x6e\xbc\x26\xf2\x95\xcf\x3e\xed\x77\xa2\x51\xcb\xee\x18\x48\x25\xf6\xeb\x6c\x3c\x2c\x4d\xab\x3a\x16\xbf\xee\xa2\xdc\xd0\x08\xcd\xc8\x41\x1c\x54\x66\x8a\xff\x5c\x33\x72\xd0\x9b\xf5\xac\xb4\xfc\xd8\x83\x2c\xa8\xd1\xaf\x85\x79\xb3\x51\x33\x5f\x22\xf1\xb1\x5d\x2f\xb6\xbe\x10\xe5\x13\x55\x33\xe6\x4b\x4b\x21\x47\x7c\x05\xfe\xd6\x05\x71\x88\xee\x1f\xdd\xe5\xa2\xad\xd0\x22\xfb\xc2\xf9\xaa\x0d\x25\xcc\xbc\x2b\x84\xe5\x79\x1b\x41\x56\xa5\xd8\x07\x9e\xb1\xbf\xab\x69\xdf\x95\xe1\xfb\x04\x40\x1c\xe2\xc7\xe2\xb9\xfa\xe3\xe0\x06\x9a\x57\xdb\x4a\x0b\xf9\x24\x13\xcf\xf4\xe5\x92\x3e\xc2\xe7\x8a\x51\xbc\xdf\xb2\x53\x99\x06\x63\xa4\xb3\x8b\xa1\xb0\x20\x0e\xb9\x8e\x10\x48\xf1\xd1\x99\xfd\xaf\x56\x12\xaa\xd9\x18\x23\x56\xe3\x2f\x9c\xc3\x1d\xf7\xce\x87\xb3\x77\x44\x93\x31\x3f\x37\xfe\xc2\x87\x77\xdb\x83\x38\xc4\xd3\x0e\x6c\x64\x57\xda\x95\xf6\x5e\x55\xf7\xce\xcd\x50\x3a\x30\xcf\xc4\x66\x69\x35\x99\x4d\x0a\x3d\xd1\x93\x6f\xde\x2c\x0f\x57\xf6\x80\x2d\x42\x00\x87\xc8\xad\xb2\x8e\x6c\x5e\xc0\x51\x30\x5e\x02\x87\x1f\xfb\xb8\xb5\xf9\x48\xcc\x8f\x32\xcb\x26\xd4\x3d\xae\x8a\x27\x78\x8f\x30\x53\xab\xe0\x02\x08\x20\x0e\x92\xd6\xfd\xf3\xed\xb4\x06\xcc\xa0\xfe\x0f\x69\x09\x90\x3f\x5c\xed\x52\xaa\x19\x34\x41\xc3\xd0\xda\xfe\x70\x5f\xd1\xd7\xcc\x54\xeb\x48\xbf\xd4\xad\xa0\xdf\xd7\x69\xc4\x1d\xae\xbb\x08\xe2\x90\x23\xcb\xdd\x64\x2c\x4d\xf8\xb8\x63\xae\x65\xd8\x9a\x44\xfd\xa5\x2c\xe1\x76\xa2\xb8\x09\xa1\xfc\x9f\x47\x1e\x9b\xd8\x1f\x8f\x9c\x33\xe0\x53\xcf\x00\x0e\xf1\x63\x19\x60\x89\x76\x33\x0c\x99\xf8\x6c\x2b\xc7\x49\xb3\xdf\xad\x1d\xb7\x78\xee\x30\xc0\x58\xa5\x8f\xce\x91\x2a\xbf\xc8\xf3\x85\x1a\xfe\xd8\x03\x71\x88\x24\x24\xd3\xe2\x11\xea\x2a\xbb\x9d\x26\xc6\xa3\x7a\x18\x8c\xdc\x1a\xbe\x87\x85\x7b\x1d\xc3\xc0\x6d\x32\x31\xe0\xc1\x35\xf6\xbf\xd4\xf0\xb1\x13\x10\x87\x78\xda\xf0\x19\x6e\x1b\x4e\xc2\xbd\x88\x0c\x51\xdd\xb1\x11\x87\x00\xf2\xa7\x6e\x31\x1c\xc3\x34\x7d\x68\x3f\xa9\xf6\x0b\x0f\x3f\x16\xf3\x41\x61\x41\x1c\xf2\x8d\xc0\xdd\xb1\x87\xde\x75\x7c\x2f\x41\xe1\xeb\xeb\x63\x09\x81\xae\x69\x7e\xe3\x0f\xc4\x52\xc9\x02\xbe\x82\x6e\x06\x8c\x53\x51\xfa\x90\xb4\x40\x1c\x24\x2d\xfd\x73\x49\x0b\x34\x53\x3e\x2b\xad\x71\xc2\xbf\x71\x74\x83\xb4\x82\x97\x26\x93\x09\xda\x0c\xe5\xf5\x58\x74\x9f\xb6\xd4\xb7\xec\x86\xce\x9b\x3c\x4d\x7e\xfd\xbe\xe3\x0f\xec\xe2\x01\x38\x44\xf7\x73\x97\xea\x2c\x13\x29\x9e\x06\xd4\x7a\x48\x70\x8d\xd8\x53\xdf\x0d\xd3\x42\xc9\xf6\xc8\xdf\xd6\xca\x89\xe3\x69\xc5\xe1\xf1\x86\x07\x2c\x88\x43\xae\x23\xbc\x24\xf5\xe6\xcf\x9b\x75\xb8\x10\x39\xfe\x4a\x32\xee\xa7\x21\x47\x88\x35\xb1\x48\x15\x9d\x66\xff\x7d\x1e\xb7\xd0\xb8\x3b\xf0\x5a\x2d\x88\x43\x24\x61\x56\x58\xec\x7a\x14\x6e\xd1\x17\x4e\xcc\xef\x5c\xef\xc4\xe2\x37\x0b\xd7\x5c\x15\xbe\x67\xd8\x17\xbe\xeb\xbe\xd7\xac\xe2\x20\xea\x0c\x85\x05\x71\x88\xa7\x1d\xbc\x8a\xe2\x86\x36\x70\x6c\xc7\xb6\x4f\x46\x86\x59\x66\x4e\x11\xeb\xc7\x91\xf5\xd9\xa9\xd3\xa8\x48\x73\xcd\xd6\xbd\x18\x15\x5e\xa3\x01\x71\x88\xdc\xce\x96\xf9\x87\x8a\x8a\x94\xa7\xf8\xa0\xe9\xa0\x4a\x71\xbd\x27\xce\xee\xf1\x77\xbe\x67\xa4\x7c\x57\x04\xed\xa4\xb3\xe7\xd2\x7c\x19\x5c\x51\x1e\xc0\x41\xd2\x7a\x7a\x2e\x69\x81\xbe\x88\xce\x4a\x8b\xb2\x99\x21\x7f\x21\x6e\xe8\xfa\x49\x48\x67\x73\xb6\xbb\xb2\xc2\x4d\xb7\x01\x54\x91\xc6\x83\xf5\x5b\x75\x74\x0e\x26\x8b\xa8\xef\xa0\xee\x83\x38\x44\xf7\x09\x51\x7e\x44\x87\x2a\xf4\x66\xe2\x38\xb7\x95\x98\xbe\x15\xbc\xc5\xdb\xf1\x9e\x3f\x93\x25\xac\xa2\xd9\xfa\xa6\x0c\xe3\x65\x3b\x69\xf8\xd4\x0d\x80\x43\xfc\x58\x22\xdd\x29\xd8\x9c\xba\x1c\xfa\xc3\x81\x76\xef\x8d\xb0\xf6\xeb\x37\x1f\x50\x51\x3c\x3c\xc1\x4f\x63\x18\x15\xfd\x96\xf9\x4d\x0e\xf6\x73\x41\x1c\x22\x09\xdf\x64\xa2\x5a\xd7\x5f\xce\xa6\x4a\xa1\x6a\xa6\xe3\x2d\xe9\xba\xdd\xbf\x17\xe5\x28\x5d\x9e\x8e\x19\x6a\x31\xa7\xe6\xf3\xd4\x08\xde\x96\x09\xe2\x10\x4f\x1b\x58\x9d\xce\x77\xdd\xfc\x28\xb1\x80\x97\x03\x65\xf6\x40\x2c\x52\xad\x60\xdc\xd1\x84\xcc\x83\x14\x35\x7b\x83\xe9\x03\x43\x3b\x2f\x14\x16\xc4\x21\x72\x6b\xae\x6f\xc1\x19\x68\x75\x8f\xf5\x4b\x7e\x6f\xd6\xf3\xd5\x0a\x3d\xf6\x1f\x7b\x98\x2e\x2f\xdc\x4e\xb3\xac\x56\x9e\xbf\x1d\x37\xa2\x82\xaf\x12\x07\x70\x90\xb4\x92\xce\x25\x2d\xd0\x97\xef\x59\x69\xcd\xdc\x74\xf4\x95\x93\x91\x6b\xed\x4a\x12\x0e\x89\x64\x1a\x40\xf9\x6e\x3a\x67\xd7\xf2\x32\x4c\xd3\x33\x46\xac\x91\xea\xf2\xe3\x63\x78\x05\x1c\xc0\x21\xba\x1f\x85\x76\x74\x29\x34\xeb\xa9\xb0\x8b\x80\x92\x51\xfd\x9e\xca\x29\x95\xa1\x49\x53\xb1\xca\x4f\x83\xbc\x4b\xc4\xaf\x12\xf2\x7f\xc3\x25\x3d\x41\x1c\x72\xbf\x33\x41\x84\xbb\x8a\xdf\x89\x51\xec\x46\xfd\x0b\xdd\x74\xc5\xb1\x5f\xb5\x5b\xfb\xcf\x45\x85\xc4\xf1\x1a\xa2\xb8\x4f\x85\x49\xe0\x81\x00\xe2\x90\xc7\x93\xdf\x13\xfb\xe1\x7e\x28\x0e\x1b\x5c\x4b\x36\xf1\x7b\xfc\x20\x24\x5c\x67\x94\xeb\x30\xea\x71\xa8\x8e\x59\x9d\xdf\x16\x66\x9f\x3a\xbc\x5d\x04\xc0\x21\x9e\xb6\xb3\xfd\x25\xa9\x7f\xb4\xfc\x4c\xab\x81\x2a\x69\x67\xc8\xbb\x66\x37\x6e\x9e\xab\xb6\x87\x8c\x86\x62\x43\xea\x0b\xd2\xe5\xeb\xcf\xe1\x0b\x2b\x00\x1c\x22\xb7\x7c\xdf\xeb\xdd\xd4\x23\x46\x34\xb9\x05\x5f\xf5\xce\xff\x9d\xae\x0c\x92\xc0\x92\x60\xb4\x74\xf1\xb9\xd8\x45\x95\xd5\x12\x98\x66\x0d\x49\x0b\xc4\x41\xd2\x2a\x3f\x97\xb4\x40\x2b\x1c\x67\xa5\x15\xd0\x9b\x5f\xb7\xf9\x73\x94\x98\x2e\xe6\x64\x51\x9a\xae\x2d\xd8\xeb\x83\xbe\xd8\x55\xba\x02\x45\xbf\xd4\x4c\x87\x38\x11\x43\x58\x5a\x20\x0e\x79\x81\x15\x56\xd2\xd5\x8c\xb7\xcf\xd6\xda\x48\xc8\x2b\xb1\x6f\xb4\xb0\xd4\x48\xaf\xf1\xaf\x68\xc6\x11\xf7\xb5\x34\xe0\xfe\xc4\x7a\x0c\x6f\xc0\x00\x71\x88\x1f\xeb\xa1\xf8\xc8\x97\xa9\x66\xe3\x4b\x0f\x83\xdf\xb7\x4d\xd8\x2d\xde\xe0\xfa\x86\x83\xca\x71\x41\x46\x16\x53\x21\xed\x69\x4c\x66\x2b\x0d\x7c\x68\x16\xc0\x21\x92\x10\x71\xa9\x28\xd6\x7e\xfd\x00\x3b\x82\xd0\x3d\xf0\x8d\x91\xd5\x1f\xfd\x39\x5a\xae\xd8\xe0\xf1\xc7\x5a\xc5\x21\x8d\xf3\x98\xf2\xb0\xb9\x02\xe2\x10\x4f\x9b\x79\xad\x49\x48\xe6\x2a\xb3\xad\x69\x09\xdf\x92\x99\x62\xd7\xa6\x63\x5a\xda\x70\xcd\x50\xd1\xa1\x0f\xd5\x2e\x2e\x83\x39\xf3\x27\x28\x2c\x88\x43\xe4\x96\x73\xdc\xd2\xbb\xd1\x97\x63\x87\xd1\xed\xf4\x55\x03\x1e\x8b\xb8\x5b\x53\xc9\xa8\xc8\xf8\x02\x73\xad\xa6\xb8\x65\x81\x63\xb2\x0c\x24\x2d\x10\x07\x49\xab\xfe\x7c\xe6\x3b\x68\x0d\x1b\xaa\x28\x3f\x81\x5c\x76\x2b\x33\x8d\x24\xe0\x2c\x9f\xa4\x2a\xed\xb4\xe8\x25\x34\x52\xaf\x5d\x3a\xb1\x6f\xe7\xba\xea\xde\xe2\x78\x95\x4f\x31\xb9\x2e\xf1\xdf\xaf\x48\x45\xd9\x3f\xb3\x9e\xf9\x6d\xd4\xeb\xae\x61\x44\xf4\xc6\x49\x5b\xe5\x69\xd3\x18\x51\x61\x04\x89\xb8\x65\xf7\x82\xc3\x1d\xda\x48\xe9\xa4\x1a\x4f\xfe\xff\xcd\x4a\x1f\xa8\x63\xff\xc7\x75\x71\xb4\x6a\x79\x34\xcc\xc5\x51\x3a\x59\xa4\xcd\xeb\x89\x5a\xe1\xfe\xd7\x4f\xff\x8c\xc7\x13\x37\x2b\x61\xb3\x90\x04\xc4\x7a\x9f\x42\x8a\x00\x71\x08\x45\x38\x61\x9c\x9c\x36\xb2\x16\x56\x0f\x2b\x93\x3a\x9a\x19\xbc\xae\x7f\x9a\xb0\xa6\x6b\x88\x21\x68\x56\x2f\xce\xb6\x6b\xc1\x7b\x7f\x0a\x0a\x0b\xe2\x10\xfa\xf5\x28\x20\xf4\x6d\x14\xfe\x63\x26\x60\x6b\xa3\x32\xf0\x49\x9e\x28\x05\x2b\xe2\x02\x65\x2e\xc1\x78\xde\xf8\x0d\x02\x17\xe2\xe7\xf0\x76\x27\x10\x87\x2c\xed\x16\x45\x91\x21\x72\xbb\xf0\x93\x5c\xbb\x20\x1a\xaa\xc2\x82\x75\x89\xcc\xcd\xc9\x83\x01\x7c\xf5\xed\xe6\x71\x67\x4d\x19\xfc\x7b\xf0\x85\x2b\x00\x0e\xf1\xb4\x2c\xf2\x2e\x91\x8f\x9f\x94\xb9\x2a\x6a\xa2\xfa\x70\x2f\xbe\xcc\x57\xb2\xe1\xce\xd6\x94\xfd\x71\xca\x3a\x99\xfc\x68\x8f\x39\x1f\x1b\xde\xb2\x0d\xe0\x10\xb9\xc5\xeb\x0f\xf9\x34\xde\x63\xf5\x28\x8b\x31\xe8\xd3\xd6\x07\xda\x10\x25\x12\x15\x46\xea\x37\x07\xfa\x68\x7e\x34\x6f\xab\xb6\x33\x06\xa1\xd1\x06\xe2\xa0\xd1\x36\x71\xbe\xe9\x27\x40\xc0\x67\xa5\xe5\x3c\x16\x30\x88\x51\xef\x30\x9a\xfe\x66\xee\xe2\xec\x4d\x3c\xa5\x78\xc2\x39\x97\x34\xdd\x30\xeb\xc6\x94\x0f\x3d\x96\xfc\xfb\xf0\xeb\x11\xc4\x21\xba\xdf\x16\x53\x59\x90\xe9\xcc\x49\xf9\x92\x90\xb9\x5c\xb5\x21\x61\x81\xe9\xe5\xd3\xfa\x6f\xb1\x89\x17\x19\x7c\x8d\x49\x84\x97\x27\xe0\xbd\x69\x20\x0e\xf1\x63\xad\xaf\xd2\xf6\x2d\x65\xd5\x44\x24\x0d\x1a\x9c\x7c\x1e\xce\x60\x76\x2c\x89\x4d\xfa\x5b\x33\x6e\xc4\xa6\xab\xaa\xb2\x2e\x74\xdf\x0c\x3e\x50\x0f\xe0\x10\x49\x78\x49\xf0\x68\x7f\xaa\x36\xa5\x2a\x82\x5a\x29\x05\xc5\x2f\x27\xc1\x94\x7f\x76\xb3\xe5\x2b\xe5\xef\x5c\xca\xf0\xe8\x69\xce\x09\x03\x28\x2c\x88\x43\x4e\x3f\xff\x64\xe2\x85\x49\x3e\x16\xcc\xfe\xe9\x2f\x6c\xf6\x6c\x6b\xf9\xb1\x8c\x6f\x4a\xa5\xaa\x03\x21\xe7\x48\x5e\xe8\x4a\x3d\x3f\x5c\x88\x0e\xc4\x21\x72\xdb\xe7\x7e\x60\x68\xbf\xe3\xe6\x33\x64\x61\xa8\xfa\x34\x60\xbd\x33\x7e\xab\xf3\xc3\xbe\xa9\x94\x36\x9e\xd6\xb7\x25\xb6\x7e\xcf\x7b\x90\xb4\x40\x1c\x24\xad\xfd\x73\x49\x0b\xe4\x8b\x9e\x95\xd6\x9f\x20\x22\xce\xe7\x54\x42\x76\x1b\xae\xdb\x15\x73\x86\xcb\x4d\x54\x7f\xc9\x4c\x5c\x3c\x55\xe7\xb2\x5e\x5e\xa5\xd4\xac\x72\x2b\x81\xba\x0f\xe2\x10\xdd\x27\x78\xa1\x4b\xeb\x39\x21\x1a\x78\xb2\x70\x13\x6d\xf8\x5e\x11\x57\xff\xba\x44\xf8\x05\xb4\xbe\x60\x54\x96\x1f\xe5\xf8\x66\x18\xf0\x4d\x84\x20\x0e\x39\xa1\x9b\x71\xdf\x36\x33\x22\x1c\x7b\x3f\xd8\x23\xcf\x8b\xf7\x45\xb1\x37\xfd\x7b\x98\x6c\xbd\x71\x6b\xf3\x2c\x0f\x5e\x9d\x80\x3a\x5c\x51\x1e\xc4\x21\x92\xf0\xe6\x62\x6f\x6b\x96\xd9\x93\xcb\xdf\xc2\x86\xe9\xae\xec\x54\x06\xa2\x51\x66\x49\x2e\x56\x84\xf4\x30\x34\xa4\x63\xdd\x3d\xb4\x4f\x84\xc2\x82\x38\xc4\xd3\x0e\xfd\xb5\x54\x78\x38\x65\x6a\xf8\x54\x24\x63\xb5\xe3\xf9\xb7\xd9\xad\xa2\xd7\xaf\x65\x7c\xc3\x9b\x05\x53\xc6\xf2\x8f\xbe\x1f\xc2\x6f\x04\x10\x87\xc8\xed\xb9\x4f\xbe\x33\x8a\xbf\x19\x50\xd3\x69\xd5\x6d\xab\x62\x30\xb3\xb5\xaa\xc9\xbd\x48\xf8\x6c\xd7\xa2\x24\xb2\xea\x05\xd7\x34\xf3\x13\x87\x05\x9d\xff\x9a\xef\x71\xb8\x73\x32\x32\x1b\x45\xfa\x3f\xc5\x87\x75\x2b\xcd\x84\xbd\x93\x36\x8d\xbe\x73\x0d\x05\x27\x4d\xa8\xfb\x9a\x24\xa3\x7d\xf9\xef\x55\xef\xbb\x47\x09\x95\x56\x74\x9e\x36\xb5\xa2\xdf\xde\xde\xfb\x31\xcb\x62\x44\xe9\xc4\xee\x99\x70\x37\x15\x77\xe8\xaa\x44\x90\x02\xb6\x2c\xc2\x7c\x07\x45\x3e\x6b\xbe\x0b\x6b\xb7\x57\x6f\xec\x77\xed\x8c\x7c\x77\x34\xab\x32\xb8\x7c\x9a\x3c\xbc\xe7\xef\xf9\x64\xe1\x72\xb4\x5f\xac\xde\x58\x80\xd3\x7f\x4f\x9b\xef\x70\x96\x6d\xd0\x55\xaf\xde\xa9\x7a\x5d\x2d\x7a\x81\x63\x7d\xd5\xe0\xa4\x85\x1e\xfb\x5a\x40\x6c\x5b\x55\x15\xf1\xd8\x68\x48\x3b\x6c\xbe\x83\x62\x42\x25\xe2\x91\xe6\x3b\x33\x8d\xdf\xf0\xa3\xfe\xfd\xaf\x53\x3c\x05\x33\x4b\x46\xe1\x34\x07\x82\x7a\x66\x8b\xf6\x91\xd7\x6d\xf4\x43\x6b\x9b\x9b\x09\x92\xff\x79\x82\x23\x7e\xc6\x7c\x1f\x95\x18\x31\xfd\xcb\xf1\xf6\xd7\x1c\xdd\xaa\xda\x0c\x7a\x96\xd7\x93\x8b\xcd\x77\x2f\xaf\x7a\x97\x7c\x23\xaa\x77\x18\xd7\x7e\x94\xfd\xef\x4d\x9e\x31\xdf\x89\xfa\x49\x2b\xaf\x70\x7d\x0f\xbb\xd4\x15\xc1\xd6\x97\x34\x95\x86\x12\xa9\xae\x55\x91\xf9\x71\xca\xa0\xc3\x82\x28\xf2\xae\x86\xf7\xbf\x37\x79\xc6\x7c\x57\xf4\xc5\xfe\x16\xc9\xb4\xdc\xf7\x91\x41\xca\x9d\x3d\x08\xf5\xd6\xdd\xf0\x20\xe9\x9f\xcf\xb0\x9e\x1d\x64\xf6\x6a\x78\x69\x68\x06\xfe\x7b\x93\x67\xcc\xf7\x59\x0d\xeb\xeb\xfc\x85\x42\xa8\x51\xb2\x75\xae\xd1\x3c\xc6\xcd\xdc\x12\x0e\x61\xfa\x95\x9b\x8d\x97\x49\xcd\x48\x5f\x17\x31\xce\xfd\x7b\x93\x67\xcc\xf7\xbc\xa7\xc7\x0a\x54\xe9\x47\x4e\x9e\x2d\xc7\x22\xf8\xd2\x87\x39\x81\x17\x02\x39\x30\xb4\x7e\xbf\xc6\x4d\xfb\x8b\x79\x7f\xc1\xaa\xee\xdf\x9b\x3c\x63\xbe\xdf\x19\xd4\x94\x2c\xf7\x5d\x46\x41\xc3\x59\xaa\xbe\x34\x58\x73\x7b\xfd\x43\xa1\x57\xf7\xf8\x45\x3b\x34\x3e\x3e\x61\x4f\x75\x3f\x82\x7f\x6f\xf2\x8c\xf9\x9e\xcf\x5b\xe3\x54\x9e\x99\x33\xa5\x7d\x71\x48\xc7\x84\xc3\xda\x6c\x5f\x57\xf2\xd5\xc3\x36\xde\x9e\x3a\x7e\xda\x32\x8c\x2e\x63\xae\xff\xcd\x94\x1c\x34\x14\xcf\xbe\xdc\x6e\x33\xf2\xe2\x18\x3a\x59\x69\xd3\xce\xa7\xa9\x77\xb5\x7d\x20\x8b\xd6\xc1\xc3\xb8\x22\x39\x7e\x6f\xce\x1a\x3d\x4a\xf9\x30\x07\xbe\x2c\x07\xc4\x21\xfe\x80\xf5\x9c\xda\x0c\x8d\x12\xd7\xa8\xf2\x12\x43\xaf\xcb\xb6\x29\x6b\x10\x0e\xec\x39\xf1\x06\x27\xaf\x4d\x10\x18\x16\x7c\x22\x7c\x1f\x02\x85\x05\x71\x88\xd7\x45\x6d\xa8\x54\x68\xee\xfe\xa5\xea\x3e\xde\x95\x98\x78\x62\xb5\x56\xaa\xaf\x7e\xf3\x6e\xe4\x96\x1c\x7e\x99\xec\x81\x7e\xdb\x86\x41\xf0\x11\x75\x00\x87\xdc\x59\x36\xdb\x1d\x9b\xf3\x3a\xd8\x35\xe3\x25\xf1\x9b\x22\xb2\xb9\xf7\xf8\x95\xb9\xbb\xb8\x83\xba\x13\xd2\x8d\xb6\x9c\x0a\xe4\x6c\x51\xf0\xce\x32\x00\x17\x28\x41\xf2\xdf\xb0\xbe\x07\xe8\x23\x9a\xb3\x52\x0b\x5b\xe8\x4f\x84\xef\xd4\x63\xa7\x74\x0c\xb7\x2e\x6c\xf3\x0a\x31\xb4\x7f\x72\xda\x16\xb0\xbc\x0d\xfb\xc4\x20\x0e\xb9\xda\xde\xe2\xac\x80\xcb\xf3\xc3\x72\x29\x23\x28\x64\xd7\x98\x8e\x91\xe0\xde\x35\x94\xee\xe8\x3f\x71\x37\xdf\x10\x7c\x28\xfd\xbc\xb1\x08\x99\xef\x20\x0e\x2a\x11\x7f\x2e\xf3\x1d\xf4\x8f\x7b\x56\x59\xd8\xce\x2f\x52\x6c\x08\xa6\x5e\xfb\x94\x47\xfc\x94\xeb\xfe\xa0\x62\xd3\xfa\x8a\x58\xe1\xdb\xac\xd1\x1d\xb6\xeb\x77\x1c\xd5\xba\xe1\x1d\x0d\x20\x0e\xd1\xfb\xa6\xdf\x5d\x3e\xa4\xd3\x1f\x9f\xbe\xfe\x88\x95\xf5\xd4\xa4\xda\xd4\x4e\x89\x52\x9b\xa1\x2e\x09\x5d\xd1\x75\x3e\x89\x5e\xa6\x04\xbe\x38\x0c\xc4\x21\x94\xd5\x12\xb0\x31\xd2\x5b\xca\x3b\x66\xee\xd6\xe8\xe7\xfd\x39\xe4\x79\xcc\x67\x83\x00\x12\x73\xb2\x6f\x6d\x14\x72\xa1\x1a\x8e\xa2\xf0\xb1\x44\x10\x87\x48\x02\x2d\xfa\xcb\xec\xa1\x5d\x56\xb5\x2f\x71\x64\xb9\x95\xb1\x39\xc2\xd9\xb4\xee\xed\xfa\xcb\x25\xfd\x9b\x47\x45\x84\x4e\x11\xe9\xb6\x50\x58\x10\x87\x50\xd6\x7b\x89\x83\xe3\x87\xd8\x51\x45\xfd\xf5\x17\x53\x89\x55\x05\xfe\x4a\x3a\x53\x5d\x67\x30\x9b\x6b\x3c\x28\xd0\x7f\xa9\x9e\xf9\x18\xbe\xc9\x1c\xc4\x21\x72\x3b\x17\x47\x80\x93\xa3\x9d\x99\x1c\xf4\x1a\xcf\x90\xee\x83\x5c\x0f\x27\x76\x42\x88\xac\x10\x85\xfb\xab\x10\xf1\x36\xf6\x17\xee\x4a\xd0\x8c\x1c\xc4\x41\x75\xa3\xce\x67\xbe\x83\xde\xac\x67\xa5\xa5\x65\x94\xba\x2e\x3a\xaa\x17\xd5\x2f\xc9\xda\xf1\x8c\x2d\x38\x7a\x98\xa3\x7b\xaf\x8f\x05\xa3\xf7\x07\xdd\x61\xf4\xa8\x04\x66\x2b\xd4\x7d\x10\x87\xac\x1b\xa5\xfa\xdd\xa6\x77\x29\x5c\xb8\xd2\x24\xc5\xe4\x42\x61\xfb\xc4\xeb\xca\x8b\x97\xaa\x07\x4d\xab\xbc\x1b\xdb\x64\x9f\x3d\xc9\x80\x37\xf1\x83\x38\x84\xb4\x2e\xd1\xfc\x60\x62\x53\xf9\xf1\xfe\x5b\xcc\xeb\xc5\x47\x87\x93\x0d\xdf\x12\xa5\x8e\x9e\xda\xbc\x4e\xe4\x0d\xc2\x5f\xb3\x77\x0c\x84\x7f\x2c\x10\x87\x48\x42\xf1\x02\x36\x47\xe0\xab\xe8\x37\x9f\x13\x58\xa2\xde\xd5\x44\x95\x1b\xc7\x0a\x5d\x54\x27\xc3\xf5\x93\xaa\x0e\xbd\x56\x87\xde\x05\x9f\x1f\x04\x71\x08\x69\x75\x89\x6f\xf2\x5a\x34\xc4\xdc\xde\x9b\xf4\xe6\xa3\x7c\xf4\xf0\x85\xef\x82\xaa\x90\xa5\x73\x66\x31\xa1\xc3\xd1\x93\x56\xc6\x74\x78\xd8\x82\x38\xa4\xd7\x10\x90\x93\x32\xc5\xa7\x33\x7e\xa7\x40\x98\xf9\x2e\xa7\xbb\x86\xce\xf2\x0b\xef\x3b\x9f\xea\x6d\x98\xf7\xc8\x22\x0b\x0c\x77\x46\x61\xaf\x01\xc0\x41\xd2\x3a\x9f\xf9\x0e\x9a\x41\x9d\x95\x16\xc7\x5a\x93\x53\x1e\xc3\xf6\x7d\xe3\xf9\x8c\x86\x84\x67\x36\x8b\x9f\x69\x3f\x74\x5f\x0f\x33\xb1\x38\xa2\xa1\x31\xd4\xbb\xae\x43\x09\x75\x1f\xc4\x21\xba\xcf\xb4\x28\xd5\xe6\x26\x46\xf1\x88\x5a\x29\x75\x28\x2f\xb7\x69\xb4\x59\x63\xea\x47\x73\x39\xfe\xb1\x43\x63\xcb\x9a\x2f\x55\x20\x5c\x11\x17\xc4\x21\xa4\xe5\x76\x89\x81\x0a\xed\xc1\xa5\x9b\x05\x61\x96\x0f\x7f\x7d\x6a\x2a\x66\xf4\xb1\xed\x12\x91\xb8\xd1\x3e\xe9\x58\xee\xe4\x42\xf9\x1d\xde\x2a\x00\xe2\x10\x49\x58\x12\xb8\xbe\x45\xeb\xa1\xc7\x90\xe0\x1e\x3e\x25\x5e\xe4\xab\x5d\x97\xc7\xcf\xaa\x47\x7a\x28\x63\x25\x61\xc4\x78\xf4\x30\x16\xde\xdc\x02\xe2\x10\xd2\x22\xb4\x5c\x1c\x12\x7f\xc7\xac\x75\x2a\x8e\x15\x3f\xab\x17\x30\x2a\x4a\xbb\x4d\xd4\xb0\x30\xdb\x43\x90\x23\xfb\x76\x5e\xf0\x10\xbe\xb0\x02\xc4\x21\x72\xeb\x91\x5e\x56\x10\xe3\xbb\x70\xe4\x10\xdd\x90\xd8\x99\x2a\x4b\x52\x2f\x40\x4d\x4e\x6b\x86\xad\xd0\xbf\x7d\x57\x04\x2d\x3f\xe8\x22\x24\x2d\x10\x07\x49\xeb\x7c\xe6\x3b\x68\xa6\x7c\x56\x5a\x0e\x9b\x75\xfb\xd6\x5b\xaa\xab\xb5\x8a\x2f\x9f\x56\x3b\x6d\x3f\x61\x33\x14\x6f\x68\x8f\x42\xfd\x44\x5f\xab\xec\xe1\xc2\xf0\x2b\x15\xea\x3e\x88\x43\x74\xbf\xce\xbb\x88\xfa\x35\x96\xd6\xe2\xc2\x90\xac\x09\x4a\xd4\x02\x8d\xa5\x6e\xde\x13\x75\xdd\xaf\x3d\x5a\x5f\x25\xda\x13\x3f\x39\xc1\x57\x8e\x83\x38\xe4\xbf\x16\x21\x73\xa6\x65\x43\x28\xab\x88\x26\x4e\xbf\x8f\x74\x7c\x23\x45\xb9\xb1\x4f\x5f\xd8\x4f\xa9\x13\xa7\xb7\xaa\x94\xf1\x75\x77\xe1\x7f\x2d\x00\x87\x48\xc2\x84\xdc\xde\x01\xe6\xfb\xfa\x70\xc2\x77\x21\x35\xb7\xf6\x5d\xa2\xd3\xad\x47\x2f\x88\x5c\x08\x68\x93\x90\x61\x8a\x21\x5e\xc1\x83\x4f\xbe\x83\x38\x84\xb4\xba\xc5\x39\x4d\x8e\x3c\x1a\xec\x62\x7b\xe6\xa6\x09\xc9\xee\x44\xda\x50\x05\x7d\x34\x4e\x69\xd7\xfb\xae\xa2\x71\x89\xa3\xf5\x2d\x5c\xe1\x07\xc4\x21\x72\x9b\xff\xe3\x02\xe9\x43\x05\x8a\xe5\xb0\xd4\x7d\xb5\x05\x22\x37\x49\x6c\xaf\xb2\x82\x68\xd4\x6e\x21\x46\xf6\x90\xe0\xf0\x9d\x14\x78\x37\x1a\x88\x83\xa4\x75\x3e\xf3\x1d\xf4\x45\x74\x56\x5a\xa6\x17\xbe\xde\x38\xaa\xac\x2c\xde\x7c\xf5\x24\x32\x74\xf4\x59\x70\x1d\x79\xe4\x67\xe2\x82\x71\x4c\x29\x91\xd9\xf7\x34\x04\x6c\xf0\x7d\x1d\x20\x0e\xd1\xfd\xef\xcd\x98\x63\xdf\x16\x7f\x94\xa1\x53\x76\x47\x97\x99\xba\x4f\xec\x61\xe6\xdb\xa0\x5f\x7b\xc0\xe4\x4e\x7a\x94\xcc\x8e\xc1\xc6\x05\x6f\xc0\x00\x70\x08\x69\xed\x06\x54\x1b\xb0\x7c\x26\x5a\x1c\x1c\xcf\x1e\xa5\x4a\xab\x8a\x63\x17\x65\xc4\xb0\xa6\xd2\xdc\xc9\x3c\xc2\x3b\x7a\x10\x47\x05\x9f\x7a\x06\x71\x88\x24\x7c\x92\x7c\x6a\xb3\x15\xe2\xec\xb4\x22\xba\x6f\xfa\x91\x93\xe1\x53\xf1\xc0\x33\xba\x6c\x83\xb4\x60\x5e\xfb\x5e\x0b\xb6\xfc\x4a\xf8\xef\x05\xc4\x21\xa4\x95\x75\xd3\xa9\xbe\xdb\x37\x8d\x79\x91\xd2\xa3\x32\xaa\x2b\xe5\xd7\x05\x52\xaf\x8a\x89\x87\x83\xe3\x3c\x55\x64\x0f\x6e\x66\x6f\x27\x43\x61\x41\x1c\x22\xb7\xc2\x86\x2c\xf8\x63\xd8\xd6\x03\xa2\xd7\x26\x85\xc3\x85\x46\x88\x52\x64\x8f\x4e\xc2\xfe\xe0\xde\x77\x13\xd3\x08\xef\x2d\x50\x85\x2f\x70\x06\x71\x90\xb4\xce\x67\xbe\x83\xbe\x7c\xcf\x4a\xab\x5d\xb6\xb5\xb5\xd4\x7c\x5c\xa1\x69\x31\x1a\x7d\xeb\xa3\xf5\xc2\x25\xcb\x19\xf4\xc9\x4c\xd5\x9f\x58\x0f\x1a\x53\x93\xd0\x23\x42\xa1\xee\x83\x38\x44\xf7\x35\xf9\x18\x2d\x19\x89\x5f\xec\xd9\x7c\xb5\x79\x75\x22\x85\x56\x2d\x2d\xc7\xa0\x1a\x28\x20\xdd\x6e\xbf\x2c\x99\x6b\xfe\x81\x17\xde\xd2\x00\xe2\x10\xd2\xf2\x49\x8a\x30\xbf\xd9\xb9\x64\x7c\xbf\xae\x98\xa8\x7d\x47\x7b\xee\x48\xbc\xea\xd9\x69\xd2\x0f\xf5\x9c\x5b\xe1\x66\x6e\xda\xa4\xb0\xb4\x40\x1c\x22\x09\x49\xa4\xea\x42\x8f\x7f\x7f\x2c\xa9\x6c\xaa\xbe\x69\x1a\x46\x76\xca\x83\x52\xd7\xb9\xd6\x5e\x2f\x93\xa4\x72\x27\x98\x5d\x5d\x00\xbe\x0a\x06\xc4\x21\xa4\x75\x3a\x93\xb6\x34\x40\x86\x3b\xfe\x78\xfc\x06\x37\xf3\xdb\xb0\x63\xe6\x18\x94\xc6\x92\x91\xd0\x25\x97\x85\x7d\xdd\xf8\x45\x63\x78\x66\x08\xe2\x10\xb9\xfd\xb9\xbb\x23\x1f\x7d\x1c\x2a\x99\x1b\x48\x4c\x2f\x58\x68\x2b\xf0\x88\xaf\x56\xeb\xd4\xc2\xff\xba\x70\x13\xea\xf8\xe4\xa8\x3f\x21\x24\x2d\x10\x07\x49\xeb\x7c\xe6\x3b\x68\x85\xe3\xac\xb4\x6e\xd6\xef\xff\xec\xd8\xa5\x64\xde\x7b\x73\x12\xc7\xc5\xfc\x6d\x51\xe0\x03\xee\x1b\x01\x95\xfd\x54\x52\xa5\x91\xe0\x8c\xbe\x4b\xf0\xcd\x70\x20\x0e\xd1\xfd\x44\xb3\xb8\x3f\xcf\xd2\xd5\x6d\xa3\xdf\x0b\x2c\x2e\xab\xb4\x0e\x0b\x0d\x3d\xde\xa8\x53\x59\x6b\xed\x79\x81\x75\xe5\x5a\x05\x0d\x5c\xde\x05\xc4\x21\xaf\x82\x11\xd3\x93\xbf\xc0\x3e\x52\x14\x1d\x4b\x36\x58\x21\xcb\xfb\xc1\xfa\x15\xd6\x20\x13\x6b\xb6\xa8\x70\xe9\xaf\x2a\xcc\xe4\xda\x71\xf8\x2a\x18\x00\x87\x48\x82\x46\xc2\xa6\xf5\x67\xcc\x50\x16\x7d\x25\xda\x30\x5f\x3d\x72\xdd\x60\x0b\x2c\x95\xe5\xb9\xd2\x55\xa3\xa7\xe1\xbb\x19\xcb\x25\xe1\x50\x58\x10\x87\x90\x96\xbe\x29\x03\x4f\xb7\xa6\xc6\xa1\xec\xc1\xd7\xa3\xf0\x4b\x57\xa8\x79\x2b\x5a\x9d\x7d\x59\x8b\x77\x1c\xde\x62\xde\x2d\x09\xe4\xb2\x83\xef\x6a\x00\x70\x88\xdc\xba\x77\x04\x2f\x19\x4d\xe9\x8e\x6d\xa7\xef\x90\x44\x0b\xd5\x5a\xa9\x9a\x92\x50\x94\xbb\x2e\x18\x62\xbc\xba\xa3\x37\x5d\xfe\xec\x03\x24\x2d\x10\x07\x49\xeb\x9c\xe6\x3b\x68\x0d\x1b\x2a\x11\x7f\xc6\x7c\xa7\xaf\xf0\x10\x55\xc0\x60\xc8\x72\x0f\x7e\x3c\xb9\xd6\xa9\x86\xf7\xf5\xd7\xea\xd8\x2b\xed\x11\xae\xb2\x5c\xfa\xac\x45\xd4\xcd\x7f\x2f\x30\x29\x7e\xc6\x7c\x1f\xd8\x67\x09\x7e\x1c\x8b\x56\x68\xb4\x64\xfc\xda\x5d\xf8\xe6\x02\x2b\x71\x47\x19\x85\x45\x4a\x1b\xb7\x7a\x04\x3b\x9d\x04\x99\xf8\xff\x66\xa5\x0f\xd4\xb1\xb3\xa3\x4d\xf6\xd5\x49\x9b\x52\x76\xff\x15\x89\xa0\xd3\xea\x62\xe9\x88\x1b\xbe\x71\x31\xe4\x57\xba\x5e\xac\x0a\xdc\x9e\x93\x3e\x5a\x6e\xff\x00\x29\x02\xc4\x21\x14\x11\x61\x92\xc9\xbc\xe6\x73\xcf\x12\xdf\x91\x28\xf8\xf0\x64\xcd\xa7\xe8\xb2\xaa\xf0\xd3\xdf\x3c\x7b\xd2\xf4\x46\x83\xbf\x55\x05\x2a\xe1\xcd\x23\x00\x0e\x31\xda\xca\x7c\x22\xcd\x05\xbf\xff\x49\x0e\x1d\xf8\x26\x3a\xf5\xee\x64\xa2\x55\xb1\x8b\xc8\xf8\xe4\xa1\x5b\x36\x4f\xca\xcd\xb8\xc1\x55\x31\xf8\x42\x08\x00\x87\x2c\xfd\x24\x13\x90\xf9\xea\x09\x7b\x58\x14\xb1\x58\xca\xfe\xaf\x66\x56\xad\xe2\x02\xe3\xcd\x48\x4b\x91\xfb\x8a\x64\x4c\x05\x5f\x69\xe1\x0d\xb0\x20\x0e\x31\xda\xf6\x46\x9f\x4d\x57\x64\x12\xef\xd3\x3b\x5d\x13\xb5\xdc\x19\x6e\x0b\xa9\xa4\xf2\x92\x73\xca\xe9\x9a\x96\x9b\x1b\x2e\xfe\xb6\x05\xef\xad\x06\x71\xc8\x1d\xeb\x5b\x7d\x0b\xf5\xbe\xe9\x1f\xf6\xd9\x79\x9d\xf1\x3f\x3d\x9c\x0d\xb2\xe8\x88\x2c\x18\x14\x39\xd4\x1f\x6c\xb9\xa9\x3b\xd5\x63\x07\xef\x58\x07\x70\xd0\x68\x3b\x9f\xf9\x0e\x12\xf0\x59\x69\x11\x86\xe1\xa6\x0f\x1b\xe7\xaa\xad\x08\xb7\xfc\xc1\x99\x22\x12\x4d\xc5\xb3\xc5\xde\x8b\x16\x6f\xf1\xb9\x5c\xab\xe3\xb0\xe5\x09\xff\x58\x20\x0e\xd1\x7d\x56\xe3\x72\x1f\x45\xab\x6b\xae\x9b\x42\xc1\x54\x5e\xb5\x75\x6a\xa1\x63\x3b\xe1\xcc\x96\xdf\xd4\x1b\xe7\x49\x3d\x34\x15\x12\xe0\xe3\x3b\x20\x0e\x21\x2d\xed\x19\xd6\xf4\x2b\xf5\xb3\xc6\xf7\x5a\xc4\xbf\xf2\x1b\x0b\xcc\xd8\xb0\x84\x36\xfe\x94\xa3\x16\xa1\x9a\x34\xf4\xe6\xe3\xad\xfd\x0b\x85\x05\x71\x88\x24\xbc\x4d\xda\xf0\xcc\xc1\x69\x5c\x2d\x7a\x44\xdb\xa3\xf8\xd9\x89\xbb\xb7\x70\xe6\xc2\xd0\xc3\xee\xc5\x93\xa3\x23\xa2\xe8\x92\xe8\x04\x28\x2c\x88\x43\x48\x8b\x78\x6d\xc8\x20\xc7\x30\x4f\xcb\xec\xf8\xe7\x85\x0d\xfe\xc1\xcf\xc2\xd9\x28\xd7\x5a\xa5\x19\x8d\x16\x5a\xcd\x83\x36\x92\x4f\xe1\xb5\x2e\x10\x87\xc8\x6d\x29\xed\x17\xca\x2f\x8d\xb5\xfd\x7c\x4f\xbf\xcc\x55\x2e\x0f\x1c\x8c\xf4\x1d\x69\x0b\x79\x14\x24\x7e\xcc\xe8\x5d\x9c\x75\x28\xdc\x81\xa4\x05\xe2\x20\x69\x9d\xcf\x7c\x07\xf9\xa2\x67\xa5\x35\x12\x29\x38\xb2\xb5\x77\x05\x8f\xc6\x85\x29\x57\xe8\x1e\x77\x5f\xb0\x89\xbe\x9c\x27\x91\x52\xcc\xc0\x68\x2e\x9e\xc1\x93\x1d\x78\x39\x0a\xc4\x21\xba\x4f\x3e\xc6\x28\xbf\x77\xf9\xdd\x15\x97\x53\x27\xda\xf1\x47\xf9\x72\xac\xba\x53\x1f\xec\x55\x6f\xe1\x87\x96\xd8\x14\x74\x14\x07\xe4\x42\x61\x41\x1c\x42\x5a\x17\x88\x08\xbf\x7d\x38\xcd\x7a\xb9\x85\xbd\xee\x3b\x61\x53\x2d\x9f\xa1\x4c\xf4\xe2\x18\x6d\xc3\x9d\x15\x6f\xf0\x22\xda\xae\x41\x35\x14\x16\xc4\x21\x92\xf0\xa3\x36\x82\x03\xe7\xfd\xfd\xf6\x99\xc9\xdf\xbc\x8c\x5a\x78\x3a\x37\x9c\x3f\x7a\x39\xe0\x6c\xba\x98\x89\x3f\x7f\xbb\xfc\xc2\x1c\xbe\x44\x16\xc4\x21\xa4\xf5\x8c\x92\xd8\x54\x2e\x8d\x3f\x7a\x9a\x3c\x23\x55\x79\x96\xe4\xb3\xe0\x10\x7d\x16\x19\x87\xca\x3e\x7e\x07\x83\xf1\x61\x4c\x16\x5c\xf5\x08\xc4\x21\x72\x7b\xee\x93\xef\x9b\x93\x56\x8a\xce\x5f\x1a\x9f\xc7\x4d\x53\xa3\x0a\xde\x63\x21\x4a\x61\x79\x14\x82\x77\x71\x24\x77\xa8\x86\x33\xb5\xe9\xa2\xb7\xee\x7f\xcd\xf7\xea\x95\x72\xbe\x8f\x85\x15\x61\xbb\xd6\xf4\x9d\x2a\x97\xdd\x39\xfd\x4f\x7b\x06\x67\x8e\x4c\xf5\x3f\xc7\x10\xa4\x49\xcd\x3e\xc2\xfc\x0f\x2a\x17\x97\x77\xc1\x89\xcc\x7f\x47\xa2\x40\x7b\xb6\x6e\xa5\x36\xe6\xc9\x67\x61\x0b\x9b\xf0\xe2\x09\x94\x8e\x21\xf5\xde\xe1\xe1\x6f\x08\xf3\x1d\x14\xf9\xac\xf9\xfe\x88\x37\xb8\x6c\xdc\x13\xb3\xc4\x08\xab\x08\xe3\x5b\xe8\x74\xc5\x1c\xb1\xdd\x61\x84\x2f\xaf\x66\xaa\xd0\xc8\x25\xfa\x10\xc2\xd1\xff\xa0\xf7\x6a\x4a\x2e\xf9\x0a\x29\x97\xc4\x66\x35\xe0\xda\x86\xa1\x08\xf5\x6a\xb7\x60\xea\x77\xd8\x86\xe7\x37\xcf\x06\xfd\xa2\xd8\x99\x87\xcd\x77\x50\x4c\xa8\xe6\x3b\xd2\x7c\x27\xb8\xdf\xc4\xca\x87\x53\xf3\xa5\x56\x94\x84\xe3\x10\xe5\x79\x81\xeb\xf2\xca\x95\x68\xac\x4c\xd3\x8e\x05\x1c\xeb\x96\xf7\x71\x25\xff\x3c\xc1\xf1\x3b\x63\xbe\xc7\xb7\x12\xe0\x5e\xf0\x71\xde\x37\xcc\xab\xcf\x7d\x56\xa2\xd4\xce\xfa\x6a\x6d\xc7\x9f\x2c\x82\x41\xee\x93\x97\xb1\x59\x96\xdc\xe7\x7f\x6f\xf2\x8c\xf9\xfe\xaa\x1a\xd3\xe9\xf6\xa8\x79\x4f\x0e\x9b\xd6\x93\x69\x41\xbc\x07\xb2\x31\x3a\x0c\xc1\xa6\x24\x0a\x51\x34\xe8\xf3\xf8\x9a\x6b\x1b\xff\xde\xe4\x19\xf3\xbd\x4e\xc7\xb3\x61\xd5\xa3\x87\x81\x72\xb3\xfb\xd9\x7b\x9e\x24\x82\xf5\xeb\xcd\xdc\x0f\x7c\xc8\x4a\xbb\x71\xa6\x18\x13\xfa\xb9\xff\xfc\x7b\x93\x67\xcc\x77\x92\x53\x45\x4a\xf2\x95\x8c\xa0\x8b\xbc\x0e\xd2\xcc\x7c\x0e\x56\xfd\x11\x68\x81\x5f\x7a\xa9\x35\x3f\xd7\x2d\xdf\x34\xd4\x2a\xff\x1f\x34\x79\xc6\x7c\x27\x49\x63\xaf\x4e\xd3\x4b\xd9\x12\xc1\xf8\x70\x7b\x27\xc6\xa8\x88\x3e\xa8\xc7\x5a\x62\xa2\xfb\x15\x6b\xe5\x32\xd9\x8c\xa9\x3b\xeb\xbf\x37\x79\xc6\x7c\x2f\xe5\xb9\x9a\x6b\x73\xa4\xf5\x3c\x38\x5b\x3e\x8b\xfe\x19\x1d\x9f\x47\x04\x66\x94\x25\xb5\xcd\x44\xe5\x95\x54\x73\x5a\xa3\x5d\xfa\x7f\x6f\xf2\x8c\xf9\xde\x3c\x88\x1b\xff\x1c\x87\xc9\xaa\x30\xaf\xe1\x77\x89\xef\xfc\xad\x36\x94\x80\xfd\xca\x17\x66\x3d\x9c\x37\xf8\xb3\xac\x76\xeb\x50\xfe\x37\x53\x72\xd0\x50\x3c\xfb\x72\x5b\x10\x73\x14\xd6\x6f\xdf\xf6\x55\x2d\x51\xc2\x7f\xa9\x35\xc8\xf6\xe2\x9e\x89\xfe\x70\xc1\xd4\xa2\x99\x87\x36\xee\xdf\xc2\x54\x7a\xe8\x0f\x18\xc4\x21\xfe\x80\x5d\x46\x48\x6d\x0b\x48\x9a\x88\x98\xdf\xe9\x32\xe9\xf3\xe1\x3e\xb1\xfa\x54\x40\xbb\x3e\x18\x13\x7e\x91\x66\xe2\x42\xb5\x5d\x30\xbc\x5a\x01\xe2\x10\x2f\xb7\x23\xbb\xaf\x8d\xde\x84\x02\xf7\x5e\x8c\x35\x37\xcd\x2c\xbb\x5f\x1e\x50\x5e\x59\x7d\xe0\xba\x7b\xc5\x40\x52\xc1\x5b\xae\x27\x10\x2e\x25\x0f\xe2\x10\x49\xe0\x74\xc3\x88\xcf\x92\xbe\xee\x3c\xbe\x5b\x3a\x1f\x4c\x5c\x21\x79\xb3\xfc\x33\xd6\xe7\x6b\x29\x1c\x7c\x13\xcd\xa8\x75\xfe\x0c\x70\xd9\x54\x10\x87\x08\x3b\xdc\x8f\x76\x63\x76\xb8\xa5\xb7\xca\x2e\x6c\xb0\x84\xba\xf8\x65\xce\x6d\xdd\x24\xbf\x05\x1c\xe2\xfc\x40\xbf\x48\x9b\x2a\x0e\xf8\x56\x01\x10\x17\x28\x21\xfe\xff\x6d\x6c\x70\x7c\x62\xf7\xab\x62\xdf\x79\x04\x67\x58\xed\x51\xd8\xba\x9b\xc0\x03\x5d\x8a\xb9\xc7\x83\xef\xe2\xc7\xd9\xb2\x9c\x3e\xf9\xb6\x40\xe6\x3b\x88\x83\x6a\xbe\x9f\xcb\x7c\x07\xfd\xe3\x9e\x55\xd6\x50\x5b\x07\xd3\x60\x05\x5d\x09\x89\x94\x0d\xc7\xa2\x5c\x64\xe5\x8e\x71\x50\x82\xb7\x9d\x0c\x67\xec\x1b\xbb\x5a\xb1\xd2\x6c\xf8\x1c\x31\x88\x43\x28\xeb\x63\x7e\x60\xed\x51\x34\x37\xee\x9e\x55\x60\x35\x3d\x7d\x96\x99\xed\xcc\x56\x5f\x7c\x59\x02\x53\xda\x68\x4f\x1a\xdd\x35\x77\x78\x2d\x14\xc4\x21\x94\x35\xb5\xff\xc7\xca\xed\x9e\x27\x6d\xc2\x03\xdc\x93\x2c\x83\x68\xfa\x3d\x72\xdf\xef\xa8\x93\x7f\xd9\x99\x36\x6d\xb5\xa3\x3c\x65\x61\xbf\x09\xc4\x21\x92\x40\x9a\xcd\x7f\x44\xd4\xad\xc3\x8b\xe6\x60\xe8\x55\x55\xcb\xb9\x5d\x24\x95\xb6\xda\x42\x82\xa3\xa6\x32\x62\xc6\x63\x31\x4d\x0e\x1f\xf0\x01\x71\x88\xb0\x76\x18\x2a\x16\x17\x7f\x87\x53\x2c\x91\x66\x3c\x64\xd7\xb6\x92\xd7\x4e\xf0\xfc\x75\xb2\x2b\xec\x77\xab\xca\xec\xd7\x4b\xa2\xbc\x48\x28\x2c\x88\x43\x28\xeb\x52\x46\xee\x97\x03\xe6\x61\xd4\x7c\x95\xb5\xbb\xfe\xec\x76\x46\xd4\x77\x51\x4c\xe6\x66\xeb\x77\x58\xfa\xf0\xb2\xfa\x7b\x39\x46\xa0\x19\x39\x88\x83\x0a\x41\x9d\xcf\x7c\x07\xbd\x59\xcf\x4a\x0b\x35\xb2\xfb\xaf\xed\x81\xbc\x85\x29\x03\x6d\xcc\x43\xa1\xde\x4b\xc9\xc3\x19\x62\x6c\xc6\x73\x4f\xc5\x7a\xb5\xba\xac\x0b\xe2\x1b\xa1\xee\x83\x38\x84\xb4\xd2\x49\x3a\x6a\x57\xfb\x48\x85\x5a\x79\x7e\xee\x5c\x69\xf9\xfb\x7e\x90\x88\x0a\xbb\xed\x86\x8b\xc7\x2d\x83\xea\x24\x22\x42\x3d\x78\x5b\x3c\x88\x43\x48\xab\xc3\x6a\x82\x6e\xd5\xc7\x2a\x74\xd1\x5a\x02\xe5\xbb\xe0\x91\xf7\xd4\xd4\x26\xde\x9e\xeb\x67\x0a\xf7\x69\x1d\x29\x5e\xe1\x25\xf8\x24\x0e\x88\x43\x24\x61\x47\xaf\xb0\x5d\x84\xac\xc1\xbf\xa6\xcc\xc2\x4b\xab\x43\x7b\xd8\x54\x45\x50\xf0\x7b\x5b\xac\x89\xf7\xa1\xbb\xc8\x63\xec\x76\x54\x28\x2c\x88\x43\x84\x95\xdf\x2c\x08\xb8\xfc\xdd\x3a\xbb\xb5\xe5\x07\xc5\xe5\x2f\x4f\x53\x3b\xa7\xab\x19\x34\x4e\x53\xed\x1e\xcd\x8e\x95\xcb\xfe\xe4\x83\x2b\x7b\x80\x38\x84\xb4\x08\x4d\xaf\x18\x9b\x65\x79\x88\xa5\xdf\xba\x14\xbd\x4f\x5c\xe3\xb4\x5c\x17\x1b\x90\xfd\xee\xb2\x72\xa5\x7a\x1b\x9b\xd8\xb3\x67\xa4\x90\xb4\x40\x1c\x24\xad\xf3\x99\xef\xa0\x19\xd4\xff\xb1\x19\xed\x5b\x82\x9e\x35\xae\xd1\xb5\xf4\xf9\x4b\x8a\x1d\xe1\x89\xe9\x83\x74\x2f\xae\x2d\xa1\x10\x9b\x4e\xe4\x7f\xdb\xd8\xa2\x2f\xc3\x87\x37\xa3\x01\x38\x84\xb4\xd6\x52\xc8\x24\x1e\xd4\x70\x58\xbb\x59\xb9\xc7\xaf\xb1\xee\xfc\xba\xb4\xe3\x39\xe5\x72\xf2\x74\x52\xb1\x99\x91\x4c\x11\x93\xde\x1a\x0a\x0b\xe2\x90\xe7\x43\x12\xf9\x5f\x34\x37\x71\xa9\xae\x88\xed\xaa\xcb\xaf\x4d\xd6\xdf\x21\x53\x9f\xfa\xf8\xc6\x20\x26\x30\xb6\xb5\x83\x46\xbf\x1a\xfe\x33\x04\x71\x88\x24\xf0\x66\xb8\x09\x5e\x28\xda\xe3\xfa\xb4\xd4\xcb\x57\xe9\xc4\x33\x21\xa6\xbc\x4c\xf1\xc6\xcb\xeb\xae\xf9\x84\x0f\xc3\xbe\xd9\x20\x7c\x83\x1e\x88\x43\x84\x2d\x17\xcd\xd9\xd8\x09\x67\x3d\xfa\xf2\xea\xb8\x89\x2e\x9b\x80\x33\x54\x17\x3f\x97\x9f\x44\x6c\xcf\x26\x7b\x52\xae\xb0\xc9\x02\xde\xe0\x04\xe2\x10\xd2\xea\x78\x54\xf7\xcc\xd9\xbe\xbc\x0b\xb7\x79\x48\x08\xf7\x73\xca\x3c\x76\x0c\xf9\x53\xe5\xc1\xb4\x8f\x8b\x0d\x8f\x71\xd0\xa5\x0a\x30\x21\x69\x81\x38\x48\x5a\xe7\x33\xdf\x41\x33\xe5\xff\x43\x5a\xc1\xbb\x04\xc6\x1d\x6a\x2f\x3c\x38\x13\xb0\xe7\x71\x92\x57\x4b\xa8\xaf\xa2\x98\xad\x75\x76\x94\x5b\xaf\x7b\x28\xac\x49\xc2\x95\xdb\x40\x1c\x42\x5a\xd1\x0c\x8e\xf1\x7f\xc2\x3d\x2e\xb1\x87\x8f\x96\x68\xf4\xfa\x0f\x67\x08\xd4\xd8\xcc\x8f\x18\xa7\x2e\x37\x5d\xc4\xe8\x7b\x45\x09\x1f\xf8\x05\x71\x48\x69\x2d\x79\x70\x96\x0e\xf3\xe9\x8a\xa2\x08\xd9\x47\xbf\xef\x79\x62\xaa\xe7\xea\x70\x42\x6b\x3f\x6e\xab\x9f\x99\xd7\x1c\x63\x50\x06\x4b\x0b\xc0\x21\x92\xb0\xee\x32\x24\x72\x42\x47\xf3\x98\x5b\xa9\x8c\x9a\xf9\x48\x70\x8d\xb4\xfb\xe2\xd3\x80\xac\xb1\x68\x6a\x83\xbf\x13\xc5\x4c\xa5\xf0\x7d\x1d\x20\x0e\x11\x56\x84\x4a\xc3\xd6\x9f\x03\x83\x87\xd1\xd5\xbf\x8b\x05\xf7\xfa\x09\x59\xf9\x72\x8b\xc5\xad\x78\xda\xd5\x1e\x5c\x8c\xd7\xd8\xce\xf0\xc9\x77\x10\x87\x90\xd6\xdf\x07\xf6\x4d\x3f\xdf\x61\xba\xda\xa3\x57\xf8\x32\xea\xe6\x7a\xe4\x19\x8a\x89\x3e\x89\x62\x0f\xbd\xfc\xf4\x5d\xac\xcc\x35\x03\x47\x48\x5a\x20\x0e\x92\xd6\xf9\xcc\x77\xd0\x17\xd1\x59\x69\x6d\x13\x37\x10\xa2\x2f\xf1\x98\x31\x07\x31\x14\xd5\x2f\xcd\xfa\xad\x5d\xf2\xb8\xf8\x63\xee\x2a\x45\xd3\x7c\xba\x72\x80\x7e\x47\x3d\xd4\x7d\x10\x87\x90\x16\xd1\xdc\xfd\xae\x3f\xbd\xcf\xab\xe2\xd8\x8a\x7e\xc9\x4e\x8e\xe0\x6b\xa9\x2e\x3f\x69\xe9\x65\xae\xa9\x78\x4b\xac\xcc\x3d\xac\xf7\x05\x0a\x0b\xe2\x10\xd2\xca\xe6\x96\xe8\xd8\x7c\x5f\x40\xc3\x17\xcd\xa2\xe6\xd2\x10\x7a\xdf\x7c\xf1\xd1\xb0\x37\x9d\x73\xe1\x2f\x6f\x91\xe7\x59\x5a\xdf\x60\x77\x0c\xc4\x21\x77\xa3\x2d\x09\x9c\x7c\x44\x61\x34\xed\x92\x88\xc6\x73\xe4\x2e\x5a\x3c\x7e\x49\x5e\xe7\x29\x2a\xd5\x11\xfe\x79\x78\xb8\xb1\x35\x3e\x06\xde\x8d\x06\xe0\x10\x61\xdb\x68\x9f\xdd\xe7\x54\x15\xfb\x54\xd1\x13\x68\xd6\x7b\x81\x41\xde\x6f\xe7\xe9\x1b\xd3\xf2\x8a\x68\x5d\xcd\xf2\x46\x31\x07\x6a\xf8\xc4\x2b\x88\x43\x48\x2b\x48\x4a\xcd\xee\x8a\x6a\x37\xa5\xe9\x01\x5b\x66\x44\x5a\x36\xda\x85\x3a\x8b\xcf\x35\x58\x5f\xd0\xb7\xae\xcb\x16\xe9\x4d\x6b\xfe\x84\xab\x27\x03\x38\x48\x5a\xe7\x33\xdf\x41\x5f\xbe\x67\xa5\x35\x5c\x60\x46\x73\x7c\xf0\xab\x66\x42\x94\xa4\x8a\x87\x9e\xd6\xf0\x5d\x5f\xae\xdb\x93\xd1\x18\xb2\xef\xcd\xe3\x77\xe4\x64\x4f\x3c\xe1\x8f\x18\x00\x87\x90\xd6\xc2\x67\xdc\xd5\xa3\x3c\xb3\xdb\xcd\xef\x73\x66\x0c\xf3\x51\x86\x3a\x67\x1a\x1b\x2d\x1f\x4d\xf5\xdf\xda\xee\x63\xa2\xaf\x1d\x80\x8f\x9f\x81\x38\x64\x45\x83\x9c\xdd\x06\x61\xa9\xa8\x90\xf8\x5c\xe2\xd3\x9e\x39\x0d\x8f\x2e\xec\x8d\x49\x47\x0e\x16\x56\x31\xe2\xcb\x3f\x0c\x6f\x5f\x84\x1d\x26\x10\x87\x48\xc2\x7c\x59\xe9\x2b\xce\x1f\x54\xba\xea\x55\x4d\x18\xd7\x43\xab\x54\x5d\x46\xaf\x9e\xf2\x3a\x17\x29\x5e\xdf\x2a\x29\x4c\x4b\xbf\x61\x0e\x85\x05\x71\x88\xb0\xfc\xe2\xfb\x35\x54\xf2\x81\x32\xb2\x03\x45\x7f\xa6\xb0\xbb\x52\x52\x3d\x30\xe2\xd6\x45\xf3\x1b\xe3\x42\x2e\xfa\x13\x5f\x65\x86\xfd\x5c\x10\x87\x90\x56\xc2\x68\xcb\x74\xe3\xf5\x7e\x3a\xb5\x44\xcd\x8e\xb7\x8a\x39\xd1\xa1\x71\xaf\xc4\xb1\x0e\x0e\xb9\xc8\x38\xc2\x54\xc6\x7c\x7a\xc8\x21\x69\x81\x38\x48\x5a\xe7\x33\xdf\x41\x2b\x1c\x67\xa5\x95\xba\x67\xe8\x7b\x6f\xb9\xe6\x71\x40\x85\xdd\x23\xbc\x8d\xad\xa1\xa6\xa4\x30\x49\xbd\x87\xa5\x05\xe3\x8d\xaf\xe6\xb8\x16\x03\x1c\xa1\xee\x83\x38\x84\xb4\x76\x36\x8d\x27\xdd\x43\x4d\x6f\x07\x25\xe1\xc4\x3d\xdf\xa2\x8a\xf2\x1f\x3c\xf2\x0a\xf4\x92\x57\x21\xcb\xbc\x1c\xe2\x30\x9e\x0f\x9f\x6a\x03\x71\x08\x69\xcd\xa4\xcd\x0a\x39\xff\xc9\xd8\xe0\x79\x79\x77\x49\x38\xd9\x55\xf3\x30\xdd\x69\x53\x84\x5c\xc1\x58\x1d\x45\xc2\x7c\x80\xb5\xf4\x2a\x7c\x05\x04\x80\x43\x24\xc1\x2d\x6e\xc9\xb1\x9e\x52\x48\xb0\xca\x32\xa2\xb7\x5c\x91\x4f\x89\x04\x0d\x77\xbb\x57\xec\x5d\x71\xe4\xa3\x98\x5b\x2d\xc1\xbc\xb0\xf9\x0e\xe2\x10\x61\x9d\x7e\x45\x3f\x16\x4d\xd9\xe9\x16\x3a\xe8\xac\xaf\xdf\x67\x55\x4a\xbc\xe2\xc5\x9f\xda\xa9\x26\x85\xe3\x5f\x7f\x39\xfe\xa8\x13\xde\xe9\x07\xe2\x10\xd2\x42\x17\x66\xbd\x13\x72\x4b\x15\x2b\xdc\x38\x43\x60\xda\x68\x87\x3a\xe3\xf8\xb8\x9d\x9d\xe4\x05\x6e\x68\xfb\x9d\x1b\x51\xf7\x72\x2b\x21\x69\x81\x38\x48\x5a\xe7\x34\xdf\x41\x6b\xd8\x50\xcd\xf7\x33\xe6\x3b\x43\x59\x53\xce\xe8\xe0\x3c\x56\xca\x5c\xf1\x7a\x9b\x7b\xd8\xfc\xfb\x11\x09\xcb\xa6\x47\xef\x2b\x65\x24\x54\x31\x62\x77\x18\xd0\xfe\x7d\xa5\xef\x8c\xf9\x9e\x8a\x85\x75\xf7\xce\xcd\xa6\x8b\x41\x3b\xa7\x49\xbd\xb8\x5e\x7f\x71\x5a\x12\x82\xee\xc7\xd8\x5d\x1d\x0d\xa0\x0a\xe2\xfc\x34\x76\xfa\xbf\x59\xe9\x03\x75\xec\xff\x58\x8f\x29\x95\x79\x38\x2d\x91\x10\x68\xd1\xf9\xc1\xf8\x82\x7f\xb5\x5d\x2c\xd3\x76\x02\xba\xd6\x49\x4a\x0f\x1b\xda\xc3\xa2\xeb\xaa\x70\x61\x3d\x10\x87\x18\x6d\xfb\x27\xbc\x44\xf4\xc7\x17\x48\xea\xa2\x8f\x7b\x1e\x2e\x06\xe5\x18\x4d\xdf\x77\xa1\x75\xe4\x1a\x7d\x62\x1a\x7b\xd1\xee\x63\x55\x2d\x14\x16\xc4\x21\x46\x9b\x74\x60\x91\x84\x73\xc5\x08\xbe\x95\x8d\xc4\x2d\x53\x97\x90\x99\x93\xef\x75\x6f\x24\x97\xbe\x76\x19\xca\x07\x89\x2e\xff\xa4\x81\x6f\x6e\x00\x71\x88\x24\xfc\x96\x78\x71\x7f\x5d\xdd\xb3\xc6\x74\xf3\xb7\x99\xae\x0e\x59\x8b\xab\xdf\x4b\x41\xd2\xc3\xbd\x25\xe2\x9b\xe3\x4c\x8e\x97\xdb\xe1\x95\x3e\x10\x87\x08\x6b\x2f\x6e\x7e\xf5\xf2\x9c\x4d\x95\xc5\xd5\x75\x61\x03\x1f\xfc\x68\xec\x43\xfa\x52\x6e\x4f\x8e\xe1\x18\x73\x72\xe2\xf9\x16\x5d\xf8\x6d\x06\xe2\x10\xa3\x6d\xb0\x3e\x93\x8e\xfa\x60\x52\xba\xad\xf8\xc2\x34\x21\xcd\x82\x54\x73\xce\x6b\x71\xcc\xba\xad\xb1\xc5\x51\x03\xa1\xbb\xb9\x82\x7d\xd0\x68\x03\x71\xd0\x68\x3b\x9f\xf9\x0e\x12\xf0\x59\x69\x55\x4b\x04\x77\xd5\xc9\xf6\x4c\xfb\xbb\x05\x52\x5b\xf9\x30\x07\x90\x65\xfa\x5c\x9b\xaf\x9f\xbf\x43\x52\xdc\x74\x9c\x33\x3f\x48\x05\x75\x1f\xc4\x21\xa4\xf5\xca\xa6\x75\x41\xb8\xe1\xcf\xbe\xcc\xd2\xeb\xd5\x87\x6e\x3d\x86\x84\x51\xf3\x8f\x4c\x4e\xc7\x71\x9c\x5d\x3a\x14\x63\xd3\xfd\x7f\x42\x61\x41\x1c\x72\x5f\x07\xc6\x46\xd0\xac\x58\xa6\xe0\x9f\x9a\x8e\xf5\x48\xae\x63\x9f\xdc\x8b\x41\xd9\x91\x6c\xac\x6e\x6d\xed\x43\x6f\x16\x97\xb5\xe1\xed\x84\x20\x0e\x59\xfa\x09\xfd\x4a\x36\x0f\xe9\x1a\x9a\xb5\x89\x3a\xbd\x5c\xcd\xf3\xf5\xaf\xb1\x1f\xd0\x94\x96\x3b\x82\x5f\x9f\x96\xfc\xad\x10\xc3\x81\xef\x39\x05\x71\x88\xb0\xb6\xbb\x47\x0b\xdc\x94\x8a\x44\xa7\xd2\x49\xfd\xeb\xf6\xdb\xcf\x36\x08\x5d\x1f\x0c\xdd\xe8\x37\xff\x93\x36\x71\x40\x11\xf6\x18\xbe\x85\x0e\xc4\x21\xa4\xf5\xe2\xd0\xb2\xf3\x06\x99\x01\xab\x2a\xc6\xeb\x18\x46\xff\x67\x4a\x4b\x18\x5b\xd1\xf6\x5d\xe2\x37\xcd\x46\x28\x53\x5e\xb2\xde\x82\xcb\x00\x82\x38\x48\x5a\xe7\x33\xdf\x41\xbe\xe8\x59\x69\xdd\xa0\xb9\xb1\xc9\x46\xf1\xe7\xb6\xbf\xc3\x9c\x2d\x59\x98\xc0\x4d\x19\x53\xda\x36\xd4\x4c\xfd\x8e\x46\xdb\x19\x07\xff\xd6\x7d\x79\xa8\xfb\x20\x0e\x79\x7b\x2c\xdf\xcf\x3c\xba\xbc\xca\x6c\xbc\x80\xf5\xe3\xb7\x9b\xa1\xf9\x38\x83\xd1\x0f\x68\xb5\x26\x9c\x5f\xba\xd3\x3e\x95\xf2\x78\xd5\x09\xef\x96\x01\x70\x08\x69\xdd\x1f\xe2\xe9\x74\x3f\x2c\x16\x31\x57\xa7\x69\x64\x90\x54\x8b\xde\xbc\x93\xbe\x57\x56\xf5\x69\x92\x32\x13\x87\x23\xba\x8a\x02\xae\x32\x0a\xe2\x10\x49\xf8\xfe\xb6\xdd\xff\xf7\x65\xdf\x01\x4d\xd2\x05\x16\x42\xe5\xf9\x8a\xb7\xe6\x4a\x96\xea\x0f\x86\x6f\x8c\x78\xa3\x8a\x35\x47\xd5\x7f\x85\x37\x41\x03\x38\x44\xd8\x47\x14\x3e\x66\xad\xbb\x64\x2f\x79\xfa\x9a\x32\xa2\x3e\x72\x7e\x55\xb9\x43\x69\x16\x7b\xe9\xeb\xa1\xda\x95\x04\x67\x83\xe6\xcb\x78\x50\x58\x10\x87\x90\xd6\xb9\x4f\xbe\xdf\xd4\x5e\x1f\x2b\x3c\x1d\x3d\x50\xa9\xc3\xfa\x1a\x5f\x6c\xe2\xde\xe8\xb5\x94\x2a\x10\x35\x79\xa7\x2a\xb9\x33\x23\xe0\xc6\x67\x9e\xff\x9a\xef\xe3\x9f\xd5\xa3\xc5\xdb\x67\xbd\xe7\xb2\xde\x3f\xc4\x27\x11\xed\xa9\xc5\xfb\x99\x95\xa3\xf3\xfe\xef\xc8\xb2\xdf\xb5\xa7\x05\xf9\x5e\xff\x41\x2d\x48\x70\x88\x1f\xe1\x90\x88\x1c\xd3\x60\x7f\x2d\xfe\xd1\x66\xd6\x25\xec\x1f\x51\xcc\xef\xf8\x45\x89\xf9\xd6\xd5\x79\x02\x55\x57\x84\xf9\x0e\x8a\x7c\xd6\x7c\x5f\x54\x76\xdd\x8c\xaa\x2f\x0a\xbe\xc2\xed\x4b\xf7\xae\xb2\x85\x36\x6a\x7f\x25\xf2\xf2\xcf\x6e\x65\x66\xcd\x4f\x2c\x8b\xe1\xab\xff\x3d\xfa\xfd\xf7\x25\xf9\xbd\xba\x46\x46\x31\x5f\x0d\x65\x0f\xff\x81\x06\x3d\x61\x63\xdf\xe6\x39\x6d\xb2\x17\x05\xf4\xde\x44\xbf\xc8\x58\x85\x60\xf3\x1d\x14\x13\xaa\xf9\x8e\x34\xdf\xef\xb7\xff\xda\xee\x6f\x4b\xe6\xad\xac\xe8\x73\xd2\x8f\xec\x30\x75\xaf\xce\xd7\xb8\xd4\x6a\xc7\x31\x1c\x80\x7a\xb4\x43\xa7\xbe\xf5\xcf\x13\x9c\xa6\x33\xe6\x7b\x56\x5f\xfb\xeb\x98\xee\x53\x7b\x0c\x36\xe9\x82\xfa\xad\x2d\xdd\x0c\xef\x80\xce\x00\xfa\xaf\x69\xbf\x04\xbb\x1d\x7d\xde\xa8\xfb\xff\x7b\x93\x67\xcc\xf7\x3d\xee\x4b\xcf\x83\x87\x66\xbf\x7d\x19\x0c\xfb\x99\x56\xe6\x83\x1b\x16\xba\xc9\x8d\x26\xf2\xcb\x4d\x37\xe2\xf9\x7c\x20\x63\x2a\xde\xbf\x37\x79\xc6\x7c\xbf\x6a\x4b\x7e\x6b\xba\xf6\xde\xd5\x4a\x67\x52\x19\xfc\x57\x2f\xaf\x53\x15\xbc\xfc\xdd\xc5\x25\xc4\x8d\x73\x38\xaa\xb4\xf6\x9e\x52\xee\xdf\x9b\x3c\x63\xbe\x7f\xd0\xd5\xfc\x74\x79\xb1\xba\x41\xec\x3a\x76\x3f\xab\xff\x7d\xbd\x49\xbf\xef\x4a\x77\xae\x87\xb9\xb8\x28\xb9\x6d\x97\xb0\x37\x4b\xfc\x7b\x93\x67\xcc\x77\xdc\xaa\x86\xa5\x1e\xe2\xdc\x3b\x19\xf3\x95\xbd\x45\x39\x78\x1e\x0e\xa8\x72\x8c\x9d\x5d\xbb\xcb\xd8\x07\xaa\x63\x65\x22\xe2\x6f\xff\xbd\xc9\x33\xe6\xbb\xcb\x5d\x0f\x9e\xab\x2b\xee\xac\x4e\xbc\x4b\xdf\x9f\xb0\xba\x92\xf2\x73\x1d\x2a\x0a\x91\x9a\x88\xe0\xa7\x5d\xe7\x68\x79\xf4\x58\xf1\xdf\x9b\x3c\x63\xbe\x77\xbd\x88\x4d\xeb\xc1\xf9\x19\xef\x5e\x28\xfd\xb1\xa7\xcf\x30\xea\x47\x3a\xcb\xda\x10\xef\x8f\x2f\xb8\xc9\xbb\x3f\x30\x09\xb6\x13\xfe\x37\x53\x72\xd0\x50\x3c\xfb\x72\xdb\xb1\x6f\x29\xe9\x63\xfb\x6d\xc8\x8f\x77\xb1\x1e\xa5\xa6\x27\xbf\xe2\x31\x76\x4e\x48\x87\xda\xb8\xf3\xcd\x96\xf2\x9d\x49\x37\x7b\xf8\x4b\x15\xc0\x21\xcb\xf5\x5c\xe1\x2c\x20\x4a\x9c\xf0\x69\x71\x3a\x92\x75\x3f\xa4\xbe\x77\x88\xfd\xfc\x4d\x45\x3b\xf5\x4c\x95\x65\xdf\x4f\x4f\xb1\xe3\x13\xf8\x4b\x15\xc0\x21\x5e\x6e\x8a\x78\x13\x71\xce\xee\x79\x46\x89\x24\xdf\xf6\x4f\xb4\x9a\xa9\xb9\x2c\x5a\xbd\xf2\xa3\x87\xdd\x35\xde\xaf\xa5\xea\x4f\x79\xfe\x82\xc2\x82\x38\x44\x12\x4c\x30\xc8\x3e\xb7\xbe\x35\xde\x4f\x5a\x30\x6b\x4d\x6e\x5e\x35\xbd\x1b\x64\x1d\x54\xa3\xbe\x94\xa3\x61\x18\xb9\xa6\xa9\xd0\x0e\xd7\x39\x06\x71\x88\xb7\x90\xc0\x5e\x8c\xcb\x41\x44\xf9\xcc\xad\x92\xc2\x49\x2d\xdc\x0b\x3d\xb9\x61\xdf\xab\xec\x16\xae\x96\xc6\xa6\xb4\x3e\xe6\x4a\x38\xd6\x81\xc2\x82\x38\x44\x58\xde\x82\xd2\x4f\x6f\x2a\x30\xa7\x3f\xb5\x79\x1a\xbd\xf0\x5f\xee\xae\x3e\xd2\x78\x62\x47\x9b\x7d\x19\xb3\x74\x1f\x2b\x3b\x52\x62\x12\x32\xdf\x41\x1c\x54\xf3\xfd\x5c\xe6\x3b\xe8\x1f\xf7\xac\xb2\x12\xbb\x4e\x4b\x43\x9f\xb5\x4f\xca\x24\x24\xb8\x93\x0a\x3d\x78\x47\x57\xbe\x6f\xd7\xe9\x7e\xad\xf9\x47\xea\x01\xd9\xa3\x94\x65\xf8\x4e\x05\x10\x87\x50\xd6\xe5\xd7\xd2\x46\x31\x5e\x69\x8b\xa2\x21\x0c\x77\xf4\x52\xf3\x07\xbc\x56\xb1\x06\x6d\xbd\x22\x37\xf8\x5e\xfc\xd0\x40\x37\x1b\x5a\x86\xc2\x82\x38\x84\xb2\x6e\x64\x0b\x0f\xe9\x3d\x58\xf3\xb9\xb4\x66\xbf\x79\x8f\x67\xd4\x6f\x55\x3b\x44\x5f\x41\xce\x9b\xb8\xb7\xdf\xf5\x26\xfb\xb7\x65\xf8\x0a\x44\x10\x87\x48\x02\xde\xed\x70\x2b\x14\x3f\xa6\x03\x9e\xc6\x77\x6a\x2b\x35\xcf\x3d\xbe\xca\x70\x13\xaf\x3a\x9e\x04\x64\x63\x3d\xfa\xe4\xda\x5e\x0f\x5b\x99\x20\x0e\x21\x01\xf3\x86\x7e\xcc\x32\x02\x7d\x02\x12\x56\xb5\xce\xe8\xf7\xbc\x72\x3a\x5c\x46\xdf\x3d\x2d\xda\x71\x13\x9f\xb0\x8d\x46\x18\x5d\x84\x57\x6c\x40\x1c\x22\xec\x57\x7c\x2a\x72\x87\xa7\xaa\xab\x45\x95\x79\xb3\x18\x94\x21\x7c\x07\xdd\x1c\xad\x46\xef\x13\x0f\xde\xb6\x45\x1a\x07\x58\x8b\xba\x41\x33\x72\x10\x07\x15\x82\x3a\x9f\xf9\x0e\x7a\xb3\x9e\x95\x96\x4c\xaf\x8b\x74\x60\xd2\x15\x5a\x43\x76\x55\x29\xd1\xd6\xe1\x77\xc4\xbd\x15\x92\xa4\x9e\x27\xd8\x5b\x8d\xe3\x8c\xa5\x85\xb7\x60\x07\x07\xc4\x21\x6f\xd9\x4d\x36\x16\xf6\x36\x6b\x6c\xc4\x4c\xfd\x1b\xb0\xe4\xb4\xf4\x9c\x3b\x3e\xd1\xca\xea\x9e\x46\xf4\xdd\x81\x10\xf7\xe7\xd1\xd2\xf0\x69\x11\x10\x87\x94\x56\xc3\xce\x81\xf3\x2f\x67\x4a\x96\x47\xb5\xde\xad\xee\x8b\x42\xc2\x81\xcb\x19\x6c\x75\x57\x68\xab\x6b\x29\x73\xb8\xa3\x0a\xe0\x8a\x68\x20\x0e\x91\x04\x35\xfb\x9b\x86\xbb\xd3\x16\x76\xbd\xed\x75\x7c\x57\xde\x51\x72\xe9\x16\x3f\x29\x9d\xa1\x57\x6e\x8f\xe8\x8b\x0c\xcf\xa3\x78\x53\x05\x85\x05\x71\x08\x0d\xf8\x74\x7b\x0e\x2c\x2c\x12\x11\x3d\xbe\x9d\xec\xa1\x96\xb9\xa7\xf9\xe3\x47\xaf\xe2\x00\x59\xa3\xe4\xfb\xe5\x0c\x39\xe1\xbb\xf3\x70\xfd\x05\x10\x87\x08\xbb\x14\x22\x92\x86\x9f\x7b\x61\x36\x8b\x64\x70\x59\xb8\x05\x27\x9f\x93\x7f\x54\x4b\x4b\xfa\x44\x4b\x1e\x5d\x72\xe0\xb8\x4c\xee\x12\x24\x2d\x10\x07\x49\xeb\x7c\xe6\x3b\x68\x06\xf5\x7f\x2c\x08\xdf\xbe\x31\x8b\x2a\x25\xf4\x76\x69\xe8\x6b\x70\x61\x90\x1e\x67\xff\x8c\xd9\x2b\xaa\xcd\xdb\x3f\x2a\xb9\x9e\xd9\xee\x1e\x55\xe9\xc2\x0b\xc2\x00\x0e\x21\xad\xbf\x0f\x2e\x7b\x19\x4e\x35\x33\x7e\xe5\xbf\x49\xd3\xfc\xa5\xa7\xdb\x9e\xb0\x7e\xcb\xe5\x53\x3b\x87\x60\x5e\xd3\x0d\xc2\xcd\x15\xf8\xb6\x6d\x10\x87\x90\x16\x9a\x2e\x9a\x73\xe2\xb0\x32\xd6\x9a\x8f\xc0\x76\xe0\xdc\xe6\x47\x1f\xbc\x60\xdc\xb0\x14\x9f\x0f\x85\x63\x0e\xf9\x65\x8a\x0d\xf0\xdf\x0b\x88\x43\x24\x61\x2d\xc8\x92\x3c\xe6\x48\x9b\xb5\xef\x8f\x82\x99\x6c\xe7\x87\x6f\xf2\x47\x92\x63\x92\x42\x9c\x57\x8e\xb3\x5d\x76\x27\xa9\x8a\xe0\xd7\x2c\x88\x43\x68\x80\xea\x6b\x80\x5d\xa2\xef\xac\xfd\xb6\x53\x8e\x72\x0f\x89\x61\xd9\x9b\x96\x9e\x95\x9e\x5b\xf9\xbf\x3a\x8b\x22\x48\xbb\x69\xdf\xb0\x42\x61\x41\x1c\xf2\x63\x8f\x49\x78\x13\x47\x69\xfb\xfa\xd0\xfa\x37\xfc\xdd\xb4\x93\x9e\x6d\xaa\xd9\xb8\xb7\xdf\x94\x75\xd3\xdb\x58\x7c\x47\xf8\x88\x9d\x20\x69\x81\x38\x48\x5a\xe7\x33\xdf\x41\x33\xe5\xb3\xd2\x5a\xeb\x22\xe1\x5a\x6f\xbc\x45\xf6\x12\x3d\xc6\x92\xa0\xc3\xf5\xcf\xe5\x8a\xf5\x80\xaf\xe9\xb1\xf4\xaf\x5f\x6a\x0f\x50\xde\xbf\x0c\xdf\xba\x0f\xe2\x10\xd2\x7a\x51\x99\x64\x91\xe0\x97\xc2\xf5\xb9\x69\x8a\xd2\xc6\x8f\x3e\xb3\x61\xf4\xf1\x2a\x6e\x85\x96\x52\xf0\xfe\x53\xfa\x74\x0b\x7e\x22\x28\x2c\x88\x43\x48\xeb\x76\x86\x13\xc7\x8e\xb4\xce\x9f\x5d\xbc\x20\x12\xf4\x0c\x2c\xc1\xcf\x05\x92\x28\x81\xec\x9a\xb7\xb5\x3b\x37\xec\x27\xd8\x17\xe1\x23\x07\x20\x0e\xb9\x8e\x80\x66\xdb\xea\x25\x64\xfc\x25\x8f\x90\x16\xe5\xb9\xd4\xc6\xc1\xa3\xdf\xe1\x0d\x69\x15\x9f\xd7\x1d\xac\x84\x42\x31\x98\x09\xe1\x2b\x91\x40\x1c\x42\x03\xb6\x95\xd7\x65\x22\x57\x67\xe6\x99\xa5\x2b\x2b\xd5\x82\xe2\x72\xff\x46\x84\x49\xf3\xa8\x44\x27\x8f\xea\xa5\xf4\xfb\x98\x55\xa2\xc3\x4b\x54\x00\x0e\x11\x76\xf5\x95\x05\x6a\xa4\x78\x2e\x17\xa3\xb7\xaa\x6d\x54\x39\xe3\x01\x8b\xc8\x8e\x90\x92\xd2\x12\x06\x86\xe7\x0b\x02\x7e\x11\xaa\x43\x48\x5a\x20\x0e\x92\xd6\xf9\xcc\x77\xd0\x17\xd1\x59\x69\x3d\x5a\xfc\x59\x7c\x61\xb4\xf0\x55\xde\x74\x89\x90\xc2\x26\x93\xf1\x22\x75\xfd\x48\x75\x55\x32\x8f\xc1\x18\xb9\x68\xc7\xf8\xeb\xa7\xf0\x32\x0a\x80\x43\x48\xeb\x79\xac\xbe\xcf\x41\x27\x31\x73\x28\xe6\x87\xfd\xda\xfd\xc9\xf6\x44\xb1\xfc\x55\x27\x13\x3e\xcb\xb4\x14\x8b\xb7\x65\x03\x97\x77\xa1\xb0\x20\x0e\x21\x2d\xc9\xb0\x19\x2f\xd9\xf0\x67\xd8\x05\xe2\x03\x9f\x44\x68\xb2\xb4\x13\x7a\xaf\xa4\x15\x2e\xf1\x71\x94\x7f\x70\xc7\xb8\xa3\x23\x05\x7b\xfa\x20\x0e\x91\x04\x29\x43\x36\x34\xec\xfc\xe3\xf9\xf0\x6c\x07\xa6\xf5\xfb\xe1\xda\xda\x3a\x56\x72\xca\xbf\x47\xb9\x0c\xb6\x7c\x6f\xfe\x6e\x49\x09\x80\xc2\x82\x38\xe4\x74\x7b\xfd\xc9\xdf\xec\x51\xc9\x59\x17\x6b\x79\xaf\x01\x85\x2b\x5f\x69\x71\x7b\x18\x3d\x8c\x65\x5a\x74\x6a\x73\x38\xc2\xb5\x63\xe1\x09\x27\x88\x43\x84\x45\x91\x5c\xb5\xaa\xd6\x68\xa1\xa7\x65\x5b\x74\x22\x8e\xe6\x4b\xa7\x43\x99\xc3\xc4\x8e\x8c\xf5\xda\x58\xe7\xb4\x7e\xb0\xe7\xec\x02\x49\x0b\xc4\x41\xd2\x3a\x9f\xf9\x0e\xfa\xf2\x3d\x2b\xad\x20\x3d\x36\x9a\xf9\x1b\x9d\x0a\x03\xd1\xbe\xe3\x96\x26\x47\xbe\xf2\x6f\x09\x87\xef\xd9\x2f\xfb\x67\xbd\x3c\x92\xa5\xb3\xda\x83\xab\xe4\x82\x38\x84\xb4\xb2\xf6\xf0\xd6\x59\xb3\xbe\x09\x7d\xa2\x8d\xa4\x35\x19\x3f\xbc\x62\x10\xac\x4b\xc9\x61\xb9\xa5\x3f\x39\xea\xd3\x6c\xa6\x62\x9a\x03\xdf\x27\x00\xe0\x10\xd2\x92\x8a\xf7\x67\x6e\xb8\xf4\xc8\xdd\xc3\x80\x1f\xc7\x20\x9c\xff\xc5\x48\x25\x07\xf3\xc8\x37\x55\x13\xdc\x8d\x5a\x7e\x55\x1d\x01\xd8\x7c\x07\x71\xc8\x03\x93\x11\x84\xed\x46\xd2\x0a\x17\x7a\x2c\x18\x48\x7a\xb3\xe9\x02\x47\x5a\x5e\x44\x12\x8f\xfa\x9b\x7a\x6c\x4d\x8e\x6b\x93\x7e\x80\xcb\xbb\x80\x38\xe4\x9b\xcb\x9e\x8d\xee\x48\x80\x37\xb0\xa6\x4f\xb8\xdb\x30\xca\x42\x8e\xe5\x63\x2c\x27\xaa\xa0\x9e\x8f\x7e\x28\xad\x9c\xcb\xaf\xb1\xdb\x50\x58\x10\x87\x9c\xc2\x39\xf6\x31\x49\xe3\x16\xfb\x99\x9b\xe3\xfb\xd3\x8b\xa6\x7b\x17\x78\xab\x17\xb4\x44\xa4\x24\xb9\x05\xad\x7b\xae\x2c\xb7\xbf\x87\xa4\x05\xe2\x20\x69\x9d\xcf\x7c\x07\xad\x70\x9c\x95\x96\xa1\xec\xd0\xb3\xfa\x62\xd6\xeb\x0a\x89\xd2\x0d\xf7\x94\x32\x65\x0f\x17\x1e\xc8\xd3\x78\x1f\xbf\x0c\x9d\x33\x4c\x1a\xfa\x1e\x25\x00\x75\x1f\xc4\x21\xa4\x35\x66\x77\xac\xf8\xe6\x31\x9e\xf2\x22\x67\xdf\xcf\x85\xd1\x1b\xe9\xf7\xa9\x9e\x1b\x0d\x46\x64\xbe\x7a\x9e\x66\xf3\x94\x24\x98\x12\x9e\x6f\x83\x38\x84\xb4\xf4\xde\xe1\xe4\xe1\xe4\xa2\x38\xaa\x0a\xd6\x13\xe3\xe0\x3c\x5a\x90\xa1\x16\x37\xdc\xb1\x4e\x8d\x95\x61\x39\x09\xb5\x77\xac\x3c\x82\xc2\x82\x38\x44\x12\x70\x55\xd3\x85\x97\x6f\x16\xc7\x5d\x4f\x94\xa4\x7b\xdc\xbc\x3f\x9f\x7a\xf9\xe5\x84\x92\x4a\xd1\x32\x4e\xe7\x0f\xd6\xe7\x3d\xb9\xf0\x95\xb2\x20\x0e\xa1\x81\xfe\xf7\x49\xfc\xfa\xdc\x6f\x34\x6d\x56\x7b\xde\xea\x12\xcc\xb2\xab\x04\xa5\x6e\x0c\xd4\x3a\xd0\x52\xcd\xbc\x7a\x30\xca\xc3\x98\x04\x85\x05\x71\x88\xb0\x0c\xbd\xd1\x7f\x33\x6c\x17\x65\xc5\xda\xaa\x31\xa5\x06\xb7\xd9\x8b\x8f\xdb\x27\x46\xe9\x6a\x98\x19\x85\xea\x99\xda\xe7\x13\x9f\x42\xd2\x02\x71\x90\xb4\xce\x69\xbe\x83\xd6\xb0\xa1\x9a\xef\x67\xcc\x77\x5e\xa9\xef\x3f\x82\xad\x4c\x5a\x9e\x8f\xb7\x8f\xaa\x54\x4d\x72\x47\xac\x56\x50\x66\xda\x66\x0e\x12\x76\xdf\x5a\x0f\x5d\x6f\x5f\xff\xf7\x95\xbe\x33\xe6\x7b\x19\x61\xd4\x3b\xd7\x4f\x51\x89\xd7\x2c\x2d\x39\xb0\x31\x34\x1b\x33\xbf\x1c\x48\x36\x85\x52\x19\xf8\x86\x38\x1f\xf5\x6c\x1c\x37\xff\x6f\x56\xfa\x40\x1d\x3b\x3b\xda\xb4\xab\x78\x3e\xa2\x6b\xbc\x2b\xc1\x4f\xb3\xf9\xd3\xfd\x54\xfe\x36\xf3\x95\xce\x5b\x8f\x16\xd7\x27\x86\xef\xaa\x52\xbe\x6a\x3a\x82\x2f\xf1\x06\x71\x88\xd1\x96\x74\x2f\xdb\xee\x22\x8d\xc7\xb5\xa1\x01\x8d\x84\xc8\xa5\x5f\xd8\xac\x35\xd9\x45\x1f\xe9\x29\x3e\x2a\xe5\x56\xca\x3d\xc4\x61\xf1\x83\x2f\x05\x01\x70\x88\xd1\xf6\x71\xe3\xc7\xa2\x4d\x0e\x79\xdf\xc1\xb5\xdf\x28\xa5\x7f\x9f\x9b\xe5\x5d\x9b\x1f\x1f\xd9\xe6\x94\x7d\xa0\x39\xf6\x4b\x59\x40\x07\xfe\x23\x07\x71\xc8\x9d\x74\x65\x3e\x57\x8b\xdc\x15\x44\x5e\xb5\x4c\xaf\x3c\x5c\x35\xdc\x73\xbd\x9b\xb4\x7e\xcd\xef\xfe\x88\xe6\xae\xb7\xc0\x94\x06\x8f\x36\xbc\x93\x0e\xc0\x21\x86\xc5\x8c\xed\xc5\x0f\x5c\xd2\xee\x78\xae\x93\xca\xec\xa4\x3b\x17\xae\x14\x0a\x4b\x39\x9b\xbd\x57\x2f\xca\xb4\x57\x11\xce\x46\xd7\x81\x6b\x47\x80\x38\x44\x58\xb4\xbf\x1a\xf8\x1d\xb5\xd2\x7b\x2e\x4a\xee\xa1\x64\xef\x6e\x5e\x36\x67\x8c\xa8\xe9\x0d\x50\x96\xcb\x49\xec\xf1\xc8\xbe\xc8\xc0\x01\x8d\x36\x10\x07\x8d\xb6\xf3\x99\xef\x20\x01\xff\x1f\x85\xb9\x27\x95\x58\x06\x0e\xec\x04\x9b\x3b\x55\x03\x33\x0a\x2d\xdd\x86\xa5\x33\x46\xcc\x70\x99\xe2\x03\x54\x26\xf3\x8a\xff\xa4\xc2\xa5\x07\x40\x1c\x42\x5a\x39\xde\xe1\x6a\x79\x5c\x75\x97\xae\x1b\x88\x4d\x6f\x78\x3b\x6f\x16\x66\xac\x90\xf3\x1e\x16\x30\x3b\x88\xf1\xee\x15\x45\x68\x6d\x40\x61\x41\x1c\x42\x5a\xfa\x5f\xe4\x23\x19\xc5\x85\x9a\x6c\x7e\x0f\x1d\x7c\x60\x19\x78\x75\xfc\xd9\x85\xf1\xf4\x01\xfa\x73\x4b\xe3\x26\x79\xa9\xc0\xfd\xb7\xf0\xa5\x20\x00\x0e\x79\x20\xa6\x74\xaa\x0c\x8d\x13\x9f\x13\x63\x60\xb3\xc8\x35\x36\xad\x94\x56\x1c\xb5\xdb\x42\x54\x8d\xd1\x7f\x3f\x49\x45\xdb\x45\x07\xbe\x85\x0e\xc4\x21\x34\xd0\x3d\x6b\x96\xa8\xe4\xca\x71\x94\x72\xe5\xe3\x82\x63\x1e\x8d\xd0\x77\xc5\xd0\x1a\xf5\xbd\x59\x5f\x66\xcb\x5e\x7d\x9c\x6b\x01\xf0\x8e\x75\x10\x87\x7c\x3f\x78\x63\xfb\xec\x51\x3c\x75\x56\xed\x96\xcb\x77\x0f\x2e\xd3\x4d\x4d\x52\xd4\xf6\xe1\x9b\x95\xef\x1b\x78\xd9\x25\x11\xf9\xb6\x06\x92\x16\x88\x83\xa4\x75\x3e\xf3\x1d\xe4\x8b\x9e\x95\xd6\x9e\x5d\xca\xb6\xac\x53\xd5\x60\xe3\x9f\x72\xf9\x2b\x11\x51\xa1\x51\xfb\x0b\xda\x0b\x5b\xfc\x82\xbd\xdc\x37\x9e\x67\x9b\x88\x2b\xc2\x2e\x39\x80\x43\x48\xab\x40\xa9\x4d\xdd\x75\x21\xe1\x5d\x56\x60\xf9\x35\x11\x72\xd7\xa5\x69\x49\x29\x97\x09\x3c\xf4\x93\xf8\x22\x66\x3d\x45\xc5\x1f\xf0\x65\xfe\x20\x0e\x79\xce\x86\x52\x98\x2a\xea\x4b\xdb\xed\xe5\x27\x0f\x4a\xc9\x87\x7c\x06\xfe\xa2\x8e\xac\x3c\x38\xc8\xcf\xd4\xe8\x32\x4a\x4d\x74\x1d\xc1\x85\xcf\xd9\x00\x38\x44\x12\x3c\x39\xbe\x13\x58\xd2\xcd\xff\x2d\xf7\xf4\x8d\x38\xd9\x08\x98\x91\xf2\x40\xd7\x92\xea\x4a\xdc\x1f\x3a\x69\xba\x24\xfb\x2e\xa0\x1b\x0a\x0b\xe2\x10\x1a\x10\x4e\x61\xce\xc4\x93\x52\x78\x23\x50\xe3\xe6\xc4\x1e\xcd\x1e\x93\xb8\x50\x89\xbd\xaf\x33\x32\x67\x21\x8c\x1d\xf7\xb5\x2b\x16\x3e\x1e\x07\xe2\x10\x61\xcf\x7d\xf2\x3d\xba\x28\x46\xb8\xb3\x9d\x43\xbe\x29\x59\x6f\x36\x4b\xf7\x0e\x81\x54\x71\xd8\xb1\xe3\x12\x75\x4b\x18\x1f\x7e\xf6\x6d\x66\x11\xee\xff\x9a\xef\x0c\x99\x0f\xd3\xf6\x71\xf0\xb5\xd5\xd1\x34\x57\x1c\x05\x92\xd4\xd4\xd3\xee\x2c\xaf\xde\x7a\xc6\xe1\x22\x80\x7e\xd4\xbd\x76\xeb\xbf\xe7\x65\xa7\x1c\xfb\xfa\x2f\xd1\x50\x46\x6c\x15\x61\xac\xec\x9d\x7a\x0b\x53\x92\x19\xa7\xf8\x86\x6a\xe0\xdd\xfd\x35\xc6\xbb\x3b\x90\x6d\x87\x30\xdf\x41\x91\xcf\x9a\xef\x5e\xae\xdb\xa9\xef\x58\x3e\x0f\x3c\xf4\x3b\xc9\xa6\x7b\x19\xb7\xd8\xb5\xef\xd2\x91\xd8\xe9\xdb\x3f\xde\xa3\x77\x59\x70\x24\x74\xf1\xbf\x6b\x3e\xb9\xbc\x6b\xfd\xf4\x49\xa3\x39\x19\x3a\x81\x1f\xd5\xf2\x0a\x0b\x05\x17\xcc\x69\xc6\xd3\xa5\x9c\x59\x89\x1d\x14\xe3\x6e\x35\xc0\xe6\x3b\x28\x26\x54\xf3\x5d\x11\x31\xdb\x18\x66\xee\x63\x4c\x2c\xf1\xcf\xd6\x7c\x63\x7e\x57\x88\x51\xbf\x4f\xa3\x3d\xbe\xf8\xe3\xfb\xbb\xeb\xca\x02\xd2\x03\x43\x44\x85\xff\x5a\xe4\x26\x4c\x1a\x45\x00\x39\xc1\x61\xcc\x3c\xb5\xe2\xc4\x7f\xa7\xfd\xeb\x98\x20\x78\xf3\xe7\x47\x86\x55\xc9\xbb\x7f\xd2\x78\x77\x79\x1b\x4e\x37\xdc\xa4\x97\x38\x98\xff\xbd\x49\x35\x64\x93\xad\x83\xe2\x41\xe1\xdc\xd2\x77\xc9\x88\x2e\x8d\x76\xc9\x3d\xb8\xcd\xa2\xbe\x46\xa7\xdb\x3b\xb5\x74\x2a\xd4\x54\xda\x8f\x56\x46\xf7\xef\x4d\x1a\x20\x9b\x4c\x29\xa6\xd2\xe3\xf3\x55\xbe\x2c\xcf\xa5\xee\xf0\x7c\xfe\xea\x1b\x8d\x1b\xa5\x25\xda\x21\x4d\x4f\xc2\x92\x4b\xdb\x1b\xa7\xfb\xff\xfd\x18\x3a\x8a\x07\xb2\xc9\xa2\x4b\xd3\xb8\xcd\x98\x5a\x7f\xee\x57\x6b\xcd\xaf\x63\xd8\xbe\x8d\x64\xdd\x92\xf2\x19\xd9\x7b\x53\x6a\xd1\x7f\x5f\x44\xde\xf6\xdf\xcf\xf7\xa3\x24\x23\x9b\x3c\x58\x34\xdb\x7b\xdd\xfc\x67\xa9\x42\x64\x80\x6e\x60\xfc\x99\x20\x85\x97\xea\xd1\xb6\x67\x97\xf1\xb4\x27\xc3\x83\x0f\x37\x2a\xfe\xfd\xa6\x7b\x94\x0a\x64\x93\x9e\x2f\xf0\xa2\xf6\x66\x4b\x78\xdb\x28\x85\xb6\x19\x2e\xce\x05\x12\x64\x4f\x29\x2f\xad\x74\xfd\xc6\x1e\x99\xb8\x59\x1a\x15\xf1\xe8\xdf\x9b\x6c\x40\x36\x89\x1d\xa5\x4e\xaa\x71\x48\x55\xca\x24\xf8\xae\xbe\x72\x71\x9f\x30\xf4\xb1\x75\xe6\x15\xf3\xa2\x0f\x89\xd6\x02\xe4\xda\x4a\x57\x52\xfe\x37\x53\x72\xd0\x50\x3c\xfb\x72\x73\x59\xdb\xfb\x41\x2c\xa0\x95\x53\xf1\xf9\xe8\x8a\x60\x5d\x03\x91\x8c\x2a\xbd\xf7\x33\x9a\x23\x55\xcb\xf7\x78\x01\x7e\x04\xe4\xf0\xb7\x1f\x88\x43\xbc\xdc\xc2\x94\x36\x34\x82\x28\x79\x31\xd9\x79\x17\x9f\x1d\xd0\xa6\x47\xf8\xff\x1c\xa9\x78\xba\x95\x93\x19\x70\xb4\x74\xea\xb6\x30\x00\x5f\x94\x02\xe2\x10\x2f\xb7\x7b\xf4\xf6\x65\xfc\x87\x2b\x13\xc4\x13\xa2\xcd\x6d\x4b\x31\x5f\x77\x7a\x5f\x58\x27\x99\x6b\x8e\x95\xfc\x9a\x23\x60\xba\x1c\x93\x0f\x85\x05\x71\x88\x24\x64\xdc\x72\x0e\x72\x3c\xbe\x76\x8d\x81\x38\x4e\xd6\xda\xe2\x61\x2e\x9f\x1e\x75\x70\x14\xe5\xa1\x65\xa6\x7d\xed\x4a\x11\x97\x3a\x01\x14\x16\xc4\x21\x92\x80\x46\xb4\x64\xb6\xf1\x28\x25\xcb\x72\x12\xf7\xa9\xf6\xae\x4f\x3c\xeb\xda\x33\x2e\x4f\xc5\x6e\xf6\x64\x93\x2b\x0d\x3e\xda\x47\x14\xb0\x35\x02\xe0\x10\x4f\xbb\x7c\x24\xe3\x7a\x1a\xfd\xe5\x80\xeb\xd9\x78\x39\xcb\x5e\xa0\x28\xc5\x4d\x19\x6c\x5e\x67\xfc\xf7\x4f\x6f\x65\x8f\xb9\xe0\x4f\xe6\x41\xe6\x3b\x88\x83\x6a\xbe\x2b\x9e\x67\xda\x04\xfa\xc7\xfd\x3f\xae\x39\x4b\xe1\x8d\xed\x71\x69\xe7\x70\xfa\xad\x78\xc1\x50\xa1\xe6\x71\x0b\x85\x8e\x63\x5a\x44\x88\xc6\x14\x06\x3d\x7f\x72\xa0\x02\x7c\x3a\x1b\xc4\x21\x92\xda\x4d\xac\xe8\xc5\xed\x31\x5d\x9b\xea\xf7\xea\xa7\x09\xc9\xbe\x32\xd3\xf6\x33\x27\x86\x16\x91\xd0\x43\xc2\xfe\xc9\x88\x0b\xc9\x11\xf0\x64\x14\xc0\x21\x94\xb5\x82\x8f\x75\xbd\x96\x3a\xc2\x5a\xc7\xb6\xe8\xb0\x28\x9a\xa3\xa2\xb1\x3a\xb8\x71\x97\x0f\x27\x78\xe9\x5a\x7d\xaf\x43\xa6\x05\xbc\x7a\x0f\xe2\x10\x49\x88\xf9\x2d\x5a\x7e\xdc\xeb\x2d\xf4\xa5\x9d\x1e\x7b\x31\xd2\x2f\x15\x6b\xb9\x3b\x4b\xfc\x3e\x93\xcf\x9d\x83\xb4\xd2\x5c\x7b\x0e\xf8\xe6\x2c\x10\x87\x48\x02\x05\x53\x42\x0c\x69\xdd\x2b\xef\x0d\xeb\xdf\xd9\xd5\x8f\x02\x18\xa5\xf5\xa5\x94\x59\x09\x92\xf7\xd5\x3f\x10\x09\x8f\xb6\x59\xc1\xd3\x26\x10\x87\x78\x5a\xe5\xfe\x81\x1c\x89\x9b\x8d\x4a\x2d\x8f\xe5\xd6\x68\x0e\x87\x16\xc2\x5f\x15\x78\xb5\xd8\x96\x36\x99\x44\xbf\xfe\x4d\xf2\xee\x74\x1d\xbe\xe6\x0c\xc0\x41\x85\xa0\x04\xce\x35\x23\x07\xbd\x59\xcf\x4a\x4b\x0c\x4d\xa2\x5a\x88\x2f\xa9\xb6\xe0\x82\xf0\xbd\x2d\x9c\x08\x8d\x51\x74\x9c\x4d\xd4\xd1\xfb\x56\x56\xd3\xe1\xf5\x18\xee\x1e\xf0\x2d\x6f\x20\x0e\x79\xcb\xae\x40\xbc\x08\x8d\xf5\x2c\x41\x5a\xc4\x98\xe4\x25\x3c\x85\xfe\x10\xa1\x6f\x2c\x92\xa5\x14\x14\x0c\xb5\x46\x27\xc7\xf7\xb5\xb5\x60\x63\x08\xc0\x21\xa4\x15\x47\x59\x39\x7d\xd7\x50\x8a\x73\x57\x52\x5b\xb1\x95\x76\x6b\x58\x95\xc2\x35\x59\x84\x5d\xf8\xd9\xe0\x54\xff\xcd\x57\x99\x2f\x16\xa1\xb0\x20\x0e\x79\x64\x86\xdc\x36\x77\x29\x67\x25\xb7\x16\xc7\xea\xfe\xde\x83\x52\x53\x16\x7e\x69\x9c\x1b\x0c\xc2\x62\x07\xd7\xd5\xcb\xf4\x7f\xd8\x4d\xc2\x47\x66\x00\x1c\x22\x09\x6e\x8a\x5f\x93\x56\xbf\x9f\x96\x26\xb5\xc9\xd5\x19\xc9\xc9\x99\xac\xf8\xcf\xf8\x35\x7d\x37\xd3\xbd\xd8\xa3\xb7\x19\xd8\x6f\x01\x6f\x35\x06\x71\x88\xa7\xfd\x8c\x3e\xa1\x3e\x9e\x19\xdd\x44\x19\xca\x2b\xf3\x80\xc6\x12\xc5\xa3\x0e\x6b\xe0\xae\x34\x0a\x5b\x3a\x1f\xba\xd0\x54\x09\xc6\x63\x48\x5a\x20\x0e\x92\x96\xda\xb9\xa4\x05\x9a\x41\x9d\x95\x56\x46\x6c\xe4\x74\x9f\xce\x9a\x5d\xa1\x70\xd5\x6d\x91\xcf\x5f\xd6\x4c\x24\xd9\x3d\xe8\x36\x5e\x88\xba\x37\x7d\xfd\x53\x2a\xd8\x01\x97\x1e\x00\x71\x88\xac\xde\xf9\xf0\xe6\x1a\xcb\xd6\x25\x57\x54\xd7\x85\xc6\x02\x72\x62\x6f\x29\xac\x91\x5b\x6f\x9a\x3d\x5d\xbe\xfe\xde\x5c\x25\xa6\x17\xf6\x85\xc2\x82\x38\x84\xb4\x98\x6f\xe0\xbd\x28\xf9\x45\x8c\x8e\x7f\x47\x2b\xfe\x61\x35\xba\xb2\x27\x11\x5d\xc0\x65\x32\x9e\xc1\x94\x10\x01\x43\xa7\x81\x6d\xf8\xf6\x03\x10\x87\x48\x02\x4a\xeb\x2f\x4c\x5a\x63\x89\x55\xa3\x6c\x9a\x9b\x62\xaf\xd4\x7c\x92\x6b\x36\x15\xae\x26\x3d\x3a\xee\xcb\x7c\x1f\x17\x79\x31\x02\x7e\xcd\x82\x38\x44\x12\x1a\x4a\xdb\x33\x4f\x8d\xb0\x2f\x3b\x8c\x6b\xdd\x26\xa9\x2e\xac\xbb\xf7\x78\x51\x1e\x73\xfc\x35\x1a\xee\x1d\xae\x87\x55\x8b\x5f\x2e\xc3\xc7\x12\x01\x1c\xe2\x69\xd1\xd3\xfe\x6a\x4d\xd9\xc7\x84\x58\xf5\xe1\xc5\x60\x29\x7d\xca\x51\x67\x7b\xe6\x76\xaf\xd6\x46\x38\x7e\x96\xed\x44\x80\x47\xc9\x1d\x3e\x8d\x05\xe0\x20\x69\x19\x9c\x4b\x5a\xa0\x99\xf2\x59\x69\x15\x4a\x7e\xda\x9a\xc6\xea\xbb\xef\xa8\x24\xf1\x44\x57\x7e\x3d\x76\x88\xa4\x75\x09\xa7\x9a\xeb\xf1\x11\x8b\x72\x3d\x6b\xa6\x7f\x0f\xd4\x7d\x10\x87\x2c\xba\x29\x46\x37\xee\xd7\x8c\x49\xfb\x9c\xdd\xbd\xef\x77\x1f\xbf\x12\x67\x7a\x69\x66\xa0\xd7\x6c\xe4\x97\x81\x26\xff\xce\xa3\x15\xf8\x5d\x00\xe2\x10\xd2\x32\x5f\x6b\x31\xba\xa9\x2c\xa6\x78\xa3\x70\x8a\xe2\xba\xba\xfd\xed\x77\x3a\xdd\x8b\x64\xed\x5a\x7d\xda\x31\x38\xa5\x3f\x71\x6a\xe0\xa2\x9b\x20\x0e\x91\x04\xa5\x93\x9e\x5e\xc5\x2e\x9e\x9a\xfd\xab\xe2\x1c\x1b\x19\x84\xad\x84\x53\xc6\x4f\xfc\x2f\xbd\xef\x38\x39\xb5\xaf\x8e\x2a\xaf\xbb\x05\x85\x05\x71\x88\x24\x30\x2e\x77\x7f\xf9\x69\x4f\x67\x7f\x73\x20\x8e\x3d\xf6\xef\x6b\x7b\xfa\xed\xa5\xf1\x53\x72\x3c\xca\x2f\x44\x8f\xc9\x6e\x4b\xc5\xc3\x85\x83\x40\x1c\xe2\x69\x71\x4c\x25\x19\xb0\x0d\xbd\x2e\x6b\x5e\xc0\x48\x77\xaa\xb3\xc0\x93\x79\x99\xc5\xbd\x1c\xaa\x75\xc1\xfb\x4a\xe0\x88\x9e\x5e\x39\x0d\x24\x2d\x10\x07\x49\xcb\xe3\x5c\xd2\x02\x7d\x11\x9d\x95\x56\x63\xbb\x39\xa7\xde\xc9\x25\xfd\xec\x89\x82\xb7\x4e\xf6\xe9\x1f\x9b\xe4\xe4\x29\x18\x75\x76\xbf\xf6\xa9\xca\x6e\xbf\x27\x0b\x83\xef\xaf\x02\x71\x88\xac\x8a\x86\xfc\xa9\x25\x5a\xb8\xdb\xc3\x1a\x50\x6e\x91\x22\x58\xfd\xf0\x45\x99\xbe\xa3\xa9\xd2\x80\xeb\x9f\x60\x1f\xfd\x7b\xbc\x1d\x61\x50\x58\x10\x87\x90\x96\x91\x81\x27\x06\x7f\x6d\x8c\x05\xc3\x15\x4b\xa3\x8d\x9b\xc7\xca\xba\x3c\xc4\xa5\x32\xc3\xa4\xb9\xeb\xf2\xa8\xb2\xea\xf9\x01\x22\x50\x58\x10\x87\xac\xe7\xaa\xce\xc2\x75\xfa\x1e\x57\x52\xbc\x72\xb5\x7f\x4a\xe0\xb4\x77\xf9\x5e\x6f\xd9\x84\x77\xfe\xfd\x44\xe6\x81\x95\xbf\xea\xd3\x1a\x50\x58\x10\x87\x48\x82\x8d\x96\x87\x70\x7a\xa3\x28\x07\x49\x77\xc4\xb8\x8a\x2e\x61\x0c\xc5\x98\x39\x07\xa5\x23\xbf\x05\x93\x57\x18\x11\x6a\xb0\x31\x16\x14\x16\xc4\x21\x9e\xd6\x27\x57\xbb\x44\x69\xb4\x3b\x72\xbb\x8c\xa5\x50\x97\x3b\xb0\x6e\x23\x3d\xd3\x07\x3f\x66\x67\x63\xfb\x60\x71\x82\x66\xec\x4f\x12\xec\x90\x02\x38\x48\x5a\xc9\xe7\x92\x16\xe8\xcb\xf7\xac\xb4\xec\xed\xe8\x64\x4f\x09\xef\xbe\xe4\xe0\x68\x48\x27\xf5\x8c\x1d\xb8\xb1\xfa\x31\xf8\xc1\x69\x19\x3e\x81\xb7\x68\x6b\x14\xa1\xf1\x02\x7c\xa8\x0f\xc0\x21\xb2\x2a\x15\xd6\xf3\xc1\x8a\x3f\xb7\xd0\x7c\x93\xbd\x5e\x6f\x70\x7f\x76\xe3\xf4\x5d\xea\xbc\xc6\xc0\x20\x6f\x47\x48\xc2\x56\x54\x20\x3c\xcd\x00\x71\x08\x69\x19\xaa\x35\x69\x89\xc7\xf5\xe1\xad\xb0\xa5\x79\x7e\x23\xd8\xc6\x0c\xe7\xbc\x48\x20\xda\xf7\xf0\x15\x57\x20\xca\x02\xf9\x5e\x06\xbc\x13\x09\xc4\x21\x92\x30\x35\xd3\xef\xe6\x33\x26\xd4\x37\x70\xab\x4c\xb5\xbc\xa5\x21\xf2\xc3\x8f\xfa\x98\x89\x95\x9b\xbc\x6f\x26\x44\x3c\x15\x08\x85\x60\x2b\x08\xc4\x21\x92\x10\x5b\x40\x7d\xb1\x78\xc5\xb5\x69\x72\xa6\xb3\x25\xd5\x77\xd6\x3a\x29\xaf\x91\x99\x69\x9f\x01\xd7\xf6\xda\x97\x0c\x8f\x51\x35\x2b\x28\x2c\x88\x43\x3c\xed\x2c\x0b\xc7\xc2\xc7\xbc\xc8\xd8\x16\x61\xcb\xba\xfb\xbb\x28\x1b\x9a\xf4\x4c\xce\x51\xb7\x42\xa2\x98\x45\x13\xb6\xe4\xd4\x9e\x32\x43\xd2\x02\x71\x90\xb4\x2a\xce\x25\x2d\xd0\x0a\xc7\x59\x69\x95\xa8\x17\xd4\x33\x50\x9f\xc6\xf2\x50\x44\x65\xbd\x99\xb5\x43\xf9\xcc\x66\xe6\xcf\x15\x2d\x36\x71\xa1\x6c\x66\x90\x94\xb5\xf3\x10\xea\x3e\x88\x43\x64\x55\xbf\xcd\xf6\x6b\x91\xdf\x5e\xca\xef\xe3\xc6\xcb\x03\x18\xb6\x85\x86\xb5\x86\x6e\xf5\xee\xd8\x44\xd7\x2f\xb2\xfb\x37\xea\xad\xc2\x2f\x44\x10\x87\x90\x16\xbe\xf3\x7c\xf7\x80\xd5\x50\xba\xc7\x12\x29\x81\xeb\x88\xd9\x84\xb9\x7f\x99\xd0\xdb\x05\xed\xe8\x03\xc5\x8b\xb5\x7c\xcb\x3f\xe0\x32\x4f\x20\x0e\xb9\x1b\x2d\x26\x01\xc5\x22\x93\x39\xf1\x99\x4e\xa0\x26\xce\x02\xef\x6b\x3c\xbd\xce\x2b\x4e\x2e\xa8\xe8\x55\xb2\xca\x9a\x8a\xb5\xa4\x96\xf0\x47\x07\x80\x43\x9e\x1a\x5d\xc2\xce\x6b\xc6\x27\x45\x63\xff\x40\xcb\xd5\xec\x4d\x16\x85\x5d\x4a\x22\xf1\xf0\x33\x2e\x69\xc5\x03\xbf\x0b\xf9\x3c\x0e\xf0\x95\x6b\x20\x0e\xf1\xb4\x21\xcb\x62\x03\x2c\x09\xb1\x4f\x5b\x7f\x9d\xde\xb3\x7a\x7d\xa5\x6b\x23\x45\x76\x42\x5f\xdc\xf2\xb9\x83\x94\xaf\x8a\x37\xce\xfd\x63\x48\x5a\x20\x0e\x92\x56\xc3\xf9\xcc\x77\xd0\x1a\x36\x54\xf3\x7d\x12\xb9\xec\xa6\x62\x86\x12\x92\xf5\xba\xb4\xdd\xbe\xc7\x53\x7d\x4a\xc9\x4a\xa4\xe9\xc3\xed\x0b\x94\xca\x43\xf4\x19\x31\x1f\x9f\x7c\x95\x17\x14\xfb\xf7\x95\xbe\x03\x64\x93\x95\x32\x6b\xce\x3c\xca\x8e\xee\x62\x71\x57\x79\x0c\x08\xef\x17\xe3\xb8\x92\xfc\x11\x1f\x4a\x6b\x68\xdb\xec\xb5\x0d\xf5\x50\xfc\x1f\xad\xf4\x81\x3a\x76\x76\xb4\x5d\x40\x65\xc3\x27\x91\x7a\x22\xc8\xe7\xc6\xab\x5b\x74\xb9\x31\x4e\x8f\x0f\x4d\xa6\xca\x45\x92\x54\x4e\xc6\x5a\x5a\xc5\xce\xe6\x0d\xa4\x08\x10\x87\x10\x9a\x8e\x2c\xa6\xa7\xce\x4b\x87\xe0\xf1\xf9\x75\x9b\x6f\x4c\x4e\x13\x79\x51\xb7\x0d\xe6\x4d\xa2\x65\xbc\xa8\x62\xa5\x6c\x53\x56\x60\x77\x0c\xc4\x21\x46\xdb\xcd\xf2\xcb\x7b\xa5\x76\x42\x4a\xe5\x2a\xd2\x7d\x5c\xee\x11\x85\x7c\xe6\x66\x03\xb1\x1d\xf1\x77\xae\xde\xbe\x93\xde\x28\x2c\x00\x9f\x7a\x06\x71\x88\x24\x1c\x5b\x6c\xd9\xfb\x96\x0e\x2d\x37\xd2\x15\x35\x4d\x9b\x3f\x62\xbb\x30\xdd\x60\x7a\x4f\xa8\xf7\x5a\x6c\xd3\xb3\x17\xd2\xe2\xdd\x98\x50\x58\x10\x87\xb4\x89\x51\x7d\x7b\x85\x93\x4d\x9f\xe7\xda\x7a\x1b\xed\xfe\x8c\xc0\x97\x19\xdd\xe4\xb1\x1e\x38\xb6\xf9\x4e\x50\x7e\xbf\xad\x4c\xd4\x03\xb6\x89\x01\x1c\xe2\x69\xc3\xdc\x1a\x70\x89\x29\x4b\x32\x75\x4f\x5b\x66\xca\xb5\xa8\x02\xe4\x24\x18\xb0\x4c\xb1\x5e\xcd\xf4\xd6\xf0\xe4\xfe\x2a\xea\x3a\x80\x46\x1b\x88\x83\x46\xdb\xe4\xb9\xfe\xc8\x41\x02\x3e\x2b\xad\xfd\x68\x4a\x83\x5f\x61\xbd\x5c\xab\x39\xb3\x91\x39\x47\x71\x2b\x55\xea\xa3\xf8\xa8\x1d\x68\x57\xb2\x14\x7c\x0b\x1e\xcb\x6b\xc3\x3b\x7d\x40\x1c\x22\xab\xe2\x25\x02\x21\x2a\x85\x93\x6e\x4c\x92\x3a\x3e\xc1\x56\xc9\x16\xaf\x14\x94\x8a\xe2\x29\xaa\x39\x9f\xd7\xb0\x3d\xf1\xeb\xb8\x0b\xbb\xe4\x20\x0e\x21\x2d\xb9\x54\x4b\x6f\xd3\x9d\xb0\xeb\xd9\xee\xb9\x34\x2a\x3c\x3e\x92\x14\x62\xc4\xbb\x5b\x06\x77\x9d\xdf\x39\x7e\x1f\x42\x9b\x75\x84\xd7\x63\x40\x1c\x22\x09\xd2\x7f\x16\x92\x2b\x02\x15\x76\xf4\x62\xbe\x58\x59\x26\x78\xce\xbc\xfd\x3c\x56\x5b\x3e\x32\x64\x42\x25\x40\x8d\x4a\xd9\x8a\xcf\x08\xdf\xd5\x00\xe0\x10\x49\x60\x79\xfd\x55\xd2\x26\xf0\x96\x9a\x0f\xdb\x0d\x27\x9b\x0b\x7c\x28\x53\x96\x34\x33\x0b\xd7\x89\x22\x9d\x9e\x19\xc5\xed\xff\x60\x85\xef\x4b\x03\x71\xc8\xab\xc2\x58\xe5\x1a\xd9\xa5\x1e\xb3\x67\xbb\x64\x1d\x32\xd5\x27\x08\xf1\xb1\xe7\x37\xe3\xb8\xb6\xcb\x53\xe6\xe5\x66\x6f\x56\xa4\x06\x42\xd2\x02\x71\x90\xb4\x0e\xce\x25\x2d\x90\x2f\x7a\x56\x5a\x2a\x2c\x1b\x0d\xb8\xc5\x8e\xdd\x3d\x64\xf2\x86\x12\x7e\x62\xf5\x54\x69\xfc\x74\x2c\xd4\x39\x2f\x8c\x1b\x64\x53\x1e\xb0\x91\xc1\xd7\x59\x81\x38\xe4\xad\xfb\x01\x1d\xc5\x75\xf3\xea\x57\x7a\xc7\x04\xbf\x74\xc8\xb9\xdc\x7b\x61\x5a\x7f\xfa\x4b\xd8\xee\x49\x2b\xff\x13\x6a\x9c\x29\x0b\xf8\x2a\x23\x10\x87\x90\x96\xf5\x32\x6e\x66\x6d\xd5\xaf\x0c\xc5\x21\x83\xb1\xe4\xfb\xb4\x71\x7f\x49\x06\xef\x96\x2e\xe8\xa0\x3d\x34\xba\xa4\xa7\x27\xf3\x08\xbe\x89\x10\xc4\x21\x77\x20\x90\xe5\xb1\x39\x5b\xd6\x6a\x86\xd1\xba\x07\x5c\xdb\xdc\x9d\x8b\x36\xe0\x7a\xaa\x21\x7e\xc3\xe4\x3e\x0b\xf7\x9d\xed\x35\x0d\x78\x7c\x81\x38\x64\x0d\x99\x90\x93\xd9\x1b\xb3\x3c\xed\x17\x1e\x2a\xe3\xa2\xf0\xec\x6d\x6c\xeb\x08\x2c\xe0\x0b\xe3\x5c\x3a\xc8\xdb\xc0\x31\x0b\xa0\x80\x2b\x86\x80\x38\xc4\xd3\x9e\xfb\xe4\xfb\xb6\x1e\xb7\x2b\x3b\xb6\x92\xec\x3b\xb4\x15\xcb\xd7\x7f\x89\x23\x02\xdf\x27\x75\x08\x19\x90\xa3\x8d\x9a\x73\x49\x54\x53\x1c\x24\xfc\xd7\x7c\x5f\x3d\xec\x63\xf0\xb7\x8c\xd8\xfb\xbc\x64\xa5\x92\x24\xc8\x83\xf5\x42\x73\xa0\x73\x75\x11\x75\xd1\xfa\x01\x2a\x5b\x4f\xdc\xb0\xc3\x7f\xd0\x43\x61\x96\xe8\x76\xd1\x64\x31\xf9\x26\xda\xe7\xd4\x37\x9a\xcb\xf2\xd7\xb7\x79\x1f\x86\x1d\x93\xd9\x58\x1d\xbc\xe9\xc6\x72\xd1\x46\x98\xef\xa0\xc8\x67\xcd\xf7\xd6\x8d\xde\xd4\xfe\x7a\x1a\xfd\x2e\x0f\xaa\xa7\x38\xbc\x7b\x26\xb3\x28\x45\x34\xaa\x6b\x04\xa1\x91\xc6\x69\x01\x7d\x93\x5e\x05\xff\x41\xd3\x24\x8a\x7a\x93\x2b\x3c\x5c\xd1\x49\x76\x45\xeb\xca\x32\xb2\xc5\xdd\x63\x5c\xac\xd3\x93\x2b\x95\xdf\xbc\x6b\xcd\x4b\xb3\x7a\x0f\x9b\xef\xa0\x98\x50\xcd\x77\xa4\xf9\x1e\xcb\xde\xe3\x38\xb4\x18\xa0\xf7\x8a\x9a\xb0\xe9\x2d\xad\xd2\x1b\x9b\xd4\x44\x67\x5b\x8e\x3f\x31\xbf\x22\x27\x54\xbe\x93\x74\x55\xfc\xf3\x04\x47\xfc\x8c\xf9\xee\xe7\x11\x49\x90\x5c\x2f\xf5\x5c\x8b\x5d\xf6\xa0\xdb\xb5\x47\xa9\x1b\xed\x5a\x21\x27\x77\xba\x7d\x0a\x97\x67\xc1\xc2\x1b\x51\xd9\x7f\x6f\xf2\x8c\xf9\xfe\x72\xc1\x6e\x39\xdd\x36\x78\x9b\xb3\x99\xb3\x53\x95\x8f\x62\x4c\x67\xba\x50\x84\x76\xa7\x36\x42\x62\xae\x4d\x99\x66\x61\x5a\xeb\xdf\x9b\x3c\x63\xbe\x67\x8d\x4a\xec\xa2\x4b\x6d\x60\x3d\xde\x2f\xe8\x35\x7a\x36\x9d\x42\x51\xc6\x80\x99\x63\x5b\xf1\xad\x0e\x6d\xa5\xe7\xf0\x81\x1a\xd9\xbf\x37\x79\xc6\x7c\x27\xf4\x55\xb0\xaa\x64\x4b\xc9\x58\xa6\x38\xf2\x94\xe1\xcd\x1f\xd9\xac\x26\x2f\x2c\x11\x30\x19\xf1\x8f\xba\xfb\xa2\xde\x91\xdf\xef\xdf\x9b\x3c\x63\xbe\x2f\xfe\x16\x8f\xc2\x20\xb3\x9c\x48\x28\xaa\xb0\xd0\x3e\x79\xeb\xc2\x51\x64\xb0\x51\xad\x32\x21\x8a\x8b\x57\xe4\xbb\xc6\x78\x85\xfc\xdf\x9b\x3c\x63\xbe\x77\x6e\x8c\xbf\x08\x93\x27\xee\x15\xde\xac\x88\x2b\x99\x0b\x23\xfb\x38\x69\x50\xaf\xae\x63\xd4\xdb\x34\x57\x6e\xbf\xd3\x95\xd1\xf1\xef\x4d\x9e\x31\xdf\x77\x68\x3c\x9f\x7b\x64\x5f\xdb\xb6\xfa\xa4\xd6\x15\xfc\x36\x19\x9d\xeb\x12\xa9\x05\x8f\xb5\xeb\x7a\xeb\x4c\xba\x64\x63\x4f\xa0\xd4\xff\x66\x4a\x0e\x1a\x8a\x67\x5f\x6e\x27\x03\x42\x69\x38\x68\xda\x7c\x0d\x07\x84\xed\x8f\xc3\x29\xe8\xc6\x99\xa6\x62\x38\x89\x72\x49\xfd\x55\xc5\x25\x3f\x9f\xb4\xc3\x47\xf2\x40\x1c\xe2\x7f\x3d\x21\x62\xd1\x5c\x0d\xf7\x45\x32\x16\xa3\x19\xdd\x47\x8c\x1e\xa1\xc3\xea\xe6\xef\x8f\x15\xf1\xfd\xe8\xdf\x32\xc5\x33\xde\x78\x00\x4f\x19\x40\x1c\xe2\xe5\x36\x32\xc1\xde\x30\x3d\x45\x19\x17\x37\x56\x88\xef\xc8\xc6\x4a\x57\xa3\xe6\xd1\x3c\x92\x81\xe5\x20\x70\xb4\x59\x17\xa1\xa8\x3a\x07\x85\x05\x71\x88\xbd\x5a\xce\x56\x4e\xe6\x24\x5c\x47\x43\x39\xa7\x5f\xee\xb2\xfc\x1d\xfd\xa2\x11\xb3\xbb\x30\x2d\x99\xf0\x00\xff\xf4\x84\x4a\x56\xef\xf6\x63\x28\x2c\x88\x0b\x94\x40\xfd\x6f\xd8\x3a\x8b\x5a\xc2\x2e\x32\x0e\xcb\xb1\x9f\x2c\x28\xbc\x4f\x54\xb0\xe3\x65\x6f\xf2\x0a\x89\xe7\xc9\xb1\xfd\x91\x76\xba\x69\xe1\x24\x03\x85\x05\x71\x88\x9f\x2c\x73\x81\xff\x65\x0c\x6a\xd9\xc2\xe3\x67\xd1\x28\xd3\x47\xb7\xd6\x79\x7f\xf8\x66\x62\x88\xee\xb6\xc6\xb3\xd7\x97\x9b\x25\x0e\x74\x41\xe6\x3b\x88\x83\x6a\xbe\x9f\xcb\x7c\x07\xfd\xe3\x9e\x55\xd6\x45\x6e\xc6\xc7\xf8\x71\x7f\xc3\x63\xd9\x7c\x75\x70\xd7\x02\x0e\x7c\xbd\xef\x7c\x6e\x89\x16\x4c\xfd\x3e\x11\xdb\xdd\x6a\x5a\x33\x0d\xf5\x1e\xc4\x21\x94\x15\xa5\x96\x72\x9c\xd0\xae\x1e\xb7\xc5\x1b\xe8\xe1\xf5\x88\x44\xb8\xab\xbc\x50\xf8\xae\xb9\x2c\x67\x99\x38\xc9\xc5\x37\x7e\xd1\xdf\xa1\xb0\x20\x0e\xa1\xac\x68\x4e\xb1\x53\x91\x9a\xbb\xc4\xd9\x7d\xe1\xf4\xa2\x89\x9c\x4e\x35\xc5\xaf\xee\xe0\x69\x56\x85\x4b\x7e\x7a\xfe\xcd\x21\x3c\x1a\x3e\xe4\x05\xe2\x10\xca\xba\xce\x18\x41\xff\xc4\xbf\xe8\xa1\xba\xf3\x84\xd6\x4d\xee\x90\xbb\x8c\x74\x1d\xe8\x31\x37\x54\x38\x9c\x7b\xf1\xdb\xe5\x48\xef\xdc\x81\xc2\x82\x38\x84\xb2\xf4\xb0\xbe\xe4\x73\x12\x0f\x7b\x6f\x9a\x09\xd7\x5e\xf6\x9a\x68\x64\xed\xbf\x64\x58\x63\x16\xf1\x9e\xe8\xf7\xa4\xbb\x2d\x46\x1d\xbc\xc3\x12\xc4\x21\x7e\xb2\xaa\xb7\xe1\xd7\x7a\x1f\x4f\x63\x8d\x70\xfa\x10\x3b\xe7\x3a\x38\xb6\x47\xed\x3e\x91\x48\xfe\xc6\x43\x92\x67\x17\xe6\x4b\x89\x9f\x09\xcd\xc8\x41\x1c\x54\x08\xea\x7c\xe6\x3b\xe8\xcd\x7a\x56\x5a\xb6\x19\x0e\x2d\x7c\x84\x7f\x19\x27\xad\x1d\x97\x87\x9e\xc8\x36\xa1\x7c\x22\x19\x99\x16\x79\x4d\x7e\x51\x50\xfa\xb2\x52\xbe\x13\x7c\x10\x09\xc4\x21\xa4\xe5\xab\x46\x7f\xd5\xec\xf0\x3d\xf5\x1f\x4f\xa7\x24\x15\xd7\x9f\x56\x64\x58\x07\x28\xaa\x79\x5f\xad\x2a\x99\x98\xd3\x5b\x34\x5b\xe0\x7a\xc4\x20\x0e\x21\x2d\xcc\x8a\x95\xdd\x8b\x2f\x8a\x1e\xfa\x37\x6a\xd4\xdf\x69\x94\xc2\xb1\x77\x7b\xc0\x42\x65\x18\x3a\x22\x24\x15\xf5\x42\x54\xb5\x12\xde\xda\x03\xe2\x10\xd2\x3a\xc2\x64\x21\xd0\x32\x9b\x1f\x2f\x62\x63\x64\xd8\x0c\xa9\xd0\x3c\xce\x08\x17\xa5\x89\x74\x16\x2d\x22\xd8\x65\xb6\xc2\xbc\x0f\xef\x42\x01\x71\x08\x69\xe1\x4d\xa3\x25\xcc\x87\x12\xcc\x2a\xa0\x5d\xf3\x47\x25\x90\x08\xad\x2b\xf3\xe8\xf1\xe6\xff\x28\x94\x28\x6f\x73\x58\x6a\xae\x08\x1f\x4d\x05\x71\x88\x9f\x4c\x08\xe3\x46\xfd\x6b\x8a\xac\x84\xce\x4b\xd3\x0c\xea\xca\x53\x4a\x01\xa4\x5a\xbf\xef\xde\x92\x7c\xfa\x35\x8d\x64\x85\x50\x22\x2d\x1e\x92\x16\x88\x83\xa4\x75\x3e\xf3\x1d\x34\x83\x3a\x2b\xad\x1c\xfc\x40\x3f\x47\xde\xc8\x7e\x1c\xb2\x24\x22\x1a\xa5\x1c\x54\xd9\x6c\xad\xd7\x31\xf2\xf4\xd7\x33\xd9\xf5\x7b\x5e\xc7\x8d\xc1\x5f\x65\x20\x0e\x79\xd0\xcf\xe9\x73\x6d\xfe\xe0\x65\xcf\xf0\x88\x65\x79\xaa\x0b\x6a\x7d\x89\x03\x1f\x79\x9e\xfb\x46\xbc\x9c\x65\x70\x30\xf7\xd3\xe4\x80\x6b\x52\x83\x38\x84\xb4\x32\x7a\xfd\x2f\x1e\x1b\xfd\xfa\xb3\x46\x11\x3f\x66\xf8\xee\x4e\x98\x35\x71\x7e\xb6\xb5\xdf\xb7\x37\x12\x6e\x97\x2e\xe7\xf4\xd8\xdf\x80\xb7\x0a\x00\x38\x84\xb4\xf4\xaf\x1f\xea\x97\x97\x58\xf0\x56\x59\xd6\xc4\xd2\x5e\xa5\xf0\xae\x9c\xa0\x7e\x97\x38\xfb\xe1\x19\xc3\x38\x47\xcd\x0b\x16\x46\xf8\xc5\x05\xe2\x10\xd2\x8a\x61\xb0\x14\x56\x38\xdc\xbe\x53\x50\xff\x49\xa5\xd7\x63\x7f\x22\x09\xe7\x39\x97\xe3\xe6\x76\x7a\x64\x54\xda\x63\x41\x0f\x4f\xb8\x8c\x38\x88\x43\xfc\x64\x2f\x5b\x03\x24\x29\x25\x8c\x5a\xea\x89\x9e\xe9\x49\xb1\xe5\x91\x9b\xf7\xe7\x65\x3f\x0b\xde\xd9\x1e\x31\x64\x43\xdd\x8f\x31\x10\x83\xa4\x05\xe2\x20\x69\x9d\xcf\x7c\x07\xcd\x94\xff\x8f\xdd\x68\xdc\xda\x5c\x06\x2b\x74\x3c\x5b\x81\x76\xd7\xd8\x14\xf5\x85\x9d\xf9\x17\xcb\xc4\xc4\xcc\xbe\x85\x26\x4b\x95\xe6\x31\xf2\xc1\xab\x9f\x20\x0e\x21\x2d\xd5\x9d\x8d\x11\xf9\x37\xf1\xd1\x8f\x96\x2b\x3e\x56\x1b\xd4\xcd\x3f\xa0\x30\x6c\xc9\x5d\x78\x3f\xfe\xe9\x76\x88\xca\x9b\xc9\x21\xf8\x40\x3d\x88\x43\x48\xab\x59\xb1\x5e\x8d\xe5\x1e\x16\x3e\x2d\x46\x5e\x6e\xce\xa5\xa9\xbc\xdc\xe1\xc3\x38\x0a\x2f\xea\x3e\xed\xa1\xa9\x08\xa9\x86\x47\x2f\xa1\xb0\x20\x0e\x21\xad\xb0\xe7\x76\x7a\x5f\x4e\x92\xeb\xb9\xfb\xee\x2d\xc7\xfc\x8e\xc4\x13\x5c\x7c\xbd\x52\x80\xc5\x57\x15\x2f\x4a\x78\x6d\xce\xc5\x0f\x2e\xef\x02\xe2\x10\xd2\xa2\xbf\xad\x72\x84\xfe\xf3\x65\x8a\x37\x45\xad\x7b\x01\x5b\x03\x5f\xc0\x5d\x6f\xc5\xdb\x7f\xfe\x12\xc7\xa3\xce\x5a\x6d\x62\x26\x5f\x82\xc2\x82\x38\xc4\x4f\x66\xf3\xcd\x52\xf7\xe1\xa3\x7d\x2e\xf9\xf7\x6d\xdb\xbf\x8b\x1b\x9a\x3c\x56\xb0\x5d\x6e\x90\x67\xc7\xf3\xc4\x6c\xc6\xa8\xef\xaa\x19\x41\xd2\x02\x71\x90\xb4\xce\x67\xbe\x83\xbe\x88\xce\x4a\xab\xf3\x50\x7f\xc2\xed\x56\x9d\xd6\xe0\xab\xd8\x59\x6d\x5a\xaa\x8f\xbb\x02\x83\x5c\x8f\x25\x70\x8d\xab\xd4\x3e\xe5\x5f\x35\x7e\xfb\x02\xea\x3e\x88\x43\x48\x4b\xed\x8d\xc9\xf4\x96\xec\xc1\xdc\x8c\xf2\x38\xbb\x55\xd9\x61\x07\x33\xe6\x0f\x8e\xda\xc9\xa6\xdb\xd8\xe1\x91\xde\xd5\xec\x9e\x70\x79\x17\x10\x87\xdc\x8d\x66\xa6\xa5\x70\xf3\x02\x9b\x5a\x43\x47\x17\xe6\x37\x03\x83\xf1\xe0\x7b\xbf\x23\xe6\x86\x33\x5b\xed\x4d\x25\x19\xcb\x83\x57\x61\x87\x14\xc4\x21\xa4\xe5\x7d\xc9\xdc\xa1\xbb\x36\x64\x53\xdd\x48\x73\xb6\x2d\x34\xcb\xe4\x71\x47\x83\x46\x79\xd7\xd0\xcd\xd0\x67\xfa\xc2\xf7\x23\x8c\x60\x1b\x0b\xc4\x21\xa4\xa5\x1d\x7c\x2f\x73\x7b\xc4\x6e\x63\x16\xab\x0d\x35\x74\x60\x2e\x81\xb9\xf8\xc7\x7a\xa8\x3d\x4e\x6d\x99\x85\xeb\xe6\x3d\x01\x2b\x78\x7c\x81\x38\xc4\x4f\xc6\xd8\xd6\x28\xd1\xb6\x59\x52\x46\x78\x75\x36\x92\x37\xaa\xc9\x5a\x98\x0b\xdd\xd5\x21\xa0\xa5\x5d\x3c\xac\xef\x61\x40\x6d\x87\x0c\x24\x2d\x10\x07\x49\xeb\x7c\xe6\x3b\xe8\xcb\xf7\xac\xb4\x78\x3a\x17\x04\xe4\x51\x43\x6a\xee\x26\x48\xda\xac\x8f\x15\x71\x54\xcc\x15\x29\x58\x1f\xcf\xe7\xd6\x3f\xab\xb3\x55\x63\xde\x67\x82\xba\x0f\xe2\x10\xd2\x2a\xdb\x1d\x42\xe1\xcd\x5b\x8a\x78\x75\xe7\xf7\x6b\xae\x3f\x1f\xac\x9a\x89\xf6\xfd\xe6\x5c\xda\x84\xca\x94\xee\x4b\xbd\xc7\xda\x84\x8b\xef\x82\x38\x84\xb4\x1e\x24\x18\xc8\xa5\x0f\x7f\x51\xfd\xe9\x3a\x43\xeb\xf3\x8b\x3c\x24\x7e\xeb\x85\xd5\x90\xd7\x54\x54\x9f\x47\xc5\x54\x26\x35\x09\xfc\x39\x0b\xe2\x10\xd2\xb2\xe3\x88\xc8\xc1\x38\x5d\x7d\x13\x72\x91\x6b\xe6\xc9\xb7\x5f\x33\x62\x3f\x28\xb4\x76\x30\x98\x9e\xab\x24\x7c\x5b\xec\x3f\x2e\x37\x80\x4f\xb5\x01\x38\x84\xb4\xf6\x3e\x72\xa6\xff\x9d\xaf\x93\xb6\xf7\x7e\xef\xaa\x5f\xda\x70\x43\xb0\xd1\xf7\xbb\x97\x7b\xfd\xda\xb3\x0f\xbc\xfd\x5b\xb6\xee\x70\x69\x0f\x10\x87\x2c\xd3\x2f\xa0\x22\x11\x60\x46\xcf\x81\xf2\x5e\xfb\x6e\xc0\x29\x7a\xa7\x9d\x9d\xef\xa7\x81\x54\x5d\xce\xcf\x0c\x6f\x4a\x17\xb3\x12\x3d\x20\x69\x81\x38\x48\x5a\xe7\x33\xdf\x41\x2b\x1c\x67\xa5\x45\xd7\xc3\xc0\xf6\x67\xcc\xd6\x81\x6c\xf9\xf7\xc8\xbe\x00\x39\x75\x52\x84\xec\x9d\xce\x87\x0b\x68\x5a\x6f\x4b\x46\xa9\x2f\xd4\x52\x42\xdd\x07\x71\x08\x69\x25\xf7\x5f\x2d\x4f\x7a\xd3\xfa\x4a\xa3\xb2\x49\xed\xe1\xad\x47\x4b\xb5\x0c\xf4\xcd\x19\x4a\x52\xdc\xc5\xbf\x77\x68\xcb\xbe\x7a\x15\x40\x61\x41\x1c\x42\x5a\x5a\x54\x43\xf2\xa9\x5e\x79\x16\xce\x95\x27\x8d\x7b\xca\x92\x02\xce\xa8\xf5\x4a\x1a\xe1\xde\x59\x84\x16\x3a\x6a\x9f\x02\x7e\xc2\xf3\x6d\x10\x87\x90\x16\x7b\xad\x6d\xdd\x82\x6f\x1e\xa6\x29\xa9\x7e\x21\xe1\x55\x69\xae\xa2\x8d\xc2\x25\x74\x36\xd5\x2b\x94\x72\x3b\x63\x1e\x1e\xa1\xa2\x50\x58\x10\x87\x90\x56\x91\xc3\x35\x0b\x92\xaf\x37\x48\xb7\x5e\x27\x0d\x86\xa4\x86\x93\x31\x27\x59\x46\xe7\xaa\xb0\x8b\x10\x87\x56\x4d\x3b\x15\xd7\xae\x42\x61\x41\x1c\xe2\x27\x7b\x98\x2a\x69\xfa\x5b\x90\x53\x5a\x8a\xf3\xa4\x90\x75\xad\x5b\xc6\x48\xcb\x8b\x1a\x4d\x47\xd8\x33\x54\xda\xb7\xc4\x73\x58\x26\x0d\x92\x16\x88\x83\xa4\x75\x4e\xf3\x1d\xb4\x86\x0d\xd5\x7c\x3f\x63\xbe\x3b\x8b\xd2\xd2\x61\xc4\x32\x3c\xfe\x88\x4e\xff\xc8\x96\x29\xf6\xb5\x8d\xbb\x6d\x48\xb2\x44\x62\x0f\xf9\x62\x5b\x67\x98\xfb\xc7\x7f\x37\xdf\xc5\xcf\x98\xef\x3a\x36\x34\x83\x45\x6f\x96\xae\x9a\x10\xdb\x98\xac\x3c\x90\x34\x11\x88\x5a\xe3\x9a\x61\xb8\xff\xd7\x81\x57\x86\x23\xc6\x68\x95\xfd\x7f\xb3\xd2\x07\xea\xd8\xd9\xd1\x56\xcc\x2d\x6c\xf8\xdb\xcf\x3d\x5f\xca\xef\xcf\xb7\xc1\x90\x1e\x4a\x03\x66\x7b\xf4\x60\x74\x8d\xe3\x05\x25\x8e\x6f\x17\x0b\x03\xe0\xa2\x6a\x20\x0e\x31\xda\x4e\x6b\xfb\x5f\xb8\xdf\x33\xf2\xc4\x4f\xd6\x9c\xa2\x7d\xdf\xcf\x43\x9c\x29\xb6\x54\x6d\x6b\x39\xd1\xc3\x5f\x26\x6d\x12\xd2\xd1\x0c\x85\x05\x71\x88\xd1\x16\x80\xf9\x83\x7b\x3f\xde\x47\xb8\x78\xf9\x7b\xe2\x7d\xcc\x1b\xcf\x43\x9c\x92\x15\x9e\x52\x5c\x10\xbf\xe2\xf8\xcb\x35\xf8\xe3\x2e\x5c\x91\x03\xc4\x21\x46\x1b\xe7\xde\x5a\xc9\x68\x64\x7a\x88\x8e\x35\xfe\xe4\xcb\xbc\x54\x4e\xbc\xdf\x26\xb8\x65\x02\xa3\xbf\x56\x2c\x5a\x77\x2b\x3c\x7a\xe0\xab\xc2\x40\x1c\x62\xb4\x7d\x0d\x5c\x93\xea\xd9\x7e\x5b\x33\xf4\xf2\x39\xe6\xb1\xfd\x4c\xf2\x5b\x61\x6f\xfc\x2b\x53\x7f\x3a\xa6\x35\x5a\x66\x05\xc3\x92\x4d\xa0\xb0\x20\x0e\xf1\x93\x61\xf6\x57\xd9\x4c\x36\x7c\x74\x5c\x93\x6d\xe0\xd7\x5d\xa9\xc6\x8a\xd5\xa8\x8a\x57\x5b\x97\x99\x41\x47\x15\xe3\x32\x9e\xe7\x72\x86\x46\x1b\x88\x83\x46\xdb\xf9\xcc\x77\x90\x80\xcf\x4a\xcb\xbb\x60\x10\xf3\x49\x40\x73\x54\x68\xaa\x2b\xd5\x38\xa6\xcb\x93\xa5\xb4\x63\x3e\xb2\xdc\x0f\xda\x31\x53\x3e\x09\xb5\xb8\x95\x0e\xf0\xcc\x0b\xc0\x21\xa4\x65\xd4\x4c\xd1\x4f\x83\x63\x3f\x99\xe3\x67\xc5\x21\xac\x22\x99\xc8\xa0\x5d\xd3\xa3\xb1\x35\xb8\xd6\x88\x45\x6f\xc2\x29\x11\x18\x08\x6f\xd2\x04\x70\x08\x69\x0d\x5f\xe8\xb8\x36\xe8\xf4\xa8\x95\x89\x2c\xb5\x99\xa8\x6a\x59\x30\xd4\x37\x75\x86\x6e\xd9\xc0\x24\x8d\x23\x88\x79\x3e\x15\x13\xbe\x92\x13\xc4\x21\xa4\x75\xa5\x45\x3a\x3c\xfd\x81\x71\xce\xd7\x57\xd9\x37\x32\xd5\x98\xae\xa9\x1b\x1c\x87\x93\x36\xd5\x2b\x56\x92\x8f\xe8\xa3\x4c\x17\x6d\x41\x61\x41\x1c\x42\x5a\x14\xa4\xe3\x8d\x64\xc4\xa3\x41\x37\x67\x5b\xf3\x31\x75\x3e\xa1\x30\xe5\xa1\x52\x72\x48\x7c\x15\x18\x6b\xcf\x0c\x6a\xea\x44\x85\x73\x0b\xe2\x90\x35\xd0\x32\x6d\x86\xd9\xeb\x24\xde\xb6\x2b\x9c\x6a\x6d\xa3\xc6\x96\x4f\xde\xba\xb6\x44\x79\x3d\x88\x88\x87\x20\xe6\xd5\x02\xf9\x4c\x02\x24\x2d\x10\x07\x49\xeb\x7c\xe6\x3b\xc8\x17\x3d\x2b\xad\x08\xfe\x95\x31\x2e\x0c\xc7\x97\xde\xd7\x8a\x68\x86\x9d\xff\x1f\x6b\xff\x1d\xcf\xe5\xfb\xff\xff\xe3\xc8\x96\x4d\x66\xd9\xb3\xec\xbd\xf7\xce\x5e\x85\x42\x91\x10\x32\x22\xab\xec\x90\xbd\x67\x44\x44\x94\xbd\xf7\x2e\x32\xb3\x09\xd9\xb2\x52\x94\x99\xdf\x5f\x8f\xf3\xf3\xfc\x9e\x8f\xf7\xe5\x77\xb8\x5c\x7a\xfd\x7f\xbd\xdc\x4f\x8f\xd3\xf5\x38\xcf\xe3\x3c\x6e\xc7\x88\xa0\x8c\x79\xc6\xc8\x6f\xad\x8f\x17\x48\x21\x55\x26\x42\x21\xf6\x0e\x9a\x84\x03\xe2\x60\x6a\xbd\x8c\xe1\x8f\xbc\x7a\x2b\x2f\xd5\x63\xa2\xc6\x48\xd5\x6c\xde\x13\x6b\xa9\x51\x71\xf0\x77\xd7\x97\xde\x2b\xea\x5c\x9b\xca\x77\x50\xa0\xb2\x00\x0e\xa6\x16\xb9\xe6\xfb\x79\xa1\xbf\x93\x41\x3a\x46\x57\x7c\xbf\xcb\x52\x86\x5f\xfd\xaa\x35\x28\x7e\x7d\x83\x16\x33\x89\x3b\x9f\xc3\x36\x02\x9a\x80\x01\xe2\x60\x6a\x85\xbc\x96\xa8\x58\xe4\xf5\xcf\xfd\x7a\x52\xa6\xe2\x1c\x7f\xed\x56\x78\x28\x5b\xeb\x4a\xfb\x62\x97\x3f\x56\xbd\x57\xcb\xbe\x2c\xd4\x4f\x04\x71\x30\xb5\xc8\xa9\xb0\xf9\x50\x28\x18\x52\xd7\xc7\xe7\x92\x58\x0b\x7c\x2f\x7d\x78\xfb\x2e\x03\x43\x99\xbc\x85\xc2\xad\xe3\xcd\xba\x56\x38\xb4\x1a\x00\xc4\xc1\x27\x38\x5d\x74\xe5\x7b\x11\xc7\x68\x8f\xa7\xe7\x5b\x46\x75\x86\x47\x51\x82\x34\xa6\xf4\x7f\x3e\xab\x54\x4a\xcb\x93\x34\xbe\x10\x9e\x70\xfe\x14\xfd\x21\xe2\xbf\xe1\xbb\x9c\x4e\xd6\xf0\x67\x75\xad\xcf\xa1\xd4\xc1\xfc\x94\x69\x0b\xf5\xac\x9b\x7f\xab\x8e\x1f\xf6\x89\x9e\xb2\x4f\xde\x88\xfc\x18\xf9\xdf\xc3\x5c\xd6\x0f\x89\x50\x7f\x36\xa5\xf0\x05\x1a\x4e\x56\xbf\x7e\xdf\xaf\x13\x48\xdf\xd8\xb5\xed\xa3\x5d\x12\xbd\x4b\x70\x65\x4e\x9a\x0b\x1e\xbe\x83\x2a\x23\x87\xef\xc7\x5d\x7c\x41\xf9\xa1\xf1\x72\xed\x19\x68\xba\xcc\x11\xea\x1f\x43\x7d\xe2\x4e\xf8\x75\x70\xbe\x26\x76\x85\x4d\x67\xdd\x69\xbb\xf7\x1f\xd4\x2b\x64\x71\xe5\xee\x49\x80\x97\xe4\x1e\x1f\xa9\x68\x96\x9a\xcc\x63\x87\x03\x41\xe7\x82\x36\x1b\x41\x22\x39\xbf\xd4\x27\xa6\x73\x50\xf8\x0e\xaa\x89\x38\xf3\x1d\x1e\xbe\x7f\xa7\x6d\x34\xbd\x86\xdd\xb2\xc8\x27\xf5\x51\x5b\x50\xb1\x2f\x21\xca\xab\x73\xdf\x8a\x8b\xf7\x79\x4f\x25\x57\x09\xf1\x5a\xc2\x9d\x7f\xee\xe0\xf8\x21\x85\xef\xcc\xd3\xd3\x18\x45\xa4\xbc\xd3\x13\x6b\x69\xe8\xa1\x4d\xba\xe2\xa2\xe9\xd8\xe1\x97\x0b\xc3\xae\x7e\x73\xaf\xb6\xd0\xb4\x17\xa0\xf9\xf7\x4b\x22\x85\xef\xf5\xc5\x98\xce\x45\xb2\x39\xc1\xae\x27\x62\x79\x2e\xf4\x8b\x57\x7e\xe9\x7e\xca\xd4\xcc\x59\x2e\xd1\x5c\xee\xcc\xd3\xde\x16\xb5\xf9\xf7\x4b\x22\x85\xef\xe8\xed\xc4\xe5\x37\xa8\x96\x83\x26\xd9\xdf\x07\x97\x52\xad\x7e\x21\x47\xcf\xfc\x60\x57\xf4\xf8\xd6\x46\x00\x0f\x41\x40\xec\x55\xd9\x7f\xbf\x24\x52\xf8\x3e\xfc\xe4\x60\xed\x0e\x3f\xbb\x76\xb2\x59\x5d\xf2\x11\x4d\xfa\x7a\xcf\xd2\x50\x75\xb0\xd5\xdd\x4a\xbe\x07\x8f\xbb\x4d\x63\x0c\x5f\xfc\xfb\x25\x91\xc2\x77\x8a\x16\xd2\xa4\xe9\x34\xfb\xfb\x12\x95\x6c\x0f\xfd\x93\xfc\x9c\xca\x1f\x63\x2d\x9c\xb5\x09\xc4\x67\x69\x14\xbf\xfc\x4d\x92\xf0\x3f\x38\x66\x1e\x29\x7c\x4f\xef\x95\xb7\x12\x0b\x1f\x1f\x22\x1b\xcf\xea\x6c\x2f\x22\x44\xa7\xd0\xc0\x60\x1d\xea\x17\x66\x6d\x2a\xbb\xf6\x73\x73\x91\x27\xef\xdf\x2f\x89\x14\xbe\xaf\x48\x55\x9a\x10\x37\x87\x59\x9d\x39\xf9\x8e\x12\xab\x5d\xe5\x7f\x89\xf9\xb0\xca\xbf\x70\xef\xe5\x98\xc6\xc6\x18\x26\xcf\xf2\xe4\xff\xa6\x4b\x0e\x6a\x8a\xc8\x2f\x37\x61\x35\x86\x7d\x1c\x7d\xfd\x12\xbf\xaf\x01\xe6\xf9\x09\x39\x9a\x64\xac\x02\x42\x0e\xbb\x44\x73\x8c\x31\x1f\x84\x65\x6f\x24\x43\x5b\xc1\x82\x38\xd8\xcb\x4d\xc5\xe9\xed\x9d\xed\x61\x99\x2a\x8e\x9a\x9b\x68\x2c\xfb\xc7\x5f\x42\x95\xa6\x34\xfe\x6a\x65\x34\x1c\xa0\x33\x2c\x24\x35\xda\x41\x61\x03\x88\x83\x47\xa4\xc7\x55\xd4\x24\xac\x09\x42\xf4\xe3\x41\x8f\x69\xd9\x2f\xf5\xbb\x6f\x3f\xad\x16\xe0\x23\x18\xd6\xfa\xf8\x41\x29\xab\xc1\x0d\x1a\x63\x05\x71\xb0\x97\x5b\xf9\xf0\x0d\x4b\x55\x85\x52\xd1\x78\x7f\x92\x9e\x61\x69\xc3\x49\x86\x27\x0f\x39\x6c\xe3\xc3\xb8\x9c\xd4\x98\xc9\x79\x37\x55\xa1\x25\x79\x20\x2e\x50\x0e\xed\xff\x33\xb3\x7f\x21\x22\x57\x2a\x2b\xd3\xd8\x25\xf1\xdd\xab\x38\x3e\xdb\xb3\x21\x06\x3c\x2f\xec\x0d\xdd\xa4\x15\xb1\x0c\xbd\xd4\x74\x5a\x7b\x68\x66\x3f\x80\x0b\x94\x23\xfa\xff\x44\xa4\xa1\xc6\xcc\xc4\xca\x1f\xb7\x3c\x1c\xce\x16\xb2\xb5\x94\x70\x04\x59\xae\xeb\x38\x5e\xbd\xa4\x23\x6a\x36\x17\xbf\xf7\xec\xa7\x37\x22\x7c\x07\x71\x88\x33\xdf\x2f\x14\xbe\x83\x9e\xb8\xc8\x66\x61\xe8\xc7\x2e\x57\x6b\xcd\x4c\x50\xf7\x31\x16\xe1\x98\x7c\x2d\xef\x35\x63\xcc\x35\x0b\x39\xfe\xe4\x24\xa4\x98\x61\x90\x69\x01\x1d\x06\x06\xe2\x60\x66\x1d\x95\xfe\xe2\xf4\x8a\xff\x2e\x61\xc1\xf9\x36\xdb\x03\x0f\xbd\x98\xc6\xb6\x46\x6d\x44\x65\x73\x0f\x45\x23\x92\x71\x3b\x44\x11\xea\xdf\x80\x38\xf8\xc7\xde\x79\x69\x16\x57\xc3\xac\xd1\x75\x32\x3b\x83\x02\x9d\xfa\x12\xbb\xb7\x13\x6e\xef\x47\xf0\x63\xe2\xd5\x30\x3d\xb1\x7e\xc8\x40\xbb\x14\x80\x38\x98\x59\xa1\x7a\x7f\xaa\x96\x3b\x1d\x3e\xbb\xa3\x99\x58\xee\x6d\xba\x05\xbc\x54\x6c\xf6\x55\x68\x6d\x1a\xfc\x92\x2c\x6a\x94\x74\xa8\xbb\x8f\x28\x0b\xe2\x60\x66\xf1\xec\xbc\xe3\xd1\xb8\x72\xb2\xe5\x95\x6b\x7e\xe8\xb0\x29\x5d\x7a\x90\x10\x4b\x9e\xd2\x9d\xba\x5f\xcf\x9e\xac\x6d\x49\x3f\x0f\xcd\x07\x05\x71\x30\xb3\x70\x0a\xa7\x22\x07\x9c\xc5\xb4\xf7\x3f\xe5\xf8\xdf\xad\xd6\x0e\x78\x17\x39\xde\x52\xd9\x21\x29\xd8\x3d\xb8\xa5\x26\x90\xe5\xbf\x8f\xe8\x91\x83\x38\xc4\x41\x50\x17\x0b\xdf\x41\x6f\x56\x64\xb5\x64\xfb\xc6\xb1\xb0\xc7\xa9\x34\x6e\x1c\xd3\x09\xee\x66\xdd\xbd\xed\x83\xd2\x60\x27\x5d\xa1\x54\x7e\x5c\x26\xea\x15\xd6\xdc\xcc\x0e\x4d\x89\x06\x70\x30\xb5\x52\x74\x65\x64\xeb\xd8\x84\x85\x9f\xe2\x38\xb3\x0a\xb8\x25\xdd\x6f\xef\xae\x98\xf8\x9c\xd1\xcd\xa2\xa6\x44\xda\x81\xc6\x6b\xde\x81\x28\x0b\xe2\x60\x6a\xbd\xff\xd9\x3d\xde\x88\x51\xf6\xaa\xb4\x24\x5b\x90\xd1\xea\xea\x5f\x69\x32\x8d\x7d\xe6\x17\x77\x32\xcd\x24\x84\x43\xd4\x5d\x82\xa1\xdd\xec\x41\x1c\x4c\xad\xeb\x13\x13\x7c\xac\xaa\xca\x1c\x28\x77\x55\x85\x9b\xf0\x3e\xcf\xa4\x10\x15\xd7\x4e\x28\x3b\xfb\x18\xfc\xb5\xb2\x25\x0a\xc5\x82\x86\x27\x40\x1c\x4c\xad\x84\x00\x95\xcf\xd9\x6a\x53\xa5\xde\x13\x3f\xfd\x8a\x9f\x25\x58\x34\x46\x5b\x6f\xf3\xb7\xf0\xdb\x99\xab\x99\xea\xeb\x11\x5e\x85\x4e\xa8\x07\x71\x30\xb5\xf0\x63\x93\x70\x7c\xee\xf0\x92\x33\xcd\xf3\x33\xf9\x35\xc7\x25\xd5\xe6\xa4\xe6\x09\xb2\xb7\x47\x19\x19\xf6\x7b\x51\x26\xb6\x57\x43\x67\xbe\x03\x38\x84\x5a\x17\x0b\xdf\x41\x3d\x28\x64\xb5\x24\x8e\xc5\x52\x6e\xd6\xf5\xfc\x3a\x75\x1d\xcb\x4a\xb1\x54\xe5\x26\xca\x1d\xaa\xfc\xf2\x74\x8b\x66\x44\xfc\xb2\x56\xe5\x48\x38\x74\x5e\x0a\x88\x83\xa9\xa5\xbf\x85\x7f\xa0\x65\x38\x75\xa7\xbe\x63\xbe\xb3\x29\x3e\x95\xeb\x75\x27\xb7\x4f\x46\xcc\xc6\xf0\x0e\x2d\x31\x73\x16\xef\x1c\xb4\xc3\x2a\x88\x83\x0f\x08\xf3\xce\xb3\xf9\x0a\x1c\x96\xfa\xa2\xbc\xd2\x9c\xd5\x58\xc2\x28\xc1\x96\x15\x30\x25\x39\x23\x93\xc5\xf3\x57\x30\x8a\x5f\xf8\x0d\x0d\x08\x03\x38\x98\x5a\x4d\x8e\xcf\xc3\x7e\xdf\xb1\x18\x42\x59\xfe\xa9\xfc\x58\x58\xbd\x2a\xb2\x0a\xf5\x6d\xe0\x63\x52\x27\x6b\xba\xb2\xca\x54\xa3\x27\x0c\x88\xb2\x20\x0e\xa6\xd6\x44\xcc\x67\xe2\x2e\xcd\x0c\xb9\x8c\xa6\xf5\x9c\xf9\x97\xd3\xda\xb9\x74\x0b\xd6\x83\x44\xa6\xdd\x24\xc3\x45\x6d\xcf\xb7\x42\xa1\xd0\x0d\xc4\xc1\xd4\x62\x5a\x2e\xe0\x6c\xed\xd1\x0d\xbc\x35\x9b\x24\x33\x82\x23\xab\x78\x77\x5d\x9b\xd4\x24\x30\xed\xa8\x8a\xcd\xc6\x3e\x27\xd2\x10\x1d\xa1\x16\x88\x43\xa8\x75\xb1\xf0\x1d\xd4\x53\x46\x56\x6b\xb8\xea\x79\x4f\xa8\x76\x15\x11\xe1\xc6\x95\xa2\xaf\x41\xe9\xaf\xfd\x92\x6c\x18\x17\x1d\xba\x30\x76\x77\x43\xcd\x3c\x56\x7c\xa0\xd1\x19\x10\x07\x53\x6b\xd9\x83\xc9\xd0\xae\x8d\x5d\x3c\x94\xfe\xf9\xb5\x5f\x9a\x2f\xeb\xc9\x04\x2e\x63\x8e\xae\x3e\x94\x62\x93\xc2\x15\x5d\x30\xc8\x81\x4e\x6e\x03\x71\xf0\x79\x8e\x75\xb7\xc5\x77\xb6\x3b\x89\xd3\x9b\x4f\xf0\xd9\x18\x6c\x37\x13\xd0\xa4\x0a\xac\x9c\x59\x0a\xcf\xd8\x46\x13\x67\x1e\x17\x43\xcf\x58\x10\x07\x53\x2b\x29\x69\x4d\x60\x83\xc6\x28\x9f\x3e\x62\xde\x3b\x79\x4b\x42\x4a\xf1\x93\x8a\xfe\xb9\x8b\xaf\x47\x5e\x33\x93\x39\xc5\xc2\xd6\x10\x94\x8c\x00\x38\x98\x5a\xd1\x89\xb3\x13\x8a\x85\x94\xb7\x2a\xf5\x37\x92\xc6\x65\xdc\x73\x4c\x6b\x8a\xba\xd9\xeb\x84\x3e\xe3\x8b\x29\x5d\x77\x4d\x4f\x84\xe6\xcc\x80\x38\x98\x5a\xf4\xa3\x36\x34\x69\x1b\x13\x03\x68\x42\xb9\x69\xb4\xbf\x7f\x9c\x7d\x9d\x62\x55\xfe\xc1\x52\xdc\x21\x19\x7f\xf2\xfd\x41\xe5\xf7\x22\x84\x5a\x20\x0e\xa1\xd6\xc5\xc2\x77\xd0\x17\x11\xb2\x5a\x83\x77\x6a\xbe\xbc\xa9\xc3\x8c\x42\xc5\x34\x68\xf5\xed\x99\xf7\xd9\x70\x1e\x64\x0f\x2b\xbb\xe7\x74\xfc\xe8\x05\x63\x5a\xf7\x0a\xb4\xd8\x13\xc4\xc1\xd4\xb2\x63\x43\x61\x2e\x29\xb7\xc3\x44\x35\x5c\x40\x75\x2f\xad\x36\xc8\x90\xfa\x78\x6d\x16\xe3\x09\x59\x99\x69\x77\xb8\x8b\x3a\x03\x11\xb4\x90\x03\xc0\xc1\xd4\x52\x3e\xff\xb9\xe4\xe4\xe6\xfd\x86\xa0\xeb\x58\x7a\x3b\xd7\x29\x41\x3d\x93\x33\x3f\xd5\xb5\xd9\xb6\x8d\x7b\x58\x47\xc1\xb2\x1e\x7a\x6a\x81\x38\x98\x5a\x22\x37\xdb\xf1\x48\x38\x37\x2b\x3b\xcf\xf0\x53\xa4\xf6\x06\x59\x56\xb8\x15\x2b\x45\x03\x73\x44\x14\x5e\xbd\x7d\x57\x1e\x2c\x0a\xcd\x44\x02\x71\x30\xb5\xd8\x30\xfd\x4e\x36\x85\xdf\x8a\x98\xde\xbc\xa9\x3b\x3a\x54\x5b\x2f\x27\xa6\x6c\x97\x9f\xfa\x9b\x93\x56\x38\x4c\xaf\x67\x40\x06\xda\xfc\x14\xc4\xc1\xd4\x32\xf9\x5e\x70\xff\x90\x48\xe6\x35\x0d\x8d\xf8\xa8\x5c\x6a\x38\xf7\xb4\xb7\x31\x8d\xb5\x56\x72\x9e\x06\xb7\xa5\x8a\x3a\x11\x45\x15\x14\x63\x01\x38\x84\x5a\x17\x0b\xdf\x41\x5f\xbe\xff\xc7\x53\x8b\xb2\xc9\xc8\x9d\xb6\x5a\x29\xd1\xae\x30\x8f\x46\x95\xbe\xad\xc5\xdb\x86\x9d\xad\xb7\x3d\x37\xff\xc6\xc7\x86\x8e\xd8\xf0\x03\xe8\xa9\x05\xe0\x60\x6a\x51\xa1\x7e\x8b\xa2\xab\x78\x87\xe1\x9a\xc1\x77\xff\xf2\x4b\x53\x7a\xcd\xe2\xbe\x7b\x6f\x30\x7a\xbb\xb4\x35\xd1\x07\x32\x2b\x29\x6e\x20\xca\x82\x38\x98\x5a\xdc\x85\x29\x26\x6a\xb4\xbb\x6d\x9b\x91\xc1\x9f\xce\x1c\x5a\x5b\x77\xbe\xb6\xf9\xf7\xde\x14\x97\xe8\xaa\x8d\x0c\xb8\xff\xc4\x16\xda\x54\x01\xc4\xc1\xcf\x63\xea\x6e\xf2\x28\x50\xbc\xd3\xc4\x72\xa6\xa0\x12\xfc\x38\x53\xfe\xac\xd1\xd1\x63\xf0\xaf\x54\x68\x4d\x68\x88\x4b\x92\xf6\x12\xd4\x10\x40\x1c\x4c\xad\x4a\x03\x23\xba\xd6\xf0\x8e\x4e\x2d\x1d\x61\xe5\xd7\x24\x0d\x97\xb7\x4d\xad\x3e\x0c\x6b\x1a\x7c\x13\xc7\x21\x3f\xfa\x82\xcf\xa0\x81\x28\x0b\xe2\x60\x6a\x71\xdd\x5b\x29\x7e\xe2\x31\x16\x40\x7f\xd3\xc1\x7a\x46\xfc\x25\xb9\x95\xe5\x96\x22\xc6\xaf\xf6\xb0\x65\x74\x7c\x35\xdf\xf4\xe6\x30\xe8\x1c\x16\x00\x87\x50\xeb\x62\xe1\x3b\x68\x84\x03\x59\xad\x92\x25\x7f\xa5\x81\x26\x35\x2a\xfd\x2b\x09\x53\xa5\x31\x06\x3a\x9f\x6a\xde\xca\xdd\x5e\x14\xf4\xf3\xf0\xda\xa4\xaa\x2a\xb0\x82\x4e\x8f\x02\x71\x30\xb5\x02\xee\x92\x0e\xc6\x3b\x3c\x51\x1a\xe0\x6d\x52\x15\xaf\x7a\x1f\x6f\xef\xed\x78\x92\x79\xb9\x2b\xbc\xfc\x73\xed\xbd\x00\x47\x4a\x28\xd3\x07\x71\x30\xb5\xae\x3f\x33\xeb\x70\x95\xc5\x65\x0c\xa8\x23\x77\xdf\x79\xfb\x67\xa3\xe6\x2e\xed\x95\xf4\x4f\x79\x02\x28\x63\x87\x97\xf3\xcc\xcb\xa1\x6d\x40\x40\x1c\x4c\x2d\x7c\x34\xed\x07\x26\x59\xee\x02\x15\x72\x4f\xff\x0c\x97\x1b\xc7\x6f\xed\xa4\x88\x67\x7a\xdb\x44\x8e\x2a\xe6\xa7\x26\xe8\x5d\x82\x36\xc9\x07\x71\xf0\x2f\x44\xd2\xdf\xee\x9e\x3a\x9e\x0f\xee\xa6\x48\x31\x13\xf5\x5f\xff\x29\xfe\x99\xd3\xd7\x68\xb8\xfb\x31\xb5\xd7\xfa\x0d\xd4\x07\xa2\x1f\xa1\x2f\x44\x00\x07\x53\x0b\x33\x59\x29\x55\x70\xb9\x21\xbc\x78\x0b\xfb\x50\x81\xf7\xc6\x07\x23\xae\x9e\xdf\x74\xfa\xd6\x67\x5f\x57\x74\x7e\x78\xa3\x6e\x4a\x22\xd4\x02\x71\x08\xb5\x2e\x18\xbe\x83\xc6\xb0\x11\x67\xbe\x23\x85\xef\x23\xc9\x9c\x36\xd9\xb7\xca\xf4\x5b\x3b\x0d\x4f\x96\x38\x93\x45\xc6\x83\x96\x48\xdc\x58\x53\x1b\x1f\x5d\xff\x1d\x1a\xa7\x7c\xf9\xca\xbf\x8f\xf4\x21\x85\xef\x3f\x95\xbf\x86\xf6\x78\xe6\xf8\xdc\xaf\x79\xef\x7b\x73\xf4\xa8\x8a\xe2\x69\x14\x5e\x63\xec\x17\x06\xfd\x17\x0a\x45\xb9\x16\x1b\x14\xff\x9b\x91\x3e\xd0\x0f\x43\x6e\x6d\x5c\xdb\x2a\x14\xe1\x16\xc5\x98\xbd\xca\x35\xb4\x62\xc5\x3e\xda\xae\x3b\x82\xae\x4f\x43\xbf\xe0\x1b\xba\x8f\x8c\x35\x54\xde\x81\x0e\x98\x04\x71\xb0\xd6\x46\x52\x63\xc9\x8d\xae\x28\xfa\x3d\x9a\x67\x5b\x47\x55\x8b\xe8\xf2\xdb\x86\xd6\x29\x89\xa4\x43\x27\x65\x15\xa3\x4b\xa8\xee\x61\x50\x8c\x05\xe2\x60\xad\xed\xc7\x34\x9e\x4e\x80\xfd\x5e\xf4\x6a\xaf\x48\xed\x64\x43\xdb\x03\xf5\x1a\x0a\xb2\x9c\x73\xa3\xc7\xbf\x76\x85\x9e\x16\xd5\xfb\xc6\x23\xca\x82\x38\xf8\x96\xc8\xdf\x9a\x37\x5a\x9a\xea\x64\x07\xba\x16\x63\x2a\x08\xce\x2e\xf1\x58\xb7\x46\xcc\x4f\x1e\x3c\x91\xdb\x30\x9f\x8f\xf1\xf9\x00\xad\x5a\x00\x71\xb0\xd6\xe6\xfe\x96\xd8\xd6\x66\x65\x3d\x7b\x7f\x39\x8e\xab\xf5\x09\x4e\x9a\x5f\x37\xf3\xb9\xc3\x28\xad\xa1\x69\xe0\xfa\x7c\xe6\xf4\x65\x68\xb8\x13\xc4\xc1\x5a\x1b\x2e\x27\x5e\x67\x24\x0e\xd9\x9a\xff\x36\x29\xb5\x81\xfd\xfe\xd7\xe2\x72\xc6\x8c\xef\xc5\x91\x3c\x72\xec\x49\xf2\x73\xf9\x0f\xa6\x10\xad\x0d\xc4\x21\x5a\xdb\xc5\xc2\x77\x90\xc0\xff\xc7\x16\x26\xa1\x46\xa1\x4f\xdb\xaa\x55\x03\xa7\x1e\xff\x71\xc2\x9d\x5a\x3a\xb9\x9a\xea\xcd\xdf\xec\x36\x53\x2a\x62\xd1\x21\x99\x52\x0b\x3d\xc3\x40\x1c\x4c\xad\x83\x90\x44\xf1\xe7\x55\x9b\x62\x2c\x03\xd7\x33\x71\x87\x0a\x39\xb6\xec\xa3\x19\xa4\x5e\x4d\xb9\x7b\x05\xdd\xd8\x1f\xc5\x7e\x77\x1f\x5a\x50\x0f\xe0\x60\x6a\x79\x3f\xc0\x25\x74\xa2\x0a\xc8\x14\x5b\x17\x08\x38\xbc\x99\x7b\xf3\x7d\xbf\xde\x83\xc9\x9a\xa9\x54\xe6\xfb\x6d\x63\x07\xa5\x7f\xa1\xdd\x0f\x40\x1c\x4c\x2d\x5e\x16\x3e\xd9\xd2\x5b\xed\x9e\xfd\xfd\x09\x42\x91\xac\x3f\x34\xb3\x9e\x1a\x06\x31\x4a\x10\xb2\x94\x16\x9c\x67\xf7\xce\x74\xd9\x41\xb3\x14\x01\x1c\x4c\x2d\xff\x97\x89\x67\x39\x37\x9c\xa8\x5a\x2f\xa9\xe0\x1e\x7f\x29\x73\x7c\x99\x6b\xd9\xa0\xa3\x85\x4a\x6a\x3d\x57\xad\xff\xbe\xfb\x69\x14\xa2\x2c\x88\x83\xa9\x35\xa9\xb2\x42\x33\x77\x3c\x89\x3e\x54\x48\xfa\xc9\x4a\xb6\x51\x39\xc2\x3f\x38\x43\xbc\x28\x46\x7c\xfd\x31\x23\xb6\x2f\xfd\x02\x1b\x42\x2d\x10\x87\x50\xeb\x62\xe1\x3b\x28\x17\x45\x56\xab\xe8\x56\x82\xdc\x55\xd1\x38\xdc\x86\x91\xa2\x8f\x63\x95\x9b\x9d\x82\x65\x79\xf4\x99\xac\x7e\xc4\x09\x0c\x15\x71\xc7\x78\x8f\xbd\x11\x3f\x1f\xc4\xc1\xd4\x32\xff\x2d\xd9\xba\xdc\xa2\xae\xb0\xca\x37\x95\x54\x62\x39\x4a\xd0\xe8\xe8\x7f\xbf\xe2\x3b\xf1\xa6\xf1\x4e\x82\x88\xea\xf8\x06\x74\xb0\x1e\x88\x83\xa9\xe5\x93\x27\x56\x98\x35\x1c\x21\x2d\x90\xf9\xc8\xe1\xe7\x8f\x7a\x2e\x4d\x61\xf7\xd3\x19\x3b\x45\x67\x8b\xf9\x62\xc2\xe1\xb8\x72\x33\x44\x59\x10\x07\x53\x6b\x4a\xab\xee\x8e\xfd\x7e\x0b\x2a\x59\x6f\xbe\xa4\xc5\x62\x08\xe3\xa0\x80\x9a\x9b\xf3\x6a\xfe\xc3\xd5\xa9\xad\xa0\x52\x6a\x1c\xc8\x01\x10\x07\x53\x0b\xab\xe1\xf0\x34\x58\x80\x41\x43\x7c\x51\x2e\xc3\x45\x67\x42\x7d\x96\x25\x81\xb0\x43\x8a\xe9\xfd\x54\x2a\xad\x01\x3a\x53\x33\x34\xd4\x07\xe2\xe0\xdd\xcf\x8b\xae\x7c\x67\x98\x79\x41\x56\xe4\x51\x3c\xd0\x35\x2f\x28\x45\xd0\x3b\x86\xb9\x43\xed\xd0\x41\x29\x38\xcb\xc6\xdf\x61\xf0\xfa\xe9\xdc\x44\xd5\x7f\xd3\x46\x27\x71\x9c\x93\x1f\x39\x8d\xea\xe3\x57\xce\xb9\xa8\xce\xd3\x1e\xe3\x08\x70\xa6\xfc\x12\xae\x4a\x96\xd7\x08\xa8\x4a\x94\xf5\xd5\xfc\x0f\x5a\xb6\xd1\x7b\x87\x66\x6e\x7e\x44\xc4\x67\x68\x3f\x5f\x42\xce\xfa\x7a\xfe\x22\x99\xf2\xf3\xc3\x3f\xb5\xf8\x9b\xf4\x6e\x8a\x4d\xb7\x61\xe1\x3b\xa8\x32\x72\xf8\x2e\x75\x9a\x46\x64\x4f\x5c\x74\x77\x31\x46\xa6\xd5\xbb\xf5\x8e\xca\xdb\xc1\x41\x83\x57\x28\x0a\x63\xb9\x7a\xf4\xca\x8b\xcf\xc3\x69\xff\x83\xbe\xc0\x1c\x45\x9d\xef\x89\x4e\x60\x5b\xdd\x95\xb9\xf5\x9d\x2d\x02\x7d\x5e\xdd\x07\xcf\xaf\x8f\x70\x8a\x33\x76\x5c\x9d\xe7\xe7\x2e\x14\xbe\x83\x6a\x22\xce\x7c\x87\x87\xef\xd6\xae\xe1\x0d\xae\x84\x9c\xbc\x7d\x52\x8d\xd4\xdd\x56\x74\xc3\xe9\x59\xe7\x54\x2d\xdc\x1f\xb1\xe5\xb3\x35\x56\x66\xa4\x65\x6b\xff\xb9\x83\xd3\x8a\x14\xbe\xbf\x52\x59\x78\xc4\xd6\xa5\x6c\xa0\x46\xe9\x63\x72\x55\xa4\xd2\x7b\x78\x3b\x25\xb4\x73\x52\xab\xe7\x3a\xbd\xe0\x2f\x8c\x79\xd4\xe3\x7f\xbf\x24\x52\xf8\xce\xe1\xfb\x62\xec\x98\x87\x51\x30\x77\x50\xe2\x1c\x67\x3f\xda\x7f\x36\xf1\xe5\x74\xfb\x39\x41\x81\xd2\xa4\x42\xa0\xe6\x4f\x7a\xc6\x7f\xbf\x24\x52\xf8\xae\xa5\x2d\x60\x72\xce\x6d\x69\x54\x74\xbe\x4d\x4b\x7c\xdc\x2e\xb5\xbe\x62\x64\x24\x12\x22\xd8\x6f\xdd\x74\xb8\xb3\x7b\x79\xab\xe8\xdf\x2f\x89\x14\xbe\xab\x46\xfe\x11\x8e\x7d\x81\xfb\xdd\xf3\xc7\x77\xc5\xdb\xbe\xa9\xa2\xe1\xc3\x2f\x37\x94\x46\x94\x4c\xdc\x15\xc5\x5c\x38\x47\x6c\x86\xff\xfd\x92\x48\xe1\x7b\x03\xda\x36\xd7\x96\xf6\x6e\xbf\x93\x93\x32\x1f\xea\xa1\x4b\x23\x0a\xbe\x75\x0d\xa5\x82\xcf\x87\xb5\x16\x8b\x41\xaf\x0f\xb5\xe9\xff\x7e\x49\xa4\xf0\x5d\x22\xfe\x46\x64\x92\x56\x79\x01\x79\xb8\x56\x78\x7a\xf1\x37\x55\x43\x8b\x94\x29\x5d\x76\xec\xca\x15\xd7\x84\x4f\xae\x49\x0a\xff\x9a\x84\x87\x29\xb6\x22\x85\xef\xd6\x36\x82\x1b\xf7\x6d\x19\xed\x2c\x1e\xa5\x8b\xf4\xf9\xe3\x96\xf8\x63\x1d\xb6\x6c\xf8\x4b\x3d\x20\xa2\x6d\x6a\x52\x99\x3c\xe9\xfb\xdf\x74\xc9\x41\x4d\x11\xf9\xe5\x86\x85\xd6\x75\x6c\xf1\xf8\x3d\x29\xb1\x10\x8f\x11\x63\x7a\xac\xb5\x7b\xfa\x24\x6e\xeb\x91\x3c\x03\x26\x7e\xd6\x0e\xad\x79\x40\x06\xf4\x00\x06\x70\xb0\x97\xdb\x4e\xb1\xf1\x6f\x7c\x09\xc1\x33\x76\x5c\x9d\xf2\x98\x65\x3a\x99\x45\x91\x4d\x52\x05\x3e\x2e\xba\x82\x69\x7d\xd9\x2f\xdf\x94\xa0\x69\xe2\x20\x0e\xf6\x72\x53\x5d\x48\x1a\xfa\xfe\xc7\xf1\x90\xd2\xe8\x45\x4a\x70\x23\xfa\x7e\x1f\x87\x00\x61\xb6\xc9\xf3\x0e\xa7\x7b\x14\xea\x47\x6f\x95\xa0\x03\x70\x40\x1c\xec\xe5\x16\x78\xd7\xe1\xa7\x57\xd7\x1f\x6e\xaa\x7a\xd2\x59\xfc\xd3\x02\x87\x66\x9f\x67\x5f\xb5\x97\xa2\x1c\x57\x7f\x48\x28\xbd\xcc\xd0\x86\x8e\x73\x03\x71\x81\x72\xe8\xff\x2d\x6b\x28\xf3\x71\x69\x65\xf8\x64\xba\xdd\xa8\x16\xc7\x7e\x1c\xb5\x7c\x7e\x9c\x48\xaf\x90\xb5\xc5\x8f\x22\xfb\xec\x66\xf9\xdb\x5b\xd0\xd6\x6f\x20\x0e\xf6\x72\xbb\xe9\x15\x70\x2a\xed\x4a\x76\xe3\xfd\x54\x47\x2d\xbf\x4b\xa8\x02\x6b\x73\x60\x3e\x57\xd7\xf7\xca\x22\xa2\xc9\x5a\xa9\x83\x52\x68\xdb\x79\x10\x87\x38\xf3\xfd\x42\xe1\x3b\xe8\x89\x8b\x6c\xd6\xe8\xbc\xc4\x8b\xae\x92\xd1\xa7\xb4\x49\xc2\x11\x51\x18\x57\x22\xd1\x26\xe8\xbb\xd7\x68\xee\x37\x3b\x86\x84\x1c\x87\x30\x5e\x86\xce\xa4\x06\x71\x30\xb3\xb8\x19\xf7\xc3\x74\x86\x5d\x75\x5f\xf2\xee\x68\x05\x90\xaa\x4c\xcb\xa0\xef\xe0\x3c\x37\xc6\x9f\x2a\xa3\xf8\xbe\x7a\x26\x46\x39\xf1\xff\xd6\x92\xff\xff\xe7\x60\x66\x9d\x8f\x24\xe6\xf6\x9b\xe0\x7a\x3a\x37\xcb\x66\xbf\x6b\x58\x35\xe1\x72\x8a\xa9\x64\x22\x5a\x19\x37\xbd\x99\x55\x27\x1b\x9b\x0e\xed\xa9\x00\xe2\x60\x66\xb9\x4c\x3a\x9b\x39\xa3\x1d\xb2\x45\xaa\x1b\xc8\x8e\x5a\x5e\x8e\x08\x55\xe0\x72\xbf\x23\x6d\x19\xf4\x44\x2f\x82\xdc\x7f\x7a\x17\x3a\x63\x0c\xc4\xc1\xcc\x3a\xee\xdf\xc6\x9d\x0a\xc9\xec\x2c\x3d\x2b\xc1\xbe\x3e\x9d\xbe\x15\x7f\x94\x7a\xf5\x67\x26\x16\xdd\xc6\x58\x56\x31\xf9\x65\xdc\x25\x68\xd5\x33\x80\x83\x99\x35\x8c\xd3\xc5\xad\x26\x80\x13\x45\x11\x8f\x3d\x36\x73\xa5\x7f\xd2\xc8\xe3\x95\x2d\xa9\x62\xd8\x44\x7d\x16\x71\xd5\xdf\xa4\xd9\x3c\x44\x8f\x1c\xc4\x21\x0e\x82\xba\x58\xf8\x0e\x7a\xb3\x22\xab\x25\xf8\xd9\x48\x1d\xb7\xdb\x6f\x7c\xcc\xba\xa2\xd3\x34\xf9\xcf\x6d\xde\xf3\xfe\x5b\x46\x8a\x52\x5f\x49\x29\x58\x8a\x32\x99\x9d\xa1\xd9\xf6\x20\x0e\xa6\x16\xea\xdf\xc8\x32\x4a\x4f\x93\x64\xea\x81\xbb\x6a\xa1\x7d\xd2\x97\x36\xfc\x37\x04\xcb\xde\xf6\x10\x79\xa6\x93\x0d\xdd\xea\x7c\x60\x81\x28\x0b\xe2\x60\x6a\x2d\xdd\xc4\xed\x32\xa6\x12\x88\x7b\x7e\x2f\x6d\xda\xf5\xeb\x47\x9b\xe5\x78\x4a\x11\x16\x49\xc1\x0a\x82\x1e\x9d\x26\xf9\x16\x51\x68\x1c\x01\xc4\xc1\xd4\x2a\x36\xf6\xae\x8b\x2d\x7f\xe0\x75\x48\xb5\x4d\x9b\xf4\x92\x2f\x6c\x4b\x48\x7e\xd8\x85\x39\x7e\x6c\x8d\x52\x46\xbc\xcd\x92\xfe\x1d\xb4\x92\x01\xc0\xc1\xd4\x7a\x92\x16\xba\x66\xc6\xc7\x46\x23\x20\xc3\xe7\xe2\x27\xd9\x97\x59\x1c\xd4\xa0\xe0\xb5\x43\xfd\x4b\xbc\x58\x5e\xb1\xbf\xab\x01\xfa\x7e\x00\x71\x30\xb5\x92\xf3\x25\x86\xef\x92\xb1\x6a\x48\x30\x34\xe3\xdd\xae\xe9\xcf\xb3\x17\xca\xd5\x8e\x5f\xd3\x4e\x4f\xeb\x6b\x90\x4d\x7e\x4b\x14\x83\x50\x0b\xc4\x21\xd4\xba\x58\xf8\x0e\xea\x41\x21\xab\xc5\x81\xc2\x3f\xcb\x70\xa5\xde\x99\x50\x58\xfe\xdb\xbb\xb1\x81\x3f\x9c\xaf\xa5\x1c\xd3\xe2\xf0\x92\x7d\x29\x49\x13\x77\x97\x8a\x17\xa0\x85\x48\x00\x0e\xa6\x96\xaf\xd4\xa5\xa7\x7a\x39\x1d\x02\x5b\x66\x1f\x9f\xb4\x2d\x19\xa6\xef\x73\x2b\x33\x4f\xf4\x2b\xdb\x72\xb2\x8c\x37\xb4\x69\x77\x4b\x41\x6b\x03\x00\x1c\x4c\xad\x1c\xac\x92\xe4\xb3\xbf\xe8\x41\x44\xc2\xbf\x33\x63\x97\x45\xf5\x1c\xf7\xb0\x47\x55\x42\x46\x6a\x69\x7a\xa4\x67\xfa\x6f\x26\x42\x73\x7b\x40\x1c\x4c\xad\xba\x1d\x37\x0b\xcb\x38\xd7\xb2\x17\xdf\x5c\x48\xf5\x6f\x09\x13\xa1\x05\x38\x9c\x7e\x73\xe2\xce\x23\x2b\x15\x89\x5b\xff\xfd\x02\x5a\xf1\x0a\xe2\x60\x6a\x29\x74\xf7\x4e\x96\x1e\x1d\xc8\x9b\x62\x6b\x7c\x2e\x4c\xa1\x7a\xbd\x63\x22\xdd\x51\xe0\x55\x8a\x13\xdd\x3c\xb6\x91\x96\x21\x06\x0d\x4f\x80\x38\x98\x5a\x14\x12\xa2\xe4\x32\x54\xae\x83\x8d\x45\x9e\xe5\xf4\xd3\x8d\xce\xc9\x2e\xb1\xe2\x84\xed\x13\xe8\xca\x7a\xfe\x3f\xae\x11\x14\xd9\x21\xd4\x02\x71\x08\xb5\x2e\x16\xbe\x83\x7a\xca\xff\xc7\xbe\x9f\xd3\x52\xb3\xcd\xee\xcf\xdf\x6c\xf5\x18\x5c\xa2\x38\xed\xfc\x4b\x9d\x46\xef\x14\x44\xb6\xc5\x57\x33\x42\x54\xdc\xea\x77\x0e\x85\x02\x20\x0e\xa6\x56\xaf\xfa\xf3\xf6\x7b\x42\xd1\xdb\x9f\xe3\x6d\xe7\x58\xaa\xb4\x4c\x22\xa8\xef\xa7\x33\x70\xbd\x6e\x23\x40\xe5\xc4\x0e\xba\x4d\x08\xa5\xe4\x20\x0e\xa6\xd6\xb3\xe7\x81\xa4\xdd\xe6\x71\x0e\x91\xf4\xfe\xba\xcb\xd9\xe5\x0e\x53\x3f\xb7\x39\x75\xa7\x2b\xb5\xdf\x93\x8a\xa0\x99\x38\x9e\x40\x67\x79\x82\x38\xb8\x5a\x44\x85\x45\x87\xfc\x97\x94\x42\xa7\x71\xfb\x1e\xd0\xc6\x62\xa5\x4d\xc9\xaa\x25\xe3\xf6\x93\x5b\xab\xbc\x90\x2d\xf1\x1f\x81\x66\x22\x81\x38\x98\x5a\x29\x6f\x16\x49\xf7\x93\xd0\x66\x7e\x34\x15\xea\xa1\x63\x08\xbc\xf8\xed\x17\x50\xce\xad\x90\xc1\x47\xf6\xc8\xd2\xae\xe2\xe6\xc2\x0f\x68\xde\x14\x80\x83\xa9\x35\x6a\xf9\x9a\x7a\xdd\xcb\xdd\x99\xbd\xa5\xe8\x9d\x5b\x04\x49\x21\xad\x45\x56\xb7\x73\x75\xdb\x62\xa8\xe1\x07\x7c\xad\x44\x6a\x79\x84\x5a\x20\x0e\xa1\xd6\xc5\xc2\x77\xd0\x17\xd1\xff\xb1\x86\xf4\xd8\x5d\xa3\x65\x3e\xf3\xad\xd9\xbb\x83\xe2\x34\xa6\xaa\x43\xb3\xd5\x2f\x4d\x3e\xba\x62\xca\x35\x15\x0b\xca\xb9\x8f\x33\x0e\xa1\x35\xa4\x00\x0e\xa6\x56\x99\xcf\xa9\x64\xb6\x7a\xf6\x60\x32\xfe\x24\x71\x24\xc9\xc3\xf6\x62\x2a\x1f\x3b\xf4\xfb\x7c\x07\x14\xf6\x52\xdb\xa9\xf7\x9a\x75\x11\x65\x41\x1c\x4c\xad\xfc\xc9\x68\xe9\x24\x94\x0f\xfa\xdf\x9e\x25\x5d\xef\xc6\xbb\xc5\x56\x58\x5f\x55\x60\x39\x89\x81\xc9\x88\x8a\xfa\xfd\x87\xa9\x0b\x34\x54\x0d\xe2\x60\x6a\x9d\x3d\x54\xa5\x72\x3d\xc7\x19\xbf\xc1\xc2\xf6\x63\xea\xfe\xb3\x8e\xd7\x44\xbf\x97\xbd\x65\x93\xc4\xf0\xcc\x33\x68\x6a\xd5\x45\x21\x63\x41\x1c\x4c\xad\x83\xfb\xbf\x3a\x76\x07\x42\x49\xe5\xea\x94\x94\xf6\x4a\xa4\xdb\xac\x49\x53\xdd\xd7\xdc\x4e\xd2\x73\x0e\xbf\x1c\xfd\x34\xeb\x80\x16\xd4\x83\x38\x98\x5a\x2b\xe3\x75\xb8\x16\xa8\x3f\xbd\xb2\x8b\x3e\x25\xdd\xb6\xbb\x6b\xb0\xf9\x23\x4f\x67\xfc\xe8\x2b\x7a\xf3\x9c\x6c\x54\x78\xe2\x16\x21\x42\x2d\x10\x87\x50\xeb\x62\xe1\x3b\xe8\xcb\xf7\xff\x38\x74\x93\xfc\xa3\x2f\x9e\xd1\xd3\xd1\x25\xf3\x77\x4f\xeb\x63\xd5\x27\x5d\x72\x1f\x26\xdf\xc1\xb6\x5b\x5f\x32\x37\xc6\xe6\xbd\x87\xfb\x0c\x5a\x9d\x0d\xe0\xe0\xbb\x0c\x25\x86\x09\xe4\xa5\x4c\x0a\x9b\xd2\x1e\xde\x6e\x88\x36\x6f\x9a\x5b\x8d\xf9\xfa\x2d\x72\xee\x55\x55\xa6\x57\x71\x9d\x62\x20\x3a\xa2\x2c\x88\x83\xa9\xe5\xa5\x21\xd9\xfe\x8e\x3d\xf7\xab\xf3\x84\x36\x4f\x3d\x1b\x71\x7b\xe4\xd8\xdf\xa1\xba\xfa\x78\xab\x94\xeb\x5d\x8a\xdb\xb2\x36\x53\x88\xb2\x20\x0e\xa6\x96\xbe\x77\x73\x9e\x56\x92\xbf\x48\xc5\xe5\x72\x8c\xef\x5f\xb6\xb0\x54\x58\x38\x82\xf5\x2e\x11\x16\x08\x92\x0c\x86\x07\x25\xf8\xd5\x43\x73\xe7\x00\x1c\x4c\xad\x9b\xeb\x92\x46\x4a\x34\xad\x9a\xc7\x9a\xd3\xad\x8e\x38\x6f\x7c\x6e\x44\x24\xaf\x2e\xda\x7d\xdd\x26\x24\xdc\x1e\xc3\x0b\x1d\xd2\x42\x94\x05\x71\x30\xb5\xb8\xf9\x31\x45\x7c\x49\x6a\x4e\x75\xbb\xbc\x2b\x46\x71\xd1\xd4\xd2\x3e\x89\x6e\xda\x54\xb7\x90\x58\xa6\x3d\xc5\x49\x6a\x8a\x26\x45\xa8\x05\xe2\x10\x6a\x5d\x2c\x7c\x07\x8d\x70\x20\xab\xb5\xcd\x66\xf7\xae\xf5\x29\xcb\xbd\xdf\x7b\xbf\xaf\xb4\xfa\x94\x47\x2c\x3d\x3a\xf4\xd6\x3d\xb7\x5f\xf6\x39\x65\x1d\x16\xe5\xcf\x85\x1e\xda\x20\x0e\xa6\x16\xfb\xe8\x96\x08\xbd\xcc\xb3\xd8\xba\x4f\x66\xbd\xa3\xf5\xeb\x13\x2f\x02\xee\x51\x4b\x37\x4b\x59\x7e\x3d\x93\x2c\x94\x47\x9d\x83\xf6\xed\x01\x71\x30\xb5\xbe\x98\xac\x89\xda\x31\x28\x3c\xbb\x94\x74\x35\x26\xc8\x5e\x05\xd3\x17\x83\x86\x1b\xfb\x3c\x27\x9c\xe3\x3e\xb6\xf9\x0d\xe7\x6c\x68\xef\x57\x10\x07\x53\xab\x67\xe0\xe4\xc7\x8d\xde\x29\x6e\xaa\x4f\xcd\x7d\xf8\xae\xa5\x7f\x62\x68\xa6\x79\x8b\xd3\xfa\xc4\x97\x3e\x34\xda\xc7\x30\xa7\x42\x8f\x6e\x10\x07\x53\xeb\x1c\x07\x6f\xef\x91\x18\x9b\x9c\x3d\xbf\x3c\x6e\xbd\xd1\xa8\xff\x4e\x0f\x45\x36\xdb\xf8\xa5\x12\x2b\x4a\xbe\xd1\x6a\x31\x41\x3c\xe8\x7b\x16\xc0\xc1\xd4\x6a\x9c\x57\x31\xba\x2a\x80\xd3\x24\x6f\x56\x7e\x98\x8f\x3d\x22\xf1\xa0\x7d\x30\xf7\x5a\xc7\x03\x4d\xec\xd5\x15\x05\x19\x12\x81\x04\x84\x5a\x20\x0e\xa1\xd6\x05\xc3\x77\xd0\x18\x36\xe2\xcc\x77\xa4\xf0\x3d\xcc\x1e\xb3\x66\xf7\xfa\xec\x9e\x23\x96\xc5\xd1\x99\x0f\x57\x1b\xf7\x64\x6d\x3b\xf7\xf4\x2a\x9b\x36\xed\xfb\x7b\x13\x2b\xec\xfd\xff\x3e\xd2\x87\x14\xbe\xdf\xdd\x94\x13\x1f\x88\x6a\x2e\x27\xaf\xa3\x66\xe5\xe7\x3f\x95\xc5\x1e\x21\xe2\xd9\x32\xcf\x73\xb3\x32\x7a\xc5\xeb\x35\xe9\xf9\xaf\x5b\xa4\xde\xbe\xd8\x0f\x43\x6e\x6d\x44\xc6\x44\x04\x5b\x35\xaf\x84\xf5\xb7\xfc\x9e\x13\xad\xdc\x76\xe9\xbf\x5e\x40\xee\x98\xe9\x52\x99\x51\xb6\xe9\x49\x90\x83\xd9\x8b\x30\x02\xc4\xc1\x5a\x1b\xcb\x9d\x69\x9b\x78\x8d\xf3\x9f\x2f\x55\x50\xfc\xec\x45\xb8\x7c\xf6\x9c\x1f\xe0\xd9\x44\x34\x3f\x1e\x2b\xa4\x2b\xf9\x72\x20\x77\x1b\x51\x16\xc4\xc1\x5a\x5b\xa9\x74\x5b\xf5\x25\xde\xc3\x87\x8c\x29\x91\x1f\xda\xd3\x35\x14\xad\x93\x3d\xb9\x98\x94\xc2\xfd\x5f\x6e\x60\x4c\xb1\x65\xf8\x41\x33\xe9\x40\x1c\xac\xb5\xfd\xc4\x0a\x9a\xb3\xc1\x69\x0d\x2a\x2d\x6a\x2c\xc1\xd1\xf3\xf3\x64\x7b\x51\xb6\xc2\x9c\x6f\x34\x79\x73\xc9\x80\x81\x2f\xf0\x72\x10\xa2\x2c\x88\x83\xb5\xb6\x32\x4d\xba\xc8\x07\x98\x55\x83\xbf\x38\xb4\x7e\x9f\x7d\x9c\xc9\x31\x9d\x3f\xd8\x62\x3e\x14\x90\x5b\xa5\xfe\x65\x60\x30\xa7\xfd\x00\xea\x28\x01\x38\x58\x6b\x3b\xf3\xa4\x67\x4d\x3c\xdf\xb6\xde\x7c\x42\x1a\x5d\x89\x6d\xc5\x63\xe3\xb6\xe5\xaf\x8e\x4a\xf7\xcb\xd9\x54\xb5\x85\x6e\x8d\x65\x17\xd1\xda\x40\x1c\xa2\xb5\x5d\x2c\x7c\x07\x09\x8c\xac\x56\xc3\xbd\x81\x57\xed\xf3\xe4\x33\x37\xa8\xda\x17\xf6\x35\xc9\xcd\x02\x9b\xdc\xa6\xd7\xd5\xaf\x7e\xf8\x21\x89\xfd\x9d\x37\x27\x0a\x9a\x55\x0d\xe2\x60\x6a\x1d\x26\x56\x04\xbf\xa6\x11\x6f\x21\x29\xf8\x7b\xec\x2b\x8b\xb6\xb4\xc4\x9f\x14\xae\xd7\xff\x6e\x2c\x0c\x3d\xc9\x9c\x1b\x95\x02\x3a\xfd\x0c\xc4\xc1\xd4\x0a\x4c\xc8\x23\x0d\xc1\x0c\x52\x1d\xda\xce\xdc\x2e\x76\x7b\x1b\xd7\x7b\x56\x8a\x8b\x29\xbe\xdf\xcb\xf4\x91\xfe\x9b\x10\xe1\x6d\x4d\x68\xb4\x17\xc0\xc1\xd4\x5a\xa4\xe4\xbd\x37\x64\x55\x37\x23\x55\x95\x2e\x37\xf6\x93\x9c\xb8\xbe\x35\xe6\xcc\xe8\xe6\xad\xd7\x07\x0d\xeb\x01\xfa\xd2\xae\xd0\xe4\x16\x10\x07\x53\x6b\x84\x7c\xc7\x6d\xb7\x31\x2c\xd1\x36\x59\x81\xa3\xca\x10\x2d\x9c\xfe\xe5\xd0\x6d\x03\x8a\xa6\xd7\x71\xf8\xbe\x8f\xcb\xde\xb8\x41\xe7\x7d\x83\x38\x98\x5a\x86\xf6\x15\xe4\x21\x9b\xba\xe9\x4a\x74\xfe\x0d\xb2\xc2\x6e\x1e\xca\x7e\x39\x2b\xba\x6f\x56\x8f\x34\x93\x08\x2d\xdd\x84\xf9\x74\x10\x6a\x81\x38\x84\x5a\x17\x0b\xdf\x41\xb9\x28\xb2\x5a\x46\x92\x7d\xd1\x42\x4a\x71\xf5\xad\x2f\x4c\x09\x1c\x05\xcb\x5c\x5e\x78\x56\xaa\x9d\x1e\xf5\xaa\x72\x1e\xa0\x59\x9b\x44\x14\x54\x41\x5b\x19\x01\x38\x98\x5a\xb8\x74\xc2\xcb\xc7\x6d\x91\xdb\x28\x6d\xb2\x01\x47\x9e\x43\x12\x49\x57\x7e\xc5\x24\x5f\x79\x64\x14\xc9\x81\xe1\x96\xef\x27\x01\x8d\xf8\x83\x38\x98\x5a\x8f\x44\x54\x3b\xb7\xf8\xa5\x59\x24\x84\x89\x7b\xfb\x28\xb3\x4b\x0d\x84\xa2\xf4\x03\xd8\xd1\x2a\xcb\xc2\x84\x3d\xf6\xed\x46\x5f\x20\xca\x82\x38\x98\x5a\x09\x5f\x7b\xf7\xd2\x27\xe6\x63\x2b\xdf\x55\x25\x90\x33\x3f\x57\xe0\xbb\xcd\x97\x32\x11\x45\x1f\xd4\x15\x6c\xe5\x75\x27\xba\x00\x9a\x5a\x0e\xe2\x60\x6a\x31\x4c\x38\xe3\x9c\x1c\x56\xfe\x5a\xcf\x13\xfa\xad\x71\xf3\xf3\x10\xc1\x02\xaa\x7d\x66\x4c\xc8\x46\x32\x19\xbf\x58\x48\x23\xd7\x0e\xa2\x2c\x88\x83\xa9\x75\xe1\x95\xef\xf5\x43\xef\xea\x6a\x84\x44\xe3\x66\x45\x1a\xa2\x03\x12\xd6\x56\x8c\x86\xbf\xb7\xea\xe8\xd6\xd2\x25\x09\xb0\x07\x10\xb1\x37\x5f\xfe\x6f\xf8\xce\x7d\xfb\xa8\xec\x96\x41\x9d\xd8\xab\xfc\x9a\x81\x73\x4d\xc5\x32\x13\xde\x05\xc2\x62\x7b\xcc\xfa\x4b\xa4\xfb\x96\xb7\xf7\xb1\x4c\xff\x83\x5a\x6e\x5f\x3b\x16\x3e\x57\x17\x5d\x5a\x38\x29\xc8\x4f\x10\xc3\xd4\xe6\x2b\x0e\xb2\x98\xd6\x2d\xe3\x9b\xac\xca\xb8\xea\x2d\x44\x0b\x0b\xdf\x41\x95\x91\xc3\xf7\xa7\xb2\x72\xf1\x97\xe5\x98\xb7\x8f\x2f\xa3\x0f\x04\x37\xa2\x0a\x78\xfd\xf4\x6d\xfd\x93\x42\x88\x9f\x38\x84\xf5\xe4\xb5\xf6\x14\xf3\x7f\x5f\xba\xd7\x4c\x2e\xb3\x64\x18\xb2\x7e\xd4\x44\x19\x7a\xef\x29\x9d\xc0\xfe\x5e\x79\x34\x7b\xdd\x55\xc1\x93\xf0\xfd\x51\x43\x65\x36\x0a\x14\xbe\x83\x6a\x22\xce\x7c\xd7\x80\xf5\x36\x96\xce\x1e\x4d\x8b\x10\x84\x38\xfd\x4e\x78\x21\xe9\xfa\x26\xdd\x4a\xfc\xdb\xc6\x59\x91\x51\x19\xe5\xfb\xd3\x68\xfb\x39\x2a\xdd\x7f\xdf\x37\x1c\x45\x04\xde\xc1\xe1\xfc\xf3\xb0\x30\x43\x35\x37\x50\x8d\x2e\x1a\x47\x61\xbe\x4a\xd5\xd4\x94\x56\xd1\x8b\x28\xe6\xeb\x52\x12\xd7\x37\x91\x23\x9f\xa8\x7f\xbf\xa4\x3e\xfc\x92\x2f\x98\x27\x05\xd7\x9f\xc5\x8e\xdb\xd8\x62\xb5\x3e\xc2\x34\x37\x8f\x35\x0a\x63\x3a\x94\xa3\xc5\xfa\x9e\x78\x77\x98\xbd\x8f\xc4\xf9\xdf\x2f\x69\x0e\xbf\xa4\xc5\x67\xc1\x94\xd2\x8c\x7d\x17\xa7\x76\x9c\x8e\x96\x93\x65\xf4\x36\x56\x56\x4f\xaa\x97\x23\x82\x54\xbd\xfd\xa2\x9b\xca\xec\xcd\xff\x7e\x49\x6f\xf8\x25\x3f\x10\xf5\x38\x9c\xe3\xb8\x97\x0d\x9c\xab\xfd\x52\xdf\x5e\x45\x1d\x6d\x2a\xf8\xf0\x37\xca\x9e\xfd\xf3\x5c\x85\xd1\xe2\x84\xdf\xbf\xaf\x7c\x47\x49\x86\x5f\xd2\x33\x48\x75\xf5\x96\xe8\x58\xdb\xcd\xb5\xa8\xbc\x41\x5d\x2a\xc7\xbb\x93\xa2\xfe\x93\x3e\x3d\xb8\x28\xf3\xba\xed\xf7\x8a\x3a\x6b\xfe\xfd\x92\x15\xf0\x4b\x6e\xf6\xac\xe0\x6d\x84\x9e\x1b\x59\x3e\xba\xc5\xd1\x5e\x54\x3c\x4a\xcd\x50\x3e\xdc\xbb\x86\xae\x96\x73\x8f\xbd\xcb\xec\x41\x41\xd0\xbf\x5f\xb2\x05\xe9\x64\xfb\x77\x74\x22\xb2\x45\xbb\xb2\xdc\x32\xe9\x3e\x34\x3f\x48\x9e\xb6\x45\x89\xed\x4c\xf8\x89\x76\xcb\x86\x0f\x54\x6b\x4d\xd9\x8c\xfe\x6f\xba\xe4\xa0\xa6\xf8\x7f\x6c\x3b\x7f\xb5\xe5\xd1\x22\x09\x83\xcd\xe3\xc8\x86\xf6\x47\x4f\xd3\x7a\x3e\xd8\x98\xaf\x04\x36\xf3\x3e\x53\x4d\xf7\x0d\xfa\xdd\x6d\x80\x06\x8d\x58\x01\x38\xd8\xcb\x4d\x29\xbf\xe2\xc5\x9f\x17\x02\x1c\xc9\xd7\x2d\x45\xfb\x2e\xd7\x89\x36\xd9\x46\x79\x7c\x23\x11\xaf\xe6\xe1\xac\x19\xed\xb6\xe7\x26\x46\x94\x05\x71\xb0\x97\x1b\x9d\x47\xe7\xef\xbe\x5b\x5b\xc9\xaf\x18\xca\x56\xad\xa4\x92\x13\xdb\x28\x8d\x30\xab\x0b\x79\xdf\x4d\x7e\xdf\x6e\x72\x16\xac\x85\x52\x37\x10\x07\x7b\xb9\x2d\x60\x29\xdf\xc9\x96\xe6\xd4\xf1\x25\x77\x50\xfb\xa5\xcc\x86\x3a\x43\xb0\x9a\xb8\x66\xe0\xce\xe2\xeb\x70\xc5\xb1\xf6\xa9\xd2\x1a\xa2\x2c\x88\x83\xfd\xb5\xaf\x56\x97\x1e\x6e\x56\x26\x3c\x3a\x4d\x7e\xdb\xfe\xda\xc3\xcd\xa4\x04\x53\x7e\x5a\xea\x26\x7a\x4e\x20\xc6\x9c\x7b\xcf\x41\x3a\x34\xc0\x04\xe2\x60\x65\x1f\x54\x5c\x33\x18\x76\x69\xd5\xb9\x62\xff\xf6\x5b\x1f\xca\x69\x63\x61\xdc\x22\x75\xa6\x7a\x50\xd8\x6b\x51\x99\xd9\x87\xb8\xbe\x64\x88\xf0\x1d\xc4\x21\xce\x7c\xd7\xb8\x48\xb7\x09\xf4\xc4\xfd\x3f\x4e\xeb\xc1\xe2\xda\x9d\x23\xac\x34\x0f\xbc\xf2\xfa\x58\x45\xe3\xb7\x4c\xbc\xbd\x1d\x3b\x0a\xa7\x9f\xa3\x7e\x18\xc5\x63\xe2\x8e\xe0\x50\xc4\xaf\x07\x71\x30\xb3\xaa\xf4\x33\x3e\x24\x5f\x0a\xd5\xc0\xf8\x25\x2e\xc6\xbd\xa5\xf9\x54\x75\xaf\x58\x66\x8d\x62\xa6\xdd\x44\x8f\x80\xa9\xf4\x15\x16\xf4\x55\x06\xe2\x60\x37\xd5\x03\x53\x2d\x36\xb6\x3c\xbe\xdb\xe9\x4c\x3d\xd8\x7d\x2c\xd3\x83\x8a\xc2\xb4\x82\x5d\xa8\x41\xb5\x46\x37\xd6\x42\x2e\x9c\x0a\xea\x36\x81\x38\x98\x59\x79\xa9\x9a\x7b\x93\xa4\x3f\x69\x1f\xe1\x52\x24\x3f\xd1\x7b\x33\x49\xe6\xfd\xf2\x80\xd3\x7a\xb7\x3e\xb8\xaf\xf4\xd3\xb3\x86\xed\x41\x44\x59\x10\x07\xfb\x6b\xef\xa0\xdc\x46\xb9\xa1\x36\x11\xb6\xe8\x7b\xa4\x1b\xb9\x9b\xb7\xb3\xb3\xb0\xf5\x50\x58\x27\x90\xc3\xd9\x47\x50\x2a\x92\x8b\x90\x07\x51\x16\xc4\xc1\xca\x0e\x18\x1e\x15\x98\x39\x6d\x6f\x9d\x58\xab\x9b\x5c\x8f\xea\x4f\xf6\xd5\x14\xd4\xe4\xb3\x67\x89\x09\x0a\xa8\x37\xc1\x49\x35\x89\x44\xf4\xc8\x41\x1c\xe2\x20\x28\x91\x0b\xf5\xc8\x41\x6f\xd6\xff\x63\x35\xd6\x5f\xde\x61\x94\xcb\xf7\x5f\x3d\x9c\x29\x9a\xaa\x16\x73\xae\xfd\x7e\x1f\x4b\xdc\xef\x46\xb2\x4c\x54\x73\x77\x43\x28\x96\x18\x34\x6a\x07\xe2\x60\x6a\xb9\x27\x5f\x9b\x28\x6c\x5a\xd5\xed\xcb\x99\xa1\x3c\xb8\x3c\x92\x95\xb7\x36\x4e\xf9\xf4\x1d\xdf\x94\x7c\xb6\x35\xb9\x71\x24\x35\xd4\xc7\x05\x71\xb0\xbb\xca\x74\x75\x58\x55\x26\xf8\xe6\x67\xe2\xc2\x48\xb2\xa8\x53\xf9\xc6\x70\xcc\xb1\x9b\x53\xee\xde\x23\xf1\x15\xe3\xbf\xac\xc9\x8d\xa1\x79\x1d\x20\x0e\xa6\x56\xea\xec\xc2\xa1\x9e\x4b\x15\x9e\xef\xe8\xfe\x2f\xc6\xeb\x2a\xc7\x38\x62\x39\xeb\x2f\x9b\x94\xcf\x5c\x8c\x2c\xc7\x99\x36\x3e\x15\x23\xca\x82\x38\xd8\x5f\x2b\x2b\xb9\xeb\x2e\x83\x96\xe4\xe3\x61\x3a\x40\xad\x48\xa5\xd7\xfc\xf0\xbd\x6b\x76\xe2\x93\x93\x65\x2e\xd3\x3c\x8b\xf5\x99\xeb\x2e\xd0\xae\x02\x00\x0e\xae\x56\xb7\x96\xb3\xd2\x96\x6c\x5e\xdf\x91\xcb\xdf\xc0\xfa\x65\xd4\x37\x21\xc1\xfb\xf5\x77\xd0\x8a\x6f\xa1\x8c\x2d\xe0\x37\x18\xd4\x41\x6a\x01\x38\x84\x5a\xfa\x17\x52\x0b\xd4\x83\x42\x56\xab\x56\x8e\x9b\x9f\x72\xf2\x17\xff\x38\x75\x97\x98\x3c\x66\x2c\x6f\xfa\x99\x00\x4f\xb6\x9f\xf0\x31\xee\x76\x33\xa1\x7b\x61\x17\x2d\xe2\xe7\x83\x38\x98\x5a\x6f\x49\x25\xd1\xac\xb4\xa6\xb9\x6f\x56\x18\x60\x61\x70\x2f\x64\x2e\x3a\xbd\x74\x1c\x26\x45\xd5\x22\x9b\xb0\x2d\x73\x79\xf4\x06\xda\xc4\x1b\xc4\xc1\xee\xea\xfd\x72\x21\xe6\xae\x59\x2a\x1f\x22\x99\x4e\xb2\xde\xbc\xce\xf9\xce\x82\x3b\xe5\x26\xc4\xc3\xd9\xa8\x8b\xfc\x01\x23\x5e\x9c\xd0\x99\xef\x20\x0e\xa6\x56\xc9\x09\x9f\xce\x90\xc1\xd5\xc8\x2b\xca\x1d\xe7\x56\x33\x6b\x09\x83\x58\xf7\xfe\xea\x53\xdb\x0a\x08\xf7\xb0\x5e\x61\xf6\xa4\x83\x86\xaf\x41\x1c\xec\xaf\x8d\x93\x66\xbd\x71\xa9\xd1\x98\xa4\x0c\x25\xef\xe7\x37\xc6\x8d\x6d\x1d\x9d\x8e\x59\xbf\x8f\x2f\xde\x9c\xdd\xe7\xaf\x57\xcc\xe6\x13\x42\x94\x05\x71\xb0\xb2\xd8\x7a\x2e\x47\xe3\x49\x37\xa4\x23\xa7\x3c\x3d\x6b\xe7\xa4\x35\x73\x77\xba\xee\x86\x5d\xd2\xf9\x85\x75\x7e\xfb\xdc\x31\x55\xe5\x07\x74\x30\x37\x80\x43\xa8\x65\x7e\x21\xb5\x40\x3d\x65\x64\xb5\xae\xa0\x8b\xea\x3c\x28\xde\x37\x9a\xe4\x69\x91\x9d\x29\x09\xa3\x23\xe9\xee\x45\xab\xb6\x6e\xc9\xd0\x88\x3c\xc6\x6b\xbf\xf7\x7b\x0e\xf1\xf3\x41\x1c\x7c\x36\x9a\xba\x8b\x7e\xb9\x10\x4e\xaa\xf1\x65\x91\x02\xed\xeb\x8f\xfb\x3e\x2c\xec\xdf\x4b\x7f\xa8\x75\x09\x8f\xa1\x02\x7f\x16\x9d\x1b\xda\x61\x06\xc4\xc1\xe7\x39\x52\x8f\x12\x99\x96\x55\xe1\xe6\x6e\xa0\xdd\x3a\xf7\x54\x45\x63\x58\xa9\x1e\x3e\xfa\xf3\xc9\xef\xeb\x95\x3b\xb8\xad\xe6\xb8\xd0\x96\x48\x20\x0e\xa6\x96\xb0\x8d\x40\x05\xcf\xf6\xb7\x3c\x35\x8c\xa2\xce\x23\x2f\x09\xed\x27\x6b\xd5\xce\x6e\xee\x93\x92\xe6\x8f\xaa\x59\x66\xd8\x7e\x42\x13\x9c\x40\x1c\xec\xaf\xa5\xbe\x87\x2b\x67\xd6\x89\x51\x29\xca\xa8\x2b\xe8\x89\xce\x1b\xe8\x32\x96\x22\x44\xd9\x36\x1c\x22\x76\x24\x32\x5f\x79\x66\x07\x1d\xba\x09\xe2\x60\x65\x49\x77\x50\x95\xf2\x88\xee\xd9\xd6\xcb\xd5\x9d\xe2\xb9\xb5\x54\xad\x1e\x6b\x1d\xfb\xb4\xbe\x34\x56\xcf\xac\x7c\x53\x2b\x52\x01\xcd\x46\x03\x71\x08\xb5\xbc\x2f\xa4\x16\xe8\x8b\x08\x59\xad\x40\x73\xac\xe2\xe5\xd3\xfa\x45\x7a\x8d\xea\xe8\x7e\x5a\xab\xe3\xba\x65\xb6\x57\x52\xfb\x9e\x7f\x52\x6c\xf3\x2a\xab\x68\x31\xca\xa0\xf1\x44\x00\x07\x53\x2b\xeb\xcc\x32\xbe\x89\x61\x6a\x26\x7b\xd0\x5d\xe0\x5b\xa0\xdd\x80\xea\x55\x26\x0a\x8a\x07\x01\x12\x53\x75\x3c\x2a\xe9\x93\x1d\xd0\xfc\x2e\x10\x07\xbb\xab\x45\xab\xc9\x73\x03\xad\xfb\xfe\x7d\x32\x5c\x3d\x27\x43\xb5\x4e\x4d\x52\xbf\xd8\xe6\x4b\x9f\xf2\x32\xf0\x29\x4f\xd2\x63\xd5\x41\xbb\x28\x82\x38\x98\x5a\x47\xeb\x5c\x74\x5a\x7d\xa7\x21\xd1\xdf\x9f\xc4\xa5\x51\x63\xbe\xe8\x58\x2c\xad\x65\x97\x16\xc5\x6e\xee\x6f\x65\x2d\x34\xe8\x1c\x40\x94\x05\x71\xb0\xbf\x76\x44\xb6\xbc\x38\x0f\xdd\x49\x1a\xad\x4d\xb1\xc8\xa7\x7f\xea\x16\xaa\x8c\x2b\x3d\xbe\x7e\x59\xa2\x1a\xe5\x23\x33\x0b\xd1\x26\x68\xba\x08\x88\x83\xdf\x04\xff\x34\xe9\x76\xd1\x0c\x87\x78\x15\x7b\x1a\x45\x66\x59\xf7\x47\x2d\x61\x2c\xd5\x0f\x9f\x3e\xd5\xe3\x62\x32\xe0\xa5\x9c\x28\x44\xa8\x05\xe2\x10\x6a\x25\x5f\x48\x2d\xd0\x97\x2f\xb2\x5a\x29\x04\xa4\x56\x0e\xdb\xee\xa3\x35\x15\x54\xde\x9b\xfc\xf1\x0f\x4e\xd0\x84\x9a\x6a\x44\x8b\x7d\x95\x8b\xa6\xaf\x24\xa7\xae\x43\x3b\xea\x82\x38\x98\x5a\x74\x64\x62\x0d\x81\x4f\x98\x0b\xed\x2f\x51\x1e\x84\x3b\xc6\xdc\x8a\x49\x4a\x1b\x2e\x13\xfe\x10\x75\xd8\xeb\xfc\xe6\x84\x82\x5a\x1c\xfa\x92\x03\x70\xf0\x55\x6d\xfa\x64\x65\x81\x7e\x19\xaa\xe1\x51\xe8\xee\x7b\xe7\x86\xa2\xb5\x2c\x3c\xd8\xef\x3e\x5c\xfe\xd3\xc7\x73\x47\x8e\xa1\x96\x1f\x9a\xef\x0c\xe2\x60\x6a\xad\xdd\x4b\x65\xb0\x92\x7a\x7b\xaa\x5d\x36\x7f\x84\x86\x49\xc5\x87\xff\x21\xc0\x63\xc5\xae\x84\x35\xae\x58\x27\x2c\x2d\x53\x16\xea\x6f\x83\x38\xd8\x5f\xdb\xca\xed\x90\x4b\x77\xf8\x6c\x5e\xfd\x95\x48\xe2\x90\x75\x8f\xe2\x32\xfb\xb5\xa7\xa9\x5b\x2f\x6a\x06\xc2\x08\xe5\x9d\xf5\xca\xbb\x10\x65\x41\x1c\xac\x2c\x4b\xa4\x9a\x8e\xbc\xf7\xf4\x66\xb5\xd5\x5d\x9b\x5c\x97\xfd\x21\x0e\xfd\x52\x33\x8c\x46\x9d\x6a\x6c\x36\x7d\x4f\xcd\xae\x4a\x28\xb3\x01\x71\x08\xb5\x2a\x2e\xa4\x16\x68\x84\x03\x59\x2d\xd2\x9f\x7c\x35\xcc\xb1\x96\xfc\x11\xb5\x8d\x27\x1c\xf7\x71\x19\xaf\xa3\xef\x6b\x04\x86\xe2\x49\x46\x97\xba\x12\xc9\x50\x86\xc5\x22\x7e\x3e\x88\x83\x4f\x74\xd4\xb7\xfb\xc4\xf1\x85\x85\xf8\x61\xed\x43\xb2\x77\xcb\xc1\x94\x6f\x99\xfa\x47\xbe\xd2\x4e\x30\x5e\xc5\x6b\x88\x45\xb3\xa1\xd0\x87\x26\x3a\x02\x38\x78\xc7\xd8\x9e\xa7\xc4\x70\x74\x74\x8c\x68\xf7\x8a\xd2\x0b\xba\xbb\xa3\xc3\x89\x89\x59\xf7\xe7\xed\xf1\xb4\x1b\x07\x3e\x1b\x08\x54\x40\x87\x5b\x83\x38\x98\x5a\x5c\x05\x6a\x9c\x3a\x2f\x4a\x4a\xc2\xcc\x6b\x9a\xef\xcc\xf8\xae\xf4\x3a\xea\x55\xbb\x3e\x7d\xae\xe1\x33\x4c\xf0\x80\x4f\xb4\x0d\x3a\x8b\x07\xc4\xc1\xfe\x5a\xb1\xb2\xed\xde\xb4\xc6\x4e\x9e\x5d\x2e\x87\xfc\x5a\xb6\x2e\xc5\x6e\xb3\x8c\x8d\x32\x8a\xd4\xf2\x17\xe4\xe8\xc3\xb7\xb2\x35\xa7\x11\x65\x41\x1c\xac\x2c\xff\xe3\x97\x3f\x42\x18\x94\xc9\xbd\x05\xb5\xbb\x08\x8e\x08\xa4\x1c\x82\x5b\x5c\x0e\x66\x6b\xf4\xa9\x95\x19\x0e\x6e\xf0\x1a\xce\x22\xd4\x02\x71\x08\xb5\x5a\x2e\x16\xbe\x83\xc6\xb0\x11\x67\xbe\xcf\xc0\x87\xdd\xe8\x2f\xd1\xa1\xd3\x0b\x73\x51\x2f\x11\x79\x8f\x44\xcf\x16\x2a\xde\xfe\x16\x96\x9a\x43\x8d\x2f\x6c\x40\x91\xd1\xfd\x6a\x2f\xf1\xf0\xdf\x47\xfa\xfe\xc0\x2f\x29\x7f\x4d\xe5\x57\x7b\xe6\x8e\x2a\x7b\xeb\x07\xfb\xe9\xf8\x99\x32\x8c\xf6\xcd\xfe\xd5\x81\x51\xed\xb8\xe4\xa4\x91\x6f\x69\xd9\x9b\xff\x9b\x91\x3e\xd0\x0f\x43\x6e\x6d\xd7\x28\xdf\xef\xa2\xab\x97\xee\x14\xcb\x8c\xea\xb6\xd5\x7b\xb8\xf3\x2c\xfe\xca\x99\x51\x3b\x9b\xc6\x7d\xa9\xce\xc0\xbe\x37\x56\x87\x30\x02\xc4\xc1\x5a\x5b\x0f\x51\x68\x33\x2b\x6e\x53\x74\xe1\x59\x09\x45\x55\x3a\xeb\x71\x4f\x26\xe3\x4d\x3c\x93\xdc\x70\x59\xeb\xad\xe8\x40\xd2\x20\x68\xa2\x2e\x88\x83\x89\x76\x74\xa2\x84\x73\x25\x36\xc1\x87\x05\x6b\x63\xd2\x32\xce\xaa\xc1\x2c\x34\x0a\xc7\x21\xcb\x15\x47\x70\xe3\xd4\xf7\xf8\xc4\x08\x3a\x59\x0e\xc4\xc1\x5a\x9b\xbf\x98\x80\x45\x02\xe7\xd7\x67\xf9\xb6\x61\xac\xe2\x8a\xa5\x95\xac\x8d\xc9\xae\xab\xaa\x96\xd6\x97\x47\x6a\x3b\xb2\xe5\x78\x39\xa0\x75\xc4\x00\x0e\xf6\xd7\xe2\x97\x38\x0b\xbe\x31\x37\xbe\xb9\xd2\x92\x77\x5d\xde\xe3\xc0\x5b\xb3\x2f\x87\xf0\x41\xf4\xeb\x07\xf4\x15\x94\xd9\xa4\x9f\x67\x14\xa1\xed\x2b\x00\x1c\xac\x6c\x59\xa8\xe1\xf4\xca\x8e\x01\xc1\x6a\x3a\xa1\xf1\x47\x0f\xaa\x57\xd6\xea\xe3\x9d\x1c\x84\x5f\xcc\xed\x49\xa6\xa6\x49\xdc\x55\x36\x11\xad\x0d\xc4\x21\x5a\xdb\xcc\x85\x1e\xe4\x20\x81\x91\xd5\xea\x69\x3e\xa6\x22\xd7\x76\x41\x7f\x3f\xa0\xaa\x50\xed\xff\x78\x5a\x2d\xed\xb5\x87\xc3\x13\xea\x06\xf4\x15\x6e\x73\xa1\xa0\x0a\x68\xb4\x17\xc4\xc1\xd4\xfa\x1c\xe1\x42\x93\xfb\xf3\x63\xe2\x0b\xc7\x43\xec\x1f\xb2\x81\xa5\xe3\x6f\x67\x33\x47\xaf\xd1\x9f\x08\x98\x70\x64\xbf\xba\x3b\x08\x9d\x78\x03\xe2\x60\x77\x55\x41\xae\xfb\x91\x28\xff\x5c\xec\xf1\x7b\x1d\xb5\x07\x0d\x21\x2b\x22\x06\x97\xc9\x24\x63\x3a\x89\x5f\xe5\x4c\xca\xdd\xd3\x62\xcc\x85\xe6\x80\x03\x38\x98\x5a\x1b\x81\x53\x7b\xe1\x28\x97\xa7\x5b\x14\xa9\x36\xcf\xd7\x88\x96\x9c\xe4\x9e\xed\x78\xe6\x0f\x25\x2f\xaa\x18\x17\x89\xed\x5d\x85\x76\x9f\x02\x71\xb0\xbf\x56\x5b\x50\xec\x95\x92\xe4\xb7\x49\x19\x8c\x1d\xaf\xae\xa8\x9a\xb5\xbf\x7b\xbe\xde\xd5\xb9\x73\x12\x9f\xdf\x7d\xff\xbc\x7a\x39\x86\x17\x51\x16\xc4\xc1\xca\x06\x45\x1f\xed\x18\x31\x0e\x5c\x2f\xc1\xa0\xad\x27\xe6\x7e\xf7\x46\x97\x5b\xbf\xac\xb9\x4f\x86\xd5\x29\xf6\x3a\x81\xd2\xc8\xdc\x29\x42\x2d\x10\x87\x50\xeb\xcf\x85\xd4\x02\xe5\xa2\xc8\x6a\x85\x91\xa1\x19\x6c\x50\xf7\x90\xe1\x1c\x1d\x93\x7d\x21\x50\x58\x36\x5e\x76\x29\xbd\x71\xec\x45\xdc\xe0\x61\x95\x4a\xf8\x7b\x2c\x18\xf1\xf3\x41\x1c\x4c\xad\x06\xbe\xdf\xf7\x27\xce\x26\xba\x69\xfa\x6f\xa5\xbf\x59\xa5\xab\x3a\x4a\x25\x31\x73\xe2\xd5\x56\x64\x4f\xf9\xf9\xe6\x7d\xdc\x0a\x74\x14\x24\x88\x83\xdd\xd5\x3f\x0f\xfc\xf6\x26\x7c\x53\xfe\x8c\x3d\x10\xb5\xf4\x16\x99\x08\x11\x7c\xe6\x10\xfe\xa9\x4e\xa2\x7c\x76\x57\xec\x56\x88\x1b\x06\x74\xd8\x0b\x88\x83\xa9\x15\xb3\x76\xc7\x4a\x8a\x85\x55\xee\x73\x7b\x89\x93\x8b\xed\x5a\x3c\xb5\x4c\xb1\xd9\xd4\xb7\x90\xce\xde\xe0\xfa\xea\xc5\xbc\x6a\x68\xe3\x25\x10\x07\xfb\x6b\x83\x47\x72\x86\x69\x6c\xd7\x76\xfa\xb6\x58\xa7\x2c\xde\x58\xba\xa6\x93\xe4\xda\x35\x4a\xbc\x78\x48\x74\xfe\xa2\x7f\xe9\x6b\x39\x34\x30\x09\xe2\x60\x65\x2f\xbc\xf2\xfd\xf8\xbd\x4f\x0a\x83\x82\x79\xd4\xba\xb0\xf8\x33\x0a\x52\x03\x85\x13\x32\xb4\xb7\x06\xd6\x11\x51\xf8\xd7\x59\x22\x1f\xf4\x9a\x85\xfc\x37\x6d\x1c\x24\xac\x6f\x8d\x9f\xd1\xf5\x72\xb6\x5a\xcb\x60\x7a\xc8\x89\xa1\x70\x2a\x4a\x4a\xa3\x50\xac\x77\xf9\x75\xb8\xdc\x91\x63\x85\xe1\x7f\xd0\xbd\xbb\x96\x79\x78\x68\x41\x0c\xab\x47\x57\xd2\x3d\x26\x7f\xe4\xe5\x3c\xae\x3b\x5b\x14\xe6\xc3\x36\x7b\x93\xc5\x2a\x2c\xf0\x23\x14\x16\xbe\x83\x2a\x23\x87\xef\xb2\xc6\x12\x0b\x4b\x26\xf8\x49\x36\x3f\x52\x71\x97\x1d\xf3\x8c\x3e\x74\x1a\xa5\x99\xce\xe3\xe6\x74\xfc\x5d\xf9\xd9\x31\xc1\x76\xfd\x3f\x68\xfd\x37\x6d\x07\xda\x0d\xe7\xd2\x0e\x91\x7b\x74\xcd\xfd\x19\x7e\x74\x27\x36\x56\x3c\xc2\xbf\x5b\x12\x06\x97\x7f\x34\xf2\xa1\x0c\x41\xe1\x3b\xa8\x26\xe2\xcc\x77\x78\xf8\x4e\xa1\xfd\x3e\x6b\xc7\x5d\xa6\xa4\xf7\x7b\x9f\xa0\x8a\x7f\xe9\xe7\xe0\x07\x77\xe9\xcf\x4f\x6a\x6d\xe8\xe2\xc7\xdb\xcb\x0c\x12\x56\xff\xb9\x83\x23\x8b\x14\xbe\xd3\x78\xa9\x2f\x57\xdb\x79\xb1\x98\xdd\xf9\x94\xc6\x92\xef\xc8\xd4\x97\xf8\x85\xe6\xe5\xdf\x6c\x6e\xe1\xcc\x9e\x05\x82\xd6\x3d\xf5\x7f\xbf\x24\x52\xf8\x5e\xf3\x8a\xa1\x36\x5a\x62\x66\xfa\x43\x51\x36\x49\xb4\xc5\x9e\x29\xd3\x87\x4a\xc3\xd4\xbe\xdb\x8e\x01\xc1\x72\xbc\x87\xe1\xdf\xe9\xfe\xfd\x92\x48\xe1\xbb\xf4\xac\x23\xe6\x1f\xf2\x91\xbe\x90\xee\xb3\x59\xbb\x3b\xee\xbb\x5d\x46\x76\x84\x4f\xfc\x8c\x1f\x16\x5f\xd3\xe0\x1f\x22\x3f\xfc\xf7\xfd\xfc\x65\x91\xc2\xf7\x35\x57\x29\x32\x16\x22\x3d\x7a\xfd\x21\x69\xdc\xaf\x65\xcb\x3a\x87\x9a\xfd\xa1\x01\xeb\x5e\xf6\x8b\x7e\x56\x5e\xdc\xe1\xbb\x6f\xfe\xfd\x92\x48\xe1\xbb\xf7\x6d\xa1\x70\x49\xc3\x9c\x5e\xe1\x0a\x01\x76\x4e\x5c\xfe\x40\x92\x4d\x9b\x0d\x7b\x63\x3f\x22\x1e\x34\x55\x5c\x1f\xfc\xa3\xe5\x7f\xbf\x24\x52\xf8\xde\x66\xd5\x14\xeb\x64\xbe\xfe\xa7\xbf\xa1\x1f\x25\x7b\x3f\x10\x03\x1d\x7b\x78\xe1\x79\xd5\xee\x39\x67\x0a\xcb\xba\xad\xe3\xfe\xe5\x7f\xbf\x24\x52\xf8\xbe\x37\x44\x7e\x95\xe5\xf5\x70\x54\x43\xc4\x3a\x76\x88\x4a\x3b\xe1\x2b\x2e\x6a\xac\x2c\x5a\x35\xe1\xa7\x16\x06\x77\x3e\xc7\x91\xf2\xfc\x6f\xba\xe4\xa0\xa6\x88\xfc\x72\xb3\xf2\xee\x2b\x54\xfd\x20\xb5\xcf\x46\xaf\x6b\x18\xec\x21\x5a\x45\xbf\xa0\x33\xeb\x7d\x93\x53\xef\x9e\x47\x6c\x1b\xbd\xc3\x92\x1e\xe2\x01\x0c\xe2\x60\x2f\xb7\x0e\x9d\xcc\xe3\x59\x79\x6b\x5d\x2f\xe1\x8f\x0b\xa8\xef\x6d\x1f\x32\x2b\xf7\x57\x47\x16\x7c\x9e\xcf\xe8\x7c\xf9\x26\xfc\x6f\xaa\x15\xa2\x2c\x88\x83\x3d\xd7\xd9\x3d\xeb\x6e\xd5\xd5\xdc\xda\xe7\x13\xe9\xd5\x27\x0d\xc9\x10\x9a\xfb\x5b\xa9\xd8\xf9\x4b\xee\xd1\xb5\xc7\x9f\x8c\xd1\x07\x3b\xa1\x4d\x81\x41\x1c\xec\xe5\x96\x4c\x4d\xd5\x35\xc8\xd4\x93\x2b\x79\x12\x3b\x11\x19\x4a\x7e\x28\xf8\xa4\x66\x51\x9f\x08\xd3\xe7\x80\x2e\xfc\x63\xc9\x26\xab\x11\xa2\x2c\x88\x83\x4d\x01\x73\x40\x53\xba\xa4\x19\xfe\xe8\xd6\x93\x50\x95\x89\x74\xc3\x30\x9c\xcd\x1d\xde\x78\xdf\x4e\x5d\xae\x5e\x51\xb9\x9f\xa6\x2f\x2c\xa1\xad\xcc\x41\x1c\xec\x26\x5c\xe1\x9d\xad\xa0\x5a\x79\x1c\x50\x6a\xcb\x10\x6b\x66\xde\x3d\xd2\xbb\x2b\x79\x47\x4f\x07\xcb\xf4\x28\xf4\x74\xe2\x7c\xb6\x75\x1c\x11\xbe\x83\x38\xc4\x99\xef\x17\x0a\xdf\x41\x4f\x5c\x64\xb3\x08\xc6\x4e\x02\xbf\xe5\x08\x90\x5c\xa7\xbc\x49\xbe\xa4\xf6\xaa\xbd\xdb\x67\x7a\xd1\x54\x20\xcf\xc8\x42\x88\x71\x6d\xf5\x86\xfe\x43\xc4\xaf\x07\x71\x30\xb3\xba\xa8\x74\x52\xe4\x05\x1e\xd6\x66\xeb\xab\x84\x24\x3a\x7f\xe8\x2b\xaf\xf1\xcb\xe4\xfb\x64\x40\x5b\xac\xad\x40\xa3\xd6\x33\x0c\xed\xb6\x0d\xe2\x60\x37\xd5\x94\x21\x9c\x38\x5e\xfb\xba\xf5\x21\x71\x4e\xc9\xc1\xa3\x9d\x35\x8f\x1b\x0a\x1e\xa3\xe1\x29\x1e\xd7\xc9\xd2\xc2\x56\x75\x06\xb5\x11\x65\x41\x1c\xcc\x2c\x55\x34\xbf\x95\x08\x2d\xdf\x28\xac\xb9\xec\xb6\x5f\x6d\xd6\x82\x4d\xbc\xda\xb4\x34\x4c\x6b\xd6\x77\x1f\x8c\xbb\xbc\x70\x6d\x34\x80\x22\x0c\x00\x07\x33\x0b\xed\xc3\xd3\xb7\xba\x19\x7a\x9b\x26\xcf\xd8\xf2\xbc\x15\x5c\xfd\x3d\x9e\x1b\x2e\x72\xaf\x4e\x05\x95\x17\x0f\x37\x5a\xc7\x66\x51\x23\xca\x82\x38\xd8\x4d\x58\xa1\xcb\x3d\x25\x5f\xb3\xa9\xad\xfe\x24\x6c\xf3\x70\x20\x8b\x7f\xba\x66\x8f\xe2\xf1\x98\x0c\x31\xa9\x6d\xc2\xad\xc7\xfd\xf8\xf8\xd0\x6a\x2c\x00\x87\x38\x08\xea\x62\xe1\x3b\xe8\xcd\x8a\xac\x56\xde\xc3\x8d\xfa\x48\xf5\x65\x6e\x41\x86\x1e\x06\x91\xd0\x18\xb3\x77\xec\xb6\xad\x2c\x65\xfe\x9c\x9c\xb7\xbc\x2c\x8e\x23\xe7\x2b\xa0\x29\x0d\x00\x0e\xbe\x83\x1e\xb6\xf9\x1e\x93\xf2\xaf\x30\x86\x98\x9b\x6f\x28\x78\x1f\x8e\xa9\x60\x95\x9d\xd5\x1c\xc6\x68\x6f\xab\x32\xae\x29\xe7\x67\x41\xff\x2c\x10\x07\xbb\xab\x8a\xa5\xd4\xb4\x13\x38\xf4\x29\xfd\x6f\x6d\xdb\x24\x7a\x4a\x7e\xcc\xf1\x08\x3b\xb9\xef\x99\xce\x46\x0d\x24\xa1\xb3\x18\xd1\x34\x23\xca\x82\x38\x98\x5a\x3e\xcc\x04\x7f\xf2\x39\xe6\xc2\x1e\x92\x6e\x93\x7d\xc9\xbe\x74\x4f\xc2\x8c\xe4\xd9\xcf\x4b\xef\xbd\x1c\xe9\x77\x79\x8d\xed\x3d\xa1\x13\x9b\x40\x1c\x4c\xad\xfc\xdf\xcd\x97\x2f\x5f\x0f\x1a\x97\x34\xce\x0c\xff\x7a\xc5\xe3\x44\x7c\x5b\xc8\xa0\xff\x65\xea\xdf\x89\x38\xee\xb2\x22\x12\x31\x41\x68\x59\x22\x80\x83\x6f\x23\x38\xc8\x4a\xb9\x6f\x15\x20\x8c\x8b\xfa\x80\xa0\x6c\xe6\xb6\x8d\xe1\x1e\xf7\x17\xf9\xc4\xaf\xeb\xb7\x74\x42\x58\xf0\xbd\x9b\xb0\x11\x6a\x81\x38\x84\x5a\x17\x0b\xdf\x41\x3d\x28\x64\xb5\xfa\x32\x03\x0b\xdd\x46\xbf\x19\x90\xdf\xd4\x36\xc6\xc2\x0b\x88\xcf\x79\xaa\x15\x1f\x5f\xb3\x60\xe0\x76\x09\xf7\x5b\xfd\x66\x02\x34\x65\x08\xc4\xc1\xd4\x3a\x4b\xa1\xe0\x15\x65\x31\x3b\x6d\xa3\x98\xbb\x5b\x67\xd6\xbd\x50\xf1\x55\x46\xcd\x75\xb4\xfb\x26\x4e\x68\x59\x47\x5d\xf9\x38\x94\x39\x82\x38\xd8\x5d\x25\xa9\x2e\xfc\x6a\x39\xb9\xda\xcb\x9f\xd2\xee\xce\x5b\x34\x1f\x55\xe2\x9e\x82\x8b\x69\xf3\xfb\xd5\xac\xda\x65\x95\x80\xe1\x75\xe8\x0c\x0e\x10\x07\x53\xab\x8c\xa6\xa5\xdc\xe6\xa0\x7b\xaf\x42\xe8\xe3\x8b\x09\x67\xe1\x36\x5f\x89\xfa\xe3\xcc\x2a\x86\x64\xe1\x78\xe9\xa9\x01\xad\x66\x28\xca\x04\x71\x30\xb5\xa4\xee\xaf\xc7\xb8\x0c\x4f\xc6\x65\xd3\x8e\x2d\x7d\x90\x4e\x0f\x76\xd4\x1a\xb4\x23\xde\x56\x79\xf4\xf5\x13\xcb\xde\xc4\x66\x2e\x74\x68\x0c\x88\x83\xdd\x84\x10\x65\x51\x45\xf1\xd4\xc2\x4f\x4f\xd3\xca\xef\x87\x7b\x2c\x0f\x99\xad\xfd\x19\xa5\x8f\x5e\xd5\x4f\x6e\xc1\x5b\xda\x1d\xbe\x22\x8a\x50\x0b\xc4\x21\xd4\xba\x58\xf8\x0e\xea\x29\x23\xab\x55\xf3\xed\x8e\x66\xcd\x1d\x1d\xde\x7d\x5e\x27\xed\xfb\xdb\xcf\x92\xcc\xf1\xbc\x83\x18\xc3\xfc\x34\x6f\x5f\x7f\x17\xc2\x81\xd7\x29\x8b\xf8\xf9\x20\x0e\xa6\x96\xea\xf3\x5f\x8f\x68\x4d\x5e\x0c\xa3\xe3\xec\x51\x07\x5c\x89\x3d\xc1\x4d\xda\x17\x3c\xf6\xb4\xae\x59\xaa\x6a\x3c\x88\x95\x64\x81\xce\xfb\x06\x71\xb0\xbb\xfa\xdc\x40\x35\x94\x83\x73\x1e\xc3\x43\xf6\x89\x8c\x8c\xe3\xf5\x9f\xe4\xd3\xb1\xd8\x3b\xd9\x59\xa1\x6c\xc6\x8e\x59\x66\x2a\x5c\xd0\x62\x4f\x10\x07\x53\xab\xe5\x5d\xed\x07\xef\x4f\xb9\x8b\x2d\x93\x98\xf2\x94\x38\x55\x21\x9f\xac\x66\x9e\x99\xea\x12\x8f\x45\x7c\x30\xe3\x7d\x19\x19\x07\xad\x66\x01\x71\x30\xb5\xca\xb2\x2a\x46\xfa\x95\xe5\x8a\x05\x68\x2d\x63\xe7\xae\x79\xd3\xd5\xa6\x16\x2f\x4e\x3c\x5a\x26\xdd\x88\xb8\x6b\x55\xb3\x67\x05\x6d\x01\x01\xe2\x60\x37\x21\x5b\xaf\x70\x86\x31\xbc\x49\x1c\xaf\x78\x75\xa3\xc4\xd5\x91\xe7\xfe\xa5\x47\x53\xa8\x49\xa4\xc7\x0c\xbc\xc9\x13\x53\x78\x49\xde\x08\xb5\x40\x1c\x42\xad\x8b\x85\xef\xa0\x2f\x22\x64\xb5\x52\x35\x8c\xc3\x34\x82\x03\xc3\x97\x92\xdb\x94\x47\xbf\x0b\xba\xfd\x64\x8e\xe8\xca\x33\xae\xd1\xab\xbf\xf5\x95\x19\x47\x69\xc6\x18\x9a\x88\x05\xe0\x60\x6a\x3d\x60\x7a\xad\xe2\x67\x3c\xb0\xf1\x58\x9a\x60\x82\x3d\x3a\xe2\x2d\xbf\xc4\xbe\xf5\xa3\x4d\xfd\x02\x5c\x96\xef\x5b\x5b\x87\x01\x50\x30\x04\xe2\x60\x77\x95\xe1\x46\x52\xb2\xb2\x9c\x93\xf0\x1b\xbb\x90\x8c\x64\x8c\x39\x05\xfa\xdc\xa3\x43\x51\x0e\x29\x86\x6b\xc7\x1f\x64\xa9\xfa\x64\xa0\xcd\x8b\x40\x1c\x4c\x2d\xd6\x0f\xe4\x84\xb3\x35\x14\xde\x6a\x44\x6a\xdf\x97\xa4\xee\xe1\xcb\x51\xfb\xd7\x66\x7c\x1c\xb9\xd1\x6e\x4f\x99\x1a\x60\x63\x02\x6d\xe2\x05\xe2\x60\x6a\xbd\x8a\xb9\xf2\xcb\x6f\xfa\xab\x06\xe6\x04\x4d\x99\x9a\xab\x4d\x12\x6b\xd6\x77\xc6\xe6\x2b\xb4\x35\xf3\x18\x21\xd3\xba\x8a\x5a\xd0\xe6\x45\x20\x0e\x76\x13\xb6\xcc\x0a\xaf\x0e\x7d\x9b\x6b\x4e\xdd\x24\x74\x0e\x08\x20\x48\x8c\xf1\x48\x38\xfb\x54\xd2\xd5\x57\xa9\xed\x51\xd0\xbc\x4b\x16\x88\x50\x0b\xc4\x21\xd4\xba\x58\xf8\x0e\xfa\xf2\x45\x56\xcb\x3b\x8c\x29\x3f\xc2\xe6\x54\xf6\x81\x15\xfa\xd3\xd0\x2c\x3c\xeb\xba\xd7\xcd\x9b\x9b\xaf\xb9\x89\x43\x6e\x50\xfc\x0a\xfc\x20\x53\x02\xc5\xd9\x00\x0e\xa6\x56\xe6\x2f\x65\x31\x62\x83\xec\x88\xb7\xce\x23\x89\xa5\x24\x8c\xf9\x7b\x5a\x27\x42\x06\xab\xb5\xf8\x5c\xc9\x99\x07\x1b\xfa\x01\xab\x88\xb2\x20\x0e\x76\x57\x33\xf5\xe6\xda\x63\xdd\xbd\x7f\xc7\x29\xc6\x1b\x32\x1f\xf8\x67\x56\xf6\x69\xc5\xb2\x2e\x27\xe7\xd6\xd1\x61\x6b\x0a\x1f\x77\x41\x1f\x1d\x20\x0e\xa6\xd6\x21\x3f\xd6\x6a\x4e\xdf\xd6\xab\x89\x10\xb1\xdd\x19\x4d\xdf\xa3\xcf\x72\xef\x84\x2c\x6e\x0f\xf4\xdf\x15\x76\xce\x9b\x15\x1d\x9c\x85\xd6\xe0\x01\x38\x98\x5a\x9a\xc1\x29\xb9\x7f\x25\x05\xbd\x27\x5f\xe0\xb7\xbb\x3f\x1c\xca\x17\xfb\xfb\x2c\x9b\x5b\x3a\xc7\x69\xf1\xf8\xf7\x33\xcb\x51\x2f\x68\x9b\x1d\x10\x07\xbb\x09\x93\xdc\x9b\xd3\x15\xa9\xfa\x47\x05\x76\x8c\xb1\xfc\xf2\x52\x5e\x57\x3e\xa0\x32\xb7\x2c\x7c\x1d\xe7\xf9\x5d\x5c\xa0\x76\xec\xa6\x0e\x6d\x29\x0b\xe0\x10\x6a\x5d\x2c\x7c\x07\x8d\x70\xfc\x1f\x13\xff\xb9\x77\x6d\xc5\x7d\x95\x37\xe3\x1a\xad\xdf\x17\x9b\xbf\x13\xaf\x88\x97\xff\xb4\x6e\xba\x71\x44\x32\x1a\x44\xd5\x34\x53\x0c\x8d\x3d\x80\x38\x98\x5a\xde\x42\xe7\xe9\xd8\x92\xc2\x81\x44\x12\x71\x9b\xa8\xc7\x93\x1a\xb5\x1c\x69\xf7\x50\xc7\x7c\xcb\xac\x1d\x8f\x7e\x5f\x1b\x10\x1f\x87\x8c\x05\x70\xb0\xbb\x6a\xd2\x92\x5d\xd3\x81\xde\xb0\xe9\xa8\x4f\xb8\x74\x72\xa9\xde\x55\x31\xfb\xb0\xb2\xf7\xbd\xce\xb8\xab\xa1\x01\xd7\x21\x4a\x5c\x39\xa2\x2c\x88\x83\xa9\x15\x51\xb5\x7c\xd9\xbe\x53\xab\xdf\x45\xa1\xba\xa6\x9a\x07\x8d\x88\xda\xb1\xa2\xed\x7e\x63\xa1\x55\xfc\xd4\x77\xd4\x47\x7d\xc2\x50\xa7\x08\xc4\xc1\xd4\x6a\x27\xeb\xa1\xdc\x38\x9a\x49\x30\x70\xb7\x6b\x24\xbb\xcb\xd2\x99\x2b\x18\x90\x60\x24\x88\x5d\x5a\x65\x78\x7a\xf3\x6b\xf0\x3e\xf4\x85\x08\xe2\x60\x37\xa1\xda\x50\xff\xa7\x91\xee\xef\x07\xd7\x1c\x5b\x72\x4d\x48\xa6\x86\x02\x4e\x68\x06\x3e\x91\x7d\x0e\x43\x97\xd9\x49\xa0\xfd\x2e\x84\x86\x50\x0b\xc4\x21\xd4\xba\x60\xf8\x0e\x1a\xc3\x46\x9c\xf9\x8e\x14\xbe\x07\x0f\xca\xca\xd5\x39\x18\x4c\x5b\x93\xd8\xb2\x33\x36\x3c\xd2\x4a\x25\xe8\xca\xcc\x99\x5f\x7a\x4d\xfc\x6d\xd7\xcb\x42\xb8\x63\xfa\xdf\x47\xfa\x90\xc2\xf7\x5b\x6e\xcd\x3d\x8e\xaa\x33\x94\xea\xbc\xa7\x2c\x61\x0a\xd6\xe2\x6e\x42\x0b\x37\x97\xb8\xb5\x4f\x07\x30\x9a\xb8\x15\x3f\xd4\x3d\xfa\xdf\x8c\xf4\x81\x7e\x18\x72\x6b\x33\x79\x6a\x6f\xf3\xf0\x59\x5c\xf6\xea\xaf\x1d\xb9\x5f\x4e\x32\x3c\x26\x37\x31\x48\x1f\xcb\xdc\x43\x35\xd9\xf2\x61\xb5\x6b\x3e\x7b\x03\xf9\x0b\xe0\x60\xad\x6d\xb4\xe3\x0a\x85\xc5\xdf\x6d\x2d\x21\x3e\x2e\xfe\x75\xf1\x37\xe2\xc9\x64\xf3\xe3\xca\xd1\xcc\x37\x8e\x78\x9d\xbe\x1b\x8d\xe2\x43\x1b\x2f\x81\x38\x98\x68\x25\x89\x82\x75\x77\x78\x15\xb2\x2a\xc9\x8d\x9c\x8b\x8b\xb8\x7f\x57\x34\x89\xdd\xdd\x7a\xf3\xa7\xb5\xdc\x08\x23\x2e\x9e\x9e\x1b\x9a\x3c\x02\xe2\x60\xad\xcd\xd6\x8b\x32\x5e\x7d\x1f\x9b\x48\xbd\x79\x84\x86\x3e\x84\x46\x24\x19\x95\x01\x6f\x35\xf6\x8b\x92\xc0\x7d\x8b\xc0\xb8\x7b\xbf\x3f\x20\xca\x82\x38\x58\x6b\xcb\xe1\x48\x61\x53\x74\x7d\x5f\x15\xcf\x2d\x1b\x5b\xe7\x63\x33\xde\x5d\xf7\xf5\x48\x94\xb6\x7b\x85\xb4\x68\x00\x27\xff\x72\x2a\x34\xb7\x1a\xc4\xc1\xc3\x77\x31\x83\x7b\xfc\x79\xa7\xf2\x81\x07\x22\xa5\x37\x73\xee\x75\x73\x94\x8e\x32\x07\x36\x87\xe4\xee\x1c\x2f\xa3\xb7\xdf\x3f\x1e\x83\xc2\x77\x00\x87\x68\x6d\x17\x0b\xdf\x41\x02\x23\xab\x85\xaf\x7b\xf4\x6e\x2a\x34\x7f\xe8\xf5\x97\xbb\xe5\x52\xc7\x27\x05\x57\x9c\xfb\x78\x04\x52\xcf\xd9\x27\x26\x8e\x46\x5c\x1d\xe4\x65\xa0\xb9\x07\x00\x0e\xa6\xd6\xa4\x7c\x55\x76\x92\xb6\x5e\x8f\x3f\x2f\xda\x4f\x7f\x8b\xac\xab\x4a\x24\x68\x36\xbc\x79\x8f\x85\xb4\xc3\xcd\x44\x25\xf1\x13\xa0\x13\x0d\x40\x1c\x7c\x93\x4b\xb7\x1e\x9f\x1c\xf5\x2b\xcd\x28\x6e\x8a\xb7\xaf\x6d\x8f\x98\xd1\x6d\xfe\x92\x14\xba\x5f\xbc\xe3\x30\x1f\x6b\x65\x8c\x83\x01\x95\x05\x71\x30\xb5\x4a\x51\x9e\xbc\x3e\x74\x3e\xd6\x12\xa8\xbe\x42\x6a\x1b\x58\xd7\xcb\xdf\xdd\x10\xa3\x26\xd1\xd0\x42\xb9\x6e\xb0\x14\x2f\x7d\x08\x4d\xce\x02\x71\x30\xb5\x98\xbf\x72\x8c\x26\x4b\x28\x54\x7b\x56\xef\x7f\x22\x23\xd8\x57\x60\x4c\x16\xbb\x7b\x3c\x9a\x71\xbf\x26\xa6\xbc\x82\xe4\x4a\x68\x35\xa2\x2c\x88\x83\xdd\x04\xa5\xf7\xbc\x4a\x01\x6b\x2e\x6d\xa6\x1d\x7f\x97\x48\xf2\x17\x2d\x9c\x27\x7c\x0a\x3a\x23\x12\x5f\xba\xdf\xe0\xd7\xa6\xa3\x16\x39\x41\xa8\x05\xe2\x10\x6a\x5d\x2c\x7c\x07\xe5\xa2\xc8\x6a\xe9\xa5\xe1\xfc\x59\xd9\x15\x2d\x8f\xdc\x4b\x71\x3a\xf1\x53\xbb\xf5\x7a\xa6\x93\xce\xfe\xd3\xb9\xd8\xf4\xf8\x02\x56\x81\x34\x21\x09\xe2\xe7\x83\x38\x98\x5a\x42\xc7\xad\x69\x74\x31\xa4\xe5\x1c\x18\x83\x79\x8d\x7e\x38\xf1\x1d\x6e\x23\xef\xe5\x38\x93\xab\x99\x2c\x62\x58\x43\x8d\xdd\xa4\x11\x65\x41\x1c\xec\xae\xe2\x25\x2d\xb0\xee\xba\x0f\xaa\x1e\x74\x87\x69\x52\xaf\x45\x91\x0f\x54\xe1\x6e\xdc\x2b\xbb\x11\xf4\x47\x6d\x9d\x44\xa2\xc1\xaf\x08\x51\x16\xc4\xc1\xd4\xd2\xae\x61\xcb\x9e\x34\xf5\x6f\x28\x1c\xb5\x8f\x6c\x0e\xe0\x96\x21\x3f\x78\x69\xcd\xc2\x76\xd5\x29\xb8\x5b\xc6\x3d\xec\x8f\x0f\x34\xc1\x09\xc4\xc1\xd4\x8a\xf4\x2f\xb3\xda\xd0\x1a\xed\xa4\x8c\x77\xa7\x70\x3f\x1c\xa2\x5f\x51\x3f\xf1\x9e\x7d\xf5\x51\x6e\xef\xed\x6d\x49\x25\x91\xc1\x6c\x44\x59\x10\x07\xbb\x09\x17\x5e\xf9\x1e\x47\x7b\xbf\xdf\x2f\x79\xa7\x80\xeb\x5d\x27\x31\xc5\x68\x8b\xdd\x95\x8e\x3e\xa3\x39\xa3\x4b\x24\x9e\x9a\x3f\xa4\xe5\x09\xdd\xef\xff\x37\x7c\x6f\xae\xd6\x2c\xce\x6e\x6a\x78\x55\x34\x96\x72\xe6\x30\xb8\x41\x3b\x54\x42\x5f\x7e\xf9\x7a\x67\x3b\x9d\x8c\x80\xe2\xad\x9e\x9c\x81\xff\xfe\x6f\x97\x9d\x50\x6a\xf3\xf7\x5b\xec\xa8\xb2\x8b\x71\xe9\x77\xf3\x9b\x4c\x44\xf3\x15\x31\xa7\xef\x59\x4f\xfe\xc1\xf0\xba\x4d\x71\x07\x16\xbe\x83\x2a\x23\x87\xef\xdf\x44\x03\x72\xe9\x0e\xde\xf0\x95\x3c\xcc\xd9\xb2\xd5\x35\xa4\x11\x0b\x2e\xb5\x12\x32\xec\x6e\xd9\x3f\x76\x22\x91\xfb\x34\x50\xfc\x1f\xf4\xcb\xc2\xa7\x7a\xcd\x36\xae\x0a\x72\x09\x97\x73\xc6\x84\x72\xb4\x83\xbf\x22\x68\x36\x4f\x66\xbb\xee\xf1\x32\x4c\xea\x55\xff\x34\x86\xc2\x77\x50\x4d\xc4\x99\xef\xf0\xf0\x9d\x5a\xe6\xed\xad\xc6\xbc\x2d\xb2\x97\xf7\x44\x4f\xba\xf1\x1a\x29\xdd\x4e\x19\x73\x07\x22\x70\x36\x51\x2a\x96\x7b\xcc\xcd\x68\x33\xff\xb9\x83\xe3\x87\x14\xbe\x3f\x27\x7f\xbd\x43\x43\xfb\xb2\x4a\xa4\xed\x3c\x33\x3c\x28\xe1\x06\x8a\xa4\x25\xaf\x57\x7b\x83\xe0\x03\x5b\x9d\x96\xeb\x06\x8b\xad\xff\x7e\x49\xa4\xf0\x5d\x23\x4d\x15\x0b\x4b\xe8\x15\x7a\xf2\xda\x92\xc5\x52\x78\xf0\x1e\x6d\x18\x2a\x53\xa0\xb2\xd7\xcf\xf8\xfb\xe6\xcf\x9d\x47\x4d\x1c\xff\xfd\x92\x48\xe1\xbb\x6e\x1c\x01\x97\xac\xe8\xed\x8d\x22\xf9\xfc\x3a\x9a\x99\x93\xa4\x37\x21\xb6\xcf\xb2\x4a\xcb\x4f\xe5\x2a\x8b\x8d\x13\x97\xac\x7c\xff\xfd\x92\x48\xe1\xfb\xac\x45\xf2\x34\xc9\x5a\x5a\x87\x6a\x16\x1d\xbb\x46\x53\x4a\xd5\x2b\xd9\x32\xaf\xd3\xc7\x7c\xac\xe7\x35\xda\xaf\x4f\xbd\xae\xda\xfe\xfb\x25\x91\xc2\x77\x2d\xe6\x3a\x8d\x7a\x6f\x19\xef\x81\x0e\xb1\xed\xcf\x0c\x6e\x3a\x54\x3a\xa7\xa9\xac\xb5\x7a\x68\x55\x0c\x3d\x7a\x94\x62\x6f\x43\xfe\xfd\x92\x48\xe1\xbb\xcb\xd5\x7a\x37\xe2\xc4\xd7\xc2\x2a\x67\x2e\xcc\x5f\xed\x3e\x72\xf4\xbb\x94\xcc\x19\x0b\x31\x28\xa5\xb1\xce\x64\x3c\x8d\xb0\xe3\xff\xf7\x4b\x22\x85\xef\x57\x7f\x47\xd3\x6b\x51\x5d\x4f\x1f\xae\xc2\xa7\x9d\x7c\x23\xcf\x34\xbb\xaa\xc5\xb0\xd9\x5d\x2b\x19\xd6\x4e\xf8\x45\xe9\x32\x23\xc6\xff\xa6\x4b\x0e\x6a\x8a\xc8\x2f\xb7\x21\xd2\xda\x43\x43\xa6\x99\xc2\x83\xc5\xa0\x67\x82\x52\xeb\xdb\x0b\xd3\xf1\xaa\xa8\xaf\xba\x71\xec\xa8\x37\x57\xbb\xd3\x50\xa0\x4e\x2e\x88\x83\xbd\xdc\xac\xb5\x0c\x63\xb9\x3f\x10\xfd\xfc\x91\x21\xb1\x95\xbf\x6a\x1c\x8e\x8a\xae\x76\xfc\x42\xfd\x23\xc9\x58\x57\xdd\x94\xcc\x47\x27\xe8\x03\x18\xc4\xc1\x9e\xeb\x29\x98\x8e\x63\xca\x77\xa7\x0b\xf2\x25\xee\x69\x31\x1b\x73\xf0\x1e\x3e\x5d\x78\xf3\xd7\xb4\xdb\x82\xf3\xa3\xe8\x19\x31\xfb\x6e\x13\xb4\x0c\x03\xc0\xc1\x5e\x6e\x5a\x07\x13\x3e\xba\x43\xac\xe9\x45\xbc\x7d\x1e\x2c\x0f\xc4\xe8\xc8\xa5\x3b\x92\x94\x89\xed\xdf\x3b\x77\xe7\xa8\x64\xed\xeb\x40\xc9\x2b\x88\x83\xdd\xdb\x2f\x1f\x57\xae\x7e\xa7\xa1\xa3\x9c\xe8\x6b\xe3\x1f\xb0\xd8\x28\xb1\xd3\xcd\x18\x0e\x9f\xca\x3a\xb5\x8c\x33\x59\x6d\xc9\xff\x7f\x63\x2b\x20\x0e\xb6\x5b\x8c\x75\x6f\x84\xe9\x8e\x83\x40\x24\x31\x36\xae\x08\xcf\x3a\xb6\x73\x42\xdf\xe3\xfb\x29\xee\x21\x0b\x79\x4f\xc2\x57\x50\x6b\xb7\x33\x10\xe1\x3b\x88\x43\x9c\xf9\x7e\xa1\xf0\x1d\xf4\xc4\x45\x36\x4b\x74\xbc\x96\xab\xf5\x8a\x69\x59\x04\x5e\x3b\xae\xa4\x4f\x41\xde\xb7\xeb\x78\x1f\x0f\x8c\x27\xf0\x3b\xf1\x89\x1c\xea\x31\x42\x9f\x23\x7e\x3d\x88\x83\x99\x25\x9f\x20\xd0\x68\x4a\x6e\xf9\xf5\x68\xe3\xbd\xfb\xfd\x7e\xdd\x67\x21\x84\xa7\x6a\xae\x62\xde\x62\x22\x3b\xe7\xad\x07\xa1\x9a\x31\x88\xb2\x20\x0e\x66\xd6\x34\x81\xec\xbe\x99\x85\xe5\xfd\x3e\x43\xd5\xb2\xfe\xe6\x7d\x55\x4e\xbb\xb9\xf1\x7b\xf6\xaf\x9a\xbe\xbd\x2f\x08\xe3\x40\xe3\x85\x42\x01\x10\x07\xdf\x65\xf7\xfb\xdb\x7c\x15\x6c\xbb\xc3\x10\x76\x92\x52\xae\xbb\x86\x71\xfa\xc4\x8d\xf1\xa3\x22\xe8\x52\x32\x13\x35\x4a\x44\xeb\x2d\x50\x27\x0f\xc4\xc1\xee\xad\x63\xb6\x3d\x0b\xb6\xcc\xcc\x64\x2d\x71\xa2\xd9\x30\xc7\x76\x0a\x46\xc6\xb6\xe3\xa2\x79\xad\xb4\x17\x9b\xf2\x2f\xdc\xd3\x28\xa8\x47\x0e\xe2\x60\x66\x79\xdf\x74\xf1\xe5\x54\xb6\x22\xbc\xce\x81\xa7\xb4\xbf\xe8\x79\xe7\xf1\x84\x48\xee\xbe\xa8\x87\xae\xd1\x1a\xa5\x15\x9e\xc2\x66\x0e\xa2\x47\x0e\xe2\x10\x07\x41\x5d\x2c\x7c\x07\xbd\x59\x91\xd5\xa2\x58\x48\x55\xe5\x72\x8c\x5f\x7b\x38\xf9\x3c\x57\xb9\xe7\x4d\x53\x00\xaf\x35\x0a\xe7\x27\xf2\x6b\xbd\x46\x64\x9c\x58\x7f\x42\xa0\x83\x83\x41\x1c\x4c\xad\x42\x7b\x7c\x81\xb1\x8c\x08\x16\xee\x3f\x8d\xda\x38\x7d\x18\x0f\xdc\x25\x64\x8c\xa5\xc3\x06\x31\xeb\xc9\xa3\xe6\xaf\x64\xf5\x28\x23\xca\x82\x38\x98\x5a\xfb\x57\x92\xfa\x71\x36\x4d\xed\xa2\xf9\x2a\x28\x9d\x50\x2c\x25\x1e\xc9\xaa\x79\x7a\x74\x50\x0f\x06\xfc\x2d\xc7\xf9\x7b\x90\xab\x8a\x28\x0b\xe2\xe0\xcb\x93\x19\xfe\xfc\xed\x3c\x7e\xda\xad\x5e\xcf\x68\xf0\x8a\x93\x89\x67\xd3\xd7\x9c\x84\xba\x8f\xaa\xe7\x87\x07\x6a\xea\x2a\x43\x18\x94\x35\x80\x38\xd8\xbd\xfd\xc8\xd1\x5a\xbb\x49\x2b\x63\x59\xc2\x96\x40\xff\x40\x32\x81\x8d\x3c\xdb\x4d\xde\x73\xf4\x01\xbd\x25\x2e\xd6\xdf\xcc\x9e\x0f\xd0\xee\x69\x20\x0e\xa6\x56\xa6\xc1\x67\x1b\x3e\x36\x2d\x43\x2e\xab\xce\xfb\x11\xdc\x63\xd1\xd2\xc7\x02\x0a\x3f\x77\xd5\x50\x12\x3e\xdd\x7e\xfa\x60\xa7\x8e\x00\xa1\x16\x88\x43\xa8\x75\xb1\xf0\x1d\xd4\x83\xfa\x3f\x76\xd9\xd5\x5f\x4d\x13\x38\x21\xb7\x09\x11\x2f\x5b\xc2\x08\x6c\xee\x9a\x55\x1e\xb9\x8a\xfe\xe7\xae\x73\x5e\x41\x08\x76\xe9\x94\xad\x3f\xf4\xcf\x02\x70\x30\xb5\x62\x92\x66\xb3\x7f\xb5\x94\x73\xda\xb2\x05\x93\xd1\x18\xdd\xc0\xe9\x21\xb9\x2b\xd7\x90\xce\xe2\xfc\x76\x65\x43\xe3\xe3\xa5\xce\x1a\x68\xee\x32\x80\x83\xa9\xe5\x28\xf7\xcd\xe8\x65\xfc\x99\xea\x1b\x7e\xbc\x4b\x1c\x62\xa6\x1f\x5e\x60\x5e\x0f\x5b\x61\x9e\xcc\x32\x6e\xd7\x9e\xe3\xda\x6d\x7f\x02\x3d\x07\x00\x1c\x4c\xad\xb8\xc3\xa1\xe0\xe5\xf1\x40\xb7\x3b\x99\x38\x29\x3d\xc1\xe5\xaf\x76\x0e\x7e\xfc\x2c\x9c\xe3\x7e\xfb\xb1\x70\x3c\x3d\x2b\x7d\x08\x6a\x08\x20\x0e\x7e\x34\xe0\x21\x63\xdf\xf4\x1b\x75\x53\x49\x0e\x49\x9c\x14\x83\xb6\x3f\x94\x5e\xce\xbe\xf5\x33\x3d\xe5\x37\x38\xe6\x6c\xcb\x5c\x56\xa1\xd0\x0d\xc4\xc1\xd4\x32\x5f\x3e\xbc\xad\x87\xe5\x91\x11\x97\xf2\x0e\x33\xba\xa8\xd7\x53\x73\xc1\xe1\x26\xb1\xa6\xe1\x86\x38\x7e\x8c\xba\xdb\xaf\x3d\x68\x79\x32\x88\x43\xa8\x75\xb1\xf0\x1d\xd4\x53\x46\x56\x4b\xee\x63\xf1\x3a\x57\x90\xfb\x51\x1e\x5d\x5e\xfb\x5a\xd0\x73\x3c\xef\x80\x0c\xfc\x87\xcf\x9e\xc7\xac\x26\x2d\x78\xaf\xea\x92\x41\x8b\x79\x40\x1c\x7c\x12\xff\x89\x80\x81\x63\xc2\x6e\xf4\x5b\x37\x5c\xf2\x54\x34\x9b\xec\x16\x6e\x92\x5f\xa9\x21\xe4\x4b\x56\x7e\x1f\x2e\xe3\xb5\xad\x40\x2f\x44\x10\x07\x53\xcb\xe6\x6f\x8d\xa5\x7f\xf4\xfd\xab\x25\x25\x94\x42\x69\x99\x27\xb5\xd9\x8a\x99\x6d\x13\xc6\x39\x09\x12\x75\x4e\x2e\x45\x82\x42\xf6\x88\xb2\x20\x0e\x3e\xcf\x11\x85\xf1\x25\xe5\x08\xdf\x23\x14\xa2\xdc\xfe\x1b\x2f\x1f\xc7\xe7\xd4\xf7\x9d\xc6\x7b\xbb\xd4\xf2\x57\xce\xa4\x45\xd0\xa4\x31\x40\xf3\x1c\x01\x1c\xec\xde\x8e\x38\x66\x04\x3f\x95\xd9\x55\xbd\xec\xc1\x66\x1f\xc7\x1b\xe7\x85\x5e\x76\xfe\xd5\x12\x85\xd8\x16\xcd\xf7\x27\xd3\x75\xd3\x3d\x68\x4a\x1e\x88\x83\xa9\x85\x67\xd0\x83\xf6\x83\x28\x5d\x40\x51\x79\x5b\xde\x77\x49\x39\x3c\xa5\xd4\x78\xca\xf7\xd9\xad\xdf\x3a\xf2\x39\x11\xa2\x2f\x78\xda\x10\x6a\x81\x38\x84\x5a\x17\x0b\xdf\x41\x5f\x44\xc8\x6a\xfd\x5d\xad\xc2\x95\x40\xad\x0a\xad\xfd\x7a\x68\xde\x81\x66\xa8\x8a\x67\x42\xa4\xbd\xf4\x45\xf7\x50\x2d\x70\xdb\x74\x25\xac\xc3\x0d\xf1\xf3\x41\x1c\x4c\x2d\xd7\x7d\xaf\x19\x8d\x23\xce\x9e\xac\x62\x8e\xa7\x86\xb1\x2f\x9e\x28\x3f\xea\xd4\xa6\x1a\xd3\xf0\x75\x7c\xdc\xad\xe7\x92\xaf\x00\x8d\x27\x82\x38\x98\x5a\x1f\xbd\xf7\xcd\x82\xa3\x92\x6e\xf7\x8d\x78\x54\x9f\xa7\x31\xfa\x85\x56\xd5\x10\x14\x9d\xb2\xc8\x74\xe0\x4d\x58\x8d\xa2\xe7\x7f\x82\x5e\x31\x00\x0e\xa6\xd6\x63\xd2\x6e\x75\x9f\x11\xca\x80\x06\x8a\x09\x7d\xc9\x84\xda\x38\xc6\xed\xe7\x0b\xcf\xe5\x52\xae\x2a\x62\x34\x2b\x1a\xd6\xe5\x34\x22\xca\x82\x38\xd8\xbd\xf5\x75\xdd\x79\x52\xba\xa5\xf7\x8a\x79\x60\x7e\xf9\xb4\x70\x62\xe8\x4e\xdd\x6a\x5e\xa6\x8c\xbd\xed\xcc\xc0\xa0\xe8\x9b\x93\xf7\xd0\xca\x77\x10\x07\x53\x2b\x3e\x82\x53\x25\xee\xf5\xc1\xdf\x93\x83\x73\x8e\x4a\xb3\x1c\x9b\x8c\x2d\xcc\x38\x82\xce\x49\xec\x27\x8c\x64\x8c\xa5\x2f\x9a\x2f\x21\xd4\x02\x71\x08\xb5\x2e\x16\xbe\x83\xbe\x7c\x91\xd5\xa2\x4d\x70\x75\x73\x9d\xd9\xdb\xbe\x1d\xa0\x26\xf1\x3d\xd8\xc9\x5f\x65\x45\xe2\xed\x15\x45\x6d\x8f\x85\x69\x06\xfb\x1b\xae\x68\xd0\x1a\x21\x10\x07\x53\x2b\xb7\xb5\xba\x17\x15\x63\x62\xee\xc7\xe5\xdf\xd6\xfe\x5b\x8b\x3c\x44\x41\xd6\xe4\xd6\xe2\x56\xbb\x8a\xed\x63\xca\xd6\xb5\x37\x08\x11\x65\x41\x1c\x4c\xad\x3d\x47\x53\x8f\x5a\x36\xc1\xb8\x97\xb7\x73\x47\x6e\xca\xc8\xb0\x95\x7b\xb9\x44\x4b\xff\x92\x29\x7d\x5f\x3f\x3e\x68\x1f\x16\x08\xcd\x48\x04\x71\x30\xb5\x76\x0f\x64\xc3\xea\x71\x66\x16\xaf\x66\x0c\x52\x3a\xdb\x3a\x9b\x60\xb4\xa5\x31\x61\xc8\xde\x0d\xbb\x8b\x99\xa0\x21\x30\x48\x92\x8e\x28\x0b\xe2\x60\xf7\x16\x07\x5d\x60\xdb\x1c\x93\xd4\xd2\x5d\xfd\xc8\xfb\x5a\x18\x03\x01\x3e\xaf\x49\x0f\x4f\x19\xd7\xa3\x67\xbe\x9c\x41\x4b\x3d\x2f\xcf\x11\x65\x41\x1c\x4c\xad\xbb\x0e\xbb\x0e\x68\xb7\x0b\x5c\x09\x0f\x42\x0e\x08\x39\x66\x36\xd3\x9e\xfa\xa5\xdc\x51\x89\x75\x16\xa2\x61\x98\xec\xb4\xf7\x95\x43\xa8\x05\xe2\x10\x6a\x5d\x2c\x7c\x07\x8d\x70\x20\xab\xf5\x27\xad\x21\x4a\x42\x23\xf2\x05\x35\x69\xac\x97\x9e\x9c\xaf\xc2\x2d\xcc\x6b\xf6\x76\x92\x8b\xde\x03\x9f\x7e\xf2\x2c\x72\xac\x41\x87\x67\x81\x38\x98\x5a\xcd\xd9\x23\x9e\x19\xb8\x9d\xa6\xa1\xaa\x0f\xf4\x9b\xeb\x42\x0f\x65\xb7\xdd\x22\xcc\x4b\xbe\xe0\xa3\x3a\xa8\x54\xe0\xb1\xfb\x42\x47\xc9\x83\x38\x98\x5a\x04\x4e\x62\x76\x81\x77\x63\x75\x52\xa5\x88\xea\xdb\x69\x07\x6a\x6f\x8e\xa4\xb4\x4f\xad\xcb\xb5\xa5\x26\x25\x3f\x5e\xec\x37\x83\x76\xaa\x05\x71\x30\xb5\x84\x7e\x7c\x99\x39\xa5\x97\x65\x98\xc9\xe6\xf2\xe0\xdb\x4f\x1a\x50\xbb\x51\x9e\x57\x9b\xfc\xd8\xdc\x75\x5d\x15\xf5\x58\x9a\xe2\x2f\x14\x03\x00\x38\xf8\x41\x24\x06\x24\xcd\xac\x03\x77\xe3\xdb\xd7\xfc\xe4\x3b\x49\x4c\xcc\xaf\xf9\xad\x7a\x12\xd9\x1c\xd4\x98\xd3\x0a\xfd\x90\x3b\x76\xa2\x84\x76\x96\x00\x70\x30\xb5\x7c\xc4\xc5\xb5\xe4\x66\x18\x2c\x74\x0b\xb9\xae\xef\x3f\xcb\x37\x3f\x6f\x19\x0f\x50\xfd\x85\xea\x28\x2c\xc1\x5e\x63\x1c\x42\x7a\x13\xa1\x16\x88\x43\xa8\x75\xc1\xf0\x1d\x34\x86\x8d\x38\xf3\x1d\x29\x7c\xff\x7e\x7d\xa4\x9b\x98\xe1\x99\x5b\x6b\xf0\x5b\x9b\xd5\x08\xca\x71\xd7\x80\x0d\xe7\xdb\xae\x91\x0e\x93\x9e\x37\x7f\x24\xff\x2a\xf1\xf9\xf7\x91\x3e\xa4\xf0\xbd\xcf\xe2\xf6\xb5\xd2\x19\x39\xf3\x47\x9d\x98\xf6\xab\x2c\xea\x8d\x54\x92\x5d\xb2\xae\x5e\x4c\x64\x7f\x5b\x03\xce\xa2\x7f\xfa\x18\xfd\x6f\x46\xfa\x40\x3f\x0c\xb9\xb5\xf5\xfb\x3f\x59\x08\x4e\xfa\xf6\xa7\x99\x90\x43\x09\xd3\x75\xc8\x4c\x9b\xf2\x59\xfd\x59\x7f\xc9\x2a\x79\x92\x51\x3a\xc3\xac\x10\x34\x51\x17\xc4\xc1\x5a\x1b\x3e\x76\xed\xc6\x2d\x3c\x8e\x37\x9f\x96\xe9\xed\xd3\x44\xea\x3a\x31\xb7\xc5\xce\xd0\xad\x9f\xa0\x6b\x17\xbe\x96\x7f\xcd\x55\xba\x07\x05\xaf\x00\x0e\xd6\xda\x36\x79\xcf\x36\x68\x06\x02\x7c\xa2\x0f\xe2\x70\x7d\x28\x2a\xef\x3d\x96\x93\x7f\x92\x96\xcc\x11\x1e\x56\xb9\x98\x7c\xe4\x5c\x0e\x1d\x9b\x00\xe2\x60\xad\x8d\xe4\x6b\x78\xe7\x64\x51\xc1\x18\x4a\x67\xcc\x29\x9e\xf6\xcb\xe7\x82\x41\x24\x9e\x45\xf3\xbd\xeb\x73\xcd\xa7\x81\x5b\xba\x95\xd0\xdb\x0c\xc4\xc1\xee\xed\x66\x67\x6b\xc5\x65\x5c\x32\x5f\xdd\xe2\x74\x8e\x20\xb6\x81\x78\x9a\x67\x3a\x9c\xc4\x49\x8d\x5f\xb5\x9a\x27\xed\x9f\xba\xb7\x05\x40\x7f\x2d\x80\x83\xb5\xb6\xe7\x7e\x62\x76\xd1\xe8\xfb\x54\x71\xc6\x1a\x7e\x63\x6d\x45\x02\x4c\xf1\x93\x7e\xd7\xae\x8e\x51\xa8\x35\xd1\xbe\x63\x9a\x1d\x7f\x84\x68\x6d\x20\x0e\xd1\xda\x2e\x16\xbe\x83\x04\x46\x56\xeb\xd5\x16\xe1\x46\xbe\xc2\x9d\xe6\x3e\x17\xfa\x9d\x22\x43\x49\x3c\xe7\xd8\xb9\x31\x4c\x75\x35\x87\xb3\x47\x4b\xd7\x77\x4c\xc8\xa0\x9e\x17\x88\x83\xa9\x95\x24\xde\x8b\x6d\x65\x88\x4a\x23\xc1\x96\x9f\x1f\x90\xd0\xa5\xbc\x3b\x42\xc2\x39\x9e\x56\xc5\xcc\x82\x86\x75\x14\xd8\x58\x0a\x1d\x4f\x04\xe2\x60\x6a\xf9\x9d\xa9\xec\xcd\xc7\xb0\xb3\x2b\x3d\x5a\xe1\x1a\xff\x25\x78\x99\x31\x95\x95\xba\x78\x9f\x9f\xd9\x41\xd2\xfd\x5d\xc4\xa3\x1e\x68\x61\x18\x88\x83\xa9\x25\x17\x65\x58\xed\x45\x5d\xc6\x99\x24\xd8\x8f\x7e\xf5\xdd\x48\x94\x3e\x87\x6d\x5a\x33\xc3\x6f\x49\x5c\xfb\x88\x83\xbe\xc9\x83\xf7\xd0\xe7\x1d\x80\x83\xdd\xdb\x92\xe7\x36\xa1\x79\x99\x7a\x51\x76\x9a\x0a\x23\x2f\xa7\x9e\xbe\x7e\x3e\x7f\x23\x71\x45\x23\x5e\xd8\x3c\xa2\xda\xf7\xc8\xf0\xff\x1d\xb1\x08\xe2\x60\x6a\x29\xc6\xbf\x25\x23\x37\x33\x13\x0d\xe0\x93\xc6\x45\x11\x76\x5b\x4d\xb9\x5f\x8f\xf9\xf3\xa7\xe6\xf6\xdf\x48\x43\xb3\x77\xf5\x77\x71\x11\x6a\x81\x38\x84\x5a\x17\x0b\xdf\x41\xb9\x28\xb2\x5a\xa6\xf6\x19\x5b\x56\x33\x2c\xa2\x12\xdd\x02\xc5\xaf\x96\x53\xe7\x98\xa7\x0f\x1e\xd8\xaa\xac\x57\x9f\xde\xc6\xbb\x9b\x74\x27\x1d\x9a\x32\x04\xe2\xe0\x27\x1a\x4c\xbb\xd5\x09\x57\xa4\x91\xb0\xb2\xbe\xc9\x7d\xb5\xf8\x11\x8b\x45\x23\x6d\x99\xfd\xcd\xda\xdf\x18\xf9\x4e\xe3\xa9\x4a\x4c\x51\x68\x36\x25\x80\x83\xa9\xb5\xd3\x98\x10\x9e\x99\x88\x7d\xe9\xef\xc6\xb9\x21\x7e\x30\x86\x62\xb1\xd2\x57\xe6\xfc\x2c\x0b\xbd\xd4\x94\x08\x26\x76\x0c\x8d\x40\x44\x59\x10\x07\x53\x2b\xa0\x93\x10\x8f\xd3\x51\x2b\xf1\xe3\x16\x96\x91\xd5\xc0\xdb\x2a\x3e\xd3\x66\x9b\xa7\x5e\x92\xcd\x5c\x52\x57\xf5\x99\x53\x03\xa0\x83\x12\x40\x1c\xbc\xfb\x29\xbc\x57\x70\x6d\xe3\xcb\x8e\x48\x46\xf0\x09\xed\xaf\x20\xdc\x59\xa9\xc1\x6b\xce\x05\x8c\x9b\xda\xd2\x1e\x6a\x4c\xbc\x32\x50\xa6\x0f\xe2\x60\x6a\x5d\x78\xe5\xbb\x81\x2d\x47\xab\xd7\x25\xb4\x90\x67\x5f\xf7\xe4\x7f\x9b\x25\x5c\x4d\xb0\x54\xf4\xa8\xd8\x58\xb2\x4d\x93\x76\xff\x31\x2e\xa0\xcb\xf0\xdf\xf0\x9d\xb5\x69\x9d\x29\x9b\xf8\xe5\x4a\xaa\x12\x45\x6d\x95\xca\xfe\x03\x43\x5f\x8d\xb2\x70\x34\xca\x45\x0e\xb3\x11\xbc\x4b\x5b\x43\x5f\xfe\x83\xde\xbe\x92\x3f\xf8\xb8\x03\xf7\x53\xab\x58\xf2\xdb\xe3\xd7\x2b\xc3\x65\x0f\x23\x88\x97\x1a\xbd\x0d\xbe\xdd\x32\xb9\xfc\xb4\x28\x83\x03\x16\xbe\x83\x2a\x23\x87\xef\x4f\xdc\x22\xfc\x62\x2f\xe7\x94\x7b\x26\xc4\x26\xee\x47\x7f\xdf\x2a\x32\xc9\x1c\xdc\x6d\x93\x36\xe3\x77\x8c\x49\x49\xb3\x14\x62\xf9\x0f\xba\x78\x39\x8d\x0a\xf5\x6c\x73\xca\x7e\x44\x56\xee\x79\x8b\xf4\xb1\x45\x7f\x66\x1d\x27\x2b\xfa\x28\xbe\xf7\x6c\x23\x93\x6f\x70\x37\x14\xbe\x83\x6a\x22\xce\x7c\x87\x87\xef\x78\x02\x63\x8d\xc2\xd7\x9f\x3f\x7f\x5d\x57\xc9\x82\xea\xd7\x99\x61\xd7\xc3\xbc\xd4\xf3\x7a\xfc\xed\xcf\xe7\xb7\x17\x86\xee\x5f\xfd\xf7\xad\x7d\x5a\x91\xc2\xf7\xf7\x11\x9b\x77\xaf\xb5\x97\x5d\x1b\x51\xfe\x46\xb8\xdb\x45\xa8\x1c\xc2\x40\x26\xeb\xcb\x8c\xc9\x99\x74\x9e\xa5\xbc\xf7\x25\xf4\xd9\xbf\x5f\x12\x29\x7c\x2f\xdb\x91\xcb\x34\x65\xfe\x89\x93\xa2\x69\x74\xd5\xaf\xe5\x07\x4b\x6b\x23\xde\x3d\xca\x21\xfd\xa1\x3a\xd3\xfb\xd9\xad\x2a\xfa\xff\x9e\x84\xb7\x22\x85\xef\x31\xd7\x99\x70\x73\xb9\x2c\x93\x5a\x84\xa7\x15\x0a\xf5\xbf\x5e\xfb\x6c\xb8\x25\x41\xad\x84\xad\x57\x97\x9f\xf2\xf2\x48\xba\x22\xf1\xdf\x2f\x89\x14\xbe\x4f\x5c\x3d\x62\x4c\x97\xcc\xab\x6c\xd6\x4b\x0f\x1f\x75\xcf\x31\x7e\xdb\x7c\xff\xd7\x9e\xff\x5e\xce\x98\x87\xa6\xf6\x75\xbc\xe8\xff\xc1\xff\x12\x29\x7c\xb7\x7e\x18\x3d\x18\x27\xe9\xbe\x3f\x80\x7b\x83\xae\x4b\xf4\x9d\x0a\xf1\xd1\xdc\xc0\x81\x26\x77\x75\xd9\x47\xbb\xdc\x28\x2f\x8f\x27\xff\x7e\x49\xa4\xf0\x7d\x54\x8a\x88\x73\x37\x0c\x9f\x8f\xa5\x51\x26\xad\x23\xee\xb8\x32\x47\xf1\xeb\xaf\x33\x81\x68\xf4\x9a\x3c\x93\x13\xfe\x53\xbd\xfb\xff\x7e\x49\xa4\xf0\x9d\x5a\xba\x39\x96\xac\xdc\x35\x7d\x28\xf4\x8f\x70\x83\x9b\xb2\xe9\x8a\x93\x4b\x2f\x75\xfd\x3c\x2b\x5d\xcb\x07\x92\x9d\x72\x94\xfa\xff\x4d\x97\x1c\xd4\x14\x91\x5f\x6e\x75\x43\x8d\x57\xa5\xff\xd4\x1d\x46\x25\x52\x37\xbf\x74\xf8\x59\xdc\x36\xdd\x64\x4a\xe6\xf7\x1e\x55\x3a\x38\x41\x64\xc7\x7e\x38\x04\x4a\x07\x01\x1c\xec\xe5\x76\xe7\x51\x4c\xe1\xf2\x80\x1d\xeb\xa1\x86\x90\x3e\x09\x65\x23\x86\x1b\xdb\x91\xb9\x51\xed\x72\x9d\x63\xd6\x4b\xc3\xd6\x1a\xc1\x30\x44\x59\x10\x07\x5f\x44\x4a\xca\xc8\xb5\x77\x63\x32\x45\xe0\x04\xcb\x55\xb2\xa6\xeb\x55\x45\x6a\xbd\x62\x90\x6c\x9c\x8c\x8e\xf8\xc7\xd6\x88\x7c\x97\x61\x68\x11\x29\x80\x0b\x94\x43\xfb\x6f\xd9\xb7\x43\x76\x29\xbe\x41\x2a\xc5\x23\x7d\x9d\xef\x48\x70\x3a\xeb\x62\xd4\x08\xb4\x7d\xd8\x1f\x70\x68\xa2\xc9\xad\x9e\x9e\x8a\x40\xfd\x26\x10\x07\x2b\x2b\x8a\x25\x55\x2a\xbb\x7c\xf7\xbb\xe4\xc0\xe5\x26\x63\xcf\x0f\xa9\xb7\x2d\x6e\xe6\x69\x33\x0d\x77\x7d\xd2\x6e\x9c\x16\xf4\x24\x84\x3a\x0e\x20\x0e\xf6\x72\xdb\xd1\x08\x7b\x35\xc6\xbb\x9c\x51\xbb\xfc\x19\xf3\x0a\x6e\x32\x1b\x57\xe4\x15\x2b\x54\x99\x6f\xe5\x34\x4a\x04\xb3\xa8\xd1\x96\x3f\x10\xe1\x3b\x88\x43\x9c\xf9\x7e\xa1\xf0\x1d\xf4\xc4\x45\x36\xcb\x93\x43\xe3\x24\x8b\x5e\xec\x16\x6e\xfd\xf5\x6e\x73\xa5\x6a\x77\x73\x49\xb2\x02\x03\xd2\x67\x51\x3c\x39\xe1\x0f\x42\xe7\x1b\xef\x23\x7e\x3d\x88\x83\x99\xf5\x83\x72\xd3\xb6\x4c\xf0\xe3\xbb\xb5\xc4\xe6\x31\x8d\x68\xff\x6f\x31\x47\x9f\x86\x50\x6c\x35\x19\x1d\xd7\x5f\xf1\xd1\x5c\x2f\x08\x47\x94\x05\x71\x30\xb3\x9a\xc9\x34\x4d\x18\xc3\xbc\xb3\xb6\xb0\x9e\xc9\x38\xec\xf1\xc7\x5d\x5a\xd5\xe9\x23\xf8\x6e\x2e\xa3\x22\x24\xf6\x2d\xdb\xb9\xe1\x25\x34\x62\x03\xe0\x60\x0a\x78\x2c\x5e\x67\xeb\xbc\x82\xfa\xde\x55\xeb\x93\x58\xba\x0c\x9f\x40\x31\xee\x97\x13\x33\xc5\xdb\x78\xef\x3d\x57\x99\x6f\xeb\xf7\x41\x33\xad\x41\x1c\xac\xec\xd8\x73\xd9\xdf\x4b\x73\xbc\xce\xc3\x9f\x57\xca\xd6\xd5\xba\x72\x1f\xa3\x12\x49\x1b\x12\x72\xe7\x3f\x0c\xd4\x90\xd6\x29\xe8\x22\x45\x94\x05\x71\x30\xb3\xf6\x63\x3f\x3e\xf4\x32\xfd\xeb\xa2\xdc\xb3\xa0\x58\xc0\xd2\x2f\x4c\xa0\xf0\x5b\x9d\x71\x0b\xeb\xd6\x2b\xd5\x82\x6b\x83\x44\x8b\xd0\x6a\x2c\x10\x87\x38\x08\xea\x62\xe1\x3b\xe8\xcd\x8a\xac\x56\xee\xbd\x84\xdd\x7c\x47\xab\x1a\xe9\x37\xfa\x74\x05\x47\x0d\xfb\x6b\x26\xeb\xf8\xca\x96\x91\x4f\xc7\xc6\xf0\x1f\x2a\xe4\x47\x41\x73\x70\x40\x1c\x4c\xad\xfe\x87\x3b\xcc\x4a\x31\x14\x81\xf7\x51\x3b\x33\xa7\xdf\xd4\xe7\x96\xe9\xb1\x49\x61\x55\x14\xf6\xf9\xd3\xb5\xb9\x87\x68\xaf\x41\xc7\x9d\x83\x38\x98\x5a\xe6\xe1\xc3\xa2\xb6\x8a\xa9\x5d\x59\x16\x83\xbc\x7a\x6f\xe7\xac\x70\xd9\xe9\x16\x8f\xa4\xaf\x74\xd6\xfd\xfe\xfc\x48\xab\xd1\x0a\xda\x0a\x15\xc4\xc1\x1c\xf0\xf6\xb2\x23\xb2\xa4\xf6\x50\x33\x5a\x8c\x13\xfb\x2e\xc2\x31\xa6\xf1\x9e\xec\x4b\x14\x53\x41\xbd\x43\xf6\x9b\x07\x21\x58\x3f\xa0\xa7\x0b\x88\x83\x95\xe5\x1b\xe8\x6d\x7f\x85\x77\xc3\xee\x16\xc9\x1d\x4e\xaa\x10\x94\x75\x9e\x3b\xc3\x3e\x01\x49\xd3\xbc\x7b\x45\xe5\xd4\x33\x09\xf4\xd0\x16\x57\x20\x0e\xa6\xd6\xd1\x50\xcb\x56\xe6\x66\xef\x61\x15\xd7\x4f\xba\x6e\x46\xb9\x20\xa9\xa7\x03\x36\x8e\xea\xfd\x37\xc5\xf0\x1b\x8b\xfc\x52\x32\x14\x11\x6a\x81\x38\x84\x5a\x17\x0b\xdf\x41\x3d\x28\x64\xb5\x30\xf2\xd3\xd0\xef\xdd\xfc\x24\x89\x97\x16\x86\x73\x29\x88\xe2\xcf\x09\x77\xf5\xec\xdd\x42\x75\x33\x2f\xf2\x01\xd7\x90\xe9\x48\xe8\xa9\x05\xe2\x60\x6a\x11\x7d\xbe\x56\x50\x1a\xc3\x4b\xc4\xcb\x8d\x95\x62\xc2\xde\x55\xd2\xe3\x55\x71\x0d\x5f\x9e\xe8\x57\xd9\xa1\xcc\xd6\x84\x69\x0d\xa4\x16\x88\x83\xef\xd7\x81\xfd\xab\xe2\x46\x69\x7b\x14\xfb\x09\x05\x2b\xc3\x0e\x01\x66\xe2\xa0\xf2\x13\x9e\xe5\x5a\x51\xa2\xa9\x8f\x07\xeb\x1d\xb6\x38\xd0\xa7\x29\x80\x83\x39\x10\xe5\x90\xf9\xa3\xff\x5a\xe7\x9f\x25\xf7\x6b\x63\x81\x89\x57\xf7\x54\xcb\x65\x7c\x42\x38\x3f\x09\xd9\x17\x08\x3a\xbc\x88\x28\x35\x45\x94\x05\x71\xb0\xb2\xc7\x4d\x36\xfe\x04\x3c\x04\x2f\x9b\x17\xee\x69\x69\xb4\x8d\xf4\x68\x6a\x0f\x8b\x5a\x76\xb1\x87\x67\x56\xba\x74\x26\x3d\xab\xeb\x43\x94\x05\x71\x30\xb5\x30\x9e\xf9\x1d\x3a\xd9\x91\x3c\xe7\xa5\xfc\xe1\xcc\x4c\x1c\xdc\x52\xe2\x35\xf3\x98\x72\x56\xaf\xd7\xb7\x42\x25\xef\x6c\x67\xc7\x17\xa1\x16\x88\x43\xa8\x75\xb1\xf0\x1d\xd4\x53\xfe\x3f\x86\xa8\x3c\xac\x7a\x7f\x56\x37\x9e\x99\xdd\xb5\x66\xaa\xeb\x46\xb3\xf3\x2e\x6e\x96\x89\x44\xb1\x34\xff\xaa\x74\x58\xf0\x4c\xca\x18\xda\x45\x11\xc4\xc1\xd4\xca\xe7\xd7\xde\x7c\x15\xc2\x3e\x25\xd9\xea\x9f\x98\x3c\x9c\xb5\x92\x12\x32\x8a\xf7\xa1\xa5\x20\x9d\x73\x6d\x34\x7c\xb5\xd6\xe2\x11\xb4\x55\x05\x80\x83\xa9\xf5\xce\x41\x4c\xa5\xb7\x70\x84\x66\x1f\x33\xf9\x4f\xf0\xee\x5f\x11\xf1\xae\x99\x2e\x3d\x43\x4d\xca\x94\x3a\xe3\x3c\xff\x2a\x16\xe8\x88\x5b\x10\x07\x73\x80\xf4\xf4\xd9\x81\xca\xe0\xa3\x7a\xbc\x4e\xf5\xed\x39\x55\x3a\x09\x7f\xfe\xe7\x26\x54\xca\x93\xba\x5a\xaf\x4f\x99\xb7\x2e\xf1\xb6\x22\xca\x82\x38\x58\x59\xfd\xaa\x62\x9d\xfa\xae\xc1\x88\xbc\xd8\xb0\x8e\x13\xb7\xcf\xa3\x7b\xec\xef\x59\xcc\xbd\x3d\xbe\xe0\x27\xdf\xdc\xda\xff\x2e\x08\x4d\x70\x02\x71\x30\xb5\x76\xcd\x0e\x1e\x57\x08\xdc\x3d\xa2\xd1\x29\xc2\xc5\x90\x27\x0b\xe7\x7a\x13\x95\x66\x5a\x3b\xc8\x63\xcf\xa4\x3e\x9d\xd0\x6e\x1b\x86\x50\x0b\xc4\x21\xd4\xba\x58\xf8\x0e\xfa\x22\x42\x56\xab\x2c\xb1\xf6\x19\x8b\x93\xf1\x76\xdd\x64\x76\xb4\x1c\x3f\xf5\x40\x00\x41\x85\x83\x65\x90\xcf\xd5\x7a\xda\x42\x89\xf5\x4d\xbc\xa7\xd0\xc2\x7f\x00\x87\xb4\xcb\x50\xcc\x35\x5b\x45\xa2\x1b\xe4\xb9\xb3\x61\x33\xdf\x3a\x29\xcf\x45\x1d\xc8\xb6\x1a\x13\x27\x55\xff\x2c\x92\xeb\xd5\x32\x8f\x21\xca\x82\x38\x98\x5a\xdf\x39\x23\xc9\x77\xed\x0e\x19\x32\xed\x5d\x55\xdb\x84\x09\xe4\x36\x17\x56\xcd\xde\xb7\x57\xf7\xca\xe3\x47\xbd\x12\x97\x4b\x52\x40\x94\x05\x71\x30\x07\xe4\x87\x9c\x7a\x03\x2e\x61\x92\x94\x04\x61\xf4\xea\x4e\x67\xd5\xee\xe4\xe0\xb2\xb3\x28\x12\x37\xe2\x8f\x6d\x2d\x84\xd7\x7d\x86\xce\x7c\x07\x71\xb0\xb2\x45\x07\x9d\x33\x23\x4d\x94\x86\xfa\x41\x65\x4a\x5d\xc9\x58\x83\x4b\x11\x3d\x2a\xb9\xd1\x33\x14\xc9\xb1\x9d\x18\xe8\x07\xa7\x02\x88\xb2\x20\x0e\xa6\x96\x48\xf9\x1c\xcd\xb5\xb1\xae\x4f\xce\xcf\xcd\xea\x2d\x28\xea\x0c\x88\x9b\x67\xf7\xc8\xca\x1d\x4b\x4f\x5f\xf2\xc8\x26\x0e\xcb\xfb\x21\xd4\x02\x71\x08\xb5\x2e\x16\xbe\x83\xbe\x7c\x91\xd5\x5a\x94\x27\xa3\x60\xa4\x16\x7b\x4e\xaf\x75\xb7\x89\xe8\xa6\x55\xa3\xc6\xc3\x35\x1e\xd3\x2e\xc6\xc3\x5b\xd7\xfe\xa2\x05\x9d\xf0\x50\x20\x7e\x3e\x88\x83\xa9\xc5\x6b\xc2\xef\x42\xbd\x74\x49\xe3\x2c\xe6\x53\x9c\x5d\xf7\x82\x93\xa6\x1b\x4f\x09\xe1\x77\x57\xcd\x32\x12\x82\x7d\x2e\x9f\x37\xd0\x08\x38\x88\x83\xa9\x25\x74\xa3\xf0\xf2\x34\xe1\x9b\xea\x64\xb3\x7b\x57\xa2\x22\x64\xa5\x75\x79\xf6\x75\xb4\x62\xdc\x15\x7c\xfa\x98\x6a\xbb\x33\xb4\x2b\xa1\x28\x13\xc0\xc1\x1c\x48\x2b\x7a\xf5\xab\x2b\x85\x70\x7e\xa3\x4f\x57\xee\xf1\x9b\x7e\xa7\x10\x65\x56\x29\xf4\xe3\xcd\xab\xb5\x1f\xc8\x57\x9c\xc5\x0e\xa1\x73\xc9\x40\x1c\xac\x6c\xd6\xa1\x24\x7e\x90\x77\xcc\x73\x9a\xb8\x25\xec\xc2\xbb\x7a\xa3\xad\x2f\x50\xb4\xab\x83\x7f\xd3\xb5\x2e\x9d\xe9\x8c\x9e\xbb\x40\xfb\x7e\x82\x38\x98\x5a\x5f\xfb\x77\x49\x98\x44\xe4\xe5\x98\x04\x98\xfc\xd4\x3d\x98\x87\x67\xaf\x64\x66\x74\xd0\x4b\x06\x3d\x60\x13\xda\x7b\xab\x20\xf9\x10\xa1\x16\x88\x43\xa8\x75\xb1\xf0\x1d\x34\xc2\x81\xac\xd6\xd6\x8d\x3f\x13\xda\x4e\x1c\xd7\x48\x71\x6d\xa2\xb5\x34\xd1\x70\x1f\x7a\xe9\x72\xf1\x9e\x71\xb6\x3f\x13\xa9\xa5\xe2\x1c\xeb\xec\x41\xfc\x7c\x10\x07\x53\x8b\x58\xca\x6b\xf5\xb5\xe4\x75\xda\xfd\xba\xa5\xf2\xb5\x31\x82\xee\x1a\x2a\xfe\x37\x74\x99\xe2\x5b\x3b\xc4\xbc\xef\xf2\x5a\x9f\xfc\x41\x94\x05\x71\x30\xb5\xe4\x16\x3f\xd9\xdd\x16\x42\xe9\xf2\x2e\x2e\xb7\xba\x75\xfa\x67\xf6\x47\x03\xde\x47\xcf\x7e\x0d\x13\x7b\xb1\x74\x6d\xb2\xb5\x2d\x68\x9d\x18\x88\x83\x39\xa0\x1c\xca\xa3\xf7\x09\x45\xfd\x9d\xaa\x12\xe7\x8c\xdc\x0e\xb9\x5d\x6f\xa7\x17\x5b\x86\x65\xab\x34\x1f\xb5\x1a\x96\x53\x77\x18\x34\x03\x01\xc4\xc1\xca\x0e\xdf\x16\xbf\x26\xb2\xfe\xe2\x65\xfa\x96\x90\x04\x3e\x76\x84\xc5\x55\x57\xa7\xb9\x42\x93\x67\x7f\x75\x5c\x65\xa9\x27\x0c\xa7\xa0\x09\x4e\x20\x0e\xa6\x16\xd3\xcc\xfe\x39\x09\xd1\x69\xe8\x53\x8d\x9e\xe8\x71\x71\x32\xf1\xbf\xc6\xe3\xcf\xdb\xe9\x06\x3b\xd1\xd3\xf9\x78\x64\xd9\x30\x79\x11\x6a\x81\x38\x84\x5a\x17\x0c\xdf\x41\x63\xd8\x88\x33\xdf\x91\xc2\x77\xc3\x9d\xaa\x56\x9f\xfd\xa8\xce\x87\x6c\x54\x79\x59\x98\x8d\x3a\xe6\x46\x68\x52\xd3\x12\x18\x23\x72\xa8\xb4\x47\x37\x6e\x9f\x1f\xfd\xfb\x48\x1f\x52\xf8\x4e\x1b\x1c\x42\xea\x44\xa7\x76\x35\x20\xf4\x59\xfa\x55\x86\x47\xdf\x02\xa8\x97\x42\x26\xe9\x4c\x30\x54\x0f\x18\x78\x2f\xbb\xb6\x4f\xfd\x6f\x46\xfa\x40\x3f\x0c\xb9\xb5\x55\x79\x63\x89\x91\x3e\x91\x7e\x8f\xb2\x4d\x45\x65\x18\x71\x29\xfc\xd1\xc7\xc9\x85\x5b\xf7\xdc\x13\xa8\xf8\xb5\x03\x87\x2e\xaf\x40\x43\x11\x20\x0e\xd6\xda\x18\xf9\xd9\x50\xe6\xcd\x25\x4c\x4b\x29\xd3\x08\xd6\x5e\x32\x52\x8c\xc8\xee\xdf\x46\x99\xce\x28\xfa\x32\xd0\xf7\x6c\xeb\xc8\xce\x13\x51\x16\xc4\xc1\x5a\xdb\x10\xcb\x4d\x26\x31\xf6\xb7\x63\xac\xbf\xf8\xf8\xbf\xe1\x7c\xad\x8e\xf1\x2d\x93\x7e\x30\xb0\x72\x87\x7e\x67\xd9\x8e\x5c\x32\x0d\xda\x24\x1f\xc4\xc1\x9a\x85\xa2\x69\x97\x72\x97\x83\xe2\x8b\x65\x76\xf5\x3b\xea\xff\x3f\xda\xde\x3c\xfa\x97\xa2\xba\x16\xc7\xc8\x73\x44\x63\x9c\x71\x02\x49\x70\x00\x14\xad\xae\xae\x52\xd1\x88\x03\x38\xa3\x20\x18\x87\x88\xaf\x86\xee\x1a\xbb\xaa\xab\xba\xbb\xba\xaa\x9c\x15\x35\x60\x94\xc4\x39\xa2\x12\x9c\x10\x0d\x60\x9c\x70\x56\x70\x8a\x60\x34\x26\x0e\x48\x62\x50\x71\x56\xf4\x89\x46\x1c\xa2\xf9\x2d\xf2\x1e\xac\xef\xe2\xfe\xd6\xfa\xe6\x8f\xdb\xff\xdd\x75\xd7\xbe\xbd\xfa\xd6\xa7\x6a\xf7\x39\xfb\xec\x73\x8a\xc7\x9f\x5f\x76\xcc\xfb\xcf\xfd\xe2\x53\x0e\x3d\xff\xfc\xf7\x5e\xe7\x27\x67\x7d\xea\xbc\x6b\xee\x68\xda\x0d\x77\xad\xc7\x5e\xf7\x16\xd7\x3d\xea\xf1\x47\xdd\xe3\xa5\xe7\xec\x7f\xfd\xe9\xb4\x33\x5e\x71\xf1\x99\xff\xf8\x88\xeb\xdd\xed\x2e\xc7\xce\x8f\x7f\xcd\xa3\x6f\x76\xd4\xa1\xfb\xa1\xab\x1f\xbb\x1b\xee\xda\x6d\x36\x27\x1d\xfa\x57\x7f\xfb\x9e\x3f\xfb\xde\x03\x9e\x7d\x8f\x8f\x7e\x3e\xbd\xea\x56\xcf\xbe\xfb\x67\x7e\xf1\x94\x1b\xfe\xc1\x0b\x3e\x51\xff\xe0\x5e\x87\xdd\xe5\x69\xea\xea\xd3\xb6\x1b\xee\xea\xd3\xf6\x3f\x2b\xbe\xef\xb6\x81\xf7\xdc\x5a\xef\xfb\xce\x27\x7e\x7a\xf1\x0d\xdf\xf9\xc9\xb7\x1c\x79\xe4\xe7\x5e\x7d\xe0\xbd\xef\x76\x71\xf8\x93\xe1\x76\xc7\x9d\xba\xde\xf9\x89\xf2\xa2\x5b\x9d\xf7\xe5\x6b\xbc\x07\xbb\xe1\xae\xb5\xb5\xde\x3f\x9e\xfb\xe5\x7f\xfd\xe9\x43\xff\xe9\x97\xe1\xaf\x5e\xf3\x8e\x7b\x1f\x73\xf2\x09\xe3\xc1\xdf\x7c\xfe\x5f\xdc\xed\xc4\xdb\x1e\xf6\xaa\x07\xde\xec\xd6\x57\x5c\xe3\x94\xd8\x0d\x77\xad\xad\xf5\x92\x2f\x7d\xe0\xfe\x6f\xbf\xfc\x61\x67\x3c\xe6\x36\xfa\xce\xef\xba\x9c\x5d\xfa\xf3\xb3\xfe\xe8\x3d\x87\xbf\xf9\xca\x1f\x9d\xf6\xec\x27\x4f\x97\x0d\x6f\xbf\xa6\x4f\x7f\x37\xdc\xb5\xf6\xc0\x9b\x7e\x7b\xf4\x8f\x3f\xfe\xe1\x5f\x7f\xec\x90\x07\x82\xf3\x2e\x3e\xf1\xcc\x33\xbf\x76\xf9\xf1\xf6\x9f\xc9\x0f\x6e\xf3\xd5\xd7\x7d\xeb\x15\xb7\x39\xe7\xa4\x47\x5c\x23\x4a\xed\x82\xbb\xd6\x63\xdf\x7d\x86\xdd\xef\x13\xf7\xd8\xef\x7f\x5d\xfa\x8a\x0f\xbc\xf7\x49\xef\x38\xef\xd2\xfd\x5e\xff\x9f\x97\x1e\x7d\xda\x9d\x3f\x73\xbd\xa7\xde\xf6\x1d\xdf\x78\xec\x45\xd7\x08\x93\xbb\xe1\xae\xb5\xb5\x1e\xfb\xdd\xf7\x7e\xf2\xca\x4b\x3f\x76\x17\xfb\x47\x37\x7f\xed\x67\xd5\xed\x9e\xfc\xcf\x7f\xf7\xbf\x3e\x73\xca\x75\x2e\xbd\xdd\x8f\x7f\xff\xc8\xef\xdf\xfe\x6d\xa7\x9d\x79\xf5\xd6\xda\x0d\x77\xf5\xd6\xfa\x9f\x15\xdf\x77\xab\x8b\xee\xb9\xb5\xee\x7b\xc5\xb9\xe0\x96\xf9\xae\x8f\x3e\xec\x6e\x1f\x7b\xdd\x8d\xff\xee\x9f\xea\xbf\x9d\xf4\xd9\x69\x78\xdb\x1b\x1f\xf2\x8e\x4f\xfe\xb1\x3b\xed\x2b\x9f\xbb\xa6\x0f\x60\x37\xdc\xb5\xb6\xd6\xf9\x7f\xfe\xc4\x87\xff\xfd\xb9\x87\xff\xe3\xdb\xae\x24\xbf\x7f\xdd\x99\x77\x7d\xe5\x87\xeb\x45\x8f\xf9\xcf\x67\xa8\xc7\x7f\xef\x2e\x47\x4c\x37\x3e\xfc\x69\xd7\xb8\x29\x77\xc3\x5d\x6b\x6b\x9d\xf2\xa2\x3f\x6d\x7f\xfe\xe8\xc3\x5e\xf3\x97\x87\x9f\x7e\xc7\xcf\xe2\x63\xca\x5d\xff\xfe\xca\x7b\xfd\xf3\x4f\x4e\xbc\xf8\x69\x9f\x7d\xd7\xb9\x77\xf9\xf9\x2f\xa6\xab\x1f\xbb\x1b\xee\x5a\x7b\xe0\x71\xbf\xfa\xd4\xe3\x3f\xf6\xb1\x87\xfc\xe7\xc5\xfb\xed\x7f\xc0\x85\x9f\x3f\xe7\xe9\xd7\xbb\xec\xdc\xcf\xff\xcd\xb1\xff\xf2\xca\xdb\xdd\xef\x92\xb3\x9e\xf5\xa3\xa7\xfd\xea\xea\xc7\xee\x86\xbb\xd6\x63\x9f\xbb\xff\xdd\x8e\x39\xf1\xd4\x3f\x39\xfd\xe5\x3f\xeb\xfe\xf6\x0f\x3f\x7e\xb8\xee\xf5\x7b\x1e\x73\x32\x7a\x5e\x79\xd2\xb9\xd7\x3b\xf4\xd5\x17\xff\xef\x1b\x5d\xfd\xd8\xdd\x70\xd7\xda\x5a\xbb\x76\xbe\xdf\xe1\x3a\x27\xec\xb3\x5f\xaf\xec\xe1\xf7\x3e\x7c\x2a\xd3\xdc\x0d\x3b\xff\x7c\xd7\xff\xfb\x90\xa3\xde\xf9\x85\x0b\x0e\xfc\xfc\x8f\x9f\xf2\x8c\x3b\xd0\x4f\x7e\x69\xff\x07\xdc\xe7\xdb\x3f\x7a\xf3\x4b\xff\xe2\x56\xf1\x75\xdf\x7b\xda\xeb\x6e\xf4\xce\x6f\x9f\xff\xf1\xe7\x1c\x72\x9d\x13\xf6\xb9\xc5\xff\xfb\x87\xb3\x8f\x44\x74\x03\x89\xa6\x9b\xff\x7f\xfe\xea\x9d\xff\x2f\x8a\xf8\xe3\xf7\xdd\x69\xf9\xc3\x9b\xb1\x5f\x3f\xe9\xf0\xcb\xbf\x79\xe9\x01\x17\xfd\xf0\x89\x8f\xcb\x77\x48\x0f\xba\xe0\x5f\x0f\xfa\xcf\xeb\x9c\xfd\xdc\x9f\xff\xe8\x67\x2f\xde\x29\x83\x7e\xd7\x1e\x7d\xce\x3e\x47\xdf\xfb\xce\xe1\x17\x1f\x3c\x32\xce\x17\x7d\xf3\x37\x0f\xfa\xf9\x57\x6e\x76\x60\xbd\xe9\x83\x3e\xf8\x99\xf3\x7e\xfa\x93\x27\xed\x80\x0e\xbf\xba\xfe\x59\x2f\xff\x36\xb8\xef\x63\x2e\x7b\xd1\xfd\x5f\x78\xf9\x1f\xff\xe0\xe0\x3b\xbc\xf7\xd8\xdb\x7e\xe4\xf3\xbf\x63\x77\x39\x65\xbe\x73\x63\x4e\xdc\x01\x05\xcf\x3e\xf0\x80\x57\x3d\xe1\x0b\xbf\xbf\xd3\x9d\x4e\x5f\x2e\x3c\xde\x7e\xe7\xd2\x7b\xfd\xf9\x97\x5e\x72\xbd\x0f\x5e\x48\x1f\xf8\xcc\x83\x6e\xff\x82\x07\xdd\x73\x07\xf4\xb6\xbf\xd7\x9f\x23\x6f\x7a\x93\xd9\x0f\xdf\xff\x91\xf7\x7b\xe9\x5b\x1f\xf5\xdc\x43\xaf\xb8\xf0\xb4\xe3\x9e\xf3\xb8\xbf\x7a\x5d\xfe\xd2\x0d\x4e\x38\x65\xe7\x74\xee\x2f\x3f\xf9\x4f\x6f\x7d\xe2\xf5\xbf\x70\xef\xdf\xdc\xa3\x9c\xf3\x81\xd7\xfd\xea\x59\x1f\x7a\xd6\x4d\xff\xed\x87\xfd\x11\x9f\xb9\xe9\x7f\x1c\x7a\xfd\x23\x92\x3a\x64\xff\xfd\xf6\xd9\x81\x7e\xe0\x17\x3f\xf5\x9c\x47\xbd\xe0\xa9\x97\xce\x69\x9f\xbb\x98\x7f\x7c\xe3\xf3\x9e\x72\xd1\x23\x4e\x3f\xe2\x86\x37\xbb\xed\xd3\x7f\x78\x73\xfc\xb5\x6f\xfc\xee\xca\x03\x8f\x3c\xf2\xc8\x77\xfd\xc1\xff\x6c\x15\x9e\x7f\xdd\xfd\xf7\xdb\xe7\xf9\x0f\x7a\xe0\xce\x0e\xe9\x8b\x1e\xfa\x8f\x1f\xbf\xc7\xa3\x8f\x3f\xe8\x13\x6f\x3b\xfd\xfc\x1f\xdd\xf7\xe6\xdf\xff\xd2\x27\xde\xfb\xd1\x9f\x7c\xe7\xdc\xaf\xdc\xeb\x59\xd7\xb9\xe2\x7b\xa7\x3e\x7b\xe7\x20\xfc\x93\x1e\xf8\xa8\xe3\xce\xa0\x3f\xbf\xd3\x87\x8e\x78\xf7\x71\x8f\xba\xf8\xb7\xf4\xa5\xfb\x7f\xe9\xb4\xe9\x79\xff\x71\xce\x2f\xfc\x79\xaf\x39\xea\x18\x4c\x77\x7e\x0b\x4e\x77\x57\xde\xe0\x66\x5f\xfa\xcd\x8f\xcf\x3c\x0c\xdf\xf4\x31\xf7\xfb\xe0\x2f\x7e\x75\xcf\xdb\x8e\xee\xa1\xdf\xbe\xd3\xbf\x7c\xfa\xe9\x37\x39\xed\x46\x3b\x27\x87\xdf\xb8\xde\xf2\x4d\x7f\x75\xca\x31\xc7\xbf\xec\xf2\xaf\x1d\x71\xd7\x17\x5e\xf8\x94\x9f\x3e\x76\xff\x37\x1c\xfc\xfe\xf3\x01\xbe\xc7\x57\x9f\xbf\xdf\xf7\xed\x61\x3b\xa0\x57\x1c\xff\xe9\xef\x7e\xee\xa3\xc7\x1c\x70\xa3\x5f\xfe\xf9\xc1\xdf\xbb\xf3\xed\x5f\x74\x8b\x13\x6e\x73\xfd\x9b\x3d\x44\xdf\xe5\xec\xdf\xbf\xf1\x77\xb7\x39\xf6\xf2\x83\x76\x40\x5f\x71\x04\xfa\xc9\x57\xbf\x75\xa3\x87\xfd\xea\x19\xb7\xfa\xdb\x3b\x9e\xf5\xd1\x3b\x7d\xe3\xab\xef\x7c\xc3\xe3\xe2\x9f\xdd\xe9\xf5\x3f\x78\xee\xed\x5f\x73\xd4\x13\x5e\xf4\x9c\xe7\x5f\xf7\x7f\xf6\xff\x7f\xfe\x83\xfe\xeb\x2f\x76\x7e\x8d\xfe\xec\xbe\x0f\xfc\xdc\x8d\xbf\x74\xee\x4d\xbe\x76\x7a\x7f\xf8\x77\x0f\xbc\xed\x89\xe7\xfe\xd5\xe9\x37\xfa\xdd\x77\xde\x73\xd2\x19\xc7\x9d\xfd\xe0\xaf\x7e\xe5\xc3\x3b\xa0\xee\xd7\xef\x3c\xeb\x3b\x57\x7e\xff\xe8\x1b\x9c\xed\x7f\xf9\xd0\x2f\x7e\xf1\x7e\xff\x70\xee\x83\x5f\xf5\x1a\xfd\x82\x2b\x5e\xfe\x89\xdb\x9d\xf5\x8d\xee\x0f\x9f\xb8\x03\xfa\xe4\x7f\x46\x7f\xf1\x98\x13\x1e\xab\xbe\xf6\xd1\x83\x6e\xff\xb9\x53\x7e\xf1\xa4\x0f\x9f\x70\xcb\xcf\x9e\x70\xc0\xdf\x1d\x70\xca\x0b\x6f\xf0\xae\xb3\x5e\x9f\x5e\xb7\xf3\xb8\xfe\xeb\x5f\xbf\x7c\xbf\x1f\x1d\xc3\x7e\xf6\x92\x7f\x7a\xcb\xc9\x57\x1c\xfa\xf4\x7b\xdc\xec\xd4\xfa\x85\xa7\xb5\x2f\x7c\xc7\x3b\x2e\xfb\xf9\x95\xc7\xdf\x75\xdd\x01\xfd\xcc\x05\x47\xbc\xfa\x92\xa5\x5c\xb0\x7e\xef\x96\xdf\x39\xe2\x43\xaf\x61\xcf\x3d\xff\xb1\x9f\x58\x2f\xbc\xc5\x65\xe7\x7d\xf7\x92\xaf\xbf\xe2\x29\x3f\x3a\x64\xa7\xbb\xe9\xb5\xb7\xfc\xdc\xa9\x47\x7f\xeb\x71\x0f\x3c\xe5\x35\x68\xdf\xff\xf8\xc5\x37\xdf\xf8\xb5\x9b\xde\xf4\xcf\xcf\xff\xc8\x9d\x6f\x78\xd4\x8b\x6f\x41\x1e\xfd\x96\x9d\x0e\x8d\x83\x7e\x78\xaf\x0b\x9e\xfd\x77\xe5\x60\xfa\xd6\x63\x4f\xff\x93\x83\x4f\x7a\xcc\x37\x0f\xb8\xec\xfe\x4f\xb8\x5f\x77\xcf\x8f\x5e\x74\xeb\x6f\xdf\xe2\xa2\x53\x7f\xb7\xd3\xf7\x71\xe2\xd9\xa7\x99\x17\x1f\x74\xd0\x79\xfb\xe7\x83\x6f\xf9\xf0\x73\x0e\x3d\xf7\xe4\x07\x7f\xf9\x75\xeb\xd7\x8f\x7b\xc2\x3e\xf7\xab\xfb\xbe\xf1\x97\x07\x5f\xf3\x23\xec\xb6\xaa\xd7\xfa\x11\x2e\x79\xf2\x7d\xde\xf2\x86\xdf\x1d\xff\xee\xf8\xcc\xfe\xa0\x93\x5e\x7c\xca\xbd\xfa\x2f\x3c\xdc\xde\xff\xe4\x8b\xae\xf8\xd3\x9b\x1f\xfa\x9b\xcb\x6e\x7f\xd3\x9d\x93\x15\xe8\x33\xff\xe6\x56\x6f\xba\xc0\xdf\xf3\xe9\xcf\xb8\xe1\xa9\x87\x3d\xe9\x65\xef\xfb\xf7\x0f\x7d\xe2\xad\x2c\x92\xcf\x3e\xf7\x06\x6f\x7c\xee\x61\x0f\x3d\xf0\x9d\x3b\xa0\xf7\x87\x67\xfc\xe8\x94\x8f\x5c\xf6\xda\x33\x5f\x75\x21\x1a\xbf\xf1\xa9\xfb\xed\x3b\x9c\xf1\xf1\xcb\xaf\xfb\xc8\xc3\x7e\x7b\xbe\x3b\xee\xbc\xa3\x8e\xf9\xd6\xce\x35\xf8\x3f\x8f\x66\x6f\xfb\x29\x7d\xc0\x0f\x1f\xf5\xbe\x53\x2f\xb9\xf8\xc1\xe8\xcb\xef\x3b\xe3\x09\xcf\xb9\xe7\xc5\xcf\x38\xe0\xf8\x9f\xe4\x77\x3e\xe9\xa6\xc7\xec\xcc\xec\x8e\x7a\xe2\x25\x07\xbc\xf3\x06\xbf\x3d\xfe\x26\x2f\xbf\xc3\xf2\xe4\x2b\xff\xad\xbd\xef\x17\x8f\x7e\xe5\xd9\xfb\x3e\xe0\xdc\xf7\x7e\xf1\xdf\xce\x7d\xe4\xb3\x76\xbe\xc0\x5b\x9e\x57\x4e\x3d\xf6\xa9\x7f\x8d\x1e\xf8\xa6\x37\xdf\xeb\xd3\x97\xff\xeb\xc7\xee\xf0\xea\x3b\xaf\x57\x9e\x71\x8b\x33\x6e\x76\xe4\x4d\x0e\x3c\x01\xef\x7f\xf4\x0e\xe8\x9f\x5d\xf2\xcb\x1b\xff\xf6\x26\xe0\xa4\xdb\xdf\xf6\x8a\xf7\xee\xff\xd9\xd1\xe0\x7d\xdf\xff\xcd\x4b\x1f\x66\xbe\x7a\x4c\x3e\xf3\x56\xed\x0b\x51\xd8\x01\xfd\x97\x5f\x7f\x68\x9f\x3f\x32\x27\x1e\xfb\xa9\x37\x7d\xf0\x51\xc7\xff\xe6\xd5\xdf\xfa\xab\xd7\xff\xe4\x9e\x1f\xfc\xcb\xf9\xfa\xec\xf2\x0b\x5e\x7d\x49\xf9\xee\xfd\x9f\xf3\xaf\x37\xf8\x9f\xad\xea\x7f\x1b\x8a\xae\x22\xdd\xbb\xed\x73\x9d\xe7\x7e\xeb\xba\x2f\x3b\xf0\xc0\xfb\x3e\xe1\xa6\x4f\xbf\xc5\x59\x47\x5c\xff\x8d\x0f\xf9\xdd\x5d\x0f\xfc\xaf\x33\x2f\xfa\xd3\x3b\xde\xf3\x71\x4f\x7e\x37\x7d\x43\xf9\x05\xbb\xc5\xb1\x87\x5d\x72\xbd\xdb\x1d\xb8\xcf\x3e\xfb\xfc\xc7\x83\xf7\xe1\x0f\xd9\xe7\xfb\xd7\xcf\x0f\xa2\x44\x50\xdf\x11\x48\x5b\x42\x19\xc9\x4a\xf3\x2c\x38\x6e\xc6\x26\x64\x22\x1b\xcb\xd7\x71\x4e\x42\x38\xd0\x70\xed\x60\x98\xf2\x44\xba\x55\x02\xad\x7c\xdf\x33\xee\x4c\xe3\xf7\xb9\xdd\x3e\xb7\x79\xd7\xb1\x47\x1e\x79\xe4\x5e\x7b\x0b\xba\x02\x17\xdb\x65\xa1\xb8\x0e\x1c\x17\xae\x6b\xcb\xb9\xb6\x29\x8c\x70\x22\x5d\xcf\x08\x53\x76\x9c\x51\xe9\x6a\xdb\x43\xd9\xc9\x3c\x80\x71\xef\xbf\x05\x01\xd4\xa1\xd8\x98\x85\x99\x5c\xb4\x22\xac\xc4\xe4\x5d\x86\xb3\x04\xc2\x47\xaa\x68\x3f\xce\x98\xa2\xb0\x18\x34\x36\x6d\x84\x39\xcf\x74\x83\xb5\xc0\x93\xd2\x53\x31\x0b\x03\x05\x92\xe0\x67\x1c\x45\xcc\x2d\x67\x16\x98\x19\x75\x3c\x8c\xb8\x4d\xc9\x18\x9f\xb0\xe0\xd5\x4a\x27\xab\xd8\x62\x2d\x30\xef\x75\x41\xba\xeb\xb3\x8f\x33\x70\x72\xac\xde\x4e\x09\x02\xa9\xbd\xe9\x75\x4a\x4b\x55\x60\x89\x36\xbb\x69\xce\xba\x4d\x03\x01\x1b\xbc\x85\xd3\x2e\x8d\xd6\x74\xaa\x66\x0b\x70\xd7\x8d\x7e\x1a\x97\x32\x69\x0b\x30\xe9\xda\xc6\x4f\x7d\xd2\x83\x23\x43\xd7\x19\xb9\x4a\x3c\x79\x90\x37\x78\x8b\x81\x19\x5b\x98\x9d\xa7\xb9\xc3\xc4\x4c\x60\x1e\x58\x6b\x6c\xb0\xb1\x64\x12\x91\x50\x4b\x27\x88\xf7\xaa\xfa\xa5\x35\xc8\x0f\x71\x0d\x72\x83\xb7\x10\x2d\xb6\x53\x3b\x4d\xbd\x5c\x47\x58\xc3\x54\xf4\x1c\x59\xa0\x82\x01\x3e\x56\xe5\xa6\x29\xa4\x95\xc0\x10\x1d\x64\x6e\x0a\x85\x88\x58\xaf\x79\x8b\xab\xc9\x65\x37\x1e\xde\xcb\xe4\x02\x65\x9e\x33\xd1\x1e\x4f\xba\x17\xd2\x0f\x84\x63\xd1\xc0\xd8\x8e\x29\xaa\x75\x51\x86\xd6\x5c\x5b\xd0\x0a\x8e\x49\x18\xe7\x28\xa1\x8e\x1b\x1c\x28\x93\xbb\x68\x60\x6c\x26\xc7\x59\xf6\x52\x00\x63\x65\x5b\x68\x30\x96\x77\xb4\x44\x53\x58\x57\x5b\xc0\x22\xd3\x19\x49\xd5\xb9\xc1\x6c\x40\x2e\x14\xb9\x61\x8e\x33\x71\x93\x2c\x0e\xc6\x01\x92\xae\x19\x48\x99\x6a\x09\xa4\x19\x29\x75\xd4\xcd\xdc\xd7\x08\xcb\x3c\x33\xdb\x1a\xcc\xec\x06\xc7\x9a\x0a\x2a\xc3\x8c\xa3\x5a\x45\x4d\x84\x0c\xab\x0b\x91\xe8\xd5\x05\x90\x4b\x2f\x34\x6d\xd6\x69\xec\xba\x69\x16\x73\x10\xdc\x8d\x52\x66\xda\x6e\xb0\x95\x53\x67\x3a\xa7\x82\xca\xfd\x9c\x57\x44\x66\xd5\xb6\xf3\xd2\x55\x88\x38\xa0\x5e\x41\x8b\x2b\xd6\x02\x63\x8e\x85\x36\x3c\x8e\x93\xa4\x6c\x83\xb5\x00\xb0\xb5\x56\x11\x1d\x99\x74\xa2\xda\x38\x4d\x93\x2e\x81\xea\x7e\xe0\x35\xad\x1a\x8a\x26\xca\xc9\xda\x58\x56\x2a\x8a\x4a\x52\x91\x2d\xf6\x45\x93\x6d\xd3\x33\xbd\x22\xb4\x0c\xbd\xa5\xb5\x32\x92\x30\x68\x75\xdf\x4a\x26\xfb\x34\x0d\x1c\xf5\xd5\x2e\x9c\x35\x73\x81\xbd\xc1\x05\x6c\x41\xb4\xab\x59\x52\x9b\x14\xc9\x4b\x61\xb1\x1b\x92\x50\x61\x58\xb2\x5a\xd7\x36\x4b\x49\x95\x33\xb4\xa2\xae\x54\xee\x87\x1e\x71\xb5\xaa\x44\xd0\x1e\xe4\xb2\x5b\xe4\xb6\x77\xc9\x85\x9a\xb1\x49\xbd\x91\x0b\x8b\x73\x6f\xda\x00\x0b\xe9\x99\x65\x03\xe1\x28\x17\xca\xd9\x20\x13\x55\x69\x2c\xda\x86\x25\xb5\x58\x5b\x5d\xb6\xd8\xca\x92\x39\x2b\x40\x03\x1d\x89\x6e\x86\xc9\x0f\x90\xf3\x88\x0c\x1c\xaa\xf7\x82\x54\x0f\xd8\x54\xe1\xc0\x02\x2e\x92\xd9\x75\x94\x2c\xd8\x0d\x36\x91\xaa\x34\xae\xac\x69\x01\x1e\xea\xcc\x7d\x11\x3a\x70\x5e\xa7\x4c\x43\x6a\x7b\xed\xc6\x06\xf7\x3c\xba\x52\x10\xe9\x70\x8d\x8c\x93\x80\x37\x78\x0b\xba\x92\xa9\x69\xfa\x2e\x75\x76\x65\x53\x37\xb7\x72\xe1\x38\xad\x31\xf4\x30\x05\x18\x53\x00\x7a\xce\xba\x07\x25\x8b\xda\x33\xe1\x1b\x00\x37\xf8\x45\x46\x28\xab\xcd\x85\xc9\x69\x2c\x63\xcd\xe3\x32\x7a\xef\x81\x45\x65\x99\x22\x9f\x1a\xb1\x06\x53\x06\x8b\xd4\x2a\x7b\x5c\x0b\x99\x26\xb0\xc1\xd7\x9a\xa6\x6a\x50\xb7\x8c\xfd\xe0\x23\xae\x3d\x5e\x67\x8f\xad\x6c\x05\x45\x59\xe9\xc5\x38\xdd\x43\x94\xf2\x98\x08\x32\x22\x19\x12\xfb\xda\x6c\x41\x71\xb9\x4f\x75\x9d\x51\x20\x16\x33\x21\x9c\x9d\x73\xd7\xa0\x10\xd5\x1a\x03\x49\x60\xd2\xa8\xf0\x51\x13\x36\xb8\x45\xd3\x65\xaa\x78\x9c\xb6\x20\x97\x6e\x10\xc6\x9b\x42\x05\xf2\xf3\x9c\x3a\xc1\xac\x58\x04\x92\xcb\x1c\x8b\x86\xd3\xec\xb8\x9e\xb4\x6f\xfa\x1e\x65\x1c\x16\x8b\x6d\x43\xa7\x3d\xc8\x65\xb7\x5c\x6f\x2f\x93\x4b\x8d\x4e\x35\x4c\x4a\x85\x9a\x05\xd5\x15\x44\x55\x25\x1c\xe5\xe2\x17\xdf\xeb\x65\xed\x7d\x8e\x0b\x6d\x5c\x65\x0b\x5f\x12\x1e\x7a\x03\x96\x0d\x16\xce\x06\x5f\x06\x62\xbc\xe8\x7d\xa3\x3b\xb4\x0c\xed\x3a\x4d\xd3\xd0\x2e\x26\x95\x46\x48\x5b\x87\x46\x80\x3a\x2e\x7a\x0a\xbd\x6e\x80\xb0\x7a\x8b\x4d\xd4\x8c\xc4\x8c\x09\x27\xe1\x95\x8a\xed\x1a\x91\x16\x53\x0f\x1a\x5b\x53\xe5\x31\x33\xe5\x70\x5f\x72\xc7\x5a\xee\x42\x37\xd0\x56\xd2\xba\xc5\x5a\x64\x8c\xd3\x3a\x04\xdf\x85\xa2\x41\x3b\x96\x41\x94\xbe\x09\x24\xba\x36\xad\x6c\xa1\x00\xa9\xd5\xe4\x7e\x06\x38\x72\x33\x62\xdc\x02\xbd\x45\x5a\xb4\xae\x66\x4d\xa9\x5d\x19\x9b\x21\x5e\x57\xd9\x99\xb2\x82\xc4\x96\x99\x19\x34\x14\x18\x75\x19\x11\xd4\xfd\xdc\x6b\x52\x40\x71\x45\xd2\xb0\xc1\x2f\x62\x7b\x8b\x3d\x58\x34\x0a\xc6\x20\x67\x40\x9e\x60\xbf\x0e\xd6\x27\x36\xdb\x59\x82\xbe\x15\xed\x08\xc7\x2a\x4d\xab\xb9\x1c\x1a\xb3\xc4\x2d\x92\x76\xde\x18\x94\x6d\x5e\x58\x41\xb3\x32\x43\xcb\x91\xf4\x54\x38\x05\xa3\x6a\x44\x58\x73\x6d\x46\x2a\x15\xef\xbc\xe5\xaa\x11\xc0\x34\xbc\xdf\x22\xae\x6e\x47\x3a\xfa\x1e\x08\x98\x49\x2d\x8b\x67\x62\x98\x64\xcb\x22\xa2\xde\xb7\xa3\xd6\x83\x32\xad\xa6\x96\x77\xb3\x0b\x05\xd0\x88\x77\x24\xed\x57\x93\xcb\x6e\xea\xd0\x5e\x4e\x8b\x70\xee\x24\xb7\x71\x2e\x7d\xa5\x7e\xf4\x9d\x5b\x0a\x66\x90\x0e\x42\xb4\x34\x0d\x3d\x6f\xbd\x0d\x4d\x15\xde\x3b\xed\x93\x84\x28\x6e\xb2\x89\x92\xae\x69\xe5\xc3\xb0\x68\x1e\xa3\xea\xa6\x51\x75\x05\x62\xb4\xae\x19\x64\xea\xb1\x83\x19\xf4\x5d\x9f\x31\x1e\xe2\x60\xd4\x80\xf4\x16\xe1\x2f\x71\x16\x43\x81\x71\x34\x78\x70\x16\xe4\xa5\x06\xab\x60\xc3\x79\x9f\x64\x5e\xb4\x36\xcd\x54\x10\x6b\x66\xb6\x20\x23\x9d\x73\x0a\x9b\x2d\xd2\x22\x44\x8c\x19\x4d\x87\xc6\xa8\x91\x20\x79\xe0\x5e\x8b\xec\x4c\x69\x33\xa7\x22\x2c\xfd\xc2\x5b\x23\x23\x41\x95\x45\xd9\x98\x39\xac\x5b\xe8\x0c\xb4\x6b\xf8\xa2\x7b\x1f\x90\x28\xc1\x99\x46\x66\x53\x8d\x4b\xa1\x65\x36\xcc\xae\xb4\x12\x5a\x58\x3b\x4a\x7d\x2a\x6b\x59\x30\x2e\x36\x6e\x11\xb9\xf4\x34\x4d\xc3\x82\x94\x44\xd8\xb1\xb6\x8b\x00\x37\xce\xf3\xd6\x22\xb5\x4c\xf3\x3c\x72\x21\x0a\x32\x12\x5a\x11\x13\xa9\x43\xc9\x9e\xa6\x2d\x12\xd5\x58\xdb\xb1\xc5\x95\xcc\x65\xa0\x13\x93\x75\x64\x8e\xd1\xca\x3b\x23\xe4\x3c\x5a\x42\xfa\x42\x16\x25\xb2\xd5\x8b\x96\x7d\x03\xe5\x34\x6c\xf0\x16\xad\x17\xd6\xce\x2b\xed\x57\x81\xc6\x10\x31\x34\x64\x92\x15\xb9\xb6\x99\xa2\x91\x3d\xb1\x4d\x86\x9a\xae\x0d\x4f\xd1\x38\x59\x10\x8a\x6a\x0f\x72\xd9\x4d\x4f\xde\xdb\x9a\xcb\xc8\x12\x8e\x75\x00\xc6\x95\x62\x3d\x20\x66\xc2\x7e\x25\x46\xf5\xcc\xd1\x8e\xe3\x9c\xc8\x3c\x34\x43\x23\x03\xeb\x79\x75\x8a\x33\xb5\xc1\xc2\x91\xda\x45\x66\x5b\xa6\x25\x9e\x03\xe2\x74\xa9\x39\x26\xb3\x04\xb1\x24\xdc\xe1\x18\x45\x68\x50\x76\x66\xe2\x6d\x8f\x1d\x46\x4e\xeb\x79\x03\x72\x41\xc4\x3b\xbc\x4a\x3c\x37\xb5\xe7\xd3\xe2\xc3\x12\xb1\xe8\x7d\x0b\xe3\x3c\x2d\xd1\x65\x38\x98\x7e\xae\x1d\x48\xbe\x98\xca\xac\x0c\x6c\x83\xe4\x8c\x74\xd5\x64\xb0\x82\x51\xc0\x51\xc0\x84\x96\x15\x67\xae\x89\x13\x18\xad\x86\x5b\x4f\x87\x64\xe8\xb2\x62\x92\xa3\x1f\x33\x98\x1b\xa8\xb7\x90\x95\xd1\x78\x55\x22\x6a\xad\x5e\x2a\x34\xc6\xa0\xa9\x81\x61\x22\xd2\x61\x22\x21\xa9\xbd\xc8\x52\x11\x3e\xc7\x69\x82\x8c\x4c\x54\x70\xb4\x49\x72\x36\x60\x3b\xe3\x2c\x7d\xbb\xd4\x58\x9b\xa4\x90\x44\x63\xa5\x25\xf9\x06\xba\x60\xc9\x30\xf4\xeb\xd4\x21\xb7\x12\x9f\xf8\xe2\x41\x72\xd6\x6d\x11\xb9\x8c\xb4\x41\x5d\xdb\xc9\x75\x2c\x43\x35\xde\xa4\xd1\xb2\x12\xd8\x2a\x71\x19\x27\x20\xb1\x93\x13\x19\x80\x5c\x38\x92\x76\xea\x1b\x04\xd6\x2d\xe2\x6a\x41\x39\x6a\xec\xca\x8c\x18\xb9\x8b\x6b\x57\x99\x1c\x2a\x0c\x8a\x99\x5a\xd7\xd9\x54\x5d\x72\x50\x9d\x63\xa9\xd4\x32\x15\x43\x4b\xda\x83\x5c\x76\xab\x40\xed\x65\x72\x91\xc0\x8e\x2b\x1c\xa5\xa7\xc3\xda\x58\x97\x19\x2c\x0e\xbb\x75\x5a\x1b\x31\xe4\x51\x23\xe6\x03\xf5\x45\x45\x9a\x96\x61\x16\x04\xe6\xba\xc1\x56\x26\x7d\x87\x15\xd4\x9d\x1b\xe2\xc8\x67\xd9\x8c\xa5\x34\x72\x60\x05\x0c\x8b\xb7\x5d\xd5\x33\x51\xa6\x50\x47\x2a\x90\x5d\x53\x83\x1a\x2a\x27\x5b\x7c\x1b\xd2\x30\x78\x3f\x8f\x43\xb2\x5e\x3b\x5f\x16\xef\x78\xcd\x90\x96\xb1\x23\x5c\xa4\x00\x00\xa1\x21\x66\x10\x7d\x5a\xc6\x71\x02\x4d\x31\x1b\xac\x85\x5e\xd8\x1c\xcb\xb8\x24\x1f\x93\x6f\xd6\x14\xc9\x5a\xd2\xec\xfb\xd5\xc2\xae\x84\x2e\xf0\xe8\xfb\x16\x20\xe4\x2b\x00\x89\x16\x21\xcc\x16\xb5\x09\x1c\x64\xd3\xcf\x9d\xc9\x1d\x1b\xeb\xe8\xaf\x3a\xdf\x09\x8e\x41\x0d\x08\xb8\xb9\x67\x78\xd4\x05\x8a\x45\xda\x96\x31\x9e\x71\xd6\x7a\x8b\xb5\xa0\x72\xe0\xeb\x14\xca\x1c\xec\xac\x39\xf0\x78\x19\x13\xc2\x4c\x8d\x33\x9a\x69\xeb\xd6\xb8\xe6\x09\xfa\x79\xe6\x24\xaf\x74\x28\x29\x76\x6a\x0b\xb5\xa3\x16\xb2\x74\x99\xb1\x08\xa6\x35\xa8\x29\x69\x57\x38\xc2\x3a\x33\x6c\x79\xd7\xac\xc0\x76\x31\xfb\x56\xf6\xda\xb7\x8a\x78\xa4\x91\xde\xe2\x2d\xd8\xb2\x16\xd6\x0a\x26\x98\x9a\x41\xb0\xde\xd5\xbe\x8f\x0d\x1f\x38\x91\x7a\x6e\x47\x16\x88\xb1\x19\x65\x81\x7b\x84\x95\x51\x13\x9e\x96\x3d\xc8\x65\xb7\x9a\xf5\x5e\x26\x17\xb1\x8c\x4e\xa9\xd5\x19\xab\xb4\x59\xdd\x94\x68\x2e\x4b\x6c\x54\x96\xde\x35\x64\xc8\x03\x23\xac\x0e\xce\x77\xc4\x8f\x03\x97\x1d\x27\x75\x8b\x98\x21\x41\x2e\x56\x4e\xb3\x46\x36\x72\xc1\xea\x3a\x75\x30\x41\xd6\xf7\x64\x14\x26\x0c\xe3\xe4\xed\xd0\x40\xa7\xb4\x6c\xe8\xa4\xe5\xc4\xbb\x2d\xc2\x5f\xdd\x2c\x10\x85\x76\xc4\x5d\x74\x4e\x8f\x0a\x4f\x73\xd2\x0d\x11\x86\xb9\xde\x2c\x45\x2a\x87\x23\xf0\x1d\xd5\x02\xe2\xac\x6c\xd8\x44\x3e\x84\x3a\x32\x3e\x63\xbd\x2e\x40\x99\x96\xd8\x16\x20\x2a\x26\x99\x5a\x09\x8d\xd2\xd3\x6c\x5b\x6c\x39\xa9\x88\xa5\x29\xac\x26\xb0\x9e\x6c\x90\xe1\x93\x65\x1d\x4d\x1e\x3d\xae\x41\x91\x30\x2d\x0e\xf6\x92\x0f\x3d\x10\xc9\x43\xb0\x30\x46\x1d\x8a\xdc\x2d\xc4\x4c\x3d\x74\x18\x96\x8c\xe2\x16\x6b\xc1\x63\x18\xc0\xe8\x29\x87\xda\xc5\x38\x07\xdf\xe5\xa8\x17\x6b\xb2\x88\x8b\xae\x44\x7b\x2c\xe8\x00\x4c\x96\xc2\x33\x98\xc6\x36\x9b\x2d\x22\x17\x2d\xf4\x5c\x84\x89\x48\xf4\x30\xd9\x4e\xcc\xeb\x8c\x86\xa5\x40\x98\x54\xf1\xb2\x45\x1a\x2c\xcd\xc0\x7d\x94\x48\x03\x1e\x62\xa7\xe8\x06\x69\x11\xc9\x2d\x6d\x1b\x94\x7a\x24\xe6\x11\x72\xe3\x5d\x2d\xad\xb2\x96\xb3\x3e\x33\xc9\xdc\xc4\x24\x71\x56\xd1\x51\x0d\x8e\x87\x3c\x36\x69\x87\x74\x70\xb5\xd9\x68\x37\x5f\xd6\xb5\xcc\x46\xdf\x23\xb7\x7e\xeb\x51\xaf\x78\xea\xd7\x7f\xfd\x92\xb7\xbd\xed\x3e\xf2\xd9\x17\xff\xd3\x3d\xc3\x23\xbe\xfb\xb6\xfb\xbf\xf6\x9c\xbf\xf9\xc8\xbe\xa7\xe3\xeb\xed\xbc\xfa\xe3\xb6\x3f\xbe\xf4\x11\x67\x9c\xfd\xd5\x7f\x3a\x19\x3d\x66\x7c\xfb\x2b\x5f\x2d\x7f\xb9\xdf\xa1\x9f\x7f\xde\x1b\x3f\x3c\x9f\x4d\xf6\xbd\xf3\x9d\x5f\x79\xea\xbd\x77\xce\x34\xf9\xfd\x27\xff\xe0\x51\x1f\xbe\xc3\x65\x0f\xfc\xd1\x4f\x9e\x04\x63\xf7\xb0\xf7\x7c\xf4\xa1\xd3\xdf\xae\xa7\xfe\xe9\x6d\x97\xef\xbf\xe4\x66\xaf\xfd\xdf\xa7\xef\x80\xde\xf5\x65\xe7\x3c\xf3\x13\xef\xfd\xc7\x87\xfc\xfd\x78\xc3\x83\xbf\xfc\xfa\xe3\x7f\x0c\x5f\x79\xc8\x8b\xff\xe1\x21\xf8\x9c\x3f\xf6\x8f\xba\x3e\x79\x96\xfa\xe9\x0e\x68\x3a\xe8\xc3\x8f\x39\xf1\x3e\x4f\xb9\xfe\x8f\xfd\x89\x97\x9d\xf9\xb1\xbf\x7b\xc9\xbd\xf6\x3f\xe1\xe6\x17\x4f\xff\x72\xc1\x29\x1f\x78\x5e\x7d\xc1\x09\xf7\xbd\xed\x0e\xa8\x4a\xdd\x99\x9f\x7d\xd5\x09\x8f\x3c\xf4\x7e\xef\x7b\x6b\x7b\xc8\x17\xf7\x3d\xf1\xb0\x67\x3f\xee\xbc\xfd\x6f\xf5\x98\x3b\x5c\x9f\x90\xff\xba\xcf\x23\xaf\xbb\x03\x7a\xfc\x03\x41\xc1\x5f\x3c\xee\xf3\x67\xbd\xfb\x5d\xd7\x79\xc3\xcb\x1e\xde\x1e\x75\x65\x46\x9f\x7a\xf3\x7f\x5e\xf2\xa4\x63\xff\xf4\x3a\x17\x0c\x17\xed\xbc\x8f\xf0\x80\x8b\xf6\x3d\xf6\x0f\x4e\x7a\x06\xfd\x97\x7d\x4f\x7f\xdd\x77\x6e\xf6\xe7\x9f\x3d\xfd\x17\x87\xd0\xfa\xee\xb3\x2f\xf8\xd0\x79\x3f\x38\xf6\x2b\xdf\x79\xf4\xf7\xaf\x31\x1b\xed\xb6\xaa\x7b\x99\xe1\x0d\x21\x64\x44\x6d\x76\x68\x94\x74\x4a\x0b\xea\xd1\x2c\x2d\x5a\x97\x19\x08\xb4\x8a\x8e\xb2\x38\x0a\xc6\xc0\x04\xa1\x95\xf3\x58\x32\xd8\x20\x2b\xa4\x70\x35\x2c\xc8\x08\x85\xe7\x3d\xed\xa2\x53\x7e\x4a\x99\x36\x1c\xc6\x6e\xc4\x0a\xb2\xce\x4c\xca\x68\xa4\x0b\x5b\xc0\x68\x9a\x39\xa8\x2d\xf8\x64\x6e\x6d\xc7\x31\x16\x40\x77\xba\xd1\x20\x3a\x4f\xe6\xc1\xa8\x98\x9d\x1d\xa3\x32\x58\x1b\x02\x1a\x1e\x82\xec\xa5\x12\x0b\x2b\x1a\x6c\x11\x3e\x36\x56\x4e\xc3\x5a\xd1\x34\xa9\xab\x22\xd9\x06\x06\x81\xd6\xd2\xa1\x49\xe7\x45\x0c\x91\xa9\xbe\x68\x01\x01\x4f\x8a\x37\x2c\x4c\xa0\x27\x5b\x14\x51\x27\x6c\xaa\xb6\xd6\x39\x18\x2b\x0f\x03\xc4\xa3\x27\x2b\x1b\xd6\xba\x72\x66\x42\x10\x73\xab\x99\x6b\x02\x92\x68\x19\xa7\xa1\x5b\x7a\xb5\x85\x08\x68\xca\x32\x43\x42\x75\x90\xce\x8c\xdd\xd8\x79\x5e\x1a\x30\x99\x66\xce\x55\x51\x27\x12\x02\x33\x99\xc2\xe0\xe4\xda\x00\x43\x1d\x19\xca\x16\x59\xa1\x2b\xba\xd8\xb5\xf2\x38\xda\x7e\x32\x33\xa3\x4d\x3b\x42\x52\xc4\x32\x46\x53\x5d\x58\x35\x9c\xea\x38\x05\x03\xb3\x4d\xb3\x53\x23\x66\x1b\x54\x5b\x68\x68\xb5\xa7\xd4\x8c\x66\xe9\x86\x32\x2f\x9a\x96\xce\x32\x53\x10\x10\x99\x90\xca\x48\x2f\x56\x26\x89\x80\x3c\xaa\xc2\x8a\x35\xac\xc4\x3d\xc2\xc7\xdd\x78\x78\x2f\x93\x8b\x55\xcd\x28\x7b\xcd\x0d\x8b\x85\x2d\x03\x0f\x3a\x2c\x2b\xef\xb4\x5a\x99\xf7\xd0\xab\x7e\x91\x1a\xad\x08\xcb\x19\xf0\x21\x10\xea\xc3\xb4\xc5\xcf\x07\xba\xd8\xb2\x55\x50\x08\x27\x11\x3d\xed\x2c\x30\x7e\x58\xd7\x34\xca\x61\x86\x44\xb5\xce\xeb\x15\xab\xce\x4d\xab\x6b\xb2\x8d\x0d\xe0\x5b\xc8\x2c\x22\xb9\x3c\x07\x6f\xb5\x59\x85\xf1\x02\xe3\xc2\xb0\x24\x50\x12\x0c\x3b\xda\x5a\x40\x06\xd2\x82\xe4\x66\x6b\xc8\xd2\x54\xd2\xce\x5b\x64\xc8\xc9\xab\xd2\x4f\xb3\x4c\x0d\x01\x36\x1a\x9e\xa7\x66\xf6\xc2\xf2\x38\x72\x5e\x06\x89\xe0\x58\x89\x40\xab\x9c\x0a\xca\xa0\xb7\x6a\x8d\x1b\xd4\x39\x08\xb3\x45\x3b\xcc\xb4\x04\x33\x16\x55\x40\x24\xe6\xbc\x72\x22\x41\x1d\xb8\x64\x6c\x09\xc0\x22\xee\xb4\x94\x50\x3a\x46\x81\x0e\x74\x0b\xa2\xad\xad\x09\x26\x8c\x2d\xe2\xb2\x6d\x93\x19\x70\x27\xbb\x3a\x4a\x6e\x9b\x35\x76\x45\xfa\xae\x25\xb3\x05\x21\xb3\x20\x8b\x1a\x65\x93\x9b\x2d\x6a\x3e\x4d\x6b\x02\x12\xa4\x53\x10\xa9\x35\xa8\xa2\x87\xae\x4e\x0b\x04\xb8\x00\x8c\xab\x75\xd3\x5a\x03\x49\x96\x68\xd3\x10\x2c\xc5\xec\xa6\x0d\xce\x08\x59\x21\xa0\x66\x4d\x8c\xf5\x01\x8b\x4c\x25\x93\xa9\x9b\x27\xc2\x48\xf0\xb6\xac\x35\x4f\x7a\x56\x6d\x03\x9c\x4c\x86\xf8\xd0\xfb\x91\xcb\x3d\xc8\x65\xb7\xc8\x6d\x2f\xfb\x01\x02\xe5\x20\x32\x85\x87\x60\x42\x9a\x3a\x35\x0b\xe3\xb1\xc8\x43\x33\x62\xa8\x78\x99\xf5\xd0\xaf\xb6\xc3\x29\xa1\x66\x16\x3d\x9f\x0a\x68\xb6\x50\xd5\xd1\x42\x35\x66\xc5\x4a\x16\x0c\x98\x14\xef\x8b\x1d\xdb\x56\xdb\x1a\x26\x2d\x93\x14\x48\x0d\xbc\x76\xd6\x33\x64\xfa\x42\x48\x4f\x36\x78\x0b\xa2\x40\x16\xb2\x59\x1c\x29\xa8\x1f\xdb\x89\x84\xd0\x67\x48\x52\x33\xea\x56\x71\xd0\xa0\xb6\xe3\xdc\x17\x3a\xf8\x65\xd5\xe3\x8c\x86\xa9\x6e\xe1\xea\x84\x91\xf6\x3c\x55\xe7\x43\x07\x62\x9f\x87\xa6\xae\x1d\x1b\xc3\xb2\xce\x56\x69\x91\xba\x80\x3b\xba\xf8\xb9\xe3\x4b\x24\x1e\xcd\xd5\x91\x2d\x8e\x75\x44\x8e\xac\x83\x94\x09\xa9\x54\x35\xf6\xbe\x4d\x0b\x6c\x5b\xe0\x79\x46\xa5\x5b\x4c\x87\xa3\xcf\x1a\x4f\x6d\x1a\x2c\xa2\x20\xe6\x79\x8b\x8f\x8e\x8d\x3c\xf3\x39\x66\xde\x51\x93\x02\xeb\x69\x8a\x44\x15\xd9\xd0\x56\x47\x54\x84\x37\x63\xa4\x56\x3b\x39\x87\xc9\x4c\x69\xa2\xad\xdd\xa2\x58\xa6\xd6\x88\xc5\x20\x94\xd4\x29\xae\x86\x4f\x5c\xa0\xd1\x25\x1c\x39\x4d\x53\x81\xb9\x65\x73\xf2\x3a\x2e\x86\xca\x40\x31\x13\x46\x6e\xf2\xd1\x59\xaa\x8d\x56\xbb\x6e\xce\xa3\x47\x83\x40\x8e\x99\xc5\x4e\x0c\x8f\xbe\x1d\x6a\x3b\x14\xdc\x0c\x1d\xeb\x17\xba\x0c\x55\xb7\xcb\x94\x08\x2b\x7b\x90\xcb\x6e\xb9\xde\x5e\x26\x97\x9e\x48\x35\xda\x86\x08\xd2\xd0\xbe\x71\x00\x12\x40\x28\xf1\x9e\x59\xad\x41\xd1\xa2\x6d\xc7\x0c\x8b\x62\x62\x5d\x89\x1f\xfb\x09\x98\x2d\x16\x0e\xb5\x1e\x77\x5d\x93\x26\x34\xad\x28\x8c\x6c\x91\x4b\x2f\x3a\xa3\x16\x36\x78\xb6\x8c\xc3\x9c\xcd\x4a\x81\x06\x30\xa8\x15\x1a\x3d\xc3\xba\x09\xb9\x74\x56\x6a\xbf\xc2\x9e\x7a\x1f\x47\x51\xfa\x62\xab\x89\x0a\xce\x43\x9d\x12\x88\x7d\x6b\x8c\x46\x48\xad\x64\xee\x06\xc3\x60\x6a\xd9\x16\x95\xf8\x16\x92\xe2\x72\x76\xbe\x6f\x84\xab\x86\x48\x37\x41\xdd\x93\xa9\xf3\x0a\x08\x97\xd4\xc2\x60\xaf\x79\xb7\x10\xde\xaa\x40\x16\x90\xe2\x16\xc2\x57\x6b\xbb\xdc\xf6\x43\x6e\xfd\xdc\xa2\x28\x96\x68\x6c\xa3\x11\x69\xd4\xd2\xac\x53\xd5\x96\xcd\x4e\xf5\x2b\x13\xb1\x53\x0b\x67\xac\x95\x6a\x83\x92\x1d\x6d\x3c\xc3\xe3\x1c\x15\x2a\xbc\xc9\x18\x5a\x1f\x86\xec\x9a\x31\xd5\xc2\xdb\x15\x8d\x83\x77\xe5\xbf\xc3\x87\x55\xf7\x82\x25\x59\xe1\x26\x35\x1f\x15\x95\x21\xa3\x91\x08\xab\xaa\xb9\x58\x64\x49\x3d\x64\x84\xf9\x51\x4c\x21\xe9\xb6\xf0\x25\x8f\x3d\x45\x3c\x37\xa0\xf2\x9c\xf2\x16\xda\x3e\xa5\x11\x54\xd9\x23\xbb\xac\xbd\xb7\x86\xf8\x0e\x91\x22\xe6\xc5\x8c\xd6\x59\xdd\xdb\xa0\xc8\x00\x5d\x1b\xfd\xdc\x98\xae\xb7\xfd\x5a\x49\xde\x83\x5c\x76\x53\x87\xf6\x72\x5a\xd4\x06\x01\x43\x71\x58\x9b\xde\xf8\xae\x98\x39\x30\x16\xc7\x2a\x08\xca\xb5\x25\xa0\xcd\xc2\xb7\x43\x6e\x35\x90\x33\xa1\x6d\x9a\x9a\x79\x0b\x3f\x00\x98\x73\xa1\x0a\xb8\x41\xd2\x81\xc8\x4e\x72\x08\xd0\xc2\xdd\x08\x9c\x9c\x5a\x2a\x56\x80\xcc\x02\x00\x2f\x9e\x0e\xc3\xb2\xe0\x41\xd0\x4d\xca\x54\x28\x2c\xc2\x63\xd5\x0c\x30\x35\x6e\x2a\x43\x0f\x5c\x9c\xe6\x82\xd5\xd2\x0a\xdd\x4b\x22\x44\x6e\x6c\xe5\x28\xe2\x25\x39\x3c\x51\x53\x36\x58\x8b\x61\xb0\x95\x07\xc5\x78\x2c\xc1\x4b\xe3\xa8\x58\x16\xd4\x27\x58\x13\xed\x38\xec\x67\xe7\xd0\x50\x13\xf5\xa5\x93\xb1\xa4\xd2\x48\xb2\x85\x86\x2b\x8c\x5f\xdc\x62\xc5\xca\xcb\x04\xdc\x98\x74\x57\x1b\xa6\xba\x11\x60\x3e\x70\x2b\xd6\xc0\x33\x84\xa5\xef\x57\x89\xba\x01\xd1\x51\x6f\xa2\x82\x85\xa6\x37\x85\x40\x80\xfa\xb1\x06\x37\x35\xac\x64\x91\xb3\xa4\x3e\x11\x95\xf5\x40\xa7\xe2\x4b\x63\xba\xa8\x55\xdb\xfb\x6e\x4c\x03\xdb\x40\x55\x27\x91\xf4\x65\x54\x66\x32\x6e\x28\x52\xa4\x49\x10\x24\x1c\x48\x3d\x9e\x3d\x86\x3e\xd8\x69\x48\xba\xe9\x20\x71\xd5\x22\x20\x02\xd2\x60\x8b\x44\x95\x2e\x51\xb4\xa1\xb5\x55\x9b\x2e\x8f\xb6\x2e\x18\xd6\x51\xf4\x54\x4f\xd2\x09\x39\x37\xec\xaa\x23\x8a\x42\x5e\x17\x85\x64\x27\x3b\x13\xba\x3d\xc8\x65\x37\x3d\x79\x2f\x47\x2e\x84\x2f\x5d\x20\xad\xd7\x66\xcc\x3d\x6b\x23\x75\x40\xf2\xd6\xc2\xce\xb7\x76\x64\x15\xad\x2a\xc4\x36\x20\x3e\x33\xe1\x32\x54\xb8\x86\x2d\x4a\x76\x70\x90\xb4\x34\x08\x31\x2a\x21\xa0\x5d\x1f\x69\xd3\x76\x05\x4e\x1a\x76\x66\xf2\x5d\xc9\xc3\x90\x12\x9b\x0b\x52\x0b\x9c\x3b\x98\x4d\xd9\x42\x56\x9e\x0c\x9d\x26\xa4\x4d\x81\x68\xea\x11\x1d\x65\xd3\x30\x3e\x0d\x5c\x03\x37\xe8\xb5\xa1\x6a\x16\x32\xc8\x35\x0e\x8e\x56\xc4\x04\xb7\x75\x8b\xdc\x1a\x87\xb5\xad\x4b\x0c\xeb\x0c\x15\x72\x2a\x27\x8b\xa6\x80\x26\xc5\x46\x57\xab\x19\x29\x2a\x43\x62\x35\x0b\x67\x57\x36\x4f\x7d\xa0\xd3\x16\x9d\x20\x68\x25\x7d\xc9\x8c\x62\xc2\x53\xc2\x98\xf7\x0b\x20\xaa\xf4\xd4\xa2\x15\x48\x30\xb8\x66\x01\x98\x76\x19\x75\x8d\xe8\x06\x43\x74\x99\xb6\x50\x3b\xbc\x6c\x30\x68\x0c\x9f\x11\x81\xc9\x50\x30\xf8\xa5\x4e\xaa\x5f\xad\x1b\x69\x69\xc5\x10\x14\xad\x75\x2d\x83\x0d\x03\x4c\x02\x65\x1e\x36\xb0\x49\x93\x25\xd4\xc5\x61\x33\xb7\x5c\x36\x25\x40\x14\xaa\xe0\x10\xcf\x72\x46\xa3\x1c\x67\xd7\xe7\xd8\x61\xee\x85\x72\x43\x96\x4d\x68\x67\x58\xb6\xf0\x03\x20\x23\x87\xd4\xea\x95\x08\xba\x58\x61\x7b\x15\x9d\x59\x6d\x4b\xe6\x45\x6b\xd3\xf2\xce\x18\xd2\x61\xa3\x78\xea\x83\x43\xcc\x91\x64\xf7\xec\xc1\xd8\xad\x02\xb5\x97\xc9\x65\xb4\x69\xee\x40\x18\x5c\x71\x76\xa2\xa6\xf6\xab\x56\x54\xcb\x66\x1e\x43\x85\x43\x6b\xe5\xd8\x63\xd8\xfa\xd5\x36\x41\xd8\x06\x49\x1f\x37\x30\xa2\x92\x40\xe4\x32\x75\x6b\x2c\x2d\x26\x73\xd3\xa0\xc6\xd9\x24\x92\xe1\xe3\xe8\xa9\xf3\x6c\xa1\x70\x01\x9d\x59\xd5\xc4\x49\x83\x72\x98\x68\xd9\x22\x66\xd0\x44\x64\xd3\xc4\xce\x55\x86\x5c\x0c\xcd\xa0\xdb\x3c\xb9\x79\x36\x4a\x79\x2a\xf8\x9a\x94\xec\x55\x97\x81\xee\x12\x9e\x9b\x45\xf6\x76\x8b\x2f\x54\x35\x95\x65\x0d\x4a\x5a\xbb\xde\x48\xc9\x35\x14\x08\x0c\xb2\x1f\x54\x40\x6d\x43\x9a\xc5\xa8\xb1\xc3\xc8\x34\xa0\x26\x9f\x2d\xe8\x1b\xbd\x45\xe5\x2c\x3b\x92\x6a\x59\xb1\xf3\x9a\x93\x3a\x8d\xd1\x4a\x49\xed\x02\x4a\x59\x60\xf6\x00\xf5\x04\x18\xa9\x0a\x89\xc2\x34\x64\xc2\xcb\x16\x11\x2d\x19\xc4\x42\xfc\xd4\x19\xde\xce\x57\xc5\x4e\xb8\xc9\xbe\xe1\xb2\x02\xb8\x88\x5c\x35\xd1\x2d\x8a\x85\x43\xec\xa6\x42\xd6\xb4\x34\x7d\x64\x5b\xa4\xcb\xa5\xed\x16\x6d\x1c\x01\xdc\x75\xd2\xd7\x44\xe0\x3a\x37\x1c\x82\x00\x74\x99\x93\xc0\x40\x55\x4f\xd6\x56\x4d\x20\x0b\xd7\x70\xb8\x96\x2d\xa4\x03\x4c\x16\xc5\x18\x29\xd2\xc2\x81\xa8\x31\x20\x8d\xe5\x64\x67\x33\x54\x3d\x0d\x89\x0e\x94\x09\x00\x70\x8b\x1b\x38\xdb\xc5\x8e\x8c\xd3\x3d\xcd\x46\xbb\xd5\xac\xf7\x32\xb9\xf0\xbe\x90\xc5\x36\x19\x82\xa6\x87\x22\xf3\xda\x0a\x55\x19\xf7\x7e\x11\x63\x27\x92\xa7\x73\xab\xac\x42\x2a\x0e\x73\x17\x03\x2b\x7e\x0b\x83\x32\x5d\x29\x4b\x0a\xb4\x13\x5f\x32\x1b\xc9\xd8\xb7\xbd\x9a\x08\x4a\x23\x5b\xc6\xdc\xac\x65\xed\x03\xd6\x1e\x32\x13\x17\x31\x70\xc9\x68\x37\x6d\x70\xa0\xc8\x6a\x61\xd7\x32\xe6\x57\xc3\x87\xdc\x0a\x80\x9a\x0a\x17\x89\x79\xbf\x42\xda\x2e\x32\x2c\x71\x4c\xe3\x30\xa4\x09\x95\x8c\x7b\x3c\xb9\x79\x03\xcb\x13\x91\x10\x0d\x53\x8b\x75\x13\x6c\xa9\x82\x36\x7d\xbb\xa8\x2c\x07\x23\x80\x2b\x19\x0b\x00\x47\x2f\x93\x9b\xd6\xce\x03\x09\x6b\x57\xd2\x26\x2a\x58\x3b\xaf\xab\x85\x8e\xd3\x00\xb9\x5a\x45\x4e\xae\x84\x1a\xe5\x52\x33\xeb\x95\x8b\x4c\x23\xc2\xc0\xd2\xaf\x6b\x1b\x23\xa0\xeb\x44\xc8\x16\x66\x6d\x01\x82\xb2\xde\x9a\x39\x06\x58\x79\x2d\xed\xda\xd8\x90\x1c\xe1\x49\x85\x4e\xc0\x32\x8f\x76\xaa\xac\xce\x46\xf6\x2c\xd9\x91\x8e\x65\x83\x2a\x22\xc5\x56\x13\x9b\xbc\x8d\x13\x6c\x84\x9f\x8d\xaf\x9a\x75\x93\x03\xa4\x78\x44\x57\x6c\x69\xd1\x79\x4e\x4a\x95\x76\x8c\x31\xc4\x32\x6f\xd1\xdb\x4c\x56\xe4\x31\xe7\xa8\x21\x8b\x04\x61\x51\x68\x70\x42\x13\xeb\x59\x9a\x15\x1b\xe4\xda\xa4\x51\x37\xaa\x59\xe3\xe8\x03\x1f\x65\x07\x10\x57\x7b\x98\x8d\x76\x9b\xec\x74\x2d\xb3\xd1\x97\x8e\x7c\xe8\x83\x8f\xfd\xc6\x8d\xdf\xf1\xbf\xce\xfb\xc9\xf1\x3f\x44\xe4\x3a\xff\xfe\xe2\xaf\xfb\x97\xbd\xf9\x5f\x1f\x9d\x6e\xf8\xaa\xbf\xbd\xfd\x09\xe0\xa3\x3b\xa0\x1f\x39\xe2\x15\xd3\xf5\x0e\xf9\xc1\x0d\x7e\xf6\xca\xeb\xef\xff\xa6\xbf\xf1\x5f\xbe\xc1\x17\xdf\x73\x93\x17\xfe\xd1\x5d\x9f\xf7\xd7\x1f\x7b\xec\x6f\x9f\xf5\xe0\xd7\x7d\x73\x07\x74\xbf\xdf\xfc\xfc\x11\x8f\xb9\xd5\x33\x9f\x3b\x3c\xfd\xd6\xe8\x67\xf7\x7e\xdf\xc5\x67\x5f\xff\xb0\xff\xf8\xaa\x3f\xfa\x47\xef\xcb\xdf\xba\xd9\xf7\xbe\x73\xa3\x37\xee\x80\x9e\xf3\x43\xf4\xbd\xb7\xdc\xef\x51\x2f\x56\x0f\xb8\xd2\x7e\xe8\xa7\xdf\x3a\xe5\xfb\xfb\xc2\x67\xfc\xd7\x1f\x9d\xfd\xd4\x67\x0c\xfb\x3e\xf2\xca\xb7\xdf\x7a\xe7\x38\xb0\x3f\xbe\xe1\x25\xf1\x37\xe7\x7f\xf2\x0b\xb7\xc8\xb7\xfa\xdc\x61\xb7\xfa\xf8\xcd\x3e\x75\xe0\xb9\x6f\x42\x37\xbe\xcf\x1b\x1e\x7e\xfe\x03\x4e\xb9\xf0\xd8\x0b\x5f\xb1\x03\xfa\xcb\x3b\xde\xef\xba\x0f\x7f\x8e\x05\xbf\x7d\xd7\x01\x17\xbf\xe3\xc5\xdf\xfd\xe2\xe1\x6f\x79\xc5\x2f\x1f\xf2\x9c\x0b\x0f\xde\xb7\xbe\x5a\x3e\xf1\x05\xfb\x7e\x71\x07\xf4\xc8\x5b\xdf\xe4\x45\xdf\xfe\xcb\xb3\x9f\x0a\xbf\x79\xcf\x07\xff\xc3\x73\x8f\xbf\xde\x7a\xf2\xf1\x4f\x7c\xe9\xd7\xee\xf5\x16\x79\x9d\xaf\xfc\x43\xbc\xe4\xc7\x27\xef\x80\xbe\xd8\x1d\x74\x70\x7f\x76\xbc\xf7\x1f\x7e\xe2\xc7\x37\x7a\xdc\x23\xef\x79\xbd\x93\x9e\x72\xf3\x4f\x3f\xdd\x9c\xf0\x47\xcf\x89\xe7\x7c\xea\xed\x47\x3e\xe3\xb3\xd7\x98\x8d\x76\x5b\xd5\xbd\x2c\x7c\xa1\x8c\xf2\x3c\x89\x9a\x16\x11\x17\x53\xab\x82\x21\x75\x03\x70\xba\x6b\x64\x1c\xeb\x58\xdc\xda\xd7\xd6\x53\xac\x1c\x19\x96\x29\x00\xb5\x45\x37\xd5\x3a\xae\x83\x20\x2e\x90\x65\x05\xb9\x9b\xe9\x32\xf5\x6c\x00\x6a\x02\x1d\x09\xcb\xc2\x04\xca\x11\x3a\x92\xf4\x94\xa1\xf2\xc6\x28\xbd\x45\x23\x31\x75\x3d\xb3\xdc\x93\x49\xf4\x4d\x89\x53\xe6\x64\x76\x11\xdb\xa1\x46\x40\x9b\xbe\xf6\x75\xed\x30\xc0\x65\x1d\xdb\x06\x74\x6e\xac\xb1\x63\x5b\xf0\xc9\xc2\xab\x11\xd1\x84\x2e\x33\x46\xba\xac\x7a\xd3\xb4\x30\x9a\x3e\x50\x8b\xf8\xc8\x67\xdc\x22\xa5\x86\xd6\xab\x16\x30\x59\x07\x94\xe3\x16\xdf\x5c\x10\x05\x86\xb0\x9b\xdb\x95\x70\x3a\xac\x73\x6c\xae\xda\x14\x23\x13\x52\xaf\x6e\xee\xa1\x53\x31\x37\xa9\x87\x2d\x06\x92\xbb\x29\x83\x2d\x1c\x1a\xb4\x51\x35\x8e\x76\xc4\xc0\x4a\x35\x74\x1c\xd1\x39\x76\xe3\xc0\x12\x20\xd3\x34\x0f\x7c\xc8\xd6\x37\x0b\x5e\x07\x5a\x98\x0b\x04\x4d\xde\x6e\x21\xcb\xa6\x3e\x29\xaa\x64\xee\xb0\x88\x32\x70\x12\x74\x51\x3e\xb5\xc5\xb0\xec\x60\xb2\x2b\x6e\x4d\xa2\xd6\x17\x8a\xb3\x81\xbc\x89\x79\x13\x6b\xad\xb5\x15\x7a\xa6\x51\x2f\xe6\xb5\x9a\x0e\xd2\x65\x31\xeb\x40\x14\xab\x4b\xeb\x56\x6c\x74\x18\x48\x44\x4b\xa5\xa3\xa2\x50\xb6\xad\x9f\xf6\x34\x1b\xed\xc6\xc3\x7b\xbb\x64\x27\xa1\xf0\xd1\x65\x16\x96\x66\x92\xbd\xab\x90\xb5\x83\xe6\x36\x24\xe5\x11\x58\x71\x91\x21\xf9\xce\x43\x14\x68\x76\x18\xaa\x10\x36\x71\x03\x4f\x72\x0e\xb6\x14\xa9\x75\x3f\x50\x5a\x64\xb0\xb9\x0b\x58\xe9\xea\x1b\xe0\x13\x86\x76\x00\x2e\x34\xd3\x0c\x18\x65\x8b\x0b\x03\xdd\x40\xec\x21\xa5\xf1\x18\xf7\x7d\x97\xe4\xe0\x7b\xe8\xa0\x87\xac\xd6\x3a\xa4\x45\x0d\x72\x6e\x48\x47\x82\x9a\xe3\xda\xe2\xde\xe2\x89\x93\xa2\xeb\x26\x2d\xbc\x5d\xe6\xf3\x20\xb5\x62\x72\x5e\x35\xec\xb5\x0c\x69\x5d\x0d\x13\x4d\x37\x43\xbc\x9a\x52\xbc\xe5\x43\x0f\x88\x02\x7d\xd7\xf8\x05\x66\xb2\xc5\x7c\x00\xe6\x73\x27\x92\x58\xf4\xda\x0c\x3d\x51\x5e\x3b\xc8\x5d\x6d\x17\x74\x55\xd0\xec\xe8\xe2\x60\xed\xd7\x89\x4a\xd5\xd0\x5e\x73\x32\xf8\x4d\xfc\x94\xa9\x8f\xae\x68\x38\x37\x93\x24\x74\x9a\xe6\x66\x04\x95\x75\x6d\x8e\x40\x4d\xb9\xe5\x13\x53\xc8\x03\x3c\xc5\xac\x3a\x3c\x4d\x7d\x2f\xec\x16\xdd\x97\x16\x3b\xdf\xc5\x34\x23\x1c\xe6\x06\x31\xd4\xd4\x59\x38\x40\x9a\xae\xd0\xc9\x91\xbc\x60\x54\xda\x38\x42\x35\xaf\x89\xa2\x51\x5a\x68\xb7\xa8\xf9\x78\x44\x0b\xb2\xde\x08\x25\x53\x2b\x78\x07\x21\x19\x47\x2a\x6c\x6e\x63\x80\xa6\xc9\xbc\x1d\x82\x15\xb5\x95\xc0\x31\x99\x54\x06\x3b\xca\xda\x57\x93\xcb\x6e\x91\xdb\x5e\x26\x17\xe5\xdb\x06\x8d\x66\xe8\xc7\x80\x7a\x0d\x65\xa1\xc3\xa4\xa5\x0a\x2a\x13\x8f\x6a\xaf\x23\x42\x5c\xc1\x60\xb9\x1a\x31\x6e\xbb\x2e\x6d\x32\x12\x2a\x74\x0c\xaf\xb6\x91\x02\x2d\x82\xb4\xb1\x95\x9a\x94\x49\xc0\xd1\x43\x36\x4c\xa1\x4f\x6c\x6d\xf4\x32\xad\x1d\x1b\x33\xa3\x68\xce\x96\x6c\xf1\x85\x82\x19\x48\xdd\xe8\xde\x0a\x05\x19\x98\x78\xe3\x47\x38\x77\x1d\x9d\xfc\xd4\xc1\x12\x9d\x9d\x14\xa3\xb5\x64\xb5\xb4\x3d\x09\x15\x56\xb6\x45\x3b\x8e\x33\xb6\x74\x52\xe8\x61\x68\xeb\xd2\xe6\x4c\x29\x83\x7c\x1c\xe7\x61\xee\xe5\x1c\xdb\x39\xcd\xa3\x04\xbe\x8b\x0b\x17\x04\x8d\x0d\x37\x5b\x28\xc9\x54\x4e\x59\xf5\x6d\x9a\xa5\xd0\xb4\x52\xa4\x10\x10\x48\x58\x1b\x2a\x8f\x8b\x51\x16\xf5\xa9\xcf\x1c\xe2\x99\x38\x91\x00\xa9\x3d\xe1\x5b\xe4\xa6\xaa\x8c\x9a\x77\xc5\xaf\x2c\x26\x94\x14\x59\x09\x1a\x65\xa7\xc7\x51\x8e\xd2\xd1\x9e\x66\xca\x69\xe3\xc8\x42\xc0\x18\x1b\x1b\x67\xda\x6c\x71\xac\xb9\x02\xa2\xd4\xde\x5a\x4a\x58\xa3\xc8\x58\xaa\x8e\x4b\x33\xbb\xbe\x9a\xd1\x15\x49\xe2\x18\x5b\x0e\xd4\xcc\xfd\xe0\x46\xe4\xf8\xb4\x49\xdf\x63\xd3\x01\x1b\xab\x72\x7c\xc2\x7a\xfa\x6f\x9b\xd7\x0c\xb1\xec\x39\xea\xa0\x5d\x5d\xbf\xb4\x21\xeb\xda\x75\x23\x74\xac\x92\x81\x76\x8c\xae\x7b\x90\xcb\x6e\xb9\xde\x5e\x26\x97\x62\x3b\xd1\x31\x41\x5b\xcb\x03\xe8\xc8\x38\x93\xbe\x2f\x6c\xed\x4b\x51\x1c\x49\xde\x8e\x0b\xe9\x34\xc8\xf3\xcc\x78\x8c\xe3\xd0\x24\x86\xb6\x38\x50\x82\x52\x41\xc7\x46\x35\x68\x9c\xe6\x14\x51\x1f\x9d\x72\x4a\xf5\x7c\xe8\x93\x81\xbe\x64\xec\xd1\x62\xb1\xeb\x29\x54\x61\x40\x96\x6f\xf1\xb5\xc6\x0b\x47\x9d\x00\x33\x18\x71\x92\xa2\x75\xb5\xb5\xd8\x49\x3d\x26\x15\xa2\x5e\x47\xdf\xaf\x6d\x6b\x66\xc6\x3b\x96\xb2\xd4\xa1\x4c\x61\x0b\x55\x5d\x0d\x4c\xf6\x03\x9d\x3a\x8c\x0b\xef\x68\x0d\x6c\x34\xad\x12\x4b\x17\x7d\x8e\xb3\x9c\x48\xce\xb0\xe9\x70\x85\x7d\xa5\xbc\x69\x47\xdf\x6c\x21\x7c\x49\x3e\xc0\x84\x51\xcf\x78\x8f\x9b\x5c\x65\x03\xea\xec\xc6\x2e\x59\xda\xae\x7d\xd3\x41\x85\x8d\xca\x39\xe8\x0e\x88\xb5\xa1\x86\xb2\x2d\xc6\xa6\x91\x58\x7c\xad\x99\x4e\xbe\x13\x13\x77\xd9\xc8\x76\xae\xc0\xae\xd9\x8c\xc5\xae\x9d\xe4\x8e\x30\xe7\xd6\x06\xe2\x9c\x26\x98\x33\x84\x71\x0b\xfb\x17\xcb\x51\xc4\xa5\x81\x93\x77\xb6\xac\xd8\x56\xbc\x8e\x6e\x01\xce\xb3\x61\x48\xc6\x22\x10\x68\x37\xf7\xbc\x35\x6d\x1d\x27\x37\xf7\xe3\xb4\x45\xfc\xd4\x37\xfd\x5a\x05\x42\x04\x0e\x50\xcb\xd4\x1a\x15\xab\xa9\x08\x8c\x06\x52\x83\xd5\xbc\x76\x65\xed\x8c\xf0\x85\x2d\x1e\x8a\xa8\xb4\x19\xf6\x20\x97\xdd\xd4\xa1\xbd\xac\xb9\x70\x32\xcc\x9c\x87\xac\x45\xe9\x16\x65\x86\xc8\x85\x9c\xd5\x24\x59\xd7\x79\x31\x0c\x76\xf4\xd6\xe4\xc9\x20\xa4\xe4\x5c\x42\xe8\xd5\xb4\x45\xf7\x43\x67\xa9\xa4\x9a\x79\x49\xed\x5a\x8d\x6e\x7c\x6d\x7a\xd0\x8e\xbd\x86\x08\xb4\x4c\xc2\xa5\x53\x6d\x0a\x63\x87\x12\x07\x93\x36\x2d\xd8\x82\x5c\x68\x6c\x9a\x69\x61\x4d\xdf\x3b\x1d\xc3\x62\x54\xa0\xbd\x31\x1c\x2c\xb4\x35\x03\x65\x43\x1d\x41\xab\x3b\x46\xbb\x94\x63\xad\xbe\x4f\x3e\x6c\x51\xbe\x5c\x38\xe4\x4d\x19\x13\x99\x08\x84\x14\x18\xb5\x08\xd6\x87\xa0\x72\x2a\x83\x74\xc8\x21\xe5\x0a\x19\x23\xf3\x93\x34\xc2\x4b\xa9\xb6\xb0\x3c\x91\x71\xe8\xcb\x0c\x16\xb8\x4c\x0c\xa5\x3c\x8c\xb8\xa1\x90\x0a\x69\x11\xa3\x48\xaf\xa2\xc3\x0d\x01\xbc\xa7\x75\x58\xb5\x64\x15\x63\x69\xb7\xb0\x8c\xe3\x6c\x33\x62\x6d\xe4\x7d\x76\x3d\x1f\xb8\x43\xc3\xd8\x0a\x59\xa6\x66\xe4\x34\xf3\x14\x92\x71\x70\x22\x19\x2d\x39\xfa\x55\xc1\x79\x93\x89\x0d\x53\x18\x49\xe0\x0a\xf9\x89\xa9\x41\x29\xbf\xda\x65\x2a\x8d\xc1\x30\x61\x17\x16\xe6\x81\x59\x22\x95\x3d\x2b\xb2\xf6\x23\xb4\x99\x99\x2d\xfc\x94\x15\xf4\x20\xb7\xb5\x6d\x51\xd6\x0d\xef\xe2\xda\xe1\x65\xb2\xb1\x0b\xb2\xc9\x61\xa8\x1c\x2f\x4a\x81\xac\x17\xee\xe5\x1c\xc0\xd4\xe1\x1d\xf6\xaf\xab\xc9\x65\x37\x3d\x79\x2f\x93\xcb\xb0\xf4\xd6\x12\x4b\x97\x21\x26\x08\xe5\xaa\x79\xa1\x96\xd2\x25\x19\x55\xf9\x92\x98\x1d\x75\x98\xd7\x2e\xe4\xac\xe0\xba\x58\x5c\xca\x16\x91\x8b\x58\x64\x5b\x54\x40\x3c\xc0\xe8\xda\x28\x41\x3f\x0c\x3a\xa7\xbe\xd5\x8b\x83\x6e\x58\x70\xb7\x46\xd8\x8b\xbe\x13\x6b\x2a\x96\x79\xbb\x85\xce\x40\x63\xaf\x67\xe5\xc5\xaa\x32\xac\x12\xd6\x25\x82\x00\x43\x9e\xa7\x71\xc6\x95\xa1\x11\xf2\xe8\x52\x5a\x95\x2e\x31\x51\x8d\xe7\x5e\xc6\x2d\xe2\x27\xb2\x48\x03\x59\x1b\xe1\x92\xb1\xc0\x46\x69\xd5\x42\x32\x2c\x28\x56\x32\x16\xb0\x2c\x58\x03\xc3\x40\x53\xe6\x3e\x36\x0b\xef\xac\xd8\xc4\xf1\x8f\xd6\xe8\xd6\x56\xb8\x11\x36\x68\x2e\xcd\x5a\x00\x9e\x06\x2c\x5d\x28\x2d\x09\x95\x31\xb7\x06\xd4\xba\x21\xd7\x91\x26\xbc\x42\x24\xcb\x16\x69\x91\x24\x7d\x87\x27\x19\x5a\x0b\x3b\xea\xd3\x5c\x02\x0d\x0a\xbb\x1e\xad\x71\xc1\x38\x79\x97\xac\xab\x5c\x59\x66\x89\xa9\x6d\x5e\x85\xde\x42\x8b\xf3\x5a\x49\x0b\x96\x05\xa0\x29\x28\x39\x2d\x61\x6e\x01\x5d\xc0\x82\xe7\xa5\x83\x7c\xf2\xda\x6b\xb2\x58\x00\xb9\x5b\xfb\x8e\x06\xb5\x4c\x5b\x58\x9e\xa0\xf0\x82\x3a\xb3\xaa\x49\x73\x4e\x97\xe4\x67\xba\x58\xd8\x75\xab\x44\xbe\x0d\xc8\x12\x33\x2e\x8b\x9a\x93\xa9\x93\x47\x44\xe8\x04\xf6\x9c\x26\xbd\x5b\x05\x6a\x2f\x93\xcb\x52\x07\xa4\x84\x26\x15\x2c\x7d\x30\xbc\x21\xf4\x2a\x5a\x0e\x4c\x42\x3d\x89\xa6\x45\x94\xa3\xdc\xe8\x64\x63\x54\x73\x9c\xc5\xc2\xb6\x70\xac\x11\x80\xe3\x40\x82\x63\x26\xcd\x0d\x00\x66\x88\xa6\xa5\x7d\xb2\xbc\x97\xb9\x5a\xd8\x8f\x68\xd1\x30\xb1\x5a\x3d\x9a\xba\xde\xe8\x60\xc0\x16\x66\xa3\x09\x60\xa1\x62\xe1\x6d\x05\xcd\x5a\xad\x90\xaa\x5b\x2c\xed\x69\xb3\xe4\x44\xd6\xb8\x4e\x28\xd9\x5c\x2a\x72\xad\xad\x4e\x28\xd6\xb1\x2d\x1a\xa1\x81\x97\x72\x71\xd2\x02\x3b\x2c\xb8\x2e\x62\x1c\x5d\x97\xe6\x29\x0a\x11\x67\x3f\x2a\xd6\xf9\x76\xa0\xb5\x85\x2e\x76\xe3\x3a\xb7\x63\xad\x5b\xd8\xa4\xbd\x4d\xd2\x9b\xd9\xa3\x99\xb3\x65\x64\x73\xe3\x0b\x86\x7c\xac\x48\xe9\x16\x07\x8d\xd1\x60\x57\xbc\x72\xda\x0e\x65\x52\x82\x52\xbc\xc5\x04\x65\x3a\x0c\x4c\x92\x61\xa9\x4a\x4f\xa6\x19\x44\x83\xc2\x20\xda\x46\x72\xe7\x4a\xd2\x9d\x1b\x75\x60\x71\x35\xc1\xd1\x80\x6c\x6f\x24\x6f\xc2\x16\x74\x5f\x82\x20\xcd\x54\x92\x0f\xa1\xc6\x15\xb7\x2c\xe3\xd0\x46\xd8\xc1\xd5\xc9\x58\x28\xe2\x4b\x59\x3a\x5c\x27\x34\x60\x67\x62\x3f\x46\xb5\x45\xb3\x5b\xa7\xc7\x6e\x9e\x59\x6b\x73\xa8\x7a\x5c\x8d\x30\xa5\x45\xd4\x34\x63\x91\x21\xb7\x1d\x37\xde\x4c\xab\xc4\xcd\xa0\x17\xd5\xa2\xd4\x23\xb2\xe7\x4c\xc6\xdd\x6a\xd6\x7b\x59\x73\x91\xa9\xc2\xa9\x8e\xa1\x8e\x63\x17\x01\x05\x65\xf0\x6d\x9e\x67\x9b\x67\x22\x66\x59\x98\x6a\x40\xa6\x22\xb6\x2d\xaa\x03\x9a\x66\x0c\xeb\x16\x41\x78\x0d\x80\x8e\x0d\x03\xc8\xc0\xae\x85\x64\x31\x73\x5f\xa6\xc6\x73\x41\xa6\xdc\x2d\x53\x8f\xe6\x79\x1d\x03\x71\xad\x34\x7d\x18\x1b\x5e\xcd\x16\xf3\x7a\xf9\x20\x0b\x69\x3a\xc1\xad\x9c\x73\x27\x5d\x1d\x96\x01\x49\x87\x2a\xe9\xd8\x24\xba\x96\x65\x2e\x29\xaa\x83\x6e\xe9\xc0\x2c\xaa\xa0\xd9\x20\x15\x20\xc6\x88\xd6\xb5\x7e\xc5\xa3\xe0\xd0\x75\xcc\x0b\x9b\x47\x39\x88\x51\xaa\xa5\x16\x38\xf6\x75\xaa\x35\xd7\xa5\x6b\x97\xbc\x68\x4c\x97\xb8\x41\xe4\x42\xb4\x44\x35\xfb\x9c\x9a\xa6\x44\x45\xbb\xa1\x29\xb4\xa7\xc3\x62\x0c\xd0\xa5\xef\xe7\xa6\x65\x3d\x9e\x95\x21\xb0\xeb\x83\x72\xbd\x8e\x65\x8b\xc9\xda\x8b\xb7\x31\x77\x33\x35\x81\x13\x1f\x46\x77\x15\xdb\x59\x99\x19\xb7\xfd\xc8\xba\x21\xeb\x7e\x98\x29\x90\x89\x63\x80\x4c\x59\x4d\x6e\xb6\xb0\xf9\x40\x8b\x4a\x1d\xba\x95\xb4\x26\x0d\x93\x09\x35\x0d\x45\x66\x5f\xeb\xd2\x39\x44\x6a\x95\x2d\x61\x3e\xba\x79\x29\x5d\xe7\x9d\x20\xeb\x16\x45\x0f\x3a\xcf\x2d\x5e\xb5\xc2\x36\xf1\xbe\x8f\x0d\x21\xb1\x2e\xa4\xf1\x86\x4b\x36\xa7\xd1\x24\x86\xb1\xb6\x9c\x63\x32\x25\xa3\xf5\xca\xb0\xc9\x7b\x98\x8d\x76\xbb\x1b\xee\x5a\x66\xa3\x9b\x3c\xf8\x23\xe7\xf0\x8f\x9d\xf1\xae\xc7\x7f\xf7\xb8\x0f\x7e\xf2\x0b\x97\xfe\xf5\x79\x8f\xbd\xfd\x77\xaf\x73\xf3\x1b\x82\xe7\xbf\xe1\x5e\x1f\x7c\x69\xfb\xf0\x97\xee\x80\xfe\xc7\x0b\x9f\x79\x16\x38\xfc\xe3\x92\xff\xe7\xe5\x17\x7f\xfa\x2f\xc5\x1f\x7e\xec\x90\x7b\xff\xe6\xa5\xc7\xff\x9f\x2b\x4e\x7e\xc0\xe3\xee\xfe\xd6\xdf\xdd\x7e\xe7\xad\x73\x27\x9d\x74\xc3\x57\xbc\xfc\x82\xb3\x81\x59\x0e\x3a\x60\xbf\xd3\xbe\xfd\xb8\xc7\x1e\xf7\x92\xdb\xbc\xed\xed\x3f\x3e\xfd\x8e\xe7\x9f\x7c\xe2\x27\x0f\xf9\xed\xce\x9b\x10\xbf\x26\x6e\xf9\x9e\x43\x7f\xfb\xf2\xf2\xb0\xc3\xef\xfb\x30\xeb\xa6\xb7\x9d\x73\x8b\xfb\xdf\xf2\xcb\x7f\xf8\x94\x03\x3f\xfd\x5f\x37\x30\x37\x79\xee\xaf\xe7\x1d\xd0\xcf\xbd\xab\x3d\xef\xd5\x3f\x7b\xd8\xd7\xfe\xf9\x8f\xdf\xf3\xa9\x2b\x0e\x78\xd3\x1f\xfe\xe0\x03\x37\xb8\xfc\xf6\x4f\x7f\xb8\xfd\xeb\x57\x5f\x74\xd4\xdf\x3e\xfb\xec\xbb\xee\xbc\xe0\xf1\x45\xcf\xbe\xf0\xd6\x97\xae\xcf\xfa\xdd\x69\x4f\x4c\xb7\x93\x4f\xba\xef\xdd\xf7\xbf\xfc\x05\x97\x9d\xf5\x81\x5b\x1d\xf3\xc9\x3b\x7c\x4a\xbe\xf6\x1e\xf7\xdf\x79\xf9\xe1\x4b\x8f\xfa\xe1\x45\x3f\x3b\xf6\x65\x67\xbe\xf6\xd6\x7f\x72\xfc\x21\xaa\xff\x8b\x67\xdf\xfb\xf5\xdf\xbd\x6c\xdf\xcf\xb8\x5f\xbc\xe5\x78\x78\x9f\xfe\x53\x3b\x6f\x98\xbc\xb9\x7e\xfa\xdb\xde\x20\x2e\x79\xe6\xad\xce\xbf\xf9\xf1\x27\xdd\xd7\x99\x03\xc6\x74\xde\x7e\x87\xbc\xec\x94\xeb\xfa\xc7\x1d\xf9\xf8\x47\xef\x77\x8d\xd9\x68\xb7\x55\xdd\xdb\xc2\xd7\x50\xd2\x58\xa9\x1b\x1d\x36\x1c\xf2\xcc\xb9\x53\xa4\xda\x56\x42\x95\xb5\xcd\x8b\x55\xb1\x20\x4e\x70\x9b\x64\x8b\x25\xce\x74\xda\xc2\xe6\xd3\xb4\x1a\x87\x8a\xe7\x38\x20\x6f\x84\x5f\x74\x9f\xf3\x92\x3c\x61\xaa\x94\xea\x2c\x27\x62\x5e\xb1\x09\x22\x4c\x86\xaa\xaa\x66\x40\xb6\x90\x9c\x46\x68\xa2\x2f\xa1\x06\x87\x00\x6a\x4a\xa7\xba\xb8\xea\x11\x93\xb8\x8e\xbd\x48\x84\x8a\xa2\x53\xaf\x07\xd4\x35\x20\x55\xe8\xc6\x26\x6e\xe1\x12\x5f\xb3\x83\x5e\x7b\x08\xd3\xb8\x96\x19\x60\x29\xa5\xe3\x72\x40\xa2\x5f\x44\xe9\x7d\x34\x22\x38\xdd\xb2\x49\x55\x3b\xc0\x65\xc4\xa1\x6e\x61\x6d\x69\x2d\x1c\xa0\xe6\xd8\x81\x96\x98\x92\xe7\x6e\x6c\x4d\x99\x26\xe1\x25\xad\xbe\xa2\x85\x82\xd8\x60\x5b\x84\x58\xa6\x84\x94\xae\xed\x16\x0d\x52\xb4\xb4\x0d\x01\x15\x91\x51\x39\xee\x17\x43\x40\x92\x8b\xaf\xd9\x72\x5d\x4d\x0b\x38\x43\xdc\x0f\x03\xc7\xd4\x77\x2d\x8f\x04\xf1\x38\x6f\x21\x7c\x05\x49\x78\x17\xfc\xb0\xce\x43\x13\x98\x42\x8d\xeb\x61\x55\xc3\x32\xe5\x71\xe6\x42\x15\x17\x6c\x74\x02\x04\xea\x5d\xa4\x0a\xe1\x76\x13\xfb\x17\x6e\x93\x9a\x17\x29\xfd\x44\x42\xd2\xa8\xaa\xae\xaf\x81\x72\xc9\x89\x46\xd3\x34\x66\x9e\x75\x6e\x66\xe9\xac\xb7\x86\x0e\x3c\x45\xc3\xf7\x08\x1f\x77\xe3\xe1\xbd\x4c\x2e\x25\x33\xd8\xb2\xdc\x2a\x8c\x89\x41\x83\x5e\x0d\x8b\x13\xd6\x2d\xa3\x26\xcf\xae\x3a\xc7\x86\x39\x53\x33\xcc\x22\xe7\x0e\x84\x88\xd4\x06\xf9\x18\x71\x94\x10\x49\x5d\xbb\x74\xd2\x74\x2a\xc1\xe0\xdd\x20\x40\x65\x21\x91\xa2\xac\xae\x2a\x60\x59\x6d\x31\x75\x9a\x52\x14\x8b\x1f\x37\x69\x78\xf0\x02\x4e\x6b\xb2\xa0\xef\x80\xc6\x4d\xc7\x57\xd8\xa7\xce\xf7\x93\x45\x5d\x1d\x86\xd8\x0f\xb8\x9f\xd7\x79\xc6\x31\x34\xc5\x06\xdb\xe4\x2d\x42\x26\x6a\x5a\x34\x57\xc0\x50\x5b\x92\xea\x82\x71\xd0\x86\xa0\x7a\x2d\xca\x2a\x8b\x1b\x87\x41\xcf\x1c\x2d\x7c\x8a\xc5\x12\x86\x00\x6c\x14\xdb\x44\x55\xa7\x94\x4d\xb6\x37\x8d\x94\xab\xe0\x03\xf4\x0e\xe4\x56\x46\x10\x10\xf5\x79\x5c\x75\xe8\x7a\xd3\x59\x7e\x55\x90\x5f\x60\x5f\x27\xa7\xb6\x98\x52\x20\x34\x85\xa4\xc3\x89\x0f\x20\xf4\x4d\x1d\x98\x85\x6d\x60\xc9\x10\x27\xe4\xc0\x0d\x5f\xe2\x92\x3d\x2b\x8a\xc5\x05\x03\xef\xf3\xb8\xc9\x65\x6e\x54\x0e\x2e\x50\xda\x6b\x58\xa5\x27\x81\x81\x40\xd7\x76\x50\x01\x30\xcb\x9b\xd4\x32\xa4\xa2\xb1\x62\x10\xcb\x5a\x85\x57\x30\xb6\x75\x8b\x09\xc4\xca\xd0\x0e\x9b\x8a\xc7\x45\x71\x61\x25\x97\x49\x91\xe0\xa3\x04\x60\x0e\xa4\x72\x41\xec\x14\xfd\x48\xdb\xc8\x47\x55\xf9\x84\x21\xd3\x7b\x90\xcb\x6e\x91\xdb\x5e\x26\x97\xb1\x1a\x2f\xbd\x76\x3e\x56\xa5\xc8\x0a\xb0\xa8\x06\xcc\xc5\x8f\xbe\xf1\x58\xd0\x98\x15\x2e\x24\x8c\xbe\x6d\xb1\x6e\xcd\x52\x8d\xde\xa2\xe2\xea\xa0\xcf\x96\xf6\x51\xa6\xe1\xff\x5e\x7d\x5a\xa7\x61\xad\x66\x04\x36\xb6\x9d\x5c\x67\xab\xe2\xdc\xc7\x79\x1d\x1b\x21\x0c\xe3\x0a\x6e\x91\x83\xd0\x48\x71\x9e\xfa\xb5\x76\x83\x4d\xc5\xc4\x1a\x57\xa0\x63\x70\x0d\xa5\xbc\x60\xa3\x1a\xb9\x0a\x23\x42\x17\x0d\xf0\x5d\x37\x67\x34\x98\x0d\xdc\x7b\xb4\x9a\x39\xc1\x71\x49\xb9\xac\x73\x9c\xfb\xa0\x58\x99\x79\x4d\x83\xe3\xbe\xc8\x69\x29\x6c\x84\x62\x6c\x3a\xeb\xba\xc2\xd2\xa2\x85\x0b\x9b\x14\x51\x23\xd1\x2e\x37\x20\xb1\x41\x23\xcb\x86\x45\xd5\x09\xf1\x6a\x2d\xa0\xa6\x95\x7d\x3f\xc4\xa9\x40\x21\xb8\x58\x14\xa0\xc3\xca\x9b\x4d\xba\x2f\x4d\x37\x25\x1c\x61\x9c\x67\xcd\x61\x29\x6b\xaf\x9b\x66\x11\xc3\xec\x22\x8c\xfd\x62\x9a\xd5\x20\x65\x47\x36\xf8\x40\x91\x16\xb0\x34\x71\x8b\xf8\x49\x3a\xdc\x2c\xa5\x83\x33\xe5\x9d\x0a\xb3\x08\xce\xae\x69\x9a\xdd\x92\x27\x3e\x8d\xb9\x80\x3a\xf5\x91\x2f\x60\xc9\x26\xd7\x21\x31\xa7\xb7\x98\xfe\x55\x70\x22\x7c\x98\xca\x58\xc5\x2c\x62\xd1\xce\x78\x0d\x9a\xdc\x37\x2d\xad\x7d\x6f\x8d\x53\xa6\xc7\xc2\x65\x31\x4d\x49\x52\x96\x3b\x82\xf7\x20\x97\xdd\x72\xbd\xbd\x3d\x7c\xa4\x89\xbd\x86\x36\xe3\x9e\xa4\xbe\x57\x6b\x1d\xb2\x5b\x3a\x1f\xd5\x94\x22\x03\x23\x1a\x79\xa3\x7a\xd2\x76\xa8\x19\x06\xea\x33\x52\x76\x0b\xc5\xb0\x6a\x58\x26\xcb\x8d\x03\x93\x5a\x2d\xc6\x62\xf6\x34\x4f\xc6\xa9\x52\x40\x97\x98\xad\x26\x22\x19\x94\x6c\xfb\x71\x9a\x6d\x98\x18\xd8\xa2\x34\x03\x9b\x84\xd9\x34\x10\x1e\x86\x1c\x52\xb5\x29\x10\xd3\x20\xbb\x88\x30\x2c\x2e\x77\xae\xc4\xbe\x01\x56\x35\xa0\xe1\xb8\x64\xbe\xda\xb0\x45\x97\xdd\x6a\x80\x94\x69\x58\x9a\x79\x29\x6b\xee\xd5\x2a\x47\x40\x13\xc4\xa9\xad\x02\xb6\xd4\x0f\x20\x16\xbb\x42\x80\x84\xcd\x52\xe2\x65\xd8\xa2\x64\x47\x1a\x3a\xf6\x58\xd4\x3a\x03\xdc\xd0\x35\x4d\x70\xc1\x9e\x88\x04\x67\x3c\xba\xca\xb8\xc3\xfa\xaa\xe8\x61\xa4\x70\x5c\x6c\xdf\x35\x8a\x4c\x5b\xc4\x0c\x2e\x0e\x9d\x00\xfd\xe2\x87\xc0\x3a\x3e\x34\x61\xd4\x8c\xf1\xd5\xa5\x01\x0e\x80\x74\xa8\x9f\xc5\xb0\x36\x10\xc4\x0a\x61\xca\x3d\x6e\xd8\x16\x52\xe4\x1c\x07\xd9\x56\x52\x8c\xe9\xa6\x16\xb9\x95\x00\x12\xfb\x31\xad\x0b\x9f\x69\x83\x6d\x0b\xdb\x3a\x75\x5d\x63\x50\x26\x5c\x55\xa2\x27\xb3\xc5\xdc\x08\xdd\x62\x96\x5b\x0c\x61\x63\x5b\x9e\x00\xf6\x9d\xd2\xc1\xb6\x50\xaa\xb9\x6d\x42\x97\x7c\x22\xcc\xda\x46\xc0\x86\x69\xdc\xac\xac\xad\x70\x0f\x72\xd9\x4d\x1d\xda\xcb\xaa\x7a\x53\x59\x4a\x39\x8c\x65\x59\x6a\x9f\x25\xa8\x74\x6e\xed\x1c\x8b\xb0\x00\xcc\x4d\x59\x08\x95\x2b\x28\x69\x12\x4e\x60\x28\xe5\xdc\xaa\x2d\xd4\x53\x33\xb7\xb3\x98\x2a\x1c\xb3\x19\x60\x4f\xc2\x48\x38\x93\x63\xec\x8c\x31\x0b\xe3\x80\xb0\xea\x10\x4f\x28\x68\xab\x74\x17\xa4\x91\x9b\xf4\xc4\x37\x73\xcd\x7c\xae\xc8\x60\x9a\x9a\x51\x0a\xd3\x31\x37\xa5\x89\x97\xa5\x86\x02\xe7\x8e\x61\xcb\xf5\x10\x72\x21\x80\x24\x2f\x33\xd9\xa2\xd9\x8d\xf4\xd2\x62\x31\x2a\xd0\xa8\x36\xe6\xc5\x0e\x2e\xb1\x25\x5b\x97\xe8\x02\xb2\x96\x69\x86\x1e\xbb\xbe\x1d\x83\x1a\x6d\x97\x24\x99\xa9\xda\xc2\xda\x12\x99\xea\x27\xda\xa2\x81\x2e\x00\x17\x03\x1b\xdc\x36\x65\xa9\x43\x6c\xc6\x69\x69\x6b\x48\x0d\x0f\x2d\xd2\x61\x65\xc4\xa7\xb9\x5f\xdd\x26\xb3\xa6\x98\x5b\x40\x9d\xe7\xb1\x40\xdb\x28\x19\x20\x70\x7d\xd5\xeb\xd2\x34\x99\x33\xb0\xc0\xb8\xe2\x20\x9c\x8f\x6d\xa8\xb8\x42\xd6\xb2\xa8\xb6\x98\x52\x30\x19\xb3\x74\x28\xd9\x11\x37\xce\xc5\xba\xce\xae\x69\xc0\x42\x72\x60\x86\x81\xa2\xec\x68\x7b\x3e\xc0\x00\x0b\x21\x58\x60\xa1\x61\xb3\x45\x11\x95\x91\x95\xac\x5a\xba\xd6\xf9\x54\x80\xb7\xd4\x39\xd3\xa9\x48\xc7\xe8\x71\x11\x95\xd0\x1e\xba\xe4\x26\xde\xbb\xbe\x53\xb1\x36\x12\xb8\x3d\xc8\x65\x37\x3d\x79\x6f\xdb\xa4\x63\x44\xf3\xa4\x85\xec\xc7\x0c\xf9\x8a\x9c\x9e\x08\x65\xa5\x8e\x71\x89\x84\xd2\x42\x02\x12\x9c\xf7\x22\xa9\xf1\xbf\xfb\x22\xc6\x4d\x2e\x80\xc5\x14\xe2\x39\x71\x1a\x39\xf2\xbe\x5f\x55\xb4\x81\x69\x3b\x83\xc1\x2f\xcd\xb4\xa8\x34\xf0\xa9\xe3\xfd\x40\x22\xe6\x1d\x16\x88\x7b\xb0\xc5\x1d\x8d\xeb\x60\x87\xb6\xd5\x41\x74\xde\x52\x42\xf3\xc0\x7d\x41\x23\x67\x30\x80\x98\x43\xca\x2d\x91\x31\xc6\xd6\xd1\xa5\x5f\x16\x3a\x52\xbc\xcd\xa8\xd5\x29\x8c\x60\x25\x72\x65\x2e\x0d\x88\x0f\x2e\x51\x3a\xce\x4d\x2d\xc2\x43\x36\x76\x93\x24\x04\xae\x8b\x33\xb8\x6b\xa9\x82\x33\xdd\xe4\x76\x1f\x8a\xb8\xe6\xdd\x40\xdd\x12\x70\xd1\x8e\x71\x5c\x4b\x44\x66\xe6\x71\x64\x43\x41\x03\x5a\xb9\xeb\x02\x9a\x0d\x40\xa3\xc9\x78\x32\x7e\x13\x89\xbd\x93\x08\xcb\x0c\x43\x1f\x00\x09\xa3\xe9\xa2\x35\xf3\xe8\x47\x3c\xab\x46\x51\x60\x7a\xb6\x96\x26\x33\x3b\x07\x4e\xf5\xd0\x23\xdd\x6e\x71\x91\x02\x69\x59\xd7\xc6\x59\xf0\xd5\x71\x81\xd6\x6c\x93\x9e\x74\xe9\x51\x92\x98\x79\x50\xa7\xae\x9d\x47\xe7\x78\xc1\xce\xaf\x78\xee\xdb\x3a\x95\x2d\xa6\x3c\xb1\x14\x4b\x9e\x91\xea\x26\xbc\x52\x06\x38\xe1\xb1\x9b\x58\x93\x0d\x9d\x00\x75\xaa\x44\x1a\x59\x2a\xd5\x09\x2a\xdb\x65\x4e\x6d\xcf\xc7\x3d\xc8\x65\xb7\x0a\xd4\x5e\x26\x97\xd9\x09\x14\xc0\x0a\x92\x34\xdc\xb2\x94\x53\x58\xd6\x51\xc5\x3c\x2b\x3e\xf3\x5a\x3a\x1f\xad\xcb\x72\x8e\xed\x64\x49\xaf\x45\x41\x9b\x8c\xe1\x2e\x8d\x20\x2d\x20\x58\x38\x37\xc0\xb6\xf4\xde\xce\xae\x0d\x32\x76\x0c\x4f\x1a\x2f\x94\x96\x11\xc1\x86\x5b\x02\xbb\x05\x9a\xc6\xb6\x7a\x0b\xb5\xc3\xe8\x61\x1e\x99\xd5\x18\x2d\x93\xa0\xf1\xaa\xdf\x33\xa4\xac\x7b\x0a\x75\x08\xed\x20\x69\x68\x9c\x6e\xd4\x92\xc6\xaa\x97\x91\x36\xf3\x26\x76\xd8\x28\x7a\x5d\x47\x39\x37\x62\x34\x03\x19\xc1\x94\x50\xa3\xe1\x08\xa8\x6a\x46\x5f\x1d\xeb\x58\x22\x18\x62\x36\xc8\x24\x16\xd7\xb5\xc1\x6c\x41\x2e\xb6\xc6\xe4\x3d\x4a\x30\x7a\xc6\xe9\x32\xf6\xa0\xac\x24\xa6\xda\xac\x9e\xa3\x46\x0c\x7c\xa6\xa6\x59\xc6\xa5\x54\x42\xfd\x30\xad\x86\x6f\x51\x21\x69\x5a\xd7\xaf\x26\xc4\x29\xad\x62\xe8\x3a\x30\xa2\xbe\x32\xe2\x10\x82\x64\x80\xd8\x15\xd6\xd0\x5c\x7c\x9a\x45\x68\x61\x67\x41\xd4\x64\x03\x9f\x2d\xa9\x7d\x42\x09\x87\x10\xe4\x22\xab\x41\x23\x41\xd9\x4f\xa6\x76\x2e\x52\x33\xa7\xd5\x4d\xcd\x38\x97\x65\x4d\x4a\xa0\x9e\xea\xa1\xb0\x2d\x3a\x69\x69\x19\xd3\x8c\xb5\xf7\x44\x90\x35\x8c\xaa\x18\x4e\xa7\x65\x10\x65\x71\x23\x9c\x5b\xe4\x06\x8d\xa8\x5a\x73\x6b\xc7\xd9\x4f\xbe\x9f\x67\x6a\xf7\x20\x97\xdd\x6a\xd6\x7b\x59\x73\x99\xba\x59\xf7\x6b\x8f\xa7\xbc\x42\xdd\x13\x81\x2a\x0b\x66\xd4\xb1\x67\x4b\x2e\x46\x65\xd0\x8d\xb1\x5b\xfa\xd5\xe3\x11\x0c\x6e\xa4\x4a\x6f\x11\xfe\x86\xb8\xfa\x75\x91\x96\x68\xa0\x75\x33\x8d\x4b\xcb\xd5\x55\x01\x44\xc3\xfa\x7e\xee\x5b\x83\x2c\x30\x95\x25\x8e\xa2\x12\xcc\x37\xc2\xea\x2d\x4c\x25\x42\xcb\xd6\x53\x47\x17\x2a\x54\xd7\x14\x80\x47\x36\x13\x1b\xa1\x76\xb0\x43\x92\x0b\xb4\xa4\x3c\xb7\x82\xf6\x10\x84\x11\x29\xb3\xd2\x2d\xb6\x72\x4a\x59\xae\xf3\xe8\x30\x5b\x04\xee\x4c\xf1\xa1\x73\x59\xb9\xd6\x59\x23\xb9\x88\xba\x5f\x81\x2a\x72\x56\x70\x29\x03\xeb\x43\xe6\xf3\x16\xee\x3d\x81\x81\x2d\x29\x23\x99\x35\x19\x5b\x58\x5a\x0a\xcd\xb8\x34\x82\x0f\x61\x0e\xaa\xcb\x93\x5f\x1b\xdf\x35\x2d\x1a\xb0\x57\x45\x23\x5b\xb7\x50\xc1\xa4\x75\x1a\x70\xe8\x15\x1f\x57\xbf\xe0\x6e\xd6\x12\xfa\xa9\x8f\x80\xca\x6a\x17\x0a\x6c\xb6\xd5\x17\x11\xcc\xc4\xf0\xec\x20\x5d\x36\xb9\x92\x97\x27\x82\xc4\xe2\x94\xa4\x60\x2e\x19\x98\xd9\xb8\xc0\x7a\x81\x64\x60\x72\xae\xa0\xed\x3d\x9d\xcb\xda\x82\xd4\x14\x30\xfa\x10\x88\xd9\xa2\x8a\x98\x15\x23\x48\xb8\xa5\x8d\x2a\xad\x9a\xca\x29\xad\x9d\xb7\xbc\x55\x60\x64\x81\xb5\x50\x30\x3a\xa0\x11\xb3\xdc\xb7\xe3\x02\x78\xa3\x81\xde\xc3\x6c\xf4\x99\x0b\x8e\x78\xf5\x25\x4b\xb9\x60\xfd\xde\x2d\xbf\x73\xc4\x87\x5e\xc3\x9e\x7b\xfe\x63\x3f\xb1\x5e\x78\x8b\xcb\xce\xfb\xee\x25\x5f\x7f\xc5\x53\x7e\x74\xc8\xb5\xcc\x46\x37\x7e\xeb\xd9\x7f\xf2\x1b\x78\xc5\x3f\x5d\xb7\xfc\xc3\x01\xdf\xfc\xc2\x0f\xc3\x63\x4f\xfa\xfd\xdb\xdf\xfd\xfa\x37\xdd\xf4\xee\x6f\xbf\x73\xb9\x43\xbd\x98\xed\x80\x3e\xe2\xc8\xcb\xfe\xee\xd1\x5f\x3d\xed\x29\x77\xbb\xf1\xbd\x5f\x7f\xf4\x89\xdf\x79\xd9\xbf\xff\xd7\x4d\x4f\x7f\xff\xe1\x5f\xff\xe8\x3b\x8e\xbe\xfb\xef\x9e\xf2\xd6\xfe\xed\x3b\xa0\x2f\x7d\xc1\x95\x2f\x3a\xfa\x2b\x97\x7c\xec\xfb\xef\xbf\xef\x7e\xfa\xdd\x87\xf6\xdf\x3f\xee\x27\xe7\xdc\xf8\x01\xec\xfc\x53\x3f\xf0\xe8\x7d\xae\x3c\xec\x1b\x7f\xbf\x03\x7a\xdc\xc5\x9f\xfe\xd0\x5b\x7f\x74\xe0\xd1\x07\x5f\xe7\xa9\xb7\xea\xbf\x7c\x6f\x2d\x6e\xf9\xb5\xf9\xc5\x1f\x58\x2e\xf8\x36\x7e\xf9\x2b\xfb\xcf\xbf\xf5\x27\x3b\xa0\xdf\xbc\xfd\x7a\xf8\x7d\x5e\xf2\xd1\x57\xfd\xc4\x1d\xf4\xe5\x3b\x1e\xf6\xf1\x33\x7f\x0c\xcf\x39\xf9\x23\x8f\x3b\xf9\x92\x1b\xdf\xfa\x6e\x3f\xfd\xdf\xef\x7f\xf6\x59\x3b\xa0\x8f\xb9\xfb\xeb\x4e\x3b\xe6\x07\x17\x3d\x1e\x3c\xf4\x73\x6f\xba\xc1\x81\x77\x38\xf9\xb8\xcf\xe4\x7f\x78\xb1\x7e\xfd\xc7\xde\x70\xf7\x27\xdc\xf9\x4b\xfe\x9c\xcf\xed\x80\x7e\xea\xfd\x17\xfe\xa2\x7c\xfb\xdb\xfb\xfe\xea\x5d\xef\xbd\x6c\xbd\x42\x7d\x46\x3c\xeb\xd6\x67\xc0\x8f\xbc\xf9\xa3\x2f\x61\x47\xbc\xea\xd5\x2f\xf9\x8b\xb7\xee\x80\x4e\x47\x7c\xe9\xd8\xdf\xfd\xfa\x7e\x37\xcc\x0f\x79\xd7\x71\x5f\xbf\xf1\x1d\x4f\x3f\xf1\xdf\x4f\xbd\xde\x37\x7e\xfd\xa1\x37\x3f\xed\x73\xfb\x1d\x77\xda\xc1\xf7\x41\xd7\x98\x8d\x76\x5b\xd5\xbd\xcd\xf0\x00\xa0\xb0\xd2\xa0\xf9\xdc\xf7\x1d\x8a\xd0\x41\xbe\xb6\xa2\x1d\x4a\x6c\xbc\x33\x63\x74\xba\x61\x3d\xa0\xa9\xd4\xa5\xd5\x52\x75\x6c\x8b\xab\x9c\x25\xa9\x73\x23\x89\x68\x78\xd5\xaa\xf5\x13\x58\x29\xc4\x7d\xdb\x2d\x7a\x95\x85\xcc\x74\xaa\x2e\x8e\x5c\x6a\xcf\x29\xe5\xbc\x8d\x23\xd9\x42\x3d\x85\x95\x43\x1d\x1c\x89\x75\xed\xe6\x11\xa3\x59\x74\xd4\x11\x1f\x55\x12\xa3\xb1\xa3\x12\x8c\xe4\xc5\x48\x40\x50\x91\x28\x7a\x0c\xf9\x16\x32\x0b\xa6\x5e\x8e\x2d\x0f\x24\x64\xe9\xb8\xe9\xd6\x00\xa6\x04\x9b\xa5\x64\xc4\x78\x91\x1d\x8e\xa5\x93\xc4\x85\xae\xd4\x96\xab\x1e\xe1\xb0\x45\x0b\x4a\xdf\x7a\xdd\xb0\x3c\x75\xc3\xc4\x64\x94\x51\x43\x40\x81\x30\x78\xf6\x14\x64\xd7\x48\x60\xe4\xaa\x01\xc0\xa0\x5b\x49\x30\x0e\x92\x2d\x5a\x50\xe8\xe8\x1b\xef\x64\x1b\x9c\x9d\x7c\x53\x6a\x1f\x54\xd2\x62\xe8\xd0\xd4\xe0\xa6\xac\xc9\x01\x6b\xaa\x97\x0a\x67\x44\x68\xa1\xac\x63\xd3\x16\x23\x50\xb2\x19\x1c\xd4\xd4\xd5\x3c\x47\x3a\x8f\x75\x98\x3b\x11\x61\xb3\x04\x3b\x25\x89\x6a\x5d\x49\xe9\xa4\x83\x4b\x1c\x01\x6a\xb8\x20\x75\x13\xc7\xfc\x98\x72\xd0\x02\xd5\xc4\xe7\x61\xb1\x5e\xa9\x4e\x00\xe7\xc2\xd4\x74\x03\x69\xf5\x44\x3a\x92\xf9\x30\x09\xad\xe6\x0c\x93\xab\x6d\x4b\xf6\x9c\xba\xbb\x1b\x0f\xef\x65\x72\xd1\x43\x4f\x81\xf4\xac\x05\x75\x1a\x69\xd7\xa4\x4c\x72\x71\x2d\xe5\x19\xe8\xb9\xe9\x86\x32\x0f\x92\x94\x82\x66\x5c\x13\x57\xce\xcd\x7a\x8b\x32\x15\x0d\x2d\x16\xb3\x1f\x6a\x33\x5b\x64\xac\x5a\x65\xd6\x4d\x44\x55\x23\xb6\xc2\x2a\xda\x75\x84\xf3\xea\xd5\xa8\x83\xb5\x44\x4e\xa9\x6e\x32\xd9\x28\x90\x56\x17\x65\x19\xad\x16\xac\x76\x1a\x5c\x13\x41\x8f\x8a\x6d\x09\x88\x16\x08\x0b\xd4\x00\x53\x5b\x98\x6f\xad\x81\xa1\x69\x12\xdb\x40\x7e\xa3\x03\x1b\xc4\x30\x0e\xd4\x3a\x10\x58\xef\x64\x50\xba\xa9\x90\xa9\x6e\xb6\xde\xa9\x49\x90\xfc\xff\xd1\xf6\xe7\xc1\xdb\x34\x65\x75\x38\x2e\xc1\x25\xc6\xa0\x82\xb8\xbc\x8a\x1b\x8a\x1b\x98\x48\xaf\x1a\x04\x62\x88\x4a\xe4\x87\x22\x46\x51\x0b\xd0\xee\xe9\x6d\xba\x7b\xba\xa7\xbb\xa7\xa7\x97\x20\xe2\x6e\x14\x5f\x14\xa3\x10\x51\x04\x94\x44\x5c\xc0\x0d\x88\x1a\xc5\xe5\x17\x94\xa0\x06\xe3\x12\x4d\x42\x44\x31\x20\x48\xc4\x05\x10\x41\xcc\xb7\x5e\xab\xa4\x9e\xf2\x49\xd5\xf3\xcf\x33\xff\x5f\xf5\xf9\xdc\x35\xf7\x3d\x57\x5f\x7d\xce\xb9\xce\x29\x06\xf8\xa3\xb4\x7e\x22\x53\x7a\x1c\x57\xbc\x50\x3c\x62\xd5\xc9\x61\xa0\xca\x30\x6c\x14\xb9\x2d\xc2\xb1\xb2\x82\x7b\x34\xb1\x43\xbf\x41\x5f\x97\x53\xc0\xa6\x92\x5e\xa0\x6e\x86\xfa\x2b\x14\x1a\x9b\x73\x5c\xb8\x13\xb7\x10\x87\x13\xf0\x90\xe1\xdc\xe2\x99\x71\x46\xb8\x60\x5c\x8b\x05\x4c\x1f\x6a\xee\x08\x0d\x41\x2b\x48\x3e\x5f\x81\x67\x97\x3a\x43\xa7\xd3\xb7\x73\x3b\x4f\x86\x00\x37\xd1\x48\xe2\x87\x16\xa1\xf4\xb5\xb4\x1e\x29\xa1\x52\xf6\x45\xae\x79\x61\x83\x40\x77\x85\x85\x9c\xdf\x25\x8a\xdd\x98\x2e\x45\x75\x3b\xc0\x21\x76\x77\xc6\xd3\xed\x34\x94\xd3\xa2\x6d\x09\x60\xdd\x64\xa3\xc6\x87\xa9\x60\x72\xc5\xdd\x6c\x9b\x76\xab\xc9\xed\x36\x03\x5f\x7d\x13\x25\x48\xcf\xb6\x62\xfd\x38\xf7\xae\xd6\x36\xfa\x3e\x56\x47\x0e\x37\xf7\x05\xb2\x3d\xbb\x3d\xd6\xcc\x83\x12\xb4\x4e\xa1\x2f\x31\x1f\xf1\x63\x6b\x75\x3d\x7d\x13\x28\xc0\x05\x21\x5f\xce\x55\x9a\x92\xf5\x81\x57\xe8\x0e\xaf\x4f\xb8\xfa\x23\x89\x93\x5b\x76\x62\x79\x52\x7e\x05\xe4\xc4\x18\x15\xb0\x4d\x23\xda\x61\x9a\x75\x27\x43\x2c\x37\x65\x9b\x3d\xd7\x0e\x25\x3c\x8a\xa3\x9d\x1f\xe3\xf4\x80\x43\xd8\xc3\xe9\xcb\x15\xd1\x17\x5e\x6e\x7a\x39\x8e\x63\xf1\xde\x8e\x16\xf3\x22\x32\x99\x72\xd5\xd0\x1e\x33\xcc\x8d\x6d\xa0\x2a\xe8\xd1\x6c\xe7\xbe\x0b\xa4\xf6\x64\x2f\x91\xf9\xb0\x71\xa6\x8c\x4d\xb5\x26\x56\xc0\x61\xe5\x0d\x1b\xa7\xaa\x01\xac\x11\x1c\x71\x84\x3a\xb0\x74\x0e\xe9\x40\x4a\xb0\xad\x63\xbd\xa2\xd1\xba\x8e\x85\xa7\x39\x59\x69\x97\x34\xcf\x5a\x65\xab\x70\xcb\xad\xf3\xe6\xe1\xa0\x99\x32\x8e\x66\x0b\x42\xe1\x1d\x22\x59\x97\x98\xae\x60\x5b\x4e\x80\x09\x2b\x6e\x81\xce\x6a\xcb\x57\xb9\x65\xa8\x66\x70\x6a\x37\x6c\x93\xab\xeb\xb9\xe0\xb6\x36\x2a\x1c\x9c\xe8\xe0\x3b\x57\xf9\x8a\xed\x4b\x72\xd0\xbe\xc2\x60\x64\xce\xca\xdb\x53\x76\x6d\xd4\x66\x0a\x0a\x90\x89\x75\x3d\x76\x31\xb2\x60\x1b\xdf\xe9\x4e\xe9\xa8\x6d\x51\xec\x66\x67\xa3\x5b\xdd\xf5\x6e\xf3\xe4\xd2\xd6\x75\x4e\x69\x4d\x15\x44\xc7\x4a\xb4\x40\xac\xae\x3e\xb6\x06\x58\x18\x5c\x0e\x9f\x49\x02\x93\xed\x62\x4e\x84\xf7\xc1\xa4\xbd\xc2\xb0\xcc\xd8\xca\x08\x96\x3d\xf4\x81\x2c\x5d\x72\x96\xb9\x0d\xba\xb3\xc9\x36\xe1\x5a\xd6\x79\x18\xcd\x93\x5d\x3c\x8b\x18\x14\x46\xd6\x71\x45\x68\xd7\xae\xbd\x65\x84\x28\x1d\xc4\xa0\xcc\xc3\x36\x54\x9b\x69\x17\x0c\x81\xb8\xca\xbe\xb8\xbd\x92\xda\xf0\xe9\xb6\x35\xa8\x72\x14\x3d\xaf\x50\x75\xee\x4b\x1e\x6c\xa7\x68\x54\x1c\x18\xc3\x72\xa5\x70\x39\xf0\x94\x98\xf5\x61\x1d\x1b\x72\xcd\x5a\x6d\x0b\x35\x7c\x22\x4c\x8e\x65\xae\x57\xcc\x92\xf2\x94\xc9\xed\x84\xc1\xee\x49\x98\x7d\x3b\xd1\xe6\x08\x6d\xd4\x2c\x6c\xc2\x9e\x16\xc3\x55\x18\xa8\x42\x69\xed\xb1\x1d\x08\xc3\x74\x85\xe4\xa9\x00\x7c\x8e\x53\xe3\xba\x45\x8d\xe3\xda\x1d\x6c\x3c\x63\x92\x23\x3e\x26\x39\xbd\x17\x64\x38\x98\x33\x48\x8a\x31\x48\xb6\x19\xaf\x60\xe2\xb9\x94\x6d\xe4\xb0\xc6\x4a\x8a\x66\xb6\xb0\x66\xfb\xc4\x6a\xaf\xfb\x44\x32\x6d\x92\x4e\x96\x57\x53\xe7\x72\x72\x0c\x0e\x49\x0e\xc2\xaf\x98\xe2\xd0\xd4\x09\x2a\x7a\x28\x47\x39\x6e\xd5\xe9\xc3\x1d\xd9\xd1\x55\x0e\x3d\xce\xbc\x2c\x09\xae\x58\xf9\x2a\x71\xa6\x5b\x82\x3b\xd8\xff\x1f\xb6\x69\xb7\x42\x87\x6e\x77\xba\x74\x6d\x13\x53\x2e\x4d\x54\xd2\x5a\xb1\x57\xab\x5d\x5a\x36\x18\x0a\x3f\x6a\xec\x8d\x59\xc6\x77\x29\xf7\x36\xe6\x16\xe6\xaa\x7b\xba\x62\x33\x1f\xed\xae\x2d\xfb\xac\xbb\xb4\x26\x0b\x44\xf3\x18\x67\x22\xfe\x5c\x4f\x3e\xe7\xf0\x7c\x01\x04\x57\xbb\x44\x17\xe9\x42\x73\xe7\xc5\x5e\x21\x36\x02\xcc\x29\xe2\x08\x99\x07\xc5\x19\xf1\x2d\xed\xd2\x1b\x84\xbc\xae\xa5\x2e\x41\xe4\x31\x27\x0c\x7e\x9d\x41\x2c\x8b\x5d\x70\x5c\x2e\x89\xf1\x1f\xae\x95\x64\x90\x0b\x2c\x67\xad\x53\xe0\xb4\x1f\x36\x04\xea\xaa\xe5\xb0\x1c\x6d\x3f\x56\xd3\xca\xa9\x30\xde\xd3\x41\xed\x46\xe1\x15\xce\x90\x79\xaf\xc3\x86\xb2\x79\xd4\xe3\xae\x0d\x36\x95\x38\x06\x89\xa3\x29\x4d\x5d\x0b\x81\x99\x42\xd8\x0e\x76\x30\x7d\x80\x50\x53\xe6\x57\xa0\x1d\x71\xad\x7a\x37\xe8\x00\xbd\x4c\x14\x6c\x35\x59\xcc\x9d\x41\x7b\x6e\xbb\xcc\x35\x06\x8d\x62\x35\xd5\xfa\x03\xe1\xbb\xe6\x6e\x20\xdd\x15\x32\x69\x0c\x99\x38\xa8\xe5\x41\xca\xd9\xc4\x3c\xd5\x5c\x3d\x5d\x59\x5a\x9c\x3d\x45\x6e\x0b\x11\x68\x0b\x96\x81\x56\x5d\xdc\xc7\xde\x41\xbe\xc4\xf0\x75\xeb\x0d\x4d\xd2\x66\x36\xc6\xad\x2c\x1c\x4a\x9c\x21\x62\xca\x1a\x3f\x67\x04\x9a\x07\xb3\x62\xc0\x4e\x81\x36\x54\x09\xec\x76\xbd\x39\xa3\xf1\x56\x78\xf2\x6d\xbe\x16\xd5\x9c\x28\x83\xd9\x9e\x96\x0d\x95\xa9\xa5\x1d\x3b\x22\x7c\x94\xa9\x9c\x89\x45\xa8\x66\x39\xd3\x31\xcf\x85\x34\xc6\xeb\x9a\xc2\xbc\x42\x6c\x24\x49\x5c\xa4\x4f\x48\xb6\x70\x88\x39\xef\x3a\x27\x2c\x9b\x6d\x3b\x8a\x06\x6d\x2b\x9a\x36\x78\x8a\xc2\x69\xa7\xd0\x13\xae\xd8\x79\x09\xa0\xab\x0e\x01\xe1\x4e\xcf\xb4\xef\xbe\x2e\x50\x20\xb6\x2e\x05\x2f\xce\x35\x53\xdc\xaa\x32\x2c\xbd\xee\xf4\xc0\x0c\x4c\xae\x53\x77\x8d\x5f\x61\x15\x76\x24\xad\x9a\x05\xf9\xd0\x5e\x37\x72\xf6\xd2\x52\x9b\x27\x71\x59\x74\xad\xbc\xf7\x6c\x97\x6b\xb6\xae\x1e\x7b\x0c\x7a\x9c\x8e\x5f\x12\x60\x66\x95\x3c\x71\xca\xcc\xaf\x36\x75\x1a\x35\x04\x18\x25\x0e\x12\xaf\x6c\x4e\x1b\x45\x58\x55\xda\xb6\x05\xe7\xa4\xf7\xd5\xc0\xdd\x5f\x12\x1a\xbf\x04\xb8\xce\x69\xc0\xb2\x2c\x24\xfa\xcd\x2d\x2a\x46\xac\xec\xb4\x7a\x4d\xa7\xb5\x1e\xaf\x8b\x58\x16\x3f\xa0\x1e\xe7\x22\xa5\x8c\x97\x90\x65\x76\xf4\x11\x78\x1b\xa2\x12\x82\xda\x29\x4c\x65\xc0\x66\x2e\xd5\x21\x89\xf0\x67\xdb\x8a\x25\xbb\x80\x1a\xd8\x60\x06\xc7\x84\x5c\x91\xc3\xc5\x4a\x94\xdc\x37\x8a\xe6\x82\x8f\xbe\xac\x84\x5a\xc3\x16\xd6\xba\xe7\x45\xb1\x46\xd6\x72\x2e\x90\x10\xca\x33\x69\xc2\x26\x27\x72\x52\x37\x35\x97\x5b\x31\x50\xb7\x1b\x73\xf1\x74\x1d\x72\xec\x67\x58\x4c\x3b\x01\x59\x81\x36\xac\x14\x4f\x0c\xe8\x48\xe4\x96\xd5\xa2\x07\x27\xc8\xb3\xaa\x83\x0c\xec\x00\x57\x58\xd5\xb7\xd1\x89\x0c\x68\x20\xca\x96\x42\xd5\xb6\x49\xb3\x4c\x11\x4d\xe6\x14\xbb\x8d\x19\x51\x10\xcd\x51\x0d\xac\x9a\xf3\x6b\xde\x9b\xbd\xa2\xb9\x6c\x21\xe1\x4c\xa0\x94\xb9\x26\xae\xed\x46\x42\x3f\xf6\xd5\xe9\xac\xf5\x0a\xc6\x80\x4e\x94\x70\x1e\x92\x30\x7d\xec\x30\x49\xbe\x5d\xe1\x60\xc3\x10\x35\x10\x95\xb1\x36\x64\x11\x9d\xa3\xaf\xeb\x92\x89\xb2\xda\xcc\x63\x09\x64\x1e\x6c\x6c\xd0\x72\x0a\xf8\x98\xd4\x72\x34\x50\xbe\x42\x4f\xe9\xcf\x0d\x1e\xaa\xe7\x3c\xe1\xec\xcd\x1b\xba\x46\xd7\xfa\xbe\x22\x7d\xce\xb3\xc3\x15\xd8\x48\x4c\xdd\xc8\xf4\x09\xc3\xcd\x65\x71\x85\xed\x2c\x6b\x15\x6b\xee\xe9\x7e\xf2\x26\x41\xe5\xb2\x20\x2e\xbc\x5f\x62\x74\x84\xd5\x36\xd4\x50\x6a\x4d\x0c\xa5\xe9\x76\x46\xac\x5e\x97\x2b\x7c\x9c\xf9\x41\xc6\xae\xb6\xed\xac\x6b\x44\xcb\xea\xd8\x40\x07\x97\x0b\x61\x21\x07\x9d\x4a\x25\x7c\x31\x20\xe8\x53\xed\xd8\x8b\x19\x67\xda\x8f\x2b\xfc\xbd\xcf\x96\x68\x1c\xd5\x9c\x22\x97\xde\x6c\xac\xb3\x4f\x4b\x99\x25\xb9\x12\xe1\x0f\xb9\xea\xba\x68\x66\x93\x0a\xca\x66\x37\x72\xb5\xfa\xa6\xe6\x72\x2b\xce\xfa\x76\xef\x60\x30\x85\xd7\xaa\xb6\xa3\x16\x85\xe6\xee\x8c\xdd\x28\x25\xdb\x89\xed\xd2\x39\x15\x11\x34\x71\xee\xa7\xa7\x83\x63\x90\x87\xe7\x31\x5d\x22\xca\x75\x9b\xd8\xe2\x01\xf3\x41\x10\x6a\xd1\x6c\xc7\xb6\x8a\x8c\xb5\x14\x7b\xb1\x73\x25\x4e\xba\x8d\xba\x05\x5a\xbd\x3a\x56\x32\xd8\x2f\x71\xdf\x40\xce\x6e\x84\x0e\x35\xba\x3f\xce\x82\xc9\x06\xe7\xba\x7a\x4a\x46\x0a\x6a\x90\x12\x57\x81\x83\xb0\x1b\x3a\x3c\x4a\xa4\x54\x98\xf8\x15\x80\x2e\x77\xbb\x08\x07\x35\x4d\x7b\x98\x8e\xe5\xc0\x6b\x58\x3b\xdd\x24\xb6\x64\x08\x0e\xa0\x63\xd0\x47\x7c\xd8\xb4\xb2\x84\x18\xd7\xf9\x92\x75\xa2\x12\x54\x2e\xca\x17\xda\xa4\xaa\x6e\xb8\x11\xe6\xca\x12\x67\xde\xad\x8a\xc8\x42\xaa\x58\x92\x5a\xcf\x43\xed\xbd\x60\x95\xc7\x91\xaf\xe0\xef\xa0\x8b\x02\x04\xda\xad\xa9\xb4\x82\xa4\x0f\xc1\x75\x36\x7c\x9e\xba\x78\x2c\x78\xe7\x6d\xcd\x1b\x76\x4b\xf7\x02\xe5\xc2\xe0\x96\xae\x38\x74\xbc\xc5\x8b\x11\x61\xf3\x6b\xaa\xa2\x71\xd9\xa5\x6a\x90\x46\xca\xfb\x8a\x90\x95\xc1\x56\x8a\xd9\x3c\xfd\x1a\x7c\x1d\x63\x2e\xfb\x15\x8e\x57\x9c\x98\x35\xd8\x68\xb8\x6d\x28\x78\x5d\x83\x46\x43\xa3\xd8\x4f\xd5\xf1\x6c\x9d\x04\x94\x7c\x92\x98\x83\xce\x6b\x93\x0a\xb8\x00\xf7\x9b\xc4\x46\x6f\xfd\x8e\x7b\xff\xf2\x53\x3e\xe3\xf7\x1f\xf5\xd0\x6f\x78\x3a\x79\xd7\x37\xbf\xe9\xf7\x9e\xf3\x3b\xef\xfd\xde\x8f\xfd\xb9\x9f\xfe\xc8\xf7\xfc\xf4\x6f\x7c\x3f\xf6\xff\x7b\xee\x13\xff\x8e\xd8\xe8\xc3\x9e\x75\xdf\xff\xfe\xb6\x5f\x79\xb7\xbf\x00\xcf\xfe\xba\x7f\xf0\xd1\xdf\xf2\xa4\x4f\x78\xe9\x37\xdd\xff\x83\x7f\xe7\xe3\xbf\xe0\x81\x6f\x7c\xf5\x57\xbd\xfc\x2d\xe3\x43\xef\xb8\xa1\x14\xff\xf8\x7f\xf8\xb4\x87\xbf\xf2\x81\x1f\xf2\xcd\x2f\xbe\xe3\x61\xcf\xdd\xff\xfb\xb7\x7d\xd7\xc7\xbd\xe3\x73\xbe\xea\x35\xe8\x47\xdf\x70\xbf\xff\xf9\xd8\x9f\xfc\xa5\x77\xdc\x58\xfa\xe8\x97\x7f\xe6\xe7\x17\xf1\x94\xff\xf4\x5f\xbe\xe3\x69\x8f\x78\xd9\x9f\x3c\x6c\x15\xdf\xfd\x8f\xfe\xe7\x43\xfc\x9b\x9e\xfe\xc8\x8f\xf9\xe9\x6f\xfb\x8c\xef\xfa\xf1\x8f\xbf\xa1\xf4\xb7\x7f\xe1\x8d\x5f\xf1\x86\x17\x3d\xef\x3e\x2f\xbd\xcf\x73\xf7\x87\x7d\xf1\xbf\x7d\xd0\x97\x7d\xde\x0f\x3e\xf7\xc7\xbf\xef\xa3\x9e\xf2\xb3\x6f\x7e\xda\x3b\x3e\x2e\x3f\xf7\xe9\x37\x94\x7e\xc2\xdd\xff\xf3\x7b\xde\xfb\xf1\x3f\xf5\xba\xf7\xfa\xb3\x47\xfd\xe9\x97\x7d\xca\x7b\xbc\xf6\xf9\x5f\xf6\xa6\xf7\x7c\xe8\x27\x3f\xf4\xed\x6f\xf8\x92\x07\xbd\xcf\xf7\x7d\xf3\xf1\x97\x37\x94\xfe\x93\x4f\x5e\x7e\xf1\xe9\x0f\xfb\xa0\x78\x0f\xf2\xe6\x87\xfc\xe4\xaf\xfd\xdc\x9f\xbe\xd6\xbd\xf2\xc3\x5e\xf7\x6b\x2f\xfb\xa1\x37\xfc\xf6\x1f\x3d\xfc\x01\x77\x3f\xd9\x0d\xa5\xbf\xa5\xbf\xfd\x8f\xdf\xef\x8d\x0f\xf9\xee\xff\xfd\xc4\xbf\xff\xbd\x1f\xfa\xb1\xae\xfd\xd2\xc7\x7c\xe5\x53\x36\xf8\x6b\x3f\xfc\x49\x1f\xfc\x99\x2f\xf8\xde\xa7\x3e\xf6\x2f\x6e\x28\x35\x9f\xf3\x53\xef\xf8\x8e\xbf\xb4\x3f\x57\x1f\xf7\xc3\x8f\x7b\xde\xbb\x7c\xd5\xe7\xbd\xd7\xa3\x7f\xf7\xb3\xfe\x1d\x79\xd4\x7f\xfd\xd0\x47\xf6\x5f\xd4\x77\xfb\xc3\x97\xbc\x53\x6c\x74\xab\xa7\x7a\xbb\x17\x61\x06\x88\x13\xe9\x2c\x30\x04\x0e\xf4\xca\xaa\x3f\xc4\x56\xe1\x2e\xc4\x88\x61\x27\xb1\xac\xd0\x1c\x47\x18\xf3\xf0\xe2\xa8\x87\x2b\x57\x18\x2b\x74\x3a\x16\x71\xf6\x25\xf7\xa4\xd6\x5d\x93\x85\x31\xbc\x2d\x70\x5d\xba\xd8\xfa\xf0\x1e\x08\x3f\xb6\xed\x18\x9b\xf0\x02\xf2\x82\xec\x15\xf9\xb7\xdc\x24\xca\xb6\x4a\x08\x35\xa1\x01\xb4\x33\x10\xe3\x72\x70\x65\x8f\x32\x38\x8e\x6c\x87\x1b\x87\xab\x35\x71\x9d\xb9\x6e\x47\x9b\xc8\x5f\x21\xf3\xd9\xb9\x59\xec\x3c\x92\x5b\x83\xeb\x21\xb1\x69\x99\xcb\x5e\xd3\x33\x9c\x30\xa8\x9d\x50\xba\x87\xd2\x16\x2b\xb6\xc8\xed\x31\x43\xbd\xc4\xf6\x23\x74\x20\x76\x83\x5b\x4e\x9a\x8a\x63\xc5\x2b\x54\x67\xcf\xb2\x46\x60\xe7\x11\xf3\x2e\x94\x5f\x6c\x4b\xe7\x2e\x4f\xea\x4e\xa6\xf6\xe3\x82\x15\x5e\x26\xd0\x49\x76\xc4\x85\x55\x7b\x4a\x8c\xe0\x94\x82\x99\x8a\xae\x88\x41\x93\x80\xd0\x4c\x0f\x52\x79\x23\xcc\xa1\xae\x8b\x2e\xf9\xb8\x02\x55\xe7\x4b\x02\xcb\x89\x62\x77\x4b\x13\xa2\x87\xa6\x40\x64\x9c\xc8\x29\x55\x16\xa2\xf5\x53\x4a\xea\x42\xa0\xa6\xad\x6c\x54\x05\x8a\xbf\x02\x96\x1d\xc7\x68\x71\x66\xb3\x9c\x4b\x0c\xb2\x79\x53\x54\x5f\x10\x77\x66\x53\x7c\x05\x75\x0a\xa4\x30\x72\x6b\xd8\x4b\x6b\x35\x42\xc3\xf2\xcd\xc6\x98\xb7\xea\xc3\xb7\xdb\xd2\x3b\x66\x1c\x98\x5c\xcc\xb1\xa1\x03\xe8\x05\x61\xad\x5d\x68\x65\x1b\x5a\x37\xa1\x61\x2c\x03\x08\xd6\xa6\xe2\xad\x0c\x2e\xd9\x76\x49\xac\x35\xd0\xc5\xac\xcd\x30\xb5\xa6\x52\x01\xdd\x0d\xb4\x8b\xda\x4e\x88\x80\x6c\x49\xc8\x2d\xef\x78\xf3\xa0\x9d\xc0\x91\x76\x9c\x26\x6a\x7f\xcd\xf4\x8f\x37\x7c\x50\x65\x74\x58\x75\x88\x28\x0f\xa8\xc0\xd2\x99\xf2\x0d\x1c\xd9\x93\x32\x81\x0f\xd2\x2e\x05\x37\xa3\xed\xa6\x8f\x4b\xd6\x71\xe0\xd2\x47\x50\x74\x8a\x8e\x50\x61\x25\x1c\xbc\x8e\x1c\xf2\x69\x24\x0f\xd6\x9b\x73\x6e\x00\x88\x52\x71\x23\x4a\xc4\xb6\x15\x7f\xc9\x0a\x6f\x73\xa6\xc4\xbe\xe4\x30\xce\xed\x54\x87\x3c\x57\x73\x60\x20\xe3\xb6\xed\xc4\x03\x13\xda\xd0\x26\x33\xa4\x56\xb2\x97\x1e\x30\xb1\x97\x60\xfb\xa0\xb8\x55\xf6\x0c\xce\xc6\x8a\x24\x0e\x18\x20\x02\x0e\x9c\xef\x4c\x11\xeb\x4b\x2f\x14\xf5\x7e\xa2\x75\x74\x7d\x66\x0d\x24\xcf\x57\xa8\x12\x64\x32\xea\xf4\x8b\x00\x8d\xa6\x8c\x87\xd7\xa4\x0d\xa5\x24\xdf\x8c\x38\x00\x4b\x2b\x54\x7c\x5b\x39\x23\x5b\xe4\x66\x3f\x72\x06\x97\xd8\xe9\x39\x1b\xa1\x27\x02\x40\xed\x94\xd0\x4d\x0a\x95\x96\xae\xf6\x73\x41\xa4\x6c\x51\xb8\x31\x0e\xe4\x04\x99\xab\x0d\x49\xc7\x52\x5c\xbe\x19\x55\xbf\xd5\xe4\x76\x9b\x9b\xcb\x2c\xe7\x66\xe2\xe1\x3a\x29\xd3\xc5\x65\x8e\x2d\xcf\x09\xc8\x20\x21\x52\xd9\x2a\xae\x96\xc9\xca\x2a\xc4\x69\x59\x4f\x87\xdb\x0a\xae\xe0\xc0\x51\xee\x06\x1d\x18\xa8\x1a\xfb\x16\xa5\x2c\x56\xc8\xdd\x67\x56\xab\x4f\x93\x56\x14\x32\xa5\x7b\xde\x7d\x35\x35\xb4\x8c\xd4\x09\xaf\x00\x7b\xf0\x10\x61\xa9\x81\x61\x35\x2a\xf6\xbd\x2c\x79\xdb\xe8\x99\x28\x5c\xa7\xaa\x8c\xe3\x51\xc9\x58\xb7\x93\xc1\x55\xba\x46\x34\x62\x57\xb8\x21\x32\xce\x0b\xab\x29\x35\xe4\x68\x4d\x69\xb2\x10\x77\x6b\xcf\x12\x22\x3a\xe3\x12\xaa\x37\xc3\x55\x18\x11\xdf\xb0\xe5\x34\x09\xb6\x5d\xe2\x52\x30\x80\x4a\x03\x68\x41\x96\xa0\xc0\x96\xe4\xf0\x1c\x82\xe2\xce\x92\x55\xe0\x50\xf7\xd3\x14\x57\xa8\x39\xb2\x00\xed\x28\x7c\x85\x57\xac\x26\xf1\x9a\xc1\x96\x15\xc6\xaa\x2a\x8b\x2d\x75\x2c\xc6\xc4\x9b\x32\xc1\xa4\xbc\x8a\x03\x98\xec\x4e\x02\x39\x3b\xa6\xd5\xe7\xbe\x90\xe5\x8a\x60\x3b\xb6\x1b\x79\xe6\x05\xa0\xe2\x2a\xac\xc5\x0a\xa2\x07\xc6\x61\xc5\x98\x6c\x88\x60\x40\x63\xa6\x81\x63\xe1\x08\x39\xac\x4c\x68\x57\x57\x04\xb3\x30\x05\xb6\x4d\x58\xee\x8f\x90\x8f\x75\x43\x47\x24\x84\xab\xc0\xe0\x71\xf8\x83\x00\xaf\xd8\x41\xc3\x09\x14\x3e\xc4\x90\x90\x9a\x79\xe3\x26\xea\xdf\x36\x97\x5b\xdd\xf5\x6e\x73\x73\x09\x4b\xef\x91\x82\xd4\x88\xf0\xcb\xaa\x03\x1e\x05\x51\xcb\x67\x96\xa7\xca\xb9\xe0\xa9\x0e\x91\x24\x26\xa5\x75\x23\x8b\x3c\xe7\x15\x62\x23\x16\x36\x0d\x1d\x51\x42\xb9\x70\xec\xc7\x9e\x96\x9e\x79\x6e\x85\xfb\x82\xf1\x0e\x57\x49\x4f\xa2\x19\x8d\x6c\x58\xb1\xc7\xcd\xd5\xd3\x5d\x11\xf7\x10\x58\x6b\x25\x44\x8f\x56\xe9\x32\x2b\x92\x0e\x1c\x2d\xb5\xbb\x8f\xda\xe3\x6d\x5d\x42\x2f\x32\x44\xb6\x93\xbe\x6d\x34\xe6\x26\xaf\x58\x18\xe5\xfc\x24\xc2\x52\x1e\xd6\x22\xfb\x7a\x74\x92\x95\xe4\x34\xc1\x73\x06\x71\xda\x3a\x79\x80\x07\xae\x6b\x76\x68\xe1\xa7\x0b\x40\xd2\x4b\x7c\x08\x17\xcc\xb6\x49\xb9\x2c\x92\x2b\xc0\xc7\x28\x91\x68\xad\x32\xd9\x4a\xd9\x56\x1d\x77\x51\x0e\xcd\x11\xb7\x24\xed\xc9\x03\x74\x86\x71\x85\x9e\xd2\x6e\xe7\x2a\x8e\x0d\xb6\x1d\x8d\x5a\xc5\x8e\x37\x5c\xa5\x66\xde\x29\x01\xd6\x93\x01\x52\xea\x24\x6b\xca\x4d\x41\x75\x22\xef\x33\xbf\xc4\x76\x56\x24\x0b\xa0\x2c\x79\xe7\x73\xdb\xfd\x09\xdd\x49\x11\x3c\x31\x82\x30\xee\x7a\xdf\x70\x31\x49\x1e\x9c\x74\x1c\x31\x31\x47\xce\xfc\x8a\xa8\x1c\x6f\x4d\x50\x33\x2d\xde\xa0\xee\x34\xdd\xd9\x59\xe9\x5e\xeb\x2e\x5b\x73\xa9\x6f\x85\xad\x4b\x0b\x0b\x54\x3d\x0d\x88\x76\x6b\xd7\xc2\x6f\x6a\x2e\xb7\x42\x87\x6e\x73\x73\x31\x34\xd5\x05\xf0\x25\x1d\xa4\x25\x0e\xb3\x3c\x6d\x60\xc4\x9d\x71\x87\x02\x43\x93\x16\x33\x8c\xf4\xf6\xf0\x19\x0c\x22\x0d\x8b\x97\xb8\x21\xda\x33\x91\x63\xb2\x31\x22\x30\x1b\x0d\xde\xd9\x95\xeb\x7a\xf6\xb9\x32\xdd\x12\x74\x89\xf8\x0d\x17\x78\x6c\x9b\x6e\x9b\x58\x37\x7c\x85\x1e\x80\x67\x80\x77\xe8\x91\x3b\xf3\x50\x7b\x01\x0e\x73\x95\x43\xda\x1d\xa7\x5a\x7b\x44\xc5\x96\x8f\x4c\xf8\x52\x37\x79\xc0\xa8\xe8\x0c\xf0\x8a\x46\x0b\xc2\xe1\x5c\x67\x9b\x3b\x8e\x55\xaf\x8b\x09\x41\x9c\x30\xed\x5d\x9c\x00\xe5\x23\xb3\xdc\x3d\x16\x6c\x90\xae\xd6\xa9\x4f\xb1\x89\x4b\xd0\x0e\x24\xb5\x2e\xdd\x68\x07\xd7\x6d\x24\x26\xdd\x62\xc8\x44\x3b\xdd\xd4\xae\xb3\x71\xb2\xe0\x2d\x20\xe4\xce\x0e\x01\x56\xdc\x9d\xe5\x12\xc9\x78\x6d\xeb\x22\xc5\x12\xe9\x69\x28\xd8\x29\x3a\x70\xd2\xf1\x08\x8b\x0d\x2a\x26\xac\xbb\x1b\xdb\xca\x5d\xf0\xf4\xd4\x18\x4d\x91\xea\xbc\xe2\xb5\xb6\x27\xef\xc7\x51\x74\x48\xda\xaf\x67\xc7\x2a\x0d\xbd\x2b\x65\x57\x28\x8e\x3d\x09\xdf\xd7\x73\x63\x1d\xaf\x82\xc0\xb4\x93\xc3\xa2\x4b\x4c\x91\x73\x6d\xad\xa8\x98\x53\xaf\xab\x0a\xa4\x41\x42\x53\xa7\xa0\x62\x9d\x04\xa5\x0d\x18\xc6\x34\x6a\xf9\xb4\xc4\x64\x53\x24\xf4\xf3\xe6\xe6\x72\x2b\x3c\xf9\x76\x5f\x8b\xe2\x4e\x62\xb7\xbe\x52\xc6\x5a\x8b\x5b\xf6\x39\xaa\x30\x92\x0e\x68\x70\x98\x07\x3f\x61\x00\x47\x26\x34\xab\xc3\x99\x73\xd8\x79\xc5\x0d\x7f\x19\xfb\x62\xb5\x5b\x6a\x6d\x90\x9d\x8b\x4d\xb5\xd3\x93\x11\xe3\xcd\xb6\xc3\x23\xac\x14\xe6\x78\x22\xcb\x84\x92\x2a\x23\x80\x77\x7b\x05\x65\x47\xc1\x20\xde\xac\x70\x20\xad\x5a\x0b\xd1\x09\x86\x40\x3d\x22\x12\x00\x4b\xaa\x52\xc0\x07\x15\xfb\xe0\xb8\x79\x54\x58\xc4\xb4\x5c\x81\x33\x08\x79\x2e\xc7\xa8\x67\x01\x83\x9c\xb9\x2e\x1e\xa3\x46\x3c\x39\xe8\x64\x38\x46\x5c\x41\x99\xfe\x44\xa9\x74\xa1\x3a\xb2\xeb\x66\x2e\xc1\x19\xc4\x26\x38\x96\xb1\x2e\xd3\x2f\x3e\x11\xaa\xf5\x1a\x4c\x27\x77\x1d\x03\xab\x5f\xa3\x72\x4b\x8d\x87\x8e\x61\xe2\xb0\x57\x4b\x8e\x96\xae\x80\x95\x01\x15\x4e\x2e\x87\x57\x1a\xd1\x5a\x7a\xde\x5b\x04\x0a\xb4\x3c\x4b\x1e\x93\x8a\xe5\x74\xb6\x01\x3a\x37\x01\x95\x14\xb2\x43\x9b\xaf\xa0\x2f\xb7\x72\x02\x84\x17\xb2\x56\x24\x5c\x4b\x66\xe6\x1c\x84\x5d\x4c\xa9\x10\x9d\x7c\x41\xdb\x1e\xe4\xdc\x70\xb0\x15\x64\x50\x0f\x07\xf3\x15\xbf\x0b\x8d\x29\x87\x39\xb3\x02\x1d\x71\xde\x60\x5c\xd6\xc9\xeb\xaa\xc0\x4a\x1b\x91\x22\x2c\x29\x66\x12\xf5\x50\xd0\xcf\xd3\xa8\x1a\xd9\xcd\x0b\x5e\xb7\x62\xa0\x6e\x73\x73\xc9\x76\x4d\x8c\xcb\xcd\xc0\x1a\x92\x51\xd4\x04\x3e\xe4\xdc\x97\x51\x1a\x83\xbc\x89\xa4\x2d\xc2\xa5\x0d\xed\xb1\xb7\x4b\xc9\x7d\x5e\x71\x21\xd9\x0a\xc0\xed\xe4\xa9\x9f\x3e\x71\x21\xe4\x36\x24\x3e\x31\xde\xfa\x84\x73\x0b\x95\x41\xe6\xba\x52\xe8\xdc\x88\xd0\x4c\x1b\xbd\x2d\x57\xf0\x34\x30\x11\x0f\x53\x65\x09\x6c\xa4\xae\xc4\x33\xd0\x09\x5d\x88\xc3\x1b\x76\xdb\x36\x0a\x66\xd0\xb4\xfd\x90\x4b\x27\x10\x64\xaa\xce\x4b\xb2\xf8\x12\xaf\x6c\x45\xf6\xa8\xc3\xf3\x91\x8e\xd5\x9c\xc1\x1f\x7c\xa4\x4c\x9a\x29\x13\x33\x99\xfa\xb6\x74\x80\xb2\x1c\x3d\x9e\x7a\xae\xe9\x0a\xb1\xb6\x1d\xf1\x50\xf1\x1c\xfb\x58\x3c\xb6\x3a\xe5\xea\xc8\xc8\xb0\x6d\x10\x53\x8e\x05\x19\x65\x16\xb6\x04\x23\xe2\x80\xa3\x0d\xd4\xed\x15\x7b\x9b\x84\xd4\xa5\xd2\x00\x6c\x87\xdb\x69\x1d\x01\x04\x36\xc7\x66\x11\x60\xa5\x6a\xd9\x79\x01\xf0\xc8\xa7\x4d\x56\x0f\x00\x57\x01\xf5\x15\xe6\x6d\x3c\xed\x87\xb4\xcd\x45\xe8\x69\x81\x76\x00\x39\x8f\xfd\xcc\x98\xa6\x02\x24\x8b\xfb\x91\x50\xe2\x7b\xd8\xf7\x90\xba\x8f\x46\xa3\x95\x5d\xe1\x26\x0d\x8f\x29\x9c\x2e\xd4\xac\x26\xce\x3d\xda\x22\x3c\x2a\xad\xae\x01\x8b\xc3\x9f\x29\x6a\x5e\x7c\x50\xa4\x19\x51\x58\xdd\xea\x01\x8f\x9b\xc5\x46\xb7\xe2\xac\x6f\x73\x73\x81\x1b\x9a\x44\x89\xbc\x97\xc8\xda\x6e\x03\x0e\x42\xc9\x35\xca\x53\x0f\xba\xf3\xa5\x88\xbe\xed\x78\x92\x44\x18\x38\x73\xf0\xa9\x5f\x61\x06\xce\x16\x7d\x74\x44\x4f\x0f\xe3\x72\x4a\xb4\xda\xa9\xa1\x3f\x14\xf4\x22\x02\xaf\x65\x65\x63\x88\xcd\x79\x95\xcb\x01\x50\xd1\x79\x34\x76\x85\x9e\x72\x17\x85\xb2\x0c\x8e\xed\xa0\xc4\xb1\x8e\x98\x08\x6b\x18\x72\x91\xa1\x41\xd2\x89\x15\x6e\x55\x4b\xdc\x2a\x08\xf0\x20\x3d\xd3\xb6\x5c\xe2\xa0\xbc\xc0\x7d\x1c\xe0\x68\xfb\xa2\xb1\xdd\x94\xe9\x42\x6c\xc5\x40\x1a\x0b\xb1\x47\x30\x56\xac\x69\xf5\x65\x4b\x07\x0e\x02\x62\xab\xae\xc8\xc1\xe0\x22\x67\x53\x43\xb3\x3a\x31\x8f\xb2\x2c\x39\x2b\xa7\x94\x1c\xc1\x47\x17\xca\xbe\x67\x5c\x23\x63\xb4\xda\xb0\xaa\x0a\xdc\x82\xed\x15\x31\xb4\x1b\x2d\xb6\x79\xc9\xcd\x6c\x6a\x9d\x48\x8f\x23\xee\x90\xcd\x90\x78\x42\x7b\xc6\x10\xd6\x65\x47\xd4\x07\x40\x4d\xe1\x89\x96\x28\xae\xb8\x2e\x3b\xe9\xb5\x90\x12\xd0\xbe\x06\xa6\x12\xa2\x25\xa4\xd6\x34\xe7\x7b\xef\xab\x8a\x53\x70\xc0\xd5\x21\xd1\x1e\xb7\x5e\x12\xf5\x2a\x5f\xb1\x7e\xe8\x83\x64\x9a\x73\x2d\x3a\x8b\x32\x04\x46\xd6\x13\x0f\xeb\xcf\xe5\xdc\x76\x06\xb9\x96\xa9\x9f\xd8\xaf\xfe\x1c\x00\x44\x5e\x07\xbd\x21\x92\xf7\x6f\xc5\x46\xf7\x7d\xfd\x27\xfd\xfc\x97\xff\xe0\xb8\x1f\xff\x77\x9f\xfb\xdd\x1f\x7d\xbf\xaf\x7e\xe4\xef\x7d\xf8\xab\x3f\xf5\x0b\xfe\x89\xfc\x47\x3f\xf3\xf2\x0f\xf8\x83\xf7\x7b\xf9\x53\xde\xf1\x77\xc4\x46\xef\xf1\xe1\xef\xf9\x03\xef\xf3\x8c\x07\xfd\xfc\xaf\xff\xc7\x6f\xf9\xe0\xdf\xd9\x3e\x47\xfe\x8f\x3b\xee\xf5\x68\xfb\xad\x6f\x7f\xb7\xfe\x1b\xef\xf2\xbc\x7b\x7f\xee\x17\xbf\xe1\x86\xd2\x97\x3d\xfc\x83\xde\x7a\xdf\xf7\xfe\x2f\x4f\x78\xf2\x43\x5f\xfa\xd6\x57\xbc\xed\x17\x5e\xfe\x2f\x3f\xfc\xd5\x2f\xf9\xc8\x1f\xbb\xd7\xaf\xfe\xaf\xfb\x90\x3b\xd1\x1d\xdf\xf7\x7b\x37\x96\xde\xe7\xbf\x7d\xcf\x3f\xf8\xf5\x3f\x7f\xc0\x27\x3d\xf8\x23\x3e\xf4\xa9\x5f\x9d\xde\xf2\xa5\xef\x1a\x5f\xfe\x85\xcf\xfa\xd1\xe5\x6e\xed\x6b\xbf\xa6\xbc\xfe\x67\x5f\x79\x43\xe9\xdd\x5e\xf4\xdb\xef\xfd\x73\x77\xff\xcd\x67\x89\x87\xbe\xf8\xad\xe4\xe3\xee\xf5\x8f\xbf\xe8\xc1\x7f\xf0\xc8\x6f\xfb\x37\x5f\xfe\x15\x3f\x82\x7f\xfd\xcd\xef\xfe\x05\xbf\xca\x6f\x28\x75\x2f\x7c\xeb\xab\x1f\x72\xcf\x97\x3c\x5e\xfc\x7b\xfd\xa4\xdf\x7a\xe2\xaf\x3c\x73\xff\xec\xef\xb9\xf7\xf7\xfc\xfa\xaf\xfa\xaf\xff\x93\xa7\x7f\x7c\xbb\xf3\x95\xe1\x46\x0d\x55\x7b\xd9\x5f\x3f\xfb\x7f\xc8\xc7\xfd\xf5\xb7\xbe\xef\xf3\xee\xf3\x87\xd2\x7c\xdb\xbd\x5e\xfe\xf0\xbb\xbf\xfb\x0b\xdf\xf7\x4b\xbf\xf9\x2f\xbf\xe1\xdd\x7e\xf8\xdf\x7d\xc6\x0d\xa5\x4f\xfa\xc6\xf7\xff\xf4\x4e\x9f\xf6\xaf\xfc\xc3\x3f\xfd\x13\xee\x71\xc7\x77\x7f\xda\xdb\xfe\xf4\xcf\xde\xf6\xb8\xfb\x3d\xf7\x9f\xfd\xe4\xff\x7c\xc6\x7f\xfd\xb6\x3b\xbf\xe5\x05\x37\x94\x7e\xcb\xf3\xdf\xf1\x6b\xdf\xff\xe0\x3b\xe2\x77\x7d\xff\xdd\xde\xfe\xd4\x2f\xbf\xe7\x13\x3f\xef\xfb\xef\x7c\xe3\x47\x3f\xfe\x83\x7e\xea\x5d\xdf\x87\x3f\xe1\x97\xee\xf3\xeb\x4f\x7e\xa7\xd8\xe8\x56\x4f\xf5\x36\x8b\x8d\xd6\xb9\x6d\x1b\x68\x94\x05\x78\xd8\xb8\x81\xc5\xd3\x90\xb1\x15\x31\x6a\x13\x5a\xf7\x72\x03\xfa\x14\x6e\x0c\x47\x8a\x43\x15\xd7\x2b\x6e\x42\xcc\xb8\x78\x48\xa8\x6d\x55\x7c\x33\xa7\x3b\xa5\x5b\xc2\xd1\x8b\x33\x72\xb1\x83\x8b\x6d\xb3\x69\xd7\x1d\xdb\x44\xc6\x90\x4a\x5b\x77\x89\x47\xd9\x1c\xdc\x2d\xa0\xc2\xc2\x8a\xa0\xa7\xd6\xa3\xab\xf5\x94\xfb\x3a\xd4\xce\xab\x59\xac\xe5\x8a\x31\xc7\x91\x76\x09\x59\x64\x77\xc0\xae\x58\x78\xc0\x08\x17\xbb\xb2\xe6\x8f\xf3\xcc\x00\xf2\x43\xc0\x6d\x7a\xb8\x8c\x73\xa8\xaa\xa1\x1e\xd2\xf5\xa3\x60\x40\xb0\x05\x75\x6b\xd0\x95\x2b\x7c\x74\x26\x57\x0a\xd7\xe6\xd8\x2e\x86\x48\x74\xc1\xa0\x45\x08\x4f\x78\x48\xd6\xe4\x1a\x28\xa2\xc7\x00\x1a\xc1\x3d\xcf\x34\xf9\xa4\x71\xb9\x82\xca\x9d\xc5\xb6\xe2\x8f\xea\xe6\x1e\x22\xda\x4c\x99\x75\xe2\x26\x47\xc9\xd8\x03\x45\x16\xbe\xae\xe5\x38\x65\x62\x66\xdd\x85\xca\x42\x5e\xb3\xda\xcd\x3b\xcb\x51\x48\xa1\x5d\x20\x15\x88\x8d\x75\xd9\x85\xd3\xad\x67\xb5\x1f\x4b\x5c\x09\x72\x53\xad\x2b\x19\xd3\x0a\xeb\x72\xf2\x57\xc4\xc3\xb4\xd0\x23\x2d\x80\xb2\x05\x05\x04\x8f\x44\x4b\xdf\xe4\xb6\xca\x38\xa7\xac\x68\xad\x06\x46\xa6\xc3\x82\x72\xc3\x31\xac\x20\x61\x7b\xb3\xb3\xd1\xad\xfa\xf0\x6d\x1e\x1f\x8f\x25\x1b\xd7\x07\x64\x86\x29\xe4\xa1\x13\xc0\xf9\xe3\xdc\x9a\x56\xa2\xe2\x03\x1a\x69\xd5\x06\xb3\x9b\xe7\x26\x74\x94\xb5\xd9\x2b\xee\xa6\x5c\x1c\x2e\x2e\x45\xc9\x0d\xad\xd2\x2c\x75\x26\xc8\xb2\x0c\xb2\x1a\x07\xb4\x15\x1d\x05\x0f\x44\x50\x38\x84\x48\x7a\x5b\x98\x63\xfe\x0a\x68\xc1\x75\x53\x15\xb6\xeb\x3a\x0b\x39\x4e\x69\x62\xad\xf3\x68\x4a\xdb\xb3\x10\xd5\x80\x17\x35\x99\x85\x12\x91\xf2\xe9\x32\x3e\x2d\x9f\x57\x0c\xb1\x72\xd9\x92\x38\x04\x49\xd1\x75\x56\x36\x15\x43\xdf\x69\xc4\x90\x0e\xc2\xb4\x33\x14\xe1\xd2\xf5\x22\x97\x05\xf5\xba\x71\xa9\xe2\x25\x19\x8d\x00\xa9\xca\x2a\x69\x1c\xd1\x83\x45\x1f\x18\xea\x56\xf0\x02\xc6\x36\x91\xac\xaa\x52\x6a\xba\xaf\xe7\x21\xe1\xa2\x45\x5f\x9c\xbf\xc4\xde\x7c\xdd\xb4\x2b\x07\xc1\x28\x40\x33\x58\xd9\x1d\xc3\xd4\x2f\x80\xa7\xa8\x9b\x09\x05\x6c\xd4\xa0\x0e\x25\x29\x60\xcd\xd6\x82\xa3\x5d\x62\x9b\x86\x0c\xe9\x70\x60\x08\xcc\xa2\x89\xe8\x7e\x15\x9b\xde\x81\x85\xe7\xdc\x3a\x0e\x60\xd1\x64\xa1\x0a\x29\x1a\xc7\x51\xc4\x81\xa7\xba\x04\x1c\x5e\x71\xc6\xbc\x31\xd0\x36\xc0\xd7\xb2\xf9\xb3\xda\xa4\x52\x58\xb7\x49\x8e\xa8\xcf\x11\x41\xd8\xc6\x96\x44\x99\x1b\x20\x01\x2c\xfe\xb8\x39\x46\xed\x56\x93\xdb\x6d\x6e\x2e\x7d\xef\x27\xa7\x6c\x13\xd5\xa2\x04\x1c\xdc\xb2\x54\x01\x59\x11\xc5\xea\xa3\x3b\xd8\xc4\x91\x69\x75\xfa\x2e\xa9\x39\xa3\x2f\x1b\xbb\xe2\x9c\xf4\xf9\x3c\x30\x3f\x77\x21\x97\xc6\x73\x9f\x2b\xae\x46\xd0\xae\x4a\x60\x6b\x51\x22\xde\xf5\xed\x65\x7a\x6e\xfc\xdc\x04\x24\xc0\xad\xfe\x0a\x24\x79\x07\x39\xe0\x15\x34\xe6\xa3\x1b\x26\x09\x6c\x3b\x52\xbe\x90\x48\x97\x56\x8a\x9b\x83\x89\x11\xf6\x18\x98\x0c\x7d\x82\x92\xed\xb8\xe2\xb4\xa6\x72\xcb\xab\x6d\x36\x61\xbe\x46\x7b\x06\xb8\xdb\x64\x06\xf5\xf6\x08\x65\x8b\xd5\xa4\xae\x29\xdb\x4a\x8e\xcc\xeb\xb8\x45\x93\x2f\xf1\xd1\x31\x92\x59\x38\x3b\x43\x14\x7a\x5a\xd4\xb2\x70\x7f\xc4\xb0\x38\x46\x63\xec\x40\xa4\x93\xf3\x45\x9c\x63\x75\x77\xb5\xff\x48\x1c\x13\x57\x24\x60\x8d\xf2\x37\x36\xd9\x0c\x38\xb9\xe4\x63\xa1\xd9\x74\xbe\x82\x99\x1c\xa5\xb2\x4a\x66\xd0\xe2\x23\x96\x1b\x8e\x11\xa0\x54\x0c\xae\x97\x64\x4f\x39\xce\x1d\xea\xc4\x33\x69\x4b\x4e\xa4\x7b\xd3\xd4\xe8\x88\x59\x33\x0c\x04\x1a\xa9\x39\x81\x33\xe2\x58\xf2\x69\xce\xb8\x2e\x12\x5c\xe2\x18\x9a\x9d\x3a\x36\xaf\xb8\x11\x60\x81\x72\xda\xbe\x78\x3c\x57\xd5\xcc\x3e\xc7\x3e\xa8\x08\x3d\x3a\xc3\x8c\x8d\x3b\x1b\xf8\x5c\x6e\x0c\x1a\xff\xdb\xe6\x72\xab\xbb\xde\xed\xf6\x07\xa0\x69\x54\xb1\x8b\x3c\x0b\xc8\x9b\x50\xfb\x99\x61\x60\x76\x41\x9a\x6c\x01\x8f\xb6\x6c\x7a\xf8\x78\x84\xdc\xca\x41\x7a\xa3\xf9\x0a\x63\x4f\xb6\xd8\x49\x5d\x42\x07\xae\x9e\xd2\x5e\x97\x00\x85\x6f\xcb\x00\x85\x74\x32\xd0\x46\x93\xdc\x4f\x9e\xf9\xd1\xdd\x38\x12\xea\x22\xa5\x2b\xcc\xb4\x11\xa6\x07\x84\x0a\xa1\x76\x9c\x9b\x8c\x72\x99\xa7\x07\x87\x92\xde\xc0\xdd\xc1\x93\xaa\xac\x54\x09\x0b\x01\x43\xc7\xd5\xd4\xb9\x8b\x2b\x4e\x6b\x87\x11\xd2\x6d\x13\x95\x98\xae\xf3\x68\x39\x08\x7f\x06\xbb\xf7\xe8\xb7\xc5\xc9\x64\x98\x3a\x39\x39\xe6\xcc\xc7\x09\x96\x43\xd6\x79\xc9\x4f\x59\x0a\xbe\x99\x90\xc5\x34\x92\x1f\x2a\x68\xcd\x82\x05\xd8\xc6\x3a\xf6\x53\x6e\xfd\x0c\x18\x77\xae\x0e\x25\xda\x96\x9d\x8f\x4e\x5c\xc1\xc4\xb3\x23\xc9\x7c\x2e\x6b\x5d\x04\x04\xc4\x46\xaa\x39\xd3\x8e\x48\x50\x85\x33\xa4\x15\xe0\x80\x5c\x4e\x65\xd0\x38\xe3\x32\xad\x14\xe2\x02\x81\x32\x23\x74\xd4\xbe\x9f\x9b\x38\x81\x05\xfb\x54\x33\x29\x4f\xbc\xa4\xfa\x00\x2e\x1f\x9b\xc0\xc1\x98\x73\x95\x86\x34\xee\x20\x83\x34\x97\x2b\x7e\x9d\x9d\xea\xda\x1b\x66\xd0\x1c\x3b\x23\x9c\xe3\x68\x7d\x23\xcc\x25\xec\x9b\x5a\xff\x26\x02\xbb\x87\xbc\x31\xb2\xed\xce\xac\x77\x7d\x2d\xe7\x4d\xcd\xe5\x56\xe8\xd0\x6d\x9e\x5c\x2a\x6b\x4b\x5f\x8f\xda\xac\x8d\x26\x90\x60\xb4\x30\xdb\x50\xe7\x81\x64\x13\x98\xad\x53\x9a\x64\xfc\x46\x00\xe3\x03\x15\x0e\xc8\xbc\x42\x2b\x66\x4b\xa3\x03\x57\x1c\x46\xf7\x94\x15\x5d\x4b\x50\x1a\x43\x7b\x76\x38\x15\xc7\x2c\x9c\xcb\xc6\xfa\x28\xd3\xa1\x4a\x57\x0d\xc7\x25\x68\x47\x3c\x6b\x28\x2c\xe0\x29\xc3\x7e\x9c\x16\xa9\x73\x94\xb1\x9e\x8a\x40\x0b\x37\x37\xea\xb4\x79\xa3\x10\x87\xa2\x21\x11\xdb\x32\x36\x7b\xc5\x69\xbd\x8f\xac\xb7\x61\x35\xb5\x8b\xce\x89\xc8\xa8\x0a\x2e\xdc\x31\xbd\xb7\x99\xc6\xca\xcd\xcc\xb4\x9d\x5b\x52\x06\xee\xd4\x42\xd5\xc7\x15\xf4\xe5\x11\xe9\x62\xdd\x11\x8e\xc9\x18\x28\xa5\x9f\x76\x7a\xe3\x99\x21\x62\x41\x9b\x13\x2c\x0f\x18\x92\xcb\xbb\xde\x0c\xcb\x6d\xfa\xc3\x5e\x61\x72\x7a\x28\x10\x7a\x45\x43\xc5\x6e\x36\xa1\x96\x74\x66\xe0\xaa\x52\xfb\x19\xc8\xf0\xfb\x90\xa6\xf7\xd5\xe2\xc1\xc5\x0e\xc8\xb2\xd7\xcd\x5d\x71\x5d\x26\x3d\x8b\x46\x59\xb7\x22\xda\x82\x1d\x1e\x9a\x0e\xbf\xcb\x83\x90\xa3\x01\xeb\x8e\xcd\x7b\x40\x73\xdd\x17\xb4\x72\x5a\x2c\x35\x57\xac\xb9\x33\x11\xa4\x68\xd2\x05\xc8\x8e\x33\x0a\x7d\x8c\x63\x05\x3c\x6d\x25\xb6\x82\xa0\xcb\xb6\x4d\x47\xfc\x72\xd0\x13\x36\x36\x34\x28\xf3\x06\x97\xa7\x77\x6e\x8f\xde\x02\x4f\xbe\xcd\xcd\x85\x9b\xd8\xe4\x10\x26\xf8\x56\x33\xe5\x66\x43\xac\xeb\x15\x05\x24\x8a\x39\x18\x5a\x98\xc2\xfd\x8c\xc1\x9c\x3e\x8c\x93\x2b\x7d\x5c\x11\x7d\xc1\x89\x56\x8b\xee\x01\xb8\x1e\x4a\x18\x8b\x5f\x80\xd3\xa5\x9b\x06\xca\x30\x07\x49\xa8\x9d\x13\x3a\x55\xdd\x2e\xe4\x0e\xec\x40\xf5\x12\x7b\xac\xcd\xd7\x4e\x66\x3d\x52\x28\xcc\x7b\x23\x83\xe7\xc2\x98\xd3\xc9\x06\x67\x3f\xad\x46\x20\x25\x3c\x09\x94\x4b\x58\x09\xa5\x76\x9f\x57\xb0\xcf\x9d\x9b\x00\x60\x59\xb3\x0d\x81\xac\xe0\x74\xfb\xe9\xf0\xa9\x56\xed\xf3\xe6\x3c\x93\x7a\x43\x10\xb4\xcd\xe4\xb5\x23\x53\x94\xa0\x57\x28\xfe\x79\xf1\x81\x89\x2e\x67\x38\xd1\x89\x60\x02\x5e\xd3\xb5\xf9\xa3\x92\xc0\x38\xe6\xbc\xc7\x65\x1e\x9c\x6c\xc9\x2f\xc7\x11\xc5\x92\xed\xb8\x42\x95\x90\x44\x1e\xa6\x2d\x7e\x55\xeb\xee\xf6\x91\x4f\x2a\x01\x25\x6a\x5f\xd5\xb2\xf8\xc2\x2b\x16\x63\xe1\x3b\xd5\x0d\x1a\x72\xfa\xdd\xa9\x4b\x32\xae\xe3\x6e\x2c\xc6\xba\x37\x87\x8a\x59\xeb\xa0\x62\x6a\x9a\x18\xa8\x84\xcf\x35\xad\x7b\x5d\xb3\x39\x60\xe5\x7b\xb1\xc2\x04\x35\xfa\x15\x0a\x57\xce\x94\x5d\xd0\x5a\x6b\x63\x63\x24\xae\x77\x04\x29\x33\x3d\x14\x38\xf1\x49\x69\x76\xdc\x2c\x00\x9d\x73\x4f\x47\x77\x9b\xde\x81\x84\xe2\xa6\xe6\x72\x2b\x06\xea\x36\x5f\x8b\xf6\x0e\x35\x17\xb8\x39\x05\x29\x16\x3b\x40\x18\xd3\xd9\x74\x12\xa3\xa1\x7e\x9c\x52\x1c\x2b\x69\x07\x5e\x93\xe4\x09\xaf\x74\xad\xee\x02\x9c\x81\xcd\x84\xb9\x14\x83\x89\xc8\x69\xa3\xf9\x5c\x71\xc0\x9b\x3c\xc1\xb6\x81\x78\x10\xe5\x67\x5a\xb6\x00\xb9\x02\x32\xa0\xec\x86\x2f\xfc\x0a\x21\x2a\x3c\x0e\x10\x88\xaa\xc9\xa3\x1d\x61\x66\xa6\x3e\x02\x25\x5c\xea\x5a\x13\xa2\x10\x56\x64\x64\x89\x92\xed\x71\x1c\x20\xb5\xb4\x8a\x2b\xc4\x46\x62\x33\x13\x97\x1d\xb8\x36\xf4\x0a\x0e\xcb\xb7\xec\x0f\xb8\xa7\x39\x7b\xcf\x4a\x64\x3b\xf0\xb6\x48\x83\x77\x3b\x4f\x81\x25\xd9\xed\x15\xfb\xbc\xa1\x76\xde\x65\x53\xc6\xb1\x75\x9f\x24\x71\x2a\x52\x30\x56\x1e\xb1\x43\x49\x70\x0f\xfb\x69\xbd\xd5\x89\x10\xa2\x4c\x49\x1e\xb8\x2b\x90\x1f\xbf\xb1\xc1\x49\x8d\x1e\x50\x43\x13\xe7\xda\x93\xc5\x57\xcc\xa6\xe5\x78\x6b\x9b\x85\x28\x06\x87\x13\xdb\xb1\x8c\x4c\xef\xa0\xda\x2b\x5a\x1c\xd8\x45\x32\x0d\x2f\x73\x2c\xbd\x59\x54\xa9\x0a\xa6\x50\x1f\x0c\x28\xc8\xb3\x26\x2c\x49\x84\x1d\x42\x32\x4a\x5d\x00\x5d\x94\x4b\x16\xbc\x76\xdd\xbd\x0c\x6a\xdb\x44\x8a\x70\x2d\x6e\x4c\x9c\x3d\xd4\xc8\x1b\x2f\x55\x36\x47\x12\xbd\x81\x14\x37\xc5\x36\xc1\x55\xca\xf9\x38\x6e\x6a\x2e\xb7\xe2\xac\x6f\xfb\x6a\xfa\xe6\x0c\x06\x9c\x89\x8c\x5c\xf6\x51\x54\xbd\xef\x7e\x28\x08\xe5\x69\x33\xef\x4e\x37\x79\x52\xb8\xad\x05\xaf\x9c\x54\x0b\xd8\x15\x2f\x14\x4b\xcb\x3e\x3b\x0f\x33\xa4\x42\x03\xd4\xd5\xc0\xa3\x66\x1e\x16\xad\xa9\x5b\x1b\xe3\xc7\x56\xce\x71\x8a\x8a\x0b\x00\x01\xd2\x99\xaf\x10\xd8\xac\x36\x22\x0b\x08\xa9\xa7\x32\x76\x8d\x26\x37\xe3\x8e\xde\x4d\x5a\xb3\x34\x75\x57\x7c\x68\xbc\xd7\x03\x86\xd4\x88\x08\x31\x02\x76\x85\xc0\x66\x35\xb3\x28\xa4\x22\x23\xb9\xb4\xb6\x00\x96\x00\x33\x38\xce\x79\xa6\x93\xee\x27\x2b\x65\x28\x4b\xc2\xb2\x6e\x3e\x19\xc2\x54\xb2\x57\xc8\xbf\xf2\xea\xdb\x1e\xf6\x1e\x5b\x65\x63\x95\x5c\x62\x88\x1b\xc9\x63\x9f\xca\x51\xed\x5a\x5f\x23\xa9\x2d\xa3\xc9\x35\xb1\x04\x5a\x39\xae\xe0\xac\x26\xef\xf0\xc4\x6d\xf1\x4a\xea\xa6\x36\xdc\xa2\x6c\x7a\x77\xda\x57\xd2\x97\x4d\xc1\xb5\xcf\x76\x8e\x90\x69\xb6\xc8\x31\xae\xfa\x72\x85\x9e\x72\xed\xd0\xc2\x26\xec\x62\x3d\x9f\x21\xa7\x00\xc8\x89\xa8\xe4\x9e\xb8\xd3\x47\xe3\xb9\x09\x71\xd9\x37\xe6\xc6\x10\x6a\x95\x72\xcc\x2b\x3e\xc5\x4c\xf5\x14\x9e\xd9\x3a\x32\xe7\x47\xdd\x46\xb5\xe9\x74\x27\xae\x2e\xb2\x98\xd5\x14\x3e\x25\xef\x7d\x6b\x86\xec\xf9\x64\x58\xae\xe8\x26\xb1\xd1\x0f\x3d\xfe\x87\x9e\xe1\xbe\xf1\xbe\xf7\x7d\xf1\x1d\xfd\x7e\xf7\x7e\xf8\xf3\xef\xff\x82\x7f\xfd\xcf\x7e\xf3\x3b\xdb\x2b\x1f\xfd\x05\xef\xf2\x4f\xe6\xbb\x3e\xe7\x2d\xf7\xfb\x3b\x62\xa3\x7f\xf1\x4d\xdf\x8b\x3f\xa1\x3d\xed\x9b\xdf\xf1\x66\xf1\xd3\x9f\x0d\xe4\x6b\xc3\xab\x3f\xf7\x85\xe9\xf1\xff\xf0\x97\x7f\xe5\xee\xcf\x79\xd6\xc7\xde\xef\x6d\x37\xba\x05\xfd\xd6\xc7\xff\xd1\xff\xfe\xb1\x1f\xfe\xe9\x9f\x7e\xfe\xef\xff\xc3\xb7\xbe\xf2\x3d\x7e\xe4\xeb\x3f\xb0\xfd\xc0\xcb\x5e\xda\xee\xf1\xf7\x7e\xe2\x3f\x7c\xd6\xcf\x7f\xe3\x3d\x9f\xf6\xd6\x1b\x4a\x9f\x1e\x7f\xf7\x85\x77\x7c\xd3\x47\x7c\xc7\x17\xe9\xbf\xf7\xbf\x9e\xf7\x29\x77\x7e\xda\xcf\x3f\xf0\x3f\xfe\xc0\x9b\xee\xff\xc0\x3f\xfa\xab\xbf\xfa\x84\xc7\xe8\x7b\x3c\xe5\x1d\x37\xba\x05\xa9\x77\x37\xf8\xa3\x9f\xf5\x65\x8f\x50\x4f\xb8\xef\x8b\xdf\xf8\xb4\x7b\x3f\xe8\x35\x4f\xfa\xc2\x3b\x5e\xf3\x7b\xef\xfb\xde\xc4\x8c\xef\x7c\xea\x23\xc7\x0d\xa5\xff\xe5\xee\xfb\x8e\xef\xff\xb4\x5f\xf8\x91\xf6\xe3\x3f\x97\xde\xf0\xa2\x1f\xfb\xc4\xb7\xb6\x4f\xbe\xc7\xf7\x7d\xc2\x13\x5f\xe0\xff\xdc\xbd\xe5\x41\x0f\x33\x37\x94\xfe\xe2\xab\xff\xd7\x1b\xf8\xf3\xe4\xbf\x7a\xf0\xcb\xfa\x33\x5e\xf6\x98\xef\xfc\xae\x4f\x7e\xd4\xd3\xbe\xe5\x9e\xaf\xfb\xe3\x67\xc7\x9f\xfd\xf6\x17\x90\xa7\xdf\xf3\xfb\x6e\x28\xfd\xd2\xf7\xfb\xc4\x9f\x78\xe6\x9f\xfd\xd3\x37\x7c\x04\x6d\xdf\xf1\x9c\x07\xf2\x4f\xfa\x17\x1f\xfd\xc8\x3b\xdf\xfc\x8b\xdf\x7f\xbf\xbb\xff\xea\xa7\xff\xfc\x3b\xfe\xe4\x65\x37\xfe\xd5\xd7\xbe\xfa\x53\xef\xfc\xba\xb7\x84\xc7\x7d\xd5\x7b\xdd\x71\xaf\x37\xa2\x87\x7e\xec\x27\x7e\xa9\x7a\xe4\x23\x1e\xfe\x23\xdf\xf3\xe1\xaf\xfa\xc0\x67\x7c\xe4\xdb\xd1\xa3\xde\x29\x36\xba\xd5\x53\xbd\xcd\xe3\x23\x38\x26\x18\x95\x9a\xc3\xc5\xba\xdb\x51\xc4\xe6\x6b\x76\xb3\xa6\x9d\x2b\xe0\x66\xe4\xfb\x30\x51\x6b\xb8\x2a\x6d\x28\xb6\x78\x65\x57\xc4\x65\xb5\x84\xda\x16\x50\xec\xa4\x77\x12\x66\xc2\x45\x85\xe8\x97\xb6\xef\x7e\xe7\xe4\xb0\xd2\x34\x4f\x3b\x4c\x64\xe6\xec\xe9\xb0\xe4\x92\x15\x5e\xbe\x92\x2e\x5c\xdb\x82\x70\xd9\xe1\xb6\x8a\xfd\x00\xa7\x4e\xfd\xe0\x32\x55\x04\xd3\x51\x75\xc4\xa3\xd4\x49\x36\x24\x27\x1e\xe3\x8a\xbc\x25\x3e\xd4\x2a\x29\xc4\xc7\x76\x9e\x7b\xce\x9d\x15\xa9\x1d\xdf\xd0\xb6\xd0\x45\x65\xae\x54\xec\xf9\xae\x7f\xbd\x1c\x21\x90\x5d\x64\x71\x49\xe8\x3a\x37\x4c\x4f\xcd\x4c\x63\xa8\xd4\xcd\x03\xbd\x6e\x55\x07\xea\x5c\xf0\xc7\xc4\x69\x29\x34\xd7\x38\x5c\xb3\x7b\x0b\x71\xba\x52\xcb\x25\x66\x90\x8b\x96\x09\xad\x7d\x9c\x28\x34\x90\x72\x94\xf4\x04\x55\x42\x9b\x05\x07\x07\xb3\xbe\x73\xd9\xc6\xee\x8b\xed\x7d\x09\x47\x58\x43\xb9\x64\x7c\xcc\xc6\x59\x9d\x19\xd9\xed\xb1\xf5\xa8\x43\x0a\x67\x57\xd6\xa6\x8c\x7d\xe1\xa8\xf2\x9a\xcf\x0d\xf4\x62\x37\x3f\x38\x60\xd4\x5f\xe2\x4c\x4d\x46\x55\x70\xd1\x91\xb7\x2a\x18\x8e\x8e\xd6\x0c\x8f\xb9\xb7\xa3\x57\x86\x02\xd1\x85\x07\x7f\x36\xc8\xd4\xba\x93\x33\x32\x3b\x56\x77\xf3\x22\xcc\x2d\xfa\xf0\xed\x06\xbe\x7c\x06\xad\x24\x9b\xab\xa5\xa9\x20\x7e\x9c\x3b\xb4\xa7\x9a\x8d\xcc\x55\xec\x3b\x8e\x48\xac\xae\x05\x49\x94\xdd\x63\xc5\x86\x5c\x82\x18\x36\xec\xcb\x5e\xe5\x49\x00\xd9\xb3\x21\x76\x4d\x7d\x2e\x14\x84\x26\x80\xad\x4c\x6f\x90\x36\xd4\xf2\xe2\x48\x24\xf8\xd8\xc5\x0e\xfc\x15\x1e\xaf\x49\xf7\xb5\xe1\xb6\xc0\xb6\x9a\x62\x98\x56\x6e\x68\x06\x48\xc1\xf2\x70\x1c\x53\x10\x19\x1e\xfe\xc4\x0b\xa4\x74\x90\x83\xc8\x72\x85\xdf\x2d\x87\x23\x70\x7c\x68\x42\xe8\xe6\x32\x56\x73\x3d\xfb\x0e\xf8\xde\xf4\x1a\x79\x63\xa0\x6c\x84\x99\x6d\x16\x80\x51\x5b\x41\xf5\xc5\xfa\x0b\xf6\xdb\xee\xfa\x05\x93\xc9\x40\xda\xeb\xa2\xe8\xb6\x9d\xc2\x24\xe9\xc7\xdc\x57\xba\x31\xd3\xeb\x9c\x30\x36\xe9\x15\x02\x87\x1d\xc1\x8f\x55\x95\x2b\xd4\x7b\x2e\x06\xd7\x29\x76\xa0\x35\x5e\xda\x72\x8e\x8c\x8b\xc5\x3e\x6f\xbb\x71\x6c\x09\x09\x45\xa5\x0c\x86\xc5\x6b\xb4\x56\xd0\x4f\xc3\xae\xf8\x14\x8b\xe3\x7e\x08\xa6\xdd\x79\x16\xbc\x0e\x7f\xda\x76\x42\x97\x55\x67\x24\xcd\x6d\x02\x73\x46\xe9\x49\x8c\x80\xb3\x62\x7d\xf7\x15\x5c\xc1\x30\xc0\x03\x59\x25\xf1\xf4\xae\xa1\x73\xc9\xc8\xf9\x7d\x47\x27\xa8\xc7\x82\x35\xb5\x72\x8e\x4e\x67\xd9\xd4\xcc\xf3\x14\x9a\x95\xb0\x8d\xed\xa6\xe6\x72\xab\xc9\xed\x36\x4f\x2e\xa9\x38\x6f\xf0\x16\x8d\x57\xc6\xc5\xf3\xe0\xbc\x69\xb0\x80\x93\x50\x1b\x97\x76\xba\x89\x52\x94\x13\x2f\x74\xe5\x58\xc8\xb4\x2f\xe2\x0a\x99\xf4\x18\xcb\x12\x86\x9b\x26\xce\xbe\x1e\x60\x73\xd3\x64\x5b\x10\x25\xc4\x83\x2e\x01\x2b\xe9\x54\x8e\x62\xe1\xa8\xc9\xd3\xc8\x04\x2f\x49\x04\xa4\xe6\xe4\xa4\xd8\x75\x33\xaa\xc0\xc1\x22\x57\x60\x76\x2f\x87\xd9\xbb\x10\xb6\xae\xba\x01\x38\x76\x1b\x68\x3a\xbc\x92\x69\xae\x97\x6c\x96\x99\x83\xd2\x95\xf8\x9d\x0f\xe1\x32\x3e\xcf\x15\x59\xa9\x63\x35\x60\x37\x87\x61\xc7\x9a\xd0\xb2\xed\xc5\xaf\xfe\xb4\xab\xc8\x06\x4d\x77\x05\x65\x57\x90\x5b\xf7\x1a\xb7\x25\x0f\x63\xa6\xdd\xba\x6b\x6d\x50\x5f\xa7\x17\x3b\x5a\x45\xe9\xa7\x4b\x64\x03\x6d\xcb\xc9\x1c\xa9\xa7\x1d\x5e\xa2\xea\x94\xfb\x72\x1e\x6e\xfa\x63\xf1\x27\xc4\xfb\x71\xb6\x0a\x2c\x16\x98\xd4\xc3\x18\x22\x53\x56\x79\x6e\x1b\xea\x23\xe5\xba\x05\xb0\xac\x57\x18\xd9\x1d\xd4\x32\x19\x7d\xdd\x16\x5f\xf2\xb1\x48\xb6\x90\xd4\xc6\x76\x14\x04\x81\x4e\xa8\x0e\x87\x21\x92\x67\xd2\x76\x96\x91\x9c\x76\xeb\x15\x3a\x91\x3c\x26\xb1\xe0\x48\x94\x15\x5c\x0c\x1a\x85\x50\x9e\x02\x74\x86\x0b\xdd\x88\x40\xc7\x9e\x95\x10\x42\x66\x05\x50\x70\xa3\x8a\xbc\xdc\xbc\x65\x77\x8b\xbb\xde\xed\x8e\x51\x73\x90\x30\x65\x81\xe3\x78\xdb\x4f\x52\x01\x58\x97\x33\xc2\x70\xd7\xe9\xc8\xb6\x7a\x1c\x9c\xd5\xec\x75\x3e\x2a\x72\xd5\x39\x50\xc7\x15\x04\x11\x1b\x33\x60\xe9\xfa\xa6\xad\xdd\x53\xde\xc1\x0c\x7a\xf3\xc5\x89\x6e\x0f\x1a\xea\xee\x76\x5d\xe4\x6a\x45\xf4\x77\xdd\xed\x61\xc5\xe0\x0a\x3d\x25\x5a\x9b\xd9\xd3\xe4\x61\xb8\x42\xb2\x57\x12\xe9\x45\xeb\xcd\x2e\x8b\x49\x65\x23\x7e\xeb\x7b\xd9\xf4\x5a\x75\x5d\x74\x3c\x7b\xf6\x57\x28\xd6\xf8\x89\x35\xdd\xb6\x55\x00\xb5\x6e\x78\x92\xa6\xb8\x76\x3d\x81\xcd\xaf\x5b\xda\xa6\x76\x34\x91\x95\xcb\x83\x80\xa6\x44\xc7\x5c\xa1\x4b\xfc\x29\x77\xcb\x29\xea\xc6\x61\xa8\x68\x14\xcb\xb9\x9d\x95\x74\xe1\x81\x2e\x4c\xc4\x43\x69\xd9\xd5\xba\x3a\xc1\x13\xed\xcb\x51\x1d\xef\xcb\x15\x64\x19\x97\x5b\x26\x7b\x2d\x9e\xd7\x29\x4b\x98\xc6\x5b\x34\x65\x38\x7a\xc6\x6c\x23\x38\x43\xbc\x64\x8d\x54\x34\xb3\x89\x82\x28\x00\x97\x58\x7a\x23\xb4\x58\xd4\x50\x5a\xe6\xb6\x72\x99\x8d\xc1\x5a\xc9\x55\x78\x7c\x1c\x4c\x24\xec\x32\x57\x62\xcb\x46\x93\x6c\x0d\x4b\x86\xae\x57\x88\x8d\xf8\x89\x21\x3e\xa7\xc3\xce\x78\x75\x1c\x3d\x9f\xc9\x49\x13\xcc\xee\x94\xb7\xeb\xac\xd2\x6d\x5c\x4b\xa7\x8c\xc6\xcb\x69\x33\x9d\xcb\xff\x23\xe9\xe8\x56\xe8\xd0\x6d\x9e\x5c\x4a\x73\xad\x73\x9c\x94\x38\xa4\x3f\x25\x4f\x7e\x46\x57\x29\x64\x27\x4d\xa2\x81\xce\x17\x13\xc9\x99\x86\x6f\xac\x10\x39\x89\xb9\x64\x33\x3f\xe9\x15\x49\xac\x8e\x74\xca\xd8\xd6\x7d\xe9\xb0\xac\x3d\x0d\x18\x51\x36\xb8\x6b\xb7\xd3\x1e\x68\x67\x8b\x3e\x69\x6d\x33\x98\x4b\x04\xca\x4c\x83\x56\x72\xd9\xeb\x18\xdd\x1c\x63\xf2\xee\xd5\xd6\x96\x9a\x0c\x17\xb6\x4e\x24\x11\x1e\x7b\x75\xc0\xd2\x92\x1c\x28\x55\x85\x72\x05\x9e\x9d\x50\xdf\x09\x0b\xb0\xd5\x42\x27\x25\x8b\x2b\x66\xfa\x9a\x66\x97\x3b\x86\xb2\xcd\x4e\x85\xc4\x82\x1b\xad\x8c\xda\x7a\xc4\xd7\xd8\xc1\x78\x41\x70\x5a\x17\xc8\xf2\xb2\x23\xd7\x99\xdb\x6c\x2c\x78\x1c\x9b\xa2\x94\x82\x15\x2d\x16\x2c\xc7\xa1\x75\xdf\x69\x64\x5e\x49\x32\xae\x98\x19\xd4\x6a\x95\x60\xf4\xdc\xd4\x29\x52\x11\x70\x87\x4a\x81\x15\xa6\x7e\xac\x54\x0e\xa5\x7b\x1e\x67\x27\x6d\xf4\x6a\xce\x5d\xf3\xaa\x97\x2b\x66\x86\xd9\xa5\x5c\xb5\xd5\x87\x5f\x0f\x7c\x22\xcc\x81\x8d\xb9\x56\x18\x4f\xd6\x83\xa0\x77\x9d\xc9\xc6\xc2\xaa\x57\xd3\x05\x89\x0b\x5d\x2e\x71\x36\x82\x53\xba\xb1\xf3\x8c\x4f\xdf\xfd\x76\x70\xab\xdd\xaa\x03\xef\x88\x41\xde\xa6\x2f\xeb\xea\xb5\x59\x92\x24\x09\x1b\x78\x5a\x78\xc2\x9b\x17\xbc\x6e\x85\x27\xdf\xee\xc9\x45\x17\x07\xed\x11\x00\xf0\x02\xd5\xa9\xdc\xd8\x87\x95\x8b\x8b\x14\xf4\x31\xa7\x64\x35\x72\x0e\x36\x89\xd0\x44\xfb\x92\x27\x75\x57\x9c\x0d\x33\x95\x53\x7a\xa9\x48\xde\x00\x8c\xab\x22\x9b\xb6\x15\x0f\x74\x82\x25\x34\xdd\x0d\x3c\x4f\x74\xf2\x51\xd0\x34\x09\x4c\x1b\xab\xbd\x02\x67\x88\x04\x25\xdb\x37\x9e\x31\x02\xae\x60\x00\x1b\x24\x68\xf2\x75\x7a\x95\x11\xfe\x1b\x79\xfb\xc9\x12\x97\x5c\xb7\x73\x45\xa1\xd1\xe3\x8a\xab\x80\xc9\x45\x06\x63\x91\xef\xbd\xfb\xc9\x19\x13\xab\x66\x7d\xc4\xe5\xcc\x62\x0f\xc7\xd6\x54\x07\x10\x2d\x5e\x79\xee\xb5\xac\xf9\x2c\x57\x90\x65\xb9\x62\x9d\xe4\xb2\x97\x18\x1a\xe4\xe7\x0c\xb9\x22\x7b\xac\x73\x4c\x59\x8a\x42\x1a\x19\x24\x33\xb3\x99\xba\xbd\x87\x5d\xf6\x7e\x89\xd8\x28\x9c\xc9\x63\x08\x01\xd3\x3b\x28\x63\xe2\xed\x6f\x4c\x8e\x18\xcd\xdc\x69\xc7\x10\x3c\xd4\xde\x80\x98\xb5\xf1\x46\x21\xb3\x58\xaf\x57\x08\x94\xc7\xee\x56\x85\x10\xe1\xd6\xee\x60\x07\x6a\xb1\x49\xda\xac\xd1\x8e\xb2\x6a\x0a\x59\xd5\x90\x3f\xda\xbe\xbb\xe6\x91\x6e\x78\x4d\xcb\x15\x87\x0e\x2a\x28\x35\xb7\x60\x66\x33\x5a\xf1\x96\x5b\x81\x66\x06\xea\x9c\x08\x7d\x28\x71\x8a\x5e\x43\x9f\x01\xd4\xb5\xad\x43\xf4\xbe\xcc\x9b\xc5\x46\xb7\x62\xa0\x6e\x77\x00\xac\x5b\x59\xe4\x13\x93\x43\xb2\x6c\xd1\x96\x64\x10\x73\x89\xdc\x51\xa2\x32\xcd\x33\x41\x64\x8d\xd9\xe1\x99\xc3\xd8\xa6\xc5\xee\x92\x74\xc4\xbc\xef\x84\x84\xad\xb8\x15\x32\x90\x8f\x38\xb8\x2a\x96\xd4\x8d\xe1\xc2\x27\x00\x5c\xc9\x58\x16\x52\x64\x13\xb1\x2c\x8b\x25\x68\xbd\x82\x89\xaf\xe3\x18\x48\x1e\xaa\xd4\xda\x61\xdc\xdd\xa9\x0b\x66\x85\x0b\x43\xa1\x5a\x09\x2b\x2a\x75\x40\x76\x24\x0e\xb6\xd2\xc3\x9b\x66\xdc\x15\xa9\x4f\x5d\x0b\x55\x25\x90\xda\x1a\xa5\x4e\xb1\xa8\x6d\x59\xcf\x73\x8b\xfe\xd4\xa4\x2f\x39\xe0\x75\x03\xc0\xb8\x40\xa6\x14\x39\xcc\x88\x2f\x89\x94\x6b\x4e\x94\x23\x43\xdf\xd7\x46\x73\xd4\xdb\xe0\xbb\xa4\xb9\xf7\x8c\xb6\x3e\x06\x49\x19\x6e\x41\x50\x1f\x6d\x19\xbd\xf1\xb4\xf6\x2b\x8c\xec\x58\x0f\x6a\x4e\xae\x17\x72\xa6\xd3\x10\xb1\x5a\xc9\x0f\x3f\x79\x04\xe1\x48\xdb\x3a\xd5\x3e\x14\xb7\x64\x00\x25\x70\x35\x34\xfa\x65\xb9\x62\x7b\x74\xe1\x80\xd7\x78\x00\x83\x09\xd1\x09\xaa\x41\x56\x4e\xf3\x61\x4c\x9f\x45\x96\x4e\x4b\xeb\xdc\x83\x85\x6c\xcb\x04\xfb\x70\xeb\xbc\x62\x09\x92\x73\x45\xd1\x1c\x30\x5b\xa2\x03\x54\xc8\x3a\xd1\xa2\x64\x9d\x29\x0a\x4e\x6e\xa3\x65\xa4\xad\xa1\x01\x13\x63\x9d\xa6\x21\x68\xd3\xcd\x39\x18\xb7\xe2\xac\x6f\xf7\xe4\x82\x0d\xaf\xe1\x04\xcb\x96\x4d\xb6\x82\xa8\x3e\x01\xf2\x3e\xa2\xbd\x26\x44\x4c\x4d\x26\xe9\xd5\xa5\xd3\x21\xad\x41\x42\xba\x5d\x82\xc7\x9f\x0c\xd9\xb1\x0d\xc6\x49\x00\xba\xf6\xd9\x09\xdb\x35\xb7\x1b\x4b\x5b\x3a\x6a\x84\x67\x3b\x54\x13\x10\x2b\xe5\x03\xf1\xa4\x7a\x78\x85\x3d\x3b\xd9\x41\xb1\x65\x8a\xec\xe2\x42\x56\xe7\xa9\xd0\x91\x38\xb0\x67\x85\xd5\x31\x72\x0b\xca\x6c\x79\x8f\x05\xf3\x58\x75\xa4\x7c\x2c\x57\xe4\x1d\xac\x70\xc2\x6c\xa3\x43\x4d\xcf\xc2\x89\x27\x34\x86\x82\xdc\xb9\x92\x3a\xfc\x2e\x09\x3e\x9b\xb5\x86\xa0\x9d\xd5\x1d\x08\x63\x27\xb8\x02\xed\x18\xba\xf9\xbc\x05\x02\x57\x5a\xb8\x00\xf4\x90\x81\x13\x09\x21\x3d\x18\x37\x7b\x03\x91\xc1\xa5\x19\x26\x02\x84\x1c\x2f\x98\xab\x74\x85\x13\x89\x6b\x19\xec\x7e\xd3\x21\x18\xb2\x8f\x90\x9b\x96\x3d\x4e\x1f\xa2\xe7\x0e\x78\xca\x68\x71\x47\x57\x4b\x22\x42\x22\x9c\x40\x5f\xaf\x80\x95\xd9\x7e\x22\x13\x1c\xf6\x6b\x36\x32\x55\xb4\x59\x9f\xc2\xc2\x95\x56\x29\x76\x46\x0d\x99\x06\x9f\x66\x3f\x92\x94\xae\x9b\x63\x16\xe5\xae\x98\x9f\xd6\x8c\xd0\x3a\x13\x31\xdd\x05\xa1\xf9\x46\x85\x15\xf1\xa0\x28\x2f\x4b\x43\x9b\x3e\xba\x94\xc6\xc2\x0d\xc6\xee\xa8\xca\x7a\xe8\x1b\xc6\x80\xbf\x15\x1b\x7d\xf5\x43\x1f\xf1\xe8\x67\xf3\x3f\xff\xb0\x9f\x7a\xd0\x8f\x3d\xfa\x11\xbf\xfd\x76\x7e\xe7\x1d\xbf\xf1\x8c\xf2\x95\x6f\x7e\xfe\x9b\xe2\x8b\x9f\xfe\xe9\x9f\x4d\xf9\xdf\x11\x1b\x3d\xf6\x05\xef\xf6\x5e\xf7\x7e\x97\x3b\x9f\xfa\xaa\x07\xc4\x1f\x7d\xf4\x23\x7e\xf8\x43\x7f\xe2\x99\x77\xf2\x7f\x3b\x1e\xfb\x33\xff\x68\xff\x3f\x5f\xf6\x82\xd7\x3d\xe8\xf3\x6f\x28\xbd\xd7\xfb\xcb\x57\xde\xff\x3b\xdf\xf8\xc5\x5f\xb4\x7c\xfe\x1d\x6f\x7f\xfe\x9b\xee\xf9\x86\xb7\x7e\xf7\x57\xf9\xb7\xdd\xed\x45\x0f\xa0\xbf\xfd\xc0\x6f\xfd\xeb\x7b\xc3\x1b\x3d\x88\xe2\xbf\xfa\xdc\xcf\x7e\xf6\xef\x7c\xcc\xab\x7e\xf2\x97\x1e\x23\xef\xf5\x84\xdf\xf8\xea\x2f\xf9\xa8\xd7\x7c\xd2\x13\xff\xe5\x83\x9e\x78\xe7\x9d\xaf\xfd\xca\xf7\xfc\x80\x3f\xb8\xa1\xf4\x4d\x8f\xff\x99\x67\xbc\xe2\x8f\xff\xe3\xd7\x7f\xb1\xb8\xe7\x63\x5e\xf8\x07\x8f\x7e\xdd\xdd\xee\xff\x2e\x7f\xfe\xd9\x4f\xbe\xe3\x15\x5f\xb7\xbd\xf8\x37\xdf\xe5\x73\x9f\xfd\xa2\x1b\x4a\x7f\x7f\xbc\xe2\xa3\x9f\xc5\x1e\xfb\xcc\xef\xfa\x94\x67\xff\xc0\xd7\xbe\xf6\xe7\x7f\xe3\x61\x1f\xf3\xfd\x1f\x18\x5e\xf4\xc2\xf2\x8a\xf7\xff\xe3\x17\xfe\xd9\x2f\xbd\xf1\xe3\x6e\x28\x7d\xd6\x43\xde\xf6\x85\x7f\xf5\x8a\x27\x7f\xc3\x73\xbe\xfe\x21\xaf\xfd\xa3\x2f\x2c\x4f\xf8\xa9\x27\xff\xf2\xbd\xef\x40\x7f\xf9\xef\x7f\xf7\x03\x7e\xe3\x8e\xc7\x7e\xca\x8f\x7d\xc3\x0d\xa5\x1f\xf2\xd2\xcf\xf8\xcf\x1f\xf6\xe0\xe7\x7f\xe9\x9f\xdd\xef\x05\xed\x1f\x7c\xcd\x0f\x7d\xc5\x7d\xff\xe1\x23\xfe\xe9\x71\xbf\xf1\x80\x7f\xf6\x7f\x5e\xff\x91\x8f\x79\xcd\xe3\xde\x76\x43\xe9\xfd\xfe\xf1\x97\xbf\xf0\x3e\xe3\xa9\x8f\x78\xce\x03\xff\xea\x0b\xde\x80\x3f\xf5\x15\xbf\xf0\x82\xc7\x7c\xe0\xaf\xbc\xf4\xf3\x1e\xfc\x89\xbf\xf9\xfb\x1f\xf5\x41\xf7\xfe\xb9\x8f\x79\xd2\xdf\x7e\x09\xb7\x7a\xaa\x7f\xe7\x4b\x78\x57\xd2\xdf\xfe\xf7\x5e\xf2\x99\xff\xe1\x63\x9f\xf4\x45\x8f\x78\xfa\x1f\xbe\xec\xdb\x3f\xeb\x09\x7f\xf1\xfa\xa7\x3d\x21\x7f\xfe\x73\x1f\xf0\x88\xaf\xc8\xcf\xf9\xcb\xef\xbd\xa1\xf4\xce\x07\xfd\x8f\x5f\x79\xea\x9b\x1e\xf0\xa3\xaf\xf9\xda\x9f\xfa\xe0\x47\xec\x1f\xf6\xcc\xff\xfe\xf4\x4f\x71\xcf\xfa\xbf\xaf\x7a\xee\x7b\xbc\x6e\xf9\x93\xd7\xbf\xe4\x97\xdf\xf7\x86\x52\xf6\x35\xef\xf6\xa6\x97\xc0\x1f\x78\xf0\x03\x9b\x35\xcb\xd7\x88\x2f\x79\xd8\x3f\xff\x20\xf6\xcf\xfb\xcb\xbf\xe7\xc5\xef\xff\x9a\x1f\x7f\xfc\x6f\xfc\xc8\x1f\xde\x50\xda\x3e\xfd\x27\xbf\xe4\x55\xdf\xf7\x5d\x1f\xf8\x7f\x7e\xe2\xd7\x9e\xfc\x15\x8f\x79\xf3\xb7\x7f\xd3\xd7\x7c\xe9\x8f\xdc\xed\x33\x7f\xf7\xaf\x3e\xf6\x4f\xef\xf5\x33\x4f\xfa\xe9\x2f\xbb\xcf\x0d\xa5\xef\xfe\xaa\xbf\xd8\x1f\xfd\x8b\x2f\x79\xd4\x8f\xfd\xff\x3f\xe2\xfd\xff\xef\x07\x7e\x54\x78\xf3\xf3\x3e\x95\x7c\xd0\x7f\x7e\xd6\x57\xbf\xe8\x8f\x1e\x7f\x8f\x3f\xfd\xf6\x0f\x10\x37\x94\xbe\x31\xbe\xe2\xe3\x1f\xf9\xac\xc7\xfc\xb7\xc7\x3d\xe4\x5f\x3e\xf9\x63\x3e\x44\xfc\xe6\x37\x3c\xe3\x81\x6f\x78\xe6\xb7\x7e\xec\x87\xfc\xe0\x2f\xbd\xec\xc5\xbf\xfa\x25\x9f\xf5\xaf\x6f\x54\xa7\x3d\xf2\x99\xe6\x9b\x5e\x35\xbf\xe7\xee\xaf\x7f\xe6\xdd\xbe\xf6\x45\x5f\xce\xed\x6f\xbd\xcf\x27\xdd\xff\x4f\x7e\xf9\xed\x5f\xc7\xfe\xd3\xbf\xf9\x4f\x6f\xfa\x8b\xdf\xbe\xf1\xb3\xfe\xe4\xcf\xde\x9b\xbf\xe0\x7d\x3e\xf3\xbb\xbf\xfa\xef\x7f\xfd\xa3\x3e\xef\xa5\xf7\xfa\xca\xcf\xb9\xc7\x0f\x3e\xe5\xaf\x9f\xfd\xd7\xf2\xc5\x6f\xb9\xef\x37\xfe\x6f\xfd\x69\xef\x54\x7c\xdd\xea\xa9\xde\xe6\x63\x56\xc1\xe0\x13\x8b\x69\xb5\x64\xcf\x00\xe5\x3d\x23\xb3\xcd\x76\xe0\x9a\xc5\xe8\xa2\x0c\xd5\x74\x8d\xc9\xae\x3d\xd1\x75\x46\x8f\x2e\x61\xe9\xac\xde\x8e\x19\x28\x3d\x96\xc8\x4f\x43\x31\x2a\x0c\x3a\x48\xd5\xc4\xa5\x00\x56\x55\x44\xa2\x40\x93\xd6\x4c\x2c\x5a\xfd\x86\x22\xb8\x62\x1b\xa9\xb0\x73\x3b\x34\xc2\xcc\x37\x99\xce\x00\x69\x02\x7d\x80\x02\x61\xa5\x03\xab\xcd\x42\xd6\x68\x5a\x77\xb6\x82\xdd\x7a\x85\xa4\x58\x2f\xb1\x8a\xe8\xb2\xb2\x79\x36\x3a\x19\x2a\x42\x24\x90\xa9\xdd\x3a\xb1\x1c\x1d\xa0\x18\x31\x0b\xde\x3c\xc6\x3b\x66\xbc\x96\x2c\xf1\x64\xe5\x0a\xb0\x24\xf9\xd3\xec\xab\x86\xbc\xb1\x80\xe9\x62\xa0\x8f\x08\x80\xe0\x91\x3c\xb6\x13\xf2\x43\x07\x3e\x81\x58\xdd\xb1\x2e\x8d\x4d\x05\xd8\x72\xc5\x01\x07\x07\x16\x36\xe7\xbf\x71\xe0\xee\x70\x48\xc0\x4f\x08\x7d\xe0\x87\xdb\xe3\x42\xd9\xd9\x4b\xdf\x0e\xe4\xd6\x94\x59\x2a\x07\x76\x78\x5e\x01\x53\xf0\xbd\x44\x75\x0c\x87\x1a\x96\x8a\xb9\x20\x6a\xaf\x78\xd6\xac\x45\xeb\x18\xf0\xaa\xba\x1e\x0a\xa6\x0d\x8e\x11\x76\xb6\xd7\x00\xae\xd0\x16\x54\x61\x4f\x08\xf4\xb4\x79\x8b\x81\xe8\x85\x91\x75\x9b\xac\x08\x89\xf7\xda\xc1\x21\xd0\x92\x39\xac\x87\x14\xba\xec\x72\x2c\xa6\x71\x74\xd3\x0c\x7f\xab\x3e\x7c\x9b\xa9\x0d\x71\xd6\xfd\xa0\x21\xd8\x5a\x9a\x07\xa4\xec\x5b\x3c\xd7\xee\xcf\x82\x30\x11\x3e\x14\x99\xed\xc8\x11\x27\x49\x56\x55\xdd\xc1\xf0\x25\x88\xdb\x00\x45\xa7\xa8\x24\xc0\xa7\x57\x7b\x4d\x82\x2e\x46\xf5\xae\x90\x18\x7c\xba\x7d\x41\x67\x96\xed\xc8\xda\x1e\xec\x50\xee\xa4\xeb\xb8\xc2\x5c\x56\xd4\x4a\x68\x29\x07\x5a\xea\xda\x31\x38\x2a\xef\xe8\xa8\x63\xcd\x7e\xa7\x42\xe2\xb2\x68\x7e\x9a\x55\x1d\xa1\xb1\x48\x08\x1a\x7a\x5e\x41\xb0\x6c\xa2\x37\x56\x57\x6e\x63\x47\x72\x03\xd8\x1e\x75\x86\xa8\x76\x8a\x68\x9f\xd6\x2a\xb6\x9f\x2e\x54\x70\x14\x3e\xa3\x95\x60\x5f\x2f\x71\x80\xe1\x3b\x28\x3e\x83\x25\xe2\x4a\x7c\x2e\x46\x99\x0d\xb0\xb8\xb1\x5a\x0f\x17\x10\xdc\x14\xb2\x58\xc5\x2a\xb6\x39\xe2\x71\x66\x27\xc0\x15\x09\xe7\x71\xa8\x7d\x56\x9e\x52\xcc\x4e\xf7\xa5\x5b\x9c\x37\x6d\x3d\x0b\x68\x76\x0b\xf1\x4e\xf6\x3a\x12\xca\x61\x20\x10\x26\x8a\x8d\xa6\x2b\x08\x16\xba\x26\x1c\x19\x1a\x12\x94\x75\xd3\x94\xa6\x64\xa1\x4f\x18\x91\x56\xe1\xee\xf0\x8e\xbb\xa6\x28\x4d\x2b\x17\xeb\x3a\x1c\xa7\xbb\x64\x85\xa3\x78\x48\xf0\xbe\xb0\xde\x54\x11\x09\x50\xaf\x26\x4b\x5c\xcd\x48\xb9\x2f\x45\x49\x55\x67\x64\x1b\xc8\xcd\x4c\x89\xa9\x2d\x39\xdd\xdc\x5c\x6e\x35\xb9\xdd\x6e\xad\x7a\xa8\x03\x23\x17\xf7\x78\x88\xba\x4d\x55\x3c\x26\x0e\x13\x14\x34\xf0\xdd\x9e\xb2\xe7\x24\x26\x62\x30\x17\x11\x9d\xe9\x8c\x5c\x41\xbe\xf3\x65\x6f\xa2\xc4\x0a\x11\x4c\xfb\xc8\x8b\x8b\x73\x5b\x8c\x5a\xbc\x4e\x68\xee\x64\xd0\x18\x07\x93\xe1\xac\xf6\x5c\xb1\xaf\x2d\x9b\x2b\xac\x8f\x59\xe7\xdd\x5a\x44\xf7\x58\xf1\xb9\x03\x09\x78\x73\x46\x60\x9d\x39\x47\x8a\x4d\xcd\x4d\xef\xd8\x56\xa4\x6a\xd8\x38\x3c\x7b\x2a\xe0\x8a\x9d\x28\x09\x37\x72\x6c\x6b\x1a\xde\xa4\xe4\xb2\xa2\x5b\x14\x50\x52\xcc\xd6\x45\xa8\xdd\xee\xd3\xe0\x4c\x76\x40\x6a\xd1\x68\xc0\x88\x00\xbf\xe2\x3a\x6a\x76\x9d\x1b\xd6\xa1\x84\x0d\x77\xe8\xf4\x18\x8c\xc0\xa5\xe4\x6c\xdc\x1e\x3a\x39\xb2\x67\x70\x4c\x33\x28\x3c\x07\x8c\x73\xc8\x2b\x80\x23\x7e\xc6\x1a\x72\x08\x2e\xe0\x82\x2c\x6b\xdc\x6e\x7b\x0c\x2d\x3b\xb2\x34\x38\x12\xc2\x2d\x87\x3a\x41\x5a\xa9\xd0\xc5\x25\x15\xf2\xb8\x42\x0e\xc1\x24\x06\x07\x2c\x6d\x1e\xdb\x42\xd7\x89\xa6\x15\xbe\x2d\xe2\x34\xf0\x44\x92\x5a\xc3\xa6\x30\x69\x51\x2c\xaf\x73\xe5\xa8\xe2\xfd\x92\xbc\xa2\x56\xc2\x86\xd6\xb3\x9b\xbe\xaa\x75\xb7\xd5\xae\xda\xc8\xa3\xd9\x3e\x54\x0d\x13\x9c\x07\x19\x2b\x6e\x65\x35\xfb\x6a\xec\x7a\xf2\xb9\xdc\x2c\xca\xb8\xd5\x5d\xef\x36\x37\x97\x56\xed\x00\x56\xaf\x18\x17\x5f\xe3\x9e\x61\x4d\xb1\x1c\x52\x92\x1d\xe7\x55\xc7\xfd\xac\xc2\x9f\x3e\x79\x76\x60\x9a\xe5\xb4\x99\x5f\x41\x2a\xa0\x81\xc2\x56\x43\xed\x36\xf3\xed\x70\xf8\x88\xc3\xa0\xa8\x64\xe6\x75\x01\x6a\xf7\xc4\x99\x9a\xba\xd2\x28\x18\x70\x24\x4c\xd2\x72\xc5\x39\x19\x34\xcb\x42\xe5\x26\x64\x77\xd3\xf2\x4e\x73\xe7\x33\x51\xcf\xb4\xd6\xbb\xa7\x47\xc5\x19\x15\x71\x4a\x30\x12\x5b\xaa\x12\xcb\x25\x69\xab\xb6\x30\x16\xdc\x36\x36\xb4\x96\xe4\x7a\x91\xd1\xd4\xea\x53\x3d\x3c\xc7\x70\x14\x0b\x46\x45\x9c\x1a\x66\xcf\x14\xd3\xa0\x21\x8a\x2b\x44\xad\xf5\x44\x93\xc4\x58\x60\x54\x9e\xed\x69\x99\x78\x8b\xeb\x11\x81\x5b\x32\xc0\x27\xc9\x43\xae\x2b\xce\x66\x34\x9f\x63\xa8\x62\x35\xe5\x8a\x2c\x96\x1e\xa2\x48\x58\x69\x2d\x57\xdb\x74\x5c\x5d\x90\x62\xa3\x56\x57\x6f\xfa\x8c\x2a\xea\x61\x55\xa4\xa3\x5a\xbd\x6e\x5b\x5d\x45\xb8\x04\x0f\x26\x0d\x0e\xab\x20\x9b\x76\x4f\x6d\x30\xd9\xb8\xc7\x1a\x00\x87\xed\xba\x95\x75\x67\x6d\x51\x67\xa0\x08\x8c\xe4\x9d\x58\x17\x92\x2e\x49\xd4\x83\x92\x1a\xac\x07\x9e\xb2\x4f\x09\xa5\xe1\x2b\x4c\xc1\x57\x55\x3d\xeb\x0b\xae\xad\xf9\xd4\x6d\x91\xe6\x98\x9b\xe1\x06\x8e\xe9\xe8\x4d\xcd\xe5\x56\xe8\xd0\xed\xa6\x36\x84\xf6\xa6\x55\xa7\xab\x42\x1a\xac\x6d\x4c\xbc\x95\xfd\xf0\xb8\x8e\x9a\xab\x3e\xac\x6c\x59\x44\xbd\x0e\x2e\x02\x88\x85\x8c\xe5\x82\x0b\x09\x1b\x16\x95\x50\xb8\xd0\x2b\x59\x5b\xad\xd3\x25\x53\xf7\x45\x89\x64\xd0\xee\x5d\x8a\xbb\x5a\xd5\xbe\xb7\x34\x5c\x5f\x4e\x23\x10\x2f\x57\x68\x6a\xca\xec\x52\xc2\x26\x14\x0d\xd4\xa6\x28\x6d\xf2\x29\x04\xa7\xd5\x00\x77\x9d\x5f\x90\xf1\x53\x82\xb5\x09\x50\xa4\x9f\xe8\x24\x73\x5e\x41\xf3\x4c\x54\x8c\xe1\x51\x65\x55\x5a\x18\x92\x29\xb2\x98\x5d\xa5\xb0\x9d\x1b\x77\x23\xdd\xf5\x82\xe1\x73\xab\x88\x0d\xd4\xb5\xe6\x73\x1d\x57\x34\x5a\x5b\x21\xef\x30\xcf\x99\xa4\x3c\x51\xa3\x87\x35\x24\x27\x0f\x8d\x4c\x9c\x8a\x7d\xe1\x59\xd5\xd3\xd3\x45\x0c\x1e\xc5\x1e\x45\xf3\x97\x04\xa8\x96\xae\xf0\x39\x77\x08\x2b\xa6\x27\x0b\x7c\x68\xb4\xc9\x70\xf6\x73\x1d\xf1\x9c\x60\xe2\xd8\xea\x5a\x3a\x81\xeb\x0c\x20\xab\x7e\x05\x16\xc7\xac\x47\x8e\xcc\x02\x12\x0b\xd2\x31\x1f\xc8\xee\xec\x28\x87\x5c\x18\xd2\x4c\x05\xbe\xa5\xe4\xa4\x26\xde\x42\x3c\xb7\xd0\xa6\x9b\x17\x18\x8b\xb3\xc8\x65\xc4\x59\xe8\x45\x2e\xc2\xd9\xc6\xba\xa8\xd9\x86\x20\xf5\xe8\x83\xee\x21\x86\xd4\x75\xaa\x67\xce\x82\x95\xd0\x80\x18\xe9\x66\xc5\xd7\xad\xf0\xe4\xdb\x1d\x37\x35\x70\x36\x04\x78\x5f\x97\x6e\xc8\x76\x0e\x45\xd5\x99\xb6\x5d\xe3\xe9\xc7\xc2\x24\x13\x27\xa5\x98\x80\x68\xd5\x90\x2d\xce\xed\x8a\x40\x44\x8e\xc7\x09\xbd\xa7\x04\x1e\x05\x2f\x06\x64\x2c\x8c\x53\x24\xc0\x85\xe9\x40\xd2\xc1\xd1\x51\x4c\xde\xf0\xb6\xd0\x59\xd2\x12\x75\x3b\xae\x18\x3c\x35\x42\x3a\x63\x39\x00\x52\x33\x08\x8e\x18\x07\x65\x15\x94\x8c\x44\xe4\xc8\x87\xd9\xfc\xce\xe1\xda\xd4\x09\xc4\x3e\xc6\xe6\xc8\x25\xcb\xf8\xa7\xa9\x0a\xbb\x42\x06\xb5\x43\x53\x26\x3d\x27\xd1\xae\x63\x22\xbf\xdb\x7d\x17\x15\x9a\x81\x96\x7c\xc0\xa5\x08\xae\xa9\x87\xfa\x0a\x39\x29\xc7\x65\xe1\x8e\x03\xe1\x87\x3e\x30\xb3\x1a\xa1\xd4\xd4\xb6\xb7\x5c\x8c\x63\x2a\x6b\x49\x1b\xb0\xa3\x6b\xb5\x9e\x7d\x2f\x0b\x36\xe2\x8a\x2c\x3b\x15\xf5\xc4\x84\x84\xb6\x1e\x45\x8a\x85\xbb\x43\x8e\xd9\x85\x8b\xf5\x4c\xdd\xed\xac\x74\xc1\x76\x68\x3d\xda\xd4\x41\xf6\xb5\xcc\x2b\xac\xde\x19\xcf\x6d\xa9\x33\x83\x8d\x8b\x68\x35\xad\x80\xf2\xec\x46\xd3\x71\x22\x1d\xa6\xcf\x1b\xd8\x2b\x34\x7a\x6c\x66\x35\xd1\xf6\x8d\x82\x2b\xa6\xb8\xe0\xc8\x3e\xdb\x4c\x52\xc7\x20\x0e\xbe\xb2\x3a\x75\x3e\xe9\x21\x96\xad\x9c\x1d\x8b\x94\x43\x91\x04\xf0\x83\xf3\x41\x96\xbc\xc6\x1b\x44\xad\xef\xdc\xb2\xbb\x05\x03\x75\xbb\xb5\xea\xf8\x54\xe2\x9c\xab\x18\x16\x3b\xed\x74\xe2\xf8\xe8\x2e\x1c\x0e\x2f\x92\x32\x78\x22\xed\x22\x9a\x3a\xb7\x60\x35\x03\x54\xb6\x4b\x2c\x95\xd6\x62\x77\x45\x8f\xa6\x2c\x85\x31\x1e\x2b\x9a\x1d\x9b\x1d\x74\x9c\x46\x07\x29\xc3\xc3\x04\x57\x17\x26\x15\xf9\xff\x68\xfb\xf7\xf0\x7f\xa3\x73\x3c\x10\xcd\x35\x5a\xb4\xd9\x75\x48\x1a\xaa\x04\x29\x21\xaa\x5a\x59\xeb\x5d\x6b\x85\x0a\x1a\x54\x8b\x74\x6b\xb7\x63\x8a\xb1\x0e\xef\x7a\xd7\xe9\x5d\xe7\xb5\xde\xb5\x96\xd8\x55\x69\xc4\x60\xec\x06\xa5\x28\x43\xb1\x63\x9c\x85\x60\xe2\x30\xaa\x44\x10\x26\x3a\x0c\xe3\xb0\xe3\x9c\x3a\x0c\x43\x08\x06\xb3\xf7\x95\x7d\x5d\x75\xfd\x2e\xbf\xb9\xae\xdf\x3f\xbf\xf7\xff\xe7\x8f\xef\xf7\xfd\x7c\x3e\xf7\xfb\x3c\xf7\x73\xdf\xf7\xc3\x0f\x86\xb7\x32\xf3\x1d\xce\x7c\x7a\x0a\xb6\xb6\xfd\x22\x38\x10\x8b\x4c\x70\xb5\xaa\x0d\xd4\x8b\x02\x26\x83\x3e\xc8\x15\xb4\x71\x5a\xca\xcb\xd1\xa4\xb4\xba\xf6\x5b\x68\x65\x23\x8a\xf2\x87\xc7\x04\xb2\x49\x37\x8b\xf5\x70\xd4\x35\x03\x25\x4f\xd7\x86\xab\x2f\x4d\xc3\xc0\x09\x36\x9a\xc9\x6d\x8b\x63\xdd\xa2\x12\xa7\x01\xd1\xa3\xee\x97\x55\x82\xb3\x45\x40\xa2\x18\x96\x2e\x7d\x23\xcc\x1c\x8d\x64\xbf\x03\x7d\x98\xda\xcf\x95\x27\x6c\x83\x92\x7c\x47\x4a\x01\xac\xbb\xc3\x62\xb8\x25\xe7\x45\xd3\x14\xd7\x01\x41\x5f\x86\xbb\xc1\x81\xd2\x90\xcc\xb4\x8a\x02\x38\x57\xe0\x8d\xe0\x71\x37\xb7\x74\x2e\x2e\xd6\x3d\xf3\xb0\x2a\x3c\x2e\x7f\xed\x97\x56\x54\xcd\x21\x6b\xa4\xc7\xe8\xdb\x4c\x95\x33\xa2\xa7\xed\xa3\x0c\x87\xcc\x99\x05\xbd\x23\xfb\x77\x84\x4b\x6f\x23\x26\x1e\x2f\x74\x22\x44\xfd\x61\x48\xb1\xd7\x70\x51\x1a\x4b\xd4\x29\xac\xe6\x7c\x3a\xc8\x03\xb0\x60\x3b\xcf\xc0\x1e\xb6\xf0\x3e\x6a\x67\xfd\x98\xc1\x65\x4c\x40\x34\x5f\x5a\xa9\x69\x53\x08\x8b\x6c\xb4\x84\x86\x96\xe5\x84\x0d\x46\x0d\x45\xbd\xa3\x03\x4c\x2d\x1c\xda\xa6\xd7\xfb\x1d\xf7\xdb\xe8\xe5\x00\xb7\x2a\xc2\x3c\xd0\xe6\x93\x76\x00\x34\x7b\x20\x4e\x94\xdd\x72\xf5\x61\xaf\x2d\xef\xa5\x43\xcd\x98\x03\xf4\x6a\xc1\xdf\x11\xa6\xcd\xd2\x68\x8e\xd7\x30\xe9\xe9\x03\x82\x57\x69\xa4\x17\x86\x33\xad\xd9\xed\x69\xc3\x27\x27\x3e\x99\xcb\xa3\x62\x81\x0c\xd6\xee\x94\xdd\x91\x95\x50\x01\x11\x03\xf3\x03\x97\xca\xc9\xce\xdd\x90\xa2\xc8\x33\x20\x09\x70\xd9\x3a\x70\xd2\xad\xc9\x62\x39\x89\x09\x6e\xf6\x9d\x53\x7b\xc7\xfa\x35\x16\x00\xfd\xba\xc4\x40\xd0\x10\x8c\x9d\x38\x29\x40\x7c\x92\x6c\xdd\xb2\x5c\xec\xd2\x75\xb0\xa5\x90\x69\x50\xac\x2d\x89\xd2\x2d\x3f\xa8\xae\xe0\x1e\x76\x76\x48\x86\x76\xba\x9d\xc3\xa6\x46\xf2\x19\xbc\x44\xd4\x16\x30\x49\x2d\x26\x9f\x33\xf6\x2a\x82\x41\x44\x0c\xad\xef\x10\xf8\xca\x55\xd8\xf2\x96\x07\x47\x75\x73\x8a\xf1\xbe\xed\xdd\xb1\x1d\xcf\x7c\x84\x43\x55\x27\x86\x94\xfb\x88\x3d\xe9\x6c\x24\xf0\x8d\xdf\x11\x8c\x39\x1a\xb0\x74\x53\x0d\x60\xb4\x1d\x47\x8b\xb2\xd3\x70\x2d\x98\x1c\x6e\x1c\x0d\xab\xf7\x8a\xb6\x53\x6c\x22\x9e\xc2\xba\x09\x3c\x67\xea\x21\xc5\xd7\xa3\x74\x59\x7f\x41\x6c\xf4\xd9\xbf\xfb\x6e\xef\xfe\xe4\xa7\x67\x21\x5e\xf8\x6b\x5f\xfc\x09\xf1\xfb\xcf\xf7\x7f\xd1\x5f\xfd\xf9\xff\xea\x17\x7f\xe2\xff\xf3\xbc\xdf\xfd\xdd\x8f\x78\x93\x8f\xfe\xa3\xcf\x7f\x30\x87\xe9\xc5\x2f\x78\xff\x1f\xfc\x98\xef\x78\xbf\x67\x7c\x59\x7a\xc1\x07\xfc\x6f\xf0\xe5\xff\xec\x1d\x7e\x9e\x3c\xe1\xb3\x3e\xe5\x33\x5e\xfa\x9c\x27\x7d\xc3\x4b\xfe\xc3\x7a\x50\xc0\xf3\x03\x1f\xff\xb5\xf8\x7d\xfe\xf6\x0b\xdf\xec\xeb\xed\xcb\xdf\x67\xff\x0f\xc7\x2b\x5e\xf9\x57\xff\x25\xfa\xf4\x77\xf9\x4f\xdf\xf9\xc4\x97\xff\xbb\x5f\xf8\xe4\x37\x7e\xef\xf6\x40\xe9\x8b\xf8\x2f\xbc\xc3\xd3\xde\x53\xbd\xf4\xe9\xea\xbf\x7d\xb7\x27\x7f\xcd\x1f\xfe\xac\x7e\xf5\xb3\x3f\xf7\x19\x3f\xfb\xf4\x8f\xfd\x10\xf8\x33\x2f\x7e\xfa\xf7\x83\xf3\x81\xd2\xcf\xf0\xcf\x7a\xfe\xff\xf0\xf9\xcf\x7c\xd6\x0f\xea\xaf\xfc\x95\x17\xeb\xbf\xf9\x6f\xfe\xc4\xfc\xcc\x87\x7c\xe3\x4f\xbe\xfa\xab\xdf\x72\xbe\xd5\x07\xff\x9d\x37\xf9\xfe\xdf\x7f\xa0\xf4\x4b\x5e\xf2\x4f\x36\xf2\x3f\xbe\xfa\xc7\x7e\xf8\x2f\x7d\xcb\x47\x7e\x18\xfe\x4b\x1f\x1a\xe1\x8b\x5f\xf0\xdf\xfc\xec\x5b\x3d\xf1\x79\xfc\xad\xfd\x1f\xbd\xfe\xff\x78\xd1\x83\x07\xea\x3e\xe7\x6f\xfc\xc3\x0f\xa0\x7f\xf0\xc5\xd7\x6b\xbf\xe4\x55\xc7\xfb\xfc\xe2\x73\x9e\xe0\x3e\x81\x7f\x8a\x7d\xda\x0f\xfe\xf2\x07\x7e\xc2\xff\xe3\x57\x3f\xe1\x4b\x7f\xe3\x81\xd2\x5f\xfe\xfc\x6f\xb6\x2f\xfd\x42\xf2\x4f\x3f\xf4\x4b\xde\xf4\xc7\xbf\xee\x3d\x5e\xf2\x57\x9e\xfb\xed\x7f\xf0\xd6\xdf\x77\x7d\x46\xdc\x5e\xf3\xa6\xdf\xfe\xdd\x6e\x7f\xa3\x3f\x17\x1b\x3d\xea\xa9\x3e\xee\x90\x06\xef\xf7\xbe\x45\xb0\xf3\x02\x11\x3a\xc5\xb1\x00\x3f\xf8\xb5\x59\x8c\x99\x6f\x6a\xf4\x8a\x49\x50\x67\xdc\x60\x2b\xac\x00\x83\x6f\x09\xda\xcd\x27\x22\x20\x32\x69\x55\x45\x9e\xef\x7c\x64\x42\xea\x1c\x43\xf4\xd8\x41\x28\xc6\xf0\xa3\x5d\x72\xae\x85\x43\xed\x3d\x53\x77\xcb\x84\x0c\x34\x34\xab\x75\x64\xba\xac\x7d\xc0\x4d\xcd\x06\x1c\xbb\x0e\x43\xa3\xd9\x95\x74\xab\xec\xc9\xd7\x59\x82\xdc\xe4\x26\x0f\x5b\xc0\x1d\x4d\x2c\xcc\xc1\x50\x15\x77\x48\xf5\x50\xaa\x68\x4d\x5a\x60\x42\x4f\x45\xf2\x24\xbb\x2e\x74\x1f\xbb\xb4\x41\xa3\xd8\xc6\xce\x62\x8b\xb7\x64\x89\x43\x99\x42\x83\x9c\xb4\xc2\x0e\x07\x8d\x43\xa6\x66\x71\xc8\xa6\xf3\xd4\x05\x9f\xb8\x89\x4b\xef\x3a\x52\xbf\xf1\x08\x81\x44\xf3\x16\x37\xf7\x6c\xfb\x4a\xca\xe7\x0d\x36\xc3\x8f\x62\xaa\xb7\x76\xc7\x79\xed\x36\x99\x3d\x57\xe9\x02\x35\x08\x77\x37\xba\x02\xc7\x36\xb4\xbb\xe5\xf2\xbd\x77\x65\x8d\x68\xc0\xe8\x20\xf3\x3d\x1c\x82\x48\xc1\x42\xde\x65\xa4\x6c\xdf\x8a\x46\x20\x0c\x6a\x0b\xc9\xf9\xdc\xb2\x81\xb2\xdd\x12\xb2\x39\x34\xbe\xf6\x88\x10\x3a\xe3\x14\x49\xd5\xd4\x21\x38\x7d\xb8\x02\xc5\x47\x19\xba\xc6\x03\x04\xcd\xce\x99\xc7\x59\x15\x1f\x58\x98\x87\x57\x76\x8f\xc2\xe1\xc7\x0c\x2e\x8c\x1e\x11\x36\xc9\xc2\x29\xf0\x69\x03\x47\xe4\x1c\xad\x70\x5f\xeb\xd5\xb0\x76\x32\x14\xc6\x2a\x11\xd1\xf8\xad\x0b\xa3\xf3\x79\x87\x0d\x9e\xa9\x43\x65\x92\x7b\x3f\xca\xa1\x79\xb1\x34\x91\xad\x83\x46\x15\xba\xd8\x41\x10\x5f\xec\x2a\x6c\x5a\xbd\x11\x80\x15\xb0\x7a\x0e\x76\xc7\x97\xe8\x8c\xa8\xb5\x6d\x19\x74\x9a\xc4\x14\xdd\x7d\x61\xbc\x70\x6b\x07\x43\x74\x82\x24\xdb\x54\x01\xba\x0e\xd8\x8c\x6a\x2d\x57\xf9\x1d\x3e\x6a\xe6\x86\x38\xc4\xa4\xc0\xb9\x4b\x9c\x51\x63\xb5\x70\x9f\x62\xab\x03\xca\x91\xd6\x91\x68\x1e\xbe\x98\xab\x09\x22\x3a\xd0\x0c\x84\x3b\xdc\x48\x8c\x21\xc1\x64\x56\x42\x37\x97\x52\x66\x36\xda\xf3\x6a\x4a\x1c\x8a\xed\xb8\xb6\xd2\x8a\x55\x0c\xe0\x46\xf6\xe1\xd4\x1e\xe8\x0c\xb7\xa4\xc6\x4d\x5b\xaf\xcd\x65\xd9\x9c\x37\xed\xc4\x42\xbe\x61\xa4\x49\xd0\x4b\xbe\xeb\x0b\x4a\x1c\x2c\x9c\xb1\x99\x18\x27\x00\x8e\x5c\x17\xcf\x37\xfc\x15\xb4\xad\x60\xb8\x8d\xd4\xed\x2a\xf5\x7e\x86\xbe\x4e\x07\x4d\x6f\xfb\xa4\xe7\xe5\x09\x45\x5e\x26\xad\xb6\xc5\x10\xe3\x2b\xd8\x74\xb0\x3b\x58\xf5\x51\xa3\x30\x81\x2d\xa2\x1c\x8b\xc6\x21\x74\x14\x9f\x98\x8d\xaa\x74\xdb\xa8\x16\xa9\x57\x75\xc4\x8b\xb0\x19\x17\x24\x3b\xca\xff\x17\x56\xc7\x47\x75\x6e\x8f\x99\x55\x47\xb9\xc1\x49\xc4\xe6\xd2\x5e\x23\xd8\x70\x3c\x0e\x6f\xf7\x16\xe9\x91\xc0\x31\xc8\x0c\x22\x9a\xfd\x5a\x75\x1a\x18\xda\x6a\x62\x37\x77\xc8\x7c\xc8\x6e\xd8\x99\xb7\x78\xaa\x8e\x95\x2c\x72\xb1\x69\xd4\x6a\xa9\x7b\x5a\x77\x49\xe5\xb9\xdb\xb0\x3a\xa6\x6b\x2f\x56\xd2\x3d\x6f\xb7\x5c\xe1\x15\x4a\xb2\x78\x1e\x3e\x37\xdf\x70\x9a\x6c\x9d\x1d\x1b\x07\x92\x5e\x6a\x54\x6b\x36\xa4\x5c\x66\x43\x0d\xc1\xf2\x05\x8b\x24\x39\xdf\xb1\x2c\x73\xd4\xf3\xad\x61\x18\xfb\x55\x8f\x06\xa6\x03\x44\xd5\xd5\xf1\xd9\xf2\x95\xeb\x41\x46\x69\xdb\xe6\x1d\xbc\xd0\x00\xc7\x89\x45\x62\x77\xf8\xa8\xcb\x8e\x4e\x44\xaf\x9d\xfb\xc3\xcc\x0b\x0a\x26\x4c\x73\xd8\x4c\x39\x5b\xc8\x38\xed\x1d\xf9\x1d\x05\xca\x01\x32\xb0\x29\x7e\x84\x7a\xc7\xfa\xd2\x89\xc5\xd4\x96\x21\xe7\x38\x51\x7e\x24\x19\xba\x82\xc3\x1f\xd8\xda\xa2\x80\x3e\x41\xbc\x98\x75\x69\x6b\x82\x5c\x13\x0b\x5a\xee\x60\x0b\x58\x1e\xc9\x4d\x80\xf8\xd1\xd8\x25\xa8\xb6\xb5\x67\x47\xf1\x82\x3d\x68\x70\x9d\x2a\x35\x3c\x0f\x88\x80\x97\x7b\x88\x76\xe4\x88\xd2\x1d\xaa\x84\x33\xd3\xc8\x17\x97\x91\x25\x7c\x51\x4b\x84\x91\x3b\x82\x04\x32\x3a\x11\x06\x0c\xe6\x8d\xba\x31\xaf\x30\xcc\x4c\x4e\xd4\xea\xd9\xc3\x7a\x80\x47\xcd\x7a\x8f\x5b\x6c\x04\xba\xdd\x05\x6c\x97\x0c\x63\x1e\x11\x2d\x5f\xd7\x04\x51\x64\xa8\xd1\x70\xb8\x6e\x30\xf9\xd3\x6e\xbc\xd8\x96\xae\xac\x64\xe1\x77\xe8\xe6\xec\x4e\x4f\xb8\xf5\xb6\x41\xcb\x43\xdb\x43\x29\x85\x29\x46\x65\x9e\x8a\x8c\x5a\x11\x02\x3b\x87\x97\x42\xbe\xab\x8b\x4f\xa2\xfc\xba\xe3\xa2\xde\x0a\x9b\x3e\x65\x52\x3e\x04\x62\xdb\x56\x97\x0d\xaa\x09\x54\x1d\x90\xaa\xf7\x19\x45\xef\xfc\xd0\xbc\x0e\x7c\xa8\xa4\xf9\x96\x6e\x39\x60\x91\x4e\x77\x60\x80\xb1\x3c\x0f\xa2\xf9\x19\x76\x4d\x90\x27\xcb\x17\x14\xe5\x06\x60\x17\x53\x84\xc4\xfb\x45\x36\x50\x4d\xde\xd2\x64\xb7\x40\x1c\x82\x94\x76\xca\x3c\x07\x1b\x3e\x53\xeb\xd8\x98\xaa\x02\xee\x47\xe0\x19\xb9\x7d\x2b\x28\xe6\xb8\xa8\x85\x2d\x1a\x21\x0c\x2d\x77\x7c\x22\x33\xd2\xa3\xa8\x21\x07\x23\xd2\x90\xee\x11\x9c\xf2\x42\x2a\x9f\x4e\x6e\xe9\xe4\x6d\x3f\x53\xe5\x7a\x09\x4c\x07\x2f\x7a\x93\xd2\xde\x41\xcb\xc6\xb1\x11\xb6\xd5\xac\x64\xba\xb8\x06\x15\xab\x10\xfb\x19\x6b\x55\xbe\x4a\x4f\xa4\x92\x2d\xba\x76\xf0\x54\xeb\xde\x45\x9a\x7c\xdd\xe1\xe6\xae\x52\x88\x50\x86\x0a\x65\x68\x36\x62\x8d\x84\x5b\x44\x19\x38\x7b\x73\x35\x9c\xc6\xc9\xb4\x51\x62\xbc\x46\xb8\xca\xc5\x95\xa1\x0f\x67\xd7\x3d\x8a\x1d\x7a\xdc\x1e\x0c\xee\x0d\xbe\x58\x72\x0e\x6c\xa9\x31\xef\xae\x3c\x77\x5f\xdb\x0c\x48\x03\x0e\x99\x47\x0b\x27\x6f\x30\x3a\x57\x1a\xae\xf9\x9d\xde\xf1\x55\xd6\x0e\x72\x16\x05\xd4\x9e\x7a\x54\x53\x50\xe7\x19\xe6\x40\x7a\x00\xb0\x70\x63\x39\x0a\x20\xa4\x50\x62\x5d\x3c\x2e\x2f\xa4\xbd\x43\xa0\x4c\xd1\xec\xb6\x39\xd7\xa7\x48\xd7\x5e\xf5\x09\xe3\x4a\x7e\x8c\x23\xb4\x20\x78\xae\x60\x9d\x0a\x6f\x3b\x6b\x27\x3e\x1a\x49\xfe\xe8\xf0\x0e\x83\x97\xda\x4e\xa9\x20\x18\xc0\x4f\x29\x64\x40\x38\x28\x67\x77\x7b\x74\xb9\x9d\x68\x95\xeb\x38\x48\x90\xc9\x4d\x07\x06\x61\x28\x62\x77\x8b\x13\xe4\x02\xd6\x39\x3d\x7b\x14\x35\x53\xe1\x42\x89\xd7\xb2\x1c\x18\x24\xec\xe6\x7a\xcc\x06\x13\x92\xda\x3c\xaf\xb5\x28\x12\xfe\x3a\xef\x90\x7f\x31\xd3\x62\xef\x94\xd3\x96\x33\xa1\x95\x8c\x59\xcc\x2e\x09\xce\xce\xc9\x71\x06\x08\x77\xb9\x4d\x60\x6b\x48\x4e\x1f\x1b\x8a\xda\xc0\x3b\x02\x2b\xc2\xe8\x14\x27\x7e\x64\x35\x9b\x70\x7e\x20\x77\x71\xbc\xd0\x85\x73\x8e\x6d\xf0\x68\x54\x39\x7b\x34\x49\xe5\x26\xba\xda\xb1\xd0\x77\x5c\x67\xa6\x38\x4a\x2a\x95\x94\x1a\x03\x17\x21\x3a\x88\x72\xfb\x9e\xc1\xa5\x06\xde\x83\xbd\xb2\x02\x9e\x10\x0b\x09\x2f\x5c\x65\x13\x59\x52\x0f\x81\xcb\xa3\xf8\xe4\xc7\x0c\x2e\xca\x76\xeb\xa9\x38\x4e\x55\x71\x11\x94\x34\x27\xf7\xb0\xa8\xb2\xc1\x1e\xdc\xd4\x70\x31\x8c\xe1\x39\xa4\xae\x0a\x25\xc1\x26\xbb\x85\x3e\x5c\xf9\x52\xb9\x98\xab\x30\x1d\x3b\xb6\x04\x71\x2e\x3d\x85\x51\xc3\x03\x5c\x70\x6a\xc9\x4c\xee\xe3\x5a\x7a\x9f\x49\x07\xb8\x95\x3b\x38\x17\xba\x05\xd6\x0e\x58\xf7\x15\x62\x8d\x50\x2e\x68\x9d\xb4\x81\xae\x98\xf8\xde\xdc\xd9\x2c\x57\xaa\x05\xe3\xf8\x7e\x59\xb4\xed\x70\xe9\x3b\x54\x9d\x45\x23\x0a\x1c\x63\x4e\x65\x38\xc3\xb9\x4d\xa4\xcc\xf4\xb5\x56\x97\xca\x6c\x17\x11\xe7\xb9\xa6\x71\x59\xba\xe9\xcd\x1c\xca\x98\x3b\x16\x87\x1c\xca\x18\x90\xe2\xb3\xea\x81\x01\x2e\x2c\xb4\xad\x90\x23\x32\x52\x91\x6e\x12\xf3\x90\x0a\xc0\x03\x1c\x0d\xbb\x1d\x00\xd2\x6f\xb9\xeb\x77\x0e\xc1\x1d\xbb\xce\x03\x8a\x4a\xd4\xa9\xd4\x68\xe8\x4c\xd5\x63\xe7\x08\x61\xbe\xe3\x5e\x40\x5f\xfe\xe4\x4b\x07\xb3\xaf\xae\xf8\x1d\x70\xcf\x43\xc0\xf8\x42\x63\x06\x64\xd5\xe0\x5b\xb4\x43\x8b\xb5\xef\xa6\xef\x14\xb7\xdd\x08\x8e\xc6\x36\x19\x4e\x3e\x17\x54\xb7\x19\x6e\x59\x1c\x12\x16\x77\xb3\xeb\x64\x84\xe3\x41\xeb\x05\x8b\xcd\xa7\xa5\xf8\x52\x29\x9c\x6b\xda\xe3\xd4\x27\xa6\xd3\xe4\x1e\x2e\x9c\x2d\x62\xf3\x78\x08\x5c\x1e\xb5\x81\x7a\xcc\x9c\x4b\x44\x01\xf3\xcb\x67\xcf\xfa\x20\xf6\xda\xb3\xe7\xfb\xe5\xb8\x01\xf1\xdc\x4c\x8d\xe0\xbc\xb0\x6e\x9d\xd2\x45\x8e\xda\x17\xc8\x0a\xdc\xb1\x89\xaf\x55\x50\x83\x2c\xd6\x3b\xc7\x60\x61\x02\xf6\x6c\x69\x3e\xeb\xdc\xd2\xca\xb0\x32\xa1\x44\xb9\xc4\x55\xaa\xeb\x3a\x12\x2b\xb6\x3b\x76\xe0\xf4\x0d\x33\x20\x30\xd8\x2a\xea\x99\x50\x9a\x9e\x86\xe8\xbd\x46\x76\x68\x4b\xb2\x11\x00\x65\x69\x74\x09\x74\x1f\xa7\x55\x1c\xd6\x90\xef\xd8\x0a\x2c\x70\xe9\x55\x01\xc1\xa8\x6b\x5d\xb5\x5d\x2d\x8a\xae\x81\x8d\x41\xc9\x6d\xf8\xae\xb7\xd1\xb2\xe5\x26\xe3\x4c\x26\x37\x67\xd5\x77\x0c\x24\xa8\xfb\xab\x95\xff\xbf\x12\xa3\x62\xeb\x93\xa5\xe0\xa4\x1a\x18\xa1\x22\x52\x9d\x93\xc5\x0d\x3c\x97\xa2\x3a\x36\xd1\x96\xf7\xa7\xbe\xc3\xe0\x15\x18\xca\x97\x04\xa5\xb3\x74\x1c\xa7\x6c\x65\xa0\xc4\xc7\x65\xb5\x3f\xbb\x2c\x20\xa0\x63\xd3\x8b\xc5\xae\x84\x8a\x4e\x6d\xe5\x12\x77\x38\x84\x56\x3a\xb9\x8b\xb9\x5a\xbe\x74\xb1\x1b\xbe\x2e\xc8\xc3\x20\xdb\xb2\xfc\x84\x1b\x0e\xca\x6f\x6c\xae\xb4\x67\x73\x21\x05\xa2\x91\xb7\xb0\x60\xf0\x24\xad\x45\x64\x1d\x81\x66\x9b\xe5\xe4\x64\xc1\x36\x8f\x06\xd3\xae\x93\xa4\xb9\x06\x27\xd5\xe1\xe2\xa6\x60\x0a\x38\xcd\x53\x3f\x7c\xcb\xee\x51\x3b\xeb\xc7\x0c\x2e\x21\x28\x02\x77\xc1\xf6\xda\x20\x14\xca\x81\xbe\x17\x43\xc0\x75\xed\x60\x8f\x8e\xb5\x8e\x05\x03\x24\x6f\xeb\x14\xcd\x46\x2a\xe6\xbc\xe3\xdd\xd0\x3c\x32\xea\x98\x7c\x48\xdf\x5b\x62\xb0\xf4\x83\x38\x49\x04\xe2\xf4\x08\x58\x6b\xe4\xf3\x75\x4a\xb6\xb5\x75\x0e\xa4\xba\x99\xec\x8e\x9e\x01\x53\x3a\x01\x2c\x2d\x2c\x4f\xa5\x18\x6c\x8e\xd8\x4b\x60\x18\x1c\x5a\x04\x68\xe9\xe6\xd9\x69\xbd\x2b\xfb\x81\x63\xb1\xca\xa5\x3b\xf8\x27\xd6\x13\xbd\x3c\xcf\xe8\xf4\x04\x1e\xa3\x47\xcc\xe4\x85\xf1\xa0\x97\xc8\x4c\x88\x75\x56\x36\x64\x50\x32\x51\xeb\xba\x35\x67\x87\xeb\x8e\xdc\x8b\x69\x8b\x08\xb4\xad\x0a\xe4\x1e\x49\xbd\x1c\xd2\x48\xd0\x6b\x2b\x83\xab\xa9\xd9\x8a\xb8\x86\x2d\x48\xaf\x5c\x67\xd4\x17\xcb\x6e\x59\xbf\xb6\x42\x2d\x14\xd8\x2d\x6d\x8f\x84\xf3\x5c\xd6\xf1\x33\x12\x71\x28\x68\x2f\x44\x9b\xdd\xb6\xc2\x74\x91\x53\xb0\x63\x5b\xbc\xe0\x5b\xc0\x45\x8c\x33\x2e\xb1\xec\x1c\x38\xa9\x33\x11\x51\x67\x00\xa4\x4d\xa6\xe6\x91\xb8\xdc\x15\x89\x1b\x73\xa4\x0e\xce\x11\xdc\x84\x26\xf4\x0e\xf9\xbc\xd9\x4e\x2f\x50\x3f\xda\x32\x1d\xb1\x43\x19\xbf\x6b\x08\x52\x36\x94\xa6\x2b\x9c\x8a\xe1\x8e\x13\xb1\x50\xac\xeb\xc0\x34\x11\x97\xf7\x87\xc4\x46\x8f\x4a\x76\xfa\x0b\x62\x23\xf0\xce\xcf\xfa\xf4\x37\xfa\xdf\x9f\xf2\xd4\x0f\xfb\xd4\x4f\xff\xb3\xff\xd8\xfe\xe6\x53\xff\xf4\x79\xaf\x78\x5b\xf7\x97\x7f\xe5\xff\x7c\xc5\x7f\xf5\xd7\x5f\xf7\xcf\x7e\xf8\x5d\xff\xdd\x03\xa5\xdf\xfb\x8f\xbe\xf0\xf3\x9e\xfc\xd2\x27\xfd\xdf\xff\xee\x87\x7e\xd0\x4b\xd1\x6b\x3e\xf3\x4f\xbf\xf3\xa3\xbe\xfd\x29\x1f\xfb\xe4\xdf\x78\xc2\x8f\x7d\xc7\x57\xfd\xe7\x5f\x7a\x8b\x37\x7d\x50\x95\x03\xbf\xec\xb3\x5f\xf4\x87\x3f\xfa\x9e\x3f\xfc\x1f\xbe\xe0\xb5\x3f\x70\xbe\xfb\xdf\xff\xc3\x97\xbe\xc3\x5b\x7f\xc1\xd7\xeb\xf3\x19\xcf\xfe\x9c\xd7\xfc\xc0\x8f\xbf\xef\xf3\x1f\x0c\xad\xfa\x5b\xfc\x75\x9f\xfe\xfe\x4f\xfc\xbe\x7f\xf6\xc3\x1f\xfb\xa6\xf4\x9f\xfc\xfc\x9b\x7f\xe6\x47\x3f\xf5\xbd\xb6\xa7\x3e\xe9\x1b\xbe\xea\x7d\x5f\x8a\xdf\xfc\x1f\xfc\xf8\x8f\x3d\xff\x81\xd2\xb7\x9c\xcf\x78\xf3\x2f\x7a\xfb\x2f\xfa\x81\x0f\xf9\xe9\xe7\xbd\x22\x7e\xff\x27\x7e\xe9\xfb\x3c\xf1\xff\xf6\x72\xf2\xa9\xe4\x6d\xff\x97\x0f\xfc\xa7\x5f\xf9\xa2\x3f\xf9\xa9\x9f\x7c\x50\x97\xf4\xbe\xaf\xfe\xae\x0f\xf9\x01\xfb\xdc\x0f\x9d\xc7\x4f\x7e\xd4\x1f\x7d\xf8\x0b\x3f\xee\x83\x7e\xf2\x53\x7f\x1d\x7d\xc3\xf7\xfe\xee\x7b\xfe\xd9\x6f\xfd\xe6\xf6\xa3\xcf\x7b\xa0\xf4\xed\xfe\xe3\x3f\x7e\xc9\x37\x3e\xed\x45\x9f\xdf\x3f\x1c\x7f\xde\xdf\xa7\xaf\xfa\x9e\xef\xfd\xc8\x0f\xfd\x5f\xb6\xfa\x67\xaf\x19\xfd\x25\x1f\xfc\x3d\x5f\xfe\x41\xaf\x7b\xa0\xf4\xbb\x7e\xfb\x9d\xde\xf6\x59\xe7\xff\xf8\xec\x77\xfa\xda\xef\x78\xe5\x6b\xde\xe3\xc9\xff\x83\x79\xe3\xaf\x7f\xcd\x4f\xbc\xd9\xaf\x3c\xf7\x99\x1f\xfd\x9b\xec\xf5\xbf\xfe\x26\x5f\xf8\xe7\x62\xa3\x47\x3d\xd5\xc7\x8d\xf0\x17\x2f\x48\x87\x40\x8d\xcb\x5c\x43\x66\x65\x1d\x07\x84\x89\x2e\x15\x79\x8f\x49\xae\xb3\x6f\x1d\x76\x22\x10\xb8\xcc\x79\x60\x73\x07\xe5\x14\xb7\xc0\x39\x76\xc7\xc9\x6d\x3c\xf1\x56\x41\x42\x4d\x2f\x6d\xd7\x9c\x1c\x2d\x29\x77\x80\x92\x25\x3c\xec\x80\x97\x69\x4e\x7f\xe8\x3b\x02\x04\x4f\x08\xb9\xf0\xba\x04\x23\xe0\x31\x22\xb4\x87\xdb\x7d\x95\x8c\x03\x76\x36\x94\x08\x0b\x40\x6d\xd2\x55\xef\xc1\x11\x76\x42\xe3\x2d\x33\xc8\xa5\x87\xdb\xd1\x20\xe7\x3a\x68\xab\xbb\x69\xc5\x52\x82\x4e\x4b\x2a\x46\xb9\xf4\x4c\x34\xe9\x64\xbf\xf8\x61\x0e\x3a\x0e\xa4\x09\xb8\x83\x2d\x18\x59\x4c\xd0\x2b\x84\x02\x83\x9e\x3b\x53\xf9\x28\xae\x41\x46\x47\x95\xa8\x2f\x03\xc4\x19\xb9\xb0\x20\x4c\xd0\x03\x30\x91\xdd\xc1\x67\x33\xdf\xc5\x86\x9c\xd7\x75\xf3\x2a\xee\x27\xe3\x3b\x3d\xfb\xc1\xa3\x17\xd3\x58\xb6\x91\x6b\x0b\x57\x31\x8c\x20\xa7\x81\xc4\x41\xef\xf4\x0e\x3e\x5b\x83\x3c\x96\xd9\xb3\xd5\x98\x36\xe4\x35\xe6\xf0\x90\xc9\xd8\x6b\x79\xa7\xfb\x22\xe6\xbc\x7a\xea\x3d\xd4\xb5\xc8\xe5\x28\x43\xe2\x96\x90\xcd\x63\x06\x06\xd4\x86\x60\xe1\x34\x36\x72\x06\xc2\xed\x59\x9b\x6f\x85\xdb\x4d\xc6\xae\x0a\xab\x3c\x18\x87\x44\x75\x2d\x93\x43\x3c\xec\xb2\x7b\x14\x0e\x3f\xee\xe8\x63\x21\x43\x48\x02\x17\x14\x5b\x45\x67\x00\x0d\x31\x1f\xc1\x76\xd6\x82\xe6\x74\xda\x51\xb7\x2f\x6a\x44\x4d\x05\xc6\xcc\x75\xd3\xb7\x9c\x65\x64\xa3\xaf\x41\x5d\x6d\xd0\x88\x96\xb0\xe8\x9d\x8c\x9e\x35\x87\x4a\x5c\x15\x69\x7e\x51\xae\x77\xcd\x26\x11\x82\x23\xe2\xa6\xbd\xc3\x30\x4a\x74\x29\xcb\xd3\xae\xa9\x87\x26\x1f\x56\xe1\x7d\x2a\x60\x75\xe9\x98\xcc\x84\xb0\xd1\x68\x49\xd2\x51\x0d\x3b\xd6\x8e\x92\xa4\xef\xa0\xdf\x40\xde\xf9\x74\x3b\x3c\xae\x8c\xe1\x36\x85\x34\xa3\x60\x73\xee\x49\x18\x19\x14\x98\x2b\x26\x2f\x54\x41\x3b\xd4\xf9\xe8\x4c\xc6\x3b\x2e\xa7\xd1\x83\xd1\x73\x47\x9c\xb5\x52\x48\x12\xde\x5d\x07\xb4\xa4\xbb\x6d\xa6\x6e\xda\x71\x0d\xdc\xe6\xb4\xc3\x1d\xa6\x04\x9f\x79\x29\xf4\x0e\x6d\x04\xdd\xed\x99\x60\x63\x57\x9c\xb5\x75\x02\xd2\x1e\x5b\xb0\xf3\xb2\xee\x4a\x24\x36\x98\xb8\x50\x35\x7b\x6a\x80\x87\xe2\x60\x4b\x97\x5b\x88\xaf\xb0\x6d\x25\x31\xe8\x01\x18\x3a\xe6\xa5\x99\xf5\x15\xe9\x7e\x38\x56\x94\x01\xbd\x9f\xdb\xc9\xa2\x6b\xab\xfb\x7e\xf9\xb8\xd7\x6d\xdd\xa1\xdb\x5f\x2a\x62\xb0\x95\x9d\x24\xa6\x0e\xe1\x4d\x71\xd8\x83\x58\xf2\xd9\x33\xb3\xe7\xa5\x77\x8a\xfb\xd8\xe8\xf4\xa7\x54\x27\x22\xeb\x74\x0f\xb3\xea\x8f\xea\xdc\x1e\x33\xab\xbe\x55\xab\xf1\x5e\xb1\xe6\xc9\x4b\xf4\x86\x97\x50\x16\x87\x3e\xf1\x4c\x81\x05\x00\xe5\x34\x7a\x62\xdb\x2c\x6b\x5b\x89\xad\x7b\x95\xee\x98\xc7\x60\xa1\x08\xe3\xdd\x84\x12\x93\xcb\x47\x6d\x31\xb5\x14\x10\x14\x93\x46\xb7\x61\x79\x49\x30\xaa\xb2\x17\x0f\x38\xf0\x59\xb7\x79\xcb\xe9\x88\xb3\x5e\x3c\x8f\xc9\x35\x93\xc4\xcc\x48\xd9\x4e\x76\xa7\xa5\x74\x48\xc6\x53\x6a\xee\x0e\x77\x5e\x47\x10\x43\xd9\x73\x65\x73\x3a\x7a\x47\x17\x27\x7b\x2a\xdd\x99\x59\x9b\xac\xe4\x0a\x0b\x52\xea\x4a\x99\x58\xa7\x06\x55\x6a\xcc\x25\x78\xc9\x91\xed\xb9\xd9\x8b\x9b\x01\x74\xbd\xe3\x68\xe8\xd6\xb6\x53\x2a\x83\xfa\xec\x38\x40\xab\x6b\x4f\x65\xf0\x2b\x04\x4e\x06\x67\x22\xef\xdc\xd3\xbd\x0f\x79\x82\x68\x08\x0c\xd7\xc5\xef\xb0\xad\x1e\x1c\x34\x8a\xba\x42\x9c\x92\xcd\xa3\xed\x38\x27\xf4\x01\x5f\xec\xea\x6a\x21\xb2\x43\x2f\xc4\xc9\xfc\xe6\xb1\xf4\xbe\xf6\x5e\xd3\x1d\x73\x7a\x5e\x40\xf3\x2d\x5b\x37\xb9\x10\x70\x8c\xc9\x4e\xc8\x54\xbc\x3a\xa0\xc6\x3a\xed\x25\xf5\x88\x6b\xb5\x75\xa7\x0a\x6e\x61\x86\x3b\xdc\x97\x54\x50\xde\x41\xa8\x51\x5d\x53\xf6\x52\x19\x71\x26\x9a\x90\x46\xdb\xe0\x89\x66\x50\x3d\x46\x14\x83\x1e\xc9\xb3\x8b\x05\x9f\xe7\x7c\x58\x0f\xf0\xa8\x59\xef\x31\x83\x4b\xee\x46\x17\xc0\xc7\x95\xaf\x78\xee\x18\xf0\x23\x09\x70\xd8\x35\x79\x51\x24\xd3\x3c\xc5\x32\xec\xf0\xfe\x94\x99\xf5\x93\x4a\x3c\xef\x90\x80\xe2\x9d\x81\x53\xb5\xd5\x42\x73\x11\xea\x59\x12\x33\x01\x8b\xc8\x6a\x82\x5e\x50\xd3\xd5\xdc\x79\xae\xa7\x51\x50\x87\xb0\x13\x50\xd3\x1d\xec\x69\x1b\x19\x10\x15\x6d\x1d\x13\xd4\x1d\xe1\xb3\xf8\xc6\x38\x3c\x29\xdd\xc0\xb1\x49\x42\xbd\x10\x42\x62\x87\x35\xb2\x56\x69\x52\xee\x08\xe7\xdf\x07\xe1\x2c\x2b\x6e\x34\x9a\xf3\xa2\xe0\x94\x32\x24\x84\x70\x89\x34\x4b\x96\x94\xc1\x6d\x6c\xb3\x36\xce\x68\xa8\x2e\xae\xa3\xdc\xd1\xc5\x41\x1e\xbc\x04\xc4\x2d\x7c\x81\x20\xab\x4f\xb0\x28\x28\xa8\x19\x1e\xf9\x99\x03\x8b\xa1\x6d\x6a\xed\x38\x1e\x24\x27\x8a\xce\x94\x6f\xf8\x44\x68\x95\x4b\x68\xdb\x17\xeb\x29\x58\x0e\xe3\xf2\xc9\x45\x79\x24\x0c\x15\x2b\x14\x4c\x77\xd5\xc3\xa3\xc1\x48\x95\x78\x42\x2a\x18\xbc\x83\x72\x22\x2e\x29\xea\x25\x0f\xba\x82\xa6\x8d\xe6\x96\x9a\x09\x93\x2f\x63\x78\x4c\x31\x1f\x58\x4f\x87\xcc\x99\x68\xcc\x33\xd1\x70\xdc\xd2\xd1\x12\x84\xf4\x94\x82\x76\x5c\x25\x94\x9c\xe8\x58\xc7\x49\xdb\x19\x41\x3b\xcf\x00\xd6\x09\x4d\xaf\x3e\x6c\xf8\x3c\x01\x1f\x14\x17\xfb\xf0\xd1\x86\x47\xb1\x43\x8f\xdb\xe0\x55\xaf\x04\x77\x75\xe8\x90\x91\x19\xe7\xf0\x7b\x4c\x12\x89\x1a\x90\xea\x67\x59\xd2\x6d\x69\x79\xdc\xe3\xda\x2e\x37\xca\xc4\xde\xdc\x61\x6a\x02\xec\x8a\x69\xf2\x60\x2f\x31\x8b\x9e\x89\xec\x4a\xf9\xeb\x68\x14\xa8\x74\x48\x93\xa6\x05\xd3\xc0\xa4\x2f\x52\x8e\x0b\x9c\xa9\x89\x3b\x7e\xd6\xd9\x05\xc2\xf6\xa1\xb8\xbe\x82\xef\x10\xc7\xd5\x77\xb0\x9d\x0d\xbb\xc6\x53\xdf\xdb\x75\x5c\xd8\xef\x43\x60\x5d\xf3\x42\x1b\x47\xfa\x16\x23\x4f\x6d\x1c\x99\x8d\x8b\xa0\x74\xbd\xe0\x38\xf2\x29\x54\xc4\x2b\x4f\xad\x0b\xcb\x35\xcb\x23\x01\x7d\xaa\x73\x41\x9c\x18\xd0\x08\xdc\x71\x91\xd8\xe2\xcd\x95\x4a\x0a\x3e\x73\xa3\x1b\x0c\x0b\x6f\x57\xd9\xd4\x56\x10\x59\x6a\xad\x29\x7c\xf1\x03\xd7\x70\x4d\xe4\x5b\x04\x1b\x9f\x77\xd8\x56\xbb\xed\xcc\xfa\x86\x0e\x00\xd1\x61\xf3\x15\x4c\x35\x66\x6f\x49\x2f\x27\x81\x20\x12\x79\xbb\xe7\x8c\x6c\xcc\x8b\x09\x14\x28\x5f\x77\xf8\x51\x86\x1b\x92\x9c\x32\x9a\x40\xf9\xce\x00\x3d\x31\x54\xa9\xb0\xca\x26\x0c\x53\x2f\x50\xfd\x42\xf6\x34\x3c\xed\xec\x62\xa0\x0f\x45\xef\x88\x83\x51\xd2\x71\x3c\x72\xd6\x8d\xf0\xde\x93\x1f\xab\x52\x00\xf2\x70\x9b\x00\x33\x90\xf3\x00\x9e\x9c\x12\x13\x0d\xa9\x9e\xe7\xb1\xca\x74\x0f\x2b\x19\x1f\xc1\x27\x3f\xee\xb1\x68\x1c\xd1\xcb\xc2\x47\xaa\x69\xe4\x2e\xc4\x6e\xf3\xa8\x12\x16\x6e\x8b\x99\x09\x5f\x73\x3f\x93\x3e\x8f\x42\xb6\x34\x93\x8d\x24\xdf\x12\x75\xb1\x1c\x2b\x40\x3a\x60\xb3\xea\x6d\x69\x92\x7a\x80\xa2\xf8\xd2\xcf\x46\x80\x1d\xb4\x62\xc0\xe0\x91\x1a\x69\x54\xc0\x60\x8c\xbe\x63\x20\x11\x8e\xaa\x3e\xe6\x60\x41\x16\x7a\x8d\x9e\x58\x09\x1a\x4a\xa1\x9b\xa0\x04\xf1\x3d\x86\x24\x2b\x82\xc2\x70\xdf\xf7\x03\x81\xc6\xef\xe8\xe2\xfc\x11\xf9\x82\x47\x8b\x57\x26\x8a\xf2\xda\x30\x1d\x36\x27\x91\xad\x91\x2e\xa5\x30\x62\xad\xd7\x30\xd4\x23\x76\xa0\x24\x3b\xbb\xc3\xc3\x4a\x29\xcb\x41\x67\x8f\xdd\xb1\x22\x45\xcb\x95\x62\x83\x2a\xf6\xa2\x76\x1d\x1d\x5c\x22\xec\x7a\x63\x7c\xda\x1d\xfb\x42\xeb\xe5\x81\xb9\x23\xc8\x6e\xc7\xd9\x73\xc3\xe0\x61\x64\xea\x61\x57\xbd\x61\xba\x3a\xd8\xdd\xb1\xca\x00\x2c\x8b\xb2\xf1\xc9\x69\xe7\xa8\x5a\xcf\x8f\xce\xe0\x1d\x36\xb3\x6b\x1c\xd7\x3a\x46\x6d\x0d\x1c\x0d\x69\xb0\x39\x56\x52\x29\x3c\x13\x9b\x7b\xa9\x87\xa6\x0b\xef\x60\x9c\x52\xa4\xce\xba\x1b\xea\x0e\xb8\xa7\x74\x28\xe4\xc7\x46\xa4\x95\x9d\xb7\x8c\xdb\x98\x99\x10\x12\xf3\xe9\xb8\xf7\xba\x71\x0d\xb0\xb6\x76\x83\xad\x16\x8b\x37\x81\xc5\xc3\xe1\x23\x8f\xda\x40\x3d\x66\x42\x77\xe9\x54\xe8\x38\x77\xb0\x91\x3d\x02\x31\xbd\xd0\x72\xc1\x64\x9c\xdf\x23\x1b\x25\x8d\x58\xa5\x2f\x57\x85\x6d\xc3\x35\x69\x50\xc5\x1d\x2d\x5f\x95\x64\xa0\x02\x1a\x85\x89\xc9\x36\x9c\x3c\x1a\x18\x2c\xcc\xba\xae\xee\xb4\xbd\xc6\x6a\x10\xec\x9d\x01\x6f\x29\x9b\x65\xe3\xf4\x96\x6b\xab\x8a\x87\x53\x85\x6d\xed\x7a\x50\x1e\xc2\x99\x4c\x39\xcd\x09\x93\x39\xcd\xde\x26\x5f\x7c\x14\x93\xfc\x7e\x64\xba\x9f\x3b\x9a\xd8\xdc\xd1\x3f\x21\xd4\x75\x62\x5b\xa5\xb1\x80\xa8\xe7\xee\xb6\x86\xe3\x52\x87\x93\x5e\xc7\x2c\xd6\x2c\xcc\xb4\x4a\x8f\x32\xf0\x4c\x06\xce\xf3\x8e\xed\x33\x03\xf2\xb8\x60\xf6\xb5\x2c\xb6\x61\xe8\x9c\x38\xa5\x59\x59\x75\xf6\x06\xd0\xcf\x8a\x64\x12\xd5\x7e\xed\x4d\xdb\xde\x8e\x52\x40\x01\x77\xbc\xad\x6d\x03\x00\x21\x16\x98\x16\xc9\xf1\x55\xa1\x0a\x03\x9c\x2b\x80\xc4\x0f\x7f\x1e\xf1\x44\x69\x0b\x95\xb8\x83\x8c\x3d\xa6\x86\x3b\xbd\x81\xf9\x61\x74\x1c\x57\x32\x07\x2a\x1d\x87\xa6\x9d\x63\xc7\x15\x22\x3d\xcf\x0d\xb7\xd6\xa2\x36\x5b\xc8\x72\x13\x54\x7b\xa2\x33\x58\xca\x4f\x70\x87\x4c\x9a\x5c\xb6\x39\x16\x05\x88\x9b\xdb\x0b\x29\x1b\xa0\x4e\xee\xda\x01\x39\x33\xed\xad\x8a\x4b\x8f\x5e\xf8\xce\xa6\x46\xaa\xa5\x2a\x6a\x78\x08\x5c\x1e\xb5\xb3\x7e\xcc\x9d\xcb\x31\x30\x59\xdb\x4e\x62\xac\xbb\x6d\x72\x57\x43\x95\x8e\xf2\x09\x73\x67\xc9\xb6\x22\xf7\xdd\x51\x19\x13\xde\xb5\xee\x4d\x53\xed\xee\x58\x39\xea\xee\x55\xb6\x58\xda\xe8\x2b\xea\xa8\xe1\x4d\xf1\x8a\xe3\x26\xa4\x99\xd1\x12\x79\x75\x83\x34\xf5\xc9\x1a\x28\x77\x52\xe2\xe4\x77\x0c\x67\x7a\xa3\xd8\xcd\xa5\x0b\xab\xa7\xa9\x24\x01\x9d\x2c\xf0\x02\x5d\xe9\x0a\xc8\xb0\x43\x01\xad\x6a\x9d\x5c\xe7\xd1\x0d\xbd\x4a\xb4\x77\x50\xa9\x92\x09\x37\x66\xaa\xdb\x64\xd3\x24\xbf\xb1\xb9\x75\xbf\xc1\x9c\xc5\xc6\x1c\x8c\x53\x9c\xa4\xee\x09\xf7\x25\xa5\xb1\x4e\x11\x72\xc7\xb6\x88\xe1\x35\x00\x16\x5e\x76\xa2\x25\x02\x5d\x42\x79\x0e\x8e\xd9\xaa\x69\x14\x78\x5d\xba\x0f\x97\x52\x91\x07\x1e\x63\xc6\xde\xf9\x95\xef\xc8\x64\x4c\x20\xc4\xdd\xe3\x46\x20\xcd\x90\x49\x79\x1d\xd3\x4a\x2a\x28\x81\xbe\xec\x85\x55\xea\x1c\xdc\xcf\x93\x25\xc2\x9a\xe5\x23\xe2\x7c\x47\x58\x40\x66\x42\x5d\x91\x45\x39\x49\x55\xc4\x6f\x06\x56\x06\x9d\x99\x41\x1b\xb2\x19\x7f\xed\xc0\xd9\x76\x01\x10\x9a\x24\x7d\x3b\xd1\x06\xef\x38\xba\xee\x37\xa2\xc5\x3a\x14\x4f\xc9\x38\x96\x33\xe9\xa9\x72\x90\xf9\x01\x98\x64\x18\xc6\xcc\xba\x3f\x7b\xcf\xd6\x6e\x1c\x92\x4e\x48\x7a\x58\x6c\xf4\xa8\xdb\x70\x7f\x41\x6c\xf4\x87\xcf\x7e\xdb\xe7\x3e\xf7\x67\xbf\xf6\x77\x7f\xf1\x6f\x7f\xfc\xf3\x3e\x69\x7e\xfd\x57\xfe\xcf\x9f\xf9\xa7\xec\x7f\xfe\xa6\x2f\x7f\xc1\xdf\xd7\x3f\xf2\x91\x4f\xfc\xcb\x3f\xf3\xa0\x2c\xe8\x78\xe6\xe7\x7c\xc9\x87\x3d\xef\x57\xfe\xca\xff\xfb\xd3\x3e\xf3\x63\x3e\xf3\xb3\xfe\xe4\xd9\x9f\xf8\xf9\x1f\xf0\x3d\x6f\xfa\x8b\x9f\xf4\x1d\xbf\xf6\xb7\x9f\xf1\x5d\xff\xe0\x37\xde\xf5\x35\x0f\x94\x3e\xeb\x17\x15\xfb\xba\xd7\xfc\xc4\x4b\x7f\xa4\x3f\xe9\xcb\x3f\xfb\xd9\x1f\xf4\xec\xe7\xbd\xee\xe5\x3f\xf4\xca\x57\x7d\xc6\xbf\x78\xf7\xb7\x79\x8b\xab\x3c\xf9\x97\xbe\xf5\x81\xd2\x57\x82\xe7\xff\xef\x2f\xdb\x7f\x5e\xed\x7f\xfc\xe4\xef\xfe\xc7\x2f\x7c\xb7\xcf\x7a\xe1\xfb\xff\xde\x73\xde\xf3\xbb\x3f\xec\x07\xdf\xed\xe9\x2f\xfd\x8a\x37\xfe\xb1\xd7\x7d\xd1\x03\xa5\x5f\xf7\xca\xed\x1f\x7e\x21\xf8\x9d\x5f\xfb\xaa\xcf\xfb\x8d\xeb\xa7\x9f\xf3\x85\xe7\xf7\x3e\xf9\xe7\x5e\xf9\x2d\xe6\xeb\x5e\xf7\xd4\x2f\x7d\xd7\xf7\x7a\xa7\x5f\xfb\xcc\x97\x3c\x50\xfa\x7e\x5f\xfc\x8a\xbf\xfa\xaf\xd4\x87\xfc\x83\x9f\x7b\x93\x2f\x7e\xd2\xe7\x3d\xe5\x9d\xe5\xcb\xfe\xe6\xf1\x73\xf8\x03\xff\xbf\xff\xf0\x67\xbf\xed\x03\xd3\x93\xfe\xe5\xf6\x4f\x1f\x28\x4d\x7f\xf4\xc4\x17\xfd\xad\xd7\x7f\xd6\xdf\xf8\xb9\xff\xe9\x78\xd1\x5b\x3f\xe3\x6b\xde\xee\xa3\xbf\xe5\x13\xde\xec\x87\xbf\xf5\x7b\xff\xde\xeb\xc3\x2f\x3f\x67\x7b\xd5\x2b\xd8\x03\xa5\x3f\xf9\x25\xff\xf9\xfb\xd2\x97\xbe\xf1\xbb\xfe\xf1\xdb\xfe\x8b\x4f\x79\xe6\xbf\x79\xa3\x1f\x42\xef\xfe\xd3\x6f\xf4\xc1\xdf\xf4\x92\x0f\x7c\xdf\xe7\x7d\xe5\x13\x7e\xeb\x17\x7e\xe0\xe3\xfe\x5c\x6c\xf4\xa8\xa7\xfa\xb8\x23\xbd\x57\x93\x95\x5b\x5c\xb3\xaa\x58\x4e\x21\x4d\xf5\xd6\xec\xd0\xb5\xc4\x31\x33\xc4\x1d\xaa\x15\xf9\x86\x81\x48\x71\x26\x0c\xdd\x6f\x99\x41\x4e\x7b\x82\x95\x33\x1b\x89\x5f\x2c\x5a\x83\x7c\x96\x5e\x33\xc7\xc3\xd2\xa7\x49\x43\x8d\x7e\x6e\x19\xc8\xcb\x9c\x04\x1e\x8d\x43\x70\x07\xb6\xda\x90\xbb\x8e\x6e\x0f\xa6\x85\xd4\xce\x4a\x92\xeb\xc7\x45\xf2\x41\xb5\x62\x3b\xdf\xc4\x6c\x36\x08\xe9\xae\x6b\x57\xfb\x9c\x40\xdf\x72\x12\xe5\x20\x0b\x9c\x16\x9e\x6d\x2b\xe1\x1a\xd9\xfb\x22\xb4\x70\xd9\xa4\xcb\x01\x5e\x4d\x53\x58\xf5\xa1\xf7\x55\xc4\x44\x89\x33\xda\x6e\xa1\x9c\x82\x3b\xf6\x35\x86\xa8\x62\x83\xa7\xe1\x0b\x09\x82\x4f\x81\x65\x08\x85\x20\x9e\xdc\xb5\x99\xb6\x5f\x85\x69\x92\x67\x2b\x26\x54\x73\x87\x79\x16\xed\x3b\xc2\x9a\x04\x15\x42\x92\x61\x3f\x2e\x1b\x18\x58\xd5\xd9\x79\x74\x66\x39\x73\x60\x77\x6e\xed\x04\x8a\xcd\x1d\xa9\x9c\x36\xdd\xf1\xe6\x4f\xa2\x19\xe6\xc6\xf2\x53\xe3\xb8\x5a\x16\xae\xb9\x9e\xc0\x4c\x7c\x2c\xb9\x92\xb0\xc8\x77\x61\x1c\xbf\x7c\x31\xbc\x79\xf2\x60\xa6\xd0\x63\x7c\x16\x6e\x43\x61\xdf\x38\xb3\x20\x6e\xe6\x1c\x9b\xd8\xb9\xcd\x44\xfb\x55\xbb\x31\x84\x49\x5c\xdb\x71\xc9\x4c\xb7\x39\x2f\x09\x1b\x7b\xe0\xe0\xe1\x7f\x01\x97\x47\xe1\xf0\x63\x06\x97\xca\x95\xaa\x61\x2f\xb0\x68\xb5\x47\xbd\x88\x39\x7c\x65\x39\x4a\x4a\xce\x65\x98\x43\xc6\x89\xe2\xa9\xf0\x4e\xcf\x76\x88\x44\xe9\x1d\x1b\x57\xb5\x75\x46\x3d\x91\x95\x07\xb8\x41\x0c\x4f\x2f\x65\xc7\x32\x93\x7d\x73\xfb\x36\xfc\x4e\x46\x5a\xd6\xfa\x0b\x86\xcd\x76\x7d\xce\x5b\x8e\xf5\x27\x67\x8f\x6b\x76\xb9\xe9\x63\x6e\x7b\xa3\x54\x0a\x8d\xb2\xc0\xa4\x45\x28\x7d\x0c\xfb\x9e\x99\x85\xda\x69\x75\xe0\x04\xb8\x27\xb7\xe8\xe6\x04\xb7\xb5\x98\x98\xc6\xa5\x3d\x0f\x30\x95\x61\xb6\xdc\x18\x0a\x4e\xe3\xb4\x20\xbc\x16\xdf\xb6\xc1\x1a\x7b\x43\x8f\x90\xe5\x01\x6f\x49\xa7\x37\xa1\xa7\x4d\x6a\x8a\xae\x1d\x69\x1b\xd1\x75\x8d\x1c\x81\x8b\x8d\x83\xc8\x37\x55\xf7\x0d\x28\x4d\xf7\x6e\x00\xa1\x69\x5d\x41\xe8\x3b\xf8\xec\x1d\x9c\x25\xd6\x18\x87\x94\x8c\xec\x66\x16\x3a\xa2\xf6\xfa\x60\xe5\x70\x82\xd6\x83\xf3\xe3\xe8\xbc\xb0\xb3\xcc\xd3\x77\x92\xa7\xbb\x63\x36\x75\x84\xa3\x28\x32\x86\x1b\x46\xc1\x7a\x6a\xd9\x40\x7c\xc3\x2b\xc8\x3e\x92\x0c\x74\xd0\x72\x04\x4e\x81\xe7\x7b\x3d\x4f\x6e\x91\xbe\x81\xb3\xa0\x0e\x6f\x3e\x32\xc1\x00\x9f\x4a\xf4\xba\x64\xdc\x88\xa0\xcc\x92\x8b\x8a\xcb\x82\x3e\xc8\xc0\x97\x6b\x29\xaa\xeb\x02\xda\x80\xe0\x1e\x76\xd9\x3d\xaa\x73\x7b\xdc\xb1\x69\x16\xa4\x04\x3b\x3d\xf1\x56\xcf\x7d\x67\x8e\xcc\x04\xd5\x79\x4e\x0c\xfc\xa4\x75\x65\x88\x78\x84\x19\x3b\x83\x75\xf5\xc8\x9a\x79\xc7\x82\xa8\xb5\x4a\xaf\x81\xb7\x8b\xd2\xd0\x57\xdd\xb6\xc5\x37\x85\x63\x3c\x13\x93\x1e\xa1\x39\xe1\x3a\xe5\xd6\x53\xb6\xb3\x96\xd1\xd2\xce\xee\x60\x92\x1b\x3a\x64\xba\xb0\x43\x5d\xce\x1a\x9d\x98\x70\xf1\x0b\xda\xc3\xef\xfb\x86\x50\x4f\x84\x9e\xde\x5d\x7b\x85\x82\x7b\xd8\x3a\xd9\xc1\x2d\x99\x42\xdc\xf2\x84\xd3\x49\xfd\x8e\x9b\xd9\xca\x09\x33\x48\xad\x41\x30\xe7\xb6\x95\xc2\x81\x4b\x22\x25\xaa\x07\x18\x2e\x55\x50\xdd\x1d\x19\xaf\x34\xa6\xb8\x93\xb0\x8d\xa0\xcf\x99\xcf\x88\x23\x36\xa9\x74\x13\x95\xa3\x0e\xc1\xeb\x02\xc8\x5e\xbc\xfa\x4c\x9c\x5f\x20\xca\x62\xee\x38\x00\xcb\x66\x06\xd0\xc8\x00\xf3\x34\x17\x2a\xd7\x60\xfd\x0a\x00\x61\x51\x98\xe7\x63\x2b\xb1\x53\xd2\x54\x54\x02\x17\x0f\x1c\xa4\x8c\xa4\x3b\x9e\x05\x8b\xd7\x56\xe6\xe0\x8b\x84\x7d\x1f\xc8\x4b\xc5\x17\xe2\xfb\x1e\x6d\x50\xc8\x83\x95\x95\x24\x82\x74\xd5\xb7\xeb\x08\x24\xb7\xeb\x0e\x85\x06\x2b\x80\x50\xdf\x80\x73\xf3\xd8\x18\xb1\x1a\xec\xc7\x0e\x8a\x20\x1b\x07\x3d\x4b\x31\x48\x73\x9e\xe6\xa3\x99\xa6\x65\xf5\x18\x84\x07\x64\x81\xff\x05\x5c\x1e\x35\xeb\x3d\x66\x70\xa9\x39\x72\x73\x2d\xcd\x01\x93\x80\x6c\x02\xb5\x73\x85\x22\x36\x3e\x91\xcb\x17\xa0\x6d\x53\x79\xa2\x14\xe3\xb5\xc5\xa3\x32\x1c\xee\x38\x7d\x41\x93\xdb\xe6\xbe\x0e\x67\x02\x43\x62\x2b\xab\x58\xbb\xb5\xd0\x76\x11\xea\xd6\xa3\xe5\xc5\x5f\x50\x98\x38\x51\x03\x7d\x37\x99\x89\x75\x07\x9f\xdd\x89\xe3\x8e\xaa\x5e\x59\x8a\x46\x78\xac\x69\x38\x28\x71\x15\x42\x20\x67\x37\x55\x1a\x5a\xb2\x80\x97\x7e\x43\xa7\x07\x07\x85\xf4\x8e\xfe\x69\x1f\xa3\x6b\x81\x66\xd1\x18\x35\xd1\x45\x6f\xc7\x01\x17\xc8\xcb\x83\x75\xa9\x0b\x0a\x80\x93\x35\x35\xd7\x42\x73\x68\x10\xe5\x74\x87\x34\x58\x16\x96\x80\xb6\x8e\x35\x6c\xc3\x6c\x45\x8c\x95\xde\xf0\xff\x0b\x9d\xf5\xe2\x5b\x88\x42\xa0\x5e\x8b\xb1\x94\xb3\xd9\x05\x2d\xe9\x8e\x4f\xc4\xdb\x3a\xfd\x46\xd5\x05\xd2\xb9\x79\xd9\xa4\xf0\x69\x52\x94\x60\xbe\x42\xc7\x35\x90\x3d\xef\x56\x4f\x6d\x4e\x3b\xdd\xb2\x29\xdc\x42\x45\xee\x72\xe9\x32\x73\x14\x10\x67\x8b\xb6\x24\xdb\xbc\xd8\x59\x74\xbd\x1c\x58\xb4\xdb\xaa\xb8\x3c\x72\x9d\x8e\xc7\x71\x1e\x91\x42\x77\x87\xcd\xfd\x8c\xde\xc1\x58\xfa\x5e\x03\x5f\x80\xb7\x3d\xc1\x0b\x1a\xaa\x74\x02\x24\x41\x63\xd5\x3c\x34\x23\xf0\x52\x54\x8c\xce\x86\xed\xf4\x61\x0b\xef\xa3\xd8\xa1\xc7\x9d\xc9\xc8\x2d\x48\xa3\x66\x93\x25\x42\x88\xb5\x46\xb6\x8e\x92\x92\x05\x86\x8c\x26\x08\xc8\xe7\x1c\x43\xca\x78\x6f\xd4\x97\xe9\xd8\x1d\x2a\x2d\x06\xe9\x91\x03\x81\xb0\x28\x70\x8e\x3d\x1c\x01\x97\xbd\x09\x76\xb1\x7a\x08\x45\xd8\xe1\xeb\x5e\xf8\xbc\x5c\xd5\x4a\x40\x2b\x69\x74\x77\x58\x35\x7d\xe3\x0d\xd0\x73\x40\xd6\xe6\x66\xd7\x9e\xa7\x02\xb8\xcd\xb5\xdb\xce\x57\x4e\x7e\xdf\x99\xa6\x11\xcb\x54\xc4\x11\x77\xdb\x36\x7d\x87\x6e\x4e\x1e\xad\x18\x6c\x51\xd0\x05\x85\x5e\x90\xa0\x7d\x20\x16\xe7\x41\x3b\x6c\x3e\x32\xed\xb7\xee\x7d\xf0\x2d\x9c\x57\x73\x98\x4b\x77\x47\x13\x7e\xed\x92\xe1\x05\x1b\x4a\xec\x2c\xc4\x2e\x95\xb7\x88\xb8\xef\xb6\x79\x82\xcc\xba\xe8\xde\xa5\x16\xc5\xfb\xa9\x18\x0d\x16\x05\x77\x47\xe2\xd5\x16\xf3\xa9\x7d\x90\x70\x33\x83\x73\xcc\x7d\x0e\x66\xe3\xa8\x1f\xd0\xa3\x68\x43\x2c\x67\x3a\xbb\xbe\x78\xb0\x7c\x79\xb2\x46\xbc\x65\x2c\xd2\x7e\xf9\x21\x9d\xa5\x15\x57\xce\x0d\x6f\x75\x93\x72\x9b\x8e\xaf\xd0\xa3\xc1\x46\x8e\x0d\xab\x23\x14\x45\xc8\x5e\x70\x84\xb6\xde\xf1\x89\x40\xec\x05\xd7\x12\x28\xef\x93\x36\x41\x04\x17\x26\xc9\x3b\xc5\x7b\xce\x89\x60\x14\xf1\x9e\x26\x63\x61\x0e\x85\xc7\xa5\x4f\xf6\x80\x13\xe4\xbf\x80\xcb\xa3\xf8\xe4\xc7\xdc\xb9\xf4\x5a\x55\xf0\xb2\x4b\x46\xcf\x63\x6f\x1e\x08\x5f\x03\xbf\x6c\xd6\xb6\xbb\x10\xc9\x91\x4f\x34\xca\x41\x0a\xb8\xda\x44\xe6\xa2\xf5\x0e\x54\xce\xd5\x6d\x02\x05\xa7\x63\x55\xb3\x25\xea\xdc\x8e\xf6\x92\xac\x19\x42\xc1\xa9\x36\xb2\xcd\xc9\xc6\x81\xf1\xd5\x7c\x87\xde\x71\x70\x87\x86\x30\xf2\x86\xc3\x3c\xfd\x40\x09\x9f\x2c\x67\x64\x29\x9a\x3b\x29\xdb\x76\x32\x52\xe5\xc9\xcd\x46\x6c\xb8\x12\x3e\x81\xd5\x42\xe3\x1d\xdc\xe1\x47\x39\xf4\x08\x25\x0f\x5a\x37\xca\xf9\xee\x69\xd3\x80\xc5\x90\x09\x8a\x4c\xf7\x2b\x6e\x2b\xb0\x82\x06\x42\x63\x96\x7d\x03\xf0\x3c\xcb\x2d\x6c\x87\x8d\x16\xe8\xa8\x55\x27\xcb\xd2\xf3\x10\x92\xd7\x63\x09\xab\xd9\x31\x79\xbb\x92\x0b\x45\xb6\xad\xe2\x45\xbd\xad\x01\x39\x74\x07\xb8\xd0\x86\x26\xe0\x5c\x51\x82\xb0\xc2\x0c\xb5\x94\xc6\x6e\x40\x6e\x65\xf3\xd7\x0a\x75\xf8\x1d\x92\x21\xec\x8c\xe1\x14\x24\x2a\x14\xed\x1d\x3f\x6b\x0c\x29\x42\x16\x0d\xbf\x07\x32\xa5\x0e\x71\x50\x8f\xd6\xd9\x40\xd3\xa9\xf4\xd6\x8e\x96\xcd\x25\x7c\x63\xd7\x45\xa7\x62\x91\xad\x3b\xa2\x71\x76\x27\xaf\x6d\xa6\xde\x3d\x58\x00\x43\xee\x8a\xd8\x8f\x1e\x6d\x57\xa6\xec\x57\x1b\x65\x2b\x7e\x4d\xb7\x55\xb5\x41\xb5\xaa\x52\xec\xe1\x33\x6a\x8f\xda\x40\x3d\xf6\x6d\xd1\xd5\xa9\x1c\xc6\x94\xcc\x86\x92\xde\xec\x1a\x17\x89\x07\xb1\x61\x4b\x47\xba\x18\x03\x6c\x37\x67\x9e\xc4\x5e\xd7\x5a\x2d\x94\x3b\xb6\xcf\x66\xdf\x5a\x0b\x58\x9f\xd7\x84\x54\x36\x0e\xc8\xe2\xa3\x96\x5a\x7c\xae\xa5\x41\xda\x14\x5f\x22\x0f\x68\x40\xb6\x62\xeb\x35\xe7\x1b\x48\x4c\x36\xb1\xcf\x99\x4d\xbd\x3c\x5d\x68\x61\x4a\xf5\x75\xf8\x59\x7a\xd0\x97\x95\x49\x5a\x93\x06\x24\x11\xe0\x1e\x68\x16\xfd\x12\xf4\x8e\x04\x1b\x1a\xce\xb4\x59\xe2\x05\x48\xd6\x76\x90\x38\x0b\x87\x58\x09\xee\xf3\x60\x3b\x25\xa1\x89\xe9\x39\x1a\x8a\xb3\xa2\x2c\xd9\x4b\xa4\x77\x04\xbe\x52\x27\x2f\x67\x0f\xb5\xe1\x8d\x8c\x50\xea\x3c\x67\xe6\x1e\xb0\x4d\xc8\xcd\xa2\xcb\xe2\x4a\xf2\xda\xf7\x4d\x9f\xc8\x6d\xd7\xe9\x4e\x62\xee\x90\x3c\xc9\xe1\x88\xb9\xbc\xb9\x12\x22\x4d\x1e\x27\xdc\xb4\x83\x60\x35\xef\x63\x60\x22\x10\xe7\xba\xe7\x70\x4d\xd5\xe8\xd0\x56\x26\x63\xef\xe0\xe2\xb8\x55\xdd\xae\x50\x6c\xb2\x4a\x17\xd0\x07\xc5\x97\x24\x01\x6b\x0e\x9c\x53\xe2\xb0\x01\xb9\x13\x0f\x99\x9c\x71\x19\x1d\x01\xdc\x12\x7e\xeb\xae\x6a\x6a\x83\x88\x22\x9a\x45\x85\xa9\x1f\x5b\xf6\x74\xc3\x97\x3f\x38\xd7\x3e\x93\xd6\x61\x24\xc7\xd5\x3c\x43\x34\x64\x39\xec\xc3\x77\x30\x1e\xb5\xb3\x7e\xdc\x63\xd1\x9c\x3c\x56\x7a\x09\x83\x76\xc9\x79\xf2\xdb\x50\xc9\x30\xec\xda\x90\x3c\x1c\x69\x56\x75\x86\xb3\x41\x04\x02\x2b\x4a\x83\xe3\x96\x55\xf4\x04\x42\x2f\x16\x18\x85\x7c\x18\x03\xe7\xdc\x4c\x73\xcc\xc9\xc3\xd4\x6a\x67\x90\xac\xc0\xb3\x33\x94\xe3\x0e\x1b\x11\x49\xb3\x79\xc7\x57\x39\xf6\x21\xce\xa3\x2a\x31\x56\xa1\x92\x4b\x74\x76\x94\xe4\x29\xa6\x90\x99\xe0\xc9\xcb\x6a\xab\x4c\x15\xcc\xa9\x3b\xe6\x1d\xa0\x3b\x6c\xfa\x34\x14\xb2\x6f\x8e\xb5\x37\xfc\xbc\xcf\xb1\xf1\xc4\xc4\x2c\xb1\x1c\x76\x2b\x7d\xe0\xb8\x8e\x90\x42\x57\xee\x1a\x35\x49\x3d\x9b\x8a\x77\x2c\x81\x19\x82\x33\x14\x61\x1c\xc7\x83\xfb\x95\x6d\x1a\x41\xad\xc3\x5e\x41\x60\x4b\x4e\x05\x73\xc8\x84\xd5\x06\x0c\x6b\x43\x08\x91\xf3\x2d\x61\x01\x5b\x50\xd0\xe8\x06\x97\x24\x69\x85\xb0\x85\x04\x02\x66\x47\x0b\x9b\x36\xb4\x9c\x86\xb9\xe4\xd2\xbe\x20\xdb\x24\x0f\x3b\x84\xda\xdc\xc1\x82\x5d\xb2\x5e\x4b\x46\x1a\xb6\x7e\xac\xa0\xb1\xdd\xd6\x56\xec\x88\x17\xed\x16\xcb\x93\x8e\xae\xf6\x11\x08\xaf\xe0\x74\x89\x46\x7f\xb2\x3b\xf8\x27\x37\x6b\x3f\xa7\xf0\xbe\x8c\x50\x7c\x53\x82\x48\x5b\x02\x42\x8c\x69\x74\xe0\x33\x5f\xde\x1d\x87\xe6\x87\xd9\x0f\x8a\x6a\x47\x99\x8a\x87\xc4\x46\xbf\x34\x5f\xfd\xce\x5f\x46\x3f\xee\x4b\xbf\xe4\xbd\xbe\xfc\x6b\x3f\xed\xb5\xdf\xf7\x13\x1f\xf0\x2e\x5f\xf3\xd6\xfe\xdb\x5e\x56\x5e\xfd\x94\xdf\x7e\xd9\xef\xbd\xf2\x77\x9e\xf1\x17\xc4\x46\x9f\xf2\xc4\x7f\xff\x26\x7f\xf9\xf9\x3f\xfe\xba\x9f\x7c\xe6\xeb\x7e\xe3\x89\xcf\xf9\x8f\x1f\xff\x83\x1f\xf5\x37\xbe\xf2\x83\xbe\xfa\xe3\x7e\xe4\x05\x6f\xf1\x31\x7f\xf5\x73\xff\x04\xbc\xec\x81\xd2\xbf\xfc\xaf\x9e\xf0\x95\x3f\x6d\x5f\xf9\x55\x7f\xe7\x0f\x72\xfd\xac\x5f\x12\xfe\xc3\x7e\xeb\xfd\x7f\xe7\xf7\xbf\xe5\xeb\x5f\xf8\x7a\xf9\xf4\xff\xfc\xdb\x9f\xf2\xfb\xe4\xc1\x08\xa0\xf9\xb4\xa7\x3d\xf5\x6b\xff\xb7\xa7\xbf\xe9\x8f\x7e\xfc\xef\xbf\xea\x9b\x7f\xf0\x97\xbf\xe3\x15\x1f\xf1\x76\x3f\xfa\x45\x1f\xf5\xb3\x2f\xfc\xfc\x8f\x78\xe5\x5b\xfc\xd6\xaf\xfe\xc1\x03\xa5\xdf\xe0\xf0\xdf\xfb\xed\x6f\xfb\xf6\x4f\xfe\x90\xf1\x39\xdf\xf8\xb4\x37\x7e\xb3\x7f\x2b\xcf\xe7\x7f\xc1\xd7\xfc\x93\xbf\xf6\xc2\x1f\x7f\xe1\x57\x3c\xf7\xed\xfe\xf8\xed\x3e\xea\x81\xd2\x57\xbd\xc7\x7b\xbd\xe5\x0b\x5e\xfe\xe2\x77\xfd\x9e\x5f\x7d\xf7\xf7\x7a\x97\x77\xf8\xd4\x7f\xf7\xac\xe7\xad\xdf\x7c\x87\x6f\x79\xff\x97\x5d\x6f\xfe\x47\x5f\xf1\x77\x5e\xfe\x51\x1f\xfe\x40\xe9\xbf\xfe\xca\x37\xfa\x6f\xde\xee\x2d\x3f\xf9\xb3\xdf\xed\x17\xfb\x3b\x7e\xec\x3b\xfc\xfa\xab\xdf\xf2\x27\xdf\xef\x3b\xbf\xea\xdf\xff\xa3\xb7\xf8\xeb\x1f\xf0\xab\x2f\xfd\xbd\x1f\x7c\x97\x07\x25\x4c\xb3\xf4\x9f\xfe\xbd\xe7\xfe\x92\x7b\xe5\x8b\x9f\xf4\x9c\x57\x7c\xc3\xa7\xbd\xfd\xd7\xbd\xea\xa9\xff\xeb\x57\xbf\xdf\x0b\x3e\xf8\x19\xee\x1f\x3d\xef\xdf\xbe\xff\x6f\xfe\xb5\x07\x4a\x7f\xe7\xe3\xbf\x80\xfd\xdd\x4f\xfe\xd6\x4f\x7b\xcb\x97\x7d\xf0\x5f\x7a\xb3\xff\xd5\xbe\xfd\xdb\xbf\xfe\x67\x3f\xe4\x5f\xbe\xea\x7d\xde\xfc\x8b\x9f\xf9\x67\xcf\x7d\xf1\xcf\x7d\xe3\xbf\xfe\x73\xb1\xd1\xa3\x9e\xea\xe3\x3e\xf1\x1d\x38\x15\x96\x35\xad\x3d\xd2\x8c\xb7\x71\xba\x31\xaa\x15\x0e\xd1\xe4\xa2\x70\x69\xaf\x7b\x6e\x2a\x29\x71\x00\x76\x70\x68\xd3\x1d\xd8\x4a\x39\x53\x03\x90\xbd\x57\x19\xb0\xec\x2a\x70\x6a\x6d\x56\x70\xaf\x15\xb9\x4d\xa3\xae\xba\x0f\x42\x8a\x55\x97\x62\x76\x07\xd1\xdc\x12\xc3\x28\x4e\x30\x15\xec\x9c\x97\x0b\x2a\x01\x9d\x52\x97\x41\x0a\x98\x05\xcb\xb1\xd9\x13\xa8\x3c\x9b\x9d\x48\x80\xfd\x88\x27\x07\xdb\x2d\x08\x6f\xec\x91\x94\x21\x2c\xc8\x70\x9c\x78\xc7\x60\xdf\x8a\xad\x26\x45\x18\x2d\x83\x38\x99\xb8\x1d\x91\xd5\x86\x43\x46\x9b\xd9\x0e\x75\xcb\x41\x69\xb4\x20\x1f\xd6\x5d\x74\x4b\x47\x24\xba\x1f\x2c\xd3\x42\x99\xb6\xb4\xc9\xe1\x04\x3e\xc6\xae\x92\xb5\x61\x86\x5d\xb5\xcd\x1c\x89\xde\x11\x4a\xb3\xf8\x1a\x45\x0a\xad\xd8\x11\x36\xbd\x23\x89\x40\x43\xa2\xc8\x1d\x2b\x60\xe6\x44\x2c\x5a\x7f\x1c\xf2\x9c\x8b\xec\xd7\x91\x1c\xb9\x25\x1f\x40\xc8\x33\x6d\x19\xe1\xd5\x1a\xde\xae\x11\x4d\x87\x3a\x45\x7a\xe0\x71\x51\x5a\xfb\xe1\x8e\x8c\x45\xe2\xba\x0a\xd8\xc9\x85\x54\x76\x37\xec\x39\xa8\x48\x64\x2e\xfc\x86\x1f\x24\xec\xc3\xcf\x6c\x4a\x6c\x17\x0f\xfa\xdc\x38\x24\x8a\x01\x7b\x5e\xa5\x26\xaa\xcc\xe9\x1b\x49\x8e\xf7\x99\x1e\x6a\x1f\x1f\x85\xc3\x8f\x19\x5c\x0c\x73\x25\xd6\x13\x55\xae\xb8\x1c\xa6\xcb\x7c\xe2\x9e\x54\xed\x00\xed\x4c\xef\xc4\xb8\x65\x4b\xb3\x27\x1c\x8a\x63\xee\xca\x3d\x87\xaa\xf4\xae\x00\x14\xc9\x34\x3a\x6d\x0a\x52\x4a\x58\xd9\x82\x87\x8b\xa3\x6c\xc7\x55\x64\x53\x57\xbf\x26\x86\x3a\xc2\x16\x4b\xbe\xf4\x1d\xd2\x16\x3a\xa8\x89\x09\xf2\x14\x4b\xa1\xc6\x0c\xd1\xcc\xdc\x0d\x3a\xeb\xd5\x79\x40\x3b\x3f\x2c\x82\xb1\x21\xb4\xf6\xc3\xcd\x6b\xed\xb4\x97\x5b\x42\xba\x4e\x90\x2f\x6f\xfc\x6e\x9b\xb5\xd2\xb9\x9e\xb8\x57\x52\x5f\x53\xd0\xc5\x3b\x2b\xdb\x02\x31\x48\xbe\x28\x8b\xa8\x6c\x12\x26\x7b\xc7\x6c\x0a\xea\x79\x30\xe4\xb7\xd2\x2f\x51\x4f\xb1\x4f\x00\xcb\x70\x66\x5e\x13\xb1\x53\xc6\x93\xcc\xde\xcc\x14\x73\x6b\x63\x0c\x3a\x96\xd5\x77\xa4\xf9\xc8\xb2\x7c\xd7\x47\x07\xa7\xa0\xc6\x55\x87\x4e\x5b\x28\xa1\xd2\x91\x50\xc1\x88\xd7\xe0\xac\x94\x8b\x0e\xa6\x52\x82\x89\x60\x50\xee\x88\xfd\xa0\xd9\x1f\x24\x03\x26\x8c\x05\xa9\xa7\x61\xe1\x1a\x7a\xd6\x54\x38\xdb\xb2\x77\x16\x68\x3d\xbc\x12\x04\xc6\x13\x6e\x53\x4d\x06\xef\x78\xf5\x31\x1d\xba\xc2\x9c\xfb\x78\x1a\x4a\x4a\xe1\x86\xf1\x3d\x99\x32\x78\x26\x97\x4c\x58\xe3\x7d\x9f\xd0\x1e\xca\xe1\xbd\xca\x63\x4c\xfb\xf0\x19\xb5\x47\x75\x6e\x8f\x99\x55\xb7\xe2\x82\x70\x17\x9b\x63\x61\x66\x69\x77\xbd\x65\x79\x3a\x16\xaa\x04\x60\xd0\x58\xed\xb5\x3b\xa0\x15\xdd\x51\xf2\xc9\xc8\xb6\xd6\x1d\xa2\x12\xac\x3a\xcc\xf5\xe4\x0b\xc8\x6c\x42\x05\xea\xba\x1a\xc8\xb1\x39\x47\xeb\xda\x67\x8b\xfc\xe8\x23\x6d\x76\x41\x31\xf8\x08\x87\x64\xb7\x40\xdc\x28\xcc\x6e\xe8\x24\x47\x4d\xf2\x24\x49\x28\x2c\xd8\x35\xe4\xb5\x16\x11\xa6\x27\xe4\x28\xbc\xb0\x41\x57\xba\xc0\x38\xeb\x69\xec\x1d\xc2\x2b\x8e\x79\x8e\x28\xe0\xba\x05\x97\x9d\x1a\xe2\x4a\x58\xaa\x6c\x56\x3b\x60\xe4\x94\x22\x37\x08\xcd\x64\x5d\xe1\x24\x28\x45\xab\xcd\x1d\xd2\x16\xb0\x8e\x5e\x0e\xe3\x62\xf7\x91\x1c\x85\x49\x5b\x72\x41\x13\x8d\x92\x69\xb7\xfe\xd4\x5e\x2f\x61\xe2\x21\xec\x28\x7b\xf6\xfb\x26\xee\x70\xd9\xe1\x75\x8a\x90\x6c\xa7\x56\x02\x4b\xaa\xb0\x9b\xc3\x4e\xe4\x20\xad\x98\xea\x80\xe7\x7e\xb8\xb5\x86\x6c\xb8\x59\xb5\xf3\x03\x5f\x77\x58\x50\x18\x01\x16\x25\x55\xdb\xd5\x16\xa2\xdb\x30\x66\x3b\x75\xa2\x49\x72\xd4\xe4\xbe\x05\x2b\x26\x62\x84\x0a\x70\xd2\x32\x14\x76\x1e\xb3\x3b\x80\xd6\xd2\x05\x92\x4d\x6f\x00\xdb\x74\x61\x41\xc6\x51\xfc\x42\x3b\xbd\x10\x85\x45\x66\x16\xfb\xb5\x56\x35\x48\x64\x77\x74\x98\x15\x62\x0f\x83\xcb\xa3\x66\xbd\xc7\x0c\x2e\x18\x2e\x25\x7d\xf1\xb5\x04\xe6\xb4\xa9\x42\xe5\x0e\x49\x39\xb0\xf4\xe2\xca\x78\x25\xa1\x86\x17\xfc\xc0\x1d\x5e\x2b\x4e\x92\xf9\x1d\x99\x42\x5e\xe6\xac\x41\x67\x07\x4b\x4a\x64\x2d\xf8\x0a\x60\x73\x84\xf2\x81\xf0\x24\xe2\x70\xab\x5c\x5e\x27\x72\xa2\x70\xaa\xd0\x74\xb8\x63\x65\xc7\x90\x80\x98\x19\x84\xc3\x5e\x0e\x8c\x77\x48\x08\x9a\x34\xb8\x45\x58\x15\x4a\xec\xfe\xd4\x27\x9d\x12\x33\x24\x67\x55\x59\x20\x76\x0b\xc4\x9d\x00\x94\x51\xf3\xd1\x69\xd3\x27\xca\xd3\x67\xaa\xe7\x8e\x4c\x65\x9e\xd8\x85\xf0\xe4\x1a\x40\xb5\xb9\x5e\x2e\x75\x8e\x75\x2e\x70\xc7\x9a\x6a\xa7\x70\x87\x9b\x3b\x6d\xb3\x66\xa7\x76\x36\xce\xd1\x2a\x91\x0c\xe9\x4a\x3f\xb6\x43\x78\xc9\x8d\xc8\x3b\x1b\x78\xd9\xec\xaa\x5e\x77\x40\x1c\xda\x6d\xd5\x7a\x6c\xae\x59\xcb\xab\x8c\x6d\x96\x09\x04\x14\xbb\x68\x38\x10\x3d\x45\x44\xa9\xef\x83\xef\x05\x94\xdc\x07\x85\xb7\xb8\x1f\x34\x07\x92\x0b\x83\x98\xb6\x71\x9a\xc4\xfc\x85\x27\x92\xa0\x5b\x19\x59\x29\xf9\x82\x82\xc3\xe6\x0b\x33\x80\xfb\x58\x50\xe0\xf6\x0e\x83\x39\x6c\x33\xce\xab\x99\x6d\x77\xfa\xf0\x7a\x60\x21\x8a\x0d\x06\xb3\x49\x2b\xd3\xc9\x1e\x47\xc5\x35\xba\xfd\xe0\xe0\x84\xbd\x9e\x70\x3d\x7c\xa3\xf1\x51\xec\xd0\x63\x1e\x8b\x8e\x4c\xbb\x33\x00\x58\xb3\xd1\x35\xb7\x91\xcd\x75\xe8\xe4\x75\x4c\x85\x97\x03\x06\xd9\x3c\xc7\x62\xef\xcd\x8c\x51\x8b\x6c\xce\xdc\x31\x4f\x0e\x0e\xf9\x35\xa4\x1b\x76\x47\x86\x9e\xec\x10\x66\x85\xdd\x2e\xd8\xcc\x99\xae\x8a\x42\x3c\x4e\x69\x64\xdf\xaf\xbe\x9f\x85\x8a\x35\xef\x78\x43\xb1\x21\x0e\xa5\x60\xf5\xc3\x18\xeb\xcd\xee\xf3\x99\x28\x24\x0e\xae\x45\xd5\xa6\xab\x82\x64\x2d\x2e\xaf\x28\x67\x74\x02\xea\xb4\xee\x10\xd8\x48\x24\xf6\xc4\x06\xae\x30\x86\x66\xb7\x49\x8e\x79\xea\xc0\x65\x6c\xda\xa1\x85\xd6\x39\x4e\x33\xfd\x70\xc0\xc1\x01\x9d\x21\x0f\x5e\x11\x7e\x8c\xda\x88\xdc\xac\x75\x63\x50\xec\xa6\x90\xfa\x8a\x2e\x5e\x04\xec\x91\x42\x10\x6a\x5f\xf0\xd8\x6c\x43\xe7\xe1\x37\x16\xcc\xc4\xa3\x09\x7e\x43\x1c\x0c\xd3\x16\x82\x5a\xca\xd8\xc0\xd1\xf1\x05\xf5\x8c\xfb\xe8\x9b\x88\xd9\x98\x06\xb9\xaf\xa6\x5e\x32\x26\x11\x8f\x33\xe9\x8d\xf2\x29\xc1\x1d\x57\x9f\x80\x2d\x1b\x3b\x04\x02\x6c\xe6\xad\x34\x67\xa0\x37\x9b\x82\x36\xa0\x9e\x12\x49\x67\x1e\xba\xf7\x0b\x5e\x64\x61\x0f\x71\x08\xd7\x1d\xe9\x15\x6c\x43\x98\x9a\x0c\x7a\x85\x9c\x06\x24\x84\xd3\x57\xbd\xb6\x26\x1a\x64\xe1\x42\xd0\xf1\xb6\xec\xec\x71\x61\xdb\xf1\x79\x04\xb7\xe9\x87\x39\x97\x47\xf1\xc9\x8f\x19\x5c\x7a\x65\xa4\xd7\xd6\xc4\x91\x59\xd6\x09\xb9\x0b\xc6\x02\x4a\x93\x61\x0b\x9b\x95\x7d\x63\xd5\x63\x28\xb0\xb4\x5b\xa0\xa2\x5b\x7c\xc7\x3a\x82\x32\x2d\x14\xcf\xa1\x43\x19\x12\x81\xda\xa4\x04\x4c\x1c\x73\x1a\xec\xcf\x73\x4b\xea\xec\x2b\x69\x2a\x27\xd5\x86\xf1\xb8\x61\x79\x4b\xfb\xcb\x29\x3f\x05\xc0\x6c\x5f\x17\x6d\x17\x2c\x8d\x48\x2b\x93\xf2\x7d\x74\x03\xf1\x6c\x22\xa3\x70\x76\x6c\x16\x71\x97\xac\xc1\x72\x7a\x87\x1b\x7d\x6c\x21\x7b\x6f\xfd\x2e\x39\x60\xec\x0d\xad\xb6\x8e\xb5\x9b\x53\x50\x90\x45\x12\x26\xc9\x69\x33\x97\x74\x1c\xc9\xe0\x7d\x96\x70\x47\x2f\x49\x07\x71\x88\x4c\x7f\x79\x27\xba\xdf\x48\x3e\xfa\x9e\xd4\x59\x43\x99\xfd\x8c\x52\x9c\x74\x42\xc2\xf4\xb1\x65\x2c\x13\xa5\x31\x80\x5b\x84\x57\xfc\x3c\x1a\x83\xf6\x2c\x23\x22\x23\x29\x08\x92\xc0\x8d\x1c\xab\xd1\x7a\x84\x15\x62\x29\x6d\x59\x27\x19\x66\xad\x3a\xda\x5b\xcc\xb7\xdc\xe1\x92\x3b\xad\x59\x62\x3d\x0e\xc3\x77\x1e\x2e\x52\xb1\x94\x11\x83\x7d\xf4\x63\x86\xbc\xbb\x2c\xa3\xa8\x7a\x4b\xa9\x07\x03\x82\xcf\x77\x8c\x45\x7c\x5b\x1d\x73\xbd\xfc\xa9\x8f\x09\xa7\x87\x41\x6c\xb0\xd9\x11\x96\xe2\x8a\xd7\xcb\xc2\x62\x84\x19\x69\x39\x0d\xf1\xe1\x49\x58\xf3\x21\x70\x79\xd4\x06\xea\x31\x83\x4b\x3a\xed\x30\xda\xf4\xcd\x96\xed\x3a\xf0\x1a\x65\xa8\x93\x52\x26\x95\xbf\x36\x54\x10\x2f\x32\xf3\x0a\x3c\x1a\x45\x83\x80\x9c\xbb\x25\xf6\x63\x13\x4d\x95\xa5\xd1\x69\x8f\x22\xb0\xba\xf8\xb6\x6d\xdc\xb8\xa9\xeb\x6a\x1c\x02\x4f\xb4\xc7\xb0\xe5\x72\x1e\xb2\xa1\x0b\xd1\x9e\xef\xd8\x90\xcc\x13\x9e\xe0\x62\xa8\xf5\xcb\x0a\x66\x65\x10\x1b\x45\xb5\xe2\xc6\x46\x5d\x21\xcb\x7e\x22\x5b\x39\x28\xc4\xdb\xe5\xad\x93\xe5\x16\x27\xed\xc5\x8e\xc0\x51\xc9\x0c\x18\xeb\x73\x02\x3b\x26\x51\xaf\x13\x5b\xc0\xe3\x2e\x98\x98\xcc\x28\x6f\x20\xdf\xc4\x25\x0a\x09\x3b\xca\x77\x90\xdb\x4b\x83\xdc\x0e\x3e\xe0\x11\xc7\x20\x3e\x11\xda\xdd\x79\xa5\x34\x96\xcf\xa4\xba\x03\x5c\x9b\x9b\x21\x18\xc7\xb8\x6c\x44\x95\x72\xcb\xa0\x0a\x37\x9e\x81\x3e\x2b\x05\xbd\x56\x63\x2a\xe7\x67\x11\x1d\xf7\xb2\xaf\xa0\xf6\x0d\x84\x8e\xb6\xdc\x8b\x4b\xc3\xca\xb0\x5d\x8c\xdc\x41\xa5\x52\xb6\x28\xc9\x6a\x43\xd9\x23\x39\x48\x33\xd1\x1e\x24\xd4\xad\x4c\x1e\x7d\x07\x27\xe3\x19\xad\xc0\x03\x0d\xd9\xb2\xde\xc0\xb9\xcd\x3b\x80\xb6\x42\x9c\x6b\x58\x28\x00\x01\x22\xda\x95\x81\x3b\x12\x6b\x1f\x6e\xed\x9c\x89\x72\xe8\x7c\x1c\x6b\xc5\xcc\x66\x09\x8a\xe0\x10\x29\x78\x08\x5c\x1e\xb5\xb3\x7e\xdc\x84\x6e\xec\xb5\x76\xe1\xca\x61\x94\xc8\x6a\x9e\x87\x86\xc7\xae\xb6\x55\x9b\x55\xb2\x58\xc9\x5c\x45\xf4\x50\x7b\xb4\xa8\x19\x00\xf2\x2d\x1b\x92\x18\x61\x48\x65\xd0\xec\x21\x3a\x0e\xcf\xdc\xd9\x22\xca\xaa\x69\xa5\xa4\xa9\xb6\x27\xac\xf1\xd6\x9a\xcf\x1a\xb9\x73\xd8\x9a\xd3\x1d\xc1\x54\xd6\x1e\x30\xa9\x9c\x64\xb1\x1c\xf4\x94\x20\x98\x25\xec\xd7\x00\x2d\x63\x7c\x2c\x1b\xfb\x9e\x05\xcb\x91\x77\x54\xaa\xf7\x61\xda\x3b\xc8\x6d\x59\x71\xf6\xdd\xe2\xde\x98\xd0\x50\xda\x23\x6f\x27\x3c\x18\x10\x46\x23\xf0\x86\x09\xf5\xb4\x3a\x0d\x27\x8a\x39\xb8\x38\x56\xe3\x77\xa4\xf9\xd0\x33\xba\x33\x85\xe5\x2a\x1b\x29\x0d\x0e\x8f\x8c\x4e\xcd\xb7\x00\xe6\x75\x08\xd2\x81\x2a\x29\xe6\x01\xad\x4e\xd6\x72\xe5\x0c\x72\xb7\x90\xdb\x20\x18\x5b\xe1\xd0\xd1\xb3\x89\x6d\x13\x52\xe5\xed\xa0\xb9\xc3\x6d\xe5\x86\x7d\x19\x38\x1b\x10\xf8\x09\x2b\x93\xe8\xc8\xe4\x9e\x4f\xc4\x2d\x81\x94\x5d\x09\xf4\x10\xf0\x26\x70\x0a\xd4\x2c\x0f\xf5\xce\x83\x02\x67\x86\xd7\xe5\xa3\x9a\x7d\x57\xa2\x11\x22\x07\x58\x77\x58\xee\x04\x09\x20\x27\x6a\xa5\x9f\x6a\x06\xd0\xfd\x98\xe7\x5e\x67\xeb\xa4\x1c\xbc\xb4\xc9\x37\x7d\xd6\xfd\x72\xac\x2a\x5c\xbd\x49\xb8\xc4\x87\xc4\x46\x5f\xf6\xbe\xff\xc7\xc7\xfc\xe9\xab\x3f\xeb\x33\xfe\xfd\xa7\xbf\xef\x6b\x7f\xf3\x63\xca\xf3\xbf\xf3\xb3\x5e\xf5\xd7\xdf\x66\xfb\xe3\x97\xbc\xe6\xad\x7e\xe2\x6d\x3e\xee\xbd\xbe\xe5\x33\xfe\x82\xd8\xe8\x2d\x3e\xfd\x1f\x7f\xf2\xeb\xf1\xd7\xbc\xd7\x0f\x7d\xd5\x67\xff\xd4\x2f\xfc\xd2\x6b\x9f\xf2\x84\xfc\x5f\x7f\x51\xfa\x93\x17\xff\xf3\xff\xee\x3d\xfd\xbf\x78\xe6\xf9\x1e\x0f\x9e\x26\xfb\x80\xd7\x3c\xe1\xdf\xfc\x3f\xcb\x3b\xbe\x5d\xff\xe6\xb7\xfd\xea\x6f\xfd\x57\x2f\xfb\x19\xfa\xd6\x3f\xfa\x73\x6f\xc5\x7f\xea\x49\xe6\x17\x72\x78\xca\x7f\x7a\x9b\xf7\x7e\x50\x41\x84\xde\xf8\xe5\x9f\xfe\xdf\xbd\xe3\x29\xe1\x73\x7e\xef\x6f\x7d\xe4\x0f\xbd\xdf\x7f\xfb\x57\xae\xe7\xbd\xf7\x6b\xff\xfb\xbf\xf6\x5d\xcf\x08\x1f\xf1\x7f\xfe\xbd\xaf\x79\xf0\x0f\x78\xbf\x6f\xfa\xe7\x1f\xfe\x82\x5f\x7f\xdb\xbf\xfe\x8c\x3f\x7e\xde\x2f\xbf\xf3\x33\xbf\xe9\xd7\x7e\xe7\x3d\xda\x7f\x7a\xa3\x67\x7d\xf5\x8f\x41\xfe\xc3\x1f\xf7\xac\x97\xbe\xf4\x55\x0f\x94\x7e\xc2\x37\x7d\xf9\x53\x5e\xf4\x2a\x1f\xd7\x4f\x3f\xed\x9b\xff\xa7\x3f\xfe\xf2\xcf\xfd\xf5\x27\xfd\xc2\x27\xfe\x31\xfa\x8e\xe7\xbf\xd9\xf3\x5e\xfc\xba\x5f\x25\xbf\xf0\x4e\x0f\x94\x7e\xf7\x17\x79\xfa\xd4\xf5\xab\xaf\x7f\xee\xfb\xbd\xf4\xdf\x7e\xe2\x47\x83\x2f\x79\xee\xeb\xbf\xf3\x93\xdf\xe9\x5f\xff\x95\x4f\xfa\xbd\x4f\xfb\xe7\xef\xf8\x15\x4f\xff\xf2\x27\x3d\x50\xfa\x8e\x6f\xf4\x5d\xef\x10\xbe\xf7\xbd\xff\xfb\x6f\xfa\xbb\x4f\x78\xed\x53\x9e\xbd\x3f\xe9\xdb\x5f\xfb\x15\x4f\x7c\xfa\x6f\x3d\xe9\xfc\xdc\xaf\xff\x7f\x7d\xcb\x67\xff\xc6\x07\x88\x07\x4a\xdf\xf5\xad\x7e\x62\x3d\xed\x47\xbe\xed\x53\xfe\xeb\xb7\xfe\xa6\x0f\xfb\x86\x1f\x7e\xe9\x8b\xd8\x7b\xbf\xcd\xef\xce\xaf\xf8\xa9\x4f\xfa\xee\x8f\x24\xe9\xdb\xf1\x87\xff\xcd\x3f\x17\x1b\x3d\xea\xa9\x3e\xe6\xf6\xb1\x30\x7d\x01\x32\x22\x9f\x5a\x71\xae\xf7\x61\x96\x39\x70\x9e\xdc\xb4\x23\x8d\x1a\x4f\x47\xcf\x5c\xe5\xf2\xe5\xd2\xc4\x8a\xa2\xd3\x1d\x02\x9b\xb4\x64\x53\x75\xf6\x5e\x5b\x90\x4c\x5a\xa0\xb6\x29\x97\x6b\x3b\xa1\x20\xc5\x93\x03\x55\xe1\xde\xce\x6d\xa6\x72\x5a\xaf\x7c\xc9\x77\x88\x17\xfb\x06\x15\x70\x26\x09\x21\xb2\x09\x01\x11\x3f\x0c\xd3\xad\xc7\x58\x0e\xc4\xae\x91\x46\x4b\x19\xd3\xbe\x0a\x29\xe4\x94\xf5\x41\x93\xe4\x63\x14\x5e\x39\x05\xae\xc3\xef\x97\x8a\xbd\xae\x7d\x6e\xb4\x6e\x73\x4b\x6a\x4f\xd2\x65\xa2\x67\x07\xd8\x58\xc2\x3b\x3e\x37\xb2\xe3\x28\xd1\x1d\x67\xd4\x28\x8a\xf5\x94\x97\x06\xaa\x40\xd1\x9a\xb1\xf2\x24\xe1\x62\x19\xe5\xcd\x9b\x8d\x4a\x5f\x85\x21\xed\x62\x01\x55\xe5\x92\xa5\x17\xbc\xe5\x3d\xa3\x0e\x42\x13\x29\xcc\x24\x27\x79\xc0\xc3\xaf\xb4\x41\xb0\x6f\x82\x15\x5e\x23\xd9\xc4\x2a\xe2\x90\x83\x75\x75\x78\xed\x46\x0f\xec\x8e\xef\xc5\x42\x8c\x39\x31\x63\x53\x80\x2c\x84\xaa\x0f\xf3\x50\x5d\x91\x00\x80\x07\x31\x68\x21\x50\x89\x76\xef\x3a\x75\xe0\xc1\xec\xe7\x1d\xe7\xce\xe9\x60\x47\x4f\x5c\xa5\x1c\x14\x2c\xf1\xdc\x90\x4c\x31\x54\x84\xfa\x72\x0a\xec\x89\x78\xcd\x67\x8a\xa2\x8c\x09\xc6\x9a\x8e\x0b\xf0\xf0\xbd\x80\x47\xe1\xf0\xe3\xbe\xd1\xa8\xe8\xd8\x27\x58\xd0\xe4\xe8\x01\x26\x63\x1f\x9c\x10\xdc\xae\x61\xf5\xf0\x72\x41\x6e\xb1\x45\x07\x4e\xf6\xd4\xc2\xaa\xa2\xef\xc8\x07\x60\x67\x3f\x92\x53\x3a\x65\x67\x6a\x1f\xf4\x08\xd6\x67\xc5\xba\x37\x4a\x94\x30\x19\xb0\x52\x21\xdf\x26\x09\x6a\x31\xb7\x6d\x89\xaf\x3b\x8c\xc4\xa0\xc0\xd4\xe4\xea\xc8\x6f\x1b\x2a\x80\xcd\x46\x61\xe2\xb5\x8c\x11\xd1\xb1\x53\x41\x57\x3e\xbc\x43\xe2\xc8\x62\xb7\x9a\x94\xad\xdc\xd1\xc4\x2a\x08\x23\xbb\xf6\xcc\xe3\x86\x77\x92\xcc\xf4\xe7\x54\x7e\x85\x83\x9d\xf5\x32\xa3\x49\x91\x39\x16\xb0\x97\x38\x7c\x74\xc6\x1c\xe0\x8e\x90\xf5\x73\xdb\x41\xe1\x82\x16\x95\x07\x43\x70\x5c\x71\x65\x7d\xa8\xc2\x26\xdb\x90\x9e\xf4\x52\x10\xa5\x03\x58\x71\x9c\xfa\x08\x8b\xea\x74\x47\x6e\x84\xb9\xaa\xd5\xd0\x8d\x0d\x08\x7f\x31\x84\xcf\x1a\x80\xa3\x66\x14\x18\x77\xaa\x90\x54\xd6\x9e\xe0\x48\x0c\x31\x33\xc2\x81\xd3\x39\xef\x98\xd3\x41\xd5\xc2\x28\x11\xb6\x48\x18\x5c\x4a\xa4\xcb\xf1\x5d\x61\xc0\x3a\x3f\x77\x84\xf8\xb4\x5d\x19\x74\xb9\x70\x49\x78\x75\x4a\xa1\xb9\x43\xf2\x14\x49\x1b\x07\x48\x9a\xe2\x95\x1a\xb4\x79\x02\x0c\xe0\x86\x55\x3a\x4d\xe4\x83\xee\xcc\xc7\x2b\x1f\x23\xf3\xa3\x5a\x15\x1b\x13\xdc\x3e\xac\x07\x78\x44\xe7\xf6\x98\xc1\x45\x24\x6e\x42\x20\x7c\x47\x2b\xbb\x66\x48\x89\xb6\xf3\x01\x83\x6a\xa2\x57\xf7\x86\x26\xa2\xef\xab\x37\xcd\xf9\x75\x1d\x44\xc7\xd3\xde\x91\xd4\x4f\xd7\x3e\x81\x2e\xbb\x0a\x8d\x9f\x67\x87\x3b\xb5\x1c\x9a\xb2\x75\xaf\x50\x80\xf4\xc0\xe1\x52\xbb\xdd\xe8\x86\xb4\x23\x31\x8c\x95\xee\xe0\xb3\xcf\xa1\x15\x32\x5b\xf6\xa7\xd3\xb6\xaf\x0e\x29\xa8\xf1\x4c\x16\xf4\xe1\xbd\x08\xb0\xed\xdc\x18\xd3\x77\x0e\x5a\x4e\xb3\x0d\x46\xef\x78\x4f\x4e\xc2\xf2\x89\xf4\x31\x97\xab\x54\x72\x58\x0c\x44\x40\xbb\xc5\x29\xc6\xbd\x49\xb0\x6b\x0b\x1d\x61\xb5\x03\xbc\x53\xe0\x69\x58\xb7\xa4\xd3\xc3\xdd\x98\x82\xd7\x1c\xfb\xc0\x03\x43\x41\x03\x24\xf6\xda\x95\x34\x3c\x55\xd8\x96\x38\xdc\x94\x4d\xe3\xc4\x92\xd7\x90\xd8\x5b\xf8\x6c\x91\x14\x89\x5a\x8b\x45\x8f\x38\x90\x3d\x93\xbb\xe6\xe2\xc5\x2f\x8c\x32\x38\xce\x41\x91\x07\xc3\xd6\x5c\xa9\x1c\x12\xee\xc3\xe7\x3b\x7e\xd6\xc4\x8c\x73\xcb\x07\x58\x54\x8e\xc3\xef\xc5\x58\x7e\xb8\xd3\x43\x08\x60\xdd\x94\x57\xad\x5e\x55\x9c\x02\x64\x42\x54\x2f\x09\x3d\x68\x9e\x7d\x9c\x46\x98\x41\x25\x35\x21\x5f\x15\xb4\x2c\x7a\x59\xcb\x82\x91\x0e\x74\x2d\xbf\x6b\x99\x4c\x8d\xc4\xc1\x2b\xab\x44\x28\xda\xe4\x95\x44\x7c\x38\x1f\xe0\x11\xb3\xde\x63\x06\x17\xa6\xcf\x8a\xc0\x20\xce\x6e\x6a\x69\x2c\xa9\x53\x17\x9a\x97\x83\x72\x8b\x3c\x6f\x89\x82\x5d\x25\x5e\x7b\xd2\x73\x5d\xff\x3f\xda\xfe\x3e\x0a\xbc\xa6\xaa\x0b\xc5\x51\xc1\xd4\x00\x4d\xf3\xa7\xf0\x28\x82\x48\x86\x29\xd0\xcc\x99\x19\xc5\x50\x53\x13\x5f\x41\x94\x50\x54\xca\x79\x3f\xf3\x76\xce\xbc\x9d\x99\x33\xa3\x18\xf9\x43\xed\xc1\xd4\x7c\xb9\x81\x61\x81\x74\x15\x2d\x79\x52\xd0\x50\xd4\x94\x4a\x52\x04\x54\x88\x7c\xcb\x80\x04\x4c\x0c\xa5\x74\x21\x10\xd7\xee\x7a\x1e\x2e\xde\xef\xf5\xdb\x5a\xdf\xb5\x5a\xdf\xf3\xff\xfe\x63\xd6\x3e\x33\x9f\xf3\xd9\x7b\x7f\xf6\xde\x7c\x36\x6c\xaf\xf8\x37\x14\xcc\x2a\x4d\x0e\x39\x99\x13\x66\x0d\xdb\x25\x33\x7c\xe4\x33\xac\x6b\xb1\x6e\x5b\x49\x64\x61\x99\x54\x45\xd7\x02\xec\x5a\xcc\x2b\xba\xec\x68\xe9\x07\xdc\xe3\xc2\xb5\xe0\xa2\x4d\x76\xb4\x3c\x4d\xaf\xcb\xb0\x03\x02\x73\x50\x75\xb4\x56\xec\x5e\x4e\x3f\x6d\xb9\x47\x55\x7e\xc5\x76\x69\x7a\x02\xba\x34\xee\xf7\xc8\x6b\x21\x79\x4c\x2c\x70\x4c\xc3\x6b\xc2\x54\x5a\xb9\x9d\xa7\x0c\xa3\xe2\xb6\x53\x04\x1a\x70\x1c\xfb\x4b\xc6\xce\x06\x11\xaa\x2d\x71\x2d\x93\x9b\x83\x35\x0f\x08\xc6\x07\xc3\xc6\x1b\x4b\xf6\xb5\x04\x62\x37\xcc\xa6\x8b\x2d\xae\x75\xb2\xfd\xac\x57\x94\xa9\xd8\x2a\x4f\xa0\x98\x71\x14\x08\xb1\x1e\x64\x3f\x95\x01\x3b\x4b\x3a\xd3\x73\x58\x85\x6a\x15\xbb\x2d\xdc\xd1\x73\x57\x8b\xd8\xab\x17\xf9\x0a\xb5\x0a\x4d\x02\x6b\x45\xf7\x0e\xf5\x39\x67\x04\x67\xd4\x46\x37\x4b\x0b\x46\x13\xf4\x88\xdb\xb9\x1d\x7d\x87\x02\xc0\x8e\xcc\x08\x61\x9d\x57\x88\x8d\xb2\xd2\xce\xa5\x39\xf7\xd6\xbb\xe9\x34\x2b\x02\x19\xae\xb9\x10\xb9\x44\xae\x69\xdd\xb6\xb0\x9d\x25\x25\x9d\x17\xe4\x23\x73\xdb\xff\x62\xbb\xf4\xad\xb2\x43\xb7\x7b\xbb\xf4\xf0\xb9\x11\xe0\x49\x89\x6a\x05\xb4\x79\x4c\x33\x26\x76\xc5\x93\x85\xd5\x89\xa6\x4e\x24\xf4\x0a\x20\x67\xc6\x1d\x06\x12\x93\x2e\xe9\x7e\xe0\x78\x66\xa3\x00\x0f\xce\xaf\x79\xba\x2d\xae\x2c\x72\x2e\xfc\x49\xa7\x64\x9d\x17\x02\x1c\x5e\xd4\x56\xfd\x0e\xf6\x86\x4f\x56\xae\xc8\x5b\x16\x97\xda\x11\xa5\xce\x93\x54\xdd\x3c\x37\xdb\x3a\xb7\xe4\x21\xb5\x87\x0f\xf0\xb4\xbe\x6b\x5d\x8a\xc4\x5d\x22\x39\x9c\x0c\xa3\x5c\x71\x89\x92\x2d\xb2\x77\x8e\xba\x4a\x03\x36\x79\xc8\xd4\xc9\x74\xdd\xc0\x56\x8a\x46\x74\x35\x9b\x8a\x06\x90\x39\x05\x41\x81\x53\xe9\xed\x15\x75\x8e\x19\x21\xf5\xb0\x93\x18\x5d\x95\xe8\x58\x24\x3e\xbc\x36\x75\x0c\x33\x04\x26\x87\xe7\xd0\x2d\x92\x84\x75\x23\xe7\xd2\x74\x36\x06\x5c\xd1\xe0\xb5\x6f\x79\xa5\x38\xfb\xbd\x4f\x77\x02\xbd\xee\x2b\x51\x58\x66\x83\x76\x9b\xe5\x6e\x59\xa5\x71\x00\x77\x30\x46\xd2\x4e\xb5\x9e\xdb\xbc\xa2\xc1\x5c\x8f\xbc\x5a\x25\xf4\xba\x02\x18\x93\x63\xeb\x5c\x85\x70\x60\x90\xca\xcc\xb2\x61\xd8\x76\xa9\xed\x6e\x4f\x3f\x73\xef\xc8\x30\x77\xc5\xc4\x06\xb6\x60\x17\xf4\x1c\x7a\x5d\x58\x9a\xbb\xa9\xb3\x4a\x24\xd3\xb9\xc8\x23\x66\x8b\xa3\xe0\x27\x39\xf8\x49\x28\xe4\x12\xa7\xb6\x27\x95\xda\x4d\xe0\x72\xab\x7c\xf2\x6d\x06\x97\x15\xaf\x91\xd6\x2d\xca\xc1\x1b\x22\x40\x2f\x33\x95\xb4\x72\x5a\x31\xa3\x2d\xbb\x16\x93\xdc\xcc\x9e\x4c\x15\xf8\xf0\x6c\xaa\x83\x5e\xe1\xb8\x3c\xa2\x5e\x09\x27\x3b\x51\x9d\x9c\x90\x9e\x07\xde\xd2\x4e\xa2\x3f\xd2\x04\x3a\x2c\xa6\x02\x91\x0b\x6b\x69\xcf\xde\x50\xc5\xbc\xb8\xa2\x12\x4f\xc7\xba\x9f\x21\xb7\x54\x51\xd8\x90\x20\xdb\x61\xd6\xbd\xd3\x06\x60\xf4\x7d\x9d\xb6\x80\xa3\x1b\xdb\x40\xf0\x82\x26\x9b\xf5\x6a\xae\xa0\xbf\xc2\x3b\x76\x8e\xa6\x0b\x4e\xd3\x9d\xba\x98\x86\xa6\x56\x65\x89\xe5\x24\xdd\x1f\x6e\x9b\xf2\x4c\x03\x97\xcd\xf7\xde\x5b\xdc\xf4\x25\xcb\xdc\x80\x38\x18\x8f\xa3\xd3\x54\x0b\xf2\x5e\x21\x54\x76\x27\x12\xd9\x1b\x2f\x69\x43\x3b\x3d\xa3\xaf\xa7\xc6\x2b\xdc\xb5\x5b\x8f\xb8\xda\x2b\xd2\xca\x1d\x44\xb8\xed\x88\xe3\x30\x41\x31\xce\x86\x0d\x00\x3f\xc8\x5c\x19\x3e\x4d\x97\x29\xd7\x15\x89\xc2\xda\x68\x26\x9c\xbc\x04\xc2\xae\x28\x37\x98\x84\x0b\x2e\xc9\x43\x53\x49\x6d\xb6\xc7\x83\x69\x64\x8b\xc3\xed\xa8\xb5\xd2\x33\x0d\x82\x1d\xb5\x02\x90\xb1\xcb\xdd\x56\x30\xae\xf0\xc5\x26\x16\x5f\xb6\x45\xe0\xa4\x5a\xde\xa4\xaf\x03\xee\x87\xa3\x9c\x59\xbe\x25\xdb\x8f\xc5\x89\x60\x53\xe3\x4a\xf0\x19\xf6\x65\xe5\xfe\xe6\x84\xee\xad\x2a\x50\xb7\x19\x5c\x9c\xb2\xda\x18\xda\x25\xab\x4c\xe1\x41\x11\xa6\xeb\x89\x81\xf6\xe7\x3c\xa8\x48\x41\x67\xbe\x8b\x6a\xad\x11\x49\xd7\x6c\x85\xb8\x64\x60\xd9\x12\x1c\xde\xdd\x8e\x91\x13\xa0\x2f\xfb\x49\x49\x8f\x4b\xb2\x9c\x58\xb2\x77\x02\x07\x9d\x83\x28\x1e\xec\xc2\x64\xdf\x0e\x64\x96\x71\xc5\x7f\xd2\x99\x10\x2b\xa5\x2e\x6c\xee\x20\x77\xc7\x42\x2b\x59\x9c\xd9\x56\x06\x61\x81\x3c\x82\x75\xe1\x5d\x90\x8a\x65\x0f\x3c\x6e\x92\x4d\x7e\xc5\x64\xc8\x32\x12\x52\x62\x84\xf3\x60\x1c\xec\xf2\x3c\x8e\x8d\xc0\x76\x72\x39\x61\x94\xc2\xf4\x5c\x93\xcf\x07\xa4\xeb\x19\x28\x5a\x7b\xa8\x97\x9c\x62\x90\x03\x7b\x2d\xdb\x26\x0d\xc0\x71\x36\xc8\xf7\x86\x86\x23\x93\x4e\xb8\xb2\xa6\xb1\x6b\x0e\x28\x58\x58\xc0\xed\x88\x47\x40\xfe\x0a\xb1\x11\x87\x7a\x1c\x36\x74\x39\x26\x3f\x03\x93\x1c\xec\x26\x34\xe9\x77\xbf\x22\xd7\x85\x3d\x0f\x1a\x97\x9c\xd7\x2d\xd5\xad\x7b\xb1\xc0\x2b\x46\x16\xd0\x93\xd7\xad\xc1\x08\x37\xe3\x96\x63\x28\x3d\x1c\xcd\x2e\x18\x56\x78\xe5\x79\x43\x2d\xc7\xb9\x19\x0c\x40\xed\xdd\x57\xb4\x8c\x70\x45\x9b\x3e\xed\xa4\x76\x6e\x4e\x34\x39\x5b\xab\x37\xcb\x38\xed\xe8\x51\x11\xca\xe5\xea\x6c\x11\x70\x8a\x2e\xf2\x06\xed\x14\x98\x55\x40\xd7\x71\x73\x83\xd7\xad\x6a\xd6\xb7\x9b\xb9\x4c\x97\xfc\xcc\x1b\x55\xb5\x05\x22\xe9\x82\xb1\xb7\xac\x32\x60\x7b\x11\xd6\xf4\x52\x72\xa1\xfb\xa9\xa7\xea\x47\x9c\x4a\x1e\xe5\x0a\xe6\xc2\x76\x18\xf7\xca\xaa\xcf\x86\x39\x07\xeb\x0e\xbc\x3b\x5a\x64\x0b\x42\x1e\xf0\x75\xa8\x65\xd1\xd3\x72\xe2\x25\x8d\x2d\x32\xb8\x5e\xf2\xa0\xbc\x24\x0a\x66\x06\xa5\x49\x7c\x2f\x65\x70\x1a\x4d\x3b\x77\xdf\x41\xe7\x27\x23\x00\x1e\x95\x17\x55\xad\x1f\x43\x16\x03\x0f\x7f\x45\xe2\x8e\x06\x8f\x3c\x58\xa9\x26\x74\xa7\x69\x78\x67\x62\x2d\xa2\x85\x05\xd2\x63\x94\x0d\x52\xe9\xc4\x76\x26\x75\x8e\x70\x96\x0a\x63\x3a\xe0\x15\x2c\x4e\x12\x37\xd6\x65\xe3\x80\x1d\xa0\xd3\xe4\x3a\xe5\x40\x74\xb4\x6b\x22\xe7\xa2\x12\x51\xa9\x1e\x9e\x2f\xb4\xca\xce\xc0\x28\x67\x4f\x57\xcc\x57\xf2\x04\xa8\xa9\x90\x4b\xb0\x39\xbb\x41\x78\x1e\xbb\x19\x88\x34\x52\x8b\x9f\x84\x07\x3c\xb7\x29\x41\x36\xc5\xc9\x25\x63\x93\xd5\x25\xc3\xdb\xf8\x3c\x8d\xcb\x26\xb0\x2a\x27\xef\x4d\x70\x6c\xcb\x5c\x39\xac\x3b\xf2\xd0\xa5\xc3\x9f\xdd\xa1\xdd\xd3\x52\x51\xc2\x73\x5d\xea\x15\x93\xb5\xe9\x3c\xe4\x4a\x87\x5c\x3b\x25\x00\x02\xab\xc7\x96\x4e\x8e\x06\x93\x5a\x9d\x4e\x64\xec\x84\x4d\x69\xe0\xda\xfb\xd1\xc9\x2e\x2d\xba\x41\x3e\xff\x5e\xb1\xd1\x1d\x2f\xfb\x9c\x97\x3f\xe8\x31\x77\x7d\xf5\x7f\x7f\xd8\xbf\xe8\x1f\xf4\x0d\x2f\xf8\xbb\x1f\x7b\xdf\x2f\xf8\x8c\xfa\xb0\xf1\x89\x9f\xf9\xd6\xb7\x3c\xe4\xcb\xde\xfc\x94\x77\xfd\x19\xb1\xd1\xe3\x1f\xaa\xfe\xd1\xab\x5f\xf8\xe3\x1f\xf6\xc7\xf7\x7a\xc8\x57\xfd\x8c\xfe\xb6\x5f\xfc\xbe\x8f\xfa\xfa\xaf\xfd\x4f\x5f\xff\xa6\x7f\xfe\x32\xf4\xba\x2f\xf9\xf0\xf0\x65\x37\xaa\x72\xee\xfd\xfd\x6f\x7b\xfa\x53\x5f\xfa\xd4\x9f\x7b\xc3\xbb\xdf\xfd\xed\xf7\x7b\xd5\x77\x3f\xe6\x51\x1f\xf3\xc2\xb7\xff\xff\x3f\xe6\xeb\xbe\xfa\x49\x7f\xfc\x71\x9f\xf8\x9a\xbf\xf1\xbe\x7f\xeb\x06\xd3\x57\x3e\xe3\x5f\xbe\xc6\xfd\xc8\xc7\xdc\xf9\x9a\x97\x7f\xc4\x5b\xff\xe0\x55\x9f\xff\x85\xdf\xf6\xc9\x0f\xff\xb0\xfb\x3c\xee\xd1\xef\xfe\xf0\xaf\xff\x9f\xaf\x10\x9f\xf5\x93\xcf\xb9\xc1\xf4\xed\xbf\xfb\x3b\xcf\x7c\xdb\x33\x7e\xfa\xa3\xef\xf3\x9a\x8f\x7d\xd3\xfd\xff\xdb\x0b\x7f\xc1\xb1\xc7\x7f\x30\xfb\x93\xf0\x9b\xef\x78\xc5\x57\x3d\xeb\xc1\x1f\x5c\xbf\xe8\x06\xd3\x5f\xfb\xe5\xa7\x3e\xef\x9b\xee\xba\x8b\xfd\xcd\xa7\x7d\xe1\x37\xe2\x0f\x7c\xc3\x0f\xbe\xec\x53\x9e\xf9\xc7\x5f\xbf\xbc\xe8\x0d\xff\xf4\x19\x0f\xf9\xc8\xb7\xfc\xf2\xe7\xdd\xe7\xc6\xd1\x4a\x3f\x72\xff\xb7\xbf\xe5\x51\x3f\xf8\x87\xf7\xf9\xa4\x97\x3e\xf7\xf9\xcf\x7b\xb5\xfd\xad\x1f\x7d\xe1\xeb\xde\xfd\x13\x9f\xff\xd2\x4f\xfb\xe4\xf0\x45\xee\x65\xbf\xf1\x43\x37\x98\x3e\xf2\xd7\x7f\xf5\x37\x3f\xec\xcd\xaf\xf8\x8b\xbf\xff\xcf\xda\xe3\x1e\xfb\xdd\x0f\x7a\xfa\x0b\x3f\xda\x3d\xe4\x7f\xbc\xf3\x49\x9f\xf1\x59\xdf\xfe\x89\x6f\x79\xc9\x8f\xfc\xf4\xbf\xba\xc1\xf4\x5e\xf9\xbc\xcf\xdf\xce\xcf\xb8\xd7\x87\x6f\xaf\xba\x4f\x79\xc4\xfa\xf0\x27\xfe\xe2\xe7\xa4\xfb\x52\xf9\xe8\x3f\x7c\xe0\x5f\xfd\xc9\xaf\xf9\xc4\xef\x7d\xf2\x9f\x8a\x8d\x6e\xe5\xd5\xdb\x2c\x27\x45\x7a\x35\xb3\xa3\x55\x73\x6e\x51\x12\x56\x90\x13\xe9\x80\xe9\xb1\x38\xd3\xa6\xe9\xd8\xeb\x19\x26\x61\xaa\x2d\x27\x39\x79\xcd\xe9\x92\x61\xda\x44\xb5\xf5\x14\xaa\xb3\xb6\x03\x20\x35\x59\x54\x64\xd1\x78\xbd\x57\xd8\xcd\x30\x78\xa5\x16\xe9\x48\x97\x95\x67\x33\x30\x5b\xaf\x48\xbf\x31\x48\x9a\x50\xb1\x7b\x03\x85\x32\x74\x39\xd9\x50\x27\xcc\xb4\x42\x4b\x42\xa2\x43\x30\xb1\x16\x89\xe3\x22\x74\xd4\x43\x07\xe5\x2e\xa9\xfb\x26\x98\x35\xc7\x41\x41\x1f\xf9\xae\x4a\x8d\x9c\x76\xc6\x8d\x31\x83\xc0\x6c\xa8\xf7\x65\xbd\x67\xc6\xf8\x06\x2c\x45\xd0\xac\x84\x5e\xd1\x3d\x40\x81\x6a\x7a\x76\x26\xf9\x99\xa8\xd5\x72\xb1\xf5\x3c\x1a\x25\xa1\x49\xa7\xbc\x21\x7d\x0d\xf3\x04\x8a\x24\x7e\x10\xbf\xf3\x92\xaf\x68\x0a\xa2\xfb\x16\x50\x18\xab\xd1\xa2\x2e\x78\x77\x06\x73\xd3\x7b\x03\x79\xdf\x83\x51\x85\xed\xc0\xed\xfb\x3c\x8f\xa1\xcc\xa6\xcd\xee\x85\x37\x57\x0c\x4c\xad\x0b\x0a\x49\xab\xc5\x93\x21\x0b\xe1\xc8\xc5\x05\xea\x49\x8e\x00\x4a\x8e\xc0\x84\xcd\xc8\x85\x2e\xbb\x3b\xb0\x6e\x86\x00\x33\x2e\xd9\x54\xad\x12\x02\xcd\x46\x47\x0f\x7e\x62\xb9\x02\x63\x82\x37\x72\x74\x1f\x5d\x43\xa3\xdb\xb5\x89\xc0\xbb\x0e\x44\x69\x0a\x35\x76\x5e\xf8\x9b\xe8\xe3\xad\x70\xf8\x36\xd3\x47\x65\x36\xb6\x1d\x9a\x39\xd3\x08\x4f\xc5\xe5\x4c\xd0\xa1\xf0\x72\xe8\xaa\xd2\x41\x57\x24\x09\x20\xc1\xed\x76\x6f\x5d\xef\x12\xeb\x79\xc5\x7c\x00\x76\x0c\x8c\xf0\x91\x87\x40\x72\x48\x7d\xc8\x2c\x78\xdb\x60\x9c\x4b\x4b\x35\xcf\x2c\x59\x69\xb9\x29\x06\x76\x12\x22\xf6\xbd\xa5\x2b\x22\xa1\xcd\x2d\x27\x03\x38\x6c\x6d\x66\xe6\x33\xf1\xb4\x05\x10\xad\x29\x4a\x38\x2b\x00\xde\x4d\xde\xec\xa2\x0a\x5e\x8d\x21\x67\x34\xda\x5c\x41\x99\xd4\xb6\xe8\x12\x22\xad\x11\xcd\x14\x96\x02\xec\xbe\x4c\x95\xee\x46\x35\x7f\x88\x73\xaf\x29\xa3\xda\x31\x47\x6e\x35\x49\x9e\xb1\x8f\x2b\x2a\xf1\xde\x47\xa2\x93\x5a\xd7\x7d\xeb\x80\xc1\xe4\x77\x0c\x2b\x96\x08\x80\xd2\xd7\x23\x95\x75\xa4\x1a\x74\xa1\xcb\x09\xc5\x6c\x62\xb8\x4b\xb4\xea\x5d\xe8\xe1\xe6\x39\xea\x86\x01\xdb\x74\x83\x2d\xf1\xd2\xe4\x50\x61\x3b\xcf\xd3\x25\xca\xd3\xba\x7a\x9c\x4e\x2f\x4e\x64\xa4\x29\xe5\x0a\x11\x1a\xef\xf5\x0c\x25\x13\xcf\x14\x0a\x3a\x1e\x19\x11\x0d\xa7\xd8\xe1\xae\x1c\x42\xa1\x2d\x92\xd6\x63\xee\x5c\x09\x4c\xa6\x39\x48\x4e\x57\x14\x51\x6d\x5f\x17\x12\x31\x5e\x17\x8b\x8b\xc1\x2b\x9e\x7c\xef\xcb\x4a\xa0\x02\xde\x47\x3e\x05\x3e\x56\x57\xb9\xde\x15\x68\x27\xcd\x92\xc0\x7c\x13\xb8\xdc\x8a\xb9\xdd\x66\xe6\x92\x3b\x57\x3d\xf4\x04\x60\xc5\xc6\x55\xd8\xbc\xcf\x40\xd2\x68\x36\x36\xb1\x97\x55\xc9\x25\x03\xdb\x8a\x46\x88\x25\x97\x56\x77\xc9\x7c\x00\x44\xcd\x2e\xf3\xa2\xb3\xf0\x42\x34\xa0\xce\x3e\x8f\x46\x39\x4b\x5b\x8c\x56\x96\x19\xfc\x02\xa6\xa7\x56\x57\xc8\x7a\x18\x67\xac\x57\x0c\xd3\x4e\xd8\x9b\x83\x56\xbd\x8a\x31\xb5\x58\xf7\xb8\x9e\x0b\x11\x33\xc8\xae\x36\xbd\x1d\x71\x91\x03\xec\x74\x28\x7b\xa8\xc3\x42\x49\x5c\xb9\x64\xc5\x77\xea\x7c\x09\x0e\x9a\xca\x89\x09\x8b\xdf\x90\x0e\x5d\x59\x47\x1c\xdd\xcc\x5e\x16\xb5\xee\x82\xa7\xb9\xa6\x36\x2c\xd0\xa9\xf9\x72\xc9\xea\x0b\xed\x87\x4a\xb1\xc7\x18\x83\x28\x44\x8a\x49\x84\x9b\xd6\xd9\x96\xd9\x1c\xfb\xac\x43\xc1\x60\x23\x39\x57\x73\x96\x69\x79\xbc\x42\xd5\x49\xb3\x1a\x4d\x67\x3e\x2a\xcf\xa2\xc5\xe3\x70\xfa\xdc\xc8\xa2\x96\xb0\x91\x16\x48\x3e\x83\x73\x40\x3b\x0e\x56\x00\xe1\x58\xd0\x58\xd2\x15\x89\xaf\xd1\xf0\x7a\x50\x54\x8e\x9d\x58\x42\x34\x92\x72\x85\xa3\xa4\xc5\x5b\xcf\x44\x6d\xed\x70\xd2\xd7\x41\x96\xa6\x48\x04\xdc\x3a\x0b\xae\x18\xc4\x62\x9b\x43\x44\x6f\xda\x04\x16\xed\x29\x43\x35\x5b\x39\x28\x1a\x2b\xd4\xf1\xee\xd8\xb8\x76\xa2\x56\x0a\x29\xc3\xd2\x80\xd3\x61\x45\x97\x9b\xc0\xe5\x56\xb1\xde\x6d\x66\x2e\x43\x62\xae\x1a\x49\x65\xb3\x07\xc7\x88\x28\xba\x21\x11\xa5\x82\x19\x4b\x56\x69\xde\x51\xcd\x01\x6c\x2b\x6d\x7d\x3b\xd7\x2d\xa5\x4b\x16\x98\x19\x2a\x37\x7f\x77\xc4\x2e\x13\x62\xde\x0a\x42\xcd\xb9\xc5\x42\x5c\x62\x46\x1d\xe1\x30\x51\x9b\x9d\x95\x22\xb7\xdd\xc1\x43\x47\x2a\xae\x10\x1b\x45\x7f\xfa\xd8\xe4\x9a\xfa\xf0\x42\x2f\x01\xa5\xe6\x45\xad\x01\x72\x9b\x38\xe4\x2a\xce\x51\x21\x92\x8d\x1c\x5e\xe8\xb3\xcf\x99\xae\x48\x02\xf2\xea\x25\xca\xb8\x2e\x7d\x77\xb9\xf9\xb3\xf3\xc3\xb8\x72\xb2\x4c\x0e\xe3\xc2\x56\x84\x56\x58\xcc\x2d\x96\x96\xd9\xb1\x2e\x7a\x4d\x57\x34\x8c\xa2\xd8\x45\x2e\x1b\xef\x47\x5a\x2d\xd9\xab\x67\x9c\x7b\x1f\x91\x38\x2d\x74\x05\x8b\x92\xd6\x33\xe2\xda\xdc\xbe\xa2\xe9\xe7\xe2\xc4\x15\xf7\x02\x64\xe1\x39\x2e\xa7\x40\xb5\xd6\x72\x76\xd3\xd1\x01\xa8\x2e\xdc\xa1\x1d\x14\xc2\x34\x16\x8e\xcc\x23\xcb\xca\x1a\x64\xcb\x0a\x2f\x59\x89\x82\x83\xee\xf2\x40\x36\xfb\x83\xa0\x62\x46\x0f\x38\x15\xeb\x73\x3d\x4e\x7d\xac\x4b\x03\x21\x48\x75\x22\xc0\x95\x4a\x41\xd0\x83\xf0\x2b\x78\xb5\x52\x8b\xf4\x14\x86\xb9\x90\x16\x3b\xd9\x5a\x39\x25\xe8\x65\x3f\xd4\xae\x37\xc0\x8e\x1e\xdb\x19\x89\x3e\xb4\xf6\xbb\x06\xe9\x60\x99\xdf\x04\x2e\xb7\xca\x0e\xdd\x66\x70\x89\x04\xe4\x45\x9b\xb2\x78\x0d\x02\xac\x43\xc2\x23\xdc\x4d\xb7\x0c\x0f\x54\xa8\xe8\xc7\xe2\x09\xf1\x30\x1f\xca\x1c\x6c\x75\xdb\x72\xc5\xea\x55\x96\x25\xe5\xbb\x22\xf3\x90\xf6\x80\x30\x74\x57\x91\x98\x87\xf5\x6d\x38\x75\xe0\xdc\xce\x8c\x28\x18\x8a\x68\x21\x02\x9e\x62\x46\x7f\x05\xb8\x50\x61\xcc\xc9\x90\x26\xa6\x59\x74\x08\x8f\x96\xfd\xe4\x10\x5b\xe4\x43\x37\x54\x15\xb0\x0f\xe8\xcf\xe8\xc2\x6a\x52\x04\x78\x70\x7e\xc5\x74\xfa\x71\x4e\x38\x42\x41\x8a\x35\x2f\xa6\x50\xcc\x10\x5c\xb2\x62\x07\x6e\x8c\x26\xa1\xdc\xa8\x9b\x5a\xce\xa9\xa2\x98\x71\x69\x48\xf3\x2b\xb8\xa4\x9e\xa7\x08\xeb\x16\x59\xd0\x6d\xf3\xfb\x6e\x2d\x87\x47\x28\x26\xb4\xba\x82\x0d\xa9\x50\xcd\xd1\xfd\xce\x1c\x3a\x6c\xce\x95\x59\x71\xc5\x29\x24\xc4\xee\x34\x18\x61\x30\x8c\xdc\x0e\xb2\xcf\x93\xab\x0e\xd6\x50\x34\x32\x69\x26\x1f\xe5\xe4\x58\x19\x0e\xaa\xa4\x6c\x9a\xc4\xaf\x08\x11\x29\xc3\xb6\x2f\xab\x1a\xbe\xf9\x31\x13\x87\x7e\x5b\x8a\x0a\x60\xdf\x17\x81\x8e\x88\xb0\x63\xa1\xb9\x59\x13\x8c\x54\x47\xb6\x19\x70\x41\x2e\x8e\x8d\x45\x46\xb4\xe3\x45\x19\x2a\x3b\x3e\x95\xcb\x1d\xd0\x2e\xfc\x96\x20\x6e\xa1\x25\x80\x4e\x8f\x16\x04\x98\x58\x46\x61\x18\xe6\x09\x6f\x02\x97\x5b\xe5\x93\x6f\x73\x58\xa4\xb4\x9f\x04\xe3\x3d\x53\x00\xf6\x4d\x06\x76\xb6\xa5\x23\xba\x11\xc4\xe1\x8a\x0d\xe7\x70\x3d\xd0\x12\x97\xac\x0c\x49\x76\x67\xf9\x12\x21\xea\x68\x77\x5f\xd0\x55\x8b\x05\x99\x30\x7a\x87\x56\x57\x64\x83\x93\x55\xf9\xca\x68\x89\x74\x9c\x92\x29\x4b\x48\xce\xbe\x9e\xa3\xce\x2b\xd2\xca\x19\x66\xc1\xe8\xaa\x9c\x21\x05\x0e\xe6\x7c\x9b\x9c\x47\xe0\xd6\x85\x98\xe2\xd7\xb8\x75\xc4\xd7\x19\xc7\x34\x0a\xaa\xe6\x9b\x74\x57\x74\x82\x70\x30\x27\xf5\x33\xad\x00\x7a\x25\x70\x4b\xc5\x55\x07\x82\x29\x36\x47\xba\x32\xef\x93\x58\x4b\x5c\xc3\x14\x6d\xad\x5a\x3a\x74\x45\x0f\x2b\x0d\x22\xce\xce\xfb\x9e\x64\x4b\xe2\xf0\xdb\xde\xc5\x36\x05\x41\x6b\xe5\x75\xa3\x63\xf1\x47\x4e\xde\x60\x57\x7a\x5c\xd1\xac\xa7\x19\x57\x68\x4b\x5b\x5f\x8f\x4d\x1a\x87\xf7\x0d\xef\xb9\x08\x17\x79\x3d\xd0\x11\xa9\xd4\x8d\x51\x59\x87\x46\x64\x8c\x52\x46\x8f\xbb\x05\x22\x34\x73\xc5\xbd\x98\x2e\xa5\xaa\xa5\x2c\x28\x81\x54\x62\x47\x8e\x91\x73\xe1\xc5\x0f\x36\xcf\x60\x04\x65\x09\xb9\xee\xa2\x72\x5b\x90\x80\x10\x7c\xc5\xac\x4e\x86\xf2\x54\x6c\x91\x29\x68\xd7\x40\x20\x8b\x00\x7b\xe5\xf3\xe4\x7e\x73\x7d\x4e\xb1\x16\x66\xe6\xd4\x25\x8e\x5c\xa5\x74\xd3\x0b\x73\xf3\xf0\x91\x5b\x55\xa0\x6e\xf7\x1a\x35\x91\xa3\x93\xae\xda\x83\x8e\x5e\x71\x70\x72\x01\xbe\x45\x0a\xd6\x79\x02\x71\x4e\x7e\x48\x71\xba\x9e\x76\x92\x36\x44\xb8\x47\xfc\x0a\xe2\xc9\xea\xcc\x68\x6a\x58\x56\x37\x95\xe6\x6e\xc7\xdc\x08\xab\x66\xda\x19\xc6\xde\x01\xc6\x96\x1d\xa9\xbd\xb0\xb5\x40\x2a\x4c\xdc\xf8\x15\x1d\x93\x07\xad\x9c\x50\xb7\x5a\x81\x0e\xd7\xf0\x48\x04\x9f\xe9\x74\xc7\xb1\xd8\x0c\x1d\x99\x2e\x76\x5e\x77\x5f\xa7\xb4\x21\x15\x2e\x13\xbf\x42\x0f\x50\x32\x48\x7b\xe9\x7b\x96\xb6\xe9\x06\xab\x76\x56\x77\xb1\xa1\x19\x58\xab\x47\x2a\xd9\x97\x36\xc4\xba\xdb\x0c\x03\x74\x1c\xb5\x71\x45\x9b\x59\xd9\xb7\x23\xe9\x11\x19\x9f\xb2\xf4\x15\x6e\xb0\x4d\x3c\xeb\x32\xc8\xb1\x08\xe9\x1c\x93\x62\x4d\x92\xd6\x05\xa1\x29\xa4\x2b\x7c\x5c\xf1\xa0\x98\x26\xa3\xe1\x24\xb3\x73\x3b\x27\x3d\x31\x6b\x41\x17\x54\xeb\xd3\xef\x0c\xf4\x20\x09\x56\xc2\x1d\xb9\x95\x13\xae\x64\x8e\xbd\x5c\xd1\x7e\xc8\xf7\xc3\x15\x6e\xb9\xa7\x56\x97\xd6\x04\xb3\x83\xe2\x66\x46\xb4\xa7\xec\x25\x2f\x3d\x2b\xbe\x93\xb0\xb1\xb4\xa3\x7d\x0c\x71\xce\x2b\xd6\xa8\xb9\x00\x02\xea\x51\x61\xa8\x00\x62\x48\x20\xac\x2c\xdf\x6c\xa9\x1c\x13\x36\x69\xeb\xb2\x6b\x0c\x2c\x82\x26\x72\xb3\x8e\xad\x82\x9b\x1b\xbc\x6e\x55\xb3\xbe\xcd\xcc\x85\x62\xb9\x17\xc0\x74\xdd\xf7\x0a\xac\x94\x88\x1c\x7e\x6b\x12\x66\xe2\x56\x52\x65\x16\xc5\xb0\xd8\x19\x28\xd0\x1e\xac\x74\x15\x2f\x79\x50\x6c\xcf\xc5\xcb\xd1\x0a\xa5\x19\x9d\xc5\xc3\xe5\xf0\x0c\x1c\x2b\xca\x85\x10\x03\x9c\x31\x05\x6e\x41\x71\x9c\x20\xca\xb2\xd4\x74\x45\xc9\x91\x82\xed\x68\x47\xf0\x31\x52\x0d\x46\x2a\xda\x9f\xc7\xba\xb9\x81\x48\x3c\x76\x1b\x5c\xdc\xa5\x6b\x96\x5b\xdc\x75\x1e\x63\x49\x9a\xb9\x2b\x7c\xd1\x02\x3f\xec\x8c\xc7\xf0\x28\x68\x57\x06\xa6\x10\xa0\xbc\xab\x8e\x90\x63\x30\x66\xd3\x37\xb3\x2a\x14\x38\x3d\xd9\x82\x60\x12\xe5\x8a\xfa\x1d\x59\x9d\x47\x68\x4d\x71\x45\xf4\x58\x49\xdd\x4d\xdf\xad\xc8\xa6\xad\x07\x14\x38\x88\x09\xaa\x57\x50\x0b\xb4\xf1\x16\x32\x74\xc3\x5c\x91\x4a\xf5\xe2\x50\xd6\xed\x4e\xbb\x55\xcd\xf5\x28\x30\xee\x75\xc4\x6a\x0b\x99\xab\x03\xae\x50\x06\x73\x3e\x0d\xb5\x1c\x9f\x76\xc1\x07\x00\x57\xf0\xea\x14\xdd\xea\x91\xdb\xce\x76\x14\xe6\x0f\x91\x45\x93\x5b\x6a\x2a\x65\xae\x18\xde\xe8\xcc\x24\x53\x08\x03\xd6\x1b\x02\x31\x37\x60\xaf\x50\xfb\x96\x02\xb5\x5e\x20\x3c\x67\x5f\x45\xa7\x38\xad\x98\xb5\xba\x19\xb2\x24\x05\xa6\xad\x07\x4b\x79\x2d\xa9\x33\x16\x51\x26\x55\xd6\x1b\x44\x68\xef\x15\x1b\x3d\xec\x91\x7f\xe7\xc7\x3e\x6a\x7c\xc7\x17\x3c\xef\xaf\xbe\xfb\x49\xff\x15\xfd\xb5\x5f\xfe\x37\xff\xe2\xcb\x3e\xe2\x95\x2f\xfb\xd2\xc7\x7c\xd2\x6b\xff\xf3\x43\x3f\xf2\x2f\xbe\xf4\x2f\xfd\x19\xb1\xd1\x77\xfd\xf5\x7f\xf7\xa0\x17\x93\xe7\x7c\xf6\x93\x9e\xff\xb5\x77\xfd\x2a\xbd\xf3\xed\x2f\xb8\xf3\x65\x2f\x79\xdb\x2f\x3e\xb5\x3f\xe6\xc7\x1f\xfd\xa0\x3b\x3f\x5c\x7f\xe5\x0d\xa6\x0f\xff\xd4\x6f\x4b\xff\x06\x1d\x7f\xff\x19\xdf\xf5\x27\xf8\xfd\x9e\xf3\x03\xdf\xfa\x11\xf8\xcb\xef\xf8\xfe\x4f\xbe\xef\xf3\x7f\xff\xb1\x1f\xfa\x73\x3f\xf3\xca\x4f\x3f\x6f\x30\xcd\x9f\xf4\xc0\xc7\x3f\xee\xbe\xaf\xb7\x77\xb8\x67\x3e\xfd\xf5\xf7\xfe\xf4\x6f\xf9\xba\x8f\xb1\xbf\xf7\x69\xf5\x0f\xfe\xfc\x3b\xef\xaa\xf6\x77\x7f\xe1\x5b\x5e\x72\x83\xe9\xf7\x7f\xc3\x5b\xff\xf3\xeb\x9f\xf6\xfd\xee\x05\x1f\xfc\xf0\xfc\x09\xbf\xc4\x9f\x06\xfe\x55\xf8\xa3\x7f\xfc\x4b\x9f\xf0\x17\xdf\x45\x7e\x2c\x3d\xa7\xff\xea\x9b\x6f\x30\x7d\xe8\xfd\x5e\xff\xb9\xec\x0f\x9e\xae\x9e\xf1\x23\x4f\xbb\xff\xa7\x3f\xf4\xfe\xcf\x79\xa4\xf8\xc5\x6f\x7b\x80\x7a\xf9\x2f\xff\xea\x8f\x3d\xf1\x93\x9f\xfd\xec\x4f\x7f\xf1\x0d\xa6\xcf\x79\xcc\x8f\x3f\xf0\x1b\xef\xb8\xd7\xaf\xbf\xcf\x37\x3d\xfb\xa3\x5f\xff\xf1\x1f\xfc\x41\x2f\xfa\x9d\x57\xbd\xf8\x03\xbe\xf1\x09\xcf\x7d\xcd\x23\xff\xc2\xc3\x9e\xf8\xbb\xbf\xf2\xa5\x37\x0e\x41\x7a\xd9\xf7\xbc\xfb\x9b\x3e\xee\x0b\x3e\xf0\xe7\xbf\xe5\x2b\x3e\x33\xbd\xef\x03\xdf\xf0\xa1\x7f\xfd\x49\x0f\xf8\xac\xef\xfc\x8d\x27\x7f\xcd\x17\xfe\xdc\x53\xbf\xe1\xeb\xf4\x8d\xcb\xd9\x5e\xf1\x01\x9f\xf1\x95\x7f\xfe\x7b\x9f\xf0\xfe\x8f\xf8\xfd\xcf\x8f\xef\xf7\xfe\xe8\x3f\x7d\xf8\x2b\xef\xc7\xdd\x2f\x3c\xfc\x13\x9e\xf0\x1f\x9f\xfe\x53\x7f\xe3\x33\xbe\xef\x47\xff\x54\x6c\x74\x2b\xaf\xde\x66\xfa\x08\xfb\x1a\x09\x4a\x19\x95\x73\x20\x90\x13\xe9\x55\xb1\x75\xd5\x05\x1f\x4d\x2f\xd2\xa1\x6c\x24\x74\x1c\xc7\xb8\x65\xc0\x12\x11\xec\x0a\x3c\x19\x6c\x29\xdb\x3e\xbc\x3d\xd9\x40\xb3\x4d\x10\x4a\x30\xd9\xe2\x18\x5b\x8d\x8b\x3d\x30\x5b\xa4\x3a\x10\xa0\xe3\x68\x83\xf5\xb2\xe6\x2b\xea\xbe\x7a\x33\xa7\xc4\xa3\x6f\x54\xd4\x19\x73\xdc\x4f\xe0\x8f\x13\x75\x31\x0a\x01\x9d\x60\x9b\x26\x3d\x42\xee\x5a\x38\x12\xea\x5a\x43\xba\xa2\x6d\xd5\xea\x46\x36\xae\xfa\xb9\x04\x54\xb6\x41\x94\x3e\x79\xda\x7d\xdf\x38\xc3\x7a\x67\x3b\xf1\xbb\x85\x16\x0c\x8d\xe7\xb6\x6c\xe7\x7a\x5c\xd2\x13\x6f\xd5\xe9\x40\x97\xb1\xb7\x2c\xab\xa8\x6c\x02\xec\xec\x86\xfd\x2e\x35\xe8\x84\xdb\xf5\xb4\xa4\xc2\xd6\xf9\xe6\xf7\x2d\xe3\x49\xd2\x15\x65\xaa\xe0\x4b\x10\x60\x9d\x85\x92\x0d\x63\xbf\x8c\x48\x0a\x38\x2c\x41\xc8\xcf\xe4\xf8\x96\x2b\x01\x1e\x23\x03\x04\x08\x66\x38\x25\xe6\x15\xd8\x9a\xed\xdd\x24\xc7\x1c\x7c\xc1\x30\x8f\x54\x4f\x26\x16\x8c\xe3\x46\xb3\xa6\x39\x7b\xb2\x8a\xcc\x0f\x37\x48\x9b\x4d\x2b\x2d\x00\x66\x17\x8c\x6d\x65\xd9\x60\x44\xe5\x81\x54\x0c\x70\x55\x23\xfb\x74\xc6\x7d\xdb\x1b\xb7\x73\x42\xb6\x67\xd3\xa1\xf6\xd2\xf0\x7d\x99\x65\x19\x12\xda\x72\xf3\xbe\x80\x5b\xe1\xf0\x6d\x06\x97\x4d\x66\x1d\xfd\x32\x34\xd8\xd6\x2d\xe9\xec\x8a\x31\x69\x97\x6b\x73\xb9\x07\x58\x34\x0e\xfd\x00\x52\x19\xb4\xb3\xc3\xef\xd0\xf4\x4b\x46\x42\x1d\x9a\xbb\xad\xd6\xd1\xdd\x58\xb5\x5f\x50\x04\x92\x79\x38\x36\xa7\x86\x18\x19\xb0\xee\x32\x5a\x94\x5b\xd0\x5e\x83\x0f\xca\xe8\x2b\xae\x32\xb5\x53\x2f\xcd\x70\x79\x7a\xab\x7d\x24\x22\xb7\xca\x64\xcf\x55\x2c\xfb\xee\x9c\x2e\x94\x6e\x1b\xcd\xa5\xa7\xbb\x1f\x39\xc5\xdb\xb8\x64\x5f\x25\x83\x27\x1d\x20\xf6\xed\x6e\x74\xb1\xeb\xce\x75\xcf\xb3\x18\xba\x14\x9c\xd9\xdd\x04\x3a\xd6\x45\x61\xc8\x4f\xe1\xaa\x05\x33\x6f\xee\x8a\xdc\x7e\x2d\x35\x0d\x79\xe2\x33\x37\x88\x7a\x68\x6c\xb2\x73\xa7\x9c\x80\xb9\xca\xa8\x97\x0e\xdb\x06\xce\x96\xc2\x0e\x96\x93\x97\xa0\x66\xb9\x62\x8c\xb5\x3d\x8e\xd2\x98\x4b\x0a\xdb\x35\xef\xe2\x14\x1a\x71\xd6\xa2\x14\xa9\xd1\xe8\x26\xc5\xce\xe9\x46\xe8\xb6\x0a\xec\xe8\xb9\xec\x85\x5d\x01\xb4\xfe\xdc\xf6\x7d\x8d\xee\x08\xc5\x18\x92\x22\x61\x4e\xc5\x44\x21\x19\x91\x50\x32\x00\x47\x3c\x00\x1b\x9b\xda\x9c\x91\x26\xc0\x50\xae\x18\xcf\xb9\x93\xc5\xd9\x1d\x01\xd1\xa9\x35\x73\x5b\xf3\x32\xa2\x65\x35\x0a\x53\x7a\x65\x15\xec\xcd\x9a\x2a\xfb\xec\x73\x8b\xd5\x9b\x73\x15\x37\xef\x0b\xb8\x15\x73\xbb\xcd\xe0\x42\x92\xe3\x74\xe7\x81\x86\x35\x37\xc6\xdc\x8a\x8f\x3e\xbb\x73\xdb\x21\x50\x4e\x6d\x27\xa1\x1b\xc0\xf7\xd4\xc5\x91\x58\xa2\xfd\x4c\x57\xa0\xb2\x53\xa5\xf7\x8c\xa9\x39\xc1\xc8\x38\xcf\x20\x40\x65\x80\xa0\xe8\xb7\xb3\xc1\xda\x75\xa9\x92\x16\xd7\x57\x4b\xc7\xb1\x54\xd4\xcc\x15\x25\x3b\x8c\xe5\x2e\x5d\x40\x49\x0b\x3c\x3c\xc2\x2d\xd6\x48\xc4\xda\x7c\xf4\xa2\x6f\x29\x6c\x3a\x38\xc1\x14\x55\x8a\x96\xa3\x68\x21\xf3\x15\xbd\x7e\xc7\xb2\xf2\xba\x15\x1d\xad\x5e\x0c\x59\x18\x6e\x65\x32\x16\x96\x41\xe6\x62\x57\x35\x7b\x2b\x4a\x14\xba\x92\x5c\x8a\x55\xd2\x79\x7f\xc5\x55\x76\x83\xc4\x6d\x31\xee\xac\xbc\x4c\x09\x08\x71\x50\x95\x50\x08\xd4\x45\x8d\x75\xf0\x53\xe2\x92\x53\xe2\xfe\xd0\xb9\x9d\x74\xf6\x2b\x76\xe6\xb3\x84\xb3\xa3\x4e\x10\xa1\x9d\x6b\xeb\xf0\x38\x8f\x28\xfc\x9a\x86\x20\x78\xd0\x11\x5c\x8f\x3e\x93\x6d\x83\x4b\x6f\xb8\xb3\x6e\xaf\xd8\x14\xc9\x68\x09\x16\x27\x71\x94\x94\xe0\x54\x6a\xd9\x4b\x84\xb0\xed\xa3\xd2\xba\xc0\x7d\x39\x2d\x4c\xa5\xf9\x75\x24\x8e\xaa\x53\x2b\xf7\xfc\x8a\x7b\x41\xf2\x5e\xd9\x4a\x76\xa7\xce\x3d\x1e\x63\x49\xdb\x91\x83\xa5\xb8\x11\x5c\x81\xce\x55\x90\x53\x3b\xad\xe6\xa1\x61\xe8\x1b\xca\xab\x39\x6f\x02\x97\x5b\xc5\x7a\xb7\x7b\x01\xec\x7e\xa2\x38\x79\x0e\x72\xcb\x73\xab\x9b\x52\x47\x6e\x6d\x84\xb3\x1d\xb5\x2c\x69\xc3\xf9\x14\x5a\xc9\xc9\xc6\x0e\x04\xd6\xda\xd1\x0b\xa6\xf9\x30\x2e\x38\x03\xaa\x1f\x7a\x2a\x4a\x8c\x0b\x86\xcc\x1e\x4e\xa8\x20\x59\x6d\x4a\x00\x5b\x11\xb5\xae\x73\x6a\x6f\x33\x2f\x4b\xb2\xec\x8a\xb0\x68\x8b\x14\x78\xc9\xd7\x2d\x0f\xa4\xe2\x79\x84\x49\x04\xdb\x84\x1d\x78\x61\xc7\x99\xa0\x3b\x80\xdd\x81\x35\x68\xb2\xc9\xd4\x86\xc6\x25\x25\xbb\x19\xa9\x03\xb4\x80\xc8\x3c\x41\x4e\x98\xba\x24\x18\x5b\x45\x3b\x84\x07\x6b\xe1\xa0\xd5\x0d\xcc\x8f\x32\x34\x05\x2b\x6e\xca\x5f\xc2\xe2\x66\xb2\x02\x42\xdf\x44\x8a\x55\x37\xe2\x63\xa8\x32\x98\xb9\x2f\x65\x20\x68\xd9\xd0\x59\xbb\x72\xf8\x53\xd3\x20\xf7\xd4\x99\x37\x57\xf4\xfa\x61\xce\xc9\x61\xf7\x8a\xda\xce\x73\x9c\x30\xd0\xd0\xb2\x3c\x9c\x0f\xbb\xc4\xae\x36\x1d\xa5\x59\x0e\xbb\xea\xb5\x13\xef\x36\x98\xe1\x15\x41\x3b\x22\x46\x9a\x01\x85\x5b\xfb\xbe\x11\xac\x25\x1d\x81\x1c\xd2\x3a\xb1\x1f\xdb\xaa\xb5\xcf\x03\x6c\x0d\xbb\xa3\x9f\x5b\xd3\xe9\xc4\x97\xcc\x8d\xa8\x79\xe4\x33\x39\xc7\xf3\x6a\xfb\xb0\x52\xb0\xf3\x38\x64\xd1\x3d\x6e\xc3\x9c\x33\xed\x80\xc8\x16\x53\xf1\xc5\x06\xbf\xc3\x92\x6f\x18\x04\xfc\x5e\x70\xb9\x55\x76\xe8\x76\x4f\x93\x8e\x1c\x61\x14\x0d\x56\xcc\x2e\x28\x19\x29\x48\x3e\x72\xdc\x27\x39\x02\x03\x7c\xd1\x6e\xef\x33\xcf\xb0\x4f\x00\xf5\x5a\x53\xad\x57\x54\x5c\x21\x60\xdd\xae\x01\xe3\xf3\x1c\x7d\xc5\x70\x5f\xba\x9a\xe7\x69\xcf\x08\xd5\x39\xb2\x40\xe4\xc0\x19\xa7\xec\xd7\xa3\x2f\xdd\xd0\x76\x45\x27\x08\x4d\x86\x2a\x8b\x2c\x71\x15\xd1\x42\x89\x61\x4c\xb5\xbc\x9e\x06\xac\x61\x2b\x09\x9a\x25\x8c\x56\x76\x12\xe9\x36\x73\x38\x7d\x96\xe5\x8a\x3e\x70\x57\xa6\x3a\x60\xad\xae\x2c\x08\x43\x60\xd5\x12\x1a\x24\xae\x18\x1e\xcf\x19\x3d\xcf\xc9\x16\x8c\x6c\xf0\x09\xcc\xa1\xce\x34\xc4\x15\xf3\x95\x58\x01\xce\x10\xb6\x74\x74\x9e\xd6\xb0\xe4\x92\x75\x49\x62\xc3\x46\x11\xd9\x2e\xd5\x1b\x0c\x42\x3b\x27\x36\x06\x4e\x02\x83\xbd\x64\xca\x38\x82\x43\x15\xbc\x6c\xb0\x2f\x02\x9c\xca\x35\x5c\xb0\x5a\xc4\x89\xc1\x38\x21\x55\xb8\xb9\xaa\x32\xed\x98\xd6\xe0\xb5\x38\x48\xba\x64\x3d\x0c\xab\xc1\xf9\x30\xd5\x68\xd0\x19\xd7\x69\x5a\xa6\xee\x67\x3d\xa5\xa2\x41\x36\x30\x53\xdc\x48\x20\xab\xc4\x6a\x41\x68\xa3\x4a\x82\x2b\x2a\x0c\xb2\xd7\x23\xae\xdb\x30\x6b\x4e\x7e\xe7\x4d\x1e\x60\x3f\x37\x6d\x56\x69\xb8\xed\x88\xeb\x83\xa0\x83\x08\x0b\x36\xb0\xc4\xa1\x87\xe1\x37\xf7\x60\xdc\x2a\x9f\x7c\x9b\xc1\xe5\x64\x11\x55\x89\x38\x0d\xfd\xac\xd8\x5b\xa8\x90\xde\xcb\x01\xc5\xce\x9c\xa7\x22\x2a\xde\x20\x51\x58\x21\x85\xe2\x66\xab\x77\xe6\x8a\xe6\x95\x6d\x5d\x4d\x90\x8d\x5a\x88\x63\x6f\x0a\xcf\x75\xa4\x9a\x61\x6b\x7a\x1c\x8e\x37\xca\xe2\xac\x7c\xec\x2a\xf0\xb8\x01\xaf\x68\xbd\xa4\x40\xd4\x12\x56\xee\xdc\x88\xe2\x79\x0b\x70\xef\x02\x15\x4a\x25\xac\x01\x6f\x25\xe5\x4c\xf1\x30\x94\x62\xb2\xbb\x43\x2d\xc8\x0a\x7f\xc0\x2b\xf8\xd3\xaa\xe2\xb2\x26\xd4\x2d\x9a\x07\x36\x6d\xae\xc2\x37\x28\xa3\x8d\x9b\xe3\xc6\x05\x64\x12\x0d\x0a\xdf\xed\x22\x22\x64\xe2\x04\x5d\xd1\x99\x4f\xd7\x60\xd5\x26\x36\x0d\x33\x46\x58\xef\xe5\x44\xe7\xc9\x54\xc0\x2c\xa4\xa1\x48\x29\xe7\xc6\x49\x58\xf2\xc8\x83\x80\xea\x99\x52\x97\x7c\x91\xd0\x76\x44\x4f\xc6\xb7\xfd\x14\x74\x33\xa6\xc8\x23\x2f\xf1\x48\xca\xb2\xe2\xc4\x1a\xf2\x4e\xa1\x07\xdb\xe2\xf7\x65\x93\xac\x19\x7e\xc5\x17\xa1\x66\xe0\x0a\x0f\xae\x07\x1b\x13\x10\x22\xf1\x26\x0f\x15\x97\x68\xc9\x59\x74\x89\xd0\x4b\xbd\xba\xca\x7c\xd3\x85\xac\x39\xa4\x79\x89\x70\x7d\x21\x04\x6f\xa0\x69\x27\x47\x2f\xb3\x2b\x22\x28\x80\xb5\xad\xcb\xea\xcd\xb2\x4a\xc3\x04\x82\x1b\x2e\x89\x00\x64\x0e\x31\x4a\xf5\x37\xcb\xa4\x6f\x55\x81\xba\xdd\x3b\x1a\xc1\x71\xd8\x4d\x30\xd3\x51\x10\x15\xf3\xb9\x27\x83\xfb\xd9\x17\xe5\x83\x08\x59\xc1\xdd\xee\x93\x04\xc7\xf7\x1d\x43\xc9\x80\xbd\x22\x1f\xcf\xf2\x86\xda\x92\xa1\x8e\xbd\x52\xdc\xce\x00\x4f\x27\x40\xc7\x96\x24\x32\xd7\x5a\x0b\x65\x4b\x65\x3b\x74\xe3\x98\x67\x0a\xdd\x1c\xe3\x8a\xd8\x3a\x25\x7c\x14\xc7\x3a\xad\x11\x49\x39\x45\xa8\x08\xae\x92\x6c\x6b\x10\xe2\xa4\xba\xdb\x08\x9b\xa6\x7c\xf0\xb2\xd2\x49\x15\xf3\xe0\x8a\xfc\x13\x87\x6a\x39\xa6\x4c\x03\xc8\x6d\xc0\x21\xb6\x29\x61\x3c\x0b\x38\x3c\xc1\x20\x78\x7c\x86\x10\x08\x4e\x24\xf6\x4d\xae\x6c\x64\x3b\xaf\x08\xce\xd4\x36\x53\xf6\x4d\x82\x40\xb6\x62\xe1\x9a\xa6\x1d\x41\xf4\x7d\x03\xa4\xb5\x4c\x2a\x08\x54\xe9\x23\x67\x8c\x4a\x09\xa5\xc8\x72\xc9\x64\x48\x69\x63\xf6\xc5\x16\x2e\xc3\x4c\x6c\x59\x9b\xe4\x35\x0b\x33\x4d\xf5\x6b\xdc\xbc\xf5\xfe\x00\x72\x7a\x18\x15\xd3\x64\x68\x17\x2f\x19\xde\x66\x28\x14\x60\x83\x71\x88\xbe\x0b\x1d\x76\xe2\x75\xcb\x3a\x1b\x96\x0d\xd1\x3b\x40\x0b\xc0\xfb\x59\x8e\x23\xc2\x16\xd6\x3e\x00\xc9\x57\xf4\xa3\x88\xdc\xf9\xe4\xcd\x59\x28\xb6\xe1\xa1\x2c\x98\x22\xad\x56\x3a\x75\x3a\xc4\x92\xc7\x42\x6d\xc3\x47\x3e\x30\xdf\x61\x2b\xa3\x49\x76\xb3\x4c\xfa\x56\x35\xeb\xdb\xdd\x83\x41\x97\xae\xfd\x38\x07\xe9\x9b\x50\xd0\x15\xe3\xca\x71\xd4\xa8\x85\xd4\x88\x6a\x25\x62\x5d\xa4\x4b\xa4\xa1\x65\xa8\x04\x6d\xbb\xa2\x6f\x93\x45\x32\x3c\x71\xf4\x88\x10\x11\xc9\xa5\x54\x4a\x8b\x53\xa7\x35\x95\xc5\x1a\x7f\x5a\xb2\xae\x6c\x6c\xfb\x92\x98\x75\x2b\x24\xc5\x5d\x02\x2e\xb1\x6f\x82\x8f\x43\x65\x58\x1c\x4d\x84\xaf\x6d\x69\x28\x8f\x78\x66\xd0\x61\x1b\x72\x3d\xaa\xaf\x76\x1e\x42\x27\xb0\x25\x1a\x8a\xbd\x42\xbd\x87\x9d\x9b\x43\x82\xd3\x0e\x5a\x32\x03\xa6\xc8\xec\x69\x92\x6a\xa9\x6c\x55\xcb\x50\x7b\x5c\x17\x6b\x0d\xcc\xab\xb6\x71\x09\x24\x98\x2b\x04\xca\x0e\x39\xc1\xa9\xf2\x19\x65\xa0\x87\x84\xc9\x75\x13\x00\x77\x7b\x6e\xd4\x93\x02\x86\xc9\xa2\x8e\x6a\x40\x0f\x18\xc0\x93\xd8\x4b\x36\x45\x8a\x35\x2c\xf5\x5c\xbd\x3f\x3c\xeb\xb6\x5b\x46\x04\x2a\x9b\x58\x26\xd1\x92\x64\x08\x06\xd4\xa1\xd2\x64\x29\x65\x24\xef\xf4\x30\xe0\x8a\x53\xac\x86\xac\x7d\xaa\x5e\x7d\x47\x4b\x29\xab\xc8\x82\x0f\x3d\xa1\xd1\xba\x6e\x50\xe6\x92\x60\x83\xfb\x5a\x0e\x9a\x18\x04\xbd\x8d\x4b\x96\x2f\xf9\x7e\x18\x12\x34\xdd\xac\x54\xab\x09\x42\xac\xa1\x12\xe6\x09\x27\x65\x8b\x42\x34\xa2\x7d\xa7\x6c\x27\xf8\x14\x94\x72\x11\xca\x0d\x53\x9e\xde\x2b\x36\xfa\xf1\xe7\x6c\x7f\xfc\x01\x1f\xf2\xef\xdf\xf5\x5f\x9f\xff\x89\xe4\xfe\x5f\xf4\xe8\x97\xfc\xd1\x3b\x1e\xf1\x91\x71\xfb\xec\x37\x3e\xe8\x35\x2f\xfb\x9a\xfb\x3d\xfb\x83\x1e\xf9\x67\xc4\x46\x8f\xbd\xcb\xf5\xf3\xf1\x8f\xdc\xde\xf6\xad\x7f\xfd\xc3\x5e\xf0\x9d\x2f\x78\xc4\x5f\x7b\x9a\x7f\xc9\x0b\xbf\xa0\x7d\xd1\x17\xe7\x77\xbe\xf2\x87\x5f\xf3\xc4\x3f\xbe\xc1\xb4\xbd\xe8\xcd\x2f\x7d\xe2\x3f\xfd\x27\x0f\xdf\xdf\xf6\x41\xf2\xbb\xbf\xf3\x07\xef\xfd\xf8\xdf\xfe\xb5\x27\xed\x5f\xf7\x92\x9f\xf8\x87\xf7\xfd\xc3\xff\xf9\x1b\x5f\xf8\xd8\xaf\xbd\xc1\x74\xfd\x1e\xf1\x8e\xbf\xf2\xe5\xdf\xfe\x84\xdf\xfb\x93\x07\xd4\x77\x7e\xee\x33\xbe\xe6\x4b\x1e\x7b\xff\xd7\x3d\xeb\xc1\xe9\x91\x6f\xfb\xca\xbf\x9d\x1f\xfa\xb0\x6f\xfa\xf2\x1b\x4c\xff\x11\x0b\x1f\xf2\x82\x57\xfe\x8b\x3f\xff\xb8\x3f\xfa\xa8\x3b\x7e\xf6\xc9\xaf\x7d\xe7\x43\x3e\xfb\x03\xbe\xe5\x53\x5f\xe5\x9e\xf5\x8e\x37\xeb\x9f\x7f\xf2\x0b\x1e\xfd\xe0\x1b\x4c\xff\xa4\xc2\xfd\xae\xef\x3a\x5f\xfc\xdd\xf7\x13\x8f\xe1\x6f\xfd\xc0\x3b\x8e\xc7\xbc\xfc\x7b\xfe\xd6\x1f\xbd\xe8\x07\xef\x3d\x3f\xf2\xef\x3d\xe5\xb7\x3f\xf2\x0d\x37\x98\x7e\xe5\x83\xf3\xff\x28\xea\x1b\xf4\xbf\x7a\xfc\x73\xe2\x3b\x1e\xfc\x92\xdf\xff\x77\x5f\xfb\x85\xff\xe1\x67\x5f\xf8\xa0\xbb\x1e\xfc\xfb\x9f\xfa\x0a\x3c\x7f\xea\x5d\x37\x98\xfe\xf8\x93\x3e\x93\xfc\xf7\x87\xff\x8d\x87\x7e\xc5\xfd\x1e\xf5\x94\x9f\x7b\xd6\x57\xff\xcc\x83\x1e\xa1\xdf\xf7\x57\xe7\xaf\x3f\xaf\x3f\xf8\x27\x5f\xf6\xca\xfb\xbf\xf1\xf7\x6e\x30\x9d\xcf\x7c\xe8\xcb\xfe\xf9\xbd\xbe\xf4\x9b\x9f\x75\xc7\x47\x7f\xc5\x3f\x59\x3e\x7d\xff\x5b\x1f\xfb\x8e\x77\x7e\xfb\x13\xde\xe7\x7c\xf1\x73\xff\xf9\xdf\xfc\xe1\x4f\xfd\xbb\x3f\xff\xb4\xf7\x7e\x84\x5b\x79\xf5\xcf\x7c\x84\x87\xfd\xf6\x7d\xbe\xfc\x87\xbe\xf8\x7d\x9f\xf2\x9c\xef\xf9\x0f\x6f\x7f\xf3\x77\x3e\xf8\xef\xdc\xeb\x33\x9f\xff\xe0\xe7\xbc\xfc\x09\xf4\xa5\x9f\xfb\x97\xde\xe5\x3e\xf9\x49\xef\x77\x83\x29\x7f\xf0\xe3\x7e\xf6\xdf\xdf\xeb\xb7\x7f\xf3\x73\x1e\x66\x1f\xf0\x69\x3f\xf9\xfc\x3b\xbe\xf7\x79\xaf\xfe\x88\xbf\xfb\xe2\xfa\xc2\x8f\x57\x2f\xfa\xc3\xaf\xfb\x87\x2f\xf9\x07\x37\x98\xfa\x1f\xfc\x81\xcf\xfe\xb1\xcf\xfb\xb5\x67\xff\xa3\xb7\x7d\xca\xd3\x3f\xf6\x37\x3e\xed\xed\xaf\x7e\xf2\x9d\xff\xf5\x99\x3f\xfd\x21\xff\x9e\xde\xf5\xec\x8f\x7a\xdd\x43\xfe\xf5\x9d\x37\x98\x3e\xee\x97\xfe\xcf\x6f\x59\xef\xfb\xeb\xbf\xf9\x9f\x5f\xfa\x92\xe3\xfb\x9e\xe5\xbf\xf5\x33\xdf\xef\xdb\x3f\xea\x33\x3f\xfa\x2f\xff\x97\x5f\x7b\xcb\x5d\x1f\xfc\xad\xdf\xf8\xdf\x9e\x79\xa3\xe2\xeb\x0b\x7e\xf4\xd1\x3f\xf1\x03\x2f\xc7\xff\xe1\x1b\xde\x9e\x7e\xe7\xc5\x6f\x7c\xcc\x9b\x5e\xf5\xda\x2f\x7e\xc4\x8f\x6d\xcf\xfa\x80\xaf\x58\x5e\xf1\x8a\x3b\xdf\xf4\xce\x1b\x4c\xbf\xfa\x2d\xf7\xf9\xe6\x5f\x7c\xe0\xeb\xff\xe7\x87\x7c\xf3\xab\xef\xfd\x69\xbf\xe3\xde\xf9\xa1\xdf\xfb\xa8\x9f\x7d\xe9\x5f\x1e\xdf\xf1\xfe\x2f\x7e\xee\xa3\xbe\xe4\xcf\xfd\x63\x78\x83\xe9\xcf\xbc\xe8\x63\x1e\x7d\xd7\x1d\xdf\x77\xff\x47\xbe\xe6\x13\xde\x27\x7d\x0d\x78\xfc\x97\x3e\xec\x11\x9f\xfe\x79\x5f\xc6\x9f\xf2\x84\xe7\x7d\xf3\x6f\x7d\xc7\x8b\x3e\xeb\xc6\x0d\x79\xcf\xfd\xd7\xff\xe0\x8b\xd3\x33\xbf\x35\xfc\xc7\xef\x7a\x9f\xa7\x7c\xf5\xaf\xd0\xf2\xf3\x7f\xf0\x80\xc7\x7e\xe0\x23\x7e\x68\x79\xe3\x4f\x7c\xdd\x8f\xbe\xf9\x29\x6f\x78\xf4\x9f\x2a\xbe\x6e\xe5\xd5\xff\xfd\xdf\xac\xfc\xac\x7b\xfd\xee\xcd\x05\x67\x3b\xe0\x0c\x91\xf9\xb9\x9e\xe7\x39\x42\x77\x54\x51\x36\xf2\x18\x7a\xb3\x47\x80\x2e\xf7\x55\x6f\x7e\x00\x1a\xd1\x9a\x27\x6c\xf9\x1e\x51\xc6\x0f\x3f\xf9\x7f\x17\x42\xfe\x97\xa7\xd8\xb8\xd9\x96\x5a\x72\xda\x05\xc3\xda\xf4\xb2\x28\xb8\x1b\x06\xb9\xd6\xfc\x54\x74\xf4\xc1\xf5\x4e\x51\x08\x15\x70\xde\xce\x91\x13\xbc\xfd\xa7\x60\x6c\x1e\x6d\x19\x2b\x76\x7d\x68\xc4\x98\x57\x61\x12\x6a\xf2\x51\x50\x94\xc4\x2e\x70\xd3\x65\x5b\xd7\x66\xbb\x5e\x63\x5b\xf9\xdc\x12\xb9\xc0\x17\x6b\x5d\xe8\x48\x47\x36\x92\x9c\xc1\xb5\x7a\xe8\xed\x94\x64\xad\xc2\x59\x93\xfd\xd2\x50\xf4\x53\xa8\xa5\x64\xd5\x82\x1e\xd3\x8d\x71\x85\x2f\x06\x00\x27\x13\xdd\xea\x99\x9d\xdf\xcd\xde\xb6\xdc\x76\x83\xa3\x8e\xe7\x4a\x96\x0d\x43\x63\xc6\x40\x4b\x3b\xbc\x42\xd5\x6d\x4e\xbe\x87\xc3\xdf\xe6\x53\xe0\xaa\xf6\xb0\x21\x89\x79\x42\x1d\xad\x03\xdc\x53\xb4\x95\x66\xf2\x13\x6e\x88\xa7\x38\xe5\xb2\x58\x94\xb8\x72\x96\x2c\x5e\x13\x18\xaf\xf8\x22\x1b\x0e\x99\x83\x0a\xaa\x74\xb6\x76\x36\xc4\x58\x9b\x73\x39\xc5\x5c\x28\x8f\x68\x9f\x46\xae\x67\x89\xeb\xdc\xf7\xc9\xe0\x1a\x8b\xba\xe2\x8d\x84\xb5\xa6\x61\x8e\x2c\xd0\x29\x4f\x5c\x16\xe5\x94\x5c\x4a\xf7\xd1\xec\x5b\x3f\xc5\xae\x78\x5a\x89\x5a\x0b\xc9\x28\xea\x28\xf4\x7b\xd6\x42\xdf\x73\x8a\xf7\x82\xcb\xad\x70\xf8\xf6\x82\x0b\xb3\x63\x32\xcf\x79\x17\x26\x1d\xe7\x49\xcc\x18\x4b\xc7\xe7\x82\xe5\x92\x93\xf6\xd9\x9f\x02\x0f\x1f\x9d\x6e\x07\xd8\x42\x9e\x8a\xbc\x67\xcf\xc4\x6d\x76\x5c\x0a\xde\x04\xb7\x9b\xc2\x0a\x5c\xba\x07\x72\x6d\x8d\x41\x4b\x7b\xe0\x50\x1c\x4e\x53\x4d\x74\xaf\xcd\xc2\x68\x8f\x40\x32\xe5\xec\x8a\x07\x25\xce\x94\x75\x5d\x1a\xab\xdb\x29\xf4\x12\x5b\x73\xc0\x91\x05\x75\x97\xca\xcc\x6d\x17\xc0\xad\x47\x3e\x16\x21\xa0\x65\x0b\xd1\x13\xee\x17\x9c\x62\xed\x2e\x14\xe8\x63\xe3\x5b\x54\xf3\xdc\x92\x3e\xf6\x2d\x91\x2a\x05\x01\x96\xd1\x50\x02\xc8\x15\x9d\x70\xea\xe4\x58\xad\x98\xa6\x0b\x9e\x35\x05\xad\xa1\xb3\xa1\xee\x50\x54\xa1\xa1\x22\xab\x24\xba\x49\xc6\x56\x08\x65\x01\x08\xd2\xa5\xe1\x2a\xbd\x05\x84\x1e\xa7\x9d\xd5\x8c\x0b\x4e\x21\xb9\x30\x2c\x50\x4d\x9c\x22\x7c\x0b\xfb\x86\x00\xd5\x92\xc4\x38\x39\x6d\x38\xc0\xa5\xce\x7b\x3a\x65\x73\xec\x1c\xc4\x1d\xe5\x62\x2e\x38\x05\xb2\x6e\x3b\x37\x8d\xd6\x65\xd0\x56\x21\x2e\xfc\x10\x74\xcf\xda\xe2\x20\x7a\x5f\x39\x30\xc0\x87\x21\xa4\x16\xa3\x11\x6c\xfc\xea\x2e\x38\x05\x6b\x13\x28\xea\xdb\xc6\x3a\x83\xf6\x48\x62\x4f\xeb\x10\x0c\xe5\xad\xcf\xb4\x71\x10\xd5\xb2\xf8\xde\xb7\x29\x93\x31\x85\xae\x8b\xcd\xf1\x26\x70\xb9\x15\x73\xbb\xcd\xe0\xb2\x26\x5e\x54\x25\x50\xc1\xe1\xd3\x64\x24\xd0\x0d\x89\xd5\x8d\xb4\x78\xcd\x17\xb2\x1f\x30\x6d\xa1\x2f\x18\x86\xa1\x36\xee\xca\x4e\xaf\xf8\x5b\x27\xc0\x36\x3b\x42\x37\xfb\x42\x14\xef\xda\x7a\x4e\xa0\x66\xe1\x50\xcd\x6c\x21\x14\x8a\x67\x28\x47\x0f\xfb\xa9\x4a\xe0\x93\x32\xb7\x5e\x70\x0a\x52\x3c\xec\x69\x49\x1c\x31\x2f\x5a\x8b\x75\xb1\xc7\x84\x70\xfa\xbb\x31\x67\x06\x27\x84\x2b\xd6\x81\x0e\xb5\xea\xc8\x02\xc1\x8d\xbe\xe0\x14\x3b\x2e\x3b\x06\x22\x2c\xe3\x40\x44\x13\x3f\x57\x15\xf5\x02\xce\x30\xa5\xdf\x70\x52\xb0\x22\x92\xdd\xc4\x23\xda\x51\x41\x0d\x32\x5d\xc0\x25\x19\x0f\xda\xad\xa7\x1f\xd8\xd8\xc4\xcc\x92\xb2\x37\x64\x9c\x77\xe3\xfc\x52\xa0\x07\x08\x74\x27\x4a\x54\xfa\x38\x49\xdc\xd9\xe2\xb8\xbb\x02\xe2\xe4\xd2\x8a\x1b\x79\x9c\xf7\x48\x1e\xf6\x6d\xba\x32\x06\x15\xa9\xe6\x55\x9e\x0c\x2e\x53\x46\x3a\xf8\x42\xf3\x0a\x29\x5e\xf5\xb9\xfa\x74\xc1\x29\xbc\xe7\x2c\xf6\xae\x00\xcb\x05\xf8\x69\x1b\x8f\x70\x50\x01\x95\x5a\xe5\x6e\x63\x11\x74\x71\x6e\xb7\xac\xe3\x65\xc1\x04\xca\x7d\x5c\xc1\x9f\x66\xf3\x65\x5d\x01\xcc\x52\xd9\xa9\xca\xa2\x34\x64\xcd\x1f\xe3\x58\x39\x74\x23\xa6\x6d\x0b\xa9\x2e\x69\x24\x94\x6d\x4f\x96\xc1\x4c\x6f\x02\x97\x5b\xc5\x7a\xb7\x39\x2c\xca\x9c\x50\xe0\xf6\x21\xac\x62\xd2\x8a\x81\x17\x5f\xb7\x69\x8a\x53\x16\x63\x0b\x59\x92\x34\x8b\xa3\xed\x7b\x27\x0b\x6b\x05\x9a\x7c\xc5\x83\xca\xc5\xf7\x4c\x21\x43\xc5\x1c\x6c\x0f\x47\x9a\x85\xfa\xc3\x2f\x4b\xdb\x09\x68\x02\x44\xd1\x43\x20\x8c\xd8\x50\x60\x60\xd6\x4d\x76\xc1\xe7\x63\xe0\xc0\xf4\x94\x56\x1c\x85\xd2\xbc\x93\x00\x3b\xcd\x55\x85\x0c\x76\x97\x2c\x9d\xe3\x5c\x54\xa8\x88\xc7\x4d\x74\x64\x73\x68\xb8\x5c\x71\x95\xe1\x52\xb1\x2a\x1b\x3e\x0e\xa3\x38\xb3\x21\xba\x45\x50\x34\x5a\x3d\x93\x4b\xc9\xe1\xe3\x00\x11\xec\x59\xe7\x1d\x20\x73\x0a\x3a\x72\xbd\xc0\x17\xd2\x03\x0a\xc6\x99\x74\x3a\x15\xc4\x7b\x29\x3b\xd1\x8b\x4a\x74\x4d\x16\x20\x74\x6c\x7d\x95\x91\x7a\xa6\x91\xa9\x10\x2e\x7a\x91\xf4\x02\x2e\x49\xe3\xac\x47\xe6\xec\x94\xc3\xe3\x15\x1d\x4c\xe4\xe1\xb7\x9a\x0f\x6c\x39\xda\xf6\xa3\x77\x54\x8f\xf3\x04\x46\xec\x67\xd0\xf9\xac\x79\xd0\x0b\x7c\x71\x2a\xbf\x81\x10\x8e\xa5\x96\x01\x00\x0a\x6e\x0c\x17\xd6\x28\x4c\x39\x7d\x66\x9b\x2b\x2e\xb2\x69\x8a\xaf\x3e\xd1\x15\x6e\x32\xbf\x67\x75\xe9\x6d\x3e\x45\x39\xe5\x21\xc3\x39\x1d\x8b\x02\xf1\x7c\x68\xb8\x55\x99\xed\x16\xe2\x88\x4a\x48\xac\xeb\x4a\x67\xa1\x60\xc8\x1d\x44\x4a\xb0\xe1\xf0\x26\x70\xb9\x55\x76\xe8\x36\x33\x17\x61\xce\x30\xfd\x04\x5d\xa7\x51\x86\x26\x46\xc1\x19\xb1\x9a\x36\xa7\x73\x3f\x06\x9f\x5c\x2f\x8c\x07\xe3\x8b\x95\xa5\x1e\x45\x53\x79\xc1\x25\xd2\x62\xb3\x38\xf7\xdc\x76\x3f\xb6\xd4\x96\x16\x97\x7d\x64\x10\x56\x51\xa3\x27\xd3\x6e\xec\xb0\x3b\x08\x66\x0b\x6a\xc6\x4d\x8d\xc6\xdc\x15\xf4\x57\xfa\x5e\xac\x51\x79\xa7\x6e\x2c\x75\xc9\xc7\xb1\x0a\x13\x1c\xd8\x67\xc2\x32\x37\x9d\xb1\xc7\xac\x2c\x27\xa5\x46\xba\xb2\xd7\x72\x85\x2f\xf2\xaa\x11\xf1\x41\xd8\x05\xa2\x30\x57\x8c\x2a\x1a\x3b\x5e\x67\xc6\xda\x4d\x4b\x72\x87\x1c\xeb\x8c\x21\x53\xbe\x21\x3d\xce\x63\x5c\xc0\x25\x19\x2d\xd3\x1c\xcb\x88\x31\xec\x69\xa5\x83\x16\x3d\x6a\x0d\x7d\xe8\x44\xc7\x99\xa1\x13\x76\x70\x97\x18\x2b\x96\x1b\x43\xd2\x06\xf9\x05\x21\x22\x5d\xfc\x39\x0e\x40\x4a\x37\xb3\x1c\x9e\x6d\x08\xb8\xb0\xd0\xb6\x47\x90\xc9\x36\x4e\x66\xf7\xb1\x88\x4a\x7a\x66\xda\xa2\x90\x39\x1a\x17\xc0\x3d\x9b\x07\x89\x3d\x00\x0b\x23\xe9\xfb\xf0\x93\x6f\x52\x9f\xb3\xa1\x6c\xf0\x1a\x49\xd0\x4e\xf7\x56\x64\x2e\x35\x6a\x62\xaa\x47\xf2\x3d\xf3\x6e\x6f\x77\xfe\x49\x1d\xb3\x04\xa3\xf2\x09\xbd\xa1\x93\xc0\x49\xc4\x18\x64\xf0\x6d\xcd\x41\x6e\x04\x83\xb4\x22\xd5\xcb\x74\x2d\x40\x91\x76\x65\xe7\x4d\xe0\x72\xab\x7c\xf2\x6d\x66\x2e\xd8\x16\x40\xb6\x61\x1d\x5a\xd5\x36\x95\x76\x73\x8a\xc3\xe7\x43\x66\xcc\x37\xe4\x07\x01\x4d\xf5\xe9\xf9\xec\xd1\x1f\x14\x62\xca\xaf\xf8\x43\x29\x22\x5a\xb2\xdb\x02\xe0\xca\xf6\x23\xa1\xd6\xe7\x96\xed\x01\xc1\x21\xee\xc1\xbb\xa5\x2e\xd5\x81\x90\x69\x42\x35\x1c\x82\xb5\x71\x05\xb8\x58\x03\xf3\x09\xdb\xd9\xa1\x44\x6d\x07\xba\xa8\x42\x75\x17\x36\xd6\x36\x41\x96\x24\x94\x24\x39\x36\x6c\x0c\x88\x48\x49\x1d\xba\x0b\x58\x1c\x5b\xd1\xda\xe4\x6e\x87\xec\x14\x92\x04\xcb\x89\x11\x3f\xf5\x48\x74\x1c\xbb\xdc\x29\x84\x90\x39\x8c\x15\x72\x07\xf3\xd2\xe3\x42\xc7\x05\x21\x22\xd3\x55\x79\x04\x37\x9b\xcf\xc4\x9d\x55\xa1\xd1\x76\x06\x33\xca\x7a\x28\x4d\x7b\x8c\x12\x1a\x81\x86\xd8\x27\xe9\x67\x8b\x75\x5b\x33\xb8\xe2\x41\xe1\x16\x49\xab\x7b\x0c\x45\x56\xb8\x15\x3e\x78\x43\x4a\x07\x35\xf5\x86\xe8\xee\x6a\x30\x56\x76\x62\x4e\x09\x4c\x19\xdb\xd9\xc7\x15\x2c\x4e\xcb\x24\x63\xa0\x99\xe8\xa5\x76\xa5\x19\x92\x4d\xaf\x58\xb7\x06\x84\x92\xb3\xb9\xb5\x72\x1c\x81\x4b\x63\xb7\xa8\x9f\xcd\x35\x7e\x45\xd0\xae\x12\x53\x6d\xe9\x39\x68\x65\xb4\xe1\x88\xa4\x69\x01\x0f\x42\xcd\xee\x59\x2e\xb0\x22\x95\x05\x73\x83\x05\x63\x98\x1b\x9c\xc1\xed\x26\x70\xb9\x55\x05\xea\x36\x33\x17\x05\xd0\x89\x36\x19\x70\x75\x52\x6b\x38\x07\x9a\x8a\xf1\x09\x35\x43\xc7\xb9\x11\x71\x42\x30\xac\x49\xd8\x77\x6b\xad\x4a\x3c\x80\x2b\x12\xba\xf1\x50\x63\xdd\x6c\x69\xa3\x4b\x32\xb4\xdb\x02\x9d\x72\x3f\x46\x04\x15\x68\x45\xb5\x85\xec\x24\x7d\x1a\x05\x13\x25\xab\x2b\xf4\x92\x3c\x83\x45\xfb\x0e\x5a\xcb\xfb\x81\xbd\xdf\xca\xd6\x51\xd7\xc9\x1e\x55\x92\x81\x2a\x9e\x80\x4c\x78\x9e\xaa\x69\x92\x00\xaa\xa7\x1b\x64\xcc\x0b\x7c\x11\x06\x3c\x5c\x49\x64\x81\x1d\xd2\x3d\x0d\xac\x44\x4b\x2d\x56\xb8\x18\xbf\x00\x10\x1b\x28\x40\xf8\x89\xd5\x3c\x3c\xf0\xc9\xaf\xee\x8a\x2f\x22\x1d\x6b\xb4\x9f\xfb\x3c\x13\xee\x85\x11\x4b\xe9\x3e\x52\x51\x25\x44\xd4\x1b\xe0\x96\xc2\xb9\x1f\xe8\x68\x85\x39\xe4\xd8\x61\xde\x33\x24\xf4\x36\x7f\x11\x43\x83\x74\x05\xcf\xc3\x1b\x4c\xa3\x93\xd0\x31\xbd\x91\xb4\x42\x96\x16\x23\x06\x87\x7a\xeb\xd0\x27\x60\xb8\xc4\x4b\x8c\x51\xda\x2b\xea\x34\x83\x27\x8f\x76\x71\x64\x5b\xce\xd3\x79\xb4\xa5\x66\x44\xe6\x24\x14\x63\x67\xac\x19\xd6\x73\x1b\x2d\x50\x07\x67\xe5\x27\xcb\x5b\xb9\x82\x4b\xba\x48\xf1\x0a\x6a\x5a\xa2\xef\x79\x0f\xdd\xee\xc4\x4d\x54\x05\x51\x14\x0a\x76\xee\x1b\x77\xd6\x1e\x6a\xda\xd2\xa0\xb5\x5a\xff\x3f\xed\x38\xff\x1f\x70\xb9\x55\xcd\xfa\x36\x83\xcb\xc4\x89\x8b\x32\x92\x1b\x88\x9a\xc9\x99\x11\xe0\x50\x3c\x98\x38\x58\xc5\x14\x8f\x31\xb1\x4c\xfb\xc2\x1b\xdb\x27\xba\x27\x23\x7e\xc5\x7f\x72\xe5\x93\x63\xeb\x51\xc2\x56\x67\x27\x16\xa5\xa8\x9b\x68\x15\x50\x1e\x86\x1a\xd7\xef\x7e\xcc\xb9\x72\xdb\x6a\x14\x65\x6e\x58\xd8\x2b\xf8\x93\x58\x5b\xda\xa1\x21\xdb\x29\x8d\xee\x6e\x02\xd4\x4e\xd4\x77\xef\x51\x4c\x77\xe3\x70\xd9\x55\xb4\x76\x40\xac\xda\xe1\x89\x0a\xe7\x7b\x86\x5c\xdd\xee\x3a\x8d\x69\x70\xcb\x1c\x63\x0a\x37\xd2\xd0\x2a\x98\xeb\x11\x80\xbe\xd8\xb9\x2c\x1b\xa3\x3e\x75\x07\xce\x32\x13\xb5\xce\xed\x18\x74\x70\x45\xcd\x8a\x00\xaa\x74\xe6\x35\x6a\x5c\xec\xb2\x31\x17\xc8\x46\x4c\xe9\xbb\x9e\xd4\xf4\x90\x0c\xd3\x0a\x96\x6d\xb6\x48\xf2\x7a\xae\xd6\x95\x2b\xe0\x1e\xf4\x15\x15\x8b\x8a\x60\xa8\x57\x33\x99\x87\x32\x62\xb1\x18\x12\x47\x5f\xf0\x81\x2b\xe5\xc9\xeb\x7c\x32\x66\xeb\x71\x76\x7c\x18\x71\xc1\x29\x36\xd5\xe2\xb2\x14\xa2\xc1\x40\x15\x64\xd7\x4e\x96\x77\x6c\x95\x2a\x4d\xb2\x16\x36\x72\xcf\x90\x43\xde\x87\x35\x22\x70\x52\xd7\xf7\x68\xad\x6e\xb7\x50\x62\x07\xab\xc6\x3b\x04\x2a\xa3\x15\xb8\xe8\x7b\x48\xe3\xdc\x96\xe1\x5d\x94\x82\xaf\xe7\x82\xb6\x15\xf5\xb1\x28\x10\xa2\xa3\x9a\xe5\xff\x17\xe2\xde\x2b\x36\xba\x95\x2e\xeb\xcf\x88\x8d\xf4\xbd\x7f\x59\x3f\x85\xdf\xf9\x87\xff\xe5\x3e\x1f\x7f\xe7\xeb\x9e\xfa\x7c\xf3\x97\x9e\xfe\x94\x0f\x1a\x5f\xf5\x7d\xf6\x69\xdf\xf4\x84\x57\xab\x9f\xfc\x73\x3f\x79\x83\xe9\x5f\x78\xc5\xa3\xce\x7f\xf8\x80\xdf\xfb\xdc\xef\x5d\x3e\xfe\xc3\xee\x47\x9f\xfb\x03\x77\x3e\x88\xbf\xf1\xb9\xcf\x7a\xdd\xaf\xbd\x8b\xbd\xe9\x9f\xed\xf0\x43\x6f\x94\x71\x7d\xd5\xbd\xbe\xe6\x53\xde\xf9\xf6\xff\xf2\x45\xdf\xf8\x71\xf7\xfb\xb5\xb7\xde\xf9\x97\x7f\xef\xae\xb7\x7d\xde\x03\x1f\xf0\x2d\xbf\xfe\xea\x7b\xff\xca\x7d\xeb\xa3\x9e\x77\xff\x07\xdd\x60\xfa\xfe\x5f\xf0\x8b\xf5\xb7\x9e\xbd\xbc\xf6\x87\x7f\xea\x53\xff\xe5\x37\xbf\xf6\x6d\xff\xe6\x93\x3e\xe5\x41\x2f\xfe\xe8\xff\xf8\xb1\xdf\x1f\xef\x7a\x8b\xfe\xc4\xaf\xf8\xbf\xee\xb8\x51\x1c\x16\xde\xf8\x7f\x1c\x5f\xfb\xaf\x7f\xec\x53\x5f\xdf\x1f\x73\xdf\x8f\xf9\xb7\x2f\x7a\xc2\x63\x5e\xf0\x8d\x5f\xf9\x85\xaf\x78\xcd\x9b\xe6\x43\xff\xdd\x5b\xbf\x16\xfd\xee\x0d\xa6\xff\x3f\xfa\x65\x4f\xfd\x81\x3b\x7e\xea\x0d\xaf\xfa\xdc\x67\x7e\xcf\x5f\xf9\xe0\x97\x3c\xae\xbc\x9c\x3c\xff\xe7\xbf\xfa\x4b\xee\xfc\xe9\x27\xdf\xf1\x07\x7f\xff\x23\xfe\xce\x03\x6f\x30\x75\x6f\xff\xad\xe5\xf1\xff\xe0\xe7\x9f\xf3\xfe\xbf\xf4\x21\x05\xfc\xbd\x1f\x7a\x2d\xfa\x9c\xaf\x00\x4f\xfb\xaa\xef\xdc\xbe\x59\x7e\xdc\x5b\x9f\xff\x95\x1f\xf5\x90\x1b\x4c\xff\xe9\xb3\x8a\x7f\xee\xbf\xfd\x94\x9f\x7e\x9f\xd7\xfe\xcb\xc7\x7e\xc7\xdf\x7f\xfe\x07\xfe\xca\x13\x7f\xe1\xe1\x4f\xfc\x94\xdf\x79\xcc\x3b\xff\xf1\x0b\xee\xfb\x5b\xbf\xf2\xf9\xcf\xfb\x53\xb1\xd1\xad\xbc\x7a\x9b\x63\x53\x92\xcf\x71\x9a\x82\xb8\x58\x7c\x63\x1a\xcb\xb9\x8c\xb3\xd7\xdd\x44\xb8\xe2\xb2\xa3\x2a\x86\xab\x6b\x3c\x82\xe2\x3b\x46\x75\xeb\xee\x8a\x64\xcf\x5a\x96\xaa\xd8\x29\x33\x07\x82\x54\xae\x56\x4b\xea\xde\x56\x50\x8a\x58\xf4\x79\xa2\x3d\xac\xae\x6a\xbd\x2f\xa8\xda\xa2\xc0\x09\xc4\x05\x34\x81\x71\x47\xf9\x1a\x0d\xc3\xab\x0e\x2d\x11\x4b\x4b\x9f\xea\xb0\x7a\x1f\xc4\x3a\x05\xd2\x66\xe4\x2c\x3e\x9c\x65\x0d\x12\x46\x0a\xea\x15\xa2\x12\x66\x0f\x8b\x1a\x9b\xd0\xab\x93\xd1\xe5\xcc\x18\x4f\x7a\xd4\x12\x5b\x33\x04\x1a\x36\x4e\x77\x2e\x69\xf8\x44\x1d\x94\xd2\x1f\x67\xba\x44\x95\x80\xfd\x5c\x3b\xc4\x7a\xe8\x83\xc2\x52\x9b\x32\xca\x2a\x53\x63\x85\x2d\x80\x35\xbb\x7e\x38\x7b\x0f\x09\xe0\xcb\x56\x4f\x59\x08\xbd\x22\x2a\x24\xa3\x4b\x4f\x37\x7a\x9c\x4b\x0e\x5d\xef\x6b\xe0\x52\xca\xb3\x20\xbc\xef\x98\x80\xba\x6e\x3a\x69\x38\xb6\x14\x94\x6a\x74\xc7\x51\x5c\x90\xcf\xa6\xc2\xab\x79\x6e\xa0\xf0\x83\x0e\xe9\x23\xdb\xf7\xcd\xa0\x5c\x5c\x65\x28\x36\xc3\xc9\x9e\x8d\xcb\x8b\x71\x9b\x35\x00\x43\xa4\xf8\x25\x0a\x8d\x05\xe3\x33\x2e\x53\xa7\x2a\xe0\x42\x29\x80\xbb\x54\x6c\x94\x4d\x23\x43\x55\x76\xd1\x16\x85\x3c\x8f\xca\xd9\x09\x22\xf7\x56\x88\x9b\x63\xd3\x5b\xe1\xf0\x6d\xa6\x8f\x99\x39\x12\xd0\xdc\x6a\x91\x8c\x0c\x91\x22\x97\x94\x04\x0a\x95\x5d\xe6\x99\x3a\x5b\x8e\xd6\xb4\x19\x76\x61\xa7\xc2\x87\x9d\xa7\xbb\x22\x06\xd9\x87\xde\x22\x71\x8e\x8a\xd3\x26\xab\x64\x91\x95\xb7\x9d\x14\x70\xea\xba\x8a\xb8\x10\xb0\x97\x8e\x4d\xdc\x74\xf5\xc3\xec\x66\xcc\x2b\xae\x32\x3b\x4d\x5c\x51\x8e\xfb\xc9\x97\xb1\x2c\x67\x98\x9d\x2f\x3e\x6c\x1d\x9d\x4e\x76\x0c\x91\xa4\x6a\x33\x1b\xaa\xd2\x74\x00\xbc\x30\x57\x50\x26\xea\x89\xe1\x1d\xef\x12\x70\xeb\x99\x8d\x5c\x42\x45\xf5\x76\x8a\x43\x24\x48\xf9\x79\x86\x09\xd9\x08\x9d\x24\xb4\x79\xda\x09\x9e\x57\x24\x7b\xe8\x9c\x79\xcd\xe2\xf4\xac\x8d\xca\x36\x0b\x13\xb0\xb6\x94\x1e\x06\xf0\x60\x83\x11\xea\x4d\xa0\x9c\x17\x3e\xa4\xb4\x60\x59\x17\xca\xaf\x50\x32\x4e\x04\x80\x96\xab\x80\x6d\x0c\xc5\xea\x58\x99\x72\x33\x6d\xd4\x55\x19\x6d\x92\xcc\x0a\x73\xb6\x6d\x05\x61\xdb\x45\x5f\xd7\xdd\xa5\x2b\xb2\x05\xdc\x2c\x09\x59\xc2\x16\xe3\x80\xb3\xc5\x60\xe5\xb7\xf3\x00\xdb\x59\xf6\xde\x7b\x13\x86\x4e\x26\xb4\x25\x7b\xd4\x8b\x95\x75\x71\xe5\x8a\xac\xfa\xea\xba\xaf\x26\x8c\xc5\x0e\x3c\x58\x22\x90\xa9\x40\x38\xf0\x15\x0f\x09\x42\x91\x94\xd9\xb9\xc6\x09\x63\xe3\x07\x17\x73\xad\xf3\x66\x70\xb9\x15\x73\xbb\xcd\xe0\xc2\xe1\x2a\x28\xae\x7c\xba\xb5\x2c\x62\x39\xd9\x10\xf4\x24\x79\x6d\x67\x17\xd9\xf7\xd3\xaa\x2a\x08\xa8\xe1\x9c\x75\x82\x82\xf6\xe6\x2e\x88\xc7\x18\xce\xbb\x39\xa8\x5e\xeb\x19\xec\x6e\x47\xa7\xa5\xcd\x00\x05\x0e\x4a\x54\x72\xc6\x80\x61\xea\x0b\x68\x10\x69\x81\xd8\xca\x35\xcd\xf6\x8a\x67\xdd\xe2\x71\xee\x40\x4c\x5b\x38\xd3\xb0\x30\xcf\x76\x6a\xea\x1a\x12\xdf\x91\x6c\x33\xc5\xb3\x18\x15\x4b\xd1\x90\x8b\xbe\x06\xc5\xae\x60\x2e\xa9\xb5\x44\x5b\xdc\xea\xca\x36\xb7\x32\x0a\x27\x47\x0c\x8d\x81\xfb\x52\xaa\x8f\x73\x27\xcb\x66\xbc\xc0\x3c\xd2\x50\x51\xa7\x68\x5e\x70\x95\x29\x17\xb5\xf0\xed\xc8\xbb\xe6\x64\xa5\x32\x1c\x6c\x49\x68\x96\x0d\x64\x99\xe7\x6c\xe7\x58\x1a\xb6\xbe\xd2\xb9\x18\xac\xfd\x5c\x7a\xbe\x22\xe5\x94\x69\xe0\xb5\x0c\xd6\x12\xe0\x41\xc5\x98\xb4\xe7\xbd\x17\x6c\x86\x02\x51\x78\x7e\xea\xb6\x1f\xc4\x88\x82\xb5\x1e\xa6\x69\x97\xaf\xd0\x89\xb0\x75\x52\x0f\x96\xe5\x08\x10\xb6\x86\x67\x92\x79\xc3\xae\xf8\x6c\x63\x4b\x9e\x70\xd2\x65\x62\x05\xe9\xbc\x31\xd0\xa9\x97\xd4\x5d\x71\x2f\xda\x90\xd2\xd4\x4a\x63\xa4\x7b\x63\xcb\x34\xdd\xa0\xcc\x8f\x74\x2e\x7c\x58\x69\x36\x5b\x04\x35\x28\xe4\xb4\x2e\x4d\x4e\x86\xce\xff\x85\xd8\xe8\x56\xb1\xde\x6d\x0e\x8b\xc0\x01\xdd\xd6\xbc\x5d\x55\x01\x1c\x23\x88\x15\xf5\x6d\x42\x16\x93\x46\x64\x14\xe2\x21\x61\x3b\xe5\xcc\xa2\xf3\x3c\xf7\xbd\x21\x7e\x41\x58\xc4\xd0\x66\xc5\x59\x20\x1d\x21\xa3\xa0\x03\x00\xeb\xa8\x6c\x40\x3b\x47\xa0\x12\x9c\x67\x5f\x86\x5b\x99\x50\xf9\xcc\xc9\x4b\xa3\xa5\xb8\xa4\x34\xd3\x56\x25\x40\x64\xbc\x88\x39\x63\x5b\xd0\xc2\xf4\xc6\xce\xc0\x42\xae\x34\x77\xb8\x0f\x55\x9b\x74\xb3\x60\xee\x53\xe3\x67\x34\x57\x94\x66\x28\x27\xcc\x14\x98\x8f\x6d\xdf\x19\x5a\xfa\xb2\xa1\x34\xb8\x62\x9e\x2b\xbd\x72\xbd\xc9\xd5\x16\xa5\xc1\x2e\x62\x3f\xf9\x79\x84\x68\xaf\xf0\x05\x45\x65\xa0\x61\x5d\xd3\x01\x56\xa6\x0d\x3b\x56\x4d\xd7\x62\x1d\x85\x03\xfb\x71\xec\xab\xed\xa6\xc5\x9d\x11\xcb\x96\xc8\xf0\x06\xb6\x0b\x4e\xa1\xd2\x61\xd6\xa3\x6c\xbd\xd1\x22\xcb\x21\x94\x70\xe4\x4c\xc4\x92\x4e\x36\xb0\x2c\x8d\x96\xfd\xb4\x71\x96\x16\x59\x11\x53\x14\xc9\xae\x08\xda\x81\x4f\x1c\x16\x0f\x1c\xc3\x22\xcf\xa5\x91\xb2\x92\x1d\xd8\x52\xc6\x8e\x0f\xd8\x8b\x47\x27\xc2\x7d\x25\xb2\x8b\x33\x48\xde\x30\x3d\x2f\xf0\x45\xa7\xf4\x00\x7a\xc6\x75\xb7\xbb\x3f\xc4\x3a\xea\x04\x31\xc3\x33\x6f\xb2\x23\x71\xaa\xc1\xb3\x6f\xa5\xd7\xda\x06\x64\xf3\x48\xda\x1c\x37\x81\xcb\xad\xb2\x43\xb7\x99\xb9\x90\x73\xa2\x74\xca\xaa\x7c\x98\x9b\xb0\x11\x37\xaf\x22\x83\x64\x94\x66\x18\xa4\xce\x76\x59\xcd\xac\x67\xab\x7e\xad\xa3\x6e\x2b\xbf\x82\xf2\x21\xb2\xb8\x12\x67\x87\x2d\xa6\x51\x4f\x21\xa3\xcd\x72\xea\xcc\x03\x1c\xe2\x24\x67\xe0\xee\x04\x74\xac\xd4\xed\xab\x5c\x4c\xcb\xe5\x0a\xc5\xda\xd6\xf9\x86\xc6\xca\x2b\xd0\x35\xb2\xa6\xe8\x96\x51\x64\xd6\xf6\xe9\xbb\xb5\x20\x84\x3d\x84\xd5\xe0\xd5\xb4\x75\x8d\xdb\x84\x30\x5f\xa1\xb5\x3f\xaa\x71\xf0\x28\x66\x62\x04\x0c\x73\x6e\xa7\xe1\x34\xd4\x2e\x55\x99\x0c\x72\x1f\xe0\x90\x8e\x10\x52\x59\x22\x62\xc5\x60\x6c\xf4\x0a\x88\x2b\xab\x59\x4e\x67\x8c\x3e\xf2\x5c\x6d\xeb\x73\xda\xfd\xd8\x6c\x3c\x75\x22\x4c\x6a\xb9\x42\x83\x8d\x39\xb7\x29\x3a\x82\x24\x46\x45\xaf\x50\xef\xd5\x55\x2d\x63\x53\x60\xac\x49\xd2\x49\xe5\xb0\xda\x23\x06\x45\x93\x8d\x64\x96\x09\x75\x07\x71\xb1\xc1\x62\xfd\x1e\x0c\x3b\xe5\x15\xaa\x4e\xba\x72\xac\xc4\x69\x16\xa9\x2b\x3d\x5b\xd2\x5a\x49\xc7\xdd\x96\xa4\x64\x0b\x28\x87\x6f\x5d\x0c\xd7\xa9\xdb\x38\x2d\x63\x5a\xb6\xb0\x0b\x8a\xa8\x4c\x05\x3a\x73\xec\x7b\x8b\xa4\x8a\x31\xc7\x1a\xcf\x6e\x0e\xc8\xf7\x0a\x6d\x18\x74\x63\x5d\x2d\x3c\x66\x1c\xb6\x3e\x6b\xce\x5a\x03\x72\x13\xb8\xdc\x2a\x9f\x7c\x9b\x99\x8b\xb6\xd4\x69\x5a\xa8\x58\x01\xd8\x88\xe7\x29\x02\x38\xdc\xe9\x57\x4f\xc3\xa9\xf6\x7d\x19\x71\x3d\xa3\x37\xab\x8f\x1e\x0d\xe7\x98\xbf\xe2\xf3\xc5\xdd\xef\x93\xaf\x3e\xef\x75\x71\xae\xcd\x99\x44\xd8\xeb\x54\xb9\xd1\x85\x28\x1d\xe3\x91\x79\xb2\x2c\x6a\xd5\xa3\xdd\x5b\x87\xfe\x8a\x24\xe6\xa4\xeb\xc2\x7a\x90\xcc\x4c\x36\x56\x7c\x62\x04\x53\x06\x98\x3b\x71\xcf\x74\x4e\x2d\xc5\x2a\x05\xdb\x74\x1e\xc9\xf5\x48\x37\x92\x2f\xf8\x5b\x53\x15\xe0\xb1\x70\xd2\x0f\xd0\x95\xa2\xb4\x80\x05\xe1\x8e\x2d\x10\x00\x75\xb0\x09\x7d\xf4\x25\xbb\x98\x3d\xf1\xd1\x74\x0f\x21\xaa\x57\x70\x06\x09\x86\x2d\x70\x97\x07\xe9\xb3\x6e\x24\x1e\x98\xd0\x51\xe2\xb9\x27\x29\xe7\xcc\xa2\xa5\x41\xc1\x6a\x72\xe3\xa7\x00\x5b\x3f\x50\xbd\x22\x95\x9a\x7b\x56\x02\x99\x0d\xbb\x7c\xc8\x10\x97\x6d\xd9\x8f\xb8\x1c\xc8\x74\x0c\xf7\x48\x7c\xb0\xdc\x94\x90\x71\x99\x6a\x1d\x5b\x29\x84\x5d\xc0\x19\xe8\xa2\xac\x4f\xc7\xa9\xb1\x4c\x02\x80\xda\x75\x61\xc6\x21\x64\x02\xa6\x3a\x29\x3a\x9b\xde\x85\x38\x47\x00\x22\x18\x9d\x2c\x9d\xfe\x8a\x5f\x1f\xdd\xf3\x14\x38\x31\xe7\xe3\x09\xac\x3a\x7d\x10\x5d\xae\x4c\xed\x38\x01\x13\x00\x36\x19\x20\xd7\xfc\xd2\x0a\x4c\x21\xeb\x00\x0b\xbb\x09\x5c\x6e\x55\x81\xba\xcd\xe0\x52\xe0\x3d\x23\xb7\xda\xb6\x2f\xfe\x6e\xc7\x71\xc6\xe4\x08\x88\x1c\x4a\xd5\x53\x8c\xaa\x6d\x84\x62\x1d\x86\xe1\x6a\x4d\xe7\x98\x81\x2b\x48\xf8\x39\x70\x5d\x00\x22\xad\xce\x91\xf0\xb9\x0a\x1f\x63\x81\x0d\x0f\xbb\xe1\xba\xba\x31\xbd\x5c\x0e\x4a\x29\x55\xa8\x1c\x0b\xf6\xe7\x25\x55\x01\x08\x08\x32\x66\x40\xc5\xd6\xbc\x47\xb6\xc8\xb5\x2d\x2c\x1c\x2e\x59\xcf\xa3\x6f\xe3\xa8\xd5\x49\xe0\x91\x4b\x89\xc7\xc5\xd0\xfd\x8a\x67\x4d\x1b\x27\x7b\x28\x47\x53\x11\x13\x31\x0c\x35\x19\x4c\xb8\x8c\xe8\xbc\x2f\x6d\xd0\x78\x0c\xbb\xad\x0d\x4b\xb4\x50\xe3\x75\x5c\x8e\xc4\xae\x68\xb9\x13\x19\xef\xde\x24\x44\xa2\xc3\x6e\x4a\xeb\x35\xc0\x44\x77\x81\x42\x31\x35\x85\x9d\x59\xe3\xb5\xd5\x28\x5a\x03\x93\x15\xfa\x92\x24\x66\x22\x7c\x25\x8a\xd6\x60\x79\x5b\xb7\x49\xe1\x3e\xa5\x5f\x63\x59\xa6\xde\x8b\xc3\x38\xfb\xa8\xe0\x8c\xa5\x8b\xcc\x6b\x3c\x89\xbd\x24\xad\x8c\x37\x12\x07\x5e\xf0\x21\xcd\x81\xfc\x50\x54\xed\x6d\x6f\x71\x5d\x44\xdb\x44\xb0\x90\xaf\xcc\xad\x1c\x4e\x78\x50\xbf\x9e\x4d\x22\x73\x85\x58\xfb\x00\x1d\x59\x8c\xc0\x49\xac\x08\x7e\x39\x08\xcb\x26\xa6\x3d\xad\x45\xc7\x24\x76\x28\x77\x80\x8b\x02\x2e\x2b\x4c\x23\xaa\xae\xd1\x7c\x13\xb8\xdc\xaa\x66\x7d\x9b\xc1\x05\x06\x6e\x53\xdd\xc6\xb1\x41\xa1\x52\xa2\xa8\x1d\x67\xdc\x51\x0e\xdb\x49\x88\x84\xa2\x18\x2f\x06\xe9\xbc\x54\x8b\x13\x2a\x84\xcd\x2b\x92\x55\x15\x37\xa8\x9b\x5c\x98\x59\x97\xd6\xdb\x66\x8e\x65\x9b\x6e\x8a\x33\xdc\x7d\x36\x61\x99\x71\x84\x85\xd3\x9a\x73\xf5\xe6\xf0\x6c\xd8\x2b\x64\x3e\x82\xd3\xed\xc0\x27\x1f\x12\x1a\x9e\xb0\x06\x25\x03\x74\x24\xe4\x65\xa0\xb4\xf3\xc6\x8c\x2c\x01\xb4\x0a\x15\x39\xe6\xda\xb8\x83\x17\xfc\xa1\x68\x05\x5d\x0d\x35\x0f\x30\x65\x8c\x65\xdb\x9d\x5c\xc3\x92\x46\x2d\x08\x55\x53\x47\x16\xbd\xc3\x59\x4f\x60\xfc\x76\xec\xa1\xd4\x91\xaf\x00\xda\x6a\xbc\xb9\x3b\x20\x74\xd1\x91\xde\x88\xb1\x4a\xc4\x71\x10\x58\x17\x56\x3b\xd6\x1b\x80\x3b\xa1\xb5\x01\x8e\x65\x22\x61\x2f\xd2\x5e\xc1\x9f\xfa\x5a\xf6\x65\x76\x8b\x58\x40\x29\x0e\xdf\xb9\xe0\xb9\xa6\xd6\x06\xdf\x36\x16\x17\xaa\xd6\x7a\x52\x55\x9a\xb0\x20\x05\xbe\x6f\xee\x8a\x5f\x1f\x52\xbb\x9e\xd5\xd9\x33\xa9\xb1\x1c\x25\x99\xbc\x2a\x64\x31\x47\x85\xd0\x5c\xf4\x80\xed\xff\xa6\xed\x5f\xa3\xbf\xfb\xca\xb2\x50\xdc\x40\xd1\x54\x52\x4b\x4c\xc9\x03\x8a\x9a\x64\xa1\xcc\x35\x0f\x84\x59\x6a\xc9\x9f\x7f\x21\xb8\x35\xa5\x50\x94\x35\x0f\x6b\xae\x79\x5a\xf3\xb8\xe6\x49\x50\x14\x34\x50\x76\x9e\x25\x44\xc3\x0d\x29\x48\x1c\x14\x54\x0e\x2a\x02\x89\x68\x01\x0e\x4b\xc8\x28\x05\xf7\x0f\x46\x91\x20\x81\xc5\x51\x68\x8f\x1f\x63\xe3\x7e\x86\xcf\x8b\xe7\xcd\xb3\xde\xdf\xe3\x19\xdf\xb1\x3e\xeb\xb9\xd6\x7d\x5d\xf7\x75\x5f\xf7\x86\xc1\xc9\x18\xa1\x10\xae\xed\xdc\xa9\x66\x17\xfc\x22\x58\xaa\xb4\x9e\xbe\x9e\x60\xf5\xc1\x9a\x48\x77\x77\x32\x77\x28\x59\x17\x79\x36\x9c\xe5\xb2\x6f\x03\x8c\x96\x51\x12\x53\xab\x3e\x6f\x58\xd3\xff\x88\xd9\xe8\x56\xc9\x4e\x7f\xce\x6c\xf4\xa1\x87\xfd\xd7\xe5\x93\xef\xf1\x2d\xbf\xf6\x9e\xef\x7d\xc1\xf3\xbe\xf7\x5f\xfd\xad\xf7\x3c\xe0\x2e\xfa\x6b\xef\xf6\xd3\xdf\xf4\xbc\xaf\xfc\xda\xf7\xdd\xf7\xdd\xff\xe8\x31\xff\xfd\x86\xd2\xb7\xdc\xf3\xb9\x0f\x58\x7e\xf0\x7f\xdf\xf1\x07\xee\x7e\xbf\xf7\xc7\x1f\xf3\x82\xf7\x7c\xe2\x4f\x3c\xe1\xff\x1e\x1f\xf7\x4b\xbf\xf8\x65\xf7\x7a\xe0\xc3\x5e\xf4\xc8\x4f\xf8\xc4\x1b\xff\xd5\x77\x7c\xf4\xbf\xff\xd6\xf7\xbd\xfc\x3b\x7f\xf1\xb7\x9f\xf6\xe3\x0f\x7e\x4f\xfc\xe2\xf7\xfe\x8d\x3f\xfa\xe2\xaf\xf9\x94\x7f\xed\xbf\xe3\xd1\x5f\xf1\xa2\x1f\x97\xff\xeb\x29\x37\x94\xfe\x97\x97\x7e\xde\x5d\x5f\xfd\x85\xbf\xf6\xa8\xf0\x9c\x7b\xbf\x6c\x79\xe3\x17\x7f\xdd\xa3\xbf\xe4\xe9\x8f\x7e\xc3\x37\x3e\xe6\x1d\x9f\xc6\x7f\xb2\x7f\xec\x87\xde\x7d\xe3\xdf\xfa\xc6\x8f\xf9\xbc\x57\xe2\xcf\x7b\xe3\x83\x5f\xfd\x57\xf7\xfb\xbd\xfb\x6b\x9e\xfc\xac\xc9\xf5\xc7\x3e\xea\xb9\x5f\xf8\xda\x1f\xfe\xbe\x27\x7e\xd1\x8f\xfe\x9b\xf3\x37\x6f\x28\x25\xef\xf9\xe1\xbf\xf8\xd1\x6f\xfe\xbb\x1f\x78\x4f\x7e\xf9\x87\x7e\x7f\x7b\xe4\xdd\xde\xfe\x2f\xff\xeb\xef\xe1\xed\xbe\x7f\xf7\xef\x7e\xda\xf3\xff\x5d\xfa\xe4\x5f\xfe\x8e\x1b\x4a\x3f\xf7\x4f\x7e\xfb\xa7\xf4\xfb\xef\xf7\xd4\xa7\x7c\xed\x9b\x3f\x69\xfc\xc6\xe7\xfe\x87\xb7\xbe\xf5\xeb\xf4\x2f\xbd\xea\x11\xf7\x79\xf7\xcb\x5f\xf2\xb0\x2f\x23\xaf\xff\xb5\x1b\x4a\xef\xfa\x43\xdf\x9f\xc1\xdd\x9e\xfa\xea\xef\xfa\xf4\x1f\xba\xeb\x2f\x7e\xd6\x1d\xdf\x17\xff\xf7\x7c\xcf\xcf\x3c\xfa\xed\xaf\x7a\xd8\x93\xce\xbb\xf3\x0f\x7e\xd6\x03\xff\xcc\x6c\x74\xab\xa7\x7a\xbb\xfd\x00\x89\xe8\x0f\x63\xec\x42\x2a\x4b\x56\x2d\x0a\xf9\x49\x62\xef\xae\xf5\x69\x20\xd5\x70\x10\xa1\xea\x32\x0c\x32\x19\xa2\x73\xe6\x2b\xf0\x84\xc6\x14\x68\x2d\xca\xae\x16\x1c\xf8\x60\x47\x0c\x8d\x3a\x15\x0b\xdb\xf9\x81\x77\x1d\x4e\x23\xab\x83\x12\x9c\x5a\x57\xb4\x36\xad\x2f\x70\x25\xac\x59\x6c\xdb\x2a\x56\xde\x05\x46\x35\xf3\xbe\x88\xde\x9c\xe5\xb9\x4c\x94\x46\x25\x73\xd5\x05\x99\x93\x55\x41\xf0\x90\xcb\xc1\xfe\xdf\x63\xfd\xb7\xf9\xaf\x38\xdb\xd8\x8d\x16\xe1\xdc\xb6\x4d\x6d\xfb\x36\x2c\x91\xdd\xac\x27\xb0\xa0\xfa\x86\x27\xac\x09\x17\x02\xe5\x4a\x3b\x5c\x22\x0f\xf3\x92\xac\x84\xcc\xe1\x06\xa5\xe6\x7a\xf5\x32\x70\x6c\x8e\x65\x1e\x34\xd7\xa0\x6b\x6d\xad\xbb\x20\x23\x44\x43\x51\xe9\x97\xc8\xf5\x5c\xdd\x72\xc5\x37\x97\xe2\x55\x93\x0e\x67\xdc\x0d\x5a\x50\xd9\x31\x3a\x4a\x8c\x33\x9e\xb5\x15\x97\x14\xd3\x6d\xf6\x45\xf3\x96\x76\xec\x20\xea\x7b\xcd\xea\x0a\xc9\x49\x6f\xc4\x6a\x71\x52\xa9\x9a\xb6\xe5\xec\xbc\xed\xcd\x31\x54\x28\xdf\x19\x91\x81\xa3\xa8\x99\xf1\x31\x97\x90\x91\x3b\x2a\x93\x57\x08\x5f\x6b\xea\x9c\x68\x36\x2d\x6f\x56\x4f\x12\xb5\x5c\x54\x95\xe7\xa8\x66\x21\x76\xdd\x94\xa5\xc3\x41\x15\x1d\x46\xb4\xae\x80\xa9\xbe\x2f\xe5\xa6\xf6\xf1\x56\x38\x7c\xbb\x17\x61\x44\x2f\x7d\xe5\x42\x88\x34\xb6\x75\x44\x55\x84\xd2\x75\xa5\x65\x4a\x38\x11\xed\xe6\x48\xa5\x00\xda\x00\xdd\x8c\x76\x95\xf0\x2b\xe2\x1d\xa8\x69\x3d\xf1\x7d\x13\xf2\x84\x50\x62\xe2\x45\xcd\x67\x5d\xf2\x9e\x8d\x58\x49\xc4\xbd\x1f\x5a\xf1\x53\x75\x18\xc7\x70\xb0\x94\xac\xaf\x88\x40\x39\x4a\xd9\x99\x48\x62\x6c\x72\x9d\x2e\xed\xcb\x22\x4a\xcb\x68\x1e\x73\xdf\x17\xa7\xcf\x4d\x37\xed\x7d\xa7\x22\x2b\xb1\x76\x34\x7c\xba\x42\x66\x29\x16\xaa\x23\x76\xb5\x9f\x40\xc8\xa4\x1d\xb7\xad\xba\xc4\x1b\xd8\x2b\x5b\x17\xef\x28\xce\x64\x2a\x01\x2a\x69\x85\xb6\x33\x59\x7b\x81\x37\x82\x32\x94\xa9\x39\x7b\x4f\x75\x9c\xe9\x4c\xcb\x70\x24\x68\xda\x91\x9c\xac\x2a\xd4\xd9\xb4\xc2\x5a\x67\x8f\xa3\x68\x0f\x0d\xf4\xbd\x5c\x21\xf6\x30\x17\x0d\x07\x87\xd8\xb1\x2d\xb5\x42\x4d\x5c\x13\xed\xd8\xb1\x9e\xa9\xd6\x06\xed\xb6\x46\xe6\x7a\x24\x86\x87\xd6\x5c\x33\xf3\x8a\x08\xb9\x15\xae\xab\x82\xdd\x47\xbd\x29\xd5\xa6\x71\x65\x54\x97\x57\xd0\x25\xa9\x15\xa6\x50\x74\x70\x59\x85\x0c\x89\x41\x41\x74\x80\xe5\xb8\xe2\xbd\xb0\x06\xf0\x33\x1d\x3d\x9f\x42\xe2\xc5\x06\x21\xa3\xd1\x02\x6d\x23\x13\x3b\xdb\x66\xc8\xd0\xba\x15\xd8\x52\x47\xe9\xdc\xb3\xde\xa3\xb9\x09\x5c\x6e\xd5\xb9\xdd\x66\x70\x39\x10\xd9\x92\x23\x74\xf0\x9d\x6e\xb5\xbb\xad\xad\x2a\x87\xb9\x35\xe0\x4f\x84\xcf\x5a\xb6\x95\xc4\x3d\x2b\x7a\x2e\xbe\x61\x3f\xd9\x7a\x85\x57\x8c\xa3\x25\x15\x0f\x5d\xed\x22\x55\xe4\x65\x06\x25\xac\x14\x48\xa8\x84\xce\x11\x51\x57\xed\x76\xf4\xa6\x41\x71\xe7\x0a\xc7\xc2\xe3\x15\x66\x23\x8a\x92\x8d\x34\x09\x87\x72\x2a\x70\x50\xc3\x4f\x2f\x76\x14\x21\x94\x93\xb5\xce\xe6\xb9\x1b\x3e\x30\x5e\xce\x3d\xb0\xca\x21\xb9\x62\x6d\x75\x15\xf9\x50\x84\x44\x64\x02\x90\x82\x12\xbc\x9f\xc3\xcb\xed\xdc\x44\x70\x32\x15\x30\x28\xdb\xb8\x68\x87\x8f\x36\xae\x22\x29\x87\xe6\x15\x0c\x99\xaf\x62\x53\x3b\x1f\x73\xc1\x5a\x11\x26\x64\x33\x4a\x6f\xf4\x24\x12\xa7\x61\x9d\x77\x60\xe3\x5e\x9e\x33\x57\x5b\x63\xc3\x19\xf3\x0b\x56\x50\xd6\xa5\x4f\xbd\x80\x41\x10\x00\xc9\xa7\x49\x36\xd5\xf6\x15\xd9\x65\x10\xc7\xee\xe4\x83\x71\xd0\x2e\x0f\xb7\xa4\x22\x20\x32\x70\x83\x97\xe4\x2b\x2d\x3b\x1e\x09\x7a\xba\xae\x19\xa6\x59\xe9\x54\x40\x54\xa1\x0f\xd3\x37\xeb\x43\xde\xa4\x2e\xc6\x67\x82\x0e\x01\xe8\xd1\x15\xca\x97\xf0\x74\x79\x36\xcf\xe1\x79\xae\xc0\xf7\x45\x0b\x9e\x36\x05\x88\x5d\xd4\x8e\x57\x62\xcc\x0e\x96\x45\xec\x0b\xe9\xba\x94\xbd\x26\xeb\x21\x2c\xf1\x26\x70\xb9\x15\xd7\xbb\xdd\xe0\xd2\x88\x23\xc1\x98\x03\xa3\x65\x82\x0d\x8a\x93\xae\xac\x53\x17\x8b\xab\xf2\x58\x4e\x1f\x04\x56\x92\x95\x91\x2c\x02\x8d\xe0\x38\xae\xd8\x03\x2f\x76\xe5\x00\x34\x06\xf1\xe2\x88\x9a\x4b\x8e\x1c\x10\x66\xd4\xa1\x48\x3b\xea\xee\x29\x58\x8f\xc1\xfa\x40\xe7\x4a\x63\x3d\x21\xb8\x62\xbf\x8d\xee\x05\x11\x29\x16\x62\x97\x28\x94\x8e\xda\x4f\x67\xc5\x6e\x1b\x3b\xca\xd6\x3b\x98\xca\x01\x16\x01\x04\x27\x9e\xfe\x24\xca\xa0\x2b\x7a\x86\x15\xef\x23\x31\xc6\x70\xb5\x0e\x44\xde\x77\xb0\x7a\x87\xd1\x81\x05\xdf\xcf\xdc\x9a\xda\x0d\x5c\xf7\x7d\x43\xe8\x1c\x39\x17\xd3\xed\xbc\x62\xb3\x0c\x26\xd0\x4e\x0b\x5a\x65\x07\x43\xdb\xe9\x35\xb5\x2e\xc4\xc8\x34\x87\x10\x04\xda\xdb\x64\x4c\x2e\x72\x14\x75\xec\x05\xf9\xdd\x96\x2b\xbc\x11\xb8\x25\x88\x70\xd2\xb9\xa8\x81\x8a\x43\xe1\x04\xa0\x4b\x06\xec\xd2\xab\xb3\xc4\xc1\x8a\xad\xe1\x3d\x62\x15\x25\xa6\x08\x9b\x79\x41\x6e\x04\x2d\xfa\xe0\xb3\x74\x45\xc8\x8e\x47\xed\xdc\x12\xb2\x79\x02\xa8\x48\xc9\x6b\xa0\xaa\x35\x83\xeb\x29\xb2\x72\x34\x2f\x44\x4c\x58\xae\x78\x2f\x16\x0d\xd5\xa6\x18\xde\x8f\xa8\x65\x14\x15\xba\x0e\x92\xa3\xfb\xae\xac\x40\xdb\x3e\x84\xe2\x50\xf3\x1a\xb5\x59\xc0\x74\xfa\xc4\x37\x4c\x18\x3e\x02\x2e\xb7\x52\x87\x6e\x33\xb8\xa0\x0c\x8c\xc4\x94\x2d\x25\x83\x22\x37\x2f\x78\x9c\x2b\xdb\x10\xac\xa7\x50\xeb\xaa\x0b\x50\x80\x9d\x52\xc8\xb9\xa0\xe9\xba\xdd\xc1\x15\x9a\x8b\x3f\xfb\x4c\x95\xc5\xd2\x74\x89\x38\x91\x44\x63\xa2\x36\x55\xa9\xdd\x99\xb6\xd6\x64\x72\x2c\xc6\x3a\x04\x3f\x70\x80\x49\x65\x7a\x45\x8e\xce\x24\x39\x43\x93\x68\x3c\x70\xc0\x24\x94\x31\x44\x80\x66\x89\xb0\xcf\xa0\x11\x05\x4c\x61\xab\xd6\xd0\xb0\xdb\x36\xcf\xdb\x81\x4c\xbb\xc2\x94\x0b\x77\x20\xf1\x6e\x51\x04\xa7\xf5\x19\x0a\xbf\x2a\xd9\x76\xbe\x07\xb9\x95\x33\x13\xa7\x5a\x46\x72\xb1\xba\x89\x4d\x36\xd6\xeb\x25\xdf\xc9\x55\x73\x14\x8d\x3a\xb7\x85\x9d\xab\x67\x68\x82\x7d\x1b\x66\x5d\x46\xac\x86\x61\xab\xdb\x86\xf0\x42\xe9\x08\xe4\x98\xec\x58\x4e\x44\xaf\x18\x5f\x5a\x61\x6b\x5c\x1d\xc7\x52\x83\x41\x6d\xac\x74\x9d\x5a\xc6\x58\xa6\xa5\x76\xdf\xed\xca\xec\xb6\x6e\xfe\x14\x0c\x00\x8a\xb9\x40\xfa\x0a\x70\x89\xb0\x1b\x9c\xb9\x85\xd5\x15\xda\x54\x22\x78\xf5\x80\x9d\x23\x19\x66\x2b\x38\x82\x9b\x6a\xc0\x10\xf1\xb9\x9a\x9d\x93\x24\xdb\x15\xb4\x88\x5a\x3f\x01\x13\x8e\x41\x4c\x6b\x10\xc3\xac\x60\xdd\xce\xad\x80\x11\x0d\xb7\x73\x77\x78\x4c\xa1\x14\x65\xa3\xc2\x93\x70\x8a\xe4\x7a\x73\x3e\xc0\xad\xf4\xe4\xdb\xbd\x83\x71\xac\x92\x6e\x75\x43\xc2\x32\xbe\x2f\x3c\x9c\x8b\xf2\xb3\x57\xc9\x2b\x82\x9d\x0c\x60\x7b\xde\xd9\x29\x86\x6a\xde\x1d\xa5\x56\x7e\x45\x5e\xef\x9d\xff\x6d\xa6\xed\xcd\x56\x2c\x80\xcc\x94\xdd\xf9\x3a\x9f\xe7\xe6\x09\x26\x39\x98\x7c\xc2\x15\x2a\xd2\xb2\xd6\xbb\xd4\x98\x55\x00\xae\xf8\x4e\xc6\x62\xf7\x06\x47\x19\x89\xc5\x24\x0e\xc7\x89\xd0\x64\x51\x34\x26\xb7\x1f\xab\x84\xe2\x90\x3a\x71\x96\x7c\x0d\xdb\x19\xdd\x64\xf9\x0a\x2a\xa0\x68\x2d\xd1\xf9\x64\xcf\x13\x58\x91\x5b\x2a\xab\x30\xec\x34\x14\xc7\xb8\x2c\x83\x58\xc4\xe9\x12\x96\xe9\xd9\x92\xd1\x90\x47\x67\x57\x44\x5d\x40\xdd\x5b\x4d\x81\xcf\xd4\x82\x61\x03\xb7\x90\x94\x0f\x9e\x83\x0c\x11\x52\x67\x3e\x2b\x4c\xfe\xc8\x99\x0d\xa2\xa4\x5f\x57\x71\x49\x10\x30\xd7\x7a\x17\x77\xb2\x31\x85\xbd\xdb\xa7\x47\x52\x3a\x70\x78\x42\xcf\x4a\x51\x58\x84\x2b\xbe\x11\xbe\x75\x5b\xe0\x02\x14\x54\xe9\x92\xad\x98\x8d\xf4\xb9\x0f\xb5\x02\x88\x07\x70\x94\x9b\xa2\xc2\x22\xe9\xb9\x83\x9c\x18\x65\x27\x31\x80\x50\x8f\x2c\x29\xb5\xb4\x75\x63\xab\xb9\x24\x94\xa6\xcf\x01\xf8\xdc\xda\x94\x0b\xc6\x11\xe7\xbc\x4e\xb6\x6f\x6c\x4b\xa2\xa4\x68\x3c\x2d\x84\x79\x0f\x22\x8d\x2b\x31\x6b\x82\xb9\xdc\x1c\x55\x7f\xab\x09\xd4\x6d\x06\x17\x38\x0e\x2a\x09\xcc\x75\x11\xfe\xf4\x34\x37\x2a\xda\x4c\x4b\xb6\x3c\xab\x7d\x77\xde\x2d\x7d\xac\xab\x20\xc4\x0e\x23\x2d\xe3\x70\xbd\x82\x90\xe8\x6d\xa7\xbd\x01\xd4\x69\x19\x3b\x32\x76\xe7\x23\xc9\x26\x07\xcf\x3d\xb9\x42\x94\x66\xe7\xbe\x2b\x2c\x4f\x92\x77\xb0\xf3\xc6\xd8\x15\x7e\xca\x35\xc1\x3b\xbf\xc7\x2b\x47\x71\x75\x41\xf8\x60\xc4\x62\x41\x34\x67\x59\x8e\xb0\x41\xb9\x12\xd1\x76\xa5\xa5\xe8\x91\x61\x23\xfd\xce\xae\x00\xda\x73\x52\xa3\x0b\x23\x13\x1c\xc8\x2e\x2d\xec\x6d\x9a\xb3\x98\x55\x52\xb6\x48\x93\x77\x0a\xc5\x68\xea\x20\x0b\xd7\xc4\x70\x20\x47\x3c\x2f\xf8\x2b\xf4\xa0\xdc\x9c\x7b\x57\x4a\xef\x96\x04\x1f\xed\x12\x15\xec\x39\xaa\x7d\x76\x85\x16\x01\xb6\xce\x49\xd2\xa9\xf6\xc5\x2f\x38\x0a\x7b\xc1\x0c\x9c\xf6\xd9\x25\x07\xdd\x5b\xd4\x58\x3f\x64\xe6\xab\xd3\x3a\xc5\x1d\x3a\x32\x4e\xc4\x61\x37\x60\x46\x60\x15\x5a\x13\x9e\x4b\x51\x81\x5e\x31\x89\x5f\x61\x8e\x42\x35\xdc\xf7\xb1\x45\xa2\x11\xc7\x75\xd9\x81\x42\x2c\x9d\x85\x7a\x90\x60\x35\x1c\x93\x3a\x4f\xde\x15\xf3\x09\x74\x76\x45\x28\x32\x09\x6a\x0d\xd3\x4a\x2c\x25\x46\x90\xce\x0d\xb5\x2a\x57\xed\x21\x90\xb6\xc7\x94\x0f\x4c\xcc\xc2\x5a\x63\x54\x2a\x82\x05\x2f\xe5\x66\x27\xe3\xad\x66\xd6\xb7\xbb\x73\xb1\x6c\xc7\xc7\xba\x5a\x35\xf9\xd2\x70\x6a\xc7\xb6\xfb\xde\x37\xdb\x76\xd4\x69\x9b\xe7\x6c\x67\xd7\x58\x11\xd2\x09\x0a\xfd\xb0\x97\x1c\xd9\x31\x6e\xab\x9d\x31\xbc\x63\x6c\x3c\x35\xcb\x3c\x76\x86\xcf\x29\x8d\xcc\xdc\xf1\x4d\xd7\x99\xac\x4b\xcd\x01\x5e\x0d\xf6\xb3\xa1\x2b\xc2\xdb\xa8\x17\xd9\x59\xa9\x90\xe9\x0a\xf2\xd5\x92\x1c\x4e\x45\x73\x00\x6d\x73\x8e\x20\xaa\x40\x5f\x09\x0b\x45\xa4\x3d\xe6\x70\x76\xb9\x5c\x92\xa0\x1c\x3b\xa4\x72\x1b\x44\xc1\x26\x17\xee\x37\x7b\x6c\x0c\x78\x84\x07\x97\xb1\x56\x9e\x11\xda\xc6\xda\x0f\xbf\xe1\x4c\x4f\xbe\xab\x04\x2e\x70\x32\x52\xde\x68\x38\xda\x10\x8d\xf1\x50\x38\x85\x5e\x93\x3e\xf0\xca\x48\xb3\x99\xc0\x85\xb7\xee\x0e\x96\x56\x67\xe7\xea\x55\x8d\x48\xaa\x2b\xb4\x38\xda\xb7\x0c\x43\x52\x03\x68\x08\x14\x8d\x33\xf2\x83\x4a\xb1\x9d\xd5\x5a\x2b\x93\x29\x61\xa6\x64\x20\x42\x45\x85\x18\x69\x31\x97\x6c\xc5\x2c\xf4\x60\x9b\xa6\x49\x92\xb3\xce\x9a\xb4\xa5\x1e\x22\xdd\x44\x53\x2d\x22\x3e\x47\x66\x1c\xf8\x02\xe3\xb1\x11\x6a\x79\xcb\x85\x5d\x41\x54\xe1\xae\xa1\xc0\x20\x00\xb5\xcb\xf5\x98\x6a\x19\xd5\x4b\x19\x05\xf4\x6b\x2c\xdb\xd2\x49\x3f\x0d\x47\xd0\x26\x2f\xbd\xc6\xdb\x59\x56\x7f\x93\xd9\xe8\x56\xb7\xe1\xfe\x9c\xd9\xe8\x95\x3f\xfb\xb6\xcf\x7d\xd5\xf3\xbe\xf9\xcb\x1f\xf9\x63\x1f\xf7\x8c\xaf\x23\xff\x19\x3f\xfc\x8e\xbf\x76\xff\xaf\x7e\xea\xfb\xdf\xf4\xf4\x77\x7c\xcf\x73\xfe\xd7\xdb\x7e\xf7\xbb\x6f\x28\xfd\x92\xbf\xff\x39\xdf\x76\x9f\x1f\xbc\xf7\x9f\xbc\xf2\xe1\x77\x7c\xeb\x9f\xfe\xfa\x4b\x5f\xf7\xe8\x67\x6f\xdb\x4f\xfd\x4c\xbb\xc7\x7d\xfe\xdd\x9b\x1e\xf4\x5b\x3f\xf6\x2c\x71\x43\xe9\x07\xdf\xf6\xd3\xcd\x3f\xef\xef\xfd\xe9\x17\xbd\xfe\x47\xf7\xfa\xa7\xef\x7d\xc9\xbf\xfc\x87\x0f\x5b\xed\xa7\x7c\xee\x1d\x3f\xf0\xbe\x3f\x79\x82\xf8\xc4\x2f\xbd\xfb\x0d\xa5\x7f\xe3\x8b\xff\xfa\x4b\xef\x78\xca\x5b\xff\xfa\x43\xc4\x2b\xbf\xeb\x99\x5f\xd1\x1e\xf1\xf0\x1f\xff\x4b\x2f\xff\xf4\x8f\xfe\xa6\xcf\xfc\xdb\xef\x7a\x7b\x8c\x1f\xfb\x5f\xee\x7f\x43\xe9\xc3\xde\xfd\xbf\x96\xe7\x7e\xea\x57\xfe\xc0\xe3\xfe\xc2\x6b\xca\x7d\x1f\x23\xdf\xfe\xa7\x8f\x7a\xd0\x3b\x1f\xf7\xa4\xff\xf0\xa1\x7f\xfe\x8a\x1f\xcd\x2f\x32\x0f\xb8\xf1\xe4\xdb\x33\xff\xfb\x07\xfe\xf1\xb7\x7f\xea\x53\xef\xff\x55\x77\xff\xb9\xbf\x7d\xaf\x7b\xbe\xf2\x13\x9f\xb9\xbe\xf1\x61\xbf\xd9\xbe\xe1\xb3\x9e\xd5\xef\xf6\x2f\x3e\xf1\xb3\x7f\xe2\xc6\xc0\xa6\xaf\xff\xb6\xf7\x7d\xd3\xcf\x3c\xe1\x91\x0f\x7d\xca\x97\x3d\xf8\x1f\xff\xde\xab\xff\xd2\x4b\xef\xf3\xa0\x07\x3f\xef\x13\xde\x7e\xc7\xbf\xfe\xbe\x5f\x9d\x6f\xf8\xa4\xd7\xfd\xe5\x8f\xbd\x31\xb0\xe9\xef\x7c\xcb\x6b\xdd\x6b\xe4\x3f\xb8\xeb\xef\x7e\xe0\x3f\xbd\xee\xd5\xf6\x7e\xff\xf9\x81\xf7\xfb\xe1\xbf\xfa\xe3\x9f\xf3\xe2\x6f\x86\xbf\xff\xfb\x7f\xff\x2e\x3f\xf5\x83\x7f\x66\x36\xba\xd5\x53\xbd\xdd\x08\xef\x71\xca\xa7\x3a\xd9\x0c\xf5\x70\x7c\x32\x32\x34\xac\x73\x97\x91\xd2\x00\x01\xc2\x27\xfe\xb0\x30\xe5\xb9\x94\x43\x6a\x09\xe7\x15\x2d\x53\xd8\x77\x0f\x0b\x0f\x5a\x78\xca\xa8\xd3\x1d\x4e\x93\x10\xb4\x85\x00\x44\x75\x5d\x76\x0f\x18\x8b\x3d\xf0\x73\x8d\xd9\x72\x0d\xd8\x15\x49\xfd\x40\x18\x02\x4b\xc3\xeb\x4e\xdd\xd9\x15\xed\x31\x38\x7b\x9a\xda\x4a\xaa\x5b\x09\x54\xfa\x85\x4b\x65\xcc\x56\x06\xf2\xe6\x70\xcb\x25\xcb\x1f\xcd\x67\xc1\xb0\x9b\x19\x34\x42\x7c\x21\x63\x8a\x60\xcf\x82\x61\x3e\x17\xdd\xf6\x6d\x2c\x29\x62\xb6\x62\x48\xf6\x7d\xd0\x45\x38\x73\x85\xaa\x5e\xd6\xc6\x83\x26\x82\x0e\x62\xd8\xd1\xd5\x3a\xbd\x2c\x0e\x31\xc5\x77\x72\xc2\x53\xf9\x59\x82\x0c\x99\x2d\x2b\x67\x4b\x13\x61\x67\x17\x34\xb1\x34\xf2\x3d\xac\xa9\x90\xc2\x07\x8a\xeb\xd0\x8b\xcf\x25\x18\x2d\x44\xce\x31\x17\x8d\xef\xfc\x14\x49\x15\x0a\xe5\x3b\x3f\x04\x32\x7c\xb9\xc2\xb7\xdf\x28\x9e\xe2\x18\x88\xec\x39\xc5\x8c\x0c\x72\x2b\xe9\x8b\x99\x67\x2b\x7d\x96\x56\x5c\x0d\xee\xc0\xb5\x6f\x2b\x55\x6b\x3d\x4e\x51\xae\x68\x62\xd1\x31\x49\xf6\x82\x1e\x5b\xb4\xf0\xc3\xb9\x98\x65\xb0\x08\x9b\xd2\xba\x6e\x42\xc3\xea\xdc\x64\x5b\x45\xc4\x95\xba\x65\xeb\x89\xba\x39\x7c\xe4\x56\x38\x7c\x9b\xc1\x25\x56\xdb\x2b\x5c\x28\xcd\x3c\x9c\xad\x8b\xa3\xcb\x08\x70\x43\xcd\x36\xe4\xcb\x36\x2b\x46\xa5\x05\x68\x17\xc5\x0e\x46\x76\xb9\xe5\x2b\xf4\xec\x32\x52\x99\xb1\x2e\xc5\x9d\x64\xc8\xc9\x07\x91\x45\x53\x40\x50\xb1\xc6\x4a\xbf\xc3\x12\xa0\x5d\xc3\xc0\x3b\x08\x28\x89\x69\xed\x15\x02\x07\xc9\xcb\x9e\x0f\xe2\xc6\x48\x01\xd8\x73\x01\x6b\x80\xab\x1b\x3a\xd2\x30\xf6\x25\x24\x59\x36\x5c\xac\x9d\xa1\x6f\xcc\x39\x72\x2a\x70\x85\x9f\x12\xef\x87\xd8\x9a\x5c\x31\x21\x66\x8e\x9d\x57\x8c\x75\x64\xaa\xa1\x34\x97\x85\x59\xd5\x8d\x3b\xc4\x40\x0b\x2e\x2e\x18\xb5\xcf\x71\xc9\xbd\xca\xdd\xdb\xa1\x40\xb2\x07\x54\x07\x3b\x5a\x5c\xa1\x45\x42\xb2\xea\x8e\x35\x08\x52\x88\xc3\x23\xeb\x3e\x4d\xa6\x05\x50\xd8\xd6\xc5\x5c\xa1\xaa\xb3\xbe\xad\xc6\xcf\x55\x1b\x12\xd3\x81\x30\x07\x79\x4e\x08\x6a\x29\x24\xee\x6b\x64\x5b\x91\xe4\x28\x2b\x73\xa7\xb5\xf3\x3c\x4b\x1e\x57\x18\xaf\x82\x94\x0a\x67\xc5\x81\xe7\xd3\x70\xbf\x08\x26\xb0\x5f\xef\x04\xbe\xbd\x8a\xe3\xd4\x19\xa5\x66\xa8\x11\xa5\x42\x31\x2c\x0b\x41\x5d\xf1\x5e\x88\x00\xb6\x7c\x4e\x3f\x8f\x25\xee\x78\x46\xe1\xc3\xc1\x72\xe9\xba\xd5\x03\x37\xe3\xbb\xaf\x8a\x0e\x75\x56\x23\x43\x0f\x20\x18\x7e\x33\x37\xbd\x55\xe7\x76\xbb\x3b\x97\x5a\x29\x9b\x0b\x2b\x02\xc0\x92\xc3\xc1\x7a\x5e\x8b\x3f\x48\x9d\x64\xad\x47\x86\x36\x26\xb3\x49\x0b\x42\x9c\x33\x90\x01\xf1\x25\xdf\x86\x85\xec\x72\xd7\x78\x9e\x45\x0c\x82\xfc\xc0\xe3\x94\x5c\xac\xc9\x0c\x83\x57\x1e\xc4\x0e\xb2\x00\x14\xef\x7e\xcd\x25\x17\x66\xe2\xb8\x60\x58\xb6\xae\x5c\x42\xde\x50\xc9\x5c\x0e\x10\x7a\x60\x68\xc1\x48\x96\x49\x5c\x86\x3c\x05\xbb\xec\xa6\xd0\x45\xc9\x7d\x6c\xcd\x40\xeb\x1b\xb8\x42\xcf\x0e\x47\x94\x48\x3a\x03\xb8\x4b\x1e\x2d\xc9\x76\xbe\x16\x37\x0f\xc7\xdd\xb9\xc4\xa5\x64\xa8\x8d\x28\x3e\x27\xb8\x4f\xa7\x80\xf5\x97\x24\xf5\x17\x6c\x31\xdb\x80\x1a\x1c\xc5\xdd\xe4\x01\x3b\xa0\xb5\xe2\x6d\x50\x66\x91\x5d\xf5\xe0\x5a\xde\x09\x7b\xcb\x86\x48\x35\x86\x77\x70\x45\xd2\xec\xb1\x1f\x07\xa1\x84\x6d\x44\x10\x94\xce\x8a\x1c\xd8\xe5\xa6\xa6\x07\x79\x37\x05\x57\xd0\x67\xf3\x8d\x67\x9c\xa2\x11\xa9\xd5\x45\x5f\xf1\x2c\x08\x3d\x8e\x29\x2a\x57\xec\xe4\xf0\x80\xb5\x85\x73\x23\x95\x7b\xcb\xf6\x8d\x31\x0b\x4b\x15\xe5\xa4\x46\x19\x30\xfd\x72\x2a\x87\xe7\x15\x6a\x01\x70\x2e\xab\xc5\x8d\x9c\xce\x18\x61\x17\xa7\x5e\xa0\xc5\xf6\xd8\x11\xe3\xfe\x70\x50\x52\xb0\x69\x83\xcb\x34\x64\x8b\x3c\xc5\x7c\x83\x59\xfb\x23\xe0\x72\x2b\xae\x77\x9b\xb7\xec\x2a\x2c\x26\x9b\x9c\xc3\x3a\x17\xbd\x78\xb3\xef\x12\x1e\x07\x0f\x60\xcf\x7b\xf4\xa7\x53\x48\xcf\xd8\x88\x0e\x1b\x23\xd0\xf6\xc3\xd2\x2b\x7e\xbe\xcd\x3b\x6d\x08\x60\x3b\x49\x34\x03\x8c\xe3\x36\x57\xbd\x21\xb1\xaf\x84\xfa\xb0\x91\x78\xf0\x82\x8f\x61\x43\xb7\x15\x6e\x8b\x23\x97\x04\x8b\x1f\xeb\xb2\xf3\x54\xab\x08\x6e\x94\x29\xa9\x93\xa8\x29\x4d\xe9\xf0\x49\x6c\xde\x2f\x35\x8a\x95\xf4\xad\xed\x59\x59\x7e\xa4\x98\x2f\xb1\x06\xcb\x35\x0a\x39\x6c\xa4\x18\x6c\x90\x1b\xe2\x77\x90\x4f\xc2\x52\xa7\x73\x33\x4d\xa5\x8d\x70\xc2\xb2\xd9\x11\x0a\x19\x23\x54\x10\xbf\xc2\xc9\x38\xc3\x30\x38\x1e\xa2\xb9\x64\x5a\xed\x9b\x5f\x0d\x3f\x94\xd2\x28\x18\xd9\x64\x11\xe7\x96\xcc\x29\x81\xc2\x3e\xc6\x43\xd7\x35\x8d\x4b\x8e\x9e\xfa\x44\x54\x5f\x72\x2e\x26\x03\x03\x31\x05\xab\x0f\xb4\x50\x6d\x4d\x3e\xe5\x60\x1e\x70\x4a\x8e\xed\x90\x7d\x47\x73\xc9\xce\xa9\x2b\x62\xd3\x06\xc6\x1b\xa5\x45\x60\x41\xea\x4a\x8e\xe5\x48\x3c\x73\x6a\x04\x04\x32\xe0\x01\x43\xd9\xa4\xc9\xac\x76\x8b\xc6\x09\xf6\x41\x6b\xba\x82\xb4\x53\x94\x1c\x35\xc6\xe0\x80\xf7\x0e\x97\x1d\x83\xb8\xb0\x08\xf5\x2e\x38\xb5\xc1\x50\x0e\x6d\x3f\x73\xc0\xad\x15\x5f\x42\x1e\x85\xba\x9b\xc0\xe5\x56\xea\xd0\x6d\x06\x97\x7d\xdf\x8d\x39\x15\xcf\x55\x89\xd3\x93\x81\xd1\x90\x2d\x86\xa6\x49\x6a\x0c\x99\x85\x91\x56\x51\xd3\xb9\x2a\x19\xd6\x15\x56\x62\xaf\xd8\x03\x57\x70\xea\x80\x86\x98\x8d\xcf\xcd\x96\xad\xf1\x08\x79\x3a\xb7\x23\x0b\x2e\x9a\x84\x26\xed\x0d\xb5\x6a\x24\x1a\x1a\x90\x29\x2d\xbd\xe2\x55\x26\xb5\x7a\xb7\xec\xcb\x89\x4a\x9c\xeb\x6e\x93\x55\x54\x54\xa6\x35\x6c\x79\x89\x6b\xa5\xa1\xec\x6a\x13\x6c\xb6\xc0\xdc\x9a\xf3\x18\x57\x2c\xf2\x34\xee\x4c\x8d\xd2\x75\x29\xe4\x92\xf6\x15\x1a\x51\x0e\xbb\x49\x08\x84\x81\x5a\x6a\xd2\x73\xb2\x96\xee\x66\x99\x1b\x32\x02\xb6\x72\x45\x1a\xa2\x63\x64\x8b\x48\x28\x2a\xe8\x42\x74\x62\x1b\x44\x94\xb5\xc9\xeb\x12\x6b\x33\x7b\x64\xc0\x41\x12\xd2\x3c\x03\x11\x76\x83\x94\xa7\x2b\x66\xe0\x46\xee\xc9\x94\xda\x82\xc4\x7c\x63\xfb\x84\xd8\xe1\x51\x8f\xa8\x16\xbc\x05\x4b\xef\xec\x5b\x26\x1d\x89\x65\x74\x1a\xe3\x4d\xdb\xed\x15\xb1\x69\xb3\x2e\x4a\x85\xdd\x98\xd1\x8c\xaf\xc6\x65\x79\xac\x7b\xe8\xf6\x2c\x39\x42\xc5\x06\x3e\xc4\x69\xea\x81\x6c\xb2\x79\xba\x36\x25\xb8\xe2\x0e\x97\x98\x20\xf2\x26\xd3\xc0\x49\x79\xc4\x93\x0d\x46\x10\xa5\x43\x3c\x14\x69\xa3\x83\x88\x7a\x9b\x30\x90\x9c\x31\x6b\xde\x90\xbc\xde\xdc\xb9\xdc\x4a\x4f\xbe\xdd\x37\x1a\xf7\x85\x04\x2a\x86\x21\x0a\x0b\x01\x8e\x1c\x7b\x4a\x72\xa2\x63\x0a\x9d\x57\xb4\x58\xc6\xaa\x6a\x32\xa9\x31\xd6\x13\x6d\xac\xac\x97\x9c\x0e\xab\xcd\x8a\x1c\x88\x0b\x4c\xf9\x4c\x13\x91\x2d\x1f\x01\x86\x6a\x69\xe8\x5c\x05\xeb\x7b\x2c\x15\xcf\xc4\x40\x6b\xf1\x98\x9c\x5e\x41\xce\x46\x33\x67\xc3\x01\x08\xaa\x2a\xd4\x67\x41\x28\x1f\x9b\x57\x79\x5f\x51\x01\xa5\x97\x40\x51\x66\x82\xef\x7e\x45\x06\xa7\x35\xed\xf1\x8a\x1d\x8c\x38\x65\x25\x6b\xe3\x55\x71\x25\xac\x45\x9e\xb9\x35\xc4\xc2\x7a\x55\x13\x47\x70\x0c\x87\xc2\xb2\x4e\x5c\x27\xaa\x89\xad\xc4\xcf\x2b\xc6\x97\x87\xdc\x37\xd3\x27\xdc\x85\x97\x46\x4f\x98\xba\x51\x24\x2f\xc2\x29\x83\xf3\xb6\x04\xcd\xf9\x18\xd1\x74\xbd\x6d\x08\x8e\x6e\xd6\x2b\xfc\x94\xeb\x91\x8f\x64\x23\xdc\x34\x13\xc9\x61\xee\x88\x18\x87\x5c\xfa\x71\x86\xb5\xe9\x18\x57\xad\x96\x91\x7b\xeb\x72\xc4\x4c\xd0\xae\x9a\xbe\xa2\xa3\x45\xb3\x18\x24\x87\x0a\xb3\x43\x89\x75\xee\xb6\x6b\x89\xcb\x48\x1b\x6c\x7b\x2f\xab\x21\x67\x92\xce\x2e\xa1\x63\xbd\x46\xc3\xb7\x2b\x12\x43\xd7\x7a\xe6\x75\x6c\xbb\x96\xaa\xef\x31\x37\x08\x76\x8c\x10\x59\xd4\xba\x1d\x15\xa6\x45\x37\x23\x05\xa8\x8b\x12\xc9\xf2\x2d\x66\x7c\xcc\x9b\x6f\x34\xde\x6a\x02\x75\x9b\x3b\x97\xce\x76\x7b\xb2\x1d\xa4\x44\x63\x93\x6b\xc2\x4b\x01\x20\xd8\x2d\xa9\xb9\x7b\x43\xc9\xaa\x9c\xb2\x24\x4b\x12\x55\x1b\xeb\x22\x70\xbc\x82\x5b\x27\x3b\xcc\x8a\x8f\xea\xab\xeb\xdc\xb3\x43\x45\xb3\xd0\x20\x6b\x91\x38\x87\x83\xec\x7e\x89\x6d\x4d\x3d\xa3\x4a\x44\xe8\x41\xc1\x78\x45\xe7\xc2\x83\x96\x6c\x21\x34\x05\xb7\x31\xe6\x8c\xd6\x7b\x44\x6b\xd9\xf4\xc2\xf7\x62\x6b\xa8\x78\x9d\x92\xe2\x25\xd7\x29\x64\x65\xaa\x5f\xb2\x3d\xda\x99\xb5\x60\x8b\x61\xee\x70\x56\xc4\x64\x24\xb4\xaf\x40\x2e\x45\x8f\x0c\x4e\x57\x18\xca\x14\xc3\x66\x9b\x3f\x0d\xd0\x04\xaa\x39\xae\x20\x67\x90\x15\xb8\x12\x71\x64\xa6\x59\x28\xde\x76\xe7\x4d\xdf\x60\x2d\xbb\x65\x62\xed\x03\x69\xb5\xac\x28\x46\xbf\x6d\xdb\x81\x40\xa7\x57\x48\xa9\x9b\xd5\x65\x50\x6b\xf9\xb1\x45\xad\x42\x8b\x1a\x20\xcb\xc1\x9e\x76\x40\x69\x2d\xc9\x1d\xbd\x7b\x5f\xd6\x05\x70\xd2\x77\x89\x96\x78\x05\xb8\x4c\x3d\x40\xd8\x02\xc3\xf9\x8c\xc8\xe8\xd8\x69\x18\xbb\x59\xa5\x75\xd6\xf2\xd2\xa7\xa4\x27\x52\xeb\xec\x0a\xaf\x0e\x89\x73\x35\xfa\x92\xc0\x7c\xb3\xb9\x85\x60\x87\x83\x0a\xad\xe3\xb6\x0d\x3e\x7a\x1c\x36\x0e\x50\x14\xef\x07\x15\x1b\xdd\xa5\xa7\x5a\xe4\xbe\x31\xa8\xac\xba\x99\x16\xdd\x6a\x66\x7d\xbb\x93\x8d\xb6\xb4\x1e\x05\xc2\xa1\x02\xe6\x59\xe2\xad\x09\x36\xc8\x82\xb8\x1e\xbb\x49\x9b\x95\x86\xc0\x26\xdd\x01\x38\x1e\x9b\x95\xc1\x5e\x72\xf3\x9f\xae\x26\x35\x49\x6d\xf4\xea\xb4\xb4\xc9\x03\x19\xbe\xb1\x34\x50\xab\x0d\xe8\x49\xf9\xb9\x5b\x47\x0b\x3b\xd0\x51\x1c\xc0\xa7\xe5\x57\x7c\x27\x9d\x4b\xac\x1f\x65\x41\x81\xc3\x63\x8c\x8c\xc8\xf4\x7e\x6f\x8a\x58\x5f\xc1\xe9\xfc\x42\xe7\x68\xce\x49\xea\x2a\x53\x0d\x72\x77\x05\x39\x5b\x6d\x87\xbb\xd7\xab\xa9\xea\x1c\x58\x0b\x02\x13\x6e\x6c\x6b\xdc\x07\x1e\xa5\x56\x4c\x0f\xcf\x17\xaf\x9c\x5b\x37\x24\xcd\x64\x48\x5f\x61\xd6\x3e\x87\x5e\x46\x53\x27\xf2\x38\x82\x6a\xaa\x08\x09\x93\x85\x55\xb7\x21\xcd\x1c\xdf\x0b\x68\x16\x30\xeb\x45\xdb\xc2\x92\x3b\x39\xaf\x48\x50\x5e\xd5\x3a\x0b\xdd\x16\xe3\xd8\xb2\x9e\x6a\xd9\x44\xa1\x6d\x29\x71\x3f\xc7\x76\xd2\xbe\x47\x6c\xe9\x7e\x44\x21\x2b\x96\x7c\x18\xc4\x0e\x73\xc5\xdb\x39\x67\x5f\xb4\x60\x2e\xef\x2a\x9d\xe6\xc4\xca\xcd\x74\x1c\x8c\x1b\xa5\x36\xee\x80\x37\x88\x52\xad\x14\xb0\x47\x5f\xd0\x8e\x32\xbb\xe2\xd3\xb7\x1e\xbc\x60\x35\x24\x74\xbe\xb2\x8d\x84\xb2\xe8\xa3\xd3\x03\x67\x69\x8d\x2f\xab\xac\x39\x00\x49\x47\x37\xc7\x61\x02\x88\x45\xf7\x71\xde\x64\x36\xfa\x50\x59\xfc\x73\x7f\xa4\xbf\xf0\xc9\x77\xe7\x5f\xce\xde\xfe\x17\xff\xda\xf9\xe5\xff\xf6\x27\xbe\xe5\x7f\xbe\xe0\x67\x3f\x7a\x7e\xfa\xe3\x1f\x71\xc7\xa7\xff\xe1\x9f\x33\x1b\x11\xf3\x19\x69\xfb\x91\x87\xfc\xd8\x37\xde\xf5\x59\xff\xbf\x1f\x79\xdd\x7d\xff\xc9\x3d\xc1\xbf\x7b\xd3\x7d\x1e\x70\xcf\xc7\xbe\x0d\x7e\xe7\x7b\xe8\x0f\x3e\x59\xdf\x50\xfa\x0b\xfb\xab\x9f\xfc\x0d\x8f\x5c\x3f\xe3\x1d\x4f\x7d\xce\xe3\xef\xf6\x7d\x77\xfc\xa3\x2f\xfd\xe0\xb3\xb7\x97\xfe\xe2\xbd\xef\xfa\x57\xfe\xc6\xf7\x3c\xee\xff\x7a\xcc\x5f\x78\xc7\x0d\xa5\x4f\xfe\xfc\xb7\xe1\x37\xff\xd5\xfe\xc0\x07\xdc\xe3\x9e\x77\x79\xe1\x97\xfd\xc2\x03\x5e\xbe\x7c\xfc\x07\x7f\xed\x41\x5f\xf5\x93\xf4\xf7\xcf\x7f\xf6\x88\xa7\x3e\xf6\xa5\x37\x94\x3e\xf2\x30\xf7\xfa\xc0\x67\x7d\xc6\x53\x5f\xf6\x63\x0f\x79\xe8\xd3\xee\xff\xa3\xf7\xf0\xff\x22\xdf\xfd\x77\xe7\x93\x1e\xfd\xca\x5f\xfa\x0b\xef\xfb\xa1\xd7\xfe\xf3\x5f\xba\xa1\xf4\x93\x5f\xff\x3f\x7f\xe3\xb3\x9f\xfc\xbe\x87\xae\x3f\xf5\x45\x8f\x31\x1f\xf3\x92\x07\xdd\xf7\xe9\xdf\x70\xd7\x67\xfc\xff\xdf\xfd\x39\xe6\xe7\xdf\xf1\xf0\x4f\x79\xe0\x17\xdc\xe8\x20\x7a\xca\x7d\xbf\xf7\x9b\x7f\xfa\xd9\x9f\xfd\x3d\x6f\xbe\xc7\xa7\xdd\xf3\xcb\xdf\xfd\x74\xf6\xc4\x4f\xfa\xf8\x2f\x78\xc2\x03\x8f\x7b\x3c\xfe\x4f\x5e\xb3\xbe\xe5\x75\x77\xf9\xce\x1b\x4a\xdf\xfc\xda\x4f\xf9\xd1\x0f\x3d\xe4\x7d\xdf\xf5\xa2\xfb\x7f\xf2\xb3\x9e\xf3\xb4\x97\x2f\xfe\xf7\x3e\xf5\x85\x7f\x72\xff\x7f\xfb\xec\x9f\x7b\xef\x83\xdf\xf5\xb7\xef\x78\xeb\x9b\x6e\x28\xbd\xff\x6f\x7e\xf7\xe7\x3c\xf6\x35\xcf\x7f\xe9\xe7\xdf\xf7\xfd\x6f\xfc\x46\xf2\xc4\xff\xf8\x3d\xe9\xdf\x7e\xd5\x8b\xff\xf8\xb1\x6f\x79\xe0\xf7\xbd\xf0\xeb\xf2\x83\x5f\xf1\xff\x99\x8d\x6e\xf5\x54\x6f\x33\x37\x95\x4c\x83\x55\xc3\xd4\xfc\xb1\x6b\xd9\x5d\x1b\xbb\xf5\xa8\xd0\x45\x4b\xd4\xd8\xe6\x06\xdb\x06\x6b\x72\xaa\xb0\x78\x9d\xea\x66\xd3\x15\x16\xca\x2e\x61\x1e\x83\x63\x78\x78\x19\x1a\x66\xfb\x66\xbc\x0e\xd0\x91\xe2\x1b\x00\x8a\x9c\xae\xd9\x75\xcf\x8e\x9f\x49\x4e\xc9\xd1\x9e\xae\x70\x03\x43\x66\xe3\x34\xcd\xc6\xd5\x8c\xfd\x54\xc1\xa5\x63\xe2\xb1\x2c\x9a\x1e\xeb\x48\x0c\xf3\x84\x6d\x85\x91\x0a\xe8\xeb\x72\x2e\x6d\xbb\xe2\x2c\xe3\xda\x8c\xd2\x5c\xa3\xea\x08\x52\xbc\x85\xbc\x9d\x23\x41\x85\x17\x42\x08\x18\x59\x00\x20\x74\xee\x51\x03\xbf\x98\xe9\xf2\x89\x94\xb9\x22\x0e\x06\xb5\x43\xba\xb2\xf1\x2a\xf5\xe2\x5b\x92\x39\x8b\xa0\xa9\xb7\xb5\x57\xec\x4f\xc7\x8e\xb6\x6d\x4c\x6e\x83\x00\x01\x10\x06\x0d\xb0\x2b\x76\x18\x28\xb1\x6b\xaf\xd3\x1c\xc3\x2c\x0a\x03\x47\x91\x75\xd9\x45\x80\x18\x8a\x64\x1d\xd8\x42\x69\xfc\xc1\x96\x55\x48\x79\x00\xcb\x90\xba\xe2\x3b\x33\x08\x97\xc5\xb6\x64\x4a\xc2\x9b\x30\xa8\x52\x2c\xb6\x95\x76\x01\x4a\x80\x54\x1f\x61\x83\x1b\x70\x5c\x37\x38\x89\xbb\x13\xf6\xf5\x15\x2b\xbc\x9b\x25\x40\x9a\xc8\xcd\xe0\x4d\xab\xb4\x17\xe1\xe4\xd9\x8e\x41\xce\x14\x76\x21\x41\xee\x5a\xd3\xbd\xfb\x3c\xa2\x91\x6a\xed\xf4\x86\x83\x3d\x1f\x01\x97\x5b\xe1\xf0\x6d\x6e\x1f\x03\xa5\x40\x9e\x42\x64\x14\xa4\x4f\x04\x48\x79\x60\xc3\x96\xf3\x18\x05\x93\x88\xb8\xdb\xc8\xe9\x8a\x43\x3e\x02\x2f\x21\x72\x6d\xbd\x42\x66\xa9\x1c\xc3\xbd\x50\x03\xd7\x8a\x37\xd3\x43\x1a\x67\x5a\x0e\x49\x45\x3c\x91\x03\x27\x39\x76\xb0\xcf\xd0\xf6\x7d\x00\x96\x5d\x3f\xaf\xf1\x10\x22\x3f\x8d\x0d\xd9\xa4\x68\x57\xb3\x1d\x01\x80\xbd\xa1\x55\xe4\xe4\x63\x96\x6e\xb8\x35\x34\x22\x73\x46\x39\xed\x6e\xe0\xc5\x8d\x2b\xfc\x94\xb4\xc3\x52\xc1\xa2\x61\x15\x4d\xa0\x09\x77\xbf\x2a\x75\xce\x73\xec\x04\x48\x2f\x58\xd0\xa3\x97\x0c\x0b\x6d\x03\x8c\x1c\x88\xd9\x2f\xd9\x1e\x28\x6e\xd9\x2b\x04\xf0\x88\xbd\x8c\xa4\xe9\xa1\x06\x56\xeb\xbe\x57\xae\x79\xa1\xa3\x42\xd2\x55\xf4\xe4\x60\x7b\x1e\x40\x2c\x59\xce\x2b\x9e\x85\x4c\x40\x59\xbb\x82\xa6\x3c\x5d\x14\xda\x18\x92\xf5\xc4\x43\x3a\xbb\xa0\x3b\xa9\xf1\xaa\x0e\xae\x0a\xf0\xfa\xdc\xfc\x96\x0e\x0a\xf9\x15\xed\xa3\x42\xe0\xdc\x83\xb3\x34\x03\xb6\x31\x4a\x8e\x65\x45\xc9\xbb\xc8\x60\x97\x5b\xaf\x6e\x55\x60\xb7\x58\x88\x4c\xb2\x9d\x56\xa9\x93\x5e\xe2\x56\xd9\xe3\x39\xec\xee\x23\xf4\x44\x09\x2e\xfa\xc6\x01\x6e\xa7\x0e\x4a\x6a\x9d\x23\x1e\xca\x50\xec\x43\x81\xb0\x38\xcb\x97\x39\xd9\xcd\x66\xa3\x5b\x75\x6e\xb7\xb9\x73\x39\x6b\xdb\x3a\x2b\x0c\x1d\x05\x1b\xb7\xd1\x4d\x28\x0a\x15\x02\x85\x94\xd5\x73\xd9\x91\x4d\xf9\x88\x27\xe8\x60\xc2\xc1\x6d\x35\xf4\x8a\xec\x98\x50\xad\x26\xa7\x8c\x0d\xdb\x93\x4c\x1d\xd2\xb9\xf9\x29\x38\x83\xb4\x13\xa4\x95\x77\x66\x61\xdc\x31\x53\xf3\xac\xd1\xd0\xdd\x5e\x92\x52\x60\x98\x1e\x38\xc1\xa8\xb4\x65\x54\x36\x28\x8c\xd9\xe8\x99\xc9\x02\xcd\x40\x31\xac\xc7\xe2\x3c\x92\x9a\xea\x31\xcd\xd9\x0e\x09\xaf\x48\x43\xa4\x8a\xd1\x4c\x44\x3f\xc8\xbe\x7b\xea\x36\x4a\x12\x68\x3c\xc4\x81\xb6\xe2\xf5\x81\x5d\xde\x63\x62\x10\xfa\x00\x56\x47\x2c\x6e\x35\x5f\x21\x7c\xf9\x2a\x96\xd9\x52\x42\xd0\x1b\x29\x8b\x2a\xed\x9c\xbb\x74\x3d\xee\xd8\xec\x59\xb6\x03\x64\x94\x56\x6d\x53\x1c\x0b\x02\xc2\x1d\x97\xd8\xa4\x4f\xab\xb3\x99\xc7\x69\xdc\x24\xe2\x14\x02\x2d\x02\xda\xb6\xac\x18\x9a\xb5\x00\xb2\x8a\x53\xab\xb6\x08\x11\xea\x69\xc1\x52\x8f\x1c\xaf\x78\x16\x71\x11\x68\xaa\xc9\x69\xee\x2c\x6e\x73\xad\x8b\x4a\x38\x1f\xfb\x58\x57\x0e\x76\x1e\x0f\x11\xe4\xb6\x80\x90\x29\xd8\x7d\x75\x16\xad\x57\x88\xc3\x03\x36\x5e\x4b\x36\x10\xb4\x04\x14\x30\x87\x21\x19\xe0\xb5\x6d\xb9\x6c\xc2\x1c\x2d\xee\x84\xc4\x23\x94\x26\xc4\x9e\x85\x07\xe2\x86\x83\x87\x1f\x01\x97\x5b\x71\xbd\xdb\xdc\xb9\x78\x40\x5a\x2a\x79\x00\x8c\x0a\xc2\x75\x93\x04\x59\x8c\xc6\x11\x02\xdd\xa9\x53\xfb\x0e\x4e\xb2\x44\xc0\x46\x59\x12\xcb\xa7\x15\xfa\x8a\x91\x1d\x34\xb4\x10\x60\xf6\x22\x18\xed\x0d\x65\x63\xec\xee\xed\x51\xd4\x12\x70\x57\xb6\x0b\x3d\xd3\x10\x0b\x2b\xb3\x59\x32\x94\x73\x57\x2c\x49\x52\x5c\x9b\x90\x50\x9e\xa8\x86\x9a\xf7\x61\x0e\xa4\x3c\x72\x36\x9f\x56\x6e\xd6\x6b\x8f\xd9\xc1\x09\x44\xbb\x52\x3c\x0f\xb3\x59\x35\xaf\x20\x67\xd3\xae\x7e\xc1\x7a\x4b\xd3\x62\xa6\xd8\xe6\xf5\x9d\x9c\x54\x9c\x06\x1a\xd7\x9c\xb1\xa3\xa1\x90\xb6\x89\x5c\x04\xb5\x73\xbd\x35\x70\xc5\x0e\x86\xf4\x9a\xf9\x0e\x81\x0f\x2b\x75\x66\xcb\x12\xd6\xe2\xb6\xb9\x4f\x73\x0e\xa3\x71\x31\x8d\xa6\x7d\x61\x04\x30\x4f\x82\x03\x8b\x4d\x57\xe4\x03\x08\x50\x4b\x0c\x60\x54\x1a\xf7\x71\x0e\xd0\x5c\xa1\x40\xf2\x39\xed\x61\x1d\x30\x09\x6c\x84\x75\x19\xb3\x76\x95\x4d\xa2\xad\xbc\xe4\xc8\x1f\x1f\xe1\xec\x94\x12\x01\x5b\x43\x2b\xa5\xa2\x78\xb3\x4a\x19\x03\xc3\x5b\x9c\xdc\xa0\x39\x02\x5d\x44\x76\x82\x05\xd4\xf2\xdc\xaf\xc9\x4a\xc0\x73\xb7\x79\x2c\x89\x97\xed\x80\x06\x07\xd1\x91\xda\x76\x76\x30\x89\x04\x59\x0c\xae\x5d\x33\x4f\xb0\x57\x6e\x43\xe7\xc8\x08\x84\x9b\xc0\xe5\x56\xea\xd0\x6d\x06\x17\xae\xf7\x6d\xc9\x71\x5f\xf5\x2a\xe2\xac\x95\x57\x65\xe7\x52\x81\xf3\x32\xca\x43\x1e\xca\x26\xd7\x96\x44\x96\xaa\xf3\x3c\x44\xc4\xcb\x15\xff\xa1\x8a\xee\x23\xd4\x73\x0b\x0c\xae\xe9\x5c\xb8\xf1\xa6\x76\x50\x46\x61\x61\x98\x8a\x2a\x5d\x9a\xea\x59\x66\xcd\x15\xed\xa5\x54\x73\x49\x78\x5b\x72\xbb\xdd\x39\xa0\xe7\xb1\x9c\xa8\xb3\x75\xd0\x4a\x3c\x70\x6c\x4b\xa3\xb9\xee\xd6\x94\xca\xb6\xc8\x6e\x17\x0c\x57\x29\x36\xef\xaf\xb8\xb7\xb4\x1a\x92\x23\x12\xe7\x84\xda\x92\x42\x05\x36\x2d\x5b\x6e\x03\x11\x63\x57\xc7\x42\x0b\x1b\x78\xa7\x2b\x51\x01\x01\xcb\x72\x3a\x29\xbd\x82\x90\x40\x49\x6c\xd4\x6e\x2c\x38\xae\x29\xa6\x32\x39\x3d\xd0\xd2\xc1\x92\xa2\xdb\x86\x0d\xab\xdf\x5c\x5c\x61\xd6\xe7\x89\x0f\x9a\x6b\xbf\xc2\xbd\x47\x43\x52\xce\x9a\x23\xda\x63\x6a\xb9\x91\x6a\x4f\xec\x8d\xc5\xd2\x9c\x39\x81\x74\xee\xc7\x51\x1d\x33\xeb\x09\x9c\xeb\xdb\x8a\x36\xa9\xaf\xf8\x45\xb2\xef\x06\x20\xd5\x27\xdf\x3b\x07\xce\x1d\x80\x53\x4c\xba\x73\x99\xd2\xad\x68\x45\xcf\x1d\x4b\x32\x17\x21\x46\xae\x13\x0e\x95\xaf\x58\xe1\xd5\x14\x36\xa5\x60\xe7\x3a\x0d\x47\x0b\x43\x90\x30\x14\xc8\xbe\x79\x52\x48\x5a\x87\x74\x65\x56\x36\x0b\xcf\x98\xd0\xed\x1c\x50\xdf\xec\x07\xb8\x95\x9e\x7c\x9b\x69\xd1\x64\x1b\x5e\x69\x23\x76\xb2\x03\xaf\x7b\x59\xb6\x5e\x56\x35\x97\x56\x4c\x03\x19\x4b\xba\x9f\x91\xf2\xba\x67\x3a\xe9\xf4\x0a\x8c\x2b\x6e\x19\xd3\x72\x60\x67\x2a\x09\x25\x9e\xcc\x84\xb3\xaa\xc0\x49\x64\x13\x28\xe9\x9d\xeb\x66\x2c\x0b\x3f\xce\xa9\x09\x2e\x24\x2c\x67\x9c\x07\xb8\x62\xc1\x0b\xef\xbd\x19\x2d\xb4\x06\x3d\x46\x89\xf3\x9e\x92\x69\x5a\x3a\xed\xeb\x1c\x4b\x86\x06\x58\xd2\xa8\x36\x87\xaa\xba\x33\xb2\x5c\x72\x6e\x94\x16\xe8\x34\x4c\x80\x67\x37\xa0\x3c\xad\x6e\xa9\x6a\x70\x1e\xc0\x4a\xb6\x62\xb7\x2a\x33\x78\xdb\x6d\xa3\x71\x0d\x19\x09\x35\xdd\x25\x10\x17\xb8\x6b\x86\x2e\xa8\xc0\x44\x35\x02\xce\x43\x33\x64\x08\xf8\x04\x08\xe9\xb8\x19\x0a\x02\x6c\x32\x6a\x92\x50\x5f\xb7\x6d\x53\xeb\x15\x37\x86\x5c\x5d\x1a\x38\xdd\x12\xe8\xc0\xd2\x72\x54\xb7\xb8\x9e\xb0\xcb\xc3\x99\x23\x51\x2e\x46\xc4\xc8\x34\x77\x8a\xc9\x0f\x41\x76\x3d\xe7\x15\x36\x69\xb9\x6e\x62\xdf\x0e\x06\x70\x23\x09\xaa\xb8\x10\x4d\xe0\xe6\x3c\xd3\x73\x41\x84\x81\x50\xc7\x80\x47\x53\xa4\x91\xd1\x4c\x9c\xea\x8a\xac\x73\x8a\x8d\xd7\x0e\x80\x10\x6a\x59\x00\x16\x7b\xf6\x28\x60\x92\xd0\x42\xc2\x60\xeb\x01\x27\x98\x82\x91\x41\xf4\xa2\xc1\x86\x3d\xbc\x71\x9f\xf7\x23\xe0\x72\xab\x09\xd4\x6d\xee\x5c\x98\xd8\x8f\x58\x6a\xd8\xb5\x92\xa7\x8f\x64\xf2\xb5\x26\xb4\xc8\xe5\xd8\xa1\xdd\xaa\x3c\x3c\xb7\x38\x84\x74\xa2\x32\x9d\x07\xac\x5e\x72\xbf\x57\x90\xa5\x40\xe2\xcc\x52\x34\x61\x39\x20\x78\xb4\xdd\x66\x20\xfb\xa0\xf3\xdc\x4b\xa8\xcc\x0e\xbd\x2e\xab\x28\x2a\x9d\x79\x29\x40\x5d\xe1\x15\xf3\x16\xcf\xaa\x8d\xde\xc8\xb9\xea\x78\x86\x35\x05\x87\xb6\x49\xd7\x63\x3b\xf3\x80\x0b\x92\x92\xd3\x75\x96\x40\xc2\x46\x4a\xd5\xd2\x5e\xa1\xfc\xc0\x69\xf5\xcc\x2d\x4c\x1e\xbd\x64\xc1\x17\x7b\xd6\x13\xa1\xa4\x81\x63\x55\xcf\x5a\xb0\x25\x2a\xcf\xee\x50\x53\x80\xd4\x95\x5e\xb2\x09\x42\x82\xb1\xb2\x06\x5e\xa7\x0d\x4b\xdb\x23\xee\x15\xd4\x01\x0e\x67\x90\x6b\xe6\x0c\x4b\x21\x76\x59\x01\x40\x64\xc0\x9a\xb5\xf3\xeb\x15\xf9\x94\x66\xb3\x6e\xa7\x9d\xcb\x34\x68\x26\xb2\x0e\xe3\xf3\x49\x84\xde\x01\xd2\x9e\x45\xb5\x1d\x96\xec\x4b\xcb\x19\xb7\xe0\x87\xef\xe3\x0a\xcb\xd3\xea\x28\x47\xc3\x1d\x45\x6f\xf5\xc8\x61\xe2\x9d\x67\xab\x57\x9c\xd9\xba\xa3\xc2\x30\x05\xa4\x7a\xe0\x72\x20\xcb\x41\x76\x28\xcd\x25\xfa\xd3\x8a\x1c\x0b\xce\x46\x18\x7b\x38\xcf\x6e\x82\x62\x16\x39\xb1\x55\x55\x73\x45\x90\x8b\xfd\x48\x7d\x5d\xad\x52\xda\x20\x47\x6d\xd2\xf4\x66\x5a\x74\xab\x99\xf5\x6d\x06\x17\x7c\x1e\x3d\x0d\x0c\xed\x24\x4b\x67\x33\xbb\x8e\x21\x95\x64\xe7\xc8\xe1\xe5\xb0\x8b\x67\x0b\x02\x68\x64\x91\xb5\x25\xd6\x51\x71\xc9\x15\xe1\x85\x78\x4b\xce\x79\x54\x08\x0b\x8b\x8b\x49\xfa\x2c\x7e\x59\x22\xa8\xb6\x6c\x0c\x24\x73\x27\xd6\x1d\x13\xca\x10\xd7\xc6\xf7\x1e\xe6\x15\x83\xcf\xc4\x80\x11\x05\xd3\xf3\xa0\x13\x1a\x18\x0a\xed\x22\x68\x3a\xd9\x11\x22\x4a\x98\xed\x47\x8c\xd0\x61\x6a\x1d\xdb\x3a\xc2\xe2\xcc\x17\xcc\x69\xa8\x53\xbe\x88\xea\xcf\x13\xf8\x88\xce\x3a\x8a\x40\x32\xa8\x43\x25\xe8\xb1\xd5\x83\xa9\x53\x61\x41\xce\x8d\x0a\xb2\x2e\x79\x17\x20\x5d\xe1\xf8\x6f\x76\x89\x64\xef\xcb\xd9\xb9\xf3\xb4\x25\xeb\xcf\xc3\xb7\x5c\xdb\xce\x6c\x2e\xa7\xe6\x9d\xc1\xe2\x9b\x94\xa7\x2f\xa7\x3b\x04\xbf\x64\x35\x7d\x4c\x23\x79\x2c\xd5\x22\x77\xf2\xdd\xe5\x66\xf9\xd6\x06\x5d\xc1\x7e\xc2\xb3\x01\x43\xd7\xba\xb5\x28\x9d\xca\xe2\x38\x38\xdd\x68\xbe\xc2\xb8\xbe\xd9\xa5\x20\x66\x82\x0a\x6e\x0f\xb2\x6c\x15\x16\x4f\xac\x6d\xf4\x80\xbb\x3b\x73\x47\xc9\x43\x93\xcf\x2a\x13\xe8\x9e\x6c\xe2\x88\x57\xc0\xfd\x36\x6a\x58\x7a\x22\xce\xe1\xda\x5c\x5f\x25\xa7\x79\x3b\x4b\x70\xd1\x95\x7d\x2d\xc7\x14\x50\x0d\x9d\x2b\xf6\x7d\x53\xe6\x48\xe3\x06\xe9\xe0\x23\x66\xa3\x6f\xba\x57\xfa\x40\xde\xbe\x5b\xbe\xf4\xa1\x4f\x0d\xef\xbd\xd7\x4b\xfe\xf8\x55\x8f\x7a\xf0\xeb\x5f\xf6\xfc\xcf\x7e\xee\xbd\xfe\xf8\xcb\x5e\x8d\xe7\xaf\xbc\xff\xcf\x99\x8d\xd6\x8f\xfb\x47\x3f\x77\x07\x7c\xc5\x6b\x3e\xea\xe5\xff\xf3\x17\x9e\xf1\x87\xe1\x29\xee\x37\x9e\xff\x9d\xdf\xfa\xc4\x5f\x7d\xde\xd7\xe7\xcf\xfc\x2f\xf7\xfe\xea\x57\xbe\xf0\x86\xd2\xcf\x7c\xd6\x77\x7d\xc9\xe3\x9e\xf4\x69\xef\x7a\xf0\x8b\x7f\xf9\x65\xee\xf1\xfe\xfd\xbf\xfd\xdd\x5f\xfd\xc3\x8f\xfb\x98\xbf\x59\x3f\xff\x7e\xdf\x71\xd7\x5f\x7d\xc5\xd3\xde\x7f\x43\xe9\xa7\xf7\x2f\x78\x06\xfc\xb6\x67\x7f\xf4\x43\x3e\xea\x53\x1f\xf1\x96\x9f\xbb\xff\x6b\x3e\xf5\x57\xbe\xe0\x1e\xaf\x7a\xd2\x7b\xef\x58\xff\xde\x7d\x7e\xec\xb9\xff\xc1\xfc\xc0\x0d\xa5\xbf\xf5\x47\xee\x59\x8f\x7d\xe8\x4b\x3e\xf8\xc6\xaf\xb9\xc7\xb7\x7f\xe5\x93\x9f\xfc\xf2\x3f\xfc\xa4\x7f\xfe\x0c\xf5\xf5\xff\xf2\xa9\xe5\xdb\xdf\xfb\xb6\xdf\x79\xf1\xd7\xbf\xe4\x86\xd2\x97\xfd\x9f\x5f\xf0\xae\x87\xfe\xc1\x6f\xfd\x14\x7f\xfd\xe7\x3c\xe2\x0d\x5f\xf8\x09\x9f\x79\xb7\x7b\xff\x1f\xaf\x7d\xd4\x9b\xeb\x5b\x3e\xef\xbe\x6f\x79\xc6\x0b\xde\xf3\x45\x9f\x74\x43\xe9\x7f\x7f\xec\x7b\xef\xf3\x6f\x1e\xf4\xd6\xe5\x73\x7f\xfe\x6f\x3d\xfe\x4b\x7e\xf8\xb7\xef\xfd\x89\xf7\x7c\xfd\xff\x78\xfa\xf1\x0f\xec\xa7\x7d\xe6\xfb\x7e\xeb\x27\x1f\xfd\x4f\xbf\xfd\xc6\x10\xa4\x9f\xff\x82\x57\x3d\xe4\xd7\xd7\xe3\x45\x4f\x7d\xe3\x6f\x3c\xe6\xf8\x9e\xf7\x3e\xf0\x0d\xf7\xbc\xcb\x27\x3f\xfe\x2f\x3f\xf3\x8b\x9e\xf0\xcc\xaf\xfb\x2b\x3f\x7b\x7c\xce\x0d\xa5\xbf\xf7\x07\xf2\x1d\x5f\xf8\xd3\x0f\xfe\xaf\x1f\xf7\x2b\xf3\x57\xde\x72\x7e\xc5\x6b\xdf\x3c\xf6\x17\xfe\xd6\xdb\x9e\x7d\xcf\x6f\xc8\x4f\xee\xbf\xf3\x9c\xc7\xbe\xed\xcf\xcc\x46\xb7\x7a\xaa\xb7\x99\x9b\x1a\xbc\x6f\xb1\xac\x74\xdb\x61\x33\x01\x13\xa2\x8e\x6d\x11\xeb\x42\x20\x2f\xaa\xdf\xf9\xc9\xd2\x88\x95\xd5\x10\xe5\x4d\xdf\xfc\x3c\xaf\x58\x18\xa5\x96\xed\x75\x63\xcb\x8e\x84\xe9\x35\x1e\x09\xf3\xda\x87\x8d\x2e\x7c\xd8\xd2\xdf\x90\x85\x1c\x8c\x93\x3a\x4e\xa0\xa4\xae\x2c\x68\xbd\x02\xd5\x4a\x04\xeb\x02\xab\x67\xb0\x3b\x5d\xcd\xe1\x2b\x97\xcb\xc6\x8e\x32\x96\xcd\x4f\x1c\x28\x4c\x69\x0f\x18\x54\xab\x3a\xe4\xc0\xa1\x4b\x26\xf1\x0d\xec\x24\xa0\xcc\xf7\xec\xc3\xb9\x21\x27\x8b\xe3\x26\xaf\x78\xdf\x05\x11\x22\xed\xdb\xc4\x73\xf5\xe7\x11\xce\xd4\x77\x7b\x82\x7a\x89\xfd\xeb\xb4\x7a\x65\x90\x37\xa9\x92\xc7\x2d\xaa\x91\x36\x86\x29\x59\x98\x47\x2d\x1c\x9c\x42\xbf\xfa\x7d\x01\xce\x1a\x4b\x6c\x1e\x23\x83\x2b\x66\xe0\xa4\xef\x99\x25\x04\x16\x82\x54\xc5\x09\x83\xe6\xf6\x49\x8a\xd7\xe7\x09\x03\xea\x41\xac\xe4\x80\xfe\x4e\x72\xe1\x96\x05\xa8\x69\xd9\x15\xc3\xb2\xc5\x1f\xa2\x06\x58\x97\xa3\x49\x5f\x91\x5e\xd1\x4e\x62\x99\x82\xb6\x84\xb9\x9d\xa4\x91\x29\x40\x8d\xc7\xd1\x0f\xbd\x2d\x3d\x6e\xf9\x92\xd8\x56\x97\xbc\x06\xc5\x8f\xb6\x19\x76\xce\xa5\x47\x65\x67\x5b\xb5\x0a\xcd\x49\xb4\xa7\xd4\x8b\x68\x41\x0a\xd6\xe1\x19\xa8\x90\x75\xbd\x99\x9b\xde\x0a\x87\x6f\x73\xfb\x68\x48\x58\x8f\xad\x9d\x63\x52\x5e\x00\x92\xdd\x47\x94\x55\xd5\x49\xaf\x0d\xf4\xcd\x02\xc0\x75\x11\xed\x84\xe4\x54\xe4\xd0\x59\xe6\x2b\x56\x50\x46\xc9\x20\x07\x4d\xe2\x5a\xb2\x5a\xcc\x08\xdb\xb9\x27\x8c\x29\xa4\x25\x52\x26\x47\x88\xa4\x17\x68\x66\x74\xa3\xb6\x7e\xf2\xf5\x8a\x6d\xaa\xf5\xe8\xca\x9a\x98\x90\x3f\xc7\x44\x0b\x00\xce\x59\x05\x37\x5d\x83\x27\x94\x55\x9b\xdb\x01\x0d\x8d\x36\x02\xc3\x3d\x5d\x8f\x0a\x96\x0b\x44\xc0\x95\x55\x12\x80\x5f\x61\xab\x2c\x69\x66\x40\x32\x2b\xae\x44\x3a\xdf\x34\x9c\x79\x42\xb8\xf2\xb8\xaa\x20\x5b\x1b\x80\x4f\x72\xd6\xf5\x8a\x15\x14\xdd\xb1\x41\x1e\xb2\xde\xea\x9e\x94\xe6\x12\xa3\xbe\x57\x94\x29\xc7\x62\x08\xeb\x6d\xe4\x6b\x13\xce\xfa\xea\x1a\x10\xf8\xe4\x57\x6c\x5f\xae\x0b\xdb\x72\xf0\xa6\xc7\xc0\x3a\xa2\xd5\xc7\xd4\xb4\xf5\x16\xcf\x40\x98\x85\x03\x27\x02\x79\x5f\x4d\x8f\x44\xe8\x0a\x7b\xe8\xec\x8a\x15\x14\x88\xf6\x18\x23\x03\x29\x9f\x65\x6f\x6b\x53\x4b\xf3\x8e\x16\xea\x06\x9a\xf1\xa0\x5d\xa2\x6d\x03\xe1\xd0\x6c\x6f\x3c\x73\x9b\x24\xb8\x42\x04\xac\x69\xae\x36\xa3\xdc\xe1\x4e\x15\x8c\xcb\xce\x91\xce\x21\xc4\x49\x5a\xd8\x16\x5d\xc4\x62\xe1\x19\x0f\xbe\x46\x9b\x10\xdb\x83\x1b\x37\x73\xd3\x5b\x75\x6e\xb7\x19\x5c\xe0\x59\xda\x22\xf8\x12\x03\x22\x46\x2c\x7d\x61\x9a\xb7\xc9\x0e\xb2\x76\xd9\x6a\xb5\xb8\xa3\xee\x64\x01\x99\x51\x8f\x2b\xdc\x93\xba\x22\xea\x42\xa4\x12\x57\x14\xa3\x86\x95\x06\xd3\x9d\x26\x62\x4e\xa7\x81\x5c\x26\x93\x04\x30\xc6\x79\xeb\x47\x0e\xc3\x61\xa8\x13\x0a\x2c\x5d\x11\x4c\x35\x4f\x6c\x07\x50\x2a\xa1\x4a\xbb\x37\xc9\x9f\x87\x5d\xf8\x1a\xfc\x9c\x6e\x0f\x7b\x10\xbe\x24\x60\x5b\x42\x51\x00\xa4\x1c\xc9\xe5\x02\x3d\x9b\xf6\x3d\x2d\x5e\xda\xa3\xc8\x63\x69\x88\xe8\x24\xb5\x86\x18\x8b\x09\xa5\x10\x46\x4e\xc3\x68\xf3\xcd\x91\x73\xe6\xda\xb8\xd9\x8d\xba\xa2\x67\xc0\xad\xad\x38\x18\xc8\xfc\xe2\x41\x91\xe7\x84\x04\x88\x11\x9c\x31\x06\x0d\x48\xd0\xe6\x2b\x73\x85\x08\xbf\xf6\xaa\x25\x3b\x2b\xbf\x62\xce\x01\x86\x03\x16\x1a\x80\xf0\xc2\x9c\x13\x83\xba\x05\x9f\xbc\xba\xe8\x77\x51\xad\x06\xa7\x28\xc7\x3c\x28\x6f\x23\x6f\x63\x37\xbd\x5c\xb1\x08\x43\x5d\x30\x2a\x51\xe4\x7c\x1f\x66\xab\xa7\x2e\x34\x11\x2a\x53\x35\x7a\x3d\xc6\x9e\x99\x21\x71\xda\xe8\x1b\x0d\x26\x16\xc2\x22\x31\x57\xf4\xd5\xb2\x25\x97\x47\x99\xa9\x6c\x7e\xfa\x5a\xce\x5e\x38\x38\x54\xe3\x10\x6b\x94\x12\x6d\x34\x1c\xde\xeb\x63\x93\xab\x81\x7e\xc9\x62\x88\x9b\xc0\xe5\x56\x5c\xef\x36\x83\x0b\x5a\xf0\x38\x83\x51\x68\xe3\xc8\x9e\xdb\xb4\x90\x7a\x83\xf7\x6c\xfd\x91\x07\x0d\x08\x55\x99\x78\xca\x04\x6f\x7a\x4e\xc5\xb4\xbb\x64\x58\x46\xf8\xe8\xe6\x74\x13\x9c\x04\x62\xd8\xca\xa9\xfc\xd0\x65\xe6\x23\xd1\xc6\xbd\x68\x51\x04\x40\x80\x2d\x74\xa3\xe4\x28\xc5\xce\x2b\xdc\x7b\xab\x19\xe8\xa8\xbd\xba\xdd\xda\x01\xfc\xe9\xce\x43\xf5\x2e\xcb\x7e\x26\xee\x4b\x2b\x32\x22\x2e\xc3\x2a\x41\xe8\x15\x73\xa7\x14\x19\x57\x7c\x27\xb5\x5f\x38\x28\xe9\x48\x07\x39\x16\x90\xd1\x6e\x57\x32\xf6\x85\xad\x6c\x5b\xd9\xd9\xa6\x42\x94\xc5\xb3\x6f\xf8\x04\x79\xb3\x6e\xbd\xe4\xc6\x35\x1d\x08\x9d\xd2\xd8\x63\xc7\xbd\x2f\x3e\x2f\x0b\x41\x5d\xe3\xdc\xe7\x06\x07\x9b\xfa\x74\xdb\x96\x04\x57\x78\x45\xb5\x18\x33\x2c\x65\x57\x58\x9e\x72\xe4\x60\x25\xcc\x41\x47\xc8\xb9\xf7\x11\x70\xc2\x86\x54\x0a\x73\x6b\x8b\x6c\x67\x3f\x69\xf3\x67\x4b\x31\xcb\x69\x05\x1d\xea\x0a\xa2\x4a\xcd\xc8\xa8\x9c\xdc\x32\xcf\x21\x3e\x09\xb7\xd6\x1d\x7e\x0b\x7b\x14\xeb\x9d\x2d\x54\xe0\x7d\x3d\xe8\x19\xc0\x87\xc3\x45\xdd\xe4\xd0\x5c\x61\x36\x0a\x8c\xa3\x49\x36\xbf\x15\x1a\xb4\xb3\x4c\x59\x28\xf1\x39\x41\x2b\x73\xb2\xb9\xac\x73\xd6\x8c\x7d\xa3\x6d\x19\x50\xf1\x9a\x15\xbf\x79\x07\xe3\x56\xea\xd0\x6d\xd6\x5c\x46\x44\xd6\x0b\x74\xc2\x7d\xd9\x6a\x9d\x53\xe5\x61\x36\x07\xa6\x3a\xec\x3e\x4e\x53\xec\x9e\x56\xd6\xe3\xaa\xb0\x4a\xa1\xf5\x30\x96\x0b\xf8\x24\x1d\x11\x9b\xe3\x54\xd1\x6c\x91\x0e\x78\x4a\x6b\x98\x53\x10\xca\x9e\xa9\x14\x4d\xda\xc6\x05\x80\x62\xe5\x73\x15\xea\x24\x2d\x33\x75\x45\x13\x2e\xf9\xa0\x50\xa8\x52\x76\x03\xba\x4a\x5c\x9a\x7a\x84\xc9\xe5\x32\x44\x10\xa1\xdf\x49\x07\xb6\xa3\x4e\x63\x6a\xf6\xd9\xae\xcb\x99\xae\xc8\x14\x3a\x59\xde\x0a\x15\x78\xb5\xe7\xcc\x6b\xd8\xcc\x5a\xcd\x59\xf5\x04\xa2\x15\x5d\xeb\xa2\x06\xea\x16\x3a\x8f\x1b\x4f\xd8\x8f\xd5\x5d\xe2\x2d\xed\xdb\xba\x1c\x66\xf1\xcc\x0f\x03\x22\xaf\xa7\xe3\x90\x75\xcb\xd7\x34\x4f\x99\xc9\x24\x64\xf8\x0e\x76\x51\x40\x34\xba\x30\x9f\xf2\x15\x33\xf0\x06\xa7\x72\x75\xd7\x13\x6d\xda\xeb\xe4\x19\x07\x8e\xd9\x59\x2b\xdd\x15\xc5\xb1\xa3\xc3\x01\xb6\x52\xaa\xb6\x8d\x01\xd9\xe6\x66\xaf\xd0\x5c\x36\x7b\xe7\xf7\x05\x6e\x9b\xea\x5d\xc1\x3c\x4d\x0c\xfe\xce\xdf\xc9\x32\xc0\x59\x72\x47\xf2\x5b\x92\xb5\xb8\x2d\xcc\x73\xd5\x0b\xb0\x97\x58\xc6\x3b\xce\xab\xa7\xc4\xc4\x00\xa7\x5a\xa4\xa4\xa0\x98\x3e\x67\x6d\x5d\x37\xe0\x12\xe0\x30\x48\x69\x95\x74\x88\xeb\x9d\x09\xb1\xa6\x9b\xf3\x01\x6e\xa5\x27\xdf\xee\xed\xd1\x3d\x87\x40\x37\xb7\x9d\x86\x57\x78\xfa\xb9\x82\x3a\x31\x01\x9e\xa5\xb1\x81\x7d\x0e\x6e\x91\x3b\x48\xb2\x65\x0f\x42\x0f\xbd\x9a\x0b\x7e\xbe\x75\x83\x84\x06\xb7\xc6\xc4\xb6\x55\x89\xad\x87\x5c\x70\x95\xfb\xd4\x65\x59\xad\xd3\xce\x6d\x50\x6c\x71\x67\xd2\xd8\xbe\x1f\x08\x83\xf5\x0a\x83\x0d\x08\xc7\x59\x14\x4b\xdb\x68\x2e\xe9\x65\xc3\x32\x48\x8d\xb5\xf0\x82\x88\x00\x12\x63\xeb\xce\x78\x5b\x70\x91\xde\xaa\x04\xd7\x64\xaf\xd0\x9f\x18\x4d\x6b\x44\x13\x95\xec\x13\x2c\x27\x82\xd6\xce\x15\x4a\xed\x4f\x56\x40\x2e\xe5\x30\x56\x84\xb9\x80\x46\x2a\x5f\x37\xd3\xaf\x91\x95\xa7\xb7\x62\xee\x7e\x4f\xfb\x66\x65\x3a\x21\xe6\xe7\xb1\x5a\xe5\x67\xc8\xa1\x80\x6d\x2e\xbe\x68\x11\x62\x14\x72\x66\xd2\xcc\x0a\xd5\x15\xdb\x0f\x9c\x0c\x4b\xe5\x04\x19\xc0\xc6\xcd\xb0\x29\x62\xc6\xce\x2d\xe3\xe1\x8d\x5f\x22\xd4\xce\x13\xea\x16\x47\x22\xc4\x8b\x3b\xdc\x39\xae\x78\x2f\x96\x85\x60\xa3\x1b\xd7\xfa\x74\x40\xb4\x49\xf1\x74\xc4\x85\x4d\x9d\x75\xdb\x51\x6d\xc1\xf1\xa2\xca\xb9\x73\x49\x30\xde\xf6\xb2\xcd\x2b\x54\x30\x99\xe4\x68\x40\x2b\x00\x57\x6e\x95\xce\xb8\xac\x66\x3a\xb0\xb9\xd6\x21\x41\xc3\xa9\x62\x38\xcc\x9b\xf3\x80\x20\x02\x16\x0c\xcc\xcd\xd7\xa5\x6f\x35\x81\xba\xcd\xb4\xc8\x15\x27\x95\x43\x74\xdf\x57\x1a\xb0\x81\x76\xf7\xc0\x69\x40\xc3\xc8\x74\xd7\x1b\x6d\xab\x33\x5b\x3a\x16\x25\xd9\xac\x7b\xca\xe3\x8a\xe5\x95\xd5\x1d\x1a\x9c\x48\xab\x0d\x1b\x9e\x49\x45\x90\x79\x74\xda\x19\x99\x39\x04\x0c\xc5\x2c\xe7\xb1\x6c\x6c\x47\x8b\xf7\x08\xae\x98\x8f\x2b\xa4\x54\x7a\x70\xba\xc2\xde\x0b\x34\xd4\x9f\x16\x0f\x56\xc6\xb9\x35\x20\x37\x57\x8a\x2f\x2c\xad\x9a\x35\x3a\x68\x6b\x67\xe6\xa8\xad\x42\xa7\x2b\x26\x67\x13\x2a\x66\xbc\x15\x14\x17\x28\x4c\xb1\xac\x39\x82\xeb\x54\x93\x72\x8c\x01\xf5\xca\x6c\xed\x38\x58\xb3\x72\xe6\x7a\xca\x73\xc6\x0b\xf4\x27\xea\xe2\x66\xa1\xad\x21\x51\xe2\x22\x06\x47\x40\xb0\x98\x63\xc3\xd0\x84\xee\x0e\x1d\xb5\x1a\x98\xec\xab\xf5\x86\x6e\xb1\xcb\xc2\x2f\x09\xa5\x61\x03\x3b\xdb\x31\xb7\x11\x17\xa6\xba\x9f\xc2\xb5\xb5\x9d\xad\x92\xb0\x37\x9c\x0a\x2c\xc5\x09\xeb\x84\x9d\x1c\xa1\x28\x91\xb8\x24\x6b\x0a\x54\x31\x79\xdb\x53\xd1\x20\x89\x0c\x28\x9a\xa8\x9e\x00\x76\xc2\xa1\x94\xe9\x54\x63\x8d\x2b\xdf\xd2\x10\x87\xc3\x12\xee\xc5\xb0\x2b\x84\xfe\x52\x3c\x03\xa8\x2e\xc4\x1c\x6c\xf0\xb6\x40\x2c\x57\xef\xbc\x05\xb2\x64\xb9\xb9\xb8\x68\xc0\x65\x24\xc8\x1b\x8e\x9b\xc1\x9d\xc5\x9b\x35\x97\x5b\xcd\xac\x6f\x33\xb8\x4c\x48\x88\x76\x2b\xef\x9b\xe9\x2b\x1a\xd5\xe9\xc2\x86\x8f\x7d\x85\xcb\x71\x54\x2d\x6d\x48\x6b\xdd\x57\x82\x26\x13\xc1\x01\xec\xf2\x15\x52\x2a\x84\x3b\xd7\x1d\x06\xe7\xfd\xf0\xba\x2f\x87\x2e\x40\xd1\x1a\x67\x6f\x39\xfa\x55\x2d\x9d\x1b\xd7\x43\x8f\x2c\xaa\x95\x4d\xad\xae\x48\x43\xa4\x51\xf3\x46\xd6\x14\x9b\x2c\x56\x45\x03\xe5\x59\x58\x6f\xa1\xa2\x03\x44\xd1\x86\xd6\x26\xab\x90\x37\x0d\x11\x70\x9d\x69\xba\xdb\x4b\xc8\x59\x8b\x76\xc5\x05\x25\x06\x0b\x60\x33\x49\xce\x27\x59\x7a\x91\xa9\x35\x79\xa8\xa8\xab\x20\x2a\xd4\x5e\x66\x33\x58\xb2\x03\x5c\x22\xe8\x92\xa8\xb6\x70\x08\x8f\x0c\x61\x76\x4c\xb1\x0f\xbf\xee\x4c\x0c\x06\x6a\x6e\x9c\x69\xea\x42\x74\xf0\x44\x4b\xa4\x0a\xed\x4d\x82\x4b\xb2\xa6\xd6\x0f\xa7\x89\xef\x00\xad\x64\xa8\x19\xe0\xd6\x8f\xa1\x37\x5d\xf8\x69\xd7\x18\x7d\x54\x81\xc8\x1a\x44\x65\x5b\x5e\x36\xa6\x75\xe3\x57\x5c\x97\xee\x78\x38\xdb\xe3\xb0\x28\x2c\x9b\xef\xdb\xa2\x9b\x74\x19\x75\xbb\x7b\x7b\xca\x63\xb5\x71\x51\xdb\x09\x4f\xd1\x8a\x6d\x79\x39\xdb\x25\x87\x81\x01\xc6\x09\xea\x45\x10\x94\x33\x58\xc8\x34\xd2\x7a\xb5\x63\xe5\xe8\x81\xf5\xd6\x24\xec\x60\x3b\xb4\x1e\x86\x14\xae\xc2\xe2\xd1\x0d\xb9\x5b\x1f\x31\x1b\xbd\xe8\x1b\xbf\x8a\xbc\xeb\x3e\x5f\x7d\xef\x87\xdf\xfd\x4b\x1f\xf1\xca\x7f\xf1\xc8\x5f\xfb\xec\xfb\xca\xbb\xfc\xc7\xf9\x9f\x9e\xd6\xee\xf5\xcb\xbf\xf1\x9a\xbf\xf4\xe6\x3f\xfa\x73\x66\xa3\x27\x3e\xea\x63\x3e\xfa\x8b\x3f\xff\xef\xfc\xab\xfb\xde\xfd\x2e\xff\xf4\x0d\xaf\xf8\x0c\xf1\x9b\x77\xb9\xeb\xfe\xd0\x17\xfd\xc2\x57\x3d\xf4\x75\x7f\xf0\xec\x5f\xfe\xb6\x87\xbc\xe1\x86\xd2\xaf\xfc\xf8\x7f\xf8\x98\x87\xbf\xf9\x71\xdf\xf8\xf9\x3f\x20\xff\x7a\xfb\xac\xb7\x3f\xb9\x3e\xe9\x2b\xef\xf7\xce\x5f\xfa\xde\x67\x82\x0f\xbc\xf5\xed\x5f\xfb\xb9\x0f\x5a\x6e\x28\xbd\xdb\x67\x3c\xe2\x5b\x1f\x5f\x1e\xf7\x9c\x47\xbd\xec\x7c\xe3\x3f\xfb\xfe\x6f\xfe\x67\x2f\xf8\xb4\x57\xc9\x7f\xff\x71\x4f\xfb\xc9\x2f\xfa\xba\x9f\x7d\xd1\xef\xfe\xf0\xbb\x1e\x7e\x43\xe9\x2b\xfe\xfd\x67\xbc\xec\x71\xbf\xf3\xbe\x4f\xf8\x83\x57\xbd\xff\x27\x9f\xf0\x84\xbf\xf8\xf4\x0f\xfe\xb7\x97\xbe\xf3\x15\x6d\x7d\xe2\x3f\x79\xd3\x2f\x7c\xc5\x57\xdf\xfd\x59\x3f\x77\x43\xe9\x1b\xce\x0f\x7e\xf9\xeb\xe0\xfe\x31\xaf\xfb\x6f\xdf\xe4\xfe\xf7\x2b\x9f\xff\xac\x1f\xf9\x89\x1f\xf8\xd0\x0b\xbf\xff\x4d\x5f\xfb\xf5\x3f\xff\xd3\xef\xfc\x96\x97\x3e\xb0\xde\x50\x5a\x9f\xf8\xf4\x70\xef\x5f\xfd\x57\xf7\xf8\x84\x4f\x7e\xf3\xff\x78\xdd\x97\xfe\xd1\x03\x5f\xfc\xee\x47\x7f\xd7\x7f\x7b\xe7\x1f\xfe\xc8\x47\xfd\xcc\x43\xde\x09\x5f\xf1\xe3\xdf\x70\x43\xe9\xfd\x7e\xe8\xc5\xaf\xbc\xd7\x77\x81\xaf\x7a\xdb\x33\xbf\xf3\x07\x9f\xf9\xa7\xef\x4c\x9f\xf2\x59\x1f\xff\xd0\x5f\x31\x8f\x7a\xfb\xc7\xba\x17\x7c\xea\xf2\xb1\x4f\xfa\xf5\x1b\x4a\xff\xf1\x07\xdf\xfd\x80\x97\x3c\xf9\xf3\xff\xf0\x57\xbf\xff\xd7\xf7\xf8\x51\xcb\xc3\x9f\xff\xda\xfb\xbc\xe4\xaf\x7d\x87\xf8\x9b\xf7\xfb\x9d\x2f\xcb\x77\xdf\x1f\xf1\x35\x7f\x66\x36\xba\xd5\x53\xbd\xcd\x08\xbf\xd5\x89\x36\x34\xe6\x29\x80\xed\x3e\x5b\x0d\xcf\x7d\x23\x61\xc7\x38\x78\xdd\x81\x94\xeb\xdc\x39\x09\x42\x1e\xe6\xd4\x51\x0c\xa0\xaf\x38\x11\x35\x0c\x1a\x11\xb9\xc4\x59\xda\xb6\xcd\x65\x1e\x0f\x79\x2a\x59\xe5\xd0\x67\x4d\x5b\xe1\xb8\x08\x3d\x66\x2c\x70\x78\x42\x38\x19\x97\x04\x20\x2e\xcb\x28\x3a\xd7\xa0\x4d\x73\x66\x27\x03\x6b\x82\x54\x1d\xd6\x4d\xc5\x59\x6c\x18\x28\xd4\xdd\x0c\xcd\x65\x3c\x63\xa5\xfb\xb8\x22\x2b\x81\xae\xbb\xcf\x46\x0c\xcc\x12\xea\x55\xb9\x7e\x04\xb2\xe9\x3c\xa4\x54\x0c\x30\x61\x80\xc3\x6d\x35\x5c\xc9\x40\x0b\xac\x29\x10\x7d\x09\x13\xda\xf6\x73\x65\xbe\xde\x49\xfa\xfc\x86\xe9\xba\x68\xc5\x73\x57\x67\xe4\xb9\x26\x38\x66\xc2\x1b\xe5\x78\xa7\x19\x56\xc0\xc8\x36\xb6\x4b\x32\x85\x12\x02\x5d\x07\xe4\xb6\x59\x17\x88\xf6\x34\x81\x64\xbb\x0d\x61\x5d\xf3\x89\xa6\x84\xe2\xd8\x87\x88\x5d\x60\xbf\x23\xce\xac\x8e\xe0\x92\x67\x41\xc9\x82\x63\x05\x15\x5b\xbe\xd6\xbd\xe2\x3c\x4f\x5c\x0e\xb8\xed\x19\x41\x18\xeb\x56\x72\x21\x7a\x3f\x21\x84\xa5\x06\x0f\x93\xbe\x82\xdc\xcc\x1a\x05\xeb\xda\x8f\x93\x16\x92\xb7\x28\x6b\x85\x50\x8c\xed\xa4\x2c\x50\xb8\xd3\xd9\xd0\x56\xd8\xd8\xac\x31\x44\x9c\x64\x44\x75\x33\x37\xbd\x15\x0e\xdf\x66\xe1\x2b\xa4\x4d\xa5\xa5\x62\xbe\x0c\x73\xe7\xab\xcb\x65\xdb\x7a\xe7\x25\x08\xb2\x2f\x14\x72\xd2\x37\x5d\xcf\x6a\x1d\x34\x82\x6e\x22\x1e\xe9\x0a\x55\xdd\x23\x47\x29\x2f\x1c\xf1\x84\x6d\xd1\x55\xbb\x06\xb2\xce\x3c\xa4\x16\xe0\x86\x2c\x28\xb3\x62\xb7\xa1\x84\x63\x9b\x02\x57\xca\xae\x18\x1c\xb2\x21\x09\x71\x1e\xf8\xb1\x9f\xc7\x62\x43\x30\xf8\x94\x8b\xb3\x47\x3d\x1c\x2f\x41\xe2\xcd\x66\x39\x40\x1a\xb3\x1c\x15\x8a\x06\xf2\x15\xdc\x14\x43\xb9\x8f\x23\xe7\xa1\x95\x19\x22\x5b\xbb\x89\x43\x2d\x4b\x6c\xbb\x91\x7d\xaa\x54\x65\x72\xa2\x85\x24\x5b\x6f\x44\x38\xcd\xe2\x15\xae\x04\xbb\x0a\x80\xda\x10\x51\x0a\xa1\xe6\x11\x36\x16\x9c\x77\x43\x9f\x63\xae\xfb\xb2\xa3\x7d\x8f\xc9\x6b\x30\x4b\x98\x13\x54\xb2\xe4\x79\x85\x4f\xa4\x43\x72\xf4\x09\x49\x8d\x70\x09\x87\x99\x3c\x9e\xbb\x15\x93\xe4\xa3\xd8\x33\x8b\xe4\xa1\x5d\x3a\x3e\xc9\x71\x34\xd1\xa5\x0f\xc7\x7a\x85\x09\x8d\x72\xd5\xe7\x1a\xd7\x3c\x66\x48\x46\xc6\xc4\xd3\xe6\x5a\x40\xc8\xcb\x01\x85\xe9\xae\x56\x92\x01\xa7\x98\x82\xa2\x74\x2e\xc5\x5e\xd1\x3e\x6e\xf2\x94\x47\x14\x85\xed\x0c\xf0\x93\xb7\x75\xe9\x49\x14\x74\x2c\x49\x25\x3d\xa5\xe3\x4d\xbb\x95\xc2\xa3\xbb\x5c\x86\xc7\x3a\xdd\x70\x0d\xec\x23\xe0\x72\xab\xce\xed\x76\xfb\x01\x38\x5e\xda\xe8\x8d\x00\xb6\x6b\xe9\x09\xc0\x27\x07\x3b\x93\xd3\x8d\x1e\x35\x13\x82\x30\x52\x95\xb0\x58\x8e\x54\x6d\x39\xd1\x15\x76\x58\xca\x26\x42\x7e\xb2\x65\x49\x68\xe9\x8e\xf6\x91\xd6\x5d\x7a\x11\xab\xea\xc8\x97\x52\x57\xe2\x21\x04\xfb\x2a\x6a\x5a\xc2\x72\x26\xc6\xaf\x08\x6f\xb3\x80\x2f\x5b\xa0\x95\x2d\x62\x74\x17\x34\x09\xcb\x86\xb2\xeb\x58\xef\x0e\xaa\x58\x15\x45\x99\x07\x03\xa4\xe0\xfb\x0a\xd2\x04\xf3\x0a\xa0\x05\xab\x86\x90\xd7\x05\x1e\x72\x07\xd0\x75\x14\xf3\x3c\x93\x50\xb2\x2a\x0e\xd5\xd2\x20\xca\x8a\x97\x83\xda\x88\xd1\xf6\xe1\xd8\x86\x2b\x06\x87\x70\x39\x22\x38\x07\x6a\x07\xf0\x9b\x25\x2b\x83\x30\xe8\xf5\x94\x41\xf6\x11\xed\x4e\xc0\x16\xda\xa6\x1d\x38\x55\x3e\xcb\x91\x48\xb8\x22\x9f\x92\x92\x2e\x86\xda\xd7\xad\xaf\x02\x85\x5d\x01\x5b\x11\xd8\x5b\x90\xa1\x94\x8d\x64\xd6\xcf\x20\x69\x39\x60\x57\x74\x8d\x10\x81\xe2\xf3\x15\x3d\x43\x03\x1b\x04\x53\x9c\x49\x66\x1d\xcd\x41\x94\xe0\x3b\xd1\x7d\xf7\x01\xcb\xae\xc5\x58\xd2\xb6\x43\xb1\x9d\x2a\xf7\x45\x15\x90\x76\x76\x85\x4d\x9a\x78\x2a\xd0\x28\x58\x80\x84\x5a\xd2\xbd\x6d\x0c\x1e\x7e\x01\x98\xd8\xb1\x2f\x71\x1a\xdd\x88\x14\xa0\x90\xb1\x8e\xba\xe7\xb5\xd0\x9b\xf3\x01\x6e\xc5\xf5\x6e\x33\xb8\x14\x25\x21\x08\x7e\x60\xdc\x6b\xe0\x27\xea\x49\xf9\xe6\xc3\x8a\x2a\x0b\x87\xdf\x6a\xf5\x76\x8a\x51\xcf\x7c\xf0\xb6\xf1\xe2\xe7\x15\x63\xaa\x75\x4a\x91\x8e\x7d\x4f\x6c\x3a\x25\x77\xb4\xb0\xaa\x55\x49\x78\xd7\x0c\x94\x90\x17\x0e\xe8\x56\xab\x18\x48\x26\x53\x78\x65\x46\xaf\x57\x98\x8d\xe6\x12\x75\xea\xfb\xac\x93\x58\xdd\x4b\x73\x67\xf3\x78\xc9\x87\x1e\x9c\x4e\x98\x30\xd2\x4b\x68\xdc\xa0\x95\x47\x3c\xf0\x39\xcf\x4b\x9a\x70\xd9\xd7\x88\xbb\xd9\xb0\x31\xcb\x52\x4c\xcd\x67\x0f\x26\xf2\x13\xf2\x46\xb1\x29\x00\xca\xc9\x3a\xd1\x7c\x3f\xa6\x3c\x72\x38\xa1\xb9\x64\x33\x1f\x78\x85\xb8\xf1\x9a\x40\x72\x0c\x5b\xd7\xb8\x8c\x53\xfb\x1e\x99\x42\x87\x6d\x0c\x70\xb0\x9c\xf3\x50\x1b\x53\x0d\xa1\x95\xcb\x7c\x85\x08\x28\x4e\x63\xe6\x3e\x37\x7f\xc8\xb2\xa1\x78\x4e\x22\x82\x27\x86\xc6\x03\x75\xc2\x5b\x5f\x97\x1d\x98\x85\xc6\x78\x0c\xd1\xa8\x21\x6e\x5c\xd1\xb9\x00\x1f\xc4\x72\x24\x60\x0d\x70\x22\xfb\x60\x6a\xeb\x95\xe6\xd0\x0c\x2b\x90\x23\xc3\xdb\x7e\x02\x44\xb7\xa4\x35\xc5\xdd\x64\xb2\x5e\xf1\xd1\x81\x58\x0b\xdf\x68\x01\xe9\x80\x6b\xa8\x96\x9e\x82\x0c\x12\x87\xe2\x2e\x89\x5e\xcb\x09\x65\xc1\xe1\xf4\xce\xa6\x91\x69\xee\x95\x92\x9b\xc0\xe5\x56\xea\xd0\x6d\x06\x17\x65\x54\xa8\x07\xb4\x89\xa4\x46\xba\xc7\xc1\xa4\x4e\x87\x4b\xd6\xd8\x90\x1a\x3f\x37\x1d\xa4\xab\x92\x77\xe7\x8e\x92\x35\x87\xe6\x0a\xaf\x58\xe5\xf1\xb4\xb3\xac\xbd\x77\xb6\xae\x87\x70\x8e\x51\x17\x33\x5c\x78\x96\xb0\xa3\x01\xa7\x3b\xd2\x7a\x34\xc3\xf2\xb9\x4d\xe6\xd4\x25\x51\xab\x11\xf5\x13\xdb\xb5\x1d\x20\xf8\xd0\xe7\x2c\x91\x4e\x28\xaa\x33\x50\xa4\x8e\x84\xe8\x67\x81\x34\x43\xe5\xe2\x40\xfa\x38\x8c\x1e\x57\xe4\x53\x72\xa0\xd2\x6e\x8f\xe4\xd6\x23\x3a\x23\x0f\x14\x3d\xf3\x07\xe8\xad\x39\x08\x16\x4f\x36\x61\xb6\x16\xc6\x32\xd8\xc6\xfc\x5c\x20\x59\xae\x18\xa2\x96\x53\x19\xde\x79\x12\x04\x90\x9e\x0b\x1c\x04\xb6\x84\x4a\x8e\xb5\x52\xd5\x4f\xba\xd8\xc1\x93\x4f\x73\x74\xea\xcf\xc8\x97\x65\xbd\xc0\xd5\x49\x4d\x10\xc4\xf8\x34\x8d\x64\xeb\xda\x62\xc1\xac\x57\xab\xff\x1f\xda\xfe\x2c\x8a\x97\xa7\xaa\x0e\xc7\xe5\xe7\x88\x03\xa0\x44\x9c\x00\x25\x82\x10\x01\x35\x35\x8a\xa8\x28\x0a\x01\xe3\x3c\x1b\x11\xa9\xa9\xab\xba\xaa\xba\xba\xa6\xae\xa1\xd5\xa0\x12\x35\x42\x18\x34\xe2\x57\x41\x10\xa2\x88\x38\x04\xa2\x44\x41\x45\xff\xa8\x21\x31\x0e\x24\xa8\xe0\x84\x8a\x71\x16\x45\x0d\xce\x18\xfe\xeb\xeb\x5a\xb8\xee\xf2\x3e\xdc\x97\xdb\xef\xe7\xa9\x3e\x9f\xb5\x7b\x9f\x7d\xf6\xd9\xa7\x45\x87\xe1\xd4\xbb\x3d\xa6\x99\x00\xba\x31\xba\x61\x04\xa8\xe2\x52\xb9\xe2\x2d\x4c\xe8\x6e\xe3\x8b\xc7\x49\xf2\xbc\xb2\x0c\x6c\xec\xb4\x04\x54\x19\x5c\x75\x43\x92\xae\x3e\x38\x41\xfd\xba\x23\xdb\x20\x11\x30\x5f\xb1\x60\x7e\x02\x0c\xe3\x0a\x8a\x96\x13\xaf\xe6\x94\xc7\x02\xb4\x65\x95\x19\x88\xf6\x1c\x08\xa6\x66\xe8\x7e\x52\x87\x33\xe7\xb6\xbb\xa4\xcf\x9b\x4f\xd7\xdf\x4a\x4f\xbe\xdd\x3b\x18\x25\x42\x99\xf6\x20\xb8\x9a\x27\x5e\x38\x47\xdb\x49\x04\x28\x87\x3c\x70\x27\x11\xc6\xa3\xf1\x45\x29\xe4\x41\xa4\x13\xa0\x08\xf3\x25\xcc\x65\x25\x76\x19\x74\x97\xfe\xd8\xb0\xde\xfc\x48\x7e\x74\x20\x3a\x5a\xbc\x67\x2b\xdf\x54\x0a\xc5\x00\xcc\xfd\xe2\x75\xb5\xc4\xcc\x4b\x1c\xff\xb2\x9d\xa5\xcd\xc3\xb6\xb3\x58\xc2\xc2\x82\x33\x9c\xc7\xb6\x4c\x62\xb8\x56\x53\x0b\xb7\x0b\x65\xf7\x35\x98\xb8\x04\x20\x09\xa7\xeb\x15\x41\x2c\x94\x79\x5f\x37\x9a\x0e\x62\xe7\x52\xac\x5c\x29\xaa\xa8\x85\x8d\xab\xb5\x2f\x67\x4e\x4b\xd8\x4f\x3c\xc7\x38\x80\x23\x9b\xa9\x1b\xe2\x57\x4c\x9f\x03\x14\x45\x51\x90\x04\xae\x61\xdd\x0e\x21\xc1\x2e\x49\x51\x70\x0c\x7e\xb2\x9a\x26\x61\xab\xf4\xf3\x38\x53\xc0\x74\x64\x55\xd8\x79\x49\x26\x23\x9d\x0b\xac\x2b\x63\x6c\x9a\xb8\xbb\x29\x69\x5b\x22\x89\x6b\x72\x52\xaf\xb8\x66\x1f\x94\x16\x9b\xa7\x0e\xe9\x5a\x38\xde\xce\x4b\x4e\x18\x9c\xbe\xec\xc3\x22\x77\xc0\x22\xf9\xb2\x77\x4a\x7a\x0e\xd9\x9e\x23\x92\xd9\xce\xb9\x16\x29\x56\xc9\xf8\xa0\x1e\xd0\xc6\xe2\xa6\xce\x2b\xf6\x79\xd5\xd4\x46\xd3\xe1\x6c\x66\x79\xf3\xd2\x06\x32\x78\x0c\xc6\x4c\x2d\x06\x43\x5d\xda\xc6\x9d\xec\x76\xda\x65\x09\xb2\x75\xc7\xdc\xcd\xdb\xa3\xb7\x9a\x40\xdd\xee\x64\x23\xb3\xad\x07\x57\x59\x50\xd7\x17\x5e\xd8\x68\xc1\x92\xe3\xe4\x5d\xd0\xb2\x30\x2e\xbb\x6c\x0a\xd3\x8d\xc5\x1d\xaf\x8e\x6e\x7c\xc0\x2b\x56\x68\x96\x8c\xb7\xb1\x84\xba\x99\x0e\x0e\x14\x6b\x77\xdc\xc4\x15\x1f\x83\xf4\x74\x67\x2f\x52\xa0\x2c\xbb\x61\xbc\xa4\x04\x8e\x0d\xce\x32\xaf\x31\x95\x0c\xd0\xca\xb2\xb6\xe3\x68\x3e\x0a\x7a\x28\xe1\x20\x4c\xd9\x2e\x7d\x29\x56\xec\x16\x78\x8e\x7c\x3c\xc3\x7e\x90\xcc\xa8\xb2\xf0\x92\xc0\x8d\x26\xa4\x82\xe9\x94\x23\x72\xb8\xba\x7a\x1c\x42\xeb\x55\x8d\xbc\xa5\x3d\x9d\x07\x4c\x72\xb0\x89\x17\x33\x21\xab\x19\x4e\x0a\xd6\x2b\xbc\x11\xe8\x08\x1d\x61\x60\x15\x4e\xbd\x67\x38\x62\xf1\x5d\x1f\x1b\x2f\x6c\xcf\xe4\x68\x64\xa9\xf3\x68\x3a\x1c\x0b\xaf\xac\xa5\x58\xc5\x15\x41\x2c\x6c\xd7\x92\x72\x30\x98\x57\xd4\x43\xef\x7d\xb6\x46\x53\xa2\x94\xea\xaa\xc1\x79\xa4\xb5\xa9\x6d\x0d\xf3\xe4\xa4\x25\xb0\x38\x19\xd6\x2b\xa2\x71\xe2\x6a\x26\xdb\xc5\xea\xfa\x4a\x29\xda\x4b\x97\x91\xe5\xb2\xd0\x92\xd5\xb2\x42\x9c\x37\x57\x77\x22\x91\xd4\x88\x28\xb7\x80\x9e\xed\x15\x8a\x20\xf7\xc9\x25\x74\x6e\x1e\x0b\xd1\xe9\x42\xac\xb4\x7c\x13\x87\xd5\x48\x8a\xb6\x62\x66\x37\x5f\x8f\x58\x37\x16\xd0\x30\x69\x8b\xe1\xc4\x37\x81\xcb\xad\x66\xd6\xb7\x79\x5a\x84\x57\x35\x4f\xe8\xc2\x29\x6b\xad\x87\xa2\xc9\x61\x92\xf3\x66\x0e\xec\xab\xa6\x50\xf8\xd5\xac\x8c\x49\xc5\x08\xab\x99\x6e\xd8\x5e\x91\x1a\xcc\xb9\x56\xa7\xd1\x58\x4c\xc7\xcf\x33\xe9\x32\x98\x1c\xb0\xed\x41\x53\x22\x9c\xb3\xc9\x55\xae\x86\x52\x4d\x4f\x47\xd8\x26\xd7\xe0\x2e\x00\x17\xbe\x1f\x8c\x0a\x68\xf6\xd3\xd4\x81\x00\x81\x65\xd6\xe5\x3c\xb6\x59\x50\x04\x20\xf5\x48\xb1\x2d\x50\xc5\xe3\x1c\x78\x58\xc1\xe6\xe4\x57\x80\x0b\xc6\x31\x24\x4e\xab\x87\xc7\xc9\x1d\x10\xd6\xae\x73\xee\x54\xca\xd3\x02\x5d\x7a\x53\xb8\x1e\x8b\x52\xfa\xe4\xae\x18\xb9\xb3\xe5\xbc\xa2\x15\x38\xb8\xe3\x26\xf8\xc5\x84\x7c\xae\xd6\x47\x26\x23\xa0\xc1\x57\xcf\x3b\x39\xe3\xa1\x55\x27\xb1\xb8\x18\xd5\x0a\x30\x58\x39\x2a\x57\xec\xf3\x72\x72\xee\xeb\x36\x4c\x8a\x87\x0b\xb5\x87\x76\x1c\x7a\x4d\x7c\x70\x1c\xa4\xa4\x7b\xda\x8e\x6a\x94\xb1\x6a\x39\x47\xa2\x28\xc1\x0d\x5d\xb2\xe0\x55\x9a\x36\x62\x51\x9d\xef\x81\xa6\x69\xbb\x75\x1a\x72\x72\x88\x74\x1c\xd3\x32\x76\xcc\x7d\xb2\xa6\xa0\x0a\x16\x70\x0a\x86\xbf\x24\x5a\x90\x1f\x68\xc3\x2c\xc3\x23\x1d\x00\x2e\x2c\x55\x52\x2b\xb2\xa6\xd1\x38\xd5\xaa\x15\x88\x47\x27\x36\x6f\x2b\x00\xd1\x54\x86\xe0\x79\xe3\x4d\x90\xb7\x99\x8d\xce\x3b\x3e\xf8\x55\xdf\xfd\x76\x9f\xf5\x94\x6f\xfa\x80\xfb\xfc\x9b\xe7\xa2\x47\xec\x8f\xff\xe7\x7f\xfd\x37\x5f\xf7\x19\x77\x19\x3f\xf8\xbc\xef\xfe\x9c\x97\x3c\xfc\x2b\xfe\xc7\x3f\x31\x1b\x3d\xe0\x41\x1f\xf7\xf9\xbf\xfe\x55\x2f\xfb\xb4\xa7\x7c\xe8\xab\xff\xe4\x0b\x3e\xfe\xf3\x7f\xee\x67\x3e\xfd\xef\x1e\x76\x9f\xe5\x0d\x6c\x7b\xe9\x77\x7e\xc8\xbd\xde\xfd\xbf\x1d\x37\x94\xbe\xe6\xdb\xee\xff\xe7\xef\xfc\xd4\x07\x3d\xfc\xb5\xe0\x1e\xf4\xf1\xaf\xf8\xef\x1f\xd4\x7f\xfd\x49\x9f\xf0\xc8\xc7\xde\xff\x03\x9e\xf3\xae\xef\xf5\x81\x77\xfd\xe9\xef\x61\x37\x94\x3e\x78\xfb\x3a\xf2\x59\x5f\xf5\xfb\x9f\xfe\x80\x8f\x79\xc4\x8b\xdf\xd7\x3d\xf4\x59\xc7\xfe\xc0\xfb\xfd\xa1\xfe\xc0\xf7\xfe\x8e\x5f\xfc\x4c\x7b\x2f\x2b\x5e\x74\x43\xe9\xeb\xde\x7c\x3e\xf0\x1b\xbf\xfd\x2f\xbf\xfc\x11\xfc\x67\xe3\xfb\xbd\xc3\x0b\xde\xf0\xbf\x7f\xfe\xf5\x3f\xf8\xd5\x7f\xf8\xfa\x3f\x7d\xdd\x37\xbc\xd3\xc7\xff\xf5\x4b\xfe\xbf\xdf\xb9\xa1\xf4\xef\x3f\xf9\x4b\x7f\xf4\xfe\x3f\xf9\xa6\xbf\xf9\xb4\xf6\x51\x2f\x7b\xbb\x7b\xfe\xca\x0f\xbc\xe2\x13\x3f\xfd\x51\x0f\xfa\xbe\xed\xcf\x9f\xf2\xe4\x97\x84\x77\x5d\x7f\xfc\x46\xb7\xd3\xdf\xfc\xd0\x33\xee\x81\x3f\xe2\x81\xdf\xf1\xe2\x47\xfc\xff\x3e\x03\xfe\x81\x7a\xcb\xeb\x7f\xe7\x69\xea\xf7\xbf\xe6\x19\x0f\x7b\xc7\x2f\x7a\xdc\xff\xfd\xb3\xb7\xdc\xe5\x75\x37\x94\x6a\x20\xdf\x6c\xdf\xe9\x39\xf7\xf9\xc2\xd7\xff\x87\xbf\xf9\xe9\xfc\xce\xbf\xf6\xc6\x8f\xfc\xa6\xd7\xfd\xe2\x9b\x5f\xf1\xbb\x3f\x85\xdf\xfd\x61\xcf\xb8\x9f\xfe\xda\x1b\xf3\x92\x7e\xe6\xef\x3e\xe2\xed\xd9\x0f\xff\xed\xd7\x7d\xe3\xfa\xa1\x0f\x7d\xe3\x0b\x1e\xf2\xff\xbd\xfe\x7b\xc3\x63\xff\xf8\x2f\xde\xe9\x5b\x9e\xf4\x17\x3f\xf2\xed\x8f\xfa\xd2\xef\xfa\x47\xb3\xd1\xad\x5e\xf5\x76\xab\xea\xa6\x3a\xdf\x00\x5b\x85\x83\x6d\x07\xd1\x27\x97\xeb\xe9\x4f\x0c\x40\xb5\x80\x80\x8e\xce\x1c\x1d\x53\xa4\xa8\x11\x03\xc3\x63\x5e\x81\x6a\xe9\xd0\x07\xc5\xdd\x45\x4b\x67\xda\x81\x4d\x4b\xd7\xc6\x82\x00\x78\x3b\x0d\x65\x0e\xee\xc7\x6a\x40\x4c\x2a\xdb\x53\x24\x96\x81\xb8\xe0\xc4\x37\xef\xd5\x09\x58\x6d\x8e\xfc\xf0\x36\x52\xca\xa8\x1b\xfb\xee\x76\xca\xa9\x71\x3e\x10\x15\x74\xed\x22\x00\xd8\x2b\x61\x2e\x28\x06\xae\x18\xcd\x58\x28\x6a\x15\x87\x51\x01\x0c\x7f\x14\xbc\xaa\xd8\x26\x85\xad\xd4\xc5\x6e\xda\xe6\x25\xd6\x66\x36\x5b\xce\x1d\x4d\x30\x3c\x6e\xeb\x15\xbd\x69\xaa\x78\x2a\x85\xf4\x44\x46\x8d\xba\x96\x50\xac\xcb\x48\x41\xb3\x71\x4b\xb3\x6d\xcc\x89\x53\x2e\x4b\xaf\x47\x3f\x57\xe3\x03\xbe\x42\xdb\x67\x79\x2c\x1a\xb0\xcd\x2d\x71\x2d\x07\x47\xc6\x9e\x09\x11\x79\xba\x10\xfa\x6c\x0e\x90\x3c\x30\xc6\x27\x59\x9d\x46\xca\xef\x32\x56\x70\x05\xff\x48\xc6\xf5\xa0\x17\x87\x33\x21\x4c\x1e\x15\x51\x59\x2c\x57\x99\x19\x7e\xc2\xb4\xf5\x15\x1e\xa2\xd0\x8e\x96\x1d\x6c\x6b\x20\xab\xa8\x57\x0c\x0e\x45\xab\x9b\x0e\xe8\x38\x09\x6c\x86\x71\x7d\xee\x33\x86\xd5\xb2\xb1\xec\x49\x87\xe2\x97\x59\x73\x51\xb1\xf8\x06\x89\x31\x19\x75\x7e\xb3\x57\xfd\x56\x38\x7c\x9b\xc1\x85\xed\x2a\xf6\x60\xf0\x1a\x70\x51\x65\x5b\xed\x3a\x0f\x43\x21\x0b\x56\x2c\x9b\xc4\x78\x33\x79\x34\xca\x25\x65\x59\xe6\x2e\x1b\xb9\x44\x55\xdf\x9b\x0d\x87\xac\xf3\xe0\x32\x1e\x0a\x68\x51\xb1\x3f\xb7\x5a\x54\x5f\x3c\x6a\x98\xa8\x02\x4b\x03\x28\xf1\x7a\xf6\x8a\x03\x92\x57\x5c\x04\x64\xa6\x10\x3a\x1b\x74\x42\xee\xf8\x8c\x45\xbb\xb6\x16\xa3\xb5\x1a\x60\x82\xac\x82\xc4\xfb\xe6\xdd\x26\xb7\x0c\x8a\x8e\x7b\x31\xf9\x92\x04\x9b\xfd\xc4\x31\xf7\x9d\xf0\x64\x5a\x6a\xc1\xe7\x23\x3a\x86\x11\xb1\xd9\x06\x8e\xc6\x69\xeb\x99\x04\xd8\x4a\xa3\x72\x28\x96\x5b\xce\x57\xf4\xa6\x71\x9f\xba\x74\xcc\x24\x3d\xda\x21\x52\x9e\xd3\xe4\xbc\xff\x83\xaa\xef\x03\x11\x51\x9e\x6e\xb5\x47\x59\xe5\x98\xa6\xe6\xbd\x20\x7b\x89\x09\xcd\xf0\xcc\xc1\x38\xcf\x15\x9c\x0b\x0e\x14\x62\x1d\xd4\xe9\x94\xc4\x2b\x4a\xa5\xb5\xac\x08\xf4\x23\x13\xc9\xc2\x40\x59\xb9\x6b\x8e\xd4\x44\x03\xd2\x36\x57\x69\xb0\x90\x8b\x09\x0c\xda\x3d\xb6\xad\x74\x9b\xa3\x4f\x85\x3a\x63\xba\xd0\x43\xd3\x6d\x32\x87\xab\x5f\xab\xbb\xe4\xd3\x07\x0b\xb4\x9b\x25\x41\x86\xa0\xa8\xc0\xc6\x18\x20\x0a\x95\xc4\xf5\x8a\x06\xf4\x10\xc0\x45\xe4\x73\xc1\x2d\x8f\xe5\x68\x7b\x9d\xf9\x26\x70\xb9\x15\x73\xbb\xdd\xaa\xfa\xc9\x36\xbe\x81\xb5\x96\x26\x03\x55\x5b\x48\xeb\x9c\x18\xc4\x05\x84\x93\xfa\x29\x50\x42\xc8\x17\x1b\xbc\x13\x65\x40\xbc\x2f\xee\x0a\x25\xb9\x09\x9b\xf6\x8d\xad\xa3\x9f\x31\xf2\x55\x0e\xb4\x50\xd6\xd3\x80\x2b\x8f\xa7\x10\xeb\xba\x45\xcd\x1b\x42\x7b\x33\xd1\x50\x14\xdd\x25\x7b\xe0\x9c\xee\xba\x1f\x38\x4a\x51\x96\x50\xc4\x9e\x9d\xb2\xb0\xb6\x93\xca\x5e\xb6\xc5\x89\x7d\x9b\x1b\x75\xdc\xa2\xb8\xc3\xaa\x80\xeb\xe2\x8a\x00\x69\x12\xe1\x1e\xd8\x3c\x64\x3b\x2c\xc0\xe0\x60\x74\xdb\x45\x2b\x83\xad\xeb\x5a\x18\x53\xa5\xa0\x76\x18\xc0\x8f\x83\x33\x77\x2e\xe0\xbc\x02\x5c\x98\x3b\x48\x4f\x87\x33\x50\x6d\xd6\x63\x90\xfd\xde\x55\x61\xb9\x60\x3e\x46\x29\x11\x41\x19\xc2\x48\x5b\x70\x3c\x33\x08\xd7\x29\xae\xf0\x03\xf0\x35\x05\x5e\xfc\x94\x9b\xad\xc8\x14\x3a\x45\xef\xac\x75\x50\x14\x57\x89\xd2\x30\xf2\x1a\xa1\x44\xa7\x5f\xe9\x84\x3e\x56\x56\x2e\xb1\x3c\x6d\xd2\x1d\xe8\xdc\xda\x1a\x08\xe1\x4b\x29\xb3\x53\xa5\x9d\x6e\x55\x80\xce\xbd\x2a\xeb\xa9\x25\x15\x0e\x9e\x5d\x88\x4d\xb3\x58\xc5\x15\xec\xfe\x38\x45\xc2\x62\x16\xe2\x8f\x85\x1c\x2e\x62\xb5\x1a\x1c\x7c\x2e\xb5\x1f\x71\x27\x53\x70\x1c\xd3\x0a\x3d\x16\x7b\xd5\x5d\x38\x7b\xc3\xff\xe2\x6d\xe0\x72\xab\x5e\xef\x36\x83\x8b\x5f\x1d\x59\x08\x3b\x2a\x6b\xdb\x48\x66\xed\x10\xcb\xa8\x4d\x5b\x85\x71\x59\x50\x61\x3c\x26\x98\xb2\xb4\x76\x5b\x07\xa5\x38\xa7\x2b\x1e\xce\xe2\x70\xf4\x6e\x96\x71\x6a\xa6\x02\x44\xc8\x50\x4e\xd8\x0a\x17\xe8\xd6\x34\x6b\xdd\x28\x59\x88\x9f\xac\xaf\x12\xb4\x93\x79\x3c\x2f\x51\x4f\x2d\xda\xa8\xa1\x40\xd2\x01\xfd\x7e\x82\x9c\xeb\x82\xcd\x21\x0f\xe9\x0c\x12\xb2\x31\x71\xe8\x0c\x22\x75\xb9\xf4\x43\x72\xdf\xe4\x15\xf7\x02\x34\x5b\xe2\x79\x60\x07\x6d\x8b\x6d\xd4\xbd\xf4\x59\xe7\xc1\xca\x9c\x46\x48\x7a\xd8\x9d\x67\x91\x57\x72\x30\x2a\x57\x0a\xa5\x5a\xf8\x15\xa6\x5c\x34\xd1\x48\x8b\xc7\x49\x08\x85\x98\xc9\xd6\xa7\x19\x55\xaf\x94\x22\x52\x9b\x10\xc8\xdb\xcd\xef\x38\x32\x93\x42\xf5\xfe\x34\xf5\x02\x25\x99\x05\xb9\xd6\x1c\xf7\xc1\xad\xb4\xd3\x44\xca\x20\xd4\x7e\x30\x00\x3d\xae\xac\x97\xec\x0f\x08\x21\xc8\x26\x5a\xe3\x87\xf3\xa7\xab\x57\xcc\x7c\x3c\x1e\x83\x4c\x6c\xd2\xce\x42\xc7\x14\xf9\x36\xbc\xad\xeb\xd6\xd6\xe5\x10\x29\x34\x04\x25\x6c\x48\x06\x83\xc7\x72\xc0\xb0\x6c\xe7\x15\xcc\x25\x18\xea\x3d\xb6\x26\x14\x3d\xc5\x26\x4b\xcd\x2b\x2d\x9d\xb4\x80\xc1\x1a\x57\x5e\x64\xed\x5b\x8e\xb2\x6c\x61\xa7\x7a\xd8\xe8\xe6\xcd\x37\x1a\x6f\xa5\x0e\xdd\x66\x70\xb1\xe7\x09\x77\x78\xa0\xde\xf2\xca\x57\x75\x00\xda\x1a\xc4\x7b\xaf\xd1\x40\x09\xaa\x68\xe1\x58\xe5\x81\xc3\x9d\x14\xc2\xdb\x73\xf1\x97\x38\xfe\x41\xbb\xf3\x2b\xe9\x36\xdd\xa6\xd9\x04\x98\x5a\x49\xbf\xd4\x0d\x66\xcc\x77\xda\xf2\xd9\x78\x3a\xd4\xc1\x08\x6e\x7a\xaa\xec\x56\xca\xaf\x70\xfc\x9f\x7c\x0b\x52\x74\xd4\xb6\xb5\x1e\x43\xc7\x90\x62\xdf\x05\x9f\x0c\xcd\x68\xed\x86\x64\x15\x6c\xc9\x05\x9c\x68\x7a\x36\x1a\xe7\xf9\x0a\xcb\xf8\x91\x4d\xdd\x46\xd3\x21\xc2\xcc\x43\xc2\x18\x0f\xd7\x51\x5c\x77\x68\x38\x49\xb5\x22\x69\x0d\x6a\x64\xab\xc7\xc0\x7e\xa2\x6e\xc4\x15\xee\xbd\xdc\xf3\x9e\xb6\xec\xeb\x6a\x64\xa7\xdb\x01\x2d\x3f\x79\xd7\x34\xeb\x2e\x12\x91\x39\x53\x8a\x9c\xd9\xe6\xb4\xc8\x37\xc8\x6c\xba\x64\x6d\x35\xf1\x7e\xea\xb8\x57\xd4\xeb\x56\x78\x8a\xa7\xe1\x51\x9d\xdb\x18\x11\x08\xcd\x97\x00\xa5\xad\x1b\x09\x6c\x55\xa2\x13\xb0\xc5\x94\xae\x80\xb8\x98\x37\xba\x6d\x9b\xe5\xa7\x93\x3b\x36\x71\x11\xd1\x79\xb7\x9e\x32\x12\x9e\x9a\xd2\xbb\x0e\x1d\x1e\x71\x19\x69\xa5\x65\x57\x68\x73\x57\xa8\x60\x13\xe4\x19\x8b\x45\xfe\xf4\x5a\xaf\xfc\x88\x91\xf4\x48\x52\xc2\x99\xee\xf6\x20\x24\x95\x3d\x57\x76\x36\x34\x8e\x9e\xbd\xb4\x71\xbd\x59\x73\xb9\x95\x9e\x7c\x9b\x47\x76\x12\x2d\xa7\x4a\x5d\x6a\x7e\x1a\xb4\x35\x21\x77\xa1\x79\xb1\x7d\x83\xf2\x5c\x48\xde\x36\xb0\xd2\x62\x82\x3c\x78\xaf\x4a\xc0\xb9\x5c\x12\x9b\x16\x48\x05\xa2\x48\x02\x5a\x54\x61\xeb\xeb\x21\x3c\xb1\x42\xb9\x68\xcc\x86\x92\x6f\x01\x94\xd3\x1c\x40\xec\x49\x0b\x09\xa0\x08\xe2\x8a\x94\x02\xdf\x4d\xef\xed\xb0\x87\xcb\x00\x05\xe3\x6c\x58\x90\x01\xe1\x14\x87\x11\x7b\x14\xcd\x2d\xd6\xe0\x65\xee\xbb\x5a\x7a\x4b\x1c\xd8\x74\x85\x7c\x98\x0f\x2a\xec\x72\xac\x31\x37\x99\x70\x10\xa3\xa5\x6a\x46\x73\x54\x82\xa2\xb5\x03\x65\xc8\xc5\x1e\x36\x40\xbd\xec\x96\x14\xa1\x2f\x71\xef\x89\xae\x97\x15\xe6\xb3\x75\x6b\xc8\xd8\x78\x38\x85\x5c\x96\x4d\x44\xb5\x36\x33\x36\x35\xf4\x11\xb7\x88\x98\x9b\x59\xcf\xc8\x4f\x75\x45\xe0\x06\x67\x48\xae\x82\xe5\x2d\x88\x41\xbc\x95\x2d\xea\x92\x62\xd1\xd1\x6e\xc1\x92\xbc\x93\x2e\xe0\x0c\x9b\xe4\x88\xcf\x7d\xdb\x8d\x5e\xae\x58\x33\xe3\xc6\x82\x8c\xcf\x93\xb8\x63\x20\x8b\x98\x47\x6b\x0a\x1d\x1f\x7b\x5c\x45\x18\xe1\x4e\x62\xa9\x8e\x05\x8b\x32\xc0\xc6\x09\xea\x59\x97\x2b\xfc\x00\x7a\xed\xd4\x43\xcf\x10\x80\x6c\x0b\x3b\x76\x5a\x76\xc7\xf3\xba\xb5\x08\x4a\xdf\x8f\xce\x71\xa3\x0c\x55\x96\x59\x54\xa5\xe4\x2a\xf7\x9b\xc0\xe5\x56\x13\xa8\xdb\xcc\x5c\xd4\x1c\x98\xaf\x91\x02\xa4\xa5\xc2\x8a\xe6\x2a\x24\xe3\x5e\xbb\x99\x8e\xbd\x35\x11\xfd\x5e\xd9\xa6\xc0\x5c\xf2\xe2\x57\xb8\x8d\x2b\xbe\xd6\x0c\x4a\x83\x5a\x03\x2e\x73\xc3\xe1\x42\x8c\x15\xb4\x48\x91\xe9\xae\x56\x0d\xd0\x34\xa7\x3f\x31\x72\xde\xf3\x98\xd7\xde\xec\xb9\x8a\x2b\xac\x2d\x44\xd9\x8d\x47\x7e\xe2\x3b\x09\xaf\xa1\x8e\xe4\x53\xb0\x65\xe6\xb8\xcb\xc1\x9d\xde\x4e\xed\x33\xe3\x44\xcd\xd1\x82\x5d\x1c\x28\xe0\x8a\x16\x71\x2d\x05\x35\x25\x4f\x65\x30\x17\x87\x70\x01\x90\xad\x20\x6e\x4f\xa6\x9a\xee\x4d\x68\x5b\x59\x70\xc1\xac\x33\x8a\x65\x9f\xda\xc9\x2b\x94\x1f\x44\x4e\xe2\x27\x30\xae\x40\x7e\x54\x1e\xb9\x65\x44\xf1\x15\x9c\x12\x33\xdf\x31\x3c\x6a\x9e\x92\x59\xb1\x8a\x23\xa4\xc4\x76\x98\xae\x70\xb8\x56\x87\xfe\x41\xf3\x18\x3a\x52\x69\x86\x77\x98\x11\xa8\x97\x8c\xd7\x05\x00\xea\x0f\x8a\x21\x34\x15\x01\xaa\x3c\x9f\xe6\x3c\xa3\xbb\x22\x0d\xb1\x8c\x85\x81\x06\x1d\x47\xd3\xc5\xb0\x1d\x69\xb4\xe5\x18\xcd\x99\x3d\x67\x26\x2c\xe6\x53\x0f\xb6\xa2\xb1\xc0\xa3\xa6\x05\x8b\x78\x05\xbb\x67\xf8\x20\x07\xdd\x4c\x41\x99\xef\xc7\x88\x23\x12\x7f\xda\xbe\x07\xb9\xb8\xbd\xe0\xa5\x1e\x28\x9f\xa1\x45\x38\x3c\x6f\x1d\xc3\x28\xed\x7a\x13\xb8\xdc\x6a\x66\x7d\x9b\xc1\x25\x89\xb2\xd7\xbd\x2c\x7a\xdd\x8b\xa7\x6b\x1e\x19\x2d\x0b\x37\xc4\x8c\x35\xac\xd6\x7b\x54\x3d\xa5\x13\xa2\x55\x0a\xb7\xc2\x55\xb9\x4b\x12\x00\x95\x54\x4e\x59\xc2\x56\x3d\xe9\xd9\x49\x58\x0f\x8f\xe0\xa2\x7c\x8e\x55\x69\x39\x68\x8c\x16\x2d\x98\x51\xea\x60\xc9\x64\x68\xed\xaf\xf8\x4e\x66\xed\xfa\xc1\xb6\x2d\x1f\xa8\x33\xe0\x04\xe5\xd6\x12\x67\x32\x8f\x89\x1a\xd5\xe2\x91\x35\xa3\x9b\x1a\x67\x3c\x76\x69\x4d\x99\xe5\x92\xb6\xa8\xf0\x70\x06\x72\x04\x84\xfd\xb6\xf4\x85\xf3\x26\xa1\x5b\x89\x4f\x64\x6c\xd1\xf3\x58\x0b\x95\xa8\x19\xb3\xc3\x63\x09\x8e\xf4\x4b\xd4\x0e\x3d\x9a\x05\x83\xa4\x69\x47\x20\xa6\xdb\xd2\xf7\x1a\x4f\x25\x90\x3d\x64\x61\x5d\x1c\x78\x3b\x6c\xe7\xb2\x9c\x9b\x76\xaa\xa5\xe3\x92\xc0\x57\x3d\x97\x54\x33\x24\x95\xdd\xd9\x28\x97\x9d\x2e\x88\xc3\xc3\xed\x4b\xf4\x50\x04\x72\x88\x39\x36\x19\x90\x6a\x4b\x8b\xa5\x39\x63\xd3\x15\xe6\x80\x52\xce\xdd\xdb\x75\xd3\x07\x61\x25\x72\xd6\xc5\x32\xed\xf0\x9e\x80\x50\xed\x38\xeb\xba\x2d\xe3\x60\x66\x3a\x02\xec\x31\x47\x23\xf3\x8a\x7c\xa5\xcd\xab\xa8\x20\x54\xb5\x5b\x05\xdc\x5e\x59\x04\x3d\xf7\xb8\x82\xa8\xe9\x48\x84\x02\x39\x97\xb6\xd0\x85\x58\xc6\x32\xee\xab\xbe\x81\x4b\xbe\xcd\x6c\xf4\x6e\xe7\x3f\xfb\xb6\x67\x3c\xf9\x53\x3f\xfb\xeb\xff\xf8\x97\x1f\xfe\xc0\xaf\xfe\x9f\x5f\xf8\xa6\x4f\x7b\xbf\xe7\x3e\xe0\x65\xaf\x04\xf4\xa1\xaf\x7b\xd2\xbb\xff\xbe\x7f\xc8\x3f\x31\x1b\x7d\xcb\xe7\xbb\x9f\xfa\x03\xfc\xf9\xe9\x77\x3f\xf8\xee\x4f\xfa\x9d\xa7\xfc\xfc\xe3\xfc\x67\xbc\xf9\xc9\xdf\xf6\xf6\xf5\x5b\x7e\xf4\x09\xdb\x37\xfc\xee\x4f\x8b\x1b\xcf\xa8\xb5\xef\xfe\xf0\x5f\x79\xc2\xb3\xee\xfd\x1f\xde\xfa\xe8\xe7\xbe\xe6\xfe\x2f\xfd\x93\x6f\xfe\xce\xbb\xd1\xf7\xf8\x90\xff\xf2\xaa\xa7\x3d\x60\xfb\x8e\xd7\xf4\xf7\xf9\x84\xa7\xdd\x50\xfa\xc6\xbb\x7c\x69\xbf\xff\x17\x7e\xeb\xbb\xad\x7f\xf0\x9d\xef\xf0\xd4\xcf\xbd\xdb\x87\x7e\xe1\x57\xdf\xe3\xf8\xd8\x0f\x7f\xce\xfd\x1e\xff\xc1\x8f\xf8\xe6\x77\xb9\xe3\xdb\x3f\xfc\x86\xd2\x37\xfc\xaf\xff\xfc\x63\x9f\xf8\xa6\xe7\xfd\xc2\xe3\xff\xf2\xcd\xcf\x7c\xaf\x57\x7e\xce\x13\xe1\x0b\xc2\xdd\xef\xf2\xc5\x7f\xf6\x43\x86\xbc\xcb\xc7\xbe\xef\x47\x7f\xf2\x1f\xde\x50\xfa\xcc\xe3\xef\xdd\x57\x7d\xe6\xe3\xde\xf3\xaf\x5f\xf8\xc6\x78\xaf\xbb\x3e\xe1\x5b\x1e\x72\xc7\x57\xb2\xff\xbe\xfe\xf9\x97\xfe\xec\x2f\x7d\xc9\x43\x9e\xf2\x14\x78\xaf\x1b\x4a\xef\x78\xf4\xb3\x1f\xf3\x54\xf3\xd6\xdf\x7b\xdf\xcf\x78\xd6\x5b\xde\xed\xcb\xdf\xf0\xbc\x9f\xff\xbc\x77\x79\xfe\x8b\xca\xdf\xbf\xea\xa7\x3e\xff\x9e\x3f\xf4\x23\x2f\xf9\xf2\x3f\xbf\xa1\xf4\xf7\xdf\xf4\xcd\x7f\xfa\x55\x4f\xfe\x85\x67\x7f\xf8\x4f\x7c\x7e\x7a\xf4\xab\x3e\xf5\xdd\x1f\xf4\xc9\x5f\xfa\x53\x5f\xb6\xbd\xe6\x75\x77\xbc\xfc\xf3\x5e\xf8\xfd\xf7\xfb\xbd\x4f\xb8\xa1\xf4\x07\xbf\xf6\x8b\x7f\xe3\x0f\xff\xdb\xc3\x5e\x17\x3f\xed\x87\xef\xf7\xb0\x7b\xbc\xee\x79\x1f\xf6\xd9\x1f\xfb\xef\x7e\xeb\x07\x3e\xf4\x17\xe3\xbf\x7b\xcb\x5f\xfd\xc2\x47\xfe\xc9\x4b\xbf\xfc\x6d\x3f\xc2\xad\x5e\xf5\x9f\xfc\x08\xef\xfe\x5b\xcf\xf8\x4f\x77\x99\x3f\xf9\x5e\xff\xe5\xad\xcf\x27\x4f\x7f\xcf\x77\xfc\xed\xff\xfd\x9c\x5f\xb9\xe3\xcf\x1e\xf8\xa2\xc7\x7c\xe9\x97\xfc\xd1\x6b\xbf\xe9\x63\x3f\xee\xcf\x6e\x28\x7d\xf6\xbb\xbe\xd7\x67\xff\xef\x07\x3f\xe0\x5b\xf3\x0b\xff\xc7\xeb\x7f\xfc\xef\xdf\xf3\xd1\xbf\xf7\xe3\xe0\x8e\xdf\xfb\x8a\xbb\x3e\xf0\xbb\x5f\xf2\x1e\xbf\xfe\xba\x87\xbd\xd3\x1b\x6e\x28\x7d\xc1\xf3\x3e\xe5\x9f\xbf\xbc\x7c\xee\x0f\xfc\xf2\x93\x5f\xfa\xc4\xdf\x79\xc4\x53\x1f\xf2\xf8\xff\xf6\xc3\xcf\x7f\x20\x78\xc8\x5b\x7e\x9f\x9c\x9f\x9e\xdf\xef\x1e\x77\xdc\x50\xfa\xaa\xfd\xae\xdf\xfe\x16\xf8\x86\x1f\x79\xdf\xcf\x7c\xf5\x07\x7d\xd9\x93\x5f\xf0\xe6\xfd\x17\xef\x76\xb7\x6f\xfa\x7f\x7f\xfe\xdb\x73\x7f\xf5\xbd\xd5\xdf\x3e\xff\xa1\x37\x94\x3e\xfc\xed\xbe\xf5\xdf\x7e\xc9\xb3\xfe\xcd\x67\xbf\xe2\xc5\x3f\xfc\xdf\x5f\xf9\xb2\x8f\x7e\xc0\xc7\x3e\xfb\x9f\x7d\xde\x67\xff\xc6\x27\x7e\xf4\x07\x3e\xf2\xaf\x5f\xfd\x99\xf0\x85\x4f\xbf\xa1\xf4\x83\x7f\xf7\x09\x8f\x79\xe2\x83\xd3\xe3\xef\xfe\xa4\xbf\xfd\x4f\xea\xf9\x6f\x26\x5f\xf1\xf2\x1f\xff\xdb\x3f\x2b\x8f\xed\x6f\xf8\xa0\x8f\x7d\xbb\x57\xbf\xea\x5d\x6e\x34\xb2\xdd\xfb\xb1\x8f\xff\xd5\x5f\xdc\xff\xba\x3f\xef\x73\xe5\x9f\xbe\xf6\x8d\xdf\xf5\x63\xcf\xfc\xc1\x6f\xf8\xe5\x7b\xdd\xfb\x6e\xfa\xa1\xbf\xfc\x9a\x77\xfb\xc8\x7f\xf9\xc7\xfb\x0d\xa5\x1f\xf2\xd4\x87\xbc\xff\xdb\x7d\xbc\xfa\xa1\xf6\x9a\x5f\x2a\x9f\xf5\xc2\x97\x3e\xed\xe5\x9f\xf8\xa0\xaf\xfe\xdd\xaf\xff\x99\x27\x3f\xf8\x87\x7f\xe0\x89\xaf\x7e\xfe\x27\xdc\xed\x1f\x1d\x5f\xb7\x7a\xd5\xdb\x2c\x10\x10\x9b\x68\xde\xc5\x4e\xa8\xdb\xf7\x05\xf1\x52\xb6\xb9\xcb\xad\x78\xbd\x6b\x0c\xd2\x52\x99\xa4\x4a\x77\x58\x22\x64\xaa\xcc\x13\x5d\x11\x20\xc8\x8f\x24\x73\x2c\x85\x16\xcd\x7b\x3f\x77\xa2\xcf\x19\xd6\x53\x49\xd7\x2c\xa2\x82\xc9\x94\x4e\xa2\x0f\x62\x12\x8a\xce\xae\x56\x96\x2b\x56\x1d\x99\x5a\xa1\xd6\x08\xc3\x44\x96\x5d\xee\x80\x6e\xc9\x20\xec\x2b\x71\x1c\x2c\xdd\xa7\xb8\xed\x8b\xef\x41\x0c\x19\x8d\x1c\x44\x98\x59\xae\x38\x97\xb0\x8b\xd2\x50\x38\xc1\xba\x34\xee\x78\xb5\x2d\x33\x34\x81\xe0\x66\xd3\x4a\xa2\x3e\x89\x73\xe8\x3c\xd4\x3a\xac\x5e\xd0\xb1\xf5\x7e\x85\x40\xc0\x71\x6d\x88\xaf\x78\x16\x04\xac\xae\x08\xd9\x19\x85\x1e\x39\x9c\x42\x29\x9b\x95\xe3\xfe\x24\x0d\x41\x81\xd6\x36\x26\x5f\x9b\x91\x57\xf0\x56\x1d\x76\x4c\x63\x62\x45\xe1\xb4\xec\x16\x58\xce\x42\xa9\xb0\xcb\x05\xc1\xc3\x1d\x70\xa8\xb2\x75\xa1\x96\x11\x71\xd8\x35\xa9\xf8\x12\x0d\x74\x34\x77\x12\xb4\x84\xca\x34\xb4\xab\x01\x85\x66\xe3\xd7\xbc\x22\x24\x6b\xc0\x19\xa5\xc5\x17\x68\xc8\xe2\x30\x8d\x62\xe3\xe3\xa8\x57\x5c\x84\x01\x63\x86\x65\x70\xa7\x76\x90\x17\xaf\x13\x89\x26\x29\x01\x8e\x35\xd8\x55\x91\xc5\x8d\xac\xe7\xba\xe0\xe4\xbb\xdb\x8f\x63\x29\x3b\xbf\x39\x5e\xea\x56\x38\x7c\x9b\xc1\x25\xeb\xa3\x68\xc0\x40\x3d\xc0\x70\xb5\xc1\xe2\x8e\x7e\xe2\xd6\xf7\x34\x2d\x91\xb6\x36\xa4\xad\xda\xd0\x62\x45\x00\xc2\xee\x2d\x5d\x71\xf9\x83\xf5\xcd\x98\x59\x48\x6d\x73\xed\x34\x29\xb2\x1c\x34\x6d\x7a\xe8\xc9\x1a\x3d\x14\xca\x92\xd8\x8a\x6d\x36\x3c\x44\xae\x55\x6c\x01\x5e\xc1\x5b\x77\xe8\xdd\x3e\x4d\xd4\x85\x15\x51\x0d\x73\x02\xcf\x3e\xbc\x31\x92\x9f\x49\xba\x23\x52\x7d\xee\x60\x2f\x3d\x8a\x94\x93\x42\x70\xbd\xe2\x22\x4c\x86\xb8\xea\xa4\x44\x83\x45\x11\x61\x69\xe5\xd0\x6b\x14\xf8\x9d\x1d\x22\x18\x8e\x57\x2a\xe5\x5a\x39\x8d\x29\x1c\x0a\xb2\xdd\xdb\x2b\x66\x85\x0d\xc1\xde\xb5\x0d\x5c\xba\x31\x34\x34\x1d\xe7\x3e\x52\xd6\x2e\xa9\x3d\xd0\x63\xf1\x5b\x80\xde\xeb\x68\x45\x3b\x89\xc1\x18\xd7\x2b\x64\x0a\xbc\x90\x40\xf6\x9a\x69\x6e\xab\x5a\x4d\x66\x8b\x8b\xde\xec\x23\x47\x06\xe0\x29\xcc\xbe\xa1\x46\x78\xd8\xf4\xa9\x06\x5d\x99\xd5\x57\x38\x01\xf9\x3e\x81\x66\xae\xf6\xec\x80\xc8\x63\x53\x7c\x46\x25\x6a\xda\xfc\x5a\xc1\xa6\xf4\xae\x4d\x89\xd6\xce\x43\xc8\x40\x72\x36\x44\xe6\x4b\x84\xa3\xa5\x35\x75\xda\x90\x1b\xcd\x3a\x72\x1b\x70\x1a\x2b\xa1\x2c\x70\x39\xea\x9a\x4a\x5d\x98\x81\x34\x13\x26\xd6\xe6\x16\x6f\xfb\x2a\x6e\x02\x97\x5b\x31\xb7\xdb\x6d\xca\x68\x76\x29\xb9\x75\xe4\x48\x93\x69\xec\xc1\x21\xe2\x7a\x28\x88\x76\xb0\x1e\xab\xcb\x0a\x02\x61\x2a\x85\xaa\x79\xa4\x5c\xb7\xe5\x8a\xb9\xa9\xdc\x95\x0f\xdc\x2f\x2b\xec\xae\xcc\x03\x16\xb5\x51\x35\xe7\xc4\x58\x8e\xd9\xd0\x74\x52\x0f\x72\x80\x28\xc9\x92\x68\xf4\x3e\xfa\x2b\x5a\x30\x43\xc2\x12\x4d\xf6\xc7\x89\x6c\x48\xa0\x8a\xb3\x38\x76\x72\x16\x6c\xa5\xfb\x1a\x6b\xa4\x1d\x82\x45\xcd\x85\x4c\xed\x32\x72\xf1\x0a\xf5\x91\xcb\x84\x9a\x37\xe8\xb0\x23\x62\xeb\x37\xc6\x59\xf3\x24\x25\xe9\xd4\x68\xd1\x55\xe2\x03\x21\xdb\x44\x0d\xf6\x0d\x83\xc5\x0a\x7b\x49\xde\xc8\x51\xab\xaa\x9b\xd7\x30\x51\xaf\x7a\x33\x6d\xee\x50\x6a\x73\x1e\xa9\xd4\x95\x51\x24\x09\xde\x20\x97\xd0\xac\x23\x6f\xdb\x08\x9b\xb8\x02\xe2\xc6\x14\x33\xed\x4b\x21\xb1\x12\x0a\x2d\xce\xa3\xfb\xdd\xa0\x01\xfa\x99\x79\x0d\xc5\xa3\x8d\x0a\xdd\x37\xe9\xa5\x9f\x91\x23\x7a\xc5\x19\x57\x56\xc2\xe2\x01\x23\x6b\xd4\x07\x5c\xdc\x29\x89\x06\x86\x0a\x49\x56\xb9\x79\x8d\xa3\xe3\xdb\x9e\x5b\x6c\x7a\x1c\x3a\xcb\xb8\xc6\x0e\xae\x98\xea\x17\xca\x6c\x4a\x8b\x0e\x66\x46\x8d\xc2\x16\x17\xdf\x3a\x94\x0a\xd2\x0a\xa7\x9a\x34\x2f\x79\x81\x6c\x2c\x00\xb2\xcd\x39\x30\xa8\xbd\x39\x01\xe6\x56\xbd\xde\x6d\x66\x2e\x1e\x41\x29\x32\x77\x5e\xf5\x9d\xb3\xb6\x86\x83\xad\x6a\x39\xc6\xce\xe2\x61\xbd\xdc\xf1\x3c\xd9\xb6\xd4\x0d\xaf\x72\x1d\x7c\xb4\x3a\xaf\x78\xb8\x58\x8a\x13\x79\x27\x78\x81\xe4\x68\x12\x69\x4d\x9d\xa7\x64\x8b\xc2\x5a\xae\x19\x6d\x72\x0f\xbd\x51\x72\x5a\x21\x46\xc9\x4e\x95\x2b\x24\xec\xc9\x84\x91\x44\xee\x93\x13\x39\xbc\x23\xf1\x58\x02\xc5\x74\x58\xea\xca\x44\xbc\xda\x83\x37\xbb\x69\x17\x70\xd9\x3d\xd4\xbb\x5e\xaf\xf8\x42\x45\x3e\x0e\xbe\x9b\xc9\x35\xb4\xbe\x54\x27\x1a\x3c\xcd\xb6\x42\x9a\x22\x86\x14\x5b\x0c\x00\x67\xeb\xb1\x22\x8d\x13\xc3\xfa\x6c\xfe\x8a\x1c\xe4\x52\xf1\xe2\xe9\xee\x88\xde\x17\x23\x23\x64\xae\x61\x65\xd9\x98\x47\x94\x71\x09\x71\x63\xa5\xd2\x25\xe3\xcd\x2b\x09\x98\xe1\x01\x5c\xb2\x47\xbd\x8b\x51\x53\x3b\x79\xa9\x6b\xb5\x87\x58\x0f\x5c\x40\xe4\xda\x94\x36\x87\xa8\xca\xba\x25\x88\x64\xc6\xce\x28\x38\x5d\xed\x0a\x5c\xb1\xc3\x40\x77\x58\x56\x3f\xc5\x58\x5a\x59\x4e\xb4\x99\x26\xbb\xc8\x64\x1b\x27\xe2\x1d\x78\x65\x71\xd7\x18\x78\xc4\x4f\x2c\xe2\x4a\x52\xbb\x64\x1d\x67\xc5\x00\x91\xdd\x74\x92\xaa\xd1\x46\xe2\x66\x37\x91\xb9\x3e\x0b\xdc\x8d\x03\x90\xd5\xf3\x04\x63\x1c\x0c\x39\x96\x25\x37\xab\xcd\x37\x7b\xd5\x6f\xa5\x0e\xdd\x66\x70\x09\xeb\x01\xa8\xec\x76\x52\x63\x96\x79\xf2\x23\x3b\xa1\xd6\x35\x9e\x0b\xa5\x89\x7b\xc3\x8e\x88\x92\x9b\x44\x2c\x38\xe8\x19\xce\x28\xaf\x18\x7b\xa3\x66\xb9\x32\xd6\x9f\x69\x1d\xeb\x32\x3d\xda\xcb\x44\x4c\xcf\x16\x69\xda\x17\xed\x10\x2f\xbd\x9c\x3c\xab\x60\x3b\xaa\x3c\xcc\x7a\xc5\xa6\xea\x62\xc8\x39\x01\x82\xa4\x51\xb4\x21\xcb\x70\x5a\xd0\x36\xd6\xb6\x49\xdd\xd5\xd9\xa9\x3b\x75\x5d\x4d\x59\x21\x60\xd3\x6a\xcd\xc8\x25\x6b\x17\x4d\x8d\x23\xe5\xba\x67\x20\x0c\x2e\x5d\xab\xa8\xe0\x54\x7a\x46\x0e\xa9\xa2\x22\x4d\x54\xcd\xac\x8e\x55\xa3\x51\xda\x5a\x64\xe9\x8a\x31\x4f\xd5\x68\x53\xeb\xa1\x31\xaf\x23\x21\xc5\xd7\x7d\x19\x83\x87\x13\xe8\xa5\xae\x0b\x99\x27\x3e\x22\x2b\x46\xf8\x40\x0c\x2f\x81\xf3\x4b\x94\x9f\xad\xe3\xc6\x73\x90\x62\xa1\xc6\x64\xee\x8e\x85\x60\x11\x59\x59\xd6\x09\x62\x16\xa9\x54\xa1\x35\xc7\xc5\xd2\xcd\xb8\x73\x27\x21\x5d\xb1\x49\xe1\xd4\x09\x86\x5c\x2b\x84\x79\x05\x07\x70\x66\xb3\x71\x1c\x9b\xe0\xfb\x3e\x0f\xa1\x37\xb7\x8f\x35\x3a\x7e\xee\x7b\x8e\x6b\x19\x91\x5d\xe2\x3b\x53\x83\xed\x9e\x54\x1c\xd9\x8a\x29\x8b\x55\x2f\xb5\x9a\x1d\x5a\x32\x40\x9c\xa5\x6c\x8e\x55\x80\xbb\x71\x7d\xee\x26\x28\x44\x84\xbf\x19\x5c\x6e\xa5\x27\xdf\x66\x70\x39\xd0\x16\xc4\xd1\x06\xd9\xf7\x34\xb6\xba\xe2\xca\x54\xb4\xba\x17\xe8\x90\xae\x8c\xf3\xc5\x65\x8e\x80\xf7\x39\xa4\x16\x16\x79\x5e\xb2\x80\x2e\x08\xa1\x0b\xf0\x1b\x24\x5a\x9b\x83\xcc\xe5\xcc\x07\xc7\xce\x95\xb3\xb3\x90\x29\x56\xd3\xe1\xb9\x28\x70\x1c\x29\x4b\x2e\xcf\x93\x5f\x61\xa1\x2c\xcb\x31\x75\x52\x26\xc8\xd3\x2e\x2b\x25\x0e\x30\xae\x76\xe4\x78\x11\x92\x1c\xb4\xaf\x3a\x9a\x85\xc3\x38\xaa\x10\x60\x0b\x5c\xf3\x0b\x38\x03\x37\xb8\x63\xc6\xe2\xc9\x97\xb8\x89\xd0\x2b\x58\x4a\x84\x35\x73\x0e\x06\x4f\xb0\xa3\xa9\x64\x9a\xbd\x63\x04\x4e\x4e\xcc\x5c\x32\xbc\xc0\x19\xcd\x16\x06\xd5\xd2\x75\xc4\x3a\x5a\x58\xa1\xc0\x44\x9e\xc4\xe0\x1a\xbd\x87\x2d\xb7\x55\xf8\xd8\x87\x71\xdb\x89\xf7\xa1\x4e\xa5\xe8\x79\x45\x26\xcf\xa6\x81\xd3\xc7\xc0\x7e\xe7\x52\xed\x1d\x11\x5c\xec\x96\xf6\x4a\xe0\x36\xb1\xc4\x8d\x19\xa5\x5a\x53\x7e\x25\x9a\x6e\x23\xad\x24\x5d\x02\xf7\x8b\xa6\xbb\xa6\x73\x2e\xe0\x4c\x5a\xcd\x8d\x62\xd1\x57\xa5\xb9\x57\x3b\xa0\x15\x8c\x92\x73\x44\x6b\xaf\x42\xee\x70\x31\x75\xbb\x82\xb9\xb0\xb0\x75\xb5\x37\x6f\x65\x4d\x2b\xa8\x02\xf5\xfd\x54\x33\x09\x4d\x3b\xdd\xa3\xdd\x7d\x8e\x6e\xed\x68\x3d\xf4\x4e\xbb\xa5\x48\x37\x28\x6f\x02\x97\x5b\x4d\xa0\x6e\x33\xb8\xac\x2b\x4c\x9d\x9e\x4e\xaf\xa7\xf3\xca\x11\xbc\x4b\x9e\x72\xcc\xd8\x91\x2d\x4d\x51\x72\x00\xbb\xcd\x58\x98\xc8\xac\x99\x68\x69\xfc\x0a\xab\x1c\x66\x65\x39\xa9\xeb\x35\x5a\xa0\x30\xb6\xc6\x55\xb0\xd2\xb2\xd2\x6d\x2e\xd1\xf9\xfd\xec\x26\x75\x66\x80\x54\x2d\xdd\xd9\xc8\xb5\x2b\x82\x9d\xf8\xe1\xbd\x33\xdc\x78\xc7\x48\x2a\x32\x26\x58\x0f\xb8\x74\x5e\x8a\x0a\xb3\xda\x8d\xd7\x6a\xc9\x3c\x57\x63\x84\x84\x51\xf2\x83\x9d\x97\x4c\x05\xf0\xec\xbd\xc2\xa8\x91\x70\xb5\x90\x03\xc0\xc9\x48\x3e\x8f\x99\x01\xd9\x41\x57\x47\xe3\x9b\x3f\x86\xed\x03\xa7\xb1\x6f\x6b\x59\xaf\x08\x09\x0d\x10\x01\x06\x97\x3a\xf6\x41\xf1\x99\xe9\x2a\x17\xb0\xb3\x59\x8a\x76\x42\xef\x43\x86\x54\xe6\x91\x97\x11\x02\x9f\x98\x57\x48\x2e\x51\x3b\x00\x1e\x08\x6f\x3e\x2e\xd5\x22\xcd\x94\xed\x16\xf9\x42\xa2\x14\xcb\x0a\xea\xa6\x43\xc9\xcb\xec\x93\x2c\x73\xab\xad\x4a\x68\xdd\x25\x4b\x41\x7b\x45\xcb\x4a\x64\x11\xf8\x2c\x92\xb5\xa5\xf1\x5e\x0b\x26\x47\x45\xa9\xe8\xbc\x01\xa8\xda\x0c\xb3\x3b\x9c\xeb\x79\x1c\x6c\xd8\xf3\x82\xa6\x9d\x39\xde\x45\x01\x44\xa0\x19\xe7\xde\x06\xef\xa6\x34\x70\x1a\xbf\xf5\x44\x92\x32\xc7\x89\x4b\x84\xb6\xd5\x45\xee\xc8\xe1\x53\x1d\xe9\x66\xc7\xd7\xad\x66\xd6\xb7\x59\xd0\xd5\x2e\x9b\x0d\x41\x82\x4f\xb9\x1c\xdb\x5e\xcd\x99\x55\x63\x4c\x41\x78\x10\x17\xfd\x8e\xc9\x28\x1b\xc2\xd0\x2d\xbe\xf1\xd8\xe5\x72\x49\xd4\x05\x6f\x5c\x51\xbd\x34\xe8\xc8\x38\xa4\x5f\x42\x75\x92\xa1\xb1\x38\x0d\x00\x99\xbc\x92\x95\x63\x33\x02\xe5\xb1\xf8\xaa\xce\xb3\xdb\x2b\xb6\xec\xd6\x0a\xec\x34\x0b\x5c\x7a\xe9\xc1\x59\x14\x30\xad\x29\x9a\x82\x66\x05\xeb\x8e\x7b\x42\x0b\xdc\x28\x8c\xb0\xe8\xb9\x99\xa1\x67\xba\xc2\x5a\x7b\x82\xac\x38\x20\x2b\x09\xca\xd7\x0c\x39\x36\xcb\x98\xdc\x3a\x54\x63\x40\x50\x31\x30\xe2\xd8\x34\x00\xe8\x34\x7b\x16\x29\x4b\x70\x45\x18\x24\xe1\x4e\x3b\x6a\x13\x6c\xae\x27\x19\x89\x16\x36\x51\x53\xb6\xae\x46\xa5\x81\xa1\xb5\x17\x64\xf3\x19\xd7\x14\xaa\xe5\x52\x23\x7e\x05\xc4\xc9\xb8\x53\x00\x8d\x39\x54\xd2\x7c\xe0\xcd\x4a\x55\x37\x13\x66\x54\x6e\x9c\x9c\x73\x60\x8a\xe1\xb9\x9e\x15\xdf\xd9\xc7\x1e\xee\x84\x57\x80\x0b\x85\xb9\x7a\x97\x83\x33\x43\x41\xc0\x00\xef\xe7\x44\xd0\x99\xd5\x4b\xb2\xb5\xcd\xc2\x38\xf8\x41\x78\x00\x07\xf5\x06\xec\xfc\xb4\x57\x24\x36\x70\x8c\x43\x22\xbb\x6c\x92\xd0\x3c\xd3\x18\x64\xe9\x28\xdb\x05\xc1\xd3\x73\x1d\xcd\x46\x8f\x48\x31\x17\xcb\x31\xd7\x8e\x9a\x97\x37\x5c\xaa\x7e\x9b\xd9\xe8\x56\xbe\xac\x7f\x62\x36\xfa\x93\x6f\x7a\xc3\x6f\xbe\xfc\xa3\xde\x70\xaf\x6f\xbd\xef\x7b\x39\xfa\xac\xff\xf7\x8d\xef\xff\x31\x5f\xf1\x55\xbf\xfe\xd6\xf3\x1d\xde\xf8\x88\x3f\xf8\x93\x07\xbc\xef\xf2\x2f\x6f\x28\xfd\xe9\xbb\xbc\xc3\x73\xbf\xe6\xff\xbd\xec\x7d\xff\xe5\x53\xdf\xf8\xb8\x77\x7c\xc6\xfd\xfe\xf2\x8b\xd3\xf7\x3d\xe5\x83\xdf\xdc\x9e\xf3\x2f\xfe\x90\x3d\xe2\x7b\xff\xfa\x4f\xef\x7d\x43\xe9\xa3\x1e\xf7\xa6\xdf\xfc\xe3\x17\xd8\x3f\x00\x4f\xff\xaf\xbf\xfa\x31\x8f\xfa\xb1\xc7\x3f\xea\x8d\x7f\xfc\x86\xfb\xff\xf6\x7b\xf8\x9f\xf8\xdc\x8f\xfa\xbd\xbf\xfa\x8b\xef\x52\x37\x94\xbe\xf2\x83\x5e\xf0\x77\x4f\x7c\xd8\x4b\x9e\xfc\xc8\xef\x09\xdf\x44\xc7\xf7\x7e\xfe\x77\x7c\xd9\x43\xbf\xe8\xc3\xf8\x5b\xff\xeb\x33\x9f\xfd\xe4\xef\xff\x84\xf4\xbc\x27\xde\x50\xfa\x92\xaf\x1d\x9f\xf0\xe5\x7f\xfc\xaf\x7e\xf4\x49\x2f\xfa\xf9\x87\x7e\xf7\x27\x7d\x9f\xfc\xd1\x2f\xf8\x2f\xf7\x7d\xd1\x0b\xde\xf4\x9c\xf7\x7f\x69\xf8\xb6\x6f\xf8\xec\x67\x3f\xe1\x86\xd2\x5f\x12\x0f\xbf\xeb\x1f\xfd\xc5\x43\x3f\xf0\xe9\xf7\x7e\x4f\x7e\x4f\x64\xc6\x7d\x96\x7f\xf3\xac\x97\xbe\x78\xbc\xd3\x83\xc6\xa7\xbc\xe2\x2f\x1f\xf7\x92\xbb\xdc\x50\xfa\xed\x3f\xfc\x17\xef\x7f\xd7\x67\xbe\xcf\x8b\xbe\xe5\x6f\xfe\xd7\x27\x7f\xd1\xbb\x3f\x4d\x7e\xe4\x7b\x7e\xd2\x63\xef\xfa\xf2\xef\xfa\xd5\x47\xfa\xed\x71\xf7\x79\xe4\xf8\xa5\x1b\x9d\x59\x8f\xf3\xbf\xfd\xf5\x9f\xfc\xf0\xdf\xf9\x9e\xef\x7b\xb0\x7f\xf9\xbd\x1f\xf2\x05\xe9\x47\xc1\x63\xc4\x7b\x7f\xc4\x57\xdd\xf5\xbe\x3f\xfb\xf4\xb7\x62\xf8\x65\xff\x68\x36\xba\xd5\xab\xde\xee\xde\x34\xee\xd4\x20\x8f\x52\x9d\xb8\xf5\x44\x54\x4f\xa3\x23\x7d\x20\x6d\x4f\xba\xe3\x79\xb8\x2d\xed\xcb\x8c\xe5\x94\x0b\xb6\x40\xe6\x4b\xc4\x9e\x54\x5b\x3e\xdb\x66\xfd\xae\x0c\x36\xd4\xb7\x46\x16\xeb\x68\x45\xd2\x07\x4f\x92\xb5\xe7\x10\xdd\x9d\xab\x87\x65\x87\xab\xc6\xf8\x92\xd3\x11\x41\x77\xe1\x43\x14\x44\xeb\xea\x22\x80\x1b\x83\xda\x21\xbb\x01\xc6\xcc\x94\x45\x21\x65\x9c\x22\xc1\xca\x1c\xa4\x4a\xe3\x0c\x97\x7c\x67\x9c\x90\xe0\xa4\xd3\x2e\x31\x64\x03\xc6\x81\x80\xe6\x7c\x75\x85\xcb\xd6\xe8\x4c\x6e\xa4\xba\x17\xe2\xea\x60\x0c\x65\x64\xbd\x2a\x57\xf4\xa6\x32\x1e\x46\xcc\xed\x54\xe5\x5c\x74\x05\x46\x9e\xed\xd0\x08\x6d\x58\xe7\x50\x3c\x8e\x67\x2b\x13\xa9\x1e\x5b\x3a\x1c\x48\x73\xc7\xec\x8a\x34\x1c\x24\x6b\x93\x69\x51\x79\xc0\xc3\x9e\x47\x12\x11\xea\x73\xf3\xe4\x28\x6b\xb6\xd4\x9f\xf3\x84\xd0\x88\x7d\x28\xe4\x1a\xa1\x4d\xcd\x79\xc5\xff\x62\xca\x36\x96\xba\x0a\xcf\xc4\x9e\x38\xa2\xc8\x7b\x34\x22\x3f\xc5\xe2\x39\x92\x67\xb5\x2d\x6d\xdd\xc7\x3b\xa9\xa3\xe4\x19\x91\xe9\xae\xf8\xe6\xb2\x66\xcf\x50\xd1\x3f\xdc\xc2\x46\x3e\x76\x5c\xcc\xb1\xcf\xd5\xb3\x4d\xb3\x81\x56\xb9\x24\x08\xc6\x51\x41\xc5\x0e\xe6\xcd\x6c\x3b\x77\x37\xd1\xc7\x5b\xe1\xf0\xed\xce\xae\xc3\x5e\x38\xb2\x42\x6b\x03\x1c\x29\xec\x95\x77\x25\x1a\x77\x47\xf3\x39\x46\x88\xb0\xaa\x34\xca\x4e\x76\xc3\x4b\x04\x4e\x36\x76\x45\xbc\xd4\x0a\x90\x28\xd0\xd8\x8c\x31\x01\x59\x55\x06\xe0\x5e\xbb\x3d\x19\x2d\xdb\x72\x48\x58\x3b\x8d\x53\x70\x48\xea\x31\xed\x0e\x98\x2b\x57\x5c\xf5\x2e\x20\x12\x36\xc9\x3c\xd5\x40\x48\x59\xea\xb9\xbc\x93\x2e\xaf\x69\x06\x85\x30\x5f\x12\x38\xd7\x8d\x31\xdc\xa1\x36\x60\xb2\x69\xca\x15\x66\x23\xe4\x32\x87\xa6\x12\x3a\xbd\xe2\x42\x63\xde\x81\x72\xd0\x3b\x29\xc9\xce\xdb\x44\x1d\xe5\x1e\x4c\x1a\xa0\xab\x56\x92\xd3\xc7\x79\x85\x87\x70\xae\x63\xf3\x6b\x83\x34\xaa\xb0\xf6\x25\xe4\x76\x40\x85\x9a\x08\x86\x21\xe2\x88\xd6\x74\x95\xf2\x2c\x0a\x95\xe5\x38\x81\x2e\x97\x50\x26\xd6\x33\x6a\x86\x27\x43\xf6\x04\x04\xb7\x82\xf3\x25\xee\x79\x07\x50\x05\x0c\xc3\xa8\xd4\xc3\x76\x1c\x9d\x89\xad\xf3\xad\x5b\xb0\x5f\xe2\x56\x29\xe0\x94\x60\x6b\x33\x67\x16\x3d\x5f\xe4\xca\xfb\xc9\x4e\x28\x60\x77\x54\xd1\x63\xf1\xe7\xca\x2b\x0b\x93\x97\xad\x30\x96\x71\xb9\xc2\xe1\xca\x8a\xb1\x2b\x25\x8e\xb2\x45\xac\x4b\xab\xbd\xe8\x00\x00\xf6\x54\xc4\x33\xa5\xd2\x71\x76\xc6\x6e\x07\x77\x56\x67\x0e\x4e\x73\x44\x00\x6f\x02\x97\x5b\x31\xb7\xdb\xcc\x5c\xc0\x2e\xd7\x89\x6d\xf4\xf9\x84\xb5\x35\x8a\x1a\x10\x10\xaf\x5b\xd1\x05\x34\x5c\x79\xd1\x19\xdb\xb0\xf9\xe8\x07\xc7\x93\xeb\xed\x92\xcb\x1f\x6b\x14\x71\x9c\x72\xc7\x06\x4a\x02\x7d\x52\xfe\x98\x3c\xa3\xb3\xcb\xc2\x4a\xc8\x93\xe0\x08\xd8\x76\x38\x30\x29\x24\x30\x91\xe6\xae\x10\xbe\x66\x5a\x8f\x1d\x2e\x54\x77\x07\x01\xd1\x07\xda\x58\xde\xa9\x15\xf2\x38\xab\xc8\x66\x2c\x60\x3f\x3b\x3d\x5d\x23\x69\x87\x2b\x59\x4e\x77\xc5\xf8\x12\x23\x73\x0e\xa8\x7b\x05\xd4\xcb\x95\x6e\xc4\x24\xc4\x3a\xdb\x30\xa7\x6e\x1b\x74\x97\x69\x03\x63\xf5\xdb\x1a\xf6\x14\x93\x91\xe8\x8a\xc0\x2f\x7e\xa4\xd6\xed\xe9\x60\x35\x4d\x0e\x7f\x8a\xaa\x97\xa2\x6d\x35\xb3\x62\xd3\x28\xa4\x40\x9c\x9b\x30\xb2\x4f\x80\xcd\xc4\x39\xe9\x4b\x0e\x15\x90\x86\xd4\x56\xf2\x0a\x0e\x82\x53\x0c\xd0\xb7\x3d\xf7\x64\x38\xe7\x43\x2f\x50\xe9\x71\xe6\x22\x4c\x88\x7b\x9a\x01\x2d\x53\x48\x7b\x85\xb6\x5f\x7b\x68\x70\xd1\x20\xad\x2b\xf0\x4c\x2d\x1c\x48\x48\xe7\xb9\x2b\xcc\xf2\x01\x67\xa1\xd4\x0f\x20\x79\x90\x68\xa4\x91\x81\xa4\x97\xdc\x2b\x82\xcb\x59\x96\x2c\x50\x8c\x0c\x20\xbc\x2d\x5e\xef\x75\x4e\x36\x9b\x08\xb4\xba\x84\x0b\x86\x96\x1d\x73\x96\xb3\xba\x40\xc1\x0e\xf3\x76\x13\xb8\xdc\xaa\xd7\xbb\xcd\xcc\x25\x2c\xc7\x66\x76\x47\x0f\x5e\xc0\x6c\x4a\xc6\x93\x0d\x46\x00\x08\xe0\x1c\x79\x9f\x19\x5a\xd7\x1d\x34\x2c\x05\xb6\x1c\x4b\x3b\xac\xbf\x82\xf2\xb9\x1d\xa1\x36\xe0\x71\x98\xb8\x0b\x6b\x7d\x75\xa9\x0a\x85\x29\x9a\x66\x62\x89\xa1\x11\xda\x59\x5f\x22\xad\x54\x05\x64\x93\xb2\x57\x80\x4b\x38\x81\x8a\xa1\xee\x33\x5b\x6e\x85\xe9\x20\xd7\x4e\xf7\xdc\xb0\x9b\x0c\x88\x9d\xf0\xbe\x8d\x65\x34\x2e\x47\x74\xe0\x00\x41\x5e\x92\xe2\xcd\x87\x41\x51\x2f\xd2\xc5\x5d\xc1\x52\xfb\x0e\x91\x75\x89\x4f\x11\x9d\x95\x1c\xb1\x4c\xed\xa6\xb4\x0d\x47\xea\x55\xc9\x62\x0c\xb8\x62\xce\x11\x58\x01\x06\x12\x0b\xe2\xbe\x2e\x6e\xa6\x75\xee\xcb\xae\xda\x10\x76\x67\x6d\x1b\x5e\xc2\xcd\x82\x83\x3b\xb4\xc2\x8c\xd1\x59\x4c\xba\x44\xdb\x9f\x30\x1e\xa0\xef\x8e\x4f\xb0\xee\x5e\x6c\x63\x12\x8f\x53\xc3\x6a\x61\x81\x7a\xbb\x2a\x8b\x63\x6d\xc3\x26\x18\x7c\x16\xf5\x74\x57\x1c\x0d\xdd\x1c\x8b\xa6\xf8\x84\xe8\x66\x73\xf0\xa6\x0b\xd6\x50\xe1\x45\xc6\xb5\x9a\x73\xae\xe7\x2a\x76\x60\x10\x47\x5a\x8d\xb0\x6f\xb1\xba\x4b\xbc\xa5\x26\xeb\x45\xdb\x85\x2c\x64\xdd\x8b\x4d\x4b\xb1\x7b\xdd\xc2\xc1\xd1\x66\xc7\x50\x6c\x09\x39\xce\x50\x3b\x50\x3e\xb9\x6d\xf2\x29\x6e\x4e\x80\xb9\x95\x3a\x74\x9b\x99\xcb\x74\x45\x8b\xc9\x44\xf5\xa5\xb5\xe5\x88\xfd\x74\x16\xaa\xb5\x8c\x01\x82\xed\xa6\x37\xa5\x2b\xd8\x5b\xc3\xa2\x0c\xcd\x4a\x36\x97\xf8\xcb\x6b\xd1\x89\x91\x72\x06\x8e\xab\x5c\x2d\xe8\x63\xb1\xb1\xc1\x41\x3a\xd6\x5d\x35\xc8\x4b\x53\x34\xb7\x73\x2d\x49\x85\x45\x24\x78\xc9\x1a\xfc\xb9\x92\x90\x1c\x9f\x6c\x0b\x1e\x00\xbd\x54\x28\x43\xe0\x45\x59\x24\xfa\xb9\x4a\x9c\x26\x71\xd5\xb4\xbd\xae\x96\x15\x16\xb1\xe3\x57\x1c\xbd\x02\x7e\x10\x8c\xb6\xbe\x1f\x4d\xb2\x05\x8e\xec\x2c\xde\x01\xe1\xac\xd9\xa3\x87\xd6\xc3\x76\xd2\xde\xd3\x1a\x51\x3b\x5d\x77\xa5\xc9\x2b\x5a\xc4\xb5\x05\x06\xe1\xb9\x29\x97\xf2\xb1\xa7\x64\xd7\x3d\xe1\x34\xed\x4e\xcc\x66\x50\xac\x0d\x70\x75\x16\x6a\x0e\x37\x3a\x25\x95\x7a\x70\xc5\xca\x5d\x74\x4d\x27\xe3\x36\x99\x40\xd8\x60\x4b\xc7\x0e\xb8\x07\x12\x1d\x94\x43\x81\x13\x8e\x40\xa4\x12\x34\x30\x60\x3b\xb9\x93\xe6\xe0\x57\xa4\x09\xf2\x24\xfd\x22\xec\xe9\xe6\x28\x8c\xa3\xb1\x54\xee\xf5\x2e\x2a\x3d\x18\xe5\x60\x78\xa4\xb8\xc1\x87\x26\x29\x54\x72\x1e\x71\xdb\xf2\x25\x70\xdf\xd9\x9c\xc2\x4d\x15\xa8\x14\x41\x2e\x56\x68\xc3\xe3\xd9\x64\xd0\x7e\x06\x98\x06\x04\x69\x97\xc3\x47\xbf\xe0\x52\x4b\xd5\xe2\x66\xcd\xe5\x56\x7a\xf2\x6d\x66\x2e\x05\xd9\x4c\xf4\x96\xbb\xb6\xcd\x10\x76\xee\xb9\x2c\xbc\xc9\x09\xe2\x99\x33\x71\xab\xb7\x15\x2a\x69\x01\x39\x6a\x1d\x8c\x11\x72\x85\x1d\x96\x17\xa3\x97\x2e\x8e\x65\x59\xe2\x96\xa1\x45\x66\x60\x8a\x1b\xb5\x4b\x11\xe2\x98\xb6\xa9\x08\x0e\x6f\xa4\xd6\x63\x87\x74\x3d\xe0\xc2\xae\xb0\x49\x1f\x48\xd5\x8a\xb5\xd2\xa2\x63\x95\x8b\x2c\x3c\x10\xd9\x98\x5d\xe3\xec\x5d\xdb\xc9\xd5\x02\x40\x45\xa0\xb8\xdd\x0e\xa1\xd0\x79\x49\x0c\xe3\x71\xcc\xbd\x51\xbc\x7a\x6d\x58\xdc\x57\x9b\x7c\x64\x9b\xe8\x85\xd0\xa0\x92\xf5\x29\xcd\x8e\xbb\x06\x2d\x4c\x55\xd3\xf0\x68\x29\x57\xa8\x1d\xeb\x86\x37\x46\x17\x2f\x53\x3a\x02\x6a\x1d\xeb\x3a\xb1\x33\x59\xa5\x9d\xf4\x24\x18\x8c\xae\x05\x94\x79\xa7\x9e\x85\xb8\x15\x7d\x05\x97\x64\x5e\xa4\xee\x3d\x53\xd6\xec\x5e\xf7\x70\x86\xb9\xf8\xac\x53\xda\x8f\xd6\x91\xb2\xa7\x8e\x1c\x7b\xee\xe7\x84\xf9\x44\x52\x68\x05\xae\xd8\xcd\xc9\x5a\x01\x8b\x61\x0d\x30\x13\xbe\x13\x7d\x24\x7e\x8c\x75\x1c\x41\x45\xe8\xad\x00\xdb\x22\xc4\x54\x1a\x50\xc3\x4b\xaa\xbb\x52\xfc\x0a\x59\x79\xdf\x0a\x6b\xb5\xb1\x43\x07\xb5\x2e\xa7\xc8\xb8\x9a\x2e\xbc\x3b\x1b\xed\x4e\x43\x2c\xf8\xb6\x79\x37\x7d\x9d\xdc\xcf\x65\x16\x25\x6e\x3e\xf1\x7d\xab\x09\xd4\x6d\x66\x2e\x46\x65\x49\x7a\x3b\xeb\x31\x3a\xa5\x91\x4f\x57\x99\x09\xcb\x09\xf4\x2a\x9b\x5e\x13\x18\xf6\x44\x60\x2b\x93\x37\x92\xc8\xd2\xcd\xbc\x42\xc4\xa4\x83\x42\x0d\x6c\x90\x4d\x2f\xe5\xcc\x8c\x0d\x5f\x7b\x1d\xbe\x51\xb5\xf4\x06\x93\x71\xc7\x1e\x6a\x48\xc6\xfa\xa5\x07\x27\x17\x71\x45\xf6\xca\x58\x50\x45\xdb\x51\xc0\xca\xfa\xe9\x14\x3b\x79\x08\x9b\x98\x5b\xe1\x8c\xa4\x6d\x47\x4b\xdd\xd6\x3d\xeb\xb5\xb6\x38\x5b\xdd\xb4\xce\x97\x6c\x4c\x9e\xbc\x6e\xa1\x9e\xf8\x70\xb1\x1d\xe9\xb4\x54\x8d\x0c\xa8\xb6\x67\xaf\x7e\xd4\x54\x9d\xb5\xa7\x1d\x32\x86\x0a\x90\xdc\x8f\x70\x85\xe5\x89\x6f\x82\x13\xbe\xac\x23\x37\x3b\xb4\xe7\xa3\xcb\x84\xb1\xf3\x2c\xba\x9a\x2a\xf0\x1d\x76\xee\x00\x19\xda\x9a\x00\x88\x83\x47\xb8\x84\x3f\xf1\x56\xb0\x54\xba\xe0\x33\x05\xc1\x93\x63\x73\x24\x2b\x28\x47\x8e\x48\x7e\x74\xe6\x4d\xc8\xe1\xa0\x28\xd1\xc3\x27\x72\xec\x27\xbf\xe6\x0a\xaf\x01\x41\x0d\xb0\xf7\xc4\xf1\x86\x14\xb0\x88\x9c\xad\xab\xec\x2d\x73\x07\x18\x7b\xf6\xd2\x01\x3d\xea\x96\x6d\x83\x2c\x9c\xfc\x8a\x03\xf4\x43\x78\x72\xb4\x53\xc9\x29\xdc\xa1\x2b\x53\x7d\x3a\x1b\x81\xd7\xdb\xec\x4a\x10\x2b\xc9\xd9\x97\x8c\xb9\x02\x16\x2e\xaa\x02\x54\xc6\x4d\xe0\x72\xab\x99\xf5\x6d\x06\x97\x18\x7b\x52\x7c\xab\x07\x2d\xbb\xc1\x07\x87\xab\x0e\x5e\x39\x93\x83\xd7\xc0\x0c\xb6\xa5\xac\x89\x53\xad\x32\xc8\x09\x50\x0b\xbb\x62\xc1\x8b\x23\xe2\x57\x2b\x47\x26\x1b\x29\xbb\x92\x41\xa5\x0e\x14\x1e\xfe\xa0\x60\x5a\x85\x32\x54\xb2\x16\x07\x08\xca\xba\xae\x2a\x76\x52\xaf\xa0\xbf\xa6\xdb\xd2\x18\x67\x4b\xc3\xdb\x9e\x32\x0a\x4b\xfb\x87\x40\xe9\x18\x72\x52\xfb\x80\xe7\x99\xf6\xcc\x2b\x35\xec\x54\x9c\xec\x71\x77\x57\xac\x56\xf9\x05\x62\x31\x50\x82\xce\x0b\xc9\xd7\xb3\x69\x40\xf3\xa6\xb5\x0b\x29\xb9\x9c\x97\x52\x47\xeb\x2c\x66\x13\xf7\x2c\x62\xd8\xb2\xb8\xc4\x5b\xba\x10\x71\x32\x0d\xc9\x01\xf4\x59\x57\x7a\x1e\xd5\x63\x92\x58\xa9\x9c\x53\xc9\xd7\x95\xb0\xb9\x03\xb0\x1e\x55\x47\x79\x5a\x71\xc9\xc6\x24\xb7\x72\x07\x33\xef\x9e\x0d\x1a\x79\x85\x60\x81\x90\xae\x83\x2b\x5f\x8e\xb1\xe6\x96\x0a\x4f\x3e\x61\xe9\x68\x6a\x50\xd0\xd5\x4e\x76\xc5\x3e\xca\x12\x96\x85\xc7\x7e\xac\x09\x1c\x7b\x3e\xbc\x4b\x71\xad\x6b\x52\xc7\x38\x56\xcf\xec\x96\xd6\x89\x12\xdb\xa4\x38\x22\x80\xc5\xa4\x92\xaf\x68\x11\xcb\x01\xc6\xe9\x57\x06\x67\x5a\x30\x32\xe1\x08\x6a\xc7\x9d\x45\x0e\x97\x11\xfb\xc6\xb8\x15\xe9\x60\x75\x80\xba\xcd\x7e\x56\x0b\x4a\xba\xc9\x6c\x74\xab\x64\xa7\x7f\x62\x36\x7a\xd0\x6b\x1e\xfa\x5e\x6f\xff\x8b\x7f\xf4\xe9\xff\xfe\x17\x7f\xed\x1d\x5e\xf8\xaf\x5f\xfb\x11\xcf\x7a\xe7\x5f\xfd\x92\xe7\xa6\xff\xfb\x7d\x77\xdc\xeb\x91\x1f\xf2\xda\x07\xff\xeb\xdf\xbc\xa1\xf4\x3e\xcf\x78\xc5\x83\xef\xf9\xe7\xaf\xfa\xc0\x0f\x98\x6f\xff\x53\x0f\xf9\x59\x7b\x9f\xfa\x15\xcb\x57\x3e\xea\x7d\xbe\xe7\x9d\x1f\xff\xc7\x7f\xf3\xc8\x07\x7d\xc8\x6f\xff\xb3\x1b\x4a\x3f\xf1\xf3\xda\x27\xbe\xf5\x53\xbf\xf3\x27\x3e\xf7\x6e\xaf\xfc\xbb\xf2\xde\xaf\xff\x24\xf4\xc3\x8f\x7e\xd4\xef\xdc\xed\x19\xf7\xab\x6f\x7e\xed\xcf\xdc\xfd\xbd\xbf\xec\x4b\x6f\x28\xfd\xf9\x3f\xbd\xc7\xf7\xf4\xef\x79\xe2\x63\xe8\x73\x7f\xe4\x49\x6f\x78\xfe\xa7\x3c\xfc\xa9\x8f\x7e\xf9\x23\x3f\xe6\xed\xfe\xdd\x33\xdf\xf1\xeb\xbf\xef\x49\xdf\xf5\xd3\xdf\xf0\x0b\x37\x94\x0e\xf1\x7b\x9f\x72\xaf\x17\x7f\xd8\xdf\xdf\xf1\x4e\xcf\xfe\x86\xf2\xad\xcf\x5d\x9f\xf0\x14\xfb\xbf\xee\x78\xfa\xfa\xcb\xff\xe2\xd7\xde\xf4\x91\x9f\x7b\xb7\x1f\x79\xfe\x0d\xa5\x1f\xfb\x7f\xbe\xe0\x9f\xd3\x57\x84\xfb\x3d\xfd\xd5\xbf\xf7\x0e\x7f\xf4\xd5\x1f\xf7\x81\x2f\xfb\xd4\xf2\xc2\xaf\xfd\xda\xfb\xff\xe7\xbb\x6f\x1f\x7e\x8f\x7b\xff\xd1\x63\xde\xfe\x86\xd2\x2f\xfb\xe2\xd7\xe8\xed\xdb\x35\xfb\xbb\xbb\xfd\xe4\x1f\xbe\xe8\x9b\xbe\xe2\xfb\xd7\x17\x3d\xee\x37\x5f\xf8\xc4\x4f\x79\xf5\x57\xfd\xd9\x03\xc4\xe7\x3c\xf0\x53\x7e\xf2\x86\xd2\xfb\x7d\xca\xb7\x3d\xe0\x35\x77\xb9\xfb\x3d\x3f\xe9\xad\x9f\x71\xcf\xbf\xfe\xb9\xd7\xbe\xf2\xfe\xec\x6b\xfa\x33\xfb\x77\xfe\xf4\x5f\xfc\xdd\xd7\x7c\xeb\x4f\xdf\xe3\xc3\x1e\xf2\x8f\x66\xa3\x5b\xbd\xea\x6d\xee\x4d\xf7\xd2\x7d\x29\x4c\x1d\xbe\x45\x7a\x60\x24\x5d\x26\x82\x21\x17\x93\xd9\x4f\x95\xe2\x9d\x00\xb7\x78\xa9\x38\xc5\x50\x9f\x5e\xa4\x7a\x85\x62\x38\x28\x90\xd6\xee\x44\x6c\x72\x3d\xa6\xde\x49\x3d\x60\x13\xc6\xcd\x26\x76\x82\x28\xd0\x28\x6b\x65\xc7\xbe\xee\x6b\xef\x50\x22\x7b\x5e\x81\xad\x3b\x67\xad\xaa\xc3\x90\x95\x77\x83\x70\x6b\xd0\x86\x65\xf7\x07\xa4\x54\x00\xe5\x86\x1d\x5c\x40\x3d\x82\x98\x80\x79\xdb\xb0\xb9\xe4\xd0\x53\xf1\xbb\xe3\xa0\xb1\x04\xfb\x6e\x0b\x3f\x77\x83\x52\x82\xe5\x04\x95\x8f\xa3\xac\x96\xd9\x69\xad\x41\x72\x54\x46\xf4\x6a\x26\xb9\x44\x55\xc7\x6a\x60\x53\xa2\x58\x41\xf2\xd5\x89\x5d\x42\xc6\x18\x30\x82\x75\x15\x42\xec\xfe\x70\x4a\x7b\x40\x5d\x0c\x86\xd6\x9e\xbd\x11\x57\x2c\x05\x71\xbb\xe3\x59\x06\xdb\xea\x44\x47\x52\xa5\x54\x8f\x7b\x67\x9d\x14\x5a\x2d\x27\xbe\x99\x55\x1c\x35\xaf\x69\x1d\x62\xe1\xe7\x8c\xeb\x25\xa9\xb5\x91\xe0\x56\x33\x58\x5c\x5f\x69\x5d\x94\xd1\x94\x3b\x73\x76\x41\x34\x41\xda\x88\x25\x71\x15\x68\x57\xaa\x40\xb7\xcd\xb9\xa9\x72\x45\x04\xca\x06\x0e\x4a\x41\x94\xbe\x8c\x8a\x3c\x88\x78\x0e\xb2\x5b\xa6\x21\x86\xbe\x6d\x51\x1e\xa2\x8d\x5a\x88\xd9\x9a\xde\x91\xde\x57\x21\xc3\x4d\xf4\xf1\x56\x38\x7c\x9b\xc1\x05\x20\x03\xe3\x11\x4f\x8f\x4f\x39\x99\x82\xa1\xaf\x73\xe5\xbb\x5d\xc6\x89\x03\x04\x2c\x29\x6a\xd8\x0a\x85\xcc\x11\xf1\x50\x57\xed\x2e\xe0\xdd\x9c\x30\xb4\x6d\xe3\x44\xa3\xb7\x1a\x57\x53\x23\xd9\x13\xda\xcf\xe4\x99\x5c\xd2\xe0\x14\x79\x9b\xce\xa5\xcd\x08\x5b\x4a\x85\xec\xc0\x5d\x11\xde\x16\xc5\x4e\xcb\x72\x3a\xe3\x85\xd2\x07\x5e\xb7\xb1\x9e\xbb\x00\x2e\x49\x79\x42\x92\x8f\x5d\xb6\xb3\x82\x8a\xc3\xba\x89\xc5\x69\xb2\x5f\x72\x4f\x5b\x17\xb3\x0e\x3d\x97\x44\xa2\xf6\xc9\x9a\x36\x0f\xd7\xe4\x92\x55\x6a\x1d\x26\x1e\x69\x21\x16\xb8\x8d\x2e\xe3\xcc\xe0\x44\x5c\xbb\x2b\xa8\xf4\x96\x03\x59\x92\x3a\x59\xda\xe2\x40\xf5\x58\xe8\xec\xc0\x13\x0d\xc3\xbe\xad\x71\x3b\x73\x4f\x33\x9d\x2b\x0f\x59\x1d\x06\x27\xa2\xc4\x15\xc3\x32\x02\x30\xc1\x76\x9b\xee\xcc\x02\x1c\x67\x03\x8b\x2a\x18\x22\xd3\xac\x6f\x89\x76\x7e\xd0\x65\xf4\x65\x0a\x2e\x26\x02\x33\x1e\x33\x5f\x71\x22\x5b\x18\x4f\x0b\xde\x77\x34\x88\xae\x84\x44\x8d\x0b\x3e\xa8\xc2\x5e\xe4\x76\x22\x4a\xe8\x01\x62\x85\x49\x01\x3f\xab\xe5\xcd\x13\x70\xc5\xa7\xef\xf0\x62\x59\x43\x48\xdd\xac\x44\x39\xb1\x18\xb2\xe9\x4d\x3a\xb2\x9a\x18\x75\x5b\x70\x8f\x27\x33\xc3\x2d\x0b\x9a\xd2\x2a\x54\xcf\x7c\x73\x6f\x7a\x2b\xe6\x76\x9b\x7b\x53\x41\x96\xa9\x71\xde\x55\xeb\xa0\x2f\x98\x2e\x87\xd8\x77\xbd\x1a\xdb\x14\xcd\xb6\xd9\x28\xc8\xdc\xf3\x88\x2c\x56\xbd\x7a\x43\xcb\x35\x36\x9f\x51\x25\xc1\x20\x0f\x8e\xc0\x06\x40\x0e\xb1\x78\xee\x8f\xac\x07\xd8\xc7\x59\x6b\x39\x20\x85\x6d\x18\x0b\x83\xa6\x29\x53\x9f\xaf\x58\xe1\x9d\x01\x17\xef\x90\x57\x42\x9f\x72\xc9\x27\x41\x33\x51\x4f\x94\x0b\x71\x1f\x1a\x60\xd9\x1a\x37\xd4\x0d\x5e\x96\x68\x50\x67\xfe\x92\xd8\x8f\x69\x07\x59\xf8\x16\x6c\x80\x47\xc9\x69\x37\x6e\x07\x61\x05\x9b\xf6\x90\x32\xcb\xc3\x3a\x74\x41\x82\xa0\xd4\x0e\xd1\xb6\x00\x7b\xbd\x62\x7c\xd9\x76\x17\x04\xae\x54\xc4\x41\x81\xd0\xb3\xf4\xb6\xf0\x89\x8e\x05\xda\x51\x53\x9b\x50\x13\x17\xd0\x0a\x69\x86\x4b\x0f\x2e\xa8\x79\x49\x00\xf3\xe6\x10\x87\xca\xab\x4c\x25\x74\x2b\xcf\xcb\x9e\xe0\xdc\x37\xe4\xb7\x73\xcf\xdb\x56\x33\x69\x59\x48\x5a\x94\xd6\x82\x62\x2b\x2e\xc9\x57\x9a\x32\x50\x0d\xf6\x30\xcb\x54\x70\x6a\x33\xcb\x28\xdb\xe9\xc9\x96\xcc\x02\x8f\x74\xce\x06\x23\xaa\xd4\x31\xaa\x85\x39\x5b\xa9\xec\x0a\xcb\xd3\x01\x28\x00\x12\x5a\x67\x66\x1c\xb3\x36\xe2\x36\x6d\x04\x61\x04\x6a\xb8\xf0\x6d\x55\x4a\xae\x3d\x32\x12\x10\x76\x85\xdb\x35\xce\x9b\xc1\xe5\x56\xbd\xde\xed\x3e\x37\xb5\x23\x42\x66\x07\x48\xcb\xb3\x9a\x1d\x08\xbc\x27\x4e\x42\x84\x01\x29\xd4\x05\xf1\x9c\x6e\xbb\x2e\x21\xe0\xec\xcb\x69\xb7\x0d\x5e\xa1\x9e\x6e\xdd\x90\x63\xae\x12\x75\x25\x73\x8d\xd4\xc9\x03\xee\xf0\x04\x82\xb3\xa1\xb9\x9a\xfe\x5c\x0f\xb7\x61\x43\x6a\x34\xc7\x64\x8b\x38\xaf\x68\xce\x98\x20\xae\x81\xd6\x46\x6b\x35\x96\x8d\x30\x6e\x4d\x00\x45\x4a\x65\xa8\xb2\x05\x71\xb8\xf3\x22\x77\x34\x16\xae\x25\x0a\xcb\xbc\x62\x13\x84\x47\x65\xda\x69\xce\xbe\x9f\x67\x1f\xfb\xa2\x86\x3c\x77\xc9\x42\xe6\x95\xe2\x11\xd8\x96\x0b\x07\x63\x1d\xbb\x07\x62\xb7\x07\xad\xdb\x7a\x05\x73\xf1\x5c\x13\x96\x54\xf2\xbb\x71\x3c\x9a\x3d\x9c\xc2\xf9\x9e\x71\xee\x50\xc5\x9a\x15\x63\x2c\x4a\xed\xea\xd8\xa5\xd7\x47\x2b\xf6\x8a\xa3\x57\xdc\x15\x0b\x57\xe0\x0b\xca\xa4\xb6\x84\xca\x0e\x2a\x38\x77\x57\x03\x5e\xf7\x7d\x72\x85\x42\x8d\x4b\xaa\xba\xa0\x0a\x74\x3d\x84\x4e\x57\x34\xaa\x4a\x57\xa8\x61\x5e\xd6\xad\x6e\xbb\x54\x00\xcf\x19\x1a\xd9\x25\x53\x3b\x51\xc4\x45\xe5\x4e\x6d\xeb\x0e\x5c\x2c\x47\xb0\x52\x96\x72\x05\x7f\xa2\x73\xb3\x21\x7b\x26\xa1\x8f\x8c\x46\x5c\xc8\x5a\x09\xed\x04\xa0\xa8\xb7\xae\x0e\x68\x4b\xd9\x06\xce\xfb\xc4\x62\xa9\x96\x05\x57\x6e\x02\x97\x5b\xa9\x43\xb7\x19\x5c\x56\xe9\xe3\x99\xbd\x88\x3c\x57\x77\x2a\xe2\x18\x6c\x78\xdf\x3c\x31\x4c\x6a\x4b\x05\x3c\xb2\x26\xc6\xf7\x30\x37\x84\x90\x51\xf8\x8a\x64\x23\x86\xc5\xf4\x1c\x40\x14\x2d\x99\x73\x1d\x71\xdd\x07\x86\xaa\xef\xf1\x10\x93\x08\xa5\x6c\xe3\x01\x48\xe6\xc6\xde\x84\xe2\xbb\x1c\x57\x1c\x6d\x60\x29\x2b\xce\xdd\x9e\x27\x08\xb4\x94\x28\xe9\x9e\x72\x6f\x8b\x3e\xc8\xb6\x2f\x85\xc5\xd1\xf9\x36\xc6\xb2\x76\xa6\x3b\x60\x89\xaa\x4b\x0c\x36\x21\x00\xda\xe1\xc6\x3a\x51\xb9\x8f\xea\xf0\xc1\x0a\xdf\xef\xa4\x2b\x70\x81\xa0\xb5\x8c\x97\x5e\x8e\x23\x15\x51\x78\xa4\xa4\xb8\x72\x05\x97\x04\x30\xf1\x19\xd7\x2a\x2b\xc0\xea\xc0\x6c\x76\x01\xc6\x62\xe6\xd8\x76\xe8\x17\xe4\xb4\xb1\x70\xd7\xb6\x09\x36\x9c\x66\x1c\x40\x7b\xc5\x4e\x7c\xb2\xc9\x96\xd6\xc5\xe8\x5c\x8e\xbc\xda\x55\xf3\x6d\x75\x36\xec\xb5\x47\x63\x63\x2c\x99\x2d\x6b\x1f\xa7\x27\x78\xdd\x09\x76\x76\xbd\xa2\x39\x3b\xc3\x22\x3c\x91\xa4\x0e\x16\x67\x5c\x2c\x93\xb2\xef\x5b\x84\xac\x06\x85\x2c\xad\xfd\x64\xce\x10\x2e\x16\x82\x27\x70\x18\xf8\x4b\x42\x69\x60\xec\x7e\x52\xb3\x54\xe7\x71\x9c\x2e\x7a\xb1\xf0\x5c\x01\x2a\xcd\x79\x2d\x5b\xc2\x75\x1d\xa6\xcc\xd5\x4d\xa4\x4f\x6a\x88\x15\xf8\x26\x70\xb9\x95\x9e\x7c\x9b\xdb\xa2\xc6\x5d\xdc\xb2\x97\x64\x25\xc7\x76\xce\xb9\x65\x75\x9e\x9b\x48\x73\x6e\x9d\xcc\x30\x88\x70\x34\xf7\xb9\x8d\x58\x82\x3f\xb8\xb7\x57\x48\x66\x7c\x3b\x82\x41\x2e\xab\x20\x3c\xa3\xd3\xec\x4e\xec\x1b\x53\x43\x73\x7c\x58\x82\xf2\x9c\x75\x29\x27\x20\x3c\xd6\x56\xb8\xc6\x07\x74\x57\x84\x74\x89\x86\x9b\x16\x9e\xdc\xd9\x99\x2c\xc4\xb7\x65\x73\x8e\x18\x41\x73\x8c\xa7\x3b\x52\xab\x52\x6a\x3a\x4d\xa2\xd2\xe3\xe0\x53\x75\xe9\x0a\xa0\xd5\x42\xe8\x19\x1a\x46\x38\xa1\xe3\x04\xab\x89\x7c\x68\x3f\x21\x4f\x16\xcc\x9a\x94\x46\x02\x9f\x2a\x41\xbd\x4d\x0b\xb8\x21\x0d\x5c\xc1\x9f\x0e\x27\xc4\x10\x5b\x5d\xc8\x19\xec\xc2\xd6\x03\x67\x6d\xa3\x01\xcc\x9c\xb8\x11\x3b\x5c\x14\x86\x16\xb0\x92\xa6\xf1\xa2\x52\x98\x97\x9c\x7e\x2f\x32\xc5\x6a\x78\x2d\xb1\xa4\x75\xaf\x4d\xd2\xd8\x54\xe7\xb6\xd1\x00\x52\x98\x8b\x38\x9c\xb1\x6b\x77\x01\xc6\x06\xa6\x36\x2c\x5f\xa1\xc5\x25\x60\x90\x3e\xce\x7d\x1c\x93\xdb\xb2\x94\x29\x86\x3a\xbd\x97\xde\x0c\x8e\x79\x77\x16\x0f\x29\xf0\xe8\x68\x49\x07\x26\xdd\xe4\x2b\xe0\x9e\x05\x73\x00\xbc\x23\x24\x6c\xac\x69\x76\x02\xc2\x82\x24\x67\xcd\x12\x1e\x25\x58\x05\xee\xd6\xf7\x18\x20\x76\xe8\x0c\x70\x2e\x0a\xde\xbc\x83\x71\xab\x09\xd4\x6d\x06\x17\x28\x7d\x9b\x75\x31\xcc\x4f\xab\x85\x14\xb8\xb5\x84\x3a\x9e\xd5\xc9\xd0\xe4\x29\x77\x39\x8a\x8d\x0a\x78\x05\xc9\xb9\x23\xb3\x8b\x2b\x16\xbc\x64\x3e\x62\x3f\xe1\xc4\x44\x8a\x41\x02\x32\x58\x2c\x29\xf3\xa2\xc4\x58\x52\x38\xe7\xd8\xe8\x7a\xc8\x6d\x51\x0b\x97\xf1\x8c\x1d\xce\x4b\x76\x58\xf5\x56\xd6\xc1\x4f\x12\xf4\x41\xd9\xb2\x62\x0c\x87\x5d\x98\x37\xc5\xe9\x1d\x21\x4a\xb6\xa6\x55\xed\xa5\xb6\x23\xe3\x43\x39\x70\x85\x4d\x9a\x19\x08\x04\xef\xf6\x28\x9b\xa2\x35\x77\x58\xad\x86\x56\xe1\x30\x4a\x27\x6c\x6d\x8d\x84\x9d\xa1\xd1\xf2\xf4\x6c\x2b\xa2\xa0\x5d\x5e\xe1\x9b\x33\x6b\xb5\x38\xa1\x72\x1c\x68\x6f\xc4\xcf\x7d\x47\xa5\x6d\x16\x2e\xab\x39\x4f\x36\xf4\x19\x40\x41\x81\x8f\x45\xc3\xc5\x04\xb2\xce\x2b\x92\x21\x59\xea\xab\x17\xa4\x6f\xc1\x14\x63\x74\xe4\xe6\x88\xbd\xe8\x3d\xa3\xdd\x0a\x34\x39\xd7\x98\x9e\x55\x26\x0b\x4b\x3c\x17\xc2\xa7\xba\xc4\xad\x52\x87\xc4\x44\x5b\x98\x43\xdf\x81\x4e\x67\xd6\x2e\xf5\xcc\x39\xe9\xee\x54\x55\x9c\xa2\xe0\x33\x41\xbf\x97\x2c\x70\x9d\x40\x33\x76\x49\xe2\x15\xb0\x42\xf4\xce\xf7\x4c\x7c\x26\xb9\xbb\x72\xd0\xa5\xef\xcc\x64\xd6\xb2\x52\xae\x19\xb7\x56\x2d\x12\x16\xdb\xe1\x02\x2e\xfa\x86\xab\x93\x6f\x03\x97\x5b\xcd\xac\x6f\x73\x5b\x14\xc9\xb0\x33\x08\xda\x0a\x71\x41\x07\xb8\x72\x8f\x71\x4e\x40\x2b\x04\xf2\x7a\xac\x02\x6d\xd1\x0d\x74\x08\x93\x04\x8d\xe4\x0c\xe2\x0a\x83\x32\x2e\xdb\x4a\x0f\xbf\xcf\xcd\x99\xcd\x75\xb3\x35\x85\x41\x47\x85\x13\x5f\x6d\xdc\x86\xb4\xbb\x5f\x6b\x0f\x40\xc7\x53\x9e\x56\xba\x4b\xae\x85\x35\xa9\xab\xd3\x70\xad\xc6\xad\x62\xaa\xbe\xd4\xad\x89\xad\x8c\xae\xb4\xc3\x7d\x01\x3c\x6d\x3e\xe7\x42\x60\xed\xd6\x82\x8d\x52\x76\xc5\xc6\xa4\x63\x03\xd3\xa4\xe7\x8c\x5d\x1d\xfb\xd4\x39\xaf\xab\xa9\xf0\x38\x41\x19\xcb\x0c\x04\x2e\x1e\x9e\xa7\x29\xcd\xf7\xb6\xf2\x51\x14\xbb\x22\x89\x84\x78\x2d\x34\x4f\xab\x53\x9e\xa5\x82\x00\xa4\x10\x6f\x8b\xa4\x94\x2c\x7e\x2f\xb4\xac\x23\xc4\x79\xf8\x68\xcb\xac\x90\xd7\xcc\xf3\x15\x5c\x12\x2d\x3a\x51\x71\x56\x6b\x13\x41\xc1\xd2\x16\x76\x63\xaa\xa2\x91\x48\x35\x3a\x81\x4a\x41\x7e\x44\x87\xb4\xc2\x63\x5d\x6a\x1c\xf3\x8a\xf5\x43\x35\x66\x2d\xb1\x1d\x1b\x2e\x1b\xf0\xae\xcb\xc5\x9f\x5e\x4c\x00\xa3\xc5\xd6\xcb\xb4\x0f\x73\x30\x04\x22\xa9\x6c\x35\xa6\xb2\x61\xaf\xd8\xe7\x05\xa1\x0a\xba\xe2\x70\x18\x62\x6b\x24\x27\x5c\xad\xaa\x0a\x1c\xa1\x01\xb6\x20\x70\x70\xc1\xe6\x98\x9e\xd1\x25\x42\x32\x92\x14\x37\xac\x62\xbe\xcd\x6c\x74\xab\xdb\x70\xff\xc4\x6c\xf4\x99\x2f\x7e\x2c\xfd\xcc\xa7\xfc\xcd\xd7\x3e\xe1\x51\xfd\xbe\x5f\xa6\xdf\xe7\xb1\x9f\xf3\x88\x1f\xff\x80\x87\x7f\xa5\x7e\xce\xa7\x7f\xc9\x67\x3c\xf3\xed\x5f\xff\x5b\xf7\xb8\x31\xd7\xe7\xa3\xbe\xf8\xdd\x7e\xeb\xde\xf7\xbc\xff\xc7\xbf\xe2\xb9\x8f\xfa\x0f\x77\x3c\xe7\xe3\xde\xfd\x87\xfe\xe3\xf7\x7e\xf1\xdd\x1f\xfb\x43\xe2\xc7\x7e\xee\x3e\x4f\xf9\xa4\xf4\x2b\x37\x94\x7e\xdd\x83\xde\x78\x4f\x7e\x7c\xdd\x6f\xfc\xd5\xfc\x9f\xf6\xfd\xd1\x17\x3c\xe1\xb3\xfe\xf2\xa1\x6e\xf9\xd3\x9f\x7c\xf4\xf9\xaa\x87\x3d\xed\x01\xcf\xfb\x96\x0f\xbc\xa1\xf4\x8b\xbf\xe1\x2e\x9f\xfa\x98\x17\xff\xa5\x63\x77\xff\xb3\x7f\xff\xfd\x3f\xf5\x7f\xee\xfb\x48\x78\xd7\x97\x84\x5f\x79\xc5\xd3\x7e\xff\x91\xfc\x27\xcb\xe3\x3e\xf4\x23\x6f\xf4\x25\x7d\xd8\xb7\xff\xc7\xbf\xfa\x99\x7b\x3c\xed\x59\xf7\xfd\x83\xa7\x7f\xf2\xb7\x7d\xfc\x27\x82\x7b\xff\xe1\x6f\xaf\x8f\xf9\x8d\x27\x7e\xce\xcf\xd9\x5f\xfd\x2b\xff\x95\xff\xf6\x86\xd2\xcf\xf9\x90\x07\x7f\xf3\x9f\xff\xc4\x4b\xd5\xbf\xba\xe3\x69\xff\xf9\xe5\x5f\xf3\xfd\x9f\xf4\x5a\xf5\xd5\xf9\x23\xdf\xfa\xb4\xf1\xfd\xdf\xfd\x7e\x9f\x97\xe6\x07\xbc\xeb\x0d\xa5\x2f\xfd\x8c\xf9\x0e\xaf\x2d\x4f\xb9\xe3\x4f\x5e\xf0\x57\xbf\xf6\xf1\x5f\x64\x3e\xf9\x17\xee\xfb\xfb\xf2\x29\xf4\xb5\xcf\x7e\xa7\x9f\xf9\xdc\x9f\xf5\x3f\xf7\xca\x1b\xcf\xa8\xbd\xc7\xab\xfe\xe7\x2f\xbf\xf2\x4d\x1f\xfd\xb2\xa7\x3e\x58\xbc\xf1\x1b\xff\x35\xfe\xd9\x17\xca\xdf\x78\xcb\xd7\xbe\xec\x2b\xfe\xd3\x8b\x3f\xef\xd1\x9f\x74\xdf\xef\x7b\xfe\x6b\xff\xd1\x6c\x74\xab\x57\xbd\xdd\xc9\x46\xdd\x27\x60\xb6\x5d\x20\xe0\xb8\x0f\x6b\x1a\xe8\x54\xce\x40\xb1\x3a\x3e\x53\xf5\x0c\xb6\x1a\xd4\xd2\x59\xe1\x9e\xd7\x36\x15\xbf\x02\xe1\x87\xe5\x27\xdf\x89\xe1\xae\xc0\x19\xc4\x98\x05\x62\x24\xbd\x01\x67\x59\x17\xbb\xae\x64\x5f\xd1\x36\x21\x19\x5c\xf3\x0e\x4c\x14\xeb\x15\x9d\x50\xda\xc2\xf0\x46\x9d\xab\x46\x8a\xea\x01\x86\x15\xcc\x2f\x7c\x21\x65\xc7\x80\x9e\x05\xea\x6c\x2d\xaa\xae\x34\xb0\x4d\x92\x7b\xbc\x24\x00\x31\x44\x37\x78\x93\xe3\x14\x5d\xb2\xa4\x5d\x2a\xbc\x78\x69\x36\x4c\x70\xa4\x30\x88\x9a\x39\x5d\x53\x99\x07\x14\x78\x5a\xae\xb8\xbd\x62\x7b\x60\x9b\x68\xa7\x94\x6b\x60\xb7\xd4\x6c\x1d\x6e\xf1\x48\xc6\xa8\x8a\x9b\xba\x12\xe6\x71\xa8\x6c\xef\x67\x34\x53\x99\x13\x85\xc4\xea\x15\x2e\xf1\x89\x96\x9e\x01\xaa\xb3\x4b\x3a\x15\xd4\xd9\x99\x5c\x18\x1c\xe8\x1f\xee\x94\x18\x38\x99\x50\x6d\x75\xc0\x2e\x22\x91\x13\x1c\xb8\x5c\x31\x44\x5d\x59\xf3\xd5\x24\x83\x66\x2b\xc2\x17\x6b\xed\x32\xf6\xb6\x94\x86\x5c\xd1\x31\xb6\x63\xb2\xe8\x7b\x93\x2d\xa6\x0c\x9c\x6d\x87\xbf\x62\x70\x18\xc0\x99\xc1\x96\x22\xaf\xc7\x19\x70\x06\x0b\xa3\x21\x6e\xff\x7f\xda\xfe\x34\xf8\xbb\xef\xaa\x0a\xc4\x99\xf2\x97\xe9\x1f\x05\xed\xa0\x36\x43\xc0\x06\x69\x9a\x80\x9c\x7b\x86\x80\x0c\x5a\x48\xb4\x11\x12\x0d\x89\x84\xa8\x98\x33\x9f\x7b\xa6\x7b\xcf\x7c\xee\x11\x03\x74\x02\x8d\x01\x51\x5b\x30\xcc\x26\x1d\x62\x18\x22\xc6\x40\x43\x10\xb4\x50\x31\x21\x28\x8a\x18\x45\x69\x22\x22\x60\x40\xc1\xa8\x28\x21\x32\x75\xfd\x52\x05\xf5\x14\xcf\x8b\xe7\xcd\x73\xdf\xef\xaa\xef\xa7\x3e\xdf\xfb\x59\x77\xef\xb5\xd7\x5e\xeb\xe8\xd7\x39\x7b\x3c\x76\xb6\xf2\x1e\xd5\x92\x87\xea\xa7\xe9\x5e\x94\x98\xda\xc3\x5a\xf5\x47\xe0\xf0\x63\x6e\x1f\xd1\x3e\x45\x74\xf5\xb0\xac\xf8\x03\xaf\xab\xc0\xce\x28\x71\x8e\x00\xea\x03\x32\x3b\xac\xe4\x2a\xa0\x1e\x3a\x86\x18\xc4\xbe\x71\x7a\x87\x19\x64\xaa\xbd\x4f\xd6\xae\x81\x0f\x9a\x4b\x6e\x28\x90\x28\x67\x26\xdb\x35\xf1\x71\x6e\x1b\x37\x26\xcc\xde\x26\x3a\x7c\xc4\x9e\x9d\xe5\x96\xbc\x80\x3e\x0f\xed\xa6\x60\x4e\x6b\x66\x49\x5c\x6e\x10\xa8\x3c\x0a\x61\xf2\x0e\x36\xc2\x69\x4f\xcb\x69\xae\xb8\x02\xdc\x34\xa0\xf3\x76\xc7\x0c\x82\x96\xb9\xa2\x3b\x46\x2f\x8a\xaa\xcb\x2e\x11\x18\xb0\x24\x60\x6b\xb9\x4b\x31\xa9\x45\x6d\x0d\x50\xba\xe5\xa3\x8f\xdb\x86\x18\xb8\x43\xfe\x25\xa3\xae\x18\x36\xe2\x31\x17\xab\x55\x7b\xb2\xc4\x0a\x3d\xb3\xd8\x56\x1b\x18\x07\x01\x21\x17\x34\x9b\xec\x63\xf1\x7c\x3b\x66\xba\xc1\x36\x8d\x02\x62\x0c\x1c\xea\x1c\x85\x64\x12\x0f\x7a\x1c\xfb\xc2\x97\x36\x02\x4b\xb1\x81\x7d\x42\x2f\xf3\x3c\x1b\xc4\x4e\xa3\xb0\xf3\xdd\xde\xe1\x0f\xc0\x76\x79\x06\x86\x39\x93\xca\xc9\x8b\xc4\x71\xb0\xc0\x51\xac\x46\x77\x77\x0a\xab\x4f\x21\x5a\xec\x98\x85\xdc\x17\x0e\xa7\xf2\xf7\xe8\x01\x20\xd8\x94\x92\x71\xac\xb1\xb9\xe8\x4d\x29\xea\x4a\xd1\x5b\x60\x35\x4f\x79\x1a\x80\x10\xa5\xd3\xc9\xe2\xaa\xbe\x8c\x83\x34\x72\xf0\x10\xb8\x3c\xaa\x73\x7b\xcc\xe0\x92\x97\x49\xed\x74\xe2\x30\x6a\x58\x6b\xf7\x6d\xf7\x0b\x84\xc4\x61\x1c\xde\x15\x91\xe8\x3c\x8c\x42\xbe\xa3\xc2\xcc\xd6\xa7\x6e\xf7\xa4\x23\x06\x39\xa7\xb4\xbc\x06\x58\x37\xa4\x2d\x42\x3a\xc7\x61\x85\x5a\x13\x2f\x10\xb7\x98\xad\x69\x1a\xec\x69\x6e\x97\x00\x8b\x69\x7e\x03\x7b\x4a\xe3\x15\x8f\x4e\x4f\xd9\x4b\x73\xaa\x02\x6a\xc7\x1a\xea\xf2\x0b\xcc\x9e\x36\x38\x0b\xdd\x9a\x84\x74\xa0\x53\x97\x66\xf2\x7e\xcc\x5b\x0c\xa4\x61\x2a\xdb\x82\xbe\x5e\x03\x0d\x79\x92\xc2\xaa\x9e\xb8\x96\x95\xa4\x58\xd1\xfa\x22\xae\x79\xc5\xad\xeb\x63\x56\x7c\xf4\x0a\xe3\x2d\xea\x3d\x57\xe2\x32\xc5\xe1\xa1\xaa\x9c\xd2\xaf\xd3\xa3\x98\x34\x8e\x95\x32\x7b\x72\xad\x74\xe6\x6e\x5f\x7c\xb2\x98\x2a\x27\x10\x96\x3b\x52\x0b\x58\x0a\xe7\x21\x50\x22\xfc\x89\x4f\xd3\xf2\xac\xe0\x80\x05\x0a\xa7\xbb\xd8\x0e\xcd\xce\x4e\xb3\xd8\xae\xc6\x03\x4e\x52\x4d\xcc\xb7\x3b\x36\x0c\x54\x3b\x96\x1d\x2d\x1b\xc9\xa5\xcc\x5d\x71\xcd\x78\x4a\xeb\x9a\x70\x47\x22\x10\xd4\x9a\xb6\xb2\xb0\xd6\xbc\x3a\x2f\x00\x1a\x34\xfe\x8e\xdf\x08\x67\xb2\xd3\x15\x3d\xf6\xd4\x14\xd1\x6c\x97\x19\x91\x22\x02\xad\x6c\x84\xb8\x93\xbd\x5f\xeb\xf4\x19\x50\xbe\x5b\x4c\x96\xbc\xac\x79\x08\x5c\x1e\x35\xeb\x3d\xee\xa4\xa3\xc9\x2d\xa6\x99\x5e\xb2\x91\xe4\x4c\x82\x3b\xe4\x48\x70\x4c\x3b\x39\xad\x39\x01\x2f\x86\xa4\xe6\x7a\x93\xfb\x98\x63\x13\x71\xbb\x63\x07\xce\xd3\x99\xc2\x36\x27\xa0\xd6\x77\x40\xb3\x50\x01\x8d\xcb\x18\x88\x12\x02\x85\x28\x83\x74\xa9\xcb\xf9\x82\xe6\x76\x1e\x3d\xe6\x3b\x3e\x05\x8b\x5b\xeb\xf1\x18\x95\x6d\x57\x54\xb0\x31\x6c\x17\x65\xf3\xb8\x70\x1f\xd8\xf5\x34\x91\x3f\x0b\xce\x6b\x81\x24\x50\x0e\x72\xf5\xed\x0e\x56\xdd\xb6\x52\xa8\x5e\x83\xa0\x98\x38\x75\x08\xa7\xd1\x4d\x64\x60\xc8\x41\xbd\xf1\x8c\x93\x99\x95\xf7\x7c\x00\x94\xcf\x2b\x32\x92\xef\xe8\x5c\xce\x5d\x64\xaa\xf6\x76\x54\x43\x98\x76\x40\xb6\xb1\x14\x53\x8d\x96\x60\xc3\x81\xa6\xa1\xd7\x34\xfb\xa2\x9b\x18\x12\xa2\x42\xcf\x3b\xbe\x0b\x36\xdc\x25\x39\xcd\xf1\xda\x1d\x37\xf2\xba\x58\xd8\x0a\x5b\x5a\x5b\x62\x6a\xed\xcc\x75\x75\xc8\xd5\x78\x40\xb2\x35\xe4\x35\xa3\xeb\x0e\xe1\x7a\x0e\x5e\x64\xaf\x02\xe5\xad\x69\x8e\x39\xbb\xb6\xd0\x43\xdc\x73\x0d\x61\xb8\x98\x9a\x09\x87\xf6\x9b\xe5\x49\x2a\x53\xf4\x9c\xec\x8e\x4b\x10\xb1\x01\xd2\x82\xf4\x9d\x5e\xa7\x43\xce\x41\x74\xcc\x33\x33\xc3\x50\x3d\xa3\x80\xd7\xac\x7e\x20\xcc\x6a\xc6\x01\x78\x56\xd3\xaa\xf4\x61\x25\xe3\x23\xd8\xa1\xc7\xdc\xb9\xc8\xe1\x78\x22\x1b\x81\x00\x4a\x88\xc9\x56\x18\x95\x0a\x7a\xd6\x87\x6f\x89\xab\xab\x76\x6f\x50\x46\x7e\x77\x58\x5c\x7b\x87\xe4\x96\x58\x6e\x51\x21\x99\xde\x15\x1d\x13\xb6\x4c\x70\x26\x25\xc3\xb3\x75\xa3\x66\xc9\x8d\x91\x53\xed\xb5\x86\x98\x10\x99\x1c\x75\xc8\x78\xbe\xa1\x67\x60\xb5\x32\x2b\x48\x70\x84\xf3\x53\xee\xb9\x4a\x61\xce\xc2\xa3\xa7\x9e\xce\x29\x03\x11\xd4\x5d\x04\x23\x03\x22\xe6\x19\x2a\x4a\xaf\x3b\xc0\x85\x9d\xfd\x3a\x8f\x5e\x1c\xbd\x3c\xe2\xe0\xc0\x0a\x64\x5c\x13\xc6\x09\x5d\x76\x35\x90\x06\x3d\xca\x75\x85\x43\x79\x95\x0d\xd7\xe4\x96\xbc\xef\xd3\xed\xc1\x04\xd4\xea\x22\x0d\xef\xf0\xb8\xb0\x28\x08\x6c\x6b\x07\xb8\xef\x6d\x1f\x87\xdd\xcc\x42\x84\xad\xe8\x81\x5e\x5c\x38\x77\x87\x70\xdd\xaa\xee\x3b\x83\x42\x2e\x33\x2b\x3a\xad\x90\xd1\x6e\x5c\x50\x05\x43\x63\x96\xce\xd3\x46\xba\xc7\xeb\x72\x7d\x57\x4b\x63\x32\xc0\x1d\x9f\x62\x46\xb1\x36\xa5\x8f\x0d\x87\x83\x4d\x54\xbc\x71\xd5\xf5\xb2\x61\x82\xea\xda\x2e\xbf\x12\x45\x57\x53\x61\x3b\x83\x86\xfb\x3e\xe5\x7e\x8b\x6d\x9a\x4c\xd3\x0f\x4e\x28\xce\x83\xcd\x6c\x69\xd7\x11\x27\x13\x24\x51\xfb\x7e\xed\xa4\x6c\xad\xe2\xc3\x18\x6d\x2a\xba\x52\x8b\xca\xc2\x87\xc0\xe5\x51\x7c\xf2\x63\x06\x17\xd3\x47\x36\xa4\xb0\x2c\x05\x41\x0c\xe6\xab\x76\x2c\x2e\xa1\xe4\x7e\xf9\x99\x1b\xba\x56\x9c\x93\xc1\x51\xde\x71\x5a\x54\xf0\x96\xef\x98\xad\x31\x8b\x7a\x70\x22\xed\xa6\xaa\x9a\xf2\xbc\x48\xdd\x27\xd9\xba\x11\x0a\x9d\xb3\x81\x80\x58\x2e\x95\xe7\x92\x1b\x3f\x09\xbc\x8e\x72\xc7\x43\x34\x70\x42\xdb\x20\x55\xcc\xc9\x51\xa4\x50\x83\xbd\x55\x87\x90\xa0\xcb\x1e\x80\x9b\x11\xf8\xe8\x67\x8a\x24\x36\xa9\xe5\x41\xa0\xbb\x43\xe6\x23\x69\x3f\x33\x91\x31\x8f\x18\x4d\x37\xd6\xe1\x7a\x8e\xcd\x14\x34\x94\xe8\x78\x40\x40\xad\x08\xad\x6c\xd1\x3a\xda\x7b\x59\xe1\x8e\xa4\x23\xea\xa0\x25\xed\x02\x07\x0f\x44\x5b\xde\xfd\x44\x07\xeb\x1c\x9d\x54\xb7\xb3\x63\x30\xa0\xea\x97\x28\x81\xf9\xa2\x8e\x7d\xc3\xf6\x62\x77\x3c\x17\xcb\x9c\xa3\x84\xe8\xb1\x38\x0c\x94\x8b\xf5\xd2\x7a\xc6\x9a\x5f\xd0\x2d\xbb\x81\x9d\xc3\x5d\x58\xb1\x64\xaf\x87\x83\xd9\x5e\xb7\xb8\x49\xd3\x0b\x18\x29\x8d\x19\xf6\x14\xec\x20\xe7\x76\x45\x32\x56\x59\x12\x6f\x0b\xfb\xcb\x66\x7a\x08\x2a\xa5\xc0\xdd\xc5\x73\x6e\x65\xfa\xfd\x8e\xc5\x61\x32\xa5\xa3\x8e\xf4\x15\x3c\x18\x5a\x6a\xe7\x13\x8e\xc3\xe9\x81\xa6\x6c\x8a\xc6\xea\x4b\x59\x63\xd7\x4f\x3c\xbc\x00\x17\x6f\xd3\xc3\xb6\x69\x8f\xda\x40\x3d\x6e\x3d\x80\xb5\xbb\xb5\x0c\xb0\xba\x4b\x0f\x5b\x47\x9a\x09\x43\x50\x71\x6b\xf0\x0e\x86\x31\x3e\xa8\x8c\x09\x8b\xea\x94\xd0\x60\x93\xdc\x1d\x8f\xb2\x2d\x7d\xc7\x1b\x21\x86\xe5\x78\x9c\x82\xdb\x9e\x72\x56\x2d\x83\x86\x61\x4a\xd1\x61\x50\x7b\x61\x92\x51\x3f\x94\xdd\xfd\x13\x30\x73\xc3\xcf\xda\x5f\x08\xc7\xb3\x76\x32\x5c\x9e\x8e\x6e\x13\xad\x7d\x15\x23\x21\x3f\xe6\x02\xc4\xc1\x8d\x1c\xa1\xe8\xd8\xc4\x95\x25\xc5\x62\xbb\xee\x80\xb8\xc3\xd2\x6a\x91\xd7\x8a\x83\x6d\x6f\x7e\x87\x2e\xd0\x4d\x72\x0e\x81\xf0\x6c\xb3\x00\xbb\x26\xa0\xe6\x76\x9f\x01\xa8\x1d\x8f\x75\x07\xe7\x42\x0f\x8d\x40\xe6\xbe\x9e\xb5\xcf\xb5\x9a\x33\xbc\xc6\xad\x9f\x18\x5d\x6d\x0b\x7e\x52\xed\x78\x65\x34\xc1\x8a\x0f\x6b\x5a\xda\x70\xb9\xa3\x7f\xaa\xd4\x59\x92\xb8\xd0\xf0\xaa\x04\xc5\xd2\x34\x08\xf4\x2a\x51\x9f\x33\x52\x55\x2c\x92\x1d\x9b\x89\x71\xf6\x6b\x53\x17\x85\xf4\x96\x4b\xda\x03\x1c\xa0\x43\x34\x51\x32\xbb\x60\xfb\x29\x1b\x00\xa6\x8f\x94\x16\x98\x0c\xeb\x24\xda\xa5\xf3\x95\xd9\x06\xdc\x75\x48\x4e\x7d\xbe\x63\x44\xcc\xe1\x94\x4f\xf4\xf7\xf6\x48\x74\xd5\xa5\x36\x47\x45\x53\x0d\x9f\x7d\x9d\xf2\xea\x69\xe4\x28\x82\xa6\x7b\x32\xe7\xb6\xe7\x4d\x1f\x00\x3f\x04\x2e\x8f\xda\x59\x3f\x6e\x67\x23\xa6\xb6\xd9\x07\xbf\xdc\x59\x7c\x54\x38\x9c\xd7\x45\xfb\xd1\x47\x82\x93\x44\xe0\x6b\xa8\x87\x15\xd2\x7b\xda\x9c\xc0\x39\xfb\x75\x8b\x0d\x37\x1f\x74\x79\x7b\x1d\xc6\xca\x03\x8e\x23\x85\x89\x64\x2f\x8d\x20\xb4\x12\x01\x23\x39\x4a\xd2\xa0\xa7\x6c\x23\xc7\x4a\x22\xb0\x77\x18\x53\x8d\x9d\x5e\x69\x57\x70\x87\xf6\x40\xd3\x88\x0d\x25\x3d\x2c\x62\x2b\xef\x3e\xab\x71\x68\x7c\xd1\x0c\xc1\x90\xd5\xd6\xab\xa2\xd6\xc1\x1d\xab\x68\x12\x4b\xbf\xbc\x2b\x6d\xf7\x3c\x29\xbe\x11\xc3\x69\xe2\x87\xee\x15\xe7\xde\xad\x20\xc4\x29\xce\x7d\xd8\x0e\x2f\x2e\x84\x4a\xbe\xa3\x7f\xa2\x7a\x6a\x29\x0f\x68\x06\x3f\x09\x99\xc9\xc9\x2b\x27\x01\xd7\x59\x15\x16\x72\xc0\x7e\x34\xb3\xfa\x28\xb1\x17\xc6\x4a\x56\x66\xa7\xb7\xfc\x47\x78\x15\xa1\xd1\x15\x50\x80\x95\x9f\x8e\x08\xb1\x16\x75\x60\x67\xce\xc7\x68\xc9\x75\xa4\x8e\x4f\xb6\x1a\xe6\x7b\x3d\xad\xa6\xe2\x0e\xb8\xdf\xaf\xb6\xea\x76\x15\x95\xe8\x18\xab\x62\xec\x48\x63\x5a\x83\xe1\xb7\xc4\x3b\xdb\x9c\x5f\x95\x4a\x65\xbb\xe9\x8b\x1f\xfd\x30\xe9\x8e\x00\xfd\x91\x55\x3f\x73\x62\x1e\xe9\xf3\x62\x24\x9d\x53\x3b\x2a\x7a\x25\x43\x18\xa0\xfb\x52\x87\xd0\x0a\x89\xd0\x56\x6c\x22\x9e\x20\x3d\x90\xc6\xf1\xeb\x62\xa3\x2f\x6f\xbf\xe2\xbe\xe0\xd9\x7f\xea\x7d\x7e\xf1\x55\x3f\x7b\x3e\xe5\x3d\x5e\xf0\x35\x1f\xf9\xd2\xff\x83\xbe\x61\xff\xaf\x9f\xf3\x03\xff\xea\xcf\x7e\xe4\x17\x7f\xf1\xf6\x94\xdf\x24\x36\xfa\xbc\xe7\x7f\x88\xfd\x4b\x3f\xf8\xa9\xaf\xfe\xbe\x6f\xf9\x94\xa7\x7f\xd1\x87\x7c\x85\xfc\xb1\x37\xc0\xef\x7d\xee\x0b\x5f\x07\xff\xc7\xf7\x7c\x4e\xfb\xf1\x57\x7f\xec\x4b\x1f\x28\xfd\x37\x9f\xfb\x75\xff\xfd\x77\x7d\xd4\x53\xc1\x1b\x3e\xe7\x5d\xd9\x2f\xe9\x6f\xfe\xfe\xe7\xfc\xec\xfb\xbc\xe8\x0b\xff\xef\x6f\x7f\xfa\xbf\xbe\xfe\xd1\xbf\xfd\xb8\x8f\xfc\xa3\xdf\xfe\x40\xe9\xf1\x07\x7e\xf4\x0d\x9f\xf3\xc2\x17\x3f\x89\xfd\xfd\xcf\x7b\xe7\xb7\xff\xbd\x2f\xfc\xbd\x3f\xf8\xcc\x1f\x7c\xfa\x6f\x79\xb7\xdf\xf1\x4d\xe4\xeb\x3e\xfc\x9b\xde\xe7\x0f\xff\xad\xff\xe7\x81\xd2\x5f\xfb\x63\x2f\xd0\xaf\xfa\xd9\x8f\x7b\xd9\xf7\x7c\xf3\x87\x7e\xc2\x33\x9f\xf6\xb5\x5f\xfe\xb3\xff\xe7\x3f\x7c\xf3\x3b\xfd\xbe\xfc\xd6\xf7\x7f\xd9\x6b\xde\xf2\x92\xd7\xff\xd5\x8f\x7e\x50\x41\xf4\x41\x2f\xfe\xf2\xf7\xfd\xfc\x77\xfe\x1c\xf5\x85\x9f\xff\x8c\xef\xfe\xd1\x77\xff\xf2\xd7\x6c\x5f\xf4\x11\xaf\xfe\xcc\xa7\xbf\xfd\xdf\xee\x7f\xe9\xa3\x3f\xea\xdb\xff\xee\x2b\x1e\x28\xfd\xd5\x1f\xbf\xfe\xc9\xff\xff\x73\xdf\xe9\x95\xff\xfa\xbb\xf4\x7f\xf8\x95\x67\xfd\xda\xf1\x5f\x9e\xfa\xe6\xa7\xbc\xff\x17\x7e\xd7\x33\x3f\xe6\xb9\xaf\x7f\xf3\xa7\xfe\xfc\x9f\x7d\xcb\x03\xa5\x2f\x9b\x4f\x7b\xce\xb3\xfe\xe3\x9b\x3e\xed\x5d\xbf\xf4\x7d\xfe\xdc\x3f\x7d\xfa\x17\xbc\xd3\x2f\xfd\x85\xdf\xf2\x33\x4f\xfa\xeb\xef\xfa\x53\xef\x25\xff\xfe\x5b\x9f\xd3\xdf\xf9\xfb\x1f\x28\xfd\xf8\xf7\xfb\xf7\x3f\xff\x7e\x2f\x79\xc5\xbb\xbc\x31\x3c\xff\xd9\xcf\x7f\xf2\xa7\x7c\xa5\x78\xa7\xdf\xf3\x13\x7f\xe7\xdd\xfb\x57\x7e\xed\x97\x7e\xdb\xcb\x5e\xf5\xca\xa7\xfe\xd3\xdf\x10\x1b\x3d\xea\x5b\x7d\xdc\xae\xbb\x6e\xbf\xc6\x66\x37\x47\xa2\xec\xb2\x1c\x25\xb9\x5e\xd7\xd5\xe1\xd4\x27\xbd\xf2\x15\xe4\xa9\x4b\x89\xc7\x49\xce\x62\x44\xf6\xe0\x8e\x5f\x32\xf3\xd5\xa4\x73\x4b\x7b\xb2\x71\x29\x77\x39\x41\xc7\xb2\x46\x6d\x55\xd9\x7d\x64\xc5\xf4\x41\x4b\x00\x59\x4e\xca\x70\x0e\x75\xd5\x3b\xae\xd1\x99\x18\x72\xe7\x70\x9e\xcc\xe6\xb6\x0a\x37\x5b\xa2\x1d\xe3\x85\x8c\x0c\x0e\x67\x0b\x2e\xea\x12\x3a\xd3\xf4\x39\x38\x2a\x60\xb4\xe9\x0e\x69\x8b\x91\xa3\x9d\x25\xb7\x6d\x1e\x81\x2f\xce\xf4\x3a\x94\x28\xcc\x22\xe2\x93\x3b\xc9\x48\x48\xe4\x3d\x94\x27\xf0\x9f\xa8\x6b\x36\x7b\xc7\x12\x95\x39\x90\xf6\x76\x21\xd2\x20\x65\xd6\xc7\x78\x4a\x7b\x6c\x93\xe1\xb1\x5f\x43\x31\x75\x68\x87\x86\xd9\x4e\x4c\x96\x14\xe7\x13\x83\xc7\x75\x07\xd9\xc3\x31\xb8\x58\x50\xdd\x2d\xa4\x1c\x9d\x96\x59\x4e\x41\xc4\x05\x22\xd4\x53\xc4\xf6\xbc\x24\xac\x60\x50\x3d\x87\xbc\xe2\x16\xf2\x1d\x0e\xc4\xec\x30\x94\x0e\xe2\x17\xed\x7d\xc2\xd5\x24\x28\xbe\x5f\xac\x80\xb6\x20\xdb\xa7\xee\xed\xdc\x0f\x5d\x61\xf1\x97\x19\xd8\x2a\x02\xcb\x1d\x07\x52\xa5\x26\xc5\x78\x0b\xa3\x57\x80\x06\x86\x15\xae\xe1\x51\xb5\x64\x5f\xbc\x9a\xd6\x52\x47\xd4\xf5\x3d\x43\x40\xf6\x22\x43\x3f\x1e\x58\xa2\xfe\x3a\xb8\x3c\x0a\x87\x1f\xb7\xd8\x28\x49\x93\x1d\x0b\xa0\x46\xa0\xb6\xad\x8f\x85\x31\xa7\xae\xac\x6a\x8c\x65\x01\x83\x33\x46\x73\xb2\x33\x45\x61\xbc\x36\x13\xdd\xe1\xae\xca\xce\x6c\xcb\xe6\xae\xd4\x2f\xe5\x90\xcc\xa7\xf5\x57\xb7\x27\xd7\x4d\x68\x9e\xa6\xac\xc1\x1d\x40\x93\xb8\x6c\x2e\x3b\x9d\x7a\xcb\xf9\x8e\x5c\xc2\xe2\x54\xd6\x14\x46\xb0\x83\xbc\x0f\x12\x31\x15\x7c\xa1\xdd\x49\x2f\x45\x75\x61\xac\xdd\x93\x3e\x25\x6c\x80\x88\x85\x84\x0c\xeb\x0e\x7b\xac\x66\xf9\xa5\x7b\x10\x03\x05\xb0\x4e\xcc\x43\xde\x8f\xdd\xa4\x25\xa4\x66\x8c\x07\xed\x06\x66\xb1\xba\xcc\x1d\x3e\xf5\xb9\x6f\xfa\x96\xa4\x48\xe0\x27\x0c\x8d\xaf\x98\x5d\xc6\x27\x3c\x4c\x23\x8a\x34\x4b\xb3\x75\x60\x14\x09\xc3\x79\x9e\xf6\x0c\x47\x86\x47\xb6\x59\x29\x07\x6e\x11\x1b\x8d\xd4\x53\x05\x0a\xe2\x33\x86\xb3\x3b\x24\xaf\x53\x27\xbc\x02\x73\x6a\xcb\xe4\xf2\x86\xef\x0d\x37\x36\xb6\x89\x1b\x72\xb5\xef\x77\x6c\x5b\x78\x2c\x62\x03\xec\xec\x47\x90\x32\x10\xce\x2a\x81\xcd\xe8\xed\xba\xb8\x92\x54\x56\x3d\x27\x42\x2c\x91\x55\xb4\x5c\xd6\x9c\xe9\x0e\xf7\x2f\x1a\x14\x44\xfb\xa6\x75\x3c\x77\x15\x53\x3a\xad\x70\x49\x99\x21\x98\xb7\x9e\x6e\x1e\x05\x48\xaf\x9d\x80\x79\xc1\x4c\xb6\x00\xa2\xcf\x0f\x87\x91\x3c\xaa\x73\x7b\xcc\xe0\xe2\x5d\x09\xb1\x2a\xbd\x5f\xa7\x59\x9e\x6e\x5b\x5b\xd9\x0c\xb5\x1b\x83\xec\x41\x85\x96\x23\xf3\xad\xb6\xc0\x4f\x74\x9c\x76\x87\xea\x0e\xca\x89\x86\xb9\x89\x65\xdd\x8e\x5b\x75\x4e\x5d\x34\xe8\x8a\xb8\x5d\x62\x9f\xfb\x4c\xa1\x82\xea\xcf\x2c\x1d\xc9\x07\x35\x97\x83\xb9\xa7\x74\xc7\x4d\xbc\xd8\x13\x24\xb8\x7a\xab\x36\xc1\x72\x3e\x8a\x72\x6b\xeb\x0c\x23\x45\x1c\x58\xc3\xa0\xe5\x4f\xc4\x63\x9a\x90\x65\xe3\xe3\x46\x6f\xb9\xb2\xc3\xf1\xd8\x19\x68\x04\xdb\x4b\xa1\x53\x4e\x83\xf6\xd5\x0c\x3d\xf0\x6e\x64\x5c\x05\x46\xa2\x94\xa4\xe8\x28\x6b\xdb\xa4\x39\xd2\x71\x87\x3f\x25\x8b\xc9\x0c\x3f\x2b\x51\xbd\x8c\xf3\xd2\xd6\xe9\x6c\xc3\x08\x26\x99\xc2\x2d\xf6\x89\xea\xd3\xaa\x0a\x27\xaa\x0c\x09\x5f\xa4\xb6\x77\xf0\xd9\x73\x0f\xdd\x65\x8d\x93\xe6\x76\x6f\x57\x76\xa1\xd3\x15\xea\xb9\x3c\x55\x57\x3d\xc9\x89\xb4\x95\x6e\x6b\xe7\x25\x81\x5c\x52\x8b\x75\x87\x08\xed\x2a\x3b\x03\x11\x75\x2b\x25\xc2\x4d\x4a\xcb\x4a\x4c\xa3\x1e\xd5\x9c\xb6\x5d\x6d\x18\x7d\x48\x5b\xb3\x39\x72\x61\xf3\x50\xe1\x74\x37\x58\xbd\x33\x5c\x1c\x0d\x94\xa0\x61\x15\x4a\xce\x8d\xb0\xe8\xd6\x80\x29\xbb\x48\xec\xea\x7d\xbb\x00\xdb\x84\x51\x91\x4f\xe5\xb7\x4c\x48\x5b\x0f\x2b\x19\x1f\x35\xeb\x3d\x6e\x4f\x46\x22\x85\xb4\x92\x0e\x5c\xa5\x6b\x7d\xce\xb2\xe0\x42\xa7\xb4\x8b\x43\x70\x80\x6d\x37\xc1\x32\xd0\x46\x58\xc9\x1c\x94\x5d\xed\x0e\xca\x89\x55\xcb\x27\x5c\x83\x97\x58\xf7\xd5\xa0\xbf\xd4\xe1\x1c\xde\xa3\x68\x32\xf8\xbd\x69\xb1\x57\xb3\x76\x58\x8a\xde\x13\xd0\x9e\xf0\x72\x07\xc4\x81\x14\xa3\x53\x57\x5c\xe8\x18\x10\x35\x4c\xb3\x81\x92\x44\x60\x68\x1a\x41\x01\x1c\xae\x21\x7d\xd2\xb2\x70\xd1\x98\x22\xd6\xfa\x1b\x46\x01\x8a\x78\x14\xc0\xa9\x3a\xc7\x3a\xa0\x39\xaf\xe8\xcf\x96\xce\x28\xa5\xd9\xfb\x7e\xa2\xd6\x48\x6e\x67\x96\x43\x58\x18\xc7\x96\xce\x72\x4b\x2e\x61\xb9\x28\x2a\xef\xb0\xb4\xe8\x99\x1c\x27\xaa\x8e\x9d\x72\x59\xc8\xb5\xd0\xd3\x4e\xd4\x10\x0a\x1b\x0c\x73\x70\xc8\x00\x76\x69\xdc\x91\x9d\xc0\xf4\xe4\x32\x50\x27\x8e\xcb\xcf\x42\x31\xae\x7b\x4d\x47\x58\xbb\xdf\xa4\x3d\x2f\xa1\xda\x3c\x76\x4a\xe8\xb5\x00\xbf\xba\x5b\x75\xa5\x3b\xa8\x48\x00\x48\xa9\x9b\x2a\xe8\xd8\x19\xae\xec\x2a\xf6\xc2\x61\xae\x70\x90\xea\x67\xdc\xec\x99\xf9\x9e\x46\x88\x7b\xe1\x58\x9f\x34\xa2\x3b\x6e\xfd\x98\x58\x47\x47\xb1\xeb\x23\x2a\x21\x3d\x9c\xd0\x7a\xb8\xb0\x45\xd8\xa8\xb1\xd6\x34\xb1\xd5\xd4\x19\x53\x63\x6c\x55\x74\xd3\xe5\xfe\x70\x18\xc9\xa3\xd8\xa1\xc7\xcc\xaa\x53\x24\xda\x09\xf7\xdd\x5e\x51\x6f\x7d\x2a\x82\xf7\x9a\x76\xb0\x3b\xa9\x7a\xd1\xa7\x71\xab\x00\x73\x8c\xc3\x53\xb2\x37\x87\x28\xbd\x65\xfb\x5c\x8f\x65\xc7\x55\x4c\x8f\xf8\x18\xfb\xa1\x01\x08\x6e\xa4\xba\xb5\xb2\xaf\x4b\xef\xcb\x19\xa7\x4d\xc7\x95\xa8\x22\x4f\x1e\xe9\x75\xc7\x69\x15\x33\x0e\xed\xc5\xa7\x8e\xd6\x0a\x22\x5c\xd5\xdb\x71\x42\x70\x1e\x9b\x81\x75\xa7\x23\x13\x58\xb1\xa0\x57\x3c\x31\xdb\x2e\xee\x46\xbf\x63\x07\xce\x34\x83\x67\xcb\xb6\x47\x22\x31\xb7\xb9\xad\x9e\xe7\xd1\xb9\x41\x46\x78\xae\xd7\x02\xf6\x54\x65\xcb\xa3\xa3\x63\x32\x13\x26\x61\x77\x5c\xc5\x6c\x57\xc9\x9a\x29\x5d\x8a\x45\x8d\x24\x1e\xed\xb0\x95\x9b\x8d\x2e\x0f\x4c\x3e\x8d\x12\x76\xbf\x2e\x1f\x64\x4d\x08\xb1\xcb\x9e\xb7\x64\x0c\x69\x1c\xd6\x65\xa6\xdc\xd5\xc4\x98\x1c\xb8\x8d\x33\x6a\x0f\x4a\xc9\x47\x92\x1b\xaa\x68\xee\x99\x79\x52\x80\xa1\xe0\x68\x9b\x10\xd7\x2d\x87\xc4\x9b\x96\x1e\x50\x85\x1a\xdb\xa2\xda\xda\x05\xf3\x7e\xa6\xe2\x65\x64\xd3\xcd\x83\x80\xcd\xd1\x90\x32\x3d\x50\xa9\xca\x07\x76\xdc\xb2\x6d\x01\x41\xfa\xe4\x4e\xde\x5a\xc3\x23\xf8\x20\xf8\x19\xf5\xa5\xb7\xa5\x80\xb5\x73\xb3\xd4\x79\xa3\x2e\x0f\x4c\x5f\x10\x60\x54\x72\x7d\x78\x2c\x7a\x14\x9f\xfc\xb8\xc5\x46\xe9\x5c\x6b\x13\x79\x47\x9c\x56\x83\x00\xe1\x79\x80\x38\x36\x74\xed\xc8\xc9\xc9\xf8\x60\xdd\xb1\xee\x6a\xb8\x8e\x2a\x78\x68\xe2\x8e\xf6\x97\xaa\x7c\xa6\x22\x41\x60\xc1\xb2\xd2\x9b\x53\xab\x31\x82\x83\x1b\x7a\x9b\xd2\xce\x0d\x6b\xb6\xea\xa4\x21\x41\x40\xf3\xb9\x5d\xf9\x0e\x3d\xe5\xca\x1c\x5c\x96\x5c\x50\x4d\x93\x54\xef\x10\x39\x44\x90\x89\x34\xd0\x0d\x4a\x59\x90\xf5\xce\x10\x78\x9e\x51\x78\xa6\x34\xda\xd8\x1d\xc4\xdd\x64\xd7\xe8\x9b\x3d\x16\x56\x79\x63\xd4\x31\x93\xf5\xb5\x0d\x47\xd9\x25\xa8\x0f\x71\xcd\x70\xa8\x85\x90\x6c\xba\xe1\x4b\x23\x72\x8b\xd7\x94\x5b\x6a\xa1\x35\xc4\x8e\x09\xf1\xa0\xe7\x1d\xed\x24\x6c\x57\xb0\xc1\xf0\xd9\x96\x86\x28\x4e\x2f\x77\xd5\x31\xd7\xa1\xe1\x93\xda\x3b\x3e\x05\xac\x12\x2f\x29\xf6\x3d\x5e\x6d\xf6\x0b\xc6\xe6\x57\x2e\x1d\xba\x9d\xca\xa9\xea\x69\x8a\x82\x27\xd6\xa7\xbd\x60\x84\xec\xc8\xed\xba\xc3\xd9\xc8\xef\xbd\x72\xdb\x3c\xbe\x68\xd7\x0b\xa5\x6c\x93\x0d\xcd\xfb\x79\xf0\x98\x96\x60\x55\xe0\x2c\x0f\xd7\xc9\xc5\x26\x8b\x6e\x1d\xe5\x0e\xce\x85\xa7\x0d\xb2\x64\x37\x10\x21\xc8\xc1\xa4\x48\x2e\x81\x14\x15\x84\x84\xd2\xd2\x3e\xa8\x6f\x2e\x67\x11\x36\xbd\xc5\x11\x78\x15\x99\x3c\x04\x2e\x8f\xda\x40\x3d\xee\x1b\x0c\xed\x59\x60\x95\x55\x08\x8b\xaa\x6b\x87\x6d\x6f\x1e\x76\x35\x8c\xbe\x04\x02\x73\xa2\xa1\x54\x4b\x24\x26\x31\x0e\x1a\x95\xba\x25\x96\xbb\x0d\x05\x0a\x8e\x69\x1d\x49\xe7\x48\x36\xb8\x9f\x06\xd2\x50\xd1\x3a\xb2\x6a\xb9\xcd\x43\x91\x83\x5e\x98\x22\xd2\x8d\xd7\x53\xdf\xe2\x7a\xd7\xc6\xb4\x2b\x9b\xcc\x0d\x16\x38\x48\x52\xbc\xcd\x75\x73\x9e\xe2\xdd\x8e\x29\x8e\xbe\x4a\x90\xaa\xb8\x5c\x82\x01\xbd\xc8\x7b\xd2\x38\xe0\x26\x16\xee\x75\x81\x0c\x6a\xbe\xca\x14\x55\xe9\x93\x5b\xcb\xd9\xce\x1d\x94\x46\xee\x9c\x8c\x68\x72\x17\x45\xa2\x73\xef\xf0\x96\x9e\x21\xb6\x0b\xc5\xfd\x98\x9b\x4b\x27\x94\xe8\x22\xce\x85\xdc\xe2\x45\xfa\x86\x6d\xdd\xe9\xc9\x29\xcd\xd6\xe3\x79\x5e\x48\x91\x78\x66\x76\xc7\xb6\x28\x15\xd2\xa9\x1a\x40\xd3\x35\x51\x98\xa0\xf2\x10\x6a\x21\x5a\xe0\x64\xf6\xa4\x5a\xa3\x8b\x93\x6d\xdb\x3c\x21\x56\xa5\xb4\xd7\x7a\x47\xb0\x1d\xe8\xca\x9c\x16\xc7\x01\xe5\x70\x6d\x0b\xe4\xc2\xa9\x99\xce\x90\xc1\x73\x46\x4d\x9d\xce\x5e\x8f\x75\x1e\x12\xba\xbc\x2f\xbd\xb6\x3b\x5c\x9e\x2a\xdb\xdc\xda\x4c\x23\x6e\xdf\xeb\xe9\x8f\x0e\xc3\x5e\x22\xe1\xec\x38\xe0\xe9\xdd\x81\x20\x55\x83\x1f\x48\x38\x7b\xf5\xb0\x27\x7b\x3d\x0c\x2e\x8f\xda\x59\x3f\x66\x70\xf1\xd7\xca\x9b\xc3\xeb\xcc\xca\x8f\xa9\x6a\x2f\x0e\x7b\x58\x71\x3a\x6c\x23\xf9\x0c\x12\x95\x78\x4e\x43\x70\xf0\x59\x5e\x9b\x16\xeb\x8e\x26\x3c\xe2\xe0\xa7\x9d\xb4\x56\xb7\x93\x7d\x24\x37\x5d\x3b\xf7\x85\x0f\xca\x9c\x01\x47\xc3\x7d\x5b\x47\xa4\x29\xf4\x2d\xd3\x59\x73\xbb\x25\xd2\xc5\x17\x04\x21\x3f\x19\x43\x4c\xf7\xa0\xe5\xe1\x20\xad\x78\xeb\x39\x38\x3f\xd0\x82\xf0\x94\x04\x35\x99\xfd\x46\xd1\xe6\x22\x02\xe0\x8e\xf7\xa4\xb9\x6a\x2f\x85\x6f\x5b\x75\x29\x7b\x18\x88\xe6\x41\xe7\x95\x73\x77\xa2\x4d\x8d\x2e\x17\xf1\xb0\xbb\xdf\xa1\xa9\xfa\x04\xc9\xdc\xa1\x21\x64\x24\xee\xa8\x50\x02\xe1\xbe\x79\xb6\xac\xd8\x69\x24\x26\x86\xb3\xe5\xb9\xce\x90\x62\x27\x29\xa0\xb6\x17\xd3\x1a\xe1\x93\x44\xc9\xef\xf0\xbd\x20\xfb\xd9\x06\x3e\x42\xcc\x85\x77\xec\x80\x51\xa7\x2c\xbb\x06\x91\x8a\x75\x21\x03\x59\x3a\x43\x28\xb3\xc0\xd6\x4d\x47\xfe\xca\xb7\xbc\xfa\x44\x64\x1a\xd7\x0b\x47\xaa\x4f\xb8\xcc\xa8\x73\x1e\x50\x6f\x05\x5f\x83\x1f\x5b\x58\xe7\xe0\x58\x14\xb0\xdc\x6a\x29\x81\x69\xf8\x75\x4b\x3c\x71\xd1\x71\xab\x16\x81\x0d\x2b\x07\xbb\x92\x40\xe4\xa6\x33\x51\x87\x11\x0a\x23\xaa\x9b\x16\xb9\x6f\x2a\x0f\x72\xd8\x33\x1f\x8e\xf2\x87\xc4\x46\x2f\x7d\xc6\x57\xff\x91\xbf\x60\x7e\xed\x2d\xbf\xf3\x8f\x7f\xd5\x2f\xbf\xd7\xe7\xfd\xf8\xcb\xfe\xf9\x67\xbe\xfb\xcb\xbf\xb1\xfc\xca\xeb\xdf\xf8\xbc\xdf\xfe\xb7\xbf\xfb\x35\x9f\xf7\x5f\x7f\x93\xd8\xe8\x23\xd8\xcf\xae\x77\x7a\xc1\xfb\x7d\xec\x17\x7f\xff\x47\xfe\xdc\x07\x3f\xff\x33\xbe\xf3\x5d\x3e\xeb\x7b\xdf\xf3\xd9\xdf\xfd\x47\x9e\xfa\x2e\x3f\xf3\xe6\xbf\xfa\xba\x4f\x79\xc3\x83\x76\x45\x7f\xec\x4b\x3e\xfd\xb7\xbd\xfc\x27\x7f\x81\x7f\xc5\xbf\x7b\xf2\xcf\xff\xd4\xb3\x7f\xf0\xcf\x7d\xe3\xbb\x7c\xe7\xbf\x7b\xc5\x67\x84\x7f\xfc\x67\xbf\xe2\xc3\x5f\xf3\x23\x4f\xfd\xf3\x1f\xf6\x40\xe9\x33\x5e\xf5\x0b\x1f\xfd\x3d\x40\xfe\xcb\x1f\xfd\xc7\xff\xbf\x3f\xf9\xfb\xc1\x8b\xbe\xe1\xaf\xfe\xde\x1f\x7b\xd7\xe7\xbc\xfd\x1b\xff\xc0\x2b\x5f\xf1\x09\x5f\xf6\xfe\xdf\x94\xd1\x03\xa5\xec\x4b\xfe\xcd\xdb\xfe\xcc\x93\x9e\xfb\xf5\xef\xff\xa6\x97\xff\xcc\xf3\x3e\x72\xbd\xf0\xdb\xbe\xfd\x43\xff\xd1\xef\xfe\xb5\x6f\x7a\xc6\x7f\x7c\xc9\x4f\xfd\xc7\x0f\x7a\x97\x4f\xfd\x8b\x0f\x94\x7e\xd8\x87\x3e\xed\x69\x9f\xf2\xb2\xb7\x7f\xd2\xdb\x9e\xf5\xe4\xf0\x13\xf9\x3d\xbf\xd1\xff\xd3\x97\xfe\xe7\xff\xed\x53\x5f\x87\x9e\xf5\x73\xcf\x2b\x9f\xfa\xcc\x9f\x7b\xea\x03\xa5\x1f\xf8\x66\xf1\x17\xfe\xeb\xb3\xf9\x1f\x7f\xfd\x27\x7f\xd2\x5b\x3e\xe2\x29\x7f\xd0\x7e\xf9\xbb\xbf\xc7\x5b\xff\xda\x17\x3e\xff\x27\xbe\x55\xff\xe4\xcb\xbe\xe1\x0d\x3f\xfc\x81\x0f\x94\x7e\xd3\xdf\x7f\xe6\x67\xbf\xf1\x29\xfe\x1f\x7c\xc8\x9f\xfe\x7f\xbf\xe0\xf7\x7d\xcc\xcb\x5e\xf4\x8b\x6f\xfb\x91\xdf\xf1\x59\xfc\x5f\xc0\x2f\x4d\x9f\xdb\x3e\xf6\xa3\x9e\xfd\xce\x0f\x94\xbe\xfe\xab\xbe\xe5\x39\xbf\x3f\xa0\xff\xfe\xf2\xcf\x7e\xd5\x17\x7c\xf0\x47\x7e\xf4\xaf\x95\xa7\x3f\xe5\xb9\xff\xed\x5b\x3f\x17\x7d\xcd\x57\x7d\xc9\x3b\x7f\xe8\x4f\x3e\xeb\xd3\x7e\x43\x6c\xf4\xa8\x6f\xf5\x31\x23\x3c\x62\x91\x6d\x64\x1f\x79\x93\x1a\x5c\xda\x38\xb7\x5d\x52\x21\x4a\xab\xcd\x94\x6b\x69\x2f\x61\x9a\x33\x91\x62\x41\xf3\x81\x0d\xa6\x77\xf8\xe8\x44\x45\x8a\x26\x0d\xcc\xd9\x4c\xa1\x2e\xd5\x79\x49\xc8\x3a\xb5\xce\xe0\x53\x11\x5e\xec\x2c\x9a\x6d\xa1\x0b\x75\xcd\x83\x90\x7b\x0c\x10\x2f\xde\x92\x8b\x5b\x3b\xe0\x68\x10\xf8\xa1\xe3\xa6\x60\x44\x84\x63\xec\x4f\x0a\x74\x12\x23\x12\xb5\xab\xa8\xf2\x8c\x98\x94\xc4\xee\x88\x65\x4c\xde\x2b\x66\x8f\x48\x49\x98\xe2\x00\x3c\x6b\x11\xe5\x85\x49\x13\x4d\xc4\x4c\x20\xd8\x57\xed\x99\x9c\x96\x10\xc2\x3d\xde\xd4\xba\xa3\x59\x71\xd8\xc1\xb3\xcb\x15\xa1\x53\x5b\xd6\x70\x70\xa2\x2f\x1d\x22\x1c\xbc\x0a\xce\xaf\x7c\x20\x11\x87\x90\x22\x50\xc8\x7b\xb1\x68\xbf\x83\xec\x71\x83\x35\xc7\x11\x8e\x79\xcb\x9b\x9c\xd5\xa6\xd1\x21\xf1\xb8\xb6\x5d\x4b\xbb\x73\x97\x75\xd2\x02\x51\x7e\xd5\x6d\x4f\x2e\xc3\x7c\xc7\x84\x7c\xcc\x90\x7c\xf7\x93\x78\xc3\x76\xd9\x98\x7f\x47\x78\x4e\x86\x7d\x5e\x3b\xd8\x2d\xf2\x57\x83\x91\x0f\x03\xcb\x0e\xce\xe0\x3a\xbc\xe3\x3d\x43\x81\x54\x22\x36\x7c\x1a\x0a\x33\x23\x21\x15\x7f\x94\x0d\x1b\x60\x0e\x6e\xe6\xc9\xf0\x71\xd1\x81\xe8\x26\x4f\xce\xf2\xb9\x71\xaf\x1f\x08\x1a\xff\x75\x70\x79\x14\x0e\x3f\x66\x70\x99\x8b\x46\xcd\x19\xba\xa0\x38\xba\xa7\xb6\xec\x85\x95\x0b\x5b\x33\xa2\xf6\xe7\x7e\x30\x9e\xea\x40\xa3\xe7\x43\x77\x0c\x78\xe1\xfe\x8e\xee\x7f\x59\x63\x7c\x48\x97\x3d\x2f\x76\xc4\x03\x07\x91\x8e\xe2\xba\xd6\x66\x6e\x23\x88\x46\xd7\x1c\x46\xaf\x42\x63\xa4\x39\x11\x54\x1e\x18\xea\x1f\xa3\x36\x22\xc3\x50\x81\x60\x21\x0b\xbb\x75\x72\xec\x92\x22\xa9\x49\xc1\x23\x25\x35\x5c\x1f\x6c\x15\x38\x2f\x7b\x5d\x19\xec\x3b\x3b\xcd\x1d\x97\xf9\x94\x29\xe4\x4d\x99\x15\x8a\xc1\xc1\x8e\x86\xda\xf5\x7e\xf2\x0e\xc4\x90\x2c\xb1\x23\x51\xa4\x05\x99\xdd\x83\x8d\x36\x6e\x2e\x79\xa5\x3b\xe2\xce\xe1\xda\xfc\x79\x0a\x78\x74\xac\x93\x45\x07\x15\xc8\xf4\x21\xcc\x70\x89\x96\xda\x5d\x55\xb0\x8f\x93\x13\x93\x6a\x93\x75\xce\x90\xee\x70\x63\x5e\xb8\xea\xa0\xb9\x41\x5c\xb5\xde\x05\xa4\x68\x3b\xba\x0c\x67\xdc\x1c\x33\xca\xab\xb3\x45\x01\xe7\xae\x48\xb8\xc6\x61\xf4\x46\xf9\x1d\x87\x30\xfb\xa9\xb6\x0b\x65\xc1\x2c\x61\x17\x3d\x24\xa2\x96\x24\xe5\xe1\x65\x82\x6c\xb1\x6d\x76\x9e\x78\xa5\xb3\x55\x47\xdc\xca\x19\xaa\x3b\x3c\xa1\xe9\xa5\xf7\x1d\x4f\xe0\xfd\x71\x36\x77\x49\x03\x67\xe7\x3b\x24\xd8\x1c\x04\x3d\xd1\x3d\x32\x18\x32\xf6\x6d\x51\xec\x35\xec\xb8\xd6\xeb\xe1\xbc\x80\x47\x75\x6e\x8f\x19\x5c\x24\x09\x4d\x08\xea\x24\xf6\x28\x01\x25\x43\xc8\xa4\x5d\x60\x29\x8a\xc0\xe1\x2c\xa6\xdd\xe3\x6b\xf1\x2b\x80\x59\xf1\x0e\x42\x63\x77\x9c\x27\xaa\x03\x05\x5e\x1a\x09\x25\x36\x07\x30\x17\x6d\xf2\xcc\x23\x08\x7a\xb5\x3d\x4d\x46\x18\x3b\xf5\xc5\x3b\x1b\x43\x67\x20\x19\x65\x77\x3c\x44\x57\x9a\x50\x2f\xde\xed\xa6\x86\xe2\x10\x46\x5b\x01\x38\xa6\xb2\xd5\x52\x2a\x4f\x16\xb0\x41\xe1\x24\x27\x3b\x03\xc1\x83\x8a\xc4\xef\xf0\x14\x52\xa7\x69\x76\xe3\xf4\xbc\xc4\x36\xe3\xbe\x6f\x72\x93\x6a\xe6\xaa\xcc\x8e\x70\x27\xce\xb0\xe1\x8e\xd5\x36\x0d\xbb\xe3\x13\xcd\x08\xee\xf0\xfe\xdd\xbb\xb7\x5a\x0e\x18\xb0\x6c\xc3\x77\xea\x66\xba\xdc\xe9\xc5\x06\x50\xec\xea\x9a\xad\xce\xdd\x53\xc9\x4c\x04\x35\x5d\xfc\xf0\xe2\x0e\xf9\x17\xad\xb5\x1e\x56\xa4\xd3\x13\x12\x4b\x65\x40\xa0\x49\x8a\x2c\xe0\x42\xd7\x8a\x9b\x38\x72\x0b\xbd\xb4\x22\xc3\xb6\x4f\x92\x34\xb8\xc3\xfb\x97\x0a\x07\xda\x91\x53\xd7\x61\x67\xd1\x1c\x34\x3a\xb2\x33\x02\x41\xb4\x73\x32\x3d\xf7\x09\x28\x60\x9b\x60\xbc\xd0\x43\x1d\xde\xb9\x72\x87\xda\x97\xb5\x16\xa7\x1a\x18\x32\x57\x69\xcc\x97\xd2\x8a\xf1\x56\x45\x2a\xe7\x51\xf4\x4a\xc3\x42\xe9\x42\x2d\x3a\xfa\xa3\x77\x25\xe0\x03\x76\x30\xbf\x0e\x2e\x8f\x9a\xf5\x1e\xf3\xca\xae\xdb\xa6\x37\x41\x6b\xca\xc1\xa6\xd3\x62\xad\xaf\xa2\xeb\x56\x64\xd9\x4a\x03\xa0\xd1\x68\x9a\xc0\x14\x70\x22\x0e\x03\x41\x5d\xb7\x5c\x53\x9d\x2a\x8c\xce\x8f\x96\xe4\x51\xac\xd0\xc5\x9d\xd2\x11\xb3\xf1\x65\xa4\x25\x3a\x0f\x12\x94\x41\x3b\xdf\xa8\x01\x5d\xc0\xad\x88\xfd\x8e\x4d\xbc\x77\x4e\x8c\x0b\x1c\x92\x9e\xe8\x3a\xb7\x2b\x8c\x3c\x6d\x9d\x3c\xcd\x01\x84\x8e\x3b\x38\x21\x9a\x47\xd9\xcf\x83\xa8\xb8\xca\x64\xe5\x86\xfe\x89\xd5\x06\x46\xda\x07\xd6\x71\x37\x4c\x91\xc3\x01\x5c\x2f\x27\xb4\x92\x23\x5d\x93\x9d\x70\x62\x4f\x44\xc6\xd1\x73\x01\x26\x50\xb8\xde\x11\x6c\x77\x1a\x09\xa5\x56\xdc\xe8\x29\x8e\x51\x1b\xb9\xb6\xbc\x8d\x9d\x5b\x08\xe5\xc1\x29\x2c\x4c\xa2\x6e\x7d\x44\xa7\x14\x64\x99\x1d\xad\x3b\x3a\xda\x1d\xad\xba\xed\xc3\x5c\xea\x28\x84\xce\xaa\x88\xe3\x04\xaf\xe6\x25\x63\x1a\x1d\x17\x58\x18\xc1\x03\x24\x79\xf6\x56\xce\x5d\xc6\x5b\x2e\xf3\x75\xbd\x4e\x40\x45\x9e\xce\x1d\x70\x30\x42\x36\x72\x46\x54\xf2\xe1\x2e\x89\x80\x1a\x35\x8f\x2d\xca\xa5\x32\x49\x61\xe8\x31\xc1\x2d\xa7\x04\x9d\xba\xbc\x37\xc5\xf5\xb1\xed\x63\x22\x90\x7b\x41\x67\x4d\x80\x35\xa4\x9a\xc9\x87\xb1\x20\xb9\x68\x39\x80\xe3\x3a\x27\x6c\xa1\xf8\x87\xc0\xe5\x51\xec\xd0\xe3\x0e\x23\x39\x59\x39\x36\x18\x7a\x15\xc3\x85\xb6\x73\x5e\x96\x3e\x49\xdd\xb7\xa1\xd7\xc4\xe3\xa4\x78\xd5\x13\x80\x3c\x33\x80\x50\x30\x9c\xef\x60\x3b\x94\x07\x29\x04\xde\xe4\x3a\x9d\x9d\xaa\x05\x7c\x76\xb4\x45\x6b\x8e\x29\x12\x29\xc7\xbe\x0a\x1d\x1d\x7b\x82\x95\x51\x7d\x92\x23\xdd\x21\x50\x0e\x64\x73\x2c\x82\x69\x4d\xba\xe8\x98\x23\x86\x6b\x12\xbb\x96\x77\x65\x8c\xc3\x1d\x7b\x12\xee\xec\x40\xac\x89\x8d\x57\x5c\x1a\x77\xc7\xcf\x5a\x3a\xdb\xb9\xd0\x4c\x08\x12\xc7\x7e\x2a\x10\x4a\xa0\x5e\xc4\x2a\x09\x18\xa2\x6b\xb6\x07\xbc\x69\x99\x52\x48\xc7\x7e\x6c\xf9\x74\x77\xe8\x29\x47\x9e\x7c\x9f\xd8\x26\xe4\x1d\x5e\x82\x1d\x68\x60\xd7\x69\xce\xd7\xe5\xcc\xd5\x2c\xd2\x89\x31\x5e\x52\x3b\xa5\xeb\xb5\x02\x49\xef\x18\x54\xb7\xa3\x79\xe0\x95\xd0\x64\xed\x40\xd7\x6d\xc9\xa4\xdb\x01\xc5\x71\x72\x04\x58\xb0\xfb\xb9\xaf\x22\x99\x99\xc5\x11\x45\x9d\xa0\xec\x8e\xa4\xc8\x28\x03\x34\x57\x37\xe7\xce\xa7\x29\x50\x48\x82\x7b\xcf\xec\xb2\xa3\x5e\x2c\x9c\x56\x78\x19\x3d\x61\x62\xbb\x50\xe9\xa1\x83\xcb\xdd\x71\x9b\x73\xb8\x93\x1d\xf4\x14\x9b\x59\x8a\x7a\x23\xaf\xed\xac\x60\x3f\xcc\x09\x5c\x98\xb6\xaf\xc1\x43\x2b\x0d\x77\x14\xb2\x57\xd3\xb9\x6b\x7b\x98\x73\x79\x14\x9f\xfc\xb8\xfd\x01\xc6\x31\x2e\x8a\x65\x93\x46\x12\x8d\x1c\x5b\x07\xa0\x4a\xab\x41\x89\x2d\x85\x0b\x1f\xd0\x22\x03\x63\x7a\xed\x3b\xee\xa3\xcf\x5b\x6e\x15\xcd\x52\xd2\x95\x55\xda\x34\x26\xe5\xae\xf6\x3d\x1f\xcd\x01\xbb\xa0\xc6\x0b\xf6\x8d\x31\xc9\x94\x5e\x25\xee\x7e\x38\x11\x43\xbf\xc3\x18\x9d\xd1\x7d\xa8\xad\xc5\x0b\xf7\x01\x28\xe9\x9a\x6d\x76\x46\x48\xc4\xa5\x4b\xe9\x4a\x65\xcf\xd0\xf2\x53\x32\xd1\x22\x4a\xb3\x8d\xfd\xba\xa3\x7f\x5a\x20\x5d\x87\xbd\xe6\x88\xb8\xd7\x31\xf7\x8a\x6a\x06\xdb\xae\x62\x95\x67\xe8\xa5\x6b\xa9\x81\xf5\x87\xd2\x41\x05\x21\x0e\x60\xd2\x1d\xb6\xfd\x60\x41\xb2\x09\x74\x2c\xc1\xb7\x74\x9c\x05\x75\xde\xe2\x42\x16\x26\x17\xd4\x18\xd6\x74\x43\xe9\x34\x54\x6c\x65\x50\xbd\x03\x74\x87\xc2\x95\x41\xcf\x66\x8e\x14\x7b\x22\xf3\x55\xc3\xa9\x6b\xdf\x09\x60\x94\xe4\xee\x7c\x86\x91\xc0\x12\x0a\xbb\x10\x66\x29\x87\xbd\x7b\x25\xee\x18\x97\xb1\xf5\x36\x9d\x7c\x1d\xfd\x60\x98\x40\x8a\x8f\x6a\x28\x9f\x95\x93\x26\x73\x13\xa0\xfa\xe8\x19\xb0\xa5\x47\x89\x8d\xaf\x59\x89\x3b\x86\x33\x7e\x92\xec\x2f\x08\x89\x1b\x45\x5e\x26\x96\xbe\xf5\xe8\xf1\x66\x82\x70\xad\x24\x56\x9c\xcb\xa6\x1e\x3a\x35\x5b\xf7\x3c\x88\xcf\xe7\x43\xe0\xf2\xa8\x0d\xd4\x63\x1e\x8b\x70\x8e\xb2\xbb\x02\xa7\xe9\x1b\x0c\xb0\x27\x4f\x28\x98\xbe\xc4\xb3\x66\x0b\x17\x18\xac\x5f\x40\x6c\x3e\x07\x6a\xc8\xec\xe8\xb8\x45\xc9\x88\x38\x82\xc4\xb1\x71\x91\x4b\x39\xca\xeb\x81\xd5\x36\xfd\x91\x62\xc3\x96\x76\x52\xf7\x76\xa5\xa1\x48\x1b\x6d\x4f\xab\x4e\xa9\xed\x2d\x27\xc8\x57\x6e\xd0\xa7\x34\x14\x45\x41\x64\xc2\xe2\xa1\xf8\x26\x9e\xe8\x10\xd8\xa5\xf4\xc6\x8d\xc1\x50\xb5\x6e\x2e\x62\x2c\x74\xdb\xbc\xc5\x30\x9f\xfb\x74\x36\xed\x76\x5e\x9b\xe2\x50\x9a\x9a\xe9\x1e\x65\xf1\xea\xdc\x81\xa4\xc5\x21\xc4\x27\x69\xd9\x87\x64\x33\xad\x6d\x88\x3b\x54\x09\x94\x1c\xcb\x9f\x75\x2f\xda\x51\x44\x28\x21\x4c\x06\x9b\x31\x93\x79\x2f\x3b\x03\xcc\xc3\xb2\x1f\x10\x7b\xa4\x69\x69\x00\x72\xeb\xd2\x1d\x62\xa3\x48\x8d\x54\x6c\x48\x11\x0f\xbc\x55\x09\xaa\x39\x92\x18\x11\x68\x57\x9b\xd1\x20\xf8\x7e\x4c\x3b\x0e\x2c\xdc\x96\xfa\x2e\x8c\x5f\x77\xbc\x74\x7c\x71\xc6\xba\x04\x1c\x55\xdb\xc4\xe3\x3a\x8f\x34\x8b\x89\x87\xde\x0b\xe0\x1e\x10\x43\x88\xa5\x8d\xb2\x11\xcb\xca\x32\x54\x7d\x4b\x52\xa4\x95\xca\x96\x0d\xe2\x1d\x5d\x94\x95\x70\x36\x4d\xdc\x2e\x94\xd5\x18\xec\xc9\x82\xed\xe2\x3b\x56\x5b\x41\xa7\xdc\xb8\x1f\x8e\x70\xf0\xb0\x6d\xda\xa3\x76\xd6\x8f\xb9\x73\x51\x53\x1e\x65\x71\xaa\x57\xd4\x7c\x04\x46\x31\xdd\x78\x35\x03\x2a\x5c\x09\xaa\x95\xfb\xb2\x82\x8d\x91\x08\xb2\x49\xb8\x62\xba\x25\x5d\x5a\x01\x9d\x5c\x69\x30\xcd\xd9\x84\x69\x87\xce\x9d\xb1\xc8\x06\xa8\x47\x2d\xbe\x9d\x95\xc6\x81\xd8\xe1\xbb\xbe\xda\x58\xa3\x8b\x5b\x82\xaa\xa8\xda\x50\xca\x64\x87\x1c\x10\xa2\xb6\x92\xf7\x6d\x43\x6e\x55\xd0\x60\xe2\xd4\x09\xdd\x99\x31\x8e\xe4\xa3\x43\x58\x29\xd3\x81\xdd\xf1\x29\xd2\x06\xf1\xc2\x20\xb5\x22\x06\x5c\x65\xe1\x02\xc0\x75\xe9\x4e\x28\x65\x6b\xec\xb6\xa3\xbc\xbb\x68\xc6\xc6\x41\x60\x7e\xc3\x2b\xdf\xd1\x84\xf3\xb1\x5c\xc5\x62\x62\x00\xf7\xec\xa0\x3f\x6b\x91\xc4\x72\x05\x35\x02\x3d\x6d\xd4\x6d\xcb\x74\x93\xe9\x8c\xa0\x27\xbd\x91\x8d\xdf\xf0\xd2\x61\xcd\x11\x76\x6d\x5c\xf0\x9a\xda\x14\x2c\x66\x3d\x2f\x79\xee\x7d\xda\x73\x87\xd9\x43\x72\x96\x0d\x9b\x0d\xfb\x96\xcb\x3b\x0e\x20\xee\x19\x8b\x66\x83\x6e\xe7\x98\x65\x6a\xb9\xc3\x03\x18\x09\xa8\x81\x5c\x5e\xc2\x13\xce\xc4\xb6\x03\x20\xe2\xa4\x76\x17\x43\x2e\x84\x9b\xbb\xa3\xbb\xef\x18\x14\x14\xfb\xf4\x04\x30\xee\xae\xec\x67\xe3\xb0\x8a\x2e\xfd\xdc\x01\x0f\xb8\xe0\x76\x20\x6f\xf6\x03\xef\xfe\xd8\x31\x37\xf5\x61\xb1\xd1\x4f\xbf\xf5\x2b\xff\xf3\x17\xbc\xe4\x4d\x5f\xfd\xd1\xff\xe0\x79\xe9\x19\xaf\x7f\xe6\x7b\x7f\xf8\xa7\x7d\xce\x1b\xff\x5c\xf8\xa1\x1f\x7e\xe9\x77\x7e\xe6\xab\xbe\xf5\x83\xdf\xf2\xc9\xbf\x49\x6c\xf4\x3f\x3f\xeb\x47\x7f\xf5\x8d\x5f\xf5\xa1\x3f\xfd\xe3\xcf\xfd\x6a\xfe\xcb\x4f\xfe\x9d\x6f\xfb\x8e\xeb\x99\xbf\xf8\xa4\xb7\xd6\xaf\xf8\x4f\x6f\xfc\xde\x3f\xfe\x19\x3f\xf2\xad\x4f\x7e\xa0\xf4\x45\x1f\xf4\x81\xef\xf5\x4b\xe6\xef\x7c\xeb\x07\xfc\xd4\xbb\x3f\xed\x9f\xbd\xf9\xfb\x7e\x60\xfe\xc2\xaf\xb6\xbf\xe5\x7e\xee\x5b\xde\xed\x8d\xbf\xeb\xc7\x5f\xf1\xf4\xd7\x3f\x68\x82\xf4\x2b\xe4\xdb\x9e\xf4\xf1\x9f\xf8\xdd\x2f\xf8\xa4\x57\x3d\x5d\x3c\xed\x39\xbf\xfa\x82\x3f\xf2\xaa\xff\xf1\x31\xbf\x67\x7e\xc2\x6b\xfe\xc7\xd3\x3e\xe1\xcd\x5f\xfc\x7d\xdf\xf1\xa4\x07\x4a\xdf\x50\xfe\xd9\xd3\x5e\xf5\xa4\xd7\xfe\xa1\x3f\xf1\x71\x7f\xf4\xc3\xde\xfe\x27\x5f\xff\xd2\xf6\x49\x2f\xfe\x84\x4f\xfc\x90\x5f\xfe\x83\x2f\xff\xd0\xe7\xfe\xae\x0f\x7c\xe9\xc7\xbf\xf7\x83\x62\xa3\xaf\x7e\xe5\x7b\x3c\xf5\xe9\xaf\xfd\xe2\xf8\x47\x5f\xfa\x97\x9f\xf1\x19\x3f\xf3\xe9\xd7\x3f\xf9\x13\xaf\xfe\xa0\x57\x7f\xc3\xbf\xff\xaa\xfa\x22\x2b\xff\xd0\x6b\xbe\xe5\x81\xd2\x1f\x7b\xdd\x67\xfe\xca\x9f\xfe\xbf\x5e\xf8\x7b\x9f\xfa\x5e\x7f\xf8\x5f\xbd\xfe\xaf\x7c\xdd\x2b\xfe\xcc\x53\x5f\xf2\xc7\xfe\xe5\x4b\x3e\xeb\xdd\xde\xf3\x2d\xdf\xfd\x7d\x5f\xff\x19\xff\x7b\x78\xa0\xf4\x0b\x7e\xea\x9b\x9f\xff\xbc\x9f\x7d\xdb\x9b\xe2\x0b\x7f\x7a\xfc\xf5\x2f\xfd\x81\x57\x7f\xf2\xbf\x79\xdd\x47\x7c\xcd\xeb\x7e\x7b\x7e\xc6\xff\xf2\xfa\xba\xff\xab\xcf\x57\x0f\xfa\x25\xbd\xe1\x07\x9e\xfe\x43\x7f\xfa\x0f\x7f\xc0\xfb\xf8\xd7\xfe\xe3\xfd\xbf\xfd\xd6\x67\xfd\x12\xfd\xd0\x37\xbc\xf6\x8b\x9e\xf2\xa5\x9f\xf0\x1e\x9f\xed\xbe\xea\x5d\x3f\xfe\xbf\xff\x86\xd8\xe8\x51\xdf\xea\x63\x6e\x1f\x89\x4a\x86\x9f\x70\xa8\xa2\x17\xdc\x07\xec\xc3\xfa\x62\xfa\xda\xf1\xae\x15\x85\x85\x01\xba\x10\x5d\xba\x12\x22\x38\x51\xb5\xdf\x11\xe5\xcc\x1c\xea\x55\xf2\x7e\x1a\x46\xa3\x84\x1e\xe1\xba\xec\x61\xb4\x53\x9d\x8d\x96\x36\x20\x44\xe6\xe9\xd4\x41\x4c\x76\xc6\x53\x5b\x6e\xef\xf0\x28\xab\xfc\x98\x2c\x86\x31\x80\xab\x13\x09\x24\x77\x99\xc1\x9e\xb4\x35\x84\xb5\xec\xc4\x72\x70\xa1\xe1\xc7\xbc\xb6\xcd\xa8\x4a\xda\x1d\x07\xa3\x4c\x19\x62\xd4\xb4\x20\xa0\xa5\x33\x07\x00\x0d\x5a\x39\x03\xe3\xd8\x8a\x15\x1c\x09\xda\x81\x58\xc6\xe1\xba\xd5\x55\x1d\xc4\x31\xdf\xe1\xfd\x9b\xe4\x3e\x8d\x66\x98\xe3\xec\x87\x68\xda\x11\x22\xe4\x91\x28\x04\x28\x0c\x8a\x5c\xe1\x47\xe4\x52\x26\xb0\x9f\xbb\x3c\x98\x10\xec\x0e\x81\x8d\x67\xd1\xbb\x10\x56\x1b\xd8\xe9\xd4\xfa\x66\xf3\xe0\x65\xf7\x00\x39\xd6\x36\x83\xd5\x14\x4c\xd9\xd4\xdb\xa9\xae\xb2\x6d\x57\x2a\x77\xb0\xea\x50\x97\x28\xb3\xa9\x94\xea\x92\x51\x51\x13\xb2\x84\x66\x3c\x9b\xc0\xdb\x39\x8a\xd9\xaf\xcb\x22\x55\xa6\xe6\xc7\x56\x2e\x37\x17\xbd\xa3\x95\x2e\xfe\x50\x3b\xeb\x62\x37\x47\x0d\x15\x45\x73\xd9\x3e\x0a\x50\xc7\xe8\xf5\xd2\x5b\x2c\x2c\x06\x9b\x4b\xcf\xa0\x82\xde\x2c\xde\xc1\xc3\xce\x46\x8f\xc2\xe1\xc7\x0c\x2e\x74\x81\x9d\x6e\x05\x9e\xc3\xd3\x7a\xed\xa7\x8f\x40\x16\x43\xda\x59\x89\x14\x17\x1d\x69\xc0\x34\xb6\x93\xc2\x73\xaf\xf3\xb2\x80\xdc\x22\xe7\xb8\x78\xa5\x92\x40\x77\x3a\x3d\x3b\x50\x9c\x6d\xa8\xe2\x62\xd4\x01\xd1\xd6\x61\x55\xc0\xf8\xe3\x90\x06\x3b\x0b\xcb\xce\x5b\x28\xf4\x16\x95\x78\x48\x87\xc3\x8d\x40\x51\xad\x3f\x47\x67\xfd\xe8\x44\x93\x11\xfb\x05\x4b\xdb\x58\x40\x69\x59\x92\x3c\xc0\xf0\x1a\x05\x95\x73\xbb\x83\xcf\xde\x6d\xa1\x23\x00\x7e\x24\x40\xb0\xcd\x09\x8e\xc3\x64\x4c\x3d\xd5\xf5\x32\x72\x8f\x15\x6d\x92\x65\xcc\x01\xcc\x22\xb3\xb4\x27\x7a\xc7\x9e\xa3\x7b\x75\x04\x09\x9c\x70\xda\x4a\xcf\x65\xb0\xb8\xf2\x31\x9a\xde\x1c\x10\x13\x78\x98\x38\x84\x0a\x8c\xd4\xd5\x84\x9a\x8a\x70\x8b\xc0\xc6\xef\x40\xa0\x63\x45\xee\x9c\xdc\x2b\xaa\x94\xb8\x42\x91\xd3\x66\x00\x8f\x44\x0b\x97\xab\x68\xb9\xca\x21\xd7\xab\xa1\xb6\xe2\x1d\xa6\x34\xf4\x5c\x3e\xd3\x0c\xd0\x8a\x74\xed\x3e\x86\x93\xad\x50\x8e\xb4\xeb\x31\x9b\x39\x52\xe7\x92\xb4\x9d\xf3\x21\x1b\x7f\xe2\xc5\x64\xc7\x1d\x7a\x4a\xca\x02\xe2\x86\xb5\x45\xd7\x65\x4c\x53\x9e\xd6\x62\x47\xbe\xc4\x75\xa1\xab\x05\x57\x7a\x6b\x47\x70\x5c\x0e\xcd\x25\xdc\xf3\x10\xf6\x61\xe2\xeb\x51\x9d\xdb\x63\x06\x17\xd7\x85\x36\xce\x1b\xe2\x36\x75\x1e\x79\x64\x40\xbb\x75\x23\xcb\xa8\x9d\xbf\x80\xe2\x2b\xb0\x4e\x2e\xf5\x0e\x9b\xf6\x34\x1c\xbd\x25\xb4\x4b\x65\x49\x59\x12\xd2\xa7\x5c\x4a\x3a\xa6\x88\x9b\xd1\x84\x56\x77\x24\xa1\x2a\xa1\x9e\xf6\x79\xd5\xe4\xb6\xce\x61\xf6\x57\x8b\xe9\x8e\x8d\xab\x3e\x12\x8b\xd1\xb9\xa4\x4f\xe9\xa0\xcf\x9b\x27\xe0\x89\x17\x45\xd8\xc7\x40\x75\xef\x27\x1f\xa5\x6e\x1a\x13\x1c\x01\xd2\x34\x44\x7f\x07\x09\x58\xbd\xf6\x75\xdb\xc1\x58\x8a\xb9\x94\x9d\x99\x21\x2e\xe0\x8d\x67\xcb\xf2\x05\x25\xf3\x4f\xfc\xf5\x65\xab\xbe\x94\x66\x89\x76\x70\x07\x5b\xb0\x86\x1a\x6b\x1f\xbc\xa4\x8a\x9a\xcf\x34\x39\xc0\xe6\x0a\xcd\x02\xbd\xbc\x3c\xc6\xc0\x22\xec\x96\x40\xc7\x9c\xf3\x55\x51\x7c\x47\x00\x07\xa5\xdd\x8b\xd9\x0b\x48\x66\x92\x75\x34\xb4\x53\x7d\x08\x18\x59\x2b\xad\x84\xb0\xcc\xc6\x37\xed\x54\xe6\x68\x2e\xc1\x9b\x5c\x4a\xdc\xd2\xb9\x64\x9c\xf7\xbd\x12\xcf\x63\x28\xa3\x02\x84\xe9\x81\xb7\x64\x64\x32\xd9\x9f\xf6\xb0\x76\xa6\x44\xf2\x00\x9b\xa2\xe9\x8c\x60\xe5\x3b\x4e\x09\x4a\x14\x7e\x4f\x49\x78\x82\x2a\x4b\xe7\xb8\xac\xab\xf3\x28\xbc\x5e\x2e\x78\xc4\x2a\x28\x0b\x0c\x81\xa1\x2e\x78\x03\x03\x18\xb8\x3f\x7c\x65\xf7\xa8\x59\xef\x71\x8b\x8d\x64\x3a\x28\xad\x4d\x0e\x8a\xa4\x1d\xdd\x29\x05\x37\x53\x63\x38\xa8\x8e\x07\x1c\xf2\x3c\xb9\x82\x8c\xf0\x33\x7b\x60\x49\x77\xe5\x16\xde\xb2\x0a\xd7\x0f\x54\x15\x3a\x18\x76\x32\x76\x3c\x22\x49\x8a\x4b\x4e\x08\x19\x58\x01\xee\x4b\xa4\x1e\xb6\x92\x6b\xe2\x92\x43\x70\x87\x23\xbb\x3a\x56\xed\x42\x0c\xbb\xf5\x1a\xab\xdc\x26\x28\xad\x8e\xa5\x6d\x93\x94\xd6\xd3\x80\x32\x31\x63\x27\x9b\xe0\xe4\x11\x31\x11\x6f\x61\x4f\xcd\x2a\x68\x4b\x97\xdb\x26\x32\xc7\x25\xed\x62\xca\x5a\x45\x07\x3f\x81\xd9\x04\x3a\xa4\x3e\x4c\xba\xfa\x8e\x45\x9a\xdb\xe9\xb7\xe3\x8e\x74\x44\xaa\x28\xef\xa7\x18\x10\x85\x98\xe5\x25\x1c\x48\x47\x22\x52\x62\x4b\x7d\xa1\xba\x62\x0b\x30\x46\x28\xee\x7c\xe7\x17\xb5\xf6\xd0\xd7\x1d\x8e\x0d\xd0\x82\x02\x5a\x6f\xfc\xa0\x73\x3f\x0b\x5f\xce\x6b\x58\x6a\x2e\xb1\x9b\x45\xd7\xea\x8d\x06\x67\x58\x77\x9e\x25\x90\x82\xd9\xdd\x1d\x47\xd5\x28\xa2\xf3\x12\xd7\xce\x69\xdc\xd2\x98\x68\x89\xa5\xed\x96\x4e\x20\xd6\xc2\x6a\xbf\x1c\x56\x48\x95\x96\x36\xb3\xf6\xc6\xa5\x00\xe5\x8e\x7b\x94\x53\x4f\x28\x2c\xa1\xd4\xb6\x65\xe5\x44\x11\xec\x81\x23\xe5\x99\x40\x40\x81\xa8\xa1\x63\x5b\x33\xb4\x61\xc9\x43\xdd\x0b\x01\x3e\x3c\x2c\x36\x7a\x04\x3b\xf4\x98\xc1\x05\x76\x77\x04\x56\x61\x88\x8c\x2f\xd6\x28\xde\xf7\xc4\x21\x3f\x9e\xf8\x55\x25\x6f\x97\xd1\x06\x67\x1e\x75\xe6\x8a\x36\xbd\x74\x4d\x77\x1c\x8c\xb6\xd8\x20\x30\x5c\xed\x38\xe9\x01\x1c\xcc\x07\xc5\x88\x4c\x08\x76\x2e\x0b\x3d\x47\x45\x31\x93\x12\xe2\xf4\xdb\x59\xc4\xf2\xf1\x8e\x5c\x67\x06\xb7\x49\xdc\x56\x8d\x72\xe4\x30\x94\xcb\x32\x4b\x5d\x67\x98\xeb\x4a\xf0\x12\x46\x1f\x33\xd9\x64\x4f\x5e\xfd\x61\x06\x23\xa3\x6f\x77\x88\x8d\x00\xa0\xc3\xcf\xcd\xd1\x80\xc2\xb4\x28\x85\x44\xac\x23\xb5\x28\xa2\x54\xcd\x2a\x94\x26\xa3\x1b\x50\x79\x98\xa3\xb5\x81\xc7\x74\x87\xb6\xb4\x48\x82\x34\x29\x17\xda\xab\xbf\x80\xb6\xbd\x2b\xdc\x68\x94\xab\xf6\x8d\x6c\xfc\x1a\xe3\xca\xb5\x4d\x35\xc8\x13\x83\x5b\x02\xc7\x2d\x92\xf1\x0a\xd4\xb5\xa5\xe2\xd3\x86\x17\x63\xab\x1e\x1c\x5f\x87\xb4\x7c\xcf\xee\x90\x15\x1c\xcd\x15\x44\x67\xdd\x97\xa6\xe3\xd2\x14\x96\x5b\x92\x8e\x70\x8c\x27\xd9\x62\x98\xf2\x68\xf8\x90\x57\x92\x8d\x46\x0b\xcf\xdc\x20\x7c\x62\x60\x4c\x0c\x3b\x8a\x77\x24\x4f\xc9\xce\xed\x2c\xda\xdd\xd1\x4b\x7a\x92\x67\x35\x23\x2c\x28\x50\x9e\xaa\x4e\x6e\x7a\x51\xa6\x96\x9e\x0a\xc6\x64\x73\xc0\x2d\x49\x5d\x1c\x15\xa4\x4c\xc1\x71\xb2\x87\x03\x60\x1f\xc5\x27\x3f\xe6\x95\x9d\x45\x5c\x61\xd1\x47\xf6\x8e\xb8\x2d\xfa\xb8\x23\x8d\x06\xad\x92\x13\x83\xfa\x00\x87\x53\xc1\x67\x2c\xb7\x09\x11\xf2\x22\xc4\x3b\xdc\x7c\xd8\x82\x1c\xb7\x03\x83\xd5\x26\xbe\x98\xcc\xbb\xda\xa7\x9e\xaa\x1e\xc9\xe6\x53\x5d\xf5\xbc\x2c\x91\x7b\xe9\x33\x5c\x03\xc5\xe2\xbc\xbb\x43\x37\x97\x77\xc8\x19\x85\x44\x78\x71\x78\x96\x0d\x54\x52\xd2\xe9\x03\x0b\x6a\xe0\x92\xa8\x64\x98\x84\xe2\x08\x40\xd8\x4d\xde\xd7\x2c\x77\x24\x2a\x8b\x3c\x0a\x31\xf8\x94\x46\xc4\x3a\xd7\xe2\x43\xf0\x95\xd8\xd6\x0d\x58\x32\xa3\x7d\x6e\x44\x62\xda\xb6\xe8\xe1\x99\xf8\x34\x28\xdd\xa0\x8d\xa0\x1e\xa3\x24\xf6\x13\x69\xa2\x29\xb0\x45\x29\xed\xe3\xcc\x7d\xf1\xaa\xa1\xad\x8a\x2e\x79\xbe\xe3\x24\xe2\xec\x9d\x9d\x91\x9f\x7d\xdd\xd1\x4b\x16\x7f\xe1\xcd\xef\x3d\xca\x4d\x1e\x7a\x57\x0c\x33\x89\x97\x3f\xdc\x34\x58\x6c\x96\x48\x59\x29\x1a\x13\x66\xab\x5d\x32\x30\x91\x3b\xee\x79\xa9\x2d\xa1\xba\x51\x80\xd8\xe9\x96\x6d\x3f\x24\x22\xba\x9e\x76\xb9\xe4\xdb\xd8\x5d\xc3\x55\x13\xb6\xbb\x5d\x56\xbf\xb4\xd0\xb9\x96\x3b\x78\x49\x89\xae\x36\xdc\xa4\xa0\x77\x40\xaf\xac\x8e\xa9\x70\xdc\x0a\xcc\xfd\xec\xf8\x04\x02\x45\x91\x92\x28\xb9\xed\xdd\x44\x6e\x47\xa2\x0f\xdb\xa6\x3d\x6a\x03\xf5\xb8\xa3\xeb\x93\xaa\xda\xe0\x83\x71\xc6\x50\xc8\x40\x68\x00\x02\x5c\x1a\x44\x7d\x2c\xbe\xab\xb9\x94\xaf\x69\x73\x1d\xc6\x3c\x5a\xc5\xea\x16\x4b\x28\xdd\xd7\xb2\x1a\xcf\x4d\x6f\xbb\xa5\x42\x1f\x90\x55\x43\x6c\xe6\x1d\x15\x76\x11\xdd\x13\x1e\x8b\x6d\xbd\xa1\x32\x46\xe0\x84\xdc\xa2\x9b\x2b\xa0\x43\x14\x06\xdf\x93\x94\x26\xa0\xb3\x8d\xb0\xf1\x7c\x08\x9e\x09\x58\xc7\xa0\x24\xd9\x1e\x1c\x72\x57\x6d\x25\xb0\x65\xdd\x7e\xc7\x40\x22\xce\x5d\xd5\x64\x25\x25\xdc\x91\x54\x04\x3c\x94\xd3\x45\x76\x99\xc5\x5e\xe6\x09\x77\x58\xa8\x23\x04\x34\x1b\x3b\x6d\x78\x53\xb7\xb0\x60\xd9\xfa\x0d\x0f\x8f\x3b\x6e\xbe\x93\x9d\xb3\x52\x48\x21\xdb\x5c\x57\x95\x65\xeb\x5a\x06\xc8\x23\x8f\xb6\x68\x9e\x65\xf1\x65\x63\x77\xa8\xf7\x00\xd8\x31\x5a\x7e\x67\x1b\x4e\xd4\x20\x29\xe5\x75\x2c\x44\x95\x4b\x30\x8a\x31\x96\x44\x22\x0d\x19\x2b\xac\x8d\xb4\xa9\x27\xbd\x63\x5b\xc4\x58\x41\x25\x01\x44\xe8\x3c\xe8\x75\xd1\x89\xb8\x52\x6e\xda\x98\x2b\xba\x88\xa0\x6d\x96\x55\xf0\x36\x82\x86\x4a\x99\x13\xab\x58\xef\x10\xf1\x2f\x50\x13\xb4\x76\x89\x3d\x5a\x3d\x9a\x0c\x6e\xd3\x4e\x8e\xa0\x49\xe3\x05\x1a\x67\xa6\x16\x08\x40\x65\x45\x75\xd4\x1c\x64\x50\xf1\x10\xb8\x3c\x6a\x67\xfd\x98\xc1\x65\x2b\xc3\x51\xa9\x8c\x8d\x07\xb5\x28\xf8\x18\xc8\x0e\x41\x68\xce\x46\xab\x15\xbb\x9a\x72\x99\xc6\x6e\x46\x49\x4f\x20\x72\x25\xe2\x8e\x1f\x54\x90\xb3\x5d\x4e\xdb\xdd\xea\x7a\x79\x4a\x9b\x02\xb9\x00\x63\x82\x34\x20\x13\xdf\x2e\x38\xe9\x74\x07\x74\x9d\x88\x5d\xe9\x5d\x5d\xb7\x38\x4e\x04\xdc\x7a\xd4\xe0\xc4\x36\xa5\x64\x88\x48\x03\x0b\xec\xc5\x29\x57\x55\xee\xe4\x5e\xeb\x28\x0f\x19\xac\x03\x2b\xc8\xfd\xe0\xec\x8e\x5c\x42\xa2\xe7\x32\x7d\xe7\xb0\xca\x00\xe3\x76\x2c\x92\x96\x40\x06\x39\x71\x4c\x64\x47\x8d\x82\x4c\x2d\x74\x25\xc7\x56\x80\xc8\x9a\xec\x77\xac\xe5\x43\x94\x72\x6b\x4c\x56\xb7\x35\x71\x46\x56\x19\x04\x5c\x68\xb3\xf5\x52\x6c\x0d\x2e\xa4\x3d\xab\x63\x28\x1e\x63\x46\x72\x4b\xd5\xdf\xe4\x44\x12\xe3\x75\x40\x5b\x86\x8d\x60\x33\x95\x87\x52\xb7\xb9\x82\x6d\x64\x3f\xb5\x94\xd6\xd6\x40\x20\x41\x58\x33\x5b\xcc\xa9\xe8\x1d\xbd\x64\x54\xc7\xc4\x68\xee\xa2\xfb\x13\x62\xb7\x8e\x9c\x59\x1e\x59\x0e\xf7\x0e\xba\x03\xf9\x7c\x34\x0d\xf1\xee\x56\x3a\xf4\xb1\x6c\xa6\x77\x3c\x17\x41\xaf\x54\x63\xa7\xc5\x42\x1f\xb5\x91\xe1\x20\x34\x7b\x38\x33\xa1\xfc\x18\x26\x47\x42\xd6\x1e\x4e\xa3\x95\x25\xa1\xf4\xe1\x1f\x08\x80\xfd\x75\xb1\xd1\x77\xfc\xf9\x3f\xf3\x63\xff\xe1\x1f\x7e\xec\x0f\x9f\xcf\xfa\xae\x0f\xfe\xd8\xdf\xf6\xc3\x2f\xfb\xa8\xe7\x7c\xe2\x8b\xff\xdd\xb7\x7f\xc4\xbf\x38\x5f\xfc\xcb\x6f\x7b\xd3\xd3\xff\xd3\xb7\xfd\x26\xb1\xd1\x07\xfc\xc5\x2f\x7b\xd3\x73\x9e\xfc\x7e\x6f\xa8\x6f\xfa\xf0\xf7\xff\x2f\xff\xfe\x47\xde\x08\x7f\xfa\xd3\xde\xf7\x39\x5f\xfc\x3f\x7d\xd6\xf7\x7c\xc9\x33\x3e\xe8\xcf\x3f\xef\x15\xcf\x7a\xa0\xf4\x6f\xbf\xef\xef\x7e\x8f\xf7\xfe\xc4\x9f\x7c\xe1\xeb\x5f\xfd\xb6\x97\xff\xc8\x6f\xfd\xcb\x2f\xf9\xde\xe3\x95\x6f\xf0\x7f\xdb\xbc\xea\x55\x5f\xf6\xa7\xbe\xe8\xd5\x7f\xeb\xc5\x1f\xff\x40\xe9\xd7\xbe\xee\xd9\xe1\x6b\x7f\xf8\x9b\xe9\x3f\xff\xe4\xdf\x31\xbf\xf6\xa7\x2c\xfb\xb5\xd7\xbc\xf8\xf3\xd5\x4f\x3f\xfb\x17\xc4\x67\xbe\xf8\x45\xcf\xa9\xdf\xf1\xd7\x1f\x28\x7d\x97\xcf\x7f\xe6\xc7\xbd\xf8\x79\x3f\xfe\x57\x3e\xf6\x67\xfe\xd7\x8f\x7b\xcb\x67\x3d\xf9\x0d\x3f\xf9\x2d\xf1\xd5\x7f\xe3\xaf\xbd\xf5\x83\x5e\xf4\xde\x5f\xf3\x43\xaf\xfd\x9b\x2f\xd5\x0f\x94\x7e\xe2\x57\x3e\xe5\xc3\xde\xe9\xc9\x9f\xfd\x4e\x9f\xf1\x01\xcf\x78\xee\xef\x7e\xfb\x93\xde\xf3\x7d\xbe\xf2\xfb\x5e\x78\xfc\xb3\x97\xbf\xdf\x3f\xf9\x7d\x5f\xf7\x25\x7f\xe7\xef\xbe\xfd\x93\x1f\x28\xfd\xec\x7f\xf1\xe6\x6f\x7f\xbf\x9f\x78\xe5\x93\xfd\x47\xfd\xd0\xef\xfc\x8a\xcf\x7f\xc6\x57\x7e\xff\xd3\x7f\xe1\x27\xbf\xf4\x1b\xd4\x27\xfd\xb7\xb7\xbe\x6a\xbe\xe0\x73\x5f\xfc\xa0\x0b\xd3\xfb\xbe\xe5\xeb\x71\x78\xb7\xbf\xf1\xc1\xff\xe0\xdb\x7e\xf4\xbd\x7e\xe0\x1f\xbe\xe0\x95\xff\xf2\x17\x9f\xf7\xf3\xdf\xfc\x45\xbf\xf5\x75\x9f\xfe\x65\x1f\xb0\xfe\xc4\x97\x7f\xcc\x8b\x1f\x28\x7d\x2d\xfb\x8e\x3f\xf4\x5d\xdf\xf9\x37\x7f\xe6\xd9\xff\xe9\xeb\x3f\xfe\xe7\x9f\xf4\xe9\x9f\xf7\x7d\xdf\xfa\x07\x7e\xe9\x3f\xfc\xbd\xb7\xfd\xe5\x37\x7c\xc2\x07\xfc\xf2\x7b\xbe\xf6\xf9\xff\xe5\x37\xc4\x46\x8f\xfa\x56\x1f\x33\xc2\x0f\x52\xed\x71\x36\x22\x16\x5d\x8c\x8e\x12\x43\x4a\xa3\xc7\x6d\xa6\x3c\x36\xd4\xc7\x24\x02\x6e\x7b\x67\xcc\x36\x99\x03\x52\xdb\x7e\x87\x4a\x7c\x6a\xd8\xb2\xa5\x5b\xda\x7c\x31\x47\x68\xa9\xe9\x18\x30\x07\xb5\xb5\xba\x99\x8d\xd5\xb4\x19\x6b\xb6\x44\xb6\x53\x5c\xda\xec\x50\xdc\xe1\x5d\x87\x81\x97\x24\x11\xea\xe1\x11\x33\x2d\x60\x26\x4c\xe1\x75\x06\xd7\x76\x73\x40\x8b\x86\x55\x7c\xa3\x19\xee\x66\xc3\x95\xd2\x50\xaf\x3b\x38\x5c\x01\x9a\xb6\x41\xdb\x3c\x4e\x41\x72\xda\x71\x8e\xd0\xee\x57\xa4\x18\x9f\xa2\x99\xd1\x2d\x6f\x47\xaa\xa2\x2d\x07\x3a\xd9\x5b\xb9\xc5\xe5\xc9\xb1\x60\x0f\xd0\xaf\x4d\x4f\x6d\x21\x5f\xc9\x8a\x86\x17\xcf\x39\xb9\xb9\x79\x95\x48\x33\x9b\x8d\x06\x46\x57\x71\x40\x00\xee\xfb\x1d\x4d\xac\x1b\x79\x87\x31\x46\xe3\x2d\x1a\xfc\xd2\x98\x39\x33\xf0\xb1\x63\x86\xc5\x5a\x09\x71\xe6\xc2\x1a\x30\x5c\xd8\xe1\x23\xf7\x32\x6f\xc9\x5b\xda\x48\x0a\xba\xef\xc4\xcd\xa5\x72\xb4\xfc\x68\x5c\x2c\xbc\xa1\x4c\x53\x6a\x9c\x1a\xb1\x07\xcb\xfa\xd0\xa9\x63\xb0\xf3\x40\xe0\x2d\x06\x3d\xea\x0a\x57\x41\xf1\x1c\x96\xe9\xbc\xb9\x30\x45\x9f\x04\x47\x98\x43\x6a\x7a\x71\x5e\x8b\xc3\x3c\x0e\xc2\x85\xa9\x65\x2c\xb9\x81\x87\xfd\x01\x1e\x85\xc3\x8f\x19\x5c\x42\xe6\x2a\xb2\x46\xa9\x2f\x7a\xab\x62\xa5\x38\x2f\x54\x9a\xe4\x0e\x17\xd7\xf6\x11\x9d\x13\xf3\xe4\x95\xf3\xb8\x9d\xfc\x4c\xdb\x1d\xa1\x5d\x14\xea\x13\x76\x32\x0a\xd5\x1b\xba\x8e\x93\xb9\x14\x47\xd4\xe4\xd4\x62\x30\x76\xe8\x10\x25\xa5\x0c\x58\x74\xd6\x72\x1e\x95\xcb\x0c\xee\x50\xef\x09\x0d\x8b\xb6\xa2\xda\xce\x4f\xb2\x4c\xd8\xaf\x59\x1d\x27\x6e\x57\x32\x39\xef\x13\x30\xe3\x14\xbb\x5d\xb1\x23\x5d\x20\xc4\xf3\x8e\xb8\x73\xe6\xfa\x04\xaa\x9e\xab\x8f\x8c\x6b\x1f\x28\x9f\xb4\x87\xda\x2b\x4b\x0b\x93\x78\x0e\x91\x9d\x18\x2d\x8d\xe9\x8e\xab\xf4\x1c\xd4\x2d\xe7\x38\xce\x70\x66\xd7\x36\x95\x68\xfd\x82\xa4\xc7\x2d\x69\x6c\x09\xa0\xba\x65\xba\x05\x14\x73\x1e\x4d\xe7\xa0\xed\x76\x7a\x6f\x63\x5a\x77\x18\x96\x99\xc3\x4a\xe0\xd5\xa1\x70\xd0\xa1\x2e\xaf\x65\x87\x14\x59\x0a\x17\xe1\xc2\x49\x6d\x65\x3a\x73\x53\xfe\xe2\x54\x68\x61\xc3\xe6\xee\x98\x90\x6d\xbc\xce\xcd\x26\xb5\x30\xb0\x62\x8d\x98\xfc\xe6\xc5\x41\x16\x61\x81\xb8\x55\x91\xdd\x1b\x5a\xfb\x45\x35\xb9\x42\x88\x8b\x8d\xeb\x8e\x78\x18\x81\x79\xd3\xd8\x0d\xb6\xa0\x05\xcb\xe5\x76\x9e\x64\x86\x26\xbd\x13\x89\x36\x50\x24\x02\xae\xe3\xe9\xfb\x28\x2e\x34\xb2\x96\x7b\xf8\x84\xf7\x51\x9d\xdb\x63\x66\xd5\x5b\x00\x4b\x02\x94\x63\x2b\x30\x51\xee\x44\x80\xd8\x36\x0c\xad\x2e\x6a\x4c\x4b\x25\x75\x41\x86\xfd\x88\xd0\x71\xa7\x0e\x9a\xf8\x1d\x93\x90\x8d\x66\xab\x8b\xdb\x10\x53\x2d\xd3\x89\x51\x2b\x1d\x38\x73\x6e\x99\xda\x54\xe2\xae\x0b\x10\x74\x1a\x76\xe7\x95\x44\xdc\x43\xbe\x43\x88\x4a\x8b\x5e\xb6\x07\x9d\x90\xc1\xcb\x5c\x5e\x09\xea\x0a\x76\x95\x2a\xbc\x56\xdb\xcc\x96\xa4\x26\x69\x69\x34\x2f\x01\x46\x65\xf1\xba\x23\xdd\x47\x82\xc4\x51\xcf\x03\xa4\x7c\x8c\xc8\x1d\x94\x9b\x08\x67\xac\xd7\x09\xc4\xb2\x7c\x03\x95\xad\xa5\xea\xb6\xa7\xc4\x17\xf0\xde\xdd\x72\x8e\x73\x4c\x5e\x4d\xdc\xa4\xe3\xd6\xc2\xec\x80\xc1\x03\x31\xee\x6a\x46\x85\x85\x8e\xdc\x99\x48\x86\x47\x02\x8d\x14\x93\xdd\xa8\x28\xdf\x01\xb4\xb4\x7b\x77\xc9\x1d\x39\x5f\xd2\xf2\x4a\x5e\x25\x05\x1b\xd0\xde\xf6\x43\xc9\xb5\xe8\x81\xb1\x84\x93\x8c\x2b\x32\xd0\xac\x97\xfa\x16\x6d\x29\xbc\x06\x32\x14\x24\x4d\xfd\xe6\xce\x16\x60\xb5\x07\x6e\xd9\x5d\x42\x8a\x14\x11\x10\xbb\xbb\x84\x67\x02\xce\x39\x23\x28\xb1\xde\xe1\x6c\x44\x2f\xc5\xa8\xeb\x49\xfa\x85\x2e\x78\x05\x39\xb6\x16\xf0\x25\xc9\xe1\x76\x38\x14\x13\x47\xac\xcc\x10\x24\xb3\xa6\x8c\x82\x75\x20\xff\x70\xe7\xf2\xa8\x59\xef\x71\xdf\x60\xb0\x82\x1b\xbd\x8c\x54\xce\x40\x20\x79\xe6\x9e\x6e\xdb\x44\xc9\x49\xa9\x8f\xd5\x01\x21\xfe\xd8\xb3\x5d\x87\xde\x2a\x42\x30\xa7\x3b\x7a\x06\x06\xa5\xd8\x37\xc2\x75\x0b\xe5\x40\x21\x77\xa5\xb9\x23\x70\x82\x73\xdb\x6a\xdf\xba\xc5\x76\x99\x74\xb5\xa9\x64\x6a\x10\x85\xed\x8e\xe8\x30\xd6\x12\x6d\xe7\xb1\xca\x6e\x18\xc6\xce\x71\x96\xcf\x49\x80\x54\xa4\x06\xbf\x87\x25\x11\x3c\xfc\xc2\xd8\x98\x44\x4e\xe1\x8e\xee\xdc\x1d\xba\xb9\x23\x2b\x23\xa6\x28\x11\xed\x83\xb9\xad\x93\x69\xa9\xde\x4f\xb5\x3c\x30\x76\x59\x79\x11\x22\x23\x2f\x97\x26\x93\xa9\x2d\xbb\x76\x8b\xcb\x53\x35\x55\xc8\xa9\xb2\x10\x6a\x64\xb7\x22\xc2\x0a\xdb\x53\xcd\x31\x95\x30\xb0\xc3\x63\x69\x59\x50\x07\x94\xfa\xb6\x90\x8e\xf3\x0e\xf5\x1e\x4b\x00\x4f\xaa\x78\x6c\x66\xf6\xa5\xa9\xdc\xc6\xd9\x7b\x01\xb0\xb9\x52\x10\x0e\x97\xb9\xfc\x5e\x7a\x46\xab\x1e\xd2\x12\x82\xa8\xbd\xc3\x9f\x92\x42\xe0\xec\x3c\x3a\x85\x48\x2c\xc2\x0f\x73\x26\x46\xf8\x88\x79\x14\x42\x66\x11\xba\x9c\x16\x8e\xdd\x98\x98\xa5\xa5\xc8\xb0\x5b\x22\xe5\xce\x3d\x83\x22\x7d\xe7\xbd\x11\x46\x75\xd8\x22\x3e\xac\xc1\x20\x6a\x89\x16\x43\x08\xae\x10\x62\xdd\xe0\xa4\xc8\xa0\x73\x14\xf7\xc0\xd0\xfe\xeb\xe0\xf2\x28\x76\xe8\x71\x83\x8b\x75\x82\x3f\xf1\x1e\x02\x53\x75\x15\x30\x46\xdb\x14\x94\x93\x74\x25\x56\x04\xd2\x68\x93\xcc\x2b\xd2\x07\xa8\x27\x73\x40\x5f\xe0\x8e\x77\x03\x3b\x21\xe2\x25\xb1\x00\x5c\xd0\x79\x98\x28\x91\x54\xcd\x5d\x96\x16\x83\xb9\x75\x7a\x11\x77\x56\x82\x41\x12\xd7\x2c\x39\x8b\x3b\x82\xaa\x98\x0b\xb2\x43\x73\x89\x3d\xd6\x51\x90\x03\x23\x48\x0f\x30\xd2\x66\x02\x22\x3b\xc1\x24\x86\xc5\x85\x5b\x14\x16\x91\x0a\x25\xaa\xdc\xf1\x10\x45\x2a\x5b\x5a\x33\xb4\xe1\x32\xa5\x0d\xf8\x10\x9a\xaf\x84\xf0\x13\xd1\x4c\xba\x4f\x19\x66\xb6\xd0\x3c\x3a\x9c\xb9\x0c\x11\xe8\x2d\x3e\xce\x26\xee\x7b\x2d\xe6\xea\x95\x9d\xfc\x94\x4e\xee\x57\x13\x89\xd6\xce\x70\xc6\x14\x6e\xde\xc1\xb2\xeb\xf3\xe2\x00\xa7\x86\x70\xe6\x77\xf0\x0c\x27\xf3\xc5\xa9\xb0\x15\x70\xc6\x11\x74\x3f\x07\x92\xfb\x62\x27\x50\xe4\x42\xb2\x4f\x42\x63\x23\x36\xb4\x7e\x86\x11\xf5\xd1\xc9\x1d\x62\x23\x36\x54\x48\x86\xaf\x8e\x1b\x11\xc9\xb9\x72\xae\x01\x7d\x96\x40\xa0\x81\x3b\x0a\x8d\x81\x71\x5e\xe4\xac\x9b\x85\x27\x46\x16\x50\x7e\x87\xc2\x95\xc7\x49\x94\x2f\xd6\x34\xef\x31\x8a\x17\x74\xb9\x41\xb4\x79\x0d\x56\x5f\xcd\x96\x94\xf3\x0c\x07\x71\x67\xd7\x6b\xf6\x0b\x28\xf6\xb0\x6d\xda\xa3\xf8\xe4\xc7\x3c\x16\xb1\x24\x78\x84\x39\x3b\x67\xf7\x7a\xf6\x09\x65\x94\x41\x82\xb6\x9a\xce\x17\x95\x7a\x75\x25\x40\x1f\xec\x02\x15\xd7\x4c\xaa\x62\x77\xf4\x0c\x57\x1f\xec\x14\x34\x46\x5d\xf3\x25\xb1\x49\xc0\x11\x16\xcb\x2c\x99\x1a\x62\x77\xe0\x9c\x56\x2e\x9c\xb6\x0d\x37\x14\x11\x17\xa5\x77\x28\x19\x8f\x2b\x17\x11\x07\xd9\xc6\xee\xb7\xb4\x54\x57\x57\x5b\x01\x7a\x38\x61\x0c\x17\xa3\x07\xac\xde\xfb\xbc\x75\x50\x87\xa2\x79\xd5\x3b\xec\x45\x59\x4c\xc8\xee\x68\x08\xb6\x8b\xf3\xb4\x21\xc6\x53\x5e\xda\xd0\x88\xe5\x45\x95\x21\xeb\x1a\x9b\xa7\x4a\x65\x5d\xc0\xb8\xa4\x93\x2c\xdd\xa1\xde\xbb\xba\x3a\x87\xde\xcb\x99\x4e\x7b\x14\x1b\xc0\x98\xa6\x20\x7d\x02\xd9\x30\x4a\xd1\x60\xbf\xb7\x1a\x8f\x7a\xf1\xfd\xf2\x15\x81\x72\xcb\x25\x88\xb1\x40\xab\xc8\x7c\x53\x5c\x42\xcc\x50\x3e\xca\x76\x68\x3d\x0e\x16\xf3\x14\x52\x92\x2a\x17\x90\x15\xb5\x0c\xd8\x82\xfd\xd8\xee\xb8\xdb\xa4\x16\xea\xb6\x75\xb4\x89\x50\xf6\x31\x91\x74\x1c\xda\x43\x03\xd5\xb6\x49\x8b\x9e\xc9\xf0\xa3\x19\x50\xc5\x6c\x89\xac\xb5\xae\x70\x87\x85\x1c\xd3\x56\xa9\x39\x60\xc9\xa9\x6f\xd7\x7e\xc6\x6e\x7a\x06\xde\x92\x46\x21\xf6\x22\x8e\x7d\x4e\x54\xcc\x5e\x27\x88\x8c\xaa\x1d\xa8\x64\x1f\x02\x97\x47\x6d\xa0\x1e\x77\x0e\x86\x3a\x0a\x99\x95\xe9\x27\xde\x86\x3a\x9f\xc6\x34\x77\x4e\xce\x71\xa6\x8a\x1b\x4f\x1d\x40\x05\xe6\xec\x3d\x42\xd7\x91\x80\x17\xe9\x8e\x2f\x2e\x14\xcc\x07\xd0\x32\xe0\x8d\xcd\x55\xa1\x8c\xb1\x40\x35\xe9\x92\x91\x01\x62\x51\x77\xbb\x3c\xc5\xa9\x25\x1d\x42\x69\xea\xfa\x1d\x6e\x88\x2c\xa3\x6a\x63\x98\x09\xcb\x78\x62\x06\x85\xe6\x90\x92\xe4\x0a\x3d\x71\xde\x68\xe2\xee\xd8\x76\xea\xc0\x9a\x10\xfd\x7f\xb4\xfd\x69\x14\x37\x4b\x55\x1e\x8e\x6a\x14\x11\x35\xe8\x11\x11\x67\x23\x08\x06\x14\x23\x5d\x93\x03\xea\xf1\x42\x70\x40\x50\x72\x9d\x30\x0a\xa9\xaa\xae\xae\xae\xb1\x6b\xe8\x1a\x55\x1c\x23\x91\x4b\x04\x11\x67\x8d\x38\x04\x84\x2b\x22\xe6\xe2\x3c\x61\x84\xa0\x10\x50\x94\x6b\xa2\x02\x0e\x89\xa2\x12\x51\x84\x44\x51\xe1\xbf\x8e\x67\x61\xde\xe5\xc9\x5a\xef\x5a\x59\x6f\x7f\xdf\x1f\xea\x57\x55\xbf\xa7\x9f\xfd\xec\x67\xef\x6a\x24\xfa\x6d\xa5\x57\x7c\x27\x29\x59\x3b\xa0\x24\x20\x13\x70\x11\x2c\xa7\x24\x46\x1f\x3d\xb4\xda\xe2\x09\xe0\xc6\x8d\x3d\xe5\x5c\x2c\x28\x4c\xef\x4b\x04\x6d\xb9\xc4\x26\x3d\x99\x69\x35\x95\xaa\x37\xd5\x28\xcb\x8c\x6d\x0e\xaf\xbb\x73\x34\x32\x1f\x2c\x19\x83\xe7\xea\xe5\xbe\x9e\x2b\x6b\x63\x93\x7d\x5e\x31\x4d\x5a\x47\xec\xc9\x84\xa2\x66\x73\x20\x1d\x74\x06\x67\x0a\x79\xe1\xa6\x14\xaf\xce\x23\xaf\xa8\xf8\x0c\xd3\xee\xb0\x6c\xfb\x11\xe1\x79\xc9\xed\xdc\x04\xd8\x74\xc2\x75\x5d\x66\x02\xea\x80\x84\x06\xc9\x9a\x33\x08\x93\x63\xed\x18\x76\xd2\x57\xc0\xb9\x9b\x73\xa8\xb9\x41\x8e\xcd\x15\x29\x22\xe5\x05\xd3\x48\x30\x9c\x62\xdb\x77\x99\x05\x07\x07\x21\xe0\x1c\x0d\xcb\x75\x85\x5e\x33\xd9\x4c\xcf\x2c\x67\xb7\x12\xae\x60\x58\xcf\xbb\x80\xcb\xcd\x6a\xd6\xb7\xfa\x8d\xc6\x28\x9c\xdb\x04\xd7\xc2\x33\xcc\x54\x4a\x7a\x9d\x80\x8a\x40\xe2\x6e\x19\xec\x54\x1e\x2e\x47\xb7\x30\x9c\x0d\xb4\x63\x1b\xf2\x12\x9b\x0f\xea\x38\x89\x24\x57\x80\x71\xb7\xa1\xb0\x2a\x29\xf3\xf0\x50\x0e\xd2\x1d\x96\x0d\xcc\xb0\xc1\xb4\x14\x9a\x17\x11\xe4\x92\xfd\x11\xaf\xa8\x4d\xe4\x1a\x4d\x0f\x85\xd7\xb2\xe9\x34\xea\x36\x8f\x32\x1a\xb7\x18\x9a\x90\xd6\xb8\xb3\xd0\xeb\x11\x8b\x6e\x36\x1b\xbe\xa4\x50\xfa\x15\x9c\x81\x0d\xdd\xf5\xea\xd5\xd8\x74\xda\x99\x45\x32\x61\xa9\xe3\x36\x0f\x56\x96\x2a\x0e\x95\xa2\xf7\x76\x0f\x3d\xeb\xe2\xed\xd9\xe2\x51\xe8\x15\x7b\xd1\x17\x82\xdb\x1e\xa5\xae\x8d\x6a\x41\x71\xf6\x64\xe9\x61\x5b\x4a\xc0\xc6\x9b\xbe\x83\x00\x81\x0b\xb9\x76\x1f\xb4\x2a\x74\x3d\x2e\xe9\xdb\xec\xd3\x82\x18\x38\xde\xc7\x90\x8c\xac\xc5\xcb\xc3\xae\xc0\x96\xcd\xf4\x83\x86\xb5\x84\x72\xc2\x12\x73\x5f\x05\x6a\x70\x35\x61\x59\xae\xb0\xf9\x60\x9f\x8b\x87\xdb\xd8\x9a\xe8\x5c\x73\xc4\x30\x74\x71\xaa\xc5\x73\xb8\xaf\xab\x5c\x56\x18\xb6\x11\x40\x45\x04\x13\x16\x09\xdd\xe8\x15\x8f\x07\x0c\xd2\x00\x8f\x03\x4d\x91\xd6\x03\xa5\x49\x53\x6a\x04\xf9\xb8\xba\xdd\xb2\x56\xb6\xe8\xaa\x37\x8a\x6e\xa2\x51\x81\x57\xed\xa4\x5d\xef\x62\x36\x7a\xe3\xe7\xbc\xf8\x0f\x5e\xf6\xb3\x8f\xfe\xd0\x77\xfb\x9f\x5f\x74\xff\x3f\xfc\xb0\x0f\x7c\xe2\xbd\x3e\xf7\x3e\x77\x7f\xaf\x87\xe9\x07\x3c\xf7\xad\xdf\xfb\xb7\xf7\x79\xcc\xff\xb8\xef\x3f\x30\x1b\x3d\xfd\x3d\xff\xf1\x2f\xbc\xf6\xb9\x77\x7f\xc4\xab\x3e\xe2\x4b\x9f\xfc\xba\x8f\x78\xee\x47\xff\x23\xfe\xa9\xef\xfd\xfa\xff\xf8\xec\xed\x01\x2f\x7e\xeb\xaf\xff\xe6\x57\x7d\xcf\x8d\xef\x8d\xdd\xfe\xc4\x9f\xfe\xc5\x4f\x7b\xeb\x1f\xed\x0f\x7e\xec\x2b\x6e\xfb\xdd\x97\xde\xf7\x59\x1f\x96\x5f\x7b\x9f\xff\xfc\xec\x07\x3f\x4e\xfe\xff\xdf\xf4\x91\x8f\x09\xf7\xfa\xff\xdc\x10\x2a\xdf\xd3\x3e\xe3\x4b\x5e\xf4\x89\xe7\x63\xff\xdf\x1f\xfa\x9c\xcf\xf8\xeb\xd7\xbd\xea\x5d\x1e\xf4\xe9\xdf\x2b\xbf\xe3\x3b\xf6\xff\xea\x7f\xf0\xfb\xbe\xeb\xdd\x7e\xf9\xa9\x37\x84\x7e\xc2\x57\xbf\xe4\x99\x1f\x59\xdf\xf7\xc9\xf7\xed\x5f\xf3\xdd\xed\xfb\x9e\xf2\xe2\x77\xff\xda\x9f\x79\xea\x7b\xbd\xe0\x2d\x5f\xf2\xfa\xaf\x78\xe5\x8f\x7c\xef\xa7\xfe\x8f\xd7\xdd\x10\xfa\x30\xf7\x08\xf0\xd9\x77\x7f\x91\x7e\xf6\xb3\x3e\xff\x9f\x7d\x9c\xf8\xd5\xb7\x7d\xf4\x9f\x3f\xfd\xe9\xbf\xf5\xdc\xf7\xbb\xc7\xef\xdf\xfe\xb4\x0f\xb9\xf7\xcf\x7f\xc9\x63\x6f\x08\x8d\xbf\xf5\x6b\xe9\xc7\xfe\xfc\xfc\xc0\x07\xbf\xe2\x3e\xf7\xaf\xcf\xff\xc0\xdf\x7b\xcf\x07\xfe\xc0\xfe\x6e\xbf\xfc\x1e\xf7\x0a\x1f\xf1\x7c\xc8\x3f\xe6\xd5\x9f\x77\x43\xe8\x3f\xbf\xfd\xeb\x1e\xf3\xb8\x17\xbe\xee\x9b\x3f\xf3\xbd\x3f\xeb\x11\xcf\xf4\xe6\x81\x7f\xf2\xfa\x7b\x96\x3f\xff\xfc\xdb\xbe\xe6\xb9\x0f\xf9\xa9\xf8\x4b\xff\xf4\xe3\xff\xe2\x86\xd0\xdb\x7e\xed\xff\xf5\x5e\xe2\x39\xf7\xfb\x5f\x1f\xfc\xfa\x67\xea\x87\xbc\xf1\x95\x6f\xfe\xe3\xfd\x7d\xdf\x61\x7f\xf8\x07\x3e\xfc\x8b\xc3\x8f\xbe\xfc\x45\x6f\x7d\xc6\x7d\xbe\xe2\xed\x87\x70\xb3\x5d\xfd\x07\x87\xf0\x96\xcf\xf8\x85\xbb\xbd\xfc\x7d\x1e\xf3\x3b\x3f\xfa\x82\x17\x3c\xe4\x11\xe1\x7b\xde\xfb\xc5\x0f\x7a\xf6\x73\xbe\xfd\xdf\xbf\xf8\x33\x3f\xff\x73\x7e\xf5\x93\xbe\x70\x7f\xcd\x9f\xdd\x10\xfa\xa6\xef\xfa\xd6\xe7\x57\xfe\xca\x97\xbc\xef\xaf\x3e\xf7\xe5\xee\xdd\x3f\xe4\xa1\x4f\xfc\xd3\x7f\x83\x7e\xe3\x1e\x4f\xfa\xa0\xb7\x7c\xee\xab\x1f\xf9\x83\x4b\x5e\x6e\x08\xbd\xe7\x67\xfc\xca\x97\xfc\xfc\x37\x3f\xed\xd7\x7e\xc0\xbc\xa0\x3e\xea\xc1\xb7\xbf\xdf\xf6\xce\x7f\xfc\x0d\x8f\x7b\xe1\x8f\x7c\xda\x53\x1e\xf2\x82\x3f\x7d\xc2\x23\xbf\xf1\xb7\x6e\x08\xfd\xd3\x5f\x79\xde\xcb\xef\xfe\x67\xb7\xbd\xf3\xbd\xdf\xf1\x5f\x3d\x70\x15\x3f\xf4\x23\x1f\xaa\xf0\x23\x1f\x52\x1e\xfe\x72\xf8\x99\xbf\xf7\xc8\x37\xbd\x59\x7f\xe5\x8d\x0b\xa8\x6f\xbd\xed\x1e\xcf\x45\xb7\x7d\xca\x07\x3c\xe3\x89\xf7\xfc\x83\xef\xf9\x84\xff\x6e\xad\x7a\x8f\xa7\xc0\xd7\xbd\xe3\xc7\xfe\xeb\xaf\xfd\xa6\xfb\xbd\xec\x46\x73\xd8\x33\xbf\x1b\x7e\xe6\x1b\xbe\xf2\x71\x8f\xfe\xd8\x2f\x7d\xff\x0f\xbb\xed\x8f\xdf\x0b\x7c\xd5\xb7\xb2\xfc\xad\x0f\xfe\xed\x07\x3c\xe0\x8b\x5f\x76\xfe\xc0\xfd\x7e\xf4\x27\x6f\x08\xfd\xaa\x57\x7f\xe5\xd7\x7e\xc2\xf8\xd4\x2f\x7f\xc2\xa3\xbe\xee\x21\xaf\xed\xcf\xfb\xc6\xef\xf9\xc5\x1f\x78\xda\x27\xff\xe4\x7f\xfd\xfe\x87\xbe\xec\xcb\x1f\xf6\x9b\xaf\xfb\x86\x77\xbb\x21\xf4\x53\xde\xf0\xc2\x77\x24\x9f\xf4\x6f\x3f\xe1\x71\x3f\x9e\x5f\xf0\xe0\x1f\x7f\xd0\xdb\xfe\xd1\x93\x3e\xed\x93\xdf\x75\x79\xeb\x6f\x3d\xeb\xb6\xfe\x7b\x7f\xf3\x39\xff\xe4\x6f\xfe\xde\xf1\x75\xb3\x5d\xfd\xbf\xff\xcc\x6e\x0f\x7b\x87\x3f\xfe\x3f\x34\x93\x01\x0c\x41\xa3\x58\x82\x55\x84\x2a\xa1\xea\x61\x98\x4a\x80\xc0\x54\xef\xfa\xac\xa6\xdb\x3b\xfe\xdf\x95\x78\x6b\x86\x59\xdc\xf8\x3b\xf6\xfc\x82\xf7\xfc\xbf\x85\x90\xff\xe3\x2a\xca\xd4\x15\x57\x63\xd3\x44\xd6\x8f\x03\x87\x74\x84\xdd\x71\xb3\x01\x3a\x20\x10\x1d\xae\x3a\xf9\x0a\x74\x30\xd8\xe5\x39\xaa\xbe\x33\xf9\xb9\xc5\xab\xc8\x51\xaf\x43\xf3\x73\x9d\xfb\xbe\xc7\x69\x86\x9c\x38\xed\x07\xec\x6a\x31\x3a\xe4\x53\xa0\x34\xc5\x34\xb9\xfa\x86\xf2\xb9\xad\xfb\x90\xb7\x7e\x15\x94\x34\x0e\x07\x3d\xc9\xb2\x7b\x03\xbb\xd7\x28\x25\xa2\x39\x4a\x67\xf4\x99\xb1\x61\xcf\x2d\xd4\xb8\x06\xd8\xf6\xc6\x3a\x9f\xc9\xdc\x69\x44\xb8\xc5\xab\x40\x70\x1b\x64\xd8\x5d\x69\x06\x99\x73\x88\xab\xa9\x91\x83\x60\xb4\xf3\x94\xd1\x6a\x2d\x11\xb5\x8b\x3d\x0c\xe6\xe3\xbc\x23\x45\xbe\x73\xe8\xf0\xad\xde\x0b\x41\x54\x41\x12\x85\xb3\x73\x91\x37\xbe\xc9\x0c\x24\x00\x3e\xec\xde\xc5\xfd\x40\x58\x0d\xea\xf4\x0a\xd2\x7a\x88\xb6\x02\xa6\xef\x64\xcf\xb7\xf8\x5e\xf0\x30\x31\x40\xb8\xb9\x8d\xc0\xc0\x42\x4e\x35\x53\xd3\x7d\x72\x6b\xc3\x74\xd5\x41\xc2\x3c\xf5\x32\xfd\x92\x15\xe7\x85\x2f\x94\x5e\x71\x2f\x98\x4e\x76\x5b\x6d\x3f\x23\xf1\x98\x80\x39\xfb\xdf\x3d\xe3\x3b\x4c\x88\x71\x21\x6e\xc3\xa7\xf3\x92\xb2\xb1\xca\x22\x00\xd8\x87\xb9\x53\x03\xfd\xbb\x55\xbc\x1d\x5c\x6e\x86\xc3\xb7\x18\x5c\x7c\x20\xe1\xc8\x75\x0d\x01\x9d\xb8\x03\x97\x25\x80\xd0\x76\x17\xec\xc9\x40\xe8\x22\xe1\x10\xec\x66\xc7\xb2\xaa\xb6\xd7\x14\xf1\x9d\x7d\xd4\xb7\xf8\xf8\xac\xeb\xa6\xb2\x76\xcc\xd6\x09\xdc\xc1\xe4\x76\x45\x59\x07\xbc\x06\xe6\xbc\xaf\x75\xdf\x54\x3c\xc1\xce\x23\xab\x50\x46\xc3\xb1\xa2\x17\x1c\xdf\xda\x80\xb2\x5d\x9c\x9c\x62\xc0\xcc\xdc\x9c\xb6\xa4\x78\x05\x76\x38\x6c\xe7\x87\xde\xd2\x09\xf3\x06\xa8\xca\x15\x82\x4c\xed\x1e\xf7\x0b\xf6\x62\x15\x43\x78\x84\x19\x90\x75\xb3\x1c\x32\xe4\xc9\x48\x74\x97\x27\x8f\x86\xc2\x54\x5c\x39\x69\x9f\xb8\x20\x10\x8d\x01\x2d\xec\xe0\x82\xab\xcc\x74\x32\x03\x5a\x92\xdc\x34\xdb\x79\x50\x2a\x5a\x87\x83\x48\x69\x9b\x56\xea\xdc\x8f\x83\xee\x93\xe0\x86\xab\x33\xb0\xc3\x24\xc0\x9d\x9d\xed\xb7\xf8\x44\x0c\x2a\x63\xd5\xe8\x30\x0e\xe0\x18\x4e\x14\x4f\x31\x64\xed\xaa\xdc\xb1\x0f\x1e\xe9\x60\x3a\xa8\x03\x2d\x5e\xf3\x31\x9a\x11\xa7\xaa\x17\xac\x82\xee\x5a\x6d\x56\x00\x74\xee\x28\x03\x2a\xb0\x04\x0b\x36\x62\x3b\xf9\x39\x59\x38\x3a\x2d\x2b\xac\x5d\x10\xb5\x0f\x7c\xae\xee\x1c\x77\x6a\xa0\xb7\x78\x15\x50\x59\x84\x59\xf3\x7d\xe3\x72\x02\xb8\xb5\xb4\x52\x7e\xba\x65\xc7\x27\xe5\xb0\xa3\xb5\x31\xb4\x05\xae\xd6\xd9\xe1\x8e\x9a\xab\xeb\x7a\x17\x70\xb9\x19\x73\xbb\xc5\xe0\xc2\xa2\xe4\xc2\x31\x2a\x54\x5c\x4c\x1f\x53\x94\x9c\x74\x43\x7a\x01\x6c\x1d\x40\x93\x38\x5c\xdf\xe5\x99\xf8\x72\x70\x1a\xfb\x01\x78\xbe\x60\xe3\xd2\xee\x62\x0a\x7b\xa9\x7e\xd9\xfb\xb6\x86\x25\x3b\x14\x27\xc5\xd6\x72\x7d\xfa\xda\x94\xe3\x3a\x35\x24\x0f\x38\x61\x3f\x38\x17\xeb\x05\x5f\x6b\xc6\x66\x52\x18\x01\xbe\x4a\xa8\x59\x3f\x21\x8d\x6c\x56\xc5\x6b\x5d\xb0\x95\x1b\xab\x8b\x33\xc8\xc0\xd1\x8a\x83\x85\x53\xd8\xc3\x72\xc5\xdf\xfa\x3c\x48\x3c\x91\x5f\x36\x8d\xb7\x23\xf4\x13\x8e\x88\x0e\xef\x4c\x3e\xf5\x06\x18\x86\x03\x90\xba\x08\x26\xaa\x4b\x47\x89\x40\x49\x4d\x2e\x58\x45\x27\xcb\x7e\x40\xb3\xe1\x75\xdf\x1a\xed\x87\x75\x4b\x3d\xb9\x57\x08\x61\x4b\x61\x58\x97\x0c\xb6\xb5\xca\xa8\x34\x54\xc1\x22\x4a\x66\xb9\xe0\x5e\x64\x14\x3b\x25\x62\xf5\x6e\x37\x13\x32\xb4\x9c\x62\x6d\xa5\x2f\x9b\x5d\xf9\x84\xdb\x0e\x31\x11\x56\x1a\x53\x2c\x21\xcb\xf4\x9e\xdc\xd9\x7c\x7a\x8b\x57\x11\x53\x4f\x07\x4a\x72\x4f\x6a\x30\xd9\xed\x9e\x60\x3a\xf6\x60\x3c\xeb\xcb\xaa\x25\x05\x40\x45\x8b\x5d\x64\x25\x38\x8d\xf0\x4a\xee\x1c\x1e\x7b\x8b\x4f\x44\x78\xc2\xa6\xb5\x9b\x21\xbc\xa8\x83\x3a\x01\xf3\xb1\x2d\x45\x93\x64\xf5\xb6\x4b\x9d\xc1\x90\x68\x8f\x11\xed\xbe\x64\x73\xac\x8a\xde\x15\x5c\x6e\x96\xeb\xdd\x62\x70\x21\x83\x43\x5a\x9c\x88\x52\x72\xac\x4b\xb0\x24\x9c\xad\xc5\xe8\x80\xda\x05\xf5\x05\xae\x33\x43\x41\xbc\x81\xb8\x0b\x33\x10\xc8\xcb\x15\x7f\xeb\x63\x2a\x42\xb7\x0d\xb3\x25\x87\xda\x0f\xa3\x71\xed\xbb\xa4\xd1\xf4\xda\xb6\xa3\x9e\x8d\x76\xb4\x96\xd3\x07\xe4\xb0\x06\x4b\x54\x57\xa4\x02\x77\xb0\x12\xb8\x58\x2e\x38\xe6\xac\x46\x65\x39\xc3\x86\xd8\x42\x62\x9f\x3c\x17\x84\xa1\xcf\xa1\x20\x27\x6a\xf6\xeb\x9c\xab\x5d\xda\x15\xfc\xc9\xee\x05\x76\xa8\xf1\xd4\x19\x91\x15\xe5\x98\x49\xc2\xb9\xb9\xe1\x82\x5a\xe7\xe9\x55\xb0\x6b\xf2\x23\xef\x91\x53\x6b\xf0\x72\xc5\xd7\x9a\x95\x4d\xf8\x1a\x58\x2d\x19\x93\x64\x95\xee\x35\x25\x2c\xb4\x25\xc9\x2e\x2b\x6d\x07\x73\x96\xb9\x3e\x69\xc0\x4b\x28\xba\xa6\x73\x5c\xc1\x25\x0b\xa7\x21\xf9\xe1\xa5\x9b\x65\xe3\x47\xea\x00\x0c\x76\xc7\x9f\x19\x65\x5b\x4a\x52\x4e\x1c\xe7\x9e\x91\xd1\x95\xf2\x7c\xcc\x7c\xde\xd9\x8e\x73\x8b\x57\x51\x89\x8b\x8a\x8e\x95\x8b\xa5\x67\xee\x18\x38\x48\x4e\x92\x02\xec\x08\xc9\xcd\x3a\x3d\x34\x9d\x42\xac\xe7\x29\x31\x9c\x08\x9c\xe0\x0a\xe6\x62\xa6\x2f\x67\x31\x9a\x28\x28\x4b\x14\xb8\x99\xbc\xcb\x24\x70\xf4\xe9\xe8\x52\x2d\x2d\x77\x9a\xb1\xad\x2b\x6c\xe7\x0a\xcb\x10\x14\xdd\x35\x2d\xba\x89\x3a\x74\x6b\xc1\x85\x22\x7e\x84\xb3\xc8\xad\x1c\xbb\x59\xc2\xbe\x6c\xc2\x71\x96\x2b\x1a\x0a\x0d\x9d\x28\xb1\x46\x46\x3c\xca\x68\x8b\x56\xfd\x58\x44\x8a\x57\x68\x2e\x60\x70\x66\x9b\xaf\x2d\xf8\xc2\x2b\x24\x9d\x71\x36\x92\x64\x6c\x80\x66\x97\x81\xad\x0d\x3b\x30\x73\x8d\x6a\xfa\x7e\x42\x14\xf5\x05\xc7\xc7\xe2\xee\x2d\x1f\xa4\x91\x13\xec\x18\x95\x63\xdd\xcd\xb6\xf6\x1c\x42\x28\x86\xd9\xe5\xdc\x72\x2b\x7c\x65\xe7\x91\x88\x29\x08\xa9\x6e\x2f\x48\x05\x98\x18\x0e\xb1\x8a\x77\x14\x43\x4b\x1c\x55\x00\x37\x00\x97\x0d\x58\x74\x07\x6b\x70\xb1\x87\x53\xd5\x7e\xc4\x41\xce\xad\x58\x3c\xbb\x8e\x17\x5c\xe5\x0e\x8f\x14\xd6\x23\x33\x5b\x2d\x32\x64\x44\x79\xb2\x60\x4a\x17\xc8\x79\xce\x57\x6b\xc1\x01\xab\xc6\xfc\x38\x41\x66\xd5\xa4\x65\xb9\xe2\x6b\x7d\x5a\x06\x43\xd8\x93\x2d\x01\x08\xdb\x07\x80\x73\x45\xa4\xd3\xe5\x68\x09\x4c\x64\x69\x58\x8d\x97\xd5\xd7\xbe\x9e\x81\x9c\x4b\x33\x57\x68\x71\xfb\xaa\x28\x73\xd9\x05\xb9\x45\x11\xdc\xa9\x38\x18\x3e\x8e\x5c\x3b\x00\xba\x90\xb8\xc6\x75\x8a\xb8\x35\xbb\xe8\xc3\x51\xb9\xd2\x71\x01\x8b\x63\xac\x4b\xb4\x18\xb3\x62\x17\x2b\x29\xf4\x48\x27\x93\xba\x72\xa2\x6a\x42\x50\x10\x26\xdb\x86\x5c\x05\x74\x29\x45\x44\x7d\x8e\xae\xef\x0a\x2e\x37\xd3\x93\x6f\x31\x73\xa1\xa7\xf3\x67\x9f\xfb\x10\xdd\x9e\x9b\x3d\x5b\x9c\x24\x97\x73\x8f\x8c\xcd\x49\x47\x07\x44\x2f\x9d\x86\x2d\x4f\xe8\xe4\xee\x79\x67\xf8\x82\x8d\x33\x74\xed\x8e\xf5\xbd\x36\x99\xb6\xcd\xe5\x3d\x10\x99\x39\x18\x88\x77\x65\x58\x35\x83\xc0\xd2\xcd\x61\x64\xd9\x0c\x60\x50\xf8\x78\x81\x70\x47\x37\x52\xc6\x21\x38\xee\x65\xc1\xc0\xf8\xe9\x32\x45\xe4\x60\x08\x23\xb6\xf1\x63\x72\x1a\x4b\xa2\x27\xa8\x66\xc7\xac\x6d\xf1\x50\xec\x0a\xce\xa0\xed\x3c\xec\x58\x90\x01\x9c\x6e\x8e\xf8\xb5\x9e\xa2\x72\x44\x85\x5c\x9c\x6b\x7c\x69\xa8\xeb\xad\x6b\xbc\x53\x2c\x07\x24\xbc\xdd\xd9\x3d\x70\x8b\x57\x41\xb8\x3a\xec\x62\x96\x4e\xf6\x0d\x47\xd3\x2c\x1f\x90\xdb\x7c\x42\x95\x0f\x6b\xad\x3c\xd2\x84\x14\x1a\xbf\x35\xb7\xad\xc7\x86\xdc\x15\xfa\x13\x45\x71\xd9\x25\xd0\x99\xaf\xa4\x0a\x1f\x19\x75\x62\x6c\xc7\x36\x7a\x12\x04\x38\x29\x31\xcf\x90\x83\x86\xa1\x17\xa5\x0f\xac\xbd\x39\x2e\xd8\x8b\x7a\xfa\x13\xe6\x05\xc7\x71\x8c\xc2\x87\x8f\x14\x79\x8a\xcf\x59\x02\x6c\xd2\x9c\xeb\x36\xac\xe6\xc7\x91\x43\x65\x92\x9f\x05\x32\x9b\xae\x50\x7e\xce\x09\x36\x29\x60\xa3\xc7\xd6\x8e\x23\xb1\xba\xba\xc0\x57\x92\x48\x8e\x6b\x3f\xa1\x95\x72\xc9\x3e\x38\x3f\xeb\x99\x2d\xc7\xee\x86\xff\xc8\xdb\xc1\xe5\x66\x15\xa8\x5b\xcc\x5c\x88\x90\x82\x36\x88\x05\x43\x52\x9f\xf2\x74\x22\x5b\x92\xce\x03\xb1\x56\x2b\x0f\x45\x08\xae\xc2\x71\x9c\xba\x95\xc2\xb0\x65\x75\x5e\xf1\xb7\x5e\x28\x12\xc2\x9f\x5c\x75\x3d\x9d\x8a\x49\xba\x22\x0a\x92\x77\x7c\x27\xa5\xf5\xf4\x2c\x6e\x6a\xc2\x42\x93\x3c\xf2\xa6\x73\xe2\xf4\x82\xe3\x63\xc7\xea\x8b\xb0\x8d\x20\x8c\x4e\x00\xed\x76\x18\x85\xfc\xea\x03\x3d\x38\x61\x25\xe9\x5d\x43\x78\x6e\x5d\x70\xe8\xc9\xba\x94\x7e\xe6\x0b\x38\x03\x3b\x84\x77\x3d\xa4\x71\xe4\x7d\x6b\xa7\xdf\xc5\x56\x20\x57\xd0\xb7\x23\xce\x43\x1f\xdc\xce\x1a\x8a\xde\xf7\x36\x1b\x50\xf4\x38\xcf\x71\xc5\x2a\xb6\x63\x9f\x87\x8e\x78\xcc\x32\x4c\xce\x78\x95\x4c\xae\x85\x40\x17\x14\xe3\x71\x19\xc5\xc3\x22\x3b\x94\xa6\x85\x76\x0c\x81\xf4\x15\xab\xa0\x23\xb1\x6d\x50\x09\xb1\x2d\xbd\xee\xba\xb8\x7d\xeb\x5e\x78\x98\xd6\xc3\x01\xb1\xb2\x68\xd7\x2d\x9c\x1d\x34\xba\x49\x44\x48\x75\xec\x02\xe6\x42\x11\x71\xd6\xb1\x50\x98\x96\x82\xf2\xe8\x2c\xcc\xfb\xa9\x93\xd8\xd2\x39\x4b\x51\x65\x58\x14\x5a\xab\x5d\x2f\x45\xf4\x78\x2e\x3c\x5d\x51\x39\x33\xdb\x91\x9d\x5e\xc1\xc9\x97\xa1\xb4\xb2\xa5\x63\x4b\x71\x74\x42\xd3\x74\xce\xb9\xd8\x24\x8b\xe9\x9e\xc2\xea\x8c\x39\x4d\x3e\xd7\x74\x17\x70\xb9\x59\xcd\xfa\x16\x83\x4b\x14\x03\x1c\x3e\x07\x4e\x50\xcb\xb2\x1a\xb2\x79\x49\x9b\x93\x07\x63\x67\x9a\xdc\x2d\x99\xd0\x82\x6d\xa4\x5b\x13\xe3\xa0\xd1\x8f\xed\x82\xab\xec\x2b\x2a\x19\xd3\x45\xb0\x35\x9d\x9e\x47\x81\x77\x37\xec\x50\x0b\x47\x81\x59\x51\xd1\xe0\x18\x02\x69\x96\x5d\xc6\x5e\xb6\x69\xc0\x05\xab\xa0\xcb\xda\x72\xf4\x9a\x45\x58\x1a\xe1\x67\x5d\xda\x56\x34\x0e\x56\x9c\x09\xae\x38\x2c\xc5\x75\x66\x72\x50\x4e\xef\x4b\x71\x04\x16\x7e\x85\xa0\xab\xfa\xc9\x73\x80\x8a\xaa\x6d\xd2\x10\x0f\x51\x57\x3d\xd2\xd6\x30\x17\x1b\x1a\x7a\x51\xfa\x50\x65\x5d\x97\xcc\xd0\xa8\xc4\x9c\x2e\x5e\xa1\x33\x90\x46\x12\xd0\x3c\xf2\x8c\x07\x3f\xd7\x69\x42\x99\x2b\x31\xe5\xe4\x11\x1f\xa2\x47\x65\x81\x5d\xa2\x01\x0b\x31\x59\xd3\xb0\xfa\x71\x81\xac\x4c\xc9\x99\x09\x92\xa1\x74\xb2\xf0\xe3\x50\x96\x87\x11\xd7\x7d\x67\x59\x91\x6e\x4f\xbb\x78\xce\xe3\x76\xda\xd1\xd6\x15\xe0\x43\xba\x7d\x5c\x50\xcb\xa4\x6b\x70\xc7\x29\xdb\xb6\xef\xe5\x80\xe0\x80\x10\xcc\xb1\xe6\x4e\x97\x13\x1c\x7d\xaf\x4e\xb2\x5d\x1e\xd1\xec\x55\x34\x9e\x5c\x81\x33\x5d\x51\xb3\x82\x20\x6e\x8a\xcb\xb5\xad\x6c\x35\x24\xa1\x83\x1f\x54\xae\x87\x06\xdb\x1e\xb1\x87\xf0\x24\xd0\x32\x7e\x18\xd5\x0a\xa4\xa2\x89\x9c\xfe\xf7\x5e\xbc\xdd\x6c\x74\x33\x5f\xd6\x3f\x30\x1b\x3d\xf2\x85\x4f\x7d\xfd\x7f\x7f\xc9\xdb\x9e\xf6\xc7\x0f\x63\x4f\xfc\xf0\x7f\xfd\x87\xdf\x6f\xbe\xed\xbf\xfd\xe9\x97\x3f\xfd\x63\xbe\xfc\x3d\x5f\xf4\xd8\x57\xfe\xd9\x8b\x3e\xf8\x33\x6e\x1c\xd9\xf4\x41\x7f\x60\xf5\xfc\xc6\x4f\xfd\xc4\xf0\x73\xbf\xfe\x07\x2f\x7f\xf5\xbd\x1f\xfb\x15\x8f\xfb\xa2\xd7\xdc\xf3\x83\x3e\xfb\x99\xdf\xf3\x09\xbf\xf4\x24\xf0\x45\x37\x9a\xc3\xbe\xf6\x37\x5f\xf8\x13\xfe\x7d\x3f\xe2\x33\xef\x7b\xdb\xfc\xbc\xff\xf1\xc5\x1f\xf4\x80\xef\xf9\xa7\x0f\x7f\xfa\x53\x7f\xee\x21\x3f\x7f\xef\x87\xbd\x0f\x79\xd3\x9f\x7d\x94\xba\x21\xf4\xbd\xfe\x22\xdc\x7e\xfb\x7d\x3f\xf7\x5f\x7d\xac\xbd\xef\x4f\x7e\xfd\xc7\xdd\xf7\x65\x0f\x7f\xc3\x23\x7f\xf8\xf7\xbf\xf1\xbf\x7c\xf8\xcf\xbc\xed\x73\x7e\xe1\x2f\xbf\xf5\x2b\xfe\xf4\xc6\xf1\x52\x4f\xf9\x88\xdf\x7b\xfd\x7f\xfa\x0a\x25\x7f\xf7\x5e\x7f\xf9\x3a\xfc\xab\x0f\x7a\xde\x3b\x3d\xe0\xb9\x3f\xff\x35\x1f\xfc\x5b\x8f\xff\x68\xfc\x4d\x1f\xf0\x33\x1f\xf0\xea\x1b\x7d\x64\xbf\xf7\x3e\x3f\xfc\xf0\x67\xfd\x4b\x7b\xb7\x17\x7c\xd0\xdf\x7e\xfb\x6f\xc3\xdf\xff\xb8\x8f\xba\xc7\x43\x7f\xe4\x15\xff\xed\x23\xdf\x7c\x9f\xdb\x3e\xf1\xb6\xbb\x7d\xcc\xfb\xdf\xe8\x20\xfa\xe3\xe7\xdf\xdb\x3f\xea\xaf\xbe\xf7\x05\xaf\xfd\xbc\xef\x7c\xf0\xb3\x5e\xf8\x33\x8f\x7a\xef\xbf\xfa\x42\xf2\xcc\x6f\xfb\xd0\xff\xf5\x39\x7f\xf4\x98\x77\xff\xe1\xdf\xfc\xc2\x1b\x42\xd3\xf7\xde\xeb\x0d\x77\xff\x95\xbb\xbd\xff\x7b\x7c\xda\xbf\xbf\x8f\xf9\xc9\x0f\xfb\x8c\x87\x3c\x24\x3d\xfe\x49\xef\xfe\x69\x9f\xf5\xe6\xb7\x7d\xe7\xcf\xbe\xfc\xbb\x5f\xf5\xeb\x7f\x6f\x36\xba\xd9\xae\xde\x62\x84\xc7\xc0\xf7\x68\x17\x0d\x60\x93\xb8\xd0\xb1\x89\x71\x66\xed\x94\x6b\x55\x92\xb8\x0e\x95\xc0\xb6\xe4\xb1\x4c\xa8\xa0\xc5\x20\xf7\x3b\xdf\xc6\xbc\xd5\x59\x21\x30\xa4\xaf\x19\x1e\x11\xc4\x58\xcf\x9e\xc5\x16\x32\x71\x96\x48\xcb\x30\xc7\x34\x67\x2d\x6b\x82\x9d\xee\xc1\xa4\xdd\xd9\x94\xae\xc8\xc7\x1a\xa0\x26\x87\xc8\x4b\x05\xda\x77\x18\xcc\xdc\x85\x41\x53\x1e\x1a\x50\xce\x15\xb7\xb9\x18\x55\xc8\x3e\x64\x37\x5d\x1f\xc8\x98\x2b\xfc\x00\x51\x1d\x89\xc4\x0c\x25\xda\xbd\x1d\x71\xb5\x6b\xea\x1b\x2c\x92\xb4\xd6\x30\xf2\xa5\xc2\xb0\xf1\xaa\x8e\x10\xf9\x6c\x06\xf2\x76\x85\xcd\x87\x1d\x9c\xae\x2c\x6d\x74\x1e\x44\x52\x3c\x6b\x57\x5a\xe4\x19\x1a\x92\xb1\x1b\x9c\x69\xb6\x65\x80\x83\x95\xd2\xe5\xca\xd4\x5c\x38\xe5\x57\xd8\xbf\x08\xa9\xcb\xb2\x0e\xda\xc8\x16\x8e\xc0\x90\xc4\x4b\xeb\xa4\xd3\xdd\xb8\xb9\x69\x88\x76\xb6\x20\xe5\x92\x10\x19\x44\x75\x1e\x89\x5f\x61\x36\x82\x62\x43\x3c\x35\x6d\x4a\xda\x61\x73\xc6\xb5\x46\xf0\xd1\x4f\x58\xfc\xf4\x56\x03\xb4\x50\x26\x12\x37\xce\x85\x03\x75\xce\x48\xba\xa2\x7c\xb9\x75\x74\xe0\x29\x6a\x50\x50\xd2\xc0\x91\xb7\x52\xa7\xc4\xcf\xb8\x6b\xb8\xb2\x2e\x2c\x32\xe5\x14\x93\x54\x14\xe9\x71\x2a\xed\xd5\x5d\x4b\x76\x37\xc3\xe1\x5b\x4d\x1f\xcb\x5a\xa3\x3d\x85\xdc\xcc\x49\xd7\x6d\xd6\xa3\x48\x3e\xd0\x46\xec\x56\x39\x00\x15\xb7\x4c\x70\x05\x47\x87\xa6\x9b\x3d\x58\x12\xaf\x28\x47\xb4\x45\xd5\xee\x6b\x32\x4b\xae\xa1\xa8\x84\xce\xa4\xf5\xc4\x5e\x05\xe5\x24\x25\x76\xc7\x38\xd2\xae\xdb\xe9\xc5\x24\x7b\x1d\x2a\x5e\x21\xbf\x15\xba\xce\x90\xba\x2b\x2b\xf6\x2a\x75\x67\xd3\x5c\xc3\xb0\x85\xe6\x08\xb9\xe9\x0b\x6b\xd4\x51\xa7\x43\xdd\x85\xed\x54\x1a\x14\xaf\x90\x59\x12\x57\x05\x6b\x05\x71\xe5\x7e\xd3\x94\x4c\x82\x27\x66\x5e\xd6\xb5\x0f\x56\x10\x8d\x6e\xf7\x33\x00\x3b\x98\x5c\xe5\x72\xb8\x39\xae\x90\x59\x0e\x27\x97\x68\x57\x43\x95\x8e\x68\x65\x03\xca\x9d\x0e\x96\x86\x1c\xc7\xc0\x73\x20\x42\xec\xb6\x96\x3c\x04\x5f\x75\x3d\x23\x28\xf4\x8a\xbd\x70\xee\x8c\x95\x32\x95\xd9\x70\x5a\x0b\xc3\x8c\x64\x13\x12\x6f\x3c\x5c\x50\x81\x5b\x13\x62\x8b\x23\x94\xd3\x8e\x11\xe9\x19\xb0\xb9\x82\xc4\x76\xb9\x61\xb1\xa2\xca\x21\x02\x08\x55\x26\xf7\xe8\xa1\x6a\x81\x6c\x31\x40\x99\x60\x53\x7b\x60\x86\x3a\xcd\xfd\x1d\x94\xdb\x5a\x76\x89\x4f\x44\x67\x74\xd4\xc3\x43\xac\x65\xcf\x14\x74\x35\xc6\x6e\xe2\xb9\x68\x74\x0a\x06\xc5\xba\x46\x94\x21\xb2\x48\x91\x4a\x3b\x0c\x5e\xdd\x55\xf8\xba\x19\x73\xbb\xc5\xe0\x32\xb3\x3a\x50\x8e\xdb\x1d\xa9\xce\x26\x0b\x26\x30\x20\xd0\xa1\x85\x6d\x08\x7f\x8c\x11\x1a\xce\x00\x36\x4b\xd5\x18\x18\x31\x7d\xd0\x4b\x8a\x22\xc0\xd6\x63\x87\x43\x75\x92\xea\xe2\x60\x3b\x17\xe7\x45\x60\xda\x83\x36\x13\x3c\x4e\x3e\x73\xd6\x27\xc3\x6c\x18\x08\x55\x16\xf6\x82\xab\x4c\x07\x3b\x08\x50\x8d\x1e\x46\x80\x86\x42\x9d\x7a\xdd\x01\x80\x1d\x75\xe5\xcf\xb6\xad\x5c\xed\xcc\xca\xea\x3b\xb5\xeb\xc2\xb7\x58\xe6\x15\x32\x4b\xde\xe3\xa4\x86\xa4\xa1\xe5\x26\x24\x44\x12\xec\x93\x19\x57\x29\x11\x3e\xe9\xb5\xf8\x66\x5b\x0f\xd2\x62\xdb\x77\x26\x30\x9b\xe7\x15\x6a\x41\x99\x43\xc6\x34\x5c\xa7\xc0\xef\x7b\x9a\xec\x10\x67\xe3\x78\x04\x61\x31\xa7\xce\x2d\xe4\x30\x38\xe1\xe8\x96\x1a\x18\x3c\x4d\xa5\x57\x88\x3d\xe8\x38\xba\xea\x48\x97\xba\xa7\x22\xd7\x10\x58\xdf\x2a\xc8\xb9\x79\xe4\x6c\xf5\xe7\xc1\x46\x30\x2d\x35\xef\xbd\x30\x1e\xdb\x4c\xaf\xe0\xd5\x34\x26\x36\xf2\x1a\x7c\x92\x36\x82\x3b\x72\xbf\x2d\x82\x52\xc8\xb4\xfb\x06\x13\x95\x4b\x55\x18\xd8\xa4\xa2\x1b\x6a\x00\x77\x4e\x7e\x05\xd0\xae\x05\xa3\x44\xf2\xa0\xfb\xe2\x88\xe4\x5b\x15\xad\x73\x55\x96\x1e\x3a\xce\x6e\x76\x28\x90\xd6\x18\x7b\xce\x31\x0f\x01\x7b\xa6\xe5\x5d\xc0\xe5\x66\xb9\xde\x2d\x06\x17\x10\x2c\xcc\xf8\xef\xcc\x59\x12\x92\x5d\x08\xc0\xf4\x42\xf7\x4c\xa5\x6a\x84\xb9\x3a\xc6\x71\xc7\xef\xd2\x85\x16\xd3\x82\x3d\x3b\xbf\xc0\x60\xc3\x82\x38\x81\xd7\x3e\xb3\xd5\x2a\xcd\x84\x06\x6a\xf1\x69\x22\xce\xc3\x26\xa8\x94\x1b\x68\x35\x0d\xc7\xa5\x2e\x63\xb4\x10\x69\x3b\xaf\xf0\x03\xcc\x5c\x29\xde\xa5\xd9\xd6\xbc\x26\x17\x4e\xde\xc2\x19\x07\x0d\xae\x78\xb5\x85\xb8\x9f\xa3\x63\xb8\xac\xcb\xc1\x81\x36\x38\x32\xb4\x5c\x91\x9c\xf1\x45\x30\x1b\xad\xed\xda\x6c\xad\xa5\x14\x1c\x5a\xd0\xce\x86\xb7\xa4\xcc\x90\xf7\x4e\x79\xf6\x56\x11\xb5\xe5\x22\x6c\xab\x2a\x5f\x01\xf7\x14\xd1\x9c\x0e\xbd\x0f\x15\x8b\xd6\x0b\x3c\x3d\x29\x5c\x2a\x94\x8a\x2f\x49\x4c\xaa\xe2\xb2\x99\xbd\x5b\xf9\x77\xef\xa4\xe4\x64\xd7\x2b\xfe\x50\x06\xf5\x28\x6c\xc1\x23\x06\x0c\x8c\x05\x4c\x33\x37\x31\xf5\x49\xb3\x7c\x5a\x13\xb8\xd8\x96\x7d\x99\xda\x1a\xd6\x89\xc7\xb6\xe4\x2b\x80\x16\xd1\x65\x87\x80\x42\xe3\x68\x6b\xf0\x70\x27\x88\x84\x45\xe0\x13\xa5\x1b\xb7\xc7\xd2\x3c\x0e\x39\x6a\xdf\x18\xec\xa7\xa1\x5e\x9e\x17\x78\x23\x68\x1f\x53\xe5\x11\xe1\xb2\x53\x11\xdc\x8e\xd2\xa0\xad\x72\x62\x17\x37\xa1\xc3\x48\x1b\x5a\xac\x57\x40\x9f\xf4\x64\xbd\x6c\xd8\x33\x78\x17\x70\xb9\x99\x3a\x74\x8b\xfd\x00\x00\xc6\xb5\xdb\x31\x37\x68\xb2\x0e\x13\xed\xa7\x14\x63\xe3\x81\xa7\xb8\x44\x86\x0b\x5a\x4b\xea\x01\x8c\xa5\x9e\x51\xdc\xc1\x83\xcf\x2b\x28\x5f\xae\x15\x67\x8a\x37\xc0\x33\x26\xd1\xe9\x39\x87\x13\x64\x92\xb9\x09\xad\x74\x34\x15\xf8\x01\x43\x5f\x47\xed\x8b\x9e\x2c\x72\x7d\x05\x73\x41\x07\x50\xeb\x2e\xb6\x29\xd8\xd6\x31\x52\x03\x1f\x1d\x34\x40\x06\x5c\x28\x9c\x07\xd8\xf7\x93\xf9\x6a\xc6\x62\x54\xec\x1b\x5b\xfc\xb8\xc2\x60\x03\xd4\xd0\x48\x12\x10\xd3\xc6\xb7\x85\xda\x01\x0e\x2b\x0f\xaa\xa8\x80\x8c\x91\x78\xa8\xd4\x47\x3d\xce\xd2\x71\x30\x0a\x34\x37\xf9\x15\x15\x86\x92\x03\xdf\xb0\x20\x2a\xb4\xe8\x4a\xc9\xc6\xf1\x80\x59\xe7\x38\x82\x28\x0f\xed\x75\x89\x47\x8c\x4a\x22\x53\xe3\xee\x09\xea\xe3\x0a\x87\x2b\x30\x19\xa9\x43\x1a\x52\x95\xde\x32\xa5\xbe\x4f\x9b\xf4\x82\x4b\x45\x0e\x07\xba\xda\xc3\x3a\x32\xee\x80\xe0\x25\xdb\x05\x4b\xa6\xae\x28\xe5\x52\x2d\x30\x70\x68\x12\xef\x08\xe9\xf8\x44\x24\x08\xbf\xec\xec\xd8\xf6\x95\x4e\xd4\x61\x0e\xc4\x85\xd5\x77\xba\xae\xa7\x22\xbd\xe8\x2b\x54\xb0\xc6\x4b\xd3\x78\x0f\xe4\xc8\x0b\x0c\x54\xb2\xa4\x73\xd2\x5e\xa0\xb0\xc1\xb2\x30\x5e\x2c\x9a\xde\x08\x05\x87\x2c\xb4\x52\xd6\x6e\x68\x82\x7c\x3b\xb8\xdc\x4c\x4f\xbe\xc5\xe0\xb2\xe6\x4a\x72\x24\xc9\x0e\x84\x06\xb1\x4a\x16\xb4\x76\xac\x7a\x3b\x4b\x67\x4a\xcd\x36\x37\x06\xd8\xbe\x0f\x34\xac\x64\xa1\x11\x70\xc5\xf1\x65\x88\x85\x6a\x2e\x56\xa8\x28\xc4\x70\xd5\x32\x6e\x44\xe5\xd8\x96\xe2\x81\xb5\xa1\x80\x06\xad\xaf\x61\x93\x89\x06\x39\xc7\xba\x5c\x51\x03\x6f\x68\x3f\x3b\x5c\x71\x53\x44\x69\x56\xdb\xd2\xda\x0c\x07\x10\xab\x44\x76\x1c\x40\xc1\x6e\xf6\x6d\xf7\x2a\xa5\x4a\xc2\x54\x76\x5c\xe1\x21\x64\xbb\xb6\x36\xb1\x8d\xc1\xbd\xd1\x43\xac\x61\x9b\xf6\x04\x39\x27\xe6\x9c\x9c\x10\xac\x2c\x10\x62\x24\x8e\xa4\xa0\x29\xce\x13\xd0\x1b\xec\xb0\xb7\x0e\x5c\xf6\xa8\x05\x83\x20\xb7\x70\xf4\x38\x4f\x68\xeb\x01\x2b\x04\x93\xb3\x28\xc4\xd8\xa4\x0b\x92\xed\x21\xac\xa0\xc2\x82\x00\xea\x2b\xbb\x62\x2f\x6c\x40\xa9\xca\x64\xa6\xae\x1a\x82\x72\x4e\x79\xf8\x79\x78\x19\xe5\xda\x7b\xca\x71\x6a\x1c\x75\xf4\x11\x48\xc9\x1d\xdb\x31\xba\xa2\xfd\x90\x4e\x60\xb1\xeb\x6e\x5f\xb3\xf0\xbd\x2f\x70\x01\x07\xae\xbe\x35\xd9\x55\x05\x45\xa6\x6c\xa1\x71\x8c\x23\xc6\xa3\x37\x80\x6b\x15\xaf\x30\xa1\xa1\x10\x46\xa2\xa1\x36\x37\xb0\xf4\x27\x42\xf1\x04\x54\x18\x74\x0a\x68\x14\x57\x2b\x97\x5c\x29\x23\x77\x1d\x51\xa6\x19\x1a\x96\xe2\x5d\xfd\x00\x37\xa9\x40\xdd\xe2\xb4\xc8\xe8\x4a\xf1\x51\x2c\xe2\x13\xd2\x72\x12\x4b\x1b\xaf\x9d\xb6\x90\x8c\xe8\x6e\x1b\x95\x58\x4d\x96\x68\x81\x2c\x0a\xec\xb3\xf8\x2b\x52\x01\x6a\x97\xcd\x1e\x49\x9d\x0e\x39\xba\x84\x2c\xb0\xa5\x3c\x64\xbc\xaa\x48\x23\xad\xae\x37\xbb\x0b\xe3\xd8\x58\x94\x30\x3b\x80\x89\x2d\x57\xa4\x45\x47\x6c\xd1\x05\xd0\x91\x43\x74\xf4\x25\x57\x2d\x92\x3f\x19\x9e\x94\xed\x55\x19\x7d\xd8\xe4\xb2\xe3\x0e\x8e\xd9\x7b\x55\x9d\xf3\x0b\xbe\xd6\xb4\xc8\x13\x90\x68\xda\x2e\xac\x69\xbc\x65\x11\x33\xd5\xdb\xb1\x8a\xad\x9e\xc3\x9e\x14\x67\xc0\xc5\x69\x29\x5b\x43\xcd\x22\xf2\xc6\x2f\x30\xae\x53\x4c\x40\x5e\xf3\x76\x2e\x08\x86\xda\x07\xe8\x89\x98\x93\xda\x49\xf4\x70\x6c\xcb\x60\x6e\xce\x76\xdc\xa2\x4d\x08\x2c\x03\xc0\x7e\xe7\x5b\xc0\xb7\x5a\x67\x40\xa1\x1e\x2d\xef\x21\xb4\x54\x34\x3a\x07\x53\x73\x73\xbb\x2b\x64\x05\x4d\xf8\x60\xac\x37\x14\xa0\x0a\x01\xa7\xa3\x7a\xb8\xf2\x2b\x56\x51\x03\x08\x86\xcf\xbc\xab\xcd\x89\x52\xfc\x40\x3b\x4e\x5b\x88\xcb\x76\x88\xb3\x86\x12\x4c\x2e\x6b\x50\x89\x30\xb8\x9a\xe5\x04\xe1\x8a\x06\x79\x4a\xdd\xc6\x18\xd9\xe3\x08\x9c\xfa\x04\xcd\xde\x0e\x4c\x49\x4c\x4c\xa7\xec\x04\x47\x66\xcd\x88\x6f\x91\x63\xda\x6d\xf5\xf3\xb8\x31\x45\x7c\x3b\xb8\xdc\xac\x66\x7d\x8b\x99\x4b\xb3\xab\x1f\x66\xb1\x16\xa5\x61\xe6\x31\x52\x42\x0c\xc5\x32\xec\xae\x56\x88\x86\x09\x7e\x4e\xaa\xd5\x5a\x06\x70\x9a\xe4\xa8\x80\xbf\xe2\x0b\xb5\x8e\xb2\xe1\x36\x8e\xce\x7a\x8c\x02\xcb\x85\x70\x2b\xbc\x4d\x30\xc7\xa4\x1a\xf1\x22\x2b\xc2\x89\x5c\x55\x76\x3e\x8c\xe8\xf5\x05\x06\x1b\x76\x8a\xb3\x48\x40\x8d\x3c\x98\xa1\xbe\xaf\x7d\x3d\x0e\xca\x53\x39\x09\x31\x29\x61\xba\xc8\x56\x11\xab\x61\x9f\x94\xe0\x8d\x73\xa5\xae\xe8\x47\xb1\x02\x8d\x9d\x83\x75\x20\x4f\xd1\x82\xc9\xc2\xd7\xb2\xe9\x94\x0e\xc6\x65\x53\x3e\x71\x23\xa5\x2d\x73\x53\x6b\xc4\xb2\x4c\x7b\xd0\x2b\xfa\x79\xc1\xda\xd1\x16\x02\x52\xa8\x48\x4c\xce\x6d\x05\xa9\x34\xd2\x47\x8e\x27\xde\xf7\x6e\x83\x61\x0b\x8b\xd5\x84\x61\x8d\x52\x53\xee\xe6\x82\x55\x30\x7d\xea\x03\xda\x69\xc1\xb9\x8c\xa4\x20\x99\xa5\x8e\xa0\x46\x62\x94\x6f\x6a\xb7\x88\x47\x6c\xc6\x32\x79\x8c\xeb\xaa\x74\x63\x74\xbd\xa0\xcd\x8c\xd9\x68\x60\x1d\x95\x90\x7e\x40\x42\x79\x5a\xeb\x59\x96\x53\x94\xb5\x8e\x5c\x7a\xd7\x1e\x2e\x4c\x4b\xb3\x26\xab\x20\x3e\x1b\xcc\xeb\x15\x27\xc2\x94\xc3\xe0\x68\xe1\xe4\x9e\xda\x8c\xbc\x57\xa9\xe0\xd8\x0e\x0b\xf3\x54\x5e\x37\xca\x4e\x39\xba\x04\x73\x31\x56\x6f\xb6\x8f\x1b\x12\xd5\xb7\x9b\x8d\x6e\x36\xd9\xe9\x1f\x9a\x8d\x6e\xff\x99\x5f\x7a\xc2\xbb\xfc\xcd\xd7\xff\xda\xd3\xef\xf9\xc4\x47\xbe\x76\xff\xff\x7e\xf3\xf2\x45\xbf\xfc\xae\xaf\xfe\xf1\x9f\xf5\xbf\xff\x1b\x6f\x79\xcd\x8f\x3c\xf8\xd7\x6e\x08\x15\x0f\x7d\xe4\x1b\x7f\xee\xee\x0f\xfb\xc4\x7f\xf9\xe5\xff\xe1\x6f\x1f\xfd\xaa\xdf\xf8\x96\x07\x7d\xec\xd7\xfc\xc6\x17\x3c\xf9\x47\x3f\xe0\xa9\xbf\xf1\x55\xff\xf4\x7d\xfc\x4b\x1e\x74\x43\xe8\x13\xc8\xfd\xef\x71\xaf\x87\xff\xf5\xdd\xda\x37\xbc\xf7\xdd\x6e\xff\xed\x77\xf9\xd0\xa7\x7e\xf4\x77\xfd\xca\x07\xe1\xcf\x79\xf4\x1f\xbe\xe0\xdd\x7f\xc6\xfc\xe7\x6f\xfb\xf3\x1b\x42\x7f\xe7\x91\x4f\x7f\xea\x97\xbf\x62\x7d\xec\x7f\x7f\xc6\x2f\xff\xc4\x03\x7e\xea\xe7\xde\xe3\x8d\xff\xf2\xa1\xec\xee\xdf\xfd\xba\x1f\xfb\xaa\xdf\x5a\xcb\x9f\x8e\x7f\xf1\xbb\x37\x84\xfe\xc4\x7f\xf9\xc7\x8f\xbb\xfd\x7e\x1f\xfc\xaf\x3f\xaf\x7d\xd2\xc3\xa9\xfe\x8e\x27\xfd\x5b\xf8\x92\x8f\xfa\xcb\xbf\xfe\xda\x4f\xfa\xc4\x77\x78\xd2\x4b\x6f\xcf\x5f\x76\xe3\x20\xa8\xef\xff\xcc\xaf\xb8\xd7\x1f\xbd\xf3\x93\x7f\xf8\x93\xdf\x5c\x3f\x3f\x7e\xfc\xa7\x7d\xe4\xa7\xfc\xc2\x3b\xfe\xd2\x17\xfc\xe5\xb7\x7d\xdc\x8f\xff\x75\xff\xce\x87\x3c\xe4\xd1\x4f\xbe\x21\xf4\x65\xcf\xb8\xe7\xc7\xbf\xea\xd9\x7f\xf5\x27\x2f\xbc\xfb\x87\x3e\xff\xcb\x1e\xf5\xdc\xfb\xff\xc9\x4b\xef\xf7\xd7\xe0\x83\xd9\x07\x3f\xff\xd7\x9e\xf9\xa8\x8f\xfd\xf0\x37\x3c\xe2\x86\xd0\x7f\xf2\x27\x2f\x7e\xe9\x17\x3c\xfd\x8b\xfe\xd9\xab\x1f\xf1\x9a\x37\x3f\xeb\x15\x9f\xfe\x7d\xbf\xf9\xbd\xff\xfc\x39\x8f\xfb\xe4\xfb\xbe\xe6\xb9\xea\xf1\xaf\xbd\xff\xd7\xfc\xce\x13\xfe\xb7\xd9\xe8\x26\xbb\x7a\x8b\x11\x7e\x63\xe0\x2c\x3a\xcf\xad\x90\x28\xca\xaa\x64\x65\x31\xcc\x63\xb8\x6d\x4f\x4d\x9d\x6b\x3a\x29\x99\x9c\x16\x43\x4f\xb8\x0a\xd4\x8c\x01\x57\x08\x1c\xad\xb7\x65\xdd\xd8\x3c\x26\x8d\xb3\xcc\x99\xd0\xc9\xe0\x01\xf6\x7d\x77\x33\x30\x7b\x6a\xb2\xcc\x9d\x8e\x65\x1b\x78\xd3\x40\xac\xf9\x8a\x3e\x70\x07\x8b\xc1\xc3\x09\x24\x1c\x5f\x37\xc7\xec\x2e\x4b\x6f\xbc\x6f\xf6\x38\x5c\x3a\x7d\xda\x35\x9f\xab\x59\x62\x2a\x8e\xed\xaa\xee\xf6\x0a\xe2\x26\xd1\xb6\x04\x5d\xcc\x90\xfb\x0a\xad\x9e\xd2\x69\x00\x92\xa9\x68\xad\xcd\x2b\x1a\x8e\xac\x21\x39\xe8\xe9\xf3\x16\x64\xe9\x55\x5f\x61\x27\x65\x3c\xcc\x81\xe0\x4a\x0b\x33\x56\x49\x60\x0a\xda\x0c\x62\x40\x4e\x75\xf6\x02\x9b\xde\x5a\x3e\x07\x8a\xa5\xb7\x81\xec\xb4\xcb\xa2\xaf\xa0\x4c\x72\x67\x2b\xac\xbb\x67\x90\xa1\x66\x47\x21\x07\xcd\xfa\x58\x8c\x34\x26\xb5\x31\x93\x5b\xd4\x19\x22\xdf\x06\x1c\xab\xd8\xfa\x1c\xfa\x8a\x0a\x43\x58\x7c\x86\x1b\x21\x9a\x89\x93\xd4\x3e\x81\x68\xa4\x1b\xc2\x94\x5b\x18\xa8\x16\x2e\xa2\x71\x3c\xdd\x68\x99\xc3\x8e\x17\xbf\xa8\x2b\x26\x36\xd8\xe4\xcb\xbe\x2b\x3b\xb9\x8e\x60\xaa\x95\x36\x47\x89\xf2\x85\x1b\x43\x36\xee\x7c\x9c\xb8\x6c\xf3\x28\x07\x27\x84\x84\xac\x04\xf7\x77\xa1\x8f\x37\xc3\xe1\x5b\x0c\x2e\xe5\xa4\xbb\x03\xc4\xe7\x63\x1d\x64\x5a\x42\x1c\xdc\x96\xb4\x2e\x3b\xeb\x70\xf7\x0e\x6e\x10\x96\x59\x01\xe0\x40\xd0\x55\xda\xa3\x8f\x2b\x72\xd3\x52\x8b\x62\x95\x34\x29\xfd\x11\xeb\xb6\xb6\x34\x4f\xaf\x72\xa6\x75\x63\x3e\x1f\x60\x64\x32\x42\x38\xc3\x58\xce\x9c\xb7\x64\xf1\x25\xc7\x87\x17\xa9\xca\x96\x5a\xdd\x0e\x38\x39\xdd\x7b\xef\x87\x3f\x94\x83\xad\x2c\x47\x4f\xe3\x58\x88\xd6\x71\x51\x61\xc7\xd2\xd6\x70\x90\x4b\x0a\x87\x04\xc0\xbc\x00\xa8\x78\x62\x2c\xb5\x75\xf7\x40\xc1\x8e\xfa\x50\x94\x5a\x4f\xcb\x52\x8c\xe6\x2d\x8a\x2e\x7b\x3e\xb1\x0b\x6d\x39\xaf\x00\xda\x24\x8d\x30\x6b\x98\x22\x5b\x16\xd1\xee\xe3\x0e\x8b\x10\x3d\x37\x59\x7c\x3b\xe4\x3c\x56\x62\xbd\x18\x2b\x58\x2a\xad\x46\xe5\xb9\x5c\x01\x2e\xdd\x61\x33\x76\x22\x56\xeb\xb7\xb1\x3a\x74\x74\x0d\x7a\xc0\x3e\x1e\x63\x61\x0e\x8c\x53\x38\xc8\xfb\x08\x56\x65\xdd\x17\x0a\xd4\xbc\xa4\x91\x18\xed\x27\x33\x74\xdb\x8d\x06\x86\x72\xe6\x00\x97\x58\xc7\xd2\x65\x3d\x32\xaf\x4c\x88\xcd\x36\xb7\x25\x36\x65\x1a\x2d\xc8\xbc\x5c\x51\x38\xc4\x61\x81\x48\x3b\x71\x4a\x8f\x6d\x5d\x77\xbc\x9d\xca\x48\x8f\x10\x52\xd3\x0b\x9f\xeb\xd4\x4b\x22\x74\x02\x65\x77\x6a\x32\x0a\x63\xdc\x05\x5c\x6e\xc6\xdc\x6e\x31\xb8\x74\xd2\x82\x98\x46\xd8\x54\xc9\xe2\x73\xa6\x90\xe0\x23\x3a\x6f\x72\x29\x3d\x2c\x23\x48\xa6\xf6\x2a\x81\x27\x6b\xa3\x32\x16\x73\x09\x67\x68\x0b\x5d\xa2\xdf\xf1\x4e\x2d\xa7\xe7\x9a\xa5\xe6\x4d\x08\x9b\x12\xe5\x12\x69\x6d\xd2\x41\xf3\x44\xa3\xb4\xb4\x07\x81\x8b\xe3\x97\x80\x8b\x39\x95\xc7\x99\xe1\x3d\xf8\x28\xc8\xe6\x05\x8a\xde\xe1\x6a\xd6\x3c\x8f\xa1\x0e\xca\x1a\x99\x02\xc8\x2d\xe0\x8d\xe0\x34\x97\xe5\x8a\xf2\x25\xd5\x2e\x9f\xc3\xa8\x82\x8e\x4c\x57\x62\xf6\xad\x75\x99\x74\x0a\x64\xdb\xb7\x01\xc6\x3c\x0d\xe4\xdb\xe0\x12\x22\xb8\x3b\x23\xa5\x19\x57\x34\xcf\x2e\x2d\x33\x12\x4a\x3f\x8d\xd3\x36\x43\xdd\x07\x65\xd4\xc1\x53\x0f\x5d\x86\xdc\xc8\xe4\xb6\x0e\xde\x0a\xc0\x89\x64\x53\xb1\x4a\x17\x68\xfb\xcc\x6d\x8d\x7b\x20\xe7\xe4\x4b\xdb\xb0\x9c\x31\xba\x12\x64\x8a\x6c\x3d\x67\xd8\xd9\x51\xa5\x09\x9e\xfa\xa0\x79\xd9\x61\x34\x32\xb1\x2b\xe0\x9e\xc3\x29\x81\x39\x83\xec\x50\x14\x81\x82\x19\xbe\x1d\x46\x25\x42\xb9\x6f\x80\x17\xaa\x04\x39\xeb\x9a\xd4\x84\x3b\x86\xad\xec\xe6\x8a\xff\x88\x80\x2d\x46\x77\x86\xe5\x4c\x3b\x77\xa2\x1f\x30\xa6\x9c\x87\x62\x27\x29\x86\x51\x99\x52\x51\x41\xef\x74\x25\x0c\xd8\xe3\xd4\xf8\x06\x87\xc6\xdb\xc1\xe5\x66\xb9\xde\x2d\x56\xd5\xf3\x26\xdb\xdc\xc2\xa2\xe5\xce\xdd\x89\xb3\x57\x33\x93\xce\x29\x14\x3e\xef\x89\x58\xbb\x73\x2a\x78\x9c\xb2\x92\x95\x1d\xfd\xac\xea\x8a\x69\x3e\x3e\xb9\x1a\xf7\x95\x42\x02\x8b\xa1\x7b\x44\xc0\x01\xce\xa5\x8c\xaa\xb6\x6a\x69\x24\x47\x63\x27\x64\x41\x34\xc6\x17\xb1\xad\x92\x5f\x31\xde\x61\x6f\x71\x87\xe4\xa8\xdb\x84\x6a\x81\xe7\xb9\xe5\x6c\xfa\x32\xc8\xc2\x90\xa0\xfe\xd4\x63\x94\xf3\x88\xcb\x3e\x34\x59\x6a\x23\xdb\x9a\x2f\x48\x11\x29\xae\x2b\x3c\x34\x97\x4b\x34\xcc\xc3\x5a\x99\x38\xa3\x26\xd3\xce\xa1\xfc\x59\x62\x61\x02\x6c\xd5\x2c\x94\x6c\x70\x3f\x70\x47\x4b\xbc\x62\x15\x05\x0c\x11\x17\x06\x82\x3a\x0f\x34\xf6\x33\x82\x7e\x94\xb1\x17\x29\x72\xf3\xd8\x4f\x5a\xa2\xc0\xdb\xe6\xcc\x39\x9b\x5f\x9d\xc6\xe9\x0a\x83\x0d\x05\x76\x81\x80\xaf\x9c\x01\x32\x2b\x89\xa5\x6a\x35\x28\xe1\x8d\xf8\xe1\x38\x95\x5a\xb4\x66\x0c\xf1\xcd\xf7\xb3\x1b\x67\xe8\x15\x27\xc2\x12\x3f\x1d\xac\x02\x09\xb0\xa3\x93\xe9\x32\x77\x41\xf3\x56\xb3\x92\xb4\x6a\xc0\xcb\xdc\x1d\x13\x68\x91\xd4\x2f\x7e\x6a\xba\xd9\x71\x05\xd0\x86\x73\xb5\xbe\xe0\xa4\xa8\xee\x39\x00\x99\xe8\x62\x95\xe3\xc3\x0b\x79\xda\xc5\x20\xb9\xab\xe3\x10\x92\xc8\x54\xeb\xb2\xf3\xe5\x1c\x77\x4d\x8b\x6e\xa6\x0e\xdd\x62\xe6\xe2\x26\x88\x70\x20\xcd\x99\x87\x88\x2b\xd1\x7d\x3c\x96\x28\xc6\xcc\x24\x08\x46\xc0\x76\x22\x07\x96\x73\x0f\x33\x35\x41\x9c\xe6\xf9\x8a\x81\x65\x07\xc9\xbb\x86\x8e\xe4\x65\x22\x38\xa5\xce\xbe\xf9\xb2\x49\x9e\x25\xf0\xeb\x01\x6b\x93\x36\xb8\x34\x6d\x25\xb9\xd6\xb3\x91\xc2\xae\xb8\xca\x86\x7a\x1b\x98\x24\x64\x2a\x03\x13\x29\xc1\xf9\xd5\x9e\xe7\x29\x1c\xd7\x44\x9a\x28\x06\x1a\x48\xa3\x24\x77\xcf\x8f\xe6\x97\x9a\x2e\x31\xd8\x64\x3c\x81\x8a\x8b\xf3\x46\x6f\x29\xda\x9e\xeb\x71\x9c\x38\x03\x91\xc9\x32\x58\x6e\x67\x2d\xeb\xbe\x07\x31\x1d\xa0\x07\x82\xfd\x0a\x25\x99\x7a\xa7\x2b\x67\x3c\x51\x67\x7b\x4d\x06\x44\x0b\x0e\x0f\x16\x10\x80\xe8\x67\x04\xa4\x18\x41\x00\xcd\xfb\xa9\xb7\xe6\x96\x93\x5e\x94\x22\xea\x5c\x07\x1f\x0d\xe8\x6d\x40\xb0\x55\x6d\x48\x3c\x32\x3b\xa8\x80\xd5\x0c\x7c\x7a\x35\xeb\xa9\x55\x13\x7e\xed\xd9\x69\x56\xd6\x2b\xa6\x14\x20\x39\x91\x26\xa5\x6f\x62\x09\x23\x70\x1d\xa6\x9f\x6e\xe0\x62\x63\x27\xdb\x56\x24\xd8\x54\x22\x83\x30\x96\x99\x5a\x5c\xc8\x11\x5c\xd1\xec\xd6\xb7\xcd\xef\xca\xae\x88\x25\xaf\x7a\x4f\xc5\x30\xd0\x65\x2d\x6a\x57\x8b\xca\xdc\xba\xc9\x86\x6d\x91\x83\x1e\x3a\xe7\x71\x06\x73\xd7\x06\xaf\x9b\xe9\xc9\xb7\x98\xb9\x24\x9a\x47\x38\x1c\x05\xec\x0c\x8e\x1c\x01\x02\x51\xd7\x44\x29\x42\x49\x34\x1d\x50\x56\x07\x00\xcd\xc9\xbe\xe4\x64\xda\x4e\x66\xba\xa0\xe2\x4a\xb3\x73\x53\x9c\xad\xad\x58\xe5\x4e\x2b\x3b\xe9\x3c\xb2\xcc\x42\xab\xaa\x0b\xb7\xbb\x0e\xfb\xee\x57\xef\x45\x3b\x31\xbd\xe3\x42\x5f\x32\xea\x02\x1a\x05\xdd\x88\x66\xdf\x47\x39\x36\x9c\xcb\x56\xd7\x15\x6a\x6a\x33\x50\x67\x16\x03\x38\x2f\x92\xdc\xd2\xa0\x83\x29\x0d\x04\x8a\x57\x94\xa9\x88\x90\xae\x70\x9f\x19\xc6\x0c\x40\xbc\x5b\x10\xc7\xd9\xe7\x12\xb0\x5f\xb6\xa4\x56\xef\xa2\x1f\xc2\x07\xd6\xf2\x9a\xef\xd8\x93\x79\x85\xd9\x68\x5a\x39\x0f\x71\x74\xa3\x07\xd7\x65\x74\x68\x3b\xb7\xb6\xcc\xd3\x69\xe4\xcc\xc2\x12\x55\xb4\x10\xcd\x85\x06\xfd\x74\xbb\xbd\xf1\x2a\xdf\xc2\xdb\xd9\x72\xb6\x07\x6f\xba\x84\x2d\x12\xee\x76\x56\x0d\x9d\x6e\x95\xdd\xc3\x15\xaa\x18\x66\xc5\x8b\x45\x7a\xb1\x27\x08\xcb\xe9\xe6\x15\x6a\x07\x6d\x92\xaf\x83\x96\x5e\xa7\x59\x5a\xf7\x53\x6b\x1a\xcd\x19\x56\x77\x14\xa1\x4f\x8b\xd3\x38\xf0\xc9\x98\xd5\x87\x43\xf5\xd8\xc9\x12\xaf\xf0\x89\xa8\x1c\xc1\xa2\x8d\x1c\x46\xf2\x0e\xd6\xe3\x54\x4b\xa0\x87\xca\x8a\x3a\x73\x36\x2f\xe0\x9a\x67\xae\x10\x0e\xae\x2d\x3b\x4a\xa8\xca\xdc\x05\x5c\x6e\x56\x81\xba\xd5\x7e\x00\x03\x06\x26\x23\x6c\x31\x9c\xe7\xd9\x7c\x5d\x24\x53\x3b\x3b\x43\xd7\x50\xc4\xdd\x84\x7d\x45\x5c\x62\x2b\x40\x34\xee\xd8\x17\xc6\xaf\xe8\x1e\xa5\x1e\x09\xeb\x37\xca\xd2\xbe\xe6\x5c\x32\x0b\x73\x5f\xd7\x10\x39\x62\x91\x9c\xb4\xe3\xdd\xea\x93\x63\xd4\xcd\x0c\xfb\xb6\x9d\xe4\x12\xe6\x82\x2a\x1e\x41\x25\x18\xb7\x5d\x92\x69\x33\x39\x83\x06\x19\x02\x9d\x96\x83\xa4\x2d\x9d\x71\x9f\x46\xd5\xb6\xca\xa5\xf3\x78\xb4\xce\xae\xe8\x47\x39\x40\xda\x46\x15\x85\x77\x2f\x77\x62\x34\x82\x5d\x6c\xc6\x2f\xc6\x1e\x72\x64\xe6\xf9\x99\xd8\xea\x51\xe5\x6c\x95\x76\xe9\x67\x01\x57\x48\xec\x44\x06\x4e\x46\x89\x80\xc0\x2c\x4b\x93\xbc\x18\xe6\x0e\xd1\x2c\xd3\xdd\x1e\xbd\xad\xed\x6c\x79\xad\x74\x17\x75\x6b\xbb\x50\x6e\x5e\xc1\xe2\xce\x06\x07\x39\x2c\x1f\x39\x54\xd9\xd8\xe4\x0e\x9d\x4a\xc2\xa5\x27\xb6\xbb\x64\xcd\xb9\x16\x17\x5c\x10\x47\xe6\x45\x57\x78\x52\x7d\x85\x87\x10\x6c\x04\x9e\x0b\x5c\xe2\x8c\x69\xec\x62\xae\xb3\x93\x32\x65\x33\x47\xa6\x6e\xa1\x8b\x45\x66\x41\x52\x93\xc8\x22\x2c\xb3\x6d\xde\x5e\xe1\x4a\xa8\x33\xef\xbb\x5a\x76\x0e\xab\x2b\x11\x91\x15\x30\x84\xcc\x3a\x50\x9b\x15\x85\xc3\x0f\x32\x83\x53\xca\x05\x42\xa5\xf4\xb0\xa7\x48\xef\x02\x2e\x37\xab\x59\xdf\xea\xb1\x69\x39\x82\x23\x36\x90\xb4\xdd\xf6\xaa\x72\x0a\x1e\x08\x45\xb8\xf6\xf8\x6c\x01\xd8\x2d\x1d\x26\xaf\xc7\xbe\xd9\x58\x05\xdc\xd5\xb8\xc4\xe5\xae\xdb\x5e\x46\xae\xc1\x88\x4a\xf9\xd1\xd6\x89\x06\x82\xdc\xf1\xc5\x38\x64\x5c\x41\x93\xc7\x20\xe0\x28\x9b\xe8\x08\xe6\xd1\xf1\xbc\xa2\x9d\x68\x11\xb9\xa8\x53\x6c\x52\x41\x4e\x17\x3c\x46\x25\x7d\x31\x65\x66\x24\xf7\x7c\x2c\x5e\x9c\x0b\x59\xd6\x43\x6c\xcb\xda\x4b\x73\x45\xac\x57\x7c\xad\x87\x44\xb3\x4d\x40\x79\xe6\x7a\x92\x55\x17\xa7\x6d\x6e\x73\x03\x3c\xa1\xb1\xd6\x0e\x0e\x92\x61\xe2\x88\xf8\x9a\xfb\x31\x0c\xba\xe4\x49\x17\xcd\x58\xe2\x98\xa7\xc1\xc9\xee\x13\x3b\x13\xb7\xab\x5f\x9d\xc5\xb9\x31\xd6\x27\x34\x8b\xe6\xcb\x41\x88\xef\x76\x97\x0e\x08\x9f\xae\x90\x95\x6d\x8b\x7b\xef\x61\x1e\x08\x2e\x33\x24\xce\xd6\x81\x87\x92\xae\xe7\xd6\x93\x40\x80\x30\xc4\x16\x68\xdb\x58\x38\xa9\x7a\x39\xd5\x15\xf6\x79\x8a\xb4\x88\x53\x9f\x16\x8e\xa3\xc9\x64\x86\x3f\x76\x7a\x92\xd2\x3b\x39\x66\x3e\x80\x21\xc0\xbb\x2c\x11\x36\x9b\x3f\xb3\xe1\xe2\x1c\x57\x30\x5a\x17\xf7\xb8\xc3\xb4\xaa\x16\x01\x9c\x20\x6d\xdc\x24\xab\xb4\xb7\x70\x70\x78\x18\x97\x3d\x68\x62\x55\x87\x56\x18\xad\xdb\xb1\xe7\xd4\xee\x62\x36\xba\xd9\xdb\x70\xff\xc0\x6c\xb4\xa0\xc7\xfe\xde\xa7\x3c\xcd\x7c\xd2\xe7\x7c\xcf\xbb\xe8\x47\x3c\xec\x0f\xee\xf7\xae\x9f\xb1\x3e\xed\xcb\x1e\xf2\x95\xff\xbf\xa7\x3c\x62\xfb\xca\x0c\xde\xeb\x79\x37\x84\xb6\xbf\xbd\xf7\x47\xbf\xfe\x79\x3f\xf4\x21\x4f\xfb\xdd\x3f\xfc\x96\xcf\x7d\xe8\x77\xbe\x67\xf9\xa0\x97\x7d\xd1\x67\xa5\x1f\xba\xdb\x8f\xfe\xda\xf3\xc2\x3d\xbf\xf9\x2f\x1e\x70\x43\xe8\x97\x7c\xd8\xed\x1f\xf7\xc6\x97\x7c\xc3\x0f\x94\xfa\xe3\x4f\x7e\xc9\xa3\xde\xff\x95\x7f\xf6\x17\x0d\xff\xfa\x7f\x48\xfd\xd5\x3f\xf6\xa3\xf7\xda\x1f\xf8\xa8\x37\xdc\x10\xfa\xb3\xff\xd5\xfd\xe1\x23\xff\xe6\x6d\xbf\xfc\xaa\xff\xf4\xf8\xff\xf8\x25\xdf\xf2\xeb\x6f\x7c\x9f\x4f\x27\xea\x49\x3f\xfc\xa2\x8f\xfc\x88\x27\xd5\xaf\x7a\xf4\xd3\xbf\xe2\x2d\x37\x84\xfe\xca\x53\x9e\xfc\xa9\xbf\xf8\xa9\xcf\x7a\xe7\xaf\xfb\xc6\x7b\xdd\xfb\xc7\x6f\x33\xe3\x07\xff\xf1\x8b\xbe\xf7\xfe\x1f\xfc\xeb\x3f\xf4\xca\x27\xfe\xc4\x93\xd7\xf7\xfd\xf0\xf7\xba\x21\xf4\x47\x7f\xe6\x81\xaf\xf8\xcf\xec\x51\xf9\xa1\xef\xf2\x4e\xe9\x5d\xfe\xea\x23\xbe\xfa\x37\x5e\x72\x8f\x1f\x7b\x1b\xfc\xf9\x97\x7c\xc1\x9b\x9f\xff\x53\xbf\xf3\xa6\x97\xff\xd4\x0d\xa1\x77\x7f\xe5\x9b\xcc\x57\xbf\xe1\x9d\xff\xb9\x7c\xc6\x27\x7e\xb1\xfa\xf2\x67\xfc\xc9\x03\xdf\xe5\x63\xb7\x6f\xff\xf3\xf7\xb8\xfd\x43\x5f\xfc\xc4\xff\xf4\xdc\xff\xf9\xd5\xdf\x7e\xe3\x10\xa4\x6f\xbf\x7f\x78\xc3\x0f\x7d\x3b\x7e\x87\x67\xbd\xe3\x4f\x7f\xd3\x77\xbe\xe5\x17\x5f\x70\xb7\x5f\xfd\xfd\x97\x2d\x7f\xfb\x91\xf7\xf9\xe9\x27\xfc\xfb\x6f\xfe\xd2\x57\x7d\xd3\xdf\x9b\x8d\x6e\xb6\xab\xb7\x5a\x55\x8f\xd4\x6e\x42\x02\x28\x79\xae\x80\x2e\x93\xad\x5d\x1c\x96\x6d\x40\xa3\x72\x32\xdf\x77\xe1\xab\xaf\x66\x4d\x87\x9e\x6a\x83\x84\x5e\x51\x2c\x4b\xf9\x34\xc2\xaa\x95\x17\x14\x62\x69\xa2\xcd\x1d\x2c\x4a\x94\xc9\x84\x95\x53\xc6\x63\xa0\x30\x03\x19\x5b\xa2\x87\x85\xca\xeb\x79\x81\xa9\x95\x42\xdc\x65\x59\x16\xa2\xd4\x22\x77\xa6\xb7\x8d\xe6\x75\xc3\xcc\x65\x64\x11\x71\x6e\xcd\x65\xea\x8c\x73\x55\x40\xe0\xb9\x90\x2e\xd9\x15\xaf\x3e\x6d\x30\x80\x13\x6d\xf8\x4c\x72\x5f\x72\xca\xab\xa2\x48\xca\x95\xda\xe5\x1c\x94\xd6\x83\x2d\x60\x84\x0a\xed\x7e\x9a\x4a\x34\x03\x0d\x5c\xd1\x82\x42\x76\xbc\xc0\x63\xf1\xd9\x79\xbf\x9c\xaa\x6c\x13\x6c\x78\x4e\xb1\x61\x4c\x24\x09\x66\x25\x65\x51\x59\x9e\x36\x62\x9e\x0c\x3a\x40\xbe\x62\x15\x2b\x08\xcc\x14\x43\xf0\x80\x28\x0d\x8a\xb7\xda\x83\x62\x27\x2d\xc5\x0f\xe1\xe2\xdc\x91\xc2\x28\xce\x69\x74\x21\x80\x86\xad\xd0\x0b\x8a\x65\x4c\xf2\xa9\xe5\x6a\x28\xe1\x56\x65\x6a\xd7\xc1\xa1\xde\x55\xcd\x76\xce\x2d\x6c\xdb\xe2\x03\xd0\x56\x42\xd8\x58\xa6\xe7\x4e\xa2\xd2\x57\x48\x91\x36\x36\xbe\xf7\x71\x10\x57\x18\x47\x55\x55\x22\x75\x5c\xd7\xed\x64\x64\xc0\x35\x21\xed\x87\xea\x8d\x5b\x81\xfc\x4e\x34\xe0\x3d\xba\xbb\xd0\xc7\x9b\xe1\xf0\x2d\x06\x17\xd1\x40\x05\x2b\x70\x83\x53\xe4\x11\xe9\x3e\xec\x33\x35\x37\x69\xdd\xe8\xcc\x28\x11\x0e\x74\x51\x6b\x67\x4e\xd2\xce\x10\xcf\xf1\x8a\xd9\x31\x40\x2d\x88\x42\xbf\x28\xbc\x1b\x27\xf5\x69\x34\x1e\xdd\xf7\x8c\xe7\x91\xd6\xa1\x48\xab\x33\x21\xcd\x7d\xab\x4b\xd4\x1c\x4e\xbd\x5c\x41\x1f\x49\x1b\xde\x6a\x5a\xa7\x25\xa4\xda\x9a\x6b\x5d\x1a\x05\x15\xc0\xc1\x62\x93\xe7\x16\x2c\x19\x62\x0d\xc1\xae\xae\x6d\x7b\x89\x90\x5d\x51\x38\x44\x0b\x3b\xe2\x79\x1e\x05\xd7\x39\xe4\x1e\x97\x02\x5d\x88\x7c\x5a\xb9\xed\x84\xa5\x56\x02\x59\x37\xcb\x37\x0c\x64\x30\x3a\x33\xb3\x5c\xb1\x0a\xb0\x8f\x0d\xec\x7d\xa9\xc0\xac\xd2\x11\x33\x3c\x90\x54\xd2\x51\x9b\x90\x89\x11\x23\x4d\x44\xc9\x40\x90\x6d\x54\xc1\x4c\x94\xe9\x15\x85\xc3\xd5\xfb\x23\x78\x2b\x5a\x0f\x8b\x1d\x91\x30\x3b\x68\xce\x48\x2e\xd6\x75\xbe\xd1\x62\x44\x84\x34\x69\x76\x2c\xcc\xb8\x3d\xd3\xb8\x5e\xd1\x60\x9e\xf6\xc4\x4e\x4b\xd8\xc8\x23\x16\x11\x09\xe7\x6d\x3d\xb7\x43\xef\xed\xc4\x0b\x75\xb9\x00\x0a\x35\x6d\x7d\xc9\xaa\x89\x62\x50\xbc\x62\xb4\x20\xe3\xb1\xe9\x39\x36\x93\x56\xe4\xda\x8e\x3a\xea\xbd\x0f\x01\x1c\xee\x9b\x69\x84\x73\x1b\x5c\x58\xd2\x86\x60\x39\x3d\xd9\xe2\x60\xec\xae\x2d\xbc\x37\x63\x6e\xb7\x58\xf8\x52\x7d\x48\xdb\x4d\xa6\xe5\x38\xf7\xe6\x36\xe6\xfa\xcc\xac\xb4\xa1\x4e\xb8\xcd\x18\x46\x26\x9e\x14\xc6\xdd\xb2\xbb\x86\x0e\x56\xcf\x2b\x4c\xfe\x15\x16\x42\x13\xe6\xb9\xa9\x15\x86\x2d\x97\xea\xd9\xa1\x05\xd1\x47\x20\xbb\x4a\x6b\xcb\x65\x6b\x73\x14\x19\xf1\x36\xe4\x74\x3b\xbd\x42\xdb\x1f\xad\x9d\x51\x87\x98\xbb\xc9\x5b\x21\xd5\x12\x43\xb6\x0c\x95\xdb\xb9\x6b\x0d\xb3\x43\x35\x9e\x29\xae\xea\xd8\x4a\x64\xd5\xbb\xf3\x12\xe6\xd2\xe6\xae\xb6\x23\x94\x32\x31\x07\xc5\x38\xb6\x9d\xc0\xe0\x8a\x65\x6a\x18\xa7\x65\xcd\xf8\xec\x28\x01\x30\xa6\x5e\x56\x4f\x38\xbf\x82\x4b\x6e\x0b\x01\x6d\x10\x32\x35\x38\x23\x16\xd6\xed\x3b\xdd\x5d\x86\x66\x6c\x1b\x39\xa4\x5f\x7c\xdc\x87\x6d\x0b\xf2\x23\xf0\x1a\x52\xbd\x84\x4b\x3a\x0b\xc0\xc2\x32\x5d\x8a\x2b\x28\x61\xe5\x8f\x52\x22\xb7\x50\xa5\xb9\x32\xe0\x57\x28\x67\x29\x74\x56\x0a\x32\x16\xae\x42\xa2\xae\x78\x29\x72\x83\x07\xd5\x2b\x1b\xb4\x5a\xdc\xe3\x01\x8e\x60\x98\x44\x73\xa3\x31\x49\x46\x1a\x85\x80\x81\xa5\xc6\xbd\x62\xac\xcb\xb2\x82\x1c\x2f\x79\x52\x2e\x48\xdd\xe5\xdc\xc1\x6e\x57\x82\x4c\x13\x4d\xb8\xee\x26\x31\xe9\xa8\xa8\x8f\x08\x4d\xec\x0b\x0d\xc3\xec\xf1\x38\x86\xb1\x89\x91\xbb\x80\xcb\xcd\x72\xbd\x5b\x0c\x2e\xf5\xd4\x6b\x6d\xfd\xb0\xd1\x6b\x0b\x77\x25\x03\xc5\x49\xae\x73\xf6\x44\x03\xeb\x9c\x45\x06\xc1\x02\x46\x77\x1c\x24\x81\x3d\xbc\xe4\x89\xcd\x5d\x82\x2a\xfb\xe6\xb0\x89\xa0\xc1\x9d\x0f\x8f\x5c\x17\xbe\x0e\xb4\xad\x61\xb3\xfb\x1a\x55\x2b\x6e\xf2\x59\x48\xc4\xae\x9e\x26\x5f\x21\xf6\xc0\x1d\xd1\xb9\xad\x86\xa7\x3d\x3a\x66\x12\xe0\x8d\x7b\xe8\x24\xc2\x32\xc7\xcd\x16\x83\x77\xeb\xd0\x61\x2d\x9f\xcc\x73\xca\xe9\x25\x65\xaa\x8e\x94\x58\x70\x45\x24\x54\x15\x8d\xb0\x3b\xa5\x68\xce\x31\x06\x0c\x8b\x1e\x7e\x37\xac\x0f\xa7\xce\x56\x56\x66\x05\x76\xa1\x5f\xf1\xde\x37\xed\x1b\xd8\x13\xc9\x3e\xad\x41\x76\xa1\x44\x3b\x15\xad\x3a\x9d\xa7\x8f\x64\x17\x64\x77\x99\x20\x94\xcf\x62\xd2\x92\xf7\x59\xdc\x9e\xae\x50\x92\xb7\x29\x9b\xa8\xe7\x0e\xe6\x18\x16\x2b\x00\x0d\x0a\xdb\x1d\xe0\x42\x34\xb0\xba\x25\x7c\x8e\xb4\xa6\xd1\x88\x6d\xbb\x39\x72\xcc\xe3\x8a\x1e\x50\x91\x02\x16\xb8\xcc\xd1\xab\x01\x3d\xad\x7a\x3d\xbc\x42\x71\x25\xa7\x8e\x58\x0e\x1e\x98\x13\xdb\xd8\x34\x6e\x75\x75\xc6\xa3\xf5\x12\xe6\x22\x9a\x76\x40\x89\x8e\xd1\xa9\xe0\xc6\x07\xa6\xe8\x28\x70\x15\x39\xcf\x3a\x97\x0e\x70\x3f\x7d\x48\xa4\xa6\x80\x17\x25\x54\xb8\xd1\x27\xf2\x76\x70\xb9\x99\x3a\x74\x8b\xd3\x22\x05\xc3\x11\x49\x6c\x24\x70\x9b\xfd\x79\x2c\x1a\xa1\x11\x81\x29\xcc\x22\x7d\xac\x09\xc5\x32\xa8\x5f\x8e\x41\x8a\xe9\x71\x51\x1d\x5c\x31\x41\xd9\x0c\x25\x9d\x70\xf8\xe0\x86\x61\x51\xdd\x16\xf7\xb0\x80\x2e\xe2\x02\xf4\xa9\xa3\xa2\x47\x09\x91\x4a\xbe\xfb\xa5\xef\x28\x56\x90\xae\xf0\x53\x6a\xa2\x16\x5d\x12\x72\x47\x89\x71\x3f\x93\xe0\x59\x9d\x6b\x5d\x66\x46\x1e\x14\xbe\x49\x51\xd7\x25\xac\x11\xcd\xf3\x70\x59\xbb\xe3\x92\x29\x4f\x44\xbb\xd3\x77\x83\x0f\x2e\x1b\xc3\x29\xd5\x4d\x75\x82\xb6\xd3\x96\x28\x54\x99\x1d\x56\xb5\x73\x54\x4f\x66\x12\xef\xcd\x82\x31\x2f\xb1\x06\x8f\x1d\xdb\xb0\xb3\x2a\x92\x38\x3b\x5d\x28\x33\xaa\x33\x62\xaa\x9f\x79\x45\x46\xc2\x44\xd6\x95\x2f\x45\xa5\x44\xb6\xbc\xe0\x0c\x2e\x19\xf8\xba\x15\x3e\x89\x64\xae\x1a\xd2\xb5\x75\xe7\x14\x2c\x23\x83\xf2\xa9\x97\xc5\x04\xc4\xe0\xd6\xb4\x6c\x93\x40\x13\x0e\x54\x29\x8d\x57\x4c\xc9\x14\x2e\x1d\x8a\xcd\x7e\xda\x7d\x9f\x93\x06\xb0\xe3\xe6\x86\x69\x07\xdd\x82\xac\xa5\x3b\xcf\xca\x92\x61\x5c\xb5\x60\xca\x42\xbc\xc6\x2b\x34\x97\x53\xaf\x68\x20\xd9\x0a\x5a\x94\x59\x23\xe6\x21\x4a\x28\x2a\xb5\x86\x22\xa8\x4c\xc7\xa3\x36\xaa\x75\x33\x2b\x77\x21\xce\x4d\xb3\xbb\x0e\x1f\xb9\x99\x9e\x7c\x8b\xc1\x65\x83\x9d\x36\xac\xf4\x96\x10\x5f\x17\x69\x87\x17\xd5\xb7\x5e\xea\x80\xac\x4d\x19\x3c\xa3\x1c\x56\x62\x8c\x44\x86\x64\x0d\x4c\xbc\xa2\x06\xbe\x94\x00\x85\x1c\xc3\x85\x74\x1e\xe8\xf0\x31\x09\x17\xce\x13\x1c\x2e\x26\xb5\xda\x1e\xd1\x52\xe9\x7e\x84\x55\xe7\x6e\x84\x60\xe5\x0a\xce\xc0\x8c\xb6\xd6\xf1\x91\x81\x3b\xa7\x93\x67\x68\x2e\x31\x5f\xc7\xb1\x92\x29\x66\xcb\x98\x74\xe7\x6d\xb0\xbb\x1d\x4d\x20\x23\xf0\x25\x4f\xd7\x53\xc4\x0c\x1b\x0e\x60\x88\xcd\x91\x4a\xe6\xc1\x6e\xd4\x8c\x03\x63\xeb\xc5\x62\x34\xa3\xb5\x8f\x96\xa7\x89\xa6\x91\xbd\x53\xe6\xe7\x15\x6a\x87\x3e\x97\x03\x5b\x63\xd3\x3a\x65\x2a\xe6\x74\x40\x87\x75\x5b\xf7\xa6\x4c\x5a\x56\x45\xbb\x26\x6e\xb7\xc7\x86\xba\x4d\x14\xb1\x04\xcf\x2b\x66\x5a\x8f\x11\x4d\x05\x69\x19\x52\x4b\xca\xa1\x73\x6a\x1e\x07\xc0\x88\x66\x2d\x71\x8d\x51\xb8\xa2\xb6\x35\x1b\xc1\xc7\xb1\xcb\xdc\x96\x79\x05\x67\xb0\x2b\x00\xd0\xc7\xa5\x24\xb7\x82\x8a\xa4\x2c\x9e\x2f\xd6\x10\xcf\xd6\x74\xc4\x53\x37\xb3\xe9\xdd\x2f\x4a\xa7\x5d\x2c\x2b\x51\xfd\x92\xb9\x11\x39\x4e\xbe\xe3\xa6\xb6\x86\xbc\x29\x44\x55\x68\xa7\xd5\x14\x6c\xb8\xb5\x76\x10\xeb\xc0\x7a\xb6\xb6\xe1\x38\x47\x95\x7a\x6d\x98\xe3\xbb\x80\xcb\xcd\x2a\x50\xb7\x18\x5c\xc6\x41\x20\x90\x18\x9c\x62\x5b\xe1\x80\xa7\x0e\x6e\x22\x3b\x0f\x05\x6a\x47\xa7\xc2\x6c\xd9\x70\xc4\x82\xaa\xe4\xb2\x95\x8d\xa7\x2b\x86\x8f\x50\x43\x4f\x51\x86\x1f\x2c\x79\x7e\x1c\x49\x06\xeb\x60\xe8\x14\x72\x75\x2e\x82\xad\x86\x4b\x98\x72\xb1\x1b\x26\x85\x49\xb0\xc7\x71\x89\x1d\xf6\xc0\x36\x33\xa0\x0d\xc0\xfa\xd0\x11\x4c\x4e\xd8\xda\x68\x37\x62\x10\x0d\x99\x3e\xaa\x27\xa1\xe3\x63\x6f\x6e\x2c\x55\xc3\x44\xec\x15\x0f\xe8\xbb\x11\x79\x33\x24\x9d\xc1\xaf\x89\x02\xc7\x02\x8a\x71\xa4\xde\x97\x3e\x95\x9c\x52\xc5\x8a\x9b\x52\x1b\x6a\xab\xab\xd2\x17\xcd\xaf\xe8\x98\xdc\x18\x05\x47\x9c\x8a\x75\xbc\x37\xef\x13\x9c\x9e\xcd\x46\x59\xb2\x8e\xaa\x2a\xa2\xe0\x06\x6f\x5b\xda\x9b\x0a\xe6\x68\x14\xd7\x4b\x1c\xae\xcb\xea\xe1\x19\x16\xbe\x75\xc8\xfc\xe1\xaa\x08\xfb\x42\x8f\x88\xa4\xac\x00\x67\x8e\xf8\xd9\x6d\xc6\x6b\x5c\x8f\xbc\x6d\x7c\x77\x95\x5d\x60\x50\xa6\x6d\x14\x70\x00\x38\xbb\x80\x76\x2f\x72\xf8\xb3\x6b\x3e\x14\xc6\xae\x2e\x5e\x1f\x01\xdb\x85\x24\x5a\x3d\x08\x2b\x35\x9e\x3a\x7b\x5e\x91\x22\x66\x9a\x2d\x38\xdc\x21\x00\xdb\xc8\x66\xb5\x5a\x8e\xe5\xf0\x03\x65\xa2\xf6\x45\x6d\xfb\x56\x77\xc2\x20\x1b\x9e\x1d\x68\x37\x6a\xad\xb9\xdc\x05\x5c\x6e\x56\xb3\xbe\xc5\x9a\x8b\xae\x06\xc2\x55\x45\x43\x36\x7b\xea\x5a\x4a\x84\xb0\x09\x6e\xec\xe6\x36\xd1\xd9\x10\x61\xdf\x20\x3c\x14\x0c\x69\xae\x7a\x20\x76\x89\x88\xe9\xe0\x91\xf6\x3e\x1d\x1e\x11\xa0\x15\x55\x51\x43\x59\x07\xf4\x29\x6e\x63\x03\xce\x72\x34\x09\xa4\x5b\x21\xa9\x02\x4f\x70\xdd\xcd\x25\xd6\xe0\xb6\x87\xa1\xb4\x85\x6c\xe5\x9b\x29\x45\x30\x97\x29\x5f\x0e\x17\x31\x3f\xc3\x22\xa0\xad\x86\x64\x9e\x54\xdf\x4f\x02\xb6\x20\x2f\x69\x41\x2e\x1c\xd6\x5d\x6c\xb9\x1e\x64\x1c\x7d\x33\x65\xab\xfb\xb1\x74\x1c\x66\xaf\xa1\xb5\x2d\x60\x9f\xc8\x0c\x3b\xc3\xb2\xa0\xd2\x96\x45\x5d\xe2\x64\x44\x25\x78\xbd\x38\x5c\x5b\xf4\x1b\x93\xdc\xc7\xa9\x38\x2a\x23\xcd\x4a\x84\xd6\x83\x36\xaf\xad\xce\xa5\xa4\x18\x41\x4b\xfb\xbc\x22\x45\x3c\x44\x51\x75\x72\xa0\xed\x58\xf2\x84\x73\x49\x84\xc8\x0d\x24\xc5\x8a\xe1\x86\x56\xe2\x45\x6f\x2b\x29\x40\x2c\xc3\xe1\xe2\xcf\xf3\x92\xee\x07\x6d\xa1\x0b\xc1\x88\x64\x22\xf7\xd1\x3a\xd1\x1d\x41\xa6\x45\x91\x5b\xf7\xab\x5b\xf2\x3a\x82\x95\xba\xed\xd8\xaf\x1b\x42\xfc\x0a\x15\x8c\xe1\x70\x56\x8d\x09\x58\x30\xb0\x68\x19\x2b\xd0\x49\x83\x4d\x44\x79\x6c\x02\x0b\xd2\xed\xae\x4e\xdb\xd7\x03\xa0\x28\xe8\x2a\xcc\x88\xe6\x2e\x66\xa3\x87\xb9\x47\x80\xcf\xbe\xfb\x8b\xf4\xb3\x9f\xf5\xf9\xff\xec\xe3\xc4\xaf\xbe\xed\xa3\xff\xfc\xe9\x4f\xff\xad\xe7\xbe\xdf\x3d\x7e\xff\xf6\xa7\x7d\xc8\xbd\x7f\xfe\x4b\x1e\xfb\x0f\xcc\x46\x9f\xfe\xf2\x1f\x59\x5e\xff\xb1\x6f\xfb\x18\xf8\x5a\xfc\xd7\x7f\xf3\x8a\x37\x3d\x1e\x7c\xcb\x3f\xf9\x57\x4f\xfb\x40\xfa\xae\xaf\xf8\x77\x3f\xf6\xdb\xff\xe5\xe3\x5e\xf1\xdd\x37\x84\x3e\xfc\xd9\xaf\x7d\xcf\x67\xfc\xd1\x3f\xfa\x85\x2f\x7c\xf3\x2b\x5f\xba\x7d\xd6\xbb\xca\xc7\x7f\xd7\x57\x42\xfa\x9c\xdb\xee\x67\x5e\xfb\x51\x2f\x7d\xd5\xbf\xf8\x84\x6f\xb9\x21\xf4\xad\xf5\x5b\xeb\x67\x3f\xfc\x9e\xaf\xfa\x5f\x2f\xbf\xf7\x2f\x3f\xe6\x3d\xde\xf4\x51\x6f\xfb\xe8\x6f\x78\xce\x3b\x89\xff\xf6\x35\xca\xfd\x20\xfd\xba\x7b\xbc\xd8\xdc\x10\xfa\xe0\x4f\x79\xc9\x43\xff\xe2\x35\xcf\x59\xbe\x09\x4f\xfe\xd2\xd7\x7d\x92\xfc\xf6\x4f\x7e\xf8\x33\x1f\xfd\xbc\xfb\xff\xa4\xba\xcf\x49\x3e\xeb\x9d\x5e\xf3\x1b\x37\xce\x20\xfa\xf0\x3f\x78\xe5\xd7\x7f\xd2\xbf\x78\xbf\x2f\xfb\x6e\xf4\x0d\xff\xae\xfc\xc0\x3d\x5e\x4e\x1f\xf8\x6f\x6e\xbb\xff\xa3\xe1\xe7\xfd\xf9\x43\x7f\xfa\x53\x3e\xf2\xf9\x8f\xba\x21\xf4\xe3\x5f\x36\xee\xf1\xb5\xe6\x7e\xf7\xfe\xee\x17\xea\xf7\xf8\x0f\x4f\x78\xdf\xef\x7f\xa7\x67\xff\xd1\x7d\x3e\xeb\x3f\xbe\xf3\xbf\xfb\xd3\x04\xf6\xa7\x3c\xe6\xeb\x5f\x7a\x43\xe8\x17\x3d\xe8\x29\x3f\xad\xfe\xf6\xd1\xdf\xf7\x94\x26\xde\xf1\x8d\xdf\xf9\xf8\x3f\xfb\x86\xcf\x7e\x84\x79\xde\xe3\xef\xf9\x2d\xcf\xb9\xf7\xbb\x7e\xd7\x5b\xbe\xee\x07\x6f\xbf\x71\x5e\xd2\xf7\xbf\xf3\x53\xfd\xf6\x9a\x2f\xfd\xc6\xc7\x3c\x81\x3c\xf0\xcd\x56\xbc\xe4\x43\x3e\xeb\x6b\xde\xe1\x3b\xfe\x18\xbf\xf8\x09\x0f\xe2\x7f\xf2\xe0\x9f\xfb\xb1\xbf\x37\x1b\xdd\x6c\x57\x6f\x31\xc2\x23\xab\xd2\x64\x19\xad\xbe\xeb\xb1\x13\xa4\x0f\xa2\x42\x0b\x18\x28\x70\x04\xb2\xef\x44\x79\x5a\x09\xa4\xce\x56\x13\xad\x9c\x28\x5f\x41\x56\x74\x5d\x0e\xd7\x1b\x91\x61\x45\x00\x4f\x11\xc4\x7e\xc8\x09\x60\x67\xc0\x9a\x6d\x15\x72\xd7\x98\x9d\x78\x08\x5a\x86\x2b\x04\x8e\x4b\xba\xd1\x77\xa3\x86\x5a\x07\x39\xb5\x6e\xe0\x1c\x6e\x77\x93\x53\x08\x11\xc0\x75\x57\xb9\x4e\x0c\x1a\x9e\x5a\x79\x68\x1a\xab\xe9\x0e\x38\xb9\xe4\xa5\x23\xc9\xb2\x76\xf1\xe0\x65\xf1\xea\xe4\x84\x17\x91\xd1\x9e\xe6\xee\x19\x1c\x41\x12\xef\x87\x49\x9d\x6e\x40\x73\x49\x48\xb2\x21\x5f\x91\x21\x9f\x7d\x3f\xf9\xb6\xcd\x6d\xaf\xbb\xc5\xa5\x83\xca\xa7\x75\x47\x06\x18\x97\xd9\x40\x53\x35\xf1\xc1\x2d\x3d\xa3\xf6\x3d\x7a\x4f\xaf\xf1\xed\x8b\xbe\xc1\x6e\x99\x40\x87\xb0\x53\xe1\x9e\xd2\x26\x29\x27\xe0\x6c\x10\x84\x65\x95\x47\xd0\x0a\x68\xcd\xdb\x2c\x76\x80\x6d\xbd\x64\x2f\xf8\x08\x76\x2b\x4d\xe3\xbc\x8a\xc4\x3c\x17\xc9\x93\xe3\x50\x26\x33\xe2\x10\xf5\xdd\x65\xca\x1a\x6b\xc4\xdb\x10\x97\x39\x53\xd7\x57\xfc\x47\x42\x9b\x1d\xf6\x0a\x91\x3d\x29\x58\x16\x38\xf9\x62\x8c\x5f\xb1\xcf\x6e\x75\x99\x26\x0c\xb9\x9c\x34\x12\xea\x2b\x94\x6d\xdf\xc9\x0d\x54\xfa\xed\xe0\x72\x33\x1c\xbe\xc5\xe0\xc2\x0e\xb6\xba\x0c\x25\x69\x99\xcd\xc9\x68\x07\x9d\xd5\x66\x89\xe1\xbe\xc3\x15\x58\x58\x49\xa2\xba\x75\x65\xbc\xdc\x58\x82\x51\x5d\x71\x7c\xab\x12\x66\x69\x06\x03\xa5\x7c\x2b\xd2\x8b\x45\xac\x59\x0d\xb1\x8c\x9d\xc3\x45\xf7\x83\x09\x82\x43\xcd\x93\x99\xd3\xeb\x4e\x75\xba\xa2\x1d\x87\x73\x60\x68\x2b\x7e\x62\xa2\xb2\x67\xf9\x18\xa4\xa9\x1e\xdd\xa9\x87\x4f\x47\xac\x54\xf6\x48\xcf\x28\x1d\x17\xa4\xc9\x16\xc2\xb8\x22\x07\x81\xb8\x6d\x02\x29\xef\x8d\x83\xe6\x5c\xed\xa6\xf7\x68\xf1\xb9\x81\x3d\xa9\x4a\x16\xb3\xa8\xc6\x5d\xd6\x7b\x86\x1c\xaf\xec\x64\xe3\x8a\x97\x8e\xe8\x26\xa3\xae\x1d\xe3\xdc\xc2\x69\xc0\x04\x71\x2b\x93\x6f\x64\xca\x8a\xd2\xcc\xf9\x38\x65\xcd\xfb\xea\x7d\x07\xdb\xb1\x59\x3f\xb5\xb9\xe2\x8d\xa1\x42\xd9\x28\xd4\x6d\x00\x23\x0f\x02\x5b\x4f\x2d\x58\xdf\xdb\x39\x6d\xf0\x5d\x1c\x23\x5b\xe6\xad\xe9\x0a\x65\x88\xca\x6a\xf0\x71\x05\x89\xa5\x56\x4c\xb1\x2e\x4d\x0b\xd2\x75\x91\x1b\x14\x00\x55\xcd\x91\xe8\x9a\x4f\xe7\xb6\x9e\xfd\x96\x07\xe7\x3e\xef\x0a\x19\xba\x37\xc0\xaf\x68\xc7\x49\xf2\x04\xaa\x61\x49\xd1\x5c\x22\xcb\xa3\xfb\x0d\x91\x68\x41\xe8\xc6\x2b\xd5\x5c\x99\xab\x83\x9c\x24\x83\xb3\x6e\x6b\xde\x77\x06\xee\x02\x2e\x37\x63\x6e\xb7\x58\xf8\x82\x08\x1a\x3a\x21\x69\x4e\xae\x1d\x78\x2c\x94\x4d\x9e\x66\x91\xf7\x1e\x36\xa7\x36\xec\xb9\x3a\x45\x76\xa0\xd6\x56\x87\x99\x62\xb9\x02\x5c\x0a\x4f\x1a\xe0\xb9\x7b\xad\x7b\x2b\x99\xd0\xc3\x16\x72\xc8\x93\x34\x42\xd6\x88\xf6\xec\x0f\xe3\x2b\x97\x58\x69\xd4\x36\x21\xb7\x2b\x26\xd8\xd0\xb6\x23\xad\xd4\x7e\xa6\x2e\xc6\x1a\x0c\xf4\xbc\xe0\x45\xd0\x95\xb3\x53\x46\x19\x10\x77\xad\x2a\xd9\x76\x4e\x2c\x28\x3a\xb8\xc1\xae\xd0\x70\x9d\x95\xeb\x1e\xac\x1b\xd3\x1e\xf5\xa0\x6e\x2b\x28\xfc\x3f\xb4\xbd\x79\x14\x76\x6f\x59\x16\xaa\x29\x7a\xcc\x44\x34\x04\x11\x07\x50\x53\x14\x4b\x79\x46\x45\x19\x54\x06\x2d\x94\x7e\x59\xa0\xa8\xd0\x33\xed\x67\xde\xfb\x99\x9f\xbd\x77\x94\x90\xa4\x60\x98\x16\x9c\x96\x47\xc1\x44\x20\x27\x40\xd4\x34\x01\x87\xd0\x9c\xb5\x10\x45\x34\x95\xd1\x12\x04\x4d\x4c\x86\x0e\x84\x67\xfd\x58\x0b\xd7\xb7\xfc\xce\x5a\xdf\x3f\xdf\xfe\xff\xfe\xe3\x5d\xfb\x7d\xdf\x7b\xdf\xf7\x75\x5d\xf7\x75\xad\x5d\x91\x12\xe3\x18\x40\x2c\xda\xb9\xd6\xf4\x99\xa3\x80\x3d\xad\x50\x5c\x63\xfb\xe1\x3b\x64\xf6\x64\xa1\x52\xe1\x11\x8b\x83\xca\x40\xab\x89\xd9\xaa\x65\x5d\xe4\x5e\x9c\x50\xdb\xd1\xf4\xdc\x79\x7f\x1f\x75\xe6\xdd\x25\x2d\x2e\x15\x4c\x1a\xce\xbd\x9c\xd8\xce\x98\xe3\x7a\x50\x71\xd0\x3b\x5f\x3d\x6d\xeb\x78\x0f\x6c\x6e\xb0\x25\xe8\xa3\x69\x09\x91\x56\xc1\x15\xda\x08\xa5\x32\x38\xd7\x40\x37\x83\x96\xd4\xa5\x62\xda\xc1\x53\x06\x9a\x96\x16\xc0\xd6\xbd\xa5\x48\x70\x27\x35\x24\x50\x4d\x74\x70\x71\x85\x64\x9c\x81\x3d\x6f\x93\xb8\xbe\x1b\x30\x65\x46\xfe\xd8\x57\xb9\x78\x11\xfb\xd1\x12\x5e\x14\xd8\x77\x21\xbd\x57\x83\x07\x76\x4e\xef\x36\x7d\xc3\xb3\x78\x7f\x73\xb9\xd5\xae\x77\x9b\x27\x97\x35\x14\xc5\x80\x5c\x28\x33\xd3\x29\xd0\xb1\x54\xdc\xb2\xd0\x80\x1a\xde\xed\xb3\x1c\x0b\xca\x0e\x26\x6a\x23\x31\xac\xca\x8d\xbb\x2b\x50\x75\x30\x0f\xa3\x75\x15\xd5\xf8\x8d\xf4\xad\x66\x6e\x7d\x57\x55\xee\x3c\x52\x69\x2b\x5b\x86\x04\x71\x03\x46\xf6\xd3\x62\x6f\x28\x3a\xaf\xc0\xb3\x97\xe3\xe0\xbd\xeb\x03\xa0\x7d\x4b\x6d\x6b\x4b\x93\xa1\xf3\x93\xe3\x56\xb6\x7c\x68\x86\x2b\xeb\x79\x3b\x0e\x13\x4f\xc9\x75\x2b\xfc\x92\xe8\x8b\x01\x29\xed\xb2\x1a\x55\x97\xe8\x7d\xb2\x4c\x62\xb9\x86\x9d\xed\x01\x00\x3e\x8b\x13\x01\xd7\xb6\xec\xbb\x0f\x46\x9f\x8d\xaf\xac\x5c\xa0\xde\xe3\x64\x8d\xd6\xb9\xbc\x63\xdd\x66\x64\xa6\xad\xab\x8e\xfb\xe2\xc5\x16\x28\xa4\xeb\x22\xa6\xaf\x7e\x37\x6d\x17\x33\xa8\x49\x91\xa9\xe1\x0a\x99\x0f\x9e\xa3\x16\x70\xd0\x33\xd1\x34\x4f\xb6\xe8\xd5\x80\xa2\x18\x5d\x51\xe9\x72\x59\xb7\xcd\x14\x18\xe1\x52\x62\x99\xcd\x52\xe6\x94\xbf\x22\xd8\x6e\x4d\x8d\xce\xfd\x08\xc6\x19\xde\x57\x11\x27\x59\x0c\xe6\x51\x00\xed\x4f\x80\x98\xc5\x5b\x62\x7a\x56\x75\xa0\xc5\x2a\xc5\xa7\xbf\xc4\x7c\xc4\xfb\x45\x99\x9d\xdb\x00\x5b\x73\xd0\x9a\x15\xee\x7e\x35\x64\xe3\x81\x66\x64\x06\xc9\x8b\xd9\x63\x31\xeb\x56\xd0\x4e\x40\x46\xd9\xdf\x2c\x93\xbe\x15\x3a\x74\x9b\x9b\x8b\x50\x4a\x64\xa2\x01\x9f\x13\xe8\xba\x4a\x41\x49\xb6\xeb\xda\x2a\xa9\x91\x51\x3b\x3a\xd1\xc9\x4e\xb1\x10\x9b\x56\xce\xdc\x21\xd8\x15\xef\x86\x2e\xa8\x21\xac\x8f\x35\xd4\xa0\xfc\x26\x76\x77\x4a\xa1\x34\x27\x64\xda\x49\x28\x5b\x9b\x96\x15\x63\x51\x56\xc7\x83\xb0\x74\x05\x57\x10\x44\x85\x5a\x1c\xc4\x26\x4b\x0c\xd2\x89\x61\x5a\x0e\xfb\x02\x3a\x2e\x9d\xa5\xd8\x26\x59\xbc\x5c\x61\x20\x12\xb0\x2e\xb4\xe9\x92\xc8\x2b\x44\xb9\x62\x0d\xd2\x90\x8e\xb6\xe5\x50\x09\xc6\x9c\x1d\x19\xf5\x90\xdb\x92\x33\xd1\x26\x6d\xb6\x1c\x94\xaf\x58\x0b\x90\x0e\x20\x6d\xb7\xf0\x0a\x6c\x3f\x1c\x03\x65\xb2\x9a\xb2\xda\x2a\xa4\xdb\xd9\xa9\x6b\x39\x82\xf5\x1d\x17\xba\x40\x3d\xa9\xdd\x47\x22\x04\x85\x13\x51\x2d\xb4\xca\x57\x34\x97\x62\x36\x33\xd2\x90\x3d\x4a\x13\x52\xdd\x14\x45\x8c\xc6\x0d\x57\x9e\x33\xcc\x48\x30\x67\x08\x9f\x7c\xd1\x82\xe4\xd2\x9a\x51\xe1\x8a\xf9\x69\x8f\xd6\x75\xa6\x67\x33\x96\x5b\xd9\xe5\x92\x3c\x35\x6e\x9c\x47\x3f\xa2\x5b\xac\x68\xbd\x99\xba\x0b\x95\xf3\x46\xfb\xae\x03\xb8\xe2\xa8\x9a\x6f\x27\x8c\xd0\x48\x45\xd1\x6e\x4e\xca\x2a\xe4\xd3\x2c\x79\x67\x85\x9d\xcd\xf1\x91\xa9\xdf\x6a\x0a\x18\xad\x34\x79\xd6\x15\x4e\x7c\xdc\xd4\x5c\x6e\x85\x27\xdf\xe6\xe6\x42\x8b\x3a\xab\x93\x9a\x32\x20\xd6\x61\xe9\xbe\xee\x34\x0a\x6f\x74\x28\xd3\xa6\x23\x64\x98\xf2\x6a\x8f\x06\x5b\xe1\x74\x98\x9d\x5f\x71\x31\xc9\x26\x07\xbb\xa4\x00\x87\x25\x42\x04\xa2\xd5\x7e\x56\x52\xf0\x1e\x34\xc9\x75\x6c\x2a\x09\x84\xe1\x81\xab\x9e\x5e\x1b\x03\xe7\xb0\x57\x50\x76\xde\x06\x08\xc2\xc6\xf7\xd3\x08\xc3\x23\x72\x6a\x5b\x5d\xa3\xbe\x74\xb1\xd2\x04\x21\x99\xf1\xdc\xc6\x40\xab\x88\xca\xe6\x4c\xa4\xbb\x42\x4f\xc9\x63\x9c\x60\xc2\x7d\xae\x08\x4c\x79\x6e\x48\x79\xab\xf7\x3a\xb3\x74\x2b\xd9\x45\xec\x7a\xeb\x46\xce\x46\xfb\x42\x6d\x23\xd8\x5e\xa2\xde\x13\xc7\x59\x11\x08\x3b\x3a\x28\x3c\x66\x97\xd6\x47\xc3\x31\x42\xcc\xc8\x53\xdb\x40\xb5\x20\x3b\x44\x69\xe4\x08\xb2\x57\x0b\xe4\x97\x58\xf0\x32\x9a\xa5\xcd\xd6\x0c\x61\xdb\xdc\x1c\x5f\x17\xa0\x50\x15\x4b\xdb\x89\x51\x34\x30\x86\x9a\xe2\x1d\x46\x0a\x8f\xc5\x6e\x1c\xd9\x4b\xdc\x2b\x96\x0c\xab\x10\x62\x9c\xda\x8a\xa5\x47\xa9\x75\x6d\xb0\x53\x90\xda\x79\xac\xb8\x1c\x89\x87\x08\x91\xc4\x9c\x0c\x8c\x10\x74\x1d\x5c\x91\xb4\x3d\xd8\x1e\x75\x26\x71\x33\x05\x71\xe3\x5a\x66\x41\x8c\x13\x86\x39\xa2\x87\x80\xb8\x6e\xf7\x19\xf6\x33\x20\x13\x02\xca\x8d\x30\x76\xb3\x6d\xda\xad\x18\xa8\xdb\x7d\x3d\x6a\xc1\x1e\x33\x33\xe7\x4a\xb0\x97\x24\xc2\x08\x16\x46\x31\x56\x46\x1e\xb4\xd6\x85\x9a\xc5\x22\x36\x12\xdf\x76\x11\x55\x47\x53\x5e\xf1\x9e\xa4\xad\xf3\xfd\x10\x34\x2e\x01\x91\xe3\x64\x8b\x5f\x96\xd1\xec\x71\x38\x88\x49\x9c\x76\x7a\x7c\x52\xec\xba\x18\xc9\x04\xc3\x1b\x84\x57\xb4\x38\x93\xc4\x3e\x76\x16\xb6\x40\x8a\x85\x1e\xe5\xba\xe2\x55\x48\x71\x96\xcd\x2f\x59\x4b\x51\xdb\xb9\x8e\x3d\xe5\x75\xd7\x76\x3b\xa7\xbc\x44\x78\x45\x01\xdb\x19\x35\x3a\x34\xa4\xcc\x2a\x43\x3f\x9b\x5a\x49\x10\x32\xc1\xac\xb3\x5b\x56\xa4\xbd\x16\x9b\x96\x05\x4e\x66\x31\x91\x57\xcc\x4f\xdc\x13\x08\xf2\xa1\x4e\xcd\x39\x00\xe4\xa8\x75\xa8\x93\x42\xb8\x4c\x15\xd3\x6a\x0f\x06\x71\xf7\x73\xc3\x91\xb8\x8a\xe2\xa2\xd3\x25\xfe\x94\x4c\x8c\xb2\x56\x56\x9d\x8d\x91\x1b\x69\x97\x94\x88\x95\x31\xa0\x64\x83\x94\x6e\x6b\x66\x35\x31\xc9\xc5\x30\x1c\xd6\x14\x10\x34\x57\xdc\xe6\xf0\x43\x58\x9f\x0e\x30\xd9\x22\xcb\x11\x58\x5f\x4e\x39\xc3\xd6\x39\x45\x94\xec\xa3\xb6\x01\xe7\xb6\xf2\x6d\x20\xa9\xc8\xdc\xa7\x31\xe5\x0a\x55\xe7\x69\x4e\x5f\xb9\x4a\x6b\x82\x07\x12\x16\x3a\x0f\x32\x56\x23\x8a\xc9\xa5\x6c\xb5\xb9\xed\x4c\x82\x6c\xab\xb6\x63\xb7\xc0\x2b\x69\x6f\x96\x49\xdf\x8a\xb3\xbe\xcd\x93\xcb\xb6\xb5\x91\xc4\xba\xf4\xc5\x90\x1a\x0e\xa3\x88\xea\x62\x9c\x22\x1c\x2a\xd6\xd5\x87\xf5\x88\x56\x19\x67\x53\x66\x96\x9d\x8c\x60\x79\xc5\xf8\x3b\x81\x43\xc0\xd3\x61\x6d\x11\xd0\x78\xa0\x4e\x34\xed\xea\x14\x67\x94\x82\xa3\x6b\xbe\x23\x69\xb3\xd8\x8c\xb3\xa6\x3a\x37\xf8\x79\x49\x16\x9f\xa0\xcc\x4f\xaa\xb9\x4e\x8c\xac\x1b\xb1\x65\x02\x95\xe0\x41\xd2\xd2\xf4\x74\x85\x3a\xd4\xcf\xc4\x60\x38\xf0\x18\x12\x61\xe3\xaf\xa0\x1c\x37\xef\xcf\x65\xc5\xf9\xc4\x7d\x52\xbc\x4d\xe5\x32\x52\x9b\x60\xfa\xc8\xf9\x58\xd3\x51\x81\x38\xd9\x0e\x3b\x4e\x01\xae\xbe\x4f\x7a\x85\x40\x99\x73\xa0\xb3\x42\x22\x7b\x35\x34\xb1\x06\xf8\x55\x01\xbd\xb5\xd3\x56\xbc\x1c\x87\x58\x1d\x56\x6e\x1f\x93\x25\x8f\x93\xa8\x30\xa7\x4b\x62\xfc\xcf\x52\x60\x50\x8d\xaf\x3c\x26\x23\xf9\xb4\x62\x9f\x55\x99\xc3\x9d\x41\x03\xb4\xa2\x9a\xd7\xb4\xd3\x73\xd3\x93\xf4\x69\x10\xc2\xee\x0a\x88\x7d\x1c\x9c\xc9\xe1\xf2\x44\x24\x8d\xf3\x18\xb9\xd6\xec\x87\x5e\x48\xdc\x78\x3c\xc6\x5c\xc8\x51\x9d\xef\xeb\xae\xc3\x38\xb6\x63\x1b\xee\x0a\xba\x21\x52\x10\x0e\xb4\x1f\x87\x4e\xd5\xa8\x2d\xa5\x19\xd7\xc9\xb6\x0a\xf1\xe1\xa1\x11\xfd\xcc\xdb\xa0\x45\x22\xa1\xb7\x14\x64\x02\x8b\x1f\x37\x89\x8d\xf2\xef\xfe\x46\xf9\x8f\x6f\x6b\xf7\xfe\xdb\xff\xf5\x9e\x7f\x6b\xfc\xd0\xbd\xdf\xf0\x91\x9f\xf1\xbd\xe6\xaf\xff\xf2\xdf\xf8\x9b\xe9\xd3\x7f\x08\x89\xcf\xf9\xfd\xc7\xfc\x15\xb1\xd1\x23\x21\x3f\x3e\xf5\xef\x3c\xf0\x4d\xe0\x6e\xbf\xfc\xe4\xf7\x7e\xf1\x97\xdf\xf5\xef\x3f\xf8\xbe\x6f\x78\x09\xbf\x3f\xfd\xd4\x7b\xfe\x99\xfe\x92\x8f\x7e\xce\x9b\x6e\x28\x7d\xf4\x43\x5e\xfa\xc9\xf2\x47\x3f\x38\x3e\x77\xff\xd6\xbb\xc9\xff\xf9\xae\x4f\x79\xd5\xff\xfa\x89\x8f\x85\x7f\xed\xd3\x1f\xf5\x03\xdf\xf2\x53\x9f\xfd\xb6\x87\x7f\xf7\x4b\x6f\x28\x7d\xd5\x63\xde\xf8\xfc\xff\xfe\x93\xfa\xe3\xff\xe1\x7b\x9f\xd4\xbf\xf1\xe3\x7e\xe0\xfb\x5e\xf6\x86\xdf\xfd\x97\x3f\xfc\x55\xaf\x7c\xf7\x1b\x3e\xe2\x53\x9e\xfb\x4b\xaf\xfa\x91\xcf\xbd\xa1\xf4\xb1\xae\x3c\xed\x65\xdf\xf1\x83\xef\xba\xcf\xbf\xfc\xb5\x0f\xfe\xc1\x57\x7e\xf1\x7f\xfd\xd9\x8f\x7c\xd4\xf1\x9f\x1e\x7b\xaf\xbb\x7e\xea\x0f\x3c\xff\x95\xe7\x2f\x3e\xec\xd1\x37\x94\xca\x7f\xf7\xe4\xbb\xbe\xeb\xf5\x2f\xfa\xa0\x9f\xff\xde\x7f\xf6\xc6\x27\x3c\xe9\x89\x1f\xfc\x90\x9f\x51\xaf\xf6\xaf\xfc\xa8\xa7\x7e\xcd\x23\x1f\xf4\xcc\x7f\x23\x7f\xff\x35\x37\x94\xfe\xe9\x17\x7c\x3d\x7d\xdc\xb3\xbe\xfb\x0b\x3e\xe0\xfc\x84\x5f\x7f\xcc\x97\xfe\xe1\x33\xbf\xe1\xd5\xdf\xf7\xc6\xaf\x7d\xcd\xb3\xff\xf7\xcb\xbf\xe2\x8b\x3f\xe3\x1f\xfe\xc9\x3b\xdf\x7b\x43\xe9\xcf\xd2\x9f\x7c\xe5\x43\xdf\xf6\xfc\xe3\x5f\xfc\xd9\xb7\xfd\x7b\xf6\x35\xfc\x57\x9e\xf1\x81\xf8\xc3\x1e\xf2\x9e\x2f\xda\xff\xd1\x6b\xbf\xec\x3e\xff\xf1\xa9\x3f\xfe\xe4\x1b\x25\x4c\xbf\xff\xae\xdf\xfc\xc9\xf8\xa0\xbb\xbc\xfe\x85\xf8\x29\xef\x7c\xf2\x4b\xbe\xfa\x53\x7f\x4c\xff\x74\xfa\xa8\xff\xfc\x49\x4f\xfb\xbd\xf7\x3e\xee\x3e\x3f\xf5\x90\x87\xfd\xa5\xd8\xe8\x56\x4f\xf5\x36\x8f\x8f\x61\xe3\x8b\xcc\xcd\x2d\x7b\x1d\x1e\x12\xb6\x74\x4a\x29\x95\x59\xc4\xb0\x03\x41\xeb\x38\x6c\x9a\x9e\x05\xb4\x9d\x4a\x0a\x24\xbb\xbb\x62\x2b\x5c\x08\xd9\xa2\x55\x38\x1d\xcd\xec\x6a\x85\x68\x1f\xb5\x83\x81\x22\xdc\xa1\x28\x67\x3b\x08\xcb\x54\x32\x76\x8c\x30\x5a\x53\x06\xb8\x2b\x24\x94\x47\xec\x5b\x60\x05\xc6\xd2\x3d\x1d\x27\x6b\x96\xac\x45\xe8\x0d\xd1\xa4\xb6\x63\xcd\x9b\x9d\x3d\x81\x72\xac\x35\x49\x9f\xec\x81\xf3\x15\xbd\x55\x31\x4c\x57\xb4\xad\xe3\x88\x1c\x8e\x3e\xb0\x0e\x63\xb1\x04\xc7\x23\xf8\xd1\x60\x9f\xab\xe1\xa6\x2d\x75\x12\xbf\xf6\x70\x44\x22\xae\x70\xf3\xf1\x38\x2c\x12\xc0\x60\x70\x8a\x0e\x0c\x0c\x4f\x25\x81\x88\x47\x00\xbe\xee\x31\x19\x08\xca\x7e\xd0\x93\xe7\x15\xe3\x6d\x81\x69\x29\x57\x00\xa2\x69\xd8\xed\x58\x0b\xc7\xcd\x04\xb1\xfb\x75\xc7\x16\x2c\xfd\x80\x22\x6d\x14\xf0\xd0\xe2\x31\xb9\x03\xcb\x72\xa4\x0e\x56\x58\x95\xab\x57\xf4\xd6\xd0\xf4\x59\x88\x8e\xc1\xa7\x13\xd6\xbe\x37\x82\x37\x11\x24\xd6\xa0\x8b\x75\x3d\x94\xd8\x09\x1b\x95\x75\x75\x08\x94\x6b\xdf\xd3\x15\x71\xe7\x6c\x72\x31\x91\x0b\x6e\x2b\x38\x89\xa2\x41\x46\x07\x5e\x48\x5f\x91\x82\xd6\xe7\xd3\x2f\x8b\x40\xce\x06\x5c\xf7\xa5\xb5\xc3\xe7\x05\xf0\x9b\xc6\xc7\x5b\xf5\xe1\xdb\xdc\x5c\x48\xcc\x10\xe3\xb8\x24\x88\xcd\xa2\xb3\xe4\x72\xf4\x31\x8c\x99\x6e\x3b\x06\x35\x79\x5b\xcf\x64\xfc\x9e\x2b\x65\x9d\xc9\xc3\x81\xf3\x8a\xf3\x44\x41\x59\xce\xe5\xce\xf7\x61\x9f\x54\x9e\x28\x3a\xeb\x8e\x71\xb0\x1d\x0e\xcb\xa8\x5e\xd8\x3e\x65\xdd\x19\x00\x63\xd6\x8a\x08\x6b\xe5\x12\x03\x69\x9e\x8e\x36\x0a\x48\x7d\x01\x63\x8c\x9d\xe1\x48\xa6\xf1\xcb\x71\x2c\x90\x9d\x42\xad\x98\x96\xa4\x3d\xcf\x25\xe0\x13\x5b\xa5\x2f\xf9\x29\x1b\x50\x06\xe4\x03\x8d\xbc\xcc\x83\x4c\xb8\x76\x4d\xdc\x99\x56\x06\xc2\xb1\x77\x15\x4f\xc9\x2c\xba\x73\x48\x28\xac\xe6\x84\x4e\x77\xc9\x35\x7a\xd2\xca\xa7\x86\x25\x09\xa1\x9c\xcb\xec\x13\x1f\xcb\x31\x77\x19\xec\x12\x72\x3c\x65\xc9\x5d\xab\xfd\x5c\x90\x96\x21\x0e\x85\xc5\x71\x85\x2a\x21\xe0\xd6\xb2\x3f\x2b\x5e\xe0\x2a\x0d\xa2\x94\x23\x40\x18\x3f\x13\x1c\x35\x6f\xf0\xce\x71\x56\x2c\x19\xb8\xa5\x6c\x9b\xe8\x14\x19\x46\xae\xd0\x03\x24\xea\xc5\x76\x7a\xd7\xd7\xc4\x97\x2c\xdc\xe1\xb3\x0f\x9e\x6f\x30\x7a\x1c\x19\x3d\xa6\xd8\x59\xb2\xb0\xe7\xd3\xcc\x80\x80\xe6\x57\x2c\x37\x0b\x4b\xa7\x49\x8e\x66\xb8\x64\x15\xf6\xe2\xb6\x6e\xe8\xe9\x96\xb8\xb7\x50\x1b\xf5\x2b\xdf\xa4\xe8\xbe\x42\xca\x08\x59\x2d\x49\xf2\x66\xca\xee\x56\x93\xdb\x6d\xde\x4d\xf5\x44\x2e\x4f\x9f\x8c\xdb\xd2\xb1\x71\xe9\x5a\x1a\x42\x77\xda\x57\xda\x24\x60\xd1\x83\x42\x2c\x50\x8d\xad\x39\x6b\x5b\xeb\xc8\x57\x40\x0b\x56\x0f\xbf\x42\x37\x63\x95\x7e\x53\x31\x50\x5f\x5d\x81\xb4\x61\x6a\xd2\xd2\x64\xd9\x04\x21\x99\x06\x97\x75\x2f\xb0\x94\xb9\xba\x2b\xfc\x95\x0c\x5c\xab\xf2\x6c\xa7\x83\xe8\xaa\x39\xe0\x75\x85\xc7\x8e\x8e\x0d\xcf\xae\x85\x30\x1d\x8e\xce\x20\xdd\x17\xdd\x04\x8e\x7e\xc3\xe5\x0a\xde\xf7\xc4\x33\x8d\x92\x2d\xa8\xde\x6e\x9b\x3e\x04\x52\x78\xb6\x6e\x65\xca\x3c\x2a\xd3\xe4\xae\x62\xb1\xd8\xad\x6d\x51\xc7\x2a\x14\xc8\x57\x10\x87\x8e\xe5\x60\xd0\x06\x90\x3e\xa2\x0e\x81\x81\x19\x63\x4f\x5a\xa2\xd5\x9b\x5d\xc7\xc5\x1e\x55\xee\xcb\xb6\xb9\xb4\xc1\x4c\xd9\x84\x57\xec\xe9\x6c\x3a\x30\x62\xc1\xa2\x22\xb0\xda\x76\xa4\x13\x05\xa2\xad\x3d\x4e\x1c\x3c\x46\x21\x56\x61\xdc\xe0\xcb\xd4\x05\x9f\x26\x68\x33\xaf\x78\xf5\xf1\xca\xb6\xb2\x0a\x33\xc0\xc9\x73\x8e\x82\xcf\x3e\xb7\xb5\x1d\x0e\x2b\xd6\x68\x57\xd2\x9c\xa5\x80\xe9\xe0\x8e\x8a\xdd\xbb\xc0\x67\xb9\x22\x46\xcd\x9f\x3b\xab\x56\x22\xaf\xc1\xca\xb9\x8b\xa0\x89\xae\x71\xca\x4c\xc9\x52\xb6\x59\x24\xcb\xb1\x2f\xeb\xca\x17\xc9\xf0\x8a\xd7\xd6\x6e\x4e\x3a\xba\xd5\xae\x77\x9b\x9b\x8b\x41\x6e\xe3\xe0\xdc\xc2\x16\x2a\x10\x1d\x79\x24\x19\x68\x9b\x1a\x60\xb8\x82\x8a\x10\xc3\x15\xd3\x21\xb7\x49\xe2\x19\x12\xf3\xf9\x8a\xb7\xb5\x96\x09\x1b\xb7\x41\x5f\xb6\x24\x35\x65\xc8\xa0\xf5\xd8\xa0\x57\x6b\x4b\x5c\xa2\x2e\xf1\x79\x38\x1f\x11\xe6\x51\xe6\x83\xb3\x79\x5e\x90\xa8\xcc\x50\x65\x23\xb9\x43\xc3\xed\xd8\xbd\x11\xfa\x9c\xc5\x98\xad\x40\xe9\x76\x02\x03\x80\x96\x1b\x54\x41\x39\x37\x07\xa5\x72\x2c\x6d\xfc\x0a\x97\xa7\x51\x27\x3a\xf0\x31\x80\x6f\x07\x11\xbb\x16\x19\x55\xd9\x4a\x62\x8b\xc9\x33\x1f\xe4\x5c\x34\x8f\xcb\x09\x25\x62\x26\x2d\x00\x61\x77\xc5\x4f\x19\x64\xa5\x13\x70\xf8\x1c\x8e\x8c\xce\xf7\xc4\xcd\x12\x13\x38\x59\xb1\x5c\x6c\x27\x77\xad\x55\x79\x20\xca\x86\x68\xcc\x8f\x60\x2e\xc1\xf6\x09\x0d\xf0\x30\x29\xb5\x6a\x4e\x60\x69\x5d\x69\x51\x20\xb8\x14\x5a\x58\xda\x61\xf4\x14\xd4\xcd\xb2\xec\xc3\x72\x57\xdb\x29\xa1\xbb\xc2\x31\x34\xee\x64\xc2\xb2\xc1\x5d\x4f\x97\xbd\x21\x73\xd1\xd9\xd7\x03\x57\x34\x56\x99\x36\xd6\xcc\xd8\x16\xa8\x16\xdd\xc2\x26\x69\x63\x83\x5f\x91\x71\xed\xc7\x66\x85\x72\xe2\x40\xda\x93\x45\x99\x9e\x32\x8b\x60\xd7\x12\x01\x7f\xa2\x46\x23\x0a\xe7\x6e\x4a\x10\x40\xb6\x8d\x08\x44\x04\xb8\xa9\xb9\xdc\x0a\x1d\xba\xcd\x6b\x51\xda\x2d\x39\xe9\x28\x8c\xe3\xda\x59\x62\x8b\x06\x66\x33\xd2\x96\x69\xb8\xf3\x6b\x5a\x02\xc9\x5d\x46\xb2\xa6\x35\x9c\xbe\x88\x70\x85\x53\x2e\xb7\x47\x2f\xab\x8e\x30\xe6\x10\xcc\xd1\x83\xb3\x7e\x49\x88\x7a\x8b\xb0\xf4\xd9\x8e\x44\x51\xaa\x25\x16\xb5\xf4\xd4\xc0\xdc\xe9\x15\xd2\x60\x3e\xa4\xf1\xfa\x88\xb6\x3a\xda\x90\x92\xb0\xe9\xee\xb7\x70\x22\xb1\x18\xe2\xf7\x33\x63\x17\xaa\xde\x83\xc5\x32\x6c\x1b\x6c\x16\xe6\x2b\x78\x5f\xbe\x93\xc0\x67\x17\x19\x06\x7b\x1e\x84\x26\x54\xd8\xe9\xcc\xae\x3d\xdd\x59\x65\x07\x44\x8e\x4f\x28\xd8\x36\x43\xeb\xa5\xf8\x58\xaf\x18\xc2\x91\xe1\x30\x26\xe7\xfb\x46\x42\x74\x76\x86\x4e\x98\xdb\x1d\x0e\x74\xb8\xc4\x6d\x00\x89\x03\x75\x6a\xb2\x49\x3c\x5d\x38\x87\xbe\xe2\x32\x9f\x73\xb7\xeb\x96\xb6\xc2\x08\x10\xbc\xa1\x96\x5b\x28\x02\xcb\x73\x5d\x27\xd0\xa5\xa1\xbd\xae\xe7\x9e\x3a\x3a\xb7\x05\xc0\x53\x94\x70\xc5\xe1\x1f\xe3\xa1\xba\x62\x2c\xaa\xa7\xd6\x4b\x8d\xc4\xd2\xce\xea\xa1\x4a\x59\x56\xa4\x20\x20\x14\xef\x4b\xe8\xe1\x60\x64\xe0\x15\x0e\x3c\xfc\x15\xee\x5f\x07\xb7\x12\x16\x8d\x4f\x52\x63\x2a\x4b\xf1\x16\x41\x0f\xd6\xd6\x7a\x1d\x71\xe4\x63\xb2\xc0\x91\x9b\xc6\xed\x6b\x0d\x67\xc0\xcb\x0d\xaa\x84\xf7\x37\x97\x5b\xe1\xc9\xb7\xb9\xb9\xb0\x7a\xba\x10\x15\xb7\x03\x74\x52\x90\x77\x29\xd6\xe6\x74\x73\x81\x0f\x9d\xe6\x4e\xc7\x91\xfc\xae\x3d\x8b\xeb\x1a\x80\x20\x19\x5e\x31\x84\x1b\x0a\x4d\x01\x3d\xa0\x74\x90\x35\x50\x04\x73\x49\x22\x78\xef\x92\x3b\x9a\x49\x7e\x57\x7a\x6d\x84\x31\xb4\xd2\xb1\xcf\x18\x35\xbb\xe2\x53\x0c\xa7\x1a\x8d\xe7\x51\xc3\x36\x28\x67\x65\x39\x8e\x8e\x62\x5e\x6a\x27\x9c\xd2\xf5\x3c\xa1\x9c\x42\x4f\x22\xc5\x6a\xbb\xde\x21\xbc\x24\x6f\xa9\xcb\x1d\xa9\x5d\x77\xdb\xfb\x39\x10\x61\x96\xd0\x6d\x31\x9d\x10\x2d\x57\xb4\x8d\xb0\xd9\x12\xfc\x10\x1d\x1c\x41\xf0\xbe\xba\x90\xaf\x20\xcb\x82\xdc\x31\xa0\x62\xdb\x5d\x19\x78\x20\x43\x91\x85\x1c\x48\x90\xab\x81\x34\x2f\x46\x5b\xb3\xee\xdb\x14\x5b\x1d\xb5\x3a\xd6\xc0\x25\xa1\xa7\x5b\xd5\x65\xc1\x3c\x6d\xe3\xa4\x72\x20\x2e\xaa\x21\x49\xb7\x35\x76\x55\xd3\xe4\x2a\xef\xc1\xc5\xb2\xee\x6d\x8d\x7e\xce\x42\xfa\x25\x52\xb8\x32\xe7\x39\xf0\xa4\xd1\x9e\xc3\xad\xc9\x8c\x52\x6a\x93\x06\xe3\x33\xb2\x99\xec\x49\xe4\xd8\x10\xd9\x38\x92\x45\xb8\xce\x26\xbf\xa4\xd1\xca\x65\xe1\xdb\x1c\x2d\x0f\x5f\xbb\xca\xcb\xda\xfa\x06\x42\xd6\xb5\x00\xd3\x1b\x2e\xb2\xf9\x8d\x0d\x67\x76\x13\x31\xd8\xdb\x9e\x6e\x78\x01\xbf\xbf\xb9\xdc\x8a\x81\xba\xcd\x6b\x11\xdc\x75\x6f\x66\xcd\x61\xac\x96\x05\xdf\x8b\xd2\xe4\xdc\x4b\xce\xce\xa4\x65\x5d\x21\x3f\xed\xd9\xfc\x99\x4a\x8c\x1e\x93\xc1\x0f\x71\xc5\xc8\x67\xce\xa1\x10\x0a\x23\x31\xe6\xb6\x92\x08\xae\x79\x07\x6b\xc9\x3c\x31\x8f\x30\x2a\x2c\xab\x21\x57\xac\x37\xad\x07\xb6\xdc\x76\x7f\xc5\x10\x1e\x3c\xb3\x51\x2e\x6e\xce\x12\x86\xa4\x44\x87\xa4\x81\x60\xae\x55\x12\xa8\x8a\x7b\xa2\x0b\x54\x9a\xb0\x93\x6d\xfc\x94\xcd\xe8\x2b\x16\x12\x7e\xc2\x5e\x5a\x81\x33\xe1\x64\x25\xdc\xca\xd1\xac\xd6\xa2\x43\x04\x54\x8d\x76\x37\x0d\x80\x32\x0b\x3a\xa7\x35\xc3\xa7\x66\xc2\x71\xc1\x8a\xc8\x07\x93\x0d\x53\xb1\x41\x4b\xeb\x18\x28\x36\xe2\xce\x8d\x49\xc1\x03\x0b\x50\xc8\xe2\x60\x3e\x51\x95\x66\x85\xd5\x9d\x4d\x46\x77\x09\x16\x97\x42\xa7\xcd\xc9\x74\x96\x8c\xb7\x73\xc7\x32\x6d\x43\x4f\x58\x6c\xc1\x30\x1f\x16\x64\x91\x5c\x16\xd3\x4e\x1e\xa9\x0d\xe7\xa6\x8e\x2b\x6e\x58\x1b\x27\x4b\xef\x9d\x24\x5a\x5d\x46\x7d\x41\x8e\x34\x22\x62\x41\x4d\x00\x10\x86\x5e\x61\x62\x2d\xe4\x5a\x24\x9e\xe3\x08\xea\x28\x57\x68\x66\x02\x2a\x3d\xe6\xda\xfa\x31\xc5\xb1\x59\x57\x11\xc8\x60\xd5\x8a\xac\x25\xf2\xb8\x05\xec\xec\x71\x38\xde\x8b\x2e\xbc\x69\xd7\x5c\xbd\xd9\x36\xed\x56\x9c\xf5\xed\xce\x68\x8c\x0a\x96\x23\x2b\x42\x17\xd3\xdc\x56\x35\x5e\x58\xd2\x4d\xe3\x10\xaa\xd5\x8e\xa5\xa5\x1b\x5c\x04\x27\xd1\x2d\xdb\xb6\xcc\x79\x49\x80\x88\x4c\xb5\x43\xae\x23\xc7\x52\x49\x1b\x8d\x4f\x26\x6e\xde\x08\x60\x7c\xd0\x04\x16\x3a\xd7\xce\x7d\x02\xd8\x4e\x7d\x30\x7b\xa4\x4b\x1c\x6c\x7a\x9d\x3c\x1b\xd7\xb9\x56\xf1\x30\x4d\x1e\x33\x28\xdf\xa7\xec\xc9\xaf\x8b\x2f\xb4\x5b\xa7\x9b\x8a\xe2\x08\xe5\xe8\x49\x33\x72\x09\x88\x79\x58\x7b\x64\x8d\x75\x14\x45\xca\x20\xe9\x21\x8b\x73\x79\x40\x1f\x07\x20\xc6\x1e\x21\x61\x83\x58\x10\x69\x17\xcb\x66\x4f\x10\xfc\x15\x3f\xe5\x96\xc1\xba\xef\xf2\x98\x52\x58\xb9\xaa\x3d\xee\x60\x46\x70\x66\x99\x34\x20\x94\x40\x5f\xd6\xf3\x98\x0a\x2d\x7b\x1d\x6b\x03\xca\xe5\x2b\x16\x55\x00\x87\x08\x61\xc8\x90\x35\x3f\x85\x8f\x64\x5b\x66\x0e\x31\xd8\x4d\x31\x80\xb1\x4a\xe0\x94\x4b\xa1\x79\x1b\x24\xf1\xa1\xba\x62\x57\x4c\x2e\x0d\xd5\x20\xb7\x92\x1a\xe7\x1b\xcf\x98\x78\x3f\x84\x14\xa1\x12\x65\x01\x19\xe6\x70\x70\xd3\xfe\xa0\x7b\x95\x8a\xcb\x7a\x80\xe3\x92\x4c\x90\xc0\x22\xdc\x02\x18\xaa\x5b\x1f\x83\xce\x22\x11\x91\x7d\x68\x35\xd6\x28\x2d\xc4\x60\x16\xca\xc7\x98\xae\xef\xa8\x59\x82\x15\x60\x37\x89\x8d\x1e\xfe\xd0\xa7\xdd\xf1\xf8\x97\xbf\xe9\xdf\x3e\xea\xa3\x1f\xfd\x88\x7f\xbf\xfa\xcf\x78\xcb\x5b\xef\xda\xdf\xf6\xd8\x8f\x7a\xca\x0b\x1f\xf0\xb2\xfc\x4b\xf7\x7b\xe0\xff\xfa\x2b\x62\xa3\x17\xfe\xda\x2f\xdd\xed\x59\x77\xff\xe0\x0f\xfd\xf6\xc7\xdc\xf1\xa2\x9f\x78\xc9\xaf\x7e\xe5\x87\xfc\xdb\x75\xfb\xca\xbb\xfd\xe6\x1b\x3f\xe5\xef\x3c\xf9\x57\x3f\xe2\xee\x44\xdc\x50\xfa\x8d\xf7\x7c\xdd\x1f\xee\x4f\x7d\xf0\xb3\x7e\xe7\x3e\xf7\xfa\xa4\xfb\x3d\x5b\xfd\xd1\x4f\xff\xce\x37\x7f\xd5\x4b\xe8\xdb\xc5\x23\x5f\xa3\xff\x4b\xfc\xd7\x0f\x7d\xc6\x0d\xa5\x5f\x76\xaf\x7f\xf7\xb8\xaf\xfc\xec\xdf\xfa\x6f\x9f\x94\xef\xf8\xac\x07\xfe\xdb\x87\xfd\xf2\xa7\xbd\xf9\xbd\xf6\x0b\xbf\xee\x75\x9f\x99\x9e\xf1\x10\x6d\x3e\xfd\x9b\xeb\x0d\xa5\x5f\xf1\xd8\xaf\x7b\xc4\x93\x1e\x75\xc7\xdf\xfe\xe9\x47\xbd\xf6\x15\x7f\xe7\x5e\x0f\x25\xaf\x27\x5f\xf0\x39\x4f\xfb\xed\xf7\x7e\xd5\x6b\x5f\xfe\x94\x37\xff\xf6\x27\xfc\xc6\x07\xdf\x50\xfa\xe5\xef\x7a\xd4\xdb\xdf\xfa\xf5\x77\x7c\xc5\x23\xbe\xeb\x8e\x97\xbc\xea\xeb\xbf\xea\xb5\xe5\xf9\x9f\xf4\xee\x5f\xf9\xd7\xdf\xf6\x07\x1f\x74\xcf\xfe\xe8\xf1\xe0\x5f\x7f\xc0\x0d\xa5\x0f\x7d\xf2\x3b\x1e\x5c\x3d\x7a\xf6\x6b\xdf\xf1\x83\xe8\xdf\xa8\x17\x3d\xf7\xb1\xe7\xb3\x1e\xf0\xc3\xcf\x85\xf7\xfb\xa6\x8f\x78\xc0\x2b\x5f\xf6\xbd\x0f\xfa\x7b\x37\x94\xd6\x07\x7e\xdd\xdb\xef\xf9\xba\x47\xbf\x14\xbd\xec\x23\xfe\xb6\xff\xc3\x1f\x7f\xda\x0b\xdf\xfc\x37\x1f\xf2\xa3\x7f\xeb\xfb\xbf\xee\xc3\xd5\xa3\x5c\x7c\xf3\x3d\xc2\x8d\x41\x72\x9f\xf0\x9c\x27\xbf\xe2\x01\x3f\xfc\x8a\x87\xfd\x8b\x97\x83\xfb\xbe\xe5\xbe\x3f\xf5\xc4\x17\x3e\xa0\xfc\xc9\x7f\xf9\xa3\xd7\xbf\xe4\x1d\xf7\x7a\xeb\x5b\x7f\x63\xfb\x9c\xbf\x14\x1b\xdd\xea\xa9\xde\xe6\xdd\xb4\x2d\xde\x36\xd1\x4e\x7d\x4a\xdf\x85\xec\x1e\x1a\x96\x9b\x62\x2d\xef\x72\x0f\x06\x0c\x3a\x2a\xcc\xa4\xcf\xee\xe0\x36\xb8\x37\x57\x24\x1d\x71\x21\xa5\x08\xc5\x30\x6b\xb4\xe0\x9e\xa7\xa8\xf7\x61\x43\xa4\x4b\x9e\x70\x12\xc5\x77\xe3\xda\x99\x04\x38\x90\x9b\x31\x8c\x9c\xed\x15\xd8\x3e\x18\xe7\xaa\x53\xc5\x40\x66\xef\xf2\x0e\x20\x56\x14\x0c\x60\x19\x03\x20\xe4\xbc\xaf\xa0\xa0\x39\xb2\x1b\x94\x13\x5c\x75\x64\xc7\x15\x43\xac\xb2\x55\x92\xb4\x2f\x9c\x67\xbe\x36\xb2\xa5\x1a\xf6\x6c\x42\xdc\x4b\x65\x73\xaf\xb0\xf6\x62\xb7\x45\x6e\xd6\xfa\x96\xc6\x58\x26\xbb\xe2\x59\xec\x46\x66\x68\xa3\x0b\x8c\x10\x8a\x05\x58\x6a\x80\x5c\x70\xb2\x79\x8f\x4e\x3c\x8f\x95\x9f\x4a\x03\xe3\x37\xa5\xfd\x50\xde\x2d\xf2\x0a\xdf\x88\x73\x05\x6d\x9e\x03\x72\x80\xd2\x98\xcc\x46\xa5\xa7\xa7\xf6\x4c\xfc\xe4\x7c\x63\x3b\x47\x05\x1e\x7a\xdd\xa9\xf2\x11\xd0\xa6\x40\xb8\xc2\x18\xb3\x31\xbc\x2d\x0e\x35\x93\xc5\x60\x39\x42\x58\x4b\x34\xa7\x47\x44\x3a\x76\xc8\xf7\x81\x08\xe1\xc8\x82\x2f\x8e\x83\x63\x8e\xcc\xdd\x15\x16\x28\x60\x37\x09\xb2\x52\xf1\x31\x46\x3e\x16\xbb\x21\x4d\xf2\x18\x5b\xf2\x0c\x89\xd6\x42\xdb\xdc\x76\xe7\xc0\x7f\x96\x89\x78\xe6\x87\xba\x01\x7e\x7b\x7f\x73\xb9\x55\x1f\xbe\xdd\xc6\x98\xab\xd9\x39\x5a\xcf\x4a\xf8\x92\x54\xd0\x94\x22\x68\x23\x2f\x14\x10\x9e\x13\x0a\x45\xae\x62\x72\x13\x27\x12\xc3\xc4\xc6\x08\xbf\x82\x89\xaf\xcc\xa1\x05\x42\x23\xb3\xf5\x35\x27\x41\xa6\x61\x40\xf7\x68\xa5\x0b\x70\xa3\xa5\x89\x25\x11\xca\x0d\x72\x55\x41\x1b\x86\xb1\x57\xec\x63\xc0\x1f\xc8\xf2\x96\xf2\x02\x7c\x5b\xb6\xbe\x2a\x6f\xd7\x75\xad\x7d\x44\x95\xb3\xdb\x27\x84\xd3\xa2\x01\xe9\x49\xaa\x42\xb2\xe9\x4b\x14\xf3\xd5\x19\x4f\xb2\x0c\xb8\x01\x1b\xeb\x41\x0f\xa0\x42\x14\x41\x00\xbf\x07\x96\x28\xad\x27\xf3\x0a\x0c\xc4\x6c\xd2\x7a\x06\x56\xca\x05\xe6\x6d\x2c\x5b\xc4\x75\xab\xaa\xe9\xe8\x4f\x4b\x0f\xbe\x10\x0b\xd0\x24\xae\xd8\xe1\x60\x02\xc4\x75\x84\x03\x2d\x7d\x59\xac\x54\x5e\x61\x7b\xc5\x40\xef\x82\x3b\x70\xd9\xa9\xaf\x47\xc5\x8b\x2b\x7b\x7e\x9f\x7e\x30\x3b\xc1\xd9\x12\xe4\x11\xfc\x26\x80\xef\x41\x95\x5e\x22\x1a\x7c\x8a\x2b\x50\xf5\x69\x39\x1c\xcb\x02\x10\xe6\x06\x3b\x1f\x9c\x33\x67\x40\x4b\x86\x5b\xd8\xa1\xdd\x81\xc3\x26\x1c\x23\x6d\xf3\x7c\x5f\x5e\x8d\x3a\xda\x15\x07\x52\xad\xd2\x3d\xf2\x29\xed\x04\xfc\xe4\x4e\xb3\xa4\xc0\x60\xe5\x28\x8b\x76\x44\x08\xe7\x88\x3f\x48\xa8\x14\x52\x7f\x14\xb5\xf1\xe5\x86\xe8\xf7\xf7\x37\x97\x5b\x4d\x6e\xb7\x79\x72\x11\x25\x06\xbb\x47\xa2\x17\x70\x72\xe0\x48\x72\x5a\xe0\xba\x00\x9f\xe5\xb1\x21\x00\x5a\x95\x3c\x80\x92\x90\x37\x08\x7b\xa6\xcd\x79\x05\xe3\x8a\x21\x54\x55\x52\x32\xed\xb1\x2a\x66\xc3\xde\xdc\x5c\x18\xef\x2b\x17\xc3\x87\x45\x93\x66\x54\x44\xc1\x20\xcf\x70\x5a\xf5\x09\xc0\x15\x0e\x80\xdc\x89\x1d\x34\x4e\x3a\xed\x09\x26\x6a\x75\x4c\xfa\x0c\x6a\x66\x1f\x40\x1a\xcd\x1d\xbe\x09\x0a\x20\x8a\x9b\x00\xae\x54\xa9\xc5\x15\x6f\x28\x51\xed\xbe\x10\xb5\x26\x45\x82\x13\xe1\x08\x42\x9e\xc0\x86\x4d\x1e\x96\xad\x7b\x6e\x73\xe8\x22\x99\x44\x35\x20\x49\xd8\x51\x1b\xbc\x02\x55\x57\xda\xee\x86\xae\x51\x80\x6d\x2f\xa2\xea\xa9\x0b\xa0\xba\x19\xdf\xe7\xf0\x8c\x72\xee\x48\x15\xb8\xa9\x65\x0d\xf4\x8c\x40\x1f\xe1\x0a\xe0\x6b\xed\xf2\x88\x27\xa9\x38\xae\x4d\xcc\xce\xb8\x4a\x7a\x9d\xf3\x6c\x8d\x4f\xd4\x10\xd9\xb6\xe5\x50\xe7\x62\xd8\xec\x6a\x36\x53\x7b\xbe\xc2\xef\x76\x2f\x6a\xae\x47\x60\x99\xe0\x03\xc0\x9c\x00\xdd\x47\xc7\x6b\x3e\xb6\x9d\xcb\xad\x05\xe3\xeb\x9e\x46\x4c\xdd\xf1\xa9\x8c\xe9\xe1\xbc\x62\x7e\x4a\x12\xee\x27\x4e\x23\x6a\xb9\xd9\xb8\x49\x8c\x0e\x6d\xe1\x79\x5a\x26\x65\x13\x9b\xda\x3b\xd5\x86\xc2\x05\x39\x88\xd4\xee\xe6\x6e\x6f\xa6\xec\x6e\xb5\xeb\xdd\xe6\xc9\x65\xa1\x7c\x01\x40\xf5\x39\x97\x23\x8f\xc6\x95\x58\x02\x96\x2b\xe6\xb1\xaf\x0d\x10\x41\x9a\xe2\x64\xdd\x44\x43\x6e\xce\x0a\x15\xb0\x97\x00\x1c\x8b\x08\x0b\xc7\x9a\x33\x64\xea\x20\x69\x45\xe4\x60\x2b\xd5\xcd\xcf\x19\x6b\xdb\x4e\xac\x36\x30\x95\xd9\xc0\x6e\x94\x60\x68\x1e\x57\x58\xad\x76\x87\xeb\xb2\x1d\xca\xa9\x98\x44\x03\xdb\x42\x31\x85\xc1\x18\x47\x79\x07\x10\x24\x1e\x20\x5f\x91\x04\x79\x6a\xca\x5b\x99\xee\x92\x18\x35\x12\xa8\x05\xc3\xcf\x2e\x29\x60\x9a\xd9\x14\xf8\x79\xc0\x12\x77\x5b\xc4\x09\x83\x88\x11\x8b\x3c\x2d\x28\xce\x4c\x83\x60\xf3\x97\x5c\x96\xed\x78\x97\x62\x47\xfb\x92\x0e\xa2\xf6\x12\xc2\x90\x5b\x22\x52\x05\xb0\x26\xbc\x1b\x5a\x3b\x27\xa8\x14\xea\x76\x82\x72\xa2\x4b\xba\x82\x03\x67\xa1\xf0\x02\x64\x5d\xa6\xa9\x4b\x3a\x57\x66\x65\xc3\x09\x12\xb3\x92\xe8\x8c\x60\x47\x8a\x01\x76\xb1\xcc\x1d\x00\x5e\x41\xa9\x42\x5c\xe2\x35\x45\xc7\xaa\xb3\x03\xfc\x80\x0c\x95\xee\x8d\xad\x99\xc0\xd5\x62\x60\x43\xde\xf7\x42\x5c\x3f\x14\x3b\xfa\xd6\x4e\x31\x83\xa8\xa7\xbb\x82\x50\xf6\xf5\xd0\x61\x5f\xe9\x81\xf8\x41\xb9\xdc\xd1\x12\x73\x3b\x0b\x58\x99\x08\x7e\x91\x3b\xaa\x81\x46\xd6\x5d\x1c\x07\xa2\x87\x5a\x7a\xbe\x99\xb2\xbb\x15\x3a\x74\xbb\xc3\x48\x56\x7c\xd2\x31\xca\x09\x99\xe8\x88\xc5\x66\xb4\x12\x27\x52\x4d\x0a\x6b\x07\xc5\x8b\xc9\x72\xe9\x2b\x68\x3d\x90\x56\xf2\x20\xe1\x0a\x24\x19\xf6\x6a\x38\x57\xa7\x99\x08\x2f\x93\x4e\xef\x4e\x1b\xf7\x5d\xad\x64\xa8\xe5\x7d\xd7\x2a\x74\x0b\x23\x05\xc3\xa4\xae\x27\xe3\x4a\x5c\x22\x6d\x01\xdb\x9d\x23\x9c\x5a\x2d\x0a\x4a\xa1\x6d\x91\x79\x6c\xa4\xa5\x9c\xd7\xa5\xe6\x5d\xb2\x92\x9a\x5b\x4e\xb0\xeb\x3d\x22\x9c\x39\xbe\xc2\xfc\x96\xbb\x51\x82\xa2\xe8\xcc\x65\x2e\xa9\xe0\xc4\xd6\x4d\x8c\x0a\xc0\xa2\xf1\xc8\x38\xba\x15\xba\x76\xa4\x93\x35\xce\xf6\xcd\xf8\xd5\x5d\xa2\x8d\xa0\x81\x1d\x58\xc0\x63\x8f\x8c\xa2\x76\xfa\x1d\x67\xe1\xcf\xa8\x33\x45\xca\x4d\x20\x9d\xa7\x30\x90\x59\xcd\xc2\xb2\x92\x0c\x3b\x79\xc5\x37\x12\x94\x5e\xf9\x40\x8c\xd6\x52\xb1\x24\x4d\xa0\x50\xdc\xb6\xd3\x2d\xec\xc2\x78\xe3\xb2\xdc\x88\x50\xb5\x99\xa4\xed\xba\x94\xd4\xae\x98\x5c\xd8\xd2\xb5\xd3\xea\x50\x49\x83\xb1\xd8\x6a\x96\x22\xd8\x62\x64\xc6\xf2\xa0\x5e\xef\x8e\x98\x63\x23\x54\x91\xb5\x16\x18\x02\x3f\x2b\xbf\xe2\x53\x40\x35\xf9\x71\xec\x69\xf7\x09\x9d\x68\x36\xb9\x81\xac\xb2\xa5\xc8\x1c\x1a\xda\x46\xc8\x3e\x44\xdc\x83\xdb\x66\xf0\xa1\x87\x38\xf8\xcd\x98\xcb\xad\xf0\xe4\xdb\xad\x07\x50\xa9\x2b\x39\x0b\x32\x44\x32\xb0\x74\x7e\x94\x41\xd6\x84\xdb\xd6\xaa\xad\xa2\xd9\xc6\xb0\x92\x22\x78\x04\x0d\xcd\x1b\x97\xec\x0a\x51\xee\x80\xa6\x6b\xdb\x77\xd0\xad\x6a\x8b\xae\x07\x74\x3d\x54\x5e\xca\x60\x29\x99\xd8\x14\xc0\x79\x46\x7b\xe4\x7c\x08\x2c\xe4\x09\xc1\x15\x34\x95\x1d\x8e\xd0\x3e\x4c\x5a\x64\x50\x64\xe4\xb6\x6d\x0a\x08\x0c\x72\x5d\xbb\x39\x17\xcc\x6d\xc1\xc6\xe4\x60\x4e\xae\xd6\x94\x98\xbf\x22\x29\x92\x2b\xd4\x2a\x44\x16\xc6\x94\x5c\x81\x7c\x71\xc9\x8e\xb6\xf8\x6e\xea\x52\xdb\x3e\xf5\xa2\xd7\x2e\xa0\xa0\x47\x70\x66\x77\x30\xb6\x4b\x72\x9d\x53\x68\xa2\xe2\xa3\x1d\x4b\x49\x5b\xf3\x1e\x6e\x9a\xb0\x73\x50\x20\x9b\x56\x04\xc5\x2c\xb8\xc6\x8c\x99\xcd\x43\xc9\xad\x25\xea\x92\x5c\xc2\xb9\x2d\x7c\x1b\xf4\x84\x6a\xd3\xd4\xc4\x7a\xe6\xb5\xf2\xa6\x57\x46\x8e\x6d\xdf\xb6\xd6\xcf\xd3\x89\xb4\x4e\xb6\x94\xa3\xce\xce\x93\xb8\xe0\xc0\x8b\x3b\xbb\xae\x87\xd7\xad\x31\xbb\xc2\x8c\x0e\x75\xea\xa4\x90\x97\x0c\x0f\x7a\x10\x17\xa3\x58\x98\x77\xd2\x37\x9a\xa1\xdc\x9a\xa8\xf9\x8a\xeb\x51\xb5\x2b\xbc\x77\x8b\x6d\xc7\xa3\xc7\xb4\x01\x1e\x43\x89\x1c\xa1\x19\x4c\x44\x9c\xf0\xd6\x27\xe6\x6e\x2f\x9b\x01\x7e\x34\xb8\x84\xed\xa6\xe6\x72\x2b\x06\xea\x36\x4f\x2e\xbb\x27\xc1\x86\xdd\x92\xd1\xb2\x1d\xa1\x89\x32\xb2\x06\xa7\xcf\x30\x86\x32\x83\x5a\x96\x44\x07\x58\x33\xce\x22\x0e\x54\xca\xc8\x57\xc0\x87\xeb\x92\x70\x3b\x19\xb3\x74\x8f\xcd\x61\x35\x81\x38\x96\x4e\x66\x2d\x14\x29\xc4\x21\x20\x7a\x0d\x73\x16\x07\x97\x44\x8e\xd9\xc9\x15\x37\x18\x1c\x83\x9a\x55\x8a\xb4\x6c\xe7\xee\x96\x3d\x52\x53\x70\x77\xf5\x0c\x8c\x5b\xaf\x04\x3b\x54\x34\x3d\xee\x7a\x85\xe7\x06\x67\xdd\xf3\x25\x19\x43\xa7\x3e\xe5\xb9\x90\xb5\xac\xe7\xa0\x07\x1c\xc9\x18\x76\xba\xa5\x73\x29\x10\x22\xeb\x3e\x0f\x86\xf4\xd2\x80\x04\x8d\xd0\x7d\x84\xc1\xaf\xf0\x9a\x4a\x73\x5b\x07\x0b\xfb\x28\x85\x85\x3e\x0d\x1c\x65\x9f\xce\x9d\x0a\x62\x54\x31\x32\xae\xe5\x52\x43\x24\xa0\xc3\xb6\x10\xe7\x83\x3f\xaf\xb8\xcd\x59\xfc\x84\x30\x2e\x7c\xd7\x0e\x9d\x22\xc0\x48\xd0\x76\x9c\xc0\xf1\x92\xa8\x62\x31\xcd\x70\x40\xec\x2a\x4c\xdc\x47\x02\x9a\xcc\x57\xd0\x0d\xe7\xde\x32\x21\x76\x46\x8e\x21\x5d\x4b\x9e\x9e\xb4\xdd\x26\xb5\x4a\x3d\x9a\x28\x99\xab\x48\x0d\xc5\x29\xb5\x61\x39\xab\xc3\x5c\x91\x15\xc3\x00\x52\x05\x6c\x0a\x71\x6b\x7a\x11\x2a\x2d\x63\xdb\x30\x26\x96\xe9\x72\xc8\x44\x9d\x9b\xf8\x34\xe7\xce\x0b\x3f\x33\xc3\xb4\x9f\xee\x66\xdb\xb4\x5b\x71\xd6\xb7\xdb\x4d\x5a\x9d\x1a\xf5\x25\xc1\x61\xd3\xa9\xf7\x06\x1a\x12\xab\x91\x8e\xb1\x9a\xfc\x79\xae\xd8\x1c\x96\xd6\x9c\x8a\xc3\xfb\x79\x22\xcb\xae\xb0\x17\x65\xd0\xb7\x4e\x51\x2a\x4b\x99\xfb\xb9\x94\x06\xe1\xd1\x60\xd7\xa2\x0c\xb8\xd9\x93\xaf\x0b\x37\xa1\xfa\xbd\x72\x95\x06\x28\xeb\x34\xe7\x15\x1a\xc2\x6e\xe7\xb9\x37\xd6\x7b\x77\x48\x26\x10\x60\x0e\x1a\xaf\x40\x0c\x7c\xac\x28\x50\x4a\x78\xe8\x3b\x23\xca\x14\x0f\xf2\xae\x8b\x2f\x57\xb4\x38\xba\x3a\x58\x9d\xa7\x21\x3b\xe4\xaa\x52\x5b\x3d\x3b\x1d\x0e\xa9\x4d\x95\x29\x5c\x8e\x5c\x90\x73\x15\x4b\x3b\x4a\xda\x90\x00\x10\x5c\xf0\x87\xe2\xfe\x58\xc1\x4a\x5b\x6d\x7c\x21\x62\x8a\xca\x46\x66\x34\x9b\x49\x98\x1c\x2a\x2f\x1b\x9f\x04\x66\x93\x57\xe0\x5b\xde\x6d\xc4\x1c\x5e\xf1\x87\xda\x34\x8d\x7b\x60\xc9\x6f\xc9\xa6\x6c\xf6\x92\x2c\x72\xb5\xaf\xd9\x08\xba\xe8\xae\x27\x0c\xa4\x8a\x9c\x9b\xd2\x19\x72\x84\xd8\x25\xd9\xe7\xa2\x91\x94\x20\x1e\x24\x6e\x53\x6f\x6c\xb0\xa3\x1f\x6a\x57\x2a\x9d\x54\x48\xc9\xd9\x2e\x83\x19\x13\xf1\xb3\x52\x6b\xb9\x01\xee\x8a\x38\x07\xde\x54\xa4\xf2\xa4\x33\x4b\x24\x0c\x47\xd5\x8d\xd6\xcd\x89\x84\xa5\x6e\x6e\x68\xcb\x3c\xa6\x92\xda\x9c\x9a\x2e\xc0\x9f\x04\x8c\xa6\x6e\x12\x1b\x7d\xd4\x6f\x7c\xd1\xdd\xd4\xf7\x7f\xca\x3b\x3f\xe1\xad\xff\xde\x3d\xe0\xcf\x5e\xf9\xf6\x3f\x32\xf7\xf8\x00\xf3\xb0\x7b\x3f\xec\x6b\xd3\x8f\xfd\x97\x9f\x7b\xef\x77\xdd\xf3\xaf\x88\x8d\x1e\xf3\x90\x7b\xdc\xe5\x4d\x1f\xf2\x31\xbf\xf8\xc5\x6f\x7f\xb5\xf9\x91\x6f\xf9\xbb\x0f\xff\xb4\x1f\xfb\xc2\x67\x7f\x8f\x19\x9f\xff\x5b\x5f\xf9\x9e\xaf\xf8\xb9\xbb\xbc\xe1\x91\x37\x94\xfe\xb7\x17\x3c\xef\x29\x5f\xfa\x8a\xcf\xfc\x6b\x9f\xff\x47\xff\xf1\xbb\xdf\xfc\x07\x7f\xf0\x21\x8f\xfb\xbe\x07\x7e\xd7\xfd\x9f\xd7\xff\xee\x9f\xde\xed\xf3\xfe\xf8\xf8\xec\x37\xfe\xe2\x0d\xa5\x9f\xfc\x2b\x5f\xf5\xc6\xbb\x7f\xd8\x27\x7f\xee\x97\x8e\x9f\xfa\xb1\x5f\xfd\x26\xfa\x7f\x7d\xd1\x1f\x7c\xc0\x4b\x3e\xfe\xc3\x3e\xf6\xb9\x1f\xfc\xcd\x4f\xf8\x99\x5f\x7b\xca\x67\x7f\xe9\x0d\xa5\xe9\xd9\xaf\xa1\x8f\xfd\xa6\xf7\xbc\xf8\xfe\x7f\x7e\xf7\xff\xf4\xac\xef\x7b\xc1\x2b\xff\xf5\xf2\x3b\x1f\xf5\xf4\x74\x37\xf1\x9e\x6f\x78\xc6\xc3\x1f\xf4\xa6\x47\xfd\xab\x1b\x3f\xc0\x4f\xdc\xe5\xc3\x7f\xe2\x1d\xf7\x8c\x2f\xfd\xfe\xff\xe7\x3b\xdf\xf9\xf3\x6f\x7a\xde\xfa\xa4\x17\x88\xdf\x7c\xf1\xff\xfe\xd0\xff\x7a\xc7\xab\x5e\x4a\xee\xfe\x85\x2f\xbc\xa1\xf4\xa5\xbf\x3e\xbe\xed\x3d\x2f\xfd\xd0\x67\x7c\xfe\xb7\xbc\xea\xab\xff\xf3\xf7\xf4\x0f\xfc\xf1\x5f\xf8\x87\xfc\x73\x7f\x67\xfd\x27\xdf\xff\x84\xc7\x7d\xd3\x13\x7e\xe8\xbd\xbf\x7a\x43\xe9\xf7\x7c\xf3\x17\xfd\xd2\xc7\xfe\x83\x6f\xbd\xcf\x83\xfe\xf0\x3b\xbe\x43\xdd\xd7\x3c\xfc\x6f\x3c\xd6\xfe\xa3\x27\xdf\xe3\x1f\xbf\xe2\xdb\x9f\xfc\x83\x3f\xf4\xf3\x4f\x7d\xc4\x8d\x2e\x4c\xef\x79\xd8\xbf\x5a\xde\xf1\x41\x77\x9c\xbf\xf0\xa2\x87\x7d\xef\x5b\x7e\x25\xbc\xe5\x9f\x3f\xf1\x07\x7e\xeb\xb9\xf8\x1f\xff\xc8\x4f\x3e\xe9\xde\x3f\xf6\xbd\x1f\xfa\xaf\x5e\xf0\x97\x62\xa3\x5b\x3d\xd5\xdb\x4d\xd9\x65\x26\xb6\x8e\x60\x5b\xed\x1a\x4c\x58\x7a\x5f\x11\x81\x83\x6b\x19\x31\x17\x1e\xa0\xc3\x0c\xcd\x4c\xd3\x1c\x57\x1b\x9c\x5c\x5d\xbf\xe2\x48\xb2\xa8\xb1\x6e\x62\xf8\x35\x00\x7f\x44\xa7\xc2\xb2\xec\x70\x2a\x61\x4f\x78\xe7\x9f\x0a\x72\xb0\xb7\xbd\x2f\x28\x19\xb9\xf2\x03\xa4\x7a\x85\xa7\x90\xec\x96\xf2\x95\xc4\x6c\xa9\x1e\xc9\x4f\x64\x89\xe7\x86\xaa\x2a\x57\x1a\xb1\xe2\x50\x57\x55\xfa\xc0\x95\x32\xb0\x84\x4d\x4c\x78\x05\xc0\x71\x86\xbd\x60\x06\xed\xa2\x99\x50\x9e\x45\x8c\x49\x35\x9c\x26\x3a\x02\xc3\xfa\xa8\xbe\xc2\x8a\x28\x97\x1e\xce\x11\x30\x66\xe2\x92\x8b\x43\x8a\x2d\x27\x01\x4d\x34\x12\x48\x10\x4f\x1d\xa5\x1d\x03\x74\x42\x76\x2d\x8e\x03\x87\x56\x76\x01\x91\x95\x45\x1f\x3a\x33\xc0\xae\x38\xc7\x61\x19\xae\x60\x39\xce\xc3\xfa\xb0\xfa\x05\xa2\xb0\x9d\x45\x29\x41\x02\x6b\x9b\x91\xa7\x5c\xf5\x44\x4b\xc6\x60\x1d\x30\xe3\xd2\x03\x6a\x57\x20\x27\x89\x12\x45\xb6\xa0\x66\x98\xb1\x69\x4b\x4f\x61\x68\xc8\x7b\x25\x3a\x79\xb9\xe0\x4d\x9e\xca\xf9\x79\x0e\x64\xb9\x88\xb4\x54\x7a\xc9\x6e\x3a\xc9\xb4\xbc\x1f\xc8\xe1\x1e\x11\x40\xf1\xdc\xc5\xd4\xc8\x05\x8f\x49\x9e\x63\xdd\x5b\xf6\xc1\xa4\x63\xef\x61\x1f\x4b\xd2\xf2\xe0\x37\x1b\x63\xde\xaa\x0f\xdf\xee\x13\x5e\xc2\x34\x59\xad\xc8\xce\x6f\xb4\xa9\x34\xac\x87\xdc\xc9\x5e\x8c\x00\x66\xc1\x71\xdb\x61\xdc\x10\x66\x6b\x0a\x2b\xdb\x17\x67\xfd\x15\x0f\xae\xcf\x72\x74\x55\xb6\x51\xf8\x8e\x4b\x80\xac\x51\xb4\x39\x1e\x0e\x92\x44\x87\x82\x26\x30\xf8\x9c\x06\x78\x11\xac\xd7\xab\x60\xe0\x0a\x5f\x53\x1c\x77\x33\x37\x2f\xe2\xae\x60\x10\x71\xd8\xa4\x71\xb0\x31\x65\xe0\x6d\xc1\x12\x9f\x74\x9d\xb1\x2d\x13\x61\xe5\xb6\x03\xa3\xc9\xae\x88\xcb\x22\x5e\xec\x33\x38\xd1\x0e\xe3\x96\x22\xab\xe7\x44\x59\xbc\x84\xcc\xb7\x54\xd9\xc6\x4d\x24\x2c\x9b\x54\x1a\x99\x89\x01\x9a\x54\xbb\xe0\x90\x98\x9f\x2e\x98\xb5\x96\xec\xdb\x06\x09\x94\x6c\x83\x6b\x5c\x9b\x2c\xab\x1d\x85\xeb\x28\xea\x24\x68\x2e\xb1\x45\xa0\xe4\xb4\xc2\xaf\xe7\x15\xf6\xe6\xd0\x6c\x8a\xb6\xa9\xea\x62\x24\x2d\x79\x51\x1a\xac\x36\xd6\xb9\xf9\xa2\x36\x95\xc5\xca\xbd\xae\x2e\xae\x84\x50\x97\x2b\x1f\x91\x5f\x81\x9c\x78\x09\x39\xc7\xda\x47\x7b\x9c\xf5\x44\x61\x8b\x73\x34\xb7\xad\x83\x03\x11\x56\x81\x3d\x92\xd4\xa2\x4d\x91\xcd\x37\xb0\xaf\x64\xbf\x42\x0f\xc0\xf5\x9d\x8d\x1d\xc3\x75\x15\x12\x97\xa0\xa9\xb1\x49\x2d\xc6\x88\x96\x51\xc5\x31\x49\x57\x9d\x5c\xe1\x8e\x68\x98\x1a\x6c\x74\x3d\x6f\xd0\x1c\xbf\xbf\xb9\xdc\x6a\x72\xbb\xcd\xbb\x69\xf7\x2d\x87\x5e\x29\xc2\x43\xac\x63\xec\x42\xed\x40\x51\x62\x06\xdb\x26\x72\x67\x30\x3c\xe4\xee\x4c\x80\xa2\xd9\x6c\x0f\x8d\xfc\x15\x19\x43\xee\x0c\x90\x09\x46\x7d\x6e\x42\x21\x6b\xeb\x46\xf1\x54\x2c\x3a\x6d\x16\xee\x0b\xc8\xac\xec\x29\xef\x01\x4c\xe2\x01\x10\x65\xe5\x17\x18\x48\x73\x2a\xbd\xd2\xd2\x75\xa4\xd1\x48\xc6\xd7\x54\xed\xb1\x48\x7b\x08\x38\xcb\x4c\x4b\x1f\x9e\xc1\xd3\x61\xd5\xab\x5d\x61\xe4\x14\x5d\x11\xe5\xcc\xba\x28\x6b\x45\xbd\xe0\xac\x81\x4b\x16\x36\xdf\x31\xe9\x7c\x86\x0c\x37\x18\xc6\x99\xf8\xa1\xa2\xa9\x5c\x66\xbb\x78\x2b\x86\xf3\x57\x9c\x5d\xf0\x10\x3b\x15\x16\xd4\xb5\xab\x6c\x27\x11\xa8\x34\x13\x58\xeb\xab\xcd\xad\xab\xb9\x4e\x09\x6b\xd8\xe5\x16\x75\x06\x48\x14\x51\x2f\xb9\x6f\xf3\xb1\x98\xb8\xe7\xba\x2d\x00\x73\x18\x99\xe1\x8e\xea\x8e\x57\x45\x1a\x51\x73\x29\xd9\x0b\x7d\x26\x50\x83\x28\xc1\x0e\x4c\xcb\x25\x21\x35\x32\xd6\x22\x56\x7f\x64\xcb\x74\x0f\xb5\x92\x0d\x09\xc1\xf9\x26\x54\x35\x32\x56\x37\x07\xa0\x9b\x6b\x76\x1b\x33\x4f\x0f\x4f\x7b\x05\xfc\xb6\x21\xd2\x1a\x30\xcb\xa4\xfd\xe8\x99\x3b\x81\xf7\x11\x21\x8c\xca\x1e\x95\x7b\x28\x54\x5b\x07\x36\xad\x42\x94\xbb\xb4\xfb\x6a\xc4\xcd\x7a\x80\x5b\xed\x7a\xb7\x1b\xf8\xda\x41\x4f\x41\x90\x8d\x75\x76\x10\x0a\x0d\x08\x0c\x4c\xe4\xc9\xea\xfd\x34\x8d\xc0\xce\x14\x5d\x56\x83\xaa\x6d\xd8\x23\xc6\xf8\x15\x9e\x42\x4e\x74\xba\x90\xa3\xad\x87\x2f\x41\xf2\x01\x38\xdd\x07\x11\x28\xe0\x9d\x35\x1e\x24\xde\x81\x26\xf6\xec\x75\x17\x86\x05\x1c\x29\xb8\xa0\xc5\xb1\xba\x40\x2c\x39\x07\xa9\x92\xa1\x63\xe1\x4a\x68\xb2\xf8\x73\x04\x0d\xe7\x09\x0b\x2f\x30\xa5\xb4\x16\xdb\x53\x3c\xef\x9c\xc3\x8f\x2b\xf2\x02\x78\x00\xdd\x8a\x70\x88\xde\xf4\x8e\x3b\x77\xd0\x86\x4d\x62\x79\x48\xa0\xf7\x36\x37\x35\x4e\x3e\x8e\xb4\x24\x8b\x8f\x61\xbd\xda\xcc\x15\x3c\x07\x6f\x20\x15\xde\x5d\x88\x22\x6a\xd8\x30\xd6\x93\x9c\x44\x57\x98\xc2\x40\x00\x25\x30\xe4\xb0\xf6\xc8\x2d\x11\x46\x25\xd8\x09\x6e\x57\x28\x19\x23\xa6\xd9\x53\xb1\xf0\x60\x7c\x29\x13\x39\x38\x6a\x6e\x7b\xcd\x30\x9d\x59\xa2\x92\x52\x38\xda\xba\x4c\x47\x84\x5d\x50\x8f\xe6\x92\x04\xd1\xb9\x68\x4f\x20\xcd\x9d\x34\x9c\x77\x0b\xb0\xdd\x2a\x6e\x8b\x52\x73\x4f\x8c\x6f\x78\x11\x84\xd9\x3a\x54\x24\xc7\xc1\xa6\x1b\xf9\x12\x12\xb5\x09\xef\x85\x4c\x2a\x2f\x50\xc1\xd6\x2d\x9a\xc8\x11\x0f\x64\x5d\xb4\xc8\xec\xf4\x1d\x6a\x79\x06\x04\x90\xc3\x70\x35\x32\x0a\x79\x33\xaa\x7e\x2b\x74\xe8\x36\xaf\x45\xd8\xd6\xca\xab\x44\x42\x01\x1c\xf4\x69\x86\x6c\x3b\x61\x09\xa1\x9d\xad\x04\xcd\xb5\x0c\x83\x3d\x32\x94\x15\x56\xdc\xea\x90\xbf\x42\xa5\xc5\xad\x52\xd3\x8e\xca\xbb\x0f\x08\x8c\x99\x54\x54\x6c\x52\x74\x67\xaf\x11\x30\x49\xad\xf6\x6a\xed\xba\x55\x00\x6d\x96\xad\x15\x22\xae\xf8\x14\x0b\x5b\x56\x06\x97\xe8\x2d\xaa\xd2\x0c\xa5\x76\x8a\x83\xf7\xcc\x06\x4b\xe8\xea\x2b\x92\x41\x1c\x65\xa9\x41\x95\xc8\x5c\x5b\x4f\x7e\x85\x40\x79\xb6\x82\xdc\xba\x9d\x33\x95\x8e\x16\x1b\x8e\x78\xf0\xfd\xec\x12\x67\x96\x43\xd6\x62\x05\xc5\x73\x54\x05\xc1\x61\x92\xdc\x8b\xbd\x44\xd5\x39\xe2\xde\xda\x21\x0c\xf4\x90\x58\xc1\xf8\x99\x9c\x86\x46\x84\x53\xe5\x4e\x99\x3e\x1d\x3b\xa5\x6d\xc8\x15\x5c\x0e\x57\x42\x60\xe0\x8a\x30\x12\xe2\xb6\x13\x08\x4b\xba\x9e\xa0\x0e\x10\xed\x7a\xb4\x36\x88\x46\x09\xc4\x45\xa1\xb6\x4e\x97\xc0\x3a\x68\x93\x31\x6d\x58\xee\xfc\x8a\xdb\x1c\xd6\x68\x5b\xf4\x2a\x4f\x61\xf3\x3a\x72\xa8\xac\x1f\x42\xec\xc5\x80\x9a\x35\xdb\x3a\x5c\x7d\xb4\x6c\x37\xf0\xf0\xd3\xd6\xc2\x87\xac\x57\xf0\x1c\xb1\x16\x52\x9d\xf6\x08\xc6\x33\x09\x36\x80\xf6\xcb\x6e\x08\x28\x3c\x98\xea\x1a\x5f\xa3\x63\x43\x04\x99\xbc\x81\x2b\x08\xeb\xac\xcb\x4d\xcd\xe5\x56\x78\xf2\x6d\x6e\x2e\x6b\x54\x48\x97\x16\x37\xad\xe4\xe6\x39\x07\x7b\x4f\xa0\x63\x50\xe7\xca\x53\x3b\x91\x89\x72\x32\x43\xc0\x69\xcc\x2e\x65\xb0\xa7\xbf\x82\x2c\x2b\xe5\x14\x50\x21\x85\x38\x86\x86\x2e\xbd\x6c\x47\xac\x1d\x60\xc6\x9c\x4b\xc2\xb0\x7d\xdf\x7c\x96\x25\xcb\xd1\xd5\x72\xe8\x68\x8e\x0b\xe4\xb0\x3c\x93\x2d\x6a\xd5\x7a\x47\xb5\x75\x4c\x0f\xe6\x45\x29\xb3\xcd\x35\x65\x7f\xe7\x7b\xdb\xb8\xd9\xa1\x71\x00\x76\xa8\x6c\x81\x24\x5c\xe1\x4f\xc9\x9d\x4c\xac\x9d\xc0\x37\x64\x04\xb1\x79\xf4\x35\x88\xb9\x9e\x2b\x64\xcc\xeb\x8e\xcf\xcc\x89\xdd\xd9\x29\x30\xeb\x5b\xf3\x50\x1e\xf9\x8a\xbf\xf5\xe4\x56\xe5\xe2\xd9\x98\x67\x92\x29\x18\x15\x73\x95\x4b\x5b\xed\x21\x85\x6f\xdc\x79\xb4\x6c\xb6\xf1\x30\x20\x38\x11\x52\x78\x3d\xaf\x58\x05\xd6\x09\x25\x29\x46\xa8\x9a\x29\xc0\xd5\x51\x41\x2c\xb6\x6e\xc1\x4b\x35\xba\x6b\xd2\xbd\xdc\x1d\x31\x72\xa0\x52\xb6\x21\x16\x9c\xaf\x40\x7e\xda\x41\x19\x24\x7a\x77\x54\x82\xb3\x27\x5c\xab\xb6\xc2\xe3\xc5\x13\x97\x55\x98\x67\x29\x40\x38\xd6\x09\xa5\xbd\x9e\x45\x1d\x23\x5f\xf1\x1f\x09\x1a\x7b\xd0\xd7\x15\xb2\x01\xc0\xbe\xfb\x45\x8f\x1a\xfa\xb2\x32\xc4\x87\xf4\x27\x14\xbc\xa2\x38\x83\x9b\x0b\x1e\x7c\x86\x48\x6e\x90\xc2\xbd\xbf\xb9\xdc\x8a\x81\xba\xcd\x6b\x11\xb0\x23\xc4\x76\x96\x82\xd9\xee\x91\xde\xa5\xeb\x18\x1b\xe2\x5b\xdc\x7b\xd0\x6e\x1a\x7f\xac\x1d\x4c\x3d\xc0\xc0\x5c\x97\xb5\xb0\x2b\xb8\x09\xcd\xe7\xea\x0c\xc2\x74\x97\x2b\x3a\xb7\xe4\x7d\x1d\x9d\x5a\xe5\x17\xda\x02\x9f\x18\x0b\x22\x3b\x5a\xe8\x98\xa4\x7a\xb6\x9f\xa8\x5e\x01\x99\x59\xc2\xbc\x97\xf8\x74\xdb\xba\x52\x16\x4e\x4e\x8f\xcc\x7c\x14\x2a\x9a\x34\x3a\x14\x73\xcd\xd4\xd9\x6d\x3d\xbd\x76\xa9\x86\x0a\x2f\xb1\xed\xb7\x64\xd4\x43\xe0\x13\xac\x69\x3f\xd1\x86\xc3\x2e\x93\x21\x16\xc3\x03\x39\xe6\x9d\xdd\x6b\x02\x8b\x92\xeb\x81\xe7\xa2\xcc\x11\x34\xbb\x02\x67\x80\x91\xd1\x7d\x6c\x9d\x48\xab\xa2\xb4\x46\x63\xb2\x25\xa1\x0d\x37\x02\xc4\x3d\xd1\xb2\xeb\x2a\xc9\x3a\x19\x71\x65\xee\x9e\xa4\x4b\xa4\xc1\x1b\x9c\x9b\xa3\xdd\x82\xb8\x35\x44\xfb\xb1\x8c\x15\x1b\x7f\x38\xb7\xc1\xc9\x4f\x49\xe1\xec\x29\x66\x67\x18\x9d\xcc\xa1\x98\xe9\x79\x85\x64\x3c\x2f\xea\x5c\xf7\x51\x79\x02\xab\x10\x8b\x59\xce\x9d\xda\x0d\x30\x8e\x85\x6c\x44\xb2\xb2\xd4\x19\x2b\x0d\x65\xad\x95\x26\xd7\xcb\x15\x59\x31\x5c\xe1\x38\x2c\x66\x7a\x2e\x99\xb9\x05\x9a\xcc\x74\x8e\xed\xce\xfd\xdd\xc7\x60\xb1\xa2\x1b\x53\xcb\xe1\x70\x1c\xa5\x29\x16\x7b\x3b\xca\x4d\xcd\xe5\x56\x9c\xf5\x6d\x9e\x5c\xb6\x13\x3b\xd5\xf6\xb5\x5b\x1b\x82\x3e\x79\xf1\x33\xc9\xc6\x28\x1a\x9d\x3b\xc4\x7a\x0d\x51\x8b\xb4\xec\x28\x28\x10\xb3\xb1\x84\x5f\x01\xe8\x5a\x0b\xd4\x76\x6e\x2e\xac\x5c\x15\x06\x56\x6e\xf8\xb1\x42\xbf\x64\x87\xd1\x30\x3e\xc1\x82\x41\x5c\x02\xcc\xbd\xac\x18\xc4\x36\x8e\x4b\x14\x6b\x26\x18\x38\x12\x4d\xfe\xf0\xc7\xd4\xfb\x3e\x44\x46\x33\xee\x03\x90\x42\xb6\xa8\x66\x33\x26\x8a\x6d\x4c\x74\x9c\x89\x71\x8e\xe0\x15\xd1\xab\x58\x31\xb1\xcd\x23\x94\x83\x6d\x2d\x68\xdc\x77\x43\xca\xe1\x52\x5a\xb0\x5a\x15\xae\xa9\xaa\xb1\xd7\x55\x33\x6d\x03\xe8\xa1\xf0\x2b\xdc\x37\x18\x6a\x15\x99\x05\x69\x59\xf6\x98\x9c\x45\x6d\x73\x7d\xf5\x7c\x8d\x05\x7b\xed\xa8\x80\x92\x6e\x1d\x1c\xce\x9a\xad\x35\x6b\x5d\x3f\xae\xc0\x5c\xf8\xe1\xf6\x75\xaf\xa9\xeb\xc1\x87\xad\x91\xe1\xdd\x54\x1d\xb1\xbd\x73\x0b\x18\x3d\x29\xd7\x38\x95\xd2\x25\x9d\xed\x32\x31\xf3\x97\xe4\xa3\xd4\x03\xa2\x44\x85\xc2\xbd\x4b\xbc\x43\xec\x02\xaf\x8c\x1e\xa5\xbf\x6f\x98\x08\x79\x13\x9e\x1c\x5b\xae\xc8\x63\xad\xd7\x63\x3d\xc4\x15\xf3\x53\xe4\x9e\x49\xa0\xce\x15\x53\x7f\x7a\xe6\x89\x5a\xf4\x20\x9c\x25\x66\x8f\x6c\x03\x54\x2e\xa4\x11\xe7\x82\x96\x3c\x49\x3f\xb4\x63\xee\x26\xb1\xd1\x33\x3f\x9f\xfc\xc9\xab\xdf\xf0\xd7\x1f\xf9\xae\x27\x7e\xcc\x77\x7d\xc2\xf7\xfd\xd4\x27\xbe\xee\xd5\x2f\xfe\xce\xbf\x5f\x1e\xfb\x89\xcf\x7e\xf3\x93\xef\xfd\x6d\x0f\x7f\xcc\x37\xfe\x15\xb1\xd1\x1d\xaf\xfc\xc2\x57\xbc\xe0\xd5\x7f\xf1\xac\x6f\xfe\x3f\xfe\x07\xde\xf5\xd1\x9f\xf9\x82\x27\xbc\xfb\x43\x5f\xf1\x39\xfd\xe5\xff\xeb\xf7\x7e\xeb\x77\xbf\xfc\x97\x9f\x08\xfe\xe2\x86\xd2\xaf\xf9\x93\x0f\xff\x84\xef\x78\xfe\x07\xfc\xea\x1f\xfd\xe4\x4b\x1e\xf1\xad\x1f\xf2\xf8\x87\x7f\xdc\xff\xfb\xe0\x3f\x7e\xe2\x8b\xbf\xfc\xa3\x3f\xf5\x7f\x7c\xf2\x6f\xbc\xfb\x07\xe4\x4f\xdc\x50\xfa\xf4\xef\x79\xda\xfd\x9e\x6e\x9f\x79\x7c\xcf\xdd\xee\xf8\xe2\x57\xbf\xee\xc7\x1f\xd9\xee\x76\xaf\x97\x80\xf2\x01\x4f\xba\xef\x5d\xdf\xfd\x94\xb7\xdc\xf1\xdb\xf3\x46\x67\xa3\x47\xbd\xfe\x81\xcf\x61\xff\xe2\x67\x5e\xf6\xf0\xff\xf0\x8a\x7b\xfc\xef\x77\x7f\x20\x78\xca\x73\x8e\xc7\x7d\xe7\xbd\x5f\xf6\x84\x5f\xfa\xa1\x17\x3c\xf5\x19\xf3\xb3\x6e\x28\xbd\xcf\x5d\x7e\xe6\x37\xee\xf7\x0b\x9f\xf3\xee\x67\xdf\xeb\x23\x1f\xfd\x3b\xe2\x29\xcb\x07\xfe\xe1\xc3\x9f\xfd\xec\x7b\x80\xc7\xfd\xec\xdb\xdf\xfc\x53\x6f\x1a\xf6\x9f\xdc\x50\xfa\x0b\xfd\xad\x2b\x7b\xc2\xdb\x3f\xf9\x19\xcf\xbc\xdf\x77\xff\xfa\xc7\x7c\xcb\xab\x3e\xfd\xd7\xec\xbb\xbe\xfa\xe3\xee\xf6\x67\x8f\x7b\xb7\xff\xb8\xd7\xbd\x9e\xfd\xec\x0d\xa5\x2f\xfe\xf5\x6f\x7f\xd1\x0f\x7f\x76\xff\xc8\x6f\x7b\x46\xfc\xed\x7f\xfa\x3f\xd9\xdd\x7f\xf8\x85\x0f\xbb\x4b\xf9\x9b\x77\x7c\xc9\x53\xf1\x37\x3c\xfe\xf7\xff\xfa\x37\xe5\x1b\x23\xdf\x3e\xf1\x33\x1e\xf3\x9d\xdf\xf6\xeb\xbf\xf0\x19\x5f\xf5\xa0\xfe\xe2\x77\x7e\xeb\x87\x7e\xe1\xef\x3e\xe4\x81\x9f\x7b\xbf\xd7\xfc\x9f\xbf\xff\xf4\x9f\x7b\xce\xfd\x9f\xf7\x34\xfd\xa4\xf7\x7f\x09\xb7\x7a\xaa\x7f\xe5\x4b\x88\xe8\xd3\x9e\xa3\x7e\xf0\x07\x1f\xf1\x79\xbf\xf4\xdd\x5f\x7c\x8f\xd7\xff\xe7\x17\x7d\xfc\xfd\x5f\xf6\x24\xf9\x7b\xcf\xf8\x67\x3f\xf7\x79\xf7\xfe\xf3\x07\xbe\xe0\xee\xbf\x73\x43\xe9\x07\x3d\xf6\x29\x8f\x79\xcf\xf3\x3f\xeb\xbe\x9f\xfd\x86\x3f\xf8\xcc\x7b\xfc\xe6\xcb\xee\xf8\xe3\xa7\xbd\xee\x81\xbf\xf9\x25\x8f\xfc\xa2\x5f\x79\xf2\xbd\xfe\xe2\x61\x0f\xfd\x98\x7f\x7a\x43\xe9\x8f\xbd\xea\xed\x5f\xfb\x17\x0f\x7f\xfb\xc7\xbc\xa8\x3d\xe7\x97\xbf\xf7\xb3\x7e\xef\xc3\xbf\xe1\x9d\xcf\x7b\xc0\xa3\x3f\xff\x79\x6f\x7c\xd9\xe7\x7c\xeb\x73\xbf\xf6\x2b\x3f\xed\xc6\x0f\xf0\xd6\xb7\x7d\xde\x9f\x7f\xd2\xbd\x3f\xe9\x17\x1e\x5c\x5f\xfe\x1f\x7e\xe4\xf1\x7f\x7e\xfc\xe8\x3f\xff\xf1\x3f\x6e\x7f\xef\x9f\xdd\x67\x7b\xcb\x5f\xfb\xc8\x52\x7e\xfa\xdb\x6f\x28\x7d\xe6\x3b\xee\xfa\xca\x2f\xfc\xf2\xaf\x58\x1e\xfa\xf5\xff\xe6\x87\x1e\xf0\x01\x1f\x7b\xdf\xf9\x75\x6f\xf0\xff\xf7\xe3\xbf\xec\x6b\x3e\xfd\x1f\x7f\xc9\xdb\x9e\xf9\x9d\x4f\x4f\x37\x94\x7e\xc3\x13\x7e\xee\xc3\x7f\xfa\xe1\xcf\x7f\xea\x83\xef\xf9\x8e\xf1\xc7\xff\x8d\xd4\xfb\xbc\xa8\xbc\xfc\x41\xff\xe3\xb7\x3f\xfa\x23\xff\xc7\xfd\x1f\xf3\xf4\xc7\xff\xea\x8b\x6f\x28\xfd\xd2\x7f\xf9\x89\x5f\xfd\x8a\xef\x7f\xea\xcf\x7e\xc1\x0b\x3f\xe5\xe5\xff\xe1\x59\xbf\xff\x0f\xbe\xec\xcb\xde\xf4\xcb\xe3\x4f\x7e\xfe\xcf\x3f\xde\xfc\xe2\x8f\x3e\xf3\x75\x3f\xfc\x15\x37\x94\xbe\xe6\x33\x1f\xf9\xca\xbb\xbe\xfd\xfe\x5f\x16\x9e\xae\xfa\x73\x9f\xf7\x61\xaf\x7d\xc3\xbd\xbe\xfd\xf1\x4f\x7c\xc4\xa3\xfe\xf4\xeb\xbe\xf1\x2e\xff\xfd\xbf\x8f\x9f\xfb\xd3\xbf\x54\x7c\xdd\xea\xa9\xde\xe6\xd7\xec\x09\xe3\x9e\x35\x18\xda\x9f\xcc\xfa\xbc\x58\x1f\x22\x82\x1c\xc1\x53\x10\xcc\xe4\x51\x87\xee\xbd\x28\x47\xbc\x1f\x51\x65\x9d\xae\xb8\x1d\xe6\x35\x1e\xdb\x49\xb6\x1e\x50\x20\xa0\x1c\xbe\xd9\xbc\x02\x58\x15\xed\x92\x8b\x79\x86\x3d\x74\x4d\x94\xdf\x89\xdb\xc4\x90\x95\x1b\x71\x01\x57\xc8\xc7\xdc\xf7\x1d\x0f\x9c\xf9\xc6\x54\xb2\x30\x47\xab\x1a\x66\x2c\x0d\xec\xd7\xb1\xe0\xfd\xac\xcb\xc0\xbb\x5d\xa5\x3a\x38\xb0\x64\xbb\x82\x2b\xe4\x3b\xdf\x4a\x22\x13\x56\x2e\x5c\x4d\x5e\x70\x3a\xcc\x41\xeb\x16\x9d\x39\xa5\xf7\xc1\xc7\x93\xac\xf3\xf0\x1d\x76\xce\x9b\x6c\xbc\x5e\x71\x30\x20\x6b\x52\x3b\xae\x51\x70\xbe\x9c\x67\xd0\xd5\x69\xd7\x96\xbe\x1f\x3e\xb8\x40\x48\x60\x2e\x8c\xac\x08\x2a\xe6\x34\x36\xed\x32\x5e\x31\x7e\xb1\xa0\x3d\x27\xdd\xa7\xe8\x32\x10\x5d\x81\xe4\xcf\x28\x65\xec\x0c\x2d\xbb\x04\x8e\x00\x31\xcf\xc3\x04\x1c\x0b\x80\xed\xe4\x0d\x89\x2b\xc6\xaf\xc5\x6b\x1c\x3b\x32\xeb\x48\x07\x02\x63\x2c\x64\x13\xf8\x98\xcb\xd9\xe6\x9d\xbf\xc4\xde\x7c\x60\xc4\xd5\xda\x22\x38\xba\x18\x36\x5d\x11\xe6\xc1\xcf\x6d\xc5\xc9\xa8\x6d\x11\xd4\x6b\x24\xc6\x11\x17\xb8\xb9\x1c\x41\xb7\xa3\x1c\xf8\x58\xf5\xe2\xb4\x4a\x5b\x58\xbd\x18\xd4\x37\xc7\x6f\x16\x65\xdc\xaa\x0f\xdf\x6e\x80\x80\x4e\x82\x86\xde\x80\xd0\x2a\x5a\x50\x77\x97\x6d\x58\x2a\x9b\xe7\x89\x36\x04\x32\x4f\xb2\xb2\xb4\x80\x03\x35\xdd\xab\xe2\x3b\xb8\x62\xf9\x59\x8b\x87\x04\x88\x0d\x10\xa7\xa6\xcc\x62\x05\xb4\x9d\x05\xd9\x85\x56\x2f\x04\x0a\x6d\x65\x08\xf8\xe0\x4a\x0a\x12\x54\x8b\x40\xbe\x22\x8b\x05\x31\x23\xbb\xc3\x90\xa3\x6d\xa3\x96\xca\xc5\x87\x70\x96\x7d\x22\x5d\xcf\x72\xd4\xca\xbb\xdf\x04\x39\xb6\x49\x52\x57\x16\xcf\xce\xae\x70\xfa\x70\xd4\xdb\x5c\x1c\x34\x05\x76\xea\x9a\x49\x47\x63\x08\xc8\xb4\xba\x95\x36\x11\x20\x15\x7e\x95\x9b\x1d\xb9\x85\x96\x1d\x97\xc0\x5d\xc1\xd2\x59\xa2\xb3\x2e\x1b\x32\x53\xcd\x95\xcf\x5a\x92\xdb\x6b\x20\x23\x6d\x4a\x9e\x1b\x00\xad\xd9\xae\x40\xe8\xdd\x54\xd9\x58\x52\xfe\x0a\x8f\x54\x16\x29\xa5\x49\xe2\x29\x15\xe8\x6d\xca\xc4\x0d\x95\x80\xd2\xde\x48\x1f\x20\xf5\xc6\x87\x72\x40\xaa\x02\x16\xee\x20\x5d\x57\xe1\xae\x10\xeb\x18\xc2\xc1\x48\x58\xcf\xbc\xfb\x40\xd9\xd4\x3a\x71\xbb\x09\x7b\x04\x4f\x6d\x56\xa7\xe3\x91\xe5\x80\xfb\x42\x9d\xd7\x9e\x28\x09\xae\xf8\x5d\x58\xda\x47\x1d\x61\xda\x21\xe8\x89\xab\x5f\x61\x4d\x4e\x9b\xa6\x8d\x02\x14\x36\x64\x17\xe7\x6b\x8f\x05\xc4\xf3\xe0\x7a\xa5\x9b\xf5\x37\x35\x97\x5b\x4d\x6e\xb7\x5d\xab\x1e\x6d\xb3\x26\xd9\x63\x16\xc6\x42\x38\x39\x6b\x76\x72\x66\x68\xa1\x7a\x21\x55\xd1\x64\x97\x23\x41\xb0\xf9\x05\x3b\xb3\xe4\x2b\x72\xd6\x99\xd6\x24\xaf\x76\x03\x8c\xd1\xbd\xb5\xed\xcc\x42\xf6\xe8\x79\x36\x4c\x81\xc5\x84\xad\xa9\xd0\x12\x3a\x12\x1e\xf0\x14\x47\xdf\x46\xbe\xe2\x26\x4a\x06\xe6\x97\x04\x96\x4d\x4d\x51\x22\x2c\x43\xd8\x6e\xc6\x4c\x74\x0b\x89\x35\x04\x96\xa5\x85\x11\xe0\x10\xe7\x46\x4a\xf0\x3b\xe5\x57\x2c\x82\xfa\x18\xe5\xe8\x1d\x41\x50\x99\x06\x49\x61\x18\xce\xd0\x96\xb2\xb6\x96\x93\xe4\xa5\xb6\x68\x04\xdf\x63\xdd\x33\xf3\x46\x2e\x47\xbb\x02\x0f\x0e\x29\x1e\x5b\xd7\x8c\xa2\xc0\xe7\x06\xd3\x11\xd3\xb6\x93\xb0\x86\x10\x97\x63\xf1\x2a\x32\xd4\xb9\x30\x91\xec\xbb\xdf\x44\x1f\x2a\x5c\x20\x33\xe6\x71\xc5\xeb\x6c\x4b\xe9\x6d\xdf\x9b\x5a\x51\xb6\xfd\x90\xb3\x01\x1e\x37\x19\xd6\x52\x42\xd6\x8e\x6a\x4f\xd2\x29\x17\x7d\x0e\x78\xe6\x2b\x82\x32\xcf\x19\x15\x9b\x63\xf4\x35\x21\x8f\xa2\x08\x91\x9c\x11\x1d\xc7\x34\xb5\x73\x32\xd4\x06\x16\xae\x16\x84\x19\x14\xab\x1a\x34\xed\x97\x50\x5e\x9c\x9f\x28\x0d\xe4\x28\x25\x30\x06\xa1\x67\xe5\x41\xd5\x23\xc2\x5e\x75\x75\xcc\xe6\x88\x18\x07\x30\xa4\x7d\xc1\x6c\x71\x21\xd8\x74\x53\x73\xb9\xd5\xae\x77\x9b\x27\x17\x3e\xf7\x79\x6c\x38\x0f\xd3\xe1\x09\x11\x14\x25\x08\x41\xfd\x3a\xac\x5f\x6b\x04\x72\x61\x05\xad\xdc\x1c\x47\xd4\x8c\xf6\x13\x6c\x97\x78\x94\xc1\xb3\x7a\x78\x2e\x78\xe2\x5a\xd9\xd0\x7c\x8e\x62\x3d\xc1\x52\x0a\x17\x49\xe5\x4b\x57\x2d\x0b\x77\x82\x68\x43\x8a\x52\x75\xcb\xae\x58\x05\xf6\xdd\x48\x2d\xcf\xbd\x0b\xcb\xd7\x33\xc3\x8d\x55\xc5\xf6\xe1\xd6\xbd\xd8\x9c\x02\x63\x78\xdd\x3d\xe5\x4a\x3b\x76\x1e\x49\xcd\xdd\x5d\xb1\x22\xee\x19\xd5\x2d\x03\xbf\x8f\x70\x20\xc3\xb7\x83\x19\xc6\x83\xc9\x0a\x0f\xa2\x68\xa7\xd2\xba\xc5\xea\x64\xb6\x39\xdc\xb9\xec\xf4\xc8\x57\x2c\x67\x66\x69\xef\x0b\x09\x35\x8b\xd5\x53\xd3\xbe\xce\xb2\x4f\x03\x16\x87\x41\x8a\xe8\xce\x57\x51\x57\x62\x76\xc7\x06\x9b\x3a\xd8\x25\xd4\x2b\x0c\x2b\x42\x05\xe8\x74\x63\x13\xec\x58\xb3\x32\x1b\x0e\xcc\xad\x5d\x60\x30\xcf\x22\x9b\x85\x18\x67\x1f\xa3\x57\x7c\xdd\x9d\x3b\x04\x3b\x2f\xf9\x75\x9e\xac\xe2\x94\x52\xe8\x1c\xe4\x9d\x88\x88\x62\xd9\xf6\x0c\x98\xa0\x7a\xaf\x4b\x64\x09\xf3\x43\x6c\x02\x9a\x9d\x06\x04\xbc\x34\xe0\x8a\xb3\x4f\x77\x6c\xbb\x3f\x44\x26\xca\xe5\x96\x62\x3d\x30\xa6\xa2\xf8\xd9\x15\x0e\x7c\x55\xd6\x73\xb5\xae\x68\xe9\xbb\x15\xf2\xa4\x02\x1e\xe5\xe6\xc9\xe5\x56\xe8\xd0\xed\x56\x7c\xd5\x89\x7b\xee\x84\x88\x05\x83\xbd\x32\x5d\xcc\x71\xb6\x25\x25\x77\xd2\xd2\x76\xc9\xca\x39\x3b\x04\xaa\x62\x65\xe7\x19\x96\xe3\x12\x1b\x21\xa2\x61\x4f\x3a\xa1\x16\xd8\x26\x06\xc9\xc5\x9d\x85\x0a\x7a\x1c\x07\x66\x5a\x0b\x9f\x30\x16\x04\x54\x3b\x67\xef\x04\x4d\x6a\xcf\x2b\x36\x7c\x57\x0e\x9f\x43\xa5\xa3\x42\x91\x56\x09\x23\x2b\xc7\xc4\x8b\xd9\xb3\x57\x79\xb1\x12\xd6\x8e\x06\x5f\x0d\x81\x54\x79\xc2\xe8\x84\x57\x64\xd9\xe9\x49\x22\x55\x6d\x27\x86\x53\xd0\xce\x7c\x68\x39\x6a\xb1\x0b\xc8\x9c\xb5\xb3\x30\x92\xf2\x32\x57\xa2\x4a\x67\xad\xe1\x26\xdd\x15\x9f\x82\x27\x96\x32\xa9\x3b\x66\xa2\x89\xb6\x71\xda\x96\x62\x05\xc7\x32\x72\x9c\x5c\xcb\x52\x90\xa0\x8e\x75\xaf\x7a\x38\x3e\xe5\x19\xc1\x15\xf6\x9c\x4c\xda\xba\x6a\x09\x93\x40\x10\x73\xab\xa8\x5a\x84\xf4\xeb\x56\x6d\x5f\xe4\x92\x0c\x05\xfb\x6c\xde\x68\xac\x71\xc8\x64\x07\xc8\x5e\x61\x3b\xc6\x82\xd4\xc3\x68\x9d\x42\xd7\x54\x6e\x5b\x67\xf0\x3c\xd7\xcd\x18\xab\xa3\x13\x8e\xc9\x29\x38\x42\xa9\xae\x9a\x46\xa5\xec\x06\xa4\xbb\xe2\x8e\x5a\x9d\x33\xfb\x48\x2a\xf2\x87\x3b\x4c\x80\xa7\x5d\x85\x3e\x55\x1f\xa0\xe1\x4d\xd3\x63\xed\x05\x75\xe0\x95\x2c\x3d\xda\x1d\xb9\xdd\xea\x9b\x9a\xcb\xad\xf0\xe4\xdb\x3d\xb9\xb8\x83\x91\x90\x7b\x5d\x50\xc6\xac\x22\xc3\xdc\x76\x66\x2b\x82\x5f\x85\x91\x7c\xa3\x47\x5a\x56\x39\xc1\x58\xb8\x02\xa3\x9d\xb6\x5c\x11\x37\x85\x77\x87\x3a\x3b\x4f\x7a\xde\xd9\x77\xd9\xc4\x2d\x8c\xc8\xba\x26\x77\x8e\xde\x80\x39\x2b\xc6\x01\x76\x19\xf6\x46\x2b\xa0\x1d\xd1\x4b\x2e\xcb\x82\x99\x82\x6b\x31\xbb\x39\xed\xda\x95\x9b\x9a\xd3\x34\xcf\x25\xa6\x25\xec\xc9\x6d\x42\xc9\x82\x33\x4e\xa7\xde\x8f\x79\x2a\xb5\xf0\x2b\x9a\x4b\x9a\x45\x0f\x50\x4c\xc8\x3a\x8b\x0a\xf7\x61\x5c\x8a\xcb\x92\x20\x13\x47\x91\x25\xec\xbc\x04\xb5\xc6\x25\x0f\x8f\x4b\xb6\x9e\x86\x2b\x40\xcc\xac\x92\x53\x94\xae\x67\x37\x60\x13\x93\xc6\x7d\x3b\x64\xe2\xb0\xcd\x1a\xd5\xcc\xd1\x42\xa0\xfd\xcc\x28\x4d\x83\x39\x50\x47\x95\x57\x5c\x5f\x12\xd4\x4e\x78\x50\xd0\xfb\x70\x2e\xa7\xa0\x84\x5a\x94\xc4\xa9\x47\x8d\x59\xe3\xc5\x0b\xd1\x48\x1e\xe7\x69\xc3\xee\x9c\x60\xf3\x0a\xc6\x92\xc3\x31\x7b\x3c\x4d\xf5\x79\xa5\x04\xee\x1a\x99\xb9\xad\x9a\x9e\xa1\x87\x73\x3b\x51\x3e\x0c\x5b\x81\x1d\xe6\x0c\x4b\x68\x0b\xef\x28\x5f\x71\x60\x2e\xc0\xde\xce\x94\xf4\xba\xc6\x28\x77\x47\xef\xec\xea\x90\x0b\xce\xf2\x60\xbb\xd0\xcc\x59\x53\xfa\xc1\xd0\x7a\xf0\x84\x81\x8f\x19\xb6\x9b\x9a\xcb\xad\x18\xa8\xdb\xed\x5d\xc7\xd9\x99\xfb\x86\x0e\x74\x2c\x10\x44\x0e\xf7\x08\xfc\x60\xcc\x99\xb1\x80\xac\x4e\xcd\xe1\x3c\xd8\xd9\xb0\xdb\x85\xdb\x88\x3c\x2f\x21\x9c\x0b\xf4\xdd\x4b\x48\x5b\x03\x80\xed\x8b\xc1\x4c\x6a\xac\x59\x06\x4c\xad\x99\x49\x87\x6c\x34\x81\x48\x20\xed\x48\xd1\x52\x32\xae\x88\x65\x64\xab\x3a\x47\x47\x6b\x34\x3d\x2b\xdc\xfa\x58\x93\x18\xe4\xb0\xd2\x6c\x63\x42\xbe\xb9\xcd\xfa\xd2\xcd\xb9\x39\x09\xf2\xd8\x8f\xe5\xf0\x57\xbc\x27\x39\x90\x69\x8f\xfc\x10\xa1\xef\x88\x07\xe4\x15\xf3\x85\xe7\x5d\x54\x88\xd1\xc4\x0e\x68\x05\x98\x9e\x65\x6a\xea\x2c\xd5\x10\x9e\x57\xcc\x0c\x53\x98\xbe\xae\xd4\x2a\x31\x59\xd7\xcd\x55\x9c\x09\x32\xb2\x97\x2d\x41\xd2\xad\x1b\x71\x31\x36\x4e\xa7\x10\xa1\xab\x98\x85\x5e\x11\xa0\xca\x8f\x18\x4d\x90\x3b\xde\xd7\xa6\x6b\x0b\x2c\xdb\x73\xcb\x28\xc4\x72\xf8\x3e\xdd\xd6\xc0\x3c\xb1\x00\xfb\x50\x84\x4d\x0b\xba\x26\xe7\x15\x27\xbc\xbb\x74\xd8\x60\x97\xcd\x24\x9b\x9c\xe7\xb9\xcd\xbc\xe0\x62\x79\x43\xa3\x95\x15\xb5\x91\x64\x16\xa7\xcd\x6e\x2e\x3b\xb3\x35\x01\x7b\x05\xe9\x81\x77\x51\xf7\xda\x7b\xec\x46\x50\x3c\x60\x38\xd2\xe6\xfa\xc0\x0a\x18\xc0\x8f\x0d\x8d\x3c\x4e\xa0\x11\x71\x6b\x55\xbc\x4d\x3d\xff\x7f\x8c\x31\x6f\xc5\x59\xdf\xe6\xe6\xa2\xce\x7e\x76\xde\xcb\x50\xdc\x21\x39\x69\xa7\x27\x4c\x5d\x6d\xd1\xb8\xc3\x2d\x8b\x8b\x7c\xc5\xf4\xb4\x11\xc2\x15\x57\x03\x1c\x70\x57\xe4\xea\xcc\x9a\x8f\x5e\xa0\xcb\x4b\x0d\xe6\xff\xa3\xed\x4d\x83\x7e\x09\xea\xf2\x50\x4d\xe4\x2a\x45\x34\xa8\x10\x89\xb8\x2f\x04\x89\x88\xf4\x36\xe5\xc6\xa2\xe2\x42\x50\x89\x57\xc4\x18\xa3\xf4\x32\xbd\x77\xcf\xf4\x36\xd3\xdd\x18\xa3\xc4\x05\xb7\xe0\x7a\x85\xab\xa8\x31\xde\x20\x01\xc5\x80\x5e\x82\x26\x88\x10\x35\x82\x80\x8a\x6c\x06\x91\x40\x64\x51\x04\x25\x81\x70\x45\xf1\xd6\x49\x15\xd4\x29\xcf\x87\xf3\xe5\xcc\xf7\xae\xb7\xde\x9a\xff\xcc\xd3\xbf\xe5\x59\x56\x49\x62\x14\x83\x9f\x3d\x0b\x46\x4f\x8d\x68\x1e\xb0\xeb\xb3\x7b\xc0\xa6\x19\x89\x4a\x75\x8a\x4b\xee\x86\xa3\x1b\x0a\xc7\xb1\xd1\xe5\x14\xba\xee\xf6\xec\xeb\x14\x4e\x35\x6c\x66\x3e\x77\x8c\x55\xf0\x9b\x5d\x3c\x4f\x68\xf7\x26\x2d\x73\x5e\x71\x5b\x5b\x72\x6c\x63\x69\xbb\x3c\x88\x3a\xc2\x70\xf2\x9c\x41\x56\x53\x14\x2b\xa1\x86\xcd\xa5\x2d\x38\xb8\x88\xb4\x1e\x22\x67\x11\xc1\x76\x09\xef\x8c\xf1\x94\xad\xac\x70\x73\x58\xbb\x6d\xf3\xd5\xc8\x40\x16\xbf\xed\xcd\x60\x9c\xcc\xc1\x80\x85\xc0\x2b\xe1\xce\x6d\x02\x80\x83\xaf\x57\xfc\x17\x44\x8b\x18\x38\xcc\xa7\xef\xf0\x80\xb3\xf6\xb5\x34\x2a\x88\x1e\xa7\x26\x52\x08\x2a\x02\x4e\x7d\xdb\x62\xd4\x1a\xc8\x73\xe9\x00\x5e\xe1\x1b\xb1\x6f\xd4\x06\xad\x97\x75\x8b\x3b\x04\x65\x69\x96\x0c\x2b\xf2\xb2\x99\x3e\x1c\x9c\x7e\x8d\xac\x98\x50\xb0\x4b\x2b\x6f\x98\xce\x2e\xae\x60\x45\xee\x70\xab\x5d\x6e\xfb\xae\x7d\x00\x45\x61\x01\xb5\x50\x1e\x29\xbb\x84\x16\x8e\x29\x4d\x3e\x44\x4d\x87\x14\x22\xf3\x58\x81\x37\x7c\xde\xc2\xf8\xba\x1d\x2f\xeb\x6f\x90\x8d\x5e\xf4\x88\x9f\xbc\xd7\x33\x5f\xf9\xa4\xc7\xfe\x0a\xff\xd8\x5f\x79\xcf\xff\xf8\x7f\xc8\xe7\x7c\xfe\xaf\xfe\xd3\x2f\x7f\xd2\xa3\x1f\xfe\xb0\xbb\x2d\x3f\xfd\x69\x0f\xe3\x77\xbd\xd9\x33\x0a\xfe\xfa\xf3\x3e\xf9\x1b\xfe\xe2\x33\xde\xf9\x98\x2f\xfa\x92\x97\x3e\xe0\xc9\x5f\xff\x80\x8f\x7d\xd7\x6f\x7c\xff\x0f\x7e\xe7\xbd\xde\xfe\x6d\xdf\xf1\xc6\x1f\xf8\x83\x3f\x7c\xfb\xcd\x51\x72\x3f\xf2\x61\x5f\xf3\xa2\xf8\xc5\x6f\x7d\xf0\x17\xbc\xe3\x5e\xbf\xf9\x21\x8f\xf8\xb3\x0f\xfa\x50\x7c\xff\x77\x3c\xef\x6e\x7f\xfa\xc2\x5f\xf8\xa6\x7b\xfc\xda\xb3\x9e\xe2\x6e\x3a\xfa\xcc\x77\x3d\xed\x05\x0f\xfb\xf0\x7b\xfe\xb3\xb7\xfd\xdb\x67\xf2\x57\xdf\xe7\xeb\xbf\xfe\xc3\xee\x7e\xbe\xee\xc5\x3f\xfd\xeb\x8f\xba\xe7\xbd\xff\xe8\x7f\x7d\xdd\xb7\xbd\xea\xe6\x2c\xbb\xb7\xac\x0f\x7f\xca\x7d\x7e\xed\x55\x3f\xf2\x8f\x7f\xf3\x19\xbf\xfe\x3b\xaf\x78\xc9\xf7\x3e\xb7\x2d\xdf\x74\xd7\xdf\xbc\xdb\xe3\xbe\xfe\xb7\x3f\xcf\xff\xce\x3f\x7e\xf5\xcb\x6e\x3a\x0a\xff\xc9\x9f\xa5\x3f\xbf\xfb\x0f\xbd\xe6\x35\xf8\x23\x7e\xe5\xcb\xff\xf4\xff\xfc\xfd\xbb\x7c\xee\xbf\xfe\xf5\xf7\xfe\xf3\x27\xac\x8f\x69\x3f\xfd\xfa\xdf\xfb\x29\x41\x6f\x3a\x7a\x8f\xbb\x3e\xe7\xbf\xdf\xf7\xfe\x0f\x7d\x75\x67\xcf\xfe\xd3\x7f\xf5\xa6\x17\x3c\xff\x4d\x2f\x7e\xe7\x7f\xfe\x40\xf2\x39\x2f\x7a\xd9\x9b\xf3\x8f\xfe\xca\x53\x7e\xea\x66\x7b\xa9\xaf\x84\x9f\xf1\x3f\xbf\xf5\xff\xfa\xfd\xdf\xff\xcf\x6f\x7e\xea\xdb\x5e\xf2\x0f\xee\xf7\xcd\x7f\xef\xf9\xaf\xf8\xa2\x5f\xfa\xbe\x37\x7d\xca\x8f\x7e\xc4\x1f\x3e\xf0\xa3\x9e\x5e\x9e\xf0\x7e\xb2\xd1\xed\x9e\xea\x1d\x1e\x7c\x21\x42\x60\x70\x6a\xcd\xa8\x02\xa8\xbb\x38\xfb\xee\x3d\xb2\xba\xf1\x2d\x6f\xd6\x01\xd1\xc9\xc2\xd0\x2e\xfc\xd8\x9b\x71\xae\x68\x7b\x85\xb0\xee\x94\x23\xda\x35\xdb\x12\x71\xf2\x98\x2f\x2b\x40\xd4\x11\xa6\xf0\x5a\xab\xc3\x78\xd9\x04\x08\x78\xdf\x02\xdf\x9b\xb1\xd6\x48\x60\xae\x28\x13\x46\x5a\x11\x2a\x14\x71\x89\x86\x01\x80\x29\x34\xfd\xb2\xe5\x60\x53\x04\x38\x77\x83\xf7\x10\x5c\x86\x60\xb6\x15\xd5\x3a\x50\xa4\x57\xa0\xda\x40\x26\x18\xd3\xbc\x2a\x0d\x05\x1a\x9c\x1a\x9c\xcb\xa2\x3d\xf7\xa8\xca\xd0\x48\x9d\x6d\x49\xb9\x26\x8b\x43\xd0\x1d\x65\x35\xae\x40\xb5\x4d\x2d\x0c\xc2\xce\xa4\x39\x09\x5e\xf3\x72\x36\x03\xce\x95\xd6\x39\x17\x15\x38\x05\x80\x91\xde\x05\xac\xb8\xb0\x30\xe5\x91\x42\xbd\xe2\x17\x51\x3e\xc9\x48\x82\x24\xa7\xd5\x9c\x26\xd3\x8f\x4d\x4f\x2a\xf8\x28\x79\x37\xa3\xe8\x23\x0f\x2d\xb8\x95\x2d\x40\xdf\x27\xc0\xc7\xb8\xc0\xfc\x8c\x59\x60\x07\x4d\xad\x31\xe3\x21\x9a\x71\x81\x72\x41\x09\x9d\x36\xb4\x81\x2b\x92\x2b\x6c\x86\xf3\x33\x52\xa4\x07\x0f\x89\xec\x18\x5c\xe1\xd4\x1a\x1c\x03\xfb\x48\x10\x6a\xa7\x48\x03\xa4\x43\xef\x59\x40\x9e\x00\xe1\x98\x03\xb3\x4c\x63\x62\x3a\xc3\x32\x65\xe9\x07\x60\x28\xc3\x5b\x1d\x60\x6e\x83\xc3\x77\x18\x5c\x4c\xd6\x75\x44\x6b\x0a\xf0\x0e\x82\x85\x15\x70\xf4\x1d\x91\xee\x90\x49\xa9\x30\xdc\xb8\xc8\xcb\xd4\x4b\x27\xa2\x81\xed\xdc\xf0\xb8\x82\xe6\xb3\xc3\x80\x23\xd2\x34\xd3\xd5\x81\xa0\x7c\xdf\x56\xa9\x38\x91\xd9\xb2\x91\x8e\x6d\x59\x15\x55\x35\xcb\xb0\x02\x58\x80\x53\x93\xd3\x2b\xc4\xf8\x65\x6d\x84\xf7\x48\x1a\x45\x72\xd5\xc5\x66\x73\x68\xa5\xc8\xe2\x6b\xdf\xf6\x24\xbd\x59\x06\xde\x86\x87\xec\x3c\x8d\x9b\x7b\x66\x57\x64\xce\xd3\xd9\x96\xb6\x31\x83\xe4\xb1\xc3\x85\x5a\x72\x3a\xb7\xb3\xa2\xbc\x2d\x9d\x1d\xc5\x70\x9d\xd7\x90\xaa\xb3\xbb\xd0\x30\x93\x4d\x1e\xf3\x92\x51\xe4\xda\xd7\x10\xe8\xe9\x56\xa7\x47\x4c\xa3\xfa\x79\x52\x9d\x0d\x39\x72\xf6\x1a\x14\x52\x9b\xe4\x37\xbe\xad\xba\x50\xe5\x36\x9a\xaf\xc8\x62\x61\xa7\x3e\x3c\xf2\x1c\x00\x52\x2a\x1e\x04\x8f\x1b\x75\x7d\xb6\xcc\x00\xda\x61\x51\x83\xcc\x44\x89\x54\x2e\xd9\x23\xc6\xbc\xe8\x66\x2e\x51\xf9\x27\x69\x73\xc6\xdc\x18\xbb\x1f\x04\xb3\xfd\x10\x40\x63\xbc\x11\x3d\x60\x72\x3b\xa7\x76\x74\xd9\xb3\x2f\x6b\xa7\x1a\x14\xc0\xd8\x15\xe6\x1d\x19\x6c\xdd\x9c\xe1\xc0\x46\xc8\x45\x9c\xf9\xdc\xf6\xde\xe5\x19\x60\xf5\x61\x84\x32\x92\xd8\x0c\xb0\x47\x71\x79\x2b\x46\x10\x90\x6f\x12\x5c\xbe\x3f\xb4\xe1\x36\x95\xdb\x1d\xee\x4d\x4d\xe6\xab\x60\xaa\xed\x2b\x39\xc9\xb9\x56\xb1\x21\xda\xcc\xb0\x1a\xe8\x7d\x3b\x96\x89\x1c\x0c\x7b\xc8\x6c\xdd\x84\xd2\xd1\x99\x85\x5e\x21\x69\xe3\xb2\x30\xe3\x9a\x01\x16\x34\x5f\xd2\xb2\x6b\x63\x0d\x0c\x73\x05\x53\xf9\x61\xd3\x56\xbc\xe7\xcc\x2a\xe2\xf4\x59\xbb\x53\x12\x5c\x31\x55\x27\x70\x60\x67\xb1\xcd\xdb\x49\x74\xb4\xb2\x44\x32\x57\x62\xc5\xb1\x2c\x7c\x38\xc3\xf6\xad\x51\x43\xc4\xa1\x64\xa4\x3a\x5a\x0c\x2f\x21\x6b\xaf\xad\x81\x26\x19\x38\xd1\x8a\x8e\x55\x2c\x31\xae\x9b\xa5\x03\x44\xbb\x48\xc1\x55\xcb\x9b\x85\xda\x92\x78\x78\x35\x59\x4d\x71\x87\x17\x08\x2e\x19\xf3\x61\x07\xe7\x12\x21\x4b\xdb\xc1\x91\xe9\xee\xc4\x72\xea\x32\x09\xe7\xa3\x88\x58\xf6\x7c\xec\x11\x50\x3f\x56\x2d\xe3\x4e\x40\xba\xa2\x66\x88\xa3\xc7\x8c\x0e\x25\x01\xc0\x35\x8d\xb5\x9e\xed\xe4\x71\x10\x71\xac\x9b\xc0\x1b\x75\x44\x77\xe4\xf1\x6a\x08\x94\xce\x61\x60\xeb\x15\xf6\x08\x24\xf9\xba\xa9\x23\x2d\x82\x18\x24\x92\x38\x04\x36\x83\xc8\xb1\x9e\x92\xaa\x2d\xc6\x32\xa3\xde\x83\x97\xd6\xf5\x2d\x71\x57\xf9\xbc\x82\x0a\xb7\x21\x74\xe3\x63\x70\x62\x80\xc0\xaa\x0a\x99\x95\x5d\x07\xb2\x95\x79\x1c\x64\x32\x2b\x56\x0f\x5b\x34\xbe\xd7\xa9\x3b\xdc\x05\xb3\xb7\xda\x4b\xdd\xae\xd7\xbb\xd3\x52\xc7\x54\x79\x9c\xc9\xe4\x5e\xb9\x50\xd1\x58\xbf\xae\x67\xc8\xbc\x2d\x3a\x95\xe8\x40\x86\x3c\xd2\xa6\x42\x2e\x16\x59\x80\x06\xbe\xa4\x66\x00\xa2\xa6\xb2\x6e\x94\x24\x46\x76\xb5\x77\x53\x34\x44\x25\x48\x53\x28\xab\x1a\x64\x24\xe0\xc1\x89\x2a\x56\xe0\x63\x72\x33\x60\xb9\xe2\x6e\xd8\xcd\x54\xeb\xb1\xa1\x8a\xcf\x24\xeb\xca\x75\x87\xa0\xc3\x54\x1a\x31\x65\x45\xeb\xf4\xdb\x7e\x1c\xcd\x37\xe9\xf9\x2c\x61\x2a\x59\xae\x60\xac\x71\x07\x54\x1d\x52\x84\xd8\xb7\xd3\xb3\x65\xf3\x8b\x9f\x43\xef\x39\xcf\xc9\x0e\xa8\xb2\xee\x61\xf5\xcc\xb0\x96\x60\x6a\xbb\x30\x57\x04\x4a\x33\x33\x25\x5a\x36\xe9\x71\x4a\xd2\x2f\xab\x40\x5b\x83\x50\x2e\x79\x93\x22\xda\x43\x50\x68\x36\x7f\x74\xcd\x89\xd5\x2b\x07\xb0\xb7\x2b\x3c\xe6\xe9\xf0\x71\x93\x0a\xb7\x53\x4d\xd4\xfd\xb6\x57\x8f\xc9\x00\x48\x2e\xcb\xce\xa7\x6f\x0d\xc9\x05\xc8\x43\xe7\xb4\xa7\x19\x76\xcc\x90\xbf\xc2\x93\x27\x6e\x66\xdb\x05\xb5\xca\xb2\x74\xda\xb4\x0c\xbb\xdb\x12\xb0\xa3\xb8\x07\x80\x00\x8c\x71\x5f\xf8\x79\xea\x8c\x84\x3c\x77\xe4\x33\xb8\x62\x38\x1c\x01\xf6\x91\x01\x6e\x3d\x22\x27\x73\x52\x17\x55\xc3\x1e\xfc\x82\xfc\xb6\x1d\x7e\xb2\x7d\xdb\x48\x3b\x0e\x81\xf3\xb6\x0b\x37\x1c\xbb\xd5\xa4\xe1\x76\xd3\xa1\x3b\x4d\x36\x6a\x63\x5f\xf4\xb6\x23\xbc\xd1\x1b\xa5\x1f\x4b\xad\x99\x23\xeb\xd3\x60\xd1\x54\xab\x2c\x2d\xa5\x6b\xc9\x1b\xf5\xdc\x82\x8d\x08\x78\x49\x72\x7f\x5e\xca\xba\xaa\x54\x79\x6b\x9b\xc4\x6b\x20\x6a\xe3\x3e\x65\x17\xd9\x0e\x54\x00\x46\xdf\x68\x4c\x70\xea\xb5\x6c\x0a\x6e\x4a\xd6\x2b\xee\x86\x1a\x35\x3d\x52\x65\x09\x82\x89\xb5\x1b\xd5\xd9\x23\xf0\x99\x48\x14\xbd\xec\x2a\x7a\xba\x1d\x7b\x73\xa4\xf2\xea\xb1\x59\x4a\x87\x57\x38\x7d\x2c\x08\x2e\x38\x07\x99\xcd\x96\x72\x0a\xdb\xe8\xeb\xbe\xeb\x76\xc6\x99\xc6\xca\xec\xf0\xb5\xf2\xb2\x6b\x43\x05\xb5\xe7\x3c\xa8\x01\x57\x04\x8d\x4f\xac\xbd\x0a\xfd\xe0\xab\xe2\x22\x31\x22\xe7\xd8\x44\x0e\x27\x27\x60\xb7\x15\xaf\x00\x3b\xb6\xc4\x70\xb0\x38\xd3\x2a\xeb\x3c\xc4\x15\x8b\x43\xa7\x98\xab\x0d\xc1\xdd\x63\x92\x20\xe9\x25\xcf\x63\x1c\x2a\xca\x19\xbc\x90\x75\x3d\x75\x06\x75\x08\x1c\xd8\x3a\x18\x0d\x49\x5d\x41\x19\xa7\x2c\x90\xad\x0b\x44\x15\x16\x87\xd8\x4e\xba\xe0\x14\x31\x80\xcb\x9a\x10\x23\x2b\xab\xa5\x2a\xbf\xc7\x66\xfa\xca\x17\x70\x64\x27\xed\x15\x3c\x11\x6f\x5a\x59\xf6\x84\xcc\x79\xc0\x73\x31\x73\x59\xb0\x17\x94\x9a\x48\xb9\x5c\x36\x14\x5c\x0a\xc5\x2d\x6d\xea\x1d\x94\x54\x05\x9c\xf3\x56\x3e\xc0\xed\xe6\xc9\x77\xb8\x2d\x3a\xcb\x22\xbc\xd1\x1e\xaa\x02\x09\x23\xa8\x03\xd9\xe7\x4e\x74\xdf\x49\x06\x55\x39\x8d\x33\x3a\xe8\x72\x0a\xc4\x27\xd7\x82\xfb\x4b\x6a\x06\xa7\xba\xc4\xba\x53\x9f\x2d\x50\x53\xed\x8d\xb2\xc4\x7d\x91\x27\x5f\xc3\xc2\x7d\x52\xd8\x6e\x90\x41\x66\x38\x2a\x54\x10\x66\xf9\x15\x93\x9f\x00\x56\x99\x07\x03\xad\x58\x85\x6a\x05\x07\xaa\x6d\xa0\x23\xb1\xb4\x07\x25\x31\xdf\x36\x65\x79\x4f\x6a\xd1\x59\x71\xbf\x39\x3f\xae\xb8\xad\x61\x86\x52\x8d\x2d\xe7\x3c\xa2\x20\x54\x5b\x84\x17\xaa\x9a\xec\xdb\xd6\xd6\x73\x84\xa2\xcd\x94\x54\x71\x7d\xe3\xaa\x3a\x1b\x58\xcc\x25\x1e\xf9\x70\xdd\x4f\x96\x9b\xa5\xcb\x54\x8b\xad\x87\x5f\x53\xa3\xbc\x34\xc8\x15\xc5\x45\xba\xb0\x2c\xb5\xea\x9e\xb7\x78\x9e\xb6\x2e\xe3\x0a\xb1\x1b\x23\x60\x99\x89\x0e\x07\x30\xa0\x58\x53\x38\x13\xf7\x8a\x6e\x94\x2c\x71\xf5\x7e\x63\xb2\x4e\xe4\x4e\x79\x52\xa6\x0e\x63\xbb\xae\xfe\x0a\x85\xd0\x80\xad\x58\x0f\x7a\x06\x4b\x8f\xc1\x9e\xe7\x10\x18\x4e\x35\xc4\x56\x5a\xcb\x0a\x05\xe7\x54\xd9\x89\x19\x56\x07\x06\xb0\x66\xf6\x8a\x44\xbd\x43\x70\x87\x8f\x65\x5d\x67\x3d\xf3\x5c\x36\xb4\xed\x87\xd5\xb0\xd8\x53\x6d\xde\x03\x41\x69\x5a\xb3\x47\xc9\x3b\x67\xcf\x00\xac\x4e\xb7\x1a\x63\xde\x6e\x03\x75\x87\x2b\x17\xc5\xcf\x73\x02\x48\xba\xdb\x37\xac\x0b\x55\x39\xf0\xb4\x57\xbf\xca\xb9\xe4\xdc\x84\x1d\x43\x1d\x90\xf4\xa5\xaf\xa6\xba\xc1\xf7\x4b\x58\xee\x9d\x89\x73\xd1\x5a\xd9\xbc\xe4\x43\x7b\x45\x1d\xaa\x5d\x2d\x32\xae\x33\x47\x57\xb7\x63\x91\x0c\x89\x45\xe7\x35\xf8\xc3\x57\xe1\xae\x68\x48\x28\x70\x31\x84\x88\x1c\x15\x6c\xb6\xc9\x37\x2a\x80\xa0\x75\x17\x49\xd8\xc3\x13\x64\xc7\x00\x2a\x99\x71\x3a\xe9\x30\xb2\x84\x8d\x2b\x84\x3c\x54\x8a\xc0\x8e\x45\x75\xd5\x0e\x3d\xa8\xb7\x93\x89\x71\x36\x08\x36\xcd\xcf\x4e\x19\xb3\xac\xad\xdb\x82\x22\xd9\x9c\xe8\xa8\x4b\x7e\x45\xdc\x14\xe5\xc8\x4b\xa3\xac\xf6\xe2\x30\x1d\x96\x32\x83\x88\xd0\x6a\xbf\x51\x79\xcc\x62\x90\xd0\x52\x9c\x48\x23\x43\x6d\x9a\xd2\x1c\x9a\x5e\xa1\xdb\xf4\x07\xc3\xdb\x42\xec\x6e\x56\xdd\x0f\x03\xd6\x63\x1d\x7e\x8c\xa3\xec\xac\x55\xdc\xf7\xcd\xf1\x42\xb7\x52\x66\x96\x99\xe2\x7d\x01\x57\x54\xb4\x6c\x02\x86\xf7\x94\x13\xde\x7c\x5c\x4c\x6d\x3d\xf4\x1e\x91\x53\xc7\x92\x84\x82\xe9\xf0\x38\x6a\x81\x53\xdf\x88\x5a\x9d\xd3\x12\x5d\xa1\xcd\xa1\xe9\x14\xa1\x25\xe8\x68\xde\x8f\x84\x85\x4e\xbe\x46\xdb\x63\x1e\x00\xab\xb5\xef\xb0\x4e\x64\x02\x75\x94\x76\x49\xf4\x9e\x22\x73\xe0\x16\x70\xb9\xdd\xce\xfa\x4e\x33\x19\x25\xd9\x5d\xa5\x29\xd7\xa3\x05\x10\xd3\xb9\xe8\x39\x05\xea\xeb\x68\xb4\xc5\xdc\xf2\x1a\xc7\xe4\x6b\xd3\x1d\xed\x2b\x5f\xb8\xba\x82\x6b\xcf\x26\x88\x12\x6b\x14\xfd\xee\x11\x0f\x42\xb9\xdd\xb1\xe1\x97\x00\x90\x8d\xd4\x5a\xbe\xfa\xe3\x24\xfa\xf0\xab\x68\x56\x23\xc1\xa0\xbf\x62\x43\xd2\x8e\x70\xee\x62\x32\x35\xca\xce\xed\x02\x97\x1d\xee\xa4\x71\xa4\x34\x24\x83\x10\x3b\xc0\x31\x37\x62\x34\x83\x46\xb9\xd3\x93\xf3\x92\x69\x07\x3b\xce\xbe\xe4\x1c\x32\xa7\x47\x3c\xc8\xbe\xf7\xea\x50\xde\x2b\x71\xf0\x50\x02\x91\xb3\x56\xca\xf0\x98\x5a\x2d\x3c\x1f\x02\xd5\x2b\xa2\x2f\xe8\x39\xec\x8a\xb5\x47\x09\x10\x0e\xb4\x1b\xdd\x7b\x47\x20\xa5\xc8\x73\x97\x54\x88\x0a\x90\x9a\x08\x14\x0a\x49\xae\x6a\xd3\xec\x92\x8c\xc3\x98\x37\x8a\xa8\x20\x5a\x02\x2e\xc3\x11\x79\x09\x22\x1b\x25\xdb\x76\x8c\x45\x50\xd2\xd6\x5e\x65\xde\xd6\x18\xf6\x65\xe1\x54\x91\x72\x05\xcd\x67\x8c\x50\xdc\xd9\x82\x61\xbd\x2e\xd5\x6b\x88\x2a\x76\x6a\xac\x82\xc4\x12\xd8\x19\xa2\xd9\xa8\x95\xd2\xe5\x0e\x48\x87\x38\xec\xf4\x0a\x72\x40\x3c\xe5\x50\x1d\x94\x94\xba\x68\x5e\xe9\x74\xce\x50\x4d\x55\xce\x8c\x41\xec\xee\x06\x54\x12\x5a\x54\xc8\x40\x0a\x6c\xe9\x98\x37\x85\x86\xbe\x8f\x6c\x74\x3b\x67\xa7\xbf\x41\x36\xda\xbf\xef\x31\x5f\xf1\xa0\xfe\x61\x9f\xff\x5f\x7e\xed\xfb\x5f\xf7\x93\x0f\x7c\xea\x4b\xdf\x3a\xef\xf7\x9d\x8f\x7b\xde\xc7\x3d\xfe\x67\x1e\xfb\x40\xfb\x55\x5f\xf9\x8a\x6f\xbb\xe9\xe8\x8f\x7f\xf5\x5b\x1f\xf9\xb4\x7f\xfd\xb0\xa7\xbf\xfc\x67\xdf\xf6\x96\xc7\x7e\xc7\x8f\x3f\xee\x7e\x1f\xf8\xfc\x17\xdc\xfb\x23\x5f\xf1\xb6\x8f\xfe\xc6\x6f\x79\xdd\xd7\xab\xf8\x92\x9b\xed\xa5\x5e\xfb\xf0\x2f\x7d\xc0\xef\x7d\xeb\x78\xc5\xc7\xbf\xe4\x5b\x3f\xfc\x25\x3f\xfe\xf3\x8f\xfc\xcc\x7b\xbd\xf2\x77\xde\xf3\x7b\x7f\x46\x9f\xfe\xda\xe5\x0d\xdb\x33\xbe\xfc\xa6\xa3\x9f\x7a\xdf\xe7\x3d\xfb\x31\xf7\xfc\x67\xcf\x7f\x18\xfa\xa1\xfb\x7f\x02\xfc\xe2\xdf\x7a\xf2\x1f\x7c\xe9\x83\xbe\xf4\xcb\x3e\xfb\x03\xfe\x6b\xfd\xd1\xe3\x25\xbf\xfa\xed\x2f\xbe\xe9\xe8\xd7\x7e\x8a\xff\x8e\xaf\xbd\xef\x57\x3d\xf8\x39\x3f\x73\xef\x07\x7d\xc5\x33\xde\xfe\xa8\xb7\x3d\xe9\x99\x6f\xfa\xc8\x8f\x51\xef\xf9\x8e\x77\x3c\xff\x01\x3f\xfb\x94\xe7\xcd\x9b\xff\x81\xef\xfb\xdd\x2f\xfa\xac\x6f\xfe\xdc\x47\xbd\xf8\x63\x5e\xf7\xe1\x1f\xff\xca\x7f\xf8\x03\x6f\xf9\xea\x47\x3d\xe1\x41\x6f\x7f\xee\xbd\xbf\xf0\x1f\xbe\xf5\x13\x5f\x7b\x5f\xfa\x57\x37\x9b\x20\x7d\xea\xfd\x1f\xff\x27\xbf\xfc\x77\xc4\x27\xdf\xf5\xae\xfe\x7b\xbe\xfd\xb3\x9e\xf5\x85\x8f\xf9\xb5\xc7\xff\xe4\xe7\x7f\xc0\xf7\x7c\xe5\x3f\xfa\xdc\x0f\xfe\xde\xbf\x7e\xc9\x67\xdf\x74\xf4\x05\x7f\xf0\x19\x9f\xf7\x79\x77\x7f\xec\x5f\xdc\xe3\x57\x3c\xfb\x9a\xff\xf6\xb8\x27\xfd\x8b\x87\xff\x83\x87\xfd\xc3\xf7\xfe\xea\xc7\xfc\xcc\x7f\xfa\xa8\x67\xff\x93\x07\xfc\xf5\x4b\xde\x4f\x36\xba\xdd\x53\xbd\xc3\xe5\xa3\x6d\xc3\x63\x35\xed\x21\xa1\xb5\x75\x4a\x7e\x6c\xc3\x82\xe6\x46\x99\x7d\x04\x68\x95\x52\xbc\x9d\x27\x5e\xf7\x83\x0a\x01\xa7\xca\x57\x14\x2b\x23\x9f\x5a\xb4\x1a\x7c\x3a\xb0\x29\xea\xa4\x5b\x93\x66\xc3\x9b\x11\x8b\x3f\x54\x38\x23\x71\x41\x76\xe7\x99\xe5\x35\x14\x8f\x09\xbd\x22\x7f\x24\x05\xce\x9d\x2f\x1b\xda\x00\xec\x2b\x23\x5a\x30\x60\xec\xb4\x30\xc6\x9a\x46\xe3\x5a\xc3\x60\x98\x39\x57\xd4\x0b\xd7\x4e\x6e\x57\x64\x63\xd2\xb2\xca\x75\x34\xa4\x84\x3d\x65\xcf\xa7\x4d\x6a\xdd\x61\xd2\xc2\x30\x8f\x79\xd7\x08\xb2\x65\x5f\x50\x8b\x49\xfb\x2e\xe4\x59\xf0\x15\x01\x16\x6c\x73\x69\x27\xd5\x40\xd1\xf7\xac\x74\x36\x61\xa7\xcb\x56\x31\xce\xbe\x63\xab\x4a\x5e\xce\x4a\xf6\x90\x6d\xf6\x08\x1b\x5d\x73\xb1\x57\xe8\x1e\x05\x2a\x5a\x1e\x73\xdd\xca\x68\x34\x30\xa3\x79\xc1\xfb\xb9\xd0\xcd\x50\x7b\xce\x29\x01\x52\xdb\xee\x57\x66\xb6\xe2\x74\x37\x5b\x76\x17\x2c\x94\x19\xd0\x31\x39\x13\x10\x14\x70\x80\x2e\x36\x69\x35\x3c\xe1\xb2\x30\xc5\x26\xd7\xc3\x00\x0d\x3c\xca\x1a\x02\x55\x70\x66\x5e\xb2\x7c\x05\x57\xdd\xd7\x3d\xf3\x85\x21\xcb\xb2\x89\x29\x26\x96\xf2\xbe\x9e\xb0\x1e\xa7\x31\x41\xac\xf1\x64\x3a\x9f\xed\xe8\x7c\x42\xa9\x48\x0b\x0c\x96\x5b\xca\xc7\xdb\xe1\xf0\x1d\x06\x97\xb5\xed\x02\x3b\xab\x19\xa3\x40\x6b\x58\xf8\x9e\x84\xc9\x71\x9c\xfa\x8c\x76\xd4\x82\x72\x43\x91\x1d\x41\x71\xbe\x41\xc3\x0a\xbe\xc2\xd6\x95\x06\xd1\xf8\xa9\x10\xd9\x4b\x32\x47\x8d\x03\xd3\x49\xc3\x31\xaa\xb5\xbe\x09\x67\x21\xde\x43\xcc\x47\xdb\x4c\x90\x3d\x45\x81\xd1\x25\x41\x99\x7e\xc8\x06\x65\xc9\xb9\x14\x77\xf6\x01\x5d\x94\xfb\x52\xdc\x8d\x0e\x60\x4f\xb2\x4a\xda\x53\x2f\x7b\xf6\x73\x20\x29\xf1\x36\x72\xbe\x80\xb1\xc6\x22\x05\x02\x05\xc6\x00\xd1\xa8\x23\x25\xd6\xba\x1f\x2c\xc7\x75\x9d\xe9\xc8\xa9\x85\xd9\x69\xaa\x01\xc2\xb3\x97\x2e\xc8\xa1\x36\x7b\xc5\x54\x3d\xa8\x15\x81\xd5\xc4\x13\xfa\xb4\x55\x52\xb9\x24\xd8\xda\x3d\x58\xd6\x31\x1c\xc6\x70\x41\xb6\xe0\xb8\x74\x49\xaf\xb6\xb3\x98\xe8\x25\xbe\x11\x9d\xe9\x1d\x1a\x23\x17\x0f\xac\x5a\xfb\x66\x68\x90\x25\x9f\x5b\x23\x6a\x0b\x8e\xa2\x78\x4c\xb8\xb5\x83\x52\xc6\x07\xcf\x54\x5e\x61\x7d\xcc\x5c\xde\x97\x4d\xc3\x14\x76\x5d\xcd\x29\x6b\x2f\x0e\xa3\x8d\x29\x5f\x44\x23\x71\x71\x84\x84\x35\x85\xe2\x76\x6f\x17\x2e\x53\xe4\x57\x08\x61\xa8\x2e\x3b\x84\x3d\xda\x3d\x1c\x01\xda\xd3\x26\x98\x1c\x9a\x39\xeb\xc0\x54\xce\xf9\x04\x53\x24\xbb\x2e\xbd\xaa\x7d\x19\x78\xca\xdd\xdd\x2a\x84\xb9\x5d\xe5\x76\x87\xc1\x45\x76\xcf\x60\xd9\x1a\x76\xd6\xc7\xa1\x4a\x58\x17\xb5\xf9\x19\x86\xa5\x3b\xeb\xc4\x47\xce\x12\x35\x43\x05\x92\x50\x52\x43\x73\x76\xc5\x0c\xd7\xe7\x93\xad\x42\x85\x05\x36\x64\x0e\xb9\x11\x56\x0a\x8f\xf8\x4c\x00\x3a\xc0\xc5\x00\x1b\x33\x0d\xa2\xd0\x8e\x99\x07\x8a\x3e\x5e\x32\xc3\x3d\xac\x3e\xf8\x59\xe8\x6a\xe7\xb9\xfb\xfd\x60\x87\x20\x1b\x3f\xf7\x9e\xfc\xb9\xb8\x94\xf0\xd9\xbb\xdb\x23\x06\x48\x44\xd3\xf9\xb9\x5e\xe2\xe2\x5d\xbb\xd8\x05\xac\xc7\xa0\x44\x82\xd4\x22\x8b\x6e\x5f\x6b\xc6\x36\x44\x9b\x59\xf6\x50\xae\xd2\x09\x5b\x0e\x5a\x6b\xe5\x19\x86\x2b\xc4\x1f\xcc\x08\xe8\x69\x4f\xc0\x19\x47\xce\xa5\xb0\xdd\x67\x70\x6c\xc1\xb5\xd8\x61\x9e\xcc\xeb\x95\xfa\x0a\xd7\xb9\x6f\x66\x56\xc2\x64\xb8\xc2\xfa\x98\x06\xa5\x6c\x5f\x73\x60\x78\x68\x27\xc1\x9a\x18\xe9\x5b\xc9\x4b\xf5\x46\x30\x94\x63\x07\x78\xdb\x31\xb6\x95\x39\x88\xb7\xe9\xf3\xb8\xc2\xd9\x68\x0d\xad\xc9\x9a\x4c\x75\xbc\x8e\x38\xd3\x5a\xeb\xb9\xd2\xbc\x45\x16\x4d\x63\x8b\x73\x7c\x11\x7d\x10\xb8\x05\x3d\x51\x0c\x02\x5c\xa2\x38\x34\x24\x1c\x67\xc4\x08\x22\xb3\x89\xc8\x2c\x29\x10\xd7\xb0\x35\x3f\xb9\xd4\x01\x6a\x05\x64\x97\x3b\x42\x2d\x1b\x6c\x49\xb7\xe9\x26\x21\xcc\xfb\xc0\xe5\x76\xbd\xde\x1d\x1e\x7c\x75\x67\x62\xf7\xc1\x50\xb8\x74\x97\xb7\xa4\x20\x12\xc6\x9d\x51\x1f\xb6\xb9\x0c\xc7\x4a\xb1\xf1\x88\xa3\x9d\x0a\x97\x63\x98\x67\xba\xe2\xb6\xc6\x76\x27\xdc\x3a\x6e\x8e\x42\xc8\x51\xce\x72\xc6\xdc\xad\x0f\x7a\x93\xd9\x6b\xc6\xcd\x51\xd1\x3e\x12\x36\xed\x0c\x9b\x2d\x19\x80\x2b\xb6\xcf\xd0\xa0\x65\x8d\xda\xca\x25\xe4\xba\x04\xa7\x63\xc2\xe5\xdc\x1c\xb4\x8b\x82\x52\x10\x57\xf0\xc6\x3d\xa1\x64\xef\x30\xd7\x58\xda\x25\x4c\xc6\xc5\xb2\x38\xb2\x50\x6b\x2a\x8e\x58\x1e\x83\x42\x4b\x1c\xa9\x13\x58\xe2\x16\xd6\xd2\xd2\x4a\xd4\x6e\xa0\x6a\xb1\x72\x71\x32\x6b\xae\x98\x24\x23\x94\x4e\x41\xd7\xa3\x0e\x72\x24\x24\xf6\x42\x93\x2d\xa7\x3f\x66\x80\x7b\x39\x03\xe8\xbc\xad\x0a\x38\x50\xd4\x56\xa5\x35\x9c\x5d\x62\x58\xb6\x66\x4e\xdd\x59\x17\xb7\xad\x41\x28\x6d\xe5\xd8\xba\x89\x99\xb6\x69\x08\x59\x56\x36\xb2\xd7\x3d\x1e\x2d\x62\x34\x24\xa5\x8e\x5e\xa2\x6f\xab\x94\x2e\x4a\x8f\xc2\xba\x3b\xb4\xe3\xdb\xc6\x75\x0a\x32\x25\x64\xf6\x61\xa6\x21\x69\xb8\xc1\xdd\x90\x1b\x5d\xf7\xb8\x26\x96\xf3\x15\x97\x0e\xef\xeb\xd8\x31\x37\xc6\x49\x8b\x4a\xa0\xe3\x30\x8b\x48\x10\x26\x10\x4d\x84\x48\x10\x97\x29\x0b\xdb\x11\x8f\xdd\x96\xb3\x1f\x99\xdf\xda\x16\xdd\x6e\x3a\x74\x87\x2b\x97\xc5\xc2\xc9\xfd\xbe\xdb\x15\x17\xb9\x62\x93\x6b\xc0\x29\x36\xc0\x4e\xa3\x0e\x3d\x99\x86\x64\x59\x18\x90\x7e\xa5\x2a\x6d\x16\x3b\x73\x01\x1d\x96\x8a\xee\x4f\x6c\x35\x4e\x36\x24\x35\xb9\xda\xd9\x4c\x4a\x6c\xc1\xe9\x75\x39\x26\x13\xb1\xe9\x15\x1f\x61\xe4\x10\x35\x6f\x87\x95\xe5\x0a\x9a\x8f\x2a\xe3\xa4\x79\x0f\xc4\xf2\xb6\x50\x1b\x5d\x02\xf0\x84\x00\x23\x15\x91\xcf\xc4\x5b\xe0\x7c\xe8\x07\x70\x87\x9a\x88\xc6\xa9\xeb\x15\x37\xd4\xe1\x98\xd1\x5d\x7a\x77\x96\x92\x37\x77\x16\x9d\x9d\x21\x84\x04\x5e\x8f\x25\x9d\xfd\xc4\x61\x1c\x74\x13\x8d\xc1\x39\xe4\xe1\xf1\x15\x40\xcb\x26\xac\xc8\xf2\xa3\xd4\xa9\x3c\x32\x89\xc4\xa0\x8a\x6e\x80\x6b\xdc\x25\x30\xc8\x73\x4a\x83\x8b\x91\x71\xeb\xc3\x8e\xb3\x60\xfc\x8a\x8a\x96\x09\x19\x52\x30\x7e\x52\xcc\xed\x61\x77\x59\x0f\x85\xe8\x59\xa2\xac\x0b\xc6\xdc\x62\x5a\xed\x02\x07\x60\xc1\xc2\x86\x1b\x5e\xcd\x15\x9e\x42\x2a\x37\x59\x12\x8d\x63\xb0\x9d\xe7\xbc\x36\xd6\xc1\xee\x8a\x09\x59\x13\x82\x26\xc1\x8b\xf0\x33\x72\x0f\x27\x9e\xd5\x23\xb1\x82\x2b\x80\x16\x41\x6f\xc2\xc2\x90\x2d\x81\x8f\xda\x49\x47\x03\xfb\x24\x81\xdd\x6d\x55\x94\x77\xbe\x9e\xeb\x54\x11\x29\x9a\x19\x89\x02\xab\x9b\x7c\x23\xde\xdf\x16\xdd\x66\x9e\x7c\x87\x2b\x97\xa5\x5a\x92\xb5\xa2\xd9\x55\x8d\xed\x82\x8d\x0f\xd2\xe9\x56\x8d\x3f\x5c\xb1\x21\xf4\x24\xf6\x4e\xa0\x26\x67\x42\x8c\x05\x92\xaf\x70\xca\x65\xd6\x50\xaa\x11\x39\xf3\x24\xbe\x37\x4a\x47\x85\x96\x45\x93\xa6\xd7\xc8\x8c\x2d\x81\xc5\xab\xfd\xc4\xca\x50\xba\x44\xa0\x4a\xa2\x57\xbc\xca\xad\x1e\x20\x81\xdc\x4d\xd6\x03\x2b\x87\xa9\x3b\xb9\x5e\x37\xe3\x67\x8b\x71\x0a\x47\xb6\xd9\x68\xc4\x03\x76\x0f\xbd\xc6\x04\x5e\x62\x3b\x7b\x6e\x4e\xb3\x13\x28\x40\x54\xdc\x5d\x5c\x51\x98\x62\x94\xc5\x1f\x44\xfa\x00\x75\xcf\x44\x1b\x80\xd8\x82\xf1\x36\xa8\x15\x4e\xc3\x4b\x16\x87\x40\x2e\xf9\x98\xa7\x73\x27\x5f\x80\xea\x16\x8c\x83\xae\x07\xcd\x88\xe0\x51\x86\x2c\x0a\x4f\x6b\xfd\x08\xc9\x38\x3d\x0f\xb0\xe5\x2b\x54\xc5\x08\x87\x86\xfc\x39\x15\x4d\x2d\xe8\x03\x25\x76\xf2\x55\x97\x69\x8d\xb4\x38\xea\x3e\x91\x39\xac\xad\x63\x69\x2b\x25\x07\xb2\x10\x5c\xb1\xca\x9d\x4b\xef\x76\x86\x63\x03\xcd\xc7\xb2\x45\xc6\x1b\x22\x0a\x4b\xc1\xa2\xb0\x54\x89\xa0\x36\xe7\xa4\xca\x1e\x08\x23\x8a\x67\xeb\x15\x71\x9d\x6c\x19\x7a\x77\x23\xaf\xdd\xd4\x62\x93\xde\x1b\xe2\x56\x6c\x58\x77\x2b\x94\x86\xb6\xf7\xc0\x91\xdc\xb8\xa1\x5e\x2a\xbc\x09\x61\x3c\xbf\x05\x5c\x6e\xb7\x81\xba\xc3\xe0\x52\xa9\x00\xa5\x26\xa7\x71\x86\x98\xcc\xb3\x30\xcf\x46\x9f\xc9\x11\x79\x50\x25\x25\x15\x89\x80\x7d\x93\xd0\xd4\xc4\xf2\xa9\xcc\x15\xa4\x12\x9a\x2b\x77\x62\x2b\x23\x13\x65\x40\x3d\xd1\xe2\xf7\xd5\x08\x44\x44\x47\x4b\xe4\xe7\xd6\x05\x97\x53\xd1\x38\xce\x09\xb7\x56\x24\xbe\xc4\xbc\xed\xdc\x8e\x2a\x66\x5a\x43\xb0\xbc\xcb\x43\x70\x7a\x62\xc8\xf3\xb9\x66\xd2\x78\x6e\xdc\x01\x33\x95\x3b\x7c\x5c\xdd\x6e\x88\x87\xeb\x25\x26\x5d\x2c\x37\xc9\x57\x92\x0d\x59\x47\xdf\x78\x02\xc3\xa6\xbe\x6d\xbe\x83\x75\xa3\xa5\x25\x71\xa2\xd9\x52\x35\x33\xf2\x03\x72\x84\x77\xb3\x5c\x71\x5b\x33\xd9\xa8\xa6\xa1\x11\x2a\x7a\x05\xcb\x04\x83\x0a\x87\x8e\x5d\xe5\x76\x1c\xad\x7b\xa2\xb1\x04\xc7\xe8\x71\xa6\xed\xb0\x89\x5c\x21\x33\xa3\x60\x64\x99\xd4\xaa\xe8\x36\xba\xef\x12\x8a\xe0\xd6\xa6\xe7\xe0\x51\x03\x1f\xd3\x60\xcd\x85\xbc\xc6\xa5\x9f\xdb\x99\x88\xb2\xeb\xbc\x62\x13\x6f\x37\x8d\x39\x59\x2c\x6e\x7e\x65\x8b\x73\xcb\xea\x8b\xf6\x4e\x40\x57\x41\x56\xd0\x98\x9e\x28\x33\x3d\x39\xb6\xf7\x2d\x14\xe7\xd9\x15\xe9\x82\xa7\xbb\x71\xdd\xb2\x69\x89\xe9\x6c\xb1\xd3\xf3\xb0\x74\x88\xbd\x1e\xdb\x31\x90\xdc\x4d\x62\x0b\xb1\x83\x49\x90\x45\x89\x15\x64\x1a\x6e\x01\x97\xdb\xed\xac\xef\x30\xb8\xa4\x82\x0a\xdd\x05\x6f\xee\x00\x33\xab\x6a\x0e\x6b\x70\x12\x2d\xd5\x9d\x8c\x3e\xb7\x2e\xa6\x63\x7a\xce\x9a\xa5\x09\xd4\xda\x71\x85\xec\x96\x1a\x99\x83\x23\x81\x64\x3b\xa1\x60\x64\x95\xdc\xed\x0b\xc9\x7b\xa9\x52\x8c\x13\xfb\xd1\xe0\xb1\x3b\xa2\x4c\xe4\xe3\x5c\xf7\xaa\xf3\x15\x04\x9b\xb1\x02\x64\xdb\x70\x35\x99\x02\xf6\x56\xec\xce\x2c\x28\x38\x38\x93\x82\x91\xfd\x30\x28\xa0\xe6\xa8\xaa\xbb\x86\x7b\xa5\xbe\xa6\x2b\x94\xb4\x99\x62\x9b\xc6\x5e\x7d\x39\x57\x96\x3a\xca\x9a\x48\xb4\x1a\xe1\x67\x5b\x18\x98\x61\x69\x1c\x65\x11\x28\x68\x03\x47\x01\xb9\x74\x57\x70\x08\x17\x9f\x20\xcc\xa8\x1d\x62\x93\xdb\x02\xc5\xc9\xd1\xea\x25\x42\x03\xce\x03\xe1\x7e\x6c\xb6\x7b\x62\x02\xa3\x2d\x71\x6f\x5a\x70\x97\x4c\x3b\x50\xd9\xb7\x24\xa6\x5b\x74\x33\xc6\xe8\x08\xb7\x7c\x22\x53\x56\x9b\x32\x90\x3c\x0e\x0d\x72\x67\xfc\x60\x94\xd9\xb3\x82\xd5\x53\x71\xc5\xb4\x43\x21\x5a\x64\x33\x09\xb3\x93\x46\x0a\x4e\x18\x18\x1c\x0e\xa0\xb4\xef\x00\x21\xb0\xb4\x0c\xa4\x3b\x87\x65\x89\x5b\xa1\x64\x26\x97\x70\x4b\xeb\xcc\x4b\x3d\xaa\x09\xda\xf4\xa1\x73\xd8\x03\xd5\x59\xda\x58\xf6\xa3\xc4\x83\xe0\x68\x08\xa4\x78\x48\x5f\x05\x0b\x80\x72\x5f\xdc\x2d\x64\xa3\xdb\x65\xc3\xfd\x0d\xb2\xd1\x47\xfe\xcb\x47\xdc\xd7\x3d\xf8\xc7\xbe\xe4\x75\xdb\x9f\x7e\xba\xfe\xc5\xaf\xbb\xdf\x7d\xfe\xc3\xcf\xdd\xe5\x9b\x3e\x29\xfc\x76\x7c\xc0\x8f\xfd\x59\x7f\xc9\x0b\x3f\xf0\xa6\xa3\x4f\xba\xcb\x43\x3f\xff\xa7\x3e\xe9\xdb\xfe\xe8\x27\xdc\x13\xbf\xe3\x6e\xff\xf3\x7e\x4f\x7c\xd0\x57\xfc\xc9\xe7\xbf\xe2\x71\x9f\xf4\x6d\xcb\xef\xfe\xe8\xdd\xdf\xf9\x38\xf7\x85\x37\x1d\xfd\xee\x7f\x73\xaf\x8f\xf8\x72\xf7\xb3\x9f\xf0\x86\xf0\xaa\xbb\x3f\xf5\x23\x7f\xf9\xe9\x4f\x7f\xee\x77\x7e\xce\xc7\x3d\xed\x21\xdf\xf5\xa5\xcf\x7f\x36\x7c\xe3\x7d\xfe\xfc\x53\x6e\x3a\xfa\xd1\x4f\x7c\xca\x33\xfe\x8f\xb7\x7c\xe2\x2f\xfd\xa6\x7b\xd7\x7f\xfc\xd2\xdf\xfa\xb0\x4f\x79\xe9\xef\x3d\xe1\x0b\x1f\xfa\x3f\xbf\xe1\x91\x2f\x18\x3f\xf7\xd5\x4f\xf8\xaf\xf9\x17\x6e\x3a\xfa\x25\xff\xe1\xf5\x5f\xf7\xa6\x4f\x0e\x4f\x7c\xef\x2f\x7f\xd5\xc2\x3e\xe2\xf1\xfc\xa7\xdf\x78\x6f\xfd\xdd\x9f\xfa\x45\xdf\xbe\xde\xf5\x6d\xe0\xe9\x4f\x53\xcf\xbe\xe9\xe8\x13\xda\x87\xbc\xad\x3e\x67\x7c\xfa\x27\x7c\xff\x5d\xfe\xd5\x2b\xf5\x1f\xff\xc4\x5f\x7e\xc1\xb3\x5e\x76\xaf\x9f\x84\xee\x8f\x5f\xf7\x6d\x8f\x7c\xc0\x33\x9e\xf2\xee\x9b\x8e\xbe\xf8\x0f\x3f\xe7\x37\xde\x68\xdf\xf9\xf1\xbf\xe8\xef\xfd\xf3\x5f\xf6\xb8\xbf\x7e\xe6\x6f\xff\x93\xf4\xd0\xbf\xac\x0f\xff\xf8\xbf\xf8\x8b\xd7\x3f\xf9\x59\x0f\x7f\x37\xbb\xe9\xe8\x67\x3d\xe2\x51\x2f\xfb\xf4\x2f\x7c\xda\x73\x7e\xe0\x2e\x77\xfb\x96\x07\xfe\xdc\x2b\x8f\xa7\xfd\xe8\xd3\x5e\xf5\xf8\x2f\xff\xaa\x57\xfe\xe6\x13\x9f\xf0\xd4\x6f\xfe\xa3\xcf\xf9\xed\xf7\x93\x8d\x6e\xf7\x54\xef\x30\xc2\xbb\x11\x4e\x0f\xc2\x18\x80\x00\xb8\x84\x0c\xf4\x38\x3a\x01\xfd\x0c\xae\xae\xc0\x36\x0f\x7d\x2f\xae\x77\xa3\x76\x79\xa2\xaa\x57\x73\xc5\xf6\xd9\xc6\xa0\x3a\x29\x49\xcd\xc2\xbc\x60\x78\x15\xd1\x98\x44\x2d\x47\xba\xfb\x28\xc3\xb9\x68\x0d\x33\x06\x19\xb5\x65\x48\x00\x0e\x77\x09\xcd\x07\xd9\x4c\xe4\x46\x62\x77\x0b\x16\x31\xd8\x54\x56\x57\x44\xa5\xd6\xb2\xd1\xab\x31\xa9\xb4\x78\x28\xc0\x8f\x4d\xe6\x95\x91\x78\x09\x33\x1a\xf5\xea\x79\xcb\x15\xad\x5c\xf8\x82\xa5\xed\x67\xd8\x93\x6c\x55\x6c\x27\xe9\x67\x88\xa6\xa2\x95\xe5\xc3\xc6\xc5\x81\x41\x82\xb9\xc2\x02\x85\x59\x62\xd7\xb4\xd2\x30\xfd\x2a\x05\xaf\xdc\xc9\x3e\x57\xb6\x02\xd3\x8a\xf0\xbb\x3a\x28\xdc\xc8\x98\xac\xa9\xb8\xc4\xcd\xaa\x44\xaf\x20\x72\xd2\xa8\x7c\xda\x64\x20\x55\x3a\x19\xcc\xec\xca\xa8\x8d\x5a\x4a\x9c\x0c\xa5\xae\x5d\x11\x39\xe0\x11\x62\x40\x5b\x48\xee\x58\xed\x35\xc9\xad\xb5\x79\xcb\x9a\xd7\x86\x97\xcd\xeb\xb3\x3b\x0e\x39\x54\x0a\xf3\xb4\x74\xa6\x4f\x25\xcc\x38\xf6\xe5\xa0\xdd\xa0\x03\x6b\xe0\x3c\xbd\xc2\xb1\x81\xea\x2d\x45\xc3\xf1\x04\xae\x57\x43\x8f\x35\xee\x62\xf8\x59\xeb\x66\x10\x41\x9d\x21\xb2\x2e\x20\x33\x99\x0c\xd6\x7d\xdd\xab\x61\xb7\x9a\x8f\xdc\x0e\x87\xef\x30\xb8\x08\x32\xad\x60\x2d\xe4\x8a\x48\x96\xa7\x3c\xe2\x9e\x0f\xbc\x53\x6d\x65\x9b\xbe\x4a\xc1\x56\x25\x55\x50\xa7\x38\xe7\xa4\x15\x8e\x74\xc5\xdc\x12\xf7\xc4\x0f\xae\xf5\xd6\x93\xc9\x25\x32\x7b\x2c\xf2\x6c\xe7\xe0\x12\x93\x9c\x9a\xae\x46\xae\x7a\xa5\xb1\x1b\x78\x48\x26\x50\xbb\xc4\x18\x33\xb8\x0c\x0e\x5e\xb6\xc4\x60\x77\x5b\x24\x8b\x59\xce\x4e\x83\x48\x7d\x93\x60\x70\x86\x82\x9f\xcb\x89\x97\x88\x62\xa1\x4b\xca\xf0\x12\xef\x5f\x9b\x0e\x25\x00\xe2\x7d\x42\x3e\xca\x7e\x24\xc7\xac\x58\x60\xd8\x77\x69\x92\x72\xc7\xa9\xe2\x38\x13\x63\x7b\xcd\x95\x07\x1b\xc5\xbc\xc2\xa4\x2b\x26\x12\x1b\x03\x27\x2d\x6b\x1f\x1c\xea\x1d\x51\x76\xae\x46\x29\xc4\x2c\x5f\xa3\x14\x78\xb5\xd9\x65\x75\xd6\x14\x06\xad\x90\xf9\x4b\x4c\x69\xfa\xee\x26\xf1\x7d\x69\x7b\x1d\x76\x86\x75\x1d\x33\x94\x63\x14\x5e\xe9\xc6\x64\x3d\x4c\x45\x72\x42\xb1\x15\x94\x41\x29\x61\xcf\x57\x5c\x7d\x32\x8d\x71\x44\x1b\xf1\x56\x07\x05\x1c\x1a\x77\x56\x26\x7c\xcf\x7e\x04\x6c\x0a\xc3\x9e\xe1\x9d\x57\xc4\x57\x0d\x44\x98\x2a\x5e\x61\x1e\xcb\x22\x55\x7e\x6f\xd2\x9c\x04\x30\x8e\xc3\xee\xb5\x82\x2d\xab\x23\xca\x6d\x90\xc2\xec\xae\x1b\xf7\xd6\x2c\x7a\x5a\x68\xce\x45\x1e\xa0\xdf\x02\x2e\xb7\xab\xdc\xee\x30\xb8\x58\xc8\xb5\x15\x5c\x95\xd5\xc4\xe2\x4f\xe9\xea\x62\xa6\x74\xe7\xa6\xc0\x99\x71\xa3\x2e\x23\x42\x8e\x2d\xec\x59\x55\x3e\x3c\x98\xf6\x8a\x01\xc7\x3c\x12\x10\xb0\x20\x69\x3a\xa9\x8c\x70\x60\x57\xeb\xb0\x2b\x91\xa9\x7e\xd8\x32\x0b\x94\xba\xac\x39\xaa\x61\xd3\x22\x0c\x25\x97\xac\xec\x70\x39\xb0\x4f\x6b\xf0\x40\x7b\xcb\x8d\x43\x9e\x62\x2d\x66\x3a\x51\x6d\x71\xc7\x80\x51\xbe\x37\x4e\xa6\x0d\xd0\xe2\x4a\x5c\x48\x57\x0c\x01\x11\xb2\x91\x43\x3d\x64\x60\x79\x39\x43\x2f\x11\x72\x5f\x4e\xef\xd7\x25\x4a\xb2\x28\x4f\xa8\x8f\x4a\x6f\x4c\x0e\x4d\xbd\x0f\x9a\x5e\x21\x18\x3d\x85\xc0\xd5\xca\x62\xcb\xc0\x5b\x25\x46\x39\xbd\xab\x3d\xae\x95\x8e\xa9\xfc\x76\x82\x82\xd6\x71\xa2\xd3\x6b\xd4\xc9\xda\xe5\x04\x57\xe4\x2d\x95\x0e\xf9\xb1\x71\xc6\xd4\xd0\x0c\x6f\x28\x1a\xd2\xbc\x92\x58\x0c\xa2\xf5\x06\x11\x45\x8e\x37\xdf\x4b\xb0\xa3\x9e\x60\x3b\xb2\xbb\x62\xe4\x34\xf6\x63\xd7\x69\xf2\x4e\xe2\x0a\xe5\x5e\x96\x80\xa8\x6c\xab\xee\x30\xba\xa4\x5c\x05\xeb\x58\x25\x09\x02\x2a\x51\xd2\x0c\x6e\xbd\x42\x48\xcc\x56\x9a\x08\xc7\xa8\x76\xb1\x79\x3a\x33\x1e\xd4\x7b\xb5\xa9\x81\xf0\x5e\x76\xae\x40\xeb\xd9\x24\x1f\x95\xa9\x8b\x5a\x99\x11\x18\xdc\x9a\x74\x74\xbb\x5e\xef\x4e\x0f\xbe\xac\xc7\xd3\x52\xbf\x35\xa7\x24\x2e\xdc\x27\xb9\x1b\x42\x6b\x6b\x84\x80\xb5\x2b\x09\xdc\xb2\x4f\xbc\x09\x89\xeb\x00\x30\x15\x7e\xc5\x9a\xca\xf2\x56\x76\x37\x29\x16\xb6\x63\xc5\x36\xd5\x0e\x76\x60\x0f\x40\x68\x12\x31\x8b\x16\xca\x0f\x43\x66\x50\x38\x2e\xbd\x50\x52\x2f\x09\x23\xe9\x46\xb9\x35\x27\x3f\xd8\x2c\x89\xa8\x7c\x98\xd9\x46\x39\x0b\x74\x2e\x92\xcc\x58\x0d\xce\xca\x34\x4f\xcf\x85\xe5\x62\x4f\x47\xb9\x02\x68\x17\x9e\x6d\x34\x05\x31\x79\xa3\x5d\x75\x27\x11\x64\x2e\xa0\x93\x2c\x12\xe4\x6c\xcf\xa8\xeb\x32\x5b\xf2\x6b\x6d\x74\x99\x46\x4d\x73\x85\x90\x18\xe6\xce\x7a\xb2\x5e\xa7\xa3\xb6\xa5\x2e\x9b\x3f\x7b\x0f\x27\x24\xfc\xac\xd0\xb6\x23\x34\x79\xee\xd8\xe9\xc5\x90\x75\xd7\xe8\x44\xe9\x0a\x26\xa3\xd3\xdb\x42\x60\xb6\x12\x5b\xba\xaf\x79\xe1\xad\x8d\xb4\x2e\x75\xe9\xb0\xf2\x84\xbd\x29\x72\x95\x9c\x5a\x89\x73\xca\x60\x17\xcb\x25\x4a\x10\x25\x6f\x94\x6f\x33\xb9\x35\xb1\x7d\xe1\x0c\x6e\x65\xc9\xc7\x28\x90\x29\x3e\xaa\xd7\x51\x09\x68\x4c\xa1\x72\x68\x4b\xa1\xd4\x2e\x5d\x51\x3f\x29\x0a\xd5\x6e\xd0\xd9\xb6\x93\x2c\x43\xb1\xd3\x69\xaf\x9b\x91\x45\x8a\x46\xc0\xb4\xa9\x62\xdf\xc2\x02\x22\x16\x4a\x33\x26\xc4\x4d\x7b\x8e\xf7\x81\xcb\xed\xa6\x43\x77\x9a\x26\x2d\x56\xa6\xd5\xd0\x8b\xc1\xeb\xc9\x2a\xc1\x67\x82\xab\x0a\x00\xb2\xc5\xec\xa5\xd6\x83\x31\x39\xf7\x0e\xb7\xe3\x38\x85\x57\xab\xcb\x17\x2c\x88\xa8\x56\x3d\x08\x70\x62\x8c\xbd\x92\x3a\x52\xb9\xd0\x13\xe6\x2d\x15\xe1\x76\xb3\xb9\xc5\x62\x04\xe0\xf0\xcd\x1f\xb6\xaf\xe1\xd8\x54\xba\xa2\x21\xc1\x87\xe4\x7d\x53\x47\x87\xd3\xd3\x8c\x9c\x01\x87\x3b\x9a\xc8\x61\xf5\x51\xda\x54\xe0\x96\xe7\xca\xd7\x95\xe6\x74\x56\x72\x76\xe1\xaf\x88\x5e\x2d\x8c\x30\x45\xe9\x81\x8f\x31\xdc\x80\xa5\xc5\x75\xb5\x06\x51\x52\xa2\xc0\x7c\x1c\x30\x57\xcc\xc7\x3e\xfc\x6a\xc5\xec\x51\x86\x2b\xf8\x00\x74\x56\x28\x6f\x14\x2a\xc0\x81\x15\x56\x7c\xe2\xcd\xe3\xb4\xa9\x4e\x85\xaa\xa5\x47\x5b\x94\xc3\xcd\x40\x43\xc8\x7a\x9c\x4b\x8b\xe4\x8a\x8c\x6b\x76\x80\xfd\xa4\xc0\x4f\xbb\xea\xbe\x96\x03\x4c\xa6\x4d\x8a\x5c\x2a\x12\xab\xf5\xc9\xaf\xeb\xa9\x12\x6e\x3c\x14\x65\x3d\x76\x7b\x62\x57\xd8\xc1\x64\x9d\x20\x02\x85\x2c\x01\x77\x0d\xe3\x02\x2d\xa3\x67\x69\x78\x3f\xf6\x40\x59\xd9\x86\x90\x7b\x46\x81\x49\x69\x67\x8b\xae\xe5\x71\xc5\x2c\x6e\x5f\x05\x4a\x6b\xb3\x70\xdb\x16\x65\xc8\x46\x8a\x82\x16\x03\xcb\xf2\x42\xaa\xa7\x73\x0e\x63\xb6\x35\x34\x4e\x0d\x3b\x34\x64\x2d\xdd\x6a\x9b\x76\xbb\x79\xf2\x1d\x06\x97\xc3\xe7\x0e\xe9\x0c\x70\x1b\xb3\xba\x95\x9c\x73\x77\xcc\xed\xca\x69\x20\x75\x0b\x64\x11\x51\xaf\xca\x1d\xd2\x2b\x46\x59\xb1\x98\x5f\x11\xc0\x71\xce\xc1\xbc\x91\x90\x07\xb7\x6b\x98\x87\xa4\xd5\x72\x8e\xbd\x0a\xf6\xf4\x54\xdb\x15\x1e\x74\xc3\x27\x40\xa8\xa8\xd3\x1d\x75\xb0\x2b\x68\xd2\x74\xd9\xbb\x32\x94\xd2\x16\x96\x0e\x57\xd1\xe1\x8e\x35\x3e\xf8\x90\x63\x0d\x98\x4a\x5d\x30\x1b\xee\x58\xb5\xca\x69\x98\x9c\xd4\xb8\x82\x60\xb3\x6d\x1e\x66\xb8\x12\x93\xab\xcd\x8b\x13\x36\x37\xe2\xea\xc6\x95\xf7\xd1\x60\xd9\xb2\x03\x27\x35\x07\x2e\x90\x13\x8f\x96\x51\x2f\xc9\x25\xcc\xab\x5f\x17\x09\xb0\xb0\x66\x72\x33\xd3\x3c\x5c\x1a\xe6\xb4\x6c\xc6\x4d\x2c\x37\x9a\xe6\xb5\x1e\x8a\xad\x7c\x95\x98\xf5\x66\xb6\x7c\x85\xe1\x46\x00\x4a\xc5\x79\x02\x66\x9a\x6a\x39\xcf\x0d\x1a\x56\xad\x3f\x9b\x4f\x5b\x18\x83\x74\xa6\x98\x52\x36\xe0\x06\x5a\x4b\x4c\x76\x73\x45\x73\x76\x10\xe9\xb4\xe8\x1a\x83\x1b\xd7\x0b\x9f\x86\x22\x6b\xb7\xb3\x30\xac\xf0\x2a\x01\xdb\xd2\x71\x2c\x21\x49\x64\x48\x33\x5a\x99\xe3\x92\xa6\x3d\xc1\x4e\x37\xd6\x0d\x01\x21\x59\x90\x06\x1d\x6a\x61\x74\xd5\x2c\x36\xa2\x07\x82\x42\x09\xba\xe3\xd2\xfd\x06\xfb\x8c\xd5\x24\x93\x6f\x01\x97\xdb\x6d\xa0\xee\x30\xb8\x88\xb1\x52\x1a\x45\xa8\xd1\x2e\x61\x55\xe2\x98\xf9\x70\x72\x09\x53\x85\x89\xd7\x12\x21\x59\x13\x28\x25\xf7\x4d\x70\xbe\x28\x4d\xec\x15\x1c\x42\x44\x68\xa1\x08\x9a\x1a\xe5\x50\x92\xae\x74\x73\x65\x51\xb1\xc2\xd2\xd0\x6e\x77\xd0\x4a\x01\x8e\x1a\xb5\x43\x10\x51\xb2\x84\x94\x2b\xc4\xbf\x54\x09\xef\x9b\xe3\x2a\x05\xd4\xf7\x41\x52\x3f\x74\xe5\x75\x80\x73\xb4\x58\xb7\x0d\xac\x67\xd5\x7b\x40\x69\xe1\x5d\x2f\xa6\x33\x76\x85\x83\xb2\x5a\x76\x88\xa4\x6e\x3d\x89\x3c\xe7\x86\x4e\x88\x46\x2c\x84\x30\xaf\x8f\x62\x8f\x28\x1c\x80\x52\x0b\x23\xb2\x29\x20\x17\x87\xc6\x15\x35\xc3\x66\x64\x90\xa3\x77\x97\x33\x3c\xb6\x49\xc8\x9e\xec\x38\x4b\xdd\x1c\xa7\x14\xb7\x2c\x9b\x42\x1d\x6c\x20\x35\x50\x36\x29\x0e\x7b\x09\xab\xb3\x04\x99\x65\x3b\xa5\x4d\xd4\x1d\x9c\xa5\x89\x91\x76\xc9\x7b\x39\xf8\x68\x6b\x98\xdc\x66\x66\x0e\xec\x6a\xf1\xb2\x88\x63\x75\xe0\x0a\xfa\x57\xcf\x10\x98\xc0\x4e\xa5\xe4\xb1\x09\xd3\xe7\x88\xd1\xeb\xda\x42\xf1\x68\xcf\xd1\x75\x26\xdc\x18\xc6\x45\x58\x56\xb3\x98\xc6\x2f\x69\x11\x55\x5e\x37\x4a\xb0\xdb\xc6\x6e\xf3\x69\xa6\xf4\xd8\x33\x42\x28\xc8\x7a\x2f\x0b\x5b\xc6\x9c\xac\xd8\x59\x76\xba\x0f\x9c\x18\x84\xec\x56\x26\xe3\xed\x76\xd6\x77\x18\x5c\x5a\x25\x29\x72\x01\x85\x17\x1b\xf6\xc1\xad\xbd\xd6\xc4\xe3\xc8\xb8\x36\xec\x8e\x8d\x2a\x2b\x9b\x62\xdd\x46\x25\xbb\x68\x13\x5c\xf1\x41\xd1\x3a\x6a\xa3\x01\x8b\x9a\x69\x96\x30\x88\xc9\x17\x33\x2c\xd1\xac\x94\x38\xfb\x14\x53\x38\x08\xcc\x8c\xcb\x8a\x29\x4b\x70\x22\x71\xc5\xab\x9c\x54\xf7\x7a\x0d\x5d\x22\xd1\xd8\xc1\xf5\xd4\xf0\xc6\x4b\x94\xf2\xd2\x00\x21\x21\x58\xc6\x37\x27\xfb\x12\xba\x84\x6d\x2c\xdb\x35\xa2\xa6\x73\x8c\x69\x7d\xf5\x0d\x75\x18\xb6\xa5\xda\x73\x95\x64\x29\x63\x5b\x61\xd8\x7d\x8d\x16\xb6\xcd\x30\xc8\xba\xe1\xfe\x3c\x38\xf6\xec\x0a\xb2\x91\x93\x76\x6a\xd6\x7d\xee\x5c\x1f\x1b\x70\x2b\x92\xa8\xec\x9b\x20\xf9\x20\xd4\x0d\x1f\x57\xb6\x8d\x61\xcb\x09\x70\x94\xb6\x93\x91\x2e\x10\xbb\xd1\x43\x0b\x0a\x28\x53\x2e\x15\xb6\x67\xe9\xac\x64\x61\x20\xa5\x8c\x3b\xac\x30\x96\x75\x79\x76\xa0\x16\x86\xed\x72\x98\x8a\x57\x74\x85\x71\x02\xcb\x87\x73\x6e\xa4\xa0\x8e\x22\xeb\xd8\x5a\x1f\x26\x50\x69\x06\x77\x87\xe7\xcb\x49\x78\x3f\xfc\x50\x4a\xf2\x84\x23\xb1\xc2\x6d\xfe\x8a\x29\x58\x98\xd1\x8e\xa5\x27\xe7\x15\x38\xf2\x96\x02\x29\x6c\x51\xc7\xd8\x16\x1d\xf8\x8a\x06\xd5\x3a\x01\xb2\xd5\x9d\x9d\x7e\x1c\x5d\x10\xae\x6f\x21\x1b\x7d\xc2\x5d\x9e\xff\xb2\xfb\xfe\xc6\x67\xbe\xe7\xc9\x7f\xff\xef\x7e\xc5\xab\xf9\xb7\xca\x0f\x7c\xd3\xc3\x9e\xfc\xe4\xbf\x07\xbe\xf6\x05\xef\x7c\xcb\x73\xdf\x7c\x98\xc7\xfe\x0d\xb2\xd1\x7b\x9e\xff\xe0\xf9\xc4\x77\x7d\xe3\xeb\xef\xf5\x9c\xd7\xbc\xf0\xef\xdc\xe5\x5f\x7e\xe2\x8f\xbe\xe8\xc1\x0f\x79\xcc\x2b\x1f\xfa\x83\x4f\x7a\xf7\xf3\x9e\xfb\xac\xc7\x3c\xe2\x5f\xde\x74\xf4\x5d\x9f\xf6\xc0\x4f\x7e\xf4\x97\xbd\xe1\xb3\xc6\xef\xfe\xf0\x0f\x7c\xd4\xcb\x3e\xe7\x63\xee\xf2\x33\x7f\xf2\xc0\xff\x75\xcf\x57\x7d\xd9\x5f\x7e\xf6\x73\xbe\x79\x7f\xd0\xbd\x1f\x74\xd3\xd1\x8f\x79\xe2\x5f\x7f\xe5\xab\x9f\xff\x0b\x4f\x79\xd0\x47\xef\x9f\xfb\xbd\xff\xf4\x19\x0f\xfc\xd9\xe7\x3e\xe3\x03\xef\xf6\x8e\xbf\xfa\x4d\xfb\xb6\xaf\xf8\xcc\x7b\xfe\xfd\x57\xbf\xe6\xa6\xa3\x1f\xf4\xf8\x67\xa0\xff\xf2\x75\x3f\xf5\xf3\x3f\xa5\xde\xf1\x8c\x5f\x7a\x0d\x7c\xe4\x3d\x1f\xf2\xf5\xbf\xf8\x5f\x3e\xf7\xdd\x1f\xfc\x86\x87\xdc\xe5\xfb\xdf\xf1\xc8\x6f\xfc\xee\x9b\x8e\xfe\xed\x37\x7c\xef\x2b\xbe\xfb\x39\x1f\xf2\xc8\xdf\xf9\xaf\x1f\xf9\x9f\xb2\xfc\x5b\x1f\xf3\xc7\x2f\xff\xdb\xe5\xe7\xee\xfe\x96\xef\xfa\xd5\xe7\x7d\xf5\x87\x3d\x6b\xf9\xbc\xa7\xdd\x74\xf4\xc3\xd3\x8b\x7e\xe1\x75\x3f\xf7\xeb\x1f\xf4\xc7\x2f\x7d\xc9\xa7\x48\xf0\xd0\x27\xfd\xfb\xa7\xfd\xfb\x4f\x7b\xe1\x8f\x3f\xf1\xdf\x3d\xbb\xfd\xf9\x4b\xff\x70\x6f\xef\xb9\xe9\xe8\xaf\xfd\x1b\xb7\xb9\x8f\x7a\xfc\x77\xdc\xef\xd9\x3f\xfc\xf6\xb7\xfc\xe5\xab\x7e\xec\x05\xef\xfe\xac\x1f\xf9\xbb\xbf\xfd\x43\x3f\xf0\x8f\xef\xf2\xd9\xbf\xfa\x86\xd7\xff\xe0\xcd\x26\x48\x9f\xfb\xd8\x7b\x3c\xe4\xab\x7f\xff\x45\xff\xef\xbf\x79\xcf\x37\xfe\x88\x7b\xf0\xfa\x33\xbf\xfb\xe8\x5f\x01\x6f\x7c\xf9\xbf\x7a\x3a\xf9\xd4\xb7\x3c\x1a\xbd\xf6\xf8\xd0\xf7\x93\x8d\x6e\xf7\x54\xef\x30\xc2\xe7\xc3\x55\x3c\x99\x20\x87\x0e\x4d\xee\xa7\x11\x07\xad\xae\x53\xee\xe1\x4e\x19\x2e\x2b\xa9\x4b\x3d\x97\x2a\xc7\x92\x97\xad\x64\xe9\xae\xd0\x74\x9d\x74\x6b\xa7\xaa\x83\x49\x9d\x11\x40\x6b\x1d\xaa\xae\xc7\x2a\x8a\x90\x03\xd6\x3d\x8e\x3a\x78\xae\x00\x29\x33\x8b\x94\x3a\xa0\x4b\x38\xc9\x4d\xe3\x2e\x1b\xe0\x82\x16\x1a\xeb\x39\x75\xe4\x8e\x9c\xc1\x32\xe2\x46\x85\x4a\xae\xac\x1a\xbb\x9f\xb0\x54\x91\xb7\x72\x92\xad\x5c\xe1\xaf\xe4\x76\x72\x4c\xd0\x80\x88\x86\x35\x7c\xec\x5a\x83\x81\xe5\x19\xf7\x74\x1e\x4c\x77\x53\xf1\x88\x2b\x64\x43\x0d\x10\x24\x64\x67\xbc\x22\x63\x88\xd6\x55\xd4\x62\xbb\xe2\xdc\x17\x59\x9c\x03\x1a\x08\x71\x14\x4c\xe2\x19\x5b\x89\x71\xf5\x7b\x24\xa4\xae\x3d\x83\xde\x3d\x59\xeb\xb8\x02\xe1\xfb\xb2\x40\x25\x17\x71\x9c\x27\x07\x72\x0f\x61\x3b\x2c\x8a\x75\x00\xc2\x73\x10\x86\x07\x90\x75\x12\xeb\x0e\xb0\xf7\x27\x54\x8b\xcb\x17\x4c\x4e\x58\x16\x0a\x68\xbd\xe6\xd6\x4c\xe3\x4a\x8f\xd4\xfb\x8d\x37\x12\x76\xa9\xd2\xd1\xf7\x5d\x72\xb3\x90\xc3\xc7\x59\xd9\x79\x28\xd7\x37\x78\xc5\xfc\xa6\x99\x0c\x10\x3c\x4f\x66\xe8\x29\x52\xdc\x1d\xa7\xfb\x4c\x15\xa3\x31\x49\x6b\x60\x93\xfb\x39\x97\x6d\x19\x98\xb6\x03\xe1\x41\x81\xbd\x95\xab\x7e\x3b\x1c\xbe\xd3\xfe\x00\xdd\x5b\xee\xcb\xc1\x85\x53\x03\xd3\xa4\x10\xb4\xc5\x62\x19\x6d\x9c\x19\xaa\x55\x2c\x47\x3b\xd9\x69\x8f\x73\xe7\x29\xa2\x05\xd9\x2b\x3e\xa8\x1d\x40\x60\x6a\x5f\x56\x1e\x9a\x16\xe0\x2c\xb5\x25\x11\x97\x02\xf6\x42\xc0\x0c\x68\x0a\xad\x77\x14\x7a\x50\x7a\x0c\x5a\x09\x9d\x57\x28\xf3\x8f\x52\x2b\x13\x81\x4e\xbb\x86\xd1\x2a\xdb\xb9\xa4\xb1\x9c\x20\x29\xb1\x59\xd1\xb5\x6c\x12\x56\xd8\xfb\xb6\xb7\x02\x71\xdf\x6c\xba\x82\xb7\x9f\x84\x44\xd9\xf0\x56\xe2\xe8\xcd\x22\x0b\x71\xd7\x9c\xe9\xe3\xa8\x31\x8d\x31\xc5\x19\x10\x32\x2e\x87\x90\xc3\x94\xc6\x8e\x8d\x5d\x51\xac\xb4\xf3\xc0\xbe\xa1\xd5\x14\xa7\x3b\x34\xc4\xec\x1b\x8b\x74\x1f\x6b\x75\xdb\x41\x8b\x70\xad\xc1\x0a\x04\x4f\x48\x49\xa5\x30\x3c\xd3\x15\x72\xe6\x3e\xf0\x2a\x4e\xed\x42\x8d\xcb\xce\x6d\x51\x45\xc6\x1d\xad\x1b\x8e\x6c\x1b\x99\x13\x95\x6b\xdf\x45\x96\xbc\x4f\xb0\x1c\xfe\x2c\xe6\x8a\x3d\x47\xb0\x5d\x11\xbf\xf3\x1c\x9c\xec\xfb\x12\x0b\xd7\x96\x07\x63\xd0\x8a\xa7\x34\x8d\x31\x54\x8e\x65\x13\x8c\xc5\x99\x8c\xd8\x4d\x48\x57\x18\xce\xd3\x4a\x57\x44\x0d\x59\xc9\xc0\xb8\xc1\x63\xb5\x33\xa4\x38\xc3\x91\x08\x1a\xaa\x9b\x8d\xae\xab\xd7\xdb\x8a\x92\x3d\xce\xd3\x6c\xe7\x4d\x71\xe7\xef\x03\x97\xdb\x55\x6e\x77\x18\x5c\x98\x9e\x14\x13\xe4\xd2\xee\x5c\x44\x56\xe5\x6d\xf2\xc5\xef\x3d\x2a\x68\x5d\xd6\x61\xcb\x4b\xe8\x02\x25\x2b\xa1\xd8\x6b\xcb\x9a\x5f\xa1\xe9\x62\xbe\x6c\x09\x02\xc1\x60\x5b\x52\xb1\xd1\xb3\x44\xce\x32\xbd\xd8\x1b\xd6\xa7\x6c\x74\x36\xe0\x53\xc4\xa4\x91\xc3\x8a\xa3\x30\x7f\x05\x4d\x1a\xee\xc1\xc6\xa6\x81\x5a\x77\xab\x10\x83\xb0\x1c\x8d\x91\xb6\x10\xeb\xe8\xde\x4a\x6e\x79\x4e\x27\x8a\x59\x38\xd9\xf5\x4e\xd1\xe9\xae\x08\x9d\x38\x77\x40\xc2\x5c\xf1\x92\x95\xb4\x0c\x20\xbb\xa8\x34\x02\xc7\xd4\xce\xe6\x7b\x4f\x67\x24\x42\x81\x13\x6f\x87\xc9\xcb\x84\xb8\xa5\x2b\x66\xb8\x8c\xd0\x2e\xb3\xdf\x30\xc9\x0d\xe7\xfd\x98\x42\x76\xb9\xcb\x3c\x32\x05\x0e\xf9\x92\x59\x5d\x48\x2b\x20\xf0\x1b\x58\xd3\xa6\xbd\x64\x71\x58\x4d\x8c\x6d\x35\x54\xc8\x63\xeb\x10\x74\x97\x2d\xcc\xa5\x71\xd1\xe0\x6e\x87\xac\x2b\x82\xac\xd5\xd9\xc5\xce\x0f\x21\xc2\x16\xec\x25\xdb\x96\xb1\x8f\xa8\xb9\xe1\x21\x23\x78\x90\xe9\x79\x86\x90\x2a\xb3\x27\xcd\x74\x3e\x59\x50\x24\xba\x65\x06\x8e\x37\x92\x4f\x74\xca\x4b\xc8\x46\x51\x1c\xed\x94\xe7\x82\x60\x06\x67\x88\x6d\x19\x90\x35\x1c\x3b\x3e\x83\x81\xa3\x8a\x05\x57\x47\x17\x15\x6f\xf4\xa6\x47\x30\x56\xf2\xfd\x16\x70\xb9\x5d\xaf\x77\x87\xdb\xa2\x5d\x49\xa6\x90\x4e\x32\xf3\x50\xf6\x90\x27\xb3\x1d\x0b\x4d\x43\x03\xb3\xe6\xa3\xab\x94\xcf\x0e\xc1\xb6\xfa\x89\x16\x33\x2d\xb0\x17\xa0\x32\x13\x60\x5b\x0f\x12\xea\x1e\xb7\xbc\x78\x6a\x53\x91\x7e\x54\x8d\x0d\x9c\x86\xe8\xd8\xa9\x58\xed\xdc\x84\x29\xd3\x9b\xec\x02\xcb\x97\x2c\xcb\x56\xbf\x9d\x40\x00\xe8\x83\x25\xd4\x7a\x60\x1b\x02\x91\x07\xef\x49\xac\x3e\x0b\x7b\xb0\xca\xbb\x62\xb1\xef\xd9\x97\xbc\x19\xc4\xaf\x60\x32\x1a\xd9\xd1\x8c\x8b\xd5\xa7\x22\x2d\xec\x8a\xa6\xc6\xc4\xca\x13\x73\xfb\x29\xc9\xf0\x06\x6c\xe4\xcc\x7b\x58\xda\xff\xf6\x06\x59\x02\xbf\x82\xa0\x7c\xec\xca\x9a\x02\x90\x73\x28\x1f\x54\xf1\x6a\x21\x26\xb5\x6a\xb1\xd2\x8d\xca\x11\xcf\x9d\x3b\xb0\xd7\xb9\x71\x9f\x73\x4b\x7a\xe7\x57\xd0\xe7\x51\x29\x40\xa0\xc8\x83\x2c\xbc\x2b\x30\xe4\xec\x65\x36\x2d\x0f\x9f\xf1\xac\x4b\x83\x34\x65\xca\x63\xf3\x29\x10\xba\x1f\x1a\xcf\x2b\xe0\x7e\x65\x2c\xf3\xac\x18\xc2\x42\xe0\x28\x56\x84\xb6\xa3\xaf\x3d\x1c\x9d\xba\x25\x0f\xb1\xc7\x5d\x62\xb1\xaf\x14\x80\x46\xca\xc1\xd8\xbc\x82\xad\x72\x98\x25\xe1\x62\x66\x53\x65\x5d\xb6\x42\xf1\xea\x3c\x38\xcc\x64\xec\x54\x25\xba\xe8\x52\xf4\x10\xef\xd4\xef\x7c\x01\x36\x55\x29\xd2\x2d\xe0\x72\xbb\xe9\xd0\x9d\x0e\x80\x0d\x84\xdd\xb8\x17\x8d\xf4\xaa\xdb\x6d\x89\x12\xf9\x59\x91\xdf\xca\x5c\x4f\x1d\x55\x3c\x6b\x38\x44\x80\x2a\x0b\xb9\x01\xd0\x90\xb8\xe2\x55\xf6\x94\xfa\x52\xb5\x77\x35\x9d\xfb\x86\x4e\xd8\xc7\x59\x30\x3f\xfb\xe1\x79\xc7\x26\x2f\xdc\xa4\x05\x5a\xc5\xec\x66\xd9\xa6\x5a\xce\x57\x4c\x7e\x50\xad\x1b\xd2\x78\xe9\x72\x95\x66\xc9\xd5\xce\x63\x25\xae\x91\xd2\x14\x5a\xe2\xc1\x26\xef\x5a\xa0\x1d\xcb\x95\x1b\x30\x3b\x9f\xe9\x0a\x93\x89\x84\x8a\xd5\xab\xe9\x9c\xa1\xd3\x47\x79\x62\x5e\x6a\xc3\x83\xd8\x04\x7c\xe4\x1e\x28\x9a\x80\x3e\xcd\xd6\x4e\xa6\xed\x1c\x44\x5e\x12\xa0\x6f\x7b\x1f\x6d\xd8\xbc\x53\x44\x88\xaf\xdc\x9e\xcd\xd2\x01\xd7\xb4\xc6\x61\xc0\x74\x2b\x13\x2a\xda\x2c\x8a\x4e\x78\x5b\x26\xda\x2e\xb9\xad\x9b\x42\x67\x01\x12\x6d\x2e\xe1\x3e\x2a\xae\x74\x0d\xc3\x54\x58\x68\xf0\xfd\xa0\x33\x31\xb9\x72\xda\x57\x05\x03\x52\xfb\x42\x89\xbb\x42\x9b\x83\x91\x94\x82\xf0\xca\x63\xe5\x2a\x33\x28\x2a\xdc\x55\x3c\xe7\x09\xad\xe0\x2b\xc9\x3c\xec\x25\x6c\x46\x38\x88\xfc\x3e\x9c\x28\xfe\x0a\x39\xf3\x4c\x6b\xd0\x34\xcb\x25\xd6\x99\x76\xd7\x1b\xb0\xa4\x79\x80\xb0\x76\x7b\x53\xb5\x4c\x36\xbb\x01\x7a\x63\x1e\x63\x0d\x02\x85\x37\xd5\xd5\xef\x03\x97\xdb\xcd\x93\xef\x30\xb8\x4c\x6b\x12\x47\xc5\x11\x77\xc4\xda\x92\x5e\xed\x49\xc5\x32\x28\xe9\x09\x11\x6b\xb9\x12\x24\x60\x49\x25\x9a\xd5\xeb\xcd\x24\x7b\x05\x93\x91\x29\xb8\xb1\xce\x08\xa3\x60\x8f\x02\xaf\x16\xd1\xba\x99\x2c\x32\xf6\x36\xe0\x4d\x08\x07\x6c\x07\x49\x97\x20\x5d\x34\x5d\x84\xe5\x0a\xae\x3d\x73\xec\xf4\x32\x88\x72\xee\x1b\xb1\xea\xd4\xf8\xb0\x85\x2f\xdb\x61\xf8\x20\xeb\x10\x22\xce\xa9\x07\x59\xc8\xec\xeb\xb1\x57\x96\x17\x77\x85\x4a\x30\xd6\x46\xcc\xd1\xf7\xec\xf4\xb1\x88\x49\xa9\x99\xfa\x30\x27\xed\x3e\x83\xb6\x1b\x4e\xf5\xba\x45\x4e\xd2\xde\xd7\x33\xde\xb8\x43\xaf\x68\x11\x59\x08\x66\x59\xba\x5d\xd1\x66\x21\xb1\x84\x64\x6b\x56\x11\xdd\xca\x5c\x4d\x6b\xc9\x46\x6f\xe9\xcc\xa6\x5b\x59\x57\xba\x9e\xc3\xcb\x4b\x88\xeb\xd6\x66\xef\xa0\x13\x9d\xf9\x85\x82\x01\xe9\x12\x95\x3f\xfc\x48\xfb\xa4\x09\xad\x65\x66\x1c\x0b\x86\xae\x03\x9a\x8d\x02\x1b\x87\x57\x54\x2e\x13\x04\x99\x00\xdf\xcd\x44\x31\x8e\xf3\xc6\x4f\xb0\xa0\x5d\xca\xd8\xa1\x91\x27\xa1\x73\x5b\xe6\xdc\xc9\x5e\x16\x91\x07\xd7\x55\xb0\x2b\x9e\x85\x8c\xac\xe4\x74\xa8\x59\xfd\x8a\xc0\x8a\x89\xab\x05\xa6\x45\x4b\xbb\x52\x9d\xa9\x23\x8b\xb6\x4b\x4c\x95\x4c\xda\xc2\x1a\xe5\xcd\xfe\x94\xef\x03\x97\xdb\x6d\xa0\xee\xb4\xb3\x11\xeb\xda\x12\x83\x0f\xa2\xc6\x2a\x36\xc3\x7d\x5e\x2a\x00\x75\x0f\x31\xc5\x9d\x60\xb8\xb2\xf3\x20\xb5\x05\x5f\x62\x62\x60\xd9\xd9\x15\xe1\xe0\xca\x71\x71\x66\xed\x36\xe8\xbb\x31\x86\x71\x2c\xcf\xa9\x76\xd8\x29\x9b\x2e\x34\x83\xb6\x99\xdd\x29\xa3\xb5\x22\x68\x95\x03\xe0\x57\x88\x9a\x5a\x4b\x76\xa9\x8b\x2b\x6d\x89\x94\xd9\xd1\xb7\x8d\x1c\xd3\xc2\x65\x6e\x79\xd3\x81\x4b\x7b\x6e\x2d\xae\xcb\xa6\x8f\x43\xb0\xb4\xaa\x4b\x68\x3e\x67\x26\x5e\xc5\x05\x06\x37\xbc\xe0\x4c\xdb\x2e\x0c\x1a\x55\x10\x4b\x77\x6c\x27\x95\xc8\xec\x3b\x3b\x48\xf7\x29\x00\x04\xbb\x77\x97\x58\xc8\xed\x20\x99\x26\x26\x51\x00\x58\x91\x69\x3c\x4e\x78\xcc\x62\xa0\x9a\x24\xee\x62\x7a\x75\x84\x80\x56\x47\x5c\x97\xca\x86\xa3\x8a\x2b\x20\x2e\xe7\x42\xf6\x16\xf1\x89\x67\x10\x34\xb5\xa6\xfb\x8e\x0d\x98\x01\xf2\xa2\xd1\x9e\xb7\x05\x25\xc2\x5c\x3f\x88\x9f\x7e\x17\x25\x5c\xc1\x70\x65\x02\x2f\x99\xe4\x3c\x1c\xa9\x65\x0e\x10\x77\xe3\xd0\xae\xe8\x6a\xc3\xe1\xb8\x19\x0c\x97\xc8\xdd\xb1\x60\x42\x33\x5d\xc7\x49\x8e\x2b\xc4\x6e\xd4\x50\x4b\x9b\xd4\x70\xed\x41\x30\xa1\x75\x83\x6c\x1e\x63\x9d\xba\xa8\xd3\x6e\xa7\x83\x39\x8a\x01\x94\xb7\xd5\x1d\x3c\xaf\x2e\x88\x5b\x67\x2e\xb7\xdb\x59\xdf\x61\x70\x29\xde\xd5\x01\x23\xc8\x9e\x20\x3a\xf9\x22\xa9\xc0\x98\x55\x01\xcf\x49\xb6\xf3\x3c\x28\x76\xcb\x12\x97\x53\xc4\x82\xe6\x00\x20\x5d\x42\x2a\xd9\xd4\xbe\x0a\xcd\xf6\xa4\x92\x1f\x43\xd4\xc2\x05\xd3\x81\xb8\x0d\x86\x4e\xe4\x4e\x7b\x29\xe7\xc9\xa9\x36\x67\x83\xab\x55\x59\xb0\x2b\x76\x13\x10\xe5\x54\x7a\x87\x66\xda\xbe\xd2\x55\xd0\x13\x1f\xcd\x1d\x91\x9b\x18\x0e\xda\x58\xf6\xbb\x42\xcd\x9e\x37\xea\xbb\x18\x31\xb7\xe5\x8a\x57\x79\x71\x31\x0f\x24\xda\x41\xec\x08\xae\x2e\x79\x69\x5a\xfb\xaa\x7c\x48\x0e\xca\x69\x76\x21\x3a\x1d\x53\x9c\xd4\x26\x68\xe6\xd1\xca\x15\x9f\xb5\x48\xd9\x72\xb1\xe7\x34\xd8\x38\xab\xcc\x7b\x06\x6c\x97\x80\x8b\x73\xed\x63\x41\x7c\x28\x58\xb1\x4f\xd2\xd1\x89\xc1\x8a\xe0\x31\xae\x58\x88\xb3\xe9\x6b\xee\x61\x4a\x9c\x34\xe7\x62\x09\x3b\xae\x8a\x0e\xbe\x96\x51\x59\xd2\x98\x03\x2c\x71\x07\x04\x2a\xeb\x0e\xb2\x62\x60\xae\x68\xda\xd5\xb8\x51\xb3\x9f\xbc\xdb\xb8\x62\xbc\xa3\xb3\x1a\xb9\xe6\x03\x49\x4f\x63\x15\x9d\xed\x76\x1e\x36\xfb\x21\x3d\xea\x9b\xa0\x28\x5f\x32\x97\x2c\xbe\x6e\x80\x51\xc4\x8f\xbc\x9c\x0b\xce\x47\xa5\x3b\xa1\x85\xee\x7d\xc4\x5d\x52\x3c\x61\x45\xc1\x7a\x25\xcc\x1a\x23\xaf\x22\xd7\x7c\x0b\xd9\xe8\x37\xda\x5b\x23\xfd\x86\x77\x7e\xd2\x0f\xfe\xd0\x7d\x7f\xea\x77\xee\xf9\x84\x97\xff\x83\x17\x9b\x77\xff\xd3\x8f\xbe\xfb\x3b\xbe\xf6\x3d\xee\xa3\x5f\xf7\xdf\xe8\x0b\xfe\x06\xd9\xe8\xa9\xdf\xf7\xf6\x5f\xfa\x61\xf3\x8b\x5f\xfd\xc5\x8f\x9b\xe3\x27\x1e\xfb\x8f\xfe\xe8\xb7\x5e\xfb\xf3\xf7\x78\xf4\xe3\xde\xfb\xe7\x6f\xfa\xb8\x8f\x5c\xbe\xe4\x83\x9f\x7b\xb3\xb3\xd1\xa3\xde\xfa\x9e\x6f\xfd\xce\xef\xfc\xe7\x1f\xf4\x7a\x72\xb7\x4f\x7f\xf3\x7f\x78\xf7\xdb\xc5\x37\xf8\x2f\x7a\xf7\xd7\x7c\xe8\xf3\xde\x7c\xaf\xbb\x3e\xca\x7e\xf4\x7b\x1f\x72\xb3\x07\xd1\x5f\xdd\xf3\x33\xbe\xeb\x49\xf7\xf9\xdd\x87\xff\xd8\xff\xf7\xe4\x8f\xfd\x94\x0f\x78\xf9\x3d\xfe\xd6\x27\xca\xfa\xbc\x5f\xb8\xcf\xff\xf8\x59\xab\xf8\xf7\x7d\xc8\x57\xde\x74\xf4\x33\xee\xf3\xc2\x7b\xbd\xf6\x9b\x3e\xfb\x97\x9e\xf2\xab\x4f\xfe\xb8\xe4\x1e\xfd\xcb\x4f\xfd\x96\x37\x7c\xf8\xa7\x3d\xf6\xdf\x7d\x2c\xbf\xc7\xaf\xdd\xf7\xa9\xe0\x0f\xfe\xe3\x4d\x47\xff\xef\x77\x3d\xeb\x89\xbf\xf8\xe1\xcf\xff\x82\x9f\xfc\xc2\xef\x7a\xe1\x3f\xb7\xff\xcb\xbe\xea\xd1\x1f\xd5\xbf\xee\x75\x8f\xb8\xff\x83\xfd\xfd\x9a\xbf\xcf\x7f\xba\xf9\xaf\xbe\xf9\x99\xbf\xf5\x5c\xf6\xcc\x27\xc3\xaf\x4d\xef\x5d\xbe\xe8\x11\xff\xfd\xfe\xf7\x7e\xe8\x1f\xbd\xe2\xaf\xb6\x7f\xf1\x13\xe9\x43\x1f\xf3\xc1\xf7\xff\x85\x47\x3f\xf1\xe6\xc4\x35\x97\x5f\x3f\xdc\x43\x3e\xfe\x7b\xe6\x6b\x88\x7b\xf8\xb7\xbf\xd7\xfd\xe5\xf7\xbe\xe8\x0b\x3e\xf3\x5e\x77\x7b\xea\xc7\xdb\x2f\xb9\xf7\x47\xfd\xdb\x97\xde\x74\xf4\x1e\x4b\xfd\xd4\x4f\x7c\xf9\x3d\xdf\xfe\x35\x4f\x28\xf7\xfc\xe1\x57\x2f\x7f\xf2\xc3\x4f\xfb\x96\xef\xdd\xbf\xe7\xf9\x1f\x80\xbe\xfb\x8d\xdf\xf0\xef\x7e\x7f\x7e\xf1\xfb\xc9\x46\xb7\x7b\xaa\x77\x18\xe1\xd5\x2a\x9b\x26\x62\x34\x12\x26\xde\xe8\xa6\xaa\x01\x1d\x08\x8d\x21\x5e\x26\xdc\x4e\x09\x39\xe8\x19\x0b\x19\x3b\xdf\xd3\x5e\x01\xbd\xe2\xed\x75\x36\xd9\x86\x4a\x77\x00\x01\xd7\xf3\x19\xa1\x35\x70\x98\x62\xc9\x40\x9b\x18\x71\x19\xe8\x9c\xfb\x8e\x86\x2d\xac\xc8\x64\xf5\xbc\xa2\x37\xd5\x85\x05\x92\x17\x5a\x44\xed\x86\xa4\x06\x6e\x14\xb5\x6b\x65\x2a\x72\xe8\x95\xde\x23\x8e\x73\x75\x7a\x9e\x40\xf3\x04\xc3\x24\xe3\x0a\x09\x2f\x64\x36\x1e\xd2\xb0\x8d\xb4\x25\x41\x8c\xcc\x89\xd0\xc1\xe7\x64\xc3\x7a\xd1\xd6\x35\x87\xc4\x0f\x79\x68\x99\xb7\x33\x70\x94\x48\xbe\x82\x95\x50\x99\x17\x51\x2c\x59\x1b\xe5\x8d\x72\x0a\xc3\x0c\xc7\x42\x7d\xde\xab\x89\x63\x2d\xc4\x0d\xbe\x43\x50\x29\xc8\xc8\x4b\xae\x1d\xbd\x62\x92\x5c\xdb\x82\xa5\x52\xbb\xae\xdb\x82\x93\xd8\xbc\xdc\xd6\x6d\x52\x02\x46\x32\x86\x65\x92\x0f\xca\x69\x5f\x84\x1c\xcb\x80\x29\x61\x05\xaf\x88\x51\xa3\x90\x29\x3a\x9a\xdf\x0e\x32\xc4\xf4\xa7\xa0\x07\x93\x85\x88\x49\x1c\xcb\x10\xad\x51\x9f\x68\x23\xb3\x55\x6a\x90\x32\xe7\x0e\xd8\x15\x8c\x79\xe3\x25\x68\x2c\x45\x04\x7c\x2f\x92\x98\x26\xbc\x74\x66\x56\x67\x41\x4d\x39\x44\xb8\x38\x43\xdc\xff\xce\x2e\x75\xfb\xae\xa4\x9a\xb7\xaa\xec\x6e\x87\xc3\x77\x3a\xa3\x71\x0f\x44\xb7\x19\x82\xc8\x73\xaa\x50\x16\xd0\x89\x3d\x7a\x8f\x07\xc6\xfb\x1e\x76\x30\x0b\x5d\x04\x74\x2d\xd3\xb0\x78\xeb\x8e\x2b\x32\xf3\x59\x71\x14\x31\x4f\x87\xd7\x27\xa1\x69\xd5\x72\x0b\x6b\x8d\x67\x8a\x4e\x21\xc2\x55\x5e\x45\x8f\x8c\x1f\x36\xb9\xa4\xaa\xcd\xa0\xe4\x2b\x5e\xa2\x44\x7c\xd9\xe5\x70\xeb\x38\x12\xe7\x03\x92\x58\x20\xed\x04\xe0\x33\xe0\x68\x89\x50\x87\x17\x63\x57\x27\xe5\xd9\x2d\xe1\xe8\x8a\x5e\x21\x67\x76\xa9\xb9\x32\x7c\x74\xb1\x34\x09\x0b\x3b\x81\x96\x1c\xb9\xcd\x4b\xbf\xd8\x0a\xca\x01\xb3\x14\xb3\xd9\xa5\x47\x2d\x4f\x8b\xd8\x25\x86\x1b\xad\x72\x2e\xa1\xc3\x6b\x44\x5d\x84\x70\xca\xa0\x29\xaa\x09\x60\xd9\xe6\x52\x0c\xf5\x74\x72\x8a\xd0\x82\x4e\x17\x95\x52\xeb\xa4\x57\xb4\x15\xda\xd4\x63\xd2\x25\x24\xef\xb8\xe5\x31\x07\x39\x28\xe5\x28\xb5\xd3\x91\x7a\x28\x14\x8a\x59\xb5\xd1\x45\x80\x55\x50\x0e\x0c\xe2\x57\xcc\xb3\x13\xdf\x72\x3c\x60\x51\x3c\x5a\xcd\xb3\xc0\x7a\x72\x5e\x1b\x98\x2c\x51\xd5\xf5\x06\x6a\x5b\x0a\x09\xa6\x9e\xb4\x4b\xb6\x68\x56\xaf\x30\xc6\x74\x51\xc9\xf3\x24\xa8\x0e\x64\x78\xd5\xfb\xd6\x4e\xd5\x27\x2f\x5b\xaa\x3a\x1c\xe9\x48\xd0\x15\x8b\x42\x11\x7c\x1c\x9a\xf7\x1b\xd7\xf0\xad\xfe\x00\xb7\xa9\xdc\xee\x70\xe5\xb2\xa3\x1b\x2f\x0c\x3f\x26\x42\xa5\x11\x35\xa6\xa5\x1d\x4f\xa1\x23\xd1\x47\x2a\x24\x9d\xa7\x6f\x30\x9a\x63\x44\xd9\x61\x0f\x19\xb9\x2b\x38\x84\x86\xae\x27\xa7\x01\x78\x63\x79\xf0\xd2\x92\x2d\x65\x47\x72\x14\xf1\x00\xc9\x6d\x0b\x70\x58\x55\xca\x2c\x5b\x86\x13\x62\xee\xdb\x25\x42\xe2\xe0\x3c\x20\xc7\x0a\xb0\x25\x2d\x5b\xc0\x36\x75\x8a\x6d\x8d\xda\x1c\xc6\x31\x4e\x04\xf1\x07\x3e\x75\x44\x95\x44\x1a\x82\x3f\xf3\x25\x53\x75\x26\x8f\x5d\xb0\xcc\x81\xc9\xb3\x1b\xc8\xc9\x71\xa0\x7d\xf7\x54\x15\xcd\x99\x36\xc0\x9b\x55\xd0\x3d\x66\x7e\xb8\x20\xd1\xa8\xe8\x92\xec\x29\x1e\x97\x15\x06\x27\x3a\x83\x71\x91\xe1\xd0\x7a\x13\x22\x69\xcf\x49\x8a\x26\xd7\x59\x90\x04\x18\x18\xb0\x79\x46\x8a\x63\x6a\x2f\x57\x2c\x0e\x47\xd5\x8e\xf4\x89\x1a\x95\x08\xcc\xbc\xad\x18\xb0\xd3\x3a\x4d\x2c\x01\xb3\xaa\x43\x45\xbd\xe3\xbc\x74\x3d\x2c\x5b\xb9\xa2\x13\x5c\x41\x93\x8e\x24\xab\x55\xd7\x6a\x2a\x2c\x7d\xb8\x11\x18\x8f\xa5\xa2\x65\x2a\xc0\xad\x60\x4b\x48\xb1\x60\xcb\xe9\xba\x8f\xb5\x82\x26\xab\xbb\x62\xf0\xa5\xa7\x69\xd3\x51\x2e\x5a\xd8\x0f\xd5\x6a\x3a\x79\xc6\x8b\xd0\xb8\x0e\xef\x10\x14\x91\x2c\x23\x6b\xe5\x49\xd0\x4d\x94\x13\x31\x03\x6f\x01\x97\xdb\xf5\x7a\x77\x3c\x00\x56\xf4\x79\x9e\x37\x6a\xab\x6d\x29\x5e\xef\x06\x6d\xfb\x8a\x3a\xef\x93\x7a\x20\x00\x50\x71\x6b\x3c\xad\x3b\x2e\x1c\x0c\xb7\x4e\x7e\x45\xf9\xcb\xc7\xc1\x02\xc5\x0b\x5b\x86\x2d\x66\xea\xb9\x9d\xc6\xb2\xcc\x48\x38\x93\x04\xc2\xb4\x14\xcc\x9e\x84\x57\x84\x12\xdb\x65\x3d\xae\x68\xce\x68\xae\x09\x28\x67\x40\x88\xa3\xed\xcb\x14\xd2\xe3\x62\xab\xeb\x25\xad\x7a\x96\x1a\x43\x8e\x7c\x97\x05\xb7\x30\x99\x06\xe4\xc4\xf0\x0a\x65\x3e\x48\x16\x3a\x15\x28\x6a\xc4\x1d\xcb\xd8\xb7\x02\xa0\x1e\x32\x6a\x4d\x14\xb0\x22\x03\x39\x88\xa0\xab\xcd\x15\x77\x39\x54\x8c\xf9\x92\x5a\x72\x83\x07\x32\xd2\xee\x46\xb1\x45\x86\x33\x71\x97\x44\xe0\x1b\xb1\x91\x19\x93\xb7\x0d\x3a\x4f\x2c\xc6\x71\xb8\xbe\x8b\xbd\x89\x2b\x2c\x78\x59\x5b\x88\x58\x77\x71\xce\x51\x17\x07\x30\x0f\x19\x23\x7a\x2c\x5c\xaf\x04\x38\x90\x40\xb1\x83\xaf\x1b\x0e\x6a\xc3\x43\x6d\xa7\x82\xf4\x8a\xc1\x17\x41\xd5\x94\x0d\xa1\x7d\x25\x39\x9c\x4d\xa3\x01\xb3\x17\x7a\xf6\xa6\x55\x97\x62\xd4\xb2\xa3\x0d\xef\x2e\x6d\x95\xc4\x1d\x24\xec\xae\xa8\x5c\x4a\x81\x00\xca\x53\xd8\x81\xcf\xa2\x19\xf5\x19\x4e\x76\x54\x86\xcc\x8e\x26\xa0\x27\x77\x58\x61\x21\xce\xaa\x4a\x1c\x66\x77\x9a\x89\x5b\xc0\xe5\x76\xd3\xa1\x3b\xcd\x64\xc4\xc3\x34\x49\x70\x40\x0c\x30\x17\x65\xc5\xb2\x2e\x86\xa8\x1a\x9b\x67\xa3\xff\xff\xec\xbd\x77\xf8\x17\xc5\xd5\x37\xac\xa2\x62\x0d\xf6\x2e\x62\xef\x02\xb3\x65\x40\x8d\x15\xbb\x46\xb1\x6b\xd4\xb8\xb3\xbb\xd3\x67\xb6\xcd\xee\xce\xac\x11\x15\x2b\xd8\xa3\xb1\xc4\x82\x5d\xec\x25\x2a\x16\x6c\xb1\x6b\xb0\x1b\x0b\x2a\xb1\xf7\x86\x88\x5d\xdf\xcb\xf8\xde\x09\xbf\x1b\xee\xd7\x3c\x79\x7f\xdf\xeb\x7a\xae\xe7\x7a\xfe\xe0\x2f\x3e\x70\x9d\xef\xec\x99\x33\xa7\x7c\xce\x39\x05\xb2\x79\x2b\xc3\xd6\x13\x5d\x55\x69\x0c\xe3\xcc\xf5\x82\xa0\x9c\x06\xae\x06\xca\x48\x1a\x04\x04\x84\x79\x19\x36\x19\x12\xd2\x63\x79\x05\x55\x5e\x68\x3f\x55\x5e\x5d\x25\x8d\x16\x04\x95\x28\x0a\x68\xc9\x7b\x51\xf7\xcd\xa9\xed\x6a\xcb\x9a\x0a\x40\x4a\x61\xda\xe1\x84\xe1\xb0\x91\xac\xab\x73\x18\x15\x2c\x2c\x3b\x1e\x35\x52\xf9\x01\x96\x56\xb7\x80\x24\xac\x27\x3b\xae\x61\x9e\x42\xd2\xb5\x2c\xf4\x53\x67\x4b\x94\x4b\xae\x43\x16\xa9\x8e\xe4\x5a\x64\x21\xae\x29\x4a\xfc\x88\x3a\x3f\xc4\xbe\x28\x95\x21\xbd\x60\xfc\x23\x5d\xc9\x00\x36\x0d\x93\x9e\x0f\x8c\x14\x30\xa9\x65\x58\xe5\x4a\xe6\xd0\x84\x41\x83\x42\xaf\x4a\x92\xd0\x31\xab\x73\x1e\xf8\xa5\x03\xa6\x37\xf4\xaf\xc0\xe5\xc2\xd6\x38\x0e\x2a\xc1\x22\x16\xe5\x0e\x83\x56\x36\x34\x54\xff\x58\x6f\xa1\x4d\x4c\x69\xd3\xc4\x02\xc1\xc4\x4b\x13\x88\x0a\xd0\x8b\xe0\x0c\x99\x30\x27\x55\xe0\x75\x5d\xe2\xda\xb6\xae\xda\xbc\xf2\xea\x3a\x4c\x40\x24\xeb\xa0\x41\x0a\xe5\xa6\x2e\x70\x91\x31\xea\xea\xa0\x8e\x40\xd1\x8b\x07\x18\xd1\x90\x07\x1d\x14\x85\x4d\x45\xd8\xa4\x22\x8c\x80\x10\xa6\x48\x00\xf4\x8d\x4f\x61\x01\x35\xcc\x83\xa8\xec\x3c\x18\x97\x5d\xe0\x41\xa1\xca\xd9\xb7\x4b\xff\x52\x3e\xb9\x9f\xc3\xa2\x30\x6d\x7d\xc3\x3d\xbf\xce\xea\xda\x4b\xbb\xaa\xf1\x90\x6d\x72\xc2\xaa\x12\xf1\x58\x61\x87\xa2\x2a\x0e\x3a\x59\x78\x0d\x2f\x2a\xc8\x54\x9b\xf4\xc2\x2a\x73\xd9\x48\x3f\xc4\x98\x54\x14\x85\x65\xca\x78\x58\xf3\x20\xa3\x39\x62\x42\x21\xe9\x15\x5a\xe8\xa8\x62\x54\xd9\xb8\xaa\x59\x84\x44\x6f\x76\x0c\x79\x2c\x49\x4d\x97\x75\x1e\xf7\xb2\xac\x89\x7d\xbf\x70\x85\xee\x58\x11\xa6\x85\xc9\x71\x57\xdb\xb2\x0a\x02\xd1\x15\x28\x40\xbe\x05\x99\xe0\x55\x2f\xae\x75\x67\x11\xa7\xa4\x6a\x54\xe5\x31\x97\x42\x14\x75\x08\x85\x84\xc9\xa2\xf3\xb4\x88\x65\x95\x5a\xeb\x17\xa8\x36\x96\xe6\x5e\xe6\x27\x02\xcb\x5e\x30\x34\xba\x0c\xf1\x38\x27\x55\xc6\x5b\x87\x38\x00\xc6\x4b\xc2\xa6\x73\x85\x72\xb5\x50\x2c\x4a\x8c\xe0\xd2\xcf\x6d\x88\x6b\x12\x71\x4c\x85\x8a\x7b\xa1\x17\x04\x75\x29\x25\x35\x21\x95\xf2\x78\xa6\x08\xce\x3c\x49\x11\x37\x24\x8b\x6c\x27\x08\x8a\x5d\xe4\x57\x24\xab\x1c\x8f\x44\xdd\x85\x4d\x0c\x7a\x41\x85\x0b\xb8\xa8\xb9\x0d\x95\xe3\x5e\xeb\xd1\x08\x2b\x10\x31\x15\x44\x2d\xe4\x5e\x5a\x20\xe9\x45\x85\xb0\x59\xdc\x40\x10\x13\x41\x29\x0c\x48\x2f\x76\x5c\x23\xa0\x99\x0e\x30\x8e\x74\x2e\x78\x19\xc9\x7f\x8c\xe3\xe4\x94\x24\xa2\xee\xf2\x5a\x76\x36\x6d\x0b\x5e\xb4\x25\x6c\x6d\x03\x69\x1a\xa2\x2c\x9e\x7d\x9a\xf4\x2f\x55\xa0\xfa\x9b\x0f\xd0\xa4\xcc\xd7\xac\xf3\x13\xd3\x64\xa5\xa6\x55\xe4\xfc\xd0\x4f\x58\x15\x46\x36\x69\x5a\x89\x4b\xdf\x85\x22\x29\x03\x6d\xd2\x96\x75\x5c\x27\xbd\x68\x27\x72\xa8\x28\xb0\xe2\x30\xf3\x12\x11\xca\x9f\xc4\x28\x29\xf6\xfd\xa2\x41\x61\x54\x03\x9f\x59\x95\xfb\x06\x77\x56\xa4\x94\xb6\x41\x16\x16\x51\x2f\xfc\x27\x22\xb5\x28\xba\xac\x84\xa9\xc0\x28\x66\x3e\x47\x5d\xee\xb7\xb8\x6d\x21\x77\x99\xa1\x71\xd2\x8a\x1a\x6a\x9e\x28\x97\xca\xda\x27\xae\x06\xbd\x98\x00\x88\x64\xe6\x77\x19\x6e\xda\x92\x24\x90\x51\x4a\x04\x68\x6c\x9a\x97\xc8\x50\xcf\x98\x36\x77\x3c\xf6\x20\xaa\x01\x15\x4d\x51\x4a\xaf\xaa\x40\x2f\xba\x47\xb9\xa5\x69\x4e\x9d\x26\x19\x2e\x1b\xd1\x82\x2a\x57\xe0\x1f\xb3\xfa\x03\x53\x98\xb4\x8d\x31\x8c\x55\x15\x79\x3c\xca\x24\x45\x45\x9b\x37\xa8\x17\x21\x62\x2b\xbb\xaa\x55\x61\x16\x33\xee\x45\x80\xf8\x44\x67\x95\x50\xa1\x75\x71\x91\xfa\xb6\x36\x09\xb3\x0c\xe8\xc4\x36\xaa\x48\x7c\x5e\xe3\x26\xe9\x45\xe5\x2c\x10\xb6\x91\x75\x24\x32\x15\x03\xd7\xf9\x81\x67\x95\xe2\x61\x4b\x5b\x2f\x29\x78\x10\xb4\x9d\x0c\xad\x35\x21\x89\x52\xc9\xbc\x86\xd6\x59\x2f\xbc\xb8\x48\x9a\xda\x16\xe5\x4f\x1f\x82\x52\x82\x58\x5b\x61\x5a\xf3\x2a\xb2\x30\x2f\x64\x5a\x33\x65\x9b\xda\x54\x05\x0b\x32\xeb\x13\x4f\xd4\xb1\x29\xe0\x6c\xc6\xe5\x97\x6a\xd6\xfd\x3d\xaa\xde\x8a\xcc\xb4\x4d\xa7\x35\x84\x79\xee\x99\x48\x04\x4a\xb4\xac\x88\xb9\xf1\x40\x17\x34\x25\x8c\xda\x34\x25\x69\xd7\x92\x44\x35\xa2\xcc\x5c\x2f\xa2\x5a\xa7\x2b\x47\x64\xe3\xe2\xa2\x2d\xb1\xe7\x35\x54\x03\x17\xc6\x31\xec\x9a\x20\xa8\x7c\xbf\x40\x65\x63\x3c\xe6\x62\x54\x64\x48\x75\x06\x66\xbc\x27\x33\x85\x20\x2d\x70\xc7\x11\x84\x55\xc1\x2d\x81\x21\x97\x29\x42\x75\xd3\x85\x20\x0f\x4c\x2d\xdb\x30\x2b\x63\xcc\xbb\xc0\x49\xcf\xa6\x39\x70\xa6\x17\x67\x51\xb5\x9d\x22\xa0\xd4\x45\x23\x83\x28\x2e\x9b\xc8\x15\x39\xc2\xba\x95\x08\xe5\x9d\xc8\xda\x8e\x10\xa8\x89\xa7\xd3\x98\xe4\x65\x4b\x43\x0f\xf4\x80\xe6\x83\x1a\xd3\x71\x8c\x6d\x8e\x04\xcf\x9c\x53\x41\x93\x14\x8c\x94\x30\xcc\x35\xca\x23\x99\x94\xb2\xb5\x0a\x38\x9b\x18\x4f\x92\x48\xa1\xa8\x14\xbd\xc8\xfc\x78\x6d\x19\x5a\xab\x8b\x08\x86\xd6\xcb\x3d\x16\x37\x31\xf4\x43\xea\x80\xd2\x26\x75\x88\xe1\xa8\x68\xb8\xd6\x7e\xc3\x4b\x92\x76\x81\x4b\x7a\x41\xd6\x8e\x5c\x0e\x6c\xd9\xd8\xa8\x48\x25\x32\xa0\x23\x69\x08\xb5\x16\x0c\xd6\x7e\x26\xa1\x46\x9a\x87\x20\x61\x50\x1b\x56\xc0\x88\xe7\x40\xcb\xa2\x17\x52\x34\x1e\xc8\xd2\x5a\xa3\x80\xab\xaa\xc6\x21\x33\xb1\xd0\x01\xaa\x6c\x07\x6a\x4c\x65\xd7\x31\x5a\x87\x1e\x8f\x12\x51\xe6\x14\x44\x29\x12\xb3\x8c\x16\xfc\x2f\xb2\xd1\xf5\x4f\xfd\xe9\xda\x1b\x87\xd6\x83\xce\x3a\x4d\xbd\x70\xe8\x27\xd1\x52\x37\x5e\x33\x6a\xbe\x72\xc9\xd1\xdb\x1f\x17\x1c\x73\xd0\x2b\x0b\x8d\x2f\xfe\x1b\xd9\xe8\xd2\xf9\x46\x8f\xfa\xd5\xb6\x0f\x6e\x70\xa8\xda\x66\x9f\x7d\x16\xfb\xfa\xc6\x73\xda\x0f\x1f\xdd\xf8\xf7\xd7\x7e\x35\x6e\xfd\x7b\x0e\x9f\x7b\xbc\x37\xeb\xb8\xa2\xb9\x2e\x1e\x70\xf2\xc6\xfb\x9b\x1d\xbe\xdf\x3c\x9e\xfb\x80\x15\xb6\x79\x6e\x89\x25\x8f\x5c\x75\x8d\xd3\xd3\x67\x47\x2f\xff\xf2\x1e\xe0\xf4\xa5\x9f\x9e\x75\x5e\xd2\x72\x62\xcf\x2b\x2f\xd8\x6e\xca\xcc\xf3\x93\x3f\xef\xfe\xed\x87\x97\xff\x70\xf1\xc2\x0f\xd6\x1f\x9f\xb5\xe5\x69\x64\x97\x49\xe7\x4f\xbf\xf5\xba\x59\xa0\xb7\xec\x55\xff\xf9\x81\xc5\x17\x7d\xf8\x48\xfc\xc4\xd2\x4b\x4d\x3c\x68\xee\x79\xef\xb8\x23\xbe\xe2\xc1\xfd\xd7\x94\x7b\x8c\x98\xb1\xe2\x63\x8b\xdf\x3e\x0b\x74\xc6\x88\xf9\xee\x77\xcf\x7f\xc1\xef\x5d\x57\x2c\x38\xff\x35\xf3\xac\xf6\xa7\xd7\x1f\x7a\x66\xcc\x5f\x57\x5f\x6a\x4b\xf4\xfd\x6f\x1f\x3f\xfe\xfc\x4f\x67\x81\x7e\x3d\xe3\xcd\xc9\xbf\x1b\xb7\xda\xc5\xd7\x6d\x30\xdf\x0a\x6b\x3f\xb4\xcc\x80\x97\x86\xa6\x3b\xdf\x38\xde\x2e\x27\x06\xce\x7b\xc3\xb7\xb7\xfe\x71\xd6\x9f\x35\xe4\xb4\x79\x5f\x1b\x9c\x7f\xfc\xd6\x01\x27\xee\x9f\xaf\x7f\x55\xb4\xc3\xdb\x7b\xcc\x3f\x65\xc1\xdd\x0e\xba\x65\xf2\x80\x5f\xed\xbc\xc8\x88\x71\xaf\xcf\x02\x35\xdf\xcc\x3c\x7a\xf7\xa5\xc0\x8b\xa7\x5e\x37\xcf\xa4\xc9\x17\xfe\x71\xae\x15\xd6\x0e\x3e\xbf\x5a\x1f\xbc\xca\x94\x69\xd3\x16\xdd\x7b\xcd\xcd\xb6\xfd\x27\xd9\xe8\x97\x4e\xb5\x9f\x13\x5f\x44\xa8\xd4\x25\x39\x8c\x2d\xa5\x69\x9d\xe5\x1c\x84\x26\x07\x9c\x04\xd2\xe0\xb6\x81\x11\x64\x8d\x0c\xd2\xc8\xf2\x0e\x25\xc2\x87\x3c\xec\xc9\x44\x76\x5f\x59\x9e\x86\x26\xe8\x6c\x83\x92\xd6\x45\x38\xa7\x4c\xdb\x52\x34\x6d\x4c\x94\x10\x75\xd2\xa6\xad\x36\x69\xe0\xbc\x96\x0b\xcf\xaf\x4c\x4f\x16\x8d\x7b\xc4\x7a\x3a\x2a\xfc\x0e\xb5\xad\x51\x2c\x8a\x88\x21\x36\xcd\xb0\x83\x69\x92\x85\x35\xc8\x61\x27\x59\x8d\x32\x63\xda\xda\xaa\x18\x21\xd6\x8b\x78\xac\x80\x9c\x0a\x8d\xf3\x06\x5a\x47\x2a\xd8\xa4\xc4\xf8\xa0\x4d\xab\x20\x16\x4d\x42\x25\xe6\x38\x14\x14\x57\x19\xeb\x1a\x62\xda\x26\xac\x7b\x42\xb0\x29\x49\xd3\x5a\xcc\x00\x11\x65\xd9\x96\xac\xa6\xa9\x0a\x89\xe5\x88\x96\x0d\x28\xa2\x58\xe0\x2e\x75\xb0\xe3\xa6\xe0\x79\x6c\xdb\x22\x4c\x7a\xb1\x63\x28\x02\x69\x1c\x04\x01\x94\x2c\xb2\x41\x02\x95\xec\xac\xe6\x55\x4a\x19\x8e\x02\x16\x8b\x00\xe4\xaa\x61\xb9\x90\x75\xce\x03\xa6\x5b\xdd\xf5\xa4\xa0\x1c\xb1\x7f\xb4\x01\xa5\x5d\x59\x70\x2f\x85\x46\x54\x09\x83\x29\xad\xb3\x54\x2a\x54\x2b\x56\x54\x8e\x36\xac\x8d\x99\x28\x71\x43\xad\xdf\xa9\xb8\x27\x0b\x7b\x62\x00\x0d\xf0\x9b\x06\x3a\x5b\x92\xd8\x22\xa5\x61\x10\xc4\x38\x2f\x64\x53\x96\xb5\xee\x22\x1d\x56\x91\x55\x69\x56\x04\x1d\xe7\x30\xef\xc0\x6c\xee\xe3\x2f\xd9\xe1\x7e\x36\x2e\x59\x50\x6b\x96\xb4\x95\xeb\x48\x99\x86\xa4\x2a\x81\x52\x4e\xfb\x5d\x91\x44\xa6\x8a\x1b\x4f\xa7\xae\x63\x79\x4d\x51\xec\xe7\x21\xc2\x0e\xb2\x5e\xcc\x42\xd7\x61\x9a\xe6\xbe\x17\xb0\x50\x20\xca\xab\x46\x57\x9d\x6b\x2d\xed\xca\x86\x46\x51\xe5\xa5\xdc\x09\x11\x96\x20\x96\x50\xb5\x6d\xea\xd5\x71\x4f\x76\xf1\xb9\x3a\x2b\x79\xac\x1a\xab\x65\x5d\xe6\xc6\x07\x9d\xd1\x7e\x87\x44\x99\xf3\x38\x11\xb8\xa6\xa6\x0e\x78\xdc\x66\x69\x84\x3b\x9a\x44\x21\xf1\x7a\xb2\x50\x1a\x06\x65\x61\x8b\xcc\x35\x2c\xf4\x93\xa8\x0b\x7c\xaf\x14\x05\x95\x16\x43\x5b\x86\x75\x0d\x51\x27\x59\x62\x9c\x6b\x2b\x1c\x66\x39\x4c\x45\x2f\x28\x4f\x8d\x0d\x63\xe5\xc7\x89\xe7\x41\x44\x0a\x52\x3b\x41\x9a\x4c\x82\xb8\xae\x10\x13\x56\xf8\x92\xab\xb6\x90\x75\x9d\x60\x29\x5a\x04\x41\x86\x7a\x31\x7c\x24\xb1\x28\x8f\x02\xa7\x2a\xcf\x28\x3f\xce\x55\xa4\x59\x55\xc6\x1d\x4b\x82\x24\x45\x28\xac\x6b\x6b\x22\x87\x13\x13\xd5\x34\x4a\x69\x50\xe5\x3d\xe1\x46\xf0\x58\x90\x24\xb6\x89\x31\xac\x15\xb8\xa3\x3e\xa6\x8c\x86\x3e\xed\x70\x03\x60\x4e\x2c\x03\xa0\x74\xa8\x82\x92\x66\x12\x48\x5d\xfa\x5d\x2f\x58\x09\x55\x57\xba\x98\x31\xd8\xf1\xaa\xab\x24\x4b\x63\x9f\xfb\xb9\x22\x50\xa2\x14\x29\x4d\x43\xd2\xb5\xa9\x73\x8a\x39\x55\x94\x1e\xe4\x5d\xe0\xcd\x3e\xd9\xe8\x97\x3c\xb7\x7e\x36\x2e\xaa\xad\x2a\xc0\x60\x06\x63\x25\x59\xc3\x18\x35\xb2\xae\x7d\x42\xb1\x6b\x41\x08\x22\xa8\x0a\xe4\xa7\x75\x93\xa0\xca\x83\x7e\x53\xa4\x71\x4f\x2e\x54\xe1\xaa\xac\x0b\x11\x69\x63\x9a\xd4\x48\x44\xa1\xc1\x51\x2a\x12\x29\x3a\x5d\x93\x46\x17\xb8\x6e\x68\x58\x06\x32\x75\x45\x52\xd5\xc6\xcf\xe2\x1e\xa8\x32\xb2\x41\x27\x6b\x9f\xf9\x90\x18\x2e\x9d\x48\x5c\x4c\x2a\x40\x83\x28\x4d\xb3\xd2\x11\x97\x16\xa1\x97\x29\x57\x58\x18\x97\x09\x35\x75\xcb\xbd\x5e\x98\x38\x95\x45\xa5\x17\x83\x14\xcb\x1c\x06\xdc\xca\x2c\xea\x6a\xce\x53\xbf\xa3\x96\x74\xae\xf2\x2c\xc1\xc4\x0f\x04\x10\x55\x2a\x5d\xda\x99\xa0\x27\x5d\x76\x1d\xe9\x02\x85\x70\x6b\xcb\xda\x54\xc0\xea\xa6\x64\x32\x8c\xb9\x11\x96\xc9\x36\xb2\xa5\x00\x5d\x4c\x9d\x16\x65\xca\x30\x6c\xea\x36\x8f\x7a\x11\x21\xd7\x2c\xd5\x55\x43\x4c\x1a\x43\x82\x9a\x38\xf1\x7c\xe2\x65\x58\x37\xb2\xc6\xe8\xa7\x50\xd9\x16\x5e\x2b\x4c\x97\x77\x61\xd8\x14\x38\xb7\x41\xd9\x0b\xca\x53\x65\x70\x85\xfd\x12\x61\x90\x1b\xcd\x74\x0b\xdb\xce\x67\x61\x25\x71\xc2\x6d\xdd\x79\x29\x4e\xbd\x0c\x03\xea\x21\x1b\xea\xd0\x7a\xb1\x14\xbd\x58\xc9\x8b\x64\x09\xda\x08\xf9\x3a\xca\x0d\xca\x49\x28\xa3\xdc\xba\x1c\x93\xb2\xa8\xfd\x22\xd6\x12\x94\x20\x31\x01\x06\x2c\x6a\xab\xc0\x18\x40\xcc\xec\x2d\xbc\xbf\x14\xeb\xf5\x73\xe2\x0b\xf3\x3c\x4c\x4c\x46\x5d\x90\xe8\x2a\x82\xac\xe4\xb4\x8d\x41\x94\x34\x69\x90\xc5\x40\xc5\x69\x18\x64\xb8\xc8\x84\x2a\x8a\x4e\x83\xaa\x74\x3d\xc9\x24\xe7\x21\x4f\x8c\x69\xa3\xce\x66\x85\x30\xc4\x46\x09\x2d\x5a\xd7\x45\xae\x54\x2e\xee\xb8\x69\x62\x52\x67\x34\x4a\xa3\xbc\x2a\x12\xc1\x04\xec\x45\xf6\x14\xb1\x2c\x70\x24\x37\x19\x77\x4c\x44\x71\xed\x87\x5d\x13\xc9\xb8\x95\x2a\x13\x88\x40\x54\x87\x0c\x78\x32\x81\x24\x8d\x6b\x9e\x54\x71\xa8\x51\x0f\x26\x00\x46\x5d\x59\xeb\x46\x80\x8c\x6b\x94\x54\x26\x2e\x7d\xdd\xa5\x71\x5a\x89\xdc\xf7\x6b\x10\x02\x69\x52\x2c\x5d\x9c\xf8\x79\xd7\x80\xcc\xb4\x59\x54\xf5\xe2\x2c\xb0\xc3\x59\x69\x7d\x80\x54\x15\x14\x99\x4d\xbb\x02\x63\xa3\x15\x65\x08\x21\xa8\x51\xe1\x9a\xa0\xf1\x32\x98\x96\x3c\x13\x55\x11\x04\x5e\x2f\xca\x97\x51\x5a\x36\xc0\xaf\x2a\x42\x3d\xae\xda\x00\x57\x28\xa4\x71\x04\x20\x27\x24\xf3\xe3\x34\x08\x35\x97\x5e\xd3\x00\x5b\x79\x08\x32\x6c\x75\x54\xf5\x62\xf5\x6a\x4e\x54\x9d\x3b\x15\x63\x4a\xa5\x97\xd5\xca\x25\x3c\x20\x75\x1c\x1a\x08\x3a\x5c\x88\xda\xcb\x8c\xce\x79\x09\x90\x01\x2d\x75\x14\xbb\x9e\xec\x3e\xb7\x5d\xd9\x46\x98\xeb\xa4\xd4\x58\x67\x98\x31\xbf\x04\x79\xda\x15\xb4\x6b\x55\x53\x20\x49\x7d\xc9\x0a\xa4\x4a\x4c\x40\xe7\x87\xc0\xe1\x6a\xf6\x1e\x8c\x5f\xca\x0e\xf5\xb3\xe7\x42\x4b\x06\x5d\x6e\x3a\xc1\x64\x20\x4d\xc3\x21\x0d\x54\xe7\x63\x0b\xf2\x12\x76\x40\x16\x5e\xa9\x54\x2e\x1c\xcc\x0b\xe5\x4a\x53\x94\x0d\xe8\x45\x26\xb9\x46\xad\xce\x78\x09\x00\xe1\x15\x34\x69\x67\x6a\x9c\xf8\x1e\x2e\xa9\xab\xba\xcc\x92\x2e\x85\xb2\x0d\x61\x42\xb5\xfa\x07\x87\x8e\xc7\xa2\x17\x5b\x0b\x9a\x2a\xa2\x3a\x6f\x2b\x9b\x22\xdb\x80\x8a\xa0\xd8\xb5\x96\x68\x14\xe9\xc4\x74\x42\xe3\x20\x71\x11\xad\x1b\xa5\x0a\xc9\x43\xea\xab\xac\x27\xe3\xb1\x54\xe4\xea\x82\x50\xd2\x66\x5a\xd4\x61\x84\x1d\x2c\x20\x61\x79\x50\xb5\x41\x1c\x47\xd4\x31\xbf\xe1\x49\xd2\x09\x58\xc1\x4c\xd0\xa6\xc5\x3d\x59\xda\xd5\x1a\x99\x79\x25\xa8\x1a\xc3\x62\xac\xd2\xac\xa1\x10\x32\x4c\x34\x4f\x90\xab\x3c\x82\x19\xcb\x92\xba\xa9\xf4\x4f\x6a\x42\xa3\xb0\x8a\x7b\x32\x37\x42\x51\x67\x02\xde\x05\x1d\xa9\x1a\x6b\x54\xcd\x05\xad\x32\x9b\xb9\x44\x21\xbf\x53\x19\x14\x06\x30\x1a\xfb\xb5\x86\x75\x9c\xd6\xc4\xfa\xa6\x17\xad\xdd\x75\x9d\x31\x56\xb8\x80\xe2\xaa\x8d\x3c\x1c\xd4\xa4\xc4\x98\x95\xa5\x47\x04\xb6\xa2\xc1\x95\x4d\x28\x33\x79\x6e\x52\x63\xa3\x40\x28\x06\x7a\xe1\xdd\x77\xc6\x84\x41\x00\x68\xa8\x1d\x6e\xad\x51\x56\x7a\x39\x97\x59\x93\x52\x5e\xfd\x64\x59\xd2\x5a\x43\x06\x6a\x9a\x17\x5d\xa7\x88\xcd\x44\xa4\x67\x33\x2e\xbf\x94\x4f\xee\x67\xcf\x25\xb0\x4c\x84\x22\x6a\x45\xe7\x41\x66\x88\x22\x69\x69\x9b\x32\x8f\x0b\x40\x63\x55\xd0\x56\x53\x9c\xc0\xd4\x22\x4d\x5b\x02\x50\x57\xd1\x9e\xf0\xcb\x01\x0f\x23\x8d\xa1\x05\xcc\xb5\x5d\x9e\x97\x69\xe4\x17\xc2\x06\x56\x14\x2a\x8a\x51\xc7\x15\x63\x49\xeb\x47\x59\x1a\x66\x98\x8b\x08\xa7\x5d\x0f\xc8\x46\x91\xf4\xba\xae\xac\x4d\x0d\x82\x84\xa5\xae\xce\x2b\x56\x81\xac\x86\xa0\xa5\xba\xce\x94\xcd\x4c\x68\x3d\xe8\xfb\xa5\x27\x13\x49\x42\x42\x41\xd2\x8b\xd8\xda\x22\x01\xa4\x6e\xb9\x88\x23\xaa\x48\x03\x42\x47\x3c\x05\x59\x60\xbc\x36\x04\xce\xaa\xa8\x61\xa4\xf6\x14\xcf\xba\xba\x01\x6d\x52\x64\x65\x2f\xc2\xa2\xc6\xfa\xb0\x82\x86\x76\x2e\x17\xad\x51\xb8\x80\xda\xf1\x84\x47\x48\x87\x9e\xc7\xb8\xc3\x41\xc9\x64\xe2\xbc\x3c\x29\xac\x48\x03\x2e\xbb\x5e\x24\xb7\x15\xf4\x3c\xc5\xa3\x32\xc5\x4d\xd1\x04\x6d\x2c\xb8\x81\x50\xf9\x80\xd1\x54\x5b\x67\x4d\x68\x4d\xea\x7b\xc0\x42\x5c\x20\x3f\x4e\xb0\xa9\x7a\xb1\xa4\x26\xcf\x5d\x56\x10\x19\x94\x9d\x88\xb3\xc8\x62\x1f\x72\x2d\x0c\xaa\x94\xae\xeb\x44\xb9\x32\x4a\x89\x96\x79\x0a\x8a\x26\xa3\x52\xe4\xb8\x75\xbd\x60\xb8\x96\x55\x10\xf8\x95\x0c\xda\xb6\x76\x4d\xd6\x3a\x56\x04\x9d\xca\x2a\x0f\x25\x1d\x09\x2d\x6b\x85\x2e\x6d\x92\xa6\x2a\x82\x7e\xe6\x54\x14\xc7\xb3\x0c\xbf\xfd\x2f\xe3\xf2\x4b\x15\xa8\x7e\xf6\x5c\xfc\xa0\x6e\xc2\xa2\x85\x45\xc1\x02\x6a\x91\xf5\x9a\x38\xab\xab\xb0\xac\x60\xf7\xd3\xa5\x46\x8a\xd7\xa0\x0a\x02\x2c\x43\xad\xea\x96\x4a\xd9\x93\xc1\xe8\xd4\x51\xa3\x0a\x5e\x03\x6b\x73\xdf\x29\x4e\xad\x0c\x84\x4e\x32\x1d\x39\x52\x61\x8d\x5c\x9b\xab\x86\x98\x2a\x20\xa9\xf5\x1b\xd0\x65\x3d\x31\x71\x41\x90\xb4\x8d\xaf\x6c\xe4\x95\x39\xf6\x94\x9f\xc3\xb4\xf4\x5a\x1f\x28\x43\x5c\x2a\x98\x57\x85\x7e\xeb\xda\xb0\xf0\x79\x11\xeb\x36\x16\x09\xeb\x45\xdf\x01\x35\x38\x2f\x7c\x2e\x03\x9f\x22\xd9\x12\x81\xeb\x44\x7b\x61\x19\x6b\x3f\x27\x11\x07\xaa\x32\xb2\xce\x54\x13\xe7\x19\x6b\x6b\xbf\x0a\x9a\x5e\xac\x5e\x8d\x90\x4a\xb2\x32\x46\x49\x04\x65\x93\xc5\x22\xad\x4a\x03\xab\x38\xe2\xba\xed\x72\x59\x32\x4b\xc3\x98\x87\xac\xed\xf2\x24\x8f\x5d\x14\xd7\xa0\xe8\x45\x28\xd0\xe0\x0e\xe7\x32\x4f\x69\xa7\xca\x06\x46\x8d\x97\x15\x0c\xab\x9a\x5a\x5d\x61\x53\x81\x34\x37\x2e\x27\x65\xab\x3b\x4e\x23\x63\x72\xc1\x92\x5e\x04\xaa\x15\x88\x93\x30\xb7\x61\xa8\x40\x65\x39\x37\xbc\x10\xad\x8b\xb2\x1a\x95\x12\x19\xcf\x89\x50\x6a\xe3\xb3\x2a\xac\x8d\xae\x13\x8f\x34\x79\xd5\x0b\x2f\xae\x16\x05\x0a\x63\x53\xa5\x01\x64\x4d\x27\xb9\xc2\x8c\xc5\x55\x81\xb0\x97\x2b\x15\x81\x50\x94\xac\xf2\x51\x5c\x4a\x4b\x2c\x2a\x90\xad\xd0\xec\xdb\xa5\x7f\xa9\x66\xdd\xcf\x9e\x4b\x59\x2b\x2f\x91\x5e\x8a\x52\xa8\xbb\x18\xbb\xac\xe9\x5a\x9a\x87\x95\x2e\x03\x2d\x88\xc5\x04\xe6\x50\xd4\x80\x26\x20\xc0\x51\xe4\xdb\xc0\xf4\x22\x59\x15\x21\x2a\x5d\xd2\xc5\x69\x14\x6b\xc9\xfd\xb2\xe5\xd0\xb4\x69\x1e\x20\x4c\x55\x57\xc5\x56\x14\xa2\xe8\x3c\x08\xfc\x5c\xb1\x4c\x12\x43\xa2\x5e\xac\x0e\xc3\x4c\x72\x1a\x13\x92\xf2\xc8\x98\x96\x45\x30\x22\x6d\x59\xc9\xae\x4b\xea\x5c\x7a\x41\x89\x65\xa6\x01\xb7\xc0\x47\x3f\xbd\x98\x3c\xe1\x55\x2f\x28\x4f\x90\x37\xb2\xa1\x40\xf0\xb8\x4d\x44\x99\xe8\x34\x34\x4a\x97\x22\xb2\xb2\x76\x28\xf7\x54\xad\xdb\x32\x04\x49\xc9\x6d\x5e\x6a\x00\x8b\x56\xf6\xc2\x73\xa9\xc2\x50\x4b\x04\x6d\x5c\x96\x46\xfa\x65\xed\x65\xd6\x35\xa5\xd6\x51\x5d\x71\xbf\xa9\x6c\xa3\xa8\x97\x96\xb9\x48\xaa\xbc\x30\xda\xb4\x55\x2f\x08\xca\x51\x42\x72\xc7\xbc\xac\x06\xb1\x4f\x60\x99\x59\x9f\xba\x24\x28\xbc\x90\x2b\x4f\x45\x9d\xed\x6c\x05\x7d\xd4\xc1\xb4\x0b\xea\x4e\xeb\x22\x6d\x8b\x5e\x10\x25\x42\x5f\x07\x59\x42\xa4\xdf\xa8\x2c\x4e\x88\x2d\xfd\x2a\xaa\xbb\xb8\x09\x5d\x53\x18\x92\xf1\x20\xf3\x62\xa8\x22\x5d\x14\x2c\x11\x56\x05\xbc\xe8\x05\x51\x22\x8b\x50\xc4\x2a\xc0\x64\x9b\xd9\x82\x46\x5e\xd9\xea\x40\x35\x2d\x46\xdc\x0f\x42\x90\x30\x4a\x0c\xef\x64\x48\x12\xc6\x69\xe7\x33\xc6\xe7\xb0\x46\x6d\x9f\xc1\xeb\xee\x7d\xfe\x59\x4f\x3d\xb4\xee\x7e\xbf\xae\xaf\xff\xf2\x94\x81\x5b\x4e\xdd\x7c\xe3\x11\xeb\xbc\xfa\xfd\x6e\x27\x3c\x70\xe1\xfa\x97\x8c\x23\xff\x8d\x6c\x74\xf2\x99\x1f\xbc\x84\xee\x9a\x30\xfe\xb5\x76\xec\x3b\xbf\x5f\x7f\x8d\x0d\xb6\xfa\xe8\x60\x7f\xdc\x5e\x87\x8c\x19\xf6\xc6\x21\xab\x2f\x77\xc3\x3c\x6e\x16\xe8\xc0\x68\xf3\xef\xa7\x7c\x77\xe2\x0e\x3b\x8e\xf9\xdb\x6e\x57\x2d\x1b\x6f\xba\xce\x85\x67\xbf\x43\xfe\xfe\xe4\xa4\x9b\xf1\x85\xe9\xd6\x64\xf9\xcb\x67\x81\x8e\x3b\xe1\x93\xbb\x6f\xb8\xe2\xb0\x9d\x56\x7d\x7e\x9b\xfd\x0f\xbf\x6b\xcc\x39\xdb\xb1\x0b\xb7\xb9\x77\xd7\xed\x46\xfd\x30\xf4\x87\x47\xee\x5a\xe3\xcf\x07\xcd\x02\x9d\x74\x27\x7b\x0d\xbe\xb9\xcd\xd1\xf9\xc6\xab\x1f\xf3\xed\x35\xe0\xea\xf5\xf7\x3c\x6e\x81\xcf\xf7\xae\xa3\xe1\xf1\x53\xbb\xa9\x21\x73\x2f\x3d\x0b\xf4\xa5\xc1\x5b\x8c\x7e\xec\xb9\xfb\xae\x9d\x79\xd5\xb0\xb3\xd8\x6d\xa7\xfd\xf0\x1c\xdc\x95\xad\xb4\xcc\xa2\x9f\x5c\xb1\xc9\xf9\x8b\xde\x73\xc3\xa9\x9f\xcc\x02\x3d\xe5\xd3\xfd\x16\xd9\x6f\xc8\x1a\xbb\x7c\x7b\xdb\xd9\x2b\xcb\x97\xf4\xb3\x37\xcd\x1c\xf4\xda\x7d\xef\xbf\xbb\xcc\xeb\xf7\x5e\x32\xfe\xd2\x37\x0e\xfc\xcd\x2c\xd0\x6d\x2e\x39\xea\xd3\x07\x1f\x79\x69\xc7\xe7\x26\xfe\xb0\xec\x51\x1f\xdf\xf2\xc8\xe6\xb7\x0c\xbf\xec\x94\x4d\x6f\x3f\x7d\xfc\x4a\xe1\x69\x03\x9e\xda\xff\x96\x59\xa0\xf0\xb2\x51\xdb\xfc\xf0\xe9\xc9\x03\xde\x5c\xfa\xc9\x45\xa6\xdc\xb6\xea\xf8\x55\xf6\x89\xf7\x79\x7e\xae\x0f\x47\xbc\xbf\xdf\x1a\x57\xbc\x7c\xdb\x31\xd5\x3f\xc9\x46\xbf\x74\xaa\xfd\xec\x3e\xc6\x2e\x17\x5a\xe5\x20\xd1\x09\xcb\xfd\x2c\x87\x79\x5d\x54\xbe\x4c\x93\x3a\xc0\x2d\x2a\xeb\x4a\xea\xb0\xe2\x2c\xa5\x81\x6a\x38\x0e\x45\xd8\x8b\x65\x24\x11\xc8\x2b\x8b\x50\xe4\x2b\x43\xfc\xac\x86\x5d\x1a\x94\xb1\xf5\x35\x54\x59\xd2\x70\x26\x3c\x0b\x53\xc7\xba\x84\xb7\x18\xb4\x8a\x72\x8e\x5c\x4f\x1a\x1e\x42\x46\x44\xa2\xfc\x0c\x91\x36\xaf\x2d\x40\xb4\x0c\xd3\x3c\xa7\x4d\x46\x41\xe9\x1b\x51\x8a\x28\xed\x6c\xe4\xa7\xb0\xae\x9a\x2a\x12\xa0\x17\xdb\xea\x11\xf0\x80\x4c\x0a\x09\x92\x4c\x64\x5d\xe3\xb7\x51\x81\x58\x98\x15\x41\x58\xe4\x51\x10\xb5\xca\x86\x3e\x6d\x75\x81\xe3\xce\x59\x1a\xe6\x9e\x10\xbd\x48\x45\x96\x14\x99\xd2\x47\x58\x62\x98\xe5\x30\xcb\x24\x4e\x79\xdd\xc8\x38\x6e\xa8\x6e\xe2\xc4\x28\x10\x37\xa6\x75\xc0\x28\x8f\x76\x1e\x6c\x05\xea\x85\x13\xeb\xc5\x2d\xcb\xbd\xd6\xe5\xa8\x00\x91\x6c\x5b\x60\xf3\x40\xa0\x14\xd6\x6d\x25\x75\xfb\xd3\x5f\x5a\x3f\xad\x9a\x58\x54\x28\x4f\x7d\x80\x68\x4f\x56\x7c\x4b\x19\x9b\x26\x16\xd2\x8b\x58\xca\x28\x40\x29\xf0\x58\x50\x94\x95\xed\xd2\xa4\x2c\xb9\xc1\x50\x61\x25\x05\xf2\x8c\x71\x81\xad\x6c\xde\x93\x46\xe2\x20\x75\x20\x81\x21\xa7\x1a\x03\xdd\x79\xc8\xef\x70\x6d\x0b\xca\x1d\x50\x20\x4d\x39\x34\x11\x50\xda\x81\x8c\x79\xac\xf0\x72\x84\x75\x37\xfb\x16\xde\x5f\xb2\xc3\xfd\x6c\x5c\x60\xdd\x96\xda\x65\x79\x8a\x30\xeb\x9c\x61\xb6\x6c\x9a\x8c\x37\x3f\x05\x3d\xb1\xad\x02\x9d\xe7\x26\x74\x48\xa5\x91\x2a\x62\x12\xd5\xac\x8e\x7b\xe1\x3e\x1a\x63\x3c\xd9\xa6\x69\x00\x80\x89\x33\x01\x2a\xd3\x88\x16\x01\x83\x75\x95\xd2\x40\xd4\xaa\x0d\xa2\xbc\x63\x45\x6d\x48\x56\x6b\xbf\x29\xbc\x5e\x48\xc1\x85\x17\x80\x2c\xce\x3d\xcb\xa4\xef\x1b\xee\xa7\x75\x04\xe2\x52\x24\x90\xb1\xd4\x2f\x4b\x95\x99\x82\x94\x94\x04\xa8\xee\x48\x92\x73\xd3\x0b\x0e\x61\xe4\x9a\x0e\xa3\xd2\x45\x52\x10\xc5\x1d\x65\x3a\x4e\x23\x0e\x73\xc5\x31\xe3\x5a\x95\x69\x20\x72\xa8\x9c\x4a\x7d\x5b\xd1\x3c\x2a\xfc\x82\xf5\xa2\x05\xc5\x27\x89\xe9\x9a\xaa\x36\x89\x5f\x52\x19\xca\x20\xc8\x43\x50\x14\x1c\x1a\xc7\x98\xd7\x79\xd0\xb9\xba\x64\x1e\xd7\xaa\x89\xbc\xac\x09\x44\x4f\x0c\x6d\x4b\x24\x0b\x02\x5c\x91\x0e\x05\x5c\x74\x3e\xd3\x20\x0c\x70\x1d\xd2\x5a\x5b\xc5\x0a\x85\x88\xc4\x01\x27\x14\x13\x28\x4c\x08\x75\xd6\x8b\x16\x5e\x14\x49\x10\xf8\x20\x55\x31\x49\xab\xae\x6c\x79\x60\x41\xe2\xdb\xa8\x48\x23\x21\x49\xc2\xcb\x30\x2c\x28\x2e\x38\x14\x2a\x64\x50\xd2\x14\xa1\x5e\x98\x38\x50\x93\x18\x86\x71\x9e\x99\x3c\xf1\x9d\x96\x28\xf1\x4a\x46\x0c\x82\xad\x4b\x72\x55\x25\x5d\xdd\x06\x6d\x94\x29\x03\xb3\xd0\x16\x0a\xe5\xa0\x9e\xcd\xb8\xfc\x92\xe7\xd6\xdf\x8d\x30\xb1\xdf\x05\x65\xaa\x51\x03\xfc\x56\xf1\xa4\xf4\x92\xba\x23\x08\x14\x81\xc2\x88\x89\x46\xbb\xd6\x26\x24\x87\x14\xc9\x26\x26\x6d\xe9\x58\x2f\xba\xec\x20\x24\x5a\x67\x49\x96\x82\x38\x27\x3c\x4c\xb3\xd8\x67\x94\xb5\xb9\x60\x50\x55\x1a\xb5\x4a\x29\xca\x12\x0d\x6b\xad\x48\x96\x41\xe1\x7a\xc1\xa7\x8c\x6a\x81\x6a\x96\x89\xce\x2b\x9a\x2c\x10\x59\x82\x1d\x23\x30\x51\x65\x42\x1a\x3f\x20\xdc\xf9\x6d\xe5\x48\x18\x71\xc9\x40\x64\xa0\xfb\x29\x3c\xea\x85\x14\x55\xa8\x89\xe2\x15\x28\x3c\x64\x61\x5a\x86\x79\xac\x7d\x1b\x26\x71\x56\x36\x35\x67\x41\x51\xd4\x44\x34\x18\xb3\x90\xd5\x8d\xd6\x85\x41\xbd\x90\x42\x24\xd6\x94\xc2\x26\x89\x07\x2a\x1a\xd3\xd4\x84\x51\x59\x67\xae\x0e\x3b\xbf\x6e\xd2\x82\xe1\x98\x35\xb1\x62\xdc\x19\xbf\xe9\x60\xd2\x96\x3d\x89\xc7\x58\xe4\x35\x12\x17\x2a\xc0\x8c\xf9\x14\x61\x8f\xca\xa8\xa3\x91\xcc\x71\x11\x85\x3e\x0c\x28\xae\x02\x95\x34\x34\x6f\x43\x0e\x2b\xa4\xab\x9e\x0c\x16\x8f\x3c\xc7\x03\x1d\x25\x3c\xe0\xae\x71\xa2\xad\x53\x2d\x1a\xc8\x44\xe9\x17\x48\x57\x29\x47\xa6\x90\xb4\x0e\xfc\xca\x14\x41\x04\x0a\xe0\x64\x2f\x26\x10\x6b\x6b\x21\xcc\x68\x40\x48\xa8\x75\x2d\x4d\xc5\x31\x01\x45\x25\x8b\x8c\x46\xda\xcf\x32\x51\x17\x80\xe4\x84\x67\xc2\x82\xac\x70\x21\x32\xb3\x7b\x2e\xbf\x14\xeb\xf5\x77\xc9\x0e\xd3\xb4\x83\x81\x0b\xb1\x6c\x4a\x5f\xa6\x2c\x04\x39\x67\x56\xc7\x7e\x1b\xb1\x8c\xf3\x5a\x36\xa5\x0e\x62\xaa\x55\xd3\x19\x26\x4d\xd0\x8b\x49\xfd\x51\x16\x81\x24\xcc\x64\xd0\xe4\x9a\xb5\x11\xe2\x12\xd2\x34\x2a\x49\xe6\x49\xd7\x78\x36\xf0\x92\x3a\xae\x9b\x24\x0a\xfc\x28\x33\x29\x2e\x21\x05\x3d\x19\xa6\x6d\xd2\x8e\xc4\xb1\x97\x43\x13\x82\xc2\x64\x11\xa4\x5d\x5a\x86\x8d\x75\x2c\x0b\xc2\x80\x0b\x65\x4a\xd3\x24\xc6\x65\x50\xa7\x59\x9b\x94\x45\x4f\x16\xb3\xe0\x18\x78\xcc\x76\x06\xea\x2e\x4f\x8d\x60\xa0\xc8\x12\x82\xd2\x36\x72\x82\x00\xa4\x82\xc4\x98\x90\x07\x1a\x11\xe3\x1c\xaf\x38\xe3\x3d\x58\x29\x17\x09\xa9\x9b\xba\xc0\xad\xd1\x95\x06\x2a\xe1\xb0\xa8\xf2\x4e\x34\x21\x2a\x48\x59\x9b\x80\xc0\xc2\x32\x61\x1c\xf7\x3d\x19\xa6\x29\x60\x08\xf4\x64\x19\x49\xa7\xa5\xe5\x45\x91\xc4\x89\xd4\x25\x02\xdc\xa4\x28\xa3\x5d\x0c\x0b\x85\x5a\x2f\xd0\x61\x8e\xd3\x52\xfa\x44\xe2\xc8\x53\x31\x20\xbc\x27\x94\x71\x92\x93\xd4\x0f\x09\xa1\xb9\x88\x10\xc0\x79\x05\x32\xa4\xb2\xbc\xe3\xcc\xb7\xac\x61\xb8\xac\xf2\x82\x47\x81\x13\x9a\xb0\x04\x42\x9f\xf5\xa6\x2b\x06\xa5\x81\x91\x7e\x88\x10\x54\x45\x42\x70\x5b\x59\x08\x91\x80\x29\x54\x1d\xd0\xb1\x34\xb0\x6e\xd3\x32\xc6\x94\x84\x65\x1e\x18\xe9\x89\xd9\x4b\x76\xbf\x94\x1d\xea\xe7\xb0\x48\x82\xb6\xee\x28\x74\x44\xeb\x8a\xc6\xce\xd8\x00\x23\x9a\x86\x45\xec\x39\x19\x96\xc8\x48\x86\x49\xa3\xea\xb8\x6a\x72\x9a\xd7\x69\x13\x8b\x5e\xb0\xdc\x8b\x08\xda\xb8\xca\xa2\x5a\x05\x0e\xd3\xa0\xa3\x79\xe6\xd9\xd0\x22\x84\xea\xc8\x2a\x84\xb2\x44\x69\xbf\xa9\xb2\x32\x4d\x68\x9a\xa0\x16\x97\xbd\xb8\x50\x10\x72\x04\x82\x3a\x97\x2c\xca\xd3\xb6\x05\x35\xe6\x4d\xd7\x62\x55\x05\x3e\x44\x81\x97\x5b\xee\x09\xa9\x95\x91\x32\x42\xca\x55\xa4\xee\x05\x87\x30\x92\x38\x0f\x12\x05\xeb\x3c\x84\x12\x81\x80\xe4\x94\xf9\xbe\x07\x3d\x96\x30\x6a\x24\xe8\xbc\xac\x93\xba\x70\x6d\x93\x81\x1c\x59\x17\xb3\xa8\x17\xed\x44\x31\xae\x49\xa9\x35\xb0\x15\x03\x01\x55\x01\x15\xcc\x18\x03\x74\x11\xc0\x4a\xb8\xae\xcb\xaa\x4e\xa7\x01\x4b\xa1\x08\xd2\x26\xb6\xca\x82\x5e\x9c\x85\x6d\x90\x0b\x71\x1d\x00\xdf\xd6\xac\xf6\x29\x40\x2a\x2e\x80\x89\x6a\x54\x75\xa4\x08\x4d\xea\x87\x90\x29\xaa\x0a\x9c\x95\x39\x09\x93\xb0\xeb\xc9\x32\x37\xbf\x16\x51\x6a\x33\xd2\x8a\x20\x0e\x74\xcb\x3d\x57\x16\x08\x1a\x3f\x05\x85\xaf\x85\x97\x23\x6a\x5d\x29\x63\x2f\xd1\x09\x2b\x2c\xc9\x7a\xb2\x53\xc3\x49\x01\xfc\xae\x45\x56\x9a\x2c\xad\x83\x2a\x32\xc4\xb0\x3a\x89\x8a\x4e\xd8\xcc\x2f\xfd\x2a\x6f\x13\x5a\x12\x2f\xe8\x2a\xc8\x1c\x88\x82\x72\xf6\xf9\x00\xbf\x94\x4f\xee\x67\xe3\x12\xa6\xa8\x36\xf1\x4f\x57\x27\x4c\xa9\x88\x55\xe9\x52\xd7\xe5\x71\x5e\x3b\xd4\xe2\xa6\x0d\xac\x4f\x2a\xdf\xe5\x71\xae\x1d\xe0\x61\x06\x54\xd9\x8b\x08\x5f\x07\x49\x51\xe6\x05\x74\x95\x0a\xa4\x85\x38\xf9\xc9\x95\x8a\xb3\x4a\xb6\xae\xa6\x81\xc8\x9b\x46\x55\x45\xc4\x95\x85\xb2\xd0\x45\xc7\x3a\xd6\x0b\x3a\x2c\x49\xca\xaa\xc6\x65\x4e\x0a\x43\x02\xde\xaa\x3a\xc5\x89\x6a\x81\x51\x88\x37\x10\xfa\x04\x35\x2a\x27\x0a\x9b\xa4\xf0\xa2\xb8\x2d\x8a\x3c\xea\xc9\x8e\xc6\x2c\x2f\xea\xb2\x76\xb5\x63\x5d\x00\x12\x65\xda\x10\xe0\x10\xb6\x6d\xdd\x80\xa6\x2e\x12\x50\x4b\x5c\x98\xba\xd3\x55\x6b\xdb\x42\x94\x41\xd2\x0b\xf6\x5e\x99\xb5\x34\xe1\x38\xce\x98\xac\x18\x16\x61\xa2\x54\x28\x65\xd7\xba\x20\x25\x81\xea\x5c\x19\xea\x36\x32\x22\x0f\xbd\x2a\x83\xa6\x25\x22\xe9\x45\x16\xac\x71\x51\x9d\x76\xa4\x4a\x72\x49\x9d\x12\x61\xc5\xa4\xc3\x38\xf5\x38\x2c\xb3\x34\x06\x1e\x6a\x58\x66\x48\xd8\x21\xdf\xab\x48\x4c\x62\xdb\x93\xde\xe6\xd8\xe5\x41\x6e\x22\x8b\xb0\xc9\x62\x91\x63\x9f\x1a\x0d\x4d\x07\xbd\x12\x20\x02\x82\x52\x99\x18\x45\xc6\x26\x2a\xe1\x2a\xf6\x89\x33\x3d\xa1\x49\x63\x96\x35\xac\x73\xa1\x5f\x79\xb8\xf4\x5d\xa1\x54\x99\x05\x1c\x28\x0f\x2b\x4d\xa2\xce\xa9\x10\xb4\xa4\x65\xaa\x83\x42\x94\x80\x03\x5a\xce\x4e\x93\xfe\xa5\x0a\x54\x3f\x87\x45\x85\xc8\x33\x57\x27\x2c\x2e\x0c\x24\xad\x53\x21\xc7\x8d\xc8\x72\xd3\x35\xda\x5a\x3f\x76\x71\xe4\x5b\x56\x7a\xa0\x6a\x64\xee\x95\x5a\xc4\xbd\x48\xe8\x46\x2e\x07\x2e\xe1\x0a\x55\x1d\x80\x2c\x4b\xe3\xc4\x2b\x08\x66\x55\xc6\xe3\xc0\x51\xa2\x9c\xaf\xb3\x9c\x78\x34\x0f\x9b\x5a\xa7\x71\x54\x24\x55\x0f\x48\x25\xa8\xe9\x10\xec\x7c\xed\xb0\x17\x95\x69\xc2\x02\x1c\x34\x06\x84\x81\x81\xb5\xef\x41\x5c\x64\xc6\x23\x40\x1b\x83\x51\x93\x36\x50\x8b\xa8\xee\xc9\x34\xe9\xae\xac\xa2\x96\x53\x8e\x75\x2d\x99\x6a\x53\x8f\xb3\x9a\x25\x31\x01\x0a\xe2\x04\xc7\x12\x02\xdb\x36\x36\xce\x8a\x92\xc5\x2a\x37\x90\xf6\x62\x82\x72\xe4\x42\xee\x93\x10\x58\xc9\xda\xa6\x45\xb6\x6c\x62\x2f\x16\x88\x10\x09\x13\x4c\x03\xce\x22\xcf\x86\x79\x1a\x66\x5a\x75\x9d\xe0\x2e\x6c\x7b\xb2\x69\x3b\xe5\x2a\xac\x81\xc7\xbd\x88\x97\x2c\x6f\x3d\x1d\x4a\xa3\xa5\xf5\x09\x2f\x62\x8e\xb3\x84\x9b\xd8\xe0\x12\xd0\x30\xab\x58\xdb\xb6\x65\xc0\x7b\xf1\x45\xac\xcf\xb3\x9f\x42\x31\x9b\xe7\x6d\x85\xeb\xac\x75\x5c\x81\x54\xf2\x24\x94\xd2\x17\x79\x20\x68\x4e\x3c\x5c\xc8\xae\x4e\x59\x91\xc5\x21\x41\xbd\x48\x2b\x57\xce\x93\x89\xe6\xd8\xf8\x9d\x95\x41\x50\xf1\x22\x47\x1e\x22\x30\x71\x10\xea\x2e\xf6\xbb\x9a\xb3\xda\x2f\x84\x75\x65\x1b\x33\xeb\x60\x31\x7b\x6b\xfa\x2f\xd5\xac\xfb\x3b\xa1\xab\x90\x8f\x8b\x2a\x22\x4d\x88\x5b\x04\x45\x40\xca\xa8\xee\x60\x0e\x64\xee\x5c\x53\x1b\xee\x93\x26\xae\x59\xea\xb7\xc0\x76\x51\xc9\x40\x4f\x6a\x13\xca\xcb\x2a\xc4\x64\x2c\x3c\xe7\x21\x2d\xeb\x00\xf9\x41\x52\xb6\x8e\x24\x04\x00\x14\x5b\x89\x3d\x95\xe0\xba\x6a\x41\x65\xb4\xd1\x8d\x33\x3d\x69\xa1\xc1\x99\x60\x28\x8a\x48\xa2\x42\x5d\xb4\x65\xd0\x62\x99\x38\x9c\xf8\x0a\xd2\x8c\x74\x7e\x57\xc4\x0a\x67\x4e\x25\x80\x13\x58\x16\xce\xeb\xc5\x7c\x4a\x54\x34\x0a\x8b\x1a\x3a\x1e\x8b\x44\x46\xd8\x29\x07\x68\x4c\xfd\x0a\xfa\xaa\x89\x84\x8d\xc2\xaa\x43\x55\x1c\xff\xf4\x52\x11\xa6\x59\x49\x8a\x5e\xd4\xac\x3a\x60\x95\xd7\x26\x41\xde\x4a\x92\xe7\x22\x0a\xfd\x96\x06\xb5\x2b\x5b\x02\x43\xd8\xe4\xc0\xb6\x11\xcf\x93\xa6\x4d\x53\xc6\xf3\x36\xc5\x75\x4f\xa6\x64\xfa\x26\x8b\x61\xa8\x9b\xac\xcd\x6c\x13\x4b\x5a\x94\x3a\x4a\x2c\xf5\xb2\xa8\x0d\xbc\x30\x43\x52\x79\x22\xf6\xc3\x36\x80\xaa\xab\x5d\xdd\xf9\x3d\x19\x59\xa0\xbd\xd6\xb5\xa4\xb1\x81\x68\x5b\x97\x57\x49\x10\xba\xb2\x71\x2e\x86\x2d\x50\xb2\x41\xd0\xf3\x63\x15\xc5\x08\xb5\xd8\xcb\x78\x93\x86\xb8\x27\x93\x8d\x60\xc1\x15\x4e\x64\x14\x42\x0c\xb1\x97\xd9\xaa\x8a\xc3\x4e\x10\x55\x45\xbe\xac\xd3\x40\x20\xc4\x35\xc1\x3c\x54\x52\xc6\xa8\x91\x22\x9c\x85\x73\x7c\xe3\x3c\x3f\x1b\x17\xf5\xd5\xc0\x2b\x4e\x7b\x13\x8c\xdc\xe5\x8d\x63\x37\x3d\xe6\xa3\xd5\xdf\x5b\x73\xa5\x9b\x47\x2f\x77\xe7\xe3\xdf\xc7\x6b\x8d\x37\xab\x7a\xe2\xa0\x23\x07\x2c\xbf\xc8\x5c\x47\x6e\xb9\xf9\x31\xb3\x90\x68\xf6\xdb\xb7\xbd\x6b\xed\x6e\xf2\xfd\x47\x1d\x37\xa9\x3d\xfc\x2f\x23\x6f\xbf\x73\xb1\x99\x03\xdf\xfc\xa3\xdb\x6d\xe6\x87\x33\xde\xaa\xc7\xbd\xb2\xeb\xff\xa1\xd0\xc3\xff\x8b\xa0\xf5\x4b\xc0\xff\x46\xd0\xe2\x37\xdd\x34\xf5\x8e\xcf\x2f\x56\x7f\x7f\x7e\xde\x4d\xf6\x78\xf3\x90\x6d\x6e\x7b\xf3\x9a\x65\xb7\x6b\xd7\xda\xf6\xc2\xfb\x4f\x9b\xf0\xde\x7e\x9f\xbf\xf7\x7f\xa1\xff\x0b\xd0\x7f\x7e\x84\x5f\x02\xfe\xb7\x8f\x70\xd3\xc0\xcf\x3f\x1c\x92\xdd\x74\xf5\x5e\x57\xbc\x70\xe2\xf0\x15\x3e\x79\xee\xad\x70\xab\x77\x07\xb4\x7f\x5a\x6d\xec\xe8\xf9\x8e\x9d\xb2\xef\xba\xdf\xfe\x5f\xe8\xff\x02\xf4\xf0\x9d\xfe\x3d\xdc\x3f\x3c\x93\x23\xe7\x1a\x32\xe4\xff\xeb\xcf\xc7\x0b\xff\xfc\x9f\x81\xc3\x86\xac\x72\xc6\xde\x4f\xfc\x30\x78\xf0\x84\xfa\xd1\x3d\xe5\x5b\xd3\x86\x1d\xf0\xec\x89\xf3\xdf\xfe\x28\xda\xfc\xd0\xd5\x56\x3c\x7a\xcb\x8d\xc6\x8e\xfa\xf1\xc7\x1f\x7f\x3c\x6b\xc8\x85\xd1\xb0\x59\x44\x7d\xf4\xd0\x8b\x6e\xa6\x1b\xbf\x17\x8f\x58\x59\x8d\xdf\x75\xad\x25\xee\xbe\xe0\x8a\x19\xd7\xde\xbf\xd3\x5a\xeb\xee\xb9\xff\x12\xd3\xf7\xda\xff\xee\xfb\xfa\xa2\xdb\x25\x36\x7f\xf0\x91\xcd\x16\x5f\xa5\x9c\x7f\xd4\x32\x0f\xae\xb4\xe0\xc4\xa3\xae\x1d\xbe\xd8\x67\xaf\xae\x3a\xee\x82\xd1\x77\xbc\xfa\xeb\xbd\x07\x3d\xd6\x17\x7d\xdb\x5d\x9f\x2d\x73\xf5\x37\x77\x3d\xf4\xee\x16\x83\x77\x7b\xe1\xf2\x47\x0e\x3b\xe3\xac\x15\x47\xe2\x29\xaf\xef\xb8\xe4\xc5\x9f\x6d\x7a\xfe\x67\xd9\xf4\xbe\xe8\x13\x87\x4f\x7b\xfe\x89\xc1\xbf\x7e\x70\xcd\x7a\xff\xeb\x17\xfe\x3b\x1c\xba\x34\x3a\x63\xbd\x97\x4f\x5a\xaf\xd8\xf7\xd3\xcb\x9e\x91\xf4\x9b\x5f\xf7\x45\x2f\xb0\xfd\xf2\xe7\x5d\xf0\xc1\xc0\x49\x63\xcf\xd8\x7e\xb3\x87\x37\x78\x64\xae\x4b\xbe\x78\x76\xf2\x12\x93\x3e\x1b\x5c\x8d\x79\x01\xae\x7b\xd0\xf5\xef\xf6\x45\x3f\xf8\x9b\x97\xaf\xfe\x66\xfa\xa2\x43\x87\xbf\xb7\xd1\x25\x9b\xaf\x1a\x7e\xb9\xfa\x86\x5b\xf3\xe4\xa6\xf7\x17\x58\xcb\x1c\xb9\xc3\xeb\xeb\x3f\x79\x67\x5f\xf4\x9e\xeb\x2c\xb5\xf7\x6a\xf3\x2d\xbc\xe4\xb8\x19\x77\x2e\x3e\xf8\xf6\x47\xde\xf9\xd5\x7d\xea\xe0\x53\xff\xf6\xe0\x8f\x9b\x2e\xfc\xbb\x8b\x16\xdc\x7c\xc4\xca\x7d\xd1\xf3\xac\xb7\xcc\x04\x3e\xf3\xdc\xdd\xe6\x1e\xbd\x75\xbd\xc0\x35\x43\x76\x1e\xf6\xec\xa9\xdb\x0c\x7a\xea\xfa\xaf\x0e\x38\xe0\x98\x0d\x37\x7a\xec\xe9\x5b\xfa\xa2\xc7\xed\x72\xee\xdd\x5b\x1d\x3c\x71\xd1\x5b\x97\x7e\x62\xe4\xeb\x7f\x3e\xfe\x94\xd1\xf4\xdc\x37\x2f\x3b\x6b\x5c\x7d\xca\x32\xf2\x8e\x71\x0f\x9f\xbb\x77\x5f\xf4\x6b\x64\xd4\xa8\xfb\x96\xb9\xf8\xe2\xc5\x17\x5f\xed\xa4\xa7\xdf\xbf\xeb\x8b\xa9\x7b\xbc\xfd\x60\x8a\xcf\x1f\x30\xff\xe0\x33\x7f\x1c\xfb\xed\x41\x3f\xf4\x45\xdf\xbd\xd8\xe7\x1b\x6e\x5c\x5e\xfe\xe2\x5d\x2f\x3c\xb1\xd2\x1e\xed\x25\x9b\xbf\xf0\xd9\xf8\x85\x6f\x7a\x76\xc9\x53\x77\xdd\xed\xd3\xd7\x8f\xdb\xe8\xd0\x6b\xfa\xa2\x3f\xff\xe4\x3a\xff\xa1\x21\x07\xcc\x5f\x5f\x73\xc3\x15\xaf\x42\x50\xbd\x3b\xf1\x8f\xa3\x07\x9b\x9d\x92\xa7\x27\x5d\xf4\xc8\xa0\xeb\x3e\x3c\xb9\x2f\x7a\x1a\xd8\xf3\xf0\x8b\x26\x3e\xf6\xd4\xfc\x87\x3c\x78\xe4\xcc\x87\xdc\xfe\xea\xab\xcb\xf7\x5f\x6d\x26\xfc\x71\xec\x9f\xbe\x3a\xfb\x95\x93\x3f\x59\xad\x2f\x7a\xdd\xd5\x47\x5e\x73\x14\x5a\xff\xe9\x2f\xc6\x2f\xfd\x8a\xff\xa7\xed\x37\xf9\xe8\x8b\xe5\xd7\x7b\xff\xf3\xcb\xf6\x99\x54\xde\xf7\xf9\x37\xaa\x5c\xb0\x2f\xfa\xf4\x23\xba\x19\xa3\xe2\xcf\x9e\x6b\x97\xd9\x6e\xd8\x41\xdb\xbf\x79\xce\xce\x3b\x4d\x1b\xb3\xe1\x65\xa3\x26\x9d\xbf\xcf\x81\x23\xbe\x5e\x6d\x43\xdd\x17\x7d\xe7\x69\x74\x64\xb0\x72\xfd\xe3\x43\x7f\xb8\x65\xbd\x13\xdf\x9a\x7b\x7c\xb6\xe3\x1d\xaf\xbf\xf5\x70\x7b\xda\xdb\x6b\xe6\x4b\x6c\xb3\xc0\xb6\xf7\xf7\x45\x2f\x3f\xe6\x9a\x76\xc0\xbc\x3f\x5c\xb8\xee\xb8\xb5\x5f\xcc\x07\xbe\x24\x8e\x3b\x73\x95\x31\x4f\xac\xb9\xe6\xb9\xc3\xc9\x85\xdb\x6f\xfa\xce\xc4\x23\xfa\xa2\x07\x2f\xba\xef\x98\x77\x4f\xde\x60\xaf\x1d\x46\x7e\xbb\xde\x13\xe0\x85\x6d\xff\xfc\x64\x08\x57\x69\x97\x3b\x70\xf2\x17\x9f\x5d\x78\xc2\xb6\x7f\xb8\xb2\x2f\x7a\xf1\xa3\x17\xda\x75\xdf\x7b\xc0\x35\x0f\x8f\x1e\xf6\x9b\x1d\xbe\x7f\xab\x51\xdf\x9d\x71\x9c\x39\xfd\xa5\xf7\x9e\xbc\xf3\xb4\xc9\xeb\xdc\x75\xcd\x3e\x7d\xd1\x97\xad\xfa\x97\xa9\xd7\xbd\x76\xd0\xe6\xde\xa0\x6f\x27\xac\xbe\xea\x1a\xb7\x6c\x71\xcf\xcd\x97\x64\x3b\x8f\x64\x0b\x0c\x7d\x67\xfe\xcb\x6f\x7a\x60\x44\x5f\xf4\x1d\x77\x9f\xf6\x83\x5d\x79\xf1\xc1\x5b\x6e\xf2\xf7\x99\xa7\x5f\x75\xf3\xaa\x6f\x4f\x9f\xba\xd3\xdf\x1f\x3d\x6d\xe4\x37\x9f\x9f\xfa\xf6\x8c\xe9\x5b\x5f\xdc\x17\x7d\xd7\x3a\x2f\x2f\x52\x7c\xb1\xd8\xe5\xdb\x1f\xff\xe5\xb5\x5b\x6f\x78\xeb\x46\x03\x27\xdc\xb7\xda\x49\xc5\x0f\x9f\x3d\xfe\xd4\xd5\xc3\x86\xaf\xe6\xdd\xd3\x17\xbd\x75\xbc\x66\xe1\x4d\x5b\xf4\x96\x47\x76\x98\x87\x3d\xb3\xe4\x4a\xbb\x3e\x70\xde\x80\xed\xb6\x7c\xe4\xd9\xdd\x92\xb3\xb6\x7b\x76\xe9\xbd\xdf\xdd\xb9\x2f\xfa\xbb\x1b\x47\x1d\x77\xcf\x47\xf0\x90\x1f\x2f\xfb\xe8\xce\xeb\xb6\x5f\x6a\xa1\x79\x8e\xf8\x76\xff\x57\xbe\xdd\xf2\x8f\x9b\x7f\x32\xf7\x7e\xe6\xcd\xaf\x5e\xea\x8b\x3e\xf2\xc6\x1f\x5f\x7a\x89\xff\xf6\xd2\xa3\x76\x2d\x76\x1d\xf1\xc0\x11\x3b\x3c\x76\xdf\x94\xab\xd6\x5d\xec\x8c\x6b\x8f\xbe\xf1\xc7\x8f\x3e\x9c\xf0\xc4\xc7\x7d\xd1\x33\x8e\xdf\x70\x89\xe5\x46\x9b\x43\x36\x1a\x73\xf5\x62\xe7\xcd\x6c\x86\xef\x79\x6c\xba\xe9\x5d\x5f\x7f\x34\x60\xb5\xe2\x89\x23\xaf\x4c\x67\x0c\xec\x8b\x3e\x66\xd1\xc9\xb7\xed\x77\xf2\xb5\x7f\xfa\x7a\xa9\x6c\xf8\xf4\x63\x36\xda\xfd\x8b\x07\x6f\xda\xfd\x90\x65\xf7\x7d\x64\xd0\x71\x23\x3f\x7a\x68\xaa\xbe\xb4\x2f\x7a\xcc\xe3\x7b\xac\x7d\x09\x59\x69\x61\xfa\xd5\x7a\xab\x1e\xb0\xf4\x29\xdd\x2a\xb7\x3c\xf6\xc3\x14\x76\xf3\x91\x1b\x6f\xb4\xc5\xb8\xc7\x1e\xf9\x76\x5c\x5f\xf4\x88\xf3\xde\x1a\xf7\xf2\x4a\x0f\xae\x74\x94\x77\xdc\xfa\xf5\x3b\x5b\xbd\xfd\xfd\x77\x73\x7f\xb8\xef\x4b\xd3\x17\x59\x67\x99\x37\x0e\xdd\x69\xc3\x61\xae\x2f\xfa\x86\xa5\x8e\xda\xfd\xd3\xdb\x67\x9e\xfd\x75\x72\xde\x55\xed\x16\x3b\xcc\x9f\x6c\x60\xe9\xdc\xe9\xf5\x63\x56\xdc\x68\xcb\xf2\x8e\x2d\xb6\xff\x6f\xf7\xd2\xdc\x7a\xc5\x89\x5b\x8d\x5c\xe1\xec\xa7\xe7\xf3\xe6\x5f\xe5\xfa\xef\x7e\x93\xdc\xb8\xdb\x5f\x6f\xdf\x23\xd8\x6c\xee\xe8\xc5\x6d\x77\x3e\xfd\xb5\x35\xfa\xa2\x1f\xd8\xf5\xf1\x6d\xaf\xbe\x73\xe5\x6c\xfb\x3d\xde\x9f\xfa\x7d\xf9\xf2\xf8\xf9\x66\x7e\x7c\xe2\x33\x97\xad\xb2\xdd\xc2\x87\x0e\x04\xaf\x8c\x59\xf1\xb3\xef\xb7\xfd\xf7\x2c\xf7\xbf\xec\xfd\xf0\x23\xc6\xee\xbb\xd6\xcf\xff\xe8\x88\x5b\xff\xfa\xf5\x53\xef\xc2\xf4\xaf\xe7\x5e\xf6\xd7\x85\xf4\x1f\xe6\xfd\x78\xc7\x4d\x16\xb0\x7f\x9d\xb1\xcf\x69\x83\xe6\xfb\xf0\x84\xb7\x96\xbb\xe8\x3f\x72\xae\x93\xad\xe7\x7a\x77\xb6\x40\x43\xe4\x5e\x83\x05\xad\xe3\xd2\x60\x11\x14\xbe\x8b\x70\x2c\x63\x15\x25\xa1\x75\x28\x89\x15\x6d\x10\x6b\x72\xc7\x65\x51\x37\x01\xe4\x92\xbb\x7f\xb4\xdf\xdf\x38\x7a\x8b\x2d\xb6\xe8\x23\x32\x3a\x7c\xdd\x93\xde\xfa\xe6\xe2\xe4\x9b\x95\x3e\x1c\xea\x1f\x31\xe0\xd3\x8d\x17\x5f\x6d\xc6\x06\xa7\xde\x35\x91\x95\xc7\x26\xe7\xae\x76\x60\xf6\x1f\x89\x9c\x6e\x3d\xd7\x7b\xb3\x93\x85\x03\x60\x79\x1e\x28\xdc\x35\x9e\x1f\xd0\xb2\x03\x24\xa6\x32\xcf\xa3\xa8\xaa\x83\x8e\xf8\xa9\xa6\x2e\x2d\x6c\x1a\x66\x34\x48\x62\xc9\x0b\xf0\x8f\xb4\xe0\xf5\xfb\xfd\x2c\xf2\xd8\x7f\x8a\xbc\xcf\xa0\xab\x2f\xfe\xe3\x23\xef\x1e\x32\xef\x66\xbf\xfd\x6a\xcb\x8d\xf6\x78\x7f\xfb\xcb\x6e\x3d\xf2\xb1\x63\xbe\xa4\x3b\xac\x3f\x64\xed\xc5\x67\xbc\xf5\x87\xfe\x3b\x65\x10\x09\x1c\x8a\x30\xec\x0c\x0c\x4a\x1f\xa9\x22\x4f\x25\xf5\x7d\x49\xea\xaa\x8e\x75\x52\xba\xae\xf3\xb4\x64\x9d\x4e\xe2\x98\xc7\x41\x16\xff\x3c\x11\xfc\x1f\xa7\xfc\x4f\x71\xcf\x6e\x5e\x7d\xe6\xa4\xed\x6e\xb8\x64\xb9\x6e\xcf\x33\x87\x8c\xbf\xfc\xfd\xa9\x27\x4e\x7e\x6f\x80\x9b\xff\xb0\x3f\xdf\xf6\xdd\xe7\xa0\xb9\x7c\x72\xff\x89\xeb\x45\xa4\xcc\xa0\xe7\x55\x14\x28\x9b\x66\x24\x0b\xab\xb4\x4e\x50\x8b\x0c\x49\x28\x44\x44\x9b\xb4\x8a\x5d\x2b\x0d\xa3\x89\x27\x70\x94\xcb\x68\x56\xa5\xf8\xd7\x09\xaf\x9a\xad\x50\xed\x7c\xce\x5f\x0e\x5b\x65\xc7\x7b\xbe\x78\x62\xbd\xf7\x7e\x7f\xf9\xbd\x67\xfe\x6d\xb9\x3f\x8c\x78\xe7\x6f\x4f\x1c\x53\xad\x32\xdf\xad\x6d\x3f\xa6\x73\x64\x97\x49\x07\x02\xe1\xc5\x11\x56\x50\x27\x8d\x49\x9b\x38\x88\x52\x02\x94\x6a\x63\xd0\x06\x96\x63\xcb\x43\x1a\x85\xc4\xf9\x30\x6e\x8b\x7f\x15\xe6\xff\x29\xee\x47\x37\x0e\x3d\x69\xe7\x69\xf3\x9c\x74\xc1\x0a\xe9\xed\x6b\xac\x38\x61\xc6\xef\x36\x3c\xcf\x7f\xf2\x86\xf7\x6f\xdb\x6c\xb3\x61\xc3\xb2\xfd\x9e\xde\xa6\xff\x74\x58\x59\x2f\xe9\xb8\x60\x61\x6d\x84\xc0\x2e\x52\xc4\x04\x31\xef\x12\x66\x99\x2d\x94\x01\x46\xe6\x65\x2a\x60\x99\x45\xd4\x09\xbf\x6c\x8a\x42\xcf\x59\x87\x57\xbc\x69\xc7\x2f\x37\x5a\x6f\xc6\x0b\x73\x3f\xa2\x2f\x9b\x76\xd9\x2d\x47\xda\x60\xd4\xb9\x97\x4c\x1c\x74\x53\x77\xea\x3b\xc7\x14\x8f\xff\x6e\xbd\x7e\x53\x8a\x08\xda\x94\x26\xb2\x34\x0e\x77\x28\xcb\xb3\x54\xd7\x0e\xc6\x3e\x52\x84\x04\xa8\x51\x38\x09\x32\x59\x78\x1d\xc9\x32\xcd\xb3\x86\xfa\x61\x89\x8a\xd9\x75\xf8\xd9\xdb\x9e\x38\x6e\x9d\x65\x77\x3b\xe0\x9b\x75\x56\x38\xe5\xa5\x41\x8b\x9f\xfc\xda\x27\x66\xc2\xd1\x1f\x9c\xb4\x6e\x79\xf5\x6a\x53\xc7\x7c\xba\xec\x4b\xfd\x76\xc2\x28\xa8\x80\x20\x21\x8a\x3d\x53\x01\x43\x70\x96\x26\x45\x17\xc5\x38\xf0\x9b\x3a\x65\x51\xc4\x0d\x60\x20\xae\x49\x4a\x3a\x2f\xe8\x94\x95\xf4\x67\xee\xcc\xff\x7b\xc2\xb3\x5a\x7a\xe8\x0f\x7d\xfb\x94\x77\xde\xdf\xea\xbb\x53\x3e\xfa\x74\xf8\xb8\xed\xce\x9f\xb6\xed\xb1\x0b\x85\x03\x4e\x4c\x5f\xb8\xef\xe4\x23\x07\x3d\xb4\xe7\xe4\x0b\xa3\xe1\x47\xfe\xf3\x07\x1e\xbf\xcf\x85\x1f\xac\xf5\xb9\x1b\x27\x5f\x9d\xb8\xf6\x8d\xe1\x96\x8b\x0c\x9a\xbb\x98\xbc\x67\xb5\xc4\xcb\x4b\x46\x7b\xef\x73\xa9\x1a\x3d\xba\xff\x2e\x69\x13\x78\x41\xd3\x89\x40\x50\x89\x8d\xb1\x65\x53\x88\x94\x6a\x9a\x0b\x2c\x39\xeb\xea\x54\x28\x44\x52\x81\x29\x09\xe2\x86\x97\xb0\x8b\x99\x9d\xfd\x7b\xdc\x35\x7a\xd0\x6b\xa7\xfe\xfa\xbb\xb7\x93\xf5\x0f\xea\xf6\x1f\x72\xfc\x6e\xeb\x7d\xfd\xc1\xda\x9b\x5d\xb5\xc1\xdf\x6e\xfb\x72\xad\x21\xf5\x77\x87\xbd\xd0\x8f\xe4\x40\x58\x24\xac\x60\xb4\x89\x99\x69\x33\x8e\x34\x06\xa9\x5f\xc5\xd8\xd8\x90\xa6\x50\x46\x91\x6f\x52\x54\x7b\x0a\x7a\x0e\xb3\x0c\xf9\x6c\x96\xa5\x52\xff\x14\x77\xea\x9b\x6f\xbf\xb1\xff\x9d\xf7\x4d\x1c\x38\xed\xc7\xb7\x86\x9f\xbf\xfe\xe0\x27\x0f\x98\xfe\xd5\x41\x87\xdc\x35\x78\xde\xfb\xd6\x1b\xb2\x84\xff\xd2\xce\xfd\x77\xba\x01\x64\x29\x73\x5e\x22\x68\x9b\x69\x18\x92\x34\x72\x0a\xd6\x29\x17\x49\x56\x6b\x4a\x88\x2c\x1d\xd0\x4d\x28\xea\xd6\xea\x86\x14\x36\x64\xed\x9c\x4d\xe0\xf2\xf1\x8a\x43\xbc\xf0\x82\x05\xc6\xec\x7f\xce\x9a\x78\xc0\x81\x07\xae\xf9\xde\xe8\x65\x96\xdf\xfd\xb1\x4b\x8e\xda\xf4\x6f\x87\x54\xf3\x8f\xdd\xa9\xff\xf2\x64\x51\x51\x22\x57\x25\xb9\x2e\x89\x2c\x3c\xd6\xd6\x3e\x2e\xbc\xba\x86\x9d\xa4\xd8\x2f\x23\x02\x1a\x16\x7a\xb2\x64\x85\x72\xcc\x79\xca\x74\x71\x36\xfb\x09\xef\x3f\x6e\x54\xf8\xea\xbc\x1f\x3d\x7d\xec\x31\x07\x5c\xb0\x88\xbf\xf9\xf9\x9f\x5d\xb2\xe3\x89\x37\x9e\x89\x47\xca\x1d\xc7\x8e\xdf\xfe\x58\x78\x5d\xff\x29\x84\x88\x12\xab\x90\xa5\x4d\x4b\x4a\x8c\x55\x45\x73\x48\xaa\xd8\x73\x41\x6c\x99\x40\x8d\x70\xd0\xaf\xad\xc8\x04\xa9\xb1\xf0\x90\x9f\xea\x59\xa6\x6f\xf6\x39\xe1\x81\x2f\x4e\x7f\xe0\xea\xe1\xf7\x2c\x79\xd1\xf7\x0b\xe6\xfe\x88\x63\xb7\xfd\xfe\xb9\xa7\xf9\x33\xa7\x1f\x75\xf3\x3d\xcb\x0e\x39\xfb\x92\x49\xb2\x1f\x3d\x0f\x82\x4d\xdd\x49\xdb\xca\x26\x4c\x01\xa9\x50\x9c\xc5\x41\x57\xd7\x38\x83\x21\xac\x72\x51\xd5\x7e\xe4\x33\xd8\x56\x9c\x53\xc2\xc3\xb8\x01\x3f\x33\x24\xff\x61\x53\xfe\x29\xee\x76\x5f\x3c\xb4\xc7\x39\x97\xac\xb4\xf3\x5b\xe8\xcb\x11\xdf\x1c\xf2\xe7\xe3\xd0\x0d\x1f\xce\x3d\xf4\x88\x3d\xb6\xda\xf9\x98\x9b\x07\xd8\x43\x1f\x19\xdf\x7f\x3a\x8c\x9a\x30\xe1\x10\x69\x56\xa5\x96\x19\x1b\x96\x38\x45\xb0\xf0\x9a\x4e\x27\x0d\xaf\x3b\xa4\x3d\x13\xd4\xac\x14\x7e\x8c\x1a\xa1\x41\x0a\x7f\xde\x00\x32\xbb\x6f\x77\xf8\xe0\xcf\x5f\xd9\x71\xda\xd1\xf7\x5e\x31\xf3\xf4\x69\xcf\xd0\x75\x27\x4e\xce\x47\x9b\x6a\x8b\x57\xe6\x3a\xe5\x99\xe9\x5b\x6c\x5a\x5c\xb6\x72\xff\x3d\x32\xce\xcb\x20\xc4\x38\x6d\xa8\xca\xb0\xaf\xfd\xcc\x8f\xbb\xae\x53\x4d\xcd\x14\x35\x5e\x94\x46\x05\x33\x65\x1b\x40\x2c\x61\x95\x44\x8e\x77\x82\xcc\x59\xe4\x6d\xb7\x79\x7a\xcc\x7b\x6b\x6c\xb9\xc6\xd5\x2b\xbd\x7d\xdd\x35\x0b\xbf\xf3\xc1\x45\x9f\x8e\x19\xdc\x8d\x54\xa3\x7e\x78\xf3\x9a\x1f\xe0\xd1\xcb\xd8\xff\x3d\x78\x54\x7d\x1f\x9a\xad\x5e\xd8\x77\x30\x98\xe7\x90\x69\xdb\x2c\x3e\xf0\xa6\x13\xc6\x5c\x7a\x92\xbe\x74\xcd\x6d\x26\x3e\xb2\xfc\x88\xfb\xbb\x33\xcf\xf8\x46\x7d\xb0\x53\x1f\xad\x3f\xf6\x9c\x09\x8b\xdc\x3a\xe1\xbc\x49\x7b\xdd\xb4\xfe\x7b\x87\xaf\xb1\x71\x3e\x66\xe1\x83\x9f\x1f\x3f\xe8\xda\x8b\x86\x4e\x7a\xf6\xf7\x7f\x7d\xea\xf1\x7d\xfa\x4f\xeb\x6b\x19\x63\xa6\x75\xd1\x52\x16\xa6\x22\xc6\x34\x54\x44\x25\x22\x64\x34\xcf\x49\x83\x83\x36\xef\x22\x6a\x05\xc6\xbe\x4b\x78\xea\x9b\xee\xe7\x2d\x9f\x7d\xb5\xfe\xad\xf5\x8e\x4b\xbf\x5c\xe6\xe4\xe9\xaf\x8c\x5f\x75\x69\xbb\x77\x3e\x76\xc2\x97\x23\x5f\xdd\x7a\xc5\xd3\xbf\x3a\xf9\xea\x3f\xfc\xf6\x9a\xdf\xbc\xff\x6e\xff\x89\xdb\x26\x4a\x34\x05\x51\x96\xa4\xc4\x2b\x69\xe4\x8b\xd4\x68\x89\x89\x0f\x52\xe1\x73\xc2\xa1\xad\x4a\x29\x11\x15\x5e\x87\x03\x91\xfa\xad\xc1\xff\xc3\xc3\x7f\x2e\x9c\x36\x18\x1c\x32\xe3\xd2\xc9\xed\x1a\x63\xd7\x39\xfb\xa8\x8b\x36\xac\x77\x3b\x04\x3f\xb8\xfd\xcb\xef\xff\xf0\xe8\x36\x9b\xfc\x7e\xd3\xa1\x7d\xd1\x53\x36\x5d\xeb\x5e\x37\x29\xb9\x78\x65\x7c\xfe\xd5\x83\xe6\x1e\xeb\xc6\xbf\x78\xc1\x79\x1f\xcd\x1c\xb9\xfb\xf0\xf2\xdd\x35\x1e\x6e\x5f\xb9\xb1\x2f\xfa\x90\x9b\x07\x5c\x7c\xc6\xf0\xfb\x26\xbd\xbf\xfb\xea\xf1\xc1\x7b\x2c\x8f\xc7\xb5\x2b\xb6\x0b\x65\x97\x4c\xb9\xb6\x7a\xe2\x63\xb2\xc0\x9f\x56\xeb\xe3\x54\x2c\x73\xf8\x81\x6b\xcc\xdc\x65\xeb\xe7\xcf\x7f\xe9\xb1\x67\xd4\xb4\x05\x2f\x1f\xf1\xf5\xb2\xc9\x19\xa7\xad\xbf\xed\xdb\x0b\xfd\x76\xbf\x6f\xd7\xfe\xe4\xbc\xfe\x3b\x3c\xd4\xa0\x14\x12\xdc\x78\x22\xb4\x75\x22\xb1\x36\x22\x89\x7c\x8b\x05\x01\x20\x74\xc8\x84\x0c\x05\xd4\x6a\x88\xf2\x4a\x9a\xb4\xeb\x5a\x2e\x67\xff\xd6\x53\x5f\x5c\xf3\x2f\xe1\x09\x2b\x3e\x76\xf6\xa4\x3f\xaf\xf5\xe3\x94\x37\x1e\xae\xc5\x2a\x76\x9e\x89\x6b\x82\x99\xcf\x4e\xbf\xf2\xa6\x23\xce\xd2\xfd\xd8\xda\x65\x2a\x9f\x62\x9f\x24\xa5\x55\x39\x67\xbe\xc9\x78\xad\x05\xd2\xaa\x0c\x04\xe1\x30\xf6\x12\x98\xd5\xc0\x71\x46\x33\x63\x18\xe3\xb5\x23\xb3\x3f\x79\x5f\x9d\x18\x9e\xbb\xf7\xd2\xef\x6c\xf7\xdc\x44\x32\x75\xb5\xa1\xcb\xf1\xbb\x3e\xbd\x7c\xad\x17\x77\xbc\xe6\x91\x37\xcf\xbd\x67\xf1\xc9\xab\x3e\xf7\x45\x3f\x56\x7b\x7f\x7a\xf4\x40\xda\xe9\x00\x8a\x4e\x44\x22\x4c\x31\x69\x42\x14\xe5\x11\x73\x05\x93\x5e\xca\x65\xde\xa8\x16\xfb\xb8\x68\xc3\xda\x11\x1e\xf1\xff\xc1\x54\xbc\x77\xfd\x0b\xd3\xbe\x12\x4f\x8e\x5e\xec\xe2\xb3\x97\xfe\xdb\xfb\x87\x8d\x1c\xf1\xab\x8d\x56\xf9\xec\xe1\xbf\x7d\x31\xf5\xec\x25\x26\x1d\x74\x7e\xb6\x45\x1f\xf5\x19\xb0\xdb\xb1\x47\x8c\x5e\x7e\xe6\x12\x8b\x4c\x5a\xff\x7a\x6f\xf8\x2d\xbb\xd5\x64\xd7\xef\xbe\x5a\xee\x83\x2b\x17\x9c\x7e\xf4\xe4\xe0\xbd\x9d\x17\xeb\xc7\x18\x81\x5b\xe5\x97\x04\x74\x11\xb6\x44\xa7\x15\x17\x31\x91\x4a\x7b\x1e\xf0\x8c\x4f\x35\xad\x4d\x6b\x12\x95\x80\x12\x42\xda\x54\x45\x40\x51\x3b\xbb\x4f\xba\xfb\xd9\x77\xc4\xef\x8e\x1b\x7a\xc4\xb2\x6b\x0e\xdb\xf6\xa1\xdb\xde\x99\x59\x9f\xb3\xfd\xc1\xf3\x9c\x36\xfd\xae\x3d\x76\x7a\xff\x2f\x27\x80\xe1\x3f\xf6\xa3\xa9\x50\x94\xba\x2a\x34\x8d\x63\x2d\x2c\xd2\x10\xd7\xb0\x50\xc4\x12\x17\x35\xb0\x4e\xfd\x32\x09\xb9\x09\x78\x49\x91\xce\x11\x49\xf3\x46\x7b\xd5\xec\xda\x7e\xd2\xe2\x23\x4f\xfc\xe3\x41\x72\xc3\x4b\xd7\x5e\xf0\xe5\x65\x8e\xd9\xe4\xc0\xab\x16\x9b\xb4\x92\xfb\xd3\xb8\xad\xc6\x3f\x3d\xc4\x3f\xae\x29\x47\xf5\x63\x16\xc1\x74\xc0\xd5\x90\x1a\x91\xd5\x39\x77\x55\xa2\x64\x5d\x8a\xae\x2e\x72\x84\x81\xe8\x32\x94\x3b\x9a\x11\xe2\x31\x4c\x28\x0c\x78\xc0\x22\x38\x67\x9f\x34\x5c\x1e\x9f\x37\xe9\xd9\xc3\x56\x3c\x73\x93\x3b\x9e\x78\xfc\xcd\xc5\x5f\xb9\x78\xb5\x1d\x8f\xea\xf6\x98\x32\xe5\xc5\xb5\xc1\xc8\x17\xed\x1e\x77\xf4\x5f\x14\xa6\xbd\xba\xd1\x59\x6b\x90\xe7\x34\xf6\x6b\x14\xf2\x2e\x42\x36\x73\x61\xd3\x86\xa2\x29\x6c\x20\xf3\x2a\x2c\xbb\x0e\x14\x49\x50\xaa\xb4\x6b\x3c\x3c\xfb\x09\x3f\xbc\xe3\xfc\x53\xae\x8b\x7e\xfb\x2a\x9c\x4b\x1c\x32\xef\x49\xe7\xfe\x11\x9e\xb6\xef\x43\x6f\x2c\xcc\x1e\x5a\x7e\xcd\x93\x4e\x8d\x9e\xfb\xfb\x7f\xf6\xd4\xcd\x51\x7f\x2d\xe3\x89\x25\x09\xf4\x72\xaf\xb0\x11\xf5\x64\xd2\xe6\xa6\x21\x44\x03\x2f\xe1\xda\x2f\x2a\x5b\x45\x69\x4b\x01\x67\x19\xc6\x71\xa2\xc5\xcf\x53\xd0\xff\xeb\x84\xff\x75\xe5\x96\x5d\x6d\x2f\x7c\xfe\x43\xf3\xfe\xfa\xd8\x03\x9e\x1c\xd2\x4c\x7c\x1e\xbe\xfa\xe2\x3e\x87\xa8\xb5\x96\xce\xee\x19\x36\xf9\xb8\xfc\x0f\x4b\x0e\xe9\xcf\x30\x90\x40\xa5\x58\x02\x30\x53\x41\x17\xb6\x18\x11\x61\x0b\xa0\x24\x53\x85\xea\x88\x80\x45\xc8\x50\x6a\x42\xd0\xe2\xc4\x06\x08\xfb\x32\x9b\xfd\xca\x1d\x38\x7c\xe0\x52\x47\xfd\xed\xf5\x4d\x83\x0b\xae\x1a\xf4\xfa\x3c\xf7\xec\x3c\xff\xb7\x0f\x0f\x7c\x3f\x1b\xf6\xfe\x69\x6b\xad\x3e\x68\x83\xb3\xd7\xb9\xb2\xff\x4c\x20\xb7\xd6\xd5\x8e\x97\x79\xe4\x87\xa1\x34\x31\x6f\x6b\x1e\x39\x2f\x2d\x52\xed\x18\xe8\x44\x8a\x12\xa2\x79\x99\x54\xb4\x08\x32\xd8\xf9\x99\xd4\xb3\x5b\xec\x93\xe6\x5e\xfe\xfb\x83\xbf\xbf\xf0\xb4\x35\xc2\x83\x5f\x5c\x5d\xad\x3c\x64\x89\xf3\x3f\x9f\x6b\x91\x63\xdf\xbd\x71\x1c\x8c\x0f\x0f\xcf\xdd\xfa\xf3\xfe\xb3\x10\x79\x67\xea\x32\x46\x36\x75\x32\xa4\x41\x8d\x92\xd2\x49\x6d\xca\x3a\xe4\x71\xa0\xb3\xba\x6d\x03\x53\x5b\x0b\x58\x92\x59\x45\x4a\x6b\x4a\x17\xfd\x0f\xce\xc4\x94\xf9\x4f\x3b\x7d\xe0\xd4\x9b\xc7\xcf\x98\x74\xf6\x55\x97\x6d\xfc\xb2\x5a\x61\xe4\x99\xdd\x01\x23\xee\x3c\x70\xcf\x55\xf7\x3a\x68\xad\x1f\x3f\x18\xda\xe7\x82\xee\x77\xc8\xc9\x5f\x9c\xbd\x07\x3c\xe0\xdc\x7d\xd7\xd8\xf7\xcb\x6b\xee\x5b\x7e\xd4\x77\x77\x56\x97\x8e\x2a\x4e\x2e\xf6\xbb\xf6\xda\xc1\xf5\x4e\x43\xfb\x31\xa4\x69\x0b\x19\x85\x26\x28\x63\xdf\x80\xb8\x2b\x49\x92\x74\xd0\xb3\x86\x94\x6d\x4b\x34\x2b\x78\x93\x42\x96\x37\xd6\x74\xad\x08\x49\xac\xc1\xcf\x71\x6e\xdf\x0b\x7a\x75\xfb\x80\xc1\xa7\xbf\x77\xf4\x5a\x53\x4f\x39\xd0\x27\x1b\x1e\xf0\xd0\xde\xe1\xf6\x3b\x9e\xf3\xdd\x52\xc1\xd4\x93\xef\x5d\x7e\xb7\xb3\x86\xf7\x23\xe9\xae\xce\x93\x40\x70\x8a\x50\x04\x28\xf5\xaa\x38\x2f\x12\x56\x6a\xd7\xd2\x56\x73\x67\x2a\xbf\xac\x7d\x8d\x1a\x45\xe2\x38\xf3\x18\xaa\x02\x1e\xcc\x1a\x34\xfe\x2b\x3e\x38\xf7\xcc\xdf\x2e\xfa\xd2\x77\x5b\x9d\xba\x7f\xb3\x99\xbf\xc6\xa4\xe5\x9f\xbd\xf0\xc1\x61\xab\x1d\xf4\x97\xd1\x63\xef\xff\xba\xbb\x6c\xec\xc8\x05\x97\xe9\x3f\x9b\xc2\xa5\x2f\xc2\xae\x02\x45\xa4\x53\x11\x49\x1d\xe6\x82\xbb\xca\xa4\x71\xe4\x93\x08\x6b\xa4\x8a\x42\xa4\x24\x94\xdc\x0b\x3a\xa5\xdb\x4e\x74\xfe\x9c\x6d\xca\x5e\x43\xd3\x11\x83\xc8\x81\xbb\x5e\x7e\xd5\xa3\xe5\xfd\xef\xdf\x7a\xcb\x55\x47\xfc\x65\x8f\xbb\xb6\xfd\x4c\x3f\x34\xe0\xc3\x99\x6b\x4d\x7d\x68\x97\xfe\x1c\xfe\x10\xc5\x59\xeb\x64\xe9\xa2\xcc\x48\x12\xd4\x96\x86\xa5\xe3\x79\x8e\x83\x54\xa7\x41\x95\x57\x69\x63\x2b\x4d\x22\xc2\x24\xa8\x65\x89\x66\x61\x1f\xfd\x53\xdc\x83\x97\xdf\xef\xd7\x9f\x84\xf7\x7e\x37\x41\xdf\x3c\xcf\xbb\x57\x4f\x8c\x56\xb9\xfc\xac\xb7\x47\x6e\x75\xc2\xf4\x13\xef\xb9\xfd\xd9\x63\xb7\xdd\xe2\xc2\xfe\x33\x81\x75\xd2\x09\x52\x8a\x22\xb5\x71\x1c\xa5\x96\x61\xe1\x05\x7e\x29\x70\x81\x64\x98\xe4\x89\x81\x41\xc8\x98\x0a\x32\x16\x80\x98\x76\x2a\xb4\xe5\x1c\xb2\xeb\xd7\x6e\x7c\xff\x1b\x6b\x4c\x7f\xec\x94\x79\x8e\x99\x72\xc8\xc9\x3b\x2f\x3d\xed\xa8\x91\x7b\x9f\x7a\xd5\x75\x68\xdf\x87\xd9\xd2\x5b\x2c\xf8\xb5\x7f\x41\x3f\x4e\x02\x08\xa8\xb1\x7e\x12\xb6\x0c\x32\x8e\x9a\x16\xb4\x6d\x97\x67\x5e\x9a\x90\x40\xba\xcc\x63\xbe\x15\x14\x53\xcd\xca\xb2\x81\x79\xc7\xa4\xe3\xc5\xac\x3a\xfc\x2f\x85\x38\x07\x1e\x7b\xfc\x1b\x6b\xf3\x5d\x57\x3c\xe8\xd0\x8f\x16\xdf\x78\xd7\x4d\x7f\xb5\xe0\x2d\xb7\x3e\x39\x6e\xa1\xab\x9f\x3d\xf4\xd4\x19\xd1\xb0\x17\x26\xf5\x23\x05\xcb\x54\x30\x20\x79\x6d\x21\x88\xb3\x8c\xc9\x38\x77\x45\x42\x29\xaa\x18\xb4\xd2\x48\xa0\xe3\xb8\xc0\x46\xba\x36\x49\xbc\x30\x23\x8a\xba\x64\x76\x85\x38\xef\x4f\xbf\x59\x69\xd4\xef\x1e\xfc\xc3\x02\xa7\xbc\xf2\xcd\x93\xf7\xac\x74\x7d\xb3\xc4\x41\xb7\x1e\xbf\xfe\x8e\x63\xd7\x3f\xef\xf2\x1b\x3f\x9d\xb6\xca\xb8\xfe\x33\x6a\xb4\x0a\xa1\x6b\x3c\x11\x27\x59\xd0\xe5\x15\x11\x0d\xab\x28\x21\xa9\x05\x0e\x94\xa9\x4e\x82\x4c\x49\xa1\x12\x55\x82\x8a\xe4\x59\x45\x4b\x10\xcc\x6e\xd4\xae\xfd\x68\xe8\x64\xb6\xc5\x72\xa3\x0e\xff\xfa\xd7\x23\xd4\x87\x1b\x6e\x9b\x4e\x3e\x62\xf4\x03\x37\x6f\x75\xf9\x0e\x63\x5f\xbb\x73\xdc\x12\xcb\xbf\xd5\x7f\x0a\xf1\xff\x67\x8d\x61\x9f\x67\x63\x81\x0d\xcf\xbc\x79\xcc\xc6\x2f\x8f\x7f\xf5\xd8\xe9\xde\xf0\xc7\x87\xdd\xfa\xdb\xa5\xc1\xa5\xa4\x9a\xeb\x36\x72\xd0\xf7\x53\x87\xe7\x8f\x5e\xd1\x7f\x7e\x1d\xb7\xa1\x08\x32\x3f\xb6\x6d\x43\x4b\xc6\x13\x12\x06\x96\x36\x41\x85\x92\x30\x75\xa9\xcc\x64\x91\x44\x6d\xaa\x64\xd6\xa8\x16\xa4\x61\x9d\x44\x64\xf6\x13\x7e\xe3\xd8\x5d\x3e\xfe\xfb\x1f\x3f\x78\x4e\x7e\xf6\xc0\x75\x23\xe6\x3b\x02\xba\x03\x8a\x4d\xbf\x38\x5a\xdd\x39\xfd\x96\x8b\xb6\x3a\xf8\x86\x9b\x4e\xee\x3f\x0b\x41\x79\x1d\x85\x41\x6a\xb5\x75\x3e\x87\x71\x59\xa6\x65\xeb\x60\x1e\x75\x91\x4a\x44\x5b\x92\xd2\x51\x82\x0a\x1e\xcb\x28\x0b\x40\x15\x85\xcc\xcd\x6a\x83\x67\x7d\xc6\xcf\xfa\xeb\x99\xbf\x3f\x39\x39\x66\xc6\x9e\x87\xfd\xea\xa0\xcb\x86\x7d\xf2\xc6\xc4\x3d\xb7\x5e\xe2\xe4\xef\xaf\x5b\x94\xed\x70\xc5\x96\x33\xf6\x1c\x79\x7f\x9f\xef\xb1\xd1\xb2\x17\x8b\x4f\x87\xff\xfd\xbb\x79\xee\x9c\xbe\x1b\xfa\x74\xf9\xdd\xd4\xe6\xe9\xb1\x17\x9f\x79\xff\xa6\x03\x27\xd0\x6d\xbe\xff\xee\xfb\x33\xfa\xef\x7b\x90\xac\x40\x5a\x0b\x51\x90\x3c\x15\xbe\x2c\x3d\x09\x41\xc2\x68\xa6\xd8\x4f\x2e\x0a\x6b\xf2\xb8\xad\x8c\x47\x42\x18\x6a\x10\x90\x48\xe9\x9f\xbd\xc0\xbe\xdf\xe3\xf4\xc9\x7b\xfe\xf5\x81\xe9\xaf\xab\xad\xef\x9d\x77\x05\xf1\x9b\x67\xb7\x19\xfd\xdc\x75\x0f\x8f\x5f\xf9\xad\x97\xf7\x5d\xdc\x9b\xb6\xb7\x7e\x72\x89\xfe\x13\x17\x67\x8a\x0b\x08\x62\x0a\x4b\x54\x81\x30\x2c\x70\x17\x71\x1c\xa4\x34\x82\x28\xcb\x31\x2c\x74\x62\x42\xed\x64\x6e\x65\xe3\x63\x4f\xc1\x9f\xe7\x15\xfc\x57\xf9\xeb\x5f\x26\x70\xc9\x3b\x9f\x39\x66\x37\xf7\xf6\x9a\xd1\xe4\x3f\x9f\x30\xfa\xf1\x5d\xbe\x10\x23\xaf\x34\x5f\xbf\x74\xc3\xd5\x5b\x90\x61\x1f\x5e\x75\x1e\xd8\xae\xff\x44\x56\xb9\x60\x25\x0a\x54\x66\x9d\xc0\x4d\xcd\x0d\x2a\x21\x22\x65\x23\x78\xa4\x1d\xad\x62\x01\x8b\x4e\x16\x59\x8b\x72\x51\x18\x18\x17\x50\x88\xd9\x4f\xf8\xa6\xa3\x6e\xf8\x6c\x9f\x3f\x7d\xb6\xe1\xa2\x0f\x6e\xf4\xd0\x56\x47\x2e\x34\x72\xf7\x77\xf6\x19\xf3\xd8\xca\x2b\xcf\x63\x9f\xf5\x2f\x5d\xe5\xeb\x13\xcf\xed\x3f\xaf\xa3\xe8\x70\x4d\x8d\x6b\x1a\x53\x67\x18\x61\x01\xa8\xef\x70\x27\xeb\x14\x46\xa0\xc8\x55\x0c\xa8\xf1\xd2\x5a\xf9\xae\xa8\x94\xd0\x54\x57\x3f\x6f\x3c\xee\xfb\x26\xde\x49\x83\x31\xc7\xdf\x3e\x03\x2e\x30\xed\xb8\x0f\xe6\x7e\x75\x9b\xe7\xd6\xfe\xe8\xc9\x6d\x5f\xdc\xe8\x91\x75\xa6\x1f\xf9\xdb\xe2\xb0\x55\xfd\x07\xfb\xcf\x04\xa6\x65\x1e\xa6\x61\xdd\x39\xdb\x08\xcf\x96\x09\x4f\x32\xcd\x82\x22\x81\x86\x17\x21\x71\x71\x8e\x54\x8a\x1d\xe6\x61\xdb\x24\x4a\xe8\x20\x29\xfd\x39\xfb\x75\xaf\x9e\x71\xf2\x33\xb7\xf0\xa7\x57\xb9\x72\x97\xf9\x3e\xfe\x78\xd7\x53\x27\x3f\x3d\xe1\x94\x2e\x9f\x77\xca\xb2\x67\xcc\xbd\xfb\xf3\xe7\xae\x70\xf7\x03\xfd\x67\x53\xb4\x9f\x59\x89\x70\x49\x1b\xe5\x44\x1d\x03\xd7\x55\xaa\xed\x44\x0e\x64\x19\xa4\xb4\x35\x92\x95\x06\x97\xa6\xcd\x3d\x42\x44\x9c\x30\xdf\x93\x73\x8e\xc6\xdf\x3f\x7f\xe2\x66\x2f\x04\x47\x9f\xf3\xe8\x17\xbf\x0e\xe6\xff\xf2\x80\xad\xf7\xdb\xfb\xaa\x8f\x5e\x1a\xb1\x45\xb2\xd4\xba\x2b\x6f\xb0\xff\xfe\xfa\xfa\xfe\xd3\xe1\x52\x3a\x11\x85\xba\xc9\x1a\x65\x93\x2c\xd6\xac\x10\x1e\xca\x49\x63\x48\x58\xe5\x1a\xd2\xcc\x2b\xda\xa8\xb4\x55\xd0\xc0\x34\xb7\x39\xf3\x8b\x39\xd4\x2f\xbe\x5e\x68\x30\x1b\x76\xfb\xdd\x0f\xdf\x1d\xff\xee\xa1\x1d\x37\xdf\xc9\x6e\x38\xf0\x90\x75\xde\xd8\x6e\xee\xbd\xaf\xb8\x60\xda\x9a\x7a\xf5\x09\x2f\xf6\x9f\x0e\xb3\xd2\xf7\x59\x57\x84\xd4\x0a\x9d\x10\xa4\xe0\x4f\x6a\x61\xa0\x5f\xc6\x71\xeb\x2b\x62\x6c\x9a\x52\xee\x29\x2f\xb3\x02\xe2\x92\x38\x12\x95\xff\x3c\xe1\x69\x0b\xfc\x7b\xc5\xdb\xb1\xa3\xe6\x19\x35\x64\xd5\x63\xfa\xe8\xd0\x32\x87\x91\x67\x0f\x7b\x7a\xd7\xe4\x0d\x37\xf6\xbb\x37\x6f\xfb\xfa\xe2\x3f\x9c\xf8\xf2\x5f\x0f\x39\xf6\xe3\xaf\x8f\x3a\xe6\x81\xf1\xd7\xcd\xbb\xff\x7f\x96\x2f\x9b\xa3\xda\x87\x5a\x31\xce\x0b\x1b\x10\xd3\xaa\x88\x1a\xad\x89\xb2\x58\xc4\x99\x84\x1e\xd4\x38\x6e\x45\x25\x2c\x35\x36\x6e\x65\xda\x42\x9f\x56\x52\xcf\x59\xed\x2f\xf8\x70\x9b\x1f\xa7\x1e\xcf\xa6\x0e\xbd\x6f\xc4\x49\xbb\x2c\xf7\xc1\xb0\xd5\xeb\x15\x92\x2d\xc7\xbe\xe6\xdd\x32\xcf\xf4\xc3\x86\xff\xb0\xfd\xf9\xfd\xf8\x51\x14\x11\x95\x09\x03\x5f\x7b\xd4\x45\x55\x2e\xa2\x00\xca\x18\xa0\x22\x23\x2d\xd5\x15\x50\x90\xfa\xd6\x4b\xc3\x0a\xb0\x92\x73\x60\xda\xea\x7f\x20\x0c\xfd\xb8\xd0\x21\x4b\x8f\x59\xfd\xd9\xa5\xbf\x7a\xfc\xa3\xf5\x4e\xb9\xf1\xb0\xeb\xe6\xb9\x67\xa9\xb5\x47\xd0\xc5\xbe\x0a\xee\x38\xfb\x33\xb8\xec\x8b\xb0\xff\x44\x6e\x45\xdd\x04\x0d\x8b\x6c\xed\xe2\x32\x55\x0d\x61\x85\xaa\xed\x4f\x2f\xa3\xa5\x14\x31\x2d\x50\x17\xa6\xae\x4b\x32\x85\xc3\x84\xb5\xac\x89\xc2\x39\x8b\x7c\xe1\x7e\xbf\x3e\xe0\xf1\x03\x76\x79\xfe\xbd\x0d\x3e\x3b\xe3\xa1\xf1\xcb\xdd\x33\xf9\xf2\xc9\x37\x9c\xf5\xe5\xfc\x78\x41\xff\x94\xfb\x2f\xf8\xfd\xbe\xbf\xed\x3f\x0f\x36\xf3\xa4\xc8\x1c\xcd\x49\x15\x55\xb1\xa1\x91\x88\x03\xd7\x5a\x49\x69\x82\xba\x22\x11\x75\x0e\x49\x97\x81\xac\x6a\xf3\xb8\x28\x8b\xd4\xf7\x58\x37\xeb\x03\x39\x0b\x2d\xeb\xc7\x6d\x77\x39\xea\x1b\x79\xc4\x46\xfb\xdf\xbc\xff\xba\xeb\xf9\x70\xe6\xbd\xcf\x2f\x3e\xa9\xf8\xee\x98\xed\xe2\x65\x7e\x58\xfd\xf0\x15\x7e\xf7\xbf\xc7\x6c\xaa\x3e\x22\x5b\xb5\xc5\x84\xa5\x3e\xf5\x1e\xbd\xf9\x9b\x62\xc7\x23\x97\x9e\x6f\xc9\x0d\x57\xfc\xd8\xdb\x63\xc1\x55\xae\x1e\xb0\xfc\x5e\xbf\xd2\x13\xe7\x49\xfb\xb1\x9d\x11\x68\x1c\x50\x5f\xcb\x5c\xfa\xb1\x4a\x88\xc8\x05\x72\x12\x2a\xe0\x73\x1d\x71\x1e\xa7\xb2\x69\x43\xda\xc8\x34\xa9\x39\xf5\x13\xe4\xc9\x7f\xe5\xe3\xa7\xcf\xf7\xef\x15\xed\xc6\x6e\xf9\xe4\x91\x7d\x7e\xde\x3b\xd3\x26\x3d\xf2\xe0\x56\x6b\x3e\x7e\xed\xad\x17\x2d\xf0\xa0\x1e\xff\xd6\xcd\x6f\x1c\x90\x7e\xec\xb6\x9d\x74\xc0\xf8\x5d\x6f\x5a\xcf\x1c\x79\x6b\x3f\x8e\x15\xb2\x45\xdc\xc4\x94\x66\xb6\x60\x65\xa5\x11\x6f\x20\x6e\xeb\xd6\xc5\x38\x08\xcb\xa2\xa6\x86\xe1\x94\xa6\x91\xb6\xcc\x6b\x30\x4a\xfc\x3a\x29\xe7\x1c\x57\xb4\xd7\x7e\xfe\xd6\x02\x6f\xef\x72\xdc\xd0\x7d\x4f\xf6\xbf\x96\x43\xce\xda\xf5\x9d\x17\x06\xed\xf5\xf6\xdb\x37\x4d\xfd\xc3\xcc\x93\xb7\x98\xba\xdf\xda\xfd\xf7\x42\x99\x1a\xb4\x05\x6b\x43\xa2\x19\x45\x18\x66\x02\x84\xc6\x89\x84\xe0\xb4\x2d\x9c\x45\xb9\x6f\x43\x09\x93\x32\xd4\x32\x4e\x80\x05\x38\xfc\x79\xc7\x7e\xdf\x17\xea\xfd\xf3\xa7\x6d\x1a\x3d\x32\x71\xf0\x84\xe5\x0e\x18\x33\x6a\xc9\xf9\xf7\x9b\xff\xce\xe7\xe7\x19\x78\xd9\x77\xdf\x9f\x3d\xe4\xa2\x70\xcc\xf1\xfb\x3c\xdc\x9f\x83\xec\x72\x3f\x25\xce\xa9\xbc\x34\x59\x90\xe9\xa2\x4c\x55\x6e\x8c\x97\xa9\xa2\x64\x89\xb4\x45\x00\x9a\x88\x66\x79\xc2\x2b\x2b\xd2\x14\xd5\x22\x99\xb3\xce\x7f\xbb\xc4\x07\x8b\x2c\xf4\xe3\x5c\x4b\x6e\x75\xe5\xa0\xbf\x8f\x1f\x36\xe3\xc3\x71\xe7\x2c\xf7\xd6\x47\x53\x7e\x73\xce\x21\xcf\x6c\xba\xc0\xfb\xd7\xfc\x65\xc3\xfe\x73\x5b\x54\xac\x88\xca\x15\x92\x1a\x14\x31\xd6\xb4\x60\xdc\xeb\xfc\x98\xa5\x46\x66\x9a\x55\x24\xb2\x15\x05\xd2\x54\xad\x6d\x7c\x5a\xd9\xcc\xcd\x62\xbf\xaf\x1a\xf8\xef\x15\x46\xc7\x6e\x3d\xcf\xe1\xf9\xd1\x7d\x7e\xe0\x09\xe7\xdc\x52\x6e\x7f\xfa\x62\xcf\x5c\xbe\xe4\xfc\x8b\x1e\xf8\x5a\xb5\xef\x73\xdf\x5e\xfa\xe6\x9d\x53\x4f\xde\x6d\xe2\xdb\xc3\x96\xdb\x7b\x93\x1f\xff\x33\xd6\xc3\x9c\x5b\xe7\xaa\x3c\x2b\x92\x4e\x40\x5a\x33\xc6\xa8\xf6\xb2\xb2\xf5\x59\x95\xf2\xa2\x04\x38\xd6\x8e\x82\xd2\xa2\xb8\x41\x11\xe2\xad\x01\xa9\x8c\x66\x19\x80\xd0\x47\xe4\x5b\xbe\x3a\x79\xa3\xcb\x9f\x1b\x3e\xe6\xf0\x13\xae\xfe\x78\x83\x3b\x96\xfd\xc3\x92\xaf\x2d\x78\xca\x72\x4f\xbe\xb5\xf6\x26\x93\xef\x3a\x61\xf0\x03\x66\xff\x7e\x2c\xec\xe4\x49\x41\xdb\x20\xee\x5c\x6c\x5b\xee\xd7\x10\x6b\x5a\x41\xa9\x29\xa8\x7c\x19\xb5\x09\x0f\x8b\x30\x32\x49\x1a\x41\x28\x34\xb0\x49\x25\xcb\x39\x3f\x50\x43\xd6\x79\xe3\x92\x6d\x0f\x5f\xe0\x8d\x23\xae\x79\x6d\xc1\x35\xae\x3e\xee\x94\xe6\xf3\x8b\x77\xa6\xf9\xce\x47\x67\x97\x04\xaf\x3f\x2a\x37\x7b\xac\xff\x44\x36\x9a\x84\x05\x68\x41\x43\x45\x22\xe3\xc6\x36\x45\xdd\xe6\xac\xb4\x86\x25\x26\xe9\x5c\x9a\x95\x52\x5b\x6a\xca\xa0\x92\x11\xe6\xc4\x85\x3f\x2f\x39\x98\x5d\xe4\x87\x87\x7e\xf1\xc8\xa8\x65\xdf\xdd\xe4\xcf\x5b\xc3\xcd\x16\x3e\x7d\xa1\x99\xdb\x5d\x37\xfd\xd8\x97\xc6\x0c\x42\xc7\x0e\xbc\xe3\xbe\x33\xcf\xd8\xfd\xea\x7e\x6c\x52\xb6\x5e\xdc\x64\x31\x42\xc4\x51\x14\x64\xbe\x66\x61\x2d\x09\x0e\x12\x17\x52\x9a\x79\x7e\xe4\x8b\xb8\x96\xb6\x52\xdc\x99\x16\x64\x4d\x29\xdc\x9c\x15\xe3\xee\xe1\x3f\x7c\xbe\xde\x31\xe7\xe8\x53\x36\xdc\x61\x99\x5b\xdd\x12\xcf\x1d\x3a\x24\x83\x97\xdf\x3b\xe2\xb7\x9f\x7f\x7a\xfd\xc7\x17\x2d\xbe\xe1\x7f\xe6\x01\xcf\xd1\x0d\xe0\x99\x97\x00\x53\xea\x52\x43\xed\x81\x2a\xa0\x32\x82\x8e\x7a\x71\x14\xe3\x28\xae\xdb\x8e\x05\x28\x2e\x6a\x8b\xc3\x1a\x54\x58\xaa\x88\xfd\x3c\x34\xf4\x1f\xe6\xf0\xea\x81\xff\x1e\x2f\x61\xec\xa8\x8b\x8e\x98\x6b\xae\xbe\xb7\xf5\xd5\xf3\x76\xc8\x27\x1c\x7b\xc5\x9d\xc1\xa5\x5f\xc3\x2b\xc7\x4d\x5c\xf2\xd7\xdf\x6f\x74\xd1\x0f\x13\xef\x5c\xeb\xc5\x5d\xa2\xbd\x37\x38\xe7\x98\x4f\xfb\x91\xb7\xdb\x80\x4c\xd9\x16\x92\x3c\x09\xbc\xb0\x4b\xf3\x94\x66\xa4\xf3\x7c\x8b\x3c\x29\x70\x92\x12\xca\x43\x64\x42\x97\x46\xb5\x53\x35\xf4\x5d\xf9\x3f\x24\xf4\xcf\x7c\xf2\x82\x3d\x17\x9b\x56\x6c\x75\xc4\xef\xb6\x6a\xc7\x1d\xf6\xec\x39\x27\x1e\x7d\xdc\x36\x6f\xef\xbb\xd1\xc6\x9b\x6f\xb2\x07\xd9\x6c\xd9\x67\xff\x33\x8e\xd2\x1c\xdf\xa8\x88\xb5\xd8\xab\xb5\x0b\x9b\x16\x44\xb0\x21\xc8\xe3\x56\xfb\x30\x71\xa4\xaa\x1a\x8c\x4b\x89\x82\x4e\xda\x14\x25\xb5\x0e\x0a\x5b\xb7\xcc\x05\x73\xf6\xcd\xea\x2b\x96\x1a\xfa\xc1\x89\x27\x5d\xb4\xf8\xd6\x6b\x7d\xf4\xcc\x03\x1f\x9f\x2b\x27\x0f\xfa\xd1\x9f\x39\xe9\xe2\xcb\x9f\x7a\xe2\xa0\x71\x0f\xdf\xfd\x74\xff\xdd\xd6\x90\x36\x5e\x69\x54\xdc\x01\x5c\xf2\xcc\x00\xda\xb6\x35\x28\xf3\x5a\xca\xc8\x74\xa9\xab\xf3\x98\x34\xb6\xf0\x45\xe7\x25\x36\xb6\x19\xc1\xc8\xcc\xf9\xb6\x9e\x74\xe3\x11\x4b\xec\xfe\xed\xfd\xbf\xb9\x6c\xeb\x85\x46\xff\xfd\xbb\xf7\x1f\xbb\x74\x95\x9d\x1f\x7e\xe7\xfb\x43\xd7\x39\xef\x93\xfd\xff\xb6\xfc\x9a\xdb\x9e\xd2\x8f\xf3\xde\xfc\xa8\xc2\x35\x2b\x02\xd4\x46\x3a\x02\xad\xa7\x90\xe7\x04\xf0\x8b\x3c\x07\xbe\x0f\x60\x5d\x02\x2c\x5a\xc7\x51\x11\xf3\x84\xe0\x32\x04\xd5\x9c\x15\x63\x6e\xb9\xe8\x66\x43\x77\xdf\x63\xf8\x43\xd7\xcd\xbb\xdb\x80\x09\x47\x1d\x7d\x1e\x5a\xfd\x37\xd7\xcc\xf7\xe2\x94\xe4\xca\xb3\x9e\x5a\xfe\xca\x51\xb2\x3f\x75\xb9\x94\x29\xf4\xbb\xa2\x6c\x71\x5e\x06\x79\xa4\xb3\xb8\xa9\x00\xc0\x24\x68\x8a\x40\x71\xed\x71\xe3\xf2\x2e\x32\x28\xb2\x19\x15\x9a\x47\xff\x7a\x79\xbe\x9e\xef\xdf\xe3\x05\x8d\x1d\x35\xef\x16\x73\xdd\x73\x54\x9f\x5f\xb8\xf0\xab\xbb\x0f\x9a\xb9\xd7\x6f\x9e\x9d\xa6\x06\x4f\x59\x62\xd4\x73\xef\xdd\xf8\xca\xbb\xd7\x6f\x3e\x6c\x95\xa1\x85\x39\x7e\xc0\xef\x3f\x5e\xec\x9b\x7e\xac\xde\x42\x06\x78\x5d\x06\x2a\xab\x8b\x82\x9a\x32\x8d\x2b\x66\x92\x06\x74\x55\xa0\xbd\x3a\xc6\x24\x6d\x92\x9f\x1e\xb3\xa0\x33\x99\xaa\xb8\xca\x0c\x99\xf3\x47\xd9\x63\xfd\x09\x13\x76\xde\x61\xfd\xaf\xcf\xba\x79\xc6\x1f\xcf\x1b\xb2\x62\x74\xd2\x17\x78\xca\xf8\xe3\xe6\x39\xee\xcd\x8b\x96\x79\x30\xd8\xef\xe3\x6b\xfa\x31\xb3\x24\xb3\x16\x24\xc0\x93\x8a\x87\x11\x97\x80\xd7\x3e\xd0\xb1\x92\x32\xd4\x46\x96\x09\x6f\x90\x89\x2d\x41\xda\xe6\xa5\xac\xca\x8c\xf9\xb3\x0c\x0b\xe9\x23\xf2\x1d\x67\xfd\x75\xc7\x01\x73\x9d\xfe\xe1\xdb\xdb\x3f\x73\xca\xaa\x53\x9e\xda\xf8\x93\xbf\x91\x6d\x8b\x6f\x36\x9b\x6b\xbf\xd1\x1f\x9c\x3a\xe3\xae\xcf\x49\xff\xc5\xab\xb9\x4f\x3b\x69\x5d\x4c\xab\xdc\xe5\x9d\xcd\xeb\x3c\xcb\x32\x20\x43\x57\x57\x65\x52\x79\xa4\x2d\x84\x53\x32\x64\x2d\xc5\xb0\x73\x51\x55\x01\x3a\xe7\xdb\x3a\xa0\xda\x47\x1d\x73\x89\x38\xfd\xe2\x47\xbf\xbe\xe1\x94\x7b\xaf\x4d\x0f\xfd\xee\xf7\x23\xee\xfa\xf6\xd0\x97\x1e\xfb\xe6\x85\xc1\xaf\xff\xea\x92\xd7\xfa\xef\xa1\x4a\xe2\x48\xd7\xa1\x8d\x5d\xea\xb1\xb8\x08\x09\xa8\x4a\x10\xd4\x45\x20\x53\x15\x45\x6d\xdc\x20\x96\x56\x0a\x34\xc6\xc3\xb0\xee\x68\x13\x0b\xef\x5f\x75\xf2\xaf\xe6\xfb\xf7\x38\x4d\x63\xb7\x9e\xf7\xf0\x01\x7d\x35\xff\x89\x4f\x5f\xda\xfb\x8c\x25\xd6\xf9\xe8\xbb\x0b\x76\x38\xfa\xb5\x8d\x2e\x59\x7d\xb9\xf9\xe5\xc1\x0f\x5f\xb1\xc6\x3d\x13\x0e\x3c\x63\x95\x61\x7a\xe9\x4f\xfa\x91\xad\x8c\x79\x47\x91\x95\xa5\x8d\x69\x93\x01\x91\xfa\xf8\x27\x47\x33\x09\xcb\x26\x8c\x84\x93\x3a\x45\x99\x73\xbc\x6a\x41\xa0\x31\xb7\xa1\x9b\x65\x42\x5c\x1f\x91\xdf\xf8\xd5\x1d\x67\xcc\x7f\xc0\xc5\xc7\xdd\x3e\x9c\x8e\x17\x93\x76\xba\xf0\xa1\x07\x2e\xbb\xfb\xf7\x8b\x4c\x78\x66\xe0\x90\xd3\x5f\x9c\x6f\xa5\x97\xce\xec\xbf\xcb\x5a\xa8\x38\x16\xb2\xca\xfc\x0c\xfc\x3f\xcc\xbd\x65\xd8\x16\x55\xf7\x36\x4e\xb7\x80\x34\x0a\x48\x88\x08\x48\x4d\x6d\x90\x4e\x29\x49\x91\x90\x9a\x3d\xb5\xa7\x67\xf6\xf4\xd0\x37\x0d\x4a\x0b\x88\x94\x84\xb4\x34\x22\x2d\x20\x29\x48\x2a\x48\x97\x82\x84\x74\xc7\xff\xf0\xfd\xbd\xcf\xcf\x87\x87\xeb\x3e\x7c\x8e\xfb\x7f\x7d\x78\xbf\x5f\x1f\xd6\xb5\x67\xad\xb5\xd7\x5e\xeb\x3c\xcf\x45\x86\x02\x64\x10\x0f\x09\x59\x89\x15\xd2\x30\x5c\x3b\xf2\x38\x84\x48\x5d\x86\x72\x20\x50\xa1\xc3\x21\x55\x34\x49\x94\xd8\x64\x69\x69\xfa\x39\xf9\x4b\x66\x1f\xb8\x64\xef\xd7\x3f\x98\xfb\x33\x2f\xa8\xb8\xeb\xe0\x0f\xb5\xe6\x77\xfb\x6a\xcb\xa5\x42\x6f\xe9\xd5\x46\xe6\x4c\xe2\xac\x3c\x40\x14\xb0\x18\x06\x51\x0a\xe3\xc8\x0c\x62\x62\xce\x0c\x28\x04\x48\x91\xd0\x34\x8b\x8b\x79\xc6\x43\xaa\xcb\x49\xa6\x48\xf8\x21\x8b\x05\x40\xa6\x52\x08\xe7\x39\xf5\x28\xef\xc7\x5f\x15\xe8\xf0\x26\xcc\x62\x67\xdd\xf1\xe9\x9b\x47\x77\x76\x3b\x37\x7d\xf9\xa5\xd5\x67\x6e\xf6\x5d\xef\xce\xde\x52\x2b\x79\xd5\x00\x0f\x22\x0d\x4a\x31\xe1\x10\x54\xc0\xab\x91\x86\x6d\x86\xe3\x3c\xd1\x61\x22\x53\x35\x49\x9b\x52\x74\x13\x40\x9d\xd4\x81\x4d\x31\xa4\x6e\xe8\x5e\xf4\xf7\xe4\xe5\x5f\xef\xa9\x7f\xc2\x86\xa4\x34\x2c\x39\x27\xef\xcb\x15\xda\xb8\x45\x4a\x89\x83\x6d\x9a\xbe\x3b\x2d\x65\x47\xa1\x5f\x7f\x5f\x3f\xf5\xb3\x1c\x95\xda\x8e\x3d\xe6\xed\x9f\x18\x34\x87\x25\x9e\x85\x35\x93\x17\xda\x22\x4b\x0a\x62\x20\x59\xb4\x64\x29\xa4\x4b\x72\x34\xc3\xc7\x0c\xa2\x5d\x4b\xd3\x48\x1f\xfb\x32\xa7\x59\x41\x88\x54\x3d\xa6\xcd\x50\x88\x05\x01\xc4\x61\xe2\x72\x27\xc5\xc9\xff\xfa\xbd\x5f\xe9\x37\xda\xbf\x33\x6c\xf1\xb3\x22\x77\x66\x65\xee\x73\xf1\x53\x26\xe3\x54\xa3\xa5\x09\x3b\x4f\x7c\xd8\xa7\x4d\xf2\xca\x1d\x80\x4d\x17\x22\x60\xaa\x62\x68\x5a\x5e\x44\xd9\x86\x87\x75\x85\x65\x7c\xc0\xb8\x84\x84\x5d\x1e\x84\x92\x2a\x89\xb1\x27\x91\x7a\x60\xd0\x18\xfd\x1b\x35\xe6\xe5\xee\x59\x8d\xe9\xdf\x7c\xe5\x37\x1c\xf4\xb4\x77\xdd\xf5\x63\x5a\xbd\xd6\x7f\x9f\xfd\x62\xf3\xbd\x4f\xcc\xc9\x91\xb8\xff\xf6\x79\xbc\xe7\x49\xf2\x3c\x5f\x24\x74\x9d\x57\xa0\xe6\x1a\xd8\x95\x75\xca\x35\x19\x06\x8a\x06\x4b\xba\xae\xe6\x32\x84\x26\xb2\x2e\x30\x7c\x42\xa4\x5d\x3e\x12\x48\x80\xe2\xff\x0b\x6c\x79\xd5\xe4\x7c\x1d\x0b\x94\x35\xaf\x5d\xd2\x4e\x57\xaf\xd4\x3b\xf7\xa2\xac\x6c\x89\x3d\x4c\x73\x6f\xd1\x7b\xf5\x1f\x67\x5a\x90\x39\xdd\xa3\x56\x99\xff\xdf\xd0\xeb\x79\xc9\xe4\x81\xab\x17\xb4\xca\x38\xe6\xcd\xfd\xe9\x2f\xe5\x4e\x7f\xb2\xc3\xa5\x3f\xc7\x0e\x3a\x98\xb7\xce\x90\x07\xa5\x46\x14\x2d\xb0\xb6\x79\xf1\xaf\xf7\x27\x2f\x58\x91\xa9\x08\x84\x26\x9a\x22\xa3\x4b\xba\x1b\x6b\x92\xe0\x53\x2c\xad\xb0\x54\x0c\x38\x5e\x15\x24\x45\xb0\x2d\xec\x89\x5a\xc4\xb1\xbc\xc4\x2b\x3a\xa9\xea\xff\xeb\xcb\xf7\x32\xff\x77\x13\xe0\x94\x46\xa5\xd3\xd5\x4b\xf7\x72\xcf\xaf\xce\xde\x06\x9d\x77\xd7\xa8\xa7\x07\xad\x4b\x4d\x32\xfb\x5e\xad\x3d\x45\x7d\x54\xfb\xd4\xc5\xb9\x37\x7f\x8e\x0f\x36\xff\xf1\x71\xb3\x24\x82\x4b\x24\x41\xf4\x10\xc3\x47\x1e\xf3\x57\x40\xb2\xa6\xe4\xca\x44\x48\xf0\x88\x26\x69\x10\x93\x66\x20\x92\x1c\x11\x62\x9a\x17\x8d\x90\xb3\x6c\xcb\x25\x58\x3f\xf1\x47\x19\x7d\x78\xd9\x72\xff\xb5\xe9\x8b\x4e\x2e\x7c\xfa\xde\x8b\x51\xd7\xb7\xd4\xb9\xd8\xac\xac\x5e\xff\xc0\xd6\x51\xf9\x3b\xdc\xec\x3c\xf5\xc3\xdf\x92\xe7\xfa\x12\x0d\x34\x87\x76\x1c\x11\x05\x16\x15\xdb\x4e\xa4\xb8\x98\xb3\xa1\xc4\x11\xbc\x15\xcb\x86\xe3\xd8\x7e\xc0\x52\x36\x36\x28\xce\x70\xec\x88\x95\x70\x9c\x78\x90\x16\x4c\x4e\x47\x9f\xfe\xe4\xf2\xba\xce\x6d\xa7\x9e\x5d\xd0\x48\xf8\x54\x3e\x5a\x6e\x52\x9d\x7d\xed\x7e\x7c\xf4\x60\x6b\xdd\xcb\xe5\xb6\xa5\x8d\xcf\x9b\x78\x90\xe6\x01\x4e\x11\x3d\xd9\xc2\x3e\x6f\xd3\x06\x17\xfa\xb6\x8b\x42\x5f\x05\x3c\xe1\x48\x92\x4a\x38\x21\x2f\x2a\x9e\x62\x90\x92\x68\x2a\x8c\xc3\x49\x8e\xfe\x6a\x9b\x72\xf6\xf4\x49\xe3\x6a\x9e\xe8\x92\xa3\xef\x8d\x9b\x29\x73\x7b\x57\xb8\xdf\xe5\x8f\x1e\x3d\x76\x28\xcf\xc5\x63\x6f\x96\xed\x51\xf5\xd3\xec\xc9\x1b\xb7\xb3\x86\x08\x1c\x09\x78\x44\x18\x7a\xc8\x61\x55\xdb\x0d\x23\x81\x82\x3e\xab\xa8\x88\xb1\x44\xc0\x39\x4a\xe8\x48\x90\xd4\x7d\x5e\x8c\x42\x13\x00\xe1\xdf\x50\x8c\x4b\xeb\xfe\xdf\xc3\xfd\x07\x4d\x91\x94\x46\x2f\x1e\x3c\x79\x31\xb9\xc4\x4b\x5f\xe4\x66\xbd\xc9\xb9\xee\x3c\xe8\xfc\x66\xc6\x6a\xab\x72\x0e\xf1\xde\x9d\xb8\x70\xd1\xe7\x99\x2b\xef\x6b\xa9\x0d\xc8\x95\xfd\xe8\xfb\xe7\x5b\xa6\x8d\xee\x99\xd0\x89\x5c\xac\x23\x3a\x66\x23\x55\x15\x1c\x9a\x31\x02\x96\x60\xb1\x68\xf9\x81\xc7\xbb\x90\x04\x1a\x4d\xd1\xb1\x23\x08\xa4\xca\x84\x2c\x2f\xc7\xac\xe2\xa8\xce\xab\xf3\xee\x5b\x2f\x0e\x8c\xbd\xb0\xed\x87\xba\x27\x4b\x5f\xa3\x9c\x07\xab\x3f\x3b\x78\xfc\x62\x8f\x3c\x2d\x56\x75\x2b\x3a\xb5\xc1\xb5\x36\x6f\x2e\xf8\x23\x79\x61\xea\x12\x24\x43\x91\x01\xcb\x48\x24\x2f\x58\xbe\x44\xc9\xa1\x15\xa9\x3e\x20\x05\x86\x55\x90\xe2\xfa\x6a\xa8\x81\x80\xe4\x7c\x60\x68\x6a\xa4\x12\x7a\x64\x25\x6e\xcd\xe7\xd9\x7e\x60\xc2\xb4\xd9\x27\xdb\x2d\xae\xee\x2e\x1c\x36\xbe\xc4\x83\x4b\xcd\xb7\xee\xcd\x51\xfe\x7e\xde\x3c\x95\xef\x7f\xd1\x70\xf9\xf7\xf9\x93\x67\x72\x04\x6d\x5b\xd4\x15\x60\x92\xbc\xca\x68\xd8\x40\x0e\x46\x22\x45\xd9\x3e\x64\x58\x8f\xa0\xe4\x50\xb7\x28\x57\x8c\x43\x55\x40\x28\xa0\x4d\xc6\x66\xd1\xab\x18\xb0\x72\x0d\xc6\xd5\x7b\x2d\x5b\x5c\xed\xee\xad\x5f\x5b\x72\x23\x9a\x64\xac\xb5\xac\xc5\x8d\x5f\xfa\xac\x62\x57\xf4\xea\x43\x3e\x1a\xc9\x32\xff\x6f\xa8\xae\xbe\x0c\xf9\x59\xba\x71\xf3\x67\xab\x2e\xed\xf9\xa9\xf6\x28\x7a\xf7\xa1\x99\xbd\xe6\x2c\x7c\xfd\xe8\xe9\xc5\x17\xc5\x02\x7d\x87\xd6\xf8\x64\xfa\xda\x1d\xef\xfd\x87\x6a\x47\x9d\x4c\xeb\xd6\x0d\xcd\xfa\xe3\xe5\x29\xbb\x83\xd6\xf3\xb6\x94\xe2\x76\x7d\x73\xff\xb5\xa9\xf8\x3b\xd0\xef\x8c\x73\x33\x7b\xfe\xdc\x2f\x7d\xbd\x74\xcb\xc6\x72\xa3\x96\x8d\xfb\xf9\x51\x9d\xf9\x99\xb2\x7f\x50\x64\xc3\xd1\x19\x07\x0a\x93\x1d\x1f\xbe\x5f\x69\x4c\xcf\x0e\x43\x8c\xea\xad\x92\x17\x1f\x9e\xc4\xa9\x86\xeb\x46\x81\x1a\x21\x49\xa3\x68\x8b\x10\xa0\x46\x46\x86\x2a\x46\x7c\x84\x09\x18\xa8\x98\xa6\x44\x95\xa2\x4d\x57\xd7\x74\x51\x96\xec\x04\x78\x90\x52\x5d\x76\xee\xec\xbb\xa0\xc7\x85\xe9\x65\xca\x0c\x1f\xb1\xf5\x8f\xe5\xef\x3e\x2a\x43\xf3\x9f\xb6\xb2\x1b\x5e\xf9\x3d\xdd\xca\x67\xd9\xdf\x4e\x9e\xb9\x10\x07\x9c\x17\x63\x42\x87\xbc\xa9\xfc\x95\xba\x00\xc4\x6a\x14\x48\x66\x4c\x49\x46\xac\x61\x9d\xb0\x3c\x12\x49\x91\x8e\x64\x64\x2a\xa1\x0e\x08\x27\x31\x68\xf6\xb5\x5e\xe3\xc7\x2f\xd8\x53\xb8\x4e\x17\xa9\xde\x7b\xf5\x5a\xd4\x5f\x37\x2e\x9e\xf1\xce\xa2\x11\x44\xe3\x5f\x73\x5e\xdb\x73\x30\xfa\xe3\xa3\xe4\xc5\x07\xd4\x30\x11\xb0\x90\x32\x58\xcb\x85\x96\xc4\x68\xac\x15\x46\x96\x28\x61\xdb\xa3\x6c\xce\xd0\x08\x4c\xf0\x2e\x2d\x12\x32\x1b\x38\xb4\xeb\x12\x92\xab\xbf\x1a\x1f\x9d\x6a\x5c\x1f\xb1\x6a\xf0\xf2\x87\xa3\x77\x1f\x68\xd7\x71\x71\xe0\x54\x7f\xf2\xc6\x83\x53\x4d\xcf\xfb\x47\x0e\xdb\xcb\x27\xf4\x16\x9d\x24\x3e\x68\x5d\xd9\x60\x1c\xc8\x20\xcb\xb0\x05\x20\x1a\x02\x6d\x1b\x3a\xe3\xab\xbc\x13\x9b\x91\x6c\xb2\x30\x00\xb1\x40\x4a\xa2\xc5\x88\x80\xc1\x31\x41\xb8\x09\xa8\x53\xbf\x71\x67\x4b\x5d\x86\x3f\x14\xac\xdd\xf8\xa3\x9c\xe5\xd9\x42\xed\x6f\x72\x7b\xf3\x66\x1f\x36\x2c\xdb\x79\xfe\x34\x75\xf0\xe0\xac\x1f\x93\xe7\x10\xba\xe4\xb1\xa6\x23\xa8\x3c\xed\xfa\x8a\x10\x03\x32\x34\x49\x1e\xc5\x04\xe5\x49\x61\xac\xb0\x0a\xcd\xe0\x88\xa7\x80\xe1\x44\x6c\xe0\x7b\xa4\x88\x39\x32\x15\x04\xdf\xb9\xb5\x0e\xfd\xfd\xd1\xb7\xb6\xe6\x19\x15\x0f\xdb\x96\xad\xe6\x4a\x72\xfe\xa8\x8f\x2f\xcc\xa2\xb4\x0f\x2b\xee\xbc\x7f\xfc\xf5\x3e\xf9\x5f\x0a\x50\xad\x33\xd5\xef\xe2\x24\x64\x6f\xfa\xfc\xaa\xf9\xe8\x44\xb5\xf7\x4e\x6d\xbc\x6a\xae\x9f\x3c\xe1\xc7\x5f\x97\xad\x6c\x51\xbf\x57\x8d\xb4\x4d\x27\x12\xfe\x41\xc2\x95\x79\x05\xf1\x26\x65\x01\x48\xc6\x88\xb7\x03\x8d\x13\x10\x43\x40\x9f\xd3\x05\x9a\xe6\x22\xd5\x47\x0a\x1d\x68\x7f\x95\x70\x81\xcf\xb2\xa4\x42\xbe\x1a\xa0\x7d\x27\x78\x53\xcf\x98\x23\xfa\x33\x1f\xf8\x9f\x54\xe8\xfa\x7b\xf9\x1d\xe3\xeb\xb7\x5e\xb7\xf9\x61\xb7\x8f\xd0\xe7\x79\x3a\xe7\xc8\x50\x35\x79\x4f\xac\xc8\xf2\x5d\xa0\x98\x26\x2b\xb1\x81\x6d\xc9\x91\xca\x43\xc7\xd3\xa5\xc8\x33\x2c\xca\xa5\x19\x43\x57\x18\x28\x07\x21\xad\x59\xae\xe9\x98\xa2\xeb\x42\x2d\x95\xef\x91\xbd\xfc\x7b\x2b\x27\x64\x1c\xb1\x29\x5b\x1e\xa5\x72\xbf\x2b\x3b\xaf\xd6\xa1\x78\xfb\xe7\x7e\xcb\xe7\xae\x79\x9c\xf3\x83\xb2\xdb\x1a\xbf\xfc\x3d\xc6\xe6\x1e\x74\xe1\x69\x30\x71\x9b\xeb\x96\xfe\xa4\xda\xa4\xf9\xbc\xf3\xb0\x4f\xe5\x81\x43\x7c\x90\xaf\xed\x88\xf6\x15\x8b\xe6\xeb\x9d\x44\x04\x06\x64\x7d\x57\xf0\x10\x23\xc3\x00\x51\xb4\xef\x93\x8a\x21\x9a\x9a\x47\x02\xc0\x11\x82\x1a\x2a\x21\xe4\x48\x29\x34\xb8\x88\x60\x35\xc5\xa7\x11\x26\x5e\x2d\xf1\xee\xb4\x5f\xd2\xb9\xd0\xd8\x91\x0b\xb7\xc2\x29\xa3\xd8\xf3\xb3\xd6\x7e\x37\xae\xe0\xe0\xf6\xfd\x2f\xae\xaf\x61\x0c\xfb\xa0\xf2\xa5\x2e\xdf\x25\xcf\x5c\x57\x27\x91\x4f\x11\x94\x61\x87\x6e\x84\x15\x68\xc8\x11\x23\xb3\x08\xf9\xbc\xc2\xbb\x30\xf2\x29\x10\xca\xb6\x09\x0c\x0e\x39\x11\x21\x90\x8e\x14\xdb\xa9\x10\x55\x88\xbd\xef\xbd\x7f\x78\xae\xfb\xa0\xd9\xef\x7f\x4a\xad\xfc\xc7\x33\xf5\x15\x1d\x2b\x2d\x58\x31\x63\xe0\xa5\xf6\x75\x17\xe7\x9b\xdf\xf9\xd4\xcb\xbf\xde\xfa\xf6\xdd\x4d\x53\xb7\xd6\xbf\x73\xac\xe7\xb5\xb6\x9d\xd5\x82\xa8\x77\xd1\xde\xcb\x2a\x6f\xa6\xc8\xdf\x6a\x5f\x6d\xf2\x61\xe5\x43\x5d\x5f\xfa\x7a\xa5\xed\x5e\x15\xc7\xae\xbf\x53\xa5\xd1\xfe\x02\xf5\xba\xe3\xf7\x67\xbc\x05\x07\x34\x3c\x7b\x73\x49\xb1\xdf\x11\x28\xd9\xbd\x44\x93\x19\x49\xe4\x91\xfb\x0c\xf2\x58\xda\xf1\x4c\xa0\x00\x20\xd1\x82\x80\xc8\xc8\xb1\x29\x4d\xd1\x20\xef\xfa\xbe\xa7\x0a\x9a\x1b\x01\xca\x17\x81\x45\x70\x8a\xaa\x10\x09\xae\xbb\x11\x7d\xf3\x7d\x7c\x65\x25\x19\xd7\xbc\x92\x77\xf7\xef\x1f\xf7\x51\x73\xad\xfb\x61\x7e\xe5\xcb\xb5\x1e\x34\xec\x9b\x7d\x5f\xbe\xd3\xcf\x93\x87\xd6\x84\xbc\xe7\x31\xc0\x71\x5c\x8a\xf3\xe4\x90\x26\x5c\x0f\x86\x94\xeb\x45\x32\xd6\x2c\xc0\x0b\xb4\xc3\x49\xd0\x47\xb2\xe8\x1a\x01\x6b\x32\x0c\x15\x49\x71\x98\xf8\x09\x74\x8c\x85\x43\xeb\x2c\xd8\x3a\xf7\xb7\xf6\xd9\x26\xbe\xb3\xaf\x56\xa6\x2d\xcf\xb3\x9c\x3b\x90\xb5\xa8\xf9\xc7\xd1\x2e\xe7\x1a\x8d\x3c\xbb\x39\x89\xcc\x3e\x1e\xb2\x54\x18\xba\x94\x0a\x4d\x4f\x63\x22\xce\x8d\x3c\x31\x20\x24\x51\x77\x5d\xd3\xe5\x30\xab\x70\x01\x8c\x60\x10\x78\x0e\x4f\x07\xac\xa0\x60\xf6\xd5\xf8\xb8\x7c\xa8\x68\xce\xd7\xc7\x94\xcf\x7d\x6e\xc0\xa1\x01\xe3\xcb\xad\x9a\x3c\xee\xfb\x8d\x37\xbe\x9c\xf1\x55\xed\xa9\x6f\x7e\xdc\xf7\x5c\xd3\x96\xb7\x93\x58\x0e\xda\x2c\x67\x7a\x14\xe9\x1a\xb2\xa1\x21\x4d\xf4\x3c\x83\x62\x48\x1f\x4a\xbc\x4e\x43\x4e\x25\xa8\x08\xf9\x12\x8b\x5c\x09\xd2\x8e\xac\x29\xbc\xa1\x78\x89\xdf\xc5\x64\x93\x0a\xe3\x56\x96\xb7\x96\xbf\xbf\xae\x8d\x61\x6d\x7e\xf4\xe4\xd6\xc6\xad\xbf\x15\xe9\xf5\x95\x5f\xaf\x6b\xde\xd9\x13\x3f\x59\x92\x36\x85\xea\x84\x21\x6d\xf3\x98\x31\x35\xd9\xa6\x81\xa5\x32\x6a\x2c\x28\x9a\x44\x30\x40\x0a\x78\x5a\x77\x64\xd7\xd6\x4d\xa8\xc8\x9a\xa4\x48\xb4\xa5\xc8\xa4\xad\xf0\x92\x83\x13\x6b\x04\x4d\x2a\x56\xb0\x4f\xaf\x2b\x17\xab\x6c\xbc\x52\x7a\xfa\x8e\xb5\xd9\xe7\xb7\x7d\x7b\xd8\xa5\x5e\xc3\x9a\xc2\xad\xfd\x89\xe9\xdd\x73\x6e\x4f\x1e\x90\x81\x0d\x61\xa8\x28\x14\xb0\x4c\x8f\xf6\x2d\x42\xf8\xab\xac\x44\x3c\x2d\x61\x08\x29\x91\x8d\x25\x88\xc2\x90\x56\x3c\x4a\xf4\x0c\x1d\x92\x7e\x68\x3b\x44\xf4\x6a\xd8\xcd\xa0\x84\xf5\x75\x27\x14\x5f\xf2\xe5\xe2\xe7\x07\xbc\xf1\x15\xd7\x1f\x57\x4e\xae\xbd\xb2\x76\x48\xae\x45\xb7\x8f\x57\xfb\xbd\xcf\xfc\xb4\xd1\xc7\x13\x9e\x30\x41\x47\x41\xe0\x92\x96\x44\x71\xaa\xeb\x30\x1e\x41\x46\x2c\x83\x63\x2f\xc2\x04\x63\x12\x81\xe0\xf9\x50\xd7\xbc\x50\x09\x42\xda\x0e\x4d\x5d\x76\x64\x3b\x31\x0c\x7d\x7c\xe3\x49\xd5\x4a\x2c\xe9\x39\xfe\xd7\xce\xda\xa8\x9d\xb9\x56\x1f\xda\x57\x56\xab\x53\xf6\x87\xdb\x0b\xd0\xea\xf7\x7b\x0c\xab\x74\xb8\x6e\xf2\xc2\xce\x92\x24\x99\x71\x64\x9e\x30\xf9\x58\xe5\x4d\x52\xe0\x04\xc6\x64\x6d\x1e\x59\xc8\x17\x0c\x4f\x71\x68\x1c\xa8\x50\x15\x5c\x9f\x12\x22\x8d\xb3\x2c\x99\x79\x35\xec\x26\xe7\xb8\xf8\xa4\x61\xcb\xe2\xd7\x16\xb4\x6b\xb4\x28\x3c\x30\xba\x59\xce\x82\x75\xbf\x3d\x50\x60\x44\xd5\xa2\x8d\x46\x6d\x1f\x75\xa1\x56\xf2\x60\x22\x6c\x08\x25\xdf\xe6\x90\x8d\x4d\x44\x3a\x96\x4e\xd1\xa2\x6d\x99\x2e\x4d\xfb\xb1\x86\x08\xc1\x06\x86\xcc\x45\xb6\xc5\x3b\x61\x44\x84\x71\xa4\x71\x7c\xa2\x3c\xfc\x53\xf1\x05\xa5\x8b\x8d\x28\xdb\xa5\xc6\xeb\x59\xda\x6f\xab\x34\xe1\xcc\x93\x91\x0b\x3e\xbc\xd7\xaf\xee\x46\xbf\x94\x3e\xfa\xf4\xf7\xd9\xde\x4b\x9e\xb9\x48\x57\x44\x83\x37\x24\x12\x33\x34\x23\x99\x4e\x48\x87\x21\x14\x75\x06\xea\x76\x24\x02\xc7\x09\x0d\x0e\xe8\x14\x8e\x70\x04\x08\x57\x83\xa2\x28\xf3\x89\xf3\x70\x66\xf5\xd2\x91\xaf\x7a\x16\x98\x51\x3f\xef\xca\xdd\x45\x72\xcd\xca\x38\xf6\xe6\x53\xb2\x4c\x7c\xa0\x4a\xd1\xf9\x27\xfa\xb4\xfd\x61\x59\x12\x75\x95\x1c\xcd\x35\x09\xc8\x52\x9c\x8f\x41\x00\x68\xec\xbb\xac\xc5\xb0\xce\x5f\x8f\x0f\xc3\x12\x59\x3a\x26\x5d\x4a\x57\x34\x89\x97\x05\xc3\xe0\x5c\x1e\xbb\x09\x74\x95\xe6\xfc\x90\xbd\xde\xf1\x8a\x62\x79\xe9\xad\x32\xbb\xfb\x94\xce\x50\x2f\xe7\x97\xa3\xba\xb7\xdb\xba\x7b\x88\xf7\x49\x8e\x99\x7f\x82\xbe\xa5\x92\xc8\xc4\xc1\x8e\x60\x20\x85\xd2\xc2\x30\xd4\x62\xc8\xb2\xbc\x2c\xb1\x61\x64\x72\x3e\xe6\x2d\xc3\xd5\x03\x31\x24\x48\x8a\xd3\x44\x0d\x6a\x92\xe0\x61\xdf\xe1\x12\x3f\xec\x3e\xfa\xb6\xc2\xef\x13\x5f\x1f\xd7\x9d\x9b\x53\xaa\x7b\x8f\x65\x6d\x0a\x83\x25\xf2\xf1\x73\xbf\xa5\xdc\x19\xff\x2d\xf7\x93\xb3\xf0\xd7\x24\xc2\xd0\x03\x41\x84\x4c\x4c\x7a\xb4\x0d\x75\x07\xa8\x31\xc2\x94\x45\x73\x86\xaf\x7a\x06\xa0\x95\x38\x60\x05\x5f\x94\x79\xc7\x30\x22\x04\x59\x53\xa5\x4d\x0d\xbd\xea\xc3\xb3\x87\xf7\x1b\xf0\x82\xa2\x4a\x5f\x20\x77\x74\xac\xd4\xea\x83\xb7\xe6\xe7\x2b\xf0\xa4\x43\x47\x69\x63\x35\xe6\x93\x12\x65\xde\x2e\x96\x36\xae\x5e\xe2\x0c\x11\x98\x41\xc4\x32\x82\x27\x20\x01\x48\xb4\x0a\x63\x93\x60\x45\x49\x0c\x58\xa0\x38\x0e\xc7\x6b\x3a\x1d\x83\x80\x61\xd8\x48\x96\x19\x3f\xf0\xc3\x44\xa2\x06\xab\x1d\x73\x72\xf3\x09\x0d\xa8\xfa\x9d\xb3\x7f\xba\x30\x1b\x29\x0d\xab\xf1\x61\x91\x05\x97\x66\x4f\x6e\x7d\x62\xf1\xfb\xf9\x4f\x37\xee\x95\xbc\xd3\xa5\x7d\x23\xf0\x1c\x53\x70\x3d\xec\x32\xaa\x61\xab\x2c\xa1\xb3\x32\xa1\xf0\xc8\xa2\x91\xcf\x81\x98\x53\x48\x3d\x46\xac\x6c\x79\xbc\x17\x1b\x86\x9e\x5a\xc8\x95\xb9\xbc\x6d\xc7\xe1\xfd\xc1\x8b\xd5\x4b\xf7\x3f\x2c\xbb\x28\x5a\x33\xbe\x51\xa5\x5e\xf6\xf3\xb7\xba\x05\xd7\x1e\xef\xff\xa3\x79\x7a\x39\x89\x02\x94\x01\x36\x6d\x1d\xff\x1f\xf9\xc3\x00\xe8\x1e\xa9\xc0\x18\x06\x12\xc0\x52\xc0\xd9\x0c\x8f\x31\x00\x94\x8a\xf4\x28\x52\x28\xcd\x27\x59\xc5\x76\xf8\x57\x4f\x18\xaf\x33\x1f\x16\x1d\x30\xb0\xf5\xe3\x47\x7c\x89\x4f\x86\x9d\xea\xdc\x69\x62\xae\xc1\xaf\x53\x3a\x7e\xf8\xd5\xca\xa7\xe7\xd6\x8e\x4b\x9b\x9a\x63\xe2\x0c\x61\x92\x3e\x25\x8b\x8a\x25\x4b\x10\x88\x7a\x60\x73\xaa\xcd\xeb\x9c\xc9\x28\x06\x94\x65\x6c\x9a\xa4\xaa\x31\x0a\x4d\x1b\x91\x1a\x5a\xbc\xe5\xf1\xa9\x76\xc2\x7a\x14\x2c\x75\x66\x4d\xf3\xae\x79\xdb\x56\x5a\x71\x73\x5d\x1c\x64\x1a\x9c\xd2\x40\x3d\xb9\xbb\xf9\x6f\xdb\x9e\x34\xf9\xe1\xbd\x4a\x5b\x4e\xbc\xfc\xeb\x22\x99\x8f\xdd\xfc\xb6\xed\x84\xb9\x75\x17\xef\x9c\xc5\x17\x2c\x7b\xaf\x68\xeb\x2f\xba\x4f\x87\x9b\x1f\x0d\x0a\x6a\x34\x9e\xae\x65\x5a\xfd\xd2\xd7\x03\x0d\xbf\x2d\x9a\x7f\xe4\x9f\xbb\x70\xad\x8c\x7b\x7e\xe8\xbb\xfe\xd7\xed\x42\xa9\x19\x65\x70\xf7\x92\x65\x4f\x0c\xdc\xc3\x6a\x39\x72\x25\xf1\xa5\xa4\x84\x91\xe5\x7b\xa2\xc5\x51\x2c\xf6\x48\x5e\x35\x55\x3f\x24\xdc\xc8\xe5\xac\x48\xf5\x69\x1f\x92\x81\x1c\x3a\x92\xa3\xf0\x32\x0c\x5d\xd7\x57\xa3\x04\x0f\xbb\xcd\x71\xab\xb9\xa7\x70\xc1\x6f\x86\x7d\xc7\x1d\x6f\xfb\xb4\x0c\xcf\x77\xca\xc3\xcf\x3f\xf1\x75\xdb\xf5\x6d\xfb\xe7\xeb\xf3\xfa\xc4\x2d\x49\x24\x37\x1b\xb4\x82\xa4\x88\x0b\x45\xc3\xf7\x6c\x48\x3a\xbe\x04\x34\x11\xf0\x34\xc7\x4a\x26\x23\xcb\xb4\x81\x03\x5d\x84\x94\x17\xeb\x21\x8d\x7c\x25\x82\xa9\x35\x3e\x26\x4f\x6d\x8a\x1b\x0d\x2b\x3f\xf8\xd2\xf2\x0c\xcb\x6e\xde\xf8\xcd\xab\xf3\xb0\xf9\xc7\x95\x9e\x36\x7a\xd2\x6d\x5b\xa9\xb5\x8b\x72\x3d\x3a\xf7\xd2\xf7\x78\xfd\x02\xd8\x76\xef\xf4\xf6\x1e\xf7\x4a\x9f\xad\x57\x7f\xeb\x95\xee\xcf\xda\x8e\x38\x73\x7a\xec\xaa\x81\x95\xf3\x2e\x2c\x2b\x7d\x72\x99\x4e\x5e\x02\x88\x29\x07\x21\x68\x8a\x58\x74\x02\x23\x12\x58\x91\xe1\x90\x25\xda\x86\xee\xeb\x50\x8d\x6c\x59\x35\x04\xda\xd7\x3d\x8a\x8d\xa8\x50\x92\x60\x2c\x47\x09\xd2\xeb\xa4\xb5\x45\xec\xa5\x5f\xfc\x9c\x61\x56\xfd\xa7\xcd\x16\x6f\x7e\x5c\xeb\x66\xfa\x86\x33\xe4\x68\x60\xb6\xb9\xb9\xfd\xe9\xdf\xd4\xd4\x7a\x26\x71\x57\x8a\x24\x32\x02\x4f\xfb\x1c\x45\x93\x34\xed\x43\x09\xd9\x06\x25\x07\x16\x10\x6d\x8b\x92\x30\x15\xc8\xc8\x82\x2a\xab\x2b\x9c\x81\x49\x85\xd3\x34\x28\x25\x66\x6f\xd7\x7e\x78\xf2\x90\x6f\x4e\xdd\xb6\x51\x3f\xbe\xa6\xdd\xe7\x6b\x67\x0d\xbf\xb6\xb3\xc8\xe3\x83\x37\xf6\xb6\x28\xbd\xb1\xd6\xe4\x1f\xb3\x9f\x4e\x5e\x02\x30\x59\xc8\xca\x0e\x21\x6b\x81\x19\xda\x88\x25\x71\x60\xd0\xba\x1f\x88\x50\xa1\x68\x86\xe0\x65\x24\xb9\x4a\xac\x31\x12\x2f\x2b\x28\xa6\x64\x59\xe1\x12\x74\xee\x9b\x17\x31\x5e\x9b\x6b\x73\x53\x96\x8f\x1a\xbf\x7d\xfb\x89\xc2\x03\xeb\x66\xb5\x8e\x94\x1b\xf3\xd3\x80\x4a\x92\x52\x63\x43\xe6\x9e\x7c\xf2\x4e\xf8\xff\xcf\xc2\xad\xff\x35\x77\xd9\xb7\x2d\xe2\x5b\x19\x7e\x1a\xb5\xb0\xf8\xd2\x27\x7d\xc4\xba\x75\x26\x4d\x48\xd9\x59\xeb\xdb\xca\x71\x93\x56\x2f\x56\xcc\xb3\xe0\x2f\x49\x44\x42\xbb\x3c\xab\xd0\x2a\x23\x0b\x1c\x43\xc4\x0c\x20\x04\xac\xb2\x58\x77\x23\xca\x8e\x31\xe9\x42\x1e\xf1\x4e\xc0\x07\x8e\xab\xf9\xb2\x05\x54\x9e\x52\xdd\xc4\x15\xcd\x07\x57\x86\x7e\xfb\xfa\xc0\x7b\x61\xd5\x99\x85\x9b\xce\x6e\xf1\xc3\xb7\xba\x98\xad\xe1\xb6\xbd\x59\xf7\x53\x25\xee\xed\x69\xe3\xd3\x69\xc3\x47\x24\x4c\x81\x31\xe1\xda\x94\xa2\xc4\xbc\x6c\x28\x52\xe0\x09\xba\x4a\x4a\xaa\x10\xe8\x12\xf0\x38\x87\x42\x2a\x0a\x25\x9e\x26\x28\x51\xe1\x5d\x95\x45\x26\x08\xd8\x04\x17\x58\x9f\xd1\xc7\xcb\x8e\x58\xbf\x61\x47\x43\x75\x67\xd5\x63\x99\x84\x5a\x9b\x3e\xd9\x37\xa3\xd9\xa4\xae\x97\xce\x4e\xbc\x3e\xe7\x24\x57\x63\x42\x12\x69\x3a\x18\x93\x9a\xe0\x42\x03\xea\x16\xe2\x61\x20\x73\x61\xe0\x08\x28\x52\x62\x4d\x22\x28\x83\x72\x6c\xc3\x0a\x41\x6c\x4a\x01\xe3\x05\x88\xa2\x68\x85\x7a\xd5\x21\x16\x9c\x5e\x5a\xed\x3d\xe7\x4e\xde\xaa\xd4\xe5\x41\x7f\x5e\x2b\x31\x43\x99\xf4\xcd\xe4\x2e\xde\xda\x8d\xb2\x96\xcb\x99\x3e\xe8\xc9\xf8\x24\x9a\x6b\x42\x85\xb3\x24\xc7\x54\x82\x08\x2a\x04\xe1\x92\x3c\xe3\xc7\x91\xad\x47\x9e\xaa\xcb\x2c\xef\xaa\x8a\x46\x59\x21\x23\x7a\x12\xab\x88\x48\xd5\x39\x27\x95\xfb\xf6\xc4\xe0\xab\xfb\x9a\x15\xd2\x06\x77\x8d\xf6\x0e\x9f\x37\xb8\x52\x89\x5f\xdf\x18\x7f\xee\xbb\x93\x59\xba\xb5\xf9\xec\x40\xff\x21\xe4\xa5\x0d\x2f\x35\x26\xc0\xac\x87\x47\x8e\xec\x6d\x78\x7e\xef\xa4\x91\x7f\x14\x2b\x51\xa4\x42\x9f\x77\x2b\x50\x9f\xf6\xbf\x3b\x67\x5f\xb8\x50\x8f\x5a\x4d\x4f\x9b\x66\x78\xe2\xe5\x8e\x0e\x4d\x53\x8e\x46\x07\x81\x17\xf9\x66\x10\xc9\x36\x1d\xeb\xa6\x43\x42\x3e\x96\x98\x50\x0e\x54\x03\x87\xbc\x20\xe8\x2c\xa0\xcc\x48\x67\x39\x4e\x91\x13\x0f\x2f\x99\xb9\xb9\x3b\x7e\x75\xa7\xf1\x83\x4a\xc6\xb1\xb0\x5a\xe7\xf1\x1b\x4f\x75\xcc\x7d\xa1\x8f\x36\x68\xc9\x89\xf9\x15\x77\xdf\xce\x7d\xa3\x6f\xf2\x8a\xe2\x98\xb0\x23\x53\x89\xc2\xc0\x60\x7c\x37\x08\x65\x97\x76\x31\x41\xca\xa2\xe1\x0a\x96\xee\x3b\xbe\x24\x48\x84\xa2\x99\xa2\xa4\x8b\x3a\xcf\x9b\x04\xb2\x85\x57\x3d\xfe\xc8\xd7\x9f\x14\x1b\xbb\xe4\x8d\x2f\x7b\xce\x1d\xfe\x59\x29\x36\x67\xbe\xb3\x0b\x16\x7f\xe1\x7c\xd0\x61\xe1\xa5\x0e\xe5\x5a\x9c\x1f\x26\xdf\x4f\x5e\x0a\x0c\x44\x49\x65\x48\x60\x7b\x8c\x4b\xdb\xa1\x4c\xd0\xb2\xe9\xd0\xae\x28\x08\x41\x68\xb1\xd0\xa4\x45\x8e\x61\x65\xc7\x17\x74\x26\x8a\xd8\x40\xf1\xed\x7f\xdb\x8a\xfb\x2f\x24\xf1\x3f\x8d\x2d\x53\x1a\x65\x4c\x97\x2d\xd3\xcb\x78\xca\xba\x79\x3f\x58\xbc\x68\x6a\x96\x63\x87\xaf\x93\xeb\x4b\x4e\x8b\x8c\xcc\xd3\x9e\x8f\xad\x13\xb6\x12\xee\x6e\xea\x71\xbf\xc3\xb9\xfe\x7e\xf2\xfe\x21\x92\x5d\x3f\x66\x81\x6e\x6b\x2a\xf7\xd7\x55\xa9\x8b\x11\xcb\x72\x94\xed\x05\x2a\xe3\xfa\x12\xa5\x3b\xb2\x80\x64\xe4\xf0\x84\xc0\xb3\x1c\x21\x53\x9c\x9e\xb8\x1f\xb7\xa9\x48\xf7\x95\x0d\x3e\xaf\x60\x5e\xa9\x0d\xaa\x56\x1b\x17\xe7\x29\x55\x61\x60\xc6\xa6\x8f\x96\x6f\x39\xf5\xce\x86\x1e\xc3\x1a\x66\x48\x1b\xf3\x35\xa1\x0f\x11\xbe\xed\xa9\x48\xd5\x25\x3f\x42\x3a\x47\x44\x92\xc0\x6b\xa2\xab\x93\x98\x86\x26\xf0\x71\xec\x43\xdb\x13\x3c\x96\xa1\x7d\x29\x12\xb0\x2a\x03\xc8\x26\x06\xc2\x31\x4c\xe7\xf3\xb1\x59\x2c\x4f\x9e\xe2\xc7\x6f\x15\x2e\x41\x95\xa5\x0a\xe1\x31\xa7\x16\x14\x5d\x78\xa9\xf5\xd2\x9f\x07\x9c\x7a\xb7\x44\xf2\x12\x3d\x4d\x32\x91\x67\xa9\x32\x2d\xf2\xb4\xe6\x89\xb1\x46\x41\x53\x65\x90\xa3\x99\x86\x13\x41\x8b\xa6\x7d\x09\xf3\xd8\x01\x8c\xa8\xc4\xb1\xcc\x29\x3a\x21\x26\x36\xb9\x5f\xa9\xb9\x3d\xe7\xe5\x1a\xbc\x2b\x7b\xb5\x6d\x8d\xab\x6d\xac\x18\xde\xf8\xfa\xad\xed\x37\x3b\xbd\xd6\xbe\xf6\x82\x5e\xcb\x7e\xb5\xf7\x3f\x4f\x22\xe5\xc5\xf1\x65\x86\x04\x00\x41\x6c\x98\x16\xcf\x29\xbe\x8d\xb1\xe8\x61\xc2\x63\x28\xdb\x36\x54\x86\x70\x7d\x07\x0a\x90\xd5\x02\x51\x91\x35\x97\xc3\x7f\x3f\x5f\x4f\x67\xfb\xef\x66\xf0\x29\x0d\x1b\x66\x2a\xfd\x32\xe7\xfb\xc2\x1b\x4e\xc6\x9a\x33\xbb\x5e\x68\x59\x73\xc1\x70\xd8\xa7\xc9\x8d\xc7\x43\xdf\x9d\xd6\xed\xeb\x67\x2f\x6a\x9f\x2e\xd4\xeb\xe0\xce\xd1\xe9\x93\x48\xa0\xa6\x31\x0d\x03\x96\x08\x74\x02\xca\x8e\xae\xf9\x9e\x62\x8b\xb6\x21\xeb\x31\xe3\x9a\x92\x1f\x99\x84\xa1\x47\xba\xcd\x3b\xb1\x4e\x30\x06\xc1\x69\xae\x92\x0a\x73\xaa\x63\xde\xbb\x6f\x36\xdd\x51\x6f\x47\xb1\x2a\x64\x8b\x39\xdd\x77\x9e\xd8\x7f\xe4\xfa\xbb\xdf\x17\x2c\x5a\x21\xff\xc0\xc3\xc3\x3f\xa2\xd3\x06\xae\x49\x4c\x6c\x08\x55\xd3\x0d\xfc\xd8\x30\x00\xb0\x2c\xd2\x65\x55\x5a\x57\x03\xd9\xe6\x14\x97\x24\x62\xda\xc7\x80\x0d\x04\x41\x12\xe2\x40\xe2\x75\x5f\xc5\x66\x94\x0a\xd2\x4f\x9b\xff\xfe\x90\xbc\x97\xd3\x35\x6e\xb4\xae\xf7\xa8\x83\x33\x9a\x3f\x5e\xbd\xa1\xe8\xd1\x8d\x1b\x9f\xcf\x2b\x17\x7d\x37\x3a\xdd\xea\xcb\x65\x92\x88\x83\xc3\x9e\xe8\xd8\xac\x11\x45\xd0\xe2\x30\x16\x3c\x18\x12\x96\xea\xc8\x3a\x46\x0c\x43\xc5\x0c\x0d\x78\x2d\x36\x38\x8d\x8c\xe9\xd8\xd5\x28\x5e\x20\x98\xc4\x26\xd7\xbf\xfc\xf1\xd6\x1f\x46\x14\xed\xc9\xdf\xcb\xfd\x65\xd6\x7d\x85\xde\xac\xfa\xa4\xd8\xf5\xd5\xb9\x7b\xf6\xcc\x90\xdd\xbd\xdf\x61\x5b\xf9\x24\x6a\xb8\xf8\x50\xb5\x74\xac\xf1\x8c\xcc\x78\x7a\x1c\x45\x3a\x16\xe2\x58\xe7\xec\x28\xd2\x03\x26\x32\x42\x86\x53\x01\x0e\x22\x3d\xb4\x1c\x43\xf3\xa0\xa6\xc8\x7e\xe2\x60\x6d\x95\xa9\x30\x59\xfa\x5e\x91\xce\x8f\x9b\x8d\xdd\x3e\xf9\x52\xe7\x77\xb3\x2c\xe8\xb1\xb2\x71\x59\xfb\x83\xe7\x4f\xfa\xd6\x67\x56\x92\x49\x9c\x02\xf3\xa4\xca\x84\x5a\xe8\x71\x11\xe3\xca\xaa\x4e\xf3\x0c\x32\xa1\x64\xc8\x14\x96\x49\xc9\x0e\xc2\x98\xb4\x20\x92\x79\xc1\xd4\x78\x99\x94\x08\x95\xe4\xc5\xc4\xbe\xfc\xc3\xb5\x7e\x77\x06\xf6\x2a\x2d\xd7\xab\xf9\x43\x91\x25\x33\x56\x2e\x3c\xda\xe3\xf1\x8e\x8c\x53\x36\x6d\xd8\x57\x33\x7d\x09\x91\xe9\xf0\x66\x12\x9b\x37\xa1\x28\x11\xac\xae\x8a\x96\xec\x78\x90\x42\x4a\x6c\x53\x0c\x1f\xab\x86\x11\x44\xbe\x4a\x30\x38\xa4\x69\x3a\x66\x64\x55\xa2\x04\xcd\xe4\x2d\x97\x00\xff\x7b\xca\xff\xba\x5a\xff\x09\x42\x90\xd2\xa8\x6a\x86\x74\xd9\x5e\xbe\x5a\x0f\x96\x6a\x65\x6d\x69\xaf\xb4\xdb\x38\xe5\xf2\xf7\xdb\xbe\x9c\xd7\xed\x59\xad\xeb\xeb\x0b\x4d\x5f\x9a\x71\xf2\x91\x12\x67\x07\xf6\xd8\x50\x3d\x79\x09\x86\x42\xa1\x1b\xb2\x8a\x09\x1c\x45\x94\x90\xa9\xb3\x3c\x90\x48\x0a\xd3\x96\x8f\xe5\xc0\x93\x55\x18\x87\x31\x4d\xd0\x12\x0f\x58\xdb\x72\x31\xa2\x94\x54\x40\xf4\x65\xf7\x14\xd8\xf1\xed\x71\xe5\x0b\xee\xe8\x8f\x41\xe1\x95\x47\xee\xbd\x35\x7e\x0d\x7f\xe0\xe2\xec\xed\x44\x31\x99\x7a\xbc\x7f\x43\xc3\x24\x62\x67\x94\x88\x65\x34\xdb\x73\x44\xca\xa6\x59\x87\x42\xac\x62\xc6\xb6\xcc\x69\xaa\xc1\x21\x1e\x9a\x20\xb2\x44\x83\x0f\x08\x5f\x84\x02\xe1\xbb\xb1\x8c\x95\xc4\xd1\xba\xf1\xc5\x2f\xe5\xea\x5f\x3e\xdd\xe3\xfb\xeb\xa3\x8a\x6c\xce\xf7\x30\xe5\x64\xbb\xe1\x3f\xcd\xad\xfe\x23\x7c\x31\x62\xe0\xb4\x8a\xad\x51\x12\x15\xb0\x00\x1f\x85\xaa\xa7\xc7\x84\x07\x28\x86\x0a\x5c\x4f\x36\x23\xc5\x8d\x1d\x03\xc3\x80\x37\x85\xc0\x16\x2c\x02\x10\x9a\x0b\x45\x08\x0c\xd7\xd5\x62\x27\x4a\x1c\xad\x26\x0c\x45\xe7\xd0\x47\x97\xd2\xef\x3f\x3f\x79\xed\x9f\x8d\x5b\xfc\xf4\x45\xc4\x9c\xed\xd4\xba\xc7\xc9\xe7\x4f\xd7\x74\xf9\xe2\x46\xda\x30\x60\x09\x6b\x2e\x22\x44\x16\xc9\x62\x87\x8e\x7c\xdf\x8e\x44\xd9\xa4\x24\xc6\xf6\x7d\xd3\x52\x59\x8a\x73\x5d\xcd\x35\x15\x93\x06\x9c\x19\xe3\x80\x82\x36\x8c\x84\x7f\x6b\x04\xfe\x8b\xaa\xf0\x4f\x68\x8d\x94\x86\xaf\x35\xf8\x0f\x32\xe9\xca\xf6\x6c\xae\xf4\x9f\xec\x9d\xe1\xb5\xcd\x79\x24\xcb\xd8\x7b\x0b\x0e\xf5\x7f\xb7\xc6\xb3\xfe\xe9\xb3\xb4\x69\x6a\x2f\xec\xe4\xaf\x48\x9b\x9e\x6f\xe2\x74\x84\x6d\x9d\xb0\x4c\xc8\x53\x8a\x81\xb1\x6b\x9b\x42\x88\x15\x4f\x53\x43\x09\x7b\x4a\xfc\x57\x48\x48\x50\x27\xd4\x10\x49\x26\x47\xf9\x16\x1d\xaa\x46\x62\xcf\x3f\xb5\xb4\xfe\x1b\x2d\xe3\x7e\x47\x77\xbd\x3f\xb7\xd3\xce\xcd\x0f\xaf\xdf\x6e\x2c\x8f\x4c\x4f\xb4\xdc\x5e\x8d\x2a\xbd\xa7\x67\xe3\xbe\x9d\x93\x28\xdc\xc5\xda\x82\x14\x69\x36\x64\x08\x91\xe2\x55\x60\x22\xc2\xf1\x00\x87\x43\x18\x8b\x6a\x20\x63\x11\xf0\x80\x73\x54\x44\xd3\x96\xc3\xd0\xb4\x4b\xf3\xa9\x14\x95\x8d\x76\x7d\xfa\xf6\x56\x65\xcb\xa9\xb5\x17\x0e\xd4\xdb\x3e\xf9\xd2\x80\x7b\xa7\x0f\x6e\x19\x43\x4b\xe4\xd1\xcf\xa6\xec\x28\x4f\xbe\xd8\x94\x44\xf0\xb3\xa4\x06\x1e\xab\xeb\xd8\xa3\x02\x96\x50\x39\x00\x15\x85\x51\x11\x86\x96\x0d\x90\xe0\x5b\x1e\x96\x58\xa0\x0b\x61\x6c\x79\x26\xaf\x20\x27\x72\x82\xc4\x26\xcf\xa9\xf0\xeb\xd5\xf5\x7f\x76\x2f\x74\xf6\x3a\x75\x60\x8a\x3c\xa4\x67\xcf\x9b\xf7\xb3\xcd\x75\xcb\xa9\x8f\x97\x0c\xda\x95\x63\x68\x98\x44\xb0\x9b\x1f\xb1\x9e\x10\x4b\x0e\x6f\x69\x28\xd2\x55\xc6\x91\xb5\x48\x14\x05\x52\x01\xd8\x14\x38\x82\x84\xbe\x6c\xba\x12\x13\x43\x8a\x74\x24\x4e\xe2\x42\x25\x95\xd7\xc6\xaf\x66\x5f\x7b\x3e\x98\x68\x7e\xf8\x6e\xa1\xee\x2f\x98\x8c\x63\xc3\x0d\x95\x32\xcc\xad\x3d\xf5\x46\xca\x85\x9f\x3a\x64\xc8\xce\x24\x4f\xc6\x1e\xaa\xb4\xef\x0a\x9c\x6f\x21\xc8\x1a\x02\xa5\xd1\x8c\x1b\x2b\x26\x92\x54\xd1\x87\x81\x67\x93\x04\xcf\x63\xce\xb6\x24\x9d\x0f\xa1\x65\x58\x92\xc2\x29\xe8\x15\x46\xdd\x3f\x41\x79\x52\x1a\x96\x4a\xff\x1f\xd7\xd4\x9e\xbb\x61\xfe\x81\xe5\xe2\x7c\x45\xd7\xd5\xef\xae\xd6\x6b\xc9\x8e\x29\xb2\xfd\x5e\xf9\xc2\xa5\xd7\xa3\x7c\xbf\x54\x1e\x76\xbb\xc7\xdd\xe4\xfd\x41\x68\xf3\x9c\x41\x61\xac\xaa\x8a\xec\x5a\x7e\x48\x09\x86\xa0\x0b\x84\x17\x7b\x12\x8e\x58\x41\x8a\x7d\x91\x27\xfc\x00\x46\x84\xcb\xb8\x18\xb8\x22\x4c\x85\x57\xb4\xd6\x7a\xb7\x40\xa3\x8f\x8a\xf4\x66\x26\x0c\xd5\x86\x54\xbf\x77\xe7\x5e\xb1\x86\x0d\x8f\xf6\x5c\xba\xe1\xcb\x26\xb3\x67\x65\x1b\xf1\x4e\xda\x26\x81\x09\xdd\x48\xd7\x24\x1e\x59\x9a\x1e\xc5\x9a\xe9\x9b\xac\x2e\x7a\xb4\x65\x78\x02\x83\x75\xdd\xf7\x09\x4e\x94\x14\xc5\x75\xa5\xd8\xd6\x39\xd2\xb3\x0c\x92\x63\xb0\x90\xd8\x8d\xb6\x0f\x79\x3f\x45\x29\xdf\xf1\xec\xc4\x56\xda\xb7\xc3\xbb\xef\xd9\xf3\xda\xe3\xb6\x95\xb5\x12\xf7\x9d\x8c\xab\x82\x1c\x63\x3f\x4d\x5f\x3b\x79\x29\x51\x8b\x5c\x5f\x8f\x78\xc3\x70\x42\xd3\x31\x3c\xc4\x03\x51\x75\x4c\x9a\x86\x50\xa6\x25\x46\xc7\x81\xa1\x49\x92\xcc\x49\x8a\x20\xb1\xb4\xeb\xd3\x98\xe5\x13\xa7\xc4\x06\x25\xab\xff\xb6\xe0\xd6\x7b\xe5\xe6\xfc\x5c\xae\xc7\x97\x6b\x0a\x0e\xbe\x2b\x64\x3b\xf0\xd6\xb9\x0f\x5a\xbe\x3d\xae\xce\xf1\xdd\x3f\xac\x52\x92\xd8\x1a\x90\x48\x5f\x0a\x45\x9d\x51\x6d\x32\xa0\x10\x17\x19\xb4\x1e\x0a\x86\x1f\xd1\x22\x6f\x89\x1a\xe2\x6d\x39\xf0\xf4\x98\x8b\x3d\x60\x33\xba\xef\xaa\xce\xdf\x1d\xf6\x7f\x79\xfe\x3f\xc1\xd2\x52\x1a\x66\x4b\x3f\xf3\x65\xcf\xff\xa6\xd1\x96\x82\x4b\xc6\xfc\x11\x14\x7a\x56\xb2\x73\xd3\x11\xeb\xeb\x65\x7d\x2f\xcf\xd4\x0d\x27\xd5\x4d\x17\x1f\x66\xcd\x3e\xef\x7e\x87\x38\x79\x7f\x50\xc3\x10\x13\xbc\x23\x06\xc8\x11\xad\xd8\x60\x65\xde\xa5\x2d\x92\x41\x06\xa3\x2b\x88\x63\x23\x4b\xd7\x48\x8f\x13\x83\x90\x20\xa0\x43\x60\x87\xe3\x52\x51\x8d\x41\x65\xfb\x6f\xa4\x4b\x56\x3b\x56\xf0\xa3\xe2\x39\xfb\xde\xa6\x86\x89\xed\x9c\x63\x6f\x2b\x6f\x3f\x71\x06\x4d\x6d\xb2\xf7\xe2\xcc\xe4\xc1\x6f\x21\xa2\x74\x11\x91\x44\x48\x18\x91\xc8\x8b\x26\xcd\x98\x48\x53\x05\x55\xf2\x45\x4a\xa7\x63\x27\x90\x24\x60\x8a\xb6\x16\x69\x44\x08\x20\x6d\x31\x5a\x9c\x0a\xa3\x4e\x7d\xe7\x20\x39\xec\x8e\x6b\xac\x19\x47\xaf\x19\x5d\xb3\xe3\x1f\xbf\x8c\x99\x57\x76\xf1\xaa\xcf\x2f\xaf\x38\xb9\xab\x7b\x0a\x9b\xc6\xe7\x54\x42\x93\xcd\x48\xb4\x62\x0f\xda\xb6\x89\x55\x29\xe4\x42\x85\xc6\xba\xa4\x68\xac\x41\xc5\xa1\x42\xd2\x16\x63\x79\x91\x4d\x61\x23\xa2\x08\x23\xa6\xcc\x00\xd8\xa9\x30\xea\x32\xed\x77\xaa\xc8\x93\x47\xaf\x7c\x31\x6b\x7e\xa6\x71\xdb\xda\xe4\xc0\xc7\x0b\x0c\x0d\x86\x2f\x19\xba\x3e\x6e\xfe\x74\xd3\x1f\xbf\xae\x4b\x9e\xc9\xa2\x03\x6d\x42\x56\x35\xe8\x31\xaa\x19\x79\x0e\x1f\xc6\xb6\xa8\xb0\x0e\x2f\x63\x39\xe6\x28\xd3\xe2\x79\xda\x77\x1d\x45\x65\x39\x18\xf9\x3c\xeb\xd8\x7f\x6f\xbf\xf9\x17\x3d\xed\x9f\x66\xb4\x29\x8d\xaa\xa6\x4b\xd7\xff\x65\x7a\x5a\x85\x7c\x1f\x2e\xad\x34\x60\x38\xd9\x96\x28\xd7\x2a\xfd\xa1\xdc\xed\xf2\x4e\x1a\x69\x96\x2b\xf9\xe1\xa8\x11\x67\xea\xed\x5c\x53\x60\xc9\xa7\x49\x4c\xfa\xb1\xe7\x53\x11\x62\xd4\x20\x92\x68\x08\x35\x51\x8f\x01\x2b\x63\xcf\xa1\x2d\x01\x28\x14\x69\x48\x8e\x81\x90\xaf\x04\x12\xb2\x7c\xc4\xc5\x86\x0d\x12\x63\xda\x9a\x6b\xa7\x8a\xb5\xff\x30\x3b\xbc\x57\xe2\x5c\xfc\x67\x8e\xe7\xef\xa7\xff\x7e\x6f\xb6\x61\xdf\x57\x6b\x51\xb4\xf4\x47\xa7\x0b\xae\xe8\x9b\x36\xcd\x83\x54\x96\x21\x8a\xb4\xec\x89\xba\xfb\xd7\xeb\x24\xb6\x54\xa4\xe8\x00\x30\xba\x4f\x2b\x5c\x08\x01\x6f\x12\x01\xef\x5b\xbe\x06\x22\x48\x13\x38\xd2\xa0\x69\x13\xaf\xce\x27\x85\x1c\x73\x2e\xce\xcf\xfe\xc9\x99\xdf\x0b\xed\xcc\x37\xa2\x72\xbb\x39\x2d\x6e\xb7\x23\x1a\xcf\xbf\x95\x39\xf3\x6b\x19\xee\x16\xa6\x3e\x68\x9f\xc4\x77\x09\xc1\x8a\x12\xe6\x5c\x4b\x62\x1c\x85\x32\xa0\xaa\x03\x03\xc8\x4e\x60\x4a\x31\x2b\x07\xba\x2d\x43\x49\x24\x1d\x23\xf6\x2d\x80\x51\x88\x14\xd5\x49\xa5\x8b\x50\x74\x41\xbf\x66\xaf\xbf\xc8\xbf\xa3\x68\xb9\x82\xc3\x77\x5d\x6c\xb5\x7f\x7d\x7d\xae\xc2\x70\x9c\xfb\x50\xf5\x92\x57\x0f\xad\x98\x79\xe1\xeb\xe4\x9d\xb0\x22\xe9\x6e\x6c\x00\xe0\x72\x26\xf4\x11\xa0\x29\x87\x25\x55\x12\x88\x31\xed\x38\x04\xeb\x89\x26\xc5\x3b\x24\xb2\x65\xcc\x28\x94\xac\xe9\x94\x49\xfc\x4d\x00\xfc\xd7\x93\xfc\x9f\xc0\x06\x29\x8d\xf2\x65\xeb\x9f\xee\xe5\x8c\x7f\xa5\x7e\xde\x1c\x8b\xef\x8a\x27\xeb\x17\x1a\x1d\x56\xfa\xf2\xd4\xad\xc6\x33\x8c\x4c\x77\x16\x0f\x3e\xb6\xfb\xce\x95\xaa\xab\xbb\xdc\x4d\x1b\x62\x24\xb1\x36\x5e\x84\x2c\x35\xc2\x42\x28\xbb\x8e\x62\x23\xcb\xa3\x38\x85\x37\x69\x14\x2a\xbc\x84\x48\x25\x0c\x75\x8e\x12\x4d\x4e\x66\x35\x51\xa2\x4d\x9e\x97\x35\x2e\x71\xc6\x7f\x51\x5e\xce\xda\x6c\xce\xee\x8d\xe5\x4c\x71\x45\xe6\x5b\xd2\x5a\x63\x5d\xca\xb9\x05\x2d\xbf\xdc\x57\xba\xfb\x1e\xfc\xf3\xb8\x95\x49\x64\x65\xba\x1c\x46\x6a\x18\x91\x2c\x62\x45\x4a\x23\x55\x9e\x50\x35\xd7\xd7\x03\x49\xe4\x3d\xda\x25\x91\xa0\x88\x3a\x89\xd5\xd8\xd7\x79\xc9\x14\xbc\x40\x89\xcd\xc4\xe9\x73\xf0\xd5\x3b\x9f\x35\x69\x9c\xb5\x62\x93\x0b\x23\x57\x8d\xb8\x1c\xae\x6f\x7b\x7a\x6e\x50\xf7\xbb\x8d\x8d\xef\x1d\xfd\xe8\x93\x5c\x17\xde\x59\x95\xbc\x7b\xd5\x11\xa5\x20\x16\x2d\x42\x91\x10\xa7\xbb\x8c\x63\xc8\xb1\x03\x42\x8e\xa5\x04\xc3\x41\x18\x68\x1a\xe2\x58\x81\xb3\x63\xc9\x07\x3c\x34\x43\xd7\xff\x9f\x5d\x06\x09\xb4\x84\x72\x3c\xda\xd6\xfa\xda\xbc\xfe\x67\x50\xc3\xd6\xe5\xbd\x3d\x07\x3f\xed\x5b\x66\x70\xf6\xdd\x3b\x2f\x37\x2d\xf6\x65\xcb\xbb\xa7\x94\x24\x42\x89\x44\x1b\x8a\x3e\x15\x60\x5d\x12\x65\x49\xe6\x68\x60\xc7\x0a\xc1\xe9\xbc\x18\x07\x1a\xc4\x0e\xe9\xd2\x22\xe6\xa1\x1a\x41\x5d\x96\xa1\x1a\x71\x90\xfc\x7b\x0f\xe8\xc6\x9c\xff\x1d\xae\x23\xa5\x51\xa6\x4c\x1f\xa6\x7b\xb9\xdd\xbd\x6b\xfc\x6e\xf3\xfe\xe7\x2d\x37\x95\xd9\xd6\x60\xe4\xac\x85\x5b\x6a\x52\x07\x36\xbd\x26\xee\xda\xba\x7c\x60\x1b\x30\x69\x42\xb3\xee\xc9\x83\x54\x42\xda\x94\x34\xcd\x0d\xa0\x18\x48\x8c\x65\x63\x40\xa9\xac\x83\x62\xc6\xa0\x49\x07\xab\x48\x64\x35\x32\xa4\x14\x18\x90\xbc\x8f\x55\x03\x45\x0c\xf3\x6f\x42\xc4\x2f\x99\x7c\xe0\x8d\xbe\x3f\x1f\xff\xf2\xda\xbb\x07\xdf\xce\xd5\xb1\xcc\xb5\xb1\xfb\xa5\x29\x23\x1f\x3e\x3c\xd0\x48\xbf\x3e\xcb\x1f\xb5\xfa\x8b\xe7\xcb\x93\xe7\xfa\x82\xaa\xdb\xa4\x07\x03\x2b\x72\x3d\x1f\x10\xb6\x60\x79\xa6\x1a\x05\xaa\x16\xd8\xc0\xf2\x48\x9b\xe3\x91\x8b\x0d\x56\x21\x0c\x92\x97\x60\x2c\x3b\x9c\x95\xd8\xe4\xe5\x55\x3f\x3a\x3f\x75\x7c\x38\x73\x97\x50\xf6\xf6\xae\x35\x29\xbf\x9c\x9a\xb2\xb6\x68\xe5\x39\x7f\x2c\xea\xf5\xa8\xf8\x2f\x87\x64\xe6\x46\x12\x41\x08\xa2\xc0\xba\x58\x64\xe4\x50\x52\x38\x81\x33\x03\xe0\x32\xa2\x68\x31\x84\x10\xfa\x52\x64\x62\x41\xc3\xa2\xc5\xbb\x32\x65\xdb\xbe\xa9\x10\xa6\x81\x53\x19\x2a\xd4\x79\xf4\x7b\xd1\x5d\x2d\xde\x28\x3c\x6d\x57\xb5\x07\xf4\xc6\x99\x25\xe6\x4e\x2b\x32\xbc\x63\xdf\x06\xed\x32\x6f\x1b\x72\x56\xaf\xf9\x49\x12\x45\x1a\x02\xc8\xf9\x32\x41\x3b\xbc\x17\x72\x16\x6b\x89\xb4\x28\x3b\x2c\xe3\x5b\x9c\x67\x85\x64\x10\x05\xa2\x0d\x14\x93\xe2\x54\xec\x49\x3a\x8f\x38\x28\x38\x4a\x62\xdc\xc4\xeb\x8b\x2a\x9f\x08\xca\x3f\xef\xd1\x3e\xdd\x83\xb7\xf2\x9d\xe3\x96\x54\x58\x34\xef\xac\xdd\xf4\xc9\xf2\x75\xd1\xf4\xf2\x83\xf6\x2e\x4a\xdb\x38\x2d\x31\x3c\x58\x02\xac\x0d\x1c\xa8\xd8\x9a\xc8\x99\x4c\x68\xc4\x36\x45\x12\x02\xc5\x43\x87\x73\x2d\x40\xf1\xb1\xc3\x4b\x62\x08\x7d\x24\x19\xb2\x16\xfa\x26\x4c\x80\x66\x2e\x59\x2e\xfd\xe3\xd7\xaa\x86\xa7\xeb\xb4\x6f\xfd\xfb\x80\x2f\x72\x37\x78\xb6\xb8\xc5\x90\x9d\xfb\xb3\x8d\x3e\x15\x85\x23\x7f\xad\x7a\xe8\x64\xf2\x6e\x1d\x19\x73\x02\x0f\x25\xcf\x12\x98\x80\x09\x04\x97\x37\x29\xd6\x93\x23\x05\x11\xc8\x32\x7d\x10\x53\x2a\xa9\x5b\x3a\x86\x82\xc9\x4b\xc8\x50\x65\xc0\x5a\xaf\xe2\x26\xae\x55\x5a\x82\x7b\x4d\x1c\xd0\xf6\xd8\x93\x13\x93\xc4\xa5\x1f\x5e\x19\xe7\x8d\x5a\x58\x00\x94\xb9\xba\xa5\xc9\x2f\x3f\x4f\x92\x9e\x26\x71\xbb\xa6\x13\xb1\xb4\xc3\xfb\x36\xed\xfa\x18\x98\x16\xed\xaa\xd0\x12\x62\x85\xe2\x24\x5e\x0a\x95\x90\xf6\x68\x5a\x27\x29\x3d\x0c\x38\x0a\x12\x8c\x6a\x07\x58\x49\x5c\xb9\xe4\x2d\x37\x7f\xce\x5e\x34\xef\x7a\xcd\x2e\x7d\xcd\x85\xdf\x50\xb9\x98\x8c\x3d\x36\x94\x99\x24\xae\x51\xbe\xc9\xdc\xe2\xcf\xa3\x41\xf2\xf4\xf9\x20\xa3\x49\x9c\x04\x6d\x59\x15\x34\xd6\x76\x28\x82\x04\x24\xad\x8b\x3c\x00\x8c\xa8\x99\x0e\x70\xe4\xd0\xb0\x22\x4f\xb3\x14\x27\x72\x49\xe8\x62\x88\xf5\x57\x86\x09\xff\x04\xf2\x48\x69\x94\xa1\x50\xba\xff\xa8\x5c\x2a\xb3\xe6\x8b\xca\xfd\x9a\xcd\xf8\xb9\x23\x7f\xbf\xe0\xb0\xab\xfb\xea\xd5\x5f\xf2\xee\xb5\x79\x9b\xb6\x15\xfe\xec\xce\xd7\x63\x86\x34\x4c\x22\xab\x55\xf1\x55\x8a\xe2\x65\x5b\x05\xa2\xe6\x2a\xbe\xe7\xd9\x14\x15\x08\x9c\xaa\x89\xba\x28\x84\x30\x12\x2c\x24\x52\x94\x29\x53\x16\x8e\x79\x25\xa2\xa1\x9b\xca\x5b\x35\xc7\xd0\xb7\x7f\xce\xdb\x75\xbd\x73\xad\xf9\x06\xed\x6d\xb0\xa6\x79\x9f\xa5\xf2\xed\x1b\xf7\x72\xde\x35\xea\xa1\x11\x87\x4a\x64\x78\x90\x44\x51\x6d\xa0\x91\x11\xb2\x2c\xd7\x41\x31\x21\x03\xc7\x00\x58\x20\x34\xc5\xd2\x5c\x4d\x74\x23\x24\x05\x1c\x50\x02\x2c\x86\xbe\x0c\x15\xc7\x8d\x79\x52\x01\x89\x4d\xae\xf4\x46\xcb\x99\x13\x3a\xe6\x2d\xde\xb5\xca\x3b\x17\xf7\x74\x6e\x51\x67\xcc\xb1\x92\x5b\x27\xbd\x78\xe3\xd2\x9b\xef\x6d\xdd\x3f\x62\xf2\x1b\x19\x93\xe9\x47\x31\x0a\x48\x46\x8a\x24\x8f\x25\x1d\xd7\x17\x65\x51\x11\x65\xd7\x72\x49\x5f\x27\x10\x56\x03\x4f\x55\x22\xe8\x32\x2c\x47\x19\x6e\x28\x38\x80\x75\x13\xbb\x7e\x33\x6d\xd7\xa1\x92\x03\x1b\xe6\xc8\x83\x6e\xee\xbb\x0b\x5a\x34\x68\xfc\xdd\x96\x3d\x8f\xf7\x76\x6f\xd5\xec\xbd\x41\x8f\xee\x37\x3d\xb7\x26\x89\x26\x8b\x5e\xec\xe8\xb2\x88\x43\x52\x93\xd9\x18\x90\x31\xe0\xa3\x08\x44\x9c\x81\xb0\x2e\x18\x80\x21\x6c\x44\x8b\x81\x13\xab\xbe\x4e\xf2\xb6\x29\x2a\x7f\x2b\x54\x2f\xab\xf7\x3f\xd6\x7e\xb7\xe9\x56\xa1\xc5\x8f\x37\xed\xbc\x5c\xaf\x44\x9b\x63\xf3\x76\xf7\x9b\x38\xf9\xcd\x1a\xe2\xbe\xf3\xcd\xf3\xcf\xbe\x55\x6b\xfa\x2d\xf3\x76\x4a\xa3\xcd\x2f\x1e\xf4\x9b\x5c\xfc\xa5\x97\xdf\xbc\x49\xad\xd9\xd9\xb5\xd3\x9f\xbb\x70\x7a\x6b\x4a\xed\x3a\x85\x72\x3e\x59\x73\xe0\xf4\xdb\xd4\xfd\xb6\x3f\xe6\x3f\x9e\xf7\xf0\xc1\xf2\x45\x93\xf8\x94\x8a\x74\xc5\xc0\x1a\xcb\x93\x9a\xc5\x02\x8b\x76\x18\xd9\x65\x40\xc0\x10\x94\x25\xe9\x81\xe0\x91\x8a\xe3\xe8\x21\x8d\xcd\x88\xe6\x44\x57\x61\x0d\x35\x01\x92\x7e\x63\xc9\xe7\x9d\x3e\x1d\x34\xf7\xf2\xfe\x96\x57\x97\xdd\x60\x07\x1e\x2a\x8e\xd3\x2d\x5b\x29\x7a\xd9\x2e\xbb\xfe\x95\xe1\xb9\xf9\x87\x49\x44\x4e\x18\x91\x45\x2a\xb6\x18\x33\x84\xc2\xc7\x81\x61\x6b\xa4\xc6\x9b\x20\x06\x50\x07\x6a\xec\xd2\x8a\xec\xd1\xb1\x1c\xb1\x12\x88\x74\xdd\x88\x61\x10\x85\xa9\x50\x40\xb3\xf6\x45\x4c\x97\x8a\x27\x00\xdd\x63\xca\xcc\x8f\xc7\xbc\x56\xf0\xca\xb8\x62\x7d\x3f\x3a\xf2\xfa\xe0\x6b\xdb\x67\xb2\x5f\x2e\x1d\x75\xf9\xa5\xef\x91\xa1\xc3\x92\x1c\xb5\xfa\x3f\xd7\xab\xbc\x9f\xc2\x8f\xfc\x72\x81\x5e\x30\xaf\xf4\xf9\x9d\x73\xbf\x10\xb3\xe8\xb3\x03\xe6\xdf\x54\xd2\xf6\xb4\x4d\x58\xdf\x5b\xa1\xcc\xc4\xc0\xc7\x2c\xa4\x1d\x8f\xb5\x58\x51\x22\x90\x89\x78\x19\x07\x08\x2a\xaa\x61\x89\x1a\x63\x7b\xbc\xce\x18\x96\xa1\xc5\x2a\xe6\x34\x85\x7d\xf5\x3e\x0b\x3e\x5c\x31\xb3\x98\x78\x2c\x85\xc8\xdb\x61\xf2\x8b\x6a\x78\xcc\xec\x6f\x77\x9d\xad\x86\xce\x05\xfc\xb4\x8f\x83\xb8\xc0\x91\xb4\x7d\x8f\xc4\x1b\xcf\x15\x81\x21\x75\x3a\x06\x86\x0e\x40\xc8\xb8\x34\xb0\x04\x83\x40\xd0\x14\x11\xcf\xc6\x74\x48\x39\x16\xd0\x2d\xde\x08\x59\x9e\x77\x65\x10\x7a\x4a\x2a\x6b\x7d\x46\x6f\xce\x60\x66\x7c\xca\xb7\x8f\xbf\xeb\x42\xc0\x36\xb9\x76\xdd\xcb\x52\x66\xe7\xf2\xe3\x65\x9f\x14\x4f\xe9\x94\x85\x38\x5c\xbb\x6c\x12\x47\xc7\x00\x91\x94\x13\xc9\x01\xa5\x50\x20\x8e\x42\x59\xe6\x30\x23\x2a\x12\x8a\x5d\xce\x60\x62\x97\x8d\x74\x52\x81\x80\x80\x51\x0c\x14\x48\x45\x14\x56\x5f\x2d\x70\x36\x64\xbd\x38\x7c\xd5\x86\xc7\x47\x86\x7f\x77\xa3\x54\x95\x74\xd5\x3f\x3c\x39\x61\x06\x78\x6f\xe5\x07\x6f\xe4\xdb\xd4\x7d\x49\xbf\xae\x3f\xa6\xcd\xdc\x84\x27\xcc\x11\x02\xd4\x6c\x4d\x0b\x15\x55\x0c\x02\x8c\x2d\x9d\x26\x68\x04\x23\x43\x03\x5e\x6c\x39\x28\x64\x39\xc7\xd0\x64\x20\x8b\x8e\x27\x68\x81\x2f\x3b\x4a\xe2\x13\xfe\xee\x13\xad\xcb\xbb\x93\xbe\x1e\xb9\xdd\x6f\xba\x5f\xea\x30\x23\x53\xee\xd2\xbf\x8d\x1f\x1c\x3e\x51\xd7\x1f\x2d\x57\xb7\xe0\x9a\x91\xad\x93\x97\x53\x42\x91\x25\x0d\x95\x34\x39\x33\x52\x09\x9b\xf7\x3d\x9d\xa7\xb8\x50\xe3\x59\x1c\x7b\x92\x03\x62\x00\x22\x33\x24\x90\xe0\x12\xb6\xaa\xb8\x9c\x89\x1d\xf0\x6a\x4e\x39\x7f\xaf\xed\xee\xa6\x9d\x16\x35\xec\x6c\x64\xaf\xfa\xcd\xd0\x15\x13\x33\x0e\xcb\xf3\x67\xf3\x45\x15\x46\x57\x99\xbf\x62\xfc\xad\xc3\x6f\xd4\x4b\x5e\xc8\xc5\x1c\x01\x5c\x82\xf2\x7d\x10\x85\x58\xe2\x42\xa8\x1b\x80\xa6\x39\xd1\xb2\x35\x1f\x63\xcf\x88\x59\x83\x71\xd8\x50\x17\x4c\x9b\x8e\x15\x05\x58\x31\x91\x0a\x96\x35\x5f\x86\x79\xbf\x66\xaf\xb2\x32\x5b\xe9\x95\xf9\xca\x1e\x6e\x58\xf0\x4a\x89\x9c\x65\x97\xd5\xbe\xd5\x80\xe5\xe7\x0c\x1a\xf4\x79\xca\xd7\x2d\x5e\xfe\xf5\xae\xca\xce\xf6\x3a\x3d\xbe\xe9\x9a\xa5\xdf\x8e\x1e\x85\xde\xfb\x71\xde\xe1\xaf\x17\x74\xfc\x28\x9d\x93\xf9\x6a\xe6\x0b\x2d\x0a\xbc\xff\x6b\x96\x97\x7f\xcd\x6f\xac\x57\x6f\x64\xed\xe5\x43\xbe\x38\xd9\xb4\x46\x78\x7a\xc7\x88\xf1\x57\x2b\xd7\x0c\xba\xe5\x5e\x7d\xed\x51\x8f\xc3\x6f\xd6\x6c\x0f\x5f\x7a\x2e\xa4\x6f\x31\xad\xfb\xb9\x2f\x3f\x9a\x3b\x72\xdd\xe8\x15\x55\xfb\xa1\x13\xd3\x7a\xce\x3f\xd5\x73\xc5\x4f\x2b\x46\xff\x72\x75\xc0\x35\xe1\xeb\xb4\xed\x56\x4c\xac\xba\xeb\x82\x50\x26\x0d\x24\x60\x2c\x6a\x8a\x2f\x84\x12\x12\x75\xe4\x50\x06\xc9\xf2\xb2\xec\x5a\x7c\x84\x79\x56\x87\x16\xb0\x00\x88\xbc\x80\x13\xd9\x04\xdb\x70\xdf\xbd\xf5\xe8\xca\xd6\x53\xd9\xfe\x68\xce\x4f\xfd\xb8\xf7\xb1\x2c\x87\x1b\x4a\x35\xf2\x64\xfa\xfc\xec\xc6\x8a\xfb\xda\xfa\x4b\x8d\x5f\xd2\x86\x5b\x4e\xe8\x9a\x66\xa8\xdb\x9a\xaf\x85\x40\x43\x50\x16\x3c\xa8\xc1\x28\x74\x79\x4c\xf9\x61\x24\x13\xb2\x42\x6b\x91\x47\x19\x5c\x80\x28\x47\x26\x2c\x5d\xf5\x29\xce\x7e\xd5\x35\x6f\xdd\xab\xfc\x4e\xe1\x7a\xbd\xc7\xed\xe8\x5e\xfb\x7d\xfe\xf3\x9a\xc5\x77\x75\x6f\xea\x6f\x18\xb9\xe5\xc0\x98\xbc\xe7\x6f\xb8\xbd\x56\x2c\x4a\x22\x2d\x8f\x31\x01\xcf\x33\x24\xeb\x21\xc2\xf6\x64\x46\x37\x24\x85\xd5\x4c\xce\x77\x65\x4e\x47\x01\xe9\x5b\x0a\x29\x93\x01\xb6\x4c\x9b\xb7\x90\x40\x30\xbc\x9c\xf8\xfd\x58\xe4\xc5\xc8\xef\x4f\x94\x3b\x36\x76\x43\x93\xe2\x61\x47\x7a\xed\xbd\x6e\xc7\xf7\xb4\xc9\x59\x71\xc4\x3d\xf9\xbe\x9e\xc1\x6a\xb3\x68\x5e\x12\x6f\x04\x32\x52\x68\x83\xe5\x15\x5a\x89\xfc\x48\x0d\x3c\xc1\x50\x7d\x20\xab\x98\xb2\xa1\xe1\x08\x0a\x74\x6d\x0d\x79\x34\xe5\xb8\x36\xcd\x12\x36\x11\x69\x09\xd6\xe8\x0d\x24\x67\x4e\xb8\x72\xa9\x71\xfa\xee\x19\xc7\x93\x46\xcf\x22\x3f\x0e\xed\xb7\x25\xfd\xc4\x59\x0f\xe7\x3e\xde\xdb\xe8\xd1\xb6\x29\x53\x92\x58\xff\xf8\xbc\xed\x69\xb1\xcb\x86\x61\xc8\xb1\xac\x21\xe8\x3a\x07\x75\xdb\xa1\x48\xde\x91\xa8\x90\x8e\xa8\x58\x37\x30\x6b\x04\x2a\xe7\x78\x62\xcc\xe9\x72\x22\x87\x78\x5c\x68\xe4\xce\x73\xdf\xd6\x98\x3c\x75\xea\xfb\x63\xee\x7c\xf7\x56\x9e\x03\x05\x4f\x4e\x28\x52\x62\xcb\xb8\x7d\xd1\x82\x83\x43\x2e\xff\x92\x36\xbe\x7c\xe2\xdb\xc0\x0e\x94\x38\x12\x55\xcc\xd3\x7a\x80\xe8\x90\x0e\xc3\x30\x12\x48\x9d\x09\x45\x35\x00\x1c\xa7\x59\xba\x45\x60\x91\xa6\x3c\xd7\x00\xa2\x1d\x41\x98\xda\x76\xed\xe8\x22\x39\xe5\x5a\xad\x2a\xdf\x3e\xea\x78\xe5\x3b\x50\xba\xed\x6d\xba\x46\xd3\x66\xbb\x07\x68\x6f\x91\x4e\xd6\x8f\xba\x7d\xd2\x98\x7a\xf9\xd7\xec\xdb\x4f\xb3\x3e\xfa\xad\x4e\xaf\x1b\xd3\x2f\xb6\x1d\x7e\x7b\x6b\xf5\x51\xd3\x4f\xe8\xe1\xb3\xbd\x35\x67\xa7\x9b\x5a\xfd\xdd\xcb\x47\x6b\xbc\xfc\xeb\xf7\x2b\x0e\xaa\x5a\xf5\xf5\x29\xc7\x4f\x17\x98\x75\xa7\x60\xba\xb9\x1b\x72\x74\x5b\xd6\xba\xca\xa8\xe1\xef\x9c\xde\xec\x7e\xd6\xed\x57\x67\xf6\xcb\xbf\x9e\xfe\xfa\x92\xae\xd3\xa7\x8c\x3d\xd8\xab\x7d\xfb\x23\x4d\x16\x34\xd7\xb3\xe7\xdf\xf2\xf8\x8b\x15\xb9\x00\xd4\xcb\x74\xbe\xdc\x70\x55\xd1\x97\xf7\x7c\x7f\x37\xac\xc7\x8e\x7e\x23\xaa\x1d\xcb\xbf\xf2\xf4\xc6\x5f\xba\x09\x13\x66\xb6\xed\x70\x4d\x3f\x6a\x9f\xbb\x7b\xf7\x4c\xe6\x05\x4e\xda\xb4\xc0\x12\x66\x36\x55\xd6\x2d\x97\x65\x55\xdd\x50\x3d\xa0\x44\x24\x81\x00\xa5\xca\x06\x82\x24\xe9\x90\x9c\x45\x20\x8a\x0b\x78\xe0\x32\x42\xa0\x73\x96\x21\xc0\x98\x63\x5f\xcd\x6c\x05\xf9\x5b\x47\x6e\x3e\x6a\x9a\xef\xe6\x8f\x3f\x3f\x9f\x7a\x39\x7f\x13\xad\x45\xe6\xd9\x97\x57\x94\x1b\x90\xab\xc3\x37\x33\x3e\x7f\xe3\x48\xda\x38\xa6\xa9\xc8\x56\xd3\xd8\x0e\x6d\x33\xf2\x65\x86\xfa\xab\xf6\xa2\x48\xac\xda\x48\x0b\x45\x10\x62\xc6\xf3\x00\x8c\x35\x99\x77\xa3\x28\x70\x44\xc6\xb4\x80\xa0\x82\x57\xe3\x8e\xaa\x5e\x26\xcf\xf9\x76\xdb\xca\xcc\x3f\xbf\x5d\x4f\x59\xf4\x79\xb6\xdc\x43\x0a\x17\xf9\xca\x3b\x32\xa5\xf4\xb2\x4b\x7f\xbe\xbf\xf7\xa7\xb4\x99\x9b\xb8\x11\x42\x29\x98\x91\x74\x1c\x48\x8a\x8f\x18\x36\x36\xb1\x23\x42\x9f\x8f\x08\x2b\xc6\x98\x51\x65\x4d\x71\x49\x81\x57\x08\xc6\x73\xdd\x90\x65\x19\x86\xf0\x13\xcb\x12\x94\xac\x79\xa5\xee\xe3\x0c\x7f\x4e\x9d\x38\x26\xfb\xde\x33\x4d\xfb\x2d\xeb\x5c\x4c\x9d\x3e\xa9\xdd\x48\x6b\x76\xc7\x3c\x07\xaa\x1f\xfc\x3c\x6d\xa8\xed\xc4\x7b\x79\x21\xc4\x1c\x96\x20\x45\xf3\x3c\x6d\xf0\x02\x45\x99\x7e\x28\x84\xba\x1f\xb2\x2a\xc0\x11\x6f\x19\x96\x48\xf3\x96\xc0\x12\x84\xc7\x38\x3e\x84\x31\xfd\xea\x09\x93\x91\xd1\x39\xde\x57\xbf\xcd\xdd\x1e\xeb\x0a\x8d\x3a\x9f\x39\xdf\x94\xcf\x0f\x16\xe9\xd2\x6d\xf1\xe5\x09\x37\xc1\x57\x25\x96\x1c\xa4\x92\x97\xd9\x14\x11\xc1\x30\x20\xe8\x10\xba\x11\xa2\x55\x0d\xf1\x11\x96\x02\x29\xe2\x9d\x10\xeb\x2e\x90\x15\xce\x43\x48\x66\x24\x0f\x38\x88\x40\x7c\xc0\x71\xee\xab\x99\xed\xf0\xda\x32\x45\xeb\x4e\xfe\xa9\xfc\x9a\xdf\xf6\x7f\x31\xec\xe7\x9f\xb7\x6e\xe2\x0b\x6d\x19\xb2\x6e\xd1\x94\x71\x87\x73\xbe\x59\x6a\xf5\x9c\x24\xc2\x23\x39\x95\x90\xdc\x48\xe4\x75\x23\x34\x03\x0d\x02\x53\x03\x5a\x1c\x21\x0b\xe3\x38\x86\x3e\x29\x61\x14\xea\x82\x06\x65\xe8\xd9\xa4\xed\x59\xbc\xac\xa4\xc2\x39\x34\xfb\xe6\xdc\x3b\x7e\xd4\x20\x7a\xda\xd3\x75\x1b\xda\xdb\x25\xab\x81\x94\x39\x3f\xc3\x3c\x3b\x96\x6f\x6c\x5c\xfb\x52\x91\xb2\xcf\xd2\xb6\xd9\x2c\x61\x86\xe0\x42\x2c\x61\x8f\xa4\x1c\xd3\xd0\xa2\x00\x68\x31\x08\x2c\xc3\x23\x0c\x93\xd3\x75\x5f\xd5\x18\xc2\x86\x82\x2b\xf2\xb4\x4a\xc7\x96\x63\xb8\xa2\xe5\x24\xd8\xc9\x3b\xa9\x7a\xa7\x21\xad\x3f\xad\xf8\x76\xa7\xb1\x47\x3a\xee\x7c\xd0\x72\x40\x97\xcf\xbf\x2f\xf2\x53\xfe\xce\xb3\x1f\x0d\x7b\x52\x93\xfb\x20\x2f\x99\x44\xe4\xa0\xa8\xdb\x14\xa6\x99\xd8\xf3\x18\x2a\x08\x2d\xc5\x27\x65\xdb\x62\x25\x26\x0c\x58\xd6\xf5\x25\x4d\xc2\x0c\x6f\x73\xb2\xcb\x93\x3e\x08\x68\x84\x35\xeb\x55\x73\xcf\x3e\xac\x97\x2d\x65\x47\xd3\xed\x67\x7a\x9c\x1d\xb5\xe1\xc0\x0c\xf7\x3b\xf5\xfe\x5b\xbb\xce\x56\x79\x77\x72\xc7\x0c\x27\x72\xb6\x6e\x51\x39\x89\x19\xc2\x10\x35\x82\x65\x64\x4b\xf2\x48\x51\x8d\x79\x46\x22\x10\xe0\x78\x46\xe6\x75\x4d\xa2\x2d\x15\xea\x26\xf6\x2d\x5f\x0a\x3d\x09\xf3\x96\x6c\x05\x04\x9b\x38\x43\x64\xbf\x34\xbe\xd0\xe8\xf1\x0f\x0d\xea\xfe\x54\xa7\xec\xd7\x4b\x8e\xb5\x5b\x81\x57\xe5\xfa\xe6\x4a\xa7\xaa\xbf\xd4\x1b\x97\x6d\xa9\xd3\x2e\x89\x3c\xff\xc8\x57\x3d\x4d\xf3\x23\xde\x0e\x04\x57\xd6\x49\x2b\xb6\x8d\x30\x94\x4c\xcf\xe4\x39\xec\x12\xb1\x8e\x18\x4a\x80\x9e\xfe\x57\xd4\xd9\x86\xe4\x93\x09\x4e\xf8\x53\xb9\xc0\xf7\x2d\xb9\x17\xc5\x6e\x3a\x85\x7f\xbc\xb8\x35\x5d\x51\xae\xc9\x99\x7d\x9f\x7e\x31\xba\x4b\x29\x9c\xf1\x97\x1f\xf3\xd4\x1d\x95\xc4\xc1\x9c\x46\xba\x34\xa7\x5a\xb2\xa5\x23\x4b\x72\x45\x9f\x72\x4d\xa0\x69\x01\x34\x28\xa4\x7b\x4e\x48\x63\x93\x52\x1d\xcf\x97\x30\x11\x9a\x40\x14\x0c\x3b\x81\xbc\xd1\xbc\x66\xab\xda\x5d\xc9\xf6\x47\xb1\x51\x1f\x6e\x51\x7b\xe9\x60\xc7\x4f\x8b\x8a\xf1\xfb\x99\x12\x39\xd2\x37\x7f\xb2\xa1\x3f\xf5\x71\xda\xb6\x3a\x25\xee\xfd\x50\x92\x47\xfa\x34\xc9\xeb\x8e\x1c\x84\xb4\xa0\x72\x94\x62\x4a\x84\xe8\x91\x21\xeb\x48\xa1\x8d\x38\xd3\x43\x84\xcb\x87\x9e\x0d\xe2\x38\x8e\x74\x16\x24\x6e\x20\xbe\x13\xd5\xdc\xe6\xb3\x6b\x47\xf6\x19\x50\x21\xeb\x85\x1b\x45\xc3\x11\xee\xf9\x3a\x8f\x5f\x6b\xf2\xf9\xbb\x41\x95\x6e\x1d\xf3\xee\x4b\xdb\x8a\xbb\x84\x49\xcd\x0a\xe2\x90\x0a\x7d\x8a\xd6\x5c\x96\x24\x08\x2a\xe6\x08\x55\x35\x78\xc6\x70\x74\x5e\x77\x58\xcc\x50\x9c\x14\xb3\x36\x60\x0d\x9f\x92\x02\x84\x00\xe4\x12\x3f\xde\x4b\xde\xfd\xca\xa9\x3a\x2c\x97\xd8\x2f\x8f\xb5\x79\x06\x35\xac\x71\xd1\x27\x3d\xd3\x35\x6b\x93\xaf\x57\xcd\xb1\xcb\xde\x7c\xf4\x69\xef\xb4\x75\x74\x12\xfa\x30\x90\x1d\x27\x36\x58\x5f\x66\x0d\x52\xc1\x92\x8a\x18\x21\x42\x84\x2a\x3b\x3e\x03\x22\x9b\x66\x14\x99\x8e\x45\xe0\xd3\xae\x29\x30\xb2\xc6\x02\x5b\x16\x12\x88\x68\x7e\xf6\x51\x89\x7e\x87\x3b\xae\xdf\x36\x92\x2e\xbe\xef\x5a\xbe\xa7\x56\xb9\x05\xf9\x36\x4c\x52\xdb\xdd\x7a\xfe\xf5\xf0\xac\x44\x99\x24\x12\xd6\x78\x4b\x91\x38\x12\x40\x6c\xe9\x22\xc7\xe9\xaa\xa2\x20\x9b\x66\x5d\x51\x21\x79\xe4\x6a\xbe\xe5\x33\x6c\x2c\x41\x86\x74\xfc\x58\x90\x7c\x4e\x0e\x71\x98\x18\x6c\xf3\x43\xf9\x06\x97\xa6\xd5\x3b\x1c\x0e\xef\x3c\xb6\xc8\x86\x5c\x7f\x78\xb3\x37\x93\x79\x37\xd4\xc9\xa5\xcd\xed\xb8\x96\xbf\x7f\x73\x70\x12\xdb\x23\xe4\x5f\x77\x9b\x17\x1b\x3e\x45\xb9\x9c\x4d\xaa\x58\xf1\x5c\x93\x24\x6d\xc2\xd7\x5c\x91\x23\xb0\x4a\x1a\x88\x32\x62\x4a\xb2\x6c\x36\xe0\x51\x68\xfd\xcf\xb2\xfc\x97\xc3\xee\xca\xd0\xcc\x1f\x1e\xec\xdc\x7b\xd5\xf5\xae\x99\x1e\xcf\x5d\x3e\xf2\xf9\x37\x2d\x87\xde\x98\x70\xfa\x58\xf6\x91\xcd\x0b\x77\x3b\x25\x5f\xcd\x96\xbc\xb0\x43\x0e\xe5\x8a\x30\x14\x30\x47\xf0\xc0\xe5\x44\xa4\x00\xd7\xf4\x11\xe1\x38\x3c\x25\x85\x21\x6d\xea\x48\x75\x25\xc9\xa4\x68\x57\x71\x44\x22\x24\x78\x31\xf1\x09\xb7\xaf\x7a\x7a\xc8\x8f\x95\xeb\x2f\x38\x91\xee\xc2\xf4\x19\x5d\xe4\xf5\xdb\x96\x7c\xdb\xe5\x56\xb3\x07\xdd\x67\xb3\xda\x9d\x61\x95\xb7\xa7\x6d\xb9\x48\x62\xdd\x36\xd9\x23\x00\x1f\x28\x11\x40\x48\x8c\x62\xe8\x61\x95\x13\x64\xd9\x8a\x45\x00\x6c\xa8\x21\xd6\xb3\x28\x5b\x8d\x18\x4e\xa4\x0d\x29\x32\x62\x8b\x4f\x90\xd8\xb6\x3c\x18\xf9\xe7\x57\x5d\xeb\xe4\x7c\xf1\xd5\xaf\xf7\xef\xfc\x7c\x62\xc8\xd1\x85\xad\x37\x95\xfe\xf2\x1b\x73\xfb\xfc\xc3\x9b\xe7\xdc\xdb\x9a\xb6\x3a\x22\xa1\xb9\x5e\x10\x2a\x31\x46\x98\x43\x0c\xcf\xe8\x02\x70\x34\x05\xbb\xa4\xaa\xb1\x8c\xac\x04\x21\x6f\xfa\xb1\xa3\x0b\xa2\xa3\x62\x47\x47\x84\xef\x08\x4a\xcc\x25\x3e\xe1\x0f\x3f\x0e\x88\xe2\xb5\xe5\xd6\xb9\xba\xd5\x39\x76\x26\xd7\x87\x3d\x72\x15\x9f\xd0\x73\xf9\x1d\xe6\x54\xc1\x15\x43\xb6\x0f\x39\x55\x6f\x48\xf2\x12\x5b\xe0\x00\x5e\x93\x91\x46\x4a\x0e\xc9\x40\x86\x0a\x09\x31\x8c\x2d\x06\x85\x16\x83\x09\x57\x52\x11\x8d\x29\x9f\x05\x01\x4f\x71\x31\x87\x78\x4e\x73\x8c\x57\x6b\x61\xf9\xed\xa2\x4f\x6f\x74\x6f\x3a\xae\x55\xa6\xcd\xa3\x7f\xff\xe6\x8b\x96\x35\xcf\x8f\x7c\xd4\xe7\xab\xda\x43\x3c\xb6\x83\x5d\xba\x0f\x1a\x9a\x3c\x1f\xe6\x78\xd7\xe1\x0c\x0f\x9b\x12\x07\x10\x2b\xe8\x1e\xa4\x6c\x3a\x76\x0c\x02\x0b\x38\x8e\xfd\x30\xa2\x7c\x46\xd1\x5c\x36\xa6\x64\x46\xd2\x62\x2a\xc0\x62\xe2\x5a\xe2\xd3\xc2\xe5\x0a\x95\x2d\x3a\xfd\xad\x4e\xfa\xce\x5d\x77\xde\xbc\xf3\xc1\x92\xce\xf9\xbf\x2a\xfa\x5b\xf1\x1d\x5f\x35\x2d\xee\x6f\x39\xfd\x71\xd6\x24\xb6\x7e\x44\x37\x88\x45\x8b\x35\x29\x5f\x8a\x4d\x99\x51\xa9\x98\x72\xd4\xd0\x0a\x58\x5f\x65\x44\x9d\x0d\x7d\x24\x84\x26\xe0\x5c\x42\xd7\x6c\xd6\x32\x74\x28\xbd\x9a\x87\xe7\xce\x9f\x9c\xe3\xd4\x8f\x6d\x07\x96\x7f\x6d\xf0\xe2\xfb\x55\x67\xbe\x18\xb9\xf5\xa0\x54\xb9\xf2\xe9\xa9\x1b\xdf\xec\x39\xa8\xce\x9d\xdc\x1d\x92\xe7\x10\x06\xef\x7b\x81\x18\x00\x8a\xc4\x44\xa0\x1b\x1e\x88\x48\xe8\xd1\x46\x48\x07\xba\x4c\x46\x2e\x0f\x68\x57\x65\x81\x64\x58\x30\xd0\x7c\x5d\x56\x44\x2e\xc1\x1c\xfe\x69\x9e\xc3\xbb\xab\x3d\x7e\xb1\xe3\xea\xc5\xb9\x1d\xba\x3e\x5b\xda\xfb\xa8\x54\xf5\xdc\x1c\xd4\xb1\xef\xd6\xd2\x0f\x33\xd4\x99\xfc\x47\xcb\xe4\x9d\x2e\x67\x86\x82\xe4\x4b\x9e\x12\x90\xba\xc8\xca\xa6\x62\x50\xbc\x11\xd3\x1e\xe3\x18\xae\x60\x40\xcf\xa0\x62\x31\x70\x20\x92\x49\x28\x2a\x3c\xab\x9b\x6c\x2a\xc0\x59\x2a\x85\x68\x34\xb8\xe8\xd3\xd5\x5d\x26\xff\x92\xed\x8d\x95\x53\xb7\xae\xbf\x21\xa7\xef\x27\x15\xed\x9f\xfb\xe4\xa3\xf4\xd7\x9e\x34\x7d\x2d\x79\x27\x4c\x6b\x32\x8e\xa1\x43\xf3\x46\xa8\x44\x08\xd0\x8a\x09\x64\x2b\xb0\x18\x52\x26\x4d\x0b\x20\x04\x64\x83\xf5\x01\xc5\xea\x9a\xaf\xda\x9a\x14\xd3\x8e\x90\xb8\x96\x80\x5d\xed\x9d\xf5\xee\x97\x5f\x38\xf3\x71\x8f\x2e\x55\x8e\x6e\x79\x72\xe1\xea\xde\x7e\xad\xb0\x3e\xcb\xcd\x5f\x3b\xdf\xc2\xd6\x1f\x1d\x49\x22\x25\xc5\x8d\x15\x51\x0c\x2d\xa8\x2a\x66\x14\xe9\xb4\xcf\xdb\xb2\x84\x01\x63\x19\xd0\x62\x35\x1e\x6b\x41\xa8\x13\x51\xc8\xbb\xa4\x26\xb1\x3a\x64\xb1\x1a\xbe\xea\x14\x97\xde\xee\x35\xe2\xc7\xbe\xc7\xcb\x5d\x9e\x91\x79\x7f\x91\x41\x85\xeb\x35\xaa\xf7\xb8\xeb\x91\xbb\xf0\xb6\x5a\xb0\x5d\xde\x69\x29\x15\x9b\x25\x11\x60\x44\x6b\x02\x0f\x80\x44\x28\x82\x42\x2a\x04\x36\x4c\xd6\xd5\x55\x19\x87\x86\x66\x61\x59\x05\x8a\xca\x12\x24\x6f\xdb\x48\x44\xb2\xe4\x71\x91\x42\xa8\x89\x65\xba\x5a\x9c\x63\x1a\x7d\x3b\x6d\xc3\x47\xbd\x16\xb7\x2e\xf0\xfc\xf2\x9a\x7c\x3b\xc7\x57\x9b\xc6\xcf\x63\xd2\x2f\xf0\x53\x4a\xf4\x2f\xd2\x60\x74\x12\xe9\x6e\xb6\x42\xaa\x92\xce\x52\x1e\xa3\xfa\x20\xb2\x4c\x87\x20\x51\x24\x1a\x08\x31\x12\xa1\xf0\x98\x10\x23\x86\x67\x05\x05\xbb\x74\x28\x46\x92\x61\xe0\x04\x27\x1c\x09\xf3\xda\x5d\x1e\x3a\x68\x5a\xad\x01\xfd\xc7\xce\x14\xf6\x34\xea\x58\xc5\x7c\x34\x23\x77\xbf\x12\x4f\xab\xfa\xdd\x4b\xe9\xed\x5b\x24\x2f\x0f\x47\x22\x64\x55\xdf\x16\xb4\x98\x8e\xa8\x48\x17\x02\xd2\xd3\x99\x48\x00\xa6\x2a\x53\x81\x08\x79\xd3\x70\x21\x02\xb4\x80\x25\x16\xb2\x44\x6c\xd2\x9a\x98\xca\xf8\x56\x1d\x56\xef\xd8\x8f\x03\x76\x67\x3a\x3d\xf9\xf5\x33\xed\x57\x4f\xed\x99\x7e\x68\xe1\x70\x5f\xf3\x7e\x15\xd2\x6d\x7e\x76\xf9\x72\xf5\x7d\xfb\x5f\x0a\xd2\x93\xbf\x8d\xbf\x75\xdc\x1d\xb8\x51\x4c\x5f\xe8\xc9\xe4\x31\x7d\xa2\x37\x5e\x5f\x45\x9e\x6a\xb7\x67\x63\xd7\xc3\xdd\x6e\x56\x7c\x6f\x49\xda\x96\xe5\x26\x74\x21\xdf\xf4\x0c\x6c\x18\xaa\x41\x3b\x94\xc2\x06\x50\xd1\x2d\xd3\x08\xb0\xca\x70\x01\x19\xd9\x14\x1d\x60\xc3\x8b\x09\x5b\x06\xbc\xe4\xa8\xb6\x68\xe0\xe8\xef\x35\xdc\xff\x5a\x66\xf9\x4f\x93\xe9\x94\x46\xfd\x1b\xe4\xfb\x0f\xfe\x61\xc5\xde\x17\xb3\x4a\x99\x4e\x54\x49\x31\xea\xbc\x37\xe3\x9d\x5a\x1d\xa7\x70\x39\x87\x4d\x2e\x3a\x2e\xdb\xf8\x21\x2d\x87\x8f\x39\xb8\xbd\x42\x12\x85\x96\x04\x4f\xf6\x63\x8e\x54\xb4\x88\x70\x62\x2a\x26\x30\x00\x92\x48\x62\x19\x7a\x2a\xa7\xb2\x3e\x30\x84\x30\xe0\x81\x47\x0a\x44\xa4\x33\x9e\xe1\xba\xa9\xc0\x7c\xaf\x4a\x27\xf6\x75\x7f\x6d\x4a\xca\x6b\xd7\x3a\x7e\x7d\x77\xdb\x89\x6a\xc1\x15\xf7\xe9\xc6\x4b\xfb\x4b\x96\x1e\x69\x65\x7e\xee\x14\x4f\xdb\xd6\xee\xc4\x8b\xdb\x14\x24\x92\x8e\x8d\x58\x85\x15\xec\xd8\xf7\x79\x5f\xd6\x62\xd2\x27\x74\x53\xb2\x25\x43\x32\x64\x0d\xeb\x01\x89\x01\xe9\x2b\x4e\x6c\x08\x36\x43\x4a\x89\x1f\x8e\xb7\xd6\x0c\xcd\x0d\xf2\x65\xd9\x36\x79\xe4\xb3\xc0\x2a\xfe\x43\xf3\xc6\x75\x83\x02\xed\x6b\xb8\x83\x5a\x95\xda\xbb\x78\xf5\xd2\x9b\xfd\x92\x88\xef\x21\x24\xd9\x13\x71\xe0\x8b\x26\x15\x73\x2c\x0a\xc3\xd0\x34\x4c\x59\xa7\x02\x8f\x30\x43\x1c\x99\x04\x50\x14\x9b\x90\x2d\xc4\x48\x9a\x6f\x99\xc0\x75\x13\x9f\xf2\xc8\x0d\xc1\xec\x53\x1d\x0b\x64\xcd\x3a\x5f\x05\xf8\xc6\xc1\x42\xf0\xd1\xe0\x3d\xc2\xb5\x7b\x3b\x52\xb6\x93\xdf\x6c\xcc\x99\xb9\x5b\x12\x91\x78\xb6\xa8\x60\x4c\x73\xb2\xac\x58\x3e\x43\x43\xcb\xe7\x09\x44\xd3\x26\x83\x22\xd2\x56\x2d\x8e\x55\xa2\x50\x0c\xb1\xe6\x08\x21\x8b\x08\x87\x80\x30\x95\x3d\xff\xdc\x93\x05\x8b\x40\xcd\x23\x37\x47\x3d\x2c\xd5\xe2\x56\x41\xb5\xf7\xda\x81\xed\xaf\x28\xc7\x0f\x94\x38\x7d\xe6\x83\xce\xe9\xcc\xed\x69\x43\x51\x25\x56\x6e\x75\x2d\x5e\x31\x61\x0c\x90\x06\x2d\x45\xa3\x69\xc9\x31\x6c\xa8\x5a\xc8\xf1\x55\x8f\x95\x79\xdb\x77\x91\x64\x05\x00\x46\x56\x4c\x02\x81\xc6\x31\xff\x4a\xb4\xfe\xd3\xcc\x37\xa5\x51\x9b\x74\xfd\x8b\xbc\x1c\xad\xb5\xfb\x44\xfb\xae\x74\x1c\x94\xbf\xcd\x67\xf3\x41\xa7\xfb\x9f\xb5\x1e\xa7\xce\x3e\x39\xb1\xc7\xe6\xd6\x66\xed\xeb\xbf\x2c\xeb\xb0\x2f\x6d\xe8\x81\x84\xae\x1f\xe0\x90\x93\x43\x46\xb1\x69\x4d\x65\x62\x1e\x9a\x74\xc0\xa8\x3e\x8b\x71\x14\xa9\x28\xf2\x14\x5a\xb2\x21\xe4\x1c\xdb\xb3\x04\xd5\x77\x5d\x42\x48\xad\x67\x52\x64\x18\xbc\x0e\x1a\xfb\xcb\x4e\x9d\xab\xe0\x0d\xf9\x64\x5e\xe7\x67\x9d\xaa\xbf\x7d\xe0\x63\xaf\xed\xfa\xaa\x6f\xec\xdb\xac\x8d\x49\xdb\xea\xd9\xc4\xca\x4b\x9c\xab\x53\xbe\x40\x0b\x24\xa2\x5d\xa8\x78\x31\x12\x58\x47\xf4\x1d\x59\x62\x7d\x85\xe4\xbc\x18\xe9\x50\xa0\x09\x89\x35\x08\x23\x56\x58\x51\x8b\x52\xd9\x96\xdb\x65\xfe\xbd\x7e\xb5\xa6\x95\x03\xf9\x7e\xae\x23\x14\x5a\xd5\x27\xc7\xb5\x16\xbb\x37\xee\x7e\x32\xfd\xd3\x3b\xf4\xf0\xb9\x4b\x96\x36\x7a\x96\x3c\x3f\xb2\xb0\xa7\xaa\x5a\x18\xb2\x8c\x16\xf1\xa2\x1c\x58\x9a\x15\x00\x42\xb0\x58\x92\x30\x5d\x3f\x26\x25\x4a\xf5\x68\x5d\x32\x28\x68\x2a\x11\x13\x7a\x3c\x17\x25\xae\x26\xbb\x1e\x97\x26\xed\x7c\x0f\x84\x87\xbe\xce\x34\xf9\x91\x7b\x61\xef\x1b\x5b\xee\x8f\x84\xe3\xce\x7c\xa7\xad\x2b\xb9\xb3\xc6\xd4\xa9\x69\x9b\x2c\x27\x74\x0c\x48\x63\x1d\xaa\xaa\xca\xfc\xf5\x68\xa3\x48\xc4\x10\x36\xc9\xd9\x94\x82\x04\x1e\x6a\x96\x0a\x79\x4a\x0b\x3d\xc7\x62\x82\xc0\x35\x5d\xcb\x89\x5c\xa8\x27\x76\x8c\xad\x07\x1b\x7e\xb8\xec\xce\xea\xd3\xfd\xe8\xaa\xe3\x6f\xd6\xc9\x52\x28\xd7\xcc\xa2\xfd\x07\x7d\x33\xf1\x61\xdd\x3d\xc7\xdb\x1f\xcd\x72\x86\x4b\x5e\xad\xe3\x71\xd8\x70\x28\x0f\xd3\xb6\x44\x28\x96\x4c\xba\xaa\x47\x33\x1e\x0c\x34\x9b\x34\x49\xcd\x8f\x2d\x18\x09\x3a\x72\x20\x6f\xcb\xa2\x2a\x73\xbe\xa2\x92\xaf\x08\x46\xfd\x13\xe6\x22\xa5\x51\xa6\x77\xb3\xfd\x07\x10\xb5\x66\x9b\x15\x7d\xa6\xed\x5c\x19\xe5\xca\xd4\xe6\x7b\xff\xf3\xf1\x8d\xc1\x47\x53\xaf\xcc\x2a\xfd\xf6\x8e\x33\xd2\x90\xb1\x67\x88\x42\x73\x92\x57\x3d\x44\xc0\x67\x79\xdd\x89\xac\x58\x72\x25\x1c\x29\x86\x6a\x2a\x04\x19\x8a\x24\x0d\x63\x51\xd4\x54\x43\x56\x45\x20\x19\xa1\xe4\x38\x3e\x82\x5c\xf8\x7f\xa3\xf5\x55\x3f\x9a\xf9\x5b\xb3\xcf\xbe\xbc\xd7\xab\x4e\x9d\x2c\x13\x4e\x7c\x31\xb7\xe1\x1f\x70\x71\x76\xb3\xb6\x5d\xad\xc3\xb3\x11\xc5\xbb\x9f\xa2\x4b\xa4\x6d\xeb\x72\xe2\xa1\x98\x05\x54\xce\x8c\x55\xc5\x33\x2c\x28\xda\x9c\x12\xa9\xb6\xaa\xa9\xd0\x24\x75\x95\xd6\x59\x10\x05\x5c\xc8\x5a\x32\xe9\xd9\x31\x0a\x34\x8a\x90\x60\x2a\x0b\xc7\xff\x9c\x7c\x71\xd6\xb6\x8d\x63\xdf\x89\xf3\x8c\xbd\x9e\x37\xe7\x8b\xee\x7f\xdc\xac\x70\xad\x40\x93\x77\xa6\xdc\xda\x52\x2a\xe5\x1d\xab\x6f\x8d\x24\x32\x9c\x55\x4c\xf8\x9c\x63\xda\x90\x0c\x55\xd3\x60\x80\x0c\x82\x90\xd5\x79\x3b\x34\x45\x22\xe2\x20\xa5\x6b\x31\x08\x68\x60\x50\x86\xc3\x02\x1b\x93\xa9\x25\x98\x53\x4d\x8e\x7f\x36\x39\xcf\xd7\x61\xca\xf5\x71\xe7\x7b\x55\x5b\xdc\xa4\x69\xc5\x86\x03\x5f\x9c\x9f\x73\xae\xf5\xfa\xfa\x37\x0a\xbb\xd3\xd2\xc6\xd6\x48\xdc\x47\x96\x63\x49\xf0\x4d\xca\xa5\x03\x5b\x74\x05\x0e\x85\x24\x11\x92\xb6\xe3\x31\xb2\x23\x50\x42\xac\x99\x96\xef\x7b\x9a\x27\x6a\x5c\xec\xe8\xb1\x24\x3a\x7f\x97\x03\xf3\xb3\xfe\x77\x00\xa2\x94\x46\x79\xd3\x37\xf8\x3f\xae\xff\x6f\x0c\xc4\x86\xe1\x90\x4e\xdd\x1a\x1d\xba\x2d\xd5\xbc\x56\x7c\xdc\xc6\xba\x5b\x0b\xf6\xed\x53\xed\x44\xfd\xb6\xeb\x5a\x9c\x6d\xb2\xf7\xf5\xcb\x69\xa3\xd0\x24\x96\x6b\xd4\x1c\x33\x54\x28\xd5\x23\x1d\x1e\x8a\x66\x00\x98\x00\x1b\x58\x89\x43\x8b\x89\xfc\x38\x92\x1d\x9e\x93\x79\x16\x86\x40\x23\x80\xcf\x5a\xba\x10\x93\xaf\xb6\xec\xda\x7d\xd3\xe2\xad\x7b\xb5\xeb\xbd\xb3\xf2\x84\xb3\xb4\x56\x9f\x6a\x3f\x3e\xee\xb1\x60\xc2\x80\x1b\xf2\xc6\x3f\xa6\xfe\x3c\xf1\xde\x33\xbb\x79\xf2\x32\xbe\xe3\x90\x92\x44\x91\x64\x18\x07\x88\x0f\x58\xc6\x46\x0c\xf4\x5d\x43\x06\x94\x2d\x12\xb1\xe2\x7a\xd0\xc6\xc8\xb1\x03\x08\x2d\x1a\x03\x57\x70\xc9\x54\x44\x81\xbe\x7d\xfc\xfb\xa1\x59\x83\xb3\x77\x1a\xd4\xeb\xe7\xce\x73\x77\xa3\x3c\x55\xd2\x2f\xd9\x54\x33\x4b\x71\xf7\xf7\xf9\x2b\x77\xec\xbe\xbb\x79\x69\xf2\x4e\x58\x15\x62\x22\xe4\x65\x97\x24\xb1\x4c\x78\x84\x8a\x74\xc5\x0a\x3d\x9d\x83\xa6\x19\x79\x9c\xa4\xab\x66\x28\x5b\x2a\x8c\x4d\x13\x5b\xb2\x13\x5a\xac\xed\x24\xce\xf8\x47\xab\x0c\x3d\xfa\xda\xf8\x6f\x4b\x7e\x58\xe3\x6a\x09\x14\x57\xbf\xfd\xbd\xfe\xfd\x89\x36\x8b\xc6\x94\x3a\xfd\xed\x92\x29\xf3\x1b\x3c\x49\xdb\x80\x2a\xf1\x7e\x74\x4b\x12\x28\x46\x92\x90\xa5\xb2\x90\x10\x2d\x87\x30\xa1\x6e\x5a\xb1\x22\x53\xa1\xec\xcb\x22\x76\x2c\x5b\x61\xe9\x48\x35\x24\x99\x07\x80\x92\xc9\x54\x34\xb9\x1e\xf7\x6f\x37\x90\xe8\xbb\x73\xed\xca\xb7\x66\x8f\x82\x35\xf2\x35\x36\xef\xb6\xdd\x3b\xb6\x7d\x89\xaf\xcf\x35\x9d\xad\xe7\x9e\x92\xe1\x4e\xf2\x4e\x99\x8a\xa8\xd0\x16\x35\xda\xe6\x38\x81\x62\x11\x56\x34\x3b\xb2\x84\xc0\x05\x80\x62\x5c\x9f\xe3\x28\x4d\xd1\x35\x93\xb6\x58\x64\x1b\xae\xa6\xc5\xc8\xfd\xfb\x94\xcf\x64\xfb\xef\xa0\x39\x29\x8d\xea\x59\x99\xea\xbd\x4c\x76\x6b\x54\xc1\xcf\xb4\xec\x7e\xd9\xf3\xb3\xb2\x8c\xb2\xba\x8e\x28\xa8\xce\xfe\xe1\xf1\xa7\x9d\xfe\xe8\x43\x0d\xab\x68\xce\xbd\x00\x3f\x4b\xdb\xfe\xe2\x84\xdd\x6a\x99\x8a\x15\x8b\x8e\x84\x38\xe0\x63\x51\x73\xc5\x80\xb7\x29\x1e\x7b\xa2\xe1\x08\xbc\x10\x48\x94\x8a\x51\x40\x07\xbe\x2a\xd1\x91\x42\x80\x58\xd2\xfe\x87\x20\xf4\xaa\x1f\xf1\x4f\xeb\x4d\x1e\x36\x69\xd5\x5b\xbf\x4d\xae\xda\xf5\xab\x6b\xa3\x16\x35\xfd\xe2\xf8\xce\xa3\xcd\xaa\x76\xae\x7b\x2a\xc7\x8a\x02\xef\x49\xfd\x93\x38\x0f\xb0\x51\xa0\x85\x2e\x10\x7d\x27\xb0\x22\x49\x51\x25\xac\xe8\x81\x8e\x6c\xe4\x70\x0a\xa3\xd9\xac\x64\x29\xa2\x4b\x85\xb4\x0b\x69\x5e\x73\x04\x49\x31\x13\x9b\xdc\x24\xdd\xf3\xb6\x67\xb3\x4c\xd6\xd9\x61\x19\xeb\x94\x27\x5b\x7e\x73\xe7\x78\x80\xdf\x3f\x30\x21\xbc\x5b\x21\x53\xc9\xc7\xf9\x7f\xed\x98\xbc\x04\xe3\xd9\xb1\x67\x00\xd5\xa5\x79\x44\x46\x36\xc5\xd8\xb1\xc4\x53\xc0\x45\x2e\x63\x21\xcb\x35\xc4\x10\x0b\x80\x37\x25\xd9\xd0\x43\x44\xda\xb4\x4b\x45\x44\xe2\x04\x43\x57\x7a\xa3\xf8\xfb\x9f\x37\xa9\x4d\x2e\xcb\x5c\xab\xf7\x30\xf1\x76\x73\xad\xec\xbe\x2d\xbd\xb3\x97\x18\x7b\xfa\x6b\xbb\x1a\xd1\xf1\x4c\xf2\x2e\x29\x8a\x09\x44\x81\x96\x0d\x43\xd5\x29\xd5\xe5\x35\x51\x41\xb6\xc6\xb8\x22\x89\xb0\xec\x03\x42\x25\xe4\x80\xd3\x1d\x05\x39\x14\xc7\xf0\xd0\x85\x91\x2b\x26\x8e\xd6\x22\x1f\x7d\x50\xfb\x7a\x83\x37\x73\xf5\x85\xc7\xed\xea\x87\x71\xa7\x21\x0d\x98\xdd\x77\xf2\x30\x9f\x1e\x9c\xb9\x7e\x6a\x81\xae\x74\x12\xd9\xb4\xba\xc9\x62\x92\x23\x04\x51\xb3\x00\xad\x84\x9a\xc9\xc6\x9e\xa2\x08\x54\x8c\x42\x29\x8e\x1c\x32\x94\x44\x89\xa2\x55\x42\x75\x04\x2d\x12\x62\x97\x56\x61\x62\x93\xc3\xb7\x5b\x0e\xc8\x3a\xa5\x6c\x17\x34\xf1\x51\x8e\xf6\xb3\x97\xe7\x2f\x6c\xff\xf9\x22\xe8\xb0\xf1\xe2\xf8\x5a\xa2\xb1\xfc\x9d\xde\xc9\x13\x0a\x66\x59\x5d\x84\x10\x20\x3b\xb2\x38\xd6\xc0\x94\x8a\x02\x93\xf9\xab\x4a\x81\x0a\x76\x74\x81\xa3\x55\xde\xa1\x39\xd1\xe6\x18\x36\xd4\x7c\x23\x36\x3d\x47\x7c\xa5\x0a\xfe\x27\x34\x5f\x4a\xa3\x6c\xe9\xf2\x0e\x7b\xb9\x0a\x5e\x26\x65\x59\x51\x71\xf6\x27\xe9\x67\x7e\xb0\xb0\xe0\x17\xfb\xbe\x53\x27\x55\x7f\x73\x8b\x9d\xb9\x89\x58\xc5\x7a\x7f\xcb\xf5\x06\x65\x92\xb8\x8b\x82\x51\x91\xee\xd3\x4a\xc0\x4a\xd0\xd3\x24\x4d\x94\xb1\xa1\x06\x1a\xcd\xba\x9e\xa2\xa8\x34\x2f\xa8\x2a\x2b\x00\x55\xe6\x7d\xd1\x36\x18\xce\x60\x7d\xcd\x49\xec\xfa\x1f\xe3\x0f\xf2\x46\x68\xd3\xf9\x3e\xbf\xce\x7f\xca\xcc\x12\x3b\x77\xdd\x9a\xb7\xae\xd8\xff\xd2\x79\x69\x60\xf7\x19\x17\x16\xb8\x49\x7c\x66\x9b\x84\x49\xf8\x14\x1d\xd2\x36\x92\x79\x28\x5b\x82\x47\x10\xc8\x0f\x6c\x3b\x26\x42\xc8\x48\x36\xef\x45\x12\x8e\x30\x24\x09\x35\x32\x05\x8e\xd5\x70\x2a\x1a\xa4\x25\xb9\xc1\xe9\xfa\xec\xae\x3c\xf6\x1c\x51\x63\x4a\xf5\xc2\x47\xd4\x8a\x75\x9a\xb0\xdf\x09\x03\x1a\x97\x2b\x36\x1b\x3d\x13\xcb\xfd\x90\x3c\x3f\xf2\x9d\x80\x8a\xe8\xc8\x27\x54\x37\x62\xb8\x50\xe2\x6c\xca\xe1\x5d\x6c\xb1\x22\xb2\x03\x3b\x62\x62\x51\x82\xba\x18\x93\x3c\xc5\x22\x4b\x24\x28\x5a\x49\xc5\xf5\xab\x17\xb9\x7c\xac\x16\xb2\xde\x69\x76\x68\xc0\xfa\x0d\xb7\x47\xff\xbe\x66\x75\xb1\x1e\xd7\x7b\xf6\x3d\xe3\x15\x1b\xf0\x5e\x87\x56\x0b\xd3\xa6\x2a\x9a\x58\xef\x12\x8a\x1e\x8b\x58\xdd\x63\x58\x3e\x74\x09\x10\x13\x11\xcb\xab\x94\x6f\x49\xd8\xf3\x7d\x2f\xd4\x18\x44\x8b\x84\x1f\x85\x46\x6c\x9b\xbe\x62\x33\xe4\xdf\xdc\x98\x7f\xdd\xad\xff\x04\x4d\x4d\x69\x94\xa1\x64\x91\x61\x2f\xdf\xad\x59\x1f\xfd\x36\xe3\x58\xad\xdd\x07\xdf\x9f\x34\xf5\xe1\xc1\x25\x43\x37\x2f\x86\x1b\xb6\x72\x2b\x0b\xb7\x6b\x94\x27\x4f\x9d\x6d\x15\xb3\xa7\x0d\xa2\x95\xb8\xb9\x4a\x62\x31\xf2\x05\x8f\x0b\x0d\x09\x01\x55\xa1\xa9\x50\x10\x55\x83\x50\x35\x53\x8a\x1c\x68\x70\x2e\x86\xbc\x41\xfb\x1c\xe4\x25\x8d\x08\x5d\x8f\x94\x13\x7f\x94\x8b\xb3\xa6\x5b\xed\x2d\x37\xcb\x83\xcb\x1f\xcc\xfa\xe5\xed\x99\xb7\x3f\xf2\x53\xea\x1f\xad\xf0\x71\xa6\x19\x8f\xae\x7e\xb0\x64\x66\xa7\xb4\xad\x9a\x48\xbc\xe5\x57\xd0\x01\x1f\x83\xc0\xe6\x29\x0e\x41\xca\x51\x7c\xd7\x43\x31\xc5\xc9\x40\x09\x4c\xca\xb4\xa1\x6e\x61\xcb\x0d\x02\x09\x88\x84\x1a\x33\x84\xef\xa6\xa2\x17\xb5\xa9\xf3\xd0\x47\xa0\xfe\x83\x89\x7d\x5a\xf7\x9a\x5e\xfd\xd9\x14\x63\x75\x3d\x9b\x5c\x7e\x20\xd3\xbc\xe1\x25\xaf\xd4\x7a\x9c\x61\x70\x12\x29\x35\x4a\x80\xbc\xc8\xf1\x2d\x55\xf0\x59\xce\x0c\xf8\x98\x8e\x68\x8a\xd3\x39\x42\xd5\x69\x55\xf7\xe8\x98\xb3\x2d\x81\x8a\x3c\x51\x08\x69\xca\x89\x42\xe6\x7f\x64\x1f\x5e\x35\xf9\x5c\xa1\xe3\x6d\xab\xaf\xfa\xe9\xdd\xb1\x2d\x9c\x2a\xb9\xcf\x0c\xe7\x7e\x9f\x95\xb5\xca\x14\xfe\xc2\x2d\xef\x70\xdd\xca\x29\xcb\x1e\x5c\x49\x9e\xc9\x3c\x69\x41\xd5\x53\x01\x13\x51\x34\x8e\x58\x46\xf4\x43\x4b\x86\x2e\xeb\x79\x46\x24\xe8\x76\x8c\x68\x99\xa1\xed\xf8\xaf\x77\x38\x20\x59\x4b\xf4\xd8\x54\xa2\x55\x40\xfd\x57\xac\xde\x31\xe2\xe7\xcb\x73\x4a\x0e\x5a\x35\xee\xc4\x1b\x9f\xec\x2b\x39\x39\xdb\xc6\x3a\x43\xa7\xcc\x3a\xad\xe1\x82\x6f\xa6\x6d\x69\x53\xe2\xf5\xb6\x36\x0d\x24\xd7\xd4\x63\xd2\xd5\x18\x55\x93\x03\x14\x2a\x24\x66\x62\x85\xe1\x02\x2a\x96\xe8\xc0\xa2\xdc\xc0\x94\x2d\xc5\xd6\x34\x16\x39\x7e\x0c\x53\x69\x66\xb4\x99\xfe\x4e\xa6\x5d\x87\x6b\xae\x2f\x76\xec\x64\xf6\x9e\x2f\x16\xdf\x59\x96\xa2\xee\xae\x79\xbb\x50\x89\xef\x47\x3c\x58\xd1\x70\x5d\x4a\xda\x04\xbb\x13\xa6\x71\x21\x8c\x5c\xc7\xf2\x3d\x9d\x76\x74\x42\x53\x03\x5e\xd4\x62\x8d\x8b\x08\xd2\x52\x68\x45\xe3\x6d\x33\x44\x1e\x4b\x11\x16\xe3\xb2\x32\x42\x2e\x1b\x2a\xc2\x2b\x7a\x74\xff\x84\x66\x4f\x69\x38\x26\x53\xff\x97\xaf\xd6\x5b\xa3\xbf\xbe\xf3\xfc\x7a\xee\x9b\xc4\x9f\xf4\x8a\x59\x87\xe4\x92\x2a\x30\xcb\x47\xab\x47\x77\x2a\x9a\xf1\x70\xf6\xf2\x95\x72\xb0\xc9\x2b\x84\x1d\x22\xe6\x09\xdd\x8f\x30\x66\x2d\x0d\x8a\xbc\x0c\x83\x98\x8d\x49\x8e\x0c\x54\x20\x00\x4f\xd4\xe2\xbf\x9c\xca\x88\xa0\xa3\x3b\x2c\x8b\x69\xc7\x21\x13\xdf\x53\x75\xf6\x15\xee\x72\xe0\xf6\xce\xb9\x03\xbe\x2b\x9e\xff\xab\x31\x53\x9f\x39\xb9\x6a\xa5\xbf\xb4\xfa\xec\xc9\xdd\x23\x17\xf5\xad\xd4\x67\x79\xda\x84\xc4\x12\x83\x63\x30\x72\xf5\xd0\x97\x0c\x8b\xc4\xd0\xb0\x69\x9a\x0e\xd5\x80\xb2\x64\x93\x44\x90\xb1\x5d\x97\xe2\x15\x44\xf9\x8c\xee\x7a\x21\xad\x45\x54\x80\x38\x94\xca\xb3\x35\xe3\xda\xd6\x93\xaa\x1c\x3c\xbe\x33\x18\xd1\xf3\xfe\xc7\xa0\x5f\x36\x22\xf3\xc7\x8d\xf3\x16\xc8\xd7\x5d\xf5\x46\xfc\x52\xf4\xfc\xfe\xe4\x5d\xad\x8c\x06\x64\xc2\x57\x03\x8f\x07\x04\x2b\xb1\xb2\xa5\xc1\x38\x22\xb1\x1e\xca\x98\x8b\x49\x8d\xd3\x75\x9a\xb3\x03\x99\xc0\x0a\x0a\x10\x45\xba\xea\xbf\xed\x72\x78\xc9\xe4\x6e\x2b\xe7\x95\x3d\x35\xac\x77\xe5\x4b\xe9\x1f\x0e\x9d\x20\x5e\xc9\x7d\x6c\xd1\xc4\x65\x47\xef\x1c\x58\x35\xbb\x78\x87\x02\xf7\xdf\x6c\x9b\x2e\x89\x34\x98\xd0\x94\xd4\x90\x87\xaa\x24\x41\x05\x18\xb1\x1a\x00\x4a\xd4\x68\x5d\x0f\x39\x9f\x20\x01\xc7\xfa\x76\xac\x4a\x9c\xc8\x89\x04\x87\x3c\x42\xc2\xa4\xfa\xbf\xa7\x3c\x2a\xc7\x7f\x37\x92\x4d\x69\x94\x2b\x7d\xb6\x2d\x2f\x5f\xad\xcf\x3f\x9d\xd4\xe3\x40\xef\xb3\xe5\x7a\x76\x23\x4b\xde\x9d\x94\x79\xff\xb0\xe1\x85\x16\x71\xe3\xa7\x77\x45\xf4\xc6\x56\x8b\x4b\xfd\x94\xb6\xb5\x8d\x09\x63\x5b\x13\x49\x9a\x0b\x29\x9b\x54\x35\x8e\x87\x72\xec\x4b\x04\xc0\xba\x24\xa9\x86\x6d\xab\x18\x8b\x8e\x1b\xfa\x01\x6b\x61\x64\x99\x98\xb3\x0c\x1d\x73\xa9\xb4\x3f\xee\x56\x3c\x8e\x1e\x5d\xbd\xb6\xa6\x67\xc7\xf0\x70\x83\x69\xe3\x97\xf6\x1e\x77\xb0\x70\xb7\xb9\xf7\x52\xce\xcd\xda\x61\x97\x9b\xf3\x56\xf2\xa2\x95\x55\x7d\x5e\x42\xaa\x86\x80\x4a\x8a\x96\x89\x03\x4c\xb0\xbe\xa2\x06\x58\x30\x24\x55\x8b\x08\x91\x8b\x75\xe8\x83\x48\xf4\x31\x23\x71\x76\xa0\xb2\x38\x15\xf5\xc8\x25\xdb\x66\xaf\x2d\x37\xb2\xda\x9f\xc7\xa8\xcf\xdf\x5d\xf5\xb8\xd8\xb5\x72\x03\xc6\xd2\x64\xbe\x37\xb2\x6b\x13\x96\x8f\xbf\x54\xf6\x4a\xda\x76\x21\x26\xf4\x23\xdb\x01\x3e\x2b\x06\x84\xc4\xc6\x21\xad\x87\x84\xcb\xe9\xba\xeb\x00\x89\x67\x6c\x24\xdb\xa2\xe7\xb1\x31\x07\xc8\xff\x8f\xb5\xaf\x0c\xd7\xaa\x6a\xde\x3f\x1c\x52\x40\x49\x29\x91\x94\x46\x62\x27\x0d\xc2\x21\x24\xa4\x43\xa4\x76\xef\xbd\x76\xf7\x5e\x4b\x10\x38\x74\x48\x37\x28\x8d\xb4\xa4\x74\x77\x48\x77\x48\x0a\x08\x48\x77\xfe\xaf\xf7\xf7\xfe\xdf\x40\x9e\x73\xf9\x5e\xe7\x7a\xbe\xef\x0f\xf3\xac\x67\x66\xd6\xac\x99\x7b\xee\x1b\xc7\x35\x9a\x06\xa2\x6d\x2b\x9e\x97\x02\xbf\xc5\xa5\x75\x3f\x67\x3c\x54\xb1\x43\xe6\xa5\x5d\xea\x36\xf3\x8b\x6c\x98\x28\xd4\x3e\xfd\x29\x98\x5b\xaa\x02\x7f\xe1\x6a\x8d\x75\x59\xd3\xc6\x91\xfd\xc1\x91\x1d\xd6\xd3\x68\x16\xba\xd0\xf6\x05\x9b\xe6\xb8\x90\xf7\x44\x13\xc8\xa1\x47\x61\x8c\xee\xfa\x38\x43\x00\x26\x8c\x30\x57\x09\x05\x5f\x25\x6d\x87\x88\x8d\xab\x29\x5e\x23\xf3\x8d\xc7\xa2\x31\x7c\x73\xf7\x7d\x9f\xce\xb3\x27\xd7\x6e\x1a\x35\xdc\x7f\xfe\xda\x9a\x17\x44\xa5\xb9\x27\x2b\x5d\x29\x11\x3f\x21\x64\xd6\x72\x14\x5d\x53\x0d\x5b\x33\x10\x90\x44\x3a\xd0\x7c\xca\x54\x35\x4a\x52\x7d\xd7\xc1\x1c\x5f\x36\x8c\x40\xe7\x54\xc6\xc7\x74\x3d\x12\x19\x52\xfc\xef\x7e\xc6\xbf\xcd\xdd\xb6\xf7\x68\xee\x6c\xbb\xae\xe7\xcc\xbe\xa9\xf5\xd3\x9b\x55\xb6\xbd\x5c\xd5\x6a\xcf\xbd\xa1\x4f\xb4\xa1\x8d\xff\xe8\xdd\xe2\x66\x9b\x1e\xb7\xe3\x57\x09\x04\x36\x25\xaa\x91\x41\x8b\x9c\x63\xe8\xb8\x19\xf2\xa4\xcb\x30\x02\xee\xe9\x94\xe1\xda\x8e\xc3\x50\x50\x61\x18\x8a\x36\x55\x5f\x24\x48\xc0\x6b\x3e\x2e\xc4\xae\x04\x2e\x7c\x13\x8e\x39\xb5\x21\xcd\xa2\x6d\x79\x0b\xa5\xed\xf4\xe0\x7c\x52\x87\xfd\xc4\x09\xb3\x56\xbb\x72\xd9\x4f\xf6\x2c\x9b\x47\x0d\xc4\xf8\xa5\x70\x2f\xe2\x2d\x1e\xf7\x82\x7f\x94\x5a\x98\xed\x1b\xac\xa1\x5a\x82\xe7\x90\x40\x37\x80\xc3\x3a\x1a\x2e\x0a\xa2\xca\x03\x37\x60\x3c\xcf\xe3\x1c\x5c\xc7\xff\xa3\x38\xf9\xa0\xca\x3f\xad\xfd\xbe\xf2\x85\x93\x07\x0b\xd5\xdc\x59\xc2\xef\xb8\x24\xcb\x45\xba\xe2\xc7\xec\xb8\xb2\xe7\x86\x95\xb5\x3b\xdc\x9b\x73\x54\x93\x5f\xd4\x4c\x4e\x7a\x7b\xf7\xed\xdb\x09\x85\xdf\x01\x18\x76\x4c\x34\xe7\x83\x74\x23\xa6\xdc\xc8\x74\xec\x71\xa1\x9f\x3b\x7f\x34\x79\xc1\xf6\x59\x9b\x0e\x5d\x9d\xd2\xe8\x78\xa9\xd3\x4d\xeb\x5a\x71\x84\x18\x10\x32\x8b\xeb\x16\x50\x7d\x93\xd2\x74\xa0\x84\x9a\x4f\x31\x20\x02\xa4\x46\x07\xc0\x62\x15\x0d\xb3\x58\x4c\x40\x12\x65\xf2\x64\x08\x34\x14\x48\xff\x85\x4d\xff\xb7\xb9\x13\x6f\x5e\x5c\xd3\xce\xe9\x9e\xb0\x62\x50\xe9\x0e\x3d\x2a\xff\x72\xbe\xe8\xb7\x95\xec\xe6\x5c\x8d\xcc\x3f\xff\xd6\x71\x8f\xe9\x2c\xd8\x1a\x47\x76\x4e\x46\x14\x68\x57\xb6\x49\x8d\x10\x58\x33\xf0\xa0\xcd\xda\x0a\x6d\x88\x54\xe8\xf8\x34\x1d\x98\x46\xa0\x19\x88\x57\x34\x4e\x63\x54\x44\x46\xa1\x04\xe8\xf7\xf1\x90\xfb\xdb\x16\x68\xd4\xa0\x6f\xad\x99\x77\xaa\x37\xbd\x53\x2f\xdd\xaf\xfd\xe7\xcf\xde\xb6\xb5\x58\xcf\xdc\x8f\x33\x69\xbb\xd2\x0c\xaf\x3d\x3a\x5b\xfc\x1c\x28\x84\x10\x01\xcd\xd3\x7c\x22\xc2\x75\x93\xf6\x40\x28\x88\x14\xed\x42\x53\xc0\x75\x4b\xf3\x0c\x80\xfb\xa6\xc2\xe2\x6c\xa4\x70\x5a\x18\x70\xa4\xc6\x62\xb1\x6b\x80\xc7\x9f\xe5\x68\x79\x3d\xe3\xa0\xef\xdb\xdd\xd8\xf9\xd3\xb3\xa0\xcd\x0c\x38\xe0\x61\x9e\x3e\x5f\x8e\x3b\x3f\xf3\xc6\x84\x1f\xd3\xff\x31\xb4\x5d\xfc\x4e\x58\x81\x16\xe0\x05\x68\x86\x9c\x13\x50\x81\xc2\x84\x0c\x65\xc9\x02\xb0\x2c\xd9\x92\x0d\x56\x64\x23\x96\x67\x71\x83\xf1\x19\xcc\x72\x70\xcd\xf1\x58\x5c\x8e\xbd\x6c\x9c\xb5\xb1\xbf\xf1\x4a\xf3\x97\xfd\x8f\x05\x92\xba\x5b\xd1\xa6\xdf\x12\x32\x49\x2f\x17\x9f\x1a\x5d\x84\x2a\xc8\x7d\x3e\xd5\x49\x1d\x81\x74\x6c\xf8\x9b\xc0\x91\x24\x49\x6b\x0a\x13\x91\x3c\xad\x6b\x28\x32\x80\x2b\xc8\x8a\xc8\x90\x0a\xa7\x92\x98\xa5\x07\x8a\xa5\x6a\xbe\x05\x48\xc5\x08\x0d\x44\xfc\xd7\x48\xf8\xdf\xe6\xee\xf9\xfe\x55\x99\x39\x15\x99\x80\xca\xb5\xcf\x59\x76\xa5\xd7\xb2\x3b\xc7\x8f\x8e\xcc\xae\x98\x2d\xd3\x2d\xd8\x5f\xe5\xed\xa2\xc6\x25\xe3\x78\xc2\x26\x89\x53\x96\xaa\x8b\x96\x4d\x89\x80\x90\x21\xab\xbb\x40\x56\x6c\x25\x62\x4c\x0a\x89\xc0\xa1\x28\x5e\x21\x6c\x8d\x57\x2c\x9a\x26\x05\x21\xc0\x62\xd0\x6c\xbe\xd9\xbc\xef\xe8\xf4\xcb\xc9\xcf\xab\x9c\x4c\x9c\x52\xb1\xc7\x21\x35\x5f\xab\x96\xa5\x1f\xd5\x78\x4c\x8f\xea\x58\xef\x97\xac\xc3\x4a\xc6\x4f\x45\x92\xf5\x09\x9d\x64\x1c\xdc\xb7\x7d\x0c\x17\x19\xdb\xa3\x3c\x8f\x00\x72\x40\x5b\x50\x50\x24\x01\xb3\xfc\x90\x02\x8e\xae\x60\x98\x25\x7b\x0c\x81\x23\x82\xb7\x52\x40\xeb\xe5\x78\x56\x6d\x40\x82\x50\x7b\x7f\xdb\x95\x23\x56\xd5\x6b\x3c\xe9\x7c\xa6\x13\x69\x3a\x56\x1d\x91\x9d\x7f\xd9\xf7\x43\xb5\x5d\x62\xf3\x5b\xef\xdc\xa3\x57\xea\x2e\x78\x51\xa5\xec\x7a\xec\x87\x7c\x69\x92\xbe\x6a\x76\x77\x50\xb5\xe5\xc5\x96\xb7\xf9\xa9\xda\xc0\x0d\xdc\xe2\xbd\x1f\xb4\x68\x95\xba\x8d\xce\x98\xff\x07\xc6\x86\x96\x0d\x39\x53\x0d\x79\xe8\x2a\xd0\xa6\x05\x59\x36\x42\xc9\x67\x30\xd9\x96\x44\x60\x43\x15\x83\x00\xb7\x95\x90\x76\xa5\x10\xd3\x6d\x9f\x8f\x81\xb1\x7e\x3b\x71\xf1\xb9\x6e\x0f\xe7\x8f\x3d\xb5\xa8\xc9\x9a\xc5\xc4\xa5\xad\xdf\xd0\xea\xda\xcc\x25\xba\x5f\xa9\xb3\x6f\x65\x9e\x5d\xa7\x8c\x49\x71\x1c\x63\xf8\x90\x34\x14\x33\xc2\x55\xdb\x22\x04\x12\xd2\xaa\xaa\x3b\xbe\x01\xe9\x00\xa7\x80\xa7\x30\x16\xc7\x30\x0e\xd0\xa8\xc8\x82\xa4\x48\x1b\x96\xc3\xa6\xc0\xa0\x54\x6a\xe8\xc3\x0f\xbe\xcf\x30\x7d\x48\xee\x65\xc1\x6d\xa1\xfd\xa3\xaf\x36\x14\xfb\xf4\xdc\xc9\x9f\xe7\x54\x78\xf0\xfd\xcc\x57\x3d\x33\x65\xad\x1c\x47\x1a\x68\x01\x09\x3c\x16\x02\x81\x8e\x80\x2f\x89\x84\x80\x93\x01\xe0\x48\x21\x02\x1c\xd2\x75\x31\x72\x0d\xd1\x85\x1c\x67\xb8\xb2\x42\xaa\x8c\x1c\xe2\x5c\x10\x7b\xab\xb3\xd0\xe6\x07\xfa\xa3\x17\x79\xca\x31\xdd\x6f\xa5\x25\xd5\x56\xa5\x1a\x9f\xf8\x6d\x69\xbf\x5d\xd3\xa7\x56\x15\xe7\xbc\xba\x32\x6b\x71\x9e\x38\xee\x1d\x0a\xa2\xc8\x08\x0c\x1f\x09\x14\x19\xb8\x7c\x84\x0b\x51\xa8\x6b\xbc\xeb\x21\xd2\x81\x01\x8d\x18\xe0\x91\xaa\xcf\x05\x02\x4d\x41\x09\x37\x38\x05\x8b\x31\x89\x5e\x5b\xf4\x32\x5f\xb6\x6d\x8d\x96\xaf\x0d\xd6\x2b\xda\xa7\x52\xef\xce\x2f\x06\xac\xb6\x97\x55\x37\xda\x55\x2c\x7b\x62\xe1\x27\x33\xc3\x38\xb2\x97\x44\x9e\x4d\x51\x4a\xa8\xb3\x24\x4e\x1b\x8e\x1d\xaa\x94\x17\x29\x96\x60\xf0\x52\xe0\x71\x8e\xcd\x0a\x3a\x2d\xd3\xa4\x65\x79\x81\xc2\x32\x6e\x20\xc7\x52\x92\x7c\x12\x9c\xca\x96\x6b\x86\xf6\xf2\xe6\xd3\xa4\x6f\xdc\x9b\x3d\x0b\x56\x7b\xb5\x63\x77\x27\x57\x2a\x99\x6f\x47\x87\xaa\x6e\x9b\xb6\x75\xe3\xe7\xc3\x6a\xe8\x28\x84\x61\x18\xb2\x06\xc8\x90\x83\x12\xc5\xaa\x72\x48\x99\x0a\xc5\x52\x3c\x42\x36\xc9\xb1\xaa\x8e\x42\x42\x87\x94\x4a\x99\x4e\xe0\x46\x18\x99\x42\x4e\xe9\x59\xe1\x56\xb8\xb6\xfa\xd8\x15\xfd\x88\x99\x4b\xe9\x7e\xb3\x92\x1a\x74\x68\xf1\x49\xcf\x5c\x9f\xef\xd8\x52\x73\x5e\x97\xda\x8f\xae\x4f\x7c\xc7\x7d\x4e\x66\x5e\x76\xeb\xd7\xc2\xdf\xd9\x8b\xe7\xaa\xbb\xcf\xe7\x3c\x7a\x6c\xde\x17\xaf\x33\xa4\x6f\x6d\xea\xd7\xd7\xcd\x9e\x43\x99\x53\x7a\xc4\x31\x48\x43\x06\x42\x4e\x85\x82\x41\xf3\x9c\xc1\x8b\x80\x93\x64\xd6\x42\x01\x6f\x48\x1a\x34\x70\x3b\xc2\x31\xdb\xe4\x23\xcd\xd2\x44\xd2\xf5\x5c\x4f\xe2\xd4\xf7\xdd\xe7\xf4\x94\x0a\x7b\x92\xaa\x65\xcc\x84\x3e\xc8\xd8\xf8\x29\xdf\xf0\x35\x5e\x6f\x67\x9a\xbb\x5d\xa7\xed\xa5\x4f\x19\x3d\xba\x4e\xa0\x16\xc6\x91\x10\xc5\x67\x68\x0e\x97\x4d\x24\x7b\x11\x81\x51\xb8\x0b\x3d\x11\xf9\x3a\x74\x09\x0b\xc3\xec\xd0\xa2\x49\xe0\xe2\x82\xe5\xa3\x88\x8c\x00\xc7\x40\xc8\x1a\xef\x9b\x7b\x65\xcb\xa4\x63\xe3\xd7\xd6\x6f\x58\xe0\xe1\xcd\x52\x15\x7e\xaa\x1f\x9c\x2d\xd6\xab\x73\xb6\x86\x56\xd1\xd5\x1f\xcc\x6d\xa4\x1d\xbe\x93\xba\xa7\x44\xcc\xe0\xd4\x43\x99\xf2\xa1\xc2\x13\xa1\xc0\x3b\x9e\x45\xab\xbc\x8f\x9b\x38\xc2\x38\x96\x89\x24\x56\x80\x1a\x52\x7c\x55\x27\x65\xca\xb3\x64\x1f\x32\x22\x87\x52\x48\x81\xd7\xbc\x25\xf5\xee\x09\x47\x5f\x37\x9f\x82\xe7\x7c\x7e\x23\xb1\x2f\xdb\x2a\xaf\x97\x7b\xde\xc4\x41\xd4\xeb\x6d\xd3\xd6\x76\x4d\x9e\x12\xbf\x00\x8d\x44\x53\x55\x58\x86\x91\x78\x9d\x32\xec\xd0\x21\x43\x51\xe3\xa1\xc8\x13\x3a\x2d\x9b\x12\x22\x90\xcd\xe9\xa2\x09\x75\x1e\x03\x12\xed\xd8\x10\xe7\xdd\xd8\x95\xe0\x4f\xa3\xc9\x8b\xa5\x1b\x1f\xad\x96\x6f\xce\x8d\x0b\x69\x5f\xed\xd8\xf0\x59\x9e\x8c\xf3\xe9\x8f\x72\xcd\x29\xb0\x76\xef\x3a\x0e\xec\x2d\x18\xbf\x07\x1b\xd0\x03\x85\xf7\x74\x3c\xb4\x08\xe8\xfb\xbc\x45\xea\xa4\x2f\x48\x8c\xa6\x8a\x3c\xa6\x04\x0c\x46\xb9\x3e\xa2\x14\xdb\x09\x45\x5c\x0c\x08\x4d\x73\x58\x94\x10\x5b\x8f\x79\xd2\x88\xa1\x65\xd0\xec\xbd\xde\xe0\x1c\x7d\x73\xee\xbc\x6b\xb6\x7e\x32\x34\x98\xda\xa5\x56\x4e\x2a\xe9\x26\x5d\x47\x5d\xb0\xbe\xc0\xbb\x5f\x5f\xbb\x7d\xa4\x0a\xbc\x5e\x71\x40\xe9\xba\xd7\xf6\x65\x2f\xbd\xd7\xaa\xa3\xf9\x8f\x73\x96\x2d\x7f\xea\xfb\x5b\xe7\x4a\x14\xdc\xd1\xb2\xde\x3b\xc7\x11\xa4\x91\x7e\x2b\xda\x3e\xf1\xf4\xbc\x9e\x56\xfb\x71\xd2\xcb\xce\xbf\x76\xbd\xf1\x5d\x9d\xc2\xa0\x79\xce\x8f\xb5\x21\x5d\x47\x7e\x1d\x3f\x98\x30\xcb\xe8\x3c\x8b\x08\x21\xa4\x29\x93\x56\x49\x60\x6a\x9e\x27\x13\x98\x17\x32\x18\x2b\x9a\x8a\x44\x87\xa6\x02\x34\x45\x14\x43\x8d\xb1\x65\x45\x0e\x05\x98\x92\x3c\xf5\x1f\xf5\x1b\x25\x34\x2d\x50\xe6\xc7\x85\x27\xcf\x3d\xd8\xb3\xed\x61\xc2\x2f\x44\xf6\x11\x69\x7f\x3d\x50\xb7\xa7\xb4\xf1\x0e\x2c\x9d\x67\xfe\x3b\x75\x50\xef\x63\x13\xf6\x9d\x18\xc0\xfe\x3c\xca\xa9\x92\x7b\xdc\xe7\x85\xe8\xfb\x99\xd5\x26\x4d\xcb\x27\xfc\xe2\x5c\x72\xc7\x26\xad\x8c\xe2\xc8\xe2\xc6\x41\x99\xd2\x2c\x99\x0d\x04\x47\xf0\x22\x06\x63\x58\x55\x89\x58\x5a\x0d\x0c\xe4\xf2\xa4\x2a\x11\x0e\xcd\xf3\x1c\xe6\x2b\x8e\x43\x8b\x2e\x46\xb9\xb8\xf9\xfe\x1d\x72\xf3\xf4\x1a\x73\x72\xb5\x80\xec\x7b\x30\xb9\xc4\x97\xe7\xf6\xba\xfc\x47\x15\x2a\x67\x9c\x3f\xa6\xd1\x58\xff\xf7\x5b\xd9\xfa\xdc\x8d\x1f\x91\x01\x63\x21\xd5\x94\x4d\x60\x98\x0e\x52\x14\x26\xc4\x68\x09\xa9\x98\x07\x4d\xcb\xc4\x4d\x5a\x62\x9d\x48\xa1\x21\x63\x5b\x26\x49\xd2\x80\x54\x7d\xa4\x82\x28\xf6\x9e\x0e\x9e\xf8\xba\xf1\xcc\xb6\x87\x4f\x7e\x7f\xb5\xfb\x99\x1d\xbb\xd4\xfb\x5b\x16\x5f\x9b\xb5\x79\xf9\x8c\xa3\x6b\x3f\xce\x96\xb5\x7a\xcf\xf4\xa9\x5b\x8f\x8b\x69\x32\x46\xf3\xaa\xc0\x79\x9a\x28\x11\xb4\xef\x46\x8e\x15\x9a\x98\x88\x85\x0e\x72\x1d\x88\x68\x9e\x0b\x54\x10\x62\x34\xd2\x79\x5c\x14\x78\x21\xc2\x81\xe3\xbe\x5f\x69\x0e\xaa\x7d\xdb\xd5\x1a\x65\xbd\x7a\x5f\x5d\xf6\xb8\xde\x98\xf0\x72\x91\x0c\xdf\x66\xfa\xf3\xd0\xf6\x05\xe9\x7e\x6e\xb6\xc3\x9f\xdc\x3d\x8e\x93\x56\x4f\x63\x09\xcb\x92\x1d\xcd\xb7\x70\x41\x8b\x20\x4e\x20\x9e\xa4\x23\x06\x33\x43\x07\x47\xa4\xc6\x58\xbc\x6a\x48\x81\x11\x44\xbc\x67\xd1\x1e\x16\xaa\x20\x76\xd9\xd6\xf7\x72\x8f\x51\x5f\xe4\x7c\x7a\x7f\x6e\x99\x5d\xcd\x26\x56\xb3\xe7\x5c\x27\x7a\x36\xa9\xf2\xc1\xc4\xb7\xce\xd9\x36\x85\xee\x57\x8a\x6e\xc6\xef\x66\x20\x11\xeb\xe9\x86\x87\x48\x5f\xb5\x02\xdf\x46\x80\x16\x22\x07\xa3\x25\x80\x42\x4f\x8b\x3c\xdb\x53\x01\x40\x20\xe2\x2d\xc3\xc3\x08\xde\xf4\x0d\x14\xe3\xde\x9d\xb7\xae\x7d\xc1\xcd\x8f\xe9\x7b\x32\x5f\xe0\xb7\x9c\xe5\xbe\xaa\x3a\xb8\xea\x92\x95\xe3\xe4\x42\x7b\x2e\xdc\x9c\x91\xd8\x70\xda\xe8\x97\xf1\x73\x08\x11\x17\x43\x24\x51\x14\x43\xe8\xff\x78\x53\x91\xaa\xe2\x20\x15\x51\x98\xa5\x12\xac\x4a\x2b\x5e\x28\xc0\x50\x50\x25\x13\x72\xbe\x49\x48\x8e\x02\x54\xfd\x7d\x87\x38\xd2\x62\xeb\xbe\xbb\xab\x66\x0d\x58\x9a\xfd\x5e\xd5\x4e\xdb\xcd\x01\x1f\xef\xd8\xf4\xec\xe3\x51\x33\x3f\x49\xe8\x3f\xca\x48\x57\xb3\x75\xea\xea\xf8\xd8\xdc\x0b\xa4\xe1\x87\xa1\x2c\x46\x48\x62\x04\x03\x27\x08\x99\x66\x29\x46\xc1\x45\x5c\x55\x6c\xe8\x79\x3a\x4d\x89\x94\x06\x99\x50\xe1\xb1\x00\x31\x1a\x09\xb5\xd8\x0b\xb4\xe9\xf8\x3c\x43\x8e\xbd\x1e\x89\x8a\x64\x68\xb0\x7e\xcc\xcc\x57\x07\x50\xe2\x65\xf9\xf9\xf4\x51\xcb\xaa\x8b\xa7\x7f\xfd\x28\xcf\xca\xd4\x41\x34\x63\x56\x36\x1c\xe9\xb2\xaa\x1f\x45\x4e\x00\x7d\xc7\x77\x70\xa8\xd3\x16\x60\x23\x52\x42\x5c\xa0\x90\x11\x87\x34\x41\xd3\x74\xcd\x30\x3c\x60\x12\x2a\x61\x46\x5e\x8c\x25\xf0\x2a\x25\xed\x8f\xf2\xb7\x3e\x77\x22\xc7\xba\x13\x75\x97\xdd\x2d\xa4\x66\xdb\xb4\x76\xfa\xfd\x6d\x63\x27\xf6\x3f\xd1\x96\x2b\xba\x6e\x7a\x9f\x38\xd2\x52\xea\x32\x0b\x71\x8a\xe2\x58\x99\xc0\x58\x41\x74\x58\x9c\x14\x20\xe1\x02\x42\x50\x5d\x53\x80\x91\xae\x07\x01\xe7\x41\x4a\xf1\x09\x4f\x20\x22\x15\xc6\x20\x93\xe9\xf9\xf5\x8b\x96\x3d\xfe\x58\xba\x70\x4e\x1b\xa1\x58\xf3\x53\x17\x0b\x1e\xb8\xd7\x35\x61\xdd\xad\x52\xbf\x46\xfa\xe6\xdf\x33\xd0\x58\xea\x40\xd4\x31\x1d\xe2\xff\x14\x06\x98\x90\x0f\x14\x5e\x11\x34\x8d\x34\x39\x9d\xb1\x6c\x8f\x8b\x02\x05\x51\x36\x66\x40\x9d\xb4\x70\x06\x51\x01\x22\x03\x87\x63\x68\x13\xb9\xb1\x77\xd6\xf3\x7e\x5d\xe7\xea\xf8\x9a\x3f\x2e\xb8\xf9\xd3\x8f\x95\x57\xf6\x2e\xb4\x76\x40\xc5\xd5\x17\x9a\x17\x0b\x9a\x64\x59\x77\xff\xc1\xb9\x01\x8d\xe7\xc7\xb1\xd1\xef\x7a\xaa\xa0\x29\x3c\xe7\x93\x96\xed\x87\x42\x88\x64\x1c\x53\x04\x1f\xb1\x82\x26\x21\xc9\x36\x21\x69\x21\x8b\x86\xa2\xc3\x98\x1a\xa1\x18\x00\xc5\xd8\x59\xff\xae\xd9\xc6\xfc\x42\xe3\x8a\xcf\xa4\x45\x53\x67\x37\x9e\xdd\xba\x71\xe6\xf5\x83\x3a\x7a\xb9\x5a\xb9\xfd\x7a\x7e\x74\x3f\xef\xf6\x3d\x23\xe3\x58\x75\x98\x24\x23\x79\x42\xa8\xca\x3c\xc7\x22\x1a\xb3\x19\x0a\x77\x03\xd1\xf0\x69\x16\x48\x3e\xed\x18\x02\xa6\x48\xc0\x0b\x74\xe4\x40\xdc\x8f\x18\xda\xf1\x53\xa8\x3a\x82\x07\x05\xa6\xe5\xfa\x62\xea\xf3\x52\xbb\xa7\x12\xd3\x67\x65\xbd\xc6\x3f\x3b\x0c\x8b\x3c\xa8\x3f\xa8\xda\xf3\x5f\x3f\x5d\xfa\x9b\xb2\xef\xdd\xaf\xe7\x35\x7f\xf9\xfb\x3e\xee\x19\x58\xb4\x61\xf6\xe5\x4b\xce\xa6\x8f\xf3\x0e\x3d\x76\xb9\x6f\x9a\x3e\xdf\x6c\x5b\x19\x8d\x7a\x96\xf1\x8b\x77\x37\x99\x1a\xb4\x99\x4a\x36\xf5\x3f\x44\x47\xf7\xfe\x74\xa5\xc9\x9d\x37\xd7\xf2\x5c\xed\x7a\xfd\x62\x9b\x15\x78\x0b\x63\x73\xed\xfd\xcd\x50\xea\x20\xf0\xb1\x67\xf3\x8e\x67\x33\xa4\x6d\x03\x22\x60\x2d\x35\xd2\x01\x2d\x20\xa4\x03\x4c\xc2\x11\x27\xd1\x18\xc7\xf1\x7c\x18\x19\xae\x05\x75\x8a\x00\x0e\x69\x71\x0e\x15\xdb\xe1\x12\xf8\xeb\x47\xfa\x79\xeb\xae\x4c\xbd\xfd\x63\x9e\x9b\x03\xae\x6d\xcf\x9d\x38\x07\x8e\x99\x76\xfd\xd0\xfe\x5e\xe7\x36\x5c\x93\xfb\x69\xf1\x0b\x69\x89\xc3\x7c\x86\x0c\x64\x92\x63\x68\xc2\x20\x09\x49\x87\xb8\x61\x52\x21\x1b\x06\x32\x22\x69\x01\x37\x78\x5e\x67\x0d\xc2\xa0\x44\xc3\xf0\x82\xc0\xb3\xc5\xf7\x43\x7a\x69\x0d\xb1\xc3\x39\xaf\xc8\xe9\xf3\xfd\xf2\xd4\x3c\xd1\xbb\xd5\x69\xaa\x67\x4b\x6a\x5e\xbf\x2b\xe9\xea\x71\x3d\x0a\x3c\xea\x02\xb7\xc5\xcf\xe1\x08\x15\xe8\x14\x0d\x45\x18\x69\x5e\xe0\x92\x94\x8e\x23\x45\xd1\x68\x0a\xda\x86\x08\x29\xd7\x54\x78\xd2\xe0\x81\x4e\x78\x1a\x61\x53\xae\x8f\xdb\xac\x91\x82\xc3\xcd\x66\xb7\xae\xed\x35\x7b\xd6\x9d\xdd\x7a\x9e\xb7\x79\x2e\xbe\x6d\xf8\x4b\x9d\x84\x4f\x9c\x3f\x13\xa6\xf7\xd9\x3a\x7e\xf9\x8c\x4b\xa0\xf5\x3b\x2e\x74\x7b\xf1\xbe\xac\xc5\x7d\x77\xd6\xbc\x03\x0b\xd7\x87\x58\x97\x84\x7e\x69\x7a\xb4\x64\x87\x77\x4c\x78\xb1\xcb\x72\xab\x0e\xfb\x3c\x75\x94\x0a\xb1\xd1\x55\x8a\xa8\x8b\x30\x8a\x54\xc7\xc1\x03\x13\x51\x94\x65\x03\x18\xba\x9e\xa9\x72\x0c\x43\xfa\x8e\xe8\x4b\x44\x84\x99\x98\xed\x63\xae\x29\xf2\x01\xb0\xc5\x14\xc8\x13\xc9\x3f\x2f\xd7\x38\x93\x61\xf8\xc0\x2f\xee\xe5\xdc\xf9\x5d\x62\x9f\x3f\xf8\xca\x93\x67\xb4\x3c\x32\x6c\xe0\xce\x89\xdc\xe5\x9b\x5f\x66\x7a\xf5\x8e\xc3\x55\x68\xf4\x22\x7b\xd3\xce\xfd\x1a\xf5\xcc\xb1\xe0\xde\xd5\xbc\xd4\x67\x1b\x73\x65\xab\x54\x47\x3b\xd8\x5f\x59\x9b\x20\x86\xa7\x2a\x1f\x8c\xdf\x53\x13\x77\x70\x51\x82\xa6\xe3\x38\xd0\xe0\x29\x46\x06\x04\x49\x33\x92\x2f\x46\xa6\xe9\x0b\x21\xd4\x5d\x59\x41\x22\x23\x71\x32\x6b\x99\x66\xe8\x63\xb4\xc2\xbe\x9f\xe1\xea\xa5\xbb\xfb\x07\xfa\xb9\xd6\x9a\x8d\x67\x1a\x14\xc4\xbe\x9c\xf1\x33\x7f\xb4\x45\xd9\x5d\xeb\x5b\x0e\xfe\x3d\xff\xd7\x07\x87\xba\xd5\x52\xd7\x2a\x89\x3d\x81\xf2\x3c\x93\x90\x49\x3a\x12\x05\x51\xa1\x1d\x0f\xa0\x40\xa0\x54\x9f\x72\x7d\x89\xa0\x8d\x80\x45\x5c\x24\xf3\x84\x45\x8a\x02\xa7\x60\x28\xe2\x90\x1d\xa5\xf0\x7f\x94\x59\x54\xeb\x93\x7c\xcd\xce\x64\xcd\x39\x71\x72\x91\xc1\x1b\x2a\x17\xa2\x3b\xf7\xf9\xa2\xc1\x1a\xe6\x66\xa6\x93\xbf\x67\xec\xdf\x03\x6f\xfb\xee\xd7\x7d\x1f\x0d\x19\xdb\xa5\xd8\x92\x4f\xba\x89\x9f\x54\x12\xb8\x9f\xee\x8f\x7a\x92\x70\xb7\x52\xc6\xe9\x51\xe9\xe6\xd9\xd6\xaf\x18\x93\x63\xe6\xbb\x6a\x98\xd3\x2e\x14\x7e\x9b\x43\x3c\x3d\xa0\xd4\xe2\xfb\x03\xa6\xf6\x2e\xa2\x54\xa5\x32\x7d\x7c\xc4\x29\xdb\xf5\x41\xe3\x3f\xdb\x4e\x6a\x96\xba\x09\x57\x6c\x78\xa3\x0b\x43\xc6\xb1\x74\x0a\x70\x3e\xcd\x00\x43\xb5\x31\x3c\xc4\x31\x92\x90\x0c\x42\x73\x28\x0d\x60\xaa\xa6\x47\x01\xa6\x06\x12\x22\x18\x03\xc9\x9e\xfa\xef\xe3\xf8\xd7\x36\xea\xdf\x35\xda\x93\x93\xd2\x4d\xa8\xf3\x97\xdd\xf1\x4a\x15\xea\x9f\x5e\x38\xf1\x66\xa2\xfa\x6a\xe8\x76\x71\x49\xa3\x65\xcf\x7f\xfb\xb0\x5a\xa1\x01\xed\x2a\x0d\x6f\x75\x65\xca\xe8\xcf\xbb\xc4\xaf\x7b\xc3\x46\x90\xf2\x08\x8c\xa4\x03\x0f\x41\x9b\x8a\x64\x5e\xb3\x2c\x17\x0f\x28\x08\x0c\xca\x93\x55\x88\x34\x81\xf0\x19\x86\x61\x44\xd2\xf5\x09\x4a\x8b\x78\x2d\x76\xf7\xa6\x49\xeb\x41\xb9\x6a\x0e\xb9\x77\xe2\xcb\x3d\x9b\xe8\x34\xb5\x92\x4f\xff\x09\x56\x5c\x3f\x3e\xf3\x54\x8d\xc5\xf2\xb0\x6b\xe5\x9f\x37\xbb\x18\xbf\xa4\xe8\x88\xc0\x53\x4c\x29\x54\x22\x02\xc9\x04\xf2\x1d\xcc\x26\xec\xc8\x73\x2d\x8f\x46\x1c\x65\x11\xbc\x63\x04\x41\xa8\x00\xe8\x04\x2c\xa0\x3d\x51\x76\xa4\xd8\xb3\xeb\x03\x89\xcd\x5a\x2e\xa8\xd3\x22\x57\x15\xbe\xf3\xd5\x93\x6d\xe4\x96\x5d\xf7\xdc\xc9\xb4\x20\xdb\x6f\x25\xb3\x1e\xda\xdf\x6c\x59\xae\x3f\xd7\xc7\x71\x11\x5b\x0a\x54\x03\x07\xa1\xee\xf2\xaa\x29\xe8\x1a\xad\xba\xc0\xc1\x69\x8f\xa4\x65\x4b\xf4\x78\xc7\xe4\x28\xca\xa6\x35\x60\x4b\xbe\x83\x3b\x4e\x68\x80\x14\x1a\x4e\x65\xce\x7f\xbc\x60\x6b\xb6\xb6\x69\xcb\x1f\x1f\x7e\x6d\xf2\x9b\xc9\x93\xa4\x33\x4c\xc6\x97\x45\x26\x96\xd9\x3c\x6d\xe0\xb9\x34\xfd\x6e\xae\x8e\x23\x57\x25\xc9\x89\x14\x1f\x84\x8e\xa6\xd2\x2a\x6e\x68\x86\x42\x4a\x64\xc8\x78\x02\x47\xcb\x64\x10\x62\xa6\x2a\xea\x9a\x43\x09\x78\x44\x90\xa4\xc6\xeb\x06\x9b\x82\x42\xf0\xde\xa1\x85\xeb\x66\x3c\xb9\x6a\xd2\x98\x39\x65\x3a\x14\xaf\xd5\xaa\x43\xc6\xb9\xe5\xea\xa6\xdd\xb4\xb4\xdc\x14\x9d\x39\x73\xf4\xde\x91\xd4\x31\x49\xc7\xe6\x36\xe1\x39\x95\x0c\x68\x41\x40\x5e\xe8\x20\xda\x24\x4c\x2b\x00\x32\xee\x82\x50\x32\x35\x0d\xe3\x19\xc6\x16\x1c\x8d\xb0\x35\x55\x05\xa1\x8e\x01\xd9\xe6\xdf\xc3\xe1\xff\x5d\x0b\x3b\x39\xa9\x68\xf2\x5f\x65\x51\xa6\xe6\x2a\x2d\x47\x3d\xf8\x99\x67\xbb\x9d\x9a\x34\x16\xaf\x36\x3d\xa9\x49\xed\x43\x53\xfd\x27\xc5\x76\xcb\xc3\x8e\xc2\x33\xad\x53\xc7\xf4\x10\xb3\x7c\x71\x80\x62\x33\xac\xa0\xcb\xb8\x6f\xd8\xb2\x48\xcb\x06\x0b\x05\x64\x71\xd0\x0d\x19\x9c\x0d\x79\x5b\x02\x04\xe9\x86\x50\xd2\x48\x0d\x70\xae\x13\xa5\xa4\x8e\x36\x2a\x6d\x8e\x6f\x4e\xdc\x5f\x34\x6d\x72\xbe\xeb\x0b\x5f\x44\x27\xbf\x1b\x54\xbf\xd3\xc1\x6f\xca\x3f\x1c\xd1\x6b\x9b\xcf\x35\x9b\xdf\xb2\x56\x1c\x39\x72\x18\x4c\x26\x70\x86\x50\x75\x26\x0c\x09\x53\xf7\x70\x9b\x66\x6d\xdc\x70\x18\x46\xe4\x34\x13\x0b\x0d\xca\x72\x6d\x60\x84\x2c\x11\x79\x2a\x63\x48\x29\x81\x91\x0b\xd5\xce\x5e\x76\x76\xee\x4a\x6d\x4a\xdf\xde\xf2\xbd\x3f\xa4\xd8\xc0\x79\x95\x9b\xe4\x9d\xc2\x36\xba\xfe\xc7\x77\x78\x83\xe4\x85\x5d\x53\xa7\x08\x14\xd3\x64\x4d\x20\xa1\xcc\xe1\x3c\x24\x0d\x86\xc4\x28\x1a\xe3\x78\x5f\x04\x8e\x63\xb2\x9c\x14\x2a\x86\xc3\xa9\x92\xa4\xf9\x48\x54\x78\x9b\x92\x7c\xa4\x99\x4c\x0a\xd1\xfa\x74\x76\xc9\x97\xb5\xb4\xb6\xcd\xbd\x1e\x0f\x56\xad\x9b\x96\xf1\xd1\xca\x2a\x5c\x95\x5e\x19\x4e\x7f\xbf\xf0\x59\xf5\x87\xe4\xc3\xf4\x71\x6c\xc2\x8b\x34\x1f\xd8\xc0\x20\x30\x5c\x66\x4d\xdf\x26\x83\x10\x19\x0e\xf0\x71\xcc\xe7\x25\x5a\x11\x71\xc2\x23\x3c\x15\xd3\x1d\xc6\x26\x3d\xdd\xe7\xd9\x00\xfe\xa7\xd5\x72\x36\xd3\xff\xd6\x18\x4e\x4e\xaa\x93\x90\x30\xee\xdd\x8b\xea\xf1\x2e\xeb\xa7\x7c\x4b\x26\xae\x7a\x53\xa0\xef\x82\xb4\x37\x3f\xac\x3a\x72\xfc\xbe\x0b\x7d\x66\xdc\xb9\x38\x6f\x68\xc5\xfd\x17\xaf\xe4\xcb\x1b\xbf\x5f\x68\x48\x21\xa7\x19\x16\x47\x49\x92\xa7\x5a\x18\xae\x33\xb8\xa4\x12\x40\xc7\x18\x46\x86\xbc\x2b\x10\x82\xac\x0a\x94\x01\x78\xc7\xe0\x05\x3b\x42\x06\x48\xe1\xa2\x5a\x60\x26\xe7\xfb\x85\x46\x39\x8a\x7c\x70\x70\xc2\xcd\xa2\x7f\x7e\x35\xec\xf4\xc1\x3c\xfb\x73\xb5\xd8\xd3\x3a\x69\x63\xf7\x1e\x8f\xf6\x4f\x8f\x5f\x0a\x15\x24\x0f\x97\x70\x47\x54\x74\x4f\x37\x79\x01\x23\x21\x34\x02\xca\xe4\x19\xc1\xa4\x04\x4a\xb5\x04\x15\x49\xc0\x33\x31\xd5\x72\x7d\x03\xf0\xbc\xeb\xa6\x00\x16\x5c\x93\xf0\x6d\xad\x03\x09\xe2\x86\xb3\x5d\x9a\x4c\x27\x67\x1d\x7d\xc0\x7c\xf9\xdd\x92\xf3\xaf\x9f\xae\xf8\x63\xc7\xb8\xaf\x17\x1c\x9f\x17\x47\x0e\x68\xda\x56\x44\xcb\x10\x4c\x52\xa5\x39\x0d\x22\x41\x86\x26\x23\x73\x02\xe4\xb0\xc0\x0d\x79\x0e\xb0\xba\x65\xeb\x84\x4f\xe2\x36\xab\x90\x72\x28\x61\xbc\x91\xc2\x5a\xde\xf1\xec\xfd\x12\xd5\x7c\xd4\x52\x5c\x3e\x30\xac\xe6\x70\xb0\x70\x65\xa3\x35\xc9\x87\xbb\xed\x3b\xff\xc7\xde\x3a\xfc\xb7\xf5\x77\xc6\xaf\x1c\xb0\x2d\x4f\x00\xa1\x6a\xe2\x1a\xed\xe2\x00\x62\x02\xf2\xac\xc0\x21\x69\xdb\xc5\x04\xc6\xb4\x3c\x9b\xb0\x59\xcb\xb0\x2c\xc3\x8e\x34\x53\x96\x08\x85\xc1\x63\xb7\x9e\xc9\x7a\xc3\xc7\x8f\xb8\x77\xf7\xf3\x66\xdf\x1d\xb8\xf2\xb3\xfd\x85\xd7\x9f\x3c\xf6\x6d\xa6\x21\x79\x57\xe9\x43\x2b\x81\xdf\x67\xdf\x1a\x12\x3f\x93\x59\xcb\x35\x45\x0f\xaa\x44\x48\x0a\x22\xa3\x1a\xbc\x1f\xf9\x24\xf2\x1d\x89\x0f\x23\x12\x63\x7d\x31\x92\xa0\x88\xdb\x3a\x0e\xa1\x61\x31\x96\x6f\x60\x31\x48\x69\x1b\x3c\xad\xbe\xae\xee\xa4\x6c\x4b\xdc\x1e\xd7\x17\x4f\xfe\xb4\xdc\x99\xe2\xc9\x35\xda\xf4\x6f\x7e\xe2\xf6\x82\xfc\x0d\x5b\x3f\xda\xb7\x3f\x75\x7d\xb0\x98\x4e\x61\xf9\x22\x94\x0d\xe0\x06\x30\x14\x68\x28\xa9\x86\xce\x20\xc1\xf4\xa1\x85\x79\x98\x24\x32\x12\xc0\xd9\x88\x0e\x91\x22\xe2\x36\x43\xcb\xaa\xcb\xd8\xff\x21\x06\xff\x29\xe3\xff\x36\x47\x4a\xae\x97\x38\x22\xf1\xdd\x6b\xb5\x68\xba\x3f\xd7\x64\xcc\x7e\x33\xe7\x9f\x6b\x36\x7e\x95\x30\x46\xde\xd7\xb8\x7c\x8f\x2a\x4b\x07\x97\x3e\xbb\xbe\xc0\x81\xd7\x19\xce\xe5\xfa\x2c\x7e\x81\x0a\x29\x4a\x64\x59\x4f\xa0\x04\x3a\x60\x68\x03\x37\x1c\xde\xe5\x59\x55\x20\x30\xc9\xa2\x20\x61\x79\xa2\xa4\xba\x5c\x10\x69\x24\xf4\x31\x19\xb2\x81\x63\xc7\x6e\x64\x4c\x1c\x5e\xff\xcf\x3d\xb7\xa6\x6d\xbd\x7d\x73\xef\x8d\xd9\xe3\x16\x7c\xf6\x4b\xe2\x8c\xb1\xf9\x85\xf4\xc5\x86\x15\xda\xb2\x90\x9f\x9a\x3b\x8a\x9f\xc9\x6c\xa4\x58\x32\xe9\x58\x66\xc4\x11\x90\x20\x22\x1d\x85\x1c\xa1\xe9\x46\x48\x46\xaa\x10\x52\x38\x29\x30\xa2\xa1\x18\xa4\x27\x28\x21\x86\x69\xbc\xf2\x5f\x7a\xbb\xff\x61\x8e\x7e\xb4\x79\xc4\x8e\x42\x6f\xef\x6c\x5e\x77\xa4\x62\xf3\xd3\x55\xe6\x74\xf0\xef\x54\xae\xf0\x51\xa9\xcc\xe5\x37\xb6\x7b\xf2\x47\x99\x5b\xe7\xe3\x98\x0a\x31\x08\x5c\xdc\x14\x7c\x3a\x44\x9e\x41\x5b\x3e\x45\x33\xd0\xb5\x22\xd3\x16\x04\x84\x1c\x3e\xb0\x21\x83\xc9\x8a\x13\x70\x11\x8f\x19\xa1\x4f\x7a\x29\x64\xef\x7d\xb9\xf7\x64\x9d\x7c\x20\x6d\xa8\x14\xfe\x3a\xcd\xe1\x5b\xbf\x9d\xda\x95\xe9\xb4\xd8\xaa\x99\x7f\xa8\x4a\xd5\x5e\x59\xeb\x3d\x34\x32\xc7\x91\xed\x91\x94\x59\xdf\x08\x30\x4e\x77\x64\x07\xf0\x94\x18\x21\x8c\xd0\x34\x93\xb0\x7c\x9b\xa0\x64\xdf\x96\x6d\x49\x51\xed\x40\x25\x24\x09\xb3\x09\x29\x4c\x49\xc2\xfe\x5a\x91\x8a\x89\xed\x4b\x9e\xca\xd1\xab\x6d\xef\x01\x79\xe7\xdf\x2b\x59\x6b\x5d\xd3\x8d\xf3\xb3\x0f\xea\xfd\xc5\x9c\x6c\x13\x3f\xb8\xf9\x2d\x8c\x5f\xb3\x41\xe4\x75\x36\xa0\xa5\x48\xf2\x03\x19\x32\x1a\x40\x2c\x0f\x43\x1f\xc7\x4c\x99\x0b\x23\x86\x65\x01\xeb\x0b\x26\x4d\x18\x94\xa9\xf2\x11\x11\x89\x1c\xe6\xbe\x57\x00\xff\xdd\x3c\x34\x39\x69\x5a\x62\xc2\x5f\xb6\x65\x7a\xdd\x1b\x73\xe8\xea\xba\x21\x59\x4e\x54\x48\x36\x6b\x16\xa8\xc8\x6c\x9e\x5f\x91\xdd\x9f\xa3\xfe\xc7\x8b\x47\x36\x8a\xd0\xdb\x75\x55\xe2\x57\x9a\xa9\x50\x0f\x35\x4c\x87\x10\xa3\x30\x9c\xd6\x1d\x4c\x86\x41\x44\x61\x51\xa8\xab\x9e\x80\x01\x5f\xc3\xb5\xc8\x55\xa3\x48\x91\x2c\x31\x24\x3c\x59\x50\x52\xe0\x36\xa9\xdd\xa3\xf7\xd7\x4f\xa7\x0f\xde\x5e\x34\x7f\xde\x5b\x99\xeb\xfb\x8f\x46\x0c\xae\xd1\xea\xce\x6f\xfa\xaa\xd6\x57\x46\xfe\x9e\x35\x5c\x97\xba\x96\x4a\x6c\x5e\x4b\xc3\xc7\x90\xe7\x59\x90\xd0\x70\x45\xb6\x09\xcc\x10\x11\x08\x7d\x1c\x8f\x78\x0e\xf3\x09\x27\xa4\x6d\xc9\x30\x1d\xd2\x46\x34\x22\x38\x92\x73\x94\x14\x94\x68\x77\x2a\x83\x13\x4f\x27\xff\xb9\x7e\xf0\x37\x23\xd7\x39\x93\x4e\xcd\x2a\x7a\xa3\xe4\xde\xbb\x43\x1e\x96\xbf\x51\x60\x49\xdd\x3b\x23\x1b\x8f\x8a\xdf\x29\xe3\xaa\x4b\x2a\xa6\xa4\xd2\x81\x02\x44\x97\x61\x8c\x08\x69\x0e\xc0\x28\x3f\x20\x75\xca\x62\x78\xcd\xd4\x74\x1a\x86\xa1\xe3\x60\xae\x86\x51\x12\xab\x38\xb1\x4f\x39\xe1\x45\xd9\x46\x1f\x91\x75\x1a\xec\x5e\x9f\xb3\x7a\xfb\x52\x9f\x96\x2a\x32\x37\xef\x6a\xbb\x61\xbf\x55\x39\x7f\xe9\xb0\xaf\xcc\xce\x27\xa9\xdb\x74\x8f\x79\xca\x88\x54\x6d\xd5\xb6\x48\x8a\x97\x49\x32\x50\x75\x5a\x90\x05\x64\xc9\xbc\x86\x87\x8e\x00\x65\x53\x20\x19\x4f\xc3\xec\x88\xb3\x65\xa8\x58\x32\x1e\xe1\x76\xc2\x5f\xc5\xbc\xff\xae\x29\x9f\x9c\x34\xb0\x4e\x42\xba\x77\x5d\xbf\x51\xad\x52\xbb\xde\xb8\x37\xcc\xd6\x53\x82\xdc\xcd\x5a\x8f\x68\x9c\x34\x3a\x19\xa3\x7f\x8b\x2a\xe6\x1a\x94\xee\x0a\x3b\x64\x52\xb5\x38\xe6\x23\x9f\x94\x58\x8d\xb6\x02\x36\x14\x30\x9f\x15\x5c\x82\xe5\x35\x8d\x33\x4d\x95\x62\xfc\x10\x8a\x50\x14\x15\x9b\x21\x6c\xa4\x5a\x0c\x05\x24\x85\x53\xe5\xd8\x7e\x34\x60\x36\x3f\xb4\x70\x87\x0a\x1b\xcb\x36\xae\x7f\xb5\x4d\x11\xa5\xf4\x0b\xb2\xff\xda\x27\x63\x5b\x98\xab\xbb\xf4\xea\x33\x1c\xeb\x91\x3a\x5a\xed\xd8\xbb\xfc\x34\xa6\x41\x22\x82\x50\xb2\x5c\x59\x30\x2d\x2b\xd4\x8d\x90\x31\x5d\x9c\x84\x2a\x2e\x73\x3e\xb2\xcd\x80\x76\x78\x82\x93\x4c\x4b\xe3\x2d\x4c\x54\x83\x14\x56\x24\x37\x3e\x3f\xf5\x6b\x62\xf6\xc2\x83\x66\x7e\x3e\xf7\x97\x6b\x13\xb4\x6b\x2f\x9b\x14\x6a\x74\xaa\x77\xa5\x11\xdb\xbe\xdf\xbb\xbd\x4d\xb6\x06\xf1\x3b\x65\x86\xa1\x79\x3c\x44\x32\x1f\x7a\x72\x08\xd4\x80\x21\x18\x27\x14\x41\x08\x02\x25\xc2\x05\xdc\x73\x55\x3a\x62\x3d\x18\x68\x18\x8b\xe3\x91\x11\xfc\x7f\x16\xe5\xf7\x4f\xb9\xd0\x83\x6a\x2d\x85\x45\x25\x07\x7d\x5c\xb2\xe9\xc9\x6f\xae\xe6\x2a\xbe\x6e\x7e\xb6\xab\xb5\x3b\x27\xf4\xfe\xa2\xfd\x56\xf7\xd4\x93\x65\xa9\x93\xc4\x8c\x19\xad\xae\x0d\x78\x08\x38\x8f\x47\xb2\x2c\xdb\x48\x85\x12\xa2\x1c\xd9\x24\x22\x05\x53\x81\xe5\x7a\x02\xe9\x20\x01\xa9\x6e\x60\x84\xa4\xeb\x89\xbc\x0c\xa5\xf7\x98\x88\xfe\x6e\xc2\x94\x9c\x54\x22\xd3\x5f\xdb\x1e\x23\x73\x7c\x5e\x70\xc2\xf5\x1d\x43\x16\x37\xba\x73\xf6\xb3\xf3\x2f\x7e\x6e\x96\xd4\xb4\xff\x92\x17\xfd\xd7\xa5\x9f\xdc\xf5\x70\xd5\x0c\x30\x8e\xe4\xe1\xb2\xcd\xb9\xa2\x47\xe3\x22\x0e\x35\x1b\xb1\xb4\xce\x18\x24\x2f\xab\xd0\x26\x34\x89\x23\x68\xd3\xc7\x6d\x43\x0f\x09\x0a\xd7\xa1\x68\x70\xaa\x6b\xa6\x44\x99\xd7\xf2\x8b\xb4\xe3\xc7\x6e\x1f\xd8\xa9\x53\xba\x6c\x15\x9b\x4d\xae\xb8\x6c\x5d\xd5\x9d\x1d\xb6\x44\x8b\xcb\xbe\xce\xe5\x97\x2f\xdc\xf7\x42\xea\xa8\x81\x63\x96\xf8\x9a\x86\x08\x93\x03\x94\x28\x79\x21\x52\x05\x82\xf5\x7d\x35\xd4\x19\x85\x43\x3e\x69\x84\xb4\x0a\x6c\x9d\x71\x28\x1f\xb1\x96\xc2\x12\x32\x49\x9a\xae\x13\xfb\x55\x92\xf8\x63\xcb\x5b\x9d\x8e\x08\x6e\x9f\x5f\x36\x1e\xec\xfe\x1c\xff\xfd\xd8\x9d\xb9\x97\xa6\x4f\x7b\xf4\xcd\xce\x0f\x46\x87\x37\x6e\x5c\x8e\x63\x0a\xb5\x31\xd3\x12\x0c\xca\xa7\x71\xc6\xc1\x59\x51\x0c\x25\xa8\x8a\x0c\xcf\xd0\xb8\xe1\x0a\x2e\xeb\x31\x9a\x86\x0b\xba\xce\xda\x34\xeb\xab\x5c\x64\x51\x0e\x7a\xff\x55\x52\xd7\xce\x20\xcb\x3f\x7f\x53\x5b\xcb\xbd\xbb\xc6\xce\x47\xbf\x0b\x9f\x6e\x4b\x57\x64\xcb\xc4\x02\x57\xb3\xad\xfa\x74\x45\xe2\x57\x27\x53\x27\x06\x15\xd3\xed\x11\xee\x3b\x9e\x83\x87\x16\x69\x29\x3c\x6e\x3a\xd0\x53\x24\x89\xf3\x71\x02\x13\x5c\x5d\x89\x64\x0f\xc3\x9c\xd0\x21\x50\xa8\xc8\x81\x6a\x79\xb2\x06\xa3\xd8\xc9\x65\x6e\x39\x7d\xc0\xf8\x07\x2e\xff\xf1\x47\xea\xc7\x2b\x1a\x35\xaf\x37\xa6\xf4\xc2\xb3\x53\x5a\x5d\xc9\xdf\xe0\x9b\xfd\xd4\x8d\xe3\xfe\xd7\x71\x24\x78\xc0\x65\x5f\x52\xfc\x08\xf3\x15\xc1\x13\x25\x17\xe2\xc0\xd7\x5c\xd6\x71\x02\xc6\xb2\x64\xdd\x13\x30\xd2\x0e\x75\x05\xda\x36\xe4\x48\x8e\x47\x38\x66\xbc\x57\x9f\xfd\xdd\x20\x2f\x39\xa9\x4e\x8e\xc4\xbf\x44\x6a\xee\xbd\x85\xfa\x15\x3a\x5c\xb7\x90\xc5\x0c\x60\x9f\x4c\x3a\xbe\xb2\x57\xa5\xcc\x1d\x26\xed\xc9\x56\xa1\xf7\xe9\x57\x6f\x57\x30\x25\xe3\xb8\x61\xee\xda\x16\x63\xf3\x0a\x65\xba\x9c\xa2\x2b\x8a\x19\x6a\xbe\x0b\x71\x95\x26\x02\xda\xb0\x7d\xce\xc4\x54\xdf\x61\x65\x91\x83\x32\x12\x2d\x42\x8b\xb8\x7f\xb2\xb7\xbc\x9f\x3e\x17\xe5\x9a\xda\xf8\xf1\xc7\xf7\x56\xa7\x4b\x33\x9e\x59\x34\xe6\x70\x8f\xca\x5f\x16\x5d\x06\x5e\x8d\x29\x72\xfb\xc0\xa1\xf4\xde\x9c\x13\x2b\xe3\x98\xf1\x71\x01\x00\x97\x42\x30\x12\x22\x2a\xa2\x70\x9e\x31\x71\x5a\x0d\x05\x59\x04\x9c\xed\xe1\x3e\xe2\x25\x0d\x8a\xbe\x42\xd9\xac\x6d\x28\x38\xad\x3a\x6a\x6c\x93\xf7\x25\x97\x84\x53\x99\x4c\x15\xbb\xcd\xdc\x31\xba\xd5\x26\x6e\xeb\xb6\x55\xa3\x36\x4c\xc9\x39\xf9\x6d\xa7\x0b\xd3\x8f\x14\xdc\x38\x23\x7e\x4b\x2b\x8c\xac\x19\x00\xe3\x09\x53\xe1\xad\xd0\xf4\x69\xc1\x03\x32\x61\xba\xa2\x83\xb1\x32\xd2\x7c\x16\xd3\x22\x0d\x99\x50\xb2\x55\x97\xa3\x3d\x83\x60\x7d\x4e\x8b\x6d\xf2\x89\x22\xcd\xf6\x35\x4a\xb0\xa7\x24\xdd\x99\x7e\x65\x67\xb5\x1a\x95\x73\x82\x17\x61\x8f\xe7\xfd\x87\xe7\x6d\xf5\x65\xf7\x32\x47\x07\x8d\x8f\xe3\xae\xaf\xa2\x52\x22\xc5\xf8\x1e\x13\xe8\x91\x2d\x2b\x21\x4e\xf2\x96\x24\x07\x0a\x27\xab\x0e\x47\x73\xb2\x46\x52\x24\xcd\xd8\x4a\x08\xbc\x88\xa6\x49\xc7\xfe\x4f\x63\x69\x47\x96\xff\x6d\xc4\x9b\x9c\x94\xab\x4e\xba\xc6\x03\xdf\xf9\x85\x2b\xb4\x55\xed\x76\x56\x3d\xfb\xc3\x87\xe3\x27\xaf\x9e\xbd\x48\x1f\x3a\x7c\x4f\x91\xbc\x83\x4f\xd7\x6e\xba\xfd\xc7\xec\xee\xd9\x31\x55\xe2\x48\x92\xca\x3a\xbe\xc8\x09\x94\xa3\x50\x02\x8c\x4c\xce\xc6\x20\xb0\x23\xd3\xd4\x22\x4c\x30\x19\xd7\xb7\xf9\x90\x40\xbe\xed\x29\xc8\xe0\x02\x9c\x23\x48\x4b\x49\x41\xff\xfb\xe6\xdb\xdb\xd9\x0b\x25\x3e\xd9\xf9\x74\x6f\xb9\x89\x28\x47\xaf\xbb\xed\xb3\x9a\x53\x6a\x76\x9e\xd1\xf8\xad\x39\xef\x51\x96\xe7\x09\x71\xe4\x0d\x8b\x64\x07\x37\x25\xcd\xf0\x24\x03\x0f\x49\x1a\x38\x12\x00\x04\x45\x09\x88\x90\x04\x41\x95\x90\xca\xb1\xa1\x19\xea\xb4\x8f\xdc\x20\xe4\x55\x59\x55\xc2\xd8\xf7\xea\xbc\x03\xab\x9f\x4c\xc1\x4a\x18\xb3\x8b\x4c\x1e\x34\xf6\x73\x7d\xd4\x9e\x4a\x05\xcb\xb6\xa9\x79\xba\xd4\xb7\xab\x40\xc1\x05\x8b\x4f\x65\x88\xdf\xbd\x1a\x11\xe6\xff\x91\x79\x0b\x22\x87\xb1\xac\xce\xb8\x91\x62\x79\x01\xd0\x79\x06\x73\x78\x9b\x07\xb6\x08\x55\x87\x13\x99\x48\xb2\x01\x25\x40\xd7\xe4\xec\xd8\xae\x5f\xa3\x7b\xf9\x26\x5a\xd7\xf0\x1a\xd8\xd8\x1c\xdb\x5c\xa7\x77\xe3\xed\x2d\xfa\xd4\x4b\xdf\xdc\x7c\x58\xe4\x8f\x3c\xf0\xe8\xe6\x97\xa9\xcb\x89\xb1\x5f\x53\xc8\x55\x71\x24\x92\x21\xe9\xba\x4c\x20\xb1\x61\xe0\x28\x2a\x45\xf2\x3c\x07\x74\xca\x65\x45\x5f\xf0\x6c\x0e\x20\x4c\x57\x34\x4b\xe7\x05\x5f\x61\x52\x20\xe1\xca\x7e\xec\x74\xdb\x2e\x2f\x33\x0c\xe3\xa5\x16\x41\x77\x35\xed\xdc\xe5\xc7\xea\xe6\x20\xae\x7c\x76\x53\xfc\xa0\x40\xd6\x5f\x9a\x68\xb9\xe3\x17\xad\x18\x2d\xcb\x44\x28\x5a\xa1\x4b\x3b\xb4\x61\x32\xa6\xa9\x20\x0a\x4a\x32\x4f\x09\x3c\x8e\x29\x11\xa1\x09\x4e\x64\xf9\x04\xa5\x4a\xa4\xae\x70\x0a\x50\x53\x20\x4f\xda\xff\xa3\xde\x6e\xc0\xc2\x2d\x42\xa6\x5b\xf5\x4a\x1f\x2d\x72\xdd\x1c\x44\x5c\xeb\x7a\x76\xfb\xde\x49\xc5\xd2\x6e\xb8\x36\xe8\x6d\x10\x47\x9e\x1e\xd1\x60\x5d\xc7\x0e\x24\xe4\x69\x02\x81\x09\x24\xa5\x7a\x2e\x6e\xd3\xb2\x08\x04\x46\x76\x18\x95\xa2\x65\x40\x1b\xb6\x47\x21\xc6\xd7\x05\x43\x64\x78\x3d\xf6\x29\xf7\xfc\xb9\x67\x73\xa9\xe3\xa5\xa2\x3b\x7f\x3f\xa3\xcc\x6e\x31\xd5\x1f\xb2\xe0\x5b\xb2\x47\x95\x9b\x8b\x72\x6d\xac\xbc\x1b\xf8\x43\x53\x27\x81\x12\x5b\xa0\x23\x20\x7d\x97\x62\x30\x81\xe5\x1d\xcf\xe0\x6c\x81\x92\x75\xa8\x41\x05\xe3\x48\x8b\xd5\x84\x80\x84\x1c\x45\xe0\x92\x8a\xc9\x92\x1d\xf9\x22\x52\xf1\x14\x1c\xe3\xe6\x4f\xdf\xd5\xaf\x79\x72\xe5\xee\x27\x99\x1e\xcc\x2a\x0b\x10\x2d\xae\x7c\x1d\xb2\x13\x4f\xde\x7c\xb0\xaa\x44\xd3\xa3\x73\xb5\xd2\xf1\x0b\x3f\x0e\x33\x81\xea\xe1\x91\x62\x19\x2c\xa4\x54\x9f\x17\x65\x87\x90\x18\x27\xc0\x09\xe4\xf8\x94\xe1\x46\x94\x03\x30\x93\xd3\x71\x8f\x15\x49\xc9\xa1\xd5\xff\x3c\x8f\xfe\xf5\xd6\xf8\x3b\x64\x48\x72\xd2\x07\x75\xfe\x4a\xf8\x5b\x77\xe8\xb9\xd6\x5b\x76\xee\x3d\x72\xb8\x05\x2a\x5b\xfe\xe7\xc2\x5b\xd2\x0c\xfe\x70\xfe\x83\x9c\x3f\x33\xfb\xae\x35\x2a\xfa\x6b\xff\x3f\xdc\x38\x2e\x35\x13\x01\xcb\x18\xb4\xe8\x71\x26\x4e\xe0\x14\xae\x1b\xa2\x18\x50\xa2\x43\x0b\x84\x26\x10\x91\x21\xd0\x91\x8d\x54\xd5\x08\x71\x93\x50\x03\x45\x87\x0a\x15\xbb\x70\xaf\x72\xbc\x68\xd5\x07\xa5\xfa\x1e\xef\x0c\xda\x38\x65\xeb\x7d\xde\x2d\x4b\xed\xae\x93\xee\xcc\xca\xf3\xa8\xc6\xf3\xae\xdb\xaa\x9f\x28\xda\x2c\x8e\x0f\x40\xc6\xd5\x70\x53\x37\x05\x9c\x15\x69\x51\x03\x0a\x66\x62\xa6\x01\x49\x97\x56\x64\x4c\x11\x65\x31\x90\x69\x96\x60\xa1\xc1\x9a\xa4\xac\x2a\x7c\xe0\xfa\xef\x63\x8c\x26\xe4\x7d\x7a\xb9\x5e\xc3\xf6\x27\xbd\xae\xf2\x81\xdb\xc9\x15\x07\xbf\x1c\x31\x2e\xf9\xc8\x17\x57\x86\x4c\xa8\xb0\x3f\x1d\x5f\xa4\xe0\xf6\xf8\x55\xc1\xaa\x45\x05\x08\xf3\x31\xde\x50\x58\x9f\x0c\x2c\x59\xc6\x20\x29\x86\x86\x65\x87\x01\x2b\x47\x8a\x47\x42\x43\xc0\x59\x28\x41\x4c\x17\x71\x36\x34\x38\x3e\xb6\xdb\x2b\x89\xc5\x36\x96\xeb\x9a\xb7\x5b\xf5\x1f\x8a\x3e\xea\xf6\xb2\xfb\x0e\x26\x4b\x39\xef\x68\xde\x27\x73\x19\x49\xf9\x6c\x76\xa5\x8c\x6f\xe3\x08\x39\xd1\x49\x1a\xb3\x58\x51\x95\x3d\xd2\xe0\x04\x2e\x72\x68\xda\x83\x51\xc4\x07\x56\x80\x99\x2e\x00\x9c\xe4\x87\x22\x44\x88\x32\xbd\x20\x70\x98\x14\xbb\x02\x8b\x0b\xdc\xf9\x8c\x6d\xfb\xe1\x12\xac\xe7\xe8\xbd\x3f\x3a\xb9\x3b\x3d\xbf\xb7\xf0\xe7\xe5\xd9\xca\x9c\xf9\x6e\xdb\xfd\x40\xbe\xb6\x13\xc4\xf1\xcd\xac\xdb\xa6\x4a\xf9\x34\xc1\x7b\x40\xb3\xc2\x80\x0d\xcc\x80\x96\xe8\xd0\x08\x20\xe1\xfa\x38\xab\x93\x36\x02\xb4\xad\x61\x14\x01\x43\x97\x74\x2d\xdc\x7b\x8f\x38\xe9\xef\x50\x59\xc9\xf5\x8a\x66\x4a\xf3\x6e\xa0\x3e\xaa\xdc\xf5\x4d\x1d\xee\x72\xe1\x96\xe5\xb7\xee\x3f\x7e\xe9\xd6\x57\xf7\x5f\x35\xbc\x22\xad\xe8\x42\x8f\x4f\xf7\xb2\xb5\xb1\xb7\x5d\xea\xb0\x91\xb1\x79\x4d\x3c\x4d\x0e\x09\xe8\x41\x87\xb3\x1d\xc1\xd0\x79\x5a\x00\x34\xae\xb0\xb6\xa3\xcb\x06\x23\x11\x82\x21\x01\x87\xe7\x1c\x33\xb0\x44\xdf\xd6\x11\xe7\xf2\xb1\xef\xa8\xba\xa5\xb2\x5f\x38\x95\xbb\x7b\x99\x6a\x07\x7f\xac\xd0\x7f\x4d\xfb\x83\xdd\x94\x5a\x4e\xad\x99\x19\x86\xed\x58\x50\xb4\xf7\xd8\x75\x75\xe3\x08\xdf\x30\xfc\x88\x8d\x84\x50\x94\x55\x46\xb1\x10\x65\xb3\x34\x6f\x1b\x32\x10\x3c\x33\xc2\x05\x8a\x8c\x0c\x2b\x00\x1a\x90\x6c\x8a\xa2\x44\xd9\xb5\x35\x4c\x0d\x63\xbb\x51\xd6\x46\xb7\x17\x54\xfd\xe6\xb7\xcd\x6d\xf7\x34\xca\x39\x64\x53\x9d\x31\x4d\xda\x7c\x7b\xfa\xa7\x1d\x19\x6e\x6c\x76\xfb\xbc\x4a\x5f\xf4\x48\x1c\x4f\x99\xa3\x28\x5a\xc4\x34\x1d\xa7\x24\x49\xf6\x29\x28\x22\xc7\x67\x49\x55\x75\x51\xc8\x18\x0e\x4d\x0a\x50\x25\xa1\x28\x60\xbe\x6f\x3b\x3c\xcb\x23\xc4\xa6\xc0\xf5\x34\xe0\x69\xfa\x3d\x9d\x2b\x3f\x2e\x89\xdf\xb5\xe9\xc1\xcb\x1a\xd5\xee\xb1\x42\x7b\xb1\xa4\xd0\xfe\xb7\x79\x96\xaa\x03\xf2\xaf\xfa\x64\x4f\xfc\xd2\x21\x2d\x48\xba\xcf\x19\x2e\x4b\x51\x2c\x4e\x50\xb2\x86\xdb\xd0\x8b\x10\x66\x51\x06\x26\x3a\x0a\x6f\xe8\xb6\x01\x05\xc3\x62\x43\x97\x77\x79\xc3\x10\xfe\x4b\x14\x78\x11\xf9\x4f\x6b\x33\x35\xca\xff\xc3\xb4\x5b\x19\x57\x25\x8f\x6b\x54\x6b\x77\xf9\x3d\x09\xb3\x1e\x1f\x5b\x9f\x73\xd5\xfd\x42\xee\x77\xa7\xe8\x32\x5d\x96\xdc\x48\x4e\xba\x1b\x5e\x78\x3b\xa1\xe0\x3b\x3f\xb1\x8f\xbe\x36\xb1\x9f\xa1\xea\xb9\x27\x66\xe8\x41\x6f\x3d\x79\xbc\x4d\xaf\x3d\xa5\x67\x11\xad\x3f\xda\x0c\x26\x16\xc9\x32\xa2\xed\xb5\x38\xee\x7e\x88\x81\x16\xb0\x04\x2f\x20\x39\xf2\x48\x0b\xf0\x82\x01\x70\x8e\x67\x44\x42\xf7\x59\xc0\x44\x16\x30\x18\xc5\x80\x50\x0d\x14\x11\x49\x14\x1d\x62\x72\xec\x81\x65\xba\x2b\xbf\x55\xba\x99\xff\x87\x1d\x23\x41\xf6\x13\xb9\x96\xbf\x52\xe1\x2d\x63\x58\x81\x9e\xd3\x3a\xe3\x5c\xc7\x81\x4f\x72\x0c\xcf\x19\xc7\x14\xaa\x99\x34\x2b\x44\x32\xa7\x84\xa6\x11\xe0\x94\x85\x02\x01\x23\x74\x9f\xd2\x7c\xce\x0e\x04\x3f\x94\x42\xca\x10\x22\x9e\x52\x3c\x07\x91\x04\x47\x2a\xe6\xfb\xdd\xa5\x67\x1f\xe6\x2e\x7d\xa1\x4c\x52\xc7\x2c\xfb\x27\x1e\xbe\x75\x3b\xed\xf0\x53\x67\x4f\x5c\x37\xde\xbc\x3c\xb6\xea\xd9\xc1\x41\x5b\x46\x1d\x49\x1d\x69\x74\x6c\xde\x7f\x96\x70\x0d\x13\x6a\x20\x62\x21\x89\x02\x84\xe9\xae\xae\x38\x80\xb2\xac\xc0\xb3\x08\xe0\x53\x2c\x21\x88\x3e\x89\x31\xd0\x0f\x20\x1b\xba\xb2\x23\xa4\x80\xbc\x7e\xde\xbc\x70\xa3\x06\x77\xee\x64\x79\xdc\xb9\x6e\xce\xc3\x53\xe1\xae\x2d\x4f\x07\x8d\x5c\x7f\xfd\x4d\xcf\x97\xb9\xce\x5c\x98\x9a\x27\xed\xd6\x77\xbf\xd6\xc6\xbf\x1d\x7c\xb7\xf0\x98\xbc\xa5\x7a\x35\x3b\x90\xfd\xd9\x57\xe5\x0f\xdc\x98\x3b\x6f\xea\xc8\xc2\x15\xda\x77\xb2\x0e\x9c\xe2\x4b\x3c\x7b\xf7\xeb\x2f\x2a\x3d\xfe\xe1\xcc\xfd\x12\x3d\xd2\x1f\x3a\x99\x73\x59\xaf\xb7\xad\x7f\x98\xda\x95\x5a\xdd\xa5\x76\xd7\x82\xa3\x32\x97\xc7\xdd\xdf\xdb\xbf\xe3\x9e\x87\xba\x36\x9f\xf2\xec\x9c\xaa\xff\xd2\xec\x54\x91\x2c\xe9\xae\xce\xde\xb5\xf7\xfa\x2f\xc2\xee\x9e\xa7\x1f\xdd\xba\x34\x7a\xe4\x02\x32\x8e\xd4\x88\x01\x47\x33\x6a\x48\x4b\xac\x64\x31\x94\x61\x52\x8a\x13\x62\x82\x85\x43\xca\x12\x3d\x29\x04\x0e\x0d\x08\x1f\x59\x0c\xae\x41\x32\x08\x78\x82\x94\x55\x21\x05\x14\x71\x3b\xb5\xc5\xd4\x2d\x1b\x0e\xf7\x48\xb7\xf4\xd4\x25\xb9\x45\xda\xee\x77\xfb\x4c\xac\x38\xca\xdd\x59\x67\xdc\xbd\x0d\x7c\x62\x87\x0a\x4f\xdf\xfd\x3a\x6b\xba\x2e\x72\xa5\x29\x33\x1b\x24\x57\x98\xb3\xe8\x64\xfe\xb1\x6d\x67\x4e\xbd\x9c\xf6\x98\xb3\xb9\x72\xe1\x7d\x67\x5b\x62\xbf\x5f\x3c\xfe\x2e\x1f\xe7\xb0\x93\xe8\x8b\xf4\xf5\xe9\x0c\x95\x72\x8d\xc9\x3c\xf0\xc3\x12\xc9\xe0\x7a\xde\x5d\xc5\xc7\x75\xdd\x54\xe8\xe0\x89\xef\xb4\x01\xa9\xc3\x80\xc7\xf4\x25\xc0\xbb\xb2\x21\x19\x14\x8d\xb3\x90\x21\x54\x4a\x89\x34\x46\xf3\x01\x2e\x72\x76\x48\x50\x9e\xe1\xfa\x0a\x6e\x72\x34\x05\x14\x56\x24\x08\x2b\x42\x90\x8c\x5d\x52\x66\xcd\x5f\x51\x5d\x76\xfe\xe2\xf6\x45\x15\xeb\xa5\x9b\x5e\x66\xe2\x8f\xc4\xb8\xa4\xeb\x5f\xdd\x99\x8b\xd7\x1b\xb0\xeb\x48\xf3\x7c\x1b\x52\xf7\x00\x8c\x8d\xda\xc3\x5c\x5b\xb0\x74\xda\x31\x51\x04\xc4\x48\xa7\x65\x87\xf4\x81\x8b\x34\x86\x55\x54\x81\x63\xa0\xa0\xcb\xbe\x1e\x49\x06\x8e\x4c\x3c\x74\x23\x5b\x51\xde\x2f\x29\xcf\xbc\xc9\x55\x32\x6f\xd3\x37\x5d\x76\x65\x7e\x56\x66\x59\xc7\x9f\xb3\x5c\x49\xb4\x8f\x5d\x14\x8a\xae\x2d\xf1\x6d\xde\xe5\x1f\xfe\x30\x3f\x8e\xdc\x50\xd0\xc2\x22\x27\x88\x18\x5b\xd0\x58\x0f\x43\x92\x40\xd1\x86\xa1\x2a\xb4\x4f\x98\x1a\x6d\xb0\x06\xa0\x30\x5e\xa1\x0d\x4f\xb1\x69\x06\x58\x98\xa1\xd9\x5a\xec\xe5\xc8\xa4\x09\xdf\x8f\x7c\xbd\xaf\x5f\xce\x1e\xd9\xfb\xb4\x68\x5f\xbe\xc8\xc4\x86\x85\x7e\xdc\x3a\xa2\x24\x5e\x32\xd3\xae\x6d\x9f\xee\x5a\x52\xe5\x52\x1c\x63\x04\xb1\x34\x22\x0c\x28\xe2\x8c\x23\xf0\x0a\x29\x92\x81\x87\x51\xa4\x47\xfb\x04\x4e\x8b\xb6\xe9\xe1\x12\x66\x78\x9e\xc8\x06\x42\x40\x1b\x2a\xe3\xab\xcc\xfb\x27\x1c\x65\x68\x64\x7e\xb1\xfc\x4c\xa3\x8f\xab\xbf\x19\x59\x77\xcf\x03\xb7\xd1\x98\xaa\xc1\xea\x2b\x59\x9f\xb5\xee\x30\xf5\x40\x83\xe8\x4d\xfa\x38\x2e\x97\x85\x8a\xc6\x51\xa1\x6e\xc8\xae\x2c\x4b\x16\x2b\xfb\x56\xe8\x4a\xa6\x43\x98\x80\x23\x20\xcb\x4a\x24\x8d\x3c\xde\x06\xb8\x6b\x21\x91\x62\xa1\x00\x63\xac\xee\x4d\x9f\xfd\xaa\xd6\x9d\x2d\x6b\x36\x7d\x6a\xef\xde\x3e\x7a\xef\xaa\xdc\xe9\x0f\xac\x2d\x50\x3c\x2a\x03\x13\x33\x3f\xef\x29\xdc\x38\x76\x3c\x8e\x7b\x25\xaa\x8a\x44\x83\xb4\x11\xe9\x87\x34\x69\x86\x02\xb0\x09\xc1\xe4\x18\x09\xda\x36\x34\x2c\xe8\x62\x1c\x62\x22\xdc\x27\x2d\x0d\x37\x54\x3f\xa4\x3d\x27\x85\x0c\x54\xe7\xf3\x3e\x9f\xdd\x9e\xbd\xe9\xdb\x53\x53\xce\xd5\x59\x75\xee\xa3\x92\xe7\xe7\x66\xab\xb4\xe3\xcd\xc6\x0e\xda\xad\xe5\x4b\x2e\x37\x3e\x33\xeb\x1d\xf7\xc9\xd7\x7b\xde\xc5\xe6\x44\x9a\x8e\xe5\xfb\xf5\x1b\x73\xe6\xd9\xd7\xd3\x7e\x6f\xc8\x8c\x2a\x2f\x7e\x77\x7a\x52\x35\xd0\xac\xc9\xf2\x1c\x35\xe2\x08\x84\x20\x35\x91\xc7\x70\x4d\x26\x2d\x1d\x60\x01\x89\x23\x81\xc7\x38\x1d\x6a\x98\xea\x46\xba\x25\xe3\x98\x13\x41\x1a\xb1\xb6\x41\x92\xa6\x88\x5b\xa2\x13\x43\xdc\x93\xbe\xf5\x70\xf6\xbc\x63\xcb\xaa\x2d\x77\x29\xf1\xd5\xa3\xea\xc3\xfb\xff\xf6\xfb\xb9\xc4\x96\xd7\xb6\xdf\xfc\xf9\x7b\x79\x3e\x56\x34\x8e\x73\x81\xc8\x10\x11\x62\x25\x8e\x0a\xec\x40\xa6\x78\x05\x08\xac\xa7\x21\xd6\xc4\x0c\xcf\xd6\x15\x24\x5a\x50\x64\x01\x05\x31\x91\x27\x7d\x99\x36\x35\x8e\x23\xdf\xbf\xfd\xeb\x3c\x28\x9a\xb7\x86\xaa\x05\x57\x4b\xe4\x6f\xde\xa9\x6f\xd3\x3c\x6f\xa5\xb3\x7d\xd7\x80\xb7\x5f\xd6\xc8\x7f\xec\xc5\x38\x69\x72\xea\xd6\xc4\x62\xe6\x13\x8b\x62\x24\xca\x50\x38\x1b\xa8\x26\xed\x09\x56\xa0\xa8\x38\x0b\x78\xdf\x91\x39\x4c\x16\x49\xdd\x8c\x70\xdd\x24\x48\xc6\xb0\x34\x83\x89\x44\xa0\xa8\x76\x6c\x02\xc2\x34\x79\x66\x6b\x33\x77\x64\xcf\xae\x17\x6f\x90\x61\x62\x47\xae\x36\xdb\x4b\xa8\x7f\x61\x7b\x86\x66\x0b\xea\x6e\x9b\xd5\xb2\xd6\xae\x38\xde\xb9\x80\x23\x10\xe9\x08\x06\x1b\x60\x44\xa8\x03\xde\xc1\x79\x1f\x49\x2c\x66\x93\xba\xc8\x2a\x6a\x60\xc0\x30\xe2\x25\x8b\x96\x59\x2d\xe0\xa4\xd0\x81\xb1\x16\x8d\xbe\x7d\x78\x62\xcb\xec\x7d\xd9\xdb\x77\x20\xab\x57\x9e\x87\x16\x17\x5a\x59\x3d\xc7\x81\xb2\xeb\x1b\x55\x38\x7a\xf0\x6c\xa1\x4c\xed\xf9\x62\xf1\xcb\x27\x90\x0f\x22\xd1\x53\x38\x8d\xe1\x4c\x9b\x25\x68\x42\xd3\x88\xc8\x62\x11\x27\x6a\x2c\xc1\x23\x0f\x04\xb6\x1e\x6a\x16\xf2\x7d\x86\x67\x1d\x82\x82\xaa\x94\x02\xe9\xcc\xde\x2f\x47\x55\x5f\x39\xf9\xf0\xeb\xce\xc9\xa7\x32\x37\x69\x50\xab\x50\xff\x4d\xa3\xe1\x98\x5f\x0f\xec\x30\xab\x77\xb9\x98\x7e\xc6\xfd\x0f\xde\xad\x77\x47\x3d\xb8\x3e\xec\xa7\xbe\x6d\x7e\x98\x3d\x6b\xf7\xc3\xe2\x68\x61\xfb\xdd\x9f\x66\xeb\xb6\xa0\x57\xdb\x4e\xc8\x6b\x6c\xdd\x6a\x3b\x37\x8e\xcb\xc3\x92\x29\xb1\x86\x1a\x2a\x2e\xe0\x79\xd6\x0f\x4c\x8f\xf5\x35\x42\x10\x42\x99\x32\x49\x9b\xd2\x18\xd5\xf2\x7d\xc5\x0b\x54\xe4\x9a\x14\x23\x81\x00\xa3\xde\xf7\xf8\xb2\xfe\x07\xf3\x26\x4f\xc9\xf9\x72\x6e\xbb\xf2\x5b\x8b\x2f\x4e\xd3\xeb\xfb\xc7\xaa\xb7\x22\xc3\xe7\x0c\xaa\xf0\xe9\x73\xa7\xfc\xb8\xd4\x91\x00\xc5\x74\x9f\x88\xc6\x64\x93\x50\x45\x8a\x97\xc5\x90\x89\x4c\x4d\xc7\x02\x8f\x33\x14\x92\xa4\x34\x86\xb0\x78\xcc\xc5\x45\x3e\x90\x6c\x05\x10\x8a\xa5\x91\x0c\x8d\xfc\x14\x12\xe6\xde\xf1\xc3\x17\xec\x94\xd7\xe6\x2d\xfb\x54\x49\x7b\x62\x69\x54\x77\x74\xd1\x75\xbf\x7d\x92\x3f\xed\xe8\x74\x43\x1d\xbc\x63\xf9\x8a\x2d\xde\xfd\xda\x5d\x93\x7c\xe8\x74\x81\x57\x9d\xfb\xd7\x2e\xd3\x6d\x72\xb9\xb7\x45\xe1\xc2\x3a\x23\x6a\x2e\xef\xbf\x7c\xe9\xf3\x85\x97\x86\xac\xcc\x72\xf3\xdd\xaf\xfb\xe5\xfd\xf6\x78\xc1\x86\x7b\xc2\xf1\xb9\x6a\xd4\x59\xf9\xc1\xea\x89\xa7\xd4\xe2\xe5\x1f\x15\x4a\x18\xb0\xbd\xd5\xc1\xfb\xe7\x7a\x35\x0d\xde\x49\xc6\x1f\x7c\xb7\xbd\x5c\xbf\x5f\xf2\xfc\xda\x7d\x87\x3c\xf2\xc7\x5e\x15\x2e\x1e\xcb\xb9\x7e\xf1\x93\xa9\x6d\x72\x88\xaf\x86\x5d\x44\x43\xd6\xc7\x4f\xbe\x8a\x61\x39\xdb\x01\xa2\x87\x9b\x2a\x29\xab\xa6\xa9\x79\x8a\xa8\x53\xb4\x66\x5a\xbe\x42\x92\xb6\x12\xb0\x18\xc0\x31\x4d\xe2\xd5\xd0\x44\x18\x46\xea\x9a\x07\xde\x8f\xbd\xe4\x7c\x7f\xdc\xfe\xf3\x55\x83\x0e\xeb\xda\xfd\x71\x45\x3a\xb1\x84\x9d\xb1\xf7\xf1\x0d\xcf\xac\xb0\xf0\xde\xcc\xc3\xeb\xe7\xe2\xf5\x52\x97\xdd\x62\x0b\x3b\x61\x8e\xc0\x62\x94\x42\x19\x82\xe6\x39\x38\x4b\xca\x62\x04\x59\xa0\x12\x9e\x65\x10\xb8\xc0\x60\x91\x15\xe9\x12\x86\x11\x48\x36\x1d\xce\x76\x78\x4c\x7a\xff\x2e\x1f\x3a\xb7\x13\x77\xee\x71\x9e\x01\xd9\x13\x47\xff\xd2\xe9\xd9\x8d\x4a\x5f\xd4\xee\x7d\x0b\xf4\xed\xf3\xe4\x67\xc5\xe9\x7b\xb4\x38\x99\xba\x7e\x61\xec\x99\x32\xc5\x7a\x8c\xad\x92\xaa\xe0\xd8\x14\x1b\x50\x80\x70\x58\xca\x77\x22\x5d\x96\x5d\xa0\x1a\x32\x6d\xb1\x3a\x81\x18\xd1\x52\x03\x1d\x0f\x25\x1e\x41\x3d\x36\x09\x62\xe2\xe4\x21\x77\xb2\xb5\x7a\x72\x75\xc4\x8c\xcf\x47\x3e\x7e\x36\xec\xbb\x61\x7f\x7e\x5d\x76\xda\x64\x72\x5c\xdf\xd9\x09\xb5\x8c\x83\x35\xee\xc6\xaf\xe2\x0f\x4c\x05\x8a\xae\x27\x07\x38\x83\x69\x8e\xca\x47\x2e\xee\x99\x92\xc6\x3b\x16\xcf\x43\x5d\xa6\x08\x0b\x31\x12\x15\xca\x2e\xa4\x22\x4c\xd4\x94\xd0\xb1\xdf\x0f\xfe\x8f\x36\xce\x9b\x91\xf8\xa0\xc0\xb8\x68\x44\x87\x71\x1f\xa7\x5b\xc6\x60\xcc\xc1\xba\xd7\x93\xf2\x94\x1b\x58\xaf\x6b\xbf\x92\x73\x3f\x4c\x1d\x94\x22\x36\x58\x85\xc4\x19\x26\x60\x58\x83\xc3\x08\x4a\xb7\xfd\x80\x02\xc0\x93\x4d\x2a\x90\x4c\xce\x21\x35\x81\x70\x49\xcb\xb1\x10\xa3\xe2\xbe\x05\x78\x1e\x30\x6e\x0c\x22\xcf\x3d\x1b\x47\xad\xbf\xfa\x09\x33\x7a\x46\xd3\x74\x6b\xfd\xae\x1b\xc9\x97\xb7\xbe\x59\x3c\xe2\xdb\x3a\x33\xcf\xa6\x29\x3b\xe0\xf2\xca\x95\xf1\x83\x27\x32\x2e\x03\x08\x11\xc7\x65\xde\x56\x54\xd7\xb6\x38\x2a\x94\x19\x4c\xf2\x75\x85\x07\x1a\x6e\xd2\x8e\xc7\x89\x16\x45\xb3\x32\x01\x5c\x01\x57\xb4\x40\x56\x52\x5a\x52\xad\xb8\x68\xf8\x84\xa2\x9f\x9d\x1d\x7e\xed\xe0\x8c\x62\x2f\xdb\xf6\xb2\x4b\x09\xd7\x96\x64\xed\x06\xaa\xdc\x9d\x98\x65\x7e\xfb\x2f\xc3\xb5\xef\xb8\x4f\x6d\xa3\xe8\xfd\xab\x27\x36\x8c\xbf\x78\xbd\xdc\x5a\x33\xeb\xf5\x57\xbf\x36\x49\x13\xbe\x9d\x7a\xa4\xcb\xa2\xa3\xdb\x32\x55\xfd\x64\x4a\x1c\xd9\xca\x43\x80\x05\xba\x43\x72\x2e\x81\x19\x8a\x07\x2d\x44\x68\x94\xa4\x28\x10\x91\x9a\x4a\x12\x9a\xee\x72\x32\x08\x58\x31\x94\x1c\x12\xc9\x9a\x24\x87\x28\xc6\xdb\xc0\xf8\x79\x74\xe1\xf0\x72\xa6\xf3\xf3\x97\xc3\x29\x1b\x0f\xcd\xad\xd8\x64\x73\xc2\xb4\x72\x14\xe3\x7e\xd4\xb7\x49\xc6\xb3\x23\xef\xc6\x4f\x17\x9f\xb5\x78\x97\x66\x1c\xcc\xd3\x3d\x9a\x52\x99\x88\x60\x78\x43\x31\xa0\xc0\x09\x46\x88\x53\x11\x05\x78\x55\x11\x39\x53\xf7\x31\x03\xf7\xa8\xc8\xa1\x43\x8e\x7b\xdf\x7d\xb6\xf5\x7f\x19\xa5\x09\xba\x1c\xef\xbf\xf5\xcc\xe4\xea\x1b\x91\x3c\xa9\xf0\xaa\xf5\x57\xc6\xed\x34\xc6\x2f\xa8\x74\x43\xc9\x3f\x27\x75\x2f\xaf\xd8\x5c\x45\x0c\x11\x4a\x1a\x8c\x20\x1d\x1a\xbc\x88\xab\xae\xa2\xba\xbe\xef\x59\x12\x2f\x48\x24\x23\x89\xbc\xe5\x11\x82\x6a\xd3\x01\x49\x40\xd1\xc6\x41\xe0\x71\xb1\xf3\x49\x9e\x24\xbc\xc1\x90\x9a\x0d\xb3\xd6\xf9\x65\x7a\x8f\x5a\x3b\x8a\xaf\x7b\x3b\x36\x9b\x69\x54\xb8\xf3\xc5\xba\xe6\xaf\x3f\x18\xd6\xc8\xaa\x13\xc7\x62\x42\x90\x24\x37\x92\x25\x15\x57\x74\x68\x33\x82\xca\xc9\x14\x22\x2c\x5a\x17\x2d\xc9\x91\x55\xc1\x25\x75\x83\x20\xd4\x20\xc2\x31\x52\x64\xd5\xc0\xfd\xaf\xf9\xc3\xbf\xcd\x2d\xb8\x2b\x7f\x5f\xd0\x6e\xd9\xc6\x66\x99\xbb\x75\xef\x18\xe5\xbd\xb1\x6e\xe9\x9b\x56\xec\x8f\xd9\x1a\xf6\xdc\x95\x75\xd2\xb9\x9f\x6a\xc7\x71\x81\xce\xc3\x2c\x87\xf5\x81\xa6\x73\xba\x84\x7b\x24\x29\x85\x14\xa2\x24\x17\xb7\xb4\x80\xc0\x08\x0b\x0b\xf8\x40\x51\xa0\xed\x59\x14\x43\xf3\x58\x44\x91\x9e\xf4\xbe\xff\x96\x6a\x03\x9b\xdc\xf6\xfa\x8e\xcd\x56\x72\x12\xb9\xed\xc1\x6c\xbc\xf3\xed\x09\xda\xbe\xab\x13\x8e\x6a\x63\xc7\xdb\x03\xca\x9c\xb2\xe2\xb8\x4b\xe1\x92\xae\x8d\x91\x34\x13\x99\x0c\x84\x4c\x44\x72\xa2\xa8\x46\xc0\x70\x3c\x12\xd2\x3c\xe3\x47\x2e\x72\x29\x3c\xd4\x25\x42\x14\x65\x8b\x12\x0d\x2f\x25\x09\xf4\xda\xcf\x32\x0e\xdc\x35\xbf\xee\x98\xc9\xab\xf6\x7f\xba\xae\xc4\xf3\xb5\xd4\xad\x89\x53\x66\x9d\x6c\x53\xf2\x48\xe3\xbb\x0d\x27\xf4\x7f\x7e\xe2\x1d\xf7\xc9\x49\xd6\x2d\x57\x76\x4d\xbe\x2c\x5e\xc3\xca\x75\x3a\x0d\xf3\x92\xe6\x0d\xff\x36\x67\x96\x65\xfc\xfd\x47\x17\xee\xb4\x3d\xf8\x55\x91\xcb\x71\x5c\x3f\xd6\x29\x16\xea\x1c\xa9\x88\x9a\x14\x01\x93\x36\x44\x42\x43\x1e\xa1\x99\x2e\x12\x42\xd9\x90\x8c\xd0\xd3\x03\x5e\xc7\x25\x87\x17\x4d\x0c\xf3\xff\x3f\x6b\xec\xbb\xff\xc7\xd4\x9d\xd9\x36\xfd\xfa\x43\xd8\x61\xdb\x87\x9e\x71\xa6\xea\xfa\xfd\xfb\xb7\x26\x98\x2b\x88\xca\xdd\x7e\xf8\xa2\x10\x14\x48\xa1\x5f\xfc\xfe\x0f\xc9\x04\x9c\x19\x11\x98\x69\x31\xac\xae\x8a\xae\x44\x04\x9e\x2e\x22\x19\xa9\x3e\x54\x01\xe5\xa9\x21\xeb\xc8\x38\x47\x63\x9c\x49\x5b\x3a\x86\x6b\x0e\x1d\x83\x00\xf1\xe5\x7d\xf2\x49\xae\xdf\xdb\xe4\xfe\x00\xdf\xa9\xbf\x3e\xf6\xdb\xb7\x63\x5a\x0e\x58\xb3\xf0\xab\x1f\x2a\xfe\x94\xe1\xe6\xaf\x45\xaf\xa6\x4e\xc5\x31\x36\x65\xad\x23\xab\x40\x72\x18\xca\x02\x9e\x1e\x99\x92\x61\x1b\x41\x24\x02\x60\x3b\xa4\xe6\xb2\x84\xcf\xfa\x4e\xa0\x63\x91\x0b\x74\x0d\xb2\x18\x43\x6b\x28\x25\x56\x98\x5d\xa5\xba\x14\x59\x72\xab\x62\x8e\x53\x9d\xc7\x8d\xaf\x3b\xeb\xeb\xfa\xb9\x96\x0f\xf8\x74\xd4\xa2\x8e\x9b\xd8\x73\x5b\xb1\x72\x8d\x7f\xbc\xf8\x8e\xfb\xe0\xb9\x32\x8f\xa9\xbd\x57\x5f\x5a\xb7\x68\x83\x85\x7b\x56\x0e\xca\x53\x24\xcd\xd3\xbb\x07\xa6\x2c\xcd\x57\xf6\x91\xa7\x9e\x9f\x72\x29\x29\x7e\xee\x63\x03\x8d\x44\x80\xd1\x4c\x5f\x95\x44\xd2\xe5\x34\x5b\xb4\x14\x8a\xf1\x7c\x9f\xa2\x30\x21\x92\x44\x4c\xa5\x2d\x44\x9a\xbc\x48\x7a\x10\xc3\x6d\x97\x13\xdf\x77\x9f\x11\x23\x87\x6b\x7b\x83\x33\x35\xae\x76\x3a\xfb\xc7\xd9\x5f\x9a\x77\x7c\xfe\xe9\xcb\x5d\x07\x96\x1e\x59\x9d\xf8\xfa\xd3\x85\xa7\x86\x94\x98\x10\xbf\x64\x89\x0b\x98\xe6\x20\xc5\xe0\x5d\x1a\xb8\x80\x76\xc9\xc0\x23\x68\x59\xe4\x29\x81\xd0\x42\x43\xf4\x49\x3b\x02\x48\x10\x2c\xc2\xe0\x10\xa3\xb3\x02\xc7\x86\xef\x27\xcb\x99\x27\x4f\xe5\xaa\x7d\xbb\x79\xb7\x55\x1f\x4c\xca\x70\x7b\x15\x3b\xec\xc8\xcb\xa7\xa7\xaa\xd5\xff\xf5\x4f\x65\x1f\x39\xe9\xf4\x4f\xb3\x52\x07\xe6\x8b\x59\x8d\x33\xa2\x63\xd9\xae\x80\xe9\xac\x0e\x58\x37\xf0\x55\x11\xf9\x2c\x4d\xe9\x6a\x28\xe1\x91\x00\x22\x9c\x92\x58\xe4\x45\x8c\x6e\x13\x18\xe3\x58\x38\x74\xfe\xb3\xba\xfb\x2f\x50\xe8\xdf\xcd\x18\x62\x2d\xed\x14\x1a\x58\xb6\xc8\xaf\xd9\x3b\x83\x69\x85\x5f\xd2\xab\x6e\x34\x3c\x4c\x80\x52\xc6\xc1\x1f\x16\x31\xd8\xea\x25\x37\x83\x8e\x37\x52\xb7\xa1\x19\x1b\xfb\xa7\x71\xac\x15\x86\x22\xc6\x3a\x2e\xa6\x21\x10\x70\x16\x0e\x19\x1e\x17\x45\x59\x30\x81\xe5\xf2\x0c\xa1\xaa\x26\x60\x43\x8a\x20\x28\x1a\x17\x4c\x68\xa5\x30\x43\x3c\x50\x78\x54\x8b\x43\x4b\x87\x6c\xcd\x79\xb4\x55\xb7\x5d\x93\x73\xaf\x4e\x9a\xf1\x6b\x2d\xb7\xf9\x86\x67\x19\xaf\x19\x59\x7f\x69\xf4\x2a\x8e\xed\x09\x3a\xc4\x39\x1b\x92\x48\x70\x78\x93\x74\x10\xe3\x38\x21\x4d\x1a\x36\xaf\xcb\x1a\x1b\xfa\xa2\xad\x07\x86\xaa\x30\xa2\x10\x32\x02\xc5\x03\x5d\xd2\x52\x18\x2e\x9f\x1d\xbc\x20\x2a\x3e\x49\x7c\xb8\xf9\x76\x91\x9e\x5c\x85\xb4\xdb\x0e\x6f\xbc\x7b\x79\x59\x45\xa9\xcb\xb4\x07\x47\x79\x3b\x71\x6d\xea\x30\x0a\xb1\x05\xef\x1c\x51\xe6\x23\xde\x35\x48\x25\x64\x55\x3c\xa0\x23\xc0\x48\x8a\x25\x22\x0d\x93\x01\x02\x02\xa4\x69\xc1\xe0\x5c\x28\xd1\x11\x2b\xe2\x8e\xea\x2b\x64\x6c\x93\xfb\x96\xea\xf6\xf2\xf2\x0f\x57\xb8\xc4\x9a\x9d\xd6\x14\xbf\xf1\xe5\xe1\x33\x85\x5b\x8d\x3f\xd7\xbb\x5a\x83\x7a\xe4\xb8\x84\x9c\xad\x3e\x49\x1d\x9f\x56\x6c\x93\xdd\x50\x73\x5d\x46\xf0\xb5\xc0\xa2\x7d\x92\xe0\x55\x87\xe2\x18\x42\xb5\x6c\xd9\x44\x82\x6d\x59\x66\x64\x89\x1a\x2f\xb0\x34\x89\x4b\x48\xe3\x6c\xef\x3f\x18\x85\x7f\xd1\xab\xfc\xdd\xc0\x2c\x39\x29\x39\x61\x73\xaf\x77\xb7\xd6\x97\xb4\x9f\xe8\x7e\xbd\xa2\xdf\xa4\x1e\xf9\xef\x83\x4b\xdd\x98\x9b\x47\x4b\x6d\x0b\xb2\xde\x3f\xb2\xbd\xaa\x52\xb0\xf8\x9a\xd5\x07\xc6\xc6\xb1\xd6\x64\x59\xce\xd5\x44\x15\x97\xe5\x50\xe2\x75\xc2\x34\xb0\x88\x94\x1d\xcc\xa6\x58\x33\xb2\x42\x60\x0b\xa2\x2a\x68\x3c\x74\x71\x13\x12\x22\x72\x0d\x25\x05\x51\xe2\x2e\x1b\x56\x1c\x7e\xb0\xf0\xc3\xc3\x33\x6a\xcf\x5e\x5a\xee\x5e\x8e\x0f\x17\x3f\xda\xde\xa9\x71\x8f\xfa\x43\x33\x75\x6c\x9c\xe7\x93\xc4\x7e\xa9\x43\xa5\xc5\x34\x19\x5a\xaa\x22\x12\x04\xc5\x02\x60\x61\x16\x26\x72\xc0\x16\x80\x23\x11\x16\xe1\x88\xa1\x48\x00\x31\x24\x34\x2f\xb4\x2c\x35\xd4\x08\x29\x24\x15\x9b\x43\xb1\x4d\xde\xa2\xb6\x1a\xfa\xd9\xae\xb6\x79\x72\xbe\x5d\xd9\x67\x72\x83\xa1\xe5\x60\x95\xa5\x13\x6b\x9c\x5f\xfb\xfd\xc3\xb5\xc9\x43\xaa\x7c\xf6\x30\x75\x62\xff\xb1\x41\x0a\xba\xad\xf2\x98\x21\xc8\x94\xe6\x05\x01\x01\x68\x3d\x14\x42\x43\xa6\x00\x72\x82\x20\x24\x34\x91\xb1\x39\x3d\xb2\x69\x95\xb7\xc2\x50\x0f\x55\x04\x53\xd0\xd0\xaa\x54\xe4\xfa\xe9\x9b\x3d\xf2\x3f\xa9\x9e\xe9\x40\x8b\x02\xe8\x1b\xad\x55\x8f\xee\x01\x6d\x57\x7b\xdd\xa6\x66\xfa\xdf\x0f\x25\x4d\xb9\x1f\xc7\xf1\x8f\x1e\x79\x1e\xe4\x64\x5c\xc5\x29\x85\x63\x58\x64\x01\x09\x97\x39\x0d\x09\xb6\x4f\x33\x12\x02\x0c\xe2\x15\x8f\x00\x0e\xe9\x40\xe0\x68\x1a\x83\xa5\x20\x46\x91\xa7\xbb\xb9\xf2\xfb\x33\x19\xfb\x0f\x54\x4b\x78\xf9\x86\xe9\xdd\xbd\x5d\x45\x4f\xce\x39\xba\x31\xd7\xba\x3d\xd3\xb2\xf6\xdd\xf1\xa8\x78\x1c\xab\xc8\xc8\xe3\x5c\x8b\x50\x18\x45\x44\x8c\x65\x9b\x42\xc0\x03\xe8\x88\x21\xc5\x09\x22\x09\x01\xa6\x00\x53\xf1\x79\x1e\x73\x59\x12\x06\xb4\xea\xe9\xff\xc5\x0d\xf5\xaf\x68\xfd\xbb\x81\x75\x72\x52\xa6\x7c\x75\xd2\xbc\x1b\xad\xc7\x12\x7e\x99\x56\xae\xd2\xe7\x35\x47\xf4\xe6\x33\x8c\xb6\x7a\x6b\xed\xb7\xcd\x7e\xb1\x7c\x30\xec\xbb\x6e\x7a\x3b\x74\xe1\x41\x81\xd4\xf1\xcc\xc7\x7c\x77\xd3\xae\x8d\x9b\x76\x88\x3b\x40\x13\xe5\x40\x71\x1d\xcb\xc0\x05\x85\xe6\x80\x41\x79\xa1\x85\x6b\xa2\x63\xaa\x2e\x6f\xca\xa2\x66\x07\x02\x21\x2b\x30\xa5\xbd\xc7\xcb\xf3\x2e\x0d\xab\x5b\x30\x3a\x15\x55\xab\x5a\xe0\xe3\x23\xab\xf3\x04\x43\xdb\x8c\xa7\x32\x14\xdb\x5c\xf3\xc3\xd1\x5d\x0b\xaa\x17\xc9\xf8\xb9\x3e\xa1\xb1\x91\x63\x30\x94\x46\x0b\x0e\xf4\x74\x4b\xf2\x02\x85\xc6\x58\x86\x76\x02\x55\x73\x08\x83\x26\x5c\xdd\x65\x21\x49\xb1\xb6\xa3\x2b\x81\x26\xa6\xc4\xdf\x34\xf1\xcc\xed\x8d\x33\x9f\xfe\xde\x73\xc3\x47\xcd\xde\x3c\x69\x91\x3c\xf2\xd7\xc7\xee\xe7\x19\x07\xba\x25\x5e\x7c\x92\x89\x6c\x55\x33\xe3\x95\x38\x96\x03\xaa\xab\x1b\x9e\x28\x29\xd0\x92\x91\xc6\xe0\xb8\x8f\x1c\x39\x14\x15\x59\x26\x81\xc9\xf0\x92\x10\x3a\x1c\xee\xf9\x3a\x67\x91\xa6\x05\x14\x42\x74\x52\x90\xfd\x6a\xfe\xd5\xf9\xea\x67\x66\x54\xc4\x0f\x9c\xc8\x64\x1e\x3a\xd0\x28\x7f\xb6\x97\xbd\x72\x5f\x5b\xdf\xe7\xa3\xb3\x65\xef\xb6\x95\x8e\x7d\x3d\x2e\x8e\xdb\xa5\xa6\x45\x99\x11\xd0\x7c\x9a\x61\xc2\xd0\xd4\x1d\xcd\x31\x45\x03\xda\x92\x41\x40\x16\x77\x20\x1b\xe0\x06\xe6\x39\x14\xed\x88\x9e\x2a\x07\x10\xa0\x14\xd6\x5a\x7e\x1a\x99\x31\xd3\xf2\x2b\xed\x47\xe6\x6d\x37\x54\x2a\xb3\x09\x9e\x9e\x89\x55\xb8\xdd\xa7\xd9\x9c\xbb\x53\x67\xeb\xb3\x33\x4e\x94\x1e\xc5\xcf\x64\xd5\x23\x3d\xc9\x45\x84\x15\xa9\x3a\x21\x32\xb6\xc5\xf0\x9c\x6c\x39\x82\xaa\xaa\x3e\xc7\x63\x0c\x87\x0c\x8a\x0f\x28\x1b\x68\x0a\x10\x6c\x59\x95\x71\xf0\x6f\x93\x17\x64\xfc\xdf\xd0\x17\xc9\xf5\x12\xf9\xbf\x5c\xad\x59\x1e\x9d\x5f\xb6\x2f\x6d\xe1\xdc\x3f\x54\x17\xb2\x86\xd3\x26\xb0\xca\xb0\x7d\x27\x2e\xdd\x2f\x3e\xaa\x81\x3a\xa7\xfd\xf2\xd5\x0f\x52\x47\x93\x1f\xfb\x6a\x0d\x08\xd9\x50\x49\x4d\x71\x64\xc1\xf6\x09\x1d\x68\xb6\xc1\xb1\xa2\x24\xda\x66\xc4\xd0\x32\x85\x64\x32\x90\x2d\xcf\x16\x04\x35\x92\x3d\xe4\x8a\x2a\x15\xfb\x3f\x99\x73\xaf\xef\x4a\x73\x82\x38\xeb\x6e\xcd\xef\xeb\x7d\x34\x6e\xd3\x9b\xa1\x8f\xd3\x37\x19\xdc\xbb\x4d\xb1\x06\x2d\x6b\x17\x24\x4e\x7e\x9b\xba\x15\x91\xd8\x2c\x3d\x26\xa9\x73\xae\x4f\xeb\xae\xe1\xab\x18\xc5\xf1\x7e\xc4\x39\x9c\x81\xe9\x12\xf2\x15\x3b\x62\x69\x96\xb5\x24\xc8\x05\x6c\x18\x4a\x0e\x26\xb0\x0c\x9b\x42\xb0\xae\x10\xae\xef\x1e\xb8\xa6\x41\xde\x02\x75\x97\x74\xa5\xc6\xde\x16\xd2\xae\x33\xff\xec\xf3\x60\xd4\xd3\x0a\xcf\x16\xd0\xfb\xfa\xe4\xed\x10\xbf\xa4\x6f\x09\x3c\x61\x0b\x3e\xc0\x4d\x93\x96\x14\xca\xa4\x5c\x09\x07\x24\x06\x58\x87\xa6\x3c\x8d\x41\x08\x2a\x8a\x29\xe8\x3e\xc7\x28\x6c\x20\xe3\xac\x6f\x87\x29\xac\xf0\x8a\xbf\xdf\xbb\xbe\xef\xcf\xa8\x9a\xf7\x6b\x05\x24\x8f\xbe\x15\x96\xe4\xf7\xe6\x5c\xb7\xf2\xde\xdb\x2c\x65\x3e\xdd\x74\xa3\x53\xea\x24\x64\x62\xa6\x44\xcd\x44\x18\x27\xe8\x1c\x41\xb1\x81\x25\x40\x95\xc1\x18\xd1\x17\x3d\x0c\xda\x2a\xaf\x21\x59\xa7\x20\x12\x14\x85\xe5\x60\x40\xf8\x34\xcf\x92\x12\x93\xc2\x56\x8b\xfd\x91\x4d\xbf\x3e\x39\x7a\x03\x58\xf8\x14\xdf\xad\xe6\x46\x1f\xf6\x25\x92\xea\xdc\xf8\xae\xc2\xa5\x26\x9b\xe6\xdf\xf4\x07\xc6\x51\xac\x9a\xe4\x48\x82\x56\xd9\x10\xd2\x50\x54\x19\xce\x33\x29\x11\x8f\x34\xd3\x36\x7c\x0a\x30\x01\xed\x29\x3e\xb4\x43\x91\xf6\x43\x5f\xb1\x91\x17\x09\x12\xc0\xfe\x6d\xf2\xd3\xf4\xff\x1b\xf8\x29\xb9\x6e\xaf\x02\xef\xbe\x00\xd3\x6c\x53\xb2\x7f\xc1\xe7\xed\x03\x07\x0c\xe8\x70\x64\x76\xa2\x3a\xa8\x7e\x69\xa9\xc2\xa4\x4b\xf9\x77\xb5\xcd\x74\xb3\x69\x8e\x87\xa9\xdb\x86\x8d\xfd\xc6\x45\x98\xc2\xe0\x2e\x61\x85\x1a\xe3\x41\xc5\xd2\x0c\x4c\x70\x65\xda\xb7\x3c\x5a\xe0\x21\x13\xda\x21\x61\x87\xb8\xc5\x10\x96\xe2\x45\x10\x60\x34\x97\x82\xe3\x47\x75\x2a\xb5\xa9\x7c\xef\xd9\xa5\x19\x8d\x1a\xd5\x6c\xd2\x5f\xb9\xbe\x74\x40\xeb\x7d\x87\x4e\xaf\xfa\x66\xff\x82\x73\x09\x1f\xe6\xdd\x51\x2e\x7e\xe9\x85\x84\x90\xb3\x3c\x26\xe4\x01\x29\x88\x1c\x67\x1b\x44\x24\xdb\x80\xa5\x34\x3f\x12\x39\x53\xb2\xa1\x27\xeb\xa6\xee\xe3\x24\x66\xb2\xae\xac\x60\x12\x48\x01\xab\xdb\xb7\x53\x9b\x59\xfc\xb7\xcd\x3a\x2b\x5f\x36\xdd\xbd\x83\xaf\xf8\xc7\x67\x47\x46\x54\x2b\xb8\xe2\x58\xe2\xd9\x7b\xca\xb6\xcc\xf9\xee\x8d\x88\x23\x45\x16\x34\xcc\x80\xb1\x84\xc0\xf5\x55\xd1\xc3\x18\x10\xa2\x50\x84\x1a\xc2\xa2\xc0\xc6\x89\xc8\x65\x70\x5f\x20\x98\x90\xb4\x24\xd7\x97\x1d\xc5\x8c\xd8\x14\x1e\xad\x17\xfa\xe4\x6f\x97\xf7\x83\xf4\x99\xf3\x96\x3c\xa4\x6e\x58\xb1\x7f\xc4\xe9\xd3\xcb\x0b\x08\x59\xc6\x69\x25\xca\xd5\xda\x37\x38\xf7\xd5\x81\xf1\xab\xb8\x24\x52\xc4\x2c\xe0\xab\x50\x92\x79\x42\x03\x48\xd2\x01\x8e\x3b\x6a\x40\xf2\x41\x68\x28\x8c\x65\xba\x80\xa0\x4d\xc6\x33\x5c\xd1\x92\xfc\x28\x00\xff\x55\x53\xfe\xab\xf9\xf1\x77\x08\x9d\xe4\xa4\xcd\x09\x75\xfe\xc2\x2d\xd4\xe2\x4d\xff\xb4\x5b\x12\x2b\xbc\x9e\xf0\x45\xf3\x56\xf2\xf3\xd6\x93\xea\x67\x02\x27\xa4\xd6\x75\x9e\xbf\xf8\xed\x96\x6e\x3c\xdc\x9d\x3a\xb1\xdc\xd8\x64\x72\x3c\x8e\x13\x86\x8d\xf9\x8e\xce\xe3\x01\x29\x49\xbe\xc1\x61\x9a\x4a\x1b\x2c\xef\x98\xb6\x07\x42\x55\x04\xb2\x81\x29\xc0\x91\x05\x8c\xa7\x95\x48\xb1\x62\x27\xd0\x81\x3d\x9b\x5e\x48\xfb\x98\x56\x4a\x3f\xad\x98\xf1\xf8\x9b\xf6\xca\xa7\x3d\x1b\xfe\x96\x69\x5d\xab\x07\xe9\xf3\x87\x5f\x5e\x2e\xf7\x69\x1c\x99\x26\x22\x0e\xe7\xc2\x48\xd4\x22\x55\x20\x01\xa3\xb3\x12\x0f\x90\x29\xa8\x08\xf7\x81\x6e\x87\x1e\x69\x5a\x92\x2e\x02\x31\x10\xc2\x40\xd0\x5d\x86\x47\x30\x85\x6a\x67\x7b\x93\xf6\xfb\xde\x0c\x2a\x75\xa8\x5d\xcf\xfd\xcd\x33\x6e\xc9\xfe\x43\x9b\x21\x05\x6b\x04\x7d\xbb\xa5\x69\x96\xf8\xec\x4d\xe5\x6c\x5b\xe3\x58\xed\xb8\xa1\x8f\x9b\x16\xc1\x49\x3c\xc7\x07\x88\xf5\x03\x07\x29\xa1\x47\x40\x00\x71\x4c\xf1\x19\xd1\x0f\x02\x17\x98\x6e\xa4\x21\xe0\x72\x32\x27\x46\x0a\x16\xdb\x64\x90\x6b\xd3\xdd\x3f\x07\xb6\xe8\x90\xbf\xfb\xd6\x4c\xee\x8e\x96\xdf\x67\x6e\x56\xe2\xdc\xf7\xf3\x0b\x2e\xd7\xf3\x2d\xb8\x2f\x6f\x98\x1d\x47\x0c\x37\xa7\x8a\x3a\x4e\x53\x3a\x65\x29\x56\x18\x51\xa1\x08\x79\x18\xd9\x50\xb3\x21\xe6\x29\x7c\x64\xb0\x82\xc8\xca\x92\xc9\x02\xc1\x8d\x44\x8e\x50\x34\x45\xff\x77\xb4\x8e\xca\xfc\xbf\x61\x5f\x92\x93\x88\x4a\xe9\xd2\x0d\x78\xe7\x17\xfe\xf6\x51\xbd\x0a\x53\x3a\x14\xd8\x01\x8a\xf7\x6d\xf4\x64\xed\x9d\x9b\x1f\xfc\x51\x25\xbb\x54\xdd\xfa\xb8\xd4\xfd\x59\xd7\xb6\x2f\xb7\xea\xc7\xef\x22\xfe\x47\xf6\xb4\x00\x2d\xb0\x90\x56\x39\x23\x52\x18\x64\x4a\x9e\x4e\x72\x0a\x2f\xd3\x3e\xe1\x2b\x26\xf2\x2c\xc9\x72\x39\x9c\xe1\x39\x3c\x14\x2c\x99\xf3\x53\xe0\x96\xc5\xfa\x5d\x2c\xb8\x69\xea\x14\xb7\xd8\x96\x21\xb5\x12\x66\x89\x57\x7b\x94\x1b\x2d\x7e\xf2\xe3\x82\xa4\xba\x53\xeb\x7e\x06\xd7\x74\x8f\xdf\x9f\x42\x39\x86\x10\xa8\x2e\x11\xc9\x01\x4e\xe8\x44\x60\x6b\x34\x83\x45\x9a\x6b\x58\x9e\x03\x08\x84\x85\x6c\x00\x31\x1e\xd7\x1c\x9d\x91\xe9\x28\x20\x4d\xde\x8c\x6d\x72\xf8\x64\x7b\xed\xd2\x09\x67\x86\x8c\x58\xbf\x32\x4d\xb5\x86\x53\xea\xad\x9d\xdd\xe3\x6d\xbd\xdc\xc5\x12\xff\x4c\x7f\xba\x3c\x75\x72\x7d\xed\x38\x3e\x5a\x05\x5a\xf1\x49\x89\xb4\xbc\x88\x13\x5c\x91\x13\x25\x17\x97\x70\xdc\xb0\x64\x43\xb7\x65\x93\xa4\x14\xc8\xe8\x80\xc7\x1d\xde\x14\x42\x1e\x67\x81\x8a\x62\x27\x18\x6d\x75\xf7\x56\xb3\xff\xb8\x7b\x13\x33\x4e\x0d\x39\x3b\xf0\xce\xe3\x02\x27\x4c\xf7\x7c\x8d\xa6\xa3\x33\x4c\x1e\xff\xba\xcd\xcb\x2f\x52\xc7\x0b\x13\x33\x5a\x79\x05\x93\x20\x12\x35\x8d\x65\x38\x5c\x61\x2c\x88\x80\xe3\xe3\x9e\x21\x22\xd5\x32\xa0\xcc\x38\x96\x43\xf2\x98\xe2\xf1\xa6\x6e\x58\x94\xc1\xbb\x29\x51\xd9\x1c\xfb\xbc\x48\xc7\x13\x63\xf9\x42\x57\x2a\x8f\x9b\x29\xa8\xc3\xb7\x67\xa7\x7b\x24\xdd\x31\xde\x34\xcf\xb2\x7b\xec\x96\x4f\x51\x9a\x38\x72\xdd\x13\x0e\xe5\x28\x8a\x47\x6b\x9c\xa1\xbb\xa1\x87\x91\x14\x63\x52\xb8\x2d\x0b\xb6\xec\x68\x16\x30\x01\x88\x6c\x9b\x76\xc2\xff\x93\x65\xb4\x0c\x0c\xfd\x93\x1c\xe3\x7d\xc7\xe8\xdf\x2b\xb1\x1a\xde\x6c\x4d\x8b\xb4\xe7\xb1\x17\x19\xf3\xf6\xfd\xf0\xe4\xe0\x1c\x63\x87\x6f\xb7\xda\x9c\x7b\xda\x6c\xe9\xb8\x46\xb5\x53\xa7\x67\x12\xf3\xe6\x61\x3c\xdd\xf0\x22\x24\x43\x21\xd2\x3c\x51\xf3\x42\x1b\xd1\xae\xef\xc9\x36\xcb\x22\xc4\xc0\x08\xa7\x01\x16\x31\x96\xe8\x22\x42\x97\x64\x83\x8b\x58\x2a\xb6\x63\xe4\xcb\xa2\xd7\xdf\xd3\xab\x61\xdb\x42\xe2\xb4\xa1\x7f\xfe\x58\xb1\xf3\xfa\xa7\x8d\x1b\x6e\x2b\xb9\xbf\xf7\x58\xab\xd0\x44\x2f\xe7\xb9\xd4\x15\x5d\xb1\x35\x7e\x45\x55\xf1\x38\x0f\x49\x88\xff\xc7\x2b\xd5\x57\x71\x99\xb1\x3d\x81\xf1\xec\x88\x8f\x34\x19\x0b\xe8\xc0\xc5\x6d\xca\x0f\xff\xf1\x20\x09\x58\x55\xb6\xe9\xf7\x5a\x4c\x7f\x87\x3f\x4b\x4e\xca\x92\x50\xfa\x2f\x7c\xdb\xfb\x6b\xe4\xaa\xa5\xe7\xe9\x5b\xe5\x72\xed\x31\xed\x1e\xee\xfc\x35\x9c\x9b\xa3\x70\xf1\xaf\x72\x2f\xbc\x30\x7b\x52\xcf\x4b\x4b\xbe\x2c\x1d\x3f\x1c\x35\x2b\x0a\x91\x17\x31\xbc\x20\x08\x0e\x14\x19\x68\x2b\x9e\xa0\x80\x80\x61\x3d\x24\x11\x88\x64\x23\xd5\x70\x3c\x0f\x63\x43\x8c\x15\x55\xa0\x07\x34\xaf\xd9\xb1\xfd\xa8\xd0\xd3\xac\x7d\x4b\x6c\x1e\xdd\xea\xc7\x95\x41\x02\x9d\x30\xe0\xfe\xad\xef\x2f\x0e\x1a\x94\xf1\xcd\x9b\xeb\xf9\xa6\x9d\xfb\x50\x6d\x15\x47\x5a\x65\x1d\x44\x12\xa5\x59\x9c\xa3\xab\x62\x64\xd1\x86\xcb\xc9\x80\xd3\x15\x85\x10\x48\x24\x2a\x3e\xcb\x12\x6e\x40\x9b\x3c\xcb\x1a\xc8\x56\x78\x4b\xd1\xed\x14\x58\x9c\x16\x36\xf8\x28\xf1\xfe\xb5\x49\x03\x2f\x9c\xec\xb5\x63\xd8\xb3\x96\x5f\xfd\x90\xeb\x55\x9e\xac\x7b\x16\x14\xa8\x7c\x0b\x2d\x6a\x5d\x7c\x68\xea\x58\x9c\x62\x9a\x1c\x32\xa6\x1f\x4a\x1e\x64\x45\xd9\x21\x30\x42\xf0\xa0\xe4\x09\x81\xc0\xbb\xbc\x08\x71\xcf\x32\xa0\x07\x39\xc7\xc3\x08\x49\x41\xae\x28\xca\x3a\x81\x52\x68\xe4\x55\xaf\x38\x72\xf5\xe3\x0d\x03\x72\x7c\x50\xe2\xb3\xc1\x2b\xe6\x8d\xad\x6a\xb4\xab\xb7\xdb\x1b\xf3\x9d\x5f\x7b\x8b\xb5\xb7\x6f\xd5\x0b\xa9\x63\xf0\x8d\x2d\xcb\x19\xda\x72\x14\x59\xc8\x24\x09\x0c\x59\x0e\xc7\xf2\x90\x82\x8a\xa4\x47\x6e\x18\x39\x02\x89\xd3\x2c\xc9\x62\x84\x16\x42\x8c\xa3\x03\x80\x79\x0a\x66\xc7\x36\xb9\xd5\x0a\x2c\x6b\x41\xaa\x54\xe3\x51\xc7\x41\xb9\x96\x57\x07\xde\xf9\x74\xfa\xb6\xe3\x64\xa7\x49\x89\x63\xaa\x7f\x76\x8c\x18\xee\xa6\x8e\x78\x2a\xf6\xa0\x55\x27\x10\x25\xf2\x8e\xe5\x9a\x4c\x68\x01\x83\x34\x78\x51\x50\x4c\x21\x90\x20\x6d\xb1\x9c\xcb\x47\xba\x45\x22\xca\xa6\x18\x2c\x70\x0c\xcd\x8e\xfe\x8b\x30\xe8\x5f\xd1\xfa\x77\xf8\xcf\xe4\xa4\x81\x09\x5f\xfc\xa5\xc7\x34\xa5\x66\xb1\xef\x98\x46\x87\xdc\x4b\xdd\x7e\x58\x90\xed\xf4\xc4\x55\x97\x7b\xd6\x6b\xb6\x7a\xe3\x91\xf2\xb3\x3a\xd7\xfc\x32\x49\xd2\xe3\x28\x93\x2e\x41\x47\x06\x22\x2f\xc9\x32\x86\x5b\xb6\xca\xca\x48\xe6\x79\x15\x83\xb4\xc7\x2a\x84\x41\xe1\x81\x29\x48\xc0\x04\x91\x86\x9c\x30\x24\x15\x56\x65\x53\xb8\xa8\x8e\xd4\x2e\x65\xec\xbb\x3d\x7d\x1f\xfa\x26\x38\x54\x6f\xf4\x8e\x23\x43\x40\xb7\xa1\x4b\x77\xa4\x2b\xb3\xe5\xb3\xcd\x99\xfb\x4f\xcd\xd7\x35\x7e\x7e\x44\x90\x7e\x40\xd9\x21\x6d\xdb\x0a\x29\x47\x6c\x84\x07\x9c\xe9\xbb\x94\xe3\xd2\x88\x45\x40\x67\x75\xe0\x63\x2e\x49\x8a\x1a\x65\xe8\x7e\x28\x6b\xda\x3f\x15\x69\xdf\xf7\x23\xfe\x6d\x42\x16\xf8\x43\x89\xea\x45\xc7\xee\x29\x55\x81\x9f\x65\x67\x2c\xbd\x7f\xcb\xf8\xfc\x1f\x7d\x7e\xbe\xf4\xec\xa7\x95\x33\xdd\x49\xdd\x13\x29\xe6\xdd\x2a\xa9\x8e\xac\x13\x38\x45\x22\x5e\xf4\x75\xd3\x93\x91\x23\x04\x0c\x23\xe0\xb8\x4f\xa9\x96\x66\x92\x54\xe4\xea\x04\x89\xab\xa2\x16\xb0\x56\xc8\x8b\xff\x6c\xbb\xbf\x9f\x13\x2f\xd5\xec\x3a\x62\x61\xc1\x0d\x17\x7a\xf1\x07\x2e\x8c\xe0\x87\xd4\xad\xbf\xe3\x17\xb7\x75\x30\xbe\xe9\xfa\x87\x19\xbe\x7c\x1b\x6e\x4c\x9d\x78\x5c\x4c\x93\x65\x21\xf4\x2d\xd7\xf1\xf1\xc8\xd4\x39\xc4\xb1\x12\x32\x45\xde\x65\x01\x49\x6b\xb6\x6a\xd1\xa1\x4d\xf2\x8e\xa2\xbb\x8a\xc6\xd9\xb4\x08\x23\x1f\xe0\x29\xf4\xb0\xe7\xe6\x59\xd0\x6f\xff\x92\x2e\x3f\x17\x31\x6e\xdc\xc6\x06\x4c\xf9\xe1\xe0\x48\x3c\x47\xf1\x56\xe7\x83\x4c\xc7\x0a\x36\xab\x20\x94\x6c\x11\xc7\x61\x2b\x60\x3c\x40\x6a\x92\xc8\x61\xb8\xe2\x6b\x0a\xa1\xea\x0c\x2e\x70\x1c\x81\xf1\x1a\x8b\x03\x8c\x52\x7d\x9e\x90\x38\xa0\x44\x3a\x26\x2a\x54\x88\x9c\xe8\xbd\x61\xeb\xdf\xe1\xaf\x93\x93\x7a\xd7\x49\x57\xe7\xdd\x68\xbd\xbf\x39\x07\xff\xf2\xd6\xdd\x33\xa6\xe2\x0f\xc8\xa1\x3c\x59\x9d\x7d\xce\x6f\xb5\xa7\x25\xaf\x9a\x30\x78\xc0\x88\x65\xb3\x5e\xb7\x4d\x9d\xc0\x7b\x4c\x20\x8e\x4f\xdb\xd0\xe7\x2d\xde\x41\x2e\xe6\xe8\xbc\x68\x05\x0e\x6e\x30\x80\x23\x24\x4a\x37\x48\x18\x72\xba\x04\x35\xd3\x33\x9c\xd0\xf5\xa8\x28\xa4\x9d\xff\xd2\xa3\x7f\xd7\x8f\xbe\x5f\x5f\xe4\x1a\x9b\x38\xb8\x62\x9b\x76\xc2\xba\x2a\x35\x67\x56\x4f\x92\x7e\xca\x9f\xde\xc8\x3d\xed\x6e\xd2\x54\xe3\x77\x21\x75\x5a\x16\x29\xe8\xad\x98\x1c\x4d\x19\x81\x19\x9a\x51\xc0\x69\xb2\xed\x18\x0c\x1f\xc9\xb8\xc9\x84\x24\x4e\x99\xac\xa6\xe3\x2a\x47\x50\x21\x49\xeb\xc8\x87\x3e\x22\xa0\x1a\x3b\x5a\x5f\xcc\x3e\x3b\xf3\xf8\xaa\xc3\xe5\x8b\x29\x49\x43\xeb\xa5\x1d\xe2\xbf\xc1\xb9\xcd\x8b\xca\x57\x1b\x39\xb3\xe4\x9a\x35\xc2\x84\xfe\x15\xe2\xc8\x36\x81\x1c\xc8\x29\x0a\x8d\x80\x8b\x5c\x4d\x11\x38\x02\x10\x96\x2e\xd1\x1a\x2b\xb0\xba\x21\x53\x12\x0a\x05\x08\x75\x05\xea\xb6\x83\xd3\x00\x91\xff\xa5\x4c\xf9\x8e\xc9\x6f\x0f\x26\x69\xf4\xb1\x27\xd5\x3b\xed\x2e\x76\xb8\x5f\xb7\x8b\xa0\xb7\x74\x78\xe1\x9d\xc5\x43\xb6\xdf\x6a\xff\xe6\xd5\xd4\x2f\x7f\x8c\x23\x17\x82\xc4\x12\x96\xef\x80\xc0\xa0\x05\x8a\x03\x8e\x8f\x02\x27\x32\x03\x4e\x26\x65\x5e\xe3\x24\x84\x30\x60\x89\x2e\xee\x84\x01\x69\x46\xac\xac\x47\x34\x9b\x42\x47\xf8\xe5\x8d\x23\xad\x16\xd4\xcf\x38\xa6\xd4\x86\x97\xa4\xdb\xe9\x9b\xaa\x03\x76\xf8\xb3\xd6\xe7\x3e\xc5\xcd\xef\xfe\xfc\x5e\xce\xfe\xa3\xe3\xc7\x43\xc9\x6a\x96\x40\x98\x91\x2c\x47\x02\xef\xab\x16\x46\x1a\x66\xa4\x06\x66\xa0\xfe\xa3\xfe\x0a\x00\xa1\x73\x06\xa6\xe8\x42\x48\xcb\x9a\x81\x44\xdc\x56\x5d\xf5\x3f\xfc\x81\x17\x32\xfd\x6f\xe8\xe6\xe4\xa4\x5e\x83\xbb\x25\xf4\x7f\xe7\x17\xe6\x4f\xd8\xdd\xa0\x6d\xef\xd9\x13\x27\xae\xb8\x5f\x73\x53\x83\x63\x0b\x2f\xb7\x7e\xf1\x6d\xfe\x82\x39\x12\xf0\x9d\x9d\xad\x56\x1f\x5f\x4a\x1d\xd5\x7c\xcc\xbb\xd5\xe7\x09\x1e\x87\x56\xc0\xb8\x0c\x41\xb0\x98\xaa\xf8\x12\x27\xda\xb6\x12\x05\x50\x97\x0d\xca\xa0\x14\x03\x32\x96\xc3\x99\xae\xac\x4a\xa6\x2c\x2b\x2a\x8c\x1d\xad\x6d\x79\x6d\xef\x07\xe6\x95\xaa\x2f\xbb\x14\x3b\xfe\x4d\xd6\x68\x49\xcf\x61\x73\x77\x2c\xd9\xa9\x94\x3b\x85\x89\xb7\x4a\x75\x3c\x96\xba\x86\x46\xcc\xbb\xd5\x67\x43\xc3\x04\x0e\x86\x49\xc0\xa5\x3d\x01\x79\xbe\xc8\x13\xb8\xe8\xc8\xd0\x45\x66\x24\x21\x81\xd6\x42\x8a\xe6\x65\x43\x77\x4c\x13\x57\x01\xa7\xfa\xb1\x5d\xbf\xe2\xec\x9b\x6b\x4b\xa7\x1b\x43\xfb\x67\x33\x35\x9c\x3a\xbe\xec\xa8\x9f\xfc\x4a\xdb\xcc\x6d\x8d\x4e\x94\x9c\xf4\x21\x3d\xfb\xdb\xba\xa9\xa3\xf8\x8a\xe9\x47\x22\xc9\x0b\x36\x1b\x51\x1e\x6e\x99\xbe\x4a\x40\x5a\x82\xba\x62\x72\xa2\xe5\x2b\x1a\x89\x48\xa4\x47\x3a\x80\x46\xa4\x61\x1a\x1e\xe1\x1a\xa0\x1d\x94\x02\x8b\x75\x99\xce\xbd\x27\x7c\xf3\xf1\xff\x63\xed\x2c\xa3\xac\x38\xb6\xbe\x8f\x3b\x09\x21\xc1\xdd\xdd\x5a\x71\x1d\x5c\x83\x05\x87\xee\x6a\xab\xee\x6a\xf7\x26\x04\x18\xdc\xdd\x25\x41\x83\x05\x09\x1a\x82\x06\x09\x1e\x42\x20\x38\x01\x82\x05\x0d\xee\xf0\xae\xfb\x66\xdd\x27\x77\xee\x9c\x59\xb9\x6b\xd6\xf9\x5e\x1f\xea\xd4\xf9\xf7\xae\x5d\x5b\x7e\x7b\x48\xfb\x66\xeb\x4b\x2f\x4a\x7b\x72\x76\xc9\x2a\xd7\x26\xdd\xbf\x52\x11\xe4\xce\xfb\x78\x45\xfe\xeb\xce\xfb\xf8\x81\xb7\x59\x25\xa4\x0d\x8d\x80\x4a\xe0\x00\x3b\xe2\x31\x9a\x56\x70\xc1\x56\x6d\x1a\x17\x6d\x21\x94\x42\x10\xf0\x94\x6d\x99\x26\x40\xae\x68\x79\x01\x13\xf9\x76\x0a\x66\x7c\x6d\xeb\xc2\xef\xd7\x52\x15\x8e\x0c\x7d\xf0\x76\xd1\xe6\x15\xe9\x4b\xbd\xbb\xb4\x69\x50\xef\x52\xf9\x47\xbe\x2d\xff\xbc\x96\xfe\x55\xae\xd4\xd1\xed\x62\xb3\x28\x49\xdf\xf0\x2c\x13\x62\xb6\x02\x75\x5d\x0c\x01\xc1\x93\xbe\xe3\x42\xce\x30\x59\x95\x97\x1c\x2e\xe0\x55\x0b\x92\xb2\xe6\x08\x7c\xa8\x01\x1e\x33\x53\x30\xe3\xcf\x45\xae\xb6\x98\xe7\xcc\xef\x4d\x06\xde\xf9\xfe\xa4\xb1\xf9\x6d\xf5\x00\xed\x9a\xf2\xd5\x66\x7c\xce\x2f\x95\x57\x2c\xee\x3d\x37\x75\x03\xa5\x63\xe3\xea\x4c\x11\xf0\x2a\xcb\xf0\xd0\xc4\x94\x20\x8c\x78\xd7\xb6\x64\x9f\x94\x31\x9c\xe5\x42\x5c\xa6\xcd\x50\x0d\x24\xd1\xb1\x00\xa6\x03\xc6\x0c\x74\x1c\xd8\xc9\xa8\xb1\xff\x54\xee\x9c\x98\x90\x3e\x4d\x9a\xd2\x43\x93\x74\xe0\x05\xcf\x24\x7a\xef\xc6\xb7\x5f\x7c\x75\xf6\xf1\xe9\xb5\xdb\x46\x14\xcc\x38\xe9\x4d\xc3\x74\x8d\x2f\x8f\xaa\x97\x57\xed\xb6\xb1\x96\x9e\xba\x16\xc3\xd8\x6d\x09\x6c\xc0\x58\x3a\xc7\x73\xa2\xa2\x51\x2e\xc6\xa9\x4c\xc0\x07\x9c\x22\xfa\x81\x25\x18\x0e\xd0\x21\x45\x28\x91\x00\x21\x15\x46\x32\x27\x2b\x96\x89\xb8\xe4\x75\xa0\xbf\x12\xaa\xbc\xdd\xda\xb2\xb6\x9b\x6a\x7e\x33\xaf\x56\xf6\x9a\x0b\x67\x0c\xfc\xa4\x0a\x59\x66\x58\xbf\xc1\x75\x5f\x67\x3c\xb1\xbf\x5f\x1c\xa3\xa5\x0e\x2b\x73\xb4\xaa\xd0\x00\x18\x3c\xb4\x1c\x9e\x93\x0c\x1b\x68\x88\x41\x4c\x10\xf0\x2a\xcd\x31\x4a\x48\x53\xa4\x84\x69\x14\xb0\x08\x81\x61\xc2\x14\x98\x6b\x2f\xd2\x64\xde\x9f\x35\x5b\x87\x0e\xa5\x98\xaf\x33\x82\xec\x52\xab\xb4\xe2\xd2\x17\xb9\xe4\xe6\x79\xb2\x0c\x9e\xca\x1e\x5a\xff\x24\x4d\x1c\x83\x19\x16\xa9\x06\x82\xe6\xa8\x92\x8f\xb9\x84\xe1\xf8\x0a\x2b\x19\x90\x74\x03\xca\x37\x65\xdc\xf0\x6d\x9c\xb3\x75\x89\x61\x6d\xd3\xc4\x5c\x15\x0f\xed\x30\x85\x01\x27\x73\x8e\xb5\xec\xaf\x7f\xfa\xaa\x6e\xb5\x73\x9d\x97\x96\xff\xee\xd7\x21\x63\xb7\x1d\x3e\x7a\xb6\xed\xf2\x53\x69\x16\x36\xfa\x85\x3b\x70\xeb\x70\x1c\xe3\x78\x8a\xc5\xe2\x92\x43\xd1\x21\xe2\x59\x20\x92\xac\x8f\xf1\x0a\x8e\x14\x8e\xa3\x74\xd6\x0b\x09\x9f\xb0\x7c\x4d\x32\x03\xcc\xe7\x3d\xdb\x54\x44\x37\x4a\x21\xc0\x7b\xa3\x59\xb1\x6f\x26\x36\xdf\xf5\x24\xdf\xfe\x05\xd3\xd6\x95\x2c\xde\xf6\xfc\xba\xe6\xa7\x8e\x7f\x5c\x60\xcd\xbc\x82\xe7\xa5\xad\x9d\x6e\xb1\xf1\xd3\x31\x8f\xab\x94\xa3\x42\x33\x44\x92\x69\x2a\x96\x40\xab\x3a\x87\xf3\x34\xc9\x40\xc0\x09\x86\x6c\x44\x12\x69\x51\x06\x46\xb9\xb6\x48\x84\xb8\x4e\x60\xec\xdf\x85\x0e\xdb\xb3\xff\x6f\x95\xe5\x89\x09\x35\x06\xa5\x99\x98\xd4\x15\xc8\xf0\x08\x1b\x91\xab\xe9\x8e\x07\xbf\x54\x2e\xb3\xfc\x52\x41\xeb\xeb\xb6\x17\x37\x66\xe9\x9c\x70\xc3\x5e\x93\x63\xe3\xc0\x1b\x1b\x8b\x79\x71\xcc\xde\x68\x82\x65\x0b\xc8\xa6\x7d\x5e\x70\x95\x50\x09\xb5\x08\x32\x26\xcb\x20\x05\x0a\x14\x6f\x53\x2e\x07\x4c\x01\x7a\x8e\x60\x04\x36\x29\x58\xa1\x63\xd1\xb1\x01\x19\xab\x8e\x74\x1c\xfd\xc1\x1e\x77\xd5\xd0\x03\x5d\x3a\x1f\x9f\x5c\xb8\xe4\x4c\x3c\xcf\x8e\x76\xbf\xcd\xd7\xa7\xb0\x17\xcb\x7c\xd8\x7c\x67\xea\x06\x5a\xc4\x9e\xcc\x19\x12\x9a\xea\x6a\x6e\x20\x5b\xac\xea\x28\xa4\xa3\x87\x12\xa1\x0b\xbc\xc5\xba\x00\x13\x0c\x44\x29\x92\x6b\x06\x82\x48\x68\x12\xe6\x98\x24\x65\x02\x29\xb9\x71\x39\xec\x82\x93\xd5\x5f\xdc\xdc\x70\xa0\xfa\xee\xe3\xa7\x1e\x3e\x2e\xdb\x7c\x6b\x87\x0a\x15\x2a\x0c\xcb\xf5\x64\x5b\xc1\x6f\xb2\xef\xdd\x99\xba\x0e\x90\x98\xb2\xe7\x18\x5e\x80\x12\x17\x46\x38\x25\x43\x1a\xf0\xa2\xaf\x40\x59\x60\x5d\x5a\xa4\xac\x10\xa9\xba\x8a\x09\x9c\x2e\xba\x91\xed\x21\xcf\xf4\x29\x9b\xe2\x52\x48\x0d\xaf\x10\x3f\x0e\x3b\xdb\x6b\x26\x0f\x3c\x4e\x7e\x43\x3e\xaa\xdc\xd8\x1e\x5a\xef\xf3\x57\xd1\xe7\x6f\x88\xf0\x8a\x42\xef\x5c\x14\x3f\xd9\x33\x9c\xa4\x12\x4e\x20\x21\xe4\x22\xd6\x97\x7d\x99\xa5\x39\xd2\xd6\x38\x22\xa2\x45\x9e\xb6\x70\x2c\xc4\x45\xd5\x61\x4c\x99\x61\x58\xda\xd2\x19\x17\x62\x56\x6c\x37\x20\x63\x07\xe7\xc1\xc4\x3b\xf8\x41\x27\x2c\xff\xba\x4f\xb9\x34\x83\x8a\x18\xfd\xbe\x69\xf7\xfd\xc6\x6b\x5d\x97\x5e\xcc\x2b\xf7\x2e\x94\xba\x39\x32\xb1\xe7\x6f\x04\xa4\x4e\x45\xbc\x67\x40\x42\x64\x0c\x40\x6a\x48\x94\x2d\x0b\x38\xa6\x24\x13\x1c\x1b\xf0\x88\x54\x5c\x87\x8f\x68\x8f\x34\x19\xdd\x81\xb2\x06\x53\x20\xdb\xd9\x39\x3a\xe6\x79\x84\x86\xa9\xf3\x16\x1e\x3d\xaf\xec\x2e\xb4\x52\xa3\x98\xd2\x93\xf2\xb5\xef\x5b\xe1\xd6\xf9\xc5\x3b\xbf\x3e\xf2\x3c\x7e\x3a\x86\x5a\xa4\x05\x02\x52\x18\x87\x72\x00\x90\x81\xeb\x10\x82\x40\x84\x08\x44\xba\x67\xc8\x94\x2c\x04\x04\x25\x89\xba\x2d\xd1\x34\x6f\x53\x06\xae\x38\x62\xec\x4f\xaf\xf0\xbb\x6f\xf0\xa3\x17\x27\x0e\xa8\xe4\x15\x2e\x6e\xbe\xdf\xb1\x75\x61\x9b\x43\xb8\xc0\x75\x29\xb8\x6e\x47\xf9\xb3\x9f\x2b\x95\x9a\xc7\x31\x3d\x4d\xb2\x24\x4e\x79\x02\x25\x3a\x06\xc1\x29\xba\x16\x85\x24\x44\x88\x03\x42\x00\x24\xa0\xd9\x40\x62\x34\x04\x59\x03\xaa\x1a\x67\x06\x06\xee\x31\x31\xa6\x27\xbd\x4b\x5c\xdb\xac\x90\x5b\x3a\x6a\x97\xb0\x6d\xf7\xe5\x1a\x5f\xac\x78\x38\x7b\xf8\xfc\x6b\x1b\x6f\xe2\x89\x15\xfb\x65\xbf\x76\x74\xdc\xdc\xf8\x5d\x92\x9c\xcf\x1a\x9a\x1f\xf2\x3e\xe0\x0c\x87\x63\x09\x5d\xa6\x83\x90\x62\x00\xed\x23\x9b\x26\x70\xce\x0f\x54\x0d\x58\x8c\x8a\x22\x46\x87\x9e\x49\x8a\xf0\xef\xda\x9e\xd3\xd8\x5f\xbb\xdd\xdf\xee\xc2\xaa\x57\x8f\x72\x56\xab\xf1\x47\xd5\xc5\x0d\x4a\x50\xcf\x4b\x55\x69\x22\x73\x1b\x6e\x67\x29\xeb\x0c\x69\x79\xb5\xd2\xf1\xed\x89\x09\x03\xde\xbf\x7f\x3f\xb3\x68\x12\x11\x49\xf9\x86\x4d\x7d\x94\xe5\xe9\xec\x02\x59\xff\xf8\x6a\x6d\xcf\xa6\x85\xb2\xdf\xc8\xba\xe8\xc2\x91\xda\xeb\xab\xd4\x5b\x9e\xa7\x4e\xd3\x26\xa9\xb3\xdf\xb1\x2b\x3a\x59\x91\x62\x4c\xde\x44\xba\xa4\xb0\x86\xa4\x6b\x11\x50\x90\x6f\x91\x96\x8f\xf3\x86\x63\xf1\x0c\xc3\x18\x9c\xa8\x38\x81\xce\x21\xd1\xf5\x6c\x19\x48\x29\x34\xd0\xe5\x18\x8e\x2d\x7e\xd4\x7e\xd4\x26\x66\xf1\xce\x03\xd8\x79\xbc\xf6\xd7\xe9\x36\x65\x5d\xdc\xb2\xff\xbe\x5b\x93\xb6\xdf\xe8\xb3\xec\x05\x9d\x74\xf5\xd2\xd6\x5f\x36\x2c\xf8\xc1\xb3\x2c\x89\xef\x17\xbf\xc9\xbe\xb0\xf2\x8f\x0f\x72\xcd\xbb\x5e\x0e\x1f\x9b\xbb\xbe\x85\xaf\xa8\xfc\xe7\xbb\x2f\x92\xd2\xd9\xca\x5f\x0c\xbc\x61\xa5\xe0\xd2\x4b\x32\xda\x53\x32\xff\xd2\x51\x60\x19\x1a\xbf\xa1\x71\x97\x9c\xf6\xdd\x26\x8f\x0a\xfc\x94\xba\xa2\x96\x14\xea\x27\xa8\xc8\x82\x02\x06\x54\x05\x49\x56\xa4\x68\x86\xc4\x1a\x00\x70\x28\x60\x22\x9e\xf5\x81\x4d\x63\x0a\x45\x08\x9a\x83\x74\x4c\xf7\xa8\x80\xb5\x8d\xd8\x0d\xa6\xc4\xf6\xa0\xc7\xb3\x5e\x3b\x9f\x35\x1d\x43\xab\x45\xee\xbd\xfb\xfc\xd6\x8c\xdf\x33\xfc\x58\x1c\x95\xdd\x76\xb2\x42\xd7\x1b\x77\xf2\xa5\x6e\x72\x50\x6c\x3a\x1b\x6e\x71\x2c\x23\x09\x0a\xa4\x6d\x3c\x64\x15\xe4\x45\x00\x18\x98\x22\x11\x34\xb4\x91\x64\x68\x3e\x09\xa4\xc8\x08\x23\x28\xe0\x82\x87\x3c\x5e\x89\xc1\xfe\xdf\x5b\xfd\x42\xd9\x85\xf7\x9c\x1d\x6d\xfd\xaf\x51\xe9\x8f\x56\x57\xbc\x5e\xbf\xd0\xbc\xaa\x8b\xae\x5f\x14\x3a\x4d\x5a\xf4\xc5\x95\xde\x8b\xe2\x88\xa7\x32\x8c\xd0\x62\x0c\xcf\x57\x43\x4a\xd4\x1c\x92\x34\x1d\x9c\xe1\x15\xd2\xe1\x09\x05\x02\xc8\x01\x11\x40\xa8\x88\x92\x6c\x92\x36\x63\x13\x0a\x6b\x99\xc9\x3b\xd2\x1e\x57\xdf\x56\xe6\xe7\x6d\xec\xa7\xcd\xde\xf5\x6b\xd5\x37\xc7\xa8\x37\x37\x16\x3c\xd1\x8b\x1f\x1c\x72\x93\x9d\xfe\xa2\xab\xba\xb3\x4b\xea\x98\xb2\xb1\xfb\xb9\x15\x56\x83\x26\x1b\xc9\x14\x0c\x58\x5a\x8e\x10\x50\xe9\x00\x27\x91\x14\xea\x5e\x48\x08\x06\x34\x59\x9a\x92\x43\x56\xc0\x2c\xce\xd6\x1c\xcc\x62\xd4\x14\x70\x32\x6d\xfa\x56\x9a\xbf\x30\xeb\xb6\xd5\xa0\x4b\xd9\xa3\x69\x9e\x39\xf6\xcd\x2d\x8f\x89\x0c\xb3\x9e\x0c\x9f\xb9\x7d\x5c\xe5\xda\x6b\x53\x37\xaa\x20\x36\xff\x4e\xb1\x39\x9d\x71\x23\x07\x13\x78\x83\x76\x7c\x44\x42\x92\x63\x7c\xc2\x0e\x80\x14\x42\x36\x32\x28\x47\x27\x74\x41\x93\x90\xc7\x32\x9a\xad\xb0\x4c\x0c\x5c\x9f\xd7\x74\xc1\xfb\x9b\x4d\xa3\x1f\xf0\xc2\x25\x77\xed\x7c\x57\x71\xd0\x85\x9a\x8d\xd3\x1b\x9b\x3a\xfc\x91\x37\xe1\x39\xfe\x34\x5f\xf1\xb5\x71\xcc\x51\xda\x16\x65\xcb\xa2\x42\xe0\x6a\x64\x00\xc6\xc3\x44\x45\x08\x24\x0a\xb3\x58\x24\xd9\xb2\xc3\x6a\xaa\xcc\x78\x00\x71\x86\x22\xe1\x1a\x86\x34\xdf\x16\x62\x03\xc0\x2a\x8d\xbf\x53\x67\xdb\xb9\xcc\x4b\x35\x18\xf5\xfc\xa3\xf9\x85\xcf\xee\xee\x3d\x54\xe2\x58\xc7\xe9\x73\x5b\x2c\xdf\x93\xb7\x7e\xdd\xe7\x3f\xc6\xef\x84\x6d\x5f\xf1\x03\x96\x34\x05\xce\xe1\x91\xc7\xb3\x26\x8a\x74\xc5\xa5\x71\xc6\xa3\x4d\xce\xc7\x02\x16\x48\x3a\xe5\x99\x21\xf2\x19\x9b\xe2\x23\x4a\x02\x6c\xf2\x13\xee\x5b\x61\x5e\x97\xfc\xbd\xf6\x1e\xae\x34\x2d\x1f\xb6\xf8\x6d\x06\xf5\xee\xb8\x67\x1d\x33\x9e\x7f\x31\xa4\x30\x3b\xb2\x55\xba\xae\xe4\x84\x38\x56\xd5\xda\x8a\x24\x2b\x26\xa6\x30\x02\x1e\x50\x7e\x68\xe8\x66\x60\x4b\x9a\x2e\x42\x1b\x03\x08\xa3\x25\x9a\x96\x19\x97\x61\x7d\xcd\x8e\x2c\x5e\x75\xc4\xff\x18\xf6\xff\x7f\xdb\xfd\xa9\xd2\xa4\x1b\x9f\x29\xa5\x8f\xd6\xd9\x9a\x7f\xef\xe4\x9f\x8e\xcd\x28\x1c\x24\x7e\x5c\x7a\xfa\xfe\xcc\xbb\x8b\x57\x2f\x55\x72\xd4\xec\xd4\x35\x81\xc6\x0e\x6f\xe8\x11\xa4\x19\x41\xa0\x58\xcc\x36\xbc\x40\x57\x64\xca\x0b\x24\x91\x31\x95\xc0\xf3\x05\xdd\x73\x7c\x26\x20\x39\xd7\xd1\x0c\x52\xa5\x64\x1c\x33\x61\x0a\x38\xf0\x56\x72\xe9\x05\x53\xfa\x1d\xd8\xb0\xf5\xed\xa7\x9f\xed\x3d\x7a\xa5\x6f\xed\x3f\x38\x2d\x47\xb4\x38\xeb\x84\xfb\xd7\x17\x54\xde\xd1\x7c\x79\xfc\xae\x0d\x53\x55\x02\x19\xca\x1e\xa1\xd8\x84\x2f\x52\x51\x60\x07\x92\xca\x30\xac\x20\x69\x3e\x41\xda\x24\xb0\x05\x0b\x38\x98\x46\x06\x36\xc4\x74\x12\x21\x90\xc2\x2b\x68\xe6\x27\x9b\xa7\x4e\xed\xb0\x24\x51\xae\xb8\x2f\x51\xad\xbb\xf3\x41\x95\x8e\x6e\x11\x4c\xda\xb3\xe9\xc3\xc7\x83\xcb\x64\x38\x37\xf2\xd3\x38\xd6\x1e\xd1\x32\x8b\x91\xae\x81\x20\x63\xf0\xbe\x8f\xb9\x82\xec\x45\xbe\xa0\xda\x24\x41\xb3\x24\x6e\x04\x32\xae\x20\x4d\x75\x10\x62\x58\x35\xb4\x45\xd7\xd6\x92\xdb\xe1\xd5\xf3\x87\xce\xea\x5b\xea\x64\xcb\x05\xf9\xe7\xae\xeb\x7d\xbd\x4c\x86\xef\xb6\xb1\xad\xc6\x14\xcb\xe2\x9f\x6d\xb7\x3d\x6d\x5b\x78\x33\x8e\x53\x72\x89\x88\x51\x59\x15\x83\x8e\xed\x71\x1a\xcd\xab\x9a\x09\xc3\x90\xc4\x0c\x01\xd3\x22\x1a\x85\x80\x30\x09\x02\xd9\xb2\x86\x14\x60\x07\x38\xa9\x0b\x7f\x71\x29\x93\x63\x53\x33\x1f\x1c\x75\xeb\xf6\xb7\x99\xda\x6d\x4e\x57\xf7\xc4\xfa\xe8\x60\x96\xce\x1f\xbc\xe9\x53\x70\xfd\xf3\x9b\xd4\x21\xf5\xd4\xb8\x12\xbd\x98\xf8\x89\x82\x17\x22\x68\x87\x96\xc1\xe1\x94\xa5\x90\x84\x29\xb8\xa1\xcf\xaa\x36\x74\x7c\x84\x45\x8c\xa7\x38\x12\x10\x44\xcb\x09\x11\x30\x02\x55\x34\x18\x1c\x29\xc9\xad\x84\x76\x62\xf2\xa4\xd9\x2f\x9c\xcf\xab\x2d\xfc\xba\x9e\x93\xb6\x60\xbe\x89\xe7\x47\xb5\xec\xfe\x74\xfa\xfb\x8f\xc9\x11\x52\xad\x8b\xd9\xee\xc5\x4f\x10\x81\x42\x21\x88\x02\x48\x79\x8e\x09\x3d\xe4\x00\xcb\x33\x45\x2c\x52\x4c\x5c\x45\x96\x8f\x78\x41\x30\x68\x0f\xd3\x4c\xd2\x04\xaa\x47\x58\x96\x67\xa6\x90\x1c\xba\x61\xb5\x1c\x71\x61\xeb\xa4\x84\xef\x0f\x35\x3c\xb9\xe8\x6d\xdb\x5d\x9f\x35\x5a\x98\xeb\xfc\x37\x09\x23\x66\xdf\xee\xbf\x60\x42\xa6\x37\x75\xe2\xb7\x65\x8e\xb0\x25\xc1\x8b\x78\xdd\x0e\x5d\x46\x65\xa1\x04\x6c\xd2\xf0\x69\x46\x87\x8c\xec\x47\x91\x80\x11\xa2\x6e\x20\x9e\x85\xba\xad\x48\x01\xd4\x2d\xc5\x48\x81\x26\x33\xce\x58\x79\xac\xf8\xb9\x41\xe3\xc6\x8d\x18\xdd\xab\x46\xfe\xab\xcf\xbf\x6b\xf8\x6b\xb1\x2a\x45\x8a\x54\x79\xb4\xae\x6b\xd7\xdb\xc7\x3a\xdd\x49\xba\xba\xd2\xc7\xaf\x3e\x28\xdc\xe5\x54\xd4\xfe\xf5\xde\x41\xd8\xc4\x85\x1f\x96\xaf\xbe\xa4\x38\x7c\x7b\xa7\xe4\xd4\xa0\xff\xe6\xe1\x43\x13\xb3\x25\x11\x9c\x37\x7b\xca\x38\xd0\xfe\x1d\xf8\xb2\xd2\x17\x2f\xce\x37\x9e\xf2\x2a\x5a\x95\xe9\xe3\x9f\x4e\x75\x54\xaf\xdc\x2b\x3a\xb9\xe2\xf9\x13\x8f\xe2\x27\x38\xdd\x07\x36\x09\x75\x9d\x91\x91\x05\x20\xce\x2a\x82\x13\x88\x38\x6e\x32\x91\x64\x00\xcf\x30\x85\x48\xf5\x08\x0f\xf7\x68\x8e\xc4\x7c\x59\x15\x29\x39\x8c\xc1\x02\xea\xf7\x49\x31\x65\x13\xb1\x6c\xd4\xe3\x5f\x4e\xf7\xad\x37\xe7\xe1\x27\xa3\xb6\x16\x2e\xff\xc1\xca\x6f\xae\x34\x2d\xd5\xb3\x76\xb3\x34\x87\xe2\x48\x01\xa7\x81\x44\x0b\x8c\xa3\xca\xc0\x93\xb4\x88\xc1\xf5\x88\x47\x92\x61\x13\x91\xa8\xdb\x0a\x45\x59\xc8\x10\xf0\xc8\xb0\x7d\xce\x02\x8e\x11\xd0\x32\x48\xa1\xeb\xb9\xd3\xca\x0f\xf7\x7e\xcc\x63\x95\x2e\x66\x23\x7d\x71\x83\x5e\x7f\xc7\x91\x0b\xdb\x36\xdc\x7e\x3a\x2e\x9b\xe2\xcf\xfa\xb2\x67\xae\xd4\xf1\x22\x62\x67\x91\xa0\x85\x11\xb8\xef\xb3\x90\xf1\x39\x53\x33\x14\xc0\x18\x91\xe9\x90\x44\x18\x51\xae\x8b\xe9\x82\xe1\x47\xb4\x4e\x87\x24\xe3\x7a\x04\x19\x32\x98\xac\xa6\x20\xb8\x23\xcd\x0a\xbd\x7f\x35\x6f\xf9\xf4\x36\x09\x7f\xb6\x18\xd5\x65\xaf\xbc\xb4\xc8\xed\x46\x73\x8e\x9f\x6b\x5c\xe8\xfa\xc4\xcf\xd2\x51\xc5\xb0\xa4\xab\x4f\xdf\xd2\xfa\xd8\x4f\x4e\xde\xcb\x32\xaf\x59\xeb\xa8\xd1\x21\xdb\xfd\xa3\x55\xcb\x1d\xb5\x8f\xad\x79\xbe\x7a\xd3\xfc\x7d\xef\x12\xeb\x24\x5d\x7d\xe6\x07\x33\x77\xde\xec\xdb\x97\x1f\xba\x93\x2f\x07\x7b\x7a\x66\x79\xbd\x97\xec\xee\xbe\x2f\x75\x1f\xff\xe7\x9c\x0c\xab\x88\xdb\x6c\xd2\xd5\xdc\x88\xdf\x6f\x8f\xf9\xac\x66\x96\xad\xc5\x26\x97\xcd\x7e\xe0\xfd\xa4\x5f\xdd\x3a\x5a\x9d\x4c\x1b\xe7\x5d\xe9\xf0\xa6\xfd\xed\xd6\xeb\xa3\xa4\xab\xb7\x97\x39\xbc\x68\x4c\xa6\x65\x63\xfb\x7f\xd9\xe7\xa6\xf5\x34\xed\x0a\xf5\xa2\xf3\x06\xb4\x5b\x32\x24\xf2\xe5\x3e\xfd\xdd\x91\xa3\x92\xae\x9e\x5d\x74\xef\xef\xfb\x7e\x5f\x55\x76\x48\x42\xd7\xba\x09\xe6\xfe\xbe\xf7\xc1\x80\xa6\x2b\x72\x34\x9f\xf1\x79\x8b\xcc\x69\x27\xef\x19\x35\x2e\xe9\xea\x5a\xad\x96\xe5\xad\x39\x30\x3c\x67\x9d\x3a\x32\x28\xfd\x1a\xf6\xd7\x97\x1d\x46\xbd\xb5\xf6\x2f\xf0\x0a\x16\x52\x96\xbf\xbb\x54\x77\x5f\x12\x6f\xaf\xc6\xe7\x53\xfe\x78\x66\xf7\x7c\xd1\xf3\x90\xd0\xb8\x51\x8f\x46\xb7\x6e\xf3\x97\xc6\x2d\x9e\x40\xa7\xc5\x9e\x7f\x5d\x73\xe7\xaf\x03\xb6\xc7\xcf\x1f\xa1\x44\xdc\x35\x44\x83\x70\x10\xa3\x03\x8f\x32\x2d\x39\xb2\x68\x40\x87\x61\x48\x32\xa2\x08\x14\x83\x24\x01\x85\xd9\xd0\xf7\x5d\x97\x22\x7c\x1a\x46\x6a\xf2\x9b\x72\x3d\xfe\x43\xef\x1f\x72\x1f\x2a\x57\xe8\xed\x25\xb8\xb4\xf2\xe9\x5f\x57\x7c\x7a\xb6\x78\xd5\xee\x75\x7e\xf2\x1a\xef\x2a\x31\xf8\xf5\x08\x3e\x8e\x2f\x7a\x1e\x79\x26\xa3\x72\x94\x28\x63\x21\x8b\x4c\x8f\x65\x22\x59\x34\x4d\x27\x42\x2c\x92\x24\xc4\x00\x24\x30\x82\xee\xf2\x00\xc3\x58\x8a\xe3\x49\x59\x49\xee\xed\xbd\x5c\x50\xa9\xf0\xb4\xc7\x37\xf9\x09\xaf\xd2\x0d\xcd\xf6\x7d\xa3\xc1\x25\xfa\x9e\x8c\x16\x8f\x3e\xbe\xff\xd6\x5a\xaa\xe2\xcc\x6b\xa8\x5a\x1c\x09\x25\x14\xb2\x0d\x21\x54\xf8\xd0\x33\x01\x08\x71\x4a\xb3\x71\x26\xa0\x30\xd2\x57\x49\x4d\xa6\x38\xd1\x43\x5c\x68\x88\x3e\x03\x2c\x85\x56\xbd\x40\x64\xe8\x14\x3e\xa9\xcd\xbb\x2b\x1d\xef\x5b\x63\xe3\xd6\x6a\x6d\xff\xf8\x30\xef\x1f\x75\x89\xd9\x3d\xbf\xec\x7e\x64\x7e\x8f\x9b\x0f\x7b\xd9\x8d\x66\xfc\x7a\x77\x65\x12\xf9\x7c\xf5\xf5\xef\x4f\x6b\x35\xed\x3f\xad\xdc\x95\xa7\xf9\xbc\x56\x6b\xf2\xca\xb0\xd3\x92\x9f\xb5\xd9\x93\xaf\x5c\xec\x57\xb3\xf8\xb3\x97\x67\xe3\xe8\x1b\x52\x08\xba\x8c\x23\x4a\x5c\x18\x89\x9c\xa4\x1b\x52\x40\xd0\x5c\xa4\xf2\xbe\xa0\x89\x9a\x6b\x10\x7c\x88\xe9\x4c\x28\xc8\xae\xe0\xca\x38\x4f\x2b\x36\x93\xdc\x2a\x9f\x19\x7b\xe0\x93\xbe\xd7\x9a\x6d\x1f\x9d\x8b\x1b\xfe\x53\x55\xa7\x96\x97\x63\xc7\x8e\x07\x93\xd7\x67\x5c\xb2\xe1\xdb\xf3\x19\x7b\x88\x2b\xe2\x78\xa7\x1a\xb6\x8b\xb3\xa2\xca\x92\x1c\xcf\x41\x55\x52\x0c\x49\xd5\x15\x09\x60\x92\x82\x44\x0a\xb7\x68\x5f\x73\x59\xc5\xc0\x48\xe8\x8b\x21\x03\x43\xe3\x2f\xc4\x56\x52\xb5\x5f\x46\x33\x27\xae\xfb\xb1\xd5\xf6\x65\x75\x56\x86\xdf\xdc\x2c\x60\xec\x9f\x95\xff\x62\xf3\x1c\xa5\x1a\x0d\x4b\xdc\xf3\xf9\x6f\xe3\xfa\x64\x88\x23\xed\x03\x93\x78\x5e\x92\x7c\xd9\xe0\x58\x9d\x36\xf0\x50\xa3\xfd\xc8\x8e\x78\x0a\x8f\x28\x14\xca\x16\xa3\x73\x0c\xcf\x73\x94\xa7\x68\x46\x80\xdb\x01\x82\x29\xc1\x48\xb7\x2d\x9a\x7e\x6d\x6b\x54\x32\xdf\x8e\xf9\x72\xd5\x99\xf3\x2a\x54\xff\xc5\xf3\x7f\x5a\x7d\x62\x5f\x9f\xfb\x59\x8f\x36\x6e\x5c\xa0\x9d\x9e\xe4\x52\xb7\xba\xcf\x9c\x33\xe0\xe5\x89\x19\xed\x9a\xf6\xd9\xb0\xa8\x59\xaf\xfd\xdd\x9a\x04\xbd\x86\xcf\x6b\x58\x5a\xcc\x7c\x70\xed\x9e\x4e\x5a\xea\x60\xa4\xb1\xe9\x9e\x16\x8e\x41\x95\xf5\x45\x51\xf0\x74\x0e\x06\x51\xa8\x69\x48\x72\x5c\xd5\x46\x84\x61\x69\x4a\xc0\x72\x4a\x18\x42\x45\xc3\x6d\x1e\xd2\xd0\x05\x66\x0c\x20\xd7\x92\x26\x5f\x54\x18\xce\x95\x7b\x36\xe2\xd1\xc7\x1d\xa7\xee\xad\xfc\x6a\x73\xc7\xdc\x93\x2e\x07\x79\x3a\x65\x87\xb3\x87\x6d\xcc\xfd\x26\x75\x2c\xdb\x98\x6a\xf7\x08\x5c\xc2\x90\x6c\x72\x1c\x67\xc9\xba\x4e\xd2\x5a\x20\xb3\xd0\xf5\x0c\xc3\x16\x49\xd6\x0f\xcc\xc0\x35\x2d\x8a\xf1\x22\x9b\xb6\x69\x55\x70\x3c\xc6\x89\xfd\x12\x6a\x5e\x56\xc4\x7b\x66\xba\x36\x7a\x74\xff\x74\xb5\xec\xf4\x6f\x0e\x8e\x09\xf2\x9e\x58\xd8\xe6\xf0\x2e\xfc\xb7\xcc\xe5\x2a\x7f\x71\x32\x75\x12\x8a\x1d\xe2\xd1\x05\x56\xf7\xe8\x08\xe7\x75\x91\x96\x54\x3b\x32\x35\x9b\x75\x44\x8d\xa1\x42\x3d\xd0\x75\xc7\x8d\x22\x19\x18\x9a\xcf\x08\x56\x68\xfb\x2e\x6b\x00\x2a\xf9\x09\xbf\x68\x31\x76\x54\xa5\xbc\x68\xcb\x80\xf6\x99\xef\xdc\xc1\x9f\xe7\x5f\x3d\x12\x5c\x6d\x9e\x4b\x5b\x35\x6c\xc2\xac\x1a\xd3\x5b\x95\x8d\xdf\x38\x3e\x16\xd9\x24\x41\x00\x83\x65\x49\x56\xf4\x54\x91\xd7\x15\x82\x71\x28\xdc\xb3\x54\x05\xf9\x64\x44\x10\x06\x4f\x93\x2e\x6f\x21\x9c\x21\x71\x45\x23\x31\x8c\x8a\xed\x36\xdd\xcb\x73\xb1\xcb\x9e\x55\xa3\xcb\xcf\xc8\x92\xe3\x7c\x63\xa7\xc9\xb6\xfe\x6d\x8b\x0f\x5d\x6e\x55\x38\x4d\xbd\xd8\xfb\x70\x68\xd5\xb4\xa9\x43\xd2\xc7\x14\x85\x2c\x51\x51\xa0\x07\x1e\x8e\x87\x16\x64\x79\x15\x0f\x59\x81\x55\x5d\x45\xc1\xe4\x50\x10\x1c\x9c\x04\x02\xed\x40\x85\x21\x78\xc1\x84\x9a\x20\x5b\xa1\x1b\x3b\xaa\xda\x2b\xff\xea\xaf\x56\x5e\xac\x77\xfd\x7d\x7a\xe9\xf5\xac\x1e\x76\x8b\x36\xd7\xdf\xbf\x7e\xda\x34\x43\x0e\xd8\xe2\x79\xa9\x7e\xbf\xb6\xda\x19\xc7\x30\x65\x20\x13\x2e\x13\x45\x74\x14\x40\xc0\x31\x3e\xe9\x20\x4f\x65\x5c\x91\x72\x59\x20\x61\x8c\x0c\x81\x17\x62\x01\x87\x02\x87\xb6\x31\xda\x25\x68\x07\x25\x17\x45\xef\x02\x93\x26\x56\xbe\xf7\x41\xf9\x6a\xf5\x1e\xb7\x5a\x93\xc5\x6d\xf3\xa6\x49\xd9\xfc\x77\x9a\x95\x33\xd5\x27\xc7\x07\xe4\x2f\x7c\xad\x50\xfc\x44\xe1\xca\x20\x14\x3d\x95\xf3\x49\x15\x8b\x0c\x0a\xa8\x16\xd4\xa1\x64\x46\x1c\x2f\xb2\x2c\x50\x45\xc5\xa7\x58\xcd\x51\x2c\xa0\x50\x86\x68\x40\x5c\x94\x51\xf2\x4b\x7f\x45\xfb\xb5\x39\xf0\x42\x2f\xe8\xa1\xed\x59\x3a\x5f\x99\x9a\xcb\xf6\xa4\xed\x7d\xaa\x41\x90\xfb\xd6\xdd\xae\xc3\x7e\xce\xf1\xbb\x9f\x3a\xa6\x78\xcc\xed\x7a\x48\xd0\x55\x1e\x53\x38\x45\x94\x79\x04\x78\x55\xa6\x1c\xe0\xfb\xae\x88\x2b\x18\x17\x60\x88\x30\x01\x41\x08\x98\x6f\x7a\x42\x40\x88\x0c\xa7\x86\x5e\x32\x70\xd6\x3f\xe5\x1b\x12\x13\x8a\x0f\x4d\x93\x2b\x69\xef\x68\x27\x6e\xff\xe3\x1c\x39\x72\x1f\x51\x96\x5c\x2d\x90\xbf\x57\x16\x71\xcc\x9a\xee\xd9\xa7\x27\x2c\x3d\xf4\xf0\xd3\x43\x5f\x56\xee\x59\x6f\x48\xfc\x8c\x8a\x4e\x21\x9b\xc5\x65\x05\xa7\x64\x5d\x36\xf1\x08\xd0\x2c\xe7\x33\x81\xc2\x87\xb4\x4c\xb0\xb2\xee\x69\xb4\x11\x50\xba\xe4\xab\x21\xe6\xc9\x84\x45\xa3\x14\x82\x58\x21\x09\x73\x0d\xf8\x69\xe8\xf2\x34\x05\xd2\x2e\xf9\x0e\x7d\xa0\xaf\x19\xb9\x56\x5c\x68\xf9\xc6\xd3\x0d\x39\x7b\x3c\xcb\x72\x69\x76\x1c\x1d\x47\x39\xc4\x23\xd5\x60\x51\x24\x05\x41\x10\xaa\xbe\xc2\x08\x0c\x1b\x5a\x61\x28\x6a\xb2\xab\xe2\x8a\xe5\x4b\xa2\x86\x42\x8c\x31\x48\xc9\x8a\x70\xcf\xf2\x62\x1b\x96\xa3\xe6\x93\x5b\xbf\x55\x49\x54\xff\xbc\xd6\xfc\xda\xb9\xeb\x47\x57\xd6\xa1\x0f\x96\xdc\xdc\x8b\xfe\xbc\xf5\xc9\x84\xcf\xde\x52\xf5\xe3\x38\x86\xcf\x85\xbc\x66\x7b\xa2\xc3\x03\x5a\x64\x3d\xc0\xe1\x84\x88\xeb\x82\xe6\x21\x57\x60\xa1\x68\xd1\x81\x89\xfb\x8a\x13\x19\x11\x45\x79\xa6\x60\x04\xa4\x25\xc7\x3e\xe5\x23\xc3\x96\x14\x6e\x39\xf5\xe3\x8c\x75\x57\x3c\xfa\xf1\xd3\x25\xad\xe9\xa9\x8f\x7b\x90\xaf\xd3\xb7\xaa\xfd\xb8\xcc\xdd\x86\xcd\x07\x9a\x83\xe2\x77\xca\x18\x21\xe1\x86\x6b\x44\x88\x8c\xb8\x90\xe1\x71\xcd\x87\x21\x64\x75\x59\x08\x22\x52\xc3\x31\xc6\xe4\x69\x89\x81\x38\xe0\x2c\x83\x60\x35\x07\x8a\x7f\xd5\x4e\x26\x91\xfe\x3f\x25\xcf\x12\x13\xb2\x0c\xca\xf2\x5f\xd2\xdf\xbd\x7a\xe9\xe8\x9b\x62\xa1\xa3\x1f\xf4\x9f\xb5\x63\xe6\x99\xeb\x1d\x0f\xac\xf8\xbe\xe1\xea\x81\xc7\xae\x5f\xc6\x47\xde\x68\xda\xba\x45\xfc\x9a\xd7\x18\x52\xd7\x03\x18\x90\xb2\xeb\x49\x96\x2b\x72\x86\xc1\x06\x82\x87\xdb\xb6\xaf\x91\x2a\xf2\x34\x47\x67\x43\x43\xf1\x2d\x5f\xd3\x34\x5e\xd1\x28\x64\x33\x44\xec\x3f\x65\xf7\x3b\x2e\x58\x94\xf6\xb3\x3e\x15\x47\x1e\xf9\x73\x79\xc7\x2e\xbf\x3c\xa9\x9b\x7d\x44\x9b\x0d\xda\xd5\xba\xbb\xce\xbf\x4a\xf3\xb6\xc7\xee\x38\x02\x49\x80\x4b\xe9\xa1\xaa\x05\xa4\x49\xa9\xac\x65\x91\x0a\x43\x86\x3c\x6d\x13\x84\xca\xd2\x8e\xa0\x02\x99\xa0\x15\xdd\x37\x29\x15\x53\x20\x07\x29\x1e\x4b\x01\x48\xe2\xd7\x7f\xd0\xa6\x67\xa7\xeb\x43\xc6\x9c\xf8\x9e\x78\x54\xbf\xdb\xa1\x53\x87\x56\x70\xb5\x4b\x0a\x6b\xb2\x4f\xea\x5e\xba\x8a\xfb\x2a\x6b\xfc\x74\x64\xd9\xc8\xb7\x18\x9c\x25\x6d\xe8\xb2\xba\xea\x9a\x91\xcd\x20\x17\x11\x84\xa7\xd3\x98\xc7\x61\x06\xe7\xab\x2a\xcd\xd2\xb2\x6a\xe3\x2a\x2b\x2b\x11\x9b\x02\x99\xaf\x57\xd7\x9a\x66\x82\xf5\xfb\x9e\x3d\x95\x3a\x2c\xcf\xe4\x6e\x7a\xd0\xe0\xe0\xca\xbc\x47\xeb\xdc\xfd\x09\x95\xdb\xff\x51\xba\xe9\xcc\xe9\xf8\x09\x83\xb7\x3c\x8c\xb0\x6d\x51\xc2\x65\xd5\x27\x05\x9b\xa5\x24\xc0\x60\xb4\x2c\x8a\x3a\x01\x78\x92\xd2\x64\x84\x7b\x1e\x16\xd8\x38\x4b\x43\x21\xd0\x18\xfb\xef\xfe\x96\x87\x19\xff\xb7\x40\x5d\x62\xc2\xa0\x34\x69\xd3\x24\x26\x71\x25\xab\x0e\xf9\xf4\xf4\xb7\x1d\x6b\xee\xaa\x50\x3c\x73\xf7\xfc\xbc\xb6\x2f\x5d\x0d\x6f\x59\x3f\xba\x79\x8e\x39\x37\xf6\x57\xaf\x32\xbe\xf9\xf8\x38\x22\x57\x1c\x0e\x69\x2e\x65\x41\x46\x0e\x6c\x03\x17\x2d\x06\x43\x50\x05\xa1\xc6\x8b\x0e\xc2\x14\x52\x94\xa0\xae\xf3\x22\x2d\x5a\x9e\x87\x49\x00\x73\xc2\x18\x41\xf5\x71\x4b\x5b\x19\x69\x3f\x19\xf8\xfa\xdc\xc4\x6d\x72\x8b\x16\x47\x8f\x19\x1f\xce\xb8\x9b\x4b\x2e\xe7\x47\x9d\x33\x9d\xa0\x8a\x37\x4e\x9d\x2d\x8a\xf9\x87\x00\xcf\xd2\x6c\xc6\x96\xa1\xaa\xb2\x12\x07\x05\xc3\xa0\x20\xa7\x22\xc2\x80\x88\xe3\x64\xdd\x91\x34\x49\x35\x38\x41\x62\x48\xa4\x19\x88\xc0\x25\x5b\x8c\x9d\xdc\x64\x86\x7e\xf5\x43\xc6\x09\xd9\xa6\x7e\x32\xed\x75\x31\xff\xcc\xfb\x85\xb5\xa6\x74\xca\x7b\x72\x4a\xbd\xf4\x5f\x6d\x3d\xb7\x2a\x67\xbd\xeb\xf9\xe3\x77\xc2\x12\x8e\x3c\x5d\x22\x42\x18\xd0\x96\x87\xa9\x84\xef\x60\xaa\xc6\x1b\xac\xac\xe1\x7e\x64\x11\xba\x03\x22\xdb\x96\x1d\x96\x62\x43\x85\x20\xa0\xcd\x23\x3d\xf9\x09\x8f\xfc\xf0\xca\xe3\x5f\xec\xa2\x73\x47\x8d\xcd\x3a\xa0\x46\xe2\xdc\x8a\x41\xf5\xde\x86\x78\x6c\xff\xf1\x52\x8f\x13\x17\xd6\x59\x35\x33\x8e\xa4\x23\x81\xe5\x50\x10\x9a\x0e\x11\xb2\xa1\x6c\x6a\x04\x1b\x12\x9e\x46\xe0\x96\xc5\x11\x2c\xc2\x8d\x90\x53\x69\x87\x37\x29\x2f\x12\x04\x59\x41\x12\x4d\x63\x7f\x17\xb2\x3e\xcd\xf8\xbf\x45\x9b\xff\x25\xf9\xe2\x59\x86\x24\xf9\x43\xf2\xc3\x5f\x4f\x6f\xfe\xe1\x8d\xf2\xfc\x3c\xf3\xdb\xc1\x63\x69\x76\x7f\xf8\xa0\xd8\xd5\x9f\x17\xaa\x3b\x2f\xb7\x7e\xf9\xc9\xd9\x2b\xd3\xe2\x38\x18\xd1\x0a\x23\x4a\xc6\x1c\x93\x66\x6c\xd2\x96\x88\xd0\xa6\x68\xd6\xd4\x70\x45\x62\x39\xd1\xa7\x38\xc2\x31\x2c\x81\xe3\x38\xde\x12\x30\x42\x53\x42\x97\xb3\x62\x10\xc4\x4b\xdf\xfe\xf5\x6a\xa3\x5e\x6b\x9b\x1f\x2c\x37\x7f\xc4\xd2\x31\x93\xc3\xf7\x25\xfe\x78\xff\x59\x1b\xf2\x45\x9b\x37\x5a\xe5\x2d\xbb\x41\xfc\xea\xbc\x58\x88\x04\xcc\x65\x4d\x8d\xc0\x50\x60\x0b\x14\x74\x39\x24\x28\x30\x72\x94\x7f\xfd\x06\x4b\xd5\x70\x5a\x81\x94\x42\xe1\x9c\x48\x28\x86\x21\x0a\x62\x94\x02\x14\xe9\xe1\xae\x9e\xd9\x9a\x54\x18\x99\x6f\xed\x6b\xbb\xc6\x47\xcd\x3f\xa8\x5c\x77\x50\xfa\x6c\x83\x55\xee\xe3\x1d\xad\x6a\x97\x6b\xd3\x66\x44\xfc\x34\xc4\x9a\x22\x24\x78\x52\x70\x4c\x8f\xd7\x7d\x68\x80\x00\xb7\x61\x60\x86\xb8\x4e\x58\x12\x19\x88\x8a\x41\x07\x1a\x1d\x30\x40\xf4\x68\xd7\x8f\x34\x49\xfe\xab\x54\x37\xf9\xe5\x34\x1b\x9f\x5b\xff\xcb\x47\xed\x5b\xb8\x37\x2f\xd7\x1d\x9d\x65\x46\x99\x0f\x26\xd8\x95\xfb\x71\x0d\x8b\xec\xcb\xdc\xad\xf4\x8a\xa5\x95\xe3\x97\x71\x66\x6c\x49\x86\x34\xa5\xd0\x8c\x00\xa0\xe0\x39\xbe\x2d\x6a\x18\x46\x22\x1a\x18\x91\x69\xda\x3e\x69\x29\x92\xac\xba\xac\x22\x8b\x16\x8b\x45\x92\x6b\x60\x7f\x53\x1d\xff\x2d\xfb\x7f\x8a\x90\x27\x26\x74\x48\x53\x3c\xcd\x90\xa4\x73\xfc\x0f\xdf\xed\x78\x15\x64\xce\xcc\x0d\x1d\xde\xbe\xc2\xb8\x4d\xef\x56\x6f\x5f\xd6\x11\x1d\xf7\x9f\x9c\x7a\xfa\xf5\xe3\xc2\x03\xbf\xeb\x1d\x47\x2c\x12\x61\x9b\x3c\xf4\xa9\x40\x0a\x05\x93\x96\x49\x8e\xf2\x70\x09\x83\x24\xb0\x5c\x87\xd5\x31\x8b\xf0\x14\x8e\xa2\xbd\xc8\xe5\x02\x08\x74\x0b\x0b\x80\x18\xfb\xfa\x7d\xfa\x70\xcc\xad\x0e\xf7\xe6\x89\xd6\xde\x72\xe4\xca\x9b\x8f\x72\x8e\xd8\xbe\xde\x68\x3c\xf2\x65\xb0\x77\xa4\xd6\x6f\xc6\xf7\xf3\xe2\x57\x28\xc4\x44\x06\xce\x20\xdc\xa7\x0d\x43\x71\x78\xd2\x25\x78\xca\x45\x22\x74\xc2\x10\x86\x1c\x45\xbb\x08\xe0\x0a\xc1\xd3\xaa\xa4\xd1\x01\xe1\x89\x16\x84\x98\x1b\x3b\x34\x93\xbd\xce\x85\x13\x5c\x54\x74\x7f\x67\x21\xb1\xf6\xb2\x26\x7e\xa3\xe7\x4f\x87\x74\xbc\x3b\xa5\x51\xfe\x01\x6d\xbb\x3f\x7d\x59\x97\x1d\x18\xc7\x24\xb5\xec\x21\x4f\xc2\x14\x19\xf8\x9c\x62\x71\x1a\x4f\x39\xaa\x66\x29\x4c\x80\xdc\x90\x35\x70\xd5\xd5\x7c\x8b\xc2\x38\x4b\x0e\x0c\x4b\xc3\x68\xd3\x47\x31\x26\x23\xad\x98\x78\xe2\x4f\xf5\x23\xa6\xd9\xd8\xad\xbb\xe6\xb4\x7d\x2b\xb4\x6f\x56\xa9\x7d\xdd\x84\x5a\xfb\xea\xe3\x66\x93\x9b\x15\x6f\x1f\x6f\x15\x3f\x51\x18\x92\xa4\x13\x0e\x67\xc8\xbc\xfe\x57\xf3\x3d\x11\x29\x16\x49\x20\x87\xc6\x48\x56\xf6\x70\x49\xc7\x00\x30\x03\x83\x73\x19\xd3\x46\x9c\x8c\x81\xbf\x09\x01\x4f\x32\xfe\x6f\xa9\x9e\xc4\x26\x07\xd2\xfc\x97\xea\x3f\x79\x5a\xaa\xec\x9a\xd1\x05\x4b\x7e\x50\x66\xfc\x89\x1f\xc0\xb8\x51\x27\x1e\x7f\xf5\x45\x56\xa7\xfd\x3b\x6c\x7c\xb5\x46\xb3\x8a\x0e\x8e\x9f\xea\x59\x8f\x51\x2c\xe8\x0a\x40\xd4\x71\xe8\x07\x24\x66\x79\x36\x69\x38\x26\xc6\xba\xa4\xe0\x4a\x96\x2e\xc9\x98\xa9\x68\x32\xc0\x08\x3f\x34\x02\xc2\x55\xed\x14\x60\x60\xed\x77\xcd\x2b\xdf\xea\xc2\xf6\x6e\x39\x8b\x49\x74\xe6\x41\xed\x46\xe5\x3c\x91\xd8\x9a\x1c\x8f\xc6\x94\xd8\x52\xeb\xd3\x6b\x9b\xd7\x36\x8a\xdf\x7f\x12\xe1\xa6\x6c\x05\x52\xe4\x45\x34\x92\x03\xc7\x57\x5d\x5f\xa7\x70\x5b\x93\x43\x8e\x8d\x08\x8b\x22\x65\xdc\xf0\x39\x85\x64\x38\x93\x0a\x29\x37\x72\x31\x39\x76\xe1\x40\xa6\xbb\x64\x89\xe6\xd9\xc2\x9a\x60\x3c\xec\x7f\xfc\xce\xac\x75\x8f\xa4\x6e\x03\xa2\xa1\x8d\xbe\x7a\x3a\xa5\x40\xd1\x2d\x69\x26\xa4\x0e\x06\x16\xf3\x43\xa5\x59\x82\x76\x3c\x8e\xb5\x38\x4a\xd7\x05\x1f\x5a\xc8\x04\x32\x72\x30\x55\x77\x71\xdb\x85\x9e\xca\xd9\x3c\x27\xa8\x8c\x45\x73\x3c\x2d\x52\x9c\x8e\xc5\xa8\x92\x7d\x82\x0d\x6e\x6a\xbf\xba\x5c\x7b\xc2\xe5\xca\x77\xe1\xe9\x9a\x1a\x71\x35\x57\x53\xf0\x78\x59\xaf\xdb\x77\xd3\xcf\xad\x7f\xf3\x7d\xc7\x38\x3e\x9e\x48\x9d\x02\xbe\x66\x69\xac\x17\xd0\x8a\xcf\x5b\x1a\xe0\x7d\x04\x64\xcc\x50\x09\xd9\x31\x30\xd5\xa7\xa0\xeb\x31\x4c\x44\x8b\x8e\x17\x61\x96\x84\x29\xc9\xfa\x1d\xff\x29\x65\x99\x98\x30\x28\xc7\xa0\x92\x49\x9b\x1c\x06\xbd\x1c\xbc\x0a\x9b\x5b\xff\xec\x98\x95\xfb\x87\x6e\x28\xb9\xf7\xab\xef\xef\x14\xa8\xb9\xe8\x79\xb7\xe6\x25\x16\x6c\x34\x72\xaa\x7b\x53\x07\x29\x8e\x79\x03\x33\x3c\x89\x39\xb8\xed\x47\x8e\x0a\x68\x18\x11\x91\xcc\x21\x1f\x70\x9e\x84\x7b\x04\x4f\xcb\x12\x13\x71\x92\x09\x04\xc6\x82\x11\x64\x09\x97\x34\x98\x14\xea\xd9\xdf\x1c\xbf\xf3\xaa\xd7\xac\xfa\xeb\x27\xfe\x79\x7c\xf3\xdb\x1a\xb7\xab\x7e\xbf\x6d\xe3\xcb\x1b\xbf\xcb\x6f\x5f\x35\x99\x76\xee\xe1\x39\xff\x7c\xfc\x2c\xa7\x22\x7b\x0c\xa5\xbb\x88\x04\x11\xc1\xb8\x0e\x8d\x18\x1f\x78\x01\xe3\x1b\x96\xc2\x07\xaa\x10\x7a\x34\x92\x69\xcc\x44\xb8\xe8\x42\x5c\x8a\x5c\x0d\x83\xb1\xfd\x9c\xac\xb9\xd7\x3b\x3f\x3a\xc5\x9a\x9f\x38\xde\x7b\xca\x8f\x83\x0e\xbf\x8c\x36\x0d\x6e\xe8\xcc\x5e\x38\xbe\xdd\x89\x66\x6f\xeb\x0e\xcb\x10\xc7\xbe\x0c\x56\x52\x35\x93\x65\x05\x99\x88\x24\x9d\x31\x01\x66\xb2\x3e\xa9\x42\x13\x03\x88\xc3\x3d\x12\x50\xd0\x52\x90\xa8\x8a\xae\x1f\x89\x3a\x24\x2c\x32\x52\x62\x9f\x72\xcf\x29\x7f\x0e\xce\x99\xad\x77\xb5\x62\xdf\x17\x1d\xd0\xf8\xe4\x98\x82\xb3\xd8\xc4\x7b\xc3\x5a\xff\x5a\xab\xcc\xf0\x4c\x78\xee\x7a\x73\x53\xc7\x08\x8f\xed\xe7\x38\xa6\xc0\x02\x57\xf5\x3d\x07\x23\x7d\x8a\x70\x88\xc8\x47\xa4\x23\xd3\x30\x02\x8e\xe4\xba\xa6\x47\x32\x8a\x07\x2d\x02\xa3\xa1\xcd\xab\x9e\x8e\xb3\xb1\xed\xe1\x1f\x37\xbf\x9c\xfc\x5d\xa1\xce\x9d\x0a\x2e\x28\x58\xa1\x5e\xfd\xa3\x6b\x8b\x75\xab\xf1\xb6\xc0\xbe\x4d\xfb\x31\xe9\x09\xf8\x05\xef\x79\x22\x7e\xc2\x30\x39\x81\xb0\x20\x70\x6d\x2d\x0c\x5c\x99\x90\x71\x32\x90\x00\x2b\x79\x9e\xa3\x99\x61\x18\x71\xbe\x4a\x10\x50\xb1\x54\xd5\x52\x23\x01\xca\xa1\x9e\x12\x64\x62\x50\xb5\xbb\xe3\x1b\x4e\x2c\xbb\xb1\xef\x99\x97\xd3\xd3\x94\x1e\x3f\x2e\x5c\x72\xcf\x9b\x7f\xbd\xed\xba\xaa\x73\x8f\xc0\xbb\xb5\x96\xac\x8c\x9f\x81\x61\x9d\xc8\x22\x23\x11\xb7\x25\x25\x12\x44\xa0\xe8\x14\x80\x9c\x2c\x44\xa6\xce\x52\x14\x52\x30\x96\x25\x74\x52\xd0\x6d\x56\xb2\x71\x86\x83\x86\xf6\x1f\x13\x28\xff\x1d\x32\xfb\xa7\x2a\x87\xc4\x84\x41\x69\xd3\x36\x4c\x1a\x32\xfb\x09\x6f\x55\xa7\x6f\xd1\xd6\x4b\xe1\x8e\x59\x35\x4e\xa5\xe9\xde\x6d\xe3\xa1\xfd\x13\xe5\x0e\x43\xbe\xae\xc0\xed\xe8\x3b\xf2\x15\x9e\x3a\xc7\x21\xe6\x2f\x54\x1d\x1f\x58\x41\x08\x20\x2b\xd0\x72\x68\x30\x2c\x4f\xf3\x08\x0a\x02\x22\x05\x43\x15\x20\x40\x22\x52\x7d\x51\xe7\x02\x49\x51\x23\x4b\x56\x11\x93\x42\x43\xf5\x9a\xeb\x62\xb1\x56\x43\x1e\x3a\x53\xd9\xa5\x2b\x0f\x0e\x48\xdc\x7c\xe4\x6c\xb9\xdf\x07\x34\xab\xb9\x7b\xdb\x9d\x39\xaf\xbb\x7c\x23\xa5\x8e\x20\x13\xf3\x21\x65\x49\xba\xe4\x19\x1e\xe7\xaa\x9c\x84\x0c\x5b\xe7\x69\x82\xa1\x55\x9d\xb4\x59\xd3\xc4\x4d\xe2\xff\x27\x7d\x58\x9f\x15\x44\x40\x99\x96\xe3\x48\x3c\x12\x62\xeb\x28\xcb\x4f\x33\x2b\x75\xfe\xae\x6a\x7a\xec\x60\xa7\x4d\x97\xbe\x7b\xd3\x06\xeb\xda\x72\xcc\xc5\xe1\x15\x07\x57\x59\x51\xe3\x6b\x29\xfd\x17\xa9\xf3\x5e\x62\x1a\x98\x20\xc4\x68\x08\x22\x28\x49\xa1\x62\xea\x7a\x44\x13\x8c\xad\xbb\x64\xa4\x00\x9a\x0d\x58\x46\x66\x48\xcf\x23\x45\x2c\x84\x1c\x22\x89\x50\x83\x3c\x00\xb1\x4f\xb9\xe1\x96\x1e\x57\x0b\x95\xbb\x3a\xf6\xc3\x1f\xd6\x77\xbe\x7e\x7e\x76\xb8\xbf\xc7\x5b\xf6\xdd\xc6\x30\xfd\x74\xf3\xe6\xd3\x7b\x73\x0a\xc4\xf1\x6e\x0d\x4d\x91\xc1\xed\xd0\xd3\x4d\x33\xb2\x7c\x9a\x04\x01\x6d\x92\x16\xc1\x13\xbe\x26\x59\x21\x4b\x71\x6e\xe8\xf2\x74\x64\x53\x2a\xad\x29\x96\x60\x58\xd0\x4e\x86\x82\xfe\xa7\x92\x9d\xc4\x26\xd5\xb3\x74\x48\x0a\xfe\x98\xd8\x67\xe8\x4d\xb2\x64\x26\xd8\xe2\xc4\x45\x8e\x9c\x75\xa2\xf1\x25\xec\x6d\xe5\x03\x23\x47\x54\x6a\x5c\xab\x25\x84\x2f\xce\xa4\xae\x63\x3c\xa6\x47\xa9\xfa\xa4\xc7\x5a\x1a\x07\x04\x5a\x92\x2c\x56\x71\x05\x8a\x04\x06\x63\x0b\x30\xc4\x0c\x0b\x98\xb6\x03\x44\x91\x25\x6d\x99\x56\x25\x25\xd2\x29\xcd\xe4\x63\x5b\xd0\xb2\x6d\x2e\x2c\x6f\xd8\x3b\x5f\x9a\x7e\xa3\x77\x2f\xa8\x56\xf0\xa3\x6f\xaf\xa4\xc9\xd5\x2f\x8b\x36\x75\x62\xfa\xc4\x0f\xd2\x4e\xcb\xb2\x2d\x75\x61\xcc\x98\x32\x02\xbe\x13\xa8\xb6\x45\x23\x56\x20\x55\xd1\x70\x2d\x92\x16\xf1\x88\xd3\x71\x5d\x50\x48\x52\xf5\x08\x9e\x71\xdc\x48\x07\x02\x47\xd1\x11\x74\x69\xcb\xd4\x62\xcb\x88\xa6\x57\x0e\x09\x2f\xbf\xaf\xd9\xc8\x7d\x32\x6d\x53\x85\x67\x53\x6a\x34\xa9\x6d\x5f\xb9\x5f\x71\xf3\x87\x7d\xee\x72\xd5\xc6\x38\xed\xe2\xb7\x65\xc7\x21\x69\x5f\x86\x34\xf2\x38\x41\xb0\x70\x86\xb1\x22\x97\xc1\x75\x85\x93\x80\xe3\x19\x8a\x07\x68\x5a\x46\x1c\x47\x33\xb6\xa7\xc8\xb2\x0f\x68\x25\x85\x10\x42\xd3\xa2\x9d\x37\x37\x69\xde\x7c\xdd\xa9\x1f\xd3\x2e\x5e\x98\xd0\x63\x5c\x21\x70\x27\xbb\xd4\xa8\xdc\xd7\x65\xbb\x0c\x5b\x7e\xf8\xe3\xef\x53\xd7\x53\x1d\xf3\x9e\xd2\x70\x3f\xf4\x45\x2f\x20\x15\xdf\x0f\x0d\x9b\x23\xa9\xd0\xf2\xc2\x10\xd0\x3e\xa6\x22\x8f\xa5\x71\x02\xa8\x0c\x60\x59\x5f\xc0\x75\xd9\xe3\x29\x21\xe9\x5c\xf0\xff\xa0\x57\xef\xfe\xad\xd3\xf9\x1f\x3d\xbf\x22\xf6\x34\xe3\x63\x7f\xe3\xba\xec\xf9\xee\xb7\x6f\x3d\xa0\x77\x83\xaf\xae\x7f\xd7\xa7\x1d\x4c\xe5\xf0\xab\xd8\xc0\x06\x11\x45\x34\x45\xe9\x16\x83\x61\xba\xc6\xab\x6c\xe0\x11\x3e\xc9\x68\x34\x09\x70\x89\x82\x00\xe0\x92\x4b\xfe\xff\x61\x1c\x90\x36\x65\x9d\xb5\xac\xbf\xfd\xf6\x17\x19\xff\xb7\x8a\xb9\xc4\x26\x59\x73\x65\x49\x7a\x4d\x2d\x6a\xfa\xc5\x99\xe7\x55\x7a\x7c\xfe\x3c\xed\xa2\x91\xdf\x6a\x4b\xfb\x6d\x50\x19\xb2\xc6\xc7\xdf\x67\x30\xf7\x93\xe5\xee\x9c\xdf\x1a\x3f\x20\x2e\x23\x33\x26\x92\x08\x1d\x23\xc4\x50\x15\x11\x62\x30\x5f\x55\x5d\x43\xe4\x08\x4d\x91\x02\x51\x15\x60\x68\x73\x81\xa0\xeb\xb2\xa1\xe3\x26\xcd\xf8\xf8\x5f\x45\xd8\xc9\xff\x93\x4c\x61\xf5\x61\xee\xc4\x39\xc5\x47\x6e\xfc\x66\xf0\xfe\x0e\x59\x6a\x6f\x6d\x57\xe9\x8f\x13\x7d\x5a\xe6\xc8\xb5\x51\xf6\x8a\x37\xbf\x94\x3a\x6e\x7b\xcc\xff\x44\xf5\x44\x13\x49\xd0\xb4\x90\xec\x78\x01\x23\xea\x8a\x66\x49\xac\xa7\xc9\x12\x67\xeb\x21\x8b\x29\x82\x44\x6a\x6e\x48\xeb\x52\xc4\x22\x82\x30\x41\xc4\xc7\x56\xfe\xbb\xe6\xa3\x2a\x8f\x6b\xf2\x3c\x73\xab\x4a\x3f\xbb\xd3\xfe\x64\x0a\xfe\x3a\x96\xa8\xfb\xe1\xe8\xdf\x76\x75\xbc\xb9\xea\xe0\xdd\xc7\xa7\x52\x97\x44\x88\x5d\x42\x23\x58\x5a\x28\x13\x0e\x6e\x4b\x0c\x6b\xdb\x0e\x6e\x60\x11\xe0\xc9\xc0\xc2\xa0\x1d\x90\x9c\x0d\x20\xa5\x63\xb4\x6d\x05\x90\xa7\x6d\x5b\x10\x44\xe4\xc4\xde\xf2\x92\xd3\x19\x73\xe5\x3a\x96\x90\x79\x3c\x5e\x9f\xc9\x74\xf8\xc4\xeb\xdb\x3f\xef\xef\xb3\x4b\xeb\x68\xb4\x3f\x57\xa6\xdc\x4f\x4f\xde\xa5\xce\x0f\x8e\xdd\xb2\x11\x59\x90\x22\x71\xc0\x89\x84\xcc\x06\x0e\xc1\x98\x6c\xe4\x41\xe0\x79\x18\x85\x44\x81\xf5\x30\x55\x21\x15\x22\xf4\x5d\x95\x70\x01\x43\x04\x06\x26\x26\x83\x3f\xfe\x53\xf5\x67\x62\x42\x89\x34\x0d\xf3\x27\xbd\xa7\x66\x94\xac\x36\xec\x88\x5d\x67\xa5\xf4\x2a\xa3\x70\xbc\x54\xcf\x6b\xe7\xf7\x16\x78\x70\xea\xe4\xb9\x31\xd7\x47\xae\x9d\xf7\xf1\x77\xcc\xea\xf8\x79\xfa\x4a\x48\x6a\x5e\xe0\xa9\x12\x42\x21\xa6\xbb\xaa\xab\xc1\x20\x10\x1d\xc9\xb5\x38\xdd\xf1\x1d\xd1\x24\x39\xd1\x60\x44\xcc\x08\x3c\x8a\x53\x21\xa4\xc3\x14\x20\xa2\x69\xcf\x3c\xa8\x9e\xf8\x78\x3d\x63\xad\x3e\x64\xee\x78\xf6\x43\xc3\x5c\x09\x70\x7c\x9e\xef\x06\x1f\xce\xd2\xb9\xfc\x85\x7a\xc1\xeb\x17\xf1\xbb\x5a\x69\xcf\xd3\x55\x5c\xc2\x5d\xd2\x31\x23\x46\x42\x16\x82\x2c\xef\x01\x59\x26\x7c\x1b\x37\x19\x8f\x35\x1c\x09\x0a\x3c\x88\x7c\x03\xa8\x8c\x6d\x87\x61\x0a\xa0\xb3\x87\x7a\x8f\x36\x03\xc6\x97\x6d\xdb\x78\xcc\xc5\xa2\x13\x8b\x34\xd9\x24\x17\xaa\xf7\xfd\x99\xb1\xeb\x87\xce\xc7\x7a\xb6\xab\x5c\x73\x49\x1c\x5b\x9a\x71\xc1\xd4\x5d\x1c\xd0\xae\xcd\x8a\x08\x97\x11\x29\x3b\x16\x27\x0a\x2e\xb4\x42\x68\x53\x2a\xe5\x72\x3e\xe4\xa1\xc1\x68\x04\x30\x70\x4c\x20\x43\xa4\xc7\x96\xfe\xf5\xa5\x65\x12\x5e\xac\x68\x32\x99\xed\x55\xc6\xbc\xaa\xfc\xfa\xa2\xcb\xcb\x47\x5f\xf6\xb2\xeb\x8f\xa9\x90\x86\x4f\xac\x73\xb6\x7a\xea\x1e\x27\x31\xa5\x2f\x98\x61\xe8\x69\xb2\x46\xea\x4e\xc8\x60\x00\x87\x8a\xef\xb0\x1c\x0a\x2c\x14\xaa\x24\xb4\x59\x12\xb1\xa4\x01\x1c\x02\xf0\x12\xc6\xa9\x91\xa8\xc9\x29\xbc\xa7\x72\xdf\x7d\xb9\xcb\xfa\x84\xfa\xe5\xab\x25\x45\x7e\x2e\x8a\xdd\x2f\xdc\x7d\xc8\xcd\x3a\x3b\xbe\x2a\x7c\xed\x83\x82\xaf\x06\xbf\x7d\x82\x1d\x89\xdf\x29\x53\x81\xc5\xf9\x34\x13\xc8\x9c\x2e\xdb\xa4\x42\x86\x22\x1d\x22\x83\x77\x28\xca\xf1\x31\x59\x71\x54\x84\x30\xda\x72\x0d\x40\x40\x96\xb6\x65\x5a\x32\xff\x26\x6e\x8f\xcf\xf6\xbf\x15\xdb\x26\x26\xe4\x2a\x5d\xbe\x61\xd2\x80\x8d\x7a\xfe\xeb\x5e\xe9\xb7\x36\xaa\x55\x71\x45\x45\x05\xe4\xce\x95\xa3\xdb\x94\xd3\x4b\xf6\xe4\xbb\xd6\xaa\xf5\xce\xa6\x0d\x8e\x9f\x1d\x1a\xbf\xa1\xab\xac\x4d\x28\xd0\x70\x75\x15\x58\xa1\x24\x45\xb2\x1a\xfc\xcb\x89\xa0\x91\x1b\x21\xce\x20\x20\x67\x07\x9e\x62\x52\x2a\xe6\xab\x96\x29\x39\x66\x60\x1a\x78\x0a\x2e\xda\xbc\x2a\x3f\x14\x3a\xf5\xd1\xfd\x27\x73\xbf\x7b\x76\xbf\x79\xda\xcc\xde\xb1\xa9\x7d\x7b\xb4\x5f\xed\x37\x7e\xf2\xee\xe7\xf1\x4a\xd6\xfb\xe3\xe2\x88\xd3\x17\x6c\x3e\x08\x23\x53\xe1\x4d\xd6\xa0\x01\x8b\xeb\x36\x6d\x79\xa1\x8d\xb3\x22\x08\x1d\x24\x69\x22\x87\x43\x68\x33\x42\x28\xc9\x0c\x2e\x48\x8a\x19\xc6\xd6\x51\x95\xd7\x77\x33\x35\xee\x87\x36\x81\x67\xf7\xdd\xa7\x4d\xbb\xcc\x7e\xdf\xaa\xcf\xf8\x82\xab\x7a\x64\x38\xda\x1d\xef\xf0\x93\x33\xe6\xdb\x38\x46\x83\xf9\xc0\x35\x2d\x47\xb7\x30\x20\x91\xb6\x2f\xf2\x06\x8f\x87\xbc\x18\x1a\x2c\x4e\xf3\x34\x30\x43\xc2\x91\x42\x47\x61\x1c\x49\x24\x4c\xd5\x33\x18\x33\x05\xf8\x63\xd7\x16\x77\x2b\xdf\x6e\x58\xaa\xc1\x9c\xce\x45\xee\xec\x9e\x57\x63\xdc\x81\xe3\x15\x2f\x56\x97\x27\x2b\x85\x7e\xf8\xf1\xa3\x55\x8f\x77\x6f\x8e\xdf\x29\x4b\x06\x08\xbc\x80\x41\x3a\xa2\x2c\x88\x2b\x84\x69\x6b\xa4\x06\x38\x10\x59\xba\x22\x98\x22\x07\x6c\x27\xd2\xbc\xc0\x30\xb5\x40\x84\x7a\xe4\x73\xb8\x16\x3b\xe3\x3d\x7c\xce\xa2\xd9\x1b\xf2\x1d\xa9\x7a\xf4\xf1\x22\xf7\xcb\x9c\x45\x9a\x9d\xfd\xf6\x3a\xb1\xa1\x55\x89\xda\x87\x87\xaf\x59\x55\xf1\xe4\x6f\x03\xe2\x18\xc9\x13\x59\xc5\x71\x09\xdc\x40\x24\x65\xe2\x54\x60\x5b\x91\x17\x7a\xa2\x26\x44\x2a\xe2\x04\x87\xf7\x25\x0b\x73\x42\x8e\x54\x59\x3e\x64\x19\xd5\x14\x1d\x3e\x79\x0e\x64\xc3\xf5\xcb\x2b\x6b\x4e\x58\x72\xec\xfc\x80\x3f\xbb\x17\x2b\xb0\x78\xf9\xe5\xe9\xbb\xd6\xcf\xca\xff\x32\xf3\x44\xb8\xf5\xd8\x06\x6e\xef\x92\xf8\x89\x22\xe4\x34\x5a\xc4\x74\x2d\xb4\x43\x1e\x0f\x45\x29\xb4\x03\x5b\x8d\x10\xa5\x9a\x92\x80\xbb\x66\x14\x7a\xb8\x41\x38\xb4\xc2\xd0\x22\x90\x22\xcf\x76\x98\x14\xc0\x42\xcb\xbe\x29\x82\x26\x34\xfb\xb3\x51\xf7\x05\xab\x72\x6f\xee\x3c\x1d\x49\x61\xf9\x97\x73\x8b\xec\x37\xec\x2f\xf7\x2f\x98\xf9\x3c\x4d\xfc\x7a\x0b\x59\x29\x12\x78\xc5\x8e\x6c\x37\x90\x24\xd3\xf2\x04\x08\x2d\xdd\x55\x30\x39\x22\x44\x2a\x22\x3c\x9c\x65\x79\x56\x10\x23\x5b\x83\xc8\x57\x38\x4d\xf5\x1c\x35\x19\x5e\xf3\x9f\xaa\xc7\x13\x13\xd2\xe6\x2a\x5e\x3e\xa9\xf7\x72\xb7\xc0\xae\x0f\xcf\x44\x6c\xb7\x25\xa3\x9e\xe7\xdc\xde\x4b\xfe\xbe\xff\xfc\xaf\xcc\xbb\x25\x67\xb3\x1d\xab\x3b\xf5\x9a\xd5\xed\x7f\x3f\x8e\xde\x0b\x13\x90\xb4\x29\x86\xa1\xe1\xf3\xae\x1e\x8a\x96\x05\xa1\xe4\xe0\x6e\x84\xd9\x81\x10\x6a\x14\x2e\x20\x3c\x8a\x24\xdb\x43\xbe\x07\xd9\xc0\xe6\x99\x14\xb2\x95\x2b\x76\xbc\xfe\xa5\x62\xd9\x0f\x1f\xef\x1c\x36\x7a\xe6\xb7\xa5\xc6\x7e\xd7\x3d\x3d\xd5\xd7\x9e\xd4\xfc\x40\xff\xa5\x15\x9a\x7d\x74\x6d\x0e\x8a\x63\x15\x19\x1f\x62\x1c\x4d\xc9\x92\x26\x60\x5a\x84\xb3\x44\x24\xb8\x81\x29\xc9\x21\xa6\x62\x3c\x2f\xd3\x0e\x83\xa9\x5a\x88\xe9\x10\x87\x26\x6e\xb0\x82\x16\x81\xd8\xf6\xb0\x4f\xaf\x5f\x2a\x3f\x7f\x5e\xf5\x54\xb9\x0d\x4b\x56\x77\xcc\xf8\xb1\x3f\xf1\x0b\x98\x38\x7b\xc8\xcd\x0e\x25\x4f\x0b\x79\x5e\xed\xdb\x1d\xbf\x28\x1e\xcb\x44\x88\xb5\x31\x01\x61\x8a\x25\x79\x6e\x04\x69\xd3\xd3\x71\xce\xd6\x6c\x4f\x75\x69\x4c\x09\x18\x87\xc2\x58\x5c\x34\x5d\xda\x65\x38\x5c\x97\x65\x98\x42\x14\x2f\x6d\x01\x6a\x47\xa1\x17\x3f\x7f\xf3\x61\xf5\x91\xda\xb0\x63\xf5\x5a\x67\x26\x57\xe4\x4d\x33\xee\xd5\x03\xb2\x84\xfa\xc5\xdc\x7c\x99\x52\x37\x50\x3d\xa6\xf4\x19\x0f\x29\x21\x0f\x49\x05\xd9\x66\x84\x04\x3e\xb4\x4d\x55\x56\x49\xe8\x42\x5d\xe0\xa3\x88\xd1\x29\x8a\x27\x02\xda\x0f\x35\x16\x73\x65\xc4\x8b\xb8\x13\x5b\x18\xbb\x32\x8e\xea\x31\xf3\xd3\x8f\x4f\x86\xfd\x36\xb5\xbd\xc2\xd6\xe8\x76\xba\xc5\xae\x6a\xa7\x4a\x0c\x9a\xc2\x95\x19\x9b\x7e\x7d\xcd\x07\x71\x8c\x06\x1b\xaa\x10\x3a\x98\x4b\xb8\x36\xa0\xbc\x40\x35\x68\x9c\x25\x58\x51\x42\x14\x60\x29\xd9\x17\x79\x1a\x67\x30\x4e\x60\x23\xd5\x97\x25\x10\xd1\xb4\x84\xfe\x4e\xc6\x6c\xa2\xfe\xda\x6d\xe7\xf2\x9f\x74\x2d\x99\x31\xfb\xc7\xa3\x9e\x6c\xff\xa8\xe8\xd6\x83\x37\x3f\xd8\xa3\xf6\x9b\xf4\xeb\xfe\xf7\x75\xb3\xf7\x5d\x98\xb5\x41\xcd\x22\x89\x09\x3b\x07\xbe\xff\x6d\x66\x91\xa4\x1d\x22\xd8\xe2\x1f\x36\xb5\x5b\x3f\x74\xe5\x5d\xb4\xe1\xa4\x55\xdc\xfe\xf1\xc0\x99\x82\xcd\x84\x8d\xda\x8a\xa6\x13\x86\x56\xd9\x22\xbf\xa8\x95\xa4\x54\xbd\x67\x76\xfa\xc8\xc3\xd9\x19\x77\x2e\x16\x3b\xfe\x31\xb0\x01\xbf\x30\xfb\x96\x46\xaf\xde\xb6\xbc\xf1\x65\x85\x09\xc5\x1c\x2c\xdd\xcd\x38\x0e\xc5\x37\x91\x22\xfa\xa1\x27\x10\x50\x0c\x09\xde\x65\x18\x81\x83\xa4\xc5\x51\xb4\x6b\xe0\x82\x66\xe8\x3c\x6f\xb1\x0a\x0e\x11\x94\x44\xca\xc4\x80\x46\x33\x64\xf2\x74\xa1\xb5\x3e\xf3\x23\xad\xc6\xfc\xba\xb7\x2e\x8f\xde\xf8\x49\x95\x8d\xc5\xc6\x34\x23\xaa\x3f\x96\x87\x66\x3d\xf8\x78\xf6\xe0\x05\xe3\x96\xc6\xaf\xed\x93\xd1\x55\x3e\x08\x78\x19\x38\x2a\xe1\xe0\xa4\x28\x93\xa4\x68\x69\xbe\xcc\x09\x51\x40\x45\x98\x86\x6b\x96\x2c\xb9\x22\x06\xcd\x00\x0f\x39\x2c\x62\x45\x10\x83\x46\xb0\xa4\x0f\x91\x65\x45\xdf\x17\xf9\x87\x57\x2f\x32\x28\x6f\xbb\xa1\x67\x9f\x1e\x85\xe5\x0b\xb0\x8b\x67\x83\x63\x53\x73\x77\xc8\xd3\x39\x7e\x6d\xd1\xac\xab\x38\x26\x72\x6d\x9a\x20\x3d\xa0\x79\x5e\x00\xf8\x00\xe3\x69\x4a\xf2\x18\xdd\x27\xe4\x08\x49\x2c\x32\x5d\x59\x42\x38\x70\xa0\x09\x43\x91\x50\x52\x6a\xf9\x6c\x30\xff\xc1\x1f\x19\x2b\xe4\xb8\xb5\x6c\x21\xde\x6e\x4b\x26\xa6\xeb\xec\x87\x55\xbf\x0e\x2a\xbc\x7b\xb1\xe3\xe4\xd9\xd1\x0b\x6e\x0c\xc9\x9b\x44\x3e\xb0\x51\x8f\xad\x51\xd1\xbb\x9b\x6b\x3d\xab\x50\x7f\x43\xa9\x3a\xc3\x20\x53\xa9\xe6\xc6\x05\xe8\xf2\xf7\xda\xf2\xa2\x7d\xbe\x51\x52\x77\x37\xc4\xe6\xc7\x40\x8a\x64\x78\x97\x14\x0c\x15\x97\x84\xd0\x42\x66\x60\xe8\x9a\xee\x01\x39\x8a\x70\x56\xb7\xa0\x8f\x8b\x88\x87\x40\x27\x22\x9b\x08\x79\x5c\xfe\x0f\x66\xe7\xff\x6d\x77\x5f\xb6\x4d\x7f\x8e\x0f\x86\xfc\xd0\xa8\x55\x9f\xe6\x73\x33\x37\xdf\x55\xf6\xe2\xe8\xef\xaf\x8c\xab\x43\x37\x4e\xc8\x53\xbf\xf7\xd8\x5f\x8e\xc5\xb1\x6b\x98\x87\x81\x24\xb2\x14\xa0\x2c\xe4\x73\xae\xa8\xd0\x34\xc7\xeb\x26\x43\x60\xa4\xea\x33\xa4\x62\x03\x5d\x03\x3c\x6f\x62\xd0\x80\xbc\xce\x72\x1c\x6b\x26\x97\xcf\x93\x4f\x96\x4c\xa9\x32\x72\xdd\xbd\x2d\x99\xfa\xaf\x3e\x34\x7f\x55\x5b\xa9\x45\xfe\xe5\xf3\x06\x64\xab\xd6\xa2\xe8\xc0\xa6\xb3\x2e\x7e\x95\x3b\x8e\xed\x8d\x36\x61\x33\x06\x07\x5c\xc5\xc3\x22\x4b\x74\xa0\x27\x43\xd2\xe4\x5c\xd3\x31\xa8\x30\x88\xf4\x80\x8b\x14\x56\x8a\x22\xc7\x12\xa0\xca\xc8\x72\xc8\x6a\xb1\xaf\x31\x7a\xda\xe4\xeb\xb5\x5f\xb5\xa1\xd3\x4e\xda\x33\x6e\xf0\xa6\x5e\xf5\x0e\x1e\xb1\xeb\x1f\x98\x34\xea\x97\x56\x1b\x9e\x1f\xf8\xa4\xee\x80\x38\xce\x90\xa2\x54\xd1\xe7\x5d\x52\xb6\x90\x4b\x93\x36\x0c\x7d\x95\x32\x6d\x19\x59\x8e\x1b\x88\xae\x44\x78\x98\xaa\xf2\x42\x40\x62\x40\x10\x4c\x95\x63\x5c\x1a\xa4\xf0\x08\x9f\x5d\x7c\xc4\xf4\x52\x1b\xc4\x0b\x0b\x66\x15\x3b\x54\xf8\xdb\xaf\x1f\x14\x9d\x5d\xe4\xfd\xb9\x09\x15\xab\x07\xfb\xe7\x4e\x24\x7e\x5c\x94\xba\x41\x3a\xb1\xa3\x7c\x01\x07\x10\xeb\xab\x22\xce\x39\xb4\xa4\x4a\x52\xe0\x92\xaa\xe9\x68\x14\x42\x34\xcd\x6a\x1e\xe5\xd9\x98\x17\x69\x2a\x88\xa0\x2e\xf3\x91\x27\x81\xff\xc4\x36\xfd\xe7\x47\x7a\x6e\xee\x9c\xee\xb9\xca\x6d\x38\xf4\x7c\xcf\xf3\x4d\xf5\xd2\xdc\x1f\xb8\xd9\x19\xdb\xbb\xfc\xec\x3a\x69\xb1\x2a\x55\x0a\xd4\xbf\x99\x2f\x4f\x92\x8f\x34\xfd\xfe\x1a\xb3\xba\xb5\x3f\xd9\xcb\x5b\xb6\x03\xff\x21\xcf\xe0\x8d\x72\xd6\x9c\x13\x4a\xec\x96\xf7\x9c\x6f\x46\xb6\xb4\xa7\xb7\x4a\x1d\x51\x2f\x36\xfe\xc2\xb4\xf1\x88\x40\x4e\xe8\x93\x3e\x6f\xd0\x36\xeb\x88\x01\xe5\xd8\x91\xc9\x73\x91\x26\x23\x9b\x0b\x83\x50\xc3\x3d\x51\x0f\x1c\x4a\xf7\x1c\x42\xfb\x0f\x02\xfc\xff\x6d\xb7\x65\x83\x3f\x9a\x35\xc8\x56\x6e\xc5\x26\x36\xed\xc5\x4a\xc7\xca\x6b\xa5\xfb\x6d\x7e\xb7\xa1\x94\xb3\xf6\x54\xf6\xce\x7d\x97\xaf\xbf\x93\xba\x7a\xfa\x98\xdb\x95\x71\xe0\x38\xc0\x95\x78\x0d\x0b\x90\x6b\x93\x90\x37\xbc\x90\xc6\x3d\xdb\x11\x64\x55\x94\x2d\xc1\x70\x3c\x49\x95\xed\x48\x27\x42\x2c\x40\xa4\xf7\x1f\x63\x01\xfe\x6f\xbb\x0f\xca\x3f\x7a\xb2\xe8\x48\xbe\xb7\x7f\x7e\xd8\xb9\xff\xfc\xe1\xdf\xcd\xe9\x96\xb7\xee\xdd\x84\x81\xc4\xc2\x09\x5f\xdf\x55\xb2\xac\xde\xf5\x6b\xfc\x14\x0f\x4d\xca\xa6\x6c\x13\xe1\xd0\xa1\x1d\x4f\xf6\x0d\x97\x15\x49\xd9\x56\x28\xcf\x75\x1c\x87\x09\xcc\x90\xa6\x14\x46\xe6\x30\x3a\xd4\x79\x5d\x76\xb0\x90\x8f\x5d\x19\x57\xa8\x52\x9e\xe3\x0f\x9b\x35\x6c\x3e\x6b\xc6\xdc\x4e\x97\xfc\x6b\x87\x5e\xb6\x6f\x77\xf5\x52\xbd\xca\xe5\xb6\x66\xfd\x71\x6e\xe7\x1c\xdd\x1e\xc7\x31\x3d\xe2\x0b\xa1\x18\x60\xb6\x69\x06\x9c\x8b\x44\xc9\xf4\x23\xd5\x81\x8e\xa8\xc0\x30\xa4\x64\x43\x09\x71\x51\xc0\x65\xc2\xa6\x42\x42\xc4\x74\xd3\x8b\x4c\x3b\xf9\xab\xb0\xf9\xa0\x2d\x79\xf7\xbd\x1b\x57\x23\x03\x76\xf2\x04\xdb\xfa\xc3\x21\x47\x4e\x76\x6b\x78\x7a\x22\x58\xfe\xc3\xea\xaf\xb9\x1c\x9b\xcb\x76\x8d\x9f\xd5\xb6\x54\x09\x49\x1c\xc6\xba\x1a\xee\x92\x01\x60\x42\xd6\xa3\x75\x4c\x05\x82\x15\xfa\x6a\xa0\x32\x96\xe5\x08\xb8\x18\x20\x9c\x22\x18\x91\x17\x74\x1d\xe9\x29\xb4\xe9\xb6\xc8\x3f\xe3\xa4\x54\xfd\xd6\xee\xe9\xfd\x26\x16\xfc\xbd\x7f\xb7\xee\x45\xd1\xb2\x97\x7e\xa5\xb6\xf9\x4f\x2c\x19\xf7\x75\xc1\x31\x75\x33\xfc\x17\x94\x0e\xdb\xf4\xf8\xd2\x9a\xd9\xf9\x2b\xbe\x85\x0f\xd6\x5f\x8d\x7e\xd7\x5a\xf4\x4d\x5f\x3b\xf7\xc4\x27\xb9\x1b\x16\xcf\x7a\xe9\x68\xce\xc4\x24\xf6\xea\xe3\x85\xeb\xc6\x36\x1d\xb2\xee\xea\x6f\xc7\x17\x8c\x4c\x27\xbf\x9a\x5b\xb1\x72\x25\xe6\xea\xe2\x6a\x41\xd3\x45\xdb\x77\xd7\xbe\xfc\x30\x7e\x33\xef\x58\x8a\xd4\x69\x9e\xc7\x3d\x9b\xb2\x7d\xca\x34\x80\x2b\xb9\x82\xc8\x2b\xd0\x05\xaa\x0e\x5c\x43\x75\x02\xc5\x67\x31\x19\x23\x4c\xe8\x13\x8a\xec\x10\x11\x9e\x82\xbd\x3a\x25\x5f\xbb\x53\x7e\x41\xe5\x65\xc5\x4e\x70\x27\x9a\x36\xed\xb7\xb4\x4a\xa7\xc3\x45\x76\x4e\x2e\x72\xaf\xd0\x9d\x1e\x9f\xb4\x9e\x59\x73\x59\xd2\xd5\x43\x4e\x6d\xda\x74\xf2\x76\x86\x87\xd2\x19\x79\xe3\xd5\x9a\xdd\x98\xb5\xf7\xe7\x4d\xde\xb9\xdd\x2a\x30\x3c\xef\xb3\xd7\xf3\xcb\x6d\x39\x9f\x74\xf5\xa3\x79\x3d\x72\x96\x38\x75\xb5\x4e\xee\x62\xdd\x89\xda\x63\xfe\x54\x66\xcf\x52\x36\x1c\xb9\xff\x51\xce\x2f\xb2\x5d\xbd\xd4\x25\xc3\xc1\x12\x49\x6c\x61\xfe\xed\xa7\xd1\xfb\xae\xc3\x73\xed\x5d\xca\x62\xdd\xd7\x6f\x35\x0e\xec\x3c\x9d\x6f\x5a\xa7\x1f\x67\x99\xc3\x5f\x55\xad\xff\x6d\xc5\xf8\xf1\x18\x18\x99\x56\xa0\x69\xc9\xb8\x64\xe1\x2e\x2d\x3b\x92\x11\x3a\x0c\x81\x71\x86\x26\x6b\xb4\x03\x10\x4e\x03\x45\xe3\x74\xe8\x99\x0e\x72\x4c\x99\xe5\x30\x39\x46\x93\x45\xd5\x53\x27\x0a\xda\xf7\xb7\xff\x70\xe3\x64\xcf\x31\xe3\x67\x7f\x3b\xf3\xfd\xcd\xab\xc5\xa6\x81\xdc\xbd\x66\x2f\x19\xc6\xbf\xd2\xbf\x4e\x5d\x40\x24\xa6\x07\x80\x0b\x94\xa1\x38\x8c\x69\x39\x9e\xab\x62\x9a\xe9\xd3\x52\x14\x71\x44\xc0\x87\x2e\xe3\x6a\x96\x6b\xf1\x5a\x18\x01\xde\x95\x02\xc2\xe0\x01\x0d\x44\x1c\x26\xdf\xee\xf3\x9c\xbd\x17\x7c\x50\xa7\x47\xc1\xe9\x0b\x9f\x34\xea\xb7\xb8\xec\x8f\xdd\x47\xaf\xbf\x9f\x6b\x1d\x56\xf6\xdd\xc0\x81\x72\xbb\x65\x1d\x53\xd7\x60\x11\x7b\xe0\x82\x27\x09\x1c\xf6\xff\x67\x00\x45\x91\xe1\x11\x24\xc1\x8a\x1a\x1b\xa8\xac\x6a\x39\x8c\xe5\xe3\x7a\x28\x38\x1e\xaf\x44\x36\x05\x90\xe9\x81\xc0\x80\x52\xec\x17\x61\xe4\xdd\x78\x37\x2c\x58\x33\xb0\xcb\xe5\x03\x3d\xda\x75\x6d\x72\xe1\x48\x9a\xcb\x75\x1a\x4f\x5f\xbb\x5d\xf8\xb9\x1a\x1a\x7a\xae\xeb\x2f\x71\x6c\x91\x27\x64\x3d\x02\xb4\x19\x18\x86\x6f\x0b\xae\xee\x87\xb2\x8a\xf1\x48\xe6\x28\x84\x08\xc5\x20\x15\xc9\x10\x71\xc1\x44\x91\xcb\x43\x53\x07\x94\xc8\xe2\xb1\x09\x72\xe5\x9f\x8c\x90\xbc\x84\x07\xd8\xa7\x97\xf6\xfd\xd9\x59\xbd\x5b\x4c\x59\xf1\xfd\xa0\xe5\xa5\xeb\xb5\x68\x57\xa7\xf0\x91\x62\x3d\xa6\xa7\xae\x47\x2e\x05\x46\x9f\xe3\x13\xc8\x12\x5c\xa4\xc9\xae\x4a\x71\x02\x1b\xb0\x8c\x89\x6b\x02\xe0\xa1\x8f\x0b\x94\xae\xe0\xa1\xe1\xca\x86\x11\x62\x18\xa2\x7d\x1f\x58\x4e\x72\xa7\x7b\x60\xdd\x66\xbb\x32\x5c\x19\x77\xe0\xfc\xe9\xcb\x4b\x47\xbe\x9e\xbc\x71\x6a\x3f\xb7\xd9\xa4\x8e\x17\xb6\x54\x68\x50\xa1\x6e\xab\x7b\x46\xea\x46\x11\xc4\x06\x9c\x63\x42\x88\x9b\x36\x32\x71\x2a\x62\xd9\xc8\xd1\x01\x15\xea\xbc\x0c\xa0\xa5\xe8\xbc\x83\xe9\xae\x62\x93\x4c\xe0\xc0\x48\x64\xfc\x50\x64\x08\xdb\xd6\x93\xdf\xe7\xbf\x6d\xdb\xbe\x6e\xf3\xbb\x79\x23\x89\x57\x6a\x37\x52\xf8\xb9\xdd\xe5\x77\xf7\x6a\xdb\x95\xcc\x45\x79\x4b\xe4\x5b\x97\x0b\x64\x8d\x63\xc7\x04\x1b\x70\xa2\x24\xe1\x8e\x16\xc8\xb2\xa2\xc9\xbc\x66\xa9\x26\x83\xd3\x08\x8f\x22\x46\x22\xa0\x23\xe1\x74\x14\x01\xc1\x37\x84\xd0\x40\x1c\x0e\xcd\x48\x8a\xdd\x6f\x5e\xe7\xfa\x9e\xf6\xc6\xec\x76\x67\xe1\xfd\x65\x37\x8a\x2e\xed\x37\x75\x54\x8f\x67\xa5\x3e\x6f\xdb\xad\xe6\x4c\x82\x5a\x32\x60\xc7\xaa\x87\xf1\xf3\x98\x04\x44\x63\xa2\x62\x72\x4a\xc8\xf9\x32\xb4\x24\x87\x57\x45\xd7\xd7\x42\xda\xb5\x0c\x89\x17\x31\x3b\x90\x65\x56\x0a\x74\x3b\x34\x15\x11\x32\x01\x6b\xc9\xc9\x4f\x58\x3c\xb7\xec\xdb\x4f\x97\x44\xcf\x8a\xf5\x83\x59\x2e\x0c\x18\xf6\x2a\x63\x6e\x41\x6a\x8b\xa7\xeb\xfd\xa0\x70\xc3\xf5\x07\x3b\x7e\xfa\x41\x3c\xc9\xb8\x3c\x04\x44\x60\xb0\xb2\xe5\x46\x36\x90\x70\x93\xf1\x28\x2a\x22\x25\x5e\x55\x28\x4b\xc6\x42\x46\x31\x49\xc3\x0c\x90\xa5\x2a\x0c\x47\x68\xb2\x09\x92\x6f\xf7\x6e\xed\x8a\xbb\xcf\xef\xef\x71\xf4\xe8\x66\xf7\x41\x9f\x5a\x5f\xb6\x1e\x5c\xaa\xdb\x87\x07\x46\x65\xde\xd8\xa6\xe0\xcd\x4e\x5b\xc7\xcd\x49\xdd\xcc\xa7\xd8\x4d\x4a\x10\xf9\x86\x66\x04\xba\xef\x32\x21\xe4\x59\x9e\xc4\x49\x9f\xb2\x42\x23\x12\x14\x5a\x54\xfc\x00\xea\x94\xeb\x5b\x44\xc4\x8a\x94\x4c\xe1\x32\x1f\x82\xd8\x82\xa8\xda\xb7\x73\xbe\x95\x25\x5d\xbf\x6c\x91\xce\x13\x34\xc1\x6d\xb8\x22\x57\xa3\x72\x47\x16\x36\xc8\xbf\xf4\xce\x34\xae\x68\x97\x1e\xa9\x9b\xbb\x1d\x7b\x88\x35\xcf\x93\x14\xa4\x75\x49\xd7\x4d\x41\xe7\x45\x5f\xd1\x59\x2c\x72\x90\x12\x8a\x1e\xab\x00\x16\x61\x3c\x42\x11\x4f\xe3\x1c\x81\x44\xd3\x56\x15\x33\xc6\xb3\x9c\xee\xdd\xf9\xca\xd1\x65\x76\x1d\x69\xf1\xde\xbe\x59\x2e\xcc\x9c\x72\xea\x4e\x86\x47\xcc\xa4\xac\x67\xba\xb6\x15\xf1\x11\x1f\x97\x89\x1f\xa6\x84\x21\x20\x22\x29\xd6\xd7\x02\x01\x88\x11\x4e\x08\xbe\xc5\x31\xc0\x51\x31\x89\x72\x18\x40\x04\x24\xe7\xb3\xa4\x60\x00\xc8\x45\x01\x21\x91\xbe\xea\x71\x5c\x8c\xce\xc7\x4a\x23\x06\xde\xd9\x5b\xf3\xb3\x68\xc7\xf7\x0b\x0b\x4d\x5a\x98\xf1\x61\x9f\xed\xcd\xf2\xa4\x07\x2f\x36\x77\xcf\xdf\xe7\xf9\x9a\xa3\xa9\xa3\x0e\xc5\x26\x52\xe8\x9e\x49\x08\x90\x21\x7d\x9e\x84\x8a\x41\xfa\x7e\x60\x19\x18\x32\x5c\x80\x19\x80\x90\x1c\x9e\xc0\x24\xc8\xf0\x9e\x8c\xd1\x8c\x19\xf9\x3a\x07\xad\xd8\x1e\x3f\xd9\xe8\xc0\x88\x5e\x77\xce\x3e\xbf\x9b\xbb\xe4\xb4\xdd\x17\xb2\x3e\xdf\xb1\x32\x73\xc3\x1d\x37\x2e\x0e\x1a\x5f\x6e\x39\x36\x27\x5b\x97\xf8\x55\xca\x31\x91\x2c\x49\x48\x35\x43\xd9\x08\x59\x5d\xd3\x29\x95\x33\x75\x5b\xf1\x44\x51\x0a\x70\x5f\xe5\x5c\x26\x0a\x7c\x49\x8c\x6c\x46\xd3\x18\xcb\xa4\x49\xfb\x2f\xd2\x7e\xd2\x4f\xae\xce\xcc\x33\x5e\xc9\x46\xed\xdb\xcf\xb0\xcf\x2c\xee\xa3\xbe\xb9\xf8\x45\xeb\x7c\xed\x26\xe7\x5e\xde\xf7\x61\x87\xf9\x59\xc3\xf6\xa3\x96\xc6\x4f\x10\x36\x45\x69\x88\xa5\x03\x60\x59\x0e\x22\x2c\x17\xd7\x83\xd0\xb3\x34\x8d\x71\x6d\x99\xf0\xec\xc0\x53\x25\x9c\xb7\x0c\x85\xb3\x0d\xd3\xd1\x1c\xdf\xc6\xe8\xd8\x81\x8f\xd2\x57\x07\xd4\x79\xb4\xe3\x5d\xc7\xac\x35\x7f\xf9\xa4\x02\xb3\xa3\x74\xb9\xd6\x6b\xaf\xad\xdd\x82\xba\x9f\x9d\x91\xb6\xf6\x9c\x2f\x33\xc4\x11\x4d\xcc\x33\x26\x05\x48\xc2\x09\x38\x1d\x31\x91\x45\x86\x0c\x42\xa2\x2e\x86\x04\x69\xd8\x06\x10\x31\x37\xb0\xa0\x89\x34\x11\x3a\xb4\xc8\xb3\x90\x23\x31\x25\x85\x50\xdf\xf5\x59\x64\xff\x6f\x16\x7e\x92\x38\x83\x5b\x3f\xe4\x72\x99\xf4\x2d\x73\x36\x6b\x94\x6b\xc1\xb8\xc2\xad\xaf\x74\xc8\x78\xa1\xfc\xdc\xc1\x56\x92\x1f\x78\x75\xe6\x93\x76\x17\x5f\xf7\x9a\x25\x26\x1c\xd8\x7d\x63\x5b\xf5\xf7\x7a\xee\xea\xa6\xf0\x76\x5c\xb7\x2c\x53\xb3\x5c\xf8\xfc\xee\xef\xa9\x43\xed\xc6\x8e\x22\xa0\x20\x74\x31\xda\xf6\x61\x64\xbb\x88\xd5\x48\x4c\x51\x09\xc6\xd3\x0d\xcc\xa2\xb5\x30\x60\x65\x3d\x24\x38\x87\xf6\x2d\x56\x94\x49\xd5\x02\x64\x68\xa6\xf0\x0a\x5b\xd9\x63\xeb\xef\x53\xce\x6e\x0e\x2a\x0c\xca\x55\xe2\x93\xa6\x1b\x0b\x0d\x7f\x5d\xa2\xf3\xe2\x1f\x6a\x54\x7a\x96\xa7\x61\xce\xb7\xe3\xae\xcb\x49\x57\x77\x2e\xbb\xe6\xe8\x85\x8d\x39\xf5\x3c\x1d\xa6\xee\x2f\xd2\xc2\xbb\x34\x65\xe4\xb1\x0d\xfb\x40\xb6\x8b\x87\x8b\x57\x6b\xac\x35\xe9\x46\x26\xcd\xac\x4e\xfb\x73\xce\xf5\x3d\x27\xbe\x14\x2b\xe5\x96\x7f\x5c\x38\x77\xeb\xa0\x83\x33\x77\xb4\xdc\xfc\xeb\x80\x3e\xa5\x56\x35\xdd\xfa\xee\x56\xd9\xf8\x1d\x07\x87\x41\x4b\x42\x9a\xa5\x32\x9a\xa9\x2a\xa2\x46\x9a\x3a\xd0\x35\x2c\xf0\x7d\x95\xc0\x70\x9d\x16\x78\x45\xf0\x8d\x10\x0f\x81\x00\xf4\x08\x27\x68\x5c\x4d\xfe\x45\x9d\xde\xf0\x24\x2d\xb5\x72\x74\xc1\xa1\x58\xa7\x1b\xc3\xca\x1b\x6f\xe9\x89\x05\x47\x57\x28\xd4\xe6\xe2\xb5\x39\x23\xa7\x16\x2e\xd7\xbe\x6e\x1c\x1f\x8d\x8c\xa2\x18\x0a\x4f\x19\x96\x4c\x89\x4c\xa0\x72\xba\x2c\x06\x9a\x12\x92\x01\xc7\x8a\xa6\x2b\xb8\x1c\xa9\x48\x16\x43\x45\xc0\x92\x70\xc5\x31\x7d\x2c\x88\x7d\x89\x65\x58\x20\x85\x33\x7b\x35\xbc\xdf\x26\x57\xf6\x23\x37\xf2\x5e\x5f\xd0\xa1\x62\x85\xa3\x39\xec\xfb\xd9\x0a\xb6\xfe\x89\x6b\xda\xaf\x16\x15\x3f\x33\x2b\xba\x86\x06\xa1\xaf\x29\x08\xca\x8a\xaf\xd9\x1e\x1b\x84\xae\x85\xc3\x40\xd2\x35\x9c\x51\x03\x15\x30\x20\x52\x35\x9d\x67\x74\x43\xe5\x24\x9e\x63\x62\xb0\xc9\x9b\x6f\xfa\x30\xe1\x6c\x9d\x8f\xec\x21\x1b\x26\x59\x53\x9a\x66\xa5\x87\xa0\x4e\xa5\x85\xea\xbf\xcd\xc5\xfa\xf7\xf8\x64\x6c\x87\xbd\xa9\xdb\x6e\x4c\x9b\x85\x43\x8c\x64\x08\x0d\x83\x94\xa4\xa8\xa2\xec\x28\x32\x15\x06\x5a\x60\x53\x91\x6e\x71\x21\xa4\x7d\x2f\xb2\x48\x19\x68\xbe\x87\x99\x32\x20\x22\x19\x8b\xd1\x5c\xfe\xe5\x6b\xae\x65\x17\xe1\x33\xf7\xe0\x84\x74\xbb\xd3\xde\x1f\xb6\x75\xc2\x1c\xfb\xb3\xa5\xa3\xd3\x17\x48\xa8\x3a\xfa\x7d\xb7\x65\xc3\xe3\x58\x22\x6b\xf9\xb6\x8d\x74\xe0\xcb\xae\x21\x98\x34\x50\x25\xd6\x53\x98\x48\xe5\xc4\x40\x23\x38\x02\x9a\x46\xe4\x51\x18\x22\x65\x0c\x39\xb8\x81\x39\x6a\x84\x09\x29\xd8\xab\x2f\x88\xe2\xeb\x9f\x96\x00\x4d\x3f\xfd\xf4\xcb\x8c\x2d\x97\x94\x2a\xbc\xf4\xfd\xf4\xac\x59\xa5\x66\x7b\xf2\x17\x98\xf9\x68\xd7\xc1\x81\xe5\xff\xdd\x45\xf1\x4f\x19\xb0\xc4\x84\xb4\x19\x5a\xa4\x49\x5a\x9e\xfa\x65\xe3\xa1\xbd\xb6\x1d\x5b\x52\x61\x0b\x27\x9d\xd7\x97\x3c\xfa\xbe\x5f\xdf\xda\xfb\x3e\xf2\xe1\x8d\xbb\x79\x8f\xb6\x1d\xdc\x73\xdc\x77\xf1\x53\x9b\x86\x68\x42\xa4\x69\x4b\xa1\x55\x0d\x61\x81\x1b\x99\x08\x12\x38\xc7\x09\x9e\x14\xb8\xb2\xac\xe0\x76\x48\x01\xdc\x01\x2e\xa5\x48\x9a\xa6\x41\x5a\x11\x63\x07\xae\x9d\x34\xfb\xc7\x3e\x6f\x3c\x6a\x70\xba\xc5\x0b\x9a\x9e\x5a\x95\xa6\x7c\xff\x06\x4b\xf3\xf0\x69\x9a\x2f\xca\xb6\x78\xf5\x0b\xa5\xbc\x1c\xc7\x12\x1a\x4a\xd1\x65\x15\xc3\x0c\xc3\x73\x70\x8c\xe2\x25\x5b\x27\x0d\x8a\xb6\x48\x9c\x36\x42\xc0\x68\x44\x84\x45\x3c\xa0\x43\x5a\xc6\x65\x4c\xa0\x74\x22\xc5\x39\xfb\x95\xc7\x2d\x3d\xdb\xed\x92\xe5\xdc\x6f\xd9\x35\xe7\xd6\xb3\xb9\x0f\xaf\x6f\x9f\xa5\xf9\xdd\x41\xb5\x72\x77\x07\x17\x97\x18\x95\xfa\xbe\x8f\xdf\x96\xff\xf5\x84\x62\x7d\x95\x67\x61\xc4\x86\x12\x15\x50\x24\x6e\x5a\x18\x05\x14\x4e\x36\x4d\x8c\x12\xf9\x7f\x7d\xc7\xac\x26\x5a\xa1\xa9\xf8\x06\xa3\xd1\x96\x16\x7b\xcb\x6f\xb3\x0d\xfd\xea\x68\x8d\x55\xbb\x4e\x9d\x2f\x75\xf8\xd2\xbc\xa1\x4b\x16\x9f\x4b\x37\xa4\x47\xb7\x02\x5d\x13\x32\x57\xad\x56\x64\xe3\xcf\xa9\x9b\x57\x18\xf3\x62\x47\xa6\x42\x78\xa1\x47\xd3\x81\x4e\xd0\x0c\xb0\x38\xcf\x71\x31\x87\x77\x39\x2f\xb4\xdd\x20\x90\x35\x02\x63\x65\x51\xe1\x2c\x04\x09\xca\xf1\x09\x9b\xfb\x3b\x58\xfa\xef\xc2\xec\x7f\xca\xde\x25\x36\x69\x98\xf1\xbf\x0a\xb3\xab\xcc\x9f\xf3\xc1\x8c\xf6\x13\x3f\x3a\xf5\x7c\xdf\x73\xed\xbb\xfc\x2f\x33\xef\x00\xa7\x6a\xed\xfa\x7d\x49\xc7\x16\x8f\x77\xd6\xad\x0e\x5f\xc5\x4f\xf9\x01\x70\x34\x0f\x37\x70\x0d\x2a\x84\x1b\x0a\x62\xa8\x30\x96\xa2\x42\xd6\x06\x0e\xb0\x34\xd2\xb3\x8c\x48\x83\x14\x86\x39\xbe\x8f\x1c\x92\x08\x55\xc6\x8d\xad\xfc\xf4\x3d\xf6\x77\x7d\x54\x7f\xe1\xa4\x1d\x57\x9f\xec\x29\xff\x41\xc3\x51\xaf\x67\xfc\x34\xb9\x50\xd6\x6b\xfc\xcb\x76\xe5\xf2\xb1\xcb\xde\xa6\xae\x25\x21\x76\x1a\xd8\x0d\x22\xcb\x03\xa6\xe3\xcb\x8e\x49\x59\xb4\xc5\x9a\x16\x8b\x2c\x4f\x94\x55\xd7\x12\x7c\x5f\xb4\x54\x60\x9a\x5e\xc8\x73\x1a\x65\x10\x16\xb4\xd9\x14\xa6\x79\x0d\x12\x3e\xcb\x46\x27\xf6\x9a\xb6\xee\x76\xe9\x3b\x5b\xba\xa5\xbd\xae\xbd\xeb\xd6\x32\x21\xc7\xfb\xe5\xfb\xd6\xbf\x38\x7d\x1d\xe6\xe9\x1c\x47\x50\xa0\x44\xca\x10\x4a\x8e\x15\xf0\x21\x67\x28\x84\x06\x5c\x0a\xe3\x19\x0e\xb0\x8e\x68\x8a\x06\x09\x54\xdf\x83\xa2\x2f\x01\x1a\xe1\xae\x6c\xa8\x21\x9b\x02\xd8\xe8\xd0\xae\x3b\x53\x4f\x0c\xb9\xb8\xbd\xf9\x98\xe0\x45\xaf\xda\xf5\xe7\xd4\x1a\x3e\x3d\x53\xff\xe3\xb9\x5e\x36\x7b\x91\x73\xfe\xf0\xcf\x27\xad\x8b\x63\xe1\x8f\x4e\x10\x5e\x80\xbb\xae\x64\xe8\x40\x96\x91\xa3\x98\x0e\xe0\x49\x9a\x08\xa5\x90\xe4\x48\x5c\x02\xa2\x22\x23\xdb\xa0\x1d\x9a\xd7\x08\xd9\xe4\xe5\xbf\x3f\xd6\x7f\xf7\x0f\xfd\x53\x4a\x2c\xb1\x09\x9b\xa6\x45\xd2\xca\xa6\xfb\x33\x9a\x71\xe7\x37\xb8\x3f\x6e\xb8\x57\x70\xe9\xe1\xbc\x93\xaf\x4c\x96\xfb\xed\xd3\xce\xcd\xe9\x35\xa8\x59\xfb\x5c\xc5\x3b\x6d\x3f\x19\x3f\x6b\x84\xa1\x80\x50\x5d\x10\x69\x96\x62\x51\x06\xa1\x4b\x2e\x2d\xd0\xae\xcc\x58\xb2\x82\xf9\x36\x4f\xa8\x86\x61\xc8\x86\xaa\x5b\x84\x6e\xc9\x96\x20\x28\x58\x0a\x10\xe9\x6a\xfd\x66\xb5\xa7\xc5\x5b\x54\x2f\xb2\xdc\xc9\x97\x0f\xa6\x1d\x7f\xda\xe8\x93\xcb\x3b\x8b\xc9\xe9\x06\x57\xa9\xee\xc9\x3b\xcd\xd4\xf9\x71\xb1\x21\xd2\x0a\xeb\x42\x5d\x89\x70\xd3\xd3\x49\x45\xe7\x84\x10\x8a\x34\xa7\x5a\x9c\xe8\x11\xa4\x28\x87\x84\x6f\x87\x22\xc5\xc8\x08\x62\x8c\x43\x87\xb8\xfa\x97\x53\x94\x5c\x46\xfb\xf6\x7c\xf4\xc5\xa6\x07\xdf\xe5\x79\x64\x7f\xda\xe4\xe2\xf3\x8b\xf5\x99\x2d\xfd\xb6\xe2\x75\x7f\x5d\x32\xc9\x6d\x10\x7e\x29\xd6\x48\x88\xdf\x29\x0b\x2c\x8d\x53\xa6\x87\x79\x14\xe2\x18\x4f\xf2\x28\x3b\x72\x29\x47\x23\x04\xc9\x26\x09\xc2\xf4\x04\xc7\x76\x68\x59\x72\x09\x82\x70\x3c\x43\x27\x2c\x39\x85\x4a\xcf\xf1\x0b\x7f\x29\x5a\xa4\x67\xfa\x26\x39\x2e\xa4\x9f\x9c\xb7\x8f\xfe\x79\xdd\x6d\x53\xde\x94\x19\x5a\xf7\xc5\xb5\x2c\x2f\xcf\x8c\xa9\x7c\xeb\x59\xfc\xbc\x65\xd7\x32\x69\x06\xb7\x64\x4f\x66\x42\xc1\xa2\x65\x3a\x20\x15\x8a\x43\x3a\x6f\xda\x9e\xc9\xe8\xb8\x10\xd9\x9e\xe9\x44\x1e\xa0\x7c\x86\x75\xa1\xa9\x45\x29\x98\xc4\x9c\x9b\x3e\xed\x5e\x74\xad\xdf\x64\xf8\xd5\xfe\x07\xc3\x84\x13\xd5\xb9\xd5\x87\x83\x8f\x4e\x64\xb4\xf5\x4a\xa7\xd6\x55\xfc\xa6\x4d\xae\xf8\x59\x71\x4e\x0d\x3d\x23\x62\x35\x43\xa3\x15\x8e\xe0\x02\x8e\xd3\x20\x13\x21\x52\x22\x60\x20\xa3\xc0\x45\xd0\x0a\x29\x8e\xa1\x49\x4f\x22\x69\x89\x0e\x58\xdb\x4d\x06\x0b\xfa\xa7\xf4\x58\x62\x42\xc9\xb4\xff\xcd\x8f\x58\x9c\xf1\xe7\xb6\x95\x7e\xdb\xdf\xbf\xfa\xe3\x5b\x8d\x7b\xf5\x5a\x50\xea\x46\xce\xb4\x4a\xc7\xd9\x7d\xaa\xf4\x3e\x86\x7f\x4e\xbc\x48\xb7\x2f\x7e\xbf\xd0\x57\x70\x8a\x11\x64\x4c\x61\x49\xd5\xf0\x28\x17\xc3\x20\xf0\x74\x5c\x63\x24\x35\x62\x54\xd7\x71\x58\xc6\xb5\x90\x68\x39\x2e\xa1\xb8\x8a\x82\xb9\x61\x0a\x8d\xf4\xf7\xd6\x57\x9e\xe0\xd7\x3f\xf2\xe5\xa0\x7e\x41\xb4\xb0\xd4\xdd\x8d\x92\xd9\xe0\xc6\xef\xd5\xeb\x8e\xfa\x6a\xd6\x88\xf6\x8b\x17\x65\xbc\x15\xc7\xd6\x39\xcb\x00\xb2\x1f\x41\x80\xb1\x02\x46\x13\x1c\xe9\xaa\x91\x6e\x73\x04\x08\x49\x64\xf9\x18\xe3\x12\x92\x15\x92\xa6\x61\xf8\x84\x21\x3a\x2c\xa5\x47\x6c\xec\x48\x91\x7e\xea\x56\xe5\x47\xb3\xd2\xdf\x99\xb7\x74\xd5\x84\xa9\x2b\xcf\x6f\xe6\x2b\x5d\xb8\x5d\x72\xf6\xe6\x83\xdf\x17\xf4\xb7\x74\xba\x5e\x29\x75\xd3\x48\x62\xba\x3b\xa2\x4f\xc8\xa6\xaf\x18\x92\xac\x1b\xa1\xce\x72\xb2\x63\x78\x40\x74\x69\x57\xa3\x1d\x0e\x63\x54\x05\xb3\x28\x88\xf1\x0e\xa3\x99\xa6\x08\x6d\xdb\x8b\x85\x0c\x7e\x75\xe6\xf2\x9c\x2f\x1a\xec\xb8\x9f\xeb\x57\xee\x9b\xac\xbd\xa7\x2d\x82\xd3\xca\x7d\x91\xeb\xc2\xbb\x9c\xd4\x6f\xf5\x96\xb4\x3f\xd7\x3f\x75\x74\xd8\xd8\x28\x1d\x8b\x10\x48\x0a\x67\x38\xd2\x64\x54\x83\xd7\x0d\x85\xc7\x11\x66\x2a\xae\x83\x6b\x86\x40\x88\x0c\xcd\xfb\x12\x94\x45\x3e\x30\x01\xa5\x88\xba\x04\x60\x72\x18\xe8\x3f\xe4\x79\x13\x13\x06\x15\xcf\x90\x21\xa9\x7b\x36\xf3\x5c\x93\x43\xa5\x9a\x1a\x0f\xb1\x56\x62\xd1\x39\x2b\xce\x09\xe7\x4e\xdf\x4e\x73\x6b\x5e\xcb\x77\xe6\xcb\xf2\x2e\x51\xfa\x61\xfc\x06\x33\xb0\xb2\xe8\xd1\x1a\x10\xfc\x80\x50\x49\x5b\x0b\x69\x41\x0c\x80\xa9\x23\x5f\x03\x2c\x25\xea\xac\x4e\x23\xfd\x5f\x0e\x7e\x28\x52\x91\x46\x68\x81\xe4\x5a\x78\x6c\xd9\xb7\xae\x75\x3e\x5b\xab\xf6\xe9\x5f\x5d\x9f\xf5\xa4\xc0\xd6\xa5\xdb\xd7\x94\x1f\x77\x24\x4b\x11\xee\xac\xfe\xf9\xa5\x35\x54\x0f\xab\x4c\xea\x64\x1f\x3b\x7c\x67\x88\x72\x20\x46\x12\x2e\x21\x8e\x26\x15\x9f\xf7\x79\x35\x50\x23\x5a\xb1\x74\x8f\x0c\x42\x93\x50\xcc\x00\x63\x8c\x50\x91\x4c\x5d\x0f\x15\x64\xb1\x29\x84\xef\x1a\x6d\xca\x33\xec\x8f\xed\xba\xf0\x64\x45\xd6\x0f\x06\x6c\x9f\x3d\x73\xd4\xae\xfe\x9f\x86\x37\x47\x6f\xdb\x13\x2d\x5a\xf2\xd9\xe4\x05\xc3\xe3\x08\xdf\x13\x55\xd7\x08\x55\x20\x48\x12\xc2\x75\x57\x0d\x39\x99\x14\x5d\x40\x39\x34\x16\x09\xa6\xe2\xe2\xba\xa3\x19\xb2\x85\xb1\x0e\xe6\x4b\xa1\x24\x84\x8a\x14\x7b\xcb\x9f\xaf\xb8\x71\x23\xe7\xc0\x0c\xe9\xe6\xe7\x21\xc4\x4a\x5b\x2a\xbd\xfa\xa0\x43\xfa\x1b\x7b\x32\x09\x8d\xf2\x57\x7b\xc5\x8d\x7a\x5a\xfb\x41\x1c\xa3\xe6\x8c\xc4\xb9\x32\x89\xb3\x84\xae\xd3\x90\xe6\x04\x05\xa1\xc8\x0a\x7c\x42\xb4\x23\x2b\xb4\x6d\xd6\x55\xfe\x7f\xaa\xcd\xa7\x0c\x97\x87\xa4\xef\x32\x7f\x17\x39\x2f\xca\xfc\xbf\x55\x00\x24\x36\xc9\x90\x26\x77\x52\x83\xdf\xa6\x5e\xaf\xb1\x07\x6f\x64\xde\xba\xb0\x67\x87\x36\x39\x7a\xbe\x1b\xb1\xe1\x72\x18\xb6\x6b\x5e\xf1\xfa\xac\xed\xda\x47\xa7\xdb\x8d\x88\x1f\x5b\x9b\xb5\x00\x74\x29\x19\x12\x94\x07\x34\x41\x66\xe8\x88\xa6\x22\x8a\xd5\x44\x8f\x0b\x42\xd6\x25\x19\x53\x95\xb4\xc8\xc0\x51\xc8\x8a\x9c\x88\xe9\x6a\xf4\x97\xc1\x4f\x9e\x9a\xad\x78\xae\xde\x84\xcc\xcf\x04\xbe\xd7\x82\x22\x25\x2e\x96\x1b\xb8\xa1\xe8\x3b\xbd\x4b\xf1\xee\x43\x1e\xbe\xb8\x5f\xed\xe4\xd3\x4f\x17\x1b\x71\xec\x1d\xc2\x68\x46\x73\x31\x84\x42\x91\x60\x69\x05\x62\xbc\xc8\x63\x36\x47\x13\x00\xf3\x2c\x81\x0b\x68\x17\x69\x8c\x25\xba\xb2\x0b\x05\x47\xa3\x30\xdd\xa4\x92\xc7\xac\x1e\xf6\x29\xf3\x12\x7d\x3d\xe0\xe7\xb6\x5e\xeb\x01\x13\x8b\x1e\x9c\x7b\x4f\x3c\xe3\x64\x7e\x0f\x96\xad\x7e\x79\xbb\x42\xf5\xb2\x5b\x52\x97\xc9\x88\xe9\x9a\x41\x46\xe5\x15\x9b\x8a\x5c\x04\x29\xe6\x5f\xa6\x53\x61\x45\x8d\x36\x25\x9c\x35\x09\xc8\x85\x00\x17\x35\x1f\x47\x26\x06\x01\x4f\x11\x86\x61\xf0\xb2\x90\x3c\x88\xf9\xba\xfa\xa3\xd2\xd9\x47\x4d\x3d\xfc\x13\xac\x50\x6e\x6f\xbb\xe2\x17\x4f\x66\x4b\xdf\x7e\xb0\x54\xf8\xe4\x89\x21\x8f\xda\xea\x17\x13\x67\xc5\xef\x74\x31\x5b\x81\x7c\x60\x61\x9e\xcf\xd8\x3c\xa5\x60\x12\xc6\x69\xa4\xc6\xb2\x06\x23\x50\x32\xb2\x03\x9b\x26\x82\xc0\x23\x60\x18\x88\x9e\x25\x62\x3c\x6b\x19\xb1\x4d\xe1\xb8\x2f\xc4\xfc\x47\x49\x6c\x55\xbd\x32\xbf\xbf\xe9\x3c\xf4\xd8\x91\x6d\x87\x47\xcf\xec\x74\x7b\x6b\x9d\xfb\x4d\x1b\x2c\x5c\xf9\x64\x67\xe5\xf8\xdd\x4f\x22\x23\x18\x91\x4b\x2a\xb8\xec\x19\x5e\xe0\xe8\xb6\x1f\x3a\xa1\xcb\xd8\x61\x28\x01\x8e\x76\x65\x9d\xb5\x80\x05\x29\x97\xa1\x39\x48\xe3\x1c\x2f\xb0\x5c\xb2\x37\xd4\x3f\x15\xde\x24\x36\xd9\x95\x6e\x62\xd2\x37\x94\x53\x4b\x39\x57\x64\xc8\xa0\x61\xf7\x37\x5e\x7d\xf8\xa8\xe1\xb6\x5a\x37\x66\x75\x6a\xf5\xee\xc2\x8c\x71\x7d\x1b\x64\x5e\xbf\xaf\xb0\x59\x2c\x7e\xff\x89\xc2\xf9\x38\xce\x73\x04\x62\xf5\xd0\x12\x14\x1e\x12\x96\xa0\x22\x56\x77\x04\x0c\x0b\x18\xc3\x51\x7c\x1e\x61\x50\x62\x78\xd2\xd4\x4c\x59\x70\xa3\x28\x85\x6e\xb9\x95\xeb\x12\xfb\x7f\xf7\xa6\x7e\xd5\x96\x5d\x12\x5b\xdf\xcc\x96\x65\x70\xa3\xdd\x2b\xf7\x94\x4c\x33\x7f\xde\xf2\x2e\xb9\xfa\x4e\xa8\xa8\x6f\x8c\x9f\xe1\x44\x8e\x18\x59\x94\xa8\x22\xc5\x88\x70\xdb\x0d\x1c\x8a\xd4\x01\xe2\x48\x11\x73\x81\xa6\x85\x3c\x08\x28\xc6\xb3\x19\x97\x0f\x01\x61\xda\x6e\x60\xb0\x66\x6c\x5b\xdf\xb7\xfe\xb5\x17\xc6\x85\x29\x99\xeb\xb5\x89\xae\xcf\x6f\xf5\xed\xc7\xf6\xb1\xe8\xcf\xa2\xcd\x3a\xac\xde\x5c\xa9\x2e\x76\xf4\xdb\x62\x5b\xe3\xe7\xfb\x62\x16\x0f\x42\xc4\xe3\xa2\x6f\x51\x38\x11\x72\x82\x1c\xd8\x94\xac\xf2\x26\x27\x0b\xba\x84\x85\x91\x61\x6a\x9c\x64\x93\x3c\x0e\x2d\xd1\x63\x05\xe3\x3f\x50\xa0\x49\xb6\xdc\xcf\x3f\x32\x6d\xfd\xe0\x66\x19\xa5\xa1\xdf\xe5\x58\xf8\x43\xbd\xaa\x65\x1b\x8a\x2f\x9e\xb7\xe8\x3f\xae\xf9\xb5\xf9\xdb\xce\xbc\xbb\x15\xbf\xce\x02\x56\x73\x81\x8b\x31\x6a\x80\xb3\x6e\x48\x28\x11\x6f\x85\x12\x46\xb9\x61\xc4\x2b\x1e\x88\x2c\x53\xe3\x79\x16\x32\x06\x25\x98\x36\x27\x1a\xbc\xe2\x12\x7f\x4d\xe2\x4b\xbe\xe5\x97\x7f\xea\x65\x6a\xcb\x5d\x1f\x3c\x6a\xf4\xcb\x9c\x46\x6a\xd7\x32\xf9\x7f\x58\x33\xbd\x64\x66\xe2\xc3\x17\x63\x67\xee\x7c\x3a\x67\x57\xcb\xf8\x99\x43\xe0\x91\x9e\x08\x10\xc5\x84\x72\x20\x50\xc8\x13\x54\x45\xa1\x24\x40\x5b\x86\x11\x29\xae\xe9\x39\x1c\x27\xd2\xa1\x64\xd2\x1c\x22\x35\x64\x3a\x8a\xc9\x24\x73\x26\xff\xa9\xee\x2d\x31\x21\x6d\xa6\x74\xff\x15\xe5\xce\x7f\x66\x49\xba\xfb\xd3\x6b\xbe\xc9\xba\xc6\xec\xb1\x6e\x7d\x5d\xb1\x6d\xe5\xcc\x5c\xfd\x9a\x3f\xb5\x9e\x78\x29\xd3\x12\xb7\x72\xfa\xc4\x38\x96\x0e\x91\x38\x83\x45\x14\x63\x40\x8d\xd3\x5d\x85\xc1\x3c\xc9\xd5\xa3\x00\x71\x72\xa4\x90\x18\x07\x28\x4e\x57\x55\x8e\x66\x75\x9e\xe4\x2c\x86\xe2\x2c\x27\x05\x4c\xd6\x39\xe5\xca\xa1\xd7\x45\x47\xbc\x04\x7b\x1a\x0c\x5b\x9c\x38\xb8\x48\xc5\xe9\xe9\xc2\x63\x83\x8a\x2e\x1c\xde\xe1\x56\xf6\xe7\x1d\xc7\x8e\x89\x63\x81\x96\x8c\x08\xd5\x30\x14\xde\x52\x4c\xa0\x99\x48\xe5\x03\xf5\x5f\x4e\xa5\xc9\xdb\x7e\xa0\x71\x2a\x66\x73\xa1\x81\x44\xd9\x97\x28\x8d\x13\x48\x12\x84\x46\xec\xaf\xf5\xf7\x02\x83\x17\xae\xdf\xd2\x33\x5b\x9a\xd2\x6b\x32\xe7\x5a\xb2\xbd\x4b\xfd\xaa\x33\x6a\xed\x91\x0e\xfc\x78\xee\xc3\xca\xd9\xbb\x84\x30\x7e\x41\x1a\x96\xf5\xfc\x80\xb6\x2c\xd5\x02\x8c\xa7\x79\x94\x61\x04\x8e\x42\x58\x86\x43\x29\xb8\x27\x72\x04\xe5\x3b\x0e\xc3\x92\x61\x24\x89\x34\xb0\x3c\x8e\x70\x52\x6a\x3f\x7b\xf0\xc5\xb5\x87\x83\xea\x66\x28\x38\x75\xea\x2a\xd3\x5d\xd9\xba\xc2\xbd\xe7\xca\xe6\x83\xe4\x96\xc4\x47\x57\x57\x0d\xe8\xec\x97\xec\x14\xc7\x02\x01\x4d\x00\x88\xe2\x28\x27\x60\x8c\xd0\x10\x64\x86\xe3\x7c\x5d\x35\x70\xc6\xd1\x78\x42\xa6\x1d\x3f\x62\x14\x89\x62\x81\x40\x91\x21\xa6\x90\x18\x62\xff\xae\xc9\xf9\x77\x94\xfb\x9f\x12\xd7\x89\x4d\x5a\x7c\xf5\x5f\xca\xbf\xb5\x7f\x73\xa7\x06\x67\x96\xae\x62\x84\xcf\x06\xa5\x9b\xf1\x5a\x6b\x3b\xa3\x7a\xe7\x0d\xdf\x8e\xfa\xb9\x72\xdb\x8d\x3f\xa8\x8d\x8c\xf2\x71\x7c\xd7\xba\x14\x15\x90\xb8\xa6\x01\x8e\xb4\x90\x48\x4b\xd0\xe0\x05\x49\x02\x8e\x49\xd8\xa4\x6a\x70\xb2\x2d\x73\x1a\x1e\x10\x34\xf2\x45\x4c\xa7\xb5\xc8\x4c\xe1\x4d\x72\xda\xce\x9a\xf3\xf8\xd2\x46\x37\x1a\xdc\x53\x97\x5e\xcb\x9b\x63\xec\x80\x32\x23\xc6\x0f\xbc\x7d\xe6\x78\xff\x6f\x3f\xaf\x7b\xbe\xf2\x85\x38\x5e\xad\x21\x67\xca\x18\xce\xdb\x96\xc1\x46\xaa\x81\x3c\x5c\xf1\x68\x02\xf7\x48\x02\xc7\x75\x43\x34\x54\xd2\x96\x4c\xde\x61\xa9\x80\xd4\x49\x4a\x72\x2c\x8b\x4d\x21\x25\x75\xbc\x77\xe1\x1f\x4f\x9f\xe9\xd3\x2f\x2a\xb3\x60\x62\x8b\x22\x6b\x67\x7c\x77\xa1\x9f\xf9\x71\xf1\x6a\xd9\xcb\xbc\xbf\x38\xd0\x5e\xb4\x2a\x75\xf7\x54\xec\x24\xa8\xca\xd0\x81\xa7\xbb\x14\x07\x79\x95\x83\xff\x8f\xb5\xb7\x0c\xd7\xaa\xf8\xfa\xc7\x0f\xdd\x08\x0a\xa2\x94\xb4\x48\x3b\xbb\xa4\x24\x25\x55\xa4\x91\xde\xdd\x31\x3b\x66\xf6\xde\xf4\x01\x25\x24\xa5\xa4\x3b\x15\x69\x90\x90\xee\x2e\x41\x5a\x90\x0e\x05\x69\x11\xfc\x5f\x3e\xcf\xff\xfb\x53\xbe\xdc\xe7\xf2\xb9\xce\x75\xbf\xbf\x5f\xac\x7b\xf6\x9a\x99\x35\xeb\x13\x4b\x91\x29\xda\x76\x78\x59\xe1\x14\x1e\x98\xa1\xc3\xb8\xa1\xec\x09\xb4\x85\x59\x5a\x73\x71\xa8\xd3\x0e\x97\xc6\x66\xfd\xe0\xd8\xf6\xf1\xad\xb6\xe5\x3f\x0b\x6b\x0d\xff\xf1\xf5\x2b\x65\x2b\xfc\x98\x67\x7d\x93\x9f\xda\x65\xc8\x5e\xa1\xd0\xcd\x1f\x0e\x57\x9c\x3e\x2f\x89\x9e\x76\x81\x80\xa0\xe1\x8b\xb2\xa4\xfb\xac\x20\xc5\xc8\x0e\x64\x3e\xa2\x24\xc6\x90\x10\x4f\x10\x88\xc6\x1e\x43\x23\xc2\x0e\x49\x3d\xd4\x15\xc7\x60\xe0\xdf\x1e\x0c\xf3\xb3\xfd\xdf\x18\x0d\xa9\x0d\x47\xd6\xcd\xf7\x5f\xa9\x5f\xec\xfe\xcc\x62\xfd\x46\x7e\xfb\xc7\x9a\xd7\xdb\x37\xfd\x7c\xde\xcf\x6b\x6a\x2e\xce\xf6\x6d\x58\xb6\xca\xa2\x76\xbb\x97\xe2\xd9\x29\x19\xd2\xc7\xb7\x4b\xac\x5b\x67\x08\xc5\x05\x81\x41\x3a\x11\x6d\x19\x0c\x49\x40\xd7\xe1\x0d\x5d\xd7\x1c\x2d\xf2\x15\x47\x0f\x45\xd9\xf2\x69\x96\x25\x2d\x06\x85\xd8\x34\x65\x56\x4f\x03\x7a\x68\x92\xf5\x5e\x4a\xa3\x8a\x57\xc6\xec\xcc\xcc\xec\x3e\xfb\xfe\x91\xbb\x03\x0e\x91\x75\xd0\x93\x6f\x72\xab\x85\xdc\xb6\x93\xb2\x67\x48\x22\x45\xd0\xb1\x19\x40\x28\x4a\x20\x42\x99\x0b\x29\x53\x13\x44\xdf\x54\xac\xc8\x11\xf5\x30\xe6\x38\x0e\x28\x9e\xc2\xb9\x7e\xec\x53\xa4\x49\x6a\x81\x1e\x13\x42\x62\xe3\x55\xe7\xdc\x38\x7b\x43\xea\xb9\xed\xa3\xe1\xd2\x93\xb3\xd5\x09\xa7\x4e\x6e\xfd\x6e\x2b\x71\x79\x94\x76\xae\x7f\x79\xb5\xcc\x8f\xb3\xc2\xe4\xad\x72\x64\xe8\x80\x8c\x31\x17\x1a\xbe\x2d\x06\x94\xc7\xfa\xb2\xaf\x06\x02\x0b\x63\x3d\xb4\x49\x97\xf4\x1c\x2c\x28\xae\x4c\x50\xb1\xc7\xa8\x11\x60\x29\x97\x79\xb9\x71\x36\x86\xad\xb3\x7c\x73\xce\xa7\xd9\xc6\x6c\x3e\xfd\xf8\xbd\x15\x4b\x07\x88\x6f\x9e\xcc\x9f\xab\x50\x86\x4e\xa3\x6e\x37\x68\x51\xf3\x70\xbd\x73\x49\x74\x4b\x81\xb4\x41\xc0\x80\x85\xc0\xa4\x03\x95\x36\x58\x10\xd2\x0c\x4f\xeb\x94\x49\xe9\xa6\x19\x79\x14\x4b\x28\xd8\xf1\xff\x2a\x86\x09\xe0\x32\x12\xf2\xd2\x10\x6a\x61\xab\x17\xaa\x9a\xa5\x01\xdd\xb4\x69\xc9\x59\xdf\x3d\x79\x94\x61\x28\x95\xad\xf4\xd6\xe1\xf3\xaa\xd2\xf7\x67\x37\x99\xf4\xe8\x5c\xd7\xe4\x15\xc1\x76\x88\x58\x1a\xf2\xb2\xab\x44\x81\x60\x58\x21\x65\x60\x9e\x8e\x29\x4c\xbb\xae\x13\x84\xbc\xa3\x29\x9e\x89\x1c\x0d\x2a\x6e\x20\x20\x45\xa4\x05\x35\x7c\xc9\xca\xf1\xdf\xd8\x44\xa9\x0d\x37\x65\x4d\xf9\xaf\x9d\x9a\x79\xfc\x99\x4e\x97\xba\x0c\x50\x40\x99\x07\x47\x0b\xcd\x2a\xce\xbe\xf2\xd9\x93\x36\x7d\x1b\xac\xbf\x33\x7b\x72\xf7\x0c\x87\x27\xdf\x49\x5e\x37\x93\x13\x54\x48\x32\xb4\x6f\x68\x12\x21\x70\xae\x6b\x7b\x92\x1e\x13\x88\xa3\x29\x89\xd1\x41\x8c\x15\x2a\x36\x1c\x8a\xb7\x60\x48\x72\xae\x62\x58\x04\xcb\x49\x89\xa1\x92\xe3\xcb\x16\x54\xec\xff\xcb\xc0\x1a\xab\xea\x3c\xf9\xa3\xc2\xba\xea\x75\xeb\x3c\x7e\x70\x85\xa9\x95\x32\xea\x8d\x12\xe1\x5b\x8b\x61\xb1\xe4\x4d\xaf\xe6\x20\x27\x00\x97\x57\x19\x13\xea\x10\x79\xa2\xea\xcb\xba\xcd\xc8\xa1\x49\x38\x0c\xa9\x0a\x91\xaf\x99\x12\x36\x44\x06\x21\x9a\xf0\x65\x49\xf0\x22\x90\x46\x7b\xb2\xc1\x89\x36\xdb\x0f\x05\x3b\x3a\x5d\x4f\xdd\x4f\xef\xad\x97\x65\xd2\xa1\x0a\x8c\x58\x6d\x00\xac\xb6\x1c\x15\x1d\xf2\x74\xc6\x8c\x24\xce\x2a\xf2\x0d\x52\xb5\x60\xa8\x2a\x01\x10\x65\x57\x33\x05\x03\x23\xd3\x15\x30\x50\x10\xcf\x12\xb6\xc9\xd1\x1e\x13\xab\x22\x40\x0c\xf6\x39\x1c\xb8\x86\xa1\x25\x5e\xe5\x32\x1f\xf7\xda\x39\xe1\xb7\xf7\x9b\x8e\xb9\x71\xbc\x6c\xfb\xc9\xef\x8c\xff\xf9\xf4\xe4\x62\xf7\x8d\xcf\xdf\x6d\xe5\xcf\xce\x1e\x9e\x5b\xd0\x29\x89\x86\x06\x10\x28\x32\xa1\x79\xbc\xc0\x20\xd1\x82\x1c\x6b\x8a\x91\x64\x4b\x51\xe8\x8a\x0c\x61\xca\x32\xcd\x7b\x24\x4f\x60\x9a\xb4\xc4\x20\x8c\x68\xcd\xd2\xed\x97\x3c\xb2\xfe\x8d\xa7\x93\xda\x30\x6b\x4a\xa6\xcc\xff\xd5\x47\xc8\xf7\x5e\xf6\xcc\xf4\x85\x22\xcc\x89\x7c\x25\x88\x36\xbb\x9a\xac\xed\xfd\xfe\x85\xd7\xf3\x1f\xba\xd8\x6c\xe4\x96\xba\x6d\xdb\x6d\x4a\x1f\x43\x35\x61\x7d\xe6\x31\x0c\x02\x40\x88\x58\xcc\x48\x8e\xed\x70\x94\x4c\x03\x1c\x32\x21\xab\xe8\x66\x2c\x69\x24\xa5\x70\x80\x52\x4d\x57\x14\x3d\x02\xaa\xbe\xed\xf2\x69\x00\x9b\xbf\xb7\x9d\xf6\xc3\xd2\x43\xaf\x77\xdd\x53\x78\xe5\x9c\x43\xbf\xb9\xcb\xfb\x2f\xcd\x1e\x2d\xe8\x56\x6f\x65\xbf\x6f\xee\x77\x20\xf6\x2e\x6e\x92\xbc\x8f\x22\x18\xac\x2e\x39\x40\xb2\x45\xcc\xbb\x26\xe1\x22\x5e\x0d\x14\x84\x1d\xc6\x36\x1c\xd6\x27\x81\x24\xf9\x06\x32\x08\xc4\xc7\x36\xed\x1a\x7a\xc8\x70\x69\x8c\x83\xe8\xbf\xac\x4d\xbe\x19\x33\xf3\x4f\x7a\xe8\x2e\xa8\x70\xef\x57\x6e\xf0\xf0\xdd\xc5\x6e\x3a\xfe\x08\xb5\x5b\xbb\xde\xa5\x7b\x76\x19\x9b\xbe\x32\x3f\x31\x31\x9c\x17\x29\xd7\x97\x05\x6c\x09\x32\x8d\x43\x03\x69\x9e\x16\x49\x34\x52\x18\xde\x06\xb1\x27\x52\xbe\x63\x59\x42\xc4\x58\x36\x66\x7c\x89\x8a\xbd\xff\x25\x71\xbe\xbc\x5b\xdf\x5a\xb9\xb9\x63\xea\xe3\x5f\xaa\x17\xbf\x98\xeb\x6e\xb9\x7c\x4d\x73\xcd\xcd\xd8\xac\xee\xef\x72\xee\x63\xc4\xe9\x2d\xef\xb6\xae\x7e\xee\x79\xf2\x12\x43\xc1\x50\x21\x19\x1b\x49\x31\xa9\x02\xd2\xf7\x25\xcf\xd3\x43\x10\x31\x80\xa3\x44\xd6\xf2\xb5\x28\x0a\x7c\x1b\x02\x25\xd2\x18\x80\x30\x23\x09\x1e\x91\x78\x95\xd7\x47\xf1\x17\xa5\x5b\x8f\xbf\x35\xb1\xda\x67\xcf\x27\x37\x5b\xf1\x6a\x75\x6b\x53\x85\xf5\x4b\xc6\xe6\x6b\x27\x16\xf4\xeb\x1d\xe7\xd3\xe7\x91\x95\x30\x31\x38\xd3\xc4\x00\x13\x21\xb6\x48\x80\x85\xd8\x26\x45\x5d\x95\x43\x0f\x43\x41\xb3\xe8\x90\x37\x03\xd9\x0e\x14\x01\xfb\x4c\x20\x31\xaa\x4f\x53\x2a\xfc\x7b\xb2\xd8\xb4\xc6\xff\x1b\x6d\xc6\x0a\xaf\x4f\xd3\x1e\x4e\xfe\x24\x43\xcb\x06\x41\xf6\x45\x25\x3e\xac\x76\x6c\xd4\x07\xaf\x1c\x5e\xf2\xb8\x73\xe7\xcf\x2b\x57\xd9\x7b\x64\x55\x6a\xc3\x3e\x7d\xfe\xfc\xf3\xab\xe2\x2f\x34\xba\x09\x6a\xcb\xdb\xcf\xea\xad\xe8\xfa\x4e\xf1\xc9\x57\x72\xfe\xce\x7f\xb8\xe8\x46\x51\xa7\x25\x75\xfc\xcc\xa1\x5e\x15\x72\x34\xd8\x58\x22\x89\xa6\xa0\xa6\xc9\x2b\xac\x19\xc4\xaa\xe6\xe9\x84\x29\x13\x34\x34\x65\x8a\x50\x04\xcb\x8a\x90\x26\x5a\x8e\x06\x79\x17\xeb\xd0\xe2\x20\x6d\x48\xba\x22\x10\x50\x7e\xb9\xd1\xfd\xde\xfe\x5f\x9d\x2b\xa7\x77\x0c\xbf\x71\xac\xf1\xf6\x5a\xd3\xdf\x9d\x3f\x77\x67\xb5\x76\x59\xbf\xc0\xb3\xdb\xd6\xfe\xb9\xfa\xbd\x2c\x23\xd2\x57\x9c\x25\x7e\xde\x22\x42\x55\x1d\x45\xd7\x23\xac\xdb\x48\x37\x3d\xd9\x62\x15\x27\x34\x02\xdf\x83\xa4\xca\x47\xb4\x25\x06\x3a\xb2\x28\xc3\x35\xbc\xd8\xc4\xb1\x0c\x12\xcc\x35\x0e\x37\x65\xb9\xff\xcb\xec\xcb\x3d\x3e\xfc\xa3\xdb\x57\xa7\x5e\x1d\x57\x2e\xef\x1b\x3b\x4a\xaf\x42\x0b\xe6\x3d\xde\x79\xae\x5c\x85\x86\xec\xc5\xe4\x85\x0b\x39\x1c\xcb\x8e\xed\x93\xd8\x37\x3d\x0e\x3a\xb1\xc2\x39\x62\x6c\x86\xa1\x03\x78\x99\x93\x2c\x42\xd0\x7c\x93\xb6\x58\x55\xe4\x31\x0d\x4c\x07\x42\x2f\x0d\xae\x75\x99\x33\x53\x3e\xa9\x99\x2f\xd3\x81\x95\x95\x4f\xcc\x1a\xd4\xbf\xfa\xc5\xc5\x57\x2b\xe4\xcf\xa7\xe4\xec\xb3\xfc\xcf\xc5\x9f\x94\xed\xca\xaf\x7e\xa1\x58\xde\xba\xab\x4f\xe1\x43\xd7\x07\x81\x61\x79\xe6\x6d\xea\x53\x34\x77\xfd\x73\xc5\x1a\x6c\x69\xbe\xf2\xe0\xc4\xaf\x37\xd0\xd6\xd3\x3b\xaf\xa7\x6f\x36\x47\x62\xce\x99\x8d\x55\x32\x74\x20\xef\x60\xca\xa4\x28\xd6\x92\x35\xc6\xd3\x71\x68\x38\x92\xa6\x33\x8a\x29\xe8\x2a\xcf\x47\x06\xc1\xdb\x40\x07\xa4\x69\xda\x9c\xf9\x72\xfa\x1c\x68\xb1\xbd\x4f\xf1\x54\x7c\xee\xc9\xc1\x75\x4d\x26\x65\x9e\xb3\x38\x8f\xb9\xf5\xfa\xa7\x27\xf1\xa6\x6f\x7a\xb5\x5c\x77\xf9\x7e\xbe\xf4\xc1\x3a\x89\x07\x05\xc7\xba\x2c\x40\x1f\x19\x94\x19\x08\x8a\xe9\x61\x43\x90\x70\xc4\xb1\x40\x09\xc8\x00\x03\x9d\x63\x91\x84\xa1\x6c\xaa\x9e\x68\x59\x02\x27\x71\x1e\x48\xfc\x1c\xe9\x33\xf5\xf7\xbe\x7d\xdb\xd5\x68\xd5\xe0\xc9\x1b\xb3\x7e\xed\xd7\x75\xf5\x87\x6d\xf6\x3d\x5c\x75\xf6\xd3\x7a\x1f\x3c\xaa\x52\x02\x67\x9a\x98\x44\x19\x9b\xaa\x73\x22\xa3\xc7\x8c\x13\xa8\x82\x6c\x28\x82\x82\x54\x16\xda\xae\x02\x80\x0f\xd9\x58\x90\x59\xc3\x73\xff\xba\x66\x5d\xc1\x51\x63\xc1\x63\x48\x5e\x7b\x79\x85\xa7\x35\xfa\xf1\x59\xfb\xf7\xdc\x46\x5f\xe7\x2b\x7d\x6d\xf0\xb6\x62\x5b\x1a\x53\xf7\xb7\xfa\xaf\x6f\x9f\xdc\x65\xf7\xa8\x39\xda\x40\xa7\x64\xf2\xc2\x95\x43\x9a\x89\x49\x91\x71\x1c\x5f\xd4\x03\x49\x54\x42\xc5\x43\xd4\xff\xdc\xaa\x1c\xd4\x03\x4f\x12\x45\x83\x95\x1c\x48\x8b\xaa\x8a\x02\x95\x55\x8d\x34\x44\x56\xf9\x5a\xce\x6e\xed\x5f\x7e\xf3\x56\x36\xa5\x69\x8f\x2c\x97\xce\x35\x59\xc0\x15\xc8\xf5\xae\xcd\x16\xdc\x53\x67\xfd\x8c\x66\x95\x52\xb2\x26\x11\x32\x36\x02\xc6\xd7\x04\x27\x76\x21\x65\xc7\x21\x25\x38\x36\x92\x31\xe1\xaa\x2e\x45\xc0\x48\x05\x90\xff\xeb\x14\xc4\x2a\xe6\x4c\x46\x35\x62\x5b\x8c\xc8\x97\x1f\x7c\x2d\x76\x1c\xe8\xf8\x7c\x25\x57\xbf\x6c\xbe\x82\xd7\x6f\x64\x2c\x7f\x62\xfb\x6f\x3d\x9e\x67\xfa\x59\xbe\x93\xb5\xcf\x8d\x3d\x9f\xcd\xef\x96\x3e\x33\xdb\xc4\x32\x4c\xda\xa0\x79\x09\xa8\x91\x40\x41\x45\xf7\x22\x32\x04\x1c\x42\xb4\x14\x71\xbc\x41\x19\xac\x16\x09\x9a\x8c\x68\x5a\x23\x24\x8a\x41\xba\x2e\x84\x20\x81\x60\xe1\xbb\xf2\xa5\x37\x6f\xba\x7a\xa5\xc8\xfe\x21\xd7\x96\x75\xab\xb1\x66\xfa\x9a\x39\x4f\x37\x9e\xa9\xd9\xb1\x60\x38\x3d\xf7\xdc\x5e\xb3\x06\x35\x4a\xde\xea\xaa\xac\x88\x79\xd6\x04\x86\xaa\xf1\xa6\x21\x69\xb4\x0d\x5d\x9d\x76\x2d\xc1\x42\x00\xea\x36\x03\x74\x4a\xf6\x59\x4e\xe3\x98\x48\x17\x84\xd8\xb1\x79\x98\xd8\x6c\xaf\x54\xbb\x94\xa3\x15\xe5\xdd\x0d\x59\xa7\xc1\x6f\x75\xde\xad\x34\xea\x81\x39\x50\xed\xc5\x76\x59\x9b\xa3\x9c\x74\x7b\x74\x87\x3b\xc9\xd4\xe5\x1a\xa2\x2c\xf2\x32\x47\x19\x02\x04\x22\xeb\xf8\xac\x24\x45\x3c\x96\xa2\x48\x15\x68\x45\xa0\x9c\x80\x15\x35\x10\xfa\x3e\x2f\xb8\xae\x63\x12\x88\x4f\x00\xfe\xfe\xd2\xe6\xcc\xfc\x55\x4d\x5b\xe5\xf7\x6f\x0f\x98\xf4\x60\xc7\xe5\x1f\xab\x3f\x38\xb1\xfa\xbd\x2b\x57\x77\x0f\xbe\xfc\xe8\x48\xe6\x61\x3f\x26\xcf\xbe\x8b\x35\xb0\x82\x31\x0a\xb4\x40\x77\x01\x69\x29\xba\x66\x49\xa4\x02\xac\x98\x0f\x14\xde\x76\x78\xa4\x4b\x9a\x42\x49\x91\x6d\x8b\x12\x46\x90\x03\x1a\x64\xfe\x79\xa8\xfd\xbd\xe5\x9a\xf7\x78\x5e\x61\x24\xde\xff\xc6\xd7\x65\xbf\x18\xb6\xce\x6e\xb5\xa5\x77\xf3\x95\x65\x7a\x90\x4b\xb2\xb7\x86\x37\xdf\x62\x2a\xee\x4b\xe2\x63\xd3\x41\xa1\x60\xca\xbe\x22\x84\xb1\xc7\x4a\xbc\x44\x99\x88\x82\x92\x29\x44\x82\xe4\x32\x74\xc4\x7b\x71\x10\x7b\x91\x62\x6b\xa6\x8a\x68\x1e\x01\x4a\x0d\x5e\x5e\x61\xb8\xe4\x7c\xfc\x51\xed\x1b\x43\x6a\xaf\x1d\x7c\x6a\x5c\xe9\x45\x03\xca\x2c\xdc\xf6\x49\x9b\x23\x5f\x9d\xd8\x95\xe3\xd1\xd9\xd7\x0e\x76\x19\x92\xbc\x70\x19\x4f\xd5\xbc\x48\x0f\x78\x10\x91\x2c\xb4\x7d\xc6\x95\xdd\x90\x12\x78\x03\xe8\x3e\x2d\x0a\xd0\x61\x28\x84\x74\xdd\x46\x8c\x2c\xc4\x86\x62\x29\x71\x82\x22\x69\xfd\xfa\xda\x3d\x4f\xe0\x6b\xda\xa9\x22\xab\x6e\x5d\x2a\x71\x79\xdf\xe2\x95\xad\xcf\x67\x9b\x4b\x97\xe1\x1e\x4d\x9b\x51\xbb\xd7\xc6\xf4\x11\x4a\x12\xcf\xf8\xa2\x38\xce\x10\x22\x27\x50\x00\x13\x53\x94\x6f\xd9\x91\xac\x20\x85\xb1\x01\xb0\x80\x63\xab\x82\x40\x79\x8e\x2e\x22\x15\x22\x60\x81\x08\x99\x31\x4a\xc3\x58\x62\xda\xec\x01\xbd\x86\x36\xe8\x72\xac\x10\x28\x72\xa1\xab\xb9\x70\x79\xab\xf5\xc5\xb2\xce\xef\xce\x9f\xe9\x7f\x6e\x7f\xe9\x53\x9d\xc7\xb7\x7c\x61\x83\xae\x3d\x55\xa3\x4b\xdb\x93\xa5\xeb\x32\xc5\x98\x65\x6b\xf6\x47\x9b\x87\x0f\xfc\x91\x7b\xf0\xa0\xcd\xea\xbb\x7f\xf6\x2b\xb5\x9b\xe0\xd2\x67\x6a\x9c\xb0\x2e\x8f\x7d\x42\x72\x2c\xd1\x07\x3a\x10\x09\x9f\xc2\x94\x6d\x50\xd0\x96\x43\x56\x90\x7d\x2f\xb4\x34\x4f\xd6\xa9\x40\x25\x54\x9a\x16\x11\x66\x02\x8b\x4e\x64\xfe\x70\x6e\xeb\x8a\x2c\xfd\x6b\x0c\x2a\xf3\xc6\xca\xb9\x37\xde\xe9\x95\xaf\xd9\xe2\xc6\xf7\xa7\x64\x98\x66\x66\x2b\x51\x62\xcf\xb7\x19\x36\xb4\xfc\x30\x89\x2f\x1f\x52\xb3\x39\x10\xdb\x86\x6d\x78\x80\x0f\x48\x9d\x14\x58\xe0\xdb\x22\x02\x48\x73\x49\x97\xe7\x91\xe6\x2a\x01\xc1\xa9\x8e\x40\x61\xc3\x61\x75\xe8\x27\xe6\xbf\xe4\xe6\xb7\xdd\xdf\xda\xf0\xd6\xc5\x89\x0f\x9a\x37\x28\x50\xaa\xf3\xc2\x9c\xab\x72\x97\xf8\xb4\xfb\xfe\xb2\xf3\xa6\x7c\x9d\xa7\x41\x8b\x9d\xb5\x93\xf8\xf2\x11\x24\x13\x9a\xaa\x11\xb3\x14\xaf\x21\xcd\x91\x7c\x24\x93\x2c\xf6\x2c\xc9\x67\x28\x8a\xd7\x28\xd6\xd7\x18\x22\x02\x9c\xa9\x11\x01\x15\x50\xa2\xaa\xbc\xbc\xc2\x7b\x9b\x34\xd6\x16\xde\xee\x02\x9a\x2d\x34\x2f\xe4\xed\x49\xf7\xcf\xf8\x6a\xf7\x89\xb9\xcb\x11\xc7\x9a\x9e\xcf\xb0\xb2\x5d\xc7\xd6\x57\x92\xe8\x2c\xa3\x19\x04\x8d\x0d\x1a\xd1\x81\x81\x18\x95\xe7\x3c\x8f\xf1\x18\x22\x8c\x23\x5f\xf4\x08\x24\x8b\x26\xc9\x5b\xfc\x5f\x89\xc1\xbb\xa2\x67\x78\x04\x97\xe0\x4e\xbc\x73\xa3\xc7\xb8\xb3\x79\x0b\xe5\xeb\xd3\xa4\xee\xf3\xd1\x87\xf6\x2f\xa9\x9b\xa9\x48\xe3\x61\xf3\xd9\x1e\x65\x1a\x1c\x1c\x33\xf4\x40\xa3\x33\xc9\x0b\xd7\x62\x09\x45\x70\x11\x12\x1d\x33\xf2\x63\x99\x33\x65\x0a\xab\x1a\xc7\x45\xb6\x2b\x4a\xb6\x4d\x20\x28\xb2\x4c\x28\x61\xc5\x53\x0d\xc1\x72\xa1\xe7\xb3\x89\xcb\xd0\x5c\x99\x66\x6c\x7b\xb5\xf4\xc0\x52\x33\x9d\xde\xf5\xbe\x1d\x59\xaf\xcb\x17\x07\x32\xbf\xf1\x5a\x9d\x94\xde\xfe\x80\x45\xfd\x9e\x91\xcb\xab\x27\x91\xc3\x25\xfb\x84\x8a\x69\x99\xa5\x62\x00\x39\x2f\x0a\x2d\x89\x62\xa0\x41\x38\xa1\x6e\xa9\x2a\x36\x83\x58\x30\x49\x9e\x71\x75\xda\xd3\xb0\xe0\x29\xca\x3f\xec\x35\xfe\x5f\xb8\xab\x8a\x5e\x59\x95\xe3\xd6\x80\x5f\xad\xad\x43\xc8\xdc\x87\xba\x78\x93\xc7\x97\x2a\x35\x4a\xb4\x2b\x76\xc9\x5e\xec\xf7\xa9\xd3\x8d\xf4\x0d\x24\x4d\x2c\xf6\x71\x28\x17\xc9\xae\x1e\x6b\x48\x23\x89\xc0\x8f\x65\xdb\x8a\x6d\x4b\x86\xb2\x10\x86\xae\x07\x63\x8d\x86\x1a\xb4\x20\x21\xcb\xbc\xc9\x29\x34\x05\x85\x34\x54\x71\xd5\x3e\x3e\x5f\xe5\xfb\x7e\xf3\x4b\x67\xdd\x5b\xab\xf0\xf4\x72\xb9\xb2\xff\x9c\xfa\x7d\xbb\xcb\xc3\xce\xaf\x59\x3c\x31\xe5\xfb\x53\x03\xf3\xbf\xf9\xc2\x06\x1d\xb3\x6a\xc6\xc4\xd2\xf7\x4c\xb8\x3d\xdb\xd7\xb5\xd7\x5e\xf4\x2a\x0c\xe9\x55\x79\x70\xc3\x67\xfb\x26\xcc\xa8\xb4\x7d\xf9\xd9\xdb\xb9\x93\x68\xb6\xcf\xf8\x62\x2c\xf3\x3c\xe1\x30\x3e\x0d\xa0\x6f\xb3\x8c\x12\x8b\x2e\x8d\xc2\x48\xb5\x29\x9a\xd2\x74\xd3\x77\x7d\x24\xf8\x91\xcd\x58\xa2\x8d\x05\x17\x26\x40\x29\x16\x36\x5d\x5e\x7b\x54\x91\xfc\x7b\xb6\x9e\x1a\x73\x65\x56\x98\xd1\xce\x55\x7f\xef\xa9\x4a\x7d\xeb\xe6\xaa\x60\x15\x7c\x56\x67\xec\x99\x3f\x92\xa8\x01\x05\xd8\x73\x3d\x27\x88\xa2\x50\xf1\xa3\x98\x0b\x0d\xc9\xc4\x7c\x00\x15\x4e\xd0\x82\x98\x14\x49\x2a\x72\x02\x1d\x68\x8c\x07\x75\xe0\x05\x92\xe5\x25\xd0\x80\xee\x7b\xf6\xf6\x80\x4e\xb7\x7b\xb4\xca\x9d\xa3\xc0\xed\x66\x65\xb4\x79\x55\x5f\x63\x33\x0b\x85\x6e\x0d\xfb\x8e\xbe\xbf\x47\x57\xf9\x53\xc9\x2b\xa9\x1c\x5d\x35\x15\x93\x0a\xfc\x98\x09\x68\x95\xb4\x23\x5a\xf0\x28\x40\xc4\x2a\xa0\x91\x1a\xa8\xd8\xd6\x08\x25\xa6\x18\x2e\xb6\x0c\x20\xc7\xbc\xa0\xeb\x4a\xe2\x92\xaa\x68\x8e\xae\xcb\x3f\xc9\xf7\xf5\x4d\xe6\xcb\x57\x9b\x3d\xb8\x32\xfb\x95\xc9\x3d\x3e\xef\x52\xa0\x55\xff\x53\x67\x3b\x5f\x2b\xc6\x2e\x68\x98\x44\x70\xd0\x65\x29\x0d\x46\x8e\x6f\x78\x58\xe4\x60\x48\xba\x0a\x2d\x91\xa2\x2a\x18\x71\xc0\x70\x20\x36\x99\x80\x27\x5d\xc1\x64\x41\x10\x51\x96\x40\xf0\x92\x0e\x5e\x4e\x88\x5e\xd5\x2e\x0e\x69\x51\xb2\xfe\x4f\xb5\xaa\xf7\xdc\xf4\xc3\xe3\xdc\x0f\xd6\xde\xec\x98\xbd\x19\x3b\xf1\xab\xbd\xd7\xb5\xca\xa3\x32\xce\x48\x9e\x6c\x95\xd3\x69\x02\xc0\x48\x8c\x65\x8e\x03\x80\x8e\x3c\x0f\x89\x31\x43\x10\x12\x16\x4d\xc7\x52\x23\x96\xa0\x02\x1d\xdb\x94\x49\x6b\x1e\x69\x4a\xb2\x83\xdc\x04\xe1\x2e\x59\x53\xb4\xe2\xaa\xca\xb9\x57\xd5\xde\x7b\xab\x7f\x38\x48\x5f\xcd\xfb\xe4\x26\x2e\xf7\x01\x3d\x3c\x7e\xa0\xfa\xa4\xcb\x6b\x1b\x24\xf1\x0a\x97\x7c\x22\x0a\xc9\x48\x91\x54\x19\xcb\x4c\x60\x61\x37\xc4\x0a\x90\x34\x0a\x38\x26\xa9\x46\xd8\x0d\x44\x1e\x07\x1a\x8b\x58\x2c\x1b\xaa\x64\x78\x38\x8d\xf3\x64\x7f\xe6\xb5\x17\xa5\x9d\xcd\x17\x73\xbf\x16\x2a\x56\xef\x9b\x29\x9d\x3e\xa8\xfd\x6a\x96\xad\xeb\x07\x7d\xdc\xc2\xbc\x9b\x7a\xf5\x76\x28\xbc\x90\x3e\x05\x96\xa5\x5e\x9a\xb0\xf7\xe1\x98\x2c\x13\x97\xf5\xf5\x2a\x57\x69\xfe\xe7\x5e\xb5\x51\x73\xa9\xf5\xf5\x29\xef\x7f\xb7\xa1\x76\xc6\x01\xe9\x73\x9e\x4f\xb8\x41\x03\x16\xf3\xa1\xea\x07\x58\xd3\x6c\xc5\xa2\x2d\x45\x16\x14\x33\x92\x90\x4f\x8a\x58\xa0\x58\x35\x16\x15\xa8\x18\x26\x0d\x58\x2e\x22\x3d\x0e\xd0\x71\x82\x0d\xda\x6a\xce\xfe\x59\xe3\xef\x3f\x4b\x2d\x3d\xe0\xde\x12\xa2\x80\x9e\x75\xe6\xa0\x11\x47\x0e\xef\x7d\x58\x5c\xfb\x29\x7f\xc9\xed\x1f\xfd\x9a\x3e\x3f\xf4\xc4\x92\x36\xc6\x61\x2d\x09\x07\x51\xcc\x09\x3e\xa0\xe4\xd0\x86\x94\xa7\x22\xcd\xd5\x58\x0c\x42\xc9\x00\x40\xd0\x7c\x11\x07\x24\x13\xa8\xcc\x5f\xf7\xbe\xa7\xbe\x7c\xe1\x5f\x90\xd6\xfd\x71\xa2\x63\x19\xef\x40\xca\xf2\x52\x29\xe6\xcd\xc9\xc7\xbf\xc9\x3a\xac\xb1\x66\xb5\xed\x37\xb5\x60\xb4\x6f\x6c\xfd\xf4\x11\x5e\x13\x86\x6b\x99\x8a\x0f\x23\x35\x70\x05\x2a\x14\x43\xda\x23\x25\x5d\x12\x49\x0f\x1b\x8e\x6a\x5b\x38\x14\x6c\x89\x87\x0a\x23\x29\x1e\xe3\x52\x8e\xec\x08\xf2\x0b\x30\xf8\x3f\xd3\x67\xc7\xe6\x12\x2b\xbe\x0e\xec\x2a\x25\xd5\xcf\x4f\xf6\xbc\xca\x97\xff\x30\xe7\xfa\xca\xbd\x2a\x3e\x94\x37\x3e\x5b\x3c\x7a\xc0\xc3\x6d\xfb\x5f\xfc\x75\x97\xf7\x77\x0c\x28\x3f\x42\xab\xf3\x64\x6e\xf5\xd4\x4d\x1b\x9e\x90\x5d\x17\xb6\xf8\xb0\xe3\x5b\x1f\xcf\xfd\xfd\xd5\x22\xeb\x39\x89\x69\xfd\x42\xb2\xa5\x34\xd8\xba\xb9\x70\xf1\x1f\x33\xe7\xfe\x28\xdb\xda\xb5\x5d\xf0\x61\x0a\xbe\x5d\xfc\xf2\xf1\x9f\xf7\x3e\x68\xbc\x38\x6a\x7d\x79\x75\xfa\x04\x89\x09\xdf\x53\x02\x6f\x69\x34\xe6\xa0\x61\x00\x12\x06\x9c\x65\x60\x37\x12\x2d\x3f\x88\x6c\x4a\x05\x3c\xc1\x59\x54\x4c\x43\x4b\xa3\x29\x33\x86\xa1\x11\x58\x22\xab\xbc\x9c\x6c\x3d\xe6\x9c\x2e\x99\xb9\x5d\xfd\x67\x59\x86\xfd\x34\x2c\xdf\xf6\x9a\x3d\xca\xcc\xbe\xde\x20\x7b\xea\xc7\xbf\xf6\xda\xd0\x77\xd9\xdc\xa5\x8d\x89\xe4\xed\x0d\xd1\x90\x30\x19\x41\x84\x2c\x10\x03\x9a\xe0\x0d\x4f\x10\x65\xe4\xe8\x48\xd1\x3c\x11\x07\xa1\x47\x7a\x56\x1c\x19\xa4\xaf\x90\x84\x12\xfb\x8a\xf2\xbf\xf8\xd0\x8b\xe1\x8e\x7c\x5e\x36\x55\x13\x33\x35\xa9\x3e\xe9\xbd\xdf\x96\xac\xfc\xe5\xd6\x42\xfd\xd0\xe1\xd9\xf6\xfb\x59\xb3\x3f\xea\xb4\x9b\x3d\xd2\x70\x57\x12\x15\x64\x90\xd7\x6c\x9b\xe1\x45\x2a\x76\x8d\x40\x63\x3c\x47\x47\x7c\x48\xd8\x4a\x20\x20\xdf\xe0\x24\x1d\x20\x31\x46\x81\xca\xf3\x18\xcb\x8c\xea\x98\x7a\x94\xc6\xf3\xef\x58\xf6\x51\xbd\x82\x1e\x27\x2a\xb2\x2b\x40\xea\x31\x99\x98\xdc\xfc\xbd\xdb\xf4\x1b\x03\xaa\xc5\xbd\x72\x15\xfb\xd6\x17\xdf\x6b\xf0\x02\x2c\x93\xeb\xce\xf0\x85\xef\x8c\xc8\x3b\xf0\xb5\x55\x19\xd7\x7e\x7a\xb9\xe6\xf9\xc9\x25\x86\xdc\xfc\x44\x9d\xee\xf5\x2d\x3d\xbf\x4a\xb3\x25\xb3\x06\x27\xaf\x7c\x46\x92\xcc\xd8\x32\x13\x45\x12\x88\xa1\x2c\x46\x26\x43\xf1\x58\x15\x65\xce\x10\x6d\xc0\xf8\x20\xf4\x5c\xd7\x21\x55\xec\xf3\x82\x4d\x48\x8a\x6f\x82\x34\x1a\x1e\xaf\x54\x9c\x0a\xd7\x0e\x29\x58\xb3\xf6\x97\x0b\x86\xdf\xb9\x5d\xb1\xff\xf4\x71\x29\x75\x0f\xdb\xd6\xf6\xfb\x79\x9a\x70\x1f\x0c\xce\x04\x92\x97\xf1\x86\xe1\x30\x32\x94\x14\xc5\xb6\x30\xe0\x08\x68\xd8\x34\xe1\xd3\x22\x05\x80\x87\x95\x00\x7a\x4a\x04\x7d\x53\xf6\x58\x32\x24\x84\x18\x09\x91\x6e\x18\x2f\xa7\xd0\xc7\xbf\x5f\x1b\x1b\xff\xf0\x0c\x2c\xfa\xbe\x72\xed\x3f\x17\x74\xb6\xeb\xb1\xd3\x73\xad\x18\xd8\x65\xb6\x98\xa5\xdb\x87\xe7\xae\x67\x5d\x9f\xbc\xf3\x4a\xd4\x39\xc4\xe2\xd0\x8e\x43\x48\x63\x8f\x63\x34\x96\xb5\x23\xe8\x49\x9e\xe9\x50\x18\x01\x5e\x63\x89\xd8\x0e\xa8\x00\x79\x9c\x4e\xe9\x5c\xa0\x26\xb2\xe7\x1e\x34\xfc\xc8\xec\x7e\x23\x4b\xaf\xbb\x70\xb1\xd8\x11\xb2\x6a\xcd\x00\x3d\xea\x1d\x37\xdb\xd2\x67\xdf\x96\x47\xc7\x72\x67\xec\xde\x28\x7d\xc5\x70\x62\xf3\xf3\xbf\xf6\x21\xe6\x29\x2c\xc1\x88\x40\x62\x20\x42\xcc\xc4\x3a\x56\x09\xe4\x79\x32\xc5\x2a\xaa\x25\x39\x2a\x60\xe2\x58\x60\x28\xf3\xaf\xfd\xac\x51\x89\xe5\x79\xb9\xe4\xbb\xdf\xbd\xbb\xf7\xe9\x03\xf0\xc7\xfb\xd7\x96\x9d\xfd\x66\xd7\x8c\x3a\xe7\x27\x7e\x52\xa6\x69\x85\xfd\x2b\xb7\x49\xed\x69\xb5\x45\xf2\x56\x58\x45\x86\x26\x8b\x98\x34\x69\x31\xc0\x06\x62\xf5\x10\x46\xba\x63\x08\x04\xa0\x2c\x24\x45\x61\xe0\x87\xaa\xc1\x8a\x9c\x62\x01\x1f\x46\xbc\x6d\x08\xd6\xcb\x2b\x3c\xaf\xc1\xd8\x66\x95\xca\xec\xce\xa8\xf5\x1b\x7e\x74\xc8\xfb\xb7\xfa\xbe\x3d\x7b\xca\xc9\xa2\xb5\x2e\x57\x6e\xdf\x92\xd4\x9b\x56\xa0\x92\xd8\x0f\xb0\x5c\x13\x41\x45\x60\x49\x86\x0c\x74\x56\x81\x14\x61\x12\x3c\x2f\xcb\x50\x45\x18\x19\x2c\x64\x6c\xcc\xf9\x24\xe7\x88\x98\xe3\x81\x28\x09\xf2\xff\x5a\x54\xbc\xdc\xc5\x55\xbe\xa2\x72\xbe\xfa\xad\x7c\x6c\xc5\xf4\x31\xd3\x67\x92\xab\x85\xf1\x77\x26\x75\xdc\x76\xe7\xf0\xdd\x42\xa5\x8b\xbc\x76\xf1\x7c\xbe\x24\x8e\x08\xb0\x69\x2e\xa2\x0d\x5b\x97\x55\x05\x51\xb2\x20\x92\x24\xeb\x38\x9c\x6c\x84\x94\x0b\x49\x9d\x08\x05\xca\x84\x86\x1c\x53\x0a\xb0\x78\x05\xa9\x21\xf8\x87\xbd\xea\xdf\x2a\x30\x03\x5e\xce\x5e\xad\xcf\xe9\x73\x2d\x8b\x0e\xf9\x70\x70\x7f\x1a\x0c\xc4\xab\x7a\x77\x9a\x9c\x3b\xdb\x57\x2b\xf7\xb4\xec\xb2\x3d\x79\x2f\x56\xd6\x15\x0d\x91\x91\x00\x25\x68\x6a\xcc\xab\x31\x8c\x91\x0e\x23\x15\x6b\x5c\x6c\xd9\x02\x63\xcb\x00\x8b\x3e\x92\x39\x91\x17\x25\x8a\x0b\x03\xd5\x76\x85\xc4\xf0\x78\x65\x7d\x0d\x53\xf0\x5a\xa1\x2d\x13\x06\x98\xa5\x57\x0d\xa5\xab\xb6\xec\xb0\x93\xbc\x5e\xe3\x76\xa5\x1c\x59\x7f\xef\xf9\xf1\xa2\x2a\x66\x12\x55\x47\x3e\xd0\x22\x45\x22\x24\xec\x61\x4b\xd7\x48\x8b\x62\x7c\xe8\x28\x1e\x19\xf9\x40\xb5\x29\x0c\x49\x89\x30\x19\xc2\x21\x3c\x39\x32\x95\x50\x8e\x20\x4e\x7c\x0e\xe7\x97\x2b\x5d\x42\x57\x76\xb7\xaa\xd1\x27\xdb\xb5\x21\x28\xcf\x8c\x8d\xf9\x9a\xf6\x9c\xde\x36\x47\xe3\xaf\xcf\xd7\xcc\x32\xb5\xd6\x12\x29\x89\x94\x21\x08\x58\x82\x44\x36\x4f\x86\xa6\x86\x74\xcb\x46\x82\x4c\x48\xbc\xe5\x47\x84\x64\xc7\xb4\xc3\x91\xae\xab\x38\x34\x40\x86\x1a\x92\x02\x30\x29\x17\xbd\xbc\xed\x1a\xec\x6e\xd8\x68\x78\xf8\xda\xa7\x5d\xef\x6f\x59\x7b\x79\x2a\xfe\x6a\xd1\x4f\x56\xed\xc1\x97\xff\x58\xbc\xf3\x4c\xd1\x6f\xdc\x13\xf2\xb4\xe4\xe5\xb0\xe9\x18\x26\xb4\x63\xc3\xe7\x42\x08\x43\x9e\x90\x5d\xca\x54\x79\xd2\x06\x11\x96\x05\x06\x01\xc5\x83\x8e\x1b\x12\xba\x0a\x75\x9d\x57\x0c\x8d\x4a\x74\x6d\x6c\xca\xf4\xae\xdd\x60\x69\xad\xe2\x3f\x8f\xbb\x3f\xe4\x50\x2b\xfd\x83\x35\x4d\x47\x15\xcc\x31\x60\x54\x87\xc2\xbd\xfb\x5f\x99\xde\x67\xe4\x7b\x49\xf4\xd2\x32\xa4\x38\xb4\x80\xc7\x07\x6c\x24\x1a\x0e\x67\xdb\x96\x4a\xb9\x9e\xee\x73\x94\x83\x54\x9e\xb1\x5d\x55\x77\x49\x55\xb7\x34\x15\xd0\x04\x25\xf1\x90\x4a\xa3\xcc\xdd\xfa\xcb\x1b\xc3\xdb\xaf\x5c\x38\x76\xc3\x47\xef\xb5\x9a\xcb\x9b\xd7\x32\xb4\x59\xf2\xed\x37\xd7\xbb\x65\x61\xb2\xde\xdf\x51\x76\x38\x9e\xfd\xe2\xaf\xe9\xd1\x51\x7f\xee\xda\xf9\xcf\x86\xb6\x5d\xb5\xe9\x62\x46\xf7\xc4\x2f\xe3\x3b\x96\x5b\x77\xfd\xa3\x15\x6f\x8a\x93\x1f\x1c\xac\x72\x74\xcc\x0b\xfb\xa3\x48\xcf\x21\xd3\xa5\x46\x6f\x0e\x1a\x5f\x71\xd5\xa8\x85\xb5\x96\xdd\xd9\x7e\x5d\xdc\x95\xd7\x2a\x38\x7a\x66\xaf\x7a\x63\x9e\x8c\xba\x93\xbc\x42\x8c\xf3\x19\x8d\x15\x6d\x23\x30\x79\xc3\x73\x7d\x5e\x64\x79\x1a\xe2\xc8\xf4\x3d\x92\x00\x32\x24\x83\x48\xa7\x08\x52\x44\x50\xd6\xe2\xff\x71\xf4\xd4\x55\x3d\xf1\xb5\xf4\x41\xa5\x06\x4c\x3e\xf8\xc4\xda\x12\xf1\xa6\xf9\xf6\xa5\xca\xe5\x4f\xb4\x9a\xd5\xeb\x54\xdb\xcd\xa9\x5f\x6e\x9c\x7a\x7b\xf9\xb4\xe4\xc9\xdc\x38\x47\x23\x4d\x46\x61\x80\xc0\x84\x84\x61\xc7\xc0\x75\x7d\x89\x52\x02\x21\x10\x74\x85\xe4\x05\xc4\xf2\x81\xec\x02\x87\xd1\x5d\x0f\x07\x02\x67\x20\xc1\x78\x79\x7f\x1c\xd8\xaf\x77\x3c\x72\xe2\x83\x9e\x6f\xcd\xcd\x99\x7f\x82\xf7\xac\xca\xed\x8b\x05\xde\x2d\xd4\x70\x4d\xa6\x81\x79\xd8\xe5\x9d\xab\xbc\x9b\xbe\x43\x33\x61\xc2\x05\x38\x52\x74\x4d\x74\x02\x49\x92\x54\x49\x91\x22\x83\x91\x43\x9d\x0d\x80\x01\x90\x8d\xe9\x98\x44\x2e\xed\x33\xa4\xcc\x72\x21\x49\x40\xc1\x89\xff\xd1\xa7\xf9\x32\xe7\xff\x8d\x59\x91\xda\xb0\x6e\xe6\xe9\x6f\x0e\x7c\x21\x87\xc6\x50\x6b\xdf\xfa\xb3\xe6\x83\xfb\x5f\x5e\x2c\x5b\xb8\xc3\xa2\xcb\xb3\x33\x1d\x4c\x79\xff\xee\x32\x18\x64\x3f\x90\xe3\xd7\xb3\x23\x95\xe4\x4d\x84\xe3\x04\xe8\x6a\xbc\xe0\xb8\x30\xe2\x22\xec\x4b\xae\xe3\x02\xce\x91\x00\x2f\x60\x31\x8c\x18\x92\x8f\x64\xc2\xa7\x0c\x28\xe9\x6c\x4c\x01\x91\x24\x50\x94\xc6\xb5\xb0\xb6\x73\xc6\x60\xe1\xea\xa3\x5f\xe5\x29\x3f\xb5\xf9\xc0\x16\xdb\xb4\xdf\x3f\xf1\x0a\xde\x5f\x0f\x57\xcd\x9a\x35\xf6\xd2\xc2\xbb\x54\xfa\xac\xb9\x13\x2b\x09\x35\xd3\x77\x78\x43\x63\xe8\xc0\x93\x39\x97\xe7\x78\x04\x51\xa8\x49\x1c\xa9\x41\x48\x99\x0a\x07\x09\x4b\x23\xd4\x00\x39\xb1\x16\x38\x1c\xe1\xeb\x5c\x62\x6e\x5a\xbd\xef\x72\xd5\xb8\xba\x48\x0a\x3f\xa1\x8e\xb4\x5e\x93\xeb\xcd\x4c\xd5\x7f\x47\x6b\x85\x4f\xbe\x99\xbd\x75\x55\xa1\x7a\xaf\x6c\x31\x92\xc9\x4d\x8b\x91\x48\x92\x06\x72\x58\x56\xb3\x5d\x87\xa6\x3c\x18\x02\xcb\x85\x9c\xc3\xea\x24\x45\xba\x2c\x14\x91\x60\x51\xb2\x2d\xcb\x88\x52\x39\x35\xd0\xd3\x60\xd6\xd7\xe8\xdb\xfa\xc6\x92\x06\x3f\xf5\xfc\x2e\x47\xeb\x26\x25\x57\x15\x86\xc3\xad\x2f\x4e\xb5\xd1\x57\x3d\xbb\x5a\xb2\xa2\x44\xf7\xe8\x7b\x28\x79\xf5\x82\xcc\x63\x1c\x03\x82\x0e\x75\xc7\xa6\x14\x8f\xfd\x1f\xab\x24\xc7\x37\x44\x29\x66\x5c\x37\x10\xb4\x28\x92\x11\x41\x87\x4c\x28\xaa\xbe\x1e\xf1\x8e\x21\x27\x0e\x19\xef\xff\xf2\x5c\xb9\x73\x5f\xa6\x76\xbd\xdb\xbe\x2b\x9d\xdd\xfa\xf1\x87\xe9\x8d\xbd\x7d\x17\x4e\x6d\x91\xb7\xb5\x9a\x7b\x20\xfe\x3e\x7d\x38\x58\xc2\xdd\x4a\x90\x3e\x2d\x79\x16\x1d\x04\xaa\xc4\x73\x9a\xe9\xe8\xa4\xc0\x52\x11\xf2\x43\xa8\x43\xa8\xd3\x41\x00\x1c\x60\xbb\xb2\x6b\x03\x4a\x0d\x05\x36\x72\xd3\x98\x33\x95\xe1\xe6\xce\xec\x03\xca\x9e\x38\x03\xd7\x9e\x5a\x1e\x56\x2b\xdc\xe2\xf8\x9b\xa9\x95\x97\x22\xfc\xd6\xe1\xd9\x8b\xd7\x39\xf7\x53\xbf\x4c\x5e\x2e\xbb\x16\x85\x48\x97\x90\x1d\xec\xb3\x34\x0a\x4d\x22\xd4\x05\x80\x69\x8d\x81\x4c\xac\xf8\xbe\xc7\x72\xa4\xcf\xd9\x84\x1e\x05\x71\x08\x4d\xac\x06\x91\x96\x38\x97\xa7\xef\x28\xf9\xb8\xeb\xae\xdd\x93\xce\xf7\x59\x74\x6a\x59\x49\x71\xc3\x37\x03\x56\x94\x7e\xfa\xf9\xe7\xd3\xda\x47\xfa\xc3\x46\x9f\x7c\x99\xbe\xb7\x5b\xe2\x51\x81\xac\x65\x38\x9c\xcc\x30\xb1\xaa\x93\x2e\x13\x38\xa6\x25\x18\xbe\xef\x8b\x26\xaf\x31\xb2\x0e\xc5\x88\x8a\x28\x8d\x72\x65\xc5\xe2\x6d\x6c\x81\x7f\x76\x56\xff\x43\x31\xfe\x37\xdc\x37\xb5\x61\xf6\x8c\x19\x73\xbe\x48\x31\x2e\xd0\xdc\xd1\x5b\x5c\x9f\x93\xf5\xc6\xb9\xeb\x8d\x7b\x91\x15\x7a\x64\x7a\xe7\xe0\xf1\xd6\x5e\xb7\x87\x45\x5b\x14\xad\x33\xb6\xf3\xd6\xf4\x91\xa8\x13\xe6\x11\xaf\x92\x90\xd2\x18\x8e\x54\x75\xa0\x6b\x9e\x4a\x4b\x86\x15\x06\xc0\x0a\x3d\x1b\x63\x8c\x04\x95\x8d\x39\x41\xd6\x18\xdb\x91\x49\x4d\xf4\x49\xdd\x4b\xc3\x88\xa8\xd0\xdd\xd7\x47\xd0\x72\xdb\xdd\xdd\x6e\x8c\xce\x70\xc9\x3a\x5b\xa1\xc5\xf7\xbf\xe5\x0c\x2b\xc0\xb9\xaf\x9e\x9d\xfb\x45\xb9\x23\x07\x93\x47\x3c\xe3\x44\x03\xb0\x20\x0a\xa1\x0c\x43\x89\xa0\x6d\xcf\xb3\x19\x99\x94\x20\xab\x40\x0d\x50\x54\x60\x61\x45\x74\x58\x83\x93\x29\xd5\x27\x08\x52\x26\x45\x96\x48\x1c\xf2\xb5\xfc\x77\x67\xfa\x03\xab\x56\x2d\x32\xec\xcd\x0c\x53\x5f\x33\xca\x3a\xd9\x2f\x77\xaf\x75\xc4\x55\x17\xd6\x8f\x87\x1f\x9e\x39\x7a\x66\x12\x5f\xa8\x12\x42\x62\xac\x59\x2e\x62\x5c\xd9\xe1\x34\x8b\x82\xa1\x4a\x33\xac\xc5\x09\xa1\xaf\x42\xcf\x97\x58\x85\x60\x5c\x9a\xe5\x55\xa4\x4b\x86\x86\x55\x3e\x71\xc8\x37\x9a\x34\xaf\x50\xb1\x17\xcc\xdd\xa9\xf7\xe8\xee\x15\x99\xa7\x92\x9e\x95\xee\xdb\xba\xd0\xa1\xd9\x1f\x55\x9c\x72\x6a\x63\x81\xae\x33\x92\x28\xd2\xf7\x23\x07\xb0\x82\x1b\xea\xba\x4d\x62\x8e\x61\x08\xc6\xb1\x28\xcf\xb5\xf5\x48\xa4\x80\x84\x7d\x17\x13\x96\x18\x4b\x2e\x03\x4d\x2c\xe3\x10\x08\x4e\xe2\x90\x5b\x9f\xef\x3f\xed\x87\x32\x1d\x17\x0c\xd2\x94\x77\xe7\x8a\xcb\x0a\x75\x5e\x8f\x1f\x6e\x8f\xfc\xd4\xf2\xca\x91\x49\x5d\xbe\x69\xb9\x29\x89\xc8\xb5\x2c\x02\x8d\x22\x7c\x8b\x70\x69\xce\xa6\xe5\x00\x72\x41\xa8\x86\x81\x25\x3a\x84\xa1\xf1\xc0\x94\x78\x3e\x12\x65\xc0\x28\x9c\x07\x7d\x5b\x14\xb9\xbf\x1b\xd9\xa7\xb3\xff\xdf\x20\xca\xd4\x86\xcd\xfa\x66\x4c\x79\x71\xb7\xf6\xaa\xdf\x63\x7a\xbd\x6e\x6b\x0b\x16\xcc\xfb\xfb\x88\xad\x1f\x3f\xf8\xac\xda\xbb\x5b\x5e\x7b\xdc\x17\xd7\x1a\x71\x75\x92\xb8\xec\x7c\xed\x45\x49\xac\xd1\x38\x9d\x53\x2c\x43\x52\x2c\x37\x56\x35\xc3\x61\x05\x07\x30\x96\xe1\x1b\x1c\xa6\x63\x27\x90\x45\x4c\x3b\x9e\xee\x38\xa2\x0a\x28\xa0\x72\xa4\xe7\xd2\x89\x3f\xca\xe9\x7a\x15\x4b\xed\x99\x7f\xa9\xf4\x0d\x58\xb7\xfb\xc9\x2a\x3b\x53\x46\xee\x6b\xb4\x62\xe5\x18\x6b\x76\xb6\xdf\xe5\xf2\xdf\x6d\x99\x99\x3e\x3a\x41\xe2\x6e\x47\x18\x32\x8c\xad\x50\xb2\x4c\x5b\x56\x60\xf8\x9e\x26\xc9\x00\x7a\x06\xb4\x15\xd6\x22\x6d\x5b\x0f\x20\x90\x1d\x59\xb3\xf5\x10\xd8\x30\xa2\x39\x3f\x0d\xdd\xaf\x59\xc4\x7c\x2b\xe3\xfc\x01\x30\x77\x9f\xae\x17\xd9\xcc\x8f\xcd\x52\x44\x87\x9e\x6d\xa7\x74\xa9\x27\xd1\x43\xbb\xe5\x7b\x56\x68\x6f\xf2\x56\x19\x89\xd0\x66\x59\x3f\x10\x31\x4b\x89\x1a\x46\xba\x24\x91\x84\xe2\x5b\xa6\xcd\xca\x96\x4d\x62\xd1\x71\x78\x89\xe4\x18\xde\x71\x0d\xa0\x31\x48\xf7\xcc\xc4\xab\xdc\xfb\xc1\xab\xde\xc2\xe7\x9b\xe7\x31\xdd\x4a\xdd\xd0\x36\x5e\xab\xb1\x77\xd2\xe3\x41\x93\x1e\xba\xde\x97\x45\x52\xf6\xbc\xd6\x47\xe4\x93\xc8\xe2\x21\x0c\xda\x0c\x4d\x45\xf0\x44\x2b\x0c\x01\x09\x08\x9b\x46\x16\xc6\x72\xa8\x22\x22\x90\x5d\xcf\x20\x75\x93\xe3\x29\x8e\x87\x96\x4e\xf0\x9a\x0a\x51\xe2\x9e\x52\x65\xfe\x34\x53\xa3\xc3\x48\x71\xb4\x7e\x63\xdf\xa4\xe9\x6d\xb2\x1f\x5c\x38\xee\x6a\x95\xbb\x5c\x97\x83\x73\x8d\xea\xd3\xd9\x0b\xe9\xf3\xce\x4e\x8c\xba\xf3\xaa\x6d\x00\x1d\x84\x8c\x22\xd1\x50\xc7\x06\x1f\x91\xbc\xe1\xf9\xa4\xea\xd9\x86\x61\xc8\xb6\x1b\x93\x2c\xa9\x5b\x12\x36\x25\xc1\x96\x28\x13\x26\xa0\xc5\x54\xb9\xe7\x2f\xa9\xb2\xf5\xad\x15\x4d\xe4\xef\x72\x4d\x21\x27\x8b\xdb\x32\x95\xd9\xc3\xf4\xe8\xd7\xea\xd3\xf9\x97\x8a\x86\x33\x0f\x27\xcf\x16\x86\x35\x4d\x97\x0f\x2d\x9f\xa0\x1c\x81\xb4\xa2\xc8\xa3\x98\xd8\xb6\x15\xac\x32\x86\x8d\x40\x60\xda\x04\x17\x47\xd8\x34\x65\xce\x44\xbc\x8a\x49\xc1\xfc\xc7\xe1\xf2\x1f\x31\xf8\xbf\xe1\x95\xa9\x0d\xbe\xfa\x6f\x1b\x84\x69\xcd\x4b\xd4\x39\x35\xa7\xfd\xc4\x78\xf0\x85\xb7\x7f\x3e\x7a\xec\xc9\xb0\x32\xa7\xbb\x7f\x33\xe3\xeb\xa9\x93\x94\x02\x04\xbf\x29\x43\xdf\xe4\x9d\x9e\xa4\x2f\xd2\xb1\x28\xa8\xaa\x15\x05\x21\x8a\x48\x2b\x30\x62\xd7\x43\xa4\xae\xb2\x62\x28\xf9\x8e\xe2\x49\xa4\x43\xcb\x8e\x16\x91\x16\xc9\xd9\x6e\x10\xa5\x71\xb6\xd4\x3a\xf0\x46\xb3\x26\x3f\x3d\xec\x5b\xa7\x6c\xc1\xa9\xe4\x8a\x0e\x65\xdf\xad\x33\x77\x6b\xc5\x1e\x97\xd6\x7f\x70\x6c\xc6\x97\x0b\x77\x8f\xfd\x29\x79\xdf\x84\xb6\x2c\x87\x21\x2c\x33\x14\xed\x80\xb6\xc5\x08\x8a\x01\x6b\x69\xa4\xe3\x06\x24\xc9\x8b\xa6\x06\x39\x5a\x67\x69\x95\x12\x1d\x91\x73\x08\xc7\x93\x75\x36\x71\xc8\x9d\xd7\x8e\x2a\xb0\x7b\xc3\xc4\x56\x8b\x27\xb4\xff\x68\x70\x8b\x9c\xef\x7e\xba\x5c\x6a\x38\xa2\x4c\xcd\x72\xf9\x87\x6e\xda\x9d\xa3\x43\x8e\x42\xc9\x44\x2f\xb1\x68\x23\x43\x13\x7c\xa8\x02\x9f\x27\xb1\x1d\x8b\x11\xe4\x65\x06\x33\xb6\xa3\xd9\x86\xeb\xe8\x2a\x26\xd5\x40\xb6\x19\xac\x31\xa4\x8c\x5e\x14\xf1\xfe\xc3\xb9\xac\xc1\x8d\x37\xf2\x65\xbc\x5e\xfa\xc9\x7a\x65\xc5\xd3\xd6\xa5\xeb\xf5\xeb\x3f\x6e\x45\xfe\xb9\x77\x51\x16\xe3\x87\x63\xb5\xb6\x56\x4c\x9f\x3f\x46\x62\x00\x83\x89\x24\xc2\x57\x59\x96\x8d\x14\xc7\xd6\x23\x81\x41\x92\x43\x3b\x2a\xd4\x05\x59\xa5\x7c\xd7\xb0\x44\x99\x37\x0d\x46\x27\x65\xdf\xe3\x28\x33\x76\xe5\x97\xec\x7a\xfe\x0d\x6a\x4d\x6d\xd0\x2f\x25\xdb\x8b\xb7\x2a\x97\x61\xc7\xf6\xfa\xb5\x33\x17\x78\xb4\x75\x4c\x6e\x38\x22\x33\xbf\xb7\xdd\xdc\xb5\xad\x9b\x84\xc6\xdd\xdc\xee\xb6\xe5\x85\x0e\x1f\x4c\xa2\xf7\x8d\xe4\x50\x82\xc9\x04\x0e\xcd\x18\x1c\xa0\x64\x47\x51\x49\x92\x60\x08\x55\x50\x15\xdf\x00\x31\x61\xc7\x86\x05\x23\x8c\x6c\xe0\x70\x61\xc4\xab\x2c\x9b\x86\x9b\xc6\xca\xe1\x2b\x1f\xdd\x2a\xac\x35\x6a\x70\x69\xd5\x71\xff\xd0\x89\x09\xb7\xd7\xd8\x57\xc4\x52\xdd\x7b\x2e\x91\xdf\xca\x73\xe9\x40\xfa\x7c\x1f\x13\x0f\x1e\x88\x0d\x2d\xf6\xb0\x13\x0b\xd0\x96\x79\xc7\xf6\x8d\x00\x05\x14\xe5\x6a\xc0\xe4\x91\x16\x23\x9f\x36\x18\xd5\x8b\x43\x93\xc2\x2a\x60\x10\xcb\xf9\x69\x64\xfe\x27\xc3\x8b\x28\x5f\x94\xbc\xfa\x6e\xd5\xf1\x5f\xec\x58\x56\x7b\xcf\x95\xbe\xdd\xea\xb7\x58\xfb\xb4\xc1\xf9\xdb\x2b\x96\xd4\x3f\x89\x27\x24\xd1\xfb\x86\x01\x3a\x05\x15\x3f\xc0\x41\x4c\xb1\x64\xa8\x69\xa4\xa9\x42\x16\x4a\x3c\x15\x48\x22\x69\xeb\x42\x44\x71\x0c\x2b\x00\x93\xf5\x42\x85\x36\x2c\x9a\x4b\xe3\xf9\x57\xa1\xe5\xf8\x09\x6c\xca\xa6\x5d\x9f\xc6\x3d\xa7\x57\xec\xd7\xeb\xe3\xaf\xc7\x37\xda\xde\xa4\xdc\x85\x9a\x2b\x4b\x2f\x51\xdb\x94\x6d\x90\x3e\xa4\x26\xf1\x99\x2f\x03\x5d\x0e\x42\xca\xb0\x39\x41\xb4\x31\x49\x53\x9e\x66\x42\xdb\xa7\x09\x33\xa2\x04\x0a\xb1\x8a\x28\x22\x24\x1a\x2a\x2d\x33\x66\x08\x55\x1a\xa6\x31\xe5\xdb\xba\xf9\xce\x96\xb6\x4f\x5e\xef\x7a\x6a\xe5\xf2\x67\x8b\x7e\x7e\xbc\x68\xb1\xb6\xeb\x8a\x9b\x61\xf3\x57\x3f\xbf\x51\x08\x7d\xf0\x76\x89\xa1\x49\xa4\x03\x40\x85\x71\x54\x55\x88\x59\xd9\x09\x29\xdd\x84\x06\x8e\x62\xde\xb3\x62\x9a\x72\x81\x6c\x86\x2c\x65\x81\x50\xf7\x5d\x9f\x95\x42\x89\x10\x43\xeb\x1f\xce\x88\xff\xd1\x83\xff\x1b\xd3\x21\xb5\x61\xdd\xbe\x83\xfe\xeb\x9e\xfa\xe1\xf7\x7d\xe7\x7f\xbd\xbd\x60\x5d\x9b\x1c\x6f\xb6\x9d\xba\xda\x7b\xb4\x46\x29\xf4\x4b\xc1\x63\x8f\x3e\x2e\xbf\xb7\xc2\xf3\xa2\x23\xaa\x24\x6f\x9e\x1a\x0b\x54\x44\x58\x2e\x4f\xd3\x2c\x61\x31\x88\x52\x04\x4e\xc7\x0e\x00\x98\xd4\x62\x92\xb4\x38\xd6\x80\x58\x07\xa1\x17\x43\x56\xd3\x75\x9b\x06\x18\xa4\xe1\x73\x9d\xeb\x61\xfd\x02\x3b\xbf\x18\x51\x6f\xf8\x2c\xda\x1e\x50\xb7\x5e\x53\xee\x97\x86\x5c\x9b\xb7\x9b\x74\x5d\x11\x97\x1c\xfd\x6c\x70\xbe\xb7\x93\xe8\xf6\x2b\x12\x92\xe6\xd2\x48\x00\xb1\x4b\xa8\x36\xc9\xb0\x8e\xcc\x61\x53\xa7\x68\xc6\x16\x42\x9a\x0c\x99\x50\x20\x78\xde\x8c\xe3\x48\x8d\x25\x92\xa7\xf5\x38\x71\xc8\x7b\xc6\xec\x7d\x15\xff\x79\xa1\xe0\xcd\xbc\xf5\x6a\x7f\x7b\xec\xd4\xf6\x91\x2b\x9c\x56\x5b\xe5\x82\xab\xda\x05\xb7\x3f\x79\xd6\xcf\x26\x93\xa8\x65\xd4\x75\x4e\xd0\x11\x85\x2d\x3b\xd2\x05\xc2\x17\x2d\x64\xda\xc8\xa5\x5c\x92\xf2\x28\x2a\xf0\x34\xc0\xca\xbe\x14\x3b\x24\x19\x09\x4c\x00\xa0\xe1\xa6\xe1\x54\xd5\x4e\xb3\x76\x1d\xde\x5d\xab\xc3\x90\x0d\xe7\x16\x97\xc9\x3d\xae\xc7\xdb\xa7\x32\xe0\x2d\x85\x1e\x14\x2d\x9e\x7b\xcf\x7e\xf0\x45\x95\x6c\xc9\x03\x78\x38\xce\x63\x03\x08\x31\xa9\x33\x01\x84\x31\x6b\xd9\x8e\xa6\x21\xcf\xb2\x49\x64\xf3\x56\x60\x28\x91\x1e\x10\x36\xc9\x99\x94\xc6\x31\x50\x60\x4d\xf5\x6f\x26\xcc\x7f\x9e\x7f\xff\xc6\xd2\x48\x6d\x98\xf9\x8d\x52\xff\xf5\xfc\x6b\xfc\xca\xaf\xe4\xe1\x71\x73\xf2\x91\x85\xbf\xb9\x55\x6a\xde\xe3\x1d\xd5\xbe\x7c\xbd\x53\x09\x6e\xeb\x95\xf6\xdf\xe7\xba\xd0\xff\xdc\xaa\xf1\xc9\x2b\x99\x29\x8c\x3c\x17\x44\x4c\xec\x30\x0e\x8e\x59\x49\xb6\x14\xe0\x8a\x2c\x63\x91\x6e\x20\x48\x96\x6d\x2b\x2e\x61\x12\x92\x6b\xba\xd8\x57\x19\x56\x13\x75\x35\xf1\x45\xd5\x64\x53\xc5\x4c\x56\xd6\xcd\x73\x4f\xfe\x76\x7d\xd9\xf2\xd4\x5e\x4f\x98\x68\xf7\xa4\x69\x5b\x7e\xee\xf7\x5e\xad\x56\x29\xbb\x8a\x3d\x7f\x33\x79\xa9\x0f\x05\xc5\x61\x5d\x9f\xf1\x85\x88\x82\x6c\xa4\x11\xb6\xe7\x3b\xba\x26\x8a\x9e\x07\x3d\x5f\xa3\xff\x3a\xb2\x64\xd5\xf1\x39\x41\x11\x2c\x91\xd2\x05\x82\x4b\x9c\xfa\x1f\xf7\x39\xf3\xf5\x91\x2d\xaf\xed\xaa\xd2\x6d\xe9\x27\x93\xdf\x2d\x56\xed\x55\xf4\x46\xe6\xf6\x0b\xc7\x7d\x5c\xfa\xc4\xb1\xb3\x6f\xf2\x5a\xf2\x14\x2a\xac\x0a\x42\x59\x21\x02\x8b\x8d\x68\xc9\xa1\x3c\x16\x42\x29\x24\x59\x44\x38\x1a\xa5\x0a\x80\xa0\x29\x51\x10\xec\x88\x33\xed\x00\x6b\x8e\x4f\x9b\x5e\x9c\x86\xa7\x32\xca\x3c\xfd\xd6\xf6\x51\x6f\xe5\x9d\xfe\xfd\xa5\x02\x1f\x7c\xde\x2e\xcb\x41\xed\xfc\xe1\xdd\xdf\xd7\x0f\x6e\x8c\x5b\x58\xfe\x78\x7c\xef\x72\x12\x55\x2a\xa1\x28\xaa\xb2\x26\xfb\x86\xea\x53\x88\xa4\x38\xa0\xd9\x6e\x10\x10\x36\x62\x43\x4b\x60\x1c\x44\x07\x8a\x46\x04\xb2\xaa\x84\x02\x6d\xf3\x0c\xaf\xe2\xc4\xe8\xd8\x30\xec\x54\x7b\xf6\x61\xe9\x5d\x43\xa7\x21\x27\xcf\xa0\xbc\x2b\xa6\xae\xfc\xe3\xf8\x42\xbc\xe2\xde\xf6\xb6\xd7\x5a\x6c\xec\x7f\x32\x89\x24\x49\xa8\xb0\x82\x08\x6d\x13\xfb\x26\x01\x79\x95\x26\x2c\x89\x8c\x55\x33\xf0\x42\xc7\x17\x64\x35\xb2\xa0\xe1\x5a\x32\x80\x9c\x6d\xb9\x9c\x4a\x33\x54\xa2\x81\x8d\xe7\xe7\xfe\xba\xba\x5a\x96\x86\x5b\xf2\x74\x3f\x52\xe4\x7c\xf4\xc6\x91\xdb\xda\xb6\x61\x1f\xf7\xae\xd1\xfc\x4a\xeb\xee\x7d\x5b\x0e\x6b\x3a\x20\x89\xaf\x55\xcd\x43\x11\x1f\x61\x42\x93\x22\x92\x90\x90\xa6\x33\xd0\xf6\x38\x9b\x15\x49\xa4\x47\xb4\x6f\xa9\x31\xf2\x35\x15\x8b\x96\x10\x7a\xa6\xc6\x05\xc2\xdf\xd2\xbb\xff\x14\xc1\xff\x06\xc4\xa6\x36\xc8\xd1\x3d\xdf\x7f\xf9\xfe\x2f\xb9\x65\xad\x18\xf5\xfd\x17\x05\x46\x64\x2c\x5f\xee\x46\xca\x91\x67\xb5\x1e\x6d\x6c\x7e\xe3\x6c\xb5\x5d\xbf\x7e\x55\xf9\xca\x3d\x71\x60\x12\x53\x28\x62\x03\x31\xe4\x79\x17\x78\x18\xaa\x1e\xd2\xac\x48\xa0\x19\x2d\xe4\x19\x43\x10\x09\x0c\x0c\xd1\x0d\x6d\x4a\x91\x34\x9b\x52\x59\x9b\xd6\x68\x0d\x24\xce\xfa\x29\x63\x8b\xdc\x3e\xf6\x61\xb6\xa0\xee\x5c\xfa\xa7\x9f\xc1\xb7\x6f\x3e\xe8\xb5\x7e\xfe\xa2\x1f\x9f\xdc\x3c\x1c\xd6\x6d\xd0\x7d\x5f\xc6\x1f\x92\x08\xb0\x8a\x0a\x8a\x95\x18\xdb\x71\x8c\x43\x5b\x12\x43\x21\xb6\x05\xd6\x72\x39\x9f\xa1\x42\x8b\x35\x5d\x8f\x03\xa1\x1a\xda\x06\xe0\x6d\x2d\x60\x7c\x53\x35\x12\x9f\x2d\x73\xf3\xef\xea\xdd\x74\xd9\xf7\x05\xa6\x94\xfe\xa8\xdd\x86\xa6\x0f\xf7\x8e\xbb\x37\x6b\x79\x97\x07\x60\x8f\xff\xf6\x2f\xeb\x7f\xdd\xfd\x56\xfa\xec\xcb\x12\xcf\x7a\xe1\x25\x9a\xe5\x30\x63\xc4\xbc\x45\xb3\x8a\x4f\x48\xa1\xcf\xaa\x31\x81\x7d\x1d\x03\x8f\x96\x39\x25\x80\x9c\x80\x14\x8f\x8b\xb9\xd8\x56\x41\x14\xa7\xd1\x6e\x3f\xba\xa6\xda\x3d\x79\x4f\xbf\x51\x4c\xd8\xa6\xce\xca\xe1\xda\xa0\x0c\x2b\xeb\xad\xec\x58\x73\x66\xf7\x3a\x2d\x0b\x55\x5d\x77\x7a\x4b\xc5\x24\x0a\x6c\xc2\x80\xd4\x55\x9e\xe6\x5c\x56\xe3\x75\x1a\x03\x45\x04\xac\x42\xf2\x62\x24\x18\x0c\xcf\x09\x84\x0a\x80\x60\x85\xac\xa6\x0a\x58\x8c\x29\x3a\xd0\xbd\xc4\x21\x1f\x68\x5c\xb3\x4a\xf9\xde\x67\xeb\xe4\xce\x1e\x94\xcc\xb4\xb2\x70\xd7\x68\xe7\xf7\xd7\x2b\xdf\xba\x99\xad\xe2\xad\x93\xdf\x9d\xbf\x31\x25\x7d\x33\x2c\x12\x16\x2f\xa1\x84\x62\xec\xd3\x90\x35\x18\x5e\x96\x2d\xc3\x0f\x45\x82\x86\xae\x8a\x5d\xc8\x22\xe0\x69\x74\x24\x38\x1a\xcb\x9b\x56\xa0\x71\x81\x17\x33\x8e\x07\x5e\x2a\x82\xff\x8d\x07\x91\xda\x30\x7b\x4a\xc6\xdc\x2f\x16\xc1\x0b\xbf\x9b\xea\xfc\x36\xff\x95\x6b\xab\xfa\xe5\xdd\xcd\xca\x45\x36\x5d\xf8\xa8\xf7\xfd\x7b\x7f\xdc\xfe\xe5\xc3\x5d\x0f\x47\xa3\x02\xf3\x4b\x27\xef\xa3\x04\x41\x64\x23\x86\x52\x0d\x59\x61\x1d\x5b\xd5\xa0\xe1\xb0\x26\x8f\x3d\x9a\xb1\x44\xa8\x19\x10\x46\x98\xc2\x32\x40\x56\x24\xfa\x30\x34\x48\xe9\x45\xf1\xfd\xdf\x21\xe7\x9e\x7b\xb6\x67\xf9\xd9\x9d\xfa\x17\xed\x54\x76\xf6\xf0\xf5\xbd\x7a\xec\xc5\xab\xb9\xdb\x76\x85\xf9\x53\x1a\xe7\x1d\x78\xa7\x4c\xe1\xc2\x49\x04\x59\x0d\x28\x59\xb4\x29\xd1\x58\x53\x78\x16\xaa\x21\xb2\x95\x98\x15\xf8\xc8\x73\x1d\x35\xf2\x14\xe4\x46\x8a\xc0\x6b\x52\x60\x12\x46\x18\x03\x0a\x45\x41\xe2\xe2\xe5\x92\x39\x65\x5c\x97\xb3\xaf\x0c\x1a\xd9\xe9\xdc\x1b\xaf\xd7\x28\x54\x47\x9e\xf8\xfa\xc4\xbe\xa5\x4e\x76\x2a\xd1\xf9\xfa\xaa\x0f\x77\x54\x4d\xa2\x14\x8e\x8e\x6d\xd5\x0c\x15\xe8\x04\xba\xe5\x63\x0b\x05\x81\xac\x42\x2e\xe4\x28\x4b\x10\x18\x1b\x9a\x81\xaf\x88\x8a\x26\x4a\x71\x08\x19\x12\x12\x26\xf9\x0f\x86\xd3\x0b\x21\x97\x68\x75\xbe\xe4\xec\xa3\x02\x7b\xf9\xce\x67\x79\x6f\xcf\x39\x73\x51\xba\xf0\x7e\xf9\x23\x5d\x3a\x54\x48\xa9\x73\x7b\x8d\x5f\xe3\x44\xf2\xe6\xc2\xb3\xd8\xf6\x44\x9e\x36\x63\x0f\x60\x86\xb1\x7d\x26\x8a\x45\xc7\x08\x7c\x9a\xf4\x02\x42\xc3\x8a\x14\x11\x2e\xa4\x79\x96\x26\x19\x45\x89\x38\x42\x34\xf5\xbf\xfb\x4b\xeb\x98\xff\x8d\x76\xf0\x47\x93\x37\xd6\xef\x3e\x3f\xcf\x77\x05\x0f\x56\xbf\xb8\xfc\x8b\x91\x2d\x95\xc9\x97\xe6\x7e\x35\x38\x18\xf9\xba\xb1\x6e\xf0\xae\xc9\xed\x52\x1b\xf6\xb9\xfd\xe7\x9f\x5f\x15\x7b\xa1\x72\xc8\x74\xbd\x70\xa9\x82\xa3\xdf\xb9\xca\xef\x6b\xda\xef\xc3\x8e\xdf\x66\x6c\xdf\x22\xe3\xd7\x79\xd7\xec\x7d\xef\xc7\x99\x1b\x9e\x30\xef\xbc\x92\xbe\xab\x38\xf1\x03\x30\x26\x19\x42\xa0\xec\x58\xe0\x09\x68\x3b\x1e\x85\xf8\xc0\x8a\x29\x8d\x84\xba\x29\x61\xac\x29\x48\x61\xd9\x50\x61\x05\xc2\xc3\xac\xac\x02\x4a\x85\x2f\xf3\x6a\x76\xd5\xea\x9c\xf3\xf8\xbc\xb2\x99\xcf\x65\x58\x76\xb9\x56\x91\x01\x9f\xe6\x2d\x5a\x66\xe0\xf4\x5b\xd8\x69\x37\xf2\xca\xf7\x35\xaa\x3c\xaf\x9f\x44\xfb\x73\x16\x99\xbe\x4c\x52\xac\x81\x45\x88\x2c\x82\x81\x20\x8c\x80\x47\x10\x01\x13\x51\x92\xa9\x11\x2c\x66\xa0\xea\xb0\x2a\x70\x34\x43\x22\x45\x41\x75\xd2\xa0\x90\x97\x6a\x79\xf8\x6a\x99\xcd\x47\x0f\x65\x98\xb6\xb6\x1b\xfc\x6e\xf9\xb1\xaf\xaa\xbf\x72\xbf\xe8\xac\xd3\x13\xf7\x7d\x23\xef\x0b\x2f\xbf\x8f\x5e\x48\xb9\x9f\xaa\x8e\x75\x47\x5f\xfe\xf4\xb9\xa8\xbf\xf7\xf6\xaa\x62\xa7\x47\x64\xac\x51\x78\x48\xe7\x8f\xe6\x5c\x59\x6f\x0d\xba\x96\x7b\x75\xcf\x2e\x49\xf4\x61\xd6\x3d\x92\x93\x05\x0a\x70\x91\x4b\x7a\x81\xa1\x11\x96\x46\x2a\x84\x6e\x53\x08\x42\x06\x9a\x6e\xa8\x22\x84\x09\xcc\xc4\xb4\x45\xd0\xb6\x8d\xd9\x34\xfc\x73\x0f\x5f\x3d\xb4\xb3\xee\x9f\x6d\xcb\xac\xcc\xb6\xb3\x4f\xf6\xc9\x2b\xe7\xae\x20\x77\x0e\x6d\xfe\xd6\x97\x0b\x27\x2d\xe8\xbc\xae\xd1\x1f\xbd\x93\xe8\x76\x1d\xb0\x5c\x14\xb0\xa6\x44\xd0\x94\x45\x38\x9c\xe0\x6b\x22\x17\x2a\xd8\x8f\x0d\xc7\x0a\x45\x3b\xf2\x0c\xce\x32\xf4\x50\xa5\x3c\x92\x0a\x04\x9d\xb6\x63\x39\xb1\x8a\xf8\x03\x7a\xfb\xbd\x6c\xe7\x88\x9c\x23\x66\xae\x39\x70\xa0\xe1\xa9\x77\x66\x5e\xcc\xda\x17\x8f\x78\xcf\x5b\xfa\xee\x27\x1f\xd7\xd9\xb3\x67\x77\xf2\x42\x36\x75\x0e\x38\x11\x24\x08\x45\x97\xe9\x00\xd0\x21\x61\x18\x9c\x49\x1a\x34\x10\x74\x4e\x07\xb1\x17\xab\xaa\x05\xb1\xc9\xc4\x92\x17\x22\xc0\x91\x6e\x02\xd1\xa8\xdc\xa2\x59\x35\xbd\x46\x95\x26\x8b\xeb\x6e\xde\x2d\x6d\x2f\xd8\x70\xb3\xbd\xe2\x66\x4d\xf2\xd8\x1b\xbf\xf4\xf9\xe0\xc8\x90\x6e\x73\x9e\x24\x2f\xeb\x15\x59\x71\x19\x17\x21\xd9\x93\x55\xde\xd3\x59\xc8\x90\x08\x04\xac\x42\x61\x4e\x66\x28\x3e\xe6\xb0\xc7\x45\xba\x4a\x32\x80\x56\x80\xae\x46\x21\x27\xbe\x5c\xde\xeb\x4f\xbe\x5c\x71\xa5\xed\xf1\x2f\x66\xb7\xd2\xbe\x7e\xbd\xea\x85\xbd\x9d\xea\x96\xee\x7c\xee\x0b\x4d\xaf\x5a\xa8\xf8\xce\x41\x15\x06\x26\x4f\x45\xc3\x52\x06\x49\xd9\x22\xc9\x73\x3a\x70\x48\xcd\x0c\x49\x41\xe4\x75\x97\x51\xad\xd8\x47\x9a\xc6\x70\x12\xed\x07\x32\x96\x5c\x96\x8c\x22\x2c\x11\x01\xf7\x22\xcf\xea\xef\x84\xc8\xb3\x7c\x5d\xa5\x91\xe0\xc7\x45\xc7\xc6\xaf\x1e\x59\xa7\x69\xd1\xe3\xa9\xbf\x74\xee\xfa\x25\xd7\xea\x62\xe9\x8c\x3b\x60\xce\x72\x95\x1e\x24\x31\x87\x7d\x04\x20\x70\x43\xd5\x55\x22\x4a\xd6\x29\x56\xc7\xbc\x22\xda\xaa\x11\x07\x96\x15\xff\x4f\xd2\x06\xac\x45\x45\x44\x68\x10\x86\x42\xd1\x04\x94\x5e\x4e\x88\x12\x8d\x6a\xd5\x7e\x50\xee\x5c\xd9\xd2\xa3\x1e\x88\x63\x6f\x96\xca\x97\x63\x72\x89\x5f\x8b\xcb\x99\xdc\x69\x4f\xb3\x3c\xef\x73\x9a\x4c\xdf\xab\x3a\x31\xbc\x44\x1b\xaa\x26\x84\x2e\x6d\xd2\x9e\x2d\x0a\x96\x08\x31\x10\xa9\xd0\x08\x18\x10\x69\x22\xe9\x12\xa2\xe0\x7b\x3a\xa0\x49\x57\xf6\x55\xd1\xc1\xb4\x9f\x80\x0d\xd9\xbe\x76\x9c\x67\xd8\xe3\x96\xb7\x61\xf3\xfd\xd6\x9d\x2b\xef\xad\x9c\x32\xe6\xbe\xbe\xa6\x65\x93\x62\x6d\x4e\x9e\x3f\xbb\xfe\xc6\x91\xc9\xc9\x0b\x97\xf1\x08\xc5\xb3\x18\x33\x8a\x5c\x07\x18\x01\x01\x58\x87\x64\xcd\x48\x83\x9c\x13\x29\x84\xe3\xca\xbe\x44\xfb\x86\x11\x3b\xa1\xc4\x9b\x26\x13\xa8\x80\x4e\x2c\x2b\xcf\x3a\xe3\xe3\x46\xc2\x8a\x4b\x15\x8f\x7c\x79\x68\x6c\xe6\x95\x27\x8e\x4f\x9d\x52\xf6\xe9\xb6\x12\x15\x76\xda\x83\x27\xac\x1f\xd4\xa1\x43\x12\x87\xad\x8a\x81\x10\xc6\x18\xeb\x1a\xf0\x6d\xc6\x33\x14\x47\x25\x6d\x47\x24\x43\x3e\x8c\x59\x03\x08\x00\xc8\x96\x1d\xf0\x50\x74\x28\x8f\x07\x91\x2e\xc6\x3c\xf5\x72\x42\xd8\xdc\xd9\x2b\x4f\x0e\xa5\x2c\xda\xd7\xb9\x6c\xeb\x57\x3a\xd7\x9f\xf0\xca\xf4\x99\x33\x7a\x7f\x7a\xa9\x77\xdb\x83\x59\x56\xe4\x2e\xfe\xd3\xf2\x24\xaa\xe0\x5d\x8f\x76\x02\x8b\xc2\x54\x6c\x0a\x2c\x0c\x02\x25\x74\x28\x15\xc4\x26\xc1\x7b\x0a\xe9\xb8\x36\x43\x42\x9a\xd3\x43\x44\x1b\xb1\xe1\x08\xde\xff\x0f\xa8\x26\x90\x81\x76\xdc\x54\xec\xc7\xd6\x97\x7a\xc2\x72\x0d\x1a\xfc\xb1\x22\x18\x78\x42\x5d\x50\x72\xc2\xc1\x3a\x66\x9f\x33\x65\x37\x3f\xba\x31\x67\x44\xef\x17\x36\xe8\x57\x33\x2a\xe5\x42\xf7\xa7\xe5\xd5\x33\x5d\x28\x5f\x17\x5d\x5e\xd8\x76\x58\xb3\x35\x25\x2f\x16\x2d\x7f\xa2\xd8\xf2\x4e\x57\x4b\x74\xfd\x28\x79\xdf\x03\x85\x34\x6f\x92\xbc\x40\x10\x0c\x27\x43\x39\x88\x74\x19\xfd\xf5\x16\x0d\x3c\x4e\xd5\x43\x9d\x34\x34\x13\x43\x23\x08\x04\xc9\xd0\x31\xc7\x00\x9b\x4b\x30\x35\x6a\xee\xf1\x55\xf4\xc5\x45\x37\x7e\x6e\xfc\x7d\x93\x7b\x9f\x8e\xf9\xa0\x46\x2e\x30\xed\xf4\xea\x75\x67\x99\xfd\xb5\xdf\xbe\x9e\x6f\xe0\x6b\x63\x92\xc9\x9e\x09\x3c\x19\xb0\xc0\x0f\x40\xa8\xfb\x88\xf0\xf4\x00\xc7\x14\xc2\x36\x8c\x34\x5a\xd0\x7c\x44\xca\x9a\x68\x92\x92\xc6\x5b\x80\xd7\x6c\x04\x79\xe1\xe5\x0d\xfa\xc3\x8a\xa5\xce\xb5\x70\xd5\xf9\xdd\xf9\xfb\x2d\x6f\xd9\xf5\x6b\xb9\x47\xcb\xe5\xfc\x88\x51\xdd\xe9\xb7\xb3\xc1\x11\x15\x27\x3e\xd8\x93\xbc\xf4\x31\x23\xc8\x63\x9d\x71\x7d\xc7\x12\x5c\x96\x30\x39\x87\x82\x30\x72\xc3\x10\x84\xb1\x2a\xc7\xb2\x0a\x11\x8d\x55\x55\xa2\xb0\x60\x22\xd9\x0a\x34\x5e\x4c\x23\x7d\x56\x96\x0b\x2c\x78\xea\x61\xcf\x30\x73\xe6\x49\xe7\x4f\x96\x98\x7c\x3c\xd3\xea\x23\x93\x2e\xa5\xee\x9c\xe3\x35\x1d\xf6\x4e\xd9\xc1\xde\x8b\xbf\xee\xa6\x35\x2b\x36\xab\xff\xb6\x5e\x3d\x7e\xed\x33\xf7\x70\x8a\x92\xe3\x55\x6b\xeb\xc6\x61\x17\x67\x3f\xb5\x8e\x58\x6b\x96\x9c\x3b\x7a\xe7\x85\x64\xeb\xb6\x74\xc2\x57\x4f\x2e\x5f\x1d\x7f\xa7\xe3\xe3\xd7\xcf\xb7\x3f\x3f\x3b\xfb\xe4\x65\x6b\xba\x0f\xeb\x53\x2d\x65\x7e\x6a\xb7\xeb\x47\xfb\x54\x4e\xde\x72\x48\xac\x64\xb1\x84\x64\xea\x2a\xe9\x09\x0a\x12\xc5\x90\xa1\x0c\x5d\x67\x55\x43\xa5\x19\x4b\xf7\x48\xc1\xe0\x23\x57\xf2\x0c\xd1\x35\x59\xcd\xb7\xe2\x7f\xec\xa6\xff\x17\xee\xc6\x37\x8a\x34\xfb\xf9\xe6\xf5\xeb\x95\x4e\x3f\xcf\x70\xbe\x43\xb5\x8f\x66\x75\x3f\x7d\xea\xb3\xbd\x85\x47\x8f\xfc\xe8\x4c\xa9\x2f\xea\x41\x3d\x79\xe1\x6a\x26\x47\x4a\xd0\x63\x65\x44\x4b\x98\x63\x74\x4a\x76\xd9\x20\x66\x1c\x60\x38\x51\x84\x02\x5f\x23\x65\xc4\x07\xaa\x48\x62\x10\xc6\xac\xab\x02\x95\x7f\x39\xdc\x3f\x66\x57\x1e\xca\xb5\xcf\x75\xbb\xd1\x7b\x47\x95\xb1\x15\xaa\xd6\x68\x56\xfd\xed\xa7\xfc\x17\xdd\xab\xbc\x3a\x69\x23\xf5\x53\x9e\xf5\xc9\x23\xc3\x71\x36\xef\x21\xd2\x8a\x81\x2a\x21\x4e\xe7\x7c\x0d\xfd\x55\x08\x00\x9e\x53\x4c\x59\x14\x48\x1c\xd1\xba\x4e\xc6\x81\xa8\x86\x9a\x2c\x91\x81\x89\x71\x5a\x8c\xa0\xb2\x87\x46\x2d\x7c\xb2\x6d\xdd\xac\x4a\x6a\x9e\x99\xf9\xdf\x7a\xff\x54\x15\xeb\x78\x9d\xba\xec\xac\x9f\xb7\xdc\x6e\x37\xa7\xbe\x97\x7d\x75\x12\x51\xfb\x28\xa4\x38\xd5\x61\x00\x29\x0b\x22\x25\x32\xae\xcf\x0b\x2c\x67\xc8\x7a\x04\x03\x1b\x21\xde\x31\x6c\x9f\x35\x45\x10\x49\xae\x64\xa8\x84\x19\xba\x38\xf1\x05\xd6\x60\xf3\xc6\x76\x57\xfb\xef\xcc\x34\xae\x76\xde\x1f\xb5\x49\xcf\x3f\xcf\x51\xe7\xee\x3b\xf3\xda\x8c\xa9\x79\xff\xb9\xfc\xe5\x95\xc3\xe5\xab\x24\xb1\xa2\xe1\x19\x85\x66\x03\x64\x19\x9e\x21\xea\x36\x1f\x6a\xb1\xc0\x8b\x32\x47\xd3\x58\xc5\x34\xc3\x5a\xbe\x2c\x78\x14\xc5\xbb\x96\xc6\x19\xbc\xca\x58\x20\x7a\x39\x29\x4e\xb7\x5e\x7d\x62\xd0\x89\x2f\xf6\x9e\x2e\xa9\xbd\x73\x70\xff\xf2\x79\x0d\xb2\xe0\x3c\x35\x9b\x60\xae\x66\x91\x3f\x6a\x88\xf9\x53\xd3\xc7\xb9\x4a\xb8\xc2\x21\x6f\xd0\x01\x8a\x45\x21\xe2\xf5\x40\xf6\x59\x11\x47\xba\xe6\x00\x43\x36\x23\x2c\xf2\xb4\x26\xd0\x31\x96\x5c\x8a\x13\x81\x46\x48\xa2\x0f\x48\x2f\x4c\x43\xa1\x33\xf8\xee\x82\xf9\x7d\x2f\x55\x75\x8f\x6c\x5c\x78\xb2\xdf\xb0\x3a\xad\x4f\x4c\xc8\x5b\xbb\x5d\xe6\x05\x5d\xb8\xaa\xcf\xfb\x4d\x6c\xf8\xc4\x7b\xd1\xc7\xa0\xc2\x77\x47\xb6\x7d\x4a\x1e\xfb\x7e\xd9\xd0\x8c\x9d\x6f\xd5\xbc\xad\x35\x58\xb8\xf7\xfa\xc9\xe2\x67\xae\x4c\x18\xd9\x33\x73\xbd\xba\xaf\x25\xf1\xc9\xe1\x8a\xc8\xb2\x79\xa4\x5b\x06\xd0\x23\x53\x13\x0d\x49\x0a\x09\x2c\xf2\x6a\x4c\x60\xd9\x66\x09\x0e\x84\x7e\x18\x48\xa4\xa3\x08\x16\x17\x01\xc7\x73\x5f\xfe\x1e\x3d\x9e\xbf\xdb\xda\x29\xe8\xcd\x3c\xbf\xf0\x4c\xdc\x67\x61\xbd\x52\xbd\x4f\x37\x3b\xb2\xf9\x8b\xce\x6b\xa6\x8f\xbc\xa6\xec\xae\xfe\x5b\xb7\xe4\x7d\x0f\xc6\x26\x3c\xd5\x88\xf8\x50\x42\x9e\x14\x93\xa6\x82\x04\xcc\xbb\xb4\x19\xc6\x24\x87\x81\x21\x6a\x14\x96\x29\x60\x90\x5c\x4c\xf1\x8e\x4a\x43\xf4\x0f\x29\xf3\xdf\x36\x18\x85\xbe\xaa\x60\xfd\xfc\xe1\xb7\xb9\xdb\xd4\x57\xa5\xa3\x4b\x9f\x9e\xb9\xb5\xaa\xaf\xfe\xdd\x96\x03\xbb\x27\x7f\xbe\xbd\x6c\xbf\x46\xc7\x93\x77\x04\x86\x9c\x0e\x0c\x0b\x6b\x3a\xcf\x2a\xa6\x8c\x00\x1d\xc9\x84\xc9\xa8\x94\x4f\x60\x1a\x44\xa1\xc9\x22\x55\x0e\x08\x53\xb3\xe3\x00\x01\x2c\x40\xdb\xe5\xd2\xb8\xc0\x8e\x65\x6d\x54\x22\xe7\x92\x82\xe5\xb3\x15\xec\xdb\xa6\xdf\x9e\xfd\xc2\xeb\xf3\x5f\xcb\x3b\xf1\x52\xc6\xe2\x95\x86\x55\x98\x57\x3b\xf7\xd0\xd4\x17\x19\xc4\x86\x09\x53\xc6\x75\xac\x8f\xbd\xae\xf7\x57\x9d\x1d\xd6\xe6\xe8\xd1\xb9\xd9\x0b\x1e\xbd\x50\x47\x3a\x73\x2c\x63\xad\x0e\x85\x33\x26\x91\x8a\xe0\x70\x04\x2d\x52\xa2\x82\x9d\xc8\x8c\x75\x5b\x47\x8e\xc1\xff\x75\x6b\x2b\x4c\xe4\x78\x40\x61\x2c\xc5\x63\x4d\xa0\x04\x02\xad\x18\x9e\x44\xd0\x00\x27\xee\x0b\x74\xc4\xa5\x40\xa3\xad\xcd\x8d\x83\x0d\x97\x77\x60\x6e\x6c\x2f\x59\xa8\xe4\x2f\x3d\xcb\xd6\x1d\x83\x9f\x90\xcd\xda\x2d\xab\xb2\x4d\x4c\x5e\xc8\x2c\x90\x90\x1c\x63\x4e\xe4\x43\xc8\x6a\xb2\x48\x6a\x7e\x18\x20\x96\x31\x91\xa8\x4b\x86\xca\x60\xc5\x8c\x43\x20\x31\x90\x0f\x18\xc3\xe6\x3d\x97\x8d\x13\x87\x3c\x72\xec\xb2\x0c\x7f\xcc\x3f\xb7\xb3\xcd\x8e\x82\xd5\xab\xdc\xbb\xbe\xf4\xdc\x6b\xcb\x72\x6d\x09\xad\xea\xf2\x84\x3f\xa7\x4c\x9f\xbb\x23\x7d\xec\xac\xc4\x37\x29\xaf\xcb\x02\x1f\x0a\xbe\xaf\x62\x5d\x8a\x15\x52\x52\x54\x85\x26\x95\x58\x42\x80\x71\xe4\x50\x05\xc0\x8d\x38\x8f\x31\x14\xdb\x00\x86\xe5\x92\x71\x1a\x9e\x90\x5a\x07\x7a\xda\xac\xca\x7b\x0f\x2f\xca\xb2\xf9\x16\xf9\x68\xce\xee\x4a\xc3\xde\xc1\xb7\x57\xf4\xf8\x9e\xbc\x97\x6f\xf6\x8e\x07\xad\xd3\x47\x5e\x4a\x18\x72\x64\x9a\x8a\x21\x84\x54\x68\xf9\xb2\xe7\x1b\x2c\x54\x63\x1b\x92\x86\xe9\x46\x7a\x80\x35\xdb\x07\x38\xa6\x78\x10\x22\x91\x66\xb1\x0a\x02\x99\x8e\xed\x97\xcf\x95\xd4\x42\x2b\xe6\x34\x3d\xf5\xdb\x1c\x98\xff\xec\x83\xad\xdc\xec\xc1\xbd\xcf\xed\x3e\xd1\xe4\xc1\xe2\x57\xda\x3d\x18\xb9\xe0\xec\x33\x32\x7d\xc4\xc8\x84\xbd\x01\x2d\xe0\x7d\x37\x72\x02\x64\xbb\xc8\x26\x30\x72\x59\x1c\x21\xdf\x96\xb0\x41\x8a\x11\x14\xa1\xe0\xda\x12\x05\x68\xda\x8e\x01\x40\x5c\x24\xcb\xba\x92\x46\x03\xaf\xe2\x3b\xd7\x77\x55\xcc\x60\x67\xdc\xb3\xe2\xf2\xa1\x31\x0b\x87\xf7\xcf\x13\x6f\xc9\xfb\xcb\x85\xcf\x2a\x1d\x79\x6f\xd6\xd8\xc6\x59\x8f\xd9\x2f\x9c\xf3\xe5\x4f\x7f\xb5\xa7\xed\xbd\x2b\x8a\x01\xb7\x76\xca\xd3\xe0\x83\x67\x57\xa8\x48\x9e\x5e\x6f\xc3\xbd\x5e\xad\xe6\x8c\x4b\xa9\x74\x23\x7d\x0e\x92\x89\x9d\x95\x79\xcf\xf6\x6d\x4f\x92\x55\xdb\x33\x18\xd5\x0d\x5d\x52\x92\x38\x85\x56\x42\xd5\x52\x35\xc3\x20\x7d\x83\x61\x22\x82\x54\x05\x5e\x57\x09\x55\xd4\x13\x09\x79\xa7\xee\x1c\x7f\xf6\x60\x89\x2d\x87\x2a\xec\xe9\x9c\xa3\x4c\xe9\x4c\xe3\xbb\x74\xcb\xfb\xca\xba\x94\xb7\x77\xae\xbf\xda\xe1\x72\x4a\x8d\x75\xe9\xb3\x98\x4f\x83\x95\x15\x43\xdf\x42\xac\xa7\x91\x86\x25\x2b\xa2\x69\x33\xac\x6b\x90\xa1\xcb\xb0\xbc\x8d\x15\xd7\x62\x98\x58\x35\x1d\x45\x96\x34\xc6\xf4\x10\x36\x60\x02\xdf\xea\xad\x85\x33\xee\xbf\xb1\xb2\x5a\x13\xed\xe6\xd4\x3b\xf7\xc6\xeb\xb7\xda\x74\xd9\x2a\x4e\xfa\xa5\xff\x88\xbb\x1b\x87\x3c\x1b\xcb\x7e\x96\x44\x09\x9f\x60\xe8\x5c\x18\x21\xd9\xa3\x61\xac\x87\xb2\xa7\x22\x2a\x96\x25\x8f\x74\xbc\x90\xc1\x46\xa0\x5b\xb1\x18\xc2\x88\xf6\x2c\x03\x63\x8c\x1c\x4b\xe6\xc9\xc4\xad\xa5\x06\x43\x9f\x2a\x3c\xd1\x7a\xf4\x00\x77\xfc\x8a\x4f\x6a\x5f\x1c\x7b\x94\xac\xb7\x67\xd4\x1f\x2d\xdf\x6a\x6f\x14\x18\x17\xfd\x19\x24\x11\x58\x35\x78\x05\x49\x3c\xa1\x50\xa2\x1e\x22\x68\xb9\xb4\x80\xc2\xc8\x80\xa6\x23\x48\xd0\xa3\x31\x65\x90\x02\x88\x02\xce\x14\x18\x52\xe6\x4c\x9f\xa0\xd8\x04\x2b\x1c\x49\xc5\xb7\x9e\xa9\xb8\x3e\xdb\xc1\xa6\xbb\x4b\x4d\x7c\x3f\xe5\xb8\x3e\x62\xc7\xe4\x05\xad\x1b\x2f\x99\xb6\xfd\x9c\xb5\xb7\x50\xee\xf4\xd5\x29\x89\x9b\x77\x24\xe5\x69\x2a\x8b\x0d\x1f\x21\x17\x10\x9c\x2f\x10\x66\x6c\x10\x7c\x84\x22\x29\x90\x09\x39\x12\xf5\xd0\xf7\x28\x40\x53\x1a\x08\x4c\x4c\xe8\x5e\x02\x4b\xd1\x99\x33\xc7\x64\x9c\x9b\x53\xdc\xba\x60\xeb\xd2\xef\x9e\x1b\xbf\xf7\xb8\x5f\x67\x31\xf9\x7d\xeb\x2f\xa7\xb0\xbb\x7b\x3f\xde\x3d\xf4\x42\xfa\xa8\x55\x09\xcb\xaa\x90\x52\x45\x40\x23\x8a\x71\x90\x0a\x75\xd1\x50\x58\x96\x8a\xe3\x28\x8a\x48\x07\x68\x91\xa5\xfc\x95\x2e\xa6\xea\xff\x8f\x26\x58\xa4\x4d\x27\x7c\x61\x78\xdb\x3f\xcf\x93\xb6\x07\x9f\xec\xcf\xce\xe6\x29\xf1\xd3\xa0\x8a\xdf\xfb\xb9\x6a\x04\xe6\x17\x1f\x9e\xdc\xf8\xb0\xe4\x4f\xbf\xe3\x99\xa5\x6f\x77\xad\xe6\xbe\x70\xbe\xf7\x1c\x5b\x6f\x50\x91\x56\x2e\x91\xb5\x47\xc7\xaa\x0d\xbe\xce\x5d\x62\xc7\xcd\xe3\x77\x27\x54\x5d\xbc\xe6\x5a\xeb\xf3\x85\x9b\xe6\x2f\x91\x3e\x4f\x99\xc4\x36\xdb\xc8\x52\x5c\x9d\x96\x74\xc7\xf2\x29\x44\x05\x34\xa9\xf0\x3e\xed\x90\x82\xa4\x45\x8e\xce\x48\x18\x69\x94\xca\x5a\x50\xff\xab\x2e\x66\x3c\x27\xe2\x99\x97\xbf\xc7\x16\xf6\xf3\xe2\xc3\x76\xac\x5b\xd6\xba\xf7\x0f\x23\x25\x46\xdb\x60\x57\x6a\x25\x0e\xef\xda\xe5\x33\xb4\x7b\xcb\x47\x65\xd4\x79\x75\x93\x77\x1d\xc5\x50\x34\x15\xd6\x95\x18\xcb\x8f\xa1\xa3\x87\x01\xd0\xe8\xc0\x00\x24\xa5\xe8\x4e\x20\xfb\x5e\xcc\xc5\xa1\x0a\x14\x9b\x33\x28\x4a\x01\x26\x4b\xe8\x46\x1a\xdf\x63\xe8\xdb\x3b\x26\x2d\xea\x37\x7a\xc3\xfa\x77\x6a\x0b\x1f\x37\x89\xc7\x6d\xec\x74\x39\xb3\x4a\x76\xeb\xb2\xa4\xe0\xea\xae\x0d\x3b\xee\xd8\xf1\x5f\x6e\x88\x55\x26\xae\x7b\x8b\xb2\xf6\x37\xa9\x71\xaa\xd7\xd1\x13\x39\x37\x89\xdd\x2b\x4f\x7e\x05\xfd\xb8\x74\xf0\x8e\x72\xd7\x66\x66\xcd\x75\xe4\xc5\x5f\x8f\xb1\x06\xb0\xad\x9e\xef\x18\xb1\x25\x3a\x53\x7c\x1f\x95\xfd\xf8\x99\x47\x1d\x5b\x67\x13\xaf\xde\xd9\xd1\x69\xc8\x90\x3f\xee\x2f\x7d\xfd\x7c\xf6\xff\x1b\x48\x94\xda\xb0\x6f\xf6\x4c\xb9\x3f\x7f\x71\x98\xcf\xe1\x42\x55\xa6\x5e\x7c\x65\xfc\x4c\xe9\xf9\x21\xea\x46\xae\x8c\x85\xce\xaa\x0f\xbf\xbe\x97\xe3\xfa\xd9\xa7\xcf\x7f\x8e\xb7\xf5\xbc\x9f\xbc\xad\xea\xda\x3c\x2b\xe8\x5c\xa0\xaa\x16\xa5\x72\x7c\x10\x9a\x46\x18\xfa\xba\x60\x50\x2c\x34\x1c\xc1\x80\xa2\x2f\xba\x81\x02\x15\x41\x06\x9c\xcc\x13\x3a\x4c\x83\x56\x98\xbd\x48\xb5\x49\x39\x9e\x8e\xbe\xf3\xb0\xaa\x7d\x69\x6c\x81\x87\xa5\xd8\x2f\x9f\xb7\xff\xcc\x2c\xcd\xd9\x13\x16\x9c\x78\xed\xe0\x14\x26\x79\x87\xa1\xce\x0b\x20\x66\x22\x4d\x72\x2c\x57\x01\x61\x40\x02\x99\xe3\x54\xdd\xe3\x04\x84\x98\x08\xea\x21\xf4\x6d\x8f\xd6\xfd\x90\x65\x49\x97\xd4\x0c\xd1\x4b\x83\xc1\x76\xa8\x78\xc5\x2d\x35\x4a\x4e\x9a\xf0\xdb\xa3\x77\x9b\x34\x38\xf6\xfa\xe8\x21\x1f\xd6\x3d\xdb\xf8\xf8\xca\xae\xe3\x0b\x8c\x9c\xdd\xa9\xea\xd0\x36\xc9\x5b\x65\xc7\x08\x0d\x07\x89\x0a\xc4\x91\x21\xc8\xa4\x49\x41\x64\x08\xbe\x6f\x12\xbc\x06\x79\x82\x97\x9c\x38\xf2\x09\x4a\x44\x4c\x60\x08\x72\x88\xe3\x18\x2a\x89\x57\xf9\xd0\xc3\x86\x3d\xff\xbc\xb5\xab\xf9\xcd\xcd\x23\xfd\x89\x55\xbb\xac\xfa\xb9\x69\xf1\xd2\x6b\xce\x1f\xfb\xa1\xf0\x9f\xf5\xb4\x7d\x0d\x5f\x49\x9f\x4b\x64\xe2\x90\xe5\xd0\x10\x2d\xc9\x34\x05\x68\x13\xaa\xa7\x47\x31\xe5\x1a\x84\x4c\x1a\x8a\x21\x4a\xae\xe2\x43\x21\xc4\x00\xda\xa6\xc4\x9a\x02\x27\x41\xd7\xf5\xfd\xc4\x21\x0f\xd9\x97\xeb\xfd\x37\x2f\x3d\xcf\x2e\x32\xbd\x66\x6e\x2c\x96\x9d\xab\x97\x73\x77\xad\xd5\xd5\x8e\xd7\x3c\xc7\xed\x1f\xf5\x63\x4a\x90\x44\x96\x89\x62\x0a\xd8\x83\x91\x0f\x0d\x5f\x13\x80\xcd\x04\x0e\xa2\x19\x5e\x75\x7c\xda\xe7\x28\x0b\xbb\x38\xf4\x48\xdb\xf7\x05\x36\xc4\x9c\x19\x21\x57\x54\xd3\x60\x4c\xfd\x32\xa9\xf6\x2a\xb2\x53\xd5\x96\xfb\x36\x8b\x79\xdf\x7c\x3c\xe9\xc7\xa6\xe0\xe7\xef\xbb\x5c\xcb\xdc\x77\xf1\x9e\x41\xa5\xa6\xdf\xbc\x95\xbe\x0e\x4b\xc2\x90\x69\xec\x5a\x98\x92\x2d\x87\x24\x68\x3f\x22\x70\x04\x18\xcf\x64\x14\x0b\x46\x14\x0b\x63\x9e\xb7\x30\xa4\x29\xcb\x0c\x63\x87\x43\x0c\x26\x69\x25\xfa\x1b\xe6\xba\x95\xfb\xff\xd6\x6d\x4f\x6d\x58\x60\x57\x4a\xc6\x17\x0f\x98\x46\x4b\x6f\xee\x34\x8b\x8e\xd3\x9b\xce\x70\xbe\xeb\xed\xaf\xbf\xd9\xec\xd9\xfe\xcc\xeb\xce\x47\x95\xea\x5f\xfb\xe1\xed\x4d\x3d\xbf\x5e\x9c\xbc\xcb\xd5\x21\x44\x07\x73\x6e\xa0\xb1\x4c\x2c\x33\x9a\x8f\x0c\x11\x06\x2c\xef\x05\x04\x2f\xb3\x94\x27\xe9\x26\xc3\xf8\xbe\x12\xba\xb6\x85\xb1\xe6\x33\x11\x9b\x86\xdc\x10\x8c\xee\x75\x86\xf9\xb5\x78\xfe\x55\x0f\x16\x74\x9c\x35\x61\xd2\xea\x3e\x2d\x1a\xe2\x75\xbb\xdb\xcf\xaa\x5f\xb3\x6c\xc9\x36\xe0\xc0\xcd\x24\x1a\xd3\x00\xe0\x85\xbe\x2b\x23\x36\x50\x4d\xca\x8d\x2c\x97\x55\x23\x91\xd2\x7c\xce\x62\xf4\x98\xa2\x23\x5e\x05\x84\x42\x1a\xc8\xc3\x8a\x19\xc6\x66\x0c\xd2\x18\x69\x39\xfe\xbd\x1f\x3a\x2c\xd8\xb5\xe8\xa8\xdc\x62\xc7\xf5\xcf\x2e\xb5\x7e\x36\xf5\xe1\x9a\xe9\x07\x26\x19\x9b\xfa\x8f\xc8\x3a\xaf\xd4\xd0\xcd\xb7\x92\xd8\x6a\x91\xc3\x58\x41\x2a\x4f\xfa\xa2\x49\x5a\x84\x1d\x33\x30\x16\x28\x85\xd2\x05\x3b\xa4\x34\xec\x5b\x02\x13\xca\x82\xec\x33\x36\xe1\x01\xc1\x95\x19\x55\x49\xdc\x5c\xfc\xfc\x82\x54\xaa\x68\x2e\x75\xd6\xaf\xfd\x67\xd4\x60\x52\xbf\x5d\xf5\xa0\x5f\xe3\xcf\x85\xbb\xca\x80\x9e\x19\x8c\x4e\x6f\x7d\xb5\x21\x89\x3e\xd1\xb2\x2f\x19\x14\x61\x69\x6e\x08\x79\x5d\x93\x4c\xc4\xa2\xd0\x54\x23\x4f\x09\x24\x99\xc5\x8e\x23\x12\xaa\x40\x45\x82\x1d\x33\x38\x44\x8e\x6f\x29\x2e\x48\x60\x12\x76\xf3\xfb\x6a\x39\xeb\x0d\x5c\x7a\x74\xd6\xa4\x0b\xe1\x3b\x3f\x69\x3b\xce\x9c\xca\x39\xa1\x76\xc9\xa1\xa3\x8e\xdf\x86\xef\xee\x3f\x95\x3c\xb5\x0c\x6b\x09\xa4\xe1\x59\xa4\x40\x43\x09\xb9\x96\x68\xf8\x11\x61\x07\x3a\xfb\xd7\x7b\xdf\x82\x1a\x0e\x48\x5d\x30\x35\x88\x78\x49\xe0\x63\xd3\x26\x15\xde\x50\x13\x33\x7a\xc3\x77\x8e\x1f\x68\x76\xf9\xd0\x2f\x5d\x53\xca\x9d\xdc\x51\xc0\xad\x12\x2c\x7d\x6d\x55\x94\x72\x6e\xfb\xd7\x6d\xc6\xda\x65\x4e\xdb\xc9\x83\x4c\x59\x4f\x64\x28\x99\xf1\x22\x4a\xf5\x8d\x08\xc8\x1a\x42\x12\x1d\xb0\x96\x18\xfb\x88\x60\x08\x3e\xc2\x38\x72\xfd\x20\x94\x30\xe3\x42\x12\x43\x60\xf3\xe1\xcb\x2b\xbc\x7a\xfe\xee\x29\x15\xa2\x71\x23\x4f\x8a\x65\x1e\x9f\xaf\xf6\x7c\xdc\x5b\xfd\x1f\x8d\x6e\xed\x04\xd5\x7f\xdd\xb1\x64\x7e\xd8\xa4\xf8\x77\xc9\x3b\x0b\xa5\xd8\xe3\x62\x4b\xe7\x6d\x83\x55\x03\x43\xe1\x78\x44\x8a\xc8\xe0\x44\x3a\x72\x65\x5b\x56\x7c\x43\x08\x25\x49\x0c\x1d\x04\x55\x57\x93\x80\x15\xf0\x69\xac\xf0\xc4\xc7\xc6\xb4\xe6\xaf\x6f\x58\x3f\x6f\xcb\x51\x6d\xff\x85\xab\xd3\x8f\xb6\x6a\xb0\xfb\xcd\xa2\x4b\xda\x5d\xaf\x54\x7e\xf3\xca\x89\xf9\xd6\x24\x51\xef\xc8\x59\x32\xe6\x19\x51\x23\x24\x5f\x0a\x45\x27\x62\x7c\x35\x64\x08\xa4\x08\x12\xe5\x84\x01\x30\x29\xce\xf5\x7c\xde\xf5\xdc\x80\x77\x18\x32\xb2\x3d\x25\x01\x44\x37\x7e\x6c\xfb\xd7\x3e\x4f\x7d\x3e\x60\x58\x69\xe7\xd8\xba\xe6\x5f\x7f\xfc\xc7\xde\xfc\xd5\x06\xcc\xea\x31\xaf\xf6\x8a\x53\xcf\x87\xbc\xb9\x2a\x79\x39\x4c\xc4\xa2\x1e\x39\x9c\x4b\x21\x23\x34\x4c\x9f\xd3\x64\x5d\x95\x2d\x2e\x24\x59\x82\xc3\xb1\xe1\xa9\xaa\x21\x2b\x3c\x14\x69\x48\x29\x04\xd2\x08\x44\x78\xff\x6f\x85\xff\x33\x45\xf6\xdf\xc0\xb9\xd4\x86\x4d\x52\x52\x32\xbd\x48\xc3\xcc\x59\x3a\x35\xfb\xef\xdb\x3f\xf9\xbc\x7b\xdd\xcf\xa7\x2e\x49\xb9\x12\xbe\x32\xbf\xe5\x84\x4d\x65\xb2\xed\xbb\x9b\x31\x38\xfd\xfe\x2b\xcb\xd2\x57\xce\x26\xc6\xb0\x05\x19\x28\x8a\xe8\x06\x81\x1a\xf0\xb2\x12\xc1\x30\xb4\x22\x3f\x22\x42\x49\x86\x28\x74\x1c\x89\x57\x19\x1a\x19\x56\xec\x73\x18\xc9\x7a\x68\x13\x69\x4c\xcd\x7f\xab\x53\xcf\xba\x8b\x4a\xd6\x98\xf4\xfa\xce\xc2\xe3\x52\x36\x3e\x2d\x59\x67\x47\xee\x1e\x15\xda\x92\x4d\xda\x6d\x18\x2f\x16\x9c\xb2\x00\x25\xef\x82\x8c\x7c\x45\xa7\xc3\x98\x0c\x58\x89\x04\xb1\x6b\x8b\x14\xe0\xb0\xa6\x2b\xb4\x46\x83\xd8\x97\x91\x6c\x29\x0e\xe5\x32\xa1\x12\x69\x9c\xc8\xcb\x6c\x0c\xd2\x08\x79\xc5\x67\x9f\xde\xff\x74\xdb\xe9\x1f\x1a\x35\xdf\x73\x5d\xdb\x68\x54\x5f\xd8\xfe\xe9\x90\xae\x43\x36\xb7\x1c\x51\xae\xd4\x88\x63\x25\x4a\x24\xf1\x4e\xf7\x28\x18\xb2\x8c\x28\x58\xa6\xa2\xc7\x24\x47\x01\x5f\x14\x70\x10\x02\xc9\x10\xf8\x98\x94\x14\x92\x66\x44\x43\xd6\xf5\xc0\x60\x18\x10\x5b\x16\xa3\x72\x89\x5b\x9c\xcc\xa5\x4a\x3d\xd6\xce\xa9\xd2\x72\x77\x93\x7e\x33\xc6\xae\x1b\xff\xfe\xb4\xf8\xb7\xaa\xb5\xe6\xee\x5f\xfd\x53\x2e\xb8\xc9\xfd\xa6\x66\xfa\xec\xca\x12\x86\xcc\x5b\x86\xa0\xd0\x01\x69\x4b\x91\xe8\x10\x26\x84\x1a\x8d\xbc\x48\xb0\x25\x08\x69\x59\x71\x6c\xd5\x8d\x18\xce\xa2\x64\x1e\x38\x11\x10\xd4\x40\x25\x12\x90\x73\x86\xb7\xaa\xdc\xb8\x37\x99\xff\x87\xa3\xbb\x6f\x17\x2a\x53\xe6\x1a\x67\xfc\xfe\xbe\x71\x96\x55\xd6\x96\xdf\x7e\x6e\xca\x3b\x13\xc7\x35\x4c\x22\xd2\xc3\x10\x84\xa9\xb1\xae\x28\x21\x88\x28\xcc\xeb\x9a\xcf\x30\x26\x09\x54\x45\xb4\xc2\x28\xf4\xe9\xd0\x17\x49\x02\x84\x8c\x04\x39\x92\x17\x24\xdf\x93\x5e\xf2\xb9\xf9\x37\x60\x3c\xb5\x61\xe6\x94\x3c\x19\x5f\x94\x37\x8c\x69\x7a\xbf\xee\x5e\xb5\x79\x96\xa2\xa5\x73\xd4\xb0\x56\xfe\x74\x71\xff\x80\x39\x2d\xff\x08\xef\x3a\x6f\x7d\xf4\xc5\xd8\x7b\xd9\x21\x4e\xde\x3f\xa4\x49\x3f\x26\x22\x06\x04\x01\xd2\x34\xe8\x18\x22\x2f\x4a\xa2\x40\x39\x81\x29\x53\xac\xcf\xb9\x3a\xcf\xfb\x34\x44\x71\xac\x1a\xa1\xa6\xf1\x2c\xe6\xd3\x98\x4b\x79\xb9\xf8\xa4\x2c\x1f\xdc\x2e\xbf\xe4\x8b\x85\xfd\xbc\xfe\x17\xf7\xee\xcf\x62\xf4\x6c\xf4\xe7\x84\x05\xf4\xcd\x2f\x27\xe7\x9c\xa9\x3d\x4c\x5f\xe3\x30\x31\x82\xeb\x59\x2a\xc3\x40\x4a\x77\x80\x2c\x72\x0c\xad\x04\x91\x2d\x4b\x81\x24\x3a\xa6\xec\xfa\x20\xe2\x78\x49\x10\xb1\x65\x43\x03\xb2\xa2\xab\x9a\x54\x9c\x86\xc6\xb7\x4f\xa5\x1f\x9e\x6d\xaf\x3e\xbe\x47\x87\x1a\xe2\x90\xfa\xe1\x8d\xec\x79\x8a\x8e\x95\x9e\x7e\xb7\x32\xdf\xc0\x8f\xf9\xac\xa5\x1e\xdc\x4f\x5f\xe7\x27\xe1\x79\x88\x15\x64\x90\x06\x0f\x00\xed\xf9\x54\x44\x53\x11\x83\x05\xc5\xd5\x38\x15\xb0\x21\xe1\xc9\x11\x1d\x43\x96\x96\x64\x1d\x6a\xc8\xb2\x5c\x46\x09\xd4\x34\xbc\xbf\x3e\x4c\x6d\x72\x2d\x1b\x31\x2c\x67\x7b\xd8\xbf\x9b\x31\xa9\x5a\xbd\x07\xf5\x36\xbe\xe6\x95\xfa\xf8\x87\xab\xdd\x5b\x64\x99\x5a\xbd\x40\xfa\xa0\xfd\x34\x78\x95\x06\xa0\x91\x08\x28\x8d\x0e\x5c\x0d\x70\xb6\x8c\x05\x5b\xb4\x14\x15\xa9\x3a\xc7\xd3\x02\x6d\x20\x0a\x2b\x16\xe9\xd3\x16\x6b\x9a\x06\x76\xf5\x34\xc4\xdf\xf3\xb8\x35\x75\xeb\xbe\xfe\xee\xf1\x82\x83\xf2\x3f\xb8\x98\xbd\xd6\x7d\xe6\x41\xb6\x93\x65\xf2\x1e\x6b\x38\x6a\xcc\xa3\x8f\x3b\x14\xe9\x9e\xc4\x41\x81\x81\xc7\xea\x84\x40\x1b\xb1\xaa\xcb\x90\x76\xa3\x58\x37\x78\xd3\x61\x04\x59\x21\x74\x4c\xb1\x81\x4e\x92\x1e\xa7\x7a\x52\x24\x70\x32\x19\xf3\x1e\x2d\xb0\x2f\xc9\x1b\xfe\x0d\x72\x4e\x6d\x58\xa2\x6f\xee\xff\xd2\xf8\xfa\xa3\xdb\x0c\x1d\xd3\xa8\x33\x1a\xde\xa3\xfe\xed\xdc\xaf\x6e\x1e\x7a\x63\x9a\x25\x1e\xbe\x5a\x8a\xda\xa6\x9e\xcc\x3a\xbd\xed\x1c\x2f\x79\xa9\xaf\xa9\x84\x1b\x12\x28\xc4\x84\x48\x21\x1b\xc8\x9e\xe4\xb1\x32\x16\x34\xc7\x47\x31\x70\x45\xc6\xf4\xa0\xc8\xd3\x2a\x17\x45\x04\xc5\x78\x10\x13\x7a\x1a\xc2\xeb\xc1\xbf\x2b\x4d\x46\xec\x1d\xde\xb6\xe0\xbc\xcc\x5d\x1b\xf4\x59\xb3\x6d\x7b\x44\xcf\xdf\x30\xe5\x95\x0f\x3f\x7b\xb3\x4f\x9e\xc9\x23\x1f\xa7\x2f\xe4\x84\xa9\x6f\xb1\x40\x20\x4d\x8e\x03\xb4\x42\x86\xa4\x2c\x88\xbe\x83\x38\xd7\x12\xc5\x18\x22\x17\x06\x66\x1c\xb2\xd0\x37\x09\x02\x87\x5e\x28\xd0\x48\xb6\xb5\x28\x71\x1e\xf1\x3b\x2e\x4d\x69\xfe\x47\xfd\xc7\x6d\xce\xc9\x1d\x86\x4c\xbf\xf2\xf8\xfd\x7e\xc7\xb7\x5d\x38\xb0\x94\x38\x13\x56\x39\xf9\x41\x83\xc6\xaf\x26\x51\x9b\x49\x88\x54\xac\xc6\x02\xe7\x85\x3c\x94\x62\x16\x11\xaa\x4b\x7b\x96\x12\xb1\xac\x00\x14\x01\x5a\xa2\x23\x4b\x04\x70\x3c\x0e\x28\x36\x32\x0d\x8a\x4d\x83\xd5\x12\x3e\x9d\xb7\x7b\xc7\xe0\x7d\x25\x1a\xf3\x4f\x66\xdf\x59\xf2\xcb\x8c\xbe\xb5\xc9\x6f\x88\xf7\x6b\x8d\xfa\x6c\x03\x39\x78\x75\x53\x21\x79\x5c\x73\x4e\x93\x35\x3f\x92\x75\x97\x96\x25\x12\x19\xa2\xec\x63\x9f\x36\x83\x88\x24\x91\x1a\xd9\x0a\x45\x6b\x20\x20\x4c\xc1\x76\x15\x5a\x03\x02\x74\x45\xf5\x1f\x33\x32\xff\x93\xfa\xff\x06\x97\xa7\x36\xcc\xf8\x6a\x4a\xc6\x17\x53\xbf\x3c\xdd\x73\xf4\xb5\xf2\x2d\x3e\xa8\x58\xf6\xcd\xda\x35\xc6\x55\xcf\xdb\xca\xfd\xad\x5d\xa9\x6d\xe3\x56\x1f\x9c\x39\x58\xba\x73\xd6\x4a\x9f\xd5\x72\xe2\x76\xa3\x23\x32\xba\xed\xc6\xba\xcc\xb3\x2c\x86\x3e\xcd\x87\xc8\xd0\x90\xa3\x53\x44\x24\xdb\x5a\x10\x29\x11\x20\xf4\x30\xc4\x0a\x4b\x03\xd1\xd3\x61\x5a\x54\xa3\xf6\xf3\xbe\x65\x87\xf3\x53\xe3\xe9\x3f\x9d\xfc\x7a\xfa\xae\xe6\x63\x32\x96\x78\x7e\x35\x75\xe4\x8c\xeb\xd6\x3b\x74\x8b\x31\xa7\xaa\x1f\x48\xde\x6e\xe5\x04\x35\x8c\x59\xc8\x7a\x51\xec\xb8\xba\x0c\x5d\xc1\x95\x4c\xec\x50\x94\x2d\x47\xa4\xa8\x87\x26\x42\x8c\x07\x04\x8e\xe6\x80\xaf\x6a\x9e\xef\x1b\x69\x78\x9a\x3c\x1d\xb7\xb7\x16\xff\x63\x96\xec\xc3\xc0\xef\x1f\x17\x9e\x90\x6d\x62\x8f\x15\xbb\xbf\xfe\xf0\xf1\x2d\xbb\xe2\x8c\x6b\x6f\xee\x3d\xf3\x20\x79\xa2\x0c\xd6\x24\x08\x5e\xb0\x54\xcf\xd6\x04\x42\x0e\x1d\x42\x97\x0d\xd1\xf2\x25\x8e\x07\x9c\x19\x50\x90\xe1\x6c\xa0\x90\x92\xe1\x5b\x16\x90\x6d\x91\x61\x9d\xb4\x7a\x77\x3f\xbe\xd3\xba\x61\xad\xca\xd5\x67\x1d\xed\x70\x48\x6f\xd1\x3a\x0a\xb3\x9d\xbc\xd8\x6e\x65\xb3\x32\xcc\xef\xf7\x5b\x6c\xaf\xb7\xa8\x78\xfa\x3c\xe4\x12\x2b\x50\x49\x82\xa1\x5c\x53\x72\x55\x1b\xba\xd0\xb4\xa3\x50\x74\x1c\x25\xc0\x56\x0c\x23\x91\xd3\x22\xc3\xf7\x79\xcf\x51\x54\x56\x60\x35\x1c\x23\x56\xfd\x07\x3b\xea\x3f\xa9\xff\x6f\x00\x74\x6a\xc3\x4c\x29\x19\xfa\xbe\x98\xfa\xe7\xdf\x3d\xe1\x6e\x1b\xba\xe8\x51\x86\x83\x0f\x9b\x54\xe9\xb8\x6b\xde\x43\x3d\x6f\xe5\x57\x9f\xe7\x9f\x6e\x46\xb7\x3b\x3d\x78\xb5\x0d\x4c\x5e\xea\x0b\x0a\xc1\x38\x9c\x18\xe9\x8c\x4a\x8b\x22\xb0\x3c\x18\xba\xae\x1c\x53\x56\x2c\x6a\x1e\x4b\x11\x06\xcf\x23\x15\xcb\xae\x1a\x45\x6c\x40\x49\xbc\xcf\xa6\x71\xea\x2f\xad\xf2\xcd\xa1\x35\x23\x4b\xd5\x7e\xda\xe9\x26\xf9\xa8\xeb\xa6\xf5\x1d\x98\xf9\xf3\x07\x94\x3f\x9b\xad\x43\x8e\xf9\xd9\x94\xfc\x56\x12\x87\x2f\xf2\x14\x6b\xc6\x0c\x27\x7a\x22\x27\x01\x2e\x8a\x3c\x9b\x96\x65\xc9\xa5\x4d\xcf\x33\x55\xd9\x76\x04\xcf\x97\x39\x92\xd3\x68\xe8\x40\x03\x90\xc8\x8a\x50\xe2\x3c\xea\xb9\xe7\x66\xa3\xe2\x65\x0f\x1e\x0f\x82\xd2\x19\x67\xde\x5a\xbe\x39\xfb\x96\xb1\x0b\xae\xe7\xcf\xa6\x5f\x58\xb4\x66\xdc\xe4\x8e\x5e\xfa\xc6\x47\xa5\x41\x93\xe2\x44\x2a\xf2\x69\x11\xb8\x14\x76\xb5\x10\x4b\x3c\x69\xd9\x04\xa0\x19\x23\x52\x08\x18\xeb\x1a\x66\x64\x11\xf8\x4c\xc4\x46\x48\xf1\x58\x9f\x4b\xc3\x8c\x62\x78\xca\xc2\x3d\x6d\x67\xe7\xab\x97\x33\x27\xf5\xb0\x63\x39\xbb\x55\x31\x5c\x6e\xee\xce\x22\x07\x66\xf4\x1a\xd8\xea\x4c\xb7\x05\x1b\xd2\x37\xf7\x34\xe1\x6e\xf5\x3d\x1f\x46\x62\x48\x87\x2e\x22\x28\x6c\x22\x2e\xe6\x42\x9b\xe5\x19\x10\x2b\xa2\x23\x93\x98\x40\x16\x08\x11\x34\x6d\x40\x86\xbc\x67\x4a\xb1\xf7\xb7\x75\xcc\x83\x2c\xff\x37\xac\x34\xb5\x61\xe6\x7c\x29\x99\xfb\xbf\xf0\x0f\xbb\xbc\x8d\x5f\x1b\xb0\xf5\x82\xf0\x65\x6a\xcf\xc2\xa5\xdf\x1a\x71\xe5\x5e\xf3\x2a\x2b\x5f\x1d\xdb\xac\x5a\xb9\xda\x77\xcf\x67\xe8\xb7\x70\x6e\xf2\x36\xb7\x21\x53\x3a\x08\x2c\x8b\x60\x11\x00\x61\xa8\x4b\x32\xf2\x8c\x40\xb2\x58\x92\x43\x82\x1e\x13\x3c\xe7\x91\x26\x36\x34\x2c\xfd\x7f\xac\xbd\x65\xb8\x16\xe5\xf6\x3f\x4e\x4b\x83\x74\x4b\x23\x20\x35\x49\x49\x6e\x42\x40\x52\x3a\x27\xef\xb9\xe7\x9e\xee\x19\x05\x71\xd3\x48\xb7\x48\x49\x2a\x5d\xd2\x0d\x02\x12\xd2\x48\x77\x77\x83\xe4\xff\x3a\xdf\xf3\x3f\xc7\xb3\xe5\xd9\x17\xbf\x6b\x5f\xcf\xfb\xfb\xc5\x7a\x9e\x59\xbd\x3e\xeb\xb3\x48\x8f\xf5\x15\x95\xb2\x92\x29\x4f\xf6\xcd\x6e\x75\x2d\x6b\xbe\x6d\x47\xcc\x15\x39\x86\xf5\x79\xd3\x6f\xd1\xee\x2c\x0f\xb6\x6d\x3f\xd6\xe1\x70\xfa\x7c\xc5\x97\xaf\x78\xd3\x52\x8a\x63\x89\x6b\xc3\x40\xa4\x04\xcd\x10\x28\x45\xe6\x94\x50\xe1\xf8\x08\x83\x8a\xce\x87\x90\xd1\x02\xd3\xf1\x3d\x60\xf1\x0c\x4f\xd8\x0a\xc1\x53\x4c\x68\x3b\x38\x4c\xa6\x2a\x9f\xbd\xef\x5d\xaa\xc3\x45\xa3\x6b\xb7\x0f\x95\x1a\x96\x76\x7f\xd5\x4a\xed\xf1\x45\x5b\xa2\x62\x54\xd9\xa0\xf9\x8d\x77\xb5\xb2\xa6\xac\x91\x10\xd3\x5a\x49\x2b\x12\x59\x42\x30\x55\x80\x3c\x4c\xa5\x09\x1e\xd3\x1d\x2e\x0a\x38\x45\x43\x7e\x14\xf1\x92\xcd\xc2\x28\x02\xb6\x11\x5a\x8e\x20\xa0\x48\xe1\xff\xc7\xeb\xff\xcd\x9d\xb1\x2e\xc3\xa5\x16\x13\x36\xe4\xef\xbd\x31\xf7\xcd\x16\x5f\xdc\xbe\xb4\xf0\xb7\xa0\xe4\xd7\x27\x50\xe9\xb2\x05\x8a\x6e\x28\x5f\x96\x2e\x1f\x3f\x7f\xc8\x12\x02\x0f\x71\x9a\x03\xae\x6a\xeb\xa4\x6a\x79\x22\xe0\x10\x4d\x04\x98\x81\xe3\x8e\x87\x7b\x32\x25\x47\x92\x19\xba\x81\x28\x98\x2e\x41\xaa\xb8\xfc\x77\x43\xf5\x3f\x1e\xff\x43\x23\xe9\xc4\x84\xd4\x58\xaa\x7f\xe4\xf9\xe7\x1b\xfc\x55\xf4\x86\x5f\xbd\xdd\xab\xe9\x5d\x7f\x1a\x29\x2f\xba\x9a\x31\xe7\xa1\xa5\x45\xa7\x6c\xfb\x73\x4a\xdf\x2f\xf7\xb8\xfd\xd7\x0f\x8c\x23\x27\x94\x8f\x5c\x85\x35\x78\xcc\x20\x14\xc1\xa6\x6d\x02\x63\x14\x51\x80\x0a\x26\x86\x16\xe3\xb9\x0e\xef\xc3\xc0\xb3\x39\x81\x0d\x21\x29\xb9\xa6\xc3\x3b\x7a\x6c\xf7\x69\x92\xf5\x3b\xe8\x1d\xd7\x35\x18\xd6\xf1\x5a\x4b\x62\x0c\xb3\xbd\xcf\x97\xb5\xfa\xae\x5f\x3a\xe0\x29\x2c\x76\xa9\x4e\xc7\x62\x5d\x56\xc6\xef\xa3\x30\xba\x15\xf1\x94\xc9\x22\xc5\x08\x30\x59\x0c\x14\x95\xf7\x05\x89\x15\x75\xca\xc4\xa0\x8a\x51\xd0\xc2\x48\xe4\x29\x84\x67\xe3\xa6\x6a\x01\x15\x4f\x6e\x1c\xbc\xaf\x7b\x96\xc5\xb0\x6e\xfd\xb2\x24\xdf\xb4\xc4\x80\xcd\x9d\xfa\xa9\xf9\x4e\xfc\xbe\xf8\xfb\x32\x45\xaf\x7f\x7e\xa0\xe3\xad\x0c\x05\xe3\x88\x6a\xf4\x1c\x47\xd2\x35\xd1\x13\x59\x46\x05\x82\xab\x61\xbc\xe6\xe8\x9c\x8f\x2c\x88\x3c\x45\x37\x68\x60\xa9\x64\x60\x03\xda\xc6\x7c\x37\x24\x65\x9f\x71\x92\x59\xd0\x9c\xff\x55\xb9\xcc\xb5\x9f\x34\x98\xb1\x67\xfd\xcf\x73\x6a\xf5\xcb\x9f\xef\xc0\xd0\x21\x19\x53\x67\xfe\xb4\xfd\xac\x76\x87\xb3\x95\x1f\x55\x27\x8e\x47\x73\x58\x95\xe4\x24\xd6\x8d\x98\x28\x94\x24\x57\x54\x18\xc7\x96\x7d\x2b\xe4\xc3\x90\x0c\x5d\x15\xd9\x9e\xeb\xea\x2a\xe2\x04\x1f\x70\x02\x01\xad\x7f\x95\x86\xef\xa9\xfe\x87\xf0\x15\x89\x09\xa9\xd3\xf4\xfd\x47\xb2\xd3\xb9\x56\x9b\x82\xc3\x6b\x4f\x99\x54\xe4\x78\x8e\x6a\x53\xda\x6f\x48\xfb\x94\x3c\x1d\x9c\xb4\xcf\xde\x5d\xf5\x18\x38\xec\x9b\x0c\x65\xe3\x98\xec\x10\x62\x24\x98\x3e\x0f\xd8\x48\x22\x54\x8f\xe3\x75\x0e\xb0\xb6\xec\xab\x38\x1f\x89\x94\xa5\xaa\x18\xa4\x6d\x49\xe3\x5d\xd6\x77\x04\x0e\x0f\x45\x3c\x19\x02\xef\x8f\xa6\xde\x3b\x9c\x09\x2b\x94\xaf\xd9\xca\x1b\xcf\x57\xec\xec\x79\x7e\xe2\xc6\x11\x67\x7a\xd4\xf8\x0a\x7c\x4e\xd4\x3a\x72\xf6\xb3\xe5\x29\x9b\x49\xc5\x06\x2e\x49\xbc\x89\x43\x55\x56\x18\x8a\xa2\x49\x0e\x13\x6d\x05\x67\x39\x96\xd2\x11\x22\x22\xd2\x0f\x35\x36\x12\x00\x26\x21\x5d\x00\xc8\x13\x90\x2c\xf2\x52\xec\x20\xf5\x7d\xf6\x67\xf9\xf0\xba\xbf\x24\xe4\xcc\x39\xd2\xdd\x7d\x14\xff\xa9\x65\xb1\xde\x4b\x1a\xc3\x45\xf6\xd2\xac\x99\xb5\x3e\xc6\xac\x94\x25\x3b\xb1\x41\xd6\x08\x6a\x81\xa2\x42\x06\xa7\x03\x64\xe9\x26\xc0\x09\x1e\x22\x5f\x93\x3c\xd9\x45\x16\x1e\x0a\x0c\x09\x15\x82\x23\x0c\x86\x47\x96\xa6\x46\xbe\x19\xc5\x16\xf9\xfa\xd0\x3b\xe9\xce\x57\xd8\xe1\x4a\x6f\x5b\x64\xe9\xbb\xe8\x7c\xeb\xa3\xc5\x66\xf6\x7f\x71\x61\xd3\xfd\x65\x19\xa7\xde\xbe\x78\xf2\x60\xca\xaa\xa9\x98\xc9\x8e\xe8\xf0\x38\x6e\xd0\x9e\x69\x18\x8a\xcb\xe1\x3c\xc1\x40\xce\x26\x39\x84\x7c\xc9\x46\x50\xb4\x70\x3b\x70\x0d\xda\x21\x19\x2c\x62\x81\x19\x20\x9f\xb5\xde\x9b\x9a\x7c\x08\x2c\x94\x98\xd0\x37\x55\xe2\xff\x95\xb8\x7f\x87\xe1\x2e\x8f\x86\x39\x3d\xee\x1a\xd9\xdf\xe8\xcf\x41\x02\x31\xe9\xcd\x8f\x55\x3b\xf5\xbd\x54\xbe\xf7\x5d\xb2\x59\xbf\x5a\xc7\x72\x4d\xc9\x1a\x3f\x3d\xf2\x59\x2c\xe0\x69\x8c\x54\x44\x15\x27\x30\x15\x02\xe4\xdb\x94\x45\x06\x0a\xa0\x4c\xdb\xd3\x05\x83\x23\x48\x3c\x24\x6d\xe0\x23\x20\x49\xb8\xef\xc1\x18\x8b\x8a\x93\x47\xd7\x2e\xac\x83\xd9\x9d\x5a\xa7\x92\x37\x9e\xa5\x7f\xad\xd3\xed\xfa\x36\xad\x99\x9d\x7b\xc2\x37\x75\x47\xf6\x7b\x64\xbe\x68\x16\x47\xae\x45\x51\x56\x4c\x37\x00\x94\x60\xf2\x18\xe6\xf8\xc0\x66\x21\x22\x49\xa8\x52\x0c\x30\x45\x26\xf2\x80\xce\xf3\x41\xa8\x62\xbc\x0a\x81\x29\x33\x91\x92\x4c\x1f\x76\xde\x65\x74\x66\x6f\xb5\x79\xa6\x75\xf6\x59\xe5\x2e\xf3\xa6\x8e\x1c\x75\x67\xcc\x7d\x2a\xfb\xf4\xdb\x3c\x53\xca\xcc\x70\xee\xbb\xce\x71\x64\xc6\xb1\x44\x68\xe1\x1e\xc5\xe3\x21\xe2\x04\x84\xf1\xc0\x17\x83\x80\x77\x0c\x81\x96\x70\x96\xe0\xe9\x40\x94\x3d\xd7\x53\x54\x02\x09\xac\x28\x98\x5a\x72\xd7\x01\x7e\xe9\xf8\x66\xe8\x35\xe9\xe7\x43\xef\x16\x4d\x7f\xb2\x3b\x9b\xf6\xb6\xf4\xa1\x27\x23\x2f\x3c\xa7\x12\x46\x6b\xd5\xdb\x7b\xcb\x84\x94\x91\x77\xc7\x4e\x27\xc3\xc8\x26\x30\x25\x20\x42\x1a\x0f\x7d\x97\x87\x48\x95\x58\x92\x20\x18\x89\x8f\x00\x54\x68\xc0\x51\x01\x4e\x18\x9e\xa9\x62\x26\x12\x44\x9c\x85\x74\x6c\x4b\x6d\xf5\x87\xea\xa7\x79\x4b\xe6\xd9\xbb\x77\xde\x60\x73\x77\xa7\x7c\x53\xd6\x7d\xcb\x8f\x76\x3b\x2d\xff\xa5\xea\xdd\x15\xeb\x7d\x3f\x65\x07\x5e\x92\xd1\x63\xce\x27\x64\x45\xd6\x2d\xd2\xe0\x2c\x80\x99\x44\x48\x8a\x94\xab\x11\x02\x0e\x91\x19\x21\x51\xe4\x08\x19\x2a\xa4\x1d\x88\x8e\x13\x22\x53\xc4\xfe\x9e\x4b\xbd\xaa\xfa\x6f\x69\x2f\x82\x84\x84\xed\xf9\x66\xcd\xfa\xf8\xe3\x92\x23\x0e\xdf\xda\xf4\xf4\x74\xbb\x6b\x3b\x05\x71\x5a\xda\x0c\xc5\x26\xbe\x4b\x7c\xd5\xe3\x6d\x62\xc2\xbb\x77\xcf\xdf\x4d\xfa\x24\x09\x12\xb8\x78\xb3\xb7\xec\x84\xea\xf8\x51\xd4\xb6\x49\xfb\x9f\x8f\x4f\x39\x3b\xe3\x93\x7d\x9b\x5e\xd6\x70\xd6\x6c\xab\x3e\xb3\xda\x4f\x87\xc4\x94\xd5\xb7\x31\x7f\xa2\x09\x02\x45\x12\xd4\x40\x24\x78\x97\xf5\x38\x29\x92\x70\x4d\x91\x1c\xd3\xa2\x5d\x8c\xa2\x54\x55\x66\x39\x1d\x89\x01\xad\x06\x22\xee\x86\xb4\xce\x9a\xd4\xfb\xa6\xda\x24\xd3\x1f\xf7\x3f\xab\xb3\xe1\x5d\xef\x7c\xf9\xc4\x8a\xb3\x73\xad\x8e\x16\xd4\xae\xdf\x2f\x63\xb3\x97\x5c\xe3\x1d\xa7\xca\x16\xaf\x18\xbf\xd3\xc8\xac\x86\x9c\x50\x23\x18\xc9\xc7\x4c\x95\xd0\x44\x57\xe4\x35\x33\x64\x48\x13\xb7\x7c\xdd\xa3\x1c\x9d\x16\x2c\x01\xc1\x10\xca\x2a\x0a\x95\x08\x99\x3a\x62\xde\x4f\xf0\xef\x75\x6c\x38\xb8\xd9\xf8\x4f\x6e\xf5\x20\xf8\x56\x53\xb6\x51\xdf\x1c\x16\x5a\xdc\xfa\x76\xcd\x82\x3d\xe4\xe1\x4a\x9b\x87\x61\xe7\x53\x96\x03\xc4\x8c\x4e\x2e\xf4\xa3\xc0\x61\x5c\xd7\x95\x09\xde\xc0\x14\xdc\x54\x00\xa9\x61\x9c\x47\x86\x1a\xa1\xd0\x34\xc5\x2a\x6e\xc0\x50\x82\x64\x21\xcc\x0c\x80\x85\xac\x20\x19\xe4\x29\xbe\xa8\xfa\xca\xfe\x57\x12\x56\xc0\xf1\xab\x7f\x79\xfa\xe9\xa9\x62\xbb\x0e\xfd\xdc\x99\x17\xee\xae\x60\xef\xcf\xb6\x33\xa7\x11\x72\x25\x7d\x7d\xa9\xee\xa1\x32\xa3\xc7\x4c\xdb\xdb\x39\xab\x70\xf0\xce\x90\x4d\xb7\xbf\xbe\xf0\xfd\x86\x0b\x8d\xfb\xff\xf6\x7a\xc7\x8d\x7c\x1f\x6f\x80\x3f\x25\xb1\xa7\xa2\x6d\x4a\x66\x5d\xb2\xa6\xc9\xa2\x27\x39\x86\xdd\xd8\x48\xfc\xb5\xa5\xc9\x82\x6a\x03\x16\xd7\x9c\x60\xb7\xdc\x9e\xe3\xab\xcc\xeb\x3a\xc4\x71\xa1\x8e\x61\x68\x56\x37\x24\x8c\x64\xe8\x10\x46\x06\x21\x06\x5a\x28\x8b\xb2\xc3\xbb\x0a\x63\x9a\xba\x09\x0d\x1a\x78\x86\xe0\x71\xa2\x8d\x8b\x9c\x2c\xfb\x3c\x4a\x66\xa1\xee\xc5\x15\xf6\x50\xfb\xb6\xa5\x6b\x9b\xfb\xab\x54\x2a\x3c\xf3\x70\xd9\x8c\x2d\xbb\xde\xbc\x7e\x7e\xab\xb4\xdf\xd8\x56\x7f\x5e\x50\xf7\x62\xd2\xd7\xe6\xd2\xfc\x07\xbe\x79\x78\x91\x1a\x94\x65\xe1\x8b\x2a\x2a\xb3\x31\x53\xbe\xac\xaf\x5b\xa7\x59\xd8\xac\xdb\xb8\x85\x0d\x6e\xec\x39\x30\x32\xe9\xeb\x76\xf5\xd2\xec\x28\x55\x53\xeb\x7c\xb0\xf4\xa5\xe6\x03\xfe\x6a\x54\x6b\x13\x3f\xfd\x93\x06\x7e\xfe\xdd\xee\x33\x6e\x51\x58\xad\x5a\x86\xa4\xaf\x95\xd6\x03\x3f\x6d\x6f\xed\xe0\x67\xf7\x5f\x64\x75\xdc\x36\xab\x5b\xf9\x1f\x7e\x7b\x5e\xe2\x97\x7c\x75\x66\x65\xc9\x5e\xf7\x4d\xce\xc5\xed\x93\xbe\x3e\x8f\x2a\x17\xda\x30\x72\xf1\x12\x6b\xfc\x6f\x3f\xfd\x30\x7b\xcd\xb8\xfc\x6b\xca\x0d\xd7\xa6\x8a\xaf\x56\x5e\xdd\xf5\xe7\x82\xea\x3f\x8c\x4e\xfa\xba\xff\x47\xed\xd3\xe5\xec\x76\x74\x50\xd7\xb3\xdd\x67\x3c\x6a\xf5\x6c\xea\xca\x7c\xef\x9a\x3d\x76\x2a\xd5\xcc\x36\x20\xef\x6f\x9d\x5b\x7e\x5d\x22\x49\x78\xaf\x5f\x7d\xf2\xcc\x8c\xcf\x3b\x4e\xae\x30\xb7\xe7\xb3\xef\xeb\x77\x72\x72\x67\xcc\xb2\xa8\x66\x91\xea\xc5\x5a\x2c\xdb\xd7\x57\x1b\x50\xec\x55\xfc\x3e\x23\x29\x28\xbe\x2d\x43\xd1\xd2\x19\x14\x12\x0e\x61\xb9\xae\xc4\x43\x15\x61\x7a\x64\x52\x82\xe5\x01\x8b\x52\x28\xd6\x26\x02\x86\x81\x02\xb2\x75\xc7\x16\xde\x47\xa9\xbc\x68\x40\x3c\x7a\x51\x67\x56\x9a\x1a\x1d\xed\xe9\xa5\x36\x9e\x2a\x9e\x71\x61\xd7\x66\xcd\x1b\x96\xef\xd8\x75\xa8\x3d\x2f\x67\xf6\xd3\xf1\x3b\xc7\xc8\x2a\x7c\x40\x62\x34\xa7\x07\xb2\xe5\x91\x1e\x21\xd1\x04\xc4\x59\x8c\xc7\x4c\x5b\xc2\x69\x53\x94\x00\x94\xb4\x40\xf7\x39\xdd\xf6\x6c\x5b\x66\x1c\x2c\x24\x63\xf7\x31\x72\x54\xcb\xff\xf1\x14\x77\xd2\x88\xb5\x88\x6c\x55\xee\x35\x51\x6c\x67\xa9\x95\xe1\x4f\x15\xae\xa5\x3f\xf0\xd5\xe5\xbe\x5b\xbf\xfb\x26\x7e\xe8\x02\x36\x80\x00\x09\x96\xa9\x84\x6c\x64\x9b\x14\xb0\x3c\x18\xb9\xa1\xed\xdb\x38\x42\x1a\x65\xb1\xac\xa3\x22\x59\x34\x23\x5f\xe1\x78\x99\xe3\x0d\xd3\xb3\x99\xf7\xbd\x72\xc2\x47\x4d\xba\x75\xcf\xb6\xee\x97\x7c\x4f\xcc\xbf\x4a\x9d\xbf\x32\x4a\x5a\xba\x9a\xcd\xc0\x54\x2d\x5d\x77\xc4\xa8\x23\x8f\x7b\x48\x87\xe3\x48\x2d\x68\xda\x9e\xa0\x08\xff\xaa\x6a\x30\x5c\x87\x22\xa5\x02\xd9\x25\x43\xc2\xc3\x38\xcd\x07\x81\x84\x7b\x1e\xe1\xb1\xa1\x4d\x44\x92\x89\x45\xb2\xee\xca\x62\x6c\xa4\xd5\xa7\xbf\x8e\xfe\x63\x06\x9d\xfb\x5d\xcd\xa3\x3d\xe7\xf4\xcd\xb0\xb0\x67\x6a\xeb\xd5\x43\x72\xcd\x8b\xcd\xc7\x9f\x17\x5f\x22\x4f\xc9\x70\x39\x7e\x22\xdb\x18\xe9\x85\x1e\x20\x5d\x55\x07\xa4\x0e\x03\x84\xfb\xac\x45\x52\x96\x4e\x3a\x11\xe5\x29\x0a\x4f\x85\x08\xb7\x2c\xcc\x14\x19\x06\xa7\xd4\x48\xc7\xd5\xf7\x03\x89\xf9\x75\xe6\xa7\x6f\x07\x6d\xaa\xd2\x68\xff\x86\x89\xd5\x07\x3d\x98\x46\x1d\x49\x7f\x20\x71\x7d\x42\x41\x66\x76\xbb\x85\x93\x89\xed\x61\xfc\xe2\x9e\x20\xf8\xa1\xa5\x41\xdd\xa5\x6c\xc0\xc8\x36\xe3\xcb\x41\x44\x8a\x86\x6b\x44\x84\x60\xaa\x02\x1d\x31\x16\x94\xdc\x88\xf3\xfe\x0f\x3c\x43\x39\x14\xab\xc4\xde\x31\xca\x5e\xbb\xc0\xd2\x72\x73\x8a\x7c\x5e\xe4\xd7\xca\xbf\xbf\x1e\x5a\xb1\x54\x9d\x56\xcd\xf8\xfd\x5d\x4f\xb9\xc5\xa8\x4d\x1b\xf7\xf3\x67\x53\x06\x0e\x8b\xbd\x52\x4f\xaa\x2c\xcb\x3b\x3c\xc9\x5b\x94\xe2\xc8\x9e\xac\xfa\x98\x2d\xdb\xbc\x61\xf9\x06\x21\x92\x0a\xe6\x44\x1e\xa5\x8a\xa4\x45\x99\x7e\x24\x50\x1e\xcb\x89\xef\x7b\x89\xcf\x5b\x8c\x1b\x5d\xb0\x70\xab\xae\x5b\xef\x75\x09\xd3\x77\xfe\xbd\xd4\xaa\x3a\xd8\x77\xe3\x36\xaf\x1f\x7a\x76\x4e\xcd\x9f\x2f\x66\x5d\x11\xbf\x63\x97\x2c\xab\x63\x12\xa0\x74\x1c\x13\x2d\x52\xc2\x90\xa1\xf8\xaa\x19\x06\x1a\x11\x2a\xc8\x10\x78\x4e\x0a\x08\x52\x93\x48\x3f\x24\x44\x4c\x35\x10\x03\x58\x2b\xc6\x72\x71\xfb\xfd\xd3\x2e\xe7\xea\x96\x33\x6c\x9c\x6b\xf5\xca\x76\x03\x56\x2f\x5b\x7a\xaf\xda\xe2\x27\x83\x7a\xed\xcd\xf3\xc5\x0f\x3f\x0d\x6b\x21\x0e\x88\x63\xff\xc4\xb3\x49\x5e\x00\x36\x19\x99\x1a\xc7\x9a\x88\x09\x03\x53\xe6\x68\x96\x40\x14\xcf\xba\x3e\xa3\x48\x9a\xa5\xb9\x34\x61\xd2\xae\x62\x52\xae\x1e\xb1\x6a\x32\xa1\xb4\xc7\xb9\xf2\x9d\x67\x07\x6f\x7e\x3b\xdb\xa6\xc6\x8d\x31\x7b\x97\x4c\xd3\x4e\xff\xe6\x8d\x7a\x59\xa4\xe9\x4f\xc7\xb2\x16\xed\x94\x35\xdf\xa9\x7f\x6c\xb2\x57\xad\xb8\xb9\x8c\xf7\xaa\x72\x8f\x9a\x43\x07\x77\xef\xb1\xed\x62\x96\xb5\x8f\xab\x77\x3e\xb1\x2e\xd3\xe5\x12\xcf\xc6\x0f\x9f\x8c\xae\x27\x51\xb6\xf4\x45\x26\x0e\xb4\xbf\x5c\x35\x66\xc4\xfa\xf4\x35\x50\x9a\x76\x42\xc1\x49\x8d\x4e\x97\x6b\x7c\x64\xc9\x9a\x16\xe3\x8f\xcb\x27\xb2\x74\x8a\x9f\x7d\x20\x17\xc3\x48\x92\xd5\x59\xc8\x9b\x0a\x17\x39\xb8\xa4\x07\x98\x1a\xe9\x98\xc9\x01\x4d\x05\x86\x4a\x9a\x84\xee\xd0\x0a\xa0\x03\xc1\x30\x5d\xca\x63\xec\xf7\xcd\xb9\xfc\x97\xf7\xbe\x18\xfb\x7a\xc9\xa8\x31\x53\x4e\xed\x6e\x3d\xf3\xa0\xd9\xfb\xd4\x8e\xcb\xc3\xf1\x39\xf5\xd7\xce\xad\x02\x33\xad\x3b\x91\x32\x6a\x9c\xd8\xc7\x60\x21\xfe\x7f\x57\x97\x01\x8c\x90\x22\x20\x8a\xd4\x79\xd6\xb4\x0c\x8b\x44\x94\x6a\x86\x9c\x6d\x69\x98\x2e\x5b\x24\x27\x19\x8c\x2c\x85\x84\xe8\xb1\xf6\xfb\xca\x66\x2d\x78\x75\x6b\xfc\xfd\xaf\x6a\x16\xab\x71\xfe\x64\xae\x7e\xa5\xf6\xff\x3e\x6c\xe3\xdb\x2a\x4b\xd7\x64\x2e\x31\x84\x2d\x57\x62\xec\xa2\xf5\x71\x64\x76\x0c\x25\x1d\x9a\x3e\x17\xc8\x9a\x40\x92\x06\xe1\x3b\x50\x14\x2c\x8f\x10\x15\x46\x73\xf8\x80\x35\xe4\xc8\x93\x2d\x25\x14\x15\x22\xd0\x79\x86\xb0\x64\x2f\x99\x34\x76\xd9\xf9\xf9\x93\x0f\xed\x3b\x76\xcb\x5c\xd7\xba\xea\x25\xdf\xda\x96\x85\xcc\x5c\x75\x6f\x97\xa3\xd3\xae\xdc\x4f\x5d\xc0\x3a\x94\x78\x34\x49\x34\xd8\xd7\x3b\xe7\x82\x15\xa9\x07\xee\x67\xc7\x6d\x2f\x9b\xad\xd0\x8e\x13\xcc\xeb\x5d\xd9\xbf\x9a\x52\xfe\xab\x1c\x75\x0e\x77\x2b\x33\xef\xf0\x9c\x38\xa6\x08\xb4\x21\xd0\x20\xf2\x21\x45\x08\x61\x60\xb1\x86\x22\x6b\x14\x64\xd4\x08\x18\x1a\xd2\x29\xd1\x95\x58\x9e\x60\xa4\x90\xa0\x44\x02\x59\xaa\x03\xfe\xe7\xba\xce\x7f\xc5\x7d\xd8\x5f\x1a\x3c\xe9\xda\x44\x2b\xfb\xb1\xac\xde\xc2\x6b\x55\x6b\xa0\x43\x27\xde\x34\x2f\x93\x09\x58\xec\xbb\x1b\xeb\xcf\xb6\x60\xe3\xc8\x5d\x65\x20\x05\x78\x06\xef\x45\x8a\x81\xfb\x92\x49\x05\x1e\xe6\x85\x98\xa6\x22\x52\xf5\x91\x6b\xe0\x0e\xad\xe0\x0c\x86\x91\x74\x48\x78\xb6\xac\xea\x8c\x1f\xbb\xfa\x5f\x73\x4e\xfa\xf8\x7e\x86\xe6\xab\xe4\x41\x3f\xe5\xa9\xed\x0d\x2f\x9a\x7f\xe4\xed\x9a\xed\xf9\x41\x83\xdd\x8b\xad\xa6\xe7\xe9\xb6\x82\x8f\x9f\xbf\xd2\x1c\x47\xe2\x04\x4b\x08\x45\xc0\x44\xaa\x25\xe1\xb8\xe0\xf8\x36\x19\x69\x91\x24\xe1\xaa\xec\x8a\xb2\x2f\xeb\x7a\xc0\x0a\x36\x14\x98\x80\x0c\x75\x2b\x39\x2e\x8d\x52\xc5\xdf\xd1\x35\x2e\xe4\x1c\x54\xf0\x72\xde\x79\x0f\x52\xbf\xc9\xf9\x79\x14\x9d\xea\x3e\xb7\xfb\x31\xad\x87\x72\xed\x6c\xb6\x44\x2d\x89\x0a\xd5\x53\x2b\x0f\xc4\x1a\x37\x38\x9d\x29\xed\xcf\xd9\x7b\x57\x3a\x75\x2a\x2f\x7d\xbf\xe1\xac\x35\xaf\xbb\x6d\xb7\x53\xdd\xee\x5a\xfb\xd0\xe4\xf8\xa9\x90\xa3\xd3\xa6\x43\x6a\x98\x28\x53\xa2\x6e\x04\x0e\x11\x9a\xa4\xae\xa9\xc8\x76\x64\x11\x67\x29\x22\xc4\x69\x0f\x13\x58\xc1\x53\x2d\xdd\x35\x71\x08\x64\xfa\x7d\x15\x3a\xda\xa5\xcc\xe9\x03\x72\xc5\xc2\xb9\xdf\xfd\x32\x81\xa9\x9f\x6d\x77\x4d\x67\xba\x70\x68\xdd\xae\x9a\x7f\x25\x9c\x99\xde\x39\x9d\x97\xb2\x33\x35\xb1\x81\x7c\x8e\x45\xc8\x9a\x1e\xf9\x86\xe5\x12\x22\x54\x42\x35\x64\x83\xc8\xe5\x49\x93\x31\x15\x13\x70\x1a\x66\x21\x96\xb0\x39\x8a\x54\x7c\xca\x74\x2d\x18\xea\xb1\x09\x12\x3b\x2c\xcc\xb5\xb9\xda\x81\x82\xcd\xdf\x4e\x5a\x54\x2b\x75\x96\x8f\x57\xd5\x6e\xf9\xc5\x76\xbe\x40\xaa\xc5\xaf\x72\x2d\x91\x06\xac\xdd\x98\xb2\x59\x52\x4c\xad\xb7\x31\x8f\x20\x55\x9f\x83\xa6\x20\x48\x2a\x69\xb8\xbe\x8a\x73\x96\xce\x73\x16\x8d\x45\xba\xcf\xd0\xa6\xec\xa9\x88\x44\xa1\xe3\xda\x2a\x1b\xc9\x08\xb2\x31\x96\x96\x47\x6d\xee\x73\x6e\xdf\xdb\x0a\x3f\x6e\x74\x6a\xce\x9e\x07\xd6\x15\x39\xdc\x65\xc8\xed\xd2\x3f\x2d\xcc\xfe\xc5\xa8\x4d\xed\x6e\x56\x4f\x99\xc6\xc7\x86\x8e\xb3\x02\xe9\x28\x04\xc5\xb2\xb4\x6a\xf2\x40\xf4\xed\x80\xa6\x59\x44\x0b\xb4\x1a\x61\x1a\xa7\x38\xb4\xeb\x0b\x16\x27\x4a\x80\xb2\x0c\xd2\x51\x70\x14\x83\xb0\x69\xb5\xdf\xf9\xe4\x32\xa6\xd2\x2f\x07\x7a\xbd\x9a\xbf\x25\xcb\xe4\xe1\x3d\x3e\x79\xb7\xf0\xa3\xfd\x6f\x5a\x14\x68\xd0\xfd\xc2\xc1\x92\xb9\x37\xc7\xb1\xf7\x4f\xe8\x96\xc1\xeb\x36\xab\x78\x0a\x89\xe8\xd0\x04\x0e\x6b\x20\x37\x10\x48\x55\xe3\x38\x5e\x51\x70\x9d\xf0\x64\x8a\xd3\x1d\xdc\x66\x3d\x64\x61\x98\x10\x5b\x21\x26\xdc\xbb\x3b\xa1\xde\x37\x8b\x95\xde\x75\xfa\x74\x79\xb6\x7b\xc1\xc9\x02\xe3\x96\xb5\x74\x46\x7e\xb4\x69\x74\xee\x7d\xb7\x4e\xec\xda\xf0\x67\x1c\x79\x62\x31\x99\xe3\x7c\x9f\xd5\x2d\x4a\xb1\x28\xcb\x47\xb6\x4b\x8b\xbe\xce\x48\x16\xe3\x59\x82\x80\x3c\x09\x41\x07\x70\x26\xc9\xa9\x2e\xd2\x48\x1b\xfc\x0f\x03\xd2\x7f\xc5\xdd\xf1\xb3\x53\x77\x6b\xda\xb3\x6b\x99\xc6\x0f\x1e\xf5\xdc\xba\xe4\x5e\xa3\xe6\x6d\x7e\x53\x7f\xd7\xcf\x45\xdc\xd5\x3c\x3f\x9e\x7e\x1c\xcf\x2a\x49\xf4\x28\x8f\x36\x4d\x53\x72\xa5\x08\x51\x06\x43\x05\xba\x8d\x22\x41\xb3\x58\xe4\x78\xbe\x66\xe3\x86\x13\xba\xbe\x07\x01\x25\xb2\xb2\x1a\x72\x0c\xf9\x7e\x8e\xb2\xe7\xd6\xa3\x6b\x7f\xce\xe9\x90\xfb\x02\x3f\x68\xd6\xbb\xa9\x2d\x9c\xe6\xe7\xbb\x5c\xeb\x38\xe0\xa3\xdd\x83\x47\x77\x2b\xf6\x4b\xee\x4b\x29\x1b\x4e\xc7\x4c\xa9\x70\x52\xa6\xcd\x88\x76\x2c\x95\xd2\x11\xf8\x57\xcd\x16\x04\xae\xa7\x33\x1c\x0c\xc3\x48\x53\x78\x06\x38\x3e\x8d\x4c\x60\xda\x88\x85\x11\x74\x30\xc6\x4b\x86\x15\xe3\xe0\x6d\xee\x42\xaf\xa2\xb9\x8e\xdf\x9c\xb1\x75\x77\xad\x4a\x87\x9e\x62\x37\x3e\x6f\x74\xad\x5c\xcd\x62\x6b\x26\xe5\x72\x8f\x2f\x19\x9a\x37\x89\xc7\x46\x44\x6d\x67\x67\xc6\x0d\xf4\x95\xfd\x45\x9b\x7c\x36\xa2\x01\xb9\x7e\xdd\xaa\xef\xd2\xe4\xfb\xe8\xf9\xb4\x29\x03\xbb\x17\xfb\xfd\xa3\xf8\x0d\xe8\x98\x08\x52\x9a\x89\xd8\x90\x51\x35\x05\xc3\x80\xe8\xe0\xbc\xa6\xb1\xb6\x20\x13\x9c\x1f\x41\x9e\x34\x43\x0a\x39\x92\xa7\x3b\x50\x66\x6c\xc6\x20\x11\x1b\xa3\x40\xf1\x66\x2f\x6f\x5a\xe3\xd1\x6f\x65\xb3\x4c\xbf\xf2\xa0\xd6\xa3\xea\x4b\xae\xcf\xfd\xb3\xf6\xe1\xce\x95\x8f\x9f\xba\xd7\x69\xe3\x63\xfc\x5d\xca\xce\x2e\xc7\x0e\xfa\xa1\x2f\x28\x8c\xc6\xb8\x01\x61\xa9\x3e\xd0\x25\x95\x13\x04\x21\xb0\x49\x4a\xd7\x29\x1a\x73\x24\x0d\x98\x00\x0f\x35\x53\x15\x45\x8f\xd1\x29\x83\x57\x92\x89\xa0\xd9\xda\xc9\x35\xe7\x5e\x44\x79\x82\x0a\x65\x1e\xed\x5f\x3e\x68\x21\x3d\x99\xac\xfc\xad\x50\x6a\xfe\xa9\x9f\x72\xed\xbf\x75\x86\x3a\x9c\x74\xdd\xf6\xe3\xbc\x42\xe9\x8e\x99\xd6\x96\x39\x7c\x28\x6d\x78\x74\xe1\x9e\x6b\xaf\xca\xec\xdd\xdd\xb2\x6a\xff\x6f\x4e\xe6\x4b\x47\x35\x58\xdf\x3c\x8e\x1b\x71\x5c\x10\xe8\x34\x66\xfa\x14\xaf\x70\x10\x68\x64\x68\x13\xb4\xcc\x46\x96\xe0\x89\x96\x65\x93\x91\xe8\xf0\xa6\x40\x52\xb6\x1f\x48\x82\x2d\x78\x91\x0c\x63\x4f\xb1\x5f\xbb\x65\x72\x0c\x98\x5d\xe7\xcc\xcc\x06\x1b\xa7\x2c\xca\x69\xdc\x27\xd6\x6f\xec\xfe\x87\xf0\xc7\xac\x86\xc3\xa6\xb6\x5d\x30\xee\xaf\x4f\xe3\xe7\xe3\xa1\x4e\x86\xc0\x70\x74\x39\x84\x88\xe1\x5c\x82\x8a\x3c\x46\xe1\x7c\x45\xd5\x11\x0b\x68\xd6\xa5\x20\x86\x2b\x3c\x0d\x04\xce\x95\x79\x9b\xa3\x34\x36\x39\x8e\xc2\x6b\x95\xee\x75\x6a\x54\xb2\xdf\xd3\x74\x83\xf3\x1c\x6b\xd7\xe4\xdd\xa9\xdb\xcb\x7b\x4c\x58\xd6\x3f\xf7\xc4\x46\xe5\xf9\x2f\xda\xdc\x28\xd7\x26\xe9\xeb\x53\xf9\x0e\x56\x01\x4e\x9b\x74\x2d\x8f\xa4\xfb\x38\xb1\x5e\x9e\xb7\x7f\xd5\x4e\xf5\x76\xc2\xcf\xb9\xef\x0e\xaa\xa1\xa4\x55\xd7\xf6\x5b\xf8\x9f\x09\xf9\x87\xba\xc6\x89\x09\xc5\x53\x65\xce\xd8\xff\x1f\x7b\xb1\x43\x4f\xb3\x03\xfb\xd3\x2d\x17\x0d\xbd\x5c\xbd\xe9\x57\xa5\xbb\x75\xdb\x5f\xfe\x4a\xd6\x95\x4e\x85\xd6\xd3\x83\x3a\x44\x99\x92\xf1\x33\x40\x07\xf3\xc5\x50\x8c\x5c\x2c\x12\x0c\xc3\xd6\x74\x24\x48\x2a\x61\x86\x8e\x4d\x92\x0e\x74\x42\x8b\xf7\x7d\x3c\x72\x02\x0c\x2a\x9a\xab\xab\xb6\x13\x5a\xc9\x9c\x77\xf8\xf9\xdb\x89\x25\xec\x07\xbf\xd6\xdd\xf9\xf9\xd9\xcc\xab\xa4\xc6\x9f\x6d\x1d\xf7\xfd\xed\x9e\xe7\xc0\x9a\x63\x99\xbc\xc3\xb7\x6a\xc8\x29\xe3\xe4\x8d\x1d\x72\x7c\xd3\x33\x1d\x4c\x24\x28\x43\x53\x0d\x0f\x91\x42\x68\x00\x93\x8a\x54\x16\x89\xb8\x45\x87\x8a\xc4\x41\x97\x72\x59\x1f\x0f\x28\x97\x44\x8e\x07\x93\x41\xc2\xae\x5e\xdb\xc9\x3a\x96\xea\x4a\x95\x3d\xbb\x2e\x0f\x2e\xd5\xe2\x95\x94\xb0\xe4\xf9\xdc\x7b\x5d\x17\xed\xce\xdf\x7c\x40\x81\x2b\xcd\xce\xed\x88\x23\xe9\x9e\x44\x06\xa2\x8b\x71\x3c\x63\x33\x9a\xe3\x47\x92\xc6\x21\xca\x57\x65\x96\x42\xa1\x83\x03\x51\x60\x1d\x28\x1b\x3e\x6e\x3b\xbc\xa5\xdb\x3e\xa5\xdb\x44\xec\xb9\x5b\xb6\x9d\x2f\x8b\xd4\xec\x97\xb6\xb5\x80\xbd\xfb\xe1\x65\xc1\xaa\xed\x47\x0f\xad\xba\xed\xd1\x9d\x82\x1f\x9f\xfa\xe2\x28\xd5\x4e\x3a\x3b\x2b\x8e\xa9\x13\x60\xff\xef\x0e\x1b\xe7\x62\x1a\x74\x38\x9a\x73\x05\x9b\x94\xac\x48\xd2\x58\x22\x34\x00\xad\x69\x21\xb2\x02\x46\xc4\x65\x0e\xd0\xb4\xa5\x18\xb6\xf4\xde\xb6\xd2\x87\x46\x20\x89\x09\x85\x32\xa6\xaa\x97\x74\x5b\x69\x4f\x26\xbb\xe5\x9a\x15\xd3\xa6\xdf\xbf\xb4\x28\xdd\xc3\x6f\xff\x04\xed\xb1\xb3\x9f\xdc\xdf\x74\xeb\xc4\xe8\xf4\x05\xce\xfc\xde\xa5\x40\x1c\xef\x8e\x87\xa1\x89\x3c\xdc\xc2\x42\x20\x03\x86\x23\x54\x15\x46\xba\x8e\x53\x24\x63\xcb\x80\xf2\x4c\x53\x50\x5d\x28\xf2\x36\x12\xb8\x50\x97\x80\xed\x63\x51\x32\x1f\x65\x08\xfc\xaa\x55\xfa\x5e\xb7\x8e\x74\xb3\x7b\xd6\xcc\x7d\xeb\xe6\xe8\xd6\xfb\xaf\x3e\xef\x96\x73\x7d\xf7\xd2\xcd\xb7\x8f\xda\xf1\x49\xdd\x37\xf1\x13\x59\xe1\x81\x27\x01\x60\x28\x2e\xa0\x79\x5d\x77\x19\x3c\x8a\x34\x5d\x92\x20\x50\x65\x4e\x66\x78\x9f\x63\x09\xc2\xb0\x35\x40\xab\x82\x00\x75\x8c\x97\x93\x01\x87\xdc\x5c\xfd\xec\x59\xda\x71\xf5\x4f\x5f\xaa\x56\xec\x75\xf3\x86\x19\xbc\x59\x17\xba\x17\xeb\xce\xe6\x9e\x31\xb3\x6c\x8d\x67\x0f\x96\xcc\xbc\x14\xbf\x88\x22\x50\x96\xc6\xc9\x2c\x0e\x64\xd1\xf4\x74\x41\xf2\x5c\x8a\x89\x3c\x4c\x50\x40\x64\x07\x18\x6b\xf1\x36\xc1\x85\x1c\xe3\x71\xa4\x83\x34\x0e\x78\x2c\x9e\x0c\xe7\x04\xb5\x22\x48\xac\xbb\x60\x46\xc1\x82\x3e\x25\xe7\xf5\xdb\x5f\xce\xf5\xb5\x78\xf9\x25\xf7\x57\xdd\x5a\xc7\xe6\x57\x9c\x7e\xa6\x44\xfd\xf8\x65\x5d\x3e\x0c\x14\x81\x0c\x68\x35\x02\x8c\xeb\x08\xb2\x6b\x23\x86\x26\x55\x44\x3b\x14\x69\xd9\x9e\x45\x43\xda\xa3\x05\x9f\xfb\x97\xde\x04\x80\x84\x34\x26\x24\xc3\x9f\xb2\x20\xc3\x17\x0b\x2a\xdf\xca\x5f\x7d\xad\x83\xf2\x8f\xef\xb7\xff\xac\xfa\xae\xe9\xcc\xd2\x6f\xf1\x0a\x3b\x27\x43\x3c\x03\x2c\x12\xbf\x7f\x99\xc2\x19\x92\x44\x64\xa0\x09\x3a\x1d\x8a\x50\x37\x02\x46\x23\x23\xd5\xc5\x5c\x68\xda\x9e\xeb\x02\xd7\x92\x7d\x5e\x73\x59\xdf\x67\x42\x89\x35\xd8\xe8\xef\x7f\xf9\x3f\xd6\xfa\xa1\x79\x5e\x62\x42\xbd\xd4\x69\x32\x24\xb5\xd6\xbb\x6d\xcb\xe7\x2d\xb9\x25\xef\xa2\xb1\xb7\x16\x9b\x19\x7b\xd4\xbf\xed\x0f\xba\x32\xf9\xd3\x22\x63\x83\x23\xd9\xeb\x6e\x5b\xee\x7b\x47\xe2\xe7\x8f\x78\xdb\xa3\x6d\x93\xb6\x94\x90\x24\x43\x5a\x81\xc0\x25\xf9\x80\x82\x81\xef\xb8\x01\x0b\x61\xe4\x47\x22\x8b\xb3\x92\x14\x92\xa1\x02\x58\xc3\xa7\x71\x2b\xb6\xea\x4f\x3c\x5d\xfb\xd4\xc9\x49\xeb\xa9\xb7\xa5\x5a\xce\x7b\xf2\x51\xb6\xd4\x19\xc7\xef\x98\x77\xb0\xfe\xe4\x15\x25\xf6\xaf\x3b\x5a\xb5\xf8\xbd\x94\xcd\x37\x92\x39\x67\xc5\x6a\xa1\xc5\x03\xc1\xb4\x11\x25\x73\x9a\x0a\x08\x5a\x0b\xcd\x80\xc2\x6d\x4d\x57\x05\xdb\x35\x05\x0a\x18\x10\x07\xae\xe6\x70\xbc\xcf\xca\x50\x8c\x2d\xf2\xf8\xb3\xd5\x3f\x9a\xbc\xa3\x4e\xde\xbe\xb3\x12\xeb\x0d\xdb\x74\xe8\x5e\xa6\x89\x8b\xaf\x16\x98\xd8\x32\xfb\xd9\x8c\xf8\xd0\xa2\x9b\x4f\xc4\xf1\x0c\x2d\xa6\x98\x1c\x6e\x2b\x18\x62\x29\xde\x8a\x08\x8f\xb6\x25\x5a\xc7\x64\xdb\x0e\x75\xca\xc5\x7d\x5b\x21\x03\x92\xf2\x25\x5a\xf0\xf9\x40\x15\x38\x8f\x62\x82\xd8\xb1\xf5\xc2\xe2\x3d\x0d\xa7\x8c\x5b\xfa\xa5\xb4\x62\x51\xd6\x73\xf7\x72\xa2\x0c\xe6\xb9\x07\x8d\xef\x14\x57\x7a\x6c\x6f\x23\x55\x7c\x34\x6e\x44\x1c\xa1\x5c\x3a\x88\x48\x8a\xd2\x7c\xe8\xd8\x02\xcf\xb1\xc8\x11\xc2\x28\xe0\x91\xee\x7a\x66\x80\x0c\xc6\x0e\x78\xc6\xc0\x65\x85\x50\x45\x87\x32\xa0\x1d\x29\xc9\x58\xeb\x77\x0f\xea\xac\xfc\x6c\xc2\xac\x8b\x1f\x8d\x5a\x05\x3e\x1f\xb2\xf1\xc2\xc7\x33\xfa\x14\xcd\xf9\x28\x7d\x9f\xbe\xf2\xf3\x91\x17\x6f\xcf\x8c\xdf\x96\x09\x83\x44\xdd\x56\x65\x1e\x77\x38\x2c\x84\x32\x54\xdc\x80\x52\x18\xca\x54\x05\x99\xb1\x9c\x28\xc2\x14\x0b\xb8\x28\xd0\x18\xc2\x53\x11\x72\xd0\xbf\xb2\x82\xff\x2a\xc6\x7f\xa0\xf6\x1f\x9a\xa7\x27\x26\xe4\x2c\x5e\x3c\x55\xbf\x24\x75\x5d\xdf\x7b\x7f\x16\x9a\xb1\x1d\x76\xbf\xf3\xc5\x99\xdd\x79\xa2\x6b\x69\x7e\x11\x8b\x54\x1c\xb2\x66\xdf\xb3\xc2\x03\x8b\x5c\x7e\xd8\xb3\x68\xfb\xf8\x7d\x94\x40\xd3\x79\x93\x14\x01\x10\xa0\xec\x03\x1d\x22\x4d\xe0\x55\x5a\x06\xae\x22\x05\x91\x2e\xea\x20\x94\x45\x9d\x0e\x5d\x19\x40\x55\x75\x21\xaf\x71\xf2\xfb\x75\xf6\xbe\xf5\xd1\xce\x1a\xb7\x2f\x9f\x78\xc5\x5c\x56\x8f\xa9\x8d\x52\x3d\x5c\x7b\xfb\xaf\x7b\x35\xcc\x15\x07\x0e\x9d\x7a\x5b\xaa\x43\xaf\x94\x31\x65\xc7\x54\x7b\x91\xe1\x3c\x83\xf7\x09\x52\xd5\x2c\x21\xe4\x11\x66\xea\x26\x2d\x08\x94\xcc\x28\x36\x03\x1c\x4a\xc6\x28\x8a\x24\x35\xc8\x41\x2e\x64\x64\x59\x07\x21\x8a\xad\xf6\x33\x3b\x7f\x9d\x76\x9b\x83\x0f\x2d\x53\xa7\xcf\xd0\x9b\xf8\x84\xd7\x6d\x88\x54\xdd\x8e\x4e\xfd\x26\xca\x9e\x9e\x7c\xf6\x72\x47\xa1\xf8\x11\xaa\x31\x9e\xc4\x33\x18\xc3\x02\x64\xda\xac\x61\x89\x48\x16\x59\x35\x24\x00\x80\xc8\x93\x79\x28\xb3\x81\xe8\x07\x18\xa0\x59\x52\xa6\x3d\xe8\x90\x02\x21\x93\xb1\x9d\x0b\x71\x05\x35\xa9\x70\xf5\x07\xc9\x1b\xb4\xec\x2a\xfe\xe3\xb0\xbb\x3b\x8f\xef\xed\x31\xa9\xee\xa3\x1f\x99\xb2\x23\xdc\x22\xd1\xc0\xf8\x51\x92\x32\x18\xaf\x11\x8e\x81\x71\x62\x40\xb0\x9a\xae\x7a\x82\x21\x61\x8c\x6e\x92\x00\x78\x38\x65\x73\x24\xe7\x04\x8a\x4d\xf1\x26\xaf\xdb\xa2\xc8\x49\xaa\xc7\x72\xef\x2d\x57\x7d\x08\x18\x92\x98\xd0\xb4\x5e\xce\x7f\x40\xed\x8f\xbe\xc4\x3f\xf9\x38\x4d\xa7\xeb\x5f\xdf\xf1\x9a\xf7\x7d\xfd\xe4\xeb\x32\xce\x11\xad\x6d\x86\x63\x4b\x66\x37\xce\xb3\xf5\x6e\x91\xc9\x29\x3b\x11\x19\xb3\x3f\xe0\x04\x3c\x49\x01\x19\xb7\x34\x5f\xc7\x80\x19\x59\x00\x99\xbe\xc5\xb2\x94\x8f\x22\xc1\xe1\x22\xce\x26\x23\x13\x57\x74\xdb\xe2\x48\x27\xc4\x00\xc3\x24\xa3\x47\x6f\x8e\x54\xda\xb8\x7f\xe2\x67\xe9\x94\xa2\xd3\xc5\x32\x6d\x8b\x7c\xd7\x98\x7c\xf2\xf9\x99\x57\x78\x8f\xf5\x83\x95\x23\xc3\x26\x4d\x4e\xd9\xed\xd0\x98\x96\xaa\x4b\x4c\x20\x84\x58\x84\xcb\x96\xa1\x61\x14\x1d\x08\x01\x47\xd3\x94\xeb\x07\x08\x06\x9a\x18\xe1\x1c\xa2\x10\x09\x28\x13\xa9\x90\x47\x92\x0d\x23\x36\xb6\xfb\x54\x8e\x46\x07\x6b\x38\xe5\x16\x0d\xfe\xa1\xf3\x9d\xea\xbe\xdd\x67\xdc\xf7\xef\xb6\xd7\x3c\xb2\xa4\xcc\x67\x35\x3f\xeb\xb9\x6d\xe1\xf3\x38\x5e\x51\x14\xa1\xc6\x6a\x2e\x60\x11\xf4\x68\xce\xb4\x91\x65\xd1\xa4\x2b\x52\x84\x0b\x1c\xd1\x74\x19\x89\x14\x68\x8c\x56\x91\x2e\xeb\x9e\x0f\x74\x81\x02\xff\x66\xe3\x7d\x5f\xe4\xea\x35\x72\x0c\x2c\x3c\xf3\xdc\x95\x84\xb6\xc5\xe1\x8d\xc3\x0f\xaa\x27\xb6\xb8\x30\x1e\xdf\x37\xa2\x5f\xa3\x3f\xef\xb4\x3c\x34\xeb\x56\xca\xe8\xa7\x62\x37\x8e\x82\x88\x34\x03\xc1\x11\x15\x35\xd2\x78\xd9\xa0\x3c\x45\x34\x58\x9c\x0e\x6d\x0f\xb2\x38\x83\x64\x5f\x70\x60\xe4\x04\x9e\xa3\x48\x4e\xe8\x68\x12\x67\xbd\x07\xb5\xff\x10\xca\x29\x31\xa1\x6f\xaa\xa6\xc5\x93\xaa\x3e\x75\xb6\x6c\x91\x81\x33\xfa\x44\x0d\x17\x6f\xb1\x88\xe1\x5b\x3b\xf3\x17\x27\x7c\x33\xb3\xce\xbc\x4d\x1d\x9b\x7d\x57\x7a\x71\x3f\xfb\x51\x3c\x93\x1d\xd5\xd1\x02\x44\xe9\x1c\xf0\x59\xca\xb2\x3c\x11\x06\x34\x29\x3a\x8a\x6b\x0a\xd0\x8d\x02\xc2\x83\x12\x47\x7a\x0e\x8b\x2c\x2e\xf0\x15\x3c\xfc\x77\x06\xfa\xbe\x3f\xea\x77\xf6\x76\x96\x3c\xed\x7f\xf9\xe9\x0c\x51\xb4\xfc\xad\x8f\x27\x5c\xad\x98\xef\xc5\xfe\x81\x44\x99\x8b\xbd\xea\x1e\x2b\x31\xf4\xe1\xdb\xf8\x4d\x07\x18\x1e\xda\x1a\xe0\x71\x83\x23\x70\x92\x85\x02\x2d\x88\x1c\x8f\x34\xdd\x86\xae\xc8\x8b\x86\x44\x63\x81\xef\x20\x09\x90\x80\x54\x4c\x2a\xc0\x08\xc8\x25\x43\x63\x36\x33\x61\x73\xfb\x3f\xa6\x63\xf5\xd4\x8f\xb6\xd4\x4b\xec\x78\xf2\xf7\x75\xef\x0a\xff\xb1\xa7\xd6\xa0\xe6\x8b\xef\xed\x75\xce\xdb\xbf\xfe\x18\xbf\xd2\xc4\xe4\xad\x50\xf2\x39\x05\x8a\xd0\x40\x46\x68\x79\xb4\x80\xd1\x94\x68\x40\x91\xe3\x14\x9b\x75\x49\x3e\xe4\x58\x83\x06\x3e\x2e\x51\x9e\x62\x20\xd1\x4a\x66\x15\xb2\xa7\x59\x7e\xd4\xee\x2b\xc7\x60\xdb\x2a\xcf\x53\x0d\x1e\x76\xfd\xfe\x7d\x3d\x95\xfc\xac\xe8\xd1\xd6\x03\x0b\x3f\x3e\x33\x6f\xea\xe6\x56\x71\x64\xac\x42\xa2\x05\x18\x42\xc3\x20\x66\x41\x9f\xd6\x28\x86\xe7\x22\x12\x22\x41\x11\x78\x07\xa9\x7e\x04\x15\xda\x0b\x04\xc2\xc5\x68\x3e\x22\x79\x41\xfd\x77\x99\x9d\x44\xf5\x3f\x04\xd9\x4b\x4c\x48\x9d\x3a\xdd\x3f\x54\xbf\x98\x58\xb4\x01\x37\x6e\xd8\x94\xd9\x35\x1a\x9f\x2d\xd5\x38\xb1\xf4\x82\x74\x65\x2b\xb6\xae\x5a\x7f\xc7\xb8\xdb\xb3\x33\x3f\x29\xd5\x35\x65\x43\xb1\x98\xaa\x8f\xdb\x54\x84\x43\x13\x53\x35\x24\x8b\x96\xa9\x04\xb6\xa7\xeb\x0e\x65\xe3\x82\x4d\x63\x21\x6b\xfb\x8e\xe7\xf2\x92\x64\x08\x91\x8a\x33\x3a\x49\x04\x7c\x32\xec\x16\x33\x2a\x1e\xaa\xb9\x6a\x4e\x97\x97\xef\x4e\xc2\x83\xc3\x77\xc1\xbf\x16\xac\xc5\x5a\xaf\xdf\x86\x95\xed\x65\x57\x39\xb6\x55\x1e\x93\x37\x8e\x28\x50\xd5\xd2\x65\xcc\xd1\x43\x5f\x44\x9c\x1b\xe1\x81\x09\x95\xc8\x67\x64\x68\xf8\x2a\x20\x25\xcb\x0a\x1c\xc1\x37\x80\xc0\x05\x84\x6b\xb0\x02\xf0\x18\x37\x99\x05\xab\xa2\x07\x13\xbf\x29\x59\x68\x66\x95\x77\x37\x57\x08\x8f\x0e\x6e\x3b\xde\xa0\x5b\xbb\x73\x33\x4a\xa5\xad\x5c\xf6\xc6\x8a\x73\x58\xce\x38\x8a\xec\xb9\x36\x13\x8a\x92\x0c\x60\x20\x99\xb6\x4f\x60\x12\x45\x92\x34\x0e\x19\x51\xf3\x08\x0b\x97\x7d\x04\x04\xcc\xc3\xa1\x60\x29\xff\xc7\xa0\xac\x45\xc9\xac\xd4\x66\xdb\xde\xeb\xd1\xce\xce\xab\xb2\xd4\xfc\x7a\xfe\x6f\xb9\x96\x9e\xb9\x35\xa8\xe2\xe9\xa5\xdf\x3d\xb8\xb3\xbd\x6d\xd7\x6b\x19\xf2\x64\xdf\x97\x3a\x7e\x22\xfb\x96\xe8\x19\x96\xc9\x2a\x24\x30\x42\x96\x36\x8d\x00\x20\x86\xf7\x1c\xda\xe7\x25\x0c\x78\x91\xa8\xf3\x40\x24\x79\xd5\x8d\x34\x97\xd7\x0c\xcc\xb4\xf1\xff\x8a\xfc\x9f\x2d\x93\x0f\xe1\x4f\x13\x13\x72\xb6\xae\xf7\x8f\x84\xa7\xc5\xe6\x81\x54\xcd\xa1\x6b\xcd\x0b\x35\x86\x4d\x2f\x3c\x36\x68\xb4\xa7\xd0\x8e\x86\x19\xce\x63\x3d\xbb\xf6\xcb\xbd\xb4\xff\xcf\x33\x46\xc5\x51\x8f\x74\xc1\xf0\x35\x89\x84\x1a\x69\x0b\xb6\x0a\x65\x18\xba\x12\x8d\x33\x9a\xcc\x89\x2a\x4f\x92\xaa\x64\x05\x1e\xcd\xf2\x34\x63\xf1\x96\xcf\x7b\x14\xf2\x62\x73\x14\xf6\xfe\xe5\x33\xec\xcb\xc3\x33\x2e\x4e\xdf\xdc\x56\x7f\x7e\x6c\xde\xae\x3c\xd5\x87\x1c\x18\xfb\x5d\xb9\xb9\xad\x4b\x4c\x78\xf5\x74\xc0\x73\x2c\x7e\xd9\x83\x84\x29\x86\x4f\x18\x92\xce\xaa\x3e\xae\x68\x01\x47\x84\x1a\xad\xf9\xb6\x8f\x03\x35\x30\x64\x8a\xd3\x4d\x56\x0f\xa1\xc5\x7a\xae\xea\x00\x86\x08\xfe\x27\xe1\xf9\xaf\xb8\x7f\x5e\xba\xda\xf2\xe3\x2f\xca\xf7\x7b\xd7\xf8\x65\x53\xa6\xf5\x89\x49\xfc\xf7\xc3\xe6\x65\xb8\x3f\x65\xd1\xc9\x76\xc1\x9c\x86\x57\xcf\xc5\xaf\xbc\x65\xe5\x30\x08\x35\xd6\x0f\x79\x97\xa2\x08\xdf\xe3\x25\x97\xc1\x64\x8b\x15\x44\x47\xa0\x78\xc5\xf3\x55\x5b\xa6\x0c\x1e\x07\x98\xac\x49\x21\x4b\x52\x54\x18\xc6\xf6\xf8\x0d\xc7\xdf\xee\x7f\xf2\x7e\xaf\xb3\xc5\xff\x74\x37\xed\xdd\x2a\x30\x89\x42\xf3\x37\x99\xe7\x1e\xbd\xfa\xf6\xee\xef\x93\x46\x27\x76\x49\x19\x71\x65\xec\x2e\x25\xc3\x28\xb6\x23\x29\xc8\x31\x7d\x43\x27\x7c\x3c\x08\x7d\x9b\xe4\xfc\xc0\x53\xb8\x80\x84\x16\xcd\x41\x93\xc6\x65\xc0\xca\xba\xcc\xea\xc0\xb5\xac\x64\x2e\xe8\xf7\xde\xb8\x63\x5e\x96\x6b\x99\xd7\x82\x86\xf2\xb8\x0d\x25\x0b\x96\x6c\xdc\x6e\xdf\xa1\x5f\x6e\x57\xfc\xad\xd9\xdd\x65\x05\xf3\x4e\x27\xe2\x78\xab\x52\x33\x29\xcd\x65\x31\x9f\xb1\x85\x20\xe4\x70\xc9\x20\x18\xd6\x17\x20\x00\x04\x2b\x73\x82\x26\xf2\xa4\x20\x5b\xc8\x02\xbe\x63\xaa\x21\xe3\xe0\xac\x62\xbc\x57\x91\x7f\x08\xc4\x97\x98\x50\x2f\x55\xdf\x8c\x49\x97\xdf\xe7\x8c\x84\x6f\x4f\xb5\x78\x30\x68\x59\x99\xce\x4f\x0f\x7f\xf7\xee\xd6\x0f\x3d\xf3\x1e\x52\x9b\xde\x5d\x26\xf4\x58\x79\x30\xcc\x9f\x77\x57\x1c\x33\x50\x56\xd3\x22\xc1\xe3\x21\xe7\xf2\x84\x46\x78\xbe\xe1\x8a\xb4\xc7\xeb\x0a\x27\xfd\x2b\x77\x20\x1c\x4f\x70\x5c\x16\x41\x84\x45\x3a\xee\x42\x95\x8a\x92\x59\xa9\x9d\x76\xe7\xf1\xb3\x7d\x64\x83\x56\xe3\x47\xfe\x29\x68\xd8\xd0\x2f\xef\xe4\x7a\xd6\xe2\x4d\xa9\xab\x17\x5f\x75\xb9\x59\xa3\x5b\x39\x27\x8e\xc7\x17\x39\x42\x11\x21\x90\x25\x85\xf7\x60\x80\xdb\x76\xa4\xf2\x1a\x2e\x4b\x8a\xce\x88\x5e\x64\x43\x82\x97\x44\xde\x27\x24\x02\x32\xb2\x19\x89\xd0\x93\x18\x2c\x36\x68\x9c\xb8\xd9\xf3\xd3\x6a\xbd\x42\x2e\xf7\xf1\x0c\xd7\x89\x6d\xa5\x06\x8f\xe8\x9f\x26\x31\xdd\xdb\x09\x43\xda\x94\xee\xb3\x72\xd2\x81\x5a\xf1\x3b\xc7\xc2\x58\x32\x6b\xf8\x2c\x74\x39\x82\xc2\xad\xd0\x74\x02\x96\x27\x28\xca\xd0\x18\x0b\x30\x96\xa5\xd0\x12\x6f\x71\x2e\x0a\x69\x2f\xf2\x80\x08\x78\x8c\x62\x63\x60\x20\x1f\x6d\xec\xde\xab\xe0\xc5\x4a\x52\xa7\xb1\x85\x6a\xa6\xde\xf0\xb4\xd0\xad\xe1\x57\x32\xae\xa8\x72\x22\xdb\xce\x6a\xa7\xdd\xa5\xbd\xe6\x67\x8a\x23\x02\xdb\xe0\x48\x8a\x34\x20\x25\xb2\x32\x41\x9a\x50\xe0\x69\xcb\xb5\x0c\x3d\xa2\x5d\x95\xc5\x38\x02\x20\xdd\x8f\xac\x48\xd5\x23\x0c\x07\x92\x63\x3a\x4e\x0c\x92\xab\x0f\xa0\x51\x13\x13\x52\x17\x2f\xf9\x8f\x00\xc5\x4f\x9d\xfa\xdb\xf8\x0a\x17\x97\x2d\xdf\xd4\xe4\x4a\xa5\xed\x1b\xbb\x24\x64\xf9\xfd\x74\xb3\xcf\x73\xdf\x12\xc6\x5c\xbf\x00\xff\xe8\x96\xb2\x9e\x43\xec\x65\x25\xc0\x58\xbc\x68\xf9\xbc\x10\xa0\x48\x66\x03\xda\x0a\xd8\xc8\xa4\x15\x06\x00\x60\x28\xb4\xe3\x92\x16\x61\xf3\x9e\x80\x85\x26\xc3\xb9\x22\xcf\x59\x72\x6c\xf7\xf9\xe4\xfc\xca\x69\xbf\x86\x99\x73\x30\xfb\xa2\x4a\x69\x8e\x4f\xcd\x70\xaa\x68\xeb\xb9\xb9\xc1\xac\x34\xf9\xaa\x5f\x9f\x7f\xa2\x6e\x9d\xfb\xf1\x8b\xa9\x6a\x48\xe8\x34\xcd\x02\x4c\x56\x4d\x4f\x76\x02\x24\x2a\x04\x6f\x18\x82\x8d\x42\xe0\x50\x8c\x42\x6a\x0e\xa3\xfb\x91\x21\x85\x82\x14\x11\x9a\xc9\x38\xc9\x90\x13\xed\x9e\xdc\xee\x59\x8b\x1c\x63\xa7\xd7\xca\x3a\x79\xd8\xbe\x2b\x93\x2a\x1e\x98\xd2\xeb\x59\x4d\xb9\xec\xad\xd1\x25\x5a\x7c\x72\xf6\xe1\xa5\xea\x71\x0c\x52\x2e\xce\x06\xb8\x15\x45\xa6\x20\x78\x84\x4f\x3b\xb2\x44\x59\xa6\x82\x4b\x82\xc9\xd2\xbc\xc1\xb1\x96\xe8\x7a\x0a\xcd\xf1\x21\xab\xf3\x86\xce\xfb\x4a\x32\xb0\x81\xac\x1b\x0a\x95\x2b\xff\x08\x47\x8f\x26\xa6\x2b\x3e\x74\x9a\xff\x68\xe5\xa9\x4d\x57\xee\x1c\x3a\x70\x3b\x4f\x86\x03\x9f\x97\xf8\x2d\x43\xca\x36\x52\x62\x77\x28\x21\xe5\x0b\x06\x49\x92\xaa\x11\xf2\xa6\xe4\x98\x1e\x8e\xa9\x9a\xee\xeb\x0c\x05\xec\x00\x3a\x06\xc0\x74\xc8\xaa\xa1\x15\xa8\x8e\xc4\x05\x14\xff\x6f\xde\x87\x24\x74\x27\x1f\x42\xd2\x26\x26\x14\x4f\x9d\x33\x55\x52\x8f\xbf\xa5\x6b\x22\xbe\xf3\xe6\xa1\xd5\x5b\x16\x2c\x9b\xba\xf2\xfc\xf0\xd2\x65\x0b\x57\x7e\xeb\xa6\x9e\x10\x34\x5c\x91\xaf\xab\x98\x27\x4a\x19\x41\x7d\x4c\x8f\x1f\x22\x1b\x70\x21\xc3\x39\x8a\xed\x79\xa2\x6b\xf8\x11\x92\x71\x01\xda\x41\x80\x69\xb2\x2f\xf9\x9e\x00\x1c\x4c\xf7\x3c\x92\xb3\x03\xc0\xd8\x96\x64\x69\xb1\xf5\xe8\x93\x65\x9b\x76\xd4\xac\xf1\x92\x38\xb2\x8d\x6e\x58\x60\xcf\x2c\xcc\x79\x6d\x34\xcd\xfa\xe2\xc5\x1f\x4f\xba\x54\x4a\x5b\xfd\x2f\xd4\x2d\x7e\x7a\x04\x34\x18\x08\x54\xe8\x6b\x0c\xef\x44\x86\x65\xe8\x01\xa6\xb8\x01\xe9\xf3\xa1\x4d\x63\x3e\x4d\xc9\x66\xc4\xb8\xaa\xe5\x03\x1e\xd1\xaa\x23\x39\xaa\x29\xc7\x5e\x62\xa9\x70\x7c\xf9\xd3\x0d\x33\x8b\x75\x1d\xd8\xf2\xa2\xe1\xb4\xbd\x6f\x34\x68\xd2\xa1\x56\xf7\x36\x09\x7d\x3a\xa6\x5f\x3c\x69\xfa\xf5\xb7\x6d\xe3\x08\xd1\xd2\x39\xda\x70\x2c\x48\x85\x3c\x1e\xd0\x84\xa2\x9b\x6a\xa0\xe1\x86\x17\x85\x3c\xe9\x53\x86\xaa\x6b\x21\x1d\x62\x34\xed\xcb\x22\xe0\x3c\x29\x22\x62\xa5\x93\x1d\x9f\xde\x79\x50\x33\xd7\x22\x2c\xdd\xe0\xd6\xa5\xbc\x87\xe7\xd8\x23\x85\x52\x67\xfa\xb2\x5a\xd0\x77\x30\xdc\x7e\x93\x91\x26\x35\x8a\x9f\x73\xe1\x3c\xda\xc0\x74\x86\xf0\x3d\xce\x92\x39\x84\x59\x88\xa1\x3c\x1a\xa8\xba\x2f\x13\x91\x1d\x11\x04\xc3\x9b\x0c\x34\x80\xef\x87\x18\x1f\xd1\xae\xc7\xc8\xef\x95\x24\x1f\x42\xff\x26\x26\xb4\x6e\xf0\x4f\xba\x93\x5a\x99\x1f\xaa\xf6\x89\x6c\x2d\x8e\x97\xc0\x2a\xb3\x39\xf2\xae\x2a\xd2\x33\x95\x7b\xb0\xc1\xc1\x01\x9d\xde\xae\xbf\xb2\xe2\x40\xb6\xeb\x71\xcc\xef\x29\xc9\x60\x1c\xcd\x10\x42\xce\x23\x69\x0c\x10\x91\x69\x9b\x12\xc7\x38\x14\xcb\x78\x16\xf2\x0c\x53\xd0\xa0\x6e\x42\x87\xa7\x5c\x85\x8d\x44\x97\x49\xe6\x2e\x03\x7a\x3a\xb2\xc2\xf9\x3f\xf2\x2c\xb8\x3d\xe1\x74\x8e\xd6\x55\x0f\x74\xbe\xb3\xa5\x78\xc6\xc9\x83\xc7\xa5\x19\xf4\xb4\x77\xce\xcd\x2d\x73\xa7\x2c\xc7\x8f\x7d\x5e\x4c\xb6\x14\x84\x23\x3e\x60\x15\x9a\xc1\x42\x9c\xa1\x35\xa0\x78\x4a\x68\x1a\x11\x63\x12\x82\x1d\x59\xa4\x66\x93\x38\x0a\x30\xc6\x82\x00\xd3\x39\x5c\x49\x66\x2d\x7b\x7e\x83\xd2\x13\x2f\xd4\x58\xff\xc3\xb1\x4c\x2f\x9f\x30\x89\xdd\x8e\xce\xda\xd6\xcb\xdd\x5a\x1d\x5f\x53\x4b\xce\xd4\x62\xcd\xfe\xa2\xf1\x73\x2e\xb2\x20\xca\x36\x4e\x50\x90\x0c\x19\xd6\x56\x0d\x17\xd0\x08\xf2\xa2\x0c\x28\x0c\x9a\x32\x86\x87\x1c\xa4\x44\xdc\x26\x0d\x01\xe7\x14\x1f\xd1\x1c\x86\x62\x17\x7e\x3f\xed\x1d\x5e\xe5\x8e\x7b\xfd\xf1\x39\x7c\x58\xdf\x65\xaf\xce\xcd\xb9\x6c\x0d\x59\x5a\x76\xf2\xd8\xc1\x17\x32\xec\x28\xbc\xb2\x70\xb3\x94\x9d\x1f\x8f\x4d\xec\xad\xe9\x90\xc5\x5c\x9a\x92\x43\x91\x34\x84\x40\x22\x61\xe4\x4a\x8c\x4e\x41\x49\xd0\x22\x9b\xd0\x68\x51\x14\x18\x52\xb7\x23\x1c\x17\x24\xdd\xd4\x23\xee\x7d\xac\xe1\x3e\x77\xdf\xf3\x0d\xc5\x5b\x92\xb2\xb6\xe0\x41\x23\x08\xee\xfc\x00\xda\x17\xef\xb4\x4f\xdc\x3f\x64\x72\xba\xdf\x33\xe5\xc9\x90\xb2\x7e\x47\xec\x23\x0b\x18\x8e\x41\x27\xa0\x05\x4e\x75\x25\x1e\xf3\x6d\xc7\x35\x79\x8d\xb6\x31\xc3\xa6\xb0\x48\x25\x22\x5e\x92\x0c\x42\x0d\x54\x20\x85\x21\xe3\x50\x4c\x84\xbf\x07\xc0\xf9\x10\xea\x33\x31\xa1\x6f\xaa\xb4\xbd\x92\x8e\xf4\xa7\x17\x7b\xf3\x0a\x6b\x4e\xee\x3a\x79\x6c\x77\xea\x2f\x4a\x3e\xb4\x56\x4c\x18\xd3\xf7\xec\xfd\x26\x2d\xbb\xa4\xbe\x58\x24\xb1\xfc\xaa\xc2\xf1\x73\x9d\x76\x68\x92\x22\x1f\xaa\x81\xcb\x72\x98\x2e\x04\xae\xab\xd1\xb8\x17\x70\x42\x84\x1b\x02\x0f\x7d\xcb\x31\x15\xcb\xc5\x19\x29\x50\x19\x52\xf2\x55\x87\x63\x62\x5b\x6a\xc7\xbb\x79\x0f\xfc\x58\x77\xf3\xb4\x2c\xe3\xab\xd6\x74\x66\xd5\xff\xb4\xda\xaf\xe1\xf7\x9f\x96\x5a\x52\x8d\x3b\x9b\xb1\x60\xcf\xca\x67\xfa\xc4\xf1\xa3\xf0\x78\x10\x91\x86\xa7\x02\x5e\x87\xaa\xce\x93\x44\x08\x20\x1e\x45\x90\xe1\x79\x87\xfb\xd7\x6f\xa0\x81\x44\xe3\x22\x21\xe3\x84\x10\xc8\x7e\x00\x93\xb1\xd4\x77\x67\xba\x16\x4c\xac\xd3\xe9\xd1\x93\x67\x55\x6e\xde\x1f\x5b\xf9\xe7\xc9\x4f\x72\x9c\xef\xb4\x1a\x1b\xf6\xd7\x8e\x4f\x6f\x67\xff\x3e\xdb\xe9\x38\x72\xe0\x68\x2c\xa0\x9c\x90\xd2\x18\x60\x10\x91\xe4\x3b\x41\xa0\x13\x00\xb7\xa9\xd0\xe7\x74\x5c\x8d\x0c\x9f\xa3\x78\x1b\x8b\x50\xe4\x9a\x26\x16\x48\x5c\x98\x4c\xab\xaf\x49\xed\x34\x69\xf6\x9d\xca\x7e\xe2\xb3\x1b\x85\x0f\x34\x30\x37\x2c\x19\xf0\x33\x5e\x47\xa1\xc7\x77\xff\x3d\xec\x56\xb4\x45\xa6\x9e\x8b\xe2\xe7\x0f\x55\x92\x36\x11\xcd\x89\xac\x22\x21\xcb\xf2\x09\x19\xf7\x6c\xd3\x09\x6c\x13\x37\x22\x93\x27\x2c\xc3\x50\x42\x47\x13\x7d\x99\xe2\xa0\x48\xb8\xaa\x84\x25\x03\x73\x7a\x7a\xb3\xc3\xd9\xb6\x0f\x4a\x8b\x9f\x9d\x4a\x57\x24\xff\xed\x8f\xe7\x35\x4c\x33\xfd\xf6\x9e\x12\x97\x9f\x5c\xda\x11\xf6\xc8\xd5\xaf\xe2\xf0\xf8\x29\x06\x41\x31\x36\x43\xe0\xd0\xd1\xc4\x10\x88\x8c\xc0\xe8\xc8\xa6\x81\xe6\xe0\xb6\x4b\x18\xb2\x81\xb9\xb6\x8d\x21\x06\x02\x03\xc7\x34\xc2\x94\x29\xca\xfe\x7b\x1c\x3b\x22\xf3\xff\x1b\x26\x38\x31\x61\x40\xaa\xf4\xc5\x93\x1e\x7d\xc9\x55\xbe\xf9\x2a\x7b\xfc\x80\x6c\x6b\x36\x16\x97\x8e\x9b\x7f\x64\x54\xe7\x7c\x33\xa3\x60\xb9\x06\xd3\xf3\xef\xc0\x7f\xdc\xb5\xa8\xcc\xbb\xf8\xc5\x55\x0e\x49\x1e\x8a\x74\x1b\x99\x48\x82\x36\xe6\x05\x0c\xe5\x8b\xb4\x4e\x41\x0e\x53\x14\x89\x07\x48\x27\x15\x95\x0a\x44\x53\x91\x15\x8b\x04\x3a\x66\xd3\xb1\xad\xb5\xd7\x95\x54\xe7\x3a\x16\x46\x2d\x16\x8e\xcd\x9c\x69\xe0\x6d\xc5\x19\x50\xc7\x3f\x9a\xee\xeb\x9f\x73\xac\xd4\xb6\xd4\xec\x55\x7c\x7e\xeb\xf8\x89\x6c\x32\xa4\x1c\x42\x85\x63\x23\x05\xf3\x15\x5b\xd5\x70\x0b\x13\xa9\x50\x21\x19\xcc\x52\x30\xa0\x60\x50\x25\x3c\x32\xe4\x74\x52\x41\x84\x89\xe3\x1e\x67\xc4\x16\xb9\xe0\xb5\xc7\xd3\x36\xdc\x5a\x4a\x4f\xbc\x3c\xf7\x13\xeb\xe8\x88\x95\x6b\xaa\x35\xbc\xb4\x1e\x95\x6d\xf0\xac\xcc\x96\x72\x07\x9b\xfc\x76\x21\x7e\x3e\x51\xd1\x04\x06\xb0\x2c\xe0\x03\x46\x17\x34\x8d\xa1\xa0\x47\x86\xb2\xe2\x71\x9e\x6a\x30\x38\x0b\x04\x33\xf0\x48\x05\x2a\x5e\x88\x61\x3a\xeb\x86\x74\x98\xcc\x38\x76\x5d\xd3\x0c\xd5\xae\x7f\x53\xeb\xdb\xa6\x75\x4e\x56\x1a\x33\xbf\xdb\x1e\xd6\xa9\xd8\xab\x70\x51\x19\xaf\xda\x6e\xe1\xba\x13\x9f\x7e\x3d\x2c\x7e\x71\x15\xb7\x7d\xc4\x08\xa2\x24\x6b\x3a\x23\x93\xaa\xa2\xa9\x34\x24\x30\xd5\x45\xb2\x26\x03\x91\x0d\x5d\x11\x59\x8c\xe6\x49\xbe\x6d\x5a\x8e\xad\x38\x34\xcf\xc6\x4e\x05\x72\xdc\x18\x34\xf0\x5a\xed\xc4\x61\x4f\xb6\xa5\x4e\xdb\xbb\xea\xdb\x76\x00\x7c\xdf\xbf\x67\xd3\xea\x5f\x9d\x56\x2f\x8c\x61\x9a\x6d\xc9\x13\xc7\x7f\x59\x54\x68\x1d\x73\x65\xca\x44\x88\xd2\x10\x16\xd8\x84\xe8\xab\x8a\xee\x71\x8e\xe2\x48\x98\x48\x02\xd2\x20\x8c\x48\x42\xa4\xcc\x4b\x2a\x8e\x5c\x4b\x7f\x3f\x69\xc7\x40\x87\xaa\xd6\x47\x2d\xcd\x43\x7d\x86\xdf\x7c\xbc\x3a\x7a\xf8\x7d\x9f\x52\xe9\xf7\x5e\x7e\xf1\x72\xe2\xc6\x7a\xfd\xb9\x4d\x7d\x96\xc6\xef\x1f\x96\x64\x0c\x88\x1a\xab\xb8\x22\x27\x10\x14\x4b\x5a\xba\x8d\xeb\x00\xf8\x3a\xab\x59\x01\x2f\x08\xb4\x23\x44\x98\xe0\x90\xae\x85\xb1\x11\xe1\xe9\x38\x93\x0c\xd3\x10\xb1\x37\xd3\x98\x15\xf7\xf3\xe6\x3f\xb5\x6d\xcb\xb1\x1b\xa5\xad\xb4\xb9\x3e\x2b\xeb\x7d\xff\xd1\x8b\x7d\xa7\xcf\xf5\xd0\x07\x1f\xf8\x3e\x65\xbb\xd1\x31\x4d\xcf\x93\x5c\x91\x44\x36\x15\xd2\x72\x08\x68\x46\x50\x58\x4a\x97\x61\x18\x11\x8a\x21\x1b\x06\xef\xe2\x52\x48\x70\x96\x83\x73\x36\xcf\x02\x5a\xc1\xc1\xff\x94\x45\xff\xc9\x5e\x3e\x84\xc7\x4f\x4c\xc8\x99\xba\x69\xce\xa4\xd9\x4b\x83\x2f\x53\xcd\xc2\xfb\xd6\x7a\xba\xf4\xcf\xc3\x73\x9b\xcc\x5f\xfd\x6c\x6e\xbe\x61\x65\xe6\x66\xbf\x7d\xa5\x16\x53\xbd\xc1\x92\x3b\xbd\x66\xc4\x71\xf4\xc1\x03\x82\xf7\x49\xc7\xe6\x41\x88\x19\x81\xc1\x91\x38\x45\x02\x27\xa2\x55\x9b\xe0\x2d\x43\xc1\x25\xe4\xb0\x38\x04\x52\x28\xfa\x88\x50\x74\xff\x7f\x2e\x61\x27\x11\x79\xfb\x16\x3b\x6d\x42\xe7\x1a\xdf\x3d\xf8\xf1\xbb\xb4\xa5\xef\xee\xba\x37\xe6\xce\xf8\x99\x07\x7f\x2c\x5d\xad\xdd\x49\xf3\xc7\x6f\xeb\x0d\x52\xe2\xd8\xf3\xc0\x18\xc2\xe3\x14\xdd\xe0\x1c\x9b\xb6\xc2\x88\xe2\x29\xc3\x0c\x15\x40\xb3\xa2\x29\x71\x72\x14\x08\x6a\xe8\x50\x9e\xce\x90\x98\x87\x21\x8e\x52\x18\x2d\xb6\x73\x59\x30\xd1\x7f\x34\x39\xe7\xb4\x09\x39\xc8\x22\x6b\xb7\x3c\xcf\x98\x6b\x55\xa6\x06\xeb\xc7\x36\xfb\xe1\x62\x36\x96\x2b\x7e\xb4\x74\xb6\x94\x75\x96\x62\xd3\x3f\xd9\x66\xe8\x5a\xb8\x6c\x8a\xb6\x22\x09\x22\xa5\x69\x7c\xc8\xf9\x81\xc5\xb3\x8c\x2f\x11\x8c\x15\xe2\x81\xe4\x07\x0a\xc6\x46\x30\x34\x19\x11\xf8\x7c\x32\xb0\xcf\x5d\xa5\xf7\xcd\x88\xde\x65\x59\x37\xe6\xd1\xe4\x2f\x6f\xa6\xda\xfd\x1c\x36\xde\xb7\xe7\x24\x7a\x50\xf9\xf8\xaa\x9a\x0d\x9a\xa7\xfb\x24\x7e\x51\x87\x0d\x58\x49\xc3\x70\x1b\x5a\xb2\xa6\x51\x10\xf3\x90\xe1\x21\xd2\x13\x21\x50\x2c\x15\x29\x8c\x00\x54\x02\xc7\x7c\x55\xb2\x60\x40\x48\xb6\xc8\xd3\x8a\x15\xfb\x5f\x86\x0d\xbe\x1d\x57\xb4\x50\xb7\xc6\xcf\xd2\x65\x9b\x9a\x91\x1f\x51\xfd\x65\xd7\x68\x55\x9b\xfe\x09\x85\xef\x8f\xab\x93\x63\xbc\xb7\x05\xc6\xb3\x4b\xca\xb2\x80\x35\x70\x88\x53\x86\xed\x78\x16\x25\x5a\x1a\xd4\x20\x14\x79\x55\xf4\x10\xa1\x87\x01\xad\x53\xae\x42\x6b\x22\x4b\x40\x53\xa5\x14\x1e\xbc\x67\xad\x1f\xda\x87\x49\x4c\x48\xf8\x34\x55\xba\xa4\xd6\xfa\x2a\xeb\xfa\x32\xb9\xc8\xd3\x9f\x2f\xb6\xad\xdb\x7e\xbf\x39\x85\x8c\xe3\x9d\xfd\x8c\xaf\x27\x34\x7f\xf2\xc5\xc6\x0d\xfe\x58\xa9\x5c\xfc\xb2\x60\xd7\x06\x1a\xee\xc8\x24\x86\x53\x22\x22\x3c\x51\xc0\x78\xcb\x05\x16\x2d\xea\x12\x2f\x52\x24\x03\x5c\xc0\x5b\x1e\x2e\x5a\x3e\xad\xcb\x86\xa5\x23\x86\x8b\x6d\xad\xc7\x4a\x5c\x6b\xda\x76\xf9\xe3\x3c\x17\x5f\xb6\xcb\x74\xbf\x5c\xff\x59\x17\x33\xf1\x9d\xe8\x2a\x95\x9c\x4c\x1f\xbd\xee\x78\xfa\xb3\x8f\xe2\x78\x20\x58\x13\x3d\x83\x20\x6c\x1a\x60\x21\xe9\x60\x16\xf2\x02\xd6\xd2\x29\x59\x14\x6d\x4f\x60\x3d\x55\xa3\x4d\x9a\x0a\x4c\xce\x0f\x65\xc8\xab\x1c\xed\x48\x72\x32\x7d\xe0\x6f\x66\x94\xd4\xe5\x74\xcf\xe6\xa6\x39\x93\xb9\xc0\x19\x67\x6d\x9f\x9f\x66\x4d\x69\xb5\x71\x5b\xe7\xb4\x70\x6f\x53\x75\x36\xbd\x30\x65\x30\xf4\xd8\x57\x5e\x31\x96\x34\x4c\xcb\x24\x75\x45\xa3\xa1\xe3\x06\x6a\x10\x68\x04\x02\x1e\x6d\xf2\x00\x37\x3d\x85\xd4\x24\x9e\x34\x03\x9d\x02\x02\x42\x92\x48\xc8\x7c\x6c\x6b\x0d\x56\x6f\xff\xa3\x8a\xf0\x63\xfb\x5a\xd5\x57\x8f\x99\x58\xf0\x4d\xe5\x09\x57\x9e\x67\xff\x68\x41\xc2\xcd\x25\xf7\xf4\x4d\xa7\x1b\x5c\x8c\x1f\xf1\x20\x8b\xb3\x1a\x27\xca\xac\x05\x68\xd7\x8b\x3c\x4b\x56\x58\x9d\x20\x65\x5f\xf0\xa1\x6f\x92\x7c\x14\xda\x1c\x8f\xe9\x0e\x61\x6a\x22\xcd\x2a\xbc\x6f\x3b\x5c\x32\x5d\xd2\xfa\xfd\xe6\x8f\x5f\xbe\x6e\x52\x5d\xd4\xfc\x75\xbf\x36\xd8\xc4\x26\x17\x86\xd4\xd8\xbf\xab\xcd\xe7\x82\xd8\xa2\xe0\x95\x31\xbf\x29\x29\x23\xda\x88\xcd\x17\x47\xcb\x12\xd2\x44\xc3\xa3\x83\x10\xd8\xb4\x27\x00\x87\xc0\x7c\xc1\x26\x39\xe4\xf1\x92\x22\xca\x22\x85\x24\xd1\xd6\x61\xe4\x01\xc7\xf7\x28\x17\xff\x7b\x58\xb9\xb8\xce\xbf\xa5\xdd\x9c\xf3\x71\xa5\x9a\xd6\xbc\x93\x9b\x4e\x1c\x28\xd2\xce\x9f\x5d\xf7\xc4\xc3\xa1\x59\x56\x1e\xcd\x3d\xba\x55\xeb\x07\x97\x06\x57\xee\xbd\x28\x31\xe1\xdd\xbb\x6f\xff\x49\x89\x37\x72\xf5\xb3\x5c\x46\x99\xe3\x8f\x6f\xbc\x6c\x4d\x77\x38\x39\x74\xff\xf4\x71\x36\xb3\xea\x62\xe6\x3f\xcb\x55\xcb\xb0\x3b\xe3\x27\x5d\xb6\xc7\x71\x6b\x44\xa2\x68\x29\x20\x4c\xd1\xc4\x18\xd3\x40\x82\xa5\x20\xc7\xd0\x0d\xda\x81\x38\x64\x31\x24\x72\x7e\x88\x07\x9c\xe2\x98\x3c\x2b\xab\x22\x25\x93\x98\xf3\x7e\x82\x36\xbb\x6a\xfa\x5e\xea\xfe\xd3\x5f\xd4\x1a\x90\xfb\xb1\x20\xf6\xda\x5b\x21\xc7\xf0\xf1\x59\xaa\x9f\xb9\x9a\xee\xe4\x72\x34\x69\xf8\xb7\x7b\xe2\xa7\xf7\x9a\x62\x09\x0c\xc6\x8b\x34\x23\xf9\xb2\x80\xb9\x24\x2f\xb0\x90\x51\x1c\x4c\xf0\x90\x1c\xf8\x56\x28\x12\xa6\x8c\x1b\x34\x54\x29\x89\xb1\x79\x9d\x95\xb5\xf7\xf7\xcc\xe7\x0c\xad\x95\x6a\x66\xab\x2e\x07\x7a\x96\x7a\x96\xee\x7e\xfb\xaf\xdb\x2d\xab\x10\x3d\x6e\x54\x7a\x13\xcc\x3f\xef\x74\xd5\x55\x1b\x76\xbd\x8c\x5f\xea\x62\x44\x8a\xc5\x58\x18\x19\x69\x4c\x04\x15\x4d\x35\xd8\x48\xb5\x75\x13\x02\x3f\x70\x25\xdd\xf4\x38\x81\x76\x21\xc7\xf9\x82\xcb\xf9\x3e\x86\x64\xdf\x4a\x06\xb5\x51\xaa\xd6\x30\xa3\xe8\x96\xcc\xcf\x8f\x6c\x5d\xb0\x69\x70\xed\x34\xe5\x0e\xbd\x5b\x52\xe5\xc4\xaa\xac\x47\x37\xb6\x28\xbd\xfa\xe0\xa3\xbc\xd5\xe2\x67\xa6\x94\x14\xf8\x48\x16\x64\x19\x0b\x4c\x13\x50\xb6\x64\x59\xc8\x97\x81\x2a\xeb\x5e\x14\xe2\x36\x81\x30\x85\xf6\x59\x19\x69\xd0\x93\x03\x8e\xc6\x05\x36\x06\xdf\x99\x53\x6b\x77\x91\xd3\x7d\xd0\xce\xfe\xcb\xfe\x28\x27\x3e\xca\x15\x15\x5d\xfe\xfb\xc9\x2f\x7b\x37\xb6\x7e\x29\x5a\x65\x5c\x81\xec\x77\x52\xc6\x0e\x12\xbb\x1d\x00\x78\x27\xf2\x6c\xd7\xe1\x09\x4b\x52\x28\x85\x24\x0d\x0a\x33\x4d\x99\x76\x42\x08\xf1\x08\xa7\xc3\xd0\xb5\x20\x2e\x6b\xaa\xc7\xe0\xba\x47\x22\x36\x39\xd2\xc1\x54\xdb\x1a\x96\x5d\x7f\xe8\xaf\x19\x6b\xd6\x1e\xbf\xd2\x79\xb1\x44\x0c\x6d\x77\xa4\xc1\xf1\x31\xdf\x3e\x59\x56\xc0\x7c\x54\xfa\xe0\xa7\x63\x93\xbe\xde\x3b\x6b\xf9\xd4\xa7\xcb\x66\xf1\x75\xf6\x96\xec\x36\x63\xd2\x0f\x9b\x3e\x31\x5b\x9c\x99\x3f\xeb\xcd\x10\x21\x61\x5e\xc9\x4d\x6a\x7d\x94\xe4\xeb\xf5\x3f\x5d\xaa\x4f\xd5\xcd\x87\x5f\xec\xed\x78\x69\x53\xd3\x9a\x75\x57\xae\x67\xca\x8c\x6e\xbe\x47\xed\x3b\xa7\x4f\x66\x7b\x4d\xaa\x2e\xf1\x3b\x56\xce\x00\x59\x22\x75\x56\x63\x5d\x16\x40\x01\x0f\x31\xda\xe0\x1c\x46\xb1\x08\x59\x23\x04\x4a\xe2\x01\xe5\x7a\x81\x43\x02\x56\x24\x30\xd3\xa0\x20\xf2\x59\xea\x7d\x73\x3e\x69\x2c\x2a\x97\xfe\x6d\xbf\xda\x83\x0a\x11\xa9\x9b\x29\x55\x77\xcd\x18\x79\x29\x23\xd9\xfb\xd1\xf6\xd3\x23\x6b\x36\x59\x35\xe0\x46\x96\x38\xf2\x30\xa8\x14\x0a\x25\x5a\xe0\x15\x4d\x0c\x79\x95\xd4\x03\x19\x0f\x0c\x4a\x33\xf5\x10\x63\x55\x3c\x74\x04\x95\xe0\x82\xd0\x50\xa0\x2d\x07\x18\x83\xc3\x28\x19\x1e\x86\x74\xdf\x4c\x6e\xd7\xaa\x5a\xdb\x1b\xb9\x77\x7c\x57\xe7\x2b\x4f\xbb\xc6\x8f\x1c\x57\x68\xa9\x53\xa0\x56\xed\xee\x15\xeb\x10\x57\xc3\x94\xdd\x5a\x89\x69\x1f\x04\x25\x0b\xba\xcf\x3a\x98\xa5\x11\x8c\xe1\x29\xac\x2b\xd0\x21\x6d\x86\x90\x57\x2d\x21\xf0\x1c\x97\x00\x0e\x65\xb8\xba\xaa\x58\xa1\xcd\xda\x81\xc7\xc6\xa0\xce\xea\xfb\xb4\x57\x30\xfa\x56\x99\xd7\x68\xd9\xd5\xa9\x37\x9f\xa6\xdd\x70\x77\x7c\x09\x6d\xfb\xea\xae\x6b\xa7\x95\x5c\xf6\x71\xfe\x06\x55\xe2\xb8\x0a\x40\x20\x48\xa8\xa1\x89\x24\x29\x74\x75\x91\xb2\x5d\xd1\xe3\x79\x42\x66\x14\x1b\x87\x8e\x2d\x84\xb8\xaa\x09\x16\x10\xad\x90\x09\x59\x28\xe3\x02\x69\xda\xef\x3b\xcc\xe1\x15\x66\xb7\xde\x3f\xb3\x76\xa5\xa0\x62\xb5\x4e\x0b\x7a\x74\x1a\xbe\xce\xc9\xd4\x7f\x2e\x2a\x3d\xe8\xd1\x21\x6c\xf8\xc1\x85\x15\xe3\x88\x68\x8a\x7c\xc9\x08\xa1\xac\x10\x2c\xcf\x89\xc8\x75\x05\x56\xb5\x19\x0e\xd3\x55\x93\xe2\x1c\x03\x13\x08\xc5\x43\xb4\xcd\x59\x30\x90\x1c\x1a\x17\x0d\x80\x89\xb1\x15\x02\x4b\xf7\x7d\xe2\xa4\x8e\x67\x26\xbf\x79\xf7\x64\xfe\x49\x54\x65\x50\x38\xec\xdc\xeb\x79\x3d\x53\xcf\xcb\x1b\x4e\x6c\xd1\x67\x5d\xe9\xf8\x21\xce\x19\xc9\x34\xa2\x08\xe7\x2d\x48\x72\x8c\x23\x91\x18\xcd\x59\x3e\xa6\xf9\x38\x19\x42\x12\x09\x01\xcb\xf9\xac\x87\x58\x0f\x39\x6a\xa8\x3b\x3c\xa7\xba\xbc\xfe\xbe\x42\x04\xe7\x72\xd4\xe8\xf4\x69\x21\x78\xe7\x4a\xc3\x1f\x2a\x36\x5d\x76\xa9\x87\x23\xe1\x23\xfa\x96\xd8\xde\x6e\xc1\x97\xc7\x1b\x78\x93\x72\xc7\xef\x1f\xb6\x31\x8e\xa7\x8c\x80\xa2\x54\xcc\x0e\x64\xd9\x91\x4d\xe4\x87\x8c\xee\xb2\x96\xc2\x3a\x78\x88\x28\x45\x73\x08\x68\x53\xae\xa3\xb9\x3c\x0e\x3c\xc3\x8e\xa1\x10\xbf\x64\xf9\x69\xeb\xcd\x1f\x86\x9c\x9a\xd0\xb8\xfa\x92\x9f\x0a\xef\x9c\xb3\x75\x49\xba\xd4\x1b\xe6\xde\x7c\x7c\x78\xcd\xa1\x5d\x09\x53\x75\x2d\x8e\xdc\xcf\x12\x66\xaa\x21\xe4\x25\x92\xe3\x45\x49\x63\x70\x59\x37\x3c\xd5\xf6\x65\xcb\x50\x4c\x9b\x46\x92\xe4\x73\x20\x00\xb4\x1a\x32\x88\x74\x14\xe8\xa0\x64\xd0\x54\xc3\x1a\x9e\xff\xe5\xa6\x79\xf7\xfe\x6f\x3d\x3e\xce\x96\x2f\xf3\x9a\x86\x7b\x1e\x1d\x82\xeb\xd9\x26\x1b\xef\x2f\xf8\x39\xf7\xf0\xac\x56\x1c\xa9\x7b\x82\x28\x00\x3c\x16\xe8\x0a\xe9\x73\x81\x06\x6c\x9e\x51\x65\xd9\x32\x25\x42\xa5\x43\x97\xe4\x89\x00\x61\x91\x89\x29\x90\x64\x2c\x2a\xc2\x1d\x68\xb0\x49\x2a\xa0\xbf\x75\xb8\x62\xe5\xea\x5f\xc2\xfc\xb9\x1a\x7f\xfa\x74\x51\xad\xe5\x07\x9a\x65\x6c\x32\x3a\xcb\x91\x4c\x9d\x3a\x9c\xc8\x55\xff\xdb\xbd\x6a\x8d\xda\x0b\xe3\x48\x4e\xa0\x47\xb2\x1f\xda\x92\xa7\x51\xba\x0f\x75\x80\x61\x2a\xf2\x4d\x07\x77\x6d\x18\x85\x00\x46\x48\x42\x40\xf2\x28\x87\x16\x6d\xc1\xe0\x34\x26\x8c\xdc\xf7\x75\xf8\x9b\x26\xbb\xbe\x3e\x3a\x46\xfb\xae\xc5\xe6\x4a\xd9\xaf\x56\x5f\xf6\xee\x99\xb2\xf3\xe7\xef\x6b\x37\x1a\xd5\x75\x78\xa9\xcf\x8f\x2f\x7f\x30\x29\x7e\xe2\x2a\x9e\x2c\xda\x96\xe7\x13\x88\xf2\x78\x33\xd0\x35\x44\x50\xc8\xd7\x6c\x82\xf6\x31\xe8\x42\x64\x09\x38\xc6\xfd\xcb\x41\x08\x9e\x42\x08\xc8\x97\xed\x18\x26\xf7\xcd\xd0\x2f\xfc\x16\x99\x73\xcc\x24\x4a\x92\x79\xb7\x8f\xf9\xfe\xd9\xe5\x33\xd1\xb7\xea\x85\xfb\x67\xb3\x9f\xbc\x7b\xff\xda\xd2\x27\x29\xdb\x7f\x8f\x7d\xb1\xc2\x64\x7c\x8d\xb3\x48\x55\xa3\x71\x10\x78\x06\xc5\x8a\x3e\x45\x05\x8c\xcf\x5b\x2c\xcf\x47\xaa\xc3\x06\xa2\x2e\x89\x26\x83\x14\x0f\xc9\xaa\x87\x47\x62\xec\x3e\x45\x8f\xc9\x6d\x5f\x7e\x5e\x6c\xf4\xfd\x76\x87\x7a\x9d\xae\x9e\x5d\x29\x36\x4b\x98\xf5\xd4\x1a\xf3\xf6\xb1\xb2\x19\x74\xba\xc8\xaf\x88\xe3\xd4\x99\xb0\x30\xdf\x55\x30\xdf\xe3\x34\x8e\x14\x5d\x5d\x66\x15\xd5\x30\x4d\x4e\xe6\x09\x02\x33\xd8\xc0\x8f\x38\x0e\xe0\x20\x74\xa0\x26\x39\xa4\x2e\x29\x0e\x4c\x86\x7f\xa5\x5e\xa7\x5a\x0f\xbf\xd9\x78\x7c\xce\xc6\xa9\x23\xba\x90\x67\x8e\xdf\xb9\xba\xf5\x4d\x83\x3d\x69\xca\xce\x59\x60\x4c\x59\x47\x80\x01\xf9\x93\x86\xf1\x0c\x05\xb2\x16\x7e\x38\xe6\xee\x9f\xd7\x4e\x5a\x8b\x0e\xe1\x65\x7b\x83\x8e\x43\x6f\x77\x00\xbb\xa8\x21\xab\x36\x7c\x3c\xc8\x74\xe2\xa7\x42\x02\xe1\xd9\x28\xb4\xc2\xc0\xa3\x90\xeb\xeb\x5a\x84\xec\x30\x64\x78\xd3\xb1\x24\x21\x60\x71\x22\x12\x0c\x26\xe4\x08\xc6\x92\x70\x86\x92\x40\x20\x29\xe6\xfb\x2a\xb4\xbd\x58\x93\xe7\x59\x57\x17\xd8\xdc\xe1\xdd\xf9\x22\xd8\x38\xe3\xd3\x92\x5b\xa7\xe6\xf7\xf9\x01\xc7\x07\x17\xa0\x9a\x64\x3d\x6b\x1d\x8d\x9f\x0a\x19\xbe\xc6\x73\xa1\x2b\x5a\xb8\x8d\x18\x93\xe6\x24\x8f\xf0\x48\x2b\x34\x02\x0b\xf3\x71\x2f\x14\x24\xd7\x51\x1c\x39\x72\x79\x60\x62\x9a\xc9\xa8\xb6\x1c\xa3\x4c\x3b\xb3\x6d\x58\xc7\x7d\x4d\xa3\xb9\x6d\x0b\x0d\x67\x32\x7a\x47\x47\x14\x73\x7a\xb5\x7f\xd9\x76\x4f\xf8\xe0\x8b\xa2\x5f\x76\x2a\xf2\xea\x54\x1c\x11\x51\x26\x74\x75\x5c\xa4\x81\x8f\x70\x8c\x02\x2e\xa1\x32\x96\x4e\xcb\x1c\xef\x46\x0e\x67\x49\x81\x88\xe9\x91\x4f\x47\xc8\xa3\x4c\x1d\x87\x94\x18\x21\x26\xb6\x0b\x9c\xd6\x6b\x71\xff\x75\x87\xfc\x5c\x97\xeb\xf6\xb0\x66\x55\xb8\x3d\xb4\xc0\xda\x6f\x6e\x8e\x75\xda\x35\x21\x96\x7f\x5b\x67\xe2\xde\x36\xfd\xe2\x88\xac\xb3\x19\x46\x43\x6a\xa8\x12\xd0\x36\x51\x60\x0b\xba\xe4\xba\x8a\xe9\x3a\x0a\x4b\xe2\xa1\x2d\x63\xa1\x4b\xb0\xb4\xc4\xc8\x9e\xa9\x9b\x21\xad\xe9\x7c\x0c\x8e\xdc\x2d\x37\x5b\xd7\xc9\xbf\x37\x5d\xd3\x97\x95\x0a\x4d\x3b\xfc\xc9\xe0\x43\x95\x56\x76\x5b\x72\x33\xe2\x3f\x59\xd9\xba\x70\x3d\x0a\xa4\x8a\x63\x65\x49\x78\x48\x57\x59\x87\x50\x35\x96\x8b\x58\x97\xa1\x20\x34\x39\x82\xd3\x5d\xc7\x8f\x4c\x45\x8e\x24\x20\x51\x16\xa7\x01\x8b\x13\x19\x17\x44\xc0\x31\xf9\xf7\xf5\x77\xe7\xa2\xb7\xe9\xaf\xf7\xaf\x7f\xd6\xfb\xeb\x8b\xcf\xfa\xbe\x5c\x7d\x39\x73\xe7\x01\x5b\x8b\x08\xbf\xbf\xa8\xff\xf4\xc6\x8c\xef\x47\x3e\x4f\xd9\xe8\x2a\xf6\x3a\x95\xe2\x49\x06\x04\x38\xeb\x33\x1a\x49\x73\x12\xae\xe8\x04\x86\x69\x0a\x21\x38\xaa\x87\xb3\x0e\xd0\xd8\x08\xe3\x21\x72\x20\xe7\x33\x91\x88\x31\x9c\x16\x1b\x6f\xd6\xf2\xf0\xcc\x55\x89\x1b\xdb\x16\xd8\xdb\xf3\xe1\xa8\x0a\x07\x0a\xec\xca\xd5\xa0\x50\xa3\x5f\xaa\x3d\x27\x73\xa4\xce\x34\x8a\x38\xf9\xf6\x79\xfc\x74\x98\x0c\x28\x4b\xb0\x00\x8f\x53\x54\xa0\x18\x2e\xeb\x01\x86\xd5\x08\x1d\xaa\x04\x23\x11\xae\x88\x47\x86\x48\x58\x98\xcb\xd8\x98\x60\x00\xcc\xd6\x74\xd3\x7b\xff\x1f\x5e\x7a\x98\x5d\xd5\x9f\x49\xf5\xee\xd4\x82\x4b\xf5\xd2\x15\x5f\xff\xf8\xd0\xb3\x9a\x1b\xfe\x7c\xbb\xb0\xed\xc2\x42\x97\xdf\x0d\x58\x59\xf7\xaf\xf8\x75\x46\x50\xa8\x61\x1a\xed\xd8\x0e\x2b\x52\x9c\xcf\xd9\x8c\x67\x32\xb4\x29\xf9\x14\xc3\x7b\x82\x29\xea\xac\x4f\xe1\xa6\x64\x6a\x18\x72\xcc\x00\xaa\x24\x8b\x0b\xb1\x31\xdc\x5a\xd5\x2c\xdb\x1e\xae\xcf\xac\x97\x6d\x39\x5c\xe6\xd6\x0f\xac\x7e\x76\x54\xcf\x57\xe3\xcb\xb6\x3b\x71\xf9\xca\xc7\xa3\xe8\x62\x9b\x53\xc6\x81\x15\x53\x64\xd2\xf6\x48\xc5\x14\x54\x05\x93\x14\x99\x83\x88\x50\x18\x52\xe2\x23\xd3\x27\x1c\x57\x33\x48\x8c\x65\x38\xc3\xe5\xa8\x48\x56\x71\x99\x74\x28\xa4\x9a\xd8\xfb\xa9\xe8\xc5\x8b\x37\x06\x8f\x7c\xcd\x4f\x58\xb6\xe3\x72\xf6\xf1\xbf\x2d\x1d\x50\x66\x00\xdc\xbe\x7d\xf6\x57\x77\xa6\x4f\xba\xf9\x62\xdc\xbc\xa7\xe9\xe2\xe8\x83\x03\xc1\x65\x22\xcf\xa7\x23\x86\xb0\x79\xde\xc4\x2c\x5a\x56\x03\x4a\x66\x09\x07\xb3\x25\x3e\xb2\x49\x55\x21\x49\x83\x64\x58\xd7\xb6\x04\x32\x62\xec\x64\xc2\x78\xe3\xca\x43\xae\xa4\x6f\xdf\x61\xc5\x83\xc6\x3d\x06\x81\x03\x3b\xf7\x58\xed\xea\xd4\xcd\xd5\xbf\xd6\xb3\x9f\xa5\x2e\x1f\x55\x68\xd9\x2c\x67\xfc\xfe\x61\xd7\x53\x7d\x83\x8f\x58\x10\xda\x06\x27\xd3\x38\x6d\xe0\x06\xe5\x72\x04\x90\x70\x2a\xa4\x28\x39\xc4\xbc\x48\xa7\xa0\xc4\xe2\x10\x20\x5f\xa1\x7c\x19\xc4\x56\x8a\x19\xf9\x2e\x56\xee\xa1\xf6\xfe\xf2\x2b\xa9\xee\xb8\x09\x73\xf2\x64\x98\xd0\xa4\xca\xf7\x4b\x86\x6c\xa8\x31\xc4\x39\xb1\x76\xf3\x44\x3f\x65\x0c\x4e\x31\x3b\x18\x8c\xc9\x53\x40\x64\x74\x1f\x07\x41\x14\x19\x58\x60\x00\x08\x3c\x99\xb1\x29\x32\xc2\x7c\x83\xf2\x02\xcd\xf5\x75\x9c\xc7\x70\x9f\x84\xa1\xaa\x4a\x11\x7a\xdf\x0f\xaf\x59\xb4\x62\x79\xef\x84\xc3\xf5\x9a\x4f\x7f\x6a\xe7\x1a\xde\xf1\xf7\xd2\xb3\x66\x57\x2f\xf4\xd1\xe1\xab\xd5\xd6\x52\x0f\x85\x05\x2d\x0f\xc6\x71\xa0\x63\x30\x98\x22\x70\x92\x66\x85\xa4\x68\x04\xae\x1a\xd1\x3c\xab\xf1\x72\x48\x11\xac\x1b\x98\x38\x72\x31\x59\xc7\x64\x48\x46\x6c\xc4\x8a\x1a\x19\xa2\x28\x19\xe2\xc0\x9d\xfb\x77\x7e\x15\xb6\x3b\xef\x0d\xfd\x36\xed\x89\x96\x37\x7b\x86\x95\xe0\xdb\x96\xb9\x17\xd5\xca\x96\x7b\x71\xcd\x3e\xe2\xa7\x65\xe7\x25\xf9\x1e\x8d\xaa\x71\x5d\xc7\xcf\xff\xb1\x72\x91\xf4\xd7\x1a\x7f\x34\xbc\xd7\x92\xfe\x43\x6e\x2f\xf8\xb2\x70\xed\xcb\xb3\xbb\xa5\xeb\xfa\xe2\x70\xe7\x94\x4d\x5f\x63\xd6\x8b\x38\x2b\x6b\x9e\x08\x59\x9d\x72\x69\x13\x27\x09\xe8\x13\x84\xc7\x45\x11\x1b\xca\x0a\xef\x0a\x82\xa5\x9a\x9c\x27\x7a\x92\x68\xe9\xbe\xca\x11\x26\x65\xc5\xe8\xb8\x7e\x71\x64\xd6\xf4\x85\x5d\x36\x6e\xbc\x88\xff\x36\xba\x44\xda\x0d\xea\x9e\xa7\xaf\xe8\x2f\x3e\x5f\x7b\xa9\x55\x69\x7d\xf4\xb8\x3a\x4c\xca\xf6\x76\x63\xc6\x45\x53\x36\x65\xdb\xf3\xb9\xc0\x67\xf9\xc0\x82\x32\x04\xac\x0a\x91\xac\xe9\x8e\x6f\x48\xb2\x61\xd8\x16\x23\x42\x3f\x88\x14\x8a\x84\x3a\x45\xa2\xff\x9f\x0a\x26\x46\xe2\x7a\x74\xe5\xa4\x2c\xec\x47\x5b\xbb\x96\xae\xbc\xf1\xcc\xb4\x02\xf5\x56\x16\xbf\x85\xe5\xfd\x71\x61\x97\x55\x19\x0b\xe7\xbc\x7f\xe1\xe1\xc2\xf2\x49\x5f\xbf\xe9\xaa\x55\xde\xf9\xc6\x3e\x73\x6e\xf3\x9c\x8c\x67\xd2\xb7\x9e\x1e\xf6\x7e\xbb\x63\xf9\xa4\xf2\x6d\x1b\x21\xf4\x65\xfd\x2d\xaf\x47\x26\x71\x00\x99\xb6\x34\xa4\xc6\x15\x49\x7f\x5f\x4b\x58\xb7\x75\xea\x8f\x77\xd2\xbf\x13\x7f\xe8\x56\x4a\x7b\x5c\x47\xff\x7a\x75\xf3\x41\xdd\x33\xa5\x0c\x9a\x1e\x9b\x00\xc5\xc5\x19\x18\x31\x8a\x4d\x73\x88\x60\x54\x8f\xe6\x15\xda\x96\x54\x13\x0a\xa2\x26\xf2\x81\x25\x73\x82\x1e\x3a\xc0\x0f\x58\x17\x19\x24\x4b\x20\x59\x4c\xa6\x3d\x5a\x73\xcf\xe3\x17\x99\xe6\x4c\xf9\x0c\xac\x22\xbe\x3a\xbf\x31\xb3\xf9\xf5\x4f\x3d\xb6\x77\xa9\x71\xf6\xd1\xa1\x2b\xbf\x1a\xcc\x3c\xd7\x4d\xfa\xfa\xb3\xb9\x5f\x8d\x31\x46\xca\x75\xe6\x7c\xde\xbd\x41\xa6\x36\x05\x2b\x70\xb9\x57\xac\x3a\xb6\xd1\x93\x97\x3d\x9e\xd7\xf3\xe0\xe6\xe6\xf3\x93\xbe\x2e\x78\xf7\xcf\xaf\xb2\x0c\xfa\xe3\xc7\x26\x89\xaf\x87\x74\x98\xe2\x28\xa5\x5e\x2c\xfe\xae\x51\x9b\x15\xad\xbb\x36\xdb\xd4\x2d\x63\xab\x7b\x1d\x93\xa8\x7e\xd5\x11\xab\xf2\x5c\x5c\xcb\xe6\x39\xdd\xc1\x29\x59\xda\xe8\x8f\xe5\x94\x5b\x4e\xad\x9a\xe6\xfe\x9e\xe6\x4c\xc6\xf4\x99\xde\xb4\x2e\x1e\x3f\x5d\xd2\x55\x9b\xf1\x1c\x8f\x71\x81\x26\x40\x31\xe2\x2c\xd2\x91\x7c\x4e\x41\x91\x47\xfb\x08\xe0\x24\xc7\xaa\xaa\x82\x42\xc5\x09\x59\x25\x14\x43\x5b\xe0\xa2\xf7\x33\x80\xbb\xcf\xff\xd4\xc7\x3e\x1f\x71\xa4\x74\xcf\xe5\x97\x0a\xdc\x4e\x05\x0f\xd6\xaa\x1d\x6a\x4b\xd7\x56\x1f\xf3\x62\xf9\xea\xfc\x55\x1a\xf5\x8a\x63\x67\xc7\xc6\x31\x5c\xf4\x79\x39\x24\x7d\x5b\x62\x19\xc5\xc2\x23\xd6\x73\x58\x02\x1a\x44\x84\x31\x3e\x87\x48\x40\xf2\xbc\xef\x00\x5b\x0b\xa1\x81\x24\x96\x4f\xe6\x5b\x9f\x5d\xbe\x79\xda\xd7\x4f\x3e\x41\x47\xca\x4e\xe8\x77\x75\xce\xc8\x15\xeb\x06\x9c\x7d\x96\xed\xe5\x5f\x8f\x2f\xb7\xb8\x9f\xf7\xf1\xa2\xd6\x5c\xd2\xd7\xdf\x56\xa0\x5f\x6c\xd9\xd6\xfb\x3e\xd3\xf2\xd6\xf4\x82\xcd\x32\xae\x7f\x54\xba\xc7\x8e\xf9\x4f\xb0\x1c\x27\xbb\x17\x68\xd5\xeb\xd1\xe8\x34\x49\xbe\x5e\x62\xbb\x2e\x39\xab\x65\x1c\xf0\xf2\xe9\xfa\x27\x15\xee\x72\xa9\x5f\x0f\x1e\x3b\xb6\xd2\xd5\x81\x7e\x7e\x6b\xd3\x04\x32\x8f\x3e\x7b\x6c\xfc\x02\x89\x4b\x86\x18\xc7\x49\x0c\x4d\x52\x12\xc5\x92\xae\x69\x06\x82\x8c\x59\xae\x4d\x68\x7e\xa4\x3b\x81\x26\xe0\x74\xc0\xa3\xd0\xd0\x55\x9e\x36\x24\xd2\x40\x20\x46\x20\xe9\x3c\xfe\x50\xda\x7a\x88\x1a\x35\xa0\xe5\x1f\xcd\xdd\x5b\x13\xee\xa7\x1a\xb4\x15\xcf\x9e\x30\xb3\x6d\x87\x4f\xaa\x55\xe9\x3f\x34\x7e\x5f\x8f\x15\x31\x1a\xf7\x43\x9a\x8e\x64\xdc\x31\x29\x41\x51\x25\x89\x91\x54\x9b\x40\xa1\x28\xd2\x3a\xd0\x30\xcd\x94\x42\xc5\xc7\x48\x2d\x34\x38\xcf\xb0\xbc\x48\x8b\x1d\xaa\x6b\x55\xd8\x67\xd6\xfd\xa1\xc7\xcf\xe7\xa7\x14\x6c\xf2\xe3\xc9\x87\x4f\x40\xbf\x17\xb7\x0a\xcf\x6f\xf1\xe5\xdb\x86\xc1\x97\x97\x5b\xb5\x4f\x59\xe7\x33\xa6\xc2\x51\x12\xaf\xa9\x1c\x6e\xf9\x4a\x80\x7b\x78\xe4\x04\x82\xed\x32\x3c\x25\x85\xbe\x44\x89\x3c\xcf\xf0\x2a\x69\x06\xba\xae\x69\x92\x84\x89\x3e\x1d\x60\xff\xc3\x14\xf6\x5f\x71\x47\xbf\x79\xb0\xa5\xdd\x6f\x87\x3a\xd4\x18\xf5\x58\xd8\x3f\x2c\xdb\x18\xb6\x59\xae\x8b\xfd\x6e\xff\xfe\xcd\xdc\x01\x13\x1b\xa0\x6e\x53\x53\x06\xee\x8a\xed\x0b\x25\x9d\xa6\x70\x4b\x16\x49\x99\x31\x04\x8b\xe6\x5c\x37\x34\x05\xda\xa1\x03\xdc\xe1\x4c\x52\x81\xb6\x28\x88\x1c\x23\x8b\xa4\x65\x5a\x98\xc1\xd3\xff\x1e\xf3\xbf\xff\x0f\xef\xe8\xbe\xbe\x4d\x8d\x59\x59\xb2\x58\xfd\x2f\xf7\x7d\x9e\xbf\x6b\xfa\xbf\x9a\x8f\x28\xd2\x21\x63\x9e\xc9\x99\xaf\xa7\x2f\xbf\xbe\x59\x83\xf8\x2d\x66\xb2\x38\x08\x70\x8d\x31\x89\x88\xf5\x7d\x47\x85\x0c\x03\x1c\x10\x08\xba\x18\xd2\x02\xaf\x53\x2e\x66\xd0\x91\x02\x5d\x56\x77\x1c\xdf\x0d\x54\x8e\x65\x61\x8c\x66\xed\x81\x49\xbf\x7d\xb2\xbb\x6d\xc3\x6b\x39\x4f\xf7\x2d\xfc\xe2\xd7\xc5\x93\xfb\xf6\x39\x77\x15\x36\x98\x51\xbd\x71\xc7\xeb\x67\x3a\x56\x35\xd2\xc7\xcf\x61\xb2\xa6\x65\xb0\x9e\x03\x15\x46\xc1\x34\x4a\xe3\x34\xd3\xf0\x59\x15\x9a\x0e\x27\xf1\x1a\x25\xc9\x86\x8b\x80\xa7\x12\x00\x73\x65\xd9\x23\x19\x5f\x96\xa9\xf7\x18\x28\x3e\x34\x86\x4b\x4c\xc8\x93\x2e\xcd\x3f\x76\x5e\xba\xb0\x19\x36\xb5\x1b\xf4\x79\xb6\x17\x6d\x76\xd4\x9c\x94\x01\x7f\x6d\xb5\x7d\xd7\x62\xf7\xc9\x7e\x47\xba\xa5\x35\xc4\xba\xfd\xeb\xc5\xb1\x51\x1a\x40\xd5\x43\x16\xa0\x4c\xc0\xc9\xd0\x0d\x2d\xa4\x7a\x4c\xa4\x3a\x46\xa4\x30\x62\xe8\x18\xb4\x41\x02\x59\x40\xb8\x6b\x84\x02\x26\x44\x02\xe0\x23\x2a\x76\x3b\xba\xcd\xd3\xae\x57\xaa\x31\xc3\x27\xcf\x7c\xdd\xe2\x71\x9e\x65\x95\x77\x6a\xd3\x1e\xba\x03\x0b\xb5\xdb\x5a\xf3\xc6\x94\xdd\xa3\x2a\x5d\x4e\x19\x43\x58\x32\x64\x50\xbe\x6d\x6a\x32\x6b\x12\xae\x4f\x73\x8e\x87\xf9\xa2\x2b\x53\x86\x22\x38\x16\xc1\x53\x06\xe6\xaa\x01\x8b\x6c\x03\xaa\xb2\x84\xb9\x2a\x4d\xb8\x1c\x88\x0d\x15\xe9\xfc\xb6\x5d\xc5\x8a\x2b\xef\x69\x5e\xf6\x0e\xe5\x7f\x5d\xdf\xb2\xfb\x85\x21\x2f\x3a\xd6\xfc\xfa\x64\x9e\x15\x2b\x32\xbe\xb8\x7e\xee\xbb\xf8\xf1\xf5\x33\x0a\xa3\xe2\xba\x82\x79\x82\x0b\x91\xaa\x00\x93\x33\x28\xce\x44\x8a\x63\xab\xb6\xca\x43\x9c\xc4\x7c\x8b\x66\x3d\xcf\x97\xdd\x80\x70\x20\x45\x0a\x58\x32\x3c\x1f\x52\xfd\x0b\x53\x5b\xce\xfd\xea\xf6\xc1\x93\x75\x5f\x37\x1f\xfd\x45\xad\x41\xf9\x8e\x1d\xf3\x07\x6d\x19\xb4\x6d\x1d\x39\x08\x4c\xcf\x5e\x31\x7e\x75\x00\x0a\x48\x5e\xa1\x2d\x53\x16\x64\xce\x8c\x3c\xd7\x15\x7c\x17\x57\x2d\x3f\x60\x7d\x05\x0f\x69\x8b\x66\x58\x22\xf2\x35\x5e\x24\x0d\x9c\x10\x5c\x4e\x37\xff\x46\x40\xbf\x48\xff\xff\x36\x53\x4e\x6c\x58\xfc\xbb\xd4\x49\x35\x7f\x54\xd7\x34\xbb\xec\xfd\xfd\x4a\x9f\xda\x5f\x72\x7b\xad\x9d\x8b\x37\x6c\xfa\x75\x58\xc3\xbe\x99\xb4\xbe\x0b\xd7\x07\x47\x2b\x67\xe8\x79\x22\x8e\x8c\x5b\xb2\xc6\x47\x4e\x00\x69\x5a\xa2\x42\x2f\xe0\x15\x9a\x16\x75\x1a\x63\x05\xcb\xd2\x65\x0c\x7a\x0a\x0a\x79\x39\x12\x6c\xa8\xb2\x36\x4e\x0b\x11\xe1\xc8\xb1\x35\xff\x64\xdd\x02\xfa\xef\x6e\xee\xe9\xd1\xab\x83\x27\x16\xaf\x6d\xd1\x91\x97\xa5\x8b\x2d\xb7\x54\x49\xbf\xa6\x55\x89\xaf\x1a\xbd\xed\x9d\xb2\x1e\x6f\x4c\xef\x19\x86\xaa\x8d\x7c\x57\x85\x6c\xe0\xd0\x8e\x22\xe1\x84\x43\x22\x10\x0a\x3c\xa5\xd9\x2a\xeb\xab\x1a\xd4\x19\x59\x14\x91\x15\x60\x54\x80\x93\xaa\xc1\x24\x03\x69\xd4\xa6\x5d\x4a\x58\x34\xe2\x1d\x5a\xf5\xca\x2b\x3a\xb7\x7c\xc3\xc3\x5d\x2a\x1f\x18\x31\xa6\x3d\xfe\xed\xb3\x62\xb9\x6a\x6c\xfc\x72\x06\x1e\x47\x46\x54\xc3\x57\x01\xa3\x99\x8c\xeb\x63\x81\xe0\xb0\xae\x2d\x72\x2a\x06\x6d\x4c\x60\x4c\xd7\xe5\x00\x15\x58\x84\xc6\x78\xb2\x1d\x10\x50\x47\x08\xca\x98\x9b\x0c\x09\x45\x91\x19\x25\xf9\xf2\x73\x1a\xdf\xfb\x69\xe2\x78\xf2\xec\xdc\xfc\x57\x96\xb4\x69\x3d\x7f\xd4\xa9\x89\x73\x2b\x1e\x7a\xb1\xf3\xec\xd4\xf8\x51\xfa\xb1\x76\x20\xb8\x82\x1a\x44\x88\x35\x78\x92\xb3\x5c\x80\x6b\x8e\x60\xc9\x9a\x6a\x84\x86\xc8\x0b\x14\x70\x24\x26\xb2\x19\x2c\x14\x74\xcc\x60\x68\x0a\x72\xf8\x7b\x4e\xff\x43\x43\x82\xc4\x84\xfe\x89\xff\x5c\x74\xc4\xf8\xd3\x07\xfe\x9c\x97\xa3\xdc\xf7\x28\x57\xde\x81\x5c\xe6\x6d\x51\xc1\x5e\x1f\x1f\xd8\x42\x3c\x99\xbc\x68\x4b\xc7\x1c\x19\x96\xa4\xac\x9b\x1d\x33\x93\x0c\x83\x08\x0f\x55\x9b\x14\x59\x4f\xe1\x23\x5e\x64\x21\x4d\xd9\x96\xc8\xba\x94\xc7\x32\x26\x2f\xa2\xd0\xd1\x44\x22\x88\x44\x83\x8f\x0c\xc2\x23\x41\x72\xdb\x0d\x4d\x71\xb8\xbe\x59\x90\x51\xae\x9a\x78\xe5\x59\xae\xc1\x75\xb2\xe4\x5f\x37\xf8\xf9\x59\xa7\xcc\xf6\x8a\x85\xe7\x16\xb8\x31\x7f\x4d\xca\xae\x16\xc6\xd4\x23\x55\x71\x03\x2a\x72\x1d\x53\xb3\x19\x45\x91\x04\x4d\x61\x79\x49\xf2\x90\xe0\xe3\x51\xe0\xc9\x80\xc0\x4c\x93\x8c\x28\x5c\xe0\x34\x48\xd1\xb4\x6c\x44\xc9\xd0\x57\x1d\x2a\x35\xf1\x99\x30\x38\xdb\xc0\xb1\xfb\xfa\x77\xef\x5d\x9e\x7a\xd9\x66\x6c\xb5\x96\x1d\xce\x34\x4a\x9f\x39\x6d\xea\x31\x7c\xbf\x3f\x4a\xc4\xef\x5f\x46\x08\x90\x1a\xa9\xfb\xb4\x01\x78\x42\x13\x38\x1d\x28\x81\x21\xa9\xc0\x90\xa0\x1b\x85\x84\x21\x46\x76\x14\x05\x91\x2b\x90\x6e\xe0\xca\x34\xeb\x5a\xc9\x2c\xa9\x65\x5f\x7c\x81\xce\x30\x65\xfb\x63\xa7\x5e\xc2\xfd\x17\x3b\x67\xcd\x6c\x87\x35\x3c\xf0\x68\xec\xfa\x8f\xd3\x5e\x6f\x9b\x79\xc2\x99\x83\xb7\xe2\x17\xa7\x00\x52\x85\x90\x37\x68\x2e\x90\x24\xc1\xd5\x0d\x19\xa3\x1c\x03\x93\x01\xa9\x38\xa2\xef\xd1\x0c\x0d\x3d\x85\x14\x98\x40\x8e\x58\x1e\x11\xb4\x4c\xfd\x4f\x46\xf9\x1f\x34\xef\x87\xda\x3e\x89\x09\xa9\x33\xa7\x29\x9e\x14\xcd\xfb\x66\xcf\xdc\x86\xc7\x1e\x74\xcc\x7b\xf3\x5c\x9b\xf4\x63\x7f\xb6\x36\x55\x9d\x34\xf3\x76\xa7\x74\xf4\xeb\xe6\x8f\x06\x75\xba\x49\xd4\x99\x1b\x3f\xe3\xc6\x18\x99\x20\x78\x0f\x27\x34\x20\x61\x84\x1a\x90\xa6\x1d\xb9\x96\x00\x81\x07\x79\x02\xe2\x3e\x41\xda\x90\x77\x34\x56\x31\x29\x52\xc4\x3d\xd9\x8e\xc4\xd8\x5e\x7f\x6d\xdd\x95\x07\xb2\x5d\x6b\x59\x74\x45\x96\x7e\x45\xd7\xde\x2b\xe5\x0d\x3b\xb8\xe9\xec\xe1\xe7\xe5\x87\x9f\x3e\x7d\xbe\x6e\xa9\xd9\x3f\xce\x8b\x23\x9a\xd7\xe7\x34\x32\x94\x38\x07\x03\x8e\xc1\x7a\x22\xa3\x59\xa4\xc1\xca\xb2\x1f\x29\xbe\x2c\x63\xaa\xaa\xab\xaa\x04\x29\x09\x7a\x92\x64\x68\x11\x8e\x5b\x30\xb6\xc8\xaf\xe6\xfc\xce\x7d\x5e\xf8\x93\xca\x59\xef\x9f\xaa\x7c\xbd\x99\x6e\x30\x4b\xf1\x3b\x7e\xd3\x1c\xfd\x73\x8f\x7e\xdc\x64\xd9\x8f\xdf\xa4\x0c\xa4\x13\x53\x64\x89\x94\x3c\x41\x97\x43\xc1\x67\x70\xda\xc4\xed\x80\x22\xb9\x00\x84\x26\x13\xba\xba\xa0\x33\x38\x8e\xb3\x88\xa2\x44\x12\xb9\xac\x22\x28\x94\xcd\x84\x52\x6c\x91\xaf\x64\xa0\x7e\x2d\x20\x5e\x18\xc4\xb6\x1e\xfb\xc5\xc2\x15\x7d\x7a\xe7\xd9\xd7\xb3\xf1\xcb\xf1\x65\xbb\x05\x18\xfb\x6a\xe2\xca\xfb\x57\xe2\x97\x08\xbb\x9c\x2d\x3a\xac\x40\x31\x8a\x1b\xd9\x8c\x21\x22\xc6\x43\xae\x27\x47\x98\xe0\x3b\xb2\xe7\xe1\x30\x24\x03\x85\x50\x75\xca\xe7\x2d\x4a\x0f\x19\xf5\xdf\x9d\xe5\xf7\x45\x5e\x34\x23\x55\xb1\x56\x0d\x5b\x32\xf9\xcb\xe8\x15\xd2\xe7\x28\xf9\x72\xd5\x94\x6a\xe9\xd3\xb7\xac\x3a\xb7\xdf\x4f\xd4\x8f\x7d\x6e\x9d\x4c\xd9\xdd\xb3\xd8\xa8\x01\x88\xf1\xa4\x1e\x69\x1c\x42\x02\x74\x48\x87\xa1\x91\xcd\x90\x08\x48\x3e\xa6\x90\xbc\xab\x86\xc8\x21\x23\xe4\x70\x04\x07\x22\x97\x74\x23\xcd\xfc\x1b\x80\x7c\x3e\xe3\xff\x5b\x53\x30\x31\xe1\xe7\x74\x25\x52\x25\xdd\x1c\x7c\xf8\x97\x75\xe8\xf1\x8b\x93\x23\xa5\x31\xed\xef\x37\x9f\x3c\xcb\x4a\xbd\xb0\xa1\x90\xbe\x50\xef\x95\x73\xca\xbe\x7e\x3d\xbf\xe3\xf4\x38\x9e\x1c\x0e\x39\x53\x21\x75\xde\xb5\x64\x3b\x08\x90\x42\x6a\xa6\x07\x79\x8b\xa3\x55\x1b\xca\x91\xe1\x58\xb8\x13\x68\xa1\xa7\x32\x08\x8f\x1c\x2e\x60\x2d\xcd\x4e\x66\x53\xa6\xcd\xd5\x8d\xa5\x57\xf7\x6e\xda\xbe\xa9\xde\x61\x51\xb7\x25\x47\x56\x17\x2b\x4a\x18\x95\xde\x74\x6a\xf3\xd9\x91\x74\x5f\x7d\x5c\x7e\x4e\xe6\xf8\x79\x7d\x8c\xe6\x45\x39\xa4\x64\x41\x0c\x74\xcb\xc1\x34\xc9\x88\x74\xe5\xff\x63\xed\xad\xa3\xb5\xaa\xb6\xf7\x71\x3a\x94\x12\x01\xe9\xee\x50\xdc\x7b\xaf\xb5\x40\x4a\xe1\x48\x4b\xa7\x82\xb0\x76\x77\x37\x28\x70\x68\xa4\xbb\x41\xa4\x91\x6e\x91\x90\x56\x1a\x41\x51\x5a\x09\x95\x4e\x91\xfc\x8d\xfb\xbb\xdf\x3b\xfc\x9c\xcb\x7b\x86\x77\x9c\xf1\xfe\xff\xfe\xb1\xde\xb5\x9f\x35\xd7\xb3\xe6\x7c\xe6\x33\x1d\x9f\x22\x44\xd9\x50\x78\xd9\xf7\xbd\x58\x22\x3c\x5b\x0d\x75\xc7\x0d\x65\xe0\x6b\xff\xb6\x1e\x7a\x39\xea\x9f\xa7\xf6\x8c\xe9\xb9\xad\x16\x57\x78\xf7\xea\x4f\xdf\x30\x86\xd5\x45\x07\x8f\x76\x1f\xc6\x0e\xec\xf0\x49\x6a\x96\xad\xa3\xc7\x73\x19\xab\xc5\x27\x16\xf5\x8a\x1c\xc5\x09\x3c\x23\x0a\x21\x6b\x04\xae\x87\x22\xd2\x26\x03\x89\x91\x29\x8a\x33\x18\x4c\x39\x34\x07\x7c\x59\xd5\x81\xc9\xb1\x28\x16\x25\x10\xa7\xc3\x84\xcf\x74\x09\xba\xef\x7e\xf1\xe4\x3e\x14\x3b\x0e\x0e\x16\x0c\x56\xf2\x7c\x79\x78\xdf\xaf\xe5\x32\xbf\x33\x67\x70\xca\xaa\x6c\x0b\xa6\xe4\x4c\xde\x2e\x53\x2a\x8c\x62\x8d\x0b\x30\x50\x7c\xcd\x51\xac\xd8\xd7\x22\x31\x34\xe2\xd8\xe3\x74\x88\xe3\x58\x04\x98\x31\x6c\xdd\xf5\x22\x8e\x33\x74\x01\x07\x44\x3a\xbb\xdc\xfa\xfe\xc6\xa3\x74\x99\x92\xc3\x70\xa7\x06\x17\x8a\xa0\x7e\x5f\x2e\xb9\x51\x62\xe3\xc4\x5d\x4b\xbf\xda\xf3\xdb\xa8\xc1\x95\x86\x94\xcf\x97\xc4\xd6\x64\xca\xb0\xc5\x30\xd6\x60\x64\x91\x80\x05\x3e\xe7\x9b\x1e\x1b\x51\xba\x6d\xf1\x11\x4f\x6a\x2a\x03\x62\x44\x61\xde\x43\xb6\x4f\xea\x08\xfa\xa2\x92\x8e\xed\xf2\xaa\xe2\x67\x86\x7f\x90\xb5\x66\xf3\xe6\x13\x06\xea\x8d\x56\xa1\xed\xa4\x94\xb7\xd3\x26\x67\x56\xe9\xe3\xa9\x8b\x17\x37\x59\x69\x71\x49\x6c\x54\xf3\x55\x36\xf4\x1d\xc2\x12\x43\x14\x1b\x1e\x90\xb0\x60\xb0\x94\x4e\x7b\x8e\xe7\x68\x5a\x2c\x92\x0c\x29\x28\xbc\xcd\x80\x30\x66\x19\x8f\x8b\x79\xf6\xef\x98\xf8\x9f\x37\xe0\x3f\xd5\x11\x52\x9b\x64\xce\x56\x28\x2d\x11\xae\xfe\x7d\xf9\x55\xc8\x9e\xdb\xfa\xd3\x60\x46\x4c\x80\x76\x93\x4a\x2e\xc5\x39\xa7\x6d\x28\x38\xe7\xf8\xee\x9b\x57\x37\x6f\x31\xeb\x25\xb3\xc6\x2c\x09\x1a\xa7\x41\x83\x51\x68\xc8\xf9\x1a\x6f\x89\x26\x41\x86\x9c\x45\x90\xb2\x2b\x5b\x12\x36\x3c\xd3\xc2\x02\x23\xea\x44\x28\x02\xcb\x27\xff\x3d\x83\xec\xe5\x6f\xb2\xad\x43\xc1\x25\xa5\xb7\xbf\xde\xa7\xc7\x95\xda\x8d\x5e\xdc\x1e\x9a\x79\x7e\x96\x4b\x97\x3a\xb9\x77\xfe\xaa\x54\xe8\xc1\xf5\xc7\x29\xe5\x32\xa6\x1f\x4c\x88\x7c\xd9\x08\x81\x19\x33\xb6\xc6\xe9\x76\xac\xbb\x3a\xcf\x7b\xb6\xef\x47\x5a\xe8\x7b\xae\x43\x59\x3a\xb4\x43\x56\xe0\xb9\x98\x8e\x0c\x82\x85\x82\xa0\xa4\x17\x5f\x66\xcf\xec\xdc\x68\x7c\xd3\xb6\xd3\xb2\x16\xa8\x39\x74\x20\xdb\xa0\x6b\xa3\xa7\x37\xbb\x93\x85\xb7\x84\x56\x95\x62\xf7\xfe\x1c\x5f\xf3\x66\x12\x4b\x8a\x91\x1c\xa9\x41\xcc\xda\xa6\xca\x3b\x8a\xcb\xd0\x24\x30\x29\x1c\x09\x9e\x69\x2b\xb1\x6e\x05\x32\xe5\xc4\xa6\x63\x29\x54\xa8\xfa\xae\x2e\x99\x88\x49\xe7\x0d\xd8\x97\xec\x58\x3d\xd6\x4e\x34\xc7\xc3\x7f\x68\xfa\xfd\xf3\x93\x47\x14\x63\xd0\xb5\xf3\x5b\x66\x8e\x3b\x9f\xfb\xf7\x45\xe3\xf2\x7c\xdb\x28\x79\x44\x98\x76\xa1\x29\x38\x80\x8c\x63\x36\x0a\x02\xcf\x09\x4c\x87\xf4\x3c\xc8\x12\x58\xf5\x80\x4f\x6b\xb4\xe9\x7a\x16\x6f\x19\x92\x18\x79\xc0\xc3\x84\xc5\x80\x97\x0c\xc7\xff\xa9\xc0\x94\x9a\x92\xa5\x6c\xe6\x02\x69\xa1\x7f\x6c\xf8\x71\x6a\xd3\x9e\x52\x93\x46\xdd\x37\xd9\x79\xca\xc0\x9a\xfb\x87\x68\x6f\x0e\xfd\xed\x4c\xe9\x82\x1f\x4f\x79\x6f\xf7\x3b\x7f\xf4\x4c\x1e\x45\x93\x04\xcd\x91\x42\x3a\x86\xba\xe0\x21\xcc\x4b\x00\x90\xa1\xcc\x63\x55\x74\x14\xc1\xa0\x28\x04\x35\x5f\xe0\xdc\xc0\x71\x7d\xcf\x06\x1e\xa7\x10\x74\x3a\x44\x78\xed\xe8\xb5\x97\xfe\x0c\x2b\xfd\x50\x72\xc4\x9a\xd9\xdd\x2e\xff\x39\xbf\xef\x94\x55\x0b\x0e\x97\xff\x29\xd7\xd3\xcc\xa9\xc5\x36\x7b\x53\xa8\x24\xda\x9b\x31\x88\xb7\x00\x27\xd1\x1c\x4d\x22\xd9\x66\x78\x0a\xd0\x4c\x10\xb3\x3e\x69\xf9\x81\x22\x5a\x0c\xa1\x51\xc8\xb4\x63\xcf\x44\x9c\xca\x53\x34\x6b\xa7\xe3\xe3\x7a\x6c\x46\x9f\xd2\xeb\xe6\x96\xda\x78\xeb\xca\x0f\x0f\x6b\xfa\x5f\xeb\x76\xce\x7b\xdf\xb1\x1f\x31\xbd\x33\x8f\x59\xdf\xbc\xcf\xad\x23\x19\xcb\xd8\xa4\x53\xb3\x11\x78\x2b\x80\x2a\xf0\xf9\xc8\x35\x55\x36\x22\x63\x26\x20\x15\x41\xe7\x38\x0a\x00\xdf\x42\x58\xd3\xd5\x80\x73\x49\x96\xd1\x49\xcf\x47\x1c\xc1\x24\x86\xfe\x17\xf5\xf2\x7c\x91\x63\xe1\x91\x2c\x17\x7f\x49\x19\x79\xe4\x68\x38\xad\xad\xf6\xeb\x8d\xef\x33\x7f\x76\xfd\xd5\x2c\x6f\xaa\xc5\xaf\x5c\x4c\xa2\x32\x8f\xe5\x7c\xc6\x8d\x3c\xdf\x21\x22\xe8\xdb\x1e\xa3\x02\x2a\x80\x2a\x74\x51\x8c\x81\x61\x00\x8f\x70\x62\xd5\xa7\x2c\x27\x64\xf9\x90\x92\x25\x4d\xb4\xff\x4e\x0e\xfc\xc7\xe7\xe9\x9f\xaa\xa5\xa9\x29\xec\xbb\xff\x9d\xfe\xe8\x34\xa9\xed\xc8\x37\x4a\xf6\xfb\x78\xe9\xa6\x7b\xdd\x8a\xcf\x1f\xbc\x61\xfb\xb5\x75\x6d\x4b\xbc\x3b\x6e\xc1\xee\xa8\xc1\xfe\x7b\x43\x0f\x64\x6c\x1c\x7b\xe2\x57\x2e\x6b\x02\x51\x36\x48\xc5\x36\x4c\x56\x40\x98\x12\x29\x3d\x32\x48\x85\xd3\x5d\x93\x66\x29\x8f\x05\x71\x24\x2b\x1a\x05\x68\x8d\xb5\x22\x1a\x07\x71\x98\x38\xea\x97\x7a\x5c\x55\x2b\x56\x6b\xc6\x84\x23\x99\x2b\xd4\xac\xf4\x64\x63\x87\x1a\xdf\xcf\xbe\x7b\xb7\xd4\xbe\x7e\xf3\x56\xe6\x6b\xdf\xec\xcc\x86\x8c\xbd\x01\x13\x5e\x54\x8c\x0b\x4d\x93\x04\x3e\xd4\x8c\x40\x30\xb0\x8f\x23\x2f\xe2\x42\x8e\x33\x63\xc4\xb0\x2c\x8d\x43\x56\x15\xfd\x80\xa2\x63\x07\x49\x12\x2d\x12\x72\x7a\xbe\x26\x1f\x8d\xab\xd5\x64\xfc\xe6\x96\xdf\x9f\x2e\x81\xcb\x0d\x23\x16\xbc\x7a\xb6\x4a\x96\x36\x15\x7a\x2d\xed\x3b\xf1\x26\x5a\xf7\xfa\xc0\xde\x19\xeb\x6c\x4b\xac\x90\x03\xb2\x41\xd3\x8a\xa9\x78\x9c\x16\xb9\x9e\x4c\x47\x9c\xca\x28\x11\x24\x84\x10\xe3\x98\xc1\xbc\x10\x30\x22\x16\x28\xd6\x96\x22\x26\x52\x15\x26\xb2\x13\x2b\xe4\x6e\xb3\x4f\xea\x1c\x5f\xcc\x5f\xc2\xbf\xbe\x32\xb3\x63\xeb\xaf\xfd\x4d\x2b\x37\x9e\x6e\xfa\xed\x9c\x61\xdb\x1f\xaf\x2c\x75\xfb\xc3\xd3\x19\x93\x9c\x25\xee\xe8\x24\x23\x57\x76\x7c\x53\x56\x02\x4d\x11\x51\x04\x65\x04\x24\x3f\x52\xb5\x58\x62\x19\x2b\x80\x84\x04\x42\x2d\x36\x03\xcd\x81\xb1\xe5\xd3\x62\x44\x83\x97\xeb\xe3\x0f\xc8\x65\xbb\x36\xd0\xef\xe6\xee\x3a\xf3\xf2\x91\xc3\x66\xb6\x47\x9f\x3a\xc7\x0f\xbc\x5d\x60\x6d\xbd\x37\x73\xf9\xed\x6e\x4d\x7b\x5f\x4b\x62\x7d\x9c\x27\x31\x45\xa8\x0c\xc7\x40\x86\xf6\x2d\x49\x65\x68\xa8\x20\xd5\x43\x56\x18\x33\x8e\x07\x20\xa5\x3b\xa6\x07\x34\xce\x77\x74\x36\x8e\x59\x95\x08\x5e\xca\xd6\xfc\x93\x52\x21\x35\xa5\x6c\xb6\xd4\xfe\x69\xb3\x35\xf7\xae\x7f\x11\x7d\xfc\xfb\x9c\xc9\x17\xb6\x8d\x48\x99\x97\x3f\x58\xb3\x29\xeb\xea\xef\x0a\xf5\xeb\x28\xec\x3e\xf1\xf5\x80\xaa\x75\x07\x25\x71\x42\xa3\x6e\x48\x86\xc9\x62\x59\x90\x69\x2b\x90\x2d\x14\xc9\xa6\xec\x68\x40\xc1\x20\xd4\x08\x8a\x20\x75\xdd\x44\x4c\x10\x88\x36\xc5\xf2\x81\x49\xa9\x36\x91\xce\x68\x80\x6b\xad\xaf\x96\x1a\xca\xaf\xad\x37\xb1\x7e\x2d\x54\xb5\xff\xe3\xac\xe4\x95\xf5\x3f\x33\xaf\xce\x19\x68\xe7\x3d\x50\x23\xeb\xf7\xc5\x92\xc8\xcf\x7c\x02\x40\xec\x28\x0c\xa9\xfc\x6b\xd5\x12\xa7\xd9\x24\x1f\xeb\x0a\x6f\x8a\x58\xe3\x24\x25\xb4\x1d\x10\x48\x01\x62\x15\x32\xa6\x5c\xda\xa4\xf9\x7f\x53\xca\x97\x23\xfe\x69\xeb\xe4\xb4\xa2\x63\x3a\x3e\x39\xba\xf2\xcc\xa0\x1e\x3d\xaf\x6f\x5d\x30\xba\xcc\xf9\xd7\xc4\xd9\x9d\xe6\xb5\x5b\xb7\xf4\xe0\xf0\xf3\x19\x73\xd3\x4a\x3c\x10\x06\xf9\xba\x60\xc9\x04\x1d\x91\x98\xb2\x3d\x45\x94\x1c\x0b\x92\xba\x04\x08\x49\xb5\xc2\xd0\x86\xb2\x17\x71\x38\xf2\x0c\x37\x66\x02\x95\x71\x62\x59\x49\xbc\xcb\x95\x6e\xc5\xfb\xea\x17\x7d\xfd\x8f\x2c\x5d\x04\x61\xef\x17\x44\xa3\x71\x0b\x9f\x56\x98\x54\x78\x66\xad\x75\x1f\x6c\xf8\x7a\xe4\xe3\x9f\x93\xe7\x1c\x43\x47\x00\x78\x82\xa2\xea\x22\x0c\x43\xd2\x70\x48\x12\x81\x50\x86\x4e\x18\xf3\x54\xc4\xc4\xb2\xa7\xf1\xbc\xcd\xb1\x12\xc4\xc0\x77\x15\x25\x52\x69\x26\x9d\x49\x8e\x5b\xb8\x95\x63\x9a\x1e\x1e\x32\xea\xd5\x85\x55\x8b\xbc\xfd\x7a\x78\x42\xef\xad\xdc\xdf\x23\x96\xda\xfa\xe1\x91\x63\xb5\x2f\x16\xdd\x9d\xb1\x5c\x46\x62\xe7\x18\x44\xf0\x31\x0f\x14\x8b\xf4\x15\x59\x27\xc9\xd0\x33\xa4\x08\x20\x1f\xb9\x8e\x1a\x23\x46\x83\xb1\x1e\x73\x84\x2d\x39\x0a\x47\xd9\x50\xb2\x79\x59\x7b\xc9\x31\xf7\x9f\x74\x2c\xa9\x29\x05\x33\xfd\x37\xa5\xfc\x63\xe3\x6f\xd5\xbb\x6e\xec\x31\x9d\xac\x4f\x34\xdc\xb7\x6a\xe7\x96\xb7\xaf\x2f\xb8\xdb\x72\x46\xb9\x0f\x4b\x3e\xef\xdf\x6a\xf5\x9c\x29\xc9\x33\x8a\xc6\x91\x1c\x42\x9e\xd6\x74\x59\x27\x3d\xc7\xb6\x0c\x51\x31\x08\x5d\x22\x34\x41\x25\x11\x96\x69\x5d\x0a\x05\x87\x62\x20\x65\xf9\x1e\xe3\x6b\x3a\x19\xb8\x46\x3a\xd9\x9a\xc6\x55\x0a\xcd\xca\xb4\x9c\x45\x6f\x9a\xbd\xb7\x76\x1d\xdf\x34\xf3\xb0\x1e\xb3\x2a\x64\xdd\x3b\xb2\xf2\xda\xbe\x3b\xf4\x07\x8d\x93\xd7\x9e\x47\xf3\x34\xe9\x7a\xb2\x13\xf3\x1e\xb2\x38\x8f\x95\x04\x9f\xb6\xcc\xd8\x88\x34\x5e\xb4\x03\xc9\x65\x6d\x17\xa3\x98\xc1\x9e\x82\x5d\x8a\xe5\x40\xa0\x28\x64\x62\xe8\xe7\x28\x5c\x2c\xfb\x13\xc7\xee\x5d\xbb\x58\xe1\xba\x62\x93\x15\x7f\x2c\xf1\x3a\xa9\x2e\x5d\xed\xee\x8e\x3f\x86\x6f\xdf\x00\xdb\xda\xc9\xc3\x11\x70\x18\x5a\xa1\x09\x56\x8d\x04\x17\x60\x59\xa0\x28\x2b\xe0\x35\x33\xb0\x1d\x51\xc1\xbc\x2d\x70\x28\x20\xe4\x28\x14\x78\xc9\x0f\x4d\x87\x01\x22\x9b\x8e\x6a\xf7\xdd\x4b\xd6\xf4\x09\xd9\xe4\x83\xaf\x65\xef\xb4\xf1\x6e\xe9\xb2\x2d\x56\x7c\xb7\xab\x4e\x93\x51\x6f\x9c\xdb\x93\xed\x42\xd7\xd4\x4a\x0d\xc7\x27\xb1\x08\xe8\xc9\x11\x21\x0b\x12\x00\x8e\xea\x19\xa6\x4d\x7a\x96\xe1\xb8\x1c\x07\x4d\x60\x4b\x82\x61\xfa\x1e\xab\xfa\xaa\xa5\x62\x17\x20\x9b\x8b\x65\x9b\xfe\xbb\x12\x72\x3a\xd7\xff\x26\xca\x4a\x4d\x19\x96\x29\x53\x87\xb4\x17\x55\xe1\x91\x0d\x9f\x48\xad\x9e\x96\x18\xb9\xa7\xce\x10\xe3\xe2\xb7\x2b\x0b\x7f\x3c\xa9\xf3\xe4\xf7\xba\xf4\xca\x57\x27\x4f\xcd\x4b\xf9\xd6\x25\xaf\x1d\x00\x53\x9a\x02\x0d\xc5\x80\x40\x61\x89\x80\x32\x42\x8c\x02\x93\xb2\x64\x06\xc9\xc8\x08\x10\x19\xe1\x38\x42\x3c\xa3\xc9\x14\xcd\x05\xba\x07\x24\x2a\x4a\xe7\x89\x7b\xe1\xa1\x3e\xe4\xb1\x5b\xad\x99\x5d\x32\xfa\xf2\xce\xd5\x76\x5f\x44\x13\xec\x72\xbf\x6e\xcf\x3f\xe9\xfd\x9f\x4f\x0f\xdb\x33\x6d\x42\x91\xe4\x7d\x14\xc6\x55\x39\x60\x43\x97\x0a\x0c\xc5\xf6\xd5\x30\x60\x3c\x49\x71\x42\xda\x46\x9e\xa4\x68\xba\xc3\x0a\x3c\x64\x63\xdd\x74\x7c\x9b\xf6\x44\x4a\x10\x2d\x98\x78\xc9\x39\x8f\xcf\xbc\xa4\x6d\x0f\x26\x06\x73\xef\x17\x2e\xd0\x68\x43\xe7\xcc\xab\x0a\x54\x1b\x7a\x3d\xeb\xcd\x57\xfb\x14\xbd\x72\x88\xb8\x9d\xb1\xa1\xe6\x89\xdf\xac\x80\xa0\xa0\x21\x06\xd0\x72\x45\x41\x64\x81\x2f\x6b\x8c\x4d\x0b\xb1\x43\x1a\xa2\x42\x90\xd8\x8d\x63\x22\x0c\x3d\x4c\x29\xd8\x66\x69\x51\x92\x6d\x3b\x71\x80\xa9\x66\xef\x99\x58\x24\x0b\x5b\x6c\xf4\x33\x73\x62\xa6\x61\xa5\x3b\x76\x3d\x69\x0e\xcd\xfc\xd4\xaf\xdf\xa0\xf5\x69\xf5\x6a\xcd\x3c\x4d\x92\x07\x8c\x40\x0f\x0d\xe4\x10\x08\x33\x94\x4e\x91\xae\x85\x9c\x50\xe3\x34\x89\x33\xe2\x98\xf3\x28\xc9\x13\x49\x03\x0b\x3a\x43\xd9\x01\x30\x74\x89\xb0\x80\xec\x24\x66\xc1\x70\xed\xec\xef\xaf\x17\x56\x5f\x1b\x3f\xf9\x76\xc1\x01\x70\xd6\x98\x9a\x3d\x3e\xa9\x38\xac\xef\xed\x3a\x8f\x96\x9e\x95\xdb\x8e\xe8\x90\xb1\x51\xb1\x09\x97\xec\xf2\x31\x2b\x29\x7e\x4c\xfb\x96\xa1\x30\xa4\x19\xeb\x96\x6a\xf2\x82\x05\x49\x91\x76\x30\x11\xa9\x81\x2b\xe8\x20\xa4\x91\xcb\xc3\x88\xc4\x2c\x4d\x26\x68\x1c\xfa\x6e\xdb\x9b\x73\x3f\x2f\x7a\xb6\xfb\xee\xdf\x4c\xcf\x2a\xf7\x41\xb7\x4c\xce\xa1\x0a\xfb\xfe\xe8\x5a\x60\xc8\xe1\xa1\x3f\x96\xbf\xd3\x22\x79\xc1\x05\xeb\x9a\x40\x2a\x90\x67\x79\x45\x77\x4d\xd7\xb4\x98\xd0\xa6\xed\xc0\xa1\x55\x07\x00\x93\x94\x38\xe4\x43\x01\x23\x03\x47\x32\x6b\x1a\x9a\xe2\xf9\xca\xdf\x8e\x6c\xe7\xde\xfd\x7f\x8c\xf6\xd6\x4a\x6a\x5f\xd9\x1e\x39\xbc\xe5\xab\x97\x9c\x43\x84\xf3\xdb\xe2\x49\xed\x4b\xbb\xad\xd8\xe3\x1b\xe7\x7d\x9b\x7f\xe5\xf5\x31\xa9\x29\x5b\x5e\xbc\x78\x31\xb5\x74\x9a\x2f\xf2\xfa\xdd\x9f\x0a\x6c\x99\x7d\xb1\xdf\x4f\x59\xf2\xf6\xbb\xcb\x56\xed\xbb\x45\x9c\x7d\x7e\xcc\xfa\x4e\x87\xae\x0e\xeb\x32\xa3\x58\xa5\x5d\x19\x7b\x4a\x25\xc4\xbd\xe2\xc8\xa4\x44\xa8\x0e\x65\x43\xd7\xb7\x28\xc7\x20\x5c\x22\x36\x14\x57\x07\x92\x61\x44\x34\x47\xe9\xae\xc9\x5b\xae\xe0\x50\x2e\x21\xb8\x1e\x23\xfc\xbb\xaf\x24\xed\xbb\xc4\xa8\x71\x24\x37\xfc\x6d\xfb\xc1\xc7\x4a\xf1\xdf\x8a\x4e\x68\x59\xfe\x54\xb3\x13\xa3\x8f\x8d\x7b\xcc\xbf\xb7\x2a\xc5\x6f\xfd\xfe\xde\x2e\xc9\xbb\x54\x59\x2e\xe2\x74\x00\x69\x52\xf0\x79\x95\xa1\x68\xa0\xa3\xc8\xc6\xa2\xe0\x32\x96\xf2\x2f\x82\xa9\x79\x2e\x0e\x63\xe8\x01\xd2\x52\x14\x32\x30\x45\x52\x48\x47\xb7\xbb\xfb\xd8\xb4\x8d\xcd\x56\xd5\xfd\x75\x45\xdc\x0d\x55\x2c\x7a\x79\xe5\x4f\x25\x6b\x67\xfd\xa6\x5d\xe1\x12\x73\x37\x1c\x6a\xce\xbd\x7d\x66\x7c\x9a\x43\x3d\xac\xcc\xc2\xec\xdb\x17\x96\xef\x71\x5e\xba\xf2\x7d\xdf\x19\x1f\x3c\x7d\x6d\x65\xa5\x7c\x05\x1e\x2a\xc2\xb7\xc7\x4e\xce\x9e\x57\x75\xfd\xc1\xe4\x7d\x0f\x46\x54\x91\x03\x0c\x83\x0a\xa1\xe0\x42\x68\x0a\xc0\x01\x1e\xe2\x80\xca\xd8\x7e\x4c\x21\x88\x3c\xc2\x74\x49\x8b\x23\xd4\xc8\x95\x69\x5f\x85\x04\x93\xd8\x05\x65\x13\x31\xb1\xe9\xd7\x53\x9f\xec\xea\xbb\xaf\xde\xc7\xfb\x3f\x3f\x7d\x7f\xf9\xbc\x0d\xe5\x0b\xd5\x1d\x31\xef\x1b\x78\xa2\x77\x93\x8f\xbe\x79\x9a\x44\xe7\x1f\x9e\x8b\xf5\xd0\x77\x68\x93\xd0\x19\x86\x17\xf9\x38\x44\x92\x41\x60\x1a\x30\xac\x0b\x59\x6c\xf3\x4e\xa0\x39\x48\xb5\x75\xc7\x41\xa6\xec\xd9\xff\x67\xe8\xe3\xdf\x54\x72\xfd\x3b\x0d\xba\x2e\x18\xfe\xfd\xe5\x2e\x23\xaa\x0d\x0b\x6e\x1c\x36\x9c\x94\xf5\xc3\xe6\xcd\xfe\x7a\xc8\x26\xc0\x5f\x1c\xbb\x8b\x4f\x1e\x95\x94\x75\x91\x74\x63\x46\xd6\x74\xcb\x75\x42\x85\x0d\x5c\x17\x07\xd0\x66\x18\x99\xe6\x49\xde\x62\x14\x9f\x25\x34\xc1\x0a\x64\x89\x71\x91\x0e\x7d\xcd\x76\xd3\xe9\x7a\x58\x9f\xfd\xc4\xe6\x3e\xde\xea\xe5\xc4\xad\xc3\x44\xae\x51\xe5\x4f\x6d\xad\xdd\x61\xb4\xee\xfd\x30\xf8\xb3\x1b\xfe\xe3\xf6\xd5\xe2\x89\x69\xba\x33\x0b\xff\x76\x64\x0d\xdf\xd5\xfc\xa3\x75\xf1\x92\x65\x36\x15\xbd\xdd\x26\x6b\xd9\xa3\x44\xfb\xd5\xef\xff\x98\x7b\x61\x9d\x8b\xa7\x8b\x58\x19\x7b\xd9\x26\x9e\x9f\x61\x70\xb4\x1a\x20\x2a\x66\x80\x1b\x32\x12\x44\xb2\x88\x19\x1c\x84\x2a\xed\xf0\x38\x80\x92\xe3\x33\x24\x84\x88\xb6\x61\xc0\xca\x96\xc2\xda\x16\xff\x72\x90\xad\xb0\xaf\x4c\xcb\xc1\x05\x1f\x66\x7b\xb1\xef\xe8\xc4\xaa\xfe\xde\xd2\xe1\xfa\x9a\x0d\x4f\x85\xd9\x72\xb7\xdd\x9d\x33\x77\xad\x7e\x7b\x93\x98\x7f\x12\x90\x49\x52\xbc\xe8\x85\x16\x6b\xc7\xb1\x41\x05\x24\x15\xe9\x0e\x84\xb4\x2a\xfa\x8e\xec\xeb\xac\x42\x90\xbc\xc8\x4a\xac\x2d\x39\x84\xed\x28\x54\x94\xa0\x69\xe6\x8b\xa5\xdf\xb4\x9b\x95\xad\xce\x81\x4a\x35\xe6\xcd\xeb\x0a\xbe\xbb\xf9\xbc\xec\xfc\x4e\x3b\x47\xf0\xdd\xe7\x0d\x9a\x99\xb2\x68\x8e\x9e\xb1\x31\xb9\x89\x9d\xdc\x4d\xc1\x0e\x80\xa0\x3b\xba\x06\x42\x52\x11\xa2\x08\x43\x92\x71\x6c\x5b\x54\x4c\x3d\x84\xae\xad\x62\x32\x8a\xc5\x08\x91\x7e\x44\x1a\x71\xc4\x61\xf6\xff\xde\xba\x7f\x03\xe2\x55\xaa\xd3\x7b\xcb\xa7\xeb\x3f\x17\xd8\x51\x3a\xcf\xdb\x75\x2a\xd3\x0b\xf7\x67\x5b\x4d\x57\xe8\x9e\xed\x4e\xd6\xa1\xdf\x95\x6f\xd7\xab\x75\x12\xf3\x06\x98\x92\x23\x2d\xc2\x34\xd4\x09\xc1\x0b\xe3\x10\x62\x53\xa0\x65\x0d\x5b\x9a\xe5\x7a\x06\xe9\x07\x2e\x1f\xb0\x24\xe0\x79\x55\x87\x2a\xf4\x54\x52\x7c\x19\x10\xbd\xde\x78\xe5\xe3\x49\x85\xc7\xb6\xc8\xbe\xee\xdb\xf3\x9b\xf0\xfc\xda\xa5\x9f\xec\x7f\x7d\xf2\xa1\xac\x2d\x2a\xf5\x99\x72\xbd\x6e\xad\x49\xc9\xcb\xa1\xd2\x7e\x10\x86\x21\xf0\x81\x45\x1b\x98\x33\x25\xd2\xd2\x24\xce\x05\x18\x9b\x3e\x50\x74\x9f\x07\x61\xec\xf0\x3e\x08\x25\x9d\xe5\x22\x9a\x90\xa0\xe1\x50\x2f\x03\xe2\x02\xb3\xb4\x4d\xd6\xd7\x7e\x59\xf1\xf0\xf0\xb8\xe2\x3f\x55\xfe\x60\x4a\xad\x09\xd7\x2f\xfe\x39\x76\xc1\xf8\x05\x5f\xf6\x99\xf3\xd7\xe8\x6b\xcb\x92\xb7\xbb\x12\x61\x87\xb1\xcc\xd9\x8a\x04\xb1\x07\x74\x09\x32\xa4\xc0\x5b\xb2\x12\xc4\xba\x2a\xf9\x31\x92\xb5\xc0\xb7\x7c\xdf\x70\xe3\x18\x05\x2a\xa6\x01\xcb\xa6\xd3\xd5\x36\x7d\x60\xe3\x77\x8b\xf4\x28\xb4\x6b\x4d\xfe\x87\x2f\xce\xbf\x3e\xad\xc2\x4d\x3c\x66\xfc\x30\xaf\xfa\xd0\xf6\xcf\xbd\xca\x4b\x0a\x9f\x9d\x97\xf6\xd7\x17\xf7\xbf\x72\xbf\x4c\xb5\x9e\x1b\xc7\x6f\x7d\x2b\xe5\xbb\xe6\xfd\xde\x1a\xfa\xc9\x92\xed\x83\xac\x91\x7b\x1f\x8d\x2d\xb3\x70\x28\x88\x73\xa5\xfd\xb5\x31\x6e\xc8\xfb\x45\x87\x34\x3c\x90\xb3\x17\x1e\xb1\xe7\xd4\x94\xbd\xdd\x53\x48\xcd\xcc\xf2\xcb\xa6\xa7\x4f\xee\x36\xec\xb9\x65\xd1\xcc\x34\xd0\x5c\x3c\xa3\xf2\xd0\xc6\x56\xfe\x2b\xde\xa9\x79\x6c\xa5\xd5\xd1\xf1\xa6\xdf\xbc\x96\xa3\xc0\xa0\x09\xe4\xe5\xc9\xab\xc6\xff\x39\xa8\x52\xc3\x24\x56\x04\x90\x41\xd8\x16\x56\x78\x3d\x12\x23\x83\xf0\xf5\x30\xd2\x38\x37\xf2\x7c\xe4\x08\x8c\xe3\x45\x0c\x25\x69\x2e\x17\xa8\xb4\x2b\x42\x57\x97\x2d\xe8\x98\x2f\x43\x73\xf5\x80\xcf\xd6\x7d\x2b\xd6\xd8\x27\x35\x6f\xed\xf4\x99\xf4\xcd\xe5\xde\x6f\xbe\x56\xe3\x58\xbd\xb1\x17\xb8\xec\x0f\xe7\xdd\x5a\x36\xa7\x6e\xf2\xee\x0e\xc7\x23\xc2\x58\x95\x30\x19\x59\x3c\xa0\x44\xdd\xd3\x39\x03\x04\xd8\xa4\x49\x3e\x34\x03\x0d\xd3\x32\x63\x79\xd8\x0d\x09\x57\x8b\x82\xd8\x95\x09\x27\x81\x13\xc2\x6f\xa3\xbe\xad\x5d\xb9\x6e\x9b\x63\x29\x4b\xcf\xbc\xba\x66\xc7\xed\x33\x45\xca\x65\x1d\x56\x7d\xc1\xb3\x89\xe2\x02\xb6\xe2\x36\xfc\x73\xc6\xc6\x31\x27\xee\xc2\xa5\x45\x46\x8e\x5d\x4b\x91\x74\x25\xd4\x2d\x1c\xcb\x58\xb1\x55\x01\xf9\xba\x4f\xea\xbc\x09\x11\x32\x75\x27\x60\x64\x56\x33\x68\xd9\x8d\x75\x4f\xe2\xd3\x81\xe6\x34\x75\x7d\xcd\xb7\x3e\xeb\x6c\x56\xfe\xac\x6f\x49\x52\xeb\xda\xac\xe8\xfe\x66\x25\x3f\xfa\x55\x5a\x5a\xa1\x64\xdf\xfb\x62\x05\xed\x6c\xda\x5f\xf7\x6d\x81\xda\x83\x68\x00\xb1\xe0\xdb\x1d\x59\xfb\x74\xad\xf1\xc1\xcd\xa6\x67\x47\xa5\xce\x7f\x67\xdb\x5f\xb9\xc4\xd9\x3b\xc3\xa7\xa3\xd3\x56\x3a\xbe\x28\x3f\x90\xae\x2f\x2f\x59\xb9\x78\xeb\xfc\x45\x1f\xa1\x0e\x3b\xa3\xe6\xdd\x0a\xf5\x27\xbf\x79\x56\x6d\xeb\xe1\x12\x87\x17\x65\xac\x29\x39\x71\xe5\x55\x63\x0d\x9b\xa1\x59\x8c\x54\xdf\x60\x14\xce\xb1\x5d\xe4\xfc\x8b\x10\x04\xb1\xa9\xda\x52\x28\x42\x46\x86\x52\x10\x9b\xac\xc9\x44\x98\xf1\x08\x4b\x4c\x87\x3c\x6e\x53\xf3\x76\xee\x5d\xaf\xfb\xe6\x0b\xf9\x77\x7f\x59\x66\x57\x97\xa1\x9d\xb1\x51\xac\xeb\x9b\x6c\x99\xb9\x27\x4a\x55\xbe\x37\xfa\xab\x0e\x69\x98\x58\xcd\x57\xa2\xaf\x27\x0d\xcb\xd1\xc9\xc8\x3d\x44\x1d\xf4\x78\xf5\xad\xf8\xc7\x76\x3d\xaa\xec\x2d\x4f\x98\xc1\x6a\x77\xf8\xf6\x8b\xc9\x7b\xc4\x62\x9b\x04\xae\x60\x71\x8c\x4f\x3a\x1c\x64\x64\xe4\xd2\xa4\x2a\x50\x3a\x8d\x81\x07\x89\x50\xa1\x5d\xc4\xb2\x92\x4b\x23\xd3\xd2\x3d\x8e\xc4\x86\x2a\x9b\x2f\xc3\x73\x49\xaf\x05\x37\x47\x4f\x58\xb2\x47\xfa\x71\xe9\xe2\x0b\x63\x7a\xbc\x9e\xb9\xce\x8b\x12\xdc\x58\xe1\xb5\x4c\x1f\xf2\x9b\xcf\xad\xaf\x93\xc4\xa1\x28\x96\x1d\x18\x81\x27\xaa\x58\x26\x64\x99\x74\x4c\x0f\xb0\x92\x25\x70\x06\xc9\xf0\xbc\xcb\x03\x05\xaa\x84\x12\x33\x3e\x0b\x6d\x49\x60\x0c\x52\x50\x65\x35\xf1\x03\x76\xe6\xfe\x9e\xcb\x67\xed\x3b\xfd\xf8\xd2\xfa\xe5\xfb\x8f\xfd\xfc\x5a\x09\xe2\xa2\x30\xe9\x66\xf1\x91\xfb\x7b\x6c\x1b\x51\xe2\xc3\x93\xe7\xcf\x26\x0f\x42\x36\xa9\x78\x0a\x4b\x22\xd7\x25\x08\x1c\xf2\x22\xc0\xac\x00\x04\x6c\x11\x98\xd3\x2d\xcc\xca\x94\xa4\x89\x2a\x64\x09\x56\xf2\x4d\x4d\x42\xd0\x8f\x12\x70\xdd\x03\x25\x4f\xec\x1a\xff\x78\x79\xbd\x89\x27\xb7\x2b\x6f\xcf\xdd\xb0\xb2\x64\xde\xa2\xbf\x4c\x39\x33\x7d\xa9\xa7\x3e\x28\xd7\xe1\x40\xea\x92\xe4\xed\xb0\xcd\x0b\x8a\x62\xc5\xb1\xe1\x07\x81\x14\x60\x9b\x47\x24\x0d\x5d\xdb\x41\x1c\x65\x32\x02\x76\x75\x5d\xd3\x43\xc7\xb2\x04\x9b\x02\xaa\x49\x2b\x3a\xeb\x24\x26\x2b\xc3\x76\xa6\xec\xd0\x87\x0e\x63\x26\xf4\xec\x7f\xa4\xde\x9c\xa9\xe3\xeb\x0c\xbe\x3c\x4a\xfc\xee\x9d\xdf\xd7\x3e\xdc\x78\xa3\x4f\xcd\xef\x2b\x26\x0f\xc3\x2c\x20\x6d\xd7\xa0\x34\x3f\xe4\x6c\x1f\x18\x82\x43\xb8\x26\xa6\x09\x81\x92\x38\xd9\xb1\x00\xad\xf9\x2a\xaf\x87\x81\x4c\xb8\x9a\x87\xa9\x88\x64\x2d\xf9\x65\x0c\x3f\x7a\xf5\x51\xf3\x29\x03\x6b\x9e\x5e\x36\x64\xe3\xc4\x57\x1b\x75\x18\xd9\x68\xfc\xa5\x53\x8f\x9f\xdc\x9a\x5d\xb6\x6b\x96\x16\x27\xf2\x6f\x4c\xa2\x26\x8f\x23\xa1\x12\x4a\x10\x40\x22\x92\x38\xdd\x43\x46\x1c\x32\x7c\x40\x88\x9a\x23\x00\xc9\x8a\x2d\xd5\xe4\x62\x06\xf2\x12\x43\xb8\x1c\xa6\x63\xc9\x62\x12\xb4\xe0\x3f\x6e\x5a\xa0\x71\x7f\x77\x49\xcb\xd1\xd7\xfb\xe7\xbf\x54\xf6\xc1\x2b\x8f\xde\x4a\xe9\x18\x2e\x1b\xb4\x3b\x27\xb9\x7c\x5c\x24\xf8\xc9\x4b\xc0\xd0\x3c\xed\x3b\x9a\x07\x25\x11\x22\x9d\x01\x9c\x4d\x20\x52\x37\x58\xa0\x42\xc9\x73\x5c\xd7\x64\x05\x21\x82\x8a\x48\xa9\x82\xed\xe3\x58\x8b\x42\x83\xf6\xd3\xb9\x11\xba\xc8\x47\x26\xf7\xe8\xba\xd5\xbd\x49\xef\x5c\xba\xbd\xd0\x95\x1c\x4b\xf2\x9f\x69\xf2\xf0\x68\xf9\xb7\x7b\x34\x1d\x45\x67\x6b\xbe\xb1\x51\x1a\xf8\x64\x1d\x02\x47\xde\x09\x96\xd4\x5f\x55\xe8\xd3\xcd\x4d\xe6\xe5\xaa\x32\xac\x0a\x7c\x6f\xb3\x5b\xe6\x6a\xbe\xe6\x25\xf3\xd7\xaa\x37\x4d\x48\x1e\x7c\x24\xec\xab\xae\x68\x89\x54\xe4\x3b\x8c\xea\xc8\xb2\xcc\x87\x86\xcf\x3b\x3e\xa5\x38\x82\x69\xfa\x5e\x84\x4d\x35\xf0\x59\xdf\xb4\x6c\x42\x91\x7d\x4f\x4d\x10\x02\xfb\xb5\xba\xa7\x7e\x52\xe1\x68\xbd\x6f\xae\x34\x0f\xc3\x0d\xb3\x3f\x07\x5f\x0e\xdb\xf2\x63\xed\xc5\x13\x4e\xbd\xb7\xc6\xbe\x52\x39\x6f\xc6\x7a\x58\x12\xeb\x23\x69\xd5\x51\x78\x8d\x74\x08\x53\x0f\x34\xc1\x37\x03\xc0\x49\x31\x6d\x12\x3c\x8a\x00\xe7\x87\x08\xeb\x1e\x92\x35\xcf\x37\xb5\x40\x17\x0c\x1f\x25\x72\xe7\x5a\x3b\x87\xce\x97\xe3\xc8\xb9\xe2\x45\x9f\xee\x98\x1d\x4f\xfc\xa8\x70\xe6\x25\xcf\xe7\x77\x3f\xff\x4a\x87\xdf\x2f\x19\x65\x8c\xca\x5f\xd7\x4c\x62\x15\x9b\x09\x70\xac\xca\x91\x21\xca\x9c\x41\x05\x86\xa5\x85\x80\xf3\x1d\x0f\x01\x10\x5b\x88\x08\x2c\x05\x23\x2b\xc0\x26\xe7\x05\xb6\xee\x22\x9d\x90\xa3\xc4\xd9\x89\x3c\xdd\x9c\x15\xd6\x9a\xa6\xa7\x57\x0c\xf9\xe5\xb3\xb7\x6e\xac\xd3\xcb\x05\xb4\x3d\xa4\x7d\xb9\x1b\x65\x67\xbc\xf7\xea\xbd\xbb\x17\x7f\x4a\xde\x92\xb1\x68\x38\x0a\x17\x41\xc6\x06\xa1\x2f\x69\xa1\x6e\x22\x5e\x76\x22\x41\x90\x18\x82\xe1\x14\x42\x83\x01\x56\x58\x49\x30\x69\x97\xf2\x6d\x13\xc9\x71\x82\x78\x72\xba\x11\xd3\xc4\xcf\xb3\xe4\x4c\xe9\xf9\x43\x27\x5c\x1c\x50\xe4\xc8\xa1\x92\x95\x1e\x7c\xb7\xa1\x7c\x87\x22\x5b\x3a\x7c\xfb\xec\xb3\x8a\xc9\x1b\x85\x46\xcb\xc0\x30\x08\xdf\xb7\x0d\x0f\xaa\xaa\xee\xe8\x01\x08\x04\x4b\xf6\x5c\x0e\x45\xc0\x85\x31\x81\x62\x32\x0c\x79\x5f\x40\x16\x01\xdc\x50\x89\x50\x14\x27\xde\xe1\xa1\xbb\x7e\x1e\x3c\xba\xe3\x95\xe2\x07\x33\xdd\x68\x7a\xac\x75\x21\xe7\xb3\xeb\xcd\x5b\x04\xa3\xd9\x1c\x13\x5a\x97\x36\x6f\x65\xd9\x09\x93\x17\x53\x90\x64\x01\x03\x53\x11\x47\x38\x92\x26\x20\x64\x59\x32\xa9\x5a\x80\x82\x81\x47\x9a\x0a\x30\x41\x28\x20\xca\x8a\x65\x8e\x91\x95\x90\x8c\x7c\x45\x8e\x5f\x0e\x81\xe7\x8a\xfd\x38\xa4\xf3\xfe\xfa\x87\x9e\x5d\xfd\xa5\xd9\x8c\x82\x77\xfd\x65\x6f\xb8\xe5\x9e\x7d\x57\xf4\xce\xd4\x52\x79\x4f\x78\xa5\xaa\xce\x4a\xa2\x57\x11\x25\xc6\x21\x29\x04\x2e\x81\x54\x56\x42\x1a\x14\x2d\x0a\x07\x58\x03\x34\x52\xb4\x10\x19\xac\xa5\x11\xa1\xa4\x6a\x92\x6e\x58\xa6\x25\xb2\x94\xc2\x25\xce\xf4\x8f\x7a\xa7\xc9\xb0\x46\xa9\xe1\x61\xbe\xbf\xbd\xb7\xf3\x9c\x8f\x9f\x95\xfd\xe8\x70\xa1\x62\x93\xc4\x91\x35\x8f\x6e\xb6\xfd\x75\xd9\xf7\x26\x31\xa8\x81\xd8\x25\xa5\x40\x8c\x78\xc3\x41\x38\x74\x79\xa4\x30\x08\xc6\x9e\xca\xd1\xb4\x00\x8c\x88\x88\x21\xa0\x0c\xc2\xe2\x4c\xdf\x73\x4c\x89\xd3\x25\x21\x31\x28\x3a\xdd\x54\x06\xce\x59\x6d\xed\xac\x5c\x33\x47\xe1\x3c\xd3\xf7\x8e\x89\x56\xde\x1e\x9e\xf3\x40\xe3\x4d\xdf\x7d\xb3\xa3\xdf\xcc\xf0\x74\xc6\x04\x75\x09\xef\x45\x64\x89\x24\xef\x72\x4a\xc8\x31\x66\x6c\x1a\xa2\x01\x3c\x9f\x32\x2d\x49\x83\x84\xee\xf2\x0c\x32\xe5\x88\x12\x3c\x51\x05\x0c\xc3\x86\x28\x94\xe5\x28\xc1\xbd\xf8\x74\xec\x9e\x2a\x65\x5f\xf4\xec\x7b\x07\xc0\xa1\xa7\xdb\x56\xf9\x33\xc7\xa7\x6f\xb6\x77\xcc\x13\xe3\xb3\xb4\xb9\xc0\xbe\x55\xf1\xfa\x37\xc9\x03\x85\x17\xf0\x84\x03\x75\x2b\x36\x2c\xc1\xd6\x11\x49\x49\xa6\x48\x61\xcd\x05\xb1\x61\xf3\x9e\xed\x85\x06\x8f\x0c\x1c\x41\x0c\x90\x2f\xaa\x42\x28\xd0\xe9\x38\xf1\x03\xa2\x73\xa6\x65\xfb\xc6\x9d\xaf\x2a\x65\x2a\x90\xab\xfb\x9b\x83\x2e\xce\xa8\xda\xf7\x7e\x89\x92\x54\xa6\x23\x62\x7c\x7a\xda\xc3\x71\xc9\x03\x45\xec\x41\x35\x22\x24\xc9\x06\x3e\x1d\x1a\x8a\x6d\x78\xba\x4a\xb2\xd8\x34\xe2\x58\x13\x4d\xd1\xe4\x0c\xd7\x26\xd4\xc0\x06\x16\x47\x00\x49\x43\x4e\xda\x92\xf8\xdf\x97\xf3\xbc\xcf\xf3\x7e\xdc\xee\x4b\xf0\xfe\xb5\x94\xf6\x25\xf3\x97\x68\x93\xb3\x6d\xb7\xf3\xb8\xeb\xf8\x85\x1d\x47\xde\x2d\xdb\xb2\xd3\xef\x33\x32\x36\x3c\x20\xb1\xc1\x2e\xa9\x4a\x1a\xa2\x29\xd9\xd1\x98\xc8\x0d\x61\x48\x45\x40\xb5\x78\x42\x36\x65\x57\xc0\x4c\xc8\x70\x01\x17\x0b\x3a\x25\x60\x9b\x86\x3a\x0b\x84\x58\x4a\xd0\xa2\x5f\xb5\x7b\xf3\x0f\x0a\x3c\x9d\x3f\x7a\xee\x8f\xe7\x6e\xf4\xcd\xbc\x6c\xcc\xb2\xab\xfe\xba\x92\x7b\x8e\x7e\x3d\x70\x41\xd5\xd9\xb3\xf3\x65\xac\x5b\x33\xe1\x72\x5d\x07\x85\x1a\x1d\xb0\x52\x40\xd0\x31\x2d\x0b\xd8\xe4\x08\x1f\xdb\x91\xcd\x0b\x32\x64\x18\x59\x86\x4a\x04\x55\x07\x91\x48\x89\x6c\xce\xa0\x79\x32\xc1\x72\x8f\x1d\x3b\xbb\xe3\x60\xcf\x7a\x6d\xb7\xf4\x3a\xb6\xb4\xc1\xca\xf3\x39\x5b\xb4\x2b\x98\xff\xab\xaf\x06\xfc\x51\xe6\x05\x43\x3e\x0c\x7e\xc8\x58\x72\x22\x61\x1c\x26\x62\xc1\x77\x04\x59\x35\x7d\xdd\x44\x82\x43\xf3\x8a\x63\x3b\x20\x02\xa1\x63\x63\x5f\xd1\x35\x49\x97\x62\x56\x36\x05\x56\x09\x1d\xce\xd6\x39\x8a\xa5\x13\x93\x7d\x61\x54\xf8\x2b\x4d\x67\xf5\x73\x9d\x38\xd2\x39\xeb\x8b\x6c\x95\x1b\x54\x2e\x5d\x44\x7b\x70\x6c\xf9\xf1\x57\xf1\x05\xfd\x75\x98\x23\x89\xb5\x6d\x29\x10\x4d\x2b\xa6\xf5\x48\x71\xa0\xad\xf2\x1c\x25\x30\x82\xa0\xc9\x0c\x23\x5a\x8e\x06\x55\x2d\x34\x1d\x4d\x90\x3c\xc1\x63\x04\xc3\x0f\x6d\x95\xb0\x5f\x8e\x12\xd6\xb9\x45\x63\xab\x57\x19\xfe\xe2\xd3\x39\x97\x3b\xb7\x5b\x5d\xe0\xa3\x3b\xa3\x8d\xcc\x07\xc7\xba\xf6\xd0\x17\x6b\x5a\x1d\x5c\xb6\xe6\xe3\x24\x5a\x4c\x48\x91\x0c\x04\x44\x5a\x36\xcf\xf0\x04\x56\x23\xd2\x50\x05\x03\x4b\x98\xa3\x68\x1a\x59\x86\x64\x87\x91\x6f\xb8\x5e\x08\x4d\x45\x22\x03\x2d\x66\xf8\x97\x01\x31\xb1\x5b\xde\xdf\xee\xf3\x07\xf3\x2e\x7b\xf3\x8f\x62\x0d\xaf\x6f\xea\xf4\xbc\xce\xa2\x67\xc4\x8e\x5e\x33\x07\x56\x1d\x31\xfe\x48\xb7\x79\x95\x93\x87\x5f\x8c\xcc\x50\x90\x30\xc6\x9e\x86\x42\x92\x63\x43\xd2\x04\x22\xf0\x99\x88\x8f\x38\x0d\x60\x5e\x74\x00\x1d\x29\x3e\x27\x0a\xb6\x15\x49\xb6\x25\x44\x46\x62\x13\x0f\xf0\x78\x02\xe4\x66\xe4\x9c\x39\x3c\xf3\x94\x1d\x9f\x83\xb5\xeb\x0f\x8f\xac\x31\xa9\x63\x93\xe7\x33\x9a\xec\x3f\xc1\x0c\x7a\xad\x50\xf2\x6a\x49\xb4\x43\x41\x4e\x0a\x34\xcb\xa7\x24\x4c\x41\x8a\x95\x05\x8b\x47\x92\x63\x05\x84\xa7\x93\xaa\x6a\x7a\x64\x40\xa9\xba\x6f\xf2\x82\x8d\x4d\x21\x8e\x58\xc2\x7a\x79\x87\xd7\xe6\x3f\xf7\xfd\xe5\x5f\x37\x0f\x1f\xf0\xba\x7a\x75\x5b\xdb\xdf\x68\xbd\xcd\xac\xb1\xd7\xdb\xed\xad\x70\xf0\xc4\xbc\xed\x73\x6a\x55\x4d\xe2\x00\x00\x8b\x80\x21\xe6\x19\xdd\x13\x43\x3f\x16\x30\x47\x06\xa6\xef\x3b\x04\xe5\x29\x8e\x03\xa0\x16\x89\x91\x2a\x39\xbe\x0d\x62\xd7\xe0\x64\x84\x00\x96\x83\x74\x6a\x49\xd5\x8e\x1c\x9c\x73\xed\x35\xff\x6a\xa7\xbd\xeb\x85\x63\x0d\x7e\x5f\xbe\xb6\x64\xfb\xbd\xe3\x53\x84\xa9\xab\x3f\xcf\xfb\x7d\xa6\x1c\x7e\x9e\x34\x07\xb4\x54\xff\xc9\x87\xab\xb6\x2e\x76\x63\x4c\x96\x55\xb3\x4e\x7f\xda\x7b\xea\x4f\xf8\x9b\x5e\x0d\x76\x08\xad\xaf\xde\x99\xd6\x54\x23\xd7\x26\xaf\xd1\x98\x86\x8a\xc6\x6a\x86\x4b\xda\x2e\xa4\xa8\xc0\x10\x35\x57\x93\x58\x1b\x08\x1c\x6b\x3a\x72\x2c\x41\x85\x53\x34\xa4\x30\xa4\x2c\x48\x0a\x76\x6c\xc2\x74\xbc\x97\x0f\x68\xe3\x22\x6b\x26\x8f\x1d\x73\x66\xd1\x9d\xa9\x99\x82\x3c\xf7\x1b\x9e\x3a\xd9\xfa\xd2\x93\xd7\x36\x56\x5a\x52\xbf\x4e\x97\x0a\x3f\xb5\xfe\x14\x24\x31\xe1\xc9\xd8\x11\x36\x11\x15\x79\x40\xc7\x18\x70\x12\x22\x19\x17\xc4\x1c\xc0\x61\x24\x2b\x38\xe2\x24\x5b\xe0\x35\x06\x89\x74\x4c\x01\xe8\x32\xb1\xc4\xbd\xbc\xdc\xdd\xcf\xa7\x77\x28\xd0\x59\xb8\x3b\xe5\x8b\xba\xfa\x9d\x63\x8b\x73\x9d\xfd\x8a\xed\xbd\x3f\x65\xd6\xd8\x53\xc7\xc3\x6a\xc2\xb5\x3c\x19\x1b\xcc\x9f\xb8\xeb\xc0\xd6\x21\x6f\x71\x31\xb6\x34\x33\xa4\x5c\x8f\x47\x51\x40\xa8\x50\x20\x75\x43\x93\x4c\x2d\xb6\x03\x2b\xb2\x62\x89\xd6\x6d\xce\x13\x81\x05\x39\x86\x7f\xc9\x0e\xe0\x9f\xea\xd8\xa9\x29\x3b\xfa\xf7\xff\x2f\x3d\xbc\xbb\x60\x4f\x34\xa2\xf8\xf9\x8a\x57\x8a\x2c\xbf\x7a\x64\xc8\xd1\x9f\xf3\x0f\xae\xcb\x2f\x68\x3a\x24\x7b\xb7\x01\x3f\xce\xba\xf4\x66\x1f\x2f\x79\xe7\x99\x20\x09\x95\xb5\x54\x82\x35\x14\x23\xf6\xa9\x00\x5b\xb4\x04\x0d\x0b\x40\xcb\xc4\x00\x07\x5a\x08\x29\x31\xd0\x2d\x9e\x89\xa3\x50\x84\x26\xa9\x28\x66\x62\x11\xdc\x0f\x33\xde\xd9\xd0\x0f\xad\xe9\xb2\xb6\x60\xb3\x4c\x13\x26\x77\xcc\x8e\x5f\xcb\xff\xe5\xb6\x1c\x7d\x9a\xf5\x02\xc3\x0a\x1b\xb9\xbe\x4e\x5e\x02\x8a\xf6\x54\xd9\x51\x62\xdd\x53\xb4\x18\x71\x1e\xc7\x01\x92\xa3\xd4\x80\xc4\x90\x52\xb0\x4b\x20\xcc\x79\xb2\x14\x90\xdc\xbf\xb8\xb6\x4a\x90\xbe\xee\x58\x51\x62\x2a\x18\xdc\xce\x77\xe7\xcc\xed\x6c\x4d\x57\xa0\xba\x57\xca\xcf\x9a\xec\x9f\xef\xf6\xe6\x93\xea\x57\x4a\x12\x93\xdd\x0b\x8d\xa2\xa8\x68\x4a\x12\xb3\x08\xac\x16\x28\x34\x09\x5c\xca\xa6\x65\x40\x68\x06\xa5\x44\x82\x69\x42\x8f\x00\x40\xb6\x78\x85\x26\x4c\xea\x5f\xcf\x48\x64\x83\x10\xf3\x3c\x2f\x61\x90\x78\xc9\x45\x76\xa1\xaf\xde\x9d\x7e\x7a\xc5\xba\x32\x4d\xe7\xfc\xd8\xa9\xea\xc0\xb9\x57\xb2\x7d\x86\x7f\xad\xd2\xeb\xde\xde\xac\x4d\x5a\xae\x16\xdf\x4b\xde\x92\x01\x30\x75\x8b\x46\xae\x4a\x7a\x31\xad\x10\x8c\x2c\x4b\x51\x64\x20\x96\x8d\x65\x42\x70\x02\x9f\x03\xae\xc7\x73\x9c\x10\xd3\x8a\x23\xb2\x06\xe6\xe3\xbf\xe7\x48\x2d\xcb\xf9\xbf\xd5\xdf\x53\x9b\x14\x28\xd7\x3c\xad\x6c\xef\x75\xde\x1d\xfc\x5d\xdf\x1d\xc7\xc7\x29\xe0\x80\x34\x70\x4c\x9e\x2c\xd9\x3a\x15\xac\xbb\xed\x94\x30\x67\xea\x2c\x38\xa4\x57\x8e\xef\x93\x98\x8b\x97\x28\x86\xc6\x14\x62\x55\xd6\x50\x69\x5b\xa4\x78\x8e\xc3\xa1\xaa\xd1\x1a\x1f\x40\xc7\xc2\x1c\x0d\x91\xe6\x28\x88\x00\x50\x09\x19\x3f\x0e\x9d\x74\xcc\xf8\x3f\x21\x7f\x78\xf4\x7a\x9e\xb5\x0d\x7e\x3a\x3c\xe8\xd5\x1b\xbf\xb7\x6a\x28\x95\x5d\xfc\xcb\xbb\x45\xb5\xbd\xe3\x2f\x2d\x52\x3b\x5f\xea\xfb\x6d\x12\xb5\x40\xbc\xaa\x89\x74\xc8\x0a\x76\x44\x3b\x48\xf0\x23\xc5\x70\x3c\xc4\xc9\x22\x01\x64\x83\xb1\x24\x5e\x57\x91\x48\x06\x8e\x03\x03\xd3\x88\x8c\x30\xa2\xd3\x69\xd6\x5d\xf4\x4b\x77\x5b\xf3\x9a\x57\x2f\x76\x68\xc3\xb9\x5b\x3d\x26\xd4\x5a\x7f\x62\xee\xe9\xa1\x6d\xcf\xf7\xba\x78\x69\x43\xd6\xd4\x22\xd5\x33\x96\xee\x4b\x2c\xb2\xc5\x66\x2c\x9a\x32\xb2\x48\xde\xe2\xd4\xd0\x96\x0d\x4f\x44\xb1\xcc\x6b\xa1\xab\x3a\x2e\x52\x74\xda\x60\x19\x4f\x71\x48\x84\x21\xd4\x25\x68\xb2\x72\xe2\xf8\xd2\x66\xf5\xbb\xdc\xc0\xa2\x35\xd7\x5e\xda\x79\xbe\xd5\xb4\x79\xbd\xbf\x50\xbf\x6a\xbd\xe4\x40\xbb\x55\x9d\xaf\x17\x69\x99\x8b\xab\x3d\x3b\x63\x13\xbf\x13\x2e\x19\xab\x04\xa0\x08\x4e\x63\x04\xce\x89\xed\x40\x06\x21\xc1\x52\x21\xb6\x38\xac\xa8\x02\x2b\xdb\x10\x5a\x22\x6f\xc9\x48\xd1\xa0\x84\x54\x91\xa3\x69\x2a\xf1\x92\x5b\x3d\xa3\x0e\x76\xed\xb3\xb5\xf0\xcd\x05\xd7\xb6\xaf\x9a\x5a\x65\xcd\x2f\xfd\x8c\xe6\xd9\x7a\x5d\xeb\x76\xe5\xa3\xdd\xf5\xf2\xdd\x8c\x33\x16\xc5\x13\x5e\xab\x94\x4d\xf3\xac\x1f\xeb\x86\xc5\x11\x36\x1f\x6a\x64\x1c\x70\x8c\x69\x79\x81\xab\x4a\xb2\xe0\x73\x16\xe2\x68\xcf\x70\x39\xd6\xb3\xb1\x01\xdd\x58\xc7\x7f\x3f\xe6\x1f\x64\xff\xdf\x8a\xdb\xa9\x29\x59\x33\xe5\xca\x34\x30\x0d\xef\xd4\x5a\x0e\xb8\x76\x62\xff\xcd\xc5\x29\x6e\x49\x1b\x3c\x59\xb1\xb3\xc7\x4f\xfb\x5b\x3c\xa8\x8f\xfb\x2e\xdf\x7d\xb3\xab\x78\xf5\xc7\x0a\xc9\xfb\x28\x12\xc4\x8a\xc2\x82\x58\x36\x74\x1d\x61\x35\xa6\x51\x64\x61\x45\x63\x38\x4d\x34\x7d\x8f\x64\x02\xdd\x42\xb2\x64\xe8\xb1\x22\xc8\xa6\xa3\x3a\x64\x8c\x5f\xe6\x9d\xa7\xca\x1c\xcd\x35\x77\xe9\xaf\xd3\x7e\xca\x5c\xa3\x46\xff\xef\x77\xee\xf7\xdb\xb6\x1f\xff\xc9\x87\xdf\xad\x68\x7c\xaa\xd9\x7c\xa6\xe2\x92\x8c\x8d\x46\x4c\x9c\xc3\x72\x7d\x8a\x96\x40\xe4\x50\x84\x2c\xb8\x14\x25\x47\x26\x23\x84\xb6\x1e\x33\x1c\x27\xdb\x9c\x42\xab\x31\xf4\x29\x92\xa1\x24\x3f\x8c\x68\xc9\x17\xd9\x74\xe4\xf0\xbf\xcc\xd8\x4d\x3e\xbb\x6e\x56\x2b\x50\x72\xe0\xd4\x2e\xbd\x37\x9c\x7d\x3e\xec\x6d\xf9\xc0\x8d\xac\xb4\x3c\x7e\xf6\xce\x12\xd3\x77\x24\x6f\xf6\x2a\x8d\x38\xcd\x96\xe4\x40\xb6\x00\x2d\x19\xb2\xaf\x93\xa6\x6c\x89\x11\x52\x65\x57\x77\x34\xc3\x13\xad\x50\x40\x58\x73\x6c\x03\xab\x82\xa1\x19\xa2\x9d\x5e\xf3\x0a\xec\x5c\x70\x42\x29\x48\xdd\xbf\x5f\xc2\x79\x63\xfa\xa1\xb1\x97\x2a\x3e\x2b\x63\x9d\xbe\x5a\xa9\x59\xab\x2f\x7d\xd0\xa2\xd8\xf3\xe6\xc9\x5b\x32\xe9\xc6\xac\x22\x38\x48\x94\x44\x23\x36\x0d\xd9\x61\x55\xca\x09\x3c\x49\x07\xac\xab\xfa\x96\x21\xd0\x8e\xaa\xf3\x30\x10\x59\x07\x7b\x9a\xe7\x92\xae\xf0\x92\xb6\xfc\x9f\x54\x1a\xa9\x29\x65\xf3\xf4\xcf\x35\x38\x0d\xec\x1b\x7f\x92\x47\xc5\x79\x82\x15\xd7\xe1\xc9\x26\xf5\xa3\x99\xf7\xe8\x62\xad\x4b\x46\x85\xc2\xe3\x55\x6e\x45\xb3\xc6\xff\xf0\x69\xc6\x6e\xe1\xc4\x46\xfe\x3c\xe7\x03\xcb\xc6\xaa\x24\x5b\x21\x32\x04\x92\x00\x94\x45\x13\x16\xed\xe1\x38\x96\x0d\x56\x97\x78\x4b\xd3\x18\x60\x5b\x82\x29\x89\xa4\xa9\x92\xd6\xcb\x7c\xb9\x7d\xfd\xb9\xc7\x8b\xde\xb9\xd7\xfd\xbd\x17\x5d\xd7\xbc\xf1\x5d\xcd\x2f\x2b\xf5\x7b\x75\xc7\xa2\xf9\x95\xca\xb5\xdd\x31\xfa\xbb\x67\x5f\x76\xcf\xd8\x1c\xea\x84\x77\x2a\x01\xa1\x4d\xc9\x24\x87\x80\xe3\x10\x24\x8a\x15\x41\x35\x24\x11\x4a\x1a\xad\x43\x99\x0f\x04\x2a\x24\x78\x5d\x96\x23\x05\xb9\xac\x64\x92\x06\xa0\xd3\xb1\xab\x01\xfb\xfe\xaa\xf3\xfd\x3b\xc3\x17\x7d\xd5\xec\xdd\x53\x5c\xe7\x55\x1f\x1f\xfe\xfe\xe2\xd7\x6e\xd5\xb1\x6c\xa1\x09\x70\xfa\xe6\xfd\x28\x63\x02\x97\xc4\xdd\x95\x2c\xcb\xa8\xb6\x88\x25\x51\x60\x68\x85\x36\x35\x21\xf4\x25\x55\x43\xbc\x15\x90\x01\xe4\xe8\x50\x94\xdd\xd8\x64\x88\x88\x92\x03\x4d\xf5\x2d\x4b\x4a\xa7\xcd\xec\x93\xea\x65\x5b\xad\xba\x34\x61\xf6\x7d\xea\x7b\xe6\xe0\x84\x83\x15\xc6\x94\x7d\x75\xfe\x87\x0d\x5b\x8e\xae\x30\xf1\xe9\xf6\x82\xef\x1a\x07\x92\xb8\xcb\x04\x0e\xd4\x90\x54\xb0\x06\xb4\x50\x06\x96\x66\x21\x59\x41\xae\xc3\x23\x9e\x77\x6d\x5e\x73\x3c\x4e\x57\x02\x8a\x57\x29\x5b\x97\x65\x8d\xd1\xd3\x23\xc0\x35\x3a\xfd\xf9\xb9\xee\xc5\x35\x86\xb5\x29\x6e\x67\x6b\x53\xbf\xfe\xdc\x15\xc5\x87\x3c\xad\x31\xa0\xeb\xd6\x3d\xdf\xed\x5c\x98\xe9\x51\x12\x9b\xf9\x6c\x3b\x66\x48\x8e\xe2\x28\x1a\x90\x22\xe2\x3d\xdb\x88\x34\xc7\x23\x00\xc6\xb2\x6c\x32\x22\x0e\x43\x43\xb1\x58\xdb\x62\x7d\x8f\xe3\x23\x41\x13\xa3\x74\x46\x7c\x8e\x1a\x73\xa8\xf8\xf5\x77\xaf\x6e\xec\x52\xa7\xd9\xf7\x77\xfb\x11\xd2\x7b\x37\xf5\x3c\x75\xcb\x2f\x1b\xd1\x2d\xaf\xd9\x48\xdf\x14\xad\x4b\xa2\x73\x01\xcf\xa8\xac\x81\x1d\x81\x27\x23\xdb\x09\x59\xec\xea\x36\x52\xb5\xd8\x26\x68\x92\x8f\xf9\x38\xe0\x10\x81\xa2\xc0\x04\x24\xc1\xe9\x66\x6c\x73\xcc\xdf\xb2\xb1\xfb\xd9\xff\x37\x51\x57\x6a\x93\x42\x99\x0a\x0c\x4c\xf3\x07\x7b\x0c\x7c\xbd\xe4\x65\xfc\xd6\xdc\x81\x35\x1d\xf9\xaf\xcb\x35\xe7\x30\x4a\x8e\xc6\x1d\x84\x7a\xf3\xab\x7e\xbd\x6b\x9a\xbc\xf1\xc4\xad\x24\x4a\x25\x5c\x46\x61\x0d\x27\xb2\xa1\x20\x11\x6e\x40\x21\xd5\xe4\x24\x96\x82\x6c\x48\x21\x9d\x09\x8c\x90\x65\xf8\x58\xc0\x7a\x14\xc4\xa4\xe1\x39\x3c\xb0\xe5\xc4\xd9\xa7\xd6\xad\xaa\xbf\xd2\xac\xea\xf5\x31\x0d\x32\x3d\x5b\xdb\xf4\xfe\x7c\xab\x66\x93\x53\x29\x65\x97\x97\xc8\xde\xe2\xd4\x97\xf3\x2e\x4f\xdd\xd2\x31\x89\x9e\x1d\xb6\x89\x0c\x91\xb4\x34\x53\x74\xa5\x80\x77\x43\x47\x01\x94\x41\x0b\xaa\xc3\x7a\x50\x47\x0a\x84\x1a\x67\x69\x8e\x62\xaa\x32\x62\x78\x4b\x67\xa4\x04\xea\x8e\x3f\xc1\x94\xb7\x4a\xcc\x29\xda\x51\xef\x36\x78\xe7\xda\xcf\x8f\xbe\x98\x36\xad\xe7\xd0\xac\x6b\x9c\x81\xed\xf6\x5d\x7d\xff\x8f\xf3\xaf\xfd\x98\xc4\xd2\x26\x60\x3d\x93\x92\x24\x39\xd2\x05\xd2\x0f\x79\x04\x25\xd7\x92\x08\x49\xe1\x78\xdf\x11\x4c\x51\x89\x1d\x42\x34\x02\x43\xc5\x48\xf2\x14\x80\xb1\x64\x25\x3e\xa8\xfa\x55\x6c\xad\xcb\x59\x26\x7f\xc5\xcd\x6f\xcf\x9b\x5d\xa4\xd4\x89\xed\x74\xd3\x89\xcd\x26\x7e\xd4\x5f\x78\x3e\xb5\x93\x34\xec\x8f\x8c\xf5\x15\x27\x4e\xf8\x72\x2c\xad\x89\xba\xcd\xc6\x22\x47\xbb\xbc\x2e\x08\x58\x97\xff\xf5\xbc\xf0\x22\xd3\xe7\xb4\xd0\xd7\x01\x08\x69\xde\xe5\xd9\x40\xb3\x15\xd5\x50\xfe\xcf\x4c\xe7\xff\x64\x3c\xfe\x49\x8b\x96\x9a\x52\xfe\xdd\x4c\xff\xd5\xa9\xd8\x27\x73\x99\xbb\xd5\x5a\x7e\x33\xaa\x7c\x83\xcd\x59\x6e\xd4\x89\x6e\x66\xfa\xf6\xe1\xea\xfa\x6f\xed\x2a\xbc\x79\xb8\x18\xe5\x25\x5e\x3b\x9f\x3c\x0c\x89\xb2\xaa\xda\x34\x4f\x53\x62\x80\x0d\x8e\x35\xf9\x58\x75\x49\xc7\xb1\x69\x4d\x13\x62\x8a\x64\x69\x13\x21\x45\x80\x16\xf2\x40\xcc\xb9\x2e\x89\x71\x3a\x5e\x3c\x63\xa7\x7d\x73\xf7\x50\x99\xd9\x7a\xb5\xa1\xbf\x15\x74\x98\x7a\xe3\x2e\x17\x1f\xe9\x93\x47\x67\xbc\xf2\x6a\x30\x37\xdb\x62\xad\x4a\xc6\x8c\xeb\x12\xfb\xb1\xca\x06\xa9\x42\x96\x20\x05\x85\x67\x85\x80\x63\x79\x8b\x09\x79\xd3\x67\x28\xe8\x68\x06\xab\x44\x91\x4b\x29\x2c\x8c\x25\x59\xb7\x04\xc3\x71\x14\x3b\x4c\x4c\xcd\x9a\xf9\x44\xd9\xb3\xe6\x67\xa3\x8f\x97\x69\xfc\xcb\xef\x78\xd0\xa0\xeb\xa3\x7f\xbf\xab\xac\x7b\xbb\x8f\x92\x15\xd6\xa8\xfb\x51\xa9\x5f\x92\x77\x47\x71\x81\xc2\x58\x88\x44\x14\x41\x71\x14\x44\xa4\x43\x63\x8e\xa7\x54\xda\x0f\x54\xcf\x62\xf8\xc8\xf5\x55\x11\xd8\x40\x95\x14\xc8\x46\x92\x4f\x21\x57\x49\x0c\xfd\x1f\xc2\x2a\x5e\xe3\x9e\xb3\xca\xfd\xb8\xb3\x5a\xdc\xe9\x6a\x38\x64\xc6\xc6\x5f\xfe\x2a\x9d\x79\x44\xbd\xf5\x87\x8a\xa4\x34\x99\x5c\xce\x49\x5e\x3c\x94\xa0\x2d\x4b\x1c\x17\xdb\xd6\xbf\x18\x8c\xab\x38\xac\x84\x38\xd1\x33\x38\x55\xa3\x3d\x4d\xb2\x9c\x48\xf4\xa5\x80\x91\x14\x9b\xf7\xc5\x90\x8a\x35\xe6\xef\x27\xc6\x7f\xcc\x2f\xfe\x49\x58\x99\x9a\x52\x31\x53\xae\x77\x07\xa5\x09\x9f\x29\x6f\xdc\x5f\xf3\x24\x6f\xbb\x07\x5d\x73\xcd\xce\xf7\xcb\x75\x53\xad\xfa\x4d\x8e\x31\xc3\xe6\x8c\x7c\x54\x91\x5c\xbf\xec\x4f\xd8\x67\x72\xf2\x3e\x8a\x15\x52\xb4\xc0\x47\x48\xa2\x02\x81\x64\x0d\x5e\xd5\x79\x86\x30\x00\x8c\x58\xc1\xf2\x7d\xd6\x01\x80\x8f\x70\xa8\x1b\x3c\x74\x68\x8f\x15\x25\x9b\xa0\x5f\x96\x5a\x8c\xdf\xfb\xf5\x17\x9f\x0d\x3e\x39\xfd\xf4\x85\xb6\x37\x9e\xe5\x79\x5e\x78\xf9\x0f\x2b\xbe\xa9\x39\xe6\xc1\x77\x85\x1a\xd4\xe8\xfe\x60\x60\xf6\xe4\xcd\xa8\xc1\xb1\xc8\x18\x9a\x68\x50\x31\x27\x85\x98\x31\x0c\xcd\x92\x1d\x4d\xd6\x48\x4b\xd6\x64\xce\x8b\x98\x98\x09\x1d\xd9\xd2\x39\xc1\xc6\x9c\xc6\x81\x08\xca\x42\x62\xd8\x9f\x2c\xd8\xe8\xd1\xe5\x5a\xdf\x7e\x59\xfc\x67\xeb\xc8\xb1\x89\xef\x57\x6b\x08\x0e\x3e\x2b\x9f\x3f\x7a\xf4\xd7\xcc\x86\xd7\xdf\x57\x4a\x66\xec\x21\x9e\xd8\x49\x90\x40\x04\xc1\x92\xb2\x22\x46\x66\x18\xb9\x3e\x54\x34\x41\x64\x20\x86\xa4\x40\xf2\xb4\x26\x71\x1c\x2b\x05\x26\x86\x3a\x05\x14\x87\x96\x25\x33\x0a\x13\xc3\xde\xc8\x57\x64\xeb\x57\xe5\xaa\x49\x5f\xdf\xf5\x1a\x5c\x28\x32\x39\x7e\x92\xbd\xf0\x92\xd9\x43\x7f\xbf\xbf\x97\x5a\x30\xa8\x1d\x84\x5b\x92\xd8\xde\xa1\x30\x6c\x60\x8b\x8a\x41\xaa\xa1\x24\x49\x34\x03\xf8\x20\x16\x4c\x32\xc4\x74\xac\x68\x9e\x44\x19\xb1\xad\x04\xff\xa2\xed\xac\x26\x0a\xb6\x46\x30\x30\x71\x3c\xcc\x74\x33\xcb\xee\xde\xe7\x5b\x15\xba\xd8\xfe\xdd\xb7\x7a\x57\x2b\x5e\xe0\xfe\x0e\x69\xee\xa3\xd7\x9f\x75\x45\x9c\x52\x7a\x1c\xfb\x76\x12\xc7\x43\x69\x96\x68\x89\x94\xcd\x4a\x81\x45\x52\x31\x69\xf3\x8c\x62\xab\x92\xac\xab\x54\xc4\x50\x86\xa2\x39\x3a\x19\x70\xac\x64\xc8\x12\x04\x2c\x6f\x88\xce\xff\xb1\xee\xfa\x4f\x6e\xf2\x9f\x14\xc2\xa9\x4d\xde\xcd\x9c\x2f\x6d\x6e\x32\x7f\x87\xdb\x2f\x1e\xbc\xf3\xd3\x85\x81\x8b\xd7\xb6\x99\x73\x4e\x1e\x94\xcd\x18\x3b\xfe\xaf\xbc\x07\xce\x77\x28\xf0\xac\x55\xf3\x65\x0f\xb2\x26\xb1\x9b\x5e\x90\x24\x18\x12\xaa\x6a\x98\x9e\x12\x71\x22\x15\xfa\x8c\x44\x21\x28\x1a\x08\x40\x80\x05\x9a\xd2\x6c\xa8\x7a\x31\x86\xaa\x40\xf9\xd0\x75\xa3\x74\xf2\xc5\x83\xb7\x56\x9d\xb5\x64\x6d\xcf\x6e\xc2\xa2\x3c\x7a\x21\x3c\x2e\xb5\xc2\xb8\xcc\x57\x7a\xfe\xa5\xde\xae\x5c\xff\x71\xf4\x7a\xb4\x25\x63\x96\xda\x89\x2d\x0e\x64\x51\xe7\x63\x8b\x51\x45\x2a\x54\x04\x64\x62\xdf\x43\xa6\xe7\x99\x5c\x10\x28\x56\xa8\x39\x58\x62\x02\x9d\x21\xf9\xd0\x8a\x48\xca\x94\x65\xc9\xa1\x13\x1f\xd6\xa3\xeb\xdb\x0e\xd8\x7f\xbc\x9e\x34\xb0\x42\xbb\x46\x5d\xc7\x15\x0a\x3e\xcf\x52\xd1\xae\x3a\xfe\xd7\x63\x43\x66\x3f\x1c\x53\x63\x89\x3d\x33\x89\x4e\xa5\x91\xeb\x3b\x0e\x43\x92\xae\x62\xd9\x2a\xa5\x21\x81\xd1\x04\x3b\xb6\x6d\x5f\x61\xbd\x50\x00\x91\xa2\xc3\x40\x96\x54\x89\x12\x5d\xc1\x24\x2c\xd1\x49\xc7\x48\x62\x03\xec\x9b\xfd\x7c\xae\x96\xb9\x7f\x59\xb3\xa8\x72\x93\xfc\x0b\x8e\xef\x2d\xcf\x4f\xba\x34\xdb\xdd\x7e\x2b\xff\xcd\x8e\xc7\xfa\x34\x4e\xe2\x10\x7f\x5b\xa4\x5d\x9b\xa2\x79\x95\x47\x86\x89\x0c\x43\xe5\x39\xd9\xf3\x55\x86\xf1\x45\xdd\x67\x58\x57\x23\x18\xdf\x0d\x22\xc2\xd5\x48\x31\x26\x51\xa0\xd0\x7a\xe2\xc3\xfa\xcb\xd4\x27\x5b\x66\x4e\x6b\x35\x60\x4a\xb9\x6f\xe8\x66\xa7\xa7\x7f\x36\x71\xd9\xad\xec\x63\xcf\x97\x09\x17\xbe\x0e\x17\x4c\xac\x9f\x63\x53\xf2\xb0\x4c\x12\x08\x48\x52\x44\xf2\xb4\x68\x1b\x26\x4d\x71\xa2\x4f\xd1\x9a\xa7\x58\xb2\xca\x98\xaa\x1f\x79\xae\xab\x70\x84\x0a\x14\xcb\x62\x4c\x4a\xc2\x86\xfb\xb2\x53\xe9\x3f\x69\x59\x53\x53\x0a\x64\xce\xc4\xa7\x75\x2a\x2d\x79\xe1\xd0\xe4\xd3\x1d\x5a\x9c\x69\x31\xe0\xf2\xd1\xe0\x54\x83\xb7\xcb\x65\xfe\xb1\x4e\x85\x0a\x33\x9e\x6c\xf9\xca\xfd\xab\x72\x93\x93\x19\xab\xee\x24\x2e\xe3\xeb\x80\x53\x75\x1e\xd3\xb6\xc8\x3a\x8e\xe7\xd0\x66\x2c\xb2\xac\x69\x31\x80\xb6\x90\x8b\x43\x28\xaa\xb2\xcb\x40\x10\x2a\xb1\x29\xf2\xbc\x8b\x68\x2e\xf1\x47\x91\xf9\xc6\x33\x0f\xf4\xde\xdc\xb9\xd8\xc7\x83\x47\xe4\x3b\x56\xa6\x7f\xab\x8b\x05\xb3\x5d\x08\x8f\x96\x6c\x57\xe0\x45\xa9\x7d\x3d\xf7\x89\xc9\xfb\x28\x21\xa3\xaa\x04\x6f\x99\xb1\x48\xc5\x3e\x60\x04\x0b\xd1\x21\x26\x04\xd2\x95\x23\x87\xf0\x34\x97\x01\x0e\x0d\xa9\x40\x0d\x0c\x4f\x21\x64\x44\x49\x71\x3a\x29\x84\x3f\xe7\x1f\x7d\x73\xfa\x6f\x4f\x47\x8e\x38\x72\x7b\xd2\xd1\x8a\x0b\x3a\xec\x5b\x9a\x77\xfe\xc5\x6f\x1e\x5c\x2b\x2f\x0e\x38\x9e\xfd\xf9\x82\x1e\xc9\x0b\x30\xa1\x47\x28\x98\x12\x3d\x02\x02\x4a\x10\x3c\x93\xf7\xb1\x11\xc4\xa4\xa5\x42\x8f\x01\xa1\x22\x71\x2e\xa0\x34\x96\x62\x4d\x8d\x55\xd4\x88\xd0\x19\x5a\x4c\x1c\x60\x26\xef\x37\x6a\x9f\x7f\xff\x50\x8d\x49\x1b\x5a\xac\xfd\x5d\x1c\x56\x73\xe6\xa3\x5d\x4f\xe2\x6f\xdf\xc8\x76\xaf\xc3\x93\xf8\xd8\x8d\x06\xc9\x9b\xb9\x44\x2b\x91\x03\x5c\x8f\x55\x19\x83\xa5\xa0\x87\x58\x55\xd5\x74\x83\x37\x45\x8b\xc3\xb1\x89\x18\x93\x0d\xb1\x4e\x7b\x26\x41\x33\xd8\x8d\xb4\x98\xa5\x94\x74\x2c\x6c\xf3\x3c\xc8\xca\x4d\x3d\x6a\xf4\xb7\xb7\xdd\x58\x3f\x6d\xdb\xe7\x1b\x98\x69\xcd\x3e\x1d\xf0\x7b\x01\xee\xa7\x51\xf5\xe2\xe9\xb3\x1a\x56\x4a\xde\xd5\x0a\x64\x13\x32\xb2\xc2\x48\xbe\x03\xa1\xef\x04\x4e\xa0\xdb\xa1\xac\x6a\xa2\xc1\xdb\xaa\x48\x33\x92\xef\x52\x66\x64\x01\xc9\x0b\x34\x43\x76\x6c\x82\x90\xd2\x71\xc5\x5c\x51\x2c\xd7\x85\x3f\xb2\x2f\x29\x3f\x6a\x8d\xf9\x4a\xea\x95\xa8\xf0\xac\xe9\xfb\xee\x7f\x7e\xbe\x40\x9f\x6b\x9f\x4d\x4f\xe1\xdf\xcd\x58\xd2\x31\xb1\xcf\x5e\xac\x41\x49\x90\x71\x4c\x78\xbc\xa5\xb0\x24\xa6\x55\xcf\x89\x2c\x46\xa4\x64\x47\x20\x01\xa4\x59\x18\x92\xb2\xaf\xda\xb6\xe4\xda\xae\xe0\x31\xce\xdf\x39\xd2\xd1\xaf\xfc\x6f\xea\x8e\xd4\x94\x5c\x38\x53\x9e\xb4\x01\xe6\x42\xcb\xbe\xf9\x96\x1c\x7b\xa7\x70\x8f\xde\x2b\x8e\xad\x38\x5a\xf3\xea\xad\xa2\x95\x0b\xde\x8a\x2e\xd6\xcd\xad\x1e\x01\x2b\x95\x5f\x3f\x48\x62\x53\x3d\xcf\xd3\x46\xe0\xbb\x96\xaf\x38\x1e\x67\xf1\xba\xeb\x19\x84\x6a\x09\x8e\x4d\x88\x9e\x0b\x6c\xd6\x55\x0c\xec\xcb\x62\x28\x6a\x80\x08\xdd\xd0\xb4\xd3\x09\x30\x6b\xee\x96\xa9\xb3\x7b\xf8\xe5\x32\x9d\xd6\xd3\x6f\x6e\x5e\xd4\xb3\xe5\x9d\xb9\x17\xb3\x54\xac\x77\x3e\xdf\x91\xeb\xc5\x26\xd7\x21\x37\x8d\x4e\xde\x69\x75\x54\x1d\xb3\x21\x17\xeb\x3e\xe5\x53\xa4\x45\xa8\x02\x92\x02\xd5\xf5\xa0\x8e\x69\x40\xd3\xa1\xc1\xc4\x2e\x0d\x35\x4b\x65\x5c\xd7\x60\x19\x5b\x8e\xdc\xc4\xa7\x75\xde\xb2\x6a\xc2\x9f\x56\xbd\x11\xf3\x37\x36\x84\xb5\xbe\x5a\x77\xda\xa7\x4f\xac\xfa\x63\xf3\xa4\xe9\xf9\x5f\xb9\x5d\xea\x59\xc3\x01\xb5\x93\xb7\x64\xd1\x42\x58\xf3\x20\x44\xa2\x1e\x10\x94\x89\x09\xc3\x60\x5c\x9a\x97\x5d\x27\xa2\x81\x81\x4d\x52\xa3\x49\x49\x16\x0d\x29\xb6\x3d\xcd\x0d\x62\x4a\x4d\x87\xc1\xe4\xef\x7e\xfa\xdc\xe1\xf6\xf8\xab\x0a\x2d\xcb\xf7\x2b\xd1\x7f\xf9\x30\x79\xc3\xdb\x06\xd8\x7a\xa3\xea\xb2\x25\xeb\xaa\x3f\xa0\x77\x8d\x4a\x5e\x18\xa7\x2d\x56\xe5\x19\x39\x56\xa2\xd0\xc1\x34\x15\xf2\x2e\xad\x0a\x06\xe3\x22\x0f\x23\x9a\x08\x55\x8a\xa3\x45\xe0\x09\xd0\xd2\x5d\x18\x7b\xa6\xa6\xd9\x4e\xe2\x00\xf3\xc7\xd9\x51\xf3\xff\xbc\x9a\xef\x59\x85\x07\x75\x96\xc8\xdc\xaf\xdd\x26\xb7\x5f\x98\xa5\xca\xc7\x25\x6e\x8d\x6e\xf3\xc5\xee\x0f\x49\xae\x4e\xf2\x2e\x4b\x85\x0d\x5d\x5b\x09\x59\x96\x24\x1c\x91\x11\x39\x17\x62\xdb\x33\x22\x0f\xc6\x94\xe7\x73\x96\xc4\x33\x92\xcf\x68\x92\x1c\xb9\x94\x1f\x23\x36\xb0\x2d\x26\x71\xd6\x31\xcb\xa4\x71\x73\x8a\x97\x7d\xbc\xa1\x56\xd7\x73\x21\xbb\xa1\x52\xeb\x72\x75\xb3\xd6\xb9\x7c\x7a\xea\x33\x89\x7e\x63\xdf\xba\x11\x39\x1f\x26\x31\x31\xc0\xdb\x9a\x02\x35\x68\xcb\x31\xc9\xd2\x90\xe3\x19\xc5\x44\xd0\x36\x1d\x97\x67\xa3\x00\xa8\x91\x47\xfa\xa6\x02\x05\x49\x67\xa2\x80\x33\x5d\xd1\x66\x5e\xce\x3a\x9e\xac\x58\xa5\xeb\xa2\xfc\x73\x6b\x9d\xf9\xe3\x2f\xe3\xf5\xc5\x07\x2e\xe7\xc6\xcb\x1f\xcd\x19\xcb\x6e\xaa\x7b\xb5\xc6\xc2\xe2\xad\xce\xf8\x49\x4c\xbd\xb0\x9c\xc2\xc9\x10\x4b\x42\x84\xe2\x00\xea\x92\xa7\x52\x24\xcf\xa9\xb6\xe9\x72\x02\x1b\x22\xd3\x94\x29\x1e\x60\x84\x14\xd2\xb1\x61\x28\x08\xea\xdf\x4e\x39\x2b\x1a\xfe\x7b\xb5\xe7\x89\x4e\xfd\xe7\x2d\x3e\x70\x2c\x47\x9f\xbd\x03\x1f\xee\x8b\x3e\xd4\x1e\x2d\xfa\xb0\xfc\x43\xf4\x22\x75\xfa\xa3\x69\x67\xc7\xdc\x2a\x9f\x9a\xf2\xe2\x45\xbf\x17\x53\xcb\xa4\xf9\x22\xfc\x8d\xe7\x57\xaa\x7f\x92\xa9\xcb\xf8\xe8\x4f\x17\x76\xe8\xd9\xfc\x2c\x51\xb0\xf2\xeb\x67\xf5\x8f\xf3\x96\x57\xfa\x7f\xff\xed\xb5\x8c\x59\x12\x24\x76\x50\x40\x4a\x2c\xab\xaa\xae\x53\x76\xcc\x5a\x1a\x85\x4c\x03\x07\x8c\x16\xc4\x01\xcb\x28\x96\x25\xb8\x40\x66\x74\xd2\x82\x22\xf4\x4c\x47\xe3\x3c\x5e\x4a\x30\x0e\xaf\x6f\xdf\x1f\xd7\x57\xa9\x07\xc1\x17\x55\xea\xae\x29\x3b\x40\x39\xab\x7f\x39\xf1\xb3\xba\x71\xf7\xf6\xf9\x4e\xb6\x2f\x9a\x35\xf3\x40\x22\x89\x05\x1b\x8e\x67\x75\x0f\x9a\x22\xa6\x6c\x1a\x69\x96\xa3\x1a\x0e\x09\x45\x42\x34\x18\x31\x34\x69\x68\x44\x38\x00\x98\xe4\x4c\x86\xb6\x4d\x92\x51\x85\xf4\xca\x62\xc1\x80\x59\x95\x73\x7d\x70\x65\xd8\xba\x94\xb3\xe7\xdf\x38\x3b\x31\xfb\x81\xe6\x8b\x36\x17\xba\xf7\x5e\x89\x90\x78\x7a\xfd\x93\xab\x4e\xc6\x9a\xe6\x13\x0f\xda\xa2\x38\x9b\x30\x38\x8a\x96\x44\xcf\x66\x38\x93\xf7\x0d\x03\x00\x28\x61\xc1\x8e\x58\x13\xc9\x72\x00\x62\x31\x0e\x69\x9b\x8e\x2d\x0c\x90\x17\xcb\xe9\xcd\x5f\xb4\x8f\x7d\xfb\x69\x9b\x51\x57\xdd\x4d\xef\xf7\xaf\x56\xad\x2f\x7d\x60\xe7\x9a\x9c\x9d\x89\x2a\xfc\x9b\x1f\xa7\xce\x1f\x6f\xb5\x5d\xf9\x5a\xda\x5f\xf7\xe8\x5d\xe5\xd0\x0f\x3f\x0f\x7e\x54\xa6\xc5\x2f\x6b\xfa\xb7\xcb\xfa\xc3\xc2\x2a\xc5\x2a\x36\xde\xfb\xc3\xd5\x5b\x52\x9f\x83\xef\xbc\x3b\x20\x6d\xd2\xf8\x59\xa9\x89\x93\x4a\x95\x1c\xf6\xe7\xa5\xca\xd5\xaf\xdf\x7c\xe4\x57\x1b\xbd\x65\xd8\xcc\x9f\xf3\x96\xa8\x7d\x6c\x2e\x33\x77\xe8\xc8\x2e\x23\x92\xf7\x05\x99\x08\x6a\x6a\x08\x59\xd5\x82\x2e\x23\x85\x46\xcc\x69\x01\x0e\xbc\xc0\x47\xa6\x18\x40\xdb\xa5\x5c\x57\xe3\x54\x8d\x53\x63\x16\x00\x4b\x00\x9c\x1d\x26\xd6\xf2\xc3\x91\x35\x5e\x9d\x52\x40\xca\x51\xa4\x43\xb6\x47\xd9\xde\x6b\x33\x79\x77\x29\xb9\xf6\xa9\xfe\x55\xda\x9f\x7c\x3b\xe7\xb6\xa9\x27\x9e\xb7\x49\xde\x92\x11\xed\x40\x0f\x47\x22\xc7\x2b\x22\x45\x70\x8c\xcd\xa8\x98\x24\x43\x60\x29\x1c\x27\x18\xb1\x4f\x20\xa4\x1a\x92\x2d\xc7\x86\x40\xba\x00\x50\xb6\x25\xbd\x9c\xec\x3b\x5f\xa0\xe8\xee\x82\xbd\x4b\x74\x3b\xe6\x54\x5c\x78\xf6\x77\xbe\x6e\xa7\x5f\x0b\x1e\x18\xbd\x6f\x2d\x71\xb3\x41\xf1\x01\x0d\xbb\x96\x5b\x9a\x3c\xc0\x91\x12\x85\x38\x5d\x94\x79\xa4\xd9\x2e\xd2\x14\x51\xb7\x80\x13\x18\x0a\x29\x23\x81\xe4\x59\xa8\x38\xc0\x60\x54\x88\xa1\x19\x92\xb6\xab\x3b\x1e\x43\xbe\x1c\x64\x9f\x96\x3c\x7b\x10\x6e\x99\x35\xf9\xd2\xa5\xdd\x4a\x8b\x1d\xbb\xf7\xce\x3f\x57\xf6\x60\xb5\x05\xef\x84\x47\x8f\xe6\x1e\xb6\x23\xd3\xdd\xe2\xc9\xa3\xf6\xb4\x6c\x80\xc8\x09\xb1\xe6\x46\x94\x67\x71\x8e\xe3\xaa\x20\x08\x70\x00\x1d\xe4\xca\x34\x54\x7d\x51\x62\x3c\xd7\x96\x2c\x29\x64\x78\x3a\x8e\x4c\xc9\x4f\x0c\x88\xe2\x7f\xae\x55\x77\x3c\xcb\x56\xba\xea\xd5\xea\x4c\xb9\xdd\x75\xfa\x77\x3e\x64\x34\xdc\xfe\x4d\x45\x54\x2e\xce\xfc\xf5\xb3\xf0\xf4\xf4\x24\x9a\x65\x51\x48\x62\x63\x41\x64\x2c\x4b\x56\x69\xdb\x46\xbe\xe5\x32\x84\xcd\x08\x04\xcd\xd3\x90\x34\x6d\xda\xd7\x35\xdf\xb7\x15\x85\x62\x48\xe4\x23\x64\x25\xd0\xde\xbe\x3d\x63\xa2\x2f\xfd\x54\xae\xcd\xc3\x37\x76\x66\x61\x3f\xbc\xd9\xbb\x51\x87\x13\x99\x0a\x9d\x19\x5e\x79\xdf\x66\x39\x98\xbb\xd6\x1f\x9b\xc4\xc6\x5d\x95\x16\x69\x99\x31\x44\x5a\x0d\x62\x45\x26\x8d\x98\xe4\x09\x60\xf2\x32\x05\x09\xc0\x88\x94\xc7\x49\xc0\xb7\x4c\x0e\xfa\x2c\xe1\xc8\x0a\x20\xd8\x04\x31\x5e\xde\x75\x5b\x99\x52\xdb\xcf\x39\x6e\x4b\x76\x07\xdf\xf8\x3d\xcf\xd2\x22\x4b\x4e\x44\x5d\x62\x38\xba\xc7\xfd\x16\x07\x9e\x7f\x9a\xb1\x19\x32\x09\x97\xab\x42\x4a\x37\x69\x96\x26\x98\x48\x64\x7d\x37\xe6\x4d\x0a\xb1\x98\x56\x50\x80\xd9\x40\x21\xfc\x10\x85\x30\x50\x3d\xcb\x14\x83\x80\x90\x64\xc2\x50\x85\x74\x1a\x77\x73\x2f\x6f\x66\x67\x19\x56\xe2\x67\xef\xe7\x4d\x77\x27\xe4\xfb\x6d\x67\xe7\x92\x42\xbf\x3a\x7d\x6f\x46\x07\xfa\xa6\xcc\xe8\xa6\xc9\xd5\xd3\xc0\xa7\xee\xa5\xbd\xfd\xbf\x9c\xf8\x5d\xcd\x33\x24\xd7\x6b\x5c\xdd\x39\x1f\x17\xbc\x53\xe0\x7a\xf0\xc6\x29\x6b\x9a\xd0\xa8\xf4\xbe\x3d\x7b\xbe\x48\xde\x01\x0d\x63\x3b\xc0\xbc\xac\xb3\xb6\xce\xeb\x06\x2f\x49\x94\x4d\x98\x5c\x6c\x89\x71\xa0\xf9\x16\xad\x8a\x94\x2a\x59\xb4\x66\xf3\x02\x11\x53\x90\x88\x78\x27\x78\xf9\x80\x7e\x77\xf7\x7a\xa3\xab\xfb\xbe\xfd\x7a\xb6\x60\x7f\x34\x62\x44\xa7\x7b\x1b\x06\xbf\xb9\xcd\xfe\xe3\xcb\x25\xfd\xb3\xac\xfa\xf1\x97\x86\xe3\x50\x12\xb5\x41\x1c\x12\x81\x10\x81\x98\x0b\x63\x8e\xe4\x44\x5a\x22\x2d\x5d\xf5\x78\x4f\xc5\x21\x03\xbc\x20\x50\xad\x50\x76\x38\xd1\x8d\x35\x91\x16\xc9\x28\xfe\xf7\xdb\x3b\x2d\x7c\x8e\xee\x7c\xdf\x9a\x00\x3e\xde\xd7\xe3\x79\xa7\x36\x55\x66\xdf\x8c\x5b\x1f\xf9\xa4\x7e\xa7\x78\xe9\xcf\xe1\xba\x45\xdb\xde\x6a\x53\xf6\x76\x12\xeb\xae\x14\x23\x53\x01\x65\x31\xb1\x26\xd1\x9c\x2d\x8a\x40\xe0\x39\x89\x55\x81\xeb\x62\xd6\x02\x8a\x4d\xf3\xac\x66\x8b\x02\xb4\x65\x11\x5b\x22\x92\x1c\x98\xb8\x37\x28\x7b\xd8\x32\xef\xc8\x41\x97\xf2\x94\x7b\xb1\xaf\x63\xf5\xcc\x9f\x17\xfd\xed\x95\x0d\x1d\xca\x1d\x05\xcb\xbd\xdc\x59\xc0\xd6\xec\x47\x93\x97\xd8\xa3\x01\x6f\x38\x28\x74\x69\xc1\xa6\x63\x20\xd8\xa6\x28\x7a\x8a\x19\x32\x0c\xb4\x31\xcf\x88\x2a\x56\x08\xe0\x50\xb6\xad\xaa\x00\x44\x86\x45\xa8\xac\x85\x5e\xbe\x60\x0a\x0c\x0f\x4a\x5d\x3f\xd4\x5c\x9f\x5d\xb9\xf3\xdd\x85\x83\x0a\xbc\xb3\x7b\xe2\x8e\x66\x9f\x1f\xea\xb2\xad\xc0\xb6\x92\xd2\x05\x78\x37\x63\xc5\xaf\x84\xf8\x0d\x22\x8f\x34\x48\x2a\x0e\x39\x4a\x15\x3d\x21\xd2\xdd\x50\x66\x22\x09\x42\xcd\x27\x74\xd9\x30\xa1\x4a\x20\x1b\xfb\x3a\x69\xb2\x58\xd1\xb1\xa6\xba\x09\x14\x84\x35\x70\xc5\x55\xbf\x54\x3e\xb8\x2c\xe8\xdf\xac\x7b\xde\x49\xa5\x5b\xd8\xfb\xfb\x50\x59\x6e\xe4\x98\xd5\x70\x70\x38\x63\xc5\x51\xa1\x45\xf2\xde\xfc\x9e\x67\xc9\xc8\x45\x8a\xe3\x21\x1d\xd3\x72\x14\x1a\x06\xf4\x63\x99\x44\xb1\x61\x1b\xa2\xc6\xf0\x72\x60\x78\x3a\x87\x0c\xd1\xf7\x59\xda\xe2\x84\x48\x4f\x87\x80\x1d\xee\xfd\x5a\x1f\x66\x24\xd1\xb2\xf9\xc4\xdf\xcc\x26\x57\x87\x44\x8b\x30\x90\xa6\x3d\xec\x12\xe5\x5c\xb3\x6c\x5c\xcd\x63\x99\xbb\xa6\xfd\x75\x21\x25\xdb\x5b\xaf\x1f\xfc\xac\x2f\x39\xf5\x41\x05\x30\x6a\xee\x6f\x6b\xf5\xb6\x93\x27\x2c\xac\xdd\x70\x73\x35\xe7\xc4\xb7\x25\xb6\x66\x4f\xfb\x6b\xeb\x87\x41\x95\x73\x2f\x3c\x29\x67\x79\xed\x83\xc5\x7f\x95\x79\x23\xd7\xd3\x9d\x95\x6a\x95\xa9\xa0\xf6\x3a\x0c\x60\xbe\x33\x13\x66\xee\x4b\xab\x90\x32\xde\x65\xbf\x58\x56\xba\xef\xdd\x56\xd7\xb7\x0d\x21\x66\xb0\x47\x2f\x9e\xdc\x5b\xbc\xfc\xfa\xbb\x1b\x67\xde\xc8\x59\xb8\x48\xe7\x89\xc9\x83\xa6\xea\xb2\x8a\x6f\x00\x97\x07\x06\x0d\x15\x4e\xf7\x61\xa0\x23\x8b\x67\x38\x06\x21\x14\x40\x9e\x60\x54\x47\xc7\x2a\xe5\x39\xb6\x6b\x31\x1c\x43\x11\x7c\xe2\x7e\x5c\xe9\xd0\x8c\xca\xa3\xa5\x71\x27\xed\xd6\x8f\x8f\x77\xfe\xe2\xa3\xa0\x7e\xa7\x7a\xbd\x96\x95\x5d\x3d\xef\x79\xea\x3b\x83\xcf\x2f\xcc\xbb\x2b\x89\x0c\x93\xe6\x7c\x1c\xeb\x2a\x54\xb1\xe8\xb0\x9e\xec\x73\x36\x40\x0e\xab\x61\xf7\xff\x1f\xee\x89\x24\x3f\x8a\x4d\xd5\x26\x30\x23\xc9\x10\xc5\x5c\x24\x8b\x2f\x9f\xa6\xbb\xbf\x36\xed\xd9\x66\x57\x96\x82\xdc\xd0\xae\x75\xef\x4e\x29\xdc\x6d\xc5\xac\x2e\xd7\xda\x76\x32\x4e\x77\x3f\xd3\x8a\x5c\x73\xfe\xa7\x5a\xc9\xdb\x61\x4d\x32\x5c\xce\x37\x3c\x8f\x30\x2c\xe0\xf9\x91\xcb\x01\xc1\x94\x74\xc9\xa6\x0c\xa8\xca\x11\x23\x79\x12\xe4\x90\xc7\xd3\x1c\xc2\xa4\x23\x72\x84\x9d\x4e\x7d\xff\xe7\xdb\x85\xeb\xae\xa9\xf9\x46\xcb\x8b\x23\x9f\x3f\x1d\x7b\xaf\x7b\xea\x9e\x6b\x67\xf8\x3e\x46\xee\x1f\xc3\x53\x29\xdd\x8e\x67\x6a\x9f\x31\x0e\x9f\x58\xe9\xa7\x23\x8e\xd4\x14\x36\xa4\x49\x1d\xf1\x9a\x2f\x8a\x06\xcb\x5a\xa2\xca\x40\x4b\x97\x6c\x37\x76\x28\x9e\x00\x84\x44\x18\x2a\x0d\x1d\x85\x16\x4c\x47\x4e\xe7\x44\xb5\xef\x9b\x73\xda\x3b\x9b\x5b\xac\x1c\xf0\x61\xe7\xd7\x44\x73\xf1\xce\xfa\x5f\xbc\xb1\x70\x93\x3b\xf2\xea\x93\x3b\xfb\x0a\xe5\xaa\x7f\x3b\xed\x1f\x5c\x51\xa2\xc2\x9d\x07\x81\xbe\xee\xa1\x3f\x5d\xcc\x52\xa6\xfe\x9e\x05\x1b\x52\x7a\x7c\xd5\x6f\x61\x5f\xea\x60\x38\xaa\x69\x83\x0f\x92\xd8\x85\xce\x11\xbe\x6b\x99\x44\xe4\xd3\x96\x18\x79\x11\x11\x68\x2e\x4d\x08\x6c\x1c\xab\xba\xaa\x11\x8a\x4d\xf0\x88\x09\x05\xcb\x91\x35\x9f\x89\x91\xac\x0a\x4c\x3a\x8d\xf3\x3d\x96\x85\xe3\xfe\x6c\x72\x84\x7f\xff\xc8\x96\x8e\xca\xd9\x8d\xfd\x6a\x1f\xed\xf1\x4a\x89\x8d\x54\xbd\x52\x6f\x4f\x59\x8b\xf7\xaf\xcc\xd8\x1d\x92\xf0\x9b\x84\x3c\xaf\x8b\x92\xca\x02\xda\xd6\xa5\x30\xb4\x3d\x85\x26\x43\xc1\xf7\x24\x51\x22\x24\x87\x51\xb5\x98\x8e\xd4\xc0\x62\xc8\xf0\x5f\x37\x8b\x15\x9b\x4a\x1a\x5d\xe0\xdf\xd7\xde\xdb\x43\xb6\xde\xf8\xcd\x5e\x34\xfc\x22\xf9\xce\xb1\xe3\x0d\x72\x5e\x64\x77\xb4\x84\xb9\xb9\xf7\xc9\x4c\xfb\xab\xff\x9c\xaf\x46\xb7\x8c\x8d\x31\x4f\x88\x7c\x9f\x15\x5c\x45\x20\x25\x57\x54\x24\x26\xe2\x02\xde\xd5\x7c\x46\x73\xc2\x80\x13\x14\x10\xf0\x04\x6d\x69\xaa\x6d\x3b\x90\x74\xff\xff\x09\x8d\x08\x61\xf2\xe5\x83\x3a\x29\xd3\xc2\x4d\x5f\xbc\xb5\xa7\xfc\x17\x8b\xde\x29\xf4\xd3\xea\x9e\x27\x20\xb1\xe1\xb0\xdf\xb4\xc0\xea\x63\x57\x9d\xe1\x8b\xff\x7a\xdc\x27\x79\xc4\x82\xe7\x90\x44\xc9\x9c\xae\xd9\x26\xeb\x8a\xa4\x19\x45\xa4\xa8\x31\x11\xa1\x79\x86\xca\xc5\xb2\x8b\x25\x25\xa2\x75\x1c\x13\x22\x47\xc6\x96\xa4\xc5\x2c\x7e\x99\x07\x2d\x1b\xbf\xbf\xd0\x57\x15\xfa\xe7\x79\xb0\xf3\xf9\x9e\x6b\x9f\x35\x28\x75\xb9\xc1\x80\xf2\x6d\x6f\x4c\x1f\x7f\xee\xa6\xd3\xe1\x4e\x99\xa7\xc9\x4b\x75\xe3\x58\x88\xd9\x98\x87\xba\xad\xc7\x3e\x8a\x48\xdf\x14\x45\x1c\xcb\xbc\x47\xb3\x0c\x45\x41\x3d\x0c\x22\x4c\x09\xbc\x4b\xb0\x84\x0b\x51\xe8\xab\x3e\xcd\x27\x06\x44\xd9\x72\x29\x0d\x2b\xe4\xfd\x21\xef\x9a\x39\xf3\x87\xb4\x6b\xb6\xf5\xc8\x85\xf5\xe7\x7a\x69\x33\x8b\xef\x7e\x6b\xfc\xea\x2a\xdb\x9e\xee\xeb\x9e\x3c\x0c\xd3\x41\x18\x44\x06\xb0\x7c\xd1\x23\x63\x92\x22\x19\x5b\x65\x18\xa4\xe8\xbe\xa4\xe8\x8e\x46\xb0\x3c\xb6\x29\x9d\x16\xa3\x48\x13\x30\xf2\xe2\xff\x30\xff\xb4\xc4\xc2\x38\xf6\xeb\xac\x31\xad\xbe\x69\xd5\xa1\x50\xd6\x5d\x2d\x3f\x38\xbc\xa3\xeb\x96\x9d\x6d\xa7\x3e\x3a\x6c\xfc\x6a\xdd\x58\x8a\x87\xec\x4c\x5e\x6b\x02\xe6\x22\x41\x14\x50\xa8\xc8\x36\xb6\x35\x95\x95\x75\x18\xd2\xa6\x2e\x8a\x91\xc0\x84\x98\x0a\x58\xd9\xa7\x15\x36\x90\x23\x99\xe7\x75\xd6\x0f\x14\xac\x78\x2f\xe3\xf7\x9b\xdb\xa9\xf7\xc7\x55\x73\x53\x67\x7c\xbd\xae\x09\x7a\xfd\xfb\x13\x7b\xfa\xbc\x46\x5c\x69\x07\xcf\xdf\xae\x1e\xc1\x9d\x8d\x66\x2f\x4f\xa2\x08\x48\xb2\x1c\x1c\x6a\x1c\x41\x21\xce\x24\xd8\x48\x67\x25\x3e\x26\x2d\x59\xd5\x39\x93\x0e\x1d\x2b\x34\x5d\x5e\x77\x02\x97\xf4\x28\xe8\x5a\x12\xe1\xb2\x5c\x62\x62\xdc\x60\xe6\xce\x5a\x35\x57\xe5\x2b\xbe\xa7\xc6\x98\x3f\x9a\x14\xbc\x58\x6f\xde\xc9\xb5\x67\xae\xdd\xd8\x9b\x6f\xea\x0f\x97\x4b\xae\x15\x4a\x64\xcc\x1f\x33\xb1\x09\x21\x4b\xf1\x94\x20\xb3\x32\x36\x04\x93\x85\x8a\x4e\xc6\x3a\xed\xf8\xa6\xec\xfb\x41\x10\x6a\xa6\x60\x51\x20\x92\x68\xc1\x20\x2d\x56\x8e\xb1\x46\xca\xd4\xcb\x3b\xdc\xa7\xf0\xa4\x05\x56\xf1\x41\xdb\x88\xd1\x7d\x9a\xd4\x18\x7f\x6f\x6c\x63\x7e\x67\x4b\xff\x76\x8d\x2b\x6f\x6f\x3f\xdb\xfd\xeb\x4e\xf8\x93\xe4\xe1\x57\x8d\x7c\xca\x82\xba\x68\xeb\x92\xc3\xb0\x72\x88\x63\xc1\xb1\x23\x55\x52\x3c\x60\x23\x9e\x14\x02\x24\x85\xbe\x09\x21\xa5\xc6\x14\x12\x18\x81\xb3\x12\xf8\xbb\xfe\x88\xa3\xe3\x97\x3e\x27\x6a\x77\x4c\xcd\xa9\xfe\xb1\xe9\xe8\xc5\xaa\x57\xbf\xca\xf1\xe5\x9f\xbd\x0f\x5f\x5e\xb1\xfd\xaf\xdc\x4b\x37\x6c\x4c\x5e\xfc\x15\x42\x86\xd3\xb0\xc2\x1a\x91\x1a\x3a\x18\x42\x57\x72\x2d\x43\x8b\x25\x95\xe4\x64\x33\x62\x79\x2f\x34\x24\x8c\x70\x14\x13\x4c\xe4\x2b\xb1\x1b\x5b\x5e\x3a\x2d\xdd\xbd\x50\xed\xf2\x17\x77\x15\xba\x5a\x7d\x4b\xad\x59\xaf\x1e\xee\xd7\xa7\xbe\x73\xaf\x82\x51\x8a\xbc\x33\xee\xc6\xb5\x19\x03\xa9\xa0\x5b\x1a\x26\x38\xf1\x87\x31\x5c\x19\x79\xe1\x0f\xb7\xfa\x2d\x2d\xb9\x71\xc9\xf5\x66\x1b\x57\x2f\xba\xde\xd1\xc4\x05\x6a\xf5\x4c\x21\x73\x6c\x99\x20\x27\x0f\xf1\x04\xad\x43\x9b\x54\x3c\x46\x09\x23\x59\xc2\x4c\x64\xfb\x86\x1e\x52\xae\x48\x08\x86\x4d\x4b\x34\x6f\xba\x88\x86\x96\xa7\x40\x93\x04\x36\x15\x86\x2e\xfd\x72\xc4\xbe\xe8\xd6\x1b\x51\x49\xac\x5d\xc8\x99\x52\xb9\x4e\xad\x11\x3d\x17\xf4\x5f\xdd\x71\x49\x97\xdd\x0f\xca\x4e\x60\xfa\xc5\xdd\x06\x16\x48\x1e\x13\xc4\x94\x63\x92\xac\x65\xe8\x0c\xcd\x45\x31\xe0\x69\x9a\xd2\x62\xc8\x10\x8e\xc7\x7a\x20\x80\x26\x69\x7a\x3e\xcd\x73\x1c\xa5\x12\x26\x8a\x08\xca\xfc\xaf\x11\xc5\x7f\xef\xf0\x47\x1f\xfd\xb1\xe2\x95\x31\x83\x1b\x57\x09\xae\xef\x7c\x6b\x68\xf5\xaa\x65\xfa\x8e\xca\x7c\x76\xc1\xb0\x4d\xbd\x27\x1c\x46\x3b\x8b\x8d\xcb\x98\x21\x52\x42\xc4\x5b\x8c\x61\xeb\x3e\xe9\x08\x8c\x2e\x8b\x8c\xcd\x02\x31\x66\x18\xd7\x23\x62\xda\xc2\x42\x28\x1a\x84\xeb\x21\x07\x6a\x92\x1b\xe0\x90\xa7\x91\x48\xbb\xce\xcb\x88\x5f\xb1\x64\xeb\x90\xe1\x53\xbe\x07\xd9\x2e\x3a\xe5\xc4\x9f\x3b\xdc\x7c\x75\xdd\xfd\xb7\xda\x50\xe6\xaf\x29\x7f\x36\x2b\x5b\xe7\xe6\x97\xf7\x92\x87\x78\xc9\xd2\x69\x47\x8d\x58\x4d\x76\x29\xd1\x41\x11\x13\x04\xd8\x0f\x08\x87\xa3\x39\x0b\x21\x3d\xb4\x25\x93\x64\xa9\x58\x95\x50\x44\xaa\xa6\x8b\x1d\x89\x4d\xbc\xc3\xfd\x16\x4f\xc8\xbd\xad\xbb\xbd\xb5\xd1\x99\x9f\xd6\xb6\x69\x56\xef\xe2\xe2\x5a\xfe\xfb\x3f\x5e\x7a\xf8\x33\x12\x5f\x1d\x3d\x64\xeb\xf8\x31\x49\x54\x3e\x40\x91\xb7\x5c\x4c\xf3\x22\x15\x28\x26\x44\x48\xd2\x79\x92\xc3\x24\xa2\x58\x57\x0a\x81\xc6\x98\x32\x60\x5c\xac\x20\xc9\x50\x42\xde\x88\xbd\x7f\xb3\x8e\xb4\x21\x70\xee\x93\x8f\x83\x09\xeb\xf2\x97\x7d\xbf\xef\xb1\xe3\x45\xe2\x61\xbd\x8b\xee\x99\xdc\xb5\xfb\xdd\xa2\x85\xb6\x7e\x98\xab\xc9\xe1\x89\x93\x32\xa6\x7a\x48\xdc\x0b\x2c\x0a\x00\xa9\x1a\x2b\x53\x24\xd0\x62\x11\x02\x17\x44\x06\x14\x63\x1b\x0a\x4a\x2c\x23\x3b\x20\x19\x28\xd8\x90\xa4\x79\xd5\x07\x42\x14\x7a\x11\x4a\x27\xa6\x0c\xbe\x31\xe4\xce\xd8\x75\xad\xdb\x16\x6a\x34\x7e\xa4\x33\xbf\xcc\xa8\x9d\x6b\x46\xbc\x3a\xa2\xc0\x2f\xa8\x68\xa7\x31\xb9\xf3\xa5\x74\x3d\x95\xe6\x4a\xea\x72\xb4\xa9\x7c\xf8\xa4\x93\x3a\x8f\x6e\xb3\x42\x21\xaf\x1d\x52\xca\x4f\x1e\xd1\x3a\x5c\x32\xe9\xcf\x22\x05\xde\x28\x77\x20\xc8\x98\x46\x22\xb1\x65\xb3\x2b\xb3\x7e\x10\x1a\xaa\xa5\xcb\x2a\x25\x4a\x82\x89\xa1\xfd\xaf\xa7\x41\x68\x63\x93\x0e\x19\xda\xa2\x29\x92\x20\xa3\x50\x63\x48\x9b\x83\x3a\xf5\xef\x74\x75\x5a\xc4\xab\xcb\x8e\xc7\x56\x8f\x70\xce\x86\x13\xad\x8a\x7d\x52\xb8\x5f\xaa\x6c\xca\xdc\x57\xc7\xbb\x5f\xe1\x46\x8c\x3a\xb3\xe5\xf9\x8b\x8c\xf9\x2e\x24\x16\x3c\x00\xd3\x37\x02\x47\x34\xcd\xc0\xf6\x64\xe0\x46\xb4\x14\xf3\x9a\xa8\x79\x88\x25\x03\x4e\x37\x15\x55\x57\x30\x09\x7c\x8a\x64\x70\xe4\xeb\x14\xcb\x44\x2f\x2f\x77\xcc\xb9\x85\xe5\xaf\x59\x1d\x4b\x8e\x6b\xf0\xd5\xb9\x95\x83\x3a\x77\x38\xb4\xa8\xc7\xcf\x75\x1b\x5e\x94\x73\x4d\xdd\xbe\xa0\xd4\xf3\xd2\x19\xa3\x54\x09\x23\xb6\xa6\x02\x95\x10\xb1\x80\xb0\x81\xad\x48\x55\x24\xd3\x75\x58\x5f\xa3\x48\xec\x45\x8e\x4e\x62\x4e\x61\xf5\xd0\xe2\xc3\x48\x0b\x1d\x97\x34\x2d\x8f\xe4\x13\xfb\xa4\x56\xe8\x79\x7d\xc7\xdd\x85\xce\xe3\x29\x79\x9f\x17\xbd\xd2\xf8\x3d\xf9\xf6\xd5\xf3\x45\x9e\x76\xca\xb2\xe9\xc0\xca\x1d\xe7\xb2\x4c\xbe\x74\x3a\x79\x3c\x9b\x57\x04\xa0\x79\x94\xa8\xfb\x66\x44\x11\xbe\xcf\x43\x83\x01\x51\xc0\xc7\x6e\x40\x8b\x0c\xe9\xb9\x8a\x8a\xa1\xec\x38\xae\x46\x44\x1e\xe3\x4b\x26\x9d\x00\x10\xb7\x3f\x7e\xab\xfa\x4f\xc6\xee\x39\xd3\x9a\xee\xfd\x60\x71\xf0\x75\xae\x95\x37\xda\x0d\x6f\xb0\xb2\x76\x83\x82\xe7\x8a\x5e\x99\xbc\xf8\x78\xc6\x66\x02\x24\xdc\x61\x10\xb1\x3a\xe3\xe9\x18\xf0\x91\x07\xd4\xd0\x61\x6c\x4d\x43\xbe\x85\x48\x29\xe6\x3d\x4c\x83\xc8\x83\x91\xa4\xf9\x98\x94\x38\x25\x80\x02\x85\x63\x26\x9d\xec\xfa\xae\x21\x67\xbf\xbd\xf6\x65\xf7\xaa\x0d\x5f\x5c\xe0\x9b\x3d\xdd\xf6\x55\x4a\xee\xc9\x05\x2b\x38\x37\x06\x3d\x3a\xd2\xf7\xfa\xa3\xa2\x73\x3f\x49\xfb\xeb\xd6\x15\xaf\x9e\xfd\xa8\xee\xc8\xf6\x1f\xb4\x94\xc6\xbd\xa7\xcf\x28\x3b\xa8\xf2\xd4\xb7\x91\x38\xbc\xcc\xa1\xfd\xb3\x77\xbc\x18\xfb\xf1\xe3\x1f\x73\xfd\x6f\x45\xce\xd4\x94\xa2\x99\x32\x8d\x4d\x5b\xbd\xfc\x70\xcc\xf0\xf2\xef\x74\x5f\xf0\xd6\xfa\x5c\xd1\xa0\x76\x2d\x47\x77\x9e\xbc\x3c\xf3\xb5\xc9\x47\xea\xb1\x75\xaa\xee\xe5\xdf\x7d\x7b\x75\xf2\xf0\x49\xc3\x38\x24\x20\xab\xf3\x3e\x92\x78\x40\xf8\x3c\xc9\x6b\x21\x03\xe9\xd8\xb5\x42\x87\x0c\x02\xc9\x0f\x55\xcb\x72\x78\x01\x86\x61\x64\xfa\x3e\x13\xd8\xe9\x8c\x8d\xda\x31\x65\x7a\x8b\xd2\xab\x66\x3d\x99\xff\x74\x6c\xbe\x4f\x85\x47\x35\xce\xae\xfb\xb0\xce\xf0\xbc\xfa\xe9\xf7\x07\xbd\x10\x7b\x75\xae\xf9\x28\x89\x4d\xf8\x02\xab\xaa\x9e\xc2\x08\x96\x46\x85\x66\x04\xad\xd0\x17\x5d\xc6\x8d\x88\x20\xf2\x74\xd7\x30\x08\x2e\x70\x45\x53\xa3\x2c\xc4\x84\x22\x92\x42\x9a\xf6\x12\x4b\x9e\x4e\x7c\x21\x0f\x4e\x29\xf5\xd3\xb6\xdc\xe7\x2e\x1c\x7e\xef\x8d\x25\x8d\x0a\x15\xaa\x76\x79\xd0\x96\xc3\x0b\xfe\xd8\xa6\x35\x7a\x75\x5f\xbb\xaf\x93\xa8\x6c\x01\x5e\xc4\xca\xc0\x50\x34\x12\x5a\xa6\x0b\x2c\x97\x8b\x04\x3f\x94\x3c\xca\xf6\x34\x1d\xc8\xa6\x12\x92\x7e\x04\x08\x5d\x66\xa2\x28\x50\x38\xf7\xff\xc4\xd8\x34\xd7\xc2\x9a\x0a\x1d\xd7\x8c\xc7\xb5\x8b\x64\x6d\xd2\xbe\xea\x48\xf2\xf3\x2f\xf2\xf5\xbf\x79\xb7\x7f\xe9\xeb\xcb\x77\xf7\x5a\x90\xb7\xa7\xfb\xbc\x50\xf2\x8e\x55\x80\xdc\x80\x91\x42\x10\x33\xb4\xe8\xaa\x12\x15\x85\x72\x14\x98\x3c\xc2\x0c\x27\x2a\xb2\xc3\x92\x31\x1b\xb0\xb6\x4e\xca\x31\x0b\x69\x97\xc0\xff\xaf\x2d\x33\x2d\xd5\xdc\xd8\xb4\x53\x85\x1a\xf6\x1b\x8b\x27\x6f\x5e\xf9\x6c\x69\x93\xc3\x3d\xb5\x6d\xab\x0f\xcf\x28\x76\x63\x5a\xeb\x77\xb2\x35\xfb\xb5\x7a\x9f\x8c\x75\x43\x27\x1e\x56\x48\x22\xe4\xb1\x8e\xc8\x39\xbc\xa6\x28\xa6\x84\x59\xc0\xea\x6a\x88\x43\x95\x20\xe8\xc0\x96\x19\x15\x38\x2e\x1f\x86\x8a\x2a\x0a\xb1\x4b\xeb\xd8\x56\x5e\x0e\x5a\xcf\x3f\x1f\x33\xe1\xc9\x34\x4f\x2c\x93\xa3\xfb\xeb\xd9\xc2\x79\xd3\x97\x64\x3b\xd8\x71\x50\xa6\x21\xee\xa8\xa2\x37\xc5\x65\xcb\xcb\x5c\x49\x22\x09\x12\x19\x5a\x8e\xc9\x90\x67\x3d\x3f\xa2\x90\xaf\x93\x96\x00\x65\x44\x60\xc1\xb3\x31\xa9\x01\xdd\xb6\x03\x4f\xb0\x35\x41\x26\x4d\x55\x95\x75\x2b\xfe\xbb\x46\xfc\x67\xf6\xff\x4d\x0f\x91\xda\xb8\x58\xff\xb4\x61\xe5\xf7\x65\x9f\x1f\x39\xd9\xba\x78\xdb\xc6\xc3\x1a\x9c\x78\x98\x9b\x68\x5e\xbe\xe5\x17\x73\x07\x1a\x7d\x27\xfe\xf6\xf9\xfb\xab\x06\x67\xbb\x88\x93\xc8\x9a\x42\x16\xc9\x4c\xac\xb2\x81\x2a\xc7\xc8\x92\x05\x52\xf2\x05\x2f\xf2\x15\x12\xa9\x98\x97\x54\x3a\xd2\x28\xc9\xd2\x20\xa0\x7d\x4c\x30\x52\x28\x92\x6e\xe2\x7c\xe3\xc9\x52\x8f\x36\xd7\xea\x51\xef\x62\xa3\x53\xc3\x6b\x7f\x13\xfc\x7c\xf4\xaf\x6b\x9d\xe3\x5d\xe1\xd6\x61\x85\xa6\xe6\xbd\x77\x09\xac\xbd\x9b\xbc\x48\xe8\x79\x2e\x0e\x42\x48\x05\x18\x1b\x7e\xec\x52\x54\xcc\x50\x22\x34\x4d\xcd\xa2\x79\x1d\x80\x28\x22\x63\x8d\xa7\x7c\xcb\x56\x22\xd7\x09\x3d\x8b\xa3\x51\xe2\x48\xb8\xac\xd5\xca\xb7\x52\x06\x3d\x9c\xff\x17\x3d\xa1\xca\xbc\xd4\x06\x5b\x7e\xcc\x77\x6f\xea\xf2\x5a\x55\xfe\x18\xf3\x43\x56\xfe\x86\x90\xc1\xba\x6b\xc2\x33\x4a\x46\x80\x95\x6d\xdb\x8e\x68\x9f\x0c\xc9\x88\x23\x68\x9f\x24\x55\x9d\x76\x15\xd3\x60\x10\xf6\x43\x27\xd4\x5c\x4a\x91\x2c\x1b\x5b\x8e\x0b\x14\x10\xa7\xa3\xa4\x6c\xd6\xfe\x93\x76\x3b\x4a\x54\xec\xdb\x99\xbd\xde\x7b\xcb\x5f\x8f\x53\x0e\x68\xf7\x4b\x97\xaf\x47\xcc\xa8\xe0\xce\x3f\xd9\xfb\xcd\x4c\x19\x9b\x83\x9a\x10\xf8\x01\xc1\x53\x44\xcc\x79\xb6\xe0\xc8\x96\xa2\x23\x89\x63\x45\x24\x87\xa2\x61\x42\x21\x94\xb9\x88\xb4\x79\x91\xe2\x78\x4f\x72\x42\x52\x72\x09\x5b\x64\xdc\x97\x24\xff\xff\x54\x05\x4f\x4d\xc9\x95\x65\x40\xe3\xb4\x8a\xdc\xf5\x2b\x5a\xdc\x6e\xa7\xb6\x1d\xda\xf3\xc1\xe4\x6c\x0b\x1f\x31\x37\x1a\xf6\xea\x71\x65\xd9\xf8\xe3\x6b\x9e\x7e\x39\xa3\xed\xb4\x6e\x73\x2e\x26\x31\x4d\xa9\x86\x36\xc0\xa4\xc4\x0b\x98\xe1\x14\xac\x01\x00\x1d\x91\x46\x26\xf2\x55\x0c\x84\xc8\x51\x1c\xd2\xa1\x10\xcd\x2a\x64\xe0\xab\x00\x60\x26\x3d\x45\xee\xb6\x79\xeb\xe6\x2f\x39\xfd\xf9\x4f\xfc\x9b\x0d\x1b\x37\x7a\xab\xfd\xcd\xef\xb6\x9e\x62\x86\x5c\x6b\x34\x74\xfa\xac\xbd\xe4\xf3\x8b\x57\x93\x27\x6f\xc5\xac\x26\xc6\xc0\x31\x09\x25\x88\x04\x89\x70\x65\x5a\xb3\xd5\x7f\x91\xd1\x38\x0e\x43\x9b\x67\x6d\x39\x02\x1a\xc3\x89\xc0\x94\x63\x9f\x05\x1c\x34\x65\x2b\x31\x8e\x7e\x52\xe7\x14\x68\xd4\xef\x18\x7f\x1f\xae\x42\x55\x5b\x1d\x2f\x77\xb9\xc8\x1a\xd7\x38\x96\xba\x61\xf3\xf8\xfa\x6b\x27\x5f\x6d\x95\xb1\x9a\x58\x62\x92\x4a\x19\x58\x66\xe9\x08\xfb\x2a\x0c\x2d\x83\x34\x4c\x85\x16\x40\xcc\x63\xcb\x16\x68\x14\x60\x8a\xa4\x49\xc2\xb7\x44\x1f\x42\xd9\x23\x58\xd2\xb1\xd2\x21\x01\xe5\xf9\x1a\x60\x63\xfe\x55\xc7\x9b\x54\xab\x58\x64\xc7\x27\x77\x4a\xb5\xb8\x72\x6a\xd1\xe6\xea\x9b\xf6\x44\x6f\xbd\x72\x62\x56\xd6\x0e\x19\x9b\xac\x98\xd8\x1f\xd1\xe7\x24\x4a\x97\x62\x8a\x75\x7d\xc3\xd6\x45\x07\x47\x14\xa4\x58\xc9\x81\x38\x64\xfd\x40\xe5\x6d\x2a\x82\x0a\x6b\x03\xdd\xe5\x02\x29\x96\xf5\x7f\x7b\x7c\x26\xe8\x2e\xfe\x34\x7a\x76\x6d\xc2\x92\x0a\x17\x52\xdc\xb2\xf7\xc2\x81\x17\x06\xf7\x7c\xb2\xb6\xdf\x93\xf2\x97\x71\xab\x73\x15\xe6\x3c\x69\x9b\x3c\x8f\x44\x4c\x63\xc5\x0e\x04\x5a\xb5\x0c\xc9\x53\xe9\x40\xd0\x81\xc2\xf2\x8c\x1d\x81\xc0\x0f\x08\x39\xa6\x59\x4f\x54\x35\xda\x65\x74\xa0\xbb\x1a\x01\x3d\x95\xd5\x13\x87\xf1\x2e\x95\xea\x6f\x7d\x9b\xbb\x26\x5d\x15\x96\xf7\xd8\x54\x62\xfd\xd0\x0e\x53\xe1\xe6\xc9\x4d\x3a\xae\xfa\x3a\xc8\xd6\x67\xfa\xe0\x2e\x19\x1b\xdd\x9a\x78\x2a\x8d\xab\x18\x8c\xc3\x73\x1a\x25\x71\x22\xe3\xc5\x16\x89\x6d\x4e\xe7\x3c\x51\x21\x04\x99\x0d\x29\x5d\x25\x58\x9d\x07\xba\x6e\xc0\x30\x60\xb0\x82\xd5\xbf\x93\xc2\xff\x99\x7e\xfd\x4f\x65\xf1\xd4\x94\x02\xfd\x33\x75\xfa\xff\x58\x7b\xcb\x70\xaf\x8a\xaf\x7d\xfc\xd0\x20\x21\x20\x2d\x82\x80\x34\x08\xec\x24\x24\x84\x43\x49\x97\x74\xec\xae\xd9\x39\xbb\x66\x13\xc2\xa1\x11\xe9\xee\x6e\x04\xa4\x05\x69\x90\x46\x4a\x1a\x94\x46\xa4\x4b\x40\xe0\x7f\x7d\x9f\xef\xdf\x9f\x9e\xe7\x7c\xce\xe5\x73\x9d\xeb\xf3\x7e\x5e\xcc\x5e\xfb\x9e\x59\x6b\xd6\xba\xd7\xbd\x92\x77\x00\xee\x4a\xd7\x8b\x6b\xb8\x22\x63\x9d\x4c\x0b\x97\x6d\xcf\xb9\xb5\x8f\x59\x5b\xd9\xb7\x94\x15\x2a\x3c\xb9\xf3\xea\xab\x6b\x4f\x9f\x65\xbf\x13\x47\xa5\x03\x29\x14\x49\x39\x64\x80\xa3\x62\x52\x24\x59\x1e\xc3\xda\x1c\x80\x62\xc0\x09\x3a\xcd\x01\x5b\x22\x55\x13\x67\x71\x56\xe1\x08\xc8\xf0\x14\xab\x72\x7e\x6c\x1c\x8d\x7f\xd8\xe8\xfb\x7d\x97\x8a\xb6\x90\x9f\xb4\x4c\xcc\x76\x6d\xd5\xe3\x02\xc7\x6b\x7d\xfe\x16\x6b\x37\xa0\xf1\xab\xa6\xad\x2e\xbc\x3a\x3b\x39\x8e\x4d\x8b\x9c\xcb\x08\x34\xa1\x59\x9a\x14\xfa\x98\xc8\xb1\x38\xe9\x52\x50\x16\x4d\x82\xc4\x7d\xc2\x15\x31\x19\x98\xa6\x20\x53\x9a\x4a\x40\x85\xf3\x74\xc8\x50\xb1\x71\xb4\xba\x67\xab\x7c\xfc\x99\xa2\xb7\x9c\xf7\x57\x0e\xe2\xfe\x3c\x65\xfe\xf6\x74\x3c\xae\x74\xdb\x3f\xa4\xf1\xb3\xc1\x07\x7f\x7d\xfa\x53\x1c\x5b\xbe\x49\x3d\x94\x03\x53\xe3\xf4\x50\xc0\x01\xa7\xfb\x8a\x25\x91\x40\xd1\x2d\x1b\xd3\x14\x87\xe4\xc9\x88\x36\x02\xdd\x15\x03\x82\x14\x54\x13\x91\x44\xc0\xa4\x62\xe5\xec\x17\xcc\x81\x19\xe7\xb4\xfe\x79\x5b\x96\xca\x9d\x7e\x39\x91\xb1\x52\x34\x7e\x5e\xc5\x49\x33\x4b\x9d\x1a\x9a\xf8\xa8\xc9\x7b\x5b\xb3\xc7\xaf\x35\x94\xe5\x70\x99\x67\x28\x97\x8b\x34\x19\x12\x3c\x11\xb2\x88\x67\x42\xda\x91\xfd\x30\xe0\x1d\x10\x84\xaa\xe8\xf2\x34\xe6\xea\x61\xe4\x46\x18\x24\x4d\x5f\x23\x62\x5b\xb9\x7b\x8f\x7e\xcb\x3b\xf7\xf1\x73\xdc\xf8\x69\xd1\xa2\x59\x8f\x1e\x2e\x65\x32\xe4\x54\xff\xf4\x2e\x7f\xac\x34\xf3\xf4\x21\xab\x5d\x21\x7e\x56\xa6\x08\x83\x34\x79\x09\x10\xbe\x6e\x72\xbc\x14\x3a\x04\x64\xbc\x88\xf3\x29\xe4\xdb\xae\x64\xaa\xa4\x89\x73\xb4\xce\x18\xb6\xad\xf0\x5a\xa8\x93\xea\x3f\x28\xff\x7f\x69\x4a\xfc\x1b\x2d\x25\x29\xb1\x57\x42\xc2\x8e\xe4\x91\x70\xd7\x42\x9b\x88\x57\x2b\xdb\x5e\xcd\x39\x2f\x61\x62\xdb\xa6\xad\x33\x2b\x77\xb3\x46\xd8\x99\xc7\xe1\xa6\x6e\x35\xf6\x1c\x3d\xef\x3c\x8d\xa3\xfe\x9a\xea\x70\xbc\x4b\xab\x81\x87\x29\x1a\xc9\x00\x12\xa3\x58\x09\xca\x3e\x29\x13\x9a\xa2\x42\x17\x90\x34\xe0\x99\x88\xe2\x7c\x68\x07\x9a\xcd\x89\x4c\x2a\x0f\xec\x33\xdf\xe4\xdb\x77\xa7\xd0\xc6\x25\x35\x67\xbe\x90\x5b\x37\xdf\x79\x38\xca\x39\xe1\x69\xa1\x74\xd5\x3e\xbf\xd2\xf1\xf9\x9c\xb9\x8d\xef\xc6\x4f\xfd\x85\x15\x02\x55\xc7\x15\x21\xa4\x48\x57\x21\x44\x0e\x51\x0c\x69\x7a\x04\x2f\x40\x18\xf9\x11\x16\xe2\x54\xe8\x1a\x96\x43\xfb\x8e\x45\x61\x8a\xa0\x58\x21\xcf\xc4\x86\xfe\x84\x5d\xb3\x06\x75\x1d\x32\x7d\x76\xef\x26\x35\x4f\xf6\xcf\x96\x73\x08\xf6\xc5\x98\x65\x47\x46\x6f\x4f\xf7\x2a\x81\x3d\xf1\x22\xfb\xec\xf8\x49\x52\xb2\xa4\xa1\xf2\x21\xc4\x19\xa4\x3b\xa4\x2e\xe9\x18\x26\x23\x97\x45\xb8\x1a\x21\x9d\x11\xb0\x30\x0c\x08\xa4\xc9\x2c\x2f\x3a\xa1\x63\x03\x41\x91\x04\x3e\x95\xf7\x46\x3d\xb4\xa7\xf0\xa4\x99\x27\x4f\x77\x59\x36\x18\x4d\x48\x37\x76\x61\x8f\xf3\xbb\x5a\x72\x19\xca\xbe\x98\x75\x61\xc3\x8e\xd3\x6c\xc9\xb4\x89\x08\xc5\x84\x3e\x1d\xd0\x0e\xae\x72\x36\x07\x29\xc4\xb9\x7c\xa4\x59\x5e\xc4\xd3\x9a\xe7\x72\x36\x65\x0a\xa1\xad\x00\x1c\x60\xb6\x86\x63\xb4\x06\x55\xc6\xe2\x8d\xff\x26\x96\xff\xc7\xca\x7f\x45\xc2\xff\xc6\xb1\x4a\x4a\x2c\xb4\x23\x7d\xee\xe4\x91\xf0\xe3\x82\xab\x41\xd1\x96\x51\xb5\x31\xfd\x56\x4f\x6f\xd8\x73\x95\x5d\x37\xd7\x2f\x55\x5b\xdd\x2a\xf3\xae\x78\x42\xc1\x4b\x37\x82\x2f\xe3\x27\xcc\xcf\x88\x92\x27\x19\xb6\xe0\x72\x32\x87\xf1\x1e\x1f\x30\x78\xe8\x08\x2e\x69\xe0\x8e\xe2\xa8\x91\xa4\xf3\x81\xaa\x33\x2c\x61\x84\x3a\x74\x91\x49\xa9\x0e\x0a\x62\xff\x94\xb1\xd3\x3e\x7a\x3e\x79\x67\x9f\xf6\xf9\x9c\x0e\x77\x8b\xfd\x78\xbf\xfc\xc4\x7b\x99\xcb\x16\x9b\xf4\xb6\xf0\xa6\xa6\x73\x0b\xe5\xec\x87\xc7\x4f\xe0\x91\xc1\x34\x43\xd7\x0d\x42\x63\x78\x36\xf2\x22\xce\x64\x78\x8c\x67\x5c\x8b\xb7\x79\xd5\x07\x14\xa1\x22\x84\x49\xb6\x82\x02\x4d\xd4\x48\x42\xa5\x58\x64\xa7\x22\xf9\xa5\x76\x29\xd7\x72\xf3\xd2\xfa\x63\x2e\xba\xe3\xa6\x6e\x6f\x35\x2b\x7d\xdf\x31\x85\x47\xd0\xc1\x21\x94\xc5\xcf\xfe\x5d\xdf\x3f\x46\x74\x8c\x23\x19\x5a\xb5\x1c\x00\x55\xc8\x09\x7a\x64\xb3\x84\xec\x0b\x9c\xeb\xf0\x4a\xa4\xb8\x40\xb6\x0c\xa0\x02\xe0\x61\x42\x04\x70\x4b\x64\x25\x1a\x49\x9a\xa5\x0a\xb1\x2f\x18\xaf\xee\xf1\xcd\xe3\x8e\x7d\x54\xf9\x69\x93\x36\x6d\x2a\x16\x9c\x7c\xa8\xa0\x77\x6b\xc8\x39\x29\xe1\xe1\x77\xd7\x9e\xf0\x93\xfb\xfd\x9c\x36\x0e\x5e\x6c\xbe\x25\x2d\xdb\x62\xa4\xb2\x34\x0d\x6d\x35\x94\x68\x4a\x05\x02\xcb\x7a\x7e\x44\x61\x16\xe9\x7a\x20\xa0\x4c\x87\x13\xd5\x88\x44\x00\x0f\x05\x0b\x43\x6e\x2a\xca\xc2\x01\x5e\x4f\x34\x2a\xf6\x6c\xbb\xfc\xf0\xe5\x91\x89\x75\xf4\xe7\xdf\x12\xd5\x3e\x58\xba\xbc\xf6\x9d\x17\xed\x0b\xe5\x2d\xf8\x2a\x53\x10\xc7\xca\x2b\xef\xb1\x9c\x85\x02\xc6\x76\x21\x09\x80\x48\x92\xd0\xd4\x78\x9b\x36\x7d\x0e\xda\x06\x69\x32\xa1\x05\xdc\x50\xa2\x64\xdc\x94\x34\xd9\xb3\xe4\xd4\xac\x5c\xa2\xe6\xc6\xce\x61\xd2\xd5\xce\x45\x33\x6f\x28\xb9\x31\xe3\xfa\x11\x0d\x5b\x97\x5e\xda\xbe\x0c\xde\x78\x5b\x97\x3c\x87\x1b\x4e\x1f\x9d\xb6\x21\x13\xb1\x93\x8e\xc0\xf0\x3d\x5b\x0c\x5c\x03\x1a\x98\xce\xab\xb4\x0d\xad\x48\xf3\x29\xd6\x96\x1c\xcf\x25\x25\xda\x0e\x15\xcd\x45\x2a\x81\x03\x4a\x10\x30\x85\xc5\xc0\xff\xb3\xf2\x5f\xca\x9f\xff\x46\x67\x4b\x4a\xcc\x98\x35\xf7\xff\x52\xfe\x2c\xd2\x78\x62\xe7\xbd\xb7\x3e\x19\xd7\xe5\x77\x63\x57\xfb\x0b\x85\xd6\x57\x78\xfa\xc1\xe6\xe1\xb9\x6e\xab\x2f\xd1\xf9\xfb\xc3\x32\x8d\x8b\x5f\x8e\x92\x15\x42\x9a\x63\x1d\x99\x53\x15\x12\xa1\x80\xc1\x74\x51\x34\xed\xff\xbc\xb7\x2d\xc6\x11\x59\x5b\x56\x29\x2f\x24\x90\xeb\x71\x2c\x63\xba\xc0\x8a\x24\xa8\xa4\xcc\x51\x7e\x8e\xd7\xdf\x98\x6f\xe6\x99\xc7\x46\xee\xf9\x7b\xd9\x26\xbd\xb1\x7e\xf3\x8f\x24\xbc\xfe\xf8\xfc\xb0\xba\xf9\x4b\xdc\xf9\xe1\xda\xaa\xb4\xc9\xa9\xc4\x1e\xad\x6f\x05\x3c\x34\x3d\x9c\xc0\x6d\x0b\x39\x9c\x66\x46\x3a\x27\x8b\x1c\x90\x6c\x22\xb2\x28\x44\x9b\x26\x62\x04\xc3\xf7\x54\x5f\x21\x81\x17\x38\x32\x63\xc4\xc6\x50\xd3\x9a\x4f\x76\x3d\x6a\x5b\x79\x51\xef\xb5\xb7\x9e\xeb\xdc\x94\x05\xf7\xc6\x1e\x98\x53\xaf\xc0\xae\xbc\xcd\xd6\x6d\x5e\xdc\xe2\x58\x95\xda\xf1\xc3\x10\x70\xbd\xd0\x76\x30\x68\xe9\xb2\x2c\xb1\x4a\x00\x45\xd9\x53\x21\x13\xd2\x96\x0d\x04\x4f\xd1\x43\xdf\x73\xa1\xad\x90\x66\x48\x48\xb8\xe6\x71\xae\x4d\xc7\x3e\xa9\x9f\x65\xf8\x86\x38\xf9\xe3\x2f\x65\x6f\xd4\x3e\xbd\xff\xf7\xe5\xfb\x6a\x2c\x6b\xb8\xe4\x93\x03\xc7\x37\xef\xcf\x3b\xbd\x57\x3d\xcb\x5e\x16\x3f\xa1\x49\x96\x43\x12\x4d\xeb\x26\x66\x22\xd9\x33\x70\x60\x59\x1a\xe5\x49\xb8\x0e\x0c\xdf\xd0\x79\xd7\x92\x28\x11\x40\x09\x61\x0e\x8a\x5c\xc3\x27\x84\x00\x83\x7f\xd7\x97\xff\x52\xfe\xfc\x37\xfa\x47\x52\x62\xff\xc2\x09\xb9\x93\x3f\x00\xc7\xb6\xde\x37\x7f\xc3\xb8\xbc\x37\x8e\x55\xea\x67\x34\x59\x72\xaa\x72\xc3\x91\x2f\x0f\x77\xf2\x3e\xde\x35\x35\x93\x7e\xec\xfe\xf7\xbf\xbc\x8b\x5f\x7c\xe6\xba\x2e\x0e\x02\x41\x20\x31\xcc\xe5\x4c\x0d\x83\xae\xaf\x05\x2c\xe6\x8a\x06\x14\x64\x52\xf3\xf4\x80\x64\xac\x48\xb1\x3d\x57\x32\x3d\x83\xf0\x6d\x3c\x15\x75\xbe\x4f\xd8\xde\x47\x0e\x55\x3a\x2f\x3c\xec\x51\x21\xf3\xf0\x0a\xc7\xd5\xd2\xd3\x06\x8b\x47\xa7\x1d\x59\x72\x56\x18\x38\xff\x93\x7d\xe7\xa3\xf8\x85\x02\x11\x0d\x21\xa1\x39\xac\x6d\x50\x16\x45\x5b\x2e\x42\x82\x45\x68\xb8\x4d\x84\x91\xa5\x92\x2c\xc6\x29\x14\x50\x18\x2b\xa0\xfe\x73\x84\xf9\xc0\x20\xb5\x20\x65\xd1\x7f\xd6\xf1\x0a\xcb\xb3\xcc\xd8\xbf\x69\xd8\xdc\x5c\xd1\xf6\xe5\xe2\xec\x9c\xe3\x0a\x7d\x7a\x7a\xb8\xb9\x7e\xec\xaa\xfb\xe9\xbf\x1a\x92\xeb\xfb\xf8\xdd\xf6\x14\xf2\x44\x9c\x93\x4c\x36\xf0\x78\x86\x34\x35\xda\x73\x70\x37\xb2\x02\x37\xf4\x18\xc2\xa0\x24\xc8\x1a\xc0\x0f\x70\x46\x54\x2c\xca\x37\x19\x15\x29\x5a\xec\x93\x3a\xb3\x7b\x83\xa3\x7b\x1f\xbc\x4c\xdc\xbf\x6a\xc4\x8a\x35\xad\xc5\x63\xf5\xcc\x2c\xef\x6f\x39\x91\xab\x51\xcf\x79\xfd\x36\x6f\x6a\xf2\x22\x8e\xe3\x22\x35\x86\x61\x2c\x8a\x0c\x0d\xca\x92\x59\xe8\x7b\x94\x48\xb9\x32\xa0\x02\xcf\xc5\x24\x2a\x90\x04\x96\x73\x2c\x89\xe3\x30\x48\x10\x40\x76\x2d\x14\x62\xa9\xe4\x82\xa7\x4f\xdf\x89\x97\x2a\xb1\xf3\xee\xd7\xaf\x37\x9e\xa5\x72\xe1\xb3\x9a\x77\xdc\xf9\xce\xae\xbd\xe8\x46\xb3\xca\x27\xb3\x15\x9e\x3b\x20\x8e\x02\xe0\xb4\x4c\x61\x84\x89\x19\x50\x37\x0c\xcc\x55\x3c\x31\xc2\x45\x2a\x8a\x04\x91\xa2\x68\x89\xb6\x34\x9e\xf6\x30\x05\x4a\x2e\xb0\x29\xce\xd1\x48\x13\x87\x76\xec\xcb\x45\x3c\xb8\x7b\xc4\xbd\xb7\x9f\x0d\x28\xf6\x41\x63\xf0\x32\xc3\xee\x0f\x1f\x74\x39\x45\xb9\xb5\xc6\x88\x95\xaf\x9b\x35\x03\x62\xc6\xe5\xf8\x59\xd9\x22\x4c\x8e\xa3\x80\xa4\x73\x9a\xa5\x53\x84\x8b\xd9\xa4\xa7\x44\x8a\x16\x21\xc4\x91\x91\x28\x0a\x18\x69\x6b\x34\x67\x0a\x18\x07\x91\xaa\x1b\x92\x22\xa7\xc8\x2e\xfd\x1b\x0f\x24\x29\xb1\x7d\x42\xc9\x84\xe4\x97\x4b\xc1\x97\x5f\x35\x79\x5b\xdf\xbd\xdb\xb9\x68\xe1\xcf\x7a\xcd\x1b\x37\xa1\x6b\xad\x99\x4b\xcb\xe5\x2d\x44\x1d\xfe\xea\xcc\x28\x2f\xd3\xfa\xf8\xe9\x85\x33\x1a\xcb\x6a\x44\x48\x01\x46\x50\xa1\x63\x53\x21\x90\x03\x11\x85\x04\xa3\xca\x48\xc6\x31\x89\x10\xa3\x08\xd3\x64\xde\xe5\x1c\x5f\xf6\x4d\x85\x13\xfe\x31\xd6\x27\xd9\x96\xb7\x16\x6d\xeb\x77\xd9\x53\xe7\xda\x9a\x59\xa3\x66\x5e\xfc\x22\x58\xb3\xf6\xc0\x5a\xea\xe6\xdc\x13\xc7\x4e\xbe\xb8\x3e\xf2\xe9\xe1\x2b\x71\x3c\xad\x8e\x88\x7c\xc9\xe1\x90\xcb\x39\xbc\x6f\x79\x9e\x26\x85\x06\x4d\x88\x84\x6e\xd0\xbe\x4e\x3b\xa1\xae\x69\x98\xa4\x71\x98\x8c\xe1\x38\x22\x48\x44\xd8\x7c\xec\x2d\x67\x6f\xc4\xfb\xcf\x1e\x8c\xb8\xb2\xb2\xce\xf9\x09\x1d\x68\xfc\xc9\xb7\xd5\xd6\xd4\x9a\xd8\xe0\x4e\x89\x31\x3b\x5f\x56\xfc\x65\xcc\x84\x9e\xf1\xf3\xab\x88\x35\x69\x5c\x09\x18\x53\x13\xf0\x80\xb4\xfc\x48\xe5\x65\x1c\x27\x42\x32\x54\x0c\x37\x10\x79\x4e\x91\x59\x20\xf9\x46\xc8\x00\x1e\xe3\x44\xdb\x8b\x52\xd1\xbe\x4f\xdf\xfc\xa3\xeb\x17\x4b\xfc\x92\xb5\x5d\x83\x1f\x1f\x37\x39\x02\xbe\xc9\x54\xe0\xfa\x8b\xac\xf8\xf1\x05\x41\x99\xe2\x89\x77\x1f\x8f\x88\xdf\x15\xce\x62\xba\x0e\x15\x5c\x47\xd0\xf1\x6c\x9b\x08\x05\x4f\xc5\x09\x40\x01\x43\x26\x39\xde\x34\x74\x42\x62\x31\x51\xd5\x28\x37\xd2\x68\xd1\xe6\x1d\x1b\xb2\xa9\x08\x4a\x88\x43\x61\xb9\xd2\xbb\xd1\xd1\xbe\xf3\xef\xed\xdf\x76\xa3\xdd\x57\xc3\xd3\x7f\xd0\xc3\xf8\x83\xcc\x36\xb8\x8c\xf9\xc5\xaf\x39\xda\x6f\x8e\x63\xa3\x14\x0c\xfe\x13\x05\x7a\xac\x24\xe8\x48\x76\x79\x14\x00\x41\xf3\x02\xde\xb3\x34\x43\xd4\x1c\xda\x53\x54\xc9\x15\x74\x0e\x01\x07\x79\x96\xc4\x50\xda\xdf\xa5\x98\x65\x59\xfe\x6f\xa4\x90\xa4\xfa\xed\xb3\x25\x3f\xab\x35\x46\xf5\x37\x2a\x54\x5d\xda\x8b\xbe\x9b\x7d\xdf\xc2\xde\xfc\xc6\x46\xf7\xd6\xd7\x6d\x31\xe6\xcf\xc1\x17\x9f\x8d\x1a\x7c\xab\xff\xea\xb4\x0d\x39\x8b\x09\x7c\xa4\x12\xd0\x80\x2c\x2f\x29\x94\x12\x78\x5e\xa4\xd9\xb2\x67\x71\x22\x6f\xcb\x84\x05\x34\xdb\xb4\x44\x45\xb4\xac\xc0\x46\x5a\xc8\xf9\x32\x4f\xb0\x30\x15\x5d\xf6\x9b\x1b\xa9\x89\x1f\x7d\x7c\xf8\x5a\xf8\x86\x6d\xf7\x61\xb7\x93\xd6\xb1\x01\x2d\x33\xdf\xed\x58\x7d\xed\x05\x7d\xa3\xf9\xdd\xf4\x6c\xab\xe3\x07\x7c\x82\x50\x0d\x0e\x97\x91\xa8\xb3\x0e\x1d\xe8\x21\x34\x70\x0e\xc0\x00\x00\x81\x36\x44\x8a\x96\x00\xc5\x00\x43\x92\x4d\x56\x44\x32\x03\x80\x2e\x33\xa9\x48\x0a\xaa\x03\x2b\xd5\x5d\xc2\xcd\xcc\xb1\x61\x4b\xb9\xb0\xd4\x97\xe3\x8f\x2c\x5c\x3b\x14\x9d\x6a\xa1\xbd\xfc\xf2\xf3\x39\x76\xcf\x3a\x45\xe2\xd8\x31\x16\xa9\x08\xb3\x44\x8b\xa3\xa0\x67\x93\x9a\x6a\x87\xac\x85\x64\x8d\x91\x80\x0e\x00\xef\x86\x91\xc4\x7a\xa4\xc2\x44\xa1\x42\x31\x3a\x29\x78\xcc\xff\x3f\x23\x33\x25\xf0\x5b\xce\xcb\x30\xb8\x74\xc1\x23\x6b\x46\x31\x77\xb7\xec\x19\x9e\x47\x6d\x98\x57\x5b\xd3\xeb\x06\xff\x76\xfd\x8b\xf6\xcb\xa6\xfa\x1d\xe2\x37\x27\x93\xb1\x3d\xc9\xa3\xc9\x40\xb3\x54\x1a\xd9\x26\xa6\xda\x62\x20\xc9\x2a\x66\x60\xac\x1f\xc9\x34\xa3\xe1\xa6\xa7\xc8\x98\x65\x0b\x8e\x1a\x71\x36\xe3\x60\x5c\x2a\x03\x4c\x36\x57\xf8\xfa\xf3\x81\x4b\x3e\x1f\xd5\xf9\xf3\x51\xe3\x9b\xfc\x54\x2d\xcf\x75\x3c\x43\x62\xcb\x81\x43\xc0\x8c\xbb\xcd\x7a\x6c\x28\x37\x72\x55\x1c\x35\x09\x14\xcb\x0b\x28\x53\x37\x1c\xc8\xf9\x94\x86\xc9\xa2\x25\x40\x45\xc2\x0c\x86\x8f\x10\x29\x13\xac\x6d\xe9\x3a\x0c\x21\xe1\xf9\xb2\x4f\x02\xe4\x70\x7f\x0b\x22\x2f\xca\xf2\x7f\xa3\x64\x25\xd5\xcf\x51\x28\x79\x1e\xb8\x78\xb7\xb1\x39\xdf\x06\xe5\x17\x95\xa3\x91\x5e\x2c\xb1\xd2\xe4\x69\xda\xf6\xf9\xf8\xb3\x77\xdb\xf3\x94\x6d\xb3\x22\xc7\xdb\xde\x79\xe3\x28\x21\xa4\xf9\x9a\xc1\xf0\x92\x2e\xbb\x14\xe4\x19\xda\x03\xa2\x60\x46\x8c\xac\x99\x9a\xc4\xa9\xae\x19\xb0\x14\x85\xeb\xa1\xa8\xb8\x32\x69\xf3\x2c\x62\x35\x21\x36\x11\xb0\x6d\xbf\x51\xf3\xbe\xa8\xf9\x5d\x43\xbc\x76\xff\xe2\xb9\x0f\xfd\xfe\xb4\xf4\x9d\xbb\xb9\x4b\x15\x99\xd5\x67\xeb\xf4\x09\x37\xdb\xdd\x6b\x50\x37\x8e\xe2\x75\x30\x52\x81\x2e\xb0\x8a\x8f\x79\x94\x43\x68\xaa\xa5\x43\x57\x95\x5c\x15\xb0\xbe\x64\x05\x21\xed\x23\x4b\x0b\x25\x8d\xd1\x0d\x03\x60\x1c\x65\xe3\x31\x38\x35\x37\xd7\x0f\x3d\x39\x6e\x85\x99\xae\xf9\x7a\xb1\xf5\xde\x3b\xf5\xd6\xea\xfa\xb2\x72\x1f\xf4\x1b\x8e\x6d\xae\x70\x68\x63\x81\x87\x99\xe2\xf8\x56\xd5\x31\x41\x74\x10\x8b\x79\x50\x95\x08\xd7\xc5\x7c\xc2\xf5\x10\xe1\xdb\xff\x41\x8e\x24\x92\x9c\x69\x4a\x2a\x17\xda\x12\x2d\x3b\x12\x07\x4c\x0d\xfc\x57\x60\x35\xe5\xd5\x32\xb2\xce\xbc\x56\xcd\x9b\x4e\x6e\xfe\xcb\xbe\x49\x56\x9d\xc7\xcd\x3a\x74\x82\xc7\xc2\x07\xab\x67\x4c\x1f\xde\xfa\x75\x9e\xf7\x4b\xdb\x69\x1b\xaa\x19\x9b\x64\x15\x68\x81\xef\x93\x01\xc7\xb9\x04\x1d\x04\xb2\xa0\xa1\x00\xf3\x39\xcf\xe5\x34\x4a\x47\x84\xa3\x22\x8b\x22\x54\xd1\x15\x55\x06\x61\xc8\x40\x32\x9b\x4a\xe1\xbd\xcf\xe3\x82\x55\x00\x55\xb0\xd9\xb2\x65\x8d\xce\x65\xdc\x58\x6b\x7f\x8b\x3f\xcd\x62\x9b\xd2\xbf\x7b\xf9\xee\x8f\x04\x2c\xdf\xb3\x5b\x69\x0b\xda\x63\x6e\x99\xd3\x58\x80\x78\x46\xd2\x7c\x1f\x92\x0a\x02\xbe\x1a\xf8\xb8\xe6\x88\x21\x43\xd9\x91\x1e\x61\xb2\x6f\x0a\x80\x32\x4d\x8c\x65\xa0\x0a\x42\xe0\x61\x7f\x07\x5b\xbf\x35\xf8\xef\x6e\xcb\x97\xaa\xb1\x72\x10\x5b\xf1\xc4\xb3\x11\xf9\x2f\x11\xd3\x9a\xd4\xba\xf7\xac\x70\x85\xdf\x9e\x2c\xea\xb8\xd1\xd9\xfd\xe4\x95\xee\x64\x4b\x4a\x7c\xf7\xee\xc1\xff\x48\x08\xfd\x93\x70\x99\x67\xeb\xf6\x84\x8b\x13\x9b\xe7\xec\x7c\x27\xc3\x22\xe3\x71\xbe\x6e\x53\xd7\x06\x7b\x7a\x7c\x9a\x79\xe2\x85\x85\xc7\x8e\x9c\xfd\x7c\xc9\xec\xe4\xab\xaf\x9f\xdf\x32\x45\x9c\xb7\x6a\x4a\xae\x4c\x7b\xaf\x33\x67\x3a\x5c\x9e\x91\x87\x28\x5d\x93\xb9\x39\xed\xc1\x84\x05\xab\xeb\x7f\xb2\xfe\x93\x64\x67\xaa\x5b\xdf\x22\x97\xae\x64\x8b\x96\x0f\xf8\x69\xf8\x8d\x7c\xd2\xa2\xba\x8f\x7a\x9e\x5f\xd8\xab\x45\xcd\x07\xb7\x27\xb7\xee\xb0\x7a\xde\x0f\x69\x63\x87\xc4\x2e\x07\x45\x92\x8d\x8b\xb4\x2b\x6a\x34\x4b\x06\x9e\x26\xb9\x9a\xeb\x68\xb4\x22\x20\x09\xf9\x0e\xc7\xd9\xb8\x42\x8a\xc0\x13\x48\x87\xd6\x6d\xdc\xc2\x2c\x36\x48\x99\xb2\x3a\x54\x6b\xd3\x52\x61\x45\xce\x59\x63\xd6\xdf\x4d\xdf\xa4\xc8\xd8\x61\xc7\x1a\xbf\xfd\xe3\xb7\x75\x66\xbb\x59\x6d\xf7\xac\x6b\xb1\xab\x6d\x95\x38\x32\x43\x08\x9f\xb2\x08\x96\x57\x45\xcb\xb6\x19\x8a\xb4\x6d\x43\x8e\x44\x5a\x21\x18\x5c\xb6\x31\x5e\x62\x24\x44\x79\x6c\x40\x31\x1a\x11\x4a\x50\x82\x8e\xab\xc7\xbe\xb5\x1a\x74\xeb\x3c\x7c\x4b\xbd\x83\xef\x4f\xce\x3e\x7e\x77\x59\x6a\xeb\x84\xf1\x37\x95\xee\x47\x36\xf0\xe9\x2f\x9f\x2d\x3d\xa6\xfb\xe3\x9c\x6e\x1c\x15\xd1\x05\x20\xf1\x82\x80\xd1\xa1\x62\x30\xa2\x4d\xd0\xd0\xb0\x83\x40\x62\x59\x2b\x0c\x15\xd1\x8c\x78\x16\x63\x45\x57\x20\x2c\x53\x0f\xa1\x4d\x03\xd1\x21\x52\x5a\xf8\xc4\xef\x68\x5b\xef\xac\x72\x92\xf2\xc7\xb2\xcf\x3b\x6a\xfb\xca\xcf\xe9\xb3\xe4\xe9\xd0\xa2\x27\x89\xf7\xb2\xac\x69\xb3\xe7\xc1\x9a\xb4\x09\xb8\xc7\x8c\x2e\x68\x43\x21\x21\x43\x13\x84\x82\x03\x36\x52\x79\x85\x31\x68\xd9\xd0\x2d\xcf\x09\x23\x4b\xb7\x0d\x9f\xb6\x75\xd2\x53\xa0\xec\x79\x34\x17\xd2\x86\xc0\xe9\xb1\xd5\x62\xaa\xa5\xab\x3b\xec\xf2\xfe\x4c\xc3\x6a\xbf\xbf\x2a\xa1\x4c\xd6\x32\x61\xdf\xe9\x35\x0f\x77\xcf\x71\x79\xcd\x85\xbe\x35\x0e\xf6\x4a\xc8\x9a\x36\xf1\xed\xd8\xf3\xdf\x78\x0a\x0f\x50\x18\xd0\x18\x27\xab\x92\x49\x63\x94\xc7\x63\x32\x27\x45\x3a\x0a\x6d\x95\x13\x04\x9a\xa3\x7d\x45\x00\x94\x84\x1c\x1f\xb8\x1e\x89\xc5\x48\xe6\xa8\x45\x3e\xee\xb9\xbe\xff\x50\x25\xdd\x7e\xd0\xd3\x0e\xbe\x90\x3a\x5c\xad\xe9\x3f\x63\xdf\x9c\xd8\xd2\xe7\x80\x3e\xe1\x42\xa1\xb7\x71\xf4\x0b\xbc\xc7\x05\x12\x41\x59\xd0\x56\x7c\xd7\x40\x24\x13\x31\xba\x8f\x5c\x55\x05\x1e\xaf\xa9\x38\x69\xe9\x86\xe3\x7b\xa6\xa2\x8b\xa1\x6d\xf0\x24\x01\x9d\x94\x6e\xec\xc7\x29\xe6\x9f\xd5\xba\x94\xf9\xf9\xe2\x88\x29\x1f\x4e\xe3\x4a\x3c\x37\x0b\x2c\xd9\x3e\x80\x99\xf8\xc3\x21\xfb\x08\x95\xe7\xc1\xf6\x7b\xf1\x03\x04\xc1\xbb\x3e\x6f\x8b\x82\x13\xe2\x9e\x1a\x79\x36\x67\xe1\x52\xa4\x03\xca\x83\x8a\xa3\xd2\x20\x42\x11\x8e\xcb\x9c\x19\x0a\x84\xe6\x53\xb4\x2f\x20\x94\x8a\x22\xd8\x07\x5b\x9b\x4d\x7f\xf5\x60\xc7\xd0\x96\x33\xcb\xd7\xfc\x60\xe1\xb2\xe3\x4b\xe6\xd6\x3b\xb9\x7e\xd6\xbc\x77\x93\x73\x5d\x77\xbf\xe8\x5c\x75\x6a\xfc\x6e\x09\x45\xe7\x64\x51\x67\xa1\x40\xd3\x88\x17\xd8\xc8\xe6\x2c\x8d\x54\x24\x4f\x70\xcc\xd0\x71\x65\xc8\x84\x21\x81\x0b\x74\x44\x88\x11\xcb\xe3\xa4\x65\xe2\x4c\x6c\x37\xa6\x2d\x94\x66\x15\xa8\xbc\xed\xbb\x63\x19\xcc\xa4\xf4\x3d\x0a\xee\x2a\xdb\xa6\x71\x89\x9d\xad\x1a\xed\x7a\xba\xbc\x46\xb9\x60\xfa\xea\xb4\xf5\x8e\xc6\x96\x81\x40\x24\x65\x58\xae\x4f\x07\x9a\x13\x6a\x0c\x1e\x92\x91\x12\x41\x59\x20\x38\x33\x8c\x30\x5a\x23\x70\xda\xd4\xa1\x64\x78\x3c\x72\x04\x86\xe2\x71\x24\xc7\x6e\x9c\x3a\x59\xd7\xbe\xbd\xa8\xfc\xfe\x61\x0d\xce\x57\xcd\xb2\xb5\x77\xe6\xc2\x3f\x6f\xad\xd1\x61\xda\x9d\xfa\x1f\x1f\xa8\xf9\xa2\xf8\x2e\x4f\x4d\x9b\x30\x6f\x4c\x1c\x4b\xc0\xd0\xec\xc8\x74\x68\x41\x13\x59\x4e\x21\x54\x36\xb2\x88\x40\x0c\x02\x5a\x45\xa6\x2b\x73\x7c\xa0\x79\xb4\xa1\xf2\x3a\x12\x80\x47\x48\xc8\xc3\xc2\x94\x38\xbe\xd1\x65\xc7\xda\xfe\xe9\x72\x55\xda\xb3\xf5\xfc\xd8\x82\xed\x92\x32\x34\x3f\x39\xe1\x69\xc7\xb3\xdb\xca\xd5\x7c\xd4\xe8\x87\x17\x6d\xc7\x1f\x8f\x63\xab\xab\xc1\x03\xc5\xb6\x79\x40\x93\x2e\x6b\x5b\x01\x52\x35\x37\x34\x21\xe7\x22\x4d\x07\x24\xeb\x62\x30\xc2\x02\x9e\x22\x24\x48\xe1\x58\x80\xc9\x84\x92\x5a\xe3\x54\xf1\x33\x5f\x64\x39\x71\xa3\x5f\x77\xad\x55\xf5\x66\x32\x9a\x31\x18\x63\xde\xdd\xdc\x72\xa5\x7e\xc3\x81\x8d\x66\x8d\x4d\x7f\xe9\x70\x91\xe4\xab\xbf\x99\x55\xa0\x48\x81\x0c\x79\xb2\x8c\x3d\x3d\xa7\xc0\xe2\xab\x73\x93\x6e\x6d\xaf\x51\x71\x56\xeb\x01\x45\xc7\x94\x38\x5d\xf9\xf2\x9c\xad\x05\x93\xaf\xfe\xb6\x54\x8f\xbe\xe8\x55\x6b\xd8\x24\x7b\xba\x8d\xdc\x8f\xaf\x66\x59\x79\x8a\xee\x5c\x5a\x63\xe0\x90\xfd\x33\x8f\xc8\xc5\xfe\x6c\x3c\xf9\x7f\x09\xd6\xc1\x47\x2f\x4a\x3f\xca\x91\x6e\xc7\xe0\x27\xc2\xa8\x1c\xdf\xdf\x1e\x75\xfe\xea\xec\x09\x93\xbe\x18\x21\x55\xdf\x5a\x6c\xc1\xf5\x0b\xef\x25\xbb\x90\x89\xfe\xb3\x0b\x2d\xf7\x4f\xcc\xec\x38\xed\xd4\xd9\x6a\x6b\xf6\xa4\xb7\xd4\xb7\xa7\x9a\x8d\xea\x4a\x96\xed\x31\xf8\xc8\xd2\x8f\x57\xee\x8f\x1f\x98\x79\x89\x80\x92\xca\xbb\xaa\xcf\x59\x74\x24\xeb\x0a\x0a\x5d\x8d\xa3\x35\x45\x14\x6c\x0d\x00\x1b\x93\x03\x8b\x57\xd4\xc8\xf0\x49\x09\x12\x04\x15\x6a\x76\xca\x0b\xb9\x41\xab\x81\x05\x92\xde\xf5\x2c\xb5\x5b\xcd\xf4\x69\xd6\x93\xe1\x4e\x17\x6d\x2a\xf5\xa2\x68\xed\xbe\xf5\xca\x66\xff\x36\xb0\xb4\x9f\xe2\x07\x64\x37\x72\x68\xd7\x77\x15\x5d\x56\x42\x24\x3b\xba\xa5\x33\xb2\x23\xaa\x06\xb4\x7c\x68\xf8\x14\x69\x28\x14\xce\x90\x48\x04\x2e\xcf\xea\x18\xc3\x01\x18\xe3\x5d\xb1\x70\xd2\xcc\x37\x17\x2f\x6f\xcf\x1f\x8d\xdb\xe0\xb7\xf2\x56\xb4\x18\xf2\xde\x75\xcd\xb0\x0b\x4c\x24\xbc\x85\xcb\x9e\x87\xc3\xd3\x36\x59\x28\x76\x46\x54\xc7\x74\x32\xb0\x44\x0a\x17\x31\x92\x25\x79\x92\x12\x55\xce\x50\xa1\xcb\x51\x34\x1b\x31\x7e\x20\x04\x12\x85\xa9\x24\xae\x58\x9c\x22\x23\xc3\xc5\xac\xd8\xb7\xdb\x97\x7d\x5a\xcd\x5f\x8e\xf7\x98\x50\xb7\x73\xd9\x3a\xef\x37\xff\x24\xa1\xcf\xb6\xca\x56\xbf\xe5\x2f\x17\xd5\x68\x78\xf9\xd0\x8b\xd3\xb5\xa7\xc4\x0f\x10\x36\x19\x7a\x14\x60\x02\x03\xb3\x4c\x2b\x8c\x22\xd7\x66\x23\x42\xf0\x75\x8d\x10\x9c\x90\x14\x84\xd0\x73\x09\x16\x12\x8a\x6e\x23\x52\x35\x0c\x4d\x4d\x36\x24\xe0\x9f\x88\x5f\x94\xa3\xd3\xbb\x5e\x5a\xb7\x9c\xaf\x12\x7f\xba\x34\xac\x93\xdd\xb4\xcf\x30\xfd\xcf\x99\xee\x8b\x4b\x85\xb6\x94\x10\x99\x32\x87\x2e\x25\x5f\xad\xdc\x2a\xac\xe4\x5b\x7e\x71\x7a\xbf\x9b\xab\xbb\x76\xdc\xd0\xa5\xe3\xce\x87\x4f\x32\x5f\xee\x71\x74\xee\xad\x9a\x9d\x9b\x0e\x1c\xb2\x18\x24\x3b\x1f\xed\xb0\x1b\xe8\xd4\xce\x81\x43\x8f\x97\x4c\x37\x72\xfb\x86\x19\x6f\x7f\x3e\x38\xe8\x27\xf2\x78\xbb\xd1\x83\xb6\xb6\xb8\x8d\xcd\xec\x93\xb6\x3c\x60\xec\xea\x93\x42\xa9\x62\x48\x9b\x3c\xf0\x74\x52\xd2\x41\x68\x83\x30\xc0\xb8\x80\x10\x01\x60\x14\x56\x17\x6c\x03\xca\x18\xc9\x02\x11\x48\xae\x4a\xc9\x88\x17\x53\x9e\x0f\x6f\xc4\x57\x13\x37\x34\xcd\xb8\x74\xd6\xab\xb3\xa3\x2f\xb8\xbf\x9e\xaa\xd0\xf5\xa3\x5d\x17\x07\x0c\xaa\x92\xaf\x74\x8e\x17\x8d\xb4\xaf\x6f\xc5\x31\x39\x2c\x60\x84\xea\x21\xcd\xb5\x15\x88\x59\x1e\x54\x2d\x56\xc5\x20\xa9\x6b\x8a\xad\x2b\x62\xe8\x2b\x84\x4e\x78\x1a\x23\xb9\x96\x8c\x5b\x2e\x03\x5c\xdb\x4a\x79\x3e\xde\x8c\x2f\xf7\x61\x8f\xfa\xcd\xed\x7d\x1f\x12\xc3\x2f\x35\x7c\x7c\x79\x02\x3d\xe3\xfe\xea\x75\x2f\xd0\xc7\xfd\x76\x66\x1c\xfb\x67\xd7\xb4\x51\x23\x62\x8f\xb2\x82\x91\xe2\x11\xc8\xb2\x74\xd3\x96\x19\xc4\x40\x09\xb9\xae\x1e\x20\xc9\x66\x50\xe8\xe0\x1a\xaf\x22\x4e\xb3\x59\x16\xaa\x9c\xa2\xd0\xb6\x81\x73\x66\xec\x08\xb6\xec\xef\x27\xc6\x64\xd8\x77\xa2\x41\xab\x3e\x19\xd3\x15\x8e\x56\x93\x73\x17\x4f\x58\x5b\x34\xcb\xb9\x32\x5a\xb9\xd6\xdd\xae\x74\xc8\x1d\x3f\x1d\x5c\x96\xa1\xf9\x10\x67\x68\x8b\xd4\x2c\xca\x13\x58\xe8\x38\x02\x0a\x51\x68\x05\x7e\x60\xbb\x38\x21\x72\x1a\x70\xa5\x08\x03\xb8\xc7\xaa\x32\x66\xe3\x01\x86\x52\x02\xa2\xde\xc6\x5f\xf6\xdc\x99\x53\xae\x7f\xff\xe3\xfb\xdf\x9f\xd3\x79\xa9\xa4\xbd\xba\xfc\x7e\xb3\xc5\x95\x56\x9d\x3f\x7c\xb8\x5d\x8d\xb5\x9f\xa6\x8d\x43\x98\x0a\x4b\xd2\x55\xa0\x49\x10\x96\x40\x39\x7a\xe0\xc9\x04\xc2\x1d\xc0\xcb\x51\xe8\xc9\x52\x28\xf2\xc8\x85\x16\x61\x92\x96\x66\x9b\x2e\x65\x58\x98\x4d\x6a\x31\x9a\xd2\x37\xb6\x26\xbb\xef\x71\xee\x0d\x4e\x9a\xde\x69\x5e\x85\x2f\x67\xde\xed\x76\xdb\x5e\x7a\x02\x1f\x55\x8c\xba\xf4\x6a\x5a\xdb\x2b\xe3\xd3\x16\xa8\xc4\xbc\x30\x6d\x40\x20\x21\x92\x80\x6a\xb2\x24\x4f\xc0\x08\x6a\x1a\xe1\x99\x9e\xc0\x9b\x2e\xe1\x5b\x1a\x07\x8d\x00\xe7\x55\x0b\x91\x1e\xe6\x0b\xaa\xc3\xf2\x51\x6a\x7a\x87\x6b\x0b\x8c\x7d\xfd\x51\xbe\x4c\x1f\xe7\xf8\x7c\xc4\x89\x1b\x3f\x65\xbb\x5e\x7c\x71\xe1\xe1\x55\xdb\x1d\x3c\xd9\x89\xcf\xbb\xed\xdc\xa3\x33\x43\x92\xc1\x07\xcf\x7c\xaf\xf1\xb4\xfb\xc3\xb7\x5d\x42\x0f\x8a\xfd\x32\x5a\x6d\x7b\xa6\x51\xa7\xe9\xf9\x5e\x7d\xff\xfc\x97\x69\xb7\x47\xff\xfe\xaa\xc8\xec\x38\xea\xa4\xd0\xb8\x4b\xd0\xba\x86\xbb\x2a\xcd\x41\x8b\x24\x8c\x40\x06\x10\x93\x42\xc4\x46\x9e\xec\x5a\x3e\x07\x90\xca\xe0\x8c\xe0\x2a\x8e\x07\x71\x17\x53\xdc\x94\xf0\xe9\x9e\x5e\x63\x5f\x8e\x19\x79\xb5\xcf\x2f\xdd\xed\x33\xd3\xfa\x67\x4c\xaa\x94\x38\x7f\xeb\xfc\x51\xbb\x7f\xa9\x9f\xb3\x6b\xcd\xb6\x4e\x1c\xe5\x32\x1d\x44\x3a\x32\x85\x01\xe0\x71\xa1\x4c\xe9\x3e\x12\x69\xd1\xb7\x75\x4b\x22\x23\x80\x38\x46\x60\x78\x9f\xa6\x49\x0a\x33\x55\x11\x09\x81\x19\xe9\xd0\x48\xf9\x22\xbe\x50\x25\xb3\x70\x6c\xd6\xe1\x9e\x0b\xaf\x2f\x6b\xbc\x31\xdb\xb4\x51\xfb\xbe\x5b\x9b\xf5\xcd\xbe\x36\x57\x3e\x20\x3f\x6b\x9b\x38\xb1\xf5\x8b\x38\xca\xba\xd8\x2a\x8f\xe3\xc0\xe7\x6d\xcb\x95\x7c\x1a\x58\xba\x2b\xe8\x4a\x64\x12\x10\x91\xb8\xca\x22\xc9\x91\x34\xe8\x81\x50\x62\x74\xc1\xb4\x03\x16\x28\xa9\x30\x66\x2b\xbf\x3a\x59\xf0\xf5\xb1\x36\xed\x2e\x56\x3c\xf6\xfa\xe6\xbd\xba\xf5\x37\xef\xa9\x50\xe0\xcf\x12\xcb\xc5\xda\x3b\x99\x2a\x79\x1f\xb6\x88\x5f\x88\xc0\xba\x38\xe5\xb8\x66\x44\x9a\x18\x8f\x59\xa4\x20\xab\xb8\x40\xf2\x91\x10\x82\x48\xe0\x58\x1e\x4a\x8a\x23\x49\x51\x64\x39\x2c\x82\xa6\x4c\x53\xa6\xc5\x60\xb1\x95\x68\xbe\xc4\x3e\xbc\x33\x68\xf6\xe4\xd5\xf7\x2f\x16\x09\xc7\x9c\x1a\xd8\xed\x8b\x43\xe6\xef\x42\xf1\x66\x57\x06\xf6\x9c\xb4\xb2\xd6\x17\xd3\xee\xc6\x0f\xc3\xb2\xe2\xaa\xa4\x4d\x40\xcf\x23\x4c\x9f\x02\xc8\x34\x09\xe8\xeb\x2a\x2e\x2a\x72\x14\x31\xa1\x14\x19\x18\x24\x0c\x36\x14\x25\x5c\x94\x0d\x4a\x41\xb6\x93\x12\xc3\x83\xb3\xef\x28\x75\x25\x63\x89\x1c\xd5\x17\xdd\xea\x52\x35\xc3\x93\xc4\x6b\x3d\xe6\xd7\x68\x52\xa3\xe7\xde\x2d\xc6\xab\x53\x37\xe7\x56\x4c\xdb\x0c\xa1\xd8\x93\xfd\x09\xdd\xe0\x3c\x3f\xa4\x4c\xd3\x0e\x75\x57\x21\x5d\x46\xb0\x54\x29\x80\xb8\x46\x48\x2e\xc3\xb2\xa2\xe6\xb0\x04\x06\x80\x63\xd8\xbe\x21\xf2\x11\x2b\xa4\xdc\xee\x93\x6c\x0d\x66\x5d\xbd\x34\x7b\xd3\xec\xa9\xdb\x26\xf4\x1b\x5e\x77\x3a\xab\xb5\x1f\xd4\x96\xda\xbb\x39\x5b\xab\xfe\x8d\x92\xb6\xf5\x18\x14\xc7\x88\xc3\x07\x50\x96\x31\xdc\x11\x44\x35\x12\x21\x21\x4a\x38\xeb\x03\x0f\x79\x32\x87\x6b\xc8\xb2\x0d\x43\xb7\x5d\xc2\x46\x36\xe9\xa8\x81\xad\xb2\xb8\xc3\xc4\xf6\x89\xa5\x5a\xb4\x3b\x39\xec\xec\xab\x4c\x83\xca\x0e\x3d\x5e\xf1\xca\xc2\x35\x8b\x06\x9a\x7d\x94\x55\x8f\xe7\xcd\x17\x0b\xe5\xcb\x57\xea\x4c\xda\xc6\x3b\xc6\xdc\x32\xaf\x61\x9e\xe9\xd8\xbe\xa4\x2b\xac\x21\x9b\x8c\xa1\xd1\x0a\x4b\x13\x98\xa1\x86\x21\x2b\x85\x4a\x88\x31\x18\x8b\xf3\x2c\x07\x19\x53\x34\x81\xa6\x41\x2b\xa5\x85\xbb\x9d\xdf\xb3\x63\x19\x96\x73\xd0\x5b\x79\x42\xe2\x8a\xfb\xdf\x71\x19\xe6\x9e\xea\xb5\xf2\x6d\xb7\x85\xa3\x3b\x26\x0c\xce\xdb\xf7\x71\xda\x6e\x89\xd8\x2a\x83\x9e\x21\x13\x9a\x23\x18\x1c\x60\x68\x24\x9b\x1a\x67\xea\x8c\x10\x4a\x2c\xe9\xa9\x14\xe1\x20\xe4\x8a\x30\xc2\x28\xd6\x72\x7d\xc8\x4a\xa4\x87\x6b\x7a\xca\xed\xde\x1c\xff\x7e\xcb\xe1\xdf\x7d\x5c\xb0\xd9\x91\xa9\x83\xde\x08\xfd\xbe\xab\xdc\xfa\xe0\x89\x6d\xbd\xd6\xcd\x2e\x9f\x9d\xb9\x58\x6a\x12\x7f\x31\x8e\x0d\xbf\xd0\x88\x64\xa8\x51\x81\xe8\x0a\xa1\x00\x22\x0b\x90\x86\x2d\x51\x86\xcb\xb0\xaa\xc5\x49\xa2\xe4\x70\x9a\x12\x71\x21\x6b\xd8\x2e\x47\x13\x04\xc4\x53\xab\xc8\x7d\x7b\xa0\x21\x5e\xe8\xbd\x53\xa3\xf1\xcd\x0b\x8a\x1e\x78\xbf\xcf\x09\xba\xde\xfb\x8d\xef\xbc\xbe\x77\xa1\x5c\xd3\x7d\xf9\xf6\xb7\xeb\x1a\x47\x69\x7a\x8c\x86\x2e\x2e\x42\xd2\x54\x58\xca\x65\x11\x54\x11\xa5\x87\x91\x6e\xd2\x2e\x08\x0d\x5c\xb5\x1c\x4e\xb1\x03\xdd\x50\x20\x47\x49\x16\x63\x90\x48\x8a\x8d\xe1\x5e\xb3\x57\x0b\xbd\x47\x6c\x5a\xd6\xfe\xd8\x82\xef\x67\x8d\x5e\x96\x6e\x58\xdb\xa9\xeb\x32\x3e\x3b\xf6\x91\x5a\xa5\xa3\xdb\x72\xe7\xfe\x38\x4e\x1a\x23\x02\x8d\xb3\x65\x87\x90\x4c\x5e\x64\x05\xc7\x50\x4c\xe8\x87\x2c\xce\x13\x8e\x60\xd1\x0a\xc1\x09\x1a\x54\x34\x95\x52\x11\xe7\x61\x96\x86\xbb\xb6\xc2\xa5\xf4\x74\xdf\xfe\xb8\x31\x7f\x99\x0f\x4e\xcd\xfe\xf1\x70\xbf\x23\x13\xed\x92\xcf\xaf\x35\x6a\x9a\xe1\x6c\xaf\x8e\xa3\xca\x1c\x38\x3c\x73\x7f\xed\x4f\xac\xf8\xf1\x13\x0c\xca\x91\x04\xd9\x75\x15\x17\x87\x21\xd2\x90\xce\x72\x06\x74\x09\x3a\x92\x30\x4e\xe5\x59\x5a\xb7\x0d\x48\xaa\x1c\x23\x58\x48\x70\x31\x4f\x74\xff\xdb\xb0\x93\x3c\xae\x7b\x6e\x6e\xfa\xfe\x56\x91\x66\xb5\xfc\xb9\x45\x2a\xf6\xfa\x14\x9f\x34\x3d\xd7\xaf\x8f\xb6\x6d\x75\x9f\x37\xce\x7f\xac\xea\xbd\xd2\xcb\x86\xc6\xb1\x25\xca\xa7\x90\xa5\x38\x84\x2d\xca\x12\x1d\x01\x48\xbb\x96\x8a\x43\x02\x57\x1d\xcc\xa4\x1d\xd1\x71\x6d\x39\xd2\x14\x3f\xe0\x25\x2c\xe4\x6c\x33\x08\xd9\x20\x15\x95\xcc\x35\x7b\xea\x86\x6b\xf7\xcf\x2d\x5a\xa2\xff\xb4\x6a\x4e\x93\x4c\x74\xc5\x9a\x39\x6f\xdf\x1e\x98\xaf\x4e\xbd\xaf\x6e\xd6\x2a\x07\x5e\x37\x4f\x06\x9f\x31\xab\x5e\x38\xcf\x3e\x6e\x9d\x69\xe0\xf5\xf5\x6e\xcd\xa2\xbd\xa7\x4d\xe8\xb5\xfb\xe2\xb4\xf7\xaa\x99\x99\x6b\x4d\x5a\xf6\xe0\x61\x06\x3c\x7e\xf0\xb1\x68\x04\x68\x8d\xf1\x2c\x9c\xa4\x05\x4e\x10\x44\x51\xe2\x43\xc9\x96\x6d\x48\xa8\x0a\x08\x55\x5a\x96\x59\x64\x98\x84\xcd\xaa\x9a\x8c\xd3\x50\x43\x6a\x4a\xf8\xfc\xfc\x7e\xc5\x27\xf9\x87\x57\xfc\x06\x3d\xfb\x9e\xe8\x9d\x65\x34\x32\xd6\x0d\x96\xaf\x55\xdd\x67\x4f\x59\xd9\xaa\xa1\xda\xa8\xf6\x9e\x38\xf6\xe9\x18\x34\x1b\x01\x20\x6a\x34\xe7\x29\x26\xa3\x0b\x04\x34\x45\xcc\x53\x69\x07\xa8\xa2\x2c\xa9\x10\x47\x12\x29\xdb\x36\x29\x1b\x1e\xd4\x4c\x5e\x61\xf8\x94\xf0\xb9\x5b\x2f\x71\x65\xd0\x7b\x96\x5b\xa6\x78\xa7\x75\xaf\x06\xb4\xae\x86\xba\xcc\x38\xd2\xa9\xd8\xb6\xc1\x9f\xd5\x3f\x90\x58\x3b\x6f\xab\x53\xf1\x8b\xeb\x5c\x4e\x96\x5d\x53\x80\x38\x54\x64\xc1\x52\x22\x5a\x95\x0c\x97\x75\x2c\x91\xa1\xf5\x48\x65\x01\xa9\x02\x1e\x1a\x0c\x6f\x00\x05\x79\x12\x6f\x33\xc9\x3b\xa1\xfe\x06\x44\x83\x6d\x79\xd7\xe3\xab\x6b\x8d\xe0\x87\xf7\x6d\x74\x6e\xec\xfc\x1b\x6d\x9b\x89\x93\xce\xb6\x5c\xf3\x45\xeb\xdf\xa6\xef\xbb\xd9\x65\x5e\xfc\xfa\x16\x59\x89\xd2\x23\x24\x87\x82\x22\x86\x14\x45\x9b\x94\x17\x58\x86\x04\x30\x08\x1d\xd3\x16\x70\xd2\x25\x43\xc5\x61\x01\x0d\x31\x99\xc1\x4c\x0f\xe7\x79\x14\xc3\xc9\x74\x7d\x2d\x5e\x5f\xd1\xa0\xc5\xbb\x9a\x89\x85\x56\x34\x28\xd5\xb0\xed\x57\x5d\x3f\x2e\x93\xab\xf1\xb8\x43\x7a\x3e\xff\xfa\xb3\xde\xeb\x6f\xc4\xcf\xc2\xaa\x2e\xb2\x98\x6c\x72\x24\x16\x41\x8b\x15\x70\x3f\x64\x42\x64\x90\x2c\x1f\x62\xaa\x8b\x0b\x3a\x72\x75\x99\x41\x88\x72\xe9\xc8\xe7\x15\xc3\x70\xd5\x18\x32\xfe\xe3\xc7\x7d\x96\xe3\x7c\x3f\xf0\xe7\x2f\x7b\x8a\x7f\xf6\xb6\xfe\xa8\x2a\x3f\x64\xbe\x5d\x67\x4e\xc2\xf3\xf3\xe7\x9f\x14\x5a\x38\x6c\xfc\xc2\xf8\xc9\x6e\xb3\x86\xe5\xd2\x41\x88\x80\xac\xca\xac\x67\x70\x7a\x40\x89\x32\xc9\xea\x1c\x26\x69\x11\x46\x30\x0a\x69\x5a\x8c\x14\x40\x01\x11\xa2\x22\x08\x6c\xa0\xe1\xa9\xcc\xfb\xf9\x00\x2e\x1e\x54\xf5\xc9\x19\x62\xcf\xc2\x85\x53\x7f\x36\xa6\xbe\xed\xb8\xec\x5e\xa6\xac\xbb\x6b\x9d\xea\x51\xbb\xc8\xcf\x75\x5a\x1d\x6f\x13\x47\x96\x8a\x01\x7d\x04\x34\xe8\x29\x80\xb3\x45\x0e\xa7\x65\x8e\xb1\x39\x53\xf2\x5d\xca\xf1\x7d\x95\xa7\x69\x4d\xe4\x38\xa0\xe3\x26\xe0\x11\x49\x42\x47\x8b\x31\x39\xe3\x40\xf7\x12\xce\xb8\x3b\x9f\x5f\xed\xb7\xe1\x61\xa6\x9f\xaa\xdb\xd1\xbe\xd6\x93\x57\x64\x69\xf6\xc1\xaa\xb3\x3b\x0f\x97\xda\x3e\xad\x5b\x1c\xa7\xcb\x50\x06\xf4\x0c\x42\x44\x62\x20\x84\x9c\xca\x91\x2c\x45\xe8\x76\xa4\x60\x06\x47\xc8\x3c\x2f\x61\x3c\x61\x89\xc8\xc2\x7d\x92\xa6\x68\xd6\xa6\x19\xf1\x1f\x82\xb4\xc9\x8e\x5c\xd5\x12\x3f\x9a\xde\xbe\x5b\x8d\x17\x14\xab\x53\xfc\xfb\x46\xe3\xba\xb4\xbb\x38\x81\xfc\x0d\x56\x6a\x7a\x32\xf1\xdb\x5f\x6f\xb4\x9e\x9d\xb6\x4b\x2d\xe6\x91\x43\x7e\xc0\x5a\x3c\x63\x18\x92\xeb\x20\x81\x92\x6d\x4c\xa3\x59\x03\x86\xd0\x61\x64\x5a\x55\x30\x4d\x93\x44\x4d\xb7\x54\x2f\xd0\x02\x91\xe6\x11\xc3\x68\x29\x2d\x9c\xf4\xe1\x71\x71\xfe\xe6\x65\xaf\x6e\x55\xdb\xdb\x6b\x1a\xf9\xb6\xd1\x07\x27\xcb\xf3\x61\xf5\x5f\xd4\xdc\x9d\xb2\xf4\x37\x37\xef\x8a\xa3\x06\xa9\x40\x99\x9c\x00\x6c\x42\x08\x0c\x97\x8f\x22\xe4\x18\x8a\xca\x44\x81\xee\x42\x09\x0b\x74\x28\xd1\x01\xee\xf3\x90\xa5\x43\x1a\x07\x14\x2b\x32\x3e\xe3\xa4\x3c\x72\xd7\x87\x31\x53\x0a\x96\xb9\xeb\xfc\x9e\x67\xe7\xa3\xa7\x47\x3f\x6a\x94\xe5\x78\xbb\x2f\x8a\x9f\x1b\xc9\x3d\x68\xb8\xf6\xd2\xcc\x72\x74\x8f\xf8\x1d\x39\xd5\xd1\x10\x01\x68\x47\x8f\x34\xd1\x35\x19\x46\x08\x42\x02\xd1\x92\x04\x02\x55\x51\x5c\xd9\x34\x19\x39\xa2\xa9\x80\xf2\x75\x8d\x08\x09\x47\xc0\xff\x41\xe9\x49\xee\xc2\xcd\x7b\xb5\xcf\x5c\xf9\xf4\x7c\xf3\x66\xde\xfd\xaf\xbf\x86\x2b\x8e\xaf\xe0\x66\xbd\x35\x36\xc0\x7b\x95\x0e\x54\x9d\x37\xbd\x6f\x9d\xf9\x7f\x75\xe7\xfe\x1b\x6b\x23\x29\x31\xf7\x80\x8c\x09\xc9\x59\x59\x99\xcb\xe7\x7d\x18\x08\xed\x97\xb4\xfd\xfa\x46\xbf\x5b\xab\x9a\x9d\x4a\xd8\x7a\x72\x62\x96\x9e\x85\x87\x94\x5e\xd6\x5b\xab\x35\x71\x42\xda\x62\xdc\x98\x1e\x1f\x79\x42\x64\xcb\x86\x43\xe0\x9e\xca\x49\x50\x75\x0d\x4d\x13\x28\x27\x12\x34\x5b\x15\x1c\x57\x04\x26\xa3\x92\x94\x0f\x42\x5f\xc6\x24\x22\x54\x00\x4c\xa5\xad\xeb\xd1\xa0\x55\xe7\xc6\xc8\xdf\x8c\xee\x56\xaf\xe8\xf9\x84\x82\xd5\xe6\xac\x3b\xde\xbf\xd3\xca\xfb\xd3\xfb\x1d\x4c\x5f\xaa\x5b\x82\xf4\x3c\x7e\x6a\xf0\xac\x61\x93\xaa\x42\x06\x3c\xab\xf0\x96\xa5\xea\x86\x61\x09\x48\x92\x19\x83\x12\x10\x23\xca\x74\x84\x02\x1c\x30\xa2\xe8\x48\x10\x0b\x90\xa0\x09\xac\x6d\xc6\x7e\x49\xb0\x43\x8e\x0e\x59\x49\x3c\xcc\x90\xb7\x46\xb8\x64\xda\x6b\x3d\xcf\xe7\xfd\xc6\x8e\xcd\x71\xe7\x54\x0f\xf1\xcb\xdf\xab\x5c\x49\x27\xa5\x4d\xb1\x20\x76\x7a\xc4\x96\xc4\x40\xc5\x1c\x57\x02\x52\x40\xf9\x21\x0c\xec\x20\xf2\x29\xcd\xe1\x43\x49\x04\x00\x30\x96\xa0\x38\xaa\xe6\xb9\x96\x69\x48\xc8\xd7\x58\x98\x0a\xcd\x69\xc9\xd2\xbd\x63\xe8\x5c\xfb\xa5\xae\x43\x7f\xff\x71\xc7\xb6\xef\x97\x14\x2f\xba\xfb\x57\x7c\xf8\xec\xf2\x23\x5e\x2c\xff\xf4\x27\xeb\x79\x9f\xf8\x1d\x14\xc5\x57\x29\xda\xf3\x65\x4b\xe4\x81\x40\xf9\xb6\x6b\x9a\x02\xc6\x91\x98\x0d\x0d\x4f\x8e\x44\x92\x55\x1c\x52\x96\x6d\x20\x47\xac\x60\x58\x16\xa3\xfd\x63\x8e\xf4\x5f\xca\x6f\xff\x46\x41\x4a\x4a\xcc\x90\xfe\xbf\xd0\xff\xdb\x95\x95\x2c\x3a\x9c\xe9\xfb\x3d\x99\xb8\xa6\xbd\xff\xea\xa3\x65\xbf\x4c\xbf\x4f\x36\xac\xbf\xba\x58\x49\xe1\xc3\x73\x3f\x37\x38\xb8\x8f\x5e\x18\xc7\x9f\x22\x62\x46\xe8\x11\x48\x34\x43\x59\xe7\x45\xce\xf6\x1d\x4c\xf3\x44\xd1\xf2\x0d\x0a\x01\x0b\x09\x72\x18\x2a\x2a\x89\x58\xde\xc2\x28\xce\xf2\x74\x2d\x46\xb0\x70\xb4\xc1\xfc\x5d\xfc\xe6\xa3\xe7\x73\x0f\x38\x3a\xb6\x70\x8f\xdc\xe7\xc6\x06\x76\xd6\xa6\x3d\xb2\x8e\xbc\xd7\xea\x4b\x32\x73\xfe\xee\x3b\xe2\x28\xf8\x22\xd9\xaa\x1f\x52\x14\x0c\x2c\x57\xc3\x23\xdc\x16\xbd\x88\x13\xe9\x48\xf2\x49\x27\x82\xd0\x74\x25\x1f\xca\xbc\x61\x84\xb8\x68\x8a\xc0\x88\xd4\x7f\xbc\x95\x92\x59\xb8\x44\xa3\x79\x75\xeb\xd6\x18\xf6\xd3\xf9\x37\x7c\x96\x1f\x67\x1b\xeb\x3e\x6d\xda\x76\x6f\x9f\x82\x63\x07\x8d\xf9\x6a\xde\xb1\x15\x2f\x8b\xc6\x51\x8a\xc4\xa4\x09\x4d\x35\x49\x8c\x0f\x18\x55\x89\x0c\xd9\x21\x90\xa5\xb2\xae\xc5\x2b\x30\x70\x59\x17\x33\x7d\x55\x71\x85\x20\x0a\x22\xc3\x72\x81\x12\xca\xbc\x9d\xd2\xc2\xcf\x2f\x9e\xde\xfa\xfe\xe2\xd9\x59\xcb\x5c\x6d\x8b\xe7\x1f\xaa\x75\x3e\xb5\xea\x9b\xd7\x9f\xce\xa9\x1b\x91\x53\x7b\xcc\x9c\xaf\xb5\x7b\x14\x3f\x57\x46\xc8\x54\x88\x23\x12\xc7\x64\x4e\xa2\xf8\x10\x28\xbc\x2e\x59\x98\x8a\xfb\x91\x1e\x92\x06\xc6\x49\x14\x47\x8b\x84\x48\x9b\xc8\x85\xbc\x4b\x46\x62\x94\xca\x90\xcb\x0c\x15\xef\xbc\x37\xa9\x64\xc9\xbc\x17\xe6\x1a\xb9\x6f\x36\xae\x5f\xaf\x14\x5f\x63\xe8\xb3\x02\x5e\x8d\xca\x2b\xd6\x9d\x6e\x94\x3b\x88\xa3\x70\x51\xc8\xa8\x96\x8d\x73\xb6\x05\x21\xa3\xaa\x21\xef\xa9\x48\x50\x49\xdd\x0d\x7c\xce\x24\x05\x4e\xd2\x48\xdc\xf2\x48\x32\x12\x24\x80\x82\x48\x60\x7c\x48\xc6\xde\xf2\xbd\xd1\xb9\xae\x5d\xcc\x91\xa1\x45\x91\x7d\x2b\x3a\x8f\xba\x72\x7e\xda\x97\x09\x3b\x6a\x1c\x78\x9e\x05\xb7\x8f\x8d\x1c\xf9\xac\xca\xbb\x9c\xf1\xdb\x32\xa0\x0d\x53\x70\x7c\x97\xa2\x6d\x17\xa7\x38\x0a\x8f\x5c\xc9\xc0\x18\x5c\x40\x2c\x34\x98\xd0\xa3\x29\x44\x3a\x16\xa1\xb8\x81\xcf\x52\x96\x0c\x08\xf0\x77\x07\xd1\x5f\x3e\xf5\xdf\x08\x11\x49\x89\xe9\x12\xea\x65\x48\xee\x53\xe5\x8b\x1d\xf4\x0c\x93\x1f\x8d\xde\xda\xe6\xe5\xe5\x65\xbf\x9e\xba\x37\xb7\x79\xb9\xd7\xd9\x3f\x5c\xd3\xa0\xfe\xde\x1c\x0d\xfe\x3c\xb5\x95\x8f\x23\xa9\x95\x97\x80\x1c\x78\x9a\xe4\x89\x84\x84\x29\x01\x8a\x48\x1d\x5a\x2e\x20\x3d\xe4\x39\x9e\xe4\xaa\x42\xe0\xf0\xa6\xa4\x20\x96\x37\x30\x13\x52\xe8\xbf\xe3\xda\x52\xfe\x94\x2b\x1f\x37\x04\xad\xee\xd2\xbf\x17\xac\x7a\xfa\x67\xe9\xc7\xac\xb7\x6f\x88\x33\xb3\x94\x1e\x97\x7e\xef\xa3\xf2\xab\xfb\x6e\xb8\x77\x3f\x6d\xaa\x64\x31\x4f\x2a\x43\x79\xac\x4a\x73\x08\xc8\x9c\xad\x61\x50\xe1\x45\x04\x2c\x92\x54\x41\x64\x43\x55\xf6\x65\x89\x52\x74\x3e\x12\x80\xc9\x51\x9a\x88\x98\xbf\xe2\xe4\x94\x5b\xfe\x6d\x08\xfa\x94\x18\x5b\x7f\x52\x87\x49\x23\x86\x6e\x98\xd6\xa9\xe9\xaa\x9a\xe1\x89\xaf\x07\x57\x3a\x7e\xfd\x5d\xdf\xe5\xe7\x7b\x34\xdc\x16\xbf\xfb\x50\x86\x16\x8e\x87\x86\x6a\xe9\xbe\x8e\xab\x81\x6a\xe3\xb6\x46\x44\x8e\x23\xeb\xac\xe4\x38\x4e\x80\x45\xbc\xad\x0a\x74\xe8\x4a\x16\x8d\xc8\x48\xb4\x34\x39\x36\xdb\xf9\xfc\x9b\xe6\xe9\x33\x36\x6f\x3f\xf1\x66\x87\x2e\x0b\x8f\x15\xbe\x23\xcf\x90\x9f\x3d\x6f\xdc\x81\x0b\xac\x5c\x9f\x35\x7b\x99\xf3\x7a\xab\x38\x96\xcd\x14\x5c\x92\x08\x12\xb7\x29\xd1\xe4\x4d\x8c\xd6\x6d\x99\x20\x81\x4b\x69\x2c\x26\x06\xc0\xb6\x74\x53\x04\x81\xc1\x85\xbc\x25\xf3\x21\xc5\xc9\x08\xe2\x29\x28\xfe\xff\xc6\xee\x49\xaa\x9f\x67\x40\x72\x8f\x5a\xee\x5e\xfa\x26\x35\x7f\xed\xb6\x7c\xca\xbe\x7b\xe3\xda\x0d\xb8\x59\xf1\xd6\x9c\x31\xaf\xef\x9d\x18\x7b\xb0\x77\xc6\x24\x30\x3f\x11\xfb\x36\x8e\x35\x0a\x8d\x66\x11\xce\xf1\x9c\x6b\x7b\x21\xcf\x1a\x8e\x14\x22\xc1\x52\xfc\x50\xb5\x14\xc2\x01\x04\x6d\x41\x9c\x92\x71\x0a\x78\x0e\x24\xa1\x2b\x02\x36\xc6\x9c\x9e\x2d\xa5\x5b\x0d\x7e\x72\xea\xd0\x29\x7e\xdf\xb7\x8d\xce\x7e\xbc\x70\xcb\xb3\x86\x1f\x36\xce\x2a\x66\x37\xcc\x82\x4d\x9b\x3e\x3f\x5f\x33\x6d\xd9\xae\x98\x21\x8e\xc4\x45\xaa\xc4\x6b\x0c\xcd\x01\x05\x32\x80\x47\x1c\xa1\xca\x8a\x0f\x41\x14\x89\x96\x28\x62\x86\x85\xab\x40\x22\x88\x80\x85\x8c\x2b\xd3\xb6\xa2\xa6\x22\xf3\xb2\x3c\xdb\xa1\x87\x43\xfa\x97\xce\xb6\xb9\x70\xf9\xcb\x5d\x4b\xb7\x18\xd3\x75\x60\xd7\x86\x7f\xce\x15\xa7\xfc\xb2\xf2\x72\xbe\x36\x9f\x66\x06\x71\x2c\x5a\xf9\x81\x23\xd3\x90\x75\x04\x9e\x26\x59\xc2\x41\xae\x4f\xf1\x88\x17\x05\x05\x81\xd0\xf1\x48\x14\x19\x61\xc8\x12\x01\xb4\x59\x8b\x86\x90\xc2\x1d\x32\x76\xec\x3b\x79\xcc\x16\xa7\x20\x5b\x44\xeb\xd5\x26\xeb\xc9\x3f\x6e\x30\x7d\xde\xcd\x18\xbb\xe0\xeb\x2a\x6f\x46\x4c\xed\xbc\xf9\xd1\xf6\xbe\x17\x76\xc5\xef\x9c\x3a\xac\x85\x5c\xdf\xc1\x2c\x4f\xc4\x7c\xdf\x0f\x19\x52\xa7\x02\x59\x13\x11\x12\x71\x26\xe2\x04\x83\xa4\x1d\x4b\xd2\x58\xdb\x01\x64\x44\x2a\x82\x04\x53\x51\x14\xd9\x33\x65\x7f\xcf\x19\xa3\xf3\x54\xcf\x57\x51\x7e\x3a\x6c\xc9\xd8\xc4\x95\x6d\x1b\x1e\xca\x37\x9d\x1e\xf6\x76\x55\xbf\x7d\xbf\x93\xd7\x4e\xc6\x51\x4c\x27\x30\x24\xdd\x15\x79\x5f\x52\x71\x33\x70\x24\x08\x05\x4b\x65\x4d\xe0\x87\x3e\x65\x7a\x3a\x67\x04\xa2\xc8\x49\x22\xa2\x31\x01\x23\x29\x2c\xc0\x38\x22\x85\x38\xe9\xbf\xf1\xea\x92\xea\x57\x7d\x2f\xb9\x83\xca\x98\x67\x75\xaf\x4b\xb5\x0a\x96\xab\x53\xef\xdc\xd5\x13\x23\x6b\x0d\x2c\x58\x64\xf4\xe5\x1b\x83\x06\x27\x61\xd5\x5c\xbb\xcc\xee\x2c\x73\xe2\x87\xa2\x40\x61\x90\xad\x88\x84\x42\xa8\x26\x19\xca\x3c\x4e\xda\x52\xa0\x92\x6c\xe4\x28\xc0\x11\x03\x53\xa2\x10\xe3\x10\x58\x20\xb8\xaa\x8b\x5c\xd2\xf3\x31\x2f\x36\x8a\x8a\xe4\xfd\x61\x7d\x83\xaf\xba\x7e\xff\x01\x33\x02\xb8\x2f\x73\xa6\x6b\x39\x63\xd5\x18\x2a\x4b\x8d\x6b\x5d\x4e\x64\xbb\xdd\x7c\x68\xd7\xb4\x49\x7b\xc5\x1e\x59\x28\xb1\x3c\x85\x83\x80\xd3\x24\x8b\x37\x9c\x40\x88\x38\x59\x8f\x08\x5b\xe1\xb4\x28\x0a\x5c\x2d\x52\x51\x68\x2b\x82\xc1\xf9\x28\x42\x10\x69\x2c\xf2\x63\x3b\x28\x7d\xf1\x8f\x35\xcf\x1f\x0c\x6f\xcf\xde\x20\x34\xbd\xb4\xcb\xfc\xe3\xc3\xc5\x74\xee\x49\x5f\x18\x43\xdf\x84\xad\xda\x64\x4e\xe8\x90\xb6\xd9\x37\xb1\x7b\xd0\x30\xd6\x50\x91\x1e\x28\x26\x41\x8b\x5c\x20\xa9\x80\xa3\x71\x89\xd5\x3d\xd1\x57\x0c\x5d\x87\x0c\x15\xe9\xd0\x0b\x74\x33\x14\xa1\xce\x45\x0c\xab\xc9\xb1\xad\x7c\xbe\xb1\x53\xab\x47\xad\x9a\x3b\x3a\x16\x9d\x52\x7d\xcc\xc2\x51\xe9\x66\xdd\x1d\x34\xe2\xd7\x8b\xcf\xef\x5c\x3d\xd5\x6b\x6b\x41\xb3\x69\xda\x22\x97\xd8\x6a\x17\x76\xc0\xc9\x21\x32\x69\xdd\x63\x39\xd2\x57\x7c\x5a\x52\x6d\x9e\x17\x5d\x96\x46\x04\xef\x90\xaa\x81\x94\x30\xe0\x80\x40\x1a\x32\xad\xe2\x5c\x68\xeb\x29\x24\x99\xfe\x8d\x22\x9a\x94\x58\xaf\x50\xb6\xf4\xc9\x25\x99\x3e\xec\x3c\x31\xcf\xfc\xee\xc6\x94\x05\x77\x5b\x1d\xcb\xf3\x62\xd2\x55\xb6\xef\x8d\xc9\x51\x2d\x76\x36\x5f\x74\x11\xec\x54\xe5\x41\xda\x92\x07\xb1\x1f\x7d\x0e\x72\x42\x5b\xd3\x38\x47\x56\x03\xa4\x0a\x3c\x1b\x7a\x9e\x00\xa5\xc0\xfa\xcf\xa7\x45\xb6\x89\xd1\x82\x6f\xd9\x10\x40\x55\x07\x26\x0e\x1d\x2c\x95\x7c\xc7\xd1\x3d\x95\xde\xb4\xc8\xd8\xe6\x1e\x5e\x7c\x7c\x25\x84\x2b\xe3\xd5\xe1\xd7\x1b\xef\x9a\x7c\xac\xfd\x12\x6c\x6e\xdf\x83\xf6\x88\x4f\xe2\xb7\x65\xdb\x30\x04\x9f\xb0\x30\x81\x83\x38\x49\xea\xbc\x14\x61\x9c\xc4\x05\x84\x46\x51\xac\xe1\xc9\xe1\x7f\x42\x69\x53\xd6\x2d\x02\xf7\x20\x0b\x31\x95\x02\xa9\x34\xa4\x97\x5c\x55\x7d\x63\xe5\xb1\xf9\x1e\x6f\xa9\xb5\x60\x82\xea\x08\x43\x9a\x4e\x9b\xb0\xd1\xee\x99\x94\xbe\xc0\xb3\x7c\x0d\xb7\x3f\xcc\x71\x29\x8e\x7d\xc7\x91\xea\x53\xbe\x06\x9c\x88\x04\x06\x32\x29\xcb\x31\x2d\x59\xe7\x34\x11\x67\x10\x81\x0b\x21\xc1\xab\x8e\xe1\xe3\xaa\xa5\x51\x3a\x8c\x90\xaf\xda\xa9\x74\x77\x5b\xdf\x4c\x98\xba\x2f\xf3\xd5\x2b\x6f\x1e\x5a\x03\xe7\x96\xda\x74\x4d\xb9\xb1\x39\xd3\x5e\xc7\xd8\x93\x33\x63\x8e\xa1\xef\xa6\x37\x6e\x12\xbf\x2d\xdb\x8a\xe9\xd0\x36\x24\x24\x52\x36\x00\xb2\x79\xc0\x3b\xa1\x48\x78\x12\x1d\x04\x01\x45\x1a\x9e\x4f\x58\x22\xe7\x2b\xa6\x65\x73\x51\xa0\x11\x5c\xc0\x83\xd8\x5b\x2e\x52\xfd\xe2\x7b\xad\x33\xb5\x3e\xbe\xfe\xa7\x4e\x79\x76\x31\x9f\x9e\xd8\xeb\xf7\xef\x91\xf4\xe0\xc0\xda\x9f\xee\x6e\xa3\xc8\xc9\x65\xe3\xa8\x1d\xe8\x71\x8e\x8a\x53\x91\x6c\xa8\x6a\x18\x78\x90\x66\x4c\xe0\xd1\xa6\xe4\xd2\x01\x4d\xf3\x36\x29\x43\xc3\xd4\x0c\x9f\x93\x28\x45\x25\x03\x51\x90\x44\x36\x15\xcf\xea\x1d\xca\x57\xbe\xee\xfe\x8a\x0b\x7a\x4d\x38\xa2\xdc\x2d\x71\xb7\xe1\x1f\x45\x7f\x9d\xfc\xf9\xfa\xbe\xe3\xef\x4e\xaf\x97\x88\xe7\x2a\x5a\x2b\x8e\x8a\x17\x9a\xe1\x20\x82\xf7\x7c\x4a\x45\xba\xe6\xd2\x0e\xed\xc9\x32\x70\x25\xa0\xdb\x1a\x2e\x46\x8a\xc5\xf3\x21\x83\x22\x3e\x60\x54\x1b\x57\x22\xdf\x83\x7f\x07\xed\xcb\xb3\xfc\xdf\x18\xb9\x49\x0d\xd2\xef\xcf\x9a\xbc\x23\x3d\xdb\xfa\xe6\xa3\x98\x79\xdb\x7a\x56\x2c\x96\xb3\x03\xd6\x22\xfb\x96\x8a\x3f\x95\x4b\x7f\xff\x6d\x41\xb3\x71\x93\xd6\xb9\x3a\xf4\x4f\x77\x22\x7e\x1f\x68\x9a\xae\x6f\x71\x86\xe8\x89\x32\x05\x01\x92\x05\x4a\xf0\x38\x3f\xe2\x00\x12\x74\x68\x68\xc0\x40\xba\x22\xc8\xaa\x62\xd9\x8c\xc2\x44\x0c\x45\xf2\x46\xec\x7f\x72\x6e\x66\x70\x9e\x84\xbf\x0f\xa8\xa6\x95\x2d\x7a\xe6\xc0\xe0\xd5\x87\x32\xfc\xbc\xad\xd6\x87\x8b\x96\x94\x28\x2b\xac\xfc\x4e\x59\x96\x2e\x7e\xd1\x8e\xc2\xb1\x90\x16\x42\x83\x96\x65\x93\xd5\x45\x96\x76\xb0\x80\xb7\x6c\x44\x8a\xae\xa9\x1a\x94\x0e\x65\xdb\xe1\x08\xc2\xb4\x30\x46\xa7\x01\x15\xf8\x10\xc5\xf6\x53\xcb\xbc\xb1\x49\xe7\x17\x94\x9f\x5a\xa3\xde\x6c\x0e\x74\xbf\x79\xeb\xa2\x58\xe0\xb3\xeb\x53\xa7\xee\x4c\x9c\xb9\xe7\xeb\x39\x43\xf5\x42\xf1\x43\xbe\x8a\xcc\x50\x43\x9c\x4d\x09\xaa\xed\x5a\x3a\x44\x24\x49\x73\x8e\x16\x78\x02\x09\x58\x43\x50\x34\x56\x30\x0c\x42\xf4\x42\x85\xe3\x23\x9a\xc3\x91\xa3\xc5\xb6\x72\xb5\x13\x9f\x2f\xaa\x39\xa4\xe5\xbb\x2b\xf7\xe7\x9d\x2c\x26\x7e\xd7\x67\xe3\xdc\x1c\x55\xf5\x37\xb3\x5a\x7d\x72\xa8\xe2\xd7\xdc\xd4\xa6\x66\xfc\xa2\x01\x45\x27\x75\x86\x16\x01\x6f\xdb\x9e\x41\xf8\x01\x29\xb9\x88\xd4\x64\x47\xb0\x4d\x2a\xb0\x39\x06\xb7\x34\xdf\x20\x1c\x36\xa0\x01\x63\x58\x3a\x94\xd4\x54\x94\x84\x61\xb7\xd1\x67\xff\x2c\x9a\xed\x49\x87\x27\x8f\x5f\x5f\x0b\x37\x2e\xef\xfe\x47\xa7\x0f\x89\x32\x67\xb5\x9e\xb5\x37\xdc\xda\xb1\xad\xc9\x82\xf8\x61\x19\xf3\x24\x8e\xa6\x38\xcb\x74\x2d\x9e\x40\x06\x60\x79\xdc\x51\x24\x97\xa5\x03\xc4\x5b\x3a\xe4\x23\x2f\x20\x03\xc6\xd4\x5d\xda\xa4\x42\x5b\x67\x2d\xec\x6f\x89\xe9\x25\x59\xfe\x6f\x84\xf8\xa4\xc4\xac\xf5\xd2\xff\x2f\x95\xfe\xd7\x3d\xc8\xf6\x33\x4a\xd1\xab\x87\xf6\x3a\xc9\x5c\x39\xff\xf3\x7b\xad\x83\xf2\x8d\x3e\x05\x33\x72\xfc\xfc\xb6\xfd\xc0\x73\x67\xca\x4e\x8c\x5f\xa6\x86\x8c\x70\x2e\xd4\x40\xc0\x10\xb6\x64\xd1\x8a\x2f\xb1\x0e\x03\x19\x56\xd1\x18\x4f\x0c\x01\x4f\x49\xa1\x20\xdb\x9a\x66\x22\x53\x90\x3d\x42\x95\x6c\xc6\x8b\xed\x5a\x6f\xdd\x7d\x3d\x34\x57\xd9\x51\x1f\x35\x28\xb2\xaa\x73\xfe\x2e\x75\x6f\xe6\x5d\xf5\x71\xe9\xca\xcf\xbf\x5e\x53\x65\x4c\x97\x55\xef\xa6\x8f\x48\xdb\x70\xfd\x98\xd0\xb7\x24\x91\x95\x08\xd9\x16\x1d\x4e\x87\x96\xee\x44\xac\x1a\x92\xbc\xcc\xe8\x1e\x16\xb9\x8e\x1f\x4a\xb6\x13\x84\x38\x66\x0a\x20\x22\x68\x25\x52\x31\x35\x15\x59\xde\x69\x1b\xc7\x4c\x58\xf0\x72\xee\xb1\xd6\xb9\xf3\xec\x3c\x5c\xa1\xd7\x68\x7f\xd7\xa6\x46\x4d\xbd\x1c\xdf\xae\x6b\xf5\x74\xb0\xbb\x7f\x58\x85\x38\xd6\x8c\x71\xc7\x05\x9a\x63\x68\x72\x28\xe0\x18\x83\xb1\x41\x84\x08\x5c\x93\x15\xc0\x53\xba\xaf\xab\xb8\x15\xb2\x1e\xc5\x1a\x98\x47\x03\x19\x33\xd9\x48\xc5\x62\xb7\x9a\x7d\xa3\x96\x5d\x36\xfb\x78\xdf\x09\x15\x7a\x8f\xef\xf2\x4e\x18\x5f\xbe\x5d\x8b\x92\x95\xb6\x9d\x34\xba\x95\x9d\xb8\xb0\xce\x6d\xbf\x51\xdb\x38\x66\x32\x2c\x93\x96\x09\x40\xd8\x2e\x22\xfd\xc0\xa6\x84\xc0\x0e\x03\x42\xf2\x08\x49\x8d\x68\x93\x44\x9e\xa6\xdb\xa6\x88\x2c\x18\xf1\x22\xa9\x62\xbc\xc3\x49\x29\x33\x19\xbf\x2c\x33\xcf\x3a\x8d\x5b\x6e\xa0\xa7\x2c\xae\xf2\xe8\xa3\x59\x9f\xbe\xbc\x35\xb6\x70\x2f\x23\x73\xe2\xcf\x0b\x27\x96\x4b\x1c\xf2\xe0\xcf\xf8\x85\x88\xac\x87\x28\x92\xf2\x1c\xc4\x93\x02\x12\x24\x4f\x70\x78\xce\x37\x70\x2b\x22\x7c\xdb\x75\x22\x47\x60\xa1\xef\xf8\x22\x8b\x99\xb4\x6e\x51\x20\xf0\xff\x5b\x12\xfb\x1f\x1c\xff\x91\xe9\xff\x46\x35\x4f\x6a\x90\xbb\x7f\xde\xe4\x07\xf5\xf1\x9d\xd2\x75\x4a\x67\xef\x51\xa6\xb3\x5d\xa9\xe9\x9c\xf7\x3e\x6f\x89\xbf\x53\x3a\xfd\x34\xfd\xcb\xdb\x76\x62\xc9\xf9\xdb\xb6\x97\x4d\xdb\xf3\x2f\x15\xad\x58\x8e\x40\x8c\x4b\x63\xb2\xa1\x11\xa1\xa1\x92\x8e\x43\xab\x1c\xe9\xb8\xb6\x01\x59\x16\x01\x57\xb4\x7c\x9b\xb7\x88\x40\x0e\xd8\x90\x8b\x1c\x4d\xd3\x63\xa3\x7e\xeb\xe9\x57\x55\x2a\x0d\x79\x7f\xeb\x93\x63\x6d\x9a\xed\xaa\x37\x86\x19\x5f\xa7\xcc\x9a\x53\x43\x1b\xea\xa7\xf3\x2d\x79\x51\xfe\xbb\x05\xf1\x53\x52\x65\x49\x42\x14\x79\x8a\x73\x39\xc3\xe5\x24\x87\xc5\x79\x17\xb7\x24\x23\x88\x02\x5c\xe5\x39\x81\x72\x38\xdd\x82\xba\xa9\xf0\x1a\x4e\x00\x0b\x69\x3c\x04\xa9\x6c\xb9\xf6\xf4\x2b\xf9\x13\x3f\xdf\xf2\xc4\x19\xf9\xf5\xc2\xb1\x0d\x4b\xff\x5c\x7d\xc2\x9e\x45\x43\x06\x24\x98\x1b\x4f\xac\x1e\x5f\xae\xfc\xc1\xb4\x0d\x65\x89\x09\x23\x89\xa4\x59\xdc\x71\x18\x88\x6b\x94\x06\x64\x92\x84\x4a\xc4\x7a\x8a\x88\x29\x74\x40\x09\xbc\xc1\xd9\xa6\x43\x99\x12\x12\x71\x10\xf9\xb2\xe8\x99\x4c\x2a\x2f\x0d\xd8\x75\x43\xf9\xfc\x72\xb3\x1f\x2a\x4b\xe3\x57\xee\xae\x1a\x1d\x9a\xd4\xb3\xe3\x88\x39\x13\xc3\x75\x8d\x17\x16\xb5\xce\x15\xa8\x5b\x33\x7e\x5b\x8e\x2c\x46\xc3\x18\x88\x59\x2c\xa0\x49\x8d\x57\x5c\xc2\xc6\x2d\xdf\x25\x4d\x1c\xf7\x58\x5f\xf7\x18\x57\x43\x14\xe7\x41\x24\x31\x98\x4c\xf9\x22\xb0\xff\x56\xc0\xfc\xcb\x47\xfd\x1b\x19\x2f\x29\x31\x73\xff\x84\xdc\xc9\xa1\x5f\xa0\xda\xe6\x3e\x8d\x1a\x15\xbb\x64\x9e\x3a\x20\xde\x3f\x54\xf5\xe5\x6f\x8d\x1e\xb6\x5d\xb3\xff\x44\xa7\x17\x57\x97\xec\xac\xd8\x32\xfa\x2e\x7e\x3e\x4a\x84\x91\xe1\x2b\x92\x8f\xe9\x3c\xa3\x02\x17\x90\xba\x06\x19\x9a\x11\x01\x6d\xba\x58\x68\x05\x21\xc7\x42\x18\x30\x21\x2b\xdb\x36\x6e\xd3\x14\x06\x53\x49\xcd\xcf\x1c\x7a\xa0\xfe\x68\x30\x58\x59\xd9\xe3\xdb\x13\x2d\xcb\x17\xfd\xa8\x4f\x9e\x6f\xab\xe1\xa5\x73\x57\xbd\x7b\xf4\xe0\x99\x23\xab\xbe\x4f\xdb\xf0\x9b\x98\xd0\x0f\x24\xa0\x90\xa4\x08\xa5\x88\x25\x55\x2d\x22\x14\x03\xa3\x48\xd1\xa3\x64\xcf\x08\x75\xc5\xd6\x59\x09\x88\xa4\x2a\xc9\xa2\x44\x6b\x2e\x45\x1b\x26\x86\xc7\x2e\x55\xee\x2e\xc7\x9f\xc8\x5e\xf0\xeb\x12\xb5\x32\xbe\x52\x5a\x33\xe9\xe6\xfd\x7a\xf9\x46\x9f\x79\xe3\xfa\x3e\x3e\x5d\x34\x3b\xfb\xc5\x0d\x7e\x45\xfc\x70\x04\x31\x5a\x52\xfe\x73\x7f\x46\x18\x1e\x44\x40\x92\x15\xc1\x03\xac\xc8\xe2\x5e\xe8\x33\x81\x13\x40\xca\x07\x21\x8a\x28\x83\x04\x91\x21\x29\x9c\xc0\xc5\x90\xa5\x78\xb4\x73\xd0\x84\x12\x5f\x3c\x1e\x51\x76\x08\x83\xed\x99\xd1\xaf\x75\x97\x1e\xf5\x67\x5d\xda\x9d\x6b\xb1\x75\xaf\x46\xdb\xeb\xc5\x12\x0e\xc5\xd1\x3f\xd9\xbc\x63\x41\x48\x43\x89\x0d\x82\xc8\xa4\xa4\x08\x19\x4a\x24\xf0\x9a\xaf\x12\x34\xc7\xf0\xb6\x1d\x51\x92\x47\xc9\x36\x61\x69\xaa\xa2\xf2\xf0\x1f\x62\x41\xc9\xc7\xc2\x64\xaf\x57\x69\xd3\x77\xe2\xbd\xca\x63\x26\xbd\xba\x62\x1f\x98\x52\xb8\xe2\x8b\x4b\x83\xeb\xd7\xdf\x92\xab\xa7\x3d\xe0\x5c\x3e\x25\x7e\x31\x3b\xab\xe2\x9c\xac\xf2\x9c\x04\x05\xc5\x80\x20\x10\x35\x97\x56\x22\x51\x0b\x4c\x09\x0b\x1c\xd2\x63\x34\x87\xa0\x28\xdf\xd4\x2d\x47\x72\x39\x04\xb0\xe8\x1f\xd9\xf6\xbf\xd4\x78\xff\x8d\x73\x93\x94\xd8\x3a\x21\x21\xe3\xc0\x64\x5f\xd8\xa1\xd4\xf6\x46\xd3\xab\x14\xce\x34\xf6\x14\x73\xa6\xe3\xb3\x3c\x3f\x56\x98\x65\x16\xfc\xec\x97\x4a\x3b\xb7\x0d\x2f\xfc\xa8\xf8\x55\x27\x6d\x64\xc9\xd8\x74\x54\xcf\xc3\x3c\x91\xc5\x02\x42\x20\x7c\x81\xa7\x0d\x43\x30\x55\x06\x61\x86\x4a\x8b\x3c\x27\x79\x8e\xa9\xe2\xb2\x4a\x19\x3e\x90\x22\xd6\xb5\x0d\x0b\x4f\xa5\x9e\x70\x7a\xf0\x0f\x75\xc7\x4d\x9a\x37\xfa\xd4\x4f\xfd\xc7\x8f\x5f\xf3\xfb\xd9\x46\x8d\x88\x83\x25\x1f\xff\xc6\x73\xf9\x35\x44\xcc\xbf\x1a\x47\x05\x4a\x20\x48\x06\xeb\x13\x0c\x0d\x1d\x48\xf2\x94\xcb\x11\xc0\x51\xcd\x90\x36\x41\xc8\xc9\x9a\xac\xda\xbc\x49\x71\x02\x74\x65\x4b\x52\x0c\xd1\xb1\xfe\xd9\x69\x99\x9c\xb6\x51\xe0\xf7\x1d\x8b\x46\xad\xcf\x70\x30\x31\x73\xc6\x4f\x95\x76\xa5\xba\x9c\x3d\xb2\xee\xbb\x6e\xd7\x07\x66\xa8\x90\xee\xfa\x5c\x78\x3f\x6d\x33\x8e\x63\x6b\x67\xb3\x8a\x60\x3b\x1a\xe3\x07\x91\xc5\x5b\x40\x16\x74\x1b\xf2\xa2\x6b\x28\x88\xe7\x34\x97\x55\x35\x42\x34\x15\x97\x05\x3e\x8e\x45\x04\x21\x90\x46\x14\xa3\x17\xb0\xf3\x33\xac\x30\xac\x36\xec\xfd\xef\xd6\x36\xca\x74\x98\x6b\xfb\x30\x03\x6a\x79\xb6\xe9\x0e\x7a\xf1\xa3\x66\xea\xfa\x66\x6d\xaa\x7e\x11\xc7\xc4\xb5\x12\x39\x16\xb0\x68\x0c\xc8\x8a\x2e\xf0\x14\xeb\x3a\x82\xa5\x73\x3e\xc6\x40\xe8\xea\xbc\x1e\x02\x13\xf7\xe8\x40\x67\x11\x67\xd8\x0c\x05\x4d\xf0\xb7\x83\xda\x56\xf9\xbf\xbb\x9d\x30\x20\x7a\x9a\xc8\x3d\x3a\x1d\x14\x68\x5c\xb5\x47\x93\xeb\xd3\x9b\x37\xbb\xd2\xaf\xf2\xa2\xc4\x8d\xb3\x3a\x76\xaf\xfe\xb2\x64\x65\x23\x29\xf1\xdd\xbb\xb7\x5f\x4d\x29\x96\x9c\xa0\xd6\xf8\x62\xf5\x85\xa3\xb7\x56\x20\xeb\x94\xa8\x51\x9a\xf9\x64\x56\x9d\xf6\x79\xeb\x64\xcb\x76\x7f\xa6\x71\x7a\xff\xf5\xe2\x33\xce\xad\x1e\x90\x7c\xf5\x9e\x1a\xe7\xaa\x7f\x5b\x7e\xdc\xb4\x3d\xbd\xbf\x6d\xd7\x25\xdf\xef\xc5\xc7\x74\xc2\x3f\xe5\x4a\x84\x2f\xb5\xa5\xd8\x8e\x68\xc4\x94\xca\xc9\x57\x3f\x29\x52\xb9\xcf\x83\xac\xbf\x3c\xb9\x5e\xe9\xe9\xfa\xea\xc5\x2b\x4b\x1d\x7e\xfc\xe2\xb0\xb3\x64\x8d\x7e\x08\x7b\x3a\x04\x6f\x32\xf2\x74\xf2\xd5\x5e\x85\xfe\x05\x32\x8f\xcb\xf5\xf2\xcc\x82\xb1\x4f\xaf\x7d\xb5\xe9\xb3\x85\xeb\x86\x4e\xcd\xfd\xc8\xce\x99\xae\xd6\xe2\x84\x43\x23\xb3\x6d\x4c\xbe\xfa\x45\xad\xf5\x73\xba\xac\x17\x27\xb4\xb9\x34\x60\xd9\x82\x61\x83\xe8\x1d\x75\x06\x6e\xd9\xd3\xe6\xca\xc5\xe3\x15\x9f\x5a\x0b\x5b\x8e\xed\x99\x8c\x97\x59\x25\x07\x62\xe6\x7e\x5f\x20\x97\x8e\x75\x5d\x72\xf4\xc4\xf1\xef\xa6\x7d\xa6\x57\xaf\xbd\x45\xcc\x5c\x24\xd7\x95\x01\x1b\x05\x3a\x8e\xc5\x4d\x08\x4c\x51\x61\x7d\x5e\x91\x4d\x57\x77\x49\x43\x46\xaa\x1f\x40\x4c\x34\x03\xdf\x45\x12\x6e\x40\xd6\xd0\x55\x07\xfa\x0e\xe6\x62\xbe\xa7\x52\x0a\xc6\xa6\x7c\x12\x7c\x13\xd6\x5f\xb2\xec\xd6\xe9\xae\xf7\x57\x6e\xb8\x5d\xf8\xdd\x9b\xb1\x41\xf5\x29\xdb\x8a\x5c\xf9\x6d\x72\xb5\xf1\x7f\xd6\xbf\x6c\xe5\x7d\x1d\x47\x1a\x29\xc3\xc9\x3c\xc5\x9b\x88\xa5\xf8\x10\x68\x94\xe5\x89\x06\x4d\xd2\xa1\x4a\x6b\x10\x11\xac\xab\x7a\xac\xaf\xea\x92\x66\x90\xd0\x04\xb8\x64\x4a\x8a\x91\x72\xbb\x63\x72\x0c\x5e\x3c\x9c\xcf\xd3\xa4\xf3\xc7\xb3\xaf\x5c\x9b\xe3\xfb\x9b\xa6\xad\x20\x3f\x3b\xf4\xf0\x3d\xa9\xf6\xae\x53\x39\xd1\xc3\xb4\xc5\x71\xb1\xb5\x3d\xd8\x48\x90\x25\x4f\x92\xa0\x8e\xab\xa6\x2e\x89\x26\x0e\x64\x56\x75\x25\x93\x09\x23\x4d\x62\x39\xc4\x10\x50\x32\x21\x52\x19\xcd\x8b\x28\x9f\xc3\x92\xe9\x6c\xff\x0d\x08\xa6\x70\xe6\x62\xab\x4e\x8a\xdf\x58\x6b\xd6\xf7\x38\xbb\xa2\x7b\xef\xda\xc6\x3a\xb1\xda\xf4\xc3\xe3\xab\xad\xbf\xb7\x68\xd4\xdd\xd5\xf1\x1b\x65\xcf\xe2\x56\x00\x10\x2d\x8b\xae\x06\x48\x0b\x69\x16\xe0\x44\xd6\x71\x31\x02\xfa\x1a\x90\x78\xdf\x26\x5d\x25\x94\x21\x52\x34\x44\x48\x11\x2d\x53\x2a\x47\xa6\xb4\xf0\x77\xd9\x0e\x5e\xb8\x55\x6a\xd8\x94\x5b\x1d\x97\x88\xfe\x97\x23\x5b\x39\xd7\xda\xad\xcc\x81\xb7\xac\x38\xba\x29\x5e\xe4\xfc\x95\x91\xf1\x13\xb3\x63\x85\x28\xb0\x35\x9d\x82\x84\x86\x54\x24\x03\x3c\x52\x0c\x4e\x8a\x04\xcf\xc7\x5c\xd2\x94\x68\x64\x78\x0e\xe1\x61\x9a\xc0\x3b\x9e\xae\x84\x84\x1a\x2a\x52\xca\x7b\x73\x4f\xfb\x76\x0b\xc0\xa4\x9f\xf3\x97\xdb\xda\x62\x67\x73\xd4\xe2\x45\x8f\x5f\xdf\xfb\xb0\x55\xad\xcc\xce\x8e\xa7\x75\x9a\x25\xcc\x6e\x93\x36\xeb\xc6\x6e\xf9\xa6\x71\xc8\x43\xd1\xc5\x48\xc2\xf2\x43\x84\x87\x0e\xad\xb9\x0c\x88\x68\x15\xe9\xac\x08\xf1\x48\xd4\x41\x48\x05\x36\x70\x48\x1c\x43\x38\x11\xda\x28\x15\xa2\x6e\xd5\x4d\xbb\x27\xb3\x2d\xbf\xad\x39\xbc\x03\xd6\x4a\xb9\x99\x6b\xc4\xf7\x7c\xa1\x92\x4d\x2a\xca\x55\x47\xce\x7f\x5d\xa5\xfe\xf9\x75\x5f\x26\xd7\x43\xdc\xb9\x47\xc1\x97\x14\xce\x38\xa3\x23\xf3\xec\xca\xf6\xfc\x57\x9b\x8d\x39\xb6\xb9\xcb\xc4\x9f\x77\x4f\xd8\xd4\x3b\x73\xae\x7e\x77\xd3\x26\x27\x1b\x1b\xf1\x32\xcb\x13\xbe\x6c\xb0\x04\x4b\x06\x00\x79\xb4\xc9\x40\xd5\xc4\x34\x49\xd3\x9c\x00\x45\x8e\x8e\x29\xae\x65\x73\x22\x22\x10\x2f\x88\x61\x84\x54\x35\x95\x0f\x5c\xb7\xa2\xfd\xe5\x1d\xcd\x89\x75\x53\x3e\xee\xbf\xf9\xa3\x74\xf9\xdb\xd3\xfb\x84\x35\x3f\x65\x01\x3d\x7b\x6a\x19\xca\x2f\x3e\x32\xad\x53\xf2\xd5\x3f\xcb\x2d\xb7\xf6\x2d\x5c\xff\xed\xe1\x5f\xee\xf7\xaf\xc8\x7d\x32\x76\xc2\x9d\x01\x49\xe5\x5e\xfe\xb1\x9b\x87\x27\x1a\xff\xf0\xf1\xa3\x57\xc9\xcc\xf1\x53\xed\xf2\xdf\xf4\x1d\xac\xf6\x5f\xb4\xfc\xdb\x17\xd2\x09\x3a\xdf\xe8\x0b\x39\x0f\x27\x8c\xff\x61\x46\xef\x26\x17\x4a\x96\x9b\xfd\xc1\xf9\xf8\x25\x89\x34\x4a\x23\x2c\x5f\x88\x0c\x42\x13\x71\x47\x22\x02\x8e\x96\x90\xa4\x1b\x44\xc0\xb9\x3c\xc7\x21\xc7\x24\x79\x23\xe0\x05\x5e\x67\x08\xce\x87\x2a\xa9\x78\xa9\x28\x76\x14\xce\xd4\xf2\x93\x67\xef\x77\xe2\xb6\xdc\x28\xb5\xa1\x67\xfa\x6f\xf0\xde\x19\xaa\x56\x9c\x38\xb5\xd4\xe7\xb5\x6f\xb6\x79\x3d\xa6\x31\x96\x2f\xf9\xea\x4b\xeb\xa7\x6d\x99\xdc\x38\xf1\xd2\xf5\x96\xb3\x5a\x27\xf6\x2b\x84\x37\xff\xb0\x5c\xbf\xd2\xef\x37\x19\x95\xb5\xa5\xf0\xc7\x9e\x0c\x5c\xfe\xe4\xab\x83\xae\x4d\x1e\xf5\xf8\x75\xec\xa3\x4f\x96\x3f\xe2\xba\x7e\xf4\x75\xc3\xa8\x2b\xdd\xb0\xd0\xf9\x17\x6b\xd7\xb7\x4d\x98\xbb\x13\xdb\x91\x3f\xd9\x55\xd4\xa6\x86\x52\xb0\xd4\x4f\x05\x6a\x37\x2b\xf0\xeb\x97\xa8\xdf\xb6\x63\x1c\x45\xce\xb9\xde\x6a\x74\xa6\x73\xc3\x7f\x93\xb2\x67\x37\x12\xe2\x77\xb6\x65\xc8\xea\x94\x43\x33\x90\x77\x43\x85\xb2\x3d\x4c\xe3\xf8\x40\x70\x59\xc9\xe0\x70\x20\xc9\x96\x41\x1a\x91\xa0\xc9\x51\x80\xc9\x9c\x8d\xeb\x11\x85\x98\x94\x67\xfb\xe5\xe2\xe0\x23\x7f\xfa\xd3\xaf\x37\xf5\xf5\x36\x4f\x3c\xf2\xa4\xd1\xa3\xba\x75\x7b\x5c\xdc\xba\xac\xff\xd3\x1c\x07\x6a\x31\x77\xb7\xcf\x8b\x63\xd4\xe9\x18\x9e\x2c\x2b\x20\xe2\x54\x1b\x8f\x14\x9e\x09\x74\x86\x56\x0c\x8f\xd3\x34\x5a\xe4\x74\xc3\x8e\x28\x4f\x8c\x4c\xcf\xe4\x68\x9a\xb6\xa0\x22\x70\x46\xca\xed\xbe\x7e\x98\xa3\xd9\xda\x49\xc5\xa3\x0a\xdf\xa5\x2f\x1e\x74\xcf\x92\xe9\xf0\xa9\x3c\xb5\x72\xf4\x9e\x5e\x76\x76\xd5\xac\x9d\x72\x5d\xf9\x38\x7e\x35\x1d\x46\x65\x59\x87\xa3\x38\x07\x71\xb4\x6c\x38\xac\xeb\x70\x80\x37\x78\x1d\x50\x30\x60\xd9\x30\x22\x34\x4c\xe5\x30\x93\xa6\x8d\x10\xc8\x92\x8e\x0b\x86\x23\xa7\x72\x52\xff\xc8\xb0\xf9\x59\xed\x6c\xcd\xfa\xf5\x59\xb9\xa6\x7b\xc9\xb0\xf2\x82\xd3\xb3\xcf\xae\x2f\x51\x67\xe8\x82\xcf\x07\x9d\x7c\x3a\xb5\xc6\x9b\x22\xc9\xce\x5e\xa3\x63\xa3\x8a\x2e\xff\xe8\x93\x0b\x96\x9e\x61\x93\xd2\xf5\xe9\xe6\x6b\x46\x87\x4f\x27\x1c\x5b\xb2\xbd\x4e\xf1\xe3\x63\xab\xee\x6b\x77\x30\x7e\x29\x06\x9c\xb5\x44\x5a\x8a\x22\x17\xa3\x71\x36\xf0\x21\xf1\x9f\xcb\x48\xf2\x09\x97\xb6\x8c\x88\xe3\x0d\x5a\x65\x0c\x49\xb6\x58\xc2\xf2\x80\x28\xe0\x0a\x03\x53\x9b\x20\x7e\xef\xd6\xaa\x96\x8d\xdf\x3f\x6b\x76\xdc\x7c\x69\xc5\xe0\xa6\xb9\xbb\x50\xd8\x6f\xef\x1f\x5b\xbc\xb9\xfa\xb7\xde\xa8\xa2\xce\x0f\x85\x0f\x24\x3b\x1f\x62\xa3\xf4\x1b\x8f\x16\x69\x50\x7b\xed\xf6\x82\x4d\xce\x24\xb5\x28\x05\xeb\xd5\x2b\xf9\x5e\x97\xd2\xd3\x1e\x2e\x6e\x35\x25\x7d\xe6\xbd\x69\xeb\x95\x8e\x3d\x09\x26\x32\x3c\xd7\xd3\x54\x5a\x21\x24\xcf\x16\xa8\x40\x83\xb2\xe4\x08\x94\x6d\x38\x66\x28\x29\x58\x00\x43\x06\x52\xc0\xe7\x89\xc0\xe5\x09\x0f\x09\x0c\x99\x12\x70\xc3\x2a\x7e\xdd\x2a\x69\x75\x39\x2f\x5f\x27\xf4\xa8\x07\x79\xf1\xe6\x97\xe7\x0b\x76\xab\x53\xc5\x1b\x5f\xab\xca\xc3\x1b\x20\x3c\x79\x3d\x8e\x14\x59\x2f\x88\x48\x9a\x15\x64\x53\x14\x54\x95\xb7\x3c\x55\xd2\x6c\x4e\xff\x4f\x8c\xe9\x7a\x66\x18\x30\x2a\xc3\x5a\x82\x60\x05\x28\xd2\x8d\x48\x91\xfe\x7f\xdf\x97\x3c\x19\x31\xbb\x4c\x99\xed\x9f\xf7\xc9\x7d\x67\xe0\x0f\x6d\x0a\x7f\x52\xf9\x93\xc7\x79\xce\x66\x1c\xb1\xa0\xc6\xd5\x45\x15\x0f\x4d\xef\xe1\x39\xd9\xb2\xc6\xcf\xba\x26\x41\x44\x12\x40\x1a\x8f\x30\x9d\x75\x25\xdd\x61\xa1\x25\xeb\x94\x09\x23\xdf\xa7\x22\x56\xe5\x05\x80\x7b\x86\x02\x42\x37\x92\x43\xdc\xe2\x59\x55\x88\x1d\xbb\x15\xcb\xca\x4d\xee\x0c\xbd\x92\xef\x26\x28\x2d\x9f\x8d\x7a\x32\x2b\x57\x9f\xc2\xfa\xef\xc2\x84\xb2\x97\xb6\x56\xdc\x3f\xdf\x7a\x58\x22\x7e\x16\xb6\xfc\xd0\x56\x25\x2a\xf2\x79\x57\xf7\x80\xa9\x28\x82\x84\x19\x86\x0d\x71\x41\x67\x48\x15\x32\x02\x13\xf2\x3a\x94\x54\xc5\x0d\x09\xdf\x88\x48\x92\x81\x29\x2d\xbc\x33\x7c\xbc\xf5\x72\xdd\xef\x6a\xaf\x4a\x4a\xaa\xce\xee\x9e\x7e\xff\xd1\xf7\x5f\x7d\xba\x57\x3d\xd1\xa6\xc1\xcc\xd3\x23\x2f\x34\x68\x59\x2a\x7e\xa1\xa6\x8a\x22\x16\x70\x5c\xc0\x2b\xb6\x17\x86\xb4\x82\x10\x11\x50\x21\x41\x09\x84\x63\x4b\xc0\x01\x21\x4f\x21\x60\x69\x92\xef\x61\x86\xee\x44\x22\xcd\xc3\x94\xa1\xe6\x9e\xb5\xcf\x9b\x57\xcd\xd6\x39\x49\xf9\xad\xf9\x41\x2c\xfd\xe8\x2c\x6b\xd6\xab\xa3\x2a\x5e\x6c\x5f\xf0\x07\x61\xf7\xa8\xb6\xb7\x93\x0a\xc7\x51\xf9\x0e\xb3\x28\x06\x51\x28\x12\x42\x82\x10\x54\x1a\xb0\x3c\x2f\x2a\x8e\x62\x23\x43\x20\x48\x56\xb4\xb1\x48\xd1\x19\x86\x0c\x70\x49\xc6\x10\x83\x64\x18\xc5\xee\xba\x2b\x39\x2f\x7d\xdb\x2c\xf8\xbb\xd7\xcd\x6a\x36\x3e\x5b\x68\xdb\x07\x5f\x55\x11\x9a\xa9\xec\x95\x7e\x8b\x86\x3f\xfd\x33\xaf\x21\xfe\x7c\x2c\x7e\x80\xc0\x0c\x57\xd3\x42\x46\xd7\x5c\x57\x91\x14\x4e\x36\x0c\xde\xc7\x6d\x2b\xe4\x7d\x8c\x70\x5c\x87\x71\x42\x40\xf2\x0c\xa2\x42\x51\x89\x24\x9f\xd7\x79\x37\x46\xe3\xfc\x88\x2c\xfd\xd4\xd7\xbc\xd2\x31\xba\x94\xe1\x21\x4a\xec\x9d\xef\xb3\xed\xd4\xfc\xdb\x75\x7f\x18\xfc\xc7\x92\x74\x49\xdd\x73\x94\x4b\x1b\x93\x38\x66\x56\x81\xd2\xb4\x08\x09\x58\xa8\x22\x06\x3a\x2c\xa6\x40\xc1\x01\x8c\x2d\x88\x84\xcb\xca\x22\x81\x44\xd3\x92\x09\x55\x55\x70\x47\x96\x54\x8b\xd0\x69\x5d\xb1\x52\x6e\xf7\xad\x98\xe1\x55\xba\x82\xbb\xbf\xc9\xb9\x6f\xf6\xbd\xf9\x27\xd7\x1a\x2b\xcf\x93\xc7\x86\x6e\x6c\xd8\x38\x7f\xdd\xd5\x39\xb3\x54\x1a\xfe\x47\xfc\xac\xab\x6b\x3a\x16\x39\x0e\x1b\xda\x5c\xc0\x5a\x9a\x4a\x1a\x8e\x68\x28\x2c\xe0\xcc\x48\xd1\x55\x3b\x94\x43\x5f\x27\x1c\x4c\x0c\x54\x9d\xc6\x25\x8f\xc3\x31\x26\xb6\x8a\x6e\x8d\xf1\x1f\xe4\xbc\xfc\x78\xc1\x02\x8d\x79\x46\x9c\xab\xfb\xe5\xec\xed\x13\x2a\x9c\xbe\xf3\xb0\xf7\x64\xe9\x6c\xee\xb3\x2f\xaf\x2e\x1d\x1d\xbf\x2d\x53\x94\xc7\x79\xb4\x81\xa9\x21\xae\xfb\xaa\x46\x61\x14\x1e\x68\x4c\x04\x79\x4c\xa1\x45\xce\x62\x21\x86\xbb\x8e\xaf\xda\xaa\x84\x30\x5c\xe1\x71\x89\xf1\x53\x5a\x78\xd4\xfc\xc9\xb9\x51\x2d\xca\xdb\x9f\x38\xeb\xe2\xed\xc2\x8f\xb2\xf5\xb9\xd6\xf8\xec\x82\x4b\x5e\xab\xc3\xfb\xd9\xba\xa3\xf2\x36\xab\x13\xbf\x90\xca\xc1\xcc\x50\x09\x74\x9f\x54\x78\x91\xe6\x03\x27\x30\xad\x30\x14\x03\x1d\x77\x81\x8e\x74\x88\x6c\xde\x54\x30\xd5\x87\x9a\x63\x42\x85\xa7\x30\xc7\x66\x63\x27\xf2\x7a\xd6\x2e\x51\xf3\x44\x36\x79\x5f\xa6\xd5\x9d\xc6\x8d\x95\xec\x7d\x1f\x1c\xae\x3e\x91\x3f\xe1\x2d\x9e\x57\x70\x66\xfd\x84\xd6\x4d\xd3\x36\x60\x36\x36\xaf\x0d\x6a\x40\x26\x75\x53\x06\xa2\xac\x99\xbe\xcb\xb2\x81\x84\x71\x98\x4f\xd1\xaa\xc9\x05\xbe\x16\x11\xb6\x29\x44\x24\x47\x2b\x2c\xc9\x0b\xb6\xc5\xf1\x31\x30\x7c\x68\x60\xbb\x0d\x5d\x97\xe4\x3e\x34\xef\xec\xc1\x03\x27\x1b\x2c\x46\x47\x57\x6c\x6b\x5a\xe3\xd6\xeb\x67\x39\xbf\x5d\x2a\x2d\x3f\x32\x31\x8e\x04\x0e\xe0\x10\xba\x8b\xf1\xac\xee\xf0\x2a\xee\xd3\xa6\x22\x30\xa4\x20\xd1\x90\x0a\x6c\x5b\x0c\x34\x3f\x60\x23\x48\x84\x48\x45\xc8\xc1\x14\x85\xb5\x64\x07\xa5\xf2\x40\x29\xf2\xfb\xe6\xbe\x1d\x6b\x75\x3e\x32\xaa\xd9\xfb\x5f\x28\x3b\x2a\xfc\x94\xf9\xd9\xa2\x37\x93\xd6\x4d\x5a\x76\xa4\x68\xba\x55\x6d\x9b\x77\xe9\x90\x7c\xb5\xd5\xb3\x45\x7d\xaa\x66\xce\xc6\x3d\x82\x21\x6f\x47\x54\xfa\x76\x4b\xf0\xae\x4f\xe3\x45\x23\x96\x51\x85\x07\x1d\x95\x9f\x16\xd2\x1b\xfd\xaf\xae\xd4\xab\x83\x56\x8d\x2f\xfb\xa5\x51\x70\x14\xa6\xc0\x8f\x7e\x3b\x7d\x6b\x51\xf5\xda\xf7\x4b\xd4\xef\x3a\xf5\x7c\xdb\x0c\x4f\xc6\x87\x3f\x26\x5f\xad\x3f\x3e\xb7\xaf\x78\xb8\xd4\x3e\xf7\xb8\xc8\x57\x7d\x36\x6c\xff\x63\x58\xfe\xf3\x37\x2b\xb6\xff\xe8\xe8\xad\x33\xd7\x32\x91\x63\x33\xd6\x49\xbe\xfa\x71\x85\xef\x4f\x1e\x1d\x5f\xfb\xd3\x2e\x25\x8f\x2e\x2f\x9e\x30\x7c\xc8\x6f\x44\xf9\x2f\x6b\x33\x43\xdf\x34\xe9\x5d\xb0\xe4\xc0\xb1\xd4\xef\xc9\xae\xee\x56\x8b\xd6\xed\xfa\x32\x71\x53\x87\xa5\x6a\xc2\x1f\x4d\x87\xfe\xda\xae\xf0\x92\x8b\x09\x8d\x1b\x80\xd9\x3d\x0e\xed\xca\xb2\xa3\xc5\xe7\x8b\xe3\x58\x58\x30\xe4\x90\x25\x8c\x08\x52\xac\x68\x09\x40\xa2\x69\x02\x57\x74\xd6\xa1\x31\x8a\xb5\x2d\x02\x38\xbc\xc1\x05\xac\xac\x07\x04\xe7\xcb\xba\xcb\x50\x6c\x8c\x84\xf0\xf6\x0a\xce\x8a\x59\x1f\x0c\xa9\x53\x46\xcd\x7f\xb5\x5b\xae\xec\xc5\xea\x16\xcd\x74\x39\xeb\xe5\x1e\x1f\xec\xda\xcc\x6d\x6a\x34\xa3\x5c\xda\x12\x73\xb1\xe5\xb9\x45\x18\x04\x0e\xc5\x28\x21\x86\x1c\xca\x89\x74\x1e\x73\x59\x8c\x26\x2d\x60\x84\x3e\xee\x06\x12\x74\x05\x06\x6a\x81\xac\x32\xc8\x23\x5c\xd2\x57\xf4\x94\xb0\xff\x71\xf9\x87\x37\xbb\x97\xae\x3f\xf4\x55\xa5\x1c\xfd\x5e\x57\xa8\x75\xe7\xf1\x07\xc7\x6e\x14\xc8\x2d\x67\xb9\x57\xbc\x30\x7d\xa6\x34\x28\x19\x47\xf1\x4f\x18\x89\x1e\xee\xba\x1a\x24\x48\x0a\xc7\x54\x91\xd0\x7d\x9c\xd6\xa0\xc2\x59\x61\x64\x01\xce\xb1\x55\x48\x91\xaa\x0e\x6c\x2c\x42\x62\x68\x23\xfe\xef\x49\x60\x7f\x51\x82\xff\x2d\x13\x9d\x94\x98\x71\x5e\xee\x8c\xc9\x29\xc1\xad\xde\xec\xba\x93\x11\x9e\x0e\xdf\x2f\x57\xb4\xdd\xa3\x73\x5f\x2d\x99\x39\xa8\xdf\xfe\xeb\x15\x4e\x54\x29\xb4\x97\x3e\xf5\x31\x38\x13\x3f\x9a\x13\x03\xb0\xc0\x8b\x64\x1a\x49\x86\x01\x65\x0e\xb9\x21\x29\xb2\xb2\x40\xd9\x1c\x8e\x00\xe5\xb0\x2e\x50\x44\xc9\xd7\x3d\x0e\xfa\x96\x6c\x79\x82\xcf\x69\x51\xec\xb2\xcd\x92\x91\xf9\x5f\x2c\xbd\xd5\xf3\x5d\xde\x53\xdc\xd6\xdf\x1a\xa5\xeb\x7d\xb2\x6f\xff\x3b\xbf\x49\x5d\x1e\xac\x6c\xdd\x41\x4d\x4c\x5c\x9a\x36\xde\x52\xcc\xbb\x48\xe2\x0d\x95\x72\x02\xc7\x37\x01\x32\x6c\x9f\xf0\x2d\xc2\x44\x0e\xa6\xcb\xbc\x6b\x01\x3a\x52\x0d\xd6\x53\x4d\x4c\x57\x0c\x5d\x8c\x2c\x43\x44\x3e\xab\xc5\x2e\xff\x79\xc7\x2e\xec\xfe\x24\x7f\xf7\x2f\x6b\x9e\x99\x57\x3c\xe3\x8c\x59\x1f\x7f\x35\x68\xcd\xde\x8e\x59\xe9\x6f\x96\x94\xca\x5c\xf0\xd2\xae\x1f\x9a\xc6\x31\x84\xf5\x54\xd2\x67\x23\x1c\x88\x21\xcb\x10\xa1\x43\x51\x11\xe3\xb9\xd0\xf2\x7d\x85\xc6\x15\x16\x85\x5a\x48\xd8\x08\xd8\x8c\x86\x0b\x02\xf0\x42\x1b\x4f\xa5\x6b\xdb\xe9\x5d\x64\xd2\x57\x1d\x3b\xbe\x20\x3e\x1a\x76\x73\xcc\x53\xf9\xab\x1a\x07\x0b\x67\xad\x71\x3a\xcb\xed\xfd\xef\x8d\x4b\x18\xd9\x6e\x47\xda\xa6\x0b\xc5\xb4\xb2\x4e\xe3\x1a\x6b\x60\xa1\x2a\xdb\x88\x09\xc2\xc0\xd0\x51\x48\xab\x51\x04\x34\x18\x04\xa6\x66\x2a\x36\xaf\x59\x3e\xc6\x47\x21\x25\x03\x91\x13\x64\xcd\x8a\xbd\xe5\x26\x6b\xa3\x37\xb9\x26\x7d\x93\x3b\xe8\x72\xec\x8f\x4a\xc7\xd7\x51\x65\x26\x5d\x79\x72\x6c\x24\x27\xf7\xdb\x51\xb8\x64\xfd\x65\x6e\x1c\xb3\xa6\xac\xea\x00\x91\x07\xa1\x6b\xd3\x06\x45\xe3\x51\x14\x62\xa6\x47\xf9\x48\xb3\x6c\x1b\xa3\x75\x91\x72\x75\x43\x62\x58\xc4\x4b\x9e\x80\xe3\x32\xd2\xb8\x54\xa6\x0b\x5d\x9d\x70\xb6\x81\x9e\xe1\x5a\x42\xd7\x8c\x4f\xc2\xd2\xbd\x16\xed\xcf\xfc\x55\x99\x6f\xba\x5e\x2b\x7b\xb5\xc3\xa9\x4e\x87\xf3\x7e\xf8\x59\x99\xf8\x01\x23\xa4\x90\x0e\x42\x1b\x01\xd2\xc2\x45\x33\x14\x71\x35\x90\x74\x48\x86\x40\x36\x81\x27\x19\x0c\xb0\x71\x45\xf4\x08\x4f\x08\x5c\x10\x40\xdc\x0b\x20\xff\xff\xac\xfc\x57\x5d\xf8\xdf\x8a\x57\x49\x89\xe9\x13\xd2\xa5\x4b\x3e\xa5\x75\xfa\xa4\x29\xc5\x7f\xfb\x70\xfd\x51\xf6\xc1\xd6\xe7\x6d\xf7\xe6\x2a\x27\xad\x18\x7b\xe0\xc7\x46\xc2\x80\x8f\x98\xa4\xa7\xda\x8a\x67\x7d\xe3\x28\x42\x22\x23\x87\xe3\x38\xca\x07\x3a\x66\xf3\xa1\x8c\x31\xa6\x4e\x91\x06\x25\xf0\xb2\x07\x83\x40\x91\x35\x82\x91\x65\x91\x24\x3d\x04\xa1\xab\x85\x20\xe2\x53\xbe\xde\x66\xfd\xf1\x61\xed\xdb\xe5\x8a\x15\x1f\x71\x6d\x7a\xee\x07\xaf\xfd\x71\x2f\x0a\x0e\xbc\x53\xbd\x50\x49\x76\xfb\xe0\x47\xb7\xf7\xce\x3a\x55\x23\x8e\x0d\x5b\x41\x10\xf9\x64\x40\xeb\x4a\xe4\xab\x86\x25\xfb\x8e\x03\x5d\x5e\x26\xc9\x48\x67\x02\x4b\x89\x28\xde\x37\x09\xca\x64\x09\xde\xe1\x54\x8f\x09\x58\x96\x8b\x8d\xa1\x39\xdd\x8b\xbd\xd7\xb6\xd1\x81\x16\x6f\x9a\xa5\x3f\xb0\xa2\xcf\x03\xe9\x5d\xeb\x97\xdc\x1a\x50\xfd\xf0\xf0\x5e\xf7\x9f\x4d\x6d\xf6\x69\xda\xda\xa0\x63\x0f\xea\x71\x23\x5c\x94\x04\x22\x60\x4c\x31\x30\x4d\x87\xf5\x79\xdd\xe2\x78\xda\xa1\xa1\xcd\x87\x2e\x01\x24\x09\x83\x86\xa5\x1b\x91\xef\x42\xc0\x51\xba\x9d\xca\x15\x8e\x5d\xab\xf4\xee\x71\x84\xcd\x3a\x3a\xb3\x7a\xe7\xb6\xc3\x46\x27\xed\x2d\xb6\xa3\xf1\x68\xfb\xf3\xa5\x3f\x9e\xb0\xfb\xee\xae\xf2\x55\xcb\xf8\xf9\x55\x5f\xc6\x05\x53\x60\x25\x91\x25\x05\x86\xd0\x43\xcd\xf6\x68\x47\x37\x0d\x91\x64\x34\x88\x21\xda\x85\xaa\xa3\x23\xcb\x77\x79\x53\x25\x69\x3e\x54\x14\x2c\x45\x1b\xf4\xbf\x55\x61\x93\x12\x33\x26\x0c\x4a\x9f\x9c\xb8\x74\x6d\xc5\xc8\x7b\xe9\xcc\x9d\xbd\x16\x1c\xd8\xfd\xcd\xba\x86\x0d\xa7\xac\x6c\x56\xf1\xe5\xd5\xe2\xe5\x56\x28\xf5\x2f\xd4\xa9\x8b\x7a\xa5\x2d\x8b\x15\x33\x2e\x13\x11\x62\x3d\x4f\x42\x18\x11\x9a\x96\x6b\xba\xa2\xcb\x03\x8f\x8d\x58\xd2\x75\x4c\x1b\x49\x0c\x09\x19\xcf\x36\x11\x92\xf5\x88\x67\x25\xd7\x61\x6d\x3e\xf6\x4f\x99\xf7\x49\x9e\xb5\x67\x32\xbe\xd7\xde\xbf\xb4\x60\xf9\xcb\xd1\xdd\x73\x15\xbb\x01\x3a\xf5\x99\x2d\x3c\x6d\x35\xb5\xca\x1f\x39\x4b\x3e\x78\x13\xc7\x47\x1f\x63\x1a\x74\x20\xd3\x2e\x1e\x89\x3c\xf4\x4c\xdb\x73\x68\x49\x34\x49\xc2\x71\xa1\xe7\x18\x21\xa1\x6b\xa2\x1b\x09\x98\x6f\x22\x2d\xe2\x80\x6c\x73\x20\x36\xd7\xaa\xc3\xee\xd7\x1b\x51\x17\x7d\x5a\xcb\x39\x1f\x16\xbc\x1e\x4d\xe7\x1b\x1e\xe9\xff\x6a\xc0\x85\xf2\x49\xe2\x9b\x5e\x05\xac\xeb\x2d\xe2\xd7\xd0\xc4\x58\x16\x6e\xda\x30\x64\x1c\x03\x27\x25\xc9\x60\x81\xee\x59\xa4\x23\x7b\x8a\x2c\x8b\xaa\xab\xf9\x36\xa5\x50\x84\xe7\x19\x8e\x42\x02\x3d\xd4\x5c\xc7\x0e\x63\x6f\xf9\xc9\x79\x73\xf1\xcd\x6f\xfb\x2c\x9b\xff\xbc\xcb\xf8\x9f\x27\x7d\xb2\xfb\xe2\x93\x6d\x79\x4b\x14\xbc\xd6\x72\x56\xd3\xdb\xaf\xc4\x0e\xa7\xe2\x98\x6b\xe1\x58\x8c\xf5\x4c\x17\x93\x49\x8a\x92\x6c\x5c\x44\x94\xc2\xd2\x8e\x2b\xcb\x61\x04\x05\x18\xd2\x30\x08\x59\x80\x71\x94\xce\x45\x98\x85\x34\x25\x62\xfe\x96\x47\x1e\xf7\xde\xff\x8d\x52\x90\x94\x38\x37\x61\x7f\xc6\xa1\xc9\xbe\xb0\xfc\x5b\xfd\x23\xaf\xff\xf6\x9d\x07\x77\x5c\x6b\x31\xb9\xc6\xa9\x20\x9a\x58\xa1\x67\xdb\x19\x97\x3e\xe1\xf7\x1c\x94\x73\xef\xd0\xd3\x56\x31\x88\xf9\x85\x8c\xcd\x59\x51\xc8\x1a\x91\x61\x43\xda\xc0\x25\x4f\xc6\x5d\xcf\x61\x0d\x4e\x92\x68\x4d\x09\x18\xd6\xd5\xa1\x8f\xfe\x3f\xd6\xde\x33\xca\x8a\x62\xfb\x1b\x1e\x72\x8e\x4a\xce\x22\x49\x94\xd0\x11\x04\x24\x0d\x49\xb2\x44\xc9\xdd\xd5\xb1\xaa\x73\xae\x96\xe4\x90\x41\x24\x08\x82\x8a\x20\x82\xa0\x80\x02\x82\x80\x02\x12\x25\x08\x08\x0a\x22\x03\x4a\x92\x24\x39\x83\xc4\x77\xf9\xde\xbf\x8f\x77\xe4\xcc\xe2\xae\x59\xe7\xfb\xf9\xb0\x4f\x75\xd5\xae\x5d\x7b\xff\x42\x20\xf8\xb4\x4b\x10\x06\xc9\xc6\x0e\x4e\xfc\x51\xf6\xe6\x91\xfa\xb4\x3f\x5b\xe5\xed\xef\x1a\x35\xcb\xa3\x97\x7a\x21\x8f\xd5\x24\xfa\xe1\x44\xf9\x57\xda\x79\xb8\x9e\x3c\xfd\x8d\x5a\x95\x92\xf8\x2c\xa1\x19\x2f\x26\x00\x43\xe3\x40\x15\x6d\x64\x50\x9a\x6d\xab\x12\x94\x71\xa8\x60\xc3\xd2\x75\xe8\x09\x8c\x2f\xb8\x0e\xd6\x38\xc0\x10\x14\xa9\x82\x4c\x42\x2e\xb2\xee\xe5\x25\x7f\xde\x18\xfa\xe8\x87\x79\xf3\xce\xdc\x2d\x77\xa9\x7e\x8d\x85\xc7\xae\x57\x59\x76\xb7\x5b\xbe\x09\xab\x77\xa7\xa5\x8f\xc9\x9a\x53\x6b\xc2\x04\x03\x82\x48\xe5\x48\x1c\x98\x1c\x1b\x0a\x8a\x67\xc1\x30\x12\x63\x01\xc9\x3e\xad\xc6\x4e\x68\xd1\xb4\xac\x6b\x26\x64\x35\x60\x53\x96\xa6\xda\x6c\x1c\x67\x62\x9f\xfb\x69\x99\x6f\xbf\xf9\x58\x3e\xc9\x8e\x6f\x3b\x3f\xfd\xb9\xd4\xa1\xd3\x76\xdd\xbc\x3c\x75\xdd\xc9\x87\x5f\x73\xaf\x4d\xaf\xe4\xd4\xdc\x9c\x35\xe6\x6d\xc2\x8b\xca\x95\x48\x5a\xe0\x79\xc2\x72\x99\x40\xd6\x1d\x5e\x04\x32\x23\xa1\x38\xd0\x64\x32\x8c\x49\x87\x77\x48\xcb\xb2\x0c\x47\xf5\x2d\x3d\x0e\x48\x9b\xc6\x64\x26\xf4\xa0\x95\x65\x1f\x0c\x2e\x98\x9e\x7f\xcb\xc2\x39\x21\x73\xc4\x97\xd2\x2f\x14\xcb\xdf\xe5\xd0\xfb\x2d\x6e\xfd\xb4\x74\x65\xb3\x35\xa5\xca\x66\x6d\x58\x97\xb8\x99\xab\xa8\x54\x84\x54\x55\xf6\x9d\x58\x81\x41\x18\xc7\xd0\xf4\x0d\x68\x45\xb2\xcd\xf2\xa2\x2c\x2a\xa4\xca\xa8\x6a\x64\xc4\x42\x48\x93\xac\x65\x49\x9c\x96\xb8\x0a\xbe\x56\x67\xf9\x82\x70\x84\xfa\xe9\x86\x3a\x25\x95\xb4\xab\xb0\x6a\xdf\x8f\xda\xae\xc9\x5f\xf4\xea\x5e\xf0\xb0\xc8\xc7\xd5\xbc\x0f\xb3\x66\x8b\x9f\x58\x2a\x47\x35\x03\x35\xc6\x0c\xe5\x92\x92\x43\x61\x5b\xd7\x1d\x93\x86\x84\x4e\x4a\x7f\x55\xbf\x31\xd6\x19\x22\x94\x43\x55\x8f\x59\x84\x1c\x02\x12\x8a\x13\x26\x5e\xe5\x05\x39\xcb\xb8\x5b\x1b\xd0\xda\xc4\xfd\x97\xf2\x17\xc7\x23\x7f\xff\xfd\x41\x87\xc5\xdf\x2e\xdd\x39\xa7\xfb\xca\x9f\x6a\xb3\x2b\x5e\xce\x9a\xa2\x7a\x62\x35\x0b\xac\x78\xba\x0d\x7d\x22\x8a\x2c\x0a\xeb\x50\x89\x34\x1a\x19\x82\x69\x70\x58\x76\x25\x83\xc7\xa1\xa5\x07\xb2\xe7\xd2\xb2\x18\x51\x01\x11\x9b\xff\xa5\xee\xf3\xb7\xaf\xf2\xd3\x80\x53\x69\xa9\x95\x9f\x6f\x96\x2d\x23\x33\xae\x5c\xd5\x3c\x4b\xc6\xae\x9a\xf4\xf1\xce\xba\xdf\xf2\x3f\x7e\x26\xfe\x12\xea\x57\x4a\x95\xee\xcf\x0e\x1f\xd9\xd0\xad\x53\x78\xc8\x37\x59\x33\x29\x4e\x0c\x0a\x46\x24\x66\x58\x6c\x49\xb6\xe5\x79\x5e\x68\x04\x84\xcc\xab\x0a\xef\x59\x11\xa4\x44\x5b\x41\x96\x22\xd0\x40\x66\x34\x91\xb4\x91\x6e\x2a\x04\x0f\x32\x61\x2b\x4e\x5b\x70\xec\xd7\x92\xc5\x47\x6e\x83\xb3\xb4\x82\x15\x1e\xf6\xca\x71\xa4\xbd\xb4\xa5\xe6\xdb\x1d\x2b\xaf\x4f\x5f\xd6\xac\xce\xe0\x89\xb7\x92\x38\xf8\x8d\x14\xd1\x52\xb0\x21\x9b\x92\x13\xa0\x90\x70\x2d\x9d\xe0\x29\x5d\x8b\x69\xcf\xf6\xc4\x10\x48\x2c\xd0\x5d\x8e\x84\x9c\xa9\x29\xbc\x1d\x5a\x41\x66\x95\xf0\xdc\x12\xdb\x3f\xc6\xef\xb4\x93\xbe\x7b\xa1\xf1\xde\x65\x80\xf8\x2e\xd7\xf1\xfa\xab\xd4\xf7\x66\xff\x3a\x68\xca\xc2\x67\xff\x68\x53\x6a\x51\xf2\xd2\xb8\xa4\x50\xb2\xe9\x18\x11\xb0\x7d\xd2\x55\x24\x23\xa6\x00\xad\x43\x41\xb3\x03\xd5\x64\x88\x90\xc5\x8a\x1d\x98\xa2\x49\x31\x36\x1f\x19\x2c\xa5\xda\xb6\x91\x38\x8d\x1b\xa5\x5a\x5e\x0f\x5b\xe5\x2d\x7c\xf2\x2a\x6c\xb5\xad\xca\x1b\xf5\x0f\x55\x7b\x2e\x7d\xc0\xe7\x44\x5e\x62\x50\x8e\x1e\x75\xc0\x85\x9a\x49\x84\xf0\xfb\x91\x43\xb0\x8a\x85\xbc\x08\x13\x9e\x48\x33\xba\x6b\xf8\x3c\x20\x75\x8e\xa3\x08\x99\x92\x58\xce\x10\x04\x41\x62\x34\x46\xa5\x11\x52\x54\xd6\x95\x13\x87\x3c\xaa\xc1\xd4\x3f\xf4\x2b\xd2\x50\x90\xed\x8e\x4a\x7c\xbc\xe2\xcd\x5d\x5b\xe5\x8d\x3b\x7a\x1a\xcd\xeb\x76\x1a\xb7\xfc\x74\x8d\xca\xad\x92\xf7\x66\x55\x44\x47\x60\xc2\x20\xf6\xfc\x28\x64\x59\x8b\xc7\xc8\xe3\x14\x43\x8a\x09\x59\x15\x02\x59\xb5\x89\x08\xc6\x14\xa1\xbb\x98\x0f\x18\x9b\x91\x42\x05\xff\x33\xe0\xfa\xfb\xb4\x3e\x0d\x96\x94\x96\x9a\x3d\x7b\xde\x7f\x39\x2b\xcf\x1d\x33\xba\xdf\x0b\xb5\xd6\x76\xb9\xdf\x7c\xc2\xc9\x9d\x39\x7e\xcb\xdd\x7f\x62\xfe\x19\xf3\x06\xfc\xd6\xae\xf0\xbd\x16\xd3\xf3\xec\x59\x9e\xbc\x89\x0d\xcf\x58\x6e\x4c\xe9\x9a\x06\xfd\x98\x42\x08\x31\x2e\x49\xd9\x2e\xa7\x18\x2c\xa7\x50\x5c\x2c\xc9\x91\xa2\x72\x82\xe7\xb8\x2e\x05\x38\x97\x97\x05\x86\xa0\x12\x7f\x94\x2f\xeb\x55\x6c\xd7\x2d\xdf\xd8\x6f\x97\x17\x2a\xb2\xae\x67\x94\x63\x49\xe5\x08\xb4\x9a\xdf\xa0\xd9\xd0\x11\xe0\xa7\x35\x39\x5a\x64\xd1\xf3\x37\x61\xc8\x61\x64\x50\x26\x34\x29\x2a\xb0\x42\xec\x11\xac\xa2\x28\x86\xa0\xe8\x8c\x2c\xf9\x32\x96\x4c\x07\xc9\xb6\x01\x69\xe0\xaa\xb1\xa6\x53\xbe\xc5\xda\x31\x48\x1c\x72\xa1\x4d\x67\x3e\x7c\xb3\x40\x8f\x3f\xcf\x75\xac\xf8\x70\xc6\xf6\xdd\xf3\xb6\x86\xcb\xba\x1f\x8a\x4b\x9c\x5d\x5e\xe0\xce\x94\xab\x3b\xb8\xac\x29\x02\x27\xbe\x5b\x59\x0e\xda\xb6\x24\x1b\x0a\xb6\x64\xca\xd0\x2d\x49\x0b\x42\x52\x10\x49\xd6\x23\xb1\x88\x59\x47\x72\x24\x92\x8b\x24\x82\xe4\x74\x84\x88\x88\x85\x6c\xe2\xbb\xf5\x25\xb5\x4f\xc1\x8e\xe9\x29\xc3\x4f\x8e\x8a\x76\xe6\xa8\xcb\x5e\x58\x7e\xb3\xc8\x98\x9b\x57\x0b\xcc\xed\xb0\x26\x5e\xb1\x47\x5b\x93\x44\xaa\x99\x14\x69\x2c\x0c\x0d\x18\xda\x34\xeb\x4b\xb2\x4e\x52\xaa\x46\x12\xb1\x6f\x18\x96\xc9\x0b\x26\xab\x69\x81\x01\xc8\x18\x2b\x3e\x17\xa9\x48\xb2\x21\x62\x13\xaf\xf2\x9f\xfb\x97\x4c\xaa\x74\x6c\xc2\xda\xf0\xe2\xc8\xe0\xb4\x35\xd2\x69\x5c\xb3\x60\xf6\x41\xb7\xd7\x95\xfa\x7a\x5a\xfb\x02\xeb\x3e\xfd\x33\x35\x79\xa7\x95\x67\x35\x2e\x0a\x62\x64\x60\x44\xaa\x0c\xa1\xf3\xb4\xa6\xbb\xba\x4d\xd0\x80\xb6\x59\x0e\x33\x1a\x25\x23\xd3\x00\x24\x27\xca\xb2\x41\x68\x80\x56\xa3\x27\xe4\x5c\x9e\x86\xb1\x4b\x6b\x91\xfd\xc5\x8c\x0f\xed\xd7\x57\xd4\x9e\x6b\xec\x7e\x91\xcd\xf5\xc3\x5e\x62\xc5\x9d\xab\x83\x6f\xbf\x7b\xee\xcf\x46\xe6\xa3\x13\xb5\xd4\xdd\x76\x5f\x23\x7b\xc1\xe4\x5d\x53\xa4\xef\x2a\x3c\x2f\xc6\x4a\x48\xd1\x52\xc8\x86\x08\xc6\xaa\x1e\x45\xa2\xc1\x04\xa2\xe4\x61\x64\x4b\xac\xa9\x05\x96\xa6\x70\x82\xec\xc6\x1c\x2f\x82\x4c\xae\xa9\x61\x6b\xcb\x7c\x99\x63\xd2\xa8\x7c\xd5\x1e\x4f\x2c\xbe\xbb\xcc\x83\xc1\xa5\xe6\xf4\xf5\xee\xfd\xb1\xa3\x6c\xf7\x22\x7d\xbf\x12\x07\xb4\xce\x9a\x5f\x48\xe2\x99\x8d\x60\x71\x5e\x4c\x20\x8f\x52\x00\xa3\xda\x81\x6f\x68\x20\x34\x62\x83\xe4\xb8\xbf\xea\xf7\xd8\xe6\x19\x35\xe2\x62\x40\x73\xbe\xe9\x21\x52\xc0\x36\x91\x38\xe4\x07\x07\xde\xfe\xfc\x8d\xfe\x07\x9c\x6d\xec\x9a\x73\x8f\xeb\x95\x78\xc4\x6d\x9e\xf9\x53\xd3\x3b\x65\x56\xd5\x99\x96\xef\xca\xd9\x1e\x8b\xd2\x93\xa8\x94\xca\xfa\x8c\x26\x8b\x81\x21\xaa\x04\x63\xc5\x01\x09\xcc\x80\xc6\x88\x8d\xb9\x98\x54\xf8\x40\x66\x50\x80\x08\x89\x74\x79\x9d\x09\x7c\xcb\xd7\x69\xcd\xcc\x64\xe3\x17\xbc\x30\x23\x65\x51\xbb\x59\x0f\x26\x9e\x3a\x50\xed\xfb\x5d\xc3\xdb\x9f\xac\xba\xe3\xf9\x7e\xb7\x03\x61\x65\xf6\x43\xcf\xfc\xb6\xeb\xb3\xe4\x85\x6c\x68\x6e\x1c\x59\x90\x88\x02\xc2\x01\xa2\x29\x0b\xac\x24\xf0\xa6\x23\x4a\x16\xc7\x8b\x94\xab\xd2\x84\x19\x71\xc8\x65\x1d\x47\xa7\x1c\x48\x4a\x3e\xf7\x24\x2d\xf4\x69\x70\xd1\xb4\x96\xa5\x73\xfe\x8b\xbf\x9d\x12\xad\x7f\x54\xe4\x42\xb3\xe7\xe4\x75\xc4\xc4\xba\xd9\xbf\x9f\xf8\xfe\x9c\x49\xef\xcd\xfb\x76\x68\x8b\xe7\x26\x8d\xe9\x3b\xaa\x4e\x83\xac\xe9\x8c\x24\x76\xa6\xa7\x00\xe3\x9b\x0c\x11\xfb\x11\x83\x79\xd1\x51\x25\x35\x92\x23\xc9\x33\x6d\xe8\x58\x12\xf6\x2c\x0c\x59\x51\x75\x83\x48\xc7\x21\x6d\xb8\x48\x43\x99\xe4\xcf\x9b\x37\x97\xd5\x5b\x74\xb0\xcc\xd1\x96\x8b\xbb\x5f\x1c\xb4\xe8\x80\x3f\xfe\x46\x5a\xb5\x1b\x1d\x47\x77\x6b\x26\x8e\xf9\xb4\xed\x91\x8e\xc7\x93\xd7\x1a\x30\xb5\x40\x31\x91\x67\x32\x9e\x00\x7c\x0b\x78\xa4\x89\x59\x4a\xb0\x62\x46\x85\x34\x6b\x43\x96\xd1\xb5\x90\x0d\x05\x9e\xd6\xb1\xab\xca\x3c\xcf\xba\x44\xe2\x6d\x54\x74\xe7\x99\x9c\x45\x5f\xbf\x77\xe9\x93\xc7\x5b\xe6\x37\x2d\x7b\xab\xfc\xbc\x2b\x9f\x77\x18\xcb\xde\x3c\xf0\xfb\x67\x1d\x0b\x1f\x9b\x7d\x24\x6b\xad\xca\x84\xab\x0c\x0c\x57\x20\x09\xde\x0a\x4c\x5d\x14\x75\x16\xf0\x1e\x4b\xf9\x8a\x4c\x62\x0c\x24\x91\x13\x3d\x39\x8a\x68\x9a\xb7\xd9\xd8\x95\xc5\x18\x2a\x96\x8d\x32\x11\x88\xf8\xc5\x6e\x32\xa7\xed\xca\x87\x0b\x1a\x5e\x6d\x5e\xf2\xda\xe8\x07\xcf\x1d\x4b\xed\x54\xfa\xd8\xc7\x9f\xe6\xbd\xbd\xb5\xf1\x32\xa6\xf1\xd9\x24\x0a\xee\xd2\x56\x28\x38\xae\x01\x42\xdf\x56\x20\x6b\x7a\x1a\x0f\x80\xa6\x59\xb4\x10\x41\x12\xb9\x8c\xe0\xda\x4a\x64\x31\x5e\x80\x4c\x85\x8e\xb5\x98\x42\xc2\x3f\x35\xe5\xdf\x05\xda\xd3\x70\xc4\x69\xa9\x63\xb3\x67\x1f\x9e\xb1\x40\x5b\x76\xad\xf7\x58\x30\xac\x8f\xb7\x87\xf8\xf0\xf0\x9d\x36\xcd\xef\x85\xec\xb2\x9f\x47\xb7\x6c\xd0\x33\xdb\xf4\x3f\xf6\x2c\xa9\xd9\x34\x79\x53\x6f\x0e\xcb\x74\x1c\xc6\x24\x07\x5c\x00\x63\x56\x80\xbe\x0e\x35\x37\x8c\x25\x12\x38\x34\x16\x82\x88\x34\x59\x97\x72\x00\xcd\x1a\x81\x1b\x99\x18\xd1\x9c\x9c\x38\x83\x96\x29\x70\xe3\xb9\x97\xfe\x2c\xf8\x7a\xc3\x13\xa3\x1f\xac\x1b\xf6\x7b\x8f\x6e\xfb\xce\x8e\x28\xf0\xcc\xbd\xd5\xb5\x3f\xbb\x91\x7d\xe8\xd4\x89\x35\x92\x17\x32\x0d\x45\x3b\x86\x9e\x46\x61\x33\x94\x1d\x84\x0d\x53\xe1\x3c\xd6\x8f\x22\xd6\x8c\x5d\x93\x44\x2c\x69\xe8\xae\x4c\x33\x48\x32\x3c\x17\x01\xd1\xc3\x6e\xe2\x90\x6b\xe6\xdd\xf0\xe2\x8a\xc5\x75\x73\x2a\x5f\xe3\x8e\xb3\xda\xa2\xc2\x6d\x97\xa4\xc1\xd7\x4e\xe4\xdb\x76\xf1\xbd\xf2\x8b\x9f\xed\xfc\xfc\xc0\x24\x8e\x6e\xc2\x90\x63\x2c\x44\x01\x93\x34\x09\x4f\xf6\x63\x8a\x25\x44\x6c\xe9\x08\x21\x1a\x53\x2c\x2d\x99\x01\xd0\x3d\x56\x34\xb9\x28\x80\x32\xf0\x83\xff\x32\x4e\xcc\x10\xf2\xa9\x67\xc9\xa9\xf1\xf4\x5a\xcf\xee\xfb\xb2\x74\xb7\x1c\x77\xfa\x94\xac\x5c\x2a\x5a\xbf\xe5\xd0\xca\x41\x5b\xaf\x7d\x5b\xa8\x7d\xe9\x23\x97\x93\x77\xb5\x5a\xb2\x88\x2c\x8f\x16\x18\x4d\x73\x62\x29\xf4\x43\x1a\x4b\x38\x8c\x04\x4d\x95\x34\x5b\x8f\x05\xc7\xf6\x65\x31\x8a\x25\x4a\x16\x34\x3d\x10\x69\x80\xc5\xc4\xab\x9c\xf3\x70\x93\x91\x73\xa6\x9c\xf8\xed\x93\x94\xde\x9f\xcf\x39\xdf\xe6\xf9\xbb\x93\xcb\x7c\xdc\x6b\xe1\xb0\x9d\xad\x60\xa3\x2d\x45\x7f\x5e\x9f\x44\x5f\x95\x80\x24\x4c\xd1\x37\x78\x1a\xea\xae\x2f\x31\xaa\x07\x90\x41\xf3\x6e\x14\x13\xbe\xa4\x68\x71\xac\x2a\x3e\x43\x42\x4e\x40\x8e\xa5\x10\x9c\xc8\x23\xf7\x1f\x78\xee\xdf\xb3\x90\xa7\xe1\xf8\xd3\x52\x2b\x4f\x2e\xfa\x2f\x99\xf5\xa6\xf6\xeb\x55\xdd\xba\x33\x7a\x2f\xac\x71\xec\xcd\x6d\xf9\x52\xb2\xad\xa9\x71\xaf\xcc\xb0\x3a\x5f\x37\xbd\xd8\xb5\x5c\xef\x09\x87\x5a\xde\x4e\xde\x3f\x54\x1d\xc5\xc3\x06\x54\x5d\x42\x43\x24\xc1\xf2\x2e\x11\x44\x16\xc5\x44\xe8\xaf\x17\xb8\xcb\xd3\x3e\x10\x1c\x36\x56\xd8\x88\x11\x7c\xc2\x0c\x4d\x1a\x67\xa2\xda\x91\xd6\x72\x72\x91\xae\x6c\xd1\x6f\x16\x51\x15\xa2\xb2\x57\x56\xcc\xcd\xbb\x4b\xac\xfa\x8b\xf0\xce\xd9\x03\xd6\xa7\xab\x1a\x3f\x53\xa3\x76\x12\xbb\xab\x56\x8c\x69\x4a\xe0\x7c\x1e\x69\xaa\x4c\x22\x9f\x96\x10\xcd\x93\x72\xac\x7a\x91\x4f\x85\x50\x0a\x5d\x0f\xd3\xb6\x1f\x85\x98\xd6\x62\x8d\x20\x60\x26\x33\xb5\x2f\x56\x3c\xff\x82\x75\xa4\x5e\x45\xcc\x8e\x48\x79\xad\xbb\x38\x6e\x52\x55\x21\x47\xa5\x3b\xf3\x07\xf9\x1f\x56\x7c\x6f\xec\x58\xe1\x68\xf2\xee\x56\x6c\x71\xb2\xab\x44\x52\xc4\xb3\x12\x64\x03\x83\x26\xb1\x14\xd2\x8a\xa3\x6b\x12\x65\xeb\xc0\x17\x75\xdb\x03\x6a\x2c\x30\x5c\x04\x5c\x95\x92\x24\x94\xc9\x0b\xf0\x6e\x8d\x0f\x2b\x7c\xbb\x3e\x28\x9b\xee\xcf\x28\xd4\x79\xe5\xe9\x0d\x65\x5b\xd4\xfb\x68\x55\xdb\x49\xb8\x4d\xa9\x7e\x37\x7b\xaf\x58\x53\x38\x79\x17\x95\x08\x2d\xd1\xf3\x00\xad\x45\x76\x0c\xad\x10\xc9\x08\xd3\x0c\x8f\x48\x0b\x2b\x76\x44\x8b\x02\x32\x91\x1b\x2a\x2c\xa9\x43\x5f\xa5\x99\x40\x62\xb8\x7f\xe8\xa1\x47\xf2\xfe\x6f\xa4\x94\xb4\xd4\x82\x79\x73\xfe\x4b\x11\x6b\x4e\x5f\x77\x68\x3c\x2a\xed\xb7\x87\x1f\xbc\x7a\x7e\xff\xae\x53\xcd\xf7\x2f\xbc\x99\x7b\xdb\xda\x93\x8b\xda\x6f\x28\x72\xe9\x7e\xf3\xe2\x95\x93\x97\x42\xff\x2a\x3b\x79\x22\xe2\x34\x91\xd5\x48\x4d\xd3\x1c\xa8\xc8\x2c\x23\x8a\x62\x28\x06\x24\xf6\x6d\x35\x10\x75\xd5\xc0\x31\xcf\x04\x36\x21\x21\xc1\x50\xb5\xc4\xea\x2f\xdd\x5b\x37\x7d\x7d\x10\xbe\xd4\xb1\x4f\xc3\x4f\xba\x36\xfb\xb2\x85\xd8\xb7\xe5\xc6\x42\x45\x66\xd4\x5b\x57\x77\xc1\xdb\x13\x4f\xaf\x3b\xf9\x41\x12\x39\xbb\x04\x1f\x42\x45\x67\x98\x28\xc2\xa1\xc2\x90\x26\x15\x4a\x71\x14\xc1\xc8\x22\xa5\x08\x3b\x02\xcd\xfa\x8c\xc3\xd8\x8e\xa6\xf8\x21\x15\xaa\x5c\x10\x27\xd0\x2d\xdf\x3c\x7b\xf0\xef\xed\x0e\xbc\xbf\x65\xf0\x03\xf2\x71\xae\x62\x5f\x4c\xe0\xaf\x0f\xf5\x43\x79\xef\xad\xcb\xef\x75\x1b\x5e\xac\xb1\x9d\xbc\x0e\x3d\xaf\x98\x1a\x56\x09\x47\x33\x28\xd5\x00\x46\x68\x73\x94\x46\x8b\x32\x08\x74\x83\xb3\x44\xd6\x63\x75\x06\xbb\x30\x8a\x91\xcb\x7b\x04\x4f\x85\x1c\x89\x32\x91\x96\xaa\xd1\xa0\x4b\x8d\x93\x85\xaf\x8d\xab\x5e\xe0\x60\xda\xca\x69\xfd\xf2\xb6\xa1\xdb\x74\xaf\x48\xd6\xd3\xfb\x6e\x3b\xdf\xb0\x56\xde\x3f\x72\x27\x11\x55\x46\x53\x94\x1c\xea\x82\xcf\x28\x91\xec\xe0\xd0\x31\x04\x2d\x30\xa0\x15\x99\x9a\x0e\x90\x68\x2b\x9c\x14\xf0\x8c\x17\xc7\x8e\x17\x10\xc0\x13\xfd\x38\x13\xa5\x91\x0b\x95\x5a\xf4\x28\xd2\xac\xc7\xe2\xde\xfd\xb2\x9f\x9a\xf6\xe1\x98\x62\x69\xef\xfb\xc5\x3f\x0f\x9f\x7d\x90\x33\x38\x59\xfa\x45\x7f\x61\xd6\x54\x8c\x12\x43\x6b\x08\xc1\x8a\x74\x1e\x03\xcd\x8f\x28\x5e\xa3\x90\xc8\x21\x87\xb7\x23\xe0\x92\x34\x15\xd2\x90\x90\x45\x82\x93\x43\x27\x94\x59\xa8\xb2\x32\x49\xc6\x6a\xe2\x7c\x98\xfb\xc1\x9e\x56\xe7\x7e\x5e\xf4\xe3\x7b\x0b\xc0\xe9\xe3\x2f\x16\x66\x0b\xfe\xb0\x7a\x6a\xdb\x1e\x65\xe6\x72\xb5\x06\xf6\x9f\xa4\xd4\x6c\x9d\xbc\x8d\x21\x47\x9c\xcd\x44\x48\x62\x10\x22\x49\x0f\x05\xae\x1f\x59\xc8\x16\x7c\x4a\x08\x79\x06\x79\x04\x25\xc7\x20\x62\xa1\xa0\x18\xb1\x6c\xb8\x96\x4f\x21\xfa\x89\xc6\xc7\xd3\x28\x4b\x69\x2d\xa6\xfd\x0b\x61\x50\x78\xea\xcb\xa5\x4a\x56\x38\xf4\x55\xdb\x29\xdf\x74\xfa\xb3\xf1\x82\xd9\x4e\xa5\x06\xf9\x4a\xcf\xbe\xd0\xb3\xcf\x6e\x71\xc0\x7d\x72\xd5\x8b\x49\x04\x3d\xcb\x41\x18\x49\x2a\x21\x23\xc7\x09\x1d\xd5\x57\x44\x9d\x91\x23\xc8\x2b\x4e\x40\xd8\x1c\x40\x52\x2c\x62\x36\x86\x9e\x0d\x2d\x10\x85\x36\x23\x38\x38\xf1\x27\x69\x37\xed\xdd\x79\xfb\x96\x2c\xf3\xe6\x44\x95\x07\xb6\x1d\x3e\xa4\xec\x89\x89\xfc\xbd\x21\x05\x7f\x5c\x48\xce\x7e\xe1\x72\xeb\x37\x88\x35\x49\x1c\x29\xd8\x81\x2c\x10\x14\x88\x62\x12\x60\xd7\x0a\x6c\xc4\x43\x81\x25\x75\xcb\x92\x54\x5b\x46\x41\x28\x1b\x38\xb4\x79\xde\xf2\x1c\x0f\xe8\xd0\x10\xe2\x4c\x6e\xd5\xb6\xe7\x96\x3c\x2b\xd4\x29\x35\xfb\xe1\x54\xf2\x61\xfa\xe2\x61\x7f\x94\xbf\xf6\xeb\xe7\x85\x97\x0c\xde\xdc\xe1\xe5\x94\x95\x75\x7a\x9c\x78\x33\x89\x30\x38\x89\xa2\x55\x52\x96\x0d\x4b\x95\x0c\xdb\xb6\xa0\x80\x6c\x49\x09\x05\x5e\x83\x1a\x47\x6a\xb4\x4e\x71\x58\x65\x89\x08\x53\x0e\x4b\xea\x84\xa1\x39\x62\xe2\xf4\xd2\xbb\x76\x8d\xfe\xc7\xca\x74\xee\xb3\xe7\x9d\x46\x27\x4a\x74\xed\x7a\x6a\xec\xa4\x31\x7f\xdc\xda\x5e\xf3\xcd\xb2\xcb\x3e\xac\x5b\x72\xfe\xf4\xac\x11\xda\x12\x13\x0c\xf5\x08\x05\x7c\x68\xc6\x61\xc4\x52\x0a\x19\x03\x4d\xa0\x5d\x68\x31\x82\xc5\xeb\x86\x11\x04\x8a\xa4\xda\x1e\xa9\x00\x9b\x0f\x28\xd9\x46\x80\x51\xb9\x27\x0a\xca\xa7\x51\xd9\xd2\x52\x8b\x0e\x4f\xf9\x97\x84\x73\xc9\x4b\x35\x0f\xa5\xea\x9b\x4e\x99\xe6\xe0\x29\xdf\x4c\x1a\xdf\xea\x8d\x17\x96\xbd\x39\x72\x0e\xf1\x0d\x22\xfb\xed\x6d\xd6\x6e\xc5\x5b\x49\x2c\x99\x2d\xf9\xaf\x6a\x92\x42\x88\x72\x02\x4e\x06\x1e\x24\x69\xc6\xf3\x14\x41\xe4\x4c\x4e\xc2\x46\x68\x01\x44\x58\x5e\x6c\x02\xcd\x71\x7c\x5b\xb1\x40\x26\xea\xf7\x51\xdf\xf5\x0f\xbf\xdb\xf8\xfa\xe7\xef\xee\x6b\x31\x7a\xf0\x96\x4d\x77\x2a\x8e\x5e\x9b\x52\xbd\x4a\xa3\x1e\x79\x53\xa2\x07\xfa\x7b\x7b\xbe\x4a\xde\xad\x0a\x5d\xc5\xb3\x35\x8c\x15\x08\x25\x9d\xe7\xb1\x62\x6b\x91\x68\xb3\x2a\x8c\x4d\x92\x30\x03\x96\xd2\x74\xc2\xb0\x49\xd7\x23\x00\x0f\x7c\xc3\xd6\xf9\x4c\x3a\xc7\x3c\xbb\x7b\xf3\xa0\x6f\xde\xda\x74\x71\xe1\xec\xc2\x87\x0f\xc6\xaf\x82\x25\x55\xf7\x5d\xcf\xbf\x20\xef\x36\x80\x7a\xbc\x5a\x62\x77\xd6\xc0\xcf\x89\x21\x4c\x36\xe9\x02\x00\x82\x58\x56\x81\xe4\xeb\x82\x2c\xbb\x1e\xe9\xb3\x7f\x2d\x2c\x36\x68\x07\x5b\xbc\xa6\x93\x94\x40\xf3\x4c\x40\x53\x14\x09\x7d\x22\x13\x51\x58\x77\xe1\x90\xa5\xcf\x37\x69\xd8\xad\xe1\xf6\x1d\xef\xa6\xef\x9d\xd3\xa3\xbc\x54\xab\xea\xce\xf9\x3b\x37\xc4\x53\xef\xc5\xf3\x9e\x6f\x78\x25\x89\x9d\x55\x95\xe3\x14\x8a\x09\x9d\x98\xd1\x22\x9f\xe3\xb0\x47\x42\xde\x50\xed\x58\x53\x28\x15\x9b\x36\xc1\x6a\xb2\x15\xd2\xb2\xca\x71\xac\x41\xc8\xae\xcd\xfd\x43\x04\xb9\x91\xeb\x7f\x23\x28\xa4\xb5\x18\x5e\x3c\x23\x98\xf2\xd7\xa5\xf9\xaa\x77\xf8\x70\x7f\xfb\xbd\xc5\x8e\xb5\x7a\x78\xe4\xe0\xd1\x83\x39\x4f\x0d\x9e\x55\x64\xfd\x97\xf2\xee\x1d\x65\x87\x9d\x59\x9b\x44\x32\xae\x45\xea\xb4\x41\x29\x9c\xc3\x89\x88\xd0\x65\x2d\x32\x45\x49\x06\x8c\xe4\x40\x1e\xdb\x81\xc9\x8a\x32\x27\x7b\x8e\xa4\x8b\x04\xe9\x12\x48\x8e\x01\xa7\x3c\x89\xf6\xbf\xdd\x09\x5f\x69\xd1\x2d\x7b\xb3\x7e\x77\xc6\xc0\x57\xca\xde\x7b\xae\x53\xf7\x11\x37\x1f\x8d\x4d\x9d\x9a\xfb\xf7\x4d\x47\xba\x4c\xd8\x37\x31\x79\x85\x8e\x1a\xb9\x3c\xa2\x68\x9d\x95\x3d\x5b\xd2\x59\x5b\x50\x18\x81\x0f\x23\x29\x8c\x63\x56\x80\x81\x4d\x6b\x1c\x19\x32\x90\x0e\xed\x90\x88\x74\x4f\x87\x28\x13\x44\x19\x98\xf5\xf5\xb2\xd4\xcb\xcb\x44\x38\xa0\x90\x76\xb4\xec\x79\x83\xe8\xba\xfb\xfb\x59\x35\xf0\xc6\xeb\xd3\xe6\x2d\x0e\xba\x9f\xee\x9e\xbc\x15\xa6\x48\x5b\x52\x81\x2c\x84\x02\x2f\x20\xd6\xa1\x4d\x60\x72\xb2\x60\x42\x52\x52\x6c\xc6\xa0\x28\x8f\xa5\x34\x1e\x98\x48\x0d\x7d\x8a\x13\x43\xd1\x75\x32\xc1\xed\x0d\x98\x5a\x3e\xfb\xa2\xf3\x0d\x27\xdf\x19\xdf\xe8\xab\xe6\xb5\xb7\x7e\xda\xad\x49\xe1\xf1\x64\x9d\xce\x1b\xd7\x9c\x7c\xa3\x48\x4a\xc3\x4d\x59\x9b\xc7\x26\x96\x07\xb4\xa1\x2e\x09\x1a\xc7\xb0\x12\x2b\x91\x66\xe4\xba\x80\x89\x91\xac\xbb\x1c\xa5\xf9\x22\x8d\x78\x1e\x1a\xb2\x04\x19\x5d\xd3\x00\x1f\x68\x88\xf9\x2f\x25\xe4\xbf\x49\x0a\x4f\xe3\xd9\xa4\xa5\x16\x9b\x9c\xd2\x3c\x23\x49\x21\xfd\x14\xff\x53\xf7\x60\x52\xfb\x0a\x63\x3f\x7f\x75\x71\xb4\xf2\xf8\xc9\xbb\x67\x8e\x1f\x18\x51\xb4\xc7\x90\xd1\x17\x9e\x2b\xff\xf2\xbe\xf1\xc9\x4b\x9e\x8a\xc1\x92\x3e\x16\x29\x8f\x17\x44\xd5\xf6\x64\xdb\xd0\xc2\xc0\xf5\x0c\x3f\x72\x05\xd7\x8a\x30\x11\xbb\x92\x23\xf8\x84\x1f\xa1\x28\xd6\x03\x60\xc0\x4c\x54\xe0\x2e\x18\x8f\xee\x9c\x1c\x57\x7a\x46\x93\x7e\xaf\x89\x0f\xea\x9d\x1c\xd8\xf6\xab\x6c\xbd\xbb\xe4\x5f\x0e\xbf\x5a\x79\xe8\x50\xd7\x5b\x83\xe6\x25\x11\xeb\xa4\x4b\x8e\xe4\x87\x12\xb4\x39\x14\x00\xde\x8e\x69\x4a\x41\xb6\xa6\x49\x18\x60\x5f\xd4\x63\x00\x1d\x5e\x0d\x68\xe4\xb9\x9a\xe4\x0a\x81\x88\x88\x4c\x50\x38\x9b\xa7\xaf\x38\xfe\x50\x10\x2b\xdd\x4b\xff\x78\xc6\xe7\xf1\xc4\x66\x4a\xcf\x1f\x99\x19\x1f\xb4\xe9\x30\x53\xcf\x79\xeb\xc8\xd5\x71\x59\x13\x57\x4d\x3c\xe3\x91\x54\x91\x25\x69\x4f\x0f\x02\xcb\x71\x22\xce\x15\x65\xc4\xeb\x94\x0e\x58\x20\x39\xbc\x24\x99\x91\x43\x63\xcc\x03\xcf\x30\x18\x4b\x70\x84\xff\x53\xbc\x4d\x00\xa6\x6c\x19\x71\xcf\x83\x11\x9a\xf7\xfc\x9b\xb3\xb7\x4d\x4a\xdb\x96\xef\xa7\x7d\x5d\x5e\xbd\xfa\xc1\x27\xc5\x4e\x36\x1e\xb9\x20\xdf\x83\x93\xc9\xab\xce\x0c\xc1\x63\x54\x2c\x53\xba\x19\x00\x89\xb5\x3c\x12\x1a\x11\x6f\x30\xae\xac\x21\xd3\xe3\xe4\xc0\xb5\x08\x99\xc7\x11\x32\x0c\x64\x11\xb6\x07\x23\x9c\x89\x97\xc3\x2b\xed\x5a\x4b\xd9\xf6\xb7\x19\xf0\xab\x55\x77\x4a\xd5\x99\x67\x86\x5c\xbd\xfd\xf2\xcd\x78\x58\x45\xad\xc7\x6f\xb9\x52\xea\x3f\xea\x93\x35\xdc\x5e\x62\x69\x22\xe0\x1b\x06\x36\x29\xe8\x86\xd0\x20\x48\xc5\x03\xba\xeb\x91\x51\xac\x43\x9f\x55\x2d\x59\x14\x21\xf4\x74\x96\x62\x69\x46\xfe\xab\x68\xb0\x24\x2e\x13\x2b\xf0\xb2\x8f\x2f\x3b\x25\x2a\xb5\x9f\xd9\xf2\x85\x39\x33\x5b\x4f\xf9\x6e\x45\xd7\x41\xc7\x2f\x66\xbb\xff\xf6\xcf\x2d\xb4\x0f\x16\x95\x42\x45\x2a\x24\x51\x60\x55\x35\x03\x85\x01\xc0\xb0\x74\xc8\xb1\xae\x0b\x20\x0f\x44\x1b\xba\x11\x70\xd8\x50\xb2\x19\x95\x11\x45\x4c\x22\x59\xd1\x18\xd1\x93\xe4\x08\x23\xe1\x89\x79\xc2\xd3\xa8\x79\x69\xa9\xb9\xb2\x57\x6e\x96\xb1\x4d\xf3\x7d\xfb\x5b\x9b\xe0\xed\xf7\xfb\x8c\x6e\x9b\xb2\xb7\x44\xeb\x6d\x53\x3e\xde\x5e\xe6\xdd\xf5\x43\x2e\xa9\xcc\x98\xe6\x57\x76\xb5\x58\x95\xcc\x2a\xdf\xd3\x65\x55\xa7\x79\x45\xe1\x78\x8b\x41\x94\xa6\x98\x84\x0e\x09\xde\xc2\x2e\xaf\x40\x89\x0f\x39\x1d\x49\x8e\x41\xaa\x32\x88\x03\xc5\x71\x31\xa7\x27\xfe\x28\x70\xbe\x79\x65\xf8\xda\xb1\xaf\xff\x38\x4f\xff\x73\xda\x0b\xb7\x6a\xb8\xf7\xaa\xee\xbc\xf0\xe2\xce\x89\xb7\xea\x2f\xb0\xab\x96\xdc\x72\x35\x79\xfb\xc8\x54\x78\x87\x27\xa2\x38\x56\x89\x58\xa2\x0d\x96\xa4\x65\x43\x8c\x91\x28\xd0\x2a\x65\xbb\x41\xe0\x88\x0c\xa9\x45\x0e\x23\x70\x46\x44\x39\x22\xd2\x81\x9c\x38\xe4\x15\x77\x06\x0c\x6c\x32\xf8\x7d\x42\x7b\xb5\x16\xcb\xe4\xef\xf2\xf8\xd1\x81\x75\x6d\x6a\xcc\xe9\x73\x2e\xa8\x74\x35\x38\xfa\xc9\xf1\x61\x49\x5c\x65\x07\x48\x06\xef\x73\x9c\xe6\xca\xa4\x27\xc4\xb6\x11\x61\xda\xf5\x45\x80\x18\x17\xf9\x6a\x68\x20\x24\x44\x16\xf0\x00\x30\x48\x0b\x58\x36\x09\x33\x01\x53\xfe\x52\xa1\x80\xfd\xd1\x4f\xa3\xbe\x7f\x25\xcf\xde\x56\x93\xcd\xe5\x37\xc9\xb7\x57\xe6\xcd\xf1\x4e\xf5\xbd\xe8\xe0\xb9\x1c\x5b\xce\x6c\x4f\xa2\x80\x1d\xc4\xa6\x27\x99\x01\xb6\x30\xd0\x68\x28\xdb\x8e\x8f\x18\xec\x90\xa1\x4e\xd2\x2c\x4f\x0b\x0c\x76\x63\x97\x03\x86\x22\x98\x98\xc4\x21\xa6\x22\xa8\x27\xce\x89\x05\xc6\x2c\xbb\xda\xff\x6c\xf3\x42\xb9\xeb\x3f\xdb\x7f\x5c\xce\x26\xe4\xc3\xed\xdc\xcd\xb1\xbb\x66\x5d\xbb\xf5\x55\xc7\x67\x7e\xf9\xb6\x54\xf2\x5c\x92\x78\xd1\x90\x3d\x86\xf2\x59\x8d\x01\x42\xec\x7b\xd0\xe2\x6d\xde\xe5\x2c\x47\x20\x63\x3f\x64\x18\x5d\xa0\x28\x20\x70\x8e\xe2\x68\x86\xab\x01\xd2\x8c\xec\x7f\xfa\x1e\x7f\x7b\x57\x3e\x8d\x1a\x9b\x96\xfa\x51\x4a\x4a\x5a\x46\xa7\xad\x4e\x1f\x96\x28\x76\x75\xf8\x91\x65\x13\x97\x2e\xec\xc0\x3b\xb7\x9a\x0e\x2d\xfe\xf2\xfc\x70\x4e\xab\x9e\x9b\x6e\x95\x1f\xca\x4c\xdc\xf3\x4e\x12\x07\xdf\x8c\x0d\x04\x17\xdb\x08\xd3\x9c\x1a\x03\x5e\x15\x08\x5f\x02\xba\x6a\x61\xde\x63\x38\x06\xe3\x98\x11\x6d\x93\x02\x01\x6f\xc6\x34\x16\x44\x59\x48\xe0\xb4\xd5\x7f\x41\xdb\x7e\x33\x77\x1f\xea\x52\xd7\x6b\x35\xe9\x05\x76\x6a\xa1\xae\x8b\xa6\x94\x2b\xd8\x70\x6b\xcb\xd9\xf6\xe5\x6b\xaf\x3c\x57\x6b\x74\x12\xf9\x8a\x41\x1c\x43\x99\x89\x48\x99\x54\x21\x27\xc8\x26\xc5\x7b\x0a\x0b\x1d\x10\xd0\x2e\x8f\x59\x39\xb0\x99\x30\xe6\xc9\xc0\xa7\xdd\x30\xd4\x01\xcb\xaa\x99\xc8\x95\xf6\x2e\xb2\xb4\xf5\x85\xf0\x60\x3b\xeb\xeb\x6b\xd3\x5f\x2a\xf9\x72\xdb\x87\x43\xee\x4f\xfd\x32\x9e\x51\xbf\xfe\x1b\x1b\x66\xd7\xbb\x36\x29\x79\xa8\x44\xce\x25\x08\xc6\x0e\x79\x1b\x0a\x9e\x24\x89\x8c\x43\x19\x94\x10\xd2\x32\xad\x63\x87\x34\x0d\x64\x39\x06\x24\x81\x44\xf0\x01\x8e\x7d\x1a\x2a\xaa\x08\xa8\xc4\x92\x05\x2f\xdd\x6b\xdc\x26\x65\xf1\x6a\xfb\xd6\x20\x30\xf7\x08\xd9\x73\xe8\x86\x2f\xbd\x72\x77\xca\xfd\x94\x36\xe8\xa3\xd5\x05\x6f\x14\x98\x96\xbc\x1a\xf1\xaf\x67\x9f\xee\xd2\x2c\x24\x6d\x0d\xc7\x32\x4f\x4a\xb4\xaf\x46\x8a\x8e\x64\xc2\xc0\x11\x2b\x13\x94\x65\x2a\x81\xe1\x86\xa2\x49\x28\x54\x2c\xe2\x00\x71\x4f\xb6\xad\x0f\x6d\x29\x5b\xb4\xc8\x95\xc3\x63\xa2\x3e\x78\x4c\x85\x6c\x63\x3f\x44\x6d\xfa\xa7\x5c\x1d\xff\xf8\xf6\xce\x2d\x9d\x9a\xbc\xd5\xf6\xd6\xf5\x24\x36\x69\x3c\xcb\x01\x2c\x4f\x41\xde\x51\x0d\xdb\xb0\x79\xdb\xb1\xc4\x90\xf4\x82\x50\x55\x75\x41\x34\x42\x5e\x71\x42\x3f\x88\x40\x4c\x4a\x32\xe3\xeb\x3c\x99\xc9\x38\xf8\x19\x74\xe1\xc4\xfd\x2e\x6b\xdf\x1e\xb7\xa9\xfa\xf5\xe2\xea\x89\x39\x0d\x73\xfc\xc1\x56\x14\x6a\x5f\xce\xdf\xb9\xfa\xd1\x96\xb7\x2a\x9f\x48\x22\x5e\xcf\x8c\x10\x41\xab\x51\x2c\x28\x91\x40\xe8\xba\x41\x08\x3c\xc3\x46\xba\xee\xf2\xbc\xe4\x41\x95\xf7\x15\x46\x66\x63\x52\x14\xb1\x1b\xc4\x14\x56\xdd\x7f\x3a\xed\x7f\xab\x4d\x3f\x8d\x45\x9f\x96\x5a\x34\x25\x67\xbd\x8c\x7d\xa5\x02\x23\xa5\x6e\x1f\xcf\x59\x6b\x8e\xee\x5a\xfb\x97\x73\x57\xfa\x3c\x37\xf2\xe4\xe1\xad\x17\x1f\xd6\x3e\xaf\x8c\x1e\x5b\xf9\xfd\x33\x03\xb3\xe6\x07\x9d\x30\xb1\x30\x9e\x64\xea\x06\x2d\x32\xc0\xa6\x43\x5a\xc1\x84\x2b\x61\x05\x8b\x6a\x0c\x22\xd2\xa0\x81\x6d\xc5\x22\x45\x41\xda\x06\x12\x82\x2c\xa5\xc9\x2c\x69\x65\xa2\xd5\x2f\xdf\x48\x79\x9f\x49\x1d\xf4\xc1\xab\x73\x1f\x7d\x79\x2c\xf7\xfd\x8a\x1f\xf6\x7b\xd0\xee\x84\x53\xa4\xce\xed\xe6\xdb\x8f\xee\x9a\x34\x2d\x89\xc0\x72\x09\x1b\x50\x74\xa0\x6b\xd0\xb6\x46\x03\x56\x24\x28\x0e\x31\xbc\x4c\x8b\x9e\x87\x68\x9a\x35\x05\x42\xa7\x2d\x53\x07\x96\xaf\x42\xa8\x4a\x84\x6a\x3e\xd9\x11\xf8\xe4\xc0\x0f\x5f\x7d\xe5\xf3\x93\xe7\xad\xd6\x2b\xb7\xa8\x74\xa6\x7e\xd0\x62\xe3\xda\x4f\xb9\x7e\x7e\xea\x4b\xfc\x57\xe7\x72\xd1\x43\x93\x77\x9f\x5a\x90\x67\xa9\x48\x41\x34\x29\xb1\xa6\x00\x02\x3d\xf0\x99\x48\xd0\x08\xd9\xe5\x04\xd3\x93\x64\x31\x92\x54\x15\x09\xbc\xcd\x46\xc0\xf3\x11\x1f\x81\x4c\x9c\xcc\x4a\xbb\x9f\x4c\xa8\xba\xa7\x40\xe9\xbd\xed\x46\x6f\x1d\x07\x8d\x86\xbd\x1a\x2a\xfe\x1b\x23\x6b\xe5\x7b\x7b\x7c\xc3\x25\x8f\x1e\x74\x2e\x90\xbc\x4d\x41\x21\xde\x63\x09\xa4\x78\x22\xe0\xa3\x90\x76\x11\xd2\x14\x53\x33\x3c\x95\xb4\x98\x48\xd5\x22\x11\xc6\x0e\x16\x49\xe0\xc5\xa1\xc6\x62\x55\xcf\xb4\xd0\x3a\x7b\xfa\xb3\xfb\xdf\xe7\x6b\x5b\xec\xf1\x54\xed\xd5\xe1\x1b\x17\xd4\x4f\x5f\xb6\xb5\x51\x4b\x36\xc7\x0f\x6f\x7c\x35\x79\xf9\x73\x3b\x97\x65\x0d\xad\x97\xf0\xf1\xa9\x53\x7f\x95\x29\xba\x48\x8b\x3a\x10\x24\x9d\xd7\x14\xd9\x8f\x42\x10\x49\x9a\x69\xea\x8e\x67\x38\x0a\x04\xb1\x80\x08\xdb\xf1\x75\x5e\x51\x03\x45\xfb\x47\xd8\x78\x46\x83\xff\x44\xbb\xfe\x1d\xa5\x21\x5d\xc1\x7f\xbc\x7d\xea\xaa\x17\x26\x9e\xce\x36\xde\x7c\x75\xed\xc9\xd3\x3b\xc2\x77\xce\x54\xb3\x8a\xb7\xca\xdb\x7a\x6b\x5a\xea\x9d\xc7\x8f\x1f\xcf\xac\x94\x51\x25\x63\x75\xf9\xe7\xf7\x16\x1f\xb5\xec\x14\xaa\xbc\x65\x61\xf7\xb3\x3b\x47\x56\xf9\x7a\x08\x39\x70\xc5\xf9\x03\x3f\xf7\x95\xce\xdd\xde\x95\x77\x44\xc6\x5f\x17\x1f\x57\x61\x7f\xa7\x01\xa7\x4e\x8d\x79\x66\xf2\x74\x32\xfb\xa3\xad\x27\x3b\x3d\x38\x3b\xe8\xf7\x9d\xd1\xe3\xc6\x43\x3b\xea\x67\x26\xfe\xeb\xd7\xbd\x16\x5d\x3d\xcd\x55\x03\xab\x6e\xa7\xd7\x3b\xdd\xf8\x85\xa2\x39\xe7\x8f\x69\x3d\xe7\x7a\xb5\x1e\x43\x26\x7d\xb8\xfc\xed\xad\x87\xcf\xbe\x90\xf1\xd7\x52\xd3\xb5\x45\xe6\xed\x2f\x5e\xb0\x53\xdb\x8e\x75\x97\xe5\x39\xf9\x78\xf2\x1d\x07\xaf\x79\xe3\xfa\x34\x73\x1d\xbd\xb7\xff\xfd\x5f\xc6\xfe\x4b\x36\x31\xf5\x7c\xbe\x1b\xbb\x6b\x9e\x93\x7f\x9d\x65\x0f\xb8\xf6\x53\x8e\x5f\x53\x4a\x7e\xbb\x74\xfd\xe7\x1d\x57\xae\x19\xf9\x9d\xde\xa5\x7d\xc7\x0c\xea\x1e\x29\x7b\xfb\x2f\xfc\xa8\x56\xb9\xb5\xc3\xd5\x21\x6f\xd7\x0a\x57\x14\x79\x90\x0d\x7f\xf0\x5a\x5b\x6d\xec\x2a\xd0\xaa\x44\xbf\x3b\x0f\xcb\x27\x91\xdf\xa8\x88\x81\x03\x08\xca\x45\x3e\xe9\xbb\x50\x60\x64\x4c\xd3\x86\x4a\xd3\x8c\x4e\x31\x34\xc1\x9a\x0e\x6b\xf0\xb4\x80\x18\xc6\x83\xa2\x4d\x59\xd2\x7f\xb9\x9f\xfd\xf3\xb6\x6d\x71\xe6\xc6\x9a\xfc\x2f\x09\x65\xdf\xbf\x3d\xbd\x6c\x63\x39\x57\xff\xd7\x77\x66\x5b\x3d\xed\x7a\xf1\x67\xe7\x45\xf9\x26\xe7\x7a\x94\xb5\xf6\x64\xc2\xa3\xc2\xd1\x2e\xa6\x31\x44\x81\xac\x93\x1e\x2f\xff\x75\x23\xc8\x9c\xe2\x42\xc4\x91\x98\xd1\xb0\x6f\x2a\x30\x54\x03\xcb\xe4\x59\xc8\x53\x16\xcf\x18\x44\x02\xd9\xdd\xf5\x6d\x0b\xad\x49\xe9\x2d\xbf\xf4\xbb\xe0\xa7\x7f\x36\x6c\xf6\x92\x53\xfd\x72\xf9\x66\xcd\x67\xe4\x97\x3e\xec\xdf\x25\xef\x9a\x29\x4e\xf2\x92\x91\x4a\x71\x8c\x86\x63\xd5\xe5\x3d\x1d\x7a\xac\x4d\xa8\x36\x22\x0c\x81\x0e\xed\xd0\xa4\x21\x2f\x2b\x84\xaa\x78\x1e\x06\xaa\x13\x05\x90\x0b\x5d\x0b\x65\x22\xcc\xc4\x4e\xee\x54\x6f\xb5\xda\x77\xf7\xab\x8b\xcb\xb4\x59\xb9\x34\x14\x26\x9e\xfa\x6c\xd0\xea\x6f\x3f\x1b\x46\xcf\xcb\xfe\x56\xf5\xdc\x7f\x96\x4a\xde\xc9\x36\xc4\x38\xf0\x29\x43\x57\x7c\x5b\xa4\x3d\x3f\x30\x2c\x10\x30\x58\x15\x14\x33\x08\x49\xde\x84\xa6\x8a\x1c\x5f\x89\x4d\x28\x10\x76\x10\x61\x09\x23\xf0\x64\xba\x9f\x79\x75\xf1\xec\xea\xfd\xf4\x67\xb3\x75\x5d\x3b\xeb\xda\xfe\xfa\xc6\x8f\x0b\xcd\xe1\xfb\x2b\x8f\xbd\x38\xfd\x61\xde\xfa\x3f\xc0\x63\x75\x93\x38\x42\x60\x79\x89\x20\x44\x3f\x0c\x25\x6c\x07\x1e\x2f\x02\x49\xa3\x05\x83\xe6\x75\xdf\xf0\x08\x06\x30\x9e\xc8\x33\x86\x09\x3c\x0a\x86\xa1\x4b\x8a\x84\x2a\x66\x22\x1e\x39\xf7\xfc\xe9\x47\x35\x1a\x7d\x52\xe1\x71\xe7\xdd\x7d\x0a\x3d\x5b\xb5\xd5\x73\x65\x26\x3e\x33\xf7\xbd\xa2\xc2\xc8\xc5\xb3\x5e\xbc\x4e\xa6\x8f\xc9\x70\x40\xbb\xac\x5d\xd7\xf7\xc5\xed\x5b\x3f\x6d\x7a\xf9\xc4\x29\xf2\xdb\xec\xf1\x2e\x7f\xa7\xfe\x72\xa5\xb5\xb3\xb6\x5c\xbe\xd4\xfd\x63\xeb\x58\xf3\xe4\x7d\x8f\xd8\x67\x7d\x93\x57\x29\x29\xb0\x48\x96\x83\x4c\x88\x90\xc5\xbb\xb2\x06\xdd\x88\x0f\x5c\x15\x28\x8e\xa8\xdb\x1e\x82\x96\xa0\x90\x0e\x63\x4a\x41\x0c\x9f\xfc\x1e\xf2\x9f\x79\x75\xf1\xe6\xbe\x5d\x0d\xc9\xeb\x7d\x3e\xb7\xf2\xde\xda\xb7\x67\xf8\x47\x97\x1e\xdd\x1e\x9e\xde\x30\xde\x16\x16\x1a\x99\xc4\x4e\x4e\x8c\x6c\xdb\x93\x45\xd1\xa5\x6d\xc2\x76\xad\x90\x46\x3c\x1b\x51\xc0\xd5\x30\x1f\x47\xba\x2a\x70\xbc\x4d\xa3\x10\x59\x12\x32\x74\x91\x60\xd9\xff\x6b\x15\x67\xcc\x27\xca\x52\x73\x50\xf9\x7a\x45\x86\xb7\xe8\x7e\x73\xe0\xf6\x83\xad\x2f\xce\x28\x7d\x9a\x79\x43\xcf\xb7\x23\x85\x78\xd6\xa0\x37\x3d\x1a\x94\x44\x48\x13\x06\xc0\xc0\x28\x56\xcc\x38\x52\x3d\x42\x47\xb1\xe2\x40\x97\x62\x19\x46\x23\x22\x91\xe0\x5c\x3b\x90\x10\x4b\x0b\x88\x55\x9c\x58\x11\x6d\x52\xd3\x12\x1f\xd0\x22\x0d\xbf\x7f\x67\xca\xa8\xcd\x1d\x9f\x9d\xf2\xe2\xf8\x3a\x3d\xeb\xda\x5b\x86\xe5\x2b\x34\xe1\xf2\xdd\x2e\x52\xbd\xa5\x3b\x77\xb6\xbf\x9a\x35\x6c\x47\x26\xbc\x7f\xc9\x74\x22\x8a\xe0\x75\x97\xb6\xcd\x48\x8c\x6d\x49\xf2\x0c\x5d\x51\x79\x9e\x67\x0d\xde\xc6\x01\x1d\x90\x26\x2b\x3a\xd0\x44\xae\x4d\xd3\xa4\x1b\x3c\xb9\x21\x04\xf2\x9d\x0f\xca\xe4\x18\x93\x7e\x33\x67\x95\x11\x55\x94\xa2\x1f\x9d\x19\xff\xed\x17\x33\x57\x75\x01\x39\xa7\x0c\xb8\xf8\xea\xae\x66\x44\x12\x33\x36\x45\x20\x18\x99\x01\x47\xd1\x42\xcc\x02\x53\xb1\x6c\x9e\x05\xa1\xe1\x84\x2e\xcb\x46\xae\x20\xbb\x16\xa4\x42\x55\x51\x0c\x47\x84\x1c\xad\xf0\x0e\x4c\x5c\xf1\x56\xbb\x5d\xa5\xc5\x90\x52\xcf\xa3\x3f\x4a\xee\x3d\x57\x84\x7a\x3c\xc3\x1c\xf0\x30\xdd\x53\x87\x20\xa7\xdd\xeb\x83\x1f\x8b\xc7\x0f\x25\x11\x48\x6b\x92\xaa\xa0\x88\x52\x2c\xf2\x52\xc4\xd0\x2a\x66\xcc\x88\x0c\x49\x16\x53\x04\x47\xc5\x26\xa9\x28\x1e\x6f\x04\x08\x13\x48\xb5\x23\x89\x27\x8c\xff\x82\x78\xfe\x43\xc7\x4d\x1d\xf9\xe0\x8f\x43\x6a\x9d\x0f\x7f\x37\xc2\xd2\xe7\xaa\xd5\x19\xfb\xca\xf1\x63\xd9\x5b\x4d\xfb\xf6\x71\x03\xeb\x3e\x95\xef\x78\x12\xa5\x2e\x74\xc3\xa6\x1d\x86\x14\x45\xc7\xb7\x79\x19\xea\x8c\x11\x79\x96\x8a\x64\x47\x96\x55\x02\x63\x12\x09\xae\x11\x78\x22\xc3\xc9\x9e\x45\xda\x22\xaf\xab\x6e\x26\xf2\xb2\x95\xfa\xcc\x2b\x72\xe1\xe6\x56\x2b\xc7\xf8\x13\x0b\xfb\xbc\xf7\x9a\xdf\x22\x9e\xbe\x7d\xf2\xa1\x3b\x0d\xda\x7b\xad\x0e\xa4\xbd\xb7\xea\x8b\x8c\xbf\xfe\xd9\x9b\x70\x65\x42\xa1\x51\xdd\x16\xdf\x6b\x6d\xd4\xfc\x7c\xc8\xc2\xcd\x4b\x9b\xbc\x3e\x38\x4f\xcb\x36\x5a\xf0\xe7\xc4\xdb\x27\xc0\x87\x19\x12\x66\xeb\xcd\xe9\x6b\xae\xc5\x8d\x5f\xbc\x3e\x33\xaf\x9f\xe7\x54\x8b\x5c\xad\xb7\x5d\x61\x26\xbd\x78\xc5\x7f\xd8\xa2\xea\x82\x75\xab\x1f\x25\x91\x50\xcd\x42\x24\x00\x64\xd9\x2c\x11\x49\x81\xa4\x33\x0c\x4d\x46\x02\x07\x58\x1b\xdb\xbc\x2b\xd0\x32\x4d\x8a\xbc\x26\xb1\x41\x48\x78\x16\x8f\x08\x19\x13\xde\x93\x25\xc2\xfb\x8d\x6f\x6c\xec\xdb\xab\x4b\xe7\xe5\x2f\xe7\x3e\x38\xb5\xe9\xf2\xfd\xd5\x5b\xe4\x79\x63\xb6\x71\xf4\x33\x77\x43\xbd\x3b\x5f\x9d\x18\xd5\x35\x79\x5f\x4f\xb2\x69\x22\x80\x16\xe2\x7c\x10\x31\xa2\x42\xa8\xaa\xae\xa9\x22\x0e\x35\x0b\x05\x34\x0e\xa1\x12\x08\x3a\x08\x65\x9d\x95\x64\x8e\x94\x19\xa4\x09\xda\x93\x09\xf3\xe6\x37\x1f\xff\xba\x77\x75\xeb\x5d\xdc\x6f\x85\x47\x4c\xdb\xaf\xe4\x7f\x9f\xba\xd4\x64\xff\x9f\xf6\xd4\x7e\xbf\x7d\x93\xb3\x74\xb7\x0f\x92\x88\xb4\x75\x14\xdd\x76\x2c\xc5\x0f\x0c\x42\x89\x24\xc1\x22\x5c\x9d\xb6\x63\x8e\xd1\x34\x00\x3d\x23\x08\x55\x1d\x40\x27\xa4\x65\x93\x8a\xa9\xc8\x04\x40\x14\x32\xb1\xdd\x6a\x53\x7a\x68\xd5\x66\x35\x1a\x4c\xdb\x51\xa4\x84\x31\x2a\x9e\x9a\x5e\xb6\xd5\x98\x6c\xf4\xa3\x8b\x1d\x07\xed\xd9\x5e\xd4\x5c\xd5\x33\x6b\x28\x83\x84\x19\x28\x88\x09\x89\xd3\x02\x83\x0f\x79\x12\xfa\xb6\x60\xda\x0a\x16\x78\xda\x31\xc2\xd8\x36\x00\x61\x49\x14\xa5\x85\xa1\x11\x8b\xb6\xaa\xba\x9c\x42\x41\xc7\xca\x44\x59\xf0\xce\x5b\x79\x8f\x9f\xe8\x38\xaf\xdc\xb1\x39\x3f\xcf\x4f\xfb\x65\xf7\xf4\xee\x9b\x2a\x54\x2f\x60\x74\xaf\xf3\xdb\xaf\xf5\xae\xdf\x7c\xb3\xf8\xb4\x0c\x7f\x30\xff\x37\x2f\xde\x7e\xe7\x60\x9d\x1f\x17\x34\xfd\x63\x63\xdf\xb5\xee\x35\xe0\xb4\xa8\x74\xe4\xcc\x17\xab\xef\x77\xe4\x36\x5e\x9e\xb2\xae\x50\x12\x79\x48\x88\x8a\x78\x82\xd1\x8d\x20\x76\x78\xcd\x61\x35\x2e\xd0\x09\x0b\xaa\xae\x24\x20\x28\x10\x8c\xa9\x3a\x06\xa4\x24\x97\x51\x54\x95\x8d\x2c\x55\x56\x33\xd3\x97\xc6\x0b\x16\x3f\xf7\xfb\x0f\x8b\xc4\x7d\xbf\xbc\xfc\x55\xb5\x45\x9b\xee\x59\x9b\x99\xb5\x85\x27\x56\xed\x74\x73\xfb\x81\x49\x2f\x0d\xbb\x72\x34\x43\x42\x7e\x76\xda\x1e\xaa\x04\xd7\xaf\xd0\xdd\xa1\xfd\x37\xa9\x39\x47\x17\x9d\x3e\x3e\x65\x79\xfe\xb5\x63\x1b\xfc\x3c\x30\xfd\xe5\x12\x5f\x30\x59\x1b\x99\x27\x3c\xd2\x14\x13\x33\x1a\x26\x14\xe4\x92\xbc\xef\xf1\x16\x0f\x39\x46\xe4\x55\x22\x16\x68\x4e\x0b\x69\xd2\xf7\x1c\x2c\x70\x10\xa8\xc0\x37\x6c\x9b\x33\xc9\xff\xb8\x90\x65\x3c\xd2\x6d\x52\x2b\x0d\x97\x6e\x2e\x3f\xf5\x6e\xd3\xf7\x0e\x5e\x9b\x32\xad\x01\x57\x69\x4e\x19\x66\x7f\xc5\xe5\x63\x1b\x78\xbd\x2b\x3f\x7e\x71\x6a\xf2\x6e\x68\x04\x35\x4d\x07\xd8\x25\x75\x2f\xd6\x65\xcf\x0a\x75\x87\x37\x02\x6c\x0a\x6c\x2c\xc6\xa1\xcb\xb0\x91\x6e\x68\x96\xa6\x68\x38\x14\x69\x24\x32\x8a\xad\x24\x16\x6c\x2e\xba\x6a\xde\xbc\x7c\x5d\xbf\xe5\xa6\x28\x0f\xfa\x5b\x8f\x8e\x77\x18\xdd\x7f\xce\xa1\x4f\xae\x6c\x6a\x39\xfb\xcf\x82\xc5\xd3\x07\x35\x19\x9b\xbc\x90\x63\xd2\xa3\x20\x08\x5c\x2f\x96\x35\x4a\xb5\x19\x43\x97\x5d\xc5\x27\x80\x42\x47\x12\xa1\x52\x1a\xe0\x38\x1d\x19\x06\x0f\xa0\xa6\x5b\xb4\x23\xf0\x80\x7f\xf2\xca\xeb\x52\x63\xdd\x37\x05\x9f\x6b\x97\x33\x7b\xcd\x3e\x65\xaf\x2f\xdb\xd1\x75\xeb\xa4\x4f\xc3\x16\x83\xa6\x4d\x7d\xf9\xdd\xca\x53\x77\x75\xbb\x97\x35\x96\x6c\xe2\xd9\xb7\xe8\x33\x20\x32\x18\x9f\xa3\x24\x51\x71\xa1\xa3\x06\x8a\x2c\x33\xac\xe6\x45\xa6\x65\x4b\x9a\xca\x62\xda\xc4\x1a\xc9\x87\xa1\x8a\x62\xcb\xe1\x41\x82\xa2\x78\x77\xcb\x23\xc3\xd6\xae\xb9\x5b\xf8\xe6\xc2\x81\x9f\x7c\xd9\xef\xc7\x2a\x7e\xf3\x75\x8f\x88\x8a\x63\xdf\xff\xe1\x54\xde\x89\xc5\x67\xdd\xc9\xda\x86\x48\x8c\x20\x86\x84\x43\xc7\x31\x83\xfc\x88\x82\x14\xf7\xd7\x0a\x1b\x21\xed\x9b\x96\x0a\x8c\xc8\x08\xb1\x87\x45\x5f\xa2\x81\x1b\x11\x3a\xcf\x50\xa1\x23\xbb\x6e\xe2\x1a\x28\xb5\xc0\x77\x75\x06\xc9\x87\x66\x64\x9b\xbf\x79\x6c\xb9\xc7\xd3\x7f\xfd\xed\x8a\x85\x0a\xbc\x7f\xa4\xcc\x95\x77\x3f\xcd\xdb\x70\x5e\xb9\x15\xc9\x3b\x72\x44\x20\x29\x16\x64\x8c\x90\x12\x43\xe4\x93\x3a\x8b\x19\xdb\x57\x02\x9e\x56\x98\x28\x32\x64\x0e\xc9\x8e\x26\x87\xb1\x65\x8a\x14\x72\xd4\x58\x8e\x49\xe7\xc9\x23\xa7\x6e\xfb\x6c\x66\xba\x7c\xad\xe8\x21\x0e\xad\x07\x57\xa4\x19\x6f\x3d\xfc\xf5\xd5\x52\xd3\x5b\x7e\x71\x62\xbb\xf0\xe5\xb7\xa9\xab\xc8\x24\xb6\x31\x58\xc2\xa1\x64\xd5\xa5\x34\x99\xd0\x49\x0f\x8b\xa4\xaf\x03\x33\xa4\x54\xa0\x73\x82\x64\x69\x98\xd2\x58\x56\x23\x1d\x5f\x52\x7d\x5e\x41\x06\x95\x11\xfc\xf6\xcf\x0a\x97\xbc\x77\x80\x7a\xa3\xcd\xa0\xb2\xd7\x96\x3a\x73\xb5\xb1\xa3\x27\xf4\xbb\x38\xb1\x4b\xab\x9d\x2b\x6f\xaf\x2e\x94\xde\x3e\xef\xe9\xcf\x8c\xe4\x65\x6d\xc2\x54\x14\xdf\x50\x34\x42\xd3\x7d\x36\xf6\x65\xcb\x32\xc4\xc0\x73\x1d\x59\x76\xbc\xbf\x76\x86\x68\xd2\x3a\x1f\xd3\x94\xe1\x88\x56\xe8\xd1\x56\x1c\x27\x10\x2a\x5d\x71\x61\x41\xdf\xaf\xcb\xbb\xd7\xdf\xb9\xb0\x6f\x90\xf9\xea\xe4\xef\x8a\xd7\x6e\x5a\xfc\xc2\xa3\x29\xec\xef\xbc\x1f\xae\xaf\x6a\x2c\x4e\xe6\x34\x98\xe3\x42\x56\x8b\xb9\x20\x88\xa8\xd8\x17\x09\x57\x0b\x30\xef\x12\x7e\x4c\xf1\x6a\x24\x07\xbe\xa5\x9a\xb2\x47\xb9\x1a\x56\x42\x06\x4a\x2c\xe5\x72\x89\x45\xc7\x5f\x3c\xb5\x76\x2c\xd5\x64\xcf\xee\xbb\xdd\xde\x19\xf4\x4e\xce\x96\x03\x8a\x1e\x78\x69\xce\xa3\xda\x5d\xaa\xb4\x1e\x40\xcd\xdc\x52\x76\x58\x12\x7d\x12\x63\xa8\xda\x80\x72\x11\x83\x02\xc3\xf3\x6d\x45\x84\x21\x27\xb0\x98\x63\x22\x9b\x62\x20\x04\xb2\xc0\xe8\xb4\xc4\x49\x54\xec\x69\x8a\xa9\xda\xd0\x61\x9f\xcc\x12\xdb\xf6\x3d\xbf\xd6\xec\x7d\xb4\xcb\xf5\xee\x73\x73\xb5\xbe\xd4\xac\xc9\x77\x35\xee\xdd\x9c\x3c\xa7\xc1\x2b\x0b\x1a\x2d\x38\xb0\xb2\x47\x6a\xfd\xe4\x6d\x08\x93\xa1\x6c\x18\xe9\xbc\x43\x53\x04\x72\x69\x82\x0c\x49\x86\x8a\x79\x35\xd6\x24\x87\xa2\x15\x4e\x81\x66\xc0\xd9\xbc\xc8\xcb\x61\xa0\x52\x46\xc8\x7a\xc6\x93\x1b\xe2\xd2\xe4\xc9\x45\x5f\x6c\xee\xdd\x4a\x3b\xb1\x68\xe3\x8d\x6f\x8e\xdd\x1c\x95\xd6\xf7\xf2\xe4\x5e\xd5\xea\x57\x7c\xaf\xc2\xb0\xa5\xd3\x46\x27\xd1\xdb\x8e\xb1\x35\xcf\x94\x03\x9b\x15\x18\x95\x12\x6c\x21\x10\xfe\x7a\x29\x49\x58\x0c\x25\x4e\x36\x0d\xc3\x8d\x0d\xc5\xd2\x35\x09\xa2\xc8\xb4\x01\xf2\x40\x2c\x65\xd2\x79\xb9\xd6\x65\xf2\xcb\xb5\x2b\xdf\xd8\xb0\x20\xe5\x92\x7a\xf2\x5c\x5c\xfa\xe7\x37\x4a\xd6\x99\x99\x6e\xf1\x2d\x3f\xbd\xd0\xe8\x8f\x1c\x65\x0b\x65\xfc\xf5\xa4\xaa\xa7\xbe\xe4\x6e\x94\xdb\xbf\xa7\x54\xb1\x69\xb3\xf6\x6f\x6d\x51\x6f\xf2\xa5\x2e\xb9\x1a\x15\x90\x4a\xf4\x99\x72\x78\x5c\xaf\x6e\xa7\x32\x1e\xe7\xae\xc7\xc7\x10\xc7\xcb\x5e\xfb\xf9\x8b\x13\xe9\xed\x3a\xac\xb0\x07\xbf\x54\x04\xcc\x4c\x8d\xe0\x9c\xc5\x47\xd7\x8d\xfd\xf1\x87\xe4\x51\x62\x39\x9b\xf7\x39\x95\x82\x9e\x8f\x35\x1e\xdb\x9e\xaa\x04\x86\xe6\xf1\xd8\x76\x98\x50\x71\x63\x9a\x13\xed\x48\x07\x11\x41\x39\x22\x8e\xcc\x40\x8e\x55\x3b\x41\xe3\xa3\x56\xc5\xb2\xbb\xa3\x76\xdb\xb6\x6c\xfe\xb6\xd8\x95\x16\x1b\x7e\x9a\x52\x62\xcd\x57\x03\x06\xd6\x36\x8e\x8e\xb4\xca\x9d\xcf\x07\x87\x67\x8d\xc6\x98\x30\x5c\x03\x1a\x81\xa5\x21\x51\x8d\x23\x8d\x60\x45\xd1\x32\x5d\xcb\xc7\x2e\xd4\x08\x96\x13\x69\xd2\x74\xa5\x00\xea\x06\xa7\x8b\x22\x52\x42\x85\x75\x4d\x22\x83\xae\xdd\x3f\xc7\xb9\x46\xc5\xf5\x75\x1a\xef\xfa\xb2\x7c\xee\x7b\xca\xa9\x4b\xed\x1b\x7f\xd6\xec\x01\x58\x3e\xbb\xfe\x94\xd6\x65\x17\x78\x9f\x74\x7c\x11\x5a\xc9\x3b\x1f\x80\x01\x8e\x45\x9b\x8c\x47\x99\x9a\xa3\x29\x91\x10\xda\x8c\xa4\x38\x30\xf6\x65\xd2\x02\x1c\x47\x6b\x11\xcb\x39\x6c\x1c\x9a\x3a\x4b\xdb\x16\x52\xa1\xfa\xe4\x0a\x2f\xbf\x38\xf8\x7a\xe1\x41\x39\x1e\xd4\x3c\x5f\x17\x1c\x7d\x66\xfe\xe5\x1e\xe1\xe8\xb5\xe2\xe4\xaa\x2f\x35\x78\x35\x67\xf9\x6c\xfa\xd2\xf3\x49\xe4\x48\x0b\x24\xc3\x43\x9a\x31\x45\x57\x66\x18\x91\x64\x59\x1a\x73\xa6\x16\xb3\xbc\x27\x28\x82\x68\xe8\xaa\xce\x61\x89\xe1\x69\x09\x7b\x8a\x23\xd0\x7c\xa2\x4e\xd8\xd9\xc5\x1b\xa6\x4d\x79\x7d\x5d\x9d\x1d\xdf\x7c\xfe\x75\x4a\xb1\xed\x35\x0f\x47\xe7\x3e\x5e\xe9\xb7\xce\xff\xf9\xe2\xd7\xb2\x1b\x47\x66\x6c\x4b\x22\x53\x4e\xb4\x40\xe0\xa1\x58\xf3\x80\x16\x90\xb4\xe5\x05\xa1\x4f\x40\x5a\xa0\x19\xdf\x53\x14\x46\xb4\x1d\xc9\x89\x75\x9d\x8a\xb0\xed\xf8\xba\x41\x00\x95\xce\xe4\x11\xb1\xf4\xfb\x6e\x75\xea\xce\x99\xbe\xfb\xd3\x7d\x93\x1b\x3a\x9b\xdc\xf9\xef\x6e\x68\x5a\x79\x28\xff\xcb\x9a\x3e\x33\x61\xfe\xbd\xf5\x7b\xcc\xc9\xa8\xc0\x97\xe3\xcd\x76\x87\xfb\x35\xcd\x23\xbc\x5e\x60\xef\xab\x0b\xee\x15\x7d\xad\x59\xaf\xb9\xfb\xda\x97\x18\x7a\xff\xbb\xbc\x1b\x2f\xf4\xbf\xbb\x35\x79\x35\xa3\xad\x52\xbc\xec\xb9\xa2\x27\xeb\x28\x56\x59\xcc\x4b\x8c\x4a\x50\x21\xf3\x57\xf1\x08\x49\x8b\x60\xa0\x4f\xd1\x1a\xeb\xf8\x92\xa4\x0a\x22\x12\x69\x35\x13\x19\x8f\x2b\xa5\x9b\x2c\xbd\x39\xb9\x5a\xff\xef\x7a\xd5\x9d\x4c\xbe\x95\xb7\xe5\x8e\xf9\xcb\x37\xe5\x39\x37\x66\xbc\x8b\x57\x55\x6f\xbf\xed\x8b\x2e\xc9\xfb\x26\x2e\xb2\x03\xdf\x12\x65\x27\x66\x3d\x39\xd0\x80\x6a\x28\xb1\x61\x6b\x24\x07\x7d\x4d\x27\x23\xa8\x85\xb2\xec\xba\x22\x13\x8a\xb4\x88\x91\xa8\x63\x17\x25\x9e\x65\x36\x9d\x50\x67\xc8\x8e\x3f\xc6\xe3\xb4\x0e\x7b\xdf\x9b\x3e\x82\xf0\x4f\xe8\x43\x9f\x59\x9f\xb7\xf9\xbb\xad\xcf\xec\xfa\xe4\xea\xca\x93\xc9\xe3\x44\x71\xb4\xc4\x18\x8c\xe9\x39\xac\x13\xa8\xa2\xaa\x38\x9c\x84\x2c\x4d\x31\x23\xc7\xe2\x08\x32\x06\x8a\xa9\x53\x01\xc3\x1b\xba\x1c\x8b\x11\xab\x72\x50\xfe\x0f\xae\xe3\xff\x2f\x13\xfe\xa6\x86\x3c\x6d\xc4\x97\x96\x5a\xb4\x6d\x4a\xde\x8c\x23\xfc\xb3\xa9\x4b\xf2\xae\xe8\xd5\xb7\xdb\xe2\xd3\xe5\x96\x4c\xe9\x3c\xe1\x83\x71\x03\x8e\xed\xcb\xf5\x23\xed\x0c\xbe\xd2\xf8\xe0\xe1\x36\xfd\xbe\x4d\xe2\x6b\x9b\x95\x02\x25\x12\xa4\x90\x0f\x4c\x82\x10\x65\x96\x92\x2c\xde\x52\x35\xd9\xf4\xc8\x50\xc5\x2a\xa3\x70\x90\x96\x2d\x8e\x52\x80\xa3\x62\x86\x57\xec\x4c\xb8\x75\xd9\x7f\xab\x76\xac\x48\x33\x77\xe1\xb4\xd9\x7d\xc6\x16\x9d\xb0\xba\xe1\xf1\x9a\xf7\xa7\xf4\xb3\xe4\x95\x1f\xf6\x9f\x3c\xff\xd9\xad\x85\xaf\x25\xef\xaa\x76\x75\x6c\xc6\x8c\xe9\x6b\x94\xc6\x10\x0e\x46\x9e\x6a\x1b\x04\xe9\x8a\xac\x2f\xf0\x20\x8c\xb5\x48\xf3\x65\x46\x44\x11\x03\x4d\x10\x08\x2e\xaf\x00\x32\xf1\xd6\x6f\x5e\xa9\xdf\x51\xf1\xb4\xf8\xfc\xc5\x1f\xb4\x62\x37\xea\x2f\xae\xfa\x73\x93\xf9\xaf\x6f\x2c\xf6\x49\xff\xc1\x66\x91\xcd\x6b\x0a\x78\xc9\x9b\xeb\x70\x8e\xa0\xbb\x0e\x30\x10\xb6\x55\x4e\xf6\x35\xd7\x65\x4c\x0a\x00\x9e\x37\x81\xe8\x2a\x82\xee\xc2\x30\x20\x58\x13\x7a\xaa\x19\x84\x76\x88\xc8\x58\xcd\x04\xbd\xf2\xc7\x67\x8d\x36\x8f\xfe\x68\xe4\xcf\x77\x96\x56\x6c\xf8\x79\x1e\xe9\xf2\x67\x23\xe7\x17\x51\x67\x94\x9f\xb6\xe8\xad\x05\xef\x37\xb9\xdc\xe6\xbd\x24\xae\xb2\x1d\x03\x85\x09\x55\x29\xa4\x0d\xe4\xb3\x6a\x40\x69\xb1\x06\x39\x52\x62\xc2\x30\x34\x59\x4d\x27\x05\x2f\x0c\x25\xc6\x8e\x71\x20\x43\x21\x64\xfe\x4b\x1c\xfc\xef\xad\xff\xb4\x79\x75\x5a\x6a\xb3\x94\x9c\xb9\x32\x6e\x7d\x73\x52\xf9\xe7\xa6\xfe\x38\xe0\xb9\x4b\x73\xee\xb2\x73\xea\x4c\xab\x3e\x77\xfb\xee\x1c\x85\xef\x15\xf9\xb9\xff\xda\x52\x79\x6a\x9c\xfa\x20\x6b\x1e\x97\x89\x09\x8f\x50\x92\xa2\x90\x72\x1d\x3b\x20\xb1\x6a\x19\x81\x12\x38\x84\x06\x59\x9f\xa3\x18\x4d\x30\x42\x35\x8a\x68\x57\x51\xbd\x88\x30\x78\x4e\x52\x09\xc9\x86\x99\xe8\xc1\xe4\x3b\x3e\xa0\x59\xfe\x02\x51\x1e\xf8\xe8\xd7\x45\x72\xe9\xdd\x6f\xde\xe2\xaa\x6e\x3e\x74\x7c\xc9\xee\xf3\x0b\x7a\x34\x1f\x9f\x9e\x33\x79\xf9\x28\x44\x2a\x14\x20\x1d\xe8\x2c\xad\x0a\xa1\xe5\x4a\x3e\x76\x28\x95\x21\x59\x96\x25\xb0\x2b\x12\x84\x08\xdd\xc8\x86\x84\x49\xa2\x58\x77\x7d\x5a\x45\x99\x40\xe3\x86\x8e\xfe\x72\xdf\xee\xd7\xc4\xfe\x13\xdb\x1c\xab\xfb\xe3\xde\x16\xd3\x47\x5e\xfb\x7d\xd8\xc3\xab\x07\xc2\xf9\x03\x6a\x2c\xeb\xf4\xdd\xae\x71\x49\x94\x00\x33\x62\xdb\xd1\x02\x91\xd0\x59\xc3\x85\xa4\x62\xc7\x10\xeb\x42\x68\x1a\x04\x1b\x04\x0e\xeb\x11\x3a\x27\xc9\xbe\xe3\x30\xb4\xeb\xea\xae\x2b\xba\x90\x4e\x9c\x60\xda\xcf\x99\x7e\x26\x85\x47\x5a\xed\xf4\x89\xb7\x1a\xbf\x5f\x7e\x69\xde\x31\xf3\xca\x54\xfb\x55\x3c\xe1\x7d\x39\x22\x85\x2d\x96\x23\x6b\x66\x9b\x09\xab\x49\x5a\x13\x23\x5a\xd2\x23\xda\xf4\x68\xc6\x91\x7d\x07\x69\x24\x64\x38\x52\xf5\xc9\xd0\x8d\xa1\x06\x3c\x43\x95\x42\x20\x3b\xa2\xea\x0b\x00\xd0\x8a\xfa\x0f\x9a\x6f\x71\x9e\xff\x0d\x7c\x91\xd6\xb2\x74\xf3\x9c\x19\xe1\xdb\x2d\xc4\x39\x7b\xcb\x2f\xe8\xf6\xe0\xab\x46\xed\xc6\xf7\x36\xcb\x30\xc5\x1a\x35\xce\xe3\x8c\x78\xa7\xd6\xcb\xa9\x5f\x28\x3b\xff\x68\x9a\x35\x98\x44\xe2\xe2\x01\xbb\x66\xcc\xf0\x72\x08\x14\xc1\xe7\x11\xc7\x78\x12\x27\x22\x41\x43\xb1\xe1\xcb\x81\x61\x4b\x7e\xa0\x30\x0e\xad\x89\xd8\x16\x5c\xdf\xa3\x4c\x90\x89\x1c\x4c\xf1\xc2\x33\x0f\x35\x2c\x52\x48\x2c\x72\x64\x03\xf5\x10\xa5\xd7\xee\x30\x21\xed\xe8\xa4\xe2\xc3\x87\x6c\x6c\x77\xec\xd3\xf0\xf0\xfd\xdf\x93\xb7\xf3\x55\xe8\x72\xa1\x4e\x00\xd3\x26\x58\x06\x3a\x36\x15\x9a\x8a\xc3\x70\x1a\x27\x7b\x58\x11\x55\xc3\xa3\x49\x91\x77\x18\x40\x50\x8e\xe0\xf0\xb6\x6a\x73\x5c\xe2\x9d\x3f\x60\xc4\xaa\xf1\xaa\x5e\xe8\x7a\xbf\x94\x02\xf6\xc9\xd6\x55\x16\x6d\x7b\x45\x2e\xd5\xa8\x5d\x8e\xbb\xc4\xf8\x8a\x5f\x0f\xdc\x3c\x35\x79\x4a\x72\x9c\x03\x58\x8e\x40\x26\x16\xa0\xc4\x8b\x50\xc0\x0c\xa5\x79\x46\xac\xba\x48\x82\x0c\x03\x49\xde\x16\x39\x47\xf0\x03\xd3\x0c\x59\x8a\x0f\x5c\x52\x75\x32\x01\x42\x95\xd4\x1b\x9f\x69\x78\xec\xa3\x0e\xc2\xb3\x6d\xac\x6e\x65\xea\x55\x1f\xd7\xa7\xcb\x87\xc6\xfe\x71\x7f\x9e\x3f\x9c\xb2\x88\x6e\xb4\x27\x89\x12\x83\x96\xeb\x22\xe0\x98\x0c\x2d\x91\x8c\x1f\x08\x94\x2c\xb3\x48\x63\x19\xdd\x02\x10\xf2\x32\xc7\x06\x82\x69\x84\x01\xcb\xc4\x10\x80\xc8\x75\x90\xe8\x66\xc2\x0f\xf9\x6e\x43\x9d\xbb\xbd\x3f\xfb\xf9\x85\x51\xb5\x86\xbd\x52\x6c\xcd\xac\x4a\x2f\x4f\x9a\x75\xf5\xf1\xc1\x5e\xab\xcb\xec\x48\x3d\xbe\xe3\xc2\xef\x59\x43\x9c\x27\x0c\x59\xf1\x28\x0e\xdb\xbe\xa3\x8a\x6c\xa4\xa3\xc0\xf3\x65\x23\x12\x59\xc5\x13\x10\x54\x1d\x8d\x0a\x68\x4b\x8b\x05\x89\x72\x1d\x29\xd0\x65\x1c\x23\x8c\xc9\x27\xd4\x35\x9f\x86\x7d\x4a\x4b\x1d\x9e\x92\xe7\x5f\xa7\x35\xdf\x83\x95\xdb\x06\xf4\xae\xf3\x9c\x69\x9c\x1c\x75\xa0\x42\xc9\x02\x7d\x8a\xad\xfd\xa9\x4d\xc7\xdf\xe6\xb3\x67\xde\x1b\x67\x17\xba\x9c\x44\x0c\xa0\xae\xb9\xba\x40\x28\xb1\xcb\xb1\x06\xc3\x68\x14\xb6\x58\x97\xf0\x21\x4b\xd3\x5a\x6c\x23\x60\x38\x1e\x4b\x68\x0c\xad\x12\x02\xa1\xab\x18\x49\x42\x9c\x89\x96\x5c\x2f\xa9\xce\xb3\x33\x57\x2b\xbf\xad\xe2\x76\xfc\x94\x3a\xd1\xd8\xd8\x33\xbd\xd6\xf8\x72\x77\xba\x0f\xcf\x39\xa9\xe7\xdc\x5f\x74\x7d\x4f\x12\xd1\xba\x88\x53\x75\x41\x82\x61\xe8\x68\x81\xc0\x32\xb2\x66\xc9\x04\xe0\xa0\xe7\x32\x1a\x2b\xea\x91\xc5\x4a\xa4\x28\x33\x5c\xcc\x99\x7c\x2c\x78\x8a\x0c\xf9\xc4\x09\xa6\xd4\x99\x12\x0d\x9a\x97\xab\x72\xa9\x50\xe5\x86\xf9\x0a\xbe\x51\xba\xb4\x50\xf0\xa7\x09\xd7\xda\x2e\x6f\xf0\x45\xfa\x90\x5a\x4a\x5b\x6f\x49\xf2\xf6\x11\x09\x24\xd7\x32\x51\x64\x5b\x20\xa2\xf9\xc0\xb4\x9d\x10\x6a\xa6\xc6\xc4\x16\x0b\x34\x0a\x33\x0e\x4b\x09\x11\x87\x22\x9b\x15\x61\x40\x45\x56\x04\xe2\xc4\x5b\x7f\xdf\x71\x38\xeb\xbb\xae\x9f\xf9\x1f\x5c\xcd\x4d\x7d\x44\xbe\x36\x68\xdb\xac\x7a\x3d\x67\x0e\xb8\x70\x9b\xe8\x33\xf7\x74\xe1\xdc\xb7\xfa\x27\x51\x64\x42\xd5\x19\xd2\x0c\x2d\x0f\x18\x9c\xe6\xd2\x86\xa1\x3a\x3e\x63\x87\xa6\x46\xb9\xb1\x6a\xc0\x90\xe3\x3d\x19\x47\x32\x19\x13\x48\x83\x92\x16\x61\x9c\x89\x2e\xa2\xb0\xa4\xd7\xa8\x86\x3d\x7b\x8d\x1b\xd0\xe1\xee\xe8\x75\x1f\x2f\x2d\x2b\x9f\xcb\x55\x18\x3d\xb3\xac\xbf\xb7\xe1\xea\xd8\xb2\xd5\xaa\xf4\x49\x22\x33\x51\xb2\x28\xc5\xa6\x43\x48\xc7\x3e\xa3\x06\xb1\x22\x68\x01\x29\x5a\xd0\x32\x10\x50\x91\x4e\xab\x36\xa7\x4b\x0c\x13\x2b\x98\x15\x44\x1b\xb0\xb4\x0d\x9e\x50\xb0\x79\x1a\xf6\x30\x2d\x35\x7b\xb3\xca\xf5\x32\x9e\xd6\x7e\xcd\xb3\x8d\x5c\xd2\xbe\xde\xb2\xb7\x66\xbd\x37\xb0\xde\xab\xd7\x5a\xdd\xfa\x79\x47\xbe\x8f\x6f\x95\x1c\x73\xe1\x21\x9c\x51\xf8\x4c\xd9\xac\xf5\xee\x13\x6f\x7d\xca\xf1\x75\xdb\xf5\x7c\x1c\x02\x6c\xaa\xd0\xa5\x08\x9b\x30\x64\x91\x31\x1c\x9d\xd7\x4d\x8d\x86\x2a\xc6\x90\xf7\x1d\xd9\xe1\x3d\x19\x7a\xd0\xcd\x60\xaa\xf3\x4f\xb3\xaf\x0e\x35\xe3\xf7\x21\xfb\x36\xbf\x72\xff\x85\xfc\xed\xea\x3f\xd3\xa2\x52\xeb\x2f\xba\xc4\x55\x0f\x16\xb6\x8f\x54\x40\xa5\x9c\xd1\xcb\xb3\xa6\x5b\x96\x30\x64\xd6\x11\x63\x17\x0a\x32\xcb\x11\xc0\x08\x54\x36\x32\x22\x56\x07\x48\x91\x35\x27\x54\x2d\xac\xd9\xa4\x65\x1b\x2a\xf6\x48\xcf\xe1\xd9\x40\x89\x78\x5e\x78\xb2\xb3\x7c\x14\xec\xfb\x66\xf0\x33\x66\x89\x31\x55\x4a\x0d\x2f\x3d\xbe\xe9\xec\xfc\xf3\x3a\xbd\xfa\xd9\xb1\xde\xd3\xfa\xfa\xe5\xc6\xce\xb3\x7a\x67\x4d\xa8\x32\xb1\x7f\x8b\x02\x55\x49\x13\x49\xda\x53\x68\x97\xe4\x44\x46\x26\x09\x06\x89\x92\x07\xbc\x98\xb7\xcc\x88\xf3\x05\x2a\x88\x44\x56\x55\x30\xe3\x09\xba\x87\xb9\x4c\xb4\xc1\xd7\x9d\x3e\x30\xfe\xcc\x0f\x5f\xe7\xef\xf2\xd3\x07\x66\x2f\xa1\xfb\x0b\xfd\xf6\x76\xaf\x93\xef\xd4\xc0\xbb\xcf\x1d\x1a\xf0\x6a\xb5\x1d\x6a\xd6\x4e\x6a\xe2\x76\x14\x29\xf8\x50\x32\x6d\x46\xc6\xb6\x81\x48\x25\x42\x31\x32\x02\x9b\x06\x9a\xed\x19\x98\x56\x28\x8d\x8a\x45\x9e\x37\x03\x1c\x62\x9f\x65\xb1\xf6\x1f\x53\xe8\x27\x53\xf8\xd9\xf4\x17\xef\x7e\x5c\xf6\xd6\x55\xb5\xce\x47\xd9\x72\xad\x28\x54\xbb\x4a\xa9\x4d\xd3\x6f\x36\xe9\x35\xa1\x6d\x54\x68\xbf\x3d\xb3\xca\xca\x24\x2a\x31\x69\x4c\x1c\x40\x04\x25\xd6\xe7\xa0\xed\x5b\x9c\x63\xe9\xb4\x14\xf3\x9c\x21\xf9\x2e\xa6\x48\x5a\x96\x05\x9e\x8b\x3d\x8b\xb5\x24\xd6\x0b\xa0\xac\x65\x42\x3e\x23\x7e\x6c\xdf\xb2\x62\xda\x6b\xbf\xe5\xd8\xfe\xca\x5c\xb8\x6a\xc6\xfd\xaf\x2a\x05\x2f\x8d\x9c\x3f\x70\xe8\xee\x42\x8b\x7a\xa6\xb3\x5b\xb2\x86\xed\x4f\xb8\xca\x41\x68\xb3\x26\xf6\x95\x40\x70\xdc\x28\x84\xa6\x1f\x47\x31\x64\x39\xc8\x38\x3e\x23\x68\x9e\xa8\xca\x3e\x90\x39\x68\x4b\x86\x04\x1d\x84\x1d\x1f\xfe\xa3\xe3\xf8\xb7\x39\xd4\xd3\x70\x93\x69\xa9\xc5\x52\x52\x2a\x8f\xc8\xf0\x0f\x37\x0d\xfe\x7c\x4c\xcf\x0b\x72\x39\xe3\xee\x4b\x79\x66\xad\xb6\xb4\x37\x9b\xef\xae\xda\x70\xe1\xed\xf3\x6b\x06\x8f\xd6\x0e\xc0\x07\xc9\xa3\xd7\x71\xa6\x6e\x53\x88\x35\x04\xc2\x46\x28\x20\x6c\xc0\x9b\xb2\x10\xdb\xa4\x88\x65\x5e\xe4\x58\xd3\x17\xb0\x01\xe8\x48\x01\xbc\xab\x20\x56\x74\x2d\x8e\x57\x12\x0f\x06\x87\xaf\xfc\x6a\x20\x85\x46\x2c\xce\x95\x3e\xb7\xc2\x1f\x37\x16\x14\x18\x5c\xa3\x4e\xd3\xea\xf5\x76\x0d\xaa\x7b\xd7\xa5\x47\x94\x43\x59\x73\xc2\x4c\x3c\xcb\xa4\x90\x63\x62\x3b\xb6\x0d\x86\x60\x48\x2c\xaa\xa2\x13\x42\x8b\xe5\x9c\xd0\x92\xe4\x80\xe3\x65\x0c\x03\x09\xea\x8c\x48\x12\x41\x4c\x19\x16\xf9\x1f\xc4\x5c\xc6\xc6\xf1\xd5\x0f\xa8\xab\x39\xce\xef\xa8\x59\xae\x60\xb5\xe2\x73\x3b\xdd\x3d\x56\x65\xf6\xc8\xbb\x43\x6f\x2f\x30\xcb\x6e\xd8\x9c\x26\xee\x59\x9b\x3c\xc0\x30\x2f\x0b\x8e\xeb\x4b\x8e\x25\xdb\x9e\x4c\xc3\x50\xf7\x45\x49\xd0\x43\xc2\xd3\x79\x18\xb0\x2c\x25\xf3\x81\x6e\xc9\xba\xe4\x09\x36\xc9\x81\xd0\xb6\x2d\x2e\x4a\x9c\x5c\xac\xe5\xe3\x4f\x6c\xbc\xfe\xcb\x83\x7d\xf9\xb2\x47\x0b\x5a\x55\x6f\x5a\x3f\xff\xcf\x77\x73\xd5\xe9\xaf\x1d\x19\x54\x7d\xfe\xac\xa6\x15\xb2\x86\x98\x4b\x18\x32\xcf\xc7\x94\x15\x50\x90\x65\x19\x52\xd7\x80\x1c\xba\xbc\x26\xba\x58\x27\x7d\x57\x76\x21\xa7\xda\x3a\xc5\xf1\x04\xa9\x59\x91\x44\x73\x12\xd4\x34\xf5\x1f\xf6\xc2\xdf\xc2\xbd\x4f\xc3\xca\xa5\xb5\x7c\x37\xe5\x5f\x7a\x88\xe3\xe6\xe9\xb9\xec\x5f\xbb\x57\xb8\xb9\xe3\x8f\x77\xaa\x6e\x2c\x74\x7e\xff\x22\x36\xb5\x62\xbf\x2b\x85\xce\x77\xcd\x5f\xb7\xd3\x80\x11\x0b\x92\xa8\x5e\x4a\xfa\x2e\xd4\x88\xc8\x21\xd8\xc8\xd0\x61\x18\x62\x81\x26\x63\x19\x0b\xa6\xeb\xfb\x8e\x4c\xe9\x08\xc9\xae\xc5\xa8\x18\x2a\x3a\x4f\xd0\x0a\x0f\x33\xf1\xa9\x43\x77\xfa\x6e\x9f\x30\xef\xd1\xf0\xce\x7f\xae\x8d\x0e\xee\x99\x54\xf4\x58\xd1\x26\x5a\x81\x4b\x95\xf7\x95\x1d\x37\x65\x46\xf9\x67\x66\x64\xcd\xce\x2a\x61\xf6\xf4\x54\x99\x22\x2c\x13\x33\x4c\x14\x58\x82\x4f\x47\x8e\x6a\x86\xa6\xc5\xd1\x01\xb0\x0c\x53\x0a\x02\x53\x8b\x45\x1c\xf8\xae\x21\x84\x92\xe0\x99\xb1\xa6\x26\xce\x9e\xc7\x3e\x28\x92\x2b\xfd\x8f\x32\x65\x2a\x4d\xb8\xf1\xd3\x41\x26\xf7\xf7\x39\xc6\xd6\x3e\x46\x6c\xfe\xf5\x4e\xc3\x2a\xb7\x73\xae\xa8\xbe\x2b\x6b\xab\x9c\xf8\xed\xc7\xf3\x84\xec\x8b\xa2\x4b\x5b\xb2\xe9\xb0\x84\x2c\x1b\x0c\x02\xa4\x6f\x60\x8f\x61\x6d\x5a\xd0\x25\xd6\xd7\x3d\x9d\x36\x6d\xc2\x94\x29\x5a\x0f\x39\x37\x71\xc8\x6f\xbf\xf6\x4b\x85\x23\xa8\xd6\x89\xe9\xfc\x4d\x67\xc3\xa2\xcb\xab\xaa\xdf\xeb\x78\xe4\xe0\xbb\xeb\xc6\x7d\x7b\xe7\xea\xcc\xaf\xaa\x1b\x49\x04\xce\x10\xd8\x91\x6c\x59\x94\x39\x13\x47\x5a\x24\x91\x82\x8e\x44\x5f\x89\x31\x30\x14\x42\x33\x6c\xcc\xfb\x48\x77\x44\x83\x8d\x42\x33\xb4\x19\x19\x8a\xff\x11\x86\xcb\xa0\xe4\xf1\x34\xdc\x67\x5a\x6a\xf6\xbc\x95\x47\x64\x54\xf2\xb8\x97\xfd\x5e\x3c\x70\xfd\xda\x4b\xbf\xbd\x54\xb8\x56\x6f\xee\x99\xed\xf5\xeb\x3e\x73\x6c\x75\x83\x89\xfc\xe4\x23\x9f\x8d\x5d\xbb\xae\x7b\xd6\x7a\x08\x89\x8d\x96\xac\xc0\xf3\x02\x41\x73\x65\xa8\x08\x8e\x82\x75\x59\x25\x65\x51\xa1\x62\xcf\x47\x8a\xe4\x22\x89\xd7\x3c\x9a\x93\x15\xd1\x42\xb4\x0f\x09\xc2\x71\x33\xe9\x9e\xd5\x4c\x39\x9b\xfa\x7c\xb1\x77\x8a\x1f\xfe\xaa\x5c\xd7\xad\x63\xeb\x1d\xfd\xf5\xde\xa9\xea\xb8\x42\xdf\x6e\x6f\xe7\xb9\x7d\x7d\x77\xc5\xd3\x59\xeb\x51\x26\xd6\xdc\x61\xa0\xe0\x79\x21\x17\x47\xa6\x8d\x3c\x39\xe2\x04\xc5\x0e\x71\xcc\x61\x47\xc7\x20\x86\x5e\x00\x64\xdf\x54\x38\x91\xb3\x5c\x5b\x40\x2a\x62\x85\x4c\x5c\x8b\x76\x0e\x6b\xec\x94\x79\xe7\xc8\x83\x1f\x53\x8a\x5c\x6c\xe3\x3a\xe8\x6c\xd9\x07\xf7\xa7\xf7\x7a\xa9\x44\xf8\x68\x63\x8e\xf6\x4d\xd2\x86\x27\x91\xd8\x12\xf3\x4e\x08\x48\x9a\x60\xf5\xd8\x13\x4c\x2c\x43\x5b\x10\x62\x37\xe2\xed\x80\x96\xa0\x61\x91\xac\x24\x38\x06\xc6\x0c\x27\xb2\xb1\x03\x04\xce\xce\x44\x6c\x6a\x94\xa7\x0f\x7d\x7f\x56\xae\xab\xdd\x3a\x2f\x2c\xf7\xc1\xe4\x81\x7d\xa2\x4f\x9b\xec\x79\x65\x25\xf7\xfe\x47\xc3\x5f\xe3\x7f\xce\x56\x34\x89\x45\xb0\x2f\x44\x94\x18\xc9\xbe\xea\xfb\x71\x40\x31\x9c\xca\xb0\xa6\xa4\xf8\x0c\x23\x0b\x06\x65\x06\x9a\xa9\x3a\x1a\x0a\x80\x4f\x60\x0d\xf0\xbe\x01\x35\x3b\x13\x81\xc1\x79\x15\x83\x37\x96\x5c\x5b\xf1\xb1\xfd\x35\x5a\x39\xee\xc7\xcb\xd1\x91\x03\xfb\x36\xdc\xb9\x3c\x13\xee\xbf\xba\x6b\xa4\xd4\xfe\xf0\x80\x24\xca\x23\xfb\x46\xe4\x60\x86\xd2\x62\x96\x8c\x40\xec\xea\x11\x43\xf1\x32\xab\x08\xb4\xce\x90\x86\x46\x9a\x7f\x7d\x01\x1a\xbb\xa2\x0b\x35\x56\xd3\x79\x31\x33\x6f\xa8\x4a\x55\xa6\xac\x6b\x0d\x9b\x2c\xab\xdf\x9a\x6d\xab\x0f\x1d\xf3\x7c\xad\xb4\xe7\xb3\x2d\x2e\xfa\xeb\xd4\x19\x79\xef\x56\x5f\xb3\x74\xc3\xa7\xc9\xdb\x18\x76\xe4\x6b\xc0\x33\x31\xa7\x1b\x26\x4d\x86\xae\xcf\x06\x2e\xcf\x38\x9c\xe7\x68\xa2\x4d\x31\x3a\x60\x0d\x1b\x86\x06\xed\x22\x42\x32\x11\x12\x39\xfe\x1f\xfd\xf5\xbf\x13\xcc\xd3\x60\xb6\x69\xa9\x55\x52\x8a\x4e\xc9\x98\x60\x0a\xbc\xf2\xfc\xe9\x12\xf3\x8e\x54\x6f\x73\xb3\xec\xf7\xde\xfa\xab\x25\x3e\x7a\x7c\x7f\x62\xf7\x4b\x47\x5b\x5d\xdf\x52\xaa\xe6\xac\x36\xd1\xe0\xe4\xfd\x43\x99\xa2\x64\x87\x16\x31\x41\x49\xb1\x21\xf0\x7f\x55\x0a\xae\x2a\xb0\x0c\xb6\x19\x11\x3b\x9e\xa2\x6b\x16\x4f\xaa\xa1\x14\x10\x82\x85\xb1\x8e\x98\x38\x13\xc1\x86\x2e\xeb\x3f\x79\xbb\xe8\xd1\xc3\xf7\x46\xef\x18\xbe\x78\x86\xb6\xbe\x78\xe3\x22\x35\xf7\x6e\x6b\x81\x46\x1f\x6f\x6e\xb5\xb9\xde\xe0\xdc\xe9\xe4\xcd\x6d\x22\xc8\xc7\xbc\xc9\x28\x3c\x72\x49\x6c\x80\x08\xbb\x24\x4d\x09\x9a\x42\xc4\xae\x2a\x41\x55\x65\x4c\x95\xd2\x31\xc9\x44\xbc\xcc\x87\x84\x62\x01\x35\x13\x89\xc1\x41\x0b\xfb\xb0\x75\x5f\x3f\x95\x67\x4d\xbf\x0e\x33\x37\xc2\x6c\x9d\x0f\x37\xfe\xe6\xe4\x92\x59\x4d\x9d\x49\x2b\xdd\xcb\xcd\xef\x8d\x3b\x93\x44\xb8\x19\x26\x64\x0e\x79\xa1\x83\x08\xe0\x44\xba\xc8\x63\x4b\x04\x9e\xad\x6b\xaa\x47\xe8\xa2\x6c\xca\x8a\x6b\x41\x88\x7d\x20\x18\x8c\xe3\x28\x8c\xe0\x64\x22\xba\x9a\x6f\xe4\xbd\x97\x2b\xad\x9f\x78\x72\x87\x7f\xa0\xdd\xb0\xd7\x8b\x7d\x5f\xad\xf5\xbe\xdc\x23\xd6\xad\x78\x3e\x27\x52\xfb\xd4\x4d\xdf\xf5\x4c\xf2\x12\x8c\x87\x3d\x9f\xd3\x69\xc1\x73\x38\x47\x22\x75\x21\x06\xac\x8a\x21\xa3\xf0\xae\x6b\xc4\x51\x2c\xc4\x02\x22\x09\x35\x36\x58\x91\xe6\x78\x9b\x8c\x29\x41\xca\x84\x70\x7f\x6c\x64\xb9\x95\x3d\x1b\xe0\x92\x5b\x0e\xcf\x7c\x76\xee\x81\x3e\xea\x95\x43\x8b\x7f\xf9\x64\xe5\xe4\x39\x7d\x47\x06\x07\xba\x7d\xb3\x34\x79\xab\x2c\x59\x8a\x0f\x49\xc0\x59\x58\x20\x23\x43\x55\x49\x91\x14\xa5\xc8\xf1\x24\x45\xa5\x99\x80\x45\x0a\x1f\x22\x33\xf6\x49\x99\x0a\x10\x88\xe8\xc8\x20\xc8\xc4\xab\x7c\xb0\xfb\xa8\x6a\x8d\x67\xd5\x6a\xf4\xc5\x1f\x37\x0a\xdd\x58\x36\xa2\xfa\x9b\xfb\x6a\xf4\x1f\x90\xeb\xe2\x7b\xf9\x7e\x9d\x1d\xe0\xb1\x93\x66\x27\x2f\x64\x14\x44\x84\xe4\x59\x71\x10\x3a\x8c\x17\x84\xb4\x63\x71\x81\xee\x05\x1e\x6f\xc7\x0c\x6b\x58\xa1\xe0\x20\x21\xf4\xed\x30\x42\x26\x76\x03\x47\x97\x3c\xf1\x09\x80\xc1\xd3\x60\xee\x69\xa9\x45\x53\xf2\xfe\x6b\xca\x9a\x6f\xf3\xfd\x07\xab\x87\x95\xec\x79\x1c\xfc\x76\x03\x1d\xa8\xba\x41\x61\x36\xd1\xb7\xeb\xdf\x55\x4e\xdf\xef\x71\x63\xe5\xf2\xf1\x59\x13\x1f\x49\x98\x60\x34\xce\x00\x94\xcf\x90\x56\x10\x7a\xf2\x5f\xd7\x11\xc1\x2a\x5e\x1c\x30\xba\xef\x84\x8e\x27\xb3\x91\xeb\x53\x94\xa1\x91\x21\x1d\x11\xb2\xce\x08\x36\x9f\x89\xcc\x76\xe3\x37\xa6\xb4\xfb\x60\x6c\xdf\x87\x03\x1a\xe5\x6b\xdd\x76\xd9\x57\xc5\x22\x7b\xeb\x8e\xf2\x07\x3f\x7c\xf3\xcf\xfb\x8f\x7b\x7d\xba\x6a\x4e\x8b\x24\x16\x5d\x91\xe8\x20\xca\x21\x5d\x43\x00\x91\xa9\xc8\x04\xd2\x14\x1a\xf3\x36\xd2\x04\x91\xc7\x0e\xc2\x40\x8c\x69\x02\x38\x00\x46\x8c\xa2\x8a\x86\xfe\x1f\x2b\xef\x27\x43\x56\xda\x1e\xbb\x7a\xe1\xd6\x95\x12\x7d\x5e\x93\x36\x5d\x5b\xbf\x2a\xd7\x3c\x66\x14\x57\x22\x1b\x5f\x4b\x89\x8a\x9e\x7f\x98\x7d\xd2\xda\xe4\xbd\x01\x2d\xd1\x23\x0d\x68\xb8\xbc\xa0\xa9\x90\x17\x21\xa9\x12\x86\x13\xd3\x00\x58\x92\xc8\xc9\xb2\x44\x86\x81\x83\x75\x20\x43\x1f\xe3\xd0\xb2\xb9\xd0\xcb\xa4\x27\x76\x5d\x39\xf2\xe2\xa5\xf0\x4c\x5b\xb1\x43\xff\xd6\x1f\x8e\xff\xe6\x87\x5b\x9d\x73\x99\x7d\xdf\xb4\xc7\xe4\x1d\xd4\x2b\x6d\x3b\x99\xfa\x4b\xf2\xca\x01\xc1\xf2\x15\x80\xf5\x58\x74\x63\x49\xf6\x08\x45\x88\x03\x5f\xa6\x28\x9d\x96\x1d\xc3\xd5\x68\x2b\x0e\x5c\x4c\x89\xa1\x15\xd8\x3e\x22\x6c\x6c\xd2\xdc\x3f\xba\x3b\x37\x73\xfd\x6f\x58\xcb\xb4\x96\xd9\xf3\xa7\x64\x6c\xd6\xf0\x96\xd7\x72\xf5\xcc\x7c\x0f\xdf\x9a\xff\x5e\xdb\xa6\xe1\x81\xf2\xef\xbc\x3e\xfb\xc7\x5f\x46\xde\xec\x5f\x78\x45\x6d\x78\xaf\x43\xab\x62\x49\x84\x44\x3b\x32\x4b\x51\xa2\x47\x87\x9c\xc0\xeb\xa1\xe7\x90\x3a\x61\x40\x0b\xc8\x0a\x0c\x0d\x4f\xa2\x0c\xd5\x89\xc8\x40\xa2\x68\x96\x50\x04\xc3\x8d\x08\x42\x48\xdc\xac\xe1\xcb\x56\xb8\x94\x47\xdf\xee\xf6\x6b\xb8\xb2\x4c\xef\x78\xe3\x94\x03\xdf\xbf\xb5\x86\x79\x3c\x95\xa8\x70\x65\x1e\xc9\xf7\x1a\x15\x24\x51\x80\x12\x10\x12\x10\x20\xcd\xab\xc8\xc2\xd0\xe6\x8d\x90\xc1\xb4\x44\x04\x48\xb2\x78\xd7\x75\x42\x52\xf8\xeb\x41\xe8\xf2\x90\x00\x86\xe5\xd2\x26\x40\xe8\xc9\x66\xcd\x89\x8a\x6f\xb4\x9c\x35\xa4\xbe\xf4\xe0\xf4\xd8\xf7\xb7\xaf\x7c\xe5\xab\xf0\xe5\xa3\x7b\x77\xd5\x4e\x6f\xf4\xfd\xdb\x65\x52\xf7\xf7\x5a\x32\x21\x79\x77\x94\xc9\xba\x0a\xa4\x74\xd6\x25\x62\x9a\x8a\x65\xe8\x1a\xa1\xe1\x4b\x32\x70\x65\xd2\x10\x4c\x2a\x08\x65\xcd\xd2\x9d\x58\x0b\x58\x37\x08\xbc\x90\xf5\xf9\x4c\xdc\x2b\x1e\x60\x3f\xdb\xf9\xd2\x1f\x59\xab\xbe\x8b\xfa\xba\xab\xd3\x57\xbe\xbb\xe2\xa1\x52\x8a\x2f\xfa\x45\xb6\xa2\x7b\x3b\x0d\x1e\x7d\x6f\x52\xf2\x0e\x2a\x21\xba\xbe\xea\x89\x92\xac\x52\x80\x23\x18\x8c\x03\x36\x22\x90\x1f\xbb\xb4\xac\xb8\x26\x61\x88\x1e\xc1\x12\x82\x29\x4a\x84\x10\xf9\xa1\xee\x8b\x82\xf0\xc4\x93\xf5\x69\x98\xe1\xb4\xd4\x6c\xd9\xea\xa5\x66\xac\x28\x4f\xbe\x72\x60\xc9\x5d\xb4\x4a\x7e\x6e\xc2\xfa\x8e\x43\x7e\xab\x4c\x77\x7e\x30\x9f\xcb\x71\x76\xc5\xb9\xb3\x87\x72\xef\x53\xd1\x5b\x59\x93\xd7\x4c\x6c\x06\x18\x72\x12\x8e\x00\xcf\x72\x42\x10\xb0\xac\x20\xf9\x04\xa7\x62\x89\xd7\x98\x90\x50\x08\xdd\x20\x7d\x82\xe5\xc5\x88\x11\x49\x59\xd4\x11\x07\xb1\x6b\x27\xce\x9e\x23\x70\x67\xcf\xbe\x3f\x74\xd7\xa4\x51\x17\xd7\xbc\xd2\xeb\x4e\xc9\x09\x53\x9a\x9c\xd8\xde\x24\xc5\xeb\x34\xe4\x51\x85\xde\x3d\x67\x26\xb1\x47\x09\x91\x6c\x2b\x90\xe5\x4d\xc9\x94\x75\x46\x64\x08\x91\x72\x91\x07\x6d\x8b\xb4\x10\x4f\x32\x36\xb4\x28\xd9\xe2\x3d\x9f\x31\x1d\x9a\x82\x94\xac\x10\x6e\xe2\x90\x8f\xed\x93\x98\x87\xd4\xf9\x49\x03\x75\x25\xd7\xcb\xdf\xc1\x7c\x0f\x88\xc2\xee\xcb\x75\xe6\x7c\xf9\x13\xdf\xad\xaa\xde\xb1\x7c\xf2\x7a\x62\xbc\x8d\x2c\x13\xfb\x82\x0a\x6c\x8f\x95\x43\xac\x33\x50\x0a\x90\x69\x79\x71\x60\x44\x11\x05\x30\xe0\xa8\x48\x75\x48\xc2\x0d\x34\x8b\x74\x0c\x04\xfe\x8b\x33\x94\x11\xff\xd9\xe8\xb5\x36\x68\xe8\x83\x06\x15\x5f\x6a\xd0\xb3\xc3\x9a\x5a\xf7\x7a\xcd\x0e\x5b\x14\x38\x58\xf3\xd4\xca\x53\xcd\x2b\x7a\xdb\x7e\x4d\xa2\x41\x2a\xb0\x75\xd5\x53\x15\x4b\xc5\xa1\xc3\x71\x9a\x16\xf3\x9c\xa7\x86\x3c\xa7\xb0\x0e\x2b\x4b\x8c\x2b\xb2\x96\x2a\x61\x8b\x24\x4c\x24\xd1\x50\x91\xec\xcc\x1a\x03\x27\x07\x8f\x79\xaf\x33\xdd\x28\x7b\xf6\xc2\xed\x3f\xb8\x37\xed\x58\xdc\x23\x4d\x1e\xb6\x6b\xf7\xa7\x7d\x77\xe5\x32\x72\xf7\xbc\x75\x3d\x89\xaf\x23\x03\x90\x16\xf6\x08\x2f\xb4\x80\x4c\x43\x5d\x52\x22\x41\xd0\x5d\x85\x64\x4d\x97\x81\x9e\xa1\x40\x41\xb5\x55\xcd\xd5\x6d\x8f\x36\x04\x92\x86\x52\x66\x3e\xd7\x54\xe7\xd7\x73\x77\xcd\xfb\xac\x35\x6c\xcc\x29\x67\xcc\x6f\xf5\x3f\x9a\x36\xfc\x96\xb9\xe3\x71\x74\x3d\xea\x26\xdd\x6f\x5f\xae\x72\xf2\xda\x78\x3c\xaf\xd9\xc8\xa6\x62\x5d\xa3\x01\x08\x59\x89\x81\x02\xe4\x75\xe0\x43\x99\x12\x40\xa0\xd2\x1c\xd4\x35\xcf\xb7\x3c\x9d\x33\xa8\x48\xb1\x75\xcb\x88\xff\xb9\x56\xff\xee\x06\x3f\x0d\xf3\x9c\xd6\xf2\xb9\xe7\xff\xd5\x0d\x6e\x92\xde\xe9\xa3\x01\x07\x47\xac\x6b\x37\x75\xdf\xde\x29\x29\xaf\xbd\xf5\xc2\x8d\x9c\x83\x1b\x5f\x2a\xfa\x4a\x7e\x6b\xf4\xc1\xcf\x16\x76\x4e\xe2\xce\xc7\xbc\x2a\x90\x8e\x4c\xc7\x8c\xab\x5b\x8e\xe4\x20\x95\x22\x11\x61\x78\x9e\xef\x06\x7a\x60\xe3\x90\xd3\x78\x0a\x86\x0a\x8c\x0c\x57\x8b\x35\x5a\xca\x4c\x66\xbb\xd2\x6f\x17\x67\xac\xad\x27\xf7\xb9\x8b\x5a\x6e\xaf\x1d\x1d\x2e\x57\x21\x2e\xfe\x7c\x37\x7f\xde\xed\x15\xa3\xcf\xdd\x29\xd2\xb2\x43\xd6\xc4\xcc\x13\xbf\x58\x59\x42\x80\xd0\x64\x80\x2e\xa8\x3e\x96\x4d\xc6\xf3\xc9\x00\x28\x08\x07\xc0\x64\x28\x96\x90\x29\x47\x16\x61\x64\xaa\xa6\x1a\x86\xa4\x40\xc1\xff\x98\x8d\x3e\xf9\x30\x59\xf0\xf9\xe3\x5b\x8f\xde\x19\x56\xfa\xe2\xb3\x53\x9d\x49\xa5\xeb\xcc\xd8\x3c\xab\xdd\x5b\xa5\x83\x63\x3d\x0a\xae\xbf\xdf\xf3\x66\xad\x2a\x59\x93\xa2\x4e\x58\x9d\xf1\x12\xad\x29\x6e\xe4\x51\x42\x08\x08\x95\x0e\x25\x55\x56\x2d\x10\x10\x42\x28\xf2\x36\x6f\xda\x1c\x2d\x0b\x6c\x14\x68\x04\xc9\xf9\x40\xc1\x22\xb6\xc3\xc4\x21\xf7\xfa\x7c\x6a\x9d\xb9\x3f\x4d\x2a\xb4\xb5\xd2\x07\x54\xfb\xd6\xe7\x82\xf0\xe7\x17\xc7\x5d\x90\x9c\xf3\x33\xe7\xbd\xd4\xe3\xd4\xdb\xbd\x37\x24\xf1\x2d\x15\x4b\x31\x1d\x87\x82\xca\xb0\xac\x46\x04\x8e\x4a\xab\xac\x4e\x62\x1d\xea\x0a\x88\xfc\x58\xa6\x68\x23\xd2\x44\x55\x0a\x18\x20\xeb\x3e\x63\x71\x30\xf8\x7f\x21\xff\xfa\xca\xff\x61\x0b\x86\x7e\x1e\xe6\xc8\xf9\x68\x6e\xad\x71\x35\xd2\xad\x3c\x87\xd1\xd8\x19\x95\x86\xee\xad\x56\x6d\x56\x7d\x79\x6e\xdb\xc6\x67\x3f\x7d\x33\x2d\xf5\xf1\xe3\xc7\x8f\x67\x56\xce\xc8\x11\x28\xff\xe7\xfc\x59\x73\x8d\xe2\x57\x7f\xad\x53\x95\x2e\x39\xb7\xef\xc8\x37\x3f\xab\x36\xec\xf0\xee\x6a\x37\x7a\x4d\x2f\xb7\xae\xc6\x9a\x4d\xe5\x32\xfe\xba\x62\x89\xf9\xd9\x6e\x95\x6a\x2d\x79\xf9\x07\x7b\xa3\x72\x04\xad\x3a\xfc\x80\x3b\xfc\xf6\xc2\x6c\x26\xef\xb3\xf9\x2e\xbf\x82\x8b\xf5\xca\xf8\xeb\x7d\x69\xad\x5a\x76\x1c\x7d\xba\xc2\x1f\x6f\x9f\xa5\x2d\x65\xe5\x96\xca\x6f\xdd\xae\x55\x5d\x7b\xb5\x69\xc1\xda\xcb\xcb\xf1\x47\x17\x9e\xf8\x97\x9e\xd4\x9e\x96\x5b\xa3\x31\x9b\x77\x75\xfa\xee\xe5\xfb\xb5\xef\x55\x2f\x7a\xbb\xeb\xf7\x6b\xc7\x5f\x59\x53\x29\x77\x85\x15\x5f\x16\xef\xf0\xe1\x90\x0c\x64\x97\xdc\x05\x6e\x17\xdc\xbf\xe9\x5e\x9b\x2d\x1b\x0f\x77\xf7\xca\x55\xda\xdb\xbf\x4f\xbd\xed\xa9\xd5\x5e\x5f\x90\x5e\xac\xd4\xa3\xb1\x1d\x7b\x25\x4f\x2f\x96\xd7\x05\xe4\x53\xb1\x1e\xa8\x06\xc3\xf0\x92\xeb\xe2\x90\x15\x65\x24\x07\x1e\x20\x42\x5e\x13\x5d\x35\x96\x05\x16\x20\x32\x0e\x01\xd0\x65\xce\xf2\x40\x02\xa1\x23\x6e\x1b\x59\x64\xf4\xd9\x92\x13\x3b\x7f\x99\x3b\xdc\xf8\xa8\xd3\x33\x9d\x4f\x8d\x7b\x7d\xff\x89\x26\x6c\x99\x05\xda\xd6\x72\xd1\xd1\xe4\xf9\x25\xf0\x34\xc1\x9b\xb6\xe7\x99\x3e\x13\xc4\x58\x56\x6c\xc2\xa7\x74\xcb\x06\xb1\x26\x4b\x0a\xcb\x3b\xa1\x6f\xb1\x82\xa4\x01\x89\x21\x65\x0b\x41\x97\x47\xff\x51\x76\xce\x08\x88\xb8\xda\x78\xd2\xb5\x91\xcb\xda\x16\x78\xb3\x6e\xde\xb9\x53\xf2\x4c\xcf\x5e\xc0\xd0\x0e\x34\x7b\x7e\xfb\xcb\x6f\x36\x20\x0f\xe7\xfd\x7a\x67\xd6\x2e\xd6\x84\xab\x6b\x99\x58\x76\x43\x9a\x13\x58\x3f\xf0\x81\xed\x60\xac\x38\x8e\x49\x90\x26\x2b\x69\x06\x03\x2c\x21\x46\x2a\xf4\x5d\x55\x88\xb0\xe2\x39\xa6\x4b\x41\x2f\x31\x21\x37\xe7\x79\xb6\xe4\xfd\x33\xf2\x42\x7b\x68\xa5\x66\xad\xd6\x75\x7e\x1d\x16\xda\x97\xbd\xd4\xd2\xd7\xf2\xbb\x57\x97\x32\xcd\xeb\x8d\x4d\xa2\x60\xa6\x0e\x90\x86\x81\xe6\xb9\x9e\xc8\x72\xc8\x25\x3c\x1d\xd0\x48\xb3\x35\x07\x47\x9c\xc3\xc8\xaa\x2f\xca\x9c\x69\xaa\xb1\xe9\xd3\x88\x31\x75\x27\xb4\x95\x27\x1f\x1a\xbf\x77\x1d\x29\xa5\xef\xee\x50\xc3\xb9\x9f\x3f\xf7\x9d\xc6\xbd\x3a\xe2\xa8\x1d\xb9\xd9\x6f\xe1\x8e\x19\x38\xf2\xb6\xde\xc1\x69\x9f\x44\x19\x3e\x59\x83\x1c\xc3\x48\xb2\x21\x60\x96\xd3\xc8\x10\x4b\x61\x6c\x5b\x02\x47\x11\xa6\x2a\x46\x00\x59\x3e\xe3\x87\x74\x80\x74\xd5\x90\x5c\xcf\x95\xe3\x28\x13\x3a\xd1\xd7\x67\xcf\x31\x79\x45\xbc\xb7\xb8\xfc\xfd\xc5\xfa\xaf\x6f\xbe\xb5\x68\xf6\xdc\x26\x5d\x6e\xef\x65\xab\xe4\x2e\x5e\xf2\xc8\xb1\x12\x6f\x67\xfc\xf5\xec\x79\xb3\x4a\x48\xda\xc0\x2d\x9d\x73\x6d\xed\x71\xb0\x7d\xbe\xb5\x73\xcb\xf7\xdc\x34\xed\x8b\x9d\x27\xd5\xd6\x4a\x97\x63\x83\xd7\x96\xcd\xf0\xf5\xe4\xad\x1f\x68\x37\x4e\xae\xfe\x33\xfd\x6a\x7a\xa3\x7e\xdc\x97\x4a\xbf\xf5\x52\xe4\x7e\xd2\xe5\xa3\x5a\xcd\x3f\xbc\x55\xb3\xc8\xf1\xac\x95\x45\x89\x6d\x23\x62\x8d\xe4\x00\xc7\x22\xdb\x03\x22\xa5\xaa\xae\xc9\xd2\xa1\xc8\xe9\x50\x56\x24\x1e\x39\x84\xcd\x39\x91\x65\x47\x1a\x11\x32\x88\x20\x80\x63\xf0\x44\x02\x49\x99\x4e\x85\x1f\x1c\xed\x56\x62\xdd\x71\x7b\x42\x97\x75\xc2\xf6\x97\x06\x3c\x18\x95\xb7\x43\xe1\x6d\x03\x4f\xff\x3e\xa3\x65\xdd\xeb\xda\xc5\x24\xe2\x9b\x0c\x48\xba\x10\xb1\x9a\x0d\x29\xe8\x8a\xa2\xe9\xc6\x3e\x1b\x40\x4a\x34\x45\x27\x04\xd0\xd6\x79\xc0\xc4\x06\x90\x3c\xec\x58\x26\x05\x08\x92\xc8\x84\x7d\x51\xba\xeb\x6e\x36\xb7\xc9\x74\xdf\xf1\xe3\x01\xb2\x68\xdd\xae\x7b\x90\x70\xea\xbd\x21\x05\xb7\xde\x7a\xb8\xf2\x28\xe8\x5b\xdb\x4f\x4b\xa2\x64\x2f\x4d\x10\xb2\xa8\x08\x64\x80\xb1\xc4\x7b\x58\xe1\x25\x14\xdb\x06\x87\x3c\xd1\x82\xb6\xc8\x43\x41\x8d\x02\xe3\xaf\xe7\x94\x29\x84\x8a\x62\x22\x3b\x4e\x7c\xa4\x5b\x74\x1f\xbc\xad\xe4\xb1\xf4\xbe\x45\xda\xdd\xca\xdd\x7d\xda\xfb\xeb\x0e\x8f\x2c\xda\x6e\x3e\x60\x8c\x6d\x95\xe2\xf3\x4d\xe6\x74\x6c\x93\x44\xa5\x1a\x27\xc2\x91\xea\xd2\x40\xa0\xb4\x80\x97\x19\x31\xa6\x70\x14\x7a\xa6\x6a\x91\x0a\xe3\x9a\xb4\x27\x60\xe4\x29\x96\xaf\x4b\xc0\x64\x68\xcf\x08\x91\xf8\x64\x8e\x9f\x55\x65\x63\xfb\x02\xf3\x36\xd0\x67\x1b\x7e\x70\x7b\x5f\xfc\xf6\x2f\xab\xca\xce\x99\xd8\x01\x57\xfc\x61\xc1\xad\x23\xfb\x2e\xb5\x7c\x03\x24\x2f\x5c\x49\x27\x7d\x0a\xb0\xa1\x4f\x84\x92\xc4\x71\x2e\x41\xd1\x4c\xc8\x40\x42\x20\xe8\x90\x30\x04\xd9\x0f\x29\x07\x59\x8e\xc6\x6a\x96\x1a\x6a\x24\x49\x7b\x46\x62\x06\x78\xae\xee\x5a\x83\x9a\x79\x8c\x9a\xfb\x77\x96\x6b\xfa\x4c\xcd\x9f\xb6\x38\xad\x06\xed\x99\x5e\xbd\xf6\x17\xe4\x6b\x57\x1f\x15\x6d\xf0\x79\xef\xe4\xed\x63\x92\xe7\x62\xdb\x37\x29\x4c\x61\x89\x24\x74\x9e\x8c\x74\x02\x05\x1c\x07\x95\x40\x22\x6c\x31\x96\x79\x32\xc4\x5c\xec\xd1\x30\x02\xd0\x64\x84\x18\x84\x4f\x1e\xbb\xc5\xf3\xe9\x41\x15\xa6\xc1\x0a\x44\xbd\xa1\xcf\xf6\x7f\xe6\xda\xa7\xbd\xfa\xfa\x13\xab\x5f\x64\x3f\x5e\xf4\x62\xc1\x02\x13\x3f\x2a\xb8\x33\x79\xe1\x8a\xaa\x2b\x30\x56\x24\xf1\xbc\xcd\x1b\x1e\x63\x5a\xae\x16\xd9\x8a\xa6\x47\x8e\xcb\x85\x91\x4b\xba\xbe\xa3\x9a\x92\x60\xaa\x2a\xf2\xac\x20\x90\xc2\xff\xc2\xe9\xfd\xbf\x70\x6f\x97\x2e\xfb\x7d\x07\xf6\xfc\xb8\xb3\xf3\xe4\xf4\x33\x4e\xe7\x86\xdf\x1c\x1d\xdc\xd3\xca\xf5\x63\xb9\x8a\x74\xe7\x39\xdd\x8b\x97\xcc\x1a\xad\x2c\xf1\x95\xe4\x06\x04\x45\x03\x46\xf5\x29\x01\x85\xb6\x12\x3b\x8e\x21\x40\xa0\xb8\x3e\x49\x05\x3c\xa0\x74\xcb\x10\x63\x9d\x36\xa0\x4f\x38\x84\xef\x21\xf2\x3f\xce\x55\x4f\x72\x88\xa7\xe0\x6d\xff\x1f\x6b\x67\x1d\xad\x55\xd1\xf6\x7f\xc0\x43\x77\x23\x82\x80\x82\x20\x25\xec\x24\x94\x16\x14\x11\x49\xe9\x98\x3d\xbb\x66\xcf\xee\xde\x1b\xa9\x83\x74\x83\x0a\x02\xd2\x20\x8d\x34\x52\x82\x84\xd2\x9d\x02\x22\x48\x4a\xa7\x84\xf0\x5b\xef\xf3\x7b\x9f\xe5\x73\x5e\xee\xb3\x7c\xd6\x59\xf7\xff\xf7\x1f\x73\xcf\xbe\xe6\x9a\x6b\xae\xf8\x7c\xe3\x06\x53\x3b\x14\x5e\x7a\xa9\x43\x9f\xd3\x35\xab\xf7\xcc\xa5\x16\x2e\x7f\x97\xca\x2d\x9f\x3a\xdf\xfc\xec\x86\xad\x7b\x6f\x24\x91\xbf\x1b\xd8\x14\xcd\xd8\x8a\xe3\xa2\x88\x76\x35\xda\xf4\x08\x22\x94\x20\xa1\x92\xa1\xaf\xa9\xac\x46\xf9\x8c\x8a\xf9\xd0\x62\x90\x25\x31\x1c\xcd\xe0\x18\xbf\x7c\xe4\xe6\x9c\x9d\xb2\xf9\xe1\xb4\x6a\xf3\xb7\x4c\x3b\x76\xa9\xe4\xf8\x43\xc7\xfb\x0f\xf9\xbc\xc9\xb7\x1f\x5c\xce\x13\x6e\x68\x79\x40\xde\x0e\xc4\x24\x3a\x35\x0a\x41\x6c\xa8\x02\xc7\xb8\x94\x80\x5d\x15\x06\x1a\xcb\xf8\x31\x8a\x39\x9e\x61\x08\xce\x40\x58\x0c\x74\x1d\x06\xaa\x14\x3b\xbe\x27\x79\xb1\xc5\xbc\xbc\xdc\xa7\xb9\x4e\xce\x6a\xb4\xf3\xf2\x84\x01\x45\x4f\xa5\x54\x3f\xb7\x7d\xe3\x9a\x1f\xa7\x1d\x34\x9f\xd4\xe9\x95\x55\xbb\xbc\x71\x05\xf3\x19\x9d\x3c\x0f\xe1\x2b\x9e\x44\xf2\xc0\xb5\x6c\x4d\xb1\x4c\x85\x91\xa4\xc8\x91\x5c\xd2\x11\xfe\xc7\x74\x09\xc2\x03\xba\xec\xf1\x0c\x20\x20\xcb\x1b\x32\x45\xb8\x31\x88\xd2\x21\x2d\xbd\x31\xf9\x4d\xaf\xd1\x67\xab\x06\xc2\x22\xe5\x56\xe7\x9f\x97\x99\x04\xf9\x1f\xfe\xd6\x61\x5e\xfe\x0e\x23\x16\x6c\xaf\x5e\xe7\xc2\x1f\x1f\xa6\xf1\xd8\x41\xc1\x82\x67\xcf\x76\xfd\x6b\xd7\xed\xdf\x7e\xf8\xed\xf6\xd5\x37\x5e\xbd\xd3\xab\x58\xff\x22\xd9\xf5\xdc\xfd\xfb\x7c\x7f\x78\xef\xf5\x41\x6f\x25\xb1\x20\x4f\xd0\x0c\xad\x68\x11\x8e\x6d\x48\x78\xb1\x4f\x88\x82\x43\x93\x94\xec\x2b\xaa\x6f\xb1\x01\xe7\xb1\x62\x18\x88\x11\xe4\x60\x44\x11\x91\xe9\x45\x76\xf8\xf2\xf7\x58\xf2\x4d\xd5\x61\x0b\x26\x6d\xfc\xe8\xdb\x0d\x83\x9f\x9d\x7c\x7f\x65\x8f\x45\x97\xe6\x14\x24\x5b\x69\x2b\x0b\xf4\xdb\xb6\xf1\x6e\xdd\x46\x19\x33\x9f\xc4\xec\x48\x22\xd4\xc8\x80\xa7\xcd\x40\x95\x4c\x13\x03\x86\x0a\x64\xda\x8b\xec\x40\x62\x19\xd6\x37\x89\x30\x00\x8a\xc9\xfb\x81\x20\x20\xc5\x0c\x04\xd1\x83\x41\xe2\xce\xea\x99\x0f\x61\xb9\x27\xc5\xa7\xb5\xee\x30\xb5\x04\xff\xfc\x02\xfd\x76\xa1\x61\x7f\x9d\x2b\x00\xdb\x8c\xca\xba\xf4\xaf\xe9\xb7\x45\x9c\x44\x98\x9d\xce\x01\x20\x73\x3a\xed\x09\x32\x16\x90\x4f\x59\x86\xae\x49\x44\x0c\x2d\x1f\x44\x48\x55\x62\x64\xb1\x72\xac\x46\x38\x76\x1c\xdf\x96\x3c\xc3\x84\xe4\xcb\x61\xee\xa3\xf9\xdf\x4c\x77\x42\xa1\x78\xa9\x89\x5a\x11\x77\xc4\x96\x35\x07\x16\xdd\xca\x66\xa2\x66\x21\x0a\xde\xfe\x7c\xe8\xf7\x53\x33\x56\xb1\x48\x3c\xb1\x04\x34\xe8\x3a\x11\xe7\x5b\x04\xd4\x44\xd3\xb4\x24\x15\x06\x81\xc3\xa0\x48\x24\x4c\x5e\x85\xa1\xe4\x1b\x1e\x8b\x78\xe7\x7f\xce\x02\xf2\x25\x9c\x86\x2d\xf6\x1f\x2e\xb0\xc1\xf3\x3a\x68\x5c\xf6\x2a\xe4\xbd\x9a\x93\xda\x34\xe4\xf6\x77\x5d\xf9\xfc\x35\xfb\x61\xea\xd1\xac\xdf\xcd\x1f\xbf\x8b\xff\x6d\x7b\x12\x05\x63\x29\x86\x09\x4d\x2a\x96\x2c\x97\x27\x29\x00\x08\xd2\x10\x44\x2e\x72\x74\x89\x46\x40\xb4\xb1\xa9\x38\x22\xad\x42\x53\xc4\x4a\x4c\x98\x50\x55\x78\x3e\xc1\xcb\x72\xea\x27\x59\x7e\x9b\x1b\xe5\x3a\x58\x3c\xf7\xe7\x03\x6a\x0c\xce\xc7\x2c\x6e\x71\xad\xcb\x47\xcf\xf3\xcf\x7b\xd3\x3f\xc2\xff\xbc\xee\xce\xbe\xe4\x2d\xd7\x8b\x14\x32\x0a\x90\x47\x1b\x8c\x45\xf8\xd8\x17\x4c\x9b\x61\x49\xe8\x6b\x22\xad\x40\x8d\x97\x5d\x22\x50\x09\xa8\x1a\x42\x20\x9a\xa4\x13\xb2\x1e\x48\x70\xe4\x8e\x3b\x63\x7e\x61\x6b\x2d\xa9\x8a\x9b\x2f\xff\x69\x3c\x7e\x6d\xec\x6f\xf2\xa9\x94\xc1\x7e\x9e\xd4\x4b\xb7\x76\xed\xfa\xdc\xfa\xfc\x93\xe4\x2d\x57\x30\x09\xd1\xf1\x62\x23\xd6\x49\x4b\x66\x62\x4b\x30\x4c\x1d\x3a\x6e\xa8\x04\xbe\xce\x04\xd8\x08\x0d\x1f\x71\x11\xf2\x7c\x2c\x99\xa1\x49\x98\x98\xe7\x12\x87\xa1\x83\x73\x1c\xfa\x68\x68\xf6\xed\xc3\x2a\x12\x83\xc4\x47\xab\xf6\x1a\x6e\xe6\x79\xf1\xe3\xfa\x6b\xaf\x75\xea\x9a\x6f\xef\xaf\x03\xce\x26\x31\x65\xcb\xaa\x0a\x50\x7d\x43\xb5\x1d\x8a\x94\x0c\x17\x1b\xb1\x02\x05\x47\x27\x40\x64\x30\x5c\xc0\xaa\x5c\xa4\x84\xae\x8f\x50\x44\x9b\xb6\x6d\xd9\x91\x6b\x25\x20\x10\xde\xeb\xd5\xf8\x95\x3a\x27\x36\x9d\x2a\xd2\xe9\xf5\xc2\xef\x6c\xfe\xb5\xd0\xae\x53\xa9\x35\x3f\xfd\x61\x58\x9e\xf7\xb2\xd7\xfb\xea\x79\xdf\xd4\x8c\xf9\xe0\x84\x1e\x42\x08\x5c\xcf\x94\xf5\x08\xc9\xb6\xa5\x1a\xd0\x17\x3c\xc2\x08\x75\x09\xc9\x02\x82\x4a\x40\x43\xc9\x63\x69\x8f\xe5\x15\x42\x27\x28\x33\x92\x22\x04\xed\xc4\x45\xc2\x5a\xf7\x6e\xdd\xec\xbb\x6e\xee\x98\xe6\x55\x1e\xfd\x92\xbf\xe8\xf0\x31\x3f\xec\x1a\x34\x70\xe0\x9a\x57\x7e\xa8\xfa\xc6\xd2\xc6\x6c\x8f\x3f\x33\xa6\x6b\x90\x98\x32\x4b\x88\x56\x44\x48\x3c\x03\x75\x91\xd0\x2c\x21\x52\x39\x92\x70\xb0\xef\xd8\xa2\xce\x91\x52\xe8\xcb\x0e\x76\x58\xd9\xb5\x79\x22\x70\x1d\x0e\xfd\xaf\x2c\x4d\xda\x1d\xd6\xf4\xa5\x7b\x8a\xaf\xef\x96\xb7\xde\xa5\x1d\xb5\x4e\x3c\x08\x67\x76\x78\xe3\xb3\xf7\xda\x4d\xce\xef\x7d\xd1\x7e\x44\x9e\xa2\xf9\x86\x5b\x49\xe4\x9f\xd2\x7c\xe0\x53\x5a\x08\x48\xdb\x14\x49\x8d\x32\x59\xc1\x26\x03\x8a\xd0\x5c\x29\x12\x30\x22\x1d\x86\x0a\xa2\x80\xb1\x28\xc5\x82\x7a\x00\x31\x8f\xd2\xe1\xd7\xf5\x1c\x54\x63\xc9\xf2\xdd\x45\xdb\xfd\xb9\x62\xf1\xe8\x21\x3b\xb5\x1c\xa0\xe5\xa2\x49\x5b\x0f\xbe\x78\xfd\xc2\xd9\x2f\x0a\x4e\xba\xb1\x29\x53\x12\x67\x88\x1c\x82\x8a\x15\xdf\x80\x20\xd2\x2d\x41\x36\x68\x15\x28\xba\x07\x69\x22\x88\x6d\xde\x45\x24\x4d\x5b\x58\xd3\xb0\xc0\xe9\xa1\xa2\x44\x10\xc4\xaa\xf4\x72\xe4\x3c\xe1\x95\x22\x9d\x07\xd7\x3c\xfb\xeb\x3d\x22\xcb\xaa\xa5\x2b\xa6\x2d\xd9\x3c\xb1\x7c\x1b\xd6\x41\x2d\x0f\x6d\xbf\x34\x75\xe5\xb4\x67\x65\x92\xd8\x8b\x18\xd8\x91\x27\xd8\x86\x6f\x73\x21\x6d\xab\x24\x70\x59\xca\x50\x38\x35\x62\x4c\xe8\x91\x90\x35\x09\x9f\x0b\x02\x99\xc0\x50\x45\x58\xd2\x21\x20\xec\x97\x97\x7b\x75\xdc\x17\xd6\xd9\x7b\xf9\xa3\x89\x8f\x26\xfe\x9e\xa5\xf2\xc5\x77\x47\x9c\x37\xc2\xa2\xa5\xb6\xcf\xa5\x7b\x5a\x51\x25\xba\x7e\xc6\xf8\x75\x89\x67\xd0\x04\xa0\x90\x71\x08\x28\x96\x54\x59\x47\x84\x90\x53\x5d\x43\x87\x18\xb0\x86\x11\x12\xbc\xe5\x73\x1c\xe4\xfd\x08\x61\x4c\x48\x8a\xc1\x60\xc0\xa7\x53\xed\x9b\xf0\x78\xf8\xfe\x35\x6d\xd6\x9e\x2a\x50\x94\xcd\x53\x0f\x15\x9a\x29\x2f\x3b\x3c\xf6\xeb\x76\x27\xc6\xdd\xba\xcc\x6e\xad\xdc\x9d\xfa\x23\x79\x91\x33\x6f\x51\xbe\x2a\x53\x9e\x12\x9a\xb4\xa2\x6a\x80\x03\xbe\xca\x58\x16\x8f\x85\xd0\x37\xb1\xcb\xa8\x3a\xc3\x68\x11\xe5\x93\x81\x46\x13\xa2\x02\x15\xe0\x26\xce\xc6\x5f\xee\xd7\x7c\xa8\x3a\xb1\xdb\xa9\x53\x4f\x95\xf2\xb5\x3f\x5e\x5a\xf1\xee\x84\x47\x0d\x82\x9f\x97\x7c\xf7\xa2\xeb\xf7\x23\x46\x5d\x5c\xb0\x26\x79\x36\x1c\x72\x7c\xc0\xca\xb2\xa4\xd8\xac\xed\xcb\xaa\x04\x30\xe5\x86\x12\x2b\xea\x42\x6c\xeb\xd8\x35\x7c\x56\xe4\x28\x9e\x95\x6d\x41\x53\x7d\xd5\xe5\xb1\xe3\xa6\x03\xd4\xba\x00\x37\x69\x29\x25\xf7\xed\xbf\x79\x6b\x45\xab\x2f\xea\x47\xf5\xbe\x2f\x01\x7f\xde\xb4\x65\xc5\x91\xdb\xd7\x7e\x7e\x6b\x64\xdb\x0d\x4d\xd3\xfe\xba\xe1\xc0\x87\x0b\xe6\xc7\x0d\x2a\xa4\x4c\xac\xf4\xdb\xa1\xf7\xee\xbb\xdc\xa6\x09\xc1\xcc\x1d\x39\x6e\x3c\xbc\xdc\xb3\xda\x9d\x55\x93\xdb\xa4\xfd\x75\x16\xae\xd4\x85\x0d\x7a\x45\xc9\x5e\x7d\xab\xe9\xfa\x72\xbd\xe5\x6a\xa9\xb3\x36\xdf\xe9\x69\x3f\xe9\xd9\xe6\xd2\xd1\x43\xf1\x0f\x35\xd2\xb8\xd8\x42\x8f\xe7\x4f\x9e\x50\xa1\xc1\xb2\xda\x6f\x8c\xba\x93\xbb\xd0\xbe\xe9\xd9\x6e\x6f\x5d\xdd\xa9\x7d\xcd\x66\xbd\xa6\xbf\x5b\xeb\xc9\x0f\xd9\x32\x26\x2d\x98\x18\x33\x0d\x19\xec\x13\xbe\x1f\xfa\xbe\x6b\x3a\x1a\x03\x38\x45\xd6\x09\x87\xe7\x05\x99\x15\x14\x87\xe2\x48\x83\x73\x78\x83\x0a\x45\x4e\xe2\x29\x5d\x8c\xd4\x04\x88\xd0\xc5\x0f\x07\xf6\x59\x5e\x77\x69\xfe\x85\xd5\x4b\x8f\xdc\xb2\x7c\x64\xa1\xc3\x4d\x17\x8e\x88\x6b\xfe\xf0\xdd\x69\x65\xc0\xe2\x2b\xd3\xbb\xce\x49\xde\x72\x23\x8b\xc1\xba\x87\x2c\x2c\x5a\x5c\x44\x79\x92\x8a\xa1\x86\x28\x4a\x0a\x1d\x4e\x12\x02\x49\x0d\x78\x81\xa0\x04\xc0\xc7\x40\x40\x1e\x1b\x38\x10\x49\xe9\xbc\x94\x86\x35\xca\xd4\x64\xcf\xb5\x2b\xbd\xa3\x15\x1f\x0d\x2c\x72\xf4\x46\xab\x6c\x0d\x67\x35\x3d\xbe\x14\x4e\x7b\xad\x7f\xcf\xf5\x13\xab\x96\xad\x91\xf6\xd7\x7d\x7e\x9e\x6e\x1d\xcb\xf6\xa0\x50\xf6\xc2\x5b\x66\xd7\xeb\x3f\x8b\xbd\xfa\x9a\xd0\xea\xce\xe5\xfb\xad\xde\x5c\x74\xf6\x8b\x45\x65\xb6\x5d\x4c\x63\xfa\xea\x22\x78\x7a\x6e\x85\x69\x2d\xe5\x94\x4d\x8f\x7e\x5e\xdb\x2c\x8b\x74\xae\xb7\xff\xe0\xf9\x99\x29\x37\x36\xf0\xcb\x66\xbc\xb6\x4e\x4b\x62\xb7\x67\x08\x5d\x59\x27\x05\x0c\x15\x85\xb2\x31\x21\x33\x01\xcd\x41\xec\xda\xb4\xc3\x69\x3e\x8d\x4d\x8b\xb5\x29\xc3\x22\x3c\xd6\x91\x6d\x1c\xb8\xb4\x6d\x25\x0e\xa3\x67\xce\xee\x50\x6f\x7d\xee\xfd\x4d\xf0\xec\xcf\x6b\x2c\x39\xce\x68\x37\x4e\x0d\x6b\xf6\xe8\xd3\xef\xbf\x9a\xc1\xbf\x5d\xe8\xe4\x89\xa7\xaf\x24\x31\x8c\x56\x08\x87\xf0\x7c\x0f\x1a\x20\x44\xa6\x03\x63\xac\x4a\x94\xe3\xda\x8e\xee\xcb\x31\x88\x63\xdf\x03\x1a\x96\x39\x1f\xab\x9c\x45\x58\x9a\x8c\x30\x7c\xd9\xe0\x76\xf7\x1d\xfb\xdb\xea\xfa\x2d\xaf\x0c\x2d\xf9\xd8\xda\x77\xa0\xff\xf2\xf7\x7f\xcb\xdc\x2c\x77\xe3\x9c\x03\x0e\x0f\x19\x13\x0d\xd9\x3e\xbd\x68\x12\x6f\x1c\x32\x12\x2c\x82\x23\x4d\xe4\x1a\x74\x24\xbb\x16\x19\x1a\x5e\x24\x7b\x92\xe0\x04\x3a\xa3\xc7\xc0\xb3\x04\x46\x14\x35\xec\xc6\x81\xce\x6b\x0a\x63\x27\x60\x9a\xef\x2d\x58\x64\x72\x9f\x62\xbf\x15\x9c\xf6\x46\xa5\x9b\xf3\x8a\x8c\x79\xd8\xfa\x97\xf8\x76\xce\x53\x45\xe7\x7f\x7a\xa0\xdc\x96\x8f\xdb\x9e\xcc\x58\xfb\x6f\x42\x5f\x48\x85\xae\x0a\x3d\xdb\xa5\x04\xc8\xab\x0e\x2d\x2a\x61\xa0\x99\x96\xe8\xb9\xbc\x11\x30\x61\xa0\xe9\xc8\xa5\x04\xce\xf6\x15\x9d\xc5\x44\xc4\x68\x28\x6d\xb3\xc6\x7f\x28\x27\xff\xde\xe2\xca\xac\xb2\xbd\xaf\xdd\xa9\xd3\xe7\xa7\xf2\x1d\x77\xc1\xcf\xf3\x6a\xd8\x9d\xfe\x43\x9b\x6e\x73\x66\x14\xf5\x0e\x9b\x49\xd4\x49\xb2\x8d\x40\xe6\x15\x11\x1a\x48\x75\x90\x88\x19\x5e\xd3\x18\x55\x8d\x83\x88\x16\x24\x5a\x8b\x23\x9b\xd1\x03\xe0\x62\x93\x21\x1d\x83\x75\x03\x09\xf3\x09\x98\xb4\x8f\x0e\x7c\x77\xb7\xcb\xe6\xea\xeb\x26\xe6\x1e\x5c\xe4\x47\xe5\xe6\xe0\xe7\x4f\xda\x77\x38\x48\xcf\x1d\xf6\x5b\xa3\x22\x4e\x95\x3a\xc5\x5f\x4b\x22\xe0\x55\x13\x54\x0b\x9b\xd0\xf3\x3c\x26\xd0\x54\x8d\x87\xa6\x2e\x45\x12\x19\x8b\x84\xa2\x84\xa4\x02\xb0\x2a\x8b\x91\x4a\xc8\x7e\x4c\x11\x0c\xed\xd8\xae\x90\x4e\xbe\xbc\x40\x85\x2f\xb2\xda\xd5\x4a\x0d\xfe\x64\x57\xa9\x03\xb9\x6f\xcf\x7d\xf2\xed\xfe\xbc\xce\x98\x52\xaf\x9f\x1b\x7b\x88\x1e\x59\x60\xcc\x9b\x49\x6c\x87\x81\x24\x06\x81\xa7\xc7\x0c\x8b\x1c\x9d\x73\x8c\x88\x0d\x50\x68\x69\xae\x12\xe9\xb6\x61\xf9\x40\x0a\x2d\xe0\x5a\x92\x06\x05\x36\x90\x02\xd3\x8c\xc0\xcb\x3b\xbc\x59\x3b\x78\x68\x26\xbf\xb4\xe2\xad\x9f\xea\xfd\xfc\xcd\x84\xea\xbb\xd8\x8e\xc5\x8f\x34\x90\xeb\xbf\xd2\x24\xdf\xea\xc6\x8b\x3a\xfc\x9a\x31\xa2\x5e\xe2\x7e\x70\xa4\xeb\x9e\x80\x00\x2f\xfa\x46\x48\x12\x21\xb6\x15\xd2\x76\x3c\xc8\x7b\xa4\xa9\x44\xa2\x2b\x50\x24\xe7\xb9\x71\xc8\x9b\xd0\xe7\x79\xcd\xd0\x14\xf4\x12\x0f\xea\x9f\xea\xe4\xa9\x4d\x0a\xf4\xcb\xf9\x7f\x1a\x4b\x4a\xd7\xd2\x0b\x14\xbf\xb5\x35\x47\x01\xff\x59\xa3\x4e\xd3\xa7\x6d\xa8\xc4\x3c\x5e\x3f\xfc\x74\xe6\x3e\x83\xbf\x5e\xfb\x01\xde\x6e\x64\x8c\xb3\x91\x8e\x18\xba\xae\x47\x58\x72\x5d\x80\x74\xd2\xa2\x22\x21\x96\x4c\x81\xc2\x3c\xa0\x7d\x36\x62\x14\x4d\x83\x22\xc0\x0a\x8f\x5d\xd6\x22\x79\xc3\x85\x8e\x65\x25\x2e\x13\xbd\x8f\xc7\x76\x3e\xf8\xf3\xa4\xf0\xe8\xb9\x45\x7f\xdc\xc9\xf2\xa4\xdc\xda\x29\x85\x8b\x75\xaa\x5f\xb7\x0b\x3f\x6f\x50\xce\xa5\x03\xcf\x27\x91\xba\x0b\x22\xd9\x08\x35\xdb\xb7\x5c\x5a\xd3\x69\x9e\xd5\x3d\x24\x1b\x01\xf0\x09\xd2\x54\x03\x39\x56\x1c\xc2\x0b\x90\xe2\x13\x9a\xca\x03\x4b\xb1\x25\x19\x05\x89\x43\xd9\x3d\x17\x46\x1f\xab\xfa\x5a\xf6\x4d\x7b\x37\x1d\x10\xb8\x9c\x45\xd6\x54\xab\xf7\xde\xef\x9f\x64\xff\x23\xdf\xb1\xbd\x3f\x7d\xbb\x83\x5e\x5c\x37\x89\x66\x1f\xf9\x9c\x06\x68\x96\x63\x23\xc5\x41\xb1\x1c\x1b\x01\x52\x38\x9b\x63\xb4\xc0\x12\x09\x1e\x79\x96\x86\x4c\x8b\x57\x25\x06\x30\x4a\x28\xba\x3e\xf0\x13\xef\xf2\xb4\xa5\xf8\xbd\x6b\x5b\xdb\x6e\x3b\x78\xd9\xec\x17\xcd\xf9\x4e\x9a\x40\x1c\x9d\x35\x61\xd8\xe5\x0e\xbb\xba\x6d\xc8\xda\xb5\x73\xc9\xb5\xc9\x7b\xf0\xfa\x7e\x28\x07\xae\xa9\xb3\xd0\x93\x58\x01\x47\x86\x25\xe8\x21\xd2\x69\x5d\xc5\x32\x2f\xd9\x8a\x18\x10\x28\x92\x5d\x44\x79\x91\x06\x45\x2b\xe4\xdd\xbf\xe7\xca\xff\x6d\xfa\xff\xd4\xf4\x91\xda\x24\x4b\x81\x02\x05\xd2\x9a\xfe\xc2\x45\xdf\xe7\xbc\xd4\x73\x51\x38\xf7\xf4\xca\xdd\xa5\x2f\xd7\xb8\x2a\xde\x1d\x76\xe8\xee\xf1\xaf\xc2\xd3\x1f\xbd\xf7\xdd\x21\x21\x57\xc6\x64\x1b\x12\x9a\x3e\x14\x04\x68\x31\x12\xc1\x05\x01\x21\x39\x3a\x0f\x59\xc6\x42\xba\xee\x3a\x8c\xa3\x01\x16\xf9\x1e\x23\x99\x28\x80\x22\x83\x4c\x9d\x03\xff\xf3\xe4\x34\x13\x7f\x94\x9b\x3f\x8b\x9d\xcf\x8e\x5f\xa5\x5c\x69\xb8\xa3\xcb\xc5\x0f\x07\xfb\x1f\x34\x38\x2a\x55\x2f\x6a\x36\xf9\x75\x5c\xc1\x65\xa5\xad\x33\x95\x93\x17\x64\xc1\x98\xa6\x8d\x18\x92\xa4\x4d\x93\xa1\xc6\x85\x91\x0d\x64\xc9\x10\x2c\x1f\x85\xb4\xe1\xba\x3e\x60\x0d\x8a\x22\x64\x20\xf8\x36\x69\x92\x9e\x0d\xf9\x74\xc6\x55\x6f\xb4\xbb\xb5\x7c\x76\xd1\x7a\xbf\xb2\xdd\x86\x5b\xe5\x5e\xed\x66\x2d\xbd\x5f\x53\xd2\xb9\x2c\x47\xc9\xf3\x39\x77\x4f\xbe\xb4\x26\x89\xf0\x13\x4c\x63\x1e\x02\x51\xb5\x69\x9b\x90\x22\x81\xb4\x70\x80\x34\x02\x62\xc3\xf6\x81\xca\x3a\x44\x84\x6c\xde\x8d\x5c\x44\x04\x1a\x43\x90\x21\xab\xd8\xe9\xb0\x16\x37\xbd\x61\x56\xed\xf3\x54\x2e\xdc\xed\x73\xe3\xd3\xc7\xd9\x2e\x5f\xdb\xfb\x4a\xad\xf1\x9d\x77\x74\x7c\x51\xdd\x28\x76\x66\xdc\xd1\x02\x19\x9b\xd9\x4b\x0c\xae\x80\x9a\xc5\xbb\x3c\x63\x19\x38\x04\x8e\x26\x1a\x7a\x68\xb2\x06\x4d\xb2\x11\x03\x24\x2c\xb3\x14\xed\x84\x12\x14\x20\xa4\x42\x4f\xe3\x04\xd1\x88\xe1\x4b\x03\x70\xff\xd4\xc1\x94\xda\x24\x73\xa6\x89\x95\xd2\xb6\x2b\x2f\x53\xbf\xba\xa7\xbc\xd8\xe9\x3f\x93\xbf\x39\x59\xa5\xef\xcf\x63\xef\x1f\x38\x34\xc6\xef\x40\x8d\x5e\x9a\x73\x64\x96\x8b\xcb\x97\x8c\x4d\x9e\x1d\xd1\xa2\x21\xc5\x2e\x56\x42\x4b\x8c\x28\xcf\xb1\x90\x2d\x8b\xb4\xc2\x40\xda\x61\x81\xed\x48\x11\xe9\x8b\x0c\xe1\x41\xc8\x72\x14\x05\x02\x4f\xe6\x94\x74\x7a\xf3\xba\x8f\xbc\x35\x13\xe5\x39\x3f\xbd\x81\x73\x6b\xda\x99\xef\x0e\x54\x98\x71\x6f\xd2\xd8\x23\x23\x96\x29\x43\xf9\xca\x5b\x6f\x56\xef\x9c\x3c\x34\x23\xb0\x7d\xec\xd2\x31\xc7\x33\xbe\xac\x79\xa2\x19\x20\xde\x07\x2e\x0e\x01\x54\x49\x13\x70\xb4\x23\x30\x2e\xeb\x06\xac\x2b\x46\xac\xcd\x1a\x8e\x2d\xe2\x74\x66\x3f\x67\xf7\x1b\x79\xe0\xc7\x28\xc7\xde\x41\x53\xf6\xff\x50\x70\x96\x4b\x4d\xd2\x16\x1c\xbb\xd0\x66\xc8\xae\x32\x6d\xa7\x5f\xaa\xff\xfb\xe2\x8c\xb5\x60\x24\xb4\x23\x5e\x93\x23\x40\x0a\x12\xaf\xca\x6e\x28\xc8\x7a\xac\x79\x1a\x23\xeb\x4c\x0c\x04\xe8\x48\x02\x0d\x43\x5e\xe6\x98\x58\x53\x68\x4e\x83\x2a\x13\x13\x64\x3a\xa6\x1f\xe5\xfc\x6a\xce\xde\xda\x55\x8a\xc2\xa9\xc5\x07\xbd\xb5\xef\x87\xb6\x6f\x2e\x3e\x50\x6d\x53\xa6\x62\x8d\xaa\xd4\x3d\x9b\xf5\xdc\xfc\x57\x4e\x25\x71\x1e\x9e\x09\x95\x48\x87\xac\xef\x30\x58\x97\x74\x12\x71\x2a\x4d\xdb\x16\x21\x09\x14\x61\x23\x0f\x41\x4a\x33\x71\x48\x79\x50\xb6\x20\x6b\x32\xb1\x0e\xd3\x61\xa1\x7d\x71\xee\xf0\x57\xd9\x57\x4e\x18\x34\xb8\xd2\xc2\x4b\x85\x27\xae\xc8\x77\x42\x13\xb3\xd9\x93\xde\xa7\x9e\xb8\x7d\xde\xb1\x0b\x97\x38\x98\xbc\x8b\xca\x0b\x10\x14\x78\x68\xb0\xbe\xcc\x12\x26\x4b\xb9\xb4\x25\x19\xae\x0e\x15\x5d\x34\x2c\x5a\x0a\x71\xa4\x21\x0e\xeb\x2a\xeb\x4b\x34\x15\xf3\x96\x17\x4b\x89\x77\xb9\x80\x96\xa3\x42\xc1\xcc\xdb\x8b\xd4\x1a\xbf\xf7\x40\xf3\x86\x7f\x7e\xb2\xf9\xf4\xfe\x9c\x13\x46\x77\x8d\x17\x0c\x0d\x86\xad\x79\x91\x92\x31\xec\x56\x62\x86\x95\x6a\x50\xb1\x21\xfa\x81\x2d\xf1\x2c\x92\x65\x09\x13\x7e\x28\x98\x36\xe7\xca\xa4\xeb\x06\x66\xa4\x40\x92\xe5\x3c\x42\xc6\xbe\x65\xab\xa4\xe3\x10\xee\x4b\xf0\x8a\x7f\x6a\x7a\x4c\x6d\x9c\x25\x4b\xae\xb4\x57\x6b\xa9\x9e\x75\xce\x6e\x7c\xf4\xcb\x1f\x8d\xeb\x7f\xb4\x6a\x7e\xb5\x55\xa0\xd2\xc1\x99\x45\xaf\xb4\xe8\xab\x8c\xba\x27\xbd\xbf\x01\x35\x4b\x9e\xd2\x00\x30\x6d\x8d\xd5\x34\x4d\xe1\x62\xcc\x1b\xb4\x6c\x8a\xd0\xc4\x2a\x46\x31\x6f\x32\x9c\xe5\x0b\x92\x21\xe9\x01\xe9\x99\x62\x68\x21\xd6\x31\x04\x4a\xc3\x76\x62\x33\xfa\xe3\xda\xc5\xa7\xc6\x93\x0b\xb3\x7f\x5d\xf1\xdb\xb1\xfc\x2d\xdf\x3b\xf1\xb0\x03\x29\xfc\xd2\xbc\xf9\xda\xcf\xbe\xde\x7c\xc3\x1b\xd7\x3d\x63\x45\xaa\x74\x20\x5d\x2a\x64\x42\xdb\x46\x1e\x0b\x7d\xdf\xd2\xc3\xd8\x05\x04\x61\x87\x2a\xc5\x13\x91\xc1\x6a\x12\xa1\xb3\x9a\xc8\xb0\x88\x04\x28\xd2\xa4\xd8\x89\xd4\x74\x98\xc0\xd6\xe9\x3b\x5d\xe6\x95\xf0\x87\x7d\x32\x78\x72\xef\xfa\xbd\x5e\x4c\x98\xd5\x3b\x73\xf7\x93\xbd\x32\x67\x9f\x36\x98\xd9\xd7\x92\xca\x18\x09\x22\x71\xf3\x86\x6f\xd0\x20\xe4\xa0\x6e\x84\x3c\xd0\x11\x72\x04\xcf\xa6\x4c\xcf\x12\x15\xce\xc1\xbc\xac\xd9\x06\x20\x55\x42\xa7\x54\x83\xd2\x05\xce\x47\x90\x14\x12\x2f\xb9\x66\x4a\xe1\xdd\x33\x76\x7e\x35\xe8\x77\x74\xa7\xf5\x4e\xb5\xee\x77\xcd\xeb\x2c\xee\xf2\x47\x29\xe1\x2a\x79\xf5\xa3\xe3\xca\xa2\x43\x19\xf3\x2f\x09\x97\x0c\x62\x21\x22\x90\x23\xc8\x86\x07\x35\xcd\x27\x05\x80\x21\xa9\x38\x94\xaf\xcb\xb4\x41\x02\x89\x31\x02\x59\xc0\x14\xa0\x68\xa4\xb2\xa6\x11\xc6\xff\xbf\xc5\xeb\x5f\x4b\x3e\x9b\xe3\xbf\xeb\x26\x4c\x6d\x3c\x1d\xa4\xa4\xbd\x59\xd7\xd2\xa7\xfa\xbd\x02\xee\x64\xeb\xfb\x5b\x97\x05\xb7\xaf\x3d\x3f\xac\x6b\x4d\x0b\xfc\x91\xf9\x54\xd7\x4e\x4b\x6b\x7f\x3b\xa0\x98\x99\x44\x9d\x18\x97\xf1\x49\xc9\x17\x28\x0e\xc9\x94\x1f\xf8\x3a\xf2\x28\x3d\xc6\x31\x1f\x6a\x96\xab\x47\xbc\xc2\x21\xcc\x72\x5a\xa8\xa0\x50\x56\x91\xa7\x72\x91\x42\x25\xb6\xfc\x7c\x05\xc7\x0e\x6c\x5a\xe1\xc9\x87\x87\x7a\x8a\xf3\x7a\x6d\x2e\xb1\x33\xf3\x86\x47\x1d\x2f\x4e\xf9\xbc\x65\x8f\xf2\x5f\x4f\xfe\xaa\xe3\xd6\x8c\x05\x03\x89\x9f\x80\x84\x12\x01\xcb\xf3\x38\xa4\x92\x54\xac\xb3\xa4\xc8\x52\x16\x15\x28\x9a\x17\xd1\x2e\x25\x0a\xa4\x87\x20\x0c\x74\x40\xc9\x11\xd4\x2c\xc6\xa4\x89\x38\xf1\xcd\xda\xf9\x89\x3d\x22\x5f\x6f\xae\xfa\xc3\xae\x78\xe2\xce\xf7\x2b\xd6\x9f\x76\xe6\xd5\xef\xda\x52\xc7\x9f\x3c\x8e\x36\xde\xad\x32\xaa\x71\xc6\x1a\xf5\x13\x9a\x51\x80\x79\xc7\xb5\x49\x35\x44\x01\x6b\x1b\x92\x16\x71\xa6\xc0\xda\x61\x68\x53\x5a\x18\x45\x8c\x65\x93\x9a\xce\xb3\xaa\xa1\x38\x51\x18\x70\x16\x0a\x15\x2f\xb1\xe5\xf7\x1c\x77\x79\x68\xf5\x52\xb5\xdd\x72\xcf\xe3\xb7\x5a\x74\xe8\x50\xf7\xc8\xf0\x9a\x79\x7b\xed\x75\xd7\x0e\x1c\xd6\xfe\x77\xb0\x26\x7f\xc6\xb4\x04\x12\x4f\x7e\x2a\x8a\x2c\x28\x22\xe7\x21\xc6\xd0\xe4\xd8\xa0\x25\x49\x23\x74\x83\xe5\x3c\x9f\xa3\x4d\x52\xd0\x5c\x23\x60\x79\x31\x54\x5d\x8a\x24\x10\x85\x6c\x4e\x4c\x6c\x18\x45\xce\x7e\x17\xbe\xd9\x5b\x2e\x58\xa4\x2a\x91\xfa\xf0\x40\x15\x7f\xdc\x99\xaf\x7f\x2b\xc3\x5c\x9f\xd2\x36\xf7\x3b\x6c\xd1\xf9\xf7\x6f\x27\xef\x9a\x92\x49\xdd\x11\x30\x08\x59\x9f\x91\x1c\x89\x23\x38\x47\x27\xa3\x90\x8a\x0c\x3a\xf0\x24\x08\x65\x8f\xf4\x3d\x40\xb2\xa1\x28\xb9\x90\xd6\xb0\x41\xdb\xe9\xe0\xf6\x3f\x1e\xd4\xb3\x55\xe9\xde\x47\x47\xfc\xf0\xc5\xb9\x23\x37\xb7\x55\x9c\xd0\x60\x32\x23\x96\x5e\x9d\xad\x13\xec\xbd\x7d\x7c\xa6\x22\x8b\x92\xb8\xcb\x2c\x50\x55\x57\x63\x2d\x8f\x51\x22\xd1\x51\x78\xc4\x52\x2e\xe5\xeb\x1a\x27\xa0\x40\x8c\x6d\x4b\xd4\x8d\x98\x8e\xc2\xd0\x23\x30\xa3\xc9\xae\x46\x71\xf6\x4b\xa3\xe5\xff\xd4\x7f\x9c\xda\xa4\x7c\x83\xb2\xff\x27\x61\xf3\x4a\xae\x9f\x7d\xd7\xd8\x5a\x57\xcb\xff\xee\xd8\x59\x9b\x36\xef\xd8\x02\x6b\xa5\x7c\xb0\x6a\x5e\x2e\xb9\xea\x4f\xef\x28\xa3\xcb\xfd\x99\x3c\xd3\x87\x54\xec\x33\x10\xc5\xba\x86\xa4\x88\x8c\x74\xd2\xe0\x29\xd2\xc3\xa1\x11\xcb\x50\x86\x6e\x80\x49\x47\xe1\x95\xd0\x8a\x55\x44\x32\x92\xce\x1a\x71\x3a\xd3\x59\xbf\x47\x25\x1a\xd6\x3f\x95\x7b\x6f\xde\xdf\x7e\xaf\x3c\xc9\x58\x56\xb1\x58\xa9\x56\x87\x24\x6f\x76\x83\xfc\x83\xe6\x53\x67\xda\x36\xc9\x18\xbb\x22\xa1\x1d\xb1\xb4\x67\xea\x0a\xa1\x31\x7e\x60\xe9\x22\x27\x41\xdd\x8a\x11\xa4\xbd\xc8\x8e\x7d\x56\x50\x94\x08\x04\xba\xa2\x2a\x8e\xe7\xd9\x96\x45\x06\xb6\x1c\xa7\x43\x5e\x7e\x75\xf6\x81\x5b\x5b\xaa\xdf\x77\x17\xe4\x6b\xf3\xe1\xe5\x11\x55\xf1\xb2\x3d\x75\x46\xce\x18\x69\x34\x5d\x3c\x2d\xfb\xb0\xd5\x35\x16\x4c\x48\xde\x92\x79\x55\xf6\xa8\x90\x52\x98\x58\x71\x68\x96\xa7\x1d\xcb\x61\x6d\xc6\x09\xb4\x48\x33\x11\x1f\xbb\x3a\x32\x55\xde\xd6\x23\x47\xb6\x20\x50\x31\x43\xa0\x74\x12\x36\xca\x88\x21\xcc\xd6\x15\x53\x5e\xdd\x3a\xb7\x64\xd5\xd5\xbb\x1f\x37\x73\xde\x98\x7a\xe6\x5e\xd6\x69\x64\xa3\xc1\x0d\x1a\x7f\x58\x6d\xd1\x86\xe4\x05\x30\x91\x1b\x05\x46\x6c\xcb\xd0\x87\x86\x2e\x04\xaa\xec\x88\x21\xa4\x38\x2c\x6b\x22\x87\x08\x2f\xe6\x29\x91\xa6\x30\xd2\x4d\x27\x08\x3c\x83\x94\x81\xfd\xb7\xb6\xca\xa8\x5c\xff\x5d\xcf\x5e\x6a\x93\xcc\x63\x52\xfb\xa5\xbd\x5b\x4b\xcf\x58\xf7\xcd\xca\x52\xf5\x8a\xbf\x78\x90\x97\x9e\x7d\xeb\x93\xda\x6f\x0d\xb8\x56\xd8\x7c\x70\x66\x4e\xe5\xdf\x09\xa3\xc7\x8e\x30\x89\x93\xcf\x92\xc4\x58\x3a\x32\x08\x00\xd8\xd0\x75\x8d\xd8\x82\xbc\xa7\x61\xce\x92\x81\x40\x88\xb2\x6a\xb8\x82\xea\x9a\x54\x64\xd2\x3e\x19\xc3\xc8\x33\x7c\x2b\x1d\x3a\x87\x4a\xcf\xb5\xbe\x5f\x7b\x94\x4b\x2d\x33\xbf\xda\xe5\x9d\x07\xf6\x1e\x5c\xbe\x6d\xc9\xba\x6b\xd3\x8a\xbc\x20\x37\x3d\xed\xf8\x65\x8f\x24\xca\x36\xb8\x01\x15\xb1\x86\x0a\x23\xc7\xf4\xa5\x80\x8b\xa1\x46\xff\x8b\x92\x16\xda\x9c\xac\xd9\x2a\x76\x79\x4f\x33\x35\x53\x30\x1c\xe8\x29\x3e\xe5\xfe\xef\x78\xd6\xcb\x4b\x6e\x7e\x1c\xb4\x7a\x7f\xd3\x4d\x6a\x4b\xfb\x5d\xcb\x72\xe7\xfe\x71\x4f\xd1\xb6\x2d\xda\xdc\x28\x95\x7b\x91\xbf\xa5\xba\xbf\xe0\xcf\x69\xbf\x24\x91\x34\x4a\xaa\x04\x45\x42\x1e\x72\x24\x1b\xfb\xac\xe5\xf9\x0a\x8a\x00\x0b\x03\x56\x8f\x34\x08\x24\x45\x08\x02\x8c\x59\x3d\xd0\x43\x37\xc4\x1a\x06\x4e\x3a\x4a\x13\xcd\x8a\xe7\xeb\x72\x7e\xc1\x21\x69\xdc\xd9\x61\xb5\xa7\x31\xc7\x86\x75\x1a\xfe\xf3\xd8\xa5\x0b\x3e\x2a\x7d\x61\xa5\x5c\xe1\xc3\x9f\x76\x24\x2f\x61\x03\x7c\x01\x0b\x3a\xb2\x50\x28\xba\x61\xc0\x00\x17\xd1\xb4\xeb\x09\x31\xc5\xf0\x04\x67\x20\x4a\x65\x63\x56\x91\x58\x96\x67\x25\x05\xf3\xb6\xe9\xc8\x69\x71\x1b\x7f\x17\x42\x3e\xbe\x57\xee\xe6\x2f\x1b\xa6\x34\x29\x7a\x7e\xd0\x5b\xd9\xaa\x99\xd4\xb4\x3e\x03\x4a\xcc\x1e\x3f\x68\x65\xc9\x85\x55\x67\xb0\xb9\xef\x65\x0c\xed\x9e\xf0\xb4\x06\xa1\x14\xc4\x52\xe8\x7a\x1e\x21\x79\x34\x22\x28\x95\x73\x2c\xc7\x81\x36\x8b\x6d\xdf\x71\x25\x04\x62\x46\x20\x42\x4d\xe4\x2d\x9f\xf3\xd5\x50\x26\x12\xf4\x13\xf5\xdc\xd5\xb8\xec\x9c\x23\x0f\x2a\x4c\x1f\x9a\x3b\xff\xdb\xb7\x66\xe7\x79\x67\x64\xdb\x9f\xe6\x9c\x0d\x2e\x4c\xfc\x62\xa5\x55\x67\xcc\xa5\x6a\xc9\x33\x0a\xec\x44\x92\x1a\xea\x6c\x44\x71\x11\xcb\xf1\x21\x25\x6a\x96\x1b\xdb\x84\x0e\xa0\x8a\x45\x3e\xa4\x1c\x95\xd5\x80\xa7\x68\x7e\x44\xb1\x91\x20\x7a\x56\x3a\xd0\x81\x2c\x75\x27\x2c\x39\xbd\xfe\x70\xbd\xc1\xd4\x8b\x21\x6f\xe6\xdd\x7d\x3c\x6c\x3d\xb7\x7b\xb1\xda\xa5\xcf\xde\xd8\x3c\x21\xe8\x5d\xe1\x69\x8d\x24\xf6\x62\xd8\x42\xa0\x47\x2a\xb0\x18\x3a\x22\x48\xcb\x24\xd8\xd0\xf7\x68\xdd\x8a\x8c\x90\xe3\x0d\x57\x95\xb1\x13\x9a\xbe\x66\x7a\x0a\x17\x08\xb2\xec\xa9\xf1\xdf\xd1\xcb\xaa\xdc\xff\x5d\x17\x46\x6a\x93\x26\x29\x99\x1a\xa4\x0d\x05\x1a\xed\x2b\x57\x39\x75\xca\xe3\x6e\x75\x0a\xad\x1e\xbf\x61\xd1\x89\xda\x03\xef\xfe\xfa\xe7\xe6\x77\x6e\x65\xef\x32\x73\xce\x37\x7b\x0a\x57\x5a\x96\xbc\xb7\x86\x22\xb2\xaa\x22\x78\x9c\x84\x02\x45\x75\xbd\x90\x0f\xe4\x40\x83\xb4\xcb\xf1\x32\x64\x25\x93\xa7\x2d\x05\x62\xc3\x72\x5c\xd3\xa1\x35\xdd\x87\x12\x97\x8e\x26\x65\xb6\x67\x6b\x8f\x67\x1a\x36\xe0\x6e\xd9\x2b\xcc\xc9\x05\xe5\xbe\xf8\x7d\xec\x9c\x16\x73\x9b\xae\x9c\x8d\x3f\x69\x50\x69\x52\xa6\xd6\x17\x92\xa8\x49\x69\x48\x34\x61\x43\xd5\x35\x5d\x3f\x8c\x63\x0f\xcb\xd0\xd5\x49\xdf\x64\xe8\xc8\x23\x35\x35\x04\x12\x86\x2e\x07\x2c\xca\x65\x0c\x45\xf6\x2c\x92\x71\xf8\x97\x4b\xee\x95\xdf\x29\x96\x77\x40\x56\x6a\xe1\xba\x52\xe4\x88\x7b\x63\xaa\xe7\x1b\xba\x53\xa9\x38\xef\xae\xf4\xe2\x5a\xe7\x85\xd7\xab\xe6\xbf\x3f\x3d\x89\x99\x60\x6c\x62\x02\x99\x48\xf6\xd9\x18\x03\x4d\xe2\x45\xe8\x4a\x31\x8f\x11\x27\x45\xd0\x0b\x2c\xd5\x70\x44\x8f\x72\x99\x18\xe8\xd8\x35\x68\x95\x56\xd3\x41\xcf\x56\xed\x57\xd3\x2c\xdf\xb3\x4b\xdd\xad\xe7\xcb\xa8\xa7\xfa\x8b\xae\xb7\xb5\xc7\xbc\x49\xf1\xf5\x0a\x05\x46\x6e\x1b\x39\x4c\xca\x95\xb1\xa9\xbd\xc4\x0f\x50\x59\xa4\x22\x5d\x24\x22\xd9\x12\x40\x0c\x84\x48\x91\x54\x9a\x23\x79\x5f\xf0\x59\x9b\xb3\x59\x80\x3d\x16\x9b\x3e\xe9\x28\xaa\xa1\x21\x2e\x14\xec\x04\xda\xd9\x53\x4b\x67\xe9\x50\xbb\xca\xe4\x59\x27\xe8\xcb\x33\xc6\x5e\x19\xf8\x00\x8c\xde\xf7\x30\x20\x4b\xda\xc7\xa6\xd0\x8b\x4f\x17\x38\x93\xb1\x99\xc8\x84\x06\x61\xc9\x8e\x4f\xfb\xb4\x14\x69\x2a\x11\x48\x82\x84\x55\x8b\xd1\x03\x2c\x05\x74\x28\x78\x22\xd0\x5d\xd5\x71\xe2\x00\x49\x61\x08\x69\x82\x71\x54\xc5\xc2\x89\xdb\x46\x2a\x9d\xec\x7b\xf5\x9d\x3c\x29\xa1\xdd\x62\xeb\x1f\x06\x97\x7b\xf6\xe5\xa5\x35\x9c\x89\xe7\x3e\xb8\x9b\x5a\x73\xf3\xa3\x6c\xab\x9f\x17\x4b\xde\x0e\x3b\xbe\x85\x43\xd3\x83\xbe\x27\x2a\x76\xe4\x8b\xb1\xe1\x45\x01\x54\x19\x0a\x9b\x36\x6f\xc9\x9c\x19\xfa\x86\xe5\x29\x81\xea\x60\x48\xd8\xa6\x17\x5a\xc6\xcb\x3b\x5c\x55\x6d\x39\xbe\xed\xf0\xbb\x73\x0f\x07\x7c\xd6\x11\xb9\x86\x3e\x43\x2d\xbb\xd7\x2d\xb6\xed\xf0\x9c\xa5\xd7\xa2\xd7\x5f\xdf\x5e\xed\x70\x12\xe3\x42\x4a\x30\x69\x83\xa1\x44\x04\x84\x80\x09\x45\x6c\x07\x04\x08\x78\x55\xb7\x48\xc6\xd7\x7c\x8b\xa0\x43\x95\xa6\x68\x82\xe3\xa9\xc8\xe1\x18\xd2\x8e\x13\xb4\xe3\xb7\xac\xb2\xba\x87\xf0\xeb\x33\x70\xbb\xfe\x69\xad\xf1\x86\x3d\xef\xe7\x7c\x7d\xca\xed\xa3\x77\x4b\x57\x5f\xb2\xe5\xdc\xbc\x3a\xf1\xbd\x8c\xdd\xe5\x09\xdd\xb6\x6e\xb2\xa6\xe1\xf8\xbc\x69\xd2\x2e\x13\x92\x9a\x23\x91\x14\xa5\x86\x9a\xa9\xba\x1c\x69\x86\x82\xcd\x98\xa6\x2a\xaa\x11\xc1\xa3\x40\xf6\x6d\x8b\xb1\xfe\x66\xc5\xfc\x5b\x87\xe6\x9f\xda\xe1\x52\x1b\xe7\x2c\x97\x23\x2d\x2b\xff\xc2\xec\x3a\xb9\x57\xde\x3e\x42\xcd\x68\x99\xf2\x71\xc9\xce\xdf\x54\xc8\x59\x77\xc2\x99\x7a\x95\x66\x2d\x6a\x53\x79\x33\x7f\x66\x41\xea\xbb\xc9\xb3\x78\x5a\xc1\x7a\xa8\x4b\xb4\x4c\x45\xc0\x77\x49\xc6\x81\x1e\x0f\x0c\x5b\x52\x18\x8d\x0f\x02\x19\x12\x88\x50\xb5\x88\x17\x24\x3e\xf2\x59\x06\xa9\x32\x4e\x87\x92\x7b\xf6\x5e\xf5\x32\x97\xa4\x8a\x11\x58\x85\x2b\x0e\xdf\x9e\xab\x4b\xed\x85\x6f\xbd\xdd\x62\x73\xce\x12\xab\x9a\x77\xef\x9e\xeb\xcd\x72\x67\x93\xc8\x18\x57\x62\x3f\xe0\x35\xcd\x53\x78\xdb\x46\x82\x63\x22\x21\xa2\x58\x26\x08\x42\x22\xe4\x0c\x56\xa7\x42\x42\x14\xc4\x90\x65\x35\x5b\xc3\x48\x63\x14\x90\x0e\x1b\xac\x58\xb1\x72\xc5\x1f\xfc\x31\xb2\xda\x84\x5e\x76\xd3\xeb\x05\x16\x09\xcb\x6e\x5e\x1b\x7f\xb7\xdd\xe8\x5b\x57\x67\x9d\xbc\xfd\xac\xe1\xbd\x73\x49\x9c\x66\x0f\x11\x66\x30\x08\x70\x4c\xb2\xc8\x95\x34\x49\xb0\x43\xdf\x36\xa1\x45\xc8\x50\xb3\xe4\x40\x97\x45\x9e\x15\x42\x4e\x97\x03\x89\xe0\x62\x47\xc6\x54\xe2\x80\x65\xec\xd9\x39\xaf\x32\x39\x4a\x14\xe2\x96\x1f\xdd\x56\xb8\xeb\xdb\xc4\xa6\x37\x2a\xb6\x63\xc4\x2f\x33\x5d\x1b\xd9\xe8\x4d\x67\x58\xff\x8c\x01\x33\x12\xf7\x35\x70\x8c\x12\x50\xb2\x18\xa9\xbe\x1a\xc5\x16\x24\x55\x9d\x72\x44\x8d\x30\x0c\x8a\xa7\x3d\x93\x66\x30\xa7\xf9\x38\x76\x2d\xd2\x04\x92\xc9\xe9\x88\x20\x13\xef\x32\x79\xf9\xe2\x4a\x71\xfa\xad\xb9\x04\xb8\x30\x31\x2e\x70\xa9\x73\xf3\xc2\x8b\x17\xce\xf9\xf8\xad\x81\x62\xe7\x23\x5d\x57\x8f\x19\xb1\x38\x79\x81\xb7\x4b\x91\x16\xa1\x30\x58\x06\x3a\xc7\xcb\x08\x68\x0a\x8b\x04\xd7\xe4\x24\x84\x59\x5b\xe1\x09\xda\x16\x15\xe4\x18\x40\x08\x35\x2c\x43\xd2\x35\x6c\xe3\xa5\x4a\xe9\x3f\x75\xa3\xa6\x36\x29\xd8\xbf\x40\x81\xb4\x6f\xce\xaa\x5d\xbd\x1e\x3b\xf2\x95\x19\xd2\xe5\x6c\xc7\x1d\x05\x27\xad\x6c\xf4\xb8\xc2\xaa\x8f\x4b\x92\x8d\xbd\xc5\x45\xb7\x9c\x9e\x3a\xaa\xeb\x8b\x24\x52\x72\x15\x83\x52\x08\x86\xf1\x7c\x51\x56\x90\x21\xdb\x81\x8c\xdd\x30\x94\x2d\x64\x0b\xb2\x67\x8a\x5c\x24\xd1\xa6\xe7\x92\xba\x15\x30\xbc\x6e\xfc\xcf\xe3\x34\xf1\x47\xd9\x79\xa5\xda\x91\x63\x6f\xf6\xb1\x5b\xcf\x98\xb9\xea\x56\xd5\x7a\xdb\xde\xbd\xf0\xe3\x90\xe9\x07\x17\x76\x9f\xd9\x27\xcf\x87\x3f\xbf\xfe\x7d\xc6\xc4\x38\x12\x8f\xdb\xc4\x1c\x56\x5c\xc8\xc6\x84\x4e\xab\x64\x60\xca\x41\x8c\x3d\x17\x03\x89\x83\xa4\x84\x1d\x99\xa3\x84\x28\x40\x3a\x4b\xf2\x0a\x8b\x79\x42\x8a\xac\x74\x6a\x78\xbd\xf2\xee\xfa\xb4\x47\xdb\x2f\x3f\x7b\x31\xbc\x76\xdb\x2f\xfb\x9c\x5d\x5c\x7a\xf2\xa3\xa2\xa5\xf3\x7c\x18\xee\x6b\xd0\xf9\x79\xd7\x21\xa7\x3e\x4e\xde\x92\x55\xdf\xf4\x42\x83\xe0\x63\xc5\x81\x9c\x44\x3a\x9c\xca\x19\x00\xb9\xb2\x66\x41\x83\x16\xfc\xd8\x32\x43\x07\x89\xa6\xe3\x48\x24\xe4\x03\x59\x13\xd3\x4b\x8e\x7e\x03\x71\xb7\x1d\xad\x1f\xdd\x98\xbb\xf2\xcf\xec\x67\x9a\x1f\x68\x3d\x7e\xfc\x9e\x0b\x7f\x54\xd8\xbd\xe1\x40\x81\x2d\xed\x76\x56\xfe\x70\x75\xf2\x4c\x5f\xe5\x45\xc3\xb0\x78\xc6\xf9\x9f\xcf\x4f\x6b\x06\xe1\xd1\x9c\x6e\x12\x94\xe6\x3a\x74\x14\xa9\x48\x05\xaa\x10\x03\x85\x77\x2d\x87\x34\x6d\x88\x3c\x94\x4e\x0a\x5a\x11\xe1\x90\xdd\xb5\x77\xbc\x78\xb1\xe7\x64\x9f\xf6\xe5\xbe\x2f\xde\xd5\x40\x5f\xbf\xe8\xf3\xa6\xd5\xf5\xc2\xa9\x62\xef\xb4\xda\x95\x3c\xe2\x33\x90\x63\x6c\xa9\xb1\xad\x03\xd1\xf5\x35\x56\x00\x14\xc3\xa8\x0a\xe7\x72\x84\x12\x38\xbc\x82\x02\xc7\xb1\x1d\x60\x84\x52\x2c\x06\x9e\x19\x8b\x82\xe7\xa4\x23\xc8\x91\xda\x6c\xce\xdb\x63\x1a\x17\xbc\xf6\x7e\xfd\x7b\xdd\x99\x6a\x3f\x54\x3a\xf9\xc6\xe8\x5c\x9d\x4b\xd5\xee\x53\xa6\xa1\x3d\xeb\xe6\xb1\x1b\x49\xc4\x09\x5a\xa4\x88\x23\x40\x11\x8c\x68\xc6\x96\xee\x90\x30\x0a\xa5\x30\x94\x39\xc3\x07\x28\x54\x34\xce\x89\x8c\x88\xc4\x82\xad\x20\x5a\x34\x04\xd3\xd7\xe0\xdf\x82\xda\xf3\xb2\xff\x77\xed\xd5\xa9\x4d\x4a\xa4\x64\xfe\x3f\xf9\xdc\x89\x9f\x1f\x69\x3d\x20\xe5\x15\x7f\xe8\xca\x1a\x46\xa3\x77\xae\xfd\xcc\x1a\xaf\x1e\x0d\xca\x3e\x5a\x8e\x77\x3b\x5e\x81\xe9\x87\x32\x46\x5b\x4e\x2c\xc8\x68\x13\x48\x55\x01\x11\x20\x83\x23\x11\x2d\x42\x5a\xf2\x3d\x26\x92\x34\x95\xa4\x11\x09\x68\x80\x74\x1e\xb9\x84\xa1\x78\xa2\x21\xda\x3a\x47\xf1\x66\xe2\x47\x9c\xe7\xdd\x9c\xb5\x61\xce\xda\x72\x5f\xf6\x57\x3a\x97\x6c\x76\x7c\xfc\xb1\x6c\x79\xcb\x2d\xeb\x74\x74\xed\xef\xfd\x7a\x88\xe3\x36\x9d\xcc\xd8\x2c\x54\xc2\x25\xeb\x34\x2b\xda\x1a\xcb\x45\xbc\xcc\x89\x7e\xa8\x89\x01\x40\x8e\x19\x8b\x01\x61\x78\x34\xe3\xf9\xae\x08\x58\x4b\x76\x10\xe7\x91\x46\xc0\x18\x31\x04\xf1\xcb\x01\xf0\x8a\x9c\x1f\xed\x1a\x3b\xf6\xd6\xd1\x91\x27\xfe\x1c\x5d\x62\xc6\xcd\xab\x5f\x9c\xa8\xce\xb5\xa8\x7b\xe4\xed\x4e\xd9\x72\x1e\x18\x31\x7f\xfb\xba\x24\xd6\xb7\x18\x45\xb0\x04\xa0\xc5\xaa\x20\xf2\xd0\x85\x58\x0c\x63\x81\x13\x08\xe4\x39\xbc\x6a\x4a\x3e\x20\x0d\x26\x8a\x39\x4f\xd2\x59\xdd\x50\x24\x0b\x38\x5a\xe2\x50\xa0\x60\x9d\xaa\x75\xbe\xfa\x6b\xfa\xeb\x39\xae\xff\x35\xfe\xe2\x94\x7d\x53\xfe\x68\x5b\xa2\xa9\x54\x23\xef\xb8\x6d\xdb\x4e\x4f\xb8\x30\xed\x5a\xf2\xc4\x89\x40\x10\x29\x02\x2d\xab\x94\x45\x30\x90\x90\x71\x14\xaa\x2a\x66\x48\x00\x28\x15\x62\x4b\xd2\x74\x89\x60\x5c\x8b\x21\x79\x89\x12\xa1\xe4\x7a\x32\x47\xa6\x93\xe9\xbc\xfa\xa8\xc1\xc0\x55\x75\x4f\x9f\xf2\xdb\xd7\xf9\xe9\x9e\xd0\xe7\x68\xa9\xc7\x1b\x98\x46\xcb\x06\x76\xca\xfe\x5a\x7e\x13\x1d\xed\x95\x31\x4e\x43\xe2\x67\x06\xa3\xdb\x36\x17\xa1\x58\x07\x31\x1d\x33\x00\xa0\x40\xd2\x23\xc7\x37\x50\x80\x45\x4b\xc4\x8a\x15\x92\xac\x49\x30\xbe\x01\x6c\xde\x0f\x78\xf0\x1f\x39\xb8\x7f\xc7\xed\xff\x34\xda\x90\xda\x38\x25\x53\xe7\xb4\x71\xfb\x92\xed\x93\x76\xdc\xcd\x32\x6c\xea\xe6\xef\x1a\xa5\x70\x67\x06\x66\x7d\xb5\xcb\x4f\xed\xfa\x15\x5c\x0f\xea\x56\x3e\x3a\xa0\xff\x8b\x29\xa7\x93\x38\x38\x2e\x28\x1a\x67\x72\x31\xad\xf9\x48\x94\x59\xcc\xd8\x31\x04\x62\x64\x9b\x06\x1f\x72\x58\xd2\x62\x49\xb5\x01\xc7\x08\x51\xe8\xeb\x8a\x88\x09\x87\x48\x07\x67\x5d\xb4\xd3\x8c\x1e\xa3\x52\xc7\x1e\x7c\xd8\xb7\x6b\xb3\x93\xdb\xcb\x0d\x5d\x79\xba\x7a\xb6\x81\x7d\x53\xc7\x64\x29\xb6\x93\x5b\xfe\xee\xf6\x8c\x09\x72\x24\x16\xb4\x37\xb1\xac\xd2\x58\x0f\x7d\xcf\xe1\x54\x8f\xb7\x79\x5f\xd0\x2d\x5f\xb4\x6c\x28\x72\x8c\x0e\x62\x9b\xb5\x01\x49\x6a\x8c\xa4\xd3\x84\x69\xfb\x84\x92\x8e\x88\xde\xc5\xc7\x7d\x9e\x4c\x68\xfd\xa0\x52\xd7\xd7\xa2\x56\xa5\x3e\xd8\xf0\x45\x31\x15\x8f\x1a\xd1\x23\x5b\xed\xcd\x05\xdb\x40\xff\x79\xe6\x8c\x15\xf0\x12\x1e\x56\x9e\x66\x6d\xc6\xb6\x23\xcc\xb8\x4e\x1c\x11\xba\x89\x30\x65\x4a\x40\x50\x34\x1f\x43\x14\x71\xb4\xa3\x43\xec\xb3\x34\x03\x6c\x20\x44\x01\xe3\x13\xe9\xc4\xed\x45\x6e\xd6\xf9\xe3\xc5\xd1\x82\xf7\xa8\x01\x5f\xfd\x4e\x45\xb5\xcb\xdc\x16\x52\x4e\x0e\xbf\xf8\x64\x48\x8e\xa7\xa3\x3f\x00\x63\xba\x65\x8c\xf3\x95\x58\xa9\x85\x51\x28\x89\x21\x42\x15\x05\x7e\xc0\x85\xb6\x0f\x49\x88\x39\x49\x52\x59\x5e\x94\x69\x05\x01\x32\x64\x4c\x81\x31\x74\x2d\x8e\xb1\x12\x31\x01\x4c\x47\x91\xee\x5e\xe3\x9d\xed\xf3\xbf\xe8\xd9\xf8\x33\xb6\xeb\xfe\x27\x29\x45\x86\x2d\x3d\xab\x8d\x28\x34\x33\x77\xfb\xa3\x45\x89\x6d\x66\xb9\x19\x39\x93\x38\x6b\x29\x07\x90\x93\x60\xe0\xc9\x31\xd2\x3d\x41\x09\x24\x8e\x35\x83\x58\xd4\x4c\x51\x0d\x4d\xc5\x80\x02\x6f\xd3\x16\x6d\xc6\x52\x18\x05\xb1\x20\x88\xdc\xdf\x38\xc1\x2b\xcc\xff\x36\xf7\xe6\xed\xd8\xe7\xca\xe8\xaa\xed\x3f\xac\xfd\xb4\xf2\x7e\xe2\x44\xd3\x15\x07\x18\xb6\x4c\x50\xa2\xdb\x86\x07\x77\x66\x8c\x68\x3a\x6e\xc1\xbf\xa8\x71\x7d\x27\x96\x49\xf3\x17\xc1\x97\x3d\x7e\x3a\x74\xb9\xc3\xd0\x41\x4c\xee\x2a\xe0\xc6\xe7\xfd\x06\xee\x9e\x62\xa6\x1c\xde\x3d\xff\x90\xde\xcb\xec\xf7\xcd\xae\xdc\x49\x2c\x3a\x2a\x64\x0c\x55\xd3\x54\x04\xda\x11\x05\x1a\xd9\xae\x46\x5b\xba\x47\x70\x01\x92\x7c\x39\xe6\x64\x92\x61\x59\x8e\x10\x55\x01\x48\x96\xa1\xd0\x18\x79\x89\xbf\xca\x85\x57\x4f\x2d\x78\xb0\x78\x78\xe3\xcd\x9b\xe6\x0d\x99\xfe\xe8\xe6\xaf\x79\xcb\x6e\xfc\xca\x29\xd0\xa9\xd2\x97\x33\x4f\x6e\xbc\xb2\xb3\xf5\xac\xe4\x7d\x15\x4d\x12\x28\x42\x40\x7a\x40\xaa\x96\xe1\x32\x2e\x14\x19\x5a\x51\x4c\x4d\xe1\x42\x9a\x8c\x10\x82\x3c\x63\x68\x18\x8a\xd8\x92\x05\x25\xe4\x74\x0b\x48\x89\x27\x66\xd8\x01\x07\xeb\xae\x5a\xf2\xfe\x49\xa9\x60\xb7\xcc\x77\xb3\x7d\x61\x74\x7b\x63\x12\x31\xeb\xbd\xea\xfd\x5b\x66\xaf\x37\xe6\xc4\xc4\x27\x19\x73\x8a\x89\xa3\x60\x44\x9a\xb2\xa8\xf0\x18\xda\x11\xf4\x34\xde\x52\x2c\x2f\xe0\x05\x05\x05\xd0\x30\x28\x03\x89\x9e\xac\x30\x01\xc3\xca\x2e\xc1\x6b\x16\xe0\x0c\xcb\x79\x39\xb9\x34\xe1\x40\x9b\x1c\xdf\xfe\x52\xae\x6a\xdf\xd7\x1a\x6c\x3a\xb3\x6f\x77\x67\xe3\x41\xa1\x9e\x0f\x9c\x2b\x95\x5b\xc4\xeb\x8a\x0d\x5e\x35\x2d\x63\xe5\xb8\xc4\xe9\x67\xc6\x31\x18\x82\xd7\xa8\xc8\xa3\x59\x89\x55\x63\x59\x34\x25\x8a\x08\xb5\x58\x50\x75\xc6\x12\x49\x97\x66\x6d\x1c\x33\x91\xa9\x44\x2e\xe1\x6a\x82\xe5\xa7\x33\xb3\xe7\xd4\x18\x9e\xa9\xc4\x3b\x3f\x88\xbf\xb1\x2b\xab\xdf\x1f\x76\x60\xf9\xf1\xd4\x6f\xc6\x96\x9b\xb9\xb5\x9c\xda\xf8\x8b\x41\xa7\x0e\x0d\x2c\x90\xb6\x6b\x7f\xfb\xd4\x99\x1f\xb6\xfe\xe1\x58\xae\x22\x03\xae\x4e\x1d\xd3\x62\x6f\x1c\xac\x7e\xa7\x77\x8b\xcc\x85\x0a\x95\x18\x74\x7e\xe2\x8d\x63\x49\x84\xf8\x45\x10\x61\x33\x22\x02\x20\xf2\x76\xa4\x02\x4f\x8c\xf9\x40\x35\x3c\x8e\xa5\x58\x26\xf4\x1d\xd7\x27\x03\x43\xe7\x0c\x9f\xe2\x05\x26\x08\x03\x59\xb6\xed\x74\x06\x50\x7f\x81\x4f\xab\xcc\x6d\xb6\x84\xc8\xb6\xf4\xd5\xaa\x65\xfd\xfa\x73\xd6\xa0\x9f\x8a\x8c\x6b\x55\x61\xda\xda\x1b\x79\x3a\xb9\x53\x6a\xe5\x4f\xfb\xeb\x55\x73\xaa\x9d\xcd\x71\x79\xd8\xe6\x72\xf7\x8e\xd4\x1a\x51\xe7\x87\x27\xc2\xb7\xd4\x8c\xe9\x7c\xe3\xad\x65\x87\x67\x5d\xfd\x56\xc5\x87\xd7\xd3\x98\x67\xc1\x31\xc5\x29\xa6\x72\xce\x8d\x27\x67\x55\xd6\x7a\xe5\x08\x98\x42\xbf\xcf\xb1\xcc\x13\xaf\x07\xd3\x8f\x88\x77\x2f\x7d\xd5\xb1\x7d\x12\x21\x81\x66\x60\x09\x9c\xe6\x7a\xac\x63\xc8\xb4\xc7\x91\x48\xd2\x55\x01\xcb\xb6\xae\x4a\x84\x1c\x02\xcd\xb2\x25\x06\x0b\xbe\x0b\x48\x8e\x21\x04\x11\x44\xe0\xe5\x48\xf5\x7e\x51\x51\x3c\x14\x1c\x9a\xf8\xe0\xe7\x8a\x6b\x4a\x9d\x4c\x69\x72\xff\xca\xca\xc1\x99\xbe\x69\x7c\xf2\xd3\x5d\x39\xee\xbd\xbd\xa3\xfe\xb6\xe4\x9d\x26\xc3\x61\x05\x4a\xe5\x3c\x55\x0c\x54\x2d\xa4\xa0\xc5\xf1\x91\x63\x3a\x12\xa6\x1c\x3f\x64\xcc\x58\x32\x2c\xc3\x97\xd5\x20\x74\x2d\x11\x45\x9e\x6c\x2a\x30\x31\x8d\xa9\xc4\xbe\x31\x0b\xbf\x7c\x7e\xf4\xda\xd0\x83\x9b\x98\x1d\x5f\x09\x5b\x16\x67\xdd\x35\x68\x56\xd3\x1d\x95\x5e\x19\x7b\x3d\xe7\xa8\x05\x1f\x24\x71\x0c\xde\x66\x11\xad\x42\x83\xb7\x35\x95\x57\xa0\x2f\xbb\x96\x1a\x8a\x84\x47\xdb\x1e\x30\x35\x37\x60\x44\xcc\xeb\xa4\xca\xf0\x04\xf0\xa0\x24\x7b\x3c\xc3\xe3\x97\x07\xba\x9a\xdf\x78\xa3\x43\xc7\x46\xfd\x1a\x7d\x72\x71\x0b\x5d\x68\x60\xa6\x13\xc7\x47\xfd\xb0\xb4\x52\xad\xa2\x57\xc7\x17\xeb\xf8\xd9\x4c\xb3\x6f\xbb\x24\x82\x32\x88\x88\x51\x65\x44\x46\x94\x24\x06\x81\x6e\x60\x1e\x50\x84\xe7\x1a\x14\x4f\xd0\x02\x2b\x5a\x3a\xed\xb2\xbc\x19\x71\x74\xa0\x52\x0e\x30\x68\xd6\x11\x5e\xf6\x57\x6b\xcf\xd7\xa9\x5e\xf9\x49\xe5\xce\x6f\xce\xfd\xfe\xf4\xe6\x39\x65\x97\x3d\x28\x31\xc1\xf8\xed\xd5\xa5\xfd\x4f\x6d\x9e\xc2\x2d\xfb\xdc\xcb\x58\x2a\x27\x1d\x71\x47\x5a\xa3\x5d\x56\x94\x25\x1d\x49\xba\x41\xd9\x11\x29\x12\x30\x04\xa2\x1a\x10\xae\xad\x32\x4e\x4c\xa8\xba\xa0\x40\x87\x0e\x64\x49\xd1\x24\x37\x8d\x8e\xfc\x7f\x1e\xd0\xf6\xbd\xb6\x5f\x3f\x7f\x6d\xfd\x8e\x6c\xd3\xf7\x8d\x54\xbf\x9c\x76\x66\x48\x9b\x77\xbe\xca\xe2\xa5\xde\x6f\x14\x56\xd9\x37\xb0\x4a\x4a\xeb\x34\x07\xb4\x7b\xcb\x51\xdc\x9c\x4d\x65\x3f\xad\xd9\xaa\xe6\xec\x89\x43\x7b\x6f\x2b\x5d\xaf\xc0\xbb\xd3\xe1\xf5\xa1\x1f\x5f\x7a\xd0\x36\x7f\x81\x76\x19\xeb\xba\x4d\xe8\xaf\x50\x18\x49\x6a\x88\x1d\xe0\x19\xae\x1c\x68\x22\xa7\x85\xb1\xc3\x79\x41\x84\x5c\x4a\x8c\x2d\x33\x72\x58\x9d\xf5\x38\xa8\x11\xb2\x16\xd0\x06\xe7\xbb\xce\xcb\xe6\xb3\xc1\x2a\xbe\xe4\xe7\xe1\x7d\xff\xdc\xd3\x6e\x44\x83\x57\xae\xed\x1f\xe5\x1c\x6e\x7c\x7f\x7a\xa3\xaa\x07\x8a\x8e\xd9\xf7\x5a\xf7\xd3\x57\x92\x98\x08\xd7\x34\x35\xe6\x2d\x04\x79\x3b\xb2\x0c\x19\xeb\x9c\xe4\x79\x8c\xe8\x53\xb1\xcf\x09\x3c\x25\xba\xba\xce\x68\xb1\xcf\x19\x91\x20\xdb\x91\x1f\x91\x32\xd0\x12\x1f\xd0\x3c\xe4\x53\xd9\x58\xf2\xd5\xb0\x6c\x5f\x37\x9b\x77\xb7\xc7\xba\x5b\x77\x57\x5c\xbc\xb7\xf8\xd7\xfb\x0b\x7c\x65\x78\x87\x67\xfe\xe9\x8c\x2d\x39\xf1\x53\x12\xca\x9e\xae\xb3\x48\x80\x01\xf0\x24\x57\x71\x68\x8b\xa1\x64\xde\xb3\x0d\x93\x64\x3c\xa4\xf8\x9a\x28\x23\x2d\x50\x04\x8a\x61\x75\x18\xd8\x2c\x99\xe0\x80\x7e\x52\xb1\xc8\xe1\x3a\x1b\x5b\xf5\xac\xdb\x74\x7a\x59\xfa\xdc\xad\xb9\x1f\x0f\x2e\x87\xb6\xf7\x68\xf2\xf8\x70\xbb\xa3\x3f\x0e\xfa\xe5\xfa\xd0\xe4\xed\x30\x8c\x43\x84\x6d\xa4\x71\xae\x10\xc3\xc0\xe7\x21\xa3\x38\xf1\xbf\x52\xc7\xb4\x4a\x62\xcb\x53\xc3\x00\xd3\x86\x0a\x1c\x97\xb6\x98\x58\xa6\x5c\x4b\x7a\xf9\x80\x1e\x6c\xf0\xe7\xc8\x5b\x6a\xfe\x68\xf3\xb3\xfe\xc5\x8e\x7d\xb8\xe1\xf6\xce\x8f\x3b\x34\x69\x77\xf9\xce\x8e\x96\x7f\xcd\x64\x5b\xb6\xf8\x20\x63\x9c\x95\xc4\x92\x87\x98\xfa\x17\xe9\x37\x94\x4c\x96\x97\x43\x15\xd3\x80\x21\x25\xd1\xa6\x91\x48\x10\xac\xea\xb1\x34\x49\xca\x2e\x45\xb0\x82\xca\x45\x72\x1c\x9b\xd8\x4b\x5c\xbe\xac\x7b\xeb\xbc\xb9\xee\xc2\xfd\xcd\x05\x33\x4d\x9c\xf4\xc2\x9a\xd1\xb4\xdb\x2f\x77\x7a\x4d\x9a\xf2\xa4\x50\xc3\x0d\x8f\x3b\x3e\x1f\x3f\xff\x69\x12\x0d\x02\x71\xa4\x2f\x8a\x04\x45\x73\x32\xad\x60\x55\x51\xe4\x58\xa5\x44\x8b\x34\xd4\x90\x44\x21\xa1\xd0\xb2\x1a\xf9\xa6\x11\xc4\x1e\x66\x64\x55\x88\x5c\x3d\x01\x50\x71\xfb\x8b\x0b\x5b\x32\x2d\x6a\xd3\xa9\xc5\x65\xa3\xf5\x6c\xf6\x83\xf7\x36\x9c\xe8\x7d\xad\xed\xf4\x63\xdf\xbd\xd7\x12\x87\x73\x70\xfe\x24\xba\xc0\x18\x33\x82\x67\x8a\x9a\x61\xb3\xb1\xc8\x06\xae\xc1\xaa\x32\x2d\x71\x4c\x88\x14\x0f\xeb\x8a\x48\x31\x7e\x68\xfa\x80\xc1\x92\x8f\x81\x2d\xc6\x24\x7c\xd9\x20\xb6\x4d\xf8\xe6\xda\x91\x33\x43\x26\xfa\xce\xb9\xc3\x3b\x2e\xad\x3c\x7d\xbe\xdb\x84\xce\x5f\x4a\x6b\x37\x8e\x31\x9a\x31\x23\xc6\x54\x7b\x9c\xbc\xdd\x0d\x7d\x2e\x62\x44\x8f\x26\xa8\xd0\x43\x1e\x25\x13\x9c\x06\x2d\xc2\x05\x1e\xe7\xc4\x92\xc5\xb8\xff\x73\xcc\x90\x26\x6b\x96\x68\xd8\xa6\xc4\xf0\x4c\xac\x27\x8e\xe1\x87\xa2\x1f\xaf\x4c\x02\x8d\x6f\x66\x29\x35\xd6\xe9\xb3\x2a\x67\x54\xbf\x69\xc3\x0b\x1f\x77\x98\x3f\x7a\xef\x57\x7f\x3d\xb5\x5f\x4f\xc9\x98\x4e\x73\x62\x11\x78\x56\x96\x64\x85\x89\x3d\x57\x88\x58\xda\x88\x98\xc8\x93\x78\x01\xd8\x38\xc2\x0c\xe0\x4d\x41\x26\x1c\x81\xe0\x18\xd9\x00\x8e\xeb\xb8\x10\x5b\x51\xf0\x72\x90\x74\x79\xe6\xfe\x4a\x05\x7a\xd5\xce\xe2\x7e\x91\x89\x4b\x59\xd1\xb0\x49\xa6\xcd\xad\xea\xbe\x1d\x2e\x84\xc7\xdf\x2f\x77\xe1\x64\xfb\x39\xe5\x93\x48\xc4\xf3\x2d\x82\x27\x1d\x4a\x44\x21\xe3\x72\x0c\x24\x14\x41\xc1\x34\x76\x74\x4e\x0a\x7d\xc5\x89\x1d\x52\x94\x1d\xc1\xd6\xa5\x48\xb1\x58\x1e\x01\xc6\xe1\x12\xa3\x8d\x52\x1a\x5c\xea\x38\x75\xf4\xd3\x02\x90\xb9\xb4\xfb\xfc\x83\x81\x6f\x99\x7d\xa9\x6d\xc3\xaf\x54\xeb\xb9\xff\xea\x26\x67\xc5\xc4\xa9\x19\x6b\x23\x49\xb8\x64\x8a\x61\x48\x0d\x4b\x82\x4d\xb9\x04\x29\x87\x7c\x10\x9a\xaa\x4a\x29\xb2\x07\x0d\xdb\x50\x30\xc1\x87\x0c\xcb\x51\x26\xaf\x46\xa6\x87\x30\x76\xe4\xff\x9f\x87\x49\x7b\xe4\x52\x19\xe1\xe3\xd5\xf9\xdb\x53\x1d\x0f\x7f\xf0\xce\xd9\x75\xa5\x87\x4c\x3e\x8c\xbb\x0d\x6a\xd8\xaa\xe2\xa4\xd9\xd7\x7a\x4f\xcb\x24\x26\x8f\x26\x06\x0c\x05\xc9\x2a\xe1\x79\x04\xe3\x58\x48\x76\x3c\xcb\xa5\x09\xce\x23\x3c\xd6\xf5\x04\x8a\x77\x0c\xc5\x50\x80\xa7\x12\x14\xaf\x07\xa2\xc0\x59\xc8\x73\x8c\x97\x8f\xdc\x96\x2e\x03\x57\x1c\xd3\x8a\xbf\x52\xf0\xdd\x0d\x3f\xb6\xf9\xae\xdc\x8c\x8a\x17\x80\xbe\x6b\x23\x95\xb9\xee\xd6\x9b\xfb\x97\x35\x9c\x9e\x44\x1a\x9e\xe5\xfa\x7e\xc8\x79\x51\xc0\x18\xc0\x76\x6c\x8f\xd6\x58\x5d\x08\x6d\x96\x8c\x42\xc6\x30\x49\x12\xca\xb2\x16\xfa\x5e\x48\x1b\xaa\xce\xa8\x9c\xe9\xa4\xc1\x20\xfc\x67\x90\x74\x6c\x62\xf8\x7e\x5f\x6b\x0e\x3b\xf2\xcb\x17\x59\xbf\x38\x94\xb3\xf1\x98\x8f\x72\x4a\xcf\x46\xed\x5d\xff\x41\xdf\x05\x64\xcb\x2b\x7f\xd5\x49\xf3\xa8\x1b\x99\xf3\xd2\xe1\xa7\x1f\x8a\x39\xbf\x49\xb9\xdc\xba\x75\x9d\xfe\x4b\x3e\x7f\x7b\x7d\x1b\xf2\xfa\xa1\x46\xf3\xee\x1c\x7c\xa5\x74\xf7\x23\xb9\x92\xe7\x02\x43\x89\x17\x3d\x81\x10\x24\x45\x16\x45\x9f\x87\xa2\x06\x91\xef\x6b\x86\xea\x4b\x4c\x08\x6d\x9d\x46\x1a\x41\xc8\x58\x67\x62\x81\xb7\xf5\xd8\xa0\x95\x74\x70\x69\x42\x65\x6a\xce\x47\x83\x66\x2f\x6e\xb3\xa9\xa3\xf8\xcb\x82\xa3\x73\x97\xde\x86\x4b\xbb\x1c\xf9\xa1\xf8\xd3\x4f\x0a\x5f\xdf\x53\x18\x27\x4f\xa4\x96\xf3\x09\x33\x00\x84\x1a\x2b\x82\x1c\x0a\x8e\x4f\xc4\x9c\x8c\x2c\x1d\x8a\x12\xa3\xbb\x8a\x6a\xa9\x82\x10\x48\x16\xed\x41\xcd\x91\x14\x95\xc6\xa6\xc5\x85\x2f\x5b\xfc\x9f\x23\xca\xac\xaa\xb4\xae\x6f\x34\xfc\x23\xe0\x6c\x19\xf1\x7a\xa7\x5d\xa3\x05\xb7\x51\x87\x21\x18\x7d\xf2\x6a\x45\xea\xf9\xe4\xcc\x49\x74\x81\x1a\x54\x2c\x57\x8f\x3c\x9d\xe4\x45\xcb\x02\xb4\xef\x85\xa6\x41\xdb\x9a\x1e\xb2\xac\x40\xf2\x0e\x52\xf9\x88\x0d\xa0\xe3\x2a\x8c\x45\x3b\x2c\x17\x8b\xe9\x98\xd0\xc7\xf5\xbb\x17\xef\xcc\x6f\xbe\xb8\x6a\xfd\xa3\xf9\x25\x5b\x75\x1b\x59\xf3\xd9\x94\xf3\xd3\x9f\x6c\x2e\x5d\xbf\x7e\x8e\x7b\xcf\x06\x0d\xbb\x90\xc6\x03\xbd\x7b\xbf\x58\xae\x07\x2b\xb3\xcb\xec\xc2\x25\xa7\xb7\xb6\x3d\xd6\xb9\xd1\x01\xf1\xc3\xde\xdd\x27\xc9\x6f\xbe\xba\x70\x69\xf9\x16\xf5\x1e\x26\xcf\x03\xa9\x12\xe6\x18\x0f\x9b\x9a\x62\x11\xd0\x13\x08\x13\xc7\x1a\xcf\x6b\x1e\xa0\xc4\x90\x27\x14\x86\x80\x41\x1c\xc9\x2a\xad\xd9\x04\xe9\xc6\x9c\x4b\xc1\x04\x71\x76\x87\x6c\x57\x96\x8d\x6c\xf2\x39\xf8\xac\x63\x45\x3c\xb3\xd0\x37\x6b\x9f\xf6\x5a\x50\xec\x97\xab\xa1\xd1\xba\xf0\xe6\xe7\x1d\xae\x54\x51\x92\x98\x52\xb5\x39\x31\x02\x12\xc5\xa8\x5e\xe8\xcb\x8a\xa7\xc9\x62\xa8\x0b\x3a\x65\xf3\x86\x46\x0a\x3c\x67\xa9\xbc\x68\xba\x21\x19\x00\x51\xa2\x59\xd6\xd7\xb8\x04\x20\x96\x05\x5a\x95\xba\xd5\x87\x56\x99\xfe\xc7\x2f\x43\x6f\x8d\x7a\x8d\xc3\x9f\x5c\x3f\xf5\xb0\x45\xfd\x26\xed\xcb\xa2\xc9\xeb\x17\x3f\xe8\x9d\x44\x15\x69\x52\xa1\x90\x88\x20\x23\xeb\x96\x22\x59\x82\x4f\x69\x21\x61\x6b\x9c\x2c\x23\x55\xa0\x45\x39\x12\x10\x4f\x29\xbc\x6f\x29\x98\x24\x62\x4d\xf1\x18\x48\xa7\x63\x3e\xbf\x6f\xbe\x49\x85\x59\xdb\x75\xba\x5e\x79\xe9\xd2\x8a\xcd\xef\x4d\x6f\xd8\xa9\x57\xe1\xc3\xf9\x5a\x34\xec\xab\xbe\x99\x3b\xcb\x5b\x3d\xe2\xb4\xbf\xde\x09\x9e\x3c\x75\x1a\x7a\xf8\x3e\xff\xe8\xf4\xbe\x43\x37\x97\xec\x29\xb6\x68\xc0\x5b\x6d\x5a\xf3\x59\x67\x2c\x6e\xaa\x4c\xf7\xd6\xa5\xfd\x75\xf9\xa3\x47\xbf\xb9\x98\xef\x5d\xf5\x68\xb3\x4f\x73\x0d\xef\x7f\x6c\x78\x8e\xae\xbd\xbf\x7c\x76\x4a\x9d\x58\xae\x3e\x33\xb2\xc2\xa2\xda\x33\xd3\xfe\x7a\x59\x7d\xf7\xa9\xf5\xf6\xc9\xbc\x2d\x4a\x74\x77\xcf\xcf\xe3\x0b\xd4\xdb\x37\x21\xdf\x61\xfd\x30\xd7\x6e\xda\xf5\xc7\x35\x77\x6f\x2b\x9b\xc6\xb1\xec\xfe\xeb\x42\xcf\x4a\x2b\xcf\xb4\xd9\x57\xe2\x62\xca\xb1\x1a\x45\x56\xa7\x9e\xd8\x9c\xff\xaf\x4c\x39\xa6\x4d\xad\xdf\x39\xdb\xd5\xe1\x5d\x5b\x25\x11\xa7\xcc\xb8\x92\x26\x41\x99\x86\xa2\xe7\xfb\x3c\x05\x68\xd2\xf0\x05\xcd\xd4\x49\xcc\xc9\xa2\x2a\x9a\x9e\xce\x53\x21\x12\x59\x2d\x0a\x0c\x59\x22\x01\x54\x5f\x0e\x56\x1e\xbf\xbf\xaf\xd3\x99\x73\x4f\xcf\xe7\xbd\xb1\xff\xed\x59\x45\xcb\xac\x5b\xdb\xa5\xdc\x8a\x9c\x59\x5a\x3b\xef\x5d\x9b\xd5\xf3\x2c\xdc\x9d\x44\x65\x7d\x99\x47\x80\xd3\x1c\xcd\x94\x44\x4b\x30\x35\x17\x41\x32\xd2\xad\xc8\xf1\x43\x92\x54\x3c\xd6\xe2\x2d\x3e\x16\x2c\x31\x50\x09\xc5\xd0\x80\xc4\x83\xc8\x4b\x27\x1f\x97\x5d\xe8\xbf\x63\xd9\xa1\x6e\xf3\xd6\x64\x7f\x63\xe4\xf3\x95\x17\x4f\x6c\xbc\x63\x4f\x80\xe7\x32\x2d\x7f\x28\x2d\x48\xa9\x7d\x3d\x2b\x93\xe6\x7b\xb4\xad\x57\xf0\xc3\x11\x47\x3b\x0e\x58\x3a\x7e\x4b\xd7\x35\xe5\xde\x9c\xb5\x70\xdd\x89\xa0\xf6\xb8\x2c\x5f\x35\x1a\x79\xb4\xcc\xa7\x95\xef\x64\x4c\x7f\x26\x61\xac\x20\x61\xc3\xd3\x3d\x55\x0a\xf8\xc8\x21\x74\xd3\x57\x84\x98\x84\x48\x30\x09\x96\xd7\x78\x55\x0a\x2c\x3e\xa4\xa8\x48\x14\x03\x99\x11\x34\x86\x33\x15\x94\x20\x3c\x3f\x22\x6c\xcb\x3b\xab\xc6\xc5\xc9\xa5\x7f\x5a\x96\x77\xdc\xd7\x35\x97\x35\x6d\x38\xe4\xc3\x82\x9d\x8c\x4b\x53\x72\x0c\xb7\xfa\xaf\xbc\xb3\x35\x89\x55\x4a\x07\x49\x8c\xc8\x01\x02\x0b\xd0\x76\x21\x6b\xcb\x21\x87\x88\xd8\xc2\x2c\x2b\x78\x02\x90\x29\xa8\x1a\xb4\xa0\xd1\x86\x41\x50\x96\x23\xd3\xff\xdb\xc7\x9e\x20\xa1\x52\xb2\xfd\xfe\xb6\xdb\x97\x3c\xaf\x23\xb5\x3f\xde\xa1\x5f\x34\x6c\xd9\xc6\x9b\x6f\x6f\xfd\xe3\xf0\x97\xb3\x2b\x4f\x2d\xdd\x29\xeb\xdb\xdb\xe7\xa6\xf9\x1e\x65\x72\x34\x1e\xdf\xf5\x27\xfc\x30\xd7\x63\x9c\xfb\xd5\xf5\xed\x16\xcf\x2a\xdb\x9e\x1b\xf5\x73\x49\x7b\xe3\x2b\x65\xb3\xc4\x2b\x5e\xb4\x48\xde\xf9\x90\x63\x87\x26\xad\x08\x93\x21\x2d\x1b\x91\xa0\xc4\x9c\xa8\x28\x22\x08\xa0\x49\xc8\x24\x4f\x1b\x82\x64\xc8\x56\xe4\x23\x86\xb7\x42\xd2\x54\x49\x83\xe4\x5e\x3e\x1f\xe5\xd7\x2f\xda\x22\x67\x2a\xbc\xb1\xcd\x0f\x05\xa6\xde\x28\xd7\xaf\x7d\x54\x20\xab\xd2\xbc\x24\xd1\x6a\x47\x9e\x2d\xa0\xe1\xf1\x7e\x19\x6b\xd2\x4f\x1c\xbb\x69\x7a\xa8\xca\x42\x8c\x24\x4a\x60\xa5\x90\x08\x15\x08\x54\x91\x13\x19\xc7\xa0\x09\x36\x76\x48\xc9\x56\x14\xca\xc5\x8e\x4f\x68\x11\x63\x07\x66\xec\xa5\xe3\x39\xef\x6d\x69\x59\xe0\x0d\x63\x76\xbf\x33\xc7\x5b\xcc\x3f\x77\x8c\xb9\xf4\x71\x6f\x73\xc6\x61\x3c\x6a\x69\x6a\x41\xb4\xab\x4d\xea\x07\x85\xd3\xc4\x6e\x93\xea\xa7\x0c\xcf\x9f\xa9\xeb\xd3\xaf\x4a\xc3\x55\xdb\x4a\xd7\xab\xf5\xc5\xf0\x43\xb3\xae\xbc\x83\x6f\x8f\x03\xfc\xca\x4a\x35\x2a\x65\x2c\x3f\x9a\x78\x52\x15\xa1\x38\x16\x14\xd9\xe3\x19\xc9\xf0\x18\x89\xa7\x80\x87\x54\x23\x08\x08\xa0\x47\x9c\x10\xa9\x36\x63\x11\x31\x30\xf9\x38\xa6\x68\x33\x02\x82\x82\x5e\xc2\xe8\xfc\x53\xad\x21\xb5\x49\x4a\x83\x06\x29\x69\x1b\x58\x76\xcd\xf8\xb4\x7b\x9d\x45\x2d\xce\x96\xde\x07\x52\x7f\x5b\x74\x76\xed\x7b\x3f\x8e\xea\x9c\xa3\x5b\x95\x4b\xf6\x67\x0d\x9b\xcd\xe8\xbb\x36\x89\x6d\x8b\x1e\x70\x21\x0b\xb0\xac\xf0\xb4\x87\x7d\x26\xb2\x58\x26\xb4\x42\xec\x79\x94\x62\x93\x98\x8d\xb1\x19\x40\xd7\x50\xdd\x58\x50\x34\xcb\x81\x82\x05\xd3\xc1\x31\xbd\xfb\xed\x47\x73\xda\x82\xfd\xa5\x47\xab\xef\xb4\x7c\x51\xa0\xe3\x96\x35\x44\x63\xf1\x06\x6e\xb5\xa0\x65\xab\x7e\x03\xbb\xc7\xb3\x33\x86\xf5\x4a\x3c\x8b\xcb\x40\x4f\x62\x70\xc0\xc5\x94\x42\xc4\xd8\xf6\x4c\x93\x0d\x35\x4f\x50\x31\x6f\x01\x8f\x70\x04\x9a\xc0\x3e\x13\xaa\x7e\xe0\x60\xcd\x63\xe3\x38\xbd\x16\xdc\x29\x45\x4f\x2c\x5f\xb1\xe8\x45\x85\xab\xe1\x8f\x85\xf3\xcf\xcb\xd1\xf2\xc8\xf3\x6d\xab\x9b\x8c\xea\x3c\xea\xa3\xea\xe5\x07\x6d\x9a\x71\x27\x63\x02\x93\x89\x09\x52\xa1\x89\x63\x46\x0d\x59\xcf\x74\x23\x25\xd6\x04\x21\x8a\x35\xc7\x8f\x1c\xe8\x02\x83\x13\x5d\xff\x5f\x09\x53\x92\x37\x1c\xca\x26\x1c\x47\x33\xed\x28\x71\x39\x33\x65\xca\xde\x80\xfa\xac\xe5\xe6\x8f\x87\x14\xce\xfc\xc6\x31\xf8\xc1\xe4\x1f\xf6\xac\xa8\x9c\x37\x9b\xfc\xd7\x96\xa7\xb9\x5a\xe4\xee\x59\x3d\x79\x86\x21\x8a\x94\xa0\x02\x52\x8b\x29\xd6\x37\x03\x56\xf7\x9d\x50\x20\x02\xc7\xf0\x44\x43\xd2\x09\xce\x0b\x4c\x3f\x34\x59\xc9\x93\x24\xd5\x90\x08\xcb\xe3\x6c\xf8\x92\xe9\xff\x53\x15\x2a\xb5\xc9\x07\x29\x99\x72\xa4\x35\x7d\x21\x47\xae\x1b\xfa\xd9\xf2\xc5\xcf\x5c\x7b\xcd\x6d\xcd\xbe\x39\xc2\xab\x61\x4f\xb8\xbc\x5c\x96\x07\x4f\x3b\x55\x75\x7d\xa3\x6e\x39\x92\x88\x00\x25\x88\x90\xe3\x03\x45\x8a\x6d\xac\x1a\xc8\xf0\x75\xdb\x37\x10\x63\x4a\x66\x28\xb3\x94\xce\x90\x08\x45\x11\x4d\xf9\x9e\x2a\xd2\x2e\xd6\xb1\xa0\xd0\x89\xed\x68\x5c\x3b\x22\x77\xe5\xcd\x6d\x7e\xfc\x82\x1b\x32\x3c\xdf\x94\x3a\x33\x4e\xac\xab\xd0\xe6\xd1\xdd\x96\x7d\xd7\x56\x9f\x7e\xf9\xed\xdc\x07\xc6\x24\x71\x78\x21\x14\x01\xe1\x93\x98\xa3\x22\x6c\xea\x9a\x67\x85\xbe\xe8\x85\x3e\x96\x0d\xdb\x06\x50\xa1\xb9\x48\x0a\x01\xa2\x42\x91\xf4\x5c\x4b\xa4\xa1\xf9\x1f\xc3\x0b\x69\x96\xdc\xa4\x5a\x83\x60\x5a\xcf\x9c\x2b\xde\x9f\x3d\xf7\x58\xad\xd2\x1f\xe4\x79\x6d\x42\xd1\x29\xd9\xab\xca\xc5\xb3\x59\xdf\xe2\x92\x85\xb7\xfc\x98\x3c\x17\x8a\x6c\x84\x81\x89\x65\x86\x45\xb1\xc2\x4b\x9e\x1c\xf9\x22\x05\x01\x34\x4c\xc9\xb1\x7c\x85\x8e\x78\x2f\x34\x45\x8e\xe1\x43\x92\x88\xf9\xd0\x0f\x11\x91\xd8\xc1\x2c\x58\xad\xa3\x15\x54\x4e\x6a\x77\x99\x13\x73\xbf\xd8\xbe\xf7\xf3\xf5\xdf\x0c\xdb\x58\x50\x7d\xd6\x8e\xd8\x22\xee\x59\x33\xef\xd5\x05\xc9\x33\x7d\x4e\x62\x23\x9f\xb1\x04\x1b\x63\x03\xb2\x81\xc5\x29\x0a\x11\xf0\x40\x92\x42\xd5\xe0\x88\x40\x13\x58\x46\xe4\xb1\x67\xfb\x4e\x48\xca\x6c\x1c\x19\x4e\xf4\x92\xe9\xff\x53\x49\x35\xb5\xc9\x90\x4c\x0d\xca\xa6\x35\xfd\xfa\x99\x0b\xbd\xfe\x5e\x1b\x65\x5a\xd6\xc1\x1b\xf6\xcf\xde\x4b\x74\x6f\x58\x6e\x4e\x8e\x3e\x95\x0f\xbf\xb8\x74\xa9\x72\xef\xb5\xcb\xb3\x26\x71\x08\xc6\x23\x02\x5a\x61\x68\x22\x64\x15\x5e\x53\x29\x8f\xe5\x6c\x64\x5a\x86\x25\x3b\x92\x69\xf1\x06\x29\x18\x04\xe3\x88\x04\xb6\x45\x06\x98\xb4\x8b\x7d\x90\x0e\xe1\x65\x72\xf9\x49\xb5\x9e\x3f\x95\x88\xaa\x4f\x0b\x5d\xfa\x21\x35\x67\xd7\x4f\xba\x3c\xaf\xf0\xec\xd8\xab\xf2\xbb\xb8\xc1\xec\x5b\x8b\x1f\x67\x2c\x54\x4d\xe8\x42\x05\xcd\xf3\x44\xd7\x42\x2e\x86\x6e\xa4\xc7\x96\xe0\xba\x81\x00\x6c\x43\xe7\x74\xe4\x71\x2c\xc6\x90\xe5\xc3\x88\x21\x0d\x4d\x8e\x29\x5d\xe3\x89\xff\xa8\x84\xa4\x59\xf2\x67\x30\xcf\xe0\xa9\x0d\x9f\xdd\x9d\x3c\xf0\xd3\x47\x7b\x1b\x1e\x0a\x3f\x2c\x55\x20\xa0\xbb\x54\xad\x79\xeb\x80\x5c\x6b\xfd\xb4\xda\xc9\xe3\x49\x03\x2e\x64\x54\x2e\xf0\xa0\x45\xaa\x28\x8e\x18\xd6\xa4\x6c\x10\x2b\x72\x28\x61\x36\x04\x0e\x88\x48\x4a\xe1\x02\x12\x02\x23\x50\x5d\xcf\xb6\xb1\xe6\xa4\xe3\xf5\x1f\xad\xbe\x55\x5b\x28\x99\xcf\x9e\x8a\xb3\xcf\x05\xa8\xc0\x9a\x5b\xe4\xd5\x0f\x9d\x1a\x5b\xe7\x0f\xd9\x33\xf5\x6e\xa9\xba\x53\x06\x24\xef\xc5\x23\x72\x80\x34\xac\x18\x71\x21\x23\x07\xba\x6e\x53\xb1\xce\xc5\x01\xe0\x6c\x55\x03\xc8\x17\x2c\x01\x62\x46\x14\x6d\x39\x40\x26\x36\x02\xc0\xf8\xff\x71\x51\x8d\xcb\xf5\xdf\x15\x2b\x53\x9b\xa4\x94\xef\x5f\x69\x70\x5a\x17\x9a\xf3\xe9\xe1\x2c\xe3\x57\x6d\x9f\xbd\xf3\xad\xf2\xf2\x8a\x01\xf7\xbd\xb8\xe1\x2f\x0b\x97\x8e\xdd\x97\xe5\xa7\x9a\x07\x3e\x7d\x52\x25\x63\x22\x5a\x89\xd9\xfa\x52\x4c\x2b\xac\x17\x8a\x02\x61\x46\x26\x54\xcc\x58\x8f\xb5\x88\xf1\x54\x2b\x64\x45\xd1\x93\x48\x11\xd9\x6c\xc4\x72\x9c\xc3\x21\x42\x33\x1d\x8b\x4c\x07\x8b\x31\xb1\xc2\xa8\xcc\x35\x3e\xb2\x9b\xc7\x73\x97\xbc\x32\x3e\x47\xca\x9f\xa0\x53\xb8\xe1\x4f\xf3\xb3\xe1\x4b\xbe\x1d\x4f\xd6\x71\x3e\xcb\x58\x3e\x25\xa1\x0b\x75\x54\x92\xa1\x4d\x08\xc2\x40\x74\x78\x8b\x60\x55\x31\x06\x16\x27\xc6\x06\xcb\xa9\x8e\x23\x0a\xa2\x17\x1b\x40\x23\xec\x40\x8e\x05\x9a\x55\x1c\xdb\xa2\x12\xbb\xd0\x26\x1f\x89\x87\xca\x56\xdd\xd9\xef\xc5\x9c\xa1\x27\x98\xc1\x07\x8d\x43\xb3\x8e\x5d\x29\xf3\xf5\x87\xb5\xaa\x30\x15\xcf\x4f\x6d\x70\xea\x4c\xf2\x76\x99\x94\x0d\x81\x75\x03\xc1\x11\x65\x9e\xb5\x2d\x51\x90\x08\x1d\x69\x4e\x60\x60\x5b\x30\x04\x0b\xea\x1c\x96\x1c\x45\xd3\x19\x86\x55\x2c\x87\xf3\x35\xce\x48\xbc\xcb\xe4\x31\x2b\x05\xd4\x2f\x7a\xb9\x48\x8d\x6f\x7f\xfb\xe5\x9d\x6e\xf1\x90\x8e\xe7\x7f\x92\xda\x5d\x3c\xb0\xb0\xd3\x05\xf9\x52\xb7\xdb\x47\x92\xf8\xf6\x72\x69\x56\x12\x48\x56\x25\x2d\x01\x29\x96\x62\xc4\x9a\x2a\xc8\x6a\x00\x75\x57\x0c\x43\x22\x46\x1a\x01\x2d\x82\x22\x3c\x26\x36\x3c\x16\x61\x5a\x55\x12\xfb\xc4\xad\xbf\x9e\x31\x06\x5e\xbb\x7b\x80\x29\x46\xd5\xca\x32\x6d\xee\xc2\xec\xe5\xc8\xd1\x7a\xca\xef\x79\xa4\xe6\x3d\x5a\x14\xce\x71\x0c\x27\xef\xa2\xa2\x25\x19\xc5\x01\x2d\x4b\x10\x2a\xb4\xc5\x2b\x3c\x1b\xd2\x92\xc6\x00\x8f\xc2\xc8\x8f\x51\xc0\xa8\x52\xac\xc5\x2c\x27\xfa\x54\xc8\x86\xd0\xb5\xad\x74\xc6\x5b\x2a\x6d\x9e\xb5\xa6\xd3\x84\xad\xe2\xeb\xb9\xba\xe6\xab\x71\xb7\x7d\xd9\xdd\x75\x5f\xab\x30\xf3\xcd\x73\xb9\x98\xbd\xcc\xbb\x2b\xda\xe5\x5f\x92\x3c\x5b\x8e\x04\x06\x8a\x3e\x6b\x39\xba\xe2\x41\x86\x66\x45\xa0\xd3\xbc\x29\x88\xa4\xcd\x08\x9c\x0b\x6c\x83\x76\x6d\x8d\xd0\x65\xe0\x07\x7a\x28\xeb\x96\x95\x1e\xef\x6d\xca\xc3\x6f\xab\x75\x1c\x54\xa6\xdb\xbe\x9c\x1b\x67\x1e\xcb\x9d\x35\xeb\xef\x27\xee\x64\x0d\x09\x78\x69\xd9\x94\xe6\xc3\xee\x61\x79\x7d\xf2\x0c\x83\xa3\x64\x42\x62\x64\x95\xb6\x08\x4f\x35\x1c\x4a\x30\x00\x92\x02\x99\x97\x4d\x49\x74\x3d\x87\xd5\x50\xe0\xd0\x12\xa9\x2a\x81\x20\x4a\x01\x0c\x7d\xe5\xef\xd6\xe1\xd9\xd9\xff\xbb\xda\x44\x6a\x93\x06\x99\x3e\xcf\x34\x20\x4d\xda\xe1\x8d\xfe\x6f\x4f\xeb\xb9\xae\x57\x0e\xea\x68\xca\x6b\xb3\x07\x17\x01\xab\x1b\xed\xde\x7f\x80\x7d\x51\xf3\x49\xae\x0a\x9f\x8e\x2e\x39\x2b\x25\x79\xff\x50\x00\xbe\x69\xb3\x82\x6e\x07\xba\x2e\xfb\xb2\x82\x19\xd7\x0c\x48\xd9\xa1\x03\x91\xf7\x99\x80\x22\x80\xc2\x6b\x9e\x43\xea\x0a\x06\xbe\xef\xc4\x1a\xb2\x5e\x4e\x3b\x70\xb3\x67\x1f\xde\x50\x79\x69\xe6\xe3\x97\x1a\x75\x3b\xf8\xa7\xfe\x6d\xfd\xcc\xcb\x85\x94\x6a\x97\x97\xb8\x47\x3d\x31\x4f\x99\x5f\x32\xd6\x57\x93\xf0\x92\x32\x0c\x95\xb4\x49\x81\x41\xb6\xab\xd8\x2c\xe6\x15\xdb\x63\xb0\x6b\x40\x49\x55\x75\x44\x8b\x9e\x8d\x89\x00\x20\x9f\x76\x48\xc8\xa8\x14\x1b\xb9\x30\x1d\x17\xfe\xde\xc2\x75\x7f\xbd\xd6\xd2\xbc\x70\x77\xdb\x5f\xb3\x07\x15\x1e\xd8\xcb\x5f\x9f\x89\xcd\x7a\x72\x8a\xd5\xa6\xeb\x1b\xbf\xb0\xdc\xe2\x8c\x99\x7d\x62\x02\x83\x2e\x89\x41\xc0\x50\x6e\x44\x21\xe8\xca\xa6\xe1\x05\x52\x18\x43\xc7\xb0\x5c\x59\xf3\x2d\xdf\x22\xb1\xa3\x50\x9a\xc3\xc3\xc8\x97\x61\xa8\x38\x9c\x93\xb8\xb0\x9c\xa7\x67\xf9\xf6\x6d\xbc\x07\x55\x7e\x7e\x5a\xef\xe6\xc5\xbb\xb5\x06\x5c\x29\xdc\x69\x4b\x96\xb2\xf9\xb2\x66\xbe\x33\x3e\xf7\x2f\xf4\xc2\xe4\x51\xba\x38\x99\xd7\x28\x9f\x65\x44\xc8\x8b\x2c\x19\xc6\x32\x49\xc4\xae\x6e\x0a\xbe\xca\xd1\x81\x48\x0a\x14\x62\x31\x0a\x43\x4b\x11\x08\x29\x20\x39\xcc\x41\x22\x81\xde\x6d\xd5\x75\xdf\xde\xda\x7b\x23\xeb\x5f\x27\x3b\xbc\x7e\xa3\x7f\xb7\x11\xf7\xce\x34\xad\x57\xa0\xde\x8f\x43\xfe\x5c\xa3\x94\xf3\x6f\x89\x5d\xf6\x24\x2f\x2b\xa0\x45\xa4\x87\x1d\x8b\xa5\xc8\x80\x04\x86\x15\x31\x22\xef\x5b\xbe\xe9\x92\x14\x52\x29\x82\x30\x7d\xc2\x21\x78\x35\x66\xc4\xd8\x53\x09\xd5\x52\x65\xfc\x37\x4e\xe1\xdf\x13\x0c\xff\x54\xfe\x49\x6d\x5c\x20\x57\xa5\xb4\x13\x0c\x9d\x5e\x2f\xb5\xf1\xe7\x5b\xfc\xfb\xb9\x76\x5c\x65\xce\x8d\x9e\x58\x7e\xc0\xdc\x4e\xf9\x5e\x14\x6e\x76\x6e\x54\xb9\xb2\x6d\x16\x35\x6a\x94\xbc\xdc\x39\x08\x6c\xca\x97\x39\x4b\x66\x0c\x8b\x80\x9c\x02\x39\x4e\x34\x0d\xdb\x20\x48\x41\xa7\x49\x3d\x74\x59\x95\xf4\x3d\x2f\x00\x50\x0b\x38\x2d\x50\x08\xc3\x49\xe7\xed\x67\x6c\x9f\x3f\x75\xc9\xc9\xeb\xd7\x96\x57\x69\xbb\xe9\xc6\xb1\xb2\xeb\x2b\xd6\xcd\x3e\x6b\xdd\x7c\xed\x68\x8b\xb9\x8d\x6a\x31\xd9\x7a\x27\xb1\x7b\x09\xb8\x40\xa0\x00\x62\x04\x26\xa2\x69\x8f\xf4\x05\x25\xd6\x2c\x3d\xd6\x7c\x8b\xa1\x22\x29\x44\x06\x10\x04\x55\x36\x04\xca\x52\xfc\x20\x40\x46\x10\xa7\x13\x05\xe8\xb5\x1e\xe5\x57\x5b\xac\xaf\x76\xbb\xab\xe8\x36\x3e\x7a\xef\x5d\xa2\xe0\x9b\x67\x8e\xbf\x7f\xff\x05\x2e\xbf\xff\x70\xf6\x4e\x95\x33\x26\x63\x92\x58\x78\x57\xb5\x48\xd2\xa6\x3c\x9f\x37\x44\x83\x25\xf9\x00\x52\x82\x2a\x52\x54\x44\xc6\x3e\x45\x87\xbe\xa1\x84\x2a\x83\x34\x0e\x78\x16\x54\x91\xa7\x61\x3e\x9d\x71\xa3\x43\x0f\x17\x34\xfd\xba\x79\xfd\x29\x35\x7e\xf3\x6f\x07\x8f\xda\x85\x07\xa8\x8a\x9f\x95\x5b\xbb\x6c\xb8\xff\x3a\x94\x66\x1c\x9c\x9d\xbc\x61\x69\x10\x6a\x48\xf1\x80\x14\xb8\x32\xe2\x10\xef\xf1\xa2\x89\x59\x59\xf1\xe3\xc8\x8b\x34\x45\x44\xd0\xf5\x5c\xd9\x09\xa1\x60\x59\x06\xeb\x85\x92\x4a\x80\x74\x00\x5d\xd1\xe7\xdf\x96\x5f\x57\x5e\xfc\xa8\xe7\xb4\x95\xf9\x37\x4e\x58\x5e\x9d\x1b\x69\x76\x1a\x7e\x64\x1a\xb3\xe4\xfd\x5c\x7f\xe8\xe7\x40\xf2\xd8\x97\x1c\xa3\x6b\xae\xed\x02\xdd\x91\x23\x9d\xb2\x35\x0a\x08\xa4\x06\x22\x27\x8e\x2c\x40\x9a\x1c\xa7\x73\xba\xcb\x1b\xb1\x4d\x45\xae\x0b\x55\x1a\xb3\x50\x95\x5e\x9a\x3c\xfe\xa7\x62\x5b\x6a\x93\x3c\x0d\x06\x65\x4a\x3b\x79\x3c\x34\x5c\x32\x77\x78\xeb\x9d\xa3\x67\x1f\x3c\xb0\xb0\x87\x74\x7c\xf2\xd2\xcd\xea\x07\xe3\x8a\x7e\x09\xf2\x9c\x90\xee\x3e\xc9\xc5\xdc\x4b\x5e\x9c\xa3\x78\x9e\xe3\x73\xd8\x12\x19\x45\xb6\x0d\x3e\xe4\x25\x1a\x72\xbe\x29\xf0\x96\x0f\x4c\x1c\x03\x06\x63\xc9\x67\x81\x2e\xf3\x0c\x06\x21\x65\x38\x5c\x3a\xe3\xe0\xe7\x4a\x77\x19\x37\x63\x5e\x3c\xe6\x42\xb3\xb8\xe9\x2b\xe1\x8b\xb7\x6a\x3c\x7b\xfd\x44\xaa\xf4\x56\x3b\x62\xb9\x59\x78\xd8\xaf\x87\xd4\xe4\x7d\x14\xd7\x60\xa1\x82\x5d\xdd\x8d\x01\x20\x1c\x27\xf4\x95\x58\x95\x55\x20\x33\x3c\xa4\x34\xcc\x03\x3b\x22\x75\x0b\xdb\xa6\xa4\xc9\xc0\x0e\x62\xd5\x55\xf8\x74\xd8\x74\xcd\x97\x2f\x26\x72\xef\x2e\x30\xff\xf5\x77\x06\x16\xfa\xba\xcc\xc0\x22\x47\xce\x96\x5d\x5b\xf3\x61\xfd\xae\xf1\xd9\x4d\xdc\x8f\x7d\x5e\x4d\x62\xfd\xca\x06\xbe\xaa\x10\x04\x56\x28\x10\x47\x54\x68\x2b\x81\x84\x2c\x1d\x99\x96\x03\x1d\x89\x34\x44\x4f\x87\x0c\x2f\xf8\x9e\x12\x86\xae\x23\x7a\xaa\x92\x0e\xda\xe0\xc0\xf7\x1f\xcc\x6e\xdf\x76\xfb\x5e\x9c\xc2\x1f\xea\xd4\x62\xd8\x04\x75\xc5\x87\x5b\xf2\x8d\xd4\xb2\xec\xbd\x1c\xec\x5e\x66\x66\x4d\xe2\x70\xa0\x1c\x23\x2f\xc6\x00\xf2\x9e\x66\xfa\x92\xe7\x5a\x01\xb4\x69\x96\x97\x69\x37\x52\x31\x45\xf2\x3a\xc3\x46\xb6\x2c\xa9\x8c\x26\x7b\xbc\x13\x50\x1c\x4a\x07\xd0\xb5\x7a\xd0\xae\x37\xe6\x56\x9e\xf2\x7b\xcd\xcf\xa7\x7e\xdb\x73\xe0\x84\x83\xa7\xdf\x6a\x36\xb1\x7a\xb1\x4f\xa7\x7d\xc9\xd7\x39\x52\xf7\x83\x21\x19\x9b\x3c\x4e\x2c\xe5\x85\x42\x2d\x56\x63\x22\x90\xac\xc8\x89\x24\x16\x89\x64\x6c\x32\x62\xac\xd8\x56\x68\x78\x11\x8c\xa1\x44\x71\x50\x43\xaa\xa3\x08\x8e\xeb\x39\x12\x10\x12\xdf\x3c\xf5\xfa\x37\x5e\x66\xbc\x32\xe6\x8d\xeb\xef\x4e\x6f\xff\xd5\xed\xa1\x9b\x5b\x4f\xe0\x1a\xf7\x6c\xb8\xeb\xb3\x95\x03\xdd\x59\xd9\xea\x7e\x9b\xb1\xdc\x6e\x62\x9f\x18\xc5\xc8\x89\xac\x7f\xd1\xf4\x4d\x4d\xa6\xed\x08\x04\x3e\x64\x55\x42\x8b\x29\x8d\xa1\x15\x0c\x3c\x55\x47\xa4\xe2\x02\x97\x0b\x3d\x91\xd1\xb9\xbf\x07\xd1\xfe\xed\x60\xfe\xa9\x3e\x9f\xda\xe4\xad\x72\x99\xfe\x0f\xaa\xf6\xda\x95\xdc\x45\x4a\xc9\xb3\x36\x75\xf8\xa2\xd0\x8a\xf5\xa7\x7b\x77\x56\xee\x3b\x67\x26\x4c\xf8\x6e\xcd\xdb\x25\x33\x5f\x6b\x36\xe0\xcd\xe4\x69\x3f\x73\x50\x12\x2c\x0a\x85\x91\x4f\xe9\x01\x61\xd9\x86\xc0\xfa\x84\x27\x90\x8a\xcd\x73\x84\x0b\x14\x35\xe4\x84\x20\x32\x55\x47\x09\x43\xa8\xbb\x3a\xd2\xff\xbf\x58\xd9\xcb\xa6\xbf\xbe\x17\xf7\x63\xbe\xb2\x7b\x4a\x96\x3a\xd4\xbd\xca\xf6\x3e\x75\x3a\x7e\x39\xb3\x66\x49\xb6\x46\xb0\xab\xf1\x83\xea\x87\xf7\x97\x39\x9d\x31\x76\x4a\xc2\xbb\x95\x53\x60\x48\xb8\x1c\xe3\xb1\x9e\x49\x9a\x2c\x92\x34\x53\x8a\x55\x21\xb0\xb0\x4a\x98\xbe\xab\x44\xd8\x85\x2c\x41\x52\x9a\x01\x09\xc5\x76\x78\x09\xa6\x73\x51\x95\xba\x50\x32\x77\xe6\xfa\xe3\x56\x8c\xbc\x09\x6a\x54\xa7\x9b\xaf\x9c\xfc\xf8\xfc\x1f\xf2\xd8\x59\x07\xbf\xae\x7f\x72\xe5\xb6\x13\xa3\x92\xa7\xc3\x0f\x1c\x41\x14\x22\x8f\x92\x78\x25\x10\x43\x3b\x50\x2c\x49\x30\x49\x4b\xe6\x11\xa7\xd2\x30\x94\x29\x92\x63\x4d\x96\xf2\x74\x4b\x56\x43\x5e\x0c\x1c\x9a\x48\x27\x1c\x98\xba\x9d\x7b\xa5\x25\xd7\xac\xc7\xb7\xa8\xe4\xa6\xaf\xeb\xa2\x1e\x53\x3f\x3d\x52\xb8\x54\x8b\x5a\x1f\x1d\x7a\xe7\xfb\xfd\xcd\x2a\x7c\x93\xc4\x04\x17\xe3\xf3\x94\xa1\x40\x89\xb0\x30\xa7\x53\xbe\xcf\x09\xae\xa5\xb0\xb1\x1a\x47\x48\x77\x3d\xcb\xe3\x04\x52\xf4\x31\x01\x58\x91\x92\x0d\x26\xa4\x09\x2b\x1d\x07\x53\xea\x9d\xb6\xa9\x53\x3a\x86\x83\xa7\x71\xf7\xb8\x0b\x9b\x4b\xcc\x78\x0b\xb9\xcf\xeb\x3c\xec\x37\xaf\xd5\xe1\x6d\xef\xf7\xb8\xd2\x2a\x48\x9e\x61\x48\xa4\xc1\x85\x1c\xc3\x01\xc2\xd4\x79\x5a\x50\x28\xe0\x1a\xc8\xe6\x6d\x5a\x55\x34\xda\xe0\x79\x4c\x28\x21\x61\xc9\x8e\x26\x62\x1d\x85\xbc\xc6\xe2\x74\x12\xa5\xf9\x57\xc1\x11\x7b\x9a\xbd\xfd\x46\x91\x2f\xe7\x9d\x6e\x7a\x55\x9e\x7d\xfd\xf3\x9f\xfb\x64\xcb\xda\xea\xeb\xb9\xc7\xe2\x0e\x79\xcb\x57\x6e\x9c\xc4\xb1\x74\x57\x31\x28\x35\x56\x49\x97\x88\x6c\x44\xb1\xb1\xe7\x47\x26\x8a\x6c\x0e\x40\x11\xc9\x2a\x0d\x2d\x06\x47\x44\x0c\x2d\x8b\xe7\x91\x12\x70\x80\xff\x5b\x0a\xe9\xdf\x28\xec\x7f\x6a\xe9\x49\x6d\xfc\x7e\x8e\xe9\x69\xfd\x4b\xf1\x99\x7b\x8a\xf5\xcb\xd6\xab\x55\x8b\x4e\x97\x0a\xcc\x2c\x53\xe6\xd2\x85\xf1\x5c\x83\x35\xb5\x56\x3f\x28\x47\x76\xbe\x7a\x2b\x6b\xae\x3c\xc9\x33\x23\xd1\x93\x14\x49\x88\x04\x53\x22\x7c\x11\x39\xb2\x68\x43\x20\xca\xbc\x45\xf3\x11\x8b\xa5\x50\x61\xe4\xc8\x60\x58\x81\xd1\x1d\x9b\x54\x55\x2e\x76\xb8\x74\xf4\x55\x36\xbf\x35\xcf\x2e\x5f\x60\x73\xf9\xea\x39\x9e\xac\x6a\xc4\xed\x5c\xdf\xac\x6e\xf7\x3d\xcf\x86\x9d\x1e\xf0\xe4\xd1\x24\xf5\x78\xb7\xe2\x25\x92\xd8\x77\xa6\x79\x86\x0a\x6c\x52\xb3\x3d\xcc\xfa\x31\x70\x11\xa3\xdb\x50\x32\x28\xd6\x14\x8c\x48\xb7\x0c\x14\x78\x26\x61\x47\xba\x63\xf2\xd8\x44\x11\x6d\xd9\x89\x97\x8c\xf4\x3c\x3d\x16\x0c\x79\xfb\x93\xac\x25\x06\x6d\x5c\xdc\xc3\xbf\xb7\xb0\xc4\xae\x66\x4f\x37\xe1\x5d\x57\xb5\xb3\x3b\x3f\xda\x7a\xb8\x4b\x12\x47\x79\x09\x0f\x41\x35\x82\x9e\x2b\x85\xb4\xc7\x29\x24\x52\x0d\x9e\xe6\x23\x9e\x90\x42\x37\x30\x04\x3f\xe6\xfc\xc8\x14\x4d\x44\x47\x3e\xc2\x82\x21\x5b\xe9\xbc\x90\x06\xcd\x6c\x56\xf6\xc1\xfe\x26\x79\xb3\x5d\xab\x5c\x68\xf8\xad\x7d\xcf\x0f\x71\x77\x1b\xed\xba\x11\x8c\xcb\x5e\xa1\x78\xf3\x8b\xb7\x2b\x5d\x4d\xde\xc5\xc3\x87\x9a\x19\xf3\x31\x8e\x42\xc6\x92\x35\x8b\xe5\xdd\xc8\x20\x58\x2f\xe2\xe4\x48\xb2\xa0\x28\xc8\xac\x49\x71\x2a\xeb\x86\x10\xd2\x24\xc5\x23\x36\xed\x14\xcd\xdf\x4b\x36\xaf\xdc\xf8\xae\x04\x3d\xe4\xf2\x99\x41\x1f\x2e\x3a\x36\x7b\xfd\x02\xb7\x5d\xde\x1b\xdf\x33\x37\xf3\xd7\x3f\x88\x33\xef\xeb\xf4\xfa\xe4\xe4\x05\x30\x36\xed\x2a\xba\x16\x5a\x8c\xa0\x9b\x0c\x47\xf1\x12\xa4\x00\x6b\x61\x07\x98\x8c\x4d\x02\x0b\x62\x83\x44\x00\x13\x71\x48\xd1\x01\x6b\xe9\x22\x0f\xd2\x79\x3a\x5b\xad\xc7\x3d\x78\xfd\x8e\xb7\x4f\x6c\x44\xdc\x6a\x56\x6d\xcf\xfd\x9d\xe4\x9a\x7e\xcf\xa6\xfd\x35\xa8\xf7\x5e\xb1\xe6\xa8\x16\xfb\x32\xd6\x16\x9d\xb8\xfc\x0e\x64\x64\xaa\x24\x90\x00\xc9\x89\xa4\x4e\x50\x80\x00\x1c\x30\x0c\xa8\x2a\x0a\x11\x29\x12\x4d\x9b\x21\x15\x21\x28\x05\x01\x30\x4c\xd1\x21\x30\x78\x09\xc8\xf0\x4f\x4d\x80\xa9\x8d\x53\xa7\x67\x49\x9b\xce\xd8\xcb\x2f\x2a\x7c\x6f\xdd\xa6\xf6\x6d\x86\x2a\xaf\xf7\xbb\xd3\x6c\xf4\xb8\x8b\xa5\x86\xec\x78\x5e\xe6\xf0\xde\x6d\x1f\xaf\x39\x77\x65\x44\x12\x89\x13\x92\x42\x7a\x14\x63\xd1\x26\x2b\xd8\xba\xae\x98\x88\x75\x5c\x5f\x21\x81\x84\xa1\x2e\x62\x2f\x92\x91\xce\xda\x84\x21\x70\x8a\x44\xb1\x21\x52\x2d\x12\x26\x36\xa3\x52\xab\x1b\x8e\x58\x3b\x75\xff\xb6\xb5\x13\xbf\xef\x66\x6f\xdc\xd0\x5d\x9d\x20\xec\x56\xfa\xfe\x12\xbf\xa8\x69\x85\xdd\xea\x7c\x3d\x2a\x79\xaf\x0d\x5e\x17\xf8\x40\xc0\x3a\x09\x5c\xdf\xe0\xa5\x7f\xe9\x1e\x71\x96\xe6\x18\x81\x43\x91\xd8\x56\x82\x18\x33\x2a\x74\x59\x9f\x0c\x40\x24\x11\x4e\x8c\xe3\xc4\x4b\x6e\xfb\x60\x76\xa9\x6d\x6b\x56\xf5\x8e\x0a\x35\xf4\x9e\x16\xf4\x9b\x75\xb7\xb2\x88\xd3\xc6\x2f\x1f\xd0\x2a\xab\x7f\xe7\x69\x8d\x1f\xb3\x27\x2f\x69\x64\x42\x9e\x8e\x59\xd1\x10\x5d\xce\x54\x34\x15\x22\x95\x92\x18\x2f\x26\x02\x37\x8e\x61\x4c\x82\x38\xf6\x1d\xc6\x08\xb8\x80\x8c\x28\xc4\xfb\x0e\xe2\xd3\x29\x6a\x74\x19\x5a\x2b\xf7\xf3\x77\x76\x56\xd6\x1e\x37\x52\x95\x67\xe3\xae\x95\xbf\x52\x51\xbe\xdd\x6e\x76\x1c\xb7\xce\xdf\xe0\xfc\xd1\xfa\x7e\x12\x11\x82\x42\x2c\x51\x9e\x68\x92\x3e\x32\x63\x29\x74\x09\x97\x82\xba\xcc\x2b\x00\x38\x26\x8e\x63\x9d\x96\x23\xc4\x3a\x96\x69\x2b\x74\x18\xc7\x14\x02\xe9\xd1\x53\x6e\x37\xbd\x3b\xb8\x7e\xc7\x41\x39\xda\x9e\xde\x2e\x1d\xb2\x97\x4e\x9e\xd3\x77\xc6\xed\xc1\x03\x1c\xfd\xbb\xcd\x4f\x1e\xac\xba\x3f\x3f\x79\xb6\x0c\x42\x96\xf5\x03\xcd\x32\x04\x2b\x52\x08\xda\x8c\x34\x29\x12\x49\x0b\xd8\x3a\xed\x07\xd0\xe3\x08\x06\x05\x38\x14\x5d\x82\xb5\x79\x6c\xb2\x2c\x4d\x28\x7f\xa7\x33\xee\x67\xfd\xef\x3a\x44\x53\x1b\xf7\xeb\x97\x25\x6d\x81\xe0\xd5\x9a\xfb\xe7\xdb\xe5\x07\xf7\xfd\xe9\x62\xe3\x9e\x41\xad\x29\x39\xf7\x4d\x1e\x91\x2f\x25\x4b\xd0\xee\xdd\xfb\xf7\x95\x3b\x57\x8a\xd4\x4f\x9e\x19\x51\xa4\x6e\x11\x5e\x44\x07\x3a\x61\x88\x2a\x0b\x20\x45\x99\x0a\xf0\x24\x53\x0a\x23\x4b\x95\x59\x42\x34\x03\x51\xd1\x08\x0f\x39\x9e\xab\xdb\xac\x89\x12\x80\x5f\x5b\xfe\x8c\x06\xbc\x7a\xe6\x93\x05\x27\xd7\x37\x3e\xf5\x8c\x7d\x3b\xb5\xf0\xe8\x68\x6a\xab\x82\x4f\x46\xf5\xf8\x36\xe7\xc9\xaf\x9a\x7d\x34\x31\x79\xbe\x45\x0d\x3c\xc4\x6a\x12\xd0\x15\x41\x94\x91\xc6\xf3\xb2\xe6\xb2\x9c\xca\x42\xd6\xd1\x4d\x9e\xf7\x59\x49\x0d\x00\x67\xb0\x4c\xc8\x03\x00\x79\xcd\x51\xd2\xb9\xa2\x1e\x8b\xcd\x06\x94\x6a\xc7\x76\xac\xb1\xad\x7a\xea\x83\x5c\xdf\x49\x8d\x6e\x6b\x8b\xe7\x5d\x99\xa9\xee\xdb\x72\xb3\xc2\x5f\xf4\xf4\x4d\x49\x34\x21\x33\xf4\x39\x16\x68\xbc\xa7\x50\x16\x81\x49\xcd\x16\x44\x9d\x52\x78\x83\x47\xaa\x81\x5d\x10\xd3\x06\x90\x44\x5f\x0d\x05\x56\xf6\x0d\xd5\xd1\x40\x3a\x75\xb1\xe1\xcf\x4b\x1f\x7d\x75\xd5\xd8\xd5\x53\xd4\x91\xcb\xbe\x6d\x8f\xec\x21\xeb\xa7\x36\x18\xf5\xc1\xe8\xeb\xe3\x73\xa0\xbe\xd6\x5b\xfd\x93\x47\x47\x07\x34\x72\x1c\xce\xe1\x29\x28\x10\xb4\x2a\xc5\xb2\xcf\xbb\x21\x03\x4c\x8a\x0a\x81\xce\x50\x81\x6e\xfb\x32\x8d\x29\x99\x05\x36\xb0\x15\x5d\xa1\xb0\xf2\x77\x47\xc6\x83\xac\xff\x5d\x1f\x6e\x6a\x93\x2c\x29\x59\xfe\x55\x17\xfb\x8f\x20\xff\xf1\xc4\xec\xb0\x77\x3b\x3d\xe7\xa0\xc6\x27\x7b\x37\x40\x6f\x0e\x1e\xb3\x7f\x79\x65\xb4\x76\xc7\xb2\xba\xcd\x16\xe5\x6d\xf0\x47\xc6\xe6\xcd\x13\xd3\xbd\x1c\x19\x85\x52\x24\x5a\x8c\x29\xa9\x96\x22\xfb\x91\x87\x7d\xfe\xff\xb1\xf6\xd6\x61\x5a\x55\x5f\xfb\xf8\xd0\x48\xa3\x20\xdd\xd2\x48\x9c\xa4\x19\x60\xe8\x6e\x09\x85\xd3\xb1\x4f\xed\xb3\x4f\x83\xc4\xd0\x25\x8d\x48\x97\x20\x2d\xd2\x25\x08\xd2\x52\x22\x48\x77\x37\x4a\x0b\xf2\xbb\xde\xef\xe7\xf5\xe7\x67\xe4\x99\xcb\xf7\x9a\xeb\xf9\x7b\xce\x1f\x7b\xf6\xb3\x6a\xaf\x75\xaf\xfb\x16\x6d\x01\x7a\x3e\x0e\x59\x8b\x46\x94\x8a\x01\x9d\x16\x83\xc8\xc6\x22\x82\x95\x80\x16\x3b\x7a\x9e\x1f\x33\x60\xea\xfb\x37\xb2\xf7\xdc\xf4\x78\xed\xc8\xad\xfb\xd0\xa2\x92\x63\xab\x5f\xcb\xf1\xb4\xc5\xf8\x87\x8d\xf3\xd7\xcd\xf3\x59\xd5\xb4\x3d\xa5\x62\xb3\x7b\x51\x0e\xc6\x21\x9e\xc2\x3c\x4b\x30\x74\x5f\x71\x39\x8d\x52\x39\x01\x58\xb2\xac\x13\x50\xf3\x0c\x0c\x45\xb2\x8b\x71\x26\x94\x38\x1e\xc3\x39\x83\xa3\x62\x13\x92\x35\xd9\x4c\x36\xfd\xf6\xee\xc8\x99\x7d\x44\xca\x18\x9f\x25\xdf\xd6\xad\x07\x1e\x55\xf9\x52\xbd\xd9\xb9\xe1\xee\x9c\x13\x73\x77\x7d\xf6\x34\x7e\xa6\x4f\xd8\x40\x74\x74\x4d\x64\x65\x1e\xe3\x70\x21\x52\x03\x4e\x23\x23\x45\xf4\x65\x2b\x0a\xad\x90\xe6\x8d\xc0\x04\x32\x23\xab\xa6\xc5\x84\xa4\xc7\xf9\x18\xf6\xee\xa0\x69\x69\xf7\xd3\x4b\x3b\x57\xa9\x5e\x6d\x7a\x06\xa2\xc1\xba\xe1\x39\x3b\xb6\x98\x38\xa0\xf1\xa0\x37\xa3\x8a\x3f\xf8\x61\x74\xba\xbe\x7b\xf2\xa5\x4d\x5c\x22\x76\xe1\x82\x41\x45\x33\x35\xe0\xd8\x90\x88\xf8\x28\x24\x7d\x5c\x83\x9e\xc1\xf0\x9e\x02\x05\x89\x08\x1d\x4b\x43\x11\x17\x39\x40\x16\x39\x4f\xb3\x58\x2b\xfc\xbb\x4d\xfa\x97\xfc\xd7\xbf\xc1\x9d\x93\x1b\x27\xb6\xff\x07\x38\xec\x59\xc9\xeb\xd4\x86\x62\x7f\x9c\xc0\x0e\x77\x6b\xb4\xee\xa7\xea\x2f\x32\x1e\xbd\x52\xf8\x88\xb6\x63\x27\xc1\x6c\x22\x37\xb7\xbc\xda\x3d\x7e\x26\x84\xe1\x90\x0d\x2d\xc5\xe1\x1d\x8c\x14\x5c\x92\x09\x7d\x0e\x0b\x44\x39\x0c\x74\x13\xd7\x44\x02\x48\xb2\x8a\x9b\x92\xea\x71\x4c\x00\x24\x86\xc5\x70\x35\x15\x06\xca\x6f\xd9\x6f\xbe\xca\x5d\x7d\x1a\xc8\xf0\x64\x73\x8d\xca\x49\xb7\x7e\x5d\x57\x7a\xdf\xeb\xe6\x2d\x3e\x59\x3b\xf6\x56\xc2\x0f\x6f\x0f\x8c\x1e\x12\xbf\x9a\xc1\x61\x78\x0c\x39\x10\xc8\xa4\x8d\x93\x54\xe4\x23\x56\x63\xc3\x20\x82\x80\x12\x3d\x46\x12\x45\x86\x87\x14\x66\x99\x22\xae\x38\x90\xb5\x7d\x49\x61\x52\x21\x71\x9a\xd9\x99\x26\x0a\x2d\x69\xfd\xd3\xc0\xf5\xaf\x4e\x95\x7f\x7d\x6f\x4e\x83\x4d\x63\x4b\x76\x6c\x59\xaa\x5a\x13\x66\xf3\xe0\x0a\x6d\x92\xa6\xc4\x91\x3b\x21\x12\x09\xda\x14\x35\x12\x42\x51\xa3\x05\x9e\x30\x5d\x1c\x17\x69\xdb\x14\x79\x43\xf5\x78\x06\x57\x4c\xcd\x0b\x64\x8e\x52\x65\x81\xc3\xf0\xc0\xb5\x83\xd8\x47\x3e\x31\xb2\x4e\xe6\x33\x66\xdd\x0e\x85\x4f\x6e\xae\xc8\x93\xcb\x13\x37\x2f\x5e\xde\x37\xdd\x98\x59\xda\xa0\x95\xfa\x9f\x8b\x87\x62\xcd\xe3\x88\x15\xb7\x31\xdd\x16\x49\x52\x74\x45\x95\x54\x69\xc0\x98\x26\x64\x7d\x51\x36\x64\x68\x2b\xbc\x83\xc9\x36\xf0\x28\x9c\x65\x9c\x48\x95\x3c\x8b\xa3\x38\xee\xef\xf5\x8b\xd7\xf5\xfe\x97\x3d\x66\x68\xb6\x76\x9f\xec\xc0\x56\xec\xeb\x50\xbd\x6d\x8b\x37\xd7\x3d\xfd\xf5\xd4\x11\xce\xe4\x33\xb7\x8f\x6e\x9b\xb4\xb5\xc2\xf7\x2b\xba\x25\x27\xbd\x7d\xb8\xfd\xcf\x69\xc5\x52\xc4\xa2\x43\x49\xda\xb3\xc9\x65\x17\xe5\x5e\xb7\x76\x53\xd7\x43\x6b\x88\x6d\x8f\x32\x30\x85\xf6\x7f\xf5\x15\x9f\xf9\xc1\xd1\xe5\x6d\x9e\x0c\x4f\xdb\xc4\x32\x66\xa1\x63\xc8\x2e\x46\x9a\x04\xc1\xa9\x96\x03\x43\x9f\xc2\x0c\x91\xe0\x59\xc6\x53\x29\xd6\xe2\x31\x85\x23\x7d\x55\xf3\x2d\x03\x27\x01\x11\x19\x78\x28\x0a\xb8\xfe\x6e\xa1\xf3\xc7\xdd\xa2\x74\xf1\xc9\x13\x7f\x2c\x54\x7c\x70\x2f\x66\x53\xad\xac\xb5\xab\xdc\xfd\x62\x73\xee\xce\x6d\xa6\x7e\xd0\xfa\x74\xe2\xb8\xec\xe3\xe2\xf7\x8b\x58\x9a\xe7\x08\x18\xd4\x8d\xd0\xd0\x10\x0b\x22\xd1\x57\x15\x56\x95\x71\xc7\x82\x11\xa1\x93\x9a\x6c\x89\x34\x41\x9a\xbe\x86\x43\x49\xc3\x29\xd9\xb4\xbd\xd8\x55\xc3\x20\x38\xac\xe1\xc1\x01\x5f\xb2\xf7\xcd\x2c\x23\xa6\x8e\x1f\x79\xb9\xc5\x60\x55\xac\x3a\x6f\xe0\x1b\xa3\x25\xbb\xc0\xfa\xe5\xbb\xf8\x89\x0b\xb2\xa4\x22\x84\x11\x0e\x8c\x88\x77\x1c\xc7\x15\x68\x08\x48\xca\xb6\x75\xd9\x25\x35\x47\xa2\x71\x4e\x53\x64\x85\x61\x78\x81\xa1\x18\xc7\xa6\x75\x52\xb5\xe9\x54\x76\x46\x46\x24\x9c\xcb\x9e\xde\x7d\xaf\xf2\xc8\x07\x8d\x9f\x1c\xff\xf4\xf1\x85\x5c\x1d\x2a\x3e\x39\x77\x24\xd3\xb5\xdc\x3f\x17\x1c\x72\x62\x58\xff\x32\x29\x4c\xa8\xec\xef\x0f\xfa\x6d\xad\x34\x6a\xdd\x87\x25\x37\x10\xcd\x8b\xcd\xfb\xfe\xd0\x47\xf5\x8c\xcf\x6f\xde\x36\x7b\xcd\xdd\x9d\x71\x7c\xbd\x23\x5d\xe3\xc8\x86\x4b\xdb\x81\x23\xfb\x7a\x44\xf0\xa4\x1d\x88\x4e\xc0\xc9\x1e\x12\x65\x07\x79\x10\x51\x14\x8d\x03\x0c\x44\x02\x03\x0c\xdf\xc1\xa0\xcd\x60\xa6\xc5\xca\xef\x9a\x50\xfd\x25\x8f\xf3\xb6\xc8\x5e\xee\x68\xf5\x73\xcb\x3a\x6f\x9a\x9c\x6f\x72\x89\x02\xf5\x13\x13\x2b\xae\x79\x9b\xe0\x10\x3d\xaa\x24\xcf\xea\x13\xbf\x38\x24\x84\x3a\xc9\x7a\x94\x4c\x42\xcb\xb7\x39\xd2\xc3\x09\x11\x27\x30\x11\xd7\x48\x92\xa4\x34\x1d\x06\x96\xa3\x78\x81\x09\x43\xda\x11\x5d\x8d\x8a\x02\x15\xa6\xb2\xe3\x46\x6c\xca\x35\x34\xf3\xb8\xdb\x09\x7b\x93\x96\xbd\xb9\xad\x3d\x7e\x38\xfc\x4e\x9d\xe7\x7f\x2e\x7a\xe3\xae\xdf\x11\xd0\x59\x0e\x75\x7b\x99\x62\x79\x96\x66\xaa\x33\x52\x21\x1b\x3b\x31\xea\xc0\x92\xcf\x0e\xee\x58\xd5\xf6\xf6\x07\x55\x8d\x91\xe6\xa7\xbf\x37\x2a\x50\x3b\xc7\xf1\xb0\x5d\xfc\xca\x0b\xcc\x70\x3d\x57\xd7\x2c\x8b\x91\xb0\x10\x22\x49\x0b\x5c\xd9\x00\x21\x49\x5b\xae\xa9\xea\xc0\x32\x05\xe0\xa9\x9c\x4a\xf9\x92\x1d\x86\x04\x94\x58\xe0\xbf\x5b\x5e\x24\x97\xcb\x34\x7b\xec\x07\x4b\x3a\x4c\x1b\xb7\xb7\x29\x37\xb2\xfa\x57\xf3\x36\xbc\xe2\x02\xb2\x54\xed\x72\x35\x87\x54\xea\x71\xee\x6c\xda\x08\x12\x62\xaf\x1c\xf1\xb6\x05\x04\xe0\xa8\x2e\x13\xfa\x0e\xa5\x03\x81\xc0\x34\xcf\x62\x30\x39\x0a\x30\x3e\x88\x38\x57\xe0\x03\xe0\x43\x93\x86\x06\x49\x73\x1a\xc9\xc5\x80\xdd\x9c\x49\xec\x70\xac\xf9\xd1\x53\xdc\xa1\xf5\x6b\x4b\x5e\xeb\xb4\xa0\xd8\xa9\x7c\x2f\xab\x6d\x03\xbd\xae\xaf\x7f\xd3\xf7\x71\x38\x3a\x9e\x1b\x09\x92\x00\x05\x4b\x67\x6c\x5a\x22\x1c\x5f\x94\x58\x52\xf0\x24\x99\x92\x3c\x0f\xe3\x45\x21\xf2\x80\xec\x70\x94\x85\x01\x18\x9a\x2a\xe9\x07\x1e\xf0\x38\x39\x15\x77\x76\xb6\xad\xcd\x92\x67\x61\xbe\x6f\xf3\x26\xf1\x1d\x1b\x8d\xf8\xe0\xe5\xb0\x1a\xd3\xf2\xb1\x7b\xde\x7c\xf8\xa8\x17\x9d\x79\xea\xe6\x89\x4c\x0a\x77\xae\x3a\xf5\x6a\xdb\x27\xb7\x0a\x5e\xa8\x10\x1e\x6c\xf9\xf9\xa0\x39\x4b\x17\x38\x9f\x0a\x3d\x3a\x2d\x3a\xb4\x36\xfb\xcd\xee\xaf\x73\x37\x49\x9b\x30\x57\xcc\x7f\x30\x90\x08\xd7\x56\x19\x1c\xe2\x1a\x92\x4d\xdd\x85\xae\x64\xe8\x14\x87\x39\xae\xeb\xe0\x32\xce\x3a\x10\x97\x55\x19\x87\x34\x6e\xf1\xa1\x24\x2b\x04\xcf\xbd\xeb\xce\xfd\x86\xd2\x25\x01\x3f\x55\x7e\x9a\xfe\x70\xc2\xe4\xc4\x8c\xaf\xe9\x27\x55\xbf\xdd\xb2\xe7\x4c\x52\x95\x52\x05\x96\x64\x6f\xf3\x28\x6d\x24\x64\x31\xa3\x8f\xe8\x45\xa4\x48\x86\x91\x2b\x60\x5a\x60\x22\x4d\x25\x5c\x59\xa4\x2d\x99\xa2\x2c\x53\x0d\x30\x49\x62\x22\x99\xa7\x2d\x41\x32\x80\xab\x42\x21\xc4\x52\x68\x43\xa7\x58\x66\xbe\x63\xec\x3c\x97\x67\xac\xdc\xa8\xd0\xcc\x5b\x7d\x6e\xff\xda\xee\xbd\x39\x5d\x9e\xbc\xfc\xf8\xd9\x07\x83\xda\xcd\xf3\x82\x5b\x56\xe9\x94\x5f\xcb\xcb\x87\x1d\x50\xb6\x4d\x5d\x99\xf3\x83\x1e\x47\x33\x17\xa8\xb1\x22\x57\xd6\x39\xc7\x6b\x74\xcc\x35\xe2\xaa\x9a\xa7\x70\xff\xac\x70\x6d\x4a\xee\x8e\xbc\x2f\x8f\x4d\xaf\xf0\x13\xdb\xb9\x6f\xbb\x96\x8d\xfc\x76\x25\x1f\x7c\x6f\x4d\x7c\xff\xcd\x95\x51\x2b\xbf\xf4\x98\xe7\x53\x57\xa6\x6d\x74\x1d\xf3\x8d\xaa\x5a\x3a\x25\xbb\x91\xae\xf3\x76\x14\x49\x3a\xa2\xb1\x80\x52\xbd\x20\x30\x3c\x92\xb4\x2c\xdd\xc2\x22\xc4\xd0\x3c\x0e\x5c\x9b\xd1\x69\x4d\x05\x5e\x18\x83\xc9\x20\x77\x85\xd3\xbd\xb6\x36\xdd\x55\x29\x53\x8f\x7b\xcc\x9a\x2f\xda\xf5\x78\xda\xf5\xd5\xf7\xc4\xa5\x3b\xbd\xbf\x45\xfa\xc3\xcb\x5b\x4e\xd7\x8f\xe3\x2a\x7a\x10\xa9\x38\x16\xd2\x24\x86\xd9\xa6\x1d\xd1\xa2\xe2\xcb\x0c\xa9\xe1\x21\xad\x73\x22\x85\xb9\x30\x64\x03\xc9\xd0\x71\xdb\x11\x08\x12\x10\x22\x01\xc8\x77\x8d\xad\xc3\xfa\xcf\x6f\x9e\xc8\xf7\xe0\xe6\xd7\x0b\x6c\x17\x9d\x5f\xd4\xb3\xec\xec\x7d\xfb\x0b\x3f\x7c\x9c\xd4\xa4\xff\x99\x25\xe2\xa5\x13\x69\x9b\xb2\xc7\x96\xc1\x82\x84\xaf\x1b\x84\x19\x50\x41\x40\x19\x11\x24\x91\x68\x98\x1a\xe7\x5b\x96\x66\xb1\x94\xa3\x0a\xb2\xaf\xd1\x01\x0e\xa9\xc8\xb6\x35\x3a\x54\x29\x60\xc6\x26\xd4\x4a\x37\xbb\xf4\x9b\xc6\x8f\x9b\x9e\x1b\x71\x62\xe0\xfc\xf5\xb3\x1a\x7d\x71\xae\xff\x94\x76\x85\x4a\x62\xf3\x4e\x81\x8e\xdd\x6f\x54\xa0\xd2\xa6\xa7\x12\xf3\x86\x25\x95\x01\x12\x83\x18\x5e\xc6\x30\x83\xd6\x38\x68\x61\x78\x08\x02\x4d\xd6\x18\x3d\x10\x4d\x93\x08\x2d\x39\xb0\x34\x45\xd6\x2c\x8d\x0c\x01\x60\xb5\x18\x02\x3b\xdc\xef\x5f\x5c\xab\xdf\xa1\xe9\x44\xb5\xb7\xb4\x76\x7a\xeb\x5d\xf3\x7e\xf8\xe2\xcb\x3b\x85\x9f\x9c\xbe\xf3\x74\x4c\xb9\x49\xeb\x87\x2d\x29\x1f\xc7\x96\xb3\xc6\xc8\x5e\x10\x06\xac\x29\x22\xc6\x0f\x3c\xc8\x22\x53\xc1\x45\x5e\x71\x79\x86\x26\x39\xc1\x32\xa1\xe8\x90\x38\xaf\x72\x86\x27\x48\x24\xe6\x72\xc4\xbb\xd9\xa0\x6f\xa1\xc4\x22\xcd\x13\xdb\x1e\xf7\x87\xb4\x7f\xd0\xe6\xc9\xdb\x8f\x26\xfb\x05\x07\x67\x1b\x95\x3d\xe9\xe2\x43\xae\xc2\x9e\x0b\x8b\x46\xc5\x2f\x58\x12\x6a\xe0\x7b\xb6\xc5\x47\xb6\x6f\x01\x2e\xa4\x7c\xcb\x56\x4c\xcb\xe4\x31\x44\x90\xa4\xe2\x22\xd7\x23\x6c\xd3\x40\x88\x0b\x69\x45\x32\x19\x46\x60\xe8\xd8\x84\x5a\x65\xf2\x0f\xf8\xe1\x92\x9a\x3c\x6a\xc8\xab\x35\x79\xd6\x3f\x25\xaa\xdb\xad\x56\xee\x4d\xc4\xdb\x97\x6e\x52\xb8\xd9\x90\x43\xec\xd2\xf8\x29\xd6\x30\x2e\xb2\x38\x91\x12\x68\xc5\xf2\xa1\xee\xba\x08\xe8\x9c\x45\xb1\x01\x47\x41\x1c\x4a\xa6\x6a\xa8\x2e\x34\x21\x54\x24\x12\x78\x50\x36\x68\x32\x08\xb1\x77\x23\xc4\xc6\x2e\x0f\xbf\x6e\x39\x60\x58\xb6\x4b\xd4\x87\xe7\x4e\xff\xf6\x5d\xa7\xaf\xcf\xb5\x2c\x79\x64\xde\xac\x1b\xa7\x7a\xd5\x9c\xf1\xb8\xc7\x93\xbd\x71\x6c\x6d\xd2\x1c\x69\xf1\x36\x85\x13\x14\x69\x02\x83\x01\x6c\x40\x72\x04\x15\x99\xa2\x17\x40\xd1\x64\x02\x06\x49\xe6\xff\x14\x3d\x9c\xe0\xe8\x3a\x07\x48\x25\x06\xc3\xda\xe5\xdb\xdc\xf1\x0a\xde\x03\xfc\x9b\x95\x0b\xf6\xf9\x73\x17\x1d\xc9\xba\x33\x51\xf4\xf6\x9d\xbd\x7f\xab\xc5\xd1\xb6\x39\xbf\xa2\xd2\x36\x26\x8f\x69\xbf\x24\x1e\x8a\x88\x22\x0c\xdc\x27\x78\x2c\x10\x81\x47\x21\x4a\x24\xf8\x80\xc2\xc2\x00\x67\x44\xca\x03\x8e\x68\x33\x3e\xc5\x38\xba\x26\xf1\x2e\x0d\x19\x31\x15\x4e\xcc\x37\x7a\xa1\x01\xe7\xbf\x5a\x51\x70\xc5\xa7\x9f\x17\x7d\x31\x7c\xd2\x83\x55\xf7\x3e\x5e\x54\xaa\x13\xd1\xe6\x6a\xa5\xc7\x2d\x3a\x7e\xaf\xc4\x31\x06\xe3\x34\x05\x54\x9f\x57\x55\x57\xc7\x04\x3f\x62\xa9\x48\xa7\x75\x4b\x54\x5c\x4f\x94\x49\xcf\xb7\x74\xde\x51\x1c\x57\xe6\x25\x9a\xa2\x44\xd9\x11\x23\xf5\xdd\x08\x51\x66\x5a\xd1\xcc\x2b\x56\xb5\x6f\xfc\xdb\xfb\x43\xe9\xd2\x7f\x56\x5d\xb3\xfb\xda\xac\x85\xcf\xb6\x44\x8f\xca\x8c\x6e\x3d\xf6\xdb\x19\x45\xd2\x56\x80\xc5\x7e\x02\x62\xb6\x41\x2a\x98\xcf\x68\x26\x08\x65\xc8\x93\x6a\x40\x88\x1a\xa2\x4c\x9a\xf3\x11\x02\x51\xc8\xf0\xa1\x61\x99\x06\x23\x18\x41\x84\x21\x5b\xfd\x4f\x86\x4b\x69\x10\x6f\x0a\xcd\x2e\x3b\xef\x44\xa1\x7a\x89\x59\xe7\xcc\xda\xf9\xc1\xb6\xdb\xdb\x27\x96\xe9\x5e\xb6\xf3\x9e\xe3\x9b\x32\x5d\xa9\xd0\xf4\xfa\x87\x69\x0b\x68\xb1\xf1\xb5\x21\x47\x30\xae\x2e\x40\x49\xe2\x28\xd5\xb5\x34\xda\x72\x7c\x1f\x42\x1d\x57\x64\x81\x31\x5c\x82\x8f\x10\x21\xd0\x06\x20\xa8\x40\x00\x21\x89\xa3\x54\x3a\x35\x19\xce\x10\xaf\xfb\xfd\x30\x71\x77\x44\xa4\x9f\x5e\xba\xec\xcd\xe5\x37\x4a\xe3\xe6\xb0\x91\x52\xf5\x1d\x2f\xbe\xcc\xdb\xe9\xe3\x1f\xd2\x46\xec\x1c\x1b\x78\xad\xe1\x90\x96\x03\xdc\x0d\x78\xdd\x64\x7d\x5b\x33\x5d\xc3\xf4\x91\xe7\xcb\x9c\x86\x1c\x57\xe5\x03\x8e\x70\x4c\x5f\x92\x5c\xd3\x71\x75\x43\xe0\x41\x2a\xd4\xf1\xbb\xf3\x0f\xdc\x53\xc4\xb9\x3d\xe6\x61\xd4\xfb\xe9\x8f\x23\xf4\x33\x1b\xad\xab\x39\xa6\x2e\x9b\xf4\xc9\xbe\xd6\x5f\xfd\x3e\xe0\x44\xed\x38\x0e\xa4\x28\x0b\x43\x2a\x8a\x78\x1b\x98\x1c\xa5\x00\x8d\xe6\x25\x93\x02\x98\x65\x8b\xa4\xe8\x84\xb6\x6f\x88\xb2\x6e\x5b\x26\x22\x59\xd3\x95\x4c\x9a\x0d\x39\x35\x76\x5f\xc0\xe9\x1c\xd5\x14\xa8\x47\x79\xd0\x27\xd3\x7f\xfc\xb6\xc9\xf1\x47\xbd\xba\xce\x58\xb5\x0e\x31\xc7\x2f\xf4\x1c\x17\xcd\xad\xb7\x70\x40\x1c\xc7\x7e\x61\x60\xd8\x84\x27\x89\x18\x46\x3a\x30\x14\x1c\xdf\xf5\x39\x23\xa4\x78\x4f\x30\x79\xd2\x64\x00\x25\x07\x84\x46\x0a\x0a\x85\x8b\x00\x90\x98\xea\xa0\xd8\xc4\x70\xe5\x3e\xac\x5a\x5f\x3c\x3a\xfd\x4e\x6d\xe2\xd4\xaf\xad\x1f\x6f\x4b\x4f\x1f\x38\xfa\x4d\xb7\x91\x9f\xf4\xac\xb3\x27\xeb\xa0\x27\x03\xf9\xb4\xf1\x4e\xc5\xb6\x65\x52\x61\x29\x8d\xf0\x09\xcf\xc2\x2c\x9c\xf4\x25\x9d\x57\x3c\x0f\x73\x29\x2a\x90\xb8\x30\x24\x35\xc7\x0e\x38\x9c\x50\x78\x5b\x0a\x25\xc8\x60\x0c\x54\xde\x4d\x1d\x15\xd8\x23\x0d\xf2\xba\x5b\xcb\x64\xcc\xb4\x23\xff\xf5\x5a\xeb\xdb\x54\xa5\x87\x14\x6a\x51\x71\xe6\xb0\x5f\xba\xa4\xcb\xfb\x64\x13\xb1\x29\x7e\x46\x11\x41\xd7\xe3\x35\x46\x75\x43\x9b\x65\x1d\x57\x0f\x5d\x15\x7a\xc0\x23\x5d\x60\x32\xa6\x2d\x46\xbc\x06\xa1\xa6\x69\xbe\x2f\x53\x96\xed\x31\xa4\xa0\xc4\xa8\x25\x7a\xbe\x37\x74\x3f\xfe\xd3\xe7\x5d\x7f\x6f\xbc\xbe\xc2\xc0\xeb\x51\xc7\x1c\xeb\x3f\x9b\xcd\xde\x1a\xde\xa6\xf5\x0c\xe1\xd7\xb2\x93\x88\xf8\x71\x13\xb3\x26\x80\x16\xe5\x28\x38\x1f\x58\xb6\x24\xdb\x8a\x6e\x31\xb4\xe9\x90\xa4\xad\x05\xa4\x2a\x21\x9b\xf6\x1d\xca\xd2\x6d\xd5\xd6\x08\x52\x91\x1d\xfb\x7f\x87\x78\x31\x1a\x13\x5d\x2f\x4c\xa9\x7b\xe2\xf3\x1f\xca\x1c\x3f\x7c\xff\x48\xdf\xc2\x05\xf6\x9c\xaa\x55\x77\xf9\xae\x61\x03\x4a\x55\x68\x3c\x7c\xe0\xf6\x17\xf3\x3e\x4c\xf9\xf5\x85\x5f\x6a\xff\x78\x75\xc5\xcf\x39\x8a\xde\x4f\x04\xcf\xd5\x09\xee\xc9\xc2\xb5\xf3\x0d\x6f\x73\x72\x75\x19\x6e\x4c\x91\x13\x6f\x6f\xbd\x97\xf2\xeb\x03\x4f\xae\x6b\xa3\x5e\xde\xa4\x97\x5f\xbd\xf7\x4d\xfb\x49\xad\x67\x55\x1a\x37\xec\xcb\xd5\x21\x8d\x6a\xb5\xf9\x81\xda\xb6\x71\x63\xc5\x14\xaf\xd6\x79\xbd\x3a\x57\x7c\x78\xdd\xfd\xa9\x53\xc7\x73\xbd\x0e\x33\x35\xb3\xaf\x3e\x39\x64\xde\xfd\xa5\xc1\xb4\xce\x27\xf3\x36\xec\xda\xae\x4f\xda\xf6\x2f\x63\x66\x05\x3c\xd0\x70\x91\x53\x7d\x8a\x72\x75\x51\x63\xa3\x88\x63\x3c\x1a\x23\x55\x91\x94\x39\x59\xf4\x90\xce\x53\x62\xa4\xb9\x3c\x87\x3b\x21\x21\x02\x3a\x8c\x35\x53\x79\xd3\xff\xd8\xa8\xa3\xdf\xe4\x1a\x37\xa1\xff\x98\x12\xcc\xcb\x29\xb5\xbb\x6d\x39\x5b\x20\xa1\x62\xdd\x25\x23\xaf\x87\xad\x33\x5f\xec\x9b\x36\xa9\x8b\x98\x45\x18\x16\x40\xd3\xa7\x54\x37\x90\x31\x9f\x87\x04\x08\x03\x83\x17\x01\xa7\xbb\xa1\x63\x91\xa2\x80\x05\x01\xc7\x03\x20\x78\xac\xc6\x44\x3e\x50\x4d\x09\x4b\x05\x6c\xf6\xf9\xc1\xee\xf5\xa6\x7c\xbe\xf0\xeb\xfe\x35\x3e\x0c\xa2\xf3\xdf\xa3\x8f\x7b\x15\x3d\x78\x34\x67\xae\x1b\x4b\xd2\xad\x29\x3e\xb0\x68\x97\x1a\xf1\x2b\x75\x7d\x86\x71\x31\x29\xb2\x64\x53\x35\x35\x97\x97\x43\x27\xc2\x2c\x1b\x0f\x6c\x43\xf0\x49\x3e\x10\x43\xce\xd6\x3c\xe4\x3b\x8e\x17\xe2\x6c\xe4\x42\x49\x71\x63\x0f\xda\x2a\x8f\x7b\x6c\xe7\xe9\x3c\xaa\xda\xed\x41\xab\xcd\xb1\x64\xd1\x99\xf0\x30\xb7\xee\xbb\x29\x33\xcd\x1b\x07\xdf\x3b\x57\xef\xa3\x06\xbf\xc6\x71\x36\x28\xc9\x22\x08\x22\x42\x16\x4c\x09\xa8\x11\x61\x07\x40\xa1\x11\x2e\xe8\x0a\xa0\x90\x88\x5b\x2a\xcf\x87\x21\x04\x81\x2a\x8a\x24\x11\x06\x80\xf9\xaf\x45\xc6\xbf\xdf\x3e\xb3\xab\xcd\x0e\xb6\x8e\xfe\xa9\x78\x99\x8f\x5a\xf0\x4b\xdb\x66\x2e\x31\x38\x7d\x8f\xee\x6f\x5b\xdf\xdf\x55\x3a\x53\x96\xf7\xf3\x1e\x6c\x18\xbf\x78\xa5\x41\x33\xd4\x19\x60\x4a\xa2\x89\xab\x02\xe5\xea\xa4\x8f\x10\xd2\x49\x17\x78\x21\x2e\xc9\x5a\xa4\xe3\x12\x16\x59\xae\x8a\xa0\xa8\xe2\x98\xa4\xa5\xc6\xa7\xde\xfe\xb3\x8b\x09\x6b\xca\x62\xe5\x5f\x61\x75\x0a\x3c\xfb\xa1\x9a\xbf\xa7\x76\xcf\x0f\x7a\xdc\xea\x5f\x06\x5d\x5e\xda\xe0\xd6\xce\x57\x79\xe2\xb8\xd7\x42\x5a\xac\x65\x8a\x98\x44\x04\x4c\x14\xba\x26\x27\xe9\x48\x26\x39\x9b\x62\x4d\x93\xb4\x54\x55\x57\x00\xa9\xb2\x1a\x2f\x38\x06\x0c\x31\xd6\xa6\x1d\xf6\x5d\xb7\x1b\x7e\x96\x7f\xb8\x75\x60\xcf\x63\xe4\xe1\x19\x2f\x4f\x0d\x9e\xfc\xea\xe3\xf2\x9d\xda\xe7\xd0\xb3\x39\x5d\x8f\x36\xce\xfb\xe0\xa7\x47\x99\xe2\x48\x15\x6a\xc9\x2a\x49\x4a\x81\x0f\x08\x24\x2b\x6e\x48\xf3\x91\x44\x43\x06\x73\x29\x36\x52\xa0\x62\xb9\x8a\x2d\x3b\xb8\xcb\x5a\x48\xe5\x65\x43\x0c\x03\x5c\x79\xf7\xb8\xb7\xa7\x4e\xb8\x3a\xb9\x7d\xce\xf5\x79\x30\xa9\x7a\x96\x64\xe2\xd3\xe6\x4d\x56\xb5\xae\x77\xfa\x00\xb7\x7d\x36\x7d\x30\xe1\xa3\xad\x42\xfc\x32\x82\x4b\xb8\x80\x11\x02\x53\xf2\x01\xc9\x91\x86\xaf\xe2\xa1\x0d\x59\xda\x21\x04\x0c\x12\x06\xc0\x2d\x56\x0e\x42\x5b\xe3\x70\xde\xe0\x15\x18\x48\x66\x0a\x64\xf3\x7f\x47\xed\x84\x66\x73\x32\x4d\xed\x34\x4b\x70\x6b\xf7\xba\xf8\xd3\x96\xcd\x74\xeb\x16\x53\xf6\xb5\xac\x7c\xf1\x1c\xf1\x59\xfe\x65\xa5\x73\xf5\xfb\x22\xe5\xd7\x87\xae\xbd\xee\x93\xd0\x79\xea\x29\xb1\xd5\xce\x57\xb9\x67\xce\x38\xf0\x93\x5a\x7a\xdb\xf2\x97\x7d\x07\xe9\x8b\xa5\x26\xf9\x4e\x0e\xfd\x33\x85\xb1\x95\x1a\x96\x11\x4f\x6a\xd9\x9e\xac\x78\xeb\xb0\xc2\x8d\x78\xb5\x61\xb1\x7a\x6f\x8b\xff\xba\xe0\x67\xb7\xea\x2f\x64\x07\x96\x9f\x92\xb6\xc6\x76\x6c\x1e\x24\xd9\x83\x26\xae\xd0\x46\x20\x28\x92\x0f\x22\x8c\xf4\x02\xd2\x37\x35\x8d\xb4\x20\xcb\xb1\x22\x32\x45\x4b\x55\x43\x9c\x12\x3d\x57\xa3\x45\x3d\xf8\x4f\x3e\x4f\xe9\xce\x7d\x2e\x6d\x28\x5b\x6d\x7f\x52\xf9\x31\x3d\x1f\x3f\x05\x6b\x96\x5d\x6c\xf9\xde\x8d\x12\x6b\xee\x5e\x2e\x7d\xef\x42\xf3\x76\x3f\xf7\xf8\xb6\x54\x1c\x59\x55\x2c\x0c\x69\x36\xc6\x99\xa4\x4b\x69\x36\x92\x45\x59\xc7\x18\x53\x67\x5c\xd7\x01\x06\x81\xeb\x22\xa1\x92\xa2\xe9\xf2\x7a\x14\x9a\x8e\x67\x03\x3e\xd6\x3e\xe9\x92\xc6\x89\xa5\x7a\xa7\x6b\x26\x7e\xd2\xe5\xda\xc6\x9e\x99\xcb\x65\x49\xd7\xab\xf9\xaf\x07\x8e\x38\x8d\x95\xa0\xf0\x8b\x5a\xc5\x4e\xa4\x6d\x9f\x34\xb6\x74\x24\xc0\x31\x07\xa1\x80\xc0\x24\x8f\xf2\x71\x25\xb4\x84\xc0\x23\x78\xcb\x56\x55\x17\xe7\x0c\x47\x75\x7c\xd1\x82\xbc\x25\xe9\x50\x21\x18\x2e\x14\x31\x2c\x76\xf4\x41\x15\x86\xac\xdb\xbf\x37\xfd\xe0\x1e\xf7\x47\xec\xfc\x23\xfd\x96\xcb\x3f\xae\x7d\x3d\x76\xc0\x9e\xf1\x43\xec\xed\x5d\x0f\x9f\xd9\x39\x39\x6d\xc8\xb9\xd8\xee\x2c\x11\xc8\xf7\x34\x4c\x14\x30\x95\xc6\x05\xde\x27\x44\x4f\x30\x45\xa4\x51\x42\xa4\xeb\xb6\xa8\xd3\xa2\xe3\x3b\x0e\x6d\x43\x3c\xd4\xa0\x86\x07\xa1\xfb\xee\x0d\x7f\xf1\x4b\xd2\xcb\x65\x05\xf6\x3c\xaf\xd5\xfa\xf0\x84\x87\x59\xd6\x8e\x3c\x5d\x00\xfc\x7e\xf6\xde\x84\x6a\x15\xe8\x91\xbb\xb3\x2d\x7f\x9d\x36\xfb\x8d\xe9\xce\x3e\xce\x00\x64\x41\xce\xf5\x70\xd5\x08\x08\x0b\x44\xb2\x00\xc8\x48\x32\x55\x9c\xe1\x38\x85\xd3\x90\x0b\x14\x97\x96\x43\x29\x00\x81\x6a\x92\x00\xc8\xef\x96\xcf\xdb\x36\x96\x7d\x71\x3a\x87\xdd\x92\x6b\xa5\x15\x5d\x79\x6a\x4f\xc3\x32\x7b\xa7\x95\xfa\xae\x56\xfb\x25\x33\xaf\x95\x2f\x74\x2f\xf3\xa3\xb4\x49\x46\xc6\x76\x37\x1c\xa3\x5d\x5d\xd0\x3c\x26\xb4\x00\x09\x00\x41\x9a\x81\x65\xb3\x32\x4b\x3a\x96\xc1\x13\x61\xe0\x68\x3e\x49\xb1\x8e\x4d\xe9\x98\xc6\x3a\x30\x72\xfe\x56\x23\x59\x9e\xe5\xff\x36\xb2\x4c\x4e\x62\xd2\x67\x4d\x48\x09\xc9\x6d\x56\xaa\xda\x8a\xa2\xe5\x96\xfe\x74\x44\xf0\x12\x4b\xdc\x27\x97\xbf\xb7\xe6\x4a\x3b\xf2\x5a\xb3\x1b\x9d\xfd\xef\x3e\xd9\x9c\x5c\xcf\x8c\x63\xf6\xe2\x38\xda\x55\x4d\x87\xf4\x4c\xce\xb6\x22\x5c\x67\x74\xcf\x16\x5c\xa0\xe9\xa6\x40\x01\xc7\x93\x2c\x41\x21\x5c\x55\x96\x64\x9f\xd6\x80\x81\xdb\x38\x8c\xfd\x6a\x74\xfd\x1f\x56\x95\x04\xfc\xe5\x23\xb5\x17\xf7\x18\x7a\xa4\x48\xef\x3f\x3b\xfe\x46\xe2\x07\x6b\xb6\xe9\xdc\xe0\xab\xde\x35\x56\x6e\x2a\x16\xbf\x23\x03\x20\xe1\x50\xb6\xa1\x88\x00\x87\x79\x10\xe2\x58\x88\x4c\xc1\x0f\x30\xd7\xa6\x28\x29\x02\x96\x27\xd8\x3c\x6b\x5b\x9c\x47\x22\xc7\x30\xcc\x10\x18\xb1\x8f\x0c\xb5\xf9\xef\x37\x98\xd2\xf4\x51\xb1\x7e\x6d\x3e\x5b\x96\xef\xcb\x39\x9f\x1c\xe9\x05\x57\x9e\x5c\x55\xec\x9b\xe1\x9d\xcc\xba\xbf\xbc\x4a\x9b\x68\x46\xec\x01\x1f\xc0\x64\xd9\xd3\x5d\xdc\x71\x43\x3f\x10\x15\x5f\xb6\x30\xd6\x23\x68\x8f\x8c\x24\x82\x64\x4d\x1d\xb3\x43\xcd\x27\x30\x4a\xd2\x02\x59\xa6\x5d\xdd\x49\x85\xb4\x63\x09\x53\xe9\x68\xa9\x3e\xdf\x82\xbc\x35\xfe\x90\xbd\x32\xf3\x7f\xdb\x3f\xaf\x58\x38\xca\xfa\xec\x8e\xfd\x32\x67\x74\x69\xd7\xe2\x9a\xf1\x33\x7d\x81\x0c\x5d\x1f\x04\x0c\xe6\x79\x18\x13\xda\xa2\x19\x88\x94\x81\x23\xc2\xf6\x2c\x8f\xb2\x30\x9e\x34\x78\x08\x79\x64\xbb\x8a\x27\x1b\x9c\xea\xc3\xd4\x16\x00\xcd\x76\x7d\x8b\x56\x5e\xf7\x65\x89\x4c\x85\x33\xce\x98\x33\x62\x4b\xf9\x23\x3f\x26\x18\x9f\x65\x6d\x30\x48\x53\x5f\x54\xbd\xb6\x22\xd3\xee\x38\xd6\xba\x58\x64\x63\x3a\xb4\x58\xc7\x8d\x0c\xd2\xc6\x44\x86\x36\x2c\xdd\xf4\x42\x2b\xf0\x0c\x53\x61\x23\x5b\x31\xc4\x48\x30\x45\xcf\x92\x3d\x8d\x47\xc6\x7f\xc9\xe8\x2e\xcd\xf2\x7f\x1b\x68\x27\x37\xda\x53\x32\xa5\xaf\xf6\xfa\xa1\x5a\x8f\x6d\x5d\x7e\x9e\x25\xb6\x2d\x72\x55\x1e\x20\xbc\xd8\xf0\xfe\x8e\xc2\xeb\x6a\x6e\x69\xd4\x7f\xe2\x67\x5f\x8d\xe1\xcf\x3c\x88\x23\x35\x2d\xa5\x92\x11\x0d\x60\x20\x00\xca\x13\x00\xc5\x60\x00\x38\x90\xc7\x68\xc2\x21\x64\x1a\xd2\x06\x6d\x91\x8c\x1d\xe1\x34\x67\x47\x24\x4e\x03\xdd\x96\x63\xbf\x98\x26\x4e\xa8\x74\xe2\xc2\x89\xb1\xf0\xed\xd6\xca\x3d\xdb\x1c\xa6\x1b\x0d\xb5\xda\x2f\xce\x0a\x3b\xf4\x5f\x96\xff\xd7\xea\xaf\x0b\xcc\x4d\x9b\x16\x44\xec\x4e\xbb\xc3\x71\x22\x0e\x48\xc1\x20\x02\x5e\xd7\x7d\x51\x97\x19\xc2\x81\x18\x29\xba\x11\x8d\x14\x46\x63\x22\x8e\x21\x08\x9a\xf0\x81\x21\x49\x92\x10\x31\xa9\x2c\xa6\xd5\xb2\x76\xee\xe9\x9d\xd0\x16\x4c\x4d\x9f\x6d\xc4\x8e\x17\x97\x47\xf7\x6f\x95\xb9\xe7\x89\x0f\x2b\x97\xa9\xac\x3f\xaa\xfe\xdd\x97\x8b\xe2\x27\x13\xcc\x4a\xac\x0c\x1d\xda\x56\x7c\x29\xf2\x18\x46\xf7\x0d\x68\x33\xaa\x6f\x40\x2c\x08\x45\x49\x65\x71\x1f\x59\x82\x80\x1c\xc9\x81\x12\x6f\x58\xb2\x1c\xb0\x64\x6c\x5f\x4d\xd8\xb1\xb2\x6f\xc3\xfc\x97\xba\x77\x89\x8a\xf5\xad\xb4\x61\x57\xe6\x7b\xfd\x2e\x7c\x54\x27\x23\x68\xaa\xcd\x1e\x76\xad\xce\x57\xf3\x3b\xc6\x2f\xbc\xd8\x96\x45\x51\x86\x8e\x80\x82\x33\x98\xed\x98\x21\x2b\x22\x95\x72\x75\x86\x44\x6c\x84\x61\xac\x28\x98\x88\xa3\x90\xe0\xf3\x26\xe2\x38\x95\x22\x94\x54\xc2\x4b\xfa\xcf\x5e\x35\x78\x5e\xeb\xcd\x48\x66\xf1\xfe\xb3\x55\xae\x94\x5a\x35\x66\xea\xaa\x71\x87\xfa\x6d\x6a\x58\xea\x1e\x4b\x0c\x26\xab\xc4\x6f\x49\x81\x25\x69\x02\x20\x2b\xf2\x71\xcf\x82\xa1\x13\xf0\x82\xa5\xda\x42\x24\xd9\x9c\x8e\x87\x7c\x40\x07\x3a\x07\x02\x8c\x09\x65\x06\x98\xb2\x40\x28\x9e\x8d\xfe\xce\xac\x7f\xc1\xe7\xff\x0d\x3d\x90\xdc\x38\x6b\x42\x85\x94\xf0\xf9\xee\xe7\x16\xe6\xce\x52\xb8\x55\x96\x9a\x15\x0a\xb4\xaf\x52\xbd\xed\x98\xc3\x8f\x9a\xe7\xb9\xd0\x73\xd3\x8d\x13\xed\x86\xfc\x3a\xee\xce\xbe\xf8\x09\x64\xb3\x41\xc4\x18\x12\xc7\x92\x21\xc1\x9b\x9e\xc6\xa8\x48\x41\x2c\x0a\x29\x55\xf6\x0d\x49\xb3\x14\x93\xe5\xa0\xe3\x93\xbe\x67\x9b\x92\x47\x61\x1c\xe2\xb4\x18\x23\x85\x07\x09\xcb\xb2\xdd\xfe\xf1\xda\x67\xe2\xd0\xe9\x07\x56\xe5\xfb\xa8\xc1\xaa\x3d\xd2\x89\x32\xbb\x7f\x6f\xfe\x53\xdf\xac\x05\xba\x66\x9a\x54\x2b\x7e\xb1\x25\x0a\x58\x55\x96\x90\xa7\x23\x5c\x09\x05\x9a\x65\x22\x96\xa5\x24\x45\x83\x11\x6e\x00\x4e\x43\x42\x10\x10\x90\x75\x9d\x40\xb6\x70\x93\xe0\x81\xa8\xa1\xd8\x8e\x9a\xfd\x97\xea\xcf\xda\xe6\x68\xf5\x59\xc2\xda\x3d\x15\x2b\x70\xd9\x86\x97\x57\x26\x7e\x77\xe2\xd5\xf6\xea\x23\xce\x7c\xbb\xa5\xf6\xce\x3b\xf5\xe2\x88\x45\xe7\x4c\xcb\x71\x25\xd1\x35\x65\x80\x59\x32\x26\x0a\x3a\xc7\x22\x8f\x0c\x15\x32\x54\x6d\x86\xd6\x80\x04\xa9\xd0\x0d\x7d\x4c\x55\x02\x13\x13\x6c\x98\x4a\x03\x69\x4f\xf7\xac\x57\xe7\x96\x4f\x77\x30\xcf\xe4\x86\x7b\x33\x9e\x5a\xb4\xd5\xbd\x0e\x2f\x64\xfd\xd0\xcc\xfd\x51\xa9\xfd\xab\x0f\x66\xeb\x3f\x3b\x7e\x49\x95\x93\x75\xc5\x65\x05\x9b\xa3\x81\x2f\xb2\x88\x09\x3c\x43\xa5\xdc\x88\xf5\x39\x1a\x89\x0c\xcb\xfb\xbc\x27\x90\xb4\xce\x58\x26\xa9\x00\x5a\x67\x03\xfc\x6f\xe9\xe8\xbf\x58\x26\xff\x0d\xa3\x91\x9c\x94\x27\x7d\xfa\x3c\x29\x81\xc4\x05\x16\x37\xaf\x52\xac\xd5\xe6\x9c\x87\x96\x7a\x51\x99\x33\x6f\xb7\xdd\x0d\xab\x1e\x6f\xe4\xb7\xeb\x47\x8e\xfd\x7c\x63\x8f\x4a\x4b\x13\xe2\x17\x3d\x23\x95\x08\x91\xc6\x03\x03\x43\x8a\xaf\xd1\xb4\xe4\x98\x6c\x80\x80\xa1\x84\x21\x26\x78\x9c\x16\x01\x9b\x92\xa1\x22\x93\xa2\x85\x1c\x0d\x22\x0e\xa3\x63\x87\xa2\x56\x73\x93\x37\x97\x29\x5b\xfd\x82\xf5\xa5\x76\x63\x4b\x8f\xe9\xcb\xaa\xb7\x59\x07\x2e\x80\xcc\x4d\xf3\x7f\x98\xe1\xc3\xcb\x57\x1f\xa7\x8d\xb2\x31\x76\xcf\x49\xd0\x25\xce\x71\x1c\x4e\xd3\xd4\xd0\x37\x6d\x8e\xb7\xa9\x48\x50\x24\x5c\x75\x22\x23\xd2\x19\x1d\x73\x45\x5c\x23\x22\xdf\xb3\x2c\x9e\x10\x2d\xa8\xa6\x02\xa8\xcc\x73\xa6\x42\xb5\x19\xf4\x48\xb7\xd0\x86\x6c\xe7\xba\x8e\x2c\xf0\x75\xe9\x31\xc7\xef\xed\x3b\x5a\xf3\x6a\xf5\x7e\xd7\x57\x0e\x69\xb9\xe3\x60\xfc\x6e\x19\x33\xdc\x90\x24\x80\x69\x99\x0e\xef\xea\x91\x88\x34\x92\x02\x24\x45\x18\x12\xa6\x05\xaa\x27\x04\x36\xe4\x23\x82\xc1\x6d\xc4\x9b\x40\x0e\x18\x8a\x4b\xe5\xc8\x05\x0a\xe7\x38\xb8\x26\x57\xdf\xe1\x4d\x0e\xce\xad\xbc\xf5\xec\xfe\x4d\xb3\xb6\x2d\xc9\x10\xf4\xec\x53\x2d\x3c\x9a\xab\x7f\xc5\xb7\xd9\xd3\x26\x41\x1e\x33\xc0\x00\x15\xaa\x2e\x81\x02\x80\x11\x18\x08\x6c\xdf\xc0\x55\x05\x0f\x15\xa4\x52\x21\x61\xf2\xa1\x41\x87\x84\x1f\x59\x16\x11\xaa\x88\x45\x22\x54\xe5\x28\x7c\x67\x79\xfa\xdf\x00\x47\xc9\x8d\x13\x47\xfc\x90\x72\x79\x7a\x18\xd7\xeb\xb7\xf7\xd7\x6e\x4f\xd7\xf5\x6c\xd8\x0b\x85\xda\xb3\xfa\x74\x87\x0a\xad\xab\x95\xdd\xfe\xfe\x91\xb3\xc3\xda\x55\xaf\xb0\x3a\x8e\xf4\x87\x9c\xaf\x58\xb8\x1f\x5a\x2c\xc4\x18\xcd\xf7\xb1\xc0\x22\x01\x2b\xd0\xae\x8f\x34\xc3\xff\x9f\x3f\x06\x84\x80\x3c\x0e\x20\xd6\x12\x08\x8c\x95\x95\x54\x74\x90\x8b\x17\xa7\x9a\xf7\x1d\x9c\x65\xd2\x2b\xba\x21\xd3\xa9\xd7\xa9\x56\x37\xff\x3c\x6d\x2f\x9e\x50\x24\x9c\xd8\xaa\xe5\xf4\x29\xc9\x9b\x8b\xc4\x2f\x47\x45\x2e\x6d\xf9\x3a\xa6\xe2\x16\xed\x9b\xa1\x16\x71\x86\x20\x05\x91\x47\xda\x0a\x25\x5b\xb4\x2e\x01\xc9\xf7\x90\x60\x23\xc7\x92\x68\xc5\xd1\x48\x01\x4f\x85\x12\x16\x7f\xf6\x5d\xb3\x4a\x8d\xc6\x54\xf8\xe1\xc5\x8b\xe5\x23\xea\xcc\x7d\x4b\x3d\xec\xbc\xde\x5c\x24\x37\xe4\x96\xcf\xd7\x16\xce\xdb\x3a\x2c\x7e\x47\x66\x38\x97\x62\x20\x4d\x11\x91\x20\xca\xb2\x84\x04\x0e\x37\x69\x1a\x77\x42\x9f\x92\x78\x9e\x30\x54\x56\xf2\x41\x80\x58\x84\x74\x9e\xe6\x14\xc2\xe2\x9d\xd8\x47\xfe\x55\x94\xdf\x36\x79\x38\xbd\x4b\xcf\x6d\x25\x5b\x64\x22\xf7\x6d\x7d\x7b\xfa\xd6\xa6\x63\x73\x06\xb4\xdf\x55\xa9\x69\x47\xb7\x7a\xb3\xfc\xf1\x0b\xfa\x94\x45\x91\x9e\x63\x63\x22\xf0\x15\xda\x11\x05\x59\xa2\x59\x20\x47\x3e\x47\x49\x14\x21\xc9\x9c\x08\x59\xc1\xa0\x7d\x41\x40\x38\xd0\xc3\x50\x17\x10\x11\xfb\xc8\xf2\x82\x25\x73\xc7\x2e\xab\x39\x33\x43\x87\x39\x3b\xa6\xd4\x5e\xd2\xf6\xfe\xba\x4d\x99\x9a\xe5\xcf\x32\xf5\xfe\x8c\xeb\x97\x7c\x6f\xcf\xdb\x38\x52\x60\x84\x38\x61\xd1\x9c\x40\xba\x2e\x4f\x06\x38\xa9\x6a\x2c\x62\xe8\xd0\x76\x35\x89\x04\x98\x06\x4d\x0e\x50\xa1\x09\x11\x01\x48\x49\x32\x42\x23\xfc\x0f\x43\xfc\xbb\xb6\xbc\x31\xf9\xc9\xdc\xca\x1f\x0e\x5a\xdf\x62\xee\xa2\xbd\x5b\x77\x7d\x9b\x70\xe8\x62\xbd\x8f\xf2\x75\xc9\xf2\xf4\xe0\xa6\x1a\x87\x8e\x55\x79\x7d\x2c\x8e\x8d\x62\x89\xf0\x11\x26\x12\x26\x80\x64\x10\x3a\xa4\xc3\x08\x7a\xa8\x38\x38\x62\x74\x2d\xf0\x98\x08\xb2\xa2\xc0\x31\x81\x20\xe1\x3a\x21\x59\x34\x43\x81\xbf\x89\x00\xfe\x2a\x28\xff\x6d\x68\x98\xdc\xf8\xa3\x84\x8c\x29\x17\xd3\x86\xbb\x8b\x96\x3f\x6c\x9b\x75\x40\xfd\x8b\x87\xd6\x3c\x6e\xb6\xaf\x9b\xf0\xf3\x99\x7e\xfb\x6e\x24\x1d\xfe\xbc\xd5\xd1\x39\x9b\xbb\x2e\xbe\x15\xbf\x98\x4f\xcb\x1e\x4b\x21\x55\xd1\x65\x11\xe1\x21\x63\xb2\x22\x16\x05\x9a\x10\xca\x56\xc0\xf3\xaa\xab\x48\x3e\x86\x87\x96\x6a\xd0\xd0\xd1\x44\x01\x46\x4a\xca\x05\xc7\xbf\x6b\xe0\xc4\x6d\x85\x0e\x24\xf7\xdd\x58\xf6\xcf\xd5\x03\x6a\x58\x99\xae\x0f\x38\x30\xb6\xfe\xf7\x59\x56\xe6\xff\xb5\x9f\x4d\x2d\x3a\x98\x7f\xc6\xe2\x38\x16\x95\x0c\x22\x2d\xcb\xd2\x5c\x16\x83\x01\xc5\xe9\x84\x6e\x9b\x01\xc4\x18\x8e\x96\x02\x24\xea\x8c\x45\xb2\x21\x67\x72\xb8\x1c\xd0\x1a\x81\x01\x5e\xc6\x84\x77\xbb\x7d\x77\x57\xcd\x4a\x4f\x1d\x27\x7e\x9e\x32\x72\x67\xbb\x2e\x09\x77\x72\xd7\x3a\xfa\xe5\x8a\x28\xaa\x91\x65\xc2\x47\x05\x3b\x27\x6e\x68\x90\xb6\x2e\x4d\x4c\x47\x95\x0d\x19\x33\x84\x00\x33\x7d\xc8\x92\x3a\x21\x60\x2a\x41\x45\x9e\x2f\xd8\x9a\xca\x00\x17\x0b\x4c\x5b\xe3\x01\x26\x05\x8e\x6e\xab\x1e\xce\x18\x11\x1b\xc6\x76\xd4\x3f\x60\x67\xb4\xf5\xcc\x84\xfc\xf5\x7f\x69\x75\xee\xbb\x9f\x5b\x3d\xa0\xbf\xdf\x59\xb4\xe5\xe2\x76\x1f\x4d\xad\xdc\x6d\x41\x58\x6f\xc5\x9a\xf8\x85\x43\xd1\x10\x45\xd6\xf2\x5d\x05\x62\xae\x69\xbb\x1a\x80\x96\xe2\x28\x50\x70\x03\x57\xd1\x18\x55\x87\x4a\x48\x40\x46\xe7\x39\xd7\xc2\x70\x24\x43\x64\xff\xcd\xe2\xf9\xd7\x62\xda\xbf\x0d\xbf\x93\x1b\x17\x4e\x18\x98\xb2\x9e\x3c\x4d\xeb\x9d\x87\xcc\x5e\xa6\x8c\x48\x14\xc7\x94\x79\xbe\x2f\x5d\x95\x37\xd6\x6f\x2b\xe7\x67\x29\x65\x24\x8a\x97\xbe\x6f\xb4\x26\x7e\x40\x1c\x56\x92\x91\x65\xb1\xa2\x2e\xba\x80\xf7\x08\xd7\x8c\x18\xcc\x8b\x28\x1a\x33\x39\x3b\x14\x31\x39\x0a\x79\x8d\xd4\x0d\xda\xd6\x1c\xd9\x12\xd4\x50\x65\x80\x1e\xfb\x37\x79\x32\xac\x73\x83\xe9\x7b\x66\xe7\x75\x7e\xeb\x36\xf1\x96\xf0\xd2\xbb\x33\xed\x68\xa3\x49\x45\x92\x9e\x2c\xe6\x7e\x18\x76\xf3\x7c\xf1\x0c\x71\x5c\x06\xa1\x48\xc8\x2b\x16\x29\xd1\x12\x83\xa9\x48\x14\x25\xcd\x08\x6c\x2f\xe2\x1c\x89\x50\x1d\x91\x89\x04\xcb\x61\x31\x9e\xb4\x3c\x8f\xb5\x0c\xce\xf2\x52\x48\x93\xfd\xd7\x91\x8b\x54\xee\x5b\xa5\xf2\xaa\x2d\xf5\xce\xaf\xcb\xf1\xe7\xc3\x91\x2b\x93\xea\xe6\x42\x65\xe7\x36\xc9\xd8\xe7\xdb\x2e\x33\x0f\x4c\xaf\xdc\x2c\x31\x7e\x25\x30\xeb\xda\x12\x09\x49\x2d\x52\x81\x10\x58\x5a\xe4\xd2\x44\x64\x49\x22\xab\x22\xd9\x90\x64\x07\xe7\x30\xd9\x61\x28\x18\xf8\xae\x42\xc9\x82\x2c\x80\x14\x22\x3b\xff\x4d\x2a\xbc\x2e\xb1\x65\xc3\x19\x87\xaf\xb6\x58\x36\x38\xf7\xc2\xcd\x72\xc2\x57\x63\x5e\xac\x12\x1f\x99\x95\x96\xbf\x19\x90\xf7\xbd\xe6\x5d\xad\x38\x92\xed\x45\x12\xe1\x29\x9c\x10\x68\xaa\xa4\x59\x34\x6f\x7b\x0e\x2b\xf8\xb6\xc3\x13\xa6\x09\x80\x84\x18\xc6\x30\x18\x1b\xf9\x90\x92\x4c\x96\xa1\x8c\x10\xfe\x1d\x0e\xff\xda\x44\xfe\x37\x20\x47\x72\x52\xba\x92\x19\xff\xc1\xd0\x3b\xe8\xe9\xde\xa9\x6d\x67\x7f\x8a\x7f\xe6\x96\x9b\x0a\xb5\x7b\xd7\xab\x30\xa5\x3e\x38\xf0\x05\x54\x8d\xcd\x41\xfe\x65\xdf\x5f\x79\x11\xbf\xff\x50\x06\xa6\x23\xe0\x92\xea\x8a\xac\x2e\x7b\xc0\x13\x00\x67\x38\x01\x02\xb2\xc0\xa9\x21\xcb\xeb\xba\x0a\x2d\x29\x20\x55\x48\x85\xa1\x20\x4a\x2a\xf8\x8f\x70\x56\xca\xd1\xce\x6c\x7f\x5e\xd7\x39\x9b\x0b\x9f\x3b\x5e\xbb\x48\x9b\xd1\xa7\x4f\xec\x9c\xf5\xe5\xcc\x55\xa3\x7a\xe7\x58\xdc\xba\xc2\x1e\x31\x5d\xbf\x7d\x95\xe2\x48\x4c\xad\x11\x3a\xa1\xf2\xb4\x81\x91\x0c\x08\x03\x47\xb0\x48\x10\x22\x24\x99\x32\x1b\x99\x11\xe5\xb2\x98\x8d\xd3\x5a\x28\x49\x2e\xf2\x28\x45\x8d\x48\x98\x0a\x53\xc6\xf9\x9f\xcd\xa4\xcd\xa5\xae\xf7\xbe\x1c\xb4\x1f\x3b\xf8\xfe\x1f\x37\xab\x35\x18\xda\xb0\xf7\x82\xc5\x1b\xaf\x94\x5b\x5a\x78\x4b\xfe\x55\x69\x63\xfa\x8a\xdd\xa3\x11\x35\x03\xd3\x75\x97\x70\x50\x88\x61\xa4\x0e\xc2\x10\xe8\xb2\xc5\x2b\x28\xd0\x6c\xd6\x00\x08\x58\x6c\xa4\x20\xcd\xd1\x20\x23\xe3\x86\x60\x47\xa9\xec\x7a\xf3\xf8\xaa\x17\x59\xa8\x51\x1f\x59\x39\xf3\xa4\x57\xba\xee\x2c\x91\x08\xde\xd6\x3b\xfc\x75\x0f\x30\x6b\x70\x93\x66\xa0\xca\xfd\xb4\xa1\xfc\x62\xa6\x54\x3c\xe4\x58\xcd\x37\x3c\xdf\x32\x5c\xce\x23\xe8\x80\xe5\xd8\xd0\x96\x58\x36\xc4\x7d\x0d\x0b\x29\x4d\xb3\x64\x1c\x44\x3c\x54\x22\x23\x70\x08\x12\xaa\xce\xff\x9f\x52\xff\x0a\xf8\xff\x36\x09\x4f\x6e\x2c\x67\x4c\x48\x19\xf0\x3f\xe9\x5f\xe9\x4c\x99\xaf\x33\x9f\xdc\x2d\xbf\x47\x09\xbd\x73\xd4\xb8\x4f\x94\x5e\xb2\x79\xce\xe1\x72\xb7\x57\x3f\xac\x67\x0f\x4a\x97\xb6\xe8\x19\xbb\x97\xc9\x88\xa1\xa5\x00\x04\x0c\x3d\x94\x25\x0f\x49\x0c\x25\x19\x98\x27\xd2\x8e\x49\x13\x26\xd4\x90\xee\xa9\xb8\x40\x30\x46\xa4\x51\x98\x04\x29\x15\x4b\x65\x20\xb5\xf7\x72\x9f\xb2\xc7\xb6\xf6\x29\x3a\x88\x1e\xd2\x6d\x58\x7f\x66\xe2\xb6\x72\xeb\x37\x7c\xf1\x64\xf7\x92\x16\xbb\xda\xbb\x13\xaf\xe4\x8a\xe3\x7e\x81\xcf\x52\x91\x60\x84\x24\x2d\x23\x1b\x22\x12\x90\x3a\x43\x07\x38\x88\x5c\xdf\x09\x22\xc7\x77\x74\xcf\xd2\x0d\xca\x0b\x44\x86\x55\x18\xcf\x70\x05\x87\x8b\x6d\x46\xc3\xcf\x3c\xbb\xd8\x64\x47\xd5\xf5\xe5\xe7\xff\x7a\xb8\x6a\xdd\x3c\x4f\xc4\xa4\x6f\xaa\x2e\x7d\xdf\x9a\x47\xd6\xc8\x9e\xa5\xf7\xc0\x62\x71\xe4\x8f\xa5\x25\x8b\xa3\x43\x17\xe2\x34\x81\x24\xd7\x97\x38\x17\xb0\xba\x29\xf8\x1a\xab\x06\x9a\x19\xf8\xbc\xef\xf8\x88\xf7\x18\x59\xf0\x44\x5f\x16\x14\x3d\x4a\x05\x92\xbb\x7e\x6b\x13\x98\x49\xc0\x16\xf9\x55\x7a\x9b\x2b\x7b\x82\x22\xbf\xed\x5c\xf9\x6d\xdd\xad\xed\x3e\xc8\xaa\x55\x2a\xdb\x7a\x4f\xfe\x20\x7e\xb7\xec\x71\xb4\xa9\x23\xd7\x13\x2d\x8a\xe6\x43\x85\x51\x6c\x2c\xc2\x89\xd0\x02\x9a\x86\xbc\x90\xb1\xdc\x50\x35\x64\x8f\x12\x48\x82\x51\x34\xc9\x22\x5c\xf8\xb7\x4e\xda\x5f\xf4\x8e\xff\x86\xea\x48\x4e\xca\x94\xa7\x64\xb6\x94\x1d\x84\x3a\x74\xf2\xae\x6c\x87\x3b\x5e\xdd\x7e\x75\xd8\xe1\x5b\x7d\xf6\x12\x53\x16\x54\x7b\x7f\x64\x97\xd2\x33\xb6\x54\x29\x39\x36\xd3\x9d\x65\xd3\xe3\x38\x72\x73\x01\x88\xe4\x48\x34\x0d\xc9\x11\x49\xe8\x46\xb4\x60\x99\x34\x60\xa1\x41\x06\x34\xef\x07\x0c\x2e\x63\x00\x67\x21\x34\x42\xc1\x67\x01\xad\x87\x72\x6c\x3b\xea\x27\x77\x3d\xf7\xa4\x74\x3a\xc8\x0c\x79\x5e\x63\xce\x9f\x77\x6f\xdf\x2c\x35\xb0\xd4\xaf\x9b\xf3\xf7\x65\xf3\x97\x51\x5e\x3b\xdd\xd2\x26\x9e\x1d\x9b\x30\x1c\x05\x8a\x48\x7a\x8e\x2c\xa9\x6c\xc4\x52\x0a\x85\x49\x94\xa4\x69\x30\xe2\x6d\x17\x28\x1a\x25\x7a\x62\xc0\x13\xb4\xc3\x18\x92\x87\x31\x91\xc8\xf0\x6c\x6c\x6f\xfd\x6a\xdd\xf8\x13\x27\xbf\x0e\x9a\x5f\xc2\xf6\x8b\xdb\x84\x4b\x5b\x37\xbc\x39\xf3\xfc\xfa\xfc\x5b\x3b\x32\x4e\x1b\xb6\xba\xc7\x2f\x55\x67\xc6\x2f\xc0\x18\x28\x10\x49\x2f\xb2\x70\xdc\x25\x69\x8f\x31\xd8\x50\x22\x74\xc1\xf0\x02\x4f\x09\x4d\x2f\xc2\x22\xd2\xf4\x5d\x05\x05\x14\xae\x44\x06\x66\x8b\x01\x96\x4a\x9e\xba\x9e\xef\x9b\x9b\xd9\x4a\x9f\xfb\xb9\x51\x72\xdd\xdd\x87\x8a\x56\x2b\x3d\x66\x63\x8b\x03\xdb\xb7\x8f\x0c\x27\x75\xde\x30\xfa\xfd\xd9\xa3\xe2\x57\x51\xb2\x84\xac\x12\x02\x85\x59\x98\x22\x4b\x8c\x11\x29\x78\xe8\x99\x92\x04\x05\xc2\x64\xa0\x23\xe2\x01\x1d\xb8\x80\x27\x09\xcd\x36\x25\x53\xa5\x44\xd7\x49\x8d\xcb\xac\x4b\xeb\xef\x4e\x0c\xed\x30\x66\xfc\xd1\xa6\xc5\xd3\xaf\x6a\x93\xe3\xee\xb8\x55\x83\x16\xed\x59\xbf\xe4\x8f\xfa\x63\xb7\xd7\x5c\x37\xb7\xe3\x8a\xf8\x1d\x59\xb1\x38\x2b\x88\x78\x93\x94\x71\x9e\xc2\x35\x28\x68\x6e\xc8\xda\x44\xe4\xf3\x88\x41\x86\x1d\x52\xa4\x85\x31\xba\x0b\xb0\x90\xc6\x29\x1c\x52\x5e\x6a\x00\xfa\x72\x59\x1e\x16\x3b\xf7\x4b\x95\xb6\x43\x3b\x57\x9b\x5d\x75\xda\x9e\xc1\x82\x70\x3a\x6b\xe6\x5f\xfd\x87\xde\xf8\x4f\x3f\xeb\xbe\xa9\x61\xda\x04\xdb\x62\xba\x9f\xe2\x19\x0c\x8e\x47\xba\x00\xa0\xed\x9a\x10\xaa\x8a\x09\x49\x18\xaa\x26\x25\xeb\x32\x61\x39\x1e\xc6\x0a\x11\xa2\x65\x17\x04\x3e\x4d\x39\xb4\x86\xfd\xfd\x96\xba\x49\xfe\xe7\xb4\x8b\x4a\xed\x3c\xbb\xea\xf2\x67\x0d\xf0\xdc\x7f\xcc\x29\x53\xea\xa3\xf5\x89\x3b\xd6\x2d\x34\x5b\xd7\x52\xb2\x56\xbb\x99\x79\xf1\xda\xdd\x35\x93\x93\xde\xbe\x7d\xfb\x76\x5a\xc9\x94\x60\x33\xf2\xc1\x0b\x73\xff\xe2\xb3\xf2\xd9\x9c\xd5\xef\xaf\x13\x07\x7a\x3f\xae\x9e\xba\xef\xe7\xd1\x0f\xef\xde\x9f\x76\x76\x55\xd1\x9a\xfd\x0b\xa4\xfc\x3a\xc3\xee\xcc\x0b\xe6\x95\x9f\xf9\xdb\x5d\xe3\xda\xac\x41\x37\xff\x68\xbe\x74\xe3\xb5\xa2\xd3\x7f\x5f\xd8\x71\x50\x95\x8c\x97\x0f\xb5\xbc\xb6\x3e\xe5\xd7\x5f\x65\x4f\xee\x73\x51\xc1\xa7\x5f\xca\xfc\xe9\xe6\x8f\x5a\xe5\x7d\xda\xc2\x5c\xd8\xe3\xf4\xb8\x49\x59\x5f\x62\x3d\xa9\xd7\xf5\xba\x6d\x4c\x81\x5b\xfa\x70\xeb\xec\x4f\xca\x10\x7d\xbf\x0d\x06\xbe\x7e\x79\xf6\x62\xf6\x62\xdd\x4a\x0e\x28\x77\xb9\x57\x52\x86\x3f\x16\xfd\x5c\x3f\x53\xe9\x8b\xf1\x53\x5e\x61\x44\x4c\x82\x00\xb9\x04\x0c\x02\x97\x97\x5d\x53\xb2\x3d\x96\x35\x58\x1f\x73\x4c\x07\x69\xae\xe5\x30\x86\x4f\xb2\xa6\xe6\x49\xa1\xeb\x47\xbe\xc7\xab\xc2\xbb\xe3\x31\x66\xd9\x79\x7b\x41\xcf\x3b\x63\xde\xaf\x78\xbd\x40\xe3\x3d\xf7\xff\xd8\x38\xe4\x46\x93\xda\x97\x7f\xc8\xd9\xb9\x7c\xa1\xe6\xd3\xa5\x49\x65\xe2\x67\xce\x96\x62\x63\x48\xd0\x3c\xce\x73\x69\x96\x91\x74\xdc\xa0\x4c\x55\xa6\x30\x43\x12\xc8\x88\x25\x49\x22\xd2\x75\xc3\xc1\x89\x80\x21\x65\xd2\xf2\x11\x08\x63\x6c\x04\x7f\x75\xed\x45\xd2\x9e\x99\x43\x47\x5c\x79\x52\xe6\xe1\x66\xab\xe4\x6f\x4d\x96\x37\xd8\xbf\xe3\x6e\xdd\x12\xbb\xab\x1e\x9b\xd9\xbf\xf3\xa7\x43\xe3\x17\xe3\x38\x5c\xb4\x4c\x52\xe6\x42\x47\x09\x28\x8c\x42\xac\xe9\x12\x88\x96\x2c\x96\x76\x48\xc5\x15\x29\xce\x84\x08\xa3\x02\x4c\x72\x29\x4d\xc0\x30\xda\x8b\x52\x99\x0f\xec\x76\x2b\x36\x6f\xd7\xa9\x1d\x2b\xbe\x11\xfd\xfe\xbb\x1a\x34\x1c\x79\x4a\x9c\xb0\x63\xf2\xdb\x8a\x8d\x6b\xd5\xed\x77\xa5\x41\xd1\xb4\x85\xe5\xd8\xf2\x64\x86\x4b\x60\x32\x27\x2a\x14\x94\x7c\x0c\x10\xb6\xc9\x50\x24\x1d\x10\x98\xc2\x09\x88\xb1\x7c\x87\x34\x6c\x1a\xe9\x46\xa0\xe1\x16\xe2\x23\xcd\xf8\x8f\xd6\x57\x8c\x25\xe6\x0e\x4b\x6f\xb6\xad\xf4\x7d\x42\xa9\xf1\xdb\x8f\x66\xb4\x7e\x6f\x6e\xe9\xd2\xa9\xf1\xd7\x07\x54\x5d\x3f\xfa\x54\xaf\xe6\x35\xf1\xaf\x7f\x4a\xf1\x0f\x16\x2b\x51\x69\xe1\x9c\x4a\x6f\x9a\x16\xba\xb8\x02\x3b\xb2\xe0\x40\xd7\x95\x63\x5e\x65\x7c\x5b\xfe\xfb\x96\x55\x9b\x07\x1f\x54\xbf\xfd\x60\x78\x1c\x79\xcb\x59\x46\x17\x48\x8e\x75\x11\xa2\x21\x6f\x68\xbe\x84\x03\xda\xd3\x88\x10\x7a\xaa\x2b\xf9\x01\xe5\x86\x21\x08\x34\x49\x45\xa6\x61\x73\x08\x31\xb6\x9c\x10\x5b\xc8\x76\x75\x8b\xcc\xfd\x87\xf1\xbf\xe5\xba\x58\xa7\xd1\xfc\x3c\x2d\xa6\x9f\x6e\x3c\xe6\x5a\xf7\x52\x99\xc7\x1d\xcf\x76\xf6\xd7\xf7\xf7\x3d\xdb\xeb\xa4\x70\xe9\xdc\x4d\x4e\x52\x6f\x6a\xb4\x39\xdb\x58\xed\x76\xaf\xd0\x9c\x33\xbb\x98\x15\x4d\x07\x74\xed\x73\x7c\x79\xfb\x2f\xab\xac\xf8\xf9\xc6\xc8\x87\xf1\xab\x05\x6c\x96\x0e\x90\xe8\x47\x82\xae\x79\x21\xb0\x23\xdb\xc7\x54\x1b\x1a\x38\xcb\xf2\x21\x0d\x14\x5c\xf6\x25\x20\x41\xc1\x06\x98\x29\x08\x4e\x40\xe9\x80\x7c\xf7\xbd\x5a\xf6\xfd\xee\xbf\xfc\x52\x22\xe3\xd7\xdb\x94\xdf\x16\xf7\x29\x71\x64\x99\x52\xaf\xf6\xeb\x7a\x27\x2e\x9c\x1f\xbe\xa6\x40\xf1\xef\xbb\xf6\x4c\x1b\x36\x35\xf6\xce\x9f\x4c\x85\x36\x61\xb2\x0c\x83\x08\x3b\xf2\xd8\x48\xc1\x04\x4f\x50\x0d\x10\x88\x9a\x69\x21\x51\x52\x1d\x60\x22\x9a\x34\x04\x8c\x35\x02\x85\x44\xb1\x90\xf1\xd2\xc0\x1a\x15\x9a\x14\xaf\x52\x2c\x6c\xbb\x58\x01\x7f\x84\x75\x16\x16\xe9\x54\x92\x6d\xd0\xe3\x41\xfd\x23\x57\xd2\xfd\xf2\xf3\x07\x15\xe2\xd8\x55\x02\x18\xef\xda\x46\x80\x5c\x41\xa2\x70\xcd\x12\x24\x08\x54\x81\x14\x43\x44\x6b\x91\x2f\x02\x3a\x54\x55\xdf\x21\x7c\x3b\x20\x6d\x57\x46\xaa\x0c\x41\xec\xdd\x83\x89\xb3\x5f\xf5\x9c\x55\xa4\x7f\x9d\xcc\xdb\x1f\xe4\xcb\x5c\x33\xfb\xfa\x47\xbf\x32\xa5\xb3\x2f\x49\xfa\x2d\x47\x96\x17\x97\xf7\xcd\x28\x48\xc4\xcf\xa5\x29\xdb\x54\x5c\x46\x92\x9d\x40\x57\x4d\x35\xf4\x19\xe4\x45\x3a\xce\x53\xba\xc8\x3b\x74\x60\xe9\x14\x0e\x7d\x02\xf3\x70\x52\xe2\x49\x56\xe6\x24\xc6\x8e\x01\x81\xb8\xf3\x6c\xde\x70\xb9\xfa\x95\xb9\x09\x9b\xc6\xd4\xcd\xf0\x34\x5b\xe9\x31\xce\x5c\xe1\x41\x30\xff\xf5\xc2\x0e\x97\xdf\xd4\xf9\xe8\x4a\xdf\xf8\xbd\x89\x1c\x02\x69\xbc\x69\x5b\x0e\xcb\x9a\x2c\x24\x29\x00\x3c\x8e\xe7\x34\x44\x09\x0a\x46\x79\x72\xa8\xe2\xa6\x04\x42\x3a\x40\xbc\xc0\xf2\x28\xc4\xc2\x94\x58\xa5\xbf\x6f\x18\xfb\xb1\xda\xa7\x63\x6b\xbd\xec\x3d\x64\xd6\x88\xdf\x3e\x4d\x28\x44\x9c\xfa\xf3\xeb\xcd\x0f\x46\x8e\xfe\x72\xbd\x7d\xbf\xf6\x4f\xf7\xbf\x4b\x9b\x4c\x55\xec\x9e\x4b\xe8\xe1\x9a\x46\x53\xb8\x83\x48\x4e\xc6\x6c\x92\x97\x81\x48\x19\x38\xc7\x48\x06\x05\x1d\x96\x70\x90\x6c\xeb\xa4\xce\xd1\x11\x82\x9c\x29\xf9\x8e\xfd\xae\xcb\xad\x2d\x3b\xa3\x5d\x71\x73\xc1\x8b\x5b\xb0\xd8\xf3\x39\x49\x3f\xd8\x07\xa6\xec\xdd\xf2\x98\xfb\xbc\x5b\xe7\xa7\xad\x8e\xb5\x1f\x14\x4f\x38\x38\x1e\x1a\x2c\xe9\x48\x14\x45\xeb\xc0\x26\xc5\x48\xf1\x02\x0b\x63\x2d\x5f\x52\x4c\xd6\x67\x30\xa4\x53\x8c\xac\x47\x08\x23\x09\x5f\xc1\x5c\x0d\xa9\x9a\x98\x4a\x08\x1c\x7c\xe7\xc0\x9b\xec\x95\x9f\x3c\xdb\x75\xcd\xa8\x80\xee\x6d\xe8\x32\x22\x47\x63\xcb\x56\x73\xe5\x1e\x70\x20\xb0\x33\x8f\x2a\xf8\x71\xca\xaf\x37\xdd\x2a\x3f\xee\xe7\xf6\xcf\xac\x5e\xdd\xe8\xfa\xe9\xcb\xf5\xba\x85\xb8\x91\xab\x7b\x2e\x1c\xba\x34\x5f\xad\x12\xd9\x66\x66\x5c\xe0\xa7\xfc\xfa\x8b\x43\xdd\x26\xe5\xfb\xa5\xd5\xf2\xfb\x93\xe6\xdf\xf9\xa2\x4a\x90\xfb\xee\x86\xef\x8e\xd4\x29\xcc\x8f\x4f\x6a\x56\x7b\xc1\xd5\x96\xea\xda\x7f\xa8\xbc\xe7\xdb\xde\xab\xef\xe5\x36\xb9\x4d\x73\x5f\x68\x5e\x3d\x5d\xc4\xff\x34\x6f\x9d\xe5\x5f\xfc\x54\x24\x4f\xd6\xc2\xdf\x15\x37\x9f\xe4\x4d\x91\x6d\x7e\x2f\x1a\xdd\x1a\x81\x7d\x3e\x7e\x59\xe1\x8d\x65\xdb\xff\xda\xee\xbd\xf2\xc5\xf2\x5c\x3a\xde\xa1\xd7\x85\xc2\xf5\x2f\x24\x9c\x1e\x50\x3d\x6d\xfa\x81\xb1\xa9\xbc\x29\xca\xd4\x15\x81\xb4\x42\x47\x0e\x04\x03\x27\x02\x0f\xb9\x98\x47\xe8\x78\x80\x73\x76\xe4\x84\x14\x03\x69\x9e\x61\x42\x4f\xf3\x1c\x47\x90\x31\x55\x89\xbd\x5a\x59\xac\xde\xb8\x5c\x85\xd3\x81\x8e\x1f\x3e\xe9\x97\x0e\xfa\x2a\xf7\xe3\xb2\x7b\xcf\xfb\x5d\xe9\x74\xb5\x61\x86\x63\x55\xd7\x14\x2b\x8c\xe2\xd7\xda\xe2\x5d\x85\x66\x0d\x4a\x87\x0a\x2d\x79\x16\xf0\x09\x85\x02\xac\x4c\x0b\x88\x37\x68\x9d\x14\x58\x5c\x42\x82\xed\x7a\x24\xa2\x19\x4c\xd4\x4c\xce\xc7\xad\x77\xa7\x45\xca\xcd\xc6\xab\x13\xd7\x9c\xc0\x73\xa2\xc4\x5f\x8e\xec\x9d\x57\x23\xe3\xa2\x2f\x0a\xbf\xfd\xf4\x00\x5b\xe7\xc0\x4d\xe5\xa3\xb1\x75\x36\xc7\x71\x12\xad\xf2\x24\x04\x8a\x2b\xe2\x9c\xcb\x98\x1c\x19\x61\xb2\x18\x02\x06\x0f\xa1\x07\x38\x4a\x53\x7d\x91\xa4\x70\x96\x0d\x2d\xda\x88\x38\x03\x77\x49\x36\x46\xfe\xb8\x7a\x2e\x5b\xb1\x8f\x97\xe7\xd8\x3b\x61\xb4\x79\xef\x75\xf6\x4a\xfb\xdf\xa8\xf3\x3a\x9c\xaa\x96\xf1\x97\x4b\xeb\x8a\x2d\xed\xbe\x78\x41\xda\xe4\x77\x62\x93\xd7\x1b\xba\x14\x50\x08\x4a\x11\x62\x35\x9e\x25\x05\xde\x50\x14\xc8\xa8\x1c\x21\x07\x9a\x21\xea\x3e\x2d\xcb\xb8\x4d\x62\x36\xe1\xd2\xa1\x88\x61\x1e\x90\x53\x59\xa4\x11\x9a\xce\x9c\x3e\x79\x38\xdb\x6c\xe6\xfc\x67\x27\x7b\x9e\x5f\x8d\xa6\x6b\xcb\x37\x6d\x14\x36\x7f\x92\xee\xe4\xe8\x66\x33\x8a\x97\x5d\x9d\x52\xc1\xf7\xd9\xc3\x2f\x8a\x4e\xef\x37\x64\x71\x95\x17\x02\xff\x5d\x6b\x75\x4b\x72\x8e\x3e\xbb\xea\x6d\xeb\x37\xf0\xcf\x32\xe7\x8c\x1e\x6f\xd3\xd6\x1f\x8a\x5d\xf3\x6a\xa1\x6a\xd0\x9c\x2a\x63\x0e\x2d\x45\x12\x41\x49\x4e\xe0\xf3\x8c\x8c\x45\x3a\x2f\x73\x9c\x0b\x31\x8d\xe2\x0d\x55\x96\x09\xd9\xe0\x58\x4c\x85\x2c\x88\x3d\x1f\x2d\x3f\x56\xff\x49\xe8\x34\x83\x0e\x56\xf5\xc8\x30\x67\x41\x89\x2d\x1c\x9c\x10\x5c\xef\xf1\x64\x72\xc3\x1a\x45\xb6\x2d\xc8\xf6\x53\x1c\x13\x24\x23\xe2\x24\xb4\x69\x85\xe0\x30\x9a\x16\x71\x64\x2b\x38\x4e\x82\xc8\xc1\x5c\x02\x72\x0c\xe0\x25\x8f\x95\x65\x40\xdb\xa6\x47\x10\x0e\xc3\x4a\x3a\x1b\xe3\x11\xd4\xac\x54\x97\x89\x6a\x8f\x89\x4a\x8f\x27\x73\xa7\x8f\x6a\x5d\x27\x4b\xf1\x69\xc3\x86\x5c\x28\x50\xb5\xf9\xe4\xfa\x09\x5b\x97\xf6\xea\xb6\x28\x7e\x25\x88\x1e\x44\x21\xc6\x47\xa2\x1f\x49\x38\x45\x41\x0a\x21\x26\xe2\x64\x91\x13\x6d\xc1\xb1\x21\x30\x59\x87\xe6\x4c\x13\x83\x2c\x64\x68\xc0\xd8\x04\x72\xf8\xd8\x6f\xfa\x97\xdf\xbe\x7f\x32\x03\x99\x9c\xf4\xe4\xf6\xae\xa7\x57\xa4\xe7\x95\xf7\xbd\xfd\xdc\x1b\xbd\xb3\x1c\x96\xe3\x4e\xc2\x8d\xc4\x9f\xdf\x4b\xdb\x04\x3a\x66\xc6\xf1\x44\x4f\x61\x15\x39\x10\x68\xc9\x96\x21\xcf\x40\x35\x54\x4c\x8f\x0c\x01\x17\x18\x84\xa7\xf9\x34\x09\x3c\x56\x33\x43\x96\x0e\x00\xc1\xe3\x76\x60\xa7\xb2\x4f\xa8\x9c\x9b\xfa\xc5\xd7\x55\x76\x57\x1d\x10\x66\x7e\x2b\x1c\x52\xcb\xa3\xe2\x6d\x27\x14\x38\xbf\x1a\x3a\x9d\x5f\xae\x1b\xd0\x39\x4a\x5b\xe7\x24\xe6\x91\x4d\x96\xb4\x7d\x11\x43\x1e\x0b\x25\x49\x17\x5d\x14\x90\x90\x0b\x7c\xa0\x18\xba\x27\x22\xcc\x24\x25\x42\x89\x58\xcb\x93\x79\xd9\xd2\x64\x02\xf9\x3c\xf3\x6e\x4e\x3f\x7d\xf3\x71\xb1\x84\x51\x75\xbb\x4f\x6b\x56\xf3\xc8\xe1\x61\x65\x72\x3e\x5a\x60\x76\x49\x9e\x98\xab\x4f\xf9\x7e\xfb\x95\x4f\x16\x6a\xc9\x71\x9c\xa1\x10\x8e\x87\xe1\x2a\xe1\x09\xbe\x40\x46\x84\x6c\x32\x8a\xe2\x46\x6e\x28\xd3\x98\x64\x0a\x9c\xa5\x86\x81\x83\x08\x87\xf5\x43\x2c\x44\x16\x0d\xe4\xff\xd0\x11\xa6\xb4\xe1\x27\xf7\xaf\xb1\x0b\xaa\x15\x7c\xdc\xe0\x75\xe5\xd1\xb3\xcf\xe4\xbf\x51\xad\xc5\x9c\x4d\x13\xce\xdc\x7b\x78\x35\xfd\xf8\xf3\x17\xdf\x5b\x97\x36\xa6\xbe\xd8\xaa\xfc\x34\x03\xa1\xed\xeb\x86\xef\xfa\x34\x1f\x11\xba\xaa\xa8\xa1\x17\x32\x01\xee\x29\x0c\x2d\x89\x4c\xe0\xf3\x28\x60\x30\xcc\xf3\x11\x22\x28\xc6\xb1\xf9\xd8\x79\x31\x63\xe3\x19\x85\x8f\x77\xbc\x75\xf2\xd5\xa5\x46\x0b\xbf\x3a\xf2\xcd\xdb\x71\x5b\x9b\xb4\xa6\xb2\x57\xf8\xf3\x0f\xf2\x6a\x8d\x7a\xc5\xb0\x55\x71\x64\x5c\x42\x86\x4e\x28\x5e\x20\x07\x8a\xa8\x58\xaa\xab\x2a\x92\x2c\x38\xbe\x1a\x84\xa2\x6b\x44\x98\xe7\x50\xa1\x42\xfa\x48\x91\x2d\x45\x56\x15\x8f\x8d\xb8\x18\x6c\x1f\xdd\x0e\xe7\xb8\xa8\x78\x79\x8f\xf5\xdf\xb9\xeb\x8f\xf7\xde\x0e\x79\x7e\x57\x9e\xd6\x61\x4d\x93\x5b\xc9\xbf\x1e\x7d\x7a\x64\xe8\x8f\x97\xe3\xa8\xa6\xa7\xf0\xb8\xc6\x04\x10\x03\x0a\xa0\x7c\x1a\xb1\x96\x66\x63\x9e\xa9\x03\xd7\x08\x70\x3b\x62\x35\x59\x60\x34\x07\x17\x22\xcb\x54\x22\x87\x62\x45\x3d\x94\xde\x4d\xe3\xd6\xfd\x5a\xcf\xf3\xcd\x80\xe3\x57\xe6\xda\x5d\xf7\xe6\x8b\x9e\x17\xc6\x15\x1f\x58\x34\xfd\x2f\xf5\x5a\xcc\x6e\x96\x69\x67\xeb\x76\x9d\x9a\xc6\xcf\x7e\x43\xce\x85\xc0\xc0\x5d\x93\xf0\x5d\x02\xd3\x7c\xc9\xc0\x45\xc2\x20\x69\x8e\xa2\x34\x8b\xc1\x24\xc8\xfb\x06\x2d\x2a\xa2\x21\xda\x81\x41\xd1\x08\xb2\x76\x2a\x7d\x87\xf5\x9f\x3c\x1b\xfc\xf1\x99\x6d\x23\x87\xed\x1b\x35\x65\xd6\x8c\x7c\x6a\x96\xe6\xb9\xef\x36\x3a\x45\x4d\xaf\x76\xec\xe1\xfe\xaf\x8e\xef\x6e\x90\xc2\x7c\x0a\x67\xaf\xf0\x7c\xd3\xf5\x23\x7a\xcd\x45\xc5\x8d\x1e\xe5\xab\x0f\xed\xb3\xa8\x43\xf5\x8d\xe7\x5f\x5e\xbd\xda\x1e\xdd\x49\x98\x5d\x3f\x6d\x42\xaf\x31\xf3\x22\xee\x86\x56\xe8\xbb\x2a\x21\x68\x8a\x64\x28\x01\xc5\xf3\x08\x98\x2a\xc5\x86\x8c\xc3\x2a\x10\x48\x92\x43\x39\x96\x26\x48\x1c\xa6\xe3\x9e\xa3\xe3\x11\xfd\xae\xf9\x14\xcd\xde\xf9\x7e\xff\xac\x9b\x0a\xef\xab\x6b\x8c\xa8\x58\x68\x09\x53\x79\x60\xdd\xc3\x19\x32\x7e\xbf\x74\x49\xe6\xac\xbf\x77\xce\x7b\x8a\x8a\x9f\xf9\x78\xe0\x7f\xe2\xb5\xa8\x01\x1f\x21\xdb\x04\x3e\x92\x6d\xa0\x50\x14\xa5\x73\x8e\x47\x43\x3f\xf0\x49\x3d\xf4\x18\x93\x77\x59\x3c\x0a\x45\x4f\x23\xb1\x18\x04\x1b\x17\x17\x2e\x5a\xf7\xb8\x66\xa6\xc1\x95\x7b\xb4\xcb\xdd\xe7\xf9\x9b\xde\xc1\x95\x33\x70\x81\x59\xe5\x93\x15\xb5\xc1\x8b\xf6\x19\xab\x17\x88\x23\x59\x17\xa3\x3b\x3c\x0f\x03\x55\x0a\x05\x57\x01\xba\xcd\x4b\xb2\xa3\x20\x99\x13\x04\x53\xd2\x75\xcd\x32\x35\x10\x20\x40\x51\x8a\xec\x84\x10\x8a\x0a\xe2\x53\x79\xd2\xb4\xd8\x99\x3b\x57\x43\xb1\x61\x87\xca\xec\xe8\x3d\x6b\x6b\x2e\x2e\x5a\xf9\x45\x2d\xea\xd2\xb7\x89\x95\x8b\x64\x3c\x7d\xa4\xeb\x23\x27\x7d\x4a\xf4\x62\xde\x3b\xe0\x1b\x61\x58\xa6\xcf\x8b\x37\xe9\xf1\xe2\xd5\x83\xa1\x7b\xfb\x1e\xa0\x1b\xd7\x7d\x9a\xe7\x93\xee\xdf\xef\x1d\x7d\xba\x53\xda\xf8\xd0\x63\x77\x75\xfe\xdf\x60\x0d\xe9\x1a\x11\x98\x96\x24\x93\xb2\x4b\x01\x06\xa7\x00\x0d\x61\x24\xb9\x88\xc2\x6d\x1a\xc7\x7d\x87\x71\x18\xc9\xc1\x0c\x17\xda\x29\xd7\x61\xfe\x2e\xab\xbc\x61\x8d\x91\x1e\x36\xa7\xb2\x15\x9d\xfc\xc5\x8f\x3a\x6a\x3a\xfc\xf2\x9c\x91\xdd\x97\x25\x0e\x51\x3a\x7c\x3f\xbd\xe0\x9c\xb1\xf1\xa3\x95\x61\xa0\x1d\xd8\x26\xf9\xff\x08\x44\x42\x56\x0a\x34\xd9\x26\x6c\x53\xb6\x80\xc1\x06\x18\xaf\x4a\x0c\x8e\x2b\x50\xa3\x74\xc8\xba\x96\xae\x92\x14\x4f\x83\x18\xb0\xb3\xfe\x33\xfa\x8d\x1b\x34\x0a\x8e\x5a\x6d\x6f\xed\x71\x67\x56\x91\xc4\x4e\x79\x7e\x02\x25\x33\xd1\x67\xd8\xdc\x75\x16\xbc\xce\x39\x61\x42\x1c\xa7\x3b\xae\xe1\x13\x24\xa6\x0a\x24\xf4\x7d\x1b\x0f\x2c\xa4\xf9\x92\xab\xb3\x88\x31\x6d\xca\xf5\x28\xd1\x09\x5d\x4f\x32\x5c\x91\x75\x18\x0f\x5a\x0e\x87\xbc\xd8\x9d\x9d\x74\x7d\x7a\x17\x3c\x34\xff\x41\xc9\x95\x53\x76\x7c\x96\xe1\xd3\x4f\x3f\xdd\xdc\x60\x5a\xf7\x4f\x9e\x2f\x3e\x79\x29\x91\xda\x98\xb9\x53\xdf\xb4\x55\x82\xb1\xb9\x3b\xa0\x20\x59\x98\x4a\x46\x9e\x4a\x79\x2e\x1b\x58\xac\x2c\xea\x16\x16\x31\xb6\xc2\x72\x66\xc4\xaa\x8e\x83\xf8\x90\xa0\x19\x8f\x73\x18\xe0\x69\x32\x0f\xde\xbd\xe1\xc6\x28\x29\x77\x5e\xbc\xd0\xa3\x9c\x67\x9b\x5e\x9d\xf6\xd4\x5a\xf1\xa2\xff\xde\x4a\x4d\xaf\x1d\xfb\xbd\xe9\x8f\x6f\x2e\xbe\x9a\xd7\xb4\x7a\x1c\x9f\x06\xa6\x0b\x10\xa7\x72\x1a\xa3\x4a\xc8\xf3\x78\x56\x0d\x19\xca\x53\x42\x4b\x0d\x04\x1f\xd9\x84\x6f\x8b\x9c\x49\xeb\x06\x0b\x4d\xd2\x0c\x43\x3e\x88\xe8\x54\x9c\xb4\x08\xe8\x95\xd8\xfc\xc8\xf3\x83\x87\xbf\x16\x93\x76\x5d\xbd\xbf\xf3\xe8\xba\x23\xa7\x66\x8e\xba\xde\x61\xda\x4b\x86\x48\xae\xc4\x17\x4f\xf9\xf5\xf5\x41\x09\x7b\x0e\xad\x39\xb2\xe5\x52\x96\xab\x15\xae\xd4\x27\x3e\x3c\xbe\x87\x58\x34\x38\x5f\x86\xbb\x73\xa7\x55\x3c\x81\xb1\x7d\x3a\xa6\x70\xe9\xe6\xea\xbd\x5c\x3d\x94\x75\x97\x1b\x0f\xac\x3c\xf5\x65\xb3\x59\xc3\xd7\x9d\x57\xbe\x7c\x73\x67\x5d\xfd\x49\x8b\xe7\x6f\x9f\x5f\xae\xdf\xfc\xf8\x5d\x07\x8a\x02\x41\xc0\x7d\x5e\xa4\x0d\x5a\x85\xa6\xa0\x42\x0d\x1a\x06\x90\xc4\x10\xfb\x9f\x47\x09\xce\xb0\x9e\x80\x29\x3e\x8f\x21\x41\x8b\x08\x8f\x8a\xa2\x77\xd9\xec\xff\x6d\x64\x95\xdc\x78\x7c\xe6\x7f\x60\x48\xce\xb7\x7d\x5b\xae\x42\xcd\xa2\xc7\x07\xb9\xf3\xb3\x6b\x43\x5a\x15\xa9\x9c\xd9\x19\x7e\xf7\x7a\x97\x67\x2d\xa7\x2c\x28\xd9\x6e\x05\xb5\x2f\x8e\x01\x40\xb0\x54\x81\xa6\x8d\xc8\x95\x31\x93\xf3\x69\x3d\x30\x43\xde\x62\x71\xc7\x47\xba\xe0\x43\x5d\xc1\x31\x09\xf8\x90\xb0\x7c\x99\x64\x31\x21\x44\x3c\x8c\x8d\x6e\xd8\x31\xe4\xd0\xb5\x2b\x8b\x86\x4d\x1c\xac\xe5\x86\xd5\xbc\xeb\xa7\x3b\xfc\x2c\x6d\x58\x7b\xa4\x4f\xa6\xd7\x19\xc3\xbe\x39\xbb\x14\xea\x11\xbf\x20\x60\xeb\x1a\x6f\x6b\xa2\xce\x70\xae\x2b\x71\x14\xc7\x86\xb8\xee\xe9\x86\x62\x3b\xba\xee\x03\x03\xba\xb2\x6e\x4a\x1a\xae\x72\x50\x10\x65\x24\x05\x01\xeb\xc5\x7e\x5b\x8d\xcd\xb2\x6c\xe6\xcc\x02\xdd\xa7\x17\xde\x8e\xb7\xaa\x5b\xac\x3c\x9b\x3e\x67\xe6\x9e\xe3\xf0\xb5\x8d\xc6\xac\xfc\xe0\xe5\xda\xdf\x1e\x9d\x89\xe3\x88\x17\x23\x38\x84\xcb\xaa\x4d\x92\x14\x66\x0b\x0e\x83\xe1\xa6\xe3\xab\x11\x43\x23\x5d\x74\x79\xdc\xf1\x69\x2b\xe4\x58\x9c\x72\xdc\x50\x35\x31\x06\x20\x2b\xf6\x91\xf7\x3d\xfd\xba\x5e\xa3\xd5\x43\xc9\x95\xe1\xef\x17\xaa\x24\xbd\xec\x49\xcf\x1d\xbe\xa1\x5d\xb7\x5f\x5f\x97\x98\xd4\x6d\xe0\xc8\x2d\x1b\xd2\xf6\xb6\x8a\x5d\x5c\x20\xc7\x61\x79\x9d\x89\x54\x41\x0f\x5d\x87\xb5\x38\x91\x31\x90\x8f\x41\x89\x37\x55\x3e\x90\x45\x57\xc4\x1d\x3c\x08\x4c\xcb\x45\x38\x19\x98\x2a\x34\xde\x41\x4f\xfd\xdb\xf8\x35\xb9\x71\x72\x9e\x7f\xc0\x65\x35\x66\x7c\x11\x35\xd3\xa2\xf1\xe3\xe7\xf5\xad\xf6\x24\xdb\xd0\x7e\xe5\x26\x55\xff\xf9\xfe\xf8\xca\x99\xb6\x2a\xea\x37\x99\xeb\xd7\x4a\x1b\x14\x29\x76\xdb\xcf\xb2\x49\xca\x21\xa1\x6b\x47\xa4\xe2\xeb\x50\x37\x42\x9a\x0b\x69\x4c\xe0\x91\x63\xba\x64\xa0\x31\xbe\x89\x3b\x16\x0e\x74\xd9\xb1\x08\xca\x41\xa9\x91\x2a\x35\xbd\x70\x72\xc6\x25\xec\x4a\x8e\xb7\x17\xee\xfe\x59\xe0\x9e\x3c\xbd\xd7\xf9\x7d\xf9\x7f\xcb\xbb\x3b\xeb\x91\x03\x27\xce\xb6\x4b\x1a\x77\x23\x7e\x5d\x05\xc0\xa9\x21\x65\x13\x50\x51\x35\x8e\x95\x7c\x42\x00\x40\x64\x5d\x44\xe3\x04\x08\x49\x68\x31\x06\xae\x9b\xa4\xa4\xb2\x6a\x18\x01\xd7\x37\x24\x02\xa4\x82\x7a\x69\x76\xa8\xcb\xa5\xaa\xe5\xae\x2c\x3c\xd4\xca\x39\x5d\xbc\xc2\xe6\x2a\xdd\x27\x4d\xca\xf2\x64\xed\xee\xbc\x9d\x72\xdd\xee\xfe\x60\xba\xfc\x5b\x1c\x91\x99\x0e\x4d\x2b\x94\x66\xb1\x21\x0f\x6c\xd2\xf3\x14\x42\x15\x24\xd3\x95\x31\x4b\x76\x64\xc6\x51\x20\xc1\xe9\x16\xd2\x14\xcd\x53\x15\xde\x96\x89\x08\xa4\x82\x7a\x19\xed\xa7\x3f\x62\xb5\xce\x6e\x55\x8a\x6e\x1c\x18\x2d\x3d\x3c\xd8\x60\x1c\xf1\x41\xde\x55\xdf\x53\xf3\x8f\x89\x5c\x87\xb2\x4f\xc5\x38\x12\xc1\x61\xbe\x12\x39\x18\x4d\x91\x9e\xa2\x38\x0a\x88\x5c\x8b\xf7\x14\x0c\x58\xa6\x2c\x12\x81\xe1\x29\x44\xe0\xda\x80\x53\x6d\xca\xa6\x43\x4e\xd5\x1d\xe5\xef\x14\xf8\x17\x7a\xea\xdf\xa0\x04\xc9\x49\x03\xfb\xe4\x18\x98\x12\x3d\x95\x65\xe0\xb2\xdd\x0d\xb6\x4f\x2b\x57\xb9\x44\x87\x36\xdd\xcb\x36\xb9\xd2\x72\xc1\x8e\x5b\x47\xf2\x2c\x28\xa0\xcf\x9e\x3d\xab\x77\x97\x2e\xb3\xe2\x88\xc2\xa3\x20\x89\xfb\xb4\xc3\x07\x01\x47\x1a\x0c\x21\x61\x8a\xeb\x00\x92\xe4\x99\x48\x35\x31\x4e\xf6\x75\xce\xf7\x2c\x68\xd0\x86\x2b\x48\x82\x49\x13\x40\x89\x6d\x47\x9f\xfe\xe1\x8c\x38\x90\x69\xc4\x92\x6f\xc7\x8e\x7a\x58\x66\xd3\x65\x3e\xd3\xf9\x5e\x9d\x0f\xf7\x4e\x18\x35\x9b\xa8\xb1\xfa\xcb\x96\x67\x5e\xc5\x71\x59\x12\x38\x1e\x61\xb9\x5e\x10\xfa\x8e\xed\x88\x50\xe1\x42\x87\x8f\x3c\xdd\xe0\xcd\x50\x46\x6e\xc8\x59\x84\x64\xe1\x82\x66\x08\x21\xe7\xb9\xaa\x64\xc0\x54\xd4\xb7\x87\x08\x6f\x6f\x7e\x54\x63\x52\x95\x1f\xea\x8f\xd6\xee\x88\xf9\xd6\x36\x29\xbc\x66\xfb\xce\x35\x2d\x98\x1c\xcf\xcd\x29\xcc\xa6\x51\x69\xa3\xaa\x8f\xed\xad\xac\xcf\x21\x8c\xe2\x88\xd0\x0a\x4d\x2f\x60\x7d\x19\x79\x58\x24\x6b\xba\x0f\x29\x28\xc8\x6e\x44\x22\x0b\x57\x3d\x47\xe4\x4d\x02\x90\x91\xe0\xc2\x54\x6e\xf9\xf4\xd0\xf6\x7c\xd7\xf9\xd4\xe6\xa9\x5d\xb7\xce\x19\xbf\x22\xe7\xd1\x15\xf9\x96\xcc\x9f\xb8\xb9\xf6\x9a\xda\x2f\x93\x96\x94\x9b\x52\xf1\x40\xfc\x8e\x6c\x9a\x5c\xe0\x40\x2f\x62\x91\xa3\x38\xaa\xcb\x29\x2e\x89\x30\x8b\x95\x64\xe4\x85\x01\xe7\x08\x2a\x10\x0d\x0e\xca\x81\xc9\xd0\x58\x04\x1c\x5f\xc0\x52\xd9\xbf\xca\x3d\xdb\xff\xbd\x63\xf9\x5a\x3f\xe6\x2c\xb6\x7c\xc2\x87\x5d\x3e\x90\x07\x64\x5f\x53\xd4\xc8\x30\x26\xef\x80\x0d\x65\x86\xe8\x99\x3a\xa7\x8d\xe2\x24\xf6\x26\x8a\xaf\x22\x8f\x61\x19\xd1\x23\x75\x13\xda\x84\x21\x7a\x8e\x6d\x99\x81\x65\xd8\x50\x30\x03\x3c\x8a\xa0\x69\xb3\x0e\x2d\x33\x91\xc0\x52\xa6\x65\x82\x54\x10\xa5\xda\x43\x72\x63\x85\x47\x25\xae\x64\xe8\x90\xe9\xe5\x76\x71\xc7\xdc\x5a\x5f\x6c\xbd\x31\xb0\x7d\x8b\xb1\x73\x16\xb4\xdf\xb2\x6e\xe8\xec\xa5\xf1\x84\x67\xaa\xd0\xd4\x19\x25\xf0\x23\xcb\x62\x15\x3e\x20\x44\x9a\xf1\x61\x80\x2b\xac\x15\x71\x9c\xa2\xe8\x96\xc4\x7a\x04\x61\x7a\xb2\x25\xd3\x84\x05\x34\xfd\x1d\xaa\x9c\x7f\x43\x6e\x24\x27\x35\x4d\x48\xf7\x0f\xfa\x0d\xaf\x70\xbf\x1e\x2b\x6f\x1f\xbb\x1d\x76\x6f\x3c\xc5\xbd\x75\xbe\x5f\xd9\x61\x6f\xbf\xfc\xa4\x57\xf3\xfc\x7d\x3b\x5e\xc8\x3a\xa8\xe2\xa8\x28\x8e\xb9\x95\x17\x58\x59\x0a\x65\x5a\x21\x05\x9f\x75\x28\xd2\x87\xb8\x20\xe9\x18\xce\xd2\x8a\x85\x1c\xc7\x63\x59\x31\xb2\x02\xdc\xf4\x3c\x9f\xd7\x24\x01\xfc\x47\xc5\xe4\xdd\xdc\xda\xa3\x4b\xc7\x49\x43\xfb\x9f\x4b\x77\xa3\xd3\x95\x0d\x65\x8f\x4c\x1d\x68\x4d\xdd\x77\x59\x98\xda\xea\x68\xdd\x56\x03\xca\xb7\x3b\x51\xf2\xe7\xf8\xfd\x28\x81\xc1\x47\xb8\x28\x99\x38\xa5\x9b\x6c\x40\x22\x4d\x06\x0e\xf0\x10\x4e\xd1\xa4\x13\xe1\xa1\x16\x41\x86\x0c\x5d\x51\xc7\x2d\x5d\x22\x14\x25\x10\x94\x54\xb6\x25\xb7\x15\x6e\x52\x69\x43\xc1\x0a\xbb\xf7\xe7\x6d\xb5\x98\x9a\xe3\x2e\xa9\xb1\x7d\xc2\x0d\xb6\xe0\xde\x8c\x3d\x8a\x8f\x2c\x0c\x17\x97\x48\xdb\x91\x63\x97\x68\x0c\xef\x90\x34\x67\xe2\x0a\x8d\x3c\x8f\xd0\x1d\x4a\x8d\x4c\x86\xe7\x58\x8d\xd1\x70\x8e\xb7\x55\x1c\x46\x04\xe2\x65\x03\x47\x6a\xe4\xf0\xba\x0a\x53\x11\x0c\x6f\x36\x72\x49\x5d\xfc\xd1\xda\x73\xb3\x4b\x98\x19\xba\xcd\x95\x5f\xbe\x36\x73\x17\xeb\xfd\xa1\x76\xa8\xc6\xee\x93\x59\x5a\x2e\x9d\xf5\x75\x1c\x19\x43\xec\x88\xb4\x48\x3a\x62\x9c\x50\x67\x11\x27\x47\x16\x67\x70\x6c\xc4\x0b\x40\x92\x1d\x4b\x63\x18\x31\x64\x5c\x45\x0a\x34\xd5\x55\x65\x11\x27\x64\x94\x8a\xf4\xe0\x94\x2e\x5f\xcf\xbd\x9b\xae\xf0\xe2\x7e\x6d\xda\x95\xcd\x9b\xb7\x74\x8d\x7a\x4a\x9d\x31\xd5\x5e\xf7\xf8\xe2\xfa\xab\x9f\xb1\x46\x19\x3e\x88\x23\x93\x25\x83\xa4\x48\xf5\x74\x09\x92\x32\x15\xc9\xa1\x26\xf2\x0c\x40\x14\x70\x18\x91\x8a\x22\x17\x97\x71\x28\x48\x34\x8c\x24\x32\x08\x79\xcc\x77\x58\x23\x54\xdf\xd9\x1b\xfb\x37\x18\x52\x72\xe3\x8c\x35\xff\xf1\x04\x14\xb2\x17\x2e\x5a\xf6\x50\xd6\x7c\x93\xbf\xec\xf5\x40\x0d\x46\xbf\x5d\x73\x72\x1b\x5b\x85\x2b\xb0\xfc\xcb\x5b\x3d\x4f\x0e\x1a\x70\x33\x7e\x96\xcf\xb2\x72\xc4\x68\x18\x41\xb8\x3a\x8e\x7b\x1e\x15\x41\xc1\x36\x28\x80\x34\x5b\xb5\x3c\xa8\xd1\x1c\xed\x0b\x90\x45\xa4\x64\x1b\x2c\xe6\x33\x9a\xc0\x80\x54\x96\xb0\xda\xe6\x36\x2f\xce\xea\x3d\x38\xeb\x81\x82\x13\xa2\xde\x57\xbb\xd4\x0a\x4b\xf4\x5d\xb3\xbb\xfa\xc5\x3f\x6e\x67\x68\xdf\x20\x21\xa9\x44\x1c\x77\xf9\xcc\xd0\x76\x09\x0d\x42\x5f\x64\x48\x9d\xb7\x69\xd6\x30\x45\x0e\xe7\x75\x68\x2a\x6c\x28\x4a\x38\x27\xcb\x14\x21\xba\x9e\x1c\xd2\xb2\x4a\x00\x3c\x70\x52\x61\x5c\xb2\x93\xab\x34\x7a\x2f\x3f\xf1\x72\x5c\xae\x32\xb5\xd7\x0f\xdb\x8a\x95\xff\x78\x87\x54\x74\x66\x9d\xfe\x43\x9f\x7d\x77\xf2\xe9\xf1\x72\x1f\xc4\xcf\x59\x21\x81\x54\x59\x50\x02\x8e\x25\x7c\xcd\x10\x7d\x92\x43\x8e\x4b\x86\x94\x0a\x31\xcd\xe0\x34\x4c\x62\x20\x26\xfb\x8a\xe9\xfa\xac\xac\x46\x21\x25\x32\x6a\x6c\x67\x9d\xb4\x3e\xd7\xf9\xe5\xbd\x36\xcf\xed\x54\x20\x47\xf7\xcb\x2f\x06\x16\xb8\xd4\xbc\x7e\x6e\xa5\xc8\xf0\x9c\x3b\xfb\xe4\x99\xbb\xbe\x41\xa6\x38\x02\x23\x58\x0d\xa9\xb6\xac\x10\x28\x92\x24\x11\xe9\x94\x42\xbb\x0c\x0a\x05\xdb\x16\x0d\x42\xc0\x31\x8a\x26\x03\x51\x73\xb5\x90\xa1\x3c\xd2\xc0\x3d\xf2\xbf\xe7\xe0\x7f\x51\x70\xfc\x1b\xfa\x24\x39\x29\xb1\x74\x42\x62\x4a\xd3\xdf\x78\xe0\xc6\xcb\xe5\xd7\x7b\xa7\x7b\x7e\xfd\xd6\xd4\xd6\xb5\x9e\x5c\xca\xb7\xa4\xdd\x1f\x0c\xaa\xf2\x80\xac\xb9\x68\x61\xd1\xf4\x17\xd3\x26\xd6\x1d\xd3\x8e\x3c\xd3\xa6\x95\x00\x47\xc8\x01\x08\x03\x04\xc5\x62\x8c\x69\xb1\x0e\xab\x6a\x00\xb9\x52\xc8\x99\x18\xcf\xd2\x86\x68\x48\x81\x4c\x46\x38\xd2\x75\x25\x95\x77\xf9\xb4\x89\xd9\x3e\x98\x5a\xaa\xd2\x92\x02\xe7\xb2\x73\xfa\xb9\x09\xfc\x80\xf6\xad\x33\x0d\x63\x5f\xec\xd9\x3a\xe3\xc7\x72\xcf\x84\x27\x73\xe3\xb8\xd5\x24\xd2\x84\x83\x11\x18\x8c\xa0\x1d\xca\x42\xc4\x47\x01\xed\x46\x92\x0f\x4c\xc4\xe8\x18\x83\x69\x24\xc0\x48\x49\xa5\x21\x0b\x09\x37\xf2\x45\x43\x63\x62\xdb\x11\x5b\x6e\xfc\xae\xe3\xfb\x1e\x7e\xb9\x60\xee\xf1\xb7\x6b\x4a\x6f\x9d\xb0\xb6\xe7\xc2\x5b\x65\xae\x1d\x6d\xf4\xba\xea\x93\x9c\x05\xf6\x7f\x10\xbf\x65\x61\xd6\xf5\x7c\x31\xe0\x1c\x8e\x34\x1c\x0a\xe8\x22\x2b\x0a\x0a\x4b\x28\x24\xe6\xd0\x0e\x63\xf2\x52\x40\x6a\x36\x32\xa0\x8b\x05\x58\x44\x84\xbc\xe6\x01\x96\x8c\x7d\xcb\x5b\x66\xcc\x5f\x92\x71\xf7\xfc\xbc\x55\xf1\x35\xb9\x36\xe7\x9f\xe9\x0d\x5d\x7e\x95\x9e\xba\xfc\xf3\x0b\x13\x37\x3e\x3c\x19\x2d\x28\x75\x22\x9e\x64\x5c\x14\x34\x38\x1e\xe7\x35\xde\x24\x35\x1d\x08\x81\xe3\x40\xce\x08\x6d\xd2\x71\x49\xe0\x99\x8c\xa4\x8a\xae\xc4\x06\xaa\x21\x89\x01\xef\x46\x18\xeb\xfe\xdd\xfd\xc8\xf1\x7f\x83\x52\x25\x27\xe5\xcd\x9c\xf5\xe7\x91\x29\xfe\x43\xac\x68\xc5\x56\xa3\x9f\xa6\x4b\xb8\xe8\x0f\xca\xbc\x65\xc6\x82\x76\xab\x27\x96\x43\x0b\x67\x1e\x1b\x5e\xec\xbd\xda\x19\x7a\xdf\xac\xf1\x5e\xfc\xfe\x43\x5e\xb2\x42\x05\x37\x5d\x8c\x23\x24\xda\x36\x03\x42\x0e\x79\x12\xe2\x94\xaa\xe3\x3a\x13\x05\x51\x80\x68\x82\x8d\x68\x21\x22\xdd\xc8\x30\xa0\xe0\x43\x3d\xb6\x1d\xed\x5e\xb8\x39\xe3\x7b\x47\x4e\x14\x48\x97\xa7\x66\xaf\xb7\xcc\xd2\x06\xeb\xaf\xd6\xe8\x54\xfe\x71\xa1\x42\xed\x0e\xae\xf8\xbc\xd4\xce\x87\x6f\xe2\xf8\xa0\x72\x29\x1f\xba\x40\xc6\x05\x5d\xd5\x48\xcc\xd6\x4c\x5f\x40\x8c\x8d\x48\x36\x08\x10\xb2\x08\x9c\x37\x8c\x00\xea\x06\x60\x6d\x06\xc7\x95\x90\x43\x52\x6c\x3b\xea\x51\xf2\xca\xb8\x59\xdc\x9a\xbd\xd9\x32\x35\x2d\xc6\x3e\x5d\x73\x64\x63\xf9\xfa\x6d\x0f\x3e\x7b\xf2\xf1\xd0\x0a\x4f\xfa\x5c\xb6\x36\xc5\x91\x03\xdf\xe5\x08\x4f\x16\x44\xe4\x99\x74\x68\x06\x22\x70\x45\x4f\x36\xb1\x80\xb2\xa2\xc0\xb3\x7c\x5f\xb4\x28\xc3\xa6\x23\x4b\x66\x29\xc9\x25\x5d\x1f\xc3\x14\x25\xf6\x2d\x77\xcd\xb6\xb5\x5a\xc1\x6b\x47\x6a\x54\xbf\xef\x3c\xa8\xb7\x67\x7f\xe9\xae\x5d\xe6\xce\x3d\x76\x4f\x2e\x3d\x82\x3e\x79\x31\xc3\xd3\x87\x69\xa3\x11\x8e\xdd\x1c\xe0\x1c\x5e\x77\x99\x48\x27\x75\xc2\xe1\x2c\x40\xf3\x7c\x14\x31\x00\x53\x58\xa0\x19\x86\x4a\x87\x26\xf4\x28\x8b\x8d\x5c\x8a\x53\x1c\x4b\x95\x18\x3e\x95\x26\xd3\xac\xd9\xbd\xd7\x3e\xcf\x81\x97\x10\x57\x7c\x33\xe4\xc2\xda\x13\x0f\x6b\xf6\x55\xa3\xed\x3f\x35\x1c\xf3\xb9\x34\xfa\xe8\xa8\x9c\xcf\xe2\xb8\x46\xae\x1b\x2a\xe6\x92\xaa\x22\x52\x80\x47\xb4\x47\x12\x9c\x49\xba\x5a\x04\x39\x60\x08\x84\xe5\x00\xdc\x35\x70\x91\x93\x49\xdc\x34\x49\x82\xa1\xf8\x30\x35\x72\x16\x78\x75\x5d\xd9\xd9\x4d\x97\x4f\x6d\xd2\xe5\xf3\xc5\x49\x1b\x9b\xa3\x86\x07\x0b\xfe\x5a\x4f\xfa\xde\x78\xf9\x04\x0c\xcf\x12\x6d\x89\x9f\xda\x00\x2b\x60\x3a\xb2\x1c\xcb\x0a\x44\x91\xa5\x05\x35\x44\x4c\x60\x29\x86\x22\xb1\x48\xd2\x78\xc6\x91\x38\x4e\x92\x3c\x0e\xb1\x3a\x0a\x75\xc3\xa3\xed\xf0\x3f\x24\x62\x31\xc8\x44\x8f\xcc\x68\x3f\x7b\x6b\x96\x85\xdb\xea\x8e\x3c\x47\x76\xeb\x37\x32\xe7\x2f\x6b\xa3\x3e\x2d\xde\xbb\xf8\xdd\xe3\x63\xd3\xeb\x97\xda\xdc\x2a\x9e\xb7\x2c\x08\xb8\xcb\x0a\xff\x73\x9f\xbc\x65\xb0\x0e\x4b\x60\x1c\x2f\xc9\xb8\x87\x90\xea\xe8\x40\x87\x8a\x2d\x9a\xbe\xc8\x19\x86\x4d\x0a\x38\x74\x34\x26\xf6\x2d\x2f\x93\xd7\x4c\x11\xb5\x1e\xf7\x37\xa7\x8f\xb2\xec\xad\xd7\xf2\xf7\x8e\x25\x3f\xe8\x55\xfa\xa3\x41\xfd\xbf\xbf\x7f\x6a\xf2\xcb\xaf\xcf\xb7\x8e\x9f\xfb\x51\x80\x0b\x7c\x4d\xe5\x9c\x50\x56\x45\x9b\x47\x80\xa5\x04\x85\x14\x35\xc8\x9a\x16\x62\x4c\x56\xd6\x29\x06\xca\x96\xed\x50\xbe\xc5\x60\xb4\x25\x38\x5a\x6c\xf7\xcb\x69\x6e\x6e\x71\xf5\x52\x8d\xcd\xc7\x0f\xed\x62\xce\xbf\xc9\xf5\x68\x04\x5e\xc5\x9b\xba\x6a\x54\xeb\x74\x8d\x07\x65\xe8\xdd\xac\x77\x1c\x15\x8c\x58\x1b\x8b\x64\x91\xd2\x5c\x5f\x34\x35\xc0\x98\x02\xc5\x84\x92\xe3\x02\x4b\x33\x34\x55\xd4\xa0\xc2\xe8\x84\x41\xda\xa6\x83\x03\x41\xd4\x44\x3f\x62\x82\x77\x26\x4e\xff\x06\xcb\x4d\x6e\x9c\x3e\xb1\x7d\xca\x9a\x2b\xe1\x18\xfc\x70\xdd\x99\xf2\x51\xa1\xd7\x8f\x7f\x2f\x55\x6a\xc5\xd8\xe6\x8f\x6e\xd5\x2c\x58\x71\x4d\xe2\x1d\xdf\xf3\xdf\x3b\xde\xe5\x79\xfc\x7e\x13\xe4\x79\x14\x62\x28\x11\xe7\x10\x45\x43\x5d\x8d\xa2\x50\x17\xe8\x88\x8e\x44\x41\x55\x54\x08\x3c\xdc\x08\x09\x2b\xe0\x43\x2f\xc0\xd4\x88\x85\x9c\x6a\xc6\xfe\x4d\x5e\xb2\xcf\x4f\x3f\x79\x31\x76\xf9\x94\xbb\x37\xf6\xe4\xcd\x93\xa5\x66\x85\x6b\x6e\x69\xe7\x97\x2c\xdc\xe6\xc4\x0b\xc1\xe1\xf1\xc3\xd3\xd6\x7c\x8c\x99\x2b\x65\x5b\xa1\x43\xcb\x89\x80\xa2\x91\x9a\xe3\xa9\xb4\x4c\xea\x11\x21\x06\x98\x65\xd3\x11\xa6\x41\xdc\xd6\x75\x0b\x84\xb4\x05\xf5\xd0\x76\xa0\xed\xa5\x36\x2a\x58\x5f\x7c\xdf\xca\xa8\xf5\x7b\xb5\x97\x16\xd8\x55\xf0\xf1\x8d\x7c\x57\x17\x56\xed\xfd\x7b\xbb\x29\x5f\x65\xda\xb4\xe2\x8b\xad\x49\x75\xb6\xc5\xb1\xef\x6e\x30\xbe\x8f\x0c\x53\x23\x14\x01\xd8\x0c\x12\xe8\x90\x34\x55\x5a\xb5\x34\x53\xd2\x48\x5d\xe1\x8c\x00\x09\x86\xc9\x58\x54\xa0\xeb\xb4\x69\xfb\x02\x43\xc5\x8e\x2f\x89\xd4\xef\x03\x07\x9d\xbf\x7b\xb1\xf7\xa4\x2a\x89\xf7\x06\x4d\xf8\x8c\x6d\x52\xb8\x54\xcf\x83\x7b\x9b\x2c\x9a\xf0\x7b\xb5\xfe\x17\x2a\xc5\xd1\xf2\x05\x1a\x84\x32\x61\x70\x18\xeb\x62\x3e\x03\x81\xcf\x70\x18\xef\x93\xa6\x44\x0b\x11\x21\x42\x5a\x84\x8e\xab\x71\x04\xe3\x08\x3e\x8b\x85\x28\xf0\xe1\xdf\x00\xc4\xbf\x9e\x1b\xff\x06\x31\x4f\x4e\xca\x58\x32\xdf\x3f\x5e\xda\x56\xc1\xf2\x9b\x9c\xa5\x17\xff\xc8\x7b\xb9\x62\xc9\x5b\xcd\x1e\xb6\xee\x7b\xf3\xc8\x80\xcc\x75\x97\x25\x6c\x78\x55\x7a\xeb\xd6\x0d\xe5\xe3\x47\x22\xc6\x70\x81\xc8\x00\x33\x62\x54\x40\x43\xdb\x20\x29\x1e\x43\x51\x44\x60\x9e\xe3\xd0\x50\x66\x20\x27\x3a\x12\x6d\x38\x0c\xa7\xbb\x9a\x16\xb9\xae\x83\xfe\xab\x95\x90\x52\x87\xbb\xd3\xda\x6a\x25\x6b\xd5\x9c\xdc\xfb\x6e\xde\xc9\x95\x4e\xdd\x0c\x72\x71\xe7\xd6\xf4\x5d\x74\x78\xcf\xfa\x5a\xe3\x47\x58\x79\xeb\x9c\x8d\xdf\x8f\x22\x6a\x11\x4f\xca\x20\x82\x98\x67\x9a\x14\xc1\x53\xd0\x64\xd4\xc8\xc0\x15\x81\x33\x65\x4c\xb7\x71\xdf\x37\x2c\x39\xf4\x04\x99\x77\x69\x5a\x0c\xb0\xc8\x8a\x6d\x47\x5d\x2f\x96\xd9\xb0\x71\x5e\x85\xcb\x5b\xf1\x95\x55\xbc\x92\xe7\xa8\x99\x0d\x6f\x8f\x5b\x27\x5f\x99\xdf\x62\xd3\x96\x6e\x23\x6a\x44\x2b\xe3\x77\xcb\x08\x28\xa1\x8f\xab\x38\xa0\x0d\xc1\x13\x90\x89\x20\xf0\x9c\x28\xf4\x88\x40\xb2\x98\xd0\x0e\x75\xc1\x92\x10\x32\x4c\x8b\xb6\x90\xcc\xdb\x1a\xc6\xa4\xc2\x4d\xb4\x8b\x59\x51\xf1\x36\x7a\xfc\x61\xd1\x5d\xdf\x7f\x52\x69\x76\x81\x9b\x6d\x7e\x54\x26\xff\x79\xb0\xcd\xe1\xda\xb3\xea\x65\xdc\xba\xec\x9b\xb4\x75\x84\x63\x23\x87\x02\xa8\x85\x18\xc9\x49\x2e\xeb\xf3\x8c\x02\x1c\xcf\xd6\x18\x2a\xc2\x3d\x53\xc1\x7c\x5d\x86\x2e\x15\x4a\x38\x89\x19\xa2\x60\x5a\x20\xb0\x2d\x12\xaa\xef\x98\xfe\xbf\x61\xcd\x93\x93\x4a\x26\x96\xfa\x87\xe9\xb3\x45\x8e\x36\xbe\x3b\xad\x5c\xfd\x09\x1b\x0a\xb6\x5a\xd4\xb0\xe5\x4f\x09\x85\x8e\xe7\xdc\x0f\xeb\x7f\xf5\x22\xb8\xf6\x90\x1c\xf0\x71\x1c\x7f\x14\x3a\xa0\x71\x09\x53\x0d\xde\x93\x44\x14\xd9\x0c\x13\x68\x8e\xef\x04\x9a\x47\x0b\xa2\xef\xe1\x50\x06\xae\x69\x38\x06\x94\x55\x4d\xf4\x0d\xc0\x8b\xff\xa1\x49\x7b\xf7\x47\x19\x37\xb7\x44\xd3\x39\x07\xf3\xd5\x3e\xdb\x65\x73\x96\xce\x6d\xb3\x96\x5b\xf7\xa0\xc4\xf4\x43\x0d\xda\xe2\x4e\xa6\xd9\x8e\xfb\x9d\x95\xb6\xc6\x5f\x6c\x74\x26\xa5\x7b\xbe\x41\x12\x38\xa1\x98\xbc\xc1\xaa\x14\xc2\x49\x47\x37\x5d\x2d\xe2\x44\x59\xc7\x65\x09\x13\x03\xd1\x22\x08\xd7\x56\x48\x95\x0a\x54\xc8\x45\xb1\xa3\x7e\xb5\xdc\x45\xf6\x8c\x7a\xbe\xe8\x60\xe5\x27\x9f\x5d\x2f\x7e\xf8\xbb\x02\xc7\xaa\x8d\x7f\xf2\xe4\x71\xcb\x2c\x8b\xcd\x3f\x3f\xcb\x03\x07\x3b\x71\xe4\xe7\x0c\x35\xdb\xa3\x31\x8d\x46\x96\x28\x63\x8c\xa7\x51\x8c\x4d\xd1\xaa\x4c\x45\xac\x2e\x03\xde\x13\x03\x92\x97\x64\x0c\xe7\x58\x05\xb8\x0a\x4e\x2b\xd0\x8e\xed\xad\xb5\x32\xd4\x99\xd4\xfc\xe3\xd6\x4d\x57\x54\x4b\x2e\xd7\x93\x5c\x5d\xf9\x6c\xed\x33\xe3\xd5\xf7\xc5\xe5\x6d\x3a\x8c\xfd\xe2\x41\xf6\x71\x1b\xe3\xd7\x1c\xd0\x31\x97\xa6\x31\x8b\xd7\x50\xe0\x10\x1a\x66\x91\x61\x40\x99\x2a\x23\xe1\x24\xae\x79\xba\xc5\xbb\x9c\x17\x38\x88\x92\x75\x4f\x32\x09\xc9\x54\x38\xfe\xef\xdd\x90\x6f\xb2\xfc\xdf\xe0\xa4\xc9\x49\x25\x13\x3e\xf9\x87\xe9\x57\xe2\x9a\xee\xcc\xfd\xd3\xb7\xcc\x80\x02\x4d\x07\x0f\x2f\xbf\x32\xf7\xd7\x8b\x6a\x77\xcc\xb2\x92\xb9\x37\xe5\x50\xed\x81\xd9\x0b\xb5\x4d\x1b\x17\x79\x4c\xd3\x0f\x91\xc2\x62\x06\xe9\xa9\x82\x40\x52\xae\x20\xa8\x2c\x32\xa0\xef\x98\x8e\x6c\xa9\x6e\xe8\xfa\xb2\x64\x0a\xaa\x63\xcb\xa6\x8d\xd8\xc0\x14\x75\x0b\xa4\x12\xf5\xf3\x76\x99\x93\x71\x1f\x93\x51\x3b\x9f\x6f\xd8\x27\xb3\x4b\x9c\xa8\x3e\xaf\x50\xe1\x2a\x9b\x9b\xad\x60\xca\x5d\x2a\xd1\xe9\xf4\xfb\x8b\xe2\x67\xfa\x8c\x29\xd1\x7a\xa0\x31\x16\x30\x2d\xc5\x82\x72\x60\x5b\x0a\xa1\x22\xd7\x80\x32\x47\x8b\x92\x2b\xf9\xb8\x46\x21\x0e\x42\x47\x90\x20\xce\x12\x04\x83\xa7\x42\x9f\x3e\xe5\xc3\x53\x87\x26\x6d\xfe\x9d\x68\x7f\xec\xcc\x8d\xe4\x36\xed\x66\xed\x5f\x4c\x7e\xfc\xa6\x6d\xf1\x1b\xfb\xa7\x33\x15\xcb\xe7\xdd\xfb\x6d\x1c\x37\x28\x3d\x5f\x90\x08\xc9\x25\x3d\xcb\x43\x72\x08\x0c\x52\x31\x49\x5d\x43\xae\x26\x89\x9a\xa9\x9a\x14\x67\xf0\x34\x41\xca\x8a\xc2\xa3\x10\x88\x9a\x12\x49\xb1\xa1\x81\x1f\xe5\x0e\xb5\xa0\x5e\xa7\xed\x45\xc7\x94\xde\x52\x62\xe9\xc3\x72\x05\x67\x1f\xbb\xb9\xe2\xc1\xfd\x72\x57\xbf\x49\x97\xc7\x5d\xd9\xba\x60\xfc\x6e\x59\xc7\x4d\xc4\x2a\x1a\x07\xf0\x10\x67\x0d\xcd\x25\x59\x82\xe4\x6d\x3f\x94\x78\x09\xc3\x58\x2e\xd0\x44\x5c\xe7\x45\x17\xf9\x18\x72\x0c\xc7\xf0\x42\x27\x86\xc2\x47\xe3\x95\x5b\xe4\x42\xcf\x3a\x90\x39\xa7\x37\x7a\xb6\xbf\x45\xe2\xb9\x03\x8b\xd7\x5f\xee\x52\x25\xd3\xb9\x23\x0b\x99\x32\x35\xf7\x74\x8d\xdf\xb8\x89\x31\x19\x8c\xa7\x4c\x8d\xf4\x2c\x43\xf1\x19\x56\xd5\x68\x59\x60\x6c\xc9\xc4\xb5\xd0\xc3\x03\x12\xe7\x5d\xce\xf5\x78\x86\x24\x98\xff\x8f\xb5\xaf\x8e\xb6\xaa\x5a\xdb\xa7\x1b\x24\xa4\x04\x69\x90\x14\x5c\x73\x85\x20\x5d\x52\xd2\xa5\x52\x73\xae\xee\x98\xab\x91\x3a\x84\x74\x09\x48\x83\x05\x08\x88\xa4\x74\x37\x8a\x84\x34\x48\x09\x28\x9d\x2a\x25\xfc\xc6\xfd\xdd\xef\x7e\xf7\x9e\xef\xec\x33\xbc\xe3\x8c\xfd\xff\xfe\x63\xee\xb9\xde\xf9\xe6\xf3\x3c\xaf\xe9\xf2\x82\xc3\x48\xff\x01\x37\xfe\xd7\xd8\xf2\xef\x90\xbb\x29\xcd\xb3\x0f\xce\x34\x31\xf5\xd8\x32\x1b\xdd\x65\x73\x8e\xfd\x3f\x7c\xbb\x99\xe8\x59\xa9\x45\xa7\x85\xd7\x57\x2e\x5c\xbf\x79\x7a\x81\x99\xdf\x56\x2a\xbe\xf3\xd3\x8f\x7a\x65\xd1\x93\xe7\x3e\x6d\xe0\x88\x2c\xad\x0b\x40\xb3\x58\x53\xc0\xae\xc5\xc2\x00\xb1\xb2\x2c\x47\x0c\x70\x64\xa8\x69\x58\xe2\x55\x9f\x8d\x0d\x42\x81\x14\x90\x25\x06\xa6\xa3\xc8\xfc\xe7\xb7\x03\x3e\x1b\xf8\x6d\x17\xa5\x46\xeb\x05\xeb\x66\xec\x7c\xad\xd4\x6f\xe5\xb5\x2b\x9d\xdb\x67\x9f\x48\xff\x54\x3f\x1b\x79\xfe\xed\x47\x49\x0c\x52\x3c\x1f\xc8\x3e\x46\x9e\xaa\x91\x84\x1f\x58\xbc\xce\xc3\x80\x21\x8d\x48\x75\x58\x60\x71\x22\x1f\x62\x59\x36\x4c\x4c\x00\xd9\xe6\x5c\xd7\xa1\x59\x35\xf1\x4b\x3d\xb8\xb5\xb3\xde\x6c\xc1\x81\x6e\x0f\x72\x2e\x5e\x39\xfe\x7a\xd9\x9f\xda\x9e\xfa\x83\xd9\x91\xef\x87\x13\x47\x57\xbf\x57\x77\xf0\x47\x93\x93\x08\x93\x66\xa0\x27\xb3\x2c\x8c\x24\x8d\xd4\xa1\x6c\xd9\xb4\xc2\x48\x58\x73\x55\x3d\x56\xb0\xee\x23\x1d\xb1\x22\x41\x30\x14\x03\x48\x57\xf3\x34\x8b\xe5\x90\x97\xf8\x96\x33\xdf\x9e\xb2\x77\x6c\xb3\xc2\xa3\x37\x7c\x9d\xe9\xc9\x94\xae\x83\x6e\x8c\xca\x73\xb4\xee\x91\xa9\x47\xab\xdc\x1f\xba\xb7\x46\xed\xb1\xb7\x33\xb6\x1a\x2e\xa1\x61\xc8\xbc\x44\x00\xce\x56\x3c\x18\xa9\xb6\x29\x08\x02\x70\x51\x0c\x44\xcd\x0a\x31\x29\x06\x58\xf0\xa4\xc0\x0f\x22\x1a\xc8\x16\xf0\x2c\xec\x04\xb2\x9c\x4e\x5c\x3d\x71\xe3\x2b\xfe\x54\x96\x2f\x1a\xd7\x1d\x1f\x7a\x25\xf5\x1f\xb6\x4d\xad\x92\xef\xed\xc7\x37\xde\x3b\xb9\x3c\xdb\xc8\xa7\x7f\xfe\x7e\x24\x63\xab\x85\x13\x1a\x06\xd2\xb0\x69\x03\x82\x43\xc0\x63\x6c\xac\x18\x1a\xb2\xe9\x00\xc7\x1a\x67\x79\x94\x14\x08\x1e\x8c\x3d\x42\xb3\x0d\x8a\xf6\x68\x5f\xe1\x7c\x8c\xb4\xb4\xc3\x9b\xbf\x83\xf0\xa6\x34\x1f\x9c\x25\x5b\x96\xd4\x71\xb5\xc6\xc7\xc7\xfa\xf4\x39\x13\xbd\xf1\xf0\x1b\x6e\x52\x23\xb1\xd3\xc2\x0e\xed\x72\x1c\xa9\x31\x7b\xce\x97\xd9\xc7\x35\xf4\x56\x8a\x57\x16\x25\xb1\x2a\x27\x1c\x1f\x20\x9f\xf4\x6d\x21\x88\xe8\x00\x18\x9e\x48\x2b\xb1\x65\x40\x42\x8b\x42\x8f\xd7\x63\x0e\xca\x24\xc9\x8a\xa6\x03\xb1\x6d\x91\xb1\xe2\xa4\xa3\x22\x3d\xc7\x38\xf8\x6a\x87\xbc\xf9\x66\x37\xde\x39\xe7\x58\x81\x3f\xaa\x16\x39\xdf\xe0\xde\xdd\x07\xc1\x93\xcd\x33\xbe\xab\xba\xfe\x7d\x69\xd3\x89\xe4\x1d\x59\x8d\x43\x88\x65\x8e\x54\x45\xc2\x40\x48\xd1\x09\x97\xf5\x44\xca\xb2\x21\xcf\x39\x8e\x19\x38\x1c\xb4\x75\x4f\x30\x0c\x24\x70\x90\x32\x28\xc3\x75\x8d\xc4\x47\xa6\xd6\xec\x69\xf2\x5b\xbd\xe5\x15\x4b\x5c\xb1\x73\x54\x68\xea\x1f\x1f\xba\x7e\xd5\xb0\x87\x78\x54\xcf\x0a\x45\xef\x2c\x7e\xf2\xa4\xe8\x87\x49\x9c\x13\x84\xc8\x82\x54\xa4\x63\xe0\xea\x24\x6b\xe9\xd0\x90\xb1\xc3\xc6\x32\x47\x71\x3c\x42\xb4\xe7\x85\x2e\x8c\x04\xce\x85\x9e\x04\x79\x89\xc2\x96\x9d\x4e\x16\xbc\xbc\xea\x8b\x4f\x2e\x06\xab\xf6\xfc\x3e\xaa\xdc\x9e\xbc\x03\x3a\xe1\x8e\xeb\xe6\x16\x7d\x6d\x41\x33\xd0\xf0\xe8\x9d\x92\x17\x8a\x0e\xc9\xd8\xde\xfd\x84\xa9\x80\xa6\xaa\x5c\x10\x11\x26\x0f\x2d\x2a\xb2\x40\xa4\x07\x4e\xa8\xb8\x21\x6b\x87\x01\xc1\x89\x86\x4c\x58\x24\x15\x9a\x58\xb6\x4c\x46\x30\x62\x1c\x22\xcc\xa4\x99\xd8\xff\x1d\x1e\x3d\xa5\x59\xe3\x94\x5c\xa9\x2d\x7f\xd6\xc5\x41\x4b\xde\xaa\xbc\xa3\xe1\xf1\x06\x1d\x86\x94\xaf\x92\x6b\x35\x29\x1e\xc9\xf3\x76\xa3\xec\x0b\xba\x0f\x5c\xdc\xf3\xd2\xe0\x1e\x13\x92\x28\x65\xab\x29\x6e\x84\x34\x8d\x33\x04\x5b\x91\xad\xc0\x56\x08\x4a\xe3\x08\xc9\x91\x08\x84\x7c\xd7\xd1\x8d\x30\x34\x4d\x17\x02\x82\x63\x42\x49\xa4\x80\x9d\x4e\x8b\x3e\xcf\xc0\x9b\x3f\x7e\xd6\x03\x9e\x7f\xcd\x4f\xb9\x57\x5e\xed\x9f\x39\x6b\x96\xeb\xed\xd0\x27\x77\x6f\xdc\x3d\x7c\x66\xdf\x83\x62\x30\x63\xfd\xa8\x84\x49\x30\x29\x62\x83\x77\x24\x17\x42\x11\x3b\x14\x16\x42\x12\xd9\x54\x68\x58\x1e\x47\x03\x2b\xc0\x92\x1c\x45\x0a\x25\xe0\x50\x64\x4d\x80\x23\x35\x8c\x61\x3a\xf0\x9a\x6f\xea\x74\xb8\xfd\xce\x0f\x9b\x0e\xec\x6e\x58\x7d\xc7\x91\xd9\xd3\x97\xa4\xfc\x30\xad\xab\x90\x67\xf5\xf2\x1d\xa7\xb2\x96\x9f\x3e\xf6\xfb\x8c\x29\x7b\x27\xc6\x81\x7a\xbc\x04\x23\x5e\x0a\x20\x43\x00\x42\x11\x23\xc3\x0e\x59\x2a\x42\xbc\x28\x84\x2a\xe7\xd0\x2a\xa7\xd8\x76\x44\xbb\x41\xe0\x05\x8c\xc9\x2b\x14\x9b\x8e\xbc\x62\x01\x74\xeb\x97\xd3\xc3\x8a\xac\xea\x73\x9d\xe9\xd4\x8d\x28\xd8\xba\x33\xe8\x39\xbc\xd7\x76\x92\x6d\xae\xb5\xa8\x36\xb1\x4e\xb1\x02\xc9\xbb\x65\xe8\x2b\xb1\xe1\x92\xc8\x94\x55\x81\xd4\xac\x80\xc2\x92\x67\x46\xb2\x06\x75\x11\x86\xa4\xcc\x09\x36\x20\x42\xcf\x25\x5c\x4a\x05\x8e\x2e\xe9\x26\xfa\xb7\xf2\xc9\x37\xad\xff\x67\xc8\xba\xf5\x93\x17\xe1\xeb\x85\xca\x34\x79\xe7\xe2\x1f\x53\x96\xac\x29\x7f\xed\xc1\xd9\xb6\x17\x0f\x7c\x52\xf7\xe9\xc3\x49\xd7\x1e\x3d\x68\xf6\x45\x4a\xf3\x97\xcf\x5e\xbe\x9c\x5e\x36\x35\x7f\xa3\x71\xe7\x97\xe7\x6f\xec\xfe\x36\x73\xa5\x11\xbd\x5a\x8f\x98\x73\x71\x76\x34\xa4\xf0\xf1\xe7\x5f\xab\x71\xdf\xb7\x96\x74\x78\x5a\x27\x53\xf7\xd4\xbf\x5e\xbb\x7c\x5d\xee\x09\x83\xe4\x5f\xea\x1e\x3b\xd5\xa3\xe5\x86\xd6\xbb\x85\x25\x9b\xe1\xba\x9e\x35\xeb\xbd\xb8\xdf\xbd\xfb\xf5\x3d\xfd\x2b\xa4\x4a\xc8\x57\x76\x9c\x48\x55\xe8\xb9\xe5\xd9\xc2\x6c\xd9\x9b\x2a\xea\x98\xa7\x6f\x2d\x88\xf2\xdb\x23\x57\x1b\x4d\x73\x1d\x7f\x39\xf1\x7c\xa3\x2d\x49\x04\x54\x71\x92\x2a\x46\xba\x8c\x15\xc6\x25\x79\x0e\xb8\xa2\xa7\x9a\x5a\x4c\xb2\x82\x44\xab\x61\x6c\x53\x8a\x86\xc5\x50\x93\x29\x4e\x33\x4d\xe0\xca\xc0\xd6\x12\x10\xea\xe6\x5a\x72\xc1\x89\x85\x0f\xbe\x7e\x68\xeb\xf7\xc5\x26\xae\x8f\x57\x55\x2a\x6f\xf4\x5b\x30\xff\x7a\xdf\xb7\xda\xbf\xab\xd7\xab\x9c\x31\x37\x90\xd0\x40\x05\x60\x68\x36\x34\x6d\x59\xa1\x2d\x87\x20\x1d\xcb\x21\x25\x3d\x0e\x5c\xca\x73\xb8\x28\xe4\x70\x24\x04\xa2\x67\xda\x8a\x1c\xda\x8c\x1c\x9b\x1a\x99\x0a\x5b\xfd\x9f\xdf\xe3\x71\x9b\x5f\xf7\xbe\x37\xfa\xa7\x2e\x05\xeb\xca\x6f\xf4\xb8\xfa\x57\xdc\xb7\xc7\xcd\x8f\x0f\xdc\x1e\xb7\xf7\xf0\xfa\x2f\x1b\x37\xd0\x37\x66\x4e\x65\xce\xbf\x77\xa9\x71\x27\x28\x88\x0b\x6d\xca\x53\x21\xcf\x2f\xc3\xb5\x41\x25\xde\xdb\x54\xa0\x55\xdd\xee\xde\xa9\x73\xce\xd2\x75\x73\x33\x25\x4f\x7a\x13\x39\xbe\xaa\xaa\x91\xad\x8b\x3e\x16\xdc\xc8\xf4\xc2\x48\xd6\xa1\x20\x47\xac\xea\x6b\x2c\x13\xd0\x6c\xe8\x6b\x91\x28\x0a\xac\x4d\x19\xb4\xc2\xa9\xa6\xe6\x26\x66\x20\x17\x6e\xba\xb4\xa1\x70\xb7\x72\xe5\x4b\xaf\xbe\x79\xbf\xd6\xba\xf8\xfc\x32\x3a\xdb\x86\x39\x2d\x97\xae\x1d\xf2\x46\xc5\x46\x79\x66\x4d\xcd\x98\x32\x5e\x62\xe0\x00\x0b\x2d\xc7\x88\x0c\x51\x8f\x3d\x81\x35\x9d\x10\x80\x08\x41\x00\x64\x0a\x6b\x9e\xe7\xc8\x3a\x6f\xba\x12\xa6\x54\xc5\x87\x2c\x36\x63\xec\xca\x61\x5a\x13\x12\x7f\x3d\xb1\x75\xcb\x94\x0a\x7f\xca\x0b\x36\x3f\x3a\xbb\x7f\xc5\x80\x22\x37\x95\xce\xea\x87\x8d\x7e\xaf\xee\x3e\x61\xbe\x78\xa5\x76\xc6\x2a\x9e\xc4\x0b\x17\x14\x4c\x30\x46\xa4\xa8\x94\x24\x18\xb1\x20\xaa\x71\xcc\x79\x9a\xe3\xf1\x0e\xcd\x1a\x94\x16\x31\x84\x2f\x04\xb1\xc6\xc6\x81\xa5\x79\x10\xd0\x90\x05\x69\x29\xe9\x1f\x7f\xf7\xcd\xea\x25\x2b\x07\xf2\xe4\xc4\x2d\x7d\xea\x36\x38\xf6\x5d\x38\x9c\x11\xb5\xdc\xa5\xab\x9d\xf9\xe3\xaa\xf7\xfa\xd6\x6c\x65\x92\x38\x3b\x52\x24\x95\xb6\x39\x8d\x72\x09\x59\xc7\x11\x13\x11\xbc\xa6\xb3\x1a\x4b\xa8\xa1\x06\x2d\x86\xc1\x31\x54\x79\xc2\x27\xa1\x6c\x89\x62\xa0\x41\xc7\x49\x67\x76\x54\xaa\xc6\xf9\x6f\x9e\x6e\xfe\xe6\xce\xa3\x51\x9f\x9d\xc8\xd9\xaf\xf8\xd1\xdc\x77\x9a\x0d\xff\x75\xfb\xf6\xb7\x95\xe6\x1b\x07\x75\xfe\xba\x61\x12\x21\x46\x96\xcc\x39\x50\x90\x3d\xd3\x95\x18\x24\xaa\x04\xef\x05\xb1\x80\x04\x0f\x62\x5d\xd1\x4d\x2a\x94\x60\x14\x4a\x72\x0c\x01\x17\xf0\x24\x85\xa1\x05\x52\xa1\xeb\xfe\x6d\xc3\xe4\xbe\x30\xc7\x86\xa3\xa5\xd6\xd4\x9f\xfd\xc9\xcc\xe1\xe4\x80\x31\x5f\x77\x1a\x51\xd8\xa4\xce\xcc\xbd\x9b\x6b\x46\xca\xbc\x13\xb3\x92\xf8\xec\x78\x51\x0e\x25\xc6\xd0\x59\xc2\x0c\x1d\x16\x8b\x81\xe8\x10\x8c\xe8\x4a\xaa\x17\xf8\x2a\x64\x10\x52\x68\xcc\x52\x2e\x2f\x18\x1a\x13\xeb\x84\x18\x69\x09\x68\xe9\xe8\xa3\x87\x79\xae\xd7\x0e\x86\x2a\xc5\xdf\xbd\x3a\x75\xdb\xbc\x4b\xb9\xd7\x2d\x1b\x5b\x2a\xf3\x96\xcf\x73\x34\x3f\x06\x7b\xcc\x5f\xea\x25\xcf\x86\x45\x15\x39\x2a\xc4\x80\x71\x30\x0e\x65\x81\x15\x11\x6b\xdb\x71\x14\x92\x32\xc5\xe9\x0c\xe5\x79\xa2\xc2\x63\xe4\x79\x9a\x60\x45\x04\xe1\x91\xd2\x3f\x47\xe9\xa9\x6d\xf8\xfa\xd1\xdf\x27\xb7\x6d\x56\xca\xdf\x34\x9a\x7d\x53\x6a\x7a\xa0\x4a\x8d\x13\x77\x7f\x7c\x65\x52\x8b\xdc\xd5\xaf\x28\x6f\xe5\xdd\x5d\x7e\x4a\xf2\x6e\x57\x97\x22\x97\x52\x62\x2a\x16\xb1\x1f\xba\xba\xa7\xa8\x12\x36\x43\x33\xe2\x74\x44\xc6\xba\xc9\xa8\x2e\x21\x4b\x2c\xe9\x19\x8c\xc7\xf2\x9e\x18\x92\xae\x9a\xd8\xa9\xe5\x18\x3b\xbd\x45\xaf\x82\xeb\xbe\x51\x06\xce\x72\x7f\xed\xbe\xe9\xf3\xef\x1b\x74\xfb\xf9\x1e\xeb\x9a\x6d\x4f\x7f\xf4\xdd\x1e\xe9\x74\xc6\x04\x71\x12\x93\x2f\x9c\x40\x72\xb0\x12\x60\x24\x5b\x3e\xad\x32\x14\xcb\x0a\x06\x04\x96\x0c\x44\x22\x00\x91\x2c\x20\xc5\xf1\xc3\x20\x96\xf9\xc8\x96\x4d\x40\x62\xc4\xa7\xe5\xc5\x8f\xd8\xc9\x94\x9e\xdc\x3e\x5b\xc3\x05\x35\xbe\xe9\x31\x76\xed\x84\x09\x3d\x6f\xfe\x16\x57\x2d\x58\xe0\xf3\x83\x44\xeb\x3c\x2d\xfb\xe6\x1c\x95\xbc\xb8\xa8\xc2\x98\xb0\x55\xdb\xf0\x65\xd1\x0e\x68\x8e\x09\x45\x6c\xc4\x14\x0f\x03\x0a\x02\x2c\x38\xc8\xf2\x83\x38\x76\x15\x8a\x73\x34\xd1\x07\x8e\x44\x21\x2e\xed\x71\xb7\x77\xcf\xde\xf9\x87\xc6\x5b\x4e\xf1\xe5\x9e\xec\x58\x44\x7d\xeb\x14\x94\x76\xaf\xe9\xd0\xfc\x8b\xd6\xf3\x4f\x1f\x78\xd6\x72\xb2\xdf\x3b\x89\xc7\x35\x0d\x35\x64\x28\x95\x08\x02\x84\x03\xd6\x8f\x1c\x0a\x2b\x94\xe6\xe8\x96\xa4\x42\xd6\xb0\x49\x53\x10\x24\x0a\x60\x4d\x24\x65\x8f\x08\x7d\x09\x72\x89\x69\xe3\xfd\x5e\x76\x7c\x75\x79\x9f\xf7\xe4\xe1\x43\x9a\xd7\xef\x74\xe7\x9b\x75\xfd\x0e\xbe\x78\x56\x1a\x9e\xbb\x3e\xb1\x71\xf1\x23\x5e\x69\x22\x79\xc2\x15\x30\x36\x08\x37\x88\x7d\x80\x08\xd2\xf2\x03\x28\xeb\xbc\x18\xa8\x8c\x1c\x5b\x28\x46\xc8\x84\x21\x22\x1d\x10\x89\x46\xc8\xf0\xaa\x4e\x30\x2e\x4f\x68\x6c\x5a\x0f\xf1\xd5\xca\x05\x15\x6f\xd4\xe8\x38\x74\xf2\x8e\x3b\x9f\xae\xee\xb1\x3e\x5f\xc5\x15\x95\xa2\x3c\xe3\x87\x0e\x58\xa1\x59\x1b\x8b\x4b\xcf\x93\xa7\xb0\x0b\x69\x45\x53\x6c\x8b\x8d\x4d\xdf\x44\x34\x43\x42\xda\x74\x25\xc8\x86\x2e\xcb\x78\xbc\xe3\x71\x84\xab\x19\x1a\x22\x14\xec\x1b\x3c\x2d\x69\xae\x23\x70\x7a\xe2\xde\x70\x11\xbb\xff\x80\x9d\xa7\x27\xed\xa8\x7a\xba\xc7\xb8\x33\x8d\x53\x3a\x0e\x6d\x7a\x7c\xc0\x77\x87\xd6\x02\xe9\xcf\xc2\xeb\x5e\xdc\x2e\x94\x3c\xd4\x39\x74\x11\x50\x63\x20\x79\x8c\x2a\xcb\xae\xa5\x99\x3e\xa9\xcb\xd8\x60\x58\x64\x9a\xa4\xa5\xa9\x26\x45\x42\x21\x60\x4d\x8a\x53\x95\xc8\xd7\x65\x5b\x89\x98\xb4\x4e\xad\x7c\x27\x90\x63\x4f\xe1\x9b\x8b\x0f\x0c\x6d\x34\xab\x84\xf6\xfa\x8e\xf7\x17\xee\x88\x2a\x15\xb2\x57\x78\x53\xde\xef\xbe\xef\x66\xae\x79\x49\xa4\x8d\x2b\x31\xa3\xda\xa4\x4b\x79\x1a\xc3\x84\x1e\x6b\x00\x4e\x0b\xd8\x88\xc0\x74\x48\x47\xa4\xce\xd8\xbc\xe5\x23\x07\xb9\xa1\x1a\xb9\x36\x19\x72\xb6\x4d\x27\x16\x0f\x1a\xd6\xfe\xe8\xef\x0d\x6e\x2d\xd9\x2b\xe6\x0a\xe7\xae\x3a\x6c\xb6\x78\xb3\x29\xdb\xf6\xcb\xd3\xdc\x1b\xad\x4a\x5f\xd5\x87\x9d\x29\x92\xb1\xf5\x58\x09\x6d\x98\xd7\x1d\x53\x46\x71\xe8\x6a\x92\x14\xc7\xd0\x02\x12\x1d\xe8\x91\x1a\x98\x50\xb0\x44\xdf\x0b\x75\x03\x79\x04\x26\x6d\x4e\xe1\x91\xac\x91\x34\x67\xc3\xb4\x36\x3c\x31\xff\xb7\xbb\xfc\x5e\x59\x53\x2a\x2e\x7f\x7c\xb9\x26\xfd\x73\xfd\xcb\xef\xde\x11\x73\x99\x4f\x9b\x3d\x2f\xf1\x84\xbd\xfe\xd6\xc5\x8c\x79\x89\x84\x06\x41\xf8\x7c\xcc\x05\x92\xe3\x2a\x84\xc3\x63\x02\x51\x31\xe5\x7b\x04\x19\x32\x1c\x29\x8a\x8e\x27\x47\xd0\x86\x9c\xe0\x44\xbc\xa1\xd3\x22\x29\xb9\x2a\xeb\xa4\x35\x88\xdb\x4d\x36\xb5\x28\x5f\xf4\xe7\xcc\x13\xab\x7d\x73\x72\xa9\x32\x6c\xe0\xb6\x96\xe4\x92\x5a\x85\x5e\x6b\x31\xe7\x7e\xc1\x7c\xfd\xcb\x6d\xcd\x18\x98\x23\xb1\x40\xbb\xaa\xf8\x2c\x27\x22\x8e\x63\x8c\x40\xb6\x04\x42\xc7\x3a\xd4\x38\xc3\xe5\x19\x22\xe0\x7c\x11\xc9\x3a\x0d\x44\xde\xb6\x75\xdb\x94\x4d\xe0\x58\xaa\x9b\x8e\x56\xcc\xe3\x15\xcd\x32\x51\xe5\xf8\x8a\x65\x36\xc9\xf5\xea\x7e\xfb\xa4\x74\xed\x52\xc3\x7f\x28\xbf\xeb\x12\xb7\xb4\x0b\x08\x9a\x7e\xb2\xee\x44\xea\x24\x69\xc5\xf5\xf1\x6d\x4b\x8f\xcc\x74\xea\xd8\xf0\x92\xdd\xc4\xe1\xa7\x76\x3f\x3c\x70\xf8\x59\xcb\xb7\xfb\x6d\xbc\x3f\xfa\xcd\x5a\x55\x3f\xfc\x34\x89\x12\xd8\x14\xe1\x49\x96\xae\x21\x4c\xb0\x02\x8b\x18\x03\x40\xca\x31\x75\x9b\x25\x43\x51\x08\x7d\x1d\xca\x84\xa4\xd1\x3c\x8f\x19\xac\xc5\x9a\x2c\x7b\x28\x48\xfb\x3d\x9a\x6e\x2a\x34\xf7\xfd\x6d\xfd\x1f\xcc\xff\x78\xcf\xf8\xab\x5d\x06\xb3\xc3\xa6\x14\xcb\x72\xf6\xad\x47\xdb\xb2\x33\x99\x27\xd4\xcb\xbf\x28\x63\xd8\xd9\xc4\xf4\x03\xc8\x84\x2c\x36\xa1\xa7\x53\x91\x20\x51\xb1\x64\x99\x20\xa4\x43\x84\x90\x07\x43\x1d\x21\x93\xd3\x0d\xd2\xc7\xa6\xc3\x73\x12\xcf\xa1\x40\xf8\x8f\xcc\xf9\x7f\x8f\xbb\xe1\xc6\xd0\xca\x6d\x86\x17\x18\x33\xa7\xd2\xe3\xd5\x17\x6f\xbe\xb3\x76\x6a\x10\x1e\xd9\xd5\xec\xc9\xbe\x2e\xd7\xcf\xd4\xad\x30\x32\x77\xeb\xe4\xf9\x13\x5f\x67\x3d\x25\xb6\xbc\x48\xa3\x74\x51\xc5\x11\x0d\x01\x41\x39\xa6\x10\x50\x94\x8a\x80\xe5\xc8\x81\x21\x4b\x02\xa5\xb3\xff\x88\x35\x14\xb0\x39\x6c\xa7\x53\xda\x66\x3b\x59\x34\xdb\xda\x06\x27\xca\x6d\xce\xf4\xe8\x41\xee\xe5\x9b\x82\xfd\x47\x46\xaf\x9c\xde\xb9\xe6\x95\x3a\xad\xa7\xfd\x79\xad\x5e\x58\x38\x95\xf9\xe4\xeb\xd4\xa5\x7f\xe6\x92\xcf\x1a\x8b\x83\xea\x5b\x4a\xbd\xe6\x35\xfb\x5f\x2e\xd8\x5f\xdb\x5d\x7d\xd1\x07\xce\xe9\x26\x8d\xcd\x12\xc9\x03\x53\x22\x99\xb7\x74\x44\xb3\x88\x17\x54\x3e\x62\x8c\xc0\x44\x3a\x4b\x19\xae\x24\xfa\xaa\xc5\x29\xa2\xc5\x71\x9e\xe1\xd3\x48\x77\xfc\x98\xd6\x2d\x41\x73\xff\x09\xf3\x4b\x6d\x3e\x76\xf7\x19\x0d\xdf\x5c\x5c\x6c\xfd\x2d\xac\x5f\xea\xf0\xe3\xf8\xf6\x3d\xfa\xb1\x57\x2b\xcc\xbe\x7a\x8c\xef\x71\xa9\x7e\xcb\x47\x65\x32\x26\x0e\x97\xd0\xda\x8d\x50\xd6\x54\xdb\xa1\x4c\x2f\x8a\x29\x40\x10\xba\xae\xc9\xa4\xa0\xf8\x96\xc9\x20\xd6\xd7\x70\x60\x90\x2a\xb2\x35\x9b\x50\x39\x13\x41\xc3\x27\x40\x02\xef\x33\xbe\xd7\x4d\x6b\xfb\x4c\xba\xcd\x8b\xfd\xb3\x9a\x4d\xcb\x9b\x2f\xdf\x05\x59\xbb\xbd\x70\xce\x07\x43\x0e\xbd\xf3\xd3\xdd\xcc\x55\x66\xf6\x4a\x5e\xc2\x4a\x08\x62\x00\x1c\xc3\xc5\x31\x22\x69\xa0\x69\x9c\x2e\x28\xb1\x23\xf9\xc8\x04\x1c\x76\x24\xc6\x61\x2c\x89\x0f\x78\x4f\x56\x7d\x4f\xc4\x98\xc0\x04\x4a\x1c\x8e\xec\x6c\x67\x1a\x0e\x6d\x97\x27\x6b\xc7\xea\x93\xaa\xed\xdc\xc0\xe4\xc8\xb6\xed\xbb\x7c\xab\xb3\x7c\x34\x6f\x7c\x3b\x5c\xae\x4c\x95\xbc\xc9\x03\xc8\xa0\x90\xc6\xd0\x44\x8c\x6a\x5b\x64\x2c\x03\x51\x44\x84\xab\x86\x71\xec\x07\xa1\x12\x10\xba\x43\x70\xa4\x25\x8a\x9a\x2c\xea\x14\xa7\x48\x2c\xcf\x43\x47\x4f\x7b\xc3\x5f\x35\xee\xb2\xa8\xd4\xd7\x7f\x7c\xa9\x3f\x9c\xf7\xca\xda\x2f\x88\xf7\x5b\xd6\xba\x3d\x1e\x15\xcf\x34\x3f\x7c\x0e\x57\x55\x7e\xf2\x71\xc6\x96\x8d\x25\xbc\x61\xd2\x55\x65\x9a\x77\x69\x99\xb5\x0d\x81\xf2\x4d\x42\x71\x38\x51\xd6\xe9\xc8\x36\x91\x49\x00\x21\x52\xe4\x88\x56\x3d\x15\x79\x24\xb6\x3c\xdf\x90\xfe\x23\xe0\xff\xef\x71\xf7\xf4\xfa\x6d\xd4\xe4\x7e\x15\xe6\x61\xf9\x56\x4d\x3a\x9b\x87\x73\xd7\x7e\xd0\xb8\x41\x8e\x21\x83\xb7\xce\x6d\x9c\x35\x53\xe5\x8e\x19\xdb\x26\x9c\xd0\x9f\xf0\x61\xe8\xcb\x1c\x15\x61\x99\xa6\x3c\xce\xe7\x7c\x4f\x14\x41\x4c\x38\xb1\x41\xc4\x81\x14\x00\x8e\xa0\x6d\x55\x71\x1d\x17\x43\xc7\xf4\x00\xf5\x3f\x0b\x90\xd3\xf6\x72\x07\xf7\x98\xda\xb3\x5a\xad\xb5\xed\x9f\xbd\xd3\x77\xcc\x2f\xeb\x17\x1f\x17\xbf\x70\x8f\x1d\xdc\xc5\x5c\xea\xfd\xf5\x16\xaf\xde\xee\xf1\x9b\x92\x88\xe5\xe1\x68\xca\x96\x59\x00\x1d\xd6\x22\xd5\x10\xaa\xba\x62\x62\x2a\x72\x75\x81\x61\x18\x42\x26\x59\x85\x60\x5d\x57\x14\x43\x8b\x31\xa1\x26\xf0\x74\x94\xce\x72\xf5\x3c\xfd\x2a\x6f\x6f\x33\x7a\x76\x91\x2e\x23\xb2\x4f\x1d\x1c\x6e\x2b\xbb\xce\xff\xb5\xce\xe2\xf2\xb2\x72\xf1\xfd\x51\xfd\x9a\xb4\x60\x72\x24\xcf\x86\x45\x92\x75\x49\xc8\xf0\x06\x66\x15\xd6\x72\x4d\x2d\xd4\x4d\x35\x14\x48\xdf\x95\x34\x96\x87\x61\x44\x29\x32\x80\x94\xfd\xff\x47\xa8\x06\x45\x84\x48\x49\xdc\xeb\xe8\xf2\xec\x46\xdb\xd2\xd3\x2a\xac\x78\xe6\xb1\xcb\xdb\x6f\xc9\x32\x36\xb8\x5b\xbb\xe8\xbb\xf6\xee\x1d\x75\x57\xbd\x59\xf6\xc7\xfe\x25\xd4\x24\x12\x34\x04\xde\xf0\x2d\xe4\x7b\x98\x66\x1c\x4d\x56\x42\xdf\x71\x68\x5e\xd1\x18\x47\x23\x38\xf8\x0f\xb7\xac\x21\x3d\x8c\xa1\x45\x13\x96\xa7\xf8\x8e\x1b\x25\xc8\x02\x27\x5c\xfe\xf6\xcd\x49\x73\xbc\x19\xfb\x7a\xbd\xcc\x32\x74\xa1\x7f\xef\xd7\x3a\xf1\x27\xdd\x7f\xa3\x96\xb7\x98\x50\x2c\xd3\x57\xe5\x9a\x4f\x4b\x22\x95\x4a\x72\x44\x41\x54\x04\x5a\xa0\x65\x13\x2b\xb6\x80\x15\xd3\xd5\x0d\x0f\x91\xba\x12\x86\x3c\x14\x0c\xc7\x8a\x0c\x37\x20\x78\xcd\x56\xf5\x08\x45\x6c\x02\x19\xd4\x3f\x37\x2e\x68\xdf\x4e\x3d\xfc\xe4\x5a\xe5\x0e\x03\xe2\x47\x54\xab\xdd\x77\xca\x6e\xe9\x59\xfc\x7c\xf6\xab\xaf\xef\xaf\xc8\xcf\x2f\x96\xc4\xd6\x0c\xed\x93\xbc\x8e\x1d\x99\xf0\x68\xca\xb6\x0c\xa0\xf9\xa6\x13\xd8\x12\x42\x28\x14\x05\xc0\x8b\x61\xec\x60\x56\x32\x2c\xd3\x8e\x0c\x52\x88\x58\x4e\x09\x13\x17\x5e\x9f\xef\x7e\x67\xe0\x83\x43\x6b\x7f\xc3\x57\x67\x10\xef\xcd\x24\xae\x65\xfa\x6b\xeb\xb6\x4f\xaa\x66\xbf\x30\xa0\x55\xf7\xe7\x13\x3f\xe8\x35\x2c\x79\xcf\x8e\xf6\x49\x4e\x0c\x38\x14\x2a\xb4\xe6\x70\x22\x1b\x07\x98\x27\x7d\x92\x15\x04\x68\x89\xaa\xad\x5b\xd8\xd4\x74\x40\x1a\xb2\x22\x01\x84\x15\x09\x73\x09\x7a\x1d\x87\x4a\x54\x5b\x7e\xe3\xed\xf1\x0b\x1f\xf7\x39\x67\x8f\x1e\x72\xf0\xda\xf3\x1f\x72\xe5\xcc\x5b\xb2\xf8\xa1\xbf\x2a\x9e\xdc\x3d\xed\xd9\xa1\x9b\x49\x94\x17\xe3\x5c\x1b\xf3\x26\xa4\x6d\x44\x5b\xa2\x15\xca\x58\x02\x24\xd6\x05\x19\x43\xe4\x4a\x84\x43\x72\xc0\x67\x69\x11\x2b\x1c\xe5\xc7\xac\x1c\x01\x6c\x24\x56\x62\x7f\xaf\xfe\x9c\x2e\x53\x8b\xb9\x34\x27\x2f\x7f\x68\xee\x6e\x9c\xab\x30\xbd\xef\xd4\x99\xdf\x2f\x94\xea\xdd\x6d\xd4\xe6\xcb\x43\x36\x65\x6c\x6c\x91\x98\xc1\x28\x73\xbc\x1b\x9b\x31\x50\x80\x69\xfa\x2c\x49\xda\x91\x6d\xc4\xb2\x4d\xf3\xb6\x6b\x09\xb1\x17\x3a\x98\xa2\xd4\xd8\x46\x14\x22\x43\xc2\x54\x95\x7f\x8a\xb8\xa5\x7e\x72\x03\x9a\x97\xec\x57\xa2\x30\x37\xe0\x95\x96\x1f\xfe\xd9\xfd\xe7\x41\xaf\x54\x28\xfd\xe8\x62\x61\xeb\xb5\x16\x55\x1b\x1f\x69\x3e\x08\xf4\x2d\x9b\xc4\xc9\xa5\xe7\x06\x80\xe7\x80\x6d\x51\x8c\xca\x83\x10\xb0\x0a\x17\xc4\xac\xc1\xc0\x50\x0c\x7c\x5f\xa3\x43\x2a\xd4\x45\x97\xc0\x2c\x32\x69\x9f\x94\x1c\x39\x1d\xda\xcb\x8a\xae\x79\xb2\x7d\xb7\xff\x6a\xd6\xc7\x77\xb3\xac\xfe\x69\x64\xb5\x45\x93\xae\x7f\xc5\x75\x9f\xb6\xf4\xd5\xa6\x7b\x1e\x76\xb8\x1b\x6c\xa8\x91\xc4\x16\xa3\xe0\xb1\x31\x23\x22\xdd\x57\x99\x50\xd1\x74\x37\xe6\x11\xa6\x54\x0a\xbb\x0a\x41\xa8\x16\x85\x48\x21\x50\xc4\x20\x66\x48\xd5\x32\x29\x1f\x42\x3b\x1d\xae\xf1\xa2\xd5\xdd\x3a\x16\x79\x52\xa1\xc2\xc4\x55\x87\xe3\x3f\x36\xb6\x5f\x5e\x67\x66\xc1\x8d\x45\x95\x1e\x45\xdf\xaa\x33\x7e\xf6\xc2\xce\x47\x07\x27\xef\xd9\x51\xc0\x11\x14\x52\x0b\x19\x01\xfa\x82\x20\x07\xb1\x1e\x1a\x1e\x6f\x3a\x32\xf6\x1d\x96\xb0\x68\x8b\x03\xb2\x00\x29\x9e\x06\xba\x8e\xcc\x90\x96\xd3\xe3\x43\xf5\x30\xc2\x49\x33\x5b\x16\x9e\xf1\x7e\xc7\x3e\x55\x56\x5e\x9d\x71\x64\xc7\xc6\x39\xfb\x3e\xf8\x23\x2f\x5b\x3e\xd3\xba\xfc\x0b\xe9\xdb\xad\x92\xf7\xf4\x42\x01\x48\x0e\x83\x0d\x87\xb3\xc4\x90\x97\xf9\xc0\x95\xa1\xaf\x38\xae\x6b\xd8\x8c\xc4\x33\x92\x8e\x19\x8a\xc2\xae\xa7\x3a\x04\x96\x62\x4f\x97\x1c\x98\x8e\x4c\xf8\x0c\xf5\x52\xf5\xbd\xa0\xb0\x33\x69\x7f\x96\x19\x45\x77\xb3\x3b\x37\x16\x7d\x67\x56\xd9\xc9\x45\xda\x1c\xda\x33\xae\xf9\xcd\xa3\xce\xf7\xa9\x62\x63\xf3\x2f\xff\x58\x32\xa2\x13\x5c\x5f\x88\x99\xf7\xa0\x5c\xc7\x1b\xc1\x79\x23\x65\x6d\xcd\xdb\xcb\x37\x75\xfa\xad\x52\x85\x33\xc3\x9e\xde\x4e\x5e\x8e\x67\xd3\x8e\x0a\x55\x8e\xe1\x44\x55\xf5\xa5\x48\xa3\x9d\xc8\xe2\x34\xc9\x8e\x38\x86\x8e\x60\xa4\xab\x81\xa5\x39\x8c\x61\x00\x32\xf0\xe9\x00\x05\x8a\xac\xa4\x75\x85\x61\xbb\xbb\xa0\x4f\xe6\x71\x79\x37\xf5\xc8\xf6\xc5\xd3\x52\x0f\xcf\xcd\xfe\xf9\x3b\xfc\xee\xba\xcb\x95\x1a\xab\xbb\x95\xa0\xc1\xe5\x0b\xc9\x7b\xa8\x1c\xe1\x89\x8a\x2e\x2a\x4e\x60\x71\x8c\x63\xcb\xb4\x63\x90\x8a\x1c\x19\x90\xa6\x2d\xce\x93\x02\x5f\x61\x3d\xd3\x76\x39\x2f\x56\x09\x9f\x91\x3d\x1c\xc1\xb4\xb1\x71\xd2\x8e\x0e\x23\x5f\xaf\xd6\x70\xcf\xbe\xeb\xed\xa6\xb7\x2b\xa4\x5d\x3c\xfd\x27\xe3\x64\xe9\xf6\x7e\xdf\x05\xd2\x5a\xf9\xe1\xf1\x1d\xbf\x24\xef\x76\xe9\x00\x44\x8a\x00\x60\xac\x58\x76\x10\x41\x3e\x40\x1a\x25\x12\x84\x4a\x29\xb2\x8e\x65\x0b\x06\xac\xe0\x1b\x0c\x49\x44\xb6\xa6\x72\x32\x4b\xdb\x28\x4e\x5c\xa3\xf4\x94\x87\x34\xda\x44\x7d\x37\xae\xd6\xc0\x61\x77\x96\xef\xdf\xb5\xaa\x78\x25\xb9\x7d\x9d\x73\xe3\xda\x7b\xf5\xf6\x96\x7a\xeb\x8d\xd2\x41\x12\x99\x15\x2e\x25\x68\x8c\xa9\xd2\xa2\x29\x48\x9c\x05\xa0\xea\x53\xbc\x02\xc3\xc8\xb3\x38\x4b\x30\x2c\x1d\x62\x97\x11\x1c\x4a\xd7\x78\x8e\x80\x12\x32\x88\x04\x02\xd6\x17\x8f\x17\x78\xfa\xd9\xe4\xf1\x4d\xbe\xcc\xda\x63\xce\xc4\x43\xef\xb8\x4d\x0f\xef\xbe\x9d\x72\x3e\xf7\xa8\x82\x0b\xb2\xdc\x1b\x3f\x7a\xdd\xb9\x24\xe2\x80\xa2\xd8\x01\x2a\x1d\x5b\x8e\xa0\x05\xa1\xe0\xfa\x58\xa5\x35\xd2\xa5\x6d\x53\xf1\x18\xc7\xd2\x79\x0a\x1b\x56\x28\x31\xb4\xae\x39\x7c\x04\x44\x2e\x4e\xd0\xa2\x79\xb9\x27\x1a\xf4\xde\xf9\x09\x8b\x5e\xf9\xaa\xc8\x5b\xe1\xaf\x47\xfb\x5f\x89\xbf\xdf\xd5\xab\xfa\xe8\xdd\x73\xe6\xd5\x5a\x3c\x3f\x1c\x96\x31\x9a\x7c\x42\x7f\xe2\x6b\x4e\x08\x60\xac\x03\x33\x8a\x5d\x95\xa7\x83\xd8\x52\x91\x6a\x89\xaa\x44\x08\x92\xa7\xd3\x0c\x67\x48\xbc\xa8\xfa\x82\x26\x22\x88\xf0\xbf\xf0\x26\x69\x43\x79\xaf\x46\xaf\x57\xab\xbf\xf0\xaa\x35\x6e\xef\x1c\x7b\xf0\xfb\xc5\x0b\xdb\x6d\x53\xd4\xba\xbf\x2e\xba\x5a\xed\xf0\xa4\xe5\xb3\x16\x0c\xc9\x18\xde\x24\xb1\xce\x0f\x19\xc2\x80\x96\x15\xc1\xa1\x58\x8e\x10\xb5\xc8\xe0\x7d\x23\x08\x3d\x3f\x22\x51\x10\x8b\x96\x81\x20\x4b\xfa\x8c\xaa\x8a\x94\xca\x60\x05\xa8\x76\x90\x36\x94\xc3\x4a\x8f\x7a\x76\xec\x03\x37\xf5\xc8\xd2\x6d\xf3\x1f\xa5\x5a\xcc\x98\x5b\x38\xdf\x98\x1e\x6f\xf7\xd9\xda\xa3\xfc\x7b\x17\x47\x7e\x6c\x5e\x49\xde\x71\xb1\xfd\x8f\x42\x49\x04\xa4\xc8\x62\x1f\x40\x22\x46\x5c\xc8\x9b\x1a\x12\x80\x42\x79\x2e\x32\x42\x89\x37\x7c\xc3\x57\x39\xc7\x54\x62\x59\x20\xff\x07\xdf\x9b\xf6\x86\x0f\x35\x19\x56\xb7\x57\xb7\x8d\x73\x7f\x7d\xa7\x51\xe5\xdf\x7a\x9f\x19\x54\x2e\x7b\x7b\xb2\x43\xaf\xe9\xab\x7f\x28\x52\x6f\xf0\x6f\x7f\x2d\xc9\x58\x97\x3a\xb1\xbc\x95\x24\xa9\xaa\x27\x73\xd8\x97\x79\xcf\x64\x22\x9a\x8a\xc4\xc0\xb6\x02\x85\x71\x02\x96\x52\x01\xcb\x04\x3e\x15\x28\xd8\x97\x45\x0b\x42\xd2\x67\xb4\x04\x8d\x97\x27\xfa\x9c\x3e\xb9\xab\x20\xa1\xc5\xa4\x79\xd9\x9e\xfb\xa7\xd7\xac\x99\x67\x96\xdb\xd8\x51\x2d\x59\xf9\xa5\xb8\xff\xe0\x1b\x63\x92\xb7\x59\x02\x85\x32\x0b\x69\xd1\xf0\x28\x47\xf6\x03\x05\x49\xd8\x0f\x78\x53\xe3\x28\x99\xb0\x58\x9b\xa5\x48\x91\x45\x3a\x6d\x31\x6c\x28\x50\x96\x47\x70\x40\x21\x94\x74\xfa\x76\x17\x6a\xb4\xf8\xfd\x45\xad\xd2\x97\x7b\x75\x6c\x53\x44\x1b\xf5\xf0\x58\xf9\xc3\x94\xfb\x64\xf3\xc5\x6e\x1f\x1d\xff\x65\xd5\xb4\x2c\xbf\x38\xff\x42\x94\xff\x1d\xf0\x28\xa5\x79\xae\xdc\x99\x9a\xa6\x46\x94\xf7\xbc\xf6\xf1\xb6\x9a\x5d\xbf\x58\x3a\xa6\x4f\xdf\x3b\xd3\xb4\x82\x37\xaa\x4e\x1d\x76\x63\x67\xe3\x9e\x33\x3f\xd8\x55\x65\xed\x91\xf7\xe5\x8c\x6d\x32\x4b\x68\x71\x91\xc9\x90\x40\xa4\x81\xcb\x0b\x1c\x19\x91\xae\x62\xe9\x31\xa5\xc5\xa6\x0c\xfc\x90\x72\x65\x1a\x11\x02\x6d\xd3\x3c\x94\x1d\x1d\x6b\x62\xc0\x3a\x20\x1d\xc0\xe7\x9c\xcf\x3b\xf6\x9b\x7f\xec\xea\xd2\x25\x15\x73\xed\x5c\xd2\xe2\xf6\xc4\x71\xf3\x82\xb6\x11\x7a\x50\xf7\xc9\x7b\x45\xfb\x7b\x46\x94\xb1\x4d\x1b\x09\x3f\xa1\x16\xe9\x81\x27\xfb\x5a\xc0\x91\x06\x60\x49\x52\xfb\x87\xe9\x49\xd8\x11\x5d\x4a\x06\xaa\xab\x89\x3e\x90\x35\xd7\xe6\x7c\xa4\x40\x9f\xe2\x7d\x06\xa5\xa3\xd8\xf8\xfb\xeb\xcb\x3f\xed\x6d\x1e\x6d\xda\xee\xd0\x21\xaf\xdb\xdb\x55\x2a\xec\x1b\x69\xac\x3f\x69\xad\xfd\x6c\xd5\x8f\x6b\xae\xaf\xad\xc7\x5e\x4a\x22\x1e\x92\x09\x63\x29\x92\x21\x41\xd2\x11\xa1\x23\x4e\x75\x65\x0b\x88\xc8\x93\x08\xec\xb0\x88\xf5\x18\x95\x60\x90\x49\x69\x8c\xeb\xbb\x01\x14\x58\xa8\xc6\x89\x53\xf4\x8b\xd3\x2f\xf5\x9e\xa6\x4c\x78\xd0\x65\x34\xfc\x4c\xdd\x01\x34\xe5\xd8\x96\x8d\xd5\x7e\x1d\x33\x7f\x7b\x2b\xa9\x5a\x57\xeb\xe8\xfe\xe4\xbd\x6b\xc5\x24\x69\x3a\x0a\x08\x52\xe4\x62\x57\x32\x09\x96\x32\x6d\x44\x1b\x16\x30\x48\x9e\x0c\x58\x5a\x43\x8c\x6e\x8a\xd8\x30\x28\x47\xc3\xb1\xa2\xeb\x20\x1d\xe5\x99\x3d\xa7\x5e\x50\x53\xab\x3d\x1a\x77\x65\xc9\xb1\xcf\xdb\x8d\x1a\x31\xe6\xe3\x5b\x47\xdb\x76\x9c\xd2\x76\xf6\x81\x4f\x5b\xce\x6e\x72\x5e\xee\x9b\xbc\xaa\x82\x23\x4c\xde\xa7\x75\xd7\x32\x4c\x87\xd1\xa0\x62\x63\x41\x8b\x5c\x89\x92\x41\x2c\xd3\x92\x11\x42\x8e\x57\x62\x93\x93\x71\xac\xc9\x8e\xaa\x23\x27\x32\xd3\x20\xca\xff\x0e\xf8\x97\xd2\x3c\x73\xb9\x94\xff\xc3\xd4\xf2\x52\xc0\x4f\xd7\xa2\x4a\xb8\x5e\x63\x77\xf9\xf5\x57\x77\xf6\x1e\xdf\xef\x52\xa5\xac\x53\x77\x19\x1b\xee\x71\x85\x66\x74\x5f\x36\x23\x89\xf2\x87\x04\x13\x38\x2e\x8e\x08\x9a\x72\x29\xda\x17\x44\x86\xd2\x68\x2a\x32\x2c\x0b\x49\x48\x97\x25\x89\xf0\x18\x60\x13\x6c\xe4\x02\x87\xc5\x9e\xc6\x2b\xe9\x08\x8c\x54\xeb\x39\x6a\xde\xd4\x3f\xaa\x5d\x2e\xb7\x65\x68\x8f\xa9\x97\x41\xeb\x3a\xef\x34\xde\x52\xb4\xc1\xed\xd1\xe7\xca\xfc\x3e\x7f\xd7\x57\x39\x4e\x25\xb1\x6e\xb2\x45\xd2\x8e\x0c\x46\x51\x05\xd5\xe4\x23\xd5\xb5\x59\xd6\xb1\x62\x11\xd2\x61\x4c\x41\x82\x0a\x45\x93\xd2\x43\x4a\x21\x24\x17\x22\xca\xc7\xc0\x95\x13\xbf\xd6\x95\x9f\x8d\x98\x3a\x61\xdf\xee\xd2\xd2\xa2\x63\x15\x3b\xbd\xf9\xbc\x95\x82\x9f\xc5\xd7\xaa\x02\xf2\x91\x9b\xe5\xd9\xc4\x0a\x65\x92\x37\xdb\x41\x48\x25\x6c\x1b\xf8\x50\xa7\x49\x57\xe7\x79\xa4\x31\x91\x0d\x24\x5d\x8f\x68\xc2\x88\xa0\x1b\x3b\x80\x62\x2d\xe0\xd0\x9a\x42\xcb\xae\x41\xa9\x4a\xa4\x25\x3e\xf2\x83\xe3\x2f\xef\x0d\x5a\x5b\x54\xe4\x4a\xdd\x7d\x39\x60\xd7\xc9\x9f\x6b\x1e\xad\xf2\xfa\xf0\x4d\x3f\x39\xc7\xe6\x8e\x1b\x34\x70\x55\xc9\xe4\x91\x14\xa1\xad\x6b\xb2\xae\x9a\x32\x46\x18\x90\x81\x46\xf0\x92\xef\x23\xa0\xc0\x40\x67\x01\xe7\xa9\x22\x14\x19\x31\x70\x7d\x05\x58\x8a\xa7\x33\x0e\x64\xd1\xbf\x61\x72\x0f\xb3\xff\x77\x18\xcb\x94\xa6\x55\xb3\x0d\x4d\x95\x65\x68\xfb\xc5\x45\x3f\xce\xea\xfd\xfe\xed\x57\x9e\xbe\x77\xed\x01\x37\xed\x50\xf1\x49\xd7\xf2\x76\xbf\x38\x77\x59\x8f\x3f\xde\x1a\x3d\x34\xc8\x98\xa8\x54\xe2\x2c\xc3\x08\x54\x1d\x09\x1a\x65\x73\xc8\x91\xa1\x43\x28\x56\xc0\x60\x83\x74\x21\x90\x45\x9f\xe4\x18\x59\x33\x54\x96\xd1\x64\x93\x54\x7c\x40\xb3\xc0\x21\xd3\x66\x19\x87\xd6\x7e\x51\x6f\x4f\x96\xe3\x0f\xfb\x6c\x8e\xde\x69\xf2\x9d\xda\x7b\x45\xf5\x2b\x83\xaa\xbf\x3e\xfb\xc7\x1d\x23\xc9\x8f\xb3\x2e\xf8\x20\x63\xda\x45\x09\xfd\x3d\x17\xda\x8e\xe8\x92\x3e\x72\x8d\x90\x13\x49\xcb\xf7\x55\x42\x65\x48\x2a\x50\x6d\x1c\x3b\xbe\xc9\x11\xaa\xe4\x39\x1e\xc9\x71\x40\x41\x24\x23\xc6\x20\x9d\x25\xcf\x25\xcb\x4e\x3c\x3b\xed\xd3\xc9\xe6\xcc\xa6\xed\x52\x6e\xce\x97\x7e\x5f\xb3\x0f\x64\x1f\xf7\xc1\xeb\xbb\xee\xdf\x9c\x9d\x75\xca\xc5\xd2\x19\x63\x10\xa5\x43\xa3\xd0\x02\x4a\x91\x28\x5b\xd1\x6d\x31\x66\x45\x0b\xc5\xb6\xc8\x99\xba\x2a\xf1\x8c\x1f\x23\xce\xf0\x24\x9e\xf2\xf5\xc8\xd1\x0d\x89\xf5\x7c\x45\xc0\x28\x71\x22\x50\x67\xc4\xf4\x6a\x9d\x87\x6d\x2a\x6a\xe4\xda\x93\xf3\x48\xcd\x65\xef\x5e\xaf\xbb\xa8\x7d\xfb\x8a\xf5\x1e\xfa\x57\x9e\x8d\xdb\x3f\xef\x56\xd1\x24\x66\xcb\xa4\xe2\xd0\x82\x49\x1b\xa1\xca\x50\x9c\xa1\x2b\x36\xe6\x55\xcc\xb9\x50\x51\x50\x14\xba\xb2\x6c\x63\xcf\xf0\x45\x82\xf5\x4d\xc1\xe1\x11\x6d\xb8\x42\x1a\xbe\xdf\xdf\x0d\xef\x53\x9a\x67\xc9\xf4\xf6\xe0\xd4\xd9\x59\xef\xd6\xd9\x07\x4c\x98\x94\x29\x47\xbc\x47\x3e\x3c\xb1\xd9\x1b\x44\x81\x06\x5f\x67\x09\x9b\x99\x4d\xeb\x0e\xce\xd9\x60\x6f\x8d\x23\xc9\x63\xe6\x22\xd3\xe7\x41\x1c\x38\x0e\x45\x9a\xaa\x28\xba\xb2\x1b\x78\xb1\x24\xea\xa1\x2d\xd1\xaa\x84\xc5\xc0\x20\x30\xe5\x40\x45\x73\xec\x08\x50\x04\xaf\x1b\xac\x97\xd8\x8e\xbe\xdf\x75\x27\x5e\xdc\xbb\x49\x95\x7d\xeb\x0b\xd5\xec\x52\x7c\x64\xd6\xe6\x25\x4e\x56\xff\xbd\x72\x87\x6c\xcb\x66\xef\x9e\xff\xac\xfe\x47\x95\x93\xc8\x19\x0d\x30\x26\x64\xc6\x64\x58\x5d\x93\x7d\x59\x96\x5c\xcd\xf3\x48\x51\x12\xa2\x80\xa0\x09\xc8\xe8\x36\x22\x79\xcf\xe7\x10\x06\x0c\xe9\xdb\x3c\xfb\xcf\x41\x6c\x5a\x3b\x1a\xb4\x6d\xe7\xf7\x23\x3b\x34\x3e\x37\xa9\x65\x5b\x79\x43\x9b\xf6\x55\x4b\xb6\x3e\x9b\xa5\x4c\x34\xf7\xed\x6a\xa7\x73\x9c\xbc\x55\x5f\x4e\x5e\x91\x88\x3c\xd5\x46\x34\xeb\x62\x9e\x62\x64\x3f\xd6\x14\x5d\x90\x65\x16\xdb\x48\x00\x96\xae\x43\x82\x56\x1d\x19\x93\x88\x75\xb4\x50\x0c\x91\x8d\x42\x8c\xd2\x51\xac\x7b\x77\x66\x9c\xab\x51\xc5\xe1\xbd\xbe\xc8\xdb\xeb\xb7\xce\xcd\x37\x7e\xbe\x7d\xf0\x0b\x8f\x19\xb9\x28\x1c\x76\xb7\xca\xc5\x19\x1b\x9a\x24\xb1\xe7\x6b\x18\x04\x13\x00\x1d\x06\x34\xef\x04\xa1\xab\x52\x1e\xc4\xc8\x0c\x45\x4c\x02\x01\x10\xbe\xef\x50\x42\x80\x3d\xcf\xc6\x2c\x46\x16\x43\x63\x15\xa7\xb3\x92\xfd\xd6\xb5\xef\x87\x7f\x75\x77\x6b\xad\xa1\x87\x2e\x4f\x9e\xf3\x63\xbf\x56\x1f\xd5\x9c\xad\x0c\x9d\xd2\x7d\xe7\x8f\xdc\x4f\x42\xf6\xda\x8b\x32\x06\x8d\x4e\x78\x64\x27\x70\x04\x8e\x92\x0d\x5a\x75\x3c\x5e\xb7\x48\x83\x34\x3d\x8b\xf4\x28\x39\xa0\x81\x69\x31\x9a\xae\xb0\x32\xd6\x1d\x1a\xc7\x82\x14\x19\x18\x33\xe8\xdf\xa3\x96\x7f\x65\x67\x7f\x87\x95\x48\x69\xde\x38\x57\x96\xff\x23\xd6\x38\x2d\x6f\x8b\x22\x93\x7e\xca\xda\xaa\xc0\x58\x90\x65\xc2\xad\xc6\xf9\xf7\xae\xbf\x73\x64\x6e\xf1\xfa\xe7\x5e\x1c\x7a\x3a\xed\xf8\xf2\x57\x32\x46\x9e\x4b\x98\xea\x30\x14\x25\x47\x02\x07\x7d\xda\x15\x80\xc0\x32\xb2\xe5\x86\x3a\xf4\x74\x8b\xf0\x74\xdd\x24\x62\x1d\x28\xbe\x6b\x98\x24\xad\xeb\x04\x1b\x42\x1a\xab\xe9\xa4\x3a\xbd\x3f\xfd\x7e\x33\x37\xfb\xaf\xf1\x5d\x86\x4f\xbb\xba\xc1\x6a\xe5\x0f\xec\xfc\x7b\xe9\x9a\x27\xc6\x7c\x7c\xa0\xd4\xbc\xda\x2b\x9e\xe4\xfb\x2d\x79\x47\xd6\xff\xe1\xe0\x29\x02\x41\xce\x21\x55\x47\x33\x39\x4f\xb4\x2c\x2d\x12\x00\xe0\x7d\xc5\x41\xa1\x2a\x06\xbc\xcf\x00\x5d\xc6\x94\x8c\x68\x4f\x21\xa0\x99\xf8\xc8\xa8\xf0\x81\xa8\xe1\x38\x7f\xc0\x96\xf7\xbb\xaf\xae\x3e\x62\xfb\x87\xdd\x56\x4c\x7d\x5e\x70\xe3\xf2\xfc\xad\xcf\x35\xfc\xe9\x40\xd3\x2c\x19\x03\x1e\x26\xde\x78\xe2\xc5\x46\xc8\xc4\x5a\xe0\xeb\xbe\x0f\x49\x02\x49\xa6\xc4\xd3\x5a\x24\x72\x06\x0e\x65\x1c\x84\x26\x43\x33\x3c\x1f\xb2\xbc\xec\xb0\x30\xa2\x81\x9a\x8e\xd0\xfa\x8d\x9a\xc7\x4f\x1e\x03\x8b\x4b\x65\x95\xd6\xa5\xec\x5a\xdd\x5f\x58\xa6\xd1\x3f\xfe\x1c\xde\x98\x5c\x63\xf1\x86\x0d\x4a\x85\x0f\xeb\x27\x91\xfa\x6f\x30\x56\x44\x93\xb4\xc7\xcb\x1e\xa5\x45\x02\x14\x4c\xdf\xf4\x2d\x89\xe4\x7c\x83\xd3\x15\xc0\x4a\x48\x95\x58\x10\x03\x0f\x6a\x52\xe8\xf3\x94\x6c\xa7\xe1\xfb\xfd\x5d\x0b\x3e\xa5\x59\xe3\x2c\x13\x53\x5b\x7e\x8e\x4c\x83\xb7\xbe\x3e\x3e\xff\xb8\xfd\xea\xce\x7a\x53\x2e\xf5\xdf\xdb\xe6\xd5\x4e\x70\x68\xd3\x71\x9f\xde\xe4\xa3\x6b\xf2\xd4\xe9\xb3\x92\x29\x77\x2b\x1a\x16\xa3\xaa\x90\x0b\x15\x5b\x11\x78\xcc\xbb\xac\x6f\x32\x98\x08\x45\x57\xe2\x2c\x92\x21\x4c\x1c\xd0\xb2\x65\x88\xae\x16\xc9\xa6\x1c\xc5\xe9\x90\xe7\x06\x16\x3f\x76\xee\xc3\x46\xcb\xc4\xf3\xd3\xfa\xf3\x43\xb7\x91\x15\xa7\x7c\x7f\xea\xca\xc2\x91\xcf\xba\xf5\x5b\x54\xa1\xd6\xcc\x79\x57\xb2\x24\x2f\x4e\xb9\x1e\x43\x09\xa2\x68\x49\xae\xc9\x50\x36\x67\x6a\x82\xc9\x9b\x31\xa4\x89\xc8\x96\x65\xe4\xd0\x8e\x0f\x59\x18\x32\x9c\x10\x31\x11\xb0\x6d\x4a\x04\xe9\x48\x66\x05\xfd\x73\x9c\x6f\xdb\xe3\x61\x91\xaf\x3f\x65\x6b\x1e\x55\x8e\xf9\xb3\xc9\xaa\x67\x36\xa5\x8c\x6f\x76\x9f\x8d\x2c\xb7\x56\x83\x8c\x29\xc9\x27\x8c\x53\x81\xe9\xbb\x5c\x6c\xf3\xba\xae\xb0\xa1\xe0\x73\x2c\x0c\x28\xc0\x3a\x01\xef\xd0\x1e\xeb\x78\xac\x4a\xc8\xb1\xa8\xfa\x9a\xc1\xab\x96\x4c\x6b\x80\x67\x83\xc4\x47\x3e\x7b\xe4\x9d\x39\xf6\x8c\x73\x8b\xb2\x34\xee\xb9\x38\xbf\xfc\xe0\xe4\xa6\x1d\xe5\xce\xb4\x6e\xfd\x4a\xca\x99\xd6\x25\x3f\x59\xf7\x4d\x8b\x9c\xc9\x2b\xa5\x28\x5e\x75\x65\x39\x24\x35\x4f\x55\x59\x57\xb0\xbc\x08\x47\x04\x07\x38\x9e\xf3\x68\x93\x91\x23\xce\xa2\x6c\xff\x1f\x6f\x15\x13\xd8\xf1\x43\x08\x94\x7f\x8b\xc5\xfd\x2b\x45\xfb\xbb\x46\x5b\x4a\xf3\xc2\xd9\xf2\x65\x4a\x9d\xa2\xcd\xf9\xb6\xde\x90\x95\x37\x9b\x67\x91\x4b\x14\xca\xf9\xfc\xde\x97\x7d\xb2\x4f\x1f\xdf\xb4\xc6\x51\xe1\x52\x78\x21\xfb\xf0\x49\x7d\xef\x5f\x4e\x22\x09\x53\x8d\xd9\x50\x21\x22\x3f\xe0\x05\x55\x92\x38\x85\x14\x69\x42\x97\x04\x5d\xb6\x69\x0a\x40\xe0\xa9\xb2\xc5\x33\xb4\x0a\x88\xd8\x37\x43\x8d\x10\x80\x92\xd8\x1d\x5d\xd1\xfb\x58\x5f\x59\xd2\x5c\x7a\xed\x77\xb9\x5f\xeb\xd0\x6a\xf3\x9b\x7a\xf5\x2f\xef\x98\xe5\xab\x06\x4c\xd5\xbd\xcd\xfa\x0f\xce\x18\x46\x23\xf1\x48\x1e\x52\x3c\x6f\xb8\xac\x1c\x2a\xb1\x2e\xdb\x8e\xa8\x7b\xbc\x47\x89\x21\x4f\xe9\xa2\x66\x40\xd7\xd3\x63\x85\x41\x56\x20\xb2\x36\x1b\x28\xd8\x61\x61\x3a\x29\xda\xcb\xae\x97\x5a\xdc\xb9\x33\x62\xf8\xef\xd1\xf1\x51\x6b\xaf\x57\x12\xca\x7f\xd6\xad\xef\xc8\x7a\x47\xd7\x16\xcf\xf6\x73\x55\x9d\x79\x59\x25\x89\x76\x04\x22\x13\x73\x8a\xc6\xd2\x21\x6b\xc4\x8e\x6a\x87\xa6\x14\x8b\x6a\x60\x72\xb4\xca\xe8\x12\x70\x4c\x87\x41\xae\x47\x28\xc8\x0b\x39\x8e\x73\x9c\xf4\x42\xeb\xa4\xe6\xbd\x5a\x6c\xdc\x51\x16\xbd\x29\x29\xf4\xb9\xf5\xbf\x75\xf9\x49\x2a\x77\x21\x6b\xad\x33\x77\x3f\xda\xae\xec\x2f\xf7\x4a\xa3\xf6\x49\x94\x65\x77\x5d\xd7\x54\x38\xdb\xd2\x18\xc6\xc0\x2e\x22\x38\x2a\x64\x30\x8f\x89\x88\x8a\x62\x03\x70\xa6\xe3\xe9\x3e\xf6\x30\xaf\x03\x39\x64\x6c\x91\x70\xf4\xc4\x3e\xb1\xc3\xf1\xef\x0a\x7f\x34\xa1\x0c\xf3\xa0\xea\xce\x97\x15\x72\x6d\xa0\x76\xed\xff\x78\xab\xe3\x31\xcd\xa7\x4e\x6f\x39\xb3\xf5\xf6\x59\x49\x94\x64\xb0\x69\x53\x17\x79\xd7\xf3\x48\xec\x7a\x14\x13\x41\x95\x75\x9c\xc0\x0d\x0c\xcb\x56\xe9\x98\x16\x25\x25\xf0\x80\xa4\x10\xc0\x03\xbc\xec\x00\x5a\xb3\xff\x4d\x67\x3c\xd7\xf0\x9f\xa7\xdd\x52\xf5\x5c\x3e\xfb\xf7\x82\x0b\x5b\x8d\xf9\x73\x59\xb3\x5a\xeb\xde\xcc\x39\x6f\x67\x85\xf1\xf6\x8b\xfb\x3f\x1e\x59\x5a\xe7\xad\x0a\x60\x5b\x4a\xf3\x97\x2f\x5f\xbe\x9c\x5e\x2e\x75\x33\xdd\xed\xe2\x6f\xb9\xb6\xe7\xab\xa6\xed\xf7\x10\xfb\x0f\x84\x97\x4e\xcd\xe0\xfe\xbc\x78\xf7\xea\xba\x9d\x4d\xea\xe5\x1f\xd4\x68\xf5\xa8\x46\xa9\x2e\xe4\x42\x81\xac\x63\xca\x7e\xfd\xb8\x97\xd5\xdb\x38\xf7\xf5\x4c\xfd\xa3\x06\x39\x5a\xa1\xca\xe3\xec\xd1\x4f\x4f\x1f\x6f\x61\xdc\x8a\x93\xd8\x56\x21\x49\x89\x53\x42\xd2\xd2\x4d\x33\x32\x95\x10\x18\x8a\x4b\xc8\xc8\xb7\xe3\x30\xc0\xb6\x09\x65\x10\x72\xaa\x1e\x5a\xa1\xcd\xda\x32\x64\x63\x45\xb6\x89\xc4\x78\xb1\xa8\xcc\x07\x2b\xbd\x65\x4f\xde\xba\xb8\x78\xd3\x86\xe3\xe7\xcb\x2e\xfd\xb3\x43\x87\xe7\x97\xbf\xf9\xb4\x6b\x75\x62\xdb\x17\x3f\x2f\x5e\xf9\x47\x12\x5b\x84\x2e\x29\xc8\x34\x87\x59\x2a\xc6\x1c\xf4\x05\x1f\x05\x2e\xa6\x68\xcf\x25\x6d\x2c\x3a\x3a\x01\x78\x3f\x32\xa2\x40\xa5\x1c\x37\xf6\x3c\x18\x2a\xb1\x97\xb6\x53\x32\xea\x87\x6d\x7d\x7e\xcc\x3d\xf9\xf3\xc6\x3f\x34\xfd\xe6\x3d\xf6\xad\xbf\x8e\x8d\xbf\x90\x2d\x53\xa6\x03\x03\x7a\x6d\x2b\x3c\xef\xe2\xf8\x45\xa3\x93\x28\x0f\x03\x81\xaf\x09\xb6\x4e\x09\xb2\x4c\x4a\x48\x00\x92\x06\x63\x09\x6a\x96\x60\x43\x9a\x64\x28\x49\xc0\x94\xce\xf9\x92\x15\xd0\x0a\x83\x91\x81\xb9\x04\x12\x43\x17\xd7\x4f\x7a\xf7\x9b\xd7\x66\xf3\xad\xf5\x5e\xe3\x2f\xe7\xde\xf0\x55\x9d\xc6\x33\xab\x1c\x2a\xb7\xea\xd4\xc7\xb5\xda\x16\x64\x9f\xdc\xab\x9a\xc4\x11\x68\x48\x32\x98\x71\xa5\x38\xb2\xd4\xc0\xd5\x05\x9b\x31\x22\x85\x53\x20\x32\x68\x00\x64\x25\x12\x28\x47\xd6\xb8\x08\x58\x9c\x1d\xaa\x3c\xa5\x68\x31\x4e\x07\x52\xd1\xb7\x4a\xe7\x9a\xab\xea\xfd\x98\x6d\x41\xfd\x09\xd7\xc3\x17\xa5\x7a\x3d\x5e\xf3\x1c\xcd\xbf\x7b\xad\x20\xb5\x74\x79\xce\xb6\x7b\x6f\xe7\x4f\xfd\xeb\x57\xce\x36\x1c\x79\xff\xce\xfa\xa6\xf5\xb3\x7f\xda\xeb\x3e\xd5\x62\x68\xd1\xb1\x23\xcb\x14\x88\xfb\x37\x33\xba\xbb\xfb\x1a\x1f\xfd\x2a\x53\xea\x5f\xb7\xa9\xd2\xb6\x73\xd9\xc3\xa7\x6b\x0d\xa6\x0f\xd6\xca\xb2\x6f\x46\xad\x8f\xbe\xe9\xdd\x7d\xdf\xfd\xd2\x7b\xee\x9e\xdb\x5f\xe8\x59\xcf\x0b\x5f\xa6\x6a\xe2\x15\xd3\x9e\xc2\xea\xdc\x8c\x2b\x5f\x16\x31\x14\x7d\x7e\xeb\x02\x63\xf2\xe6\xbd\x7d\xe4\xfe\xb4\x1d\x43\xb6\x6f\x6b\xd2\xf7\xc3\xcc\x13\x93\x08\xc9\xa5\x55\x5d\x8c\x23\x51\x22\x91\x1d\x9b\xb2\x1b\xbb\x3c\xc5\xdb\x21\xc9\x7b\x96\xa3\xd0\x16\xc7\x86\x8c\xc7\x86\x0c\x04\x2c\x4f\xdb\xbe\x69\x0b\xb6\x9f\x16\xae\x61\xac\xdc\xfc\xfb\xc0\xba\xc4\xd0\x13\x0b\xab\xe9\xf6\xf9\x32\x37\xaf\xe8\x1b\x14\xb3\xe3\x7b\xd3\x8c\x63\xa3\xeb\x8d\x5c\x38\xc2\x4f\xde\x71\x0d\x47\xe7\x45\x42\xf0\x4c\xdd\x66\x79\x4e\x07\xb6\xa5\xb0\x2c\x17\x18\xbe\x4e\xea\x04\xe4\x69\xc1\x15\xf5\x00\x90\x84\x13\x93\xa4\x1f\x0a\x0c\x60\x9d\xc4\xf8\x87\x0e\x3f\xfc\x99\xab\xe6\xd9\x4e\x57\x36\x97\x2c\xf7\xf8\xa7\xea\x7f\x50\xd7\x46\x3e\xba\xfa\x46\xf5\x0a\x54\x44\x1d\x9d\x38\x70\xdd\xe1\xe4\x41\x36\xa0\x2a\x28\xa2\x2c\xc3\x80\x47\x2e\x12\xe8\x08\x52\x34\x94\x42\x9a\x10\xb5\x30\xf6\x20\x67\xeb\xa2\xc3\x9a\x9c\xab\x28\x32\x67\x8b\xae\xa3\x70\x1c\x61\xa6\xbd\xe1\x59\xc7\xdb\xdc\xf9\xc2\x7f\xd8\xbf\xc0\xfa\x95\x0f\x1a\x2e\x7f\x75\x5c\x59\xab\x7a\x95\x8f\x2a\x9f\xa8\x5c\xb2\x57\xa5\x37\x9b\x31\xb7\x32\x06\xd7\x48\x5c\x7d\x32\x9a\xcb\x84\x92\x49\x79\xb1\x13\x03\x5f\xa6\x25\xda\x8a\x51\xe4\x9b\x80\x34\x6c\x0d\xea\xba\x10\x60\x9e\x36\x02\x68\xfa\x9c\x67\x12\xbe\xa1\x19\x69\x8f\x7b\x74\x5a\xc9\xb7\x4e\x0e\xec\xf8\xd5\xf6\x8d\x1b\x2a\xb4\xdb\xf0\x41\x83\xe7\x4f\x0b\x96\x5f\x30\xa2\xd9\x3b\x5e\x89\xfb\x7d\xa6\x37\x1e\x97\xc4\x7d\xe3\x86\xa8\xd9\xa6\xa0\xd3\xae\xa0\x0a\xba\x1c\x87\xa2\x2c\x9a\x50\x81\xb4\x2a\xe8\xd8\xe5\x43\x91\x16\x22\xe0\xeb\x86\x4e\x9a\xba\xad\xfa\xbc\x82\x22\x35\xf1\x74\x9e\x68\xdf\xba\xc1\xd3\x96\xcb\x5a\x1d\x3f\x95\x7d\x61\xb9\xaf\xae\x3e\x29\x3b\xe5\x50\xae\x46\x9f\x3d\xde\x99\xb5\xcd\xe9\x9f\x3e\x78\x52\xf3\xeb\x24\xe2\x5b\x2d\x60\x1a\x30\xf2\x38\xdf\x53\x08\x8a\xf0\x20\xa3\x9b\xac\x8f\x43\x28\xcb\x32\x86\x90\xc7\x98\xf4\x3d\x89\x40\x9e\x87\xa0\x1a\x0b\x44\xec\x10\x69\xa3\xc1\xb0\x76\xa3\x02\xe1\xa4\x9c\xfb\xc4\xc4\x65\x2f\x7b\xb6\xae\x57\x7d\x51\xde\xdc\xe7\x70\x93\xcc\xd5\xef\xe0\xc1\xa7\x27\xe5\x2a\x69\x26\x2f\x1a\x08\x41\x2c\xc9\x82\x69\x79\x5e\x4c\xb3\xc0\x53\x75\x24\xb8\x40\xa5\x7d\x5a\x74\x02\x9a\x76\x08\x0e\xd3\x6e\x48\x39\x00\x44\xb1\x42\x70\x06\xc3\xb2\x4c\x3a\xee\x55\x35\x86\xdc\xce\x66\xe8\xa3\x0a\x2d\x1a\x70\x98\x0b\x07\xaf\x2f\xb1\xe9\xd7\xc3\x59\xf7\x17\xb8\xfa\xec\xd3\xa3\x2d\x4f\x9d\x7e\xbb\x68\xaa\x84\x62\xc7\x9e\x8f\x06\xd7\x24\x1a\xd5\x9a\x70\x30\x47\xf6\xfc\x83\xcb\x18\xb7\x8f\x5f\x0e\x1b\x3d\x3e\x57\x6b\x4f\xeb\xd6\x73\xb2\xe6\x1a\x9b\x44\x34\xac\x8b\x34\xce\xe0\x18\x47\x92\x45\x4d\x16\x55\x91\x02\x0e\x88\x18\xa8\x39\x96\x2b\x1b\x11\x8f\x69\x35\x62\x2d\x40\xb8\x90\x70\x48\x4d\x60\x25\x15\x52\x89\x53\xef\x98\xe8\x9e\x69\x66\x3b\xad\xd0\x8d\x7d\xdb\xbb\xd7\x5a\x4c\xcf\xd8\x9f\xbf\xe5\xbc\xc5\x17\xef\xde\xaa\xb0\x6b\xf7\xc5\x06\x56\xd7\x67\xc9\xcb\x63\x8d\x98\xe0\x2d\xc3\x35\x23\x47\x41\x0a\x2b\x05\x84\xe3\x06\x8c\xe9\xf8\x94\x1a\x41\x82\x35\x69\x14\xe8\xa1\x10\xfa\x88\x0b\x2d\x95\xf0\x08\x83\x73\xfc\xc4\x39\x50\xe6\x3a\x79\x1f\x9b\xaf\x9e\xde\x2a\xd5\xfb\xd2\x2f\xfd\xe7\xe9\xf2\xef\x7d\xb9\xbf\x4d\xce\x52\x63\x1e\x7f\xbe\x27\x65\xa2\xf1\xdd\xee\xe4\xed\x2f\x43\x14\xc4\x42\xcc\xa8\x81\x6b\x29\x04\x4f\x51\x8a\xa4\xba\x84\xcc\x60\x99\xd1\x23\xc1\x52\x35\x33\x0e\x24\x3b\x80\x12\xc1\xf1\xbe\xad\x91\x80\xf3\x81\x91\xd6\xea\xb3\xd7\x3e\xf1\xea\xf9\xfc\x75\x43\xd0\xa9\xe4\xb6\x37\x17\x3f\x18\x7c\x25\x4f\xd5\xf2\x0f\xfb\xb4\x7c\xfb\xbe\x6d\x65\xf9\xb4\xd3\xd0\x6d\x49\x14\x81\x27\x98\xd8\x86\x91\x4a\x50\x04\xa4\x24\x08\x62\x9b\xd5\x44\x68\x42\x9a\x31\x78\x4d\x33\x91\xe0\xc6\xa4\x1a\x08\x01\x44\xa2\x2f\x2b\xa1\xe4\x6a\x46\xda\x1c\xa8\xe0\xe8\xd5\x15\x17\xee\x56\x37\x14\x8e\xfe\xaa\xb8\x35\x3a\xa5\x0e\x79\x78\x67\xff\x6f\xb9\xb4\xba\x03\x4a\x74\x02\xed\xcb\x9f\xab\x96\xc4\x2a\x41\x32\x34\x36\x62\x02\xc6\x05\x12\x4d\x79\x26\x27\xa9\x02\x17\x62\xcb\xb2\x3c\x15\x69\x84\x2b\xe0\xc0\x63\x39\xe4\x9a\x0e\xa3\x7a\x14\x25\x87\x9a\x9a\xce\x23\xad\xfa\x53\xe3\xcd\x57\x07\xed\x1f\xb6\xb4\xd9\xef\x67\x1b\x94\xae\xb8\x6d\x76\xa3\x5d\xf5\x7b\x82\xeb\xda\xb5\x46\x33\xc6\xda\x93\x27\xde\x4d\x65\x3e\xb9\x88\x4c\x25\x0e\xce\xea\xba\xfb\x97\x5e\x2d\x98\x31\x4d\x0b\xff\x71\xb1\x42\xa4\x71\xab\x07\x1f\xbe\x9c\x6d\xc1\xa4\xed\xcb\xfe\xcc\x18\x15\x31\x61\x58\xf2\x62\x53\x61\x55\x0b\x6a\xbc\x64\xfb\xbe\x6e\xfa\xb1\xae\x01\xc5\xf7\xf8\x08\xea\x81\xc1\x40\xca\x10\x6c\x59\x22\x63\x44\x21\x36\x36\x55\x5b\x44\x64\xda\xb0\x34\x3f\x70\x0f\x04\xf2\x96\x82\xe1\x87\xb3\x6e\xfe\xb6\xf2\xd7\x33\xc7\x0a\x74\x1a\x98\xe7\xc9\x16\xa6\xc6\xbc\xc9\xce\xe8\xe5\x0f\x92\xa7\xa9\x8b\x1c\xc4\x49\x81\x85\x2c\x21\x62\x5c\x89\x31\x48\x05\xb8\x08\x68\x4a\x64\xca\x0a\x43\x2a\x46\xc0\x13\x9a\xea\x05\x04\x61\x7a\x02\xe3\x93\x3a\x45\x02\x94\xf6\xb8\x97\x47\xfd\xf8\x68\x4e\x85\xa7\x57\x87\x96\x7c\xe7\xfd\xcf\x2f\x0f\x1f\x36\xae\x4b\x93\xa1\x65\xcd\xba\x79\x84\xa7\xdb\x4a\xcc\x1d\x32\x8b\x4a\xa2\x86\x51\x8c\x25\x49\x26\x24\x96\xf4\x75\xcf\xa6\x18\x0e\x20\x8a\x52\xb9\x88\x0a\x62\x9f\xb2\x4c\x23\x62\x62\x4b\x97\x65\xdd\x62\xa0\x28\x1a\x64\xe8\xd8\xe9\xa1\x92\x73\xcf\xcc\x47\xf8\x0d\xfa\x15\xfb\x76\xce\xf7\x43\x09\xa7\xf4\xf2\x2d\xaf\x2d\xea\x94\x7b\x8a\xbe\x24\x6b\xef\x5b\x15\xe5\x6f\x27\x7d\x9d\x2a\xe6\xbe\x55\xfb\xc8\x1f\x53\x5a\x54\xa8\xd0\xf9\xbd\xdb\x37\x67\x56\x1e\x3a\xe1\xeb\x8f\x69\x6e\x8d\x92\x79\xfd\xc2\x67\xb7\xe0\x07\x0f\x06\x24\x6f\x85\x1c\xf4\x4c\xcd\x09\x79\x17\xa9\x36\x07\x4d\xdb\x32\x54\xd7\xa4\x35\x29\x64\x39\x4d\xb0\x58\x5e\x0f\x15\x41\x77\x11\x21\xf9\x1c\x43\xd0\x6a\x14\xa8\x21\xd0\xd2\x7e\x0f\xe6\xf2\x93\x47\x6c\xce\xfe\x4f\x3e\xdc\x7a\x6f\xfe\xf3\xfa\x1f\xfc\xd4\x6e\xe6\xa6\x29\x07\x0f\x65\x2e\xb2\x91\xc9\x93\x03\xbf\xd1\x31\x63\x20\xea\xc4\xfe\x5d\x32\x0c\x06\x31\xac\xc0\xf0\x0c\xe5\x78\x3e\xa5\x13\x92\x28\xc8\xb1\x49\x60\x49\x75\x69\x9f\x08\xe3\xc0\x0c\x38\x4c\x3b\xb6\xca\x3b\x81\x0f\x14\x22\x31\x05\x86\x7c\xbd\xcf\x8c\x56\x55\xb3\x07\x6f\xed\xd9\x3e\x79\xd8\x07\x75\x6a\xd6\xff\x75\x5b\x43\xfb\x66\xab\x6f\x2f\x74\x29\xb1\xd9\xdf\xfd\x97\x93\x3c\x8b\x87\x2c\x92\x42\x82\xe1\x7d\x57\x30\x69\xc1\x97\x4c\x16\xaa\xaa\x23\x01\xde\x75\x29\x8d\x94\x29\x5f\xf2\x0d\x93\x13\xb8\xd8\x8d\x25\xa4\xf2\x84\xa5\x24\xd0\xcf\x78\xf4\x0a\xf1\x72\x49\xf1\x42\x99\xac\xa1\x8b\xf3\x3d\x5f\x41\xfd\x5a\xe7\xf8\xb0\x19\x6d\x5e\xeb\x5d\x66\x45\x9d\xf6\x8d\x77\x8d\xbe\x97\x31\x87\x99\xf0\x86\x49\x5f\x41\xbc\xa4\x68\xb1\x2d\x87\xb2\x10\x69\xa4\x89\x23\x12\x8a\x91\x6f\x31\xb6\x29\x88\x2a\x89\x70\x80\x63\xe4\xf0\x86\x12\x90\x2e\x32\xa2\x54\xcb\xe0\xfe\xd3\xe2\x6b\x3f\xbb\x3e\xe1\xea\x07\xd9\x71\xbc\xa6\xc3\x88\xa2\xa3\xfa\xe3\x83\xca\x9e\x31\x79\x3f\x79\xe7\xfa\xb6\xd9\xbf\x1e\xf5\x8b\x7f\x6f\xa5\xfe\xf5\xb4\xcf\x47\xaf\x2c\xd1\xb5\xeb\xc7\x68\xdf\xcd\x5e\xa3\x5a\xc7\x5c\x83\x65\xf9\xaf\x6e\xef\xbe\x9c\xe9\x53\xff\xbb\xce\xfb\x1f\xad\xfb\x39\x35\xb3\xf8\x72\x9f\xc5\x07\x26\x4d\xec\x7a\xd1\x2d\x5b\x42\xfe\xae\x40\x93\x8e\x57\xbb\x87\x67\x0b\x2e\xee\xb4\xc6\xab\x3b\x72\x86\x57\xe6\x95\x24\xca\xf4\xc6\x94\xc2\xbb\xa1\xe1\xc9\xb2\xa6\x89\x31\x72\xd4\xc0\xe2\x5c\xc8\x90\xbe\x87\x14\x12\x7a\x58\xd3\x45\xd6\x12\x42\x52\xe3\x09\xdd\x96\x64\x1a\xe9\x69\xc3\xdd\x2e\x73\x56\xd3\xe1\xeb\xcc\x07\x62\xdd\xce\xeb\xbb\xa0\x59\x4d\x0b\x7c\x3c\xf8\xc0\xde\x35\x45\x5e\x8a\x27\x9f\x14\x16\xb4\xb0\x56\x12\xf9\x56\x21\x1d\xba\x58\x8c\x7d\x4f\x74\x3c\x35\x8e\x65\xd2\xf6\x79\x9d\x30\x14\x1e\x48\x8e\x15\x5b\x91\x11\x08\x31\x65\x22\x46\x36\xa0\xee\x61\x9b\x90\xa5\xb4\xc6\xf6\x57\xa1\x79\x53\x56\x37\xeb\x3d\xee\xd1\x89\x3f\x8a\x3f\x58\xd1\x4b\xfa\xa6\xcb\xa5\xe3\xb9\x53\xce\x96\x9b\xd3\xa6\x50\xbb\x93\xb3\x9a\x56\x4f\xa2\x5c\xb9\x2d\x68\xa4\xe6\x5b\x0e\x62\x74\x9b\x26\x0c\x8b\x22\x5d\xd5\x10\x68\x52\xb5\x42\xdd\x50\x6c\x45\x8e\x68\x46\x82\x9a\xa9\x22\xc1\x0e\x45\x97\x8b\xac\x74\x8c\xed\xe0\xf6\x62\xab\x1f\x10\x5f\xdc\xa9\xb2\xc3\xbb\xbb\xe6\xd2\xa2\x8f\x7e\x78\x54\xfc\xa7\xe7\x0f\xbe\x1f\x32\xb9\xfb\x95\xc6\x05\xde\x3b\xbb\x30\x95\xf9\x14\xcb\xb1\xf6\x64\xc1\x0f\x5e\x6e\x38\xd7\xbc\xd6\xdc\x2b\xd9\xd1\x94\x2d\x45\xf3\x6d\x9c\xde\x37\xcf\x91\xbc\x3f\x5f\xf8\x36\xdf\xc1\xea\x49\x44\xac\x12\x16\x0e\x11\x82\xa4\xee\x8a\xa4\xe9\x31\x31\x4f\x39\x6c\x48\x1a\x8c\x6e\x72\xbe\x22\xab\x20\x64\xf8\x48\x8e\x39\x25\x10\x88\x40\x97\x14\x05\x45\x4c\x5a\xf3\xb1\x7a\xb6\xcc\x39\xe5\xc6\xca\x55\x17\xd6\xcc\xdb\xd2\xb7\xfd\xf5\x0f\x0f\x77\x38\x3d\x62\x49\xf5\xba\xbf\xf4\xb8\x5d\x7d\xdc\x47\xea\x87\x99\x92\x17\xee\xb4\x48\xf0\x80\x80\x1d\x07\x63\x35\x08\x23\xa0\x1a\x82\xc5\x60\xd5\x50\x42\xc3\xb2\x05\x57\x80\xa1\x1d\x62\xcb\xd1\xe2\x88\x14\x04\xca\x8c\x1c\x27\x4e\x7b\xdc\xf3\x5f\x4d\x57\x5f\x8e\x2e\xb7\x74\x44\x8e\xab\x65\x6b\x15\xde\xf9\xdd\x86\x65\xca\x7b\x6f\x96\x69\xb6\x6f\xf2\xfc\xf1\x1b\xda\x8c\xfa\x25\x4f\x12\x1b\x5c\xa4\xc7\x40\x87\x66\x71\x20\x73\xa4\x25\x60\xcf\x37\x90\xa9\xf0\x8c\x62\x5a\x8c\x24\x3b\x5c\x80\x3d\x21\x88\x23\x4f\xb4\x69\x21\x12\x63\x5d\xfa\xe7\x6e\x8a\xb4\x05\x4a\xfb\xee\x4f\x27\x3d\xed\xfb\xee\x5f\xd5\x4f\x63\x30\x25\x7e\x3e\xe3\x95\xb6\x99\x57\x2d\xec\xb1\xb8\x8f\x93\xfd\xce\x4a\xb1\xe9\xe6\xe4\xd1\x6a\x90\x10\xf2\x26\x8e\x59\x28\xc6\x86\xc8\x06\x3a\x82\x34\x04\xac\x2b\x05\xa4\x40\xbb\x0c\xe5\xba\xac\x86\x63\x5d\x31\x0c\x86\x63\x00\x4f\xc6\x86\xcd\xc1\xc4\x01\xcc\xf2\xc7\xd4\xab\xfe\xae\x77\xb3\x03\x3b\x76\x61\x2b\x54\xbc\xe4\xf0\xde\x5d\x76\xf4\xcc\xfa\x51\xdb\xb9\xbf\x67\x3e\xb7\x2e\x8f\xf9\x65\x12\xb5\x52\x3c\xa0\x1a\xbe\xa6\x48\x02\x26\x58\x9a\x02\xb4\x00\x35\x3f\x06\xc8\xb2\x45\x8a\x89\x30\xa3\x01\x06\x99\x90\x45\x0a\x15\x86\xa1\x69\xfa\x54\x22\x96\xec\x9e\x3c\xe5\x89\x1b\xef\xe6\x33\xb5\x87\x99\x2f\xfc\xf0\xe2\xc4\x5f\x75\xb9\x5f\xf7\x3e\xfb\xba\xf5\x9e\x26\xf7\xc1\x8a\x51\x83\xf6\x4f\x4e\xe2\xfc\x5a\xb1\x19\xc7\x64\x4d\x9a\x51\x4d\x53\x20\x11\xc6\x7a\x64\x72\x3a\xd6\x44\x53\xa4\x08\x5b\x70\x21\xc7\xf0\x62\x00\xb0\x05\x20\x8f\xa3\x98\xc4\x74\xe2\x1b\x2e\xd0\xb1\xee\x28\xeb\x5c\xfd\x05\xd7\xde\xb8\x79\x29\x6b\x87\x89\x43\xb8\x33\x13\x99\xfb\x45\x0b\xbd\xdb\xba\xc0\x27\xf6\xb3\x5c\x39\x47\x26\xcf\x6b\x47\x0c\x72\x74\x4a\x16\xa3\x58\x73\xa1\xc0\x02\xac\x00\x8a\x90\xb5\x98\x85\x34\xed\x7b\x02\xc1\xcb\x2a\xd0\x18\xe4\xfa\x04\xcd\x43\xc2\x80\x66\x9c\x20\x09\x1b\xf0\x6a\xc5\xf7\x36\x75\x9f\x1e\x2d\x5b\x95\xe9\x7c\xd5\xaf\xbd\x72\x8b\x27\x68\xfc\xce\xe5\xcb\xb2\x2f\x3d\xb0\xf0\x34\x1e\x7e\x2d\x63\x5b\x6c\x12\xab\x32\x8a\x2e\x60\x6c\x35\x90\x78\x4d\x0d\xd8\x00\xf3\x36\x86\x8a\x60\x72\xbc\xe0\xbb\x91\xe6\x42\x1a\x03\x96\x77\x35\x88\x38\xcb\xc7\xbc\xcd\x06\xac\x95\xb8\xb5\x24\x96\x6d\xbd\xac\x70\xde\x39\x39\xc6\x66\xde\x81\xf0\xa0\x5a\x9b\x57\xbf\x3a\x6a\xd0\xd9\x6d\x3f\xbe\x6f\xed\xbe\x7e\xb8\xf9\x88\x56\x2b\x93\x67\x14\x6c\x10\xab\x2e\xcd\x85\x34\x41\xca\x8e\x4a\x6a\x96\x8b\x79\x46\x61\x05\x52\xa4\x08\xdf\x06\x50\x05\xb1\xe4\x4b\x0e\x0c\x0d\xc2\xb7\x45\xc0\x00\xd6\x4c\x6b\xc3\xdb\x27\x7d\x36\xea\x93\x1a\x3d\x07\x2f\x73\xd5\xc3\x2d\x77\x57\xf6\x47\x76\x86\xd4\xd8\xae\x7f\x98\x5f\xd4\x7e\x71\xae\xc7\xe7\x6b\x93\x47\x86\x44\x84\xec\x6b\xba\x1b\x3b\x0e\x05\x43\x95\x14\x43\x4e\xf1\x28\x4a\xa2\x55\x57\x0f\x3d\x4d\x54\x02\x49\x8d\x0c\x8f\x08\x44\x9f\xf0\x29\x24\x3a\x86\x03\xf9\x74\xca\x8e\xca\x5b\x56\x9c\xbf\x7e\x7b\xdd\xe1\x17\x42\xed\x16\x70\x3c\xd7\x67\xf2\x0f\xee\x32\x6b\x6a\x4d\xe3\x49\xe1\x53\x77\xcf\xcd\x2d\x3a\xff\xff\x24\x61\xa0\xd9\xde\x82\x99\xdb\xe6\x6b\xb3\x9d\xc8\x59\xb4\xe1\x09\x79\xf7\x85\x3e\x4d\x6f\xa5\x3c\x3e\xd6\xfd\xee\x95\x69\x0d\xbe\x2f\x63\xa4\xfa\x7a\xef\xee\xe7\xaf\xbf\x9c\x77\x6b\xfb\xfb\x93\x16\xd9\x44\x9d\x32\x29\xaf\x75\x28\x46\x5e\x3b\x51\xaf\x07\x3c\xf4\x4b\xb6\x22\x7d\xb8\x24\x0e\x32\x70\x10\xeb\x22\xe1\x18\xb6\xaf\x51\x90\x75\x7c\x18\xd9\x16\x12\x8c\x40\x43\xc8\x8a\x55\x33\x88\x45\x91\x31\x44\x60\xf0\xac\x68\x39\x81\x44\x03\x82\x4b\x1b\x96\xb8\x32\x03\x9f\x5d\x2b\x51\xb5\xcc\xf3\xb2\x8b\xeb\xa2\x35\x1d\xaf\x7f\x9d\x25\xeb\xec\xc9\x5b\x1a\x75\x6b\xd1\x72\xdd\x08\x55\xfb\x28\x89\x4d\x28\x8b\x35\x19\x2c\xc4\xaa\xa4\xb1\xbc\xe8\x51\xb2\x1e\xca\xb1\xc9\x12\xaa\xcd\x71\x31\xa0\x1d\xcf\xe4\xfc\xd8\x25\x5c\xca\x90\x75\x56\x50\x45\xda\x54\x70\x62\x0f\xd4\x71\xd6\xf4\x26\x5f\xe3\x70\x47\xfe\x5f\xfc\xc2\x7f\xde\xba\x37\x44\x3c\xfb\xeb\x91\x36\x17\xcf\x5d\xea\xd4\x68\xf0\xbb\x0f\x7b\x8c\xcd\xd8\x86\xd6\x84\x45\x0a\x56\x11\xc6\xb4\xa2\x46\x24\x8d\x05\x1a\x59\x12\x00\x2c\x87\x75\x4e\x21\x0c\x5d\x09\x00\x92\x5d\x51\xb2\xa5\xc0\xd1\x0d\x14\xd3\xac\xc8\xfd\xcf\xa8\x28\xb5\x07\x3a\x59\xb5\xc5\xb5\x13\xe7\x41\xed\x82\x68\xf7\xa3\x66\x2d\x42\xa1\xb5\xf0\x21\xac\x94\x2f\xc7\xc3\xf3\x05\xbf\x45\x75\x07\x55\x1a\x9a\x44\x69\x0c\x39\x60\x34\xa0\x41\x92\x00\x50\x37\x4c\x4a\x15\xb9\x40\x45\x8e\xac\xfb\x16\x81\x03\xd3\x0b\x10\xe5\x33\x90\x74\xa1\x03\x2d\x1e\x63\xc7\xe5\xcc\xc4\x37\xfc\xf5\x90\x1a\x37\x0e\x8c\xbf\xdc\x55\xe1\x2e\xbc\x5d\xe1\xdc\xf3\x97\x2f\x6d\x50\x65\xea\xdd\x8a\x57\x7b\x77\x78\xf9\xdb\x97\xd7\x27\x35\x4d\xde\x0d\x73\xbe\x67\xb9\x8c\x61\x28\x1e\x0e\x34\x82\xc6\x96\x6e\xfa\x72\xa8\xf9\x98\xa4\x68\x4e\x33\x30\xef\x28\x91\x63\x52\x36\x4f\xcb\x82\xa7\xba\x90\x72\x13\x8c\x0f\x9e\x17\xfa\xa0\xf3\xe6\x7a\xf9\x2a\x5e\xea\x7e\xa1\x40\x87\xe5\xad\x5e\x66\x97\x9a\xdc\xcb\x75\xfa\x8d\xfa\xea\xdc\xf5\x9f\x1c\xe6\x8e\x25\x0f\x76\x81\x00\x69\x73\xa1\x16\xc5\x02\xa9\x62\xc5\x8a\x29\xc9\x15\xf9\x48\x60\x2d\xd6\xb1\x09\x1b\xd1\x1e\xc5\x79\x4e\x68\x81\x88\xf0\x5d\x9b\xe7\x3c\x1c\xb9\xff\x56\x2d\x5d\x98\xf3\xbf\x9b\x93\xa7\x34\xcb\x91\xa9\x4e\x6a\x14\xd8\x88\xd7\xf1\xe0\xcc\x95\xcf\xe7\x9f\xb5\xb0\x22\xfb\xd6\xc5\x4d\x42\xf5\x76\x5b\xef\x1d\x9e\xbb\xb3\xfa\xc5\xfc\xe5\xfa\xec\xeb\x51\xe7\x74\x12\xd3\x04\x48\xea\x7a\x18\x93\x61\xe0\xbb\x96\x2c\xb9\x16\x6d\xda\xa4\x19\xdb\x1a\xe4\x04\x3b\x44\x0c\xa9\x29\x76\x2c\xf8\x91\x05\x7c\xdb\xc6\xb4\x49\xa8\x74\x62\xc4\xc3\x92\x22\x7b\x0b\x3c\xdb\x3d\xe6\xe7\xc9\x9b\x4a\x5c\x7a\x5e\x7c\x05\x59\x36\xdf\xf6\x8d\x56\xb3\x1a\xcb\x15\x26\xcc\xb2\xa9\x45\xf3\x17\x49\x94\x66\x0d\x1c\x1d\x47\x6e\xec\xb8\x82\x19\x9b\xbe\xeb\x85\x2e\x47\x18\x72\xc0\x91\xb4\x42\x39\x0e\x0a\x90\x65\x98\xa6\x62\x08\x22\x54\x49\x13\x60\x3e\xe2\x13\x5b\x7d\xd9\x51\xf3\xea\x7f\x3f\xcf\xea\xf3\xce\x27\x5e\xd4\xaf\xed\xe7\x83\x1b\x5b\x93\x3b\x8d\xa8\x1f\xb7\x5d\x55\xf2\xe4\x76\x4e\x2a\x90\xb1\xf6\x52\xe2\xdc\xd1\xb4\x78\x60\x38\x84\xa6\x12\x3a\x8f\x4d\x4b\xf5\x83\xd0\x47\xd8\x0a\x54\xd6\x25\x39\x4a\xe5\x02\xc9\x23\x28\x24\x38\x8a\x82\xe8\x50\xc5\xcc\x7f\x08\xd5\xff\xef\x71\xeb\x95\x87\x7d\xde\x96\xa7\x5f\xfd\x65\xf6\xd0\xe7\x85\xda\x16\x91\x5f\x6c\x9d\x39\x6c\x49\xb7\x1a\x4d\x1f\xcd\x5c\x30\xf6\x88\xf6\xc6\xd6\xe4\x05\x1a\xd6\xd1\x35\x39\xd4\x69\x51\x20\x62\x44\x28\xb4\xa5\x88\x2c\x85\x85\x7f\xb8\xee\xc8\x24\x09\xc2\xc5\x1c\xd2\x08\xc7\x22\x55\x89\xa4\x54\x28\x4a\x31\x93\xb8\xa0\xb8\x40\x72\x55\x7b\x3f\x1e\x6f\xc8\xab\x4a\xcc\x2f\xdb\xf9\x52\xc5\xba\xbb\xbf\xe9\x38\x55\xda\x3b\x4f\x00\x77\x8f\x7c\x51\xb1\x56\xa1\xe4\xdd\x70\x1c\x08\x41\x2c\x07\x2c\xb6\x5d\xca\xd3\x1c\x68\xab\x04\x0a\x63\xdd\x53\x08\x31\xd6\x78\x33\x08\x68\x4e\x97\x15\x86\x54\x91\xaa\x6a\xae\x00\x69\xd9\x4d\x83\x54\xfe\xbb\xf1\x7e\x4a\xf3\x6c\x05\xff\xef\x9e\xc7\x87\xef\x55\xba\x35\xb4\xd7\xd6\x8b\x3d\xbe\x5e\x9c\xa9\xff\x85\xe0\xfb\xda\xf7\x4f\x0c\xa6\x51\xad\x15\xdd\x77\xaf\x7c\xdf\xeb\x5a\xe7\x8d\xe4\xfd\x43\x60\x7a\x1a\xa1\x09\x9c\xc8\xc4\x32\x21\xba\x20\xe6\x6d\xd1\x33\x49\xce\xb4\x58\x8a\x40\xba\x22\x5b\x72\x8c\x79\x24\x85\x58\x65\x04\xa8\x72\x10\xa5\xb3\x9f\xe1\x9b\xc5\xde\x39\x67\x77\xef\xfc\x25\xab\x9f\xaa\x59\x6c\x71\x8d\xcf\x7e\x18\x37\xf2\xa7\x19\x4a\xf9\xcd\xaf\xb8\xb5\x9f\x9c\x5b\xdc\x37\x63\xa3\xc1\xc4\x4b\xca\x18\x4e\x74\xb5\xc0\x51\x5d\x87\x16\x78\x95\xf2\x11\xcd\x0b\x10\x85\x3c\xe1\x5a\x24\x52\x0c\x4b\x20\x05\x42\xe7\x94\x80\x8c\x19\x5d\x95\x65\x41\x49\x67\x49\xd9\xd2\xc5\x4f\xaa\x1f\xb4\x98\x53\xa3\x7b\xd6\x70\x73\x95\x9f\xd3\x76\xd3\xab\xce\x81\x32\x27\x5b\x7f\xd4\x66\xe9\xb2\x27\xdf\x65\x0e\xe7\x24\xaf\x06\x21\x18\x47\x87\xb6\xc1\xaa\xbe\x0b\x08\x42\xd5\x1d\x95\x42\x82\xaf\x71\x82\x14\xc6\x1a\x29\x58\xb4\xa7\x90\x3e\x1b\xc7\x26\x8d\x79\x41\x55\x6c\x95\x88\x12\x83\xd6\x46\xa9\xcb\xaf\x45\x29\x33\xf5\x9b\xe5\x16\x6e\x11\x5b\x0f\xde\x74\x15\x0c\xac\x3b\xeb\x37\xe7\x50\x91\x94\x4d\xc1\x94\xce\x67\x32\x56\x36\x25\x16\x8d\x54\x65\xcb\x37\x48\xcd\x61\x9c\x80\x09\x4d\xda\x52\x9d\x10\x45\xba\xa3\xa9\x9a\xe5\x04\x9c\x27\x28\x96\xa8\xfb\x22\x17\xea\xba\xe1\x62\x85\x23\xd5\x7f\x0f\xfb\xce\xe6\xfa\xef\xb0\x2a\x29\xcd\xab\x97\xcb\xd4\x78\x78\x2a\xf7\xd9\xb5\xe2\xd9\xa6\xcb\x1a\xdd\x1b\xbe\x7f\xdc\xb5\x5b\x6d\xbe\xbc\xbc\x28\x77\xe5\x16\x85\x0f\x57\x8c\xcf\xbe\xd1\xe4\x48\xa3\x35\x5e\xdf\x8c\x95\x2d\x89\x51\x1d\xbe\xad\x51\x00\x10\x50\xb4\x08\x1c\xc5\x94\xee\x6a\x82\x48\x42\xc6\x41\xaa\xa8\x42\x12\xb8\x82\x15\x10\x5c\xec\x05\x28\x60\x00\x54\x28\x51\x4e\xa0\x0b\xb7\xe0\xf0\x43\xab\x61\xd1\x69\x63\xb3\x9a\xaf\x75\x6e\xf1\x60\xd9\x1f\x7f\xce\xef\x52\xfa\x8d\x19\x29\xfb\xfa\xe6\x69\x6c\x9f\x2d\x7d\x23\x79\x00\x5a\xe8\xb0\xb2\x80\x11\x45\xeb\xc8\x23\x98\x48\x25\x01\x43\x81\xc8\x8b\x75\x07\x58\xd8\xa3\x62\xdb\x07\x9c\x4d\xd1\x8a\x1d\xb0\xd0\xf4\x5d\x21\x30\x90\x94\xd8\x86\xb2\x14\x59\xd9\xb8\x52\xfe\x4e\xb7\x07\xee\x1b\x78\xa6\x50\xc5\xca\x8f\x36\x2e\x9a\xfa\x45\x91\x1f\x6b\xae\x9d\xdf\xe2\x44\x9e\x82\xcf\x36\xec\x4a\x62\x7f\x57\x17\x09\x5b\xe3\x54\x28\x2b\x36\xc5\xa1\x88\x14\x25\x18\x21\x27\x12\x23\x33\xa2\xe3\x88\x62\x18\x4d\xf8\x47\x7a\xc3\xb3\x9c\xe2\xbb\x36\xf0\x60\x3a\x1a\xf8\x6f\x0d\x7b\xbc\xac\xdd\xb3\x76\xcd\x6a\xdb\x53\x25\xb5\xd9\xc0\x5d\xb9\xee\x3f\x4d\x91\x96\x5c\x08\x32\x0d\x2c\x55\xf6\x5a\xd3\x4d\x9f\x27\x2f\x73\x71\x58\x42\xe5\x5d\x1a\x79\x06\x8a\x49\x95\xb4\x5c\x14\xf2\x96\x82\x62\xd6\xb0\x6c\xca\xa1\x59\xc9\xb0\x6d\x52\xa7\x91\xa6\xb3\x42\x48\xd1\xbc\x87\xfd\xc4\xce\xe5\x71\xd8\x57\x5a\x72\xa7\x40\xcd\x3d\x57\x73\x36\x6e\xd7\xf1\xa3\x3e\xf7\xbe\x6f\x99\xef\xfd\x03\xf5\x47\x2e\x56\xbe\xf8\x41\x5c\xb8\x39\x63\x1d\x83\xc4\xe5\x37\x72\xa0\x4d\xc5\x94\x8b\x4d\x87\x74\x3d\x8a\xd4\xb4\x18\x92\xa2\x62\x7a\xac\x4b\x60\xd7\x35\x54\x8d\xb7\x62\x40\x04\x8c\xcf\x41\x41\x0d\x29\x27\x9d\x23\x6b\x2b\x9b\x17\x78\xbb\xc2\xd4\x56\x65\x2b\x2e\xfd\xf4\x86\x7c\x78\x6f\x81\x77\xa3\xef\xbb\x31\xb5\x5e\xbb\x9e\x79\xc1\xf0\xbc\xe5\x8c\x06\xc9\xb3\xe5\x80\x50\x35\x4d\x8e\x7c\x8b\x73\x1d\xc8\x69\x26\xb6\x82\x58\x65\x09\x85\xe2\xd4\xff\xdf\xb1\x56\x68\x86\xb1\xbd\x48\x0f\xe2\x18\x52\x9c\x11\xe8\x38\xf8\x5f\x5b\xbe\x90\xeb\xbf\x83\xb6\xa5\x34\xcf\x96\xa9\x7e\xe3\x11\xa9\xfe\xe1\xaf\xf9\x4b\x78\x15\x1a\x76\x7d\x3f\xdb\xf3\x33\x1b\x7f\x6b\xb9\xf7\x7c\xcf\xdc\xfd\xf2\x73\x79\xdf\xfd\x60\x75\xef\x6e\xb7\x8e\xfc\x36\x28\x7f\x12\x33\x07\x87\x25\x22\x85\x89\x48\x21\x94\x6c\xc1\xf7\x49\x4a\xa5\x18\x4a\x32\xa0\x0e\x01\xc9\xf3\x98\x52\x34\x55\x62\x48\xcb\x32\x38\x0d\x09\x22\x05\x50\x3a\x52\x5c\x43\x1c\xa7\xcd\xab\x4f\x3e\xbf\x30\xe9\xc1\xb8\x81\x7b\xd6\x5c\xbf\x7d\x67\xe7\xad\xf5\x8f\x84\xaa\xef\x3f\x79\xd1\x2a\xe7\xf5\xb1\xcd\x33\x46\xa2\x4c\xe8\x0f\x65\x29\xc6\x02\x29\x98\x90\x76\x70\x10\xb0\x04\xb4\x09\x28\x51\x66\x1c\xfb\xb6\xcf\x58\x3e\xc4\x38\x12\x14\xda\x60\x65\x5d\xb3\x25\x1a\x0a\xb6\x12\x27\x76\x30\xd4\x8d\x1e\xe7\x37\xd4\x59\xd3\xa1\x5f\xf7\xc1\x75\x87\xca\x27\x27\xbd\x68\x73\xfa\xfe\xc4\x7c\x9f\x5e\x58\xf5\xc9\x9a\x76\xc7\xce\x59\xc9\x53\x53\x80\x0a\xd6\x5d\x35\xc0\x04\x27\x43\xe0\x28\xbe\xc9\x53\x8c\xe8\x5a\x4a\xac\xda\x9a\x17\xc8\xaa\x47\xbb\x22\x83\x64\x55\xe6\x5d\x2d\x16\x39\xd1\x71\xb1\x96\xf8\x96\x17\x7d\xbb\xfd\x45\xf9\x5c\xc3\xf3\x17\x7f\xeb\xde\xd0\xe6\x68\x58\xa5\x25\x35\xbf\xef\x5c\xdb\x2f\x78\xf0\xed\x65\xef\x1c\xea\xbc\x78\x48\xb9\x24\xe2\xd7\xdd\x20\xd0\x48\x83\x43\x36\xc9\xc9\x81\x18\xfa\x46\x64\xc7\x8e\xe4\xc5\x21\x2b\xc8\x86\xc3\x2a\x34\x64\x09\x4f\x08\x02\xca\x71\x08\x14\x60\x08\xd3\xd1\xac\xa8\xb9\x71\xa3\xb1\x78\xca\xa7\x2f\x8f\xf4\x2c\xa9\xe6\xcf\x31\xe6\xc7\x5a\xd2\xe3\x23\x59\xb2\xbe\x39\xab\x54\x8f\x9b\x57\x4a\xff\xec\x66\x0c\x3a\x96\xd0\x8d\x03\xd5\xf5\x18\xd2\x72\x04\x27\x08\x63\xc1\x71\x01\x88\x5c\xe0\x89\xac\xe3\x03\x53\x8e\x91\x21\x20\x49\xc3\x6a\x88\x11\x6f\xf9\x84\x63\x04\x52\x9c\x0e\x21\xb8\xee\xdc\xf9\x13\x8c\x4e\xb3\xba\xdd\x36\xc6\x79\x95\xfb\x94\xfe\xf8\xe2\xea\x02\x4b\x4b\x29\xde\x9a\x36\x63\x1e\x15\x7b\x74\x6b\x57\xc6\x56\xac\x26\x06\xe8\xe9\x8a\xcf\x22\xd6\x81\xba\x16\xfa\x8e\x0a\x6c\x0d\x98\x06\x20\x80\x05\xf8\xd0\xb5\x01\xe3\xa9\x3c\x03\x20\x96\x5c\x45\x08\x74\xc2\x85\x8c\xfb\x6f\xfc\xfa\x92\x9c\xff\x1d\x70\x2c\xa5\x59\xb1\x42\xff\x87\x6c\x72\xa0\xc2\x98\xe9\xad\xb3\x67\x1e\x3a\x27\x64\x3a\xfe\xb5\xe2\xab\x3f\x76\x5f\xf8\xe2\x8f\xd7\xdf\x70\xef\xcd\x3b\xcc\xfc\xba\xfc\xee\x80\x64\xf6\x5c\x0d\x28\x22\xc1\x17\x28\x5e\x63\x39\x09\x70\x96\x07\x64\x33\x0e\x7d\x91\xf3\x29\x32\x64\x22\x42\x0b\xb1\xc4\x7a\x7c\x24\x07\xa6\x6e\xb8\xbe\xcf\xc9\x89\x2d\x7f\xcc\x21\xea\x01\x9c\xf9\x66\x9e\x2d\x93\xdb\x94\x7a\xd9\x7e\x45\xb6\x81\x1f\xac\xf9\x71\xef\x88\xbd\xad\x85\xdc\xcc\xe2\x83\xa7\xae\x27\x6f\xa5\x3c\xb2\x7d\x2d\xf4\x49\x80\x10\xe6\x2c\x2f\x08\x79\x23\x14\x6d\x82\x0e\xa8\x40\x0b\x28\xd3\x15\x62\x9f\xa6\xdc\xc0\x22\x35\x20\xb3\x06\xcb\x48\xa2\x80\xd3\xa1\xc2\x3f\x1e\xf3\xd7\xa6\x7e\x0f\x2e\x83\x5a\xc3\x7b\x35\xb8\x33\xf2\xb7\x89\xf9\x66\xe5\xec\xd9\xab\xc5\x97\x6c\x8b\x86\xe4\xde\x2d\xe7\xfa\x24\x2f\x1b\x80\x8c\x25\x43\x2b\xd6\x44\x5a\x14\x69\x8a\x44\xb1\x40\x05\xbe\x08\x15\x93\x24\x44\x2d\xb4\x1d\x6c\xd0\x8c\x0a\xd8\x20\x60\x91\x28\x33\x34\xcf\xb9\x2e\x4a\x7c\xe4\xab\xc5\x8a\xdf\x4f\x19\x28\x80\x6a\xbd\xce\x37\x55\x7e\x79\x34\xe8\xf6\x81\x1e\x53\xf3\xe6\xfd\x2e\xca\x25\x94\xe9\x57\xbb\xda\x8b\x8c\xa5\x89\x89\xf7\x36\x72\x00\x21\x4a\x54\x75\x39\x8a\x71\x4c\x6a\xa6\x1e\xf8\xae\x62\x1a\x3e\x22\x58\xcd\x60\x29\x95\xe4\x18\x99\x34\x79\xda\x54\x5d\x22\x34\xe8\x30\x66\x13\x3f\xd6\x03\x5f\xf1\x85\x46\x3c\xe9\xb2\x64\x8a\x3e\xe0\x93\xf2\x77\xcf\xbe\x9c\xfc\xfd\xcc\xdc\xbb\xbf\xdd\x3a\xe0\xcd\x11\x93\x0f\xbe\x99\x7d\xd4\xc1\xe4\xb9\x44\x53\x02\x0c\x01\x54\xce\xa5\x21\xe9\xab\x88\xd0\x4d\x2f\xc6\xb2\x10\x68\x86\x85\x22\x4a\xd4\x6d\x19\xc5\x71\x10\xe9\x9a\xad\x93\xbe\x48\x87\x9c\x6d\xa6\xc9\x06\xfe\x0e\x40\x96\xd2\x3c\x73\xb6\x1c\x43\x52\x67\x03\xe3\x3b\x4d\xbe\x79\xbe\x61\x95\xd3\xa5\xb9\x6a\xa7\xda\xed\xb9\x31\x75\x69\xcb\x1e\xb5\xdb\x9f\x29\xdf\x6e\x69\xed\x72\xb7\x5f\x69\x91\x2f\x79\x1f\x05\x49\xae\x60\xd9\xa4\xa2\x51\xa4\x84\xb4\x40\x54\x05\x8f\x33\x00\xed\xb0\x06\x69\x89\x50\x21\x74\xec\x6a\x9e\xa9\xfb\xac\x65\xca\x81\x47\x62\xca\x57\xd2\xd1\x56\x1a\xb5\xe7\xed\x83\xeb\xfa\x3f\x7c\x72\xa5\xcb\xa4\x3e\x63\x96\xb5\xa8\xfa\x74\x61\xc7\x57\xba\x2a\xb8\xee\xa0\xfa\x13\xee\x71\x79\x4b\x57\x4c\x9e\xe9\xbb\x58\xb4\x21\x8d\x63\x03\x51\x2e\x27\x2b\x44\x10\x0a\x8a\xe5\x83\x90\x0e\x28\x31\xe0\x7d\x80\xb0\xcf\x33\x8e\x1f\xcb\xd8\xe6\x0d\x81\xb5\x81\x9d\xce\x6b\xad\x31\x72\xd4\x71\x8d\xdc\xb6\x3c\x67\x58\xac\x4b\xf9\x87\x65\xe7\x6c\xbf\xf4\xde\x82\xb2\x6b\x9a\xff\xbc\x7a\xe3\xa6\xa9\xe3\x7e\x37\x93\x87\x19\x86\x6c\x64\x69\x82\x17\x28\x34\xe6\x78\x07\x19\x2c\xef\x18\x8c\x69\xca\x2a\x46\x8c\x4e\x41\x23\xd4\x31\x44\xff\x28\xe6\x0c\xcd\xb2\x89\x38\x76\x42\x85\x4f\x7c\xcb\xd7\x57\xbc\xb9\x5e\xc9\xd2\xb6\xc9\xd9\x9d\xd5\x99\xb7\x07\x55\xbb\xff\xc7\xaa\x71\xc5\xda\x0d\xef\xf5\xe5\xbc\x4e\xb3\x1f\x4c\xbd\x55\x17\x27\x71\x38\x09\x44\x48\x11\x90\x11\x0d\x43\x27\xa9\x48\x30\x35\xd7\xa0\x6c\xc9\xe1\x59\x06\x2b\x8c\x87\x50\x64\xd1\x24\xe0\x34\x48\xf2\x1e\xa9\x02\x8d\x52\xd2\x51\xce\x5e\xfa\xa8\x50\x98\xfd\x61\xd6\xa5\xaf\xec\x1d\xd8\x33\xbf\xbd\xf4\xc6\x97\xbb\x3f\xda\xf5\x8a\xb5\x70\x4f\xf1\xce\x23\x4e\x17\xed\xfa\xa0\x52\xf2\x6c\xd9\x0a\x4c\xc3\x87\xff\x08\xab\x0e\xd4\xbc\x40\x02\xbe\x13\x06\x8a\x12\xf3\x80\x22\x31\x45\x4a\x8a\x6b\x3b\x58\xd3\x69\xc2\x03\xae\x40\x2b\xaa\xa6\xa6\xb7\x65\x55\xfb\xb0\x4b\x96\x5f\x8a\xdd\xac\xa0\x14\xfa\xf3\x74\xef\x5e\xfd\xbf\xea\x51\x01\x57\xbe\x3b\xb6\xda\xc4\x82\x07\xe6\xfd\xd9\xf3\x69\xc6\xe0\xfa\x89\x3b\x46\x2a\x15\xd9\x94\xee\x70\xac\x23\x08\x82\x8e\x39\xdb\x10\x3d\x59\xf4\xc5\x48\xf1\x7c\x47\x70\x39\xda\xe5\x95\x28\xb6\x5d\x32\x32\x19\x86\x63\xa2\xff\x58\x42\xfa\xaf\xc5\xfd\x7f\x07\x31\x4c\x69\x3e\xb8\x63\xa6\x82\xa9\xdb\x78\x4d\x06\xcf\xf6\xab\x7f\x32\x6f\xe4\xa1\x27\xa3\x2b\x14\xa3\x67\xaf\x94\x27\x2e\x3b\x57\xca\x5a\xf5\xa8\x66\xbb\x97\x4a\x7c\xb3\xf7\xce\x24\x96\x1b\x24\xc3\x28\x3a\xe4\x42\x41\x0d\x21\x15\xf9\xba\xe2\xb2\x91\x69\x87\x90\x04\x86\xe1\x2b\xa2\x66\x39\xd0\x97\x20\x43\xc5\x2c\x6f\xe9\x04\xad\xe3\x74\x1a\xee\x67\x3e\x6e\x51\xb7\x7b\x4f\x54\xf9\xfe\xf0\xba\x53\x88\x4f\x9f\xae\x9a\x53\xe7\xf3\x6e\xaf\xae\xe9\x3d\xb9\x55\xa5\x9c\x1d\xcb\x4d\xef\x0c\x93\x88\xa6\xe2\x11\xa1\x4b\x5e\xec\x99\x9e\x66\x01\x39\xc2\x36\x52\x4c\x9a\xb3\x90\x6b\x03\x83\x83\x8a\x2f\x45\x3c\xeb\xb8\xba\x22\x01\xd9\x34\x79\x86\x70\xd3\xd9\x59\xda\xa7\xd9\xa4\xb3\xef\x67\xfa\xbc\x50\x8e\x9b\xfc\x5b\xbf\x4c\x75\x9b\xe5\x2c\x75\xf4\xeb\x9c\xec\xac\x71\x4b\x3a\x5f\xc2\xa3\xbf\xe2\xba\x25\xef\x96\xa9\x58\x8a\x0c\xd5\x0c\x7c\x2c\x40\x21\x52\x62\x4e\x47\x84\xc2\xe8\xb4\xa2\xb0\xaa\x6d\xd8\x42\x0c\x15\x57\x27\x79\x35\xd6\x0c\xcd\x00\x80\x42\xff\x6c\xe3\xa5\x9d\x11\x74\x25\xee\x65\xea\x47\x37\x9d\xb2\x78\xf3\x0f\xdb\x06\x87\x73\xe3\x5a\x3f\xe7\x18\x36\xb9\x6c\xf5\x9c\x43\x3b\x1d\x7a\xed\xdb\x39\xb5\x56\x24\xb1\x05\x43\xd2\xae\x4b\x48\x42\xc0\x78\x91\x67\x23\x85\xa5\x42\x5f\x07\x40\xe7\xe5\x08\x23\x15\xb0\xbc\x6b\xf8\x94\xe4\x62\x40\xda\x1e\x27\x87\x86\xc4\xf2\x69\xa7\xbb\xb3\x4e\xd0\x75\x2a\xb1\x7f\x15\xaf\xd4\x6b\x4b\x1d\xbe\x6f\xb8\x25\xce\x56\x85\x98\x2f\x84\x0b\xb7\x3e\x77\x3f\x9b\xfe\xdb\xd9\x22\x49\x7c\xa9\x72\xa8\x6b\xb2\x0f\x18\x8b\x37\xe4\x40\x30\x1c\xdf\x03\x3c\xe9\xb3\x86\x04\x49\x5a\xa5\x45\x91\x91\x39\x2e\xc6\x3c\x89\x05\x2f\x26\x44\x1c\xff\x07\x04\xf5\x5f\xa9\xc0\xdf\x41\x23\x53\x9a\x67\x6e\xdc\x6f\x58\xea\x54\xa0\x45\xd1\x9f\x1e\xd5\x7d\x67\xe1\x35\x63\x6d\xd3\xb6\xc5\x1a\x74\x75\x37\x54\xb5\x1a\xef\x6b\xf4\xd9\xcf\xfb\xb7\x3c\x1d\x50\xe8\xf4\xdc\x8c\x61\x94\xd2\x0b\x52\xaa\xa1\x5b\x04\x67\x70\xb2\x45\x9a\x16\x63\x79\x36\x26\x35\x9e\xf3\x28\x21\x40\x8e\x87\x35\x83\xc6\x8a\xcc\x4b\x94\xee\x2b\x02\xad\xd2\x6c\x3a\x53\x90\x9d\x13\x3a\x8c\x55\xa7\x56\xbe\x15\x8e\x5a\x52\xda\x5f\x3d\x8c\x78\xba\xe0\xe2\x74\xee\x5d\x2b\xcb\xc3\x06\x05\x7f\xde\xb6\xb7\x55\xf6\xe4\x79\x7c\x3e\xf6\x62\x0f\x79\x8e\xcf\x23\x85\xe4\x02\xc6\x63\x62\x60\x79\xbc\xa9\x4b\x4a\xa4\x08\x82\xa2\x23\x83\x62\x62\x59\x07\xc0\xa0\xb0\x44\x28\x84\xe2\x26\x3e\xf2\xc9\x5c\x87\xd6\x7e\xc9\xef\x6c\x9a\xf3\xe3\x7b\x4d\xb6\x77\x3d\xff\xd9\x23\xe6\x07\xf3\xcd\xad\xeb\x8f\x2d\x19\x58\xae\xfb\x90\xf7\x07\x65\x8c\xfb\x9a\x30\xa5\xf4\x55\x1f\xa9\x86\x47\x89\x04\xa0\x44\xd5\x09\x4c\xc5\x55\x14\xde\xb3\xe5\x58\x13\x08\x8e\x11\x28\x43\xe5\x1d\x87\x52\x2d\x27\x46\x1c\x65\x42\x36\x4e\x67\x0b\x7e\xff\x17\xcf\x4e\xf4\xd8\x96\x67\xcd\xa1\x93\x13\x26\xe4\x6c\xf6\xf3\xc4\xb3\x0f\x9e\xcd\x79\xf1\xa4\xf2\x8a\x7e\x7d\xcf\xbd\xbe\xe3\x8d\xec\xc5\x93\x38\x76\x8f\x04\xdb\x75\x00\xed\x42\x91\xe7\x34\x6c\x32\x02\x89\x80\xa7\x9a\x82\xa5\x01\xd6\xa0\x3d\x36\x0a\x75\xce\x20\x79\x5f\xf0\x2d\xec\xab\x92\x62\xa7\xa3\x9c\xb1\xaa\xc3\x6b\x93\xc0\xcf\xa3\x77\x39\x0f\x57\x8f\xc9\xd2\xf6\x61\xfb\x2f\x1f\x2d\x5e\xdc\xe8\xdb\x6a\x47\x47\x2e\x7f\x5c\x63\xcc\xae\xdf\x7e\x48\x9e\x0b\x97\xb1\x62\x09\x8c\x1b\x08\x0a\x03\x4c\xd3\x95\xc9\x38\xa4\x24\x8b\x08\x29\x3b\x0a\x09\xdb\x01\xae\x64\xa8\x1e\x0b\x79\x81\x66\x45\x44\x93\x38\x72\x98\xc4\xb7\xbc\x7b\x7b\xb3\x1c\x67\x5a\x34\xdd\x58\xf1\xca\xfa\x01\x39\x7f\x2d\x07\x1f\xf4\x19\xb8\xaa\xe5\xcf\x5f\x7f\xa6\xf6\xff\xf2\xec\xf1\xe6\xcb\xfa\x24\xef\xf9\xf1\x01\xf0\x01\x07\xf4\x88\x85\x94\x41\x31\xa1\x61\x49\xb1\x13\xe8\x31\xf4\x05\x18\x63\xca\x61\x58\xa0\x78\x32\x17\x22\x5d\x84\x21\xa2\x58\x6c\x33\x69\x94\xc2\xfe\x0e\x4d\x9d\xd2\x3c\x0b\xca\x54\x30\x75\x67\xa0\xc3\xc6\xb5\x99\xfd\x67\x87\xc4\xc2\xeb\xe9\xf9\x56\xbd\xda\xb9\x6f\x14\x5f\xb6\x6c\x66\xeb\x3b\x7b\x2e\x8c\xa9\x7c\x86\xd8\xb1\xa5\x76\x12\x53\x01\x53\xe3\x63\xc9\x94\x1c\x49\xd0\x44\xc7\x23\x69\xce\x33\xa0\x26\x9b\xb1\x85\x2d\x97\x10\x62\x60\xba\x0a\x6f\xd9\x36\x2f\xc6\x98\x09\x54\x48\xca\x51\x62\x3b\x3a\x72\xf0\xa7\xc6\xfd\x06\x9d\xdc\x90\xed\xe0\x3b\xf1\xe4\x57\xba\x15\xf9\xf9\xdb\x9c\x39\xf6\x95\xa0\x87\xff\x35\xfa\xc6\x80\x0a\x73\x7a\x17\x4c\x9e\xe9\x4b\x54\x40\x41\x68\xc5\x48\xb0\x74\xd6\x08\x5c\x42\xc0\x16\x70\x1d\x84\x88\x10\xd9\x20\x20\x23\x9e\xb3\xa3\x20\xa0\x48\x22\x46\xb4\x14\x09\x0e\x48\xa7\xcc\xbe\x57\xe6\x95\xf3\x9f\xf5\xe1\x6f\x35\x18\xfb\x2a\xff\x76\x85\x65\x7b\xf0\xce\x0a\x63\x9b\x29\x6f\xce\x1d\x74\x68\xdb\xd1\x03\x17\x0f\x0f\x4a\xa2\x98\xa5\xe3\x81\x88\xe1\x48\xcd\xe6\x5d\x8b\x20\x69\x4b\x14\x0d\x95\xf7\x2c\x28\xda\x84\x18\x32\x91\xc9\x59\x0a\x1f\xc4\x6e\xa4\x00\xd3\x8b\x3d\x8e\x57\x8c\xc4\xa6\x7f\xa0\x4e\x7b\xbb\xd6\x08\xe6\xec\xc4\x16\xfb\xe4\x29\x5c\xc9\xbd\xf7\xcd\xe2\x73\xba\x5e\x2b\x33\xbd\xea\x81\x9b\x85\x33\x75\xec\xf3\x53\x12\x39\xb6\x9c\xee\x2a\xd8\x92\x70\xcc\xca\x1e\xf2\x35\x82\xa1\x69\x0f\xd1\xb2\x26\x2b\x8c\x29\x61\x9d\x51\x0c\x1a\xc5\xaa\xe5\x5b\x92\x1b\x23\x33\x74\x9d\x74\xf4\x49\xde\x9d\xc1\x4c\x7e\xbb\x4a\x93\xd3\x6f\xb8\x57\xf2\xbd\x37\x31\x57\x45\x5d\x99\xcb\x9e\x9f\xd4\xf4\xc1\xc8\x86\x5b\x6b\x16\x67\x7e\x2d\x96\x3c\xc3\x60\x42\x3e\x92\x25\x28\x84\x90\xa7\x2c\x49\x26\x34\x9f\x22\xa4\xc0\x12\x2d\xd7\x15\x18\xcc\x86\x9e\x25\x22\xd7\x20\x43\x19\x41\x9b\xa4\x08\xd7\xc4\x4e\x9a\x21\xe4\xdf\x81\xd7\x53\x9a\xe7\xcc\x9c\x29\x4b\xea\xd7\x7a\xf5\xd0\x94\xa9\x87\x4b\xac\xf8\x7f\xac\xbd\x75\xb8\x56\x45\xf7\x3e\x4e\x2a\xd2\x22\x2d\x4a\xa9\x08\x88\xc0\x4e\xe9\x3a\x94\x74\x48\x89\xc2\x9e\x9d\xb3\x7b\xef\xd9\x39\x02\x22\x60\xd0\x25\x29\xa9\xa4\x34\x48\x37\x12\x52\xd2\x9d\x4a\x87\x74\xe7\xef\x7a\xbf\xef\xe7\xfd\xf9\x9e\xcf\x79\xce\xe5\xe7\x3a\xd7\xf3\xff\xf3\xc7\x3c\xb3\xef\x59\x6b\xcd\xac\xfb\xbe\xd7\xdb\x73\x72\x9e\xae\x93\xc2\x5c\xcd\xec\x2d\x2a\x54\xf5\xfd\x8b\x1f\x9c\xfa\xa4\x6c\xef\x7a\x33\x56\xe7\xcc\xd8\x0b\x53\xc2\x8f\x62\x01\xd1\xa2\x5d\x41\xe6\x45\x5e\xd0\xd4\x90\x8b\x04\xdf\x55\x4d\x53\x94\xe3\x28\x66\x6d\xd3\x32\x9d\x48\x76\xfc\xc0\x75\x05\x0e\x99\x21\x21\xc4\x4e\xaa\x61\x12\x7f\x97\x94\x6d\x08\x3a\xcc\xe4\x57\x2b\xb5\x61\xd7\xf5\x1a\xb5\xab\xdf\xfd\xe4\xd6\x91\xaa\xed\x27\xd9\x03\x71\xee\x3c\x1b\x06\x36\x84\x65\x32\x46\xb6\x4a\x58\x0e\xd0\x11\x8f\x22\xe4\xfb\x86\xaf\xf0\x2c\x1d\x90\x7a\x6c\x5b\xaa\x1f\xd0\x22\xa1\x10\x20\xb6\xa8\xc0\x09\x30\x21\x53\x8c\x6a\x22\x11\x78\xa1\x1c\x82\x04\x46\x0d\x2f\xbe\xb9\x19\x5e\x8c\x76\xb7\xfb\xb1\xf8\x3b\xcc\xf0\x13\x1b\x8f\xdc\x64\x8f\xf7\x7f\x90\xab\x61\x99\xc5\x53\xae\xcd\x7e\xd1\xb6\xe6\xa5\x24\x7a\xb8\x72\xb2\x4d\xfa\x12\xb0\x0c\x81\x31\x34\x8b\xa7\x59\x23\xf2\x11\x6f\x7a\x5e\xe8\x33\x50\x97\x2c\x04\x80\xc7\x0a\xb6\x6a\x52\x81\xa0\x42\xd7\x70\xd2\x29\x05\x94\x5f\xfa\x36\x7f\xb6\x70\xc4\xaf\x47\x7a\xae\x19\xd5\xbf\xf9\x6f\xfd\xc6\x17\x7e\x7d\xd6\x9b\xbd\xba\x3d\xcc\xd2\x58\xeb\x5c\xb2\xf3\x9f\x19\x33\x7b\x4c\xac\xe3\xc3\x04\xe4\x29\x57\xd3\x63\x5e\x10\xc8\x28\x8a\x81\x41\x02\xc5\x0e\x03\x82\x53\x35\x1d\x9a\x12\x67\xd2\x3c\x54\xa8\x40\x57\x10\xe3\x5b\xb1\x15\x93\x89\x97\x3c\x78\x86\xf7\x17\xcc\xbf\xf5\xf3\x26\x95\x0b\xe4\x78\x74\xb9\xc9\xb5\x4e\xdb\xd6\xd7\x6c\x30\xe8\x18\x7e\xd6\xbb\x05\x4a\xe9\x98\x2d\x89\xf6\x71\x30\x22\x55\x32\x14\x54\x5e\xd5\x01\x36\x5d\xc7\x24\x98\x80\x62\x45\xa0\x33\x5a\xa0\x5b\x8a\x0e\x14\xd3\xe2\x6d\x83\xd3\xe2\x58\x90\xa0\x28\xc6\xd8\x48\xbc\x64\x19\x64\xa9\x33\xb1\xc7\x75\x6b\xc6\x98\xd7\xca\xbd\xf2\xd6\xcc\x2f\x06\xe7\x9a\xd9\xa8\xdd\x93\xfb\x6f\xae\xfa\xab\xf9\xb6\x4b\xb5\xf7\x25\x6f\x8c\x1d\x47\x88\x1a\x4b\x79\x21\xc3\x29\xc0\xf0\x23\x08\x22\xc7\x36\x74\x5f\x0b\x42\xcf\x0d\x24\xcf\x06\xb2\x45\x0a\x32\xd4\x34\xc9\x8b\x69\x4b\x33\x0d\xd2\xfb\xbb\x79\xf4\x9f\x52\xe0\x9f\x18\xc0\x7d\x52\x32\x67\xcb\xfc\x5d\xea\xe0\xf2\xbb\xf6\xe3\x4e\x6b\xc6\xa2\x86\x0d\x4b\x0d\xeb\xf8\x72\xe5\x50\xf9\xe6\xa6\x6a\xdf\xe0\x1e\x6b\xde\xf8\x36\x7c\xaf\x65\xad\x82\xa5\x32\x36\xea\x36\xe1\x49\x35\x19\x51\xb4\x29\x92\x86\x8c\x06\x14\x15\x05\x26\xc2\x71\x18\x29\xd8\x0d\x14\x8e\x43\xa4\xa8\xc6\x9a\xc6\xb8\x04\xaf\xb3\x46\x18\x8a\xa4\xcf\xa7\xb6\x29\xf8\x7b\xc9\x93\xe7\xf4\x1d\x98\xb9\x6a\xb6\x8f\xc6\x0e\x5b\xff\xac\xcb\xca\x89\xb7\xc7\x4f\x7c\xe3\xc4\xbd\xbe\xd4\xe1\x2f\xf6\x1d\x59\xfb\xe8\x7a\x9d\xe4\x91\xc4\x00\x02\x0c\x90\x39\x2e\xa0\x83\x38\xd6\x62\x12\xf9\xa6\x28\xaa\x90\xe2\x18\x64\x0a\x34\x1f\x07\xa4\xeb\xd1\x7c\x6c\xc7\xba\xa8\x0a\x38\x32\x25\x83\x94\x13\x2f\x79\x76\xd5\xc6\x53\xe7\x32\xde\x6e\xad\xf1\xc2\xba\xaf\x3d\x1a\x53\xa6\xe3\x12\xb3\xe0\xf5\x0a\x7f\xdd\xe8\xc6\x4d\x5f\xf6\xe1\x84\x29\xc9\x33\x33\xe1\xf4\xc8\xb4\x2c\xc5\xd6\x7c\x03\x41\xc8\x3a\x36\x0b\x34\xc9\x76\x38\x92\x8d\x6d\x96\x63\x63\x82\xa7\x79\x83\x50\xed\x40\x32\x35\x28\x42\x83\x34\x50\x3a\xa5\x40\x99\x69\x59\xfa\x3f\xf8\x75\x8f\xd9\xa9\xeb\xea\xd3\x2f\xfb\x35\xfc\x7a\x8b\x7e\x62\x41\x7f\xd4\xfa\x79\xc7\x68\x07\xca\xf5\xd7\xb0\x24\xe6\x55\x23\x20\x43\xc2\x37\x48\x1b\xc4\x8c\xac\x0b\x74\x20\x39\x9c\x4f\x45\xb2\x69\x68\xa6\x0b\x04\x31\x76\x18\x5a\x0b\x0d\x5f\xc4\x82\x29\xb2\x8a\x8a\x71\x3a\x96\xee\x5a\x87\x0d\xc5\xac\x3b\x17\x1a\xaa\xdd\x0a\x38\x83\xf3\x9a\xef\x75\xcf\xb7\xa2\xc2\x67\x71\xf6\xf1\x35\xdf\xed\x7a\x7e\x5b\xaf\x25\x05\x93\xf8\xf6\xe2\x33\x3e\x6b\x28\x88\x72\x81\xe5\x47\x76\x64\x33\x3a\x56\x43\xcb\x14\x24\xcd\x42\xb4\xe4\xf9\x94\x8b\xcd\xc0\x26\x23\x1d\x04\x21\x4d\xda\x82\xfa\x77\xc3\xeb\x51\xee\xff\x1b\x03\xbf\x4f\x4a\xf6\x12\xdd\x9b\xf4\x4f\xf5\x0f\x73\x37\x30\x5a\xfc\x56\xe7\x39\x2e\xff\xc6\x37\x23\x8e\xbc\x19\x4f\xba\xdc\x64\xfd\xae\xe1\x42\xc5\x39\x95\x3a\xf6\xf8\x7c\xf4\x9c\xf7\x33\x36\x67\x35\x21\x8e\xd4\xd0\xd3\x20\xa9\x47\x14\x21\x98\x21\xa0\x19\xc3\xb3\x08\x9d\x53\x23\x44\xda\x22\xa7\xd0\x92\xa2\x69\x06\x21\x3b\x80\x06\x6a\x64\xc9\x8c\x63\xc4\xe9\x24\xaa\x85\xfb\x2b\x15\x78\x47\x1f\x30\x62\x67\xe6\xd6\x25\xb7\x7e\xb3\xe2\x76\xfe\xdd\x5d\xbe\x58\x49\x37\xfc\x7a\xd7\xb5\xe9\xf7\x47\x8f\x1d\xd2\x2e\x89\x44\xe6\x48\xf6\x3d\xc5\x74\xf4\xc0\x84\x9c\xae\xf9\xae\x28\x33\x38\x72\x1d\x47\x55\x6c\xc9\x34\x49\x80\x21\xf6\x34\x6c\xbb\x86\xa1\xd1\x4c\x00\x62\x3e\x9d\xe9\x5d\xbd\x07\x12\x1b\xc6\xbd\xda\x60\xec\xdd\xee\x53\x99\xb1\x85\x4f\xfe\xf6\xfc\xcb\xaa\x33\xc2\xbb\x87\x2a\x0c\x79\xbd\x62\x8d\xfa\x6c\xe1\xf1\xc9\xcb\xad\x36\x22\x48\x13\x87\x42\x44\x93\x2a\xcb\x30\xba\x60\x70\x04\xcd\xc7\xac\xab\xe9\x58\xe3\x05\x51\xd2\x03\x82\x72\x2c\x97\xb3\x14\xe0\x63\x89\x76\xb8\x74\xaa\xe0\xad\xa1\x31\x50\x2c\x58\xb0\xc8\xa2\xdf\x2f\x6c\x7e\x34\x72\xc9\x9e\xfd\x2d\x3f\x26\xde\x29\x95\xeb\xf6\xf6\x72\xaf\x83\xca\x4a\xb7\x24\xde\x35\x30\x90\x24\xda\x0f\x35\xce\x16\x62\xc1\x61\x79\x9a\x08\x2d\x92\x0c\x48\x4f\xe4\x42\x11\x9a\x2c\xc5\x7a\x31\x21\x53\xa4\xed\x62\x07\x03\xcc\x5a\x7c\x94\x78\xc9\x85\x67\x94\x2e\xd9\x66\xc0\xba\x81\x77\xce\xbc\xd1\xbd\x4c\xa1\x4e\xbd\x27\x9d\xff\xf9\xe7\x55\x3b\xc6\x8d\xb0\x82\x8e\xb9\xe6\x75\xfa\xa3\x63\xf2\xae\xd9\xb2\xa4\x85\x24\x69\x48\x20\x92\x55\x0a\xf3\x3a\x69\x30\x94\x15\x63\x42\x05\xae\xcd\x8a\x9c\x61\x87\x7a\x4c\xd2\x2a\x22\x6d\xa0\x19\x0c\xe1\x09\x0e\x4a\x0c\x8c\xaf\x2a\xb6\x7f\x5a\x3e\x38\xfc\xe9\xe3\xcb\x43\x8a\x7f\x11\x2a\x8d\xf5\x12\x68\xc9\x4c\x72\xf0\x7b\x93\xdd\x02\x85\xf2\x64\xdb\xa6\x26\x51\xfd\x2e\xeb\xc0\x00\x1e\xf0\x28\x0a\x49\x1e\x86\x94\x0f\x7d\x9d\x0a\xa4\x50\x91\x63\x81\x26\xa2\x88\x0e\x25\xc9\x77\x58\xd3\x11\x42\x8b\x33\x25\x89\x77\x12\xc7\xc4\xec\xbb\xb7\xff\xb4\xb0\x5f\x9d\x2d\x95\x57\xf2\x60\xc8\xac\xcc\xf9\x27\x34\xd9\x74\xfa\xd2\xb8\x5f\xa7\x5f\xaf\xbe\xb1\xf5\xcc\x49\x6b\x32\x56\xda\x26\xdc\x65\xc8\xfa\x01\x0a\xf4\x10\x06\x3c\x8b\x69\xa4\x99\x24\xb2\x55\x59\xf1\x64\x45\x24\x58\xd2\xa3\xa0\xa4\x6a\xc8\x37\x5c\xc2\xc0\x31\x90\x4d\xd6\x82\xe9\xe4\xf7\x05\x93\x4e\x65\xee\x38\xfd\xb3\x5b\x5f\x67\xca\x39\x73\x70\xdb\x4d\x4e\x87\x1d\x27\x6f\xcf\x5a\xdc\xbc\xfb\x6f\x95\x7e\x7e\xb4\xa8\xe6\xf0\x8c\xb5\x15\x13\x2e\x59\xb5\x14\x9a\x67\x58\x95\xf6\x75\x11\xb0\x9a\xc6\x8a\x3a\x52\x74\x4d\x20\x35\x8f\x70\x65\x12\xc2\xc8\xe1\x00\x8c\x1c\x0d\xd8\x91\x65\x20\x4d\x07\xe9\xa8\x4a\xd1\x7b\x7b\xdf\x7c\x7b\x7d\xfe\x3e\x7d\x76\x76\x2e\xf9\xdb\xf9\x3c\xa5\xbe\xec\xb7\x3a\x57\xbb\x0a\xab\x5f\x5e\xaa\x70\x73\x42\x97\x66\x57\x92\x28\x84\x65\x09\x2e\xe2\x58\x45\xd6\x3d\x4a\x54\x4c\x41\xf7\xb1\x27\x9a\x8c\xce\x0b\x36\xe9\xc8\x8e\x2a\x99\x94\xac\xc9\xbc\x25\x0b\x2e\x19\x72\x90\x66\x04\xe1\xef\x5d\xbe\xd7\xf0\xdf\xab\x6d\xc0\xbf\xeb\x90\x67\xf2\x2c\xdb\xde\x34\x0b\x3c\xf0\x46\x89\x56\x5b\x26\x66\x6d\x5c\x6f\xfb\xc1\xd6\xc2\xd8\xc6\x07\x0b\x75\xb8\xdc\xbc\x4f\xca\xfa\x97\x2f\x5f\x8e\x2d\x99\x5a\x31\x56\xbb\x7b\xd1\x37\x9f\xe6\xd7\x0b\x34\xd3\xcb\x4f\xfb\x33\x33\xb5\x75\x55\xcb\x9e\x35\xdf\x7b\xd4\x1c\x7f\x5b\xf8\x46\xe5\x7b\x5b\xab\x7c\x9b\xfa\xd7\x33\xaf\xae\xca\xaf\x67\xcd\xbc\xe5\xc7\xd3\xc5\x9e\x0f\x3d\x47\x6f\x9d\xbd\xfa\x95\x47\xf3\x7f\x2a\xb8\x27\x07\x7d\xbf\xfa\x8f\x4b\xda\xda\xa9\xb6\xaf\xec\xb3\x5a\x55\xfb\xfd\xba\xa6\xd9\x6f\xd9\x87\xfe\x52\x79\xeb\x8b\x6d\x17\xf6\x74\x6d\xb7\x6c\xd8\xf2\xca\x2f\xc4\x3d\x0f\xbb\xcd\x7d\x91\xbc\x09\x8f\x1c\x0e\x0d\x91\x0b\x83\xc0\x37\x6d\x4a\xa3\x0c\x5e\x37\x18\x6c\x50\x71\x1c\x2a\xc8\x07\x4c\x20\x5a\x84\x04\x44\x89\xa2\x39\x92\x37\xc5\x80\xb5\x23\x27\x9d\xd7\xe3\xda\xbf\x1c\x2b\x3b\xa7\xdd\xe7\xf2\xda\x11\xcc\x57\x17\x2f\x94\xed\x76\xa4\x68\xcb\x11\xa7\x17\x57\xcc\x59\xe5\x96\x36\xa5\x9f\xbc\xb2\x4b\x12\x75\xc4\x3a\xe1\x18\x06\xef\x8b\xd8\xd6\xd4\x48\xf2\x0d\xc6\x0e\x68\xd2\x54\x15\x2b\x12\x1c\x16\x59\x10\x23\x2e\x0c\x18\x9d\x65\x24\x45\x0a\x22\xd6\x72\xa4\xc4\x7d\x9e\x3a\x97\x7e\x89\x78\x38\xa8\x7e\xf6\x3f\x0f\xbc\xf1\x4d\xcd\xd1\x83\xd7\x3d\x7c\x6f\xfb\xbc\x47\xb7\xaf\x66\x6f\xde\xf8\xcb\xcf\x56\xbf\xb5\x20\x79\x39\x22\xd2\x0c\x93\x52\x81\x89\x23\xcf\x05\x9e\x8d\x0d\x4f\x94\x5d\x8a\xf4\x1d\x1d\x05\x0a\x83\x71\xc8\xc5\xa2\x62\x52\xbe\x6b\x13\x0c\x29\xc8\x1c\x76\xe4\xb4\x64\xe6\x91\x4f\xb6\x1c\x7c\x90\x6d\xe4\xda\x86\xc5\x47\x77\xdb\x44\x8e\x26\x1b\xf7\xdc\x55\xbb\x4f\xe6\xef\x1b\xff\x3c\x38\x4f\xe6\xf9\x0f\xa7\x26\x71\x96\xb1\x04\x75\x55\xe1\x65\x59\x54\x39\xcf\x0b\x21\xc7\x72\x72\xe8\x22\x1d\x63\xc1\xb7\x75\x92\x76\x25\xdd\x32\x09\x35\x22\x28\xc0\x44\x9e\xa8\x0a\xea\xbf\xfb\x95\x69\x55\xae\xef\x3b\x53\xda\xbc\x9c\x9f\xfd\xc4\x0f\x9b\xbe\x9d\xf0\xda\xce\x9f\xcf\x8d\x2c\xfd\xdd\xaa\xfb\x93\xc7\x95\x9b\xd9\x60\x69\xcb\x23\xeb\xaf\x24\x91\x0b\x84\x71\x44\xaa\x22\x6f\x20\x05\xba\xbe\xe6\x33\xd0\xc0\xae\x69\xf2\x82\x06\xa1\x24\x18\x84\xa5\xd1\x00\xa8\x10\x12\xba\x19\x91\xb4\x42\x23\xde\x81\x69\xd5\x36\xcf\x3a\xfe\xbc\x75\x40\x69\xd4\x7c\xd7\x1f\x5f\xfa\x3b\x5f\xfb\x72\x58\x3d\xbb\x79\xab\x5f\x73\x7d\x75\xc7\x28\xfa\xe1\xf0\xd7\x9c\xf7\x32\x76\xbb\x4d\xb8\xc3\x20\x56\x23\x33\x42\xb6\x2f\x07\x20\x80\xc8\xe0\xe8\x48\x41\xb2\x41\x43\x0f\x98\x46\xe0\xdb\xa2\xea\x01\x56\x10\x54\x5b\x76\xa0\x14\xd2\x9c\xe6\x0a\xe9\xa8\x5c\xf7\x6d\x7f\x9c\x7d\xdb\xdd\x6f\x67\xb6\xcf\xd9\xbc\xb4\xbd\x76\x7f\xb7\x2c\x65\x06\xde\x5f\xf3\x73\xf6\x8d\x77\x36\x7c\xf9\xca\x8f\x83\x9b\x07\xa9\xbe\x47\xce\xb5\xb5\xc2\x31\x15\x77\xbc\x36\xd0\x2a\x53\xa2\x46\xf9\x92\xa7\x67\x7f\x3e\x74\xea\x8d\xae\xfc\xb0\xfe\x3d\xbb\x5b\xf9\x7b\xcf\x4f\xa2\xdd\x72\x1c\xf1\x14\xcd\x47\x34\x64\x59\x4e\x63\x0c\x35\xd4\x78\x17\xb1\x2a\xcd\x03\x2d\xf2\x4c\x6c\x9a\xbc\xe1\x45\x40\x33\x3c\x39\x8a\x44\xc2\x71\x19\x18\xa6\x45\xfc\x58\xfd\x49\x85\x3e\x0f\xcf\x0e\x99\x32\x6e\xef\xa7\x15\x71\x81\x89\x97\xfe\x68\xbb\x6d\xd9\x0f\x05\xb6\xe5\xc9\x52\xfe\x45\x8d\x0d\xbf\x24\x2f\xf1\x81\x50\x17\xcc\x58\x23\x74\x9d\x76\x63\x0d\x5b\xb1\xeb\xd2\x80\x76\xfc\x58\x57\xa0\x40\xd1\xb1\x66\x9b\x18\x73\x2a\x14\xfc\x98\x34\x54\x16\x39\x30\xd5\x78\xb5\xff\xfe\x1e\x85\xb2\xd5\xac\x19\x0c\x7d\x7b\xfa\xca\x46\xb5\x5e\x6b\xb8\xaf\xc7\xe8\x79\xef\xe4\x9d\x55\xc0\x7e\xfd\xdd\x3d\x23\xfb\xb1\xd1\xba\xea\xdf\xa7\x0a\x9a\x6b\x8e\x7e\x3d\x7e\xd2\x80\xaf\xd7\x0e\x3e\x34\xb0\xda\x82\x97\xd7\xee\xce\x79\xb3\x77\xb9\x26\xe7\x4a\xfd\xf8\xe0\xb3\x0b\x07\xa6\xae\x2f\xb7\x34\x89\xcc\x79\xa0\xb1\x06\x8d\x4d\x0f\x89\x80\x8d\x05\xc7\xe6\x45\x8e\x35\x38\x52\x52\x29\x1c\x39\x21\xa0\xfc\x20\x90\x61\xac\x52\x20\x92\x18\x5f\xc5\x51\x6a\xcd\xdf\xdf\x06\x22\x95\xc4\xad\x2b\xab\x2c\xb4\x20\x5b\x7c\xf8\xd3\x15\x02\xc8\x32\x76\x79\xb1\x26\x6b\xb2\x4a\xf6\x99\x89\x1f\x5e\xa9\xfe\x64\xe9\xd6\x24\x32\x12\x09\x85\x92\x7d\x6c\x45\x7e\x0c\x54\x24\xa1\x98\x8f\x44\xac\xeb\x82\xae\x44\x80\x06\xa1\xa6\xd2\x91\xc0\xd3\x51\x48\x49\x8e\x4f\x33\xa1\xe2\xa2\x04\xee\x70\xab\xe7\x44\x4d\xb2\xef\x6a\xd8\xbd\x58\x96\x1b\xf7\xb7\x2c\x69\xb2\xaa\xe3\x86\x49\xaf\xcf\xb8\x76\xfd\xd8\xde\xe0\x54\xe1\xe1\x13\xcf\x55\x49\xde\xd5\xc5\x8b\x4c\x2e\xc0\x71\xc8\x9a\x96\x2a\x70\x18\xd9\xae\xae\x28\x40\xf7\x89\x38\xf6\xa9\xc8\x22\x18\x89\x23\x34\x05\xc6\x9c\x2b\x6b\x24\x87\x58\xff\xbf\x06\x68\xfd\xff\xcb\xdd\x36\x77\x45\xeb\x3f\xbf\x7b\x5f\xfd\xfa\xa3\x27\x1d\x5f\x39\xb2\xb5\xd4\x56\x73\xcd\x8c\xfa\x37\x8e\x9f\xdf\xb7\xd1\x3c\x76\xb6\xd1\xec\x12\xc9\x43\xbc\xc0\x60\x55\x00\xbe\xe1\x7a\x14\xe3\x4a\xa1\x14\x98\xb6\x1b\xd0\x36\xa7\xa8\x92\x8f\x75\x4f\x12\x80\x28\x4b\xb2\x21\x87\x42\x88\x31\xe7\x91\xff\xc3\xba\xf9\x4f\x8c\xff\x1b\x10\xe5\x87\x55\x2d\x54\xec\xd8\xed\x5c\xfd\x2b\xf9\x95\x3b\xd4\x3b\x51\x66\x53\xf3\x53\x8b\x7f\xfb\x78\xe2\xc8\x81\xd3\x1a\x89\x99\xbe\x6b\x91\x31\x9d\x56\xe2\x82\x9a\x53\x39\x5f\x52\x48\x31\x32\x04\x20\x28\x8a\x4f\x02\x1c\xc4\x22\x56\x90\x1c\xaa\x56\xa8\x91\xae\x29\xc4\x84\xac\xab\x9e\x16\xf0\xae\xa8\x19\x82\x9d\xf6\x69\x7b\xa6\xf2\x47\xff\xa1\x6f\x32\x79\x9f\x9c\xa8\x97\x6f\xe3\x96\xa1\x65\xab\xef\xc9\x57\xe5\xf9\xae\xe9\x13\x06\xed\xfa\x75\x1d\x35\x6b\x48\xc6\x7c\x69\x13\xc7\x14\x97\xd1\x65\x93\x25\x0d\x2d\xd6\x05\x1e\x28\x6a\x24\x40\x2a\xf6\x04\x46\xe5\x6c\x5a\xc5\x9c\x44\x41\xdb\x06\x01\x13\xe9\x8e\x41\x50\x64\xa4\x6b\x20\xed\x72\x0f\x0c\x10\x7e\xfd\xe8\xa3\x6b\x0b\x97\xfe\x5e\x61\xeb\xfe\xfa\xd3\xa6\x4e\x1c\x33\xe4\xa7\x2a\xc1\xf6\x37\x8e\x36\xdd\x3b\xaa\x71\x3c\x1e\x24\x0f\xbf\x04\x45\xeb\x3a\xe4\x54\x97\x57\x4c\x19\xeb\x2e\x42\x48\x8d\x1d\xa0\x4a\x86\x80\x83\x50\xa5\x64\xd2\x55\x90\xae\xbb\x71\x08\xe4\x18\x06\x0a\xe4\xec\xc4\xbd\x8e\x02\x73\x2b\xe5\xde\xb0\x15\x55\x79\xa3\x67\xb9\x96\xee\x39\x78\x2c\x7b\xfd\x83\x4d\xce\x9a\xcd\x86\xe5\x09\xdb\x76\xcf\x39\x74\x46\x12\x3d\x7b\x22\x1a\xeb\x3e\x05\x29\x56\xf6\x54\x3d\xd6\x84\x98\x97\x11\xa1\xd0\x9c\x28\x5a\x6e\x2c\xc7\xa2\xc3\x90\x96\x11\x3b\x11\xcb\xbb\x82\xe2\xf9\xa1\x4a\x6a\x69\x77\x78\xee\x28\xb0\xf1\xce\x5b\x25\x98\xa1\x15\x6a\xae\xe9\x9d\x43\xe8\x38\xf3\xf1\x44\xe9\x87\x57\xa7\xb4\xeb\xf4\xf2\xf5\xf6\xad\x0b\x3c\xcc\x58\xef\x37\x71\x4e\x34\x48\x83\x08\x01\xed\x07\xa1\x26\x00\x4d\xb2\x04\x8a\xa3\x3d\x8f\xf1\x41\xe4\x61\xcb\x95\x02\x83\xd6\x3c\x9e\x40\xac\xa9\x61\x53\xd3\x25\xc4\x49\x89\x77\x58\x9d\xf1\x69\xe5\xcc\x63\x1a\x96\xeb\x70\xe2\xc2\x98\x21\x5d\xf2\x8f\x3e\x3e\x7b\xec\xbd\xf1\xda\x07\x6f\x95\x5d\x34\xec\xb7\x86\x6e\x99\x8c\x39\xcd\x27\x8c\xc1\xbe\xc3\xf9\xb6\x85\x11\x54\x00\xc3\x68\x1a\x0f\x5c\x3b\x62\x09\x51\x62\x3d\x43\x87\x06\x16\x69\xca\xd2\x31\xc3\x28\x8a\xc3\xda\x82\x66\x05\x9a\x26\xa7\x8d\xc1\x53\x97\xf7\xf9\xba\x40\xc1\x7b\xd7\xf3\xec\x3e\x92\x67\xee\x5f\x3d\xce\xbe\x78\x79\xf3\xe8\x27\xf5\x57\x6d\xfd\xe1\x93\x61\x63\x9f\x67\xbd\x95\xb1\x61\x21\x09\x97\x1b\xc4\xa2\x08\x3d\x8f\xb3\x6d\xce\x0a\x00\x85\x61\x08\x69\x97\xf7\x9d\x88\xe2\x63\x55\x84\xa6\x8a\x04\x0e\xd2\x86\xeb\x28\x54\x20\x62\x40\x47\x6e\x3a\x16\x43\x99\xb3\xcf\x5a\xb3\x0b\x37\xad\x7c\xb7\xd1\xf6\x5c\x4d\xba\x36\x6e\xf0\xc5\xcb\xa6\x17\x8f\x0f\x1b\x5d\xed\xbd\x67\xab\x3f\x7f\x7e\xb2\xd4\xd5\xe4\x05\x35\x9a\x24\x45\x24\xb0\x4c\x08\x63\x53\xe4\xa0\x1e\x79\x6a\x28\x71\xc0\x37\x01\x1f\x68\xba\x24\x33\x9e\x22\x1a\x94\xae\x50\x1a\x47\xdb\xa6\x8c\x09\x22\xc1\xe4\xe3\x97\x9f\x0f\xaa\x6a\xcc\x3f\xd6\x5c\x5c\x34\x95\x00\x65\xba\x36\x0b\x0f\xdc\xed\xf9\x65\x07\xab\xe8\xc3\x17\x27\x5e\x1d\xa5\x1e\xcf\xd8\x18\xe1\xc4\xfd\x3a\x8b\xb4\x2d\x0f\x78\xba\x0b\x81\xa6\x91\x9e\x45\xe8\x9a\x1f\xd8\x80\xa2\x69\x9d\xe0\x95\x58\xa2\x28\x19\xab\x3c\xab\x8b\x9c\x1d\xd8\x80\x54\x78\x2e\xf1\x6b\x97\x3f\x7e\x49\xc7\x55\xa0\xc2\xc9\xce\x77\x94\xa1\x6f\xac\x58\xc1\x1f\xfb\x76\xdb\x9f\x63\x53\x2a\x1b\xdb\xdf\xd9\x7e\xe0\xbd\x8a\x27\x1e\x25\x6f\x87\x6d\x3b\xb6\x1c\x59\xa7\x5d\xac\xf1\x16\x17\x49\x14\xab\x9a\x9a\x07\x90\x61\xfa\xbe\x60\xc4\x2e\x27\xca\xa6\x6e\x8b\x84\x13\x58\x8a\xae\xd9\x52\x18\xbb\xe9\xd4\x76\x40\x7c\xf2\x0a\xf5\x72\x0c\x95\xbd\xf2\xdd\x37\x4b\x56\xae\xbd\xae\x2b\x9f\xe9\xfc\xfd\xbd\x33\xce\x1c\x3f\xdc\x70\xe8\xd7\x5f\x76\x2b\x95\x2a\x2f\x6a\xe4\x4c\xb2\xda\xc4\xcc\xf7\x06\x36\xb2\x0a\x34\xa4\xc7\x47\xdb\xde\xfa\x23\xf7\xfb\x43\x5e\x6a\x93\x8f\xe6\xad\xbb\x7a\x61\xbe\x8c\x39\x0d\x24\xfc\x83\xba\x1b\x02\x51\x90\x0d\x96\xf4\x29\x18\x48\x16\x03\x10\xe2\x4d\x3a\x74\x08\x52\x23\x78\x21\x26\x2c\x00\x7d\x92\x32\xfc\x00\xbb\x31\x65\xea\x26\xc7\xa7\x85\xd0\x60\xb7\x3f\xf9\xe1\xb6\x65\x07\xb3\x3f\xab\x5c\x67\x78\x3b\xb7\xdc\x94\x45\xfb\x72\x6e\xdb\xbb\x70\x7f\x97\x9b\xb3\xd9\xac\x59\xb3\xac\x4e\x1e\x84\x48\x36\x10\x24\x3b\xd4\x21\x29\x48\x90\xa3\x22\x10\x4b\x11\xe9\x72\x1e\xa9\xb2\x86\xc3\xc5\xff\x4a\xed\x48\x64\x6c\x4a\x90\x6d\x39\x96\x0d\x49\x53\xc9\xb4\x85\xd2\xf6\xcc\xf9\xb7\xbd\x1c\x37\x68\x62\xdf\x0f\x8b\xb6\xf8\x63\xf2\xa5\x55\xad\x2e\xb5\xfd\xc2\xaa\x36\xa3\xc3\x98\xdb\xa3\x2e\x76\xf8\xab\x01\x4c\x5e\xd4\x26\x43\xc5\x66\x69\xc7\xa5\x51\x14\xd3\x84\xeb\xb0\xa1\x27\x01\x45\x91\x11\xe3\x07\x32\x25\x6a\xb4\x0b\x45\x52\xe3\x19\xdb\x36\x5d\x02\x38\xac\x00\x52\x31\x61\xff\x06\x44\xf1\xe7\x2b\x36\x1f\xde\x96\xbd\xf1\x1b\x9d\x4b\x37\x38\xdf\xe8\xf9\xe6\xbc\xc7\xd1\xa1\xdb\x2b\xaa\xef\x7b\x73\x6f\x85\x1d\x6c\xb5\x53\x76\x12\xdf\xc4\x74\x2e\xa6\x79\x32\x8e\x0c\x8e\xa5\x3c\xac\x45\xb4\xc3\x6b\xd8\x90\x1d\x96\x12\xd5\x90\x10\x54\x8d\x25\x75\x26\x44\x8a\xc4\x39\xa2\xc0\xd1\xaa\x90\x00\x10\xce\xa9\x3d\xa8\x5f\xbe\x1a\x6f\x35\xa8\x7a\x36\xeb\xca\x4f\x26\xde\x6f\x49\xa4\x8c\xc9\xd1\xfe\xb7\x02\xeb\x9a\x7d\x34\x0b\x95\x1b\x98\xb1\xb1\x5b\x09\x77\x58\x0c\x44\x47\xb3\x19\x8e\x8c\x74\xc6\xc4\x91\x11\x50\x86\xc6\xb0\x21\xab\xf0\x1c\x26\x23\x87\x57\x80\x64\xc6\x94\x4f\x8a\xaa\xea\x19\x1e\x45\x93\x0e\x97\x16\x10\xbb\xd5\x50\xf9\x32\x2a\xb9\xfe\x48\x76\xf7\xb5\x46\x7c\x99\x49\xb9\x07\xac\x3b\xd7\xf3\xfe\xa1\x6a\x25\x5a\xdf\xa9\xdb\x22\xd3\x99\xbb\xc9\x5b\x2e\xb0\x43\x0a\xc5\x11\x8f\x59\x4b\x14\x23\xda\x94\x14\x1e\xd3\xbc\x28\xda\x9a\xa5\xd0\x26\x81\x5d\x45\x62\x05\x36\x50\x02\x2a\x94\x2d\xd6\xf5\x43\x04\x13\xa7\xf1\xb7\x4e\x9e\xed\xe6\xdc\xb9\xb4\xa8\xee\x37\x43\x98\x4e\x29\x45\xde\x6e\x34\xd5\xac\x53\x6e\xe5\x8e\x73\xfb\x9a\x7c\xb1\xb5\x84\xce\x27\xd1\x5e\x9e\x36\x69\x3b\x16\x62\xc8\x73\x26\xe9\x84\x11\x8d\x05\x2c\xab\xa4\x63\x13\x02\xc6\x8c\x04\x63\x8d\x91\x68\x09\xf9\x0e\xa9\x60\xe8\xf3\xa2\x40\xa0\x04\xc3\x46\xbe\xcd\x77\xe4\xc9\xe6\x8e\xeb\xb2\xef\xdb\xf5\xc1\x2b\x97\x1f\x2d\xdc\x35\xf4\xdb\xbc\x87\x5a\x0f\x6f\xd3\x67\xe9\x88\x9e\x5d\xaf\x78\x9f\x66\xcc\x92\x29\xf1\x38\x17\x52\xc0\x4c\xe0\x61\xc2\x25\x3c\x37\x46\x91\xe0\x49\xb2\xcd\xab\x2a\x0f\x20\xaf\x51\xa2\x22\x42\x9e\x0d\x4d\xc5\x0d\x04\x24\xd2\x36\x0c\x28\x42\x4b\x9c\xc6\x3f\x1c\xd5\x77\xf3\xa9\x2c\xb7\x4b\x0a\xeb\x1f\xe6\xe2\x3a\xcd\x80\x45\x0a\x4d\x3d\xe0\x8c\xe9\x01\x33\x6f\x3d\xdb\xf2\x75\xf8\x5b\xed\x24\x16\xfb\x82\x40\x7b\xaa\x84\x54\x14\xd3\x96\xc7\x40\x59\x53\x6c\xd9\x36\x45\x8f\x8b\xb1\xac\x5b\x21\x81\x28\x31\x0e\xa9\x50\x57\xa8\x88\x11\x23\x09\x13\x54\xda\x23\xb7\x77\x65\x8e\xe9\x2d\x47\x8e\x39\xb5\xfa\xbd\x56\xef\x05\x39\x5f\xbd\xd8\x09\x6d\x33\x36\x56\x29\x32\xad\x63\x9b\xf3\xbf\x34\x19\x90\x2f\x63\x0f\x92\x09\x97\x4b\x51\x4e\x28\x70\x62\xe0\xc5\x4c\xe0\x50\x82\x8d\x38\x47\x45\xa1\x1e\x60\x83\xb4\x51\x68\x10\x11\xef\x8b\x32\xa1\x11\x48\xb6\x3c\x49\x85\x3c\x70\x98\xc4\xb7\xbf\x8f\xd6\xa4\x1c\x28\xd2\x41\x9a\xdf\xb4\x73\x05\x6b\xc1\x70\xf6\xda\xd9\xd2\xe5\xfa\xb6\x3a\x5b\xe5\x8d\x0d\xf5\xbe\xc6\x17\x9a\x3f\xc9\x98\xb9\x61\x62\x55\xba\xa6\x20\x2b\xe2\x5d\x33\x0e\x8c\x40\xf2\xc4\x00\x2a\x1e\x4d\x88\x96\x61\xd8\x8c\x4e\x28\x66\x18\xcb\x8a\xcb\x51\x12\x64\x6c\x14\x99\x34\xa3\x92\x62\xda\x28\xe1\xe7\x19\x5a\x73\x8d\x50\x9c\xbf\xdb\xeb\xfb\x2d\xd3\x4a\x4e\x1d\x72\x7d\xff\x20\x38\x73\x56\xe6\x0d\x1b\x8a\x66\x7e\xbe\xf4\xf2\x1b\x83\x92\x57\x8a\x5a\x22\x32\x74\x19\xd2\x5a\x04\x29\x81\xd3\x59\x64\xfb\x10\x20\x9b\x08\x25\xc3\x60\x69\x00\x89\x88\x63\x79\xdb\x13\x5d\xc5\x41\xb6\x1f\xc9\x24\x47\xa6\x3d\x72\x33\xdf\xa8\x70\x5b\x7d\xd8\x6b\x47\xdd\xcf\xea\x5d\xf8\xa9\x74\xa5\x5e\x7d\x76\x6e\xaf\x35\xbe\x40\x93\x42\xb3\xba\x0c\x5e\x37\xb3\x40\xf5\x24\x0a\x9f\x23\x3d\x92\x58\x43\xb2\x55\x8b\xe3\x45\x40\x70\x06\x43\x2a\x0e\x02\x1e\x88\x49\x2b\x86\x98\xf0\x4c\x4c\x6b\x86\xca\x3b\x22\x08\x01\x11\x44\x4a\x2a\xe1\xf3\x7f\x17\x49\x9f\x94\xe8\xb0\xfb\xf1\xc0\x3c\xb5\xae\x6e\x3b\xd8\x32\x85\x59\xb9\x58\x1f\x88\x5f\x51\xb2\x3e\xf8\xa9\xd6\xc9\xaf\x4a\x2c\xfd\x5d\x9e\x9c\xea\x80\x16\xac\x59\x69\xca\x3b\x3f\xb6\xd8\xfa\xe6\x2c\x63\x67\xe3\xdf\xbe\x78\xed\x4a\x81\x01\xbf\xb7\x11\x8e\x1b\x71\xeb\xf2\x17\x27\x17\xee\xd6\x39\x79\x7f\x50\x15\x29\xdf\xb7\x18\x68\x84\x31\xc9\x49\x3e\x4f\xb0\x98\x8f\x3c\xe4\x21\xd3\xf5\x90\x4f\x72\xbe\xc2\x63\xc1\x8d\x48\x95\x70\x35\x81\x0a\x3c\xd7\x4d\x60\x16\x7f\xec\xe2\xeb\x43\xe7\x37\x98\xf5\x19\xf3\x43\xf8\xc1\xa2\xca\x7b\x56\x74\x2f\x56\x81\x7d\x6d\xe3\x90\x13\xf4\x9f\x8d\xae\xa7\x14\xbe\xfe\x75\xf2\x42\x60\x44\xb1\x66\x84\x29\x36\x70\x28\xd2\x36\x35\x2c\x38\xbe\xa2\x8b\x98\x45\xa6\xa7\xfb\x48\x74\x2d\x4a\x27\x23\xc6\x67\x4d\x33\x14\x23\xd9\xb2\x4d\x4e\x49\x1c\x02\xdb\xfd\x34\xff\x49\xbe\x01\x4d\x0b\x15\xaf\xda\x6b\x59\xfe\x12\xbd\xec\xec\xb9\xb3\x7d\xb6\xfb\xd9\x00\x01\x15\xea\x35\xa1\x24\xaa\xfd\x61\x32\xfb\x32\x8a\xef\x0a\x94\x24\xc1\x28\x82\x14\xc2\x9a\x63\x5b\x3c\xe7\xf3\x3a\x4f\x08\xbc\x6b\x98\xae\x25\xb9\x72\xe0\x19\x92\x8d\x7d\x4e\x25\x09\x9d\x4f\x90\x64\x6e\xe5\xfb\x13\x77\x2f\xc7\x3e\x7b\xfb\xe2\xcb\xe7\xd3\x3f\xc2\x27\xd7\x7e\x3c\xed\x83\x7a\x1b\x08\x22\xdb\xea\x7c\xc7\x66\xd6\x1d\xfb\x41\xf2\x76\x98\xb7\x59\x57\x8f\x29\x8a\xd5\x42\x24\xc6\x8a\x89\x02\x32\x30\x75\x86\x54\x0c\x41\xf3\x91\x03\x90\xa6\xb9\x8a\x67\xc9\x8e\xaf\x7a\xd0\x0d\x59\xdd\x4d\xcf\x80\x79\xe5\xc4\xc7\xfd\x8e\x3e\x7f\xa7\xc7\x82\x07\x7f\xbc\xda\xe0\x71\xa1\xef\xe7\x2c\x2b\x44\x8d\x18\x50\xb9\x9e\xbe\x68\xd3\xe3\x35\x4b\xcb\x68\xa9\x02\x66\x91\x93\x0b\x3e\x43\xb3\x8f\x76\x18\xb7\x3d\xef\x5f\x9b\xb9\xea\x3f\xfe\x39\xa3\xf8\x5b\xa5\x5e\xae\x1c\xb8\xae\x63\xce\xe7\x54\xe1\x8d\xc9\xbb\x16\x00\x8e\xe6\x90\x6b\xa9\x4a\x0c\x1d\x5f\x55\x09\xca\x33\x59\x9f\x97\x21\xed\xfa\xa6\xef\x8a\x98\x83\x0e\x21\x69\x4a\xa4\xcb\xff\xcf\xa0\x01\xb9\xba\x60\xa5\x4d\x49\xeb\xda\x6d\x6b\xfb\x3c\xe7\xd1\xe5\x37\x2a\xae\xfd\xee\xcb\xf7\xbc\x3d\xd5\xcb\x0c\x7f\x50\xba\xd9\xf8\x47\x53\xa2\x8e\xfd\x2e\xbd\xd1\x35\x63\x62\xcb\xc4\x7e\xd1\x61\xac\xc8\x32\xe2\x91\xa2\x59\x8c\x6f\x21\x07\x40\xcd\x17\x91\x10\x01\x83\x15\x20\xe2\xa4\x40\x20\x0c\x8b\x50\x04\x1f\x43\x5a\x53\x58\x0a\x27\xb0\x1b\xdf\x32\x2e\x5b\xee\x5f\x17\xdd\x9f\x5f\xa3\xc2\x88\x02\x63\xca\x2f\x28\x51\xf3\x8f\x3d\xc3\x3f\x5a\x55\xe3\xea\xee\x85\xe1\xd2\xe9\x43\xaa\x64\x6c\x0e\x7b\x62\x53\x43\x29\xe6\x7c\x9d\x8c\x28\x82\x94\x28\x39\x12\x30\x2d\x43\xcc\x0b\x96\xe5\xcb\xb6\x28\x07\x16\xf0\x68\xa8\x43\x06\xba\x86\x27\xba\x0e\x1f\x5b\xff\x96\xdd\xa4\xbd\x16\x74\x69\x5b\xef\xf0\xc2\x7d\x6b\x88\xcb\xa7\x87\x74\x5c\x71\xa7\x74\xcb\x0a\xc5\xae\x6c\xad\xf8\x67\xab\x42\x4b\x6b\x75\x6a\xd1\x2f\x4f\xde\x8c\x29\x70\x13\x2e\xd9\x88\xa0\x42\xab\x94\x6b\x1a\x3a\xd4\x02\x1c\x90\x1c\xe1\xd9\x86\xa3\x11\x41\x64\x9a\x82\x45\xfa\x22\xaf\xaa\x6a\x20\xf2\x84\xef\x3a\xb1\x1f\x01\x2e\xc1\x0b\xb5\xba\xac\xd0\xf5\x0f\xbe\xfe\x7d\x5c\xb8\xee\xf4\x77\x87\xb2\x5c\x28\x4c\x8e\xea\x38\x35\xfb\x95\xc2\x1f\xff\xc8\x5d\x9b\xf5\xd9\x9c\x4a\x19\xa3\xc1\x25\xc4\xaf\x21\x85\xbc\x49\xca\x18\xf3\x44\x28\x31\x32\x76\x1c\xc3\xb7\x65\xd7\x01\x82\x87\x6d\x05\x58\x81\xac\xd9\x26\x67\xda\x2a\xef\x2b\x94\xa3\xc9\x2e\xf0\xd2\x02\xc2\xcc\x36\xf9\x8c\x57\x79\xd9\xa7\x2d\x1e\x67\xd3\xe3\xc9\xc3\xfb\x92\x0f\xa9\xa7\x4f\x33\xb5\x3e\xfa\xa0\xc9\x15\x4c\x34\xff\x3e\x63\x06\x2d\x09\xe3\x89\x62\x32\x86\xcb\x13\x1e\xe1\x89\x9a\xea\x85\x20\x16\x62\x25\xd0\x34\xd7\xb1\x5d\xc4\xf1\x36\x6d\x61\x28\x2a\x11\xb2\x15\x6c\x59\x18\x90\x8a\x8d\xa4\x74\xe2\xc9\xaa\xe7\xe5\xeb\x2c\x9c\xda\x76\xd1\xce\xe5\x65\x36\x0f\x1b\xb7\x37\xe7\x0f\xf4\x89\xf1\xb3\xae\x5e\x2e\xde\x3e\xd3\xa9\xba\xd5\x6b\x66\x99\x9c\xfa\xd7\xfa\xfd\xf3\xa5\xf3\x3a\xc2\xad\xef\x0f\x6c\x3d\xf4\x7c\xf3\x29\x75\x48\xc7\x8f\xe7\x6c\x2f\x5e\xe6\xb3\x99\x3d\xde\x7e\x6b\xd7\x8a\x33\x54\x2a\xb0\x15\x58\xd7\x77\x43\xa5\xdd\x2d\x96\x6f\x6f\x56\xed\x87\x13\x9f\xd7\x6f\xbe\xf2\x68\xc5\x9d\x6d\xf3\x6d\x6e\xd4\x74\x83\x98\x27\x5b\x7b\x37\x89\x63\x35\x25\xc5\xe7\x78\x2b\x60\x1d\x8a\xb1\x24\x06\x70\xa4\x0a\x05\x14\x41\xdf\x11\x50\xe0\x52\x31\x76\x19\x09\x08\x8c\x02\x10\x15\x10\x3c\x2b\xc5\x12\x8c\xd2\x66\x83\x3a\xd5\x47\x37\xef\x36\xee\xa9\x74\xbc\xd1\x6f\x63\xcf\xbf\xa8\x34\xf3\x49\x96\x21\xb9\x83\x3f\x29\x47\xac\x30\xf7\x8b\x3b\x85\x66\x26\x71\x50\x3b\x1f\xca\x12\x24\x5d\x1c\x84\xaa\xc2\x44\x06\x30\x31\x2f\x48\x92\xc1\xdb\x22\x0c\x94\xc8\x10\x23\xd9\xb7\x0d\x9b\xe2\xb4\xd8\x95\x63\x1b\x60\x91\x77\xd3\x2e\x77\xf0\xc7\xdc\xcd\x8d\xab\xef\x48\x07\x94\x41\x67\x50\x81\x81\xd5\xfa\x5a\xad\x5f\x66\xab\x71\x71\xc2\xe8\x19\xc3\x7e\xb8\x79\xf0\x79\x32\x8d\x01\x25\x97\x33\x3d\x8a\x8a\xa1\xcd\x08\x48\x66\xa4\x50\xe4\x63\x96\xa4\x05\x35\x56\x34\x57\xd2\x65\x8d\xa5\x42\xd9\x30\x09\x81\x89\x25\x5d\xb6\xf5\xff\x9a\x1e\xf0\x1f\x76\xf4\x3f\xf1\x57\xfa\xa4\xbc\x56\x37\x53\xeb\xd4\xec\xe8\x03\x8f\xce\x2b\xdf\xd5\xcb\xe4\xd1\xdf\x34\xdb\x43\x6f\xe8\xd3\x8f\xde\x28\x8c\xdc\xff\xfb\x9d\x59\x23\x8e\x3c\xcd\xd7\x44\x6f\xd4\x26\x79\xe5\xbe\xac\x02\x8a\x13\xd9\x40\x30\x08\x47\x22\xb1\xc1\xeb\x14\xed\xf0\x81\xc6\x99\xf2\xbf\x32\xb4\xe0\xbb\x7e\x64\xf1\x31\xe4\x5d\x9f\x25\x2c\x2b\xb2\x01\x9f\xf8\xa1\xf1\x8d\x29\xec\xef\x07\x77\xd5\xa3\xba\xdd\xec\xde\xa4\x57\x03\x2b\xe7\x9a\x75\x79\x9c\xe8\xcf\xf7\x4b\xf9\x77\x1b\xec\x6e\xd5\xe0\xc6\x8e\x24\xc6\x57\x16\xa9\xa1\x2e\x02\x05\x87\x12\xc4\x94\x1c\x7b\x96\x4d\x72\xd8\x74\x80\x43\xd9\x2e\x4d\x92\x3e\x6f\x53\xac\x6e\x12\xac\x82\x80\xc3\x22\x4b\x48\x87\x22\xda\xae\x68\xa1\x29\xb3\xef\x3a\x66\xf5\x32\xe6\xb2\x94\xa6\x97\xf3\x9e\x0a\xa6\xaf\x3e\x5c\x7f\xcc\xe8\x9c\x7f\x8c\xed\x52\xb6\xf5\x81\x1e\xc9\x4b\xba\xa1\x8e\x51\x68\x30\x16\x0f\x55\x92\x23\x64\x4a\x36\x2d\xa4\x19\x4c\x14\xf3\x8e\x48\x45\xbe\x27\xc0\x08\x12\xa6\x10\x05\x86\x23\x50\xaa\x2f\x05\x42\x3a\xd6\x17\xa7\x6b\x77\x6b\xf3\x71\xd7\x86\x77\x2e\xac\x07\xaf\x16\x2a\xf4\xf8\x99\x3f\x67\xfa\x17\x72\x51\x7f\x70\xc5\x4f\x0a\xdf\x28\xbe\xf8\xc5\xcb\xe4\xa5\x05\xcb\x09\x1d\xc3\x26\x23\xda\xa0\xb9\x38\x22\x50\xa0\x8a\xae\xe9\x01\x06\x73\x40\x09\xa0\xa6\x5a\xba\x6b\x20\x83\x37\xa8\x18\x47\x51\x00\x23\x9e\x27\x12\x2f\xb9\x7a\x3f\xba\x42\xe9\xc7\x7c\xde\x18\x2d\xf8\x6b\xd4\xa9\x6a\xab\x17\x8d\xae\x7d\x65\xbc\xd4\xb4\x49\xf7\x56\xda\xa3\xf5\x1b\x72\x27\xd1\xe4\x1e\xa3\xc0\x50\x2c\x4f\x8b\x18\x84\x35\x8b\xc7\xb1\xe1\x62\x4c\x30\x31\x63\x5a\xac\x18\xfa\xb4\xaf\x72\xa2\xcf\xf9\x24\xed\xf0\x30\xd0\xe8\x10\x12\x7f\x53\x44\xff\x63\x54\xfa\x4f\xfc\xb1\x3e\x29\x75\x33\x75\xcf\x9c\xda\xe1\xe0\xc3\x32\x4b\x52\x5e\xce\x1d\xdf\xd3\x5e\x7c\x22\x60\x3b\xee\x82\xef\x35\x6e\x6d\xde\xdd\xfc\xe2\xa3\x3c\xb7\x7e\xbd\xf5\xe3\x96\xfb\xc9\xd3\x32\x70\x10\x39\x24\xa1\x6a\x72\xac\xc9\x7c\x44\x0a\x96\x07\x09\x9b\xb3\x20\x82\x9c\xa1\x79\xa1\x29\x52\x02\xc2\x28\xa0\xa8\x98\x57\x75\x60\xf9\x76\x90\x1e\xd7\xf1\xc7\xa9\x67\xd7\xdd\x47\xe7\xab\x15\xfb\xa0\xcb\xeb\xc5\xbb\x57\x6c\x34\x6c\xfa\x39\x7f\x7b\xe3\x94\x41\xf3\x27\x5e\xec\xa0\x75\xdc\x95\xbc\x7e\x27\xc7\x30\xa2\x25\x6a\x06\xed\xc8\x02\x13\xeb\x34\x13\xd8\x9e\xcd\x0a\x4a\xa0\xdb\xba\x10\x9a\x8e\x61\xca\x86\x26\x00\x89\x93\x24\x0e\xf9\x48\x16\x44\xd7\x4f\x7c\x5a\x6f\x58\x95\x73\x11\xde\x27\x47\x4e\xea\x03\xc3\x3f\xce\x75\xfc\xb2\xd6\x88\xba\xeb\x17\x97\x5e\x51\xf8\xc6\xa7\x97\xab\xfd\xf6\xc9\xe4\x8c\xe1\x28\xf1\xf4\x81\xc0\x87\x20\x60\x43\x59\x36\x2d\x27\x90\x84\xd0\xc5\x9e\x09\x11\xe2\x02\x09\x98\xc8\x22\x63\xc4\xc6\xb6\xed\xd9\x31\xe1\x21\x24\xb9\x3a\x03\xd3\x51\xa7\xff\x31\xaf\xf4\xd2\x8f\xe1\xcf\x83\x32\x33\x7b\x6e\xa0\xb6\xaf\xdf\xce\xf1\x4b\xa6\xcf\x16\x8e\xdb\x70\x70\xf6\xbd\x4f\xae\x1d\x7f\x67\x77\xc6\xec\xca\x13\x2e\x99\x11\x81\xef\xf1\x80\x26\x6d\x46\x54\x34\xde\x70\x63\x31\xc6\x36\x6f\xfb\x31\x08\xa5\x20\xa4\x23\x4a\x46\x54\x6c\xf3\xb6\x19\x13\x2a\x63\x11\x86\xfb\xf7\x53\xf4\x7f\xa0\xff\x4f\x14\xa7\x3e\x29\xd9\x32\x95\xff\x5f\x1e\xbd\xd7\xf2\xce\xdd\xe0\x94\xda\xb0\xb6\xe7\x92\x69\x60\x7d\xa7\x7e\x2b\x7b\xe6\xb1\x27\xd0\xf2\xd9\x05\x9b\x52\x94\x0a\x95\x7e\x30\xe7\x24\xaf\xd0\x51\x1d\xc6\x64\x31\x25\x06\x48\xb3\x68\xd5\x56\x11\xe9\xb9\x36\x22\x78\xcd\xf7\x4d\xe8\x59\x48\xa0\x7d\x13\x51\xae\x62\x30\x72\xa8\x58\x0e\xe5\xfd\x5b\xb3\x9c\x96\x99\x3c\xcc\xdf\x97\xbf\x7b\xf7\x51\xcf\xff\x5c\x88\x7b\xb5\x9c\x7e\x66\xed\x0f\x6f\x56\x7f\x32\x6d\xd4\xf9\x3b\xbf\xdd\x9c\x8e\x3e\xc4\x57\xce\x27\xd1\x9e\x4c\x77\x6c\x5f\xd6\x20\xef\xf9\x12\x4f\x89\x8a\xe7\x72\xd0\x14\x91\x2e\xd9\x90\x10\x39\xa4\xd1\x34\x1f\xb1\xbe\xab\x1b\x8e\xea\x72\x9e\x1f\x0a\x44\x3a\x7e\x24\x8f\x9f\xd3\xc7\xfb\x77\x11\xc6\xbd\x7e\xa8\xc9\x17\xb5\x6a\x57\x9a\x90\x65\x78\x6d\x67\xe6\xdc\x1b\x8d\xd9\x39\x4d\xcb\x4d\xfc\x39\xca\x58\xc1\x93\x30\xea\xcb\x12\x4f\x90\x30\xc2\x1e\x6b\x62\x5b\xf4\x34\x48\x38\x96\x20\x03\x31\xe4\x62\x4d\x26\x80\x41\x0b\x9e\xc7\xa8\xb4\x09\x64\x2f\x8e\x55\xa4\x42\x35\x1d\xb3\xd2\x85\x5f\xb1\xa7\xf7\x5d\xe9\x75\xee\xea\xfb\x13\x9a\xb6\x4b\xf9\xf1\x7c\xb3\x32\x55\x2e\xbf\xdd\xe4\xa7\xad\xc2\xcd\x32\xd6\xa2\x8d\xeb\x33\xf6\xa4\x96\x10\xfa\x11\xcb\x92\xb2\xc4\x0a\x41\x18\xf2\x84\x64\x1b\x86\x15\xa8\x94\xe9\xc5\x04\xc3\xbb\x86\x00\x79\x83\x70\x15\x47\x10\x6d\x82\xd6\xf5\x90\x94\x59\xcd\x75\xd2\x40\xff\x9f\xd8\x64\xff\x82\x7e\xa6\x3c\xa9\xa1\xbf\xb8\x46\x7f\xfc\xd5\xf9\x8a\x73\x0f\x1c\xec\xf8\xec\x41\xe3\xa5\x57\x3b\xcf\xbd\x5d\xf8\x8f\xd7\xb3\x8e\xae\xab\x2d\xf8\x31\x9f\xdc\xb2\x7a\xf2\x42\x28\xcb\x38\xbe\x6c\xb1\x90\x34\xa8\x80\x34\x51\x6c\x48\x84\xe9\x22\x2f\x66\xa1\x4f\xcb\xaa\xa4\x70\xb2\x1c\x91\x3a\x16\x18\x97\xf5\x03\x93\x45\x40\x4b\xc7\x38\x59\x6b\xda\xe9\xe9\xf2\x1f\x17\xc9\x9b\xa6\x7c\xd8\xf1\x70\xb7\x76\x27\x37\x1d\x2b\x7a\xfd\xae\xf2\x62\xf0\xc3\x43\xe6\x67\x2f\x86\x16\xce\x98\xc3\x40\x62\xcf\xb8\x48\x41\xbc\x4b\x13\x24\x4b\xc3\x80\x71\x19\x22\x34\x14\xcc\x7a\x96\xea\xfb\x94\x4d\x47\xb6\xc8\xb1\x26\x65\x05\xbc\x1e\x1b\x24\x49\x40\xac\xf3\xe9\x4c\xfb\x5f\x3a\xaf\x4b\xfd\xc2\xc3\xe8\xa2\x5f\x2d\xeb\xf5\x62\xc5\xe6\x0b\x23\xe7\x3e\x3f\xf1\xc3\xf0\x73\xd5\xee\x8c\x3d\x52\xab\x65\xb1\x86\x27\xb6\x27\x91\x36\x42\x8b\xbe\xaa\x99\x1c\x21\x98\xa2\x62\xe1\x80\xa3\x42\x8f\x14\x28\xc2\x21\xd4\xd8\x0b\x64\x96\x80\xd8\xe2\x42\x1a\x22\x22\x92\x4d\x52\xa0\xc2\x38\x9d\x96\xfb\x83\x9b\xb9\x5f\xe9\x5e\xa2\x53\xb9\x7a\x9b\xff\x0a\xde\x1a\xff\x6d\xdd\xd2\x79\xf6\xec\x78\x9d\x58\x70\x6c\xc6\x79\x76\xff\xd1\x8f\xc7\x8c\x49\x5e\x80\x11\x09\x87\xa7\x03\x37\x24\x1c\xd7\x0a\x4d\x5e\xa3\x44\x52\x30\x6c\xd3\x8b\x6d\x42\xc0\x2a\x4f\x12\x1e\xc0\x58\xf2\x48\xe8\x38\x3c\x26\x74\x5d\x03\x62\x1a\x67\xf6\x7f\x6a\xb6\xf7\x49\xc9\xbf\x21\x53\xb6\xd4\xd0\x6f\xfe\x16\x97\xf3\x41\x85\xc7\x03\x6e\x6f\x5f\xb5\xb0\x6c\x87\x29\x9b\x9e\xfd\xd2\x6a\x99\x3f\x6b\xa2\x74\x66\xeb\x6c\xcd\x1b\xd9\x2f\x4a\x26\xdf\xd8\x55\x5c\x21\xd2\x41\x10\x7b\xc0\x54\x49\x87\x50\x55\x84\x42\x23\x26\x74\xc2\x24\x6d\x52\x36\x05\xda\x75\x29\x3e\x16\x45\x95\xa0\x14\x8a\xe3\xe9\xc4\x38\xca\xbd\xe4\xeb\x8e\x4b\xfa\x5e\xc8\xd7\xf4\x64\x8f\x25\x1b\xbc\x73\xb7\x36\xf6\xf9\x7e\xdd\xd5\xc7\xeb\x6e\x4b\x05\x1b\x3d\xc9\xf7\x30\x77\xc6\xa8\x1b\x89\x1f\xd8\x54\x86\x33\x25\x36\x22\x60\x1c\x62\xdb\x76\x45\x8e\x72\xb4\x88\x8e\x34\xc7\xe0\x78\x80\x55\x03\x42\x21\xa4\x38\x4b\x64\x2c\x49\xd5\x38\x49\xc4\x61\xe2\x10\xba\x6e\xdd\xad\xc7\xe2\xb9\x3b\x25\xf6\x1f\xff\x76\xe8\x17\xcb\xfd\xde\xfe\x7b\xfa\x05\x7a\x5a\xe9\xbe\x25\x5a\x57\xa1\xab\xae\xfa\x2a\x89\xcc\x06\x8f\xf5\x24\xd9\x14\x30\x0f\x1d\x33\x70\x74\xc4\xf9\x31\xcf\x47\xae\x42\x20\x47\xe6\x2c\x9f\x34\x35\x03\x72\x91\x42\xc6\x5a\x08\x91\x0b\x02\x01\xa5\x23\x54\xc2\xfb\xcc\xea\xc5\x9f\xec\x38\xd1\xac\xbe\x38\xf0\xcd\x36\xcd\x17\x9e\xfe\xf8\x5b\xbd\x59\xb9\x0e\xd7\x8f\x8e\xf8\x68\xda\xd8\x5d\x63\x8f\x27\xef\xb4\x22\x4d\xf3\x45\x26\xd0\x6d\x96\x34\x4d\x17\x87\x9e\x49\x92\x84\xcf\x45\x0e\xaf\xf1\x44\x0c\x75\x5b\x97\x04\x83\x72\xa8\x98\xe3\x58\x99\x95\x55\x8a\x34\xd2\xd4\xfa\xff\xd4\x42\xe9\x93\xd2\x3e\x7f\xa6\xff\x55\xf0\x6c\xc0\x1d\x16\x5c\x66\xb2\xdf\x3b\x34\x27\xc7\x46\xf1\xb3\xa3\x6f\x7c\xf3\x6b\xae\x87\x1f\x65\xca\x33\x61\xe9\xaa\x56\xe3\xfc\x5a\xe5\x5b\x24\xb1\x99\xcc\xc7\x3a\x20\x48\xca\x56\x99\x38\x86\x91\x0d\xad\x88\x26\xc5\xd0\xb2\x7d\x3e\x66\x78\x51\x54\x03\x60\x12\x02\xa7\x45\x56\xc0\x8b\xc0\x12\x22\xdd\x4d\x0c\xfd\xd7\xe2\x73\xd7\xbe\x9b\x1e\x77\xcd\xf9\x67\x83\x41\xc7\x36\xcc\x6f\x3a\x88\xcb\x7a\xae\xca\x9c\xea\xf3\x3b\x2d\x58\x7b\xa1\x46\x95\xb7\x32\x27\xf1\x02\x16\x03\x8d\x27\x7c\x12\x71\x48\x60\x03\x59\x8e\x23\x09\x06\xa2\x0d\x63\xc9\x06\xbe\xc2\xab\x2a\x90\x38\x4e\x03\x94\xac\x39\x94\x4a\xa9\x36\xc1\xa5\x93\xa8\xca\xfc\x59\x65\xc5\x6b\x4b\xbe\xfd\x63\xda\x03\xe5\xee\xf0\x7e\xf9\xbf\x2f\xd1\x6d\xe4\xec\x1d\x5f\xd5\xea\x70\xaf\xec\xdd\xe6\x23\xf5\x91\xc9\xa3\x9d\x00\x3d\x12\x64\x21\xe6\x08\x5d\x0f\x05\xc3\x86\x8c\x82\x99\x20\x16\x28\x2f\x22\xa5\xc8\xc1\xb2\xc3\xb9\x91\x89\xd4\xd0\x17\x58\x21\x20\x20\x20\x2c\x35\x9d\xc7\x84\x37\x2b\x9d\xbe\x5b\xfa\xcd\x39\x3f\xff\xde\xf7\xdc\x97\xc5\x0b\x77\x7b\x79\xf0\xe6\x91\x09\xfb\x4e\x74\x3f\xb5\x64\x47\xf9\xf7\x2a\x8f\xad\x9e\x31\xa3\x98\xc4\x96\xfd\x92\xeb\x42\x22\x00\x32\x70\x14\xc1\x85\x02\x8f\x2d\x82\xd2\x59\x8e\x8f\x68\x26\x66\x05\x59\xc7\x28\x34\xa1\xc3\x1a\xb4\x65\x28\x96\x0f\x2d\xc2\x4a\x03\xfd\x7f\xea\xa5\xf4\x49\xe9\x3d\x2c\xf3\xff\x82\xbe\x78\xb4\xcd\xa5\x56\xf7\xbe\xae\x9f\x29\x6f\xf3\xe2\x03\x96\x3c\xaa\xf3\xbc\xd7\xe5\x65\x65\x8a\x5a\x45\xea\x45\x67\xf3\x5e\x73\xae\xe6\x4e\xa2\xf5\x43\xc8\x4b\xa1\x11\x3a\x04\xe9\x31\x50\xf3\xc8\x40\xd7\x5d\x42\xe4\x6c\x68\x02\xcc\xe8\xa2\x27\x89\x94\x4b\xa8\x01\x92\x69\x1a\x38\x9a\xa3\x68\xaa\x9d\xf8\xa3\xa4\xfc\x19\x6c\x79\x50\x72\x4c\x84\xf6\xec\xac\xb6\xbc\x51\x87\x57\x97\x1c\xbd\xf9\xfd\x17\x6f\x16\x9c\x3f\xfc\xed\x9a\x7a\x93\xbd\xdd\x97\x24\xb1\xd3\x8f\x10\x21\x50\x26\x6f\x48\x88\x8f\x64\x22\x96\x70\x84\xb0\xaf\x48\x81\xee\xd2\xd8\x63\x7d\x92\x73\x5c\x8e\x37\x7d\xdd\x31\x18\xce\x0e\x14\xfa\xdf\x03\xf6\xd2\x86\xd0\xb5\xb0\x4d\x9e\x6e\xe5\x7a\x75\xcb\xd6\xf8\xfd\x7d\xd9\xb6\xae\x35\xf6\x96\x7c\xf2\xe2\x95\x6e\x5f\x65\x2a\xd5\x6e\xd3\xcc\x52\x07\x5a\x26\x8f\x38\xcd\x51\x0a\xcd\x61\x49\xd0\x78\x57\x71\x0c\xa0\xb9\x24\x1f\xf2\x26\x65\xc8\x34\x23\x23\x47\xd2\x7d\x8d\x51\x74\x83\xb6\x74\x9d\xc7\xc0\xe4\x39\x9e\xd3\x84\xc4\x4b\x96\x95\xfa\x23\xa2\xd3\x55\xe7\x1f\x2e\xb3\xb6\x62\x43\x7b\xce\x85\xd3\x17\xaf\x35\x5b\xf0\xf1\x80\xd5\xd5\x0e\xbc\xf5\x4b\x0a\x1a\x39\x3c\x89\x7e\xac\xba\xac\x7b\x24\x24\x42\x2c\x01\xcd\x71\x35\x25\x32\x4c\x4c\xe8\x8a\x0e\xb0\xca\x63\x4a\x04\xba\x49\xd0\x32\x56\x3d\x39\x96\x64\xe0\x70\x01\xf1\x37\xf1\xf4\x3f\x8e\xd6\xff\xf4\xec\xdf\xa7\x41\xfe\xcd\x75\x53\x3f\xc7\x66\x6a\x34\x8e\x7a\xf6\x62\x5e\xbd\xe1\xea\xa4\x0f\xa6\x0f\xdd\xfe\xe6\xe4\x05\xf5\x2c\x6d\x98\xd0\x60\xe8\xa8\x43\x8b\x2e\x6d\x59\xf4\x5b\xf2\x2a\x3a\x86\x09\x6c\x36\xf0\x2c\xdb\x40\xa2\x47\x9a\x88\x8f\xf9\x80\x96\x64\x43\xc2\xb2\x49\x73\x96\xe6\x19\x50\x15\x43\x16\x46\x22\x01\x51\x6c\x46\x61\x9c\x8e\xff\x99\xf5\xdd\xb7\x0f\xe7\xd4\xcc\xbd\x39\xfb\x99\xf3\xbf\x64\x2f\xdb\x60\x59\xdb\x6e\x59\x26\x85\xef\x6c\xfe\xeb\x8f\x31\x23\x6b\xcc\x1c\xf8\x24\x63\x1a\xab\x84\x41\x3f\x20\x7c\x5f\x35\x05\x00\x43\xda\x10\x3c\x86\xc7\x96\x03\x99\x30\x0a\x29\x49\x37\x04\xc3\x95\x48\x4b\xb5\x30\x6b\x68\xbc\x65\x31\xa4\x08\x08\x15\x5b\x89\x0f\x6b\xf7\x56\xf2\x81\xba\xcd\xac\x6f\xa6\x7c\x87\x66\xe6\x6a\xd3\xec\xe6\xba\x6a\xc6\x35\xfc\x43\xee\x9b\x77\x6f\x94\x5b\xdc\x7b\xd3\xcf\x19\x1b\xb9\x9c\x70\x97\x23\x89\xf2\x28\xc3\x47\x04\xe4\x42\xac\x89\x1c\x06\xa6\x69\xf0\xb1\x81\x00\xc7\x38\x86\x45\x49\x9e\x01\x2d\x57\x86\x5e\x60\xc7\x81\x67\xc8\xb2\x9b\xce\xf0\x9c\xb7\x66\xe7\x78\x73\xa8\xbb\xeb\x8d\x77\x67\x7c\xf7\xde\xda\x13\x3d\xde\x9d\x1e\x57\xbb\xfd\xf5\x9a\xeb\x54\xdb\x67\x9d\x4a\x37\x2a\x61\x67\x4c\xb1\x9f\x10\xf9\x3a\x0b\xf9\x90\xb1\x44\x82\x57\x75\xa0\xda\xbc\x48\x4a\x9c\x6c\x46\x82\x2f\x38\x24\xc7\x47\x91\x81\x49\x10\x1b\x21\xeb\xd0\xa6\xce\x85\x2c\x83\xd3\x03\x46\x87\x96\x8d\x57\xdc\x5e\xb1\xf9\x71\x0b\xd3\x2f\xd2\xfa\xf3\xfd\xe8\x50\xf9\xa3\x4d\x6b\xd5\x3c\x51\xf4\xf9\xfc\xa6\xbf\x0f\xd2\xaa\x27\x91\xc0\xc7\x8a\x2a\x30\x5c\xca\x36\x94\x80\x51\x24\x24\x61\x10\xab\x0a\xf6\x9d\xc0\xe4\x3c\x51\xe2\x24\x43\xd4\x2c\x1c\x30\x1c\x16\x91\x26\x71\xa2\x4b\xf1\x7f\xcf\x1c\xfd\x4f\xf3\xe4\x9f\xba\x6e\x7d\x52\xb2\xd5\xcd\xd4\x26\xf5\x69\xed\x51\x7d\x52\x8f\xb1\x0f\xbf\x72\xdf\x66\x3b\xd6\x28\x55\xa3\x74\x27\xaa\xd8\xf2\xe1\xa5\xb7\x9c\x2c\xd2\x2b\x7f\x7d\xe1\xc2\xce\x53\x6d\x93\x68\x2d\xe3\xf9\x0c\x0c\x22\xdb\xd5\x94\x80\x15\x30\xc7\x41\xac\x04\x30\xe4\x22\xdd\x25\x7c\x1b\xf2\x9c\x22\x5a\x26\xcf\x38\x76\x24\x86\xff\xba\xee\x46\xba\x92\x38\x82\xf6\xb9\xd8\x6b\xdf\xf7\x99\x2b\x96\xcb\x3e\xaf\x31\xf3\x43\x8d\x8f\xc4\x71\xdb\x36\x14\xeb\xba\x5c\x2f\x83\xeb\x5d\x69\x29\xac\xff\x6d\x55\x12\x6d\xc6\x29\x0a\x39\x80\x34\x09\x22\x82\xb6\x8b\x21\xd0\x4c\x8f\x86\x81\xac\x03\xa4\xa8\x44\x10\x18\x94\x01\x6c\xdd\xc7\x81\x19\x84\xa6\x2d\x7a\x14\x4e\xc7\xf9\x61\xc0\xd2\xb7\x6e\xce\x15\xc6\x3c\x59\x50\x2f\x62\x36\xb4\xd0\x3d\xa9\xe4\x3e\x6e\xd8\x9f\xd7\x53\x2e\x8e\xf9\xee\xe8\xe2\x2a\xb5\x33\xa6\xa9\x4b\x3c\xaa\x94\x0d\x19\x2a\x90\x2d\x82\x97\x45\x03\x12\x28\x52\x1d\xa8\x4b\x88\x0b\x31\xa6\x2c\x8a\x70\x80\x2d\x20\xce\x96\x88\x98\xf2\x64\x1f\x89\x20\x22\xe8\xc4\xbb\xfc\x93\xb4\xaa\xf1\x78\x6b\x7f\xc1\x85\x53\xe3\xfe\xb9\xde\xcd\xfb\xa4\xd5\xab\x6d\x1a\x68\x9f\xcc\x7d\xb7\x55\xc7\xbf\x86\x9f\xdd\x3e\xb5\x74\x12\xa1\x0f\x2c\xc5\xa6\x05\x87\x73\x22\xc5\x14\x34\x31\x74\x08\x14\x50\xa4\x1f\x47\x0c\x2f\xc4\x8a\xc8\xba\xb1\xa8\x70\xa6\x23\xc6\x98\x16\xa0\xc4\xb0\x4e\x3a\xf3\x2d\x6a\x0e\x97\x9a\xfe\xd2\xef\xde\x80\x76\xd5\xb3\x66\x9f\x95\x75\xf2\xf7\xe7\xf8\x47\x52\xc1\x2d\x95\x27\xed\x1d\x79\x3a\xc7\x3b\x5b\x4e\xb8\xc9\x0b\x30\x21\xeb\xa9\x96\xed\xff\x0b\xc6\x18\x70\x21\x32\x0d\xc7\x09\x03\x93\x8c\x1c\x37\x24\xe9\x20\x8c\x58\x81\x22\x61\x00\x80\xea\x8b\xae\x41\x4b\x24\xfc\xdb\x74\x76\x74\x83\xff\x11\xf6\x2e\x4e\xf9\x6e\xc3\x5f\xec\x17\x2f\x67\xfc\xb5\x76\x41\x93\x82\x39\xb3\x7c\xf5\xb4\xcb\xa9\xa7\xf5\x46\xd5\xb9\x99\xb9\xb3\x77\xfe\xd1\xf1\x3e\x29\x2f\x5f\xbe\xfc\x72\x6c\xc9\x54\xbd\xf2\xd2\xd5\xa7\x3c\x9f\xc7\xfe\x59\xab\xc8\xd2\x49\x5d\xba\x4f\xa9\xf6\xa5\x5d\x3b\xdb\xd3\x8f\xbf\xbf\xbc\x5f\x1c\x3a\xbd\x0a\x58\x86\x33\x36\xc8\x2e\xb1\x1a\xd8\x02\x82\x81\x28\x99\x0d\x11\xc0\x18\x70\x11\x19\x81\x20\xd4\x59\x8d\x37\x23\x4a\x20\x75\x2a\x60\x5d\x4e\x0d\x23\xa8\x99\xb2\x04\x5c\xca\x81\x09\x3c\xdb\xca\xe7\xe9\xf6\xde\x19\x2c\xbf\xf6\xf9\x82\xa1\x93\x67\xdc\xae\x9c\x9b\xb8\xf8\xcb\x94\xbe\xef\x17\x71\xf3\xae\x37\x1b\x74\xa3\xc8\x8c\x19\x8b\x26\xcc\x52\x71\xe4\x09\x0c\x4d\xb8\x11\xa0\x08\x83\x20\x5c\xd3\x46\x3a\xd0\x7d\x57\x8e\x08\x2b\xc2\x9e\x87\x7c\x92\x25\x83\x48\x51\x49\x53\x66\x1d\x97\xd5\x5d\x25\x6d\xaf\xbc\xed\xf0\xbb\x1b\x1e\x5f\xee\x48\x11\x74\x97\x9e\xef\x9e\x5a\x58\xdd\x08\x67\x7f\x79\xa2\x50\xb9\xb1\xa7\x3f\x5f\x7f\xbe\xf7\xe9\x02\x42\x12\x6f\xe4\x00\x86\x04\x1b\xd9\x7c\x0c\x15\x9e\x87\x62\xa4\x62\x55\x66\xdc\x98\x57\x7d\xd9\x89\x3c\xdb\xd0\x39\xc3\xf5\x24\x6c\xa2\x10\xb2\x9a\x80\xa0\xe3\x27\xe6\x6b\xd7\x98\xfc\xd3\x84\x46\x95\xcc\xe9\xdd\x3b\x4e\xed\xd0\xf2\xcc\xe1\x61\x1f\x2d\xcd\x5e\xa9\x55\xfe\x7d\xad\xf3\xcc\xf8\xaa\x53\xab\x53\xa5\xc2\xe4\x61\x5e\xb0\xa1\xe4\x39\xaa\xc8\xb1\xbc\xc6\x3a\x48\xa0\x2c\x49\x93\x91\x18\x88\xae\x00\x51\x64\x53\x90\x42\x9c\xc6\xb2\x84\xaf\x9a\x01\xe7\x33\xa4\xe4\x26\x20\x4f\xf4\xde\x3f\xb2\x7f\xb1\x2c\x95\x0b\xec\xac\xb5\xef\x64\x9b\x56\x83\x0b\x96\x21\x8a\xd5\xb8\x92\x73\x10\xc8\x7d\xc5\xab\xfb\x79\xcd\x25\xc9\x1b\x52\x0c\x54\x6c\xea\x91\xea\x38\x02\x2f\xe8\xa6\x0b\x08\xd5\x13\x81\xa5\x60\x9e\x75\x0c\x10\x92\xb4\xc9\xd8\x92\xe8\xea\x94\xac\x4b\x1c\x69\xf0\x84\xac\x6a\x6c\x3a\x0a\x9b\xf2\x93\x1f\x59\x59\x5b\x3e\x7c\x78\x7d\x4b\x61\xee\xe4\x88\xc3\xbf\xfe\xbc\xee\xe3\x9f\x17\x0f\xcc\x37\xe1\xfc\xfb\x43\x86\x4d\xec\xaa\xbf\x9f\xfa\xd7\xf5\x17\x9c\xed\xf9\xe1\x94\xa8\x69\xdd\x33\x6b\x57\x5d\xb8\x75\xb1\x52\x89\xa1\x7d\xb6\x1f\x91\xcb\xe7\xde\x5a\xe6\x9a\xfa\xdd\x86\xab\x97\x53\xff\xfa\xc4\xf2\x94\x49\x75\xd8\xe1\xa0\xfc\xb9\x79\x75\x67\xd5\xb9\x9f\xd5\xa6\x1a\x14\x7b\xa3\xce\xaa\x94\xd2\x5f\x17\x2d\xc7\x5d\x98\x5c\x2f\xd5\xe1\xcf\xbf\x39\x6a\xd6\x76\x59\xd4\xf2\xd7\xdf\xef\xb4\x78\xd6\x77\xd4\x2d\xef\xe3\xba\x33\x96\xb5\x2e\xfc\xb3\x97\xb9\xf6\xa8\x05\x65\x1e\xf7\x4f\xde\x6d\x07\x29\x0e\xe6\x34\xd6\x8d\x55\x59\x12\x65\x8a\x96\x49\x05\x03\xcd\x08\x38\x56\x34\x5d\x55\xf0\xcd\x50\x0f\x23\x5b\xd6\x19\x3d\x52\x80\xc8\x00\xec\x49\x69\x0f\x7f\xf1\x81\xee\x83\xde\x99\xc6\x8f\x42\xfd\x4b\xff\xbc\x69\xdc\xd2\xe3\xe3\x6e\xfc\xd6\xfa\xf2\x95\x4b\xc6\x8b\x4f\xbf\x1a\xbf\x70\xdc\x7e\x32\x89\x1e\xe0\x01\x2f\x88\xa4\x83\x85\xc8\x06\x24\xd4\x3c\xdf\xe7\x65\x19\x8a\x91\x6b\x38\x96\x83\x7d\xd2\x11\x22\x2e\xa6\x25\x25\x26\x39\xcf\x25\x63\x96\xf8\xaf\x70\xfc\xb7\xcc\xb9\xfb\x88\x39\x6b\x7e\x5f\x55\x67\x94\xbf\x87\xd8\xde\x4c\xa9\x71\xaf\xd3\xf1\xfd\x45\xdc\xab\x47\xda\xf5\x7a\xe7\xe0\xaa\x91\x1f\x26\x71\x20\xb5\xe0\x86\x88\x55\x18\x5b\x54\x04\xd3\x8b\x30\xe6\x43\x81\xc7\x0e\x20\x03\x85\xc0\xa2\x4b\xc3\x88\x64\x45\x86\xf3\x49\x53\xa7\x6c\x87\x8f\x14\xda\x21\xd2\x61\x65\xcd\xdb\x34\x12\xa6\x90\x9f\x0c\xfa\xf4\x5e\x83\x5f\x95\x9f\x56\xd6\x39\xf8\xc1\xf0\x7a\x57\x66\xe9\x6b\xfa\x2c\x2a\x79\xab\xd0\xda\xbd\x6d\x52\xff\xfa\xc1\xcb\xbc\xd3\xca\x3c\x7f\x38\x6f\x49\xf7\x23\xb5\x1f\x0f\xe0\xdd\x9a\xcf\x2b\xbf\xfb\xfd\xbc\xae\x3d\xbe\xdd\xde\xab\x4a\x87\x2f\x6b\xaf\x4b\x05\xb6\xed\x73\x8b\xe6\xb8\xb0\x3c\x80\x79\x97\x2e\xbe\x5f\xb1\x45\xfd\x16\xa5\x1f\xdf\xfa\xbd\x48\x95\x6b\xbb\xbf\x9b\xb0\x78\x4a\xf5\x27\x25\xbe\x4a\x22\x89\x5e\xa7\x44\x9a\xe7\xad\x50\x13\x8c\x88\x96\x09\x86\xc4\x94\xaf\xb0\x82\x14\x52\x80\xf6\x15\xc7\x77\xed\xc0\x36\x8c\x00\x31\x71\xc4\x4a\x2c\x32\xbd\x04\x24\xfa\x2b\xdf\x5f\xff\xe9\xd9\xae\x8d\xce\x9e\xfa\xcd\xbf\x2f\x93\x67\x5e\xc9\xa9\x23\x0a\x6c\x9f\xdf\xf7\xc0\xae\x9f\x37\x16\xec\xbe\xbf\xe6\xa8\xbf\x92\x07\x36\x06\x68\xb2\xc6\xaa\x0e\x19\x68\xa1\x23\xd8\x8c\xcc\xab\x0e\xab\x20\x23\x14\x23\x8f\x35\x39\x0a\x86\x88\x52\x5d\x6c\x43\xc7\xf4\x54\x20\xc8\x14\x70\xd2\x82\xed\xe1\x8e\xfb\x1d\x72\xcc\xdf\x49\xd3\x59\xbe\xb9\xf9\x7e\xdf\x2f\xf6\xf5\x1e\x30\xa6\xc9\xc2\xea\x05\x9e\x64\x3f\x65\x8e\x7a\x44\x1f\xc8\x98\x3f\x7e\xc2\xdd\xd5\x44\x14\xb0\x2e\xe5\x7a\x9e\x2a\x50\x71\x1c\x4a\x2a\x49\xfa\xb2\xe1\x99\x2e\xe5\x4a\xbe\x46\x86\x1a\x03\x75\x9b\x37\x2c\x07\x30\xaa\x4c\xc5\xa4\x8b\x13\x67\x1a\xb2\xef\xa4\xde\xf5\xf7\xdc\x7e\x76\xf7\xd6\xc3\xc5\xed\x27\xf4\xc9\xce\x76\xbb\x50\xbd\xda\xc7\xab\x8f\xbd\x5a\xf9\xc5\xe7\xdd\xf3\xac\x4b\xa2\x15\x98\x28\x3a\x04\x36\x75\xd6\x52\x28\xc9\xf6\x05\x91\x93\x55\x12\x0b\x3a\x6b\x4b\x9e\x4e\x58\xbe\x06\x59\x8a\x07\xaa\x20\x93\x0c\x29\x86\x54\x0c\x78\xe4\xa4\x8d\x3e\x27\x07\x35\xdd\xd0\x68\xff\xc0\x2f\xdc\x77\x27\x54\x68\x94\xa5\xea\xcc\x97\xc5\x46\xcd\x6d\x59\xb7\x71\xcf\xf7\x4f\x3c\x7e\xac\xe6\xbf\x94\x44\x2f\x6a\x4f\xf1\x04\x31\x92\x5c\x41\x90\x42\x57\xc3\x26\xcd\x48\x8c\x6a\x4b\x51\x18\x49\x82\x42\x05\x94\x85\x65\x11\xd1\x01\xc1\x71\xba\x8f\x69\xd9\x8c\xfe\xbd\xc3\x69\x69\xf1\x4d\xba\x76\xa8\x97\xff\xcb\x1b\xaf\xbc\x2b\x3f\xe6\x4b\xe9\xa3\x8e\xdf\x2d\xf3\x30\xef\xf6\x5d\xdf\xfc\xb1\x78\xe6\x83\x5f\x9f\xf6\x6b\x44\x25\x0f\xc3\x9c\xf2\xff\x7c\x44\x2c\x87\xb2\x58\x28\xfe\x6b\xf5\x02\xc1\x84\xbe\x6a\x43\x59\x55\x91\xc3\xc4\x50\x03\x8c\x65\x7b\x14\xe5\x19\xba\x40\x62\xcc\x83\xb4\x18\xbe\x31\xb4\x0f\xbe\x3d\xfa\x70\xd5\x6f\x8b\xdc\xcd\x3a\x33\x6b\xa6\x95\xe3\xe8\x83\x23\x6b\x6c\x78\x6f\xe0\x9c\x91\x1f\xb4\xda\xb3\xeb\xe3\xe5\xc9\xbb\x87\x51\x11\xa1\xa8\xa4\x2a\xe9\x32\xa4\x78\x02\x09\xa4\x65\x53\x9e\x28\x02\x64\x21\x91\x8a\x5d\x53\x47\x90\x07\x38\x8e\xa0\x4f\x4b\x9c\x83\x29\xcc\x8b\x89\x31\xbc\x62\x4e\x21\xab\xef\x9e\x72\x65\xa7\xbe\x3b\x1e\xf7\xdd\xdf\x6d\x4d\xc1\x97\x65\xfe\x6c\x5b\x65\xea\x8d\x5a\x53\x16\x6d\x99\xf8\xba\x99\xb1\xe1\xe0\x89\xa9\xd8\x6e\xc8\x63\x3e\xd0\x54\x52\x30\x63\x9d\x14\x11\xc3\xd1\xb2\xa4\x70\x58\x76\x7c\x81\x72\x63\x8a\x53\x03\xc6\x77\x7d\x86\xb7\xc8\x00\xc5\x81\x08\x12\x08\x4a\x1f\x6d\x3f\x75\x37\x65\xd6\xfb\xf7\xa5\x2a\x1f\x77\xa9\x77\xb8\xf6\xb6\x39\x43\xba\xdd\xd8\x92\x27\xfb\xf8\xd1\xb5\xce\x8e\x5a\x5a\xc4\xde\x90\x3c\x40\x20\x0c\xb4\x30\x70\xfd\x40\x95\x60\xc8\x01\x04\x80\x64\x30\x82\x62\x18\x9c\x03\x4c\x5b\x67\xe3\x98\x47\x81\x29\x2b\x82\x27\x80\x30\x96\xe4\x08\x9b\x89\x5f\x4c\xc6\xeb\x4b\x3a\xf4\x2c\x80\x1e\x4c\xea\xfd\xc1\x86\x1e\x59\xaa\xd7\xbf\x59\xab\xfe\xb8\xd3\x7d\x8e\x2f\xd9\x3e\xbd\x83\x5b\xf2\xfe\x8b\xe2\x49\x74\x09\x73\x7d\x33\xd0\x08\x4b\x35\x81\x80\x3c\xde\xa5\x4c\x2c\xf2\x22\xd2\x6c\x8a\xf2\x09\x86\xd0\x3d\x51\xd2\x63\x5e\xa0\x6c\x1c\x10\x96\x17\x5a\x1c\x4a\x87\x26\xd8\xf5\xe9\xa7\x75\xf3\x9f\x78\xf5\xb7\x89\x5a\xce\x2e\xef\x7f\x4f\xba\xe5\x16\xf6\xcb\x3c\x85\xdd\xd4\x1e\xee\x3c\x0b\x6b\x57\x08\x32\xf6\x9e\x90\xd8\x3f\x98\x80\x0c\x8d\x75\x08\x48\xc6\xe1\x14\x5a\x14\xc5\xd8\xc2\x34\x27\x69\x0e\x65\x0a\x61\x88\x45\x5a\x70\x42\xd1\xf4\x28\xcf\x67\xfd\x48\x8e\x38\x24\x27\x8e\x14\x45\x37\xa5\x54\x3b\x8b\xa7\x4d\x2e\xd7\x6b\x62\x54\xf0\xfb\xde\xc3\xe7\xce\x63\x73\x2c\xbf\xb0\xa2\xa3\x37\xa3\xa1\xdd\xe0\x46\xce\x6c\xc9\x0b\x6e\x98\xa0\x49\x1b\x12\x48\x16\x62\x1a\x2a\x58\xf0\x25\x42\x56\x39\x8f\x53\x48\xca\x72\x4d\x86\x66\x95\x48\x0e\x31\xab\xd1\x2e\x00\x6a\xa8\x39\x32\x4e\x60\x78\xd3\xbe\x61\xab\x5b\x15\xdf\x1d\xfa\xe3\xe8\x4b\x1b\xb2\x16\x9c\xb5\xb2\x53\xca\x8b\xa3\x47\x1a\xed\xe4\xb2\xbc\xf1\x62\x47\x61\xfe\xd2\xc3\x1c\xc9\xcb\x76\x66\x44\x08\xb6\x42\x87\xae\x23\xb3\x82\x07\x69\x48\x4a\x41\xe4\x8a\xbe\x45\xa8\xd8\xb3\x5c\x5b\x90\x74\x5e\x0d\x9d\xc0\x16\x03\x56\x0b\x38\xc9\xf6\xf8\x74\x24\x63\xef\xcf\xee\x30\x20\x4f\xfc\x55\xf6\x71\xcf\x96\x64\xdb\xe2\x4c\xea\x7a\x76\xc7\xc3\x02\x29\x65\xf3\x64\x5d\x5e\xb0\x6a\xe9\xb5\x01\x99\x23\xd5\xf7\x28\xdb\xb3\xa5\x71\x8c\xf8\xb5\xdc\xa9\x3c\x39\xea\xae\x5e\x28\xef\x2e\xad\x35\x5c\x7d\x68\x69\xc1\x6a\x9b\xaf\x55\x68\x9d\x32\x21\xc8\x18\xf1\x22\xe1\xb5\x86\x25\x29\x44\x90\x14\xe4\x5d\x00\xdc\x50\x50\x4c\x12\x52\x11\x1d\xc5\x90\xe3\x74\x93\xf3\x09\x5f\x53\xf9\xd0\x11\x23\x39\x42\x1e\x63\xd8\x21\xe1\x25\x30\x70\x99\x96\x7b\x63\xbd\xf7\x17\x10\x15\xf3\x96\xa8\xf9\xe1\xbe\x35\x4b\x5b\x79\x5f\xde\xe8\xb8\xeb\xa3\x29\x1b\x6e\xd4\x78\xc1\x28\x9d\x8f\xcf\x4a\x5e\x18\xe4\x4d\x12\x62\xac\x10\x3c\xcf\x33\x96\x6e\x68\xbc\x64\x59\xb4\xf4\xaf\xcb\x2e\x74\x02\x55\xd5\x69\xc8\x0b\x3c\xaf\xc7\xa4\x1c\x07\xbc\x28\x8a\x96\x96\x0e\xa1\xf1\xe8\xc5\x65\xc6\xe0\x1d\x37\xce\xa5\x34\xee\x52\x53\xff\xa8\x62\xfd\x6e\x5e\xe7\x8f\xcb\xfd\x54\xb7\xdb\x08\x42\xab\x76\xb3\x61\xdb\x8b\x49\xa4\x1f\x13\x30\x88\xcc\xc0\xd5\x08\x14\xd8\x3e\x74\x69\xcf\x55\x55\xcc\x98\xd0\x86\x86\xcc\xb1\xba\xc2\x30\x0e\x17\xa9\xa1\x67\x8a\x98\x55\x82\x18\xa6\x27\x43\x6d\xfa\x70\xfe\xc9\xa1\x3d\x95\xb5\x26\x1c\x99\xbd\xd4\xa9\xbe\x3f\x5e\xa8\x72\xc5\x7c\x77\xde\x2f\x87\x0e\x35\xd7\xde\x5d\x73\x3b\x53\xd1\x24\xaa\xaa\x48\x20\x73\xb1\xaf\x5b\x01\x13\x0b\x58\x0f\x05\x2e\x00\x12\x62\x04\xcc\x68\xc0\x25\x29\xd1\x54\x42\xca\x62\xb0\xef\x71\x90\x92\x61\x68\x13\x20\x81\x5f\x87\x98\xe7\x9b\xb7\xca\xd6\x6d\x9f\xfb\xbb\x6f\xf5\x91\x6d\xf3\x8f\x19\x5d\xaa\x51\xd9\x93\x3b\x4f\xbc\x3b\x73\xe6\x1b\x25\x82\x5f\xbb\x0f\xfc\x34\x89\x8d\x29\xa8\x43\x55\x0d\xb1\x66\x6b\x6c\x18\xb0\x50\x95\x04\x3b\xf6\x59\xd2\xa3\x80\x17\x32\xb2\x49\x90\x16\xcb\x79\x01\xc1\x33\xa2\xc3\x1a\x16\xfa\x9f\x49\x18\xff\x4b\x86\x7a\x6f\x75\xb5\x1c\xb5\xbe\x1a\x1d\x0c\xff\xba\xd3\xf1\x3b\x56\x40\xb5\xdc\x6b\x9d\x89\x8f\x2e\x0b\xfe\xaa\x5b\xef\x23\x72\x6f\xc6\x5c\xa9\x12\x2e\xd7\xd0\x38\x5b\x41\xba\x43\xb1\x86\xea\x9a\xba\x12\xf2\x5c\x40\x21\x80\x04\x1b\x7a\x0a\x8e\x21\x86\xbc\x45\x28\x14\xa0\x64\x31\x32\x2d\xc3\xf6\xb4\x74\xba\x09\xc5\x26\x95\x68\x76\xb2\xfd\xa0\x2d\xdf\x3d\x1f\x7b\x8d\x9b\xff\x4d\xc7\xbc\xd5\x8b\x6d\x3a\xbc\x68\x42\xbf\xe2\x3f\x4f\xa4\x07\x0d\x68\x95\xc4\x57\x60\x6c\x99\xb4\xad\x88\x96\xc4\xb3\x9a\x4c\xf1\x41\x6c\x48\xa4\xa5\x3a\x06\xe1\xc3\xc0\x8d\xe9\xd8\x94\x25\x55\x16\x6d\x4b\x37\x35\x3e\x60\x35\x4f\x05\xe9\x3d\x7e\xec\x9c\xbd\xf5\xca\x27\x8b\x2a\x2f\xde\x57\xbb\xc8\xcf\x07\x4a\x56\xe9\xd4\xe8\xfc\x87\x87\xb2\xe6\xe4\x94\x05\xcd\x96\x8f\xbc\xc3\x16\x9f\x9d\x2a\x0c\x72\xc7\x8a\x96\xc9\x31\x7d\xfc\xe8\xef\xdf\x3e\xd3\x8d\x44\x93\x6a\x65\x7e\x50\x60\x66\x1d\xfc\xd3\x47\xb3\xc1\x69\xd8\x66\xdc\x95\x8c\x99\x07\x24\x8c\xf3\x76\x44\xb1\x80\xf2\x5c\x45\x72\x42\x1e\x12\x1e\xa3\x58\x76\x60\xd8\x9e\xa7\x98\x9e\x64\xb2\x92\x22\xf9\xb6\xee\xcb\xbc\xe3\x79\x62\x20\x38\x31\x8f\xe9\xb4\xe5\xd5\x94\xcf\xf3\xf0\xcd\x25\x4c\xce\x98\xba\xbb\xc5\xbd\x4b\x4b\x9e\x77\xfe\xec\xa7\x71\x17\xd7\xd6\x69\x32\xa5\x43\xab\xfb\xfa\xa8\xba\xed\x93\x97\x45\x75\x4f\x71\x6c\xd2\x81\x8e\x6a\x62\x49\x8b\x35\x81\x0b\xb1\xaa\x48\xa4\x27\xa9\x30\x74\x25\x20\x5b\x1c\x32\x08\x57\x8c\x38\xc0\xb8\x86\x87\xbd\x18\x25\x86\x50\xfe\x6f\x1e\xcf\xfa\xf1\x14\x9e\xff\x5a\x8e\x56\xb3\xa3\x31\x3f\x65\x7d\xba\x74\x7f\xa6\x89\xef\xde\x7c\xbb\x6b\xe9\xc9\x9d\xfb\x65\x7e\x91\xb1\xb6\x5f\x62\x08\xa9\xba\x62\x22\xd7\xd1\x3c\x8b\x64\x48\x81\xb3\x48\xd3\x30\x3d\xc1\x35\x61\xe0\x02\xd9\xe0\x51\xc8\x50\xa1\x64\x78\x06\x21\x0a\x21\xe4\x35\x33\x35\x33\xeb\x6f\x50\xf4\x39\xf7\xda\xa9\xbd\x9b\xa6\xb9\x43\x5a\x3e\x01\xf9\x39\xe2\xe4\x98\x87\xbb\x73\x7e\xbc\x71\xdb\x3d\x37\xdb\x98\xf5\x0b\x8e\x66\x4a\xe2\xb8\x60\x53\x61\x75\x9d\x56\x15\x13\xc9\x31\x6f\x08\xc8\x73\x21\x8b\x42\x26\x30\x69\x02\xda\x10\x20\xc1\x0b\x0d\xd7\x16\x90\x61\x5a\xac\x1c\xa9\xb6\x16\x53\x69\xe3\xca\xe6\xe5\xb9\xf2\x0c\xfb\xa1\x15\xff\x60\xc1\x41\xf9\xea\xe9\x77\xae\x3e\x6b\x32\xab\x50\x8f\xfe\xb8\x42\x8b\xcd\xb9\x2b\x6f\x0d\x2e\x64\x6c\xd0\x5e\x42\x0c\x3b\x90\x93\x54\x5a\x65\x35\x8f\xe6\x10\xc7\x42\x00\xa4\xc0\x55\x22\x48\x28\x86\x89\x1c\x12\x52\x46\x1c\x20\x8b\xb5\x39\x13\xbb\x46\xa4\xbb\x22\x4a\x27\x37\x56\xaa\x70\xb9\x57\xe3\x92\x39\x5f\x96\xee\xd4\xa9\x78\xd5\x43\xbd\xfd\xf5\xa8\x59\xf9\xcf\xaa\x9f\x5f\x2a\x3f\x9c\xd4\xb4\xf0\x9f\x4f\x93\x27\x58\xe7\xb0\x62\x33\x04\x85\x44\xd6\x01\x8a\x2c\x98\x2a\xd2\x19\x93\xb0\x91\x6b\x04\x2e\xd0\x8c\x10\x8a\x1c\x13\x44\x14\x17\x9b\x86\xa4\x18\x34\x8b\x8d\x7f\xf7\xf0\x12\x94\x57\xb5\xc5\xb7\x7f\xce\x9d\x7d\xcc\x9e\x2c\x3f\xe7\x3d\xc7\x4c\x39\xb7\xe3\xb3\xcc\x62\xe6\x92\x87\xdb\x55\x6d\x79\xab\xca\xad\x9d\xc6\x98\x99\xa9\x7f\x9d\xff\xda\xf9\xfa\xcf\x0b\x17\xec\x55\xea\x72\xdb\xba\x67\x97\xef\x9d\x45\x65\x5d\x92\xb9\xe6\xb7\xc3\x86\xf5\x19\x5a\xfa\xed\x3d\xb5\x4a\x67\x4b\x95\x77\xeb\x9d\x78\xb5\xc2\x94\x91\x55\xc7\xe5\x6e\x35\x3e\x4b\xcd\xb6\x39\x26\x3f\x3f\x78\x6b\xfc\xe5\xdc\xb9\x36\xad\x1d\xd4\xb6\x0b\xc8\xb7\x66\x7f\x12\x3d\x6d\x44\x59\xe4\x42\x8a\x11\x01\x2d\xab\x9e\xec\x19\x22\xd2\x59\xd7\xb3\x68\x10\x06\x01\x6f\xfb\xa2\xc8\x43\xdb\xb2\x3c\x35\xf4\x7d\xc0\xe8\x20\xc0\x38\x6d\xde\xfd\xb1\x44\x7d\x2d\x98\xb3\x76\xf6\xa0\xe3\x77\x6f\x88\xa5\x9f\xae\xaa\x31\xfd\x05\xbc\xf4\x36\xdc\x5e\x60\xe5\x0f\x62\x17\xfe\xce\xb8\x24\xea\x1e\x54\x0b\x13\x3c\x64\x7c\x39\x24\x50\x40\x18\xd0\x8c\x3d\x2f\x60\x64\xca\x26\x0c\x49\xa4\x3c\x33\x54\x6d\xc2\x0c\x58\x4f\x30\x6c\x8b\x16\x22\xf0\x6f\xf9\x63\xea\xe5\xae\x2d\x7f\x75\xd2\xc8\x6e\x9f\xcf\xdc\xfb\x47\xd4\xf7\x57\xe6\xe5\x9c\xa6\x33\x47\x1f\xeb\x31\xd2\x7c\x7a\xa0\xe6\x91\x35\xb5\x9e\x55\xca\x18\x61\x37\xe1\x72\x15\x47\x15\x01\x45\xa2\xd0\xb6\x22\x07\x7b\x94\x1e\x58\x54\x40\x91\x98\x07\x8e\x28\xc6\x92\x6c\xd8\x32\x50\x6c\x5b\x20\x03\xca\xa7\x49\x3a\xfa\x1f\x93\xa3\xb4\x85\x98\x70\xa3\xd4\x8c\x7d\x4d\x46\x7d\xd1\xb7\x65\xd1\x7b\xdf\x4c\xfd\xea\xf5\x35\x4f\x32\x7d\x3a\xe1\x78\x7b\x6d\xc1\x94\x2f\x07\x2e\x39\xb4\xde\x4f\xe2\x91\x16\x79\x36\xd4\x49\x45\x66\x7c\x99\xa3\x5d\x5a\x51\xb9\x18\xc9\x94\x6d\x51\xbc\x81\x1c\x29\xe0\x43\x52\xf5\x51\x28\xf2\x76\xc4\x03\xc6\x8b\xf4\x44\x6a\xe6\x55\xf2\xb5\xef\xc6\xef\x2a\x5b\x75\x9e\x4c\x2c\xcb\xd2\x60\xb4\xd2\x43\x2e\x70\xa7\x7b\x0a\x91\xe7\x33\xbd\xe5\xeb\xcf\xd6\x73\x49\xf4\xb4\x09\x09\x85\xb5\x69\x24\x28\xc8\xb2\x7d\x89\x36\x64\xcf\x10\x34\xc4\x31\x8a\x22\xb2\xa2\xe8\x2a\x12\x66\x30\x67\xf9\xa6\xed\xbb\x91\xa2\xfb\x44\xe0\x26\xf0\x03\xb9\xba\xbb\xfa\xb5\xee\x2d\x0c\xfa\xf6\x9d\xf2\x52\xf9\x05\x95\x87\x14\xbf\x9b\x75\xe3\xed\x9e\x3f\x8c\x1e\x44\x0c\x28\x94\xad\xf3\x9e\xe4\x0d\x0f\x04\x4a\x80\x29\x84\x6d\x07\xdb\xb6\xe8\x12\x80\x88\x0d\x8b\x8e\x3c\x4f\x8f\x3c\x4e\xf6\x94\x98\x87\x24\x11\x01\xd9\xa5\x69\x06\x1b\x0c\xf2\x58\x0a\xc7\x89\xe5\xed\xaf\x6f\xd9\xd4\x60\x5a\xb6\x8a\x2f\xc7\xb6\xcd\xf3\xfd\xbc\xbd\xbb\x1f\x2e\xad\xe6\x5f\x65\xb3\x4e\xff\xfd\xc3\x62\xd3\x6e\xe6\x6a\x86\xcc\x24\x0a\x71\x00\x15\x42\x48\x45\x82\xea\xc6\x06\xf0\x78\x9a\x62\x79\xda\x66\x15\xc9\x62\x3d\xd6\xe5\x62\xd9\xf0\x70\xc0\x63\x4f\x40\x0c\x0b\x24\x3f\xa6\x54\x9c\x76\x87\xfb\x35\x6d\xd7\x9f\x23\x0b\x14\xbf\xc8\x1d\xf8\x3a\x1e\xfc\x5e\xbf\xf9\x15\x5e\x09\xab\xb6\x41\xd7\xab\x86\x5f\x07\x29\x45\x57\x24\xcf\x06\x8d\xc3\x90\x70\x7d\x99\x8f\x48\xd9\x8e\x22\xd6\x74\x58\x2e\xd0\x8d\xd0\x71\x22\x6c\xba\xac\xa7\xcb\x44\x48\xe9\xb1\x65\xa9\x3a\xe0\x25\x9f\x55\x10\xfa\x2f\xb6\xe4\xdf\xcc\x81\x69\xbb\x07\x6f\xfa\x94\xaa\xf2\x55\x65\xf3\xbb\xce\x63\xde\xfd\x32\xf3\xc3\xb6\xaf\x4a\xaf\x2b\x34\xdb\xa2\x4b\x9d\xed\x57\x5f\x4b\xde\x28\x34\x80\x41\x44\x06\x74\xc8\xeb\x92\x28\x87\x92\x41\x87\x96\x18\xca\xb6\x26\xeb\x3e\x13\xf1\x86\x44\xc2\x08\x87\x41\x6c\xba\xac\xab\x52\x1a\x07\xa4\x88\x37\x12\x03\xa2\xe2\xc7\x4b\xc0\x95\xc5\xa7\x32\xbf\x93\x1f\x8f\xae\xd5\xb7\xe9\xd6\x9a\xdb\xdb\x3e\x6e\xd6\xee\xe0\x37\xca\x18\xa6\x68\xb9\x22\x3b\xce\x25\xb1\x12\xa4\xa3\x88\x89\x69\xc5\xb1\x38\x33\xa4\x59\x4a\x0f\x22\x5d\xf5\xa0\x11\x40\xc9\xe7\x1d\x33\xa0\xc8\x7f\xc5\x33\xc1\x54\xe8\x48\xf2\x49\x53\x32\x70\x82\x97\x57\x7b\xdf\xf0\xb3\x1b\x5b\x8e\xee\xfb\xb0\x79\x96\x57\x5f\xbd\x1a\xac\x68\x36\xd0\xbb\xf6\x6b\x8f\xdf\x8b\x54\x3f\x71\xe6\xa3\xd7\xe8\xa7\x19\x63\x8e\x27\x16\x4d\xb0\x86\x2f\x08\x9c\x26\x32\x3a\xed\x10\x92\x68\x18\x2e\xeb\xc7\x04\x96\x38\x9a\xb0\x34\x95\xe1\x02\x9d\x89\x31\x1f\x1b\x44\xe4\x31\x90\x30\x7c\x90\xc0\x6b\x73\xdc\x0c\xad\x67\xa1\x8a\x1b\xdf\xdd\x68\x17\x2b\xd1\x76\xfb\x5f\x9b\x87\x1b\xbd\xdb\x2c\xf6\xb9\xa2\x51\xb1\x12\xd5\x4b\x17\x18\x96\x3c\x25\x0d\x10\x5c\xdf\x0e\x31\x19\xd3\x8c\xc0\x47\x8c\x49\x29\x34\x2f\x39\x2e\x40\x22\x1f\x49\x8e\x89\xe3\xc8\x60\xa1\x2f\x18\x92\x28\x01\xc1\xc6\x76\x48\xc6\x41\x1a\x09\xfa\x3f\xb5\x7b\xfb\xa4\xbc\x92\x29\x4b\x93\xd4\x2c\xaa\x6f\x9d\xcb\x85\x5f\x14\x6d\x5d\x7c\x7b\xe7\x27\xa5\x16\x73\x8d\x41\xc9\x1d\x47\x8e\x17\x1d\x58\xa0\x95\x77\xc5\xad\x96\xaf\x78\xf9\x24\x0e\x7a\xe3\x39\xde\x10\x08\x06\x88\x38\xe4\xfc\x90\x44\x3e\x2b\x69\x92\xa3\x98\x41\x14\xa8\x24\x13\xfb\x82\x4b\x5b\x46\xc0\xa8\x98\xd5\x43\xc9\xb3\x34\x9e\xc3\x89\x8b\xc6\x67\xe7\x2a\xae\x7f\x7b\x7a\x8f\x82\x15\x9a\x0c\xa3\xb6\x7d\xc2\xdd\xb9\x33\xbb\xc2\xa1\x97\xdf\x50\x45\xb6\x8c\x5f\x56\xae\x40\x8d\xa7\xbd\x93\x68\xf3\xed\xb2\xea\xff\xeb\x93\x90\x6c\xc0\xbb\x3a\x24\x21\x6d\x61\xd6\x89\x22\x23\x8c\xb0\x46\x01\x95\x8a\x59\x11\x06\x64\xac\xd1\x1a\xa2\x68\x1f\x23\x3d\xf1\xe5\x67\xbb\xbe\x6d\xdc\xf7\xb5\x5a\x07\x7b\x3e\x0d\x7a\x8f\x2a\xd8\xf7\x9b\x39\x59\x3e\x7f\xd4\xb9\x48\xde\xf1\x4b\x6e\x4d\xba\xfe\xee\x11\x70\x3a\x79\x71\xd0\x82\xbe\x6c\x2b\x94\x47\x44\x08\x53\xa6\xea\x2b\xae\x80\x6d\x8e\x54\x03\xc3\x16\x5d\xdf\x32\x65\xca\xf2\x15\x5f\xd5\x3d\x8a\xd6\xe3\xc0\x26\x44\x2d\x9d\x5d\x5e\xda\x60\x43\xd8\xfc\xe0\xf9\x1b\x5d\xe1\xad\xa2\x0b\xe7\x8e\x9a\x91\xa5\x4c\xdf\x31\x75\xb7\xb7\xb8\xb9\x6d\x73\x8d\x21\xb5\x4e\x99\x75\x93\xc8\xa2\xf2\x05\x46\x94\x09\x8f\xb0\xd9\x40\x91\x69\x13\xd3\x3a\x6b\x2a\xaa\x1d\x40\xc7\x55\x43\xdb\x92\x42\x9a\xd6\x3c\x5e\x10\xf9\x20\x52\x54\x27\x46\x4e\x3a\xc3\xd1\x87\x2c\xdc\xf7\x76\x97\x56\x5b\xdb\x0f\x7b\x7f\xd7\xfa\xeb\x25\x1f\xbd\x75\xe3\xd9\xba\xfe\xed\x7a\xbf\xb5\xec\xd7\x8e\x2b\xf3\x1d\xdc\xbb\x2b\x63\x6d\xfb\x84\x58\x86\x24\x26\x5d\xd5\xd2\xa8\x50\xc6\x08\x30\x3a\xc3\x5a\x26\xa2\xb4\x00\x32\x7e\xac\xdb\x22\x43\x07\xa1\xaa\x2a\x0c\x65\x73\xbe\x4d\x08\x8a\x8a\x89\x20\x0d\xe7\xf1\x9f\xe8\x16\x7d\x52\xea\x8e\xc8\x92\x29\xf5\x69\xe5\xdf\x3a\xfd\x68\xd3\xf9\x1e\x76\xce\xf5\x8b\x5b\x09\x6d\x33\x97\xbe\x36\x2c\x53\xe5\x1a\x6d\x7b\x6d\x5a\x50\xec\xe0\xe1\x2b\x29\xe2\x0f\x49\x34\x5c\x8b\x5d\x24\x98\x21\x4b\x86\x50\x27\x1d\x2c\x05\x52\xec\x63\x83\xd2\xa9\x88\x32\x8d\x18\x70\x16\xe5\xe9\xba\xee\x92\x01\xe1\x85\x12\xe7\x62\xcf\x4d\x47\xd9\x77\xc7\x51\xbe\xef\xd7\xae\x46\xfb\x31\x99\x4a\x75\x32\x9a\x04\x6f\xbe\x32\xef\xb5\x72\x0d\x7b\x95\x7a\x0e\xd1\x89\xde\x95\xde\x5a\x98\x35\x89\x3a\x5c\x43\xd6\x94\x48\x8f\x19\xa8\x3a\x00\x52\x8e\xab\x43\x36\x8e\x7c\x4d\xe6\x28\x44\xea\x04\x4d\x84\x9a\x80\x6c\x49\xf6\x23\xd6\xb6\x00\xa5\xf1\x5a\x3a\x22\x32\x2f\x67\xfb\x4d\x35\xb9\x76\xab\x72\xed\xec\xf9\xe2\x93\x11\x0d\x9b\x9f\xb9\xbe\xf9\xbd\x87\x59\x9c\x9d\x7b\xb5\xc1\xf7\x27\xf4\x6a\x90\x31\x53\x9e\xc4\x36\x6a\x28\x64\x63\xda\xa7\xcd\x38\xd2\x59\x0e\xc9\x3e\x32\x25\x99\x26\xd5\x20\x22\xb1\x04\x68\xce\x0c\x78\x83\x8b\x62\x84\x35\xca\x67\xa1\x4c\xc6\xe9\x29\x69\x0e\x4f\xea\xde\x99\x39\xfa\x7c\x49\x9e\x2d\x33\x72\xe7\x79\x50\xfa\x9b\x29\x0f\xf9\xeb\xa7\xac\x83\x3b\xdb\x08\x97\x47\x7e\xc1\x2e\xf0\x92\x68\x6d\xe7\x0a\x31\x11\x78\x24\x29\x30\x44\xe0\x06\x40\x71\x65\xa4\xfb\x24\xe0\x22\x4f\xa2\x03\xac\x12\x82\x61\xf3\x82\x46\x58\x31\x11\x58\x84\x6a\x03\x2d\x1d\x27\x91\x8b\x5f\xbf\xb1\x6d\x7d\xe7\x47\xb7\x3f\x58\xbf\xb6\x4c\x8e\xb6\xb9\xd7\xed\x6b\xdb\x64\x07\x4a\xa9\xb5\x20\xf3\xfe\xfc\x0d\xc1\xad\x7c\x79\x93\x77\x1d\x8b\x4d\x14\xcb\x7a\x10\xf3\x4e\xe8\x4a\x24\x19\x28\x26\x11\x33\x3c\xcf\xe2\x80\xa6\x11\x45\x39\xc0\x0d\x3c\x12\xc6\x3c\x70\x2c\x60\x60\x8f\xb5\xd4\xbf\xdf\xc5\x0f\xe7\xf8\xbf\xd1\x9d\xfa\x34\x28\x95\x25\x6b\xbf\x54\xcf\x47\x79\xac\x36\x73\xaf\x1f\x5d\xe9\x6c\xaa\x16\x15\x99\x5c\xa5\xff\xb8\xc7\x97\x27\x1f\x9f\x5d\x4f\x58\x04\x7a\x2c\xad\xf4\xc1\xc1\xd3\xa3\x93\xf7\x4d\xb4\xd8\xf7\x28\x0e\xa8\x8e\x62\x6a\xb6\x68\x8b\x96\x10\x93\x04\xd2\x48\x2f\xc2\x10\x98\x72\xc0\x10\x1e\x87\x1c\xc3\x54\x42\x92\xd0\x80\xc9\x19\x71\x82\xf1\x20\x9d\x9a\xcf\x5a\x58\xaf\xe6\xac\x5e\xcd\x7f\x9e\x53\xb8\xde\xc6\x06\xc4\xf8\x13\xab\x88\xba\x8f\x8f\x9d\x19\x36\xee\xdc\xdc\xda\x6e\xb5\xe4\x19\x78\x00\xca\x76\x0d\x68\x5a\x12\x49\xa9\x11\xcf\x33\xbc\xe9\x5a\x2a\xc5\xd3\x81\x4c\x9a\xb4\xad\x59\x36\x32\x1c\x23\x80\x21\x6f\x69\x3c\x36\x59\x1c\xd9\x3a\x4a\x0c\xa1\xfa\xa3\xc7\xf4\xbd\x5a\x6f\xc8\xe3\x6e\x56\xae\x09\xfb\xc7\xe0\x8f\x8e\xf4\x5f\x77\xab\x3c\x58\x32\x1a\xda\x39\x5a\x94\xac\x10\x27\xaf\x29\xce\xb9\xc8\xb1\x89\x90\x53\x42\xde\x0c\x0c\x46\x30\xcc\x00\x00\xdb\x23\x71\x2c\x5b\x14\x6f\x8b\x48\xe1\x38\x2a\xf4\x4d\x8d\x15\x69\x00\x29\x0f\x88\xff\xe6\x69\xa5\xed\xe3\x67\xaf\x7d\xe6\xa7\xaf\x0f\xf6\x68\x32\xac\xff\xc0\x1b\xdf\x9c\x1c\xfc\x21\x9b\xf5\xc5\xa7\xcb\x27\x67\x3a\x2b\xce\x29\x6e\xe6\x6a\xf3\x76\x12\xb9\x5a\xbc\x19\xb1\x92\x8e\x54\xc5\xd7\x75\x86\x36\x63\x4a\x73\x7d\x8a\x26\x75\x99\xc0\x01\xf6\x55\xe4\xb8\x6e\x64\x58\xac\x66\x07\x32\x8e\x82\x98\x90\x80\x9e\xb6\x00\x1e\x55\xdd\x17\xad\x69\xf9\xcb\x2d\xc8\x33\xb4\x55\xc3\x59\xd5\xa3\x56\x03\x3f\x19\xde\xe5\xd0\x9a\x37\x1f\xb5\xbd\xf4\xd9\x57\xef\xf3\x3b\x93\xe8\xc1\x14\x23\x57\x06\x92\x8c\x90\x4a\xfb\xac\xc3\x9b\x6a\xa8\x7a\xbc\x42\x72\x58\x27\x14\xd7\x56\x24\x41\x85\x71\xac\x1b\xa2\xe7\xd0\x34\x88\x55\x3b\xb5\x4b\xed\xdf\xa0\x90\x9a\x0d\x2d\xb5\x55\xba\xbf\xf7\x74\xe1\x39\x9f\xad\x68\x5d\xbf\xcb\xa6\x09\xc4\xbd\xe2\xf6\xa7\x65\x51\xf6\x23\x43\x8e\x8e\xbc\x97\xb1\x59\x85\x89\x55\x3c\x48\xe3\x0c\x8e\xa5\x43\x55\xa2\x1d\x4d\x0b\x0d\xcc\x91\x3e\xa1\x20\x28\x38\x20\x0e\x02\x32\x26\x00\x29\x28\x92\xc9\x47\x92\x4e\xba\x2c\xeb\x63\x22\x8d\x2e\xfb\x9f\x78\x70\x7d\x52\x9a\x64\xca\x96\x3f\xb5\x42\x2f\xeb\x62\x69\xcb\x01\xb5\x4c\x9f\x0f\x0e\xc0\x25\x29\xc7\xa6\x9d\x1f\xf7\xdd\x80\x09\xbd\x8b\x17\xed\x33\xa5\xe6\xe3\xb3\x33\xf6\x55\xc8\x98\xc7\x5d\xc2\x7f\x88\x1c\x81\xe0\x58\xde\xa0\x0c\x96\xf5\x95\x28\xb6\x19\x97\xd1\xd8\x00\x50\x28\x0c\x49\x39\xf4\x23\x1f\x84\x96\x1f\xba\x0e\x92\xb1\x2e\x82\x18\xba\x41\xe2\x8f\x72\x3c\x6b\x01\xea\xf6\xe4\x7a\x0d\x2b\x3c\x1b\x72\xff\xec\xd1\xbf\xde\x27\x7b\x5a\xfb\xdb\x3f\x39\xb4\xf0\xc0\xe7\xe6\x80\xb7\x07\x3d\x6f\x9e\x44\xfb\x6b\x43\xd6\x2c\x2d\x06\x32\x63\x79\x5e\x20\xca\xbc\x2e\xfb\x32\xa3\xf8\x9e\x1b\xab\x14\xf2\x4c\x41\x45\xaa\x45\x4a\x12\x13\xb1\x8e\xaf\xb3\x3a\x09\xd2\x09\x2e\x6b\xf2\xd7\x2a\xda\xee\x58\xbb\x42\xbb\xca\xcd\x9e\xbd\xac\x0f\xd1\xc1\x9b\x29\x9e\x19\xb9\xaf\xc0\x4d\xcc\xe7\xab\xbd\xb1\xe6\xb2\x8c\x99\x73\x25\x9e\x13\xa8\x07\x3a\xc5\x48\x92\x8c\x14\xc0\xb8\x22\x54\x19\x5f\xa5\x2d\xc5\x06\x50\x33\x80\x4e\x3a\xa6\x66\x72\x08\x2a\x46\xc4\x23\x1f\x72\x40\x13\xf9\x74\xa4\xe4\xbf\xbd\xbd\xa6\xd9\xee\x2b\x94\xfe\xf4\x4e\xc3\x4a\x4f\xa6\xd7\x1c\x35\xb1\x59\x9d\x7e\xc7\x5f\xef\xb5\xa0\xc8\xda\x5b\x37\x0f\x15\x3f\x92\xb1\xf1\x3c\xe9\x58\x60\x63\x16\x59\x22\x30\x25\x47\xa7\x8c\x50\xb5\x58\x2f\xe6\x1d\x2a\x84\xaa\x1a\x48\xa2\x4a\x05\x86\x81\x79\x29\xa0\x59\xc3\x0b\x24\xa4\x5b\x2c\xfc\xbb\x11\x7a\x2f\xfb\xff\x8d\xd4\xd9\xa7\x41\xe6\x4c\x45\xfb\xa6\xfa\x83\x9d\x27\xe7\x5e\x21\x46\x65\xd6\x97\x2f\xfc\xbc\xca\x2e\xa5\xeb\xf2\xcf\x5e\x79\x4e\x3f\x3b\x59\xa6\x71\xfb\x01\x33\x06\xef\xa9\x33\x7a\x5e\x12\xd9\x23\x81\x23\xf2\x91\x6a\xc5\x3e\xf0\x58\x24\x39\x72\x10\x50\x94\x18\x4b\x3e\xe0\x6d\x40\x29\x00\x87\xb4\xe4\xf1\xb1\xa4\x6b\x1a\x2b\xfa\x6c\xec\x40\x27\x31\xe1\x85\x6d\xbf\xe3\xea\xc9\xec\x53\x0b\x5e\x6a\x96\xab\xfd\xfc\x1e\xf3\x5e\x6b\xac\x5d\x02\x05\x3f\xe8\xa6\x8d\xdb\xfc\xf4\x59\xd6\xaa\x9d\x93\xa8\x95\x37\x7c\x49\xd7\x39\x1d\xf8\x86\x1b\x50\x94\x12\xaa\x42\x0c\x74\x00\xfc\x40\x83\x58\xf0\x03\x5e\xb7\x55\xc7\x0b\x45\x27\x8a\x20\x15\xfa\x3a\x1b\xc7\x4c\xda\x2a\xe0\xee\xd6\xb2\x8d\xe6\x54\xc9\x3d\x72\xe3\xc3\x6e\x2f\xba\xa0\x5c\xe8\xde\xfa\x35\x15\x36\x7f\x90\xe3\xd8\xdb\x1f\xe6\xab\x96\x6d\x6d\xb6\x8c\xcd\x34\x4b\xdc\x9c\x16\x23\x3f\xd6\x64\x15\xaa\xb2\x17\xeb\x1c\xe7\x4b\x84\x8b\x08\x45\x31\x44\x85\x70\x59\xdd\x8f\xa9\x88\x8b\x34\x8b\xd2\x02\x56\x80\x92\x0c\xa5\x38\x1d\xe1\x7b\x6e\xad\xdf\xf0\x2d\x05\x4b\xdd\xee\xfc\xb2\xc5\x3d\xb8\x3e\xcb\xa2\x8f\x46\x85\x87\xcb\x90\xdc\xe8\x1f\xc9\x96\xbf\xbc\xfc\xf0\xed\xaa\xc9\x03\x45\x20\x30\x94\xe2\x01\x8d\xe2\x02\x46\xd2\x22\xdb\x8d\x7d\x97\x34\x65\x20\x3a\x3e\x6d\x10\x3e\x6b\x2a\x84\x82\xed\x50\x51\x62\x82\x47\x46\xe4\xff\xf7\x14\xf5\xff\x04\xfc\x7f\x62\xe7\xf4\x49\x79\xbf\x6e\xdd\xff\x25\xc9\x2e\xbc\x05\xce\xcc\x75\xb8\xea\xdd\xda\xd6\x06\x8a\x6c\xdb\x42\x7a\xef\xec\xf6\x97\x5d\xff\xaa\x3a\xa2\x3b\xed\x81\xc5\x93\x5e\xb9\x95\xbc\xde\xa9\x4d\x5a\x5e\x24\x59\xb6\xad\xe8\x06\x81\x64\x5a\x20\x15\x41\xd6\x29\x59\x65\x0d\xdf\x08\xb0\x04\xdd\x40\xf0\x9c\x40\x12\x04\x97\x37\x3d\x42\x87\x3c\x4e\x1c\x8a\xca\x82\x35\x5d\xba\x56\x2e\xf9\xc5\xaa\xc1\x73\x0f\x86\xd2\x43\xaf\x6a\x85\xf3\x1f\x9c\xec\x9a\x3b\xfb\xee\x26\x0b\xe6\xfd\x7e\xe4\xcd\x5f\x92\x48\x4d\x0b\x02\x3a\x0a\xe8\x50\xa3\x6d\xc9\x08\x68\x24\x7a\x22\x2b\x07\x22\x00\x0a\x49\x8a\x88\xa0\x49\x8e\x0a\x18\x4f\xd4\x55\x82\xe5\xfc\x48\xc5\x1e\x8c\x13\xe3\x68\x7f\x9d\x32\xb9\xfa\xca\xc7\x95\xec\x4f\x07\xaf\x64\xbb\x4d\x5b\x72\xa1\xe8\xe1\xe5\x0b\xb5\xb6\xcc\x74\x63\x69\xf3\x03\xd5\x1f\x57\x48\xa2\x24\x1b\x71\x81\xad\xc6\x32\x69\xc5\x91\xa6\xf0\x32\x0e\x5d\x45\xb1\x5c\x52\x50\x23\x86\xd4\x09\x12\x02\x85\x42\x84\x8b\x2d\x95\x14\x44\x95\xb3\x2d\x10\x24\xde\xe5\xc6\x5f\x2e\x5e\x72\xfa\x96\x3e\x7a\xd4\xb6\x5c\xd5\x72\xbe\xfe\x23\x78\x30\xa9\x6e\xa5\xc6\xdc\xac\xc5\x1b\x7f\x75\xaf\x77\xc8\xde\x3e\x63\x0d\xc3\xc4\xc2\x54\x60\xea\x9a\x61\x60\x3f\x64\x34\xd9\xf1\x03\x52\x75\x43\x1e\x41\x9d\xa0\x35\xe0\x93\x0a\x23\x45\x02\x90\x54\x27\xf0\x6d\x29\x46\x24\x19\x3b\xff\x45\x00\xdc\x98\xeb\xff\xc6\xc8\xe8\x93\x52\x26\x53\x9f\xb2\xdf\xa6\xfa\x87\xdb\xb2\xf5\xe2\x6e\x2f\x98\x79\xd7\xab\x55\xac\x1a\x1e\x35\xec\xd1\x23\xed\xe2\x98\x13\x4d\x73\x94\xaa\xd8\x26\xcb\xe6\x9e\x93\x7b\x1c\x48\xe2\x33\x94\xee\x28\x9c\x29\xf1\x16\xf4\x08\x1f\xaa\x90\xd7\x38\x35\x26\x1d\x13\x45\x91\xc9\x70\x0c\x1f\x31\x30\xd6\x69\xd5\x70\x38\xdb\x8d\x1d\xce\x92\xa1\x98\xb8\x70\x28\xba\x6d\xc6\xd5\xda\x65\xdd\x37\x6b\x1f\x9f\xb2\xb1\x92\xda\xf8\xf6\xb8\x1f\x27\x4d\xea\x70\xbf\x65\x8f\x1c\xbf\x1c\xea\xba\xa2\xc1\x83\xe4\xf1\xb7\x39\x31\xe2\x2c\x9d\xf1\x68\x9b\x83\x34\xcb\xd9\x9e\x2c\x79\x9e\x62\x91\x2a\x13\x11\x76\x8c\x90\xa1\x71\x1e\x41\x87\x8a\x16\xc6\x96\x62\x8a\x14\xc3\xa7\xe7\x1d\xb2\x19\x4d\x6a\x70\xcd\xbc\x52\xbb\x02\x3b\xe4\xd0\x98\xfc\xa7\xd7\x5d\xda\x77\xaa\xee\xd8\x07\x23\x3e\x79\xbe\x6d\xcb\xc8\x25\x2d\xaa\x24\xcf\xee\x04\x78\x3a\x27\x10\x44\xc8\x53\x0c\x69\xb0\x10\x93\xff\xaa\x30\x59\x5e\x83\x26\x64\x43\x33\x50\x2c\x40\x70\x66\xcc\x47\x31\xed\x73\xc0\x09\x7c\x8a\x80\x54\xe2\xbc\x5a\xb8\x14\x13\xfc\xf6\xa2\x5f\xff\xe1\x8b\x86\x3f\x05\x23\x3a\x1e\xa8\xda\x6a\xc5\xc4\x2c\x23\xb5\xa5\xc2\x9c\x42\xab\x57\xe4\x5d\x77\x33\x89\xe4\x0c\x4e\xf4\x1d\x1c\x19\x7e\xa8\xb9\x1c\xe7\x13\xba\x61\xf8\xba\xc7\xb2\xbc\x4d\x73\x2e\x1b\xe8\x8e\x4b\xb9\x00\xd3\x91\x15\x50\x91\x8b\x42\xc1\xe0\x12\x38\xb1\x6b\x15\x2b\x8c\xa4\x4a\xe4\x2d\xbf\xc1\x9b\x5e\xf1\x5a\xc7\x5e\x65\x9b\x7c\x5e\xe0\xe4\x92\xe3\x61\xfd\x9c\x5e\xbf\xe9\x83\x3a\xff\x7e\x38\x89\xec\x62\x05\x6b\x08\x88\xb6\x69\x93\x31\xc5\x43\x52\xd5\x08\x87\x16\x03\x83\x0f\x81\x20\x78\xc8\x53\x2d\x6c\xf3\x8c\x65\xca\x30\x88\x20\xa1\x89\x02\xfc\xff\x58\xfb\xea\x68\xab\xaa\xed\x7f\xe0\xd2\x5d\x22\x48\x48\x4b\xc7\x4e\x1a\x91\x46\x90\x6e\x89\xbd\x76\xf7\xda\x7b\xed\x26\xbd\x5c\x91\xee\x92\x90\x06\x09\x45\x52\x90\x46\x90\x2e\xe9\x0e\xa5\x4b\xa4\xf3\xfe\xc6\xfb\x7d\xc7\x7b\x7a\x1f\xe7\x0e\xdf\xb8\xe3\xfc\xbf\xff\x98\x67\x9d\xb9\xe6\x9a\x6b\xae\x4f\x58\xb1\x8b\x4b\xc6\xee\x6b\xa6\x74\xac\xfe\x36\x5f\x9f\xe1\x4b\xbe\x5f\x3f\x6a\xfd\x8e\x41\xcf\x5b\x94\xff\x68\xe8\xd1\x8d\xdd\x25\x50\x01\xdb\x54\x60\x6c\x1c\xa9\xbf\x02\xab\x09\x80\x14\x01\x43\x48\xc8\xa3\xa0\x41\x50\x21\x63\xd0\xa2\xa3\xfa\xbe\x8e\x1c\x33\x22\x79\x13\xf3\x79\xc9\xc4\x02\x89\x67\x19\xc2\x0f\x53\x91\xa3\xd3\xc7\x9d\xa8\xbd\x76\xe4\x67\x0b\x56\x77\xaa\x9c\x93\x19\x74\xbc\xff\xcc\x6c\xa7\x26\x26\xae\xb9\x30\x26\xdf\xf0\x93\x7b\xdb\xae\xff\x25\x6d\x4e\xcf\xb1\x59\x9b\x4a\xa0\x70\x86\x1c\x0a\x8a\x2d\x01\x8d\x14\x6d\x4a\x54\x2c\x21\x32\x81\x8b\x79\xbc\x29\xdb\x96\x61\x68\x12\x0c\x90\xe2\x1a\x9a\xe3\x5b\xa6\xcb\xa4\x72\x33\xda\x53\x8f\x49\xee\x73\xe8\x7e\xa7\xfc\x65\x96\xce\xfe\xe0\x90\xfd\xeb\x9a\x0f\xa7\x9f\x39\xdf\x7e\xf0\x8b\x4b\x65\xfa\x14\xb9\x24\x85\x9f\xc6\x51\xc1\xc1\x01\xb4\xe7\xb8\x2e\x27\xda\xc0\x96\x2d\x52\xf3\x71\x88\x30\xe4\x0a\x26\x61\x12\xaa\xe0\x11\xc0\x31\x28\x9c\xa3\x04\x95\x30\x19\xce\x53\x29\xf0\x97\x6d\xf2\xf3\x4c\xff\x1b\xf8\x25\xb1\x71\xde\x0c\x7d\x53\x36\x2f\xfd\xa2\x75\x5b\xc9\x0c\x55\xd7\x95\xcc\xc3\xe6\x3b\x37\xbe\x65\xe6\x82\x59\xb6\x8d\xc6\xf2\x1d\x6f\xbb\xec\xe6\xd2\x31\x33\xe6\x1d\x4e\x5b\xcf\x1e\x33\xf3\x81\xa6\xbb\x34\x2b\x63\xc8\x70\x79\x4b\xf6\x29\x96\xb0\x1d\x49\x63\x1c\xd7\x90\x2d\xc7\xe5\x7d\xc3\xe7\x70\xa4\x05\x9c\xa9\x8b\x16\x46\xb0\x36\x8b\x88\xd8\x69\xd4\x36\xe9\x50\xaf\x3f\x93\x7e\x28\x3e\xe0\xba\x90\x38\xbe\x65\xa7\xf7\x7a\x34\x6d\x32\xa0\xc7\x81\x96\xad\x0a\x32\xeb\xbe\x2b\xb4\xa6\xe6\x99\x38\xaa\xd1\x89\xbe\x66\xeb\x06\x85\xcb\x34\x02\x1c\x46\x3b\xbc\x01\x28\x1e\xc7\x69\x87\x01\x12\xf4\x31\x93\xc1\x59\x5f\x62\x38\x03\xc7\x01\xc9\x92\x40\xb0\xb4\xd8\x87\xce\xfb\xb3\x11\x78\x4d\x99\x53\x17\xd4\x29\xb0\xdc\xdd\x3e\xb7\xd4\xef\x7d\x6b\xd5\x2a\x50\xa6\xdd\xb0\xe6\x9b\x9e\xac\xbe\xb2\x6a\x47\xda\x90\x54\x31\x57\x99\x0d\xf8\x10\x92\xac\x2c\xab\x82\x42\x20\x9d\x09\x3d\x99\xe6\x2c\x1c\xb7\x30\x43\x36\x70\x82\xa3\x54\x9b\x01\xba\xe9\x19\x1e\x54\x90\x1f\x78\x36\x9b\x8a\x8a\x58\xd6\xf6\x49\x49\x5f\x37\xaf\x71\x77\xc2\x9d\x31\xe0\x76\x8d\x26\x2e\x6a\x97\x79\xfe\xd6\xee\x99\xba\xd0\x0d\x7e\x93\xb6\x3c\x3e\x30\x30\x8e\x32\x85\x82\x25\xb1\x90\xf0\x05\x24\x46\x84\xec\x13\x9e\xaf\x68\x48\xf2\x22\x99\x92\x45\x81\x21\x10\xc0\x98\x88\x64\x22\xd1\xa1\x69\x8e\xa5\x05\xc7\x53\xff\x12\xd0\x3b\x97\xf5\x7f\x03\x72\x25\x36\xc9\x50\xb8\xd1\x7f\x3d\xd7\xfc\x59\x68\xfb\x83\xed\x59\x12\x56\x5e\xb9\xf3\x64\xed\xda\xf4\xc3\x72\xed\xad\x70\x4c\xda\xdb\xe5\xd6\x17\x1b\xc7\x15\x5a\x3f\xff\xf9\xd2\xf8\xb1\x07\x80\x1a\x48\xae\x40\x2a\xb2\x1c\x21\xca\xf1\x78\xc9\x74\xdd\xc8\xf1\x05\x51\xf1\x10\x25\xf8\x98\xc6\xb9\x96\xc4\xd2\x14\x67\xd9\x9e\x6a\x93\x9e\x02\xfe\x8f\xec\xf0\x6e\x1e\x95\xa9\x9a\x74\xa5\x4f\xed\x71\x4d\x3f\x1d\xff\xc7\x92\x74\x5c\xbb\xe3\xd5\xcf\x0f\xad\x1e\xd5\x68\x5e\x77\xf5\xae\x9d\x83\x76\x95\xcc\x9d\xb6\x7e\x2b\xe6\x9f\x02\x05\xdd\xf7\x58\xd3\xb5\x78\x13\x29\x9c\x88\x54\xc8\xab\xb4\x84\xb3\x91\xc4\x2b\xb4\x68\xfb\xb4\x2e\x48\xa4\xcc\xe2\x8c\x84\x79\x1c\x81\x23\x4e\x26\x63\x77\x02\xe5\xf5\xa8\x52\xc9\x57\xd5\xcd\xd1\x83\xaa\x5e\xcf\xfc\xa0\x52\x0b\x7e\xfa\xaa\xab\x6b\x89\xca\x2f\x32\xbc\x29\xe8\x16\x7c\x7f\x5f\xda\xee\x7f\xb1\x51\x1b\xb6\x21\xe3\xac\x24\xc9\x14\xee\x52\x91\x8f\xd9\x72\x24\x11\x50\x72\x4d\xd7\x14\x14\xd7\x17\xcc\xc0\x76\x01\x6e\x44\xac\xcb\xb9\x1e\xad\x0b\x2a\xe6\xbe\x7b\xc3\xde\x9e\xfd\x64\xa5\x0d\xe0\xcd\xa0\x65\x19\x3e\x3e\x3d\xfe\xda\xf3\xa5\xbf\x2a\x65\xf4\x91\xfd\xbf\xcc\x32\xb0\xcf\x7b\x2f\xda\x0e\x21\xd3\x86\x29\x88\x3d\x57\xb2\x43\xd5\xd2\x10\xed\x21\x9c\x85\x06\x87\xeb\x8c\x1d\xfa\xa4\x20\x05\x96\xca\x5b\x82\xcc\xe1\xc8\x25\x3c\x60\x48\x14\x4e\xf3\x2a\xc5\xd0\x3e\x9e\x8a\x58\x55\x16\xab\xd0\xc4\xfb\xce\x8a\x5b\xcd\xf6\x90\xc5\x17\xf5\xbd\xd6\xeb\xc3\xcb\x15\xfa\xce\x76\xea\x5c\xfa\xa4\xfb\xef\xed\x0e\x0c\x5c\x33\x27\x7e\xf5\x50\xf0\x2c\xe4\x69\x4a\xe8\xb8\x82\x43\xfb\x66\x84\x33\x8c\x86\x50\x48\xc9\x96\x8b\x4b\x96\x0b\x34\x0b\xf7\x85\xc0\x56\x75\x42\xf5\x59\x25\xc0\x64\x27\x15\x75\xce\xaa\x8b\x77\xe3\xa5\x2b\xd6\x68\xfa\xf1\xa8\x3e\x75\xea\x2f\x5c\xde\x67\x51\xd0\xf8\xfd\x4e\x43\xdb\x1e\xdb\x72\xa1\xdf\xe2\x62\xcf\x8b\xa6\x0d\xbb\x1b\xdb\xe9\x17\xe1\x96\x2b\x44\x1e\x69\x10\x04\x89\x30\x10\xba\x0c\x6e\xb1\x0e\x0a\x02\x48\x8a\x3c\xc3\x31\x91\x2d\x1a\x1a\xc9\x89\x36\xc7\xab\x32\x8d\x08\xf4\x97\x1c\xf9\x06\xf2\xff\xa2\x1d\xb2\x2a\xf9\xec\x59\xa5\xe7\xc2\xa4\xb6\x56\xdb\x5a\xbb\xbe\x68\xb9\xff\xe7\x83\xcb\x2a\xe6\x9d\xf2\xfd\x97\xab\x92\xef\xdd\x9d\x7d\xf8\x7e\x62\x93\x41\xc9\xc9\xc9\xd3\x3e\x4c\x89\x2d\xf5\x16\xe6\xec\xb2\xa8\xb0\x27\x9c\x5f\x91\x34\x7c\xc5\xfa\x99\x56\x15\xa2\xde\xfc\x22\x6b\x27\xb6\xef\x9e\x71\xd0\xae\xb9\x17\x5f\x8d\x4e\xf9\xf5\xee\xcf\x6a\x3e\x5a\xd7\x76\xdb\xb4\x21\xbd\xfa\x7c\x62\x67\xdb\xbc\xa3\x41\xe3\x3e\xd3\x1f\x86\x7d\xde\xe4\xae\xd7\x2a\x53\xb8\x72\x6d\xdd\x94\x5f\xdf\x9e\xca\x5d\xac\x37\x2b\x98\xeb\x9f\x7a\xf8\x1b\xff\xd1\x87\xd2\xf6\xd7\x9f\xbe\x6d\xb7\xbd\x05\xdd\xba\x61\x42\xbd\xfa\xf4\xec\x4e\x29\xbf\x5e\x58\xb1\x44\x91\x92\x0f\x4a\xb5\x6a\x98\xe9\xeb\x86\xad\x1b\xbf\xa8\x3d\xb6\x6b\x74\x22\x53\xf6\xee\x85\xe4\x32\xe4\x87\xd7\xcd\x71\x9f\xa6\xfc\xba\xf1\xb8\x55\xa5\x8e\x5d\x20\x5f\x16\x5b\xdd\x74\xcf\xa8\x2c\xd3\x7b\x14\xdb\x7a\x63\xd5\xba\x5e\xf7\x7e\xed\x5b\x71\xce\x8b\xc9\xc3\xfb\x0c\x48\x01\x70\x6a\xf2\x66\x7f\xa1\x2c\xf5\xf6\x6c\x95\x33\x74\x3f\x38\xe9\x4c\x91\x33\x9b\xb7\x8d\xf2\x4a\x8f\xf0\xef\xbe\xdf\x73\xdb\xdd\xdc\xc3\x67\xed\x88\x5f\x4b\x87\x43\x80\x4c\x9c\xd0\x3d\x87\xf3\x55\xdd\x95\x59\x16\x45\x22\xa4\x1d\x19\xf7\xc5\x28\xa0\x7c\xc8\x50\x91\x03\x31\xcc\x0e\x6c\x8c\x20\x38\x40\xfd\xcd\xee\xf6\x3f\xe1\x4a\x97\x13\xec\xb2\xcd\xbe\x9b\x30\x6f\xe9\xf3\x57\xfb\x2f\x65\x78\x33\x3e\x6f\xab\xd5\x3f\x6f\x8f\x76\x71\x93\x3a\x77\x3c\xb0\xe3\x4c\xda\x94\xb2\x53\x71\xf8\x41\x80\x86\x6e\xe0\xa8\xba\xa2\x21\x42\x09\x42\x06\x30\x3a\xe1\x28\xa1\xe2\x86\xa2\x40\x47\xac\xe6\x85\xac\xef\xe2\x94\x4d\x23\xd5\xa3\x64\x9b\x7c\x17\x13\x3b\xe8\x24\x5a\xd6\xb6\x5d\xfb\x9b\xdf\xac\xe9\xd7\xfb\xee\xf8\x05\xdd\x6f\xfd\xb9\xe2\x87\x25\x6f\x37\xcc\x1e\x74\xe6\xa0\x3a\xe7\x64\xab\xc3\x71\x9c\x2c\x11\x16\x46\x0a\xac\x17\x11\x04\x72\x29\x31\x8c\x14\x26\x20\x23\x4e\x32\x28\xc9\xb3\x10\x65\xf9\xbe\xe6\xe2\x86\xec\x85\x86\x10\xe0\x81\x6e\x13\x2a\x1e\x1b\x13\x5b\xec\xed\x09\xbc\x72\xff\xb5\xa3\xee\x6f\x93\xea\x59\x37\x7e\x3d\x93\xe7\xa3\xa5\x87\x5a\x7f\x97\xe1\xf7\xe4\x29\xa3\xd2\xeb\x0b\x3b\xc7\xcf\xff\x98\xa1\x44\xd9\x66\x5c\xd3\x73\x31\xc6\x84\x9a\x6a\x01\x49\x77\x59\xdd\x90\x45\x0f\x17\x5d\x9f\x42\x22\x2e\x09\x21\x16\xfa\x88\xb4\xf9\x48\x91\x83\xe8\xff\xac\x29\x53\x26\x44\x89\xe6\x4a\x72\x8f\xf5\xeb\x5a\x64\x28\xa2\x3f\x7a\x3a\x74\xf3\xb8\x86\x6f\x37\xdd\x7b\x6b\x4d\xdb\x99\x40\xb5\xbf\xbe\xb6\x6f\xdf\xb4\xf5\x92\xb1\x9f\xb9\xbd\x48\x00\x76\xc8\x68\xaa\xa8\x2b\xa1\x24\x1b\x2c\xcf\x28\x34\xd4\x15\x41\x56\x0c\xdd\xe6\x49\x15\xd2\x7a\xa8\xf3\x44\x80\x24\xc8\x58\x84\x25\xc7\xf0\x29\xfd\xe4\xc3\xcc\xe9\x9a\x3f\xda\xda\xe3\x7a\x97\xef\xd7\xcf\x37\xba\x1d\x6d\x7d\xff\x4b\xce\xfe\x74\x9e\xb6\xf4\x6e\xbd\x41\xce\xf0\x81\x69\x23\x27\xc5\x2c\xf5\x04\xee\xd1\x2c\xd2\x19\xce\xd2\x03\xcb\x8b\x34\xcf\x62\x54\x9c\xd2\x5c\xd1\xd2\x5d\x23\xe0\x8d\xd0\x16\x70\x4c\x93\x71\x0c\xe7\xe8\x30\xe0\x7c\xcd\x4a\x65\xde\x92\x7e\xd8\xbc\x12\xdb\x5b\xde\xae\x94\xa9\x59\xed\xbe\xed\xfb\x56\x68\xd2\x2d\xdb\xbe\xc5\xe3\x67\xfd\x71\xe2\x4e\xf3\x89\xd5\x4e\xed\xae\x37\x33\x7e\x21\x03\x15\x72\x86\x43\x4b\xbe\xa8\xe1\x96\xc3\x3a\xa4\x6c\xc8\x01\xad\xf3\xa4\x42\x85\x1c\xc0\x70\x95\xc1\x35\x93\x74\x14\x4b\x66\x2c\x82\x01\xa2\xad\xa2\x54\x48\x04\x1f\x8c\xbf\xbf\x27\xdb\x8f\xe3\xe5\x87\x75\x88\x0f\x12\x8e\x1d\x3d\xb2\xad\x89\x73\xfc\xde\xe7\x0f\xdb\x10\xf7\xf5\x5b\x03\x51\xdd\x42\x29\x1a\x9c\x75\xb7\x0f\x34\x13\x6f\x17\x16\x57\x7f\x53\x4c\xab\xe3\xb6\xbb\x5c\x2d\x29\xcf\xc4\x2e\xed\xb7\x2e\xdd\x95\xdd\xee\xd1\xb7\xd6\xca\x6f\xe2\x57\x02\x75\x8d\x87\x3c\x8e\xf3\x8e\xaf\xf0\x98\x6a\x3a\x0c\xc4\x7c\xdb\x87\x32\x06\x45\x3a\xb0\x28\x1a\xe3\x42\xc1\x13\x68\x81\x52\x18\xc6\x26\x7d\x59\x8c\xe5\xdb\xf3\xdb\xce\x66\x8d\x5a\x0f\xf8\x76\xe8\x93\x9b\x95\x07\xfc\x76\xe6\x51\xd5\x6e\x6e\x9f\x6f\x7e\xf2\x9b\x55\x1d\xd7\xf1\x87\x1b\x35\x18\xeb\x66\xfc\x36\xa8\x40\xd0\x00\xea\x8c\x65\xb3\x02\x23\xf3\x42\x00\x91\x43\x79\xa2\x14\x29\x0e\xce\x68\xba\xa2\xeb\x02\xc1\xff\xab\xf5\x17\x55\x2d\x90\x0c\x92\xc2\x18\x33\xf6\x25\xbc\x74\xde\xec\x4b\x72\x76\x5c\xec\x9c\xcf\x6b\x57\xcb\x50\xe1\xfe\xc8\x29\xc7\x1a\xbc\x1a\x79\x6c\xcc\x8e\x0a\x2b\xb8\xef\x6f\x7b\xa8\x78\x1c\x85\xd9\x34\x91\x8f\x82\x80\x73\x38\x02\xd7\x15\x36\x22\x39\x9a\xd2\x39\x4a\x30\x4d\x44\x93\xac\xa5\xf9\x84\xe2\xf2\x3e\x02\x32\x6d\x87\x2e\x52\x4c\x47\x49\x8d\xe6\x5b\x0c\xe5\x28\xb0\xed\x78\xe6\xb1\x63\x83\x57\x7f\x0c\x1b\xf6\xa8\x5d\xf5\xc2\x89\xc3\xb7\xf4\x18\xf1\x2d\x96\x7f\x71\xaf\x32\x93\x85\x6d\x29\x8a\x26\x31\xf9\xd7\x2f\xeb\x5f\x2d\x5f\x35\x99\x32\xb7\xcc\xb8\x93\xf7\x87\x6f\x07\xde\x89\xbe\x51\xef\x91\x5f\x97\xa8\x5a\x1e\xcf\xfd\xdd\xb3\x38\xea\x43\x99\x86\x6b\x89\x21\x04\x6c\xc4\x23\x5f\xc2\x0d\xdc\x8b\xa8\xc8\x21\x42\xda\x25\x38\x5e\x55\x01\xcf\x49\x16\xcf\x38\x04\x49\x46\x1c\xaf\x22\x36\x74\xde\xed\x91\x3b\x64\xcb\xd6\xe4\x48\xdb\x4c\xbf\x55\xcd\xde\xa6\xcd\xa4\x76\x05\x67\xf8\x37\xdd\xde\xbb\x7a\xcb\xa3\x9a\x8d\xba\x06\xfa\xd7\x5d\x54\x3a\x7e\xc7\x12\xe7\x52\xa4\x4d\xa3\x90\x91\x30\x9d\x16\x59\xc1\xe3\xfd\x80\x95\x5d\x2c\x80\x01\x85\xf4\x28\x20\x78\x52\x51\x28\xca\x60\x59\x8a\x85\x90\x32\x80\x22\xbe\x5b\x34\x13\x17\xae\x1b\xd5\x23\xfb\xa8\xa6\xf3\xca\x4d\x3f\x4e\x66\x37\x76\xd5\x43\x5f\xdc\x9c\x5b\x74\xf5\x67\x13\x4e\x4c\x9e\x5b\xfc\xe8\x83\x89\xf1\xdb\xa0\x3e\x8e\x70\x45\x57\x28\x83\x33\x0c\x9e\x66\x49\x49\x92\x30\x16\xd1\x1c\xa5\xfa\x0e\x11\xe0\x1a\x8e\xe1\x02\x6b\x47\x02\xe9\xd9\x81\xe0\x7a\xa6\x93\xda\xa3\xd9\xdd\xd7\xce\xf7\x75\x40\xff\x5e\x28\xc7\x7b\xdb\x46\x2e\x65\x47\xd6\xe8\xbc\xf2\x73\x58\x04\xdc\x98\xa7\xbe\xc8\x96\x31\xef\xa9\x30\x7e\x21\x8b\xac\x82\x31\x0a\x61\xfb\xa6\x21\x29\x62\xa0\xfb\xa1\xf4\xaf\x22\x09\x70\x45\x24\x7d\x56\xd0\x43\x56\x08\x59\x5f\x8c\x64\x88\x9b\x8a\xed\x09\xda\xdf\xa8\x1a\x29\xca\xe0\x36\x4f\xdb\x33\x7f\x6b\x95\xfe\xfd\x16\x07\xa7\xbe\xc9\xb1\xac\xc3\xe1\x56\x9b\xfa\x2c\x58\xd7\x61\x41\xe5\x56\x3d\xd3\x07\x6d\x87\xc5\x8f\xf4\xc8\xd0\x66\xa4\x41\x47\x46\xa2\xca\x90\x34\x43\xd3\x80\xd7\x15\x9b\x02\xbc\x2d\x23\x19\x60\x40\x23\x90\x6c\x12\x94\x46\x8a\x0c\x72\x31\x82\x55\x54\xcb\x79\xb7\x0c\x9e\xac\xd7\x7c\xd5\x8f\xe5\xbe\x33\xe8\x6c\x19\x4e\xde\x38\x2c\xde\x38\xf2\xa4\x5f\x85\x56\xe7\x37\x16\x19\x74\x6d\xc2\xe5\xaf\x96\x17\x4e\xdb\x80\x3a\x36\xe6\xd7\x73\x0d\xc4\x18\x64\xc4\x1b\xd0\xf1\x14\x42\xf0\x42\x14\xca\x9e\x40\xe1\x0a\xae\xab\xa1\x1b\x29\xb6\x4e\xe3\xa4\x81\x44\x9c\xe2\x74\x36\xd4\x95\xd4\x8e\xa5\x5f\x8b\x1e\x4f\xdf\x2c\xa9\xf7\x9d\x21\xb7\xe8\x76\x53\x5c\xac\x7f\x2e\xed\x60\xd7\xbe\x0d\x13\x5a\x9f\x6f\x94\x23\xa9\xe2\x6e\x78\x36\x45\x0a\xf5\x5e\xb6\xea\x58\xd7\x0a\xc5\x93\xb3\x1f\x6b\xdd\xef\xda\xd5\xcb\xd3\xf4\xfa\x54\x8e\xd7\x17\x87\x9e\xfc\x85\x2c\xdf\x75\xf9\x81\x2f\xd8\xf8\x75\x36\x9e\x10\x09\x50\x83\xbc\x14\xe9\xb6\x47\x33\x1e\x6e\x5a\xb2\xa0\xbb\x52\x60\x20\xc1\x41\x18\x0f\x9d\x10\x8a\xb6\x6f\x44\x8a\xc4\x38\x0e\x54\x65\x8e\x4f\x85\x14\xac\x94\x3e\x36\x6e\x56\xfa\x6b\x15\x3a\x7f\xbb\x77\x59\xed\xe7\xc3\xed\x12\xb3\xdb\x34\x25\x57\x51\x8f\x8a\x94\xfc\x32\xf7\xf5\xa6\x2d\x87\xfe\x97\x92\xc2\xde\x0b\x8f\x37\x57\xad\x55\x7e\x66\xd3\x3d\x73\x0b\x5d\xc2\xbe\x39\xb6\xfc\xbc\x70\x24\x73\x9b\xfa\xb7\xc6\x76\x0f\x3f\xb9\x16\x4d\x49\x09\xf7\xeb\x77\x99\xff\x70\x65\xba\x9c\x83\xcf\x9d\x39\xf3\x7a\x6f\x5e\x63\xcb\xf0\xef\x27\xac\x5c\x27\xbe\xec\x7a\x6b\xcd\xd2\xef\x1b\x24\xa4\x4d\x3f\x24\xb6\x99\x5b\x14\x70\xba\x64\x40\xa0\x8b\x9e\xa1\x99\xa6\xa2\xb0\xb8\xab\x23\x59\xf7\x1c\x09\x33\x48\x41\x77\x64\xd7\xd7\x4c\xa0\x92\xae\x62\xdb\x0e\x50\x38\xf8\x6e\x89\xbd\xd4\xfb\xf8\x86\x9e\x15\x1f\xbc\x77\x7d\xd8\x86\xd7\x6a\xfd\x36\x19\xd8\xb3\x99\x7a\x7e\x36\xe6\x0a\x38\xbd\xfa\xe1\x97\xdd\x2f\x6d\x4e\x9b\x21\x7d\x6c\xd2\x7c\x68\x3b\x91\xe5\xe1\x8e\xee\xd2\xa1\x18\x71\x21\x2d\x3a\x0a\xc0\x68\xd2\xd1\x54\x4d\x34\x25\xc2\x81\x84\xc6\xc0\x90\x92\x30\xf8\xaf\x4e\x5a\xd3\x84\xd8\x05\xa0\xa9\x21\x24\xe5\xcd\xb1\xe5\x8f\x82\xdc\x97\x15\xf3\xd7\xcf\xff\x55\xed\x05\x72\xc9\xbe\x17\x5a\xb5\xdb\x3b\x60\xeb\xc6\x69\x0b\x4f\x56\x8f\xe3\x03\x2d\x49\xa8\x4c\x44\xd0\xbe\x2e\x72\x01\x6e\x50\xbc\xac\xd9\x06\x83\x78\x24\x05\x50\xd0\x65\x81\x32\x58\xd9\xe1\x91\x8e\x7b\x9e\xef\x85\x6a\xc4\x63\x31\x24\x24\x7f\x38\x3d\x36\xff\x93\x09\x6b\x57\x37\x1e\xd3\xe3\x52\xfd\x9a\xc4\x99\x5e\x7b\xee\xf4\xe9\xc9\x1e\x38\x3e\x79\x17\x5f\xb9\xc0\x98\x9e\x69\x7b\x8c\x88\x99\x10\x24\xab\x62\x56\xe0\xd8\x8a\x2d\x90\x24\x09\x5c\x97\x26\x3c\xd2\x92\x04\x84\x9b\x36\x19\x62\x26\x69\xd8\x36\x34\x2d\x9b\xe2\x5d\xc6\x40\xa1\x06\xe4\x54\x54\x86\xaa\x75\x55\xe7\x97\x39\xb3\xa9\x6a\xbf\x8e\x2d\x27\x2e\xe9\x76\x68\xef\x81\xca\x9f\x97\xa9\x72\xf2\x93\xb1\xc7\x12\xea\xf6\x98\x50\xe7\xf4\xe5\xf8\x25\x85\x41\xe9\x5a\xa0\x04\x8c\xe3\xa8\x32\x2d\xfb\x96\x1a\xa8\x2e\x94\x23\xca\x64\x80\x2a\x61\xa6\x4b\x79\x78\x64\x1a\x8c\xa5\x7b\xb8\xcd\x04\x8e\xed\xb2\xec\xbb\x25\xf6\x50\xab\x71\xf7\x7e\xf9\x71\x79\x8b\x81\xd7\x0b\xb7\xaf\xff\x62\xff\xc8\x12\xb9\xe6\xee\x1f\x93\x65\x43\xae\x17\x5f\x4f\x9b\xf8\xd5\x9e\x4f\xb7\xc6\xaf\x4d\x60\xb1\xc0\x89\x20\x14\x0d\x43\xd7\xb9\x40\xa1\x3d\x05\xf8\x38\x60\x01\x63\x79\x4c\xc0\x8a\x8c\x22\x4b\xb6\x1b\x32\x84\x11\x02\x48\x62\xaa\x6e\xe1\x4e\x6c\x4e\xf9\x07\xd9\xd6\x3d\x98\x90\xad\xcf\x7b\x1d\x76\x2f\xb9\x70\xf0\x22\x11\xbe\xd7\xf3\xeb\xdf\x1e\x1e\x9e\x35\xfa\x71\xb9\x25\xe9\x3a\xcb\xd9\xd2\xd6\x1c\xc7\x16\x1a\xb0\x20\x4f\x9b\x44\x60\xca\x7a\x68\xeb\x90\x82\x94\x62\x21\x4f\x81\x92\xc6\x68\x24\xee\xfb\x18\xa9\xfa\xac\x63\xd8\xb4\x66\x44\x18\x14\x90\xc2\x1a\xef\x56\x89\xa9\x49\x25\x89\x6f\x1b\x3e\xde\x75\x75\x7e\xc9\x55\x4c\xed\xb3\xe5\x7f\x79\x31\xe7\xd7\x27\xb7\xff\x28\xb5\x18\x14\x2d\x7e\xa4\xce\xe5\xbe\x71\x14\x2f\x81\x18\xa5\x47\x3c\x49\xdb\xa2\xa0\x00\x8c\x50\x68\xd1\x0a\x75\x96\x64\x94\xc8\xd5\x82\xc0\xf2\x0d\x8a\x13\x31\x9f\x34\x3d\xd9\xa6\x23\x9c\x74\x2d\x90\x4a\x8d\x9f\xbb\x75\xf7\xd6\xe1\x7d\x0b\xb7\x38\x5b\xbb\x79\xf6\x5e\x7b\xeb\xac\x7a\x4b\x9c\xa9\x96\x50\xb7\xe8\xe1\xe9\x8b\x07\x7e\xf6\xe9\xc3\x1d\xf3\x53\x34\xc6\xe5\xc8\x02\x17\x3f\xb8\xb6\xbc\x5e\x77\x4f\xb9\x3e\xf0\xcc\x47\x5d\xf8\x32\x57\x1a\x3d\xbe\x3d\xe1\xe2\x87\x64\xfb\x81\x47\xe6\xe7\x8b\xa3\x81\xb4\xc3\x3b\xae\x88\x33\xaa\x68\x02\x95\x31\x02\x2e\xe0\x4c\x93\x61\x6d\xd7\xa1\x69\xd5\xb6\x29\x06\x13\x7d\x8f\x04\x1e\x94\x22\x86\xa6\x04\x96\x95\x65\xf8\x6e\x4d\x11\x5e\x07\x55\x6e\x54\x9b\xa0\x15\x6b\x31\x28\x73\xa6\x68\x63\x35\x63\xe1\xa2\x71\xb3\xfb\x9c\xac\xfb\xd3\x69\xfe\xd8\xd3\x2a\x39\xfa\xc4\x2f\xdc\x20\xd0\x14\x56\x43\x1e\xcb\xa9\x62\x48\x32\x96\x48\xe0\x0a\x52\x48\xc1\x50\x8c\xc8\xc6\x45\x9e\xa3\x3d\xd7\x07\xbe\xe2\xf9\x90\xb5\x0c\x82\x26\x14\xe2\xdd\x70\x2f\x28\x1b\x89\xfa\x8d\x7f\x18\x7a\xf0\xec\x35\x38\x73\x5b\xb7\x95\xdb\x76\x76\x2d\x99\x49\xcd\x3b\xb9\xe0\xa9\xea\x5d\xbb\xb1\x61\xe7\xf8\x85\x6b\xf2\x81\x40\x04\x1a\xe0\x49\x93\xd7\x22\x99\x0a\x6c\x5b\x10\x19\x96\xc6\x1d\x9f\xc0\x21\xc6\x89\x26\x54\x64\x5c\x51\x58\x3f\x72\xb5\x10\x17\x38\x94\x8a\x46\x77\x52\x9f\xc3\x09\x57\x7f\x18\x56\xa1\xdf\x57\x37\x13\xbe\x9d\x75\xad\x7a\xb5\xd1\x66\x30\xbb\xee\xea\x37\x2d\xd1\xcb\x97\x39\x26\xe5\xb8\x10\xbf\xc6\x98\x10\x69\xcd\x52\xf4\x10\xa7\x2c\xc6\xb6\x6c\x27\xe2\x80\x41\xe2\x01\x86\xdb\x96\x2e\x84\x1a\x64\x4c\x41\xb7\x18\x02\x29\xae\x4b\x19\x00\x79\x81\x9d\x02\x62\xf8\x57\x0e\xe7\xba\x26\x7a\x3b\x5e\xce\x9e\xd5\x6b\xce\xe5\xc2\xfb\x76\x15\x5e\xdf\xa4\x52\xf6\x4b\x47\xf1\x7c\x95\x99\x03\xeb\x7b\xe5\xc9\x9e\x35\x6d\xf3\x81\xd8\x0e\x42\x81\xe4\xb0\x82\x10\x09\x92\x27\x69\x94\x1b\xe0\x1e\x1b\x69\xba\x89\x70\x8a\x72\x23\x1f\xf7\x65\xcf\x66\x43\x56\x63\x1c\x4b\x31\x02\xcb\x30\x98\x58\x72\x3d\xbb\xc6\xbd\xd9\xdb\x73\xeb\xda\x83\x19\xcf\xec\x2f\x5d\xae\x67\xf7\x9a\x52\x81\xd1\x5e\xbe\x2a\x59\x3e\x7d\xff\xc7\x82\xad\xb2\x7c\xf7\x3a\x6d\x12\x60\xb1\xb7\x9c\x82\x48\xd3\x33\x0d\x82\x52\xc4\x00\x31\x78\x20\x87\xa1\xa4\x5a\x0e\xa6\x90\x0e\x0f\x08\x9e\xe3\x2c\x12\x11\xa4\x46\xca\xb4\xc7\x04\x04\x34\xe4\x18\x2a\x07\x0f\x76\xa4\xef\xb0\xe9\xec\xd6\xee\x05\xfa\xde\x9d\x11\x2e\xdf\xbc\xa5\xbe\xbb\x73\x52\xed\xce\xfd\x6f\x9e\x9c\x50\xfb\xda\x09\xf4\xe9\xad\xf8\x9d\x89\xa2\x61\x92\x34\xb4\x18\xc4\x93\x96\x60\x2a\x98\x02\x18\x03\x39\xb8\xcf\x09\x04\xee\xaa\x2e\x1e\xf0\x48\xf7\x59\x5e\x08\x20\x69\x98\x22\xe5\x90\x88\x4b\x45\x5d\xd5\x6a\x3f\xfc\xeb\x5d\x63\x3e\x9e\xb8\xab\xe8\xd5\xdf\xba\x1d\xac\x74\xfc\x5e\x9f\x0c\x2b\x3b\xd4\x69\x73\x7a\xe4\x61\x0b\x75\x09\x5b\xaf\x4e\xf9\x75\xb9\x74\x45\xf7\xb4\x1b\xbc\x61\x5d\xed\x2a\x43\x6b\xb6\x9e\xd9\x78\xe1\x4f\x0f\xb7\xe9\xfa\xb9\x0f\x5e\x96\xcd\xd2\xeb\x5c\x93\x17\xb3\x7b\xa6\x38\xc0\xb0\xeb\x63\x0e\xb0\x13\xeb\x0f\x4c\x78\x90\x33\x77\xb1\x63\xb3\x3a\xdf\x24\xeb\x3f\xdd\x7f\xf9\x93\xa9\x20\xcf\xa6\x6a\x1f\x17\xfa\x75\x5d\xfc\x46\x25\xd0\xc4\x4d\x43\x22\x2d\x43\x43\x26\x1e\x46\x82\x25\x7b\x8a\xa8\xf3\x14\xc2\x69\x3c\xf4\x3d\x03\xd3\xd4\xc8\x94\x64\x3a\xa0\x18\x10\x02\x96\x67\x51\x0c\xa5\x1c\xf9\xc1\xd9\xab\x64\x3a\x79\x55\x8e\x5e\x33\xdb\x2e\x1e\x7b\x2a\x39\xb9\xc7\x84\xca\x60\x7f\xd2\xa6\xbc\x65\x4b\xad\x3d\xbb\x7e\x7c\xfc\x10\xc3\x8c\xc3\x9a\x01\x30\x74\xdf\xc7\x54\x27\x20\x39\x92\x97\x79\x1b\x93\x2d\x51\x91\x68\xe0\xda\x2a\x17\xa9\x44\x44\xfa\x9a\x1f\x84\x38\x2e\x09\x0e\xed\x5a\x6e\xec\xab\xf9\x81\x0e\xb7\xe9\xbd\x89\x05\x7a\xce\xfe\xf9\x44\xdf\x5b\x43\x87\x35\x6e\xb0\xec\xc7\x1f\x96\xf6\x1c\x5b\xa5\x70\x83\x55\x5f\x7c\xb6\xbc\x68\xbb\xf8\x85\x2c\x03\xcf\xb1\x74\xd3\xd6\x5c\x17\xd3\x78\xe4\xdb\x0e\xc3\xab\xac\xab\x02\xca\xb2\x70\x3c\xa4\x35\x92\x03\x38\xc4\x23\x93\xc5\x11\x19\x8a\x46\xc0\xd2\xef\x90\x8e\xff\xe9\x11\x2a\xb1\x49\xfa\x76\xe9\xfe\x8b\x74\x3c\xd0\x59\xd0\xb1\x47\xa3\x1f\x0f\x9d\x7b\xaa\x0c\x3c\x1c\xbe\x32\x76\xb4\x0b\xc0\xe9\x1f\xee\xb5\x7a\x34\x7e\x70\x83\x82\x07\xe6\xd4\x8f\x23\x18\x4a\x13\x23\x93\x37\x03\x55\x09\x59\xc5\x0d\x03\x42\x0b\x58\x4d\x73\x23\x47\x57\x48\x5d\xc5\x80\xcd\xc8\x8c\x4b\x2b\x2c\xaf\xe0\x81\xa3\x4b\x1a\x4c\xcd\xfc\x66\xfe\x90\xad\x55\xc0\x09\xb2\x6f\xf6\x5a\xd5\xfe\xac\x69\xcc\x1f\x99\xe1\xc9\xb3\x19\x45\xfb\xdf\xec\x64\x5c\x4c\x3a\x95\xb1\x52\xa5\x38\xca\x7f\x07\x64\xc0\xb1\x01\x11\x08\x30\xa4\xf8\xc0\xd6\x34\x8f\x33\x21\xc5\xf1\x1a\x66\x40\x32\x90\x68\xe4\x02\x8a\xb0\x6d\x5a\x09\x28\xc2\x82\xb4\x00\xd5\x54\x4e\xb2\xd6\x19\x6a\x7d\x95\xfc\x47\x97\x35\xbd\x0b\x26\x34\x2d\xb8\xaa\xc2\xb7\x1f\x4f\x28\x9c\xe9\x90\xb1\xa3\x8f\x38\xa3\xdb\x7b\x07\xcb\x4e\x78\x12\xbf\x55\x26\x3d\x81\x0d\x4c\xd1\x0b\xf0\x48\x63\x6c\x42\x95\x31\x4f\xf5\x5c\xce\xd6\x79\xcd\x10\x14\xeb\x5f\xd7\x90\x88\x67\x79\x9e\xb1\x2d\xdf\xa1\xfc\x80\xd3\xf8\xd8\x21\xb3\xa7\x2f\x6f\x7c\xd2\xff\xd6\x27\xf3\x07\x55\x49\xee\x76\x61\x17\xea\x5f\xfa\x40\x17\xec\xc3\xc3\x19\x0f\xed\xeb\x71\x65\x4c\xa1\x31\x5f\xc5\xef\xf0\x15\x2c\x57\x96\x5c\x64\xf8\xde\xbf\xae\x75\x2e\x27\x70\x2a\x1d\x58\xb4\x42\xfb\xb4\x81\x11\x84\xc7\x20\x33\x50\x60\x84\x3c\x08\x10\x17\x71\x88\xff\x9b\xa7\x62\x8a\x90\x2b\x57\x78\xd9\xbc\x7f\x79\x15\x2e\x6e\x7e\x61\x58\x8f\xd5\xcf\xbe\xc8\x3d\xfc\x49\x89\x67\x3b\xd7\xee\x7d\xd1\x26\x63\xe5\x2e\xbb\x36\xa6\x4d\x55\x26\x66\x3d\xa4\x03\x2d\xa0\x58\xd2\xe6\x84\xc0\x10\x38\x9d\x33\x28\x1d\x92\xa2\x14\x22\x1c\x72\x20\xe0\x3c\xcb\x53\x0d\x02\x31\x01\xe5\x06\xb6\xe9\xcb\x84\x13\xaa\xef\xe0\xb7\xfe\xe9\x11\x38\xb1\x71\xe6\x0c\x1f\xa7\xc4\x6f\x35\xeb\xb8\x3a\x73\xce\x92\x59\x6a\x7f\x50\xc0\xee\x7e\xab\xca\xd9\x83\x79\x0e\x2d\xad\x36\xaa\xea\x94\x3d\xbf\x7c\x73\xca\xda\x39\xb0\xdc\xc8\x38\x32\xd6\x3c\x0f\xb0\x11\xce\x3a\x3c\x46\x38\x08\x1a\x6c\x80\x18\xc7\x34\x68\x2f\xa2\x19\xcf\x40\x84\x66\xd9\xaa\x20\x6a\x18\xb4\xa2\x08\xd2\x21\x41\xe1\x20\xf6\x7f\x52\xef\xe3\xc2\x55\x6f\x16\x4a\xf7\x3d\xd8\xfe\x5e\xce\xea\x8d\x5b\x52\x8d\xbb\x4d\xaf\xfe\xdb\x8a\x91\xdb\xda\x9d\xa9\x92\xe9\x58\xa1\x85\xa7\xe3\xc8\x86\xd5\x68\x39\xe4\x43\xe8\x19\xac\xe4\x7b\x18\x25\x63\xa2\xc4\x20\xa4\x51\x12\x16\x10\x9c\xed\xdb\x02\x2b\x86\x80\x22\x34\xc6\x15\x0d\xde\x60\x1c\x2c\x15\xdc\xcd\xa3\x0f\x69\xd4\x6c\xc7\xcb\xaf\xf7\x16\x28\x31\xba\x4e\xad\x2b\xd5\x1a\x1c\xeb\x4b\x7c\x5d\x72\xf9\xce\x45\x6f\x9d\x22\x79\x27\x1f\x8c\xa3\x69\x89\xe6\xe9\xb8\x23\x04\xb6\x1d\xe1\x51\xe0\x6b\x12\x2d\x9b\xaa\x1f\x40\x99\x10\xbd\xc8\x0b\x70\x19\x53\x4c\x4a\x72\x75\x2a\xd2\x2c\x12\xd7\x55\x9b\xc3\x53\x81\x58\x78\x1f\x4f\xec\x5e\xe7\xcf\xdf\xf5\xf1\xb0\x91\xf6\xe7\x95\x5e\x97\x2e\xb3\xc9\x6b\xaf\x6d\xd6\xbb\xc1\x5d\xa7\x2b\xfc\xba\xb0\x46\xfc\xec\x41\x01\xab\xb1\x12\x65\x30\x8c\x26\x47\x1c\xee\x53\xb6\x6f\x08\x92\x19\x04\x82\xe6\x4b\x64\x00\xfc\xc8\x8d\x7c\x37\x50\x28\x99\xa6\x03\x9a\x84\x81\xa1\xfd\x8d\x86\xf6\x6f\xde\xc5\x3f\x01\x1a\x12\x9b\x64\x48\x97\x6e\x44\xca\xd4\x7f\x7e\xfb\x8a\xcc\xfc\xfa\xe2\x87\x76\x3f\x27\x50\x1b\x5e\x8c\xbb\xbf\xf5\x75\x8b\x17\x73\xb6\x0f\x29\xb7\x92\xf0\x73\x97\x4c\x97\x27\x7e\x7c\x2a\xe0\x11\xb8\xef\x8b\x8a\x01\x38\x35\x08\x44\x5c\xf2\x49\xdb\x0f\x2c\x5b\x54\x2d\xde\x34\x68\x57\xd0\x74\x03\xd7\x34\x11\x2a\xac\x17\x51\x12\x49\x92\x4e\x2a\x56\x55\x2d\x96\xf5\x9c\x53\x6f\xf8\xa0\x79\x5f\x75\x1d\x1f\x49\x55\xb3\xf6\xda\xf6\x99\xd3\xec\xfb\x3b\xe3\x0f\x4f\xfc\x7e\x53\x99\x52\xdf\xdd\x48\x1b\x89\x21\xf6\x04\x87\x95\x0d\xc2\x41\xb6\x65\x72\x80\x12\x65\x1f\x11\x02\x6e\xca\x00\x67\x45\x91\x0d\x04\x26\xf4\x43\x56\x34\x19\x52\xd7\x1d\x8c\x65\xbd\x20\xb4\x2d\x3c\x76\xc8\x49\xad\x8f\x1c\xcc\x3f\xf4\x22\xf1\x72\xc7\x52\xfe\xfa\x58\x2f\xeb\xd8\x37\x9d\xa4\x32\xeb\x7e\x3c\xfa\xeb\x75\x34\xb1\xf2\xf1\x43\x25\xe2\x17\xb2\x12\x45\xb8\x89\xbb\x84\xef\xd9\x32\x90\x79\x17\xa3\x3d\x0f\x27\x4d\xdf\x81\x12\xce\x61\x0e\xeb\x19\xae\xcc\xb9\xa4\x21\x03\x18\x69\x4a\x24\x68\x56\x2a\xef\x85\xb9\x47\x74\x2e\x9b\x2d\x6f\x99\xcc\x3f\x05\x47\x76\xfe\xf4\xc9\xc0\xb1\xc4\xd6\xdc\x9f\xa2\xbc\x8b\x5b\x4e\xed\x8f\x32\xbf\x3a\x3d\x29\x29\x8e\x3a\x0c\x11\x09\x6d\xdf\xa4\x80\x25\x79\x96\x67\x68\xb6\x0b\x55\x86\x24\x28\xc5\x56\x0c\x40\x04\x91\xe2\x44\x16\x8b\xe9\xc8\xa3\xb9\x80\x67\x6c\xcf\xb6\xb1\x77\x5a\xb4\x7f\x42\xe7\x24\x36\xc9\x94\x2e\xff\xe0\x94\x2d\x5a\xe7\xa2\x1b\xab\x9e\x2f\x5a\x65\xe5\x96\x6c\x79\xba\x9c\xdf\xb2\xa9\xcb\x8f\xc1\x82\x2b\x59\x89\x6b\xfd\x7a\x39\x5f\x97\xce\x5f\x73\xcb\xfc\x38\xbe\xc0\x21\xc8\x07\x24\xd2\x59\x00\x84\x28\xd2\x44\xa4\x88\x8a\x23\xb8\x41\xa8\x6a\x8a\x46\x51\x1a\xa3\x68\x9e\xc5\x53\x84\x2d\x45\x92\x0c\x03\x4e\x07\x7a\xec\xe6\xa1\xbc\xff\xd0\x5b\xb0\x71\x57\xfb\x76\xe8\x29\x55\x7b\xf3\xc6\x86\xaa\x97\x6f\x5a\x4b\xfc\xd7\x15\x1b\xb3\xd5\x5c\xb8\xac\x58\xc1\xb4\x79\xe0\xc4\xfc\x53\x48\xa4\xcb\xb4\xab\x99\xa1\xae\x4a\xba\xea\x4b\xba\xc7\x93\x98\x4f\x20\x40\x69\x8e\x02\xf5\x80\x53\x4c\x4d\x76\x7c\x03\x13\x61\xc4\x45\x0a\xa7\x86\xa9\x70\x95\x2f\xdc\x9d\x5b\x54\x9c\xda\xcc\xa9\x7d\xa3\xc1\xc9\xf9\x44\x9d\xba\x6c\x53\x73\x4f\x9d\xba\xb7\x37\x96\xdc\x31\xdb\xa9\x53\xf7\x6e\xda\x14\xf4\x62\x73\xee\xed\x40\x22\x1c\x12\x13\x5c\x33\xd0\x4d\x9e\x47\x0a\xc7\x43\xcd\x66\x5c\x57\xb3\x22\xda\x25\x0c\x9b\xa6\xa1\x0d\x35\x57\x72\x0d\xdf\x26\x04\x0f\x57\x63\x57\xfd\x81\x56\xef\xdb\x43\x0a\xe4\x7c\x9c\x71\xda\x8e\x8c\xf3\x9b\xae\xef\xa8\x6c\xfd\x76\x72\x19\x76\x48\x81\xa7\xd9\xf7\x95\xda\xec\x6f\x4b\xdb\x41\x15\x3b\xf5\x3d\xc5\x70\x39\x27\x74\x01\x07\x5d\x1e\x13\x59\x87\xd4\x22\xdd\x41\xbc\x2f\x68\x84\x47\x52\x3c\xc2\x91\x87\x11\x16\x70\x22\xdf\x21\x0d\x82\x63\x89\xd8\xab\xdc\xa8\x8c\x97\xeb\x59\x9f\xdd\xcb\x5e\x2d\xaa\xbc\x77\xe6\xd8\xe2\x5a\xf7\x4a\xe9\x95\x87\xc5\xba\x56\x5e\x32\x6e\x61\xe5\x9c\xee\xb7\x30\x7e\x8d\xb0\x29\x42\x9e\x93\x00\xb4\x44\x4b\x0b\x43\xce\x41\x2c\x07\x24\x9d\x52\x4d\x5c\x0f\x28\x01\x32\x01\x42\xbe\xcf\x32\x92\xec\xbb\x38\xaf\x88\x36\x07\xd4\xff\xe4\xf2\xbf\x77\xeb\x3f\xa1\xe3\x12\x9b\x64\xfc\xe4\xe3\xff\x72\xae\x2c\xb3\xdc\x7e\xff\xe2\x64\xae\x45\xa9\xba\xa3\x32\xf7\x3c\x51\x6d\x8c\x5c\xf6\x44\xe7\x1b\xdd\xe0\x57\xe7\x98\x0f\x06\xf6\xbe\x96\x18\xbf\xaa\x0f\x1c\x91\xd0\x79\xd9\x15\x49\xe0\x04\x16\xc1\x03\xd9\x14\x82\x00\x18\x11\x26\x0a\x8e\x2c\x50\x61\x44\xba\x90\x41\x12\xab\x19\x94\x04\x90\x01\x00\x4a\x45\x17\xe6\xbd\x7b\xd5\x8e\xe5\x3d\xb2\xe4\x20\xde\xe2\xe1\xb8\xdc\xf6\xee\xdd\x39\x26\x31\x39\xdf\x0e\xfd\x2a\x47\xc1\x95\x85\xfa\xd6\x38\x4f\xbd\x8e\xe3\x9c\x4d\x10\x2d\x9a\x8d\x1c\x45\xb1\x28\xc2\x50\x68\xcf\x30\x25\xc9\xe1\xe9\x7f\x5d\xaa\x02\x9f\xc2\x79\x1e\x07\x2e\x54\x09\x91\x27\x03\x59\x70\x60\x10\x8a\xa9\x28\x0b\xec\x7e\x30\x2d\xdf\xdd\x9f\x3f\xf8\x31\x39\xc7\x8e\xc5\xe5\xcc\xf2\x35\x13\x4b\x1c\x98\x38\x28\x77\x16\x24\x54\x1b\x9c\xbf\xde\xa2\xfc\xf1\xdb\xad\x9a\xce\x84\x80\x72\x4d\x0d\xa3\x25\xda\x02\x40\xd4\x28\x56\x73\x49\x26\x52\x00\xa9\xfb\xba\x82\x13\xa6\xa1\x92\x16\x03\x49\xde\x64\x44\x88\xb9\x8a\x13\x7b\xb7\x1e\xcf\x65\x9c\x68\xf2\xe4\xc4\x80\x5c\x47\xdf\xef\xb9\x72\x52\xf3\x23\x6b\x86\x2f\xfc\x7d\xcd\xad\x7b\xcf\xe4\xa2\x4b\x42\x35\xe3\xd7\x43\xe2\x77\xb6\x22\xce\x82\x8e\x04\x1c\x04\x91\x25\x9b\x8e\xc7\xd1\xd0\xe3\x7d\xa0\x78\xb4\x81\x59\x46\x28\xb0\xae\x2a\x29\xb2\xaf\x1a\x38\xf4\xb0\x50\x94\x18\x9b\x8a\xbd\xca\x2f\x7a\xad\xaa\xd2\xb4\x5c\xff\x25\xea\xd4\x7d\x19\x4a\x16\x2c\xe9\x2e\x6c\xd1\xec\x83\x09\xc6\x15\xc3\x39\xa4\x3e\x03\xe5\x5b\x4f\x8a\xdf\xc9\xa3\x47\xb8\x45\x84\xa4\xc2\x02\x83\x20\x59\x99\x0f\x0c\xcb\xc4\x2c\x3e\x8c\x10\x0d\x79\x40\xe3\x82\x43\xea\x38\xe6\x48\x30\xb2\x7d\x9e\xd6\x15\x16\xfd\x75\xf2\x5c\xca\xfa\xbf\x01\xb9\x12\x9b\xa4\xff\x78\xf0\x82\xa1\x29\x7e\xe1\x1c\xa9\xc9\x9c\xdf\x5f\x3f\x6c\x3b\x25\xdb\x87\xa3\x2f\x9d\xc9\x30\xb3\xdf\xb9\x32\xe8\xa3\xaa\xb3\xbe\xcd\x5a\x17\xbb\x5a\xa1\x73\x71\x21\x7e\xbf\x10\x60\xa2\xc5\x13\xac\xa5\xf2\x9e\x48\xc9\x12\xa6\x1a\x3c\x26\x9a\x4e\x24\x23\x52\x08\x43\xd6\x50\x48\x5e\x09\x3c\x9f\x81\x2a\x09\x59\x84\x5b\x10\x93\x63\x9f\xad\x27\xbe\x2b\x54\xb0\x59\x99\x28\xc3\x91\x33\xbf\x8c\xdf\x3f\x56\x7a\x2d\xbc\x64\xd0\xfe\x87\xed\x2f\x9d\xbe\x51\x5f\xfc\xe8\xf5\xa4\xb4\x39\x75\xc7\xdc\xad\xae\xaf\x59\x98\xa4\x9b\x2c\x81\xa9\x40\x33\x64\x2b\x20\x22\x5e\x95\x70\x56\x56\x41\x68\x39\x1a\x83\x7b\x8e\xc1\x0b\x3e\x83\x80\x06\x1c\x2f\xe4\x41\x2a\x63\xb4\xee\x99\x67\x16\x4d\xec\x50\x74\xc9\xfc\xd3\x99\xce\xbc\xe9\x8f\xfe\x58\xdd\xed\xf3\x16\xb9\x5a\xe7\x1d\xb4\xae\x76\xa9\x0c\xc3\x08\x21\x6d\xa6\xad\x31\x6f\x54\x2e\xa7\x78\x38\x26\x46\x8a\xad\x9b\x06\x25\xb2\x0c\x25\xeb\x11\x83\x38\x9e\x84\x6e\x80\x39\x1c\xc1\xda\x00\x77\x1d\x9e\x13\x11\xe4\x43\x56\xf2\x01\x11\x7b\xb7\x56\x68\xd9\xf4\x7c\xf1\x0b\xe4\xab\x12\x93\x8b\x0c\x7c\x70\xb3\x0d\xdf\xe0\x65\xfe\xeb\xcd\x6f\x16\xee\x5a\xcf\xba\x3c\x22\xf9\xc8\xfb\xf1\xf3\x99\x05\x96\xe7\x59\x8c\x07\x0d\x47\x02\x86\x2a\x01\x06\x8f\x58\x12\x90\x61\x48\xf9\x04\x72\x34\x18\x99\x34\x61\xc8\x1a\x47\xb1\x90\xd1\x1d\xd2\x67\xc8\x28\x15\x1c\xd1\xea\x86\x27\x0e\x96\xd1\x9f\xdc\xf8\xe6\xdb\x76\x97\xce\x1e\xb9\x34\xa2\xf7\x86\xbd\xcf\xcd\x0a\x89\x2f\x4e\x75\xee\x72\x86\x59\xf6\xa2\x7c\x1c\x9f\x60\x61\x44\xe1\x24\xe5\xeb\x02\x4d\x40\x00\x91\xed\x21\x46\x0d\x0c\x5b\xe7\x7c\x8a\xe1\x14\x28\x12\x28\x52\xb0\xc8\xc0\x90\xcc\xb2\x2e\x8b\x31\x8c\x98\xca\x5c\x4c\xbc\xf2\x13\xde\xbb\xf7\x65\xef\x55\xe5\x5d\x45\x6b\xd4\x2c\xd5\x68\x69\x9d\x65\xe5\xcb\xdf\x2d\x22\x67\x3e\x5a\xfc\x76\xce\x26\x71\xf4\x4a\xc4\x55\x93\xc3\x0c\x3a\x50\x24\x97\x76\x31\x4b\x74\x38\x20\xda\x12\x88\x3c\x11\x69\x24\x07\x02\xe0\xcb\xb6\x4e\xaa\x6c\xa0\x71\x84\x8d\x18\x5c\xb7\xfe\x72\x9d\x1f\x91\xfd\x7f\x83\xf9\x25\x36\x49\x9f\xae\x60\xbe\x94\xed\xc0\xfd\x83\xd9\x13\x4e\xa5\xfb\x35\xf3\x9f\x56\x8b\xe4\xb6\x4b\x86\x36\x6c\x52\x33\xb7\xbe\xfe\xde\xfa\xa9\xaf\xdb\xe4\xd8\x50\xbc\xe4\xc5\x38\x8a\x38\x18\x82\xab\x4b\xa6\x4a\xbb\x00\x61\xa1\xc7\x73\x30\x62\x02\x86\xc2\x30\x03\x8b\x02\xdb\x0c\x6d\x5c\x51\x7d\x15\x97\x18\xcb\x60\x04\x57\xf0\x5c\x45\x4b\xe5\x6c\x15\x27\x97\x44\x57\x0a\x65\x3f\x37\xe7\x75\xad\x7b\xfb\xdf\x9b\x3a\xbe\xdb\xf4\x63\x33\xf6\x5c\xfe\x74\x17\xfb\xfc\xd5\xb4\xb1\xeb\xae\x7d\x16\xc7\x87\x66\x53\x95\x80\x8f\x89\x18\x25\x1a\x50\x35\x78\x42\x8f\xb8\x10\xd1\x9a\x47\x09\x9a\x8e\x4b\x81\x4d\x49\x32\x46\x00\x9a\x24\xcd\x90\x51\x38\x55\xc2\x53\xc9\xa3\x5d\x4d\x5f\xdf\xf9\xb4\xe6\x82\xef\x6a\xf5\x3e\xb7\xbe\x6c\xeb\x23\x27\x7a\x24\x60\xcf\x97\x4a\xac\x32\x31\xdf\x81\xbe\x77\x36\x7d\x98\x36\x71\xe6\x98\xab\x1c\x78\x6a\x44\x11\x82\xe1\x30\x22\xae\xc8\x12\x86\x68\x5b\xd2\x64\x5b\x26\x08\xce\x31\x48\x9b\xb0\x04\x0d\xe1\x12\x25\xa8\x24\x0d\x59\x1d\x04\xae\xa3\xa6\x42\x95\x4a\x37\xfc\xe4\xdb\x3b\x5b\x57\xef\x6c\x7b\xac\x36\xdd\x20\x4f\xe2\x17\xdf\xa3\x72\x4c\x9e\x84\x5f\x27\x7b\xbf\x0f\xcf\x7e\x24\x8d\x83\xf7\x98\xa9\x2f\xb1\x86\x26\x62\x38\x61\x30\xb6\xe1\x10\x9e\xa9\x13\x1c\x67\x53\x2a\xa1\x47\xa6\x29\x32\x91\x89\xb1\x28\x22\x74\xd6\xa2\x43\x89\xd5\x7c\x28\xb1\x7f\x23\x36\xfe\x27\xdc\xab\x59\xa7\x8c\x6e\x38\xb1\xfb\xef\xcf\x8a\x3e\xcc\x11\x3c\x79\xff\xdc\x50\x7b\xec\x88\x4c\x39\xc8\xcd\xbb\x6a\x0f\x5e\x7b\xa0\x56\xf1\xb4\xf9\x90\xc4\x66\x76\xb1\x51\x80\x04\x4e\x96\x80\x68\x12\x32\x4f\x0a\x24\xe6\x92\x1c\x12\x78\x4a\xc2\x94\x30\x24\x01\x54\x0d\x51\x14\xf4\x30\xa2\x79\x5f\xb4\x34\xda\x12\x62\x23\x68\xfc\xed\x73\x97\x26\xb4\xa4\x1a\x83\x52\xd7\xd6\xe5\x0c\x66\x55\x3b\xd5\xb5\xa0\x6d\xe4\xd6\xdb\xb4\xe4\x32\x95\xe8\x7c\xe8\xcb\xb4\x3d\xde\xc4\xb6\xc7\x63\x42\xcf\xb2\x49\xc9\x55\x24\xd3\xc5\x00\xee\x02\x9f\x94\x54\xc1\x95\x30\xc6\xa7\x48\x93\x34\x71\xd1\x60\x2c\x2f\xe4\x55\xcc\xb2\x70\x5f\x0e\xe5\x18\x28\xb0\x65\xd3\x93\xcf\xec\x09\xfe\x18\x5d\x5c\x89\x86\x5b\xc9\xbf\xb6\xff\xac\xfc\x37\x93\xf4\x69\x8d\x60\x9e\x1d\xfb\x37\x4f\x9e\xbc\xf2\x48\xfc\x72\x18\x40\x82\x64\x91\x05\x74\x4c\xd5\x45\xdb\x97\x0c\x9e\xe4\x05\x57\x0d\x15\x06\x49\x14\xab\xa8\x62\x44\xab\xd0\xa1\x29\xcc\xe2\xc2\x00\xd9\x36\x87\xfd\x75\xae\xff\x7b\x7a\xfd\x4f\xf0\xc4\xc4\xc6\xdd\x06\xff\x97\x74\x4a\xc1\xed\xea\xf8\x55\xba\x3e\xa5\x7a\xfa\xf0\xd8\x99\x7b\x27\xd6\x56\x18\xb7\xe7\xe3\x9a\x59\x86\xb6\xd9\xb6\xe9\x7a\x8e\x11\xd4\xa7\x65\xe3\x38\x14\xe0\x03\x52\x42\x90\x95\x31\x4b\x73\x54\xd6\xe4\x70\x86\x61\x30\x89\x65\x7c\xde\x30\xa0\xaf\xb9\x2a\x2f\x6a\x18\xad\x42\x43\xa2\x1d\xdf\xd6\xa4\xbf\x21\x9a\x52\x84\x7c\x6c\xd0\x9b\x16\x63\x5f\xe9\x09\xf9\x0f\xb5\xbc\xe9\x54\xaa\x3e\xe8\x49\xc2\xe9\xf3\xf3\x36\x3f\xde\x59\x6f\x48\xee\xf2\xb5\x47\x25\xa4\x0d\x57\x19\x5b\x34\xdb\x22\x01\xcf\x85\x0c\x67\x02\xda\xa7\x6d\x4f\x26\x0d\x52\xe7\x3d\x4c\xd7\x31\xd3\xa1\x04\x2d\xb2\x58\xdd\xc0\x81\x80\xf1\x06\x61\xab\xa1\x86\x80\x1f\xbb\x71\x29\x58\xf7\x91\xfc\x53\xf7\xab\x2f\x26\x8c\x5d\xb8\xe5\xe1\xa7\x67\xfb\x0e\x1c\x7a\x3d\xa9\xfd\xd5\xe0\xe4\xc8\xb2\xfb\x77\xee\xdc\x98\x77\x5f\x1c\x11\x08\xae\xa6\x00\x57\x93\x64\x16\x99\x9a\xe4\x07\x2a\x8b\xb3\xb8\x28\x92\xac\x45\x07\x40\xf2\x45\x4e\x0e\x3d\x48\x7b\x4c\x20\x13\x1e\x29\x61\xaa\xc6\x30\xb1\xab\xf7\xd1\xbc\xa5\x2b\xe6\x58\xd3\xaa\xe2\xd0\xd2\x49\x39\xef\x7f\xf9\x6a\x4b\x3a\x62\xd4\x0f\x5b\x77\xbe\x97\x94\xb7\xcd\x9d\x2e\x59\xc6\xad\x4f\x9b\x4a\x47\xcc\xda\x82\x3b\xbc\x46\x71\x81\x16\x09\xa1\xcf\x58\x21\xe7\x8b\x38\xe6\x45\x0a\xab\x05\x2c\x26\xc9\x38\x1d\x5a\x11\x92\x30\xca\x76\x30\x43\xe1\x58\xc8\x2b\xd8\x5f\x92\xbc\x13\xb2\xff\x6f\xb8\xd5\xc4\x26\x5c\xba\x84\x39\x29\xa5\x53\x1a\xe6\x6f\x7d\x31\x31\x9a\x73\xe0\x78\x9e\x74\xeb\x67\x5c\x2b\x5d\xf9\xe8\xa4\x0a\x0f\xbe\xd9\x5d\xbf\x4b\xf6\xaa\xd2\xf8\xa3\x39\x1e\xa7\xcd\x74\x37\xf6\xf9\xc4\x4a\x9a\xcb\x4a\x98\x6d\x03\xcb\x17\x19\x9b\xc2\x1d\x0c\x83\x9a\x60\xcb\x91\x64\xaa\x80\x66\x64\x5d\xd6\x68\x24\xd2\x96\xec\x87\x0c\xce\x53\x56\x2a\x43\x81\x61\x1b\x92\xbf\xeb\xd6\x75\xfe\x15\xe1\x70\xd5\xe6\x9b\xf3\xe4\x5c\x50\xf7\x83\x47\x9f\x7b\xbb\x6e\x15\x99\x39\xa0\xe7\xe1\xa1\xbf\xec\x8a\x5f\xc8\x00\xd3\x02\x8a\x24\x74\xdf\x74\x3d\x8e\x11\xf0\xc0\x56\x15\xd2\xc4\x28\xc0\x78\x8a\xeb\x1b\x9e\x6f\xe8\x11\xed\xfb\x96\x0c\x09\x2f\x52\x7d\x15\x79\xff\x87\xa1\x7d\x37\xe4\x36\x57\xea\x7c\x57\xe3\x66\x86\xa2\x93\xab\x5d\x28\x52\xb6\xf2\xd0\x7d\x03\xe8\x22\xfd\x96\xac\x7c\xef\x9a\xf6\xe5\xa9\xcd\x4f\x4b\xc1\x28\x8e\x84\xa9\x88\x23\x14\xcb\x60\xec\xc8\xe7\x1d\x48\x53\x8e\xc8\x03\x83\x31\x6d\xd9\x13\xa1\xaa\x41\x59\x64\x99\xc0\x55\x25\x8c\xa1\x42\x89\xb2\x4d\x9a\xe0\xe4\xd8\xbb\xb5\xdd\xb2\xee\xdd\x73\x5b\xd5\x2a\xd6\x84\xf3\x2b\x89\x77\xf2\x9e\x69\xd9\x70\x77\xe9\x6f\xab\xff\x9e\x5c\xad\xfe\xe0\xe7\xdf\x34\xe8\x79\x3c\x8e\x89\x11\x69\xb8\x05\x59\x4a\x0a\x43\x11\xd0\x9c\x6b\x88\xa6\xc6\xe1\x9a\x2b\xa8\x81\xc9\x40\xce\x85\xae\x43\xb8\x16\x0a\x38\x9e\xf4\x09\x4e\x85\x18\xc6\xa5\xa6\x22\x9c\x63\xa1\x00\xdf\x64\x7b\xd4\x32\xd3\xaf\xb9\x0a\xbc\x2a\x1f\x9d\xba\xcc\x6d\x58\x76\xae\x7c\x95\x9e\x9f\x3d\xe2\x8a\xb6\x49\x9b\x58\x6c\x6c\x21\x76\x2f\x42\x5e\xe8\x2a\x5e\x84\x14\x8a\x31\x04\xd2\xc6\x43\x57\x17\x42\x4a\x02\x22\x1f\x8a\xac\x6a\xb2\xbc\x62\xca\x86\x04\x05\x03\xe3\x28\x40\xcb\xa9\x3c\x0c\x9f\x6d\x71\xbf\x42\x8f\xa7\x6f\xec\x7e\xd7\x8f\xa6\x3b\x5a\xf8\xe1\xe8\x3b\xf3\xeb\x3c\xef\x76\x64\xd2\x92\xab\xd7\xba\x7d\x5e\xb9\xc6\xfa\xb4\x19\xe5\xc6\x76\x9d\x0d\x78\x32\x70\x65\x52\x76\x49\xcf\xd5\xa1\x89\x01\x5d\xb3\x75\x40\x10\xbe\x26\xe9\x04\xa0\x80\xe3\xfa\x24\x50\x02\xdb\x94\x30\xd5\x73\x70\x41\x4b\x45\x3e\x65\xf1\x9a\xb0\xf0\xde\x52\x7b\x6e\x0f\x9a\x36\xc4\xcf\x9c\x27\xff\x8d\x6b\x9f\x27\x6c\xdd\x26\xec\x89\x88\x3e\x95\x1a\x9f\x2e\xaf\x67\x8b\x5f\x4d\x14\x5d\x89\x0c\x65\x8b\xe2\x2c\xc2\x36\x48\x5b\xc2\x04\x5d\x57\x02\x4f\x20\x15\xd7\x20\x0c\xdd\xa5\x79\xdf\x26\x04\x51\xe0\x45\xdf\x0b\x35\xd6\xd4\x98\xbf\xb4\x48\xfe\xad\x1f\xf8\x4f\xe8\xfc\xc4\xc6\x19\x33\xa5\x4b\xa9\x1f\xf8\xdb\xd0\xdf\x32\x1e\x1f\x95\xf3\x6b\xa7\x66\x5f\x63\xd4\xc1\x03\xdf\xe5\xba\xfb\x79\xc3\xb9\xaf\x0f\x9f\x5b\xd4\xa2\x67\xa6\x75\x4f\xef\xc4\x31\xf3\xed\x48\xb2\x5c\xa8\x72\xa6\x24\xf8\x8a\xa2\xc8\xb8\xac\x45\x98\x6e\xb1\x84\xe1\x6b\x2a\xe2\x2c\x26\x30\x25\x81\xd4\x3c\x12\x01\x09\xf7\x02\xd1\xc5\x53\xf1\xcd\xba\x31\xf7\x7a\xb9\x05\xd6\x54\xfa\xeb\x46\xdb\x4b\x5b\x35\x3f\x18\xde\x69\x65\x36\xb8\x8c\x5e\x3c\xe0\x52\xff\xe7\x65\x72\x7f\x37\x26\x7e\x78\x2b\xc6\xd2\x35\x91\xc2\x28\x4a\xd0\x45\x5a\x66\x75\x93\x97\x69\xd2\xa0\x23\x03\x91\x50\x20\x30\xdc\xe3\x42\xce\xb4\x58\xcf\xa7\x09\xcc\x51\x6c\xc2\x0a\x81\x14\xbb\x07\x6e\x5c\x65\xfe\xec\xfd\xfb\x0e\x47\x7b\xa7\x36\x7e\xe8\x17\xcc\x92\xe3\xfa\x2f\x2f\xf9\xec\x3d\x8f\x0f\xcd\x59\xb9\xc5\xea\xee\xdf\x2c\x2e\x12\xc7\x39\x69\x64\x7b\xa6\x49\x79\x84\x6d\xb2\x1c\x70\xa1\x80\x85\x3e\x63\x7b\x11\xee\x9b\x1c\x85\x8b\x3a\xe7\x00\x15\x77\xa1\x1b\x46\x0c\x30\x75\xe4\xab\x5c\x0c\xb2\xd9\xbc\xd9\x53\x5e\xe6\x3b\xd4\x62\xa4\xbc\x79\xe0\xce\x0c\x65\xea\x34\x53\x82\x85\x1f\x7f\xff\x8d\x9a\x70\xb6\x4f\xd5\x96\xc7\x95\x59\x1d\xe3\xb7\xc2\x9c\xc7\x50\xa2\x6b\xc8\x12\xc0\x9c\x30\xc0\x54\x47\x35\x2c\x56\x10\x29\xc9\x62\x25\x27\xc2\x48\xc1\x04\x4e\xe8\x93\x98\x87\x87\x18\x34\x2d\x8b\xf9\x9b\xa7\xe4\xbf\x3b\x81\x7f\x42\x37\x27\x36\x99\x9b\x31\xeb\xb8\x94\x9d\x40\xb1\x31\x93\x4a\xe6\xad\x73\x6e\xc4\x0a\xfe\x52\xf6\x3f\x1e\x76\x1b\x9d\xf5\xa7\x96\x0b\x92\xda\xf6\x6c\xde\x12\x7b\xaf\xd8\x1f\x5f\x15\x4e\x1b\x73\x2a\xe6\x90\x46\xe3\x42\x57\xa0\xfc\xd0\x0c\x40\x60\x59\x3c\x25\x62\x34\xab\xf1\x86\x66\x13\xc8\xb2\x65\x9f\x36\x78\x24\xd3\x2c\x2d\x72\x32\xd2\x0d\x18\x5a\x86\x12\xc4\x2e\x45\x17\xb6\x58\x6f\x5a\x03\x38\x7d\x46\xd9\x5d\x35\x9f\xd5\xfd\x7d\xa9\x98\x70\x77\x46\x97\x7a\xe5\x12\x37\x2d\x5e\xf4\xfe\x27\x55\x9b\x66\x89\xdf\x9f\x62\x48\x92\xac\xf3\x1e\xa3\xe0\x14\xf4\x3d\x81\x8a\xa4\xd0\x72\x6c\xdc\xf3\xc4\xd0\x55\x59\x8f\x01\x30\x72\xd8\xd0\x14\x74\x16\x1a\x98\x26\x30\x8e\xcc\xc5\x3e\x56\xb3\x3f\x1a\x18\x7c\xd4\xfb\xe4\xa2\x5b\x35\x4b\xde\x5e\xb5\x7b\x8e\xb3\x74\xd0\xea\xfc\xd5\x33\xd6\xff\xfa\x90\xd2\xa1\x6d\x87\x0a\x85\x36\xc7\x2f\xed\x29\x3c\x92\x04\x03\x19\x0e\x32\x81\x26\x2b\x0e\x27\xd9\x1e\x4e\x23\x91\x12\x0c\xce\xb7\xa9\xc8\xe2\xa4\xc0\xe0\x58\x91\xf2\x70\x3f\x82\x21\x6d\xb3\xa9\x38\x26\xbc\x21\xc7\x0d\x29\xda\x3a\xfb\xb8\xb2\x8f\xde\xb4\x56\xf2\x4d\xe8\x5b\xf0\xe1\xc1\xcb\xdf\xfc\xd1\x72\x9f\x59\xaa\x63\xff\x4f\xa7\xf3\x71\x9c\x07\xe0\x9a\x84\x74\x3f\xa2\x10\x92\x1d\xa8\x7b\x38\x61\x89\x94\x1f\xf2\x14\x52\x02\x57\xd4\x6d\x56\x16\x42\x45\x24\x30\xce\x93\x39\x9c\xb5\x10\x26\x30\x64\xec\x90\x3f\xb0\x32\x62\x45\x5e\xe4\x1f\x93\xa3\xc3\xab\x21\xcd\xc6\x95\x28\xf7\xe3\xe0\xfe\x5b\x7e\x5e\x36\xb1\xcb\xfe\x2e\x17\x0e\x1e\x4e\x68\x2d\xc5\xaf\x13\x50\x81\xae\x98\x98\x17\xe2\x62\x20\x2a\x04\x1b\x59\x0a\xe7\x52\x11\x6b\xdb\x96\x1a\xe0\x9a\x60\xd1\xae\x84\x2b\x86\x44\x18\xaa\x43\xe9\x24\x46\xc8\xff\x67\x3a\xf6\x6e\x09\x7f\x50\xea\x39\xf7\x7a\x74\xcf\x6a\x03\xc3\x3a\xdc\xd9\x86\xc7\xf7\xd4\x4c\x1a\x6e\x16\x17\x1b\x1f\x4a\x18\xd0\xdd\xec\x9d\xd9\x7e\x19\xbf\xed\x47\x41\xc7\x53\x28\x1a\xc7\x28\x5c\x23\xb1\x90\xc3\x15\x5b\xc1\x05\xde\x12\x4d\x81\xa7\x78\x3a\xd0\x24\xd9\xd1\x02\xce\xc4\x49\x8b\x67\x38\x5e\x0d\x2d\x35\xf6\xf6\x7b\x7d\xf5\x13\x46\xcd\xda\x07\xf4\x69\xbe\xf5\xdc\xcd\x37\xec\xb8\xbb\x8b\x0f\xd4\x20\x9b\xf7\x4e\x7f\xac\xe2\xf5\xf1\x53\x0a\x5f\x48\x9b\x18\x7c\xec\x0b\x1d\xcf\x39\x48\x09\x44\x96\xd5\x90\x80\x54\x15\x93\x30\x8e\xf3\x10\x49\x19\xbe\xe1\x22\xc3\xe0\x35\x68\x50\x94\xc3\x07\x36\x16\x04\x1a\xc5\x3b\xe1\x5f\xba\x10\xff\x9e\x0b\xfc\x13\xdc\x39\xb1\x71\xc6\xf4\x49\x29\xe7\x02\x73\x6f\x9f\xfa\xb6\x11\x7d\x54\x2e\x38\xe4\xe4\x96\xcf\x5e\x57\xa8\x9c\x54\xa4\xcd\x9b\x9f\x77\x7c\x5e\xb6\x55\x01\x6b\x53\xa5\x59\x09\x69\x53\xce\x8c\x0d\xdb\x03\x90\x57\x78\xd9\x52\x38\x8d\x35\x65\x39\xc2\x91\x6a\xeb\x2a\x43\xf9\x92\x65\xea\x51\xa8\x8a\xba\xac\x53\x4c\xa8\xd8\x9e\xe9\x53\xb6\x4a\x82\x50\x8c\x9d\xf9\x9b\xd7\x7c\xf4\x81\x26\xae\x28\x77\xe1\xec\x98\x6a\x4b\x6e\x94\x39\xf3\xd8\x3d\x59\x0a\x35\x5f\x35\x7a\x41\xd3\xcb\x3f\x9f\x9b\xb2\xb6\x43\xfc\x36\x2b\xeb\xfa\x21\x4b\x8a\xac\xc8\xca\x0e\x66\x69\xa6\x11\x09\x82\x8d\x73\x3a\xc7\x48\x8a\x43\x42\xd6\x62\x54\x2d\xa0\x02\x91\x16\x28\x5a\x56\x65\x44\xa7\xe6\xef\xd8\xa6\x59\xa5\xf7\x4a\xd7\x6e\x37\xa5\xc8\x97\x85\xd2\x55\x50\x84\x3e\xb5\x26\x28\x25\xaf\x75\xdc\x13\x75\xe9\x3d\x77\xea\x94\x7c\xbb\xe2\x08\x16\x8f\x2c\x9d\xd5\xa0\xed\xa8\x6c\x24\x23\x95\xa0\x7c\x1f\x67\xcd\x80\x26\x22\x95\xd5\x71\x82\x32\x25\x83\x00\x61\x64\xf1\xb6\xe2\x93\x12\x06\x15\x01\xa4\x66\x4b\x31\xef\x97\x23\x77\x0b\x0c\xe5\x07\x27\x9f\xbe\x55\xba\xdb\xf1\xa5\xc7\x51\xc1\x7c\xbf\xdd\x1f\x6e\xf5\xea\x79\xa7\xe4\xf8\xab\x7b\xd3\x06\x7c\x89\x19\xb2\xed\x92\xa2\xc5\xb3\x10\x99\x86\x8f\x03\x2f\x32\x6c\x97\x50\x1c\x39\x0a\x23\x1e\x21\x81\x10\x09\x89\xe0\x6d\x46\xb1\x69\x15\x06\x06\xe4\x83\xe0\x6f\x4c\xf9\x7f\x67\xfe\x3f\x41\xf7\x13\x1b\x97\x2c\x9b\x21\x65\xe6\x27\x17\x58\x9e\xbc\x5a\xa9\x23\xed\x14\x6f\x2e\x59\xb5\x44\x76\xf7\x1d\x1a\xd9\x71\x60\xa5\xea\x79\x07\xee\xaa\xf0\x62\xe5\xcb\x42\x4d\xe2\xd7\x03\xab\x84\x42\xbb\x21\x66\xb2\x3a\x2d\x2a\xac\xa7\x05\xa4\x09\x3c\x96\x84\x8c\xe8\x42\x8f\xc2\x7c\x42\xf0\x42\x0e\xe9\x40\x43\x82\x29\xe3\x94\x12\x82\x54\x0c\x59\x8e\x3e\x4c\xff\x59\xdf\xe6\x05\xca\x16\x69\xf4\xe3\xac\x03\x7f\x76\xdd\x5d\x82\x5a\xfb\xd3\x78\x7c\xf8\xf6\x5b\xec\x99\x21\xd5\x3f\x7e\x95\xb6\x63\x2a\xb6\xa2\x6a\x84\x59\x9c\x2f\xda\x21\x65\xcb\x26\xc9\xd9\x1a\x54\x79\x5a\x56\xa0\x65\xc8\xb4\x1f\x06\x98\x45\x06\x7e\x44\x40\x1a\x21\x8a\xf5\x4d\x95\x46\x4c\x2a\x6d\x7b\x9b\x3e\xc2\xbe\xdd\x55\xf2\x57\x98\x73\x75\x4b\xe1\x91\x53\x13\xab\xa5\x1f\x95\x39\x4b\x9b\xaf\x1e\x45\x5f\x7d\xfe\xf8\xc2\x43\x6c\xcf\x88\xf8\xd5\x7c\x3c\x00\x12\xc4\x65\x59\xa0\x35\x4c\x11\xf9\xc0\x94\x19\x5d\x40\xb6\x6f\xba\x94\x68\xea\x2a\x43\x18\x5e\x84\x9b\xae\xc7\x30\x80\x0d\x59\x9b\x11\xa2\x54\x6a\x7e\x42\x52\xb5\xce\x83\x73\x8d\xbc\x7f\xa4\xdf\xf1\x23\xd3\x9a\x14\x03\xb9\x27\x76\x38\x72\xfb\x7e\xba\x27\xfa\x8a\xd3\xeb\x3a\x50\xf5\xd2\xe6\x2d\x18\x5b\xba\xc8\xa6\x11\xcf\x8b\x96\xc3\xba\xae\x29\x90\xbc\x4e\x89\x26\xab\x59\xb6\x6a\x00\x88\x89\x3a\x26\x4b\x81\x09\x2d\xd2\x0a\x1c\x64\x8a\xb8\x29\x0a\x8e\xf0\x9f\x90\x5f\xd7\xfc\xbf\x68\x1f\x8f\xac\x9a\xbf\x70\x7b\xa7\x5f\xb5\x81\xcb\xf3\xce\x7a\xea\xd5\xec\xf4\x15\x5f\x6f\xcb\x8b\x7b\x09\xa5\xad\xc3\x43\x96\xf2\x8f\xb3\x24\x36\x49\xde\x9a\xbc\x75\x5a\x89\x14\x4c\xa9\x3c\x1f\x7e\x30\xed\xc1\xc9\x0c\xf3\x57\xa5\x9f\x3b\x78\xa2\x91\x69\x42\xcd\xad\xe3\xcc\x9f\x7e\x3f\x51\xa7\x4e\x30\xfc\x41\x8f\x3c\xf7\xd2\xc6\x47\x8b\xfd\xc0\xaa\x70\x3e\xcd\xd8\x96\x2f\x3a\x9a\x6c\xa9\x84\xe8\x3a\x6c\xe0\x43\x8f\x34\x30\x8b\xf7\x43\x45\x51\x91\x0c\x91\xa0\x10\x24\xa6\x07\xac\x02\x24\x2d\x86\xfd\x1c\x68\x35\x74\xc9\xf6\x4e\x85\xfa\xbe\xfd\xb3\xd8\xea\xf2\x4f\xeb\x9e\x29\x97\xee\xc2\xae\x75\xd7\xa7\xa0\x2f\xbb\x7e\xa2\xcd\xeb\x55\x3d\x6d\x38\xe6\xd8\x22\x0d\xb6\x18\xfa\x98\x22\x63\x04\xc3\x69\xb2\x82\x28\x87\x51\x23\x1d\x13\x74\x3f\x20\x68\x32\xd4\x65\x47\xe5\x08\x24\xe8\x26\x46\x93\x34\x86\x53\x98\x6a\xbd\x1b\xee\xf2\xe2\x83\x9a\x3c\xa9\xda\xa0\xc8\xe7\xe3\x6f\xfc\x79\x7e\xef\x2f\xfd\x2b\x16\xcd\xf5\x3e\x96\xfe\xed\xea\x82\x93\x86\x6d\x58\x39\x69\x6f\xb5\xf8\x95\x4e\x37\xd2\x6c\x4d\x31\x78\x27\x80\x26\xa5\x8b\x94\xc1\xaa\xae\x86\x58\x1a\x9a\xa4\x1e\x91\x7a\x48\xe3\x3a\xcf\x0a\x2e\x70\xf5\x48\x21\x5d\xe4\x31\x6c\x2a\xbe\x49\x43\x16\xda\x2f\x6a\x26\x2f\xda\x9f\x65\xfd\x62\xc3\x68\xb7\x71\x4a\x1b\xf8\xfc\xb7\x9c\x97\xcf\x37\x3f\xb0\xa7\x5e\x8b\x5e\xf2\x40\x2f\x8e\xb8\x06\x4d\x53\x25\x20\x69\x2a\x43\x59\x88\x83\x16\xee\xb8\xb8\xe0\x03\x84\x78\x23\x74\x14\x1d\x38\x8e\x42\x85\x91\x2c\x49\x2c\x87\x43\x0e\xb8\x4c\xa4\xa6\x42\xee\x7a\xf4\x61\xdb\x47\x65\x8b\xd7\x5e\xfa\x6a\x45\xde\x29\x5b\xa7\xb7\xfc\xad\xcf\xc3\xe9\x6b\x6a\x96\x38\xf0\x64\x24\x1c\x3a\xdc\xaf\x30\xd3\x4a\xf1\x03\xb7\xae\xaa\x98\xae\x31\xb1\xb7\x4b\xd9\x6d\x2d\x27\x4c\x6a\x3d\x3a\x5f\xbf\x33\xed\xf4\xc3\xaf\x9f\x67\xfe\x72\xd5\xd9\x4c\xab\xbf\x5c\x93\x36\x55\x82\xd8\x8a\xb8\x84\xcf\x79\x0e\x52\x09\xcc\xb7\x31\x19\x53\x0d\x95\x46\x18\xc5\xf8\x02\x72\x04\x5e\x35\x7c\x4b\xa2\x69\xcb\x80\x8e\xcf\xf3\x12\xe2\x4d\x8c\x57\x53\x51\x76\x7e\xef\xd3\x5b\x37\x60\x86\x81\xd7\x47\x16\x28\x7e\xfe\xd8\xaf\x9f\xe6\x5b\x5d\x73\xf1\xb8\xf6\x57\x7e\x5e\x5f\x69\x54\xa1\x57\x3d\x32\x7e\x99\xb6\x21\x70\x6c\x28\x3c\x17\x01\x89\xb0\x71\x96\xa5\x2c\x86\x15\x2d\xc1\xf4\x24\x3c\x30\x44\x4a\x55\x91\x84\xc9\x3a\x06\x7d\xa0\x6a\x16\xe1\x72\xb4\x1f\x52\x1c\x83\x00\xf6\xee\xf8\xa0\xb4\x35\xac\xcf\x81\x25\x8b\x66\xd7\x66\xed\x2c\x94\xd7\x69\xd2\xa6\x91\xe3\x6f\x9c\x3f\x76\xf7\xde\xea\x03\xb9\x07\x4f\x5b\xd1\xfe\x54\x1c\x2b\x3d\x0f\x5d\x9e\xf3\x6d\x42\xa2\x38\x06\x13\x5c\x10\xda\x1e\x65\x40\xd2\x31\x1d\x24\x23\xd6\x91\x1d\x86\xe4\x39\x56\x53\x09\x5c\xa2\x2d\x13\x70\x4c\x6a\x14\xe9\xe5\xf9\xda\x45\xfa\xf5\x79\x4c\x31\xac\x40\x8f\xce\x4b\xc2\x39\xa7\x6a\x60\x03\x05\xf5\xf1\x4f\x4f\x0f\x0d\x1b\x77\x20\x4f\x98\x52\x7e\x2a\xab\x74\x76\xd1\x88\x76\x25\xd6\x14\x55\x2b\xf7\x94\x3f\xac\xfb\x66\xfa\x98\xe2\x6f\xaa\x9b\xa3\x61\x95\xe9\x55\x5a\x5f\x2d\xd4\xea\x5a\x1c\x1f\x8d\x65\x5a\xf2\x23\xc1\x77\x34\x9f\x24\x10\x92\x38\x9b\x63\x43\x31\xc2\x65\x51\x74\x0c\x9c\xb7\x91\x85\x7b\xb8\x29\x21\x97\xb1\x00\x8e\xf9\x5e\xc8\xc4\x18\xe7\x0c\x4a\xd7\xac\x53\x93\xbd\xd7\x37\xcf\xda\xf0\xe6\xd5\xf1\xab\x43\x8a\xd6\xcd\x37\x32\xe3\xe3\xd9\x9d\x8c\x89\xed\x86\xff\xdc\xb5\xe4\xfe\x1f\xe2\x08\x7e\x40\x86\xad\x59\x84\xa0\xb0\xbc\xad\x53\x9c\x4e\xf3\xa1\x21\xe2\x81\xe1\x42\xc6\x57\x2c\x8b\x51\x64\x3c\x44\x81\x1f\x88\xa1\x85\x68\x52\x92\x7d\x45\x8a\x9d\xf1\x53\x56\x94\x9c\x5f\xad\xcf\xa8\xf4\x6d\x5b\x2f\x6e\x95\xeb\xd2\x17\xbb\xf7\x8e\x3e\x70\x60\xe5\xd4\x37\x93\x23\xa2\xee\xd6\xe1\x6b\xca\x63\xf1\x3b\x79\x71\x2e\x20\x05\x08\x49\x99\x74\x45\x8a\x76\x04\x0e\xb7\x5d\x9f\x0e\x42\x64\x39\x94\x24\x05\x1a\x54\x01\x06\x2c\x4f\x85\xa1\xa6\xca\x72\x24\x4a\x2a\x7a\x97\x11\x7b\x2e\x6f\xe2\x37\x4b\x13\xda\xb0\x4d\xda\x13\xfb\xea\xd5\xbd\x52\xd9\xfc\x7d\xd9\x94\x8f\x8a\xd6\x5d\xda\xb7\x52\xd7\x31\x53\x3e\x1a\x39\x2d\x8e\x4a\x27\x34\xa6\x85\x5e\x40\x49\x81\xc2\x40\x92\x08\x49\x40\xa8\xd0\xc5\x45\x4e\xb7\x1c\x4b\xe6\x03\x64\xfa\xb8\xc9\xe3\x24\xa5\xd3\xa6\x1c\x2a\x94\x16\xd1\xe9\x62\xda\xe4\x96\x38\xb5\x29\x79\x51\xbb\x39\xef\x99\x9b\x9e\xb5\xac\xf0\xec\xd8\xd3\xfd\x53\x7f\x5b\x5e\xf6\xc8\xf8\xb6\xb5\xcb\x36\xe8\x92\x74\xf4\xda\x97\x71\x84\x00\x93\xae\x21\x73\x3e\x0a\x23\xd1\xe6\x29\x11\xd9\x98\xae\x87\x06\x11\x59\x1c\xe3\x20\xd6\xc3\x0d\x3e\x8c\x64\xe8\x4a\x80\x25\x20\x05\x84\x90\x96\x85\x77\x57\xf8\xcd\xe9\x6b\xd3\x6f\x3e\x48\xfa\x6a\x50\x89\x8f\x66\x50\xb7\x97\x54\x5a\xbd\x8c\x19\x92\xbe\x7d\xcd\x51\x09\xe7\x1f\x6d\x3d\xfb\x60\x4b\xad\xf8\x85\x6b\xe8\x3c\x21\xda\x8e\x6e\x8a\x3c\x67\xaa\x00\x60\x81\x0b\x31\x97\xc4\x90\x6f\x00\xe8\x44\x84\xa4\x73\x3e\x23\x51\x58\x24\x49\x01\xc7\x69\x72\xa4\x82\x18\xe1\xbe\xc1\x1a\x80\x3c\x3d\xad\x85\x9b\xf3\xf4\xb9\x85\x36\xb4\x3b\xbe\xf8\xc0\x95\x62\x45\x8e\x56\x82\xd5\x4f\xb6\xed\x34\x65\x6f\xda\x6c\x29\x63\x4b\xda\xb2\x2e\x2d\x50\xa1\x63\x84\xaa\xad\x71\xc0\xc3\x00\x1d\x78\x14\x4b\x68\x64\xc0\x38\x40\xe3\xc8\x00\x13\x29\x39\x72\x51\xc0\x4a\x8c\x46\xea\x34\xa6\xc7\xd6\xe1\xa8\x7f\x01\x3f\x7f\xbf\x99\x56\x67\x42\xeb\x7d\x3b\x2a\xdc\x1b\x79\x84\x3a\xfe\x3d\xfc\x19\x25\xd5\x38\x7a\x2f\x7f\x8f\xc3\xe0\x59\xdb\xf8\xe5\xb0\x4f\x60\x40\xf5\x3d\x96\x15\x2c\x5a\x0c\x80\xc4\x4a\x1e\xef\x20\x86\x65\x2c\x53\x0b\xfd\x28\x40\x8a\x23\x93\x38\x66\x48\x9e\xca\x98\x96\x60\x42\x4e\x7a\xb7\xa8\xad\xad\xc7\xde\x5c\x28\x8e\xe9\xde\xbc\x9d\x56\xff\x61\x79\x7a\xc4\xf1\x4d\x2b\x46\x6f\x78\x55\x6b\x7d\xb9\xe3\x9f\x9d\x69\xb1\x29\x43\xda\x5c\x34\x63\xaf\xb0\x1b\x6a\xa4\x18\x29\x9e\x80\x2b\x8a\x13\x09\xac\x67\x86\x0a\xe6\xaa\x21\x8a\x82\x50\xc7\x15\x51\x14\x59\xd7\xf7\x49\x1e\x7a\x0c\xc7\xe1\x91\x68\xa3\x54\x0e\x99\x5a\x39\x0a\xfd\x7e\x50\x2a\xd3\xf0\xd1\xb8\xa6\xb7\xea\xd7\xac\xbe\xba\x7a\xb6\x6d\x0d\xd2\xff\x68\xf4\x7b\xd6\xe9\x5a\x96\x8d\x75\x3f\xa9\x96\xe2\xff\x50\xd6\x35\xed\x3d\xe5\x40\xb9\x52\xc4\x8b\xa1\x33\x6d\xf1\xce\xf6\xc1\xdd\x7b\x34\x2c\xdb\xe4\x9a\xf8\x70\xd0\x17\x8b\xce\xdf\x5e\xbd\x3b\x7e\x55\xdb\x8d\x58\x8b\x64\x43\x44\x69\xae\x40\xb9\x2a\x24\x79\x59\x22\x0d\xcd\x46\x8e\xef\x42\x93\x0a\x59\x40\x42\x4b\xc6\x35\x92\x35\x1d\xd1\x67\x55\xe5\x6f\x8c\x9a\xff\x84\x7b\xfa\xd3\xa7\xe2\xd3\x7e\x4d\xfb\x2d\x1a\x51\xea\xf2\xd0\x3f\xf7\x4d\x98\x9b\x59\xa8\x7d\xe2\x3c\x3d\x36\xd7\xa9\xf9\x6f\x4f\x94\x2d\x7c\x2e\x7e\xad\xae\x43\x90\xba\x25\x0a\x84\x46\x87\x3c\xa2\x59\x52\x85\x04\x2e\x46\xb4\xab\x63\xc8\x86\x98\xac\x1b\x32\x4f\x30\x84\xa9\xba\x94\xe8\xc9\x34\x26\x87\x1c\x9f\x8a\xb8\x57\xf6\xe8\xa7\x5d\x63\xdc\x8e\x95\xd4\x5b\xf7\x93\x76\xf4\xf3\xbe\xde\x2e\xe4\x1a\xbf\xa0\x67\x8e\x43\xfd\x86\x5e\x9d\xde\x71\x53\xb7\x0f\xfe\xeb\xeb\x6c\x2b\x06\xa9\x5f\x66\xcd\x58\x6b\xfd\x90\xa7\x8b\xcf\x7d\x30\x53\xeb\xdc\x7e\xea\x87\x2f\x7f\xc7\xf8\x26\xf3\xae\xd7\x1c\x98\xf4\x38\xe5\xd7\x45\xcb\x64\x7e\x52\xa6\xc3\x17\xcf\xcb\xb7\x59\xb0\xf2\x97\xa5\x73\xdb\x5c\x5f\xa2\xcd\x59\x1c\x94\x3c\xb3\x2d\xb9\xdf\x90\x42\xc5\x9e\xb4\x4b\xf9\xf5\xba\x01\x6b\xca\x6c\x18\x96\xb3\xfb\xa4\x19\xd5\x3b\x34\xda\xf7\xb6\xdb\xb5\xc1\xbb\xab\xd5\x8a\x00\xd9\x50\xed\x74\xb8\x77\xc9\x19\x4d\x52\x94\xee\xdd\x4f\x97\xf7\xf4\xf6\x26\xe4\x79\x46\xa7\xd3\x3b\xf6\xe8\x7d\xb8\x9a\xb3\xfb\x4e\xcb\xed\x6d\x36\xce\xf8\x00\xf6\xac\xe6\x0d\xd9\x16\xc7\xd2\x8d\xfb\xa6\x42\xbb\x32\xa6\x9b\x0e\x41\xbb\xa1\xe0\x19\xa4\xa4\x86\x8a\x62\xe2\x3e\x88\x38\x1a\xf7\x5d\xa8\x5b\x8a\xc4\xd0\x3e\xa3\x10\xba\x45\xff\xed\x26\xfd\x17\x7b\xbf\xfe\x9c\xc1\x95\x3e\xec\xf1\xd1\x9b\x8d\xe7\x06\x76\xcc\xef\x37\x39\x95\x00\x5a\xce\xed\x95\xaf\xe3\xb0\x82\xfa\x7b\xab\xd7\x35\x48\xdb\x9d\x2d\x66\x3b\x48\x52\xb2\xa8\x72\x3a\x61\x02\xd1\x87\x6e\x80\x01\xc9\xa6\x78\x08\x25\xcf\x94\x30\x9b\x70\x54\x5b\x65\xf8\x28\x60\x08\x9e\x76\x91\x87\x18\x15\x03\x41\x0c\x85\x96\x6b\x1f\x7f\xbe\x19\xe6\xb2\x77\x37\x38\xe0\xe6\x9d\x54\x0b\x5c\x9c\xfa\xea\xe7\x74\xd8\x8a\x45\x4e\x81\xaa\x33\x47\x0a\xe5\xe3\xa7\x1d\x02\x80\x12\x88\x0e\x34\x6d\x86\xc2\xfe\x95\xd5\x8e\xe5\x68\x36\x4b\x72\x91\x61\xf8\x98\x68\x3b\x44\x80\x8c\x28\x80\x2e\x11\x99\x02\x86\x47\xac\xad\xfd\x4d\xaf\x38\x65\xfa\x3c\x63\x5e\xff\x7a\xf7\xcd\xe3\x6f\xef\xfe\x98\x90\xe9\xf6\x97\xbd\x57\xff\x3e\x6a\xc7\xe5\x3f\xdd\x31\xe3\x7b\xfe\x52\x3f\xf7\x83\xda\x83\x36\xa6\x48\x9f\xaa\x13\x97\x3d\x6a\x3c\xec\xee\x37\x04\xcc\xf4\x6c\xf8\xd8\xbd\x63\xd3\x6f\xed\xd1\x6f\x6a\x93\x42\x85\x67\xf3\x41\xd4\xb9\x6b\x9b\xb4\x01\x94\x63\x16\x16\x86\xa5\x81\x8c\x70\xdb\x35\x4c\x13\x90\x84\x4f\x18\xa4\x15\xb2\x02\xd0\x58\x41\x94\x58\xd1\xe0\x25\x05\x09\x22\x66\x72\xd0\x0f\xd8\xc0\xd5\xa1\x12\x43\x35\x10\xee\xcd\x58\xf7\xf0\xf3\xf4\x1f\x15\xfd\x4c\x76\x74\xbd\x65\xf7\xda\x85\x2f\x1e\x7d\xff\xe0\xf4\x2f\x8e\xdf\x6f\x31\x74\x99\xd9\x22\x7e\x3e\x31\x20\x00\xa6\x0d\x29\x1f\x47\x80\x55\x10\x54\x59\x40\x7b\x52\x48\x23\x53\x57\xa4\x88\x53\x55\x4d\xd5\x23\xca\xf0\x43\xd5\xc5\x5d\x00\x1c\xce\x01\x28\x46\xa3\xb2\x24\xe9\x20\xd6\x7b\xe4\xb5\x03\x95\x9e\xdd\xd8\x76\xbc\xc6\xc9\x26\x8d\x2e\x1e\xbc\x70\x71\x74\xdd\x53\x23\xf6\x3c\x2f\x52\x7e\xfa\x8a\xf8\x79\xb1\x33\x22\x17\x02\x82\x97\x1d\x47\x52\xb1\x40\xb6\x39\x51\xf5\x0c\x18\x71\x22\x1e\xf2\x90\x87\x01\x1f\xf2\x9a\x60\x78\x91\xaa\x7a\xc8\x44\x1a\x83\xbb\xb6\x90\xca\xfd\xb9\xd0\x17\xfa\xea\x3d\x0d\xf9\xa4\xa1\x1f\x2d\x59\xdd\x76\xb4\x57\xeb\xf6\xad\x85\x49\x03\x76\xdb\x13\xaf\xe7\xa1\x9c\x46\x07\x37\xfd\x97\xc8\x7a\xa5\x0d\xa3\x97\x74\x5f\x79\xeb\xa1\x3e\x70\x4d\xf9\x4c\x99\x0a\xed\xef\x5c\xfb\xbb\x8f\x17\xfa\x9f\x2f\x1f\x8d\x7e\x58\x56\x73\xe5\xf2\xc2\x29\x92\x2d\xf7\x95\x1f\x76\x9f\xa8\x9e\xb0\x77\xf0\xba\x21\x1d\x16\x1d\x48\x37\xab\xd0\xa6\xdd\xbb\xbc\xba\x0b\x7e\x6e\x9b\x67\x42\xa3\xb3\x25\x4f\x15\x8c\xa3\xcc\xaa\x4c\x32\x98\x06\x80\x26\xd9\x78\x68\xea\x44\x48\x4a\x4a\x68\x38\x8e\xa3\x59\x28\x74\x7d\x9a\xd3\xf5\x28\x54\x34\x5b\xd0\x42\x43\x09\x03\x49\x51\x62\x5c\x5d\x5b\xfc\x2e\x3c\xce\x98\xe9\x9b\xc5\xd5\x5a\xce\xd8\x51\xad\xda\x82\x39\x83\xeb\xe4\x9b\xbc\x62\xa6\xff\x67\x9b\xa3\xa6\x5a\xbf\x4c\xa1\xa6\x71\xdc\xfc\x14\x13\x08\xb6\x66\x92\x94\xed\x92\x36\xf4\x22\x4e\x08\x04\x28\xd8\xa1\xcd\x60\x2a\xa1\x21\x1b\x38\x34\xe5\x22\x4c\x67\x4d\x8f\x41\x6e\xa4\xe0\x31\x64\x56\xbd\xcc\xa5\x8e\x7e\x9e\x78\x52\x9a\xf5\xfe\x9e\x7e\xb7\x7f\x18\x70\x3f\xe3\xa3\x8f\x8e\xf7\xe4\xf9\xbe\xed\xc7\x1d\x4a\x7a\xd5\x7c\x44\xe3\xf8\xcd\x32\x14\xce\xc4\x42\xdb\xd4\x98\x80\x86\xc0\xc1\x31\x01\xc7\x69\x39\x00\xbc\x86\xdc\x40\xb6\x3d\x0b\x01\x4b\xb3\x48\x4e\xa5\x2d\x0f\x67\x69\x59\x09\x19\x3b\x95\x64\xab\xbe\xb4\xe2\xd5\xa4\x99\x0d\x0a\x4d\xee\x3b\xa8\x57\xe3\xc1\x2f\x2f\x76\xcb\x7b\xac\xe4\x2e\x68\x37\xbb\xd7\xff\xe8\x8a\x1d\xd8\xb5\x84\x94\x5f\x7f\x32\xe0\x97\x5b\x39\x0b\x8f\x1a\xb0\x24\x3c\x5e\x63\xf4\x47\xf3\x6e\x3d\x23\xbb\xfd\xb4\xf2\x93\x2e\x77\x9f\x5c\xf9\xa5\x03\xc8\xe7\xcd\x4d\xf9\x75\xd3\xc9\x1f\x4e\xae\x31\x1e\x5b\x59\x81\x4f\x1a\x9b\xe7\xfc\xfc\x9d\x7d\x8d\xa7\xd5\xa7\x3e\x58\x92\xe1\xc0\xd4\xba\x73\x72\x35\x58\x93\x9c\xf2\xeb\xfd\xfb\xab\x3c\x2d\x95\xfb\x6e\xb3\x23\x6f\xbb\xe4\x9a\x3c\xa2\xcb\xb1\x9e\x6f\x93\x3e\x33\xaa\x0e\x10\xf3\x24\x3d\xfa\xf3\xf8\x8c\xb5\xe7\x53\x8c\x8d\x4e\xa7\xff\x99\xf9\x60\x78\xf3\x1f\xfa\xb4\x3a\x86\x9a\xb6\x2a\x90\xfb\xd0\x9e\x3c\x25\xc6\x1c\x1b\x26\x16\xab\xbe\xb9\xdf\x90\xde\xcf\x26\xc7\xb1\x0c\xd1\x3e\xe4\x23\x95\xd7\x6c\x8f\xc6\x0c\x84\x18\x82\xa6\x4c\x4b\x37\x54\xe4\xba\x01\xc4\x42\x28\x02\x59\xf2\x44\xdc\xa0\x39\x9f\x11\x2d\x57\x45\xa9\x0d\x35\x1e\x0c\xef\x7f\xf3\xc8\xa5\x74\x7b\x05\x0a\x95\x9a\x34\x88\xce\x36\xb9\xd5\xfc\x84\xce\x6d\x76\x5c\xbe\x3d\x3b\x7b\xab\x47\xd2\x67\x7d\x53\xf4\x9b\xc5\x07\x7c\x33\xab\xd7\xa9\x23\xc3\x1a\x1f\xff\xad\xdd\xf4\xab\xa7\x46\x9d\x38\x9f\xe7\x4e\xd5\x1f\xc7\xed\xa8\x58\xfe\xec\x8e\x8a\xcd\x1e\xc5\x4f\xbc\x80\x21\xcd\x48\xd5\x20\x52\x6d\x4b\x63\x54\xc1\x80\x18\x26\xf9\x24\xc3\x23\xdb\xb4\x90\xa8\x87\x3a\x03\x7d\x5a\x44\x88\x44\xb6\xa4\x87\x14\xae\x87\x6c\x8c\xd1\xea\xe4\x13\x37\x76\xcf\x1a\x1c\x96\x39\xde\xf0\x45\xd7\xa6\x83\xb6\xb5\x6f\xb4\x6f\x75\xf1\x1b\x2d\x2e\x69\x8b\xcf\x57\xae\xbd\x6b\xce\xb3\x8f\xe2\x08\xa9\x09\x03\x46\x60\x14\xd3\xf6\x1d\xcc\xb5\x39\x0f\x45\x91\x8a\x05\x96\x48\xfa\x91\xc1\xcb\x82\xa5\x38\x90\xd6\x70\xdf\x96\x2c\x9a\x21\x09\xc1\xb7\xfe\x26\x2e\x9a\x62\x85\xd3\x4f\xcb\x61\xa6\x7f\x75\xad\xc0\xa9\x93\xbb\xa8\xf4\x97\x3f\xa9\xf9\x76\xf0\xee\x4c\x73\x0f\x2d\xe9\x9b\xf3\x97\x5a\xd9\x2e\x76\x6d\xfd\x63\x1c\xe5\x67\x90\x4f\xba\x96\x4b\x51\xac\x40\x62\x01\x62\x44\x5b\x0a\x23\x47\x80\x50\x89\x68\xdb\x09\x38\xc6\x8e\x7c\x17\xc7\x78\x44\xf2\xb2\x1f\x69\x42\xc8\xc5\x10\xbe\x7f\xdd\xfd\xe8\xba\x37\x73\xf3\x67\xed\x36\xbc\x57\xfa\x97\xed\xec\x1d\xcd\x30\xba\xfc\xf7\x09\xb5\x50\xd7\x97\x95\xbe\xfd\xf6\xe7\x32\x71\xf4\xe1\x32\x4d\x89\xc6\x79\x0e\xf0\x8e\x8b\xe3\x9c\xa4\x61\x1e\x8f\x14\x1a\xf3\x7d\x1e\xe3\xa1\x06\x5c\x8f\xe2\x00\x46\xdb\x44\xa4\x73\xae\x0a\x19\x2e\x0c\xff\x5a\xe1\x6f\xb3\xfc\x6f\x33\xe0\xc4\x26\x25\x33\xa4\xfb\xaf\x27\xef\x4d\x45\x16\x7d\x3f\xf1\x62\xf3\x13\xe3\x2b\x7f\x7b\xa2\x71\xf1\xc2\x95\x7f\x6e\x70\x67\xd1\xa9\x37\x9d\xf8\xa4\xda\x9f\x8c\x6b\x5c\x18\xc4\xcf\xc5\x05\xc0\xd0\x16\xf5\x50\x11\x69\x85\x15\x6d\x8b\xe2\x4d\x01\x91\x08\xa8\x8c\x08\xfd\xc8\x0a\x65\x20\x45\x36\xed\x7b\xba\x25\x48\x38\xa4\x15\x5c\x08\x42\x10\x7b\x3c\x7f\x77\xec\x93\x83\x79\x93\x77\xe5\x79\x73\xfb\xe8\xe6\x2d\x45\xba\x97\xc9\xb2\xe4\xe0\xc0\xce\x19\x85\x9f\xbb\x97\x3c\x97\x67\x5b\xf6\xe2\x69\x7b\xf2\x8e\x99\x43\x32\xe5\xa1\x90\x25\x23\xcc\x80\x41\x44\x98\xa4\x16\x70\x50\xa2\x64\x12\x0f\x09\x85\x51\x15\x39\x40\x10\x13\x78\xce\x08\x49\x5f\xe0\xa5\x50\x13\x99\x30\xf6\x2b\xda\x91\xcb\xaf\x7b\xce\xac\x35\xb5\xfe\xc1\xfb\xed\xf3\x5d\xee\x5f\xb1\x46\xfb\x8e\x19\x72\x5f\xdb\xc0\xcc\x7a\xfb\x53\x17\x10\xfa\x6d\x37\xc5\xaf\x72\xba\x0c\x17\x41\x3b\xd0\x5d\x8e\x32\x64\x3b\xd0\x35\x3b\xe2\x60\xa8\xb9\x0c\xb2\x08\x56\x0d\x30\xe0\x33\x3a\xa3\x2b\xd0\x93\x78\x2d\x60\x44\x95\xb4\xcc\xd8\xb3\x90\xbc\xc4\x8c\xa7\x05\x06\x56\xcf\x5d\xfa\xc7\xe4\x73\x17\xd6\x1b\x05\xb2\x15\xb8\xd1\xff\x63\xaf\x2c\x2a\x78\x2e\x6b\xc6\x99\xdf\x15\x4e\x9b\xea\x6b\x6c\x21\x67\x5a\xb7\x64\x26\xe4\x58\x1e\x0b\x10\xab\x03\xdc\xa4\x91\x2d\x32\x38\xa5\xd3\x34\xf2\x35\x5d\x09\x15\x26\xe2\x79\xce\x71\x44\x8a\x88\x48\xdc\xf9\x9b\x8c\xea\x7f\xc2\x9d\xe5\xdd\x2c\x58\xf5\xd7\xb5\x19\xbb\x5d\xce\xe5\x18\x77\x6a\x6c\x98\xf2\x64\xc3\xbc\x4e\xe7\x1b\x4c\xa7\x5e\xef\xba\x50\xef\x6e\xde\x83\xf1\x0b\x57\xf4\x29\x9d\xe6\x9d\x80\x92\x00\x8d\x39\x91\x15\x8a\x9c\x87\x6c\x59\xc0\x2c\xc0\x38\x91\xcd\x50\xd0\x12\x7c\x83\xe2\x6d\x97\x71\x1c\xd2\xe1\x94\xbf\x19\x28\xfd\xdb\x37\xec\x9f\x46\xed\x89\x4d\x06\xf7\xcd\xfa\x5f\xe2\x1b\x6d\xf6\x24\xdf\x28\x3d\xf0\xc7\xca\xcb\xcf\xe7\x3c\xd7\xf0\x70\xbf\x32\xaf\x57\x67\x55\xb3\xde\x6d\x82\xad\x7f\x7c\xff\x75\xe0\xf4\xbf\x13\xbf\x9d\x6a\x39\xbe\x85\xf3\x92\x28\x9b\x36\xa9\x04\x7a\x60\xf0\xd0\x12\x48\xce\x31\x49\xc9\xd3\x51\x24\x68\x84\x15\x19\x94\x07\x23\xc2\xd7\x02\x14\x52\x86\x42\xc7\xde\xa9\xbb\x47\xad\x6f\xfa\x48\xaa\xf2\x4d\xd6\xa7\x33\xc7\x5f\x4a\x5c\xb3\xf1\xdc\x9a\x16\x56\xff\xdf\x07\x67\xe8\xdf\xe8\x6a\xd6\x7c\x85\xcb\xec\x8a\x63\xda\x2b\x24\x12\xcc\x90\x57\x78\x1d\xb2\x0e\x66\x0a\x34\x49\xe3\x9a\x24\x29\x34\x70\x31\x1c\x83\x40\xc3\x81\x41\x70\x98\xe5\x8b\x34\x70\x6c\x5f\x49\x4d\xd2\xed\x55\x8e\xae\x99\x33\x6f\xaf\x0e\x67\x2e\x4a\xd7\x77\x4e\xd3\xe4\x4d\xe3\x3f\x18\xb2\x29\x31\xf9\x87\xad\xeb\xcf\x2f\x56\x3c\xb1\x4c\xa6\xf8\x85\x2c\x44\xa2\xcf\x7b\x8e\x84\x47\x61\xa8\x51\x32\x4e\xa8\x24\x14\x58\x8d\x90\x69\x05\xd7\x14\xdf\xa6\x9c\xd0\xe6\xec\xd0\xa7\x35\x5f\x52\x4d\x64\xa1\xd0\x48\x45\x3d\x78\xcf\xe3\x09\xbf\x65\x49\x97\xf7\xf7\xdc\x63\x3a\xdc\x7c\xbb\x1a\x50\xf6\xca\xa6\x3f\x6f\xc9\x91\x63\xd6\xbc\x4a\xec\xd4\xfa\x23\x4b\xc6\xef\x90\x02\x9a\x8d\xf9\xc8\x52\x6c\x57\xa1\x2d\x44\x00\xc7\x83\xb8\xe2\x09\x91\x4f\x45\x32\x07\x21\x69\x12\x9c\xac\xfa\x06\x4f\x09\x0a\x34\x5d\x52\xa2\xac\x18\xf7\x8b\x01\xe7\x2b\xca\x13\x12\x9f\x9d\xcf\xd7\x61\x77\x97\x7e\xfd\xee\x4f\xbd\x3a\xf1\xfc\x9c\x6d\x53\x85\x3f\x9e\x5d\xcc\xf2\xa0\xf9\xd1\xf3\xeb\xe3\xb7\xc2\xbe\xce\xe3\x76\x68\xf1\x14\x2d\x48\x8e\x62\x22\x91\x14\x18\x28\x3a\x22\xa9\x69\x48\x16\x15\x06\x0a\xae\x44\xda\x2c\xa0\x74\x45\x30\x4d\xc1\xf7\x95\x54\x68\x41\x67\x1e\x2f\xde\x70\xfc\xd3\x25\xaf\x66\xe5\x56\xe7\x7d\xb6\xbd\xf0\xe4\x5f\x5e\xaf\x60\xea\xb7\x3d\x53\x76\x5e\x92\x79\xbb\x51\x8d\xc4\x3d\xf1\xbb\x63\x48\x2a\x29\x23\xcd\xf2\xc8\x28\xd2\x39\x3d\x74\x34\xc5\x87\x04\x06\x4d\x5c\x22\x1c\x99\xf1\x6d\x9a\x70\x28\x8e\x09\x0d\x48\x01\x3c\x64\x55\xdf\xfb\x1b\x3a\x66\x59\x96\xff\x6d\xc4\x9a\xd8\x38\x5f\xc6\x52\x29\x6b\x8b\x51\xe2\xb3\x4b\x4f\x2e\xe4\x7e\x9b\x74\xb1\xfb\x94\x2c\x61\x4e\x50\xfa\xcd\x80\xef\x76\x54\xfd\x6e\x67\xc3\xb2\x93\xfe\xbc\x36\xaf\x77\xda\xc4\x07\x52\x79\xbc\x89\x30\x5d\xc5\x75\x97\x40\xa6\x1f\xd8\x86\x81\x38\x99\xd3\x6c\xc5\xf2\x35\x8c\x75\x14\x57\xa2\x24\x2f\x90\xf9\x08\x71\x21\x69\xb1\x80\x71\xc3\x54\xf8\x2a\x81\xbb\x72\xba\x3e\xb5\xdf\x17\x2f\xba\x6d\x18\x31\xed\xc8\x47\xbd\x1e\x0f\x69\x0b\x4a\xd7\x39\x35\xcf\xbe\x37\x67\xdb\xfb\xe4\xda\x38\x1a\xfc\xe1\xa4\x21\xf8\xaa\x65\x23\xcf\x17\x75\x9e\xc7\x20\x25\x44\x2c\x63\x50\x14\xc1\xe8\x04\x6d\x84\x2c\x0e\x82\xd0\xf4\x1c\xd1\x22\x09\x5e\xc3\x6c\x85\xa1\x62\x87\x9c\xe3\xf6\xb2\xf4\xe5\xd7\xd1\x45\x46\x3f\x6c\xbe\x61\xc4\x84\x35\x27\x0f\x4e\xdb\x7e\xa4\x45\xf1\x51\xe4\xf0\x9c\xd5\x2f\xda\xc1\xe3\x41\x71\x84\x7c\xe2\x21\xa9\x2a\xa4\x62\x9b\x3e\x25\x19\x8a\x80\x0c\x2a\xe2\x29\x85\xf3\x68\x9a\x0d\x55\x19\x40\xd3\x65\x64\x8a\xf3\x44\xc1\x60\x24\x43\x21\x71\x16\x8f\x9d\xf9\x7c\xb7\x26\xc2\x77\x85\x1d\xb5\x73\xf1\xbe\x05\xd5\x74\x66\xed\x7a\x97\x9a\x62\x27\xc9\x16\x0f\xaa\xa9\xf3\x47\xcf\x5c\x33\x2e\x6d\x0e\xa2\xa9\x18\x2a\x4b\xbc\x00\x7c\x9e\x33\x4c\x0a\x77\x78\xcc\x91\x4c\x8b\xf3\x0d\x4c\x54\x1d\x57\x12\x31\x5d\xf3\xcc\x40\xf1\x4d\x8a\x53\x71\xcb\x93\x39\x49\x8b\x52\xa1\x8b\x45\x0d\xa6\x0d\x5c\xa1\x26\x67\x9f\x63\x3d\xc8\x35\x6e\x52\xbf\x51\x49\xa7\xd6\x75\x60\x6b\x64\xff\x6e\x31\x55\xee\x20\xb1\xfc\xd3\x38\xca\x70\x69\x18\x87\x0b\x10\x78\x2c\xce\x87\x81\x0e\x15\x1a\xe2\x02\x89\xf4\x80\x52\x24\x9d\x90\x2d\x4f\x06\x24\xe2\xa0\x8a\x89\x3c\x27\x31\x98\x1d\x61\x91\xf3\xce\x66\xfd\xa7\xf9\x7b\x62\xe3\x92\x59\xb2\xa6\xdc\xac\x63\x76\xfe\xc2\xf6\xba\x5d\x78\x49\xa1\x69\x2b\x3e\x5c\xd0\x2f\x97\x55\xb0\xa2\x18\x8e\x5f\xd5\xf1\x4a\xcf\xab\x1d\xca\x1f\x1b\x7f\x21\x6d\xaf\x54\xb1\x0b\xa8\xa3\x99\xb8\x8d\x21\xcf\x91\x59\x41\xe7\x4d\x4f\xa2\x69\x59\x10\x0d\x85\x03\x21\xc2\x45\x41\x96\x4d\xce\xf5\x90\x01\x6d\x3a\x92\x18\x0a\xb1\x20\x15\x57\xd7\xaa\x44\x8e\x09\xdb\xde\xfe\xf1\x7b\x34\x5c\xeb\xb8\xa7\xde\xcc\x85\xcd\xfe\x38\xda\x69\x94\x76\x86\xf3\x2e\xec\x7e\xb5\xe6\xeb\xcd\xf1\x13\x0e\x63\x42\xcd\x30\x05\x91\x74\x7d\x31\x22\x02\xcd\x84\x8e\x46\x52\x21\x46\x08\x34\x0d\xd9\x48\x73\x5d\x42\xa0\x31\xc1\x93\x6c\x0b\x5a\x91\x0e\x49\x40\x68\xa9\x88\x9b\xfc\x32\xf1\x69\xe7\x1b\xa5\x4b\xd6\xe9\x91\x6d\x5f\xd9\x51\x5f\x8e\xae\xf2\x60\xf6\xc4\x0c\xbb\xb2\x55\xec\xf3\x7a\x48\x42\xf6\xc3\xdf\x4b\x71\xb4\x11\x08\x02\x89\x13\xb9\x28\x70\x59\x19\x18\x91\x85\x9b\x0c\xe2\x99\xc0\x53\x8c\xc0\x96\x2d\xa8\x31\x0c\x69\x04\x2a\x0d\x78\x51\x61\xa2\x10\xf2\x7e\xa0\xa4\xd2\xbb\x7c\xf4\xd3\xec\x5e\x2b\xad\x4c\x55\x96\x27\x56\xed\xd7\xd5\xde\x52\x77\xe9\xdc\xb7\x0d\x1f\x12\x5d\xc0\xc5\xce\x1e\xf3\xa0\x45\xb1\xb4\x69\xe6\xc5\x2c\x89\x82\x41\x88\x48\x87\x8c\x03\xc9\xc8\xd2\x09\x84\x29\x26\x11\x09\x16\x4f\x41\x42\x73\xb9\xc0\x74\x2c\x9b\x74\x7c\x8a\x25\x55\x49\xb6\xf8\x00\xfa\x61\x2a\xc2\x61\x64\x95\x96\xdf\xfe\xf9\xac\x72\xfb\x4f\x0a\x9e\xcf\xf7\xa4\xc0\x82\x9f\x2f\x9a\x9b\x76\x2a\xf9\xde\x9c\xb6\x3a\xcf\x68\x3e\x3f\xe3\x8a\x38\x86\xec\x63\x86\x4d\xba\x2e\xa0\x23\x9d\xa3\x43\x4e\x89\x48\x8e\x53\x34\xcf\x82\x04\x62\x78\x81\x65\x58\x59\x83\x0e\x15\xf2\x11\x29\x10\x12\x2f\x05\x3a\x06\xdf\x21\x97\xfd\xd3\xf3\x57\x62\xe3\x7c\x19\xfe\x3f\xb9\xec\xaf\xe6\xac\x00\xd5\xe3\x8b\x3f\x2a\xd6\x9c\xb3\x67\xf7\xf0\x5f\x5a\xbd\x78\xd8\x78\x59\x69\xf7\xc0\xe8\x3f\x5b\x33\x35\x5e\x9f\x7d\x8f\x38\x38\x3d\x6d\x40\xa0\x98\x23\x25\x42\x84\x84\x47\xfb\x88\x11\x71\x32\x34\x21\x50\x2d\xc3\x37\x44\x1a\x8a\x9c\x0f\x80\x29\xea\x06\xcf\x30\x00\x53\x48\xe8\x20\x68\x3a\x2c\x6f\x63\x31\x8c\x09\x67\xf2\x8b\xc2\x2a\xe3\xe1\x04\xfe\x89\x53\xf4\xe4\xcb\x5c\x2f\x5f\xdf\x6c\x69\x94\xce\x29\x3b\xef\xaf\xee\xd3\xe0\x21\x77\x3a\x7e\xaa\x68\xc0\x0b\x01\xc3\x79\x8a\xe5\x13\x14\xf4\xa2\xd0\xb3\x10\xb2\x54\x4f\x14\x28\xdd\x04\x7a\xe8\xf9\x02\x15\x22\x45\x75\x8d\x40\xd4\xbc\xd0\x0c\x4d\x4f\x71\x52\xe1\x27\xae\x6b\xa3\x34\xcd\x3e\x23\x98\x7a\xa1\x63\xe2\xab\xee\x35\x8a\x35\x6a\x56\xe2\x4d\xeb\x29\x8f\x5b\xfc\xfa\xd5\xcc\x64\x02\x23\x1f\xc5\x11\x19\x66\x7b\x0e\x09\x3c\xc8\xf1\xac\x0f\xec\x20\x92\x49\x57\xe2\xe8\x40\x40\x06\x23\x23\x81\x33\x29\x96\x16\x6c\xda\xd3\x81\xa7\x73\x38\x85\xa9\xb2\x06\x63\x67\x3d\xd5\x68\xd8\xbe\x25\x27\x93\x1f\xe7\xba\x99\xbd\xed\xe6\x2b\xc4\xb9\x11\xb5\x5e\xec\x9e\x34\xe2\x8b\x4b\xed\xdb\x0c\xbe\x30\x3d\x39\x39\x6d\xba\x26\xb1\xe9\xc1\x2e\xa1\x0b\x92\x42\x7a\xa1\x47\x99\xb8\x2a\x3b\x9e\x85\x02\xd6\x37\x4d\x96\x0e\x58\xc0\xd9\x3c\x6b\x30\xbc\x17\x08\x3a\x06\x15\x1a\x37\x7d\x9f\x45\xef\xc0\xc9\xff\xe9\x19\x37\xb1\x71\x86\x0c\x73\x52\x4e\x95\x32\xe7\x6f\xb7\x62\xea\x9d\xb3\xcb\x3b\x65\xce\x7d\x6a\x59\xb9\xed\xeb\x32\xaf\x6a\xbc\x76\x6e\x8e\x81\x1f\x77\xce\xd1\x9b\x5e\xf9\x47\xad\x38\x6a\xa4\x52\x84\x28\x85\x06\x42\xa1\x22\xab\x21\x8f\x34\x4d\xe0\x0d\x19\xc7\x2d\x5f\x52\xc5\x20\x92\x6d\x4f\xb4\x75\xde\x87\xb6\xe8\x07\x3e\xcd\xeb\x0a\x9b\x9a\x7a\xe7\xa1\xce\xe7\xaa\x8d\x2f\xb1\x6c\xf5\x98\x27\x9d\xfa\x88\xaf\xe4\xad\x0f\x77\xfc\xb8\xb9\xd5\xba\xe3\x3b\xed\xfd\x7d\x9b\xc3\xdd\x7a\xfc\x36\x2a\xb0\x1c\xcf\x8e\x3c\x5d\xd1\x4c\x5e\x22\x25\x5a\xf3\x3c\x4a\x50\x54\xda\x21\x38\xcd\xd0\x28\x4b\x51\xa2\x80\xf5\xd5\x48\xd6\x70\x64\xe2\xb2\x48\x92\x9a\x1c\x3b\xe4\x72\xb5\x37\xe4\x29\xa6\x49\xbb\xeb\x3e\x7b\x56\xec\x0d\x16\xe4\x82\x39\xee\x8d\x7d\x66\xde\xac\x58\xfa\xf3\xf5\x95\xbf\x27\x33\xa5\xed\xe9\x23\xf6\xf5\x3a\x0a\x45\xcb\x0e\xf5\x80\xc1\x0d\x49\xb2\x23\x60\xf2\x8e\xcf\x52\x21\xe4\x35\x8a\x65\x74\x1d\xa3\x4d\x95\xb2\x29\x4b\xc7\x3c\x08\x08\x47\xf5\x98\x54\x4c\xa3\xdb\x17\xad\x92\xb5\xed\xc3\xc1\x6b\xaa\xe6\x7a\xf9\xe6\xd5\xbe\x39\x6f\xda\x1f\x9c\x72\x8a\xc8\x37\x67\x4b\xc3\x33\xd3\x97\xf5\x6f\xcb\x7c\x1e\x47\x81\x3f\x3c\xa0\x55\xdc\x91\x04\x95\x36\x25\x86\xe5\x51\x80\x9c\x08\xea\x41\x14\x5a\x44\xc8\x49\xa2\x19\x58\x8a\xa5\x40\xd6\xd1\x4c\xc9\x07\xb4\xef\xe1\x7f\x71\xf9\x9f\x64\xfa\xdf\x20\x09\x89\x4d\x32\xa6\x4b\x97\x2d\x65\xc1\xef\xd7\x70\x41\x66\x6b\x44\xb9\xbe\xf0\x8b\x93\x7f\xe6\x9a\xd4\xae\xde\x34\xfb\x55\xd6\x7d\xf2\xf1\x6d\x39\x4b\x74\x3f\x99\x90\xa1\xd5\x96\xf8\xfd\x29\xaa\x67\xca\x2c\xaf\xb0\x21\x21\xaa\x94\xc0\x4b\x2e\xb4\x18\x1d\x0b\x44\x8e\xc0\xd4\x88\x70\x68\x9d\xd0\xa2\x40\xb2\x35\x16\xe3\x1c\x93\x62\x09\x8a\xc5\xde\x9d\x9b\x0d\x7c\xdc\x7e\xe9\xc3\x3f\x8e\xcc\xf9\xe1\x83\x55\x8b\x2e\x0f\x99\xf5\x45\xb3\x19\x43\xfc\xb9\x17\xa6\x7a\x2b\x96\x6a\x4d\xe6\x55\xff\x2c\x6d\x46\x16\xb1\x2d\xb1\x6d\x4e\x63\x29\x14\x70\xa4\xe3\x38\x28\xf0\x65\x9f\x74\x31\x46\x44\xac\x4a\x9a\x18\xa2\x81\x48\x71\x2a\x1d\xb9\x36\xef\x00\x0f\x07\x84\x84\x6b\x52\xec\xea\x79\xe4\xb7\x2a\x73\x96\xb4\x1a\x5b\x3a\x63\xcf\x8f\x37\xbe\x5e\x7a\x2d\x7d\xa9\xc7\xc3\xef\x0a\xdd\xc7\xae\xbb\xf3\x68\x6e\xe9\x69\x59\x97\x5d\x8a\x5f\x33\xc9\x0a\x08\xc8\xaa\x2b\x63\x0a\xe6\x6a\xc8\xa2\xa1\x24\x2b\x32\xae\x47\x3c\x16\x89\x5a\xa8\x58\x26\xd2\x34\x16\x28\x22\xa5\x4a\xbe\x13\xa8\xa2\x80\xa5\x92\xf6\x33\x5b\xdd\xdb\x11\xdc\xde\xdd\x32\xa9\xd5\xe4\xa4\xe7\xa5\xa8\x13\x33\x9e\x84\x46\x91\x5f\x6e\x17\xba\x7d\xb3\xd9\xee\xa3\xad\x3f\x2e\x13\x47\x16\xa8\x24\x1b\x8a\x29\x01\xc5\x27\x0c\x4d\x74\x0d\x91\x08\x45\xc2\x0c\x3c\x21\x20\x23\x3f\xa0\x0c\xc2\xd2\x2c\x9e\x04\x58\x00\x5c\x9f\x17\x30\xd5\xc0\xff\x3a\xa3\x9e\x65\xfa\xdf\xa0\x14\x89\x9f\x64\x05\x29\xeb\xfd\x67\x17\x5f\xb9\x4b\x8e\x18\xf9\x3e\xff\x24\x73\x86\x89\x9f\x67\x1b\xd4\xc6\x77\x17\x0c\xf9\x7c\x65\xa3\x9f\xd6\x2d\xa9\x73\xa3\xc7\xea\xb4\xa1\x81\x63\x73\x89\x3d\x40\x9a\x34\xa5\x40\x99\x97\x02\x4f\xc6\x78\x8f\x0f\xb5\x30\xf4\x10\x04\xae\x43\x06\xd0\x54\x59\xc4\x98\x08\x45\xb6\x60\x33\x24\xa4\xb1\xbf\xb1\x44\x52\x8e\x3c\x6e\x96\x0b\x0e\x0c\x18\x3e\x7d\xcc\xac\x74\x09\x78\xc3\x3a\x85\xf6\x4c\x78\xb5\x1a\x7d\xbf\xb2\xe7\xc2\x59\x83\x2f\xec\xa4\xa7\xa5\x8d\x32\x9a\x1a\x3c\x11\x41\x35\x62\x48\x4e\x09\x48\x11\x98\xa2\xeb\x01\x8f\xd4\x30\x4c\x77\x05\x02\x28\x04\xcd\xb0\x9e\x4c\x45\xba\x48\x1a\x74\x80\x18\xca\x71\x52\xc9\xa2\x63\x7d\xa6\xcf\xcd\xdc\xea\x87\xdd\xdf\x89\x43\xd7\xe6\x38\xdc\x50\xeb\xb6\xb4\x75\xc9\xad\x6d\xae\xc0\xaf\x5b\x1e\x2d\x39\x6d\xd0\x62\x3f\x7e\x59\xa4\x30\x62\xa0\xe2\xff\x8f\xb5\xf7\x8c\xb6\xa2\xe8\xb6\x86\xc9\x49\x32\x08\xa2\xe4\x1c\x04\xa1\xbb\xab\x9b\x2c\xe1\x80\x04\x91\x28\x49\x82\xd5\xb9\xab\xab\x73\x6e\x24\x1d\x14\x24\x49\x96\x28\x19\x04\x05\x24\x8a\x04\x11\x90\x9c\x73\x10\x10\x14\x24\x29\x51\xa2\xa4\x6f\xdc\xcf\xf1\xbc\x3e\xe7\xb2\xcf\xf0\x8e\x33\xf6\xff\xfd\xa3\x76\xf5\xac\x55\xab\xd6\x5a\x73\x4e\x5b\xd0\x63\x8e\xd6\x6d\x8b\xd4\x10\x08\x1d\xdd\x75\x55\x45\x31\x58\x89\x0f\x7c\x45\x16\x15\x21\x24\x90\xe0\x33\x2e\xe9\xc9\x22\x4e\x87\x4b\x9c\x77\xf4\x5c\xb9\xe6\x80\x2f\x5e\x34\xfb\x1a\xb5\x18\xb2\x7e\xd8\x94\xba\x9b\xfe\x58\xfa\xe1\xa9\x6e\x7f\x14\xb9\xd3\xfb\xaa\xf8\xce\xb8\x3b\xc9\xdb\x65\x0c\x5c\xd7\x52\x63\x07\x88\xa4\xce\xcb\x14\xc3\xb0\x14\x41\x43\x36\x36\x49\xdf\xb1\x0c\xd2\x70\x63\x85\x13\x2d\x02\x89\xb6\x61\x70\x1e\x43\xc9\x7f\x57\x69\xd2\xe8\x76\xfe\xdb\x10\x48\x6a\x4a\xb1\x82\x83\x9a\xa4\xd5\xed\x2c\xd5\xe2\x97\x9b\x3f\x2c\xcd\xdd\x63\xf7\xf0\x75\x6b\x7f\x6e\x75\xae\x54\x3f\x5e\xce\x3b\x3b\xa2\xb7\x75\x9d\xfe\xcb\xaf\xed\xbf\x6c\x9c\x3c\x65\x52\x28\xd8\x1c\x54\x03\x97\x51\x0d\x41\xe3\x25\x19\x89\x91\x11\x2a\xba\x0d\xbd\x58\xa1\x69\x46\x60\x23\x1b\xcb\xa1\xee\x7b\x3a\xa0\x22\x11\x42\x15\xf2\xe9\x68\x62\x97\xe8\x95\x6b\x41\x2d\x7b\x51\xf8\x6d\xb5\x7a\xc2\x6f\x3f\x7d\x11\xd5\xc4\xb3\xda\xcd\x3d\xf7\xa4\x7e\xa6\xbd\x6f\xe4\x51\x8b\xe2\x8c\xd1\xe8\x13\x4b\xbd\xb0\x51\xe0\x93\xc8\x88\x69\xd1\x26\x59\xa8\xb2\xb2\x2d\x45\x64\xa0\x42\x36\xe2\x21\xd6\xf4\x38\xd4\x0c\x31\x06\x40\xf0\x24\x8f\x8e\x24\xc0\x28\x7e\xe2\x54\xa7\x11\x5a\x5f\x9f\xbc\xb2\xe8\x5c\xab\x39\xe5\x9a\xb2\xf5\xbc\xb2\xd3\x73\xb5\x4e\x6d\xbd\xf1\x3b\x7b\x02\x48\xe9\x72\xaa\xda\xe2\x8c\x99\xe9\x26\x9e\xcc\x8d\x03\x1f\x8a\x21\x42\x8e\xcd\x86\xb2\xa8\x23\x41\xa1\x1d\x91\x0e\x19\xd5\xa0\x2c\xc9\x0a\x58\x96\x60\x05\xa4\xd9\x11\xa3\x06\x41\x1c\x7b\x86\x93\x0e\xf3\x3f\xfb\x5a\xe1\x87\xdf\x6a\x88\x2d\xdb\xee\xaa\x76\xf6\x54\x96\x8f\x06\x1c\x6e\xd5\xea\x53\xa7\xdd\x17\xf7\xf6\x3f\xde\x3a\xee\xdb\x31\x0f\x92\x47\xf0\x86\xaa\xe5\xa9\x4e\x84\x75\x55\x77\x3c\x91\x74\xd8\x80\x90\x45\x8e\x52\x0d\x2c\x62\x06\xb9\x84\xe3\x93\xb6\xc8\xc7\x1e\x62\x42\x5d\x16\x03\x44\xb1\x6a\x3a\x6d\xca\xdc\xcf\xba\x4f\x9d\x5a\xa3\xcd\xf8\x16\xdf\x8c\x5f\xb4\xef\x72\x16\x4f\x3d\xf2\xeb\x67\x8d\xb6\x58\x05\xea\xf4\x38\xdd\xe8\x83\x7c\x7c\xc6\x94\x50\x12\x77\x12\x14\xcd\x05\x44\xc8\x60\x95\x92\x63\x85\x16\x21\x96\x03\x10\x05\x98\x14\x29\x93\xb3\x29\x0b\x12\x82\x6c\x71\xae\x6f\x29\x51\x1c\x70\xb1\x4f\x23\x3b\xf1\x2e\xdf\xf2\x53\x83\x27\xce\x8d\x22\x15\xe7\x65\xd9\x31\x30\xfb\x6f\x65\x76\x34\x1c\xd2\xf4\xfd\xed\xe5\x4b\xd7\xd9\x7f\x60\x2c\xfa\x2a\x73\xc6\xec\x3f\x13\xdb\xa0\x3b\x34\x17\x10\x92\xa0\xd1\x24\x1b\xc6\x2e\x25\xe8\xba\x43\x89\x21\x8c\x05\x9d\x25\x18\x04\x7c\x55\x11\x4c\xde\x94\x04\x18\xf0\xa2\x04\x55\x5f\xfd\x27\xa1\xfc\x4f\xdf\xef\xdf\xe6\xc6\x52\x53\xca\x66\x6b\x9a\x39\x6d\xb9\x6f\xd7\x5f\xfe\xb8\xe5\xdd\x3e\x7d\xb6\x7e\x7b\x8b\x81\xf9\xb6\x14\xb9\xbd\x6b\xf5\x6b\x83\x1f\x55\xb5\xf3\x8d\xda\xf5\x73\x81\xeb\x07\xba\x6d\x49\x62\xed\x2c\x08\x5c\x0b\x99\x96\x13\xaa\x8e\xe8\x31\x3e\x66\x54\x46\x74\x28\x45\x93\x39\x2d\x08\x68\xd6\x50\x02\xce\x81\xb4\xaf\x18\xa2\x67\xb1\xbe\xae\xb9\xe9\x14\xa2\xb6\xdf\x98\xf7\xbe\x43\xee\x1e\xd1\xa7\x4c\x73\xfc\xd1\x83\x1a\xf3\xfa\x4c\x1b\x74\xa9\x70\x33\x29\x73\xdd\x3e\x15\xe7\xf6\xdf\x78\xfe\x72\xf2\x2e\x2a\x43\xb7\x65\x48\xdb\xd8\x08\x62\x35\x24\x24\xd9\x90\x19\x91\x16\x6c\x05\x18\xc8\x16\x0c\xc4\xba\xd0\x8c\x08\xd5\x63\x59\xc6\x32\xa0\x24\xc5\x7a\x9c\x8e\x58\x5d\x97\x2d\xaf\xde\x7c\xb7\xe2\xdd\x69\xcb\x8e\x0c\x7b\x51\x65\x7f\xdb\x42\x71\x9f\xd7\xbf\x9c\xf4\x61\x27\xf9\x95\x66\x3f\x0f\x28\xb8\xa0\xe1\xfa\xe4\x2d\x59\xa3\x04\xc2\xe1\x78\xe8\xc8\x76\xc8\x02\x32\x0c\xcc\xd8\x56\x24\xd9\x61\x23\x96\x02\x4a\x04\x03\x99\x04\x96\x44\xa8\xbc\xa4\x29\x92\x11\x43\xc5\x62\x13\xcf\xd2\x94\x2f\xb6\xfb\x41\xb7\xe5\x6f\x5e\xab\xaa\x4f\x1b\xd2\xf4\xf4\xf5\xaa\x4e\x6a\xe5\x37\x73\xdf\x2f\x3f\xe3\x59\x99\x3e\xb3\x17\x4e\x9e\x07\x92\xb7\x64\x99\x0d\xfd\x38\x84\xd8\xf5\x48\xc4\x7b\x16\xcd\xfb\x3e\x13\xfa\xb6\xc2\x91\x32\x1f\xb8\x40\xe1\x02\xc8\x29\x82\xc2\x46\x0c\xcf\x73\x80\xc1\x91\xaa\xbc\xdc\xf7\x3b\xbe\x66\x63\x34\xfe\xe1\x3d\xf3\xd3\x0d\x1d\x5f\xec\xea\xf0\xea\x90\x76\xfd\x66\x9c\xfe\xfd\xde\xb5\xc2\x1d\xea\xba\x5b\xcf\x7d\x52\xa5\x5d\x12\x2b\x61\x10\x2a\x54\x68\x58\x48\x54\x94\x20\x56\x35\x37\xf2\x35\x07\x12\xa1\xc4\xf8\x3e\x65\x9b\x2e\x32\x35\x47\x31\x1d\x8a\x51\x81\x29\x84\x04\x2d\x45\xe9\x68\x74\x74\x2d\x52\x64\x41\xef\xc1\xf5\x2e\x5c\xdf\x5c\x6e\x5f\x93\xec\x63\xbf\x08\xc6\x14\x59\xf1\xbc\xe8\xf1\x5c\x7b\x4f\x0c\x70\x56\x7f\x45\x65\x2c\x7b\x49\x18\x5c\x48\x1e\xfb\x91\x2b\xca\x10\x47\x48\xe2\x78\x0e\xf8\xbe\x45\x05\x20\x72\x55\x5e\xf7\xf9\x98\x37\xf8\xd0\x41\xa6\x40\x60\x81\xa4\x63\x83\x92\x0d\x2e\xfe\x7f\x4b\xfe\x4f\xf6\xf2\x6f\x53\x85\xa9\x29\xd9\x8b\x14\xcc\x94\x36\x7b\x79\xbf\x43\xb6\xa6\xbc\xbb\x7d\x54\xae\x72\x4b\xaa\xf6\x5e\x7e\x72\x5c\xf9\xe5\xbb\x5b\x36\x1a\xbf\xee\xfb\x5e\x4b\xce\x2f\x7e\xe3\xc0\xa6\x59\xc9\x0b\x2e\xbc\xae\x1b\xa6\x8e\x85\x20\x34\x09\x1c\x59\x0c\x8b\x23\xe8\x38\x40\x22\xb0\x16\x72\x22\xf4\x54\xc1\xa2\xa0\x8d\x58\x83\x60\x55\x4d\x76\xa0\xc5\xa7\xa3\xb0\x3b\xe2\xd0\x87\xca\xec\x1c\x51\xaf\xa5\x97\xf3\x2e\x9b\xbb\x7d\x56\xfb\xa3\xa3\xd9\x0b\x03\xc6\x76\x95\x4e\x2c\xab\x3b\x64\xd0\xe6\x07\x73\x93\xf7\xd6\x30\x1c\xc9\x16\x01\x6b\x1a\x7e\xcc\xf0\x3e\xc5\x72\x8e\x4c\x9b\x92\xab\x6b\x9e\xe0\x98\x01\x2b\x58\x21\x46\x9a\xad\x87\xae\xae\xa9\x41\x60\xd3\x1e\x9b\x4e\x3c\x9c\xd8\xf6\xc6\xab\x33\x76\x75\xda\xfc\x96\x31\x28\x60\xde\xe0\xd4\x15\x8f\xef\xe6\x7e\x58\x89\x99\x74\xe1\xb7\x8d\xfa\xa8\x2b\x4e\xc6\x82\x4b\x62\xf3\xbe\xc8\x8b\x5d\x32\x72\x44\x0b\x06\x41\xec\xd2\xb4\xca\x78\xac\x24\x11\x01\x26\x2d\xce\x67\x49\x15\xc7\x2e\x14\x44\xe4\xcb\x7e\xcc\x19\xbe\x21\x5b\xe9\xd8\x63\xfc\xfa\x5e\xf0\xc1\x4d\x60\x0e\x7f\xd4\xe3\xc9\xfe\x94\x42\xd4\xbc\xee\xcc\xf1\xfb\xd7\x5b\x34\xef\x9e\xa3\x70\xb9\x32\xb5\x29\x26\x89\x04\x56\xcf\x33\x14\xc5\x8a\x80\x2c\x3a\x01\x24\x45\xe0\x49\xb6\x28\x2a\xb6\x4d\x4a\xaa\x18\xaa\xbe\xe8\x84\xbc\xac\xb8\xa6\xe9\x0a\x6e\x08\x81\xaa\x29\x84\x9d\x78\x97\xf3\x34\xce\x5c\x6e\xc2\xaa\xcb\xdd\x17\x6f\xc7\x75\x8f\xcf\xcd\xdd\x79\x4f\xe6\xf5\x5a\xf1\x6a\xaf\x76\x3b\x7e\x7a\x2e\x58\xd4\x8a\x6e\x95\x3c\x2c\xdb\x92\x2a\xa8\xbc\x19\x0b\x0e\x66\x2d\x20\xeb\x96\x4c\x79\x82\x10\x3a\x81\xe4\xe9\x81\x21\xc5\x06\xcf\x60\x5d\x88\x78\x92\xf0\xa1\xaf\x2a\x4e\x4c\xc4\x89\x97\xdc\xaf\xd2\xaa\x72\x0d\x57\xef\x9c\x51\xf5\x69\x95\x9c\xcb\x8d\xe6\x6d\x1f\x7a\x45\xe6\x32\x43\xf3\x14\x5f\x1e\x2c\x2e\xfb\xd9\xab\xc1\xfc\x24\x8e\xb2\x51\xa6\x61\x31\x56\xc0\x98\x1c\x76\x74\xd7\x20\x10\x00\x91\x45\xaa\x1e\x8b\x01\x32\x78\x1b\x58\x5e\x04\x75\xc2\x88\x18\x4f\x0d\x2d\x42\x09\x49\xf9\x25\x45\x9d\x7f\x1b\x44\x4e\x6d\x9e\x65\xca\xff\x52\xda\x6d\xdd\xa6\x6f\xd6\x1e\xbd\x46\x2e\xce\x7f\x7b\x6c\x9e\xd6\x87\xab\x5d\x9e\xb6\xbb\xfa\x1b\x85\x86\xf5\xee\x00\x76\x4b\x2b\x8f\x16\x38\x93\x44\x87\x44\x3d\x24\x3c\x13\x73\xb4\x01\x3d\x18\xd1\x0c\x29\x13\x18\x12\x01\xa5\xd2\xba\xaa\x06\xb2\x4b\x93\x1e\x14\x18\x51\x97\x29\x47\x71\x81\x4a\x41\xc8\xa6\x23\x32\xc6\xce\x19\xf9\x87\xd1\xf4\xea\x1b\xbf\x7c\xda\xb9\xc9\xa8\x76\x5e\xca\xab\x75\x0a\x56\x59\x52\xe1\xb1\xd9\xf8\x44\xa6\xc6\x33\xab\x17\x69\x99\xbc\xc3\x4a\x30\x02\x2f\x20\x01\x06\xb4\x2b\xa8\x9e\x1f\x86\x4e\x4c\xc5\xc0\x14\x50\xcc\x51\x84\x41\x90\x8a\xac\x21\x96\xf0\x02\x2d\xb6\x64\x03\xb2\x91\x87\xa2\x74\xe4\x00\x3b\xde\x5c\xd9\x7f\x4b\xa6\xe6\x13\x33\xed\x9a\x50\xfe\xc6\xdd\x1c\xa5\xb6\xb6\xce\xdf\x66\x7c\xfd\x2d\xcb\xf7\x16\xfc\x2a\x7c\xbb\x41\xc6\x60\x94\x30\x13\xd0\x7d\x9e\x02\x58\x57\x5c\x4a\x97\x4d\x41\x63\x39\x01\x6a\xbe\xc4\x99\x3a\x1f\x21\x95\xa5\x98\x80\x32\x02\x07\xb1\x0c\xc0\x0a\x21\xd2\x86\x22\xa4\xa7\xd8\x75\xe7\x9d\x3a\x3f\x1c\x1d\xb5\x6e\xca\x7d\xbb\xfd\xb0\x51\x4b\x0e\xc9\x13\xde\x2c\x33\x7a\xc4\x67\x97\x73\x7d\xab\x74\x5d\xe8\x4b\xd3\x1e\x25\x0f\xf9\x9a\x24\xa1\x50\xb0\x35\x16\x44\xb2\x2a\x12\x82\xc5\xd2\xa1\xe1\xd8\x8c\x8b\x15\x9e\xa5\x6c\x3d\x24\x80\x61\x02\x80\x5c\x56\x25\x81\x11\x63\x3b\xa2\x5f\x42\xfe\xbf\x0d\xd5\xa7\x36\x2f\xbb\x79\x50\x5a\xe4\x57\x7f\xef\xab\xfa\x7b\xae\x75\x2b\xf1\x15\xdd\xfb\x58\x9e\xdf\x0f\x3a\x8d\xbd\xe3\x59\x46\xdd\xec\xf3\xda\xf6\xbe\x4b\xda\x06\x3d\xcd\x03\x49\xd4\xfc\x36\x6c\x5f\x31\xb1\x60\x20\xcf\xb0\x3c\xcd\x65\x2c\xec\x4b\x01\x63\x4b\x50\x91\x59\x81\xa3\xf8\xc8\x53\x0d\x5e\xc4\x41\x20\xc8\x42\x14\x11\x0a\x4c\xc7\x6e\xd0\xbe\xfa\xd7\x99\x9f\x7e\x97\xbc\x9f\x3b\x9c\x2a\x94\xad\xd1\xba\xb5\x55\xc9\x47\x27\x77\x95\x18\x12\x14\x2d\x7e\xe5\x69\xaf\xba\xb3\x93\xf8\xc8\xe6\x24\x37\xa4\x18\x1f\x93\x06\xe7\x0b\x94\x82\x62\x89\xc4\xae\x48\x62\xde\x20\xb0\x24\x78\x30\x8a\x78\x4d\xc5\xa2\xed\xb8\x04\xe5\x48\x76\x14\xa4\xb7\xe4\xbe\xa5\x87\x4c\x6c\x3e\xab\xe5\x9d\xdf\xbd\xf9\x1f\x4d\xae\x0c\xf7\x14\xdf\xd0\x72\xfc\xa3\x8a\xe3\x5f\x2d\x3d\x98\x29\xf1\x69\x83\x4c\x67\x93\x48\x35\x0a\x7d\x44\x84\xb4\x15\xa1\x50\xa7\xe5\x00\x39\x81\xe1\x9a\xb1\xc0\x51\xc8\xe3\x1d\x18\x70\x1e\xd0\x3c\x14\xb0\xbc\x13\x6b\x92\x2a\xf8\x96\xe7\x30\x89\x0f\x6b\xbe\x81\xb5\x57\x4f\x2e\x5a\x6c\xd9\xd3\x89\xfb\x94\x55\x7b\x2a\x66\x3f\xb4\xee\xbd\xde\xb9\x7f\x7c\x7f\x62\x8b\xb1\x7d\xbb\x3e\xae\xb4\xa5\x6b\x12\x4b\x62\x06\x2b\xf2\x96\x8b\xc4\xd0\xf1\x55\x92\x86\xa2\xc7\x30\x0c\xc3\x5b\x9c\x86\x43\x82\x63\x1c\x3f\x52\xcc\x40\x85\x98\x32\x62\x81\xe7\x28\xde\x43\xff\x90\xeb\xfe\xe3\x90\xf8\x6f\x04\x91\xd4\x94\x82\x99\x8a\x66\x4e\x0b\xfd\x86\xd5\x6a\x7f\xf7\x56\xd6\xca\x4f\x4b\xd1\x53\x61\x8b\xfe\x77\xa6\xff\xb8\xe7\x7a\xdd\x6c\xe2\xa2\x3f\xd7\xbc\x32\x64\x69\x99\x7c\xfb\x32\x56\xa7\x4c\xf8\x51\x4c\x1f\x23\xc6\x93\xac\x80\xc6\x1e\x13\x23\xd3\xf6\xc4\xbf\xff\x0b\x1b\x32\x00\x29\x86\xa6\x92\x1c\xaf\x71\xaa\xef\xc4\xbe\xa5\xb2\x32\xfe\xbb\x40\xff\xf2\x47\x79\x72\xa4\xe0\xc2\x3d\x5a\xf1\x4b\xde\x1b\x05\x9f\x9e\xfa\x60\xf7\xf2\xc5\x59\x6f\xed\x7e\xeb\xeb\x4d\xc7\x61\x8f\xd9\x9f\xcc\x6a\xe1\x65\x2c\xa9\x4c\x08\x7d\x97\x60\xf8\x90\xe6\x24\xda\x71\x39\x46\xe0\x70\x28\xf2\x8e\xa8\x19\x40\x24\x68\x87\xf2\x09\x2c\xe2\x38\x62\x4d\x47\x63\x90\x81\x23\x5f\xe0\xa0\x9a\x8e\x8b\x53\x89\x69\xa0\xdc\xf7\xbf\xbd\xb9\x66\x64\x8b\x6d\xfe\xac\x5a\xeb\x72\x55\xe9\x94\x52\xf7\xcf\xce\x53\x7f\xec\xf5\x46\xe1\x7c\x25\x8b\xe4\xbf\x9a\x3c\x1c\x99\x72\x18\x7b\xa1\xe2\x3b\x04\x23\xcb\x8c\x10\x8b\xbc\x22\xd2\x3e\x56\x62\xcf\x64\xa0\xa5\xd0\x76\x8c\xa0\x8f\x35\x0a\x88\x38\xd4\x03\x42\xe2\x95\x74\x32\xb4\x62\xb9\x96\xae\x2b\xfa\x24\x3e\xf7\xd7\x13\xf8\xf4\x93\xfd\x29\x3f\xaf\xaa\xdb\x6d\x69\x9f\x54\x2e\xfe\x6c\xce\x36\x75\xe7\x7b\xef\x3e\x4b\xe2\x34\x59\x44\x9a\x1e\x11\x18\x2a\x1b\x11\x8a\x81\x39\x2d\x8c\x68\x0c\x2c\x1f\x08\x22\xd4\x19\x8c\x14\x01\x01\xd3\xf5\x43\x64\x91\x3a\xb6\x39\x37\x56\xff\x21\x06\xfe\x27\xe8\xff\x1b\x75\x28\xb5\x79\x96\x2c\xe5\xd2\x22\x1f\x4c\xbf\xd3\xa6\x47\xdb\xdb\x7d\x73\xad\xdc\xb8\x6a\x42\x15\xa3\xe5\xec\x01\x7b\x1a\x7f\x78\xf9\x7c\xb7\xef\xa7\x15\x78\x1c\x96\xb9\xf7\x45\xf2\x60\x14\xb2\x26\x70\x05\xc0\x41\x2d\x08\x5d\x1a\x23\x52\x04\x92\xe1\x78\x24\x6f\xb0\x2a\x86\xbc\x29\x72\x3e\xc9\x88\xb4\x08\x44\x60\xea\xc8\xc5\xaa\x92\x4e\x04\xcd\xdf\x41\x99\x9b\xf9\xf0\xf1\x46\x4f\xee\x9c\xdb\xd1\xbf\xf5\x3b\xe4\x85\x62\x1f\x4c\x9b\xf2\xc7\xb9\x65\xbf\x0f\x19\xcc\xb7\xdd\xfb\xed\xe8\xe4\x65\x68\x90\x95\x71\xc4\xc7\x9c\x00\x39\x1d\x23\xca\x0e\x10\xe3\x06\x82\x09\x58\x51\xd6\x62\x87\x0b\x55\x4b\xb5\x62\x92\x21\x28\x53\x53\x0c\x2c\xb9\x12\x24\xd2\x79\x01\xbe\x75\xb5\xe6\xab\x85\x7e\xfa\xf3\xe8\xd5\x96\xf6\x77\xdd\xb9\xd2\x67\x5f\x2f\xfe\x49\x91\xcc\x05\xbd\x16\x8f\xa7\x9e\xbc\x89\x3e\x4e\x9e\x7f\x19\x4b\x8a\xb1\x23\xda\x1c\x65\x9a\x90\xa0\x80\x26\x62\xc9\x70\xa3\x08\x46\x3e\xa7\x33\xae\x6a\x01\x07\x90\x08\x7a\x51\xe4\xc4\xae\xaa\x33\x84\x41\xda\xe9\x0c\x25\x82\x9f\xf2\x75\x0b\x94\xa7\x37\x1a\xf8\xeb\x7e\x7f\x67\xc2\x86\x6d\x65\x47\xff\x3c\xfb\x87\x2f\x09\xcc\x74\xeb\x31\xb2\xd9\x89\x8e\x19\xeb\x12\x24\x04\x06\x63\x05\x20\xf6\x6c\x2b\x70\x29\x85\xd6\x95\xd0\xc7\xb4\x63\xd1\x8e\xc2\x99\x7a\x1c\xab\x26\x4b\x47\x9a\xcf\xc5\xa1\xa4\xe3\x80\x73\x1d\xd1\x62\x9d\x7f\x86\xf7\xef\xd6\xfb\x7b\xb5\x43\xf3\x6d\x5c\xd7\x63\xcc\xb2\x69\x8f\x8b\x1a\x75\xee\x0e\xad\xd5\xe9\xfe\x8e\xd5\x9d\xfa\x15\xef\xbe\xbb\xc0\xa7\xf5\x6e\xec\x3c\xa3\x2f\x48\x4d\x39\xff\xec\xe1\xc3\x29\x25\xd3\xda\x3d\x5c\x7a\xb6\xdd\x9f\xb8\xbc\xd5\xb6\x83\xe3\x3a\xac\x3a\x2d\x77\xed\x39\x6b\xec\xfc\x9d\x07\x3f\xa3\xb3\x9f\xae\x79\xbf\xd5\xf7\xdd\xee\x26\x2f\xea\x47\x3a\x70\xb0\x4a\x61\x81\x93\x62\x5e\xb4\x63\x9a\x8a\x2c\x06\xd3\x82\xaa\x9b\x46\x28\x11\x80\xf7\x7d\x56\x66\xd4\x90\x75\x44\x53\xa6\x02\x88\x71\x3a\xa6\x1a\xcd\x7a\x36\x19\x39\x7c\xd7\xcd\xdd\xcb\x16\x35\x2e\xf9\xc9\x3b\xb3\x0a\x56\xae\xdc\xa8\xc3\x81\xeb\x3b\x83\xc2\xf5\xf9\xf5\xd5\x53\x8e\x27\xd1\x03\x12\x78\x91\xc9\xc8\x86\x49\x01\x03\xda\x36\xe0\x58\xcb\xf3\x14\xdf\x96\x03\x05\xf0\x9e\xe4\xb9\xac\xc5\x38\xa1\x2c\x72\x1e\xc4\x1c\x22\x0c\x9a\x27\xdd\xc4\xc3\xfe\x66\x0e\xea\xb9\xc8\x16\x3c\x7b\xc5\x6d\x7c\xbd\x94\x5c\x98\x78\xb4\xff\x02\xd5\xe2\xaf\x6f\xba\x74\x6d\xd9\xbb\x0c\x4b\x9d\xcf\x18\xb7\x3a\x31\x3f\xc1\x90\x63\x03\x59\x74\x14\x7b\x91\xea\x38\x34\x2f\xb1\x12\xef\x31\x94\x66\x2a\x2c\x67\x11\x91\xa7\x53\x9e\x14\x52\x92\x1a\x98\x81\x11\x09\x00\x45\xd6\xcb\xe3\x05\xf3\xf3\xe4\xb0\x72\x57\x34\xc2\xeb\x43\xea\x1d\xdb\x74\xca\x1e\x3a\x6a\x41\xc9\x5f\x3e\xcd\xb7\xa7\x6c\xc1\x1e\x97\xbb\x8c\x99\x5a\x35\x5b\xf2\x76\x98\x8d\xb1\x6b\x87\x5a\x2c\x02\x4b\xe6\x38\x9e\xd1\x4c\xe0\x4a\x30\xe2\x04\x27\x72\x59\x4b\x06\x1c\x01\x44\x10\x12\x34\x29\x21\xd5\xa7\x05\x40\xfc\xed\x7c\xf3\xf2\x0e\x97\xea\xf4\xd7\x90\x45\x29\x45\xbe\x7e\xba\x7e\x62\xfb\x5f\xbb\x2f\x7a\xfd\xee\xf9\x9d\x85\x76\x37\x59\xb0\xa7\xff\xfb\xe5\xde\xf8\xe6\x86\xfb\x30\x89\x5a\x0d\xa2\x2c\xc4\x0c\x88\x68\x11\xfb\x36\x85\x05\x85\x26\x4c\xa4\x84\x3a\x47\x05\x50\x31\x10\xf2\xb0\x6f\xeb\x80\x93\x75\xcd\x8f\x5d\x05\xbb\x80\xa3\x5f\xde\xe1\xf6\xfb\x2e\xd4\xfc\x60\xd0\xfa\x6d\xfb\xbe\x5c\xcb\x8d\xfb\x12\x7f\xbb\xae\x3f\x38\xfb\xfd\x77\xc3\x9f\x7b\x23\x07\xf4\xf8\x69\x41\xef\x8c\x39\xb1\x27\x96\x89\x12\x02\x36\x8a\x42\x33\x54\x4d\x2a\xa6\x02\x97\x37\x08\x4b\xb0\x14\x86\x92\x23\x89\x54\x5c\x9a\x0e\x7d\x4e\x0b\x31\x32\x02\xac\x62\x0f\x6b\x3e\x2b\xa7\xa7\x34\x56\x7f\x5c\x91\x37\xfa\xf7\x29\x94\x69\x61\xf9\x7e\x77\x97\xac\xfa\xb4\x73\xbf\xdc\x27\x87\xb4\x8c\xaa\x09\x1b\xcc\x5b\x95\x5f\x1b\xf3\x38\xad\x51\xeb\xa6\x2d\xa5\xea\xdf\xad\x58\xb7\x5a\xd7\x0f\x57\x4f\xbc\xd5\xe8\xb6\x74\xaf\xc7\xe6\xb1\xd3\xed\xfc\xf5\xbb\x97\xac\xbf\x7a\xe1\xf6\xe4\xa9\x09\xb0\x84\xee\x72\x8c\x02\x74\x4f\xa6\x91\x6b\xd2\x31\xa9\x20\xc1\x15\x08\x4f\xf7\x09\x28\x52\x84\xf7\x3f\xa1\x27\x8c\x30\x64\x44\x93\xa4\x43\x8b\xe7\xd2\xfa\x96\xfd\x03\xa1\x9e\xdb\x5f\x79\x3f\x8c\x9b\x7c\x5c\x7f\xd2\x84\xa9\xcb\xab\xad\x2f\xd6\x79\xc6\x84\x51\x13\x9a\xf6\x98\x94\x52\x43\x6f\xd2\xb1\xd3\x84\x8c\x99\xf5\x24\x0e\x85\xbe\x68\x06\x92\xe2\x98\x96\x89\x0c\x07\x69\x44\x10\xca\x0e\x90\x4c\x42\xf0\x68\x60\xe9\x32\x8d\x15\xcf\xd5\x0d\x37\xe2\x94\x08\xbb\x80\x70\x08\xf8\xf2\xd0\xe7\xb7\x0b\xd6\x4e\x6a\xdc\x2d\xcb\x7b\x47\xca\x78\x35\x9b\xee\x5d\xfe\xea\xa7\xb7\xbe\x1d\x9d\x6a\x1c\x1f\x5a\xf3\x30\xd9\xb3\x5d\x9f\xcb\xc9\x93\x3d\x62\x03\xc2\x57\x05\x9e\xf4\x02\xd1\x08\x23\xc9\x04\xb1\xee\xc6\x11\x61\xf2\x36\xa9\x80\x10\xd3\x2e\x45\x5a\xba\xa6\x52\x9c\xa3\x7a\x56\x60\xcb\xa2\xc3\xd1\x89\x7b\x1f\x37\x8d\x55\xa7\x6b\x17\xba\xd8\x25\xf7\x60\xbd\xf2\xfe\x9b\x33\x67\x1c\x4b\x19\xf7\xf6\xe5\x1a\xd7\x26\x9d\x5f\x3f\xb5\x0c\xdd\xea\x44\xc6\x06\x4e\x12\x0f\x18\x12\x58\x60\x2c\xe6\x7f\x5e\x49\xba\x0d\x1d\x22\xb4\x68\x48\x45\xa6\xa6\x7a\x8a\x6c\x50\x08\x04\x48\xe4\x48\x68\x53\x8a\x4c\xd2\x2e\x84\x9a\x1b\x71\x2f\xef\xf0\xc3\xd5\x8b\x9d\x21\xfa\xc6\x9c\x65\x27\x8c\x9a\x7d\xfb\xbd\xc3\x39\xbe\xdd\x13\xed\xe9\x53\x14\x36\x2e\xd8\xaa\xd6\xc8\xe0\xed\xf6\x19\x23\xab\x24\x4e\x7c\x05\x8d\x92\x23\x5f\x36\x15\x2e\x94\x1d\x8a\x17\x18\xda\xf7\x6d\x36\x42\x81\x1b\xb1\x9a\x89\x78\x2c\xe8\x98\x61\x79\x32\x02\x8e\xaf\xf9\x44\x94\x46\x70\xf1\xbf\x0f\xe9\x81\xab\x75\x4e\x97\xbf\x7d\x62\x2d\x73\x69\xac\x3b\xb6\x34\xdd\x63\xd9\x8b\x9b\x45\xdb\xbd\xf6\xeb\xa7\xaf\xcc\x7e\xf2\xde\x1f\x27\x86\x71\x69\x34\x2e\x26\xcc\x9f\x7f\xf0\x76\xa6\xce\x27\x67\xee\xbd\x5d\x61\x4a\xef\x11\xad\x67\xa1\x7e\xcc\xce\x29\xdf\xfe\xd6\xbe\x7a\xc3\x99\x5f\x4d\x2c\x7c\x2e\x89\x45\xf9\x98\xd4\x48\x99\x17\x18\x2a\x94\x63\x06\x3a\x24\x1b\xc8\xa2\x15\x42\x1b\xc6\x2e\x62\x7d\x8b\x51\x0d\xc7\xc4\x80\xd2\x19\x53\x85\x9e\x00\x4c\xd6\x7f\x39\x68\x4e\xa6\x4a\x65\x6e\x3f\x22\xe7\xf0\xa3\x13\x8c\x21\x07\x52\x6b\x67\xde\xb4\xb6\xf8\xd8\x82\x65\x36\x15\xca\x92\xda\x2f\x0b\xd9\xe9\x87\x8e\xc9\x0b\x9a\x8e\x2b\x3a\x22\x65\xb3\x22\x61\xba\xba\xa2\x07\x4c\x10\x53\x0a\xed\x60\x91\x47\xa1\x17\x93\x82\x28\x90\x86\x48\xc8\x24\x1b\xd2\x3a\x1d\x92\x1c\x56\xd1\xcb\xcb\xdd\x7e\x6e\xee\xa7\xab\xb9\xcd\x13\x07\x7e\xdf\xa8\xd9\xdb\xb3\xae\x8d\x7e\xb8\xfb\x80\x3b\x6e\xe5\x65\x70\x75\xdd\xc6\xdf\xab\x0f\xa9\xf7\x38\x79\xbb\x1b\xdb\x0e\x0c\x90\x8c\x44\xdd\xc3\x8a\x16\x08\x24\x52\x3c\x85\xe7\x24\x42\x63\x44\x5e\xe4\x30\x43\x84\x81\x1f\x72\x86\x65\x2b\x9c\x66\xba\x8c\x4c\x58\x89\x73\xf4\xcd\x2d\xde\x2c\xd6\x84\xe8\x70\xea\x6a\x20\x7f\x18\x56\xb9\xeb\x0f\x1b\xb3\x32\xc5\x18\x77\xf1\xc1\xeb\x97\x4f\x7e\xd9\xe1\x87\x0b\x2b\x93\xc8\x56\xb5\x68\xcf\x51\xd9\x00\xba\x26\x10\x84\x98\xd7\x5c\x40\xca\x02\xa3\xcb\x1a\xcf\x87\x50\x0a\x90\x49\xfa\x12\xe4\x22\xce\x91\x61\x0c\x45\x16\x13\x4e\xe2\x97\x90\x33\xfa\x63\xe3\x7c\xdd\x41\xa5\xa2\xcd\x55\x76\x54\xfa\xf5\xe1\xad\x78\xd5\xfc\x2d\x33\x8e\xbb\xe5\x56\xb6\xb2\x9a\x15\xfb\xed\x41\x12\x9f\x15\x1c\x2d\x46\x12\xb0\x0d\xc1\x0f\x88\x40\x04\x8c\xe8\x71\x86\x21\x29\x32\xf2\x05\xc6\x46\x3e\x32\x39\x3a\x32\xec\xd0\x84\xa6\x2b\x29\x58\x66\x1c\x55\x4f\xe7\x90\x5e\x75\x6e\x4e\xa7\xab\x5e\x7c\xb7\xd6\xc3\x82\x97\x5b\xd5\x1f\xf9\xce\x92\xca\xf7\x5e\xbf\x7f\x95\x79\xa7\xcf\x85\x0f\xf9\x3b\xef\x8d\x09\xd2\x04\xcd\xd9\x85\x96\xb5\xa8\x76\x72\xff\x96\xf3\xc4\xea\x11\xd3\x87\x9d\x2d\x72\xf9\xeb\x02\x9f\x06\xe7\x94\xee\x83\x66\xcc\x14\x7f\xbc\x38\x31\x63\x42\xc7\x09\x1f\x21\x48\x0c\x55\x22\x10\xcc\xc0\xb7\x05\x97\x77\xd9\x98\xa0\x55\xa4\xd3\xd8\x10\x24\x22\x60\x38\x24\x87\x88\x71\x49\x3f\xe0\x74\x6c\xe8\x36\x1d\x33\x56\x82\x86\xf1\xd1\x45\xe3\xbe\xc9\x79\x33\x57\xdf\x87\x1f\x8d\xd8\xfe\xd5\x8a\xfb\xaf\xfe\x7c\x31\xc5\x3b\xbf\xb6\x4c\x40\xff\xb0\x90\xc2\x4d\xdf\x4e\xde\x60\x3f\x2b\x43\x29\x96\xa0\x1c\x40\xca\xf1\x34\x4c\x48\x8a\xe6\x49\x3a\xa3\xaa\x3a\x76\x63\x60\x71\x0e\x63\x7b\x46\xa4\x06\xc8\x0c\x74\x23\x56\x1d\xcf\x71\x8d\xc4\xd7\x52\xff\x8a\x75\x27\xfc\x35\x73\x71\x3c\xac\xe3\x93\x5a\xf0\x49\xf3\x73\xf3\x06\x64\xfd\xad\x28\x1f\xa5\x4c\xec\x9e\xeb\x68\xf7\x6e\x05\x93\x98\xab\x90\x86\x2e\xf8\x26\xe5\x93\x7a\x20\x19\x3e\x40\x10\xc8\x8c\xe5\xc6\x02\x1b\xd8\x34\x8f\x63\x26\x60\x62\x81\xf0\x2d\x5d\x0f\x75\x24\x92\xa1\x25\x3a\x09\x74\xa5\x76\x64\x3a\xf4\xe3\x17\xfb\xff\xaa\x7a\xba\x93\xdf\xe6\xdb\x11\x65\x36\xb4\xf8\x75\xf5\xe2\xb1\x42\xf6\x29\xf3\xee\x5e\x5b\x7c\xf6\xfa\xd4\x6d\x49\x54\x94\xb4\x0d\x48\x41\x9e\x96\x45\x82\x13\x35\x5f\xe7\x1c\x8d\xb7\x15\x49\xf4\x0c\x3f\x62\x78\x48\x7b\x42\xe8\x8a\xb6\x21\xe8\x9a\xc9\x30\x1c\x94\x68\x27\x1d\x89\xc6\x0f\x9b\x35\x9c\xf7\xcd\x81\x7b\xb7\xd7\xb4\x18\x3f\xe4\x74\xbe\x4f\x73\xac\x18\xa8\x4e\x3c\x3e\xbf\x76\x9d\xc1\xc1\xa6\xd2\x0b\x76\xd4\x4a\xa2\x8d\x90\x03\x7c\x91\xf7\x63\x85\x8f\x10\x50\x25\x55\xb2\x58\xe0\x86\xaa\xee\xaa\x80\x13\x18\x48\xfa\x94\xa4\x1a\x54\x2c\xd9\x81\x8e\x24\x48\x30\x42\xc0\x1b\x2f\x63\x78\x5d\x9d\x33\xc2\x9d\x1b\xe7\xf2\x35\xc3\x65\xcb\x5f\x1c\xb4\x6b\xef\xb3\x41\xf9\xee\xae\xda\x38\xfa\xdd\xc2\xed\xe4\xa0\x70\x61\x3d\x63\xca\x5d\x09\x01\xc1\x02\xa0\x5b\xb4\xc1\xfb\x3c\xcd\xd8\x91\x15\x86\xb4\x18\x50\x36\x12\x29\x32\xc6\xac\x64\xca\x1a\xe3\x99\x0c\x60\x39\xd1\x8b\x94\x80\xf2\x31\x0f\xd3\x21\x42\x5c\xcf\xb7\x76\xc4\xe4\xf8\xf2\xc7\xc1\xaf\x23\x7a\x54\xfa\x2a\xf7\x98\xd9\x4b\x97\x9c\x9f\x90\xda\xe2\xfd\x12\x93\x7f\x58\x34\xac\x6b\x9e\x8c\x39\xd6\x24\x7e\xff\x08\xa1\xa0\x69\x30\x50\x05\x55\x8e\x74\x2b\x72\x71\x1c\x40\xd9\x56\x68\xdf\xb6\xb1\x4c\x38\xb4\xeb\x89\x5c\x04\x5c\xca\x65\xa0\xa4\x1a\xd0\xe6\xd2\xf4\xd7\xff\xc9\x3e\xea\x1d\x2b\xdb\xc5\x5a\xd3\x6b\xec\xa1\x76\x52\xe9\x29\xfd\x86\x5f\xd8\xec\x5a\x53\x57\xd4\x38\xfd\xa2\xc5\xea\x6f\x06\x55\xea\xb5\xf7\x45\xf2\x40\x61\x13\xc0\x24\x31\xa5\xfa\x76\x24\x9a\x0e\xa1\x02\x56\xb4\x75\xcb\x54\x59\x46\x92\x30\xc5\xf0\x9a\xed\xda\x34\xcb\x79\x9a\xe0\x92\x86\xc8\xc4\x3a\x99\x20\xb0\x4d\x3b\x59\xa3\xe3\x88\x8a\x1f\x8c\x9f\xb5\xe9\xe9\xe6\x4d\x1d\xdc\x91\xbb\x73\x5d\x6e\x93\x6b\xc1\xbd\xb3\x07\x5e\x7f\xde\x41\x7b\xaa\x65\x2c\x1b\x4c\xdc\xfb\x0a\xe9\x80\xb4\x0d\x32\x94\x02\x64\xa9\x32\x1d\x88\x92\xa5\x3a\x11\x70\x28\x5f\xe7\x4d\x03\xba\xb2\x6f\x88\xa4\x20\x4a\x2e\x36\x78\xc6\x85\x3e\x9b\x20\xfb\x38\x7b\x07\x0d\x48\x59\x3f\xa0\xe8\xb9\xd3\xc7\x9f\x1b\x05\x26\x60\x54\x7f\xe0\x76\x54\xf2\xee\x8a\x9a\xa9\xdd\x6b\xec\x7b\x5c\xf2\x68\xf2\x30\x6c\xda\xc8\x21\xd5\xc8\xf2\x23\x51\x05\x82\x6d\x22\x1c\xfd\xcf\x65\x28\x79\xbc\xc4\x59\xa1\xe0\x6a\xaa\x41\x48\x8c\x1e\x23\xdb\x51\x60\x28\x91\xb6\xcd\xa6\x73\x2f\xba\x7d\x2e\x5c\x5d\x11\x7c\xb7\xb5\xc5\xe2\xe1\x7f\x4e\xdd\xdd\xa6\xf8\xf3\x51\xed\x67\xe5\xaf\x5b\xe2\xd9\xec\x2a\x7b\xca\xac\x3f\xd8\xbc\x64\x9a\x98\x52\x7a\x28\xb1\x6e\xc7\xb4\x6c\xe4\x07\xb7\xe6\x0e\x98\xcc\x2d\xd9\xd2\x61\x18\xea\xf4\xfd\xa3\xc3\x37\x51\x8d\x21\x7a\x4a\xeb\x6c\xd5\x93\xf7\x3d\x62\x47\x31\x80\x63\x89\x84\xc3\x02\x51\xf2\x68\x86\x32\x01\x19\x52\x98\x0a\x22\x41\x37\xa2\xc8\x0c\x68\x87\xa4\x02\x0c\x95\x28\xa2\x01\x8b\x0c\x98\xe0\x7b\x54\x7f\xe7\xe7\x5a\x0b\x33\x8d\x50\xf0\x82\xca\x2b\x26\xec\x38\x7e\x66\x53\x8e\x91\x33\xfb\x74\x9f\x5f\xeb\xb5\x4b\xca\x81\x46\x6f\x67\xe9\x96\x44\xc2\x5b\xe0\x22\xd7\x23\x01\x04\xd0\xe6\x5d\xd2\xf2\x25\xca\xd6\x21\x45\x07\xba\xc4\x71\x8a\x6e\x33\x9e\x4f\x9a\x8c\x14\x78\x3a\x0b\xa0\x61\x8b\xa1\x1a\x26\x4e\xad\x66\x16\xa7\xb7\xb5\xf9\xe1\xa7\x36\x27\xea\x74\x75\xb6\x75\x58\xff\x45\xce\x7d\x95\x7f\xa9\x49\xc8\xc5\xe6\xed\xae\x51\xc7\xe9\xdf\xa0\x61\x12\xeb\xe2\x8c\xe4\x85\x01\x80\xa4\xec\x9a\x90\x66\x59\x60\x20\x1c\xd0\x50\xb5\x00\x0e\x44\x05\x5a\x32\xe4\x43\xdd\xd6\x20\xad\x99\xaa\xac\xf0\x81\x66\xfb\xe9\x28\xa3\xfe\x59\xb2\x5f\xc3\x6b\x3b\x4f\x6e\x3b\xdf\x20\x25\xef\x8a\x73\xc5\x0b\x04\xcf\x9e\x6d\x7d\x72\x3d\x36\x7f\xee\x74\xbb\x59\xcf\xdd\x0d\xa7\xa6\xfd\x75\xc7\xf5\x59\xbe\x10\x1b\x3d\x1f\xd8\x04\x5c\x3a\xb5\x7b\xdb\xe9\x25\x7f\x2c\x1f\x3a\xb3\xf0\xe2\x0f\x32\xff\xbc\xa6\x4c\xe5\xa5\xbd\x0b\xb5\x4c\x13\xaf\x94\x1f\xce\xee\xbd\xfc\xca\xea\xca\x2b\xb3\xac\x69\x53\xb0\xe1\x76\x3e\xef\xe8\xc9\x87\xb2\x9d\xd1\x0a\x35\xef\xb7\xa1\xa9\xcf\xd6\xcd\x9c\x44\x9d\x31\x4b\x90\x6d\x95\xd5\x08\x57\x27\x44\x92\xf4\x83\x98\xa6\x39\xa8\x3a\xb1\x2b\xcb\x88\xd5\x68\xc2\xd4\x75\xd9\x64\x4d\x4b\xe7\x65\x2c\xc9\x21\xf8\x2f\x47\xd3\x7f\x64\x78\xaf\x9f\x5e\x5f\x42\xaa\x94\x02\xa6\x57\xec\x9e\xad\x65\x9d\xe3\xaf\xaf\xbb\x34\x7a\x7a\xf6\x22\xed\x7b\xdd\x2f\x54\xa7\x54\xb6\x7c\xeb\x92\x38\xc4\x01\x25\x6c\x7a\xa2\x12\xd0\x04\xcb\x01\xcd\xc4\xb2\x44\x7a\xb6\xe4\xeb\xa2\x11\xd1\x0e\x8b\x4c\xd9\xe3\x30\x52\x18\x39\x46\xa4\x12\x30\xa2\x4f\x24\x50\x2f\x3d\x56\xf9\x83\xd5\x8b\x16\x2d\xd8\xf5\xa2\x59\xfb\xe9\x1d\x7a\x6c\x2a\xb0\xa5\x62\xfd\x07\xf5\x3f\x99\x81\xeb\x5e\x29\xfc\x57\x8e\x4c\xcf\xdf\x4d\xe2\x00\x87\x1f\x12\xbe\x23\x2a\xbe\xe7\xf9\xd8\xe4\x18\x4f\xe0\x54\x92\xb4\x6c\x24\x06\xa2\x83\x38\x03\x11\x98\xa5\xb0\x19\xeb\x86\x47\xdb\x90\x11\x10\xa9\x27\xbe\x73\xcb\xb6\x4f\xbd\xd2\x3d\x3a\xf3\xc5\xea\x32\x5f\x28\x33\xbe\x5c\x63\x0a\xdb\x0e\x86\xdb\x8b\x71\x4d\x52\x1f\x0c\xdf\x55\xa5\xc0\xb7\x19\x13\x3a\x4e\x4c\x1a\x03\xa1\x25\x60\x8f\x8e\x2c\x93\x26\x55\x4c\xb2\x88\xd5\x62\x1a\xea\x36\x62\x1d\x17\xab\x26\x27\x88\x84\x4c\xc4\x08\xab\x6c\xc8\xe8\x34\xf6\x1c\x31\x71\x22\x96\x63\x57\x5e\xa1\xc5\x8e\x6a\xf9\x73\xf5\x5a\x95\x77\xdd\x55\xba\x7b\xee\x95\xdd\xce\xfe\xc5\xef\xd1\x96\x7f\xfd\xf8\x93\x3f\x56\xf5\xea\x93\x44\x4d\x14\x2e\xe6\x68\x84\x81\x45\x23\xc9\x56\x79\x4a\x14\xa1\x1a\x03\x99\x27\x05\x4f\x81\x8a\x1a\x10\xc0\x0d\x6d\x97\x43\xbe\x6b\xf2\x4e\xac\xd3\x3c\x22\x5f\xc6\xf0\xea\x35\xfc\xe7\x5f\x8f\xad\xc2\xfd\xde\x30\x7b\x0e\x38\xe5\x60\xd3\xc9\xbf\xed\x1b\xdb\x66\xc8\xe1\xdc\x1f\xe2\x5f\x2b\x35\x58\xe0\x1c\x4f\x5e\x8a\xc0\x06\xd0\x21\x49\x51\xf0\x05\x1c\x70\x8e\xe0\x02\xd9\xe3\x19\x3f\xb0\x2d\x91\xf2\x2d\xca\xf6\x2d\x02\xb9\x21\x12\x89\x28\x94\x62\x91\x93\x0c\x92\xa0\x12\x3f\x26\x8a\xcf\x3c\xd7\xac\x76\x7f\xe1\xb7\x99\x73\x9a\xee\x2c\xde\x7e\x5c\x91\x8b\x17\x6a\x0f\x19\x82\x36\x8d\x98\x5c\xa1\xd7\x37\xcd\xb6\x66\x11\x92\x17\x34\x75\xc1\x96\x4c\x4c\x45\x12\xa1\xcb\xba\x25\xd9\xaa\xa3\x28\x96\x21\xc8\xbe\x6a\x07\x1a\xe9\x48\xb4\x16\x78\x84\x20\x2a\xc0\x60\x3d\x6c\x90\x4a\x10\xfb\x2f\x67\x35\x57\xab\x9a\x0b\xe6\x4f\x2e\x35\xa9\xe0\xcd\xd3\xf9\xc7\xcd\x92\xe6\xeb\x6a\xab\x87\x13\xab\xd6\x5f\xdd\xb1\x7d\x8e\xb2\xec\x85\xa5\x49\xf4\xe0\xf3\x54\x8e\x0b\x39\xcd\x15\xe9\x58\x47\x22\x54\x3c\x60\x4b\xc8\x94\x09\x28\xc7\xc0\xa7\x51\xa8\x9a\x9c\xcc\x38\x84\x42\xfb\x12\x10\x05\x4b\x8f\xd4\x34\x6e\xbc\xff\xc4\x61\xee\xd4\x0e\xe3\xdd\x07\x23\x8a\x8c\x9d\x76\x66\x5a\xdb\x63\x43\x67\x0f\xab\x7d\xe6\x59\xd3\x78\xef\x32\x76\xd0\xb2\x2a\x6c\xa9\x6f\xef\x27\x0f\x14\x14\xef\xc9\x4e\xac\x00\x4d\x95\x1c\x9e\x96\x03\x8e\xa2\x28\x0e\xe1\x48\x71\x63\x8f\x23\x09\x9d\x51\x74\x9a\xf4\x6c\x47\x93\x44\x0f\x04\x00\xfa\xb6\xf3\xf2\x0e\x8b\xb5\x1e\x7f\x73\x20\xf3\xee\x1c\xb7\x2b\xfd\x70\x6d\xe1\x91\x71\xbf\x0f\xec\x8f\x1e\xf3\x5f\x4e\x59\x6a\x97\x28\x7d\x2f\x57\x96\x36\xc9\x9b\x1c\x61\xff\xe7\x21\x16\x9a\x76\x64\x38\xb2\x18\xb8\xba\x2c\x88\x1e\xc5\x29\x94\x1e\x18\x56\x6c\x20\x83\xc3\xb1\x6f\x7a\x48\x96\x83\x38\x20\x15\x68\xb8\x6e\xa2\xde\xcf\x77\xed\x46\x2f\x25\x0b\x15\xa9\xff\x59\xe6\x6f\xca\xe7\x1e\xd0\xe0\xe4\x78\xf1\xd1\xb5\xd6\xb3\x0f\xe4\x4f\x29\x3b\x61\xe8\xbe\x0d\xd7\x32\xa6\xf5\x98\xd8\x53\x2c\xf8\x1f\x4c\x00\x5a\xb7\x49\x9b\x14\x42\x17\x59\x81\x4f\x31\x98\x76\x3d\x45\x12\x90\xc2\xa9\xb6\x64\x49\x3c\x80\x5c\xe4\x92\x8a\xa5\xda\x94\xfd\x0f\xcd\xe8\x3f\xa4\xc7\x7f\xeb\x49\xa4\x36\xcb\xb2\x35\x6d\xb3\xdf\x1b\xc8\x65\xe9\x54\x6f\x6d\x96\x59\x51\x87\x12\xcb\xc3\x53\xe4\xdc\xd2\xd4\x3b\x45\x5f\x41\xb5\x77\xee\x3a\xbd\x6f\x5d\xee\xf2\x51\x12\xf3\x30\x04\x38\x99\xd7\x35\xac\x58\x1e\x1f\xb0\x42\x28\x88\x01\xc9\x18\x0c\x1b\x2a\x14\x85\x04\x1d\x79\x0c\x80\xb1\x8f\x15\x1d\x7b\x51\x14\x73\x26\x99\x0e\x5b\xa6\xfd\x3c\x6b\xd2\x9d\x9e\xc5\x3a\xce\x96\xfa\x4c\x29\x7b\x71\xe1\xa5\x39\x3a\xdd\x7d\xc1\x94\xee\x53\xfe\xec\xff\xe6\xce\xcc\xdd\xf7\x25\xcf\x3b\x0a\x2a\x8e\x43\xf9\x02\x1f\x0b\x32\x60\x39\x8f\x53\x75\x82\xd6\x1c\x8a\x45\x31\x14\x7c\x29\xf0\x39\x09\xb9\x50\x57\x75\x59\x89\x4c\x4e\x34\x22\x49\xe5\x51\xe2\xab\x31\x38\xf7\x6d\x45\x5c\xe0\x8f\x51\x77\x77\x54\x2d\xf3\xac\xc1\x86\x35\x36\x3f\xb0\x64\x78\xbd\xe3\x1f\x47\x46\x5d\x7c\x36\x6e\xcc\x8a\x8c\x29\x84\x24\x7e\x2c\x61\x92\x24\x58\x07\x12\x9e\xe6\x01\x9b\x56\x74\xc3\xf3\x2c\x0e\x53\x8a\x1d\xf3\x2c\xa9\xf3\x94\x14\x7b\x1e\x8c\x7d\x48\x3a\xb4\xa0\xf9\x14\xa3\xa4\xe3\x99\xd6\xe0\xce\xe9\xa6\xf2\xf3\x32\xd4\xe5\xa7\x64\xeb\xb2\x93\xb7\xec\x1c\x2e\xbd\xf5\xb0\x59\x81\xab\xfb\xfb\x0f\xfe\xee\xdc\xc8\x68\x4a\xf2\x12\x10\x56\x27\x29\x02\x92\xa2\x1b\x1a\x21\x03\x62\x9b\x51\x78\x91\x30\x60\xe4\x38\x92\xca\x49\x46\xc8\xeb\x96\x13\x79\xb6\x18\xea\x3a\x1b\x01\xd6\x25\x69\xe7\x1f\x29\x81\x25\x39\xff\x6f\x75\xfe\xd4\x94\xd7\x73\x0d\xca\x94\x96\x93\xb4\xb4\xdd\x9b\x99\x7f\x55\x4f\x4d\xef\x5c\xf2\xcf\xee\xe7\x6a\x97\x7f\x15\xaf\x6a\xd1\xa9\xe3\x37\x3b\xea\x64\x7e\x32\xe1\xf5\xf9\x47\xdb\x66\x6c\xd4\x3a\xb1\x45\xac\xeb\x12\x3a\x2d\x7a\x16\xa6\x4c\x0a\x40\x39\x96\x5c\x9d\xa1\x59\x41\xf2\x3c\x8b\x62\x48\xd2\xa3\x64\xc1\x31\x04\x68\x1a\x91\x4b\x58\x81\xa5\xf0\x46\x62\xe8\xdf\x58\xd9\x24\xf3\x87\xfd\x1f\x9d\xfa\x7a\x66\xca\xd0\x4c\xd3\xb3\x2e\x5b\x3a\x32\x0f\x26\xbe\x68\xba\x66\xdd\x87\xfd\x37\x66\xea\xf4\xd3\x8a\x24\xb6\x11\x0d\x5e\x89\x00\x32\xb1\x1d\x93\xae\xef\x33\x94\x4f\x70\x24\x50\x34\x47\x72\x08\x1f\xb8\xac\x23\xd9\x00\xe9\x1a\x36\x71\xc8\x82\x88\x95\x34\x18\x27\x86\x7e\x9b\x6f\xbf\xce\xcb\xfc\x7e\x76\xd2\xc0\x01\x39\x56\x7f\xa7\x7c\xb2\xad\x60\x93\x11\x8b\xce\x65\x55\xa7\x35\x13\x87\x5e\xd9\xff\xc1\x88\x8c\x95\x35\x12\x42\x9f\xe1\x6c\xa4\x2b\x0e\xc5\x8a\x98\xd0\x22\x35\xa0\x79\x3a\x66\x88\x90\xb6\x79\x8b\xfc\x9f\x67\x39\x15\xca\x4e\xec\x59\x58\x70\x3d\xc8\xc4\x8a\x14\x2b\xe9\x88\xb1\xdc\x9e\x7c\xac\x44\xb7\xa2\x15\x27\x09\x9f\x2d\xbc\x9e\xa9\xc3\xe8\xfb\x25\x7a\xcf\x6d\x71\xb2\xcb\xa4\x23\x39\x9b\x75\xa9\x36\xa4\xc2\x82\x24\x6a\x9d\x2b\x02\x96\x91\x11\x50\x22\x6b\x18\xb6\x29\x45\x62\x84\x63\xd5\x56\x28\x57\x8b\x1d\x9f\xb0\x45\xa0\xaa\x88\xa6\x95\x00\xba\x82\xa6\x72\x94\x0f\xb8\x74\xde\xa6\x2b\x53\x3f\xeb\xdf\xff\x8d\x9f\x47\xf7\xfc\x2b\x5f\x8f\xba\xaf\x2c\xda\xa1\x76\xee\x3b\xfc\xfb\xe2\xab\x3e\xb9\xf2\xd7\xb6\xec\x83\xfb\xf4\x48\x62\xa7\x42\x27\x04\x1b\x70\x81\xc4\x52\x94\x23\xd9\x06\x2b\x60\x42\x35\xb4\x20\xf0\x4d\x59\x73\x29\xa8\x00\xdd\x40\x01\xa3\x08\xba\x13\xe8\x64\x88\x6d\x92\xf8\x87\x5a\xfa\x1f\x49\x8a\x7f\x2b\xf8\xff\xff\x92\x14\x45\xd3\x1a\xdc\x7f\x39\xa8\xfe\x8a\x2e\xaf\x1c\x3d\x55\xbc\x67\xe5\x49\x51\xf4\x88\x5f\x55\xfc\x60\xa6\x56\x85\x2e\x4d\x3d\xb6\x74\x58\xd1\xe1\x2d\x8f\x7d\x96\x44\x5a\xa7\x61\x3b\x58\x88\x7c\x07\x42\x1b\x84\x0e\x26\x29\x0f\xb3\x84\x27\x03\xdb\x61\x18\x85\x50\x15\xc5\x21\x75\x4d\xe4\x68\x8b\x04\xb6\xe0\xb8\x96\x42\xa5\xf3\x51\xc2\x4f\x96\x16\xca\x5e\x90\x7b\x7b\xe0\x9c\x09\x4b\xfa\xce\x9a\xdb\x22\x65\xef\x5f\xa5\x6b\x2e\x19\xbc\xf8\x4a\xf3\xec\xc7\x37\xf5\xfe\x29\x89\x64\xb1\x28\x00\x32\x24\x2c\x09\x62\x52\x35\x3d\x8d\x72\x91\x41\x7b\xb6\x1a\xf1\x02\x6f\xe9\x80\xe0\x15\x35\xe2\x31\xcb\x53\x61\x18\xea\x84\xa3\xbb\x8e\x99\xb8\xe9\x3f\x62\xec\x26\xd6\x7c\x6d\xdd\xa1\x43\x47\x2e\x35\xea\x5a\x17\x54\xde\x95\xbd\xf4\xda\xf5\xbb\xab\x57\x7a\xdf\xef\x1f\xa5\x64\xee\x98\x9a\xc4\xe9\x69\x18\xc0\x00\xc9\x3a\xd0\x0d\x3f\x22\x0c\xcc\xea\xba\x2a\x28\x36\x6b\xda\x06\x13\x49\x31\x64\x45\x4a\xf7\x75\x87\x17\x75\x51\x50\xec\x98\x94\x09\xfd\xe5\x64\x72\x11\x5c\xf8\xf5\x91\x43\x4b\x0a\x8e\xfe\x26\x62\xab\xec\x5c\xf1\xd1\xd3\x25\x05\xbb\x52\xa9\x6d\xc4\x5f\x96\x6e\x14\x4b\x56\x7e\x52\x32\x79\xcb\xd5\x24\x5f\x0f\x5d\xcb\xc0\x48\x0d\x24\xd5\x90\x18\x26\xe2\x18\x19\x52\x32\x64\x28\x81\x05\x98\x80\x1a\x04\x84\xaf\xbb\x58\x85\x1e\x19\x43\xe0\xc2\xff\xb7\xdc\xff\x70\xdb\xfe\xad\x9e\x97\x9a\xd2\x21\x73\x8b\xff\xc5\x6d\x6b\x5d\xec\x5e\x85\xcf\x6a\xe4\xff\xb9\xc0\x89\x1a\x66\xe9\x3e\xeb\x7f\xf9\xb1\x5e\xf0\xfe\xd0\x23\x05\xf7\xcd\x9a\x33\xa7\xe8\x84\x5d\x27\x6f\x27\xef\x60\x47\x6a\xe0\x58\x32\xa5\xea\xd0\xb6\x25\xc9\xd2\x59\x26\x74\x91\xae\x33\xaa\x87\x58\xd2\x71\x03\xd3\x55\xe4\xc0\xf1\x45\x00\x4c\xcb\x65\x90\xc6\x90\x42\x62\xd8\x1f\xf8\x69\x67\xab\xc9\x7d\xf0\xcc\x4c\xab\xc7\x9f\x3d\xf1\x79\x43\xbd\x52\xa1\x1a\xf9\x7e\x8d\x17\x0c\x2c\x3c\xe2\xbc\x7c\xf7\x74\xbb\xad\xc9\xfb\x28\x32\x8c\x5d\x52\x86\x12\xc9\xc7\x48\x01\x86\x43\x04\x2c\xc5\x88\x40\xf0\x50\x20\x47\xd0\x65\x9d\x58\xb7\x4d\x5e\x46\x06\xcf\xb2\x3c\x0f\x6c\x13\xa6\x93\x52\xbe\x36\xea\xfa\xb9\xd9\x5f\xdc\x6e\x40\x8e\xfc\x66\x0d\xf5\xf1\x3b\xad\x5f\xff\xeb\xc6\xb7\x67\x4b\x77\x2a\xe2\x47\x77\x2b\x34\xda\xfe\xd3\xf5\x24\x6a\x59\x99\x9c\xcf\xd8\xb1\x46\xa8\x7a\x14\x61\x83\x80\xaa\xc3\x18\x01\x54\x15\x91\xd3\x59\x81\x67\x42\x1f\xba\x1a\xa9\x91\xb2\xc5\x89\x7c\xac\x2b\x3c\x97\x8e\x74\xe8\xb0\x96\x03\xfb\xdc\x1c\xaa\xae\xfc\x74\x51\xe7\xd6\x4f\x5a\xf5\x7c\xd8\xed\x4e\xff\xbd\x7b\x6f\x7f\x33\xf7\x9e\x3d\x62\xdd\x37\x97\xbf\xcd\x98\x2c\x71\xc2\x25\x0b\x36\x44\x7a\x48\x12\x3e\xa7\x21\x1a\x73\x9a\xa7\xc4\x0e\xcd\xc7\x18\x13\xac\x0a\x64\x51\xd4\x6c\x27\xa2\x24\x89\x97\x3c\x85\x60\xb5\x80\x27\xd3\x54\x23\xff\x6b\xc9\xc3\xfb\x2d\xef\xbb\xbb\xd4\xbc\x4b\x3d\x1e\xb0\x7b\x1b\x6d\xe2\xea\xae\xea\xdb\xe9\xf7\x51\x95\x6f\x75\xde\x55\xec\xf1\xaf\x8d\x73\x7f\x5f\x33\x79\x4b\x16\xad\x80\xa3\x34\x95\x54\x5c\x8e\x51\x34\x0a\xeb\x40\xd2\x02\x11\xa9\x8c\x0a\x75\xc5\x70\x28\x51\x36\x78\xce\x8a\x65\xcb\x8f\x10\x21\x59\x3e\x76\xd2\x71\x26\xaf\xd4\xfc\x9e\xec\x5d\x1a\x91\x7f\xf1\x2f\xd7\xbb\x3f\xe9\xf9\x43\xbd\x5c\xbe\x32\x65\x15\xdb\xa0\xe5\x90\xe9\x35\xa5\x01\x13\x0e\x65\xcc\xec\x38\xe1\xf1\xe3\x34\xc9\x63\x49\x55\x73\x42\x13\x20\x11\x12\x86\xc8\x90\x14\x23\xc5\x1e\x74\x25\x23\x36\x4c\xc7\xf1\x62\x15\x8b\x2c\xcd\x7a\x2e\x86\xbe\x67\xda\xff\xa8\x11\xfe\x27\x0b\xfe\xb7\x6a\x6f\x6a\xca\xa0\x4c\x6f\x66\x49\x9b\x05\x57\x7b\xfa\xc6\x86\xd5\x7d\xd0\xef\x6d\x1e\x3d\xb8\x42\x0c\x2b\xdb\xe7\xcd\x36\x7c\xc5\xf5\x27\x6e\xbe\x91\xe5\xb5\xb1\x43\x36\x2c\x7a\x37\x89\x4a\xc6\x1e\x43\xf3\x82\xc9\x07\x71\xe4\x32\x2a\x01\x38\xcd\x06\x14\xf4\x19\x4e\x16\x68\x42\x25\x2c\xc2\x41\x11\x27\x18\x40\x93\x0c\x10\x49\x46\x20\x91\xd0\x4c\x47\xe1\xa1\x44\xf3\x9d\x55\xb7\xb6\xef\x7e\x7f\x70\x9b\x1b\xaf\xca\x0b\xdb\x30\x5f\x56\x5d\xd4\xbb\xf1\x17\xcd\xaf\xad\xc8\x3a\xf3\x71\xab\x19\x19\x33\x3e\x4a\xb8\x64\xcb\x30\x2d\xcf\xf6\x22\x2f\x52\x62\x40\xf0\x9a\x1b\xd0\x84\x48\x33\x41\xe0\xf9\x84\xef\x59\x3c\xe1\x61\xd1\x72\xbd\x58\x77\x82\x30\xb0\x54\x1b\xf0\xe9\xbc\xa6\xc0\xcc\x3b\x4d\x7f\xbb\x93\x73\x61\xca\xd7\xdc\xd4\xaf\xc6\xc5\x4b\x2b\x8e\xd9\xf9\xd3\x22\xf9\xb5\x8e\x73\x36\xef\x4e\xed\xf6\x67\xbd\x8c\x15\x1a\x13\x5b\xa9\x52\xb6\xe5\x84\x21\xa9\xc4\x28\x14\xa0\xc0\xc3\x00\xf8\x9e\xea\xeb\x9c\xa2\x6b\x3e\xf4\x58\x1b\x9b\x12\xe5\xa1\xc0\x92\x05\xa4\xeb\x80\x43\x4e\x3a\xda\xa1\xeb\x4b\x36\xff\xb1\xed\x57\xeb\xdf\x2e\x7a\xd0\x18\xf8\xf8\x29\x39\x66\xcc\xde\xfc\x13\xb2\x5c\x2c\x36\xe9\x45\x74\xa5\xe1\x9a\x7e\xaf\x24\xcf\x98\x8f\x65\x5c\x8f\x0d\x23\x8e\xd1\x44\x4c\xd1\x51\x0c\x45\x55\x14\x7d\x57\x89\x22\x44\x02\x5a\x0b\x94\x40\x05\x31\x03\x90\xc7\xf9\xa6\x8c\x65\xd6\x25\xc9\x74\x28\xca\xa5\xcf\x5c\x7e\x72\x94\xbb\x95\xf3\xd2\xb0\xb9\x05\x06\xdf\x6f\x1d\x3d\x52\xfa\x34\x6f\xb5\x71\xa0\x3a\x7a\xf9\x7b\x44\x6a\x0e\x34\x23\x79\x6f\x0d\x37\x62\x20\x49\x4b\x21\x62\x78\x22\xf6\x4c\xe0\x38\x92\xc2\xa9\x40\x54\x69\x64\x09\x38\x88\x6d\x9b\xe0\x10\xf4\x68\x86\xf1\x9c\xd8\x16\x22\xdf\x62\x5f\x62\x25\xfd\x5b\xb7\x25\x35\xa5\x76\xd1\x4c\xff\x8b\x8a\x7a\x31\xf5\xf9\xf9\xe7\xc3\xb2\x1f\x39\xb4\x70\xc7\xab\x7f\x5e\xbe\xb1\xe6\xda\xd2\x4b\x87\x4b\x4c\x1a\x7f\x75\x47\xeb\xfd\x73\x52\xa8\x96\x9f\x26\xf1\x1f\xea\x32\xf4\x2d\x97\xb5\x48\x22\x06\xb2\x1a\xb9\x2a\xf2\x35\x2e\xb6\x68\x9d\x0f\x1d\x53\xd2\x31\x34\x7c\xd3\x53\x69\x97\x73\x31\x50\x18\x27\x24\xd9\x74\x84\x7a\x76\xb0\x0a\xdd\xb7\x51\xdb\xdd\x55\xa9\xd4\xcd\xf7\x77\xdf\x99\x3b\xe7\xc4\x1f\xd2\xd7\x47\x5a\x3e\x7c\xfb\xf7\x13\x8b\xdf\xda\x90\x44\x0b\xd8\x48\x51\x22\x4b\x02\x92\xc6\xd9\x3c\x8f\x79\x26\xe2\x6d\x84\x2c\x9f\x54\x35\x9f\xa0\x65\x25\xc2\x26\x90\x29\x88\x39\x33\xe4\x44\x43\x89\x09\xac\xea\x89\x97\xbc\xe1\xf4\xb1\x9c\x87\xb7\x76\x2c\x55\xa0\x78\x9c\x9a\xd5\xda\xb0\xf6\x2d\xf6\xd7\x86\x99\x6f\xe4\xa8\xd4\xa7\xb2\x95\x59\x5a\x7c\x38\x79\xcd\x62\xc8\x38\x98\x0c\x2c\xca\xe2\x00\x8b\x79\xdf\x37\x5d\x0a\x79\x31\x49\xc6\xd8\xb2\x25\x37\xd6\x54\x9e\x57\x1d\xa4\x12\x01\x29\x89\x01\x40\x04\xcf\x29\x52\xe2\x67\xf6\x91\xa2\x7f\x7e\x40\x2f\x9c\xdc\xe4\xfb\x19\x4b\xf6\xdd\x38\xfa\xae\x51\xe2\xc2\xf3\x7c\x27\xa6\x1d\x7d\x40\x36\x6e\x72\xe8\xe4\xe3\xc2\x63\x93\x77\x5a\x29\x10\x99\x6a\xe8\x89\x1c\x70\x54\x05\x2a\xd0\x8c\x44\x22\xc0\xbe\x4c\x6b\xaa\x4f\xc4\xb6\xee\x72\xb2\xec\xfb\x9c\xca\x32\x3c\x29\xf0\x0c\x6b\x11\xff\xc8\x72\xef\x6a\xf9\xf7\x6a\x07\x1c\xe8\x5c\x65\xbe\x54\xf2\x15\xf9\x51\xf5\x72\xbd\x5e\x1d\x1b\x97\xf9\x76\xef\xf3\xfd\xca\x9a\x21\xf5\x6b\x35\x19\xbe\x77\xf7\x93\xe1\xa9\x29\x2f\x5e\x0c\x7c\x31\xa5\x4c\x9a\x42\x77\xb9\x15\xbd\xa7\x9d\xce\x3c\xf8\xf8\xa3\x3b\xad\x63\x6e\xee\x82\x83\xdf\xb4\xab\xb7\xde\x3e\xdb\xf5\x8d\xad\x05\xcf\x9f\x6f\xb1\xbf\x6b\xf2\x04\x08\x58\xcf\xf2\x03\x14\xab\xa4\x2b\xfb\x7c\x88\x63\xce\x95\x44\x47\x42\xae\x1c\xb9\x40\xf6\x19\x92\x21\xb8\x58\xe3\x64\x3e\x88\x08\x20\x47\xc0\xb6\xa4\x38\x41\xb3\x06\xcc\xb1\x26\xb7\xaf\xdc\x6e\xeb\xa2\x3e\x17\xba\xcd\x2b\x96\xab\xb2\x3e\xa6\x73\xc5\x6b\x6f\x36\xa8\xd7\x6f\xe4\x67\x8d\xc7\x8f\xde\x83\x93\xc8\xe4\x97\x2d\x92\x22\x1c\x9a\xd1\x40\x28\x93\x3a\x43\x22\x16\x06\x8e\x07\x4c\xdf\xd4\x20\xeb\x18\x11\x2f\x9a\x36\xa5\xb1\xa2\x88\x62\x4f\x57\x3d\x3b\x4a\xe0\x77\x37\x63\xea\xa6\xec\x4d\x9f\x7b\xc2\x9c\x63\xe3\x47\xff\xf4\x56\x25\x82\x98\x56\xba\xd2\x8f\xb7\xf3\xd4\xe9\x74\xad\xbb\x5e\xff\xed\x72\x19\xcb\x03\x12\x4b\xd1\x73\x61\xa4\x8b\x4c\xcc\x87\x14\xe5\x40\x47\x77\x59\x2f\xb2\x75\xdb\x97\x05\x56\x47\x58\xf6\x63\x8d\x20\x78\xc7\x03\x01\x2d\xf2\x46\xa0\x39\x58\x49\xa3\x1d\xf3\x0f\x20\x4a\xe5\x7f\xdc\x78\x2f\x33\x46\x78\xe5\xc9\xe5\xe7\x8d\x6b\xde\x93\x2e\xef\x3f\x4e\x95\xdc\x90\x65\xdc\xd1\x05\xe3\xde\xcd\x8d\x0b\x5c\x49\xe2\x92\x35\xc6\xf3\x4c\xa0\x62\x86\x44\x54\xe4\x68\x1c\x13\x93\x5e\x24\x79\xa4\x25\x28\x96\x08\x6d\xd7\xc0\xa2\x2c\x61\x93\x92\x49\xcb\xa0\xad\x48\x53\x12\xd8\x77\xeb\xaf\x4f\xe8\xf2\xc9\x57\x9f\x59\x7f\x76\xbb\x72\xe0\xf9\xf7\x6d\x27\x2f\x29\xf5\x2e\xda\xb6\x3a\x57\x95\x8d\x2d\xda\xfd\xd8\xef\xf1\xa3\x24\x2a\x96\xe1\x90\x92\x0d\x04\x55\x5f\xf1\x22\x1a\x09\x0c\x65\xd3\x01\x27\x06\xbc\x61\xf2\x96\x84\x14\x0e\x45\x06\x4f\x1a\x8a\xa6\x41\x11\x48\x6a\xcc\x81\xbf\xc5\xb8\xd3\xe2\xf7\xd1\xaa\x57\x47\xce\x9d\xbb\x31\x7f\x48\x77\x1c\x7e\xba\x49\xff\x8a\x15\xc3\x3f\xa6\xec\xfa\x31\x6f\xbf\x2d\xc1\x57\x15\xbb\x56\x5b\x94\x44\x51\x4d\x12\xa8\x16\x2d\x41\x41\xa1\x68\x25\xb0\x94\x08\x69\x42\xec\x78\x14\xc1\x44\x04\xc3\xc4\x58\x77\x82\xd8\x82\x3e\x86\x48\x25\x21\x23\x4b\xae\xee\x38\x89\x01\x91\xab\x7d\xbd\xcf\xfa\xe4\x6d\x76\xf9\xcd\xa3\x3f\xd5\x7d\xef\xe8\x3b\x8d\xd8\x7d\x63\x7f\xed\xe0\x8e\xbb\xd1\xb6\x7b\xdb\xf6\xdd\xea\x5f\x4e\x5e\xc1\x85\xd5\x2d\x41\xd3\x44\x81\x43\x82\xce\xd2\xac\x62\xdb\x88\x8f\x49\x28\x98\x8c\x25\x63\x96\x0a\xa1\x64\x68\x8e\xa5\x11\x2c\xed\xa8\x14\x8e\xc4\x48\x8a\xec\x97\x77\xb8\xf1\x48\xf6\xca\xef\x92\x61\x54\xcd\xba\x7e\x7d\x9d\xe9\x03\x1b\xaa\xf9\xb8\xd7\x97\x6c\x6b\x71\x2a\x98\x75\x65\xcb\xb6\xb7\x2e\x9d\x4e\xa2\x1e\x1c\x61\x92\xba\x01\x38\x5a\x8b\x09\x47\x51\x91\xa6\x13\x04\x8e\x98\x58\x66\xe9\x50\x09\x04\xcb\x76\x65\xc0\x3b\xac\x1f\xf9\x8a\x16\x72\x8e\xc6\xb0\xde\xcb\xf8\x7d\xb4\xbe\x69\xd4\x36\x5b\xfb\x29\xac\xfe\x53\xbf\xa2\x5b\x9a\x34\xce\xda\xf0\xbb\x57\x57\x15\x58\xf7\x49\x8b\x05\x6b\x9f\xcd\xe8\xfd\xe5\x82\xe4\x05\x34\x5f\x61\x2c\xe0\x28\xb1\x27\x39\x02\x63\x38\x10\x08\x2a\x26\x7c\x25\x66\xd9\x40\x72\x74\x55\x57\x2d\x1d\x93\xc0\x84\xd8\xe4\x18\x02\x59\xae\xc8\xa7\x33\xc0\xed\x0d\x6d\x7c\xb1\x6f\x85\xfb\x67\x06\x17\x99\x09\x26\x7f\x34\xe1\xfe\x0b\x61\xb7\x57\xf5\xc1\xdb\x65\x5e\x6c\x69\x77\x74\x19\xfd\x5b\xf2\x26\xfa\x21\x69\x87\x6c\x68\x21\x2c\x5b\xbe\xeb\x31\x2e\x63\xe0\x20\x0c\xb5\x80\xa4\xb9\xc0\x25\x91\xe7\x6b\x9e\x18\x98\x40\x95\x19\x85\x16\x4c\x99\x0a\x28\x4b\x4a\x3c\x06\xa8\xfb\x39\xa6\xe7\x2d\x2a\x8e\x1c\x39\x64\xe5\x8c\xa3\xa5\x3b\x5e\xde\xdf\xf6\xbb\x9e\x8f\x5b\x2d\x2e\x5a\xde\x7e\xd6\xbb\x5c\xeb\x51\xb9\x93\x77\xec\xb0\xcd\x87\xbc\x6b\x87\xbc\xc0\xaa\xbe\xc5\x89\xac\x6f\x43\x25\x92\x49\x16\x20\x9b\x8e\x24\x43\x35\x6d\x16\x23\x5d\x76\x2d\x47\x75\x7c\x87\x05\x58\x7b\x19\x14\x7b\x17\xb5\xfb\x64\x4a\xc5\x4f\x82\xb9\x93\x77\x7d\x76\x50\x3d\x79\x7d\x7a\xf6\x8a\xcd\x2e\xcd\xd7\x3e\xbf\x98\xe5\xa3\xfd\x15\x9a\x7d\x9b\x3c\x1f\x07\xe8\xaa\x9a\x2d\x6b\xa1\xe5\x18\x22\x01\x58\x52\x83\x32\x8b\x18\xc9\x03\xba\x40\xbb\xb4\x10\x88\xb6\xa5\x72\x52\x6c\x12\x0e\xe6\x6c\xac\xf8\x80\xb1\xa3\x97\x6f\xb9\xd3\x2d\xb7\xef\xa9\xbc\xf5\xd1\xa0\xdc\xbf\xf5\xae\x60\xd3\x39\xeb\x2c\x7e\x14\x9c\x75\xe3\xce\x43\x7a\xad\xbe\x81\xf2\xdd\x1b\x55\x3f\x99\x12\x8c\x9e\xe8\x72\x2a\xed\xda\xb2\x4b\x8b\x11\x2f\x22\x57\x57\x91\x40\x62\xcf\xe2\x68\x16\x31\x58\x92\x3d\x47\x34\x42\xd3\x95\x39\x96\x47\x50\x40\x41\xe2\x09\x0a\xf4\xdb\xf1\x1e\x1f\x38\x33\x27\xef\x19\xba\x75\x6a\xca\xc5\x17\x33\x8f\xcc\x6c\xf2\x2e\x33\xa1\x64\xbd\x22\xce\x09\xa7\x50\x9d\xb3\xa3\x92\x38\xd8\x27\x63\x99\xf4\x4d\xc6\x54\x23\x35\x0a\xa4\x30\xf4\x39\x8b\x0a\xb4\xd0\x27\x68\x9b\x36\x34\x21\x70\x65\x59\xe3\x0c\x3f\xa0\xa2\xd8\x84\x2c\x4b\x91\x89\x68\x1e\x2b\x8f\x5d\x9a\xbd\xfc\x01\x75\xa3\xf4\x33\xbb\x6b\x8d\x41\x3b\x9a\xf5\x5e\x5d\x7b\x49\xc9\x5b\x99\xe7\x76\xcb\x6c\x3b\x59\x2e\x67\x2c\xa8\x25\xee\xf7\x78\x81\xad\x47\x86\x29\xb0\xa2\x12\x47\xae\x12\xda\xbe\x6f\x20\xdf\xa3\x1c\xc0\x85\x0e\xd0\x4d\xd3\xa5\x23\x56\x13\xa0\x66\x71\x12\xf4\x14\x8f\x43\xe9\x50\xf9\x0e\x4e\x78\x78\xf1\xcd\x91\x43\x5c\x34\x66\xd1\x1b\x39\x57\xaf\x1e\x50\x6b\x42\xdf\x79\x59\x5a\xcd\xad\xd0\xb5\x61\x83\xb5\xb0\xd6\xc7\xcb\xd3\xfe\x7a\x56\xcb\xe5\xe6\xe6\x5b\x13\x32\x65\x1d\x59\xbe\x7d\xd9\x57\x3e\x39\x5e\x71\xc3\x24\x90\x69\xe2\x96\xd7\x2f\x7d\xf0\x57\xf9\x8b\x43\x7a\xcd\x4b\xfb\xeb\xb8\xe0\x6b\x87\xc1\xad\x27\x85\xbb\x7c\xfe\x68\xfa\xf6\x8f\xfa\x2e\x9e\x93\x7a\xe3\x4a\x55\xb1\xc9\xea\xcf\x2b\x6d\x66\xde\xcf\xdb\x77\x40\x9a\xc3\x9f\xa7\xb9\x3a\x23\x7b\xc1\x72\x8f\xb3\x3f\xcf\xfd\xfb\xa5\x61\xf9\x5f\x79\xfb\x0e\xfd\xfd\xdd\x6e\x6f\xed\xe8\xba\x92\x96\xfb\xb6\x33\xf2\x25\xf1\x34\x21\x1e\x44\x40\x0a\x3c\x40\x28\x2a\x6f\xd1\x9c\x69\x49\x94\xe0\x43\xac\x42\x40\x29\x6a\x48\x47\x7e\x00\x11\x0a\x54\x9e\xd3\x4c\x2b\x16\x11\x9b\x60\x38\xe2\xdd\xc7\x79\xa9\xce\xaf\x0c\xbd\x36\x66\xc0\xd8\x3e\x5b\xdd\xf9\x47\xc7\x1e\x7d\x3f\xde\x5d\xb3\xd3\xd7\x85\xd6\x95\xaf\xb7\xb6\x56\x9d\x24\x52\x7a\x04\xca\x75\x48\x4a\x21\x35\xd3\x44\x36\xc9\x8a\xc8\x54\x7c\x57\x54\x3d\xd9\x11\x1d\x37\x0c\x24\x51\xd2\x3d\x8e\xe4\x98\x08\x23\x39\x44\xa4\xe6\xc6\xfa\xcb\xcb\x5d\xf1\xfb\x87\xc4\xa8\x67\x57\xc1\xc0\x1c\xd7\x3a\xf1\xeb\x97\xd4\x7b\x77\x5b\xce\x89\x62\xfe\x66\x8f\xcf\xd3\xab\x9e\x96\x56\x4a\x66\xac\xaf\x97\x70\x77\xc5\x10\xb3\xa4\x63\x78\x40\x45\x58\x8f\x24\x47\x13\x18\xc9\xc0\xb1\x16\x21\x68\xb2\x21\x8d\x75\x8e\xb5\xa0\x12\x49\x1a\x6d\x51\x96\x14\xc9\x1c\x9b\x9e\xf5\xab\x57\xc0\x6d\x11\x55\xdf\xfa\xc3\xd9\x0a\xcf\xf9\x5b\x2b\x2b\x7c\xd3\xdc\xcf\xd9\xf4\xd6\xa0\x9f\xce\x67\x23\x4a\xce\x2b\xf5\x1a\xfd\x2c\x4d\xa8\x68\x5e\x79\x55\xa7\x13\x87\x0b\xcf\xbe\x50\xee\x74\x70\xe1\xbb\xca\xe5\xae\x67\xff\xb2\x6c\xdf\xda\x9f\x74\xcf\xfc\xdd\x12\x91\x49\xc5\xc9\x8b\x6e\x2c\x03\x7c\xc5\xf5\x64\xd9\x70\xa0\xe5\x23\x3a\x56\x04\x31\xb6\x58\x5e\xe6\x21\xa2\x1d\xc7\x0c\xf9\x10\x85\xa4\x2b\xeb\xd8\xc0\x2a\xab\xf1\xbe\xad\xf2\x2f\xdf\x1d\xef\xee\x0b\x86\x9d\xcd\x5f\xf3\xc0\xd8\x19\xd9\x8e\xf2\x57\xab\x9e\x4a\xb9\xf2\xf8\x69\x6e\xcb\x20\xbe\x6b\x54\x80\xea\x7f\xf4\x48\xf2\xd4\x85\x58\x2a\x94\x4c\x5d\x74\xb8\xd0\x72\xad\xd0\xf6\x79\x5e\x50\xed\xd0\x15\x49\x87\x53\x1d\x14\x59\x74\x10\x09\x9a\xa5\x68\x92\xc3\x50\x56\x64\xa9\x26\x63\xa7\xa3\xf8\x74\xee\xfc\x57\xbf\x66\xeb\x90\x69\xf2\x5b\x6b\x8f\xd3\x55\x5e\xeb\xd2\xe1\xc4\xe1\x2a\xc7\x4a\xd6\xed\x52\x3b\x73\x9f\x8f\x40\x89\x17\x77\x33\x66\x28\x99\x30\x87\x77\x48\xec\x4b\x0e\xe3\xeb\x06\x85\x09\xc2\x0d\x38\x96\x15\x22\x0d\x30\x9e\x28\xba\x21\x1f\xb9\x12\x32\x49\x5e\x8e\x14\x96\x76\x91\x12\x70\x34\x4b\xb8\x89\x5b\x7a\x66\x95\xf1\xdb\xde\xeb\xb7\x31\x7f\xdd\xbb\xd7\x6e\x55\xf7\x67\xed\x7c\xf7\xdd\xe6\xdb\x73\xfb\xc3\x3b\x2d\x6c\x36\xe9\xd5\x1f\x7f\x2f\x99\x44\x2d\x7f\x84\x51\x04\xec\x90\x51\x9d\xc8\x01\x22\xb2\x43\x8b\x07\x12\xe1\x59\x88\x63\xa1\x88\xf9\x08\xab\x06\x47\xa8\x1e\x16\x6c\xcf\xd6\x28\x9f\x0d\x38\xf0\xf2\x21\x9d\xd8\x6c\xdb\xc1\x87\x4f\xbe\xae\x55\xe9\xd6\x27\x33\x3a\x8e\x15\x9e\x55\xb8\xa2\x3f\xbc\xb6\x60\x54\xc9\x22\x73\xaa\xfe\xbc\xff\x17\x98\x31\x50\x24\x76\xbe\x82\x02\x01\x82\x48\xb0\x24\x41\x50\x62\xdd\x14\x39\x53\x33\xb4\x08\x79\x51\x0c\x65\x52\x06\xb2\x6c\xd9\x06\x22\x62\xd7\x8c\x63\xc2\x67\x48\x27\x86\xe9\x0c\xea\xd7\x58\xef\x8e\x6b\xf9\xf0\x40\xc1\x5d\x0d\xb6\x7f\x78\xad\x79\xe9\x1d\xef\x65\x9b\x77\x98\xba\xfc\xfc\xcf\xef\xeb\xbf\x96\x43\x7a\xf7\xf1\xe6\x34\xdf\xa3\xc4\xde\xa9\x0f\xf6\x8f\x98\x35\x3e\xdb\xe3\x83\x1b\x0f\x79\x76\xbf\x39\x66\xef\x1d\x39\xef\x35\xcb\xdb\x37\xdf\x47\xdd\xd4\x21\x29\x19\x7b\x57\x25\xfc\x83\x91\x05\xb0\x21\x00\x8f\x92\x49\xd1\xf7\xe3\x58\x71\x22\x55\xd4\x88\x58\xd1\xb1\x1c\x79\xaa\x8b\x65\x1b\x72\xa1\x05\x15\x5a\xb1\xcd\x20\x34\x23\x32\x01\xbd\xaa\x59\xbf\xca\xcf\xef\xad\x38\x3c\xa4\x4c\xc1\xcf\xfb\xfe\x82\xcf\x14\x9b\x7b\xbf\xc2\xb3\x78\xf5\x94\x0a\x0f\x77\x3f\xde\x51\xf4\xec\xf7\x19\x93\xc1\x4d\x08\x1f\x27\x22\x31\xaf\x23\xd1\xa5\xe2\x10\x03\xe0\x20\xcb\x64\x49\x56\x62\xf8\x88\x61\xf4\x98\xa3\x62\x0f\x29\x1e\x65\xa9\x61\x64\x07\x9c\x12\x46\x8c\x45\x24\x4e\xa1\x2b\x97\xdb\xf8\x67\xce\x8a\x6f\x35\xd8\xb3\x2d\xeb\x95\xba\x9d\x3f\x1e\xc0\x2c\xbc\xbf\xfb\xfa\x7b\x0f\xe6\x9e\xbb\xd6\xf4\xe2\xda\x6a\x1b\x2e\x25\x6f\x87\x45\x99\x91\xc5\x10\x11\x1a\x88\x25\x9b\x23\x08\x10\x40\x97\x63\x89\xc0\x20\x1d\xc4\x73\x80\x87\x3e\xc1\xc7\xb2\x4a\xbb\xa4\x1b\xbb\x2a\x45\xeb\x76\x02\xbb\xa2\x11\x85\x76\x9b\x05\x0a\x34\x2d\xf8\x70\x80\xbe\xfc\x64\xcd\x4e\xf9\x8a\xcf\x71\x9a\x5b\x1f\xf7\xad\x94\x69\xb2\x5c\xfd\xd0\xc3\x7a\xf7\x92\x17\x53\x74\x92\x73\x04\x86\xb0\x38\xe0\xea\x8a\xe6\x71\x3c\x61\xf0\xb4\x23\x90\x61\xc8\xc6\xd0\xb5\x22\x1a\x2a\x3c\x8e\xbc\xd8\xd2\x01\x13\xda\x82\x03\x63\xe6\xe5\xe5\x1e\x9b\x90\x7d\xfa\xf8\x59\x6f\xb5\xbb\xd5\xe8\x50\xb0\xe1\xe6\xfe\x1f\x77\x3a\xb7\xb3\xb4\x2a\x98\xfd\xab\x6b\x13\xc3\xce\x2d\x7a\x73\x49\x54\xec\x85\xae\x25\xd8\x3e\xa7\x78\x1c\x4f\x12\x34\x32\x18\x89\x85\x92\x4a\x0b\x84\xc7\xab\x32\x1d\x38\x84\x4a\x08\x9c\x2f\xca\x54\xe4\x1b\x5c\x8c\x04\xfe\xef\xf1\xbb\x04\x34\x88\x9c\x77\x32\x55\xec\xab\x96\xfa\x71\xc1\xb2\xcf\x57\x74\x6a\xfa\xe4\xb3\x2c\xcc\x83\xf7\x0e\xf7\xc2\xdc\xc8\x68\xcc\x91\x83\x26\x4c\x7b\x8b\xe6\xec\xf4\xdb\xc5\x57\x7b\x7e\xa6\xe5\xd4\xb6\x36\xad\x20\x6e\xca\xba\x74\xd3\xde\x2a\x1b\x1a\x41\xae\xe0\x91\x33\x07\xf3\x14\x6d\xf6\x20\x89\x2a\xca\x36\x34\xb9\x98\x13\x4d\xd6\xa2\x03\xa8\x32\x3c\x12\x05\x40\x32\x24\x0b\x23\x40\x13\x2c\x69\x53\x10\x87\x51\x60\x84\x28\xb2\x30\xef\xba\x3a\xcb\xbc\x7c\x8b\xee\xac\xfc\x49\xd5\x6d\x72\xcf\xe1\xeb\x2b\xdd\x6e\xfe\xe8\x52\xc7\x45\x33\x33\xaf\x2c\x79\xf4\xc8\xa4\x93\x20\xb5\x4b\x9e\xb8\xf4\xbb\x49\x6c\x2d\x11\xba\xa2\x03\x51\x84\xba\xa9\x22\x1b\xe2\xff\x7f\x86\x0a\xc9\x12\xaf\x7a\xb1\xe9\xe1\x38\x14\x02\x0b\x59\x81\xcd\x04\xa1\xcf\xc8\x02\xcd\x1a\x5c\x98\x4e\x56\x33\x67\xe1\xd8\xd9\x99\xe9\x3a\x95\xba\xe6\xbb\x76\xba\xd5\x88\x6a\xf9\x1f\x67\xaf\x5f\xe2\xcf\x0d\x77\x4a\x4d\x68\x5f\x6f\x63\xde\x07\x8f\x8a\xa6\xfd\x75\xf1\xac\x35\x0a\x7d\xfa\xc1\x91\x4a\x5b\xbd\x11\x8f\xb5\x6d\xc3\x8e\xfc\x9c\xaf\x6f\xb6\x9f\xef\x15\xed\x3a\xa8\x4b\xc1\x6d\xef\x0c\x3d\x34\x38\xed\xaf\xff\xd0\xca\x17\xea\xd1\x8b\xa9\x50\x74\xc6\x07\xc5\xc8\x4b\xbb\xaf\x2d\x7c\x7c\xe5\xb3\x95\x83\x99\xf0\xf6\xfb\xbb\x7e\x6f\x3b\xf1\xd4\xc5\xb4\xc1\xf8\xd4\x94\x95\x05\x8e\x7b\x1b\x0e\x5e\xda\x5c\x8f\x3c\x33\xba\xca\x98\xab\xd9\x9a\xf5\x19\x3c\xb9\xcd\xf2\xb9\xfe\xc2\x17\x43\x26\x94\x4b\x62\xc2\x0d\x81\x21\x22\xca\x95\x2d\xce\x87\x96\x46\x92\x8e\xad\xc9\xb1\x4a\xd1\x3c\x82\x11\xef\x29\x9e\x17\xe3\xc8\xe2\x58\x11\xb1\x44\x14\xf8\x16\x8b\xa4\x97\x2f\xc7\x8e\xdb\x3b\x57\x0f\x32\x57\x2d\xf9\xf6\xe8\x1d\x07\xc7\x7e\xd1\xb6\xf7\x2f\x3b\x0f\xd6\x3f\x3c\xf2\xd2\x2b\xf4\xd0\x7d\xce\x5b\x04\xce\x95\xbc\x50\x21\x73\xb4\xc8\x87\x0a\x25\x48\x2e\x0c\x7d\x4b\x92\x44\x41\xe5\x54\xdd\x12\x04\x96\x22\x1c\x0f\xfb\x01\x1f\xa9\x01\x54\x75\x0e\x3a\x51\x8c\x58\xea\x6f\xd7\xc4\x04\x97\x23\xf5\xa4\xce\xf6\x31\x52\xb3\xf2\x9d\xb7\x64\xa9\xfc\xa0\x50\xa6\xdd\x4f\x06\xd8\xd3\x07\x9d\x1f\xd4\xb0\xe2\x93\xf3\x73\x2a\x6d\x8b\xb3\xa6\x09\xdd\x1b\xd9\xd3\x6d\xd5\x35\x4b\xb2\xdf\xcb\x5a\xa5\x74\x9d\xe9\x8d\xcd\x93\x79\xd7\x0e\x38\xfe\x0a\xec\x0d\x4f\xd6\xaa\xb3\xec\x74\x91\x24\xd2\xf4\x02\xd9\x31\xa8\x38\x40\x80\xd5\x80\x65\x46\x38\xe0\x78\xce\x76\x2d\xdf\x8f\x38\x5d\x67\x4d\x0a\x8a\xb2\x1b\x42\xd1\xf1\x79\x44\x58\x1a\x67\xe8\x6a\x82\xcb\xf1\x44\xb1\xb2\xbf\xe4\xdf\x24\x4f\x2d\x9c\x75\x5f\x69\xb6\x7c\xea\x89\xcb\xed\x4f\x5f\x79\xb4\xac\x57\x9d\x0b\x2f\x56\xbe\x70\x97\xd4\xb5\x93\x07\x1f\x01\x44\x1e\xa1\xb9\x58\x06\x40\x22\x68\xd3\xa6\x7d\x83\x55\x31\xa9\x98\x0e\xa3\x99\x96\x4e\x09\x1a\xe9\x39\xbc\xaf\xab\x12\x6b\xb3\x10\xc8\x36\xc2\x2f\xc3\xe7\x67\x67\xef\xb8\x11\x75\xda\x56\x7e\xda\xe2\x80\x3a\x62\xa4\x7e\x4e\xeb\x34\xe0\x68\x87\x8d\x29\xe7\x6b\xdd\xb2\xcf\xaf\xe7\xee\x25\x8f\x77\x0c\x03\x0d\x6b\x00\x20\x4b\x12\x0c\xcc\x42\x36\xd4\x78\x23\xa2\x4d\x9e\xa3\x2c\xc2\x0e\x2d\x3f\x04\x50\xb6\x6d\x1b\xe8\xac\x27\x7a\x1e\x6b\xb2\x0c\x54\x13\x97\x74\xbb\x16\x7d\x3a\xb5\xd9\x60\x7d\x5f\xbd\x95\x8e\xdd\xaa\x56\xae\x8e\xa5\x9e\x58\x37\x6b\xcc\x7f\xfc\x63\x9f\x37\x3f\xfc\xbc\xc8\xe7\x47\x7e\x4e\xe2\x7c\xba\xaa\x40\x83\x8d\x01\xed\x0a\xd0\x46\x94\x66\x09\x3a\x1f\x73\x06\xab\x32\xb4\x68\x33\x76\x6c\x91\x14\x92\x65\x93\xf4\x6d\x3d\xd2\x62\x04\xd4\xff\x1a\x26\xfa\x7f\xcb\xed\xb6\x91\xdb\x6d\xff\xd9\x6d\xef\x37\xef\xb4\x3b\xdb\x2c\xdb\xd0\x89\x3d\xbe\xaa\x73\xba\xe9\xcc\xea\xb5\x77\x15\xbc\xd0\x7c\x62\xb1\x2f\x32\x25\x51\xd9\x0a\x99\x34\xef\x1a\x72\x04\x78\xdd\x81\x8c\x62\x23\x39\xe0\x08\xc8\xfb\x02\x30\x38\x42\xe3\x04\x1a\x18\xa2\x65\xa8\x9a\x65\xc5\x3a\xe1\xd8\x51\x22\x96\xd9\x5a\x72\xcb\xf0\xaf\xdb\xb4\xe5\xa8\x77\x36\xb7\xfd\xe8\x41\xaf\x62\x7f\x9c\xce\x3f\xf4\xf6\xaa\x5b\x9b\xe7\xd7\xda\x7e\xbf\x6f\xc7\xdb\x19\x93\xb3\x4f\x6c\xb6\x09\x0c\x44\x72\xa1\x23\x68\x0e\x27\xdb\xb2\x8d\x28\x82\x25\x24\x95\x71\x0d\x96\x08\x75\x52\x26\x54\x39\x40\x04\xc1\x10\x42\x00\x2d\x55\xa7\x60\x1a\x3b\xf6\xff\x8e\x27\xaf\x1d\x19\x5d\x6f\xdb\xb3\x32\x8b\x5e\xb0\x74\xed\x11\x2b\x42\x74\x6f\x71\xf1\x43\x8b\x2f\x0c\xdc\x77\x7b\xc6\xc0\x25\x9b\xfa\xea\x05\xd2\xc0\xa7\xca\xf0\xf7\x96\xd5\x99\x3c\x6a\xf7\xe9\xa2\xdf\xe5\x74\x6e\xcf\xaf\x31\xb7\xd7\xe6\xfb\x7b\x16\xf5\x5a\xf0\xd9\xf3\x35\x85\xef\x2e\xa9\x5b\x31\x89\x03\xd3\x81\x0c\x1c\x04\x1c\x9e\x05\x81\xab\xc4\x2c\x26\x05\x93\xe6\x29\x85\x31\xa3\x80\xa2\x3d\xda\x85\x9c\x85\x25\x3b\x64\x59\xe4\x7a\x61\x40\x7b\x4a\x82\x9e\xcb\xea\x9b\x3b\x3a\xe4\x84\x79\xcb\x3c\x3f\xda\xf1\xcd\x1e\xc5\xfb\x57\x2b\x78\x7b\x5b\xdf\x0a\x9f\xe6\x58\xab\x3e\x18\x74\x66\x7f\xd7\x35\x1f\x24\x2f\x9e\xd0\xa4\x1e\x5a\x98\x40\x24\x15\x48\xb4\x07\x23\x51\x88\x5c\x07\x69\x8a\x16\xf8\x12\x63\xf1\x91\x62\x93\x22\xe1\x44\x44\x4c\x29\x14\xa6\x49\x27\xb4\xa9\x97\xe1\x73\x26\x6b\xb5\x5a\xdd\x46\x17\x5b\xf2\xe1\xbd\x16\x6f\xff\xb0\x75\xe5\xb4\x52\x1f\xdd\xf6\x4a\xb9\x7b\x4a\xce\xcf\x59\xb0\x73\xa9\x7d\x87\x96\x27\x6f\x77\x35\xc2\x50\x00\xaf\x1a\x88\xa1\x18\x3d\xc2\x3e\xb4\xc8\xc8\x43\x46\x68\x71\x0a\xd0\x71\xc0\x11\x3c\x41\x7a\xb1\xae\x88\x9c\x12\x00\x00\x79\xc9\x91\x12\xb3\xa5\x2a\x8c\x9c\x98\x33\xeb\x60\x76\x2c\xf7\xed\xec\x7b\x8f\x6f\x77\x7a\xaf\xd0\xe7\xd3\xa6\x3c\xf8\x6b\xec\x85\xbe\xbf\x1e\x1d\x70\x24\xf3\xad\x1a\x49\x4c\xb6\x4d\x35\x64\x7d\x3e\x8c\xb9\x80\x87\x96\xa4\x5a\x0e\xeb\x60\x5e\xd6\x00\x0d\x4c\x86\xd4\x39\xd7\x66\x19\xc5\x72\x22\x8f\xe4\x40\x84\x58\x81\x45\xf1\xcb\x80\x18\x92\x63\x4d\xa1\xfb\x75\x9f\x9d\x59\xf9\x70\xfd\x55\xfc\x4d\x63\x5c\xa5\xe0\x8e\xdf\x86\xdc\xf9\xb5\x45\xef\x0a\xcf\x1b\xd4\x04\x46\x97\x24\x36\x30\x4c\x4c\x39\x34\x96\x6d\xca\x96\x28\x46\x16\x04\x92\x45\x04\x94\x1d\x28\x29\x01\xc3\x6a\x7e\x14\x19\x1c\xcb\x7b\xc8\x83\x9e\x1a\x98\xd8\x0d\xb9\xe0\x65\x40\x3c\x6d\xe6\x79\x33\x87\x4d\x2a\x78\x7b\x7d\x2d\xb0\xeb\xd9\xa3\x49\x1f\xbc\x60\xde\x7b\xf3\xcf\x83\x47\x47\x7d\xfd\xb0\xc9\x5a\x79\xe9\xeb\x49\xd4\x0c\xa3\xc4\xc0\x26\x28\x37\x0a\x78\x26\x12\x48\xc9\x56\x65\xdb\x81\x64\x48\x71\x6c\x18\x71\x32\x19\x41\x4e\xf0\x15\x95\x40\x22\x67\xd1\x31\xe1\x01\x87\x4b\x0c\x88\xcf\x71\xe9\xa9\x17\x0b\xc9\x4e\xa5\xaa\x3b\x3a\xf5\x43\x43\xe9\x05\x23\xde\xfe\xe2\xc7\x8f\xf8\x7b\x9b\x76\x3f\x2b\x98\x27\x5b\x94\x31\x40\x24\x9e\xa3\x84\xa4\x40\x52\x58\x53\x3d\x15\x09\x50\x8d\x3c\x8e\x03\xb1\x63\x32\xa1\x88\x1d\x5f\xa2\x24\x5e\x17\x39\xc4\xdb\x02\x1b\xd2\xb1\x6a\x63\x57\x89\x13\xc8\x2e\x7c\x7f\x7b\xd5\xa3\x3f\xc6\xe6\x1d\x9b\x7f\xda\x90\xbe\x13\x53\x16\xe7\x59\x20\x0e\x1d\x7b\x38\xf7\xd7\x0d\x0f\x9e\x4e\xed\xdc\xf3\xe9\x89\x8c\x4d\xaa\x26\x1e\x24\x0b\xc2\x80\xe0\x45\x36\x36\x62\x68\xc5\x5e\x1c\xdb\xc0\x65\x29\x83\x94\x65\x59\x8b\x4d\x16\xbb\x88\x21\x62\x19\x46\x84\x18\xd1\x22\x22\x05\xde\x61\x5f\x06\xc4\x6e\x6b\x7d\x8d\xd6\xdf\x8d\x3e\x71\xfd\xf4\xd2\x63\x59\x4e\xfc\xb8\x31\xff\xbe\x8b\xa3\xbe\xb8\xbb\x66\xda\x6b\x3b\xee\xf8\xdf\x14\xef\x94\x31\x15\xe5\xc4\xcb\xf5\x03\x4f\x8b\x65\x47\xb5\x74\x86\x26\x43\x89\x92\x03\x43\x97\x98\x18\x7b\x38\x36\x62\xca\x8a\x64\xa8\x13\x8a\x2f\xc7\x58\xc4\xae\xc8\x7a\x94\x95\x8e\xbe\x6f\xa9\x5e\xa5\xc1\x55\x73\xf2\x65\x77\xd6\x60\x38\x6c\xd1\x5b\xca\xec\xa3\xfd\xee\x7f\x55\xeb\x66\xa9\xd7\x2f\x6c\x2e\x51\x7d\x5f\xd1\x7d\x49\x14\x7e\x96\x42\x8a\x47\x0c\x84\xc8\x8b\x91\x10\x02\x9d\x50\x34\x0e\x88\x98\xe5\x01\x21\x12\xba\x44\xa9\x2c\xe9\xc9\xd0\xa3\x05\x4e\x73\x15\x87\x21\xf0\x3f\xc2\xac\xff\x19\x22\xfb\xb7\xd6\x45\x6a\x4a\xae\x94\x4c\x4d\xd2\x0e\x91\xd5\x79\xb3\x66\xfb\xc1\x9b\x0a\xef\x6c\x52\x49\x09\xc7\x70\xab\x77\x4d\xfe\xf2\x8a\x9d\xe5\xd5\x77\x3a\xdc\xea\xda\xf1\xe6\x2a\x63\x7d\xf2\x24\xd2\x59\x8a\x61\x68\x9d\xf0\x25\x55\x88\x02\x27\x0e\x44\x86\x87\x04\xe9\xfa\x32\x25\x63\x85\x92\x05\x85\xe5\x01\xa9\xd3\x8e\xc5\x10\x40\xf1\xf8\xc8\x71\xff\x16\x39\x4d\x30\x3a\xfc\xbc\x73\xb9\xf5\xa7\xaa\x4f\x22\x82\x11\xfd\xc5\x12\x0f\x7f\xcc\x77\xb4\xce\xf0\xa9\x25\xb3\x95\x79\xe3\x8d\xef\xa8\x66\x85\x1a\x26\x8f\x45\xc4\xaa\xaa\x28\xc8\x21\xab\x60\xd2\x75\x11\xa9\xc8\x3a\x19\xaa\xba\x4c\x1b\x2c\x66\x2c\x4a\xf6\x69\x4b\x94\x43\xcd\x96\x75\xc3\xa6\x42\x9a\xb0\x28\x4b\x45\x89\x71\x54\xf3\xf8\xe0\x5e\x5c\xcf\x52\xeb\xeb\x64\x6f\xb2\x6b\xe8\xf9\x2d\xbf\x2f\xdb\x1e\xe4\x98\x99\x6d\x44\x9f\x5b\x55\xd6\x65\x6d\xb3\xef\x3b\x2d\x89\xba\x44\x80\xb7\x6c\xd3\x62\x22\x47\x03\x38\x64\x44\x1e\x44\xb4\xc8\x19\x0e\x0e\x22\x4f\x06\xaa\xe9\xfb\x9a\x63\x41\xa4\x85\x0c\xb6\x74\x2b\x56\xd2\x25\x3e\x75\x9b\xb5\xbc\x76\xae\x62\x59\x32\xaf\x1d\xab\xd7\x78\xfb\xe9\xc0\xa8\xc9\x9b\x9b\xc7\x5d\xa2\x3a\xd4\x79\xe7\xc6\x47\x9d\x0a\x55\xf9\x25\x89\xcf\x4b\xcb\x05\x91\x20\x50\x52\x44\xc9\x42\xe8\x2a\x8e\xee\x20\xd5\xa6\x04\x52\xd6\x58\xc4\xd8\xc8\x87\x2a\x17\xf3\xa2\x18\xb8\x5e\x10\x2b\x32\xd6\x81\x0a\x5e\x82\xfe\xbf\xf5\xe1\x52\x53\x06\x35\x99\xfd\xbf\xe6\x27\x57\xac\x6c\x7d\x31\xb8\xd1\xe6\xba\x9a\x63\xda\xa8\x19\x0f\x96\x36\xac\xf4\x7a\xb9\x5f\x6a\xfc\xf4\xcb\xfb\x27\x26\xcf\xd8\x92\xfb\xe3\xfc\x6a\xf2\xa0\x8f\x3c\xd3\xf7\x21\x07\x3d\xdb\x66\xa0\xcb\x84\x91\x83\x04\x91\xa1\x6d\x8c\xc5\x50\x33\x48\x52\x10\xa9\x88\x50\x5d\xc3\xc2\x8a\x44\x01\x53\x41\xe9\xd1\x5d\x1b\x6a\x1f\xbc\x75\xa5\xf1\xd5\xd5\x6e\xc3\x86\xbb\x71\xc1\xc7\x7e\xa5\x75\x8d\xfe\xea\x71\x25\x6f\x6b\xf3\xe8\x9d\xca\x83\xb3\xb7\xde\x9b\xc4\xb1\x37\x57\x51\x49\xcf\x51\x62\x1a\x10\x0a\xab\xaa\x06\xd4\x42\x05\x22\xca\x15\x15\x9b\xb0\x83\x88\xf0\x04\x95\x61\x18\x97\xb5\x18\x5e\xa6\x89\x48\x87\x72\xe2\x61\xc4\x87\x3b\x8a\x2f\xe9\xd7\xe8\x6e\xcf\xb5\x35\xb7\x76\xe0\x7a\xfa\xf2\x8d\xea\x65\xa7\x3e\x57\xfa\xa9\x45\xb5\xc9\x35\x06\x36\x69\x9d\x3c\x9a\x22\x74\x03\xdd\x27\x45\x89\xb0\x14\x85\xc0\x50\x10\x59\x82\x27\x99\x28\x36\x04\x00\x6d\x8f\x8c\x1c\x86\xc1\x21\xc1\xb3\x3a\x4f\x85\x56\x68\x13\x3c\xc3\x59\x89\x97\x5c\x29\xf5\x41\xd9\xb3\xbf\x2d\xce\xda\xf9\x7c\xca\xfd\x33\x59\xb6\x96\x91\xbf\x64\xe9\x73\xe3\x3f\x58\xb6\xf6\xe8\xea\xd6\x68\x59\xbd\x8c\xa9\x99\x24\x16\xa2\x07\x91\xe2\x89\x34\xd0\x28\x96\x60\x55\x5d\x74\x81\xe8\x32\x0a\x2d\xb9\xba\x87\xd9\x28\xb4\xd8\xd0\x0c\x30\x1d\x90\x6a\xec\x38\xba\xc8\x70\x46\x24\xbf\x34\x3a\xfc\x6f\x4d\xe5\xd4\x94\xb2\x59\x32\x65\x4d\x0b\xfd\x79\xa5\x4b\xb2\x74\xb1\x2a\x26\x1c\x79\xe5\xd3\x2f\xca\x1f\x99\xf3\xa8\x28\xc8\x1a\xf7\xdb\xde\x71\xc7\xce\xa5\x3b\xdb\x0e\xfc\x63\x4f\x12\xe7\x70\x75\x10\x33\xbe\x6f\xc7\x24\xe4\x3c\x0a\x6a\xae\x2c\x09\x5c\x4c\x09\x2e\xcf\x29\x8a\xcf\x00\x51\xb6\x78\xd1\xd3\x09\xd7\xc3\xb4\x6b\x5b\x3e\x8d\x85\xc4\xf1\x48\x7e\xab\xfd\x90\x8f\x3a\x8d\xac\xb7\x1a\xbe\xd9\x78\xee\xe8\x7c\x59\x63\x98\xab\xf7\xee\x0b\xa9\xc5\x9b\xe4\xa9\x5f\xb8\xba\xf3\x6d\x12\x55\xbc\x3c\x17\xca\x1a\xc9\xe8\x8e\xc1\x47\x4c\x8c\x19\x46\xa3\x44\xc2\xe6\x09\x99\x0d\x29\x59\xd7\x28\x91\xa2\xbc\xd8\x27\x49\x8e\x14\x20\x2f\x61\x23\x8c\xd2\x99\x9a\xef\xf0\xe0\x4c\xfd\xed\xa7\xef\x15\x1d\x5f\xe6\xc3\xde\x2f\x96\x5e\xdb\xb0\x22\xe5\xd0\xda\x4a\x45\x1b\x57\x3e\x7f\xbb\xcf\xe3\x96\x15\x56\xb4\x4d\x5e\x3a\x09\xa0\x62\x08\x36\x25\xd9\x3c\xe6\x79\x9f\x10\xc3\x20\xf6\x7c\xc8\xb1\x96\x6e\x9a\x48\x70\x62\x0d\x53\x44\x8c\x21\x92\x5c\x92\x0d\xb4\x28\x34\xdd\x74\xee\xd6\xb2\xb7\xcd\x25\x4f\xcf\xdd\x39\x53\x65\xe7\x76\xdb\xba\x7f\xf1\xdc\xec\x47\xf3\x07\x95\xdd\x31\x6e\xf1\xb0\x7e\x5d\xac\x7a\x67\xda\x77\x4f\x62\xc7\x8d\x22\x79\xce\x66\x55\x2c\x04\x06\x0b\x7d\x45\xf7\xa0\x22\x88\x5e\x68\x40\xd3\x43\x98\x37\x40\x14\x43\x4d\x74\x35\xa0\xf0\x4a\xc8\x86\xbe\x1b\xc1\x97\xa2\xfe\xbf\x35\xc4\x53\x53\x72\x65\x4a\xfd\x5f\x5e\x1e\x83\x5f\xff\x7a\xe2\x17\xf7\x73\x4d\x5f\xd8\xaf\xa5\xf3\x16\x63\x0f\x6f\xf3\x47\xfe\x37\x96\xe9\xdf\x57\xef\xd7\x60\x7b\x89\x4f\xf6\xee\x4c\x9e\xb5\x10\x44\x80\xe1\x42\xc0\x50\x14\x89\x01\xef\x13\x8c\x21\x28\xc8\xc2\x80\x92\x15\x17\x90\x96\xe0\x1b\x3e\xe4\x30\x26\x25\x8a\xe4\x10\x43\x06\x1c\x88\xd3\xe1\x8e\x2e\x5d\xdb\x5d\xcc\x6b\xc9\xdf\x88\x99\x5a\xb7\x46\xd5\xce\xbd\xb7\xca\x29\xdb\x29\x4f\xed\xf1\x87\xdb\xf5\xcf\x36\xa4\x9e\xde\xff\x8d\xe4\x9d\x56\xc3\x72\x39\x3d\xb6\x14\x3b\x74\x39\x5e\xd2\x15\x84\x05\x21\xd0\x6c\xce\x63\x64\xcb\xd1\x55\xc2\x26\x39\x1d\x7a\x92\x66\x3b\x88\x42\x04\x15\x01\x28\x27\x86\xfe\xa9\x82\x73\x33\xbf\xb1\xc7\x1c\xfd\xe0\xe3\x3e\x9b\xdb\xe4\xaa\x9d\x75\x1a\xd3\xe5\xd0\x2f\x7d\x47\xbc\xf3\xc7\xa6\x86\xf3\x0f\xef\x9b\xfe\x7b\xf2\x70\xe4\xea\xb4\xa6\xfa\x8c\xe9\x5a\x1e\xa7\x9a\x9e\xaf\x98\x3c\x63\x71\x31\xa1\x48\x86\xa6\x85\x6a\x44\x92\xbc\xee\xc5\x88\xa1\x5d\xc6\x24\x3d\x2b\xd6\x09\x31\x71\xd4\x3f\xf4\xd5\x47\x67\xcf\x4e\xe9\xf9\xf3\xf9\x87\x13\x3f\x9c\x30\xb4\xf1\xcc\x83\xe4\x02\xf5\xed\x73\xe3\xdf\xde\x78\xec\xc3\xcf\x33\x91\x4c\x99\xe4\xa5\x03\x80\x84\xbc\xcb\x20\x56\x17\x84\x38\xe0\x63\x5f\x8c\x15\xcc\x28\xd0\xe2\x54\xe4\xf3\x76\xc0\xd1\x3c\xa5\xe9\x08\x12\x81\xa7\x1a\x66\x64\x86\x84\x2d\xbf\xc4\x1f\xfd\xb7\x36\x73\x6a\x4a\xb6\x82\xef\x66\x4b\xcb\x1f\xfd\x3e\x77\xd1\xb9\x7f\xed\xff\xac\xd0\x33\xba\xce\x84\x32\xaf\x34\xdc\xd4\xeb\xf9\xdc\x69\x3f\x07\xaf\xf6\x6d\x53\xfb\xb3\x77\x17\x94\x5a\xc2\x27\x0f\x47\x56\xc0\x6b\x9e\x45\xaa\xd0\x36\x7d\x0b\xf0\xb2\x85\x5d\x1d\x85\xba\x1d\x11\x40\x12\x42\x93\x74\x63\x4a\xd1\xa0\x0a\x61\x28\xd2\xb2\x69\xe9\xac\x9a\x8e\x33\x46\xf7\x3a\xef\xf4\x6e\x90\xcf\x1e\xf0\x23\x38\x58\x72\xde\x85\x5f\x1f\xcd\x68\x5f\xb6\xe7\x99\x25\xf3\xfe\xc8\x31\xed\x58\x83\xf5\xc5\x82\xe1\xc9\xc3\x91\xe4\x05\x06\x4f\x79\x1e\x24\x8c\x90\x44\x02\x6f\x8b\x0a\xc1\x60\x52\x91\x69\xc8\xa8\xaa\x4c\x90\xa4\x20\x93\x4c\x88\x5c\x57\xf6\x6d\x6c\x50\x94\x9b\x4e\xf6\x70\xb0\xcb\xf3\xf7\xf3\x0f\x1f\x7a\x22\xef\xb3\x21\x53\x16\x6e\x7a\xff\xd6\xc4\x3e\x15\x9c\xb6\xd6\xfc\x31\xcb\x5a\x94\x7b\x7f\xf5\xc9\x8e\x6f\x26\x6f\x97\xf9\x48\x80\x50\xe7\x35\x57\x47\x8c\x26\x48\xbc\x1f\xdb\xbe\x2a\x32\x5a\x2c\x69\x31\x10\x1c\x9d\xa4\x05\x8b\x70\x1c\x3b\x34\x78\x8e\x63\x24\x99\x46\xe9\xd0\x72\xae\x7f\x9c\x69\xc0\x23\xf3\xa7\xc7\xef\xff\x4a\xce\x5a\x31\xaf\x33\x05\xa5\x6a\x53\xa7\x8d\x19\x3e\x5c\xef\xdb\xfa\x7e\xb6\xd6\x8f\x8d\xe4\xdd\xad\xd8\xd4\x22\xc3\x93\x20\x43\x61\x36\x30\x48\x33\xd2\x4c\x23\xa4\xb1\x8e\xb1\x26\x46\xa2\x2a\x68\x90\xf2\x58\x4e\xd6\xe8\x30\x54\x0d\xce\xf3\x05\x9c\xce\x34\xaf\x06\x67\xd4\xdc\xf1\xfa\x94\x73\x0f\x88\xfd\xfd\xca\x14\xab\xb4\x28\x97\x9e\xef\xb7\x9f\x66\xd5\x15\xab\x3f\xd8\xb8\xe4\xe4\xd2\x3e\x49\x24\xa7\x3b\x36\x61\x19\x4e\x60\xd8\x02\xf2\x25\x9f\x74\x25\x15\x49\x01\xaf\x83\x58\x63\x7d\xd7\xb3\x1c\x1b\x3b\x7e\xc4\xcb\x06\xb2\x49\x8d\x54\x39\xe0\x47\xe9\xb0\x74\x5b\x65\xfd\xae\xdf\x07\x7b\xef\x96\xca\x9a\x6b\xed\x89\xae\x2f\xea\x8f\x2d\x7f\xe8\x7c\xd6\x3c\x25\x06\x1c\xb8\xf8\xac\xcb\x98\xf2\x5f\xae\x4c\xa2\x1c\xb3\xa8\xc1\xd8\x36\x03\xc3\x37\x19\x97\x8f\xe2\x48\x36\xc3\x40\xf1\x48\xce\x70\x49\xa4\x45\x50\x67\x03\x91\xe2\x4c\x9b\xd6\xf4\x20\x76\x6d\x5b\x92\x88\x7f\x7a\xfb\xe3\xf2\xfc\xdf\xda\xe4\xa9\xcd\xf3\x7e\x5a\x64\x58\x9a\x3f\x38\xfe\x66\x8f\xe2\x4b\x97\x65\x9f\x97\x2b\x8f\xf4\x61\x27\xd7\x59\x39\xb0\x54\x13\xd0\xdc\xaf\x9a\x55\x38\x52\xb3\x71\xcb\x17\xf7\xf2\x24\x2f\xd5\xe7\x5d\x8a\x09\xb1\xea\x48\xba\x45\x23\x96\xe7\x58\x41\x60\xe9\xd0\xf3\x65\x31\x74\x6c\x8f\x65\x4c\x51\x71\x5d\x4d\xb7\x00\x13\x72\xc0\xa7\x58\xce\xe6\x13\x1f\xd6\xfb\x13\xbe\xc9\x7e\x7d\xd5\xf6\xad\x9d\x86\x2c\x5b\xf4\xc6\xaa\x45\x43\x99\x75\x2f\x1e\x55\xf8\x61\x7b\xf9\xe1\x8b\x06\x17\x3a\x9d\xbf\x55\xf6\xe4\x05\x7d\x05\x93\x1c\x6b\xf2\xa4\xa2\x43\x1d\xb8\x96\x21\x6b\x9a\x11\x85\x40\x09\x09\x22\xa6\x3d\xd6\x36\x79\x82\x17\x79\x99\x8f\x03\xce\x8c\x75\x5e\x54\x89\x28\x31\x8c\xba\xb6\xbf\xfc\x70\x9f\xf5\xe2\xd8\xae\x8e\xed\x1b\xdf\x1e\x2e\x4d\xea\x55\xe3\xe4\x5b\x77\xa2\x0e\xd7\x1d\x42\x3a\x56\xeb\x9d\x20\x63\xf7\x54\xe2\xbe\x80\x66\x91\x00\x68\xa2\x49\x02\x59\x94\x2c\x9e\xe5\x7d\xcf\xf7\x65\x39\x40\x46\xe4\x33\xb2\x65\xe8\xb1\x29\xab\xa1\xe5\x30\xd0\x83\x7c\x84\x88\xbf\x87\xa2\x5e\x3e\xac\xa7\xdf\x1b\x96\xab\xd7\xae\x39\x8d\xe4\x5b\x0d\xda\x16\xa8\xfd\xe8\xd3\x43\xd5\x7a\xbc\xb6\xd2\x29\x7a\x3e\xd5\x39\x3c\xfe\xad\xcf\x5f\xcf\x98\x4d\x56\xc2\xc3\xca\x5b\x4c\x14\xd3\xd8\x12\x5c\xd2\x0f\xf5\xc8\x46\x8e\xe9\x05\x9c\xa1\x68\x14\x47\x32\x32\x4b\xa8\x5a\xe0\xb8\x16\x94\x91\xa6\x7b\x8c\x85\x39\xff\x6f\x9d\xaf\x97\x77\x39\x77\x85\x06\xa5\x6f\xe8\xbf\x3e\xca\xbe\xac\xe4\xc5\x49\xda\xc1\x5c\xc7\x5a\x2c\x2e\x3e\xab\x60\x75\xe5\xda\xa9\xa7\x83\xeb\xd7\x6a\x92\x31\x60\x24\x0c\x89\x9a\xe6\x5a\x3e\x64\x15\x87\x8d\x34\x84\x04\x95\x55\x25\x36\xa6\x18\x5d\xd5\x29\x02\x78\x94\x18\x08\x82\x68\x45\xa6\xe7\xe2\x28\xb2\xa0\x6b\xd2\x2a\x93\x78\x97\x8f\x5d\xd9\xb5\x29\x33\x93\x73\x54\xdd\x1f\xf7\x7d\x62\xed\x68\xdf\xfe\xcd\x9e\x1d\x5a\x2d\x19\x6b\x0e\xac\xf7\x7c\x50\xf7\x3d\x6a\xeb\xe4\x39\xdc\x42\x47\xd3\x62\xc1\x0d\x02\x9e\x56\x9c\x10\xfa\xac\x0b\x63\xc3\x91\x1c\x01\x29\x3e\xf2\x38\x2c\x23\x53\x96\x75\x5e\xd7\x85\xc0\xa5\xa1\xec\x22\x31\x4a\x27\x8a\xcf\x28\x7f\xb2\x56\xe9\xf7\x16\x7e\x34\xe9\xf0\x2f\x59\x53\x1f\x14\x2e\xf9\x61\xd6\xca\x77\xc7\x95\xae\xb6\xb7\x44\xd9\x56\xbb\xbe\xef\xd0\x35\x63\xd6\xa4\x89\x45\x0c\x5d\x4d\xc5\x5a\x2c\x46\x3e\xa9\x2a\x6a\x00\x2d\x2a\x96\x82\xd0\x0d\x05\x11\x6a\x82\x4f\xc4\x96\xa9\x33\x1a\x23\x0b\xb4\x48\x01\xa0\x43\x51\xf8\x2f\xa9\x9a\xd1\x79\xfe\x6f\x93\x2a\xa9\xcd\x07\x67\xaa\x91\x36\xe5\x22\x17\x6e\xf9\x04\x55\xa9\x94\x2f\x77\xe1\x8f\x8b\x8f\xdb\xd0\xf3\xdd\x03\x15\x76\xbd\xd9\x6a\xd8\xc4\x72\xef\x1d\x58\x56\x61\xf4\xcf\x7d\x33\x96\x0c\x24\xd6\x89\x75\x3d\x0e\x20\x8a\xe3\x0d\x59\x71\x03\x32\x94\x6c\x8d\x97\x4d\x3a\xb6\x23\x45\x71\x58\xdb\xb5\x45\xc9\x22\x14\x4d\xd6\x62\x92\xb6\x58\x42\x01\x7f\x3b\x07\xbe\x8c\xfc\xca\xdf\x15\xe9\x5c\x14\xf6\xab\x18\x54\x26\x0a\x9d\xfb\xee\xd2\xc6\x56\x9f\xb6\x5b\x39\xe0\xe3\x9b\x0d\x6e\xaf\x0d\xa9\xfe\x95\x4b\x16\x4a\x5e\x14\xe7\x04\x59\xb7\x5c\xdf\x94\x91\x22\x79\x86\xc5\xc4\x3c\xf4\x6d\x40\x4a\xa4\x2e\x53\x58\xf4\x25\xdd\xe0\x31\x6d\x9a\xb6\x07\xdc\x58\x33\x08\xce\x67\x85\xc4\x51\x7c\xcb\x0f\x9a\x56\xa3\x4b\x1e\xfa\x50\xc9\x0a\xcd\xf6\x77\x10\x61\xd1\xfa\x8f\xef\xfe\x3e\x64\xcd\x3a\xae\x7b\xf3\x4e\x27\xc4\x93\x49\xec\xec\x52\x91\xce\x4a\x0c\xe5\xf8\xa4\x60\x78\x06\xeb\x04\xac\x10\xc4\x36\xe9\x60\xde\x51\x64\x59\x33\x34\x32\x8c\x20\x14\x18\x06\x47\xaa\x84\x39\x9e\x82\xe9\xd8\x51\x7f\xf1\xf6\x9d\x4b\xeb\xdd\x53\x5d\xae\x9e\x9f\xf4\xd1\x2b\x59\x70\x9c\xf5\xf1\x31\xbf\xa5\x7e\xfa\x6c\xa5\x5e\x6d\xe7\xcd\xf9\xed\x5a\xc6\xc4\x25\x13\x3b\x75\xa9\xa1\x8f\x3d\xa8\x1a\x1a\x47\x44\x31\x05\xc8\x50\xd3\x10\x1d\xc8\x01\xc9\x5b\x08\x80\x20\xc6\x74\x18\xba\xb4\x04\x05\xac\x90\xbe\xec\x19\x76\x3a\xe5\x8c\x53\xfc\xda\x6d\x37\x37\x56\x1d\xb9\x4d\x6b\xd1\x7c\xf2\xb4\xba\x59\xc7\x1d\x1d\xd0\x6b\xeb\x2f\x4d\xd0\x9a\x8a\x85\x4a\x0e\x9a\x39\x20\x79\x2a\xdf\x2c\x2b\xfa\x26\xcf\xda\x1c\xa1\xd8\x71\xa8\x90\x1c\xed\xfb\x94\x69\x62\x28\x39\x32\xc7\xca\x0a\x81\x15\x81\x87\xa6\x6e\x73\xbe\xaa\x89\x54\xe4\x52\x56\x9c\x58\xd3\xb5\xc1\xb9\x3b\xf0\xaf\x02\x1b\xb6\xfe\xb2\xab\x5e\xa9\xbb\x5b\x83\xb7\x0f\x2c\xfb\x6c\xcd\x66\xfc\x6d\x4a\xad\x13\x6d\xf6\xe4\xd9\xdc\x23\x63\x4d\xe9\xc4\xad\x02\x36\xc0\xa2\xc6\x3b\x81\x69\xfc\x7f\xac\xbd\x65\x94\x16\xc7\xf6\x3d\x3c\x10\x1c\x02\x04\xb7\xa0\xc1\xbd\xda\x70\x1d\x12\xdc\x5d\x02\xd5\xde\x5d\xed\xde\x8d\x0f\x0e\xc1\x09\x0e\x81\x20\x21\x40\x02\x21\xb8\x5b\x42\x70\xd7\x10\x3c\xb8\xbb\x84\xf0\xae\xfb\xe6\x7f\x7f\xb9\x73\x79\x66\xe5\xae\x59\xcf\xf7\xfe\x50\x5d\xbd\xfb\xd4\xa9\x73\xf6\xd9\x9b\x94\x05\x5f\x24\x3c\xd9\x66\x28\xdd\x93\x98\x90\xe4\x42\x96\xd5\xa2\x48\x0c\x49\x8a\x8c\x02\xce\x33\x1c\xda\xa2\x10\x7c\xbf\x43\xb6\xe9\x7a\x9a\x29\x9d\x46\x36\x5b\x52\x05\x1b\xf5\x71\x39\x33\x57\xf1\xbe\x52\x93\xa4\x01\x7b\x7f\xad\x73\x28\x5d\x83\x39\x8b\x47\x96\x6b\x1b\x47\xd9\x77\x0c\xb3\x5d\x06\xe3\x79\x4d\xb6\x4c\x17\x49\x26\xcd\x23\xc4\x02\x97\x26\x90\x4a\x33\x6a\x64\x00\x42\xe6\x18\x9a\xf3\x02\x2b\x8a\x74\xde\xd3\xcd\xbf\x75\x5c\x26\x65\xf9\xdf\xa8\x78\x49\x89\x39\xf3\x18\x0d\x92\xa7\x88\x65\xda\x7c\xd2\xe5\xce\x46\x65\xfb\xcb\xbe\x65\x98\x63\x4b\xf3\xbf\x7a\xb3\xfd\x93\xf1\x45\xbf\x7b\xfe\xfa\x41\x49\x6b\x77\xd1\xaf\xcb\xf6\x8d\xa3\xf8\x21\x0c\x5d\x53\x10\x05\x5f\xd7\x90\x4b\x42\x3e\xa4\x4c\x4a\x90\x0c\xc2\xf6\x09\x86\x81\x62\x28\xe1\x9e\xcc\xb2\x11\xa2\x6c\x4a\x47\xa2\xe7\xf3\x21\x1f\x1b\xf6\xb9\x7f\x7c\x7b\x27\x7d\xba\x8c\x25\x3e\x70\x4e\x14\x7a\xd9\x31\xeb\xd8\x0d\xf7\xf2\x9e\x5e\x74\xa2\x7d\x9a\x3a\x05\x36\xd5\x3f\x74\x66\xdd\xf7\x71\x14\x8b\x76\xd9\x50\x8d\x48\x9b\x50\x35\x87\xf1\x5d\x48\x73\x86\xa0\xf9\x7e\xe4\x38\xb4\x8f\x3b\x38\xa9\xeb\x7c\xc8\x45\xbc\x08\x7d\x97\xf3\x1d\xd1\x76\xcd\x14\x44\x51\xa4\xad\xcb\x4e\x5f\x5f\x7f\xf7\xda\xbd\xee\x59\x2e\xf2\xed\x8b\x56\xfd\xec\xea\xc6\x62\x4d\xea\x9f\xef\xbe\xf8\x56\xd1\xd5\xf9\x67\x80\x86\x71\xac\xb9\x3b\x3a\x03\x08\x0f\xa3\x90\xc6\x84\xac\x8f\xe1\xa4\x00\x75\x55\x57\x80\xe0\xd8\x02\xaf\x9a\x98\x0c\x58\xc1\xa4\x08\x1d\xb1\xa4\x8f\xc8\x80\x31\x53\x08\xe1\x69\xc6\x74\xb0\x16\xa4\x59\x2f\x34\x2b\x96\xb5\x7d\x86\x37\xab\x86\xbc\x2a\xd0\xba\x71\xe5\xf9\xe6\xb9\x9f\x7f\x4c\x7c\x3c\x29\x73\x89\xd4\x65\x02\xb1\x15\x46\x58\xc4\x09\xac\xec\xe2\x02\xee\x19\x22\xb2\x0d\x5b\x0a\x79\x56\x0a\x19\xcc\xb7\x7c\x83\x77\x3d\x04\xb1\x48\x26\x38\xd7\x96\x34\x4c\xa5\x29\x3c\x4c\x61\x97\xbf\x96\x16\x7e\xaf\x76\x5a\xff\x28\x4b\xc2\xd2\x91\xb5\xf3\x8f\xa9\xda\x61\x59\x91\x6d\x8f\x66\x24\x34\x08\x3a\x77\x6f\xf6\xdd\xa0\x45\x52\xfc\xb0\xec\x47\x21\xad\x48\x3c\xc6\xa8\xc8\x10\x31\x2b\xe4\xa1\x23\x33\x0c\xa1\x08\xaa\xec\x2b\x50\x94\x39\xcc\x83\x3a\xe1\x03\x1c\xb7\x05\x1f\x79\x4e\x48\xa7\x10\xc2\xab\xe8\x95\xac\x8f\xff\xac\x3f\x04\x1b\x14\x25\xd5\x71\xbe\x4b\x7a\x9b\xb6\x45\xe9\x7b\xf7\xc8\xeb\x6b\xcf\xbb\x07\xdb\x75\xdc\x9b\xba\x3e\x64\xcc\x74\x24\x04\xac\x14\xd1\x3a\x0d\x31\x26\x90\x65\x2c\x0c\x71\xd9\x55\x68\x85\x17\x64\xc7\x41\xa1\xce\xd3\x36\xa6\x7a\x34\x61\x19\x1c\xe6\x52\xac\x29\xd1\xa1\x1a\x3b\x1d\x79\xf4\x99\x3b\xe2\x44\xae\xca\x3b\x0a\xd6\xbf\xbb\x77\x41\x9a\x56\xbb\x5a\xbc\xf8\xf6\xf4\x91\xd3\x1f\xef\xff\xf6\xca\xb9\xfe\xa2\xd4\xc2\x89\x5f\x4c\x74\xc8\xd0\xe0\x55\xd5\x73\x25\x1d\x67\x24\x04\x43\xdc\xa1\x39\x86\x84\x9a\xa5\x09\xa6\xed\x92\x34\x23\x02\x4d\xf0\x78\x83\x50\xd8\x48\x8f\x4c\xe3\x3f\x4c\x73\xfe\xad\xba\xf4\x4f\x84\xe3\xa4\xc4\x06\x39\xd3\x36\x4d\xae\xba\x54\x0a\x7b\xfe\xa4\xd5\xd3\x16\xcd\xc6\x92\x9f\xff\x32\xe0\xf5\xa3\x0a\x89\x77\xa7\x14\x6a\xb5\x3c\x57\xed\x36\x6b\x67\x9d\x5d\x90\x6d\x5c\xee\xf8\xbd\x21\x70\x82\x90\x96\x80\xa6\x8a\xb4\x0a\x45\x4e\x64\x71\x40\xba\xac\x66\x00\x4d\xb4\x09\x5a\xf0\x01\x89\x5c\x00\xd8\x50\xa7\x55\xd5\x75\x29\x55\xa0\xc5\xd8\x1f\xe5\xcf\x8b\xd3\x87\xa3\xdb\xe5\xb3\x66\xca\xf1\xe5\xf2\x4d\xe7\xba\x76\x5b\x50\xfe\xe8\xa5\x26\xbb\xbf\x9f\x79\x7c\xcf\xd3\x84\xbe\x3d\xb2\x55\x8d\x1f\x8e\x4c\x21\x90\x7c\xc2\x67\x30\x5f\x12\x6d\x11\x0a\x3c\x0a\x05\x08\x48\x9b\xe0\x1c\x44\x13\x14\xd0\x21\x11\x2a\x1e\xc1\x60\x14\x15\x92\x0e\xc9\xd9\x16\x8a\xbd\xe4\x3e\x5d\x0a\xaf\x1f\xa1\x75\xc9\x34\x78\xd1\xa1\x72\x05\x9a\x8d\x1a\x9b\xfd\x7a\xd1\xad\x8f\xdf\x15\xeb\xfc\x6c\xe7\x47\x95\xeb\x3c\xaa\xb3\x36\x8e\xd4\x78\xcc\x63\x14\xc5\x63\x15\x53\xa0\x23\x06\xa9\xa4\xce\xfb\xa6\xa2\x2a\x92\xce\x41\x40\x10\x9c\x01\x22\x96\xb7\x28\x53\xf7\x48\x83\xf6\x38\x97\x83\x29\x48\x18\xf5\x69\xe9\x3f\xf9\x84\x5f\x3b\x22\x43\xfb\xf2\x3d\xf3\x0c\xd0\x1a\x1d\x56\x1a\x5f\xc9\x9a\xe9\x45\x87\xf3\xa3\x0b\x56\x28\xf1\x62\x63\xfc\x8c\x3b\xa1\x89\x69\x80\x0f\xa3\x50\x42\x8a\x86\x78\x0c\x57\xf4\xc8\xe2\x38\x86\x54\xa0\xa3\x8b\x6c\xc4\x6a\x82\x8f\xf3\x26\x01\x34\x0f\x33\x09\xcb\x55\x70\x27\x85\x4a\xe2\xf2\x06\x48\xdf\x74\xbd\xd5\xea\x7e\xc7\x4e\xcc\xfb\x70\x77\x9a\xe1\xf5\x5f\x7c\x7e\xfd\xd5\xee\xd5\xe7\x6e\x4e\x3d\x34\x42\xb9\xde\x61\x6a\x1c\xd3\x5a\x9c\x0f\xa9\x50\x11\x25\x99\xc6\x69\x55\x25\x18\x29\x92\x09\x15\xc7\x42\xdf\x71\x04\x53\x91\x65\x81\x80\x0a\x50\x74\x44\x32\xa1\x63\x8a\x8c\xce\x2a\xef\xb5\x4e\xff\x89\x8e\x9e\x94\xd8\x2e\x61\xd0\x7f\xb1\x06\x9e\x94\x2f\x7d\x66\x61\x4d\x3e\xa1\x47\x53\x71\x7f\x9b\xc5\x69\x8e\x6c\x2b\x62\x36\xbe\x2a\x7e\xd6\x6f\xc4\xe5\xfb\xb9\x07\xd7\x2f\x15\xc7\xc4\xdd\xf0\x2d\xc1\x03\x96\xa8\x98\x82\xc9\xd8\x58\xe0\x89\xb2\xa1\xf2\xbc\x81\x41\x26\xb4\x58\x4b\x09\x68\x4b\xe1\x34\x95\x37\x3d\x44\x58\xa6\x84\x28\xc5\x8e\xfd\x51\x7e\xfd\x83\xb9\xd1\x4d\xdd\x79\xe4\x8b\x73\x37\x3a\xb7\x28\x23\xd4\x6e\xb4\xfd\xfb\xd9\x45\x8e\x3e\xd7\x96\xe6\x6d\x3a\x7c\xf7\xd4\x76\xa9\x3b\xa8\x62\x17\x1e\xf5\xc8\xf1\x58\xd6\x97\x31\xcf\xd1\x1c\x0e\x0b\x80\xed\x3a\x7e\x24\xc8\x2e\x07\xa1\x63\x88\xc0\x0e\x48\x9a\x36\xe8\x00\x18\x8c\x46\xd0\xac\x66\x91\xb1\xd3\x81\xb6\xc5\xfa\x6e\xe3\x2e\x37\x5f\x82\xb7\x9d\x63\x3c\x9c\x79\x56\x1f\x7d\xf6\xe1\xee\x7d\xbb\xe6\xef\xa2\xb2\x7b\xb6\xb6\xa9\xda\x8a\xf8\x2d\x99\x0e\x44\xdc\x10\x78\x16\x19\x3a\x87\xd9\x8e\xaf\x63\xb8\x8c\x4c\x3a\x64\x0c\x24\xb3\x34\x0e\x2d\x4a\x56\x39\x41\xd6\x5c\xd3\x77\x38\xd6\x16\x45\x60\xa7\xa0\xba\x94\xa5\x9a\xb0\x7a\x42\xee\x2e\x67\xbf\x09\x07\xfe\xd0\x6c\x46\xbd\x5b\x57\x87\x3f\x7f\x34\xb0\x8f\xb9\xb8\xcd\xf2\x1f\xf7\x96\x18\x95\xba\x56\x45\xcc\x00\x23\x22\x29\x94\xd8\x90\x72\x64\xd9\xc7\x9c\xf0\x5f\x77\x7a\x06\xe2\x38\x81\x91\x9e\x28\xd9\x5e\x44\x62\x3e\x19\xc9\x92\x86\x23\x9f\xf6\x2c\xcd\x71\x18\xfd\xff\x80\xf1\xef\x83\xea\x9f\x98\xd3\x49\x89\x49\x19\x12\xd2\x25\x3f\xa8\xea\x8d\x5c\x37\x23\xbc\xb8\xb2\xe2\xaf\x2f\xe9\x2b\xbd\xa7\x8d\x7c\xb9\xac\x60\xa3\x2a\x8f\x13\x5e\xf5\xce\xb7\x9a\x5b\xbe\xaf\x65\x94\x3a\xef\xaf\x98\x07\x95\x47\x29\x8c\x02\x45\xcf\xa1\x4d\x43\x66\x35\x52\x82\xba\x00\x29\xc5\xc1\x30\xc0\x87\x9e\xec\xf0\x32\xb4\x2d\x16\xf3\x25\x9d\xb3\x31\x2c\x80\x18\x24\x63\x47\xfd\x42\x6d\xbd\x11\x9d\x7f\x4b\xb8\xd7\xa4\xea\xcc\x6d\xd5\xab\xd7\xbf\xaf\x2c\xdf\xc6\xdf\xb8\xbd\xad\x45\xd7\xda\x55\xc6\x7f\xb7\x3b\x77\xfc\xfc\xeb\x69\xdf\x65\xc9\x08\x02\xd3\x70\x19\x9e\x52\x55\x8f\x15\x4d\x4e\x09\x23\x43\xa2\x54\x28\x06\x6e\x14\x61\xba\xcf\x29\x3c\x0e\x1c\x39\xd4\x94\x50\xe2\x6d\x36\xf6\x92\x8d\x2e\x09\x67\x2b\xcf\x9a\x70\x07\xcc\xba\xdb\xc5\xfb\x78\x4a\xdf\x12\xe5\x0b\xb6\xba\xb6\xf4\xe0\xf3\x1c\x69\x07\x14\x2c\x9c\x6f\x77\xea\x88\x57\xb1\xc5\x8d\x25\x32\x60\x91\xaf\x6a\x2c\xb2\x10\xe1\x4b\xac\xe1\x00\x4f\x30\x03\x87\xe6\x4c\x17\xc7\x4c\xc7\x15\x74\x22\xb4\xdd\x88\x54\x71\x2e\x22\xc2\x90\xa6\x62\x2f\xf9\xc2\x8a\xdd\x2d\xe6\x37\x5d\x57\xb6\xf3\x2f\x6d\x1a\x97\x19\x3a\x6e\xd3\xf3\x11\x8d\xbe\x5c\x71\xa2\xc6\x85\xfb\xc7\xe4\xc9\x27\x1a\xb6\xad\x17\xbf\xbf\x95\xe0\x49\x26\x82\x02\x46\xba\x40\x88\x1c\x89\x8a\x5c\x47\x21\x48\x13\xda\x0e\x4d\x53\x2c\x2d\x49\x24\x0c\x75\x00\x24\xd7\x11\x0c\x36\x92\x19\x1f\xc0\xd8\x7f\xeb\x95\xc1\xe7\x56\x7e\x94\xa3\xe8\xb9\x76\x27\xdb\x8f\x2d\x35\xfc\x46\xc7\x13\x27\xe0\xc4\xd9\x17\x2f\x6f\x2b\x5f\x72\x55\x93\xe1\xbd\xeb\x2c\x89\xdf\x92\x4d\x11\xf9\x9a\xc0\x23\xc2\x22\x49\xc8\xba\x0e\x4e\xb1\xb6\x4c\x73\x16\x14\xe9\x08\x33\x55\x5f\xc2\x5c\xc6\xa6\x7c\x9c\xd7\x81\x2a\x69\xa4\xc4\x38\x7f\xcb\x03\xbd\xab\xf6\xd7\x6a\x6b\xcc\xf9\x7d\xd4\xf9\x22\x3f\x17\x19\x8a\x8d\xac\xe8\xde\x68\x74\xfd\xed\x1f\x69\xee\x76\x3d\xf7\x38\x5b\xb9\x7c\x57\xfb\xb7\xa8\x5c\x2d\x4c\x4a\x7c\xf7\xee\xdd\xbb\xe9\xc5\x93\x4f\x47\x08\x5f\x3f\x3b\x5c\xf4\x17\xae\x46\xfa\xb9\xe9\x86\xd4\xdf\x31\xae\xea\x35\x7a\xd1\xa3\x63\xe5\x86\x33\x6b\x66\xaf\x5f\xb7\x73\x7f\x98\x7c\x14\x79\xf1\x8f\x87\x6a\xec\x02\x3f\x0c\xae\x3a\xfa\x5e\xe3\x34\xc3\x9b\xec\xa9\x38\xa0\xe7\xa6\xa2\x35\x48\xb9\x66\xde\x84\x1a\x62\xd6\xdf\xa7\xc7\x51\x2f\x29\x60\x64\x12\x5a\x30\xe4\x5c\xca\x44\xa2\x89\x4b\x38\x43\xb0\x0c\x09\x3d\xca\x90\x45\x03\x30\xb6\x48\x99\x2e\xf2\x5c\x4e\xf2\x03\x1f\x63\x35\xcc\x7c\x9f\x0c\xff\xf4\x7a\xf6\x43\x53\x37\xf7\xcf\xf5\xba\xee\x8a\xa3\xc6\xd4\x82\xeb\xe6\x65\x2c\x25\xaf\x2f\xf1\x79\xa9\x75\x33\x6e\x1d\x1f\xdf\xe3\x6d\x1c\xa5\x45\x22\x21\x22\x54\x9a\xf7\x03\xcb\x75\x6c\x10\x68\x9e\x25\x29\x24\x23\x3b\x28\x90\x14\x1f\x06\x16\x02\x11\x23\x86\x1a\xb2\x38\x89\xa7\x3c\xd7\x37\x92\xa5\x73\xff\xf9\x3d\xd6\xf4\x2c\x38\x74\xc0\x32\x71\x56\x52\x70\xed\xcf\x4d\xb7\x1f\xbe\xc9\x78\xff\x9d\xd9\x79\xd4\xf8\x3b\xe5\x92\x9e\xa8\xc5\x26\x55\x1a\x97\xfc\x69\x58\xbd\xc1\xd5\x9d\xd5\x2a\xa4\x29\x33\xb7\x4d\xa9\xc6\x63\x6e\xe7\xfa\x7e\xc6\x83\xf1\x05\x3f\x38\x77\xe3\x7c\xf6\x47\x1f\x14\x98\xb7\x4f\x48\xc6\x5c\x4f\x33\xa4\xd9\x8d\xd9\x63\x96\x57\x79\x9e\x50\x7d\x4f\xc2\xdb\x8f\x3e\xfc\x63\xf8\x85\xd6\xed\x1a\x68\x2b\x67\x2c\xbc\xd4\xa8\xfe\x9d\xfd\x71\xac\xcd\x89\x24\x0d\x3c\x83\x10\x7c\x33\x40\x0a\x05\x7d\x41\x30\x68\x49\x67\xa4\x50\x41\x94\x64\x72\x91\x4c\xab\xd0\x54\x08\x97\xa7\x64\x24\x20\x92\x63\x01\x13\xa3\xd0\xb5\xec\xd1\xbd\xcf\x5a\x80\xa4\x6e\x76\xf5\x92\xa6\xfe\xfb\xfe\x6c\xfb\xed\xec\xf2\x98\x8c\x1b\x72\xec\x15\xf2\x1d\x7b\xdd\x26\x75\xe6\x45\xb1\xf9\xb0\xbc\x41\x38\x11\x84\x12\x15\xa8\x8e\x4c\x70\x3e\x60\x42\xde\x25\x7d\xdb\xa2\x70\x0e\xa7\x31\x40\x0a\x9a\xe2\xfb\x96\x8c\xf1\x06\x19\xfa\x2e\x19\xc5\x18\x8d\x7a\xd9\xa9\x05\xbf\xf4\xa7\x9e\x47\x73\x25\xbe\xa8\x37\xb8\x4b\xc1\xd3\x69\x3a\x54\xff\xb9\x10\x17\x3e\x3c\x8b\xa6\xdf\x58\x98\xf6\xb7\xf8\x4d\x5e\xd0\x0e\x21\x3a\x34\x82\xbc\x88\x64\x0c\x41\x86\x56\x31\x46\x20\x65\xd3\x0d\x04\x4f\xb7\x19\x8f\xe6\x38\x5e\xf1\x55\xde\xa2\x23\xc1\x0a\x7d\x43\xb0\x41\x0a\x6e\x56\x64\xdb\xf9\x23\x36\xb9\x3a\xd8\x38\x6e\x59\x86\x92\x05\x7e\x70\x2a\xae\x59\x24\xb2\x33\xaa\x1d\x7d\x96\xeb\xe2\xb9\x4b\xed\xc7\xa6\x6e\x32\x3b\xe6\xef\x8c\x0c\x48\x8a\xc0\x31\x71\x43\xf1\x2d\x5d\xf5\x65\x9d\x42\x11\xe1\xb0\x14\x0f\x31\x96\x0e\x74\x8d\x41\xb2\xec\xf2\x91\x6c\x7b\x98\x2c\x0b\x02\x29\xf9\xef\xff\xce\xaf\x6b\xbf\x9b\xf5\xfa\xc3\x69\xe4\xab\x49\x1b\x6e\x9a\x63\x99\x47\x17\x3e\xfe\xaa\xe3\x73\xda\x62\x8f\x8f\x1e\x54\x78\x60\xa7\x2d\x71\x8c\x3e\x24\x94\xa9\x00\x8f\x4c\x11\x11\x18\xe1\x88\x24\xa1\x39\xa6\x19\x99\xae\xe7\x3b\xaa\x25\x31\xb2\x1f\x05\x98\xcc\xfa\x96\x48\xaa\x38\x11\x88\x9e\x2d\xd9\xb1\x87\x45\x5a\xaf\x2c\x38\xf9\x65\xe5\x59\x0b\x73\x5d\x06\x37\xb3\x7d\x3d\x67\xf9\x0e\xbe\x56\xef\x65\x43\xbe\xcf\xfb\x53\xfb\x31\x9b\xcd\x21\xc3\x1a\xc7\xb1\x62\xe5\x87\x9a\x22\x43\x2f\x52\x28\xca\x53\x3c\xdb\xf3\x80\x0f\x31\x0f\xc3\x43\xda\xf4\x05\x87\x37\x14\x2a\xe4\x58\xc3\x50\x58\xd5\xe7\x45\xd7\xc4\xff\x52\x6c\x4b\x8e\x61\x69\x23\xb0\x5b\xf7\xfe\xa8\x0e\xef\x35\xbf\xbf\xe8\x6a\xe2\xbb\x1d\x83\xab\x9d\xfc\x3e\x4f\xf3\x9d\x79\xa7\x9d\x2a\x4c\x5e\x3f\x72\x34\x7e\x69\x05\xb4\x34\x81\xb2\x00\xcd\xca\x08\x98\x9e\x19\x20\x2c\x0a\xa4\xd0\x31\x6d\x86\xc6\x2d\x4d\x41\x40\x92\x02\x4d\x64\x29\xcc\x50\x31\x3c\x14\x43\x1a\x8b\xa1\x07\x73\xbb\xea\xeb\x3f\x3e\x39\xf0\xc7\xc3\xd5\x1f\x6c\x18\x37\xea\xdb\xb3\x0d\x87\x56\xed\xb9\x96\x54\xcf\x06\x97\x96\xee\x50\x33\x7a\x77\xe3\x88\x5f\x5b\x14\x78\x9f\x71\x79\x9e\x37\x54\x0b\x93\x71\x31\x20\x28\xc2\xa3\x64\xde\x66\x18\x37\x94\x3d\xce\x00\xae\x22\xb2\x82\x10\xe8\x18\x25\xb9\x18\x0f\xdd\xd8\xe2\x2a\xeb\x7b\xed\xb5\xce\x0e\x60\xf7\xaf\xa9\x5a\xf7\x54\xc6\x0f\xff\xe8\x36\xbe\xd8\x1d\xa7\x4a\xe9\x1d\x2d\x86\xcf\x35\x67\x6f\x4b\x4f\xa6\x4e\x9e\x3f\x66\x50\x13\x2c\x4e\x87\x24\x81\xf4\xd0\x90\x2d\x5f\x8a\x78\x85\x50\x68\x92\x84\xc0\x12\x0d\x9b\xa2\xa9\x30\x8a\x68\x5b\x8e\x6c\x03\x1a\x21\x61\xd2\x18\x46\xc7\x88\xc1\x3b\x06\x56\x38\x5b\xe2\x93\xf5\x07\x76\xa5\x93\x96\xa6\x6d\x50\x3c\xd7\x07\xad\xdf\x26\xcc\xca\xdb\xf5\x8f\xeb\x39\xc7\x4c\xff\xda\x3d\x61\xc7\xaf\x48\xec\xe9\x48\x63\x08\x87\x62\x8c\x80\x02\x8c\x10\xda\xbe\xc7\xd3\x21\xee\xf2\x98\x1c\x38\xa6\x17\x62\x02\x89\x34\x5c\xc2\x28\x0b\xe3\x7d\x0d\x69\x5c\x68\xc7\xde\xe1\xb2\xb9\x6f\x5e\x48\x7f\x6e\x4e\xf0\xd1\xdc\x6e\xe9\xd3\xdf\xdf\xbc\xbd\xf0\xb3\x5d\x42\xfb\xac\x63\x16\xad\xfe\x75\x4a\xbb\xee\x59\x82\x19\x71\x9c\x31\x64\x68\x92\xe6\xa5\xc0\xf2\xe4\x40\x50\xe8\xc0\x67\x4d\x82\x40\x0a\x34\x90\x63\x3a\x40\xf1\x31\x9f\x46\x80\x0c\x04\x59\xd4\x00\x89\x30\x57\x8b\x65\x33\xe9\xa6\x6f\xb3\xb7\xc2\xd8\x72\xbb\xfb\xd5\x3e\x31\xa8\x55\xa7\xf0\x40\xde\xb6\x6a\xde\x4a\xb3\x32\x90\x7d\x08\x5a\xa8\x5a\xb7\x68\xfc\x9a\xbf\x34\x90\x30\x39\x72\x3d\x42\xf6\x78\xc7\x0b\x30\x5c\x0c\x5d\xa0\xd0\xbe\x20\x43\x43\xe6\x44\x5e\x89\x6c\xce\xd4\x9c\xd0\xd6\x79\x9c\xc7\x79\x01\xd9\x20\xa5\x89\xda\xb9\x1b\x0a\xc3\x9d\xdf\xb4\x9b\xd4\xfb\x8f\x6a\x75\x33\x9d\xcb\x7c\xfb\xd8\xfe\xca\xb7\x47\x1c\x3e\xc0\x36\x81\xd3\xf7\x7c\xd1\xe0\x8f\xff\xce\x30\x57\x1f\xe7\x36\x52\x4b\xe1\xd4\xb7\x8b\xe7\x71\x79\x4f\x64\x7f\x73\x6a\xc4\x33\x74\xa4\x85\x3a\xfb\x42\xb6\xb7\xe3\x7a\xb7\x9f\x9e\x2c\xe5\x7e\xdd\x89\xcc\x3f\xe0\x6d\x86\xe8\xfe\x47\x8d\x8e\x94\x4a\xbb\xbe\xcc\xf8\xa9\x55\x73\xaf\x3b\x90\x7e\x6a\x9a\x1b\xdf\xbd\xfc\x6d\xec\xeb\xbc\x71\x64\xde\xe2\xaa\xc6\x12\x9e\xe0\x46\xb2\x47\xd0\x82\x28\x6b\x9c\x84\x01\xd3\x92\x21\x34\x7d\x5d\x15\x69\xd2\x23\x4d\x0a\x61\x6c\xe4\x0b\x24\x34\x29\xc5\x4a\xc1\xbe\xa2\x8d\x74\xa7\x79\xa1\x7c\xe5\xcb\xef\xca\xd6\x68\x40\xf3\x17\x99\x4b\xf7\x1a\xb5\xea\xc5\xfc\x87\x0b\x33\xdc\xee\xf6\x79\xf9\xbc\x23\x2e\xbd\x8c\x23\x4f\xde\xe4\x70\xdc\x86\x38\xc3\xe3\xa1\x04\x00\x2d\xe0\x91\x42\xe9\x96\x2a\x9b\x1a\x20\xac\x40\x22\x0c\x55\x45\x16\x06\x22\x97\xc3\x1d\x27\xc4\x35\x28\xc7\x16\xbc\x49\xbc\xfa\x71\xfd\x39\xf9\xe6\x3c\x13\x1f\xe4\xec\x93\xff\xc1\xee\x8b\xd9\x0e\x9c\x7f\x37\xb7\xcb\x57\x67\x47\x95\xca\x5b\x76\xff\xab\x61\x71\xf4\x36\xe5\x71\x03\x73\x08\x9e\x74\x2c\x41\x04\xb6\x65\xb3\x12\x24\x04\x81\x85\x0a\x70\x42\x08\x3d\x9d\x06\x58\x68\x78\xb8\x22\x3a\xc8\xa3\x64\x1a\xf3\xb1\x18\xb2\x71\xad\x16\x66\xb7\xef\xb3\x4b\xb2\x74\xaf\xbb\x67\x6a\x61\xcb\x28\x77\x7f\xe4\x8f\xad\xd2\x2e\x2b\x74\x63\x18\x7b\xed\x7a\x9e\x8b\x53\xe3\x48\x0d\x52\xd9\xc0\x87\xae\x44\xcb\x7a\x80\x73\x2a\x20\x64\xc7\x8d\x34\x9d\x37\x28\x9c\x0a\x22\x59\xe6\xa1\xe1\x21\xcd\x05\x8e\x4d\x47\xba\xcc\x01\x43\xb2\xfc\xf7\x8f\xa5\x07\xd5\xb7\xbe\xac\x5f\xa1\xfd\xf4\xd7\xe3\xef\x9e\x1e\xd6\x3a\x63\xd2\xd5\x15\xd9\xab\x8c\xad\x57\xe3\xb5\xb5\x6f\xc1\xcc\x07\xa5\xe7\xa4\x2e\x4f\x89\xcd\x94\x54\x18\xc7\x63\x90\x82\x41\x89\x93\x44\x40\x73\x00\x93\x08\xd3\xb2\x83\x88\x63\x2d\x4b\x76\x78\x4a\xe5\x55\x05\xd1\x98\xe3\x84\x44\x60\x07\x46\x32\x87\x84\xff\xfc\x49\x6b\x34\xcf\xff\xaa\xc1\xf8\x82\x53\x47\x4d\xe8\x9b\xbe\xc4\x59\xba\x4c\xde\x8e\x83\x7a\x1d\xa8\xe1\xe8\xe3\xe9\xfa\xe9\x3e\x9b\xf9\xe3\xf3\xe4\x4f\x63\x8d\x5f\xff\x8c\x3f\x1a\x92\x85\xbd\xb4\x9b\xdd\xdc\xb1\xe1\x9f\x4f\xab\x06\xfb\x89\xda\x3f\x6d\x9f\xfe\xe7\x92\x96\x23\xb2\x24\x3c\x4d\xf6\x7f\x34\xc9\xe5\xd6\x71\x33\x1e\x5e\x95\x50\x78\x7d\xbf\xd6\x7f\x56\xa9\x7e\x2e\x7d\xd3\xab\xd3\x0c\x73\x48\xa1\xb6\xc4\x17\x0b\xb5\x2c\xf1\x93\xc7\x81\x4c\x68\x30\xb2\x80\x18\xd7\xf5\x31\xe8\x31\xff\x4a\x89\x29\x0f\x92\xa2\x22\xaa\x06\xe6\x68\x12\x85\x59\xba\x87\xcb\x90\xe5\x39\xde\xc2\x01\x61\xc8\x6e\x6c\x09\xcd\x26\x6c\x96\x37\xad\x5e\xb5\x59\x32\xb9\x6d\xa5\xdf\x33\x7c\x5c\x71\xf0\x82\x55\x57\xab\x68\xd9\xf6\x3d\xaf\xbd\xbf\xca\xfc\xe2\xdd\x5e\x2f\x8d\xdf\x2f\x1d\xb0\x32\x21\x12\xb2\x29\xfa\xa4\xce\xfa\x51\xa4\xfb\x26\x4f\x58\x12\xed\xe0\x9e\x63\x69\xb8\xe3\x19\xac\xc9\x44\x92\x29\xfb\x7c\x00\x25\xdb\x00\x52\x0c\x09\xb4\xed\xab\xf2\xaf\x19\xb7\x3a\xe7\x99\xea\x57\x86\xd4\x9f\xdc\x6f\xd4\x8e\x62\x79\x73\xb5\x3c\xb4\x65\x4a\xfb\xb3\x43\xe6\x35\x3b\x32\x8b\x5b\x1e\xbf\x23\xcf\x52\x0d\x0e\xa7\x02\x45\xd6\x4d\x18\x39\x11\x8f\x21\xc8\xba\xbc\x4b\x1a\x5e\x64\x70\xa1\x67\xfa\x96\xc6\xaa\x02\x94\x4c\xd1\xc0\x24\x0b\x13\x74\x40\xa6\xa0\xf2\xf2\xec\x93\x4e\x27\x97\x9e\x59\xe9\x8c\x2d\x96\x9f\xbe\xdb\xbf\x56\xa6\xaf\xdf\x8d\x8e\x84\x8f\x7a\x7d\x58\x78\x54\xf9\x63\xe9\x57\xf4\xff\x2c\x19\x84\xa6\x1d\x3d\xfb\xf6\x07\x6a\x21\x8f\x13\x4d\x8f\x27\x7c\xb6\xb8\x17\x05\xc6\x82\x8c\xea\xbb\xc3\xc7\x07\x9f\x9c\xdd\x6e\x76\xa3\xb9\x71\xbc\xa8\xf8\x81\xc5\x8a\x3c\x27\xb8\x38\x2e\x90\x94\xce\x79\xb6\xeb\x61\xb6\x68\x23\x0e\x52\x26\x19\x04\x9a\x2c\xb1\xae\x14\xe0\x66\x18\xaa\xb8\xe3\xd8\x32\x95\xc2\x0b\x66\xca\x39\x79\x3e\x5e\x72\x6b\x45\xdf\x3d\x5b\x7f\x1c\x68\xbb\x46\x2e\x30\x63\x59\xf6\x4a\xa8\xed\xa8\xaa\xf3\xf3\x2f\x79\x7c\x61\x66\xb2\x17\x24\xbb\x8d\x5f\xff\x47\xe3\x7d\x79\xb6\xef\x7d\xf6\x69\xfa\xa8\xe8\x98\x89\x99\xd2\xb6\x7c\xba\x60\x84\x57\xea\x45\xc6\xc9\x3f\xfe\x5a\x37\x75\xd5\xf7\xd8\x89\x37\x6d\xe9\x92\xa5\x91\x8a\x10\x19\x90\x88\x14\xdb\x46\xba\x68\x23\x1f\xa2\x48\xf0\x80\xcf\xea\x9c\x84\xd3\x4c\x88\x38\x52\xb3\xa1\xe3\x6b\x20\xb9\xcc\xec\xdf\x67\x48\xee\x5b\xd9\x76\x3f\x38\xc3\x9e\xbb\xf7\x5b\xb5\x6b\x73\xcf\x9e\x9c\x5b\x7a\x25\x9e\xfb\xcf\x3a\x4a\xda\x9f\x4c\xf2\x42\xb7\xba\xad\x53\x37\xba\x1f\x5b\x0a\xc4\x21\x2d\xcd\x43\xa4\xe7\xd2\xac\x84\xf1\x48\xb0\x70\x15\x13\x68\xc0\xca\x12\x01\x48\x96\xf3\x54\x24\x99\x81\xc2\xda\xb2\xc0\xb0\x42\xe4\x32\x56\xf4\x7e\x50\x1e\x33\x66\xed\x09\x0d\xf4\xb9\x3f\xb9\x49\x9f\x4b\xab\xd7\x9f\xc9\xb3\x70\xdc\xa1\xc9\x19\x32\x2e\xcf\xfa\x4b\xd3\x7c\x73\x2b\x95\x5e\x96\x3a\x33\x80\x98\x41\x99\xc1\x23\x01\x43\x8e\x21\x04\x38\xe7\x72\x84\x81\x42\xcd\xd7\x91\x64\x51\x90\xd1\x7c\x8c\x71\xa1\xc4\x51\x8e\xc7\x5a\x52\x84\x8b\x24\xee\xbb\x22\x8a\x31\x07\xbf\xf1\xd8\xc8\xbc\x35\x82\x19\xf4\xa8\xb9\xf5\x4a\x2e\xde\x9e\xe7\x64\xef\xdb\x49\xa7\xd3\xc0\x4b\x0d\xa9\xaf\x72\xe4\xde\x7e\x7b\x6f\xaf\xf8\x01\x02\x63\x74\x8d\x07\x94\x12\x91\x3e\xd0\x79\x47\x33\x31\x5b\xc4\x58\x28\x07\x1a\xa1\x85\x96\x4e\x1b\xba\x8b\x8b\x11\x47\x1a\x02\x65\x99\x90\x50\x4d\xcb\x4c\x21\x2d\xe4\x50\xdf\x2d\x57\xfa\x75\x9d\x5f\xfb\x45\xee\xed\xcf\x97\x3e\xec\x3a\x8f\xd8\x7b\xb4\x44\x17\xbc\x50\xeb\x23\x7b\x8c\x52\x89\x0f\x3f\x4a\xfe\xf4\xa4\xa5\x3f\xcd\x7c\x92\xf4\x2e\x7f\xad\x61\x99\x9d\x63\x95\x0f\xd4\x3b\x59\x7a\xd6\xd9\xfe\xdf\x7e\xb8\xa2\xe9\x9a\xa7\xe7\x1e\xbf\x32\x7a\x24\x7f\x7a\x48\x9f\xbe\xcf\x33\x7c\xda\xa9\x43\xf6\xa4\xab\x63\x5e\xe0\x33\xd5\xb4\x82\x71\xa2\xec\xea\xd5\xdf\xd5\xce\xb3\x12\xde\x39\xb8\xe4\xc7\xe4\x4f\x5f\xbd\xd4\xb5\x73\xfa\xf5\xa3\x4b\xa6\x2f\xb0\x3c\xda\xf6\x6e\x73\xf5\x6e\xb7\xf2\x65\xfb\xc5\xa9\x3e\xaa\xe6\x7a\x0f\x7b\x73\xf0\x9d\x97\xfc\xe9\xa7\x2b\x93\xb2\xf4\x68\xf2\xf1\xc6\xfd\x63\x32\xb7\x2f\xd4\x9f\x73\x8f\x8d\x19\x1f\xd6\x7b\xdc\x33\xed\xb7\xdd\x47\x5d\x6a\x3c\x65\xe9\x88\x64\xb0\xcf\x59\x62\x55\xe5\x43\x68\x7e\x79\xa1\xab\xb5\xb8\xe9\xd9\xcd\xd7\x4f\x54\x25\x73\xbe\xbd\xb4\x74\x7f\xee\x93\xc3\x12\xc6\x17\x8b\xa3\x7a\x1a\x34\x14\x87\xb1\x89\xd0\x09\x79\xcb\xd0\x1d\x84\x30\x5d\x20\x61\xe4\x51\x80\x75\x04\x8e\xc4\x55\x93\xa1\x05\x02\x42\x51\x47\xd8\xff\x5f\xd4\xe6\xcc\x18\x6c\xb1\xa2\xdd\xee\xb5\xfa\xf0\xf6\xf8\xea\xd9\xba\xe5\xd9\xb7\x3e\x28\x7b\x5b\x6c\xd7\xbd\x83\x79\xa5\xb6\x32\xf7\xfe\xa7\xd3\xb2\xce\x7c\x98\x3a\x0b\xad\xd8\x12\xb6\x94\x1b\xea\x1c\x43\x06\x2e\x20\x31\xa4\x45\xaa\x0d\x09\x4a\xa7\x09\x92\xa0\x79\x46\x8f\x18\x68\xba\x16\x74\x30\x0f\x89\x24\xed\xf3\xa6\x2e\xd1\xde\xfb\xcb\xad\xb3\xa3\x61\xd7\xaf\xae\x66\xdb\xb1\xb8\x58\x89\x19\x95\x41\xff\xe2\x47\x56\xcd\xac\x5a\x7f\x7e\xde\x3e\x23\xb6\x4c\x9b\x35\x65\xe4\x82\x83\x71\xd4\x0a\x8c\x38\x8b\x51\x08\x46\x16\x29\xc7\x24\x59\xda\x8d\x02\xcb\x43\xae\x29\xb8\x1e\xc5\x51\x96\x25\x98\x18\x19\x68\xc8\x66\x09\x9e\xd2\x28\x52\x93\x65\x27\x76\xfa\x7f\x15\xfd\xd2\x6a\x4b\xf3\x67\x7b\x8b\x5f\x1d\xd7\xef\x70\xb9\x69\x69\xb7\xac\x71\xaa\x9f\xb8\xfc\xc9\x8c\x32\x59\x8b\xcc\x5a\x6e\xad\xfa\x39\x8e\x82\x53\xbc\xaf\x20\x41\xc4\x49\x9c\x0a\x74\xdb\x09\xd5\xd0\x62\x34\x40\xe3\x2c\x8f\x23\xc2\x47\xa4\x43\x59\x11\xc7\xe1\x92\x4a\x28\xb8\xaf\x2a\x2a\x25\xab\x29\xfc\xa9\x8f\xd2\x4f\xfa\x53\xec\x79\x7c\x99\xbe\x33\xcd\xb2\x9a\x5f\xb4\xa8\x38\x6c\xda\xd4\xac\xee\xc5\x6f\xa9\x72\x1b\x32\x9e\x9c\x72\xf5\xb3\x63\xc9\x9f\x1e\x58\x66\x95\x51\xfb\xd5\xda\x45\x7b\xef\x53\x42\xad\x1b\x3b\x0e\xff\x38\x7b\xe5\x77\x36\x39\x55\xfe\x76\xe7\x88\x65\x74\xa3\xbe\xe0\xdf\x9d\xf2\x7f\x6a\x25\x24\x25\x0e\x4a\xdb\xf0\xbf\x3a\xe5\xe9\x9a\x6d\x5d\x35\x2b\xcb\x6c\xc6\x29\x7c\x65\x57\xa3\x2f\x1b\x24\x8e\x7b\x8e\x9d\xbd\x72\x60\xb0\xb3\xca\x58\xba\x67\x45\xdf\x99\x54\x1c\x59\xff\x0c\x72\x6c\xd9\x30\x03\x5f\xd2\x18\x1d\x33\xed\x40\xc6\x2d\x97\x26\x74\x45\x22\xcd\x08\xc3\xfc\x88\xc1\xf1\x80\x76\x69\x8c\xf2\x28\x8b\x17\xb0\x94\x26\x2d\xb3\x9d\xcc\x9f\xb4\xe2\x79\xf7\x27\x46\xa5\x55\x9f\xac\x5f\x56\x86\x48\xdf\xa0\x62\xcd\xd7\xfb\x5e\xba\x20\xc7\xa2\x33\xdf\x6d\x39\xfc\x65\xfc\x30\xaa\x21\x25\xe4\x44\x41\x56\x55\x22\x72\x89\x20\xa0\x69\x06\x67\x0d\xc3\x51\x1d\x5e\x74\x2c\xc2\xf1\x1c\x43\x04\x3a\x67\xb9\xac\x00\x49\x03\x63\x91\x99\x82\x0d\x70\xdd\x47\xf7\x3f\xac\xb9\xf2\xf8\xf8\x01\xfa\x94\x7c\x53\xeb\xe6\xfe\x63\x5a\xc9\xd5\x87\xee\xd7\xc8\xb7\x79\xcc\xb5\xaa\x0d\x37\x75\x99\x91\x3a\x6b\x99\xd8\x9d\x72\x4a\x17\x7c\x97\x30\x58\xc6\xe6\x35\x9b\xd1\x2d\xc4\xc9\x98\xe3\x45\x14\xeb\xdb\x2a\x8f\x18\x5d\x0d\x55\x0a\xd1\x32\x6e\xe8\x98\xc3\x01\xe4\x33\x29\x38\x60\xdf\x78\xb4\xe9\x60\xef\xe6\x8f\x06\x45\x3d\xcf\x2c\x7b\x5b\xb0\x5c\xa6\x5d\xb7\x3a\x9c\xf8\x66\x48\xc1\x52\x99\x8c\x23\xb5\x0a\x34\xec\xf5\x4d\xfc\x96\x2c\x7a\xbe\xc2\xd9\x06\xa5\x1a\x8c\xa4\xdb\xb4\x45\x09\xbe\xad\x19\xb8\xe1\x29\xb4\x11\xb0\x92\xa1\xe8\x81\xe9\x78\x64\x64\x31\xc0\xf7\x4d\x2d\x62\xff\xd2\xde\x4e\x36\x64\xfc\x4f\x5d\x9b\xa4\xc4\xb4\x09\x25\x33\x25\x87\x7e\x93\xec\xe3\xbb\x77\x98\xf6\x75\x89\x1e\x73\x37\x3d\xab\x70\x36\x1b\x7a\x7a\x62\x45\xa1\xad\x85\x9f\xf4\x36\x46\xa9\xd9\x2e\xfc\x92\x99\x8c\xe3\xd8\x22\xe4\x39\x91\xd7\x18\x40\xfa\x94\x85\x4b\x26\x46\xc9\x14\xce\xab\x3a\x23\x47\x18\x41\x31\xc0\xf0\xc2\x10\xd7\x7c\x89\xf2\xa9\xd0\x47\x66\x24\x25\x4b\x6a\xff\x63\xc9\xd4\xab\x49\xc3\xf0\xfd\x8f\x1f\x4f\xdd\xb2\x38\xcf\x85\x97\x89\xf5\xee\x35\xae\xff\x7c\xc6\xb9\x9c\x19\x40\x68\x8a\x03\xe1\xbe\x8f\xe3\x07\xfd\x10\xd8\x82\xa9\xf3\x1c\x20\x3c\x85\x37\x5c\x93\xa5\x18\x91\x0f\x02\x1e\x67\x43\x3a\x42\x06\x83\x7b\x16\xe7\x3b\x96\x20\x3b\xd0\xe1\x91\x47\x49\x21\x16\x1b\xfa\x3b\xed\x11\x9b\x3b\x5e\x6f\xd5\xbc\x71\xa7\x30\x6b\xef\x41\x6f\x6b\x34\x1e\x30\xe3\x79\xbd\x2b\x4f\x7e\x9c\x74\x8e\x9c\x5f\xae\xc5\xd7\x63\xe2\x57\xc1\x24\x45\x8d\xe3\x7d\x01\x92\x14\x85\xa2\x50\x64\x3d\x92\x94\x4d\x46\xf2\x09\x2b\xc2\x30\x46\x91\x02\xa4\x6a\x5c\x48\x60\xa4\xa3\x1a\x48\x12\xa3\xd0\xc4\x62\xef\x72\x94\xaf\x31\xc5\x14\x6f\xba\xaf\xd5\xbd\x01\x8f\x98\x8e\x1f\xff\xfc\x59\xe5\x32\x1f\xfd\x7c\x2f\xed\xc4\xe1\xcd\x3a\x1f\xca\x54\x62\x72\xfc\x9a\x06\x10\x57\x03\x99\x23\x1d\x22\x0a\x3c\x9a\xf5\x43\xc8\x1b\xa2\xa4\x05\x16\xf2\x7c\x46\x50\x11\x72\x59\x9f\xf3\x35\x87\x23\x42\xcc\x97\x11\x86\xdb\xce\x7f\xf4\xe9\x5e\xa4\xff\xdf\x5a\x90\x49\x8d\x7e\xf9\x2f\xe0\xaf\xbd\x53\xfc\xa3\xad\xa5\x4b\xfd\x92\xf6\x8f\xdc\xaf\x67\x8e\x59\xd5\xeb\x6c\xf9\xe3\xf9\xeb\x16\x6a\x89\x23\xed\xed\xf8\xdd\xb3\x4f\x0e\x88\xa3\x40\x09\x67\x06\x8a\xcf\x50\x90\xb4\x7c\x3a\xb0\x64\xe8\x09\x1a\x69\x8a\x2a\x47\xf1\x92\x14\x4a\x94\x8d\xb9\x0e\xa9\x8b\xa2\x20\x3a\x44\x68\xba\x1a\x2f\xa7\x30\x89\x41\xdd\xa2\xf6\xe6\xa9\xdf\x37\x71\xfe\x3b\x66\x7e\xe2\x99\x7b\xab\xd6\x35\xb9\x9f\xa5\x4c\xd6\x7e\x4f\xbf\x2e\x3c\x7b\x48\xbe\x7c\x57\x53\x47\x59\x8b\x7d\xc8\x1b\x0e\x67\x31\x7a\xe4\x60\x82\xaf\xf9\x9c\x2f\x89\x50\x0c\x03\xde\x31\xa0\x10\x78\x78\x68\x3a\x0c\x4d\x49\x21\xf2\x02\x3b\x50\x08\x59\xb5\x58\x28\xc7\x06\xfe\xad\x3c\x77\xdf\x58\x4d\xa9\x6c\xd8\xd3\x0d\x67\xb7\x55\xd2\xd2\x7d\x8c\xd6\x6f\xab\xbb\x68\xca\xed\x31\x1f\x36\x2b\x79\x33\xdb\x89\xb1\xf1\xfb\x57\x19\x10\x45\x50\x89\x4c\x11\x60\x0a\xcf\x92\x9e\x69\x23\x07\x01\x55\xb2\x65\xcb\x80\x22\xad\x28\x26\x2b\xda\x86\xa8\x46\xac\x27\x3a\x02\x87\x08\x98\x42\x2a\x75\xac\xad\xf5\xc3\xeb\x86\xd4\x20\x2d\x50\x77\xed\x1c\xb8\xe5\x4e\xe5\x92\x73\x0e\xce\x3d\x96\x79\x67\xb6\x89\xb5\x33\x8e\x18\xfb\xa4\x6e\xfc\x76\x59\x43\xa4\x11\xf9\x91\xc9\x09\xba\xc6\x3a\xb4\x04\xdd\x48\xb0\x3c\xca\x61\x19\xd5\xf6\x02\x82\x35\x2d\xcd\xe6\x48\x40\x3b\x34\x1d\x92\x8c\x25\xe9\xd2\xdf\xb7\xe0\x7f\xc7\xfc\x7f\xaa\x82\x27\x25\x66\x4a\x9b\x29\x6d\x72\xe8\x97\xca\xd0\xa2\x2f\x7e\xf3\xf2\xec\x2f\x4b\x37\x17\x1a\xf6\xe9\xf6\x0d\x35\xaf\xd8\x87\xa7\x5e\x8d\xed\xc8\xfd\xdc\x44\xaf\x52\x7d\xc0\xcd\xf8\x41\xdf\xa0\x79\x2c\xf0\x7c\x26\x44\x86\xad\x68\x3c\xa9\x1a\x61\x08\x3d\xdd\xf3\x4d\x3c\xa0\x34\xa0\x38\xaa\xa3\xcb\x2c\xa7\x28\xd0\x45\x2c\x69\x59\x4a\x94\xc2\xa8\xfa\xb9\x7a\x57\xe4\x96\x35\x4b\x1e\x9b\xff\xc3\xc7\x7d\xfc\x52\x2f\xad\xcf\x0a\xfa\x83\x73\xb5\xdd\x9c\x56\xfb\xf6\x98\x9a\x6b\x46\xc9\xdd\xf1\xc3\x11\x16\x31\x9e\x17\x98\x46\xe8\xba\x11\x1f\x88\x20\xa2\x1d\x42\x71\xac\x50\x50\x00\x70\xb0\xd0\x85\xb4\xe8\x83\xd0\xb3\x05\x4d\xa0\x70\x51\x74\x08\xc9\x8d\x8d\xa3\x8f\x73\x2d\x6c\x7f\xa9\x6b\x37\x3f\x4b\xe7\xfc\xdf\x9a\x6d\x7a\xe0\x9b\x36\xcd\xcf\xc4\x1d\x5a\x4a\xd5\xfa\xa2\xd3\x04\x71\xc8\xcf\xcf\xe2\x28\x2c\x81\xab\x32\x6e\x01\xd6\x56\x43\x5c\x70\x15\xd9\xb7\x3c\x19\xb8\x1a\x50\x04\x06\x92\x2a\x94\x50\xc8\xfa\xa2\xe2\xd3\x26\x34\x6c\x82\x93\x22\x55\xd1\x63\xef\x32\xb8\xfc\xec\xe7\x59\xf9\x4b\x04\xcd\x5b\x5c\xf8\xbe\x50\x9d\x95\x7b\x5f\xe7\xa8\xf0\x30\xdd\xf4\x2f\xeb\x64\xff\x50\x9a\x52\xef\xd5\xf5\x38\x52\x8d\x34\x68\x03\x11\x23\x65\x60\xe8\x12\x8f\x42\x53\x0a\x75\x5e\xe7\xbc\x80\x91\x75\xe8\xa9\x81\xc2\x62\xaa\x0c\x5c\x1a\xe1\x12\x66\x11\x78\x64\x8b\xe6\xdf\xc0\x58\x92\xf1\x7f\x6b\xe9\x24\x25\xa6\x4b\x37\xf8\xbf\x32\xfd\xac\xd7\x5f\x9d\x2d\xac\x7d\x39\xf8\x54\x91\x07\xdf\x8d\xa9\xb3\x7b\x7b\xf1\xa3\xf9\x7f\x69\x77\xcb\x68\xdd\xf1\xc6\xc0\x5a\x5f\x36\xef\x9c\x3a\xd5\xfa\xd8\x2a\xe9\x86\xa6\x60\x86\xed\x71\x8e\xce\x44\x80\x71\x39\x13\xf3\x31\x19\x8a\x92\x09\x28\x13\x93\x91\x18\x0a\x12\x4d\x61\xbe\x08\xd9\xc0\xa3\x03\xe4\xa5\x14\x8f\x3a\xf5\x59\xde\x23\xea\xc3\xf5\xa3\x77\xdd\x7f\x53\xb7\xef\xed\xfd\x5b\x4f\x0d\x6b\x96\xed\xc3\x99\xf3\x37\x1f\x3a\xd0\xa9\x6d\x9f\xd3\xa9\xab\x19\xc5\x96\x3f\x56\x00\x83\x44\x03\xb3\x02\x02\xd7\x4c\x49\x01\xc0\x45\x02\xc1\x50\x22\xc2\x2d\x47\xd3\x39\xc7\xb5\x38\xdb\xc3\x24\x9a\x56\x00\xf4\x5d\x5d\x63\x53\x60\xb0\x1f\x18\xf4\xc2\xd9\xb0\xaa\xf9\xdc\x26\x89\x9b\x67\x1d\xbe\x97\x3e\x92\x9f\x0e\xc9\x7e\xf1\x54\x8d\x28\xd7\xd1\xd9\xfb\xb1\xab\x5d\xe2\x38\x88\x14\x51\x41\x20\x47\xaa\xa7\x03\x57\xd1\x6c\x5d\xa3\x19\x17\x27\x05\x82\x67\x69\x8d\x95\xa1\xc0\xaa\x82\x8e\x10\x2f\x58\x0a\x60\x25\xd6\x56\x68\x4e\x0a\x62\xb3\x50\x72\xd8\x4d\xdf\xcd\x5a\xf1\xd1\xcf\x89\x79\xc4\xa1\x17\x5f\xfc\x5c\x76\xd0\xbb\xa8\x04\x3b\xf2\xf6\xea\xb7\x62\xe5\x83\x37\xdb\xcd\xee\x12\xc7\x2e\xbe\xa2\x23\x1a\x78\xd0\xc4\x7c\x5d\xb6\xe9\x48\x17\x71\xd3\xc4\xec\x08\x38\x74\xe0\xda\x92\x0c\xe5\x50\x96\x45\x9c\x0d\x1c\x48\x0a\x92\x18\x92\xff\x41\xe3\xfd\xbf\xe5\xee\x7f\xf8\xb9\x37\xa3\x72\x86\xca\x6d\xd3\x08\xad\xa2\x9e\xf9\xf9\xbb\x65\x27\x77\xcb\xd8\xbd\x55\xe1\x0a\x97\xf7\xa5\xbb\xfa\xc9\xb0\x96\xf1\x5b\x6e\x10\x32\xa1\xa9\xf3\x36\x69\x38\x24\x85\xc9\x84\x15\xf8\x8a\x2e\xe2\x01\xf0\x23\x8b\x76\x34\x5b\xc1\x55\x8a\x11\x7c\x95\x55\x58\x25\x34\x68\x9c\xb2\xff\x36\x8b\x58\x96\xf1\x7f\xeb\xeb\x24\x35\x6e\x90\x69\x77\x72\x06\xef\xa6\x3b\xf7\xcb\x5f\x6c\x3d\x6c\xf9\x90\x59\x67\x6e\xef\x9f\xd4\x6a\xf7\x4e\xf8\x6b\xf1\x46\xad\xff\xc8\x52\x37\xed\xf8\xd5\xf5\x93\x6e\x94\x8f\x1f\xea\x49\x08\x43\x80\xd9\xae\x1e\x69\x90\x67\x03\x3a\x0c\x0c\xcf\xd6\x69\x12\x08\x12\xab\x63\x08\xe2\x1a\xad\x22\x4d\xb1\x39\x81\x34\x6c\x24\x2a\x26\x93\x02\x83\x77\x51\xdb\x9e\x99\x6f\x66\xc5\x4a\xd4\xae\x3f\x7d\xdd\xfe\x6d\xf7\x41\x76\xb9\x15\x4c\xd7\x6d\x2b\xfc\x66\xd6\xb7\x8b\xa7\x3d\x3e\x92\x3a\x66\x5b\x6c\x97\x1d\xde\x0d\x05\x93\x13\x35\x36\x92\x79\x89\x22\x11\x80\x34\xa7\xe3\x88\xb6\x19\x96\x74\x29\x5f\x12\x0c\x91\xa7\x31\x23\x70\x18\x06\xa8\x1a\x2d\xd0\x4c\xec\x80\xbf\xa6\x4d\xbb\x8d\x43\x2a\xb4\xfa\xa6\xe7\x07\x5f\x8e\xee\xf3\xe5\x46\xe3\x78\xbe\xf9\x4d\x7b\x8d\xc1\xc6\x4d\xbc\x7d\x6a\x4e\x99\xd6\x17\xe3\x57\xf1\xa7\x61\x18\x69\x04\x87\x02\x55\x90\x65\xc3\xb4\x0c\x10\x69\x82\xaa\xd8\x88\x0d\x64\x87\xd2\x5c\x03\x19\x82\xcd\x49\x32\xab\x2b\xa6\xa2\x28\x98\x4b\x80\x14\xbc\xed\xbf\xdc\x94\xc1\xab\x73\xe7\xfb\x1f\x0b\x94\x3d\xde\xa8\xdf\x0f\x28\xc3\xc6\x97\x4b\xeb\x9e\xec\xfa\xcd\xfa\x6d\x8d\x06\x31\x33\x3b\x7c\x93\xba\x0b\x6b\x6c\x67\x17\xa8\x5b\x1a\x23\x7a\x20\xa2\x4d\x53\x65\x68\xdf\xf5\x75\xcd\x09\x65\x82\x83\x0e\xe5\x72\xac\x18\x59\x16\xf0\x65\x2c\xc0\x2d\x29\x70\x19\x22\xb2\x52\x18\x35\xf9\x98\x68\xd9\xe6\xdb\x35\x6f\x4f\x97\x2f\x85\xda\x7d\x5d\x61\x76\xf5\xaa\x57\x06\xab\x1d\x07\x4e\x6f\x5f\xa0\x63\x81\x79\xa7\xea\x7a\xf1\x13\xeb\xa5\x59\x95\xa5\x09\x4e\x77\x99\x48\x61\x14\x93\xa4\x04\x41\xd2\xc4\x80\xa4\x65\xcf\x94\x14\x49\xe7\x11\xe3\xea\x8e\xa0\x6b\x11\xa1\x19\xae\x4c\x3a\xbe\xc9\xbf\xa7\xd7\xf4\x4f\x6d\xd5\xa4\xc4\x12\xdb\xb3\x25\x24\x17\x0f\xd8\x2d\xe5\xf6\xaa\x7e\x7e\xd4\x2a\xd6\xb1\x4c\xba\x7c\x99\x0f\xbd\x2c\xbd\x6a\xfd\xe7\x99\x17\xde\x2a\xe3\xbc\xf8\x04\xec\x19\xf3\x45\xea\x6e\x26\x31\xa1\x2f\x30\x8c\x10\x6a\x1e\x81\x13\x26\xee\x46\x40\x12\x0d\x3a\x10\x94\x10\xa3\x4d\x19\x84\x8e\xc9\x09\x38\x43\x44\x9c\x89\x09\x6a\x28\x03\x5a\x24\x3d\x20\xc5\x86\x7e\x38\xb7\xe2\xf1\x3f\x86\x5f\xc9\xd5\x7d\xed\xc3\xeb\xad\x17\x2e\x27\x1f\x3e\xbf\x70\x6a\x70\xeb\x86\xc2\xcf\x75\x30\xf9\xf6\x6f\x5f\xc4\x11\xfa\x0c\xc6\xe3\x6e\xc4\x99\x21\xe0\xb4\x10\x0b\x59\x2d\xe2\x30\x23\xb0\x81\xab\x50\x24\x50\x15\x32\x50\x55\x95\x22\x4d\xca\xf0\x35\x4e\xa4\x43\x4b\x8e\xa2\xd8\xd0\x3f\xf3\xfa\x83\x07\xed\x0e\x2a\x27\x90\x9a\x77\x75\x44\x5e\xfb\x74\x1e\xff\xfb\xec\x19\xe7\x7e\x9f\x70\xb3\xf1\xa1\xf6\x4b\x8a\xfe\x19\xbf\x31\x4e\xda\x46\x10\xa7\x15\x18\x2a\xa2\x4f\x42\x93\x13\x79\x5d\xe5\x1c\xcd\x37\x35\x24\xe0\x24\x23\x58\x1c\x1b\x68\x34\xe3\xc9\x26\x32\x05\x47\xb6\x80\x6d\xa5\x30\x79\xda\x7a\xe8\x90\x62\x63\x96\xcf\x78\xd1\xa7\xc4\x9d\x62\x41\xad\xbe\xb9\x26\xd9\x5b\x7a\x9c\xbb\x79\x79\x65\x9a\x5e\xeb\xfa\x75\x1a\x56\xed\x70\x1c\x27\xf1\x03\x81\x00\x08\xb1\xa4\x6a\x7a\x94\x0b\x75\xcb\xa1\x05\xd9\x63\x28\xc9\xb3\x08\x9c\xa3\x68\xc1\xe7\x09\xd5\xc3\x20\x70\x5d\xce\x94\x9d\x30\x90\x89\xd8\x4b\x9e\x96\xbb\x5c\x85\x71\xea\x0f\x19\xf7\x96\x38\x55\xaf\x57\xc7\x1a\xa5\x9f\xe5\x1f\x32\xe8\x93\x19\x53\x7e\x39\xfa\xe8\x97\xd1\x09\x13\x3e\x88\xe3\xe0\xb7\xa1\x43\x59\x15\x45\x8a\xd3\x35\x03\x03\x36\xe5\xca\x64\x28\xb3\x16\xa5\x4b\x41\x88\xb0\x48\xe1\x34\xda\x96\x54\x9b\x40\x26\xc7\xb8\x04\x8c\x02\x56\x8d\xbd\xe4\xef\x6b\x9f\x9f\x53\xa6\xac\x5e\xff\xd3\x6c\x85\x72\x24\x0e\xf8\x6d\x7b\x83\x41\x39\xfa\x39\xcc\x82\xe7\x55\x2a\x6e\xba\xd9\xb9\x7a\xd9\x4e\x71\x14\x27\xe1\x29\x3c\x0a\x31\x4b\x26\x05\x0d\xe3\x71\x19\xb1\xbe\xce\xc1\x00\xf2\x14\xf0\x68\x59\x97\x21\xe9\x4b\x9a\x0f\x44\x5d\x77\x23\xd1\xc7\x31\xd9\x94\xde\x9b\xc6\xff\xa7\xa6\x7b\x52\xe2\x92\x74\xf3\xd2\x24\x9f\xc6\x1f\xfa\xc7\x92\x65\xf5\xdf\x0c\x4e\xb0\x9a\xbd\x6c\xd4\xa3\x75\xf7\xfb\x79\xaf\xdc\xaa\xb0\xf7\x72\xf0\xc7\x47\x8b\xcf\xae\x6d\x3b\xb5\x6c\x9d\x38\x1e\x54\x81\xe0\x9b\xb2\x40\xd8\x1e\xa9\xbb\x92\xa2\xd0\x82\xaf\x1b\x50\x55\x71\xd2\x75\x5d\x43\x92\x71\xdd\xe2\x71\x16\x4a\x1a\x25\x59\x20\x12\xb5\xff\xe7\x50\xf1\xfe\xdf\xfa\x72\xf2\xba\xc1\x59\xb8\x79\x87\x4a\x9f\x2e\x59\xfb\x40\xeb\xc5\x59\x27\xe6\x78\x5c\xb6\xff\x77\xcb\xf3\xf6\x5c\x78\xf0\xa7\x35\xbb\x8e\xef\x8d\xdf\x92\x03\x95\xb5\x35\x4e\x81\xaa\x2d\x2b\xa1\x67\x04\xbc\xe4\x87\x81\x11\x4a\x88\x74\x50\x64\x30\x18\x34\x2c\x64\xe8\xae\x45\x6b\x3c\x4b\xb9\x11\x2b\xa4\x94\xc1\xac\x1d\xd4\x48\xee\x50\xec\x4e\x19\xbb\x75\x9b\xe2\x79\xce\x26\x54\x7b\xda\x66\xd1\xa5\x9d\x37\x37\x1c\xd2\x7e\xdd\xfc\xe1\xec\x4c\x4a\xea\xe4\x64\x63\x26\x5d\x88\x83\x2a\x86\x7b\x2e\x8e\x21\x46\x77\x39\xdd\xb6\x6d\x5a\xa4\x21\x6f\x85\x22\x15\x38\x0e\x41\x00\x8e\xc1\x7c\x91\xd0\x3c\xd1\x67\x42\x4a\xd4\xa2\x14\x06\x7a\x3e\x79\xf7\xcc\xdd\xff\x6d\xba\x72\xf9\x9a\x2d\x39\x9d\x73\xd6\xb3\xde\x3b\xeb\x1d\xa8\x39\x7a\xc5\xd0\x65\x1b\xad\x3c\x5f\x8d\xeb\xb7\x26\x7f\x1c\xa9\xac\xa1\x67\x85\xae\x8b\x63\xc0\x86\x02\x30\x38\x02\x53\x22\xc5\xe1\x2d\xcd\x71\x4c\x83\xa5\x2d\xdb\x51\xc5\x7f\x7d\x0b\x3b\x30\x21\x12\x59\x3e\x74\x52\xd0\x87\xfd\xe9\x8b\xfc\x15\xaf\xe7\x07\x33\xbf\x58\x4e\x45\x4f\xd2\x5d\x91\xd4\x3b\x1f\xf5\xf8\x3c\x6d\xd3\xd1\xdb\xcb\x6f\xaa\x3c\xf2\x59\xb9\x66\xf1\x03\x86\xc2\x51\x3c\x66\xd1\x18\x27\x99\x8c\x6e\xdb\x21\x03\x0d\xc9\x0b\x74\xc5\x07\x3e\x13\xd0\x14\xc0\x5c\x87\xb1\x79\x47\x56\xc2\x90\xb3\x25\xcc\x55\x68\x3f\xf6\x2e\xff\x01\xca\xfc\xf6\x7a\xed\x9e\xa6\xf3\x36\x7e\x5b\x2b\x0f\x56\xfa\xd4\xbe\x0a\x3b\xcf\xb4\x4c\x3f\xd0\x5d\xeb\x16\x9b\x78\x6a\x4b\xdb\xd4\x19\xc4\xc4\x3c\xdf\x81\xa9\x69\x88\x0f\xb5\x88\xd0\x7d\x9c\x70\x49\x68\x89\x38\x47\x69\x40\x84\xa6\xaf\xf2\x80\x54\x43\x9f\x53\x4c\x81\xb3\x19\xd6\xa5\x79\x4a\x96\x15\x27\xf6\xf9\xbe\x6f\xde\xb3\x2a\xb7\xaf\x0c\xdf\x97\xbe\xff\xd3\xbb\xe4\xc9\x2e\x95\xab\xb7\x3a\x5b\x39\xdf\xe1\x59\xab\x9f\x4c\xc9\xd1\xf7\x8b\x29\x15\x8c\x38\x76\x9b\x04\x2e\x12\x05\x82\x09\x11\x1d\x45\xa6\x60\x07\x90\x0d\x30\x4f\xd7\x04\x8a\x64\x10\x92\x4d\xe4\xd0\x5c\xc0\x71\x9e\x10\x22\x12\xaa\xac\xa4\xa1\xe0\xff\x96\xfc\x6b\xa6\xff\x8d\xa7\x93\x94\xd8\x30\x5d\x42\xb5\xe4\x57\xa4\xad\xf9\x9b\x7e\xb5\xbf\x71\x8f\x07\xda\xc0\x4e\xee\x32\xae\xd0\x56\x71\x46\x87\x84\x63\xc3\x3e\xbd\x96\x66\xcc\xe8\xf1\xe5\x1f\xaf\x49\x5d\x9b\x3a\x26\xf4\x45\x21\x50\x59\xe0\x13\x04\xa1\x08\xbc\xa8\x41\x9e\x82\x3e\x66\xe9\xa6\xcd\x22\x43\xd2\x11\x25\x13\x38\xc0\x42\xc5\x55\x3c\x39\xe0\x54\x4f\x17\xcc\x14\xce\xd6\x4f\xf8\xe5\xcd\x5b\xff\x30\x3c\x5c\x38\x73\xcd\xf2\x2f\x6f\x6e\x7f\x53\x61\x61\xb1\xb3\xb9\x2a\x3d\x9e\xd4\xef\x49\xcf\x2a\x2d\xc0\xcb\x38\x36\x15\x14\xc0\x2b\xba\x25\x39\x2a\xa1\x42\x60\xd8\x1c\xa9\x40\xc6\xb0\x49\x56\x32\xa1\x09\x3d\x35\xf0\x15\x91\x43\x2a\x1d\x02\x89\x43\x22\x86\x5b\xff\xcf\x88\xf4\xfd\xc2\x80\x38\xfd\xea\xc1\xcc\x0f\x26\xd5\xa4\x57\xb4\xae\xb7\x4d\x04\xa5\x5e\x7f\x92\x2e\xdd\x8c\xab\xbd\xee\xf5\xa9\x4f\xbd\xf9\x70\xe1\xe6\x06\x71\x9c\xa8\xa1\x03\x51\x26\x25\xc2\x23\x85\x90\x63\x75\x89\x51\x2c\xca\x01\xc0\x31\x54\xcd\xd4\x0c\x92\xc0\x38\xda\xf7\x48\xc7\x55\x15\x5b\x33\x69\x40\x19\xb4\xfd\x3e\x77\xe1\xb7\x39\xbd\xc7\x8e\x58\x35\xf8\x70\x99\x61\x65\x26\xfc\xd4\x6f\x6c\xb9\x1b\xcd\x57\xdf\x6e\x59\xb4\xd9\xb0\x8a\x8b\x4b\xe6\x6b\x58\xb2\x78\xa3\x38\xd6\x76\x25\x31\x84\x3a\x23\x21\x5f\xa2\x28\x5c\xb7\x7d\xd6\x80\x96\xcd\x53\xb6\xc5\xf1\x12\x46\x58\x2a\x72\x74\x92\xc5\x59\x01\x27\x39\xc4\x03\xdf\x92\x53\x18\x47\x3e\x3e\xbe\xdb\xe2\xdb\xa0\xce\x07\xbb\x57\x2f\xef\xbe\x77\xce\x88\x6f\x32\xed\xaf\x92\xcf\x9d\xc7\x2f\xed\x2f\xfe\xde\xe3\xd5\x8e\x01\x9b\xe2\x98\x89\xeb\x3a\x49\xfa\x44\x10\xea\x04\x12\x03\x06\x37\x50\x20\xb1\x11\xc7\xc9\x1e\x07\x49\x97\x93\x59\x86\x08\xf0\x90\x26\x4d\xcd\xb2\x09\x07\x0f\x75\x09\xc4\x8e\x87\xc1\xd5\xbb\xed\x5f\x69\x0f\xb7\xbe\xed\x3f\x6d\xf7\x49\xfd\xf0\xde\x83\xf9\x1b\xb6\x7b\xfc\x49\xfd\x57\x49\x75\x1e\x3c\x75\x37\x94\x4d\x9d\xdd\x6b\x4c\x50\x90\x06\xc0\x09\x59\xe5\x1c\x41\x23\x15\x8f\x15\x49\xde\x91\x90\xa0\x11\x04\x21\x45\x1a\xa7\xd9\x5e\x24\x03\x8b\x82\x11\x26\x29\x22\x44\x36\x61\x84\x7f\xfb\xc7\xbf\x4c\xff\xbf\x51\xa2\x92\x1a\xa7\xc9\x56\x3c\x79\x9d\x94\xca\xdf\x4e\x1b\x3d\x32\x6b\x81\x09\x37\x33\xd6\x2c\xd6\xb5\x5f\xbf\xee\xa3\x06\x94\xfa\xb4\xc2\x90\xf5\xcf\x4f\xbc\x99\x3c\xf1\xdd\xc5\x5d\xf1\x7b\x41\x8f\xe4\x91\xc8\x06\x22\x01\x30\xdd\x8a\x98\x48\x82\xb8\x2c\xeb\xbe\x4d\x13\x02\xc1\xf1\x80\xd6\x4d\xcf\xa3\x54\x93\xc7\x25\xd2\x95\x44\x41\xf2\xec\x14\x6e\xd9\x7f\x9c\x2a\x7d\xe1\x83\x53\xb9\x2e\xf7\xae\x51\xbc\x85\x9d\x3d\x53\xe7\xea\x1f\xeb\x20\x7d\xa3\xc2\x7b\x26\x27\xf6\x2a\xf8\xe8\xd2\x9f\x71\x2c\x3a\x3a\x10\x52\x82\x18\xda\x74\x80\x3c\x11\x31\xba\xce\x88\xa6\xca\x9b\x26\x2e\x19\xa1\x14\x49\xa4\x19\xa2\x90\x41\x21\xaf\x43\xce\xd0\x38\x93\xb6\xfe\x52\xfa\x88\x21\x0d\xfb\x28\x0d\x7b\xe3\xc1\x17\xdf\xf4\x59\xea\xd5\xfd\x12\x2d\x1e\x55\xf3\xd7\x72\x47\xbf\x29\xb2\x7a\x31\x79\xb2\xeb\xd9\x82\x1d\x6b\xa5\xae\x8a\x17\x9b\x52\xae\x5b\x84\x06\x39\x46\x74\x54\xdc\x01\x02\x83\x13\x82\x80\x34\xdf\x56\x43\x41\xf0\x59\x01\xd3\xed\x10\xb0\xd0\x8f\x78\xda\xb7\x43\x9a\x83\xaa\x92\x82\xda\xe4\xa8\xeb\x9f\x6f\x29\x37\xb7\xfb\x67\xf9\x1b\x6f\xd8\x32\x30\xa1\x56\x91\x1c\x95\x12\x83\xf1\x4f\xd2\x2d\x8e\x6a\x77\x5d\xb6\xf7\x65\xe6\x99\xf1\x8b\xe0\xb2\x6a\x3b\x21\x92\x5c\x42\xb7\x21\x4b\x21\x91\xf7\x03\xc1\x92\x2d\x83\xe2\x45\x3e\xc4\xc2\xc8\x41\x38\xc3\x87\x8c\x80\x13\xb8\xa8\x22\x41\x40\x31\x1c\x07\xfe\x89\xde\x97\x94\x38\x28\x21\x4d\x89\xe4\xd0\x6f\x79\xb9\xd2\xfa\x52\x59\x88\x59\x09\x6b\x1e\x4d\x69\xf8\xdb\x33\xf4\x59\xe6\xcf\xba\xb6\x7e\x53\x73\xe3\x99\x3a\xf5\x3a\x6f\xf0\x76\xc5\x71\xf8\xc3\xe1\xa9\x80\xb0\x81\x0b\x31\x93\xe6\xdd\x40\xe1\x05\x17\x04\xb4\x1e\x3a\x91\xef\x29\x12\xf2\x83\xc8\xc5\x00\xe7\xd1\x40\x43\x90\x0e\x6d\x9c\x81\x29\xd4\xdb\x15\x94\xc5\xbd\xfa\xe0\xf6\xc4\x3d\x9f\x9e\x2d\x3a\xbc\x50\x9f\x1f\x46\x0f\x58\x78\xa9\x7b\x91\xc6\xf9\x36\x55\x47\x27\xdb\xae\x19\xd3\x39\x8e\xdd\x31\x27\x0a\x58\x27\x22\x11\x45\x7b\x98\x21\x0a\x88\x63\x34\xdb\xb3\xd9\xd0\x8d\xcc\x10\x77\x38\x86\x52\x58\x59\x35\x83\x10\x02\xe8\xe9\x62\x00\xa5\x14\x74\x79\x1a\xec\xdf\x66\xa7\x93\x7e\x1e\x3b\xae\xd2\x93\xa7\xc5\x07\xcf\x1f\x79\xb4\xe8\x85\xec\xab\x36\xaf\x07\xdf\xad\xcf\xb1\xe5\xe9\x94\x82\xf1\xbb\xd0\x41\x83\x72\x03\x01\x98\x12\x24\x23\xd3\xc5\x90\x15\x02\x12\x60\x38\x29\x9a\xaa\x6c\x30\x01\xe4\x68\xcd\xf0\x2d\x21\xb0\x18\xc1\x41\xa2\xe1\xd2\x2c\x93\xc2\x2e\xa7\x8f\xfc\x52\x19\x7f\x1a\xb4\xb9\xd7\x94\x57\xef\x3e\x4f\x7b\x66\x5d\xb5\x9d\x64\x89\xe5\x5d\xfc\x09\x35\x1e\x07\x6d\xf8\x45\x9f\xc7\x4f\x7b\x1a\x22\x49\xc1\x80\xa2\xd3\x41\x24\x32\x22\xad\xe2\x32\xa7\x6b\xb2\x43\x21\xcb\x65\x34\xca\xc0\x30\xd2\x57\x23\xdd\xf3\x70\x8d\x51\x39\xc9\x34\x49\x56\xf6\xdf\x83\xfe\x3f\x71\x55\x93\x12\x8b\xa7\x1d\xfa\x5f\xdd\xb1\x5e\xd9\xf6\x14\xbd\xfb\x4b\xd3\x6b\x9d\x7a\x5c\x7a\x5b\x28\xdd\xd0\xda\x9a\x7d\x7a\x73\xe7\x15\x7f\x3e\xeb\xba\x79\x73\xe1\xda\x6b\xcb\x8e\x88\x5f\x9a\x6f\x5a\x1c\x4d\x23\xdd\x0a\x81\x46\xd9\xb6\xc1\x52\xba\x69\xf9\x1e\x2f\xb8\xa4\xaa\xf3\x36\x34\x02\x9f\x56\x83\x7f\x5d\x64\xa1\xe0\x03\x68\x52\x1c\x48\xa1\x31\xbc\x35\x4f\xf9\x89\xe9\x16\xcf\x5c\x57\xb0\x42\x85\xa3\xd3\x37\x2c\x3a\xdd\x62\xd7\xde\x92\x1f\x4e\xbf\x7a\x2d\xd3\xb6\x3a\xbf\x15\xf7\x33\xa4\xae\xcb\x1a\x33\xea\x73\x84\xea\x49\x04\x14\x7c\xde\x84\x32\x8f\x89\x26\x14\x4c\xd5\xf1\x04\xd5\x42\xaa\x22\x11\x1c\xa5\x43\x8e\x0f\x65\x42\xf5\x2c\x87\x83\xaa\xeb\x84\x29\x58\x75\xad\xd7\x27\x5c\xfb\x6c\x48\xed\x92\xcd\x4f\x74\xb8\xbe\xe9\xab\xcb\x5f\x8f\x74\x7e\xb9\xd0\xea\x65\xf3\x86\xc3\xd7\xdc\x69\xfe\xaa\x4a\xcf\xd4\xf5\xb2\x63\x77\x59\x7d\x4a\xa5\x0c\x84\x34\x92\xc0\x22\xc0\xe3\x9c\x4b\x43\x26\xa0\x55\xd3\x51\x3d\x41\xc3\x5c\xdd\xe0\x48\x49\x60\x9c\xd0\x52\x08\xe0\x53\xa4\x19\x82\xd8\xbb\x9c\x30\x69\x6e\xe6\xc5\xb9\xe8\xb5\x1b\x87\xd7\x19\xc5\x5c\x6a\xff\x6a\x4d\x3b\xf9\x44\xd6\x7e\xe1\xf3\xdf\xd2\x74\xdd\x7b\xe8\xd5\x01\x3a\x9e\x6d\x53\xc2\x75\xf1\x48\x26\x54\xd9\xa4\x45\xc8\x69\x36\xcd\xd8\x0c\x42\x01\x4d\xc0\x10\x98\xbc\x1b\x8a\x3a\xa6\x78\x80\x0e\x0d\x31\x8a\x14\x87\xb1\xff\x2e\x96\x9e\xcb\xf4\xbf\x11\xaf\x93\x1a\x67\x19\x9e\x90\xfc\x2e\xb5\xaa\x98\xf0\x6c\x5f\x7e\xa7\xc7\x5e\x87\x5c\x32\xf8\xc3\x5b\xd5\x6e\x57\xce\x79\x7a\x6b\xcf\x36\x0d\x6e\x66\xbb\xb9\xa3\x65\xf3\x42\x6f\xe2\x87\x7c\xcb\xe4\x1d\x41\x24\xf5\x7f\x5d\x1c\x09\xd5\x02\xac\x00\x80\x8a\x47\x02\xd0\x04\x3d\x62\x24\x3e\x88\x78\xc5\x31\x31\xe4\xe1\x9a\xe5\xbb\x0e\xc9\xdb\x61\xec\x6f\x52\xab\x03\xf5\x60\xec\xd4\x87\x37\xe8\xef\x96\x3f\xce\x55\xf3\xc0\xb3\x31\xaf\x9a\x87\x37\xba\x8e\x9e\xb5\xa2\xea\x82\xbb\x4d\x05\x3d\x75\x8e\xfc\x31\xbf\x09\xc9\xca\x2c\xa7\xd2\x9a\x6b\x52\xa1\xac\x31\x2c\x15\x85\x16\x89\x1c\xd6\x32\x18\x35\x24\x55\xd2\x67\x35\xce\x24\x1d\x04\x48\x03\x05\x94\x8d\x74\xe8\xc5\x8e\xa0\xd7\x6d\xe2\x62\xa5\xdf\xbe\x9c\x7c\xb0\xec\x97\xb9\xcf\x94\x4b\x84\x87\x2a\x9c\x9b\xb3\xee\xea\x9b\xd6\xf3\x9c\xec\x17\x77\xf7\xd5\x6b\xc4\x71\x9e\x40\x50\x42\xde\x34\x7c\xc3\x30\x54\xd6\xa6\x38\x36\xa2\x58\x14\xc9\x48\xf6\x2c\x3a\x0a\xf5\xc8\x09\x79\x4c\x95\x0d\x2a\x10\xa5\xc0\x8e\x64\xc6\xb0\x83\xd8\x43\x58\x69\x86\x81\xf9\xf9\x4a\x45\xe9\xea\x65\x6c\x71\x7f\x53\xc9\xc3\x47\xe7\x37\x99\xb3\xb5\x7e\xbf\xae\x45\xea\x53\x25\xe4\x81\x7b\x86\x0f\x8f\xa3\xc6\x8d\x0d\x90\x44\xd1\xb8\x4f\x04\x81\x2c\xd1\x26\x32\x65\x64\x72\xa4\x44\x87\x36\x6b\xc9\xb8\xa3\x48\x24\x50\xbd\x20\x22\x25\x09\x8b\x28\x4c\x95\x4d\xf7\xfd\x01\x93\xae\x77\x85\xe3\xf2\x9f\xf3\x0e\x1d\xcc\xfd\xc2\xab\xd9\x78\x4b\x73\x98\x76\xe7\x37\x7f\x60\x0f\xfd\x9d\x7b\x3e\x9c\x73\xbe\xd0\x55\x3e\x7e\x38\x16\x31\xc0\xd0\xbe\xec\xda\x2a\x47\x39\x96\x8f\x39\xb2\x80\xc9\x1c\xa1\x05\xb6\x4f\x42\xc9\xf3\x48\x4d\x87\x78\xe0\x59\xa1\x02\x55\x9b\xb1\x71\x9d\x4d\xa1\x11\x43\xf4\x7f\xbc\x1b\x9f\xe5\x6d\x2b\xfb\xc3\x02\xf2\xe4\x8d\xb6\xd9\xbb\x36\xad\x43\x96\x7b\x96\x66\x6a\xcd\xc4\xeb\x4b\x3c\x72\xe2\xd5\xf8\xe1\x58\xe4\x02\xc0\xd3\x12\x82\x80\x65\x45\x97\xd2\x03\x5e\x02\x3a\x6d\x0a\x16\x0c\x42\x99\x27\x1c\x87\xd5\x65\x9b\x41\x30\xd0\x79\x9c\xd5\x1d\x85\xfd\xab\xab\x91\x8c\x6f\xf5\x4f\x63\x1a\x49\x89\x69\x1b\x14\xff\x2f\xe7\xc2\x86\x1f\xe4\x6a\x30\xe5\x40\xe3\x13\x85\x0b\x1b\xaf\xef\xb6\x3f\x84\x56\x65\xee\xdf\xce\x39\x71\xfc\xb3\x7a\x87\xee\x0a\xe4\x88\xdd\xa9\xf3\xb0\x8a\x89\xa1\x08\xf0\x20\x20\x22\x82\x20\x03\x19\x63\x39\xcb\xe7\x28\xd7\x56\x2c\xce\x14\xb1\xc0\x54\x23\x96\x72\x25\x09\x04\xb2\xcb\xea\xa2\x63\x02\x9b\xa3\xa4\x14\xdc\x95\xa6\xd7\xe8\xd9\x59\xef\xfa\xd9\x94\xa2\xf3\x82\x53\xe3\x9b\x5e\xab\x37\x40\xda\xa6\x8e\xd1\xd3\x17\xe9\x5c\x6b\x55\xcb\xf4\xb5\xe6\xa5\x4e\x3b\x2e\x76\xbd\x9d\x75\x39\x13\x12\xba\x8c\x8c\x80\x67\x08\x8b\xd6\x80\xc8\x12\x0a\xce\xe9\x84\x62\x30\x11\xe9\x4b\xa6\x45\x98\x24\xeb\x30\x82\x16\xe0\x12\x15\x99\x29\x74\xc7\xea\xb6\xf8\x7c\x51\xeb\xb7\x1f\x67\x7a\x36\xfb\xfa\x40\xe7\xda\xd8\x43\xb5\xbe\x2c\x70\xe5\xf2\xd5\x0f\x1e\xdc\x18\xbb\xa1\x03\x51\x27\x6d\xea\xc8\x4b\x31\xd3\x33\xcb\x31\x81\x80\x24\xa0\x6a\xa1\x6b\x50\x11\xcb\x2b\x84\x2d\x3b\x28\xb0\x4d\x4e\x8c\x6c\x47\x53\x2d\x8d\x31\x78\x9b\x70\xd5\x88\x16\x01\xe9\x13\x18\x13\x3b\x13\xb8\xf4\xea\xde\x93\xda\x0f\x1b\x59\x35\x3b\xd7\x3e\x30\x79\xf2\xa4\xdc\x45\x3f\xbf\x5f\xb2\x4d\xf3\x1b\x6b\xbf\x1a\x23\x2f\xc9\x97\x31\x7b\xea\x92\xe0\xd8\x99\x00\xaf\x07\x24\x11\x48\xac\xa7\x18\x38\x89\x22\xdd\xb2\x68\xcb\xb7\x38\x1f\xfd\xff\xae\x9d\x84\x62\xe9\xae\x80\x93\x12\x8a\x4c\x5d\xd0\x23\xd9\x82\xec\x7b\xf4\xf2\x7f\x9a\xd7\x48\x4a\x9c\x90\x90\xd0\x28\x39\xf4\x57\x5c\x5f\x0f\x56\xe8\xeb\x8e\x1f\xec\x94\x63\x64\x1a\xe7\x7c\xd9\xb3\xdc\xcc\x37\x95\x76\x4d\x68\xb7\x71\xf6\xc6\x2a\x9b\x9b\xfc\x10\x47\x0b\x08\x87\x41\x88\x61\x0d\xce\xe4\x31\x0e\x73\x5c\x09\xf7\x71\x99\x44\x80\xb5\x79\x81\x31\x61\x84\x5c\x4c\x60\x23\x05\x07\xb8\x4c\x60\x9a\xc8\xaa\x0c\x9b\x82\x96\x65\xbb\x5f\x85\x1b\x93\xff\x60\xce\x7c\x3c\xaa\xff\xa2\x53\xa7\xfb\x8f\x2d\x7e\x68\x45\x95\x96\xa3\x2b\x7d\x5a\x68\x6b\xbe\x2f\x26\xef\x18\x9e\xba\x72\x54\xec\x3a\x82\x09\xb4\x20\x60\x43\x9f\x65\x24\x56\xe3\x02\x35\x00\xbe\x0a\x22\x93\x35\x04\x40\x52\x24\x86\x2c\x2d\x0a\x7d\x0e\xe7\x03\xdb\xd3\x1c\xc0\xc9\x66\x0a\x1d\x85\x33\xd9\x6e\x1f\x9e\xf4\xf5\x88\x95\x3f\x7e\x3e\x73\x40\xda\x2f\xc6\x28\xee\x89\x3d\x8f\x2a\x97\x21\x2f\xbd\x9b\x35\xfc\xee\x89\xbc\xeb\xe2\x68\x01\xa1\x59\x08\x23\x01\xa3\x03\x52\xe6\x7c\xd6\x64\x34\x40\x39\x91\x85\x4b\x3c\x65\x23\x86\xc1\x15\x47\x83\x38\x40\x8a\x6c\x19\x0a\x0b\x6c\x09\x07\xa6\x17\x7b\xc9\x69\x2a\x71\x57\x1a\xed\x9d\x56\xa4\xfd\xd8\x9d\xdf\x1e\xb6\x67\xff\x76\x7d\x66\x86\xdb\x8b\x2f\x94\x9c\x3e\xee\xc9\xb2\x87\x51\x97\xa2\x71\x1c\xb9\x51\x6d\x40\xf8\x1e\x6d\x06\x9e\x62\xd2\x2c\xcb\xa9\x21\x47\x78\x04\xa1\x06\x11\x16\xa9\x9a\x0b\x31\x88\x02\x9e\xc7\x3d\x95\x64\x05\x28\x88\x82\xca\xd0\xff\x17\x60\xfe\x5d\x9e\xff\xa7\xe1\xa3\xa4\xc4\x34\x39\x27\xa4\x4d\x9e\x52\x0e\xac\xb4\xa5\xf9\xa3\x4f\xbe\xcb\x78\xf3\xee\x90\x45\x0b\x2b\x9c\x6b\xda\xf1\x44\xa3\x17\x86\xd2\x75\xda\xa8\x22\x33\x16\xd5\xff\x74\x55\x95\xf8\x41\x1f\x33\x54\x59\x73\x45\x20\x70\x86\x2c\xe0\x34\x86\xd9\x9e\x4b\x93\x2e\x45\xca\x08\x1a\xae\x6d\xb9\x56\x14\x21\xd6\x96\x28\x86\x34\x44\x03\xe2\x3e\x52\x62\x7f\x94\x0e\xb5\xaa\xec\xe9\x56\x6e\x44\x91\xb2\x3f\x6a\x89\xc7\x8e\x1f\x0f\x72\xd5\xd9\x56\x7b\x6b\xc1\x8c\x25\x73\x7f\xba\xf8\xf4\x80\x44\xef\x71\x1c\x43\x28\xb4\x43\x43\x57\x21\x46\x3b\x86\x4a\xe9\x06\x8e\x71\x1e\x6b\x41\x48\x10\x16\xe7\xcb\x06\x61\x4b\x3a\x86\xf9\xaa\x10\x00\xdb\x42\xbe\x48\x45\x56\x18\x7b\xc9\xc6\xe9\x9a\xd9\xcb\x6a\x98\x90\xbb\xfb\xd2\xb5\xe7\x57\x27\x9d\x7b\x3b\xeb\xbb\x5b\x97\x4a\x0d\x6d\xda\x50\xab\x3b\x72\xc2\xe2\xa5\xe3\xe3\x87\x23\xd7\x37\x50\x60\xe8\x54\x64\x4a\xd0\xb4\x5d\x0d\xe7\x45\x56\xe5\x81\xe0\xe9\x38\x70\x19\x86\xd6\x48\x8b\xd5\x5c\x88\x6c\x1e\xd7\x28\x3c\x0c\x48\x2b\x85\xb3\x75\xfb\xe2\x23\x33\xae\xe7\x58\x7b\xff\xfe\x31\x6e\xf8\x9e\xb5\x79\x68\x94\x6d\xd1\xdb\x11\x69\x66\x7d\xd4\x40\x7f\xcd\x5a\xb5\x67\xfc\x14\x47\x49\x31\x40\x28\x1a\x0d\x18\x59\xc1\x49\x9f\x46\xbc\x68\x0b\x8e\x6a\xa8\x0a\x85\x2b\xba\xee\x29\x11\x6d\xe8\x3a\xe9\x7a\x1e\x4b\x58\xba\xc1\xa2\x10\xd1\x7e\xec\x26\xc8\xc6\xe5\xcb\xf0\x31\xc5\xce\xf4\xd0\xfe\x1c\x9b\xad\xd3\x93\xd9\xc7\x67\x9f\x7f\x9c\x70\x6a\x50\x53\x65\xfb\x8b\x2b\x65\xf7\xbc\xa6\x53\xd7\xff\x8b\x2d\x20\x0e\x20\x30\x35\x91\x14\xa1\xc2\x40\x87\xb5\x05\x99\xf1\x39\x4e\xb1\x2c\xc8\x08\x84\x2c\x23\x4b\x87\x76\x44\x84\xae\x6f\x89\x06\x47\xba\x2a\x23\x51\xef\x37\x41\x5e\x5f\xcb\x09\x5e\x8f\xc9\x6f\x3e\x6b\xbb\xa9\x79\xfe\x41\x45\x94\xb3\x97\x1a\xb4\x79\x5a\x7a\x6b\xdd\x33\xa5\xcf\x3e\xcd\xb0\xf7\x7c\x1c\xbd\x21\x79\x8b\x83\xb4\xc9\x72\x8a\x69\xd9\xb6\xa9\x07\xac\x86\x89\x02\x05\x1d\xa4\x9b\x2c\xef\x50\x50\x81\x5e\x10\x3a\x26\xc2\x3c\x06\xb7\x94\xd0\xd5\xcc\xbf\xd5\x77\x66\xd5\xf8\x6b\xb5\x3f\xe4\x19\xda\xfe\xe1\xc6\xe7\x33\x5e\xb1\x73\x96\xf9\x0d\x9a\x65\x60\x2b\x05\x62\x1a\x6e\xe5\x80\xc2\x55\x1a\x5a\x9b\x1a\x34\xfd\xf3\x6f\xc9\xc4\xff\x98\x00\x16\x6a\x8c\x7a\xbb\xea\x70\xe6\xd6\x1f\xce\xbe\x9c\x70\xa0\x72\x94\x3f\xeb\x81\xd3\x47\x36\x94\x2b\x87\xdf\x9c\xd2\x5a\xbd\xb0\x73\x4e\xea\xc6\x57\x62\x26\x68\x36\x47\xa8\x04\xf4\x39\x46\x13\xe4\xd0\xc7\x58\x9a\x95\x5d\x85\x94\x43\x3e\x74\x75\x8b\x34\x39\x8f\xd0\x38\x42\x87\x0c\x20\x64\xcc\x15\x19\x41\x77\x62\x88\x64\x0d\xb2\xb4\x4e\xf9\x13\x59\xfe\xf8\x4b\x54\x29\xcf\xd9\x1d\xb5\xc6\x8d\x5f\x53\xa0\x40\xc5\x57\xa7\xb7\x9d\xe3\x36\x8c\x2f\x7a\xa0\x48\x1c\xb9\x91\x76\xa4\x2b\xb2\xa4\x0a\x2e\x09\x6d\x83\x86\x3e\xc3\x87\x72\xa0\x28\x24\xd0\x1c\x39\x88\x1c\x49\xe5\x03\x17\x8a\x21\x22\x81\xec\x86\x81\x47\x86\xe8\x7d\x7a\xed\x9c\x4b\xb9\x36\x9e\x79\x35\xb6\x5d\x94\xa7\x6a\xe1\x9e\xd9\x6a\x1a\xcb\xbe\x9b\x09\x2b\x56\x35\x5f\x2c\x68\xd9\x69\x78\xae\x33\x0d\xf3\xc5\x2f\xaa\x88\x94\xe9\x32\x80\x66\x4c\x87\xf4\x4d\x1a\xb3\x38\x4f\xd6\x20\x89\x3c\xdd\xc0\x58\x02\x13\x4d\x46\x0c\x45\x4e\x91\x1d\xc5\x02\x21\xc9\x89\x50\xc7\x94\x14\xc6\x69\xd3\xde\x4b\xf3\xcb\x1f\xe5\x0e\xb5\x5b\x93\xb7\x56\xb7\x93\xf5\x86\xed\xeb\xde\x3d\xcf\xc5\x61\xe5\xda\xf8\xf9\x37\xb1\xcb\xbe\xbd\xbd\x67\x6a\xf2\xa7\xeb\x74\x4a\x1c\x9a\x98\xb1\xc2\x07\x09\x59\x56\xee\x39\x96\x7b\xf5\xc1\x89\xa5\x2e\xcc\xbf\x24\x5d\x3b\x84\x7d\x5c\xaf\xdb\x37\x9f\x1d\x2c\x9d\x5c\x2b\xfb\xab\xb4\xb3\xeb\xa6\xef\x9f\xab\xe7\xda\xab\x4f\x6e\x9f\xe8\xa9\xad\x5a\x79\xad\xe9\xe3\xe8\x72\x86\x8e\xeb\x4f\x91\xf0\xea\xca\xf8\x09\x70\xd1\xa6\xa2\xf0\xb4\xac\x6b\x90\x52\x03\x56\x07\x8c\x25\xb0\x1a\x17\x92\x94\xcb\xba\xac\x66\x51\x38\x90\x22\xc7\xb3\x28\x43\xa6\x28\x8a\x51\x48\x8c\x8f\xac\x14\x2a\x56\x5d\xf6\xa7\x29\xc3\x57\x4b\x98\xdb\xae\x67\xa1\x7e\x0b\xd6\x77\xde\xb6\xf9\x5a\xff\x8e\xb7\xca\x64\x6d\xf9\xeb\x93\x23\xf9\x6b\x6f\x08\xe3\x07\x38\x8c\x32\x55\xc1\x93\x28\x14\x44\xbc\xa5\xc9\x8c\xee\x32\x6c\x44\x62\x84\x05\x4d\xd3\x65\xa0\xc8\x4a\xaa\x4c\x7b\xbe\x60\x7a\x24\x90\x18\x95\xc2\x15\x39\xb6\x66\x58\xba\x62\x03\xef\x36\x59\x99\x69\xff\x60\xe9\xe8\x9d\x6e\x79\x12\x6e\x16\x7d\x71\xe8\xb7\x06\x57\x8f\xe7\xdc\xd4\x6b\x50\x97\xbd\xcb\x37\xd5\x8f\x1f\xe8\x08\xc3\x51\x79\x5f\x02\xa2\x8d\xb1\xae\x2b\x23\x5e\xa5\x74\x9f\xb6\x08\x0b\xd7\x64\x1c\xf2\x9a\xc3\xca\x94\xeb\xd3\x3a\xe1\x88\x8a\x89\xa0\x8f\xc5\xd2\xb2\x68\xff\xc5\x9f\x35\x4b\xa6\x2d\x5e\xba\x20\x71\x63\xe9\xec\x5f\x57\x87\xb9\x7b\x24\xc2\x47\x0c\x79\xb8\xde\xd1\x15\x13\xc6\x7e\xd5\x28\x75\xbe\x86\x31\x41\xa1\x23\x83\xd6\xa1\xc1\x62\x62\xc4\x43\x45\xe4\x42\xcc\x70\x80\xa4\x8b\x06\x40\x6a\x20\x7b\x91\xcf\xa8\xae\xed\x92\x1e\xa1\x5a\x0a\x1f\x20\x14\x62\x29\x94\x1a\x9a\xed\x6c\xf3\xc1\xe1\x87\x39\x17\x65\x1c\x9a\xe7\xf9\xb2\x2d\x07\x67\x0e\x7d\xd7\xae\x5c\xcb\xc7\x7b\x66\x6e\x99\xd5\xfa\xa9\x87\xfe\x4c\x5d\xf3\x2a\xb6\xdb\x88\xe8\x20\xc5\x03\x50\x62\x10\xe6\xe9\xc0\x50\x4c\x64\x39\x91\x12\x11\x00\x38\x32\x20\x81\x8f\x47\x96\x81\x20\x47\xda\x5c\x60\x68\x90\x08\x42\x2d\x05\xad\xee\xfe\x03\x2f\xfc\xb8\x5e\x32\xba\x54\x68\x35\xaa\xe7\xbe\x91\x5f\xfe\x59\x72\xdf\xb4\x4b\x49\x19\xad\x47\x7d\xd3\xa2\x05\x19\x0f\xc6\x8f\x59\x4b\x43\x9c\x95\x18\x68\xa9\x1a\x13\x90\x8a\xcc\x7a\x86\x60\x9b\x86\x2d\x18\xb2\xaa\xc9\xa4\xa5\x93\x3e\x83\x85\x9a\xca\xd2\x38\x1d\xea\xaa\x2e\x0a\x7c\x04\x53\x10\x9d\xf1\x4a\xbf\xae\xfc\x6c\xdb\xae\xca\xc3\x96\x5d\xfb\x7d\xda\xbb\x0b\x35\xaa\x66\xbd\xf4\xf9\x57\x72\xd1\xcf\x6b\x65\xfc\xa8\x2c\xfb\xb4\xf6\xa5\x64\xa8\xb7\x5f\x9d\x99\x5d\xf7\xb1\xd1\xa1\xc2\xc1\xe9\xda\x83\x83\x6f\x57\xca\x09\x52\x41\x3e\x5b\xbd\xec\x8c\x39\xaa\xdf\xb2\x60\x72\xf1\xf8\xa5\x16\xac\xc4\x21\xe0\x23\x12\x93\x24\xcd\x77\x05\x8d\x03\x1c\x6b\x4b\x21\x07\x42\x91\xc1\x81\x1c\xe8\x34\x47\x91\x86\x67\x47\x34\x72\x34\x39\x80\xb2\xe5\xbc\x9f\x5a\x3c\x6e\x68\x34\x29\x59\x68\x6d\x8b\x07\xc7\x9b\x9d\x6f\xfc\xe0\xd8\xab\x80\xae\x59\xd8\x6b\x91\xf0\xe0\xc1\xc0\x35\x13\x1e\xc8\x7f\xa6\xce\x1a\x33\x76\x61\xc4\x56\x65\xd2\x64\x5d\xdb\x34\xb1\x88\xe7\x71\xdd\x36\x30\xcc\xd3\x43\x07\x3a\x38\xa6\xe3\x81\x8c\x99\xb6\xa7\x88\xa1\xc9\x10\x0e\xe2\x45\x46\x61\x52\xd0\x91\x5a\xd9\xef\x88\x5f\xb7\xc3\xb6\xe1\xc5\x2a\x7c\x92\x67\xce\xec\xe7\xe9\xaf\xf7\xeb\x3a\x36\xcd\x83\x24\x9c\xfb\xf2\x5c\x5f\x56\xf8\xfd\x48\xfc\x50\x2f\xb1\x8a\x11\x59\x0a\x63\xd0\x96\x83\x22\x8e\x44\x10\xf3\x08\x5d\x55\x48\x11\xb2\x82\x4c\x31\x98\x6b\x09\xa4\xa8\xf8\x5a\xa8\xe2\x38\x2e\x72\x04\x0b\xdf\x3f\x7b\xff\x4c\x2c\x3b\xf5\x78\x8e\x62\x4b\x17\xec\x3d\x3e\x77\xc1\x17\x65\xaf\xf1\x13\xb7\x3d\x5a\xf0\xc3\xec\xfb\xd7\x73\x26\x7e\x4d\x6d\x2b\xfc\x5d\xfc\x10\x8f\x63\x02\xa7\x00\xc8\x13\x2e\x8d\x69\x3c\xe6\x86\xb8\x25\x19\xa6\xad\x70\x1a\x1d\xa0\x40\xa7\x00\x86\xa0\x6a\x5a\x50\x27\x6c\x87\x57\x54\x5a\x07\x6e\x0a\x88\xff\xde\xac\x3b\xe4\xee\xe7\xc5\xbe\x28\x7d\xa9\xf5\x90\x92\x0f\xaf\x0f\x2e\xf6\x62\xed\xa1\xfa\x99\x3f\x1b\xf2\x34\xf3\x95\xd3\x9f\x64\x3f\x79\x2b\xf9\xd3\x6f\x6e\x36\x5e\x74\xbe\xc4\x57\x99\xb6\xbd\x2b\x40\xb7\xb8\xd2\x79\x5a\x8f\x35\xd1\x57\x79\x3f\xc8\xb2\x20\xe2\x5e\x5f\x2e\xbb\x2d\x7f\x85\x64\x89\xde\x07\xdf\x6f\x48\x3f\xfa\x87\x5b\xd3\x16\x7d\x65\x94\xdb\xf0\x64\x69\xd4\xfc\xdd\xf6\x5d\x1f\x3d\xdb\xfe\x43\xd2\x93\xca\xcf\xf3\x3c\xdb\xb1\x33\x8e\x8a\xe5\x91\x83\x08\x21\x94\x8c\x28\xc0\x05\x52\xb6\x03\x25\x90\x05\xd2\x09\x2d\x1e\xf7\xc5\xc0\x81\x88\x72\x2d\x41\x55\x30\x23\x20\x65\x68\x22\x96\x67\x9d\xf7\xbf\x5e\xd3\x72\xa5\x0f\x6e\x79\xb4\x78\x60\x7f\xec\x49\xe6\xf1\x87\x67\xf5\x7a\x30\xf2\xb7\xdf\x27\xdc\xaa\x15\xe5\x2c\xfb\xaa\x66\xdf\x0c\x76\xea\x96\x1b\xf3\xff\x90\x3d\x93\x74\x22\x18\x86\x3a\x10\x55\x4a\x53\x90\x2c\xd1\x82\xeb\x05\x91\x04\x05\xdf\xc4\x90\x49\x2a\x2a\x61\x63\x8e\xaa\x0a\xbe\xca\x4a\x2a\x01\xad\xf7\x0f\xb1\x1f\x72\x7d\xbd\x64\xf2\xd7\xee\x28\xdb\x2a\x77\x7b\xe5\xc6\x9b\xe7\x2b\x32\x13\x85\x8c\x53\x4a\xc3\x6c\xe7\x8a\xd6\xee\xf5\x61\x8f\x1e\x71\x1c\xd2\x94\x99\x00\x8f\x7c\xc6\xd6\x1c\x29\x72\x71\x25\xe4\x75\x84\x48\x49\x63\x5d\x4e\x55\x24\x57\x60\x25\x47\x8c\x24\xdc\xb6\x05\xc9\x04\x82\x42\x31\x76\x0a\x6a\xbe\x1f\xec\xeb\xab\x2c\x1c\x97\xb5\x68\xaf\x33\xbf\x6a\x15\xda\x3e\xa8\x56\xe0\xda\x9a\x8b\x13\x92\x66\x6e\xb9\x70\x62\x34\x5f\xd1\x2e\x1b\x47\x45\x6a\x45\x72\x6d\xca\x30\x71\xc9\xf7\x30\x9f\x92\x22\x8a\x22\x14\x16\x42\x49\x83\x0c\x4f\xe9\xb8\x8a\x4c\xd5\x46\x94\x1b\x89\x06\xb0\x4d\x87\xc5\xa2\x28\x46\xc0\x1c\xba\xd1\xce\xd1\x6e\x52\xf5\x4f\xc7\xde\x6d\x71\x36\xc7\xcb\xb4\x6d\x72\xac\x7e\x51\xad\x6f\x8b\xfe\x3f\xaf\xe6\x2b\x75\x40\xa5\x3e\x4e\x9d\x84\x46\xec\x80\x49\x72\xba\x0d\x68\xc1\xd1\x75\x07\xc8\x1c\x47\x50\xae\xa2\x79\x1c\x66\x51\x48\xa4\x1c\xce\x62\x6d\x89\x36\x7c\x1a\xd8\x98\xec\xd2\xb6\xcf\x1b\x4c\x0c\xd9\xc4\xad\x37\x7f\x76\x32\xd3\xdd\xaf\xac\xf9\x71\xd3\x90\x95\xc4\xa4\x23\x65\x04\xab\xd4\xca\x03\xdf\x8c\x9e\xf1\xf4\xc3\x1a\xe3\xda\x0f\xdd\x1f\xc7\x60\x69\xf0\x58\x48\x58\x2c\x2d\x53\x74\x08\x75\x8e\x80\x32\x65\xf2\x0a\x1e\x8a\x2a\xe7\x6a\x2e\x26\x07\x06\x19\x99\x86\xeb\x20\x0a\x45\x96\x85\xf3\xa1\x17\x3b\x45\xc8\x58\xaf\x76\xf7\x29\xa5\x9a\xec\xd8\x9d\x65\xe0\xed\x42\x1b\xbb\x5f\xbf\x3a\x78\xff\xa1\x2d\xbd\x47\xef\x9f\xb4\x7f\xe2\x79\xb6\x7c\xb7\xd4\x35\x02\x63\x9b\xef\x70\x21\xa6\x6b\xb6\xc1\x50\x84\x6f\x0b\x1e\xa2\x78\x4d\x80\xbe\x2a\xe8\x34\xed\x58\x11\xa3\x02\x9b\x82\x2e\xa9\x98\x90\xf7\xb9\x50\x87\xa6\x96\xdc\xa9\xee\x6f\x0c\x37\x4a\x7a\x6a\x0f\x3c\xf9\x74\xb1\x5f\x77\x20\x96\xc9\xbd\x77\x74\xe8\x30\xec\xf1\xb8\x52\x39\x06\x9f\xc1\xbe\x4c\x57\x85\x91\xbb\xc7\x71\xc6\x82\x22\x39\x52\x57\x38\x5f\xf1\x55\x47\x90\xa8\x88\x11\x29\xc5\x0c\x6c\x52\x30\x10\xcb\x13\x3a\x1b\x71\x32\xf2\x23\x0f\x97\x68\x46\xa5\x2c\x9b\x32\x63\x48\x7f\xf6\xba\x0c\xb2\x36\x7d\x70\x73\xfd\x27\xf9\x2a\x2d\x6f\xba\xf0\xe7\x03\x9f\x6f\xd0\x7f\xe9\xdd\x63\x2d\x1c\x70\x6d\xca\xe5\x53\xbf\xee\x8c\xa7\xd1\x45\x04\x29\x4b\xc4\x09\x4b\x23\xf8\x80\x72\x65\x03\x09\x94\xee\xe0\x76\xc8\x18\x9a\x07\x54\x9a\xb1\x88\x48\x67\x74\xa8\x5b\x88\xf6\x5c\xa0\xe2\x21\xf9\x3e\x86\x9f\x5c\xba\xd5\xf1\xf2\x1e\xbb\x55\xbf\x46\xa7\x96\x8c\xf8\xb6\xe5\xa4\xad\x2f\xb2\x7f\x74\xf5\x59\xf5\x27\x97\x83\xc3\x75\xab\x61\x69\xee\xc4\x93\x0e\x84\xcb\x3c\x47\x44\x0a\xf2\x71\x8f\xb1\x70\xa4\x18\x06\xee\x01\xd7\x61\x08\x81\x92\xb9\x28\x0c\xa8\xc8\x56\xf9\xc8\x8a\x3c\x56\x80\xb6\xa6\x86\x29\x89\x41\x29\x7d\x87\x64\x5c\x9e\xf6\xc9\xf6\xab\xdd\xc7\x3d\x49\x9b\xd0\x77\x59\xf6\x68\x12\x3e\xb2\xd5\xf8\xcf\x0f\x0c\x53\xda\xcf\x52\xcf\xbe\x4e\xfe\x74\xf3\x79\x3f\xd8\x37\x32\xed\xbf\xd5\x70\xce\xdb\xd5\x5b\x7a\x8c\x9e\xdd\xac\x06\x9e\xe3\xc7\xa3\xcb\x7f\xe8\x7b\x2d\x43\x8f\xa2\xdd\x1e\x57\x49\x6e\x60\xfa\xc1\xe2\x72\x2f\xea\xf0\x83\xbf\xdb\xbf\xe1\xe7\x7b\xda\xdb\x0f\x3e\x9a\x70\xb9\xe3\xf5\x72\x0d\x33\x0e\xed\xf6\x76\xfa\xd1\x6c\x1b\xfa\xc4\x91\x5f\xca\x32\x34\xe0\x7d\x57\x88\x78\x48\x49\x48\x95\xa8\xc8\x57\x03\x8c\xc7\x28\x51\x36\x4d\x40\xca\xac\x21\x08\x4e\x14\x09\x8a\x6c\x31\x36\x6e\xca\x34\x97\xc2\x76\xc0\x21\xf7\x57\x9d\xdf\xfb\x79\x8e\xcc\x83\x0f\xfc\x38\xf9\x5d\xb1\x22\xe7\x0f\x35\xed\xb5\xbd\x4b\xb5\x9c\xa5\x68\x7d\xf6\xc4\x84\x3d\xff\xa5\x84\x9a\x37\x0f\xb6\xb8\x71\x9d\xb3\x1d\x76\xf6\xbe\xef\x1d\x3f\xbf\xe6\xc8\xa3\x6d\xe1\x92\x82\xf7\xa4\x9e\x25\xf6\xac\xa8\xc3\x1a\x19\x4a\x26\x4b\x07\x27\x37\xaa\x7f\xf6\xd2\xa5\x2f\x86\xb4\x9c\x55\xb3\xec\x2f\x35\x27\xde\x4d\x1f\x2d\xdb\x39\xe4\x52\x83\x63\x5d\x08\xbc\x7a\xef\xcd\xb7\x53\x17\xe1\x62\x0f\x79\xf8\x16\x30\x14\x55\xd0\x34\x91\x34\x42\xcd\xf2\x05\x2e\xd0\x23\x45\xd3\x15\x1a\x01\x85\x82\x94\x8d\x9c\x80\x67\x4c\x92\xe5\x70\xc2\x04\x81\x84\x69\xef\x83\x79\x56\xd7\xdb\x87\xc7\x35\x22\x4f\xee\xbe\xbb\x8d\x59\x77\x78\x7b\x95\xee\xbf\x0e\x7f\x73\xa2\xec\x88\xa2\x3b\x3b\x77\xf9\x6e\x5b\xa6\xb5\xa9\xb3\x6a\x8f\x2d\x6c\x6c\x78\x86\x68\x46\x4c\x40\x6a\x1c\xc6\x1b\x36\xa5\xe2\x90\x77\x39\x31\xc0\x34\x64\x0a\xc8\x01\x5c\xc8\xf1\xa4\xca\x62\x02\x6b\x9b\x91\x8a\x38\x45\x8b\x5d\x93\xae\x6e\x17\x69\xb0\xba\x7c\x93\x21\x1d\x26\x4d\x0a\xbc\xd3\x5b\x57\x2b\x67\xbb\xf5\xad\x50\x38\x63\xeb\x19\x53\xdb\xa7\xad\x3b\x5d\x1a\x18\xc7\x89\x7d\xc1\x46\x98\xec\x68\x00\x28\x2c\xee\x46\x3c\x0a\x8d\x50\xe6\x18\xa4\x53\x20\x08\xa3\x88\x83\xae\x4e\xd3\x40\xe5\x70\x3c\xc2\x0d\xc6\x8a\x28\x64\xa5\x00\xb8\x6e\xe9\xae\x4f\xfc\xbd\x68\xf9\xd5\x4b\x7a\xdc\xf8\xed\xc1\xa4\xcb\xdb\xbf\x6e\xb3\x73\xf5\xa0\x93\xb3\xb2\x3b\x93\xe7\xa6\x7d\xfe\xe9\x82\xf2\xc9\x20\x54\xb5\x5f\xad\xba\xaf\x1a\x37\x70\xbe\x49\x80\x7d\x7f\x79\x7b\xe8\xeb\xaa\xf6\x1b\x6d\xd9\xd5\x49\xdd\xdb\x1d\x99\xab\x09\xcc\xb2\xc1\xf1\xeb\x37\x19\x40\xb3\x71\x9e\xa2\x64\x9a\x73\x28\x2f\x88\x30\xce\xa7\x02\x44\xd1\x92\x0a\x68\xcc\x53\x70\xc0\xf9\x0c\x19\xa9\xa1\x6f\x33\x78\x40\x02\x0d\xc4\x2a\x07\xb7\xab\x5a\x70\x3e\xd8\x52\xa8\x4e\xb7\x8a\x23\x2b\xe6\x1b\xdf\xa3\x8c\x53\xe2\xf7\x85\xb3\x0b\x75\x7e\x58\x76\x72\xbf\x1c\x0b\xaa\x9d\x48\x9d\x32\x6d\xec\xfe\xbb\x09\x68\x03\x63\x00\x89\x70\x8e\xc0\xa1\x8b\x1c\x3e\xb4\x31\xfd\x5f\xb1\x2f\xe0\x5c\x9b\x27\x1d\xc7\x37\x4c\xa8\x11\x22\xe2\x4d\x03\x63\x23\xc4\xc7\xd6\x35\x9d\xd0\x54\x5b\xf6\x73\xab\x97\x87\x16\xf6\xe1\xc7\x6f\x50\x7b\x74\xdc\xd3\xac\x9e\xd7\x3b\xcd\xda\xcb\x9d\x82\xdf\x75\x7f\x57\xe1\x75\x71\x14\x1e\x23\x35\xde\x10\x2d\xc5\x8d\x70\x59\x33\x81\xc3\x44\x36\x82\x11\x0d\x35\xd9\xa1\x74\xc9\x70\x0c\xca\xc7\x00\xcf\x85\x3c\x19\x0a\xc8\xc2\x91\x01\xb4\xf7\xb3\xfe\x43\x9f\xf0\x13\xed\xee\xa5\x06\xef\xbe\x76\xb2\xd9\xe6\x6a\xcf\x72\x0e\xca\xbd\xb9\xcd\x36\x74\xea\xde\x07\xeb\x3a\xcc\xed\xf2\xf5\xee\x1b\x71\xec\x0f\x90\xbe\x44\xbb\x21\x2e\x13\xae\x8a\x03\x5c\x8d\x02\xc6\x17\x70\x59\x41\x04\x69\xfa\x9e\x16\x38\x26\x52\x44\x23\x0c\x5c\x25\xf0\x78\x43\x60\x43\x3a\xc6\x79\x7e\x67\x38\xf6\x7c\x46\xc1\xc6\xf9\xf2\x7d\x7d\x72\xed\xf7\x77\x3e\x2d\x90\x1e\xe5\x32\x8b\xb6\xf7\xfa\x0e\xdc\xf5\x63\x87\x55\x7b\xfa\xe7\x89\xdf\x89\x60\x85\x86\x20\x52\x0c\xa5\x53\xbc\x4f\x05\x18\x0c\x5c\x52\x33\x75\xca\x50\x5c\x33\x02\x82\x8a\x4b\x0e\x60\x2d\x9b\xf6\x4c\xdd\x52\x24\xc8\xd3\x0a\x9b\x02\x20\xda\xb8\x6d\x23\xa5\x4e\xde\xf4\xdb\x3a\x37\xbf\x96\xe6\xf4\xce\x22\x4f\x66\x1d\x2e\x5a\x7b\xfe\xae\xd9\x85\xc7\xa5\x7f\x34\xfb\xf4\x98\x38\x0a\x3e\xb0\x91\xee\x11\x9a\x27\xe8\x1a\xcf\x72\x0a\x1e\xe0\xb2\x82\x47\xa4\x4c\x90\x22\xef\x47\x51\x20\x6a\xae\x63\x7a\x34\xcd\xfb\x3e\xe6\xb0\x9e\xe8\x71\x52\xf4\x3e\x20\xa4\xa6\x99\xce\x5b\x1b\x32\xe6\x59\xde\xbb\xf1\xd8\xd9\xd3\xfb\xb7\x7f\xf8\x8b\xdb\xd6\xbc\x31\xa0\x41\xed\x13\xfc\xe2\xcc\xfb\xa6\xa5\x8e\x36\x15\x33\x42\x04\x26\x6e\xeb\x26\x40\x81\xa7\x84\xb8\x48\xeb\x21\x14\x21\xad\x88\x26\x47\x78\x24\x47\xb9\x14\x2b\xc9\xbc\x24\x18\xa2\xee\x7b\x72\xc4\x07\x54\x68\xe2\xef\x03\x62\x67\xbe\xae\x89\xa7\x12\x97\xf2\xbf\x15\x28\xe9\x5f\xac\xda\xf9\xdb\x6a\xcb\xbc\x55\x69\x0b\xce\x9e\xda\xa2\x2a\xd1\x60\xcd\xfa\x46\x0f\xe2\xb7\x5c\x01\x62\x82\x21\xe1\xbe\xab\xfb\x24\x15\x0a\xb4\x8f\x44\x45\x74\x25\xde\xe6\x59\x97\x04\x91\x6c\x3a\x84\xe2\xaa\x14\xd0\x08\x56\x10\x69\x9a\x65\x31\x98\x82\x58\x7a\x34\xbd\x75\x93\x8e\x7b\x4b\x0c\x5c\x73\x77\xe8\x9c\x8c\xbf\x6c\x3c\xf6\xac\xe3\x0e\xa3\x62\x7f\x2f\xc3\x4b\xbb\xc4\xeb\xc5\x93\xb3\xcd\x48\xfe\x74\x9e\x84\x9e\xe9\x96\xde\xba\x7f\x2b\xef\xd9\xc6\xfc\x8e\xb7\xe1\x87\x67\xd3\xdd\x59\x7e\xb2\xe8\xc9\x65\x89\xfa\x67\xc7\x2f\x82\xae\xe6\x7f\x49\x73\x3a\x4f\xb6\x76\xcf\x3a\xa7\xb1\x59\xd1\xca\xf2\xeb\xb8\x6b\x5d\x9b\xb7\x5c\x96\xfe\xd0\x99\x36\xcf\x7b\x34\x23\x0e\x7b\xa3\xfb\x8d\x4d\x76\x1a\x18\x15\xa7\x0e\xed\xb3\x09\x7b\xf0\x66\x71\xd6\x0a\xe3\xde\xec\xf8\x4c\xf1\xd7\x1c\x9a\xf2\xfb\xba\xb3\xaf\x5f\x36\x62\xe4\x22\xfb\x2e\xc7\x0f\x9a\xa1\x63\x03\xdb\x90\x29\x13\x3a\xb6\x84\xa1\xd0\xe0\x5d\xd1\x22\x49\x1a\xa7\x1d\x93\x66\x84\xd0\x30\xa9\xc0\xc1\x51\x64\xaa\xa1\xe7\x07\x2e\x0b\x65\xf1\x7d\x68\x6e\xac\x51\x62\xfe\x95\x79\x7a\xcb\xe5\x15\x8e\x15\x5b\x77\x6e\xd5\x93\x1a\x05\x07\x8f\x80\xee\x05\xb1\x61\xc7\x09\xeb\xde\x54\x5a\xd0\x3c\x7e\x37\x3c\x39\xa4\x59\xe4\x8a\x81\x24\xc9\xa2\x42\x19\xba\xa9\x60\xa6\x84\x07\xb6\x29\x89\x51\x20\x11\x18\x07\xf8\x80\xa5\x2c\xd9\xf2\x02\x4c\xc7\x48\x93\x53\x98\xf7\x48\x37\xff\xd4\xd5\x49\x4a\x2c\x90\x90\x2e\x5d\x72\xd2\x4d\xce\xc4\x52\x43\x47\xed\x5e\x70\xf5\x7c\xab\x12\x15\x1e\x55\xea\xb7\xb2\xfb\xec\x0e\xbd\x1b\xae\x3d\xb7\xf4\x50\xd3\x52\x05\x7c\x73\xd6\x8f\xf1\x8b\xc6\x12\x1f\xe0\x91\x46\xc9\xa2\x2f\x90\xae\x6a\x08\xd0\x74\x69\x96\x63\x4c\x1a\x19\x3e\x4f\x86\x8a\x04\x74\xd2\xb7\x0c\x95\x72\x19\xcf\x76\x22\x4a\x65\x52\xd0\x09\xc8\xaa\x4c\xea\x38\x6d\xc5\xfa\xfa\xbb\x97\x8f\xd7\x4b\x4e\x68\xbb\xec\xec\xc3\xde\xfe\xb7\x13\xc5\xed\xcb\x6b\x0d\x61\x7e\xdd\xbb\x34\x75\xf3\x46\xb1\xed\x9e\x3d\xcb\x72\x68\x51\x60\x71\x42\x52\x43\xdf\xc7\x64\xc1\x21\x64\x15\x71\x0e\xaf\x38\x34\xb4\x0d\x18\x06\x1c\xcd\xcb\x14\x65\x59\x8a\x13\x84\xce\x5f\x65\xee\xf7\xdb\xf8\x63\xfa\xde\x31\xee\x3c\x1f\x39\xb0\xda\xd1\xbe\x70\xf5\x01\x73\xa6\x41\xea\xe5\x0b\x2f\xad\x05\x56\x56\x6c\xd3\x36\x7d\xb7\xb3\x7e\x1c\xd5\x18\x14\xe4\x84\x98\x06\x2c\x85\xc4\x61\xc4\x50\x3c\x64\x09\x82\x76\x58\xcc\x8f\x48\xdd\xf7\x3d\x48\x20\x8a\xd2\x28\x9f\xd5\x6c\x3c\x0a\x01\x30\xff\xd2\x74\x7c\x7f\x97\xe9\xac\x1f\x3f\x86\x47\xc6\x54\xef\xa5\x1d\xca\x55\xe0\xbb\xb1\xbf\x66\x69\x18\x1d\xf9\xb6\xc4\xa7\x4b\x0b\xec\x1f\xf9\x75\xfa\xf3\x07\xe3\x67\xfc\x09\x25\x52\x30\x05\x4b\xc7\x45\x9f\xf3\x35\xda\xb7\x2d\x43\x0e\x6c\x85\xf4\x0c\x9d\x63\x23\x1d\x00\xc7\x91\x5c\x0e\x28\xae\x2b\xda\xac\x03\x0d\x0e\xa1\xbf\x73\xe9\x7f\x0b\x91\xfc\x53\x8b\x32\x29\x31\x4d\xda\x9d\x39\x93\x0b\x91\x3c\xfd\x68\xf9\x4f\x13\x87\x4d\x3f\x9c\x50\x86\x3c\x75\xe4\x69\xf5\xa2\x8f\xe9\xa1\x3e\xeb\xec\xff\xe0\xfe\x9f\x9b\xf3\x0e\x9b\x78\x3d\x75\xe2\x7d\xb1\xf3\x26\x1f\xa9\x36\xa6\x18\x1e\xa3\x19\x7c\x14\x68\xa6\xe0\xea\x9a\x49\x39\x1c\x4b\x01\x99\x86\xaa\xad\x02\xcb\x21\x02\x2c\x12\x4c\x44\x3b\x0e\x09\xff\x9a\x89\x7d\xbf\x7c\xd3\x7d\x5c\xdb\xe0\x5e\xba\x2d\xc3\x9f\x63\x17\x4f\x3e\xc8\x72\x83\xfa\xea\xe9\xee\xfd\x41\xbd\xcc\x05\x66\xf4\xde\xfa\xe5\x95\x5d\xcf\x53\x67\x49\x19\x13\x47\x3a\xab\xb9\x9c\xe2\x53\x04\x49\x38\x18\xae\xf0\x3a\x92\x08\x8d\xd5\x0c\xa8\x33\x14\xed\x5a\xb2\x28\xe3\xb8\xc3\x07\x1c\x83\x6b\x14\x0b\xdc\xc0\xb1\xcd\xd8\x38\xba\xd8\x74\xe9\xf8\xe6\xe5\x32\x94\x9b\xd3\xbd\x60\x1e\xac\xc1\xc6\x9c\xdf\xf6\xc9\xbc\x66\xc7\xcb\xb9\x85\x7f\x2c\x95\x53\x7f\x59\x70\x5c\x1c\x65\xec\x7d\xc6\xf5\x65\x52\x34\x28\xdd\x06\xb8\x01\x05\xda\x92\x6d\x4b\xd6\x38\xc2\xe0\x71\x17\xd0\x8c\xab\x10\x91\x86\x38\x09\x0f\x05\x17\x7a\x90\xf6\x4d\x39\xf6\x92\xef\xed\xb8\xd0\x58\x03\x03\xa7\xb4\x3d\xd5\xa5\xdc\xaf\x93\xcb\x5c\x5d\xfb\x64\xf0\x4f\xdf\xd7\x1f\x5a\xea\x22\x71\x7c\x10\x99\x14\x4e\x8b\x63\xc5\xc9\x93\xf4\x50\xb3\x68\xc2\x11\x15\x26\x40\x5a\x40\x48\x80\x77\x43\x8c\x31\x74\x0a\xd0\x8a\xa3\x86\x3e\x2d\x03\x9e\x0f\x0d\x17\x68\x98\xcd\xc9\xb6\x13\x7b\xc9\xdd\x72\xfd\xd4\xfa\x66\xd0\x7a\x70\x95\xce\x3f\x32\x1d\xd3\xbf\x3d\x98\xf1\xe9\xb0\x95\x89\x2d\x36\x8d\x1e\x97\xfe\x59\xd6\xca\x9d\x5f\x65\x8b\x23\x8b\x25\xf4\x0c\x2c\xb0\x28\x55\x25\x3d\x5f\x0d\xa0\xc0\xd2\x36\xef\x3a\x86\x6a\xaa\x8e\x08\x1d\x2d\xe2\x70\x29\x94\x6d\x8f\xd4\x03\x5e\x42\x9a\x15\xa6\x34\x27\x32\x20\x5d\xc2\x9d\x25\x3f\x2f\x5b\x5f\xff\xb9\xde\xee\xc3\x7b\x8b\x98\x7a\xbd\x5f\xdc\xd8\xff\xb4\x41\x83\x31\x33\x16\x6d\x08\x3a\xf1\xa9\x9b\x9d\x8b\xb9\xcb\xb4\x4a\xea\x01\x8b\x43\x81\x60\x3d\x56\xf7\x21\x45\x98\x1a\x01\x30\x8a\x33\x71\x9a\xe4\x68\xc7\x76\x04\xc5\xd0\x5c\x29\xe0\x18\x0a\x78\x16\xe2\xe5\xbf\x39\x6f\xff\x76\x16\xfe\xa7\x3e\x65\x52\x62\xce\xe2\xc5\x13\x93\xb3\xfa\x6e\x3b\xf3\x1b\x6d\x2b\x34\xed\xc8\x9b\x55\x0d\x77\x96\x3f\x55\x71\xc5\x2c\x76\xe0\xf9\x8c\xdd\x06\xd4\xaa\x3e\xf0\xf7\xc2\xf9\x84\x6a\xf1\x13\x6f\x80\x3e\xa1\xd8\x86\xcb\x79\x24\x20\x0d\x4b\x24\x65\xc9\x0c\x22\x86\x02\x9a\xcf\x02\xd9\x85\x82\x8a\x51\x3e\xee\x5b\x0c\x22\x75\x92\x70\x0c\xd6\x00\x4a\x0a\x07\x55\xa5\xe6\xf9\x5b\x95\x99\xb9\x5e\xad\xb1\xaf\xa2\x4a\x6d\x28\x50\xb0\xef\xe3\xa9\x21\xaa\xf5\xf6\xc1\xcd\x67\x6f\x3b\x7f\x39\x7b\x68\xb5\x38\x72\x70\x69\x92\x77\x5d\x97\x34\x28\x5b\x36\x71\x97\xc7\x65\xd2\x21\x19\xd5\xc2\x1d\x06\x00\xc5\x13\x34\xcc\x80\x8e\x62\xda\x16\x4b\xf8\x5e\xa8\x70\xa1\x95\x42\x05\x65\x40\x95\x9e\xf7\x9b\x96\x2e\x28\xcc\x6d\x8c\x86\x25\xe4\x9a\x7d\x78\xc9\xf3\x21\x19\xea\x65\x7a\xb3\xbf\xe3\x82\x3d\xe6\xf2\xf5\xe3\x52\x57\x1f\x8e\xed\xda\x0f\x45\xd7\xe6\x7c\x2b\x24\x28\xe8\x60\x18\x89\x69\x8a\x27\x78\x88\x35\x0c\x9d\xd6\x74\xc6\xa5\x71\x17\x70\xc8\x97\x6c\x16\x62\x64\x60\xda\xf4\x5f\xf3\xd5\xef\xef\xb2\x79\x6b\x5e\x7a\xc5\x1b\x7f\xa0\xb5\x3d\x6f\xc0\xf5\xe5\x05\xd1\x37\x45\xda\x7e\x76\xd7\x4b\x2c\xb2\xf6\x62\xf7\xdf\x13\x96\xa0\x6b\x71\xd4\x13\xb6\x69\x2d\xd2\x48\x57\xc3\x09\x45\xe5\x7d\x9e\xa6\x3d\x16\x43\x12\xa9\xfc\x7f\xac\x7d\x67\xb8\x15\x45\xf2\x3e\x51\xa2\x70\x09\x02\x82\xe4\x8c\x80\x30\xa1\x87\x24\x20\x5c\xb2\x24\x45\xc9\x61\x66\x7a\x72\xea\xe9\xc9\x43\xbe\xe4\xa0\x64\x25\x07\x01\xc9\x41\x94\xa0\x88\x20\x19\x96\xa0\x92\x05\x41\x82\x20\x19\x04\x44\xf2\xff\xf1\xbf\xbf\x5d\x97\xe5\xdc\xc7\x7d\xee\x73\xbe\x9f\x0f\x75\x7a\xaa\xab\xba\xaa\xde\x7a\x5f\x1b\x84\x06\xd2\x39\xe4\x3a\x0c\xa4\x7c\x59\xb6\x48\x4f\x34\x35\x10\xb8\xe9\x2c\xde\xff\xa3\xc6\xcb\x0d\xeb\xa8\xc3\x9e\xfc\xf2\xde\x91\xde\xe5\xbd\x56\xb5\xea\x0f\xcc\x35\xec\xa0\xf3\x4a\xe7\x4a\x53\xeb\xe3\x4a\x67\x46\x54\x4e\x5e\x18\x57\x14\x42\xb0\x62\x4b\xd5\x4d\x4e\xc0\x2c\x61\x72\x32\x17\x99\xa4\x26\xda\x2a\x4d\xf9\xb2\x86\x48\x4c\x13\x86\xa8\x93\xb6\x87\x4d\x9a\x30\x5c\x3f\x72\x5e\xd8\x62\xff\xbb\x19\x6b\x5a\xd3\x2c\x05\xff\x8b\xe3\x79\x78\x8f\x21\x33\xfd\xdc\x0b\xfe\x91\x8d\xaa\xbb\xbf\xf5\xc5\x7b\x1b\x7b\xcc\x28\x7d\xf8\xdd\x9f\x0e\x37\xff\x10\xae\x59\x05\xa7\x9d\x4c\xe2\xe4\x1b\x69\xbe\x64\xcb\x9a\x01\x6d\xc2\x34\x48\xdf\xf6\x2c\x82\xd3\x09\x48\x79\x0c\x47\xf2\xb4\x4d\x23\x82\xb7\x1d\x53\x22\x64\xc2\x88\x39\x0d\xca\x1e\xa7\x27\xfe\x26\x1d\x8a\x4c\x6d\xe2\xbd\xf3\xf2\x83\x6d\x29\xa5\x96\xe5\x2b\xdb\x33\x47\xb3\xca\xb7\x1f\x8f\x9e\xdd\xb2\x58\xd9\x23\xa3\x7a\x4c\xfb\xbc\x49\x12\xe7\x4f\x24\x94\x29\xdf\x27\x34\xcc\xc9\x1c\x29\x02\x59\xe5\x19\x07\xf2\x98\xb1\x04\x45\x22\xa8\x48\x8e\xf5\x98\xa6\x34\x5d\xe7\x10\x56\xfe\xac\x9d\x15\x3e\x9d\xf9\x53\xbe\x62\x9d\xc3\xdc\x85\x9f\xb5\xaa\x7b\x2e\x5f\xc9\x6d\x3b\xfb\x15\xca\xdd\xb7\xc8\xd6\x21\x0d\x56\xfe\xe3\xb5\xa2\xb0\x7c\x1f\xb0\x2c\x63\xbd\xaa\xc4\x02\xc7\x84\x21\xda\x04\x8f\x94\x98\x32\xcd\x28\x50\x78\x56\x66\x28\x24\x8a\x66\x48\x2a\x62\x00\xd8\xd8\x62\xe2\x18\x01\xe4\x30\x10\x47\xbc\xec\x42\x2e\x1d\xa0\xf3\xd9\xaa\x5b\x46\x5e\xca\x92\xa7\xef\x1e\xef\x71\xa7\x23\x8b\x2f\x35\x7d\x30\x7d\x53\xe3\x22\x1b\x76\xb5\x12\x0e\x35\x9e\x47\x67\x1d\xf7\x53\xf2\x4e\x39\x94\x28\x27\x8a\x20\xa0\x4c\x4b\x42\x01\xe0\x65\x51\xb3\x54\x44\x19\x8c\x6b\x05\x04\xa1\x30\x9e\x11\xe8\xac\xec\x18\xd0\xc3\x52\x2c\x41\x5a\xc6\xd2\xbf\x4f\xf9\x5e\xf6\xff\x0d\x2f\x90\x96\xfa\x6d\xa6\x4c\x99\x86\x3c\xf7\x0f\x57\x1f\x1a\xf9\xf0\xc7\xe3\x0d\xce\x5a\x39\x26\xde\x38\x19\xe5\x69\xbc\xee\xa7\x0d\x27\xdf\xad\xbc\x5e\xcd\x76\xf1\x72\x8d\x2f\x3b\xa1\x2f\x92\x48\xdf\x0e\x42\xc9\x23\x08\x46\x51\x08\x49\xe6\x54\x51\x64\x1d\x28\x02\xce\x70\x68\x9d\x66\x0c\x03\x3a\x5e\xac\x3a\xc0\xf1\x15\x52\x00\x31\xc1\x84\x12\x97\xce\xe2\x45\xe7\x96\xeb\x16\xd4\x1d\xb8\xeb\xf0\x8a\x4f\xe7\x1f\xfb\xb6\xe3\xa9\x97\xb2\xb9\x63\xfd\xa6\xb7\x1f\x3b\xfd\x6b\xad\xbc\xd9\xfd\x8b\xd2\xc9\x83\xec\x71\x9e\x41\xc4\x02\x41\x63\xd3\x73\x28\x9b\xe5\x35\x68\x50\x40\xf5\x00\xa5\x4a\x8e\x18\x84\x2a\x2b\xb0\x9a\x21\x18\x8a\x65\x52\x1a\xaf\x89\x16\x6b\xf3\x72\x62\xc8\xde\xa0\x12\x72\xce\x4c\x8d\x4a\x7d\xd5\xe7\xc6\xc2\x87\x3d\xeb\xb7\xca\xb6\x26\x53\xdd\x7c\x5d\x8a\xed\x1c\x5a\xa7\x4b\x11\xf9\x5e\xd6\x59\x19\xa3\x37\x4f\xe8\x47\xbc\x8d\x6c\x83\x0c\x43\x82\x55\x75\x9f\x60\x31\x14\x0d\x3a\x88\x64\x99\xa2\x6d\x9a\x70\x18\x51\xa6\x25\xc7\x8d\x35\xdd\xa1\x43\x12\x59\xbe\x89\x13\x49\x91\x5f\x1f\xfe\x34\xd7\x4b\xca\x6f\x73\xfb\x1e\xac\x39\xe1\x87\x69\xcb\xf6\x35\x5b\xd8\x1e\x34\x1d\x3a\x28\xff\x08\x34\x9b\x5e\x56\xbe\x7d\x12\xb7\xba\xfc\x40\xf6\x4c\x41\xd1\x80\x65\x02\x0b\x3b\x50\x43\xbc\xeb\xd1\x1e\x62\x05\xc9\xe7\x58\xc1\x8d\x24\x9a\x89\x22\xc7\x89\x02\x64\xa9\x04\x34\x7c\xe5\xaf\xc7\xcb\xbf\x38\xfd\xff\x6e\x24\x98\xd6\xa4\xc9\x96\xe7\xe3\x7d\xe3\x31\x4b\x9b\x55\x58\x7f\xae\xf0\xfc\x9f\xd6\x73\xab\x8b\x5c\xde\xd0\xe1\xe2\x25\x85\x18\x5c\xa1\xea\xa9\x55\xdf\xe5\x2d\xb3\x42\xb0\x93\xc8\x5a\xe2\x9a\x2e\xe5\x10\xc0\x8e\xac\xc8\xe3\x23\xd3\x66\x69\x93\x05\x6e\xec\x21\x2a\x90\x34\x17\x8a\x91\xae\xf2\x96\xe5\x20\x9f\x93\x78\xd7\xa3\x38\x3d\x9d\x65\xf0\x7e\xa5\xe6\x54\x3b\x90\xbd\x90\xfc\x4b\xc1\xc5\x9f\xfa\xe4\x71\xba\x75\xfd\xba\xb7\x8a\x5e\x28\xf0\x69\xf7\x9d\xd3\x2a\xe5\xc9\xfb\x51\xc6\x82\x67\x62\x78\x84\x2e\x13\x81\x64\x0a\x81\x8c\x7c\x37\x16\x22\x8a\x75\xa9\x88\xb2\x65\xc1\x16\x75\xcc\x28\x91\x4f\x00\x55\x63\x78\x1f\x18\x14\x23\x00\x24\xd2\x44\x3a\x52\xa3\xdf\x15\x6e\xc9\xe6\x3c\x9b\xff\xe7\xe1\xd3\xbb\x8c\x2e\xbb\xf7\xd6\x83\x0f\x8e\xbc\x93\xa3\xe6\x28\xfa\xbb\xdb\x6b\x76\x1c\x07\x37\xad\x8c\x35\x4b\x13\x3a\x3d\x04\xb1\xac\x3b\x11\x89\xa1\x2b\x9a\x94\x06\x90\x10\xd2\x8a\x28\xf3\x26\x2f\xd1\x02\x43\x6a\xc0\x0f\x55\xde\x62\x80\xa5\x18\x22\xed\x45\x0e\x4d\xa0\xc4\x29\xea\xcb\xda\x75\x0c\x6f\x43\xb5\xc2\x23\x0b\x17\xa1\xe9\x9d\xcb\x8b\xbf\x76\x0d\x8d\xf8\xfa\x5a\xce\x52\x3e\x75\x23\xcb\xa6\x35\xf7\x92\xd7\x8e\x66\x21\x32\x2c\x57\x0a\x44\x59\xf6\x2c\x8a\xb4\x28\x8a\x8c\x23\xe8\x84\x2c\xe1\x92\x56\x28\xfb\x86\xc4\xc9\x92\x65\x6b\xb2\x2f\x04\x3c\x36\x3c\x2a\xc6\x7f\x2d\x48\x7d\x9b\xe7\x7f\x9b\x6e\xa7\xa5\x56\x78\x69\x4b\xce\xe7\x09\x12\xfb\x6e\xdf\x70\xad\xe8\xbd\x49\xfd\xd7\xad\x0c\x1e\xf6\xff\xa9\x2a\x73\xb2\xfd\x8f\xc1\x81\x9d\x87\x1b\xe5\xac\x77\xbe\xbb\x73\x27\x89\x62\x91\x1c\xe3\xaa\x00\xcb\x12\x8b\x35\x57\xa6\x55\x86\x56\x74\x43\xd4\x64\xcf\x55\x74\x5f\x73\x54\xc3\x08\x6d\x88\x42\x40\xca\x20\xb0\x29\x8e\x33\x00\x26\xd2\xd9\x7e\x9c\x57\x62\xd3\xae\x4d\x9d\xbc\xd5\x45\x7f\xdf\x36\x73\xd9\xa0\x1b\x1f\xd1\xd3\xee\xce\xa9\x85\x6b\x8f\x2a\xbc\xa7\xd5\xb9\x21\x7e\x0a\x91\x3c\xd7\x47\x21\x29\x71\x90\x0e\x34\x91\x64\x68\x88\x08\x8a\xa6\x99\x38\x90\x6c\x18\x05\x54\xe8\xfa\x02\x74\x15\x10\xb8\xb4\x62\x0b\x9c\x4d\x2b\x8c\xe2\x69\xe9\x6c\x83\x7f\xc3\x36\x2a\xbb\xaa\xb0\x3f\x9b\x7e\xbf\x47\xae\x7d\x6f\xb0\xeb\x70\x73\x50\x62\x71\x1a\x7a\xb6\xe8\x8b\x1e\xcd\x73\x74\xb2\x84\xe4\x99\x1c\x44\x21\x10\x4c\x2a\xa2\x18\x96\x77\x18\xd1\x30\x04\x99\x8f\xa1\x25\x63\x8e\xa1\x35\x83\x95\xa1\x43\x31\xd8\x12\x23\x5a\x0c\x34\x5d\xc1\x28\x50\x13\xa0\xdb\xb6\x36\xfc\x70\x7a\xeb\x39\x1f\xb6\x65\xf6\x13\xb9\x26\xf7\x7c\x6d\x63\xfb\x67\x39\xa8\xc5\x4d\xc7\x94\x2c\xd1\xaf\xe9\xb4\xe1\xbf\x33\x5d\x93\xc9\x71\x2b\x45\x9e\x6a\x04\x42\x14\xf3\xa1\xc1\x09\x3c\x61\x29\x86\x2f\xe8\x96\x2e\xd3\x5a\x00\xd5\xd0\x63\x11\x85\xb1\x6c\xda\xae\x19\xe8\x90\x22\x55\x98\x38\xb8\x0c\x5f\xee\x5b\x0f\xd6\xe2\x21\x13\x6e\x55\x1c\xbe\xa5\xdd\x17\xc7\xfa\xdd\xd8\x16\xfe\x6e\x56\xfb\x06\xfe\xfa\xd1\xf2\x31\x7b\x67\x64\xac\xab\x9a\xf8\xc9\xae\xaa\x8a\xaa\x72\x04\xe7\x2a\x82\x4e\x79\x3e\x2d\x71\x50\x66\x68\x47\x8b\x03\xde\x27\x02\x59\xd6\x0d\x11\x03\x86\x33\x45\x24\x50\x32\x90\x6d\x2d\x1d\x0a\x92\xed\x8f\x33\xe1\x4b\x4b\xb8\x29\x6f\x95\xfa\x89\x19\x1e\x5c\xaf\xf2\x6e\xeb\x9b\xa5\x56\x6f\x7b\x04\x86\x1d\x1e\x93\x7f\xab\xd4\xad\x6d\xf2\x4c\xe6\x68\xac\xdb\x1c\x16\x0c\xda\xc1\x2e\x15\x71\x1a\xf4\x2c\x41\xa6\x6d\x8a\x92\x62\x3e\x08\xf9\xd8\x93\x35\x18\x01\x40\x7a\x32\xe2\x7d\x48\x31\x38\x9d\x3e\x4d\xb9\xae\x3e\x53\xe7\xda\xba\xfa\x47\x2f\x4d\x9e\x7c\xb0\xea\xb5\x0f\x6f\x37\xf9\x6e\xee\xa4\x6c\x8b\x7f\x3a\x54\xb1\xd2\x4f\x9b\x77\x8d\x9e\x99\x44\x84\x10\xb6\x54\x56\x46\x02\xc9\x2a\xa1\x2c\x3b\x8a\xc2\x78\x16\x07\x95\x48\x66\x70\xc4\x08\x8a\xc3\x0a\xa1\x20\x6a\x96\x42\x23\x2f\x14\x38\xe4\x21\x2d\x9d\xac\xe3\x7c\x37\x61\x4a\x89\x47\x85\xd3\xa6\x65\xf9\xb5\xf3\x16\x78\xce\x58\xb0\xe4\x37\xa6\xea\xd5\x6e\x1f\xb4\x2f\xf1\x63\x97\xb7\xb3\x3d\xc9\x98\x2f\x27\x3c\x65\x83\x83\x74\x64\x98\xae\x2a\xfa\xa6\x83\x62\x20\x43\x47\x57\x59\xe0\xf0\xac\x4c\xbb\x3c\xe0\x08\xc6\xb7\x08\xc3\x41\x0c\x69\x32\x32\x25\x69\x26\xff\x17\x2c\xf8\x5f\xad\xa5\xbf\xc3\xef\xa4\xa5\xa6\x64\x6b\x5c\xf0\xf9\xd6\x92\x5e\x6f\xfe\x77\x8f\x2a\x3c\xe8\x72\x66\x66\x5f\xed\xc1\xb3\x07\xb5\x17\xa5\xce\x39\x9e\x25\x65\xd2\x84\x2d\x03\xed\x1e\x1b\xa6\xb6\xe8\x90\xbc\x10\x6e\x18\x0a\xc3\x84\xaa\x40\x59\x2a\x09\x54\x00\xb0\xaa\x08\xd0\xd4\x04\x4e\x73\x6d\xc1\xc1\x8a\x6c\xd9\x01\x56\x42\x55\x74\x05\x56\x08\x22\x5d\x74\xd3\xa9\xa3\x7c\xfe\x60\x6b\xe1\xd7\x57\x77\x71\x9b\x67\x9e\xb9\x9c\x3a\x70\xed\x85\x79\x47\xf3\x95\xdd\x5a\x31\xff\xed\xc9\xa3\xd3\xe8\x94\xd3\xc9\x13\x51\x62\xa5\x50\x12\x04\x8b\x92\x03\x1e\x31\x4c\x68\x6b\x42\x84\x6d\x48\xc5\xc8\x15\x01\x14\x02\xca\xb7\x3c\x39\xf6\x03\xc7\xf4\x1d\x8e\x73\xb0\x28\x2b\x6c\x3a\xb4\x29\x99\x82\xfd\x6b\x2a\x64\xe9\x7c\xea\xcd\x3c\x23\xbd\x7b\xd7\xbe\x14\x95\x37\xd7\x16\xfe\xfc\x2e\x7d\xa2\xfa\xf4\xcf\x4b\x1e\x4e\xdb\x30\x2f\x79\x55\x46\x48\x30\x20\x90\x6d\x49\xf5\x03\x56\x15\x58\xe0\x98\x0c\x11\x22\x91\xf0\x10\xd0\x4c\x2d\x94\x49\x44\x91\x06\x72\xfc\xd0\x44\xaa\xe2\xb1\xd0\x82\x52\x62\x93\x3f\x1c\xf1\xa1\xd7\x85\x51\x1a\x6e\xe9\xb1\xf9\xc4\xa1\x85\xe3\x07\x8d\xca\xb2\x93\xdb\x3f\xbb\xf6\x92\xfa\x13\xbe\xaa\xdd\xb3\xdd\xf4\x65\x49\xc4\xa4\xb2\xb1\xcb\x89\xa4\x66\xf0\x24\xeb\x29\xa4\x28\xb8\x5c\x40\xba\xb6\xec\x45\xa2\xc7\x85\xb2\x0d\x74\x4e\x36\x6d\x41\xf2\x81\x04\x23\x8d\xe6\x4d\x2d\x9d\x07\x57\x93\x1e\xea\x48\x73\x51\x95\x2f\x07\x2f\xee\x57\x9f\xab\xad\x74\xb9\x3b\xdd\xba\x3f\xf6\xb7\xa6\xca\xcb\x3f\xcc\x84\x07\x2f\xdc\xcc\x98\xb6\x7b\xe2\x00\xe3\xb0\x34\x00\x82\x6a\x39\xc8\xd6\xb1\xe4\x7a\xc8\xf6\x6c\x8b\x26\x61\xc4\x22\x9d\x02\x62\x20\x12\xa1\x2b\x6b\x01\x6f\x01\x8b\x8f\x5c\x2a\xfa\x0f\x08\xd4\xbf\x5a\x4b\x7f\x87\x9f\x4b\x6b\x5a\x36\xd7\x7f\x51\x65\x8d\xaa\xdb\x77\xf8\x77\x55\x67\xa2\xc5\x5d\x18\xe7\xdc\xaf\xb9\x1e\x77\x6a\x9b\x6d\xcf\x65\x5f\x5b\x39\xea\xd1\x92\xea\x61\xea\xa2\xc9\x49\xdc\x5f\x87\x28\x0e\xf8\xc0\xb2\x05\xdf\x86\x9e\x6e\x5a\x01\x34\x63\xc8\xd0\xb2\xcb\xbb\x26\x1b\x51\xba\x87\x6d\x5d\x01\x9a\x13\x20\x99\x8e\xdd\x50\x89\x50\x3a\xa9\xb5\x4f\xf3\xe3\x65\x4b\x4d\xee\x52\xfa\x42\xbb\xa7\xc4\x97\xef\x57\x5b\xd9\xd5\x28\xd7\x6b\x43\xe1\xf3\x23\x66\x7c\x66\x3c\xcb\x7d\x24\x79\xd5\x11\x6b\x30\x0c\x83\x20\x1d\x40\x81\xf0\xdc\x00\x22\x4e\x66\x20\xc1\x30\x9e\x0b\x3c\x9f\x40\x9e\xcb\xf9\x82\x4a\x40\x01\x13\x22\xa7\x92\x8c\x69\xf2\x2a\x91\x38\xbe\xe4\x7f\x27\xb8\xfc\xe3\xe6\xf5\x4f\x3e\xcf\x96\xf6\xf6\x84\x23\x1f\x65\xfb\xb9\x85\x79\x73\xfc\xce\x12\xcf\x7e\xd5\xb6\xd6\xde\x51\xf9\x4e\xf2\xa6\x36\x9c\x12\x79\xd8\x94\x0c\xd2\xb0\x75\x5d\x8e\x3c\x5d\x55\x34\x11\x51\x8c\xa6\x50\x34\xd4\x6c\xc5\x47\x0c\x85\x1c\x6c\x60\x41\xf4\x90\x4b\x04\x21\x83\xd3\xe1\x62\xe8\xdd\xbd\x45\xf3\xbc\xf5\xaa\x95\xae\x93\x39\xe7\xab\x46\xc5\xa6\x17\xda\x64\xdd\x91\x72\x78\xf0\xf5\x0e\x39\xeb\xb4\xb9\x51\x4a\xe4\x7b\x24\xef\x94\x3d\x44\xd8\x8a\x07\x63\x20\x11\x84\x0a\x31\x6b\xfa\x01\xe9\xc7\x8e\x42\x4a\x31\x30\x11\x8c\x75\xc9\x37\x0c\x4a\xd0\x80\x16\x8a\x92\x6a\xf8\x2e\x94\x5f\x68\xaa\xfe\x1d\xec\x2f\xad\x69\xb6\x0e\xff\xa5\x1e\x16\xbe\xdf\xed\xa1\xd1\x2c\xc7\xe5\x01\x5e\xda\x87\x5b\xc7\x96\x57\x53\x0e\xd5\xdc\x51\x77\xdc\xf7\x23\x3b\xae\x3d\x5c\xca\x78\xe9\x50\xc6\x78\x36\x13\x06\x50\x5d\xf1\x5d\x5e\xf5\x74\x10\xb1\xbe\x14\xd3\x36\x56\x6d\xd5\xf0\x74\x3d\xb4\x78\xd3\x8e\x21\xe7\x42\x80\x05\x4b\xf3\x99\x88\x0b\x39\x53\x8b\xad\xf4\xa8\xb2\x84\xaf\x37\xed\x2e\xd1\xaf\xe0\xc4\x8d\x5b\x33\x2f\xce\xc7\x4c\x7e\x9a\x5a\xe6\x76\xea\xd5\x0a\x37\x77\x3e\x0d\xf8\x32\xe5\x76\x16\xcb\x98\x58\x6a\xe2\xcc\x6a\xd2\x66\xe0\x8a\xd8\x73\xc3\xd0\x15\x4c\xca\x56\xbc\x08\x06\x2e\xc1\x19\x16\xd4\x4d\x8c\x75\x5b\x52\x19\x49\x03\x28\x86\xa2\x14\xfb\x64\x6c\x83\xc4\x6e\x14\xcc\xe9\xd4\x6c\x40\xad\xce\x7b\x57\x4f\x9f\x7f\x6c\x4e\x41\xf0\x7a\xff\xb4\xa1\x97\xcb\xf4\x9d\x53\xe3\x4a\xeb\x93\x75\xaf\x5d\x29\x93\x31\x37\x4a\x8c\xf7\xb2\x04\xdd\xe4\x74\x51\x21\x03\xcd\x89\x3c\xd2\x11\x0c\x46\x88\xa2\x88\xa6\x61\x18\xf9\x54\xa4\x41\x29\x04\x1e\x81\x20\x10\x6d\x06\xe9\x3a\xd2\xb5\xc4\xa7\xfc\xc6\xc2\xa6\x2f\x87\xb7\x2b\x4e\x69\xd4\x7d\x68\x93\x97\x16\xb4\x7d\xf0\x81\x52\xea\xa5\xb2\x67\x8e\x16\xbf\x3e\x60\xc0\xe9\x69\x4b\xef\x26\x0f\x67\xcd\x52\x16\xe7\x49\xa4\x2b\xc4\x16\x72\x11\x29\xc6\xa4\xa6\x8b\x9a\xc5\xc6\xc8\xe6\x05\x4f\x37\x3c\x8d\xff\xb3\xfc\x56\x75\x5e\x08\x34\x9a\x12\xc8\x58\xf9\x4b\x97\xf3\x5f\x9a\x44\x7f\x07\x9f\x4a\x6b\x9a\x35\x53\xeb\xe7\x1f\x68\x54\xff\xf3\xdf\x0f\xd3\x6b\x2c\x79\x69\xcb\xb0\x37\xdf\x3a\x5c\xa4\xdb\x1b\x07\x3e\x2e\xf2\x4b\xfd\x8e\x9b\xe4\x9f\x7b\x2c\x3f\x9b\x63\x6b\x12\x57\xb1\x02\x57\xe3\x49\x57\xc5\x88\xf3\x74\x15\x31\x0c\xcb\x68\xa1\x65\x69\x16\xc3\x31\xb2\xa6\x9b\x40\x30\x25\x37\xe0\x4d\x82\x0c\x5c\xc0\x6a\xa6\xc0\x12\xe9\xb0\xa0\x3f\xbb\xf4\x47\xb7\x0d\xa7\xf3\xcd\xfb\x28\x47\x81\x6d\x6f\x7d\x39\xbe\xd0\x9c\x09\xa7\x66\x16\xd8\xbc\x31\x35\x4b\x3f\x29\x5e\xb5\x65\xf3\x82\xe4\xe5\x61\xc1\x96\x45\x5f\xe7\x21\x11\x30\x36\xa6\x23\x5d\x02\x41\x24\x8a\x02\x67\xc8\xd0\x25\x58\x5b\x21\x45\xce\x50\x38\x16\x18\x16\x27\x23\x17\x63\x02\xa7\x23\x19\x59\x39\x5c\x98\x77\x4d\xf7\xad\xab\xe7\xd4\xad\x9d\x15\x57\xfb\xb1\xe7\xa2\x9a\x57\x6b\x56\xdc\x34\x7b\xe9\x91\x35\xc5\xf3\xdd\x1b\x64\xf2\x49\x04\x67\xba\x3a\x05\x69\x4b\x57\x90\x2b\x47\x9e\xcd\xea\xba\x40\x0b\x8e\xad\xa9\x21\x94\xc9\x48\xa6\x18\x2a\x8a\xb8\x50\x02\x20\xf0\x4c\x9f\x34\x75\x9e\x48\x47\xd9\xb8\x69\xd1\x05\x3f\x97\xbb\x35\x7c\xc7\xea\x3c\xd2\xc9\x35\x15\x33\xf5\x34\x57\x15\xef\x32\x40\x64\xbe\xfd\x6e\xa5\x7e\xeb\xc0\x84\xdd\x54\x12\x4d\x16\x58\xde\x12\x99\xd8\x13\x54\x8f\x24\x8d\x40\x73\x69\x18\x7b\xaa\xee\x47\x9a\xe8\x01\xec\x87\x98\x66\x89\x48\x64\x24\x08\x0d\x10\xc3\x18\xe9\x46\x62\x93\xdf\xab\x37\xa6\x7a\x5b\x27\xe7\xa8\x3c\xa5\xcb\x56\x5c\xf1\x5b\x4b\x39\x6b\xdf\xeb\xaf\x74\x29\xd6\xa6\xe8\xf4\x69\x7e\xad\x01\x15\x5e\xfd\x26\x79\x21\x91\xd3\x0d\x44\x04\x8c\x49\x72\xb6\xe5\xf3\x94\x12\x6a\x01\x2d\xc6\xb2\x13\x03\x9e\x8f\x1c\x68\x3a\x08\xfb\xc8\x24\x58\x3d\x12\x64\xd1\x44\x80\xf8\x27\xaf\xdd\xff\x0f\x89\x1f\xe6\xfe\xdf\xd0\x8b\x69\xa9\x29\x2d\x73\xa6\x3e\x0f\x05\xf2\x6e\x16\xcd\x75\x62\xf1\xb4\xaa\xa5\x88\x6a\x79\x27\xed\xd9\x5b\xa1\xdd\xe1\xee\x65\x2a\xff\xda\xb0\xdd\xa9\xc7\xfe\x10\xa3\xd1\x65\x33\x79\x1f\x45\x03\x94\xee\xb8\x8c\x03\x0c\xec\xb1\x14\x69\xc5\x80\x0a\x1c\x4a\xa6\x1c\x9a\x89\xe5\x38\x8e\xa0\xe9\x98\x21\x70\xad\x20\xa2\x4d\x0f\x11\x14\x1f\x29\x89\x3f\x4a\xd5\x47\x69\xbb\x0a\x97\xef\xb9\xf9\xbb\x6d\x8d\x5e\x7a\xaf\xfe\x8e\x31\xd6\x1f\x77\xda\x07\xdb\x57\x28\xb7\x06\x7d\x38\xa3\xca\x61\xba\x60\xf2\xde\x0e\xbe\x2a\xb8\x8c\x11\x47\x8e\x6e\xf9\x0c\xc7\x62\x31\x8a\x3c\xca\xb0\x45\xc7\x03\x1c\xc3\x98\x71\x4c\xc2\x80\x97\x02\x00\x79\x53\xf1\xa4\x90\x24\xb9\x74\x9e\x3b\xf7\x57\xfe\x74\x6d\xc8\x3a\xf1\x97\xc6\x99\x8f\x1e\xcf\xda\x3d\xfb\xaa\x06\x35\x77\x16\x7c\xf6\x63\xef\x37\x3e\x7e\xaf\x60\x54\x2e\x65\x55\x81\xe4\xd5\x26\x9a\x21\xfa\x21\xcf\x03\x19\x00\xcd\xe2\x34\x32\x36\x65\x1e\x78\xb1\xa4\x49\x0e\x34\xa0\xa8\xfa\x31\xd6\x0d\x1c\x18\x04\xf4\x35\x60\xc5\x01\x4d\xa4\x33\xf6\xae\x56\xf4\xd5\x4e\x44\xad\xaa\x53\x86\xfe\x31\x0a\xb5\x59\xba\xa7\x57\xce\xf9\x25\x5b\xef\xeb\x5c\x64\xe0\xca\x72\xe5\xba\xea\x55\xf6\xe6\x48\x9e\xc9\xb4\xc1\x23\x43\xb7\x29\x3b\x44\x9e\x17\x6a\x48\xe1\x75\xda\x10\x44\x5f\xf1\x1d\x9f\xa6\xa0\x20\x9b\x38\x64\x59\x5d\x51\x54\x8d\x36\x38\x1d\xab\x1c\x4a\x3c\x67\xea\x75\xf1\x06\xf5\x56\xce\x03\x75\xf2\xdf\x58\xd3\xa5\x4f\x8f\xa3\xaf\x96\x35\x96\x89\x4b\xd6\x7e\x78\xd6\xb9\x5b\x6e\xcb\xea\x9a\xb5\x32\x06\x58\x4f\x98\x79\x78\xdf\x35\x24\x93\xf2\x62\x40\xfa\x32\xcb\x49\xb1\x15\x21\x53\x51\xd9\x50\xb4\x6c\xc9\x74\x74\x31\x72\xb1\x23\x20\x47\xf7\x49\x20\xcb\x98\x0a\xfe\xe9\x18\xcf\xcf\x99\xb6\x16\xa8\x56\x3c\x53\xc1\xae\x47\x2f\xae\xaf\x79\x34\xf7\x6c\xb0\xb7\xcc\x8c\x89\xa6\x53\x5c\xc9\x66\xa5\xd6\x9e\xd6\x2f\xef\xb8\x8c\x2d\xc9\x27\x3c\x61\x8a\x96\x6d\xdb\xe6\x09\xec\x78\xae\x1c\xb0\x81\x42\x06\x96\xc1\xb9\x9c\x11\xd1\xb1\x6d\x72\xa1\x44\x8b\x22\x81\x4c\x95\x97\x03\xe8\x40\x1d\x4b\x44\x3a\x28\xbc\x9b\x78\xf1\xd8\x91\xf2\xe7\x25\x4b\xd7\x59\x2c\xaf\xff\x65\xee\x94\xd4\xd2\xad\xa6\x56\xd9\x8b\x56\x57\xdb\xc4\xf5\xff\xe4\x4a\xf5\x24\x8e\xc6\x38\x32\x64\x23\x02\x05\x66\x48\x19\xb4\x2a\x5b\xbc\x14\xe0\xd8\x51\x58\xca\x01\x98\xe3\x81\x4d\x22\x97\x12\x01\xc9\x87\x50\x73\x55\x22\xc6\xa6\xf6\xd7\x8a\xdf\xbf\xa0\x91\x7f\x87\xcf\x4e\x4b\xcd\xd9\x38\xdf\x7f\x41\x23\x69\x61\x51\x91\x29\x61\xf9\x5e\x9f\x2f\xb8\x13\xe1\xe9\xc5\x7e\x6a\x98\x6b\xca\xd6\xa2\x52\xf3\xc5\x13\x56\xe5\x19\xde\xb8\xcc\xab\x67\x92\xf7\x0f\x43\x26\xe2\xa1\x1f\xf2\x38\xb4\x45\x05\x49\x80\x67\xff\xbc\x09\xa4\xc2\x87\xd0\x08\x23\x5d\x27\xa0\x1e\x19\x86\x1b\x19\x50\x87\x24\xe7\x50\x6a\x7a\x64\xf3\x03\xcf\xe5\x20\x67\x9f\x6a\xf9\xd9\xd6\x86\x1f\xbc\x57\x48\x9e\xd8\x64\xdc\xcc\x5a\x65\xcc\xfb\x37\x2b\x5c\xd9\x75\xa0\x67\x6a\xed\x49\x30\x89\xed\x25\x43\xa3\x38\x52\xd0\x05\xcc\x40\x52\x53\x38\x2c\x5a\x36\x19\x59\x06\xa5\x1b\xb1\x85\x0d\xc3\xc5\xc0\xc7\x3c\x64\x1c\x41\x92\x78\x86\x56\x79\x3e\x9d\xc6\x47\x87\xa7\x7b\xcb\x7e\x77\x77\x4a\xae\xb2\xdf\x76\xed\x3f\x63\x4b\xf8\x5d\x0a\xcc\x7e\x6f\xdd\x89\x75\x9d\xc7\x5f\xaf\xb2\xec\x8d\x4f\xfa\xe4\x4a\x22\x1f\x99\x4f\xc5\xc0\xb2\x1c\xd2\x12\x75\x16\xd9\x7c\x4c\x1b\x96\xe2\x5a\x84\xc6\x63\x82\xf6\x01\x8e\x04\x45\xa1\xb1\x1c\x05\x3a\xb6\x4c\x0f\x2a\xf2\x3f\x17\xca\x5f\x3c\xe5\xc2\xef\xcd\x7d\x72\xdc\x3a\x37\xc6\x19\x3f\xaf\x4e\x9f\x70\xd4\x4b\xaf\xd6\xec\x71\x7a\xd3\xb1\xb2\x97\xf2\xb4\xfb\xe1\xc4\xfd\xfb\x5d\x92\xb9\xfc\xc0\x05\xa6\x2a\x53\x34\x13\x42\x93\x8a\x2d\xa4\x69\x8e\xef\x31\x8a\xa0\x89\x8c\xab\x73\x01\x4d\xf3\x00\x7a\x94\xc8\xf8\x01\x70\x34\x36\x8c\x29\x27\x9d\xd1\xd1\xed\x86\xb7\xdb\x7f\xfc\xe0\xc4\xef\xf3\x4f\x3c\x01\xc7\xd6\x6e\x3d\x9f\xfd\xd7\x06\xbf\xb6\x57\x9b\x34\x9e\xea\xcc\xcf\xfe\xc9\xef\xe3\x96\x24\x31\xeb\xc8\xa6\xa2\xb8\x8e\x1c\xf9\x2e\x87\x78\x24\x68\x82\x12\x79\xd0\x66\x5d\x9f\x03\x18\xb0\x14\xa9\x6b\x94\xa3\x48\x28\xe2\x09\x60\x7b\x34\xc0\xbc\x9a\xd8\x31\x3e\x5b\xfa\xf6\xe7\xd3\xbe\xef\x5e\xc6\x5a\xd0\x0d\x2d\x5f\x38\xa0\xc5\xd5\x1b\x8b\x3b\x6d\xfd\xb1\x4f\x5a\xa3\x0b\xf3\x4f\xe7\xf8\xa0\x16\x4e\x9e\xc9\xb1\x24\x60\x53\x96\x31\x1f\x1b\x8a\x24\xd3\x24\xef\xab\x8a\x8b\x81\xac\xf2\x84\x8b\x1c\x12\x12\x9c\xe8\xfb\x42\x44\x4b\x58\x73\xa1\xcf\x6b\xea\x7f\xb4\x4a\xa7\x37\xfd\xa7\xb5\xee\x86\x25\x1f\x34\xa9\x5b\x7c\xda\x0f\xd9\xc9\x97\x4a\xaf\x7e\xdc\x0e\xae\xe9\xb0\xef\xab\x77\xe9\x86\x99\xd9\x13\xcd\xdf\x9e\x7c\xb6\xc2\x7f\x70\x92\xfd\x95\xa5\x5e\xfd\x66\xec\xc7\xe7\xb7\xbf\x93\x72\xbd\xf6\xf5\x69\xdf\xee\xf2\xaa\xdc\xec\x9d\x7d\xae\xfc\xc5\x57\x33\xd2\xba\xa5\xd5\x96\x7f\xc9\x9f\xb1\x35\xe9\xc4\x53\xd6\x80\x54\xf4\x50\x70\x79\x16\x90\x9c\x16\x8b\x86\xaa\x33\x9e\xa9\x90\x32\x15\xe9\x21\x6f\xa9\x22\x76\x29\x47\x24\x59\xc5\xf1\x29\xd2\x61\x75\xd9\x96\x5f\x5c\xfa\x59\x73\x36\xef\xe4\x6b\xd4\x17\x7b\xb6\xfd\xba\xb7\x6b\xc5\x9e\x5d\x46\x6c\xf1\x7b\x6b\xb7\xfb\xde\x3e\x5b\xeb\xa1\x5a\xf3\x4a\x99\x9a\x7e\xf2\x92\x2a\xe7\x79\x66\x28\x06\x80\xe2\x34\x97\x35\x71\x24\x4a\x22\xc7\x7b\x2e\xb4\x1d\x64\x39\x52\x6c\x07\x2a\x25\x68\x86\xeb\x48\xa6\x6e\xf9\xbe\x08\x29\x52\x4c\x87\x68\x64\x48\x8d\x95\x05\xb5\x86\x4f\x6a\x74\x2f\x32\xa9\xe6\x93\xfc\x52\x96\x67\xd7\x3b\xc1\x6d\x99\xf3\x0c\x31\x6e\x67\xcf\xf2\xdd\x4b\x73\xfe\xf1\xdc\xf7\xa8\x52\x3a\xcb\x86\x73\x03\x06\xf6\x98\xfa\x72\x90\x82\x9e\xb4\x27\x1e\x9d\x5e\x77\xf0\x93\xd1\x3b\xea\xdf\x54\x2b\x56\xd9\x99\x3a\x3f\x63\x1a\xba\x09\xbf\x07\xe1\xc7\xa6\x84\x1c\x9a\x80\xb6\xa6\xda\x21\x41\xd2\x02\x43\xf8\x84\xc2\xb2\x04\xa1\xdb\x76\x68\x12\x98\x0a\x7c\x5b\xf5\x19\x0e\xd0\x8e\x64\xb0\x91\xf6\xe2\xf7\x68\x78\xe8\x48\xea\xec\xca\x0d\x07\x9e\x6a\x33\xbd\xfb\xca\xc1\x76\xc1\x2c\x39\x56\xe4\xdd\x3f\xbc\xc0\xca\xe2\xdf\xfc\xb6\x60\x78\x3f\xb3\x4d\xf2\xe2\x90\x4d\x86\xac\xc5\x85\x0a\x20\x0c\x5b\x25\xec\x88\x8d\x24\x86\x63\x05\x99\x33\x3d\x20\x47\x14\x09\x25\xc8\x22\xda\x09\x75\x8b\x0c\x63\xd3\x55\x6c\x05\x27\xe6\x31\x98\xd7\x61\xd9\x97\x43\x7b\x6f\xbf\xbc\x23\x65\xf9\x9d\x59\xbb\x36\x8b\xfd\x96\xe7\x76\xdf\x7e\xe3\x64\x0b\x67\x5f\xe5\xc3\x43\x9b\x7e\xd9\x2e\x89\xc4\x68\x24\x05\xe2\x3f\x6b\x23\x07\x06\x54\xec\xc4\xc0\x21\x88\x28\x92\x7c\x86\x65\xb9\x38\x50\x54\x9f\xc6\x8a\x66\xca\x01\xc9\x13\x06\xa7\x93\x20\xc6\xd4\x8b\xef\xb2\xc5\x29\x05\x06\xff\x30\xf5\x72\xff\x92\x8f\xc7\xd7\x9e\x39\x6e\xc9\xa6\x37\x46\xcd\x78\xa9\x4e\xee\x26\x8b\xd3\x2e\x7c\x95\x92\xeb\x5a\x8b\x8c\xc5\xa0\xc4\x45\x1f\x61\x19\x40\x12\x05\x53\xa1\x74\x41\xa0\x2c\x11\xda\xbe\x05\x5c\x64\xdb\xa6\xe8\xd8\x21\x64\x31\x72\x55\x31\x26\x42\x29\x34\x28\xda\xe6\x68\x25\xc1\x05\x3d\x85\x3f\x7e\xf2\xe0\xf6\x81\xed\x69\xa2\x38\x90\x99\x96\xe5\x29\x31\x58\x7e\x70\xb3\xd9\x0f\x77\xf7\x9d\xbd\xf1\x70\x6a\x9e\x0f\x93\x48\x17\x0f\x98\xc8\x0b\x91\x6f\x40\x9f\x50\x09\x14\x8b\xb1\x2d\xea\x40\x17\x18\xc9\x25\x34\xec\x1a\x90\x36\x65\xd9\x57\x04\x19\x04\x9c\x46\xb2\x24\x83\x9d\x74\x14\x14\xc5\xca\xd7\x56\x6d\xfb\xfe\xe6\xc9\x0a\x55\x8c\xde\x1d\xb2\x4c\xbf\x95\xd2\x80\x1d\xa4\x8e\xaa\x74\x6e\xca\xa5\xe2\x47\x3e\x79\xc3\xea\x97\xc4\x1e\x3b\x21\x49\x66\x1c\x10\x9c\xe2\x49\x1e\xc6\xb1\x45\x2a\x9c\xab\xea\x81\xa7\xdb\x96\x11\x45\x20\xe4\x24\x4e\x92\x54\x83\xf6\x08\xcf\xb3\x39\x31\x54\xa8\x74\x16\x09\x9b\x94\x3e\xf4\xf1\x4b\x4e\xcb\xb3\xc2\x98\x85\xcd\xc6\x2d\x2f\xd4\xab\xd5\x95\xd5\x83\x7f\xb5\x9b\x8f\xd8\x3f\xfd\x41\xf9\x2e\xeb\xf9\xc7\xcf\xc5\x94\xcf\xe9\xa8\x47\xa7\x60\xdc\x27\x15\x53\x8e\x6e\x9f\xda\xfd\x4b\x67\x47\x8e\xee\xd2\xb1\x41\x56\x8f\x5d\xed\xfd\xa9\x2d\x7f\xf1\xb2\x25\x31\x8d\xe9\xac\x45\x02\x55\xc4\xb1\x0e\x78\x85\x17\x2d\x35\x56\x10\x29\x78\x1a\xa5\x19\x81\xa1\xe9\x51\x40\x23\x2c\xc6\xb4\x61\x13\x7e\x08\x55\x31\x20\xe0\x8b\x1e\x7f\xe5\x92\xac\xf6\x1c\x57\xb7\xcc\x86\xf6\x59\x36\x15\xe9\x7d\x2e\xeb\xd3\xcf\xd7\x15\xfb\xfa\xcc\xe6\xfb\x59\xb7\xbd\x63\x6c\xd8\xff\x41\xc6\x96\x6b\x12\xc7\xf8\x50\x74\x28\x84\x95\x88\x50\x29\x42\xe1\xec\xd8\x86\x26\x27\x09\xa2\xe7\xeb\xba\xfe\x67\xaa\x45\x31\xc6\x1a\x45\xd3\xae\x82\x6c\x9b\x73\x35\xac\xa4\x13\xe3\xa7\xee\xfb\xe2\xf5\x27\xef\xf7\x7c\x73\xea\x8c\x93\x0d\xb3\x6c\xc6\xab\xe6\x2e\x1f\xff\xeb\xaa\xbd\x05\xad\x26\xa5\xce\x4d\x5c\xdb\xb8\x47\xf0\xfc\xaf\x87\x5d\xa8\xe3\xcb\xbb\x2b\x56\x5a\xf6\xf8\xd3\xd4\xac\x67\x53\x3e\x79\x78\x62\x7a\xc3\xf6\x1d\xdf\x2d\x53\x66\x72\x89\x66\x6d\x72\xed\x3b\xf8\x5c\xbc\xaa\x30\x6c\x76\x9b\x47\xab\x3b\x0c\xbd\xdf\x6c\xea\x97\xe4\x9d\x26\xcf\x5a\xa0\xeb\xdf\xbc\x3d\x6a\xdf\x79\xe6\x93\xc7\x85\x17\x3c\x2b\x5e\x3d\x79\x35\x40\x14\x11\x56\x4c\x49\x18\xd2\x24\xa1\x11\xa1\xc7\x7a\xba\x0b\x0d\x8f\x44\x10\x46\x96\x89\x80\xe5\x28\xa4\xec\xba\x66\x14\xbb\x3a\x74\x3d\x57\x73\xb4\x17\xf1\x2b\x3d\x7a\xcf\xa0\x27\xef\xe1\xde\x1b\x7b\x30\xa5\x97\x52\xb0\x64\xa7\xb3\x65\x16\x7e\x2e\x8e\x7b\xda\x74\x42\xca\xda\x85\x4c\xd3\x6c\x77\x92\xc8\x94\x1b\x90\x10\x60\x99\x17\x1c\x9b\x21\x68\x47\x65\x78\xa0\xd0\x8a\x2a\xd2\xa2\x23\x4b\x9e\x04\x3c\x0d\x86\x2a\x90\xa1\x4f\x61\x6c\xf9\xbc\x48\xdb\xc1\x8b\xf1\x6a\xde\x80\xbe\x65\x1a\x54\xed\x72\xfa\xca\x6d\xa5\xcc\x6f\xaf\x4d\xeb\x1d\x8c\x5c\xf9\xe1\xa5\xcd\x95\x57\x4f\x1d\xfe\x6c\xf4\xd7\x33\x2a\x64\x6c\xc0\x96\x18\x1d\xc4\x49\x16\x4f\x3b\x98\x23\x54\xcd\xc4\x36\x21\x00\x06\x29\xb1\x01\x34\x82\x47\x02\xe4\x60\xc4\xa9\xb2\xa9\x92\x3c\x05\x03\xe8\x30\x96\x40\x63\x9c\x78\xad\x7c\xc5\xac\xa5\x45\xae\x6c\x2a\x71\xb2\xf4\x9a\xec\x55\x7e\x5b\xdb\xb6\xe5\xe6\x23\x69\xcc\xa4\x8f\xcf\xcc\xae\xbd\xe5\xf1\xea\x7a\x4d\x86\x26\x6f\x32\xc2\x46\x38\x90\xa1\xe7\x1a\xba\xed\xd3\x8a\x23\x05\xac\xe5\x89\x8a\x45\x5b\x0a\x64\x74\x5f\x32\x02\x13\x68\x86\x18\x6a\x3a\xa7\xf2\xae\xe1\xe8\x34\x60\x13\xec\x69\xef\xbd\x9a\xed\x72\xe5\xaf\xb7\xe6\x28\x5c\x7c\x91\x91\xba\x36\xcb\xfe\x1b\x05\x9c\xa3\xf7\x2e\x33\xb9\xeb\xb5\x1c\x50\xea\xe1\xaa\x66\x19\x93\xb7\x48\x0c\xf0\x44\x24\xd2\xf8\xd8\x91\x15\xd1\x10\x3c\xcf\x8c\x68\x19\x60\x11\xd9\x84\x68\x09\xae\x8f\x3c\xa4\x39\x1e\x44\x0a\x66\x38\x0a\x6a\x84\x4b\x22\x2d\x7e\xd1\xdc\x0b\x39\xdf\xeb\x77\xed\x8d\x0a\xfb\xb8\x42\x43\xdb\x2c\xf9\xe0\xca\xc0\x31\x2d\xda\xcd\xa8\x99\x3b\x66\x5e\x2f\x7b\xef\xdc\xd5\xea\xeb\x33\xd6\x64\x4d\xac\x77\x02\x4c\xc8\x2b\x22\x21\x9b\xa6\xad\xa8\x16\xb4\x74\x2b\x62\xb0\xc0\x02\x01\x63\x9b\x01\x34\x02\x82\x1d\x71\x9c\x15\x85\x32\x08\x03\xc5\xe0\x62\x35\x31\xc2\xad\xe8\xf6\x5a\x8f\xbf\x35\xda\xd7\xb8\x29\x3b\xbf\x0c\xaf\x79\xa9\xdc\xc1\x99\xf1\x8f\xef\x66\xff\x47\xdd\x3a\xa3\x6b\x54\x69\x73\x6b\x5a\xf2\x94\x5e\x39\x51\x06\x71\x44\x50\x24\xf0\x19\xca\xa0\x54\x96\xb6\x45\xca\x08\x15\xdf\x80\x52\x20\xc4\x01\xa3\xc5\x92\xab\xc8\x8e\x42\x12\x6c\xa4\x4a\x12\x0b\x78\xe9\xc5\xf8\xbe\xf0\x71\x96\xb9\xcb\x53\x17\x18\x13\x06\xf7\x2c\xdb\x82\xa8\x6a\xf4\xfb\xa8\xdb\x6f\x77\xca\x1c\x99\x5a\xe1\x6c\x97\x49\x03\x6e\x4d\xcf\x9f\xcc\x17\x8d\xc8\x60\x3f\x0e\x34\x2d\xe0\x19\x42\x0a\x55\x22\xf2\x59\xc1\x67\x31\x05\xe8\xc8\x89\x44\x47\xa2\x63\x55\xd5\x23\xc3\x56\x34\x39\xf6\x09\x0b\x5b\x89\xb9\xb4\xb3\xb3\x23\x33\x77\x0a\x7a\x65\xbe\x27\xe5\x6b\x7c\x4a\xd8\xbd\xf1\xdc\x58\x63\x58\xdb\x33\x95\xda\xea\x77\xd7\xd6\xf8\xfa\x2d\xff\x74\x12\xd7\x25\x48\x23\xb4\x25\xc2\x97\xb4\x98\x55\x34\x5b\x54\x34\xdd\xa0\x48\x8e\x22\x63\x1e\xd0\x2c\x8c\x1c\x5f\xf2\x3c\x2c\xa8\x40\xd3\x7c\x43\xb0\x25\xa4\xc1\x17\x7d\x78\xc9\xf6\x1f\xda\xff\xb0\x1e\xb4\xdd\x9c\x99\xeb\x9d\xbd\xe2\xd8\xd7\x6a\x7e\xf2\x4b\xc3\xe5\x1b\xbf\xb9\xb1\xee\x78\x8b\x14\x6f\x75\x87\xb2\x49\x44\x72\x50\x3c\x26\x14\xc3\x65\x09\xdf\x75\x55\xd5\xe5\x79\xc3\x81\x3e\xf0\x1d\x21\xb6\x64\x81\x22\x2c\x9f\xa6\xb0\xef\xe8\x76\xa8\x89\x16\x15\x70\x0c\x99\x0e\x86\xf0\xe9\xf1\x2f\xbe\xdf\x31\x22\x2e\xb7\x66\xd5\x92\xcb\x7a\xe9\x81\x1d\xec\x43\xcc\xc7\x6f\xfc\xfe\xfe\xfc\xec\xcd\xea\x17\x3f\x5f\x28\xbf\x9a\xbc\x6b\xa7\xb0\x24\x24\x4c\x12\x45\x30\xb0\xa0\x64\x58\x8c\x2e\xf9\x58\xc2\x0a\x87\x15\x46\xb2\x08\x9a\x22\x80\x15\x3a\x9e\x87\x48\xdf\x90\x83\x88\x60\xfe\xb9\xdd\xf1\xe2\xb5\x1b\x94\xbb\x7b\xf6\x69\x1d\x37\x19\xcd\x2a\x8d\xa9\xa0\x4f\xb2\xd3\xb6\x6f\x3a\xbf\x2f\xeb\xb1\xae\xab\x96\x6f\x1f\x59\xe3\x8f\xf6\x47\x33\xe6\xc7\x89\x91\x9a\x3e\x8e\x42\x17\x28\x82\xc3\x04\x1c\x4f\x40\x16\x62\xc1\xe1\xc9\x50\xe3\x1c\x82\x33\x95\x08\x73\x98\xf7\xa3\xd8\x94\x38\x99\xf6\x5c\x9f\x16\x21\x7a\x31\x31\xdf\xfc\x09\x8f\xec\x87\x6e\xbe\x5d\x2d\x67\x87\x1c\x03\x96\xdc\xab\xbf\x7b\xcb\xfe\xcd\xb5\xe7\xa4\x7e\xe2\x5f\x3c\x33\x75\x25\xff\x4d\xfb\x24\x12\xe9\xd2\x3a\xaf\x01\x85\x54\x55\x93\x0c\x6d\xd3\x72\xb9\x40\xe0\x7d\x4e\xf3\x7c\x1d\x23\x44\x52\xb4\xe0\x32\x08\x06\xc0\x92\x39\x07\x11\x1a\xf4\xd9\x74\xb6\x94\x1e\x57\x18\x70\x63\xdc\xd9\x46\x0d\x71\xcd\x31\x3f\x06\x15\xb4\xcb\x2b\xa7\x0d\x88\x7a\x1d\xeb\x5a\x26\x67\xa3\xee\x7a\xea\xec\xe6\x49\x14\x1c\xb4\xa9\x10\x01\xd6\x24\x03\xcf\x61\x62\x06\xf0\x9a\x23\xc7\xba\x67\xc7\xa1\x80\x68\x52\x08\xe2\x90\x81\x02\x0d\x39\x59\x12\x65\xd1\x08\x2d\x5a\x8d\xb9\xc4\xc9\x59\xfe\x2a\xe7\xe5\x16\x95\x4e\xce\x4a\xad\xfe\xb4\xe5\xbe\x49\x05\xc6\xd4\x5f\x5f\xa6\xc0\x8c\x77\x1a\xae\xf4\x8f\x8e\xdc\x38\xf6\xe8\x88\xe4\x69\x9b\x73\xa6\xa3\xd3\x8c\xef\x2b\x3a\x49\x11\xae\xae\x31\xd0\xd3\x81\x83\x0c\x1d\x31\x2e\xa0\x7d\x0e\x90\x0e\x84\x20\x52\x42\x13\xa9\x34\x85\x23\xc2\xfd\xe7\xe3\xf5\xf9\x48\xf1\x63\xcd\x7e\x1d\xba\x0d\x00\xf3\x9e\xa5\x74\x1a\xdf\xa1\xc7\xd5\xd3\x65\xea\xf0\xd9\x26\xf4\x39\x36\xe3\xea\xc4\x30\x46\xb7\xee\x67\x8c\x4b\x33\xb1\x14\x1f\x4b\x33\x26\x65\x99\x7e\x64\x70\xa4\xef\xf9\xb4\xa4\xfb\xa2\x02\x68\x23\xd2\x35\xdf\x25\xbd\xc0\x94\x39\xd9\x15\x9d\x00\x68\xa6\xa7\x47\x06\xe0\xb9\x17\xcd\xbd\x5d\xb9\x67\x83\x43\xeb\xa6\x7c\x12\xbc\xd9\x04\x6e\xeb\x5a\xfe\x49\xd6\xfc\xb7\x7b\x07\x1f\xcd\x3d\xbe\xa6\xc1\xf6\x59\xe5\x07\x9a\x19\x23\xb1\x4a\x5c\xc9\xc8\x28\x70\x0c\x53\x07\xd0\x92\x29\x21\xe6\x7c\xc7\xf3\x31\x90\xf8\x88\xd2\x62\x95\x24\x14\x9e\x52\xa0\x0a\x63\xc1\x77\x2d\x8d\xc2\x6a\x64\x39\x56\x62\xea\xcf\xf7\xeb\xbf\x74\xe1\x87\xba\x5d\xbf\x19\xb0\xfc\x99\xb6\x21\xf5\x62\x3d\x84\x3f\x93\xef\x17\x7b\xff\x9b\x1d\xc3\xb6\x95\x9a\xf8\xd9\xbd\x8c\xc9\x0e\xa7\x43\xae\xca\x85\xae\xeb\x48\xa6\x2d\xe9\x8a\x1f\xd2\xa2\x1d\x49\x48\x14\x55\x85\x84\x2e\xb2\xa1\xfe\x67\x9e\x66\x43\x5a\x81\x80\xb4\x11\x70\x55\x4a\x49\xc0\xa5\xa9\x3a\x3b\x0f\xef\x1a\xf9\xc7\xa8\x95\x77\xf2\xac\xee\xd0\x6e\x7d\xe6\x0d\x95\x9a\x9e\x1e\x7f\x65\x57\x96\x01\xcd\x47\x4e\x4a\x49\x1d\x9a\x31\xea\xcf\xc4\x0b\x5d\xae\x2b\xb8\x86\x2e\x91\x36\xa3\x0b\x81\x2f\xfb\x91\x45\x42\x49\x8e\x3d\xdb\x71\x15\x96\xa1\x20\xa0\x0d\x92\x83\xa4\xac\x84\xd8\x30\x42\xd3\xf8\x8f\xf6\xfd\xbf\xcd\x9d\xbe\x79\xe5\xb7\x75\x6b\x3f\x5c\x7d\x83\xed\x69\x8d\xcf\x61\xe6\x7e\x52\xf3\xf2\xba\x91\xb9\x5f\x2f\xd0\xa0\xc9\xa3\xae\xf5\x0f\xff\xfa\x46\x12\xb1\x12\x21\x74\x0d\x59\x55\x78\xd9\x0d\x54\x4a\x54\x65\xdb\x0f\x02\x8d\x97\x48\xc1\xa5\x98\x40\x8b\x22\x4b\x87\x86\x48\xb0\x0a\x21\x0a\xa4\xe5\x51\x21\x9b\x4e\xda\x18\x90\xe7\xf8\xcb\xf7\x47\x74\xcf\xd1\x7a\x72\x9e\xd9\xbb\xea\x4c\x11\x36\x6d\x2c\xf6\x6b\x97\x07\x45\x8e\x34\xdb\xb8\x42\x7d\x6d\xf9\xe3\xfa\x49\xf4\x61\x14\x69\xc0\x36\x85\xc0\xc0\x5a\xe0\x87\xa2\xc5\x6a\xd0\x54\x14\x95\x46\x9a\x14\x48\xae\xe0\x89\x58\xf3\x24\x42\x01\x96\x6d\x9b\xaa\xcf\xe2\x48\x79\xf1\x84\x07\x96\x42\xef\x6d\x56\xc6\x77\x3f\x76\xad\xd4\xde\xb1\x13\xc8\x96\x8b\xea\xcd\xba\x74\xc6\xfe\xb4\x21\xec\xbd\xfd\x0c\xb5\x0b\x27\x4f\x0d\x8a\x23\xe5\x48\x24\xe5\x90\xf0\x49\x0d\x4a\x06\xa3\x45\x26\x29\xb1\x12\x1b\xf9\x81\x20\x61\x8e\xd1\x24\xcd\xa6\xb1\x46\x91\x8e\x6e\x2b\x48\x8b\x69\x87\x25\xd3\xe9\x8e\xf4\xbb\x36\xfa\x8d\x87\x1b\x6a\xd7\x7a\x7d\xf5\x8a\x46\x8d\x4f\x6e\x3d\x77\x60\x56\xee\xec\xdf\xec\x7a\x60\x7c\xf9\xca\xf0\x61\x6a\xb7\x86\x0f\x9f\x57\x7a\xfb\xfe\xd2\xc4\xac\xc1\xae\x55\x55\x66\x3c\xe2\x72\x5c\xcc\x3b\xee\xf0\x44\xf1\xf5\xa3\xd3\x8b\x15\x37\xde\xdf\x36\xa1\x45\xb3\x49\x19\x6b\x61\x26\x74\x21\xda\x37\x0c\xcb\x72\x91\xe1\xeb\x96\x6a\x5a\x91\x67\x99\x30\x0e\x29\x2e\x42\x02\x0b\x25\xdf\x26\x08\x96\xb3\x71\x48\x60\xcb\xf7\x10\x72\x08\x32\xd2\xd2\x61\xfe\xcb\x54\xc2\x5e\x84\x06\x97\xcd\xbd\xbf\x62\xdb\xaf\x6f\x18\x0d\x07\xcd\x28\x5c\xb0\xea\x9a\x49\x37\xc6\xf6\xdb\xbb\x73\x76\xbb\xf7\xcf\xfc\xf6\xfc\xaf\x3f\x99\x5d\x27\x75\xc2\xde\x67\xa9\x9b\x73\x7c\xff\xed\x99\x0b\xa5\x9f\xb5\x1c\xb4\xb8\xe8\x59\xf7\xb6\xbf\x6d\x7b\x58\xe7\xa3\x35\x6d\x9b\x3d\x77\x1c\xb9\xde\x1b\x7c\x00\x8f\x7b\x57\xd8\xde\xfa\x97\x68\x75\xef\x39\x2b\xf3\x34\x5d\xd5\xfb\x61\x8e\xd2\xcf\x4e\x6e\xcc\x34\xbc\x3f\x79\xdd\x48\xde\x71\x28\xac\x60\xea\x41\xe0\x05\x82\x4d\x73\xba\x0a\x19\xf6\xcf\x64\xe5\x30\x9a\xcd\x29\xa2\x67\x78\x0a\x92\x14\x8b\x73\x1c\xc1\xb4\x34\xd2\x93\x10\x0b\x8d\xc4\x39\xb7\x68\xa7\x91\x63\x3e\xff\xbc\x57\x07\x92\x7d\xb9\xeb\x55\xfc\xe0\x9a\x93\xa9\xe8\x2f\x8f\x8a\xac\xbb\x38\xba\xdc\xee\x5b\x35\xf2\x67\xdb\x95\xc4\x65\x0e\xe4\x47\xc8\xf2\x1d\x8d\x8d\x74\x9a\x27\x2c\x20\x12\x18\xb8\x36\x00\x36\x1d\xa9\xb1\x47\xd8\x01\x6b\x39\x51\x64\x58\xa2\x2e\x62\x99\x97\x18\x3e\x41\x7f\x8b\x5f\xbe\xf2\x6c\xb3\xaf\x8d\x1c\xc7\x46\x6c\x6d\xbb\x67\x71\xc5\xcd\xc2\xd6\x9c\x3f\xb5\x6e\xfb\xe3\x8d\xca\xf3\x16\x75\xac\x37\xfc\xec\x89\xe4\xbd\x6a\x1c\xc1\x55\xc5\x40\x64\x9c\x30\xa0\x54\x91\x95\x40\xcc\xdb\x1a\x52\xb1\xc8\x7b\x61\xa4\x29\x21\x21\x20\x2c\x78\x62\x60\x31\x88\x30\x4c\xc4\x29\xaa\xfc\x62\x46\xb8\xd6\xe8\x9d\x2c\x51\xf5\x43\x8b\xa8\x3b\x5d\xfb\xfc\xfa\xb1\x7a\xd9\x2c\x35\xb3\x5d\x0a\xea\x52\xfd\xd1\x4f\xa5\x1f\x4f\x7c\x67\x6e\xc6\x60\xe1\x09\x33\x82\x0f\x08\x87\x36\xfd\x50\x67\x08\x8e\xd7\x22\xac\x87\x1e\x4f\xb9\xd0\x17\xf4\x50\x21\x78\x03\x38\xc0\xb3\x68\x5d\x56\x2c\xa0\xe8\x96\x02\x78\xd9\xe5\x13\xbf\x1b\x4b\x15\x9c\xb0\xf1\x2b\xb1\x55\x6a\x76\x72\x4d\xfe\x2e\xe5\x52\x6b\x1e\x58\x7c\x6b\xf2\x38\x2d\x73\x9e\x73\x39\xbc\x46\xc5\xfa\xd4\xce\x58\x31\x91\xd0\x21\x08\x64\x7a\xae\xc2\x63\x31\x0a\x0c\xac\x92\x22\x90\x90\xa4\x02\x55\xb0\x04\x46\x40\x04\xe6\x79\x56\xe6\x61\x40\x02\x57\xb2\x74\x05\x53\x2c\xd6\x95\xc4\x68\x91\x6c\xfb\xe3\x89\xc5\xa5\x7c\x2b\x4b\xe5\xaa\x7c\xf1\x5c\xb3\x9c\x8d\xaf\xee\xbf\xbd\x78\xe7\x9b\xdd\xc7\xcd\xeb\x19\xe5\x38\xfd\xca\x2b\x8d\x93\x67\xb2\xce\xdb\x81\xae\xb3\x82\x2a\x5b\xba\x14\x98\xb1\x19\x89\x3a\x96\x6c\xdb\xf2\xfc\x80\x12\xd4\x58\x42\x1c\xad\x73\x7a\x14\x91\x38\xa6\x20\x2f\x09\x44\x02\xb1\x1d\xa9\xef\xf4\x6e\x1f\x8c\x9f\xff\xf1\xda\xa1\xd3\xbf\x58\x4a\xbc\xd3\x7c\xdc\xae\x86\x97\x8e\x4e\xad\xd4\x7f\xd3\x96\x86\xde\xc6\xcc\x35\xd7\x24\xaf\x20\x16\x54\x03\x78\x04\xa9\x92\xac\x8a\x15\x14\x90\x26\xd0\x5d\x53\x0f\x29\x49\xb5\x79\x55\xb4\xa0\xea\xf2\xae\x88\x09\x19\x58\x8e\x12\x04\x01\xa6\x55\x36\xf1\xfc\x79\xee\x12\xb3\xe8\xd8\x62\x03\x57\xe6\xee\x5b\x72\xf4\xb3\xbb\xd5\x3b\x34\x9c\x31\xa7\x76\x17\x6d\xcd\xe1\xbd\xb0\xdb\xa4\x8e\x85\xe8\x8c\x09\x89\x24\x0c\x6c\x04\x25\x7a\xac\x07\x02\x8e\x62\x5c\xd6\xd2\x4d\x96\x0a\x55\xc8\x39\x44\x64\xc4\x94\xe0\x89\x1e\xc3\xc8\xa1\xee\xf9\xae\x40\xf2\x12\x0c\x79\x4d\x7f\x5e\x23\xfe\xaf\xc0\x56\x66\x2e\x9b\xbd\xfb\xd6\xd2\xef\x5d\xf9\x7e\x4f\xfe\x0f\x1a\x2c\xab\xba\xe7\xeb\xc5\xb9\x6e\xfe\x63\x5c\xa6\x11\xf7\xef\xc7\x5b\x9e\x92\x5f\x27\xcf\x29\x22\x02\x47\xc8\x51\x29\x3d\xd6\x25\x49\xe1\x3c\x84\x40\x80\x80\x6d\xd3\x98\xb1\x54\x0f\x00\xdb\xb1\xb0\xcb\xc6\x3e\x15\x7a\x01\xd6\xa1\x8a\x94\x04\x10\xa2\xb6\x17\xdc\x4b\x5d\xd7\x99\xe7\xe1\x30\x67\x90\xfd\xac\xf0\x37\xd9\x67\x4f\x16\x9d\x4b\x2b\x1b\xae\x68\xb5\x6b\xfd\xd1\x3f\x3e\x4f\xa2\xee\x2e\x94\x45\x0e\x19\x92\x89\x3d\xd3\x03\x76\xc4\xc5\x86\x0f\x54\x9d\xb0\x95\x58\x0e\x5d\x4d\xa5\x68\x59\xc7\x5c\x28\x87\x90\xc3\x01\xe9\x88\x0c\xc6\x09\x02\xdb\xf1\xde\x93\x47\x7f\xb9\xcc\x3f\xd3\xad\x31\x98\xb5\xe2\xbd\x55\xb3\xda\x68\x1f\xa7\xbc\xd6\xba\xc5\xc8\xdd\x99\x67\x91\x69\x8b\xae\xfd\x9c\xc4\x41\x20\x15\x6a\xc0\x81\x3a\xe5\x1b\x2e\x17\x28\x98\x01\xac\x45\xf0\x5e\x84\x35\x5e\xf7\x09\x13\x19\xb1\x12\x51\xc8\x06\x1e\xab\xc9\x90\xc1\x52\x10\x85\xe9\xcc\x19\x66\xe5\x7e\xf6\x7b\x81\x1f\x96\x57\xa9\x78\xfe\xe2\xe2\xd7\xd6\xdd\x3a\x9c\xd2\xf4\x21\xfd\x7d\x9f\xf7\xe4\x6a\xd9\xcc\x21\x3b\xaa\x94\xc9\xfe\x5f\x74\x93\xab\xa6\x18\xd3\x0b\x95\x17\x1f\x4f\x7f\xad\xcd\xd6\x83\x03\x9f\xce\x81\x17\x41\xfe\x82\x47\xe7\x76\x11\x26\xf4\xcc\xca\xbe\x9b\xe7\xb9\x08\x54\xf2\xbb\xd7\x7e\x2d\xf1\xf6\xee\xea\x99\x8f\x3c\xfd\x47\xd3\x63\xb5\xeb\x14\x3a\xd0\x32\x4f\xcb\x53\xcd\x4e\x8c\x1a\xbd\xb4\xc4\xd5\x23\x8d\x4a\x25\xef\xa1\xc7\xca\x96\x6d\x2a\x3c\x1d\x13\x5a\xe8\x2a\xac\x2f\x98\x08\x46\x7a\xec\xba\x96\x42\x01\x2a\xe4\x28\x20\x30\x04\xe6\x44\x5b\xa1\xe5\x50\x40\xae\xc2\x25\x28\x05\x2b\x9f\x7c\x8d\xde\x3f\x76\xf2\xbb\x9b\x2e\x6e\x6e\x3e\x4e\xef\x9b\x77\x78\xaf\x13\x63\xb7\xaf\x5f\x5e\xe7\xa5\xb9\xf6\x83\xbd\x20\xad\x49\xf2\xae\x33\xc4\x58\xf6\xcc\x40\x95\x6c\x56\xa7\xb0\xe0\x60\x2c\x6a\xa2\x28\x44\xa6\x6e\x69\xa6\x83\x10\xa6\x3d\x8b\x65\x19\x4f\x35\x15\xd1\x23\x34\xfe\xff\x22\xd0\xff\x77\xb6\x05\x39\xfe\x37\x0c\x40\x5a\xea\xa0\x94\x4c\x99\x9f\xa7\x03\xf9\x78\x98\x5b\x69\xd6\x98\x49\xef\x55\xd8\xd0\x6a\xf4\xb5\x61\x85\x0a\xbe\xfc\x55\xfd\xec\x35\x6b\xeb\xdf\xf5\x1e\xb2\xb7\xcd\xa3\x57\xda\xcd\x4f\xde\x3f\xa4\x68\xc0\xaa\x98\xf0\x5d\x92\x67\x2d\x1a\x42\x5d\x09\xdc\x80\xf2\xa0\x47\x72\x56\x40\x93\x3a\xef\xc5\x5a\xe4\xa3\x18\x68\x3e\x30\x24\x4b\xa7\x14\x3b\x71\xc0\x6a\xb6\x79\x6f\x9b\xfe\x9f\x9d\x1b\xfa\xdb\x9d\xd5\xd6\xac\x95\xe7\xbe\xca\xb2\x2d\xdb\xf1\x91\x87\xd1\xa9\xd7\xac\x0a\x8d\x66\x95\x9f\xf1\x34\x79\x01\xcb\xd3\x55\x96\xa7\x60\x20\x29\xd8\x02\x81\xad\x44\x58\xe4\x01\xc7\x90\xbc\x45\x07\xc8\x84\x1c\x65\xb1\x96\x4c\x12\x86\xae\xe9\x8c\xee\x44\x91\x43\x04\x2f\x06\xac\xef\x87\x3c\x6c\x9e\x63\xeb\xad\x8b\x77\x86\x54\xeb\x79\xf7\xa3\xd1\x63\x9d\xbc\x37\xd6\xd7\xad\xf3\x71\xd5\xac\xd3\xaf\xf5\x7a\x78\xec\x8d\xa6\xc9\x0b\x58\xbe\x14\x59\x1c\x21\x53\x34\xe9\xf0\x2c\xf2\x18\xc3\x62\x78\xcd\x70\x3d\xd3\x73\x78\x8d\x12\x91\x2f\x3b\x9c\xcb\x5b\xaa\x4e\x43\x57\xf7\x30\x23\x41\xe7\xc5\x80\x75\x6c\xf1\xd1\x5a\x8d\x76\x7f\xfa\xc1\xe1\xdd\x0d\xbb\x19\xc7\xdb\x1f\x68\x54\x7f\x42\xb3\x89\xb9\x3b\xc8\x71\xf9\xa5\x7d\xd4\x91\x8b\xd7\x26\x31\x60\x19\xc8\x82\xb4\xcd\xf0\x8e\x19\xcb\x1e\x0e\x5d\xc2\xa2\x1c\x0a\x6a\x92\x0f\x49\x4b\xe2\x90\xcf\x62\x48\x46\x1e\x6f\x00\x5b\x10\x43\xc0\x93\x44\x3a\xea\x5d\xcd\x7e\x2c\xb7\x7e\xdf\xec\x7a\xeb\xb6\x7f\xb6\xef\xfa\xeb\x3b\x7e\x6a\x35\xa3\xfe\x90\x12\xc3\xbe\xae\x58\x74\x4a\xc7\x49\x7d\xf6\xec\x3c\x94\x3c\x59\x03\x56\x94\x3c\x47\x05\x1a\x6d\x29\x0e\x6d\xf9\x0e\x0d\x59\x3f\xa4\x39\x14\x49\xac\x4f\x7a\x7f\xbe\x6d\x4d\xca\x37\x4d\xcb\xf4\x2c\x23\xf0\x74\xc0\x8b\xba\xf4\xc2\x4e\xe1\xdf\x4d\xd5\xd3\x9a\x8e\x2f\xf8\x5f\x3b\x85\x1b\x7e\xad\x9a\x52\xb6\xde\xcc\x83\xf1\xd7\xf3\x1e\x5d\x49\xd9\x57\xc4\xeb\xdd\x27\xf3\x8e\x25\x33\xfb\xec\x1a\xd9\x61\xfb\xf1\x61\x05\x7b\x25\xef\x92\xc6\x8e\x1a\x38\xba\xeb\x69\x31\x32\x2d\xca\x90\x9d\xd8\x8b\xe9\x40\x88\x1c\x4c\xeb\x84\x08\x78\x4e\x51\x1c\xd7\x17\x6c\x56\x56\x10\x14\x31\x14\x22\x2a\x71\xab\xbd\x48\xa1\xe1\xc7\x3e\xcd\xd3\x21\xcb\xe7\x3f\x3f\x11\x77\x04\x6f\xbd\xbd\x75\xf4\xda\xe9\x2d\xe8\x25\xc0\xff\x7d\xf7\xde\x45\xec\xa9\x8c\x51\xdd\xa7\xe3\x46\xc0\xf3\x4d\x89\x40\x40\xb5\x6d\x5b\x66\xa0\x1d\x00\x08\x74\x88\x84\xd8\x15\x35\xc4\xeb\x92\x64\x0a\x96\x60\xa8\x1a\x11\x1b\x82\x62\xf1\x1c\x4c\xec\x46\x1b\xb7\xa8\xe5\xd6\x1e\xef\x11\x95\xbf\x52\xf4\x63\xeb\xd3\x7e\xb5\x3e\x99\x7f\xaa\xf8\xf8\xae\x99\x9a\xd5\xea\x52\x7b\x57\xed\x9b\x95\xdf\x4b\xe2\x94\x16\x4a\x91\x16\x87\x91\x6b\x02\x82\x33\x25\x9f\xf4\x6d\xde\xf1\x85\x48\x34\xcc\x30\x0c\x35\x9b\xe5\x6d\x59\xd6\x81\x1d\xea\x30\xa4\x15\x41\x71\x9c\x74\x76\xdf\x2f\x4e\xf2\x47\xfd\x7a\x61\x44\xde\xbc\xcd\xbb\xbe\x3b\xa0\xf2\x27\x63\xca\xf6\xea\xd5\xfa\x52\x97\xb3\xa7\x3a\xbd\xdd\x42\x2d\x71\xba\x40\xc6\x3a\xab\x89\xa3\x37\xd2\x02\x1e\xc5\x1e\x12\x54\x19\x43\x8a\xc1\x51\xe4\xdb\x40\xf7\x15\x9f\x8b\xe3\x48\xe7\x78\x02\xd0\x9e\xca\x5b\x9a\xc5\xf0\x0c\x0e\x39\x47\xfd\x6b\x8e\xf8\xaf\xdd\xf7\xbf\xc3\x2f\xa4\xa5\xd6\xca\xd4\x31\xd3\xf3\xab\x55\x42\xf9\xae\x15\xe9\x47\x37\xe5\x07\x77\x86\x55\x7e\x7c\x75\x22\x57\x74\xda\xd1\xcf\xce\x2c\x98\x0b\x6a\xf7\xcc\x92\xab\x6d\xd7\x2e\xe5\x93\x57\x03\xa8\xc0\xb7\x22\xc6\x43\xa2\x0f\x24\xdf\x88\x34\x31\x88\x0d\xd1\x55\x1c\x89\x73\x0c\xd7\xb0\x34\xdb\x32\x34\x92\x81\xb6\xe0\x43\x8c\xa1\x49\x58\x64\x3a\x8c\xa2\x05\xee\xcc\x9a\xff\x4a\x99\x51\x8f\xde\x5f\xbc\x83\x7a\xa7\x45\x1a\xdf\xec\xd3\x9a\x3b\x1f\x9a\x3f\xa7\xfc\xb1\xae\xc1\xec\x1a\x87\xc6\x66\x4c\x2c\x39\xf1\xba\x9b\x43\xd9\x81\xc6\xd3\xac\x8a\x29\x85\x36\x70\xe0\x90\x72\x6c\x32\x9a\x06\xcd\x30\x12\xa1\x0f\x43\xcf\x0c\x63\x93\xf0\x94\x40\x89\x60\x18\xf2\x71\x3a\x83\xb1\x27\x95\x86\xf7\xf8\x76\xcc\xdb\x67\xc6\x14\x22\xe9\x3c\xb7\x97\xb7\xdc\xbb\x77\xfe\xfe\x01\x0d\x73\x4c\x38\x34\x61\x1b\x5a\xff\x8e\xd9\x3b\x79\x29\x55\xe0\xa1\xc2\x19\xac\xc4\x68\x22\xc3\x9b\x86\x65\xd2\x04\x2b\x09\x0c\x42\x31\xcf\xfa\xc0\x20\x29\x37\xfe\x27\x28\x00\x05\x3c\x81\x2c\x1a\x3b\xe9\x04\x7d\x3c\xb7\xf5\xdc\xb9\xa3\x6a\x5c\xd9\xfc\x43\xa1\x96\x45\xbb\xde\x73\xbb\x77\xa8\x24\x9f\xc2\x61\xa9\xb9\xff\x98\x05\x96\x4d\xe3\x33\xb6\x0d\x96\x78\x9d\xd6\x01\xa6\x64\xa8\x0e\x61\x93\x5c\xc8\x08\x18\x20\xde\xa4\x42\x00\x79\x0b\xfb\x9e\xaa\xd0\xb6\xed\x49\x9a\x2f\x8a\x0a\x50\x3c\xdf\x34\x6d\x97\x8b\x13\x3b\xc6\x1f\x43\x56\x97\x9f\xd3\xa0\x5c\xf5\xa7\xaf\xde\xb7\x1f\x76\x5e\x1e\x2c\x6f\xb8\xbf\xcf\xf9\xa9\xbf\x2f\xab\xd8\xe1\xf1\xc3\xc7\x99\xae\x25\x51\xf3\xde\x92\x18\x8e\x24\x43\x4e\x54\x02\x40\x0b\x98\x09\x3c\x85\x08\x04\xd6\x8d\x63\x46\x32\x78\x96\x20\x38\x10\x86\x90\x74\x69\x87\x33\x62\xd1\xb7\x0d\xd7\x7a\x81\x04\xf5\xef\xf0\x43\x7f\xbe\x26\xbf\xfd\xaf\xdb\x5a\x82\x2e\xd0\xe8\xf4\xc8\x8d\xad\x56\xbd\xe5\x5e\xfd\xed\xbe\xdf\xf4\xb7\x13\x43\xdf\xdf\x3d\x7c\xf4\x98\x26\xb9\x84\xab\x0d\x1f\x4e\xce\xd8\x1c\x22\x31\x6a\xc4\xb3\xb0\xca\x1b\x7e\x68\xea\x1e\x46\x2e\x45\xc4\xae\x49\xc5\x9c\x86\x91\xca\x43\x4d\xf4\x64\xd7\xa3\x55\x3e\xb0\x04\x56\x8c\x65\xc8\x02\x89\x4c\x87\x67\x4b\x4e\x7d\xfc\x49\x9f\x83\xc7\xdf\xef\xd6\x70\xf0\x1b\x95\xa6\xdb\xb8\x0c\xee\x72\x6f\x6a\xe5\xca\xf5\x4e\x0c\xcf\xf7\xeb\xcb\x83\x33\x4b\x49\xc4\x35\x10\x74\x48\x9b\x82\x01\x5c\x4d\x90\x24\x32\x8e\xe8\x58\xe4\xf8\x98\x94\x38\xda\x0b\x4d\x06\x86\x24\x11\xa9\x8a\x0d\xf4\x40\x55\x55\xd1\xe6\x8d\xf4\xf6\x94\x18\xf8\x7b\xeb\xac\x57\x7a\xce\x88\x56\x8c\x28\xd8\x2d\xff\x9c\xfb\xbe\xbb\x59\x1b\xf9\xd3\x87\x2d\xf3\xde\xad\x54\xa4\xe5\x04\x6f\x76\x12\x9b\x65\x38\x66\x75\x87\x76\x42\x4a\xe6\x14\xca\x26\x65\x48\xab\x0e\x42\x76\xcc\x04\x48\x24\x55\x57\x20\x75\xca\xb3\x4d\xc8\xda\x3a\xa6\x79\x19\x19\x51\x3a\xdb\x0f\x27\xb7\x1f\xbd\xf7\x65\x87\x94\x0d\x79\xf4\x03\x63\xe3\x26\xef\x6f\x69\x5f\x70\xdf\xd5\xbd\x3d\x1b\x6c\xeb\xf8\xe4\xc6\xb4\xbe\xf7\xe6\x1c\x4a\x5e\xdd\x17\xd3\xb2\x2e\x19\xa1\xcf\x0b\x12\x0f\x6d\x0e\x88\x71\x64\x41\x6c\x04\x3c\x20\x90\xea\xd2\x02\x41\x6b\x1c\x63\x1a\x3e\x67\xc6\xb6\x20\xba\xb1\x0f\x95\xc4\x8e\x51\xf6\x6c\x33\xf6\xd6\xd7\x3f\x6e\x28\xd6\xb7\xbf\x3a\x7c\x79\xe9\x7c\x7b\x27\xdd\xdb\x56\x77\xcb\xdb\xbd\x7f\xf9\xe8\xdd\x25\xa3\xa7\x6c\x1c\x9f\xbc\x53\xd6\x0c\xc1\xa7\xe4\x08\x2a\xa6\x1b\x38\xb4\x46\x04\x86\xa0\x13\x80\x96\xe4\x90\x60\x04\x9f\x01\x8c\x69\xc4\x3c\xd4\x62\x96\x72\xa0\xed\xb0\x8c\xe8\xfc\xb5\x4a\xf0\x2f\x39\x80\xbf\x9b\x46\xa4\xa5\x6e\x49\xcd\xf4\x5f\xcf\xca\x53\xb3\x0b\x35\xfc\xba\x7d\xcf\xeb\xf3\x97\xee\x9a\xbf\xc8\x95\x56\xff\x54\xab\xf2\xcf\x17\x84\x7c\xb7\xea\x9f\x3a\x7e\xa6\xcf\xf1\xa1\x9f\x26\x11\x70\xe2\xba\x80\xa6\x09\x19\x98\x91\x18\x84\xae\x11\xea\x24\x52\x75\xcb\x17\x64\xd5\xd1\x65\x4a\x17\x3c\x93\x51\x08\x4f\x46\x76\x1c\x1b\x52\x68\x69\x6c\x3a\xfc\xbf\x3f\xff\xfc\xca\x9e\x95\x9f\xad\x7f\x2b\xd3\xd2\x09\x86\x2d\xdc\x1e\x99\xaf\xea\xf6\x79\x35\x7a\x65\x7a\x7d\x76\x9b\x43\xa3\x76\x08\x3d\x93\x28\xd0\xc2\xc8\x9a\x4e\xd3\xb2\x8d\x64\x9a\xf5\x64\xc6\xb5\x94\xc0\x52\x21\x56\x7c\xd9\x23\x21\x30\x60\x4c\xb8\xba\x48\x4a\x90\x36\x79\xdf\xc0\xa4\x16\x29\xe9\xe4\xd6\xb4\xf9\x13\xb3\x94\xae\xad\x66\x7d\x5a\x6e\xe3\xe9\x56\x79\xbf\x3e\xc2\x35\xbe\xc5\x32\x79\x3f\x3f\x98\xa9\x01\x53\xe1\x41\xc7\xf6\xab\x93\x38\xfa\xa1\xd8\xc8\x0c\x43\xd3\x12\x49\xc9\x8c\x35\x56\x36\x1d\x4a\x15\x59\x47\xb0\x14\x42\x32\x7d\xc5\xe3\x29\x51\x85\x82\xc7\x42\x5a\xb1\x59\x8f\xf0\xb1\x98\xd8\xe4\xa5\x83\xa5\x8e\x6b\x5e\xee\x39\x7a\xe5\xe6\x5b\xdb\xeb\xe6\x78\x3c\xb8\xfd\xc2\x51\x45\x6f\xbd\xf9\x56\x99\x02\x35\xd2\x76\x37\x2c\xf0\x6a\xc6\x72\x6b\xe2\xf9\x2c\x25\xb8\x2e\x2d\x09\x12\x1f\xd0\x02\x76\xa0\xc3\x99\x00\xfa\xac\xaa\xa0\x28\x08\x24\x35\xe2\x04\x91\x20\x5c\x8a\x70\x34\x4b\x0d\x79\x81\x8a\xdd\xbf\x02\xcc\xc9\x9c\xff\xdb\x9c\x2a\x2d\xb5\xd8\x96\x32\xff\x3f\x51\xfd\xd5\x87\xba\xbf\xaa\x8a\xf9\xda\x99\x71\x67\xbe\x90\x26\x13\x6f\x1f\xda\x3e\x25\xb3\x58\xf5\x9d\x81\x35\xd4\x2d\xb3\xe7\xa4\x3e\xfc\xbd\x94\x97\x44\xb5\x5e\x9a\xf6\x15\x9b\xa3\x5c\x16\x39\x04\x52\x22\x41\xa7\x3c\x80\x62\x59\xd2\x45\x53\x41\x18\xc6\x91\xc3\xa9\x9e\xcb\x4a\x4e\x08\x22\x5b\x25\x23\x83\x35\x5e\x2c\xca\xff\x18\xf5\xb8\xfb\xb0\x6b\x99\x4b\xb6\xab\xb4\xfb\xc2\xc8\x15\xcb\xb7\xe7\x5f\xb7\xbf\x4b\x9d\x16\x03\x2b\xd1\x99\xf7\xd5\x69\x45\xcd\xb9\x9d\xc4\x58\x44\xd8\x8a\x17\xd1\x8c\x47\xb1\x9c\xaa\x9b\x26\x12\x54\x8b\x0c\x39\x10\x28\x51\x20\x72\xa2\x25\x69\x74\x20\x93\x08\x30\xb1\x00\xd1\x9f\x7f\x26\x4a\x87\x60\x80\xa1\x5b\xd8\xaf\xb4\xc9\xff\x0b\x28\x99\xbb\x64\xc3\xf9\xfb\x07\x4c\xa8\xf2\x41\xfb\xf9\x25\x9d\x62\x61\xe6\xef\x53\xf6\x9c\x3d\x30\x2b\x79\x26\xd3\x9c\xc9\x91\x8c\x12\x60\x52\x90\x88\x48\x92\x35\x8d\x8c\x04\x91\x66\x59\x57\xc5\x2c\x2f\x09\x6a\x04\x65\x4f\x93\x4d\x16\x40\x16\x5b\x40\x06\x6c\x9c\xd8\xe4\x6b\xfb\x37\xf0\x3f\x15\xfe\xb6\x94\xb3\x72\x74\x97\xbc\xf7\xe1\xc8\xb9\x4b\xa6\xf7\x68\x34\x6d\xb2\xd0\xb0\xf5\x9a\xd7\xfe\xa8\xf4\x5a\xc6\xf6\xdd\x12\x83\xa0\x31\x41\xaa\xa2\x45\xe2\x48\x0d\x68\x27\x08\x39\x3f\xb0\x08\x1a\xfc\xe9\xfe\x7c\x48\x39\xc8\x67\x19\x4f\x46\x32\x04\x8e\x49\xe8\x24\xcb\x31\x76\x3a\x8b\xe1\x5f\x8f\xbc\xb9\xfd\xca\xa2\xa9\x76\x8f\x9b\x68\xc7\xd3\x2e\x87\xa2\xfa\xef\x6d\x6e\x70\xad\x69\x4b\x74\xbc\xc5\xdd\xeb\x0f\xa7\x2f\x63\x92\x57\x6b\x58\x46\x18\x50\x31\x08\x62\x2c\xcb\x9a\xc2\x9a\xae\x08\x7d\xd3\xa2\x19\x36\xe0\xfc\xd8\x22\x24\xce\x94\x15\x9a\x60\x7d\x48\x19\x94\x07\xc8\x50\x55\xc2\xc4\x26\xff\x51\xea\x66\xf9\xf1\x7b\x5f\xd6\xae\xef\x2c\xb1\x30\x7a\xa3\xde\xbc\x85\x83\xa6\xee\x3d\x57\xba\xdf\x83\xad\x47\x2f\x7e\x6c\x7d\xb0\xfd\x5a\x12\xe7\x0d\x81\xe6\x05\x00\x11\x02\xa7\xf8\x94\xea\xb9\x34\xed\x98\xa2\xa5\x38\x32\x4b\xbb\x84\x1b\xba\x88\xa3\x1d\x5e\x80\xb2\xc5\xd2\x1a\xc0\x2c\x96\x6d\xe2\x85\xbc\xfa\x77\x63\xed\xb4\xd4\xc2\x99\x32\xe5\xfd\xaf\xbc\x7a\xed\x5e\xa9\x7e\x55\x6e\x2d\x5b\xd3\xe2\xfb\x5e\x79\x17\x2e\xcf\x5f\x72\xdb\x9e\xf5\xbb\x6e\x5e\x7e\xb7\x6a\xe7\x76\xeb\x0a\x88\x0b\xad\x64\xa2\x71\x34\x9a\x91\x4c\x49\x31\x38\xa4\x86\x82\xe1\x2a\xa6\xe3\xb1\x74\x24\x93\x12\x0a\x34\xda\x72\x03\x46\x94\x59\x92\xe5\x80\xa0\x10\xa1\x06\x44\x36\x9d\x76\x4d\xc3\x15\x7e\xf3\x3c\x1d\xf9\xbb\x29\xdd\x4a\x77\x99\xbc\x62\xf5\xf5\x02\xf9\x0f\x1c\x1e\x6c\xd2\xd5\x2f\xd1\xaf\x77\x90\x5e\xc9\x95\x44\xb1\x75\x9a\xd3\xb8\xc8\x20\x01\x05\x34\x0b\x7b\x0e\x8f\x74\x91\xd5\x22\x0b\x00\xdd\x14\x08\x4d\xe5\x58\x3f\x8c\x02\x27\xd6\x6c\x2d\x60\xe4\x90\xe5\xcc\x38\x1d\xcd\x9a\x3b\xdf\xae\xef\x73\xbd\x79\x76\x74\xe5\xf5\xbd\xc5\x66\x16\x1e\xf4\xee\xe0\xd2\x9b\x8f\x67\xcd\x71\x6c\xdb\xfd\x96\x8d\x6d\x79\xcb\xe9\x63\xc9\x73\x7d\x1d\x7a\xa2\xaa\x59\x9a\xa4\xc9\x62\x2c\x7b\x0e\x89\x2c\x37\x42\xae\xea\x30\xb1\xac\x11\x9a\xc3\x72\x24\xc6\xa1\xc2\xaa\x3c\x08\x55\x0a\x78\x04\x91\x0e\xd1\xd6\x77\x4d\xab\x6e\xcd\x73\xa4\x6e\xe1\x52\xcd\xfa\x56\xfd\xfc\x9d\xe9\x45\x33\x77\x89\xb2\x9d\xee\x2f\xf4\x79\xb4\xfb\x6a\xe7\x36\xc7\x33\x27\x6f\x64\xcc\x39\x7a\x04\x48\x5d\xf1\x4d\x81\x14\x2c\x49\x11\x39\xc0\x09\x20\xd6\x2d\x2d\x94\x01\x24\x55\x46\x10\x5c\x96\x0e\x42\x0a\xab\x92\x66\xcb\x94\xcd\x70\xf8\xdf\xae\xff\x47\xde\xff\x6d\x0c\x94\x96\x5a\x78\xd0\xf4\x82\xa3\x9e\xfb\x87\x59\xb7\x7c\x3f\xab\x64\xeb\x70\xc8\xf9\x86\xa3\x6b\x7e\x19\x7f\x7c\x9c\x3f\xfc\xcb\x5b\xbd\xad\x42\xb7\x5f\x81\x13\xce\x2d\xad\xf6\x73\xc6\x1a\x09\x89\xdb\x35\x2e\x61\x01\x5d\xd3\x31\x8c\x25\xec\x69\xae\x41\xaa\x08\x8a\x50\x0e\x14\x0d\x13\x50\x61\x43\x95\x31\x64\xdd\x12\xe9\x50\xc7\x2c\xcd\x61\xca\x4d\xa7\x00\x2c\xf9\x52\x95\xc5\xef\xbc\xdb\xb4\x4b\xa9\xb4\x96\x6f\x87\xa7\x26\xb6\xaa\xda\xee\xa7\xaf\xea\xf8\xad\xef\x2c\x9b\x32\xb6\xd5\xd9\xde\xc3\x5a\x26\xef\xb6\xda\xd0\x53\x39\x3d\x8c\xcd\x48\x01\x28\xf6\x30\xd4\x3d\xdd\xb7\x89\xc8\xe6\xc3\x58\x8c\x6d\xa8\xd1\xa6\x0f\x55\x9d\x0f\x4c\x47\xe5\x3d\x93\x81\x6a\x3a\x21\x74\x75\xda\x90\xd5\xbb\xcc\xe3\x3b\x4a\x96\x7d\xf7\xee\xec\x82\x99\xcb\x5d\x3d\x95\x6b\x4b\x91\x56\x55\x5f\xef\x0a\x2b\xbd\xa4\x1e\xd8\x37\x35\x89\x7c\x43\xa2\x61\xcb\x7c\xec\x03\x8f\x81\xb6\xa6\x39\x28\x0e\x28\x1d\x0b\x04\xa4\x03\xe0\xd3\x86\xc7\x11\x01\x8a\x18\xe4\x92\x2a\x85\x00\xad\x12\x2c\x0f\x12\xe7\xd6\x32\xbf\x5f\xbc\x91\x4d\xb8\x16\x96\x57\x94\xc3\xe7\x6a\x7e\xd0\x77\x15\x95\xed\xf0\x9c\xa7\x45\x6b\x64\xda\x58\x61\x6c\x38\xb6\x63\xc6\xb8\x35\x12\xde\x56\xd6\x93\x35\x8a\xa7\x31\xe5\x85\x8c\xc4\x68\x8a\xaa\xd0\x14\x6b\x78\x00\xc7\x2c\x8a\x08\xcf\x63\x54\x42\xe3\x09\x32\x72\x45\x4c\x7a\x50\xd0\x25\x37\x1d\x79\x94\xe9\x69\xe5\x9e\x74\xa8\xb3\x7c\xe2\xe6\x7a\xcf\xde\x19\x72\xf9\xb3\x0b\x9d\xf7\x75\x1e\xfc\xfe\xa5\x02\x53\x27\xb4\xda\x68\xfd\xf8\xfd\xc0\x8c\x9d\x72\xe2\x15\x02\x39\x66\x69\x40\x69\x36\xd2\x34\x93\x52\x25\x6c\xc5\x3c\xa3\xa3\xd0\x94\x48\x55\xc3\xb2\x61\x61\xc6\x08\x21\x65\xab\x22\x09\x91\xeb\x61\x99\x67\x12\xfb\xf2\x61\x36\x53\x85\xa9\xd3\xf6\x35\x29\x27\x1d\xcb\x56\xba\x7f\xa6\x14\x63\x84\x33\x68\x45\xa1\x05\xfd\x9b\x2d\xb6\x73\xbd\x9c\x73\xde\x8d\xe4\x9d\xb2\xca\xe9\x0e\x72\x0d\xda\xe5\x65\x5e\x0c\x55\x5f\xc4\x06\xf0\x6d\xd9\xf5\x09\x5a\xe0\x14\x81\x51\xf5\x58\x73\x3c\xcd\x20\x43\x99\x07\xbc\xee\xf0\xd8\x4d\x7c\xca\xbf\xa5\x9c\xd9\xfb\xe5\x88\x15\xef\xce\xee\x6b\x76\xeb\x52\x16\xcd\xca\xf2\xea\x99\xab\x8f\x3a\x2e\xce\x32\xf4\xf7\x83\xd5\xef\x66\x9e\x50\x37\x89\xfc\x1a\x34\xe4\x44\x2c\x43\xc5\xd3\x6d\x1b\x73\x1a\xd2\x8c\xc0\x93\xa1\x24\x73\x02\x70\x3d\xc7\x73\x34\x99\x23\x80\xc7\x08\xa1\x2e\x0b\x16\x1b\x59\x4e\x3a\x26\xf7\xae\x94\x67\xdb\xe4\x5e\x13\xda\xa5\x8c\xda\xc1\xb4\x28\x75\x71\x45\xae\x0b\xbb\xa6\x7e\xb4\xe7\xbd\x87\x79\x4e\xbf\x99\xf9\x58\xcb\x8d\xc9\x23\xcc\x60\x29\x9a\x71\x49\x52\xa4\xa8\xc0\xf5\x0d\xc1\x12\xf8\xd8\xd7\x09\x57\x14\x74\x99\x44\x1a\xe9\x33\x22\x16\x45\xc7\xe4\x01\x11\x49\x96\x22\x7b\x31\x82\x5a\x3a\x14\x8f\x8f\x07\x74\x2b\xfe\x92\x3a\x69\xfd\x1b\x95\xdb\xf7\x2c\xf9\xd9\xee\xb3\xb3\xbf\x7e\xe9\xf0\xd7\xa6\xd5\x1e\xf6\x68\xdc\xac\x49\xff\x8c\x09\xbc\x25\x34\x99\xb1\x35\x9e\xb5\x78\x83\x35\x64\xec\x73\x9c\x26\x03\x2f\x88\x03\x4d\x33\x3d\x48\x63\xdb\xb7\x18\x23\x50\x08\xde\xb2\x03\xe8\xd9\x9c\xcd\x06\xa1\xfd\xd7\x10\xf2\x68\xce\xff\x0d\x52\x90\xd6\x34\x4b\xce\xb9\x43\x9f\x2b\xe8\x08\xd0\x1d\xb6\x39\x3b\xd1\x6d\x9e\x8f\x6f\xd1\xe0\xd3\xce\xf5\x4a\xdf\x6d\xff\x4a\xce\xc3\xe2\xc4\xc2\x27\x32\xcd\x4b\x99\x79\x78\x5d\x12\xe3\x0b\x54\x94\x90\xa3\x25\x46\xf1\x55\xda\x83\x3a\x4d\x59\x21\x4f\x02\x95\xd6\x8d\x40\x61\x45\x87\xb0\x22\x52\x0f\x91\x66\xc8\x8a\x8d\x08\x10\xf1\x7c\x02\x25\xf6\x0f\x67\x74\xd5\x26\x3c\x9c\x72\xb5\x7a\x75\x90\x73\xe9\xa3\x06\x03\xed\x86\xad\xc6\x77\xf9\x2e\x5f\xa6\x9d\xfd\xe8\xaf\x6e\x5e\xbb\x9d\x44\xfa\x35\x99\x24\x11\x17\x08\x98\x47\x14\x10\x18\x5b\x8d\x4c\x23\x92\xcd\xd8\x92\x38\xc3\x0d\xd4\xd0\x13\x21\xe6\x01\x24\x7d\x07\x85\x26\xd2\x55\xf5\xff\x88\x70\x5e\x84\x14\x57\x7b\x76\xe4\xd5\x15\x95\x7e\xac\xbf\x28\x47\x91\xdb\x13\x3b\x3f\x9b\xde\xfa\xdc\x95\x0d\x07\x1e\x9c\xed\xdc\xf8\x78\xf7\xca\x95\xbe\xb9\x95\xb1\x05\xdf\xc4\xbd\x5d\x4a\x31\x14\xc5\xd3\x25\xc7\xa3\x0c\xd6\xd0\xa4\x88\xe7\x45\x47\xd6\x79\x9d\x72\x45\xc3\x03\x6e\xec\x31\x36\x76\x6d\x95\x36\x0c\x39\xa4\xb0\x14\xe1\x04\x1b\x81\x5f\x15\x2c\x5d\xd2\xdb\xbf\x6c\xad\xf3\x05\x31\xa9\x1f\xdc\xd3\xe5\xee\xa8\x1d\x55\xad\x07\x9d\x3f\x5a\xff\xf2\x81\x9e\x48\x7a\x3f\x89\x4c\x20\x8c\x63\xd3\x82\x17\x53\xaa\xce\xb8\x9c\x00\xb4\xc0\xd1\xa1\x8e\x18\x21\x92\x15\x93\xe4\x5c\x3e\x02\x32\xc7\x32\x0a\xa2\x09\x9d\x77\xb0\xc7\x71\xe9\xf0\x85\x4f\xfe\xfc\xad\x5e\x87\xf2\xe5\xaa\x1e\xb4\xf9\x7c\xc6\xc0\x9e\xbf\x8f\x2c\xdf\xfa\x4a\xce\x73\x43\x8e\xb5\xec\xd4\x7c\xe2\xcc\x9f\x1b\x7c\x99\x31\x62\xb2\xc4\x88\x42\x3a\xa4\x68\x43\x47\xa2\xab\x52\x12\x2b\xa8\x81\x4a\xe9\x0e\x40\x90\x17\x15\xc2\x35\x24\xd3\xc1\x62\x14\x44\x40\x8c\x0c\xd7\x77\x21\xa9\x6a\xe9\xcd\x4c\x0f\x0d\xf9\xf4\x70\x97\x35\xe3\x3e\x1c\xb4\x7d\xfc\xd3\x5e\xb7\x7a\xbd\xd5\xae\xda\xd3\x62\xc1\xcc\xba\x4d\x0e\x6f\x7b\xfd\xfc\xcc\xb2\x5f\x67\x6c\x00\x99\x98\x32\x8b\x37\x21\xa1\x89\x6e\x18\xc4\x16\x25\xa3\xc8\xd4\x91\x67\x23\x53\x10\x64\xc5\x57\x10\xed\x79\x0c\xf6\x10\x16\x02\xa8\x52\x66\x40\xda\xc8\x51\xff\x82\x37\xdd\x69\xf0\x4f\x6b\x77\xb4\x3f\xd0\x7c\xf9\xa6\x92\x56\xcb\x77\xaf\x9c\x7c\x82\x4f\x8d\xce\xfe\xfb\x8d\x0f\x0e\x7d\x5a\xba\x45\x9e\xfe\x39\x88\x9f\x06\x94\xb8\x9d\x96\x7a\xaf\xef\xb3\x67\x53\x5f\x7b\x1e\xe0\xf4\xb0\x91\xd1\xb6\xc9\xc6\x35\x15\xf2\xbd\x31\x3e\xff\x3b\x1f\x2c\xdc\x3d\xeb\x8d\xd2\x8a\x3e\x55\x3d\xbe\x7e\xed\xc6\x09\x0d\xaf\x0f\xae\xf8\x1c\x38\xa5\xe2\x93\x49\x5f\x74\x7b\x32\x1a\x64\x39\xb7\xfc\xbb\xdb\x7b\x8a\xce\xfa\xe3\xd5\x6f\xea\xb4\x3e\x7b\x80\x28\x73\xf0\x58\xa7\x1e\x95\x97\x67\x8c\xab\x3b\xb1\xdb\x49\x32\xd6\x5c\x3f\x40\x12\x80\x22\x2f\xc7\x14\x30\x40\xe4\x9b\xb6\x42\x02\x11\xe9\x5c\x18\x07\x56\xcc\x45\x98\x77\x68\x4f\xd3\x2c\x2d\x90\xf5\x04\x68\xba\x7a\x73\x3e\x68\xbd\xff\x52\xe7\xfc\x47\x66\x4c\x98\xde\xee\xc8\x8c\x5e\x43\x32\x0f\xae\xf4\x6a\xe1\xbb\xbf\x9c\xeb\x76\xfa\xe6\x03\x7e\x4b\xf2\x5a\xc0\x1c\x25\x88\x34\x8f\x03\x55\xf3\xb0\x4c\x05\x86\x66\x04\x01\x03\xac\xd0\xa5\x3c\x33\x36\x75\x95\xa4\x09\x96\x13\x30\xaf\x19\x06\xb2\xe8\x90\xe7\x18\xec\xbd\x78\xa9\xaf\x64\xef\x5f\x0f\xf4\x1c\xe6\x2d\x68\x5f\xbf\xf6\xc1\xb8\xd1\x98\x52\x4f\xda\xd6\xe9\x55\x6c\xfc\xcb\x6f\xd5\xf8\x2d\x55\x69\xb3\x33\x79\xec\xd1\x6c\xc8\xe8\x34\x13\x99\x81\xa9\x43\xdf\xa4\x18\x2c\xf9\x82\x2d\x1b\xae\xe5\x44\xbe\x81\x44\x68\xb0\x11\xc9\x70\x8a\x44\x61\x20\xda\x2c\x8b\x2c\x82\x00\x89\xc3\x66\xdd\x4c\x25\xde\x1f\xff\x64\xca\x9d\x35\x0b\x36\xf4\xb3\x96\x34\xad\xf1\xee\xf1\x7a\xcd\xdb\x6c\x6c\x31\xf4\xd2\xd1\xa5\x27\xff\xd1\xa5\x65\x12\x55\x85\x23\x3b\xa4\xa4\x98\xf7\x55\x52\x0c\x44\x9e\xa2\x4c\xd5\x25\x08\x2b\x14\x55\x57\x65\x59\x01\x71\x06\x90\x69\x03\x31\x88\x43\x06\x03\x02\x16\xda\x7c\xf8\xa2\x43\x5c\xdb\x39\xf8\xc3\xc5\xd9\x36\xf4\x5c\x68\x34\x7e\xfc\xe9\x88\xbe\x87\xb2\xff\x5c\xa1\x64\xb3\x81\xb3\xbb\x67\xed\x7a\x67\x7a\x7c\x36\x78\x39\x79\x27\xcc\xc9\x56\x20\x44\x50\x36\xf5\xc0\xc3\x0c\x27\x1b\x14\x1b\x4a\x0a\x65\x52\xd0\x91\x5d\x96\xe2\x59\x91\x0e\x7d\xcb\x94\x7d\xdd\x8c\x7c\x4e\x94\x5c\x57\x4a\x8c\x07\x6b\x59\x35\xa5\x8b\x51\xa8\xe4\x47\x79\xf4\x57\x25\x7f\x75\xf5\x47\x42\xc9\xc3\xd7\xa9\xdf\x37\xf7\x9a\xb2\x6b\x4d\xbe\xc7\xa5\xdc\xf3\x49\x9c\x2d\x39\x3e\x0b\x64\x49\x13\xa1\x03\xb1\x81\x5c\x3e\x40\xae\x1d\xb1\xc8\xf0\x4c\x45\x44\xb6\xec\x46\x21\xa0\x08\x48\x58\x3c\xa9\x6a\xc0\xe6\x68\x22\xc1\x36\x5c\x97\x9d\xcd\xba\x0f\x2a\xc6\x2e\xba\x75\x66\xdd\x8d\x7f\xb4\x2e\xba\x61\xd3\x0d\xa5\xeb\xe3\xd8\x7e\xd3\x2e\x3f\xbe\xe0\x8f\xaf\x5c\x08\x93\x97\x47\x75\x32\x8e\xb1\xe7\x7a\x04\x0d\x15\x21\xf2\x90\xa3\x38\x84\xe5\x31\x44\x20\x9b\x9e\x65\x84\x96\x0b\x42\x92\xa1\x28\x4c\xea\x50\x97\x80\x24\x13\x30\x81\x24\xbe\x5f\xba\xf3\xb0\x3d\x47\xd7\x48\x17\xc4\x83\x3b\x0a\x5c\xaa\xd8\xac\x6c\xc7\x15\xe4\xf5\xc3\xad\x16\x5d\xa9\xf0\xc9\xad\x82\x53\x7b\xba\x49\x5c\xf3\x45\xac\x86\x7c\xc6\x97\x2c\x45\xc1\x74\x80\x81\x2a\x39\x22\x41\xea\xb1\x1f\x43\x1c\xf2\x8a\xc9\x88\x51\x28\xf0\x34\x34\x6d\xc1\xe0\x68\x99\x8b\xbd\xc4\x8f\xdd\x23\x13\xb6\xf8\xd7\xab\xf4\x9b\x85\xbb\xda\xbf\x36\x9d\x59\xa9\x56\xd5\x85\xb7\xbb\xad\xd8\x32\xe5\x8f\xa7\xb9\x3b\x3e\x3a\x75\xd3\xbb\x98\x44\x52\x44\x40\x44\x9c\x21\xfa\x5a\x4c\x8b\x1a\x1b\xaa\x9c\xca\xb3\x84\x09\x1c\x8a\xa6\x7d\xdb\x04\x2a\x8a\x04\xca\x25\x02\x56\x0a\x03\x21\x32\x49\x03\x3b\x44\x62\x64\x3e\x9b\x73\xf3\xd6\xf7\x06\xed\x69\xe3\x34\x5a\xfb\x28\x1c\x53\xed\x97\x4d\xe2\xde\xc7\x95\xb2\xf5\xda\xbb\xe1\xf0\xc3\xe2\x5c\xb3\x49\x19\x63\xf2\x4f\xe8\xc3\xb4\xaa\x79\x6a\x08\x8c\x48\x25\x03\x52\x66\x45\x83\x60\x15\x83\x66\x03\x46\x25\x05\x9b\xd3\x49\xd6\xd6\x42\x8b\xf7\x19\x82\x97\x34\x59\x66\x68\x29\x02\x09\x08\x2d\xbe\xa0\x96\x16\x5f\x7b\xb3\x7e\xe6\x94\xe5\xd6\xe4\xdc\x80\xaf\x81\x0e\x2f\x2f\xb0\x68\xc8\x97\x43\x57\x1f\x58\x3e\xe1\x8b\xcd\x49\x14\xa7\xb2\xa0\x41\x44\x32\xe9\xf3\xbc\x13\x90\x32\x24\x75\x59\x0e\x54\x5a\x26\xd4\x98\x74\x24\x4a\x33\x08\x19\x47\x9e\x16\xd1\x90\x10\x24\x64\xf0\x04\xa5\x78\x89\xa3\x44\x7e\x72\x79\xdf\xfa\xcd\xb3\xe7\x04\x27\x9d\x93\xe3\xeb\xbc\x5b\x64\xe9\xac\xb9\xe4\x21\xf7\x12\xfb\x7d\x81\xb4\x0d\x41\xa7\xa3\x49\x2c\x8d\x39\xc1\xc0\x00\x79\x8e\xce\x79\xb1\xe0\x98\xb1\xac\xab\x54\x2c\x98\x6e\x88\x69\xd6\x00\x34\x26\x69\x1e\x4b\x94\x68\xc9\x71\x00\x1d\x8a\x21\x08\x3b\x81\x42\xcf\x84\x77\x66\x6c\xce\x75\x2a\x8f\xfb\x6a\xd9\x8a\x47\xfb\xcc\x26\x5a\xbc\xdf\x75\xc7\xee\x3e\xf9\x2a\xac\x5d\xf6\xa8\xcf\xb4\x21\x95\xee\xd0\xc9\x3b\x61\x2f\x72\x23\x4a\x70\x45\xc7\xf3\x42\xd2\x42\x9a\x2f\x39\x34\xeb\x70\x50\x66\x48\x51\x01\xac\x23\xda\x21\x01\x10\x05\x5d\x56\x61\x5c\x5d\x0e\x64\x8d\x78\xd1\xdc\xdf\xcf\xbc\xab\x15\xcf\xfa\x5a\xef\x02\xbd\x46\x4d\x03\x2b\x66\x9f\x3f\x72\xe4\x78\xcb\xa5\x4f\xab\x0e\xdb\xb3\xf9\x3c\xaa\x70\x35\x35\x89\xaa\x82\x81\xc4\xc3\x88\xf5\x42\x3f\xd6\x88\x20\x34\x63\x55\x65\x6d\xcd\x45\xd0\xb0\x3c\x41\x75\x75\x80\x23\x0b\xb8\x1c\xa7\xab\x96\x41\xfb\x96\xcc\x10\x36\x91\x98\xa2\xab\x1b\x2c\x90\xc7\x5e\xf2\xc3\xd8\xad\x76\x5c\xd4\xbd\xb3\xb4\xe8\xb6\x93\xab\x9b\xfc\xf1\x55\x95\xd6\xde\xa1\x5a\x69\x2b\x9b\x67\x49\xde\xce\x2c\x0b\x59\xde\x27\x2c\x17\xc9\x41\x24\xfa\x8e\xcb\x31\xba\x8a\x54\xcb\x0e\x3d\x8a\x34\xe8\xc8\x92\x7d\x84\x68\x64\x29\xa1\x6d\x72\x01\x67\x99\x38\x8a\xf8\x17\x4f\x18\xad\xe9\xbe\x42\xad\x5e\xf5\xe2\xe6\x3a\xf9\xbf\x9b\x68\xee\x5a\xe2\x74\x2a\x13\xae\xee\x35\x38\xeb\x85\x56\xa3\x8b\xd5\x3d\xf4\xd6\xf2\xe4\x99\x8b\x81\xc9\x06\x86\x2c\xfb\x40\xf1\x63\x95\xb1\x2c\xda\xf7\x28\x9a\x26\x2c\x18\x82\x48\xf0\x34\x81\xc1\x56\xa8\x32\x0e\xed\x1b\x3a\xe0\x08\x1c\xba\x09\x60\xc4\x27\xf2\x56\xb9\xb9\xa0\xff\xcd\xb5\x57\x3f\x5b\x58\xac\xf7\xf0\x33\xdf\xc6\x97\x89\xab\x07\xe7\xe5\x1c\x9f\xe6\xe7\x4b\x1d\xdd\x7f\x65\xbd\x24\xd6\x32\x61\x64\x8a\x21\xa7\x09\x16\x81\x45\x5d\xb2\x01\x92\x6d\x81\x27\x3c\xc5\x54\x15\x01\x88\x5a\x88\xa5\x48\x11\x69\x5b\x0f\x34\xcb\xf3\x44\xc7\x7a\xbe\xfc\xfa\xcb\x21\xde\xf8\xe0\x70\xe7\x1d\x9b\x47\x7c\x29\xa7\xbc\xff\xde\xd9\x22\xa7\xcf\x67\x9d\xdb\xa8\x9a\xdf\xea\x66\xd1\x49\x9d\xac\x7c\x67\xc7\xdf\x4a\x9e\xec\x18\xab\x44\xc0\x25\x3d\x5e\x8a\xb8\x28\x26\x18\x46\x00\xa6\xe0\x89\x88\x42\x2a\x13\x3a\x92\x83\x48\x5d\x90\x64\xcd\xe5\x74\x5f\x72\x18\x19\x1b\xf6\xff\x89\x01\x3c\x7f\xc2\xa9\xe5\x66\x09\x3b\x27\xdd\xd6\xc2\x89\xb3\x57\xae\xb9\xdc\xfe\xc3\xe2\x33\xea\x8e\xfa\xb0\x44\x09\xfa\xf5\xc3\x36\x07\xda\x7d\xdf\x31\x79\x27\xcc\xdb\x24\xc5\xd9\x2a\x49\x98\x14\x81\x0d\xd9\x36\x99\x08\xd2\x22\x0b\x19\xc6\x70\x3c\x5b\x09\x58\xdd\xd3\x30\x86\x06\x29\x91\x66\x60\xf0\x2e\xc4\xcc\x8b\x0f\xcb\xa5\x23\xee\x54\x2d\xbf\x7e\x45\x83\x31\xeb\xfa\xf7\xfb\x68\x78\xb3\x89\x97\xfe\x10\xb8\x1f\x46\xc0\xd7\x9f\x30\x55\x8b\xdb\xe7\xdb\x5c\x4e\x22\x5e\x2f\xf0\x69\xdd\xa3\x04\xc5\xd1\xe4\x90\x54\x80\x82\x2c\xce\x64\x51\x24\xb8\x9a\xe5\xb3\x0e\xd4\x3c\x8f\x74\x09\xc8\xdb\x94\x24\x4a\x12\x4d\x06\xb6\x96\xb8\x9b\xda\xf2\x93\xbb\x9b\xf8\x45\x5c\x76\xf1\x9b\xd9\x5d\x17\x7c\x34\xb6\xf4\x67\x1f\xaf\xba\x38\x3c\xff\x26\xb2\x4d\x5f\xb2\x4d\x91\xb4\xbb\x49\x6c\x00\x63\xcf\x20\xa1\x4e\x0a\x9c\xc0\x98\x31\x2f\x46\x96\x1f\x07\x32\x02\x8e\x89\x69\x53\x93\x42\x51\x62\x10\xa3\x79\x84\x0c\x09\x5a\x64\x59\x2a\xa4\x5d\x35\x9d\xad\xe4\x3d\xc7\x57\x2d\x20\xb8\xa8\xe1\xdd\x3c\xc5\x73\x57\xe8\x58\x68\xc4\xf6\x7b\xd9\xee\x6d\x3c\xd1\x90\xe9\xd1\x75\xde\xdb\x9f\x0c\x7a\x39\xdb\x73\x1e\x9f\x7d\x7f\xde\x2b\x37\xb2\x1e\x50\xf6\xcc\x9a\xbe\xe5\xf7\x1c\xf3\xa7\x6f\xe9\x90\x69\x1e\xdd\xf6\x87\xc1\xa5\xe7\x6c\x39\x37\x06\x94\x28\x96\xbc\x6f\xa2\xb1\xae\xe0\x45\x66\xc4\x61\x93\xb7\x2c\x2c\x21\xdd\xa0\x50\xc8\x52\xbc\xe2\x12\x02\x07\x35\x5e\xa2\xb0\xe3\xe9\x22\x60\x3c\x4e\x22\x65\x3b\x4a\xf4\x14\xfd\x7e\xc6\x9d\x5f\xaa\x47\xc5\x1f\x4e\x0b\xda\x64\x9b\x7e\x77\xc8\xe4\x5d\xb3\xca\x3f\x6e\x76\xa3\xf7\xb2\xcf\x2b\x75\xb4\xe7\x95\xe8\xf5\x55\x12\x5b\xc5\xbc\x4d\xf0\x3e\x65\x85\x1a\x1f\x40\x18\x9a\x81\x48\x58\x2c\x07\x84\x58\x10\x31\x84\x41\xe8\x0b\x02\xa3\x99\x26\x23\x07\x0a\x1b\x79\x22\xe1\xe8\xea\x8b\x17\xf4\x37\xf1\x95\x99\xa9\xe5\x0b\x2e\x28\xfb\xeb\xbd\x95\x53\x5f\xfb\x79\x48\xf5\x96\xfb\xbb\x0e\x2d\xb7\x50\x6e\xb9\x72\x5c\x83\x1f\x98\xb5\xab\x92\x67\xae\xa8\xa8\x22\x64\x19\xdf\x10\x7d\x68\x3b\x90\x44\xa4\x28\x12\x0a\x69\x87\xae\xc2\x08\x91\x28\x85\x38\xf2\x43\x10\x44\xa1\x27\xfb\x48\xe2\x3c\x89\x4f\x6f\xe7\xfb\xf6\xbe\xeb\x79\x47\xab\xb7\xed\xdc\xf5\x87\x34\x68\x1c\x9f\x78\xe9\xc7\x29\x21\xaa\x7a\xf5\x93\x45\x4d\x77\x7f\xfe\xf6\xec\x8f\xbe\x9a\xfd\x3c\x73\x4a\xab\x49\xc4\x91\x76\x9e\x1c\x10\x0f\xc7\xac\x15\x1b\x6e\xda\x36\xee\x47\x5a\x3b\x58\x6f\x57\xcb\x79\x64\x96\x65\xa3\xba\x25\x91\x43\x8f\xf0\x00\x1b\x0a\x2a\xf4\x1c\x96\xc5\x16\x63\x90\x01\x8b\x5d\xd1\xc0\x84\xa5\xd9\x2a\x1b\x47\x21\x25\x1a\x2e\xcd\x23\x13\x06\xb4\x8a\x0d\x1f\x38\x76\x3a\xbb\x6d\xf7\x07\xed\xfd\x39\x2d\xaf\x31\x69\x62\xde\xb6\x0d\xeb\x17\x3e\xfa\xde\x6f\xbf\xb5\x9c\x54\xea\xbb\x0b\xbf\xcd\x18\x90\xb3\x54\xa9\xd6\x3b\x76\x3d\xff\xeb\x1f\x46\x5d\xfc\x71\xcd\xa3\xfe\xa7\xc2\xc3\x45\x07\x8e\xdd\xfa\xe9\xab\xe3\x16\x15\x6b\xfa\xe3\xda\xe5\x45\xbe\x99\xde\xf6\xcd\xaf\x19\xbd\xf9\x73\xb7\xe9\xe3\xe9\x8b\xba\x9c\xdc\xdc\xf1\x33\xb1\x67\x8b\x9f\x0e\x3e\x5a\xd3\xe6\x46\x8e\x12\x0f\x3a\xd5\x5d\x56\x21\x5b\xb6\x66\x93\x57\xb5\x6e\x76\x36\x79\xf9\x23\xb6\x28\xc5\x10\x6d\xd9\xb4\x2c\x46\xf3\x28\x37\xd6\x2c\xd9\x83\xb4\xab\x13\xa2\xec\xfb\x11\x82\xbe\xcf\x4b\x0a\xef\x86\x40\x92\x6d\x85\xa7\xec\xff\x90\xad\xfc\xb7\xb9\x07\xf2\xa7\x11\xc6\x9e\x8d\x0d\x0f\x1c\xe1\xcb\xb5\xa8\x4d\x74\x57\x1f\x54\x79\x2b\xcb\xeb\x85\x4e\x89\x1f\x8c\x19\x5c\x6a\xc2\x9c\x8c\xe9\xe6\x25\x66\xa4\x8c\x4d\x35\x62\x42\x5b\xd3\x25\xc2\xc7\x96\x6d\x00\x87\x63\x24\x3f\xb2\x18\xd9\xe0\x05\x2a\x62\x65\xd9\x26\x80\xe5\x22\x2e\xd0\x23\x3f\x84\x80\x4f\xc0\xf9\xf9\xdd\x9b\xdf\x0e\x1b\x31\x61\xe2\xc7\xbb\x0b\x75\xec\x7c\x7e\xa1\x75\x62\xe4\x0a\xf6\x53\xee\x31\x7b\xe9\xad\x2f\x8b\x04\xc2\xb4\x4b\x93\x92\x77\xba\xa6\x84\xf8\x98\x94\x3c\x14\x60\x46\x66\x79\xf7\x4f\xdf\xd3\xb0\x0d\xb1\xa6\x8a\xba\x6d\x5b\x21\x72\xdd\x20\x54\x59\x93\xe6\x24\xda\x16\x7d\x8e\x60\x12\x97\x1c\xd5\xa3\x82\x71\xab\xdd\xb5\xe2\x7d\xe0\xbb\x3c\x15\x1f\xe5\x7c\x9d\x5f\x7e\x65\x44\x9b\x5a\xef\x75\x9f\xf7\x71\xc5\x55\x33\xa6\x4e\xcd\xd8\x68\x2b\x61\xfe\x00\x42\x40\xb9\x2a\x49\x79\x96\xe7\x91\x42\xec\xf8\x24\x17\xfa\x48\x52\x1c\xcc\xa9\xbc\x21\x46\x1c\xeb\xf0\x74\xac\xdb\xa4\xaf\xda\x0e\xa3\x18\x01\x74\x5e\x3c\xe1\xde\x6f\x57\x1a\x57\x6d\x65\x57\xe6\xd6\xec\xe5\x6e\xf1\x2f\x6e\x8a\x6f\x36\xbf\xda\x46\x9f\x30\xf9\xf0\x8c\x61\x7d\xab\xdd\x6e\xa2\x25\x51\x0c\xc9\xe2\x59\xc8\x61\x91\x8d\x2d\x46\x62\x41\xec\x87\x8a\x2a\x38\x31\x0a\x68\xc9\x0e\x35\xe0\xb0\x8e\xee\x45\xa4\xc5\x79\x5e\x28\x41\x4e\x89\x09\x9e\xe5\x5f\x34\xf7\x87\x21\x25\xcf\xbc\x55\xa6\x74\x5a\xa9\xc7\x4b\xea\xbc\xb6\xf2\xa3\x22\x35\xd1\x5a\x3a\xed\xca\xf4\x71\xdd\x71\xa9\x39\xf9\x9b\x2e\x99\x98\x3c\x87\x20\x24\x47\x56\x02\x99\x15\x15\xdb\xf1\x08\x06\xc9\xa4\xca\x8b\x86\x4f\x52\x84\x10\xd8\x50\x30\x30\xa2\x0d\x9d\x08\x7c\x42\x03\x81\xeb\xcb\x96\xa4\x5b\xe9\x90\x79\xb5\x9f\xf8\xfd\x37\x3d\x0b\xfc\x51\xe9\xf5\x4a\x55\x4a\xcf\xfb\xfd\x95\x53\xf7\xcb\xb6\x6f\x3a\x3a\x5c\x53\xad\x7e\xd7\xf9\xf9\xeb\x64\xab\x99\xc4\x85\x76\x2a\xb0\x6d\xc3\x45\x84\x8b\x65\xde\x10\x42\x8b\xb2\xb1\xe3\x44\x0a\xe7\x32\x9e\xc6\xb1\x12\xc6\x9e\x82\x54\x99\x85\x0c\x47\xea\x96\xab\x02\x68\xbd\x78\xc2\x7f\xb4\x2d\x3a\x7a\x59\x73\x94\x65\x67\x50\xf1\xb5\xcb\xd3\xb6\xcd\x8e\x6f\x0c\xec\x7c\x7c\x44\xd7\x9c\x37\xb2\x0c\x5c\x36\xe6\xa3\xb0\x67\xf2\x1c\x02\xb1\xc8\x06\x4e\x48\xb3\xbc\xcb\xbb\x16\xc7\xb8\x22\x56\x78\x8e\x86\x06\x47\x23\xd5\xb5\x21\x0f\x74\x21\x32\x43\x47\xf2\x55\x2e\x80\xb1\x41\x90\x4a\xe2\xa2\xae\x52\xed\x11\x07\x2f\x66\x6d\xb0\xeb\xd3\xc7\xe5\x8a\xcc\x2d\x5f\xe0\x72\x99\x4f\xef\x15\x59\x9e\xef\x74\xe5\xb5\xdd\x52\xe4\xa7\x0d\x7e\x7e\x33\x79\x27\xec\xb3\xa1\x21\xd9\xc0\xb0\x64\x4c\x71\xb2\xea\xda\xac\xce\xfb\x31\xa9\x07\xbe\xa1\x91\x04\x50\x3d\x25\x0c\xf4\x30\xd6\x29\x59\xd7\x29\xdb\x05\x2c\x9b\x80\x43\xef\xc4\x5a\xb3\xdd\x91\x4e\x6d\x4f\xd7\xb0\x3f\x58\x52\xa8\x40\x95\x4b\xa5\x1a\x6f\x1b\x3a\xc0\xbe\x3c\xbc\x47\xd5\x0a\xcf\xd4\x0f\x17\xeb\x49\x2c\xea\xbc\x20\x70\x44\x0b\xdb\xa1\xa7\x88\x26\x08\x48\xc0\xd8\x21\x43\x78\xb4\x64\x43\x86\x09\x08\x99\x65\x25\x2a\xc0\xbe\x0a\x64\x2c\x3b\x02\xa9\xff\x07\xf7\xd8\xbf\xcd\x7d\xf4\x6b\xfd\xa1\x51\xe5\x13\x37\xbf\xaa\x3c\xb6\x66\xeb\x1a\x53\xa7\x2e\xdc\x36\xb4\x2b\xff\x66\xb6\xf3\x2b\xc2\xa5\xb7\xd7\x7e\xe3\xe5\x4b\xde\x8b\x46\x52\x42\xcb\xc1\x21\xeb\x52\x2c\xcf\x0b\x26\xeb\x29\x04\x87\x2c\xcc\xd0\x88\x53\xfc\x00\x51\xb1\xc5\x39\x74\x48\xd3\x61\xe4\x08\x14\x41\x1a\x86\x83\x13\x5f\xb9\xf6\x15\x7e\xc8\x3d\xf3\x7e\xbd\x27\xb9\xb7\xef\x9d\xcd\xec\xaa\x55\xa5\x8a\xf5\x65\x89\x57\x4e\x7c\x92\xb7\xe2\xa2\x2b\x03\xea\x7d\x5d\x35\x63\xb2\xc1\x89\x8b\x3a\x83\xc0\x81\xa9\x9a\x82\xe6\x69\x9a\xa8\xeb\xbe\xcd\x9b\xb2\xa8\x04\x11\x64\x63\xde\xe7\x1c\x2a\x26\x90\x25\xf2\x31\xcb\x21\xda\xa1\x44\xd2\xd6\x12\xd0\x05\x5c\xfd\x16\xb4\x39\xfc\x6d\xb7\xc5\x05\x0e\xee\x7a\x05\x4c\xae\x55\x65\x60\x89\x7e\x3d\x8b\x3e\x18\x72\xe5\x5c\xf7\x59\x3f\x77\xf8\xcd\x48\x9e\x8e\x34\x2b\xca\x3a\x23\x21\x85\x20\x15\x1a\x87\x9e\x6e\x98\x3e\xef\x85\xba\xe9\x73\x1e\x11\xaa\xb2\xef\x52\x16\x63\x8a\x34\xb2\x15\xa4\x0b\xbe\xcc\xba\x9c\x92\x0e\x19\x5d\xee\x0a\x8b\xca\x2d\x28\x72\xe2\xe6\x85\xd3\x1b\x33\xaf\x9e\x7a\x7c\x7e\x91\x1f\x67\x2f\xd7\xde\x28\x3d\x7d\xf2\x92\x8b\xbf\xd5\x3d\x4f\x7c\x90\xbc\x28\xa1\x6a\x24\x4d\x58\x3c\x22\x43\x45\xa7\x28\x57\xa5\x04\x8f\x25\x78\xac\x41\x46\x51\x04\x0a\x63\xc3\x72\x6d\x09\xcb\x12\xcd\x79\xb1\x04\x91\xea\x92\xe8\xc5\x2b\x57\x7e\xc1\x55\x7d\x33\x2e\xed\xc6\xc7\x4e\x4d\x13\xda\x35\xb9\xbe\xa0\xce\xa1\x94\x4e\x9f\x8d\xfc\x68\xc6\x89\x42\x4b\xb7\xd7\x6c\x9c\xb1\x85\xf7\xc4\x11\xc2\x61\x65\x13\x05\x4e\x28\x70\xa1\x4f\x38\x12\xc7\x47\x41\x28\x99\x1c\x6b\x42\x37\xd6\x4c\x91\x86\x11\x2b\x7b\xbe\x61\xd8\xba\x0a\x64\xca\xb0\x62\xfa\x45\x73\x57\xbf\xbc\x7c\x7e\x9f\x99\xad\xda\x4b\xe8\xcb\x09\x43\x72\xee\xde\xf4\xe1\xc9\x55\xeb\xd5\x72\xc7\xa7\xbc\xd3\xc5\x19\x2d\x91\xc4\x47\x49\xec\x65\x5b\x00\x3b\x9e\xe2\xf1\x31\xf2\x4d\x03\xc6\x3c\x13\xa9\x94\x1f\xcb\x92\xcd\x71\x88\x22\x68\xe0\x01\x8e\x67\x2d\xcf\x82\x92\x14\x49\xaa\x44\xc5\xe9\xf1\x54\x67\xc9\x26\xa4\x3e\x39\x71\xf9\x9d\xb7\xaf\xac\x1d\xbb\xbe\xd5\x4f\x6f\xbf\x53\x2d\x75\xdc\xd0\xf3\xf4\xff\x63\xed\xbb\xc3\x9a\x5a\x9e\xbf\x03\x02\x52\x2c\x20\x16\xec\x88\x62\xaf\x49\x48\xec\x42\xc8\xb5\xf7\xde\x35\xbd\x77\x52\x6d\x70\x50\x41\x50\x44\xc5\xae\x88\x28\x62\x41\x29\x16\x8a\x88\x5d\x50\x10\xec\x05\x54\x2c\xa8\x28\x22\x8a\x10\x44\x29\xef\xb3\x72\x26\xbf\x97\x7c\xbd\x4f\x7c\xee\xe3\x3f\xf7\x86\xb8\x67\xcf\xee\xec\xcc\xe7\x33\x33\x3b\xbb\xd9\x68\x73\xf7\x73\xf3\x35\x6d\xeb\x98\x8d\x5b\x67\x15\x1c\x0f\xf2\x2d\x3b\x1c\x2d\x3d\xf5\xec\x64\xc2\xc6\x26\x27\xbe\xce\x26\x77\x3f\xff\xe8\xc7\xc6\xb7\xe2\x1e\x75\x41\xab\x19\xb2\xc6\xad\x2b\x1c\x8e\x4c\x74\x4d\x6a\xa2\xed\x14\x9e\xe9\xa2\x89\x8f\x68\x37\xed\xe0\x8e\x78\x4a\xf0\xc6\xb6\x1f\xf9\xd3\xfb\xde\xa9\x13\x6f\x6f\xdc\x5a\xbd\x32\x3d\xda\xea\xd3\xc1\x14\x79\xd2\xa5\xa9\xfe\x9f\x86\x73\x86\x16\xb9\x77\xca\x6c\x7a\x60\x87\xf7\xe9\x29\x4d\xfc\xa6\x65\xb2\x1a\xb7\x6e\xbd\x9a\x7a\x26\xb8\xae\xa6\xd0\x37\x81\x30\x7a\x4f\xda\x8c\x77\x75\x86\x6d\xf3\xb7\xdf\x78\xda\xa1\x6e\x61\xdb\x79\x7b\x8f\x38\x9e\x6f\xdc\x5a\x9b\x1d\xb8\xad\x95\x78\x4e\x37\xc3\xab\xb1\x5d\xa3\x32\x23\x3a\x3d\x98\x94\x78\xfc\xd2\xe2\xfc\x2a\x3a\x27\xb9\x62\xcc\xa2\x9f\xdf\x2a\x6d\xff\x6c\xfb\x18\xa3\xfb\x10\x08\xde\x8d\x6f\x65\x48\x36\xbe\x73\x68\xd5\x74\xc9\x5c\x97\x24\x12\x6f\xcd\xba\xd7\x73\x3e\xb8\xf7\x74\xe8\xbf\x34\x30\x39\x08\x2b\xf5\xaf\x57\x0f\xfa\xf9\x17\xaf\x6f\x63\x4a\xa4\x6c\x96\x96\xac\x91\x08\xfc\xd4\x3a\x9e\x5c\xaa\x90\x6b\x65\x2c\xa6\x9e\x41\xd6\xcb\x85\x42\x09\x99\xed\xc7\x62\x70\x95\x2a\xa2\x81\xac\x17\x33\x74\x1a\x26\x53\xa9\xfd\x7d\x25\x40\xc6\x8d\xc2\xd0\xf0\xee\xba\x5e\x87\xdc\x9e\xc6\xc6\x2f\xb8\x91\xc1\x29\xfb\x29\x51\x77\x1a\xf1\x7d\x6e\x6d\x26\xcf\xaa\x6b\x85\xf3\x5f\xbc\xf9\x53\x2d\x10\xb1\x75\x6c\x25\x87\x4a\xa4\xea\x54\x7e\x64\x3d\x95\xac\x55\x7a\xf9\xa9\x14\x1a\x0d\x53\xa0\x53\x33\x49\x62\x3d\x5b\x29\x53\x1a\xf4\x3a\xa6\x4c\xad\x60\x93\x48\x8d\xeb\xfd\xff\x8f\x1b\xda\xe6\x75\xef\x59\xf9\x3a\x41\xde\xa2\xf9\xe8\xbc\x6e\x83\x4b\x5e\x06\x68\xd7\x5c\xbd\x7e\xa4\x85\x43\x8b\x39\x3f\xea\x23\x92\xba\xfd\xb7\xcb\x7a\x7e\x3b\x64\x29\x5b\xe0\xa7\x94\xcb\x74\x4c\x21\x5b\xa8\xe7\xcb\xa9\x0c\x12\x89\x27\xd6\x31\x88\x24\xb1\x97\x1f\x43\xab\x52\x8a\xd5\x24\x12\x89\xa8\xe4\xcb\x85\x7c\xb1\x4e\x24\x36\x88\xfc\x7e\x73\x0d\xa1\xfb\x89\x3e\x27\x8f\x7f\x28\xb0\x89\x1f\xd3\x6f\xdc\xbb\x1e\xe4\xa3\xe4\x25\xd2\x63\x6b\xde\x24\x6f\xae\xfb\x36\xb1\xe5\x5b\xc7\xf2\x9c\xbf\x58\xf5\x29\xd2\x73\x58\x0c\xa5\x54\x2f\x10\xb1\xf8\x1c\xbd\x9e\x29\x21\xa9\x98\x06\x1e\x4f\x48\xe5\xfb\xf9\x69\x98\x22\x0d\x57\xc6\x31\xa8\x59\x12\x2f\x8e\x5a\xed\x25\xe6\x31\x19\x86\xff\x3b\xa9\x78\xb4\xe9\x9f\x25\xa2\x30\xba\xbb\x0d\xc1\xa5\x71\xe1\xfc\x43\xcf\xd2\x90\xaa\x5d\xb4\x0f\xfe\x1f\x46\x6b\x7d\x09\xf7\xfc\x7b\x8e\xdb\x7d\x6e\xd6\x15\xdf\xe5\xf7\xb8\xdf\x7c\xe4\xbb\xf2\xf2\xff\xe2\x69\x06\xa9\xc4\x4b\xa2\xe7\x0b\x78\x6c\x3f\x32\x45\x26\x12\x50\x58\x02\xad\x56\x43\x54\xca\x64\x12\x01\x57\xc5\x94\x11\x45\x32\x99\x41\xa7\xd6\x73\x05\x52\x9e\x40\x26\x66\x8b\x05\xe4\xdf\xfb\x17\x8f\x55\x53\xce\x8e\x14\x16\x1e\x4d\x0c\x9b\x69\xe8\x46\x39\xdf\xb2\x72\xd6\xc4\xd5\xa3\x9d\xd7\x1f\x7b\x7d\x63\xde\x63\x55\xee\xae\xff\x76\xb0\xf1\xf7\x39\x10\xbd\x84\x28\x26\x8b\x88\x5e\x14\x12\x4b\x22\xe1\xa0\x45\xa1\xa8\xd9\x1a\x89\x42\xc6\xe7\x68\xc4\x42\xa2\x9a\xe3\x27\x35\x48\x99\x6c\xad\x5e\xc5\xd5\xf3\x45\x3a\x3f\xd1\x6f\x74\xa8\x6e\xd2\xf2\x36\xec\x8a\xa5\xfc\x71\x1e\x21\xae\x7e\x87\x53\x16\x1e\x5e\x9f\xd5\x3e\x69\xcf\xdc\xda\xfe\x9b\x3e\x9c\xd6\xef\x9a\xe9\xf4\x17\x1d\x4e\x1e\x57\x68\x90\xf3\xfd\x48\x3c\xb9\x48\xc2\x90\x13\x55\x1a\x0a\x49\x48\x96\x13\x99\x02\x92\x5c\x66\x90\xb2\x38\x2c\x0d\x83\x4a\xa6\xb2\x24\x7c\x0d\x4f\x2d\xe5\x78\x29\xfe\xbf\x6d\xa5\xc6\x07\xbd\x57\xb6\x0e\xaa\x5f\xe1\x3f\x74\xb3\x8e\x3b\xd1\xd6\x73\x03\x89\x70\x63\x77\xcd\xea\xd5\x5d\x8e\x84\xc8\x5a\xdc\x8c\x12\x65\x2c\xfc\x7b\x56\x2a\x54\xab\x54\x0c\x9e\x41\x4b\xf5\x92\x2a\x58\x0c\x91\x17\x45\xa1\xd5\xf0\xa5\x4c\xa2\x96\xa3\x65\x88\xf9\x62\x26\x8b\xaa\x53\x72\xc5\x62\x96\x96\xe8\xa5\x94\xeb\xa5\x4c\xaa\xf2\x5f\x7e\x56\x78\xd7\xe2\x59\xa7\x2e\xb8\xd5\x54\xb9\x0e\x64\xbf\xeb\x52\x91\x1f\x51\x2b\x2b\xdb\x3a\x8a\x39\xce\x65\x73\x69\xc4\x15\x2b\xc5\xdb\xbf\x58\xe7\x2f\x97\x2a\x78\x5e\x3c\x89\x88\xc8\x96\x28\x65\x5e\x24\xa5\x58\xc7\x66\xf8\x49\x0c\x52\x09\x5b\xa2\x26\x29\x48\x7e\x2a\xb2\x50\xc4\xf1\x93\xa9\x94\x64\xbe\x41\x22\x20\x8a\x65\xca\xff\x3d\xe2\x62\x29\xe7\x87\xd1\xed\x9b\xd9\x98\x1d\x1d\xdd\x57\x4e\x9a\x39\x80\x3c\xb5\xb3\xea\xdc\x07\x43\x5a\xf8\xf2\x85\x3f\x3b\x76\x1d\x33\x9a\x35\xc6\x71\x68\xd6\xe1\xaf\xd6\xc5\xb7\xee\xfe\xbd\x45\x21\xb3\xc4\x0a\x83\x48\x2b\x56\x30\x44\x7a\xbe\x5a\x20\x97\x28\xa5\x06\x8a\x9e\x44\x12\x32\xa5\x0c\xbd\x92\x45\x61\x2b\x29\x62\x0d\x59\xc1\xe4\x90\x65\x1a\x92\x9a\xa4\xe5\x0a\xfe\xa5\x54\xed\xda\xd2\xf8\x80\x63\x4f\xfe\x99\xf7\x79\x79\x69\x7e\xde\xe1\xe1\x8c\xbb\xae\x27\x4e\xad\x2b\x7d\x73\x6f\xd6\x2c\xf1\xf4\xf2\x37\xb1\x95\x7f\x51\xf5\xf5\x32\x83\x41\xc7\x54\xc9\x38\x3c\x15\x5b\xaa\x13\xf1\xbd\xfc\x0c\x44\xb1\x56\x27\x92\xeb\xc5\x5a\x0e\x9f\x2d\x65\xb0\xa4\x52\x2d\x89\x4c\xd5\x69\x54\x64\x9d\x8e\x4c\x56\xfe\x4b\x9d\x3f\x79\xfc\xba\x2f\xda\x1e\xc3\x02\xc7\x7f\x36\xdc\xe8\x1d\x79\xba\xe9\xe6\xa5\xd7\x4f\xd8\x7c\xbf\x98\xf5\x89\x36\x35\x66\xde\xbd\x8b\xcd\xfe\x9e\x1e\xf1\x45\x5a\xb1\x9f\x40\xa2\x27\x0b\xf5\x14\x3d\x53\x41\x25\x31\xb9\x12\x2a\x8b\x28\xf6\xa3\xe8\x39\x44\x89\x8a\xc3\x60\x0a\x0d\x7c\xb9\x81\x24\xd7\xb0\xd4\x2c\xb6\x81\xef\x67\x90\xfe\x5e\xca\x67\xaa\x6b\x67\x15\xcd\xde\xf9\xd9\xef\x2e\x39\xf4\x7d\xdf\xab\xf3\x83\x59\x37\x8b\x6e\x1f\x58\x79\xbf\xf3\x97\xf6\xe3\xae\x7f\x09\xfb\x6f\xb5\x17\xbf\xdf\xb7\x26\xf3\x59\x7e\x52\x15\x4f\x2e\xe4\x91\x05\x54\x32\x93\xa2\x51\x19\x98\x4c\x09\x59\x4f\x35\x90\x85\x7c\xae\x41\xab\x51\x71\xd9\x2a\x06\x9f\xaa\x54\xa9\x84\x5c\x8e\x48\x2c\x96\x9a\xa4\x0c\x24\x65\x29\x1b\x8c\xd1\x67\x10\xfc\x09\x8d\x2b\x8d\x9d\xdf\x4d\x17\xb4\x96\x17\xce\xf5\xbd\x55\xff\x63\xfe\xf3\xac\x7d\x56\xdb\xe6\xb5\x25\x1f\x1d\xb2\xae\xba\xe5\x0c\x56\x16\xff\xf2\xea\xbf\xb7\x28\x64\x03\x49\x2c\x97\xb3\xc9\x32\x0d\x85\xa7\x10\x7a\xc9\x18\x6c\x2f\xbe\x46\xcb\xe6\x6b\x45\x0a\x86\xca\x4f\x23\xf2\xe3\x92\x35\x5a\x39\x8b\xca\x57\xf8\xa9\x39\x7e\x3a\x9d\x44\x61\xf8\x5f\xc4\x97\x8e\xdd\xd1\x63\xeb\x29\x8f\xde\x2d\x35\xa9\x31\x34\xec\xf3\xeb\xac\x33\x6b\x3c\x32\xad\x37\xa8\x46\xdf\x6b\xb5\xec\xdd\xf6\x5e\x7f\xf1\x77\x07\x39\x06\x91\x8e\xa8\x25\xca\x79\x64\x39\x8f\xac\xa1\xa8\xb5\x54\x1d\x5b\xc8\x90\xf2\xa8\x14\xad\x88\x2d\x96\x31\x25\x1a\x11\x53\xad\xa5\x32\x74\x4a\x99\x5c\x47\xf4\x23\x91\x85\xcc\xdf\xab\x7d\xaf\xed\xf2\xe5\x39\x33\x43\x5a\xd8\x9e\x63\xcf\x1a\xb3\x9d\x92\xcc\xec\xb4\x68\x5f\xc9\xb7\x70\xe9\xca\x88\xa9\xe5\x5c\x77\xf6\x7f\xbb\x27\xe3\xb7\x3a\xc4\xe0\x0a\x59\x64\x81\x5a\xad\x65\xe8\xf5\x0a\x26\x4f\x4e\x26\x51\x19\x7c\x9d\x54\x45\x32\x78\x69\xa8\x54\xa5\x88\xc9\x67\x11\xc9\x1a\x83\x5c\xe1\xa7\x13\x49\x78\x72\x22\xe7\xdf\x7e\x59\x60\x77\xbb\xba\xb4\xf9\x3c\xcf\x6b\x0b\x56\xec\x7e\x91\x7d\x71\xe1\xa8\x43\xe1\x39\x2f\x68\x11\x53\xfa\x9f\xb6\xde\xfe\xc8\x79\xcf\xf4\xff\x16\x04\xff\x56\xca\x7e\x5c\x36\x5b\xa6\xd2\xf1\x65\x2a\x9d\x80\xa9\x93\xfb\xc9\xa9\x2c\x91\x17\x83\x49\x94\x68\xd4\x62\x3f\x99\x44\x28\xe6\x2a\xc8\x0c\xaa\x50\x2a\xf0\xa2\xf8\x71\x0d\x2c\xbe\x90\xc1\xfa\xfd\x90\x59\xe9\xa1\xfe\xa2\x7e\xcd\x0f\xee\xb8\xef\xf3\xee\x44\xf7\xbd\xd5\x4d\xab\x4a\x5a\x8e\xd5\x77\x3b\x45\x6c\x32\x13\xbb\x71\x26\xe0\xbf\x15\xc4\xfc\x36\x6e\x27\x8a\xf4\x64\x01\xd3\x4f\xae\xe0\x12\x45\x7e\x5c\x99\x5a\xca\x11\x09\xa4\x52\xa9\x4a\xad\x91\x70\x14\x0a\xa1\x4e\x4b\x22\x69\x05\x64\x0d\x89\x6a\xa0\xa8\x38\x64\xb6\x1f\xcf\xa0\x37\x05\xc2\x70\x6b\x96\xa5\x9d\x18\xcc\xd7\xbb\xb5\x77\x63\x8e\xe2\x4c\x4f\xdf\x3f\xf2\x79\xc2\x10\xaa\xf5\x9c\x03\x15\x75\x5e\xc5\x0f\x9a\xbf\x2d\x67\x34\x6d\x3b\x23\xe1\xc5\xf1\x49\x35\x2f\x0b\xe8\x7f\xb1\x48\xc9\x8b\xab\xa3\xf8\xf1\x49\x5c\x25\x49\x2a\xa1\x92\x45\x12\x19\x49\x2f\x60\xa8\xbc\x74\x32\xbe\x4c\x47\x12\x4b\x48\x62\x35\x4b\xc3\x26\x69\xb9\x0a\x1e\x8b\xc4\xd3\xf2\xa9\x62\xf1\xef\xd7\xa4\xd3\xb2\x22\x6a\xd7\x87\xc6\x4b\x76\xbd\xcf\x6d\xe5\x0d\xe1\x77\x26\x2d\x0d\x7e\xff\x32\xa2\x53\x51\xb0\x7f\xdc\x85\xee\x79\x8b\x86\xfc\xc5\x7b\x91\xb5\x4a\x2a\x4f\xc2\x13\xf0\x85\x1a\xa5\x56\xc4\x56\xb1\x79\x14\xb9\x54\x43\x55\xb2\x99\x1a\x95\x9e\xac\xf3\x62\xf9\x69\x64\x42\xa5\x5a\xc4\xe4\x2b\x98\x54\x16\x4f\xc4\xff\xb7\x53\x52\xf6\xa9\x1d\x6f\x2b\x6b\xbb\x6d\x24\xa7\x6f\xaf\x58\x36\xb0\xe6\x8d\xba\x66\x51\x45\xe2\x9b\xcc\x74\x0f\x4f\x51\xa7\x6b\x1e\x3d\xec\xfe\x62\x1a\xde\x4f\xc2\x63\x7a\x49\xc9\x2a\x8d\x96\xed\x27\x61\x73\xf4\x44\x92\x4a\x27\x16\xea\xb5\x7a\x2f\xa6\x84\x2b\x97\x50\xf5\x1a\xb5\x50\xcf\xd6\x93\xd5\x3a\x9d\x8e\xa1\x33\x88\x04\xff\xf2\x43\xf2\xf1\xdc\xf5\x41\xfb\x9c\x5d\x52\x26\xdc\xa2\x5c\x1b\xd2\xa7\x9b\xaf\xdb\xa5\x97\xb3\x1d\xa7\x5b\xdd\xd4\xd9\x87\x0a\x03\xd5\xc3\x9f\xff\x3d\xe7\x45\xce\xd4\xa9\x99\x32\xbe\x9e\xc9\x23\x09\xc5\x2a\x3f\x11\x4b\x43\x32\xf0\x25\x02\x12\x55\x21\xf7\x22\x51\xbd\x84\x5e\x44\x22\x93\x21\x50\x0b\xc8\x3c\x2f\x05\xc3\x8b\x67\xd0\x88\xff\xef\xb2\x61\xd0\x7c\x4b\xd9\x14\xcc\xb7\xb5\x95\x55\x63\xcd\xb7\x5b\xda\x6e\xda\x43\xef\xa0\x56\x1e\x4f\xce\x34\x21\x3c\xee\x33\x75\x5f\xcc\xbd\xad\x83\x57\xad\xff\x36\x5f\xb4\xf0\x38\xa5\x66\xe6\x7f\x2b\x93\xfe\xad\x69\xeb\xf4\x5e\x1c\xb6\x96\x2f\x92\xf8\x49\xa9\x72\x96\x50\xc5\x53\x71\xa5\x72\x32\x47\xe6\x25\x65\xca\x90\x77\xc6\x53\xfa\xe9\xe4\x6c\x25\x97\xa5\x33\x10\xa9\x1a\xb1\x56\x25\xf8\x97\x9f\x0b\xf7\xb4\x7b\x33\xea\xde\xa8\xe7\xd4\x25\x31\x53\x57\x0d\x38\xbe\x84\x1d\xae\x5e\xd7\xff\x2d\xbb\xa5\xf7\xc3\x6a\xc7\x75\x1b\x73\x5b\xcd\xfe\x9b\x67\xef\x95\x14\x3f\x95\x90\xc7\xe7\xca\x75\x64\xb6\x96\x22\x15\xaa\x18\x4c\x96\xde\x20\x57\xaa\x95\x0c\x26\x53\xcf\x50\x50\x78\x6c\x36\x97\xa7\x11\xc8\x85\x0c\xbd\x8a\x27\x27\xfe\x4b\x99\xa9\xfc\x62\x6a\x8f\x14\x99\x5d\x74\xfc\xf0\x97\x7b\x6e\xab\xc9\x86\x45\xdb\x9b\x2d\x36\x84\xd2\x28\xea\x9f\x17\x7b\x3e\xe9\x30\xfa\xbf\xa5\xe6\x7e\x5f\x51\x28\x60\xf3\x59\x4a\x99\x86\xc4\x95\x29\xa8\x24\x81\x50\xa1\x20\x0a\xe5\x3a\xbd\x5e\x48\x91\x4a\x24\x64\x05\x5f\xa2\x31\x28\x04\x0c\xae\x9e\x21\x10\x32\x59\x72\x32\x85\x4b\xfa\x17\x66\xcd\x66\x9e\x58\x90\xb5\x39\xd3\x25\x61\x45\xdd\xb4\x41\xd8\x47\xd7\xeb\xe2\x4c\xe3\xfc\xdc\xd0\xd3\x97\xdf\xdd\x29\xa7\xf5\x1f\xfb\xdf\x9c\x81\xdf\xbb\xed\x44\x12\x97\xcb\x91\x6a\x0d\x5a\x92\x48\x2a\xe6\xab\x54\x5c\xbd\x42\x2a\x16\x12\x85\x3c\x96\x42\xa9\xe3\x13\xbd\xbc\x18\x0c\x9d\x88\xa3\x12\xf9\xf1\xf4\x7c\x11\x99\x21\x65\x11\xff\xe7\x62\x0f\x4b\x99\x41\x8c\x6e\x1d\x6c\x6d\xdf\xf8\x06\xaa\x27\x03\xcf\x9f\xac\xff\x1a\xf3\x31\xfa\xc9\x8c\x2a\xb6\x4b\x27\x75\xd8\x0b\xe9\xb6\xcb\xb4\x09\xd4\x67\x05\xb3\xc7\x84\x6d\xea\x50\xf4\x17\x0f\x34\x78\x49\xd4\x64\xb1\xd6\xc0\x63\x28\xd4\x12\x3e\x0a\x41\xb4\x2c\x0e\x5f\x65\x10\x0a\xb8\x42\x2f\x29\x5f\x67\x20\x0b\x34\x42\xa1\x9f\x9e\xaa\xe6\x30\x28\x1a\xb2\x90\x44\xfc\x97\xfb\xe2\x8e\x3f\x39\xb7\x37\xe7\x4a\xd2\x92\x9e\x39\xae\xb5\xbd\x67\xdd\x28\x6a\x3a\x69\xc2\xf5\xcd\x33\x1e\xbc\xf3\x4c\x5e\xfd\xf6\xe1\xa6\x98\xff\xf6\x4b\xf9\xbf\x3f\xba\xa6\xe3\x7b\x49\x75\x64\x2a\x57\xc4\xd5\xb0\xd4\x4a\x8a\x5a\xa7\x57\x52\xa9\x54\xb9\x52\x22\x66\x49\xa5\x02\x35\x4b\x40\xa4\x08\x44\x22\x32\x49\xed\xa7\x12\x51\xc8\x6c\x4a\xe3\xcb\xf0\xff\x6f\xc8\x93\x8b\x56\x78\x50\x8b\xd7\xd9\x09\xfc\x3c\xed\x57\xda\x47\xab\x2a\x38\xb6\x43\x3c\xa3\x1e\xd9\xac\x28\x3b\xd5\x73\xc3\xe1\x59\xaf\xff\x9e\xb5\x52\x78\x5c\x16\x4f\x27\x25\x8a\x74\x52\x95\x54\xcf\x12\xb3\x88\x22\x9e\x4a\xc7\xd7\x12\x55\x7a\xbe\x1f\x45\x41\xd6\x6a\x0c\x24\x11\x57\x2d\x92\xb3\x39\x72\xa2\x50\x4f\x56\x37\xfc\xdc\xda\xff\x26\x6a\x5a\x64\x48\x3f\x33\x46\xf6\x2a\xdb\x77\x7e\x85\xf5\xa4\x5a\xf9\xe2\xd9\xa1\x15\xbd\x4b\x0e\x6f\x1a\x51\xf4\xad\xb2\xf9\x02\xd1\xc2\xbf\x77\x21\x3e\x53\x60\x90\x48\x24\x44\x2d\x95\x21\x25\xf9\x09\x65\x12\x22\x4b\x4c\x95\x2a\xbd\x84\x6c\x99\x8c\xc7\x97\x6a\x75\x62\x8e\x84\xc8\xd3\xb0\x45\x7a\xbd\x88\xa2\x12\x91\xd5\x5e\x6a\xe5\x6f\x7e\x48\x29\xbf\xdd\x81\x92\x04\xfd\xc3\x47\xed\x2f\x8e\x98\x75\xc3\x2f\x69\x5b\xd2\x22\xc1\x9c\xe8\x8f\xc3\xd5\x04\x37\x52\xcd\xfa\xca\x8f\xdf\xff\xde\x36\x05\x43\x2f\xd7\x4b\xf9\x2c\x01\x4b\xa2\x24\x93\x34\x14\x83\x98\xa5\x24\x91\x18\x3c\x81\x5c\xc1\x67\xf2\x95\x5a\xa6\x84\x47\x91\x8a\xa8\x06\x09\xcb\x4b\x46\x51\x6a\xc9\x5a\xae\xf8\x5f\xee\x66\x2a\x2c\x58\x5a\x69\x9f\xf6\x2a\xa6\xfa\xf6\xed\x89\xa5\x64\x37\xce\xda\xad\x59\xde\x6d\xa6\x9c\xdd\xed\x8b\xad\x1b\x30\x79\xd5\xa9\xff\x76\x5d\xfb\xef\x33\xc0\x0c\x91\x90\xaa\x60\xb1\x79\x64\xbd\x1f\xd5\x4b\xaa\x52\xf3\x88\x12\x86\x5e\x25\xe5\xc9\x75\x52\x06\x57\x25\xf4\xe2\x68\x28\x7c\x1d\x85\xa2\x14\x1b\x48\x5c\x3d\x83\xcc\x10\x89\x4d\xe0\x02\x69\x79\x4b\x1b\x09\x18\xdd\x9e\x60\x6d\x1f\xd8\x48\x87\x86\x1c\x7a\x50\x7c\xe6\x54\xef\x27\x7b\xb9\xed\x14\x32\xe2\xb2\x74\x17\xe1\xd0\x99\xfd\x02\x57\x1c\x0d\x3b\x33\x31\xb0\xc4\x21\xff\xd6\xdf\x03\x17\x8d\x90\xaf\x61\x69\x55\x0c\x8e\xd0\xa0\x95\x8b\xe5\x1a\xa6\x86\x4d\x91\xb1\xb4\x72\x9d\x42\xac\xa5\x8a\x14\x0a\x2f\xad\x4e\x27\x92\x4b\xbd\x88\x64\xb6\x54\xa0\x63\x69\x39\x86\xdf\xfc\x6e\x32\x71\x7b\xd9\xa4\x95\xc3\x07\x0f\x54\x3d\x65\x26\x46\x88\x3b\x3f\x60\xe4\xbb\xd4\x35\xc9\x67\xbf\x18\x31\x7e\xf2\x95\x1b\x77\xae\xff\x37\xd7\xec\xf7\x7b\x47\x22\x06\x8b\x2f\x17\x30\x29\x7c\x9e\x44\xa3\xa0\x0a\x19\x2a\xad\x81\xab\x16\xf2\x64\x7a\xaa\x50\xc4\x25\x2a\xa4\x02\x8e\x41\x25\x96\xe8\x54\x7c\x09\x87\x24\x67\x10\xfd\x54\xdc\xdf\xa7\x0f\x92\xc3\xfd\x63\x12\x2e\xa8\x92\xd9\x0f\xad\x0f\x28\xc6\xdc\x0d\xa7\x39\x29\x3f\x7d\xee\x38\x7b\x6b\xee\xa6\xf0\x26\x11\xb9\xf3\xfe\x5b\x95\xcf\xef\x73\xdc\x64\x83\x40\xa2\xe1\x0b\x0d\x5e\x5c\xa1\x4c\xa8\x94\xb1\xd8\x44\x09\x4b\x6c\xd0\x68\x98\x7c\x01\x93\xa2\xd0\x79\x49\x25\x44\x16\x83\xc9\x14\x70\xb9\x2c\x22\x4f\x6b\xe0\x8a\x25\xbf\x1f\x72\x50\x5e\x44\x98\xa7\x4f\xe6\x91\x6e\xe5\x15\x9f\x3b\xa7\x61\x9d\xc6\x5f\x3b\x2f\x1d\x9f\x39\x76\xe3\xe3\xa1\x17\x07\xcc\x4c\xae\xdb\xf8\x17\x8b\x3a\x04\x44\x9d\x44\xc1\xe0\x1b\xa4\x14\x2f\x11\x9b\x22\x21\x49\x88\x5c\x06\xd5\xcb\x8b\xc3\x67\xeb\xa9\x2a\x15\x97\xca\xe7\x0a\xc8\x0c\x8d\x9c\x29\xd3\xb1\x24\x1c\x35\x59\xcb\xe6\xfe\xcf\xad\x8e\x96\x76\xc4\x30\x7a\x33\x82\x4d\xb7\xc6\x9c\xda\xe5\xa8\xba\x47\xd2\xc1\x8b\x3b\xba\x0d\x7d\xf3\x31\x6c\xf6\x54\xd2\x94\xf3\x35\x23\x33\xe6\xca\x25\x15\xb3\xab\x9b\xb9\xf7\xbe\xf7\x17\x7f\x1d\x5a\x4b\x14\x92\x89\x22\xaa\x46\x20\x50\xb2\x48\x7c\x11\x91\x63\x20\x6b\x05\x52\x21\x87\xc9\xa0\x52\x89\x7a\x35\x8f\xa9\x23\xb3\x05\x0a\x96\x8c\x2f\x14\xf0\x55\x42\xa1\x86\xf9\xff\x45\x8a\x8d\x86\x6c\x18\x9c\x99\x93\x76\x77\xe3\xbb\x63\x31\x6e\xfd\x9e\x61\x54\xc9\x90\xfa\x4c\xf7\x77\xa7\xd5\x6e\xf7\x48\xab\x63\xfe\x09\xf1\x8d\xf9\x7b\x68\xaf\x62\x89\x58\x0a\x8a\x42\xc2\x90\x72\x28\x6a\x21\x59\x25\x21\x29\x89\x0a\xb5\x9a\x44\xd4\xeb\xc9\x64\x95\x8a\x45\x14\x2b\xd8\x0a\x05\x43\xa0\x23\xea\xc4\x0a\x3f\xa2\x9f\x98\xf5\x2f\x57\x39\x31\xef\x6c\x49\x2c\xed\xf7\xa8\x67\x62\xff\x10\x62\xbf\xd4\x80\x9d\xcd\x37\x4c\x7f\x7d\x68\x8e\xd0\x59\xe9\xfc\x23\xff\xfa\x8d\x09\xff\xed\x77\xe8\x7e\x0b\x9f\x1a\xb2\x9f\x48\x25\x52\xa9\xe4\x0c\x03\x49\x48\x92\x89\xf8\x7c\x1e\x59\x2a\x65\xcb\x89\x7c\x15\x5f\x21\x53\x4b\x04\x5e\x42\x83\x42\x4b\x15\xca\xb9\x2c\x2a\x59\xac\x93\x8a\x99\xc4\xdf\xab\xfe\xaa\x2d\xf2\xcd\x87\xad\x39\xc3\x45\xd8\x2e\x29\xf3\x51\x81\xed\x33\x52\xfb\xcf\x91\xb2\xce\x9c\xda\xf7\xbd\x1d\x4f\x06\x84\xd4\xff\xc5\x40\x4a\x26\x96\x19\x58\x7c\xb1\x52\xe6\x47\x16\x89\x34\x06\x83\x82\x2d\x91\xf9\x19\xb8\x4a\x0d\x83\x4c\xe5\xf2\xe4\x72\xb5\x92\xa5\x10\x32\xe5\x3c\xae\x56\x2e\x94\x69\xb4\x24\xb1\xec\xf7\x43\x1e\x28\x38\xf9\x89\x3c\xf5\x53\x8f\x15\x63\x9e\x26\xdd\x0b\x1c\x2b\x1e\xb9\x39\x76\x6b\xd8\xec\x49\xec\x51\xa9\x56\xf3\xcf\x0c\x9a\xe2\xff\x17\x2f\x3a\xa2\x4a\xc4\x12\xa6\x5c\xcd\x14\xf2\x38\x0c\x96\x42\x22\x26\xab\xf8\x7e\x42\x25\x87\xab\xf4\x33\xa8\xd5\x02\xb5\x5e\xec\x25\xd7\x6a\x35\x3a\x21\x51\xcd\xd1\x29\xfc\x88\x2c\xa5\xf8\x7f\xac\xd5\xd2\x8e\x34\x46\xb7\x71\xf6\xbf\xd4\xd8\x5a\xc3\xc9\x5d\x4f\xe6\x2c\x6e\x36\xf6\x7e\xc8\x9b\xba\xcb\x86\x91\xe5\x57\x46\x47\xeb\xeb\xef\x7c\x8f\x3d\x7b\xa4\xe6\x66\xc8\xfd\x25\xff\x6d\x51\x7e\x3b\x43\x2e\x49\x44\xd5\xb1\x55\x64\x99\x82\xa4\x50\x68\xfc\x74\x2a\x0e\x57\xae\xa2\x4a\xc4\x54\x9e\x98\x49\x61\x51\x18\x2a\x95\x90\xa7\x51\x92\x75\x0c\xbe\x5c\xa4\xe4\x4b\xc4\x4a\xe5\xbf\x5c\xb5\x99\xb6\x7f\x68\x77\xc3\xd9\x0b\xbd\xb6\xcc\x2c\xaf\xb3\xdd\xd9\x8b\x17\xdb\xea\xd1\x8a\xd8\xf1\x17\xce\xbc\x22\x25\x6e\xad\x9e\xd4\x34\xeb\x2f\x5e\xa8\x21\xe3\x93\x84\x02\x35\xc9\xc0\xa5\x2a\x0c\x32\x19\x59\xa6\x20\xca\x28\x4c\x9e\x5a\x46\x16\x08\x19\x2a\x89\x90\x29\x56\x88\x15\x1c\x03\x89\x49\xe6\xb2\x64\x1c\x12\x49\x20\xfc\x97\xdf\x73\x5f\x76\xd2\xf9\x5b\xff\xde\xbc\xbc\xde\xf2\x25\x27\x3b\x2d\xf9\x12\xb7\xed\x4d\xc8\xbe\x93\x47\x1c\xca\x13\xab\x4f\xad\x6a\x5a\xa6\xfe\x6f\xa8\xff\x7b\x0f\xd8\x20\x61\xcb\x14\x22\x0d\x43\xc4\x25\x8a\xa8\x7e\x6c\x11\x59\x4c\x11\xb3\x95\x32\xae\x88\xad\xe7\xf3\x48\x12\x0e\x4f\x6c\x30\xe8\xb8\x6a\x8a\x5a\xc4\xe7\xb0\x78\x14\xed\xbf\x05\x7f\xe3\x9e\xb7\x16\xd4\x69\xbd\xce\xe4\x4d\xed\x18\xfa\x58\xcb\xa9\x73\x8a\xb7\x26\x2c\x5a\x33\x60\xe1\xf9\x73\x87\xf8\x67\xe2\xfa\x97\xfe\xbd\x21\x2b\x35\x42\x81\x8a\xc8\xd2\x69\x95\x5a\xb9\x84\x43\x21\xb2\x78\x0a\x36\x91\x27\x32\xe8\x59\x2a\x3e\x55\xc9\x50\xea\xd9\x06\x21\x93\x27\x95\x4a\xb8\x4a\xa6\x46\xc2\xe0\x52\xfe\xed\x16\x79\xca\xb1\xb8\x43\x89\xc7\x4a\xed\xbb\xa9\xc7\x68\x0b\xba\x8c\x0e\xe6\xb7\xd9\x39\x74\xed\x54\xc9\x77\xf6\xb1\x3b\xb4\xab\x2f\x79\x7f\x6f\x9b\x89\xa9\xd2\xf0\xf8\x2c\x2e\x47\xcb\x94\x49\xa9\x0a\xbd\x50\x2b\x14\xf1\x48\x4c\x8a\x9a\xa5\x50\xab\xf5\x42\x06\x43\xad\x97\xe9\x19\x1a\x0e\x89\x23\x15\x12\x99\x54\xa2\x4e\xac\x61\x72\xfe\x67\xcb\xdb\x52\x45\x08\x46\x0f\x27\x78\x3b\x37\xde\x4d\x18\xe4\x3a\xe2\x51\xbf\x84\x49\x37\xce\x7f\xbc\x30\xce\x71\xdc\xa2\xa9\x2e\xcd\x2f\x8a\x82\x96\x35\xdd\xf1\x82\x19\xb7\x85\xdd\x77\xfe\x7f\xbb\x88\xf2\xb7\x33\x64\xeb\xe5\x6a\x1d\x93\x49\xe5\x90\xb5\x5a\x2f\x06\x93\xc9\xf1\x93\x89\x18\x3c\x9e\x42\xce\xa2\x70\x15\x06\xb6\xc8\xcb\xa0\x97\x33\x49\x1c\x95\x84\xc3\x92\x7b\x69\x55\x06\x3e\xe3\x37\xa7\x78\x52\xd8\x3d\x65\xdf\x3f\x1d\xde\x3f\x67\x10\xf7\x9a\xf5\x7d\x1f\x2f\xb7\x5a\x9e\xd0\xb7\xd5\xd1\x36\x1d\xce\x0f\xcb\xd9\x95\x37\xe2\xbf\xe9\xd0\x6f\x11\x9f\xab\x97\xe8\x55\x5e\x52\xb9\x56\xc8\xe4\x29\x49\x22\x89\x8e\xad\xd1\x51\x29\x52\xb2\x52\xa2\x50\xf3\x0c\x2c\x16\x8a\x50\x59\x52\x2d\x95\xc5\xe6\xfb\xa9\xb4\x06\x0e\x89\xf8\x2f\x2e\xe5\xfe\xb6\x4f\x72\xe9\xd5\x5e\x72\xa7\x01\xbb\x2f\xbf\xb9\xbc\xdb\xf7\xa4\x36\x61\x36\xd9\x81\x70\x77\x80\xab\xfd\xc6\xdd\x2d\x63\xfe\xe2\x2f\x41\x13\xf9\x52\x85\x48\x20\x21\x93\xd8\x24\x3d\x51\xc7\x96\x71\x85\x7c\x92\x96\x44\xa5\x32\x79\x4c\x03\x8b\xaf\x17\x10\xf9\x44\x31\x59\xc9\x27\x11\x79\x2a\x2f\x25\x53\xcc\x65\x2a\xbd\x7e\x8f\x87\x0b\x4f\x71\x32\x99\xc3\x64\xf5\x1d\x39\xcc\xdb\xcb\x3f\x54\xff\x70\xd9\xc5\x7b\xd6\x39\x24\x74\x48\xfc\xb4\x11\x65\xa3\xf6\x6d\xca\xfe\x8b\xb7\x6a\x08\x74\x6c\xa9\xc8\x4f\x26\x64\xaa\xc4\x32\x8a\x41\xaf\x22\x6b\x98\x0c\xaa\x48\x44\x25\x32\xc4\x12\x2f\xbe\x80\xec\x47\xd5\xab\x88\x7e\x32\x9e\x54\x22\x95\xb0\x05\x24\x16\xe3\x5f\xca\x7f\x8e\x5e\x7f\xb9\x43\xf2\xce\x65\xd3\xf1\x1a\xf7\x1d\x56\xfa\xdc\x66\x85\xfd\xe7\xcf\x9c\x11\xdb\x84\x19\xf1\x68\x65\x7a\xa5\x78\xce\xdf\xfb\x95\x13\x26\x83\x22\xe7\x32\xb8\x7c\x2e\x57\x40\x21\x8a\xe5\x24\x2f\x1e\x95\x2f\xe6\x70\x94\x44\x2d\x5f\x47\xe1\xc8\x44\x5a\x25\x9f\x28\xa5\x52\x45\x24\x2a\x4b\xc5\xe2\x2b\x85\x72\xa6\xe2\xff\xea\x2c\xb9\x78\x9d\xc9\xc2\xd1\x6d\x97\x36\xcd\x1b\xf2\x63\x80\xfe\x54\xea\xbe\xef\xab\xcf\xaf\x6e\xf1\xec\x23\x77\x44\x66\x8b\xca\x7e\x4d\x47\x68\x04\x7d\x31\xfa\x35\x2b\x42\xb7\xf5\xbf\x26\x88\x16\xba\x61\xaa\x34\x02\xc7\x1b\xff\xaa\xd8\xf4\x15\x1b\x3e\x70\xe1\xdf\x3e\x34\xf5\x5e\xd2\xf0\x9a\x31\x77\xaf\xfb\x4f\x5a\xb7\xa4\xd0\x4f\x43\xe8\x29\xba\x1d\x8d\x2d\xca\x9e\x70\x60\x84\x83\xb3\xdb\x8a\x8f\xad\xa8\x4f\x5f\xd6\x56\x61\x34\x67\x42\xc0\xaf\xa7\x7c\x64\xff\x5f\x61\xd9\x69\xdd\x92\xd4\xaf\x67\x0e\x76\x08\x3b\x68\xbb\x58\x4d\x6f\xdb\xe5\xf0\xb8\x0b\x19\x09\x39\x32\xb6\x82\x96\x98\xef\x93\x3c\xf3\xe4\x67\xa7\x3f\x6b\x87\xd1\xeb\xeb\xeb\xeb\x77\xb9\x9b\x15\xb9\xbd\x1f\xb2\x2a\xf6\x71\xdc\xe4\xbd\x0e\x21\xdd\x1c\x3f\x7d\xef\x59\x6d\xb7\x2b\x6e\x74\x51\x1f\x67\x26\xc9\xe7\xe4\x90\x0f\x31\xc9\x8d\x5b\x07\x85\xee\xd0\x1c\xd9\xda\x41\x3e\x9c\x9c\x5e\xf0\x52\x3e\xe2\x52\x93\xf3\x3d\x27\x27\xc8\x6f\xd1\x92\xbb\xa8\x4e\x3c\x3e\x73\xc7\xa7\x71\xeb\x9d\x49\x15\x4e\xb7\xbe\x07\x3f\x8b\x3b\xd1\x7e\xd2\x31\x37\xbe\x1d\xdd\x55\x95\xa8\xa7\x8d\xda\xf6\x2c\xb4\x6b\xc2\x90\x63\x23\x24\x8d\x5b\x0f\x99\xdd\xd9\x27\x65\xf0\xe2\xea\x5c\x7d\xec\xf0\x04\x31\x63\x92\xa2\x63\xdd\xab\x0d\x8e\x5f\x1e\x8a\xdb\x04\xbc\x6a\x7e\xa1\xb0\xb8\x71\x6b\x2f\xd7\x7b\x2b\x9f\xcf\x5c\x6f\x18\xab\x10\x18\xb6\xe8\xe7\xc7\xc6\x14\x4e\x6d\x4b\x8f\x94\xad\x7f\x12\x33\x39\x69\xd1\x11\xad\xa2\x71\x6b\x8f\xe7\xec\x40\x83\x55\xe7\xae\x94\xe2\xb3\xab\x22\x36\x7c\x56\xcd\x0f\x25\xc9\xcb\xdf\xde\xd1\x60\x59\x92\xcc\x36\x1d\xf7\xea\x1a\xb7\x9e\x4d\xec\x50\xe4\xd9\xa7\x65\xdc\x9a\x43\x2d\x97\x7e\xdf\x44\x2c\x9e\xf0\x6e\xe3\xe8\x62\xd5\x90\x4a\xa2\xfb\xdc\xdd\xd3\x1d\x0e\x4d\x68\xdc\xba\x7a\xd9\x34\xa7\xc5\xec\x55\x97\x67\x10\xfc\x87\x5d\x48\x1a\x73\x80\xb5\x38\x9c\xe4\xd8\x7c\xd2\x89\x6b\xfb\x7a\x16\x1c\x72\x99\x34\xb2\x71\xeb\x17\x55\xcb\x93\x9a\xca\x3e\x1e\xa8\x9b\x7c\x64\x45\x76\xac\x4b\xff\xb7\x33\xed\xeb\xf9\x61\xd7\x4f\xf3\xe8\x73\x53\x19\xd4\x84\x90\xc6\xad\xb3\xbf\xd8\x36\xe9\xa4\x5d\xe8\x71\xc2\xab\x63\x94\x46\xf7\xd3\x2e\x6a\xfd\xe7\x84\xde\xdb\xb2\x3a\x2d\xf5\x3d\xb4\xb4\x88\x1e\xf9\xad\x71\xeb\xed\x0b\xd3\x5b\x4d\xba\x91\x6f\x1c\xf8\x7a\xd1\x90\x84\x80\x44\xef\x7d\x43\x0b\xd4\xdd\x57\xae\xc9\x75\x48\x1d\xf3\x89\x67\x53\x49\x6f\xdc\x7a\x3a\x66\xff\xfd\x6d\x57\x72\xb5\x7f\xd5\x89\xa5\xdd\xb6\x1c\x5a\x5c\x29\x15\x88\x66\x0f\x11\xa7\x14\x5c\x0e\xf6\x1b\xba\x32\x61\x69\xe3\xd6\x51\xbb\xb3\x9c\x86\x66\x87\x04\xd5\x6e\x08\x29\x2c\xdc\xdf\xdd\x61\x60\xe0\xae\x6b\x19\xa5\x72\x43\x87\x49\x81\xb2\x52\x37\x96\xd0\xec\xa0\x54\xc1\x80\x4c\xa5\x6b\xfb\x9b\x04\xbb\xe4\xfb\x1e\x33\x3f\xb5\x89\xbd\xe9\xfd\xad\xee\x46\x7a\x55\x87\x1d\xfa\x30\xef\xbe\x25\x8e\x8d\x5b\x77\xd5\x2b\x43\x1d\xd7\x11\x0b\x46\x4e\x76\x28\x59\x3e\x73\xe9\xd8\x2d\xcc\x9f\xf7\xd4\x06\xb7\x97\xfa\x13\x65\x87\xde\x90\x04\x4f\x1b\xb7\x4e\x5d\x39\xb9\xcf\xb9\xc2\x49\x64\x81\x57\xc4\x46\x87\xe7\x2e\xf7\x16\xbc\x2c\x3b\xf2\xd4\x96\x77\xa2\x20\xb7\xfd\xdc\x40\x5b\xf7\x52\xb3\x13\x6c\xb3\xf7\xbc\xe3\xcd\x6c\x71\xa5\x28\xc3\xaf\x72\xe4\xdc\xb8\x48\xf7\x71\x9e\x4b\xaa\x3c\x4f\xf2\x83\xb6\xad\x8e\x24\x73\xd7\xc6\x36\x6e\x3d\xe5\x6a\xff\x3e\x3d\xbc\xb7\x39\xce\x59\x57\xf8\x60\x44\x50\x99\x70\xd7\xfc\x8c\xa1\x19\xec\x33\x73\x16\x6e\xb6\xb3\x7a\x1d\xc7\x7a\x65\xf6\xc3\x68\x2b\xa3\xe7\x90\xba\x0d\x2a\x78\xb2\x24\x8d\x20\xda\xc4\x9c\xf8\xd1\x76\xfa\x39\xba\x38\xf6\xf2\x23\x4f\xef\x6f\x07\x92\x96\x9a\xad\x4e\x9f\x3d\x99\xfe\x47\x8f\xb7\x1b\x45\x7e\xbf\x9d\x3d\xef\xd8\xc9\x00\xd7\xaa\xc8\xe9\x3b\x53\x72\x92\x2b\x57\x9d\x9a\x31\xb2\x73\xbf\x79\x8d\x5b\x6f\x3c\x3e\x2b\xee\xe0\xad\x63\xef\xdd\x49\x0b\x4e\xf6\xb4\x3d\x16\x5a\x5a\x70\x28\xf0\x54\xcf\xa8\x89\xc9\x99\x79\xc3\xf5\xb7\x66\xac\x6e\xdc\xda\x3d\x7e\xee\x85\x9d\xab\xdb\x67\x5e\x2e\x2f\xac\x2e\x3b\x61\x67\x9b\xaa\x1d\x92\x4c\xf7\x90\x6d\x7c\x3f\xfa\xb4\xed\xb2\x71\x1e\x66\xad\x93\x6e\x9d\xbc\x39\xa5\x55\xbf\xc3\xee\x0e\xfb\x5f\x4e\xdc\x79\x7e\x98\x8f\x50\xb5\xea\xe6\xbc\x29\x01\xca\x91\x1f\x3d\x08\x25\xaa\xbe\x8d\x5b\xfb\x45\x1b\x07\x76\x66\xac\xf4\x79\xb7\xe9\x98\xdb\x86\xca\x6a\xb7\x4e\x55\x5e\x2b\x3d\x06\xcd\xe8\x5e\xfd\x60\xdc\x29\xcf\x20\x45\x41\xe3\xd6\x8e\x56\xe1\x5c\x9f\x8f\x73\x6b\xec\xf9\xd9\x81\x45\x0b\x3b\x9d\x3b\xa0\x2f\x74\x0b\xd8\xb9\x28\x53\xb1\xa3\xd9\x7a\xdb\x1e\x41\x0b\xcc\xac\xe1\xde\x1b\x46\x46\x44\xe7\x19\xab\xe6\xa7\x8d\x6d\xf5\xa8\xeb\x90\x77\x5b\xd6\x79\x4f\x99\x76\x20\x67\xbb\x24\xa1\x7a\x8e\xf4\x52\xd7\xc6\xad\xe7\x6c\xed\x52\xc0\xbb\xc3\x8b\x9e\xb7\xa9\xbd\x7f\xd9\x5e\x17\xd7\xac\x80\xea\x43\xc7\x66\x96\x34\x95\xfb\x5b\x85\x16\xcf\xdb\xbe\xaf\x71\xeb\xb5\xbb\x37\xef\x16\x4f\xb8\x25\xab\x70\xbf\xee\x5a\x99\xe2\x46\xe6\x75\xd2\xfc\xdc\xa1\x88\xed\x96\x86\xcd\x1a\xf0\xf4\xd1\x8d\x65\x8d\x5b\xef\x38\x2c\x7a\x9b\xfd\xc4\x91\x96\xdc\x8a\xd6\xc4\x61\xed\x16\x52\x64\x9f\xa9\xd7\x8e\x72\x66\xa7\xb1\xeb\x15\x7b\x57\xdc\xb3\xba\xd0\xb8\x75\xe7\xe5\x13\x4e\x2f\xa1\x07\xf4\xbb\x78\xd2\xb0\x36\xa2\xb0\x5c\xdb\x7c\x52\xdd\xee\x17\xfa\xaf\x27\xde\xe5\x3d\x3f\x4e\x5a\xb3\x7d\x47\xe3\xd6\xdf\xcf\xaa\xc3\x09\x7b\xbb\xf5\xf3\xe4\x66\xe6\x3f\x73\x2f\x3a\x28\x58\x3e\xc8\x6b\xc2\x30\x8e\xa7\xa2\x97\x6f\x33\xc1\x80\x13\xc1\x8d\x5b\xb7\x35\xf0\x1f\xdf\xf5\x8d\x0b\xa8\x89\x09\xee\x53\x3d\x97\x75\xb1\xfd\xa2\xd1\x84\x87\xbb\x3c\x86\xb5\x8e\xea\x17\xb6\xda\xf9\x88\x7b\x8d\xed\x9f\x21\x37\x46\xaf\xaf\xbd\x58\xb7\xab\x73\xe3\xde\xf5\x2d\xb7\x7f\x6a\x3e\x73\x62\xef\xc5\xe1\x53\x37\x8c\x8f\x19\xc1\x7e\x93\x5f\xf1\x75\xf9\xb7\xd3\x1d\x44\xdf\xa2\xab\x17\xd1\xee\x87\xff\xf2\x46\x69\xf1\x2d\x8c\x18\x2d\xd9\xda\xd8\xf0\x57\x48\x3b\x23\x46\x3b\xe1\x6a\x6c\xa0\xb6\x03\x8e\xc6\xc6\x5d\x4e\x6d\xd3\x74\xfd\x45\xf6\x98\x71\x37\x67\x78\x58\x59\x7f\x7d\xba\xf0\xf9\xde\xe7\x2f\xc8\x2d\xa3\x77\xed\xd6\x47\x1e\x7e\xfa\x70\xb8\xcb\xaf\x4e\x7c\x1c\x8d\x18\x2d\xdc\xd6\xf8\xeb\xac\x00\x6d\x93\x8b\x11\xa3\xed\xb3\x32\x62\xb4\x3a\x7b\xb3\xde\x98\x03\x0e\x4f\x92\xa5\x61\xbb\x2a\x5d\xf6\xf3\x8b\x0a\x3e\xed\xb1\x1b\xea\x30\x4f\x71\x64\xf3\xf6\xc9\xf6\x21\x55\x0b\xa6\x26\x94\x37\x0c\xe2\xb5\x0b\x3e\xb6\x3c\xd4\xc9\xb7\x66\xf8\x5f\xe1\xae\x46\x8c\x76\x0e\xde\x72\xac\x8d\x11\xa3\xa5\xda\x18\x31\xda\x15\xf3\xb7\xf4\x9a\xbf\xa0\x76\x7c\xd3\x2e\x4b\x8f\x84\xa4\x25\x16\x6b\xdf\x2e\x9e\xb4\x75\xf7\xa5\x60\x9f\xbd\x8e\x43\x3a\xbe\x7a\x1b\xb5\x78\xec\xa6\xc6\xad\xb1\x41\xcb\x4b\xb8\xe9\xbb\x5b\xa6\x74\x1d\xba\xe4\x6c\x4f\xd6\xc6\xaf\x6b\xeb\xd2\x5f\x66\x35\x7f\x51\xd6\x93\x9e\xd2\xdf\x77\xa7\x59\xdf\x5b\xd6\x4c\xa4\x90\x42\xa6\x28\xc6\x97\x3b\x53\x5a\xd8\xbc\x9a\x38\xea\xfc\x88\xdd\xb3\x97\x84\x2d\xab\x19\xab\xfd\x69\xb7\xb3\xab\xb4\x61\x70\x97\xd0\xc0\x1f\xb7\x32\x62\xb4\x42\x98\xcb\x0d\x24\xf5\x2a\x7b\x5c\xce\x7b\x1c\xcc\xfa\xbd\xf9\x91\x18\xb3\xf8\xdb\xfd\x9e\x41\x05\x19\x2f\x68\x9d\xde\x0f\xaf\xea\xfe\x7a\x1c\x7b\x85\xdf\xc4\xb9\x2b\x15\x83\xee\xbb\xac\x3f\xd1\xd0\xef\x16\x3b\xd4\x6f\x6b\x23\x46\x7b\xd2\x02\x97\x43\x76\x4b\x23\x46\xfb\xda\xdc\x88\xd1\xea\x9b\xe3\x5f\x1d\x47\x0b\x70\xc2\xda\x88\xd1\xce\x38\x99\xbd\xe6\xb6\x31\x91\xb8\x75\xc2\x90\x07\xb1\x73\xee\xe4\xd0\xbc\x0b\xfd\x5f\x3c\x30\x36\x6d\x57\x2c\x3f\xee\x36\x8e\xbe\x30\x76\x70\x3f\x5a\xc3\xe8\xe2\x5d\xcd\x1e\x1b\x92\xa4\xdc\x92\xb2\x3c\x61\xfb\xc5\xdb\xbe\xc2\x80\xa5\x9d\x45\x15\xb6\x46\xf2\x91\x51\x9f\x32\xed\x75\xa7\x07\x44\xaf\x48\x9c\xdf\xf0\xde\x23\x68\xd6\x09\x6d\x8d\x18\xed\xba\x35\x3e\x94\x40\xf4\xd7\xe6\x26\x46\x8c\xf6\xca\x01\x17\xc4\x15\xa4\x2c\x8f\x6c\xf0\x06\x7b\x7f\x8d\x15\xcd\xe1\x81\xbd\x71\xe1\x9f\xa9\x31\x46\x5f\x4e\x08\xf6\x6f\xc8\x84\xd0\x36\x37\xc5\x45\x5a\xe3\x88\x7f\x78\x68\x85\x7f\x78\xdb\x1c\xff\xb0\xa3\x85\x71\xc6\x9f\xa9\x33\x46\xf7\xb7\xb2\xb1\x69\xd8\x61\xa7\x6d\x69\x81\x3f\x1f\xd9\x0e\xff\x10\x0e\x3d\xbe\x68\x63\x9c\xff\x67\x2a\x8d\xf9\xba\xfb\x6f\xc5\xc7\xfa\xc3\x01\x7f\x3c\xd8\x0e\xff\x70\xa4\x55\xc3\x07\x9f\x15\xf8\x17\x37\x9d\x40\x0a\x96\xb4\x18\xa3\x5b\x11\xac\xdb\xe2\x3d\x6f\x6c\x8d\x3f\x9f\x07\x1f\x6e\xc1\x50\xdf\x80\x80\x8c\xae\xc6\x65\x7f\xa6\xf2\x18\xdd\xa6\xb7\x95\x3b\xde\xf5\xbe\xb6\xf8\xf3\xbb\x40\x79\xa3\x6c\xf0\xa5\x3c\xec\x80\xcc\xaf\x0d\xfe\xf5\xcf\x96\xc6\x05\x7f\x66\x24\x18\x3d\x91\x40\xb0\xc1\xfb\x3f\x0f\xeb\x76\xae\x19\xcc\xc1\x19\x17\x8a\x0a\xff\x62\x73\x4b\xe3\x94\x3f\x33\x13\x8c\x4e\x73\x26\x10\x02\x71\xe1\xe2\xfd\xd0\x4e\xb7\xc4\x07\xec\x8f\xf0\x22\xdf\x16\xb4\xc1\x92\x35\x60\xf4\x00\x1b\x82\x35\xae\x0d\x85\xb0\x66\x3b\xf1\x35\xa3\x15\xc2\x80\xcf\x37\x35\x4e\xff\x33\x43\xc1\x7c\xad\xd7\x3a\xe3\x1d\x96\xc0\x0a\x3d\x80\x71\x1e\x75\xc1\x3f\x54\xb4\x32\xde\xb0\xfb\x33\xaf\x1c\xa3\xaf\xa9\xaf\xfb\xc5\x04\x48\x62\x4d\x70\xb3\x4a\x45\xd6\x9f\x86\x00\xf3\x5a\xdb\x86\xb9\xfb\x4c\x31\x62\xb4\x72\x67\x33\xc3\xde\xaf\xd4\x6f\x8a\x19\x19\x27\x48\x9c\xfa\xb6\x7c\x8e\x77\x2d\x2f\x2c\x57\x3f\xf4\xb3\x67\x47\x42\xaf\x1b\x83\x66\x25\x0e\x0a\x70\x6d\x18\xce\x4b\x73\x3c\x68\x4b\x7c\xbf\x94\x2a\xcd\xae\xcf\x1c\xfb\x7a\xf1\x90\xa1\x3f\xd3\x87\x29\x49\x5e\x03\x15\xff\x9c\xbe\xbd\xf2\xca\xc9\x1e\xdb\x8a\x9e\x34\x0c\xa6\x07\x3e\x98\x44\x5b\x23\x46\x2b\x40\x66\x5f\x0e\xe3\x8b\x42\x9a\xf3\x01\x7d\xf5\xad\xb5\x59\xdf\xa3\xff\xa9\x4c\x7c\x33\xd0\xe9\xa9\xa4\x6e\xf1\x85\xae\xf1\xcf\x83\x1f\x9c\xfc\xa7\x5f\x80\xd5\xf2\x31\x2f\x3e\x4c\xf9\x31\x64\x61\xef\x45\x0d\x2b\x79\x15\xe1\x86\xb1\x25\xde\x5d\x24\x5a\xd7\x5b\xbf\x16\xb7\x1d\xfe\xd5\xd1\xa6\x48\x02\x88\x24\xb2\x5a\x98\xbd\x61\x82\x5d\x74\xe6\xd3\xeb\xdf\x2e\xf9\x7a\xbe\xed\x4f\x18\xeb\xb4\x37\x7b\xd8\xf8\xc2\x8a\xad\x7e\xbb\xca\x7d\x46\xa5\x1c\xed\xb6\xfa\x66\xc3\x1b\x02\xd1\xa8\x77\x36\x33\x7b\x76\xd5\xac\x63\xa3\xb2\xdd\xa3\x92\x7d\x8f\xc6\xae\xe5\xc8\x13\xac\x57\x8a\xfc\x27\xac\x73\xef\xad\x4b\x1b\x36\x68\xfb\x8f\x01\x13\x5e\x34\x6e\xdd\xf1\xe6\x98\xa0\xab\x4b\xe2\x32\xa8\x0b\x4f\x3f\x13\x25\x77\x74\x1b\xb5\x2c\x75\xd3\x05\x7d\x69\x6d\xd7\xaf\xa7\x66\x72\x94\x27\x7d\x1b\xb7\x1e\x7a\x4d\x37\x5a\x3d\x5b\x33\x2c\xe7\x61\x72\xf6\xfb\x73\x17\x6d\x9f\x47\x59\xc9\xef\xca\x9b\xde\xd9\xd7\xde\xe3\xba\xf5\x51\x7a\x06\x4e\x24\x68\x9a\x37\x5a\xe3\x1a\x7d\x0c\x91\x4c\x52\x53\xb3\x51\x5a\xd7\x65\xa5\x6e\x37\x46\x0d\x7d\xb8\x35\x2b\xea\xee\xf6\xdc\x7b\x87\xad\x12\x5f\x1c\x3d\x5f\xdc\x7d\x49\xb0\xcd\x86\x56\x9e\x8c\x51\x8d\x5b\x87\x07\xdd\x1c\x16\xca\xbe\x12\xb5\xa6\x5b\xb9\x75\xc6\xdb\xe7\x5f\xe3\xad\x3b\x14\xbb\xbd\x1e\x10\x36\x68\xdd\xf5\x7d\xca\x49\x4d\xdf\xe3\x6a\x0f\x90\xbd\x0e\x31\xd9\x16\x34\x8a\x17\xe6\xf4\x12\x98\xe7\x1e\xb7\x5d\xcd\x13\xf6\x9d\xf1\x26\xe7\xd8\xc3\xf1\x62\xab\x21\xfd\xa7\xe7\x4d\x5b\xc6\x25\x6a\x62\xef\x0c\xf8\xd8\xac\x21\x1d\x46\x4b\x6e\x66\xc4\x68\x3f\x6c\xcd\x9e\x95\x3e\x75\xdf\x34\xf6\x9d\x4b\x88\x82\x74\xff\x76\xcc\xb7\x8b\x77\xaa\x5a\x6f\xa0\xad\x5e\x54\x54\xba\xa9\xba\xff\xcd\xeb\x8f\xaa\x72\x71\xe0\xb5\x31\x7b\xac\xe8\xd1\x81\xa8\xa5\xdd\xae\xdd\x18\xe0\x7a\xaa\xf7\xa4\x81\xc2\xde\x35\x77\x8f\xa5\xf1\xc3\x6d\xa7\x4d\x78\xe8\xd5\x93\x7f\x20\x2f\x7b\xc6\x9f\x29\x3a\x46\xb7\xc5\xe0\x37\x93\x68\x01\x60\x99\xc5\x80\xa6\xb9\xe0\x20\x5d\x70\x02\x53\xb7\x64\x03\x98\x6f\x1f\x82\x3d\xde\xe1\x05\x60\x92\x42\xe8\x67\x2b\x80\x69\x65\x13\xa3\xe8\xcf\x14\x1f\xf3\x5d\xdc\xdb\x2a\xa8\xe1\x29\x7f\x00\xa3\x2a\x1b\xfc\xc3\x6d\x80\xf9\x20\xf8\xa6\x06\x78\xf0\x03\x7c\x38\x66\x65\x9c\xfc\x67\x26\x80\xd1\xfd\xad\xdd\x01\x47\x6b\x81\x01\x8e\xe1\x5a\xe7\xa3\x36\x62\xb4\xbd\xce\x40\x27\x96\x6c\x02\xa3\x7b\x67\x11\xf0\xda\x1d\xda\x5b\x47\x5c\x73\xb3\x91\xcf\xf2\x09\x10\xaf\x10\xa8\x31\x1b\x40\x35\xcb\x0e\x60\xda\x92\x15\x61\x74\xcc\x9d\x00\xa4\x9d\x08\xa2\xce\x6b\x89\x7f\xa8\xb5\xc5\x3f\x24\x34\x87\x1e\x2d\x59\x1a\xe2\x56\x77\x3b\xbc\xc7\x9b\x80\xf7\x9f\x9a\xe0\x1f\xf6\x9a\x1c\x03\x27\xe3\xdc\x3f\xb3\x38\x8c\x6e\x43\x58\x0e\x63\x2c\x01\x2d\x78\x81\x83\x33\xed\x32\x02\x9b\x77\xd6\xf8\xd7\x87\x5d\x60\xa0\x96\x4c\x13\xa3\xbb\x13\xac\xa3\xf0\x6e\x77\x83\x30\x8f\x80\xbf\x92\x01\x4a\xb1\xcf\xe4\x5c\x59\x32\x51\x8c\xee\x1e\x6e\x63\x85\x2f\x56\x04\x4c\x3d\x1f\x96\xa7\x04\x74\xa1\x04\xc4\x1b\x67\x0b\x16\x61\xc9\x82\x31\xdf\x28\x7f\x20\xbf\x40\xe8\x79\x1f\xf4\x53\x01\xaf\x38\xe4\x0a\xb3\xb7\x64\xdb\x68\x99\x6c\xba\xe1\x3d\x5e\x84\xb9\xee\x07\xa3\xfd\x06\xbc\xfa\xd8\xca\x98\xd2\xf4\xcf\xd2\x56\x18\xfd\x67\x7d\x7d\xfd\xae\xae\x0d\xcb\x12\x80\xd0\x75\xaf\x3d\x0e\x7c\xeb\x9d\x91\x7f\x8b\x78\xe5\xac\x79\xc8\x21\x4f\x25\xe4\x79\x9d\x79\x5d\xd9\x2b\x9d\xc8\xb5\xdf\x3f\xd8\x63\x52\xbf\x27\xb4\xda\x4e\x74\xcf\x69\x61\x31\xce\xc7\x57\x07\x34\x6d\xe8\xee\x3a\x72\xdf\x4b\xed\xf1\x35\xdf\x86\x60\xf0\x6d\x3b\xb3\x9e\x54\xab\x9d\xbe\x55\xfa\x94\x13\x06\x4c\xec\x3c\x6e\x5e\xf1\xc2\x3e\x01\x2f\xd3\xfc\x06\x7b\xd6\x3e\x57\x71\x46\x67\x6d\x0a\xe8\x53\xd1\xf0\xec\x69\x04\xbf\x77\x21\x32\x8a\x42\x6c\xff\xc5\x05\x98\x0f\x71\xeb\x09\xc4\x8f\x6f\x5a\xe3\x5f\x45\x23\xf5\x7a\x80\xde\xfe\xc4\xca\xec\x7d\xfa\x36\xce\xb4\x2f\xfb\x7a\xdb\x57\xcd\x39\x4f\x0f\xaa\x1e\xb7\xaf\xfd\x69\xc5\xb6\x0e\xad\x02\x75\xb7\xfc\x0b\xd6\x77\x9c\xbd\x36\xb4\x71\x6b\xd7\x5d\x01\xa1\x2b\xbf\x1e\xe8\x9b\x38\xe8\x58\xab\x81\xed\x0d\x91\x65\x67\x08\x8f\x7b\xcf\x64\x5d\xbf\xdd\x7a\x9a\x46\x52\x22\x30\x8b\xe9\x27\xb5\x99\x2e\x6b\x77\xfa\xcd\xa5\x95\x92\x41\x83\x5b\x1c\x58\x56\xe6\x2a\x0e\x5a\x77\xfc\x5c\xc9\xfe\x16\xa4\x78\xe7\xec\x6d\xf4\x0d\x0d\x83\xdb\x8d\x22\xd0\xaf\x68\xbc\xd5\xe6\x51\x51\x7c\x4e\x64\x71\x97\xd1\x1d\x58\xcd\x3b\x75\x73\xb7\x1a\xf5\x42\x12\xd2\x8e\xbc\xcc\x93\x92\x31\xff\x59\xda\xe0\xd3\x07\xfa\x5e\xbe\x81\xc7\x3b\x68\xfa\x0f\x90\xb3\x53\xd1\xc6\xac\x83\xf3\x3c\x87\x6b\x2e\xe2\xd6\x4b\xa6\x87\x94\x3e\x1b\x30\x26\x51\xbb\xec\x79\xf5\x88\x81\xe4\x55\xd7\x7b\x09\x46\xae\xbd\xae\x3d\xb5\xd2\x2c\xa7\xe9\x58\xc4\xdd\x21\x79\x9e\x1b\xe7\x46\x9a\x74\xe7\xc3\xe1\x7d\xfb\x73\xaa\x2a\x63\x57\xf3\x67\x4e\xf7\x29\x53\x6e\xde\x30\x8d\xd1\x00\x7e\x72\xe4\x53\x40\x34\x73\x19\x91\x61\xa9\xf9\x22\xee\x7d\xdc\x2f\x3a\xe5\x9f\x07\xb7\xcf\x4c\x1c\x72\x5f\x3b\x25\x2e\xba\xf3\x17\xae\xb7\x55\x8c\x6a\x67\x61\x9e\x47\x61\xd7\x99\x5d\xf3\x1b\xb7\x7e\x36\xda\xf3\x43\xa0\x2c\xf0\x58\x59\xd9\x22\xf9\xb4\xa4\xc4\x97\xbd\x16\xcf\x4e\x9b\xdc\xf3\xf2\x87\x49\x91\xce\xd9\x3b\xd7\x2d\xc9\x6a\xdc\x9a\xbf\x7a\x4c\x59\x5e\x9e\xfe\xd4\xbe\x0e\x77\x96\xfc\x53\x1c\xe4\x70\x22\x56\xfc\x25\x2f\xda\xf9\xf9\x68\x17\xf7\xef\x52\x5b\x0e\xb1\x71\xeb\x66\x4b\x4f\xf4\x5f\xd8\x47\x73\x64\x55\x8b\xb5\xfb\x66\xa6\x0c\xb2\x1d\xe3\xe0\x1a\x65\xc5\x8a\xbe\x22\xe2\x1e\xf0\x5f\xbf\xd9\xe6\x47\x83\x81\xc4\x98\xb3\x6a\xd8\xca\xac\x4b\x2e\x83\x6d\xa2\xa6\xbd\x5b\x1a\x7a\xe3\x67\x74\x9b\x6f\x84\xbb\x75\x7b\xd2\x35\xe2\x90\xfe\xd7\xb5\xbd\xe7\x89\xab\x1a\xb7\x6e\xbe\x6c\xdb\x33\x65\xc8\xc2\xb1\xe2\xa1\x23\x36\x6f\x7b\x69\x77\xf5\xd5\x83\x11\x23\xe3\xeb\x6a\x4e\x52\xef\x6f\x3a\xa3\xe9\xf5\x91\xd1\xb0\x4c\x57\x11\xe0\x67\xa2\xe0\xf5\x4b\x13\x5c\x7a\x67\x91\x7d\x65\xda\xe2\x7f\xed\x42\xfe\xe0\x3e\xf8\xb7\x2d\x28\x74\x7c\x6f\x0d\xb8\x65\xc9\xc2\x30\xba\xad\x95\x35\x04\x85\x77\x00\x54\xc2\x81\x66\xb7\x02\xba\xbc\x07\xec\xcd\x6f\x0a\xd8\x6d\xc9\xe4\x30\xba\x8d\xa3\x29\x0c\xf8\x08\x00\x18\x09\x71\xcf\x71\x30\xc3\x3c\x34\xc1\x97\x36\x46\xe6\x9f\x59\x16\xe6\x3b\xd6\x6a\x7c\xc3\xc6\x03\xed\x3e\x60\x56\x1c\x0c\x2f\x1a\x00\xf2\x21\xbc\xf0\x09\xc0\xd9\x56\x13\xf3\x5a\x32\x47\x8c\x6e\x6d\xdd\x01\xff\xdd\x56\xda\x0b\x00\xc8\x9b\xed\xf0\x01\xdf\x45\x28\x72\x0f\xc8\xa2\x16\x98\xb7\xc2\x1a\x00\xd8\x92\x01\x63\x74\xfb\xe9\x04\x80\xf4\x1c\x70\x3c\x72\x9c\xf0\x0f\x27\x41\xe8\x37\xdb\x18\x27\xfd\x99\x45\x63\x34\x9b\x1e\xb8\xdb\xb1\xdb\x0a\x6c\x0c\xe1\x6e\x19\x2c\xe9\x96\x76\xc0\x37\x96\x8c\x1b\xf3\xb5\x72\xf4\xc7\x07\x97\x06\x63\xca\x80\x7e\xfc\x41\x1c\x39\xcd\xa0\x43\x4b\xf6\x8f\xf9\x2e\xb7\xc2\x0f\x9e\xd0\x76\xc2\xe3\xc1\x20\xbf\x42\xf8\x70\xc7\xc6\xc8\xfa\x33\x1c\xc0\xe8\xbd\x7b\xf8\x5b\xe3\x3a\x60\x84\xf5\x3d\x03\xce\x5d\x34\x2c\xbd\x3f\x28\x43\x1c\xbc\xe3\x99\x23\x18\x86\x25\xf4\xc0\xe8\xd6\xee\xad\x81\xd0\x8b\xc1\x1e\x02\xc0\x57\x88\x87\x35\x8a\x05\x37\xe9\x94\x2d\x18\x86\x25\xa8\xc1\xe8\x56\xde\x04\x1a\xee\xd5\x1f\x45\xda\x5f\x01\xdd\x96\x82\x2f\xb3\x0f\x7c\xa5\xcf\xd6\x46\xfe\x9f\x61\x12\x46\x6f\xe2\x62\x47\xc0\xa5\x72\x16\xb4\x32\x00\x3a\x0a\x86\x81\x66\xc0\x64\x4e\x38\xe1\x9a\x72\x1c\x51\xdc\x89\x66\x46\xc3\x9f\xa1\x18\x46\x0f\xb8\x16\x6e\x15\x8c\x8b\x06\x5e\xf4\xda\xe4\x38\x82\xb0\x3f\x82\x66\xa7\x83\x99\x86\x81\x99\xee\x06\x36\x8f\x40\x24\x74\xd7\x1e\x2c\xc7\x12\x24\x62\x74\x2b\xcc\x0a\xe2\x8d\x03\xb0\xce\x5b\xe1\x45\x95\x30\xb5\x60\x67\x63\xa4\xed\x9f\xed\xa1\x61\xf4\x35\x75\xf5\xf5\xbb\xba\x34\xa0\x6d\x48\x4b\x23\x46\x7b\x66\x65\xc4\x68\xc5\x90\xea\xc5\x9a\x18\x31\x5a\xb2\x79\xac\x38\xf6\x5c\xdc\xe7\x73\x73\x23\x38\x4b\xbd\x95\x0b\x97\x11\x3e\x97\xce\xdb\x96\xcd\x5a\xd6\x6c\xbe\xcd\x47\xe1\xdd\x59\xe9\x7d\xbe\x1e\xfa\xd5\x9d\xcf\x02\x23\x46\x4b\x47\xf8\x9c\x0f\xa9\xbd\x6c\x34\xe1\x7b\x88\xfe\xea\xcd\xbb\xcc\xda\x3f\x73\x78\xdd\xb8\xd7\x1a\xdd\xc4\xea\xbc\x9b\xcb\x9a\x1f\x4a\x99\xb3\x20\x61\x68\x85\x36\x64\x47\x6c\x1c\xa7\x6d\xce\xcf\x26\x0d\x1d\x6c\x40\xcf\x3e\x46\xbd\xbc\x80\x11\x6e\xb6\x37\x62\xb4\xfb\x00\xac\xd7\x40\xb6\xe1\x4e\x46\x8c\x76\x0c\x16\x39\x0c\xc1\x41\x25\x90\xc6\x2d\xd4\x41\x9d\x53\xc3\xa0\x7c\xa4\x46\x8c\xb6\x1b\x11\xc7\x21\x6b\xb3\x31\xc9\x2e\xe5\x8f\x3c\x7a\xf0\xee\x99\x8f\x13\x6b\x42\xe7\x90\xf4\x97\x0e\x8c\x5d\x32\x6d\xb0\x67\xeb\x43\xb7\x93\xb7\x78\xde\x8c\x38\xb3\xb5\x61\x4c\xc1\xe8\x4d\x2f\x91\x16\x19\xc1\xbe\xef\xc1\x9a\x5f\x31\xf7\x4e\x0c\xc9\x5c\x71\x4d\x41\xf9\xa2\x11\xf6\x19\x57\x5a\xda\x26\x8e\x3f\xd9\xee\x56\xe7\x94\x35\x59\x89\xf2\x0d\x09\xf9\xef\x16\x14\x4d\x6c\x18\x60\x2d\x5a\x83\x7a\x90\x9a\x3f\xe2\xbf\xc3\x68\x06\xcf\x40\x9f\x1f\x82\xdd\x5f\x6e\x85\x37\x5a\x8b\x3c\xb8\xc3\x48\x3c\xef\x9a\xe1\x5f\x5d\x42\xcb\x79\x1d\x3d\xf7\xc8\x3c\x70\xbe\xd5\xa9\x73\x6d\x9f\x03\xab\xc4\x67\xce\x6c\x75\x30\x2e\xbd\xeb\x4a\x49\xa3\x5e\x3c\x70\x2e\xe5\x55\x8b\xbe\x33\x5f\x28\xdb\x74\x3a\x83\xab\xae\xf9\x63\x7e\x97\x8d\xfe\xae\xf3\x62\x66\x5e\x7a\x3c\xa5\xd5\xfb\x66\x8e\x91\x4d\x47\x6e\x6e\xbe\xf1\x73\x94\xcd\xc7\xfa\x1f\xf4\xa9\x47\x6d\x47\x34\x38\x3b\x9d\x8d\x18\x2d\x0e\xd2\x2c\x7b\xd1\xb8\x9e\xa1\x19\xbc\x82\x50\x68\x67\x6b\xe3\xbc\x3f\xd3\x23\xcc\xf7\xd2\x56\xa0\xa2\x6f\xb0\xc4\x46\x5c\x08\x3e\x42\xfc\xff\x6c\xfc\x1f\x36\xbb\x00\x28\x5b\x52\x26\x8c\xee\xee\xef\x0c\x1c\xb4\x03\x47\x33\x9f\x61\x80\x93\x80\x9c\x35\x2d\xa0\x43\x4b\x9a\x80\xf9\xb6\xf2\x87\xc0\x3d\x1a\xa0\xf8\x1e\x80\xce\x0e\x30\xd1\x4d\xa6\x4c\x80\x25\x3d\xc0\x7c\x9d\x4d\xa1\x5f\x10\x74\xf8\x01\x96\xff\x2c\x7c\x13\x63\xf2\x75\x2c\xad\x28\x46\xa7\x11\x96\x7b\xe3\xb2\xcc\x01\xb8\xba\x00\x7a\x54\x08\x70\xb2\x1f\xfe\x29\xa9\x25\xe0\x92\xa5\x55\xc7\xe8\x36\x4d\x08\x40\x9a\x6f\xa1\xa3\xcf\x30\xc6\x22\xa0\xd1\xe4\x26\xc6\x1f\x76\x7f\xb6\x5b\x8f\xd1\xeb\x7f\xfe\x5f\x48\x15\x82\x68\x22\xbe\x39\x6e\xbd\x17\x90\xf5\xde\x68\x65\xa6\x9a\x6e\x93\x43\xfb\x54\x6c\x5e\x13\xb5\x2a\x29\x05\x9b\x7b\xbe\xf7\xe8\xfc\x3e\xda\x82\xc8\x77\xdf\xaf\xdc\xa1\xee\xba\x38\xf8\x6a\xfd\x1e\x3c\x06\x42\x1e\x7f\x81\x79\x0a\xaa\xec\xe7\xce\x12\xf7\x16\x81\x2f\x5e\x0a\x8f\x4d\xed\x58\xc4\xb1\xaa\x9a\x73\x35\x66\x90\xd8\x30\x25\xb5\xef\xcf\x36\x8a\x85\xab\x70\x87\x37\xa7\x89\xb9\x2d\xeb\xbb\xcf\xda\xe4\x71\x80\x12\xfb\xf0\x42\xd1\x93\xd7\xbb\xf3\x72\x2e\xf6\x50\x86\xbc\x7f\xdc\xfb\x10\x61\x02\xeb\xb8\x4d\xe1\xb5\x06\x03\x38\x8c\x42\xb6\x72\x14\xaf\xfc\x34\x07\x83\xd1\x57\x92\x86\x8e\xc8\x9d\xb6\x6e\x67\xaf\xc9\x9a\x36\x2b\xbe\xd2\x17\xae\xda\x34\x21\xbe\x53\x14\x7f\xb8\x1b\xc9\x7a\x4e\xfb\xeb\xdb\x1a\x3a\x78\x8e\x66\x5f\x84\x50\xae\x0c\x36\x86\x82\xd1\x57\x07\x5d\xcc\xba\xfb\xf9\x65\x7d\xc8\x82\x0f\xa5\xed\xa4\xf9\x0b\xea\x84\xc1\x27\xea\x04\x8b\x7c\xba\xdd\x7a\xb2\xc3\xed\xca\xc5\xe3\x73\xc6\xa8\xd7\x7b\xe2\xae\x67\x5b\xb3\xc7\xce\xa6\xc6\x29\x5d\x8f\x0d\x3e\x34\xdb\x6e\xc0\xfb\xd6\xcf\x97\x7d\x89\x28\xb5\x1a\xf7\x8a\x78\xfa\x94\xae\x7d\xa2\xb8\xed\xd4\x41\x97\x1a\x5e\x79\xa7\x8d\x11\xa3\xd5\x98\xa7\x36\xb3\x0f\xb9\xfc\x9c\x76\x60\x9d\x6e\x61\xff\xbc\xc9\x49\x53\x0b\xb4\x2b\xfa\x78\x8e\x48\xdd\xfe\x66\xfe\x50\x61\x5a\x47\x43\xdf\xe4\xa2\xc6\xad\x33\xde\xbe\x71\x1a\x94\xb4\x6c\xb0\x93\xd1\x73\x4b\x61\x9f\xa8\xfc\x8a\xc0\x1f\xcd\x56\xad\x8b\xba\xec\x39\x72\x44\x55\xfc\x2c\xd6\x3d\xb3\x28\xf3\xa6\x9c\xfd\x6a\x7c\xe2\xf9\x21\x46\x97\xf2\x3b\x55\xd9\x29\x5c\x9b\xc0\x2b\xfd\x1f\x45\x5d\x5f\x3d\x24\x6e\x7c\x0a\xf1\x9f\x82\x86\x71\xed\x47\x04\x73\x0f\xc7\x79\x1f\xae\x11\xa3\x6d\x03\x9d\xce\xb3\x33\xd7\x91\x94\x84\xdc\x3e\x1b\xdd\xaf\xff\x2c\x6b\x7e\x6d\x93\x07\x3b\x20\x82\xda\xe7\xe3\x9d\xda\x62\xda\xbc\x2b\xbd\x5a\xbd\xcc\x3a\xe7\xdf\x20\xef\x20\x24\xdc\x43\xa8\xdb\xb3\x60\x0b\x8f\xcc\x57\xce\xaf\xcd\xb0\xe7\xe1\x4f\xd6\x35\x71\x4e\x7f\x49\x29\x1e\x79\x23\x7a\x6a\xeb\xc7\x2f\x6e\x38\xb6\xf4\x4f\x1d\xfd\x92\xd8\x6e\x52\xa7\x48\x7c\x57\x13\xc5\xfd\x5b\x50\x94\x7a\xd2\x3c\x58\xea\xb8\xba\x60\xf3\xa2\x1b\xf7\xce\x8f\xa4\x7c\xcc\x24\x64\x4b\xea\xdf\x0d\xea\x6f\x77\xba\xef\x8c\x79\xb4\xa1\x65\x1d\x19\xb2\x70\x7c\x57\xf3\x08\xe4\x7a\xf6\x20\x8e\x49\x6f\x81\xff\x95\x8e\xd8\xea\x99\x79\x82\xbd\x6f\x72\xe8\x97\xbb\x3d\xb6\xce\x49\x7b\x33\xfa\x47\xa2\xac\x1b\xe9\x68\xaf\x9b\x1e\x31\x17\x3f\xde\xfa\x47\xbe\x64\xc6\xbd\x07\xf3\x77\x4f\xf9\x33\x43\xc1\xe8\x76\x04\x82\x3b\xee\x4f\xff\x04\x3a\x4d\x42\x86\x93\x0d\x96\x7c\xcb\x19\x36\x57\x2c\x99\x0e\x46\xf7\xf7\x27\x58\x05\xe2\xd6\x87\xe8\xe9\x03\x00\x44\x06\xc0\xe3\x53\x47\x40\x1a\x4b\x16\x85\xd1\x23\x08\xde\xe0\x01\xbd\x32\x65\x81\xc0\xf1\xd9\x02\x14\xf1\xca\x06\xb6\x95\x2c\x99\x18\xe6\x7b\xc9\x7b\x3a\x8e\x8a\xe9\xa0\x38\xd9\xb0\xbd\x54\x01\x84\x7e\x1b\x10\x7c\xaf\x15\xf4\x6c\xc9\xda\x30\x5f\x07\x37\x6b\xbc\xe7\x8f\xd0\x73\x20\x80\xe2\x56\x78\xc5\x75\xf0\xa5\xc3\xda\x18\x67\xff\x99\x41\x62\xb4\xa8\xb5\xb8\x0c\x8c\xe0\x80\xee\x87\xa9\x67\x00\x4c\x86\xd9\x1a\x31\xda\xe5\x36\x20\x5a\x4b\x96\x8a\xd1\xad\x9c\x4c\xc9\xec\xfb\xc0\x80\xc7\x4c\xa1\x25\xe4\x83\xbf\xb5\x83\x1e\x2d\x59\x33\x46\x0f\x26\xd8\x00\x29\x5e\x82\x1e\xcb\x40\x92\x17\x60\xf9\xa3\x9d\x81\x14\x2d\x59\x3c\x46\x77\x21\xb8\xc0\x18\xaf\xe3\xcf\xfb\x2c\xc2\xfb\x39\x02\xfa\x90\x6d\xda\x5a\xb3\x64\xf0\x98\x6f\x33\x1f\xe8\x2f\x18\xf4\xf2\x1c\xac\xd1\x01\x90\x69\x9a\x35\xe4\xdb\x2d\xd9\x3d\x46\x5f\x6e\x75\xd9\x1d\x4f\xb8\x7f\x82\x55\xff\x08\x3d\xee\xc0\xdf\xe1\xd3\x0b\xff\xe2\x12\xac\x7e\x2e\x0c\x3e\xba\x05\x30\xba\x25\x88\xc0\xe8\xee\x6e\x3d\xc0\x3b\x0a\x05\x4d\x2d\x04\x41\x7f\x80\xd1\xbf\x84\x89\xed\xb0\x83\xae\x2d\x41\x05\x46\xb7\x67\x13\x60\x33\xf7\x23\xa8\xea\x23\x70\xe0\xee\xc0\x3b\x36\xc1\x62\xde\xb5\x36\x66\xe2\xd4\x6e\xa9\xb4\xee\xff\xca\x0e\x91\x96\x9e\x44\x90\x60\x34\x67\xd6\x1f\x53\x2f\x6b\x35\x9d\xe5\x83\x28\xd5\x89\x99\xa5\x54\x4f\xd7\x35\x6b\x1e\x4e\xc7\x8a\x74\x71\xf1\x83\x57\x5b\xbd\xa9\x75\x7b\x85\x5b\x39\xa4\x2a\x6f\xff\x0a\x2b\x90\xb7\x9b\x0f\xf5\x0c\x21\x08\x30\x37\x21\xce\xfa\xd6\xdc\xac\xf3\x6e\x1d\xba\x14\xef\xb0\x2a\x3b\x45\x5a\x9d\x3b\x67\xcb\xc0\xf5\xa9\x6f\x73\xcf\x52\xd6\xab\xae\x51\x6b\x37\x50\xa9\x61\x37\x7c\xaa\x70\x5e\x41\xb4\x7d\x02\xa2\xb9\x22\x48\x7f\xdc\x43\xf1\x50\x99\x39\xb1\xc4\xce\xbc\xd2\xe5\xc3\xf2\xcb\x25\x53\x52\x42\xba\x4c\xf9\xa7\xc9\xfd\xf5\xa1\x3b\x9a\x2d\x3d\x70\xd4\xba\x9a\xd4\xbf\xf8\x93\xf0\x44\x0e\xae\x58\xce\x78\x27\xfb\xd0\xb8\x92\xa0\x1a\x23\x10\x39\xc7\x8f\x11\xa4\xbf\xc4\x01\xde\x07\xf9\xcc\x05\x90\xd4\xca\x41\xff\xfe\x14\x12\x1b\xf1\xc8\xac\xcf\xdb\xe1\x7f\x15\xa0\x49\xbf\x37\xdf\xa1\x3d\x16\x75\xa4\x2e\xa2\x7d\xdf\xa3\x6b\xa7\xf5\x6c\x59\x12\xd1\xe9\xdd\xb9\x6c\xa3\xb1\x53\xa4\xc8\x7a\x59\xdb\x4b\x6d\x46\x38\xf6\x74\x68\xdc\x7a\xe6\xdd\x7c\x55\x59\xce\x41\xda\x64\x3b\xaf\x47\xcd\xa5\x9e\xe1\x09\xce\x49\xd7\xe4\x69\x2f\x6d\xd2\xbb\x7e\x1f\x98\x9b\x19\x66\x56\xc9\x47\x94\xbc\x3e\xe8\x20\xe9\xb2\xbf\x66\xc1\xdc\xa9\x5d\x4e\x46\x5e\xf8\x70\xae\x93\xff\xf6\x92\xc1\x91\x0f\x9b\x69\xb7\x7d\x3e\x39\xa7\x63\xc3\xb8\x0e\x21\xe6\x2b\x33\x0f\x1f\xfc\xa7\xcf\xbe\x6d\xfb\x60\x98\x55\xce\x91\xb8\xf0\x0e\x75\x9f\x36\x62\x44\x77\xa1\xdd\x81\x7b\xd1\xd2\x3b\xb1\x59\xe5\x42\xa7\xf1\x78\xc1\x0a\x5a\xcd\xad\x68\xd2\xd9\x90\x31\x8d\x42\xec\x73\xc6\x9c\xf0\x7a\x55\x07\x89\x9f\x74\x7a\x23\x10\xda\x1c\xac\x3e\x21\xea\x96\x7a\xe3\x22\x3d\xeb\x75\xd6\x0b\xd7\x7d\x69\x19\x95\x6d\x57\x96\xaf\x6b\x90\x25\xcb\x88\xd1\x2e\x42\x47\xc9\x48\x5e\x37\xcd\x97\x2f\x68\xf8\xa9\x33\xe5\x9e\x57\x3a\xdf\x2a\xfe\x9c\xa1\xd9\x3e\x67\xfe\x7d\xbb\x07\xdb\x3c\xcb\xca\x17\xd6\xb0\x6f\x28\x55\xd5\xbe\x66\x35\x98\xc9\xcf\x42\xed\x9e\xcd\x7a\xc4\x7c\x13\xbc\x27\xf2\x3d\x6b\x48\xfa\xac\xc1\x5f\x9b\x5b\x2b\xac\x73\x22\xdf\xb4\x5e\x5a\xf9\x4f\x09\xa5\x61\xb1\xd7\x99\x33\xbe\x76\x06\xe7\x68\xd8\x0c\xd2\xee\x03\x0e\x3f\xef\xf6\x24\x75\x0c\x6e\xf7\xd5\x87\xb0\x60\x7c\x50\x9b\x31\x27\x2a\x97\xcc\x9f\x73\xbe\xb2\xe1\xb1\x14\x53\xa6\xca\x92\x0d\x60\xbe\xce\xbd\xdd\x71\xec\xca\x07\x5b\xff\x06\x48\x73\x1e\x22\xd0\xc3\xed\xc0\xe8\x2d\xe9\x3d\x46\xb7\xf1\xb7\x5a\x8b\x1b\x7d\x01\x3c\x7f\x0d\xac\x7f\x2f\x20\x4c\x3a\xbc\xe3\x67\x6b\xa0\x02\x4b\xfa\x8f\xd1\xdd\x09\xf6\x83\xf1\xc1\x3e\x05\xcc\xab\x86\x2d\xd3\x28\x78\x59\x69\x13\xe3\xb8\x3f\x53\x61\xcc\xd7\x8e\x40\xc0\x1a\x56\x78\x28\x72\x86\xa1\xbe\xe4\x1c\x72\x94\x9f\x36\x35\x4e\xfb\x33\xe5\xc6\x68\xd3\x83\xa1\x74\x07\x86\x73\x1a\xfc\x89\xdd\xe0\xef\xbc\x6c\x06\x33\xb5\xa4\xfe\x18\x7d\xad\xbb\x3b\x50\xca\x0b\xe8\xe8\x30\x70\xdd\x47\x80\xf9\xeb\xad\xc1\x8f\xb0\x64\x14\x18\x3d\xc0\xde\x0e\x60\x3e\x1b\x00\x77\x9f\x29\xdf\x07\xd1\xab\x0e\xff\x22\xa1\x35\xf8\x66\x96\xec\x03\xa3\x5b\xf9\xdb\xc0\x86\xed\x51\x57\x5c\x80\x57\x91\x00\xab\x60\x9c\xef\xac\x40\x7d\x2c\x19\x09\x46\x77\x76\xb3\x87\x02\x9d\x5b\xe0\x2e\xc4\x9b\xb6\xfc\x80\x85\x36\x81\x4b\x51\xdc\xce\xb8\xe4\xcf\x2c\x0a\xf3\xb5\xf7\x08\xc7\x7b\x3e\x8e\x4b\xc0\x07\x54\xbe\x0c\xa0\x79\xb3\x9d\x11\xa3\x6d\x07\x8e\xca\x75\x81\x8c\xa4\x25\xc3\xc3\xe8\x36\x04\x47\x53\x8a\x16\x92\x91\x27\x4c\x9e\x2f\x0a\xdd\x3e\x9a\x88\xc0\xc6\xb8\x17\x27\x3a\x4b\x55\xe1\xff\x1f\xd1\x05\x62\xb4\xb3\x88\x90\x9e\x22\xf0\x2e\x84\xa2\x88\x5c\x2b\xe4\xc6\x23\x9e\x29\x6a\x8b\x7f\xf5\x14\xc5\x1e\xdf\x7e\x95\xfd\x35\xc5\xdf\x7f\xad\x95\x11\xa3\x55\xc2\x72\x5f\x04\x05\xb8\x09\xeb\xb5\x1b\x3d\x72\xd7\x3c\x1c\xf6\x72\xe7\xa4\xbd\x5b\xf1\x72\xf6\x8c\x4d\x77\x6b\x9a\x28\x46\x35\xed\x6b\xab\x1b\xb8\x24\xee\xfb\x38\xab\x0f\x73\x17\x4f\xf8\x67\xb5\x1b\x8e\xab\x48\x64\x47\xcd\x83\xba\x85\x85\xb9\xf3\x0f\x7c\xf1\x78\xfe\x22\xe7\x73\xcc\xf5\x87\xfb\xfa\x7a\xcc\xdc\xf9\xae\xdb\xfe\xd0\xb0\xea\xc2\x73\x43\xc6\x3e\x9b\x4f\xc2\xf7\x39\x11\x63\x9d\x02\xed\xeb\xdd\x30\x01\x9f\x71\x28\x6c\xb2\x31\x62\xb4\x7a\xf3\x90\x89\xef\x13\xd1\x76\xe1\x68\xc7\x84\x1d\x9d\xd2\xdb\x3a\xdc\x50\xaf\x99\x7a\xaf\xa5\xd7\xb7\x65\xb7\x69\x8b\x5c\xcf\x59\xd7\x33\x6b\xcc\x7e\x59\xa3\x7f\xcf\x27\x13\xde\x7e\xd8\xb8\x32\x62\x68\xd6\x47\x25\x71\x60\x51\xe8\xcc\x11\x4e\x9d\xbd\xd6\xbd\xbc\xbd\xcc\xc5\xb0\x52\xa1\xc4\xe3\xa3\xcf\x4d\x81\xee\x11\x63\x5e\x46\x2b\xf5\x16\x8a\x3d\x93\x10\x8d\xa4\x23\xe1\xdc\x82\xc5\x7b\x01\x85\x3e\x18\x5a\x8c\x3c\xd4\xbc\x1a\x7c\x88\x8f\x88\x93\xcb\x51\x37\xe5\x20\xd9\xb3\x68\xb5\xae\x42\x1d\xd8\x7a\x24\xab\x42\x73\x4a\xbb\x76\xe0\xf0\xb2\x82\xaf\x19\x36\x92\xd1\x3e\x09\xc3\x89\x77\xd8\xc9\x82\x23\xb5\xeb\x7b\x1f\xfb\xc4\x3a\xf5\xaa\x7f\x2d\xb7\x85\x59\xc9\x37\x96\xbc\xdb\x23\x67\xeb\xb3\xad\x1e\x9b\xd8\xf5\x6d\xfa\xaf\xdb\xd7\xa5\x55\x4e\xf9\x14\x57\xfb\x31\x33\x33\x39\xd5\xc7\x27\x16\xac\x6b\xdc\xda\x77\x69\xd1\x55\x3e\x49\x7a\x89\xf8\xcc\x4f\xdf\xb1\xe8\xc6\xb6\xdd\x93\xc6\xe7\xde\x2c\x63\x15\x7f\x38\xd2\xcf\xe3\xfe\x92\x2d\x76\x8d\x5b\x17\x53\x16\xb6\x98\xdf\xf1\x22\x79\xe8\xc2\x43\xeb\x13\x0a\x3a\x27\x7e\x66\x26\xd4\xdc\xff\x11\x9d\xf5\x5e\x1a\x19\x3f\xab\x72\x27\xb7\x41\x04\xef\x41\xd3\xf6\xa2\x45\x3a\x89\x62\xd3\xab\xe6\xbc\x2a\xe9\xb7\xf4\x91\x4d\xfa\x82\x4d\x0b\x5d\x7d\x25\x33\xd4\x5e\xfd\xda\xae\x59\x3b\x32\x77\x5e\x99\xcd\x8a\x79\xe3\x42\x6b\xe7\x79\x11\x1b\x7a\xda\x00\x7b\xc7\x41\xa8\x93\xbd\x48\xda\xaf\x4c\xb1\x81\x25\xf5\xc3\xe8\x3d\xdc\x4c\xd1\x46\x26\x30\xcb\x61\xc0\x88\xbd\x80\x1a\x3f\xed\x8c\xab\xff\x4c\x29\x31\x7a\x54\x82\x77\xcf\x0d\x0d\x8f\x5d\x85\x1e\x33\xa1\xc7\x75\x00\xc5\x91\x80\x4c\xd1\xf0\x8e\x07\xc0\x70\xeb\xe1\x9b\x43\xc0\x50\x89\x6d\x60\x63\xce\x92\xf6\x62\x74\x7a\x0f\x02\xad\x61\xff\xc1\xa7\x3b\xfe\xf8\x57\x30\xd6\x20\x78\x7b\x32\x64\xf0\x76\x00\x23\x3c\x34\xa5\xff\x2d\xa9\x3c\x46\xb7\x26\xb8\x00\x4e\x7d\x81\xbd\x92\x78\x40\x86\x48\x40\xbe\xab\xed\x8c\x53\xff\x4c\x39\x31\x9f\x39\x50\x5a\x01\x33\xce\x03\xd7\xfe\x31\x8c\xfd\xa8\x23\x30\x95\x25\xed\xc5\x7c\x9d\x9b\x43\xc4\x7b\x0d\x62\x9f\xb3\x26\x9c\x06\x31\x27\xc3\xd4\xbf\x34\x83\x9e\x2d\x69\x3a\xe6\xeb\xde\x3b\x18\xef\x79\x07\x90\xf2\x21\x58\xc9\x04\x18\x73\x22\xbc\xf4\x82\x8b\x71\xce\x9f\x59\x05\x46\xf7\x9e\x61\x52\xc4\x64\x7c\xac\x3e\xee\x78\x3f\xf9\xe0\x67\x5f\x41\x20\x7c\xd5\x54\x5d\x64\xc9\x42\x30\xba\x8d\xbb\x29\xb0\x5c\x67\xe2\x0e\xd0\xca\x75\xa6\x60\xbd\x95\x31\x0b\xdf\xa9\xb1\x74\x6a\x08\xa3\xd7\x17\x96\xfd\xda\xa9\xf9\xff\x4d\xb5\xd0\xc8\x6d\x7f\x92\x3a\xb1\x93\x37\xbd\xfc\xc0\x20\xf7\xb7\x45\x87\xc6\x30\xf2\x9e\x1c\x7b\x5a\x95\xe3\x3d\x96\x34\x61\xd0\xfc\xe9\x0d\xa3\xdf\x8a\x38\xa6\xd8\xa4\xdd\xa0\x83\xe7\xcc\x5d\xd4\xc8\xbc\x8a\xae\xf1\xcf\xcf\x5f\xb3\xbd\xe4\x3b\x66\xd9\xa1\xb5\xa5\xaf\x96\xcf\xcf\x48\x3c\xf5\x69\xef\xa3\xe1\x77\x9d\xde\x74\x69\x3d\xb3\xc1\xdd\x1a\x80\x3a\x83\xad\x94\x27\x08\x46\x7e\xc2\x7c\xbe\x38\xe3\x98\x10\x83\x00\xf6\x23\xe2\xb1\x4f\xe0\x98\x1d\x77\x36\x62\xb4\x44\xd8\xd3\x38\x8e\xfc\xfb\x5c\x04\x1a\xc5\xe6\xf0\xa3\x1f\xea\x33\x32\xae\xfa\x4a\x7f\x5e\xd3\xc8\xbd\x89\x8e\xb4\xa7\xf9\xa7\x26\x7d\x6a\x6b\xbb\xe1\x74\xc4\x94\x93\x65\xb3\xa9\x8b\x49\x38\xea\xa0\x0e\x2e\xa3\x68\xec\xbb\x39\xd3\xcc\x0c\x7d\xba\x23\x35\xe7\xe8\xeb\x73\xcd\x52\xad\x7b\xee\x8e\x3d\x16\xf4\xe6\xe6\x78\x7d\x13\x17\xa5\xa2\xa0\xe9\xae\x83\xf5\x07\xa3\xcd\x92\xbf\xd9\xdd\x1c\x83\xf6\x32\xd8\x23\xbf\xb4\xf5\x54\x75\x39\xe8\xb5\xed\x9b\x32\x73\x75\x65\x35\x71\xf4\x68\xcf\xfa\x35\xe7\xfa\x75\xc5\x03\x75\x18\x78\x28\x9a\x59\x38\xe2\x82\x97\x10\xce\x6d\x45\x4c\x78\x1e\x1a\x24\x20\x5a\xc9\x44\xd4\x5e\x05\x9b\xfc\xfe\x48\xfe\x19\x6d\xf0\xbf\x2e\xfc\x0a\xf5\x00\x3d\x4f\x22\x19\x3c\x45\x92\x7a\x61\x1e\xa8\x96\x3d\xf8\xd6\xb5\x70\x74\xfb\xd6\xc2\x61\xcf\x03\x96\xdc\xc9\x1f\x3f\x2a\x37\xf2\x6a\xb3\xb7\xa9\xdb\xa4\x0f\x27\x9e\xfd\x9c\xb8\xae\x0f\xbe\xfd\x84\x88\xeb\x39\xea\xa5\xda\x7c\x3d\xaf\xd7\xad\x69\x76\x6b\xf4\x6d\xab\xd6\x74\xcf\x4b\xd5\x3b\xfd\xd3\xbe\x72\x82\x1e\x19\x6d\xf3\xa6\xee\xaf\x9c\xf8\x78\xbe\xbe\xff\xf3\x86\x0e\x4a\x11\xcd\x7d\x45\x0a\x5e\x85\x2f\x9f\x0f\xdd\x88\xd1\xd6\xfe\x3a\x48\xd1\x0a\x8f\x48\x39\x28\xc2\xb6\xc3\xc7\x9c\x82\x86\xfb\x0a\xc9\xe0\x03\x38\x73\x67\x9a\x80\x9f\x68\x49\x25\x31\xba\x9d\x37\x01\x3f\xe5\xec\x33\xca\x88\xd1\x22\xc1\x2c\x4e\x02\xf1\x46\x20\xd6\x7e\x08\xa9\xad\x78\x2b\x08\x89\x2c\xe9\x27\xe6\x1b\xec\x0d\x35\x17\xb9\xd0\x6b\x0a\x60\x6f\x8a\xa9\x28\xc2\x01\xec\xd8\x92\xaa\x61\x74\x7f\x6b\x42\x2b\xbc\xc7\x10\x18\x50\x2e\x40\xee\x37\xc0\xc8\x33\x36\xe0\x6c\x5a\xd2\x3d\x8c\x3e\xd8\xdf\xb4\x87\xbb\x0f\xac\xe8\x26\xf2\x3b\xde\x40\xff\x0f\x00\xcf\x22\xed\x61\xe6\x96\x94\x14\xf3\xf5\x5f\x0b\x3b\x30\x5f\xa1\x9f\x52\x18\xe7\x59\x53\x06\xa8\x8d\x51\xfe\x67\xba\x85\xd1\x3d\xa3\x6d\x08\x78\x22\xeb\x0a\x0e\xb9\x3e\x4c\xd0\x78\x64\x04\x55\x10\xb5\xa5\x01\x79\xa4\xc2\x37\x27\x20\x94\xaa\x6c\x0b\x33\xb0\xa4\x8b\x98\xaf\x8d\xb7\x1b\x3e\x83\x37\x80\xe3\x31\xd0\xe1\x63\xd0\xb3\x5c\x27\x63\x24\xee\x7f\x5b\x3a\x39\x89\xd1\xeb\xd7\xd4\x35\xec\x6d\x07\x60\xb4\x3b\xb0\x2b\x9a\xe3\x88\x50\x09\x69\x58\x95\x39\xf2\xe4\xf4\xef\x97\xbb\x62\x29\x4b\x1f\x51\xe9\xa0\xb1\xae\xe8\xd8\xed\xd1\x87\xfd\xdd\x4a\x9f\x37\xf7\x5b\x51\x33\x7b\x1b\xa9\x24\x63\x50\x43\x4f\x8f\x80\xc8\xce\x43\x3e\x3e\x09\xd9\xf7\x1d\xd8\x83\x18\x81\xbc\x5f\xd8\xfe\xdc\x85\x10\x2a\x0a\xfd\x27\x1e\x02\x8a\x58\x14\x60\x5d\x05\xf0\x38\x80\xac\xaf\x1c\x9c\xd6\xc3\x68\x70\x87\x5d\xd1\xe0\xcc\x3d\x4d\xfb\x57\x69\xb7\x6c\xd5\x04\x75\xc6\xf3\xce\x95\xcc\x94\xce\x9c\xce\xb7\xbc\x19\xca\x0d\xaf\x36\x74\x58\xd4\xf6\x8a\x72\xf3\x9c\x07\x38\x2c\xa2\x0e\x52\x5b\xa2\x21\x58\xe1\x7d\xee\x44\x6f\xbf\x8b\xfa\xac\x06\xe7\x6f\x17\xfa\x2b\x0e\x29\x5d\x56\x2b\x18\x07\x1a\x55\xb1\x79\xa5\xdf\xa4\x41\x73\x23\xa6\xca\xbb\x69\xdd\x1e\xd9\x0d\x9e\xf6\x6a\x8d\x83\x57\x12\xc1\x9b\xa1\xee\x9c\xa2\x7a\x72\x2e\xec\x65\x8e\xe7\xd8\x86\x19\x8f\x47\x9e\xb1\xf9\x86\x7e\xe5\xe6\xcb\x4f\x46\xce\x3e\x64\xdb\xbc\xed\xf6\x0f\x33\x57\x5f\x97\x0f\x66\x1e\x9a\xe9\xd8\x3d\xda\xb3\x78\x9f\x70\xf3\xd3\xb2\xab\x39\x8d\x5b\xb7\x49\xee\x1f\xef\xb3\x93\x9d\xe1\x95\xf2\xe0\xc7\x96\x98\xf0\x9d\x73\x9f\xe6\x9f\x7a\xb8\xb3\x87\x47\xbb\x33\xa9\xa1\x94\x4f\xc3\x77\x34\xbc\x48\x89\x64\x05\x38\xea\x8f\x80\x36\xc5\x1c\x34\xd3\xeb\xc3\x9f\xa4\xcf\x4f\x5b\x49\x4b\xdf\xfb\x34\x61\x72\x9b\x69\x39\x13\x3c\x1e\xdf\x8c\x1d\xfc\xee\xc9\xa2\x9c\x25\x1e\x97\xe8\x43\xf0\xb2\x06\x44\x46\xa9\xe6\xb3\xf5\x7d\x60\xdc\x5e\xf4\xe9\x59\xfd\x9a\xf9\xf9\xee\x6e\xc6\x76\xbd\x8e\x6b\x86\xd1\x6e\x87\xb6\x59\x3a\x36\x65\xcd\xea\x68\xd7\x17\x3d\xcc\x0a\xe6\x03\xde\x71\x3b\xbb\xae\x1f\xb3\x3a\x68\xab\x78\xc2\x8f\x49\xec\x85\x3d\x56\xa7\x5e\x3d\x50\x2b\x1b\x16\x14\xd2\x6a\x9b\x60\xbb\x63\xc3\x9b\x9e\x21\xef\xb8\x0c\x8a\x15\x02\x11\x72\x66\x98\xd7\x19\xb8\x5d\x3a\x36\x66\x9a\x7e\xf3\xbe\x14\xcf\x33\x8f\x16\xaf\x3e\x32\xe6\xc0\xe9\xef\x5c\xc7\xfd\x9b\x5e\x4e\x9d\x5f\x5b\x38\x3b\x2d\xbe\x67\xe3\xd6\x31\xf3\x3e\xdf\x0f\x4c\x3a\x1c\x5f\xf0\x3a\x7d\x81\x34\x75\xef\xd6\xc5\x0f\xc6\xaf\x7c\xdf\x72\x1d\x76\xa5\xc7\x98\x53\xa5\xbe\x7c\xb7\x19\x7f\xa6\xcc\x18\x3d\x98\x60\x0d\x09\xa4\x34\xd0\xe9\x03\xe0\x57\x46\x81\x9b\x95\xdb\x0a\xd0\xd2\x92\x06\x62\x74\x77\x6b\x67\x48\xf8\x17\x83\x3b\xfa\x1c\xdc\x8d\x63\x80\x96\x89\xa6\x92\x72\x4b\xea\x85\xf9\xfa\x58\x13\xf0\xcd\xa3\x2d\x88\xf0\x6b\x01\x58\x0a\xa1\xfb\x73\x4d\x61\x78\x96\x14\x0e\xc5\xf9\x84\x89\xf8\xf0\x4e\x01\x3d\x3c\x83\x8e\x6e\x00\x48\xa6\x36\x07\xcc\xb2\xa4\x94\x18\xdd\xde\xdd\x0a\x08\xe7\x19\x4c\xef\x3e\x64\x28\xdc\x00\x75\x5b\x03\x37\x5a\x52\x4e\x8c\x3e\xde\xc3\x19\x72\x3d\xf7\x61\x4d\x9e\x83\x7b\x95\x0f\x70\xf8\x00\xc6\x9a\xe0\x04\x65\x63\x96\x74\x17\xa3\xdb\x5a\x4d\x77\xc7\x0b\xa4\xa2\x4d\x27\x00\x80\x1c\x13\x80\x34\x3e\xc3\x72\x25\x81\x60\x8a\x4d\x45\x0b\x96\x34\x1e\xf3\xb5\xb6\xb7\xc5\xc5\x51\x00\x24\x56\x6d\x4a\x20\x82\xdf\x5f\x6a\xca\x29\x59\x52\x7c\x8c\xee\x4f\x23\xd8\xe1\xf2\x48\x80\xb1\x86\xc0\xe8\xbf\x82\x8e\x3e\x00\xc1\xa4\x98\xa8\xdd\x92\x95\x60\x74\xab\x6e\xf0\xab\x05\xb4\x10\x18\xec\x75\x50\x8b\xb7\xc0\x9d\x6f\xec\x8d\x97\x71\xc2\xb1\x74\xf8\x1e\xa3\xd7\xd7\x35\x14\x2d\xfc\xff\xe6\x7a\xdc\xad\xe9\xbd\xb9\xa9\xbc\xbc\xed\xe1\x83\x4f\x86\x4e\xba\x32\x21\x61\xf8\xd8\xb4\x0f\x6b\x99\xb5\x63\x7a\xfa\x6e\x3e\xbf\xf3\x4b\xd3\xc6\xad\xaf\xd4\xb8\xd7\xad\x79\x3a\x2f\xe6\x5d\x34\xab\xcd\x77\xb7\x51\x0f\xf7\x35\x51\xa5\x6c\x3d\x55\x1c\x1c\x5b\xfc\x39\x64\x76\xf6\xf9\xb1\x78\x22\x03\xf6\x0e\x42\x90\x13\x16\xdf\xd4\x88\xd1\xf2\x20\x15\x12\x81\xdc\xcb\x23\x08\x67\x9e\xc3\x57\xfb\x10\x29\xdc\xff\xe5\x76\x9a\xe7\x89\x1c\x85\xed\x66\xf4\x98\x9d\x57\x5b\xb2\xbb\x66\x4c\x59\xc5\xf6\x2d\x41\xf7\xdd\x12\xba\xee\xd5\x2f\x3f\x18\x5e\x41\x9b\x34\x66\x50\x7a\xe3\xd6\x17\xab\xb4\x82\xa6\x2d\xb7\xcf\x9f\x3f\x79\xec\x2b\xf2\xcc\x9e\x83\xba\xdc\x5d\xbc\xe9\xc0\xf9\x96\xf6\x3a\x97\xe8\xb9\x31\x86\x47\xbd\x70\xb2\x36\xaf\x74\x9f\x4b\xaf\xa9\x98\x75\xbb\xd3\xd5\xfc\xbb\xa5\xc1\x13\xbe\x9d\xfc\x30\xbd\xbd\x6c\xee\xd9\x16\x9a\x39\x87\x26\x77\xb2\x0f\xee\x7f\x03\x9f\xd4\x37\xf3\xc7\x7a\x9c\x09\x09\x9b\x3f\xda\x7a\x72\xdd\xa1\x1f\x05\xfd\x82\xcb\x44\x7e\x2f\x26\xce\xd8\xf9\x71\x92\x43\x97\xf6\xdf\x7e\x0c\xba\xeb\xf5\xc3\x0c\x16\x5d\x37\xda\x30\x67\x0c\xb2\x99\xe5\xe1\x5a\x75\x6e\xfe\xfd\xc8\x6d\x18\x2b\xb9\xfd\xce\xf7\x7b\x97\x4e\x3b\x2e\x19\xca\x9b\xb8\xb2\x81\x41\xe6\x1b\x31\xda\x5b\x60\xc6\x40\x14\xbc\x84\x23\xcf\xf7\x01\xbe\x41\xe0\x83\x9c\xde\xcd\xb0\xd7\x72\x09\xb9\x39\xd5\x78\x22\xce\x47\x63\xc4\x68\xcf\x20\x88\x8a\x71\x04\x71\x23\x76\xdd\x8d\xb0\xe9\x0c\xfe\x98\x0f\x92\x7d\x28\xf8\xca\xf7\x90\xa7\xf1\x18\xf9\xe8\xa5\xe6\xa7\xd6\x7a\xa6\xdd\x3d\xb8\xd9\x21\x3e\xb5\x3d\xab\xc9\x46\xc2\x10\xeb\x69\x67\xda\x35\x99\xb6\xac\xf3\xa1\x09\x77\x19\x4b\xc9\x6e\x65\xd7\xc4\x66\xdb\x56\xfd\xda\x7d\x9c\x17\xd4\xcd\x66\xc1\xd8\x3e\x47\x6f\xae\x0f\x0d\x4b\x28\xed\xd3\xe6\x6b\xbc\x3b\x6f\xd9\xdc\x81\x4b\x75\xb6\x67\x52\x1b\xb7\xb6\x89\xbf\xfa\xa0\x57\xd8\x6e\xd2\x22\xec\x81\x53\xd6\x98\xc3\xca\x7c\xab\xbd\x3d\xef\x6d\xe9\x35\xff\x5d\xcf\xc4\x48\x46\xdb\xa5\xff\xe0\xee\x99\xf9\xd1\xed\xcf\x8b\x4b\x32\x0b\xd6\x3f\x1d\x6f\x8c\xeb\xbe\x63\x71\x6d\xd9\x8c\xc4\x5b\x03\x7e\xe4\xdc\xdf\x36\xe0\xcb\xc5\x26\xd5\xc5\x0b\x7d\x86\x37\x3c\xe6\x0f\x02\x3c\x81\xa6\x7a\x1f\xcd\xf0\x2b\x1c\x2e\x3b\x89\xa6\xfa\x00\x24\x88\x21\x4f\x24\xdb\xb4\x4f\x60\xc9\x16\x30\x7a\x33\x7b\x53\xd5\x74\x09\x40\xd2\x6d\x13\x15\x81\xe1\xaf\x6f\x03\x08\x62\xc9\x5e\x30\xba\x7b\x13\x77\xc8\x4a\x5f\x00\x98\xf8\x00\x3d\x5e\x01\xba\x7b\x00\x86\xbf\xad\x2d\x20\xaa\x25\xd3\xc0\xe8\xf6\xb6\xae\x50\x72\x9a\x04\xc4\x74\x09\x50\xea\x11\xa4\x27\x92\xe1\x9f\xce\x80\x5b\x1b\x65\x0b\xc3\xb7\x64\x50\xbf\xca\x27\x26\xe2\xc3\x2f\x85\xe9\x57\x99\x4e\x72\x41\x6a\x61\x37\x74\xbd\xae\x25\x64\xac\x2c\x19\x1d\x46\x77\xb6\xb9\xe6\x8f\x0f\x3f\x13\x3a\x3a\x02\xc3\xcf\x07\x8f\x7b\x3b\xfe\x32\x1f\xc8\x8c\x1f\x6b\x02\x7c\x60\xc9\x40\x31\xba\xb3\x33\x01\x4e\x1a\x65\x43\x87\x18\x4e\x08\x3e\x33\x00\x62\x9b\x43\xb6\xc6\x92\x0d\x63\x74\xeb\xb1\x90\xad\xf1\x21\xe3\x8f\xd7\x81\xa0\xb7\x41\x79\xd4\x56\xe4\x19\x7e\xb2\x05\x49\x58\xb2\x33\xcc\xd7\xbb\x59\x04\x2e\x88\x58\x10\x44\x24\x48\xf4\x2b\xd0\xd6\x05\x58\xc7\xf3\x00\x02\x21\x8e\xc6\x59\x7f\x66\x9c\x18\xad\x77\x30\x1e\xf2\x92\x8c\x18\x6d\x3b\xac\x64\x19\x28\xe2\x76\x60\xc9\xda\xd6\x50\x06\x62\xc9\x84\x31\x9a\xbf\x1c\x4c\x05\x02\xc9\x4d\x08\xe4\xeb\x40\x97\xc3\x4d\xfa\xde\xd2\x28\xfe\x33\x03\xc7\xe8\xad\x9d\x69\x3e\x78\xdc\x97\x04\x53\x8f\x04\x85\x3b\x05\xb2\xde\x0c\xc6\x19\x0e\x53\xa9\x03\x53\x0a\xb0\x37\x96\xe3\x49\x2d\x4b\x17\xd0\x60\xf4\xfa\xfa\x41\xf5\xbf\x0e\x22\x07\x62\xb4\xad\xd6\x46\x8c\x76\x16\x41\x4a\x9e\x2b\x20\xf4\xaf\xda\x5a\x04\x22\x6f\x60\xd7\xe4\x14\x6a\xf5\x18\x79\xd5\x3f\xcc\xc9\x6c\xf8\xdd\xc3\xad\xd7\x38\xb8\x45\xfe\x10\x79\x3a\x9e\x71\xfd\xd8\xbb\x6d\xde\x0f\xe6\xcc\xfb\x47\x5a\x5f\xd4\xdc\x1c\x9f\xea\xed\x86\xef\xc4\x1c\x40\xa8\x7f\x1d\x85\x6c\x1f\x80\x20\xb7\x20\x06\x3d\x84\x70\xec\x2d\x84\x89\xc9\x88\x09\x2e\xa1\x38\xe9\x23\x98\xc4\x66\xf3\x43\xc1\x29\xc7\x96\x17\x0f\x12\xd3\xd7\xf7\x25\xee\x67\x4d\xfd\x56\x47\x2d\xfd\xf4\x3c\x79\x50\xc7\xc4\xb4\x59\x95\x7b\x67\xeb\x1c\xbb\xcf\x6e\x58\x93\xb5\x88\x1c\x36\x80\x04\x83\xcd\x6b\x1d\x3e\x0c\xcf\x79\x53\x25\x99\x37\xc7\x79\x4b\xdb\xbb\x37\x3e\x9d\xd9\xba\x31\x2c\x7c\xc0\x06\xda\xa1\x0d\xd9\xbb\xc5\xf9\x7b\xe7\xf0\x8f\x34\x6e\xdd\x54\x94\xd5\x32\xa8\x6d\xec\xbc\xc7\x4f\xbb\x8e\x5c\x9d\x35\xad\x64\xd0\x58\xf6\xc9\xf3\xfe\x71\xd1\xc3\x7a\x5d\x3f\x74\x6d\xe5\xb9\x96\x0d\x2f\x49\x6f\x83\xcf\x62\x23\x22\xb7\x6b\x68\xae\xcf\xa1\x94\x6c\x1b\x9a\x66\x09\x2c\x56\x28\x7c\xbd\x05\x45\x83\x3f\xcc\x77\xc6\x0f\xdc\xe2\xc6\x77\x7d\x9a\xf0\x2c\xeb\xa5\x7c\x84\xb3\x62\x92\x67\xdb\x97\x0b\xdb\x5e\x19\xd5\x7a\xc0\x35\x2b\xc5\x85\xbb\x9f\x4b\x57\x34\xa4\x8b\x7c\x10\xfb\xa1\xf8\xf1\x32\x60\x44\x99\xf9\xd2\x10\x07\x57\xd3\x0e\x53\x72\xcf\xaf\x4f\x4b\x29\x18\xfc\xa4\xe8\x83\x96\x3f\x34\xae\x42\xee\xdf\x4e\xe4\x9f\x2d\xcd\xcb\x0d\x75\x36\x2b\x14\x70\x54\xe8\xd3\x6f\xea\x29\x47\x33\x97\x3d\x3a\x9c\xba\xd6\xf3\xd6\xfa\xb5\x47\x24\x04\xb9\xc6\xb3\x3b\x91\xf8\x72\x6b\x7d\x87\x86\x97\x1c\x87\x5d\xfd\x4f\xc8\x0b\xfa\x6c\x1e\xcd\xaf\x7a\xea\xf3\x64\xb6\xf8\x6b\xc1\x5c\xa1\x63\x97\x6b\xc3\xad\x27\x44\x14\x5c\x9b\x97\x64\xf7\x79\x7d\xc9\x9b\x91\x76\xe7\xed\x89\x0d\x9b\xc7\xb4\x8c\x5f\x9b\x55\xe6\x67\xc0\x86\xd9\xa5\xb2\x3f\x62\x58\xbb\xb1\x83\xbc\x57\xeb\x0d\xc5\x19\x0f\xc3\xa6\x3e\xee\xe0\xd0\xb9\x60\xc4\x9b\x97\x67\x1f\xf7\x7a\x35\x05\x3f\xdc\xf7\xab\x72\x03\xbd\xbc\xcc\x01\xee\x76\xb0\xa4\x83\x98\xaf\x9b\x55\x14\x0e\xe8\x01\x00\x89\x19\x00\x36\xe7\xf0\x6f\x7c\xb4\x00\x07\xad\x80\x2a\x2c\x29\x1b\x46\xb7\xb7\xc6\x20\xfd\x1e\x05\x1d\xde\x82\x57\x04\xc0\x37\xb9\x90\xad\xf9\x69\x0b\xa0\x60\x49\x05\x31\xfa\x76\x77\x7f\x7b\x1c\x14\xee\x81\x39\x7c\x32\x9d\x15\x86\x48\x21\x05\x94\xfc\x3e\xa8\xd7\x79\x68\x6c\x74\x02\x1f\xc0\x92\x06\x63\xf4\xc1\x04\x0c\x1c\xf3\x2b\xf0\x8e\x60\x93\x63\x0e\x88\xf9\xc4\xd1\xb8\xf4\xcf\x94\x14\xf3\xb5\x75\xb4\x5f\x87\x97\x4e\x22\x2c\x29\x07\x5c\x3c\x03\xfa\x7a\x0a\x46\xfe\x08\x22\x81\x03\x0e\xc0\x72\x96\x54\x17\xf3\x75\xf1\x86\x5a\xf2\x6b\xd0\x0f\x06\xfd\x5c\x02\xb9\xa7\x9a\x36\x7a\x2c\x69\x37\x46\xb7\x26\x34\x81\x38\xfa\x14\x8c\xb5\x06\xc6\x1a\x66\xda\xdc\xb2\x81\x1e\x2d\xa9\x3a\x0a\x54\x03\x4c\x85\x6e\x00\xdd\x11\x10\x57\x3e\x81\x77\x94\x9b\x56\xc9\x92\x01\xa0\x31\xfa\x43\x15\x62\x94\xe9\xae\x13\x60\xc6\xbb\xa0\x12\xcf\x9c\x8c\xa7\xf0\x63\xb4\x96\xee\x17\x6b\xbc\x5f\xbe\x01\x21\x7f\x04\x32\xce\x08\xd8\x54\xd8\x80\xc2\x98\x57\x88\x1f\x5e\x9b\xc8\x19\x77\xb3\x7d\x3a\x18\x31\xda\x5a\x67\x23\x46\xcb\x87\xb2\xa9\xbb\x68\xa5\xab\xe0\xae\x14\x03\xfe\x6d\x90\xad\x11\xa3\xa5\x41\x9b\x34\x84\x85\x97\xcc\x41\x6f\xad\x48\x58\xe4\xfc\xa2\x3c\x77\xe2\x85\x28\x8f\xa0\xb9\x5b\x47\x0c\xf2\x5e\x3f\x6b\xdc\xd5\xfe\xcd\x4b\xaf\x14\x18\xef\x16\x6e\xbe\xd5\xb8\xb5\x51\xd3\x69\xed\xa0\x89\xcf\x2b\x18\x56\xcd\xaf\x96\x5f\x9d\x21\xda\xed\x16\x18\xb3\xe7\x64\xd3\x81\x33\x9b\x6d\xf3\x5d\x51\x7a\x39\xd7\xec\x1a\xaf\x1a\xe2\xf7\x01\xf3\xd6\x36\x4f\xf4\x7f\x77\x7d\xf4\xae\xe0\x36\x9f\x56\x78\x04\x6f\xad\xec\xfa\x6a\xa3\xf5\x04\xa7\xf9\x21\x94\x6c\xb3\xf2\xea\xdc\x89\xbe\xe3\x9c\x87\x3c\x4d\xf0\x2a\x8c\xbb\x2b\x31\x0e\x18\xb8\x76\xbd\x4f\xa0\xdd\x7b\x56\x9c\xfc\x51\x1a\xab\x7b\xe5\x67\x7c\x0b\x01\x91\x7e\x12\xf2\xbb\x33\xcc\xb7\x42\xd8\xc2\x51\x8f\xe3\xe7\xd5\x89\xfc\xc3\x3d\x2a\xde\xae\x20\xc5\xae\x79\xba\xe4\x81\x77\x8f\x40\xd5\xf7\x75\x9a\x77\x1b\xb6\xb4\xda\x69\x76\x8b\xd5\xe7\xd9\xd2\xfd\xce\xa1\x1b\x22\x8f\xea\x6f\x4c\x7f\xba\x79\x37\xb6\xe3\x5a\xf2\xfb\x56\x9c\xf9\x5d\xed\xaf\x5d\x5d\xd5\x62\xe5\x33\xfc\x6a\x0e\x44\x27\x59\x28\xec\xf9\x08\xd5\x76\xbb\x10\x79\x1c\x40\xe2\xff\xe8\x80\x2f\xc8\x74\x23\x46\xbb\x88\xd6\xf0\x11\x64\x49\x77\x21\x2e\x3a\x67\x9e\xfb\x3a\x3e\xe0\xf0\xec\x4d\xd2\x60\xa1\x46\x29\x09\x6b\x31\x39\xef\xe7\x4b\x5d\x55\x85\x63\xda\xfc\x0a\xf2\x36\x8a\xbc\x6a\x38\xfd\x58\xe3\xd6\xe3\x6d\xbf\x4f\x3e\x1a\xab\xa6\x28\x6e\x7a\x3d\x08\xf4\x8e\x78\x42\x6d\xbf\x77\xce\x30\xb7\xa3\xb2\x01\x11\xbd\x1c\xea\x9a\x5d\x58\x68\xb6\xff\x11\xd8\xcc\x70\xcb\x7e\x00\xb3\xdf\xdc\xd6\xbe\x17\xd2\x46\xf4\x9e\xbd\x37\x5d\xeb\xd2\x19\x0b\x3a\xbd\xc2\xfe\x7d\x8f\xae\x5f\x53\x1a\x06\x7f\x0e\x89\x2f\x15\x89\xef\x83\xb9\xf8\xaa\xae\x49\xb9\x4e\x4f\x0f\x47\x59\xf9\x0f\x3c\x52\xe0\x72\xbf\x5d\x44\x51\xc9\x81\x21\x03\x5a\x5f\xf8\x27\xfb\xd9\x87\xa2\xef\x0f\xd6\xe3\x02\x41\x0c\x50\x81\x5c\x85\x5a\x60\xa4\xcd\xbf\x76\x30\xcc\x73\x93\xc3\x96\xed\xf9\x30\xbe\x76\xc2\x8e\x27\xda\xae\xdf\xe8\x63\xb3\x45\x19\xa5\x09\x2f\x02\x9e\xb7\xa6\x4c\xbd\xb7\x6a\x68\xe2\xfb\x4c\xfc\x8c\xd3\x1e\xa4\xe6\x25\x48\xf3\xbf\x99\x87\x67\x0e\xbd\x2e\x1f\x9f\xff\xb5\xcf\xf8\xec\x0d\x72\xe1\x3f\xaa\xae\x87\x15\xeb\xa6\x17\x35\x1d\x24\x8b\xdb\xe5\xbf\xdb\xb9\xe5\xd7\xcd\xcf\xf0\xd8\x14\x4a\x47\xb2\x91\x97\xf4\xc5\x9c\xdb\x48\xfd\x0a\x5a\xf8\xbe\x1a\x9e\xbe\x7d\x3f\xaf\xe4\xed\x44\xef\x21\xcf\x6b\x2e\xe4\xb7\x19\x13\x39\x4d\x24\x4e\x6b\x7a\x68\xc4\x53\xbf\x39\x7f\x66\x05\x98\x6f\x80\x33\xec\x46\xbf\x06\x98\x8e\x00\x6c\xf9\x04\x57\x36\x9c\x47\xd2\xcd\x30\x55\x78\x5b\xb2\x16\x8c\x6e\x47\x70\x87\x83\x2f\x81\x80\x74\x17\x81\xc5\x36\x02\x64\x9d\x32\x95\xb5\x59\xb2\x28\x8c\xee\xee\x6f\xe5\x81\xf3\xe2\x36\xf0\x56\x9f\x02\x52\x5d\x35\x9d\xa3\x83\xc4\xd7\x73\xd3\x4d\x0a\x96\xcc\x0f\xa3\x77\x23\xb8\xc3\xb6\xcb\x6d\xe8\x31\x00\xd0\xd4\x08\x3e\xfd\x83\x36\xc0\x25\x96\xec\x11\xf3\x75\xb6\x03\xa1\x66\x03\x77\x16\x42\xe0\x71\x00\xa4\x7b\xcb\x94\xf4\xb4\x64\xb2\x18\xdd\x9d\x10\x05\x43\x8c\x04\x31\x3e\x00\xc7\xbe\x1e\x70\xba\xd2\x34\x69\x4b\x06\x89\xd1\x6d\x6d\x4c\xe7\x77\x4f\x99\xe2\x4e\x18\x63\x26\x7c\x38\xe5\x02\xee\x85\x25\xa3\xc5\xe8\xee\x36\x3d\x9c\x70\xf7\x22\x19\x18\xb4\x10\xe4\x79\x14\x18\xff\x15\x0c\xff\x1c\x68\xc1\x4d\x90\x70\xbe\x33\xa8\x83\x25\x9b\xc7\xe8\xce\x04\x07\x17\x5c\x1d\xaa\x81\x53\x6f\x82\xc3\x72\x1c\x34\x39\x12\xf4\xe2\x93\x35\xd4\xd3\x59\x42\x03\xe4\x81\x79\x43\xba\x7a\xd3\xaf\x4c\x12\x8c\x38\x13\xe4\xfc\xb0\x05\x9c\xc3\xb6\x04\x06\x18\xdd\xbb\xb7\x35\xb8\x2d\x41\x08\x3b\x23\x41\xb1\x82\x41\x8b\x23\x61\xd8\x81\x30\xec\x1f\xcd\x8c\xec\x3f\xc3\x0a\x8c\x6e\x67\x45\x00\x4f\xf4\x28\x28\xc4\x4b\xc8\x6b\xed\x46\x78\x96\xf7\x6b\xeb\x08\x5e\xfb\x10\x96\xe6\x76\x3b\x88\x51\x2d\x61\x09\xe6\x3b\xdd\x1a\xf4\x79\x1d\x08\x7b\x0f\xa8\xf1\x4f\x1c\x24\x7c\x06\x1b\x31\x5a\x98\x95\x31\x1f\x4f\xb4\x5a\xba\x5b\x14\xa3\xd7\x5f\xc4\x4f\x87\x05\x62\xb4\xe3\x28\xda\xbf\x84\x22\xb8\x22\x00\x9d\x30\xf4\xd5\x6b\xd8\x74\x09\x43\x60\xfc\xd3\xbc\x48\xda\xfa\x58\xd3\xe7\xc9\x27\x1d\x55\x94\xf1\x49\x94\xe9\x3b\x5f\x09\x34\x8a\x9b\x05\x03\x3f\xf4\x2a\x13\x6f\xf2\xf9\x7e\xe3\xd5\x97\xf1\x8d\x5b\x7b\x0c\x5c\xbc\xe5\xe8\x59\xbb\x13\x9a\x51\x94\x1d\xc7\xaa\xe6\x39\xac\x4c\x3b\xf0\xe6\xc9\xa9\xd8\x97\xdd\xeb\x26\x2e\xae\x1b\x9b\x83\xef\xbe\xc5\xa3\x65\xca\x42\x2f\xaf\x84\x97\xfb\xa3\xb8\x28\xa6\xa5\xd9\xcb\x2f\x6e\xaf\x34\x76\x79\x37\x73\xf6\xee\x0a\x47\xb5\xee\xd9\x82\x01\x14\xeb\x11\x97\xe8\xdd\x3e\xb8\x7c\xcb\x6a\x3f\x83\xbd\x64\x7f\x49\xe3\xd6\x5d\x6c\x3e\x7e\xb4\xba\x39\xb8\x74\x43\xde\x3e\xbb\xc4\x09\x25\x7b\xe6\xf6\xd4\x64\xdb\x4f\xdb\x13\xb1\x6d\x4a\x6c\xf7\xdc\x61\x23\x87\xe1\x5e\x18\xf8\x3a\xa3\x71\x0a\x96\x20\x0e\x42\xcc\xfc\x19\xd2\x03\xa7\x11\xcb\xbd\x35\xcf\xb3\x92\x24\x6f\x63\xb6\xb0\x9b\x69\x97\xf8\xaf\x9f\x7e\xd1\xf1\xdc\xf9\xae\x93\x3a\x4a\x43\x64\x0f\x5a\x68\xd7\x74\xce\xde\xd1\x73\xf1\x7e\xfc\xa6\x02\x44\xe6\xcf\xcd\x9f\x5d\x96\xd9\xcf\x5f\xc0\x1c\x5c\x24\xb2\x9e\x37\x7c\xf0\xae\x68\x4e\xe9\xb7\x2e\x03\xfb\x35\x9d\xe2\x7a\x71\x70\x60\xd7\x05\x41\xa7\x8f\xe3\x27\x58\x91\x2f\x16\x87\x96\xa1\x00\xcc\xea\xb9\x79\xd5\xe1\x45\x02\xf7\x94\x6a\xd0\xdb\x67\xcd\x75\x1b\x47\x28\xcf\xed\x7c\x50\xb1\x7b\xfe\x97\xf7\x17\x4b\xe6\xf3\x5b\xc9\x48\x9c\xaa\x5d\x9f\xf0\x63\xae\xc8\x7f\x8b\x43\x43\x79\x08\x85\x25\x81\x88\xe5\x7e\x9a\x1f\x86\x6b\xbf\xef\x40\x4e\xf6\xb7\x64\xcd\x50\xc7\x98\x81\x81\xdf\xf2\xce\x71\xee\xcf\x98\xda\x7e\xd9\xb3\x9d\xb3\x47\x3b\x67\xcc\x7f\xfc\xf5\x4b\x83\x88\x64\x46\x8c\xb6\xcb\xda\x88\xd1\x8e\x9b\x9f\x09\xec\x4a\x59\xb8\xc4\x9d\xa3\x39\xac\x9d\xa3\x5d\xd0\xbd\xb3\x4f\x95\xfc\x48\x78\xf7\x09\x93\xb4\x23\xab\xb3\x43\x43\xb6\x7c\x5d\x9c\xd7\xb8\xf5\xa1\x7e\x4e\x89\x4d\x1e\xb6\x1d\xb9\x27\x6e\x4e\x2f\x4c\x5c\xe4\xe2\x6d\x73\x5c\x94\x31\x8d\xde\xaf\x0f\xcd\xf3\xc9\xac\xdc\xe0\xe3\x0d\x23\x7d\x8f\x94\xb4\x16\xee\x33\xf3\x47\x3c\x1f\x8a\xfe\x13\x09\x67\x76\x4e\xfe\xd2\x5b\x3c\x2b\xe1\x83\xdc\x8a\x2b\xc8\xa9\xaa\x35\x2f\xec\xf8\xfe\xbd\x62\xaa\x2a\xc3\x6d\xc9\x81\xcf\xee\x77\x23\x9f\xf9\x4d\x9d\x73\x71\x76\xc9\x7e\xf2\xab\x83\x25\x19\x15\x6b\x5b\xee\x08\x6a\xd9\xf0\x82\xed\xe8\x75\xbb\x91\x02\x94\x38\x42\x86\xcd\x92\xd6\x63\xbe\xfe\xfe\x50\x10\x7d\x12\xe8\xf7\x0d\xa0\x43\x2e\x38\xce\x05\x68\x19\xbe\x9b\xae\x48\xb4\x64\x1d\x18\xdd\xc5\x86\x00\x38\xf0\x15\xb0\xb0\x1e\x00\xe1\x21\x20\xcc\x3b\xd3\x71\x25\x4b\x06\x82\xd1\xfd\x09\x84\xf9\x50\x40\x08\xc0\x94\x0c\x94\x79\x09\x58\xa8\xce\x44\xbd\x96\x8c\x08\xa3\x3b\x38\x13\xf0\xfd\x50\x9f\x35\x10\xd1\xc2\x58\x3f\x98\x0e\x5c\x9b\xae\x6f\xb2\x64\x36\x88\x7a\x9d\x03\xe0\x26\x40\x20\xb1\x1b\x20\xc2\x0b\xc8\xc3\x33\x82\x08\x6e\x9b\x2e\x94\xb0\x64\x51\x98\xaf\xbf\xfd\x74\xbc\xd7\xf7\xc0\x91\x7b\x60\xbe\x5f\x41\x02\xaf\x5a\x41\x09\xbc\x25\xc3\xc2\x68\xcb\x61\xd3\xee\x32\xf0\x69\x24\x8c\xeb\x2a\x78\x45\xa7\x5d\x80\x61\x2d\x59\x16\x0a\xe0\xbd\xc1\xe1\xca\x03\x7b\xdf\x0c\x02\x2c\x86\x1e\x4f\xc2\xcb\xb6\x99\xf4\xc8\x92\xd1\x61\x74\x67\x1b\x42\x38\x9c\xb3\x06\x1a\xa9\x86\x1e\xdf\x00\x0b\x5e\x37\x9d\x5d\xb6\x64\x98\x18\xdd\xde\xdf\x14\x19\xbf\x85\xd5\xfe\x06\x0a\x1f\x0b\x9e\x46\x95\xe9\xf2\x4e\x4b\xb6\x87\xd1\x6c\xf6\x41\xb5\x3e\x8c\xc7\x08\x01\x72\xb6\xe9\x42\x0a\x58\xb9\xc2\x16\xc6\x1a\x3c\x40\xb6\x74\x49\x36\x46\x2f\xac\xff\xdf\xfd\x45\xeb\xd2\xc2\x83\x61\x11\x85\x71\x94\xf0\xd6\xc6\xbe\x0b\x27\xc8\x77\xee\xe0\xd4\x49\xca\xca\x69\xf9\x31\x07\x47\x7f\xda\xd5\xbd\x45\xe3\xd6\xaf\x6e\x0c\x23\x5e\x0a\x39\x56\x56\xb2\x69\xe5\xb9\x77\x8a\xf5\x4e\x7b\xa7\x8d\xc1\xae\x08\x2b\xba\x6c\x70\xcd\x3a\x7d\xcd\xbb\x6f\x54\x03\xf2\xb4\x37\x62\xb4\xad\x88\xcb\x4a\xcc\xf1\x7e\xfc\x4a\x6c\xb9\xc1\x3d\xe5\x46\x69\xe4\x8d\x1d\xb7\x7a\x76\x52\xb5\xec\xd8\x73\x4d\xe9\xe0\x63\x82\xed\xa3\x4e\x78\x7d\xf5\xda\xd5\xf0\x3c\x6d\x3f\xc2\xb1\x9b\xc8\x79\x78\x61\x4e\xbb\xe5\xc4\x98\xf1\x25\xa7\x3b\x8e\xbd\x49\x28\xb1\x1a\x10\xeb\xbb\xba\x7d\x58\x6e\xe4\xe6\x8c\xe7\x21\xad\x0b\xf2\xda\x1d\xfc\xda\xb1\x0f\xae\x1b\x60\x25\xa7\x11\xfe\xfd\x30\x3f\xb2\xec\x9b\x70\x5e\xf2\x73\xda\xc3\x6f\xfd\xa5\x47\xe6\x7a\x51\x8b\xdd\x1c\x33\xe6\x70\x17\x7c\x4d\x3e\xb5\xa3\xe5\xd2\x28\x8f\x82\x21\x66\x17\xc9\x2f\xf3\x1e\xb5\xf2\xc8\x90\x1a\xca\xa4\x4b\x13\x8f\x7c\xcf\xea\xe4\x1d\xd2\xf7\x8b\xd3\xd8\xb2\x7b\x89\x39\x47\x17\x8d\x1f\x34\xbb\xca\xec\xc2\xea\xb5\x4d\x2a\x46\x0b\x3e\x57\x74\x5a\x92\x3a\x31\x96\x9e\x42\x5a\x63\x57\x3d\xef\xe1\x17\x79\xce\x18\x97\xef\xfe\x43\x3c\x97\x8c\xc0\x6f\x68\x08\x43\x41\x70\x34\x9e\x66\xf5\xf1\x35\x62\xb4\x00\xc4\xad\x2f\xe0\x3a\x86\x20\x84\xbd\x37\x10\xf6\x3e\x37\x2f\xe4\xe9\x33\xfe\x29\xbb\x7d\xaa\x7e\xc5\xc4\xfd\xd1\xe7\xe9\x13\x9c\xba\xb3\xdd\x2a\x62\xde\x59\x47\xb5\xb2\x73\x33\x38\xd4\xe6\x64\xbf\xc3\x43\x6a\xc4\x71\x49\xbf\x8e\x7e\x41\xc1\x4b\x3c\x7a\xe7\x75\x48\xed\x46\xa1\xbf\x72\x5b\x18\x31\x5a\x1d\xec\x35\x6e\xf8\x75\x7f\x25\xfa\x2a\xdd\xbc\xb4\x25\x96\xd5\x49\xf8\xd9\x63\xc2\xab\xfb\x09\xfb\x12\x30\x4d\xc5\xf1\xb0\xcf\x41\xdf\xf3\xfa\xce\xab\x4c\x09\xa6\x46\x9f\x1f\xd0\x06\xcf\x24\x60\x88\x0a\x0f\xfe\x62\x0c\xf3\x04\xee\xe9\xfe\x8b\x74\x59\xe7\x8f\xf4\x7c\x72\xc7\x67\xfc\x91\x70\x6d\xc4\xa9\x5b\xe9\x51\x77\x0a\x3f\x4f\x1e\xae\x5a\xfa\xf0\xdc\x98\x70\x33\x8f\x65\xd3\xb0\xe5\x7a\xfe\xbb\xeb\xd8\xea\x79\xae\x7d\x6c\xd8\x3b\xd7\x5e\x3f\x1b\x3d\xaf\x6d\x2c\xb5\xb2\xf7\xb0\xc1\xa3\x52\x18\x19\xf1\x0d\xab\x1c\x67\x9e\x0b\x8f\x2b\xe7\x6d\xf7\xbd\xd6\x9b\x5f\xd3\x6a\xdc\x56\xa7\xd7\xae\xf6\xca\x6d\xa9\xe3\x06\xf5\x2c\xed\xe6\xbb\xb5\x07\x75\xc1\x32\x2f\x36\x4e\x9c\x48\xb1\x42\x11\x03\xd5\x9b\x6b\x97\xed\xea\x13\xb6\xf3\xb6\xb7\x3e\xbb\xb3\x2f\xe5\xc1\xfb\x16\xcd\xed\x8e\xf5\xeb\x3f\x77\x35\xe7\x63\xfd\xc8\x21\x27\xfa\xbf\x7c\x33\xfa\x8d\x99\x50\x5e\x1d\x19\xdc\x47\x30\xd6\x4b\x74\x9f\x3a\xbe\x6a\xef\xad\x9e\x09\x93\x47\xd9\x97\x8d\xe5\x36\xb9\x7d\xe4\x34\x89\x75\xf9\xf6\xaa\xc6\xad\x19\x03\x8e\x5f\xea\x46\x3c\x7b\xe8\xf0\xac\x53\xaa\x0f\xaf\x36\xfc\x34\x30\x36\x8c\x54\xd9\x67\x45\xd7\x0b\x6c\xd3\x46\xbd\xf5\x7b\x8a\x87\xc2\xe6\x31\xfb\xca\xf4\x90\x61\xb1\x35\x3f\x92\xad\x8a\x9d\x07\x9d\xe0\xcd\x3a\x17\x77\xd6\xb1\xa6\xb4\x94\x39\xf7\xf4\x48\x12\x96\xfb\x75\x76\xd7\x65\x7f\x66\xc6\x18\xdd\xdb\xde\xb9\x35\x0e\x2c\xb1\x00\xcf\x9b\xc0\xcd\x7c\x84\xb4\xaf\x0e\x60\xcb\x1f\xe2\x8e\x4b\x36\x46\xee\x9f\x19\x3e\xe6\xeb\x1d\xdc\x09\xdf\x04\xbb\x08\xfd\x6c\xc4\x69\xc5\xa7\x2f\xfe\x9a\xcb\x28\x9a\xcf\x05\x50\xcc\x86\x24\xe7\x66\x47\x88\x91\x2c\xe1\x03\x46\xef\x41\x70\x86\x33\x47\xef\x80\xb7\x4f\x83\x03\x94\x8d\x7c\x9e\x1a\x67\xa0\x58\x4b\x60\x81\xf8\x60\x3c\xa0\x77\x96\x69\xd4\x70\x64\xc3\x88\x74\xa4\x06\x9c\x8b\x3d\x2e\x70\x99\x90\x25\xf8\xc0\xe8\xe3\x7b\x0c\x86\x9d\xdd\x14\xa0\xa9\xad\x50\x0c\x1e\x87\x98\xfb\x1d\xa4\xd1\xdf\xc2\x5a\x6c\x04\x3e\x8a\x6b\x05\x3b\x8f\x96\x90\x07\xf3\x8d\xf6\xee\x81\xbf\xe7\x08\x74\xf8\x1a\xa4\xfa\x04\xb8\xb3\x16\x96\x33\x0a\xbe\x89\x6b\x63\x5c\xf4\x67\x70\x85\xd1\xdb\xba\x37\x6c\x99\x62\x18\x6d\x3b\xc2\x93\x7d\x40\x46\x89\x50\xfb\x77\x0c\xc5\x28\x71\x10\x4b\x46\x37\x01\x67\xd1\x12\x52\x61\x74\x67\x6f\xc2\x78\xdc\x65\x1a\x82\x77\xb6\x01\x21\xf6\x17\x58\x8b\x3b\x26\xfe\x6f\x0d\x45\x5f\x96\xa0\x08\xf3\xf5\x6e\x62\x8a\xa2\x7f\xdd\x4b\x08\xae\xc3\x13\xd3\x15\xd8\xa6\x7c\x92\x25\x58\xc2\xe8\x4d\xdc\x4d\xf5\xb6\x18\x0c\x26\x1a\xbc\xb1\x9d\xd0\x75\x84\x2d\x9c\x45\xb0\x04\x5d\x18\xdd\xff\x1f\x02\xec\xb3\xec\x80\x35\x0f\x85\xfb\xa7\x27\x82\x9b\x03\xef\x0a\x6f\x06\xda\x60\x09\xdd\x30\x7a\x8f\x6e\xce\xb0\x23\x5f\x07\x1e\xdd\x3a\x10\x65\x28\x7c\x93\x8b\x6b\xb4\x0f\x01\x7c\x08\x2b\x10\x87\x25\xfc\xc3\xe8\x56\x04\x17\x28\xb0\x78\x0a\x9a\x1b\x03\x7e\xca\x17\x18\x74\x84\x2b\x78\x7b\x96\x30\x12\xa3\xfb\x84\x9b\xc4\x61\x34\x79\x9f\x00\x11\x27\x61\xd0\x6f\x41\xd2\x3b\x4c\x7b\xd1\x96\x00\x15\xa3\x7b\x4f\xb6\x6e\x85\xe7\x85\xf2\x21\xe7\x71\xd9\x54\xa9\x06\xc3\xdf\x06\xc3\xbf\x05\x6f\xfd\x0a\xb6\xf4\xca\x74\x3f\x8e\x25\x18\xc6\xe8\xf6\x56\xcd\xe0\xc8\x7b\x06\x60\x46\x3d\x68\xdc\x61\x30\xca\x9f\x30\x8e\x63\x2d\x8d\x9b\xf0\x7c\x85\xa5\xdf\x2b\xc1\xe8\xb5\x75\xf5\x17\xcd\x7f\x79\x21\x20\xf1\x9a\x83\xcb\x13\xf2\x51\xdf\xb6\x59\x93\x27\x59\x6f\x7c\x5d\xdf\xc6\xeb\xe8\xbd\xa7\xe4\x8c\x1d\xca\xbc\xb3\x87\x9b\xbd\x30\xfb\x55\x19\x97\xb1\x2d\x52\xb5\xf5\xe3\x92\xae\xdc\x2b\x8a\x7a\xba\xf4\x4a\x72\xb8\xdd\xbb\x54\xf5\xb8\xb0\xa2\x45\x77\x8e\xd6\x7d\x20\x4d\xc2\xf0\xbd\x6d\x14\x68\xdf\x41\x01\x71\x05\x14\x18\x1f\x42\x90\x7d\xdc\xdc\x09\x89\xa1\x31\x6f\x45\x58\xcf\x9a\xf1\x3d\xe0\x60\xc0\xea\xac\xa0\xc7\xd3\x1c\xc3\x18\x9a\x92\x37\xcd\x38\xb7\x1f\x1e\x68\x7b\x87\x19\xdf\xf0\x6c\x0c\xf2\xe3\x6a\x01\x00\x23\xe0\xc3\x35\xa8\x6e\xde\x86\x98\xf8\x09\x7a\x5d\x8d\xf9\x75\x96\xdf\xce\xb9\xff\x4c\x22\x8f\x9d\xf2\xa5\x55\xff\x0e\xc2\x82\xa3\x3d\x17\x3f\xbb\x98\xcf\x18\xb2\xb9\xeb\xec\xe8\xfe\x37\xdd\x0e\x49\x1b\xae\xff\xf7\x99\x6c\xc4\x68\xe7\x91\xa7\x53\x6e\xda\x4a\x68\x6e\xc4\x68\xb1\x88\x06\x2e\x98\x67\xe3\x4f\x53\x6a\x36\xba\x75\x7c\x3d\x60\xc0\xc1\xa2\x65\x36\x47\xce\x7b\xec\x6d\xf1\x53\xb0\xe0\x72\x8f\x9b\x7b\xf2\xee\x6c\x78\x7a\xb4\x46\x80\xfb\x9e\x08\xcc\x62\x51\x2f\x9f\x81\x55\xae\x20\x11\xd4\xc0\xa0\x23\x10\xa6\x9c\x43\x33\x33\x82\xe2\xdc\x30\xf7\x23\xae\x14\x0d\xe0\x6c\x13\x5f\xef\x54\xeb\xe9\xc7\xc8\x3f\x7e\x7f\x13\x89\x36\x7b\xa7\x7d\x1b\xbf\xbc\x99\x43\xe2\x33\x2e\x2c\x12\xad\xc6\xe3\x4e\xf3\x82\x80\x3c\xd6\x3f\xb2\xa7\x6f\x8c\x84\x81\xb9\x57\x7c\x03\x35\x73\xef\xa7\x53\x9d\xa2\x77\x76\x29\xbd\xd5\x67\xf8\x57\x87\x9e\xfd\xa6\x0e\x6c\xdc\x9a\xd7\xcc\xf6\xec\xd1\x2d\xb9\x2b\x3b\x35\x71\x59\x30\x9c\x9c\xde\xcd\xbd\xec\xe1\x94\xe3\xa5\x63\xbc\xe6\xce\xf4\x9b\x48\xda\x39\x6f\x16\xce\xf5\x10\x32\xbc\x37\xaf\x1f\x13\x97\xd6\xcc\x8e\x4f\xed\xc9\x48\x0f\x67\xf5\x3c\xb2\xee\x76\xbb\xa1\xe3\x26\x19\xda\x95\x6c\xb4\x6f\x27\x1f\xe5\x19\x3d\xea\xa5\x6b\xc3\x74\x03\x90\x9f\x88\xa1\xe9\x6e\x80\x8c\xc9\xa6\x5f\x57\xa6\xc1\xe9\x94\xad\xc8\x75\xb8\x6d\xde\x79\xf4\xfc\x82\x91\x36\xeb\x9c\x7f\x18\x82\x7b\xc5\x0f\xba\x47\x0e\xf3\x5c\x56\x2f\xf9\x1c\xb6\x71\x85\xb3\xf3\x22\xd2\xfb\x85\x4d\x7b\x35\x74\x1e\x8e\x1c\xc6\x4c\xf4\x9f\x6f\xa6\xa2\x4e\x4b\x7a\x8d\xd1\xbd\xad\xd7\x43\x91\xeb\x53\x20\xa3\x27\x00\x73\x51\x10\x19\x7d\x00\x4b\x3b\x6d\x07\x25\x59\x96\x8c\x00\xa3\xdb\xfa\x5f\x06\xe2\x7e\x61\x62\x4d\xc8\x63\xec\x00\x30\x5a\x6f\xda\xf7\x05\xc0\xc2\x4c\x35\xba\x96\x2c\x03\xa3\x47\xf5\x26\xc0\xa5\xa1\xb7\x01\x1f\xa2\x60\x95\x36\x9b\x76\x28\x00\x4b\xeb\x4d\x58\x6a\xc9\x26\x30\xba\x95\xbb\xcd\x78\xbc\xeb\x2a\xe8\xf1\x22\x88\x68\x8f\x09\x83\x60\x66\x46\x53\x75\x80\x25\xdb\xc0\xe8\xfe\x04\xba\x1b\xde\x75\x18\xc4\xb9\xdf\x4d\xf9\x12\x90\x7e\x01\x74\xfd\xa5\x1d\x5c\xbf\x69\xc9\x16\x30\x5f\x6f\x02\x1d\xe7\xeb\x82\x5f\x37\xeb\xe1\x2b\xe8\xb3\x14\xef\xeb\xb9\x23\x24\x37\x2c\x19\x08\xe6\x4b\x73\x86\x9a\xf4\x9d\x26\x06\x05\x91\xde\x07\x91\x84\xb5\x35\x2a\xfe\xcc\x86\x30\xba\x7b\x88\x13\x9c\x63\x79\x00\x1a\x75\x0a\x24\xb9\x03\x14\xe1\x33\x88\x04\x03\x49\x6c\x81\xa4\x69\x32\x72\x9a\xaa\x9b\x80\xfb\x62\xc9\xea\x30\x5f\x7b\x82\x0f\xee\xe0\xae\x87\xfb\x07\xe3\x11\x02\x65\x01\x73\xa5\x3a\x42\x6e\xc6\x92\x95\x61\xbe\xde\x56\x8e\xb8\x3c\x4e\xc0\xa0\xd7\x81\xd2\x6d\xc4\x47\xef\xd3\xd1\x18\x8f\x53\x91\xa5\x1f\xc3\xc2\xe8\x85\xf5\x6b\x4c\x87\x62\x0a\xcc\x51\xfb\x2e\xc9\xf3\xcb\x94\x71\xcb\xe7\x1e\x7a\x5f\x72\xfa\x13\x75\x6b\x66\xd9\x15\x86\xa1\x83\xdb\x3c\xed\x9b\x8f\xb7\xf8\x07\x7b\x3c\x64\x9a\x31\x58\x68\xc0\x87\x10\x27\x7e\x18\x5b\xaf\xe8\x2a\x1b\x77\x22\x63\x82\x83\x93\xc8\x6b\x6c\xc2\x88\x1e\x1d\xc6\xc9\x1f\x5f\x11\x35\xe4\x58\x69\xf9\x56\x46\x8c\xf6\x1a\xb9\xe2\x25\xf8\xf9\x6b\x1f\x2a\x8a\x53\x11\xc6\x57\xc3\xd2\x5e\x00\x9f\xfd\xbe\x2b\x02\x13\xb0\xd8\x50\x28\x04\x3b\x8c\x14\xab\x08\xb9\x96\xd5\xe6\x91\xa9\x74\x81\x74\xe1\xe7\x31\xbd\xff\x11\x1f\x25\x3d\x4b\xa6\x1e\xad\x08\x8c\xdb\xbb\x7f\xd6\x9e\x4b\x0b\x0e\xd8\x2b\xea\xce\x24\x79\x7f\x6c\xe8\xf7\xf0\xaf\xdf\xfe\xc1\x0f\xc0\xf8\xac\x36\x62\xb4\x04\x44\x5e\x49\xf8\x7e\x35\x6d\x3b\x62\x8c\x33\x28\x80\xbe\x00\x31\xfc\x5e\xf4\x48\x0a\x7a\x67\x8d\xf9\x4e\xae\xea\xd9\x68\x55\xd2\x18\xf2\xf1\x7c\x95\x21\xeb\x15\x81\x39\xa5\x6b\xd2\x35\xcf\x9b\xbc\x13\xf9\xa9\x0b\x0b\xbc\xd2\xba\xaa\xcc\x80\xde\xde\x63\x46\xdb\x2e\x2f\xef\xf4\x5c\x56\xb8\x54\xaa\x99\xa5\xbd\x3c\xd5\xcb\xff\x7d\xe6\x94\xdd\xf2\xfb\xf7\xb3\x46\xef\x4f\xbe\xfe\xb8\x71\x6b\xc1\x56\xf6\xbb\x63\xbe\x3b\x2e\x8f\xa9\x1b\x32\xab\x7b\x9f\x65\x5f\xdf\xb7\xba\xd6\x46\x3d\x67\xcd\x97\x9a\x01\x13\x3a\x5b\x7d\x2f\x69\xd5\xb0\x65\x82\x14\x6a\x37\x64\x49\x76\xa1\x98\x3f\xd5\xe4\xd4\x82\x27\xff\xd4\x3c\x6f\x3c\xc6\x91\x36\xf9\xb4\x93\xe7\xcd\xc1\xe5\xed\xaa\x6e\xdd\xaa\x1d\x7e\xde\x99\x18\xf8\xac\x09\xed\xf0\xda\x25\x7b\x9f\x2d\x19\xd2\x5e\xd7\xf0\x58\x00\x78\x4f\x97\xe1\x4c\xe3\x43\x44\x1f\xef\x90\x70\x8a\xcd\xa5\x3f\xe0\x4b\xd7\xe5\x51\xec\x9d\x36\x65\x27\x9c\xb6\x57\x14\x8f\x39\xfe\xaa\x4d\x26\xdd\x67\xf8\x05\xa5\x8f\xcb\x64\xa7\x25\xd6\x57\x2f\x35\x6e\x7d\xe7\x4e\xc4\x2b\xb1\xff\x80\xd4\x17\xe9\xe5\xc1\x4f\xd4\xd1\x9f\xec\xf9\x37\x12\xc6\xb6\x73\x5a\xe0\xce\xfc\xf0\xa0\xdc\x7f\xc9\x6c\xb3\x4d\x97\x75\xd7\x7b\xb1\x73\x92\x6c\x76\x95\xf5\x1d\x99\xf8\xbd\x95\x6e\xd7\xc8\xbc\x69\xc7\x4f\x34\x2f\x7e\xe0\xf4\xd1\xef\x75\xe2\x9d\x8b\x8d\x5b\xef\x2f\x1f\x44\x2a\x7c\x79\xd5\x3e\x44\xd6\x9e\x6e\x3f\x61\x7c\xfa\xaa\xc2\x01\xa7\x63\x4f\x5d\x4e\x35\xca\x5b\xf8\xa8\xd4\x2f\x2b\x1b\x44\x95\x88\xb8\xaf\xa8\x39\x44\x98\x96\x14\x1e\xa3\xb7\x22\x78\x03\x22\xbd\x06\xb8\x3c\x07\xb0\xf1\x15\xb6\xda\xd3\x91\x70\x2a\x9a\x41\xe4\x64\xc9\x32\x30\xdf\x83\x56\x10\x94\x61\x48\xe3\x43\x60\xcd\xd2\x4c\xbf\xca\x63\x0a\xe6\x4d\x3f\x41\x60\x49\xd3\x31\x7a\x6b\x2b\xd3\xd6\x6c\xa6\x69\xb3\x17\xba\x4e\x02\x40\xad\x31\x1d\x64\xb6\xa4\xc7\x18\xdd\xc6\xdf\x74\x00\xf2\x39\x00\xd0\x2b\xd3\xf6\x31\x50\xd3\x19\x53\x40\x66\x49\xd7\x31\xba\x0f\xc1\x1f\x04\xba\x19\x3a\x4a\x86\xe8\x60\x97\xe9\xa2\x5e\xd3\x06\xbf\x25\x7b\xc0\xe8\x0e\xfe\xd6\x50\xe2\xbd\x1e\x96\x68\xad\xc9\xb1\x80\xe9\x5f\x34\x5d\x88\x6c\xca\x56\x58\xb2\x07\x8c\x6e\x63\xe5\x0f\xd9\x8a\x6d\x00\x4a\x47\x00\xd5\xd7\x21\x64\x2b\x35\xd1\xbb\x25\x53\xc0\xe8\x01\x1e\xd6\xe0\xf8\xf8\xc3\x44\xef\xc2\xd4\x1f\x98\xb6\xf9\x41\x05\xbe\x98\x0a\xbc\x2c\xd9\x0d\x46\xb7\xb1\x9e\x0e\x61\x6e\x39\xf8\xe9\x7b\x60\xea\xdb\xc0\xa2\x0f\x9b\x0a\x07\x2c\xd9\x16\x46\x77\x77\x27\xf4\xc6\x7b\x8c\x01\xe6\xda\x65\xda\x94\x87\x31\x9e\x6e\x05\xce\x99\x25\xfb\xc3\xe8\x2d\xec\x6d\xe0\xe2\xea\x87\xb0\x18\xa1\xa6\x0b\x99\x4d\xd1\x05\xac\xdc\x15\x78\x47\xac\xb3\x31\x04\xe7\x37\x4b\x3f\xdf\x88\xd1\xeb\x1f\xd7\xff\xcf\x31\xf9\xe9\x67\xb6\x84\x36\xf5\x15\x45\x79\xaf\x5d\x3a\xa7\xc3\xc0\x3e\x35\x8b\x86\x5c\xea\xd2\x3c\xf8\x4e\x2f\xbd\x55\xa4\x8f\xb7\xcc\xfe\x3d\xbe\x7b\xfb\xeb\x1a\x31\x1b\x44\x54\xe6\xe9\xd3\x91\x2f\x26\xf5\x7c\xb6\xe8\x9d\xf6\x1a\xeb\xcb\x49\x5a\xf1\xca\x5a\xdf\xf8\x3b\x69\x21\xf2\xe2\xfb\xb3\xd6\x16\x8f\xb1\xef\xf7\x73\x98\x59\xd9\xd6\xdc\x82\x47\xe3\x57\xee\x8a\xd1\xaf\xec\x7a\xb8\xcf\xcc\x76\x2d\xdb\xf2\x9e\xab\x36\x7a\x4c\x79\x38\x66\x6e\xcd\x88\x0e\x1e\xcf\x46\xe0\x67\x77\x90\x5f\xb1\x1b\x71\xcc\x79\x30\xd5\xb5\xa0\x62\x65\xe0\x8e\xc4\x81\x97\xbe\x09\xf1\xd3\x36\x3c\xdd\xe7\x23\x32\x62\xb4\x00\xf3\x4c\xe3\x3c\xc9\xc4\xce\x3b\xed\xfb\x95\x6c\x29\x4c\xa8\xdd\x62\xab\x75\xed\xcf\x09\xbf\x70\x36\x40\xbc\x6d\xff\x20\xcf\x57\x25\x57\xc5\xf8\x1e\xf5\x16\x04\x37\xfb\x7e\xdd\x26\x0c\x31\xd7\x0e\xf4\x57\x24\x0a\x8b\x72\x4c\xc7\x41\x51\xab\x9f\xe6\x79\xf7\xb8\xc7\x4e\xc4\x82\xab\x5e\x1e\x5d\xdf\x6e\x52\x2c\x8e\x4a\x1a\x2a\x0f\x4d\x58\x71\x71\x42\x7a\xb3\xa0\xca\x71\xda\x4d\xb3\x5f\xcd\x68\xe8\xee\x3e\x62\xf6\x57\xbf\x6c\x03\x56\xb9\x0e\x8e\x87\x84\xa1\x00\x35\x15\x58\x7d\x3d\x12\xf6\x1b\xd4\xfc\xa3\xf9\xfe\x2b\xa9\xd5\x12\x6d\xdf\x31\x2d\x9c\x98\xaf\x9d\x5a\x76\xdb\xd9\xd7\xb3\xa3\x98\xec\x91\x27\x5e\xb4\x8a\xb7\x9b\xba\xcd\xef\xd4\x83\x51\xf8\xcd\xb0\x88\xf8\xf2\xcd\x77\xd7\x93\x06\x57\x2e\x7c\xee\x33\xe2\xbd\x37\x67\x25\xd9\xf7\xc8\xf4\xc5\x1b\x07\x6a\xe3\x46\x50\x86\x05\x36\xbf\x7d\x76\x85\x03\x3f\x84\x83\x07\x46\x68\x28\x27\x90\x5f\x52\x0c\xb5\xe5\x41\x48\x10\x41\xbf\x02\x66\x73\xc6\x77\xbd\xe1\xb1\x7a\x4e\x72\x73\x06\xa5\xe3\xf4\xfa\x02\xe7\x66\xfa\x15\xe1\xb1\x8b\x14\x65\xbd\xd6\xee\xea\x7d\xa5\x4d\xd9\x87\x90\xd5\x78\x6a\x1a\xc5\xb2\xa9\xc8\xb1\xc8\x85\x5f\x00\x49\x41\x5a\x95\x87\x96\xf9\xa7\xe9\xb2\x7c\x73\xb7\xab\x53\xf4\x5a\x1e\x79\xd4\x42\x9b\x7d\x03\x9a\x0c\xad\x7f\x36\xf9\xca\x10\xd5\xa6\xff\xc7\xd9\x97\x87\x43\xf9\x7e\xff\xcf\x30\x84\x28\xd9\x47\x2a\x14\x29\x85\xd2\xbe\x59\x66\x64\x69\x93\x42\x2a\xa5\x22\x94\x16\x5a\x69\x9b\x79\x28\x5b\x0b\xc9\x92\x5d\xb2\x45\x51\x28\x85\xb2\xef\xb2\x94\xa5\xec\x3b\x91\xa5\x18\x6b\xfc\xae\x87\x39\xcf\xa7\x99\xef\xef\xba\x26\xef\xf7\x1f\xef\x6b\x1a\xcf\xdc\xe7\x7e\xee\xfb\x9c\xd7\x59\xee\x73\x9f\xf3\x49\x62\x92\x77\xd5\x88\x7c\xfe\x90\x88\xa2\xdb\xcc\xed\x57\xf5\xfb\xe8\xcb\x0e\x61\xd7\x31\x59\x31\x35\x42\xe6\xe6\x82\x03\x4d\xf5\x0c\xac\x3d\x11\x56\x78\x12\x3e\x94\x62\xa5\xfb\x59\x71\x39\x42\x66\x13\xe0\x02\x94\xf1\x05\xc1\x0d\x02\x73\x34\x07\x04\xd7\x9d\x1d\x00\x96\x95\x24\x20\x64\x02\x8e\xc0\x45\x07\xd8\xb7\xc0\xf4\x3f\xe0\x22\x87\x0f\xba\x15\x39\x98\xf7\xc0\x8a\xc1\x11\x12\xbf\x14\xa8\xbf\x70\xb0\x2c\x83\xb0\x12\xfb\xe0\xed\x7f\x9f\x0b\x67\x79\xac\xf8\x19\x21\x49\x8b\xf1\xcf\x00\xb6\x1a\x80\x51\x0d\x38\x21\x55\x58\x35\x54\xd0\xab\x1f\x78\x01\x0b\x59\x71\x2f\x42\xb6\x20\xe0\x38\xe8\x58\xe8\x08\xa0\xea\x0a\x33\xcc\x05\x9d\xd0\x02\x9b\x14\x8a\x45\xfc\xb1\xdb\x37\xac\xb8\x1c\x21\xb9\xf1\x43\xa8\x2f\x05\x36\xab\x15\x78\x10\x01\x5f\x28\x09\xab\x95\xca\x8a\xc5\x11\x72\x1a\x0e\x27\x48\xd7\x5f\x0d\x58\xc9\x39\x98\xfd\x14\x2c\x4c\x18\x24\xa2\xec\x02\x9f\x89\x15\x7f\x23\x24\x4e\x1c\x3f\x9d\x0b\x9c\xc1\x13\x70\x46\xf1\xb1\x1b\x34\x57\xd2\x7c\x5a\x1c\xfd\x9c\x94\x55\x53\xde\xbf\x12\x89\xa9\x88\xfa\x0b\x66\x98\x54\xd9\xa9\xbe\x6a\xf0\xa4\x4d\x62\x48\xcc\x50\xd5\xdb\xc2\xab\x32\x46\xbb\xfa\x42\x69\x97\x6b\x25\xbc\x28\x61\x0b\xbd\x1b\x4e\x50\x98\x44\xb3\xa1\xd5\xc1\x6c\xcb\x86\x1d\x73\x9e\x04\x9f\x39\x3e\xef\x0a\x6d\xe3\x32\x23\x45\xfd\x10\x17\x6f\x87\x67\x3e\xfe\xa3\xc4\x43\x57\x19\x9f\xbe\xb0\xbb\x6d\x61\x89\x5e\x9d\xa8\x63\x75\x69\xb9\xc8\x7b\x05\xe7\x2a\x5a\xbb\x91\xfd\xcb\x3b\xe6\x75\x42\x87\xdd\x1a\x14\x17\xd3\x21\x21\x82\x87\x86\xa8\xa7\xa3\x78\xdb\x0c\xdb\x91\x00\xf7\x30\x1c\x51\xdc\xfc\x42\xaf\x4d\xaf\xee\x8b\x9a\x95\xe9\x28\x40\x96\x31\xab\x24\x7d\x81\x32\xe7\xf8\x95\x23\x06\xc9\xc4\x66\x8e\xed\xa3\x1b\xf7\x14\x69\xd4\xfb\x08\x16\x0e\xed\x27\x0a\x5c\xd7\x4c\xcf\xab\x37\x67\xba\x8d\xef\x79\xe7\xee\x44\x8e\x2f\xd5\x85\xfb\x55\x46\xdc\xba\x85\x85\x8a\x59\xae\xc2\xab\x7d\x3d\x36\xe8\x1e\xbd\xe8\x18\x97\xc9\x99\x35\xb3\x61\x2a\x4c\x34\x0e\x10\x97\x2b\xef\x30\x5c\x67\x74\xea\x54\xc7\xc7\x55\x9b\xfe\x5c\x17\xdd\xfa\xdb\xe2\x3d\x7b\xd3\x8f\xd5\xa4\x0c\x0a\x59\x24\x88\x4a\xaf\x89\x39\x5d\x35\x8b\x39\x9f\xc7\xca\xd0\x3d\x8a\xfc\xf1\x2b\xff\xde\x5b\x0b\x8d\x6b\x9d\xe2\x06\xf4\x15\x14\xd6\x1e\xb8\x74\x66\x0b\x65\x70\x9d\x4a\xfb\xb5\x7b\xcf\x66\xde\xbb\x9b\x39\xf9\xba\x73\x45\xab\x61\x55\x72\x5c\xaf\x5f\x60\xa5\xdd\xfa\xdf\x5b\x8b\xd6\x1a\xcf\xd3\x96\xe1\xed\xe1\x0c\x4c\x3c\xbe\xf9\xdd\x6f\xc1\x0f\x33\xfe\x9b\x1e\x0d\x51\xff\x84\x5a\xf2\x59\x70\x15\x31\x14\x05\xdd\x84\xe9\xfc\x19\xa8\x72\x10\x8c\x82\x6e\x1c\x3a\xb9\x1e\x3a\x4f\xa9\xed\xa5\x21\xea\x35\xcc\x24\xcf\xc5\x44\xb9\xde\xf7\xcf\x8a\x3b\x5e\xfc\xac\x29\x53\xb1\xf9\xe2\xc0\x9a\x4f\xb9\xe5\xbb\x55\xed\x45\x79\x16\x65\x0a\xc8\xc5\xb1\x33\x3e\x9d\xe9\xf7\x4d\x23\xde\x72\xee\xba\xa1\x77\xa1\x3c\x67\x3d\x7b\xbe\xcd\xeb\x98\x1f\xc8\xf9\x6c\x2f\xc1\xe4\x52\xa5\x41\x61\xc9\xca\x71\x7a\xd1\x05\x54\x7f\xb6\xa2\x1a\x66\x9c\x59\x93\xe4\xd9\x2d\x7c\x1a\x7d\xdc\xf8\xea\x44\x4b\x6a\x91\xaf\xa8\x95\x24\x59\x4a\xd6\xae\xac\xfa\x89\x95\x5b\xa8\xb7\xa3\xc1\xf2\x43\x4c\x07\xf6\xf6\xeb\xd8\x73\x7a\x33\x8d\x25\x2f\x1f\x0a\x8d\xf5\xbc\x6f\xc0\xd9\xd9\xfa\xf0\x6e\x9d\xca\x05\x49\xa3\x8c\x17\xc2\xe4\x26\x0b\x5e\xfa\xc1\xce\x74\x0c\x0f\x32\xad\x3d\xa7\x93\xa4\x40\xe5\x86\x4e\x67\x86\x33\x6f\xcf\x39\xce\xd8\xc7\x1c\x7b\x8b\x34\xd6\x65\xc9\x9b\x2f\xf6\x89\xcf\xa3\x24\xfb\x29\x7e\xb6\x58\xdf\x5e\xf1\x50\xef\xf4\x89\xa2\xab\xef\xe8\x45\xcf\x78\x69\x88\x7a\x2f\x20\x68\xf9\xff\x19\xc4\xa0\xd3\x48\xab\xb7\xca\xe6\x76\xf0\x1f\xef\xf3\x7c\xdc\xeb\xad\xb3\xe6\xdd\x8c\xd3\x4e\xd4\x1c\x10\x6f\xf1\x37\x76\x54\x15\x35\xfa\x37\x89\x43\x48\x5a\x64\x08\xbd\xb7\x83\xc9\x10\x01\x80\xdb\x08\x46\x51\x3c\x76\x47\x73\x2e\x1c\x21\xb0\x92\x4e\x84\xac\xca\x49\xc8\xa0\x87\x7f\xc6\x01\xb0\x23\xb1\xeb\x6c\xd8\x21\x0b\x76\x8e\x03\x54\x6b\x01\xd4\x9f\x62\x2d\x4a\x59\x09\x37\x42\x4a\x97\x84\xa6\x29\x7d\x58\x43\x0a\xf8\x50\x09\x46\xde\x2f\xc0\xe2\x48\x7e\x78\x0d\x56\xb2\x8c\x90\xd9\x08\x02\x26\x74\x75\xd1\x0c\x61\xdc\x30\x94\xb5\x87\xe0\xa5\x4a\xc0\xd8\x8f\x00\x93\x31\x03\x05\x8f\x06\xb8\x6d\x29\x0d\x60\xcc\x0a\x0a\x10\x32\x17\x3f\x85\x7e\x00\xa7\xa6\x88\x92\x80\x99\x4f\xc2\x87\xac\xb9\xb4\xab\xff\x86\x10\x08\x99\x4d\x97\xdb\x89\xbe\x01\xbf\xb0\x7a\x68\x30\xd0\x38\x56\xfb\x07\xeb\xb9\x00\xf9\x0d\xbe\x28\x10\x46\xa2\xc6\x53\x26\xbc\x59\x0b\x16\xee\x64\x05\x2e\x08\xf9\x24\x4e\x0c\x5c\x2d\x77\x18\x9b\x0a\xd4\xde\x82\x56\x19\xc3\xd2\x7d\x79\x61\x79\x58\x01\x10\x42\x92\xc4\x2d\xa0\xeb\x2a\x7f\x2c\xc5\x74\x01\x8a\xda\x30\xfc\x18\x1f\x1c\xf9\xb1\x82\x16\x84\x4c\x52\x95\xe4\xa2\x6f\x6c\x09\x28\xfb\x36\xac\xaa\x12\xcc\x9c\x06\x95\xc9\x4c\xe8\x5f\xd4\x2f\x80\x3c\x62\x56\x78\x84\xfa\xb0\x52\xc0\x96\x1f\xc1\x8c\x78\x0d\xb5\x96\x3c\x50\xe5\x32\x02\x5c\x9f\x02\x4b\xfd\x7a\x0e\xed\xf2\xbf\xc1\x15\x42\xe6\x74\x17\xe3\xa7\x37\xc4\x89\x82\x85\x2d\x86\x99\x7b\x42\x8c\xf2\x00\xfd\x8b\x67\xf0\x72\xd5\x20\x73\xdf\xe0\xd9\x7a\x6e\xb0\x9f\x58\xa1\x1e\xea\xef\x72\x41\x61\x88\x29\x00\x7c\x6f\x54\xaf\x86\x4e\x5f\x06\x84\x79\xf8\x63\x27\x79\x50\xc3\xc8\x1a\xc4\x99\x15\x02\x22\x64\x31\x1c\x15\x16\xce\x01\x8a\x7a\x00\x16\x7e\xc3\xba\x7c\x80\xad\xe6\xc0\x0e\xe2\xcc\x0a\x16\x11\xf2\x02\x2d\x36\x76\xba\x50\xdc\x05\xae\x29\x00\x5c\x78\x02\xdf\xfc\x81\xdd\x78\x0b\x42\x7e\x0f\x50\xe9\xf5\x02\x5a\x15\xdd\x25\x0e\xb8\xf9\x4c\x5f\x59\x4a\xb1\xa6\xda\xf8\x03\xee\xec\x83\x93\x3a\x3f\x38\x74\xdf\x92\xad\x22\xd2\x2b\x65\x54\x7f\x07\xbd\x39\xf6\xfb\x7f\xe6\xd0\xdf\xd0\xbd\x2e\xdc\xcc\x78\xc1\xc3\x2d\xef\x04\x5c\xb2\x79\x5c\x76\x7e\xbf\x5c\xee\xc3\x31\xa6\xbb\x4f\xd3\xac\x7b\xcb\xc6\x94\x4c\x11\xef\x74\xc6\xa7\xab\xaf\x45\x7d\xe5\x16\x5d\x54\x1e\x6c\x7c\xe0\x11\xc9\x43\xe4\xfd\x5e\xa9\xd7\x43\x99\x23\x4e\xde\x11\x65\x15\x85\x99\xe7\x37\xcd\xdc\x03\x55\x0f\x41\xf5\x4e\x12\x6a\xb6\x7d\x61\x3e\x50\x0b\xec\xce\xbd\x7a\xe1\xa2\xe1\x9e\xfc\xc8\x40\xbd\x7d\x25\x9a\xab\x17\x8a\x1c\x57\x7e\xdc\xf5\xbd\x8a\x5a\x4a\x7c\xee\xed\x21\x40\xef\x53\x9b\x87\xca\x7c\x39\x94\x46\xb3\x47\x5d\xde\xe4\xe9\x32\x64\x10\xe8\xf4\x9f\xce\xa0\x85\xa0\x9b\x0b\xaa\x64\xd3\xa1\xae\x52\x2a\x6a\x01\xa4\xc3\x99\x5f\x29\x3a\x97\xef\xc0\x62\x69\xa0\x1a\xa3\xa6\x3b\x4e\x41\x26\xc7\x13\xd4\x5d\x6b\x67\x76\x1f\xc3\xdc\xfd\xc3\x47\x9e\xc8\xcd\x51\x70\x6d\x1d\xc0\x9b\x2f\x71\x29\xf8\xb3\xf3\x9a\x8b\x81\xba\xdc\xee\x5f\x52\x77\x8f\xc5\xe5\x8a\xd2\x45\x89\xf9\xf0\x8f\xba\x27\xc9\x60\x4d\xde\x8e\x75\x99\xc4\xcd\xcf\x9f\x3b\xf5\x55\x3c\xfb\xbd\xba\xed\xde\x64\x47\xd3\xc5\x57\x0a\x26\x12\x29\x2b\xbe\xd1\x35\x2a\x0a\xda\xf7\xff\x4f\x27\x10\x8d\xba\x45\xc4\xb6\x94\x6d\xb7\xb2\x1e\xed\xf9\xf6\x6e\xb8\x4c\x62\xd7\xb7\x03\x37\xff\xa8\x3a\xb7\xe0\xa3\x89\xad\xcf\xea\x3c\x67\x48\x26\x32\xe7\x4b\xad\x30\xfd\xd5\xf3\xe1\xe2\x5b\xc9\xf5\x71\xf3\x3b\x9c\x88\x3e\x8b\x35\xd6\x9f\xde\x75\xf0\x6c\x75\xde\x9c\xab\x06\xc3\xaf\x17\x17\x79\x32\x3e\x9d\xec\xbe\x1a\x27\x9d\xa4\x7d\xcd\x71\xb3\x5c\xd3\xd7\x23\xa3\xa1\x42\x0b\x6f\xc8\xb6\x9a\x1c\xc8\x5f\xe2\x12\x6d\x11\xb7\x58\xa7\x9a\x29\x1f\x3b\x57\xe1\xb8\x7d\xa8\xce\x41\x44\xcf\x33\x86\xf6\x5b\xa3\xf1\x5c\x78\xbe\x6b\xd9\xa9\x93\xd9\x93\x3b\xcc\x4e\x5c\x3d\x1b\x29\x43\x37\x57\xd1\x15\xec\x82\x1d\x4b\x40\x5f\x2e\x05\xc5\xc2\x1f\xb0\x47\x91\xa8\x95\xf6\x16\x9a\xc0\x2e\x46\xed\x33\x40\xf8\xf8\x69\x33\x78\xba\x49\x11\x44\xd4\x4a\x51\x07\x7c\x00\xca\xb4\xbe\x40\x2d\x97\x26\x74\xcb\x9b\x98\x23\x11\x6c\x1e\x56\xcf\x1c\x0c\x73\xf0\x07\x77\xfd\x3a\xf9\x2e\xf0\xc3\x1e\x44\xef\x8d\x7e\x77\xdc\xb1\xe1\xbc\x0f\x91\x3b\xb6\x6e\xe0\x7f\xc5\xf8\x34\xaf\xdc\xc2\xc3\xfb\x9c\xee\x66\x68\x37\x0a\x79\x9e\x13\xd9\x42\xb9\x2f\x75\x80\x54\x27\xd2\xdd\xbe\xae\xe6\x30\xcf\x2b\xa9\x80\x76\xba\x7f\x8d\xb2\x53\x28\xd6\xc9\x8c\x95\x84\x20\x64\x55\x9c\x18\x5c\xad\x89\x02\x06\x0b\x42\xb9\x30\x07\x24\x38\x0f\xb4\x7f\x0f\x17\xb8\xc4\xac\x44\x09\x21\x4b\x72\xcd\x74\xcc\x40\x1d\x41\xb8\x50\xe6\x88\x5a\xb6\x2f\xc1\xd5\x42\xf8\x40\x5b\xb1\x92\x2b\x84\x44\x21\x80\x67\xf5\x16\xae\x47\x38\xa1\x22\xda\x05\xb2\x11\x87\x65\x8f\xb0\x62\x7c\xd4\x0c\xe1\x02\x07\x7b\x04\xb4\xd5\x47\xec\xdc\x01\x1c\x40\x57\x36\x58\x43\x56\x32\x81\x90\x29\x78\x2e\x3c\x14\xa1\x82\xe0\xd3\x03\x01\xd4\x96\x87\xd1\x06\xb0\xf2\x47\x58\x39\x3c\x56\xe2\x82\x90\x78\xf0\xb0\x33\x71\x00\xa2\x7e\xa0\x66\x6a\xe0\xcd\xc3\x09\x30\x20\x2b\x41\x42\x48\x6a\xb8\x34\x78\x71\x00\xfc\x28\x58\x81\x06\x40\xee\x14\xcc\x97\x66\x25\x6b\x08\x79\x2d\x41\x95\x6e\xa0\xa8\xc9\xc2\xba\x81\x7d\xf4\x01\x48\x64\xc3\xc8\x9d\x58\xe0\x96\x95\x5c\x22\x64\x37\x49\x0a\x04\x69\x06\xc1\xc0\xcd\xc6\xaa\x77\x60\x6d\x37\xb0\x32\xb1\xac\x64\x09\x51\xb3\xa1\x0f\xd7\x07\xea\xc7\x01\xc6\x6d\xc7\x8e\x92\xb1\xfc\x70\x56\xc2\x86\x90\xb9\xd2\x28\xf4\xa8\x8a\xba\x33\x0c\xe4\x06\x22\x93\x08\xef\x5e\x07\xaa\x76\x88\x9f\x16\x44\x77\xfd\x57\xf8\xe6\x52\x22\x5f\x88\x6e\x5f\xd7\xe1\x69\x6a\x18\xf5\x92\x2a\x38\x1c\xa8\xeb\x9d\x54\xf4\x6e\xe8\xd6\xab\xfd\xdb\x16\xc9\x1b\xfe\xff\x75\x5d\x1a\x5b\x7f\x6d\x09\xf1\x2d\xcd\xcf\xff\xf2\x93\x4b\xbc\x31\x47\x97\x87\x4b\x84\xda\xb5\x7e\xb7\xf9\xf3\x5e\xf2\x8e\x49\x51\x92\x03\xe3\xd3\x7c\x8d\x91\x4b\xcf\x86\xc8\xc4\xbe\x5a\xf0\xeb\x51\x92\xa0\x5b\x85\xfb\xca\x43\x83\xa3\x6c\xd6\xd9\xdc\xee\x89\x1d\xc7\xcf\xa9\x44\xd0\x43\x97\xa8\x22\x71\x43\x95\x93\x0f\x64\xda\x04\xce\x43\x81\x8f\xf9\x82\x6b\x45\x45\xdf\x42\x47\xb3\xa3\x54\x03\x53\x82\xb6\xa1\xae\x3a\xae\xac\x6e\x77\xa1\xa9\xc0\x4e\xef\xe5\x07\xae\xc9\xac\x9b\xd7\x9f\x4f\x37\x8d\x81\x39\xfb\x41\x48\x5d\x50\x18\x8d\x06\x3b\xa6\x1d\xf0\x25\x4c\x84\x86\xa8\xd7\x31\x67\x6b\x54\xae\x9e\xf3\xf3\xe5\xaa\xd8\xad\xfa\xb7\x92\x02\x8c\xeb\x8f\x69\x3e\x8e\x99\x1b\xa8\xe4\x47\x18\x4b\x50\xde\x2d\x28\x7c\x56\x7c\x84\x9e\xad\x81\xa2\x6b\x36\x2a\x5c\x5f\x98\x23\x90\x8b\x23\x54\xb2\x2a\xba\x87\x8b\xf7\x2f\x7b\xaf\x7d\xf3\x2a\xfb\x06\x12\x81\xac\x55\x53\x44\xe2\xe0\x95\xdc\x63\xa5\x76\xfe\xe5\x03\xba\x0f\x03\x38\xed\x82\xa2\xdc\x1f\xf8\x57\x18\x6a\x72\x7d\x62\xf6\x73\x3d\xde\x3a\xe5\xf2\x20\x67\x09\x46\x34\x4e\xcd\xd4\xc1\xc0\x55\x87\x8f\x7d\xe4\x90\x93\xf9\xbe\x56\x8f\x32\xff\x72\x54\xcb\x03\x64\x66\x48\x1f\x66\x9f\xd2\xf7\x85\xe1\xdd\xb3\xec\xd2\x4b\x7d\x5f\x17\x59\x36\x09\x64\x14\x47\x67\xcb\x9c\xd7\xeb\x9a\xba\x19\x7e\x74\x0b\x75\x78\x71\xa1\x22\xe3\xd3\xb8\x2d\x39\x19\x05\x4f\xd5\x92\xcb\x76\xde\x5a\x9e\xbc\xba\xc0\xec\xeb\x94\xe1\x19\x19\xb7\xfa\xa3\x4a\x24\xa9\x85\xef\x86\x2c\xc6\x19\x9f\xde\x9d\xb5\x06\x2f\xe5\xf6\xe3\x76\xc1\xf2\x23\xf2\x72\xfc\x17\xc8\xf3\x7f\xee\xe5\x28\x4d\x5f\xf7\x4d\x80\x52\x6d\x95\xb3\x5e\x99\x8b\x1e\xc4\x45\xd5\x8e\x37\xba\xb5\x59\x10\x88\x0c\x41\xb5\x58\x3e\xb3\xc6\x5f\x2d\x72\x67\x2b\x51\x88\x2d\xe1\x41\xa9\xce\xd1\xc6\xef\x8f\x85\xb7\xd7\x9b\x17\x0f\xe1\xcd\xeb\x7c\x1d\x5c\xf0\x9e\xda\xcd\xa1\xf4\x53\x22\x74\xad\xda\x98\x77\x4c\x5e\xf5\x05\xbb\x5f\xca\xbc\xf4\xf2\xce\x3e\x8e\xa3\x07\x9f\xdb\x6e\x19\x8a\x1f\xf9\xb6\xf7\x51\x44\x94\xe9\x7d\xab\x92\x3b\x8f\x37\x32\xc5\x95\x46\xa4\x7b\x1f\x94\xf0\x1d\xe0\x13\x5f\x28\x38\x2e\xa1\xae\xf2\xae\xce\xfd\x69\x9b\xcc\xfa\x7b\x5f\xb6\x6b\xef\x54\xdb\x15\x26\x4b\xbf\x6b\x4b\x40\x79\x83\xd9\x9c\x09\x30\x5b\xfa\x65\x6c\x6e\x82\x64\xd0\xda\x09\xc1\x1f\x9c\xc2\x17\x03\xe3\xb6\x15\xb0\xdb\x27\xfa\xac\x09\x35\xba\x3e\x66\xe4\xdf\xc6\xf8\xb4\x59\xdd\x22\xf9\x82\xf3\x05\x96\xdb\xe7\x7d\xe7\x3b\xb6\xc8\xb3\x57\x7d\x45\x6c\x80\x1f\xe7\xa0\x5b\x69\x8e\xe8\xd8\xcb\xfa\x23\x2b\xe9\xb6\x16\xba\x44\x9f\x00\xa1\xcb\xb0\xcb\xa3\xac\x24\x0d\x21\x0b\xe0\x70\xd2\x50\x6e\x19\x04\x3c\x1b\x3e\x3c\x00\x05\xe7\x80\xb5\xf2\x63\x25\x8d\x08\x89\x1f\xb7\x16\xca\xe0\x00\xc8\xa5\x03\x90\xe6\xc2\x80\x01\x6c\x80\xcc\xac\xe4\x11\x21\xe1\x05\xa1\xf1\x7c\x18\xbc\xe1\x18\xc0\x5c\x00\x08\xe4\x77\xec\x36\x23\x56\xdd\x8a\x95\x10\x22\x64\x25\x25\xac\xd6\x74\x05\xe0\x70\x0c\xd6\x5e\x15\x68\xd8\x63\x87\xa9\xac\xa4\x12\x21\xab\xb3\x61\x9d\xf7\x8a\x41\x4f\xb6\x02\x96\x84\xc2\xba\x7a\x73\x83\xf5\xc1\x4a\x28\x11\x32\x1b\x0f\x0e\x4e\x3c\x3d\xb1\x62\x48\x00\x4a\x4f\x50\x39\x28\x58\x00\xe9\x2b\xac\x64\x15\x51\x97\x83\xcd\xf6\x01\x47\xac\x18\x74\x48\x30\x40\x7f\x29\x56\x3b\x98\x95\x34\x23\x64\x7e\x0a\x27\x1c\xf5\xf6\xc3\x6b\x26\x83\xc6\x28\x83\x11\x9f\xc2\xe2\x3e\x64\x83\x50\x3f\x2b\xd1\x47\x48\x14\x67\xc8\xea\xea\x00\xc5\xfe\x02\xd8\xc7\x0f\x8a\x60\x01\x85\x4f\xd8\xa1\x09\x2b\x10\x40\xc8\x51\x38\x6c\xd7\x27\xb1\xa8\x3b\xcc\xd0\x07\xf8\xa8\x13\xbb\xc2\xcc\x0a\x1a\x10\x32\x21\x0d\x0f\x73\xfd\x84\xb5\x79\x82\x11\xdb\xc1\xc1\x7e\x07\x86\x59\xa2\x20\xd6\xc7\x92\x05\x8e\x20\x24\x2e\x49\x68\x8e\xef\x0f\x33\x7b\x04\x6c\xf0\x11\x38\x34\x01\xcb\x96\x63\x05\x2e\x08\x99\x1f\xa7\xcb\x4e\x9f\xeb\x18\x4c\xc8\x1e\xa6\x98\x03\xc6\x59\x06\xb8\xd3\x7e\xd8\xb9\x3f\x2b\x24\x42\xc8\xfc\x1c\x92\xd0\xd1\x72\x08\xe6\x98\x83\x95\x1e\x86\x0f\xef\x41\x64\xa3\x44\x69\xa5\x74\x9f\xf9\xfe\x8b\x03\x31\x21\x05\x51\x1d\x92\xca\x46\x2f\x65\x39\xa2\x5c\x7f\xd6\x84\xda\xbf\x92\x0d\xd6\x79\x97\x5b\xb2\xc5\xb6\x60\xff\x6d\x84\x3c\x35\xfc\x7f\xaf\x5a\xad\x59\x6d\xac\xfb\xfa\xca\x0e\xd9\x75\xae\x57\x9a\xfe\x2c\x6a\x31\x4d\xd7\x49\x6b\x2e\xb8\xb6\x87\x72\xfc\xed\xf7\xea\x16\xbd\x8b\x50\x0e\x02\x75\x82\xde\xa0\x2a\xb1\x0a\xae\x7a\xbe\x43\x75\x6e\x11\x6a\x31\xf4\xc1\xb1\xa0\x03\x2a\x49\x8f\xa6\x1b\x3d\xc1\xe9\x63\xf4\x74\xaf\x5d\x54\xed\xe7\x41\x57\x0a\x07\x5e\x1a\xa2\x7e\x17\x35\xd7\x1f\x31\x1f\x90\xd6\xab\x5f\xdd\x59\x69\x53\xaf\x17\x56\xfc\xa4\xae\xff\xaa\xf9\x20\xce\xec\xd8\x8e\xc0\x7d\x85\x25\x5f\x14\x1e\xea\x6f\x5e\x79\x5d\x75\xc6\xe1\xb2\x45\x09\x33\x9b\x24\x5f\x1f\xed\x92\xb3\x24\x77\x9b\xb0\xa9\x9d\x16\x6f\xf4\xad\x55\xb4\x16\x3a\xc9\x69\xf1\xdc\xa9\xa1\x30\xb3\xeb\xfc\x32\x3d\xbe\x7d\x4c\x8e\xa0\xdd\xf3\x55\x0d\x8d\xa7\x83\x8f\xf3\xca\xae\x96\x49\x73\x1c\xb2\x5c\x3b\xb2\x3c\x62\xdf\xe5\x9c\x6b\xd6\xfe\xb9\x5d\xfb\x77\x73\xcf\x20\x83\x1f\xea\x08\xbe\x86\x98\xb3\x33\x6a\xa5\xb4\xd3\xdd\x42\x35\x79\xd4\x77\x41\x6d\x0f\x1a\x6c\x45\x00\x9c\x00\x23\xe8\x3a\x3d\x46\xdf\x39\x17\xc2\x96\xb1\xd3\xed\xde\x61\xf7\x12\x99\x5d\xe5\x0b\x65\x96\x47\x4c\x9f\xcf\xc9\x7f\xa1\x76\x2b\xac\xb9\x3b\x58\xf6\x8a\xfa\xd7\x2f\xf1\xd1\x3b\xef\xce\xb9\x1a\x9c\xeb\x1a\x24\xcf\x54\x15\x32\x44\x3a\x8c\x96\x16\xbf\x74\xe7\x11\xf7\x80\x37\xe9\xd5\x67\x93\x96\x0e\xf3\x9b\x9f\x1d\xbe\x71\xa8\xaf\xcc\x62\x5b\x7b\xaf\x7a\x0f\xe3\xd3\xc7\x4c\xef\xb6\x4b\x06\x16\xf6\xc8\xaa\xa9\xce\x37\x7c\x63\x26\x23\xe2\xee\xd2\xb1\xfc\x66\xc1\xfd\xb2\x50\xd1\x84\x2b\xdd\xe2\x04\xba\xf1\x83\x6e\x5d\x09\xb3\xdd\x12\x8c\xf0\x36\x59\x1c\x0a\x29\x52\x0c\x3d\x6b\xb0\x48\x26\xd4\xfe\xe8\x8e\x68\x2b\xe3\xe7\xb2\x8b\x09\xf3\x06\xf3\xaa\x25\x75\x62\xe8\xd5\xcb\xd0\x3d\x7e\x8d\xfa\xbc\x6f\xc0\xb6\x88\x46\x2d\x8d\x4f\xe0\x42\x07\x4c\x9b\x67\xe8\x82\xd4\x01\x5f\xa4\x4d\x9b\x7c\x28\xab\xd0\xe0\xab\xfb\xe8\x14\x3a\xd0\x1f\x8e\x40\xa9\xc5\x5a\x0e\x1a\xa2\x3e\xcc\x1c\x21\xc0\x2b\xf5\xa8\xab\x8e\xe4\x49\xdc\x7c\x75\xeb\x92\x51\xbf\x4e\xdc\x9e\x2a\xb9\xd7\xcf\xfc\x4f\xbe\x5e\x7a\x4b\x20\x27\x70\xeb\xfa\xf9\x4c\x37\xe5\xdc\x39\x54\xec\x54\x94\x1f\x67\xa9\x76\xa9\x78\x56\x2d\x77\x88\x57\x6b\x3a\xce\x73\xe0\x48\xe8\xd6\x92\x79\xcd\xa5\x89\xb2\x22\x74\xd3\x17\xb5\x73\x5f\xa1\xfb\x5d\x8d\xdd\xae\x65\x25\x1a\x08\x89\x80\xf3\xa1\x03\xcb\x38\xd6\x8f\x05\xe0\xf5\x31\x18\xff\x71\xd8\x59\x2f\x2b\xf6\x46\x48\x0e\x58\xf9\x91\x41\xc0\xa5\x10\xec\x3e\x2c\x80\xe1\x73\x4e\xd0\xfb\xac\x98\x1e\x21\xa9\xca\x60\x59\x44\x30\x9f\x4a\xf8\xf0\x1b\xb4\xd6\x30\x7c\xb0\xe7\xc7\x2e\xd8\xb2\x10\x10\x84\xc4\x4f\x06\x25\xed\x43\x1f\x50\x4d\x9f\x3e\x4c\x11\xa0\x6c\x2e\xa6\xf5\x59\x71\x38\x42\xe6\x22\x70\xc1\xc9\xae\x03\x60\x6a\x16\x40\xa9\x03\x7c\xb8\xc7\x01\x23\xb2\x92\x02\x84\xcc\xc3\x85\x03\x37\x7c\x18\xb4\xdf\x4f\x90\xd6\x27\x00\xce\x05\x9c\x34\x7b\xfc\xbf\x89\x0a\x42\xd6\x3a\x21\xa0\x44\xef\xc7\x92\x82\x95\xbf\x00\xe0\xaf\x85\x49\x46\xc1\xfb\x3b\x43\x28\xbe\x0f\x80\x20\x1f\x15\x93\x4a\x50\xee\x2e\xb0\x15\xce\xd8\x09\x38\x2b\x91\x43\x48\x3c\xaa\xf0\x56\xb5\xa0\x27\x3d\xb1\x54\x33\xd0\xc5\x85\x58\x39\x4e\x56\xd2\x82\x90\xf9\x70\x04\xd0\xbc\xf5\x58\x0b\x2e\x98\x59\x2b\x76\x03\x0d\xbe\x99\x98\x0b\x4c\xc2\x4a\xb4\x10\x75\x0e\x21\xe8\xe6\x06\x56\x67\x21\xf0\x9a\x2f\x48\x4c\x9a\x10\xcd\x91\xee\x0a\x4b\xc6\x1a\xa4\x7a\xdf\x26\xe6\xa6\xff\x6a\x18\xed\x8b\xe6\xe4\x78\x7f\x6d\xcd\x3b\xb2\xf4\x85\xfb\x1d\x3b\xe2\x39\x8e\x6b\x4a\xdf\x46\xc8\x7f\xfe\x3f\xb7\x85\xf3\x8f\x06\x2f\x29\xd8\x95\x36\xd2\xf1\xcb\x9d\x6b\x4d\x74\x1a\x9f\x71\xd0\xc6\xd7\x63\x8a\xaf\x95\x5e\xce\x6f\xe9\x5a\xea\x6e\xc1\x41\xcf\x59\x41\xcd\xfb\x5a\x14\x9a\x5b\x99\xe1\x37\x4f\x76\x68\xd0\x3c\xc4\x34\x2a\x24\xe9\xbb\x3f\x77\x50\xe0\x62\xd1\x06\x75\xd9\x93\xfb\xb7\x0f\x78\xa6\x07\x95\x5c\x50\x36\xd4\x60\xf2\x90\xbc\x9d\xb6\x97\x1f\x54\xda\xb7\x7a\xee\xa5\xb7\x2d\xa1\xf3\x5e\xae\x6b\x26\x09\x0f\xbe\x3d\x62\xd1\x2d\x29\xf9\x39\x2e\x32\xfe\xcd\x8c\x92\x3a\x8a\xaa\x3c\x38\x90\x78\x8e\xaa\xc9\x48\xe6\xd3\xee\xc9\x25\xe9\xe1\x9c\x78\xf7\x81\x35\x8e\x6c\x3b\xce\x68\x94\x9e\xb9\xd8\xd7\x8d\x57\xbe\x5d\xbd\x3c\xbc\xb3\x8b\x97\x33\xb3\x6e\xa6\xce\x84\x9a\x06\xaa\x2d\xd9\x68\x88\x7a\x29\x28\xa2\x40\x94\x87\x42\x98\x93\x56\xeb\x73\x76\xae\xd8\x56\xe7\xb1\x67\xbb\xfc\xaa\x92\x55\x0f\xa4\x54\x37\x69\x86\xe0\x7c\x6f\x9e\xbd\xfe\x55\xa7\xf9\xab\xd3\xb9\xd3\x33\x8a\x5c\xcd\x82\x86\xa8\x7b\x4c\xa7\x8b\x02\x6b\x96\xc3\x69\x73\x2c\xaa\xcd\x52\x51\xe5\x5c\xc4\x5c\x76\xf0\xec\xad\x85\x9b\xef\xd8\x78\xe4\x6f\x98\xec\xb4\xab\xfa\xaa\x24\x92\x34\xfe\xe4\x6a\x5c\xee\xf3\xc2\x55\x25\xb4\xf6\x78\xc9\x65\x93\x8c\x4f\x47\xaf\xcf\x5e\x47\x55\x33\x51\xb2\xd9\xc0\x7d\xd3\xa3\xb5\xf7\xc7\xaa\xad\x1a\x1e\xd2\xc7\xcd\x38\x1e\x5f\xc8\x8b\x5e\x58\xb1\xc8\x6f\xe6\x2d\xda\x50\xc4\xfd\x09\x29\x02\x54\x14\xf7\x27\x98\x6f\x66\x2f\x1f\xcd\xef\xe0\x2f\x33\x68\x3a\x1f\xba\xe9\xcd\x03\xe7\xc0\xf3\x11\xa7\x26\x86\x92\xcd\xfd\xdf\x86\xe5\x35\xcf\x13\x4e\x48\xc0\x33\x05\x9c\x11\xef\x39\xf8\x4b\x49\x83\xeb\x0f\x79\x19\xdb\x26\xab\x9c\xdd\xfa\xfe\x61\x41\x0f\x0d\xe1\x6a\x23\x4d\x79\xfc\x38\xb9\xb1\x86\xfe\x9a\xa2\x34\x44\xbd\x05\xfd\xdf\x24\x48\x4d\x24\x73\x39\x29\x8d\xe6\x0b\xc4\x43\x8d\x12\x7f\xa2\x9a\xa9\x0b\x82\xef\xa8\x1f\xa6\xe1\x2b\x75\xb8\x12\x8b\xc6\x9d\x57\x67\x45\x7e\x6e\xed\xb1\xa4\x87\x1c\x79\xd0\x37\x60\x76\xa0\xbb\x87\x87\xac\x29\x59\xf5\xa7\xdb\xe5\x6d\xe4\x1c\x83\x1b\x85\xe7\x85\xba\x66\x25\x73\x89\x6d\x78\x43\x7a\xf2\xd2\x7e\xcb\x8f\x79\x33\xb3\xb8\x3b\xdd\xbc\x1f\xdd\xc8\x31\x88\x82\x3c\x47\xb7\x65\x04\x32\x45\xe2\x51\x05\xf9\x1b\xa0\x25\x00\x3b\x50\x61\x26\xc7\xaf\x7c\x6a\x93\xd5\xb3\xb4\xab\x7f\x7e\xca\xae\xd1\x8b\xdb\xb9\x63\xed\xef\xf7\xb6\x1f\xc5\xf3\x0b\x34\xc3\xcf\x93\x9f\x96\x70\x08\x31\x05\x0b\xb8\x23\x6f\xa4\x58\x7b\x45\x1d\x09\xfd\x9e\x11\x95\xe3\xdc\xe8\x7a\xec\xbe\xba\xf6\x95\xbb\x11\x9b\xcb\x6a\x83\xa4\xf8\x5d\x78\x8d\xfe\x4d\xa2\x10\xb2\x3a\x45\x15\x30\xc3\x15\x04\xd9\x15\x3b\x1f\x06\x61\xcf\x86\x13\x26\x6d\x88\xed\xb2\x12\x35\x84\xa4\x2a\xc9\x45\xbf\x78\x91\x8c\xf2\x62\x01\xe8\x82\x28\x58\x82\x6f\xbc\xe0\xf8\xb1\x92\x44\x84\x6c\x8f\xc3\xc1\xb5\xcb\x0c\x94\xdf\x6a\x61\x90\x60\xac\xb8\x10\xa6\x9d\x59\x89\x23\x42\x52\x65\x83\xe4\xd1\x50\x50\xca\x89\x80\xf9\x5d\xf0\xa1\x98\x1d\x0e\xfc\x58\x49\x24\x42\x7e\x86\xe3\x81\x83\xd2\x36\xac\x61\x18\x16\x7a\x06\x27\x3a\x07\x62\xbb\x8d\xf0\x27\x04\xab\x29\xc2\x4a\x32\x11\x32\x1e\xc7\x06\x05\x3b\x9e\x81\x5e\x1a\x01\x10\x76\x02\x75\x58\x87\x65\xfc\xb2\x92\x5e\x84\xcc\xc6\xcf\x06\xbd\x6e\xa6\x5b\xcf\x83\x18\xb5\x43\xd0\xb0\x0a\x15\x8c\x3a\xf8\x3a\x5f\x08\x22\xe7\xac\xc4\x19\x21\x53\x54\x25\xa1\x48\xe4\x77\xf0\xcf\xbf\x4f\x37\x0b\x04\x96\xf2\x83\xa9\x97\xce\xa3\x99\xff\x9b\xdc\x23\x64\xb6\x34\x75\xb8\x83\x1a\x03\x26\x6a\x16\x3a\xf7\x0e\x58\x91\x66\x38\x4a\xb5\xa2\x7f\xf1\x0a\x2c\x06\xd7\x79\x34\xad\x7f\x43\x05\x84\xa4\x8a\xe3\xa7\x5f\x5a\xb4\x47\x6d\xe2\x67\xe8\x3a\xbc\xc1\x7a\xf5\x08\xc2\xa6\xb1\x82\x08\x84\xcc\x49\xc6\xdc\xeb\x1f\x58\xda\x2c\xe8\xe6\x09\x58\x82\x2e\xac\xfc\x26\x2b\x14\x40\xc8\x26\x38\xac\xab\xc3\x0f\x50\xe9\xf1\xc0\x4f\x01\xb0\xba\x1e\x58\x26\x26\x2b\xa4\x40\x19\x4b\x17\x2c\xc0\x14\x80\x80\x5f\x20\x05\xdd\x30\xa2\xc3\x3c\xda\x1f\x7a\xe5\xe4\x37\x05\x2f\xf3\xf7\x08\xc8\x3f\x97\xe4\x0e\x68\xd4\xf1\x4e\xde\xac\x76\xe6\xd2\xad\x7c\xc3\x3d\x54\x9b\x6d\x3f\xa4\x71\xdd\x97\x56\x22\xe4\xc9\xa9\x3b\x9f\xa0\x72\xf2\x6b\x74\xf1\x3a\xd0\x65\xfc\xc5\x7c\x50\x96\x1c\xdd\xe6\x7b\xea\xce\x7b\x33\xd1\xcb\xf6\xe3\x4b\xb7\xb7\x9e\x22\xda\xf9\x86\x7f\x3e\x78\xb1\x3e\xaf\x3b\x35\x9a\x3f\x43\x80\xde\xed\x78\x00\xdd\xe0\x11\x38\x77\xbb\x8f\x6a\x7e\x5f\x02\x0d\x51\xcf\x84\x44\x34\x07\xf4\x2b\x3f\x54\x35\xc7\x33\x3b\x3e\x5b\x5a\xed\x6f\x6e\x91\x7c\x12\xa9\xcf\x19\xdf\x24\xf7\x4e\xd8\x34\x45\xf7\x8c\xe5\xfd\xb3\xf5\x46\xd9\xd6\x5c\x8d\x79\x5e\xc3\x2d\x33\x14\x02\xa6\xf3\xaa\xa1\x94\x45\x28\xfa\xaf\x64\xb8\x7b\xf3\x06\xf5\x25\xca\xa6\x8f\x76\x01\xe0\xef\x4d\x37\x67\x84\xf4\x8a\x24\x94\xad\x4b\xc1\x75\xf6\x46\x1f\xcf\x9e\xae\x03\x0a\x6b\x19\x05\xdb\x1c\x84\xf5\xef\x64\xee\x47\xf3\xdc\xe0\xe6\x03\x9e\x8b\x71\xae\xb8\x48\xff\x9d\xf3\xc5\xca\xd6\x5e\xa9\xbe\x74\xc5\xbd\xff\x8f\x2e\x17\xcd\x7f\xf3\x9e\x18\x9b\x0c\x7a\x0d\x6a\xd4\x8b\x2a\x46\xdf\xb3\x1d\xd4\xed\x3d\x74\x6d\x5c\x41\x14\x7c\xd1\x7f\x7d\x63\x56\xfa\xca\xfd\xfe\xb4\xca\x07\xdb\xbe\x36\xa8\x7d\x6b\x6f\x0a\x6c\x5f\xf8\xa6\x56\xb8\x6c\xdc\xc1\x4a\x16\x89\x79\x5d\x97\xb9\x71\xeb\x7e\xc6\xa7\xd9\x9f\xad\xc2\xbb\x6f\xe7\x8a\xa1\xec\x1c\x6a\xff\xb8\xd0\x43\x6c\x79\x41\x57\x5e\x10\x6d\xfd\x65\x59\xa9\x96\x22\xdb\x89\xda\x6b\x8c\x4f\x37\x77\x4c\xc9\x2c\x31\x6f\x1e\x15\xbb\x98\x93\xe5\x5e\x16\xe2\xf9\xe0\x89\xce\xb8\x4d\xcf\x8e\x28\xd7\xa5\x73\xdf\xe3\xe6\x8e\x65\xd3\x73\x0a\xd1\xe5\x2b\x44\x57\x6d\x02\x9a\x09\xb9\xa3\x7a\xd3\x17\x35\xe5\xca\x98\x83\x07\x07\xdb\x3b\x6e\xcb\x71\x20\x13\x3b\xd6\xa5\x4f\x29\xdc\xde\xc8\xc3\x67\x1c\x8e\xb3\x98\x57\x7b\x26\x34\xa1\x44\xe3\x4b\x14\x91\x29\xfa\x3c\xd9\x26\x8e\x33\xd2\x79\xd7\x94\x95\x94\x93\x8e\x84\xf2\xbc\x5e\xbf\x4d\xeb\x5c\x99\xa4\x2f\xd9\xcb\xed\x69\xe3\xa3\xa2\xaf\x3f\x67\x56\xbc\x17\x8c\x23\x2f\x54\x39\x27\x4c\x97\x43\x61\x36\xe3\xd4\x79\xcb\x7a\xd9\xfa\xc5\xe6\x25\x56\xdb\xf0\x9a\x7d\x3a\x93\x1a\xa1\x60\xb9\xb4\xd0\xf6\x73\xeb\x49\xb1\xf2\xc8\x70\xe9\xd2\x7d\x87\xff\x8d\x69\x11\x32\x9b\xa4\x1c\x38\x6b\x79\x98\xb2\x03\xe9\x4f\x86\xc8\x20\x82\x65\xcd\xf2\x83\xac\xb2\xe2\x56\x84\xcc\xae\x8a\xf5\x05\xf1\xc7\xee\x4d\x40\xf4\xb2\x12\x80\xe5\xfd\x3c\xd0\xac\xac\x18\x0b\x21\xab\xe2\x28\x90\xe3\xdc\x8a\x75\x55\x81\x44\x85\x1a\xd4\xd7\x1f\xc2\xd2\x8f\x58\x71\x12\x42\x12\xc0\x6e\xa4\x94\x02\xec\x67\xa0\xda\xbf\x11\x26\xfb\x02\xab\x3f\xc1\x8a\xd1\x10\x92\x86\x14\x28\xd5\x66\xf8\xf9\x5d\x30\xa4\xf2\x40\xa8\x6a\xc0\x00\x88\xc0\x1a\x74\x62\xce\x2a\x2b\xee\x44\xc8\x62\x38\x4c\x4f\xf5\x02\xbe\x7f\x81\x11\x07\x61\x44\x1a\xd6\x75\x87\x15\x6f\x22\x24\x02\xce\x05\xbc\x5f\x98\x6b\x19\xd6\x5c\x06\xb6\xbc\x08\x6b\x05\xc3\x8a\x7d\x11\x32\x37\x0e\xbb\xea\x52\x06\xcb\x50\x0f\x23\xbe\x84\xbd\x8f\xe3\x04\x2d\xca\x8a\x8d\x11\x12\x57\x01\x81\xbe\xae\xf7\xb0\xc5\x83\x0f\xed\x70\x6e\x76\x1f\xb5\x5b\xff\x80\x25\x18\x0f\xac\x31\x88\xa7\x95\xd1\x9d\xbc\xcb\xcf\x68\x0a\x8b\x4e\xdc\x54\x6b\x7f\x10\x25\xe6\x3c\x34\x2a\x26\x31\xbc\xfe\xa6\xb4\xe2\xfe\xa5\xa3\x5f\x35\x5f\xc9\x38\x5a\xd7\x20\xe4\xa9\xa9\xc9\xff\xe3\xe4\xed\xf6\x19\xe6\x78\xb6\x55\xd7\x6d\xc9\xaf\x09\xe7\xfc\xc3\x85\xc7\x1d\x0d\x39\x03\x79\xec\x8a\xbd\xac\x7d\x1a\x3f\x25\x98\x68\xd3\x9d\x8a\x22\x14\x1e\x06\x99\xaf\x08\xde\x59\x5f\xf8\x7d\xb2\xc2\x71\xdf\x6f\x2d\x6f\xd3\x71\x03\xbc\x7c\xb0\xdd\x6e\xa7\x3f\x7f\x4e\x46\xa9\x2e\xc3\x6d\xb1\xbc\xe3\x7b\x7d\x46\xc4\x6b\x51\xa0\xe9\x98\xf6\x4a\xa0\x60\x7e\x24\x0a\xe9\x9f\x50\x35\x31\xc6\x8c\x8e\x3c\x87\x73\xa5\x39\xdc\xa4\x43\x57\x5e\x6b\xed\xe9\x95\x26\x3d\xbe\x61\xe9\xa0\x90\xd1\x50\xa0\xa3\xbd\xa6\xe2\xea\x4f\x4b\x45\x83\x99\xd7\x1e\x02\xfc\x08\x47\x25\xa2\x1d\xa5\x30\xc5\x5c\xb6\xa0\x50\x75\xc7\x4e\xc7\x8e\x20\x42\xb1\xc5\xaa\xae\x06\x82\xf7\x81\x53\x1a\x92\xbd\x47\xb2\x27\xab\xaa\x5a\xce\xdd\x2e\x69\x3f\x3c\xcc\xf8\xb4\xe9\xda\xca\xd7\x94\xf4\x40\xbb\x4e\x2f\xb7\x89\xaa\x15\x8a\x54\xe5\x39\xa7\x15\xa7\x0c\xc9\x51\x47\xf2\x8f\xc8\xe5\x73\x28\xf8\x32\x55\x0c\x14\xc9\x0b\x0f\xf4\x90\x93\x68\xcd\x53\xa8\x78\xc5\x5b\x73\xc5\xb3\xf4\xbb\xd6\xc7\x9b\xe9\x45\x26\xa9\x8f\x3a\xcb\x64\xeb\x8f\xcf\xcc\xb2\x9f\xd9\x21\xa6\x7e\x9c\x18\x1e\xa6\xd6\x66\x8f\x95\x78\xe5\x9d\x1d\xfa\x6a\xf5\xa8\xd1\x7a\x28\x5b\xf1\x7a\x42\x94\x7c\xe0\x35\xf1\x65\xe2\x53\x8c\x4f\xfb\x7d\x9d\x27\xf8\x64\x5e\xe6\x92\xad\x82\x8b\x09\x5b\xf4\x83\xd6\x8e\xbb\x1b\x23\x57\xd9\x25\x57\x25\x9d\xf8\xf1\x36\x9b\x84\xcc\x1c\x2e\xab\xc9\xd0\x10\xb5\xc3\x34\x44\xdd\x1d\xaa\x71\x06\xa0\x2e\x5f\x07\x2a\xe5\x3f\x20\xde\x17\x86\x6e\x5f\x0a\x33\xb0\x2b\x92\xf6\x5a\x9d\x5a\xb0\x37\x76\xee\x14\xa7\x37\x2d\x59\x31\x47\x6c\x25\x75\x4b\xff\xfb\xc6\x7e\x97\x97\x67\x5c\x65\xf4\xa2\x8f\x32\x3e\x3d\xe1\xb3\x5b\x4b\xc7\x87\x7b\xc9\xa1\x7b\x67\x07\xd8\x5d\x0b\x78\x7e\x05\x2c\x3e\x98\xe0\x44\x2e\xfb\x7a\x57\x9e\x54\xbb\x7d\xac\x81\xf1\x69\xeb\xef\xee\xba\x3f\xf7\xdb\x5f\x30\xe1\xfe\x65\xcb\x27\xe3\xf2\x39\xc7\x38\x06\x5f\x47\x1a\xd3\x57\x3a\x8d\xdf\xae\x7e\x20\xf6\xdd\x8c\x51\x28\x01\xe6\x11\xf3\x11\xf3\x60\xc7\x8f\x1b\x79\x03\xe3\x32\x77\xf6\x26\x9b\x54\xb2\xad\x4d\xf6\x35\x89\xd9\xf7\x4b\xe5\x95\xc0\xfa\xd0\x03\xc7\x6a\x02\x3e\xf7\x32\x3e\x7d\xfb\xf0\xa4\x4f\x8e\xa0\xed\x84\xd5\x4a\x61\xa7\x4a\xcd\x05\x9c\xa7\xf6\x11\xae\xda\x49\xdd\x58\x51\xb2\x7f\xa7\x77\x9f\xd7\xcb\xf7\x33\xeb\xf2\x1e\xd5\x7a\x79\x28\xe7\xd5\x80\x69\x61\x8f\xfa\xff\x9f\x99\x93\xfe\x4f\xbc\x5f\x98\x7c\x6f\x77\x47\x5f\xa0\x50\xb6\x64\xe7\x09\xeb\xce\xbb\xc2\x4b\xd5\xef\x7c\x14\x59\xe0\x21\x9a\xa7\x9e\xf4\xf0\xca\x26\x7a\xf1\x09\x54\x69\x65\xa2\x6b\x9d\x0f\xda\xff\xfd\x74\x3a\x21\xa4\x2c\x15\x4f\x57\x45\x45\xe9\x0d\x33\xab\x36\x5e\xd1\xfb\xf8\x5f\x72\x65\x07\xfc\x3c\x2f\x3d\x68\xdb\x30\xb8\x2b\xe0\x39\x6f\xfa\xa7\xab\xcd\x15\xbf\x7d\x05\x8f\x8c\xf1\x37\xce\xbf\xf2\x6f\xb2\x89\x90\xe5\x24\xdf\xe0\xe9\xe9\x94\xce\x60\xdf\x54\x81\x89\xd8\x86\x25\x14\x01\x70\x46\x02\x6c\x44\xc2\x33\xc3\x60\x58\x86\x08\x82\x8e\x62\x25\xd5\x08\xd9\x41\x12\x3b\xf6\xa3\x02\xf2\x7d\x02\xfd\x32\x82\xda\x5f\xa3\xa2\x30\x1a\x2b\x79\x46\xc8\x92\x38\x9c\x1c\x7d\xb4\x00\x18\xad\x04\x4c\xa8\x97\xd3\xf5\xb2\xe7\x82\x92\x62\x25\xd3\xe8\x68\x6e\xf6\x74\x34\x75\x03\x78\x7f\x01\x5a\x7f\x08\xeb\x67\x40\x7f\x7f\xb5\x15\xf4\x2f\x5c\xb0\xc6\xa1\xac\x80\x00\x21\xa5\x61\x45\xa7\xdd\xc1\x5d\xf5\x04\x65\xf5\x14\xdc\x9b\xb2\x79\x90\xe1\xc9\x0a\x2b\x10\xb2\x36\x8e\x03\xda\xa8\xb8\xc1\xef\x43\x60\xab\x72\x61\xe8\x6f\xf0\xa1\x1b\x3c\xc0\x09\xb0\x5d\x5e\xcd\x87\xd9\xb3\x42\x18\x84\xcc\xa6\x86\x9d\x02\xdf\x05\x62\x23\x70\x82\xe2\x0f\x3d\x25\xa4\xa0\x68\x02\x2b\x10\x42\xc8\x84\x39\x78\x48\xda\x6e\x00\xf5\x17\x0e\xb3\x77\xc4\xee\x24\xa2\x6e\xc7\x2f\xd8\x91\x7a\xac\x3b\x1d\x30\x62\x0e\x96\x17\xc0\x0a\x96\x10\x32\x17\x0f\x0e\xac\x84\x6a\x2c\x60\x80\x85\x7c\x61\x51\x5c\x38\x80\x07\x59\x41\xd7\x74\xc9\x51\xe0\xe8\x51\x58\xe6\x28\xac\xed\x26\xea\x43\xc4\x73\x40\xf8\x81\x15\xb4\xa1\x36\x9c\xd3\x09\x3a\x0f\x0e\x02\x47\x7f\x00\x19\x7c\x09\x51\x87\x7b\xd8\xd1\x3b\x50\xec\xc2\x6e\x6f\xb3\xc2\x3f\x84\x4c\xc1\xa9\x83\xdf\xe9\x05\x86\xcd\x30\xf8\x9d\x93\xb0\xfc\x29\xdc\x10\x23\x60\x85\x91\x08\x19\x8f\x47\xe0\x9a\x79\xa8\x10\x0d\x51\x2f\x07\xee\x18\xc3\x22\xca\x58\xce\xc4\x1c\x08\x55\xb3\xc2\x4a\x84\x24\x47\x81\x2c\xc0\x3e\x98\x67\x33\x18\xc6\x1e\xc0\x6e\x98\xc3\xcd\x0a\x19\x11\xb2\x2e\x4e\x12\x06\x1c\x84\xcd\xff\x02\x1f\xd2\x81\x44\x3c\x37\x8d\x42\xb7\x8b\x78\xf0\x6e\xa7\xd5\x7e\x18\x4c\x70\x59\x14\xda\xb7\x1e\x96\x78\x1b\x64\xdb\x20\x46\xf5\x3e\x92\x6b\xed\xc5\x7b\x8f\x63\x99\xa3\xd1\x5f\x57\xc0\x50\x3b\x0b\xf5\x8c\x2b\x45\xe9\x5b\x9f\x8f\xea\x8c\xdf\xe0\x7b\x3e\x45\xa1\xed\x19\xea\xb1\xd4\x33\x9f\x9d\x59\x74\xa7\x53\x04\x43\x5e\x26\xc6\xad\x77\x0e\x3b\x1c\x63\x2e\x7f\xca\xf7\xa9\xff\xc2\x2d\x87\xc2\xd6\x54\xd4\x5d\x89\x5a\xda\xc9\x54\x65\x52\x22\x78\xb9\xd4\x35\x9d\x3e\xe5\xc7\x07\x76\xfd\x18\x18\x9f\x3a\x6d\xeb\xbc\x2d\x53\x6b\xf7\x49\x9e\xb9\xf9\x21\x79\x6b\x76\xd7\x51\x19\x9f\xee\xa8\x38\x8e\xbc\xdb\x2d\x52\x7d\x60\x60\xe3\xe1\xf2\x92\x2b\x12\x2b\xac\xbd\xfb\xdd\x17\x4d\x7e\x32\xbe\x75\x8a\x33\xb2\x7b\x94\x1e\x7f\x75\x40\x0d\xc4\x44\x74\xe3\x3e\x30\x6b\xd3\xc4\x87\x37\x6d\xf6\x9f\x78\xd4\xf2\xb9\x8f\x7a\x54\xcc\xec\xfd\xf8\x6d\x63\x7c\xc2\x32\x6a\xf2\x13\xdf\xf3\x17\x0d\xa4\x85\xf5\xe7\x32\x3e\xed\x6a\x1e\xbf\xa7\x62\xee\xf2\x13\xbf\x29\x19\xeb\x73\x25\x1e\x64\x2f\x36\x53\xd0\x5d\x66\xbe\x4c\xbb\xed\x5d\xdd\x85\x24\xc7\x2c\x7a\x99\xe6\x74\x94\x52\xd1\xb4\xe1\x85\xd5\x1a\x61\x36\x30\xf6\x25\x2d\x41\xf2\x7e\xbb\xad\x20\xde\x28\xf1\xbb\x21\x76\x4f\xb3\xec\x93\xd4\x5a\xaf\x9f\x46\x3d\x3d\xe6\x77\x3d\x5e\x6d\x93\x17\x65\x7c\x7a\x8e\xd0\xc1\x4d\x82\x5e\xce\x1b\xba\x1f\x4c\xf9\x34\x9e\x67\xcb\xf9\xd8\x28\xba\xce\xe9\xc6\xf0\xa9\x71\x91\xc3\x44\xd3\xf9\x55\x09\x33\xe6\x8e\x2a\x0d\x51\xf7\x9e\x76\xf8\xff\x4f\x47\xd6\xcd\x6d\x9f\xc7\xac\x14\xc7\x5e\xaa\x45\x1c\x29\x68\xab\xd7\xbc\x7f\x26\x3d\x56\xe1\x68\xf0\x87\xed\x0b\x0f\x25\xcb\xa9\xc6\xe3\x67\xe6\xfd\x0d\x55\xf9\xdd\xd3\xe1\x0f\x60\x9a\x7a\xba\x59\xaa\xb6\x8f\x86\xa8\x17\xa0\x86\x53\x0f\x1c\x09\xb4\x4d\xdf\xca\x82\x17\xfc\xc0\x9c\x2e\x55\xec\xac\xdb\xbb\x37\xb1\x58\xf4\xaa\x65\xe8\x9d\xc1\x37\x1b\x03\xd6\x66\x7c\xe8\x7e\xf4\x50\x55\xda\x6f\x5d\xd8\xa1\x4a\x6e\xa7\x0e\xc6\xa7\x83\xde\xf3\x1f\xdd\xc3\xb7\xc4\xf9\x6b\x42\x2f\xe5\xb2\x55\x42\x8a\xa1\xa1\x20\xad\xc4\x61\xbd\xc5\x58\xf6\xb9\xc7\x17\xe7\x97\xd3\x33\x8b\x1f\xa1\x13\x8c\x06\x93\x22\x08\xb5\x9b\x47\x20\xb6\xe1\xcd\x47\x43\xd4\x9b\xb1\xf4\xe1\x69\x76\x64\x4e\x16\x2b\x09\x36\xdb\x5f\xd5\xdc\xb7\xab\xf8\x11\xff\x90\xb4\xa3\x07\xb7\x64\x56\x5b\xd6\xed\x5b\x3b\x0f\xb3\xfd\xa8\x6e\x68\x92\x9b\xa2\x97\x97\x0e\x47\xf5\xea\x1b\xd0\xd9\x01\xa8\x15\x1d\x01\xb5\x4c\x5c\xd1\x25\x88\x98\x8e\xa1\x43\xbe\xbc\x07\xfa\xaf\x4c\x66\xfb\xbf\xd8\x46\x2e\x7a\xee\x4e\xeb\xc5\x5b\x93\x0c\x9c\xd6\x5b\xa6\xec\xf8\x24\xe3\xd2\xea\x20\x31\xa5\x99\x65\x43\x30\x8a\xce\xe3\x3c\xb2\xff\xdf\x64\x03\x21\x73\x71\xb9\x81\x1b\x1d\x03\x0a\x81\x0a\xa8\xf3\x13\x94\x53\xd3\x5c\xda\xb9\x7f\x93\x1f\x84\xac\xba\x0e\xa7\x4b\x87\xe0\x48\x08\xfd\xb7\xa1\x2b\xdb\x07\xca\xb3\x14\x0e\x91\xee\x4d\x17\x32\x05\x3b\xe8\x39\x78\x5e\x95\x6c\x70\x6b\x86\x95\xfc\x21\x64\x21\x01\xac\xca\x53\x38\xd6\x2d\x0b\xd8\xab\x17\xce\x0e\x87\x20\xcf\x1d\x99\xee\xb1\x8f\x9d\x87\xb3\x12\x4f\x84\x44\xc6\x0a\x1d\x65\x81\x3e\x29\x07\x3a\xa3\xd8\x0b\x71\x42\xa8\x99\x95\x04\xa3\x1a\x8a\x1d\x0a\x3c\x79\x03\x18\x17\xc1\xca\xf7\x83\x1a\x79\x8b\x35\x6a\x58\x00\xaa\x94\x95\x48\x23\x64\x3c\x8e\x8b\x42\x3f\x1a\x48\x42\xd1\x73\x02\x8b\xb3\xc2\xca\x66\x60\xb7\xe4\x58\x89\x3c\x42\xa2\x48\x42\x47\xc3\x0e\xac\x91\x01\xd6\x64\x0f\x38\xe4\x07\xa0\xfe\x07\xcc\x8a\x63\x05\x06\x08\x49\x95\x1f\xd2\xcd\x46\xb0\x32\x5c\xb0\x02\x5d\xb0\x26\x01\x22\xa0\x98\x58\x89\x3a\x42\xa6\xe0\x71\xbc\xf4\x11\x13\x60\xef\x7d\xe0\x9d\x7d\x60\xae\x9e\x82\x10\xbd\x61\x05\x07\xe8\x2e\x71\xc2\x29\x8b\x33\xaa\x75\xaa\xa0\xc4\x2a\x6c\xf9\x23\x2c\xac\xcc\x4a\xea\x51\xc3\x98\x02\x87\xc6\xaf\xe0\x85\x13\xb1\xda\x34\x30\xe2\x18\x76\x57\x8c\x95\x70\x23\x64\x55\xbc\x00\xc4\xd5\x32\x61\x93\x3f\x03\x70\x79\xa1\x7b\xdf\x01\x0c\xf4\x15\xfe\x9e\x29\x44\xfb\x40\xd7\xcb\xf5\xe5\x2d\x27\x3e\x3e\x59\xb4\xff\xd6\xa1\x0f\x3b\x05\x2a\x97\xac\x69\x77\xbf\xab\xba\x67\x5f\x50\x91\xe7\xb9\xb8\x51\xfd\xf3\x69\x4b\xa6\xf5\x72\x03\x74\x6e\xc8\x43\x17\x60\x00\x35\x22\xa7\xc0\xa4\x4c\x44\xd1\xf0\x1b\x73\x10\xbb\xed\xbc\x43\xd7\xd6\x78\x0e\xf3\x17\xd2\x4d\xa7\xad\xf0\x5b\x3e\xad\xb9\x4b\xb2\xbb\xb5\xcc\x3e\xe2\x29\xc5\xb8\xb8\xc2\x7b\x17\xbd\x71\x4e\xe6\xf4\x19\x18\x0a\xa0\x23\xcc\xa8\xe6\xe2\x6a\x2a\x95\xb4\x44\x6e\x4f\x6e\x85\x51\x74\x8a\xde\x2f\xb9\xef\xa9\x1e\x1f\x4d\x4a\x7a\x16\x1e\x58\xbb\x6b\x9d\xc7\x79\xd7\x0f\x33\xc4\x47\x51\xa3\xf0\x0f\x73\x27\x81\x73\x67\x5e\xae\xd2\x0a\x4e\xbf\xda\xd1\x7c\x95\xa7\xb0\x4d\x6a\x8d\xa2\x89\xea\x85\xa7\xab\xba\x7f\x5f\x52\xaf\xeb\xc6\x5d\xe5\xfa\x3a\xb3\x7d\xcc\xe1\xe6\x52\xad\x0d\x36\x3b\xaf\x99\xed\xf9\xe6\xd6\x9a\xeb\x10\xf8\x5a\x6c\x0f\xd5\xfa\x79\x10\xf2\xca\x4d\xcf\x5c\xae\x6d\x88\xcd\x4a\x79\x46\x3b\x9d\xa0\x21\xea\x0f\xd0\x69\x37\x40\xa9\x25\xcf\xe9\x4a\x61\xe8\x9a\x7c\x05\x8c\xb3\x47\x81\x7a\x82\x39\xa8\xb2\xd5\x61\xd3\xd2\x64\x82\xc1\x36\x97\x73\x19\x86\xd6\x57\x2d\x0f\xda\x94\x45\xc5\xc4\x77\xdd\x88\xfe\x96\x2e\x24\x7b\x6c\xdf\x3d\x4d\x7a\x45\x0b\x14\x08\xd3\x50\xdd\xfa\x93\xf9\x4a\x56\x49\x74\x9f\xed\x56\x35\xef\x42\x8e\x9b\xdc\xdb\x82\xa5\xb6\xd7\x46\x9d\x2b\xa5\xa8\xcf\x7f\x11\x27\x76\xc2\x75\xd5\xb8\xfc\x58\xff\xcc\xe6\x3e\x64\xd6\x45\x35\xe7\x6d\x33\xc3\x3e\xc8\x88\x76\x98\xe2\x39\x57\xec\x2d\x2a\xdd\x8c\x3f\x5f\x15\xd4\x7d\x5d\x70\xc3\x3a\xc2\x1e\xbe\xd4\xfd\x4c\xe7\xcc\xfb\x6c\xab\x3d\xea\x5e\x06\x2c\x3f\x98\x53\x1e\x34\x6f\x83\xeb\xdc\x45\xb6\x82\x65\xc1\x77\x14\x34\x33\x8d\xa2\x13\x4d\xb5\x76\x33\x59\x45\xe5\x03\x3d\x82\x95\xe2\x1b\x4f\x5c\x8a\x2d\x5a\xfd\xbb\x3a\xa7\xf3\xbb\xd8\xda\x83\x72\xe7\xc5\x32\x28\x5e\x25\x7d\xad\x67\x4a\xf4\x19\x9f\x1e\xd3\x97\x2e\xba\xe2\xca\x61\x7a\x69\x69\x96\x5c\x30\x5f\x7c\x3f\x37\xe9\x00\xc5\x7c\x55\x4a\xf8\xea\x9b\x29\x6c\xda\x53\xd7\xe8\x17\xae\x9c\x51\x9f\xfe\x31\xbd\xf8\xa3\x9a\x02\x6a\xf6\xa3\x6b\xd2\xcc\x6c\xed\x6d\x3d\xe5\x3c\x27\x75\x33\x87\xe5\xc6\x53\x47\x5f\x1e\xbb\x58\xfd\x2d\x47\x70\xe9\x7b\xad\x4a\x8b\x35\x26\x4d\x5c\x3b\x87\xdf\x7a\x1c\x67\xca\xea\xbf\x63\xee\x78\x30\x7b\xf1\xa2\xce\x41\x9b\xa4\xae\xe6\x51\xf7\x6e\x1b\x0a\x27\x9f\xd2\xa6\xe3\x77\x15\x76\x18\x0d\x71\xfe\x06\x8e\xe4\xa6\x21\xea\xd9\xa8\x61\x42\x03\xeb\x23\x03\x55\xcb\x55\xcc\x46\xc7\xb2\x7b\x6f\x6f\xf1\x58\x64\x3e\xbf\x74\xda\x58\x62\x65\xbf\x51\x9e\x4c\xdd\xfb\xd4\xb5\x9b\xbf\xe8\x1f\x7e\x94\x79\xf9\xf4\x62\x33\xa6\x2b\xe8\xc9\x2e\xc2\x2e\x89\xdb\x3a\xdd\xdd\x5b\x7b\xcd\xb6\x88\xe0\xae\x70\xf2\xff\x69\x50\xba\xef\x33\xa5\x1f\x37\xb6\xf1\xcc\xdd\xb8\x3b\x74\xb7\x93\x9e\x7d\xa8\x66\x4c\x43\xd4\xfb\x51\x9b\x63\x10\xc2\x49\x2f\xa7\xb3\x1a\xd0\x65\xe8\x17\x04\xab\x9f\x95\x8c\x21\xea\xfc\x77\xe9\x58\x13\x01\xb0\x3d\x0a\x20\xfd\x0a\x1c\xa0\x11\x2c\xd5\x94\x95\xc8\x21\x24\x31\x55\xf0\x76\x62\x01\xb3\xaa\xc1\xe3\x9b\x02\xff\x29\x0f\x6b\x49\xc7\x4a\x0e\x11\x32\x97\x24\x3b\x98\x1c\x3e\x80\xf6\x79\x58\x87\x05\x80\xc3\x3f\xf3\x41\xa7\xb2\x92\x51\x84\xcc\x81\xc3\xcd\xa3\xc3\x61\x08\xd6\x1f\x1e\x2b\x28\x02\x48\xe8\x0b\xaa\xa1\x11\xcb\x8b\x65\x25\x9d\x08\x99\x1f\x87\x73\xa4\x0f\x9d\x81\x45\xb1\xc1\x3d\x7b\x08\xea\xfa\x21\xbc\xc7\x53\x2c\x81\x9d\x95\xdc\x22\x64\x37\x02\x17\x54\xe4\x9d\xc4\x6a\x0e\xd2\x35\xac\xda\x4d\xd0\x13\x58\x7b\x79\x2c\xfd\x9a\x95\x68\x4f\xb7\x7e\x82\x96\x41\xef\xc1\x82\xae\x02\x12\x5e\x60\xbe\x34\xc2\xc2\x84\x61\xce\x2f\x2b\x1c\x40\xc8\x6c\x78\xdc\x02\xe8\x50\x08\x1a\xb6\x17\x16\xd6\x03\x62\x0b\xaf\x04\xc1\xf9\x65\x85\x15\x08\x99\x2d\x0d\xeb\x39\x92\x82\xa5\x05\x80\xd2\xea\x03\xc3\xcd\x6b\xba\x45\x2a\xd6\x75\x97\x15\xa8\x20\x24\x13\x3c\x74\x09\x31\xa7\x8f\x55\x01\xbb\x95\x04\x91\xfd\x54\x54\x53\x76\x61\xd7\xd5\x59\x61\x0b\x42\xe6\x97\xc4\xc9\x42\x5e\x19\x6c\xcc\x6f\x58\x4f\x77\x58\x8f\x64\x2c\x04\x33\x0f\xc4\x8c\x15\x10\x21\x24\x55\x04\x56\xa1\x17\x46\x2e\x01\xa3\x28\x1f\x46\x8e\xc4\x8c\x22\x56\x50\x84\x90\x29\xb8\x65\x60\xba\x76\x02\x7b\xfa\xc3\x02\x8f\x01\x36\x3c\xc5\x6e\xac\xb1\x82\x2b\x84\xcc\xa6\xaa\x0a\xc1\x1f\x04\x10\xa0\x19\x0b\x27\xc1\xd0\xa9\x5c\xb4\x3e\xfa\xf1\xb8\xfe\xe3\xc5\x35\xe6\xa5\xe6\xcf\x0c\x1f\x10\x29\x7d\x7e\x0b\x04\xf3\xa8\xa3\xa1\x51\x7a\xdd\x73\x2e\x52\xf0\xae\x9d\x86\x9e\xfe\xff\xff\x7b\x60\xc6\xc2\xbf\x24\xd9\x0b\x4c\x43\xbf\x8f\x9e\x79\xd9\x1c\x76\x72\xaa\x57\xa6\xe1\xa3\xd6\xd7\x3b\xec\x59\x47\x2e\x28\xbb\xff\x9e\x38\x44\xb7\x45\xb1\xb2\xe8\xd3\xc5\x2f\xa0\xfb\x64\x9c\x20\xea\x2e\x71\xd0\x10\xf5\x72\xa8\x22\x79\x8b\x86\xa8\x7b\xe2\x51\x83\x05\x6b\x91\xc5\x6c\x3c\xfc\x5e\x1c\x29\x72\xf6\xd7\x63\x57\xc1\x95\x7c\x4b\xbb\xbf\x95\x69\x64\xcc\x79\x41\x0b\x0e\x2f\x69\x5a\xec\x39\xa8\xfd\xea\xb9\x84\x2c\xfd\xc4\x63\xfa\xf0\x76\xba\x39\x13\xc4\x25\x1e\xa3\xe4\xb2\x50\xfd\xd1\x02\x01\xce\x56\x08\xa0\x7e\xe2\x47\x9f\xa4\xe7\x02\xab\x1d\xa7\x21\xea\xcf\xa7\x0b\x31\xc3\x01\xf9\x53\x74\xe2\x01\xa8\x25\xd5\x02\x7e\xa5\xf3\x74\x75\x2f\x38\x3b\x70\x44\x1f\x9f\x00\x93\x23\x07\x7d\xa9\x1a\xf4\x71\x1a\x73\xa6\xf8\x93\x25\xc1\xe2\xc4\xe2\x95\x7f\xb2\x2e\xfc\xae\xe1\xd5\xd6\x2a\x67\x5f\x3e\x24\x55\xbd\xdb\x7a\x4c\x33\x37\xff\x70\xdf\xc3\x94\x40\xc6\xa7\xab\xcc\x4c\x5e\xc4\xf2\x0a\xce\x7f\x7b\x84\xe3\xe2\xe4\xcd\x6b\x67\x57\x98\x2a\x3f\x1b\x94\x93\x72\xff\xb3\x12\xd9\x8b\x6f\x4c\x22\x32\x3e\xfd\xc0\xf0\xf2\xa9\x00\x69\x3f\xaa\xca\x9c\x1b\x32\xca\x52\x7c\x3d\x0b\x05\x0d\x17\x7d\x92\x8c\x4a\xd3\xf8\xea\x34\x90\x66\x56\xd1\x43\x7f\x57\x74\x7d\x5b\xc1\xb8\x7d\x02\x41\x1c\x4f\xf4\x7d\xe2\x98\x8f\x87\xf8\xe2\xb4\x7e\x3b\xd8\xdd\xf6\xe9\xef\xd2\x0b\x3b\xe1\xe1\xbe\xc7\x5d\x57\xe7\xb2\xc2\xb3\xf9\x51\xeb\xca\xf5\xf7\xf9\xee\xb6\x52\x98\xf9\x6d\x25\xaa\xfd\xc6\x20\xa4\x5f\x36\x9d\xe6\x28\x44\x43\xd4\x27\xa1\x8e\x80\x07\xba\x20\xd5\xe8\x06\x8c\x61\x57\xcd\xd1\xcd\xf9\xc6\x1c\x0c\x29\x9b\xfa\x91\xf2\x34\x8a\x38\x9a\x63\x2c\x9e\xa7\x1f\x3d\xf8\x64\xf3\xce\xa7\x81\x8f\xab\x56\x85\xf9\x5d\xfd\xca\xa5\xbb\x6e\xef\x53\x7a\x42\x3b\xfa\x5b\x1a\x0c\x7e\x17\x35\xf0\xe2\x51\x7a\x3f\xc0\xe8\x8d\x26\xa0\x53\x98\x07\xca\x19\xa5\xde\x81\x9a\x6c\x7d\x78\xda\xd9\x7f\xe3\x5c\x84\x2c\xc4\xa5\x1a\x47\x8f\xd8\x06\x81\x50\x67\x81\x2c\x7a\x62\x10\x0d\x7f\xaa\x82\x7a\xf5\xab\xe8\x5f\xb4\x60\x00\xc0\x8a\x65\x11\xf2\x32\x1c\x17\x84\x9b\x9f\x00\x92\xe4\xc2\x16\xdd\x07\xd4\x2a\xc3\x12\xaf\x58\x71\x11\x42\xe6\xc2\x71\x91\xe9\x23\x52\xb0\xdf\x83\xc2\xfd\x06\x9a\xbb\x18\xeb\xc9\xcb\x8a\xd3\x10\x32\x9b\x13\x56\xfb\xcc\x17\x7e\xdf\x0b\xcb\xd0\x07\x4e\xd7\x5a\x98\x22\x2b\x66\x44\xc8\x14\x29\x49\x30\x2e\x0a\x00\x86\x3d\xb1\x56\x0d\xf0\x4d\xff\x1c\xc0\x7c\x56\xbc\x88\x90\xf1\x44\x3c\x94\x28\xf1\xc3\x2a\xab\x80\xea\x74\x85\x11\x6b\xb0\x26\x98\x42\x60\x01\xb0\x62\x3b\x84\xc4\xc6\x41\xa5\x8f\x1c\x07\xfb\x92\x02\x73\xf5\xc0\xf4\x0b\x98\x46\x8e\xdc\x34\x4f\xfa\xc5\x18\x87\xa7\x8f\x9e\x5a\x69\x17\x5c\x18\x94\xcc\x16\x1c\x4a\x12\x5b\x67\x2e\x71\x75\xdc\xcb\x3a\x42\xea\x03\x72\x60\xf5\xb7\xca\x9c\xe3\x08\xb9\x6f\x7c\xaa\x8f\xb9\x94\xfd\xd3\x53\x4f\xdf\x22\xa2\x48\x70\xb3\x41\x9a\xfa\x0d\x61\xcd\x0d\xca\x7b\x17\xe4\x5e\xf9\x2d\xbd\xe0\xec\xe8\x4f\x45\x0f\xcb\x72\x43\x3a\x2c\xa1\x6c\x1e\x87\xda\xbf\xef\xe1\xb6\x43\x16\x0a\x7c\x45\x28\xc3\xf7\x82\x81\xdc\x3d\x7d\xfd\x03\x2e\xc0\xf8\xa1\xff\x0a\x42\xb1\x29\x03\x6a\x40\x04\xa3\x23\x64\x40\x11\x1c\xe7\xe9\xbe\xab\xb0\xc3\x79\x80\xd6\xb1\x28\xad\x04\x74\xe0\x4a\x66\x48\x7e\x61\x3f\xb2\xb9\xcc\xcc\x84\x43\x73\x5f\xf4\xee\x97\x79\x9a\x12\x5f\xaf\xae\x9a\xdb\x19\xb0\xe0\xc4\xee\xa6\x1d\xcf\x4c\x8d\x33\xb4\xe8\x21\x3b\x54\x4c\x53\xe1\x9a\x4a\x3e\x0a\x19\x3d\x28\xac\xfe\x04\x93\x64\x84\x19\x7c\xfe\x9c\x6a\x48\xbf\xb9\x5b\x2a\x94\x7c\xd4\xd7\xae\xee\xc1\x0d\xc9\x10\x4a\x5c\x98\xdc\x7c\x0f\x76\xc7\xa9\x07\xbf\xf6\x6c\x1d\x96\x99\xe1\x38\x66\x84\xe5\x73\x33\xab\xd4\x5b\xae\x6f\x10\x1d\xd0\xaf\x59\xf8\x6c\x9f\xc3\xb2\x1a\x39\x33\xcd\xaa\x5f\x3b\x6f\xd4\x3c\xda\xe3\xce\x7b\x8b\x9e\x96\xe4\x8c\xbe\x89\xf7\x74\x1f\x7c\x66\xd7\x61\xab\x5f\x56\x92\x8c\x97\xbd\x6c\xe9\xaa\xc8\x6e\x95\xc7\x42\xbe\x09\x36\xa4\xc3\xd6\x75\x73\xae\x5a\xf1\xf2\x45\x51\xd6\x5e\x62\xaa\xea\xa0\xf0\xe9\x67\x83\xa5\xe9\xe0\x91\xc4\xb0\x40\x8f\x88\x28\x17\xdc\xed\x12\xe2\x7c\x45\x8b\x1a\xc7\x37\x0a\x0f\x07\xb9\x5a\xcc\x74\xe9\xd6\x37\xe8\xb3\xbb\xa0\x8e\x10\x74\x01\xbc\xd1\x59\x94\x42\xd3\xfc\xd7\xd3\x55\xf5\xd1\x75\x9e\xa4\xa3\xb2\x9a\x01\x0d\x51\xb3\x64\x9a\x5f\xf4\xd1\xea\xee\xb8\xc6\x43\x5a\x37\x62\x3d\x9b\xb7\x2f\x77\xca\x0a\x4d\x54\x3e\x5a\x68\x9b\xeb\x4c\xb8\x18\x91\xe7\x6b\xfa\xd6\x96\x7e\xc7\x05\xd5\x48\x1d\xd3\xf1\x00\xe6\x15\xd2\xae\x25\xa7\xb9\x78\xdd\x60\x5f\xf3\x35\xd4\xf8\xd7\x73\x3e\x41\xaa\x5b\x90\x23\xf5\x7d\x4a\x7b\xc4\x23\x91\x93\x61\x0a\x5d\xab\x18\x9f\x7e\xec\xe1\x36\xc6\xdd\x3b\x0f\x91\xb9\xb8\x54\xaf\x68\xa5\x69\xba\x06\xd9\xb5\x22\xf7\x6e\x22\xff\x7a\xde\xda\xc3\x4e\x23\xef\x2b\x98\xee\x36\x75\x96\xec\xc9\xf8\x9e\x6e\xc5\xd3\x91\x99\xc2\x33\x78\x5d\xaf\xe9\xa7\x68\x6c\x2f\xf1\xc9\xfb\xed\x97\xe4\x37\x85\xc8\xf8\xf4\xe8\xff\x1b\x7f\x23\xa4\x60\x3c\x18\x59\xd9\x20\xc1\x6f\x80\x45\x63\x51\x6f\xbe\x1a\xc4\xef\x21\x66\xba\xb1\x62\x44\x84\xac\xc6\x8f\x95\x5b\xec\x05\x34\x9c\x04\xa9\xfd\x0c\x20\xb6\x0d\x70\x81\x15\x07\x22\x24\x25\x49\x13\x3a\x2e\xf8\x83\xcd\xda\x0e\xa1\xb7\x62\xc0\x85\xf7\x00\x93\xcd\x58\x1d\x23\x56\x5c\x8a\x90\xc9\x92\x3c\xf4\xb4\x51\x35\x90\x90\x7b\x30\x60\x24\xbc\xfb\x3b\x78\x89\x11\x00\xb5\x1e\x61\xcc\x46\x66\xc1\xc7\x08\x99\xb2\x96\x02\x78\xf9\x18\xf3\x10\xe0\x35\x5e\x83\xae\x73\xc5\xd2\xa0\xb0\x1c\x52\x56\x4c\x8f\x90\xf9\x9d\x30\x57\xa1\x09\xb0\x24\x1e\x68\x84\x03\x38\xc7\x60\x26\x2d\x2b\xa6\x46\xc8\xec\x38\x7e\xb8\x7a\xf2\x15\x76\xac\x05\xb0\xd8\x0f\xab\x04\x2a\x04\xcc\xc0\x8a\xcb\x11\x72\x30\x4e\x0d\x98\xe1\x0f\x78\xc7\x23\xa0\x25\x3e\x40\x99\x25\x75\x58\x4f\x56\x82\x80\x90\xb9\x16\xa8\xc3\x7a\x66\xc3\x2b\x3a\x62\xd7\x64\x40\x0d\x0f\x01\x16\x74\xcf\x85\xb9\xb2\x92\x1a\x84\x44\xc0\x73\x42\x1e\x35\x8c\xf3\x14\x5c\x85\x31\x58\xe0\x51\x5e\x5a\x24\x3d\x6e\xe8\xf5\xfc\x6c\x5b\x61\x35\x8f\xfa\x3b\x01\x75\x76\x6e\x07\x77\xe5\xc0\x15\x7b\xb3\x22\xcd\x0e\x7e\x30\x9d\xb2\xf6\xbb\x51\x8e\x4f\x65\x2c\xe9\xd8\xc2\x0c\xe9\x81\x8d\x12\xca\xc5\xd7\x64\x78\x38\xe6\x19\x94\x2c\x1e\x74\x31\xd8\x29\x30\xd9\x3b\xa4\xfd\x7a\xe3\xd0\xb9\x55\x47\xef\x2d\xc8\xd9\x4a\x3f\x11\x99\x4b\x43\xd4\x43\x98\xef\x2f\x58\xf4\xd8\xf0\x28\x50\xfa\x1d\x2e\xf4\x77\xab\x04\x67\x48\xf9\x8d\x55\x75\xdc\x4c\xdd\xda\xb1\xbf\xf8\x65\xff\x76\xbf\x78\xb8\xba\x1a\x07\xdd\x43\x22\x50\xc3\xb3\x00\x05\xc2\x12\x60\xb4\x09\xe6\xd8\x9f\xf5\xc5\x75\x8d\x49\xd1\xd6\xcd\xf5\x11\x16\x61\x39\x3c\x87\x17\xe5\xbe\xf1\x8d\x58\xf6\xf3\x68\xe6\xf8\x4d\xbe\x92\xcd\x87\x1d\x98\xec\xe0\x8c\x53\x3a\x4d\x51\x27\x0a\x6b\x5d\x3b\xfc\xd7\xb4\x8f\xac\xfa\x82\xef\xbc\x1c\x3a\xce\xa6\xe4\x8e\xac\xf4\xd7\xdb\x11\x79\x90\x5e\x2d\x38\x14\x55\x3e\xe9\xd3\xc6\x30\x73\x24\xf0\xd0\x73\x2b\xf1\x03\x51\xd5\xba\x52\x05\x67\x8d\x9d\xae\x9c\x69\x9a\x14\x8b\x36\x3d\x71\xf9\x00\x29\xfc\x5b\xc0\x8d\xb9\xdb\x6c\x44\x66\xde\xfe\xed\xf4\x6d\x41\x68\x15\x47\x65\xa3\x21\xea\x08\xfa\x2e\x9f\x21\xeb\xf7\xc1\x3c\x1a\xa2\xfe\x0c\x55\xb5\xe1\xcc\xaa\xad\x2d\xbf\xb1\x53\xb3\x58\x59\xa8\xdd\x64\xc5\xf0\xd8\xa2\xc4\xd7\x5a\x6f\x52\x23\xa6\x46\x2a\x4c\xde\x72\x18\xcc\xe3\x91\x6d\x2f\xa3\x87\x2e\xd1\xf5\x0d\x43\xb5\x73\x0b\xe8\xcd\xfb\xa8\xa7\xe2\x86\x2a\x8a\x14\xe6\x59\xef\xce\x23\x5a\x18\x67\x29\x7f\x7f\x69\x78\x71\x42\xec\x44\xa3\x2c\x75\x2b\x57\x58\xc5\x5d\x49\xa1\xaa\x98\x1c\x4b\xeb\xd8\xf4\x15\x4c\x89\x5f\xe5\xb5\xe2\x41\xbf\x52\xb9\x96\x1a\x5a\x90\x9c\x26\x2a\xe4\x07\xbf\x5b\xaf\x79\x7f\x2f\x75\x8b\xdf\xbe\x7a\xa9\xad\x57\xf0\xf4\x3c\x68\x37\xd4\x6a\x4e\x45\xe1\xf6\x0f\xbd\xc4\x93\x1a\xaa\x9f\x28\xcc\xfc\xa2\x33\x76\xbc\xe6\x76\xd9\xbe\xcb\x89\x66\x3f\x47\xf2\x87\x3e\x34\xb8\x5c\x0c\xe4\x35\xf8\xed\x35\xaa\x24\xff\x81\x4f\xac\x49\x23\x72\x66\xb4\x22\xd4\x33\x68\x44\x75\x52\x2f\xf3\x05\xa2\x1a\xc5\x67\xcf\x4f\x0c\x3d\x12\x7e\xad\xa6\x50\xea\x64\xad\xbc\xa2\x37\xd6\xac\x58\xde\xb6\x72\x71\x7f\x45\xb9\xb0\xd3\x92\xf1\xee\x19\xda\x07\x69\x88\x7a\x30\x73\x26\x92\xb8\xa3\xca\x97\xc1\xb4\x01\x1b\xae\xb0\x6c\x41\x87\x61\x95\x97\xf1\x01\x0f\x09\xf3\xe3\x4a\x03\xdc\xbf\x0d\x05\x09\x6e\xf8\x44\xef\xcc\x50\xc4\x7c\xbd\x47\xa4\xe7\x7b\xd7\x13\xeb\x72\xee\xa4\xa7\xd2\xcf\x0e\xc5\xca\x34\x67\x9d\xdc\xdf\xe0\xd7\x25\xc4\x65\x7b\x45\xa4\xa5\x72\x54\xef\x21\xbd\x02\x17\x3a\xe5\x04\x94\x55\xc6\xe8\x16\x94\x1a\xca\xaa\x21\xe8\xba\x54\xd1\x7d\x19\xb5\x2d\x28\xf3\x32\x8f\xdf\x32\x37\x5e\x7e\xd9\xd0\x49\xab\x2b\xe4\xb4\x43\x1e\x12\x4e\x1a\x36\xbd\xd1\xbf\x4b\x0c\x8f\x45\x70\xc4\x3c\xb0\x78\x41\x5c\x3d\x7f\xff\xbf\x49\x1a\x42\x56\xe2\x62\xc3\x4a\x04\x83\xc8\x67\x40\xc8\xac\x03\xbe\x99\xc4\xb2\x33\x59\xc9\xdf\x74\x09\x7a\xb8\x93\x5e\x00\x32\xf7\x01\xe0\xbe\x07\x86\xae\xc5\xee\xcf\xb3\x12\x3f\x84\xcc\xa5\x9a\x06\x25\x1e\xdc\x60\xc4\x6a\x18\xe8\x3b\x28\xa9\xdf\xa0\x5b\xba\x38\x40\x0f\xb2\x92\x55\x84\xc4\xf1\x5c\x92\x7e\x46\xd9\x08\x50\x3a\x0e\x20\xed\x04\xb0\xfd\x19\xf0\x3f\x09\x3b\xac\xc1\xac\x02\x56\xd2\x8c\x90\xd4\xd9\x20\x6e\xda\x02\x23\x8f\xc2\xba\x8e\x82\x36\x77\x11\x01\xab\x80\x95\xf0\x22\x64\x71\x0a\x56\x96\xde\x1d\xde\x39\x02\x3e\xb8\xc3\x5c\xdd\x20\xbf\xea\x32\x9c\x76\xb1\x12\x61\x84\xb4\x0e\xbb\x52\x14\x8f\xb2\xe0\x07\x2c\xbc\x8b\xdd\x18\x11\x80\x94\x2a\x56\x12\x8e\x90\x25\x89\xfb\xa1\x93\xcb\x30\x18\x59\xf9\xa0\x4c\x7a\x60\x1f\xc3\x61\xbe\x6f\xc1\x35\xad\xc0\xea\xe1\x8b\x40\xb0\x9b\x15\x00\x20\xea\xce\xe0\x3d\xd6\xc0\xc0\x1d\x60\xc5\xe4\xc3\xa6\xfd\xe2\x84\x23\x54\x56\x78\x80\x90\xf1\xff\x2b\xab\x51\x0d\x51\xc2\x37\x28\x3a\xbe\x81\x61\x4b\xb1\x22\x1d\xac\x20\x02\x21\x4b\x4a\xb2\xc1\x68\xde\x90\xf8\x38\x81\xa2\xf9\x14\xc8\xc5\x3b\xcc\xfa\x61\x85\x1c\x08\x99\x82\xc3\x23\x20\xb2\xc0\x51\x63\x60\xc5\x15\x01\x1b\x37\xf1\xc2\xea\xb1\xc2\x0a\x84\x2c\x86\xc3\xca\x65\x55\x41\xe0\x19\x6e\x0d\x6d\xa0\x8f\x97\xf8\xbf\x86\xef\x8b\x4c\xb4\xe3\x8d\xc9\x54\xf9\x4f\x2f\xed\x1c\x9e\x34\xfc\xba\xc6\xb7\x6b\xf2\x69\xbd\xed\x40\x74\x7b\x49\xdd\x0b\xe5\x3b\x9e\x5e\xd3\xea\xff\xd3\xf4\xb1\x21\x82\xa8\xf7\x4c\x37\x3d\x85\x65\x73\x82\xdd\xe8\x80\x7b\x0f\x01\xe8\xb2\xc6\xa1\xc0\x9f\xc3\x5c\xea\xb7\x4d\x65\x18\xe1\xde\x9a\x97\x47\xce\x5e\x20\xb7\x01\x71\x9b\x47\x5d\xe0\x33\x4f\x47\xd0\xf2\x84\x9a\x76\x86\x8f\x4f\xc9\x5b\x7a\x1e\xcc\x67\x14\x33\xbf\x4e\x37\x19\x07\xeb\x65\x0c\xd2\x35\xe2\x50\xe2\x6f\xb1\x0e\x93\x28\xde\x8e\x33\x7b\x2c\x5e\x0f\x0b\x5a\x5b\x76\x05\x69\xbc\x9a\x2b\xba\xfb\x63\x7f\x62\x8e\x4c\x5b\xc5\x32\x11\x9f\xfd\xb2\xb9\x4d\xa1\x39\xd2\x3f\x74\x4e\xcf\xfc\x36\x07\x55\xc8\xb9\x10\x6c\x0c\x47\x15\x6f\x15\x84\xb7\x42\x50\x08\xff\x08\x06\xe8\x3b\xe6\xe3\xcc\x39\xfc\x5d\xd7\x6c\x9a\xd6\xde\x36\xf8\x3c\xcc\xa9\x6b\x1e\x57\xf3\x6a\xed\x3d\x5f\xfe\x80\x3d\x88\x83\xd9\xc1\x53\xbf\x8e\xd2\x1e\xd3\x1d\x34\xf4\x0d\x2a\x51\x07\xba\x1d\x2e\x1b\x84\xa1\xde\x72\x12\x96\x42\x2c\x8c\xea\x7f\x90\xa0\x17\xcc\x2a\x21\xae\xad\x5d\xd8\xcb\x27\x7c\x50\x43\xec\x82\xb7\xed\x78\x75\x85\x4a\x74\xd9\x0f\x3b\xdb\x6b\xa7\xdc\xa6\x26\x26\x2e\xec\x4f\x36\x65\xba\x51\x1a\x25\x20\xb4\xb4\xda\x3b\xc4\xc8\x8a\xd0\xb3\xc7\x28\x44\x4e\x5b\xb5\x54\xca\xf0\xce\xcf\xd0\x95\x41\x3a\xd7\xc9\xf7\xd7\xdb\xd1\xad\x49\x66\xf3\xeb\x97\x47\xe0\xb8\xe2\x9f\xb2\x24\xbd\xe2\xe4\x37\xda\x46\x3e\xc6\xb7\x17\xaf\x99\xb8\xb9\x71\xbb\x68\xce\x8d\xc0\x54\xc1\x64\x7b\x15\xa6\xfb\x23\xba\x61\xeb\xbe\xaf\xf7\xfb\xd0\x78\x70\xa9\xa9\x1a\x65\x99\x48\x54\xfe\x60\xd3\x39\xf6\x13\xf3\x35\xdd\xb4\x1b\xf5\x0a\x77\x31\x19\x0d\x37\xbe\x3e\x0d\xc8\x18\x8e\x79\x68\x3d\x72\xec\xaa\xae\x4f\x7f\xfb\xb8\xba\xfd\xfb\x94\xbd\x41\xfa\x92\xf6\xde\xfb\x93\xf1\xed\xee\x33\xcb\xf4\x11\xdd\xc3\x6c\xd4\x46\x69\x65\x66\x97\x2d\x9d\x0f\x8b\x36\xdd\xba\x3e\x64\x1c\x99\x6b\x55\x9d\xff\xb9\x95\x96\xf7\xf2\x59\xee\x64\xea\x11\xaf\xec\x83\x17\x1a\xe7\xcd\x63\x2a\x15\x2e\xae\xd0\x6b\x5f\xfc\xba\x78\xb9\xe0\x4b\x7c\xfc\x5e\x4f\x97\x3a\x6a\x44\xc2\x8e\xc1\xdf\xfe\x41\x3f\xbf\x1f\x3d\x67\x78\xbe\xac\x71\x46\x1f\xa3\x3b\x1b\x82\xee\x4c\x2a\x33\x35\xb1\xba\x43\xc1\xba\x7f\x0c\xed\xae\x72\x1b\xdc\x6a\xba\x4f\xe3\x55\xea\x70\x37\xfe\x9c\xa8\xd8\xb5\x20\x8c\xe7\xc2\xc6\x4e\xb1\x7a\xc6\xa7\xd9\xba\x72\x8c\x6e\x9d\x2b\xfe\xdc\xf6\x7e\xde\xc8\xa8\xfb\xc6\xa4\x2d\x21\x9f\x5c\xee\x3f\xbf\x33\xef\x93\xbf\x8b\xb8\xa3\xba\x31\x5e\xf7\xdf\x38\x1e\x21\x39\x61\x97\xdd\x22\xc0\x0b\x70\x02\xe8\x8c\x04\xa5\x48\x9d\x0b\x39\x04\xac\x98\x1b\x21\x4b\x3b\x61\x7e\x5a\x25\x30\xde\x13\x94\xd9\x1b\x61\xb4\x2f\x80\xa9\x11\x58\xad\x02\x76\x80\x2b\x56\xbc\x8d\x90\xd9\xd8\xd8\x20\x5b\xf0\x01\x8c\xe8\x05\xb8\x95\x01\x0a\x30\x0c\x3b\xd6\x62\xc5\xc7\x08\x99\x0d\x67\x0a\x59\x0f\xed\x58\xb2\x2f\x0c\xdd\x06\x48\xd3\x05\x9e\x90\x33\xd6\x55\x92\x15\xd3\x23\x64\x0a\x1b\x65\x01\x7d\x68\x27\x18\xa8\x1c\x20\xf5\x21\x10\xb3\xc7\x5a\xea\x62\x17\x95\x58\x09\x06\x42\x16\xe3\xc7\x9a\xfd\x74\xc1\x64\x29\xb0\x73\xa3\x80\xdf\xed\x58\x7d\x2a\x56\xc2\x83\x90\x95\xf8\x71\xc0\x0b\x4d\x60\xab\x34\x03\x53\x84\x80\xce\xa5\x70\x03\x2f\xb0\x12\x30\x84\xac\xab\xce\x05\xbc\x90\x03\x33\x6a\xc2\x6a\xb4\xa2\x36\xc1\x20\xcc\xb8\x1d\x28\xd6\x72\xc1\xf2\xb2\x92\x3f\x84\xcc\xc5\xff\x1c\x1b\x1f\x7e\xff\x0e\x56\xb5\x10\x98\xa2\x00\xbe\xc9\xe7\x03\xab\x88\x95\xb0\x22\x24\x5d\x32\xa4\xce\x86\xa0\xcc\xfb\x02\xe2\x8f\xa1\xd3\xb0\x0a\x2f\xf3\x03\x9a\x1d\xac\x87\x65\x66\x25\xc6\x08\x79\xf3\xff\x0a\x42\xa5\x02\xc6\xd7\xc1\x07\x0a\x98\x9f\xc5\x58\x59\x0a\x56\xa2\x8e\x90\x95\xf0\x38\x07\xfa\x32\xbc\x80\xf5\x7c\x0c\xfb\xe5\x85\x75\x69\x82\x6f\x9c\xd8\x68\x4f\xe9\xaa\x77\x24\xf1\x8a\x1b\xce\x4f\x4a\x5e\xe6\x74\xee\xf7\x5a\xc9\xd6\x10\x4b\x13\xc5\xf5\xda\x9b\xcd\x64\xac\x97\x93\x78\x2d\x57\x47\x3b\x21\xe4\xe1\xa9\x5b\xe3\x3e\x12\x74\x9d\x85\xbe\x7b\x27\x04\x05\x5d\x50\x45\x1b\x34\x07\xd5\xc6\xcc\x5e\x8e\xff\xdb\xd5\x02\xeb\x82\x38\x27\xbc\xc4\x0e\x93\xea\xf7\x47\x67\xed\x49\x18\x8e\xdd\x4f\xec\x5c\xd9\xf7\xe6\x63\xb3\xd0\xdd\x5d\x6b\xe9\xf9\x11\xa8\xab\x56\x8c\x7a\x8c\xc3\x70\xb6\xf5\x01\xd5\xbd\x69\x60\xd3\xb4\xa0\x6e\xea\x00\x68\xdb\x64\x94\x5f\x6a\xb1\xd2\xce\xf4\xf6\x35\x6a\x02\x34\x44\xfd\xf5\xf4\x79\x09\x08\x68\x30\xb3\x2a\xf3\x6d\x95\xf0\x92\xb9\xff\x52\x61\xfb\xc8\x9a\x42\x9f\x2d\xaf\x2d\xf9\x62\x13\x37\x39\xd9\x4b\x2b\x05\x7a\x73\x06\x4a\x3c\x5f\x2c\x46\xe7\x70\xc8\x0e\x0f\x43\x27\x91\xcf\xac\x75\x93\xb2\x8d\xf0\x4f\x55\x36\x46\x2e\x34\xff\x35\x52\x20\x69\x29\x5b\x19\x43\x1d\xb0\xb8\xbb\xb8\x2a\xfd\x5c\xd3\x85\xc9\xb3\x57\x98\xfd\xdb\x29\xf1\xcd\x14\xfe\xb6\x5a\xab\xce\x95\x66\x62\xdb\xb6\xe9\x94\x4e\xb8\x89\x7c\xbd\x92\x3c\xe1\x13\xcc\xd6\x3a\xf4\xc4\x76\x29\xdd\x61\x43\xd5\x73\x18\xea\x63\x56\x30\x47\x11\x32\x64\x0c\x3e\x67\xdd\x5b\xa7\xf9\xdd\x6f\x48\xae\x58\xc0\x3f\xe8\x40\xab\xd9\xca\xdd\x27\x08\x9e\x92\x96\xf2\xfc\x5b\xed\x2e\xd1\x19\xe8\x0b\xd4\x98\xa2\xa0\x9b\x81\xa0\x9c\xea\xc7\x9c\xda\xf2\x2c\xf2\xe4\x5d\xb7\xe2\x7b\x75\x6f\x79\x3b\xde\xf4\x2d\x9b\xb3\x5a\x53\x30\xe1\x8b\x55\x10\xfe\xe3\x31\x3e\xdb\x01\xab\x74\xdc\x32\xa6\x42\x12\x05\x16\x02\xaf\x7d\xce\xbd\xd2\xd2\xaa\xa1\x7e\x38\xf9\x16\xb7\x78\x4f\x4e\xb1\x7b\x74\xe4\xb3\x5b\x1b\x9a\x0f\x6d\x3b\xf1\x5c\x8c\xf1\xe9\x57\x07\x8d\x3e\x1e\x59\x51\x26\x59\x66\x38\x77\x54\x46\xc9\x66\x71\xb1\xf2\xb2\xa8\x57\xfd\x1b\xaa\x2e\xc6\x93\xa3\xc9\x22\x1e\x5c\x33\x2e\xe7\x4e\x1a\xa2\xde\xc4\xec\x85\x3f\xe0\x6b\xd4\xc8\xaf\x93\x4c\x0a\x09\x1c\x54\xfe\x73\x65\xb3\xc8\xed\xc0\x80\xd8\xa0\x04\x53\xd1\x65\xdf\x29\x55\x6b\x4d\x56\xdb\xd3\x6f\x87\xa3\x3b\xeb\x81\x5a\x2a\x31\x60\xa9\x54\x30\xc7\xc0\xad\xf4\xeb\x79\x8f\xd5\x68\x65\xbb\x5b\xcc\x33\xe2\xb8\xd1\xdd\x9e\xd2\x69\xd3\xe7\x50\x5f\xbb\x10\x77\x76\x5d\xea\x65\x83\x8a\xf3\x8c\x4f\xd7\xbd\xd6\xd1\xf0\xb5\xa9\x58\x68\x3e\xe7\xf0\x9e\x1c\xce\xc2\xaf\x5f\x84\xae\xbc\x1a\x34\x54\x58\xac\xf9\x70\x9b\xd7\x43\x37\xa2\xbf\xc1\xbf\xb1\x30\x42\xc6\x73\xc9\x61\xd9\xf5\x28\x13\xfe\x02\xd1\xbb\x0f\x56\xf8\x13\x2c\x9b\x1d\xcb\x86\x67\xc5\x8a\x08\x99\x47\x00\x83\x87\x4f\x80\x60\x9f\x00\x15\xa2\x41\x53\xf8\xce\x03\x14\x66\xc5\x97\x08\x59\x8f\x80\xb5\x68\x8e\x06\x19\x19\x80\xac\x3e\x87\xe9\x3c\x60\xd0\x4d\xce\xe0\x3e\x7d\xc4\xaa\x1c\xb0\xe2\x64\x84\x4c\x50\xe5\x92\x82\x0a\xf3\x30\x51\x2f\xc0\xdc\x0e\x10\xd8\x22\xf8\x53\x3f\x27\x38\xbb\xac\x78\x1c\x21\x2d\xc5\xea\x12\x7d\x00\x7c\xef\x07\xa8\x1c\x87\x0f\xef\xb1\x8e\xf1\xac\x58\x1d\x21\x0b\xe0\xb0\x12\xc6\x9d\xe0\x3a\xf4\x80\x5f\x9a\x03\x09\xc4\x8f\x50\xf7\xa1\x18\x0f\x7e\x3f\x2b\x99\x40\x48\x21\xdc\x78\xba\xdf\x9f\x0f\x16\x48\x13\xac\x40\x01\x96\x1f\x04\x13\xbe\x8f\x05\x44\x84\xa1\x29\x3d\x2b\x41\x42\xc8\xd2\x8d\x6c\xd3\xbd\x6d\x51\x17\x08\x65\xb7\x7e\x58\x90\x72\xd8\xbc\x58\x60\x97\x2c\xf8\x10\x05\x06\x56\x00\x3b\xed\xd8\xbf\x89\x1d\x42\xe2\x62\xd7\xbd\x4b\xbf\x39\x81\xe2\x49\x0e\xb0\x5c\x03\x08\x60\x1c\xd6\x36\x1d\x56\xb0\x40\x08\x2e\x17\xb1\x92\x45\x84\xcc\x9f\xa6\xea\xec\x48\x47\x74\x54\xae\x2b\x60\xfc\x1f\xc0\x9b\x8f\xb1\x03\x56\xac\xe3\x2b\x48\xd4\x24\x7c\x93\xc4\x0b\x12\xc5\x4a\x9e\xa7\x5b\xd9\x41\x62\xb0\x13\x98\x33\x23\x10\xe0\x08\x85\x97\x29\x9f\x43\x73\xa7\x6b\x45\x11\x3b\x8b\xaa\x32\x52\x0c\x75\x22\xcc\x69\xc5\xa8\xc1\xa9\x4f\xc4\x23\x3b\x70\x15\x3e\xd2\x9b\x85\x82\xe5\x1f\xde\xe6\x0f\x97\x64\xba\x5f\x82\xaa\x8b\x57\xcc\xea\xc2\xe4\x9c\xff\x30\xe5\xed\xa3\xf3\xc3\x35\x17\x79\x37\x9c\xda\xb6\xe0\xf0\x87\x9d\xdf\xde\x9d\x10\xd2\x1b\xde\x3e\x94\xbe\x4e\xf5\x07\xbd\x79\xce\x00\xba\xc2\xbf\x98\xef\x3d\xe4\x5c\x33\x5c\xe2\x76\xe3\x65\x85\xf2\xb5\x2d\x9f\x7a\x64\x9d\x8b\xee\x7d\x1e\xce\x54\x53\xd4\x3e\x2e\xb6\xeb\x83\x96\xc6\xa9\xfa\x68\x26\x65\xbb\xe7\xce\xfe\x83\xf3\xaf\xe5\x4a\x9b\x5f\x2f\xcf\x0a\x3c\x57\xcd\x7f\xc7\xe1\x63\xcd\xb9\x77\x76\x81\xe1\x4f\x0a\xff\xcc\xf9\xd3\x46\xbf\xad\x85\xfa\x39\x43\x50\x41\xce\x1e\xf5\x43\x3e\xa1\xa2\x5f\x07\xb1\xa3\x28\xf8\x50\x89\x41\x03\xba\x3d\xdd\x70\xe0\x47\x45\x07\x70\x40\x39\xaf\x1d\x8e\xb6\xec\x51\xcd\x55\x0e\x42\xf3\x69\xfa\x80\x94\xd9\xc3\x0b\x97\xba\x55\xb7\xd9\xeb\xa1\xd0\xf5\x4b\x67\xfb\x9e\x24\x2f\x74\xa3\xb4\xf6\x95\x7a\x54\xeb\x95\x16\xc4\x92\x91\x1d\xde\xab\xec\x99\x52\x2a\xb8\xbc\xda\xa2\xea\xc4\xbc\x87\xcd\xf5\x77\x72\xd4\x48\xa4\xd6\xeb\x71\xbf\x16\xb4\xcf\x10\xba\xe6\x58\x75\xd9\x5d\x42\xe6\x38\xfd\x78\x17\xb5\x43\xaa\xb8\x69\x88\x7a\x07\x6c\xa3\x27\x08\x59\x3f\x34\xfb\x31\x44\x57\x16\x12\x38\x9e\xa2\x7e\x7b\x3e\x5c\x56\x7e\xcd\x4e\x43\xd4\xbf\x4c\xbb\xf9\x10\xfe\x4e\x43\x6d\x91\x3c\xd4\x0b\xff\xc9\x6c\xcc\x8c\xcb\x87\x58\x6f\x1d\x3f\x90\x71\xae\x96\x1a\x96\x3e\x4a\x91\xd5\xf1\x7b\x75\x2f\x6b\xc4\x3f\x71\x73\xc1\x0d\xf7\x4a\x1f\x3b\x64\x86\xc2\x43\x74\x3a\xfe\x20\x8a\xcf\x99\xd9\xe1\xdb\x7d\xeb\x5c\x67\x6f\x4e\xfd\xb9\xf1\x55\xf9\x82\x5b\xa4\xef\xef\xc9\x31\x3f\x7b\x3f\xff\xd2\xe3\x9c\xbd\x5c\xc7\x56\xd4\xa6\xbc\x9a\xf9\x59\x0b\x14\xdc\x78\x82\x1a\x06\x11\xe8\x34\x93\xa1\x11\x71\x34\xba\xfe\x69\xcc\xe5\x37\x06\x26\x62\x2e\xf1\xf8\x3d\xba\x5c\x62\x95\x7c\xab\x7a\xd3\x62\xaa\xc8\xfc\xde\xae\x5d\x86\x2a\xed\x0b\x44\x6c\x4e\xec\x1c\x48\x75\x61\xba\xde\x3d\xe2\x9c\x10\xf4\xb0\xb5\x66\x89\xba\xc9\x11\xe1\xad\x7e\x8d\xd2\x67\x56\x2c\xa9\xc0\xcb\x6f\xb6\x3c\xa9\x62\x22\x3a\xb2\xe9\xd3\x8c\x45\xb5\x04\xb5\xa8\xd0\xa5\xa8\xe4\x05\xa4\x66\xc5\xcd\x08\x49\x9a\x0d\x42\x66\x09\x58\xe2\x1a\x20\x54\x08\x56\x10\x7f\x3e\x48\x2d\x2b\x16\x47\xc8\x92\x6c\x62\xa0\x07\xef\x62\x15\x1d\x40\xfc\xfb\xe0\x43\x0f\x96\x11\xc8\x4a\x0c\x10\x32\x17\x1b\x1e\xb0\xff\x27\xf0\x4d\x2e\x44\xe3\x1e\xa0\x2b\x1e\x00\x32\xd0\x33\x17\x2b\x75\xc7\x8a\x81\x11\x72\x9a\x6e\x24\x07\xbd\xd4\x5d\x36\x40\x7c\x08\x4c\x30\x11\xb0\x3e\x04\xf4\xc1\x4b\x78\xe6\x25\x4c\x22\x13\x20\xd0\x1f\x24\xcb\x01\x65\xc7\x64\x3e\xd0\xc1\xac\xc4\x02\x21\x73\x73\x61\x49\x9f\x0f\x40\x03\x51\x01\x35\xef\x03\xa1\x9f\xb0\x11\x0f\xb1\x6b\x06\xac\xb8\x1b\x21\x3b\xe0\x70\xea\xf4\x65\x7b\x0b\x1b\x51\x04\x03\x55\x00\x56\x3f\xc4\x4c\x1c\x56\xac\x8e\x90\xb5\xd8\xb0\x43\x82\x64\x50\x21\x35\xc0\x2c\x6f\x60\x79\xaa\x31\x6f\x8d\x15\x93\x23\x24\x36\xc4\x89\xfe\xf6\xf7\x61\x99\xc3\x41\x9d\x0c\x63\x95\x9b\x60\x19\x46\x78\xa1\xbb\x39\x2b\x81\x40\xd4\xa5\xa1\x7f\xc2\x3b\xac\x1a\x08\x38\x24\x79\xa8\x7b\xd2\xc8\x06\x21\x6c\x5f\x1f\xd7\xd2\xb4\x6d\x7b\x8b\x25\x82\x78\x76\x44\x9a\xaf\x9c\xbf\xe9\x4c\xf2\x5c\xee\x30\x87\xcf\x66\xb1\x01\x8b\xde\xe5\x34\xe2\x1c\x11\x75\x9c\x85\x3a\xce\x12\x8f\xd3\xc1\x2d\x14\x6f\xad\x6c\xee\xd3\xc5\xe1\x70\xe2\xb8\xbb\xa1\xaa\x7f\x87\x81\x26\xcf\x14\x9d\x08\x0d\x3d\xcb\xbb\x71\x9b\xce\x96\x87\xe1\xbb\xa8\xf2\xbf\x0a\xfc\xf4\x28\xba\x6e\xfe\xd7\xbf\x72\xe9\xbb\xf0\x8a\xe1\xf5\x71\x3c\xa7\x2d\xad\x14\xd7\x28\x5a\x9e\xb7\xbc\xfc\xbf\x4f\x74\xfd\x9e\xad\x51\x76\x71\xce\xc9\xfd\x95\xdc\x7c\x4a\x52\x1b\x24\x0a\xd7\xaf\x2d\xab\xf4\xe8\x76\xda\x38\xb5\x5a\xfd\x2d\x79\x63\xf2\x11\x0e\xfb\xbf\xf5\x8c\xc5\xd2\x1d\x0b\x94\xa3\x5b\x35\x6f\xbb\x88\xe4\xed\x7b\x6a\xe2\x73\xa5\xda\xe2\xe3\xa3\xa8\x32\xf2\xb6\x76\xc4\x2e\xde\xf7\x39\x91\xbd\xdb\xe2\xbc\x99\xcd\xc5\x13\xe7\xcd\x2e\x87\xb0\xff\xdb\x6f\x10\x32\x35\x1d\x2f\x35\x73\x83\x5d\x9f\x4d\x2e\x4e\x28\x4b\x27\xe6\xf5\x0a\xd3\x01\xc1\x63\x6f\x26\xec\x62\xbc\x13\x2c\x16\x11\xd9\x3b\xa7\xd7\x4f\x1f\x4f\x38\x7c\x72\xec\x8b\xe5\x92\xe1\xfc\xed\xcb\x6a\x35\x5b\x49\xdc\xd7\x33\x5b\x8e\x8b\x59\x22\xfa\x78\x9e\xfd\x91\x25\x88\xa5\xc5\x3d\xe1\xd0\x5f\xcd\xc3\xbf\x16\x5c\x72\xfd\xd0\xf1\x5c\xcc\x7c\x7a\xcc\x43\x6b\xd8\xa3\x8b\xfb\x8c\x9a\x8c\x6f\xb5\x1d\xd7\xac\x0e\xd8\xaf\x34\xf8\x34\xa2\xfe\xcd\xa1\x90\xd8\x36\xc7\xd3\xed\xd6\x8b\xaa\x32\x73\xae\x47\x8c\x94\xde\x49\x95\xbf\xe9\xb1\xc0\x44\xee\x7a\x6a\xe8\x6e\x2e\x31\xb3\x69\x7a\x87\xd6\xb0\x53\x71\x1e\xfd\x12\x77\x65\x4f\x7e\xbe\xb8\xd2\x92\xad\x61\x93\x36\x75\x1f\x31\x39\x14\x27\xf9\xed\xf2\xb8\xfe\x09\xfd\x44\x55\xb5\xe6\xda\xfb\xa6\x9a\xbe\xdb\x8c\x7d\x7e\x15\x68\xed\x19\xbd\x4d\x11\x33\x45\x7f\xe5\xae\x6b\xc3\x7d\x33\xd7\x59\x7e\xc8\x26\xc2\x29\x47\xdc\x53\x70\xbe\xfa\x16\xee\xa7\x0e\xf7\x44\xc6\x14\x42\x5e\x85\x7f\x57\x88\x93\x51\x4d\xdd\xb7\x4f\xb6\xf0\x9e\xde\xb5\xa7\xf2\x2f\x39\xc7\xfc\xc4\x4e\xd3\xdf\xbe\x4d\xff\xf2\xe5\x54\x07\xdb\xdd\xb7\xca\xbb\x1e\xf5\xe4\x19\xf2\x0a\x6c\x97\x77\x26\xb2\xff\x98\xf9\x2b\x7e\x01\xfb\x47\xe2\x1b\xd1\xe0\x57\x0f\x6f\x5f\xe8\xbd\x60\x62\x90\xb7\xcc\xe3\x5e\x8f\xd8\x19\xfa\x1f\xed\x14\x83\x3b\x6d\x37\x90\x77\x5d\xca\x5f\xe2\xf0\xaa\x68\xc3\xaa\xdf\x87\xc6\x73\xc5\x2c\xe8\xe3\x56\x77\x89\x4b\xdf\x6b\x49\x34\x5a\x17\xa5\xf1\x27\x77\x43\xfb\xbe\xb8\x65\xbd\x1b\x88\xec\x5d\x74\xb0\x50\x17\x56\xcc\x7a\xb3\x72\xe7\x1d\x7b\x91\x35\xd7\xef\xcb\x0f\xf9\xe9\xde\x37\x5d\xf1\x74\xa5\xc8\xf7\xc3\x06\x4e\xfb\xf7\x88\xb0\xcb\x51\xff\xc3\x42\x6c\x9f\x19\x7a\x01\xbe\x0c\x79\xf1\x41\xf1\x40\x89\x96\xf1\xeb\xa5\xad\xa2\x47\x74\x6f\xbb\x1b\xa6\x77\xec\x5f\x55\x3d\xef\xf3\xad\x06\xef\x87\xeb\xa9\xff\xff\x89\xd3\x27\x96\xb9\x37\x7c\xa8\x5e\x6b\x37\xcf\x80\x65\xcb\x64\xba\xf2\xc9\x09\xeb\x1a\xed\xee\x03\xe6\x4a\xa9\x1e\xe1\x03\x37\xaf\x2f\x1f\x1d\x44\x27\xe6\x54\xa4\x2f\xc0\xdf\x3a\x61\xaf\xdc\x5f\x72\x7a\xcd\xb8\x81\x99\x7b\xc7\x72\xdb\xfa\x57\x3a\x09\x7b\x26\x1d\x1f\x26\x36\xbc\x9b\xf3\xf8\x8b\xec\xfc\x23\x8a\x8f\xff\x24\xda\x79\xe3\xf5\xcd\x1f\xbd\xa4\x0f\x4d\xc9\x51\x08\x4b\x4e\xb8\xbc\x6f\x4c\xaa\xc9\x6c\x28\xd8\xb4\xcd\x21\x98\xcb\xf6\x5e\xea\x15\xbb\xdd\x6b\x75\x3d\x74\x5e\x92\x1f\x52\xff\xc3\x36\x4a\xe0\xf5\x71\xbc\x33\xf2\x65\x63\x76\xed\x84\x8d\xe9\xdf\x9f\x1f\xd1\xb5\xc3\x8a\x9f\x04\xcd\x97\xf7\x53\x0b\x5d\x2e\x97\x91\x79\x8b\x6f\x1f\x91\x1b\x51\xfa\xf1\x44\xfc\xed\x61\x9b\xd4\xec\x05\x46\xa7\xae\x6b\x38\x6b\xe3\xf8\x71\x78\x31\x97\x11\x8d\x73\x9a\xb8\xf9\x38\xf4\x3f\xfc\xff\xbe\xd2\xc1\xe1\x87\xf7\x0d\x2a\x06\x5d\x79\xe2\x8d\x1c\x12\xc7\xe1\x87\x77\x85\xfa\xda\xd6\xc7\x69\xe0\x98\xfe\x33\xc0\x13\xbd\xce\xbc\x5b\xcd\xfc\xb5\x36\x6e\xfe\xd4\xcc\x7f\x38\xd5\x36\xb6\x99\x09\xc9\x5b\x9a\x87\xb4\x9b\x52\xfb\x5c\x37\x3c\x3a\x3d\x2c\xc8\xc6\x97\x2b\xac\x59\x7c\x7e\xfd\xd9\xf7\x75\x3a\x24\x4d\x95\xab\xc4\x39\x0f\xfe\x92\xff\x95\x8f\xac\x3e\x2d\x5f\x93\xd3\xf9\xe1\x6d\x60\xef\xfc\xc7\xe5\x51\x2e\x4a\xfb\x54\xa7\x6a\x92\x44\x38\xf7\x3a\x4b\x8e\xa9\xe8\xe6\xa8\xfe\x0d\x4c\x22\x62\x76\xc7\x6f\xe6\xaa\x8d\x54\x5c\x4f\x74\x19\x7e\x78\x2b\x60\x83\xb3\x3c\x72\xbe\xc8\x51\xf7\xeb\x61\xbf\xaa\x3f\xb5\x56\x6b\x74\x70\x5c\x31\x36\x0a\xd3\xf3\x9a\x05\x9c\xfd\x7d\xaa\xfe\x7a\xf4\x2e\xc9\x44\xf3\xfa\x9a\xdd\x54\x91\x14\x45\x5f\x6b\x87\x7c\xc2\x80\x4d\xd3\xf7\x0d\xd7\xd9\x5e\x7b\xcd\x55\x19\xe7\xff\x3b\xc5\x62\x87\xa7\x20\x6f\x41\x90\xda\x61\x45\x13\x4d\x72\xf4\x98\x8b\x53\x30\xbe\x6f\x47\x5b\xf5\xd4\xc1\x4b\xcb\xc3\xc5\xf5\xaf\xa5\xff\x1d\xcf\xd8\xd8\xf1\xd2\xe8\x4d\xf1\x63\xb3\x03\xcb\x5e\x7e\x09\x3d\x64\x3c\xe4\x76\xd2\x3f\xc2\xd6\x92\xb7\xa5\x58\xe8\x72\xd1\xef\xed\x17\xc4\x7c\xff\x9e\x2e\x71\xf7\x92\x04\xca\xa6\xa5\x37\x44\xbf\x76\x72\x9e\xbb\xb9\x2d\x59\x3c\xe1\x8e\x59\x6a\xbc\xac\x7b\xa0\x97\x70\x82\xb6\x34\x75\x9d\xea\xf1\x7f\x5b\x39\x67\x75\x9c\x99\x3a\xce\x8c\x42\x3b\x24\x8b\x5b\xc6\x85\x17\x90\x34\x7a\xd5\x7d\x0e\x2f\xec\xd1\x17\xa5\xa5\x5b\x36\x71\xda\x9a\xe8\x5d\x1a\xf7\xf1\xd6\xce\x67\xf6\xae\x2d\x02\xef\xec\x8e\x3c\xeb\xa4\xb0\x89\x4b\xe2\x70\x38\x36\xa3\x7f\x5b\x0b\x7b\x02\xde\x5e\x8d\x40\xfd\x6b\xe6\xdf\x2f\x3e\x58\xee\xf8\xb5\x36\x76\xf9\xa9\x8f\xad\x94\x6e\xdf\x0d\xe4\x94\xef\x7a\x8f\x6f\x0e\xfc\x0c\x7c\x1d\xf1\xdc\x44\xd1\x45\x95\x62\xf0\x6f\xcf\xd9\xab\x71\xfd\x3d\x6c\x06\x1b\x87\x0c\x71\x6b\x79\x9e\x95\xf1\x9b\x1e\xfc\xc6\xdd\xae\x5c\x2f\x9b\x13\xde\x7e\x2e\x79\xa4\x7c\x52\x57\xe4\xb1\xa1\x47\x21\x0c\xcb\xea\x39\x7b\x35\xc9\xbf\x87\x15\x5d\x2d\x7b\x7e\x22\x8b\x5d\x53\xe9\x68\x9a\x31\xdf\xc7\x43\x94\xf9\xc9\xd7\xad\xf0\x73\x6a\xad\x06\x6c\x25\xce\xcc\x2f\x5a\xfb\x0d\x86\x65\xf5\x9c\xbd\x1a\xfe\xef\x61\x93\x6b\xdf\xcc\xd9\xc2\xf6\x7c\xfb\x54\xe5\xd5\x93\x89\x13\x82\x4a\x82\xb5\x6c\x69\x57\xac\xbf\x71\x16\x77\x7b\x85\x1c\x5b\xf7\x25\x96\xa2\xf8\x6f\xcf\xd9\xab\xa9\x52\xa8\x24\x02\x3f\xfe\x1e\xfe\xdf\xb8\xc8\x9e\x9d\x48\xc0\xd9\xab\xb1\x23\x7f\x4d\x86\x9c\xed\x58\xbe\x6e\xfb\x7d\x27\x77\xf7\x7e\xfe\x3d\x92\x6d\x54\x95\x54\x21\x45\x9e\x48\xd5\xf5\x3f\x6e\x24\xaf\x78\x6a\x18\xbc\xf1\xaf\x47\xaf\xfc\x61\xf7\x96\x71\xdc\x43\x2c\x3f\x11\x74\xb2\xfe\x40\xd6\xe2\x25\x85\xdf\xaa\xf2\xc3\xf1\x61\x63\x0a\xdb\x82\xcd\x3c\x7a\x57\x53\xec\xd9\xff\x6d\x4c\x7b\xb5\x29\xa7\xbf\xc6\xf5\x14\x17\x35\xeb\x98\x58\x24\x13\x76\xf3\xdd\xdd\xeb\x85\xb1\xc5\xe7\x76\xb9\x1f\x74\xbd\xb7\xba\x7b\xeb\xe0\x66\xfe\xb9\x5b\x9b\x05\xfe\xbe\x83\xd6\xb1\xea\x50\xff\x9c\x1b\xef\x69\x91\x04\x5e\xf7\xd8\xb4\xe0\x25\x35\xbb\xe3\x4e\xf3\x5d\x8a\xde\x9d\xfa\x58\x52\x67\x69\xd1\xca\xbf\x1e\xd5\x3d\x3a\x66\x67\xa9\x7b\x59\xbf\xaf\xf1\x50\xc3\x9b\xf1\x5d\x9c\xb9\x5b\x4c\xcc\xbc\x94\xd2\x4d\x34\xec\xec\x84\x65\x9a\x07\xeb\xfe\xf6\x4d\x0b\xc6\x32\x25\x94\x46\x37\xee\x3b\xfb\xf1\x74\xeb\x6e\xa3\x39\x19\x49\x4f\x7e\xfc\xe6\xfa\x54\xf4\x83\xab\xc9\x31\x4f\x7b\x85\xe7\xdf\x1e\xd2\x87\xaf\x37\xce\x9f\x69\x0c\x3c\x64\xd0\xa9\x22\xd2\x27\xb9\xb2\x61\xdb\x12\xb3\x4c\xed\xc8\x23\x2e\xb2\xee\xdc\x3f\x4d\xcb\xfe\x96\x69\x4e\x3d\xe5\xc3\x03\x3d\x56\x75\xf1\x8b\xd7\xc7\x46\x85\x9f\x5f\x12\x68\x7a\x36\xeb\xbe\x64\xc7\xa2\x97\xa7\x6a\x89\xce\x62\xfc\xd5\x7f\x3d\x2a\xac\x28\xbe\x3a\xb8\x6f\xb4\x3c\x6e\x4b\x62\xb2\xa8\xc1\x9d\x78\xd2\x5c\xbb\x49\x9d\x14\xa1\xda\x73\xe4\xe5\x39\x3b\xf5\x7b\xf6\xfd\x9d\x19\x6c\x33\x99\xbd\xfc\xc9\x7e\xfd\x6d\xfa\x7b\x0e\xaa\xf9\xac\x9c\x2c\x1c\x12\xd5\x29\x5d\x5a\xfe\xf0\xfa\x92\x50\xef\xf9\xb4\x85\xdb\xb1\x4d\x60\xb5\xaa\x4c\x9b\x20\x15\xc3\xfe\xbd\xce\x42\x5d\x77\xd1\x96\xcb\x52\xeb\x3b\xce\x6b\xc9\x45\xab\x59\x47\x5e\x36\xc8\xda\x5c\xd7\xf1\xae\xf9\xc3\xbd\xbc\xbf\x1e\xd5\x50\x96\xbb\x1d\x98\x9c\x31\xb0\xf6\xa7\xfa\x95\xc1\xf1\x4d\x91\xcf\x94\x7d\x5c\xdf\x35\x9e\x39\x23\xae\x13\xed\xe5\x93\xb2\x5d\xef\xef\x52\x52\x2f\xe6\xbf\x5e\xdd\x80\x9c\x16\xda\xc9\x6d\x71\x9f\x5a\xb8\xbe\x91\x4f\x47\xcc\xda\x2f\xeb\xdb\xa6\x64\xaf\x63\x21\x66\xa7\xae\xfe\x1d\x00\x1e\x2a\xee\x58\xad\x30\x7e\x0c\x37\x1c\x7f\xcd\x62\xfc\x47\xd3\xe3\x42\xbb\x98\x1b\x9b\xa3\x0e\x46\xed\x53\xb1\xbe\x1b\xb0\xfc\xd6\xdf\x09\xc2\x4a\xa4\xfa\x37\xc3\x82\x82\x67\xdc\xcc\xda\x9b\xf9\xb9\xde\x6f\x31\x21\x56\x34\x08\xb6\xbc\x97\xda\x91\xdc\xcf\xe6\xb7\xb1\xfc\xaf\x47\x6d\xf9\x06\x1d\xaf\xff\xd1\x2f\x93\x12\xce\xc7\x8d\x78\x9f\x5b\xb9\x62\x3b\xdb\xc5\xea\x55\xdc\x93\xb9\x78\x59\xfb\xcc\x98\xb3\xc4\xbf\x1e\x8d\x55\x95\xc1\xe7\x78\x1e\x1e\xc3\xef\x16\x9d\x2b\x22\x51\xdf\x98\xd9\x6f\x95\xa0\x48\xea\x2a\xab\xa9\x18\x73\x5b\xe3\x2b\xfb\xe2\xaf\x47\xf5\xc5\x7f\xaf\x7a\xfc\xf6\x20\xd5\x3f\xe2\x59\x5b\xd0\xda\x9f\x45\x9c\xed\xda\x4b\x7e\xeb\xf2\xc8\x3e\x31\xd9\xdb\xb3\xfb\x79\x89\x15\x25\x99\xf3\xdf\x56\xd5\x5e\x6d\x8a\xe2\xe4\x8a\x63\xab\x5e\x79\x68\x05\x0e\x8f\x34\xb3\x53\x3b\xd9\x24\x57\x6f\xaa\x3f\xd4\x1f\xbb\x3c\xb5\xef\x9e\x91\xaa\x1c\xbb\x53\x0b\xe7\x19\x8b\xe2\x17\x1b\x36\xfb\xa6\x58\xcc\xef\x6a\x09\xa8\x5c\x4f\x25\x12\x50\x8b\x5c\x34\xce\x48\x55\x0b\xc7\x46\x9b\x2b\x39\xad\x64\xd9\xe4\x25\x5c\x29\xd3\x9f\xf0\x9f\x2f\x2f\xfb\x6c\x99\x29\xa4\x8d\x63\xff\xe0\x96\x66\x58\x58\x6f\xe3\x8a\x67\xa4\xb0\x4e\xeb\xc2\x72\xb9\xf4\xcc\xf9\xf7\x5d\x77\xdd\xad\x71\x5b\xe4\x94\x23\x5c\xc0\x7b\x84\x4d\x99\x5a\xb9\xd6\x8e\x3f\xfa\xe6\xce\x85\x54\x22\x01\x3f\x4b\x0a\x6c\x8c\x14\x1c\xd7\xc5\x2a\xdd\x59\x59\xbd\x51\x5d\xd8\xf3\xe9\xc8\x02\xf1\x5d\xb1\xcb\xbf\x14\x27\x94\x5b\x96\x1c\xac\xce\xbd\xb5\x77\xd5\xdb\x25\x54\x22\x81\x6d\x96\x14\xd8\x19\x29\x2c\xbe\xc9\x29\xa5\x15\x1c\x94\x2c\x6c\x54\x5a\xfc\x7e\x87\xed\x03\x6d\xb2\x61\xc1\x50\x77\x5e\x61\x3e\x39\xf1\xc4\x6b\xcf\x53\xe8\x3b\xb0\xcf\x92\x02\x81\x91\x42\xcb\xe1\x24\x4d\x53\xbf\x35\x7a\xb5\x8e\xfa\xaf\xa3\xdd\x3b\x9e\x0e\xab\x8c\x34\x9c\xe3\xca\xd9\x5a\x50\x66\xd6\xf3\xb5\x62\xc1\x76\x2a\x91\x40\x98\x25\x05\x0e\x46\x0a\x63\x66\x97\x16\x96\x5f\xd7\xfd\xf9\xe1\xe6\x19\x8d\xf4\x7e\xb2\xa9\x61\x8d\x9d\x9c\xca\xb2\x0e\xc1\x6a\xae\x17\xfb\x46\xe2\xef\x5c\xa0\x12\x09\x1c\xb3\xa4\xc0\xc9\x48\x61\xd1\x47\x53\x8d\xa8\x1f\xa6\x7a\xe6\x26\x8d\xd7\xb7\x1f\x8c\x4c\x1f\x70\x23\x4c\x26\xcb\x49\xf5\x2d\x0f\x52\xb8\x4a\x8a\xff\xa8\x41\x25\x12\x38\x67\x49\x61\x0e\x23\x85\xf5\x8e\xfe\x4a\x2e\xe4\x5b\xef\x15\xbb\x2e\xbe\x58\xb1\x59\x7e\x75\xe7\xa5\x73\xd6\x49\xcf\xa8\x93\x07\x0a\x07\xba\x8b\x06\xfc\x4e\x51\x89\x84\x39\xb3\xa3\x00\xc2\xc3\x0a\x67\x66\x84\x87\x8b\x71\x3a\x11\x44\x9e\x2c\x79\x3e\xfe\xb0\xbe\xc1\x53\x12\xef\x62\x4b\x04\xdd\xa9\xde\xc2\xb5\xb7\x33\xea\x43\x0d\x7c\xcf\x2e\x7d\x3c\x61\x43\x25\x12\xb8\x66\xf9\xc2\xdc\x8c\x14\xd4\x5c\x49\x42\xad\x5a\x6b\x1b\x56\xa5\xf2\x0f\x45\x5e\x75\x33\x42\xaa\x3b\x43\x71\x0d\xeb\x23\x0e\xfe\xec\x0a\x55\xe1\xe7\xda\x4a\x25\x12\xb8\x67\x49\x81\x87\x91\xc2\xc3\x7e\xe7\x88\x82\x7b\xe7\x92\x8a\x73\x2b\x5f\x94\x7f\xfa\xfc\x4d\xd7\xeb\x94\xe1\x7c\x9d\xed\x4b\xf7\xf2\xde\xd0\xb2\xfd\x6d\x7e\x9e\x4a\x24\xf0\xcc\x92\xc2\x5c\x46\x0a\x81\x05\xa6\x6f\xdf\x7d\xdd\x63\x7b\xe9\x6a\xda\xd7\x4b\x27\x46\xdd\xee\x94\xab\x73\x6a\xfb\xde\x1f\xbf\xd5\x5a\xaa\x6b\xae\xc2\xb6\x88\x4a\x24\xcc\x9d\x25\x05\x5e\x46\x0a\x67\x12\x7f\x76\xd7\xc8\xc7\xca\xcb\x7f\x13\x30\x1d\x7d\xa1\xea\x30\xfe\x4d\xe6\x55\x8f\x44\x6c\xb8\x46\xc4\x71\x0e\x05\xff\x62\x31\x2a\x91\xc0\x3b\x4b\x0a\x7c\x8c\x14\xf8\x49\xaa\x87\xd8\x6f\x69\x8c\xf8\xe6\x6e\xfc\x80\x77\x1e\xfe\x24\xcd\x71\xb3\xf8\x97\x2d\x8e\xcc\xab\x41\x13\x09\xec\xcd\xd1\xa2\x12\x09\x7c\xb3\xa4\x30\x8f\x91\xc2\x95\x95\xe7\xbe\x9f\x0f\xf2\xe1\x30\xff\xa4\x75\x50\x6c\x91\xe0\xf2\xa2\x45\x31\xd6\x96\xe2\x47\x94\xd6\x8a\x5d\x8f\x9d\xb8\x1b\x80\x52\x98\x37\x4b\x0a\xf3\x19\x29\x54\x6d\x91\x13\x35\xb8\x97\xfe\xdd\x12\xff\x61\x4e\x5a\x66\xf5\xdb\x6f\xf6\x1a\x11\xde\xfe\xc6\x31\xb5\x8f\xb9\xc8\x94\xdb\xb2\x8a\x54\x22\x61\xfe\x7f\x13\x1e\x56\x9a\x77\x46\x78\xf8\x99\xd8\x82\xcd\xdd\xfc\x8f\xf7\xf5\xa3\x6b\x97\xc4\xf1\x75\x7e\x8e\x21\xb9\x2a\xbd\x1f\x3e\x70\xf1\xec\xea\x92\x73\x3e\xf2\xe4\xa8\x4d\x28\x6a\xf3\xcf\xf2\x85\x17\x30\x52\x20\xa9\x9d\xb9\x58\x28\x55\x3b\xaa\x71\x4a\xe6\xe4\x64\x91\x88\x6e\x22\xe9\x50\x3e\xfb\x37\xd3\xa8\xd3\x5b\xda\x3c\x38\xdc\x38\x34\xa9\x44\xc2\x82\x59\x52\x10\x60\xa4\x70\x7b\x57\x5d\x48\xde\xdc\x90\x43\xdd\x86\x25\xce\xe1\xd7\x52\x5e\x2d\x58\xf7\x2b\x9b\xf7\xcc\x63\xfd\x68\xab\xec\x77\x07\x42\x9c\x39\xa9\x44\x82\xc0\x2c\x29\x08\x32\x52\xd8\x5a\x7e\x2d\x61\xc3\x25\xa1\xbe\xe2\xa1\xd6\x36\xdb\xf7\xd1\xf1\xcb\x8e\xdc\x62\xeb\xbd\x35\xa1\x1f\x74\xa2\x2b\x6b\x68\x83\x80\x30\x95\x48\x10\x9c\x25\x05\x21\x46\x0a\xce\xf7\xf6\xf7\xa6\xd8\x72\x53\xf6\xe7\x69\x58\x4c\x2a\x6a\x88\x49\x78\x55\xbd\xfa\x51\x20\x11\x78\x40\x6f\xea\x86\x7d\x36\xb7\x31\x95\x48\x10\x9a\x25\x05\x61\x46\x0a\x82\x9e\x8f\x5f\x4b\x1c\xfb\xa8\xbf\xaa\xbd\x4d\x2f\x07\xb7\x69\xef\x72\x99\xcc\x8f\xa6\x8f\x38\x39\xd2\xc8\xe3\x73\x1e\x9e\x0d\xb8\x48\x25\x12\x84\x67\x49\x41\x84\xc9\x8a\x39\x39\xf7\xe7\xc9\xce\x35\x5e\xde\x4f\xbe\xee\xab\xc7\x6d\x7f\x12\xb1\xf4\xf1\x28\xaf\x84\x9e\xbf\x5b\x4d\x6d\xc7\xa7\x37\x5b\xe7\x53\x89\x04\x91\x59\x52\x10\x65\xa4\x70\x3a\xda\xbd\xe4\x65\xd6\xdd\xbd\xbb\x14\x84\x6a\xf8\x0c\x77\xeb\x36\x7f\x8f\x1b\x59\x1f\xe3\x30\xca\x4b\x7a\xbd\x27\xd8\xad\x57\x92\x4a\x24\x88\xce\x8e\x42\x26\xe7\xbf\xd9\xa2\x33\xc2\x23\x26\xc6\x38\x1f\xf2\x71\xce\x27\x3d\x7c\x32\xdc\x02\xdb\x6e\xb8\xfa\xd9\x38\xcb\x45\x0d\x7b\xc4\xa5\x51\x9c\xba\x0c\xb7\x34\x34\x9e\x5d\xfd\x4c\x96\x4a\x24\x88\xcd\xf2\x8d\xc5\x88\x8c\x24\x76\xee\x4a\x50\x8b\xa3\x69\x05\x1f\x2d\x20\xad\x65\xeb\xfc\x68\xf3\x6a\xf2\xc5\xf6\x6d\x57\x4f\xed\x58\x12\xf6\xb8\x86\xcd\xd3\x14\xc5\x0b\xe2\x6c\x49\x88\x33\x92\xf8\x11\xc8\x91\xe7\x5e\xae\x4a\x30\xa6\x9d\x4f\xbb\x5f\x90\xd7\x55\x80\xa8\xf9\x1f\xbf\x6b\x3a\xb6\x3c\xe1\xea\x8f\x93\x05\x63\xba\x54\x22\x41\x7c\xb6\x24\x16\x32\x92\xb8\xe0\x31\x60\xda\xa0\xe7\x24\x87\x78\x6d\x3f\x2a\xb6\xd5\xe5\x73\xff\x41\xc9\x58\x3d\xdf\xdb\x01\x82\x1a\xdf\x7f\x28\x28\x9d\x54\xa6\x12\x09\x0b\x67\x4b\x42\x82\x91\x84\xbb\x1d\xe7\xeb\xeb\xe2\xa2\x0a\x13\x5d\xda\x0d\x1b\xe7\xe2\x16\x73\x57\xdd\xd8\x59\xdd\x7a\x5d\x44\xf0\x8a\x60\xfd\xc8\x79\x7e\xd4\x3a\x94\x98\x2d\x89\x45\x8c\x24\x54\x94\x9f\x93\x17\x7a\xcc\x1d\x18\x57\x7d\xb8\xe9\x88\xb9\xb8\xad\x74\xb7\xf1\xae\x23\xf1\x61\x7d\xcf\xf9\xaa\x4e\x84\xda\xe6\xe2\xa8\x44\xc2\xa2\xd9\x92\x58\xcc\x48\xa2\x36\xfa\xbc\x4f\x81\x8d\x4d\x4e\x62\xa5\xbc\xd8\x81\x79\x03\xcf\x0c\x8f\xaa\x57\x68\xef\x9b\xb7\x5f\xa6\xf8\x22\x9e\x56\xae\x29\x4f\x25\x12\x16\xcf\x96\xc4\x12\x46\x12\x05\xad\x21\xc4\x9b\x91\x8a\x4b\x34\xc4\x17\x9e\x7b\x2a\xed\xf5\x7a\xc4\x76\xe7\x3e\x71\x73\x4e\x53\x3e\x93\x87\x5f\xd2\xa7\x24\x8f\x50\x89\x84\x25\xff\x4d\x88\x58\x79\x69\x74\x21\x92\x64\x9c\xcf\x03\xd1\xd3\x86\x01\x87\x4a\xb3\xe2\x2e\x04\x27\x17\x4e\x1c\x0d\x57\x4a\x8e\xa2\x9a\xee\x6c\x24\x67\x29\x68\x2f\x8b\xd0\x16\x23\x50\x89\x04\xc9\xd9\xbe\xb2\x14\x23\x09\xb1\x73\xfb\x42\x2d\x2a\x0a\x33\x4f\x1c\xd3\x9f\xb8\xba\x34\x5c\xe2\x92\xdd\xd4\x93\x84\x75\xbb\x12\xb2\xd6\xdf\x2d\xfc\x7e\xf4\xe0\x4a\x2a\x91\x20\x35\x5b\x12\xd2\x8c\x24\x2e\xbb\x26\x3c\x46\xb2\xd3\x0c\x36\xef\xd8\xf9\x64\x53\x69\xb6\xe5\x37\x47\x67\x71\xdf\x1d\xc7\xed\x15\x8e\xe2\xd4\x84\x97\xef\x25\x53\x89\x04\xe9\xd9\x92\x58\xca\x84\x36\xed\x7d\x95\xe9\x11\x7e\xdd\x6b\xef\x5c\xbd\x95\x99\x72\x33\x37\xc7\xe0\xc0\x48\xcd\xc9\x81\xd0\x9f\x0e\xd1\xb1\x7b\x5c\xbf\xa0\xba\x7a\xe9\x6c\x49\x2c\x63\x24\x81\x18\x69\x6c\x76\x4c\x7d\x48\x4d\xa7\x68\x55\xfb\x7f\xb3\x12\xc7\x65\xb7\x24\xf2\x6d\x12\x08\xe6\xcf\x97\x56\x57\xe1\xec\xd9\x4b\x25\x12\x96\xcd\x96\x84\x0c\x23\x09\xeb\x6b\xd9\xeb\x47\x8d\x88\x9e\x22\x22\xc3\x3a\xe6\x78\x43\x95\xfd\xe3\xd6\x17\xc3\xaa\x1b\x3b\xc6\xc9\xb2\xfb\x8c\x16\x5c\xe3\xa7\x12\x09\x32\xb3\x25\x21\xcb\x48\xa2\x3d\xe8\xd6\xd3\xe7\x3f\xa7\xe2\xe3\x52\x9c\x9f\xaf\xff\x7d\x2c\x7b\xf1\xd6\xc9\x4c\xb9\xca\x18\x67\xe2\x9e\xf6\x31\xd9\x8f\x1e\xd6\x54\x22\x41\x76\xb6\x24\x96\x33\x92\x18\x49\x28\xf2\x41\x72\xc6\x0f\xe3\x83\xfa\x54\x16\xaf\x99\xe0\x8e\x70\xe5\x6a\x18\xd7\x55\xd9\x65\x69\xa6\x7f\x3a\x77\x8e\xf0\x66\x2a\x91\xb0\xfc\xbf\x09\x11\xab\xf8\x05\x5d\x88\xe4\x18\xe7\x63\xbb\xb6\xaa\xc6\x21\x3a\x42\xde\xe6\x80\xfc\xe6\x45\xa2\xe2\x02\x3b\x04\xed\x52\xee\xe8\xaf\x7e\xf3\xfa\x74\x89\x31\xfe\x13\x0e\x15\x6a\xb9\xd9\xbe\xf2\x0a\x46\x12\xa2\x2d\x31\x02\xf5\x67\xcd\xe7\x46\xcd\xab\xfc\x66\x75\x60\xcf\x0f\xfb\x8d\xa5\xc6\xbf\x6e\xfa\x26\xe4\x21\x8b\xfc\xe4\x94\xaa\x78\xa8\x44\xc2\x8a\xd9\x92\x58\xc9\x48\x42\x66\xe1\x83\xe1\x23\x35\xa6\x3f\x8d\x43\xb5\xde\xe0\x63\xd6\x7d\xbc\xf2\xf9\xd9\xbe\x37\xba\x92\x29\x94\x96\x85\x7d\x6d\x73\xcf\xed\xa4\x12\x09\x2b\x67\x4b\x42\x9e\x91\x44\x50\x44\x94\x84\xbf\x40\x5a\x43\xd3\xfb\xe3\x75\xc2\xc5\x4e\xec\x42\xd6\x12\x7c\x7d\x27\x0c\x53\x8e\xbd\xa0\x1a\x89\x76\xb1\xcf\xa1\x12\x09\xf2\xb3\x25\xb1\x8a\x91\x84\xaf\xd9\xf1\xab\x5f\x73\xfa\x05\x1e\x1b\x1c\x14\x4e\x5e\xe0\xbc\xf8\xae\xd2\xaa\x61\x0f\x8b\x25\x17\x37\x9a\xd3\x52\x8f\x6f\x08\xdc\x42\x25\x12\x56\xcd\x96\xc4\x6a\x46\x12\xe3\x15\x77\xba\x37\x6e\x7f\xbc\x8c\xf6\x6d\x2e\x5b\xac\xce\x69\x51\xd9\x0b\xaa\x6d\x7b\x9c\xb4\x57\x0f\x1e\xf5\x25\xc7\xd5\xd4\x08\x52\x89\x84\xd5\xb3\x25\xa1\xc0\x48\xc2\xc7\x6d\x69\x35\xd7\x44\x6d\x80\x8b\xc9\xa0\xe7\x9a\x89\x33\x55\xa4\x15\xca\xfa\x8b\x4f\xfe\x1e\x8c\x3c\x91\xff\x33\x56\xff\x20\x6a\xb7\x2b\xcc\x96\x84\x22\x23\x09\x11\xfc\x6a\x5b\x8b\xb8\x6c\x35\x37\x85\x49\xe2\x5e\x87\x74\xef\x0d\x87\x4e\xad\x2e\x09\x73\xca\x88\xe1\x70\x52\xd5\xa7\xce\x39\x47\x25\x12\x14\xff\x9b\x10\xb1\x8a\xec\xd1\x85\x48\x89\x71\x3e\xde\xc6\x9f\x0e\xef\xb4\x3b\x23\xf5\x20\xa5\xe5\xbd\x9c\x46\x80\xcf\xf6\xb0\x9a\x81\x06\xbb\x8c\xfd\xf3\x15\xf2\x75\x76\xe1\x95\xf5\xa8\x44\x82\xd2\x6c\x5f\x79\x0d\x23\x89\x1d\x77\xd3\xbf\x3f\x35\x14\x59\xde\x6f\xb6\x9e\x92\xbf\x68\xb7\xca\x81\x32\x17\xf6\xe5\x27\x3e\xfd\x7c\x22\x7a\x71\xce\xe7\x28\x36\xd4\x93\x58\x33\x5b\x12\x6b\x99\xe2\x21\xaf\xae\x46\x1f\xfa\x10\x78\xb8\x46\xb6\xe6\xed\x3a\x41\x6d\x8f\x91\x9e\x3f\x01\x77\xb6\xa6\x16\x1e\xb8\x2d\xde\xd3\x1b\x73\x87\x48\x25\x12\xd6\xce\x96\x84\x32\x23\x09\xe5\x85\xcf\xc2\xe6\xff\xbe\x5a\xbd\x88\xf7\x7a\x68\xcc\xca\xd1\x3e\xa7\xe3\xeb\x23\xaa\xf4\x4a\xab\x82\x44\xd7\x1d\xf3\xe6\x08\x40\x17\x4a\x79\xb6\x24\xd6\x31\x92\x58\xa0\x16\xb9\xfa\xda\xe9\xfe\xa1\xe7\x4b\x9e\xe3\xae\x4a\x49\xe7\x3f\xfa\x19\x1d\xb2\x6c\x61\x61\xd4\x77\x03\x35\xc3\x83\xe2\x92\xc7\xa8\x44\xc2\xba\xd9\x92\x58\xcf\x48\x22\x98\x57\x3a\xac\xa7\xcc\xa2\x7f\xf1\xb3\x73\x6a\xca\x77\xd8\x7b\x94\x9a\xe7\x50\xad\x8a\xdf\x56\xf1\x49\x92\x87\x17\x0f\xbb\xcb\x50\x89\x84\xf5\xb3\x25\xb1\x81\x91\x84\x89\xee\xf1\xa3\x5b\x34\xd6\xa6\x7e\xfd\xf8\x56\x58\xb5\x59\xf1\x8d\xd6\xde\xe3\x9b\x7a\xaf\x9d\x5f\x99\x26\x6f\xeb\xf3\x4a\xec\xed\x71\x2a\x91\xb0\x61\xb6\x24\x36\x32\x92\x88\x6a\x1c\x18\xda\x64\xdd\x9d\x70\xb4\x50\xa6\xc1\xe0\xc6\x9a\x89\xe0\xea\xcc\x6b\xeb\x74\x74\x2c\x8e\x86\xeb\x7f\xd7\x3b\x65\x2b\x42\x25\x12\x36\xfe\x37\x21\x62\x15\xf3\xa6\x0b\xd1\x26\xc6\xf9\x74\x94\xf2\xb7\x39\xc9\x2f\x62\x5b\x2b\x19\x6c\x17\x42\xce\x52\xc1\x07\x51\x7b\x4e\xed\x58\xb6\x28\xfd\xa0\x42\xc9\xc5\xb5\x62\xe6\x54\x22\x61\xd3\x6c\x5f\x79\x33\x23\x09\x7f\x23\xd1\xc7\x1f\x33\xf3\xd7\x1d\xdc\x21\x14\x6c\x60\x67\xdd\xf3\x44\x95\x3f\xfa\x6c\x7c\xca\xe9\x65\x95\x17\x24\xde\x34\xf0\x6d\xa5\x12\x09\x9b\x67\x4b\x62\x0b\x23\x09\xde\x21\xfb\xb7\x8f\xde\xb6\xaa\xc5\xc4\x74\x27\x7e\xb2\x6a\x8b\x8d\xa5\x90\x05\xf2\xb3\xed\x0e\x3c\x18\x49\x7c\x36\x69\x60\x2c\x41\x25\x12\xb6\xcc\x96\xc4\x56\x46\x12\x96\xc2\x35\x27\x15\xaf\x2f\xbc\xd0\xfd\xe5\xfe\xca\xf8\xa1\x68\xeb\xcd\x1d\xe2\xfc\x0a\x22\x06\xb1\xab\xd2\xb8\xf5\x02\x7e\x1e\x41\x6d\xad\xad\xb3\x25\xb1\x8d\x91\xc4\x94\xea\x8a\x67\x2b\x52\xea\x1f\x5f\x2f\x8d\x0a\xba\x50\x26\xbf\xe9\x1b\xdb\xaa\x3c\x49\x59\x85\xd6\xda\x8a\x29\xe7\xde\xcb\x2f\xf4\xa9\x44\xc2\xb6\xd9\x92\xd8\xce\xe4\x3c\xe6\xf6\x78\x7c\xe3\xdd\x9e\x50\xe6\x16\x6b\x7a\xc7\x31\xeb\xd6\xc8\xbb\xed\xfb\x76\xb3\x21\xc5\x0b\x1d\x56\x04\x28\x5e\xd8\xcf\x4e\x25\x12\xb6\xcf\x96\xc4\x0e\x46\x12\x09\x89\x77\x36\x2b\xfa\x1d\xea\x19\x12\x36\x68\x72\x4d\x79\xec\xa5\x2f\x79\x26\x67\x72\xc9\x50\xa3\xfc\x09\xb9\x85\x1c\xa3\x01\xab\xa8\x44\xc2\x8e\xd9\x92\x50\x61\x24\x71\xf7\xfb\xe6\x94\x9f\x9d\xaf\xbb\x06\x23\x5e\x15\xdd\x53\xa8\x3f\x71\xc6\x96\x73\x69\x43\x80\xe5\xb8\xd5\xc5\x0f\xa7\xbe\xb2\x73\xaa\x50\x89\x04\x95\xd9\x91\x80\x43\x39\x56\xe7\x97\x4c\x87\x72\xb6\x37\xed\x62\x83\x38\x49\x2d\x15\xba\xa1\x46\x38\x55\x62\xf3\xc2\xa0\xa4\xd4\x55\x6f\x9a\x43\x5e\x91\x32\x6c\xe2\x0f\xc4\x6b\xff\x5d\xda\xfd\xda\xb3\x72\x5d\xf9\xbb\x5a\xbc\x99\x92\x1a\x6e\x3f\xc7\xc8\xd7\x73\xd3\x88\xfb\x17\xe3\x7f\xae\x58\x75\xcc\x96\xb4\xd4\x68\xd7\x5f\x8f\xde\xf2\x14\x1e\xb9\x4d\x74\x35\x22\x86\xef\xb3\xb0\xdb\x3e\xf5\xfe\xc6\x78\xb3\xb5\xff\x19\xf6\xf6\x3a\x4d\x57\xdd\x6b\xcb\x96\xfe\x7d\x28\x47\x3c\xb3\xc1\x20\x73\x95\x8e\x64\xcb\xc9\x23\x29\xb2\xb2\x9b\x16\xec\x56\xe5\xf9\x71\x2d\x24\x50\xd4\xe6\x4a\xd9\x25\x0e\xbb\xd0\xc3\x7f\x3d\x7a\xd0\xa8\xff\x5a\xa9\x61\xe7\xe7\xc8\xbd\xc3\x29\xbc\x6c\xa4\x23\xc6\x05\xbf\xb5\xbb\xd7\x89\x37\x52\xef\x5f\xb2\x48\xfc\x78\x4b\xf9\xaf\x47\xcf\xaf\x4a\x95\xba\x28\x7c\xbc\x9a\x52\xfe\xa5\xe1\xb0\x58\x18\x4f\x76\xbd\xc2\xc1\x2f\xe7\xcd\x86\x5d\xb7\xba\x53\x3f\xd8\x96\x1f\xf9\xfb\xac\xd1\x4e\x5c\x67\xb0\xfe\xb2\xeb\x22\xb1\xbb\x7c\x03\xca\x09\x63\x31\x76\xae\x99\xad\xfe\x49\x1b\xbb\x2a\x6f\x85\x39\xdc\x96\x2d\x61\x48\xfd\x18\x6d\xde\x52\x3b\x96\xf5\x64\x85\xc3\x15\xed\xbd\x23\x52\x77\x3e\xe7\xf1\x1b\x95\xbb\x7e\xbe\xb7\xe8\x72\xa3\xeb\x60\x58\x08\x05\xb3\xa9\x59\xac\x2a\x1d\xc9\x54\x99\xe2\x8a\x1b\xb3\xcb\x14\x9c\x6e\x1a\xab\x5f\x10\xdc\x96\xfd\x73\xa3\xd4\xb8\xca\xf3\xde\xa2\xeb\x07\x3f\x8f\x29\x3d\xbb\x96\xbc\xe1\x1b\xea\xd2\xa9\xce\x96\xef\xd4\x98\x8e\xb4\x8e\x3e\x25\xd9\x90\x0f\x2f\x69\x97\x0e\x50\xf1\x7b\x71\x4b\x87\xd4\x14\x7b\xfb\xbd\xe3\xc1\x22\xf3\x4b\xf1\xbb\x5d\xa3\x3b\xcd\xa8\x44\x82\xda\x6c\x49\xa8\x33\x45\x16\x55\x17\xd4\x53\x46\xda\xcd\x4e\x0c\x22\x06\xf9\x16\x1e\x5b\x97\xe8\xb8\x46\xae\x27\x14\x79\x15\xe6\xf5\xc8\xd6\xf3\xed\xd5\xa0\x12\x09\xea\xb3\x25\x41\x62\x24\x11\xee\xfc\x93\x14\x10\xf3\x8e\x6b\xf3\xf5\xf1\x6f\x1c\xcb\x97\x57\x46\x4e\x96\x4a\x18\x1b\xb6\x2a\x25\xe1\x8f\x48\x89\xee\xca\x3c\x4f\x25\x12\x48\xb3\x25\x41\x66\x24\x31\x6a\xbb\xfd\x5d\x8b\xc9\x57\xce\xb6\x2d\x9e\x1c\xda\xfb\x37\x96\x5c\x39\xfd\x48\xf8\xb0\xcb\x5e\x76\x15\xdc\x51\xab\x5e\xed\x9b\xa8\xc1\x4b\x9e\x2d\x09\x0d\x26\xb0\x14\x91\x4e\x2b\xd5\x9b\x70\x5d\x65\xbe\x08\x91\xe2\xb6\xbd\xf6\xf9\xda\xa7\xa8\x80\x70\xea\xbb\x7b\xe9\x77\x57\xab\xf6\x6d\x3b\x4b\x25\x12\x34\x66\x4b\x62\x27\x23\x09\x3e\xb3\xe2\x9a\x28\x1e\x4a\xba\x48\xff\xfb\x62\xcd\x53\x32\xbb\xb7\xdf\xd2\x55\xfc\x20\x77\xf0\xfa\xdd\xf5\x72\x55\xef\xca\x5d\x16\x51\x89\x84\x9d\xb3\x25\xa1\xc9\x48\xe2\x52\x7d\xf2\xa8\x87\xfa\xa9\x06\x1c\xdf\xb9\x2c\x39\x6b\x59\xbf\x48\xfc\xc9\x88\x70\x8d\x1f\x59\xbf\xa2\x36\x7f\xc9\x4a\xb8\x8f\xda\xd4\x9a\xff\xcd\x1c\x60\x85\x37\x74\x21\xd2\x62\x9c\x4f\xd6\xca\xf1\xad\x5e\x9f\xc9\xf3\xfb\x37\x6d\x23\xcf\xa9\xe6\xf3\xdc\x56\xdc\x64\xf2\xcb\x33\xca\xdd\xa1\x7f\xa3\x62\xa4\x7f\x1d\x6a\xc7\x69\xcd\xf6\x95\xb5\x19\x49\x24\x73\x9e\x9d\x0c\xc3\x5d\xdb\x2d\xa0\xa7\xe5\x21\x6c\x3c\x7a\xa6\xfd\x69\xce\xe4\x9d\xbd\x9e\x29\x8e\x09\x5f\x8e\xf1\xb7\x9e\x52\xa6\x12\x09\xda\xb3\x25\xa1\xc3\x48\xe2\x5e\xa7\xed\xb8\xe8\x87\xe6\xf6\xcd\x85\xf1\x1b\x44\x45\x72\x6a\xde\xed\x5f\xfd\x73\x90\x22\xaf\x5b\x5f\xe4\xf4\x36\xe1\xf5\x33\x54\x91\xea\xcc\x96\xc4\x2e\x46\x12\x8a\x9d\xc2\x29\xcd\x16\xda\x87\xf4\x06\x04\xcd\xf0\x7e\xd6\xa5\x17\xab\x39\x6e\xc4\x6f\x9d\x47\xbc\x90\xf9\xf2\xd0\xea\x29\x73\x94\xc3\x77\xcd\x96\xc4\x6e\x46\x12\xe6\x6b\xb6\x69\x5e\xb9\x97\xe4\x73\x38\x20\x53\x7b\x77\xd8\xe9\x53\xbb\xbe\x5c\xfd\xf3\x34\xb4\xe7\x54\xba\x89\xc3\xde\xa4\xdb\x38\x63\x2a\x91\xb0\x7b\xb6\x24\xf6\x30\x59\x7f\x1f\xca\x9c\xac\x7b\x93\xd2\x49\xdb\x24\x64\x0c\x4c\x4a\x57\x9a\xda\x99\xa8\x3e\xb7\x48\x3d\x7c\x6b\xcd\xab\x45\x0f\xaf\xad\x44\x9d\x8f\x3d\xb3\x25\xb1\x97\x91\x04\xb7\x84\xe3\x81\xfe\x01\x9e\x72\x8f\x65\xd7\xa3\xcf\x75\x85\xd7\xef\x4d\x7c\xb9\x3f\x98\xc8\x55\x14\xf4\xbe\xbd\x59\x7b\xc7\xca\xfd\x54\x22\x61\xef\x6c\x49\xec\x63\x24\x11\x60\x70\xb4\xb4\xc8\x7a\x13\x8d\x7d\x7e\x8f\x8c\x79\x76\x58\x49\xb5\xec\x53\x69\xdc\x8a\xfc\x86\x80\x8f\xcf\x82\x1d\x3d\x4a\x56\x53\x89\x84\x7d\xff\x4d\x88\x58\x69\x62\xba\x10\xe9\x32\xce\xc7\xd5\x5c\x6c\xfb\x1a\x33\x4d\xef\x39\x85\x8e\xec\x1c\x53\x82\x95\x34\x09\xc3\xb3\xcf\xe3\x97\x0c\x6d\x38\xae\xfc\x39\xac\x4a\xff\x28\x95\x48\xd0\x9d\xed\x2b\xef\x67\x4a\x4c\x50\xd0\xc0\x9d\xfa\xdc\xb3\xcb\xc3\x95\x4d\xbf\x70\x83\x8a\x52\x68\x50\x2f\xed\xc6\xc5\x77\xeb\x8d\x07\x33\x3b\xf7\x2e\x65\x5b\x41\x25\x12\xf6\xcf\x96\x84\x1e\x23\x09\x85\xd8\xb0\xba\x90\xb6\xb5\xfc\x7b\xde\x73\x9c\xb8\xb8\x40\xf9\x0d\xdb\x35\xed\xa3\xe9\xc3\x8f\x79\x46\xb5\x6a\xf8\x7b\xae\x0a\xa1\xfe\x96\xde\x6c\x49\x1c\x60\x24\x91\x91\x48\x59\x49\x2b\x6a\x3a\xf3\x90\xff\x82\x74\xe7\x8d\xfb\x76\xb5\x4f\x2a\x27\x92\x27\xce\x88\xa8\x70\x37\x9a\x8e\x9b\x5c\x5b\x43\x25\x12\x0e\xcc\x96\xc4\x41\x46\x12\x5c\x97\xdc\xfc\xb4\x92\x32\x46\xd3\x76\xea\x6e\x73\xbc\x24\xfb\x63\xd9\xc3\x4b\x47\x5a\x3c\x7f\x19\x2a\x99\x3b\x0d\x78\x07\x1e\x46\xdf\xe2\xe0\x6c\x49\xe8\x33\x05\x7a\x79\x85\xda\x28\x95\xe2\x82\x3c\xc3\x69\x85\xc2\x2f\x15\x97\x72\x7c\xc9\x79\x7d\xb4\xe2\xca\x0e\x6a\x61\xce\x86\x05\x07\x56\x2a\x52\x89\x04\xfd\xd9\x92\x30\x60\x24\xe1\x30\xca\x36\xf4\x79\xbf\x5f\xdd\xd9\x9e\x34\xf7\x0b\x9e\x32\xd9\x8a\x31\xa2\x03\xb7\xb3\x28\x66\x5f\x34\x42\x2a\x28\x6f\xf0\xa8\x55\x60\x30\x5b\x12\x86\x4c\x27\xdd\x04\xe9\xe5\x4a\xdb\x1b\xaf\x90\x8a\x9e\xe5\xf5\x68\x68\x1d\x47\x32\xb4\xee\x85\x93\xd8\xb6\xe4\xa5\x4d\x44\xad\x5d\x5c\x2f\x49\x25\x12\x0c\xff\x9b\x10\xb1\xb2\x51\xe9\x42\x74\x88\x29\x3f\xc1\xef\xc0\x99\x04\xff\x37\xa5\xa9\x75\x23\xc1\xc6\x97\xe2\x3e\x72\xf6\x0d\x28\xc6\xde\x99\x4b\x91\x8c\x78\x97\x5a\xfb\x63\x10\x35\xe7\x0e\xcd\xf6\x95\x8d\x18\x49\x0c\x45\x2d\x6a\x8b\x3b\xe1\xde\xcd\x5b\x6c\x31\xe2\x63\x9d\xd0\xc1\x8b\x5f\x7f\xa3\xc6\x67\x7f\xc6\xda\x9c\x01\x24\xcf\x9e\xff\x12\x95\x48\x30\x9a\x2d\x89\xc3\x4c\xc1\xc5\x08\xb9\xc1\x7e\x17\xd2\xe7\xe3\xc7\xae\x51\x95\x49\x57\x39\xdc\x7d\x96\x9e\x4b\xe6\x08\xd0\x8a\x29\xcc\x38\xba\x52\x3e\x75\x0e\x95\x48\x38\x3c\x5b\x12\x47\x18\x49\xe0\x8e\xf3\xc8\x24\x95\xbd\xba\x78\xa3\xd0\x3a\xf5\x1e\x41\x37\x46\x63\x4d\xd6\x69\xb7\x2e\xf7\x3d\x11\x7c\xb4\xa4\xd8\x9d\xdb\x51\x7d\x7a\x64\xb6\x24\x8e\x32\x92\xb0\x7f\x93\x7b\xd1\xf3\x60\x51\x6d\x86\x29\xa7\xa3\xd2\xfc\x65\x91\x0b\x73\xbd\x5d\x36\x75\xbd\x59\x39\x3c\xa7\x6b\xfe\xe2\x25\x1b\xf7\x50\x89\x84\xa3\xb3\x25\x61\xcc\x48\xc2\x4b\x48\xad\x4b\xf6\x7b\xb0\xbb\x8c\xda\x93\x33\x7f\x9a\x06\x27\x1b\xce\xbf\x2f\x40\xf6\x7e\x38\xfe\x54\xbf\xc9\xed\xd7\x66\xfe\x65\x54\x22\xc1\x78\xb6\x24\x8e\x31\x79\xf0\x17\x45\x5a\x53\xe5\x76\x48\x5c\x2a\x98\xd4\x1c\x4f\x78\xba\x6b\xde\xd0\x46\x4b\xc5\x77\x7d\x31\x77\x1e\x67\x26\x73\xad\x1c\x11\xa5\x12\x09\xc7\x66\x4b\xe2\x38\x23\x89\x6a\x5c\xf8\x03\xef\x80\x7c\x9b\x4e\xe5\x66\xdb\x2f\x2d\xc9\xd9\xcf\xdf\x69\xda\x34\xee\x37\x36\xb3\xfc\x9c\x54\x7d\x49\x8b\x28\x44\x25\x12\x8e\xff\x37\x21\x62\xe5\xbd\xd1\x85\xc8\x84\x71\x3e\x93\xa3\x3d\x0a\xda\x9e\x56\x85\x3b\xbd\xc7\xa2\xe5\x33\x3f\x35\xeb\xab\x5e\xe5\x90\xcd\xf2\x55\xde\x5a\x79\x76\xdb\xc0\x06\x7f\x54\xf9\x9a\xcc\xf6\x95\x4f\x30\x92\x18\x9e\x38\x18\xe4\x77\x3e\xf6\xde\x72\x6b\xf7\x2e\xe7\xb5\x16\xce\x7e\x69\x7d\xe3\x71\x3a\x1f\xa9\xf6\xd4\xbd\x9b\x37\xb9\xe4\xa8\xfe\x3f\xce\xee\x3b\x1e\xcb\xf7\xff\x1f\x7f\x67\xae\x33\xab\xcc\xc8\x41\x11\x65\x64\x8f\x90\x99\x55\xc9\x28\xc9\x08\x19\x45\x36\xd9\xa3\x90\xb3\x14\x51\x0a\xd9\x2b\xd9\x3b\x14\x42\x46\x19\x19\x95\x95\x99\x91\x51\x32\x32\xb2\x33\x7e\xb7\xeb\xf3\x7b\x79\xdf\xba\xce\x7f\x7c\xcf\xfe\x3f\x6e\xb7\xc7\x79\x5c\xd7\xf9\x3c\xd6\x79\x5e\xd7\x1d\x01\xb8\x6b\x58\x23\xae\x13\x46\x14\xbf\xbb\xe9\xe0\x78\xf1\x6c\xec\x7b\x4d\xa4\x60\xea\xdd\xb3\x7e\x9e\xc2\xcb\x69\x42\x2d\xd7\xda\x46\x5f\xa4\x4b\xf5\xc7\xff\xe2\x42\x00\xee\x3a\xd6\x08\x53\xc2\x88\x76\x4b\x9d\x9f\xc7\x2d\x06\xda\xf7\xa6\x9e\xda\x5f\xb6\x27\x41\x2d\x23\x38\xd9\xd6\xda\x4f\x77\x7b\xed\x01\x0b\xd8\xcc\x39\x89\xaf\x53\x53\xac\x11\x66\x84\x11\xca\x13\xe3\x9d\x7e\x8c\x21\x8d\x1d\x06\x16\x27\x5c\x19\x23\xbf\xb6\xae\x2a\x5f\x67\xb1\x5c\xa0\x76\x1b\x73\xfb\xb5\xb5\xf2\x8c\x1c\x01\x38\x33\xac\x11\x37\x08\x23\x5a\xc6\xbf\x33\x1a\x9a\xcc\x1d\x15\xde\x7b\x8d\xc3\x58\xb1\xa0\x33\x7c\x43\x91\x05\xd1\x5a\x4f\x34\x6c\xe4\x71\xa6\x62\x0a\xc5\x0f\x05\x37\xb0\x46\x98\x13\x46\x1c\x36\xe2\xfa\x15\x4c\xd5\x01\x4f\x11\x31\xa4\x68\x3c\xeb\xa1\x42\xbe\xa7\x9e\xe9\x7a\xff\x2e\x07\x3e\x29\x17\x21\xfc\x74\x4e\x18\x01\x38\x73\xac\x11\x16\x84\x11\xe1\xbe\x2d\xc6\x16\xda\xdb\x51\xf3\x71\x47\x56\x0a\x4f\x14\x48\xde\x56\x15\xdc\xf7\xa0\x6e\x38\x91\x45\xa8\xb8\x65\x94\x96\xc9\x18\x01\x38\x8b\x7f\x2b\xa2\xdd\xce\x35\xfe\x2b\x22\x4b\xc2\xeb\x01\x47\x2f\x21\x47\xf7\xaf\x77\xf8\x14\xc8\xaf\x0f\xd2\xb9\xc6\x9b\xdc\x68\xfa\xe1\x4c\x29\x33\xf8\xea\xc8\x4d\x63\x87\x54\x18\x3f\x4d\x58\x62\xed\xb2\x15\x61\x84\x4c\xb3\x9b\x92\x6b\x5d\xc7\x48\xf8\xd5\xef\x44\xa6\xe9\xa1\xf5\xcf\x7f\x34\x59\x54\x86\x1c\xa4\x39\x14\x55\x7c\xcb\xd0\xc0\x0e\xbf\x25\xb7\xc2\x1a\x61\x4d\x18\x31\x46\x3c\x6c\xfb\x0e\x06\x14\x94\x53\x7f\xca\xfd\x5c\xbf\x71\x59\xf9\x89\x8e\x52\x59\x1c\x7d\xd7\x71\x8e\x4a\x3b\x61\xdf\x16\x7e\x91\x6c\x8d\x35\xc2\x86\x30\x82\x2e\x36\x1d\xfe\x73\x59\xe7\x84\x1c\xa9\x4d\xfc\x52\x45\x3c\xa5\x61\x71\x8c\x88\xe6\xd7\xc0\x44\xba\xcd\x9b\x67\x22\xdf\x2e\xe3\x37\xb3\x36\x58\x23\x6c\x09\x23\xc2\xae\xa8\x15\x8f\x5c\x5e\x6e\xe9\x5f\xe9\x18\xda\x77\xfc\x4f\x19\x8e\xc3\x99\xba\x8b\x61\x5f\x70\x40\xa7\x2e\x73\xac\xb5\x1b\x7e\xd7\x6f\x8b\x35\xc2\x0e\xf5\x0a\x4f\x1b\xd7\xfa\x83\xb5\x4b\x49\x0c\x5b\xe2\xc1\xc9\x6b\x17\x5e\x0c\xf6\x27\x2e\x15\xb0\x29\x45\xb3\xa8\xb2\xcb\x32\x9d\xf0\x12\x47\x00\xce\x0e\x6b\x84\x3d\x61\x84\x43\xe6\xd5\x13\xce\x1e\x4f\x99\x5f\x4b\x31\xca\x2b\x94\x77\x8a\x54\x9f\x24\xdb\xdf\xf9\x89\x61\xf6\x81\xa5\xad\xfc\xf3\xa7\x37\x4c\x10\x80\xb3\xc7\x1a\x71\x93\x30\x02\x69\xfb\xb0\xb9\x27\xf3\x66\x65\xa8\x41\xee\xbd\x02\x0a\x9a\xf2\xd6\x76\x90\xcf\x26\x39\x99\x55\xa9\x63\x70\x8f\xcd\xdc\x5e\x1e\x01\xb8\x9b\xff\x56\x44\xbb\x9d\xf8\xfd\x57\x44\x0e\x84\xd7\xa3\x6a\x93\x99\xba\xfe\xfa\xab\xd1\x6b\x29\x12\x56\x0e\x30\xd4\x9a\x1a\xdf\xf0\x30\x5a\xa0\xe7\xb3\x1f\x71\x87\x0a\xaf\x00\xf1\x65\x04\xe0\x1c\xb0\x76\xd9\x91\x30\x62\x88\x39\x51\x74\xa8\xcb\xb3\x56\xc6\xf9\xf1\x4d\xaf\x12\xe3\x6b\x7c\x8b\x9f\x72\x6e\x98\x8d\xef\xd9\xb3\xe7\x6d\xb8\xc4\xf8\x57\xfc\xbd\xe1\x88\x35\xc2\x09\xf5\x62\x94\xf1\x24\xf5\xe3\x67\x9c\x41\x09\xcc\x54\x4b\xc3\x7a\x67\xe4\x79\x68\xbb\xaf\x6a\x3a\x5f\x3a\x59\x99\x45\x45\xbb\xea\x2b\x89\xbf\xc3\x9d\xb0\x46\x38\x13\x46\x68\x19\x3b\xb3\xab\x84\x6f\xad\xce\xf9\xb2\x49\x7e\x5a\xf3\xcf\xb4\x09\x77\x20\xee\x20\xb5\x9a\x1a\x71\xf7\x55\x68\xd9\xd2\x84\x10\x80\x73\xc6\x1a\xe1\x42\x18\x21\xe7\xf8\x3b\x22\xc0\x7d\x56\x37\x3c\x94\xdd\xbc\xbb\xd2\x86\x32\x27\x94\x73\xdf\xa9\x13\x0a\x2d\x61\xae\x3f\xcf\x0e\x87\xc4\xe0\x57\x05\x2e\x58\x23\x5c\x09\x23\xde\x8f\x9c\x6e\x22\x2d\x60\xcb\xec\x7f\x6a\xd7\xcb\xf6\x69\xcd\x99\xc3\x25\x7c\xf6\xcc\x4d\xfe\x85\xb5\x2b\x8e\x07\x87\xee\xa4\x18\x22\x00\xe7\x8a\x35\xc2\x0d\x75\xc6\x58\xe5\x23\xf3\x59\x23\x20\x5d\xf7\xae\x6f\x5e\x76\xd6\xef\x39\x57\xcb\x9e\xf8\x80\x6f\x97\xea\x2a\x7e\xf9\xea\xcd\x6a\xba\x52\x21\x00\xe7\x86\x35\xc2\x9d\x30\xa2\x43\x67\xd2\x7b\xc0\xf8\x27\xd3\xa1\x26\x2f\x21\xc5\xe1\x09\xe6\xb3\x5e\xfb\x66\x42\xfa\x16\x83\x52\x95\x2a\x89\xfe\x88\x6a\x51\x23\x00\xe7\xfe\x6f\x45\xb4\xdb\x59\xf8\x7f\x45\xe4\x41\x78\x3d\x76\x77\xd5\x38\xbe\x5e\x2a\x07\xd7\xf6\xb8\xbd\x2a\x1f\xe8\x29\x28\xd9\x6e\x2c\x68\x24\x67\x3e\x7d\x4d\xc5\x6a\x51\x4a\xc0\x1f\xbf\x99\xf5\xc0\xda\x65\x4f\xc2\x88\xcf\x5f\x7a\xb3\x2e\xc0\xc4\xe3\x76\x3a\x2f\xe2\xec\xb5\x43\x06\x9e\xc6\x3a\x9c\xbc\x4f\xb6\xaa\xe7\xf2\xe2\x87\x3e\xd7\xcb\x6f\xd2\x08\xc0\x79\x62\x8d\xb8\x85\x7a\x58\x27\x67\x27\xe3\x68\x12\x2b\x97\x34\x6a\x7d\xa9\xdb\x8a\x22\xe7\xd1\x1e\x5e\xee\xfb\xb8\x30\x51\xbd\xe9\xaa\xb4\x8b\x97\x78\xf0\xa3\xdf\x2d\xac\x11\xb7\x09\x23\x2e\xea\xf0\x93\xc7\xd8\x1c\xbf\x3d\xd6\xcd\xe5\x6f\xc1\xfa\xb0\xf9\x6d\x0c\x67\x40\x70\xd7\xa0\x85\x37\xab\x5d\x72\xf4\x89\x11\x1e\x04\xe0\x6e\x63\x8d\xf0\x22\x8c\x50\x27\x57\xb8\x6c\x9b\x39\xb9\x99\xbd\x78\x3c\xd9\xe7\xc4\xe6\x67\x24\xbe\xc2\x7c\xca\x7e\x95\xd3\x90\xbc\xd6\xbf\xe7\x27\x35\x7e\x3e\xf5\xc2\x1a\xe1\x8d\xda\x4d\x2c\xb8\x8b\x98\x2d\xf2\x4e\xb3\xdc\xef\x51\x3c\x68\x41\xd6\xbd\xd7\x46\x61\x6b\x4f\x7a\x7c\xb5\x9e\x96\x55\x27\x03\xa7\x28\x7e\xcc\xf4\xc6\x1a\xe1\x43\x18\xb1\x98\x27\x66\x9e\x32\x08\x37\x9c\xe0\x62\xe3\x14\xb8\xfc\xcd\xcd\x18\x67\x66\x6b\x9f\xba\x9c\xc1\xea\x25\x3d\xcc\xa7\x78\x9f\x0d\x01\x38\x1f\xac\x11\x77\x08\x23\x3c\x3e\x04\x70\x4d\x76\xc8\x39\x77\x65\xe0\xa6\x9f\x47\x75\x32\x96\x8b\xf2\xfd\x64\xb2\xe0\x17\x0d\x52\x2d\xe0\xd0\x0c\xfa\xae\x8c\x00\xdc\x9d\x7f\x7b\x58\xb7\xdb\x2f\x08\x51\x0f\xeb\x26\xaa\x37\x1d\x6d\x97\x4e\xee\x8b\x75\xf9\xfe\xb0\xbf\xd3\x44\xf3\xdb\x19\x65\x21\xed\xd4\x3b\xd4\xa4\x9f\x48\x46\x75\x5b\x57\x65\xfe\x6a\xfa\xa8\x86\xbd\xaa\x35\x88\xf6\xbd\xc7\x8b\x73\xa6\x70\xb2\xa2\x6c\xaa\x69\xe9\x92\xd5\x9b\x53\x6d\x5e\xa6\x5f\x34\xed\xce\xf3\xa4\xfe\xd5\x94\x59\x9b\xad\x42\xa5\x28\x6b\x5a\xc0\xd1\x32\xec\xf3\x5b\x9d\xcf\xae\xd6\x59\x5a\x42\xa7\x96\x6f\x1c\x9f\x0c\xaa\x15\x9b\xf0\x8a\xfe\xab\xa9\x84\x28\x9f\xd8\x85\xdc\xb0\x94\x00\x8e\xfd\xae\x7a\x92\x87\x56\x07\xa4\x16\x56\xd9\x10\xef\xb1\x4f\x47\xce\x98\x09\x52\x24\x07\xfe\xd5\x34\x93\x8a\xc8\xf6\xe7\x21\x3a\x21\x1f\x7d\xba\x0f\xa6\x99\xc2\x1e\xd0\xb4\xc5\xc9\x80\x9f\xa4\x8a\xb7\xec\xae\x6b\xe8\xc6\xad\xfc\xfd\x5b\xb7\xe2\xd1\x69\xc8\x54\x0a\x2e\xaa\x9d\x14\x55\x15\x0a\x6b\x59\xd1\x91\xcc\x99\x66\xa4\x31\x34\x10\x38\xae\x20\x48\xca\x9a\xde\xfc\x57\xd3\xd5\xa7\xd5\xd9\xcf\xfc\xad\x13\x0e\x36\x3e\x49\x80\x9e\x65\x9d\x5e\x58\x2e\x7b\x27\x63\xd7\x51\xb5\xae\x77\xb8\x37\x57\x90\xcb\xfa\x6f\xd8\x31\xa9\xf6\x00\xc2\xaf\xb0\x57\xa1\x20\xfe\xd5\x17\xfd\xb3\x92\xa7\x8e\x24\x85\xde\xb5\x62\x5a\x48\x95\xfe\x1c\x16\x42\x1a\xb8\xf2\xbf\x87\x75\xbb\x7d\xaa\xff\x8d\x64\xbe\x84\x37\x45\xfd\x69\xe5\xbd\x47\x3f\xdf\xc9\x78\xf1\xca\xee\x88\xdb\x1d\xf2\x81\x88\x4a\xed\xea\xf4\xa8\x35\x6a\xc3\x6f\x86\x5a\x6f\xfa\xcc\x55\x11\x80\xf3\xc5\x7a\xdf\x21\x84\x11\xfb\xa8\x3d\x6c\x4e\xf2\x92\x77\x78\xb5\x89\x51\xbe\xbc\x12\xa0\x76\x8e\xc9\xcb\xa5\x32\x50\x54\xef\xbd\xf5\x43\xf5\x5b\xe4\xec\xb2\x08\xc0\x21\x58\x23\xee\xa2\xb6\x74\xf7\xb9\x48\xa0\xaf\x09\x33\x66\x52\xd3\x91\x45\xf4\x12\x17\x65\x82\x79\x36\x10\x91\xc9\x0c\xee\xb0\xad\x9a\xe2\xb6\x63\x06\x08\xc0\xdd\xc5\x1a\x71\x8f\x30\x42\xb3\x47\x32\xf4\x5c\x6b\x2a\x37\x99\xd3\xb7\x3b\xa2\x9d\x64\x56\xb7\xb2\x73\xa7\x17\x0a\x16\xb7\xdf\xef\x11\xff\x3e\x2c\x3e\x7e\x0e\x01\xb8\x7b\x58\x23\xfc\x50\xbd\xf0\x12\xd8\x1f\x92\x42\x21\xd2\x30\x2e\xee\x69\x79\x43\x37\xed\xf5\xeb\xbc\x86\x98\xc3\xbf\xa8\x68\xa5\x1c\x18\x9d\xf6\xd9\xe1\x87\x7c\x3f\xac\x11\xf7\x51\xef\x5f\x92\x6e\xae\x45\x1d\x31\x1c\x32\xbf\xe3\x5a\xe4\x27\x42\xa6\xd3\x61\xa6\x71\xbc\x5f\xbc\xef\x9c\x65\x62\xcb\x0f\xfb\x5b\x8d\x34\x08\xc0\xdd\xc7\x1a\xf1\x80\x30\x22\xa5\x4a\xff\xbc\x5c\x34\xbd\xca\x0f\xd5\xe0\x86\x22\xb8\xd7\xcf\xe2\x50\xcb\xfc\x32\x29\x4d\x3c\xa9\xfa\xc2\x14\xd3\x25\x06\xfc\xc6\xf4\x01\xd6\x08\x7f\xd4\xce\x60\x74\xfd\x4c\x78\x70\xf3\x85\x3b\xb8\x58\xcb\xcc\xcc\xc0\xec\x3b\x57\xc8\xee\xfb\xef\x1f\x39\xfa\xd9\x45\x74\x9f\x5f\x50\x22\x7e\x23\xe8\xff\x6f\xcb\x81\xdd\xc6\x9b\xff\x8a\x28\x80\xf0\x7a\x9e\x45\xc6\x57\x0b\x53\x85\xd4\xc8\x07\xb0\x99\x29\x58\xef\xf9\xcc\xf1\xfd\x16\x53\x66\x41\xdc\x22\x93\x25\xbb\xa6\x9e\xf1\x63\x07\x04\xe0\x02\xb0\x76\xf9\x21\x61\x44\x56\x77\xc0\x27\x4d\xc6\xb8\x6f\x6f\x57\x68\x0a\x53\xdd\x8f\x35\x2a\x11\x7f\x9b\x1a\xc8\x94\x9b\x08\x5a\x60\x78\x2f\x21\xd1\x78\x1a\x01\xb8\x87\x58\x23\x02\x09\x23\xc4\x9c\x4f\x3d\xa4\x31\x49\xdb\xa7\x47\x3b\x6b\x16\x9f\xfa\xb5\x84\x53\xb6\x27\x86\x4e\x4c\x35\xde\x21\x54\xf9\xa8\xc0\x57\x49\xfc\x7e\x2b\x10\x6b\x44\x10\x6a\xae\xf6\x52\xbc\xe6\xc2\x1c\xc3\xfa\x22\xe2\x80\x5b\x36\x9b\x94\xe5\x12\x95\xd8\x77\xe2\xf6\x2d\x0d\x75\xdd\xe5\x28\x3b\xe5\x5c\x2b\x04\xe0\x82\xb0\x46\x3c\x42\x3d\xf3\x29\x24\xcb\xbc\x5d\x5f\x9a\x62\x75\xe4\x5b\xe2\x2d\x45\x9f\x58\xb6\x2c\x29\xc7\x1b\x66\xfa\x3d\xc5\xc5\x56\xee\x74\x0d\x46\xf8\x45\xcd\x23\xac\x11\x8f\x51\xaf\x06\x3c\xd5\x58\x6c\x67\x69\x8e\xb7\xa9\xdd\x8c\x60\x8f\xb9\xc3\x29\x94\x6b\x57\xf7\x8c\x8a\x56\x80\x32\xe3\xe6\xeb\xe8\x1b\x16\x4c\x08\xc0\x3d\xc6\x1a\x11\x8c\xda\x98\xee\x39\xc7\x3f\x71\x3c\xe3\x4c\x61\xda\x45\x3a\x33\x24\x3b\x76\x29\x9f\x6d\x2d\x75\x3a\x94\x85\xdf\xdb\xd0\x53\x20\x9f\xe9\x10\x02\x70\xc1\x58\x23\x9e\xa0\x7e\x76\xa4\x7f\x84\xad\xbf\xc9\x4f\xbc\xb8\xe4\x69\xab\xe6\xf9\xf6\x11\x63\x23\x5b\xed\x3b\xa4\xea\xe9\xcd\x67\x37\x1f\x53\x1e\x4f\x20\x43\x00\xee\xc9\xbf\x15\xd1\x6e\x33\xf1\x7f\x45\xf4\x94\xf0\x7a\x4a\xaa\x78\xf5\xe6\x86\x2d\x48\x6d\xdc\xe8\xab\x95\x12\x43\xfb\x2f\xa4\x7b\xab\xb4\x3c\xdf\xa0\x3c\xbe\x2f\xd6\xb5\x62\x3a\x00\x20\x00\xf7\x14\x6b\x97\x43\x08\x23\x28\xcb\x1f\x0d\xd4\xeb\x8c\x3d\xbe\x35\xaa\x7a\xd9\x83\x28\xd9\x11\xa7\x96\xd4\x5a\x98\xcd\x73\xd3\x6c\xd2\xf6\xb9\xc4\xe3\x60\x52\x04\xe0\x42\xb0\x46\x84\x12\x46\x10\x17\x5c\x25\xa2\x11\x29\x7c\xb4\xe6\x9b\xe1\xe2\x48\xd9\xe3\xfc\xe0\x43\xae\xa3\xb9\xbf\xc6\xfc\xac\xbd\xbf\x47\x96\xac\x8f\x24\x02\x70\xa1\x58\x23\xc2\x08\x23\x68\xd4\xcf\x6d\x53\x64\xae\x0b\x11\x6d\x33\x47\x39\x06\x29\x84\x4c\x9f\xb4\xc8\xc1\x9d\x01\xbc\xdd\xf2\x0e\x10\xdb\x03\xf7\xa3\x08\xc0\x85\x61\x8d\x78\x86\xda\x19\xe0\xb8\x29\xa4\x2d\x7c\x54\x64\xd9\x18\x9b\x14\x54\x18\xbd\x06\x83\xe9\x1b\x44\xce\x30\x3d\x56\x6b\xca\xce\xe1\xfb\xe9\x61\x8a\x00\xdc\x33\xac\x11\xe1\x84\x11\xf6\x6b\x17\x96\x9e\xac\xe8\x07\x25\x27\x86\xd3\x9f\x92\x7c\x3b\x3a\x4d\xed\x9d\xa5\x08\xbd\x89\xf9\x58\x6f\xf6\x43\xfb\xdd\x3c\x7e\x63\x1a\x8e\x35\x22\x82\x30\xc2\x76\xab\xd6\x63\xd8\x97\x66\xcc\x59\x63\x9c\x91\x5d\x39\x22\x6b\xdc\x20\x91\x2d\x5a\xe4\x72\xea\xd6\xab\x18\x72\xfb\xe0\x46\xfc\xce\x20\x02\x6b\x44\x24\xea\xb1\x52\x84\xc3\x9a\x0a\xd1\x85\xca\x76\xf9\xda\x8c\xee\xee\x57\x2c\xd5\xeb\xcf\xbc\x6f\x9a\xc9\x6e\xbb\x7c\xb2\xc8\xd1\xf9\xe5\x84\x1f\xf9\x23\xff\xad\x88\x76\x5b\xa3\xfe\x57\x44\x51\xa8\x13\xfa\x21\x8b\xc1\x54\xf1\x81\x41\x17\x23\x1a\x64\x4f\x1e\xbd\x82\x6d\x66\x6c\x99\xc4\xd8\xc2\xfe\x13\x23\x3c\xbf\x72\xb7\x15\x19\x11\x80\x8b\xc2\xda\xe5\x68\xc2\x88\x8f\x26\xcc\xaf\xaf\x39\xf7\x5b\xb4\xc5\x37\x11\x75\xd7\xa6\x88\xb2\x14\x59\xbb\x13\xcb\xd9\xc3\x5e\x6e\xbe\xfb\x79\x2e\x58\x1d\x46\x00\x2e\x1a\x6b\x44\x0c\x61\x44\x82\xf7\xda\xc3\xaa\x7c\x07\x36\x5a\x5c\x39\xaf\x1e\x45\x39\x69\x11\xdf\x6c\x4e\x52\xcc\x41\xd1\x8f\x97\x7b\x5d\x65\xef\xbb\xe2\xa7\x89\x18\xac\x11\xb1\xa8\xcd\xd0\x6a\x80\x9f\x80\xb6\x6d\x27\xb1\xf3\x04\x85\x45\xd9\x10\x95\x45\x4a\xae\xd9\x91\xab\xd0\x27\xa3\xe5\xa8\x67\x69\xd9\xf9\xc7\x10\x80\x8b\xc5\x1a\x11\x47\x18\xb1\x20\xf9\xfa\x50\xb6\x96\xfa\x21\xd5\x73\xc7\x79\x4c\xbf\x41\xc7\xbd\xbe\x27\x30\xf5\xb3\x51\x17\xdb\xaa\x1f\x90\x5e\x1f\xcd\xb3\x44\x00\x2e\x0e\x6b\x44\x3c\xea\xed\x83\xb6\x1f\xde\x07\x9b\x2c\x1b\xcc\x3f\x55\xc6\x7c\x69\xe1\x13\x70\xcf\x3e\xb4\xec\x54\xa9\xef\xef\xe1\x49\x25\x7e\x6f\x88\x87\x1b\x01\xb8\x78\xac\x11\x09\xa8\xaf\x9b\x8f\xd9\xc2\xe5\xce\x8f\x65\x1e\xc7\xfc\x6d\x9e\xaa\xe7\xa1\x42\x4e\x2e\x81\xb9\x57\x18\x9d\xce\xb3\x22\x11\x5b\x6a\x0b\xf8\xef\x22\x01\x6b\x44\x22\xea\x34\x45\x5a\x5e\x43\xe0\xc8\xcb\xf3\xcf\x55\xe6\x23\x3b\xaf\xd0\xc6\x93\x73\xaa\x78\x51\x13\x8d\x9c\xbb\xc2\x6e\xd0\x75\x25\xc6\x03\x3f\x14\x24\xfe\x5b\x11\xed\xb6\x7b\xfb\xaf\x88\x9e\x13\x5e\xcf\xb2\xfe\xa5\x0a\x6a\x7b\xa7\xce\x16\x5d\x2a\x87\x0f\x38\xa3\x85\x57\x6c\x7b\x70\x9f\x95\x5b\x33\xae\x33\x49\xfd\xd2\x73\x4d\xc4\xef\x89\x9e\x63\xed\x72\x12\x61\x84\x64\x64\x8b\x35\xd7\x85\xc6\x38\x19\x96\x5a\xc1\x00\x5d\xc6\x68\xde\x14\x55\x1b\x46\xde\x83\xac\x57\xa9\xec\x7e\xaf\x1d\x54\xe6\x47\x00\x2e\x09\x6b\xc4\x0b\xd4\x5b\x4b\x0b\x91\x74\x54\x35\x95\x77\x2a\xd7\x46\x71\x77\xe8\x4a\x9d\xd6\x6e\xdd\x3a\x42\xca\xac\xbf\xe7\x8f\xe7\x7d\x1e\x7f\xf3\x25\x1d\x04\xe0\x5e\x60\x8d\x48\x26\x8c\xf0\xf7\x6f\xab\x70\x5d\x66\x7c\x31\xc0\x4f\x5d\x2d\x9f\xe3\x18\xff\x9d\xf7\xa7\x40\x01\x7d\xa4\xfa\xeb\xb4\xda\x13\x39\x3c\x5f\xf0\x03\x6c\x32\xd6\x88\x14\xd4\xf1\xf9\xb1\xe9\x83\x81\x87\xae\x3f\x3f\xcc\xff\xe3\x1c\xff\xc1\x03\x23\x74\x1a\x15\xaf\x7a\xde\x2e\xbf\x3b\x7c\x7a\xe6\x43\x6c\x99\x0b\x3e\x22\x05\x6b\x44\x2a\x61\x04\x6f\x50\xce\x9e\x9a\xd5\xc6\xae\xbd\xa5\x5a\x47\x9b\xd4\x49\x2e\xf2\x90\x7d\x72\xf5\x55\xe5\x22\x9b\xa4\xd2\x6f\xf5\x12\x76\xc5\x17\x51\x2a\xd6\x88\x34\xd4\x29\x6c\xa4\x6e\x8a\xe8\x42\x4e\x94\x6d\xc0\x76\xb5\xdb\x7d\xb5\x33\x0a\x86\x2e\xdd\x45\x5c\x0d\x2c\x94\x1a\x64\xa7\xb6\x69\x0d\xf0\xcb\xb9\x34\xac\x11\xe9\x84\x11\xb9\xbd\xad\x01\x35\xce\x35\xd9\x8d\xf7\x89\xe4\xf8\xc8\x65\xae\x93\x31\x2e\xb8\xdd\x06\x6c\x54\xd4\xd7\x2b\xd2\xeb\x99\xa3\xe8\x11\x80\x4b\xff\xb7\x22\xda\xed\x5c\xe3\xbf\x22\xca\x40\x2d\x92\x9f\x0b\xaa\x6a\x2e\x06\x51\x7d\x2e\xa8\x8c\x55\x2c\xba\x15\xe5\x3a\x2b\xb0\x61\xe5\x1e\x52\xa7\x70\x8d\xde\x99\x49\xb2\x13\x3f\xfa\x65\x60\xed\x72\x26\x61\x04\x43\x51\x9a\xee\x6d\xfe\x4a\x8e\xc7\x47\x1f\xbe\xfb\x65\xa5\x50\xbe\xb5\x91\x90\x79\xd9\x77\xe4\xb4\x15\x3b\xa7\xb0\x17\xf7\x94\x32\x02\x70\x99\x58\x23\xb2\x50\x2f\x46\xd9\xc8\xbc\x79\x38\xc2\xe6\xa7\xdc\x45\x39\x76\x71\xd9\xf7\x1d\xaf\x94\x9c\x3d\x75\x9a\xda\x59\xae\xb2\x7c\xbe\xa3\x2d\x81\x8a\x08\xc0\x65\x61\x8d\xc8\x26\x8c\x38\x2a\x1a\xc7\x30\x91\xf7\xac\xbd\x91\xe7\xac\x09\xdb\xfd\x33\xc4\xad\x0f\x56\x9e\xe4\x27\x53\x0c\x55\x94\x1a\x44\x3a\x98\x7f\x35\x46\x00\x2e\x1b\x6b\x44\x0e\x61\xc4\xbc\xf8\xeb\xeb\xf3\xdf\xc5\x6e\xdd\x7f\xa2\x37\xaf\x98\xf0\x6d\xf2\xea\xec\xa5\xf3\x9a\x15\x41\xb1\x27\xc8\x59\xe4\xe3\xf6\x50\xb1\x20\x00\x97\x83\x35\x22\x17\xf5\x8a\xee\x09\x09\x1a\x8d\x36\x66\x67\xca\x48\x97\x7a\xf3\x98\xd9\x07\xe1\x94\xc6\x85\xc2\xf6\x25\xf5\x06\x79\x5e\x83\x21\xb5\x4a\xec\x08\xc0\xe5\x62\x8d\xc8\x43\xfd\xcc\x6c\xa5\x71\xce\xd7\x26\xa1\x3e\x8a\x3a\xcb\xd2\xa7\x85\x91\x45\x33\xe0\x2e\xb7\xb7\xfe\xaa\xe1\x97\x2d\xd7\x78\xdf\x4b\x90\x1e\x02\x70\x79\x58\x23\xf2\x09\x23\x84\xd7\xea\xfd\x43\xfb\x39\x86\xde\x52\xaa\xc8\x7d\x08\xbe\x44\x7f\x3c\xce\x24\x7d\xdf\x1d\xda\xf8\x8c\x7d\x7b\xd6\x11\x66\x15\xfc\xba\x37\xff\xdf\x8a\x68\xb7\x13\xbf\xff\x8a\xe8\x25\xe1\xf5\xfc\x3e\x40\x5a\xd5\xa8\x6b\xe6\x7a\x18\x5c\x39\x5e\x6c\xfa\x86\xd7\x49\xfe\x53\x83\x88\x7b\xf5\x9e\x8b\x9b\x1e\x97\x22\x58\xe7\xf0\x6b\xad\x97\x58\xbb\x5c\x80\x3a\xae\x49\x3f\x30\x93\xf7\x55\xa4\x66\x3d\x35\xce\xe3\x61\x8e\x2d\x85\x6e\x10\xe7\xe2\x71\x2d\x89\xb6\xd1\xcb\x0b\xb2\xc1\x52\x24\x97\x11\x80\x2b\xc0\x1a\x51\x48\x18\xb1\x57\x5a\xc0\xfb\x25\xe5\x4b\x22\xe6\x73\x32\x4a\x7d\x4b\xb0\xe6\x6d\x9b\xe6\xf7\x44\x63\x05\xad\x61\x34\x73\x87\x9e\x59\x1c\xc6\xd7\x69\x21\xd6\x88\x22\xc2\x88\xcb\xac\x9a\xe6\x02\x3f\xd4\x27\x57\x2c\x12\x7a\xb5\x39\x9e\x33\xb0\xf5\x86\x1f\xf3\xf7\xab\x7b\x3a\x34\x6d\xb5\xee\x9f\x7c\xfd\x20\x02\x70\x45\x58\x23\x5e\x11\x46\x70\x42\x8c\x19\xb7\x93\x48\x25\xb7\x56\xe4\x6f\xdf\x95\xf0\x94\x27\xfe\xd8\x36\x10\x76\xa6\x74\xfb\x60\x7d\x49\x7f\xc9\x04\xf5\x75\x04\xe0\x5e\x61\x8d\x78\x8d\x7a\x70\x2a\x2e\xb8\xe4\x2e\x50\x4c\xd7\x67\xb5\x7f\xbf\x8a\x29\xd1\x7c\x62\x9d\xa4\xac\xa1\x7e\xcb\xc9\x57\x2e\xd4\xcb\xee\x27\xa5\xd9\x10\x80\x7b\x8d\x35\xa2\x98\x30\x82\x28\x14\xa1\xbe\x79\x75\x95\x57\x36\xe1\xc9\x97\xde\xc5\xe0\xc0\x93\x51\x86\x19\x0b\x59\x2c\x55\x57\x5b\xdd\xe5\xe2\x8f\x5c\x3d\x8b\x00\x5c\x31\xd6\x88\x12\xc2\x08\xef\x09\xa2\x85\x22\x8f\xfa\x15\x8f\xc3\x91\xc5\x99\xbe\x91\xce\x67\x0d\xbf\x01\xf1\x21\x9d\x3a\x1b\x12\x8e\x73\x1b\xf2\x9f\xae\x21\x00\x57\xf2\x6f\x45\xb4\xdb\x59\xf8\x7f\x45\x54\x8a\x9a\x89\xae\x9f\x8e\xd9\xc3\x07\x98\x67\x26\x7a\x53\xa5\xf2\x9d\xf2\x1a\x66\xde\xdb\x76\x88\xa5\x76\x8c\xdd\x59\xd9\x36\x76\xcb\x13\x45\x00\xae\x14\x6b\x97\xdf\x10\x46\x9c\xb8\x9f\x5b\x2b\xc0\x32\x78\xf9\x6e\xee\x78\xfa\xa1\xcc\x30\xae\x76\xa6\x7d\x5a\xdd\x42\x06\xc7\xcc\x2d\x5d\x75\xe3\x63\xdd\x35\x11\x80\x7b\x83\x35\xa2\x8c\x30\xa2\x34\xf4\x7a\x4b\x70\xd6\xc4\x70\x75\x55\xe3\xa2\x9c\xd9\xe6\x95\x1c\x8b\xf5\x83\xd6\xc3\xab\x89\xc2\x4a\x73\x61\x3f\x9d\x6d\x99\x10\x80\x2b\xc3\x1a\x51\x4e\x18\xa1\xb0\x41\x1a\xf4\x24\x39\x42\xac\x7e\x24\x37\x95\x3e\x7e\xc8\xc4\xfc\xbe\xb5\x84\x7b\x6a\x35\x7f\xf7\xa1\xf6\x03\xfb\x5c\xce\xc9\x23\x00\x57\x8e\x35\xa2\x82\x30\x22\xb8\xe6\xb6\xdd\xdd\x2b\x8a\x5e\xf5\xcc\x12\xa7\x2b\xa5\x21\x9f\xe6\xc8\xb5\x82\xbe\x69\xcb\x17\xfb\x04\x8e\x3a\xf1\x50\x44\xe3\xf7\xa7\x15\x58\x23\xde\xa2\x7e\x73\x30\x1e\xc9\x72\xd0\xf4\xfc\xf7\xa7\x0c\xe6\x44\x96\x6a\x0a\xed\xd9\xfa\x1f\xe9\xd4\xd7\x1e\x69\x7f\x5a\xb6\xf4\x3a\x0a\xb2\xb8\x10\x80\x7b\x8b\x35\xa2\x92\x30\x62\x9a\x8f\x5a\x93\x21\x76\x31\xcf\xe6\x60\x0e\xff\x8f\xcb\xd7\xf5\xe8\xfd\xcf\xc5\x29\x2b\x76\xa4\x7f\x38\x59\x45\xd6\x60\xa5\xa6\x8e\x00\x5c\x25\xd6\x88\x2a\xc2\x88\xb9\x9f\xdf\x64\xd2\x7f\x12\x0b\x32\x3d\xbb\x49\xe7\xf8\x78\xaf\x63\xb5\x5f\x73\xf9\xd6\xa2\xc6\x9f\xba\xba\x7a\x27\x2f\x7d\x35\x0a\x04\xe0\xaa\xfe\xed\x61\xdd\x6e\xff\xe1\x89\x7a\x58\x67\xf3\xc8\xb3\x96\xf8\xb6\x2a\xcb\xbb\x9a\x80\x85\x7b\x6d\x10\xe9\x79\x56\x69\xe1\x7d\x5d\xc5\xd1\x99\x86\x9d\x6d\xfc\x81\xf7\xff\xfe\xc7\x4d\x8b\xda\x1b\x1f\x27\x95\x8a\xbb\xc9\x3f\x52\x8f\x1d\x6d\x4d\x32\x7f\xa8\x30\x18\xf0\xdd\x66\x93\xfa\xb2\xea\xaa\x90\xf1\x85\x7d\x73\x7f\x6b\x41\x6f\x6d\x49\xd2\x73\xba\x55\x74\xd5\x4e\xd9\x52\xcd\x0c\x8d\x9e\x2f\x3b\x72\xc1\x33\xe2\x8b\xec\xbc\xd1\x71\x01\x26\xb5\x27\x49\x7f\xc3\x85\x53\x38\xb2\xa8\xd3\x20\x33\xcb\x9e\xaf\x09\x81\xca\x7a\xc5\xe3\xce\xac\x32\x15\xbe\xe3\x19\x7e\x79\x5a\x17\xc9\x4b\x88\xff\xab\x69\xce\x98\x2d\xeb\x22\x69\x66\xe6\x61\x2b\xa5\xa3\x43\x41\xd6\x64\x97\x97\xf3\x86\x5e\xa9\xe6\xb4\xad\x95\x9c\x17\xa4\x59\x12\xf1\xfa\xfb\xdf\x5c\x6b\xb4\x58\x6c\xfc\x7d\xda\xc6\x07\xbc\xa2\x9a\x34\x5f\x3a\x7a\x93\x38\xab\x81\xad\x83\xe9\x5d\x7e\xd7\x14\x2f\x10\xa7\x06\xfd\xd5\x94\xe8\xd7\xaf\x25\xb9\x0f\xb3\x4b\x86\x6a\x14\x1f\x04\x2d\xf5\xa6\x98\xb6\xca\xfa\x68\xef\x5c\x8a\xaa\x21\x85\x4a\xe0\x89\x84\x2f\x7f\x35\x6d\x94\x9e\x6b\x11\x18\x64\x7c\xa4\xc4\xae\xeb\xef\x78\xe9\x85\xdc\x15\xdd\x2f\x2f\xb4\x4a\x3f\xab\xcb\x99\x1b\x9c\x28\xe7\x6e\xd5\xfa\xdf\xc3\xba\xdd\x3e\xd5\xff\x46\xb2\x6a\xd4\x48\x36\xf8\x28\x23\x90\x5c\x20\xfb\x8a\x74\xd0\xea\x45\x9e\xb0\x18\x88\x7c\x2d\x6f\x3d\x81\xc4\x77\xf2\x94\xb9\xd8\xfe\x30\x67\xfc\xad\x5d\x8d\xf5\xbe\xab\x21\x8c\x90\xfe\xe1\xce\x21\x9e\x12\x4c\x72\xb7\x76\x28\x5a\xeb\x76\xdd\xe7\xf5\x89\xcb\x86\xf1\x7d\x54\x49\xee\xc1\xbe\x7e\x11\x27\x27\x34\x10\x80\xab\xc1\x1a\xf1\x8e\x30\xc2\x32\x70\x9b\xf3\xe6\x9e\x6f\x37\xf8\x7d\x07\x29\xaf\x4f\x64\xf5\x39\x66\x9a\xcf\x45\xf7\x83\xa7\xa9\xf4\x1e\x53\xcf\xba\xec\x6d\x10\x80\x7b\x87\x35\xe2\x3d\x61\x84\x5e\xfb\xd1\x8a\x96\x66\x9d\xed\x81\xd3\xa3\xc7\x6f\xfd\x3c\xed\xa4\xd5\x67\xeb\x34\xea\xe8\xef\x47\xe9\xfc\x43\x96\xa8\x50\x08\xbf\x6c\x7f\x8f\x35\xa2\x16\xf5\x8a\x27\x3d\x53\xc7\x02\x31\x8b\x46\xac\x0b\x11\xff\xc9\xde\xb6\xa3\x16\x9b\x12\x4a\x52\x22\x9e\x89\xac\xb6\x44\xf4\xd3\xe7\xe2\xb4\x10\x80\xab\xc5\x1a\x51\x47\x18\x51\x6d\xe1\x71\xec\x74\x8b\xc7\x34\xe4\x37\xd3\x1e\xdb\x19\x4a\xa3\xe9\x97\x96\x88\x93\x07\x4f\xd7\xfc\x2c\x98\xce\x7f\xa1\xc4\x4f\xa4\x75\x58\x23\xea\x09\x23\xae\xc8\x36\x32\x05\x6f\x2c\x3c\x62\xff\xe2\xea\xbb\xb9\x9c\xd3\xde\x51\x69\x61\x55\x98\x6f\xea\x6d\xf0\x0c\x92\xe3\xee\xa3\xc1\x2f\x6a\xea\xb1\x46\x34\x10\x46\xb8\xbe\xd9\x88\x93\x7b\xf5\xd2\x18\x98\x95\xff\xae\x4e\x6a\x66\x3d\x91\xa9\x9c\xa0\xfd\xe8\x43\x90\xd1\x66\x58\xa6\x59\x89\xf7\x01\x04\xe0\x1a\xfe\x6d\x39\xb0\xdb\x78\xf3\x5f\x11\x7d\x40\x6d\xe9\xb2\xdf\x7a\xbe\x7c\xa0\xe8\xcd\xe7\x24\xf6\xfd\xc1\x5b\xfb\x5e\xb7\xa9\xb4\xab\xdd\x03\xf1\x89\x75\x33\x7b\x2d\x2b\x9d\xe9\x2f\x20\x00\xf7\x01\x6b\x97\x1b\x51\x6f\xbd\x50\x27\x5c\x33\xfc\xf8\x6c\xeb\x40\xc8\xe8\xf7\x18\xc5\xfc\x65\x1b\xcd\x96\xd1\x85\x9b\x23\xd5\x1b\x1e\xeb\x77\xae\xab\xe5\xde\x40\x00\xae\x11\x6b\x44\x13\xea\x85\x72\x03\xe9\xd8\x65\x53\x6a\x9f\x48\xf5\x09\xca\x61\xe0\x57\x2d\x50\xb3\xbc\x1a\x73\x63\xb1\xab\xa2\x72\x9c\x16\xac\x1f\x33\x42\x00\xae\x09\x6b\x44\x33\xea\x88\x74\x86\xd5\xd6\xe4\xf6\xb6\x8e\x83\x63\xf7\xa0\x1a\x2e\xc8\x4d\x62\xb0\xf6\x95\xa1\x9a\x95\xd0\xc0\xba\xed\xad\xa7\x5e\x23\xf8\x15\x47\x33\xd6\x88\x16\xd4\x0f\xc6\x9a\xdf\x89\xd2\x95\x04\x58\xc6\x5a\x12\x05\xfd\xdc\xcf\x5d\xf0\xdc\xf3\xf4\xe9\xa2\x9e\xd0\x9b\xe1\xca\x22\xad\x9e\x26\x76\xf8\x89\xb4\x05\x6b\xc4\x47\xc2\x08\xb2\xf1\xbd\xf1\x4f\xd9\x8d\xfd\x0c\x86\x28\x35\x3f\x79\x66\x7d\xba\x83\xd4\x40\xf4\xe6\x7f\xcc\x21\xe1\x20\x23\xab\xf3\xcd\xa4\x08\xc0\x7d\xc4\x1a\xf1\x89\x30\xa2\xa2\xfe\x5c\x0a\xf2\xf3\x7d\xd3\x83\x99\xa7\x4a\xbf\x11\x28\xfe\x47\x26\x93\x52\x73\x41\xe1\xdd\x17\x17\x2a\x38\xe8\x39\xdf\x32\x23\x00\xf7\x09\x6b\xc4\x67\xc2\x08\xea\x75\xde\xcc\xc8\x1b\xe5\xc8\x66\x14\xf5\x67\xcb\x54\xa9\xb4\x2f\x37\x73\xd2\x0d\xbf\xc8\x39\x04\x6a\x9f\xf5\x1e\x4a\xcf\xc0\x0f\x05\x9f\xff\xad\x88\x76\x9b\x89\xff\x2b\xa2\x56\xc2\xeb\x09\x7c\x4d\x52\x54\xa0\x16\x33\x36\xb6\x1c\xb8\x80\xfb\x3a\xd4\x7d\x1a\x36\xe0\xe7\xa7\xbe\xa4\xf6\x56\x16\x34\x6f\x07\xdf\xc6\x5f\x4f\x2b\xd6\x2e\xb7\xa1\x5e\xf1\xfc\x21\xd4\x31\xdd\x6e\xd6\xb0\x3e\x7d\xfb\xa0\xe0\x07\x92\x6c\xb2\xb9\x7d\x0b\x2c\x9a\x1c\xf7\x46\x4b\x69\xe2\xd2\xd8\x15\xe9\x11\x80\x6b\xc3\x1a\xd1\x8e\xfa\xc5\x8e\xf9\xf0\x4c\xef\x07\xf3\xfa\x44\xf7\xa0\xf2\x15\x75\xe9\xcd\xd0\xe1\x91\xa5\xe9\xc9\x28\xb7\x7b\x2c\x70\x61\x69\x89\x81\x31\x02\x70\xed\x58\x23\x3a\x08\x23\xde\xbe\x14\x57\xab\xb3\xb4\x0d\x2a\x2f\xcd\x1b\xc5\xf5\x46\xbc\xb4\x4d\xfb\xf6\xa6\xf9\xe1\x25\x8e\x9f\xe7\xfc\x9b\xa9\x53\xcb\x24\x11\x80\xeb\xc0\x1a\xd1\x89\x7a\x53\xb0\x79\x2e\x28\xc5\xc4\x1b\xf9\xc2\xeb\xb4\x7e\xc0\x66\x64\x98\xcd\x58\x07\x37\x6c\x25\xea\x3d\x36\xfd\x76\x53\x2b\x69\x48\x0d\x01\xb8\x4e\xac\x11\x5f\x08\x23\x5e\xcd\xdc\x7c\x3f\x7f\x68\x6c\xdb\x54\x65\x29\x46\x22\xf0\x51\xb9\xa6\x64\xfa\xe4\xe4\x5a\x51\x8e\xc4\x2d\xc1\x4b\xc7\xac\x67\xf0\xbd\xf8\x82\x35\xa2\x8b\x30\x62\x83\xcf\xfe\xfc\xa5\xe7\x5a\x2c\x4c\x4d\xbd\x8b\x02\x93\xe2\xbc\xe7\xb8\xfc\x2a\x2f\xa4\xc4\xef\x4d\xe1\xd1\x73\x9b\x78\x70\x9b\x15\x01\xb8\x2e\xac\x11\xdd\x84\x11\x3f\x1f\x85\x8a\xb5\xa8\x9c\xf4\x93\x70\xba\x24\x35\xb2\x51\x9c\xf8\x82\x29\xe6\x13\x83\x24\xb7\xf6\xcf\x71\x63\x5e\x62\x06\x65\x61\x04\xe0\xba\xff\xad\x88\x76\x5b\xa3\xfe\x57\x44\x3d\x84\xd7\xa3\x1b\xa6\x15\x7e\x42\x1a\xf4\xb9\x8d\x1f\xfe\x3e\xaa\x2f\x3e\xb1\x20\x7d\xe4\xec\xb1\xcc\x16\xbe\xc5\x8a\x17\xdb\x87\xdc\x72\xf0\x9f\x6a\x0f\xd6\x2e\xf7\xa2\x7e\xc2\xd1\xa2\x52\x95\xc4\x32\xbf\xff\xf5\xac\xdc\x9b\xbd\xaa\xed\x87\x59\xc8\x13\x8c\x6b\x92\x13\x63\xef\x57\x4e\xe5\x93\x17\x7b\x59\x20\x00\xd7\x8b\x35\xa2\x0f\x75\x6f\x30\x9d\x1a\xd5\x0f\x99\xae\x5d\x30\x79\x39\x50\x48\x43\xf5\xad\x8d\xf5\xea\x4c\x17\x8e\xf8\x97\x01\xb3\xf2\x95\x7e\x06\x15\x13\x04\xe0\xfa\xb0\x46\xf4\x13\x46\x44\x51\xb1\xbe\x2c\x25\xee\x13\xd8\x97\x5f\xba\x1e\x2e\xcb\xf5\x55\x82\x3b\x27\x20\x72\x74\x35\x25\x79\x25\x3f\xb2\xbc\x77\x11\x1f\xd1\x8f\x35\xe2\x2b\x61\xc4\x8d\x55\xdd\xe7\xed\x7a\x21\xda\xd9\x4e\xa5\x64\x4c\x1a\x7e\x4b\x93\xa2\x8f\x85\x35\x0a\xb4\x0f\xa4\x78\xb6\xde\xbb\xac\x71\x8e\x04\x01\xb8\xaf\x58\x23\x06\x08\x23\xbe\xb4\xad\x0b\xbc\x51\xb1\x8e\x08\xff\x4c\x2c\xe7\xfc\x5e\x30\xd5\x3a\xfc\x00\x22\xa5\x48\xd9\xa7\x13\xf3\xe3\x97\x3b\x87\x10\x25\x02\x70\x03\x58\x23\x06\x09\x23\x46\x07\xb9\x14\x85\x3d\x12\x33\x64\x07\x8a\x8f\x3d\x7d\xf7\xc2\xf9\xec\x9d\x82\x86\x96\x34\xad\xfb\x06\xf9\xa5\x69\x4f\x7c\xbb\x04\x11\x80\x1b\xc4\x1a\x31\x84\x7e\xc1\xc1\x44\x2b\xd5\x73\x4b\x66\xad\xe8\x8f\x46\x4f\x52\x6d\xdc\x3d\xb2\xc1\xe7\x4f\x82\xde\x1e\xdf\xd6\xef\x70\x19\xe2\x55\xe3\x45\x00\x6e\xe8\xdf\x8a\x68\xb7\xdd\xdb\x7f\x45\x34\x8c\xfa\x1d\xd4\x0f\xcd\x0c\xa4\x29\x83\xfd\xc8\xc6\xed\x52\xd1\xe7\x7f\x38\xe7\x5f\x96\xe5\x06\x2d\xe7\xdb\x46\x6b\xef\xf3\x80\x9a\x36\x1d\x11\x80\x1b\xc6\xda\xe5\x6f\x84\x11\xc9\xd1\xaa\x7f\xee\x9a\xbf\x6f\xd4\x15\xee\x71\x18\x1e\x55\x28\x56\x02\xbc\xf6\xdc\x9c\x25\x76\xda\x4c\xa5\x17\xaa\xc2\x78\xf1\xdb\xae\x6f\x58\x23\x46\x50\xcb\xb9\xd7\xce\x62\xde\x1d\x45\x0f\xe4\x5c\xeb\x2c\x49\xb9\x8f\xa7\x47\x44\x0c\x93\xdd\xff\x2d\x49\x26\x6f\xfe\x99\x16\x3a\x61\x4a\x83\x00\xdc\x08\xd6\x88\x51\xd4\x52\xdf\x56\xdb\xc4\xfc\x6a\xad\xd8\x88\x83\xa3\x52\xac\xce\x65\x67\x25\x5d\x1a\xb3\xad\x85\xc0\x2e\xda\x6c\x4f\x01\xad\x0b\xfa\xf8\x45\xe9\x28\xd6\x88\x31\xc2\x08\x41\x63\x5e\x49\x25\x1c\x32\xd4\x41\x7d\x28\x9e\x24\x37\xa4\xdb\x21\xf7\x99\x07\xb9\xda\x8f\xa1\xc3\x6d\xdb\x6c\xcd\xd5\xc1\x12\x08\xc0\x8d\x61\x8d\x18\x27\x8c\xe0\x6a\x08\x4c\x37\x90\x1e\x04\x4a\x5e\xbf\x5b\x96\xb9\x7b\x8e\xf9\xf0\x74\x31\x7d\xff\xf4\xc1\x91\x5a\xf5\x95\x66\x5c\xf6\x11\x33\x04\xe0\xc6\xb1\x46\x7c\x27\x8c\x30\x2f\x57\x60\x76\xe5\xa1\xbf\x9c\x95\xa6\xfc\x11\x1a\x72\x6d\x77\xf2\xa7\xe2\xf5\x4c\x79\x91\x35\x98\xc7\x13\xa1\x67\x1b\xab\x82\x00\xdc\x77\xac\x11\x3f\x08\x23\x68\x25\x7d\xa7\x2d\x47\xdb\x14\xcb\x4e\xe5\x4e\x72\xb6\x46\xd6\x64\x6c\x16\x78\x2b\x96\x14\x7b\x6c\x37\x19\xd1\xc5\xe5\x7f\xc0\x7f\xdd\x3f\xfe\xad\x88\x76\x3b\xd7\xf8\xaf\x88\x26\x08\xaf\xe7\xd1\x9f\x3f\xef\xd4\x78\x26\xe6\x49\xd3\x9a\x0e\x3d\x52\x4f\x28\x39\xae\x86\x0c\xe4\x28\x64\xf1\x5a\x26\x33\xc0\x92\x97\xd4\xf6\x21\x00\x37\x81\xb5\xcb\x3f\x51\xef\x74\x14\xeb\x1d\xdf\x2e\x18\x51\x4c\x61\xd8\xe8\x0a\x33\x6e\xf8\x72\xcd\xbb\xde\x3f\xb7\xdb\x6f\x6a\xba\x56\xff\xf5\xf3\xaf\x8f\xf0\xf3\xfb\x4f\xac\x11\x93\x84\x11\xd7\x9b\x52\x2b\x36\xa9\xb8\xf2\x69\xcf\xaf\x14\x5a\x5d\x7d\x78\xf8\x48\x42\xba\x67\x85\xcc\xd3\x00\x91\xd2\x23\xba\x2f\x48\x12\x18\x11\x80\x9b\xc4\x1a\x31\x45\x18\xa1\xc8\x91\x5f\x73\xed\x0b\x91\x3c\x7d\x65\xa9\x1a\xd1\x37\x21\xa3\x8c\xcf\x49\x69\xdf\xe2\x7d\x6a\x12\x75\x65\x72\x94\x28\xcb\xf1\x4b\x88\x29\xac\x11\xd3\xa8\xf9\xb4\x81\x3b\x3f\xe1\x70\xb0\x70\x58\xc2\xd9\xc9\x73\xe3\x85\x42\x64\x8b\x41\x25\x29\xa6\xf5\x47\xb3\x53\x52\x67\x85\x5c\x21\x3e\x04\xe0\xa6\xb1\x46\xcc\xa0\xde\xf4\x54\x0f\xfc\xf6\x2e\x45\x29\x48\x5a\xcc\x2b\xca\xaa\xc4\xad\x6d\xb8\xf0\xda\x1e\x76\xa6\xda\x7c\x9b\x58\xaa\xc8\x75\x17\x3d\x4e\x04\xe0\x66\xb0\x46\xfc\x22\x8c\x58\x11\xd1\x55\xf7\x3b\x2d\xfe\xad\x22\xda\xd0\xfd\xfc\x5b\x69\xa5\x8a\x82\x59\x41\x9e\xc5\x87\x51\x6f\x2b\xb7\x94\x8f\x26\x3d\x73\x46\x00\xee\x17\xd6\x88\x59\xc2\x08\x9d\xd0\x7d\x64\x2e\xd1\x87\xa4\xd9\xed\x2d\xb7\x66\xef\xbc\xda\x93\x9b\x7f\xec\x55\xef\x59\x8e\xec\x57\x34\x3c\xe0\x9a\x80\x38\x7e\xb4\x99\xfd\xb7\x22\xda\xed\xc4\xef\xbf\x22\x9a\x23\xbc\x9e\xab\xe7\x0c\x71\xde\x67\x59\xef\x3f\x22\xf9\xe3\xdc\x95\x50\x58\x07\xa4\x9e\xb1\x20\xfb\x15\xb6\x8f\xf9\x90\x14\x43\x85\xb7\xf6\x23\x00\x37\x87\xb5\xcb\xf3\x84\x11\x75\x1e\x1a\xd2\x7d\x65\x39\xa5\x5f\x39\x5e\x90\xf5\x18\x59\xb7\x0c\x86\xf5\xff\x2e\x77\x78\x79\xcc\xd3\xad\xea\xd8\xaf\x45\x27\xfc\x2a\x65\x1e\x6b\xc4\x02\x61\xc4\xe3\x9f\x82\x25\x73\x75\xd3\x5c\x7e\x75\xec\x9c\xfe\xf2\xc2\xe9\xa6\xd2\xdd\xba\xdd\xd5\x8d\xf7\x66\x9a\xde\xb0\x66\x1d\x37\x12\x47\x00\x6e\x01\x6b\xc4\x6f\xd4\x07\xa5\x6a\x14\x44\x3c\xb6\xf1\xf1\xd6\x31\xc5\x6f\xa5\x27\xed\x3e\x9e\x8a\xc8\x68\x0c\x2a\xa4\x7c\x73\xa3\xb7\x53\x27\x6c\xeb\xd8\x29\x04\xe0\x7e\x63\x8d\x58\x24\x8c\x88\xbd\x9b\x08\x2d\x88\x29\x28\x27\x8a\xf3\x4f\x3b\xe5\x19\xe9\x58\x5c\x09\x20\x1f\xcd\x3c\x5b\xd3\x23\x5f\x77\xc2\x60\xe0\xea\x09\x04\xe0\x16\xb1\x46\x2c\xa1\x96\xd6\x56\x09\x7b\x5f\x3f\x4e\xbd\xab\xf1\x47\x5e\x72\xb2\x21\xb9\x76\x9d\xc4\xe6\x54\x41\x49\x79\xbc\xe0\x4d\xc5\xcd\x4f\xf6\xbf\x88\x11\x80\x5b\xc2\x1a\xb1\x4c\x18\x31\x7e\xaa\xa3\x69\xfe\x96\x96\xbf\x56\xd4\x55\x81\x9a\x4e\x22\xbe\xa0\x2b\x3f\xbc\xa2\x4e\x4e\x42\xb1\xc9\xd5\x16\xe7\xe5\x4e\xe0\xef\xf0\x65\xac\x11\x2b\x84\x11\xa4\x67\xcc\xb7\xbf\x7b\x4e\x78\xe7\x4f\x1d\x22\xaa\xfb\x76\xff\x3d\x63\x0c\xb1\x9b\xdf\x7d\xd2\x96\xe1\x94\xd0\x37\x67\x6a\xf9\xf0\x37\xed\xca\xbf\x15\xd1\x6e\x67\xe1\xff\x15\xd1\x2a\xea\x9d\xcd\x02\x22\x8b\x4f\xd7\x28\xe7\xc6\x6e\xd2\xd7\xd2\x9f\xae\x7c\x7c\x4a\xf2\x85\x76\xb4\xf1\xf8\xa3\xfa\x09\x9f\x1a\x1d\x8b\x7c\xfc\x22\x79\x15\x6b\x97\xd7\x08\x23\x70\x64\x8f\x1f\xd1\xd5\x7c\x78\xf1\xde\x54\x3c\x0b\x9c\x39\xec\xf6\xa5\x38\xec\x69\xb0\xbf\x01\x91\x90\x78\x6e\xac\xe8\x24\xaf\x1d\x02\x70\x6b\x58\x23\xd6\x09\x23\x84\x42\xe8\xfa\x65\x96\x46\x47\x1d\x1f\xba\xaf\x39\x3f\x31\xf3\xb6\xcf\xcb\x68\xb0\x95\xa8\x8b\x7a\x0f\x87\xd3\xf0\xd5\xbc\xc4\xaf\x18\xd7\xb1\x46\xfc\x21\x8c\xe0\xdf\x90\x0a\x85\xb5\x0f\x36\x84\x5e\x5c\x90\x7d\x19\x74\xed\xcd\x28\x12\x8a\x70\x52\x30\x7f\x7d\x20\x08\xff\x0c\x0f\x71\x3d\x86\x00\xdc\x1f\xac\x11\x1b\xa8\x87\xea\xa4\x83\xbc\x81\xae\x83\x0f\xb2\xb2\x42\xe6\x57\x96\xb9\x5f\xbe\x55\x8e\x12\xf9\xac\x63\xe4\x57\x42\x53\xe7\x33\x7e\xa7\xf5\x10\x02\x70\x1b\x58\x23\x36\x51\x2f\xbf\x80\x28\xd5\xd7\x82\x06\x30\x75\x61\xe8\xb5\xe2\x1f\x44\x1d\xf0\x73\x7b\x0f\xcf\x6b\x52\x26\x8a\xba\xf5\xcc\x74\x6d\xa2\x17\x11\x80\xdb\xc4\x1a\xb1\x85\x7a\x0f\x4e\xbc\x4f\x99\x43\x79\xe2\x31\xdd\x45\xd6\xe8\x20\x7d\xd6\x4c\x12\xae\xde\x74\x9e\x24\x32\x8d\xc7\x7c\x25\x43\x17\x7b\xc9\xf0\x63\xe6\x16\xd6\x88\x6d\xc2\x88\x93\xce\x0b\x82\xf6\x42\x5f\xa8\x7d\xd6\x66\xf8\x4a\x0d\x7e\x02\x6b\x97\x6a\xeb\xc6\x75\x41\x47\x57\xd1\x2c\x9f\xa4\x93\x43\x07\x11\x80\xdb\xfe\xb7\x87\x75\xbb\x29\x7a\xa8\x87\x75\x47\x5d\x2d\xf9\xfc\x9a\xa2\x6f\x0b\x0c\x35\x6d\xf0\x18\x68\x49\x1a\x2f\x9f\x0d\x98\xba\x7f\x8f\x11\xbc\x38\x1d\x27\x20\x52\x2e\xf6\x57\x53\x1d\x5f\xc7\x59\xc4\x91\xd6\xed\x9a\x96\xe8\x93\x59\x01\x8e\x91\x5b\xaf\x71\x5b\x64\xee\x44\x8d\x81\x47\xd3\xbf\xdf\xfa\xf2\xe9\xd4\x5f\x4d\x8d\xc2\x72\x13\x9c\xd6\xf3\x9d\x4e\x38\x1c\x7a\xf8\x46\x30\xd2\x85\xce\xb1\x9c\x0d\x68\xea\xf5\xdf\xba\x6a\x6f\x76\xca\x47\xe7\x6f\xc6\xce\x59\xd3\xd6\xd9\x31\x53\xf4\x16\x8f\xb5\xe9\x46\x39\x49\x69\x71\x3a\x3b\x1b\xf9\xa2\x26\x5c\x6f\xf9\xfb\xc0\x84\xf7\xca\x42\xc8\x5f\x4d\xdf\xca\xfe\xaa\x28\x70\xd1\xce\x15\xf3\x97\xfc\x73\xbb\x86\x45\xf6\x96\x65\x73\x5f\xd4\x95\xa4\xf5\x7b\xe1\x2a\x67\x8f\x19\x26\x4b\xff\xd5\xf4\x2c\xcd\xf9\x3a\x4a\x4b\xf5\x9e\xf5\xbb\x6f\x42\x58\x6e\x04\xb4\xb7\xad\xd3\x4c\xd5\x52\xeb\x95\x7e\xb0\x9f\xe3\x2b\x67\xfc\x53\xfc\x57\x53\xb5\x5f\xb4\xc3\xbf\xb2\xef\x0b\x24\x73\xca\x70\xd0\x65\x9d\x7e\x93\xf8\xfa\x99\xe5\xf9\xe7\x1a\xd9\x67\xbb\x18\x57\x5d\xbb\xbf\x92\xfd\xd5\x54\x5d\xc1\x98\x49\xbf\xea\xdc\xf1\x54\xe1\xc7\x41\x43\x9d\x62\x16\x4b\x0a\x73\xe3\x6e\x5c\xac\x41\x61\x8b\xaa\x47\x26\x5f\x2a\x1c\xf7\x6d\xde\xf7\xff\xf6\xa9\xfe\xff\x23\x19\x80\x50\x3a\x5d\xd4\xf9\x56\xda\x0f\xbd\x1f\x25\xd5\xdd\x0c\x88\x0d\xca\x05\x67\x38\x66\xfc\x74\x4c\xce\x54\xe7\xd8\x26\xfd\x71\x32\xd5\xcc\x93\x42\x00\x8c\x55\xa7\x03\x10\xca\xa7\xbb\xfa\x35\x42\xf0\xb4\x63\x9e\xc8\xcc\xb7\xc3\x59\x4e\xc6\xf5\x3e\xf6\xc5\xaf\x9e\xb4\x45\x5c\xa1\xe4\xa0\x08\x11\x53\x93\x4d\xe0\x40\x00\x8c\xd5\xa7\x03\x10\x4a\xa8\x73\x50\x7d\xa0\x7d\xa3\x9a\xac\x66\xc2\xbf\x90\xef\x73\xc1\xdb\x14\xbe\x7d\x6c\x02\x14\xb2\x86\x9e\x7b\xc2\x82\xf3\x7e\x96\xd3\x11\x21\x00\xc6\x2a\xd4\x01\x08\x65\xd4\xe9\x29\x2b\x77\xf4\x15\x6d\xca\x4d\xaf\xd1\x47\x3d\xa1\x9e\xd9\xde\xee\x3a\xae\x6e\xf9\x30\x7c\x38\x5e\xca\xba\x99\xfd\x42\x92\x06\x02\x60\xac\x46\x1d\x80\x50\x4a\xdd\xf2\x47\x11\x8e\x4b\x9d\x8d\xfd\xb9\xb4\x2a\x4a\xb7\x14\xc6\xbb\x96\x7e\x67\xd4\x88\xd5\x71\x3d\xba\x7a\x47\xa9\xdb\x3b\xdb\xf2\x2a\x02\x60\xac\x4a\x1d\x80\x50\x4e\x9d\xff\x14\x3c\x15\x2e\x4e\xd6\x27\x93\x46\x9c\x6d\x16\x7d\xc0\xc5\xd0\xbf\xe6\x89\xc0\x83\xcb\x31\x7c\xbe\x0f\x44\x5c\x0a\x5c\x0f\x21\x00\xc6\xea\xd4\x01\x08\x25\xd5\x99\x8e\x9e\xec\xb6\xcc\x72\x9c\x57\xce\xeb\x94\x65\x95\x63\x0a\xbb\x7c\x67\x6f\x44\x45\x05\x7f\xd4\xc9\xfe\xe8\x3f\x07\xfd\xe8\x4e\x20\x00\xc6\x2a\xd5\x01\x08\x65\xd5\xd1\xdd\x69\x0b\x87\xb2\x89\x0a\x2f\xd1\xb6\x3c\x12\xe5\xfd\xea\x13\xe2\xf9\xc1\x4e\xe5\xa7\xf2\x45\x77\x55\xaa\x4b\x4f\xc9\x1f\xe0\x33\x30\x5a\x75\x3b\xc5\xb4\xdb\xb8\xb3\x53\x4c\x28\xad\x4e\x9a\xb5\x2d\x43\x41\x35\x5f\x24\x79\x93\xe1\xe3\xc2\xfd\x32\x71\xda\x95\x6f\x6d\x2f\xab\x92\x39\x3e\x95\x31\x3a\xbe\xe9\xba\x42\x83\x00\x18\xab\x56\x07\x20\x94\x57\xd7\xe9\xf3\xed\x3b\x9d\x03\xdd\xbc\xb6\x7b\xc3\xc1\xe0\x3e\x93\xd0\x83\x53\xa2\x17\x5f\xad\xcb\x1a\x9b\x26\x32\x1e\x8c\xbe\x65\x6f\x83\x00\x18\xab\x57\x07\x20\x94\x58\xe7\xda\xab\x39\xc4\x7e\x96\x7c\x6f\x60\xf7\xd4\xb9\x12\xb9\xf3\x67\x5a\x43\xa2\x1f\x40\xcb\x6b\xa9\xfc\x4d\x9c\xe6\x32\xc5\x26\xf8\x1b\x1d\xab\x58\x07\x20\x94\x59\x37\x14\x96\x57\x9c\xa0\x15\xc1\xe9\xfc\xbe\x94\xe4\x8c\x88\x1a\xcb\xba\x48\x00\x67\xfa\xa1\xb8\x37\x82\xfd\x8c\xb5\x89\x4b\xcc\xa2\x08\x80\xb1\x9a\x75\x00\x42\xa9\x75\xea\xb1\x32\x9e\x79\x62\x87\x12\xd8\x9e\xbe\x66\x58\xd8\xe3\xdc\x69\x75\xf8\x7d\xe0\xef\x15\xa5\x23\xcb\x01\x0b\xf5\x0f\xdf\x30\x09\x22\x00\xc6\xaa\xd6\x01\x08\xe5\xd6\xc5\x48\x2a\x74\x1d\xd0\xa3\xa0\x68\x6b\x0f\x4a\xcb\x95\xb9\x27\x74\x7b\x52\x8c\x02\x39\xc0\xc8\x99\xce\x71\xdf\xf1\x7a\xeb\xdc\x4d\x04\xc0\x58\xdd\x3a\x00\xa1\xe4\xba\x63\x65\x49\x83\x75\x0f\xf4\xa9\x95\x58\x4a\x4c\xa6\xaf\x7e\x20\x8f\x14\xba\xa9\x03\x31\x4a\x6e\x28\xa8\x2e\x18\xe9\xf8\x69\x88\x21\x00\xc6\x2a\xd7\x01\x08\x65\xd7\xed\x99\x4b\xa3\x77\x57\x0c\x5e\x27\x11\xbe\x9a\xdc\x9d\xab\xf4\x76\x9f\xca\x0d\xca\x6b\x64\x94\x71\x6b\xbf\xc3\xae\x37\x54\x8c\xc9\x23\x00\xc6\x68\xd7\xed\x14\xd3\x6e\x33\xf3\x4e\x31\xa1\xf4\xba\xf6\x62\xbe\x3a\x21\xd7\xa2\x85\x28\x8d\x67\x01\x94\xd4\x03\x17\x7f\x13\x3d\xb0\x59\x72\x0c\xbb\xa6\x6e\xac\xf7\x7d\x5f\x59\x86\x0c\x02\x60\xac\x7a\x1d\x80\x50\x7e\x9d\x6c\xf6\xc5\x09\x4b\x83\xe6\xf4\x85\xc8\xfa\xfb\x6e\xca\x42\x0e\xe2\xdb\x9a\xfe\x42\x06\x54\x3d\xec\x3a\x7a\x39\x07\x69\xf3\x55\x11\x00\x63\xf5\xeb\x00\x84\x12\xec\xb8\xce\x37\x24\x7f\x60\xe5\xa1\x52\xb7\xa7\x56\xe1\xb2\x12\x98\x0d\x6c\x30\x99\x13\xb7\x75\x57\x7b\x9a\x0e\xb4\x79\x3b\x1c\xcf\x21\x00\xc6\x2a\xd8\x01\x08\x65\xd8\x3d\x97\x8f\x6c\x74\xdb\xf8\xe1\x70\x45\x63\x4b\xf2\xe5\xd0\x7e\x97\x22\x27\x83\xef\xca\x73\x01\x6f\x1a\x4e\xcb\x59\x74\x4f\xe9\x5c\x41\x00\x8c\xd5\xb0\x03\x10\x4a\xb1\x2b\x4b\x19\xb4\x63\x58\x09\xbe\xf4\xf8\xe4\x85\xce\xc6\x96\xe6\xea\xad\x4b\x63\x36\xe2\x9a\xd3\x72\xe1\xf5\x0c\x43\x2e\x67\x4f\x6a\x21\x00\xc6\xaa\xd8\x01\x08\xe5\xd8\xb5\x59\x85\x16\xf6\x9d\x88\x5e\xe3\x52\x70\x37\x1b\x99\x79\x79\x3b\x10\xb7\x34\x47\xf3\xf0\x4c\xb1\x82\xec\x2b\xa3\x12\x9d\x26\x06\x04\xc0\x58\x1d\x3b\x00\xa1\x24\xbb\xf7\x66\xbf\x2e\x85\x3c\xd0\x3d\x48\xfe\x54\xd7\xf2\x49\x4a\xc7\xf0\x1e\xe6\xe0\x53\x27\x9f\x08\xb9\xa7\x7f\x90\x94\xca\xaa\x5b\xdc\x8f\x00\x18\xab\x64\x07\x20\x94\x65\x37\x1a\x71\xc4\x82\xdd\x59\x27\x38\x24\x55\xd4\x38\xa2\x82\x9c\xfe\xf2\x89\x83\xfd\x72\xdb\x1b\x8c\x6b\x3d\x7e\xd2\x01\x33\xd4\xf8\x59\x1c\xa3\x65\xb7\x53\x4c\xbb\xad\x5d\x77\x8a\x09\x85\xd9\x49\x19\xbf\xb2\xe0\xb5\x19\x48\xf4\xd6\x8c\xdd\x34\x2e\x7f\xf0\xf6\xdb\xa9\x2b\xf7\x12\xb5\xb6\xbe\x25\x5d\xbf\x1d\x90\x7a\x26\x04\xbf\x04\xc3\x8a\xd9\x01\x08\xa5\xd9\xcd\xcb\x27\x2e\x26\xb7\xdc\x3d\x30\xd3\x7b\x42\x55\x2a\xa2\x37\xf9\xe6\x52\x6b\x79\x88\x44\x30\x69\xc1\x45\x31\xe3\xb9\x07\x82\x67\x11\x00\x63\xd5\xec\x00\x84\xe2\xec\xd6\x8b\x59\x4b\xad\xdd\xf2\x73\x9e\xdc\x17\xcf\x70\xbf\xf2\xe6\x92\x39\xf7\xd7\x48\x0f\x75\x96\xb5\x8e\x24\xa2\x88\x83\xda\xc9\xf8\x7e\x60\xe5\xec\x00\x84\xf2\xec\x6e\x98\xb8\x6d\x84\x36\xf0\xcc\x3d\x65\x7b\x23\xa1\xb8\xac\xc2\x13\x78\x23\x2a\x75\x64\xc0\x4b\x35\xa1\x90\x31\xb7\x3e\xb4\x5f\x11\x01\x30\x56\xcf\x0e\x40\x28\xd0\x2e\xba\x91\x36\xff\xa3\xc4\x30\xf9\x41\x3d\xa6\xf0\x58\xf2\xb0\x71\xad\x77\x61\x3f\xb3\x6a\x1e\x2e\x0b\x4c\x5c\xf8\xd3\x9b\x9b\x77\x1a\x01\x30\x56\xd0\x0e\x40\x28\xd1\x8e\x56\x3b\x8e\x25\x47\x4b\x50\xf6\xc4\x63\xbd\x30\x8a\x47\xd2\xe3\x76\x06\x27\x33\x26\xaa\xe8\x3e\x92\xb2\x87\xd3\xfb\x84\x47\x29\x21\x00\xc6\x2a\xda\x01\x08\x45\xda\x3d\xa1\x4c\x7d\xc7\x12\x16\x51\x22\x47\x15\x6a\xaf\xb1\xdf\x52\xda\x88\x57\x58\xd4\xfd\x94\x87\xdb\x79\xc1\xbb\x77\xec\x78\xe3\x58\x10\x00\x63\x25\xed\x00\x84\x32\xed\x28\x7b\x25\xc7\x1f\xd7\x3a\xf3\x78\xe4\x4b\x47\x4e\x92\x39\x9e\x3c\xfb\xf3\xf4\xeb\x5b\x25\xca\xf1\xdb\x12\xfb\x05\xac\x1e\xba\x5f\x44\x00\x8c\xd1\xb4\xdb\x29\xa6\xdd\x76\x77\x3b\xc5\x84\x42\xed\x0e\x70\xf2\x8f\x13\x21\x47\x8f\x8b\xe8\x07\x67\x18\xb9\x1b\x0a\xd5\x23\x31\xe6\x49\x8e\x37\x4a\x58\x7e\x65\x46\xe8\x2b\xdf\x36\x47\x00\x8c\x15\xb5\x03\x10\x4a\xb5\x53\x17\x7f\x3f\xa5\x50\x71\x15\x67\x55\x90\xd9\x94\xbb\x24\xad\x76\xf1\x5d\x76\x9f\xbf\xdb\x99\x31\xab\xe3\x96\x07\x7e\x48\x66\x33\x22\x00\xc6\xaa\xda\x01\x08\xc5\xda\xd5\xf9\xeb\x35\x3c\x6f\x2b\x4f\xb7\x3f\x6a\x22\xfa\xe7\x55\x0d\xfd\xa9\x22\xfe\xea\xb3\x22\xfc\x1f\x5d\x67\xbf\x42\x01\xba\x12\xf6\x08\x80\xb1\xb2\x76\x00\x42\xb9\x76\x3c\x0b\xfe\xe7\xd5\xe6\x79\x36\xde\x5d\xe4\x6e\xbf\xd2\xb5\x1d\x46\xac\xe8\x06\x82\x98\x4f\xc9\x2f\x9e\x2e\xbb\x92\xca\x88\xc3\x2f\xc1\xb0\xba\x76\x00\x42\xc1\x76\x73\x43\x57\x69\x5a\x6e\xb6\xe2\xae\x81\xb1\x6b\x37\xdd\xbd\xed\x05\xaf\x39\x94\x20\x75\x66\x50\x23\xc7\xb3\xdf\x8a\xdc\x83\xf8\x0c\xac\xb0\x1d\x80\x50\xb2\x5d\x25\xd7\xf5\xce\x1e\xbe\x37\xe7\x83\xd6\xf3\x12\x9c\x22\x47\xb9\x43\x83\x93\x15\x5f\xbf\x36\x79\x46\x66\xf5\xe8\x8d\x7c\x7b\x34\x3f\x02\x60\xac\xb2\x1d\x80\x50\xb4\xdd\xf9\x6e\x9d\xb2\xa0\x31\x8b\xd2\xc5\x7a\x71\x45\xca\x2a\x37\x61\x79\x52\xf3\x67\xfb\xfc\xe7\xab\xe2\x9f\x46\x85\x3b\xb7\xb0\xa9\x23\x00\xc6\x4a\xdb\x01\x08\x65\xdb\xa5\x48\x17\x52\x37\x3f\x16\x7a\x4f\x24\xe4\x9e\x78\xc8\xf8\x77\xf8\x50\xe2\xc8\x7e\x10\xf6\xf1\x4c\x74\xb0\xd1\xaa\xaa\x9a\xa3\x04\x02\x60\x8c\xb6\xdd\x4e\x31\xed\x76\xfe\xb1\x53\x4c\x28\xdc\x6e\xec\xcc\x1c\xd1\xcd\x7c\xb6\x9b\xbe\x9e\xd3\x25\x51\xd4\xf1\x7d\xd6\xc5\xa9\xa3\xb8\x45\xdf\x73\x97\x3f\x48\x50\x5c\x7d\x6c\x2a\x84\x00\x18\x2b\x6e\x07\x20\x94\x6e\xf7\xb1\xf2\x7a\xf6\xca\xa7\x83\x34\x89\x2a\x49\xa3\x1b\x70\xfc\xd1\x4f\xa6\xfc\x39\x37\x4d\xed\x84\x13\xd7\xef\xf8\xfc\xdc\x5f\x72\x06\x01\x30\x56\xdd\x0e\x40\x28\xde\x6e\x75\xa5\x30\x54\x29\x5d\xd7\xef\xc0\x4f\x66\x21\xed\x50\x73\xf6\x2f\x9f\xc4\xf9\x79\x54\x37\xef\x86\x8b\xd2\xa9\xd7\x6d\x3e\x3d\x8e\x00\x18\x2b\x6f\x07\x20\x94\x6f\xf7\xf9\xd1\xc5\x63\x49\x8d\x51\xdf\x32\x5e\xf5\x89\x5e\xc8\x18\xe0\x7d\x47\x1c\x85\xe3\x21\x2a\xe8\x36\xa9\xa6\x8c\x54\x7e\x54\x80\x2f\x58\xac\xbe\x1d\x80\x50\xc0\x9d\xb4\x6d\xe1\xbd\xca\xcf\x21\x64\xb7\xd3\xa4\x02\x6b\x12\xb6\x2f\x1b\x4e\x9a\x68\x13\x5f\x1c\x7f\x8c\xdb\x92\x29\x25\xd3\x7c\x7e\x04\x01\x30\x56\xe0\x0e\x40\x28\xe1\xae\xb0\xbc\x38\xe3\x63\xc5\xa9\xf9\x08\xd9\xce\x97\xb0\x84\xb3\x68\xa0\xad\x82\xf0\x75\xe6\xc9\x9c\x26\xda\x63\x56\xb2\x2e\x3f\x04\x10\x00\x63\x15\xee\x00\x84\x26\xee\x60\xd6\xa6\x36\x9b\xae\x0d\x8f\x80\x9b\x3f\xb7\xc9\x1a\x48\x25\x86\x7c\xf8\x64\x4b\x1b\x98\xcc\x7c\x86\xea\xc2\xf7\x27\xe1\x67\x58\xac\xc4\x1d\x80\x50\xc6\xdd\xda\x05\x55\xd1\xf4\xca\xa2\xc1\x0a\xc5\xc6\x81\x3b\x55\xcc\xb3\xb3\xd5\xbe\x83\x16\x7a\x47\xab\x9e\xa4\x5b\xb5\x79\xfd\x3a\x8c\x5f\x12\x63\x34\xee\x76\x8a\x69\xb7\x13\xc2\x9d\x62\x42\x21\x77\x24\xfe\xb6\x9c\xba\xf1\x5c\xa2\x47\x28\xc7\x4c\x72\x6e\x17\xd9\xa5\x8f\x34\x5f\x16\x7d\x6f\x9c\xb0\xda\x51\xd4\x7c\x24\x49\x0b\x7f\x13\x62\x45\xee\x00\x84\x52\xee\x68\xff\x24\xca\xd6\xd9\x5b\xad\xa6\x6c\xcd\x17\x4b\x8e\x27\x1b\x43\x1f\x29\xc5\x3b\x55\xdf\xc9\xbf\xa4\xb1\x7c\xcc\xfe\xe6\x27\x2d\x02\x60\xac\xca\x1d\x80\x50\xcc\x9d\x84\xcf\x47\xcd\x94\xc8\xc5\xbd\xd7\xce\xdd\x15\xb0\x50\x7d\x8a\xa4\xa6\x14\x7c\x5c\xac\x67\x90\x8f\xae\x9a\x15\xf8\xa1\x15\x6d\x83\x00\x18\x2b\x73\x07\x20\x94\x73\xe7\xcc\x73\xe1\x86\xc5\x98\x83\xa3\xdf\x8a\xba\x4b\xae\x54\x4f\xba\x1a\xdd\xe5\x98\xcf\xcd\xeb\xec\xb1\x45\xc5\x67\xab\x34\xf6\x99\x20\x00\xc6\xea\xdc\x01\x08\x05\xdd\x6d\x4e\xea\x65\xcd\x77\xf3\xf8\x4c\x7b\xdc\x5a\xfa\xe2\x98\x56\x60\x78\x23\xfc\xdc\xaf\x3b\x46\x35\xb9\xee\xab\xe3\x66\x11\xa7\xe8\x11\x00\x63\x85\xee\x00\x84\x92\xee\x32\xb2\xaf\xbd\x77\x8c\x39\xb5\xbf\xd2\xfa\xdb\x85\x70\x59\xa5\x44\x43\xd5\xfb\x38\xba\xec\xb5\x15\x2b\xd5\xae\xdb\x2f\xa7\x86\x4f\x20\x00\xc6\x2a\xdd\x01\x08\x45\xdd\x09\x1e\xfb\xc5\xd0\x9b\xf2\xda\x36\x31\xf1\xb0\x93\xbe\xfc\x4f\x12\xe2\xe9\xba\xe1\xa9\x25\xb7\x68\xce\x6d\xbb\xb5\xd5\x1b\xff\xb7\xf7\xc3\x4a\xdd\x01\x08\x65\xdd\xb9\xde\xbd\x7d\x88\x42\x61\x36\x95\x3f\xfd\xb9\xea\x14\x89\xfe\x8b\xc2\x7c\x0f\xe1\x23\x05\xa5\x7b\x5e\xb1\x72\x4f\xed\x2d\x4d\xc1\x0f\x0a\x18\xad\xbb\x9d\x62\xda\xed\x0c\x7d\xa7\x98\x50\xd8\xdd\xad\xc7\x15\x8e\xbf\x04\x4e\x0f\xd4\x45\x0b\x6f\x0d\xab\xff\x7e\x92\xb3\xdc\xf7\xb6\xd4\xe0\x57\xf9\x43\x9a\xf3\xc6\x5d\xd5\x4f\xc9\x11\x00\x63\xc5\xee\x00\x84\xd2\xee\x66\x7f\x19\xff\x8c\xe8\x8e\x8b\x4a\x7a\x7d\xe6\x64\x6c\x49\xa9\x75\x76\xf4\x99\x8c\x6c\xbb\xd3\x4c\x09\x60\x0e\x7e\x70\xbb\x4a\x1a\x01\x30\x56\xed\x0e\x40\x28\xee\xae\x56\xff\x12\xe7\x70\x5b\xd2\x67\xba\x86\x16\xf1\x63\xed\x87\x1f\xe6\xfb\x9b\x7e\x3b\xf2\xd2\x1f\x0c\xe7\xde\xe5\xfb\x33\xa2\xa9\x8d\x00\x18\x2b\x77\x07\x20\x94\x77\x57\x40\x11\xcd\x3d\x79\xf9\x82\xbf\xd5\x55\xb5\x78\x91\xd6\xce\x73\xc1\x0b\x1d\x08\x5b\xc0\xfc\x69\x05\xbf\xc4\x7d\x63\x4e\xd6\xdc\x08\x80\xb1\x7a\x77\x00\x42\x81\x77\x7a\xb7\xfd\x3f\x7b\xb7\x8f\x9a\xde\xb3\xcc\xed\xb4\xc9\xe5\xee\x19\xb9\x9a\xae\x14\x3c\x32\x36\x60\xca\x18\x1c\xcf\xd0\x7e\x00\xbf\x3c\xc2\x0a\xde\x01\x08\x25\xde\x99\x72\x0b\x7e\x93\xcc\xcf\x79\xfe\xa9\x51\xcf\x94\xef\x25\x95\xe5\xe2\x38\x5f\x2a\x8e\x8e\xef\xb9\x39\x9b\x92\xcd\x59\x9a\x07\xfa\x08\x80\xb1\x8a\x77\x00\x42\x91\x77\x74\xb7\x13\x95\xd2\x93\xa6\xa5\x3e\x0a\x77\x87\xb9\x77\x95\xc3\x15\x52\x27\x78\x96\xf9\x47\x52\x55\x62\x24\xcb\x2b\x35\xc5\xf6\x20\x00\xc6\x4a\xde\x01\x08\x65\xde\x45\xd2\xf9\xcc\xb2\x14\x24\xe4\x46\x3b\x30\x5c\x0b\xb1\x12\x2f\xdc\x1f\x5d\x23\x36\x16\x77\x96\x96\x7b\xad\x9b\xfb\x60\xcf\x28\x7e\xfb\xf0\x8f\xe6\xdd\x3e\x4d\x11\xfd\xf9\x69\xdb\x81\x22\x66\xd1\xfc\xcc\x34\x7b\x96\x04\x33\x9b\xda\x47\x47\x7f\x1c\xc9\x35\xfd\x0a\x1e\x32\x50\xf5\xa0\x1e\xf6\x11\xbf\xcb\xad\x9b\x91\xb4\x9a\x26\x1a\xc4\xa9\x9d\x2f\x50\x14\x62\x56\xbb\x1b\xf7\x28\xfc\x2a\x71\x81\x6c\x10\x8b\x98\x88\xae\xfa\xdf\x7f\xa3\xa9\xef\x61\x93\xfe\x60\xbd\xcc\x61\x2a\xef\x9e\xd3\xe5\x1c\xd2\xa5\xb3\x17\x83\x5f\x85\x5e\xe7\x48\x68\x36\x67\xf4\xaf\x8d\x1a\xf8\xab\x69\x9e\x5b\xef\xf8\xfa\x41\xaa\x97\x91\x22\xfb\x70\x86\xc7\x93\x9c\x73\x9f\x35\xd3\xc6\x70\x95\x1c\x76\x8e\xcb\xa7\xc2\x19\x99\x1f\xff\xab\x69\x94\x46\x56\x4a\xac\xb9\xee\x2d\xe2\x57\xba\x36\x53\x1f\x69\xd4\xb7\x49\x84\x98\xbb\xbb\xfd\x75\x57\xda\xc4\x87\x0b\x2f\xc5\x1d\xfb\xab\xa9\xdd\x74\xd9\xcf\xf2\xfe\x95\x7b\x16\x30\xf1\x49\x77\x70\xf1\x2e\xd5\xcf\xe3\x92\x4f\xbf\xbd\x58\x6b\xa4\x2a\xb8\xb3\x9d\x77\xc8\xe3\xaf\xa6\x1e\xac\x1c\xfe\xaf\x9b\x27\x68\xde\x51\x50\x35\x50\x50\x74\x09\xf7\x5c\x7b\x32\x38\x5b\x3d\x1d\xb2\x99\x16\xb8\x32\xed\x76\x29\xe1\xaf\xa6\x0d\xd2\xc4\xf6\x86\x52\xfc\x0f\xf7\x5c\xcd\x5e\x4b\xd1\x9f\x1b\xed\x52\xd9\x2b\xc8\x22\x2f\xca\x9f\xfa\x2d\xf4\x77\xac\x3d\xcb\xd6\xdf\xe8\x5e\x5c\xcb\xa7\x57\x72\xfb\x6f\x34\xba\x47\x45\x7c\x7e\x16\xd1\x2a\x74\xb7\x6e\x26\x62\xfa\x07\x14\x5e\x3a\x3f\xcc\xf1\x82\xa7\xe3\x7f\x0f\xfb\x76\xfb\x54\x77\x46\x34\x14\x7a\x97\xdd\xc0\xcb\xb1\xe7\xd9\x46\x61\xe2\xec\xe6\x01\xfe\x0f\x07\xb6\xef\xc5\x08\x74\x91\xfe\x9c\x48\x83\xbd\x29\xb4\x9b\xa6\x5b\xf1\x53\x1e\x56\xf4\x0e\x40\x28\xf5\x2e\xe7\x5c\xe6\x99\xa2\xc5\xc0\xb7\x26\x3d\xab\xae\x95\x87\xf6\x49\xdf\xf0\x7b\x6b\x9f\x7f\xaf\x8b\x8b\x9e\x72\x43\x50\x4f\x66\x91\x0c\x01\x30\x56\xf5\x0e\x40\x28\xf6\xee\x02\xe3\xbe\x35\x5d\xf2\xc8\xeb\xd6\x69\x65\xc9\x62\x4d\x1c\x9f\x99\x78\x8a\x7e\xf8\x87\x3c\x1c\x9a\xd1\xb6\xac\x22\x4e\x73\x13\x45\x00\x8c\x95\xbd\x03\x10\xca\xbd\x33\x38\xf7\xe7\x0f\x6b\xc2\x05\x6f\xf2\x2e\x46\x5b\xc6\x14\xca\xc3\x63\x6b\xa4\xb4\x91\xb2\x1f\x8e\x9c\xad\x0c\x79\xd3\xad\xae\x23\x85\x00\x18\xab\x7b\x07\x20\x14\x7c\x77\xc9\x6a\x4f\xa9\x14\xa0\x76\xcf\xc5\x5d\x67\x3f\x74\x6f\xf3\xe1\x40\x51\x9f\xe0\x7c\xb5\xe3\x4a\x1a\x9f\xea\xfa\xf8\x23\x55\x1d\x04\xc0\x58\xe1\x3b\x00\xa1\xe4\x3b\x9f\x1f\x4f\x93\x07\x6e\x6e\x9e\xf1\x66\xb1\x6e\x91\xbd\x23\xce\xf1\x6c\xf4\x8f\xfb\x53\x96\x9b\x47\x2e\x09\xec\x1f\x5c\x7c\x94\xa3\x86\x00\x18\xab\x7c\x07\x20\x14\x7d\x37\xf3\x91\xdd\xb8\x69\xa6\x58\x24\xbb\xf3\x5e\xfa\x06\x67\xe8\xbe\xb6\xb9\xee\xc4\xfe\x35\x8e\xec\x7d\xc5\x33\xe7\xdd\x3d\xe8\x2f\x23\x00\xc6\x4a\xdf\x01\x08\x65\xdf\x41\x21\x4e\xae\xe2\xd7\xeb\x34\x32\xe3\x07\x49\x8c\x6c\x71\x49\xcb\xd7\xca\x3c\xea\x7f\xb3\x27\x5c\x27\xdb\x48\x7e\xa7\xa8\x75\x10\x01\x30\x46\xfb\x6e\xa7\x98\x76\x1b\x77\x76\x8a\x09\x85\xdf\xf1\xcc\x12\xa9\x5a\x9b\xb2\x1e\x5e\xea\x30\x6c\x9d\x0e\xd1\xaa\x3b\x5a\x9c\xa7\x3d\xa5\xa8\xd6\x68\xed\xbc\x78\xae\x2f\x9a\x51\x19\x01\x30\x56\xfc\x0e\x40\x28\xfd\x6e\xc4\xa9\x33\x21\xb1\x9a\x36\x54\x2c\x47\xfa\x95\xb4\xf7\xf0\x9c\x88\xaf\x92\xad\x2c\x4b\xc5\x6a\x4e\x4d\x54\x6e\xbe\x3c\xc2\x89\x00\x18\xab\x7e\x07\x20\x14\x7f\x27\x36\xa1\x9f\xc4\x5c\x16\xf5\xd9\x3d\x57\x28\xe8\x1c\x59\xcc\xdb\x21\x92\xac\x37\x7a\x15\x1a\x26\xa5\x56\x8a\x0e\x72\x7d\x53\x8e\x08\x80\xb1\xf2\x77\x00\x42\xf9\x77\x64\x55\x3e\x71\x14\xfa\x2f\x02\x95\x72\xcf\xc8\x2d\xf9\x98\x4b\x36\x7e\xbf\x91\xe0\x40\xe4\x4b\xf5\x5b\xbf\xa7\xf5\xf7\xba\x16\x29\x02\x60\xac\xfe\x1d\x80\x50\x00\x5e\xda\x96\xae\x61\x8d\xd1\x17\x69\x8d\x90\xd8\x81\x37\x53\xbd\x38\x1f\x0e\x92\x12\x7e\x22\x38\xa0\xae\x2c\xa7\xf8\xe1\xe4\xfe\x7d\x08\x80\xb1\x02\x78\x00\x42\x09\x78\xb6\x67\xc2\xbe\x66\xd7\x8c\x54\x29\xea\x2a\x88\xa9\x7c\xad\xba\xb1\x4d\xb3\xf6\xe4\xdc\xc6\x91\xea\xec\xf7\x63\xea\x9e\xee\x5f\xf5\x10\x00\x63\x15\xf0\x00\x84\x22\xf0\x9c\xd3\xfd\x8e\xf2\x9d\xd5\x8a\x9e\x26\x3f\xe6\xe6\x4c\x24\x58\x74\xa4\x85\x91\x29\x36\x95\x3f\xa1\x33\x60\xf9\xf0\x83\xd2\x58\x43\x04\xc0\x58\x09\x3c\x00\xa1\x0c\xbc\x2e\x89\xbd\xe3\xbd\xc6\xfe\x64\x12\x07\xe2\xbc\xd5\x12\x56\x2d\x96\x3d\xdd\xa2\xc3\x6c\xc6\x8f\xb6\xdd\x25\x7f\xa2\xe4\x5e\x44\x89\x00\x18\xa3\x81\xb7\x53\x4c\xbb\xcd\xcc\x3b\xc5\x84\x42\xf0\x9c\xc2\x8a\x3f\xc8\xd4\x6c\xae\x3f\x2c\x9f\x3e\x7f\xa4\x90\x63\xe3\x90\x68\xb6\xf6\xfa\x66\xf9\x01\x19\x65\x79\xf7\xec\xf7\x75\xf8\x35\x11\x56\x04\x0f\x40\x28\x05\x8f\x46\xc4\x57\x8a\x84\x33\x9c\xfc\x8b\x1b\xe7\xd8\xa7\x2b\xf1\x4c\x9e\xd4\x55\x49\x24\xa6\xaf\xfb\x39\xbf\x25\x8c\x98\x76\x07\xca\x22\x00\xc6\xaa\xe0\x01\x08\xc5\xe0\x99\x27\x18\x9d\xf4\x3b\xf7\xfa\xc0\xd7\x8c\xb2\xc7\x46\xf5\xc4\xe5\x12\xd7\x06\xdd\x43\x3a\x82\x23\x2d\x97\x71\xdd\x1a\x9f\x9b\xec\x11\x00\x63\x65\xf0\x00\x84\x72\xf0\xbe\xce\xf7\x3f\x2a\x6e\xf9\x38\x50\xbe\x58\xdb\x78\x51\x66\xc4\xe2\x01\xeb\x41\xdb\x0c\xf9\xa2\x9c\xcf\x1d\xc2\xb9\x0f\x92\x33\xf1\x9b\x4a\xac\x0e\x1e\x80\x50\x10\xde\xad\x2e\xe2\x84\x3c\xd2\x7e\xb7\x34\x6b\x8b\xc4\x36\xc1\xe5\x13\x2a\xbf\x24\xb6\xc2\xbf\xd0\x72\x2e\x9c\x3a\x94\xa5\xc6\xad\x75\x03\x01\x30\x56\x08\x0f\x40\x28\x09\x6f\x6a\x7f\xfb\x6a\xae\x7b\x3f\x2d\x83\x1a\x1c\xbb\x44\xac\x23\xdf\xc0\xae\x13\xaf\x11\x66\xaf\x4f\xdd\x4f\xc3\x4f\x91\xfd\xf1\x22\x02\x60\xac\x12\x1e\x80\x50\x14\x5e\xc1\xa4\x92\x62\x97\xe4\xea\x25\x1b\xa5\x16\xa1\x55\x75\xc6\xcc\xa3\xf6\x94\xac\x3c\x73\x4d\xc3\x53\xf0\xa4\xdf\x16\x97\xb7\x0a\x02\x60\xac\x14\x1e\x80\x50\x16\x1e\x63\x9b\x59\x81\x74\xfd\x0d\x37\x43\xbd\xf6\xdf\xcc\x31\x41\x94\x09\x17\x4d\xa9\x7a\x04\x6c\xe2\x22\x9e\x55\xeb\x1e\x79\x43\x8b\x43\x00\x8c\xd1\xc2\xdb\x29\xa6\xdd\xd6\xae\x3b\xc5\x84\xc2\xf0\xdc\x7d\xea\x98\x53\x5c\x92\x27\x27\xae\xe6\x23\x4e\x15\x9e\x7c\x1f\x23\xf6\x6e\x2d\xa7\x05\x8c\x0a\xac\x66\x7e\xd2\x38\x5e\x74\x06\x01\x30\x56\x0c\x0f\x40\x28\x0d\x6f\xc3\xa3\x2c\xa3\x65\x32\xf1\xc7\x1b\xab\x36\x8a\x77\x16\xd1\x62\xac\x2f\xbf\xaa\xca\x3d\xe9\x5e\x7c\xe3\x97\xf4\xc7\x42\xf4\xfb\x15\x04\xc0\x58\x35\x3c\x00\xa1\x38\x3c\x9e\x23\x76\x37\x75\x8e\xd8\xd4\xc7\x9f\xbd\x94\xf1\xf6\xa3\x48\xfb\x31\x97\x19\x11\xc5\x64\x91\x6a\x3b\xd9\xa5\xb9\x1e\xbf\x3b\x00\x01\x30\x56\x0e\x0f\x40\x28\x0f\x8f\xbd\x9f\x39\x9d\xbe\xae\xca\x7e\x89\x3f\xde\x64\x8b\xb2\x60\xcf\x99\x3d\x99\xb6\xc9\x49\x07\x4f\x38\xad\xc7\x84\xe8\x54\x1f\x33\x40\x00\x8c\xd5\xc3\x03\x10\x0a\xc4\x1b\x7d\x9b\xf4\xac\x38\xb1\xbb\x72\x80\x6f\x76\xb3\xcc\x9b\x67\xac\xa2\xba\x30\x46\x30\xf5\xe1\xbe\x27\x44\xaf\x63\xc2\xef\xfb\x29\x22\x00\xc6\x0a\xe2\x01\x08\x25\xe2\x35\x11\xb5\xca\x72\x38\x26\x6e\x52\x7a\x9d\x6e\x5b\xa8\xd2\x58\xd0\x29\xfe\x68\x6d\x84\x14\x65\x5a\xbe\x3b\xdb\xf4\xe1\x30\x1b\x7e\x49\x8c\x55\xc4\x03\x10\x8a\xc4\xcb\xa6\x99\x9e\x10\x7d\xf8\xfe\x47\xe6\x7c\xae\xad\x4d\xe0\xef\x6a\xdf\xe6\x2d\xce\xe0\x61\x4b\xcb\x4d\x9c\x5c\x02\x08\x99\x37\x46\x00\x8c\x95\xc4\x03\x10\xca\xc4\x93\x56\xfc\xe5\xa3\x4b\x7f\xed\xd6\x95\x02\x56\x2f\xf1\xcc\x78\x7d\xcf\x0f\x45\x2f\x2d\x44\x23\xe3\x4d\xfa\x3d\x46\x88\xf5\x8e\x5a\x21\x00\xc6\x68\xe2\xed\x14\xd3\x6e\xbb\xbb\x9d\x62\x42\xa1\x78\x23\x47\x0c\x1e\xf6\x39\xfc\xe1\xb3\x89\x7b\x71\xe5\x92\x5e\x4e\x52\xb6\x2c\x57\x66\xce\xfc\x9e\xfc\x3d\xc7\x3e\x04\xcd\xb8\x8f\x3a\x23\x00\xc6\x8a\xe2\x01\x08\xa5\xe2\x8d\x30\x5f\xb6\x0c\xe0\x7a\x49\x21\xa1\xc8\xa7\x70\x5d\xe2\xbd\x91\xbc\x10\xef\x8d\x1e\xb3\x6e\x12\x68\x0c\x77\xe6\xb4\x15\x29\x7e\xe9\x82\x55\xc5\x03\x10\x8a\xc5\x63\xf0\xa0\x24\x79\xd8\x32\xf9\xa5\x8d\x3a\x5a\xdb\x66\x41\xe4\x26\xce\x93\xc5\xc9\x24\x88\xc7\x26\x9c\xbb\xd0\x25\xe2\x40\x3b\x3b\x02\x60\xac\x2c\x1e\x80\x50\x2e\x9e\x86\x26\xef\xbb\x8b\x90\x4b\x8b\xef\x42\x06\x9d\x36\x77\xdc\x44\x44\x8c\x8d\x61\xf2\x91\xb2\xd5\x86\x5b\xef\x9f\xc4\xfb\x0a\x71\x20\x00\xc6\xea\xe2\x01\x08\x05\xe3\x7d\x7d\xde\xaf\x5d\x42\xda\xa3\xf3\x5c\xb2\xed\xde\x70\x5e\xc1\x5d\x89\xa4\xd4\x8d\xed\x55\xd7\x45\xa7\x8b\x1a\x9a\xe6\x9c\x67\xf1\x37\x21\x56\x18\x0f\x40\x28\x19\xaf\x3f\x5a\x91\xdb\xe5\x47\xaa\x6a\xd8\x21\x92\x5b\x26\x91\x31\x9d\x9c\x72\xde\xe4\x4b\x39\xad\xbe\x54\xcf\x53\xe9\x1f\xdb\x86\xdb\x22\x00\xc6\x2a\xe3\x01\x08\x45\xe3\x85\x5b\xa4\x9c\x7b\x17\x7e\xa8\x4c\x82\x37\x8b\xd2\x01\x91\xe7\xd5\x67\x78\x51\x5f\x57\xf7\x30\x5b\x8c\x6e\xed\x39\xed\x5b\x5e\x2d\x04\xc0\x58\x69\x3c\x00\xa1\x6c\xbc\xa1\x76\xa2\x7b\x4b\xf2\x1b\x4d\x62\xa6\xc4\x97\xb5\x7f\xc7\xf4\xfd\x2c\x8e\x3e\x42\xf9\x44\x28\xe2\x9e\x48\xf2\xf9\x5a\x85\xbd\xbc\x08\x80\x31\xda\x78\x3b\xc5\xb4\xdb\xf9\xc7\x4e\x31\xa1\x70\xbc\xa8\x85\xdb\xef\x74\xe8\x03\x8f\x78\x9e\x33\x63\xcc\xf3\xde\x3c\x75\xa9\xc6\xc5\x6b\xd8\x66\x8a\x69\x35\xcf\xc2\x93\xd6\x0f\xc1\x6f\x46\xb1\xe2\x78\x00\x42\xe9\x78\x87\x12\xc9\x7b\x48\x94\xce\xec\x25\x31\xa8\xbc\xbc\xa4\xe6\x95\x76\x7b\x6f\x4f\x84\x60\x05\xab\x89\x23\x50\x7d\xd3\x3f\x64\x49\x81\x00\x18\xab\x8e\x07\x20\x14\x8f\x67\x35\x93\xd2\xca\x15\x49\x6f\x76\xb9\x70\xf5\xb3\xb0\x57\xe8\xa9\xc4\x63\x4b\xd4\x24\xc4\x54\x33\x55\x6a\x9f\xf4\x8f\x55\x9f\xb1\x44\x00\x8c\x95\xc7\x03\x10\xca\xc7\x0b\x10\xc2\x49\x25\x7c\xba\xf0\x84\xf3\xc2\xbc\xcd\x87\x53\x66\x65\x77\x13\x52\x25\x5e\xab\x1e\xfb\xfd\xd6\x60\x89\x81\x2c\x7b\x19\x3f\xa2\x63\xf5\xf1\x00\x84\x02\xf2\x6e\x34\x73\x5c\x18\xad\x1d\xd7\x4b\xbe\xe0\xe1\x62\x49\xef\x7f\x63\xc1\x6b\xf1\xea\x4c\xc7\x79\x16\x12\xaa\xde\xc8\xe9\xe7\x8e\x0c\x08\x80\xb1\x02\x79\x00\x42\x09\x79\x4f\x56\xaf\xa8\xc7\xab\x5e\x7d\xf9\xe5\x7e\x3d\x33\x55\x86\xde\x6d\x8a\xcb\x25\x14\xec\xc1\xab\x7a\xc5\x3e\x87\x97\x7b\xba\x2e\xe3\xbf\x0f\xac\x42\x1e\x80\x50\x44\xde\xcd\x3b\x0b\x61\xd7\x52\x4f\x9a\x3f\xb4\xf5\xef\xb5\xe8\x59\x78\x11\x7e\xe2\x8f\x81\xcc\xbd\x18\x4e\xc5\x47\x43\x2b\x81\x9e\x91\x27\x10\x00\x63\x25\xf2\x00\x84\x32\xf2\x62\x38\xea\x5e\x3d\xb3\xf1\x65\x6c\x8d\xbe\x65\xa2\xa3\xf7\xa2\xb0\xfb\xc7\x9f\x07\x6c\xd6\x2c\xc7\x75\xa4\x8c\x67\x97\xaa\xac\x34\x10\x00\x63\x34\xf2\x76\x8a\x69\xb7\x13\xc2\x9d\x62\x42\x21\x79\xc2\xb6\xc2\xa0\x35\x6e\x98\x7c\x23\x8f\xf7\x57\x07\xed\xf3\x2a\x1a\xd2\x76\x8d\x9e\xfd\x97\xae\x0f\x3c\x7f\xf7\xf1\x22\x30\xd9\x8f\x00\x18\x2b\x92\x07\x20\x94\x92\x27\x94\xf9\x45\xf2\xd9\xa1\xa6\xc3\x55\x46\x73\x17\x66\x0e\x45\x91\xaa\x73\xb2\x88\xda\x3f\xee\x55\xf2\x99\xf9\x34\x0b\x7d\x1b\x75\x44\x00\x8c\x55\xc9\x03\x10\x8a\xc9\x7b\x75\x8d\x58\xc0\x73\x5e\xde\xf5\xd0\x34\x99\x47\x92\x5d\x32\x5d\x58\x6c\x1a\x17\xc2\xf6\xd2\x81\x49\x3f\x94\xc5\x76\x2f\xc7\x51\x04\xc0\x58\x99\x3c\x00\xa1\x9c\xbc\x1f\x01\x34\x71\x85\xc4\x1d\xdf\xe8\x44\x03\x5b\xb6\xb3\x9f\x99\x1d\x5b\x79\x75\x88\xf5\x4c\x91\x3e\x0f\x6f\x6f\xb8\xa5\xb5\x39\x33\x02\x60\xac\x4e\x1e\x80\x50\x50\x5e\x21\x6c\x7c\x48\xb7\xf6\xb4\x99\x4c\x5a\x55\x45\x4c\x8c\xb1\xe3\xc5\x72\xc6\x28\x76\x86\x95\x4f\xf0\x1b\x79\x5e\x7e\xab\x27\xf8\x4d\x35\x56\x28\x0f\x40\x28\x29\x8f\x9c\xf9\xfa\xec\xb7\x3c\xe6\xa8\x10\x77\xb3\x47\x2f\xf9\x54\x75\x67\x65\xde\x82\x05\xe7\x6b\xf4\xef\x04\x8e\xcd\x9a\xd8\x87\x8a\x23\x00\xc6\x2a\xe5\x01\x08\x45\xe5\x59\xa7\x7c\x98\xf6\xf8\x28\xf9\x90\xfd\xf9\x8a\x4c\xae\x68\xf3\x86\x97\x50\xb2\x92\x09\xd5\x9e\xe6\xc3\xd4\x39\xf3\xa5\x9e\x19\x97\x10\x00\x63\xa5\xf2\x00\x84\xb2\xf2\x2e\xd8\xd3\x97\x1b\x6e\xaa\xd3\x13\xdb\xfd\xae\x27\x8a\x1a\x9f\xe8\x08\x09\xfc\x60\x27\x09\x92\xb6\xde\x28\x2e\x85\x4f\x05\xe2\xf7\x4c\x18\xad\xbc\x9d\x62\xda\xed\x0c\x7d\xa7\x98\x50\x58\x9e\x45\xe2\xfa\x15\xe8\x6b\x56\xa9\x54\x60\x81\x08\xfd\x11\xf2\x7b\xb1\x36\xd6\x61\x7c\xf3\xf0\x05\xca\x15\xb6\x63\xbd\xf9\xc2\x46\x08\x80\xb1\x62\x79\x00\x42\x69\x79\xce\xfe\x8c\x37\x1b\x0a\x3e\xbd\x0f\xf3\x7e\x2d\xd2\x4e\x74\xc5\x7c\xf9\xd9\x61\x9c\xfd\xe8\x65\xfe\x3f\xd5\x1a\x72\xf0\xb3\x17\x8c\x08\x80\xb1\x6a\x79\x00\x42\x71\x79\x35\xc7\x4a\x6a\x18\xae\x74\xe8\x1f\xcd\x63\x0c\xa3\x9b\x5e\x5f\x2a\x43\xf8\xfc\x52\x35\x15\xc7\xb4\x7e\x97\xdd\xa8\x7d\x1a\x6f\x8e\x00\x18\x2b\x97\x07\x20\x94\x97\xc7\xd8\x7a\x45\x46\xb6\xf6\x6a\xc2\xfd\xa8\x28\xd3\xcf\x2b\x9e\x31\x62\x05\x31\x01\x1c\x29\xeb\x2c\x06\x9f\xc5\x74\x1f\x71\xfc\xa4\x47\x00\x8c\xd5\xcb\x03\x10\x0a\xcc\xf3\x21\xe1\xe9\x3b\xe7\x6a\x4c\x33\x1f\xca\x42\x01\xd5\xaa\x91\x6b\x87\x3f\x38\x7e\xff\xc9\x3d\x89\x0b\xbf\xa0\x73\x17\x4d\x2d\xed\x10\x00\x63\x05\xf3\x00\x84\x12\xf3\xf6\xb0\x90\x27\x78\xbb\xb0\xbc\x13\xde\xa2\x9f\x79\xa7\x12\x1d\x1c\x84\x3b\x3a\xc1\xba\x2d\x6a\xa4\x12\x50\xd8\xab\xf4\xac\xc7\x1a\x01\x30\x56\x31\x0f\x40\x28\x32\x6f\xa8\xe7\xfa\xec\x7e\x81\xfc\x5e\x43\xa7\x19\x31\x11\xf6\xfe\x9c\x5f\x86\xfb\x5b\xf9\x99\xe4\xad\x9a\x68\x3a\x0c\x53\xcb\xf4\xf1\x7b\x3f\xac\x64\x1e\x80\x50\x66\x9e\xcd\xe0\x13\xda\xc2\x3b\x85\x11\x25\x1b\x19\xcd\x4e\x94\x63\x82\x7c\x0b\xaa\xa6\x4e\xeb\x3c\x9a\x71\x3c\xbf\x19\x59\x4a\x5c\xb8\x10\x00\xff\xa3\x99\x47\x27\xc0\xc8\xf7\x7c\x76\xad\xfd\xa5\xe4\xeb\xf2\x43\x3a\x77\x8a\x14\xc9\x6f\x6d\xa9\x54\x1c\xfc\x6a\xa7\xc4\x59\x7f\x56\x7b\xfa\x22\xea\x61\x5f\xba\xf9\xe2\xcf\x2f\x8f\x3d\x57\xe7\x7d\x7a\x9a\x23\xd4\x06\x28\x13\xf5\xac\xeb\xb6\x1c\x66\x22\x98\x48\x80\x16\xbd\x4e\x2c\xeb\x5f\x4d\xf9\xa4\x3f\xcf\x3d\x70\x6e\xb6\xe7\x7c\x1b\xe8\xad\x23\x12\xca\x74\x94\xf4\x9d\xe7\xb0\xe6\xbb\x7d\xc4\x03\x56\x25\xf2\x87\x5d\x8c\xff\x6a\x7a\xa2\xdd\xca\x98\x3a\xec\x50\x6c\x4c\x28\xd5\xd9\xb2\xc3\xb0\xb1\x5c\xbb\x5b\xed\xa5\x47\xd3\x75\x1a\x6b\x36\xe4\xd2\xb0\x25\xf7\xdf\xff\x03\x6a\xaa\x18\x1f\x1d\xf1\x7b\x61\x8f\x32\x93\xe8\xd9\xa1\x00\x03\xbd\xa6\x82\x89\x43\x34\x87\x3f\x5a\xfc\xb8\x73\x8d\x56\x51\x55\xe2\xaf\xa6\xd3\xeb\x5f\x83\xfb\x7b\x3e\x32\xb0\x3b\x0b\x27\x2d\x54\xe5\x24\x6f\x84\x31\xff\x5a\x08\x8b\x7f\x97\xda\xa6\xfb\xd3\x79\x28\xe2\xec\x5f\x4d\xe9\x18\x3d\xbe\xcb\x5a\x32\x54\xb7\xf2\xd0\xd2\x8e\x34\xcc\xb9\x86\x4f\x14\xfb\xa7\x48\x6f\x0c\x0e\xdf\x8c\xe9\xab\x1b\xf0\xe8\xfb\xab\x69\xdc\xa2\x4b\x9f\xd3\x6d\x78\xf3\xd2\x5d\x4a\x8d\xc8\x07\x8f\x5e\x9e\xef\x61\x2c\x1d\x27\x33\x1e\x7d\x3d\x45\x55\xde\xb7\xa9\x63\xfe\x57\x53\x13\x6e\xe9\x96\x9a\xf2\xf0\xc9\x0e\x11\xa7\xe7\x32\xef\x0e\x59\xa7\x16\x1e\x34\x0b\x76\x22\x11\x7c\x38\xbd\x14\x6e\xc7\x7a\x7f\xf8\x7f\x0f\xfb\x76\xfb\x54\x77\x46\x34\x14\x9a\x47\xff\xe6\xe7\xed\x47\xad\x31\x86\x03\xec\xe9\xcf\x24\x7c\x7e\xff\xf9\xec\x74\x33\x99\x01\x9c\xda\x5a\x00\x59\x2f\x4c\xd4\xac\xd8\x10\x00\x63\x45\xf3\x00\x84\x52\xf3\xae\x19\xd6\x4a\x7e\x78\x74\xe9\x84\x4a\x23\xc5\x01\x51\x2a\xeb\x58\xd2\xd4\xeb\x7a\x4f\x3a\xd8\x1c\xa3\x2e\x46\xb9\x6f\x9d\x1e\x21\x46\x00\x8c\x55\xcd\x03\x10\x8a\xcd\x9b\xf5\x88\xb9\xa1\x9b\xaa\x73\xfd\xc9\x86\xe7\xe9\x49\x9e\xfb\x45\x5c\x0c\x49\x37\xad\x8e\x94\x0b\xff\x11\x36\x6a\xe1\xa6\x1d\x96\x41\x00\x8c\x95\xcd\x03\x10\xca\xcd\xf3\xfd\x15\xfa\xf0\x09\x99\xcc\x5b\x8d\xe6\xd7\xdb\xdc\x37\xee\x81\xbd\xad\x01\xb9\x22\x5d\x7b\x1f\xdc\x93\x16\x19\xbf\xbe\x9d\x8e\x5f\x3f\x62\x75\xf3\x00\x84\x82\xf3\x9e\x2d\xee\x89\x37\x7e\x9f\xe0\xe8\x45\x65\xc7\x75\x38\x2f\x50\xce\x29\xc7\xf3\x51\x43\x1d\xc9\x86\x43\x73\x78\x6b\xe5\x55\xba\x43\x08\x80\xb1\xc2\x79\x00\x42\xc9\x79\xe7\xca\xca\x8c\xbb\x0e\x89\x0e\x49\x7a\xfc\x38\x4b\xdd\xb5\xe2\x4b\x93\xee\x64\x4f\x9d\x5e\xc3\xea\xe4\xd9\x30\x51\xfb\xea\xfd\x79\x04\xc0\x58\xe5\x3c\x00\xa1\xe8\xbc\x67\xa7\x87\x92\x0c\x75\x9b\x19\xb8\x6f\xad\xeb\xa5\xa7\x0d\x1e\x5c\x98\x95\x20\x8b\x70\x4a\x6c\xbf\xe5\x1c\x17\x6f\xf4\xeb\x8c\x10\x02\x60\xac\x74\x1e\x80\x50\x76\xde\xf7\x97\x47\xf3\x22\xaf\x23\x89\x63\x57\x18\x5f\xff\x20\xbd\xdb\xca\xe6\xe1\xe1\xf0\x7d\x80\xb7\xee\x6e\xae\xca\xda\x89\x0d\x79\x2a\x04\xc0\x18\xed\xbc\x9d\x62\xda\x6d\xdc\xd9\x29\x26\x14\x9e\x57\xc9\xae\xe4\x6e\x4c\xe9\xa1\x11\x90\xbb\xbf\x8b\xef\x97\x44\x45\xa2\xec\xfb\x9a\xad\x71\x75\x2b\xed\xa2\xc0\xa3\x2a\xca\x62\x22\x08\x80\xb1\xe2\x79\x00\x42\xe9\x79\xe5\x39\x24\xe7\x84\x16\x1d\x17\xbe\xc7\xa4\x46\x74\x86\xb1\x56\x8a\xdd\x21\xff\x32\xe9\x99\x1f\x65\xd4\xd0\x5a\x7c\x7e\xd2\xef\x0c\x02\x60\xac\x7a\x1e\x80\x50\x7c\x5e\xd0\xbe\xed\x9e\x19\x29\xe2\x64\xb7\x92\xb7\x46\x49\xc5\x75\xc5\xb9\x26\xdf\x7f\x7b\x64\x87\x14\x64\x8c\x8a\xd8\x79\xa8\x5a\xcb\x21\x00\xc6\xca\xe7\x01\x08\xe5\xe7\xfd\x79\x20\xcb\x74\xe2\x1a\x97\x0e\x29\x7b\x4e\x8a\xb5\x78\xe9\x95\x49\xd1\x85\x80\xce\xb6\x6b\xbc\xab\x31\xdd\x25\x1f\x6a\x03\xf1\x1b\x3e\xac\x7e\x1e\x80\x50\x80\x5e\x0e\xae\xdb\xee\xae\x5c\x2d\x9b\x70\xf7\xb3\x8b\xa6\xd1\x7e\x1d\x00\x5a\xf6\x89\x9b\x0b\x0a\xcb\xf9\xb8\xf6\x29\x7b\xb3\x19\xbf\x67\xc0\x0a\xe8\x01\x08\x25\xe8\x19\x27\xda\xfd\xfe\xdc\x75\xb8\xbf\x2f\x27\xf8\xa0\x64\x63\x62\x63\x91\xe1\x71\xe5\xf2\xa0\x81\xcd\x8b\xaf\x8b\xd9\x5b\x7e\xbc\xc2\x0f\x6e\x58\x05\x3d\x00\xa1\x08\x3d\x9c\x65\xa5\xfc\x1e\x55\xe0\xa5\x65\xa9\xe4\xc8\xc3\xbb\xb5\x54\xdf\x40\x92\x5d\xf8\x7a\xe3\x95\xe0\xaa\x64\x0c\xed\x89\x8f\xa6\x08\x80\xb1\x12\x7a\x00\x42\x19\x7a\x07\x3b\x45\x4c\xce\x07\x8c\xb4\x4e\x48\x11\xb9\x3f\xe4\xec\xfa\xc5\x15\xe8\x64\x4e\xd1\x68\x42\x54\x3f\x10\x9a\x70\x64\xac\x01\xbf\x5c\xc3\x68\xe8\xed\x14\xd3\x6e\x33\xf3\x4e\x31\xa1\x10\x3d\x17\x9f\x81\x82\xdb\x77\x14\x24\xd5\x66\xa7\x3a\x99\x83\x8f\xdd\x88\xaa\xa0\x61\xa3\x1d\xd9\xd4\x38\xb3\xda\xf3\x58\x57\xd2\x5d\x07\x01\x30\x56\x44\x0f\x40\x28\x45\x2f\x48\x66\xaa\x90\xef\x97\xcc\x40\x0f\xd3\xc8\x51\x89\x38\x65\xed\x43\x53\xe9\x92\xf7\x7e\xfd\x38\xe9\x40\x53\xd0\xbf\xa2\x1c\xe0\x84\x00\x18\xab\xa2\x07\x20\x14\xa3\x97\xaf\xd8\x6b\xc4\x18\x64\x56\xd7\xb3\xb8\xf9\x47\xc0\xac\x79\x8d\xd3\x82\x9a\xec\xb9\xcc\xd3\xc1\x5c\x86\x7b\xa7\x44\x0f\x4f\xe1\x07\x05\xac\x8c\x1e\x80\x50\x8e\xde\x04\xe9\x0f\x62\xc3\xf9\x34\xd9\xd2\xe6\x65\x9a\x8f\x6c\x4a\x8c\x19\x2c\xd4\xe5\xce\x85\x72\xdf\x5b\xf3\x98\x7f\xba\x6b\x35\xb3\x23\x00\xc6\xea\xe8\x01\x08\x05\xe9\x39\xdb\x3d\xc8\x0c\xee\x2d\x73\xd4\x9d\x23\x8f\xbb\x25\xaf\x28\xdd\x5d\x4b\x7f\x67\x22\xbf\x40\xf3\xe3\x25\x9a\x94\x7e\x96\xb7\x44\x08\x80\xb1\x42\x7a\x00\x42\x49\x7a\x5b\x63\xef\x28\xf6\x7e\xc5\x4d\x7d\x7a\xcc\xff\xb6\x6d\xfa\xb7\xac\xb3\xc0\x18\x4f\xdb\xf7\xfd\xfd\xcd\xcf\x8f\xfa\x4b\x65\x96\xe1\x37\x95\x58\x25\x3d\x00\xa1\x28\xbd\xfe\x33\xdf\x0b\x55\x94\xda\xd5\x0e\x0e\x3d\xbf\x77\xba\xc3\xf9\xcd\x96\x68\xbb\x9a\x3d\xfb\x69\x12\x7d\x36\xdd\x3e\xce\x8c\xb8\xcb\x08\x80\xb1\x52\x7a\x00\x42\x59\x7a\xde\x35\x9c\x8e\xa7\x69\x2f\xcd\xbc\x88\xed\x79\x31\x6a\xf8\xf6\xf6\x54\xcd\xca\xfe\x4c\xb1\xb5\x87\x99\xdb\x7b\xea\x2e\x1e\x55\x93\x40\x00\x8c\xd1\xd2\xdb\x29\xa6\xdd\xd6\xae\x3b\xc5\x84\xc2\xf4\xd4\xf7\x7d\x4f\x98\xbe\xdd\x9d\xdd\x70\x61\x90\xcb\x35\x6e\xce\xed\xc5\xed\xab\xfa\x5f\x9a\x1b\x85\xf4\xcf\x27\x17\x9c\x13\xbf\x61\x89\x00\x18\x2b\xa6\x07\x20\x94\xa6\x67\x56\x1b\x74\xc1\x23\x88\x57\xfe\xc9\x40\x60\xa6\xd2\xe8\x68\x8a\x7e\xec\x78\xc1\x04\x7b\xee\xf9\xe0\x18\xee\xa8\x49\xf6\xe3\x0c\x08\x80\xb1\x6a\x7a\x00\x42\x71\x7a\x16\x0e\x6a\xf6\x5e\xdd\xa7\xf5\x6f\x4a\x09\x47\xb8\x97\x70\xa4\x13\x51\x78\xb2\xb8\x4a\x79\x3f\xc8\xf3\x75\x58\x96\x51\xeb\xc0\x2f\x5d\xb0\x72\x7a\x00\x42\x79\x7a\x31\xc3\xfe\x79\x2f\xd6\x54\x06\xbf\x67\x35\x45\xde\x7a\x2e\xe9\xe0\x46\x19\x2e\xe3\xd0\x4b\xb7\x15\x12\xff\x46\xc4\x6c\xdd\xd1\x10\x01\x30\x56\x4f\x0f\x40\x28\x50\xaf\xe8\xc2\xb9\xb3\xe9\x9c\x1b\x7f\x1c\xca\xee\x32\xd5\xd1\x4c\x55\x2b\x4f\xe9\x5e\xb3\xbc\x35\x20\xdc\x79\x50\xb9\xe4\x16\x14\x73\x16\x01\x30\x56\x50\x0f\x40\x28\x51\x8f\x26\x50\xe7\x62\xe8\x9b\xb4\xe8\xdb\x64\x16\x63\xb7\x2b\x9f\xd7\xbc\xad\x6a\xb0\xb9\x67\xd1\x5e\xcc\x20\x5f\xca\x7e\x37\xbf\x08\x3f\x33\x61\x15\xf5\x00\x84\x22\xf5\xac\x3e\x73\xf4\x1f\xe1\xd3\xbf\x76\xfc\x47\x56\xf1\x5b\x45\xce\x5e\x85\x44\xe2\x2f\x14\x0d\x69\x65\x34\x75\x27\x28\xf3\x32\xbd\x68\x11\x00\x63\x25\xf5\x00\x84\x32\xf5\x7e\x37\x1e\xcb\x01\x93\x7c\xc3\x2c\xda\x0f\xfc\xb6\x4e\xef\x3f\x6a\xfb\x50\x40\xaf\xe3\x41\x62\xe2\x39\x21\xc7\xda\x7b\x3c\x9d\xa7\x11\x00\x63\x34\xf5\x76\x8a\x69\xb7\xdd\xdd\x4e\x31\xa1\x50\x3d\x56\x65\x6f\x83\xba\x86\xf9\x92\x5f\xb3\x32\x97\x4a\x1d\x3e\xe4\xaa\x7a\xd9\x4a\xd2\x09\x88\x70\x5f\x1b\x78\x64\x3b\x16\x32\xaf\x8d\x00\x18\x2b\xaa\x07\x20\x94\xaa\xd7\xe9\xf0\xe2\xb7\xa0\xd1\x0a\xd5\x9e\x76\xa1\xbb\xe4\xac\xfc\xb6\x4e\xe2\x02\x5f\x9d\x79\x6d\xe5\xfa\xb9\x34\x93\x9c\x38\x8e\x6a\x20\x00\xc6\xaa\xea\x01\x08\xc5\xea\xbd\x2f\x49\x8f\x20\x17\xbf\xe8\x3c\x1b\xf7\x09\xfa\x4c\xaa\xc3\xe3\xf7\x78\x5d\xc1\x28\x6c\xf8\x46\xad\x30\xc3\xa4\xfe\x17\xce\x23\x08\x80\xb1\xb2\x7a\x00\x42\xb9\x7a\x94\xca\x0f\xbb\x7a\x5e\x1e\xb8\x77\xd0\x7c\x99\x82\x36\x36\xbb\xaf\xe5\x7b\xf1\xec\xb3\x40\xbe\xc4\xc7\xc3\x67\x68\x8b\x2a\xef\xd8\x22\x00\xc6\xea\xea\x01\x08\x05\xeb\x5d\x08\xd0\xf8\x75\x2a\x6c\x7d\x73\x5c\xd6\x74\xe3\xd5\x6d\x09\x85\xd7\x64\x02\x72\x33\x1e\x87\x0d\x0f\x8f\x7c\x73\x3d\x2a\x33\x0d\x10\x00\x63\x85\xf5\x00\x84\x92\xf5\x32\xc7\xd6\xe3\x0f\x67\xbc\xdb\xc3\x47\xba\xaa\x9b\xd5\xa1\x9b\x5d\x5e\x13\x17\x63\xb2\xda\xf5\xe5\x76\xcf\xf0\xf2\x43\x76\x05\x35\x04\xc0\x58\x65\x3d\x00\xa1\x68\xbd\x23\xc5\x97\xf7\x6a\x2f\x13\xed\xd7\x20\xf9\x29\x50\x32\x36\xa8\xc6\x24\x9f\x5d\xb3\x49\x6e\x7d\x7f\x29\xe9\xab\xba\xfb\x37\x7b\x69\x04\xc0\x58\x69\x3d\x00\xa1\x6c\xbd\x1f\x86\xfd\x6d\x99\x0c\x1e\x93\x94\x21\xad\x65\xc2\xf2\x82\x2c\x5e\x2e\x06\xbf\x36\x56\x44\x8b\x96\xdc\x58\xc9\x6c\x33\x98\xf8\x10\x00\x63\xb4\xf5\x76\x8a\x69\xb7\xf3\x8f\x9d\x62\x42\xe1\x7a\x4e\x17\x7b\x86\xbf\x07\x1c\xaf\xbf\xa5\xe1\xff\xe8\xf3\xfd\x4c\x0d\x97\x99\x8a\xcd\xca\x70\x52\xe5\x0b\x02\x17\xb7\x44\x1b\x7e\x71\x21\x00\xc6\x8a\xeb\x01\x08\xa5\xeb\xdd\x60\x3e\x7f\x73\xe5\x80\x8b\x85\x5a\xdd\x20\xf9\xdb\x57\x3c\x0e\xd9\x57\xa8\xe8\x69\x0e\x84\x2c\xb5\xe6\x64\x9f\xec\x18\x1d\xbe\x81\x00\x18\xab\xae\x07\x20\x14\xaf\x17\xfc\x26\xdc\x51\xa9\x5b\xf8\xa2\x6f\xfb\xb2\x54\x1d\xc3\x55\x8f\x6f\x42\x82\xd7\x4e\xbc\x63\xbb\xfa\x20\x7e\xdc\xde\x7f\x78\x13\x87\x00\x18\x2b\xaf\x07\x20\x94\xaf\xe7\x45\x7e\xb5\x77\xf5\x72\x63\x8d\x59\x48\xf2\x46\x22\x77\x17\x2e\xa0\xc0\x99\x81\x2e\xef\xb3\xe3\xed\x0e\x95\xdf\x94\x62\x0e\xf8\x4d\x35\x56\x5f\x0f\x40\x28\x60\x4f\xfc\x7a\xc8\xe9\x0c\xf2\x22\x6b\x20\x4f\x79\x81\x25\x45\x7d\xf0\xdb\x07\xce\xfd\x1e\x24\x8c\xf3\x6a\x35\x6f\x37\x47\xce\x13\xe1\x47\x5b\xac\xc0\x1e\x80\x50\xc2\x1e\xed\x2a\xff\x77\xdf\x3d\x0c\x52\x5f\x73\x28\x97\x78\x36\x16\xe5\x15\x85\xa5\x4e\xe5\xa6\x08\x46\x55\x65\x3f\x88\xbb\xd7\x65\xce\x81\x00\x18\xab\xb0\x07\x20\x14\xb1\x77\xc3\xc9\xb5\xa3\xee\xb2\x13\x83\xca\xd4\x9d\xae\xa0\xeb\x71\x03\x5b\x75\xce\x7e\xca\xd7\xe5\xaa\x99\x36\x6f\x6d\xca\x2d\xd3\x4a\x21\x00\xc6\x4a\xec\x01\x08\x65\xec\xd1\xee\x93\xa8\x72\xe5\x38\x1a\x44\x7f\xb2\xa4\x9b\xbc\xcf\x79\xf8\x5d\xa9\xc4\xb5\xb4\x24\x8d\xe9\xb8\xe3\xa9\x96\x53\x37\x20\x2d\x04\xc0\x18\x8d\xbd\x9d\x62\xda\xed\x84\x70\xa7\x98\x50\xc8\x1e\xc9\xf4\x99\xbd\xca\x41\x93\x05\x8a\x47\x8d\x72\x2f\x66\x3e\xed\x31\x0e\x91\xa3\xee\x71\xe5\xf4\xa9\x96\x19\x50\xa8\xac\x1e\xba\x89\x00\x18\x2b\xb2\x07\x20\x94\xb2\x17\x21\x73\xa3\xa9\xf7\xe5\xf2\x97\x53\x6b\xbd\xf2\x52\x6d\x7d\xc6\x5d\x77\xdd\xfe\xa8\x9a\x86\x05\xef\x69\xa2\xfa\x02\x2a\x54\x0f\x21\x00\xc6\xaa\xec\x01\x08\xc5\xec\x59\x97\x7c\x31\xd3\xd2\x79\x96\x35\x28\xd0\x7a\x57\x67\x85\x24\xa5\x98\x37\x94\x93\x53\x95\x92\x7e\xe3\x75\xe7\xa2\xfc\x02\xa7\x1d\x02\x60\xac\xcc\x1e\x80\x50\xce\xde\xf5\x17\x40\x7c\x7f\xf0\x2c\x45\x6b\x66\xfb\x5d\xa1\xa7\xaa\x75\x4f\x5d\x44\xd4\xab\xdd\xf7\x49\x5e\x1e\x35\x89\x73\x7f\xf2\x93\x11\x01\x30\x56\x67\x0f\x40\x28\x68\x6f\xe1\x71\x89\x54\x4a\xd8\xcb\xd7\xc9\xe5\x95\xaa\x05\x19\xd5\x1f\x28\x9e\x64\x1a\xd3\x7b\xa4\xaa\xf5\x1d\x14\x81\x4d\xd6\x02\xf1\x2b\x05\xac\xd0\x1e\x80\x50\xd2\xde\xa9\xf7\xab\xae\x0e\xbc\x89\x46\x5d\xaf\xeb\x38\xc5\x37\x14\x68\x6a\xf3\xe6\x95\xd9\x52\xae\x33\x3d\xf2\xff\xf2\x20\x30\xe9\x35\x39\x02\x60\xac\xd2\x1e\x80\x50\xd4\xde\x5b\xe2\xea\xc3\xc7\xb9\x3f\x6c\xaf\xfe\xbc\x72\x13\x67\x66\xdc\x74\x9c\x5b\xbc\xa7\xe0\xb2\xbb\x7f\x4d\x6c\x02\x5b\x50\xf6\x19\x61\x04\xc0\x58\xa9\x3d\x00\xa1\xac\xbd\xfb\x0e\x5a\x12\x11\x02\x2f\xe8\x2a\x8d\x8f\x5b\x91\xc3\x4a\xb1\xf7\xe8\x2e\xb5\xb2\x07\xc5\xb3\x88\x41\x15\x6f\x86\x1b\x4a\x64\x10\x00\x63\xb4\xf6\x76\x8a\x69\xb7\x33\xf4\x9d\x62\x42\x61\x7b\x4b\xb8\x7a\xb7\xb4\x31\xe7\xb8\x89\x8b\x35\x86\x8b\xd7\xdf\x77\x64\x47\x57\x15\xf0\x11\xcb\xed\x11\x26\xaa\x8e\xf3\xf9\x94\x86\x1f\x09\xb1\x62\x7b\x00\x42\x69\x7b\x7e\xb5\x8d\x1f\xdb\xae\xc9\x7f\x32\xb1\xba\x4a\x54\x39\xf9\x3d\x76\x8b\xe6\x59\x14\xf7\x35\xf6\x0f\x2a\xb1\x64\x73\x0c\x27\x45\x75\x11\x00\x63\xd5\xf6\x00\x84\xe2\xf6\xca\x7c\x57\x8b\xdd\xcd\x7e\x57\x89\xce\x34\xd3\xf2\x5b\xb6\xa8\x3e\xe9\x4a\xb2\xd8\xce\x8c\xf8\xb0\x6e\xbe\x59\xa6\xb4\xdf\x04\x3f\xe5\x63\xe5\xf6\x00\x84\xf2\xf6\xdc\xf3\x6d\x89\xd6\xf2\x5d\x3e\x68\x27\xb1\x73\xd5\x1f\x99\x7f\x72\xa2\x2d\xd5\x3a\xac\x28\x49\x59\xd1\x8c\x3b\xa4\x7e\xf8\x10\x2f\x02\x60\xac\xde\x1e\x80\x50\xe0\x9e\x06\x37\x69\x5f\x61\x7c\x41\x13\x4d\x89\xef\xcd\xee\xbe\x37\x39\x62\xcb\xc6\x8a\x34\x83\x5e\xcf\x56\x42\x18\x7f\x3d\x65\x56\x91\x45\x00\x8c\x15\xdc\x03\x10\x4a\xdc\xfb\xc3\xaf\xc8\xef\x21\x1b\x68\x3b\xdd\xd7\xfe\x40\x89\xc8\x61\x29\x99\x65\x60\x9f\xa6\x05\x6b\xbb\xc2\xf7\xb9\x6d\xd6\x62\x27\x51\x04\xc0\x58\xc5\x3d\x00\xa1\xc8\xbd\xa6\xb4\x53\x81\xaa\xf0\xc7\x0d\xc1\x58\xf6\xb3\x3d\xde\xf2\x0a\xcf\xde\xc9\x91\x5d\xeb\x81\xcf\x17\x8a\x4a\x52\x2e\xb9\x76\x1e\x47\x00\x8c\x95\xdc\x03\x10\xca\xdc\xeb\x78\x34\x71\xac\x4c\x21\xa6\x57\x9e\x74\xdd\x79\xe4\xa2\x71\x15\x4e\xfe\x61\x7a\xfb\xa0\xda\x95\xc7\x56\x3f\xa2\x24\x2a\xfe\xef\xff\xc6\xfe\xd1\xdc\xcb\x72\xda\xaa\xe3\x7c\x76\x49\x5b\x5a\x5b\x5d\x4b\x3e\x8a\x7b\xab\x79\xe9\x90\x4a\xeb\xb1\xf6\x60\x0f\x96\xe4\x48\xca\x65\x26\x19\xd4\xc3\x3e\xc6\x10\xcd\x17\x7f\x86\xc5\x59\xe7\x7e\xa8\x99\x73\x90\x7f\x52\x7b\xe4\x3c\x32\xc8\x38\xb1\x5c\xc0\xe9\xa5\x13\x37\xbd\xca\xb3\xf8\xf7\x9f\x58\x5e\x0a\xfc\x30\x35\xc3\x51\x15\x2a\xff\x71\x53\x4d\x19\xd2\x71\xcc\x97\xfe\x72\x34\x9c\x84\x29\xfa\x77\xd7\x64\x9b\x5a\xb2\xf8\x5f\x4d\xef\x98\x93\x2d\x58\x9a\xdb\x2d\xe8\x50\x92\x0e\x2c\xbd\x99\xec\x9e\x8b\xd1\x0f\x56\x09\xa4\xc9\xb2\xbe\xe3\xa4\x33\xcc\x7c\xfd\xfa\x5f\x4d\x4f\x31\x2a\x19\xb5\x92\x1a\xf9\x12\x17\xde\xef\xbb\x24\xcb\xec\x7e\x65\xf3\xe9\xde\xfb\xa1\xbd\x8e\xc3\x11\xd5\xf3\xaf\x2c\xee\x9a\xfe\xd5\x54\x84\xa6\xa5\x13\x76\x60\x0b\xb0\xf8\x66\x9b\xfc\x90\xd8\x17\x5c\x61\x16\xd5\x50\x18\x1f\x4f\x36\xea\x3c\x55\x15\xa3\x77\x7b\xe5\xaf\xa6\xbd\x3e\x36\x5d\x21\x12\x6e\x9f\xa9\x64\xde\x3f\xe4\x56\xd2\x11\x3b\xa0\x7c\x93\xb4\xdd\x63\x9f\xad\x8d\xd0\x29\xb9\xe5\x9c\x2d\x83\xbf\x9a\x96\x09\x73\xf5\x0e\x8e\x48\x7b\xc6\x38\xeb\x3e\x9d\x08\x62\x33\xcf\x3a\x30\x4e\xc7\xf0\x72\xe2\xcf\x02\xb3\x8c\x56\xeb\x2c\xe3\xdf\x17\x90\x72\xce\xe6\xb3\xe2\x1b\xb5\xf9\x32\x41\x86\xfa\x11\x86\x95\x35\xa1\xa5\xaa\x8d\x1e\xee\x44\x0a\x5b\xf9\xc6\xf4\xb0\x33\x47\xa4\xfe\xf7\xb0\x6f\xb7\x4f\x75\x67\x44\x43\xa1\x7b\x6a\xbf\x35\xa7\x9e\x1f\x55\x19\x30\x4c\xcf\x23\x7b\xb4\x50\xb1\xa2\x1f\xe3\x3a\x63\x10\x1d\xd4\xb9\xf7\x96\x52\x79\x1f\xc5\xd0\x01\x04\xc0\x58\xd1\x3d\x00\xa1\xd4\x3d\x85\x07\xe9\x7f\x6e\xc8\x9c\xae\x3d\x92\x52\x5d\x2c\xd4\x91\x36\x21\xda\xb8\x05\xdb\x75\xca\x2f\xae\xd2\x9c\xf8\xf0\x9c\x64\x42\x1e\x01\x30\x56\x75\x0f\x40\x28\x76\xaf\xcf\x9a\xfe\x7b\x54\xc5\x49\x7d\xe3\xed\x7b\x93\xe5\x71\xe9\x5e\xa7\x25\x23\x86\xa8\xd3\xe2\xfd\x06\xec\x3b\xe6\x0e\xb6\x13\x5d\x46\x00\x8c\x95\xdd\x03\x10\xca\xdd\xe3\xbc\x1e\x57\xa7\x18\x52\x56\xf6\x93\xff\xf9\x93\xbc\xd3\x65\x4d\x37\x54\xf7\x47\x85\xff\xce\xec\x89\xbe\xf1\xb5\x3e\xaf\xf2\x0b\x35\x02\x60\xac\xee\x1e\x80\x50\xf0\x9e\x82\x77\x0d\xe9\x7b\x53\x7f\xf6\xef\x0f\xc5\xce\x6b\x79\xa8\xc7\x23\x17\x47\x62\x10\x85\x0f\x4d\x06\x17\x22\x9a\x28\x8a\x97\x0c\x11\x00\x63\x85\xf7\x00\x84\x92\xf7\xce\x8e\x8b\xf9\xd6\xd1\x4d\x84\x13\xbd\x4f\x17\xfc\xe1\x1f\x2e\x5a\x5c\xa7\x9d\x7f\x76\x73\xd6\x79\x8c\xeb\x2b\xdb\x57\xf1\xcf\xc6\x08\x80\xb1\xca\x7b\x00\x42\xd1\x7b\xd5\x93\x45\x6a\xda\x6e\xb2\x73\xc4\xe7\x7f\x8f\x86\x2a\x28\xfb\x7e\xfb\x34\xdc\x7c\xcc\xe5\x60\x95\x3d\x5d\xdf\x75\xa6\x31\x32\x47\x04\xc0\x58\xe9\x3d\x00\xa1\xec\xbd\xc0\xa2\x6b\xb1\x4d\x16\xfd\x99\xd5\xb4\x37\x7a\x6e\x6b\x3c\xbd\x9a\x87\xc4\xb2\x47\xd2\x3e\x0a\x58\xe3\x2f\x9f\xff\xcc\x7c\x05\x3f\x6a\x62\xb4\xf7\xfe\xf7\xc3\xff\x5d\xc6\x9d\x9d\x62\x42\xe1\x7b\x50\xad\x77\x8c\x4f\xd2\xdb\x90\xe3\xb5\xec\x0c\x49\xdb\x2f\x45\xd9\x78\x88\x07\x5f\xce\xbf\xf5\xa1\xde\xa0\x3e\x6c\x2b\xb9\x86\x5f\xdb\x61\xc5\xf7\x00\x84\xd2\xf7\xca\x32\xed\x88\xa5\x35\x8e\x79\x93\x26\x93\x79\x1b\xe9\x49\xd0\xd4\x19\xf3\x0c\xd1\x18\x84\xbb\x7e\xd8\xe7\xf9\x6a\x7d\x70\xff\x55\x04\xc0\x58\xf5\x3d\x00\xa1\xf8\x3d\x66\xa3\x2d\x9e\xd7\x24\xf6\xbf\x8c\x8f\x71\x67\x84\xb4\x5c\x37\xbe\xd2\xa9\xdc\xb6\xd4\xa2\x1f\x25\x76\x4e\x53\x64\xe0\x58\x03\xfe\x26\xc4\xca\xef\x01\x08\xe5\xef\x95\xcb\x78\xd9\xce\xee\x23\xce\xe1\xfe\x52\xff\x44\x43\xea\x33\xc7\x09\x4b\x4f\xaf\x34\x4f\xdf\x57\x8d\xba\xa3\x6f\x20\xc6\x7a\x49\x04\xc0\x58\xfd\x3d\x00\xa1\x00\xbe\xb7\x3d\x27\x73\x5b\x29\x17\x73\x61\x92\x51\xe2\x47\x86\xb9\xe5\xe3\x06\x5e\x9c\x4f\xb8\x15\xac\x8e\x53\xac\x4a\x8f\xfc\x74\x14\x41\x00\x8c\x15\xe0\x03\x10\x4a\xe0\x2b\xfd\x16\xe0\xea\x35\xce\xd8\x78\x6b\x68\x36\xcd\x4a\xf8\x05\x65\xc6\x18\xbb\x7e\x6d\x42\xdf\x2c\xcb\xfe\x03\x55\x6c\x67\xfe\xef\xcf\xeb\xb0\x0a\x7c\x00\x42\x13\x7c\xeb\xf7\x04\x91\xc4\x17\xe0\x42\xab\x1d\xbf\xb7\x1e\x0f\x87\xc0\x55\xf6\xa5\xc3\xcb\xd4\x79\x37\x8b\xf6\xe8\x9a\xbf\x52\xc7\x0f\xa0\x58\x09\x3e\x00\xa1\x0c\xbe\x7e\xa7\xbe\x2b\x89\x27\xed\xac\x64\xf9\xe3\x7e\xb4\xa6\xce\xaf\xe9\x24\x0a\xbc\x9e\x35\xe0\x4a\x0e\x5d\x2e\x78\x63\xa5\x7b\x11\x3f\xb8\x61\x34\xf8\x76\x8a\x69\xb7\x99\x79\xa7\x98\x50\x08\x9f\xf3\x51\x13\xbd\x94\x0b\xda\x4c\x3e\x67\xc5\x48\xea\xa5\xd2\x23\xd5\x3f\x77\x23\x4e\x87\x47\xc6\x22\x72\x15\xc2\x57\xba\xe9\x94\x10\x00\x63\x45\xf8\x00\x84\x52\xf8\xb4\xce\xdf\x8b\xc2\x19\xf5\xde\x7e\x87\x0c\xdd\x5f\xe5\x23\x9f\x81\x7c\x94\x8e\xb3\x3e\x11\xb4\xf9\x24\x99\xee\xb9\xdd\x90\x69\x8b\x00\x18\xab\xc2\x07\x20\x14\xc3\xe7\xff\x4b\x34\xb3\xfb\x91\x26\x8f\x19\xe7\x19\xa5\x0b\x3f\xae\x6e\xb8\x85\x91\x25\x49\x44\x59\x74\x1e\x9c\xff\xf5\xb5\x31\xf5\xca\x79\x04\xc0\x58\x19\x3e\x00\xa1\x1c\x3e\xcf\x3f\xce\xf2\x81\x14\xaf\x2e\x94\x67\x11\x4d\x3b\x64\xf3\x20\x24\x4a\xbe\x7b\x55\xae\xe6\x52\x3e\x6f\x47\xf6\x16\x1a\x9a\xe3\x8b\x09\xab\xc3\x07\x20\x14\xc4\xc7\x9d\xf0\x8a\x2b\x79\xfa\x91\xca\x9f\x8c\xdc\xae\xe3\x08\x70\x11\xaf\x48\xd9\xb2\xb5\xb3\x1b\xae\xcf\x10\xda\xb7\xfc\x88\x0c\x7f\xa3\x63\x85\xf8\x00\x84\x92\xf8\x5e\x1c\xd8\x1f\x89\x14\x88\x7c\x1b\xdf\x20\xeb\x82\xed\x32\xa9\x8e\xfb\x6f\xf5\xd7\x51\xf6\xac\x85\x27\xaf\xf6\x0d\x09\x9e\x27\x42\x00\x8c\x55\xe2\x03\x10\x8a\xe2\x7b\x69\x9d\x2e\xdc\x94\x54\x39\xa7\x7a\xe2\xfa\x10\xeb\x33\xeb\x16\xfd\x97\x3a\xe7\x8f\x71\xb0\xd4\xe6\x7e\x7f\x47\xbb\x9f\xb8\x45\x1d\x01\x30\x56\x8a\x0f\x40\x28\x8b\xef\x32\x9b\xff\x99\x87\x9e\x2e\x02\x19\xe9\x8b\x01\xa7\xf5\x4b\x9b\xdc\x92\x07\xa6\x49\x64\xbc\xa8\x5f\x2f\x5e\x88\xce\x61\xe7\xc0\x7f\x1f\x18\x2d\xbe\x9d\x62\xda\x6d\xed\xba\x53\x4c\x28\x8c\x8f\x8f\x6c\xde\x8b\x4c\x8d\xee\xc6\xb0\x8b\x81\x37\x53\xcb\xad\xe7\xe7\xb4\xce\xcc\x1f\xf1\x5e\xf1\x21\x61\x6b\x8c\xdf\xde\xaa\xc7\x2f\xf3\xb0\x62\x7c\x00\x42\x69\x7c\x9c\xb9\xa9\x39\x4e\x43\x1c\x10\x53\xa5\xc3\x36\xa5\xef\xe3\x48\x6b\x25\x21\x89\xa2\x2d\x81\x48\x5f\x3d\xa2\x2f\x4e\xf0\x0a\x39\x02\x60\xac\x1a\x1f\x80\x50\x1c\xdf\x5b\x69\x8b\xcf\x9b\x94\x2b\x7d\x03\xf1\x67\x45\x04\x2e\xca\xb7\x5a\x9f\xc6\x49\xfa\x6a\x9d\x74\xd9\xce\x12\x7e\xbd\x8f\xae\xd3\x06\x01\x30\x56\x8e\x0f\x40\x28\x8f\x8f\x01\xf6\xb1\xfa\x62\x27\xea\x7d\x53\x5c\xa5\x27\x81\x8b\xd4\x94\x98\x6a\x5b\xa9\x54\xe8\xe0\xa5\x49\xa2\xd1\x73\xcb\xc2\x07\x8f\x21\x00\xc6\xea\xf1\x01\x08\x05\xf2\x39\x1f\xae\x20\xab\xac\x56\xe0\xdc\xe3\x91\xea\xf0\xbe\xd1\x6a\x7b\x63\x71\x92\xd5\xd1\xea\xfa\x40\xb7\xef\x9c\x6d\x57\x45\x82\x13\x02\x60\xac\x20\x1f\x80\x50\x22\xdf\x49\xcb\x38\xa3\xa9\xfb\xc7\x2e\x50\x6c\xdf\xbb\x2d\xfc\xeb\x80\x9d\x77\x14\x1f\x57\x5e\xec\xe0\x12\xed\x5b\x4e\xc3\xce\x8a\x2c\xfc\x86\x0f\xab\xc8\x07\x20\x14\xc9\x97\x5f\x52\x55\xd0\x51\x53\x6d\x57\xbe\xc5\x5f\xa2\x6f\xfe\x40\x1b\x7e\xfe\xbc\xef\xb7\xe9\x80\x87\x58\x62\x09\x9f\x58\x7b\x11\x2b\x02\x60\xac\x24\x1f\x80\x50\x26\xdf\xab\x6d\xfd\xf5\xb0\xe2\xb3\xd5\x51\x12\x17\xb8\x36\x72\x27\x4b\xca\x14\x5b\x01\x85\x9b\x99\x91\x84\x50\xde\x5a\x5e\x64\xf6\x61\x04\xc0\x18\x4d\xbe\x9d\x62\xda\x6d\x77\xb7\x53\x4c\x28\x94\x8f\x53\xa2\xbf\xe4\x82\x7e\x81\x9c\x86\x8a\xcd\x52\xde\xfa\x94\xfa\x8f\x9e\x25\x21\xed\x57\x72\x3f\xbb\x9e\x0b\x34\x75\x84\xe6\x51\x20\x00\xc6\x8a\xf2\x01\x08\xa5\xf2\x4d\xbe\x7c\x11\x9c\xc6\x58\x2a\x05\xe7\x30\xdc\xd3\x33\xff\xd8\x90\xe4\x3e\x75\xb8\x53\x30\x89\x8b\xd2\x2d\xad\x86\x2d\xc5\xeb\x28\x02\x60\xac\x2a\x1f\x80\x50\x2c\x9f\x19\xaf\x65\x9d\xbd\x76\x40\x3c\xbf\x45\x31\x65\x91\xdf\x61\xa2\xa8\x5b\x9a\x9f\x28\xae\x43\xa6\x7c\x16\x51\x57\x04\x34\x1e\x88\x21\x00\xc6\xca\xf2\x01\x08\xe5\xf2\xb5\x73\xc6\x0a\x5c\x16\xfd\x13\x60\x40\xb1\x52\xa2\xfd\xff\x71\x76\x97\x41\x51\xbd\xef\xff\xc0\xe1\x2c\x9c\x45\x69\x94\x38\x92\x12\x82\x84\xa4\x80\x48\x09\xa2\x74\x8b\x20\x21\x8d\x34\xd2\x20\x7c\xe0\xd0\x08\x88\x98\x08\x88\x84\x4a\x49\x77\x2b\x29\xa1\xa4\x22\x20\xd2\x48\x49\xb7\xc4\x7f\xf8\xcf\x8f\xef\x30\xe7\x09\x73\x7c\x7e\xcd\xec\xec\xd9\x7d\x5f\xf7\x7d\xdd\xf7\xec\xbe\xca\xd6\xae\x5a\x91\x26\x5f\x59\xb2\x96\xe2\x9a\x52\x7d\x39\xbb\xdc\x46\x77\x13\x86\xf0\xd1\xba\x7c\x10\x2e\x02\xe6\xbb\xd1\xe5\x0a\x51\x7e\xc1\xd2\xd7\xb4\xda\x9f\xff\x6c\xe7\xd8\xf0\xfd\xac\xb8\x68\xf3\xc1\xd8\xa3\x76\x13\x71\x43\x77\xbc\x3a\x59\x18\xc2\x47\x0b\xf3\x41\xb8\x08\x99\x4f\x5a\xb8\x25\x71\x66\xa5\xc7\x3c\x10\x3b\x31\xea\x25\xd0\x36\xb4\x43\x1e\xa0\x33\x6f\x1d\x2f\xde\xc9\x14\x50\x5a\xd4\x5c\x47\x01\x43\xf8\x68\x65\x3e\x08\x17\x41\xf3\x49\x72\xff\xa5\x69\x08\xe5\xa4\xad\xf0\x78\xa6\xa6\xd9\x1b\x19\xb5\x4f\xc4\x29\x2b\xfa\xa5\x64\x7a\xe5\x17\xc1\x6e\x82\x2a\xbf\x06\x0c\xe1\xa3\xa5\xf9\x20\x5c\x84\xcd\x67\xa6\x51\x3f\x91\xc8\xcb\xc5\xff\xf8\x9c\xc4\x7e\xe1\x1e\x81\xbb\x94\xb3\xf5\xa2\x8c\x6a\xe4\xa7\xb8\x95\xb5\x22\x1d\xa1\x6a\x3c\x18\xc2\x47\x69\xf3\x1d\x85\xe9\xa4\xf3\x8f\xa3\x30\x21\x70\xbe\xe8\xe0\x96\xf3\x26\xb1\x57\xa4\x20\x0d\xe2\x3a\x3e\xf3\x78\x41\xb3\x16\x5f\x2a\x41\xf9\xdd\x47\x5d\x9d\xc2\xaf\xf0\xab\xa8\x5d\x60\x08\x1f\x2d\xce\x07\xe1\x22\x74\xbe\xd2\x9e\xce\xb7\x52\x36\xb9\x2c\x7a\xe6\xea\x4a\x2b\xd7\xe5\xc4\x7f\x5b\x31\x55\x94\x6a\xb6\xcc\x24\x8b\x81\x64\xeb\xf9\x42\x46\x30\x84\x8f\x56\xe7\x83\x70\x11\x3c\xdf\xa5\xe6\xe2\xac\xeb\x5d\x1a\x7d\xe7\xdc\xd8\xde\x8d\xae\xfd\x7c\x18\x7a\x26\x91\x33\x3d\x43\x4a\x29\x54\x34\xb8\xd8\x98\xfe\x02\x23\x0c\xe1\xa3\xe5\xf9\x20\x5c\x84\xcf\xd7\xf4\x86\x42\xe9\xba\xe4\x65\x3a\xb1\x2e\xa3\xbc\x57\x8b\xb7\x7c\xbc\x63\x22\xb3\x15\xc7\x39\xef\xbd\x98\x6f\x74\xf6\x3d\x7f\x4e\x19\x86\xf0\xd1\xfa\x7c\x10\x2e\x02\xe8\x3b\xdd\xc4\x29\x42\xf7\xbd\x45\x2a\xe7\x63\x29\x33\xa4\xf8\x49\x3c\x2c\x63\xa1\xce\xa0\xf7\x01\xe3\x47\x2e\x72\x61\x06\xba\xc7\x87\x5f\x42\xb4\x40\x1f\x84\x8b\x10\xfa\x02\x03\xa5\x61\x2a\xa1\xdb\x2b\xdd\x62\x55\xdd\x81\x13\x56\xef\xa2\xd4\x52\x16\x75\xf5\xeb\x75\xf9\x96\x44\x5d\xe8\x5c\xa8\x0f\x9b\x1b\x5a\xa1\x0f\xc2\x45\x10\x7d\xaf\xc5\xa2\x5d\xde\x70\xbe\x1c\xf3\xc4\x5f\x26\xb3\xaf\xbc\x29\x01\xd8\x0f\xda\xa9\xe1\x25\x7b\x5f\xbc\xab\x4c\x5a\x7e\x2f\x4e\x13\x86\xf0\xd1\x12\x7d\x10\x2e\xc2\xe8\x7b\x45\xb5\xb3\x91\xe7\xa2\x8f\x39\xb7\x90\x5e\x5f\x10\x78\x56\x20\xb7\xf7\xc3\xac\xae\x44\xee\xa7\x96\x00\x26\x2f\x36\x8e\x76\x07\x18\xc2\x47\x69\xf4\x1d\x85\xe9\xa4\x13\xc2\xa3\x30\x21\x90\xbe\x33\xd4\xd3\xea\x07\x73\x21\x90\x98\x5a\x93\x29\x0d\x50\xc8\x45\x96\x9a\xa5\x21\xe1\x10\x4b\xa3\x62\x9c\xcf\xd9\x55\x62\x74\xd8\xd1\xd1\x22\x7d\x10\x2e\x42\xe9\xb3\xb3\x9a\xb4\x7d\x77\x9d\x9d\xa4\x6d\xfc\xed\xdd\xc7\x8d\x8c\x65\x61\xc2\xe5\x81\x93\x5e\x8b\x67\x8b\x83\x97\xe5\x32\x13\x92\x6e\xc1\x10\x3e\x5a\xa5\x0f\xc2\x45\x30\x7d\x9e\xe1\xc6\x46\x74\xeb\xcf\xaf\xa9\xad\x7b\x5f\x21\x23\x0c\xab\xae\x2f\xd3\xb6\x34\x6f\x0b\xc3\x8c\x99\xae\xdb\x28\x66\x2b\x1d\xee\xd1\xd1\x32\x7d\x10\x2e\xc2\xe9\x63\xd6\x9c\x94\x17\x7f\xbc\x47\x90\xce\x26\x62\x64\x5e\x76\x76\x02\x2f\x23\x5b\x03\x12\xc4\x68\xf7\xa4\x92\x92\x1b\x06\x72\x58\xc3\x10\x3e\x5a\xa7\x0f\xc2\x45\x40\x7d\x2e\xfd\x2b\xcb\xa9\x99\xfa\xc4\x17\xa8\x83\x99\x96\x81\x28\x73\x5f\xe0\xcf\x50\xf7\xfd\x8f\x1f\x63\x98\xb4\xed\x98\xb0\x0e\x04\x30\x84\x8f\x16\xea\x83\x70\x11\x52\x9f\x8a\x01\x41\xc0\xa7\x9f\x1d\x5b\x1d\x6e\x59\x49\x1b\xed\xba\xeb\xf8\xdf\x6b\x2a\xfc\x2a\xfb\x7f\x7f\xf1\x89\x20\x21\x4d\xa8\xd6\x86\x21\x7c\xb4\x52\x1f\x84\x8b\xa0\xfa\x5a\x27\xc1\xac\x62\x6c\xac\xd6\x40\xab\xcc\x3a\x0f\xef\x2d\xfa\xae\x30\xbc\xc4\x50\xb0\x8c\xbc\xed\xa5\x6b\x02\x61\x97\xe4\xe1\x8e\x07\x2d\xd5\x07\xe1\x22\xac\x3e\xf7\xc4\xb4\x1f\x5e\xce\xe7\xdd\x2e\xfd\xad\x6d\x6b\xb5\x9b\x8a\xcc\x74\xad\xd0\xeb\x89\x69\xb3\xd9\x1b\x32\xc9\xae\x2c\x8d\xe2\x80\x21\x7c\x94\x56\xdf\x51\x98\x4e\x3a\x43\x3f\x0a\x13\x02\xeb\x93\xd6\x74\x1d\x62\x7e\x45\xf2\x64\x3f\xec\x97\xf8\x45\x19\x3f\x86\x69\x1b\x8a\xe2\x15\xdb\x83\xe5\x1a\x26\x53\x4d\xe1\x00\xce\xcb\x30\x84\x8f\x16\xeb\x83\x70\x11\x5a\x1f\x99\xb9\xc6\x99\x11\xa6\x1f\xfb\xf6\x53\x29\x11\x53\xad\x72\x8d\xab\xe7\x43\xfd\xaa\x67\x46\xbd\x49\xf7\xf4\x9f\xf9\xba\x40\xf7\x61\x08\x1f\xad\xd6\x07\xe1\x22\xb8\xbe\x86\xd6\x62\x9c\xa6\x1b\x09\x79\x42\xc9\x3e\x17\xd5\x9e\x79\x06\x2f\x6d\xb7\xdc\xee\xbe\x80\xfd\xa1\x34\xb9\xe6\xd4\xed\x65\xaa\x03\x43\xf8\x68\xb9\x3e\x08\x17\xe1\xf5\x75\x5f\x73\xd0\x9f\x15\x79\xad\x4f\x68\x1a\x74\x99\xa1\x37\xfa\x12\x43\x25\x43\x5e\x8d\xf3\xd6\xb6\xd6\xeb\xc1\xe4\x3b\xb9\x77\x0e\xe7\x19\xb4\x5e\x1f\x84\x8b\x00\xfb\xce\xad\xab\xe6\x4e\x9b\x88\x38\x46\x9b\xb7\x7e\x8d\x5f\xb9\x76\x5f\x88\x0e\x36\xd1\xfa\x90\x62\x47\xde\xc6\x2d\x10\xae\xab\x79\x17\x86\xf0\xd1\x82\x7d\x10\x2e\x42\xec\x8b\xc7\x0f\x1a\xaf\x55\x06\x99\xfa\xd8\x7d\xaa\x48\xa6\xd3\x28\xe7\x7e\xc4\xcf\x12\x52\x1b\x0f\xd6\x69\x17\xfb\x64\xa6\xbe\x3f\x03\x43\xf8\x68\xc5\x3e\x08\x17\x41\xf6\x29\xea\x39\x77\x87\x9c\x4b\xc4\x4b\x24\xd3\x95\xab\x73\x28\xfe\xab\x12\xe7\xf8\x2a\x39\xb8\x1a\xc7\x87\x6b\x40\x85\xdf\xfb\xef\x69\x18\xc2\x47\x4b\xf6\x41\xb8\x08\xb3\x2f\xdf\xdc\x4b\xa4\x40\xb5\xe5\xc2\xb3\x19\x78\xa7\xc8\x6e\xcd\x7a\x6a\x6f\x74\x71\xda\x93\x47\x69\x65\x9b\x09\xef\x81\x39\xcd\xe1\x2a\xfe\x8f\x66\x9f\xdb\x1e\xe6\x25\x5b\xa8\x0a\xd4\x6d\xf2\xc6\xf4\x97\x56\x03\x03\x63\x5b\x7f\x5f\xcb\x7b\xdc\x77\x3b\x97\xc4\x93\x2c\x9e\x2e\xf0\x20\x2e\xfb\x38\x64\xda\x93\x7d\xee\x87\x0a\x95\xff\x1a\x4e\x1d\x0e\x12\xa7\xa9\xa3\xc0\xba\xab\x74\xf8\x2c\xf3\xf2\x27\x1b\xaf\xf4\xe9\x2e\x1d\x2b\x1d\xd5\x94\xa4\x4f\x17\xf1\x7a\x42\xf3\xb6\xfd\x59\xb5\x70\xe5\xcd\xf5\x01\xe2\x90\x44\xea\xef\x49\x19\x2f\xf5\x73\x2f\xbe\xa7\x30\x3c\x56\xda\x2a\x13\x8a\xd7\x70\x27\xbf\x7f\xe8\x8b\xa1\xee\x7a\x47\xc6\x34\x3d\x8b\xf6\x64\x9b\xa4\x37\xcf\x54\xc2\x85\xfd\x4f\xf4\x07\xdb\xc7\x4a\x0d\x9d\xe0\x84\x46\xcf\x35\x67\xc1\x85\xe1\x40\xe2\xbe\xa7\x61\x4d\xb9\x2c\x63\x37\x62\x85\x89\xdd\x39\x27\x2e\x4e\x93\x3e\x8e\x38\x56\xca\x47\x17\x23\x50\xbf\x6d\x5e\xf3\x73\xa2\x60\x44\xe8\xd5\xfd\xa2\x86\xd1\x7b\x5c\x02\x7f\xae\x49\x0a\x64\xd1\xbd\x08\x4d\x60\x3f\x77\xac\x74\x5d\xe8\xa1\xd9\xee\xe5\xfc\x6f\x7b\xa6\x3f\xc3\xdb\x46\x03\x53\x32\x27\x5c\x76\xf4\xb2\x53\xa8\x32\xb4\xbe\x19\x37\xe5\x6e\xce\x1c\x2b\x7d\x2a\xfd\xbc\x38\xba\x88\x0d\x57\xec\xd9\x6c\x0f\x68\x74\xb1\x15\x0a\x74\x6f\x8f\x10\x4b\x9d\x24\x2f\x2d\xb4\xe3\xad\x71\x90\x3b\x56\x6a\x92\x59\x9d\x39\xfc\xa7\x70\xc3\xe6\x37\x2b\x03\x23\x1e\xc1\xe8\xe6\xc6\xe3\x6f\xba\x82\x67\x64\x7c\xa4\xda\xbd\xbf\x3f\xbc\x77\xd7\xff\xe8\x43\x38\xe9\xa9\x22\x3e\x04\x9b\x28\x90\xf2\xa0\x8b\x3a\x48\x24\xe8\x4f\x58\x67\xf0\x03\xcb\xbc\xee\xdd\x7b\x33\x79\x83\x8a\xfe\x07\x93\x7d\xf5\x0a\x05\xcb\xc7\x4a\x7b\x28\x19\x59\x1e\xe5\xab\xee\x71\x7b\x88\xf7\x75\x44\x4f\x9b\x51\x9c\x37\x63\x60\x1d\xbc\xd0\xe5\x65\xa1\xf1\xc1\x42\xa2\x3f\xf9\x58\x29\x3d\xfe\x9d\xe2\x74\x3f\x46\x79\xd3\xfc\x5d\xdf\xc1\x74\xa0\xf3\x76\xfb\x8a\xd5\x73\xa3\x9e\x94\x16\xbb\x9a\xda\xe8\xfa\xaf\x3d\xc7\x4a\x6f\xbe\x8b\xe0\xba\x0e\x3a\x04\x26\xdc\x57\xd1\xbc\xca\x9c\xe4\xf5\xb3\xe6\x66\xcc\x8f\x6c\x2e\xe1\x2f\x9f\xed\xb6\xeb\x23\x47\x8f\xdf\xe3\x1a\x2e\x04\x16\xce\x35\x01\x37\xcc\xe3\xe6\x29\x9c\x89\x9f\x51\x72\x07\xd1\xdc\x64\x07\x09\xa3\x20\xe8\xb4\xf0\x48\x2e\x81\xce\xb1\xd2\xd0\xa4\xc9\x9d\xdd\x61\x03\x77\x81\xe2\x41\x7a\xb2\x1f\x3b\xab\xf7\xd6\x36\x45\xa5\xd2\xf0\x9c\x4e\x2b\x52\xad\x8a\xe3\xad\x66\x1e\x2b\x75\x7f\xb5\xf7\xed\x26\x8d\xca\x26\xdf\xb5\xfa\x18\x3e\x5f\x9e\x32\xd5\x8a\xe0\xfc\xd0\x67\x0d\xfb\x37\xb7\xc5\x7b\x73\x9c\x0f\x7a\x8f\x23\x8f\xb9\x7a\xb9\x56\xb6\xd9\x5a\x2a\x34\xf1\x0b\x56\x8c\x3d\xea\x31\x36\xd5\xf7\x46\xb9\xb1\x69\x77\xb4\xf8\x92\x9e\x10\x3f\xcf\xff\xdf\x8d\xeb\x49\x4f\xf5\xff\x96\x15\x00\x01\x27\x6e\xf3\xed\x1a\xb0\x3f\x98\x75\x89\xf8\xd8\xaa\x5c\x1f\xd2\xc2\xfd\x55\xc4\x0d\x68\xc7\x6c\x13\xdb\xb7\xfc\xc5\x65\x8b\x5c\x31\x82\x21\x10\x35\x9c\x08\x20\xe0\xc4\x6e\x4c\xc4\x24\xef\xe7\x4f\xc5\x05\x8b\xb4\xa2\x36\x02\xd7\x32\x33\x7e\x37\xe0\xd6\x41\xcb\x19\xe3\xf5\xd1\x9a\xea\x31\x9f\xd5\x61\x08\x44\x0d\x27\x02\x08\x38\x91\x9c\x96\xbf\x7c\xa8\xbe\xd1\x69\x28\xb7\x00\xfb\xfb\xb6\x14\x87\x18\xcf\x4b\x6c\x7e\xa3\x61\x1c\x57\xd4\x6f\xfa\x5d\x96\x31\x7d\x18\x02\x51\xc3\x89\x00\x02\x4e\x2c\xd3\xcc\xa5\x7d\xcd\x54\x7c\x3a\x50\xe8\x3b\xd3\x94\x10\xd3\xeb\x10\xa6\x6d\x3b\x2f\xc5\xa9\x7b\xd7\x0d\x2f\xf0\x72\xb4\xdd\x51\x86\x21\x10\x35\x9c\x08\x20\xe1\x44\xb7\x11\x8d\x9f\x4a\x71\x0a\x69\x5f\xd9\x49\xc9\x73\xa9\x26\xae\x33\x9b\xca\xe1\x7b\xad\x7b\xe5\xdf\xa7\xac\x01\x1e\x26\x38\xc0\x10\x88\x1a\x4e\x04\x10\x70\x22\x94\xb3\x38\x8c\x23\xff\x1a\x36\x78\xcd\xca\x64\x97\x56\x49\x54\x35\x44\xa9\xf2\xf3\x89\x45\x90\xcc\xd0\x9e\x6d\xd4\xcc\x86\x2c\x0c\x81\xa8\xe1\x44\x00\x01\x27\x1a\x65\x76\x94\xe9\xb4\x83\x03\xea\xbe\x4a\xcb\x62\x5d\x67\x5d\x02\xe3\x1f\x30\x48\x67\xbd\xe8\x18\xcb\xaa\xf5\x8c\xa5\xed\xb6\x81\x21\x10\x35\x9c\x08\x20\xe0\x44\x9b\x2d\x6b\x07\x4a\xf2\x81\x70\x9d\x7b\x5e\xbf\x61\xfc\xcc\xf3\x19\xd7\xc4\x6f\x19\x5d\xa8\x23\xfc\x71\xa9\xd5\x8d\x43\x4f\x94\x0f\x86\xc0\x7f\x84\x13\x4f\xea\x3b\x47\x61\x42\xc0\x89\x0d\xbd\x31\x45\xc4\xaa\x71\x15\x69\x86\x2d\xda\x25\x0f\xf4\xc5\x68\xd4\x42\x5e\xf5\x85\x28\x40\x75\x6f\x55\x3a\x9f\xcc\x7e\x3c\x7c\xb0\xa8\xe1\x44\x00\x01\x27\xea\x85\x4a\xb2\xcd\xf4\x11\x94\x8e\xa8\x51\xbd\x09\x24\x76\x31\xa6\xdc\x3b\xf5\x39\xba\xe5\x8d\xd6\x99\xe0\xdc\x53\x61\x3b\xa5\xce\x30\x04\xa2\x86\x13\x01\x04\x9c\x78\xd5\x56\x2b\xcf\x23\x4e\xfa\xf1\x7b\x27\x0e\xc3\xc6\x9c\xc2\x04\x93\x76\x30\x53\x6a\xaa\xad\x68\x46\x6f\x2c\xc8\x58\xd5\x1e\x82\x21\x10\x35\x9c\x08\x20\xe0\xc4\x9b\xbe\xaf\x92\xae\xdd\x76\x66\x0f\x7a\xd3\x7e\x55\xaf\xac\x33\xb0\x68\x23\x27\xa9\x63\xfc\xdc\x05\xc6\x1a\xe2\x64\x61\x2c\x0f\x2f\x0c\x81\xa8\xe1\x44\x00\x01\x27\xf6\xc5\x17\x47\xbe\x08\xb2\xa9\xfe\x52\x38\x98\x5f\x3c\x7a\x86\x13\xcf\xc5\x4f\x26\x3b\x6a\xe0\xbb\xd5\xdb\x5b\x1d\xd1\xbf\x36\xac\x61\x08\x44\x0d\x27\x02\x08\x38\xd1\xb5\xc6\xf1\xb5\xe8\xfe\xe5\x6b\x64\x9e\xfe\x99\xde\x5f\xe7\x1a\x47\xbe\xaf\xb0\x94\x27\xe4\x06\x7c\xa7\x65\xad\xed\xc4\x8b\x35\x80\x21\x10\x35\x9c\x08\x20\xe0\xc4\xca\x73\x7c\x94\x57\xe5\xee\x9c\x75\xa8\xc3\x92\x32\xa5\x81\x3c\x67\x7a\x08\xac\x68\x56\xbc\xb5\x1e\x12\xd8\xaf\x99\xfa\x91\xf0\xc0\x10\x88\x1a\x4e\x04\x10\x70\x22\x53\x71\x86\xc0\x8b\xa6\xda\xf0\xc4\xb3\xa5\x79\x15\x12\x4b\x42\x2c\x55\x5d\xa7\x94\x93\x24\x0f\x18\x71\xe4\x33\x1f\x16\xf5\x03\x30\x04\xfe\x23\x9c\x78\xd2\xca\x7c\x14\x26\x04\x9c\x78\x29\x83\x3b\x55\xff\xbe\x51\xfa\xa8\xc7\x65\x83\x95\x0f\xfd\x2e\x1b\xdd\x1c\xc1\xd7\xe3\x3b\xa3\xa5\xe6\x9f\xdf\x25\xc8\xba\xa0\x0a\x43\x20\x6a\x38\x11\x40\xc0\x89\x51\x0d\xfa\x32\x05\xa9\xee\xda\xf9\x2a\x9f\x23\xb7\xf9\x23\x3d\x52\x6b\xb8\xda\x39\x2c\x6b\x33\xd2\xa2\x1b\x43\x7f\x15\x57\x1f\x76\x29\xd4\x70\x22\x80\x80\x13\xdf\x7c\xe1\xea\xa0\xec\x11\x57\x32\xc9\x88\x10\x50\x17\x20\xbb\x2c\xf8\xf7\xf1\x76\xed\xc6\xaf\x87\xca\xd4\x3f\x04\x52\x1b\xa5\x54\x60\x08\x44\x0d\x27\x02\x08\x38\xf1\x11\x5d\x66\x47\xeb\x85\xc5\x59\x9d\x8f\x78\x94\x77\x93\x71\xd3\x5f\x66\x7d\x93\xe2\xa9\x59\xe5\x6f\x5d\x68\x5f\x78\x18\xc3\x7a\x06\x86\x40\xd4\x70\x22\x80\x80\x13\xbb\x5d\x58\x7f\x14\x3a\x30\xea\xf1\x68\xf5\x91\xfc\x68\xf7\xe9\xa6\x88\xc3\xdd\x27\x1d\xb2\xac\x93\x78\x4d\x1d\x01\xb9\xe7\xa9\xc1\x10\x88\x1a\x4e\x04\x10\x70\xe2\x30\xd0\x40\xa7\xe7\xb5\xba\xb9\x91\xd8\xb4\xa1\x1f\xdd\x36\xdb\x1f\x66\xd9\xcf\x1b\xb9\x15\x65\x49\x6c\x66\xc4\xc0\xf0\x9f\x3c\x0c\x81\xa8\xe1\x44\x00\x01\x27\x2a\xbc\x33\x82\x27\xc4\x7b\xfb\x6f\xc5\x6c\x0d\x48\x35\x48\x31\xd9\xe9\x55\xac\xe3\x3f\x8a\xba\xab\x65\x14\x12\xf6\x2b\x74\x50\x1a\x86\x40\xd4\x70\x22\x80\x80\x13\x95\x46\x94\x99\xb4\x84\xb6\xbc\xca\xbe\x8b\x67\x65\x97\x08\x38\xae\xfe\x3a\x15\xdd\x90\x7f\xe9\x93\xf3\x9c\xb1\xe9\xf3\xac\x3d\x29\x18\x02\xff\x11\x4e\x3c\x69\xef\x7a\x14\x26\x04\x9c\x98\x1b\x4f\x93\x42\xc9\xfd\xc2\xe9\x9a\xb6\xb0\xff\x35\x42\xa5\x32\xd2\x14\x1d\x11\x0f\x08\x43\x28\xec\x86\x91\xab\xf7\xee\xc0\x81\x21\x10\x35\x9c\x08\x20\xe0\x44\x49\x4d\xf5\x94\x45\xd7\xca\x75\x4e\x49\x9a\x61\xcd\x83\x29\x71\x05\x79\x65\xd2\x5e\x07\xfb\xac\x03\x0b\x66\xca\x49\x4a\x0a\x6d\x18\x02\x51\xc3\x89\x00\x02\x4e\x1c\x01\x44\x77\x45\x8c\x25\xe9\xbf\xe7\x4a\x06\x3b\xfe\xfd\x9b\x36\xfb\x42\x14\x7a\x0f\x67\xea\x5a\x88\x14\x38\x6f\x58\x41\xc4\x30\x04\xa2\x86\x13\x01\x04\x9c\x28\x2e\x92\x64\xe0\x83\x37\xa8\x38\x79\xf9\x74\x65\xcb\x8f\xa8\x7d\xd2\x85\x83\xde\xcd\x3b\x04\xe4\xd7\x9d\x86\xfc\xc5\xec\xbe\x99\xc2\x10\x88\x1a\x4e\x04\x10\x70\xa2\xa2\x2f\xe7\xfe\xa4\xe7\xd7\x8b\x4d\x7b\xf0\xad\x19\x0a\xc2\xb1\x68\xda\xd6\xbe\x3c\x8a\x37\x6d\x0c\xf9\xe6\x0c\xfe\x4e\xa5\xb7\x60\x08\x44\x0d\x27\x02\x08\x38\xf1\x4a\x5d\xd5\xa8\x41\x88\xd6\xf5\x9e\x6b\xcc\xaf\x5f\x24\x9e\x61\xb8\xd5\xd8\x28\xc0\x26\x77\x2f\xe9\x41\x19\xe3\xf7\x5b\x57\xcf\x1c\xae\x4c\xa8\xe1\x44\x00\x01\x27\xfa\x0e\x3e\xa1\x86\x0d\x8a\x63\x5c\x9a\x18\x52\xf3\x52\xa7\xee\x8a\x13\x17\x15\xb0\x97\x88\xb8\xd6\x60\x25\xce\x74\x4d\xdf\xbe\x0b\x43\x20\x6a\x38\x11\x40\xc0\x89\xa9\x15\xbf\x13\x1e\x78\x9f\xb9\xf2\x48\xf2\x1b\xf7\x59\x19\xbb\x36\x07\xb1\xe2\x3c\xb5\x2b\xdf\x16\xa5\xef\x4b\x87\xd5\xb9\x5e\xe0\x87\x21\xf0\x1f\xe1\xc4\x93\xa6\xbb\xa3\x30\x21\xe0\xc4\xe2\xb3\x7d\xcd\xe6\xe3\xbf\xaf\xdc\x7f\xdc\xcd\x49\x4e\x16\x3a\x51\xbb\x0b\x14\x06\x44\x4f\x50\x46\x13\x54\x5b\xe7\xfd\xac\x32\x86\x21\x10\x35\x9c\x08\x20\xe0\xc4\x95\x8c\x53\x24\xcf\xa7\x08\x2a\x08\x83\x97\xbb\x9b\x71\xec\x6e\x1d\x04\x3e\xb4\x70\x12\x28\x2a\xa0\x89\xc9\x28\xbd\x40\x35\x66\x0e\x43\x20\x6a\x38\x11\x40\xc0\x89\xcf\xf6\xbf\x5e\xfe\xb2\x53\x3b\x2e\xfa\xd8\x1d\x7f\xfc\xd2\xc3\x3c\xcb\x7c\x41\xc7\xac\x0b\x71\xa4\xac\x8e\xd2\x75\xca\xc6\x9e\x37\x60\x08\x44\x0d\x27\x02\x08\x38\xb1\xf7\xe5\x5b\x16\x91\x9b\x32\x52\x16\x66\xe4\x13\xbf\x08\xec\xc4\xaf\x6e\x4b\x72\x98\x3d\x95\xbc\x90\xa4\x3c\x35\x01\xdd\x0e\x20\x87\x21\x10\x35\x9c\x08\x20\xe0\xc4\xf6\x9f\x26\xe4\xb2\xae\x82\x55\xa2\xd2\xc9\x8d\xd5\x75\x3f\xa7\x1b\xe3\x08\xe7\xad\x8a\x3c\x59\xef\xf3\xd4\x88\x9a\x77\x86\x1c\xce\x65\xa8\xe1\x44\x00\x01\x27\x16\x0c\xa5\x9b\x76\x85\xd5\x5e\x19\xa3\x54\xaf\x99\x4e\x3c\x45\x49\xd3\x33\xc6\xa1\x68\xca\x1f\xd8\xcf\x3e\x2f\x56\xb0\x28\x8c\x07\x43\x20\x6a\x38\x11\x40\xc0\x89\x1c\xaf\xbe\x35\x85\x2f\xde\xbf\x91\xf1\x8e\x3e\xdc\x77\xfa\x13\xfe\xd7\x46\x3c\xcb\x8b\x7d\xb2\xbd\x74\xe5\x5d\xde\x6c\x1e\x01\x14\x30\x04\xa2\x86\x13\x01\x04\x9c\x48\x31\xe2\xbc\x27\x59\x45\xb0\xf8\x71\x3b\xb6\xf0\xd5\x50\xd1\xce\xce\x7f\x6c\x17\x38\xce\xf4\xd9\xb9\xe9\x93\x5c\x55\xe8\x38\x75\x1f\x86\xc0\x7f\x84\x13\x4f\x3a\xff\x38\x0a\x13\x07\xf2\x87\x00\xf7\x32\xf4\xb7\xbf\x06\xf7\x0b\xb9\x1b\xb3\x74\xdb\x2a\xd9\x8c\xbe\xc7\x09\xca\x0c\xf3\x7a\x97\xc3\x13\x7c\x47\x63\x82\x15\x86\x40\xd4\x70\x22\x80\x80\x13\x23\x7e\x6d\xbb\x96\x38\x36\xf1\xcf\xcc\x53\xf3\x27\x79\xbf\x53\x12\xc6\x98\xed\x3f\x3d\xbd\x70\x5a\x45\xf3\x71\x58\x9d\xf8\x04\x3b\x0c\x81\xa8\xe1\x44\x00\x01\x27\xca\x17\x7d\x4a\x92\x2d\xf2\x52\xd0\x38\xe0\x92\x3e\x45\xdf\x08\xca\x30\x66\xfc\x65\xea\xb8\x22\x5b\xfa\xcb\x94\x2a\xb6\x33\x96\x19\x86\x40\xd4\x70\x22\x80\x80\x13\xdf\x94\x4c\xe3\xec\x06\xe5\x1a\xc7\x5b\x4f\x17\xfc\xf7\x9b\x2c\xf4\x36\x91\x88\x83\x71\x60\x08\x8f\xc3\xaa\x1e\x69\x74\x40\xb3\x09\x0c\x81\xa8\xe1\x44\x00\x01\x27\x9e\xa5\x3d\x6f\x67\xb5\xd6\xa1\xfa\x3b\xdf\xa3\xbe\x23\xba\xbf\xda\x76\xc8\x4c\xfb\x94\x63\xf1\xd7\xf7\x56\x39\xe5\x02\x32\x7e\x22\x30\x04\xa2\x86\x13\x01\x04\x9c\xc8\x37\xa0\x91\xf1\x5f\xf6\x27\x88\xde\xe1\x41\x81\x12\xd3\xcc\x5f\xbb\xe6\x9b\x03\xfe\x13\x6c\x36\x72\xa9\x4d\x7f\x79\xf1\xbc\x41\x18\x02\x51\xc3\x89\x00\x02\x4e\xec\x7d\xff\x37\x6a\xd7\xb8\xa2\x9d\x48\x59\x70\x8f\xf2\xb1\x2c\xbe\xb9\x7b\xad\x84\x91\x46\xc4\x56\x84\xb2\xac\x7b\xab\x57\xe1\xe1\xca\x84\x1a\x4e\x04\x10\x70\xe2\xe5\x17\x2c\x99\x45\x8f\x9c\x6e\xbc\xbf\xa4\xd7\x7f\x81\x89\xe5\xbf\x61\x97\xee\xc9\xc6\x59\xb9\xb2\x87\xd0\x70\x81\x5f\xfd\x6d\x33\x18\x02\xff\x11\x4e\x3c\xe9\x84\xf0\x28\x4c\x08\x38\x31\x99\x36\xb8\xf6\x39\x04\x69\x7e\xce\x75\xab\x27\x62\xde\x5a\x37\x32\xe7\xbb\x28\x57\xe1\x6c\xd6\x45\x3f\xa2\xb0\x5c\xd7\x2b\x00\x43\x20\x6a\x38\x11\x40\xc0\x89\x6b\x14\x97\xfe\xcb\x52\x99\xe9\xba\xda\xfb\x5a\xab\x5b\x8a\xd5\x37\x96\xab\xb7\xd4\xb2\x39\xd8\xdf\x97\xe8\x79\xc0\x76\x7e\x9f\x3d\x0c\x81\xa8\xe1\x44\x00\x01\x27\x76\xd9\x6a\xd4\xb9\xa5\x33\x04\x85\x6c\x39\xb8\xf6\xdb\x41\xf2\x51\x0d\xdd\x1f\xbf\x5a\x6f\x08\x04\x26\xc8\x0e\x36\x9d\xc3\x70\xc2\x10\x88\x1a\x4e\x04\x10\x70\xa2\x6d\x59\x71\x5a\x69\x7c\x80\xf6\xe4\xac\xad\x27\x36\x35\xce\x54\x6c\xb5\xd8\x54\x33\xd9\x74\xc6\x75\x60\x2f\xf8\x67\x83\x02\x19\x0c\x81\xa8\xe1\x44\x00\x01\x27\x96\xfa\x74\x0a\xeb\x0d\xf5\x1d\xb8\x30\x26\x59\xf4\xc0\xe1\xf2\xad\xe4\xaf\xef\x97\x50\x34\x32\xeb\x17\x27\x37\xcb\x4a\xec\x1c\xce\x33\xa8\xe1\x44\x00\x01\x27\xda\x96\xfe\xd6\x2d\x7d\x61\x3d\xea\x7f\xbd\x5f\xdc\xa0\x6a\x39\x2c\xbd\xf7\x87\x65\x2b\x5b\x63\xfe\xd8\xe8\xd3\x0f\xcd\x45\xe9\x2c\x30\x04\xa2\x86\x13\x01\x04\x9c\x28\xe6\xc3\x29\x7e\x85\xb0\xfc\xf1\x27\xcd\x5e\xe1\x84\xca\x59\xb5\xc7\x31\x29\x5f\xec\x9e\xd7\xdf\xb7\x70\x17\xfc\xc2\x41\x98\x26\x04\x43\x20\x6a\x38\x11\x40\xc0\x89\x1c\xc2\x67\x8b\x47\x5d\x48\xeb\xb3\x9c\x7e\xac\xe4\x14\xb8\x15\x74\xae\x11\x78\x5b\x15\xfc\xd7\xa3\xf7\xcc\x61\xac\xf2\x89\x26\x01\x0c\x81\xff\x08\x27\x9e\x74\x86\x7e\x14\x26\x04\x9c\x08\x69\x5c\xbd\x52\xeb\xc1\xc2\x43\x33\xf3\x86\x9f\x4d\x1a\x70\x74\x5d\x49\x2c\xf5\xe8\x7b\x7a\x65\x28\x3d\x2b\xfd\xae\xc9\xf3\xc3\xad\x0b\x6a\x38\x11\x40\xc0\x89\x60\x32\x7b\xfb\x9d\x3f\x46\xd5\x60\x41\x89\x0d\xcd\x15\xe7\xf4\x81\xbe\x3c\x68\x1b\x77\x66\x61\x38\x78\xc5\xa0\x25\xa1\x9f\x0b\x86\x40\xd4\x70\x22\x80\x80\x13\x53\xbc\x55\x49\x0c\x5f\x74\x17\x6a\x27\x8a\xd4\x26\x30\x78\xb9\x9c\xe9\xa6\x1f\x94\x0d\x1e\x94\x2a\x5d\xb8\x51\x4f\xea\x62\x4a\x05\x43\x20\x6a\x38\x11\x40\xc0\x89\x56\x1a\x4c\x6e\x13\x5e\x6f\x0d\xc6\xf3\xd6\x26\x6b\x80\xe7\xce\x8e\x8e\xc2\xd2\x36\x8b\x95\xc4\xd9\x2e\xec\xae\x72\x04\xd1\x87\x5b\x49\xd4\x70\x22\x80\x80\x13\x3d\x39\x05\x6a\x62\x1d\x32\x8b\xc0\x03\x1a\x85\xd0\x8e\x0b\xba\x2f\xdf\x0c\x90\x30\x77\x8f\x99\xbd\x4c\x21\x8e\x93\x11\x74\xe2\x83\x21\x10\x35\x9c\x08\x20\xe0\xc4\xa8\x85\xfd\x12\x97\xce\xc7\x7c\x8e\xdf\x59\xcd\xe3\x49\x7e\x8a\x3f\xac\x91\x21\x9b\x5e\x11\x35\x13\xef\xa8\xb2\x3a\x23\x67\x75\xd8\xd1\x51\xc3\x89\x00\x02\x4e\xf4\xbb\x1f\xf7\x8d\x2a\x7d\xf3\xc2\x1a\x31\xd8\xdf\x2c\x9c\x9a\x6c\xb6\xca\xd9\xf0\x67\x93\x58\x9c\x6a\xf6\x8d\xde\xda\xc8\xa4\x18\x0c\x81\xa8\xe1\x44\x00\x01\x27\x86\x56\xdb\x89\x8f\xf6\xfe\xb7\x7b\x9f\x70\xb8\xb1\x94\xf9\xc9\xaa\x97\xae\xf2\x6a\xe1\x9a\xdf\x0e\x39\x55\xac\x5c\xf9\xad\x48\x12\x18\x02\xff\x11\x4e\x3c\xe9\x5e\x14\x71\xd9\x27\xf6\x61\xda\x4e\xdf\xe2\x4f\x74\x32\xf8\x34\xf2\xc6\xf4\xa4\xd0\x29\x41\xa2\x8c\xfc\xb5\xac\x0a\xf2\x54\xdf\x01\xfe\x7d\xe3\x82\x63\xa5\xaa\x59\xd6\x9d\xbf\x18\x89\xde\xf6\x5a\x7e\x31\x79\x1b\xfc\xd7\x84\x3e\x61\x99\xf1\x01\xf5\x5b\xfe\xc0\x73\x05\xba\x9e\x94\xbd\x53\xc7\x4a\x39\xe7\x4d\x43\x9f\x0c\x85\xd5\x88\xcc\x7d\x57\xec\x24\x8b\x6e\x91\x3f\x88\x5d\xc5\xf1\x74\xb1\x49\xf4\x56\x3b\x18\x5c\x1c\xf8\x70\xac\x94\x4c\x8b\x99\x22\xa6\xdd\xbe\x93\x93\x68\xfb\xce\xb0\x53\xfb\xf9\x20\x0c\xdf\x53\x5e\x62\x51\x2a\xb5\x66\x41\xf5\x1e\xda\x20\x9b\x63\xa5\x1f\x1e\x3c\x62\x8a\x5a\xc6\x7b\xea\x44\x7b\xd0\x9b\x36\xa1\x20\x52\x58\xcd\xbe\x4b\x2c\x4a\x4d\x56\xf7\xfd\x63\xdb\xdb\xec\x3f\x32\xc7\x4a\x4b\xeb\x4e\x85\x62\x98\x26\xf7\x15\x9a\x1c\x73\xb4\x9a\xcd\x71\xfd\x5b\xe4\x3d\xee\x34\xf2\xaf\x2c\xbb\x79\x14\x66\xc7\x69\x33\x1f\x2b\x7d\x4e\x65\x2c\xc7\x58\x66\xfd\xbc\x36\x79\x25\xa3\xc0\x31\x52\x8b\x21\x50\x99\xc6\xeb\xa7\xfc\xe3\x0f\xe4\x92\xa1\xc5\xe7\xe2\xa3\x8e\x95\x46\x8c\x6e\xec\x4b\x8f\xb7\xac\x5a\x29\x9f\x7f\x82\x51\x6d\x0a\xe4\x89\xf7\x5c\x7d\xc3\x2a\x44\x30\xb9\x11\x60\x62\x79\xcb\x9f\xee\x7f\x97\x7d\x27\x3d\xd5\xa3\x8e\x86\x80\x13\xbb\x16\xb6\xb7\x6a\x64\x3c\xff\xd8\x93\x52\x74\x56\x97\xd9\x38\xb5\x74\x0c\xfd\xd4\x50\x0e\x8c\x08\x6d\x63\xe1\xd5\x4a\x6e\x38\x4c\x29\x6a\x38\x11\x40\xc0\x89\x75\x6e\x8f\x6c\x1a\xb2\x1b\xa4\xd4\xd6\xbf\xd7\x70\xde\xda\x5e\xb2\xb5\xd9\xc3\x4b\x13\xa1\x7c\xfe\x8c\xd7\xd9\xbd\xd3\x61\xfd\x1e\x0c\x81\xa8\xe1\x44\x00\x01\x27\x0a\x7d\xa7\x18\x58\xf6\x6c\x8a\x7b\x93\x9d\x47\x2b\x50\xf6\xe2\x1e\x8e\x24\x96\xd9\x29\x54\x43\xbc\xf7\x11\x0f\x74\xde\xa7\xf8\xb0\x6b\xa2\x86\x13\x01\x04\x9c\x98\x2e\xfb\xdd\x2f\xe8\xf9\x9f\xf0\x75\x6f\x97\x1b\x04\xea\x19\x78\x6e\xb9\xcb\xf8\x46\x67\x5c\xab\x32\x7e\xe2\x4c\x78\x3e\x7f\x72\x0d\x86\x40\xd4\x70\x22\x80\x80\x13\x89\xd7\x44\xf3\xda\x9f\xe8\x5d\x4c\x4b\x8d\xbe\x9c\x5c\xde\xe4\xda\x65\xf7\xb2\x6f\xaa\xa0\xf9\x94\xd5\xf7\xb3\x3a\xc9\xa1\xae\xf4\x30\x04\xa2\x86\x13\x01\x04\x9c\xb8\xe4\x92\x3e\xa2\x79\xe3\x6f\x8a\x8b\xfc\xa9\xbf\xc2\xba\xb5\x9a\xf2\x0f\xff\xab\x1a\xbf\xda\xdf\x30\xf7\xf4\x61\x6e\xad\xa6\xd9\xe1\xb2\x8a\x1a\x4e\x04\x10\x70\xa2\xb1\x5b\xb9\x25\xcc\x0d\xb8\x62\x3a\x96\x6d\x27\x7f\xd1\x85\x65\x91\x62\x5f\xbd\xcf\xb3\x78\xb1\xdb\xed\x4f\x63\xd6\x61\x72\xf8\xbd\x42\x0d\x27\x02\x08\x38\x11\xc8\x68\xb3\xfa\x58\x7e\x9a\x97\xea\xaf\xfb\xcd\xd4\xbc\x60\x38\x04\x7f\x0b\x7e\x41\xfb\x6d\x46\x42\x2d\xf3\xa7\xae\xbb\xe8\xe1\x96\xf0\x1f\xe1\xc4\x93\xfa\xce\x51\x98\x10\x70\xa2\x5a\x16\x45\x55\xd4\x3b\x9e\xa1\x91\x3e\x65\x61\xa6\x4c\x4a\xcd\xac\x88\xe1\x1a\xd7\xa7\x7f\x9b\x1d\x45\x47\x9f\xae\x25\xf7\x52\xc2\x10\x88\x1a\x4e\x04\x10\x70\x62\xaa\xc1\xd9\x12\xd7\xe6\xea\x8d\x14\x85\x40\x7d\xd7\xf9\x84\xc0\x15\x93\x7b\x12\x5f\x87\xff\xc3\xa3\xdf\x71\xad\x33\x4c\xe2\x54\x83\x21\x10\x35\x9c\x08\x20\xe0\x44\x25\xb5\x25\xfe\x79\xf3\x97\xbf\x09\xde\x7c\x60\x81\x34\xce\xca\x12\xb3\x8b\x51\xd4\xeb\xc9\xe2\x90\x0c\x5a\x4a\xe6\x11\x31\xe8\xc1\x10\x88\x1a\x4e\x04\x10\x70\xe2\x7d\x0d\x92\x0e\x29\x3f\x42\xa6\xeb\x0e\x21\x03\xcc\x25\xc5\x44\xff\x39\xd9\x3e\xd2\x8f\x29\x54\x23\x9c\x6d\xf8\x90\x94\xaa\x75\x09\x86\x40\xd4\x70\x22\x80\x80\x13\x4d\xa8\x4d\xbb\x0c\xf7\x26\x6c\xb8\x75\x9a\x8a\xfa\xaf\x68\x08\x8d\xfc\x7e\x3e\x4e\x3b\x4d\xb3\xca\xec\x2c\xf7\xde\xd5\xda\xe2\x70\x59\x45\x0d\x27\x02\x08\x38\xf1\x8e\x78\x46\x3d\x66\xbb\xb3\x33\x20\x06\x8f\xed\x41\xca\x1f\xbb\xa8\x85\x41\xaf\xbd\x07\xd9\x17\x8d\x4f\xbd\x20\xe4\x7e\x2d\xa6\x0a\x43\x20\x6a\x38\x11\x40\xc0\x89\x6d\x7a\x0c\xaf\x0c\x6e\x30\x79\xd7\x69\x24\x09\x7f\x16\xcc\x77\x68\xdd\x96\x92\xc9\xe5\x20\xfa\xf8\x13\x54\x7e\x8c\xcb\xd0\xaa\x0f\x43\x20\x6a\x38\x11\x40\xc0\x89\xf2\x33\x37\x77\x73\xfd\x53\xae\xd9\x5e\x95\xff\xf2\xbd\xa2\x36\x7c\x3b\x88\xcd\xa1\xf1\xa6\x12\x07\x25\x6b\x17\x49\x81\xb7\xd4\xe1\x6b\xfc\x23\x9c\x78\xd2\xca\x7c\x14\x26\x04\x9c\x38\x53\x7f\x43\xec\x65\xce\x95\x9f\x73\x77\x57\x2a\xa8\x76\x42\xe4\xbb\xbf\x3d\xe0\xfb\xdc\x35\x7b\xa7\xb1\xda\x83\xd4\xe9\x0c\x1f\x04\x43\x20\x6a\x38\x11\x40\xc0\x89\xc9\x63\xbe\x2b\x22\xae\x7f\x19\x4b\xca\xc8\x5d\x3f\x9a\xb5\xff\x70\xc6\x8b\xa7\x7b\x90\xdb\x09\xc9\xd9\x32\x0e\x97\x92\xde\x52\x81\x21\x10\x35\x9c\x08\x20\xe0\xc4\x31\x82\xd4\x92\xbb\x71\xad\xbf\xaa\x6c\xee\xfb\x47\xd4\xc4\x90\xbc\x8a\x4d\x79\xf0\x52\xf5\x4b\xed\xf3\xdb\x9d\xee\x5d\x63\x93\xd2\x30\x04\xa2\x86\x13\x01\x04\x9c\xb8\x19\xfa\x65\xc3\x56\xed\xae\x6e\xd7\x86\xe7\xd2\x08\x37\xe8\x2a\xa5\xc5\xbb\x49\x42\xf4\xad\xb3\xe4\x7c\x4e\xe0\xc8\xfd\xe5\xeb\x30\x04\xa2\x86\x13\x01\x04\x9c\xd8\x4d\x59\xe0\x9c\xdd\xbe\x4e\xdf\x17\xa3\xdc\x18\xf3\x54\x70\xcc\x57\xc2\xaf\x76\x5a\xcf\xf8\xd1\x55\x33\x43\xc9\xab\x34\xb4\x57\x61\x08\x44\x0d\x27\x02\x08\x38\xd1\xbb\x8a\x85\xed\xac\x4d\xe2\x3c\xc3\x50\x4e\x4e\x54\x92\x53\x90\x08\xbf\xbb\xec\x5d\xfe\xc7\x8f\xfa\x2a\x68\x1c\x09\x61\x62\x11\x18\x02\x51\xc3\x89\x00\x02\x4e\x54\xfd\x92\xd3\x6a\x7f\x8d\xa0\xfb\xa3\x4c\xa8\xec\xf0\xf2\xcb\x33\x49\x51\x22\xe1\x7e\x73\x35\x21\x54\xd1\x2f\x83\xc7\x93\x77\xd5\x61\x08\x44\x0d\x27\x02\x08\x38\x71\xbe\x3c\xc6\xf4\x92\xc4\x48\x9f\x58\xdd\x87\xaf\x89\x7c\x44\xda\x2a\xbb\xdf\x48\xda\x2a\xe5\x2f\x46\x2a\x09\x6a\xf9\xa5\x39\x70\xc3\x10\xf8\x8f\x70\xe2\x49\x7b\xd7\xa3\x30\x21\xe0\x44\xa1\x22\x93\x9f\xb9\x9d\x02\xdf\x39\xaf\xd5\x32\x95\x49\x64\x8b\xe8\x55\x19\x86\xfd\xe1\x2c\x28\x71\xba\x96\xc4\x43\x78\x87\xcd\x12\x86\x40\xd4\x70\x22\x80\x80\x13\x2f\xfe\x9c\x74\xac\x50\x5f\x74\x7a\xf2\xfc\x8b\x7a\x6c\xf8\xf0\x2a\xb6\xf9\xe6\x50\xc2\x0d\xcd\xdb\xec\xfb\x7e\x2c\x9e\xb1\xe4\x3c\x30\x04\xa2\x86\x13\x01\x04\x9c\x58\x2a\xc6\x32\x28\x62\x7a\xf1\xf4\xf5\x07\x36\x82\xa5\x43\xe7\xd6\x75\xc1\xa0\x45\xb0\xbd\xdc\x51\xfd\xd1\xa2\x4e\xc6\xfb\x47\x97\x61\x08\x44\x0d\x27\x02\x08\x38\x31\xe4\xf7\x78\xbb\x46\xc6\xc2\x85\xc9\xab\x57\x7d\x14\x93\xe8\x4e\xcd\xca\xd7\x7f\xbc\x39\x63\x42\xf4\xa2\x9b\xea\x15\x96\xe5\x8d\x26\x0c\x81\xa8\xe1\x44\x00\x01\x27\x16\x51\x74\x6d\x4e\xcc\x2c\x5c\xbb\x15\xc6\x42\xc2\x15\xae\x1f\x7e\x09\x5f\xcf\x2d\xda\x4e\x35\x9d\xf2\x3e\x6d\xb4\xd7\x2b\x06\x32\x18\x02\x51\xc3\x89\x00\x02\x4e\x2c\xa5\xf5\xbd\x6c\xc5\x21\xda\x4d\x97\x2f\xb0\xb5\xf2\xf7\xf4\x5a\x30\xe6\xbf\xa2\xa4\xf0\xb9\xdf\xfa\xef\x69\x6d\xc6\x2e\x4e\xca\xc1\x10\x88\x1a\x4e\x04\x10\x70\x22\xbf\xb4\xd7\x44\x99\xcb\xbc\xf2\x9d\xc2\x1f\xd2\xb9\xac\x10\xf1\xf4\xab\xd5\x20\x0b\xc0\x3d\xfa\xe3\x52\x43\xa5\x41\xf3\x17\x2d\x18\x02\x51\xc3\x89\x00\x02\x4e\xec\x5c\xe6\x57\x7e\xb2\x55\x23\xfb\x36\x96\x4a\xc1\xf5\xc7\x00\x36\x52\x65\x41\x9a\x32\xff\x3f\xda\xab\xf7\x22\x02\x5e\xf9\x8f\x1c\x36\xb7\x7f\x84\x13\x4f\x9a\xee\x8e\xc2\x84\x80\x13\x47\x35\xf9\xf2\x70\x55\x9c\xb3\x95\x6e\x0e\x72\xaa\x7e\x0e\x37\xda\xb1\xb1\x7b\xa0\x1d\x92\xf8\xfa\xce\x9a\x66\x39\xcc\x91\x78\xf8\x45\x47\x0d\x27\x02\x08\x38\x51\xf5\x86\xbf\x04\x77\x91\x44\x6c\xe7\xeb\x3b\x93\x4a\x73\x95\x3b\x43\x97\xc3\x0d\x43\x6e\xb1\x8f\x1b\xa4\xa8\xb3\x28\x72\x38\x1c\x4e\xeb\xa8\xe1\x44\x00\x01\x27\x5a\x30\xd8\x9d\xa5\xc3\x8d\x32\x2a\x32\xed\x30\xb3\x95\x65\x66\x0f\x28\x51\x97\xac\x67\xd0\xee\xb8\xad\x72\x0a\xcf\x7f\x3f\x9d\x0d\x86\x40\xd4\x70\x22\x80\x80\x13\x67\x3c\x36\x3d\xdb\xc4\x9e\xd3\x10\x56\x36\x2a\xcc\x15\x8f\x04\x64\xbc\x8b\xd7\xbf\xfc\x6a\x2f\x1b\x4f\xea\x79\xeb\x87\x0c\x6d\x47\x18\x02\x51\xc3\x89\x00\x02\x4e\x64\xce\x06\x37\x5f\x90\xab\x47\xd1\x13\xb0\x91\x84\x9a\x04\x55\x36\x9b\x6c\x6d\xf7\x5d\xbb\x60\xb1\xda\x75\xbb\x74\x4f\x2a\xf7\xb0\xa3\xa3\x86\x13\x01\x04\x9c\x28\x71\x4b\x88\xe4\x3d\xc9\x39\x5b\x11\x5d\x8d\x81\xd3\x6b\x92\x5a\xa3\x3f\x2a\x49\x6a\x65\x82\xe2\xec\x19\x95\x3f\x6b\x0b\x76\x1e\xce\x97\xa8\xe1\x44\x00\x01\x27\x82\x18\xbd\xeb\x09\x59\xd4\x8f\x31\x6d\x2f\x4c\xf4\x12\x2e\xee\xfb\x6f\xb9\xb9\x2d\xc1\x52\xf7\x1c\xaf\x15\x6e\xdc\xdb\x10\x10\x80\x21\x10\x35\x9c\x08\x20\xe0\xc4\x92\x8f\x4d\x78\x1f\xc8\x6b\x69\xe2\x04\xde\xde\x10\xbd\x1b\x17\xf5\xde\x88\xb6\xec\xae\x77\x60\xa8\x5b\xb5\xc5\x7c\xda\xc5\x58\x45\x18\x02\xff\x11\x4e\x3c\xe9\xfc\xe3\x28\x4c\x08\x38\x51\x29\x3c\x3a\xf2\xf3\x8f\x96\x8c\x5d\xa2\x0a\x01\x0e\x1b\x71\xeb\xed\x48\x9f\xb7\x3c\x82\xfd\xe0\x6b\xef\xa7\xaf\x3f\x92\x3e\xb8\x05\x43\x20\x6a\x38\x11\x40\xc0\x89\x9f\xa7\x78\x82\x65\x9e\xe5\x9a\xbb\x27\x32\xec\x1d\xd8\xae\xbd\x90\xa1\xe4\x8b\x8b\xd9\x49\xf9\x2a\x78\x6e\x61\xb8\x4b\xe5\xd9\x59\x18\x02\x51\xc3\x89\x00\x02\x4e\xec\x09\x4a\xd8\x31\xa5\xd1\x99\x61\x39\xff\x99\x67\x69\x16\x2f\x79\xab\x38\x32\x01\x2f\xf8\x7b\xda\x17\x05\x55\x95\x06\x55\xcb\xc3\x2f\x3a\x6a\x38\x11\x40\xc0\x89\xdd\xb1\x6e\x7e\xbd\xdc\xcd\x98\x9f\x41\x9f\x1c\x31\xf8\xd6\x0f\xfe\xb0\x52\x94\xc9\x52\xfd\x89\xca\x2c\xc5\x4b\xb8\x54\x43\x75\x07\x86\x40\xd4\x70\x22\x80\x80\x13\xcf\xbf\x36\x96\xbc\xf5\x88\x2c\xd5\x4b\xdf\xb5\xa7\x59\xdb\xf3\x09\xc9\x7a\x12\x93\xfd\x6c\x96\x17\xd9\xe0\x1c\xc6\xa8\x05\x3a\x6c\x6e\xa8\xe1\x44\x00\x01\x27\x72\xab\x17\x7c\x07\x58\x17\xf4\x3e\xfc\x2c\xc5\x37\x50\x21\x10\x7b\x5e\x4a\x90\xf0\x6a\x74\xb6\xae\xca\xec\x7e\x07\xc8\x72\xe6\xf0\x4b\x88\x1a\x4e\x04\x10\x70\x62\x43\x43\xf7\x83\xf2\xd2\xfb\x4b\x86\xe3\x9a\xb8\xef\xba\xbc\x85\xa2\x07\xba\x79\xf8\x52\xa8\x08\xec\x7d\x46\x9f\x5d\x18\x23\xe3\x80\x21\x10\x35\x9c\x08\x20\xe0\xc4\x2b\x4f\xf0\xad\xd4\xd5\xbf\x30\x13\xc6\xdc\x2c\x94\x08\x2a\xb6\xac\x2d\x88\xaa\x09\xe3\x36\xfd\x16\xdc\x81\x6b\x44\x18\x4e\x76\x38\x27\xff\x23\x9c\x78\xd2\x09\xe1\x51\x98\x10\x70\x62\x42\x0c\x63\xb6\xc1\xd7\x97\xa5\xfb\x4b\xa3\x5a\xb8\x03\x06\xd3\x9f\xe9\x95\xc3\x6c\x66\x3a\x84\x5a\x8c\x2f\xaf\x89\xeb\x33\x1e\xce\x4c\xa8\xe1\x44\x00\x01\x27\xfe\x77\xd0\x5f\xf4\xe2\xd1\x7b\xee\x42\x32\x60\xee\x75\x9a\x5b\xdf\x04\x4f\x56\x19\xbd\xb6\x8b\xe5\x0f\x7a\x2e\x9e\xb8\xe4\x67\x3a\x30\x04\xa2\x86\x13\x01\x04\x9c\xf8\xb3\xea\x0d\xa4\x60\x8d\x53\xa2\x2d\x6d\xce\x63\x8b\x1f\x22\xcf\xb4\x46\xb3\x40\x65\x27\x9b\x62\xae\x9a\xdb\x68\x59\x7f\xee\x22\x0c\x81\xa8\xe1\x44\x00\x01\x27\x7a\x9c\x8f\xa7\x15\xdf\x78\xe8\x6b\x4d\x94\x36\x51\xe5\xb6\xca\x2e\x1c\xb7\x28\xaa\xa2\xa0\xaa\x75\xbf\xba\xb0\x0f\x9c\x15\xe1\x84\x21\x10\x35\x9c\x08\x20\xe0\xc4\xbc\x6b\x4b\x8a\x11\x4d\x19\xe5\x2f\x68\x7f\x38\x2d\x6a\xe7\x49\x68\x05\xad\x55\x3a\x7c\xd2\xa9\x76\x61\xfd\xd3\xf7\xbc\x42\xe8\xb0\x29\xa0\x86\x13\x01\x04\x9c\x08\x16\x4c\x7f\xb6\xf6\xe0\xbb\x17\x88\x8f\xa1\x0e\x90\x5b\x5a\x36\xa2\xb1\x36\xe6\xfe\x13\x61\xbd\x2f\xbb\x66\x20\x71\xd3\xfc\x70\xd6\x40\x0d\x27\x02\x08\x38\x91\x3e\xad\x47\xc1\x57\xac\x93\x54\xaf\xce\x5a\x7c\xc3\xd6\x54\xce\x1a\xc8\xc8\xaa\xe0\x3a\x57\x64\xfb\x25\x46\xc5\x1d\x9c\x10\x85\x21\x10\x35\x9c\x08\x20\xe0\x44\x03\xa5\x75\xae\x27\xa4\xc0\x2d\x62\x3e\x8a\x1f\x9a\x77\xdf\xbd\x8a\xcd\xc7\x9f\x88\xee\xcf\x37\xeb\x7c\xaa\xd0\xaf\x20\xe1\x7c\x1b\x86\xc0\x7f\x84\x13\x4f\x3a\x43\x3f\x0a\x13\x02\x4e\xac\xde\x80\x81\x96\x9e\x95\xfb\x7f\xa5\xff\x80\x36\x9f\x53\x1b\xb3\x84\xa3\x9d\x04\xc8\x45\x9e\x29\xb6\xd3\x92\x16\xc9\x04\xe2\xc0\x10\x88\x1a\x4e\x04\x10\x70\xe2\x6a\x9b\xcc\x4d\xcf\xed\xc4\xa7\x61\xc2\x4f\xa8\xba\xae\xba\xf5\xec\xd4\x29\x7c\x9e\x0f\x4c\x78\x9e\xeb\x7c\x21\x8e\xe0\xaf\xb7\x2d\x0c\x81\xa8\xe1\x44\x00\x01\x27\x32\xb4\x3c\x97\x26\xa3\xaa\x36\x4b\x66\x10\x2a\x4e\x30\x9a\xab\xce\x87\xe9\x7d\x7f\xf3\xb9\xca\x4a\x25\x40\x4c\x3e\xbf\xcb\x65\x60\x08\x44\x0d\x27\x02\x08\x38\x91\xbb\x72\x3a\xf7\xb3\xbd\x12\x59\x5d\x64\xef\xc0\xae\xae\xd9\xc5\xbc\x80\x54\x8a\x56\x8f\x6c\xff\xad\xd7\x0b\x61\x89\xdf\xaf\x1f\xce\x4c\xa8\xe1\x44\x00\x01\x27\xae\xd5\x50\x49\xdb\xef\xc4\x09\x5b\x46\x4f\x3d\xbd\xeb\x8b\xa3\x68\x42\xda\x74\x96\xe5\x63\x7d\xf1\x5b\x4d\x4b\xcf\x95\x18\x7d\x69\x18\x02\x51\xc3\x89\x00\x02\x4e\x7c\xeb\xf0\x9d\x79\x32\xe0\xc0\xd3\xaa\x9a\xfa\xc1\xce\x25\x8a\x4b\xda\x15\x2c\xba\xf2\x7c\x06\x62\x97\xff\xa3\xfc\x51\x13\x34\x42\x0e\x43\x20\x6a\x38\x11\x40\xc0\x89\xcf\xdf\x71\xdc\xb5\x61\x3e\x97\x9a\x2a\x97\x49\x7a\xbd\x0b\xd0\x5c\x93\xf9\xf8\xe2\x1a\xcd\x04\xce\xa7\x87\xd1\xdf\x27\x3c\x15\xf9\x60\x08\x44\x0d\x27\x02\x08\x38\x51\x31\xae\x46\xc7\xdf\x91\x8c\xd7\xd3\xbd\xeb\xad\x87\x1d\x36\xd4\xa2\x72\xfe\x23\x3e\x73\x30\xee\xd5\x59\xbb\xc6\x42\xa1\xd9\xc3\x2d\xf1\x3f\xc2\x89\x27\xfd\xb2\x11\x71\xd9\x17\xa2\xc5\xe5\x77\x96\xf9\xc9\xd8\x6a\x48\xf0\xb0\x73\xa5\x5c\x57\xa5\x3d\x7e\xb3\xb6\x25\x11\xd9\x23\xc3\x49\xa3\xa5\xcb\xd1\x82\xc7\x4a\xe7\x6e\xe9\xd7\xa8\xd8\xdf\xb5\xd9\x1b\x66\x77\x52\xdd\x69\x5b\xaf\xb8\xfa\x55\xcd\x3a\xf5\x60\x91\xa8\xf9\x62\xe0\x18\xfb\xc5\xe3\xd7\x72\xb9\x8f\xc4\xce\xdd\x99\x92\x9a\xf2\xc8\x09\x73\xbd\x29\xfb\xe5\xc6\x43\xfa\xf0\xe1\xbc\x75\xaa\x4b\x84\x6c\x29\x17\xc0\x2f\xd3\x5a\xc7\x4a\x09\xac\xeb\x7b\xe7\xc3\x3e\xb2\x13\x04\x38\x04\x56\x33\xf1\x25\x77\x6e\x94\x7d\x85\xc6\x7f\xb7\x7f\x7a\xb5\xa4\xa7\x80\xb3\xf6\xe6\x58\xe9\x1d\x63\x3b\x5c\xfe\xdb\x8e\x1f\x19\x33\x55\x28\x7b\x9a\x75\xa9\xce\xf7\x2f\x24\xf5\x46\xd4\x1a\xce\xda\x4d\x29\x44\x9a\xde\xe6\x3d\x56\xfa\x3a\x79\x8b\x86\xc6\xab\xe1\xb3\x53\x8c\xec\x74\x2f\x2c\xac\x94\x13\x2d\x89\x93\x47\x7d\xca\x39\x60\xd9\x82\xe4\x75\xeb\xfb\x9d\xe3\xff\xd0\xca\xc4\xf9\xb3\xf5\x96\x43\x55\xd9\x5d\xfb\x67\x59\x2d\x2e\x7e\x13\x5f\xaf\x6c\xd1\x9a\xe1\xeb\x7e\xa5\xa9\x74\x32\xd9\xcd\xf8\x72\xac\xf4\xee\x6b\xd1\x6f\x5f\x1b\xcc\xb1\xa3\x16\x4c\xcd\xf6\xc2\x89\xec\x44\x53\xb0\x02\x43\x3b\xb9\x9c\xea\x78\x14\x85\xc3\x6d\xf1\x89\xff\x5d\xf6\x9d\xf4\x54\x8f\x3a\x1a\x02\x4e\x14\xd3\x31\x78\x0b\x68\xb8\xf9\xcd\xfc\x22\xd6\x58\x82\x1b\x25\xb1\xee\x0a\xd8\xea\x3e\x2f\x1d\x01\xec\x5e\x7f\x41\xbe\x8c\x0b\x0c\x81\xa8\xe1\x44\x00\x01\x27\x0e\xef\x9c\xd3\x5c\x3c\x15\x28\xc7\x67\xe5\xed\x3a\x74\xdd\xcd\x34\xc5\xa3\x7c\x8f\x36\x86\xff\x8c\xc7\xf9\xcf\xc5\x25\x92\xec\xcc\x30\x04\xa2\x86\x13\x01\x04\x9c\x28\xca\xf4\xa1\x45\x76\x1b\x37\x7f\x7b\xa0\xcf\xda\xda\xa0\xc2\xf1\x80\x2a\x2c\xeb\xfd\x28\xd5\x17\xf7\x88\x73\x40\x8f\x51\xa2\x18\x0c\x81\xa8\xe1\x44\x00\x01\x27\xb6\x38\xa8\xbb\xa9\xcb\xba\x3b\x9b\xd3\x95\xed\x06\x89\x70\xcf\x9a\x54\xb3\x06\xc1\xa2\x8a\x6a\x9f\x7e\x19\x2f\x3f\xf6\x79\x70\xd8\xd1\x50\xc3\x89\x00\x02\x4e\x5c\x7b\x39\x33\xb1\xcc\xa2\x6e\xd0\xcb\x4e\x6a\x8c\x23\x74\x1f\x68\xb0\xbd\x6b\xd1\x75\x5d\x60\x7d\x5d\x22\x6d\xf7\x0f\x65\xc2\x61\x67\x46\x0d\x27\x02\x08\x38\x31\xf8\xd2\x02\x9b\x93\x80\xe7\x24\x93\x82\xa2\xed\x9f\x0f\x84\xde\x77\xe3\x64\x27\x7b\xa7\x29\xd9\xcf\x5e\xa3\x26\x97\x4d\x90\xa0\x84\x21\x10\x35\x9c\x08\x20\xe0\x44\xaf\xfd\x3f\x56\xf4\x94\x3a\x37\xa7\x34\xe9\x86\x4f\x47\xc7\x13\x36\x6d\x12\xdd\xa7\xc2\x65\xf1\x33\xa5\xd0\xd7\xe2\x0f\xa1\x30\x80\x21\x10\x35\x9c\x08\x20\xe0\xc4\x42\xed\x83\xb5\xe5\x9c\xdb\x6f\xa8\xd3\x36\xa9\x57\x9f\x60\x1c\x2b\x0d\x75\x97\x3b\x6f\x55\x4d\x8e\x17\xbc\xf7\x20\x9a\x20\xb0\x87\x21\xf0\x1f\xe1\xc4\x93\xfa\xce\x51\x98\x10\x70\xa2\x6d\xe8\xe0\xf4\x6e\x6e\x39\x03\x8e\x4a\xc9\xe7\x3a\x60\xe2\xc5\xf6\x9c\x47\x92\xf4\x1b\x51\xf2\x7c\x12\xde\x11\x7d\x21\x48\x17\x86\x40\xd4\x70\x22\x80\x80\x13\xb7\xe8\xcc\x78\x13\x8d\xbe\xc5\x77\x7a\xd5\x7e\x0d\xa5\x8f\xe5\xc6\x70\x5f\x62\x5c\xb6\x0e\x51\x32\x90\x72\x0b\x62\xfb\x6d\x6d\x04\x43\x20\x6a\x38\x11\x40\xc0\x89\x55\xaa\xbb\x11\xcf\xe9\x4d\xcf\x67\xf4\x0a\x4c\xb7\x05\xbf\x93\x36\xfb\xba\x77\x4e\xd4\xad\x7d\x5d\xb2\x98\x88\x5c\xdb\xf1\x8a\x00\x0c\x81\xa8\xe1\x44\x00\x01\x27\xc6\xdd\x94\xfb\x12\x50\xdf\x21\x30\xf2\xb4\xef\xec\xad\x1b\xba\x4f\x28\x4b\x46\xa8\xf7\x8d\x54\x9f\x75\xbc\xd8\x7e\x54\xf8\xf1\x95\x12\x0c\x81\xa8\xe1\x44\x00\x01\x27\x0a\xf0\x2c\x1b\x2b\x07\x10\xf9\x6e\x8b\x51\x6f\x95\xbc\x1c\xb7\xcf\x31\x65\x68\x6f\xea\x6c\x10\xf0\x2f\x61\x4d\xfe\x4b\x4a\x26\x07\x43\x20\x6a\x38\x11\x40\xc0\x89\x0f\x0c\x37\x35\xdb\xb9\xf8\xa9\x32\xe2\xa6\xdf\xbe\xf4\xa8\xff\xc6\xf5\x41\xca\xb8\x67\xb2\x3a\x02\xc6\xd3\x9d\xca\xdb\x31\x15\x81\x21\x10\x35\x9c\x08\x20\xe0\xc4\xb0\xb9\xdd\x8a\xdf\xce\xfb\x42\x7b\xbf\xe3\x0b\xfe\x48\xaa\x7e\xd0\xc8\xf1\x3a\xf8\x2f\xce\x67\x13\xb0\xf6\x8c\x93\xbd\xf5\xf7\xb0\x29\xa0\x86\x13\x01\x04\x9c\xa8\x61\xca\x79\xee\x87\xee\xf4\xf2\x59\xe6\x37\xed\x82\x60\x2e\xd3\xa2\x57\xa6\x51\xff\x36\xee\x42\xca\xcb\xd8\x73\x0a\x2d\x53\x87\xef\xe3\x1f\xe1\xc4\x93\x56\xe6\xa3\x30\x21\xe0\xc4\x88\xc6\x4f\x95\xd4\x14\x25\xdf\x22\x86\x5f\x04\xb8\x44\x06\xbe\x7f\xbb\xab\xa5\x5d\x65\x54\x9f\xea\x01\xaf\x0a\x50\xf9\xb5\xa8\xc0\x10\x88\x1a\x4e\x04\x10\x70\xe2\xd8\x2a\x63\x65\xfa\x4f\xf1\x9e\xcb\xe9\xc5\x2b\xba\xb7\xe5\xe3\x76\xdc\x56\xaf\xb4\xc6\xef\xcf\xb9\xa4\xd9\x8b\x8c\x32\xe6\xb0\xc3\x10\x88\x1a\x4e\x04\x10\x70\xa2\x49\xf5\x93\x6f\x8d\x8f\x6f\x7c\x6e\xa3\xfb\x1b\x1b\xda\x37\x76\x31\xd7\xed\x4b\xce\xa3\xe2\x53\xfb\x59\x21\x72\x5e\xdb\xc6\x3c\xa6\x30\x04\xa2\x86\x13\x01\x04\x9c\x68\x22\xb2\x2c\xd3\xf4\xae\xf2\x6d\x2a\x96\x5e\xb5\x47\xe3\x3d\xf4\x60\x8b\x82\x2a\x65\xea\x25\xfe\x82\x4c\x11\xa5\xee\xd0\x80\x03\x0c\x81\xa8\xe1\x44\x00\x01\x27\xde\x6a\xbd\x57\x29\x15\xbe\xb9\x1f\x64\xa7\xf8\x8d\xe3\x7e\x2b\xb5\x75\xd5\xa8\x81\xdd\x2f\x2d\xcf\xa8\xfd\xab\x3c\x71\xef\x9f\x52\xc0\x10\x88\x1a\x4e\x04\x10\x70\x22\xf4\x70\xc4\x5d\xee\x89\x14\x43\xaf\x7f\x43\x4e\xc8\xd2\xd4\x7d\xbb\xb6\x94\x26\x55\xc9\x0f\xd7\xa5\x3e\x87\xf0\xd5\xf6\x86\xa9\xc1\x10\x88\x1a\x4e\x04\x10\x70\xe2\x88\xfd\x76\xd1\xd4\x98\xee\x85\x25\xb3\xb1\xdb\x4f\x05\x6a\x05\xb0\x97\x66\x88\xc6\x2a\xfd\xd8\xd7\x31\x53\xe4\xab\x7a\xca\xd4\x30\x04\xa2\x86\x13\x01\x04\x9c\xa8\x75\xf7\x7b\x68\x51\xfa\x96\xef\xb2\xd8\xb6\x32\x7f\xe3\xc8\x03\xcb\x7e\x99\x06\xb2\x40\xb9\x44\x52\x91\xd7\xda\x01\xcf\xa4\x0e\x5f\xe3\x1f\xe1\xc4\x93\xf6\xae\x47\x61\x42\xc0\x89\x6c\x3f\x37\xf3\xed\x9d\xea\xdb\xbf\xfe\x21\xcc\xf1\xf7\xe9\xfb\x53\xc5\xce\xcd\xcb\x2d\x65\x16\x75\xa1\x34\xdf\xa0\xe0\x85\xa0\x23\x0c\x81\xa8\xe1\x44\x00\x01\x27\x0a\x34\xaf\xf3\xc1\x2b\x0d\x74\x96\x07\xe9\xae\x83\xa5\xaf\x09\x98\xca\x03\x94\x79\x39\x52\x5e\xf5\xec\x38\x4a\xf0\x01\x11\x82\x30\x04\xa2\x86\x13\x01\x04\x9c\xe8\x6f\x74\xcb\xed\xce\xaf\xe2\xf8\x89\x0e\x9c\x8b\x57\xdd\xce\x47\x86\x6e\x9f\xb9\x84\x75\x20\x0a\x59\x30\x48\xe6\xdb\xea\x1e\xbd\x07\x43\x20\x6a\x38\x11\x40\xc0\x89\x55\xa1\x39\x6a\xf1\x57\xaf\x14\xff\xd4\x34\xf0\x72\xfa\xf8\x23\xc4\xef\xcf\x00\x78\xe3\xda\xb7\x2e\x0f\x5e\x19\x67\xeb\xed\x7c\x42\x18\x02\x51\xc3\x89\x00\x02\x4e\xe4\xbe\xb0\xc4\x24\xcf\xd3\xac\x6e\xe4\x21\xc2\xac\xf9\x87\xa1\x69\x90\xe5\x37\x05\x0e\x8e\x67\x7b\xc6\x50\xbd\x5e\x86\x1e\xeb\x4d\x18\x02\x51\xc3\x89\x00\x02\x4e\xcc\x54\x18\x10\x2a\x77\x96\x7c\x6d\xd2\x72\x55\xeb\xbb\x41\x46\x69\xba\x4b\x1e\xc5\xfd\x42\x2f\x13\x41\xa5\xa7\x5d\x69\xd7\xce\x9d\x83\x21\x10\x35\x9c\x08\x20\xe0\xc4\xc7\x3d\xfd\xa5\x14\xc9\x4f\xcd\x42\x54\x3c\x68\xec\x7d\x46\xfd\x1f\x2d\x8b\xa7\xc5\xe8\x09\x58\xfe\xb9\xb8\x92\xaa\xc9\xdf\x7a\x1b\x86\x40\xd4\x70\x22\x80\x80\x13\x0f\x88\x94\x4c\xf3\x48\x6d\x3d\x25\xf7\xdb\x3e\xbf\xa9\x75\xb4\x8d\x16\xe4\x56\xb4\x17\x78\xca\xfb\xa3\x92\x9e\xdc\xf2\xf1\xe5\xc3\x6d\xf7\x3f\xc2\x89\x27\x4d\x77\x47\x61\x42\xc0\x89\x4c\xb6\xff\x99\xe6\x8b\xf3\xc7\x15\xa8\x71\xd0\xe6\x1a\x34\x6e\x8d\x40\x4f\x97\x1d\x62\x44\x1e\x55\x8a\x10\xfd\x16\x75\x76\x35\x86\x21\x10\x35\x9c\x08\x20\xe0\x44\x57\x5d\x5d\xb7\x1a\x09\xc9\x26\x72\x8f\xe4\xbe\x85\x16\x2b\xc9\x80\xe6\x20\x99\x0b\xc9\x0e\x21\xf8\x86\xdf\xc8\x81\xd1\xa1\xfb\x30\x04\xa2\x86\x13\x01\x04\x9c\x28\xc3\x4a\xa0\x3d\x3d\xae\xb2\xfb\x76\x79\xaf\x33\x2a\x53\x4b\xab\xfd\xbe\x39\xf6\xd7\x27\x8b\x05\x6d\x5d\xb0\x04\x26\x7d\xaa\x0e\x43\x20\x6a\x38\x11\x40\xc0\x89\x97\x2b\xf6\x4a\x3e\xea\x37\x44\xe5\x5e\x76\xf7\x7f\x6c\xe8\xa2\x14\x7f\x69\xfd\x4e\xf3\xbb\xa2\x0c\x79\x79\x4d\xc2\x83\x19\xce\xc3\x55\x1c\x35\x9c\x08\x20\xe0\xc4\x39\x27\x12\x86\xf0\x47\xde\x33\x17\x3b\x4d\xeb\xbe\xb5\xfa\x18\x3e\x1a\x68\x6b\xa4\x99\x19\x8c\x8c\x0b\xa3\xd6\xf0\xa7\xb7\x17\x82\x21\x10\x35\x9c\x08\x20\xe0\xc4\x6b\x7c\xca\x59\x26\x46\x9f\xe8\xc7\x82\x92\x3e\x99\x9e\x7d\x51\xe1\xee\xd5\xbd\xd9\xca\xc4\xc9\xe3\x93\x3b\x24\x5b\xfd\x8d\x0d\x1f\x86\x40\xd4\x70\x22\x80\x80\x13\x2d\xde\x51\xec\x4a\xa9\x8e\xfc\xc7\xa0\xed\x6f\x56\x18\xbb\x17\x60\xcf\x7e\x66\x7b\x90\x49\x63\x97\x9c\x7a\xa8\xe9\xf9\x10\xf7\xe1\x9c\x8c\x1a\x4e\x04\x10\x70\xe2\x9f\x0d\x23\x49\xe7\x2f\x4a\x73\x4b\x69\x1f\xe4\x88\xac\x72\x14\x33\xf5\x42\x75\xdd\xef\x95\x4f\x06\x71\xd1\x09\xff\xe7\xc7\x6a\x08\x43\xe0\x3f\xc2\x89\x27\x9d\x7f\x1c\x85\x09\x01\x27\xf6\x72\x3e\x60\xce\xdf\x66\x48\x15\x8c\x14\x60\xfd\xaa\xcb\x61\x46\x54\x9a\x37\xb8\xa5\xb8\x6b\x1f\x62\xb8\x62\x33\x4d\xf9\xee\x70\x18\x45\x0d\x27\x02\x08\x38\xb1\x20\x4a\x8a\x92\x42\x48\x09\xbb\xe4\xc1\xa1\x6a\x7c\xca\x05\x5b\xa4\x56\x4e\x67\x6a\xf1\xc2\x6d\xa4\xc6\xed\xb1\xca\x80\xbd\x32\x0c\x81\xa8\xe1\x44\x00\x01\x27\x3e\xac\xce\x08\xaa\xc5\x9c\x2a\xf7\xa9\x78\xfe\xf0\xf6\x23\xde\xc6\xc5\xd6\x8c\xd3\xed\x66\x22\x4b\x9e\x3e\xb6\x73\xb7\x4f\x65\xe2\xc0\x10\x88\x1a\x4e\x04\x10\x70\x22\x8d\x8c\x30\xad\xd1\x6a\xde\xa4\xe0\x5b\xfa\xd1\xf2\x97\x51\x21\xa7\xbe\xb3\x03\xb4\x01\x0b\x0a\xc4\xaf\x62\x55\x03\xfc\x6e\xcb\xc3\x10\x88\x1a\x4e\x04\x10\x70\x62\x97\x0c\x65\x43\xcb\xcb\x7e\x1b\x45\x3c\xad\x7c\x01\x23\x5f\x9c\xed\x3f\x3e\xf1\x19\x63\x52\x93\x6f\xbd\xdf\xcf\x28\x80\xa3\xd7\x61\x08\x44\x0d\x27\x02\x08\x38\x51\xde\xc9\xe7\x2b\xd4\xb2\x12\x40\x2f\x16\xbd\x98\xc1\x7d\xb6\xef\x4f\x2f\x6d\xc0\xc3\x87\x62\x1a\x16\x22\x8e\x39\x79\x66\x01\x92\x30\x04\xa2\x86\x13\x01\x04\x9c\x58\x7f\x73\x34\xe3\xa5\x51\xec\x69\x73\x3d\xe3\xdb\x17\x74\xf2\x3f\x6c\x92\xca\x5a\xb0\x97\xd2\x54\x3e\x70\xca\x4b\xf3\x35\x6b\x3a\x6c\x3c\xa8\xe1\x44\x00\x01\x27\x0a\xad\xf5\x19\x7e\x3d\xc5\x9b\xc0\xef\x68\xfd\x6e\xa4\xee\x74\xda\x27\xcf\x35\xd8\xbd\xc5\x30\x71\x68\xdd\xa0\xcd\x23\xe0\xa9\x1d\x0c\x81\xff\x08\x27\x9e\x74\x42\x78\x14\x26\x04\x9c\x38\x6f\x9b\x73\x41\x0b\xf6\x54\x08\xe2\x77\x2f\x0e\xe5\xf9\xa9\x22\x6b\x7f\x33\xa6\xcc\xe3\x89\x91\x0a\x77\xfc\x86\x61\x7d\x99\x1e\x0c\x81\xa8\xe1\x44\x00\x01\x27\x3e\x12\xf2\x2d\xac\xf2\xa8\xa7\xdc\xfd\xc5\x98\xc2\xcd\x0c\x91\xdd\xe6\xa6\x4d\x30\x7c\x23\x07\xd6\x3d\x4e\xa6\x5d\xf9\xeb\x78\x18\x58\xd4\x70\x22\x80\x80\x13\x93\xda\x9f\x5c\xa2\xdb\x7e\x9f\xf6\x51\xdb\xa3\xb2\x42\x11\x3f\x51\x51\xb0\xbc\x63\xfb\x39\x3f\xbb\xb5\x6a\x51\xf4\x3d\xb9\x7b\x6c\x30\x04\xa2\x86\x13\x01\x04\x9c\xc8\xe8\x4d\x66\x17\xa7\x10\xb4\x3b\x6e\xff\xe5\xc2\x80\xc2\xf7\x5f\x3a\x4b\xe4\x77\xb6\x73\xb0\xbc\xba\xa3\xc6\xe6\xc1\x97\x44\x0f\xb7\x92\xa8\xe1\x44\x00\x01\x27\xd2\x9f\x51\x33\x69\xd1\x4c\x70\xf3\xa9\xba\xf2\xf3\xb9\xee\xeb\xe7\xd8\xaf\xd7\x5c\x2c\x2a\x5e\x9e\xa3\x7d\x36\x78\x71\x70\xc2\x94\x1c\x86\x40\xd4\x70\x22\x80\x80\x13\x65\x3e\xeb\x56\x5b\x0a\xad\x5c\x69\x5f\x4a\x8c\x2e\x8a\x9c\x5e\x6e\xa1\xe6\x23\x8b\xaf\x6d\x6f\xc6\x5b\x50\x6b\xf1\xa1\x3b\x73\xd8\x78\x50\xc3\x89\x00\x02\x4e\xfc\x3a\xbe\x18\xf9\xba\xb1\xc4\x3d\x8a\xa8\xa1\x35\x38\x85\x6c\xa7\xb5\xe5\x02\xf7\x43\xc3\x76\xe1\x52\x45\xe6\xf9\xe5\x54\x9c\xd3\x30\x04\xa2\x86\x13\x01\x04\x9c\x68\xab\x40\x96\x6d\x5c\x21\x69\xe0\x4b\xcb\xa9\xbd\x6d\x37\xc2\xc0\xf4\x41\x5e\x4e\x7b\xf6\x7a\x3b\x87\xab\x72\x4a\x7c\xff\x39\x61\x18\x02\xff\x11\x4e\x3c\xe9\x0c\xfd\x28\x4c\x08\x38\x51\xaa\x4f\xf5\x1c\xef\x77\x23\x2d\xe5\xa1\x24\xae\x45\x33\x62\x9a\x84\x5e\x8d\xeb\x84\x91\xde\xb9\xad\x04\x4b\xd4\xc3\xf3\x45\xda\x30\x04\xa2\x86\x13\x01\x04\x9c\xb8\xa1\x7c\x73\xba\xd4\xe4\xe1\x55\x4a\xb3\x82\xb7\x0b\xd9\x2d\xd8\xb6\x38\xa3\xb6\xa8\x4b\x77\xd8\x2d\xa7\x3b\x3e\xaf\xc4\x64\x1d\x3e\x58\xd4\x70\x22\x80\x80\x13\x7b\x2d\xe3\xa2\x8a\x94\x67\xa5\xf3\x94\xa8\xec\xd2\x5f\x71\xfd\x08\xb9\x6d\x67\x08\x12\x19\x98\xf1\x3a\xb8\x2b\xba\x76\xec\xd2\xc2\x10\x88\x1a\x4e\x04\x10\x70\x22\x07\xf5\xe2\x88\x9d\xc9\x06\x1b\x7d\xe0\x0d\x8e\x6b\xbf\x2b\xac\x34\xcb\x9d\x86\xed\xb2\x7e\x39\x7b\xdd\x72\xcf\xc4\x78\x91\x81\x30\x04\xa2\x86\x13\x01\x04\x9c\xb8\x6d\x49\x1e\x88\xc7\x11\x81\xc7\xf6\xc5\xf1\xef\xdc\x69\xa9\x83\x46\xfd\x77\xdb\xcc\x7f\xfe\xe3\x28\x7d\xaf\x9b\x58\x2f\x1a\xc2\x0d\x43\x20\x6a\x38\x11\x40\xc0\x89\x4b\xef\x43\x1b\x5f\xbd\xe3\xdb\x3c\xf7\xe6\x5b\xce\x95\x29\xb5\xda\x7a\xb6\x3f\x7f\x1e\xc7\x13\x33\xe4\xd0\xbc\xae\x20\x14\x19\x3e\x7c\x1f\xa8\xe1\x44\x00\x01\x27\x52\x6c\x25\xbc\xb9\x23\x58\x60\xf9\x22\x8b\x28\xab\xb5\x31\xca\x7e\x66\x56\x47\x54\xec\x77\xd2\x95\xb4\x1d\xe3\x6b\x1d\x7c\x86\xac\x30\x04\xa2\x86\x13\x01\x04\x9c\x38\x53\x48\xdd\xf5\xbd\x73\x5f\x79\x78\xfe\xcf\x29\xd6\x96\x4c\xe1\x0a\x5c\xaf\x4c\x3c\xe9\xc6\xa5\x3c\x9f\xdc\xe1\x5c\xdc\x70\x4b\x18\x02\xff\x11\x4e\x3c\xe9\xbf\x49\x11\x97\x7d\x37\xd2\x4f\x5d\x01\xc7\x34\x56\x67\x53\x5f\xb1\x44\x8d\x7d\xe8\x75\x95\x37\xb4\x36\x90\x6f\xe9\x39\x57\x7c\xfd\x6f\xcc\x00\xfb\xd6\xb1\x52\xe7\x92\x73\xa6\xc6\xb5\xdc\x4d\xfa\x64\x37\x22\x28\x4c\x79\x7f\xb9\x76\x5d\x35\x9e\x76\x53\xc1\x38\x1c\xc4\x28\x75\x4e\xd6\xce\x1f\x2b\x6d\x5e\xea\x3f\x93\x6d\xc4\xe0\x92\x1c\xf1\x98\xae\x68\x72\xad\x71\xbd\xe7\x97\xf5\xfe\x62\x72\xb1\xa4\x67\xfa\xd6\x7c\x6b\xaa\xfc\xb1\x52\xfe\x61\x33\xa7\x92\x0f\xcb\x37\x4b\xdc\x39\xc3\x1e\x62\xa5\x2a\xaa\x95\x85\x5b\x6b\x5e\x6c\x3d\x38\x55\x97\x28\x43\x24\xc1\x7b\xfc\x6f\x57\xf3\xe7\x38\x35\x48\x36\x5d\xe5\x24\x9d\x3f\xb2\xf6\x7c\xc8\x4d\x5f\xf3\xcf\xed\x37\xe7\x62\xb3\xe3\x2a\x6e\xc7\x9f\x93\x62\x96\x3d\x56\x1a\xd8\x61\xb8\x9e\x76\xf0\x4e\xfe\x9c\x86\x12\xe9\xe8\x40\x01\x6e\xa8\x6d\xda\xc6\x56\x95\xc9\x9a\xf9\x68\x8c\xa4\xb5\x49\x60\xf7\xb1\xd2\x67\x6b\x21\x9a\xae\x09\x18\xcf\x8a\x57\xfb\x4d\x8e\xcc\x29\xa6\xb3\x3f\xa6\xb7\xe2\x4c\x06\x5e\x39\xf8\xda\x0c\x29\x89\xfb\xa5\x1c\x2b\x5d\xa5\x5a\xfc\x4d\x16\x14\xde\xcf\xda\xf5\xf4\x62\x5e\xe7\x80\x4f\x39\xb5\x43\xbe\xb9\x8d\x0f\xd1\x8e\x57\x79\xcd\x67\x9d\x5b\x6e\xff\xbb\xec\x3b\xe9\xa9\x1e\x75\x34\x04\x9c\xd8\xdd\x16\xf2\xa8\x99\x30\x4e\x5d\xa7\x57\x66\xb7\xe5\xac\x6f\xf8\x69\x92\xf3\x97\x03\xdd\xe2\xe5\xf5\x81\x6b\xba\x56\x06\x64\x87\x83\x12\x6a\x38\x11\x40\xc0\x89\x43\xe7\x3f\x1b\x8e\x07\x6b\xfe\x3a\xc7\x35\xa6\xbf\x08\x16\xce\x09\x5c\xd3\x0c\xf2\xfa\x3c\xce\x5f\x6b\x70\x81\xb8\xc8\x23\x1c\x0f\x86\x40\xd4\x70\x22\x80\x80\x13\xaf\x45\x55\x7c\x55\x4e\xfa\xc9\xfe\xc5\xd7\x90\x19\x68\xa5\xd8\x51\x5d\xa8\x7d\x65\xd7\xa5\xe8\x75\x59\xb1\xc2\x52\x82\x56\xea\xf0\x7d\xa0\x86\x13\x01\x04\x9c\x78\x79\xb6\xcc\xe6\xea\x84\x0e\x0d\x93\x85\xcc\xb5\x27\x4d\xee\x1e\x43\x7e\x1b\x5d\xaa\xe7\x77\xce\x73\x6b\x99\x2e\x50\x50\xe0\x5f\x81\x21\x10\x35\x9c\x08\x20\xe0\x44\x41\x3a\x8f\xfd\x33\xd6\xdc\xc1\x5a\x57\xd3\xb3\x46\x7e\xad\x28\xe8\x0a\xed\xe2\xaf\x17\x62\xb2\x5f\xbe\xc1\x93\xf4\xfc\x01\x1c\xee\x1f\x51\xc3\x89\x00\x02\x4e\x34\x0b\x2e\x72\x6b\x19\xab\xdf\x3f\x55\x28\x77\x33\x12\xae\x5c\xba\x56\x83\xe7\x3b\x02\xb0\xa9\x67\xb3\xa6\x84\x16\x66\xba\xcb\xc0\x10\x88\x1a\x4e\x04\x10\x70\x22\x13\xa5\x41\x07\x66\x95\xf2\xf1\x4b\xd6\x77\x6c\x95\x99\x7a\xb7\x1f\xc6\x24\xee\xf4\xe0\x78\xff\xd1\xf8\xb6\xf4\xe8\x59\x5c\x97\x23\x0c\x81\xa8\xe1\x44\x00\x01\x27\x96\xea\x3d\x7a\x85\x0d\x71\x6d\x7b\x40\x7f\x96\xd1\xf6\xc7\xec\xe8\x66\x96\x81\xff\x14\x87\xb5\xf3\x4d\xaa\x5c\x09\x9d\x2b\xc2\x67\x61\x08\xfc\x47\x38\xf1\xa4\xbe\x73\x14\x26\x04\x9c\xe8\x46\x4d\x7b\x4b\x84\x55\x40\xbf\x3a\x41\xe9\x39\x81\xe4\x3b\x3f\x69\x7d\x31\x57\x67\xbf\x86\x62\x11\xe8\x83\x2d\x18\x15\x46\x05\x43\x20\x6a\x38\x11\x40\xc0\x89\x32\x6e\xd9\xf5\xca\xfa\x5f\xf1\x2c\xce\xb9\xbd\xb1\xe6\x65\x5c\xa4\x5e\x7d\x53\x1d\xf6\xdb\x62\x4e\x69\xbd\xcd\xf1\x05\x75\xab\x39\x0c\x81\xa8\xe1\x44\x00\x01\x27\x7e\x5f\x10\xc8\xe1\x4b\x6f\x3a\xfd\xdf\xcf\xcc\xe1\xd1\xdb\xdf\x05\xc6\x72\x4a\x97\x81\xbc\xd6\x48\xe6\xb0\x0a\xf2\x99\xd4\x9b\x36\x30\x04\xa2\x86\x13\x01\x04\x9c\xe8\xc1\x5e\xaf\x3d\xa7\x23\x87\xeb\x94\x10\x05\x77\xff\xd7\xc1\xc6\xac\x4d\x0b\x4c\x9c\x8a\x17\x95\xb3\xb0\xd7\xf7\xa8\x09\xd5\x85\x21\x10\x35\x9c\x08\x20\xe0\xc4\x98\xf7\x6f\xca\xd5\x72\xeb\x18\xac\x85\xaa\xf8\x88\xfc\xb7\xa2\xbd\xde\x55\x4f\x91\x26\x90\x7d\x3a\xd3\x68\xff\xa4\xb1\xd4\x88\x1e\x86\x40\xd4\x70\x22\x80\x80\x13\x6d\x7f\x4b\x71\xdf\x1e\xb8\x1b\x3d\x30\x72\xe5\x73\x47\x9e\x59\x74\x03\xc3\x5a\xc4\xb2\x79\xd4\xb0\xaa\xd7\x8d\x39\x32\x56\x36\x39\x18\x02\x51\xc3\x89\x00\x02\x4e\x4c\x8a\x36\xf6\x61\x7a\x9c\x79\x41\x72\x50\x94\x9b\x5a\x5f\x30\x2e\xd3\xb3\xdb\x2a\xd2\xd5\xde\x87\xea\x46\xf9\x2a\xc3\xad\x76\x6a\x18\x02\x51\xc3\x89\x00\x02\x4e\x74\xd1\xbf\x28\x3f\x68\x39\xa8\xa5\xe3\x25\x5f\x16\xa8\xf3\x9a\xb5\x2e\xc8\xc1\xd7\x23\x09\xbf\x57\x81\xd3\xf2\xd3\xb7\x8f\x42\x77\x60\x08\xfc\x47\x38\xf1\xa4\x95\xf9\x28\x4c\x08\x38\xf1\x26\x7b\x30\x43\x72\xd9\x64\x81\xe6\x33\x7b\xc2\xaf\xaf\x70\xef\x97\xdc\x79\x2b\x0a\x2c\x5c\xf1\xae\xd8\xb8\x26\x39\xe7\xa2\xe5\x0c\x43\x20\x6a\x38\x11\x40\xc0\x89\x57\x82\xaa\x3f\xc7\xa8\x24\x24\xee\x98\x6f\xbe\x8f\xb0\x8b\x79\x29\xb2\xe1\x3a\x54\x72\x51\x82\xf8\xad\xcc\xdf\x8f\xeb\x8f\x63\x8d\x60\x08\x44\x0d\x27\x02\x08\x38\x51\x84\xd8\x4d\x7a\x45\x47\x5b\xc3\x2a\xe9\x42\x7f\xbe\x53\xd5\xec\x7a\xc8\xb6\x17\xc6\x95\x1d\xd7\xa1\xaa\x3b\x79\x2c\xd4\x80\x05\x86\x40\xd4\x70\x22\x80\x80\x13\x9d\x29\x7e\x79\x96\x8f\x0d\xe5\x33\x6e\x83\x96\xb5\x69\xdc\x1f\x03\xdb\x34\xcb\x49\xa9\xeb\x3d\xb4\xc4\x56\x57\xb3\x24\x85\x45\x60\x08\x44\x0d\x27\x02\x08\x38\x31\x53\xa5\x65\x22\x57\xb7\x90\xed\x73\x55\xb5\xaf\x1d\xf1\x54\x3b\xae\x52\x83\x69\x1c\xb3\xa6\x00\x57\x70\x5e\x6c\xed\x57\x25\x13\x18\x02\x51\xc3\x89\x00\x02\x4e\xfc\x14\xed\xf4\x97\xf4\xa1\x4a\xcb\x0c\x6d\x87\xea\x44\xd9\xe5\x73\xa9\x83\x91\xd4\xbd\xe4\x0c\xcb\xd7\x04\x3b\xcf\x3b\x8e\x3a\xca\xc3\x10\x88\x1a\x4e\x04\x10\x70\x22\x74\xed\x21\xcc\xb3\x2f\xf0\xbc\x53\x83\x86\x39\x48\x30\x62\x99\x9e\x56\x6a\x40\xbd\x85\x35\x50\x91\x3b\xb7\xa9\x58\x95\xfe\xf0\x7b\x85\x1a\x4e\x04\x10\x70\x22\x01\x6b\xba\xc0\xb7\x6d\x63\xf1\xd0\xeb\xbd\x31\x8b\x13\xc2\x80\x49\xe1\xb9\xe8\x94\xb2\xb6\x3e\x7a\x1c\x79\xb5\xda\x27\x26\xec\x30\x04\xfe\x23\x9c\x78\xd2\xde\xf5\x28\x4c\x08\x38\xb1\x64\x4c\x0d\x26\x33\x7e\xb6\x7b\xd6\xf3\x3e\x1d\xf5\x0d\x5e\xa0\xd6\x5b\x75\xef\xf4\xcd\x5d\x8e\xcc\xce\xb0\xe2\x3f\xf9\xa5\x4e\x30\x04\xa2\x86\x13\x01\x04\x9c\x78\x9a\x34\x50\xe4\xc1\xf4\x29\x43\x57\x82\xc8\x0f\x7f\xf2\x5c\x56\xf3\x16\xde\xad\xbc\x79\xff\x6c\xe5\x5d\x5b\xe9\xe0\x90\x4e\xf3\xe1\x6b\xa0\x86\x13\x01\x04\x9c\x58\xea\x9a\x65\x68\x1d\xea\x69\xed\x25\xbd\x7d\x05\xc7\x61\xde\xbb\x64\x25\x8b\x70\xdd\xf1\x65\x6a\xc2\x2c\x66\x5e\x57\xb9\xcf\x02\x86\x40\xd4\x70\x22\x80\x80\x13\x2f\x3c\x79\x4c\x1c\xef\x97\xed\xef\x9f\xb3\x43\x95\x31\x40\xaf\xfb\x02\xf8\x9a\x17\xb1\x19\xae\x93\xaf\x6f\x18\xb1\xd4\xb9\x2f\x0a\x43\x20\x6a\x38\x11\x40\xc0\x89\xd5\x98\xb0\xd3\x0f\xc5\xac\xb6\x94\xb3\x29\x5e\xb4\xc8\xdc\x01\x94\x95\xe8\x07\x13\x68\xca\xbb\x1e\xdb\xb9\xb3\x5f\x65\x92\x3a\x7c\x1f\xa8\xe1\x44\x00\x01\x27\xf6\xeb\x32\xc1\x54\xa3\xa7\xc9\x5b\x22\xf1\xe3\x1f\x3b\x9b\xb1\xff\x4e\x98\xa5\xd4\xce\xb9\x70\xef\x82\xeb\xb3\x34\x1d\xe3\x40\x01\x18\x02\x51\xc3\x89\x00\x02\x4e\x6c\x8c\xa0\xd3\xd1\xc1\xd1\x4e\x0e\x1e\xc5\xd2\x5a\xe8\xf6\xde\xb0\xb3\x78\xf6\x43\x7d\xfe\xfe\xcb\xa2\x87\x78\x17\x27\x6c\x7f\x5e\x86\x21\x10\x35\x9c\x08\x20\xe0\x44\x52\xef\x3d\x1a\xb9\x5e\x1a\xef\x8a\x77\x2e\x39\x95\x63\x67\x42\x0b\x1f\xdc\x6c\x37\xb2\x2d\xf5\x81\x9a\xdb\xbb\xeb\x45\x2d\x8d\x61\x08\xfc\x47\x38\xf1\xa4\xe9\xee\x28\x4c\x08\x38\x91\xa2\xf5\xac\x54\xed\xaa\x01\xbb\xc4\xde\x67\xa6\xf3\x9e\x79\xdf\xdb\xde\xe2\x19\xa8\x66\x49\x99\x7d\x4b\x36\x62\x20\x37\xfa\xef\x70\x7b\x84\x1a\x4e\x04\x10\x70\x22\x89\xcf\xde\xf7\x0c\x28\x6f\x45\x86\x1f\x2f\x88\x34\x57\x31\xa1\xf4\xd9\x3d\xc6\xaa\xf4\x84\x1f\x3f\x3c\x36\xa9\x6d\x3f\x3e\x3c\x5c\x35\x50\xc3\x89\x00\x02\x4e\xfc\x6a\x22\xbf\xdf\xe8\x23\xe3\x45\x0e\x3d\xb6\xf2\x09\xfa\x06\x1b\x57\x7f\xee\x88\x3c\xdd\xbc\xd7\x33\x53\x73\xd6\x53\x1d\x83\x0f\x43\x20\x6a\x38\x11\x40\xc0\x89\xf8\xeb\xf5\x43\x7a\x1c\x34\x77\xe5\xd2\x3c\x2b\xa2\xd3\x48\xbd\xe9\xeb\x5c\x54\x64\x3e\xba\xe6\x87\x88\x66\x71\xab\xb2\xf8\xc8\xc2\x10\x88\x1a\x4e\x04\x10\x70\xa2\x84\xbc\x49\xff\x80\x9a\x54\x5a\x4c\xb3\x59\xfd\x4b\xb7\xaa\x54\xa3\x4c\x8e\x88\x2b\x57\x25\x1f\x2c\x4d\x66\x75\x15\x9c\xcf\xb8\x09\x43\x20\x6a\x38\x11\x40\xc0\x89\xac\xc5\x86\xb2\x9f\x9e\xb2\x57\xed\xac\x45\x46\xa9\x36\xf0\x51\x47\x26\x69\x12\x56\xf3\x00\xb4\x91\x9c\xe9\x97\x54\x16\x07\x0f\x5f\x03\x35\x9c\x08\x20\xe0\x44\xc3\xd4\xaf\xad\x56\x8e\xed\x4e\x8e\xfd\xdc\xb3\x71\x59\x3c\x7f\xf7\x12\x3d\x82\xa7\x70\x16\x38\x74\xec\xe7\x45\xc8\x22\x62\xce\xc0\x10\x88\x1a\x4e\x04\x10\x70\x62\xe7\xe3\x8a\x79\xde\xc0\xae\x3c\xc7\xb3\x01\xef\x1d\x93\xdc\xcf\x4c\xca\xf0\x45\xb7\xb9\xbe\x49\x70\x89\x5d\x5d\x38\x7f\xe3\xb9\x38\x0c\x81\xff\x08\x27\x9e\x74\xfe\x71\x14\x26\x04\x9c\xc8\x50\x12\x7e\xc0\xd4\x10\x78\x20\xfb\x79\xcc\x6d\x69\x49\x20\x86\xc6\x70\x5c\x75\x9c\xa7\xba\xbe\x4d\x11\xd7\x6f\x92\xd7\x41\x02\x86\x40\xd4\x70\x22\x80\x80\x13\x3d\x79\x2e\x07\xaf\xb0\x5b\xbc\x72\xb8\x39\xbe\x2a\x77\x50\x91\x60\x31\xb7\xa8\x22\x98\x1c\xf9\x9e\xa3\x55\xe8\xcc\x41\xbb\xd8\xe1\x87\x87\x1a\x4e\x04\x10\x70\xa2\x7e\xe7\xc2\x9f\xed\x47\x9b\xd4\x77\x48\x68\xe5\xdf\x7e\xfb\x15\x09\x29\x15\xb1\xf4\x07\x14\xdf\x05\xf7\x8a\xce\x87\x2d\x2e\x1f\x6e\x5d\x50\xc3\x89\x00\x02\x4e\x7c\x4c\xe9\xf3\xdf\x8d\xa6\x2f\xd6\xb3\xae\x59\x3d\xbe\x25\x5e\xee\x8d\xf4\xbe\x0e\xf7\x4e\xd1\x5e\xe4\x29\xe6\xc4\xb7\xe5\xce\x27\x83\x21\x10\x35\x9c\x08\x20\xe0\x44\xae\xf0\x3d\xfe\xb4\x53\x6f\x04\xe4\x6e\x0d\xe7\x10\xcb\xf5\xf9\xf7\xfa\xfa\x66\x39\x15\x7f\x9c\xf8\x98\x23\xe7\x2c\x32\x31\x72\xf8\x79\xa0\x86\x13\x01\x04\x9c\x68\xbe\x58\x14\xfb\x6d\xcb\x41\xea\xd4\xe3\xef\xda\x1f\x7c\x4c\xcc\x1e\xb6\x7a\xbc\x25\x0c\x3b\x77\xf3\x89\x8e\xc3\x6d\xe6\x84\xff\xff\x6f\x28\xa8\xe1\x44\x00\x01\x27\x9a\xdd\x3c\x4f\xf2\x80\x6d\x9c\xb0\x66\x6f\xb4\xb6\xc4\xe2\xc9\x03\xaf\x95\xa5\x58\xb8\x1e\x97\x40\xea\x96\x8a\xef\x26\x57\x36\x08\x43\x20\x6a\x38\x11\x40\xc0\x89\xd2\x2b\xb9\xb6\x3d\x26\x11\xdf\x22\x65\x2f\x3a\xad\xda\xa5\xea\x97\xb2\x9d\x06\xbf\x38\xbf\xb0\x0b\x34\x1a\x5b\xa8\x66\x7b\x7f\x1a\x86\xc0\x7f\x84\x13\x4f\x3a\x21\x3c\x0a\x13\x02\x4e\x94\xb8\x28\xa3\x49\x0f\xde\x63\xde\x56\x5c\xfb\x04\x1d\xf4\x73\x09\x53\xba\x99\xbd\xb6\xe3\xf6\x5d\x2a\xca\x65\x27\x1d\xff\xa4\x0e\x43\x20\x6a\x38\x11\x40\xc0\x89\x17\x6e\xdd\x2c\x3d\x48\xe0\xb7\x4d\xe4\xbf\x90\x17\xa9\x24\x3f\x9b\x38\xc1\xf4\xed\x81\xd6\x87\x00\x69\xd8\x9d\x53\xbd\xfc\xe1\xe1\xb6\x02\x35\x9c\x08\x20\xe0\xc4\x5c\xfa\xd5\xbb\x62\xfb\xad\x51\xbd\xc4\xc3\xe5\x37\xcc\x9d\x9d\x54\x6b\xdc\xd6\x5d\xfc\x5c\x58\x2d\x3b\x3d\xc3\x71\x47\x17\xb1\x30\x04\xa2\x86\x13\x01\x04\x9c\x78\x85\x29\xce\xbb\xf0\xec\x9d\x01\x8e\xa2\xfb\xca\xe0\xe7\xf3\x2e\xb2\xba\xee\xaf\xbd\xb4\x19\x89\x58\x53\xe6\xbb\x34\xe6\x2c\x0f\x67\x26\xd4\x70\x22\x80\x80\x13\x45\x87\x7a\xaf\x97\xd7\xb8\xd5\xb8\xc8\xd1\x69\x39\xcc\x1e\x78\x9c\x1d\xa4\x76\x82\x64\x62\xaf\x91\xa8\x7d\x55\x98\x21\xde\x39\x5c\xfd\x50\xc3\x89\x00\x02\x4e\x54\x3e\xad\x36\x72\x3e\x3e\xf6\xcd\x4e\xbf\xfa\x80\x31\xff\x85\x57\x9b\xf7\x08\x59\xd7\x9e\x2f\x2f\x2e\xca\x79\xf5\x3b\x91\xe0\x2a\xc1\x10\x88\x1a\x4e\x04\x10\x70\xe2\x55\xd5\x6f\x5e\x83\x1b\x58\xe9\xba\xd0\x27\x71\x5d\x73\xf7\x64\xc5\xca\x7c\xee\x91\xc4\x0a\xdd\x27\x5b\x54\xac\x0f\x63\xba\xc4\x06\x43\x20\x6a\x38\x11\x40\xc0\x89\x8d\xd1\xec\x52\x6e\xef\x3a\x41\xab\x27\x7f\xa4\xe9\x09\xd5\x24\xcb\xbd\xf8\x75\xef\xf0\xd0\x12\xe1\x49\x2f\x0e\xb0\x14\x5e\x3d\x9c\xc5\xff\x11\x4e\x3c\xe9\x0c\xfd\x28\x4c\x08\x38\xb1\x8a\x6d\x68\xce\xc4\x44\xed\xc9\xc0\x5d\xfe\xad\x8f\x9c\xb3\x03\x74\xb5\x83\xef\xbe\x3c\x75\xbe\x21\xf7\xe1\xac\xfa\x1e\x4d\x2e\x1f\x0c\x81\xa8\xe1\x44\x00\x01\x27\xce\xeb\x80\x3a\x09\xa2\x33\x2c\xe5\x56\xd7\x5e\xce\x70\x71\xfa\x55\xb7\x4b\x65\x5d\x93\xde\xe5\xc6\x3e\x79\x11\x61\xb5\x31\x73\x38\x6b\xa0\x86\x13\x01\x04\x9c\xa8\x87\xd3\x40\x66\xc4\x12\xee\xe1\x70\x7f\x31\xef\xf2\xd3\xce\x29\x0e\x03\x25\x2b\xda\x1f\x78\x5e\x59\x14\xd6\x89\xec\x03\xb7\xb5\x61\x08\x44\x0d\x27\x02\x08\x38\xd1\xb7\x20\x87\x2a\x43\x83\xf0\xec\x69\x9e\xdd\x31\x3c\xbc\x71\x9d\xff\xa2\x6c\x62\x0e\x66\x39\x82\x4a\xec\xdb\x18\xae\xf6\xcb\x1d\xae\x7e\xa8\xe1\x44\x00\x09\x27\x4e\x9d\xa7\xaf\xff\xa1\x76\xb0\x88\x7f\x86\xdc\x7f\xfb\x65\x7b\x0d\xc4\xd3\x5a\x11\xfa\xc5\xfe\xc2\xf7\x6b\x44\x29\x5a\x49\x34\x30\x04\xa2\x86\x13\x01\x04\x9c\xa8\xab\x45\xcb\x41\x54\xf8\x61\xa2\x61\xdd\xc7\xec\xab\x74\x36\x13\xa7\xfe\x9d\x37\xa3\x9d\xb9\x89\x74\x3d\x75\xd7\x7f\x3d\xc5\xb1\x82\x21\x10\x35\x9c\x08\x20\xe0\x44\x96\xb3\xed\x9b\xe1\x54\x38\xc5\x85\x52\x5e\x77\x93\x94\xed\xf5\x1e\xf8\x67\xd2\x67\x78\xc5\x12\x68\xf7\xae\x7f\x7e\x7d\x9b\x81\x0e\x86\x40\xd4\x70\x22\x80\x80\x13\xef\xb0\x65\x8d\xe3\xe4\xbe\xff\x0f\xb3\x25\x39\xa5\x8e\xd5\xdb\xaf\x97\x8c\x32\x78\x5e\xcf\xef\x2d\xac\xc5\x93\x34\xb0\x27\xa3\x0f\x43\xe0\x3f\xc2\x89\x27\xe9\x82\x88\xcb\x3e\x33\xa1\x38\x9d\x88\x49\x47\xed\xe1\xd5\x8f\xf3\x12\x66\x41\x8e\x8f\x1b\x26\xc4\x33\x65\x52\xce\xd3\x19\x43\x6a\x65\xc2\xad\xa2\xc7\x4a\x3d\x2b\xe2\x1a\xee\x90\x6c\x1a\xca\x2f\xc4\x3f\xe1\x02\x5f\xab\x8e\x29\xb6\x37\x4d\xdf\xb0\xad\x3d\xbf\x0b\x7a\xe5\x26\xdf\x7b\x7d\xfc\x56\x8c\x57\x9a\xe0\xe5\x70\xe0\x4b\xfc\x86\xa9\xb9\x9f\x8d\xb3\x6a\x78\xbf\x29\x96\xd6\x76\xc3\x0d\xbf\x61\x12\xb1\x16\x3b\x65\xc7\xef\xda\x78\xc7\x17\x56\xfd\xc4\x4e\x5b\xd0\x2a\x62\xd2\xbd\x5a\x14\xca\x33\xf9\xb1\x8f\x34\xee\x25\xe9\x4d\xdd\xca\xbf\xc7\x2a\x78\x75\xed\x58\xe9\xb2\x44\xca\xe9\xd6\x17\xf6\x91\xe3\x3e\xeb\x1c\xa6\x1a\x44\x0a\x7d\xdb\x1b\xc5\x1e\xa3\xdf\x3e\x69\xe3\x36\x4c\xcd\x5e\x72\xff\xef\x58\x29\x1b\x49\x2e\x7f\x93\x2b\x67\x87\x78\xa9\x9e\x54\x64\x6a\xf7\xc4\x01\x85\x76\x8f\x41\xda\xf3\x31\xf5\x48\xed\x91\xf4\xfc\xe2\xae\x63\xa5\xf8\x4c\x83\xdc\xa3\xd0\x65\xed\x7a\x12\xaa\x81\xf9\x18\xaf\xec\x5d\xed\x12\xaf\xe4\xe0\x5b\x73\xa1\x02\x51\x26\x1d\x66\xec\x59\xc7\x4a\x15\x4e\x57\xdd\xce\x17\x73\xae\xf7\xa7\x52\x36\x00\x79\xb0\xf3\xa0\xd4\x0c\xe9\x7a\xd9\x72\x8d\x46\x05\xc5\xd8\xc6\xd4\x7b\xfa\xff\x5d\xf6\x9d\xf4\x54\xff\xaf\xa3\x61\x10\x66\x9f\x82\x7c\x63\xc9\xeb\xac\x3f\x6c\x0a\xec\x8a\xa7\x3f\xac\x3e\x5c\x99\xf2\xe4\xa7\xe3\x8b\x16\x7a\xdb\x27\xb5\x18\xd3\x4c\x39\x4d\x03\x43\x58\xd4\x66\x1f\x06\x61\xf6\xe5\x58\x05\x6e\xe2\x5d\xe3\x69\xb9\x15\x4c\x44\xd5\xaa\x6a\xd8\x9e\x21\x97\xa2\xfe\xea\xe3\xd3\xcb\x14\x06\xb8\x6b\x7a\xe2\x1d\x14\x30\x84\x45\x6d\xf6\x61\x10\x66\xdf\xa3\x06\xe9\x72\x8f\x60\xfe\xf7\xe6\x2c\x0b\x38\xb9\xd5\x89\x09\x91\xb7\x53\x5e\x1b\x9f\x0e\xbd\x4b\x98\xc3\xad\x8e\x6d\x7a\x0f\xc0\x10\x16\xb5\xd9\x87\x41\x98\x7d\x74\x2f\x52\x27\xcf\x39\x2c\x18\x17\x30\xc5\x5f\xe2\x98\x38\xbb\x39\x17\xf0\xe6\xaf\x6c\xea\x43\x88\x95\x5b\x7d\xfb\xbe\x37\xbb\x33\x0c\x61\x51\x9b\x7d\x18\x84\xd9\x97\xa5\x2e\xc7\x3f\xdc\xe3\x7f\x5a\xe7\x7b\x55\xb8\xfb\x02\xa3\x1e\x4d\xbe\xcc\x6d\xc8\x30\x7f\xe3\xc0\x8f\x95\xf6\x73\x8d\xd6\x19\x18\xc2\xa2\x36\xfb\x30\x08\xb3\x2f\x62\xe0\xa3\xee\x9d\x2c\x09\x4e\xd8\x35\x98\x19\x8c\x9f\x71\xa9\xfe\x40\x3b\x51\x8b\x37\xb1\x6e\x7c\x6e\xe3\x02\x6d\xc9\x8d\x3b\x30\x84\x45\x6d\xf6\x61\x10\x66\x5f\xd9\x08\x7e\x4d\x55\x40\x71\xad\xa0\x8c\x8d\x52\x0e\x86\x47\x4b\xfc\xf4\x25\x9b\xae\xe9\xfb\x69\x2d\xbc\xd8\xd2\x27\x77\x57\xa4\x61\x08\x8b\xda\xec\xc3\x20\xcc\x3e\x45\x27\x0e\xb9\x1b\x77\x0a\xfb\xec\x17\xd4\x5e\x15\xfc\x15\xda\x83\xce\x76\x28\xca\x54\x03\x99\x61\xab\x77\xaf\x87\xb5\x56\x9a\xc0\x10\xf6\x1f\xcd\xbe\x93\xfa\xce\x51\x98\x10\x66\x9f\x3b\x9e\xb8\x36\x95\x8d\x7d\x97\x47\xc5\xa0\xe4\x92\x7f\x86\xa5\x95\x98\x4c\x87\xf5\x1f\xeb\x5f\xd4\x9f\x52\xc5\xda\x1f\xac\x39\xc2\x10\x16\xb5\xd9\x87\x41\x98\x7d\x35\x17\x5f\x7c\x0b\xbb\x8d\x7f\x5b\x81\xfa\x9d\x67\xa6\x11\x8b\xba\xe5\xd9\x4b\x0a\xf9\xaa\x5d\x35\x3f\xdf\x0b\x48\x5f\xb2\x6f\x3a\x0f\x43\x58\xd4\x66\x1f\x06\x61\xf6\x29\xc8\x85\xc3\x4d\x33\xe7\x1e\xf2\x6c\x6c\x61\xa8\xbc\x83\xc9\xcd\xe9\x7a\xdb\x2c\x08\xf7\x1c\x54\xb5\xee\x32\x78\x0b\x08\x8a\xc3\x10\x16\xb5\xd9\x87\x41\x98\x7d\x5d\xcc\x9f\x32\x3f\x0d\x7e\xf8\x7e\x77\x54\x80\xc3\x99\x94\x28\x32\x84\xe0\x7a\x3d\xe7\x2f\x42\xcb\xf4\x70\x23\xaf\xc4\xa8\x57\x5c\x30\x84\x45\x6d\xf6\x61\x10\x66\xdf\x8c\xc7\x38\x07\x77\x09\x67\xf4\x9b\x66\x86\x37\xbc\xd3\x8f\xe5\x38\xbf\xbd\x55\xe5\x5f\xf4\x36\x6a\xbe\xf9\xe8\xa1\xa9\x66\x96\x21\x0c\x61\x51\x9b\x7d\x18\x84\xd9\x67\xd3\xf9\x81\x3d\x65\xb5\xc3\x96\xf1\x96\x6b\xac\x57\xf2\x7c\x1e\xe7\xa5\xf1\x5d\xee\x31\x39\x09\xe9\x41\x8f\x75\xb1\x8c\x6f\x18\x18\xc2\xa2\x36\xfb\x30\x08\xb3\x2f\xbc\x80\x61\x8d\xfa\x5b\xfb\x79\x68\x19\xf4\x9b\x24\xb1\x1f\x07\x2e\xe2\x28\xc4\x6d\x2e\xca\x92\x4e\xdd\xb8\xa0\xe9\xf1\x49\x17\x86\xb0\xa8\xcd\x3e\x0c\xc2\xec\xe3\xab\x9a\x15\x36\xbb\x3c\xcd\x65\x82\x7d\x6b\x03\xab\x99\x04\x5b\xeb\x0a\xd7\x14\xfa\xd7\x49\x65\x8d\xc7\xec\xf7\xbf\xcf\x61\x85\x21\xec\x3f\x9a\x7d\x27\xad\xcc\x47\x61\x42\x98\x7d\x3c\x9a\x66\x96\x5a\x2c\xa4\x92\x3a\xc4\x0b\xaf\xc2\xe7\xb5\xe9\xf6\x94\xfc\x05\x29\xba\xa8\x7e\xdf\x38\xb5\xe7\xd2\xfd\x88\x4a\x00\x86\xb0\xa8\xcd\x3e\x0c\xc2\xec\x13\xf8\xcb\xa0\xf9\xd6\xfb\xa9\x66\x84\x3f\x5f\xcf\xf4\xd3\x98\x94\xe9\x2a\x48\x42\xc5\x31\x9c\x72\xab\x0c\x5b\x57\x7e\xae\x8e\x18\x86\xb0\xa8\xcd\x3e\x0c\xc2\xec\x8b\x22\xfb\xbd\x77\xf9\x6d\x25\x8d\x19\xb5\x7c\xe6\xd7\x59\x46\xd7\x5a\x9d\x42\xb3\x4d\x2e\xbf\xeb\x3f\xee\xc2\xe1\xdf\x87\xfc\xd9\x60\x08\x8b\xda\xec\xc3\x20\xcc\x3e\xaf\x1c\x69\x37\xb5\x6d\x51\x5e\x23\xa5\x37\xe9\x5f\x48\xb0\x5e\x58\x16\x97\x4b\x22\x93\x17\x71\xfb\x94\xae\xf6\x93\x4c\x5f\x65\x86\x21\x2c\x6a\xb3\x0f\x83\x30\xfb\x4a\xb0\x05\x8b\x52\x2f\x0a\x0a\x97\xcc\xd3\xbb\x94\xb8\xeb\x3f\xae\x50\xf8\x94\xe1\x74\x28\x58\xb5\x6d\x98\x4c\xf7\x31\x43\x97\x60\x08\x8b\xda\xec\xc3\x20\xcc\x3e\x43\xa2\xcc\x14\x47\xe9\x3a\xc5\x8b\x61\x19\xcf\x41\x3d\x91\x49\xe3\x4b\x17\x0e\x6a\xdf\x2b\x50\x56\x48\xe1\x75\x09\xc8\x92\x4a\xc2\x10\x16\xb5\xd9\x87\x41\x98\x7d\xa6\xf2\x24\xf1\x03\x6f\x83\x16\xd3\x65\x58\x05\xec\x78\x44\x94\x17\x55\xf8\x95\xe8\xbe\x32\x5b\x9d\xa9\x10\x20\xfe\xa9\x23\xa1\x00\x43\x58\xd4\x66\x1f\x06\x61\xf6\xed\x28\x62\x70\xf7\xfb\xd9\xe6\xcf\x66\x09\x32\x0d\x09\x79\x31\x39\x91\x70\x19\x8e\x5f\xfb\xf1\x55\xe7\xe1\xa4\xd1\xf8\x41\x8f\x18\x0c\x61\xff\xd1\xec\x3b\x69\xef\x7a\x14\x26\x84\xd9\x67\x3b\x01\x51\x48\xeb\xf7\x30\x67\xe8\xff\xd2\x9b\xf2\x5e\x61\x67\x9e\x7a\x9d\x9d\x34\x2f\xef\xa6\x24\xc8\x77\xd5\x9f\x4e\x43\x14\x86\xb0\xa8\xcd\x3e\x0c\xc2\xec\xfb\xc2\x5c\x2b\x68\xa2\x50\x78\xc3\xba\x71\x24\x47\xb3\x2a\xe4\x51\x90\x69\x97\x2c\xf1\x19\x49\x8d\x16\xf9\xcf\x21\x91\xb5\x0f\x35\x61\x08\x8b\xda\xec\xc3\x20\xcc\x3e\x1b\x62\x9b\x88\x90\xdf\x39\xa5\x57\xd5\x00\xf6\x51\xc9\x21\x3a\xb2\x42\xc2\x5c\x41\x2a\xe6\x11\x53\x79\xd9\x24\xa5\xb5\x77\x2e\x30\x84\x45\x6d\xf6\x61\x10\x66\x9f\xab\x0a\xc3\x33\xbd\x5f\xfd\x1e\x24\xbb\x97\x1d\xdf\x32\x74\x93\x4d\x67\x32\x0e\x68\x2d\xa7\x8e\x29\x11\x8b\xdb\x97\x62\x5b\x44\x60\x08\x8b\xda\xec\xc3\x20\xcc\x3e\x25\x9c\xf9\x50\x5d\x77\xb7\xe8\x9f\xfb\x5f\xae\x79\x09\x24\x12\xd4\x5f\xee\xf9\xaf\xa7\xda\x72\xab\xed\x87\x01\x49\x55\xfa\x9d\x8b\x30\x84\x45\x6d\xf6\x61\x10\x66\x5f\xdc\x18\x0b\x4e\x72\x25\x61\x15\xbc\xa8\x72\x26\xf0\xd5\x33\x5e\x73\xa5\x25\x81\xee\x05\x69\x49\x22\x2b\x99\xc6\x5b\xaf\xa6\xce\xc2\x10\x16\xb5\xd9\x87\x41\x98\x7d\xb6\x77\x9f\x6d\xe8\xb9\x7d\x26\x7d\x4f\xa7\x20\xba\xca\xfb\xe2\xea\xaa\xe1\x60\x51\x0d\xf3\x75\xee\xa6\x14\x99\xe5\x44\x70\x13\x84\x21\x2c\x6a\xb3\x0f\x83\x30\xfb\xa2\x2f\xe5\xea\x6b\x5d\x79\x07\x51\xb7\x2d\x73\x4d\xf9\x24\x6e\x4d\x96\xb8\xb8\x94\x3c\x0d\x96\xa1\x18\x18\x8c\x9d\xf5\x8e\x81\x60\x08\xfb\x8f\x66\xdf\x49\xd3\xdd\x51\x98\x10\x66\x5f\x60\x6a\xea\x56\x10\x3b\xb1\xf0\x9c\xf3\xc1\xe7\x04\xf2\xb7\x1c\xc1\x1f\x22\x57\xb3\x04\xba\x86\xac\xb8\x19\xe5\x28\x3b\x71\xc9\x60\x08\x8b\xda\xec\xc3\x20\xcc\x3e\x95\x7e\x95\x7c\x96\x6f\x35\x6e\x8f\xc7\x6d\x95\x6f\x25\x4b\x74\xcb\x7f\x25\x8a\x4c\x9f\xe5\x9f\x9b\xd9\x2d\x60\x69\xe8\x34\x13\x82\x21\x2c\x6a\xb3\x0f\x83\x30\xfb\x5e\x1b\x5e\x7f\x79\x7a\xf3\x8a\x71\x7f\x78\xb6\xb0\x9f\xd0\xa6\xdd\x6e\x1c\xee\xbd\x83\xa7\x4b\x9f\x42\x6a\x3f\xfd\xc2\xcb\xd2\x96\x80\x21\x2c\x6a\xb3\x0f\x83\x30\xfb\x62\xc5\x7d\x99\xe3\x4a\x27\x96\x9e\x9e\xb3\xcc\xaf\xcc\x64\x59\x1b\xd7\x8d\x4a\x98\xe1\xe5\x2e\xa5\xbd\x9d\x53\xa6\xda\xb6\x2b\x0c\x43\x58\xd4\x66\x1f\x06\x61\xf6\x39\x52\x84\x07\x68\x29\x2a\xfc\x91\xc2\xbd\x2c\xac\xdc\xe0\x1b\xc8\xd5\x35\xb6\xfa\xcc\xfa\x06\x5f\x09\x85\xd3\xa2\x6c\x50\xad\x22\x0c\x61\x51\x9b\x7d\x18\x84\xd9\x17\xdf\xfe\x95\xd4\x99\xa9\x74\xb3\x66\x51\xb3\xc3\xfa\x65\x86\xe2\x25\x58\xa4\x7f\x63\x3a\xec\xf6\xf6\xbd\x91\x9e\x8c\xfc\x68\x22\x18\xc2\xa2\x36\xfb\x30\x08\xb3\x6f\xd5\x92\x79\x0d\xd8\x80\x07\x95\x2a\xcc\x62\x64\x47\xd9\x62\x92\x2b\x72\x16\xe7\x6c\x30\xe7\xc9\xae\x16\xbc\xd2\xf9\x58\xa9\x0d\x43\x58\xd4\x66\x1f\x06\x61\xf6\x59\x07\x19\x9c\x5d\xd6\x7c\xb6\x1e\x5b\x42\xa4\x66\x9d\x67\x3f\x51\xa1\xe8\x58\x04\x2b\x5d\x71\xaa\x66\x28\x9f\xaa\xee\xbf\x61\x0e\x43\xd8\x7f\x34\xfb\x4e\x3a\xff\x38\x0a\x13\xc2\xec\x63\x20\xfd\xea\x2e\x9a\x9a\x82\xd7\x31\xe4\xa3\x51\x12\x6f\xbf\x49\x30\x1b\xee\xf4\xf0\x53\x66\xe0\x2d\x95\x58\xd7\xa6\x0b\xea\x0e\x30\x84\x45\x6d\xf6\x61\x10\x66\x1f\x4e\xbe\x0f\xab\x0a\x1f\xb7\xbc\xc5\x1d\x8e\xf2\x24\xbf\x29\xce\xa6\xa1\xcf\xf1\x8b\x4d\x24\x56\x4e\x02\x74\x9d\xcc\x7b\x63\x9c\x30\x84\x45\x6d\xf6\x61\x10\x66\x9f\x25\xf3\xf7\x33\xbb\x4e\xa5\xe2\x84\x77\x56\x33\x17\x77\xdc\x61\xff\x61\x02\x05\x37\x2e\x8d\x83\xe6\xea\x54\x5d\x45\x87\x79\x26\x18\xc2\xa2\x36\xfb\x30\x08\xb3\xcf\x40\xb4\xd8\xfd\xa5\x55\xe3\xa3\x3a\x7c\xbc\x65\x61\x11\x0b\x1c\x51\x1a\xaa\xa6\xa9\xf9\xfb\x2e\xbf\x9e\x84\xa4\xe5\x39\xec\x51\xc2\x10\x16\xb5\xd9\x87\x41\x98\x7d\x59\x6c\x1d\x2e\x26\xa9\xc3\x3b\xeb\xba\xa9\xe9\x7f\x45\x42\xd8\x42\x29\x67\x9e\xba\x64\x57\x7c\x0e\xe8\xab\x13\xbc\xf8\x1b\xbe\x0c\x43\x58\xd4\x66\x1f\x06\x61\xf6\xad\x98\x6f\xc8\x0b\x9d\x2f\x7b\x37\xf7\x48\x38\xa2\xdd\xc2\xe8\x22\x0e\x5b\x9b\x48\xa2\xdc\xf8\xae\x55\x1a\x9d\x23\x30\xdd\xc3\x00\x43\x58\xd4\x66\x1f\x06\x61\xf6\x65\x53\xc6\x3e\x95\xfb\x8b\x93\x51\xf8\x43\x8e\x4f\x89\xa3\x78\xa8\xce\x4e\x80\xaf\xfd\xbf\x70\xba\xcc\x03\xdc\xb2\x3b\x1f\x2a\x0e\x67\x26\xd4\x66\x1f\x06\x61\xf6\x9d\xa6\x1d\x31\x7e\x3d\x53\xd5\xab\xeb\x29\xb2\xc5\xa8\x88\x7b\x30\xff\x9c\x29\x02\xd7\x55\xdb\x54\xd8\x6e\xd0\x3e\xf6\xe2\x23\x29\x18\xc2\xfe\xa3\xd9\x77\xd2\x09\xe1\x51\x98\x10\x66\x5f\x51\x1b\x21\x86\xaf\x23\x21\xc6\xea\x99\x73\x58\xca\xb6\xe6\x8f\xa9\x8f\x7f\xb3\x86\x4b\x2e\x5a\x93\x96\x60\x0a\xfd\xbb\x9f\xa9\xc3\x10\x16\xb5\xd9\x87\x41\x98\x7d\xdd\x8d\xbd\x55\x3f\x2c\x3a\x85\xf4\xf7\x96\x49\xa5\x70\x5a\x36\x2f\x85\x5b\x9f\x33\x6c\xfc\x0b\x47\x63\x6a\x33\xbe\xdb\xc6\x1e\xce\x1a\xa8\xcd\x3e\x0c\xc2\xec\xeb\xee\x53\x35\xf5\x0c\xdb\x67\x8c\x55\x6b\xb1\x8e\xdc\x78\x17\xf8\x59\x25\x47\xe4\xb6\x80\x09\x21\xdb\x0d\x65\xc9\x2c\x66\xf6\xc3\xd7\x40\x6d\xf6\x61\x10\x66\x9f\x8b\x59\x47\x96\xf8\xac\x58\xc2\x7d\xae\x47\x16\x82\x0d\xcf\xc2\x38\x28\xca\x64\x63\x80\xbd\x38\xcf\x5e\x67\x76\xa3\x87\xab\x87\xab\x06\x6a\xb3\x0f\x83\x30\xfb\x4a\x62\xe7\xd4\xe7\xfe\xa8\xfb\x9d\xfa\xe9\xab\x68\x7e\xef\xe7\x7f\x95\x2b\x96\xfe\xe2\xd2\x78\x9a\xb5\x86\x5b\x33\xff\xf5\x35\x08\xc2\x10\x16\xb5\xd9\x87\x41\x98\x7d\x75\x77\xd3\x09\xed\x69\xa0\x5a\x3d\x5f\x65\x65\xf3\xc9\x55\xd2\x4e\x31\xa6\x3b\xea\x10\xf5\x66\x75\xee\x81\x82\x09\x9e\xaa\x35\x0c\x61\x51\x9b\x7d\x18\x84\xd9\x67\xf3\xee\x6a\xcf\xd4\x60\x50\x41\x46\x89\x1f\x43\x30\xa9\xfa\xda\x7e\xf5\x80\x31\x47\x97\x5e\xf6\xcb\xb2\x04\x6d\x8d\xa7\x56\xf7\x61\x08\x8b\xda\xec\xc3\x20\xcc\x3e\xe5\xab\x3a\xee\xde\xbe\xf2\xd7\x7f\x95\xde\x8e\xbc\x1e\xbf\x8c\xff\x75\xfc\x7b\x9a\x87\x3f\x4f\xd0\x42\x94\x42\xa3\x6e\x18\x3b\x23\x0c\x61\xff\xd1\xec\x3b\xe9\x0c\xfd\x28\x4c\x08\xb3\x2f\x17\x7a\xf4\x6d\xbe\x86\xcd\x30\x47\xef\xbb\xe2\xca\xb6\xd4\xb5\x96\xb4\xb1\x8d\x33\x05\xb6\x0b\x7e\xdb\x11\xe1\xfc\x85\xa4\x87\x5b\x17\xd4\x66\x1f\x06\x61\xf6\x89\xb4\x1b\xf6\x38\xa9\xda\xdc\xec\xba\xc7\x39\x9b\xda\xf5\x46\x14\x57\x63\x6d\xd6\xbb\xb2\x2d\x8e\x40\xa0\x32\x8c\x57\xb4\x53\x06\x86\xb0\xa8\xcd\x3e\x0c\xc2\xec\xcb\x31\xfc\x8d\xb7\x14\x9a\x7c\x59\xd7\xf4\x8a\x01\xde\x5e\x45\xe3\x43\xc3\xca\xc4\xfb\x13\x07\xf7\xe4\x73\x8d\x17\x7a\x7f\xcd\x19\xc1\x10\x16\xb5\xd9\x87\x41\x98\x7d\x6f\xce\x7c\x78\xcb\xb3\x60\x13\x74\xbb\xc9\xa7\xce\x24\x35\xb6\x29\x93\xfe\x92\xc3\xa8\xca\xfa\x93\xe0\xd4\xd0\x57\x6f\xd2\x19\x64\x61\x08\x8b\xda\xec\xc3\x20\xcc\xbe\xbd\xf4\x79\x78\xff\x3e\xad\xae\x73\x4c\x12\xf1\xf6\x40\x73\xb7\x48\x5b\x3f\xd8\xb7\x64\x75\x2f\x9c\xe1\xd9\x56\xee\xc6\x63\x65\x18\xc2\xa2\x36\xfb\x30\x08\xb3\xcf\x97\xf4\x5d\xd5\x94\xb0\x00\xa5\x4f\x36\x5d\x2e\xeb\x63\x7b\x21\xcc\x57\xb1\xff\x40\x52\x33\x36\x2f\xe7\xe7\x12\xde\x55\xd7\x0f\x1b\x28\x6a\xb3\x0f\x83\x30\xfb\xa2\x92\x45\xd2\xa2\x85\x40\x3f\x81\x07\xaa\x9b\x1e\xc4\xe5\x0f\xa8\xce\x94\xb4\xd7\xd4\x2d\x4d\x7e\xc8\x12\x0a\xba\xec\x12\x71\x38\x97\xa1\x36\xfb\x30\x08\xb3\xaf\xfb\x86\xc3\x54\xe2\xdc\x7f\x9c\xe5\x9a\x4f\x65\xa3\x88\x19\x9f\x37\x43\xbe\x9d\xe7\x42\xe8\x6c\x0b\x9a\x86\x9d\xef\x52\x73\x00\x30\x84\xfd\x47\xb3\x6f\x5d\xe8\xa1\xd9\xee\xe5\xfc\x6f\x7b\xa6\x3f\xc3\xdb\x46\x03\x53\x32\x27\x5c\x76\xf4\xb2\x53\xa8\x32\xb4\xbe\x19\x37\xe5\x6e\xce\x20\x2e\xfb\x3a\xb8\x22\x1b\xef\x25\x3d\xaa\x5d\x0c\xb1\xcc\xb5\x7d\xf4\x45\xdf\x7b\x89\xa4\xf4\xb4\x8e\x0a\x26\x27\x85\xdd\xa4\xb6\x70\xe3\xea\xb1\xd2\x57\xeb\xb5\x89\xbe\x3d\x00\x27\x97\xed\xc8\x7f\x37\x44\x75\xc8\x30\xbf\x6f\xb3\xc4\x2d\xa4\x33\x92\x5b\x0d\x31\x38\x7c\x62\x38\xfe\x1b\xbc\x22\x09\x96\xbe\x55\x0f\x6b\x9c\xf7\x0c\x96\xad\x92\xcb\x6d\x7f\x1f\xde\xff\x52\xc7\xb6\xb0\xfe\xb6\xd7\x22\x6a\x3c\x76\xd8\xef\xd4\xb1\xd2\xf8\xec\xc7\xb7\xe9\x9a\x47\x1c\x2b\x40\x9f\x3d\x1b\x2e\x7e\x2e\xfe\x4c\x79\xa5\x9a\x8a\x97\x34\x43\xbc\x71\xfa\xdb\xa7\x7c\x93\x8e\x95\xda\x5c\xcc\x8a\xc9\x17\x7f\x6a\x9d\x73\x8a\x98\x26\x8e\xf7\xe9\x0d\x5e\x75\x3a\x69\x35\xef\x80\x73\x78\x99\xd7\x45\x12\xd5\x7d\x3a\x8f\x95\xd6\xca\x14\xcb\xb4\x7c\x1d\xbe\x39\x6f\xcd\x33\xd9\x68\xf4\x47\xd8\xb1\xec\x3d\xf5\x4d\xea\xb3\xfe\xc2\x12\x77\x0b\xb7\x58\x57\x7f\x1e\x2b\x8d\x1e\x21\xd2\xf4\x69\x36\xe7\xac\x6c\x96\x13\xbb\xa4\x7d\xe7\xd4\xb4\x3d\x4f\x8a\xac\xcf\x3d\xd7\xcf\x32\x3b\xc1\xd6\x6b\x11\xcd\xc7\x4a\x7d\x79\x5f\x91\x10\xb3\xb2\xde\x09\xc7\x71\x74\x97\x9c\xb8\x22\xe6\xf5\x03\x7b\xfa\x7b\xd1\x01\x48\xf1\xde\x27\x2b\xf6\xee\x03\xa7\xff\x5d\xf6\x9d\xf4\x54\x8f\x3a\x1a\xc2\xec\x5b\xe3\x21\xd9\x8f\xb8\x69\x2e\x9c\x67\x96\xa1\xff\x89\xb0\x13\xb0\x0e\xc3\x33\x65\xc7\x48\x9c\x75\x0f\xac\xc7\x33\x1c\xdf\x3a\x9c\xa4\x51\x9b\x7d\x18\x84\xd9\x27\x54\x1b\x53\xab\x62\xb4\x26\xee\x9f\xae\xba\xc5\x8e\x51\x67\xbb\xb9\xda\xb6\xac\x20\x12\x13\x58\xa2\x6d\xd1\x38\x74\xf0\x14\x07\x86\xb0\xa8\xcd\x3e\x0c\xc2\xec\x1b\xd1\x0e\x88\xaf\xb8\xfa\x22\x4d\xa8\x12\xaa\xe4\xa5\x1d\x8e\xf8\xa5\xff\x29\x55\xda\xdd\xb1\x35\xa0\x28\xbf\xd2\x77\x5b\x9a\x1f\x86\xb0\xa8\xcd\x3e\x0c\xc2\xec\xfb\x64\xcb\xa1\x39\x15\x38\x5f\x36\x94\x7c\xbd\xde\x9a\x7f\xb1\xd3\x95\xd6\x6c\xdf\x1a\x7a\x6d\xb6\x99\x76\xb0\xf5\xf2\xcf\xcb\xc3\xd7\x40\x6d\xf6\x61\x10\x66\x1f\x57\xeb\xf8\xac\x72\xe9\xc3\x4b\x63\x0e\xba\x77\x85\x89\x9a\x56\xea\x62\x1b\xb8\xe5\x86\x68\xed\x04\x88\xfd\x47\xb2\x58\xd7\x0f\x3b\x01\x6a\xb3\x0f\x83\x30\xfb\x38\x3f\xa5\x04\x0f\x0b\x5f\x7d\xd4\xe2\xf5\x9e\x2a\x57\xb2\x56\x35\x8c\x9f\x02\xe6\xbc\x00\x87\x76\x12\x9e\x19\x60\x4a\x5f\x39\xdc\xcf\xa3\x36\xfb\x30\x08\xb3\xaf\x62\x3e\x60\xb6\x72\xcf\xea\xf4\x29\xe9\x0f\xa2\x55\xcd\x0c\x3a\x5b\x37\x1e\x27\xe6\x9e\x1d\x97\x33\x5b\x91\xef\xf9\x91\xb9\x74\xd8\x35\x51\x9b\x7d\x18\x84\xd9\x77\x2f\x98\xd6\xfa\x77\x02\x5d\xd8\x7f\x9f\x15\x1c\x5e\xec\xfa\xd2\xd7\x49\xfc\x62\xbc\x8a\x53\x7a\xad\x40\xfc\x5a\xc4\x06\x5b\x2c\x07\x0c\x61\xff\xd1\xec\x3b\xa9\xef\x1c\x85\x09\x61\xf6\x0d\x33\x59\x07\x31\x8c\x07\xba\xe9\xe0\xb5\x50\x10\xe5\x4f\x24\x7e\x11\xf8\x15\x8a\xa7\xfe\xba\xd2\xa6\xb1\x29\xb7\xe8\xe2\xa9\xc3\x7d\x17\x6a\xb3\x0f\x83\x30\xfb\x2c\xd8\xc5\xfa\x89\xd8\xb6\x08\xe3\x16\xf9\x9c\x5c\x9f\x6b\xd1\x6c\x0e\xc5\x8a\x61\x44\xf2\xbf\xbc\xc2\xcd\xc6\x33\xd9\x6f\x3d\x1c\x30\x50\x9b\x7d\x18\x84\xd9\x77\x49\xdc\x7c\x8d\xaf\x80\x45\x75\x6e\x93\xc9\x7f\x86\x78\xdb\xbb\x13\xb6\xcb\xfc\x71\xe5\x25\x6f\xd0\x38\x79\x37\x19\x75\xa2\x28\x0c\x61\x51\x9b\x7d\x18\x84\xd9\x87\x57\xad\x37\xe9\xb5\xe4\x4e\x15\x33\x48\x09\xca\x36\x1a\x92\x34\x10\x01\xd3\x98\xf7\x8c\x8b\xb7\xe6\x8c\x93\xa2\x03\x4c\xa9\x60\x08\x8b\xda\xec\xc3\x20\xcc\xbe\xd5\xab\xfa\xbf\x24\xc5\x6a\x84\xce\xf4\xe1\xf8\x4a\xd8\x09\xf6\xab\xe3\xa5\xdd\x52\xae\xca\x4e\xe4\x4d\x3c\x93\xcc\xfe\xa0\xe0\xb0\xb9\xa1\x36\xfb\x30\x08\xb3\xef\x77\x8f\x20\x11\xcb\x9a\xdc\x3b\x1b\x49\x4c\xa5\x9b\x7c\x73\xa9\xcd\xa9\xd6\x82\x9a\x28\xc6\x4b\x01\x7b\xb1\x85\x8f\xec\xfd\x95\x60\x08\x8b\xda\xec\xc3\x20\xcc\xbe\xf3\x93\xbf\xae\x92\x07\x4b\x91\xe0\x8c\xb9\x9e\xda\x3d\x5d\x63\x3c\xcf\x46\xab\xf2\x7e\x71\xc3\x78\x47\xe5\xae\x8e\x19\x03\xf5\xe1\x90\x8f\xda\xec\xc3\x20\xcc\x3e\xe3\xcf\x37\x73\xdf\x65\x77\xa4\xe4\xc9\xae\xac\x53\x5c\x39\xa0\x1f\x5e\xac\xc0\x60\x23\xa3\x5f\x2a\x07\xb6\x89\x70\xcd\x74\xd0\xc3\x10\xf6\x1f\xcd\xbe\x93\x56\xe6\xa3\x30\x21\xcc\xbe\xa7\xf3\x49\x4d\xf8\x67\xda\xe6\x85\x34\xf9\x63\xf6\xf8\x3f\x3c\xa3\xef\x79\xf6\x06\xc8\xda\x10\xe0\x16\xbc\xfd\x26\xe6\xbd\xfa\x05\x18\xc2\xa2\x36\xfb\x30\x08\xb3\x8f\x72\xc8\xf8\x9d\x5a\x81\x4a\x4a\xf1\x28\xc9\xcb\xb3\xd7\x87\xf8\xfa\x53\xce\x3b\xed\x9e\xf7\xca\xe3\x0c\xf9\x2e\xe4\x2a\xed\xcf\x05\x43\x58\xd4\x66\x1f\x06\x61\xf6\x99\x52\x8f\x16\x70\xa6\x59\xe4\xcb\x7d\xbd\x2c\xf8\xfd\xb5\xf3\x7b\x6b\x1c\x82\xa5\xc2\xe6\x39\xc6\xcd\xe0\xf9\x83\x0f\xb8\x1f\x6f\xc3\x10\x16\xb5\xd9\x87\x41\x98\x7d\xcf\x7f\xa7\xb8\x33\x49\x61\x86\x06\x82\xec\xe2\xcf\x3b\x42\xcf\xa6\x17\xb3\xd6\xe9\x84\xb5\x0a\x55\xe2\x9f\xab\xe7\x0e\x96\xea\xc3\x10\x16\xb5\xd9\x87\x41\x98\x7d\xcc\x59\x0a\xe1\x0e\x82\x0d\xef\x5e\xaa\x73\x2e\xd5\x25\xe6\x2f\x1a\xda\x2b\x45\x74\x7b\xc8\x7c\x94\x7e\x5d\x91\xc0\xc7\xce\x6d\x0f\x43\x58\xd4\x66\x1f\x06\x61\xf6\x05\xb8\xc4\x3f\x11\x95\xf0\xfb\x6b\xc1\x37\xed\x5b\x3b\xa1\x60\x4b\xdf\xa4\x9f\x5f\x21\x64\x61\xa1\x40\x1e\x2f\x77\x80\xb1\xe1\x86\x21\x2c\x6a\xb3\x0f\x83\x30\xfb\x88\xef\xa4\xa6\x9e\x7e\x15\x46\xa8\x3a\x72\xf9\xae\xb4\xdf\x97\xcb\x22\x65\x2a\xae\x77\xa5\x3b\xdd\xf9\x1e\x4a\xdf\x37\x28\xe6\x54\x83\x21\x2c\x6a\xb3\x0f\x83\x30\xfb\x42\x9e\xd9\xb7\x39\x3a\x71\xc6\xd2\xd2\x9d\x6d\x24\xc8\xe0\xaf\x53\x73\x8d\x8a\xd5\x13\x67\x7e\x75\x05\xca\x72\xb3\xd1\x58\xb5\x80\x21\xec\x3f\x9a\x7d\x27\xed\x5d\x8f\xc2\x84\x30\xfb\x6e\x09\x09\x37\x9d\xaa\xe3\x56\x66\x78\x43\xf3\x23\x26\xad\x9c\x42\xff\xf9\xe5\x4c\xdc\xb4\xa4\x5d\x62\xc2\xf1\xfb\xdb\x19\x13\x34\x30\x84\x45\x6d\xf6\x61\x10\x66\x9f\xf8\x87\xe2\xeb\xb3\xd2\x8f\x9e\xdc\xb0\xbe\x38\x71\xbb\x23\xdf\x7c\x42\xed\x0b\xad\x6f\xb0\x94\x3a\x8f\xff\x4e\xfa\x76\x39\xf1\x61\x07\x41\x6d\xf6\x61\x10\x66\x5f\xb6\x22\x7d\x7e\x1a\x19\xe9\x02\x63\x95\x40\x57\x85\xd5\x7d\x99\x8d\xce\xf6\x5e\xeb\xdd\x3f\x43\xac\x12\xc3\x5c\x2e\x5c\x21\x77\x61\x08\x8b\xda\xec\xc3\x20\xcc\xbe\xaf\x71\x45\xe4\x8e\x50\xba\xa8\xd2\x26\x97\x51\xe2\x59\xc1\xb3\x2f\x42\x2e\x51\xaf\xec\xdf\x6d\x66\xbc\x6c\xca\x90\x9b\xb2\xe3\x08\x43\x58\xd4\x66\x1f\x06\x61\xf6\x89\x4f\x8c\x12\x69\xd0\xf5\xd1\x66\x8b\xf9\xd1\x3e\x9a\x87\xd9\x13\x58\x82\x48\xe4\x59\xff\x68\x96\xac\x4f\x30\xae\xb8\x7a\x5c\x84\x21\x2c\x6a\xb3\x0f\x83\x30\xfb\x58\xca\x13\xbb\xcc\x46\x72\x5e\x7e\xf2\x7a\x39\x4b\xbd\x17\xc7\x0d\x9f\xaa\x98\xb7\x95\x5c\xa4\x4f\x27\x5f\x7f\x9b\x18\x70\x19\x84\x21\x2c\x6a\xb3\x0f\x83\x30\xfb\xce\x79\xfe\xe7\x2f\x3a\xa4\xe8\xc1\xcd\x78\xe0\xf7\xe0\x01\x47\xb9\x2e\xbb\xab\xbe\xaa\xf0\xa0\xc2\x93\xe6\x25\x8b\x28\xdb\xe9\xc3\x67\x85\xda\xec\xc3\x20\xcc\xbe\xde\xd3\x0f\x39\x34\xa0\x41\xb9\xdc\xa1\x1b\x05\x73\xbf\x89\xc1\xd7\x3c\xa4\xd4\xf4\x62\x01\x71\x31\xb6\x2f\xea\x17\x5b\x05\x0e\x57\xd8\x7f\x34\xfb\x4e\x9a\xee\x8e\xc2\x84\x30\xfb\xfe\x8c\x3e\x2d\x6d\xd2\x31\x2b\x78\x75\x9d\x40\xb3\xe5\xcd\x76\xaa\xbb\xb0\xe3\x9c\x38\x43\xfb\x70\xf6\x8d\xe5\x3e\x51\xbe\x1d\x26\x18\xc2\xa2\x36\xfb\x30\x08\xb3\xef\xb9\x77\x20\x0d\xe7\x19\x5e\x4d\x87\x3b\x82\x1d\xb9\xee\xbd\xaf\xfb\xe8\xa4\xd8\x59\x04\xf0\xb3\x26\x0f\x1a\xaf\xd8\xfa\x55\xe0\xc3\x10\x16\xb5\xd9\x87\x41\x98\x7d\x82\x7f\xd5\xf5\xb3\xde\x2e\x7d\xe4\x79\x70\x39\xb6\xb6\x27\x21\x5b\xb3\x38\x21\x8d\x19\xa3\x35\x97\x3c\xb5\x2f\xd6\xca\x4c\x7f\xd8\x09\x51\x9b\x7d\x18\x84\xd9\x47\xae\x90\x1e\x62\x1c\xe9\x67\xff\x78\x65\xe6\x89\x31\x95\x70\xfb\x9b\x6f\xa1\x5a\xf8\x44\x1b\xed\xf2\xd7\x1e\x3b\xd3\x97\x55\x6b\xc1\x10\x16\xb5\xd9\x87\x41\x98\x7d\x77\x44\x28\x78\x27\xea\xb3\x6e\x17\xf0\x55\x96\xac\x64\x12\x34\xd3\x68\x2c\x5f\x5f\xeb\x24\x90\xe3\xd0\x98\xb8\x65\x25\x41\xc6\x08\x43\x58\xd4\x66\x1f\x06\x61\xf6\xd9\xf7\x1a\xbd\xd0\x88\xdf\xbe\x11\x25\x31\xf1\xff\x58\x3b\xeb\xa8\x2a\xbe\xbf\xdf\x03\x07\x38\x84\xb4\xa0\x47\x90\x46\xba\x04\x83\xee\x90\x90\xee\x52\x4a\x52\xe9\xae\x43\x87\x20\x48\x8a\x84\x94\x4a\x8a\x20\xdd\x48\x48\x08\x48\x4b\x4a\x23\x4a\x97\xf4\x5d\xde\xfb\x1c\x16\xcf\x70\xd7\x9a\xdf\xf9\x7e\x7f\xff\xbf\xd6\x67\x6f\xe6\xbc\xf7\xcc\x9e\xf9\xcc\xf0\x8a\xbe\x73\xb3\xa9\x6a\x76\xcd\xbf\x25\x63\xb9\x3b\x94\x64\x4a\xee\x40\x34\xc3\x8f\x11\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\x9f\x9e\xcf\x6c\xaa\xd5\xa1\x55\x2d\x34\xc5\x9e\x16\x1a\x53\xdc\x1a\x68\xd4\xde\x89\x34\xb5\x3a\x25\x5a\xbf\x19\xaf\x63\xf0\x58\x1f\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\x55\x4a\xb8\x7e\x9b\xbf\x0f\x98\xc8\x1c\x4c\x9e\xa5\x45\xcf\x35\xc8\x99\x0d\xe8\x8f\x2a\x64\xe7\xae\xec\xc6\xe8\x3c\xcd\x31\xb1\x80\xc3\xa0\xff\xd0\xd9\x07\xf6\xfc\x03\xb1\x98\x00\xce\xbe\xfa\x9e\x72\xd4\x59\xe5\x10\xc6\xaf\x43\x50\x8e\x3e\x1c\xe3\x51\x2a\x85\x6c\x9a\xc2\xd4\xde\xd5\x75\x08\x96\x4c\xbe\xd5\xb4\x03\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\xd2\x19\x68\x73\x5e\xa9\x2e\x09\xd2\xa9\x66\x10\x39\x93\x66\x2f\x05\xef\xb9\x1b\x04\xd2\x63\x2b\xbe\xba\x83\x5b\x12\x3c\xac\x69\x03\x87\x41\x91\x76\xf6\x41\x00\xce\x3e\x38\x19\xc7\xf2\x84\x47\x79\x9f\x88\x1a\xd4\xb2\xc6\x7d\xf3\x47\x7f\xbc\x9c\x76\x81\x50\xe7\x9a\x68\x54\xe4\x6f\x4e\x79\xba\xbf\x57\x3f\xa4\x9d\x7d\x10\x80\xb3\x6f\x49\xf9\x73\x6c\xc4\xf7\xfa\x82\x55\x27\xa5\xd2\xa8\x72\xff\x72\x53\x4f\x56\x96\xa4\xe0\x7e\xcd\xd9\x57\x41\x8f\xda\x56\x29\xd1\xe1\x30\x28\xd2\xce\x3e\x08\xc0\xd9\x67\x2d\x78\xda\x3e\x62\x6a\x3c\x41\x71\xe0\x92\x99\xe5\x38\xb8\x85\xf3\xd8\xd6\x34\xed\x1d\x0a\x87\x1d\x81\x43\xf1\x95\x48\x67\x42\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\x6d\x3e\xae\xd5\x25\xe0\x9c\x8f\xba\xd5\x9e\xec\x2c\xb3\x43\xe8\x73\x47\x75\xae\xed\xec\xa5\x69\x40\xd4\x1f\xae\x08\x22\x8d\x38\x6b\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\xb9\xb3\x2a\x50\xb2\x55\x17\x11\x34\x34\xba\x0f\xdc\xc7\x70\x8f\xd8\xa1\xb7\x10\x52\xb4\xd5\x76\x7a\xa5\x91\xbd\x39\x72\x3f\xee\xef\x6f\x8e\xb4\xb3\x0f\x02\x70\xf6\x61\x9f\x85\x6f\xf6\x78\x6b\xc6\x70\xb9\x74\xd6\xe4\x6b\xad\xa6\x06\x68\x30\xa0\x74\xc8\x85\x2d\xce\x89\x87\x25\xd3\x3d\x2b\xe2\x84\xc3\xa0\xff\xd0\xd9\x07\xf6\x84\x10\xb1\x98\x00\xce\x3e\x0f\x76\x06\x0d\x0e\xfd\xdd\x69\x58\x67\x93\x2f\x66\x51\xd5\x9d\xed\x70\xf7\x54\xed\x3b\x6d\x21\x65\xad\x7e\x22\xeb\x86\x95\x4f\xe1\x30\x28\xd2\xce\x3e\x08\xc0\xd9\xe7\x64\xb0\x34\x48\x6e\xf2\x87\xc5\x8f\xb9\xa6\x75\x72\x78\xf9\x6e\x9a\x2c\xeb\x41\x66\x52\x50\xc4\xa1\x6e\x68\xf0\x13\x07\x18\x3f\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\x6a\x88\xde\x5d\xc3\xd2\x7e\xf3\x0b\x4a\x15\x54\xc4\x54\x7e\x57\xec\x0b\x3e\x8e\x6d\xe8\xd2\x3e\xae\x5c\x3a\x15\xbf\x5b\xe1\x94\x29\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\xc2\xec\xbc\xaf\x64\xe3\x38\x31\x55\x4a\xf4\x50\x4b\x3c\x60\x88\x5f\xfe\x86\xca\xe0\x9a\xd9\xf0\x93\xb4\x04\x3b\x94\x51\x9e\xc0\x10\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\xde\xdf\xf5\x16\xc3\x60\xa2\xeb\x4d\x67\x81\xcf\x15\xbc\x88\xa5\x88\x45\x9d\x48\xb7\x64\x5d\x05\xeb\x93\x88\xdf\x56\xd2\xe7\x91\xc0\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xef\x13\x94\x46\xc2\x18\xaf\x68\x6f\x51\x51\x61\xcd\xef\xf7\x24\x4c\x2d\xe3\xeb\x5b\x8e\xa2\x6a\x9b\x75\x3c\xbd\x20\x65\x9e\x0f\x7f\xef\x99\x90\x76\xf6\x41\x00\xce\xbe\x22\x39\x7e\x0d\x3c\x26\x8c\xc9\x13\x1b\xa1\xbe\xda\xa8\x11\x18\x71\x5f\xe2\x87\xf4\x33\x59\x26\x94\xef\x25\xdd\xb2\x1d\xc9\xc2\x70\x18\x14\x69\x67\x1f\x04\xe0\xec\xcb\x0e\x52\xa8\xe8\xa5\xab\x44\x31\x6d\xef\x9b\x56\xc5\x54\x7f\x3d\x26\x49\x52\xf8\x43\x76\xd3\x95\xa3\xf6\x35\xf1\xef\x0f\x11\x72\x70\x18\xf4\x1f\x3a\xfb\xc0\x9e\xa1\x23\x16\x13\xc0\xd9\x97\x30\xef\x54\x42\x4d\xce\xce\x55\xd0\x18\xd0\x38\xfa\xd6\xd3\xae\x3e\xfd\x88\x2f\xcc\xa1\x8b\x78\xf8\xd8\xf7\x3b\x5f\x42\xe3\x23\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\x5d\x93\xf6\xcf\x79\x28\xbe\xff\xa6\x57\xe6\xc6\x1d\x2c\x5d\x72\xab\xa7\x29\x89\x32\xdd\x78\x15\xe2\x0b\x83\xa3\x39\xa5\x56\x91\xf4\x70\x18\x14\x69\x67\x1f\x04\xe0\xec\xf3\xab\xf9\x4d\xb7\x63\xa7\x7b\xd6\x55\x25\x45\x3e\xad\xf1\x6a\x25\xc5\xcf\x2f\x23\x39\x83\x6f\xe8\x4f\x75\xed\x7c\x23\x09\xd7\xdf\x31\x90\x76\xf6\x41\x00\xce\xbe\xcf\x5e\x7b\xde\xef\x55\x25\x2a\x78\xd8\x0e\x75\x87\xb9\xac\x8e\x51\xf0\x6d\x02\x47\x3e\x8a\x27\x7b\xda\xe8\x3e\xd2\x6a\x30\x17\x84\xc3\xa0\x48\x3b\xfb\x20\x00\x67\x5f\xf8\x77\xf5\x63\x81\x23\x7d\x49\x8d\xd6\x7a\x07\xc6\x7e\xda\x8d\xc9\xa1\xc7\xc5\xac\xee\x42\x4a\x84\x06\xd5\x05\x78\x0d\xbf\x1f\xc2\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xef\x9b\x11\xfe\x5d\x9a\x70\xbb\x9c\x36\xb2\x96\x91\x26\xca\xf0\x49\x4e\x19\xda\x7a\xef\xad\xe9\x17\x0d\x1c\x31\x89\x66\xb7\x0b\xfe\x6e\xf3\x90\x76\xf6\x41\x00\xce\xbe\xf2\x9d\xd9\x68\x4e\x4c\x6a\xd9\xf8\x5f\x16\xf3\x7d\x04\x4d\x24\x10\xa3\x16\xa2\xd5\x1b\x7d\xe3\x76\x0c\x90\x8f\x3c\xd3\x2a\xaa\x70\x18\x14\x69\x67\x1f\x04\xe0\xec\x1b\x19\x4b\xd4\xd3\xfb\x70\x88\x15\x1f\x5a\xb4\x73\xed\x16\x7f\x8c\xab\x74\x60\xaf\xfc\xa0\xab\xa6\x93\xc0\x17\xbd\x98\x19\x4a\x63\x38\x0c\xfa\x0f\x9d\x7d\xb1\xa2\xf1\x65\x2f\x3e\x31\xa0\xf2\xc7\xad\x0c\x60\x1a\x32\x77\xc2\x02\x5c\xba\x23\xf8\xb3\x16\x88\x2a\x4a\x6d\x38\xeb\x9f\x4a\x01\x9a\x7d\xb7\xe1\xa8\x6f\x5d\x9e\x32\xfd\x51\x71\xc0\x12\xc3\x3b\xd4\x58\xb9\x2b\x22\x63\xd5\xcd\x44\xf7\x9b\x5d\xfa\x73\x64\xd9\x1e\x93\xce\x05\x34\x25\xfa\x91\x86\xed\xed\x9b\xeb\x9a\x87\x4b\x4a\x5f\x08\x77\x6f\xc4\xc8\x4f\xff\xb8\x9d\xb7\x54\xfd\x3c\x97\xe3\xd5\xa1\x1e\x7a\xf2\x45\x13\x60\x53\xae\xe6\xe4\xb2\x42\x21\x65\x5e\x67\xb6\x74\xb6\x90\xea\xee\x37\x73\xb5\xe1\x33\xf4\xf4\x4a\xe1\xeb\xb7\x5e\x8b\x29\x3d\xbb\x80\x16\xb8\x37\xbe\xf4\xee\xbf\x2b\x50\xa5\xbc\x70\x7c\xe7\xa7\xd1\x29\x69\x62\xa8\x6b\x56\x55\x92\x33\xd5\x6b\xcf\x6d\x86\xc2\xe1\x57\x17\xd0\x3f\xf3\xf1\xc4\x31\xa3\xeb\xd2\x58\x21\x12\x75\x14\xd2\x55\x41\x0f\x6d\x4e\xab\x13\x04\x20\xb9\x59\x89\x7a\x53\x47\xf1\xc1\xaf\x2f\xa0\xe2\x27\x07\xd2\xbf\x89\xb2\xa3\x72\x08\x59\x38\x2d\x7a\x1c\xc6\x18\x0f\xca\x1a\x26\xba\x53\x44\xc7\xbe\x39\xd7\x39\xe6\xa7\xe0\x5f\x40\xcb\xdc\xab\x92\x79\x78\xce\x24\x4a\x3c\x7d\x9b\xa6\xbb\xf1\x20\xf5\xb4\x4e\x39\x70\x85\xfa\xab\xf3\x0e\x49\x0e\xb5\x4f\xb6\x8e\x2e\xa0\xb8\x2a\x63\xd6\xbf\x5a\x4d\xe4\x18\x21\x11\xf8\x02\xb6\x5a\x56\x7e\x2c\x8c\xd1\x77\xfc\x6d\xd8\xa5\x6d\x08\x71\x4f\x7e\x3f\xdb\x3b\x6f\xf6\x81\x1d\x55\xc4\x19\x0d\xe0\xec\xf3\x2a\xbe\x9f\xde\x45\x26\xdd\x4b\xf4\x54\xb3\x43\xff\x85\x7e\xd6\x17\x6e\xb1\x0e\xa8\x68\xaf\x58\xac\xd2\xd9\xf5\x7a\x9d\x21\x49\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\xe5\x97\xbd\xc2\xd0\x4a\xa1\xb6\xbc\x5f\x7f\xe8\x2e\x1f\x65\x46\x96\x51\x46\x53\x77\xc5\xfe\x2a\xa5\x39\xfe\x8c\xa7\xa1\x69\xd8\xdf\x15\x84\xb4\xb3\x0f\x02\x70\xf6\x29\x3c\xac\xd4\xed\xd2\x93\x4b\x3d\x14\x8e\x41\x8f\x8a\x81\xd0\x9f\xe1\xd1\x66\x2c\xe8\xf7\xda\xd4\x18\x91\x7f\xef\x12\xe9\xbf\x0a\x87\x41\x91\x76\xf6\x41\x00\xce\xbe\xb8\x33\xbe\xa7\xa9\x3c\x55\xbc\x52\x85\x2e\x8d\x49\x01\xf9\x02\x0e\xb2\xad\xdf\xfc\xab\x29\x1f\x7e\x50\x72\xec\x1e\xea\xbd\xcb\x04\x87\x41\x91\x76\xf6\x41\x00\xce\xbe\xc6\xd0\xaa\x6e\x2a\xdc\x6f\x06\x21\x12\xac\x67\xb0\x9b\x28\x8e\x06\x66\xf0\x21\xd9\x87\x16\xa1\xb2\x96\x04\x62\x14\x44\xcf\xb9\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\xc7\xc6\xae\x9b\xd4\xdd\x3f\xa5\x92\x21\xb7\xca\x5d\x9c\x1d\xf4\x2b\x0f\xef\xae\x2f\xd9\x1c\xb6\x1a\xce\xb7\x85\x96\x8a\x5a\x71\x69\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\xd9\xf5\x5b\xd2\xba\xfb\x61\xc6\x79\xd2\x4e\xc3\x43\x9e\x8e\xf4\xf9\x8c\xaf\xd2\x65\x5d\x57\x92\x67\x4d\x7a\x38\x51\x9c\x3f\xff\x77\x9b\x83\xb4\xb3\x0f\x02\x70\xf6\x75\x3c\x65\x81\xa8\xbc\x59\x7b\xcd\x38\x9c\x8e\x5d\x98\x93\x59\x3d\x94\x86\x57\xfe\x85\xdd\xd8\x84\xa5\x5d\x6d\xc8\x22\x9d\x4e\x0c\x0e\x83\xfe\x43\x67\x1f\xd8\x79\x07\xb1\x98\x00\xce\x3e\x08\xbf\xe8\x3d\x0e\xe1\x2e\xf4\x8d\x90\xc2\x6a\xfa\x17\x87\xc2\xbe\xd4\x1b\xb8\xe2\x13\x41\xe5\x1b\xf6\xcb\xa9\x1b\xa9\x5e\xf2\x70\x18\x14\x69\x67\x1f\x04\xe0\xec\x7b\xa4\x86\x2a\xd2\x2a\x24\x5d\xe7\xa4\x02\xf5\x4e\xcf\x76\xa8\x49\x9d\x74\xbf\xbd\xfc\xcb\x31\xd4\x97\x59\xf0\x25\x86\xb4\x2c\x25\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\x52\xa3\x1d\xea\x94\x36\x1c\xe5\xa6\xad\x82\x8b\x3e\x7c\x3d\xba\x5b\x39\x9f\x5b\x5c\x5a\xdc\xe9\x8b\xf1\x6b\xa2\x35\xe7\xbb\x88\x23\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\x68\x6e\x63\xbc\xca\xe0\xbf\x71\x16\x7b\xdd\xa1\x47\xd0\x0b\xc3\x6f\xa0\xe9\x4b\x70\x6f\x0d\xb5\xc9\x8c\x75\x0c\x85\x04\xba\x28\x0a\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\x86\xcc\x1c\xb1\x73\xf0\xa4\x1f\x90\xd1\x72\x0b\x27\x15\x5a\x91\x5b\xf5\xad\xe7\x6c\xa1\x2d\xe1\xe6\x8b\xe7\x34\x5c\x41\x2d\x25\x85\xc3\xa0\x48\x3b\xfb\x20\x00\x67\x1f\xfb\x0d\x2a\x83\x84\x30\x39\x5a\xc6\xef\x01\x2b\xd1\xfc\x59\x94\x63\x46\x32\xd2\x8f\xd5\xd6\x34\xb8\xed\xa4\xbf\x0a\x28\x94\xe3\xc1\x61\x50\xa4\x9d\x7d\x10\x80\xb3\x4f\x84\x35\x94\xae\x68\xe1\x4d\x27\xd9\xb0\x20\x9f\x69\x2a\xfa\x8d\x91\x8c\x49\x9c\xd0\xf4\x4c\x74\x56\x62\xff\xb2\x4f\xd9\x63\x77\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\x87\x91\x4a\xf4\x59\x21\xe0\x3e\xdf\xb2\x86\xbf\x83\x62\x16\x7c\xee\x66\xeb\xf5\x5c\xcd\x38\xc7\xab\xb4\xda\xcd\x8c\x44\xe4\x78\x7f\x6f\x5c\xff\xa1\xb3\x0f\xec\xca\x8c\x58\x4c\x00\x67\x1f\x4b\x16\xf7\x60\xe9\x89\x1e\xeb\x24\xb9\x8c\x68\x9e\x86\x45\xcc\x5b\xd5\xcd\xcc\x08\x36\x3c\x5f\xff\x61\x61\xae\x0c\x33\xb4\x7b\x70\x18\x14\x69\x67\x1f\x04\xe0\xec\x4b\xa0\x47\x79\x74\x9b\x83\x28\xee\xcd\xaf\xc8\x1a\xbe\x7a\xec\xdc\x3e\xd8\x93\x0d\x36\xd2\x7a\x46\x8c\xa7\x99\xf3\x5a\xe1\x77\x09\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\xf7\xaa\x0f\x57\x37\x47\xb4\x97\xb6\xb2\x72\xd5\xb7\xaf\xcf\x95\x9b\xac\xc2\x3c\xbc\x56\x33\x6e\xef\x99\xef\xd7\x11\x05\xcc\x3b\x7f\x6f\xc0\x91\x76\xf6\x41\x00\xce\x3e\x45\x73\xfd\xbd\x48\x3d\x06\x9c\x0c\x52\xca\xdf\x4f\x9d\x4a\x0b\xf8\x64\x4b\x9b\x31\x6c\x47\x14\xe3\xba\x47\x99\x03\x50\xb4\x44\xe1\x30\x28\xd2\xce\x3e\x08\xc0\xd9\x67\xde\x5a\xae\xf2\x58\x8e\x64\xf5\x1a\xa1\x98\x2e\xde\x56\x27\xa3\x74\xe7\x97\x5f\x7a\x9f\x8d\x49\x4e\x99\x58\x54\x17\x95\xdd\xff\x9e\xd1\x91\x76\xf6\x41\x00\xce\x3e\xb4\xfc\x9b\xbf\xd8\x45\xf7\x4f\x0d\x1e\xbe\xc1\xb4\xfb\xd3\xd7\xaf\x1e\x0b\x8b\xfd\xad\x77\x3b\x82\xc8\xe5\xe0\xfa\x7b\x85\x38\x73\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\x39\x08\x87\x13\x89\x14\x28\x9a\x16\x0a\xb9\x36\xba\x56\x40\x5e\x42\xc3\xa7\x12\x19\xee\x05\x8a\x90\x5b\x9b\xa1\x53\x4e\x9a\xf3\xc1\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xef\x41\x96\x2e\x0d\xea\x87\x93\xa4\x47\x47\x8f\x59\x52\x27\x69\x94\x70\x8c\x0f\x61\x2b\x3a\x43\x21\x6b\x37\x0c\xa7\x0a\xb3\x36\xa9\xe0\x30\xe8\x3f\x74\xf6\x81\xed\x5d\x11\x8b\x09\xe0\xec\x53\x8f\xb6\x43\xe5\x27\x6e\xfc\x49\x62\xf5\x3e\x67\xb1\xf7\xee\xc7\x46\x1e\x83\x2e\xa2\x75\x22\x37\xaa\xb0\x4d\xc3\xd8\xc3\x3c\x05\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\x15\x99\x68\x18\x7c\x4f\x2c\x22\x88\x93\x1e\x19\x7e\xf6\x43\x85\xd0\xe8\x6c\x75\x76\x59\x3e\x56\xb4\x5e\x55\x25\x05\x5d\xcc\x51\x0a\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\xf1\xdf\x53\xa5\x05\x18\x9d\x5f\x9b\x2b\x4e\xab\x66\xaf\xc6\xde\x0a\x44\xb9\xb5\xbd\xa2\xb5\x21\xbe\x31\xad\x44\xe2\x41\x54\x2e\x0c\x87\x41\x91\x76\xf6\x41\x00\xce\xbe\xf4\xdb\x6b\x33\x41\x4f\x4f\x04\x8a\x25\xe7\x19\xe4\xe4\x70\xb1\x0f\x85\xdb\x47\x08\x7b\x04\xb9\xd5\xdd\xec\xea\xa7\xea\xfe\xef\x3f\x0c\x40\xda\xd9\x07\x01\x38\xfb\xae\xa2\xe5\xb7\x3f\x75\x8e\x0c\xe3\xba\x63\x85\x1f\xf2\x45\x89\x1e\x37\x1a\x4f\x84\xd1\x70\xdf\x63\x10\x1b\xad\x91\x38\x91\x1c\x07\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\xf6\xfc\x09\xb9\xba\xd8\x8d\xd5\x54\x34\x66\xf2\xf7\x18\xee\x77\x94\x09\x8b\xa5\x0c\xfb\x19\x47\xdd\xc8\x7d\x1c\xfc\xe6\x73\x86\x38\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\x9c\xeb\x7c\xa0\x81\x58\x78\x13\xec\x3e\xf3\xee\xb7\x5d\xa1\xcb\xee\xbd\xe1\xcf\x59\x5b\x7f\x9a\xc9\xda\x1c\x48\xa1\x8b\xad\xa8\xc3\x61\x50\xa4\x9d\x7d\x10\x80\xb3\x4f\x70\xe4\xc7\xc0\x06\x2a\x6f\xe7\x03\x9f\x0a\xd9\x47\xd5\x1a\x81\xde\xdf\x9c\x06\xec\xc5\x26\xf1\x71\xdc\xfc\x4d\xbf\x71\xfe\xb4\x81\xc3\xa0\xff\xd0\xd9\x07\x76\x77\x87\x58\x4c\x00\x67\x9f\x43\x9e\x23\x44\x98\x3b\x83\x4c\x42\xd4\x1d\xcb\xaf\x92\x51\xd5\xa5\x9b\x2c\x25\xa5\x7d\x47\x72\x40\x52\x0a\x03\x2f\xf6\x21\x04\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\xdf\x3e\x2d\x46\xd1\x66\xf5\xdd\xf9\x54\x24\xd5\xb8\xef\xeb\x63\x89\x46\xef\x77\xa4\x54\xf8\x62\xbe\x6d\xd2\xd3\x2b\x24\xbe\xc2\x0a\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\xdb\xae\x87\x15\x3c\xf1\x46\xf6\x8d\xb4\x72\x5b\x69\x86\x5d\x4b\x84\x8b\x98\x8e\xfc\x1b\x0a\xc4\x9b\x8a\x4f\x85\x02\x8e\xb4\x9e\xc1\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xcf\x5a\xb4\x64\xbd\x0c\x35\xd5\x6c\x60\xf4\x36\x95\x5c\x03\xdf\xb5\x05\xb6\x59\x4d\xb9\x40\xab\xc2\xe6\x0f\x31\x56\xaa\x4d\x77\xaf\xc3\x61\x50\xa4\x9d\x7d\x10\x80\xb3\x4f\x36\xfd\x67\x03\x9b\x33\x89\x21\xaf\xe9\x70\xce\x2e\x4a\xbf\xb9\xf3\xf4\x1e\x9b\xee\xe8\xf3\x9f\x0e\xe3\x9b\x21\xec\x78\xf7\xb5\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\xd7\x2b\xd5\x36\xc3\xf0\xd9\xe7\x8b\xc4\xab\x4a\xc3\xcf\xa1\x31\xb4\x2c\xf6\x8c\xef\x54\x54\x97\x39\x79\x4d\x1b\xcb\xaf\xe0\xcb\x3d\x84\xc3\xa0\x48\x3b\xfb\x20\x00\x67\x9f\x7b\xa1\xef\xde\xb0\x7e\xd4\xbb\x14\x05\xd1\x38\x88\x5a\x7b\x5b\xca\x8f\xd0\x96\x46\x61\x65\xc1\xa8\x98\x79\xdc\xbd\x03\xd8\xdf\xab\x38\xd2\xce\x3e\x08\xc0\xd9\xc7\xb9\x59\xdb\x6b\xfe\x24\xe0\xf7\x53\x9d\x09\x99\x82\x70\xf7\xce\xe2\xc4\xba\x93\x7c\xb9\x0e\x94\xb7\x63\x1e\x81\x62\xef\x04\xff\xde\x8b\xff\x43\x67\x1f\xd8\xf3\x0f\xc4\x62\x02\x38\xfb\xde\x65\x72\x86\xe8\x49\x59\x1d\x96\x0f\x95\xdd\xbc\x67\x83\x1d\x6d\x24\x62\x6d\xcb\x27\x65\x3c\x37\xfb\xf4\x78\x5d\xf3\x2e\x2f\x35\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\x96\xfc\x77\x6f\xae\x9a\x27\xee\xa1\xc9\xbe\x79\x5f\x55\xa4\x53\x8d\x1d\xd1\x15\xd6\x80\x7d\x40\xc4\x32\x99\x54\xa1\xc7\xc0\x6e\x04\x87\x41\x91\x76\xf6\x41\x00\xce\x3e\x29\x0a\x42\xb1\xde\x48\x13\x87\xcf\x24\x1b\xd9\xd4\x1c\xe5\x18\x41\x15\x39\x28\x84\xc2\x47\xf4\x1f\x7e\xd5\x6b\xb4\xea\x4f\xfd\xbd\x19\x45\xda\xd9\x07\x01\x38\xfb\xa2\xee\x26\xf6\x2e\x45\xcf\xd9\xac\xa7\x84\x7f\x26\x7b\x74\x73\xf0\xb0\x83\x6e\xd0\xc8\x97\x11\xae\x58\xe6\xe5\x85\xe1\xb8\x77\x03\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\x9c\x93\x7e\x7d\xa7\xaf\x17\x31\x63\x69\xe3\xba\x6c\xe7\xf4\xc3\xcd\x67\xcd\x95\x4d\x5f\x24\x39\x09\xd7\x97\xe1\x8e\x31\x8e\x30\xc0\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xaf\xc3\x6d\x6f\x38\xfc\xd3\x6b\xba\xe7\xfe\x21\x4d\x8c\x25\x15\x2c\x4b\x1b\x7b\xe9\xd1\xb1\x50\x5b\x1f\xa9\x5b\xea\x04\x5f\xbc\xb8\xe1\x30\x28\xd2\xce\x3e\x08\xc0\xd9\x77\x4b\x21\xb9\x90\x1d\x0f\x65\x42\x4d\x8b\xa4\x81\x77\x2a\x25\x0f\x37\x27\x3a\xcf\xc3\xfc\x8f\x72\x36\xb1\x75\x47\xb0\x45\xcf\xdf\x7b\x71\xa4\x9d\x7d\x10\x80\xb3\x8f\xa4\x32\x27\xde\xce\xaa\xac\x8f\x9b\xb8\x7a\x61\xdb\x95\x43\xfa\xc3\x87\xf4\x8c\xdd\xac\x40\x28\xd3\x37\x52\x01\xc9\xd7\xa2\xe8\x70\x18\xf4\x1f\x3a\xfb\xc0\x9e\x10\x22\x16\x13\xc0\xd9\x27\x8d\xf1\xea\xc5\x12\xba\x18\x81\xce\xcd\x2b\x63\x03\x7c\xb1\x96\x6f\x5d\x24\xfd\xa7\x19\xf4\x67\xca\xb4\x22\x23\x73\x45\xc8\xb4\xe1\x30\x28\xd2\xce\x3e\x08\xc0\xd9\x77\xa3\xaa\x53\xf1\xd7\xef\x71\x71\x51\x1e\x01\xf8\xab\xd3\xa4\xf0\xba\x68\xfb\x6d\x4d\xca\x72\x89\xea\x81\x92\xb2\x24\xce\x13\x42\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\x75\x69\x2c\xe9\x3c\xa6\x45\xa7\xf9\x3e\xd2\xdf\x3d\x9a\x39\x13\x2e\x32\x6c\xf0\xc8\x07\x3b\x9f\x74\xc8\xd8\x29\x16\x12\x97\x8b\x0a\x87\x41\x91\x76\xf6\x41\x00\xce\x3e\xbc\x65\xb6\x1f\x2f\x21\xb3\x5a\x33\x34\x9b\xad\x2a\xd9\x72\x2f\xe9\x24\x8b\x4e\xe9\x5e\xa2\x35\x9c\xa8\xb0\xbf\x67\x5e\x4d\xf8\x7b\x7f\x89\xb4\xb3\x0f\x02\x70\xf6\xb5\xb2\x4e\x17\x34\x68\x0d\x1a\xf8\xc0\x31\x55\x8f\x1b\x6a\x96\x48\xe8\x2b\xd4\x88\x52\x48\x24\x07\xbf\x34\x87\xd1\x57\xd9\xb0\xc1\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xcf\x5a\x76\xdf\xe1\x13\xd4\xc7\x8f\xa0\x9f\x30\xc9\xc5\x03\x2d\x8f\xc2\x62\xd5\x26\x36\x2b\x28\xf4\xfb\x96\xd3\x09\x87\xb5\xbf\x34\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\x82\x0d\xe2\xee\x4c\xfb\xaf\x61\x72\xe1\xee\x48\xb1\x14\x25\xb4\x79\xb7\xb7\xe1\x18\xea\x24\x56\x98\x93\x07\x31\x4f\xcf\x96\x9b\xc1\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xef\x89\x5a\x08\x71\x4a\x24\xde\x83\x42\x71\x6e\xbd\xdb\x61\xe6\xe4\x3b\x57\x2b\x9d\x29\x17\xa9\x9c\x9b\xb3\x1d\x95\xf1\xd7\x47\xff\xee\xaa\xfe\xa1\xb3\x0f\xec\x19\x3a\x62\x31\x01\x9c\x7d\x4f\x35\x95\xb1\xd4\x72\x8a\xd0\x3c\x5a\xcb\xd2\x65\x78\x3b\x99\xd9\x1f\x84\x53\x28\xe7\x85\x92\xab\x8d\x29\x3f\x9f\xaf\x3a\xfe\x7b\x1f\x80\xb4\xb3\x0f\x02\x70\xf6\x71\x25\xbe\xbd\x6a\x9a\x71\x2b\x8d\x0c\x45\xb9\xfa\xf9\x27\xc7\xe2\x90\x41\x9f\x6a\x93\x44\x8c\xc1\x35\x96\x86\x1b\x38\xa6\xd7\x88\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\xd7\x94\x96\xa3\x6b\x2b\xd2\x11\x48\xed\x1b\x45\xb6\x71\xfc\xb1\xf6\xd5\x2b\xf5\x4d\xb6\x36\x4b\x0a\x69\x06\xdd\x2e\xac\x10\x2c\x3a\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\x79\x8d\x74\xac\xc0\x1d\x4c\x9f\x90\x57\x3c\xd9\xf8\x72\xe8\xf3\xfe\x69\x83\x9a\xe5\x27\xdf\xaa\x60\xcb\x93\xf1\x84\x10\x12\x6f\x28\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\xb8\xb3\x6f\x2d\x13\x2b\xea\xbd\x99\xea\xeb\x16\xec\x0b\x36\x59\x2b\x79\x69\xde\x7a\x1b\x2b\xcc\xc0\x38\xac\xf0\xc5\x83\x4a\xc5\x47\x70\x18\x14\x69\x67\x1f\xa4\x0e\xf8\xcd\x90\xb5\xdd\xda\x2d\x4d\x79\xe7\xd2\x6e\x85\xb8\x7d\xaf\x8f\xbc\x87\x94\xc6\x44\xcc\xaf\x45\x7a\xf7\xdb\x70\x4c\x5d\xe3\xfe\x9e\x78\x90\x76\xf6\x41\x00\xce\xbe\x4f\x45\x0d\x35\x4e\xf8\xf9\xbe\x82\x05\xd5\xdc\x57\x6c\x89\x75\x24\xd6\x22\x8a\x8a\x38\x32\xaa\xe6\x59\xb9\xec\x53\xe3\x5a\xfe\x06\x1d\x69\x67\x1f\x04\xe0\xec\xe3\xfa\x1e\x38\xae\xfc\x40\x50\x4f\xc1\x81\x7b\x1a\x5d\xab\xab\xfd\x07\x49\x81\x5b\xc5\x59\xe7\xf5\xed\xa4\xdc\x23\x06\x3d\x8e\xbf\xf7\x97\xff\xd0\xd9\xf7\x38\xaf\x2e\x6f\x7a\xb5\x74\xcf\x6a\x89\x9e\x92\x0a\x1d\x6b\x66\x7f\x2f\x7a\x48\x9b\x87\x44\xdc\x4b\xa4\xdb\x63\x38\xdc\xc2\x08\xd0\xec\x53\x11\xd4\x35\x0c\x19\x86\xec\x06\x87\xb5\x2b\x2e\x12\xaa\xd9\x68\x33\x5f\xff\x46\xfd\xd2\xab\xf4\xdb\xdb\x19\xd6\x57\x77\x99\x2a\x2f\xa0\x3d\x9d\x3a\x18\x41\xa7\x34\x54\x78\x59\x91\xbe\xe6\xeb\x0f\x9a\x66\x0d\x3d\x6f\xf4\x7a\xfb\xd4\x34\xc5\x3d\x62\xc6\xfa\x36\x48\x7c\x01\xbd\x93\x73\xba\x92\xe7\x27\xf6\x63\x6f\x6b\x27\x1a\xef\x0e\xf7\xf1\x4b\x18\x43\x19\x21\x7a\xde\xd8\x21\xfe\x7b\xe3\x6d\x87\xa0\x8a\x0b\xa8\x79\xc2\xcf\xa3\x35\x4b\xea\xf7\xfd\x87\x9a\x4b\xcb\x63\xd9\xb5\x16\x4a\xf8\x63\x83\x47\xe1\xec\xb7\x92\xda\x4f\xb5\x6e\x07\x1f\x5f\x40\xd1\xd8\xd0\x4f\x82\x50\x97\x93\xf7\xcd\x7b\xd7\x37\xb7\xa6\x88\x71\xb9\xf4\x58\x44\x28\x3e\x5c\x65\x67\xb3\x64\x08\x7a\x2e\x5f\x78\x01\xcd\xcb\xb5\x8b\x8f\x7e\x89\xf1\xce\x83\x59\x80\x69\xe2\xec\x6c\xfc\xbe\xfc\x10\x9a\xab\x49\x8a\xf9\x6b\xc6\xfe\x77\xa9\xd5\x6c\x17\xff\x8d\xa7\x73\x20\x57\xbe\xe1\x1b\x36\x3f\x41\x8d\xfd\xf2\x02\x9d\x64\x91\xa6\x58\x3a\x86\x77\x91\xe4\x68\x4c\xdf\x0a\xd2\xbe\x75\x11\xd4\x5d\x40\xfd\x22\xe8\x30\xd0\x1e\xef\x3e\x20\xdd\x9c\x22\x88\xd3\x9f\xfc\xd3\x69\x32\x74\x54\x26\x62\xf5\x11\x5f\xe4\x8b\xbc\xc9\xe8\xcf\xeb\xe7\xcd\x3e\xb0\xa3\x8a\x38\xa3\x01\x9c\x7d\x7a\xdb\xf2\xe9\x4a\x2f\xa8\xbf\x88\x59\xde\x89\x0e\xca\x9b\x9c\x22\x2a\x3f\xd2\x33\x9a\x5b\xfc\xa6\x1c\xc4\x4b\xaf\xd3\xbf\xfa\x77\xff\x88\xb4\xb3\x0f\x02\x70\xf6\x4d\x4c\x64\xab\xe2\x7d\xb6\x8e\x99\xe8\x14\x0f\xb6\x16\x64\x7f\x18\x97\xd6\x5b\xdc\x43\xce\xaf\x54\xe9\xfb\x8c\xf2\x8a\x93\x9d\x31\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\x8e\xe4\x19\x67\x36\x38\xa3\x6c\xc4\xd8\x0d\x29\xa1\x5c\x7b\x2c\xa1\x02\x95\x69\xdf\x19\xc8\x9a\x28\xa9\x8f\x76\x1a\x31\x95\xd0\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\x47\xa0\x7e\x5b\xdb\xb4\xad\x97\x6a\x0e\xdd\x83\x7d\x56\x25\x38\x60\xca\x6d\xd9\x53\x83\x36\x2b\x83\x7b\x80\x65\xc8\x27\x5c\x1e\x05\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\xef\xd9\xe4\xcb\xf4\x6d\x46\x6e\xbb\xb1\x35\xd1\xbd\x2b\x61\x6a\xc3\xa9\x1f\xd6\xf6\x09\x19\xd3\xf5\xb9\xa3\xb6\x2d\x50\x44\x73\x0d\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\x79\xdf\x64\x6e\x0c\xa7\x5a\xae\x06\x05\xb8\xb1\x08\xd5\xce\xbb\x09\x53\x3a\xe2\x87\xb2\x98\xdb\xb6\x99\x74\x6e\x67\xe9\x18\x19\xc0\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xef\xd9\xc6\xe3\xbc\x17\x79\x07\x6c\xba\x31\xfc\xfe\x94\xde\xf5\x2d\x84\x41\xe8\x90\xc8\x2b\xb2\xd6\x26\xe2\xf5\xfd\xe8\xbd\x9b\x96\x70\x18\x14\x69\x67\x1f\x04\xe0\xec\xbb\x76\xa5\xa5\x7a\xe4\x3b\x0d\xaf\xcb\x5b\x7d\xe7\x86\xe3\x29\xa9\xe8\x8c\x12\x9a\x87\x72\x1b\xaf\x9f\x85\x3e\x49\x29\x7c\xf9\x4c\x0a\x0e\x83\xfe\x43\x67\x1f\xd8\x79\x07\xb1\x98\x00\xce\xbe\xdb\xb4\xac\x12\xa2\xa8\x0e\x77\x17\x05\x9b\x2a\xda\xcd\xc4\xb1\x0d\x5f\xbe\x8f\xb8\x23\x77\x73\x8a\x39\x54\x71\xbc\xe5\x8f\x2d\x2b\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\xec\x7a\x17\x7c\x2d\x51\xc6\xd7\x28\x36\xf2\xf0\x4a\x15\xf7\x93\x5c\xb0\xf4\xcd\x79\xfd\x50\x9c\xd2\xea\x1d\x3c\xdf\xd2\xca\xc8\xc2\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xef\xf9\x44\xcc\x4b\xbe\xb7\x99\xbe\x5b\x2e\x74\xd7\x92\x83\x76\xa9\xb3\xfd\x13\x2a\x2d\xf6\xdc\xfa\x52\xca\xeb\x78\xab\x7a\x0d\x94\xe1\x30\x28\xd2\xce\x3e\x08\xc0\xd9\x97\x57\xf1\xcd\xfc\x78\xf8\xdb\xce\xaf\xa7\xad\x3f\xf2\x19\x75\x82\x61\xfb\x63\x47\xf8\x2c\x37\x73\x71\x0d\x1e\xb6\xe4\x93\x91\x99\xc2\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xef\xfd\x2c\x8e\x63\x4d\x9c\x53\x11\xdf\x61\x85\xdd\xbd\xd8\x13\x94\xc1\xd0\xbb\x3d\xe5\xdc\x65\x78\x64\x30\x01\x8f\xe1\x84\xcf\x77\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\x97\xda\x71\x2b\x41\xeb\x5a\x37\x0f\x63\x7c\x52\xfc\x0f\xfe\x68\x47\x11\xc2\x41\x09\xfa\x68\x2f\x0b\x8d\x1f\xa2\xb0\xe0\x04\x5b\x05\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\x31\x54\xfa\x0c\xa0\x2d\x8d\xc9\x6e\x9b\x37\x79\x6a\x4f\x1e\x1f\xb3\x1d\x96\x0a\xe7\x5c\x5d\x53\xf1\x23\xff\x63\x42\x1e\x3d\xfe\xf7\xa4\x80\xb4\xb3\x0f\x02\x70\xf6\x11\x34\x67\xd4\xe6\x43\x05\x1f\x96\xbc\xff\xb6\x7e\xf2\x5d\x9c\x5d\xc2\x8f\x39\x97\xa4\x5a\xc3\xdb\x79\xb8\x5f\x8d\xf9\x78\xe1\x6f\xae\xfe\xa1\xb3\x0f\xec\xca\x8c\x58\x4c\x00\x67\xdf\xb7\xe4\x8e\x3b\xa3\xe5\x2f\xe7\x51\x18\xf0\x52\xb6\x2c\xd7\xe8\xfb\xd9\x8b\xa2\x09\x71\x1e\x5f\x0f\xb9\x17\x4e\x1c\xfe\x43\x54\x06\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\x0c\xef\x26\xb6\xe8\x3f\x16\xa7\x14\x65\x8c\x39\x62\xd4\x11\x61\xd3\x70\x74\xa1\xb2\x64\x0d\xe0\xe1\x32\xa0\xa5\x8f\xaf\x94\xf0\xc0\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xcf\x5f\xba\xd3\xea\xb3\xc4\xbb\x3d\xa5\xa0\xb8\x47\xea\xb5\xb9\x7e\xf5\x3d\x96\xa5\x6b\xe8\xf7\x66\x62\x5d\xfe\x50\x16\x72\x55\x60\xc3\x61\x50\xa4\x9d\x7d\x10\x80\xb3\x2f\x56\xf9\x9a\x35\xb9\x15\x91\x73\x32\x83\xdd\x6b\x72\xca\xef\x33\x87\x94\xaa\xec\x2b\x8f\x7b\xe4\x85\x32\x09\xc9\x9c\xca\xde\xd3\xc3\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xaf\x7a\xf6\xd5\x78\x09\xd3\x03\x25\xda\x42\xaa\xe1\x65\xc9\xdc\xf6\x12\x5c\xd6\x21\x61\xaa\x17\x37\xf1\xd4\xb6\x04\x35\x2c\xf7\xb8\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\xe7\x9f\xaf\x89\x15\x95\xeb\x10\xac\xa9\x6a\xac\x6c\xac\x33\xa8\x82\xcf\xcc\x13\x2d\x30\xc5\xc8\x79\xf4\x38\x63\x88\xb8\x84\xdc\x11\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\x8e\x64\x3f\x9b\xde\x5f\xc7\x1d\x4b\x97\x76\xb0\x74\xcd\x25\x7d\x64\x4a\x41\x3e\x89\x87\xd3\x38\x4c\xb4\xb5\x5f\xe3\x7c\xab\x47\x09\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\x8f\x32\xd0\xf2\xd1\x38\x85\xda\xb9\x9a\xf5\x9c\x9e\x14\x2b\x55\xc9\x2e\x84\x13\x55\x95\x62\x9f\xf5\x4b\x36\x62\xdd\x49\x74\xfe\x7b\x73\xfc\x0f\x9d\x7d\x60\x7b\x57\xc4\x62\x02\x38\xfb\xbc\x6e\xef\xa2\x06\x44\xe7\x89\xf0\x8a\x49\xca\x63\xee\xfb\x34\x49\xd2\xa4\x26\xff\x3a\xd3\x8b\xb9\xba\xd0\x36\x71\x34\x25\x8d\x05\x87\x41\x91\x76\xf6\x41\x00\xce\xbe\x90\xc0\x1b\xf7\x36\x6f\x3c\x8f\xad\xfe\x32\xf8\x96\xb8\xa1\xeb\xe7\xd1\xc4\xaf\xea\x77\x1d\x1d\x33\xe1\xfa\xd9\x41\x7c\xc3\xb6\xf7\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\xd7\x8f\x92\x35\xf9\x8a\x7a\x66\x3f\x2e\x03\x93\xb3\x61\x47\xfc\xd4\x46\x17\xf6\xd2\x35\xca\xd0\x7b\x2e\x8d\xca\x6d\x70\x25\x57\x1a\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\xfc\x0c\xf7\xd7\xf8\xee\xbd\x2f\xd6\xa8\x3e\xfd\x89\x1a\xbd\xb5\xe0\xc1\xef\xf0\xd2\xe4\x8c\x4e\x8a\x8d\x7c\x1f\xdb\x95\x54\xe5\x26\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\xba\xb7\x61\x1c\xda\xcf\xcd\x3e\x69\x24\xec\xb7\x6e\x19\xea\x8d\x2d\xc0\x0e\x0c\x05\x6e\xd1\xd7\x18\xa0\xe0\xbe\xf5\x30\x9f\xe2\x83\xc3\xa0\x48\x3b\xfb\x20\x00\x67\xdf\x67\xc3\x4a\x9c\x5b\x7d\xfb\x45\x0a\x68\x4f\x7b\x0b\xcd\x8a\x54\x54\x13\xbd\xba\xa9\x70\x25\xf3\x29\x17\x9f\xd2\xfa\x9e\xc2\xef\xc2\x61\x50\xa4\x9d\x7d\x10\x80\xb3\x2f\x20\x59\xf5\xe9\x4a\x40\x2a\xa5\x0f\xe3\xcd\x0d\x82\x56\xf3\xb6\xfe\xb3\x75\x9a\x64\x25\x25\xb6\x80\xd4\x8f\xb4\x62\x03\xc1\xcc\x70\x18\x14\x69\x67\x1f\x04\xe0\xec\xab\x23\x1a\x0c\xad\x0e\xff\xf4\x47\xd4\xdc\xb6\xde\x41\x69\x95\xb7\x65\x4d\x62\x6a\x9b\xcd\xe4\x49\xbd\xfe\x4d\x11\x23\x4b\xd6\xbf\x5b\xfb\x7f\xe8\xec\x03\xbb\xbb\x43\x2c\x26\x80\xb3\xcf\x9b\xe5\x7a\xdc\x1f\x5f\x2d\x76\xb9\x5e\xcf\x9a\xca\x46\xce\xcf\x84\x57\x42\x06\x5c\x4d\x71\xba\x0e\xc7\xd5\xdc\x34\xb2\x4c\xd4\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\x87\x71\xbc\x9c\x83\x52\x2a\xf7\x38\xcb\xe4\x53\x2a\x8d\x45\x01\x3d\xb1\x48\x60\x3c\xb9\x88\xda\xd2\x99\x15\xa4\x75\xe1\xfa\x0b\x75\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\xe5\x06\x7e\x20\x80\x67\x94\x7e\xaa\x2e\xd4\x09\x34\xac\x1b\xa0\x3c\x3c\x60\x3d\xf3\x2e\xf8\x12\x5c\x10\xf0\x92\x82\x9e\x20\xe1\x01\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\x3e\xa1\x67\xf3\xb8\xa8\x76\x86\xa2\x2a\xb2\x3f\xcf\x5c\x3a\x0b\x3b\x41\xf7\xd5\x68\x16\x0c\x75\x1c\xaf\xae\xad\x35\x7b\x5c\x7c\x15\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\x4c\xab\xe2\x8c\x74\xb3\xa5\xb8\x2d\x5b\x4c\xa1\xad\x50\x94\x87\x19\x3b\x5e\xf8\xb6\x56\xf3\xd1\x4f\x7e\xe8\xee\x30\x4f\x4b\xfe\xfd\x3b\x90\x76\xf6\x41\x00\xce\x3e\x41\xd6\x97\xe1\x5f\xbb\x94\x6c\x93\xac\xea\x27\x69\x6f\x5f\x5b\x6e\x68\x7f\xa0\x77\x8c\xf7\xae\xbf\x53\xe3\x77\xa9\xc2\xca\xe9\x43\x38\x0c\x8a\xb4\xb3\x0f\x02\x70\xf6\x8d\x16\xc0\x5b\x93\x0f\xd3\x29\xae\xe6\x8a\xdc\x9d\x9d\x55\x24\x28\xdf\xf5\xe8\x84\x6a\xfa\x08\x1f\xac\x0a\xfa\x56\xa7\xa2\x18\xc2\x61\x50\xa4\x9d\x7d\x10\x80\xb3\x2f\xac\xe2\x40\x8b\x3e\x2d\xc2\xa8\x7a\xc2\x5e\xe5\x9d\x40\xd9\x6b\x9d\x22\x8b\x57\xe2\xdc\x35\x37\x77\x85\xdf\x7e\xfd\x15\x79\xf5\xef\x2d\xca\x3f\x74\xf6\x81\x3d\xff\x40\x2c\x26\x80\xb3\x2f\x18\x42\xe2\x7e\x3d\xf7\x81\xe4\xb4\xde\x46\x24\x1d\x76\x9e\x79\x70\x14\x8a\x84\x79\x0e\x65\xfe\xa3\x39\xb5\x9d\xb9\x83\xb8\xbf\x57\x0d\xa4\x9d\x7d\x10\x80\xb3\x6f\xb6\x1c\xb7\x0d\xf3\xd3\x40\x14\xf6\xdc\x67\xb9\x3f\x7a\xac\x9d\xd4\x22\xfd\x91\xcc\xd2\x2c\x49\x3b\xfd\x9d\x1f\x7d\x04\x51\x70\xe0\x30\x28\xd2\xce\x3e\xc8\x0a\xf0\x63\xa4\xe8\xf1\x67\x6b\x5f\x0c\x67\x5e\x0e\x56\xbe\xd5\x69\xdd\x3a\xb6\xe6\x22\x14\x88\xd5\x1d\xb9\x39\xa2\xf6\x51\x8c\xa2\x87\x0d\x0e\x83\x22\xed\xec\x83\x00\x9c\x7d\xe5\x37\xe5\x04\x1e\x07\x41\x3c\xfb\xdb\xca\xe6\x9b\xa2\x30\xff\x24\xa1\x2a\x1d\xcf\x8e\x6b\xe3\x68\x27\xeb\x96\x63\x65\x62\xe2\xc3\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xcf\x38\xc7\xfb\x79\x98\x30\x81\x7c\x76\x82\xd5\x88\x60\xf5\x93\xe5\xb8\xfd\x47\x03\x07\x16\xd9\x63\x3f\x7f\xc8\x36\x2f\x4d\xca\x8b\xc2\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xef\x26\x3f\xb7\x2e\x69\x5f\x26\xa3\x20\x65\x6b\xff\xf8\x73\xeb\xfb\xec\x91\x6d\xe2\x3e\xa6\x3d\x61\xc2\xfd\xfc\xf8\xee\x5a\x36\x24\x70\x18\x14\x69\x67\x1f\x04\xe0\xec\x63\x0c\x7e\xfb\x6b\x32\xf2\xa5\xd4\x87\x7e\x26\x7d\xf9\xc8\xcc\x01\x57\xf4\x48\x37\x8a\x87\x19\xbb\xdc\x53\xd1\xa7\x8e\x29\x5c\x54\x70\x18\x14\x69\x67\x1f\x04\xe0\xec\x7b\xc5\xc0\xbe\xda\x21\x4d\x3a\x45\xb8\x37\xb8\x1b\x95\x90\xde\x47\xb1\xd5\x36\x4e\xbb\xff\x3b\x2a\x6c\x5a\x11\x0b\x27\x92\xec\xef\xd6\xfe\x1f\x3a\xfb\xc0\x9e\x10\x22\x16\x13\xc0\xd9\xb7\x53\x94\xb8\xce\x95\x4c\xd3\xab\x78\x2d\x65\x47\x6d\x8d\xc6\x83\x9a\x29\xaa\x98\xd5\x20\x91\x8e\xf4\x43\xdd\xe7\x8c\x9c\xa8\xbf\x7f\x34\xd2\xce\x3e\x08\xc0\xd9\x57\x62\x48\xfa\xc9\x98\x67\x1c\x6f\x5b\x98\xa8\x30\x11\xd7\xce\x34\x12\xbf\x3e\x6d\x48\x96\xae\x6d\x9b\x90\x0c\xa6\x80\xa1\xf1\x77\xff\x8c\xb4\xb3\x0f\x02\x70\xf6\xb5\x97\xca\xeb\xb8\xb9\x45\xfa\x06\x34\x25\xe9\x43\x7f\xe4\xa2\x9e\x46\x35\xa1\x32\x8f\x8b\x92\x16\x4c\xa7\x56\xfc\xe8\x7f\xfe\x37\xe8\x48\x3b\xfb\x20\x00\x67\x5f\xc0\x5c\x7d\xd3\xfe\xae\xd2\x2e\x16\x4c\x9a\xbe\x75\xd3\x75\xac\x3c\x70\xbf\x39\x4c\xfe\x55\x69\xce\x1a\xfc\xc1\x2e\xde\xb8\x36\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\xe4\x69\x34\xf2\x6f\x68\x30\x48\xf9\xc1\xd0\x19\x9e\x04\xbb\x70\x11\xe2\x1a\x36\xcc\xa1\xc5\xeb\x9a\x44\x99\xe0\x15\xab\x19\xb1\xc3\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xef\x2d\xe5\xb3\xed\x66\x4d\x39\x57\xd5\x9d\x2e\xc7\x88\x85\x0c\x96\x38\xab\x5b\x3f\x09\x3e\xd9\x54\x91\x94\xb6\x7d\x9c\xc4\x7f\xf8\xf7\x37\x47\xda\xd9\x07\x01\x38\xfb\xe2\x5e\xb3\x98\xac\xbc\xd0\x89\xea\x5b\xf3\x22\xe0\xb2\x69\x75\x9d\xb6\x5b\x5f\x33\xda\xa7\x6c\xb9\xf5\xe4\xbe\xb4\x7c\x93\xbb\x0e\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\xfc\xd4\x37\x68\xce\x1c\xe9\x99\x7b\x2c\x09\xf5\x5c\xcf\xaa\x66\xa7\xb8\xda\xdb\xb2\x6f\x95\x7c\xa0\xee\x54\xa0\x6a\x89\x12\xfc\x7b\xef\xf7\x0f\x9d\x7d\x60\xcf\xd0\x11\x8b\x09\xe0\xec\x2b\x47\x37\xc1\x11\xa3\x8f\x24\xf0\x0f\x6d\xa5\xeb\x69\x94\x39\x85\x6a\xbb\xdb\xc1\xba\xe3\x60\x6f\x0e\xe5\x66\x37\xf4\xc9\x89\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\xb7\x77\x1a\x46\xfb\x78\x7d\xaa\x7a\x5a\x74\xb0\x11\xd7\x6d\x9e\xc7\x4f\x84\xc9\x60\x61\x61\xde\x59\x54\x5e\xd2\xbd\xec\x56\x35\x29\x1c\x06\x45\xda\xd9\x07\x01\x38\xfb\x3a\x8b\x35\xa6\xc5\x34\x83\x14\xec\x55\x17\x06\x5b\x03\x1b\xec\x95\x42\x7f\xd8\xd5\xef\x3a\x31\xbd\xe6\x90\x23\xcb\x3c\x34\xfc\xbb\x98\x90\x76\xf6\x41\x00\xce\xbe\x99\x7b\xb2\x63\xcf\x49\xb9\xef\x6b\x0d\xc8\xb4\x29\xe0\x26\x62\x26\xe7\x52\x84\x36\x15\xea\x4c\xbb\xdf\x8a\xd4\x5f\x85\x2a\xff\xfd\x3b\x90\x76\xf6\x41\x00\xce\xbe\x69\xa3\xdd\x17\x90\x5b\xe5\x68\xb2\x04\x0f\x1a\x86\xa6\x0c\x54\x4e\xd5\x34\x1c\x57\x8f\xc7\xa9\x58\x26\x3f\xc8\x31\xa1\x56\x9a\xc3\x61\x50\xa4\x9d\x7d\x10\x80\xb3\xcf\x88\x75\x82\x92\x93\xea\x3a\x97\x0f\x3f\x6f\x8f\xf6\x5e\x35\xa9\x96\x1d\x25\xbf\x70\xec\x02\x0d\xeb\xf3\xd4\x0a\xcc\x77\xbf\x24\xe0\x30\x28\xd2\xce\x3e\x08\xc0\xd9\xe7\x5e\x92\xe5\xa6\x4f\xd6\x52\xf9\x92\x23\x64\xc2\xf4\x76\x24\xaf\xfe\xfd\x36\x5b\x82\x17\x1c\x54\xd5\xfb\xa7\x7f\x1e\x6f\x5c\x25\x87\xc3\xa0\x48\x3b\xfb\x20\x00\x67\x9f\xc9\xde\x68\x46\xd4\x7c\x0c\x79\x0d\x85\x3f\x77\xc5\xe1\x28\x5e\x88\xb6\xad\x78\x53\xbc\x55\x34\xda\xcb\x46\xc6\xe0\x04\x98\x09\x1c\x06\x45\xd2\xd9\x57\x45\xf8\xff\x16\x13\x4c\x81\xea\x93\xdf\x7d\x3a\xcf\x6b\x83\xcb\x98\xb6\x5e\x82\x35\x37\x3e\xf9\x9a\xd5\x95\xde\x8a\x49\x4b\x20\xfd\xf4\x80\x16\xce\x0b\x4f\xe2\xba\xd0\xbe\xaa\x65\x99\xce\xa3\x78\xbd\x96\x56\x96\x15\x50\x1b\x8b\xda\x4c\x88\x5d\xcc\x2b\x35\x69\x93\x2e\x79\x5f\x8b\xa2\xbf\x56\x9b\xee\xe2\xff\xdb\x24\xb1\x93\x17\x17\x90\xec\x95\xeb\x9b\x97\x0c\xe4\x64\x6f\xd1\x78\x41\x57\x6d\x9e\xb4\x2e\x43\x2c\xb1\x4f\x89\x72\xcd\x8c\x0f\xeb\x02\x0a\xff\x83\x55\x1a\x33\x40\xe2\x01\x65\x7e\x26\x24\x52\xfb\xe6\xcd\xb6\xae\x12\x6c\x64\x32\x27\x57\xb0\x3a\x99\x6c\xa8\x9f\xd5\xe2\x02\x7a\xf0\xa7\x75\xf5\xa4\x3e\xc1\xb4\x4d\xbe\x0e\x25\x90\xf3\x2b\x94\xf8\x7b\xa9\x65\x08\x4d\x73\x01\x4c\xbe\x11\x93\xb6\x4c\x9b\xf2\x02\xda\x3d\x9c\x4f\xf6\xe4\x4f\x6f\xe6\x16\x57\x9d\xa6\x7b\x08\x59\xc3\xf4\xc2\x78\x3e\x4d\x25\x03\xba\x4b\x04\x07\x3a\x9c\x31\xcf\xee\x02\x2a\x2d\xf9\x75\x52\x26\x5f\x81\xbb\xef\x47\xc4\x95\xc5\x45\xfc\x26\x01\x4f\xdc\x1b\x9c\xf5\x2e\x4e\x4b\xac\x91\x1a\x2f\x19\x17\x18\x2e\xa0\x85\xb6\x27\x94\x77\x13\xf3\xf9\x89\x2b\x8d\x7d\xa1\x5e\x52\x6d\x47\x66\xfd\x6f\x2b\x0f\x8a\xb9\xd1\xc5\xbd\xf0\x4f\xfb\x9c\x2e\x7e\xaf\xa8\x56\xa1\x2a\xed\xd7\xa5\xd5\x07\x61\x53\xfc\x83\x95\xe5\xa7\x15\xfa\x52\xc9\xc5\x2c\x04\xa3\x78\x35\xda\xfc\xcb\xc3\xae\x0a\xd7\x0b\x28\x53\xe9\xa0\xe7\x0f\xc6\x9f\xca\xb7\xc2\xb0\xe7\x97\xb9\x2b\xfd\xbf\x0d\x4f\x96\x50\xcd\xd2\xd5\x7a\x4a\x7e\xea\xc0\x50\x27\xa3\xbb\xe8\x37\x24\x8e\x12\x18\x1b\x0f\xb8\xb7\xbd\x94\x1f\xce\x80\xbb\xb5\x32\xe7\xe8\x12\xf3\xe6\x77\xff\xad\x39\xbe\x78\xe2\xc2\x60\xae\xef\x17\x50\xa7\x0d\x6d\x71\xde\x06\x22\x53\x66\x25\x0f\x03\x52\x16\x42\x21\x0f\x9d\x1b\x46\xaa\xa8\xbc\x4e\x5f\xf8\x48\xd4\x92\x24\xe9\xcf\x2e\xa0\xcd\x79\xa5\xd7\xf5\xcc\x8e\x93\x36\x89\x48\xef\x88\x56\xde\x60\x3b\xbe\x3a\x17\x45\xa3\x5e\x6f\x38\x91\xd6\x65\x30\x28\xf7\x33\xf3\x02\x2a\x12\x96\x1e\x39\x5a\x9a\x78\x8d\x64\x90\x21\x54\x4a\x4b\x5f\x68\xd2\x5b\x95\x12\xfd\xfe\x1e\xdc\xc9\xdf\x91\x0a\xed\xe6\xed\xa7\x17\xe7\xaa\x6c\xe0\xe1\xfd\xea\x06\x23\x6d\xa8\xf0\xd5\xaf\x59\xdf\x84\x61\xf3\x0e\x4f\x50\xbf\x7a\x0e\x7c\x7c\xee\x22\xf8\xd6\xca\x45\xfd\x62\x06\x52\x47\xee\x44\x4e\xe4\xa4\x33\xdd\x95\x1f\x74\x9d\xa9\x78\x4f\x3e\xa5\xb5\xb7\xb2\x67\x6d\xdf\x35\x69\xe6\xaa\xee\x1a\x5f\x70\x01\x25\xf3\xff\x66\xcf\xc8\x70\xbf\xf2\x68\x40\x8b\xb1\x32\x7a\xb5\x9d\xb2\x99\xab\xbb\xda\xce\x44\x69\x23\x78\xad\x0e\x6b\x56\xba\xe5\x02\xfa\x2c\x52\x8d\x04\x3f\xba\xde\xf5\xfb\x5a\x53\x2d\x05\x76\x49\xf4\xa8\xf3\x1d\x53\x41\xff\x2b\x7b\x3d\x99\x4a\x31\x45\x5e\x10\xf1\x8b\xfd\xde\xe0\x8d\x1b\xc5\xb1\xcd\x02\x31\x7d\xf9\x73\x11\x95\x4a\x59\x32\x0b\xbc\x84\x86\x43\xfc\xa7\x9d\x68\xa1\x58\x6a\xe1\x13\x5f\x2e\xa0\xfe\x0f\x59\x2c\x2b\x22\x3c\x73\xe6\x0c\x94\x79\xb3\x4c\x86\x1c\xb2\xd1\x87\xfb\x19\x37\x0b\x58\x14\x97\x1e\x9f\xa5\x11\x88\x5d\xfc\x09\x48\x5e\x69\x85\xa2\xa9\x8a\x44\xd2\xab\x76\xfe\xf4\xd6\x95\x5a\xaa\xeb\x7f\x52\x61\xac\x5e\x3b\x9f\x78\x3d\x9d\xa3\xeb\x58\x8f\xf4\x02\x6a\x3a\x47\xd1\x68\xa7\x26\x6a\xec\xb6\xd9\xc4\x65\xf4\x21\x01\x85\xd0\x99\xd7\x32\x53\x9a\x5f\x91\xe2\x68\xe6\xde\x1a\x5e\x78\xce\x05\x74\x99\x63\x2d\xfd\x56\xa8\x82\xfc\xf7\xc4\x27\x5e\xeb\x54\x5f\x28\xa7\xc2\x8f\x21\x56\x19\xe6\x6f\xf7\x76\xa7\xe9\xf7\x06\xde\x5d\xfc\x66\xb5\x1a\x92\xf0\xf0\xdd\x91\xc1\xe2\x11\xef\x6b\x4b\xcf\x18\x9e\x04\xd3\xb8\x07\xa8\xc6\x3f\xc6\xa3\x3f\xa7\x3d\xe0\x18\xf8\xdc\x51\x7b\x01\x15\xc6\xfd\xe5\xd4\xcb\xaa\x45\xd8\x69\xa6\x3e\xa3\x96\x77\xb0\x56\xe9\x7d\xbc\xdd\x84\x96\x77\xba\xfe\x20\x86\x9e\x47\x2d\xfe\xe2\xbf\xbd\x2d\x77\xcc\x43\x5f\x94\x7b\xfc\x60\x60\x56\xf8\x09\x89\xa3\xa6\xbc\xeb\x49\x25\x85\x60\x22\xe7\x9d\x7e\x94\xaf\xcc\xf6\xce\x9a\x5a\x17\x50\x63\x1a\x53\x4c\xb6\x20\x5e\x8e\x0e\x61\xe9\xa6\xf8\x86\x71\xe1\x40\xbc\x20\x9b\x67\x1a\xf2\x68\xe4\xb1\x53\x86\xa1\x6b\x9d\x89\x17\xd0\x9a\xce\x42\x43\x15\x61\x07\x46\x31\x5d\xf6\x90\xdb\x5c\xd7\xf1\x38\xd6\x0b\x5c\x3b\x1e\xbe\xcc\xa3\xfe\x73\xe4\xf2\x04\x8e\xf2\xf5\x02\xaa\x93\x8e\xb6\x28\xb0\xb9\x94\xff\xec\x9e\x85\x20\x6a\x85\xf6\x55\xb4\xcf\x81\xf4\x2e\x10\x37\x0f\x91\xdf\xf2\xc9\x29\x75\x01\xd3\x17\x4f\x19\x0b\x27\x2a\x1f\x9e\x5b\xe9\x39\xa6\xd0\x18\xe5\x5f\x35\xac\xae\x23\x3f\xc5\xb8\xf6\x7b\x74\xc0\x63\x49\x57\xde\x6c\x55\x83\xf5\x02\x1a\xdd\x32\xae\x4e\xee\xc6\x21\xb3\xf3\x5a\xef\x3a\x21\x7b\x5c\x40\x79\x0c\xdb\xa4\x22\xfd\x3a\x2c\x9c\x46\xb5\x89\xbd\xd6\x9d\xfb\xe2\x5b\x0f\xf3\x41\x74\x1c\xbe\x3a\xad\x5b\xc2\x7f\x46\xae\x2d\x11\x33\xdf\xb1\x1b\x0f\x8c\xf2\x8a\x91\x8b\xcc\xf2\x58\x3d\x6d\xd0\xd9\xbe\x80\x4a\x1e\x87\x14\xd8\xe1\x64\xf2\x4b\xf1\x19\x8d\xaf\x9a\x1a\x9d\xbe\x1f\xa8\x1b\x31\xf3\xba\xcf\x50\xd0\x30\x1e\x70\x24\xcf\xd0\x73\x01\xa5\x76\x0a\x7e\xcc\x5b\xb2\x24\x66\xe5\xd6\x7a\xd2\x6c\x3d\xef\xb0\x55\x29\xd1\xc3\x83\x6d\x88\x4e\x1f\x73\x7b\xd9\x8d\xd0\x3c\xf8\x02\xfa\x9b\xc8\x95\x9e\x44\xce\xac\xf6\x9b\x00\xac\x67\x2e\xe0\x84\xae\x02\x5b\x24\x72\x41\xdc\xfe\x70\x63\x2a\xb2\x4d\xf6\x6e\xa9\xd2\x05\x74\xd8\xa1\x96\x97\xd4\xad\xf0\xf7\x1f\xfc\xe7\x22\x0b\x82\xc3\x2e\x86\x19\x23\xf6\x65\xcc\x9f\xf4\xea\xf2\x7e\xca\xd8\x38\x7e\x78\x77\x01\xcd\x64\x54\x38\xc1\x5c\x96\x9a\xf8\xa2\x15\x7d\x57\x7e\x28\xed\xb6\x75\xaa\x15\x65\xfa\xf6\x88\xba\x60\x55\x7a\xe2\xea\xe6\xcd\x8b\xcb\x90\x49\x70\x14\x32\xa5\x15\x51\x8a\xdd\xed\x75\xf0\xce\x71\xa3\xd3\x6b\x45\xaf\x1a\x5f\x46\x60\x6c\x55\x74\xfe\x35\x0d\x95\x7f\xd5\x05\x54\x53\x25\x50\xe1\xe6\x55\x3d\x5f\x22\x92\xb3\x37\x7c\xaa\xa8\xc7\xf4\x71\xf6\x1c\x5f\xff\x08\x9e\x0a\x5f\xc5\xc4\x87\x04\x5f\xa5\xba\x80\x3e\x16\xdc\x09\x93\xee\xae\xf0\x35\x55\x49\x95\x54\x7a\xac\xa1\x3f\xc6\xd0\x6c\xff\x7e\x9c\xd2\x58\xd3\xbf\xcf\x88\xdc\x4c\x0d\xe5\x02\x3a\xe9\xd7\xbb\xfa\x74\x72\x5d\x90\x78\x45\x9c\x5f\x42\xde\x8f\x4d\x96\x39\x5e\x4f\x0e\x63\x6d\xce\x45\x48\x33\xdd\x8a\x01\xb3\xfc\x02\xfa\xbe\x75\x9a\xec\xd9\x6d\xa7\x05\x7f\x1c\xdb\xa4\x1a\x5c\x15\x13\x94\x49\x95\xba\xdd\x9e\x1c\xb7\x68\x91\x34\x0c\xb4\xc7\x4e\xd9\x17\x50\x6e\x63\x8f\x83\x67\x8e\x9e\xea\x66\xdd\x2c\xfa\x8f\xdf\x53\xf7\xce\x91\x9c\xc1\x1f\x9d\xf5\x1a\x63\x51\xae\x0b\x92\xe2\xa3\xe0\x5d\x40\x09\xfd\x50\x42\x32\x72\xb4\x62\xf3\x31\xfd\xf8\xc8\xa9\xec\x5e\xbb\xd9\x38\xdc\x5c\x8b\xd1\x52\x4f\xc4\x2a\xdf\x52\xbd\x9f\xb6\x7c\x01\x75\x40\x57\x92\xfa\x18\x84\x11\x07\x0b\x31\xe1\x24\xe5\xea\x16\xb2\x88\xae\x7f\x94\x48\x33\x81\x43\xe6\x3c\x4e\xc7\x20\xd5\xf3\xe4\x02\xfa\xe5\x61\x9e\x80\x26\x0a\x3d\xfe\x0e\x8f\x4c\x2b\xeb\xa3\x95\x8f\x21\xe5\xd5\xb7\xa6\xfe\xac\x87\x4c\x51\x11\x78\xdb\xb9\x12\x5e\x7c\xf1\xe4\x08\x9f\x43\x70\xe8\xaa\x5e\xc9\x0b\x27\x75\x08\x16\x1e\xa4\x5c\x1b\xdf\x11\x8b\x3d\x48\xb8\xfd\xbb\x0b\xc5\x21\x19\x2b\xa5\xe8\x05\x34\x5f\x16\x6d\xd4\x3a\xbe\x70\x8e\x0c\xf5\xe5\xac\xcd\x77\x43\x13\x99\x8f\xdd\xcb\x24\x8c\x8f\xb1\xbf\x6a\x2e\x3c\x65\xff\x40\xda\x7a\x71\xc1\x1c\xf6\x42\x7f\xd7\x92\xd4\x93\x9d\xfc\x3e\xd2\x8f\x9a\x95\x67\x1b\x2e\x56\x2d\x3e\xfa\xf0\x3c\x32\x92\x67\x2e\x4e\xe5\xcd\xb7\x40\xd4\xff\x6c\x33\x10\x72\xa1\xe6\x77\xf1\x60\x3c\xc8\xdb\x00\x45\x94\x4a\x9f\xc4\xd8\x05\x56\x52\xa3\x57\xea\xf7\xfc\xa6\xae\xd5\xce\x6b\xb7\x75\x36\x7e\x1e\x48\xb9\x80\xe6\x8e\xb5\xee\x4f\xaf\xff\x7e\x14\x75\xfb\xab\xf2\x58\x4f\x1b\x4d\x00\xd4\x20\x24\xf3\xf4\x30\xab\x5e\xfd\xdb\xfd\xa8\x9a\xfc\x26\x51\x51\x32\x32\x7f\x51\x51\xc4\x2c\xc0\x2a\x07\xa0\xe2\x06\x88\x41\xfc\x2f\x0c\x80\xa5\x1f\x3c\x15\x93\x5a\xd9\xe0\xeb\x8f\x62\xef\xa7\x35\xb5\x47\x5b\x9d\x75\x34\xc3\x1c\x58\xea\x2d\xa8\x27\xac\x48\x22\xe2\x78\x01\xed\x37\xf3\xd9\x2a\xb3\x9e\xf6\x4a\xc0\x2c\xbb\x82\xfd\x47\x23\xa3\xf7\x43\xbb\xf5\xea\x5e\xed\x6c\x95\x29\x4b\x75\xdc\xec\x86\x97\x5f\x03\xf4\x3f\xab\xf9\x7f\xef\x49\xc2\xc4\xd4\x45\x45\x2f\xfe\x28\xd9\xfb\xa1\xa9\x53\xef\x1a\x6d\x4e\xb8\x8b\x8c\x85\x59\x5e\x0b\xdb\x25\x32\xe4\x2e\x3b\x72\xce\xec\x64\x9b\xa0\xff\xd6\xa7\xbf\x28\x20\x5e\x30\x8b\x10\xba\xfe\x15\x73\x66\x3c\x9a\xf4\x53\xf1\x6f\x8d\x26\xba\x4c\x45\xbd\x99\x15\xfa\x51\xbe\xfb\xad\x95\x7c\x9e\x4a\x9c\xfe\x52\x28\xa2\x28\x28\x28\xd2\x28\x68\x7f\x77\x7c\xfe\xa2\xa2\xfe\xa2\xa2\x61\x12\x28\x0a\xa8\xff\x7b\x44\xee\x67\x3f\x2d\x0d\xfd\xf2\xc9\xbd\x03\x16\xdd\x8b\x59\x3e\x9b\xa0\x7f\xf0\xec\xc5\x39\x4b\xa2\x95\x79\x3e\x58\x57\x21\xae\x9f\xf6\x6f\x47\x94\x44\xb9\x2f\x0a\x18\xf2\xd6\xc6\x3d\x82\xa5\x60\xdc\xb7\x47\x23\x26\x16\x0f\x5c\xa6\xa9\xc9\x09\xe9\xac\x47\x7c\x4a\xdf\xec\x87\x15\xf3\x0b\x41\x65\x23\xfe\xfd\x90\xea\xc0\x21\xc9\x38\x38\x4a\x7f\x1d\xf6\x73\x94\xb5\x64\xd5\x39\x37\x3f\xa1\x34\xd1\x8d\x5f\xf0\xee\x65\xe4\x37\xc2\x15\x5e\x27\xb5\x57\xec\xf8\xf7\x43\xda\x01\x87\xfc\x7a\x2a\x4d\x7b\x9b\x74\xd0\x39\xa3\x12\x17\x75\x33\x4e\x0e\xe7\xfb\xed\x9b\xf3\xaf\xb5\x49\xe8\x22\xbe\x34\x62\xfd\x8a\xbd\x35\xf3\xef\x87\xf4\x02\x0e\xd9\xf1\x3b\x2d\xf9\x5e\x66\x4a\x4f\xef\x41\x69\x2e\xf6\xdc\x8e\x4d\x66\x3b\x5c\x2b\x99\xb7\x76\x89\x6e\x34\xb8\x8f\xd4\xeb\x04\xf6\xef\x87\x4c\x02\x0e\x99\x90\x79\xb5\xfc\x0e\x6e\xf9\x2a\xeb\xaf\x29\xf7\xdd\x5f\x3a\x2f\x57\x25\x3e\x5a\xe7\x6c\x5e\x8b\xe0\xef\x1e\xea\x62\xde\xc8\xf5\xfa\xf7\x43\x7e\x02\x0e\x49\xc4\xf5\xa3\x4b\x5f\x71\x3c\xec\x80\xd6\xd8\x22\x71\x32\xda\xba\xde\x5c\x3c\x79\xf2\x3d\xd5\x3b\x2f\x71\xf2\xf0\x40\x73\x36\xb6\x7f\x39\xa4\xce\x7f\xb6\x12\x03\x30\x51\x03\xc4\xa8\xe1\x17\x06\xf3\xda\xd2\x22\x5f\x86\x47\x8a\x24\x0c\x5e\xe1\x7f\x7b\x0d\x5d\x82\xd3\xcd\xd7\xdc\xb3\xb3\xfd\xcd\x61\x5b\x7b\x9a\xb1\xc0\x61\xbe\x9f\xe6\x7f\xc6\x05\x88\xf9\x5d\x2c\x3b\x8b\xfb\x87\x74\x28\x62\x27\x92\x41\xad\xa2\xb6\xd4\xae\xd8\xc5\x3d\x3e\x87\x81\xae\x57\x77\xc8\x61\xf1\x66\x5f\x5d\xc5\xf0\x5d\x44\x59\x30\x2e\x40\x0c\xeb\x62\xd9\xd4\x77\x6d\xb0\xa4\x65\x3b\xb7\xbd\xce\x6a\x3b\xc6\x23\xa1\xd3\x9a\x8e\x11\x65\x53\xde\x5f\x65\x7e\x82\x2b\x74\xe8\xad\x28\x0f\x10\x65\xc1\xb8\x00\x31\xd4\x8b\x65\xc3\xf3\x60\xa7\xfa\xed\x9b\x5f\xc6\x13\xee\x7a\x2b\x4d\xa6\x5e\xe5\xfe\x30\x46\x2d\x19\x5e\x3e\x60\xba\x35\x54\x6b\x46\xdf\x5b\x8d\x28\x0b\xc6\x05\x88\xa1\xff\xaf\xb2\xa7\xd4\xba\x8a\xbf\xd7\x48\x49\x19\x1d\x7b\xac\xcc\x0a\x70\x8c\x02\x3b\x8c\x6b\x83\x72\x74\x05\x27\xbe\x66\xc8\x6b\x88\xf4\x9c\x97\x05\xe1\x00\x65\xc7\x53\xbe\xf3\x62\x4d\x33\x60\xe8\xa8\xd1\x8b\xd1\x16\xb9\xd0\xab\x4e\x99\x0d\xae\xa6\x8f\xfe\x6a\x79\xee\xa6\x7e\xda\x33\xaf\xeb\xa7\xf3\x9f\x9d\x24\x2f\x87\x41\x48\x18\x9f\x57\x7f\xed\x58\x77\xc6\xa4\x34\x6b\x80\x54\x9f\xb6\x22\x51\xbe\xbc\x7a\xf8\x9e\x5a\x10\xb5\x2c\x7d\x7c\x75\xe4\x77\xc4\x84\xc1\x38\x40\x18\x1e\x14\x78\xb9\xe1\x68\x0c\xca\x2f\xe7\xad\xa6\xe5\x8e\xe7\x75\x32\x56\x25\x7c\x0e\x3b\x8d\x10\x9b\xae\x6e\x11\x75\xe9\xe2\x2e\x43\x94\x05\xe3\x00\x61\x88\x2a\x7a\x55\xdf\x91\xfe\x3d\xc8\x6f\xa0\x3f\xf5\xf8\xe3\x9b\x47\xdf\xec\x12\x66\x03\x70\xb6\x8f\xd6\x59\xa3\xd8\x05\x06\xb3\x02\x11\x65\xc1\x38\x40\x18\xbc\x87\x76\xd1\x67\xee\x7d\x12\xd9\xdb\x0c\x20\xc1\x5c\x75\xe6\x7d\x22\xc7\xb7\x87\x33\xc7\x2d\x43\xf5\x7b\x4a\xf8\x2d\x43\xfd\x19\xa2\x2c\x18\x07\xf8\xd5\x8c\x4c\xf3\xe4\x54\x7d\x18\xaf\x1a\x4c\x0a\xbd\xe9\x5d\x5a\x1f\x6b\x5a\x4d\x37\x36\x8b\x65\x69\x66\xb5\x08\x40\x4b\x5f\xd7\xb4\x43\x94\x05\xe3\x00\x65\xe7\xbd\x4a\xf7\x61\x70\x5b\xd6\x05\x0a\xf5\xf7\x2e\x7f\xe6\x6b\x4d\x85\x92\x3f\x8b\x3d\x29\x0f\x20\xb2\x26\x49\x8c\x75\xd6\x51\x44\x84\x01\xec\xf2\x75\x39\x0c\xcf\x83\x49\xb4\x5a\x1f\xe8\x33\xfb\x5b\x18\x63\x24\x39\x50\xa0\x19\x38\x2d\xa1\xd0\x3a\x11\xbf\xae\x73\x30\x74\xa5\x7c\x39\x45\x8e\x98\x30\x18\x07\x08\x03\x75\x04\x7d\xdb\xb7\x07\x92\x19\xd9\x34\x8a\x5e\xcf\xaa\x44\xaf\x08\xe3\x70\xbf\x68\x4d\x6f\x1e\x3f\x34\xef\x09\xd3\x4d\x3f\x58\x41\x94\x05\xe3\x00\x61\xf0\xbd\xe6\x52\xd3\x21\x8c\x81\xbb\xe3\xfd\xae\x9d\xe0\xf0\xd3\xe8\x9d\xa8\xef\xe6\x57\x79\x92\x2c\xf6\xf0\x26\xe9\x69\xf8\x0d\xf0\x11\x65\xc1\x38\x40\x18\x48\xd6\xf2\x27\x9c\x14\xf8\x98\xc2\x9a\x64\xe3\xf1\xc8\x76\x30\x15\xee\x63\x66\xa1\xfd\xa0\x64\x36\x39\x2c\xde\x3b\x31\xe5\x27\x40\x94\x05\xe3\x00\xbf\x1a\xe9\xbd\x6b\xae\x8d\x12\x68\xa4\x13\x5f\xa6\x25\x5f\x34\xc1\x9f\xf4\xc9\x4d\x7d\x53\x35\x0f\x8f\xdb\xda\xfe\xfc\xd0\x0c\xd6\x37\x8a\x28\x0b\xc6\x01\xca\x1e\xf5\x43\x57\x87\x2c\xc4\xc5\xad\x86\x4e\xaa\x37\xdc\x98\x83\xaa\x5e\x37\xea\xec\x8e\xe8\xec\xb2\xdc\x10\xc6\xdd\x0e\x47\x39\x45\x84\x01\x6c\x63\x71\x39\x0c\x83\x2b\x09\xb7\xa9\xae\x18\x96\x6e\x11\xc2\xbe\xf0\xf3\x50\x24\xaa\x4b\xba\xfb\xf4\xdb\xc9\xfd\xa9\x48\x69\x9e\x7e\xcd\xbd\x20\x86\x98\x30\x18\x07\x08\x83\xf4\xd6\x03\x8e\x2c\xb5\x94\x90\x61\x8d\xab\xbf\x29\xae\xd5\x0a\x13\x57\xa6\x1d\xbd\xef\x24\x5f\xe4\x5b\x11\x78\x39\xe4\xee\x49\x89\x28\x0b\xc6\x01\xc2\x60\x71\x6f\xee\x47\xd2\x40\x44\x92\xa1\xf4\xce\xd3\xf2\xec\x9f\x23\x77\x58\x3e\x6c\x96\xe9\x4f\xb4\xd3\xc7\x6e\xd9\xee\xbd\x66\x8b\x43\x94\x05\xe3\x00\x61\x58\xdb\x3a\x10\x35\xb1\x7d\xe8\x92\x9e\x6e\x56\x74\xfa\x82\x7e\x6e\x67\x25\xf8\x84\x58\x5b\xbc\x5a\x94\xbf\x64\x59\xee\x20\x48\x15\x51\x16\x8c\x03\xfc\x6a\x4f\xd0\xf3\x9d\xeb\x3b\xcb\xc6\x7f\x8e\x1d\xec\x15\xe0\x56\x29\x4c\xaf\xd6\x19\x7b\x7b\x29\xfc\x3c\x3e\x55\x7f\x5d\x88\xc1\xf3\x13\x51\x16\x8c\x03\x94\x6d\xfe\x20\x6c\xe7\x41\x46\xfa\x8b\x43\xf8\xcf\x67\xc3\xc5\x8a\xe8\xeb\xfb\x7c\xe1\x7d\xc5\x96\x1a\x9e\xaa\xe6\x74\xcc\xbf\xb7\x7e\x21\xc2\x00\xb6\xe5\xbb\x1c\x86\x58\xb9\xd1\x8a\x45\xb2\xcd\x46\x29\x0a\xf1\x70\xe5\xd1\x3f\xce\x23\xbd\x0f\x25\xaf\xb1\xa5\xd7\xbc\xf8\x3c\x2a\xf6\x45\x20\x8c\x16\x31\x61\x30\x0e\x10\x86\xa1\xe9\xab\xdd\x27\x7f\xf0\x8b\xa8\x7e\x3e\xea\xe6\x28\xbe\x89\x95\xef\x95\x35\xcd\x5f\x62\xe3\xc9\xfb\x6c\xab\x04\x25\x47\x78\x09\x51\x16\x8c\x03\x84\x21\x7b\xf6\x73\xab\xe5\xc4\xe8\x86\x61\x58\xed\x29\x5a\x4d\xde\x70\xc2\xeb\xd6\x54\xf1\x7b\xbc\xc9\x96\x59\x9a\x03\xec\xb3\x57\x0c\x11\x65\xc1\x38\x40\x18\x5e\xdb\x31\x96\x6e\x11\x85\xcb\xaf\xce\xd9\xb0\x88\xfd\xb9\x77\x63\xa4\x5b\xb0\xac\xa8\x4b\x21\x9e\xc5\xd4\x2c\x35\x76\x10\xc7\x16\x51\x16\x8c\x03\xfc\x6a\x41\x0a\x27\xea\x9f\x3d\x30\x24\xad\xe9\x07\x38\xa8\x58\x7f\x5c\xc7\x6b\x8e\xa6\x24\x96\xe8\xb9\xaf\xb2\xd1\x92\x08\xc1\xe3\x3a\xbf\x04\x83\x71\x80\xb2\x62\xc7\xef\x54\x75\xd7\xa2\x06\xa3\x63\x75\x92\x0b\xd4\xde\xb4\x6c\xa1\x1b\x3c\xc7\xfb\x59\x78\xeb\xd0\x9d\xd9\x64\xad\x28\xe2\x11\x22\x0c\x60\x9b\xf1\xcb\x61\xe0\xc8\x79\xf4\xf8\x1d\x56\x65\xc2\xc8\x0f\x82\x28\x36\xef\x6e\x9a\xf4\x9e\x4a\x68\xfd\x9a\xbc\xd2\x87\x3d\x9c\x7b\xa3\xbe\xf6\xa9\x88\x09\x83\x71\x80\x30\x24\xda\xd2\x09\x19\x8e\xfb\x6c\x0b\x67\x2a\x6d\x1f\x2d\xf0\x53\x3b\x56\x30\x85\x13\x1a\x35\x18\x8b\xee\xcb\x06\x6a\x0f\x89\x9f\x9f\xcf\xc1\x38\x40\x18\x84\xad\xa2\xb5\x93\x34\x44\x13\x5e\x5c\x9d\x3f\xd2\x0b\x54\x96\x4b\xa5\x69\xf2\x4e\xbb\x71\xe8\x14\xe0\xf6\x6b\xd3\x5e\x71\xd4\x18\x51\x16\x8c\x03\x84\x21\xc7\x6e\xfd\xf5\xd7\x6d\xba\x9d\x6b\x04\x99\x2f\x97\xeb\x6b\xb4\x85\x0d\xf6\x0e\xf8\x3c\xe4\x2c\x6d\x38\x18\xf5\xb9\x27\x59\xcf\x0f\x02\x18\x07\xf8\xd5\x22\x15\xf5\x33\x77\xfb\x5f\xe6\x91\x5a\x36\xd1\x16\x6b\x19\x5a\x45\x39\x48\xfd\x2e\xd5\xd6\x3e\xf9\xbc\x7b\xb3\x41\x29\xd0\xef\x0a\xa2\x2c\x18\x07\x28\x5b\x40\x7e\xa5\xff\x9a\x47\x94\xb0\xb3\x74\x6c\x7f\x81\xfe\xc3\xbb\x01\xbe\x16\x74\x74\x46\xea\xca\xb0\xc6\xc2\x2f\xc6\xd4\x4d\x2b\x88\x30\x80\xdd\x26\x5d\x0e\x43\xbc\xa6\xea\x8f\x14\x02\x99\xfd\x0a\x5f\x25\xf8\xd1\xec\xed\x74\x1b\x72\xb8\xa5\x40\xc5\x15\x9a\x67\xcc\x21\x68\xae\x02\x8b\x92\x88\x09\x83\x71\x80\x30\x24\x64\xb5\x86\xdd\x11\xf8\xb9\xd3\x04\xbd\xa9\xb5\xd7\x55\x23\xe5\xc9\x76\xca\x6f\x13\xc7\xa3\x9c\xf6\xe1\x99\x47\x67\x93\x44\x1b\xa2\x2c\x18\x07\x08\xc3\x23\x21\x65\x88\xc7\x55\xae\x23\x75\x6d\x4e\x22\x54\xe5\x95\x99\xb7\xa5\xf2\xf0\xb3\xb0\x54\xbb\x63\xf9\x17\x2e\x3b\x76\x01\x25\x88\xb2\x60\x1c\x20\x0c\x0a\x34\xcb\x24\xc6\x0f\xb5\x54\x5b\xf0\xca\x6d\x44\xad\x6d\xa3\x8d\x68\x92\x92\x70\x83\xb7\x85\xaf\x72\x9f\x90\x38\x6d\x19\x52\x23\xca\x82\x71\x80\x5f\xed\xee\x51\x9d\x56\x56\x3c\x61\xe7\x9d\xd3\xc0\xef\x11\x96\x93\xf3\x75\xf5\xeb\x71\x06\x35\xbf\x30\xec\xa1\x66\x8d\x66\xf7\x2c\x3d\x11\x65\xc1\x38\x40\x59\xb2\xad\x11\xcf\x2f\x2c\x41\xa8\x9e\x5f\xb3\x52\x56\xcd\xf2\xd6\x33\x4e\x36\xa3\x7e\xbb\xb6\xcf\xef\xf9\xe1\x50\x71\xdc\x4f\xc0\x44\x84\x01\xec\x06\xf6\x72\x18\xf8\x86\xd7\xc3\xcc\x06\x95\xaf\x5b\xf0\x6f\xea\x3e\x46\xe9\x4e\xe1\x21\x0a\xd6\x2a\x55\xb6\x9b\x74\x0b\xbd\x82\x1a\x9c\xf8\xb4\x1c\x31\x61\x30\x0e\x10\x06\xf5\xdf\x9c\xb5\x54\x62\x9d\xe4\x8d\x10\x73\xac\xe9\x62\x5b\x48\xb7\xa5\xa3\x1f\x43\x82\xe0\x0f\x0a\x92\xab\x9c\xdf\x33\xdc\x56\x11\x65\xc1\x38\x40\x18\xfa\xe9\xb8\x19\xef\x11\x40\x7e\x28\x4b\xa9\x12\xd5\x8b\x4f\x7d\x60\xec\x92\x20\x31\xaf\xa6\xe2\x90\x59\x2c\x1f\x16\xde\xf0\x73\x42\x94\x05\xe3\x00\x61\x80\x7d\xce\xa0\x2f\x5b\x57\xfa\x58\xd5\x9c\x36\x95\x13\xca\x87\xfa\x3e\x89\x95\x22\xc6\xaa\x90\xf0\xee\xb2\x40\x51\x6b\x41\xfe\x2d\x44\x59\x30\x0e\xf0\xab\xe1\xf1\x1c\x68\xa7\xb9\xa8\xaa\x58\xdc\x51\xa2\x66\x62\x4a\xac\x69\x95\xe3\x30\x14\x75\x09\xd2\x7b\x8f\x87\xfb\x95\x3a\x84\x54\x06\x51\x16\x8c\x03\x94\x1d\xdc\x2a\x83\x72\x56\x4e\xc7\xe9\x56\xd6\x7e\x9c\xe1\x6e\xf1\xb6\x23\x56\xb6\xf6\xea\xf6\xd5\x33\x2e\x54\xc1\xf2\xd0\x8a\xa1\xf5\x0b\x84\xfc\x67\x4f\x14\x03\xc4\xa0\x7e\x01\x61\x92\x28\x7d\xc0\xe7\x20\xcd\x62\xc7\x78\xee\x1e\x32\x7f\x18\x09\x50\x93\xd3\x03\xd0\xb9\xdd\x55\x8e\xaf\x29\x8f\x70\x0f\xdb\xd7\x94\x65\xfe\xb2\x19\xe1\xfd\xf7\x8f\x5e\x26\x80\x43\x42\x8c\x0d\x95\xee\x5b\x4a\x0f\x8b\x1c\x6e\x9a\xca\xd1\x84\x0b\x47\xa4\x88\xd6\x31\x59\x07\x51\xf7\xad\x60\x9f\xed\xf2\xda\xd5\xff\xfb\x21\xff\x00\x87\x14\x8f\xe6\x8c\xb0\xbd\xf2\x84\x3d\x16\xfe\xa4\x65\xee\x55\xae\x5b\x73\x4c\xfc\x8b\x9d\xe8\xd5\x1e\xa9\xd0\xfb\x36\x59\x21\xab\x01\xff\x9d\xa7\x3d\x60\xc7\xf2\xf2\x92\x24\x78\x6d\x91\xae\xce\x5d\xd7\x63\xf3\xa1\x36\xde\x00\x35\x63\x77\x4c\x92\x0b\xc2\x8d\x67\x7d\x55\x96\x29\xe8\x55\x7a\x70\xd4\x3b\x44\x6c\xc0\x38\xc0\x92\x4c\xb9\xde\x94\x6c\x70\xc5\x6e\xcb\x3d\x62\xc5\xb5\x48\x7f\xfa\xc5\x19\x6a\x08\x6d\x90\xf0\x33\x55\x89\xee\x2b\xc4\x3d\x1e\x83\xe7\x77\xe2\x60\x1c\x60\x49\x7a\x1c\xad\xe4\xd3\x08\x72\x62\xca\x3f\xb9\x45\x9d\x21\x8b\x6b\x7e\xd0\xa8\xc8\xe2\x3a\x38\x00\x5b\xdd\xfe\xbd\x3c\x70\x43\x7b\x13\x51\x16\x8c\x03\x2c\xc9\xd1\x78\xd2\x90\x70\x6e\xbf\xba\x38\x5f\xa9\x4f\x75\x6a\xdb\x47\xb1\x18\xf1\xb2\x0f\x53\xb3\x5a\xe2\xa6\x46\xa4\x9f\xf2\xc9\x0a\x22\xca\x82\x71\x80\xb5\x43\xaf\x6a\xc4\x51\xa4\x2d\x98\xb9\x29\x3b\x5c\xda\x13\xc2\xab\x16\x65\xb2\xc0\x93\x0c\x11\x4f\x8d\x29\x83\x70\xf5\x98\x33\x53\x21\xca\x82\x71\xc0\xb2\x0f\xa9\x8e\xbf\xf9\x9d\xed\x1c\x27\xc8\x9f\x75\xf5\xe6\x5a\xa7\x79\x3f\x21\x0f\xe7\x1a\xec\xf1\x35\x92\x50\x1c\x57\x0e\x9e\x46\x9c\x9f\xc1\x52\x7e\x39\x0c\x15\xa5\x6e\x39\xcb\x53\x5f\xfb\xc6\x12\xd7\xd6\x46\x0f\x92\x3e\xf8\xcc\x57\x86\x34\x07\xb5\xa9\x39\x73\x47\x9a\x4b\x71\xc5\x3f\x45\x4c\x18\x8c\x03\x84\x21\x9d\x04\x4d\x50\xdb\xb7\x4c\xbb\x31\xab\xd4\x11\x97\xab\x6a\x5f\x1a\x5d\xc3\x77\x71\xdf\x3d\x2e\xde\x87\x9d\x90\x19\xe7\x6d\x23\xa2\x2c\x18\x07\x08\x83\x91\x82\x59\x46\xf6\x8e\x92\xc2\x93\x50\x08\x37\xd7\xe3\xdc\xbd\xad\x07\x64\xe4\x43\x75\xd2\xad\x52\x14\xc2\xf8\x98\x9c\xd2\xbe\xe7\xcf\x4f\x40\x38\x40\x18\xae\x8d\xa9\xde\x94\xd9\x5b\x7e\x65\xe8\x9c\x95\xf6\x46\x6c\xca\x43\x20\x9b\x64\xc2\xcd\x22\x71\xa2\x23\xe9\x4d\x69\x62\x87\xf7\xf9\xa3\x3f\x30\x0e\xf0\xab\x09\x48\x4b\x16\x71\x18\x53\x3b\xf0\xda\x05\x2b\x5b\xf5\xcd\x8c\xc3\x3f\x12\xac\x16\xbf\x7f\xcc\xcc\x25\xd5\x2d\x75\xd3\x59\x66\x02\x51\x16\x8c\x03\x94\x95\x45\x0f\xa3\xd7\xa7\x7d\xaf\x30\xd3\xe2\x33\x68\x6b\x90\x7f\x32\xec\xb7\xa3\xad\xbe\xea\xe3\x99\x6c\x9b\x35\x71\xd7\x63\x49\x0b\x11\x06\xb0\xf3\xcf\xe5\x30\xbc\x24\x7e\xc2\x42\xd7\x2e\xb8\x04\xdb\x40\xeb\xc4\x9a\x9a\x7b\xfd\x72\xa5\xbb\xcd\xe3\x48\xc6\x69\x72\xfd\x23\xdb\x2b\xc9\x7b\xdc\x88\x09\x83\x71\x80\x30\xbc\x67\x0d\x19\xa6\x97\xcb\xff\xfd\x66\x6b\x5d\x62\xf9\xc3\x30\x71\x43\xf3\xe1\x7e\x02\xab\xff\x62\x6d\x10\x91\x96\x74\x06\xb3\x05\xa2\x2c\x18\x07\x08\x03\xdf\xea\xd8\x47\xfe\x77\x92\x16\x6b\x4c\x56\x5e\xc9\x1c\xf8\x3c\xfb\x5e\x09\x14\xc5\x13\xee\x7e\x1f\x99\xe6\x46\x32\xee\xba\xdb\x9f\x6f\x2d\x40\x38\x40\x18\x28\xe8\x88\x04\xc3\xcb\x0b\xd0\x3d\x33\xa2\xb6\x19\x5d\xc7\x61\xe3\x59\xb1\x69\x07\x22\xce\xde\x8e\x4d\xef\xfa\xf8\x3e\x9f\x9e\x5f\xac\xc1\x38\xc0\xaf\x96\x5d\x39\xf7\xe6\x7e\x72\x6f\x75\xec\xef\x34\x7f\x9d\x00\xcb\xcc\x37\x9f\xcc\xbc\xc8\xac\x1a\x63\x05\x27\xfb\xbe\x7e\xa2\x32\x3f\xbf\x5f\x06\xe3\x00\x65\x47\x17\x7e\xdd\xec\xa8\x64\xb4\xf8\x82\x9f\xd5\x4f\x2d\xfe\x9c\xf6\x45\x74\x21\xea\xb2\x63\x68\x74\xab\xfd\xd0\x29\xef\x6e\x8b\x33\x22\x0c\x60\x9d\xc8\xcb\x61\x48\x1a\x9d\x80\xf9\x8d\x5b\x4d\xf6\xfc\x90\x3a\xfd\x4e\xfc\xce\x47\x7a\xc4\xae\xaa\x86\x85\x28\x6c\xd8\xd7\xf0\x5d\xce\x06\xe3\x29\x62\xc2\x60\x1c\x20\x0c\x4e\x43\xcf\x0f\xfd\x58\x1e\xed\x93\xbb\xa2\xca\xf5\xd2\x69\x3d\x5e\xf3\xa6\xcf\xe4\x6e\x5e\x25\x50\x12\xf6\xa5\xac\x61\x22\x3f\xdf\x62\x81\x71\x80\x30\xc4\x0c\x9b\x6c\x48\xca\x48\x93\x77\xcd\xe3\x5e\xf7\x5d\x79\x2a\xb4\xf7\xb1\xdf\x35\x2a\x3c\x59\xa6\xf8\xbb\xc2\x3b\x13\x1d\x2b\x11\x44\x59\x30\x0e\x10\x86\x84\x5b\x82\x02\xd7\x94\xa5\x0a\x65\x59\x87\xbe\xfe\xa1\x57\xf6\xc0\x51\x22\x68\x93\x88\x51\xca\xe1\xb0\xbc\x5e\xcb\x48\xeb\xc2\x71\x7e\xd3\x01\xc2\x01\x7e\x35\x2d\xa5\x8d\x34\x71\xbf\xe7\xf2\x73\x62\x25\xb7\x62\x19\x5b\xd8\xfc\xf6\x96\xea\x8b\xd4\x0e\x8a\x85\xb6\x5f\x7d\xfb\xa0\x32\x4a\xe7\x87\xe8\x08\x83\xbd\x79\x76\xb1\x2f\x5d\xa2\xf9\x25\x4c\xec\x80\xb0\x8f\x98\xe9\x26\x15\x86\x15\xfd\x8c\x1b\xf3\x62\x83\x93\xf2\xc3\x7e\xba\x2c\x65\x17\x53\x2a\x8c\x8b\xef\xbc\x98\x4a\x19\x0a\xf3\x61\x39\x69\x4a\x5a\x08\x56\x66\xe2\x35\x71\xab\x2d\xb4\xfd\xf2\x1a\x5a\xf9\xb5\x5f\x87\x55\x6a\xb5\x47\x8b\x0d\xe8\x4b\x83\x55\xbe\xdc\x97\xce\x4e\x69\xb6\xa7\x8b\xde\x5b\x94\x13\xc7\x79\xa9\xff\x61\x85\xf0\xca\xf6\x4b\x5c\x79\xb5\x91\xfa\xd7\xdf\x6c\xfd\x62\x8b\xb0\x2e\xbe\x04\x26\xf8\x86\xf2\x84\x70\xe9\x60\xa2\xfd\x24\xf6\x13\x0e\xe7\x4e\x89\x7d\xa3\xc9\x46\xb8\xa5\x37\x43\x61\x4a\x73\xc3\x3b\x69\x86\x0c\xbf\x46\xe8\x7f\x56\xf3\xff\xf5\xa5\xc5\x95\xaf\xfe\xef\x6d\x58\x85\x18\x34\x6c\x7d\xc9\x79\xf2\xce\xf1\xbd\xf6\x66\x6d\xdc\x3e\x6b\xf5\x68\x7d\xf6\x22\xff\x24\x53\xb1\xf5\x89\x53\x1f\x8a\x97\xff\xba\x31\x2d\x0a\x6c\x4c\xeb\x39\x51\x27\x57\xd8\x7d\x79\xe1\x77\x25\x02\xfb\xfd\xd4\x78\x18\x99\xa2\x8f\xbe\x2a\xd7\xb8\x9f\x2a\x8e\xf7\xf2\xb0\xfb\xde\xc3\x7f\xbd\xd7\x14\xbd\xd4\x98\x2e\x0a\x12\xa0\x08\xbc\x17\x9a\x09\xa9\x9c\xf2\xfa\x13\x1f\x14\x3d\xaf\x4f\xea\x11\xd7\xfc\xe5\xfe\x6f\x8e\xf0\x77\x3f\x67\x02\xb2\xff\xfd\x90\x97\x1a\xd3\xf6\x33\xe8\xb7\xd3\x7d\xe3\x7e\x59\x99\x6a\xe3\xe0\xb5\x29\xa8\x71\x46\xe1\x29\xe7\xcf\xa8\xde\x74\xfe\x8e\x4d\xfa\x49\x86\xe2\xbf\x30\xe4\xa5\xc6\xb4\x30\x91\x9b\xd6\x6f\xab\x16\xa3\x7b\xd1\x0a\x24\x69\x0d\xc9\x3b\x1d\x91\x18\xa8\xa8\x1a\x6e\x9f\x69\x87\x2d\x45\xac\x5a\xa5\x9a\xfe\xfd\x90\x97\x1a\xd3\xac\xb3\xcb\xf5\xdf\xbf\xfc\x78\x6b\x22\x1c\x10\x13\xf0\x24\x90\x1b\x52\xb9\x58\x6a\xdc\xe6\x7f\x56\x71\x56\xaf\x81\xa7\x9c\xd7\xfd\xef\x87\xbc\xd4\x98\x3e\x31\xf5\x59\x98\x36\xd9\x8b\xfd\xfa\xdc\x9e\x0c\x83\x58\x85\x56\x93\xc9\xd3\x8d\x29\x71\x2c\xe3\xf7\x77\x31\xaf\xe7\x25\x5a\x6d\xff\x7e\xc8\x4b\x8d\x69\xe5\xfb\x31\x82\xb1\xed\x55\x5c\x43\x3a\xcc\x01\x67\x9f\x24\x82\x56\xef\xe3\xff\xd4\xcd\xfb\xf3\x8a\xf7\x15\x4e\x20\xa9\x5d\xee\x95\xff\xce\xad\x0a\xd8\x4a\xbc\x7c\x0d\x4a\xc5\x4e\x19\x33\xa9\xa4\x4c\x5f\x91\xb8\x99\x60\x2e\x87\xde\x14\xbe\x95\x0b\xa9\x7b\xe9\x1f\xaf\xc2\x72\x45\x46\x68\xf8\xa6\xda\x79\xab\x17\x84\x03\x5e\x83\xb0\x55\x9c\x22\xa9\x06\x1e\xb0\x2e\xa8\xe5\xf9\xbe\x9f\xbb\xdd\x46\x24\x8d\xb3\x7a\x7f\x3d\xfc\xde\xad\xb5\x77\xfa\x07\xd4\x6f\xcf\xaf\x41\x20\x1c\xe0\x1a\xb4\x9e\x32\x68\xa6\xf7\x68\xcc\x89\xc6\x4c\x9e\xa4\x03\x45\xc4\x45\x74\x36\x4f\xa3\x6b\x16\x56\xca\xe8\xc7\xfe\xe9\xa9\xd1\xd7\x87\x88\xb2\x60\x1c\xe0\x1a\x74\xb3\xbe\x6f\x57\x5f\x90\xf1\x5e\x2d\x26\xb4\xa3\x2b\x1d\x5d\x85\x66\xc7\x70\x32\x2f\x9f\x1b\xb5\x4b\x09\x37\x35\x4b\xeb\xc6\x20\xa2\x2c\x18\x07\x98\xad\x0c\x67\x99\xd9\x89\x14\x55\xf0\xbb\x81\xac\xf9\xe8\xfa\xc0\x8c\x15\x48\xb3\xef\x95\x12\x1f\x7a\xc2\x9c\xad\x77\xa7\xb0\x51\x77\x44\x59\x30\x0e\x70\x69\xbb\xd6\x96\x5a\xee\xdc\x4e\x30\xf8\x01\x9a\x41\x89\xc2\x59\x92\xc5\xcc\x58\x53\xd7\xbc\x74\x65\x06\xea\x3b\xfe\xd2\x9a\xc4\x7e\x01\xb1\x21\x01\x3b\x49\x5e\x0e\x83\xd1\xd0\xb5\x87\xe2\xf2\xfa\x7d\xe6\x6f\xb7\xc7\x94\xa6\x89\x16\x70\xdb\x44\x1e\xb4\x0c\xd0\x4b\xe4\x0b\x4c\x6d\x43\x84\xa0\x1d\xe7\x9b\x7f\x10\x0e\x10\x86\xb9\xa2\x2b\xf2\x99\xb9\x44\x9e\x26\x92\x61\xb7\x34\x65\x1e\x2b\x3e\xa2\x38\x55\xba\xc1\x41\x71\x83\x9a\xf5\xde\xc3\xb7\x18\x7d\xe2\x88\xb2\x60\x1c\xe0\xf0\xb2\x37\xcb\xaa\x9c\x59\x57\x7b\xb9\xd9\xba\xf6\x98\x12\x76\xd4\x27\x3f\x63\x7c\xca\xaf\x85\x92\x90\xab\xcf\x62\xa8\xd5\x48\xc6\x83\x28\x0b\xc6\x01\xc2\x10\xec\xbd\x19\xfd\xf4\xc5\xae\xe0\xc6\xfd\x7d\xa6\xa7\xb0\xc6\xbd\x17\x6f\xd6\x84\xdd\xc7\x2c\xe2\x69\x44\x1a\xd7\x15\x85\x93\xcf\x3b\x0e\x60\x1c\x60\xb6\x4f\x87\x8e\x12\x14\x79\x05\x67\x1f\x68\x78\x1f\x93\x38\x96\xa2\xc4\x0a\xad\x34\xf8\x92\x74\xd4\x51\x14\xbd\x98\x50\xd2\x24\xce\x45\x94\x05\xe3\x80\x5d\xad\x67\xee\xa2\xd7\x9f\x3c\x99\x17\xf1\x35\xb2\x86\xc6\xfe\x4c\xc0\xd5\x15\x65\xfe\xf5\xd8\xb6\x8d\xce\xfb\x30\x9c\x2a\xeb\xa6\x19\x22\x0c\x60\x97\xaf\xcb\x61\xf0\x37\xf5\xa1\x9a\xde\xfa\xaa\xed\x96\x1c\x24\xd2\x71\x47\x22\x0b\x95\x34\x9f\xd9\xe0\x13\xa1\x63\x65\x15\xd3\xcc\x23\xf7\xd7\x68\x88\x09\x83\x71\x80\x30\xa0\xed\x60\x7d\x88\xef\x8e\x79\xbb\xb7\x43\x25\xda\xb4\xf7\x3e\x41\xdd\x91\x68\x81\x8d\x6a\x2c\x2e\xb9\x6c\x2b\xc6\x97\x6f\xe6\xbc\xc5\x09\xc6\x01\x0e\x2f\x2d\x46\x85\x92\xb4\x4d\xe8\x75\xac\x39\xb1\x49\x91\x45\x05\x72\x8e\x8c\x2c\xd2\x81\x71\xbc\x72\x2a\x98\xc9\x0f\x9f\x88\xe6\x6e\x44\x59\x30\x0e\x10\x86\x4e\x97\x09\xfa\x63\xad\xaf\xd1\x6d\x5c\x6b\xae\xe3\xbb\x2b\x6e\x77\x7f\x8f\x74\x64\xee\x7e\x70\x97\xd2\xa3\x15\x52\xa0\xac\x2d\x40\x94\x05\xe3\x00\xb3\xfd\x71\x76\x7c\xe5\xe3\x0f\x72\x27\x5c\x45\xe6\x32\x95\x6f\xd7\x1b\xac\xb5\x58\x8b\x78\x7f\xa9\x4f\x79\xb0\x74\x74\x2d\x58\x07\x64\x22\xca\x82\x71\x80\x30\x30\x5c\x1b\xbc\xe7\xf1\xb1\xe4\x15\x43\x52\x6f\x64\xbd\x2c\xf6\x75\x22\xfa\xb9\x66\xa5\x83\x25\xec\x93\x98\x7b\x9a\x43\xd3\xce\x0e\x88\x30\x80\x6d\x2c\x2e\x87\xe1\x8b\x57\x31\x65\xf0\xbc\xe4\x12\x31\xe4\x66\xb3\xf7\xc0\x59\xde\x51\x5b\x5e\xbb\x53\xc3\x44\x43\x8b\xcc\x92\x13\x41\x72\xad\x32\x62\xc2\x60\x1c\x20\x0c\xbf\x1c\x47\xee\x74\xaf\x12\x6b\x7d\x7d\x76\xc7\xe2\xad\x23\xd9\x57\x8c\x5e\xb2\xf4\x09\x5f\xf4\xd6\x7a\xe5\x03\xb5\x41\x42\xf3\xf3\x67\xd7\x60\x1c\xe0\xf0\xf6\x74\xea\xde\x12\xf2\x75\x63\x49\x22\xbd\x3e\x3e\x10\xae\xcd\xb1\xf7\x51\x0b\xcb\x69\x9a\xd6\x7a\x9b\xd8\xbe\xc4\xe7\xb3\xd0\xf9\x5a\x03\xe3\x00\x61\xe8\xf3\x36\x6c\xc5\x37\x0f\x1f\x0b\x0c\x34\x9d\xf3\x88\xc0\xfe\xb9\x43\x14\x35\x63\xce\x7c\xdb\x81\x21\x6c\xd7\x12\xb6\xba\x96\x83\x28\x0b\xc6\x01\x66\xfb\x65\x9e\x38\x80\x2a\xc2\x69\xde\x96\xcb\xee\x4a\xbd\x38\x61\xfd\x29\xc5\xd6\x5a\xa9\xbe\x70\xc6\xbc\xce\xe8\x5c\x4f\x70\xee\xf9\x13\x2d\x30\x0e\x10\x86\x3f\xb5\x73\xda\x13\x66\x52\x5f\x8e\x8a\x22\x58\x48\xd9\x7e\x04\x3b\xd6\xc9\x75\x72\x54\x07\x29\xda\x3a\x2c\x66\x1b\xa9\x95\x4b\x21\xc2\x00\xb6\xe5\xbb\x1c\x06\x03\xd3\xc2\x96\x4f\x46\x38\x7a\xd6\xe9\xb3\xd6\x9a\xb8\x52\x26\xfa\xc3\xee\x37\x18\x1f\xa0\x1f\x6c\x16\x61\x5a\xc3\x2c\x1e\xa3\x23\x26\x0c\xc6\x01\xc2\x20\xa5\xfd\x9a\x6d\xd0\x96\x9f\x8c\x5f\xd4\xb0\xd0\x64\xf1\x47\x37\x9b\x28\x0f\xfa\x14\x93\x3f\x1f\x23\xc4\xdb\xb5\xf3\x73\x95\x37\xa2\x2c\x18\x07\x38\xbc\x83\xc1\x19\xe2\x3d\x13\x79\xcd\xab\xde\x51\x23\xe8\x2f\x43\x6f\x5c\x75\x7c\x6a\xeb\x69\x27\x4d\xda\x5d\x24\x75\xf0\x93\xb0\xbb\xf6\xfc\x9d\x0a\x10\x0e\x10\x06\xd2\x1b\xc1\x7a\xc2\xdf\x1a\xbc\x44\x3e\x41\x58\xb6\xa4\x15\x1e\xde\x60\x17\xa3\x29\x36\x75\x48\x68\xf4\x40\xc7\x1a\xff\x81\x96\x7e\xfe\x6e\x09\x08\x07\x98\xed\x3e\x1d\x36\x31\x1b\x4f\xbd\x1a\xf5\xd1\xee\x68\x6f\x81\x3e\x05\xf3\xb7\x1b\x04\x53\x10\x85\xcd\x89\xbc\x56\xe6\xe1\x08\x09\x7a\x44\x59\x30\x0e\x10\x06\x17\x2f\x0c\xee\x9e\xfd\xc8\xfd\xab\xd1\x8d\xbe\xa5\x1d\x7d\xda\xd8\xbf\xaa\xb6\xe4\x25\xfe\x50\xaa\x14\x6c\x11\x2d\xb6\x4c\x5e\x47\x84\x01\x6c\x33\x7e\x39\x0c\x27\x4a\xdd\x22\x30\x51\xa6\x91\x6e\xb9\x74\xeb\x8a\x7e\x2c\x8b\x15\x71\xb6\x64\x2b\x0a\x4f\xd6\xb4\x49\xc5\x9a\x9a\x59\xbd\x2e\xc4\x84\xc1\x38\x40\x18\xc8\x43\x29\x85\x09\xe7\x71\xbe\x25\x0a\x87\x48\xd6\x9c\xa0\x11\x2e\xd7\xb0\xd8\x7b\x3e\x0f\x54\x74\xbe\xb3\x7c\xe2\x33\x66\x7e\xfe\xb4\x01\x8c\x03\x1c\x5e\xd8\x3c\xd9\x0b\xa2\xf0\xcc\x8f\xec\xdb\x87\xd8\x13\x3f\x89\x96\x44\xd7\xde\xee\x7d\xab\x91\x9f\xde\xd1\x7f\x4c\xa6\x1d\xc3\x5e\x73\xde\x27\x02\xe1\x00\x61\x28\xf0\xe8\xb8\xed\xb1\x04\x4f\x78\x90\x66\xe1\x2f\xf3\x69\x69\xf4\x63\x4a\x47\xfb\x27\xb1\x2d\x59\x12\xfa\x50\xa3\xd8\x90\xc8\x0c\x44\x59\x30\x0e\x30\x5b\x89\xc4\xc2\x37\x14\xd8\x6a\xfc\xd4\x84\x31\x22\x5b\xe5\xf3\x9f\x2b\xdc\xfb\xbc\x53\xd7\xb6\xe4\xa5\x1a\xa7\xae\x3f\x17\x8a\x55\x41\x94\x05\xe3\x00\x61\xe8\xfc\x56\x7e\x65\xc0\xfa\xfa\xae\x56\x82\x6a\x74\x9a\xa0\x2e\x7b\xf3\x1d\x6b\xfa\x8d\x0d\xd4\x4f\x35\x5c\x83\x2d\xa6\xeb\xc2\x3e\x88\x30\x80\xdd\x26\x5d\x0e\x83\xdd\xf8\x54\xb5\x0c\xbf\x9b\x6a\xaa\x81\xbd\x15\x79\xdd\x91\x78\x67\x53\x39\x8f\xb1\x25\x1e\xfb\x73\x6f\x8c\x72\xfb\x96\xfb\x64\x88\x09\x83\x71\x80\x30\x88\x98\xdf\xff\x79\xcc\x4d\xa3\xfc\x65\x26\xb1\x86\x8d\xb5\x5c\x62\x06\x8b\xc9\x28\x4a\x32\x8d\x17\xcb\x52\x34\xf6\xd8\x75\x8d\x0d\x51\x16\x8c\x03\x1c\x5e\x8c\x02\xd9\xde\xda\x13\x83\x2a\xc2\xc9\x67\x0c\x3f\x21\x14\xcb\xd3\x49\xbe\x3f\x28\x98\x7f\xe9\x4d\x1c\x38\x17\x2b\xa6\xda\x94\x22\xca\x82\x71\x80\x30\x3c\xe3\x6a\x9b\xd9\x32\x18\xc1\xb6\x9c\xed\xf8\x24\xa3\x65\xeb\x57\x7f\x4b\x73\x6f\x80\x34\x59\x64\x96\xbf\x56\x7c\xee\xd9\x62\x1e\xa2\x2c\x18\x07\x98\x2d\x97\xf0\xfd\x67\xb4\xf5\x41\xb6\x67\xf9\x4e\x8a\x4d\x3c\x9c\x38\xc9\xd3\xf4\x8f\xaf\x4f\xe0\x77\x76\x56\xb9\x79\x1a\xdb\x30\xd4\x23\xca\x82\x71\x80\x30\xf0\x3c\x52\x5f\x0f\xbb\x66\xff\xd0\x02\x85\xb3\x5a\xa5\x23\xce\x9e\x5a\x85\x8d\xe1\xe3\xb7\xe6\x5c\x1f\x1e\xbf\xb9\x44\xe3\x4e\x18\x22\x0c\x60\x37\xb0\x97\xc3\x20\x98\x3a\x44\xaf\x25\xad\x9d\x57\x2f\x2f\x11\x55\x12\x9b\x79\xc5\x42\x3d\x20\x68\xa6\xdd\x96\xe7\x51\x5a\x7b\xbb\x90\x51\xc5\x79\xf3\x14\x8c\x03\x84\xc1\xde\x3f\xa2\x34\x65\xe5\xcd\x24\x09\x7f\x20\xed\xb6\x56\x46\x7c\x0b\xfc\x59\xff\x72\x4e\xf0\xc3\x5c\x79\x3c\x57\x4a\x9d\x2f\x52\x88\xb2\x60\x1c\xe0\xf0\x7e\xb5\x81\x4b\x33\x96\x4f\xba\x1d\xce\x9e\x4e\xe2\x37\x72\x38\x19\xa4\xa7\x77\x98\xeb\x24\xd8\xaf\x49\xe3\x56\x96\x08\xdb\x62\x22\xca\x82\x71\x80\x30\x58\x0f\x12\xdf\x0d\xed\x64\xdc\x46\xcd\x90\x0e\x9d\x79\xc6\x4c\xdb\xf1\x75\xaf\xad\x55\x5a\x40\x9c\x22\xa1\x2c\x81\x89\x97\xe6\x25\xa2\x2c\x18\x07\x98\x6d\x45\xc5\x8d\xcc\x8d\xb2\x61\x03\xce\x32\x3a\x3b\xbb\xc3\xa2\xfd\xe4\xf9\xb8\x20\xdd\x58\x11\x96\xdc\x80\x28\xbe\x70\xcb\xd8\xf5\xf3\xa6\x12\x08\x07\x08\x43\xac\x97\xa2\x44\x5a\xf3\x3c\x1a\x85\x58\x76\x9e\xc4\xb5\x79\x6a\xcc\x58\xd2\xf2\x4c\xc9\x12\xcf\xc0\xf1\xdb\x3e\x77\x72\x4f\x6e\x9e\x37\xa6\xc1\x1e\x29\xfe\x4f\x63\x5a\xf4\x52\x63\xfa\x39\xaf\x1e\x43\xe6\x7d\xe5\xc0\xcc\x6e\x94\x7d\xa1\x85\x3d\x42\x69\x99\xcf\x7a\x77\xaa\x0f\xb7\xf6\x19\xf5\x76\xb3\x95\x8d\x1b\xfe\xfd\xa3\x97\x4b\x8d\x69\x14\xac\x41\x0f\x29\x66\x57\x22\xac\xc5\x68\xd9\xd6\xaf\xfc\x71\x38\x6e\xf3\x44\x69\x6f\xb2\x89\x23\x2d\xa3\x13\x99\x6d\xfa\x44\xff\xfd\x90\x97\x1a\xd3\xb7\x34\x37\x2c\x43\xc7\xb6\x31\x68\xd2\x9e\x57\x97\x84\x35\x8f\x9b\xe1\x48\x94\x3e\xd7\xe2\x7a\xf1\x2a\xf4\xeb\xcf\x79\x95\xc0\x77\xff\x9d\xa7\x3d\x60\xc7\xf2\xf2\x92\x54\x3d\x1e\x3b\x26\x2d\x91\xdb\xdb\xb8\xaf\x24\x85\x3f\xd5\x75\xaf\x61\x75\xc3\xe5\x8f\xe2\x08\x3f\xbe\x5e\x23\xf3\x29\x6d\xb8\x3c\x22\x36\x60\x1c\x60\x49\x0a\x9a\x36\x31\x28\xec\xbf\x47\xa3\x9d\xb6\x60\x5e\x8f\xcd\x35\xc4\x39\xda\x6c\xd9\xb6\xc4\x7f\x96\x05\xf5\xe4\xd1\xe6\x52\x9a\x3c\x5f\xe9\x20\x1c\x20\xe4\xb3\x72\xba\x2e\x57\xd6\x8c\x6b\x33\x8e\x7b\x6b\x7e\x72\xfd\xf2\x30\x56\x84\x31\x1e\x97\x5c\xcd\x7b\xb1\xd8\x17\xe2\xf3\x9a\xfa\xc3\xf9\xd7\x0d\x20\x1c\x60\x49\x5a\x18\x59\xde\xe1\xec\x33\xe6\x6b\xb5\xd7\x99\x84\x7c\x43\xfb\x9c\x72\xd3\xe1\xa7\x44\x7a\xe6\x3c\x3a\x16\x85\x0b\xb9\xda\x87\xdd\xf3\xd7\x56\x41\x38\xc0\x6c\xad\xde\x92\x13\x46\x7f\xb6\x79\xb0\xce\x2c\xcd\xcb\xe7\x77\xfb\x81\xc5\xa8\xd1\x3d\xb7\x45\x42\x8e\xb2\x6c\xaf\x91\x28\x4c\xc8\x27\x44\x59\x30\x0e\xb0\x24\xe9\x18\x2b\x6f\xcf\x7f\x73\x61\xe8\x73\xd8\x32\x67\x63\x69\x8e\xc2\xe4\x53\x23\x25\x95\x0b\x64\xde\xb5\xfd\xdd\x47\x2a\x2d\x60\x8b\x38\x3f\x83\xa5\xfc\x72\x18\xde\x7c\x2c\x52\x1d\xcc\x9f\xe8\x2b\xac\xb9\x12\x8f\x47\xd7\xb3\xc7\x9f\xc0\xa9\x18\x61\xbe\xdf\x0d\xc5\xca\x8a\x59\x29\xb5\x89\x47\x4c\x18\x8c\x03\x84\x61\xf9\x86\xe6\x48\xfc\x38\x5e\xdf\xf5\x2b\x0c\x28\x39\x55\xde\x61\x7d\x8c\x16\xa5\x2b\xce\xdd\x6a\xf7\xd3\x63\xf7\xfc\xf0\x24\x02\x10\x65\xc1\x38\xc0\xe1\xc5\x7f\x3e\xa8\xe2\xa3\x76\x65\x4c\x3e\xd6\xb7\x70\xf6\xd5\x51\xe9\x3a\xe5\xde\xcc\x0b\x81\xb0\xba\xb1\x4e\xd5\xb5\x2e\xf6\xc7\x27\x88\xb2\x60\x1c\x20\x0c\x4b\x02\x72\xce\xb7\x59\x5c\xc2\x06\x9e\x4e\x90\xdc\xb8\x1a\xd1\x4d\x14\x74\xc0\x80\xe5\x85\x1d\x6c\x90\x56\x8e\xb6\x4d\xb5\xdc\x8c\x28\x0b\xc6\x01\x66\xfb\xfa\xcc\xf2\xc5\xcd\x2d\x8a\x10\x0a\x97\xea\x6a\x82\x7c\x33\x61\x06\x9e\x86\x4a\xfa\xc7\xab\x6e\x64\x07\x43\xa4\xae\x6a\x77\xcf\x1f\x54\x82\x71\x80\x30\xd0\xb0\x61\xfc\x1e\xbd\x27\x3d\xf8\xf9\xd1\xb1\x01\x3f\xa1\x12\x87\xc5\xee\xf4\x40\xf1\xa7\xaf\x9a\xee\xc7\x73\x92\x49\x5b\x8f\x3b\xce\x3f\x43\x00\x39\xff\x5c\x0e\xc3\xd8\x6a\xd1\xc3\x55\x9c\x35\x7c\x47\x83\xf8\x81\xda\x81\x2d\x85\x20\x7a\xe1\x76\x79\x8b\x9c\xe7\x31\x27\x7d\x5e\x49\x0f\x43\xcc\x10\x13\x06\xe3\x00\x61\x08\x51\xf3\x2f\x79\x42\xee\x10\xca\x75\x2b\xc0\xd7\xf9\x81\xef\x1d\x9f\xca\x8c\x76\x9c\x5b\x71\xfb\x49\x72\x5f\x36\x50\x61\x0d\x95\x88\xb2\x60\x1c\xe0\xf0\x3a\xeb\xc3\xcc\xc7\xa6\xaf\x5d\x1b\xa5\xfe\xbd\xc5\x88\x13\x40\xde\xb7\xc3\x95\xfe\x3e\x11\x96\x36\xc1\x45\xe1\x80\x4f\xa6\x2d\x81\x28\x0b\xc6\x01\xc2\x10\x9f\xbc\xa9\xff\xe3\x3a\xad\xb8\x7e\xc0\x0d\xc3\x67\xc2\x2d\xd6\x2e\xf4\x92\x4c\x16\x61\x3f\xa4\x93\x6a\x99\x9a\xbc\xdf\xec\x64\x9f\xbf\x57\x09\xc2\x01\x66\xbb\xa6\xd5\xf2\x32\x66\xfb\x81\x12\x07\x6a\x93\xad\x85\xa2\xec\xbd\xc7\x01\xa6\x4d\xa7\x3b\x1c\xac\xa7\x23\x1f\x35\x04\x88\xa2\xcf\x9f\x72\x80\x71\xc0\xe7\xc0\xf3\x52\x10\xd9\xf7\xcf\x70\x3e\xa7\xfa\x17\x47\x6e\x1b\x95\xd9\x06\xdd\x8b\xaf\x54\x49\x16\xc1\x78\x1f\x4f\x9e\x4e\xd0\xb6\x85\x08\x03\x58\x2b\xf2\x72\x18\xe0\x43\x44\x5d\x53\x2b\x85\xc9\x7c\x87\xdb\xdb\x52\x4f\xf4\x97\x87\x7b\xc7\x22\xf0\x79\xba\xd7\x08\x99\x34\x4b\xe7\x08\xc3\x58\x11\x13\x06\xe3\x00\x61\x38\x53\xea\x8c\xae\x8b\x28\x16\x53\x28\xb8\x41\x22\xda\x31\xe6\x5a\x3c\xb9\x2a\x3f\x9c\xb4\x1b\xc9\x42\x76\x5d\xeb\xb3\xb8\xea\xf9\x5b\x0a\x60\x1c\xe0\xf0\x72\x68\xa2\x98\x72\xdd\xe9\x7c\xe6\x40\x17\xcb\x9a\x19\xbc\xaf\x98\xee\xe9\xd7\x50\xd2\xaf\x33\x33\x7d\xaf\x8a\x52\xc1\x00\x53\xfb\xfc\xd5\x68\x10\x0e\x10\x86\x15\x9c\xb8\x5b\x42\x3c\xcd\xf7\x6d\x5a\x59\x9a\x13\x18\x54\x2c\x1b\x48\xa5\xb2\xad\x3a\x3d\x16\x7d\x29\xd5\xa0\x55\xdc\x52\xe7\xdf\xa4\x80\x71\x80\xd9\xa2\xa1\x64\x2d\xeb\x72\xe6\x3d\xcd\xd4\x08\x35\x0c\x5b\x2e\x67\x37\x5f\x20\x90\x76\x2f\xe6\x99\xa6\x19\x94\xb7\xe4\x7a\xcd\xa0\x73\xde\x98\x06\xfb\x3f\x27\x17\x1b\xd3\x41\x38\x23\xe4\x55\xd0\x92\xa7\x4d\xd8\x42\xcb\x07\xe3\x4d\xac\x6a\x4f\x49\xab\x05\x36\x7e\xd8\xdc\x50\x44\xbd\xaa\x65\x4d\x71\xf1\xdf\x26\xa0\x5f\x25\x5f\xc5\xda\xc9\x73\xd9\x37\xc3\x66\x1c\x0b\xed\x7e\x80\xf5\xce\xbc\x0c\xde\x28\x11\x4c\x70\xd7\x89\x89\x80\x81\xb4\x17\xd0\x98\x06\xab\x7c\xb9\x31\x3d\xf5\x7e\x8b\xac\x48\xbe\xb4\x7a\x99\x9f\xfc\x57\xfe\x33\xf9\x15\x15\xde\x85\x6a\x5e\x7f\x0c\x66\xec\xb5\xad\x39\x37\xe9\x10\x92\x0b\xe8\x47\xe9\x36\x0c\x7d\xe6\xcc\xe0\xd6\xa8\x5d\x9d\xe1\x5e\x76\x16\x6d\x2b\x1f\x43\xf9\x23\x35\x8d\x80\x07\x36\x54\x1d\x1d\x2e\x84\xe7\x8d\x69\xb0\x9a\xff\xd3\x98\x8e\x06\x34\xa6\x69\xac\x06\x03\xd7\x24\xbe\x84\x17\x38\xae\x07\x75\xb9\xa7\x48\xf8\x70\xa6\xcf\xc9\x3c\x0d\x90\xa1\xd5\xa6\x4b\xc2\x8f\xa6\x7a\xf0\xaf\x1b\xd3\x7e\xc0\xc6\x34\xa9\x04\xc4\x3f\x2f\xb9\x99\xfe\x10\xea\xd9\xa7\xa0\xeb\x44\xb7\xaa\x8e\x59\xa0\xe1\x2c\xe3\xe6\xf5\x9e\x10\x15\xe7\x4c\xa7\xef\x5f\xef\x35\xfd\x2e\x35\xa6\x3f\x77\x17\x2d\xb2\xf9\x59\xa6\x27\x61\x73\xf4\xf7\x59\x28\x3d\x56\xdd\x5a\x48\x26\xee\xa4\xda\x7f\x42\x9f\xb7\x5a\x63\x40\x12\xf7\xef\x87\xbc\xd4\x98\x7e\xcd\x7e\x12\xda\x4a\x72\x3f\xbe\x88\xa6\xf6\x09\x46\xc1\xf6\x21\xce\x9d\xd8\x8d\x2b\x4b\x1b\xdb\xa6\x04\xd7\x5f\x2f\xd3\xbb\xcf\xfe\xfb\x21\x2f\x35\xa6\x97\x71\x6e\x4b\xdf\xaf\xc3\x3c\xc0\xcc\x4c\xd4\xac\x42\x9b\x8f\x2f\xf8\x2c\x54\xf2\xf8\xd5\x73\x2a\x58\x6b\x8a\x9e\xb7\x3e\x0d\xf9\xbf\x1f\xf2\x52\x63\x7a\x8d\x67\x42\x9c\xc9\xf9\xa7\xe9\x8a\xbb\x3d\x51\xc8\x33\x6d\xc9\xa9\x17\x4f\xda\x4f\x53\xb8\x8e\x96\x88\xb1\x31\x0a\x7f\x41\x7f\xff\xfb\x21\x2f\x35\xa6\x85\x3b\x2d\x33\xab\x60\x31\x94\x5a\x45\x26\x06\x1a\xf9\x9b\xf7\xf2\xae\x95\xbb\xa0\xbd\xa6\x5f\x92\x41\xa9\xbb\xf1\xf5\xfd\x8f\xe2\x7f\x3f\xe4\xa5\xc6\x74\xc2\x15\xb6\x82\xee\xa4\x50\xca\xc9\xa5\xd2\x63\x63\x1b\x95\x9f\x6e\x14\x47\xee\xfa\xb6\xdf\x09\x9b\x35\x7c\x7a\x9e\x13\xd7\xd7\xfe\x77\x6e\x55\xc0\x56\xe2\xe5\x6b\x90\xee\xd4\x28\xe6\x8c\x6a\xba\x01\xfc\x69\xd4\xb2\x56\xcd\x70\x66\x7e\xaa\x7d\xa2\x24\xd6\xa1\x7d\xc4\x64\x90\x68\xd8\xf6\xfb\xf3\x7b\x0a\x30\x0e\x70\x0d\x1a\x5e\x90\x2a\xf2\x1e\x0b\x7f\xe3\xc0\x27\xc8\x30\x69\x6d\x70\x98\xfd\x2b\x46\x9d\x58\x7b\x51\x70\xf9\x88\x8a\xae\xaa\x30\xef\xfc\x1a\x04\xc6\x01\xbf\x98\x6e\xa7\xfc\xc3\xb9\x13\x6c\xd5\xde\xd1\x96\x71\xef\xdb\xba\xc0\x57\x0f\x42\xc9\xb2\x4f\x0a\x34\xa5\xfc\x3c\xb1\x1e\xb4\xbe\x5f\xcf\xdb\xe8\x20\x1c\xe0\x1a\x14\x64\xcf\x39\x9f\xc9\xbf\x78\x22\x13\xd0\x70\x1a\xf6\x8a\xd6\xa9\x21\x97\x07\x5f\xb1\x98\x96\xdb\xd7\x2f\x9d\xfd\xf8\x6e\xff\x79\x23\x03\x8c\x0b\x10\x23\xbc\x58\x96\x88\x78\xd6\x36\x76\x75\xfb\xfe\x66\xa4\x6d\x57\x3f\xac\x8d\x62\xdf\x2e\xeb\x86\x56\x51\x96\x04\x24\x77\x90\xc1\x3e\xdc\xf5\xfc\x43\x0f\x30\x2e\x40\x0c\xed\x7f\x7d\xe8\x01\x6d\x4d\x86\x3c\x2c\x6d\x55\x4a\xd0\x92\x1f\x52\x24\xe1\x78\x64\x2d\x1f\xd6\x19\x6c\x38\x8d\xc1\x1a\x4d\xab\x4c\x98\xad\x8a\xd8\x90\x80\x9d\x24\x2f\x87\x41\x31\x8a\x41\x6e\x13\xf5\x18\x93\x2f\x90\x64\xee\xea\x6a\x15\xec\x7a\x58\xeb\xad\x25\x56\xfc\xd5\xb6\x67\x4b\xbb\x16\xdf\xa7\xce\x7b\xb2\x60\x1c\x20\x0c\x3f\x38\x61\xed\x34\x83\x16\xb5\xb4\x52\x0f\xeb\xda\xf2\xcf\x5a\x06\x58\x2d\x4e\xae\xe3\x34\x52\xd3\x6c\x9b\x5f\xcf\x34\x18\x3f\x0f\x03\x18\x07\x08\x83\x3a\xb1\x78\xcc\xbe\x2d\xf5\x6f\xd3\x07\xfa\xc2\x9d\x99\x1d\xaf\x30\x5a\x0e\xa3\xec\x29\x76\x74\xa9\xc3\xd3\x74\xd4\x7f\x29\x32\x9f\x7f\x3a\x01\xc2\x01\xc2\x50\x11\xa5\x25\xc8\x72\x5b\x20\xb5\xb8\xc3\x42\xb2\x74\x96\x86\xb3\xd9\x2a\xf1\x19\xdf\x9b\x9f\x83\xea\xaf\x38\xc6\xd1\x8f\xf7\xcf\xdb\x4f\x60\x1c\x20\x0c\x86\x44\x22\xfa\x7d\x62\xe6\x13\x41\x32\x5b\x85\x90\x17\x0f\x9e\xdf\xb4\xb5\x2f\x66\xd3\x6f\x50\xb7\x15\xc3\x1c\xdb\xe8\x98\x0e\x42\x94\x05\xe3\x00\x61\x38\xb9\xd6\xbb\x39\xca\x83\x72\xf7\x94\x53\xe7\xd6\x29\x71\x82\x7f\xee\xba\xfc\x09\x7e\x1e\xd7\x69\xcd\xe7\x6b\xa5\xdf\x3d\x29\x4d\x10\x61\x00\xbb\x7c\x5d\x0e\x83\xbb\xcd\x97\x74\xcb\xa7\x67\x57\x48\x8b\x5b\x0f\x86\x85\xec\xdb\x3e\x39\x54\x5a\xd9\xe7\xa8\xc7\x04\x95\x2e\x17\xb7\xbd\x38\xda\x41\x4c\x18\x8c\x03\x84\x81\xb5\xa1\xe8\xcd\xac\x40\xc1\x0e\x35\xfa\x55\x33\xa1\xc1\xbe\x06\xd2\x03\x8b\x45\xbd\x8d\x22\x06\x82\x8c\x21\x0a\xdf\x17\x57\xce\x9f\x06\x83\x71\x80\x30\xd8\xb5\x61\xed\xa9\x9b\xe4\x0a\x7e\xbe\x73\x9b\x91\x82\xb9\x6c\xc2\x97\x2a\xbb\xe4\xc3\xc8\x58\x52\xa7\x03\xb5\x74\x25\xef\xe8\xb5\xf3\x47\xe2\x20\x1c\x20\x0c\x32\xb9\x2e\x1f\xe0\x8b\x57\x3b\xcf\x6c\x8e\xe8\xc6\x22\x12\xaa\xad\x4a\x16\xd9\x25\x6c\xcf\x4e\xbb\x1b\x68\x0f\xe0\xad\x29\xe7\x6d\x17\x30\x0e\x10\x06\x16\x69\xdc\x51\xb3\x87\x1f\xba\x84\xf2\x2b\x0d\xf9\x84\xae\xc2\x76\x5c\x4e\xe1\x66\xc9\x6a\x9a\x2f\x84\x0d\x8a\x66\xc2\x58\xf6\x10\x65\xc1\x38\x40\x18\xb0\xb5\x64\xa9\x1c\x58\xd3\xcd\xd1\xaf\x84\x55\x8d\x6b\xc2\x04\xf8\xd6\xae\xb2\xd1\xc5\x5a\x86\xaf\x36\xd0\xb7\x34\xb9\xdc\xed\x42\x84\x01\x6c\x63\x71\x39\x0c\xbd\xc6\x74\xb2\x6a\x33\xea\xce\x4a\x26\x39\xb5\x57\x25\x4d\x6e\x2f\xca\x09\xd5\x89\xff\x94\xb8\x26\x45\x59\x60\x45\x62\x96\x7d\xfe\xaf\x2a\xc0\x38\x60\xfb\x29\xc2\x83\x2e\x73\xe8\x3b\xa7\xd2\x2f\x77\x9b\x1e\xd8\x66\x7b\x5a\x92\xf1\x8d\xc9\xfc\x74\xd9\x1f\x86\xca\x5a\x03\xd3\xdf\x5d\xcf\xdb\x4f\x20\x1c\x20\x0c\xb5\xea\x0a\x4d\x0d\x32\xcd\x4f\x43\x35\x9a\xf2\x2d\x64\xcd\x1c\x6c\x53\x24\x29\x9e\xaf\x2a\xf6\x3d\x20\x22\xd3\xca\xe8\x9e\x5d\x44\x94\x05\xe3\x00\x61\xa8\x7b\x9f\x1c\x9a\x16\x2a\x37\x37\xf5\xa4\x86\xd4\x7f\x4e\x4f\x46\xfa\x7d\x44\x7d\x11\x61\xa6\xb5\x6a\x3b\x5a\x98\xf4\xc8\xe3\xf3\xb7\xeb\xc1\x38\x40\x18\xd2\xdf\xb9\x48\x2d\x1f\x5b\xc9\xaf\x30\x52\x68\xa0\xba\x87\xfb\x8f\x7d\x59\x13\x16\x12\x12\x66\x36\x26\x73\x26\xfe\x23\xeb\x76\xfe\xc5\x34\x18\x07\x08\xc3\x9f\x3a\xb2\x67\xa9\x8a\xdf\xbd\x8e\x7c\x5f\xae\x2d\x07\x2a\xa8\xb6\xe0\x5f\x61\x69\xd0\x65\xa2\xda\x7d\x41\xba\xef\xf8\xcb\xfe\xfc\x32\x01\xb6\xe5\xbb\x1c\x86\xd2\xae\xc1\x96\xaf\x5b\x92\xd4\x1a\xa9\xf5\xb3\x28\xc3\x85\x7e\x4b\x7e\x09\xf9\xaf\x24\xcd\x6e\x10\x08\xcf\xb9\xff\xc0\xa6\x3f\xef\x13\x81\x71\x80\x30\xd8\x95\x10\xf5\xae\xae\x7e\xc0\xac\xd3\xd1\x2b\x7b\x92\xa2\xe3\x83\xc1\x95\xa0\xb8\xfa\xba\x54\x86\x8f\xd9\x3a\xcd\xfd\x88\xb0\xee\x7c\x09\x83\x70\x80\x30\x94\xfa\x19\x51\xbe\x3d\x15\x0c\x18\xfa\x78\x57\x7e\x40\x3e\x89\xa5\xc4\x07\xab\xd6\xeb\x65\x6a\xb4\x7d\xa3\xdd\xfa\x63\x8b\x12\xb7\xf3\xd9\x82\x70\x80\x30\x18\x7b\x4a\xd3\xdd\xc3\x10\x7a\xc9\x93\x12\x73\x14\x15\xe9\x4d\xef\xf2\xb1\xe7\x79\x09\x95\x2b\xfd\xcb\x79\xe1\xbd\x6f\x06\x03\xe7\x8d\x0c\x30\x0e\x10\x86\x05\x26\x23\xd6\xd8\xa3\x9d\x50\xe6\x31\x46\x19\x0f\x47\xca\x00\x27\xfd\xb2\x8a\x9d\x6e\x8d\xe9\x23\xa1\xb4\x8c\xc5\x72\xa2\x7d\x44\x59\x30\x0e\x10\x86\xf5\xc7\x3f\xc8\x5c\xd4\xff\x50\x0d\x2b\x13\xe0\xde\xfc\xdd\x5d\xf8\x85\xf6\x06\xb5\x45\x8f\x7c\xb7\x17\x75\xc1\x91\x67\x38\x45\x33\x22\x0c\x60\x9b\xf1\xcb\x61\x88\xdc\xfd\x39\x6d\x3f\x8a\xad\xe1\x13\x95\x60\x93\x6e\x4d\xa2\xe9\x6b\x4f\x8b\x32\x57\x89\xdd\xbc\x11\x25\x1e\xeb\x27\x8c\x31\x72\xfe\x55\x2f\x08\x07\x08\x43\x90\x1d\xd9\x23\x17\x7b\x73\x26\x4b\x33\xf8\xe7\xdb\xb1\x0b\x32\xf7\xe1\x5b\xb1\x67\xdf\x87\x2c\x85\x94\x04\x8b\x2c\x03\x1d\x3b\xcf\xb7\x64\x20\x1c\x20\x0c\x24\x0e\x8e\xdf\xba\x9e\x11\x92\xfa\xe4\x0b\xd9\x11\x6c\xe0\xc0\x9d\x97\xb3\x53\xee\xd4\x8a\xa0\xf5\xb6\xaf\xd5\x12\x16\xf0\x3e\x41\x94\x05\xe3\x00\x61\x48\x23\x4a\x7d\x05\xc1\xc2\xb9\x76\x46\xf2\x49\x03\x55\x26\xea\x51\xa9\x5a\x8c\xfa\xae\x27\x26\x69\x28\x8d\xbe\xdb\xa6\x61\xe5\xf9\xa3\x27\x30\x0e\x10\x86\xef\xaa\xed\xe9\x8d\xb7\x88\x44\xd3\x92\x38\xa6\xaf\xdb\x47\x7f\xbf\x23\x81\x77\x66\x2e\x2b\x33\xf4\x53\x1f\xe3\x36\xbf\x68\x87\x1c\xa2\x2c\x18\x07\x08\x83\x61\xfc\x66\x5d\x9f\x10\xa7\x59\xfa\x6d\xa2\xaf\xbb\xce\x53\x8b\x0f\xa1\x1a\x38\x41\xef\xef\x46\xbf\x95\xdc\xf6\x28\x51\xd8\xfa\x74\xfe\xca\x0a\xc8\x6d\xd2\xe5\x30\x50\xec\xe5\x3d\x38\x49\x58\x2d\x1a\x4f\x66\xf0\x14\x63\x8a\xb4\x2c\x3e\x0e\xe2\x13\xcd\x90\xf9\xee\xa9\x5c\xf6\x94\xd1\xa2\x57\xef\xfc\x93\x13\x10\x0e\x10\x06\x51\xd6\xe7\xfe\x4a\x84\x2d\x75\x7d\x55\x6e\x58\x3c\x7c\x3b\xf5\xcc\xea\x82\x2e\x05\xa8\x06\xa1\x1f\x31\xb4\xbb\xb4\xea\x6c\x75\x11\x65\xc1\x38\x40\x18\x34\x7b\xcf\xdc\xda\x47\x50\x4e\x64\x6e\x7a\xb4\xdb\xf9\xe5\x1f\x10\x46\x2f\xeb\x94\x47\x7f\x89\xd5\x23\x08\x48\x3d\xdd\x4b\x4a\x46\x94\x05\xe3\x00\x61\xc8\x7e\xbe\x9c\xb4\x02\x7f\xc7\x49\xcb\x81\x46\x35\xb4\xda\x62\x47\xd2\xa6\x2c\xe5\x2f\x74\xe5\x03\x56\xc2\xfc\x28\xe3\x13\x57\xa6\xf3\x0f\x64\x40\x38\x40\x18\x8c\xd4\x6f\x8c\xee\x7e\x6c\x67\xd8\x39\x6e\x38\x21\x8d\xdf\xbb\x72\x0a\xed\xcd\x78\x90\x27\xc1\xe1\x54\xf7\xee\x6d\x9a\x55\xdb\xc1\xf9\x5b\xa3\x20\x1c\x20\x0c\x2f\x4e\x42\xfb\x44\x6c\x2b\x1d\x87\xee\x47\x44\x97\x0d\xd6\x3b\x1b\x68\x16\x90\x60\xbb\x7c\x87\xbf\x6c\x21\x9d\x10\x67\x28\xda\x3d\xff\x7c\x1e\xe4\x06\xf6\xff\xf3\xfe\x52\x42\xbd\xd5\x17\x87\x55\xfa\xc0\x69\xeb\x97\x3f\xa7\x98\x36\x34\x66\xbd\x66\xc4\x87\xe8\x6f\xe6\x7f\x4d\x4a\xa1\xff\x5c\x77\xfe\x7f\x4b\xc0\x38\x40\x18\x34\x7f\x3d\x55\x4e\x1a\x98\x36\x7b\xaf\x16\x6e\xae\x23\x98\x9a\x91\x79\x42\x33\x3b\xb6\x17\xf6\xe0\xce\x09\x77\xc0\x4c\x54\x0e\xf4\xfc\x57\x03\xe1\x00\x61\x48\x5f\x25\x0b\x33\x43\x19\xd6\x98\x5b\x27\x48\x95\x5f\xbe\x1b\x9b\x15\x35\x60\xdc\xbe\xbc\x67\x7f\xd8\x45\x57\xfe\xbe\x20\xea\xfc\xcc\x00\xc6\x01\xc2\x70\xcb\xd4\xd1\x4f\x63\xab\x83\xbf\x99\xe9\xa4\x7f\xb3\xee\x76\xc1\xd9\xba\xae\xe0\x12\xea\x1b\x9d\xb4\xc1\xd8\xc9\x79\x66\x89\xf3\xfb\x6b\x30\x0e\x10\x86\xdc\xe0\xfe\x9f\x2c\x61\x4e\x94\xb3\x25\x58\x68\xfc\x45\xb6\x79\xdb\xfa\x4e\x2a\x6a\x4d\x2f\x07\xc4\xad\xd3\x93\x35\xd9\xc7\xcf\xf7\x0c\x60\x1c\x20\x0c\x26\xc6\xd8\x42\x9a\x3a\x7f\x16\xed\x3b\x4e\xfc\xc9\x3d\x8b\xcc\x4a\x06\xd7\xc8\x5f\x38\xbf\x69\xd3\xe9\xab\xa4\x2e\xe6\xfd\x63\x7e\xde\x98\x06\x7b\xa4\xf8\x3f\x8d\x69\xbf\x4b\x8d\x69\x5e\x41\xdb\x62\xb3\xde\x3c\xd8\x8f\x2f\xfd\x27\xa1\xf1\x41\x07\x95\x6a\x77\xaa\x1e\x7d\x75\x3f\x4b\x5f\xc7\x79\x78\x33\xfe\x5d\xff\xbf\x7f\xf4\x72\xa9\x31\x2d\xec\x4e\x89\x4b\x3f\x2b\x64\x4b\x7f\x5b\x89\xcc\x7e\xfa\xe9\xa7\x42\x8d\x1b\xbb\x58\x69\x47\xd7\xa1\x83\x36\x2b\x61\x5d\xa7\xc2\xff\x7e\xc8\x4b\x8d\xe9\x3f\xb7\x79\x22\x14\xde\x2f\xdd\xa4\xc2\xf9\xe0\x45\x7f\x1c\xb0\xf2\xd6\x61\x62\x07\x87\xc7\xcb\xbc\x7d\xd1\x4f\xe1\x79\xd0\xad\xa8\xff\xce\xd3\x1e\xb0\x63\xf9\xff\xd9\xc6\xab\x4c\x7d\x27\x13\x79\xe0\x3e\xfd\xfa\xb1\xab\x08\x69\xe2\x64\x41\xbb\xed\xa1\x4b\xa3\x94\x8f\x13\x5b\x1b\x99\xce\x2c\xf1\xf9\xbd\x2d\x18\x07\x58\x92\x6f\xc8\xe1\xaa\x5b\x81\xea\x1a\xbd\xab\xe3\xf8\x1c\x72\x0f\xf1\x4b\x3c\xba\x56\x08\x4d\xd6\x77\xed\x4c\x28\xa8\xe4\x53\xcf\x12\xce\x5b\x9c\x20\x1c\xf0\xdf\x9b\x74\x61\x0c\x3f\xb6\xe3\x31\xd9\x93\x1a\xb1\x08\xa1\x64\x81\x49\x3b\xf3\x15\x26\x8d\xd1\x3e\x27\xca\xcf\x78\xc0\xf2\xfb\x81\x12\xa2\x2c\x18\x07\x58\x92\x21\x79\xb2\x1a\x57\xd7\xf5\x34\x49\x6b\x9a\xde\x3d\xfd\xc5\x4b\x93\xab\x60\xfe\x7f\x58\x7b\xeb\xa8\xac\xba\x76\x8d\x17\x90\x4e\x05\x04\x94\x92\x96\x92\x0e\x25\xa4\xbb\x11\x10\x04\xa4\x91\x4e\x69\x24\x14\x01\x91\x54\x4a\x52\xe9\x0e\xe9\x6e\x49\xe9\xee\x0e\xe9\x46\xea\x8c\x71\xce\x7e\xd6\xf7\xee\xc5\x37\xce\xda\x63\xf0\xfe\xff\x1b\xf7\x9c\xdc\x5c\xeb\x99\x71\xcd\x79\x4f\xc1\x6b\x9f\x78\x51\xe3\x43\x61\x67\x46\xd3\x0a\xa0\x24\x1a\x14\x07\xfa\x24\x77\x43\xf4\xa5\x0f\xe4\x06\x89\xe1\x46\xf7\xbd\x7b\x38\xd8\x85\xf9\x71\x15\x2d\x48\x97\x14\x7d\x2f\x3d\x8b\x2a\x3e\x69\x67\x6f\xc2\xc2\x42\x71\xe0\xc1\x3a\x7e\x98\x7f\x5a\xcc\xe3\xb9\x4b\x6f\xd3\xbe\x77\xfb\x3d\xfa\x88\x3e\x8c\x00\xab\x57\xb2\xfd\x31\x11\x3c\x56\x79\xf0\x0c\xa7\xc0\x60\x0d\xa1\xf2\x9b\x62\x58\x40\x37\x55\xc6\xd9\x14\x53\x7b\xf2\x5a\x99\x7b\x1a\xa7\x38\x23\x2a\xc4\x7a\x73\xac\x02\xd3\x31\x29\xe8\x43\x2b\xea\xb3\x2f\xc0\x7c\x1b\x8a\x03\x89\xe1\x54\xa4\xc3\xf9\xe0\x61\x20\x6d\xf6\x97\x40\xcc\xe8\xc8\x56\x42\xeb\x1a\xea\xf6\xe7\xef\xcf\xae\xc2\x5b\xae\xc3\xd2\x19\x97\x80\xb5\x2d\x14\x07\x9e\xc6\x0f\xd2\xbe\x88\xac\x6e\x22\x4e\x2a\x14\x25\x1c\x4b\xdc\x9f\x1d\xf7\xc2\x4e\xef\x14\x6b\x89\x3d\x45\xd1\x5f\xc6\xd0\xab\x06\xea\x29\x41\x71\x20\x31\xb0\x7b\xfe\xc6\x27\xc5\xdf\xf7\x9b\xfd\xc3\xd1\x18\xfe\xcd\x3e\x95\x23\x2d\xa4\xf5\xc0\x3b\x50\xc8\x52\x68\xa1\xe7\x61\x79\x26\x70\x31\x07\x8a\x03\x89\xe1\xbe\xa4\x5b\x46\x62\xa0\x74\x3d\xdf\xdd\xb0\x53\xb3\x77\x1a\x48\x33\x95\x26\x2b\x9b\x36\x73\x84\x0d\x32\x67\xf5\x5b\x55\xc3\x3c\xc0\xb1\x55\x08\x0e\x24\x06\xf9\x3b\xdb\x25\x46\xe5\xda\x8f\x09\x9d\x8f\xe3\x9f\xee\x70\x4b\x22\xfd\x3a\x2b\x3f\xeb\x49\x6a\x48\x93\x56\x4d\x4b\xde\x08\xe6\x87\x89\x01\xea\xf7\xe7\xa6\x18\x42\xc5\xb7\xde\xe9\x0c\xf6\xb0\x29\x09\x13\x55\xe5\x8d\xce\xfe\x8c\xf8\xc3\xf0\x19\x2b\x3a\xfd\xa8\x45\xeb\x43\x1b\xd5\x9b\x41\x40\x0c\x50\x1c\x48\x0c\x7c\xca\x0a\x4f\x70\xb1\x08\x0e\x44\x1f\x60\xfc\x7d\x49\xf2\x24\xac\xde\x3d\xe2\x54\xcc\x61\xbc\xb5\xbd\x2d\xa2\x12\xc3\x4e\x0e\x38\xa5\x00\xc5\x81\xc4\xa0\x89\xeb\xca\xac\x75\x64\xcf\x8a\x88\xf9\xb3\x91\x04\x93\x4e\x36\x5a\x2c\xc7\x22\x50\x72\xf9\xcd\x9d\xb2\x12\x22\x7a\x7c\x1f\x76\x58\x58\x28\x0e\x24\x86\xdf\x19\x2f\xa8\x39\xfc\xd0\x14\x3d\xaf\xea\xa8\x89\x0c\xe6\x4b\x91\x97\xfb\x47\xa5\xc5\x50\x43\xf1\x14\x38\xf3\xa6\xd6\xb2\x82\x81\x03\xed\x10\x1c\x48\x0c\xa6\x73\xdc\xd3\xbf\x3e\x4e\x50\xe3\xbe\x11\x57\x59\x56\x6d\x45\x5b\xa5\x6f\x24\x7b\xc4\xe6\xda\x5a\x3d\x7a\x11\x3b\x61\x66\x1e\x02\x0b\x0b\xc5\x81\xc4\x60\xfa\x1c\xa1\x76\xf7\x6c\x94\x16\x23\xf9\xd3\x97\xb7\xca\x9d\x9d\xb2\xc8\x39\xb2\x0d\x62\xab\xa4\xa6\xf5\xb3\xef\xd6\x8c\x2e\x99\x60\x62\x80\xb2\x22\x6f\x8a\xe1\x79\xcc\x97\xb0\x1a\x63\xc3\xaf\x81\x95\x95\xb9\x3e\x8f\x7b\x11\x73\x2c\xab\x70\x9e\xcf\xff\xbd\x2b\x65\x99\xff\xa2\xa1\x33\x1b\x28\x0d\x07\xc5\x81\x8f\xac\xa0\x22\x8e\x86\x8c\xb5\xaa\x5b\x2a\x78\x37\x6b\xd5\x1b\x53\x13\x05\xeb\xff\xf9\x91\xce\xb6\xfd\x24\xe3\x83\x8d\x51\x32\x26\xb0\xa3\x08\xc5\x81\xc4\xe0\xc2\x32\x5a\x5f\x30\x48\xf5\xd7\x51\x38\xcc\x27\x52\xbe\x34\xd4\xa9\xc6\x59\x00\x47\xa7\x83\xa2\xed\xb7\xfe\xb6\x7a\xc3\x38\xf0\xad\x41\x71\x20\x31\x98\x2e\x0b\x57\x62\xf4\x1d\xac\x4b\x22\x4b\x6f\x7a\x61\x22\xd8\x2e\x9c\x0f\x3a\xe7\x50\xed\x50\x70\x4d\xb0\x7c\x14\xca\x28\xf6\x01\xfe\x6b\x10\x1c\x48\x0c\xe9\x82\xb3\xca\x3f\x71\x32\x64\xb4\x62\x8c\x44\x3d\x98\xdb\x79\x26\x1c\x3c\xd7\x33\xf1\xe0\xef\xc4\x22\x7a\xff\xaa\x2f\x62\x96\x01\x8c\x69\xa8\x57\x35\xfe\x69\x4c\xcb\x20\xd7\x94\x7d\xb6\xdb\x50\xc7\x25\x7f\xbf\xc1\x9c\xf4\x74\xb9\xb7\x00\xad\x8e\x78\x1b\x25\x87\xd0\xd4\x99\x9e\x2e\x2e\x37\xea\x1f\x68\x4e\x0a\xc5\x3d\xc2\x01\xa4\x13\x1a\xdf\xfe\xdf\x6a\xf8\x84\xe4\x56\xfe\xeb\x2d\x1a\xd8\xae\xdc\xef\x8f\xe1\x23\xf7\xde\x91\x90\x81\x8c\x69\xa8\xc8\x37\x8d\x69\x2f\x5d\x46\xf1\x77\x3c\x28\x4f\x12\x7e\x7d\xf5\xf7\x78\xa5\xd5\x15\x46\x8d\x40\x70\x51\xc6\x4c\xef\x86\xdd\xbe\x3d\x84\x6e\xce\xf1\x0f\x74\xf4\xf5\x3d\xfa\x76\x81\xab\x8b\x86\x5f\x48\x2f\x91\x97\x6c\xfc\x6b\xdf\x13\xa9\x73\xf1\xa0\xa8\x07\x08\xf3\x95\x67\x28\xec\x08\x02\xc6\x34\x54\xcc\xff\x31\xa6\xfb\x40\xc6\x34\x9e\x20\x6e\x95\xc1\x89\x5d\x44\xb3\xc1\x30\x4a\xe2\xea\xab\x8f\x95\x88\x77\x47\x38\x76\xff\x36\xa2\x5c\x6e\x4f\x62\x1f\x22\x34\xdc\xda\x98\x6e\x00\x1b\xd3\x0b\xa7\xdb\x1c\xf8\xcd\x3f\x63\x6d\x3b\xaf\x30\xff\xa8\x6d\x3f\x1f\xa8\x25\xfe\xc4\x97\xbf\x17\x9b\x2c\xc7\x3b\x8a\x8f\xfc\xff\x3e\x52\x73\xbb\xb9\x66\xc3\x0d\x63\xda\x0f\xbe\xc3\xce\x62\xa2\xd9\xa3\x3e\x3f\x13\xcf\x68\x43\xab\xd6\xbe\xd7\xdb\x4b\x17\xe1\x49\xb7\x6a\x4d\xcf\x0f\x3b\x74\x1a\xc4\xdb\x37\x79\xc3\x98\x6e\xc3\x93\x18\xd7\xcc\x0c\xc3\x65\x10\xfb\xeb\xd4\x17\xa5\x8e\x45\x6c\x89\x5e\xd8\x7e\x22\xad\x93\xc8\x27\x28\xd0\xaa\xaf\xf9\xe1\xf6\x4d\xde\x30\xa6\x2b\x82\xb2\x66\x8e\x1d\xb0\x02\x2a\x34\xc3\x0d\xb4\xd1\x6a\xd5\xd3\x10\x55\x8b\xf2\xdd\x95\xff\xec\x7f\xa9\x5b\x9e\x29\xcc\xbe\x7d\x5d\xed\x86\x1b\xc6\xb4\xbb\x45\x03\x96\x60\x14\xdd\x65\xd2\x09\x33\x8d\x9c\x9d\x83\xed\x95\xfc\x85\xef\x01\x86\x61\x4f\x25\x05\xb2\xd2\xce\xe3\xb8\xdb\xdf\x0b\x6f\xb8\x61\x4c\x97\x1c\xe1\x1b\x37\xb5\x6c\x26\x60\x99\xf3\x35\x60\xb0\x86\x8a\x1c\xd8\x11\x8c\x8d\xbc\xf6\x48\x87\x6f\xcc\x0b\x69\x26\xb3\x90\xbd\x7d\x93\x37\x8c\xe9\xd7\x3b\x3b\x12\xb9\x8b\x42\x0e\x61\x7b\x0b\x22\x74\x99\x86\xdd\xfd\x9f\x72\x10\x91\x13\x42\xfe\x24\x3b\x56\x98\x5f\xa7\x8b\xdd\xd6\x0b\xd7\xfc\xbf\x7d\x89\x37\xc7\x20\x06\xc6\xef\xbe\xd5\xdb\xf1\x73\xcd\xed\x25\xe5\xef\x63\xb4\xbb\xd6\x2d\x4c\x59\x51\x03\x14\xdf\xe6\x90\xe0\x7f\x6c\x0d\x7c\x0d\x1c\x1f\x85\xe2\x40\x63\x10\x57\xcf\xb9\x08\xef\xe1\xae\x41\xd0\x5c\xe3\xba\x66\x87\xc8\x70\xcb\xb3\xa8\x3d\x7a\x86\xdc\x6e\xb2\x53\xaf\x30\xa5\x32\xf6\x05\x58\x58\x28\x0e\x34\x06\x35\x2b\xfa\x74\x33\x75\x3c\x3e\x88\xd4\xc0\xfc\x91\xf5\x90\x30\xa0\xd0\xf7\xce\x9a\x23\xd5\x3b\x78\x61\x16\x5b\xa4\x62\x17\x25\xa0\x12\x23\x14\x07\x1a\x83\x4a\x56\x9c\x2f\x5d\x3d\xe5\x37\x37\x1b\xce\xf5\xdf\x60\xb0\xbb\xd9\xfc\x0d\xac\xb0\x25\x54\xc8\x53\x7b\xa4\x4b\x26\x72\x6d\x0e\x1c\x76\x85\xe2\x40\xb9\x75\x60\x32\x7a\xd3\xbb\x56\x5e\xfe\xd8\x93\x35\xab\x95\x96\xf4\x49\x65\xbc\xe8\x76\xc7\xde\x47\xcd\x4f\x23\xde\xf4\xc3\x3e\xf1\x40\xc1\x19\x28\x0e\x34\x21\x69\x8b\xef\xaa\xf8\x6a\xa0\x12\x1c\xb0\xfb\x51\x12\x7e\x92\x75\xd2\x87\x9b\x9b\x55\x63\xb8\x15\x7f\xb4\xa9\x91\x41\xa8\x50\xc1\x0e\x36\x21\x81\xfa\x91\xbc\x29\x86\x17\xf0\x17\x47\x3b\x54\xb5\xec\x08\x43\xc9\x7f\xde\x58\xbc\x15\x69\xdf\x4f\xc4\xa3\xff\x49\x83\xb9\x9b\xf6\xc6\xbb\x43\xa7\x42\x03\xb0\x7a\x21\x38\xf0\x85\x97\xc6\x54\x0c\xeb\xc7\x8a\x9f\x3c\x0d\xb3\x4f\x2a\x77\xfc\x3a\x28\xd3\x73\x52\x62\x9e\x2b\x13\x0d\x27\xa4\xd2\xe5\x51\x8b\x5a\x00\xf3\x1c\x08\x0e\x24\x06\x65\x16\xd3\xc8\x0d\xca\x8a\x89\x75\x22\x24\xef\xec\xba\xee\xd0\x81\x1a\xc1\x79\x14\x6f\x74\xbc\xaa\x50\x33\xa6\xa6\x87\xc3\x9f\x60\x61\xa1\x38\x70\x3d\x1f\x14\xef\x30\xcb\x89\x37\x7b\x21\x08\x39\x4f\x03\x1e\x85\xc7\x11\xf2\xb2\xe8\x6a\xd5\xbe\xa7\x0e\xae\xbe\x13\x83\x22\x40\x0a\xdc\x14\x86\xe2\x40\xb9\xbd\x47\x49\xfe\xfd\xbd\xde\xb2\x8e\x73\x78\xb9\xb3\x1d\x0e\x6e\xfc\x5d\x0f\x49\xc5\xbd\x62\xe2\xa6\xba\xcf\x6c\x2f\x62\xce\x9d\x24\x80\x53\x0a\x10\x1c\x48\x0c\x09\x49\xeb\xb1\xaf\x1d\x92\xa6\xaf\x67\xba\xac\x56\xf3\x9d\x70\xf2\x82\x46\xd6\x17\xcd\xca\xd0\xbe\x98\xf8\x31\xa3\x17\x3a\x7a\xc0\xc4\x00\x35\x7c\xdd\x14\x43\xad\xa6\x10\x43\xe9\x1c\x6a\x89\x47\xa3\x1e\xae\xfc\xe9\x91\xe4\xbd\xc5\x8e\xde\x17\x3e\x66\x7e\xe1\xc4\x7c\x33\x83\xcc\xd4\xe8\x80\x0d\x07\xc1\x81\xc4\x30\x68\xb1\xa0\xaa\xf3\x7a\x44\x95\x4c\xc1\x64\xaf\xbd\xed\xa3\x8d\x42\x24\xb7\x5e\x28\x81\xcd\xc8\x83\x17\x77\x69\x05\x11\x8a\xe2\x61\x61\xa1\x38\x70\xa5\xaf\x50\x76\x3d\xba\xd6\xaf\x36\x98\x31\x70\xb1\x0a\x1e\xfc\x66\x06\xb4\xe1\xb4\x0d\x0b\x49\xd2\x3e\x1b\x66\xcf\x19\xc5\x82\x80\x6f\x0d\x8a\x03\x89\xc1\x49\x33\xca\x7c\x66\x48\x31\xd9\xf6\xe9\x25\x6b\x63\xa3\xa9\x5b\xb8\xb6\x88\xcc\x3b\xf5\x6e\xc5\x68\xa3\x56\x04\xa4\xdc\xe1\x41\x58\x58\x28\x0e\x94\xdb\x8a\x72\x24\xa6\x94\x6c\x41\x92\x8b\x23\xf3\xfe\x5a\xf3\xed\xa1\x7a\x5a\x26\x8b\x4f\xef\xdf\xee\xcb\xeb\x21\xd4\xb0\xf3\xce\x03\x17\xb1\xa1\x38\x90\x18\xa6\x9b\x24\xef\x88\xdc\x77\x5a\x19\xf9\x59\x1a\xee\xb3\x1d\xa7\x26\xb4\xf3\xae\x40\x53\x72\xe7\x94\xd3\xc1\xba\x88\xb0\xf4\xba\x05\x26\x06\xa8\x89\xc5\x7f\x71\x1c\x94\xdd\x5b\x79\xee\xe1\x32\x8f\xbc\x8e\x2a\x27\x3b\xba\x1f\xa1\x27\xa0\xa4\x88\x62\x06\xcf\x5c\x12\x64\xf3\x74\x83\x59\xb9\x12\xf8\x28\x20\x38\x90\x18\x54\xa8\xad\x36\x16\xec\x5e\x0b\x3c\x75\x60\x2f\xfe\xa4\xe5\x69\x88\xbf\xc5\xc6\x85\x41\x56\x4b\xe3\x8c\x49\xdf\xf3\xae\x35\x13\xb0\x7a\xa1\x38\x70\x61\x8d\x0c\x63\xdd\xa0\xd1\x3b\x0f\x6c\xde\xbb\x44\x5a\xb5\xf3\x16\x30\xf7\x89\x7e\x2e\xb2\xf2\xd2\xf2\x95\x22\x6c\x7a\x79\xcd\xaf\x07\x0b\x0b\xc5\x81\xc4\x20\xa6\x18\x31\xe3\x31\xfe\x7e\x45\x08\x51\xc5\x52\xef\x85\x8d\x50\x70\x89\x01\x09\xbc\xac\xc7\xd2\xdc\x87\x77\x0f\x7b\xeb\xfc\x91\x60\x61\xa1\x38\x50\x6e\x57\x5c\xf1\xb9\xf5\x8b\x71\xe5\x2c\x0e\x8a\xda\xb2\x97\x24\x39\xb9\x04\x98\x1f\x65\x69\x10\x39\xc5\xe1\xad\xe3\xe6\xb9\xc3\xab\xc3\xc2\x42\x71\x20\x31\x44\xcf\xec\x5c\xa4\x2a\xc0\x6f\x11\x24\x7f\xe4\x7d\x5f\x44\x86\xfe\x0b\x43\x4e\x27\x7c\x86\x18\xdd\x4f\x3d\x49\x98\x34\x55\x07\x58\xb7\x42\x4d\xf9\x6e\x8a\xc1\x8d\x40\xc7\xa8\xa0\xce\xdd\x75\xb6\x65\x36\xd2\xec\x8a\xe2\x79\xbf\xc4\x99\x74\x95\x5d\x00\x91\x86\x6a\x9c\x5d\xf3\x3d\x52\xe0\x36\x2b\x14\x07\x12\xc3\x5b\xf4\xde\x46\xfd\x0d\x81\x53\x63\x55\xd2\x7c\xb9\xbf\xb6\xa9\x2b\xf8\x55\xdc\x3f\xdf\xff\xc1\x9b\x8b\xe4\xe0\xf9\xd2\x81\xb7\x04\x1c\x83\x87\xe0\x40\x62\xe8\xea\x1a\x2b\x66\x7c\x70\x4a\xe3\xae\x75\xf8\xbb\x0b\x9f\xf8\xfc\x7c\xab\x51\xe5\x1b\x1c\x4b\x7a\x91\x62\x42\x40\x73\x0f\x3b\x70\xc3\x0e\x8a\x03\x3f\xff\x91\x55\x22\xda\xc2\x91\x47\x73\xc7\xfd\x63\xce\xa2\xa1\x57\x2e\x7e\xd6\x7e\x54\xf4\x53\x0e\x52\x85\x7a\x45\x39\x84\x4e\x11\xc0\x34\x84\xe2\x40\xb9\xb5\x0e\x7e\x7e\xf0\x2b\xba\x37\xa4\x6c\x9d\xcb\x7f\x15\xfb\xa4\x30\x71\xee\x9c\x42\x02\xee\xe7\x2e\x9a\xc1\xc6\x47\xb4\xe3\x26\x5e\x58\x58\x28\x0e\x3c\x67\x08\xc7\x3c\x75\xa7\xb5\xa0\x79\xad\xc7\xfc\xea\xd7\xc7\xce\x74\xfc\x4a\xe7\x3f\xa5\xf0\xcc\x79\x76\x2e\x69\x45\xb6\xa3\x21\x2f\x61\x62\x80\x9a\x8c\xdf\x14\xc3\x59\xeb\xb2\x81\x60\xcd\x1a\x8d\x38\x43\x30\x95\xe5\x56\x84\x9f\xcc\xef\x79\x7e\x93\x52\xb5\xb4\x38\x01\x25\xcb\x3a\xf6\x87\xe5\xb0\x0e\x43\x71\x20\x31\xe8\xd7\xcf\x3e\xad\xd9\x44\xfa\xce\xce\xef\xda\x13\xa3\x52\x6e\xc0\x53\x74\xa4\x73\x8d\xcb\x32\x2b\x88\xc2\x46\x2b\x8e\x63\x08\x5c\x9f\x87\xe2\xc0\x37\x0d\xeb\x1b\x29\x0b\xef\x7d\xd7\x14\x10\xbc\x8e\xac\x42\xe5\x41\xea\x7f\xe5\x5d\x21\x32\xc6\xf0\x36\x8d\x13\x8d\xe5\x8e\xf3\x18\xf0\x86\x02\x14\x07\x12\x03\xab\x75\x99\xca\x6f\x25\x95\xb3\x29\x2a\xa3\xdf\x66\x41\xf9\x33\x24\x34\xfd\x2c\xd2\xa9\x1f\x43\x1f\xbe\x43\xe6\x39\x8c\xf1\x00\x8a\xf5\x41\x71\xa0\xdc\x66\x47\x57\xa9\x99\xee\x77\xe3\x10\xfc\xae\xe4\xfe\xb8\x67\x3a\x8b\x2e\x59\x6c\x32\x10\xf2\x71\x20\xe8\xb1\x45\xaa\x1d\xe6\x08\x03\x2c\x2c\x14\x07\x12\x03\x93\xd2\x67\x75\xd3\x65\x2d\x39\xf9\x15\xf9\xf9\xca\xf2\xe4\x0f\x3c\xcd\xcf\xc4\xc6\xbe\x34\x07\x91\x73\x14\x8e\x6a\x13\x5a\x36\xc3\xc4\x00\xb5\x4c\xba\x29\x06\xfa\x85\xfb\xf2\x2c\x4c\x66\x66\xaa\xd6\xcb\x6b\x94\x94\x0e\x15\x65\xb9\xb6\xa6\xa6\xf9\x2c\xa6\xfc\x7b\x21\x1f\xbe\x63\x7b\xff\x85\x75\x18\x8a\x03\x89\xc1\x3c\xff\x5b\x7d\x0b\x3e\xf5\x63\x71\x6d\x34\x3a\xcf\x84\xea\xb1\x60\x1d\x61\x35\xc2\x5f\x54\x8b\xc4\x0c\xa5\x03\x59\x1c\x8c\x80\x0d\x07\xc5\x81\xc4\x30\x66\x4a\x76\x47\x33\x42\x9b\xd0\xd4\x53\xc3\xf3\xa5\xa5\x55\xfa\x69\x2d\x75\x97\x61\x0b\x55\x6a\x24\x12\x9d\xe6\x62\xda\x73\x60\xa6\x07\xc5\x81\xc4\xd0\x18\x8a\xe0\xf3\x3c\x45\x25\x31\xba\xea\x29\x7b\x46\x15\xe9\x9a\x67\xd0\x19\x15\x2b\x9f\x63\xe7\xc6\xd5\x3a\x75\x88\x80\x0c\xf0\x82\x0f\x14\x07\x16\x83\x29\x3a\x05\x2e\xff\x54\xb6\x7f\x9e\xed\x4b\xd7\xa7\xef\xc6\x6d\x07\x12\x3a\x3c\x0f\x72\xd7\x39\xf2\x44\x13\x79\x38\xfd\x77\x01\x31\x40\x70\x60\x2f\x52\xc3\x78\xd1\x9a\xf7\x8f\x28\xf2\xb4\xbc\xd1\x5f\xdd\xfd\xd0\x0f\x12\x97\x42\xf2\xe6\xb5\x6e\x86\x5b\x1a\x41\x8a\x0b\xf2\xd6\x30\x31\x40\x2d\x60\xff\x4b\x95\x15\xd1\x8d\x9f\x4f\x94\x91\x9a\xde\xbe\xd6\x1c\x3b\xb4\xf1\x3a\x36\x90\x11\x99\x8e\x7f\x57\x9e\x19\x7c\xa7\xc5\xf5\x81\xf1\xaf\xbb\xb0\x0e\x43\x71\x20\x31\xcc\x23\x04\xff\x0a\x99\xf9\x28\x26\xf2\xca\x94\xc0\x67\xb6\x83\x6e\x71\xe0\x84\x78\x5e\x31\xac\x73\xd9\xfa\xc9\x27\x78\x9b\x62\x22\x58\x58\x28\x0e\x24\x06\x71\x37\x3b\xac\x03\x01\xfe\xb1\x47\x91\x07\x65\x5b\x78\x2e\x36\xf3\x07\x18\xcc\x12\x34\x3a\xe6\x2b\x6f\x19\xaf\xed\x50\xf3\x81\x63\xae\x50\x1c\x48\x0c\xcf\xc4\x9a\x09\x4a\x0f\x55\x13\x86\x28\x14\x39\x1e\x65\xaf\x06\x3d\xab\x6d\x47\xa5\xce\xd1\xce\x5a\x6f\x64\xc6\xa6\xb1\x64\x5d\x84\x85\x85\xe2\x40\xb9\x95\x7d\x28\xf4\xb9\x4d\xf3\x7b\x39\x0a\x6d\xd1\xc3\x23\xf4\x85\x7b\x68\x1d\xda\xf8\x97\x54\xcd\x35\x5f\x63\xd9\x38\x2b\x49\xb1\x81\x41\x0d\x8a\x03\x89\xe1\x0e\xfd\xc2\xa7\x52\x73\x11\x0d\x3b\xdc\x5d\xfb\x47\xef\xf5\x13\xb1\xf3\x3c\x32\x8c\x51\xaa\xf7\x2b\x42\x6d\x8c\x75\xee\xe6\x71\x03\xc6\x34\xd4\x96\xe2\xff\x18\xd3\x0d\x37\x8c\xe9\x67\x94\x45\xb5\x35\xc3\xcb\x5b\xdf\x70\x87\x98\xb5\x04\x15\xb6\x89\xbd\xd8\xe2\x3b\x0c\x50\x1f\xb2\x7d\x51\x94\xc7\x20\x68\xde\xbd\xfd\xd6\xcb\x0d\x63\x9a\x25\x20\xbb\x39\xc6\x22\xe3\x91\xc9\x4e\x6b\x13\x73\xc9\xb2\xaa\x0e\x06\xff\xf7\xd6\x03\x39\x9a\xfd\x52\xf9\xa5\x3c\x0f\x1b\xaf\xdb\x37\x79\xc3\x98\x6e\x0f\x96\xd3\x7f\x40\xb8\x30\xfe\x30\xd1\x2b\x9a\x02\xdf\xd5\x45\x35\x00\x4b\x98\x5c\x1b\x79\xfc\xfa\x79\x15\xb2\xd1\x86\xbd\xc3\xbf\xb3\xdb\x03\x95\xcb\x9b\x9f\x64\xbf\x41\xed\x15\xa1\x0e\xda\x17\x22\xc4\xe2\xb6\x6d\x61\x01\x62\x62\x6f\xb2\xab\x53\x2b\x5f\x3d\x99\x85\x35\x72\x73\x5e\x0c\x79\x98\x6c\xa0\x38\xf0\x59\x91\xad\xaa\x57\xc2\x0a\xb6\xa7\x66\xaa\x41\x2e\x6e\x7f\x82\xf0\x4d\x2d\xfa\x67\x5a\x84\xbf\xa2\x3b\x78\x3b\x21\x33\xaa\x0c\x0b\x00\x67\x45\x20\x38\xd0\x27\x99\x62\xfd\x64\x3f\xa6\x4c\xeb\xf0\x71\xde\xa8\x29\x02\x1c\x6e\xba\x64\xbf\x5c\xc0\x1d\x14\xa3\xfc\xce\x5f\x75\x4b\x54\x0f\x39\xea\x61\x61\xa1\x38\xd0\x27\xb9\x9f\x84\x26\x64\x5a\xf0\x25\x86\xe4\x4e\xc7\x1f\x2c\x92\x03\xf5\x21\x7f\x6a\xfd\x45\xc2\x73\x89\x94\xe6\x5d\xdb\xeb\x34\x35\xe0\xdb\x81\xe2\x40\xb9\x0d\x1c\x0d\x25\xc4\xf8\xb2\x65\xd6\x23\x39\x6e\x4c\x3f\x8a\x5a\x82\x19\x7f\x8f\x18\xe7\x99\x0f\xe5\xb4\x1f\xa5\x0e\x7a\x28\x7b\x26\x2c\x2c\x14\x07\xfa\x24\xe1\x19\x4c\x69\x9b\x69\xf0\x93\xe8\xfd\x4c\x52\x5c\x0b\x8d\x91\x9b\x4e\xa8\x7b\x84\xf3\x09\xd7\x54\x8e\x2c\xe3\x8b\x91\x35\x0a\x60\xbf\xcf\x50\x2a\xff\x2f\x4f\x2d\x9c\x05\x09\x1f\x10\xb7\xfd\xaa\x44\x11\x8e\x2a\xe7\x1f\x68\x49\xfa\x5d\x87\xdf\x32\x35\xa0\x8d\x27\x1d\x41\x5d\xd0\x91\xf7\x9f\x7a\xc8\x10\x1c\xb8\x24\x5a\xf5\x18\x15\x1a\xbe\x40\x14\x79\x00\xbc\xe3\x2f\x2c\xf4\xf7\x7f\xcb\x10\xcc\x85\x7e\x04\x9a\x96\xd8\x4c\xe0\xa9\x29\x37\x39\xc0\xc2\x42\x71\x20\x31\x8c\xeb\xe5\x61\xb1\x06\x7e\xed\x1d\xba\x4a\x63\xfb\xb1\xdd\xc1\xc3\xf1\xe9\x93\x4f\x9c\x4d\xfd\x81\xc3\xea\x13\xee\xb3\x9c\x78\x60\x95\x04\xc5\x81\xc4\xa0\x6c\x9d\x8f\xf1\x4c\xc6\x88\x6e\x20\xcd\xe7\xa9\x2b\x5b\xc8\x4b\x7a\xcb\x35\xfb\x36\xb5\xa4\x1c\xb5\x04\xb3\x00\x3b\xc6\x46\x7c\x60\x13\x09\x82\x03\xe5\x16\x8d\x18\x21\x60\xa6\x32\xb8\xea\x12\xce\x5a\xc9\xbd\x96\xe3\x6a\xfe\x22\xf0\x5e\x67\xfd\xcc\xd5\xa3\xdc\x21\xf8\x66\x94\x13\x12\x58\x58\x28\x0e\x24\x06\xce\x4d\x6a\xbf\xdd\xb1\x1a\xc3\x50\xe9\x53\xab\x94\xe0\x74\x71\xd1\x97\xdc\x5d\xcc\xc1\xb1\x6c\x31\x8b\xa8\x49\x81\xdd\x2f\x14\x60\x62\x80\xfa\xfd\xb9\x29\x86\xca\xbc\x97\xcd\x01\xb1\x14\x67\xcc\xd9\x76\xb5\x82\x0f\x14\xac\x4a\x5f\x0e\x93\x4c\x2a\x7d\xd3\xa3\xaa\xf5\x6d\x93\xa0\xab\x39\x87\x75\x18\x8a\x03\x89\x21\xf1\xe2\xa9\x25\x4e\xcf\xdc\x48\x65\x93\x9e\x95\x63\xa5\x8a\x08\x09\x52\x33\xdd\xe3\x4b\x74\xbc\xc9\xf3\x23\x0d\x4a\x47\x04\xa0\x42\x38\x14\x07\x12\x43\x2e\x5d\x2a\xa9\xfc\x98\xd0\xea\x73\xb6\xbb\xf9\x01\x76\x7e\xd6\xaf\xec\x52\xa3\xbe\xf2\x66\xd7\x0d\x48\xac\xff\xa6\x08\x44\xba\x0f\x0b\x0b\xc5\x81\x5f\xf1\xdb\x17\xc7\xe4\xf9\xf5\xfc\xa2\x4e\xda\x62\xc6\x4c\x70\x3a\x0a\x2b\x78\xf5\xbb\x59\x4c\x69\xe1\xc8\x79\xb7\xfa\xc7\x91\x62\x60\x61\x0b\xc5\x81\x72\x6b\x94\xab\x4d\x3c\xfc\x9b\x33\x19\xed\xa3\x66\xaa\x4a\xc4\xc0\xe4\xf9\xb0\xa5\xbf\xc1\xb8\x69\x5f\x8c\xc4\xd9\x82\xd9\xd4\x63\x1d\x58\x58\x28\x0e\x24\x86\x61\xa3\x2d\x41\xe2\x4d\x25\x6e\x6a\x26\x77\xda\x5f\x2d\xf8\xcc\x92\x12\x01\x54\xda\xf2\x5d\xf7\x58\xde\xed\x4b\x85\x7e\x09\x08\x80\x89\x01\xca\x8a\xbc\x29\x06\x38\x36\xdc\x56\x87\xbb\x1e\xef\x11\xfb\x52\x48\x1a\x22\xca\x77\x4d\x2d\x9b\xd3\x10\x4d\x85\x65\xe6\x84\xc9\xba\x78\x19\x1e\x53\xc0\x3a\x0c\xc5\x81\x17\xf8\xd4\xb1\x5b\x1d\x35\x02\xbf\xcc\xeb\x1d\x14\xb0\xd2\xfe\xd8\x3e\x50\x56\x22\xac\xe0\xb3\xbd\x28\x19\x57\x0b\x35\x5a\xf1\x03\xaa\x81\x41\x71\xe0\xf2\x83\x75\x7c\x58\xc5\x1e\x61\xb1\xa6\x6f\xf5\x1e\xce\xa1\x10\xe7\x92\x1f\xcb\xe1\xcd\x08\x23\x04\xa4\x04\xc6\xcd\xe9\x20\x87\x02\x47\x56\xa0\x38\x90\x18\x86\x12\xfd\x5e\x7d\x6e\xad\xcf\x7c\x91\xbf\x2e\xe2\x95\x92\xa6\xe1\xa9\x81\xea\xbc\x58\x54\xdc\x13\x89\x46\x78\xa2\x8b\x22\x00\xcc\xb7\xa1\x38\x50\x6e\xd3\xb1\x06\xd4\x89\xbf\x72\x8d\x8a\x9e\x7e\x6e\x3c\x6f\x69\xe6\x8a\xfb\x19\x41\xa1\xd8\x2e\x36\x93\xfd\xf7\xb4\xef\xa3\x91\xcb\x24\x60\x4c\x77\x8f\xe4\x10\x98\x9e\xf6\xfe\xd8\x67\xad\x55\x77\xf5\x27\xa8\x9f\x5d\x9e\xcc\xa1\xa8\xa0\x41\x74\x0a\x7a\x82\xe8\x43\x97\x6d\xfb\x4f\x63\x3a\x5a\x66\x23\xc0\x74\x90\xe3\x6f\x93\x71\xdc\x83\xd1\xbb\x77\xa7\x58\x3e\x97\x0f\x1b\x77\xba\x45\x0a\x3d\x90\xbd\x47\xe4\x12\x92\xff\x0f\xd4\xa0\x29\xe3\x5c\x8a\xc8\x8e\x6b\x78\x8c\x5a\x95\x01\x57\xeb\x9c\x0b\xd9\x4b\x33\x3c\xd2\xce\xee\x23\xbe\x2f\x82\xf3\x15\x15\x1e\xc8\x98\x86\x8a\x7c\xd3\x98\x16\x8d\x1c\xb0\x7f\xe4\xe5\xbf\x69\xd9\xf2\xb9\x32\xc4\x3d\xf0\x87\xec\xfd\x16\x8a\x0b\xe9\xab\x49\x3d\xfb\x7c\xa9\xbe\x05\x8a\x7f\x96\x23\x76\x3e\x54\x66\xd2\xf0\xde\x3b\x58\xc4\x0c\xb0\xdb\x24\x52\xa1\x0f\x4b\x6f\x0f\xe5\xb1\x08\xcb\x1b\xd3\x68\x10\x6d\xd1\x7e\x7e\x06\x18\xd3\x50\x31\xff\xc7\x98\xbe\x7b\xff\x7f\x4f\xc3\x1e\x8e\x79\x04\x75\xeb\xa2\x6c\xbb\x39\x91\x0a\x5b\x16\x2e\x5e\x5c\x5f\x0b\x18\x67\x17\x96\x96\xbf\x26\x7f\x70\xb2\xcc\x87\x77\xeb\x6b\xb6\xa2\x70\xf2\xa0\x89\xdf\x9e\xf7\xe3\x2e\x26\xa3\xb3\x72\xd4\x96\x7d\x37\xfa\xe2\x71\x78\xcf\x39\x5c\x8f\xf3\xdc\x2a\xdb\xa3\xeb\x25\xe3\x06\x1e\xd7\xdc\x5b\xcf\x35\xe1\x9e\x82\xe7\x9a\x2b\xf9\xfb\xd2\xf7\x7d\xac\x77\x1d\x7b\x4c\xa8\xbe\xc5\x35\xdd\x5d\x6b\x42\x6f\x53\xbf\xde\xd1\xee\x9e\x76\x27\xd5\x1c\xce\xa1\xb8\x7d\x93\x6a\x37\xfc\x53\xd3\x6e\x9e\x69\xb3\x5d\x8d\xa4\x89\x5c\x83\x7b\xbd\xdf\x15\x28\x47\x1f\x10\xfc\x45\x72\x67\xc0\xa6\xa1\xb0\xf0\xfd\xed\x13\x73\xfb\x26\xed\xc0\x4d\xf2\xa6\x63\x77\x69\x4d\x6a\x47\x11\xd1\x17\x06\x7d\x6b\x51\x89\xf3\x37\x09\x4f\xd8\x71\xce\x9a\xc0\x8f\xd0\x66\xa8\x2e\x38\xbc\xed\xe3\x38\x81\x62\x70\x9e\xe0\x26\xf1\xf8\xef\x70\xd8\x0c\x6c\x8f\x1f\x7d\xa7\xfd\x5b\x2b\xfc\xd4\x5a\xea\x88\xe3\x65\x04\xc1\x5d\xc1\xad\xe9\x34\x3c\x34\x6d\xbd\xa1\xdb\x37\x19\x0b\x6e\x92\xe4\x3d\x3c\x7a\x1b\xe7\x49\x9b\x7b\xdf\xba\xe3\x91\xcc\xb4\x18\xd2\xc6\xc8\x83\xf5\xb9\xab\xec\x75\x27\xc5\x40\x94\x0f\xa2\x09\xb7\x6f\xb2\x14\xdc\x64\xce\x60\x5d\xbb\x8d\xe3\x1b\xbc\xb7\x8e\x36\x56\x6d\x5f\x2f\x10\x15\xce\xdd\xa7\xd9\x46\x6a\xb9\xba\x0e\xd6\xe0\x39\x57\x82\x4f\xff\x9d\xa5\x0a\xd4\x97\x78\x73\x0c\xba\xd0\xa8\x2f\xc1\xe3\x66\xe0\xac\xe1\x8b\x14\x27\x4d\xab\x6e\x0b\x2f\x12\x39\x0d\x1c\x23\xb5\x23\x48\x91\xfa\xb1\xa4\x35\x09\x14\x21\x84\xe2\x40\x63\x90\xde\x47\x3e\xe7\xdf\xd9\xbb\xf8\x0f\xa2\x2b\xb6\x17\xe4\xf8\x13\x0f\x8d\xab\xf7\xe7\xef\x98\x38\x0b\xa6\x2f\x47\x94\xd6\xe2\x00\x87\xa3\xa0\x38\xd0\x18\x24\x44\x3c\xfb\x15\x0d\x5d\xb8\xa9\xb0\xf9\xc4\x78\x77\x75\xf1\x6e\x0c\xbe\xd6\x3c\x5c\xa9\x4f\x96\x07\x21\xf6\xd6\x71\x09\x22\xf0\x08\x08\x14\x07\x1a\x83\xae\x1f\xb7\xa4\x6f\xbb\x97\xff\x1e\x4f\x72\x9c\x39\xb6\xf8\x44\xf2\x8d\xbc\x53\xb5\xe5\xb9\x97\xb1\x9b\xd1\x13\x2c\x1d\x79\x0d\xa0\x4a\x1e\x14\xf7\x5e\x58\xe8\x7f\x9d\xeb\x1b\x61\xdd\x4c\x47\x45\xa5\xb3\x74\x26\xd5\xc0\xab\xc8\xcb\x99\xd6\xd1\x24\xce\xa7\x5d\xdd\xbd\xdf\xc7\x8f\x32\xbf\xd9\x04\x5c\xaa\x82\xe2\x40\xbd\x75\x25\x19\xe8\x52\x9e\x3d\x2f\x9c\x76\x89\x73\xe1\xcd\x78\x96\xb0\xf9\xc0\x75\x0d\xc9\xd5\x2e\x81\xc8\xd3\x4f\xec\x51\x11\x1a\x70\xe1\x05\xea\x47\xf2\xbf\x78\x91\x5e\x5c\x4b\xaf\x6d\x5f\xfb\xd7\x27\x44\xba\xdc\xff\xcb\x3d\x4e\xc1\x6e\x7e\x65\x96\x9d\xf1\xe5\xf4\x90\x81\xf6\x17\x23\x9e\x1a\xe0\x45\x42\x70\x20\x31\x84\xde\xd3\x31\x1c\x71\x79\x5c\x36\xf8\x82\x75\x83\x5d\xb5\x0c\x81\xb6\x44\xd7\xbd\x35\x8c\x7e\x63\xa8\x9a\x7d\xf1\x7a\xf9\xfd\x2f\xe0\x34\x26\x04\x07\x12\xc3\x94\xea\x7e\x3b\xdd\x94\x8e\x7c\xeb\x3c\x43\x8f\xf7\x6f\x9d\x5d\x69\xe4\xa6\xa1\x09\xf6\x7e\x75\xa3\x02\x3e\x52\x76\x54\x7c\xa0\x46\x2b\x14\x07\x4a\xaf\x2e\x61\xb8\xdb\x7d\x11\x8e\x97\x4d\xec\x07\xed\x2c\xf0\x36\x5e\xc3\x98\x56\x23\xe7\x2f\xb0\xe1\x18\x47\xb6\x5c\xb9\x91\xbc\x81\x37\x49\xa1\x38\x90\x18\x22\x68\xbc\x51\xb0\x15\xc8\xa5\x57\x3f\x3f\xe5\xc8\xc1\xcd\x33\x91\x76\xb1\xf9\x6c\x62\xe9\x27\xfa\x88\x77\x94\x18\x7e\x91\x76\x19\x16\x16\x8a\x03\xf5\xf6\xa0\xc8\x1f\xcd\x89\x8b\xc9\xfc\xc7\xd8\x3c\x5b\x15\x1a\x79\xff\xab\x7b\xe4\x8d\x6a\x27\x1f\x12\x52\x62\x32\xa5\xf7\x9e\x3f\x32\x83\x89\x01\x6a\xf8\xba\x29\x06\xee\x76\x8f\x2d\xd7\xa4\x78\xa2\xc4\x3f\x26\xbe\x67\x73\x12\xd5\xe1\xbf\xf6\x2c\x53\xb7\x8c\xac\x3f\x1b\xeb\x9b\xb2\xee\xaf\xdf\x83\x75\x18\x8a\x03\x89\xa1\xdf\x6c\x96\x3e\x33\x79\x56\x56\x8b\x7b\xb6\x44\xad\x4a\x6d\x4e\x46\x50\x46\xdd\x96\x56\x58\x20\x9b\x39\xc8\xaa\xe7\x68\x04\x48\x2f\x14\x07\x12\x43\x47\x48\x6d\x7b\x1a\x1d\xc1\xdc\x66\x35\x77\x8f\x23\xea\xa8\xad\x47\xd1\xf7\x51\x36\x46\x03\x3a\x9c\x3f\xd8\x52\xb8\xea\x4d\xc0\x1e\x3e\x14\x07\x4a\x2f\x59\x7a\x6a\x3c\x9a\x04\xea\xb1\xfe\xdc\xf9\x7d\x14\xfa\x22\x4e\x3e\x1f\x9b\xe8\x84\x3d\x7d\xa2\x81\x94\x81\x86\x4e\x3f\xae\x40\x58\x58\x28\x0e\x24\x86\xab\x97\x4b\x81\xa2\x73\x97\xc8\x3c\xcd\xe5\x7b\xf6\xe6\xee\xa2\x3e\xe2\xb1\x48\x19\x39\x83\x8f\x0e\x0e\xde\xb4\xae\xb6\xb1\x00\xa6\x3f\x14\x07\xea\xad\x4e\xae\xca\x71\x42\xba\xd8\xc4\xa0\x06\x05\xe3\x36\xdb\x32\xcd\xe3\xf1\xa0\xe6\x27\x34\xe2\x57\x2a\x7c\x4b\xd6\x79\xc2\xfa\xc0\xb3\xc2\x50\x13\x8b\x9b\x62\xa8\xe0\x77\x49\x3c\x1a\xad\xae\x23\x66\xa2\xee\x78\xf3\x7e\x34\x53\xcc\x8c\xdb\xda\xd8\x12\x2e\xea\x8d\x9f\xa5\xfc\xeb\xd9\x64\xa0\x6c\x3e\x14\x07\x12\x03\x2f\xab\x29\x7f\x87\x34\x8b\xb1\x84\x73\xd6\x27\x93\x11\x46\x93\xc9\x90\xc9\x71\xe7\xb0\xb4\x54\xea\xa2\x9e\x74\x6b\xec\x11\xe0\x9a\x12\x14\x07\x12\x83\xe1\xa7\x71\x8f\x7e\x92\xb9\xa2\xde\xbf\x89\xa1\x53\x01\x63\x1e\xb3\x91\x77\x5e\xce\x33\x65\x29\x0d\xe8\x37\x99\x34\x1d\x4a\xdf\x81\x85\x85\xe2\xc0\x47\x56\x7e\x5b\x77\xeb\x8b\xbe\xc5\x95\x6a\x32\x2f\xaf\xb5\x4e\x67\x09\x6e\xe5\xe5\x9d\x4a\x8e\x18\xb5\xad\xcc\xea\x11\x38\x71\x01\x2e\xee\x41\x71\x20\x31\x78\x12\x2a\xeb\x24\x2e\xd1\x1f\x71\xf9\x6b\x7e\xeb\xa4\xaa\xf2\x48\x19\x4d\xc7\xfd\xa4\xc3\x4d\x4a\xa4\xdd\xa2\xbb\xff\xf8\x3e\x70\xa5\x17\x8a\x03\xf5\xd6\xba\x3d\xd2\xf5\xed\xce\xd9\x3a\x7a\xca\xe7\x3e\x54\xf2\x41\x55\xca\xc7\x5d\x06\x33\xf4\x2f\x19\x38\x06\x65\x3f\xe1\xe0\x9e\xb7\xc1\xc4\x00\x35\xe5\xbb\x29\x86\xea\xa7\xaa\x3b\xfd\x64\xad\xbf\x72\x06\x5d\xe0\x05\xa9\xde\xfd\xb4\x94\x0d\x69\xbe\x3e\x49\xd1\x47\xaf\xc5\xee\xe3\xb1\x09\xda\x86\x75\x18\x8a\x03\x89\xc1\x95\xd4\xba\x24\xaa\xe8\xbc\xa1\x6b\xda\x23\xe8\x70\x12\xc1\x90\x67\x55\x97\x4a\x23\x3d\xfc\x24\xb6\x44\x6a\x95\xa9\x5a\x0c\x0e\x16\x16\x8a\x03\x9f\x52\x40\xde\x94\x33\x6e\x49\x61\x72\x9e\xcb\xb7\xca\xcb\x0b\xb7\x2e\xc4\x23\xdc\xef\x3d\xa1\xd1\xab\x0c\x3b\x2d\x8f\xcb\xa1\x02\x76\xb4\xa0\x38\x50\x7a\x35\x3d\x32\x75\x86\xdc\xec\xb0\xf1\x1a\xc5\xb2\xb5\x25\xc2\xb9\x78\xd4\xb7\x11\x3b\x30\x79\x42\xb6\x88\xe6\x54\xc2\x9c\x6b\x80\xe5\x30\x14\x07\x12\x43\xfe\xcf\xea\xab\x9f\x98\x86\x63\x24\x5b\x65\x59\xf0\xec\xaa\x82\x0b\x5f\x3c\xd6\x58\x3a\xa9\xcc\xbe\x1e\x20\xb0\x17\x0b\x97\x02\xb7\xd1\xa1\x38\x50\x6f\xbf\xca\x7a\x46\xa6\x3c\xf6\x5c\x7a\xae\xf1\x5c\x14\xc5\x48\xde\x5c\xc1\x47\x51\x22\xb4\x96\xa2\x9e\xdc\xbf\x5d\xa8\xc9\xe8\x4e\x20\x4c\x0c\x50\x93\xf1\x9b\x62\x50\x37\x46\x8a\xda\x6a\x85\x53\x5b\x51\x64\xae\x58\x59\xc1\xec\x54\x54\xbe\xe7\xf1\x17\x7d\x9e\x43\x66\xbb\x38\x40\xe6\xc0\x0c\xf8\x65\x80\xe2\xc0\x3b\x5a\x52\xbc\x93\x92\xa7\x63\xf2\x5b\xd9\x8b\x29\xa7\xec\x45\x85\xe5\x77\xdd\xad\xcf\x0c\x44\xa6\x2c\xc9\x4c\xdf\x4a\xe3\xb7\x00\xa7\xce\xa0\x38\x90\x18\x84\xf1\x25\xc3\x73\x93\xbc\x1b\xe4\x94\xce\xb5\x30\x90\xe4\x14\x37\xeb\x9e\x4b\xf9\x92\x26\xd9\x10\x47\x98\xb1\xb2\x4d\x7a\x01\x6f\x28\x40\x71\xa0\xf4\x32\xce\x8e\xac\xb9\x3b\x2a\x67\xcc\x05\xbe\x72\xf3\xcf\x27\x5c\xfb\x1e\x1c\x71\x9f\xe4\xa7\x65\xb2\xe3\x37\x8e\xd4\x48\x4a\x59\x60\x67\x1e\x8a\x03\x89\x61\xa0\x6b\xf6\xa8\xe2\x2f\xc9\xdb\x51\x8c\x14\xd3\x9d\x6d\x22\xdf\xbe\xd5\x12\xa5\x4e\x75\xbb\xec\x95\xd8\x8a\x3f\x72\x27\xb1\xff\x79\xf7\x16\x82\x03\xf5\xb6\x32\xa9\x27\xeb\x63\x64\xe3\x6b\x8f\xf3\x71\xe5\x4a\xfa\xce\x5f\x4f\x2a\x55\x54\x50\x23\x3e\xd9\x5f\x10\xd1\xd0\xdb\xb4\x90\x93\xc3\xc4\x00\xb5\x4c\xba\x29\x86\xb9\x1a\xa4\x2b\x81\xaf\xed\xc3\x55\x29\x93\x58\xf7\x99\xe2\x2a\x76\x59\x4f\x24\xd5\x7d\x85\xa2\x0f\xe9\xa2\xe2\xb3\x5c\x02\x81\x51\x18\x8a\x03\x89\x81\x27\x04\x79\xb9\x96\xe1\x97\xb3\x95\x89\x17\x31\xad\xdf\x77\x8e\xf2\x92\x60\xae\x52\x16\xcf\x6d\xda\xd0\x6b\x2c\xdb\x0b\x17\x7f\x58\x58\x28\x0e\x5c\x72\x87\x9e\xd3\x8b\x25\xde\xa6\x25\xbb\xd4\x8d\x8d\xae\x2c\x15\x5d\xde\x9a\x8d\xa6\xc0\x17\xeb\x2c\x60\x42\xad\x43\x71\xfa\x0d\xf0\x86\x29\x14\x07\xde\xd1\x0a\x70\xba\xeb\x26\x1b\x3f\x66\x22\xad\xeb\x20\xf5\xcc\x61\x2c\xd2\x8c\x5b\x20\x73\xce\xe3\x7e\xe9\xf7\x65\x0d\x46\x3b\x0e\xa0\x84\x35\x14\x07\x12\xc3\x4b\xbd\xa7\xc9\xea\xd1\x23\xcf\xd5\x91\xea\x05\xa2\xc8\x76\x4f\x5e\x77\x25\xde\xa1\xe9\xab\xbf\x2a\x88\xff\xe4\xfc\x2b\x5f\x15\x78\x6f\x08\x8a\x03\xf5\x56\x8d\xed\x79\xef\xf2\xbb\xd7\x28\x67\x3c\x16\x03\xbf\x73\x8b\x15\x69\x14\xf8\x62\x71\xf9\xd2\xee\x3f\x1a\xba\xbf\x15\x94\x34\xee\x0b\x6c\x6f\x42\x2c\x60\x6f\x8a\xe1\x48\x18\xad\x60\xe2\x88\x90\x66\x30\xeb\xce\x33\x78\xb9\x40\x45\x6d\xfe\x51\x35\x8e\xf4\x5c\x8d\x6e\xd4\x5e\xb5\x80\x82\x0a\x1b\x58\x87\xa1\x38\x90\x18\xf2\xfa\xf9\xea\x06\x1f\x58\x6f\x18\xe4\x71\xb0\x85\xd4\xa4\xbe\x83\x9b\x7c\xe6\x9b\x9a\x28\x3e\xfd\xf1\x47\x04\x89\x5b\x7a\x0c\xf0\x9e\x3b\x14\x07\x12\x03\x6a\x66\x6c\xe2\x1d\x67\xbe\x52\xf5\x52\x4e\xb6\xb2\xd7\x4b\xc7\x87\x96\x31\xf7\x45\xe8\x6c\x96\x67\xbc\xaa\x45\x2b\x8f\x4e\x81\xdb\x52\x50\x1c\x28\xbd\x5e\x2f\x0e\x49\x0f\x66\x7d\x0d\xb2\xa3\xae\xef\x9d\x06\xd8\x21\x1f\x94\x2a\xcc\x10\x04\x1a\x33\x57\xbb\xbc\xf1\x2e\x12\xaa\x63\x85\x85\x85\xe2\x40\x62\xb0\x57\x98\x5e\xcd\xaf\x10\xf8\x66\x43\xda\xf0\xa2\x43\xfc\x84\xb9\x1a\x83\xe8\xfb\xdf\x5f\x6d\xdb\xd3\xc6\xa3\x62\x67\xba\x4f\x80\xa5\x25\x14\x07\xea\x6d\xb5\xe8\xdc\x8a\xfd\x29\xbb\xe7\xb4\x79\xa9\x7b\xe4\xcc\x3d\xeb\x34\x4e\x38\xdd\x12\xc6\xae\x81\xf2\xec\xcf\xc6\x9d\xde\x79\x74\x80\x31\x0d\xb5\xa5\x08\x7b\x63\xba\x1f\xbc\x0f\x22\x63\x82\x99\x8d\x90\x6c\xfa\x3b\x56\x27\xa2\x5f\x66\x77\xee\x14\xdb\x4b\x79\x7a\x51\xdf\xd0\xbd\x93\x4e\xeb\xa0\x9d\xae\xef\xfc\xf6\x5b\x2f\xd3\xe0\x26\xbb\x4b\x2c\x73\xe7\xa9\xba\x87\x39\xba\x2e\x68\x18\x68\xdf\x9a\xe1\x93\x66\xe0\x4a\xad\x5b\x36\x8c\x61\x4f\xfd\x20\x6c\x5f\xee\xbd\x7d\x93\x67\xe0\x26\x55\xbe\xc7\x5c\xa0\xc8\xf8\xab\x99\xac\x13\x56\xbe\x2f\xd5\x2f\xff\x1e\xd9\xf5\x75\xfb\xe4\xfb\x9f\x59\x82\xfc\x56\x7b\x0b\x78\x92\x7f\x67\xb7\x07\x2a\x97\x37\x3f\x49\xec\xb5\xc1\x9f\xfb\xce\x42\x45\x83\x57\x17\x70\xf5\x0a\xe8\x4a\xe4\x66\xf8\xe7\xe8\xfe\xba\xf9\x51\xe1\xad\x11\xa9\x51\x13\xc0\x53\x0b\x50\x1c\xe8\x93\xec\x9a\x3b\xeb\x7a\x5c\x17\x1b\xaf\x44\x26\xc2\x58\x8e\xf6\xa4\xfc\x6d\x8c\xdb\x53\x7f\x4f\xee\xf3\xbf\x63\xe4\x1f\x56\x5f\x78\xc3\x03\x67\xff\x20\x38\xd0\x27\x69\x21\xb0\x16\xf5\x81\x16\x93\xeb\xb7\x9d\x9c\xb4\x98\x05\x8e\xef\xe6\x69\x6e\x3d\x39\xdc\xe4\x9f\xcd\x62\xe1\x20\x25\x59\x73\xe0\x9c\x3c\x14\x07\x9e\xc6\x0f\xd6\x3c\xb1\x15\xcb\xe1\x93\xf3\xfc\xd2\x12\xe1\x7a\xf5\x7d\x46\xe5\x69\xc7\x27\xc1\xaa\x11\x74\xb1\x94\x8d\x8e\x53\x8c\x58\x60\x1a\x0f\xc1\x81\x3e\xc9\x73\xa6\x60\xc1\xa8\x7d\x5f\xa3\xc9\x7d\x09\x51\xf5\x23\xfe\xac\x40\x75\xf8\x8a\xa9\xf6\xf8\x37\xc5\x9d\x99\x5b\x1e\x3f\x9e\xf2\xc1\xc2\x42\x71\xa0\xde\xfa\xdc\x3d\x2f\x8b\x6d\xff\xf1\x4d\xb8\x79\xe3\xa2\x9a\xb7\x96\xcd\x93\xf8\xe8\x17\x2f\x5d\x77\x7e\x67\x95\xff\x02\xed\xa3\x6d\x65\xd8\xef\x33\x94\xca\x6f\x8a\x21\x5a\x5f\xfc\xfd\xbc\xde\xcc\xcc\x7a\xc7\x45\xa0\x6e\x34\xbb\xf9\xce\xc3\xe7\x94\xec\x85\xc8\xe7\x3c\x06\x4b\xb1\xb8\x72\x5e\xc0\xfe\x09\x14\x07\x12\x43\xb7\x65\x6f\xba\x93\x79\xfd\x65\x9c\x6f\xef\x32\xad\x2a\xce\xd5\x85\x74\x2f\x93\x97\x25\xf6\x3a\xff\x85\x06\x0b\x99\x78\x26\xf0\x43\x0a\xc5\x81\xc4\xf0\xea\xde\x0f\xe2\xbc\x0f\x31\x11\x82\xda\x36\xdb\x64\xd9\x78\xeb\x04\xb4\xb4\x19\x19\x53\xa8\x17\x43\x3f\xe4\xdf\x34\x5e\x31\x03\xfb\x27\x50\x1c\x28\xbd\xc7\xa5\x6c\x94\xbe\xbc\x3c\xbc\x66\x79\x88\x59\x3d\x0b\xef\xe4\xf5\x24\x2f\x32\x72\x5f\x30\xa9\x08\x88\x33\x6f\x66\x9c\x9a\xae\xc1\xc2\x42\x71\x20\x31\x10\xb8\x77\xbb\x32\xc5\xa1\x73\x3e\x1a\x31\x6a\x32\xe4\xc0\xbf\xfb\xd0\xb9\xeb\x0f\x36\xb7\xf2\x91\xe2\xcf\xd2\xd3\x65\xad\xd7\xda\xb0\xb0\x50\x1c\xa8\xb7\x53\x9c\x87\xec\xb8\xba\xfc\x2f\x03\xfc\xa4\xc7\xf2\x90\xd0\x77\xa3\x4c\xca\xa6\xde\xfd\xe8\xd1\x69\xf9\xed\x71\x28\xce\x12\x65\x02\x13\x03\xd4\xef\xcf\x4d\x31\x64\x51\xdb\x05\x04\x05\x96\x36\xd7\xfd\x6d\x4c\xcc\xa7\x7e\xc0\x87\xaa\xad\xe2\x6c\x53\x7f\x97\xc9\xc7\x97\xbc\x4d\xdc\x73\x16\xa8\xee\x08\xc5\x81\xc4\xf0\xf5\xda\x56\x7a\xa1\x55\xed\x37\x0f\xd5\xee\x92\xfd\x2b\xeb\xcf\xb3\xee\xd2\xc5\x42\x7a\x53\xed\x46\x67\xaf\x4a\x4a\xa3\xb7\x00\x4f\x16\x8a\x03\x89\x21\x9e\x6a\x96\x62\xbf\x95\x3c\xaf\x2a\x8d\x2d\x71\xd2\x9f\x15\xc1\xe1\x8f\x98\x1a\xce\x76\x05\x27\x83\xfe\x64\x98\xb8\x46\x03\xb0\x37\x05\xc5\x81\xd2\xcb\xc4\xa8\x93\xfd\xed\x64\xa0\x37\x78\x08\xef\xf5\x56\xe5\x05\x2d\xfb\xbe\x4d\x4b\x36\xd6\x6f\x05\xf8\x9d\xda\x8e\xb2\x34\x2a\x60\xd7\x1a\x8a\x03\x89\x21\x93\x51\xf9\x65\x28\xba\x96\x22\xd2\xcf\x28\x65\x07\x1e\xca\x73\xba\xfe\x27\xd2\x8e\x03\xd3\x4d\x17\x05\x7d\x4d\x1f\x42\xa8\x01\x43\x16\x8a\x03\xf5\x76\x27\x50\x59\xce\x8b\xfb\xfd\x03\x01\x7b\xf8\xd8\x03\xf4\x00\x35\x59\x95\x37\x42\x3a\x7f\x50\xbd\x22\xd0\x71\x7b\x6a\x74\xdf\x9c\xc3\xc4\x00\x65\x45\xfe\x97\xdd\x9e\x1d\x19\x38\xfc\xa8\xef\x88\x7b\x3a\x7d\x8e\xeb\x6f\xc2\x6c\x66\x07\x5d\xca\xd0\xa7\x7b\xe2\xc6\xd7\x4a\xf0\x59\xfd\xa6\x81\x2a\x58\x50\x1c\x48\x0c\x25\xac\xa8\x34\x98\xcf\x06\xde\xed\x8d\x5c\x46\x98\x28\x27\xa8\x9a\xab\xe9\x8a\x34\x05\x39\x36\x7c\xfd\xd2\x23\x54\x45\x9e\x64\x02\xdc\xff\x82\xe0\xc0\x4f\x3a\xa6\x7f\x40\xef\x25\xca\x88\xf6\xe9\xb1\xe5\x7a\xf5\xc5\x99\x4a\x16\x59\xb2\xc8\x40\x49\x24\x70\x58\x3b\xb9\xa5\xa2\x3e\x03\x08\x0b\xc5\x81\xd2\xab\xb4\xcc\x95\x8b\x43\xc8\x75\xb8\xe8\x20\x4e\x6c\x58\x76\x25\x27\x13\x69\xec\xe0\x42\x46\x48\x96\x6a\x14\x80\x33\xd5\xa6\x03\xec\xd1\x41\x71\x20\x31\x30\x14\xea\x39\x9b\xda\xf3\x4e\x8a\xbf\x12\x7a\xa5\xcc\x11\x13\x5d\x67\x51\xde\xb7\x15\x62\x62\x87\xd9\x51\x24\xed\xbe\x5d\x27\x04\x18\xd3\x12\x62\x3d\xd3\x92\x39\x72\x6c\x7d\x73\x41\x98\x2b\x2b\xd8\x8d\x7c\xee\x18\x0f\x59\xea\x9c\x1c\x57\x19\x83\xd5\x22\xe8\x96\x69\xfe\x69\x4c\x6b\x1c\xf9\x23\x99\xbd\xf5\xd6\x7b\x57\x1d\x6d\xf4\xa7\xd1\x8e\x74\x78\x5d\xa8\x32\xd6\xd4\xaf\xf6\xa0\x95\x04\x59\x87\xf1\xc4\xed\x1f\x28\xf9\x86\xe6\xee\xc1\x43\x03\x3c\xb3\xd3\xcf\x6f\xec\x75\x3e\x19\x3b\x77\x85\xf6\x7a\x78\x24\x33\x2d\x62\x90\x7e\x51\xeb\x4d\xba\x0b\x32\xa6\xa1\x22\xdf\x34\xa6\x97\xc5\x5c\x24\x0e\xd5\xbf\x2e\x9c\xeb\x28\x93\x61\xd8\xea\x23\xb0\x7a\xd1\x79\x0f\xfe\xd5\xb5\xc2\x44\x92\x8b\xb3\x50\x43\x9c\xff\xe7\x36\x68\xaa\x6d\x48\x79\xf6\xcc\x55\x88\xfa\x9e\x06\xa1\x83\x7e\x47\xb6\x52\xe9\x7b\x1c\x09\xce\x1c\xee\x9d\xbb\xde\xc3\xde\x85\x70\x80\x31\x0d\x15\x13\xf6\xc6\x34\xc8\x98\xc6\x69\xef\x43\x34\x59\x7b\x50\xf0\xec\x6b\xf1\xa3\xd0\x52\x7d\x84\xe6\x07\xf0\xce\xa4\xaf\xab\xe0\xcf\x75\x77\xa8\x3b\x0f\x6b\xb4\x6f\x6d\x4c\x0b\x81\x8d\x69\xad\xaf\x13\x8f\x09\x59\x4b\xc9\x19\xa2\x29\x4a\x1b\x4b\x16\xab\xdc\x49\x51\x0a\x7f\xa2\x3c\xc5\x7c\x80\x71\x4f\xc0\xb5\x52\x0c\xe3\xd6\x73\x4d\xa1\x1b\xc6\xb4\x29\xc6\xf1\x90\x78\x9e\xb9\xba\xd9\x66\xa5\xba\xc9\x8b\xb0\x33\x1c\xcf\x68\x32\x13\x8d\x78\x8b\xe4\x36\x77\xd2\x90\xc8\xf0\xea\xdb\x37\x79\xc3\x98\xce\x45\x2b\x16\xe2\xc2\x09\xee\xe9\x25\x0a\x3f\x9d\x5c\x77\xb0\x10\x2f\x7d\xbb\x4b\xb3\x50\x22\x97\xa8\xd8\x5a\x28\x71\x9e\x78\xfb\x8a\xd3\x42\x37\x8c\x69\xc4\x89\x8d\x94\x1d\xca\xcd\x34\x61\xab\xa0\x6f\x6d\x49\x05\xcd\x0b\xcf\x0c\x94\x15\x84\x9e\x3f\xff\xf3\x71\xbc\x8f\x3b\xdf\x6c\xef\xf6\x4d\xde\x30\xa6\xd1\x08\x5d\x38\xaa\x15\x7a\x7d\xb1\xde\x56\x33\x78\x38\x69\xf6\xc9\xfc\xae\x5d\x2d\xcb\xa3\x1e\x66\x82\xbf\xff\x3b\x39\x3b\xe1\x5f\x78\xd6\xfa\x86\x31\xfd\xce\x7e\x36\xfc\x1e\xaf\x6a\x02\x4f\xfe\x74\xaa\xc5\x3a\xae\x45\xb2\xd6\xa7\x62\xff\x88\xd2\xf5\xe7\x42\x6e\x3e\x81\xe4\x51\x26\xb7\x6f\xf2\x86\x31\x8d\xa8\x86\x90\x44\xcc\x7f\x98\x24\xfd\x8c\x47\x2c\xc4\x28\xfd\x6f\xe9\x59\x3a\x0d\x51\x61\xd6\x83\xa5\x9e\x1f\x34\xd4\xf9\x2f\x7b\xfe\x9d\xa5\x0a\xd4\x97\x78\x73\x0c\xf2\x2e\xfc\x5d\x4b\x25\xd9\x71\x61\xdd\xaf\x55\xac\x80\x40\x87\x83\x41\xec\xed\x29\x46\x2f\x89\xfa\x90\xa2\xb7\x27\xf3\xdb\x39\x50\x02\x17\x8a\x03\x8d\x41\xd9\x2b\xab\xea\xa4\x44\x9c\x9f\xd0\xad\x1a\x9c\xc7\xcf\xd8\xa4\x1e\xd2\x12\xfc\xae\x1c\x4c\xb0\xc6\x3c\x75\xfd\xed\x6c\x35\x02\x94\xc0\x85\xe2\x40\x63\x90\x1a\x96\x0c\x03\x6b\xcc\x8b\x02\x8c\xfe\xb9\xa2\x4c\xeb\x57\x69\xbb\x23\x25\xc5\xf3\x0e\x07\x31\x66\x28\x4b\xf5\xb6\xeb\x32\x9c\xb0\xb0\x50\x1c\x68\x0c\x12\x97\xe9\xd3\xc3\x7b\x1b\x13\xdf\xf8\xcd\xc7\x62\x5b\xcd\x4b\xf8\xc9\x51\xba\x93\x01\x51\xad\x49\x6a\x42\xcd\x1a\xf2\x36\x26\x50\xca\x1b\x8a\x03\x25\x21\x47\x28\x4e\x93\x0c\x3b\x4c\x25\x8b\x8b\x8a\x7e\x82\x57\x4b\xa9\x53\x11\xfe\x8b\xb3\xee\x84\x59\x90\x54\xda\xd2\x6a\xb8\x09\x70\xc3\x0e\x8a\x03\xf5\x76\xab\xe5\x79\xb9\x94\xc1\x25\xb2\x96\x56\x67\xc6\xab\xa3\x66\xcc\x14\xb6\x70\xe6\xe5\xc5\xf7\x58\x5d\x3a\xe3\x0f\xad\xf6\x24\x80\x87\x66\xa0\x7e\x24\x6f\x8a\x21\xe6\x89\x13\x4a\x72\x88\x2d\xce\x37\xea\x4f\x7d\x95\xeb\x3d\xdb\x64\x64\xfb\x13\x5f\x55\xc4\x86\xef\xbc\xbf\xbb\x7b\x1e\xd3\x09\x6c\xa9\x41\x71\xa0\x3c\x30\xb8\xa3\x15\x52\xf5\xd4\x7e\x8b\x4c\x9a\x67\xbf\x56\x5b\x68\xb4\x61\x5a\xeb\xb1\x56\xc4\xc1\x7c\x31\x1f\x5e\x89\x73\x7a\x7f\x04\xb8\x95\x0f\xc1\x81\xc4\x60\xf9\x68\x26\x7b\x0c\x41\xf8\xd1\xc9\xf2\xd5\xca\x00\x6f\x94\x94\xa6\x1d\x5b\x5b\x05\x7c\xca\x59\x3f\x6e\x43\x83\x31\xab\xf7\x0c\x2c\x2c\x14\x07\x4a\x2f\x1d\x7d\x50\x2f\xed\x17\x78\x2a\x2f\x8e\x8f\x75\x8b\xfd\x25\x72\x99\x59\x04\xf7\x6d\x43\x9f\x85\xd0\x9a\x5c\x7a\x0a\xcd\x45\x59\xc2\xc2\x42\x71\xa0\x24\xb4\x6a\x4f\x1f\x1c\xc6\x3c\x5b\x44\x95\x09\x24\x1e\x4f\xd6\xe0\x37\x30\x16\x78\xd4\x76\x24\x8e\x45\x85\xb3\x67\x13\xbd\xf9\xc9\x10\x16\x16\x8a\x03\xf5\x76\x25\xf8\xab\x6a\x68\x45\x30\x45\xd3\xa5\xcb\xc2\xc2\xe8\xaf\x3d\x2e\x5f\x2d\xde\xe9\xd2\xec\x63\xff\x80\x46\x76\x1a\x51\xdb\x71\x98\x18\xa0\x86\xaf\xff\x32\x3b\xb5\x2e\xb8\x30\xcf\x44\xc0\x39\x75\xd1\x48\x53\xc6\xcd\xf8\x91\x73\xa2\xc9\x72\x1f\x3e\x8f\x2d\x8c\xf1\xe2\x53\xe0\xef\x6f\xe1\xc0\xec\x14\x82\x03\xe5\xc1\x68\xcd\x7e\x76\x5f\xae\xb0\x3c\x01\x07\xb3\x70\xe2\x57\x76\xde\xa7\xdd\xbe\xe9\x8f\x9a\x04\x85\xcd\x99\x97\x83\x49\x1b\x78\xc0\x1b\xd3\x50\x1c\x48\x0c\x3c\x3f\xb8\xd1\x5b\x37\x90\xb0\x9f\x57\x5d\x2b\xe8\x3b\xf5\x4a\xac\x36\xdc\x65\x90\x42\x9a\x0a\x8d\x2c\xe1\x37\x7c\x56\x28\xd6\x02\xec\x5d\x43\x70\xa0\xf4\x0a\xca\x21\x3d\x6b\xd6\xd1\x96\xe1\xe4\x76\x97\x46\xde\xde\xd5\x48\x1e\xfc\xa0\xf3\xa6\x69\x5b\x6d\x3c\x22\xee\x15\xbd\x40\x05\xb0\xa6\x80\xe2\xc0\xaf\xed\xac\x38\x75\x7a\xe3\xc3\x89\x13\x6c\xc4\x3d\xb3\x82\x43\xf5\xbd\xb4\xb1\xf3\xb1\x2e\xe8\xd5\x67\x41\x2f\x66\x87\x1b\x5f\x04\xde\x7a\x83\xe2\x40\xbd\x7d\x7f\x54\xd1\x28\xb0\x98\x56\xd6\x68\xa8\x75\x81\x67\x32\x94\x14\x29\x5f\x82\xd3\x93\xf1\x49\xe1\x38\x0c\xd9\x9a\x88\x17\xe3\x18\x26\x06\xa8\x89\xc5\x4d\x31\x78\x35\x3d\xc4\xb7\xca\x49\x79\x40\xad\x2b\x62\x76\xfc\xf5\x45\x8f\x42\x71\x6c\xbe\x0d\x8e\xfd\x40\xbe\xc7\x47\x91\x54\xcf\xff\x3c\xaf\x0c\xc5\x81\x8b\x3b\xb9\x05\x93\x34\xd8\x7f\xb9\xd4\x59\x77\xd3\xe2\x92\x57\x7e\x4a\x14\x45\xdf\x4e\x4d\x17\xf0\x86\x31\x9f\xf1\x12\x45\xee\x1c\x70\xf7\xa0\x38\x90\x18\xde\xd0\xaa\x7b\xa3\x23\xe7\xc8\xce\x3d\xc6\x4d\x9d\xeb\x26\xa7\x37\x8a\xf2\x88\xb4\x4e\xfc\xb3\x46\x65\xd5\xfb\xb3\xfc\x85\x86\x17\x2c\x2c\x14\x07\x4a\xef\xd9\x1b\x3b\x7f\xfb\x57\xc1\x08\x8e\xa8\xad\x54\x1f\xcb\xe4\xb7\xb1\x9f\x0d\xd5\xb4\xf8\x2c\x45\x3f\x8a\xe2\xd5\x73\xc1\x4b\x05\x6e\xb3\x42\x71\xa0\x24\x20\x49\x45\xf3\x1c\xcb\xf2\x21\x5c\x7d\xdf\x8c\xfc\x66\x19\xf9\x30\xbe\xaa\x63\x27\x70\xb1\x00\xc7\xfc\xd4\x74\xff\x7b\xe3\x00\xa0\x31\x28\x0e\xd4\xdb\x2f\x64\xcd\xaf\xc7\xd9\xa3\x13\x14\x9c\xeb\x37\x12\xf0\x12\x09\x72\xb7\x5d\x5e\xea\x21\x51\x66\x25\x17\x50\x99\xbc\x23\xe7\xeb\x05\x2a\x7d\x41\x4c\xf9\x6e\x8a\xa1\x07\x3d\x79\x2e\xc7\x27\xf9\xad\x40\x68\x9a\x4e\x76\x91\x83\xec\x44\xab\x8e\xec\x1b\xab\x20\x21\xe5\x9f\xab\x7a\xa4\x4d\x88\x80\x4f\x04\xc5\x81\xf2\x20\x12\xa1\xc6\xf8\x77\xec\xcb\x98\x9d\x1a\xd1\x04\xca\x6b\xd6\xe4\x67\x31\x0a\x75\xfe\x24\xdb\x43\x6e\x7a\x9f\xcf\x6c\xdc\x4d\xb8\x61\x61\xa1\x38\x90\x18\x06\xb1\x2b\xbf\x95\x72\x8d\x18\x10\xa6\x14\x17\xe8\x46\x5c\xf4\xa3\x27\x3b\x24\x1c\x0c\xb1\xcb\xf9\x07\x37\x24\xb9\x06\x39\x02\x05\x7b\xa1\x38\x50\x7a\x33\x94\x4a\xac\xbd\x9e\x9d\xa7\x4a\x64\xa8\x0e\x36\x57\x16\x2b\xf4\x8c\xd4\xf1\xf0\x76\x9e\x2e\x6c\xb2\x89\x4c\xe2\x79\x70\x5b\xc3\xc2\x42\x71\xa0\x24\x50\x23\x9b\xaf\xe4\x15\x64\xb8\xa5\x58\x2c\x58\xd7\xbe\x12\x27\x14\xab\x88\x8f\x44\x7c\x2e\xbd\xd5\xf6\xaa\x83\x82\x6f\x4b\x1f\xa8\x8a\x09\xc5\x81\x7a\xdb\x65\x51\x98\x55\x12\xe0\x53\x63\xf3\x09\x4f\xb8\x4c\xd0\x71\xcd\x39\x4f\x01\xc1\x48\x6f\x63\x7a\x37\x78\xc8\x99\xc7\xe4\x17\x0a\x4c\x0c\x50\x93\xf1\xff\xf2\x1e\xd9\x77\x96\x0c\x7a\xb5\xbe\x1f\x68\x89\x6f\x69\x93\xed\x30\xc7\x68\x4f\x9b\xc4\x3f\xf5\x0a\x31\x7b\xec\x7f\xc7\x70\x5e\x5e\x05\xee\x45\x42\x71\xa0\x3c\x3c\xcc\x54\xf4\x93\xdc\x09\xa8\x2c\x3d\xd7\x18\x36\x35\xe0\xcc\x8f\x3c\x6c\xf3\xc2\xb8\x70\x63\xa2\x95\x55\x30\x72\x54\x21\x07\x1e\x40\x84\xe2\x40\x62\xa8\x44\x8d\xdf\x5a\xed\xf3\xad\x57\x64\x3f\xfc\x6d\x18\xcf\x33\x2c\x79\x51\xa3\x5a\xf7\xbc\x17\x39\x93\x21\xeb\x9e\x43\xa3\xf9\x53\xe0\x62\x08\x04\x07\x4a\x2f\x9f\xc0\x83\x92\x3f\x3e\x4d\x53\xeb\x1b\x9a\x1b\x8e\x66\x5c\xc5\xbe\x5f\xd5\xe3\x4b\xc5\x0f\x6a\x3f\xa8\x6d\xbe\x56\x39\x8e\x1f\x87\x85\x85\xe2\x40\x49\xd0\xcd\xa4\x3a\xa4\xa7\xe0\x4a\x19\xe1\x96\xa8\x3c\xb2\xb6\xa4\xf5\xe5\x6c\xd3\xa2\x89\xd9\xb8\x8c\xa5\xb7\x19\xcf\x90\x08\xff\x0c\x9c\x91\x83\xe0\xc0\x47\xef\x48\x3d\xa9\xbd\xfb\x97\x4e\xbe\x23\xec\xb5\x97\xdf\xeb\xfd\x23\x3e\x20\xd0\xf3\x94\xae\x06\x57\x55\x50\xb8\x60\xf3\x1e\x2d\x0d\x4c\x0c\x50\xcb\xa4\x9b\x62\x90\xec\x96\xda\x71\x2e\x9d\xa1\x12\x65\x5b\x58\xd3\x6b\xdd\xfb\x29\xf2\x80\x65\xf7\x5d\x08\x0b\x8b\x42\xde\x3d\xcd\x67\xfa\x18\xa4\xb0\x0e\x43\x71\xa0\x3c\x70\xee\xc8\x30\x7b\x9a\x7f\xb0\x4f\x37\x4e\xa7\x7c\xfc\x68\xff\x29\xb2\x42\x2b\xa5\xa0\x69\xa8\xb5\x4e\x04\xe3\x9d\x07\x13\x7a\x34\xb0\xb0\x50\x1c\x48\x0c\x14\x2f\x51\x0f\xce\x44\x2f\xdf\xbf\x31\x0b\xa6\xfa\xb8\xbe\xf5\x28\x60\x58\xdc\x2a\x5c\x2b\x4e\x7c\x2c\xfa\x6b\xca\x23\x85\x78\xa0\x5a\x14\x14\x07\x3e\xa5\x60\x7b\xc7\xb0\xfd\x69\x5a\xf0\x61\x9d\x81\x75\xfa\x53\x27\xa4\x5f\x4c\xdc\x61\xa3\x6d\x0e\xb9\x54\x99\x38\xac\xec\x85\xb5\xc0\xb3\x17\x50\x1c\x28\x09\x82\x84\xb6\x83\x3c\x5b\xef\x7d\xde\x76\x0a\x71\xb0\xb3\x98\xe7\x79\x58\xc6\x6f\xe9\x5a\xcf\xb8\x51\x4a\xd1\x6f\xcb\x76\x4d\x02\x13\x27\x28\x0e\xd4\xdb\x6e\xc5\x49\x55\x7a\x0b\xed\xcc\x62\x6a\xe6\x51\x16\xd1\x8d\x91\x58\xb6\xc9\x06\xab\xf6\x5d\x8b\x77\x7d\x05\xb2\x05\x71\x1f\x00\x63\x1a\x6a\x01\xfb\x5f\x6a\x29\xec\xa4\x10\x4d\xc8\xfc\x0a\xe0\x44\x61\x8b\x74\x17\xdc\xb8\x34\x6f\x6f\x8a\x21\x9d\xb6\x44\x26\xde\x08\xe8\xbf\xcb\xbf\x0b\x3c\x5e\x03\xc5\x81\xf2\x20\x59\xcb\x2b\x7a\x1d\x9c\x93\x97\xa3\xfc\xf1\x70\xac\xe5\x0f\x32\x83\xbb\x9b\xf8\x42\x76\x62\x08\x66\x44\xb5\x25\xf6\xcf\x52\x62\x40\x63\x10\x1c\x48\x0c\xbc\x5e\xe5\x3a\x3e\x0f\x04\x4c\x88\xcf\x6a\x76\x34\x9c\xc6\x56\x10\xd8\xb6\xef\xba\x19\x74\xde\xc3\x0c\x5c\x36\xee\xe7\x78\x58\x04\x9c\x91\x83\xe0\x40\xe9\x95\xc1\xed\xa9\x0d\xac\x66\x48\xb8\x13\x9d\x27\xf9\x22\x8b\xfe\xe4\x22\x9d\xf5\x5b\x40\xfe\xf8\x6e\x8b\x96\x35\x12\xc6\x50\x3d\x70\xf8\x01\x8a\x03\x25\xa1\xc1\x4a\xa8\xab\xf0\xe7\xcb\xd7\x06\xad\x5b\x09\x2f\xb2\x38\x5f\x16\x1a\xd8\x27\x9f\x4b\x22\x31\x76\x85\x7c\x24\x19\x4b\xce\x02\x2a\x92\x41\x71\xa0\xde\x5a\xba\xaf\x09\x6a\x7f\x8b\x25\x7b\x9c\x4e\x67\x67\x93\x1d\xd9\xa0\x45\xf9\xee\xe7\x2f\xe1\x06\xe9\xe9\x3e\xcc\xa6\xa9\x4c\x0a\x0d\xc0\x98\x86\xda\x52\x84\xbd\x31\x7d\xc3\x98\x3e\x40\xec\x33\x46\xaa\x9c\xab\x75\x33\xa4\xf6\xe6\x6f\x3f\xce\xac\x43\x89\x16\x18\x93\x37\x67\x67\x72\x53\xe6\x27\x62\x38\x50\xbd\xfd\xd6\xcb\x0d\x63\xfa\xec\x2a\x4a\x61\xba\xf7\x0b\xc7\x58\x38\x5d\x30\xb7\x5e\x85\xf5\xf7\xe6\xa2\xc2\x60\x4a\xd2\xc9\x0d\xec\xae\x57\xac\xa5\x5e\xb7\x2f\xc9\x27\x74\xc3\x98\x2e\xe9\x5d\xf3\x14\x18\xb8\xaf\xf5\x98\xb1\xcd\x1a\xfb\x98\x2b\x3a\x61\x10\xf9\xd4\x51\xfe\x4a\xb4\xb1\x53\xd8\xaf\x67\xf3\xa5\xfa\xbf\xb3\xdb\x03\x95\xcb\x9b\x9f\x64\xd2\x90\x8f\x2e\xbb\x5f\x79\x2d\x3f\x3b\x65\xba\xb8\xb0\xf3\x4e\xc2\x01\x8d\xf6\xaa\x87\xf8\x50\xd6\xa7\xd4\x1f\xe2\xed\x08\xff\x79\x35\x06\x82\x03\xa9\xf1\x78\xc9\x3a\x3e\x1e\xc1\x72\x65\x04\x9d\x43\xce\x5f\x73\xd6\x8b\x55\x2e\xae\x2a\x49\x59\xee\xd3\x87\x25\x73\xd2\x15\x5c\x47\x39\xc0\xdd\x83\xe0\x40\x9f\xe4\x4b\x27\x6f\xe2\x72\xbd\x44\x13\x9c\x8d\xa8\x0f\x4b\x7f\x66\xa5\x69\x74\x03\x51\x6a\x5e\x04\x88\xd1\x29\x59\x5d\xf5\x39\x6f\x01\xe7\x4b\xa1\x38\x90\xc8\x15\x4c\x8a\x03\xfb\x5b\xf7\xc7\x13\x84\xa7\xac\x3e\x9a\xd7\xb8\x1e\x67\x12\x8f\xbe\x98\x11\x68\x82\xb3\x29\xe0\x6b\xe1\x5d\xcc\x87\x85\x85\xe2\x40\x49\x10\xa0\x65\x7a\x20\x9d\x4b\x89\x63\x3a\x53\xf8\xb2\xd2\xae\x2c\x59\xe0\x8f\xdd\xfd\x0d\x3e\x86\xa8\x3d\xf9\xd0\x35\xf4\x54\x1a\xe0\x76\x03\x14\x07\x3e\x2b\x42\x8f\x8f\x37\x10\x37\x40\xe5\x91\xa2\x3c\x51\x13\x67\x09\x6f\x97\x31\x77\xdf\x73\xb1\x09\x71\xc3\x27\x5b\x7b\x7f\xe6\x4d\x36\xec\xf7\x19\x4a\xe5\x37\xc5\xf0\xb8\x77\x92\x13\xf7\x64\x04\x4f\x54\xe5\xcc\x43\x9a\x61\xdb\x9a\xa3\xde\xf3\x0f\x4b\x7e\x12\x1a\xbe\x88\x27\x7e\xbc\xda\x1b\xe0\x20\x28\x14\x07\x9e\xb4\xdc\x69\x4a\x3f\x1b\xff\x76\xd8\xda\x38\x15\xbb\x90\x3b\x75\x65\x3f\x16\x7f\x90\x6f\x65\xd4\x39\xa7\x71\x66\x39\x7e\xfc\xc8\x16\x98\xb4\x40\x70\x20\x31\xe8\xdc\x49\x90\x32\x47\x7b\x23\xee\x06\xaf\xc1\x7c\x34\xba\xff\x8a\x81\x76\x65\x7e\x5f\xf8\x6a\xf7\x09\x03\x69\xc5\xfe\xa5\x39\x50\x59\x17\x8a\x03\xa5\xf7\x6a\xfc\x5e\x72\x24\x6a\xf3\x76\xed\x4c\xbe\xbc\xc9\xb8\x13\xd3\xb9\xcb\x27\x97\x07\xcf\xd4\x8d\x9a\x5f\x25\x5e\x49\x88\x26\x00\x55\x53\xa0\x38\x70\x3d\xf3\x3b\x98\x1b\x35\x1c\x7b\x7d\x7f\xef\xdf\xc9\xf8\xa0\x90\xeb\x87\x31\xe7\xe5\x7e\xf7\x0d\xe2\xef\xb1\xac\xb0\x3a\x01\x2b\x5b\x60\xb0\x86\xe2\x40\xbd\xa5\x50\xaf\x59\xb0\x97\x9c\x51\x54\xf0\x78\x4c\xf9\xed\xc0\xab\xb1\x6e\x97\x42\x67\x31\x79\xba\xbd\x8f\x1a\xfd\xaa\x2f\x92\xe4\x2d\x70\xf2\x1c\xe2\xf7\xe7\xa6\x18\x32\x17\x7f\x9d\xa0\xe7\x29\x7d\xe1\x7b\xdf\x9e\xa4\x6c\x95\xd1\xf0\x0e\xd3\x23\x37\xfc\x3e\x5b\xda\x5d\x0b\x1f\x8d\x77\xcd\x2d\xc0\x66\x1a\x14\x07\xde\xe8\xe0\xde\x41\xda\xed\x66\x30\x53\x63\x7b\x33\x29\x7f\x81\x7c\x5a\x10\x52\x93\x2a\xf1\x1c\xf3\x8e\x23\x25\x9b\xaf\xd4\x3d\x53\xa0\x1a\x3f\x14\x07\x12\x83\x17\xdb\xd2\xe3\x42\x66\x74\x97\x18\xbe\xc8\x73\x89\x0a\xed\x14\x9d\x16\xee\x24\xe9\xdd\x35\xcd\xfc\x4e\x2d\x0d\x44\x26\x14\x20\xbd\x50\x1c\x28\xbd\x46\x09\x9f\x77\xf6\x02\xa3\xea\xe3\x11\x54\x89\x1a\x0e\x2c\xa9\xf9\xef\xbd\x5e\x0a\x5e\xe8\x40\xe5\x7b\xe0\x05\x57\xde\x26\x0c\x2c\xbe\xa0\x38\x50\x12\xe2\xee\xfb\x52\xd4\x3d\x08\x38\xd8\x4c\x7e\xd6\xab\xe3\x3c\xa5\x96\xf7\xee\x81\x92\x02\xbc\xdc\xa2\x75\x9a\x81\x1a\x6d\xbd\xfb\x04\x2c\x2c\x14\x07\xea\x2d\xae\x92\x16\x77\x55\xf2\xc1\x62\xbc\xaa\xd7\x4f\x3c\x9c\x61\x47\xb4\x87\x7b\x6e\xc9\x4c\xf2\x03\x8d\xf7\xa3\xb6\x05\xe7\x98\x31\x60\x62\x80\xb2\x22\x6f\x8a\x61\xe3\x41\x75\xde\xd5\x03\xf9\xf3\x02\x7a\xee\xa0\x27\x96\x48\x05\x48\x86\x7c\x4b\x41\xaa\x97\x32\x54\xbc\xcb\x9c\xe3\x6d\x3a\xc0\x0c\x16\x8a\x03\xe5\xe1\xcf\x34\x51\xd7\x63\xe5\x16\xf5\x78\xc3\x3b\xc3\x93\x2d\x51\x34\xea\xf4\xdd\x21\xfd\xa7\x67\x0f\xb4\xe5\xf0\x7e\xac\x64\x38\x02\x3f\x38\x50\x1c\x48\x0c\xf5\xf2\x26\xd7\xca\x66\xf2\xc6\x2c\xc3\xaf\x4a\xa2\xb6\xac\xdf\xa7\xd8\x3f\x5f\x09\x95\x66\x46\xf0\x52\xd0\x2d\x19\xf4\xe5\xc7\x80\x85\x85\xe2\x40\xe9\x0d\xce\xcc\xae\x95\x74\xce\xa4\xca\x13\xc2\x33\x5c\x48\x1d\x6a\x9c\x2d\x17\xb5\xbe\x3c\xe2\xdd\xbe\x68\x77\xa2\x47\xa1\xe6\x03\xae\x8d\x43\x71\xa0\x24\x38\x60\x73\xcc\xaf\xde\x89\x65\x85\xf7\x48\xe5\xd7\xdb\xd6\xde\xfa\x49\x4f\xb7\xba\xf4\xcb\x27\xcb\x00\x0f\x85\xb3\xe5\x37\xde\x7f\x6e\x4c\xe7\x59\x5d\x92\x71\x47\xe7\x3c\xc3\xad\x30\xf0\x42\xf1\x10\x6f\x3b\x37\x1e\x48\xaf\x38\x2b\x64\x43\x14\xf1\xc0\xbe\xea\x73\xfc\xf6\x4f\x63\xba\x50\xec\xdb\x2c\xbf\xc3\xb1\xc3\xae\xd7\x37\x6d\x9d\xca\xb4\x8f\xae\x9c\xd1\x1d\xcf\x6c\x18\xdf\x61\x7f\x2d\x6b\xe5\x12\x21\xf8\xe7\xa3\xbf\x42\x87\x99\xc4\xbb\x83\xc8\xcb\x71\x6b\xb6\x0f\x17\x85\x5c\x54\xbb\xd9\xeb\xf5\xd0\xa2\xc3\x48\x84\x14\x2b\x9d\x5e\x38\x0b\x74\x83\x8c\x69\xa8\xc8\x37\x8d\xe9\x15\x61\x34\x29\x3b\xb8\xc0\x45\x09\xc3\xf3\xd6\xb8\xad\xc0\xc7\x95\x8f\xee\x0d\x1a\x99\x50\xc5\x8b\xb1\x74\xaf\xf9\x1d\xaf\x2d\xfe\x03\x0d\x0b\xda\xe7\x3c\xb9\x4b\x1c\xc9\xec\xe7\x70\x39\x89\x89\xec\xb5\x2c\x54\x30\xbf\xf3\xc3\x1a\x2d\x41\x3f\xb0\x6c\xe2\xa2\xa3\x15\x30\xa6\xa1\x62\xc2\xde\x98\x06\x19\xd3\x4f\x88\xc4\x16\xfd\x0b\x11\x9a\x96\x49\xc6\xe2\x1b\x7e\x08\xda\xd7\x77\xeb\xe9\xf2\x45\x35\x0e\x27\xad\x4d\xe8\xf4\xf1\x0a\x53\xdf\xda\x98\xf6\x06\x1b\xd3\x53\xf5\x28\xc7\x34\xaa\xf3\x6b\x63\x6e\xcf\x24\x8e\x97\x56\x65\x6b\x47\x3f\xfd\x1e\x5b\x0d\x54\x42\x2c\xe9\x77\xaf\x58\x33\xf8\x7c\xeb\xb9\xa6\xf7\x0d\x63\xba\x26\x67\x20\x7a\x9a\x01\x2b\x9d\xe3\x27\x5b\x02\xc6\x6b\x3e\xb6\xb3\x01\x81\x67\x78\xdc\x63\x59\xf7\xf7\x7f\x4c\x11\x87\x1b\x06\xdc\xbe\xc9\x1b\xc6\xb4\x17\x52\x77\x47\xe3\x51\x59\x68\xc6\xb7\x44\xc4\x45\x8f\xe4\xd7\x1a\x1d\x59\xd6\x8b\x3e\xae\x98\x1e\xeb\xae\x4c\x5e\x8a\xdb\xe8\xb7\x6f\xf2\x86\x31\x6d\x1d\x73\x9a\xf7\x68\xff\x68\xf8\x95\xe6\x36\x86\x02\xe3\x53\x6f\x99\x3e\x7e\xc5\x30\xb8\x4d\x95\xe1\xfc\xc5\x5f\x63\xcc\x76\x22\xb7\x6f\xf2\x86\x31\xad\x9e\xd1\x6a\xb2\x3c\xc7\x5a\x32\xc6\xb7\xe9\xe2\x63\x9e\xa4\xb1\x71\x70\xf2\x9b\x87\x4f\x4b\xa7\xd5\x49\x67\xe2\x55\x65\xe1\xdb\xdb\x37\x79\xc3\x98\x6e\x8f\x5e\x1e\x73\x78\x65\xc9\xca\x59\x21\x26\x05\x8f\x81\x96\xb1\x7a\xb9\xa7\x79\x3d\xf0\x9a\xb4\x2f\xd4\x77\xa6\x7e\xef\x64\xf9\xf6\x4d\xde\x30\xa6\x1b\x9f\x49\xca\x8b\x8a\x86\x04\x5d\x53\x6b\x0e\xc1\x09\x2f\x28\xd5\xf3\x50\x52\x56\x92\xb9\xef\x67\x2d\x62\xf1\x07\xff\x80\xc3\xfc\x77\x96\x2a\x50\x5f\xe2\xcd\x31\xc8\xd7\x35\x5c\x83\x8c\x5c\x5d\xc9\xa4\x9b\xf3\xa2\xcb\x50\xaf\xfb\x5b\x9d\xf3\x94\xd1\xa9\x2a\xd1\xcf\xe9\xd6\x31\x23\x79\x24\x2e\xd8\xcf\x2f\x14\x07\xbe\x31\x5d\xfb\x53\x52\xfd\xaa\xab\x88\x1a\x7b\x83\x50\x33\x3d\x9f\xf4\xe7\x27\x92\xab\x20\x8a\x2d\xda\x47\x67\xdf\xd4\x9d\xe0\x92\xa8\x80\x1b\xd3\x10\x1c\x68\x0c\x62\xf9\x1a\x73\x9d\x6b\x11\xc7\x27\x46\x25\xdf\x48\xec\x1e\x2a\x7f\xf7\x59\x48\xd5\x56\x17\x79\xd9\xbb\xfe\xa2\xd0\xeb\x1e\x14\x60\x4b\x1c\x8a\x03\x8d\x41\x87\x1b\x13\x4f\x1b\xed\x2f\xc7\x44\x51\x1c\x57\xa7\xdf\x45\x2f\x2e\xeb\x3c\xec\xd6\x79\xa7\xc4\x29\x8e\xd1\xd2\x37\x91\x33\xc1\x08\x0b\x0b\xc5\x81\x92\xd0\x84\x2b\x65\x39\x6c\xbd\x6d\x55\x56\xe5\x48\xa0\x29\x3c\xe4\x21\xf0\x97\x67\xae\x55\xea\x9c\x62\x64\x84\xcf\xd2\x9e\x8b\x0a\x15\x16\x16\x8a\x03\x85\xe5\xf8\x6b\x8e\x34\xc0\x1d\xfd\xad\x2a\xf0\xbd\xe8\x60\x00\x4d\xe0\x01\x37\x3c\xf2\x86\x68\x72\x0f\x07\xc6\x35\xd2\xe4\x23\x64\x76\xd8\x84\x04\xea\x47\xf2\xa6\x18\xbe\x09\xe7\x16\xd2\x98\xc7\xa6\x79\x3e\xe3\xac\x59\xaf\x3f\x5b\x93\x9c\x62\x73\x33\x9a\x7b\xf8\x99\x2c\xde\x18\xff\x0a\x99\xa1\x09\xd6\x61\x28\x0e\xd4\xe1\x2c\x38\x4c\xa4\xbf\x58\x43\xba\xf1\x7b\x63\xed\x1d\xf8\x1f\x5a\xff\xe2\x66\xcb\x47\x6d\x9e\xe0\x2c\xcc\xec\xad\xcf\xa7\xdf\x03\x96\x2a\x50\x1c\x48\x0c\xcb\x3b\xfd\xb8\x2e\x0c\x6f\x33\x0f\xf7\xbf\xbe\x7a\xef\xc1\x42\x41\xe6\x2e\x28\xa3\x66\x59\x0b\x17\x83\x53\xcf\x69\x19\xf2\x1a\x28\xd8\x0b\xc5\x81\xc4\xd0\x39\x38\x31\x2b\x2e\x55\x52\x54\xcc\xc5\xad\x87\xa2\x10\xd9\x26\x8e\xbe\x75\x36\x17\xa0\x4e\x9d\x38\x3f\x61\x12\x4e\x3f\x92\x04\x0b\x0b\xc5\x81\x92\x10\xfd\xa1\xb1\x3e\x74\xb1\xcc\xa9\xb4\x71\xf3\x77\x49\x56\x22\xa7\xc4\x45\xa5\x4b\x97\xca\xdd\xf4\x0b\x65\x5e\xf3\x2f\xe9\x61\xe4\xc0\xf9\x64\x08\x0e\x14\x16\x79\xf1\xb2\xff\xaf\xb0\x32\xd3\x6e\x00\xa5\x98\x27\x95\x0b\xae\x19\x1b\xb7\x48\xe6\xa9\x90\xc9\x76\xcd\xe2\x99\xb8\x47\xe5\x10\x4c\x0c\x50\xc3\xd7\x4d\x31\x3c\x4c\x9f\xf9\x25\x8d\xa2\x2a\x99\xfd\xf9\x78\xd2\xce\xb4\x33\x36\xf8\x27\xe6\xde\xc3\x5e\x9e\x2b\x62\x47\x0c\x15\x81\xea\x97\xc0\xbb\x99\x50\x1c\xa8\xc3\x16\xf6\xad\x47\x09\x42\x7a\xe4\x17\x4f\x85\x4f\x39\x7d\x47\x2b\x03\xdc\xb7\x78\x53\x58\x6d\x3d\x31\x5e\xf8\xfc\xa2\xf1\x9e\x03\x36\x00\xa1\x38\x70\x59\xce\x14\xa2\xd6\xa0\x86\x25\x39\x91\x96\x3d\xb7\xf2\x80\x0e\xe9\xa3\xa2\x3f\x36\xbf\x94\x69\xe8\xaf\xb5\x19\x1f\x44\xa8\xe8\x00\xe7\xb4\xa1\x38\x90\x18\x54\x12\x6d\xa9\x8d\x36\x72\x26\x85\x75\x5c\x2e\x84\xb7\xc8\x5e\x7f\x78\x5f\xd6\x80\x8c\xcb\xbe\xc2\x2e\x33\xc9\x23\x76\x8c\x02\x6c\x62\x40\x71\xe0\xc5\x7b\x9f\xe2\xd3\x8f\x41\xc8\xcc\xf3\xe1\x13\x6d\x1e\x77\xa8\x30\x7b\x1a\xb2\xbe\x1e\x3e\xaf\x2c\xb2\xd4\x65\xb1\x4b\x9e\x58\x2f\x04\x16\xef\x10\x1c\x28\xac\x07\xce\x2b\xad\xd1\x97\xb6\x69\xea\x64\x83\x59\x86\x8b\x2f\xd9\x69\x24\x46\x14\x7f\x04\x77\x8e\x23\x6f\x59\xd9\x1b\xb8\x26\x09\xc1\xc4\x00\x35\xb1\xb8\x29\x06\x96\x9c\xcc\xb6\x93\x3b\x05\xb8\xbd\x73\xeb\x41\xdf\x71\xfc\x16\xbf\x90\xd7\x3b\x13\x08\x12\x54\xe4\x14\xda\x7e\x1b\xed\xc4\xf5\x05\x7e\x78\x21\x38\x50\x87\x35\x53\xfb\x10\xac\xd5\xe9\xea\x58\x5f\x7b\xbd\x3a\x29\x7d\x1b\xe8\xa9\xeb\xb2\xc7\xed\x4f\xd6\x38\x9a\xcc\xd3\xc7\x78\x60\xe8\x06\x5c\x3b\x85\xe0\x40\x62\x28\x32\xbd\x14\xd5\x17\xe2\x25\x28\x0d\x71\x69\x9c\xe3\x47\x1a\x26\x75\xae\xe1\xa7\x68\x78\xf2\xc4\x5e\x21\xf0\xee\xf8\xd5\x31\x60\x4c\x43\x71\x20\x31\x28\x56\x99\x3f\xa6\x64\xbd\x0a\x42\xac\xd8\x9c\xe0\xba\x8a\x60\xd6\x46\x77\xe3\x37\x64\x9f\xc0\x0c\x7c\x9b\xba\xa2\x72\x6c\x0e\xfc\xe0\x40\x71\xa0\x24\x68\x3b\xf1\xb1\x35\x69\x92\x8d\xad\x7f\x47\xc0\x43\x30\xa2\x7d\xb6\xd9\x69\x31\x7c\x87\x84\xd9\x20\x11\x9e\xf2\x11\x96\x43\x2b\x50\x50\x02\x8a\x03\x85\x55\x55\x40\x35\x33\xc4\xd7\xe5\xfa\x48\xc4\x6d\xd8\x6b\x40\x19\x36\x5d\x7a\x30\x6f\x27\xff\x51\xe5\xf8\xd4\x36\x9f\x3c\xd7\x1a\x1d\x26\x06\xa8\x29\xdf\x4d\x31\x60\x48\xe1\x32\x10\x7c\x08\xbf\x7a\xd5\x33\xf9\x0e\xb1\x6e\x7f\xf0\x9d\xd9\x34\xbc\x18\x67\xfc\xa9\xad\xf4\x40\x66\xd8\xba\x19\xe0\xc9\x42\x71\xe0\x4d\x0c\xc5\x8d\x0c\x66\xa5\x9e\x25\x56\xb8\x09\xbb\x52\x49\x46\x76\x9b\x27\x52\x56\x91\xcf\x1e\xa5\xda\x3b\x62\x5b\x23\x52\x3c\x07\x34\x06\xc5\x81\xc4\x10\xec\xb8\xaa\xa3\xe1\xa3\xf0\xb3\x6e\x24\x05\x2b\xef\x90\x92\x7f\xfb\xbe\x06\x4f\xa1\xd1\x00\xae\x00\xbd\x24\x9a\xec\xbb\x7e\xe0\x80\x0d\x14\x07\x12\x03\x9c\x74\xa2\xe2\xdb\xee\xd2\x56\x0c\xbe\x50\xa3\xc7\x0c\x9a\x3f\x86\x2b\x65\x35\xbe\x6c\x52\xa9\x15\x36\xfc\x70\x5f\x1b\x84\x67\x86\x85\x85\xe2\x40\x49\xe8\x0c\x61\x2b\x28\x8e\xa9\x09\x51\x24\xb0\xc6\xe6\x79\xc8\x6b\x2d\x19\x4f\xe6\xa8\xbe\x94\x24\x7d\xcf\xc7\x1c\xab\xb0\x58\x57\x08\x18\x7d\x20\x38\x50\x58\x2f\xe3\x25\xf8\x10\xee\x44\x39\x0b\x1e\x72\xcb\xfc\x72\x9d\x33\x2c\xa5\x3a\x9b\x54\x57\x4a\x93\x3d\x45\xdd\x5f\x82\x5f\x91\x1e\xc2\xc4\x00\x35\x19\xbf\x29\x86\x73\xa2\x37\x48\x15\x1f\xda\xb3\xf2\x15\x2d\xf0\x63\xf6\x91\x29\xb7\x47\xcd\xed\xf5\x53\xb2\x2d\xcc\x2d\x3c\x11\xd7\xcf\x1e\xf5\x02\x17\x85\x20\x38\xf0\x69\x8d\xdd\x72\x95\xd8\xaf\xa2\xa6\x63\x0b\x3f\x90\xa2\x25\xf3\xbd\xf2\xa2\xa2\xc7\xe5\x5f\x7e\xca\x4d\x8c\x28\x33\x2f\xb8\xf2\x01\xfe\x6b\x50\x1c\x48\x0c\x13\x77\x1b\x97\x8a\x89\x86\x57\x0f\x7f\x1d\xad\x49\x55\xf0\x49\x7d\x30\xaa\xe7\x23\xd3\x3d\x47\xc0\x7d\x94\x32\xfc\xc4\x6e\x10\x38\x7a\x07\xc5\x81\xc4\x60\x23\xbc\x87\x2e\xa8\xd0\xfd\x74\x91\xfc\xcc\x96\xc8\xf4\x98\xd2\xc0\x15\x9f\xd4\x9b\x66\x35\x1e\xfe\x29\xfc\xd5\x2a\x57\x78\x10\x2c\x2c\x14\x07\xf6\x22\xcf\x82\xb9\xb1\x48\x4a\xd3\xf1\x5a\x55\x4e\x17\xb9\xa2\x2d\xf4\xc2\xbb\xde\x22\x4c\xac\xd3\xe2\x76\xc7\xa4\xdf\xff\x59\x09\xd4\x52\x80\xe2\x40\x61\xf9\x67\xee\x6f\xbd\x8a\xe6\x1c\x78\x7e\xfe\x64\xfc\x33\xb6\xd9\x38\x81\xf5\xb4\xac\x9e\x4c\x3a\x5e\x8e\x48\x56\x84\x93\xfc\xdb\x4a\xa0\x20\x24\xc4\x32\xe9\xa6\x18\x5c\xb7\xae\x0c\x82\x9a\xf5\x49\x38\xde\x8c\xd7\x10\xe3\x7f\x17\xa6\x6a\xb4\x61\x3b\xe3\x6f\xb1\x9c\xfa\x4c\x51\xcc\x95\xcd\x0e\x58\xbd\x50\x1c\xa8\xc3\x21\xf8\xca\x78\x3c\x43\x32\x22\x01\x58\x11\x2e\x5a\x8b\x41\x14\x9f\x97\x88\x91\x5d\xdf\xf0\x53\x9a\xea\x85\xf5\xad\x73\xc4\x26\xc2\xc2\x42\x71\x20\x31\x78\x50\x55\x77\xa2\x7c\x34\x1d\x96\xa2\x89\x3a\x22\xe3\xdf\xfb\xc2\xe3\x15\x9c\x9d\x37\x4f\x31\x27\xcb\x57\x47\x3e\x7e\xda\x00\xdc\x41\x86\xe2\x40\x62\x48\xd1\xdc\xb7\xfe\xec\x97\xb8\xb0\x75\x45\x17\xf8\x0a\xb1\xb6\x29\xd4\xec\xa0\xa3\x2c\x50\xe7\x85\x20\x6b\xad\x32\xe2\x3a\x26\xf0\xac\x30\x14\x07\x4a\x42\x80\x8a\x9d\xfe\x79\x5a\x04\x86\xab\xe1\x46\xf0\x9c\xf6\xb0\x61\x65\x65\xd2\x0a\xb2\x46\x43\x78\xce\xe3\xea\xb2\x1a\x0d\x55\xa0\xb4\x20\x14\x07\x0a\x9b\xca\x35\x37\xc1\x29\xfb\xde\xa0\x9b\x5f\xaa\x36\x42\xfb\x1d\x8a\x4f\xf1\x0f\x0d\x7f\x35\x81\x23\xcb\x67\xca\xdc\x4f\x7b\xee\x02\x73\x06\xa8\x05\xec\x4d\x31\x10\xa8\x74\x2d\x6f\xad\x68\x5d\x61\xe9\x62\x70\x54\xb3\xe7\x07\x5f\x2a\x21\x8a\xac\x0b\xb5\x49\xb9\x10\x91\x8a\x8d\xe9\xf3\x01\x83\x3b\x14\x07\xbe\x31\x6d\xe0\xcf\xf5\x80\x60\x98\xe6\x45\x60\x68\x8e\xc5\x60\xee\xb4\xf2\x8a\xdb\x84\x20\xcd\xfd\x8f\x1b\x0f\xbf\xaf\x3c\x76\x55\x00\x46\x61\x28\x0e\x24\x86\x47\x4b\x2e\x2d\x92\xf3\x0b\x7c\xba\x0e\x2a\x5f\xf7\x9f\x18\x25\xab\x8d\xed\x58\xae\x61\xf7\x63\x37\xd7\xac\x29\x1b\x6b\x9d\x03\xa5\xbc\xa1\x38\x90\x18\xa4\x2d\xcd\xe2\x3e\x28\x32\x15\x76\x2b\x26\x66\x92\x18\xbc\x9a\xa7\x76\x3f\x79\x91\x46\xbc\x61\xec\xc4\x37\x46\x6e\x36\x71\x51\x0c\x0b\x0b\xc5\x81\xdf\xee\x4c\x36\x25\x97\xe1\x88\x08\x1d\xbb\x3f\xab\x2d\xbc\xc3\xc3\x3f\xfa\x5a\x29\x2c\xa3\x43\x5e\x7b\x28\xdb\x5d\xf4\xdd\xf3\x70\xa0\x96\x02\x14\x07\x1e\x26\x26\xc6\x0d\x94\xc8\xbb\x9f\xec\xee\xdd\xb7\x79\x12\x56\xfc\x67\x77\x6b\x0e\x49\x1a\x49\xaf\x58\xfe\x03\xcd\x75\xa1\xa6\x68\x2c\x60\x4c\x43\x6d\x29\xc2\xde\x98\xbe\x61\x4c\xbb\xf4\x71\x0f\xff\x21\x44\x93\x59\x14\x53\x40\x24\x49\x5f\x38\xc6\x2a\xe7\xdf\x4c\xc1\x4a\xf0\x64\x31\x13\xfc\x71\x17\x8b\xf8\xb6\x77\x89\x03\xc5\xbc\x6f\x18\xd3\x8a\x23\x33\xfb\x31\x3d\xe6\x3f\xf4\xf6\x24\x6c\xea\xdb\x5f\xd5\x5b\x5f\x36\x0d\xae\xf3\x05\xdb\xe1\xf7\x15\x09\xb0\x20\xd4\x38\xdd\xbe\xc9\x1b\xc6\x34\x43\xa3\xcb\x77\x27\xdd\x42\xef\x5e\x1b\xfe\x28\x31\xc5\xc5\x2c\x6e\x4c\x73\x26\x1b\xed\x79\x04\x54\x2c\x7d\x75\x27\xe1\x89\xf9\x7f\x67\xb7\x07\x2a\x97\x37\x3f\x49\xf7\x67\x25\xe7\x9a\x29\x19\x65\xa1\x1a\x49\xfe\xb6\xe7\xd8\x9f\x24\x04\xb9\xbd\x0e\x85\x64\xdc\xd2\x6a\x3e\x0f\x48\xb8\x25\x00\x4f\x2d\x40\x71\x20\xd9\xc8\x2e\xc2\x4f\xef\xb6\xde\x0b\x15\x5a\xfe\xaa\x4b\x7c\x41\x95\xc8\x38\x5f\x38\x14\xfe\x36\xe6\xfc\xfd\xd1\x26\x4d\xbb\x4e\x15\xe0\x77\x43\x71\xa0\x4f\x32\xb3\x6a\xa6\xfa\x65\xec\xa4\xde\x97\xa8\x77\xa3\xc1\x1b\x53\x11\x66\x04\x5a\x14\xc5\x93\x5f\x6b\x30\xd0\x0b\x4f\xa8\xfd\x9a\x81\x02\x6e\x50\x1c\xe8\x93\x0c\x62\xee\xb1\xd0\xb0\x6b\x69\xfa\x8e\x4d\xae\xc5\x3b\xdf\x5d\x23\x7f\xd6\xbc\xaa\xcb\xea\x92\x66\xb7\xf4\xb0\xfc\x1b\xa9\x9a\x31\x2c\x2c\x14\x07\x4a\x42\x73\xa6\xbe\xd2\x7b\x0f\x43\x1f\x83\x18\xaf\x89\x53\xf7\xb7\x45\x94\xa5\xdf\xd4\x7c\x07\x07\x51\xb5\xcf\xd0\xb9\xc9\xf9\xef\x00\xb5\x07\xa1\x38\x50\xd8\xcd\xd4\xef\x73\xaf\x05\x97\x66\xc7\xb2\xea\x10\xea\x5f\xeb\xb6\x5c\xea\xb3\x44\x7f\x79\x2b\x22\x9d\xbc\xfa\x57\x53\xfa\x47\x97\x26\xec\xf7\x19\x4a\xe5\x37\xc5\x40\x23\x7a\x9e\xec\x4d\x78\x75\xdc\x4b\xa3\x2e\x76\x41\xd3\xdf\x06\x57\xd4\x70\x12\x53\xc5\x77\x66\x53\xdf\xd6\xf7\x59\x3a\x02\x38\x52\x08\xc5\x81\x3a\x1c\x88\x11\xa7\x12\x4d\xe6\xc4\xf9\x7c\x4f\x54\x8b\x7a\x1e\xeb\xbc\xd5\xba\xe2\x81\x75\x84\x14\x77\x98\xae\x4d\xd7\xf4\xd4\x0b\x2c\x58\x58\x28\x0e\x24\x86\x9a\x4c\xa9\x80\xb0\xaa\xba\x35\x42\xa3\xa7\x47\x5b\x65\x52\xcc\x70\xc5\xf6\xc5\xc5\x5b\x47\xfc\x77\xe3\x1e\x7f\x51\x97\xdd\x05\x9e\xdb\x83\xe2\x40\x62\xc8\xbc\x7c\x87\x1b\xa9\x35\xf6\x37\x5f\x9f\xb2\x37\xad\x0b\x3f\x3f\x4e\x3e\x63\x76\x8b\x8b\x78\x22\x7f\xd2\x2b\x8d\x68\xeb\xbe\x28\xa0\x31\x08\x0e\x94\x84\x43\x0a\xa9\xc0\x2e\x6a\xaa\x09\x45\xa2\xa1\x50\x03\x9d\xe3\xfe\x27\x0a\xca\x53\x49\x02\x42\xc3\x41\x9c\xbb\x1d\xb4\x6c\xae\x11\xc0\x8e\x22\x04\x07\x0a\x5b\x14\xb4\xb8\x27\x9d\x4a\x9c\xf8\x5d\x5c\xd2\xba\x98\x4b\x1e\x93\x1a\x87\x98\x77\x16\x11\xc7\xff\x4a\x97\x18\x71\x2d\x4e\x23\x0d\x26\x06\xa8\xdf\x9f\x9b\x62\x20\xeb\x60\xf0\x53\xba\x7f\xfd\x39\xf9\x33\xfa\xac\x15\x53\xd9\xb3\x27\xd2\xc7\xb2\xe1\x7e\x06\x6d\xf9\x07\xe3\xf8\x63\xe2\x24\xc0\x05\x25\x28\x0e\x3c\x83\x6d\x7b\xeb\xd3\x4b\x44\xfe\xdb\x61\x5d\xea\x8f\x6d\x70\xed\x83\x27\xab\x19\x5a\x0f\x33\x3f\xbd\xd8\xfc\x91\xd5\x5c\x62\xd4\x08\xdc\x98\x86\xe2\x40\x62\x20\xb7\xc5\x1a\x14\x2a\xf9\x1e\xed\x16\xf8\x45\x71\xf7\x6f\x86\x8a\xec\x69\x61\xe4\x26\xfc\x23\x8f\xbb\x8b\xe2\x17\x0d\x48\x49\xc0\x0a\x14\x8a\x03\x89\x21\x47\xcc\xc7\xde\x41\x67\xa1\x98\xfd\xb4\x87\x6d\x59\x6d\xbb\xe5\xb7\x3c\x63\xf9\x4b\xaf\xaf\x3e\x3e\x8d\x42\x96\x42\x5a\x48\x80\xc5\x09\xc5\x81\x92\xe0\x96\xe5\x03\x67\x1a\x6e\x14\x13\x62\x36\x2f\xfe\x26\xb2\x91\xc4\xa4\xf6\x50\x2a\x9c\x65\x30\x8c\x4c\xbc\xeb\x73\xe9\x2b\x0d\xe0\x15\x3f\x28\x0e\x14\xb6\x70\x5f\xf5\xfa\xc3\x39\x9b\x60\x0f\x73\x7e\x82\x7e\xfb\xf2\xf4\xd5\xdb\x56\xef\x23\x7f\x02\x2b\xfb\x9c\xfd\xdc\xa5\x17\x1e\xf0\x30\x31\x40\x59\x91\x37\xc5\x80\xee\x1f\xe1\xa6\x80\x43\x55\xf5\x57\xa8\xf3\x23\x7e\x2d\x92\xac\x13\x17\xf1\x75\xed\xa7\x13\x09\xff\xcd\x15\x25\xa7\xc5\x7e\x16\x58\x87\xa1\x38\x50\x87\x47\x3f\x63\x8f\x44\x8a\xf3\x87\x52\xf8\x4b\xc5\x46\x11\xdd\xc5\x47\x78\x5e\x33\xb9\xad\xcc\xe3\xd3\x9b\x16\xfc\x2b\x7f\xb6\x1b\x38\xa9\x08\xc5\x81\xc4\xf0\xc3\x54\x39\xa4\xb8\x35\x08\x49\x73\x1d\x25\xd2\xe4\x71\xab\x47\x31\xa1\xcc\xf7\x5d\xf6\x16\x7d\xb8\xd4\xe3\xb4\x55\xdc\x79\xe0\xc8\x0a\x14\x07\x12\x83\xdb\x27\xb5\x1d\xa4\x0f\xf1\xf1\x3e\x8c\xc7\xdf\xf0\x9e\x1e\x74\x1d\xee\xfa\x70\x2c\x25\xf6\x59\xb6\xc9\xfd\x31\xb3\xd7\xcb\x01\x4e\x29\x40\x71\xa0\x24\xb0\x25\xce\x73\x8e\x50\x73\x64\x1c\x53\x32\x5c\x6e\xc5\x28\x61\xb2\x52\xc8\xd7\x13\xbc\x81\x47\x3a\xe5\xfa\xbb\x93\x82\x3a\xc6\x07\x18\xd3\xaa\xe5\x2a\x12\xde\x5d\x1a\x7d\x77\x98\xe4\x4f\x51\x53\xbc\x35\x02\x22\x14\x9d\x8c\xfd\x91\x0a\xb7\xc2\x4c\xda\x15\xba\xca\x9d\xff\x69\x4c\xbf\xaa\xac\x28\x74\x9f\x3b\xcf\x7d\xcb\x4a\x63\xf4\x86\x99\x5e\x30\xcc\x84\xe0\x9e\xef\xdf\xc7\x33\x88\x8f\x5e\x99\x74\xaf\x7b\xe3\xff\x03\xa5\xde\x3a\x21\x63\x6c\x18\x11\x2a\xca\x9d\x29\x91\xe4\x6a\x9b\x55\x55\xc1\xf7\xfa\x96\xdd\xac\xfd\x86\x31\x70\x85\xe0\x5a\x8b\x13\x64\x4c\x43\x45\xbe\x69\x4c\xa7\x55\x56\xf6\x6c\x7f\xb1\xe3\x21\x4b\xac\x28\xa0\x79\xeb\x8f\x71\xe0\x5a\x79\x72\x84\xa5\x11\x6a\x5c\x96\x62\x04\xbf\x55\x14\xf8\x0f\x54\xf4\x75\xaf\xf4\x7a\x49\x26\xa9\x6e\x11\xf3\x07\x1f\xb4\x1c\x46\xf1\x17\xb1\xcb\x81\x53\x7e\xa7\x5e\xef\x32\x75\xb8\xbb\x6d\x1a\x00\x63\x1a\x2a\x26\xec\x8d\x69\x90\x31\x7d\x67\x6e\x9c\x6a\xca\x26\xfa\xda\xcb\xbb\x6a\xd4\x30\x6e\xb3\x34\x01\xf1\xa1\x3e\xbd\x76\x78\x3a\xb7\x03\xee\x72\x11\xaa\xce\xad\xdf\x8d\x11\x6d\x00\x1b\xd3\x1a\x03\x70\xcb\x46\x89\xed\x94\xfe\x62\x36\x03\x1f\xa2\x54\x96\x34\xd4\x99\x1f\xe7\x0d\x1c\xd4\x1c\x59\x3f\xe0\x79\x42\xd0\xdd\x75\xeb\xb9\x66\xc3\x0d\x63\xba\x81\x97\x17\x47\xee\x41\x3c\x9d\xee\x8c\x21\x32\x3c\xea\xb5\xfe\x97\xcd\xd1\x79\xf1\x2d\xd2\x63\x27\x39\x71\xd6\x49\xbc\x9c\xca\xdb\x37\x79\xc3\x98\x36\x5a\xdf\x7d\x92\xb9\xf7\x48\x31\x11\x3e\x48\x2d\xd1\xb6\x86\xe3\x35\x72\x55\x59\x09\xea\xbb\x3b\x33\xd3\x23\x8f\x3e\x4b\x75\xa9\xdc\xbe\xc9\x1b\xc6\xb4\x86\xa6\x4c\x1b\xcb\xf1\x84\x60\xb8\xf5\x44\x7f\x7f\xe0\xc3\xa0\xca\xc3\x3a\x0e\xff\x99\x6b\xe4\x8f\x53\xe2\xcd\xaa\x5b\xbd\xb7\xbf\xbe\xdc\x70\xc3\x98\x1e\x8a\x24\xa9\x0f\x17\x1a\xa8\x16\xdb\x94\x2f\x6a\xaa\xd4\x9e\x4b\xea\x93\x15\x3d\xc9\x24\x2e\x13\x3b\xbd\x5f\xee\xba\xb1\x79\x7b\x97\xb8\xe1\x86\x31\xdd\x91\x55\x11\x4b\x36\x84\xbc\x3f\x15\x4b\x6b\x32\x68\xf6\x5c\x7b\x8e\x9e\xee\x63\x58\x81\x88\xec\x77\x04\x4a\xc5\x6d\x46\xc9\x7f\xe1\xaf\xbc\x61\x4c\xf3\xae\xa4\x87\xf1\x9d\x1a\x5a\x9b\x50\x07\x8f\xf0\xd3\xb1\xf4\xbf\x94\xf8\x5e\x12\xc5\xd6\x6a\x5b\x45\x3b\x63\x63\xa6\x82\xd1\xfc\xef\x2c\x55\xa0\xbe\xc4\x9b\x63\x50\x67\x48\xf0\xca\xd1\x17\xc7\xa0\xd6\x3f\x95\x8a\x6d\x5c\x84\x01\x8d\x0d\xbb\x57\x9f\xdf\x4f\x31\x7c\x35\xde\xfe\x89\x2b\x47\xff\xe3\x3f\x1b\xa1\xff\xff\x1c\xe8\xe7\x17\x3e\x9f\x43\x60\xc7\x47\xb4\x71\x3a\xd1\x9e\xaa\x6c\xf6\x2e\x99\x4b\xa0\x68\x69\x50\x1b\x21\xc3\xc5\x4e\x4d\x54\x18\xeb\x29\xf0\x10\x18\x14\x07\x1a\x83\xc8\x36\x56\x10\x93\xed\x59\xb0\xa5\xc8\xd4\xc3\x51\x49\xaa\xd3\x98\xe8\xe2\x36\x44\x9a\xdd\xd7\xd0\xd2\x76\xc6\x16\xa2\x53\xae\x80\xe9\x13\x04\x07\x7a\xad\x23\xbd\x22\x2f\xef\xe4\xde\xb4\x9d\x1a\x33\x4a\xf5\xde\xa7\x77\x1b\xfc\xe3\xf4\xae\xd1\x85\xfb\xe8\xae\xb2\x5f\xe2\x7f\x24\x32\x3e\x86\x85\x85\xe2\xc0\x37\x53\xba\xca\xd5\x03\x7b\xb4\xc4\xf8\x23\x1a\x06\x04\x66\xef\xb7\x27\x9e\x60\x5e\x13\xda\xed\x05\x5e\xa5\xae\x77\xeb\x5a\xda\xf1\x03\xf6\x13\x04\x07\xca\xed\x8b\xae\x93\x25\x2e\x5e\x84\xdd\xd5\xe0\xa7\x64\x68\xbe\xe3\x8b\x3f\xc5\xdb\xe2\x74\x3f\x2b\x09\x70\xda\x19\x51\xd2\x10\x53\x7d\x83\x4d\x48\xa0\x7e\x24\xff\xcb\x29\x05\xff\xe1\xc3\xce\x75\x96\xa7\x21\x65\x4b\x55\x1c\xbf\x22\xf2\x33\xf8\x35\x75\x62\xcf\x14\x7d\xe9\x1e\xcb\x26\x76\x0c\xc6\x9f\x02\xa7\x14\x20\x38\x70\x29\x6f\xcc\x9f\x94\x7d\x94\x14\xf9\xef\xdf\x34\x49\xd4\x1e\xee\xed\x52\xea\x9d\x4c\xd7\x1f\xcd\x66\xff\xd8\x41\x38\x4e\x96\xcb\x01\xc2\x42\x71\x20\x31\x14\x9c\x1a\xe8\x07\xa4\x75\xd7\x51\x48\x27\xb8\x52\xfe\xde\x73\xe0\x9b\x73\xa4\x39\x5f\xee\x6b\x7f\x71\xf5\xa7\x12\xb1\x70\x18\x11\x16\x16\x8a\x03\xbf\xe3\x23\xd5\xcc\x88\x47\x8d\x6b\x3e\xf8\xe4\xae\xdd\xca\x13\x4a\xfd\x77\x61\x4c\xc4\x34\x7b\x34\xf7\x35\x11\x32\x88\x7d\x49\x34\x81\x92\x5c\x50\x1c\xb8\x7e\xa6\x67\x04\x7d\xf0\xce\xc7\xe5\x65\x73\xec\x2c\xc1\xe1\x4d\xab\xaf\x91\x1f\x3f\x87\xe7\x4c\xf9\x94\x11\x66\x77\x7c\x60\xac\x09\x01\xee\x6a\x41\x70\xe0\x0b\xc8\x31\x1f\xe2\x2e\x90\x8b\xe2\xe5\x2d\x79\x55\xcd\xb7\x0b\xfb\x34\x1a\xb0\xae\x6a\xe8\xa4\xfd\x03\x38\x67\xb9\x8d\x1c\x0d\xa3\x60\x62\x80\x1a\xbe\x6e\x8a\xe1\x39\x5b\x46\x8d\x8e\xb1\x14\x63\x28\xb2\x5b\xb1\xde\xe7\x05\x42\x6d\xe2\x3d\x72\xdb\x67\xd1\xb4\xdf\x9f\xcb\x4f\x30\x12\xd5\x02\x7b\x5f\x50\x1c\xa8\xc3\x0f\xb4\xb5\x70\xb8\xe1\xdf\x4a\xd3\xa5\x48\xa8\x21\x78\xa9\xaf\xca\x93\xb8\x0d\x50\xba\x49\xbe\x70\x75\x7a\xb3\xd7\x60\x75\xea\x0e\x0b\x0b\xc5\x81\xc4\x90\xe7\x4d\xfe\xfc\xb2\xaf\x1b\x8f\xa5\x8e\xf1\xa2\x51\x4d\xf8\xf3\x75\x77\x34\x5e\x39\xdc\x1b\x3f\xa9\x8b\x24\x72\x73\x8f\x71\xe0\x31\x23\x28\x0e\x24\x06\x0c\x11\x77\x6a\xf7\xe0\x68\xfe\x16\x38\xac\x47\xe7\x5e\x3b\x31\xe9\x4a\x8d\xd5\xb8\x3b\x3f\x6a\xc8\x84\x1d\x89\x22\xd3\xa9\x80\x5a\xd3\x50\x1c\x48\x0c\x1b\x56\x9a\x27\x7f\x63\x7c\x13\x28\xd8\x43\xe6\xe4\xc2\x3b\xfd\x5d\x7c\xc3\x95\x7c\xcb\x91\x1f\xfd\xd2\xad\xc8\x2a\xc0\x6a\x07\x1e\x33\x82\xe2\x40\xb9\xfd\x92\x6d\xfe\x36\xc7\x8a\x5c\xfb\xfc\xe5\x93\x47\x3e\x65\x83\xc1\x8f\x14\xad\x2d\x05\xf2\x7f\x19\x79\xd1\xbe\x6a\x19\xa7\x41\x59\x84\x89\x01\x6a\x62\x71\x53\x0c\xe9\x2f\xab\x44\xe6\x11\x03\xdb\x36\xbf\xe0\xb1\xe2\x26\xd8\xf9\x21\x4a\xda\xc6\xf6\x9e\x79\x6c\x49\x64\x13\x70\x25\x7a\xfc\xe7\xa6\x21\x14\x07\xea\xb0\x96\xdd\xaa\xe1\x82\x81\xeb\xf8\xef\x0b\xaf\x0b\x65\x33\x49\xfc\xa2\x66\xad\x13\x95\xd4\xed\x8b\xb7\xb2\x01\xca\xf1\xbe\x8e\x80\xc6\xa0\x38\x90\x18\xa4\x98\xf1\x97\xcd\x34\x9d\xb5\x83\x58\x0c\x59\x8a\xf8\xa5\xbf\x99\x5f\x06\x29\xe6\x51\xa1\x13\x73\xcc\xf2\x37\xb4\x36\x10\x61\xc3\xc2\x42\x71\x20\x31\xcc\x11\x1d\x65\x68\xd2\xeb\xed\x7c\x5b\xfd\x04\x47\x78\xad\xe9\xf7\x70\xf4\xbc\x82\xb7\xc7\x27\x4d\x12\xe3\x72\xa8\x38\x39\xff\x0b\x2c\x2c\x14\x07\x12\xc3\x29\x31\x5a\x76\xac\x2f\xa5\xe3\x9a\x5c\x72\x69\xe3\x35\x46\x10\xb6\x2f\x0b\xda\xd0\x9b\xdc\x67\xa5\x01\x7d\x69\x89\x5c\x61\x40\x29\x2a\x28\x0e\x94\xdb\xcb\x33\x35\xe4\x8f\xf2\x63\x4e\xe5\xd3\xd4\x19\xbb\xa9\x7d\x93\x34\x87\x4a\x1e\xb5\x36\x2d\x3f\x09\x92\x34\xcf\xb1\x57\x36\x3f\x03\xc3\x04\xc4\x94\xef\xa6\x18\x76\xd1\xa8\xe5\x5a\x7f\x38\x70\x7c\xbd\x87\x86\xe8\xe2\x30\x52\x9f\xcc\x93\x01\x77\x8e\x26\xad\x15\xaf\x48\x81\xda\x51\x3c\x7a\x09\xeb\x30\x14\x07\xae\xeb\x2e\xc0\x21\x2d\xbd\x9b\x9a\xf3\x33\xd2\x29\x58\xa4\x82\x95\x60\x8c\xc9\xf8\xd5\x93\x39\x3b\xad\x9c\xa7\x26\x31\x16\x41\x39\xc0\x75\x4b\x28\x0e\x24\x86\xe7\x7e\x75\x68\xf3\xd9\x5d\x2a\x9e\xa8\x47\x0e\x4a\x98\x2d\x7d\x94\x7e\x4d\xd4\x77\x98\x1a\xc6\x91\xe8\x14\x4f\x46\xbb\x0d\x71\x81\xdf\x31\x08\x0e\x24\x86\x91\x16\x67\x7d\xe4\x38\xd7\x8e\x82\x81\xa7\x91\x34\x7b\x15\x9f\xcf\x4e\xa2\xcd\x5f\xa3\xad\x33\xdb\xaf\x84\x09\xa7\x94\x5e\x39\xc1\xc2\x42\x71\x20\x31\x4c\x13\x0e\xf9\xe2\x63\x35\x62\xd2\xfa\x0a\x3e\x62\x10\x91\xa1\xb4\x3a\x13\x6f\xaa\x1f\x23\x97\x09\x5d\x60\xbc\xfc\xdd\x7c\x47\x0c\x16\x16\x8a\x03\xe5\x56\x6d\x3a\x88\x69\x48\x49\xd1\x28\x91\xc0\x1f\x35\x1b\x27\xfa\x84\x60\xb9\x75\x57\x13\x97\x95\x7f\x4c\x72\xa3\x63\x5e\x9a\xd7\x0e\x26\x06\xa8\xc9\xf8\x4d\x31\xb0\x71\x86\x2d\x7a\xe6\xa5\x84\x9b\x19\x4b\x2d\xbe\x64\xb2\xaa\x54\xfd\x99\x2f\x54\x2b\x25\x28\x53\xc2\x9c\x97\xdd\x09\x67\x02\x4c\x72\xa0\x38\xb0\x5f\xd6\x1f\x79\x1c\x70\x44\x49\x72\xed\x8f\x63\xb1\xd5\x17\x4a\xe6\xd5\xfe\x32\xe1\x15\x91\x76\x6b\x6c\xea\x89\x6b\x2c\xfa\x39\x30\x0a\x43\x71\x20\x31\x04\xb4\x61\x14\x0c\x0b\x1f\x59\xcd\x98\xd9\xa8\xaa\xfa\xa6\xa6\xbd\x16\x47\xb3\xfd\x64\x05\x6f\x30\x70\xea\x4b\x74\xdc\xf7\x0b\x70\xb5\xa0\x38\xf0\x43\x90\xa7\x0f\xcc\x83\xac\x2c\x5a\x86\xc5\xfd\x44\xba\xee\xeb\xaa\xa6\x6f\xd7\x48\x89\x63\x5d\xf0\xc0\xbf\x1a\xae\x74\x29\x63\x30\x03\xa6\xbb\x10\x1c\x48\x0c\xa6\xec\xe8\x0c\xed\x5d\x1e\xb5\xb2\xbe\x04\x9f\x28\x42\x8a\x8c\x16\xf6\x28\xf5\x1f\xa9\x4d\x60\xc9\x55\x87\xf9\x37\x91\x33\x03\xa5\x66\xa0\x38\x50\x6e\xd3\x50\xd8\x7b\x1d\xa9\x1d\x5f\xe1\xa3\xb3\xf0\xb0\xec\x56\x58\x63\x46\xfc\xe5\xb7\x0c\xb0\x0a\xab\x57\x53\xfe\x40\x8d\x20\x09\x07\x13\x03\xd4\x32\xe9\xa6\x18\xb0\x78\x4d\xb4\x03\x6a\x88\x7f\xf2\xc9\xa5\x60\xc4\x09\xb4\x7b\xea\x6d\xaa\x5d\x38\xd2\x0b\x65\xf3\x8a\x78\x3e\x54\xed\x61\x2d\x80\x75\x18\x8a\x03\x75\xf8\xbe\xc0\x17\xa5\x27\xe8\x8f\x59\x18\xb6\xea\xe4\xdc\x23\xed\xd8\x9f\x87\xbb\x6f\x7e\xe4\x90\xa6\x61\x8d\x0c\xd8\x97\x74\xea\x05\x76\x8f\xa1\x38\x90\x18\xb8\x2c\xce\xd1\xe1\xe6\xa3\xbe\x1a\xba\x84\x46\x75\x4e\x49\xba\xa1\x5a\xe8\x15\x0f\x56\xff\xa8\x7b\x6b\x1d\xca\x36\x52\xef\xf2\x16\x16\x16\x8a\x03\x89\x41\x6e\xaf\x31\x8c\x90\x81\x8a\xb9\x5a\x12\x4d\x08\xf1\x9c\xbd\x31\xd0\xaa\xb6\x7a\xbe\x03\x1f\x15\x0e\x2f\xbe\x96\x4a\xe1\x29\x70\xbc\x13\x8a\x03\x89\xe1\xc3\x0f\x73\xe3\x78\xdf\xd7\x58\xc6\x73\xd7\x1f\x9c\x7a\xe5\x2a\x25\x76\x54\x1f\xdc\x33\xc6\x25\x0f\x3f\xb4\x77\x92\x09\x2d\xcc\x85\x85\x85\xe2\x40\xb9\xa5\x67\x42\x96\xae\xea\xcc\xcd\x27\xc6\x32\xce\xfe\x9a\x4d\x76\xe4\x52\xb0\x69\x8f\x32\x5b\xbb\xee\x5c\x39\xa9\xb5\x12\xa6\x11\x0e\xbc\xf8\x00\xb1\x80\xbd\x29\x06\xae\xb6\x85\x2b\x83\x57\xfb\xd3\x9d\x81\x3a\x01\x12\x41\x0b\x2c\xb9\x09\x18\x7e\x2c\x86\xea\x07\x5a\xb9\x99\xe7\x2f\x5a\x7c\x80\x02\xbf\x50\x1c\x78\x69\xc9\x1f\xd9\xea\xa4\xf5\xd4\xcd\x94\x35\xa4\x84\x50\x26\x19\x5b\x6d\xa2\x85\xf7\xf7\x04\x26\x9b\x21\xad\x95\x2f\x65\x1b\x73\x0f\xf0\xad\x41\x70\x20\x31\x50\x3b\x4b\x5b\x0b\x4e\x87\x39\xa2\xed\x60\x7e\x92\x4e\x72\xd8\x0a\x86\x73\xa6\x9a\x6b\x7b\x19\x28\xcf\x13\x15\x3c\xe6\x70\x00\x54\xe3\x87\xe2\x40\x62\xb8\xf2\xcc\xb5\x0e\xfd\x7e\xe1\x60\x7f\x17\xbb\x87\x68\xb5\xb2\x48\x25\x5a\x0c\x81\x14\x57\x8d\x36\xc2\xc0\x8b\x67\x2b\x19\x0b\xa8\x9a\x05\xc5\x81\xc4\xd0\x64\x36\xaa\x3c\x98\x8b\xba\x6e\x98\xaa\xa8\x3e\xa4\x18\x65\xb8\xf3\xc5\xd1\x50\x46\x4a\x44\xf6\xd9\xd7\xea\x6f\x96\xe6\x7b\x27\xc0\x99\x67\x08\x0e\x94\xdb\xbd\x77\xcd\xd8\x06\xbf\x67\x3c\x2a\xf4\x76\x95\x54\xce\xd4\x95\xde\x7f\xc0\xef\x41\x78\x9f\x14\x52\xbe\xb8\x35\xb8\xc2\x50\x40\x0f\x18\xd3\x50\x5b\x8a\xb0\x37\xa6\x6f\x18\xd3\xdf\xd9\xe0\xda\x4c\x2c\x13\x59\xc8\xb3\x3e\x17\xfc\xfc\x7a\x28\xfa\xa9\x3a\xbf\xd1\xb2\x74\x4c\xdb\x6a\xb4\x68\x10\xcf\x74\xb6\xea\xf6\x5b\x2f\x37\x8c\xe9\x97\x72\x99\xb1\x49\x6a\x9a\xc2\xc3\x5f\xbe\x5e\x21\x71\xcd\xf3\x8e\xdf\xd9\x5e\xb5\xf0\xb6\x15\xf5\x7b\x98\x89\xd1\x27\x3c\x75\x70\xfb\x26\x6f\x18\xd3\x1f\x3c\x2f\x46\x7a\x4f\xca\x7a\x0c\x24\x43\x30\x96\x55\x9d\x07\x33\x76\xb5\x5d\x71\x75\xb1\xdf\x8d\x2a\xf5\x27\xc8\x4c\x5a\xbb\xfe\x3b\xbb\x3d\x50\xb9\xbc\xf9\x49\xee\xa7\xc8\xc6\xf8\x1d\x62\x33\xaf\x3e\x49\xad\x1c\x10\x52\xa6\x60\x19\x71\x54\xd6\x2b\xeb\xfe\x46\x3b\x8a\x67\xcb\xad\xf1\x13\xa8\x1e\x03\xc5\x81\x64\x43\x8a\xdf\x12\xe0\xdc\xde\xdb\x14\x9b\xb4\xe0\x7a\xbc\x5c\x48\x57\xb1\x45\xa7\x34\x6d\xf8\x64\xdc\x12\x35\x86\xec\x6b\x5d\x2c\x70\x38\x0d\x8a\x03\x7d\x92\x19\x3f\x0f\xe5\x4f\x0f\xbf\xed\xbe\x2e\xfe\x4b\x45\xc9\xff\x7e\xc1\x28\x66\x4b\x2f\x2a\xbd\x82\xe3\x7a\x3a\x51\xf8\x3d\x69\x00\x50\x5e\x18\x8a\x03\x7d\x92\x7f\xe2\x48\x43\x45\x6a\xe2\xb2\x35\x1b\x2d\x63\xdc\xfc\x6a\x29\x45\x32\xaa\x0d\xfa\xdf\xe1\x96\x16\x93\x18\x98\x97\x14\x5a\x02\xab\x03\x28\x0e\xf4\x49\xaa\x63\xa7\x37\x37\x4c\x9e\x7b\xac\xaa\xf4\x87\x79\xac\x94\x89\x74\xe2\x4d\xda\x31\x05\xa9\xdb\xe4\xc5\x5d\x2f\xbb\xbc\x50\xc7\x83\x85\x85\xe2\xc0\xf6\x13\x4b\xd7\x9e\x64\x5b\x6b\xeb\xe7\xd7\xa5\xbf\x87\x7e\xd4\x5b\xad\xb7\x06\xa6\x13\x61\x13\xdb\xc5\x7c\x1d\x7e\x85\xe2\x5a\x71\x0d\xfb\x7d\x86\x52\xf9\x4d\x31\xac\x9e\x95\xf4\x7f\x17\xf6\xee\x79\x8a\xda\x06\x3f\x8a\x9f\x58\xc9\x8c\xef\x21\xfe\x23\x7f\x59\x6e\x1b\xeb\xc5\xea\xd9\x9b\x99\x9f\xb0\x0e\x43\x71\xe0\xb7\xba\x3c\xbf\xb8\x20\xa5\xf0\x87\x37\xfa\x77\xde\x9b\xda\xff\x28\xbf\x20\x65\xba\xfb\xe6\x58\x8a\x9c\xb5\x1a\x1b\x73\x39\x5c\x0b\x18\xa7\xa0\x38\xf0\xb3\xc2\xc5\x74\xaa\xad\x47\x96\x59\x19\x04\x55\x58\x52\x9a\x9d\xac\x1d\xa1\x9d\x6d\xa9\xb2\xf6\x9d\x05\x92\xbd\x7b\x5f\x5f\xf5\x79\xc2\xc2\x42\x71\x20\x31\x20\x44\xca\x2b\x75\x57\xb7\xde\x91\x84\x8b\x70\x7a\xfc\xd1\x32\x1d\xe1\xa3\xae\x90\x73\xb3\xa2\xee\xaf\x18\xba\xa3\xbb\x91\xb8\xc0\xcf\x3e\x14\x07\x12\x83\xed\xe6\xd4\x75\x6a\x5d\xc3\xdb\x35\x61\xdc\xe8\x13\x75\x99\x1c\xe9\xf7\x6c\x33\x5a\x77\xa3\x3f\xc9\xce\x2a\x7e\x0e\x8d\xea\x04\x6e\xd0\x40\x71\xe0\xf5\x32\x45\x89\xc5\x07\xf7\x9e\x18\xc3\x2b\x25\x3d\xad\x61\xa5\x2f\x55\x0a\xe1\x71\xfb\x8b\x53\x8c\xdc\xca\x09\xae\x6e\x19\x8c\x80\x31\x0d\xf5\xfb\x73\x53\x0c\xcf\x0c\x46\x10\x71\x2b\xee\x34\x90\x6e\x8a\x21\x55\x16\x6c\xf9\x7b\x6b\xe1\x7d\x1f\x3b\x19\x20\xa0\x97\x10\xf0\x0b\x0e\x60\x36\x82\x75\x18\x8a\x03\x75\x78\x31\x29\xd9\xf9\x35\x3c\xfc\xef\x53\x07\x46\xc4\x3f\xfe\xac\x08\xa5\x8b\x1a\xce\x41\xb4\x7e\xf7\x5c\xb1\x5c\xf6\x94\x94\xd5\x80\x1b\xd3\x50\x1c\x48\x0c\x34\x64\xb2\x01\xdb\xb2\x14\x26\x7d\xd9\x15\x7d\x2f\xba\xbe\x3e\xea\x35\xfb\x61\x57\xf3\xcc\x21\xf3\x7b\xe5\xda\x04\x7d\xb1\x07\x50\x8d\x1f\x8a\x03\x89\xa1\x55\x80\xa4\x99\x38\xe4\xc8\x9f\x2c\x6d\x25\x94\xe5\xa1\xb8\xd2\x4c\x36\xf6\x65\x51\x37\x35\x4f\xe8\x8f\xae\xfd\x27\xfc\x76\x1f\x60\x61\xa1\x38\x90\x18\x16\x42\x1e\xd5\x9a\x49\x0b\x26\x31\xa7\xe1\x13\xd4\x54\xed\x4d\x9d\x2c\x0d\xd1\x63\xb7\x49\xfc\x14\x7d\x38\x8f\xda\x3f\x68\x18\x03\x0b\x0b\xc5\x81\x72\x1b\x15\xcd\xac\xff\xd0\x33\x5d\x26\x53\x82\x46\x50\x67\x93\xfe\x98\x37\xd5\x32\x87\x8f\xc4\x25\x80\x96\x97\xe9\xca\xc5\x6f\x7a\x0b\x26\x06\x28\x2b\xf2\xa6\x18\x32\x08\x19\x30\x6d\x1f\x9b\x5b\xf8\x96\x6a\xe9\x37\xc5\x99\xe2\x8f\x7a\xb0\x24\xd4\x90\x7c\x19\xb2\x0e\xc4\x2e\xab\xc6\x43\x04\x3c\x59\x28\x0e\x7c\x0d\xe1\x6b\x31\x4f\xf6\x1f\x86\xa0\x17\x6f\x50\xac\x05\x2a\xbd\xae\x45\x95\xf3\x9d\x1a\x67\x2f\x6d\x35\xaf\x93\x16\xaf\x7d\x69\x81\xf4\x42\x71\xe0\x6b\x08\x84\xd4\xb8\x67\x89\x91\x5f\x92\xa4\xa6\x84\x02\x50\x76\x2e\xa2\x4e\x44\xc5\x25\x46\x8b\xcf\xcd\xa8\x2d\xec\x6d\x89\xd7\xe6\x80\x6b\x08\x10\x1c\x48\x0c\xed\x9f\x98\xe6\x8b\xaa\x66\xce\x07\x8b\x0a\x6b\x3d\x9b\x5c\x2d\x8b\x5f\x64\x73\x60\x8e\x3d\x5c\xba\x7c\xd4\x0d\xcf\xca\x96\x0a\x2c\x6c\xa1\x38\x70\x21\xbb\xba\x88\x23\x62\x7a\x34\xb7\x0a\x17\xb7\x30\xd3\x00\xad\xa5\xc6\xf1\x7b\x49\xee\xb3\x41\x25\xa3\x78\xad\x8f\xa2\x32\xe2\x7e\x02\xc6\xf4\xe3\x9f\x43\xee\x73\x74\xeb\x4a\xb4\x81\x68\x4b\x6b\x6c\x15\xbe\xfd\x23\xd3\xc5\xe4\x0b\x54\x35\xee\x62\x25\x1d\x48\x2f\x08\xa8\xfe\x69\x4c\xbf\x5e\xb9\x77\xc6\xa0\x2e\xac\x35\xd7\x5b\xfa\x21\x73\xc8\xcf\x4a\x36\xef\x1e\x6a\x4a\x62\xe7\x56\x51\x45\xbf\x64\x9b\x16\xde\x3f\x6b\x56\x2b\xfa\xe0\xb1\x93\xfd\x08\xfa\xae\x67\xa3\x47\xc2\x46\x16\x4b\x42\x9a\x72\x6f\xf1\xd2\xc8\xe7\x33\x1e\xff\x09\x9d\xfb\x49\x5a\x11\xc8\x98\x86\x8a\x7c\xd3\x98\xfe\x3e\x88\xeb\x96\x1b\x29\xa0\xe5\xb6\xf4\x44\xd5\x61\xbe\xf3\xb3\x96\xf2\xbd\x6a\x4d\x5a\x36\xe1\x7c\x34\x7c\x79\xc9\xda\x64\x87\x7f\xa0\xc3\x7a\xf4\x23\x3b\x44\x05\xf4\x66\xbe\x41\xdc\x58\x82\xd5\xc2\x93\xaa\x63\x02\x96\x86\x8d\x68\x2c\xd5\xbe\xfe\x5e\x14\x67\x91\xde\x8d\x28\xff\xb7\x98\xff\x9f\x31\x2d\x0a\x27\x02\x7e\x26\x58\x5d\xe8\xcb\x7a\x9c\x7d\x8d\xee\x76\xfb\xf8\x14\x43\xf6\xcb\xf2\xbc\xe0\xc6\x6f\xa7\xdf\xfe\x38\x58\x5b\x88\xdd\xbf\x54\x5f\xbd\xb5\x33\x0d\xa7\x00\xbe\x4c\x7c\xf8\x86\x4a\x4a\x24\xcf\xfc\xa4\x1d\xad\xfb\x07\xdf\x54\xf0\x60\x67\xcd\x4f\x55\xcc\x74\xcc\x94\x84\xc0\xd2\x94\x4d\x89\x94\x5b\x4f\x36\xe1\x9e\x81\x27\x9b\xac\x27\x78\x56\x0e\x0e\x48\x0a\xaf\x12\xe3\xc5\x83\xc7\x8f\x72\x1f\x74\x3e\x4b\x18\xdd\x19\x62\xec\xd6\xe9\x34\x9a\x7c\xed\x7b\x5b\x6b\x31\x50\x0c\x4e\x1d\xdc\x64\x0f\x45\xa5\x53\x5d\xf9\xf7\x81\xf9\xf4\x28\x2a\x0b\x0b\x7d\x9d\x09\x84\xd7\xf8\x55\x52\x3b\xad\xd3\xce\x6f\x39\xe9\x83\x63\x6f\x5b\x11\x28\x50\x0c\xce\x1e\xdc\xe4\xfb\x1e\x2c\x6f\x19\x92\x21\x0f\x6c\x73\xb6\xfb\x7f\x1f\x7f\x68\xd2\x1a\x78\x70\x1c\x4f\x96\x30\xc0\xfb\xe1\xcd\x33\xb8\x0f\x74\x56\xb7\x6f\xf2\x1d\xb8\xc9\x05\x56\x0f\xd3\xcf\x94\x96\xef\xda\x88\x52\x1d\xaa\x82\x96\x24\xe9\x08\xb4\xfd\x2a\x54\xfe\xba\xa3\x14\x1f\x1d\xb0\xa0\xb8\x49\xdf\xbe\xc9\x6f\xe0\x26\xb5\x2c\x25\xb4\x4d\x37\xfc\xe6\x7e\xc9\xf9\xd0\x27\xbe\xcd\x45\xe9\xb4\xe8\x96\xe1\x3b\xfa\x1c\x6f\x2d\xac\x2d\x12\x12\x54\x7d\xef\xf6\x4d\x96\xdd\xf8\x2b\x6b\x83\xf2\x62\x29\xcb\xd2\x55\xde\x4e\x98\xa4\x92\x71\x4b\x5b\x57\xa7\x6e\xd1\x79\xa9\x30\x4d\x35\xc5\x5d\xb3\x78\x38\xe4\xfc\x3b\x6b\x15\xa8\x2f\xf1\xe6\x20\x64\xf2\x39\x3d\x65\x5d\xb2\x91\x59\xdc\xd0\x87\xc4\x71\x3e\xd8\xcb\x96\x4a\x4b\xa7\xf5\xbc\x6a\x63\xd5\x05\x59\xfc\xfb\xc3\x89\x25\xd8\xef\x2f\x14\x07\x1a\x84\x6a\xe0\x76\x26\x3e\xbe\x19\x21\x17\xb7\xd6\x8c\xc6\x72\x56\x7e\xe0\xe7\x2c\x12\xd9\x29\xc1\x41\x70\xe2\x99\x11\xe4\x4a\xd2\x0a\x38\x3a\x50\x1c\x68\x10\x72\xc9\x0d\xb8\xef\x43\xbc\x6c\x19\xe2\x65\x89\x91\x62\xa7\xb7\x6c\xbe\x13\xe7\xb6\x2c\x9d\x89\x32\xf8\xf4\xed\x4c\x41\xd8\xfd\x6e\x58\x58\x28\x0e\x34\x08\xe9\xd6\x11\x04\xfd\x3e\x60\x23\xd6\x7f\xeb\xb8\x98\x14\x42\xf5\x12\x3e\xea\xc7\xbe\x8d\x44\x67\x69\x80\x5a\x51\x8f\x88\x5f\x40\x18\x60\x21\x43\x70\xa0\xb0\x1a\xcf\x7d\x76\x12\xb2\x37\xd2\x2f\xcc\x37\x72\x8e\x8b\xc9\x0b\x22\xc9\x11\x69\x45\x3f\xa0\xd6\x74\xb4\x71\xa2\x7f\x7d\xf0\x30\x14\x16\x16\x8a\x03\x3d\x53\xa1\x75\x01\xb7\x9e\xe1\xff\x7a\x06\x17\xf1\x99\xc3\xdc\x10\x53\x01\x76\x0c\xf3\xca\xc8\x45\x80\x0c\xbe\xcb\xcb\x6f\x8d\xe7\x25\x3a\xc0\xc5\x48\x88\x1f\xc9\xff\x62\x46\x86\x58\xff\x89\xbc\xb3\xff\x15\x69\xfd\xfb\x18\xa9\x30\xad\xfc\x58\xee\x23\x32\x82\xc4\x15\xa5\x8f\xa4\x9f\xff\xf8\xd7\xb6\x01\x17\x44\xa1\x38\xf0\x4e\xe8\x24\x33\x1c\xc1\x1b\x85\x3c\xed\x91\x94\xa1\x65\xac\x42\x81\xaa\x23\x2a\xca\xfb\x38\x51\x62\xdd\x97\x9a\x61\xcd\x91\x92\xc0\x09\x3c\x28\x0e\x24\x06\xd9\xde\x4f\xdd\xd2\x04\x67\xeb\xe6\xb2\x2a\x77\x66\xb4\xec\xef\x4a\x3f\xd0\x22\x50\x50\x2c\x1c\x59\x6b\x6c\x51\x30\x30\x8e\x01\x9e\x84\x81\xe2\x40\xff\xb5\xe9\x42\x1b\x44\x3d\x42\xe3\x98\xb8\x2f\xf3\xad\xf1\x2a\x36\x75\xeb\x33\x67\x94\xa3\xd5\x38\x21\xa2\x56\x38\x6a\xd5\xfd\xda\x19\x80\x37\x00\xc1\x81\xc2\xb6\x69\x5f\xae\xb1\x14\xfa\xbf\x3e\x88\x0c\xff\x36\x31\xa7\xe6\xf8\x32\x6c\x8a\xcc\x9e\xd9\x6e\x8d\xf5\xff\x61\xed\x2f\xa3\xba\x08\xda\xc7\x7f\x9c\x6e\x10\x24\x24\x25\xa5\xa4\x43\x4a\x90\x14\x09\x95\xee\xee\x6e\x54\xba\x91\x96\x10\x41\x41\x04\x04\x45\x52\x3a\x14\x44\xba\x05\x51\xba\xa4\xa5\x1b\x24\xff\x4f\xbe\xef\xfd\xdf\xbf\xe5\x3e\x67\x3e\xe7\x70\x3f\x7f\x9d\x6b\xf6\xec\xbe\x66\x77\x76\xae\x99\x6b\x2e\xe4\x1d\x46\x0e\x43\xcd\x10\x61\x41\x1c\x4c\x86\xed\x02\x9b\x29\x52\xc6\x68\xb7\xf0\xb1\xfb\xb5\xbd\x2a\xd5\x74\x25\x68\x9f\x2b\xeb\x8f\x14\xa5\x2e\x72\xf8\xaa\x3f\xf3\x46\x8a\x20\x64\x00\x7d\xbe\x2e\xcb\x50\xa2\x56\x32\x15\x14\x68\xcd\xbf\x64\x29\xd7\xa8\xa4\xd4\x22\x8d\x51\x83\x2d\x7e\x17\x7d\x47\xe4\xb6\xfc\xd6\x84\xe1\xf0\x06\x34\x32\x03\x71\x30\x19\x30\x5f\x92\xfe\xf6\x5e\xf1\xef\x7d\x78\x8c\x9f\x52\x5c\xfd\xd5\x98\x6d\xbb\x51\x53\x53\x7c\xea\xe5\x6e\xb6\xd4\x39\x3d\x5b\x03\x34\x4c\x07\x71\xf0\xa3\x64\x49\x2a\x1f\x7e\x08\x8b\xe0\x92\x15\x78\xa6\x58\xd8\xf0\x41\xb9\xf1\xb6\x61\x82\xca\xa6\xb3\x64\x0c\x13\x49\x62\xbe\x8e\x2f\x03\x22\x2c\x88\x83\x3d\x35\xa1\x0e\x46\xab\xef\x4d\xd5\x72\xe1\xa7\xa8\x28\xa1\xdb\x0e\x77\x9c\x5e\xa4\x75\x90\xcd\x30\x0a\xde\x62\x2b\x54\xff\x20\x47\x0f\xed\x9f\x07\x71\xf0\x51\x2f\x2a\xce\x04\x4d\x75\x12\xcb\x97\x36\x15\xaf\x6d\x5b\xa1\x57\xf9\x47\x13\xd7\x56\xcd\x18\xa8\xde\xd8\xe7\x38\x7d\xe2\x26\x86\xfe\xde\x41\x1c\x4c\x06\xd4\xf1\x53\xed\xd3\xb6\x5b\xf2\x3d\x2d\x94\xf7\x76\xb2\x02\xd7\xd6\xef\x8e\x63\x33\x54\x9c\x96\x1a\x30\xba\x7f\xbe\x4e\x29\xd5\x87\x90\x01\x34\xb0\xb8\x2c\xc3\xf2\xda\x2d\xbf\xc7\xde\x44\x38\x59\x6a\x76\xaa\x63\x9f\x26\x93\xd3\xc2\x08\xa7\x48\x83\x7c\x5e\xce\x76\x3f\xcf\x4c\xad\x63\x81\x4e\xa7\x03\x71\xf0\x8a\xbd\x55\xba\xea\x3a\x0d\xe5\xac\x31\x13\x18\xe6\x9d\x59\x94\x16\x02\x2d\x3d\x99\xfe\xda\xcd\xa5\x07\xd7\x6d\xeb\x86\x9a\x8e\x73\xa0\x6d\xf9\x00\x0e\x26\xc3\x7b\x6d\x8e\x10\x1e\xd4\x9f\xca\x43\x63\x37\x91\xe2\x8e\xd0\xc5\xde\xa6\xea\x27\x36\xd8\xb1\xee\x06\xb0\x23\x67\xea\x16\x3b\x40\xcb\x14\x40\x1c\xec\xa9\xa5\x25\x59\x23\x51\x72\x0e\xe6\xe7\xe0\x62\x79\xd4\x7b\x3e\x90\xf5\x79\x16\xf9\x86\xe7\x03\x2a\x2a\x53\xe6\x8d\x50\x13\xa6\x54\xe8\xe4\x30\x10\x07\x0b\x5b\xd5\xdb\xda\x66\x32\x3c\x6b\xf0\xc7\xb6\xd5\x2e\x4b\x47\x4b\x77\x47\xd3\xb8\xa5\x2f\xc5\x52\x6d\xcc\x55\x85\x57\xbb\xbf\x75\x1d\x11\x16\xc4\xc1\x64\xf8\xd0\x6d\x54\xb9\x30\x79\x3d\x5d\xcd\x77\xee\x96\xd8\x1d\x8c\x25\xcf\xf7\x3f\x9a\x57\xf8\xf5\x0b\xf7\x53\x5f\x86\x71\x6d\xce\x0f\x23\x64\x00\x0d\xf9\x2e\xcb\x60\x5c\xf2\x76\x6d\x6d\x3b\xee\x83\xd0\xef\x6e\xee\xe7\xde\x5e\xa4\x0d\x77\x9a\xab\xf9\xeb\x8f\xe7\x2d\x9a\x83\xcf\x04\x24\x03\xa0\xdd\x0b\x20\x0e\x26\x83\x6d\x92\x40\xe1\x7a\x9c\x81\x3a\x37\xcf\xdf\xf2\xfa\x75\xb7\xc7\xfd\x1d\x29\xc2\x17\x26\xfe\xa8\x43\xd7\x64\x1c\x25\xc7\xce\x59\x10\x61\x41\x1c\x4c\x06\x72\x1c\xa5\x6f\x84\x16\x79\x8f\x29\x0a\x94\x4c\x1c\xb1\x0d\x2e\xea\xee\xa4\x6d\xef\xbd\x1e\x51\xbf\xef\x31\xa1\x61\x56\xd0\x23\x81\x08\x0b\xe2\x60\x4f\x6d\x62\x57\x65\x27\xfe\x71\xfc\xf2\x1d\x55\xc9\x76\x8e\x82\x00\x15\xff\xd2\x6f\x27\x94\xf7\x7d\xe6\x3a\xbc\x91\x4b\x0d\x4d\x8a\xa0\x69\x53\x10\x07\x0b\xbb\x2c\x91\x2d\xad\x6f\x69\xf5\x8a\x2e\xc8\x04\xe3\x5c\xa1\xd4\xa3\x33\x3c\xbe\xf3\xc5\x6b\x93\xf4\x8f\x45\x77\xec\xa4\x63\xfb\xa0\x29\x2d\x10\x07\x93\xc1\x8c\x29\xf4\x6b\x7f\x98\xd0\x2e\xea\x91\xfc\x63\xa6\x2c\xaa\xe2\x80\x39\xfe\x0e\x94\xc1\x52\x6d\x05\x0f\x9e\x58\x03\x3b\x5a\xa8\x62\x2f\x68\x30\x7e\x59\x86\xda\x96\xe4\x1c\x32\x9a\xde\x96\x1f\xf6\xde\x1f\x59\x55\x51\xd1\x3f\xb8\x55\x77\x67\x26\x7a\xf6\xfb\xe9\xaa\x7e\xf6\xc5\xba\x07\xed\x09\x04\x71\xf0\x9a\xe6\x78\xa6\x71\x04\xb7\x5b\xfb\xa9\x23\x7e\xfb\x29\x0c\x70\x26\xfc\x6e\x7b\xb0\xef\xf0\xaa\x58\x2f\x7e\x64\x76\x35\xdb\x91\x0c\x2a\x27\x07\xe2\x60\x32\xe4\xb4\xdd\x43\xfa\xf8\x08\xad\x81\x68\x16\xdf\xda\x68\x6e\xda\x9f\xfb\x7b\x39\x55\x53\xa9\xca\xd6\x49\x7e\x8c\x3f\x91\x82\xde\x22\x94\xf0\x06\x70\xb0\xa7\x96\x3d\xb6\xb7\x55\xae\x38\xbb\xf3\x48\x2b\xab\x5e\xcb\x91\x03\x43\xa7\xd7\x40\x61\x17\x9f\x25\xa5\xe4\x26\x4e\x94\x32\xda\x2e\x54\xad\x0f\xc4\xc1\xc2\xde\x77\xbc\xde\xec\xdd\x67\x73\xa1\xaa\x7f\x43\x8c\x7b\x10\x95\x97\xde\x20\xbd\x34\xe9\x15\x96\xb5\xfb\xe1\x74\x5f\x9c\x32\x21\xf4\x1e\x03\x71\x30\x19\xfa\xc4\x64\x36\xc5\xcf\x08\xe3\x64\x33\x62\x0a\x5f\x74\xa2\x8a\x13\x8c\xf5\xdb\xbf\x5d\x2d\xcf\x67\x8e\x98\x28\x4f\x46\x75\x8e\x85\x0e\x83\x01\xfc\x26\x5d\x96\x41\xc8\xda\xe9\x0d\xb3\x98\x17\x1d\x72\x89\xa7\xbb\x6f\x10\x5e\x71\xcb\xb3\x76\xd2\x0b\x39\x9f\xfa\x0e\x77\x7b\x93\x85\x89\x42\x4a\xe8\x73\x09\xe0\x60\x32\xbc\x4d\xf4\x32\xc6\x18\x30\xd1\xb3\x8d\x1c\x5e\x6b\x79\x45\xd1\xc5\x8e\xe1\xe6\xb4\x3f\x48\xae\x9c\x17\x78\x4f\x72\xe0\xcb\xb7\x13\x44\x58\x10\x07\x93\x61\xef\x8e\x9a\xb8\x74\xff\xc1\xd1\x6c\x81\x59\x7d\x19\xe9\x59\x9e\xd6\x13\x32\x7b\xf3\xba\x49\x6d\x7b\x25\xf4\xe3\xd2\xdd\x34\x68\x13\x32\x88\x83\x3d\x35\xcd\xc7\xac\x82\xba\x99\x2c\xa2\x1d\x14\x3e\xe1\xae\x6e\x67\x14\x14\x6c\x33\xe7\xe7\xc6\x82\x56\x5f\xde\x0e\x7e\x17\xb9\xc5\x1d\x88\x08\x0b\xe2\x60\x61\x07\xad\xff\xdd\xcc\xef\xaa\xe5\x2f\xb2\x9e\xcd\xe2\x3f\x0f\xff\xf5\xe7\x81\x54\xd8\x50\x88\xfc\x1f\x82\x5c\xc6\x25\xd6\x6f\xc1\x50\x51\x18\x10\x07\x93\x61\x36\x23\x57\xc2\xee\x3e\x6f\x9b\x95\x34\xf7\x8c\x28\x8d\xeb\x09\x63\xf6\x87\x9d\x39\xec\xe2\x85\xa6\xc1\x65\x2f\x2b\xfc\x31\x2e\xe8\xcd\x00\xf8\x81\xbd\x2c\x83\x7d\x70\x51\x5f\xc6\xfc\x99\x50\xa9\xf8\xc0\x6e\xdf\x48\xee\x0d\xd5\xc5\xde\xde\x6d\xee\x96\xa2\x1e\x0b\x0a\x5b\xcb\x67\x31\x50\x91\x20\x10\x07\x4f\x83\x79\x56\x72\x98\x93\xe4\x48\x58\x26\x6d\xda\xbc\xf7\xc4\x49\xaa\xc2\xba\xb1\x4a\x8b\xf5\xe2\x56\x98\xe4\x22\xff\x4a\xe0\x4d\xa8\xb0\x3b\x88\x83\xc9\x90\xc4\x77\x4b\x80\x29\xb8\x96\xe9\x46\x0a\xf6\x56\xe2\x83\xd7\x17\xde\x09\x0d\xc4\x71\x35\x7c\x8a\xa6\xac\x86\x01\xc3\xa9\xc1\xd0\xe9\x53\x20\x0e\xf6\xd4\x9c\xed\x4c\xf8\x79\x2f\x02\xf5\x12\xac\xf7\x57\xf6\x3f\x14\x58\x6b\x4d\x31\x0a\x49\xad\x29\xaf\x19\x68\xe3\x7e\xc1\xa5\x67\xe5\x80\x8a\x29\x00\x38\xb8\x63\xaa\x25\xda\xcf\x2b\x05\x0d\x4e\x7f\x67\xd6\xa3\xb2\x77\xa3\xbe\x6e\xea\x73\xdf\x37\x7d\x90\x1f\x90\x76\x38\x1c\xfc\x29\xc1\x15\x72\x0c\xc0\xc1\x64\x18\x25\xa9\x6c\xd6\xab\x6b\xbc\x78\xc7\x54\xa1\x1b\xdb\x14\xd6\xe1\x17\xce\x16\x15\x9f\x84\x1e\xcd\x8f\x7e\x7d\x82\x31\xc4\x25\x10\xca\x4c\x83\xe6\x14\x11\x87\x4c\xff\x84\xcf\x83\xfc\xf1\x9d\xdc\x99\x67\x1c\x4e\xb8\x50\x3c\xcc\x0b\xe8\xd2\x4b\x57\x13\x3b\x8f\xe7\x9c\x22\x22\xbf\x99\x43\xa3\x43\xf2\x3c\x5a\xf0\xea\x53\x2f\x53\xf0\x26\x73\xc8\x6c\x94\x76\x66\xf4\xf7\x6a\xd9\xf1\x84\xbb\xbe\x2f\x24\x97\xc4\x38\x3e\x15\x3e\xbe\x15\xe7\x61\x6a\x85\x35\xeb\xe1\xaf\x77\xf5\x26\x8f\x2f\x9d\xc2\x17\xf4\xd0\xc2\xab\xba\xbe\xc4\xf4\xb7\xe8\xd8\x04\x2f\x59\x48\xa6\x1f\xe7\xc1\xa3\x3d\x0a\x09\xb6\xf9\x28\xa7\x10\x8c\x6b\x57\xdd\x6d\xa1\xfb\x7f\xbb\x97\x97\xbb\xe4\x7c\x7a\x5c\x07\xab\xbd\x16\x56\xca\x7d\x8f\xae\xaa\x8a\x8f\xd3\xf9\xb8\xa8\x33\xdb\xfe\xb8\x43\x32\x43\xaa\xd9\xd4\xef\xee\x43\x23\x37\x10\x07\xeb\x92\xb2\xa5\x0c\xe1\x28\x9f\x6d\x2e\x0e\xcb\x50\xd1\x1b\x96\xb1\x1c\xbf\x59\x96\xe3\xe5\xc7\x8a\x57\x2e\x62\x19\x0c\x9e\x4b\x31\x40\x7b\x02\x41\x1c\xac\x4b\x3e\x4c\x16\x34\xb0\x50\x0b\xd7\x6e\x6d\x7f\x7b\xa6\x69\xd9\x35\x5b\xc5\x2b\x9a\x72\xb2\xd6\x23\x5c\xd8\x36\xd9\xc1\x1f\xd8\x05\x2d\xe6\x06\x71\xb0\xbe\xc3\xd5\x39\x8d\xc9\x8a\xc6\x65\x73\x6a\x75\xfd\x16\x61\x9e\x08\xdd\x7d\x63\x62\x9e\x5e\x9e\x25\xbc\x60\x87\x41\x95\x9d\xfd\x38\x68\x25\x28\x88\x83\x85\x4d\xa9\xee\x61\xa8\x14\xa6\xa1\x11\xcc\xfd\xc8\x3c\x25\x75\xdf\x3d\xe2\x68\x29\xc0\x48\xc5\x17\xff\x4e\x60\xdf\x85\xcc\x9b\x5b\xf9\x88\xb0\x20\x0e\xd6\x25\xf7\xf2\xab\xc6\x5e\x9a\x47\x5c\x44\x45\x64\xe3\x7c\x73\xaa\x29\x3b\xc3\x57\x3d\x68\x6d\xf3\x43\xff\x6e\xeb\xfd\xb4\x9a\x85\x8a\x11\xf1\x7e\x06\x59\x7e\x59\x06\xbc\x22\x29\xc1\x50\x2a\x9f\x8c\x96\x23\x4b\xee\xae\x7d\x67\x99\x94\x7b\x05\xd1\x36\x26\x9a\x43\xb4\x0d\x8d\x83\x14\xab\xa3\x50\xd1\x1f\x10\x07\x93\xa1\xe6\xc1\xe1\x52\x40\xd0\x1f\xab\xd3\x33\xf3\xca\xdb\x19\x22\x1c\xd9\x13\x54\xa5\xac\xe5\x91\xf1\xda\xb5\x42\x2d\xfb\x3b\x38\xd0\xa0\x05\xc4\xc1\x64\x70\x0c\x74\xb5\x70\x71\x99\x8a\x23\x67\x8b\x1e\xe5\x2a\xed\x1b\x8b\xda\x58\x54\xcd\xfd\xca\xfa\x9a\x8e\x57\x9c\x43\xb6\xb4\x03\xfa\x03\x05\x71\xb0\xa7\xe6\x36\xa7\x1b\xe6\x15\x5c\x5c\xa2\x70\x8c\x76\xe2\x96\x92\xf1\xcd\x2d\x26\xc0\x8c\xf5\xad\xd8\xb3\x9b\x92\x46\xad\xaa\x32\x8c\xd0\x5a\x3a\x10\x07\x0b\x8b\xbe\x78\x34\xb3\x49\x54\xe0\xf0\x9e\x0b\xf5\x85\xee\xcf\xeb\xc6\xd3\xe7\xfa\x1e\x0f\xd4\xf1\x6f\x58\x93\x4f\x9c\xde\xee\xce\xa7\x40\x84\x05\x71\x30\x19\x90\xfc\xd7\xd4\x4d\xab\xdb\x78\x4b\xaa\xbb\x1f\xdf\x44\x95\xb7\x48\x20\x74\xdb\xa7\xcc\x0b\x3a\xe3\x4e\x31\xf9\xca\x1a\x10\xdb\x06\x1d\xd6\x05\x78\xff\x5c\x96\x41\x7f\xa9\x68\x36\x7a\xc4\x7a\xe8\x21\x51\xf2\xcb\x26\x12\x0a\x5b\x59\x42\xf5\x6b\x65\xed\x5f\x8b\x50\x83\xfd\x90\x1a\xb6\x88\xa1\xdb\x0b\xe2\xe0\xcb\x14\xce\x0e\x9f\x2b\xcd\x33\x6a\xd3\x97\xf9\xf3\x1e\xeb\x79\x27\xd2\x76\xdb\x39\xee\xd0\x04\x60\x21\xf1\x2f\x31\xf6\x2a\x4a\xac\x42\xcb\x14\x00\x1c\x4c\x86\x39\xa5\xb8\xc9\x3b\x9a\x67\x82\x3b\xd5\x39\x01\x77\xa8\xbf\x6f\x78\xf1\x96\xe2\x35\xed\x60\x12\x47\x19\xf4\x52\xef\xcf\x75\x40\x23\x37\x10\x07\x7b\x6a\x31\x91\xd9\x4a\xbc\x22\x06\xb8\xc2\x45\xd2\x19\xab\x89\x98\x0e\xd7\x9e\xc6\x31\x5c\x53\x1c\x0c\xa0\x7d\x3f\xef\xc7\x1d\x2c\x79\x81\x08\x0b\xe2\x60\x61\x53\x29\x30\xcb\x67\x4b\x6e\x3f\x4f\xb2\xef\xe0\x6a\x5e\xf8\xc7\xd5\x41\x60\xf4\xb2\x7f\x1b\xf3\x97\xcc\x5a\xba\x5f\xd7\xfa\x4c\x33\x22\x2c\x88\x83\xc9\xe0\x95\xb7\x65\x5c\xf4\x62\xdb\xcd\x28\xdf\x30\x86\x9d\xfc\x95\x45\x53\x0c\x1e\x67\xc5\x99\x45\x15\x37\xbb\xf9\xef\x3d\x9d\x1b\xa6\x50\x31\x05\x40\x2e\xf2\xb2\x0c\xd4\x5f\x72\xbb\xba\x37\x34\x37\x76\xf5\x54\x89\xb0\x8a\xb0\x0f\x2b\x36\x52\x1a\x59\xd7\x14\x48\xbf\xde\xd1\xf9\xa7\xf6\xed\x6f\x07\xe2\x82\x41\x1c\x4c\x06\xfd\x94\x80\x82\x8e\x08\x0b\x8d\x1a\xad\xc3\x06\x0b\x2b\xc1\xaa\xb9\x44\xb5\x2d\x7e\x09\x81\xe0\x93\xe8\x8b\xbf\xc9\x9e\x9f\x7e\x42\x8e\x01\x38\x98\x0c\x72\x0c\x0f\xb9\x93\x66\xf7\x22\x6e\x13\x2b\xb0\x61\x2c\x51\xfa\xe9\xfd\xdc\x9c\xb4\xad\xbe\x56\x5f\xf1\xfb\x4e\x56\x4f\xd8\x3c\xf4\xd3\x01\xe2\x60\x4f\xcd\xe6\x20\xc8\x4c\xf0\xe5\x05\x73\x61\x5a\x02\x86\xfb\xfa\x6c\x3b\xf3\xde\xfa\x4a\xbd\x7c\x1f\x8d\x3c\xe9\x26\xbb\xcc\x9a\x67\x3a\x22\x2c\x88\x83\x85\x7d\xb6\xf5\x94\xa4\xf3\xab\xc7\xa9\x49\xad\x3c\x35\xb2\xf2\xac\x0c\x03\xe6\x93\xfb\x2d\x3b\x56\xc8\x8f\xe2\x92\x9a\x4b\x70\xac\x33\xa0\xcc\xf4\xee\xf5\x38\xb1\xb1\xf1\x10\xa1\xdd\xa5\x82\xa8\x5b\xb8\x3b\x2b\x73\xee\x4f\x12\x32\xd7\x7e\x32\xcf\x89\x24\x5f\x2f\x0a\xe7\x19\xfd\xcf\xcc\xf4\x76\xd8\x9f\xd8\x95\xec\x94\x85\x53\x85\x17\x2c\x9e\x46\x8c\xd3\x71\xf4\x48\xc8\x52\xe8\x25\xac\x7b\x2f\x64\x14\xde\xf7\xb5\x89\xfc\x07\xda\xbc\x1e\x49\x41\x5a\xc4\x58\x88\xcb\xaa\x48\xa0\x64\x83\x32\xbc\x80\x95\x67\xb1\xf5\x30\x66\x55\x61\xeb\xc0\x7a\x87\x2b\x27\x10\x96\x99\x06\x45\xbe\x9c\x99\x4e\xd4\xd6\x73\x29\xe6\x75\xf3\x79\x32\xf7\xc9\xfd\x5a\xc0\xbb\x57\x3d\x31\x9d\x5f\x67\xed\xf8\xc4\xa6\xb3\x0c\x82\x9e\xcd\x07\xd9\xfc\x07\x2a\xfc\xe8\x53\xd3\x72\xee\x0f\x32\x55\x11\xcf\x79\x53\xf4\xe0\xf4\xf7\x96\x09\x9d\x1d\x42\x28\x2c\x61\xa3\x2f\x16\xea\x30\xcf\x38\xa1\xcc\x34\x28\xe6\xff\xcb\x4c\x4b\xc2\x33\xd3\x52\xe4\xca\x3d\xf3\xba\x41\x15\x2f\x35\x98\x3e\xe2\x8c\x46\x65\x93\xe3\xfd\xd5\x2e\x43\x52\xdb\x27\x8b\x5b\x36\x58\x74\x2e\x50\xbd\x72\x66\x5a\x12\x9e\x99\xc6\xa7\x64\x40\xbd\x45\x30\x7d\x61\xdf\x40\xae\xe1\xec\xb2\xf3\x9d\x17\x19\xe7\xdc\xbe\xa5\xaa\xb8\x3e\x7a\x47\x85\xb6\xa7\x51\xf9\xca\x83\x4d\xc9\x4b\x99\xe9\xd5\xc1\x14\x5a\xc1\x88\xc1\xd1\x2a\x54\x31\x0c\x31\x45\x8b\x51\x5c\xa9\x09\xdc\xae\x49\x0a\xeb\xd7\x93\x09\xc9\x39\xb6\x11\x65\x57\x6f\xf2\x52\x66\x5a\x25\xec\xe6\x8b\xa8\x41\x5c\xfb\xb6\x6a\xf6\x91\x67\xe4\xe8\x06\xac\x9e\xd5\x2f\xc6\x45\xdb\x56\xab\xf8\x52\xb9\x16\xf6\x6a\xae\x7a\x32\x71\xa4\xac\xe4\xa5\xcc\xf4\x62\xa7\xcd\x20\x85\x62\x54\xe7\x28\xdd\x60\x2c\xf6\x62\x39\xf3\x83\xd0\x90\x8b\xe9\x97\xd6\xe3\x6d\x47\x8a\x0a\xef\xb8\x27\x30\xae\xde\xe4\xa5\xcc\x34\x36\x3e\x06\x91\x98\xf3\x1c\x86\x8c\xfa\x23\x24\x7c\xd2\x5a\x5e\x73\x1d\xf6\x1e\xce\x63\xfa\xbc\xae\x97\x26\xa1\x7b\x5c\x9f\x8f\xae\xde\xe4\xa5\xcc\x34\x9b\x5d\xaf\xe4\xd1\xb5\x75\x1a\x8b\x91\xb6\x81\xf7\x8b\x12\xdf\x8f\xea\xc4\xf9\xfb\x83\x1b\x17\xfc\x0d\x26\x89\x2c\xbd\x5f\x3c\xbe\x7a\x93\x97\x32\xd3\x4e\x6e\x8d\x7e\x68\x22\x2c\x4c\x63\x4f\x03\x6f\x89\x60\xab\x0e\x85\x1f\x97\xfc\xc6\xff\x46\xb3\x80\x79\xc3\xf5\x99\xf1\xfd\xdc\x83\xff\xcd\xbf\x0a\xa8\x27\x5e\xfe\x08\x7d\x66\xfc\xf6\x5c\x5b\xa0\xb6\xba\x73\xd0\x45\x47\x56\xcc\x2d\x44\x36\x83\x6f\x25\xc1\xaf\x65\xb3\x92\x84\xc9\xfa\x6d\xdb\x19\x54\x30\x09\xc4\xc1\x3e\x42\xc9\xde\xca\x0c\x02\x6f\xd9\xfd\xde\xd1\x93\x7d\xad\x31\xa2\x2f\xc2\x2e\x7c\xd2\x82\x1a\xbe\x3e\x6f\xc7\x39\x98\x84\xf3\x15\x75\x0e\x11\x16\xc4\xc1\x3e\x42\xef\xca\x32\xda\xec\xff\x2e\x3f\x8a\xb5\x71\x2f\x27\x33\x63\x77\xab\xe5\x96\x14\xf8\xca\x1a\x63\x34\x5f\x4d\x66\xcb\xa1\xf6\x1b\x9a\xa2\x02\x71\xf0\xb5\x72\x31\xcc\x14\x0b\x61\x2d\x7c\x58\x02\x7d\xd7\xbc\xbd\x0a\xc6\x8a\x8e\xca\xd8\xde\x07\xa5\xd0\x3d\xa6\xe1\xc8\x79\x7b\xa4\xea\x0e\xad\x95\x03\x70\x21\x52\x68\xff\x9f\xb0\x84\x2f\x87\xe9\xdb\xf5\xcf\xdc\xd2\xa3\x04\x85\x42\x77\xfe\x30\xdb\x0d\x90\xaf\x9a\xd0\xa1\x2c\x99\x37\x51\xe5\xc5\x85\x43\xd9\x32\x10\x07\x1b\x91\x14\xb0\xa8\xd9\x4b\x2e\x84\x5d\xc7\x67\x9e\xc7\x8f\x0b\x1e\xc6\xfa\xe3\xbe\xcf\xe1\x88\xcc\xae\x5d\x72\x07\x6b\x63\xce\xd2\xf4\x3a\x62\x44\x02\x7a\x49\xfe\x97\xf2\x4e\x17\x21\x37\x49\xf1\xcd\x96\x53\x43\x1b\xb3\x27\xe6\xa6\xb8\x31\x58\x5e\xef\x1a\xd2\x38\x2a\x55\x28\x39\xbd\xab\xe9\x0e\x81\x36\x2a\x81\x38\xf8\xee\xbd\x94\x70\x8a\x29\x3b\xb3\xe6\x90\x56\xee\xb4\x02\xd4\x1d\x97\x72\x31\xdb\xf7\x6d\x4b\x1b\x78\xd2\x6a\xf3\x1f\x70\xba\x71\xbb\x10\x61\x41\x1c\x4c\x06\xf1\x85\x8f\x29\xf5\x22\xde\x27\xec\x65\xb6\xbc\x65\xb5\xcb\x58\xc7\x44\x68\x6e\xb9\x27\x9c\x3d\xa8\xd1\xb1\xf7\x15\xe2\x8f\xbe\x23\xc2\x82\x38\xf8\x7a\x02\x0e\xcf\x99\x2d\x9d\x01\x6f\x3b\x75\x24\x81\x3c\x6b\x5b\x09\x56\x2e\xe9\xfb\x42\xbf\xec\x5b\xd9\xfc\xb4\x69\x1d\x4b\xb3\xa0\xf3\x8a\x41\x1c\x4c\x06\x9d\xef\xc3\xb2\x5e\xa6\x84\x8f\x31\x64\xde\xac\x87\x05\x1f\x7c\xc8\x4f\x5a\x64\xc4\x6a\xa4\x7a\xb9\x42\x28\xea\xa3\xbf\x30\x0f\x9d\x0b\x07\xe2\x60\x32\xdc\x8a\x4b\xff\x77\x17\xf7\x93\xa9\xba\x15\x12\x4d\x10\x9e\xcd\x31\xd2\x83\xfb\x6c\xf2\xcf\xc5\xd3\xb3\x1c\xb2\xbe\xfb\xa3\x9e\x4f\x20\x64\x00\x7d\xbe\x2e\xcb\xe0\xe9\x65\x84\x3f\xa8\x51\xae\xc0\xea\x5b\xba\x64\x74\x20\xa4\xfc\x3e\x4e\x7a\x59\xe7\x85\xbc\x44\x6d\xc3\x38\x6e\x3d\xc7\x07\xa8\x92\x28\x88\x83\xc9\x90\xd7\x38\xd4\xa0\xa6\x55\xfe\x72\xc6\x4c\x21\xe0\x3c\x64\x28\xd4\xfa\xf1\x1e\xe6\x19\xe7\xdd\x51\xed\x8d\xe9\xa1\x9d\xee\x68\xa8\xa2\x0f\x88\x83\xc9\x30\xc9\x88\x19\xe4\x20\x4e\xd6\xac\x70\xbf\x40\xa9\x62\xc8\x0c\xc7\x9a\xc0\x0b\x45\xe8\xe4\x55\xba\x33\xda\x44\x72\x73\x68\x33\xb4\xc2\x06\xc4\xc1\x64\x40\x8a\x27\x58\x72\x38\x70\x20\xa5\xf3\x74\x2f\xd5\x0b\x2d\x7f\xfa\x05\x39\xef\x28\xa8\xfa\xab\xf8\xfe\x7a\xba\xc1\xba\x89\x1a\x54\xfc\x15\xc4\xc1\x64\x20\x0d\x94\xad\xdd\xe8\x68\xfd\xc9\x9b\x24\x1c\xfb\x94\xee\xfc\x23\x5f\xa3\xa9\x9b\x1a\xf9\x81\x84\x16\x69\x4a\x90\x86\x31\x21\x54\x8c\x0a\xc4\xc1\x64\x18\x78\xbb\xfd\x3b\xf4\x23\x8b\xbb\x7d\xba\x99\xc2\x56\x58\xb1\x47\x25\x75\x7c\x00\x49\x3f\xe7\xab\xa4\xd8\x95\x67\x5b\x22\x9e\x50\x61\x4e\xd0\xc0\xe2\xb2\x0c\xed\x3e\x84\xda\x4f\xac\x32\xb2\xbf\x36\x0d\xaf\x2a\x8d\x3c\x0a\xd5\xf9\x3b\x88\x5b\xf9\x6e\x0f\x93\xe0\x6c\x3c\x37\x3c\xa4\x09\x3a\x01\x18\xc4\xc1\x64\x20\x23\xab\x29\x62\x5e\xc4\xf7\x25\xbe\x10\xe0\xf7\x6d\xd1\x1f\x8b\x88\xa8\xae\x97\xa9\xe4\xbc\x87\x2f\x98\xf3\xf8\x81\x82\x1d\x36\x22\x2c\x88\x83\xc9\x90\x80\x17\xad\x11\xe0\xd9\x40\xcc\xfb\xa9\x7c\x2a\xa7\x2d\x46\xac\xd3\x31\x25\x5a\x48\x65\xe1\xde\x56\xad\xae\x97\xb4\x09\x26\x34\xdd\x00\xe2\xe0\x8b\x4b\x3a\xbe\x90\x0a\x05\xb0\x54\x2c\x45\x95\xee\x07\x97\xbf\x45\xff\xc9\xf1\x44\x6d\x77\x19\x4d\xac\xac\xb2\xc1\xea\x5a\x3f\x09\x34\xd5\x0e\xe2\x60\x32\xa4\x5b\xd9\x78\xab\xe6\x79\xb6\xf2\x63\xf8\x3d\xfc\xe5\x68\x2b\x7c\xf4\xe6\x2c\x93\x57\xa4\xbe\xa9\xb1\x5b\xb4\xeb\xe7\x7a\x2d\xf4\x0b\x04\xe2\x60\x32\xd0\xe3\x3c\x6a\x14\xf3\x99\x1e\xda\x13\xd5\x6c\x8a\xe5\xcb\x56\x42\x55\xbe\xf1\xc7\xeb\xb4\x9e\xd1\x5c\x71\x78\x99\xd8\x8f\x54\x11\x21\x03\x68\xc8\xf7\x5f\x4e\x99\x7e\x78\x4d\x99\x31\xc4\x50\xbf\x02\x4d\x26\x57\xb0\xef\x13\x2b\x9e\xcc\x6f\xb2\x70\x0f\x41\xc2\xb6\x88\x24\xf6\x82\xdf\x4a\x1a\x88\x0b\x06\x71\xf0\x32\x57\x92\x0a\x35\x83\xd4\x73\xec\xbd\xda\xf2\x21\x1f\xa6\xff\x60\xa4\x35\xac\xa8\x3b\x50\x2d\x95\x19\xbf\x22\xed\x7b\x93\xfb\x0f\x5a\x12\x04\xe2\x60\x32\xb4\x7c\xc2\x93\x6e\x9e\x94\xc1\x7c\xf4\x2e\x71\x76\xeb\x9e\xbc\xcf\xe6\xc4\xfa\x7a\x1e\xd5\x5b\xbd\x6f\x93\x29\x51\x5a\x6f\x15\x1e\x20\xc2\x82\x38\x78\x6e\x80\xf4\x9b\x6b\x1b\xb5\x80\xf1\x82\x77\x1d\x13\xcb\xc9\x16\x6e\x87\xdc\x14\xbb\x7b\x42\x4a\xfc\xdf\x8c\xfd\x82\x17\x67\x04\x95\x50\x6e\x00\xc0\xc1\x64\xf0\x7d\x6c\x8f\x86\x76\x2f\x81\x0a\x95\xd6\x3b\xc1\x58\x5a\xfd\x1f\xa5\x53\x70\x71\xf1\xfb\x60\xc1\xd7\xb2\xda\x98\xbf\xe4\xa9\xea\x10\x61\x41\x1c\x4c\x06\xa2\x79\x72\xc3\xca\x84\xbb\x9a\xdf\x4f\x5b\x72\x2e\x3e\x9f\xdc\x46\x22\x2e\x1e\x12\x2f\x65\x2f\x0e\x6f\x23\x39\xcd\xcf\xba\x03\x95\xd6\x00\x0d\xc6\xff\xcb\x89\x64\x2e\xae\xfc\x9d\x21\x89\x7e\x1f\xef\x8b\x04\xb6\x44\xe8\x14\xc9\xbe\x61\xe6\x8e\xa9\x52\x7b\x47\xfd\x39\x6b\xea\x2f\xb7\x01\xb4\x5f\x0a\xc4\xc1\x64\x20\x9a\x45\xa9\xf5\xb0\x0e\xf2\x39\xdf\x22\xf1\xf4\x93\xe2\x78\xf6\xe2\xc6\x7a\xaa\x1a\x7e\xee\xa7\x87\x77\x2b\x1d\x8f\x25\xad\xa1\xaa\x12\x20\x0e\x26\x83\xf5\x78\x8e\x83\x67\x50\x8f\xab\xd9\xab\xef\x71\x41\x0a\x6f\x1b\x24\x52\xfc\xff\x26\x35\xb1\x24\x5c\x3c\x09\x6e\x8e\x70\xc9\xcd\x84\x76\x21\x03\x38\x98\x0c\x5e\xe6\x7f\xdf\x4e\xaf\xae\x6d\x21\xaf\x5b\x58\xc5\xe8\x3b\x0d\x6e\xb0\xfe\x7d\xbd\xb1\x70\x3e\xb5\xe0\x64\xf3\x73\xf6\xb3\x18\x94\xf0\x06\x71\x30\x19\xc8\xc6\x35\x97\xd8\xa4\x68\xbd\xc5\xdc\xc6\xbe\x7d\xc5\x0e\x10\xf5\x67\x61\xcd\xb5\x55\xbe\xc1\x62\x6f\x9e\xf3\x6f\xf2\xcd\x06\x74\xcc\x26\x88\x83\xc9\xc0\xe4\x8e\xcf\x31\x93\xab\x54\x17\x4b\x6d\x50\x70\xad\xa7\x2a\x92\x72\xcb\x2c\x89\x87\xe6\x82\xa2\x5b\xec\xe9\x38\xdd\x9f\xbc\x15\x84\x0c\xa0\xdf\xa4\xcb\x32\xa8\xed\xe1\x13\x8e\x15\x9d\x1c\xfd\xcd\x6b\x77\x26\x40\x5e\xeb\x8e\x3e\x7a\x4a\xf8\xf7\xe1\x5c\x42\xbf\x32\xdb\x94\xd1\x64\xe7\x34\xe2\x82\x41\x1c\x4c\x06\xce\xf8\x4a\xb1\x84\x5c\xd7\xb9\x28\x5f\x16\x3a\xcd\x4f\x63\x25\x15\x15\x41\x02\xda\xdf\x44\x06\x15\xeb\x31\x5f\x7f\x72\xb6\x84\x0e\x15\x04\x71\x30\x19\x86\xfd\x51\x69\x6d\x3e\x17\x33\x19\x61\x7e\x95\x7f\xd7\x43\x11\xbb\xc0\x36\x6d\x84\x15\x85\x95\x42\xd7\x53\xe6\xf3\xaa\x7d\x1d\x9a\x88\x04\x71\x30\x19\x3e\xde\x13\xde\xe4\xcf\x3c\xe1\xe7\x67\x7d\x9f\x7a\x88\x9e\xd0\xaa\xd5\x1e\x7a\x32\xe3\x6d\x83\xd9\xd8\xb0\x5a\x8f\x77\xeb\x02\x5a\xcd\x06\xe2\x60\x32\x5c\x24\xbc\x0d\x42\x3d\xe6\x9d\xd8\xe9\xcb\x2a\x32\x54\xd7\xa7\x75\xff\xc9\x39\x9c\x94\xb1\xfc\xb1\x4b\xe5\x22\xed\x19\xd7\x2c\xf4\x66\x00\x71\x30\x19\x18\xbb\x9f\x97\xbc\x4c\xe5\x1b\x9e\x2c\xb5\xf9\x5e\xa6\x6e\xa1\x6e\x8f\x3d\x11\xa1\x4b\x2a\x4e\xc7\x55\xd9\xd4\x4a\x14\xeb\x6f\x09\x9d\xf9\x00\xf8\x81\xbd\x2c\x03\xfb\x56\x12\x33\xd7\xe0\x17\x2b\x9e\xb1\x92\xa5\x87\x2f\x7f\xeb\x92\x94\xfb\xb9\xfb\x8e\x96\xea\xed\x53\x32\xd6\xe2\x3c\x5e\x83\x8a\x55\x80\x38\x98\x0c\x52\x56\xde\x17\xcc\x16\x6f\x16\x37\x2a\x3f\x1e\x93\xd8\xa1\x54\xd2\x9e\xee\x77\xed\x66\x9d\xd2\x0f\x14\xc9\x99\xcf\x3c\x3b\x85\x0a\x12\x83\x38\x98\x0c\x16\x4f\x4a\x6b\x91\xe5\xeb\x37\x0d\x1f\x49\xd1\x73\xb9\x29\x1e\xdb\x92\xd0\x0e\xce\x54\x2c\xbc\xed\x10\x14\x52\x16\x64\xc9\x83\x6a\x60\x80\x38\x98\x0c\xba\xfc\x5f\x98\x82\x55\xc8\xda\x5f\x78\x24\x7a\x54\xb7\xa5\x25\x48\x5a\xbe\xec\x3d\xb9\x3f\xfb\x90\x10\xcb\x64\x7f\xa4\x66\x17\xaa\x17\x05\xe2\x60\x32\xb8\x3e\xca\x2f\xfc\xec\xc3\x5f\x56\xaf\xc4\x78\x83\x0d\xef\x95\x7b\x6b\x92\xc8\x1f\x11\xee\xcc\x38\x02\xb3\xc7\x22\x63\x4a\xa9\xd0\xe6\x57\x10\x07\x93\x81\x45\x99\x18\xbf\x5a\x34\x02\xa5\xc1\x6c\xee\x26\x05\xce\x1f\xec\xb6\x7a\x93\x1f\x26\x95\xf7\xa3\xad\xe6\xf3\x47\x13\x65\xef\xbd\x81\x32\xd3\xa0\x39\x45\xc4\x29\xd3\x97\x32\xd3\x82\xc5\x12\xdc\x13\x44\x5a\xc5\x22\x0e\x56\x9f\x96\x62\x26\x6a\xda\x67\x42\x06\xf6\x14\xb3\x3f\xcf\xcb\xbc\x7f\xb1\xac\x1c\xdf\x75\xf5\xa9\x97\x4b\x99\xe9\x38\xa5\x04\xd7\xa0\xeb\x4b\xbb\x77\x91\x5d\x67\x52\xa7\x32\xdc\x12\x58\x9f\xe7\xff\x36\x2b\xca\xd0\x68\x24\x2f\xb9\x3e\xc8\xe8\x71\xf5\x26\x2f\x65\xa6\x17\x83\xb0\xea\xde\xfb\x2a\x8f\x0a\x1c\xbb\xfc\x90\xdb\x17\x7c\x12\x66\xfd\x3e\xb9\xee\xa6\x14\x3f\xd1\xe3\xc4\x09\xca\x9e\x9f\xe3\xff\x9b\xd9\x1e\xd0\xbd\xbc\xdc\x25\x23\x85\xe7\x76\x0a\xd8\x56\x8d\xdf\x68\x51\xd5\x4e\x78\x66\xbd\x3f\xf0\x91\x11\x8a\x38\x98\x75\xb3\xc2\xa4\x25\x79\xa0\x21\x08\xcd\xf6\x80\x38\xf8\x6a\x63\x94\x31\x51\x92\xaf\x6b\x34\xcc\x21\x7a\x1e\x5b\xd3\x27\x26\x9a\xe9\x9d\xdd\xd3\xc4\x09\xb6\x35\xaf\x13\x9d\x46\xf7\xff\x40\x2f\x52\x10\x07\xeb\x92\x69\xa6\x39\x6f\x7c\xbd\xa6\x86\x6c\xc3\xcc\x03\x9e\xa4\xb2\x60\x05\xa2\x95\x0b\xcd\x61\x24\x9e\x58\x25\x2a\x65\x5d\xb4\xf4\x43\x69\x2d\x10\x07\xeb\x92\xb5\x55\x15\xab\x9a\x1b\x2e\x87\x09\x74\x47\x5e\x38\x3a\x38\x36\x77\x2d\xf6\x06\x0f\xf5\x05\x89\xea\x08\x23\x39\x78\x90\xb5\xa1\x03\x75\x41\x1c\xac\x4b\xf2\xd9\xe3\x91\xaf\xaa\xf9\xae\x04\x53\xbc\xc9\xaa\xd2\x10\x4d\xe8\x61\x62\x8e\x12\x77\x36\xa6\x18\xbc\x21\xcd\x14\xfc\xea\x0e\x09\x22\x2c\x88\x83\x75\x49\x9d\x34\xde\xfe\x16\xfd\xe5\xcc\x2f\x75\x24\xa1\xa2\x6f\x05\x4c\x1e\x2c\x8d\xbc\xe6\xe1\xfa\x5b\x1f\x79\x17\xe3\x36\x7f\xff\xa4\x2c\xe2\xfd\x0c\xb2\xfc\xb2\x0c\x2c\x2f\xd3\x98\xcc\x57\x3c\x92\x5a\x05\x2c\x82\x6a\x56\x42\x24\x64\xfa\x86\xef\xae\x6e\x4e\x53\x67\x6d\xdd\xc5\x6e\xd7\xe2\x81\x06\x2d\x20\x0e\x26\x83\x62\x3b\xfa\x79\x4c\x61\x1c\xf9\x66\x47\xdb\xf4\x3d\xda\x22\x22\x4e\xf1\x99\x8c\x57\x3c\x0b\x66\xe7\xc7\x35\xac\x7b\x07\x4f\xbd\x10\x61\x41\x1c\x4c\x06\xfe\x3b\xbe\x39\x7b\x46\x3e\x63\xeb\x95\xa7\xcf\x08\x1c\xbf\xa7\xd0\xbc\xd2\xd9\x96\x99\xaa\x15\x95\x9a\xb3\xd8\xa3\x1d\x8e\x86\x5e\xa4\x20\x0e\x26\x83\x7d\xc8\x82\xd1\x0a\x93\xa2\xd9\x72\x08\xc7\x85\x53\x3e\x6d\x6f\x4e\xd9\x14\x5e\x33\x5e\x6c\xed\xdb\x26\x6c\x54\x06\xd2\x91\x14\x68\xf9\x14\x80\x83\xc9\x60\x2d\xe3\x93\x25\x57\xcc\x2b\x32\x84\xeb\x77\xf8\xc2\x53\x60\x6d\xc1\x9b\x7e\xe3\xf1\xb4\xdc\x5c\x61\xd6\xdf\x92\x0f\x8b\x3f\xa0\xa5\x8a\x20\x0e\x26\x43\x3c\x41\xb1\x3c\xe3\x9b\xd4\x27\x03\xd5\x64\x77\x03\x48\x86\x5b\xbf\xf5\x32\xfe\x6d\xe8\x2c\xeb\x89\xb6\xe4\x93\x6e\xb7\xff\x0c\x1d\x39\x0e\x7a\xff\x5c\x96\x61\x0c\xcb\xdf\x7b\x6a\xa4\x6f\x1f\xfb\xae\x88\x86\x14\x4b\xe1\x84\x05\xb1\xab\xf0\x75\xc1\xaf\x4f\x6e\x9e\xdb\xfb\x64\x7f\x23\xf8\x82\xb8\x60\x10\x07\x3f\xcf\xf0\xc3\xb6\xca\xd3\x0f\xda\xaf\xa6\xb0\x74\x3d\xf8\x62\xcb\x23\xf9\x68\x52\xf3\xee\x89\x62\x8d\x68\xb1\xfe\xf6\x08\x66\x30\x68\x44\x84\x05\x71\x30\x19\x08\x55\x98\xf3\xa8\xfb\x4d\x1d\x96\xa3\x0e\x7e\x76\x17\x49\xbc\x35\xa2\x5e\xc2\x4f\x09\x1e\x56\x59\x0b\x59\xf4\x3b\xa4\xc7\x73\x46\x84\x05\x71\x30\x19\xea\xa4\x82\x6b\x6e\x61\xed\xfc\xcd\x9c\x30\xe4\x4f\x30\x10\xba\x7b\xfe\x8c\xb8\x76\x64\x31\xbd\x12\x9f\xcf\x9f\x66\xfc\x9a\x26\x3f\x22\x2c\x88\x83\xc9\x80\x6d\x37\x6c\x2b\x2b\xf5\x05\xfd\xb9\xaa\x88\xdc\xf4\xbb\xa8\xf1\x5f\x17\xbb\x62\xd3\xfe\x55\x01\x23\x67\x3d\x51\x7e\xb7\x9b\xa0\xb5\xd1\x20\x0e\x26\x03\xc5\x3c\x37\xe3\x89\x95\xdf\x2c\x97\x2b\xa1\xa9\x66\xaf\x3b\x07\x2f\xa1\xae\xdd\xf1\x52\xbb\x1c\xd1\x6d\xb6\xc3\x8f\xbb\x59\x36\x08\x19\x40\xb9\xc8\xcb\x32\x28\x78\x35\x90\x98\x5b\x26\xb7\xbc\x27\x16\xdf\x5d\xca\xba\x93\x58\xf7\xa2\x09\xc5\x5f\x8e\xc4\x3d\x9b\x34\xb5\xcb\xb1\xb0\x1c\xfa\x65\x06\x71\x30\x19\x2a\xfe\x4d\xcd\xf7\x92\x1d\x3f\x1f\xf4\x16\x8b\xbc\xfe\x50\x9d\x27\xef\xfe\x13\x59\x99\x4c\x3a\xe5\x70\x21\xcb\xaf\xfa\x36\xcf\xa1\x83\xaa\x40\x1c\x4c\x86\x6a\x2d\x57\x77\xa7\xed\x6e\xdb\x58\x4c\xef\x7a\x4e\x83\x4d\x8d\xf4\xc6\x3c\x51\xe5\x6e\x2a\x1f\x7f\xff\xdb\x87\x2e\x8e\x1a\x38\x88\xb0\x20\x0e\x26\x03\x5a\xf1\xb1\xc9\x99\x43\x6f\xc0\xa9\x4f\x9c\x2c\x45\xec\xc5\xf0\x9a\x56\x6e\xa0\x81\xb5\x5e\xd9\xf4\x8d\x21\x0f\x8a\x46\x3d\x68\x6d\x34\x88\x83\xc9\x60\xae\x37\x9e\xb0\xb9\x61\x6d\x46\xbc\xfc\x3d\x80\x55\x02\x65\xe3\x5b\x9b\xd8\xdd\x1a\xf9\xbe\x72\x09\xf3\x8c\x52\xbb\x57\x99\x9a\x50\x66\xda\x63\x4b\x47\x5a\xe0\x1b\x91\x05\xdb\x63\x6f\x43\x52\x76\x42\x71\x6f\x5d\x4a\x63\x35\x64\x01\x8f\x0e\x11\x62\xf5\x54\x59\xa6\x8b\xff\xcc\x4c\x13\x49\xa4\x1a\xfc\x71\xa8\x9c\x48\x27\x10\x21\x72\xa3\xbf\xd5\xbc\xd0\xda\x9a\xac\xa5\x3e\xc4\x5d\x4c\xcd\xe7\x74\x34\x1b\x53\xfa\x1f\xe8\x97\xe9\xd1\x95\x86\x51\xe5\xa3\x10\x6b\xa5\x66\xb2\x85\xc8\xfe\xdf\x55\xf6\xeb\x84\x71\xf9\x05\xa5\x7c\x6a\x83\xeb\x62\x06\xe9\xb0\xcc\x34\x28\xf2\xe5\xcc\xb4\x60\x62\x58\x72\x84\x99\x25\xed\x84\x92\xf5\x88\xc2\x11\x79\x47\xb3\x7d\xe9\x53\xf1\x01\xfb\xfc\xc0\x5c\x09\x85\x95\x45\x7f\xaa\xff\x40\xcb\x5e\xd0\xfd\x18\xe1\x6e\x2b\x19\xb5\xd3\xa8\xa8\xd4\xff\xf2\x9e\xff\x28\xce\x29\xa1\xbb\x2e\xc3\x75\xeb\x94\xd1\xe3\x34\xf1\x1b\x94\x99\x06\xc5\xfc\x7f\x99\xe9\x40\x78\x66\x7a\x98\xfd\x81\xd0\xca\x97\xbb\x18\x02\x99\x1f\x08\xbe\x88\x2a\x30\xb8\xbc\xa6\xb5\x5f\x9a\x68\x1a\x43\x5f\x0a\x43\x2e\x3e\x7f\x30\x71\xe5\xcc\x74\x20\x3c\x33\x9d\x4d\x29\x37\x5e\xee\xe9\xd6\xce\x1f\x71\x67\x51\x30\xbf\x48\x75\xac\x77\x4f\xcb\x8a\xa8\xa5\x6b\x2c\x6e\x82\x7f\xe3\x7a\x73\xde\x95\x07\x9b\x81\x97\x32\xd3\x8b\xd7\xdb\xb7\x2d\x91\x77\x1d\x8f\xba\x4d\xa8\x8d\x1e\x1f\x7c\xa9\xfa\xf1\xba\x22\x49\xf5\x07\x06\xb2\x31\x81\x97\x32\x52\x5a\xd6\xd5\x9b\xbc\x94\x99\x4e\xe6\xa5\x4b\x61\xba\xa0\x98\x75\x71\x6e\x7e\xff\xa1\xd7\x4a\xd7\x6b\x1f\x8d\x20\x8c\x88\xae\x64\xc8\xe2\xcf\x42\xb1\xf7\xc1\xe8\xd5\x9b\xbc\x94\x99\x2e\x18\xbc\x15\x99\xfb\xb3\xae\xa2\x44\x0d\xf3\x8e\xac\x1c\x4e\x9b\xcd\x86\xf3\xe2\x73\x7d\xdf\x3b\x15\x7c\x3b\xae\x42\x66\x01\x57\xdf\x33\x1d\x78\x29\x33\xad\x46\xca\x1e\xec\x4c\xd8\xfd\xfb\x4e\xbb\x81\xfa\x0f\x51\x59\x67\xd9\xaf\x1c\x39\x01\x9a\x3d\x06\xfb\xf2\x1e\x4a\x7e\x11\x05\x42\x57\x6f\xf2\x52\x66\x9a\x78\xf3\x96\x9c\x35\x19\xcb\xe7\xb1\x20\xab\x28\x1d\xde\xb9\xa2\x07\x51\x16\xf2\xe4\xa3\xbc\x9e\x03\x6a\xbc\x6f\x27\x7b\x31\xae\x5e\xdf\x29\xf0\x52\x66\x9a\xe4\x3b\xce\x9f\xa5\xbf\xa5\xc4\x68\x1c\x6f\xdb\x76\xfd\x07\x0d\x63\x32\x0b\xc5\x4e\x3e\x37\x44\xfe\x9b\x9f\x4b\xd1\x4b\xb4\xe2\xfc\xdf\xfc\xab\x80\x7a\xe2\xe5\x8f\x90\x0d\x89\x34\xed\xb8\xfe\x5f\x91\x1b\x67\x87\xef\x9c\x43\x33\x05\xd8\x5c\xeb\x2b\x09\xf9\x8c\x1e\x38\xdf\x12\xb2\xf9\x5c\xb4\x0b\x2d\x77\x05\x71\xb0\x8f\x90\x96\x69\xdf\x79\x2a\x32\x67\xbd\x48\x43\x9f\x83\x90\xf0\x8a\x0f\x8d\x72\x68\xec\x94\x2b\xe1\x3d\x77\xa9\x43\xeb\x68\x75\x4d\x68\xc0\x07\xe2\x60\x1f\x21\x12\x67\xf5\xef\x3e\x8d\xe7\x2a\xaf\x5b\x43\x13\xbe\x32\x38\x08\xf3\x3c\x1d\x43\x72\xa3\xc5\xba\x8b\xcd\xf3\x82\x44\xc9\x9a\x19\x5a\x7d\x06\xe2\x60\x1f\x21\xa6\x48\x5f\x39\xad\x5d\x3d\xba\xfd\xc4\xbd\x5e\x85\x9b\x07\x42\xc4\x3c\x95\x11\xd8\xa4\xc8\x71\xca\x4f\x44\x73\x6e\x5e\x8b\x64\x87\x36\xe8\x00\x38\xd8\xd5\x92\x2e\x59\x61\x54\x44\x5a\xe4\xb6\x54\xf3\xf4\xc6\xee\x16\xb3\xdb\x4c\xc4\xab\x72\x7e\xf8\x40\x8b\xbf\x16\x37\x3c\x69\x3a\x46\x0f\xe5\x9f\x00\x1c\xec\x91\xb9\x4c\x3a\xf7\xb9\x1a\xa7\x2b\x1e\x3e\x4a\x18\xab\x66\xee\xe0\x8f\x34\xfb\x63\x25\x57\xd5\x4d\x73\xdd\xee\xf0\x09\x1b\xae\x1f\x06\x62\x44\x02\x7a\x49\x5e\x96\xa1\xbc\x73\x29\x86\xd0\x6f\xca\x4e\x84\x44\xf1\x5b\xdb\x2a\x92\x9b\xf9\x03\xcc\x8b\x54\xba\x3e\x6a\x87\x1b\x6a\xb3\x0a\x04\xee\xd0\xc8\x0c\xc4\xc1\x64\xc0\x3b\xbc\xbb\xe3\xe7\xae\x10\xb6\xfd\xee\x99\x8d\x63\x90\xc7\x2b\x89\xad\x8d\xb2\x81\x64\xf7\x27\x3f\x90\xa9\xa4\x65\xdf\xeb\x43\xa3\x5e\x10\x07\x3f\x32\xd2\x18\xef\x7d\x86\x8c\xbe\x90\x19\xdd\xdd\x98\x94\x29\x09\xe7\x6a\xb2\xad\xf2\x71\x62\xeb\x41\xbc\xb7\xd1\x78\x42\xb9\xf7\xa0\x99\x2f\x10\x07\x93\xc1\x81\xce\x97\x5a\x6a\xe6\x5a\x22\x6a\x4c\x9f\x3f\x4a\xa6\xf4\x93\xb6\x36\xd9\xf0\xc3\x6a\x3e\x77\x53\x9c\x5f\xaf\x99\x6c\x89\xa1\xfa\x7b\x20\x0e\x76\xb5\x8d\x67\xf7\x3b\x64\x74\x1d\x85\x38\xd4\x6d\x1c\x6e\x8c\x92\x7b\x3d\xde\x2f\x4f\x21\x89\x68\x4c\xa8\x9e\x3e\xa6\xfa\x98\x60\x0a\xfd\x66\x83\x38\xd8\x23\x0b\x78\x9e\xb6\x1c\x29\x81\x26\x46\xf2\x7a\x61\x72\x33\xda\xdb\x36\x9f\xff\xb6\x2e\x75\x73\x67\x86\x1d\x53\xa8\xde\xf9\x9b\xdd\x3d\xe8\x5f\x05\xf0\xf9\xfa\x2f\x0b\x27\x4f\x19\x36\x75\xe5\xe2\xe5\xad\x82\x04\x64\x2a\x87\x9e\xb6\x3e\x1a\xf8\x92\x83\xf3\xd7\x13\x69\xfc\xb9\xc4\x96\xd2\x83\xe7\x50\xd5\x44\x10\x07\x93\xe1\xb8\x94\x3f\xe4\xf0\xbe\xd7\x57\x74\xd7\xb8\xaa\x66\xb5\x6d\xe4\xb9\xa9\x50\x64\x7b\x92\x6b\x3f\xc5\xb9\xbe\x13\x6d\xbe\x76\x86\x56\x38\x82\x38\xd8\xed\x35\xb5\x6f\x1a\xbb\xd0\x5b\x0d\xaa\xdc\x53\x1b\x68\x1b\xbb\x61\x30\xd1\x50\x25\xd9\x5b\xf8\x46\xf2\xad\x65\x8a\xdc\xd2\x6c\xdf\x08\x22\x2c\x88\x83\xc9\x10\x5e\x39\xc2\x1f\x14\xcb\xea\xcf\x78\xf7\xec\x75\xdc\xcc\x87\xac\xef\xe8\xee\x9a\x62\x02\xb1\x9f\x07\x58\x2f\xea\x52\x25\x91\xa0\x03\xd4\x40\x1c\x7c\x53\xef\x98\xd7\xa0\x72\xee\x6d\x8c\x8e\x8a\xb2\x5e\xbd\x87\x96\xef\xfc\x4e\x59\xc8\x98\x7a\x31\x24\xaf\x89\x69\xdb\xbf\xff\xdb\x01\xe5\xd1\x41\x1c\xfc\x64\x70\x62\xec\x8f\xc9\x54\xdd\x79\xaa\xe7\x6e\xf9\xfc\x48\x63\xe5\xa1\x1f\xf8\x38\x45\xd9\x04\x3c\x90\x24\xf9\x27\x48\xef\x6c\x94\x23\x64\x00\x0d\x2c\x2e\xcb\x30\x9b\xfd\x11\xb3\xf1\xcb\x1b\x1f\x54\xce\x85\x4c\xaa\x22\xe2\xa5\x5e\xf2\x15\x8c\x46\xf2\x36\xd2\xc4\x43\x3a\xab\x18\xad\x3a\xa8\xd2\x32\x88\x83\xc9\x10\x63\x33\xcc\x81\xae\xb0\x6f\xe6\xf9\xa0\xd0\x40\xe7\x59\x58\x95\x57\x59\xd4\xea\x45\xde\x79\x7e\x70\x6b\x5e\xd3\xc8\x13\xc3\xaf\xd0\x22\x65\x00\x07\xcf\x3f\x8d\xba\x64\xac\xc9\xd0\xd8\xcb\x45\x97\xe9\xc9\xa2\x7a\xdf\xae\x72\x72\xfa\x51\xfb\xec\x7c\xc7\x7b\xc5\xa3\x43\x84\xc5\x17\xda\x1a\x02\xe2\x60\x32\xfc\x90\xb2\x7e\x5f\xc4\x3b\xb5\xc6\xb1\x6c\x3c\x6d\x27\xfe\x2a\x56\x8e\x38\x61\xd1\xc5\x57\xf9\xf4\xcf\x9b\xcf\x55\xe1\xc5\xc6\x50\xde\x05\xc4\xc1\xe7\x5c\x90\x07\x8a\x70\x8a\x5e\x24\x0e\x16\x44\xa9\xf3\xff\xe0\x97\x54\x0b\x72\x7b\xd0\x5d\xab\xe7\xff\x78\x42\xeb\x1f\x2b\x97\x13\xb4\xfb\x16\xc4\xc1\x1e\x59\xde\xf3\x7b\xcc\xe6\x67\x0f\x59\x44\x4e\x8f\x94\x92\x7e\x92\x76\x64\xcf\x70\x0d\x4d\xb9\xd2\x95\xdd\xd1\x9c\x8b\x30\xb0\x6f\xd5\x44\xc8\x00\x1a\xf2\xfd\x97\xcc\x34\xaa\xcd\xfd\xa3\x42\x94\x7e\xaf\x72\x4c\x8b\xf9\x4c\x33\x82\x07\xd8\x1d\x3b\x5c\x9c\x59\x2a\x7f\x0e\x3d\xff\x16\xef\x15\x41\xa9\x17\x10\x07\x3f\x47\x55\xdf\x86\x57\x79\xc9\xbb\x4c\x3e\x9b\xeb\xd9\x6f\xe9\xa9\x38\xf2\x79\x94\xef\x68\xf4\x3f\x64\x70\x6a\xe9\x94\xbf\x75\x9c\x11\x21\xc2\x82\x38\xf8\xfa\xfa\xea\x01\xbc\x70\x7a\x75\x51\xb3\xb5\x68\xda\xfb\x54\x53\xf1\xbf\x86\xbf\x50\x87\xd0\xd4\x65\xdb\xf1\x7c\x96\xc3\x27\x94\x81\x66\x0c\x41\x1c\x4c\x86\x7a\x8a\x1f\xef\xaa\xa7\xa8\xf5\xd9\x47\xc3\x83\x3e\x0d\xf4\x6d\xcb\x96\xe5\xe5\xb3\x4c\x84\x6c\xda\x05\x8a\x66\xc7\x4e\x67\x40\xbb\x22\x40\x1c\xfc\x6a\x35\x09\x58\x9a\x6f\x89\xbf\x48\xe6\x3b\xda\x6d\x96\xe9\x1a\xf9\x34\x8d\xeb\x3e\xcf\x5f\xc2\x72\x38\x73\x7b\x44\x56\x49\x0e\x5a\xb3\x02\xe2\xe0\x59\x22\x81\x52\x21\x51\xe9\xbf\x8e\x18\xb1\xeb\x94\x3e\xdc\x77\x85\x30\x3f\x75\xf5\x0a\x73\xa9\xe1\x56\xf3\xde\x56\x8d\x0f\xd1\x80\x6a\xf6\x82\x06\xe3\x97\x65\xb8\xe8\x50\x5e\xd1\x50\xa2\x6b\x14\x0c\x95\xb1\xac\xa7\xaf\x78\xb7\x8d\xb6\x82\x25\xcf\xc5\x1a\xbc\x8e\xa4\x7f\x9e\xc3\xca\x62\x0e\x25\xcc\x00\x1c\xbc\x88\xa5\xe7\xa3\x27\xe9\xbf\xa4\x94\xad\x3a\xeb\x73\x5c\x69\xc6\x32\xdf\xb5\x32\xfd\xed\x42\x36\xd5\xa9\x60\xc0\x1e\x97\x24\xd4\x84\x2a\xc6\x83\x38\xf8\x61\x85\xec\xb6\x3b\xf5\xe3\x43\xbf\x72\x73\xaa\x15\xbd\x0b\x64\xdd\xa6\x2a\x31\xd7\x73\x0d\x74\xf8\xd5\x56\xc5\x37\x9b\x0b\xb6\x54\x10\x61\x41\x1c\x4c\x86\x16\x66\x8e\xd7\x38\xbf\xac\x91\x6f\xb1\x17\xe5\xd6\x0e\x84\x96\x9e\x8d\x4a\xf4\x45\x69\xf3\x63\x70\x7c\x30\x0d\x2d\xc6\xa7\xb3\x87\x56\x3f\x00\x38\xd8\xd5\x1a\xbb\x51\xe9\x9e\x9a\x38\xda\x3b\x66\x7b\x87\x4e\xd8\xc7\x27\xaa\x58\xd0\x84\xdd\x63\x7c\xc5\x8c\xa7\xae\x12\x43\x6b\x63\x00\x55\x11\x00\x71\xb0\x47\xe6\x5c\xba\xc3\xc9\xe0\xf7\x71\x56\xf4\xa8\x2a\x01\xe3\xd9\x79\x62\xb6\xe2\x2a\xb2\xad\x60\xcd\xa4\xcf\x99\x75\x2a\x9b\x6d\x0c\x1e\x42\x06\xd0\x6f\xd2\x65\x19\xdc\x2b\xc9\x0d\xd5\x9e\x88\x8a\x86\xda\x7d\xc9\x72\xc6\xd4\xdb\xca\x30\x28\xa2\xfa\xa4\xf3\xc7\xe8\x69\x60\x55\x80\x56\x33\x5e\x2e\xe2\x82\x41\x1c\x4c\x86\x10\x92\x9f\x7e\x1e\x6b\x87\x5e\x8f\x5c\x26\xee\x7c\xf4\xc6\x18\xe6\x6a\x7e\x2b\xfb\x87\x5e\x9a\x40\xfd\xeb\x4a\x33\xc9\x0c\x36\x34\x87\x0e\xe2\x60\xb7\x17\xf5\xd3\x37\xd5\x7e\x9b\x58\xc9\x78\x5c\xf4\x60\x2a\x0a\xa2\x52\x79\xd1\x98\x5f\x8a\x59\x77\x59\xde\x4c\xb8\x21\x7d\x7e\xfd\x06\xfa\x4c\x80\x38\x98\x0c\x7d\x1b\x0a\x31\xce\x13\x7d\x61\xdd\x9f\x97\xa6\x98\x62\xb1\x71\xc4\xd7\x52\x7c\x52\xb9\xad\xf6\x5e\x44\x09\x4b\x07\xa1\x5e\x7c\x46\x84\x05\x71\xb0\xab\x15\xd1\xd1\xc2\x4f\x48\xd2\x1b\x1e\x52\x9b\x32\x7a\x22\x12\x23\x43\xf6\x53\xa9\xba\xa5\x98\xd7\xd9\x95\x4d\xe5\xd5\xd8\xe7\x64\x45\x44\x58\x10\x07\x7b\x64\xd1\x5a\xd1\x7d\x32\x0d\x4a\xb1\xe8\x04\x69\x6f\x9e\xe3\xd0\x0a\x6a\x33\xc6\xd3\x8a\xcb\xea\x7c\xda\xbd\x76\xf1\xe9\xb9\x0a\xc3\x3f\x84\x0c\xa0\x1f\xd8\xcb\x32\x60\xdc\x26\x0a\xa6\x66\xf7\xd2\xa5\x3d\xad\xe0\x61\x4b\x6b\x6e\xd5\x75\xc5\xdc\x22\x14\xe1\xcb\xea\x67\xed\xc8\x73\x50\x2f\x32\x45\x5c\x30\x88\x83\xc9\x10\x38\x53\x7e\x8d\xb8\x40\x73\x9a\x55\xb0\x33\x6e\x84\x1d\xcf\x4d\xfa\x87\xee\xf7\xd8\xca\x8b\x22\xd3\xbc\x90\x75\xf9\xa9\x59\x68\xda\x14\xc4\xc1\x6e\xef\xef\xa4\x3f\xf1\x6e\x75\x4a\x0d\x0f\x93\x45\x85\x06\x1b\xa9\x62\xc9\xc5\x96\x03\x37\x2e\x18\x0e\x06\xd0\xdc\xf5\xec\x45\x4e\xa1\xf9\x4d\x10\x07\x93\x21\x9f\x54\x68\xe8\xbc\x82\xdc\xa1\xd3\x4e\x63\x83\xcc\xc5\x22\x90\x60\x6d\x5d\xcd\x06\xa3\xe7\xab\xab\x58\x7f\x15\x65\x6c\xa9\x30\x22\x2c\x88\x83\x5d\x6d\x46\xbd\xc3\x4e\x47\x70\xe7\x28\x93\xd9\xa3\x81\x30\xc9\x9b\xd3\x6a\x61\xe3\xea\x7c\x31\x05\x4f\xf1\xb2\x37\xc9\x9e\x78\x1f\xc6\x20\xc2\x82\x38\xd8\x23\xb3\xd3\x57\xc9\x4c\x0a\x95\x64\x9c\x76\x5a\x33\x67\xbe\x86\xb1\xd5\x40\xc7\xe9\xd6\xc9\x29\xc7\x21\xf0\x2a\x76\xf1\x6b\x03\x1a\x0f\x94\x99\x06\xcd\x29\x22\x8e\x99\xbe\x94\x99\x7e\xf8\x8c\xf7\xc0\xcb\x6b\xf4\x0b\x32\x0e\xbe\xda\xcc\x54\x53\x5a\xac\xf3\x0e\xc6\xbe\x03\x46\x1a\xcd\x96\xc1\xd2\x45\x57\xa7\xec\xd5\xa7\x5e\x2e\x65\xa6\x2b\xb8\x1a\x8c\x5e\xe0\x3f\x7c\xbf\x23\xbe\x57\xba\x5e\x35\x41\x52\x2e\x9c\x5d\xeb\x24\x31\x94\xf7\xe2\xee\x3b\xee\xb7\xed\x25\xf8\x57\x6f\xf2\x52\x66\xba\x3f\xa5\xec\x3e\x36\x35\x03\x52\x7f\x44\x34\x03\x1b\x6d\xdc\x31\x3a\x63\x54\xa9\x5a\xb6\x35\xb5\x07\x5d\x8c\x95\xdb\xf5\xae\xab\xce\x88\xea\xfe\xdf\xee\xe5\xe5\x2e\x49\x62\xf7\x86\x7f\xb0\x4e\xbe\x8c\x9a\xb7\x90\x31\x50\xad\x6f\x24\x6d\xed\x36\x92\x65\xa2\x6d\x75\xfa\x90\xcc\xd3\x97\x5b\xfa\xd0\x62\x6e\x10\x07\xeb\x92\xd8\xdc\x9b\xf7\xea\xe6\x08\x94\xf8\xa4\x3d\xdb\xdd\xb3\x7f\x77\x07\xed\x0b\xd9\x75\x9b\xc7\xea\xeb\xde\x12\xeb\xd8\xb1\xf6\x87\xce\xd5\x02\x71\x30\xc9\xef\xff\xb3\xaa\xba\x97\x2d\x4b\x53\x4e\x1e\x2a\x1e\xee\xaf\x62\x9a\x9b\x1d\xcf\x13\x28\xd5\xc0\x30\x52\x29\x77\x0f\x79\x6b\x08\x5a\x09\x0a\xe2\x60\x5d\x92\xb2\x6b\xfc\xf6\x61\xda\x4c\x41\x68\x4c\x44\xdb\xf5\x43\x8e\x6f\x24\x6c\x9b\x73\xa5\xbb\x05\xf5\xc4\x54\xc1\x4f\x83\x32\x79\x1b\x10\x61\x41\x1c\xec\x6a\xb5\x93\xf2\xe7\xb4\x19\x62\x29\xe5\xdf\x1a\xa8\x0d\xac\xb3\x70\x2c\x52\xa5\x17\x16\x8e\xb7\x3a\xc8\x8c\x6f\x88\x17\x4a\x05\x7d\x82\x56\xb4\x03\x38\xd8\x23\xf3\x97\x58\x50\xc9\x95\xcd\x73\xef\xb3\xc7\xfa\x3d\x41\xab\x23\xd8\xe1\x27\xf9\x55\x78\xb1\x69\x12\xf3\xd5\xf3\x03\xd6\xfd\x18\x5b\xc4\xfb\x19\x64\xf9\x7f\x39\x4c\x96\x1f\xe5\x6f\xc1\x9d\xf6\xbf\xa8\xec\xed\x79\xe5\xcb\x35\x21\x4d\x76\xfd\x5a\xa1\x8e\xc1\x38\x34\x1a\xc9\xce\x6a\xfd\x3f\xa1\xf7\x33\x88\x83\xc9\xe0\x21\x8b\xa5\xdc\xd5\xca\xf9\x95\xf9\x98\xcd\xfc\x06\x49\x08\xda\x7d\xde\xcf\xd9\x3f\xd8\xec\x82\xd2\x68\x18\x7e\x39\xc5\xe2\x4c\x20\xc2\x82\x38\xf8\xca\x21\xb3\x96\x8b\xe7\x3e\x83\x86\xf7\xff\xa2\xa4\x8e\x38\x8b\xd0\x50\xe9\x22\x65\xcc\xf6\xf4\x1c\xee\x1a\x79\x66\x4a\x71\x5a\x63\x40\x2b\x87\x00\x1c\x4c\x86\x37\x43\x45\x54\x4a\xd7\x91\x3b\x2a\xc2\xc5\x4f\xa3\xf2\x0f\x7f\xfb\xd1\x7f\x4f\x8f\x91\x49\x8f\xa6\x89\x3b\xcc\xd7\xe4\xf3\xd0\x41\x84\x05\x71\xb0\xab\xdd\xe8\x68\x64\x7e\xd6\x2d\x13\x45\x97\x19\x1f\x81\x14\xf0\x3c\x9c\x04\x25\xf1\x70\x99\xad\xac\x87\xff\x61\x49\xb9\x64\x24\x89\x32\x22\x2c\x88\x83\x3d\x32\xd2\x69\x71\xd7\x61\xf4\x1f\xa9\x17\x21\x35\x0d\x5b\x74\xe7\xe3\xb1\x87\x3d\x1b\x4a\xa3\x9b\x0b\xd9\x2f\xe3\x9b\x42\x15\xbb\xa2\x11\x32\x80\xde\x3f\xff\xa5\xb4\xfb\x70\x8d\x62\x7c\x46\xc2\x54\xef\x32\x1b\x9b\x84\x72\x60\x7a\x29\xea\xab\x52\xec\xac\x5b\x74\xba\x4e\xc2\xce\xa9\x63\xea\xf5\x88\x0b\x06\x71\x30\x19\x04\x7f\xf7\x2b\x20\xb3\x8c\x05\x7c\x21\xcf\x9b\xe2\x26\x7e\x3a\x34\xda\xe1\x8c\xc4\xf9\xfb\xfd\xc9\xbd\x64\x9f\x94\x92\x7f\x5f\x7f\x23\xc2\x82\x38\xd8\xed\xc5\x76\x16\x0c\x37\x4c\x98\x75\x2c\x4e\xe7\x44\x1f\x20\xc8\x52\xe5\x74\x71\xd0\x48\x3f\x7d\x72\xd8\xe5\xab\xc2\x84\xac\x93\x06\xad\x8d\x06\x71\x30\x19\x14\x0e\x63\x89\xb6\x7c\x6c\xfb\x74\xaa\x74\x89\x98\xb4\x9f\x6b\xec\xfe\x7b\xd3\xb2\xb8\xfd\x76\x5c\x33\x2a\x09\x85\xbc\x5b\x15\x2a\x72\x09\xe2\xe0\xc7\xe5\x37\xb8\x87\xeb\x13\x30\xad\x10\x44\x16\x17\xe3\xb5\x25\x63\x2d\xfd\xb9\xa6\x61\xad\xbb\x74\xf3\x36\x37\x8b\x1a\xb1\x6b\x05\x54\x31\x1e\xc4\xc1\x1e\x99\xdc\xdd\xc8\x01\xb5\x14\x3d\x0c\xaa\x6b\x2c\x2f\x09\xda\xf3\xdb\x14\x4a\xae\x75\xe9\xf0\x7d\x2a\x76\xfe\xae\x5a\x4b\xb9\x90\x2b\x80\x90\x01\x94\x8b\xbc\x2c\x43\xd9\xfa\x3f\xd3\xbc\xb7\x9c\x09\x17\xe4\x56\xaf\xad\xe2\xad\x73\xd5\x3f\xe5\xbe\xb0\x96\x3e\x4e\x97\x41\x2b\xfb\x78\xf3\xf7\x61\x29\xe2\x82\x41\x1c\x7c\x01\xd3\x5f\xff\xe8\xa3\x3a\xd9\x17\x42\x22\xf1\xdf\x5a\x59\xf2\x6b\xe4\x91\x07\xfa\x64\x15\x57\x66\xe4\xee\x62\x9e\x86\x14\x5c\xe8\x41\x0b\x98\x00\x1c\xbc\xda\x0d\x66\xcd\xaa\xd0\xdd\x81\x1b\x02\x72\xd3\x27\x27\xc6\xfb\x8e\x2f\xb7\x30\x7e\xe7\x64\x6b\x20\x5f\xb0\x7b\x6e\xd6\x8d\x16\x42\x5b\x89\x40\x1c\x4c\x06\xbb\x1a\xeb\x7f\xc3\x7c\xab\x72\x65\xe6\xbd\x3d\x0e\x47\xa3\x8a\x2a\x82\x79\x82\xbc\x68\xc8\xca\x4f\x5d\x26\x70\xb8\x54\x33\xa1\xba\x86\x20\x0e\x76\xb5\xe7\xbe\x36\x95\xf5\xf6\xb6\x2a\x45\xc2\x4f\x1f\x98\xa8\x6c\x19\x99\xf0\xc4\xec\x0f\xf5\xa7\xd4\x56\x96\x5c\xb4\x96\xed\x17\xa2\x43\x99\xe9\xa6\xfc\x72\x72\x7d\xcb\xd3\xd4\x6d\x22\x52\x41\xc9\x1a\x4a\x8e\x53\x92\xb9\x38\x7a\x8d\x06\xa3\x89\x8c\x6e\xc3\x5f\x8a\x7f\xb3\xff\x33\x33\x3d\x9d\xff\x62\x86\x28\xbf\xa9\x58\xbe\xef\xb6\xbe\x64\x04\xdb\x33\xf6\x73\x23\xf7\x8d\x76\xef\x1b\xd8\xa4\x5d\xc5\x9c\x9c\x03\xff\x59\xa3\xa5\x8c\x16\x97\xe5\xe2\x69\x79\xe6\xbd\x91\xc4\x87\x34\x23\x03\xdf\x33\x9a\x85\x84\x3e\xd2\x91\xc8\x9f\x58\x92\x9a\xde\xc1\x14\x34\x86\x65\xa6\x41\x91\x2f\x67\xa6\xff\xa0\xcd\x7b\x52\x5c\x2f\x60\x64\x3c\x2b\xb0\x45\x93\xf9\x26\x82\x81\xd3\xcd\x4f\xc1\xf7\xa6\xf1\x80\x32\xce\x95\x2f\xf8\x3b\xee\x7f\xa0\xa2\x42\x5b\x7b\x27\x03\x82\xbf\x04\xca\xa7\xb3\xaa\x3a\x45\x6f\xb4\x13\x0f\x16\xfa\xd9\xd5\x7f\xb9\x21\xa9\xc3\xba\x9d\x19\x70\x01\x65\xa6\x41\x31\xff\x5f\x66\xba\x11\x9e\x99\x66\x2e\x08\xea\x48\x9a\x0c\x9d\xfc\x9e\x93\x91\xbb\x8a\xe7\x87\xf2\x2b\xc6\xef\xb9\x02\xf2\x46\xd2\x0b\xd7\x15\xfb\x6e\x9f\x6e\x87\x2b\x67\xa6\x1b\xe1\x99\xe9\x28\xb5\x95\x2f\xc2\x9e\xdd\x6d\xfc\x61\xb4\x5f\x7e\x60\xdd\x4b\x6e\x47\xf9\x46\x90\x69\x7f\x9f\x54\x98\x80\x87\xfc\x57\x79\x67\xc3\x95\x07\x9b\x8d\x97\x32\xd3\x42\xf2\xfa\x0e\x0f\x6c\xce\xcf\x89\x45\x8a\xda\x08\xbb\xad\xbd\xdf\xd8\xb0\xa3\xfc\x34\x8e\x3a\x20\xf8\xad\x7d\xae\xfa\x58\xcf\xfb\xea\x4d\x5e\xca\x4c\xaf\xd3\x1e\x71\x0d\x75\x18\x46\xd0\x71\xf3\x2d\x0e\xa2\xfc\xc2\x44\x13\x1c\xc6\xb6\xb3\x51\x20\xe5\xe0\x2b\xbf\xcb\xe6\x37\x7d\x76\xf5\x26\x2f\x65\xa6\xa7\xaa\x0d\xfa\x56\x5b\xd8\xef\x9e\xd0\x36\x16\xd2\xd6\xa8\x3c\xa2\x6a\x3a\x7e\xd5\x7d\xdb\x27\xa0\x80\x65\xe4\x44\x58\x08\xc7\xf3\xea\x4d\x5e\xca\x4c\x7b\xae\x36\xa1\xea\x64\x2d\x93\xf6\x04\x85\xe8\x51\x90\xb6\xf7\xb1\xf2\x9b\x85\x3e\x66\x11\xf5\x3e\xa5\xaa\x1f\xd8\x4b\xec\xd4\xb8\x7a\x93\x97\x32\xd3\x6e\xa3\x03\xe9\x2f\x91\x30\x64\x75\x05\xe2\x82\x6a\x6f\xfd\xba\x20\x88\xe1\xdb\xe0\x56\xe2\xc7\xdc\xbc\xb7\xbe\xff\xdb\x96\xe3\xc6\xd5\x9b\xbc\x94\x99\x0e\x61\xcc\xdf\xba\x21\xa0\x1e\x75\xfd\x53\x93\xab\xd5\xdb\xdb\x2b\x09\xe2\x6b\xa7\xa5\xda\x18\x77\x7e\x85\xf8\xd7\xa1\xd4\xaf\x08\xfc\x6f\xfe\x55\x40\x3d\xf1\xf2\x47\xe8\x97\x05\x29\x6a\xdf\x8d\xa7\x82\x3d\x9f\x7e\x26\xf7\x09\x7b\xbb\xc5\x36\xfb\x28\xf9\x65\x18\x31\x5a\x97\x61\xf0\xfb\x31\xeb\x40\x2b\xf1\x41\x1c\xbc\xa4\x8f\xe1\xac\x7d\xc5\xb3\x63\xa2\x5f\x2b\x0c\xbd\x24\xb6\x75\x2c\x8d\xa4\x1a\x47\x59\x36\xa3\x04\x45\x6b\x28\xc7\xa1\x24\x9c\xd0\x9c\x1a\x88\x83\xbd\xd6\xdf\x86\x91\x7d\x2a\x8a\xcf\xb7\x5d\x7a\x5a\x63\x71\xad\x7f\x85\xa1\x5a\x74\x77\xb5\xda\xe6\x15\x3e\x63\x85\x80\xf7\x8f\xcf\x37\xd3\x10\x61\x41\x1c\xec\x23\x74\x2f\x6f\x39\x1d\xd7\xd7\x4e\x30\xe0\xc3\x83\xd1\x33\x6b\xc5\xfe\x89\x83\x92\x86\x6b\x56\x61\x07\x2e\x15\xcc\x0e\x8c\x13\x1a\xd0\xf0\x14\xc4\x85\x48\x11\xfe\x7f\x26\x3b\xa2\x84\x19\x36\xb1\x3b\xff\x35\xaa\x47\xd2\x3d\x9a\x40\xfa\x38\x58\x97\xd7\x70\x7e\x07\x6d\xc4\xd7\xe0\x17\xe7\xe1\xc9\x3a\xb4\x7a\x14\xc4\xc1\x1e\x59\x94\x3b\xce\x46\xe5\xec\xaa\xb7\x10\x71\xef\x35\xb2\x5a\x81\xcc\xae\x86\xc8\x5c\x55\x1e\xe2\xd4\x5e\xc1\x80\x72\xae\x0f\x4f\x94\x10\x23\x12\xd0\x4b\xf2\xb2\x0c\x34\xe1\x0e\x74\x48\x11\x39\xed\x46\x0b\x18\x9f\x3e\x2b\xce\x10\x2d\x1a\xae\xe4\xde\xe6\xf5\x11\x28\x6e\xc7\xd9\xbb\x4d\x78\x06\x4d\x8b\x83\x38\xf8\x81\x28\xff\x3e\x67\xf9\x3d\x53\x58\x62\xb5\x7f\xad\xf9\x45\x64\x6c\xac\x9c\x45\xf7\xba\x5b\x49\x9a\x38\x75\xa0\x83\x40\x49\xfa\x2f\x68\x0b\x23\x88\x83\xc9\xb0\xfc\x5c\xeb\xeb\x3f\xbc\x85\x67\x0c\x2a\x16\x83\x35\xcd\x32\xd4\xfd\xf6\x6f\x47\xa7\xe9\xf2\x15\x62\xa8\xa2\xb1\xae\x19\xfb\xe3\x23\xc2\x82\x38\x98\x0c\xeb\x66\xcb\x91\xeb\xcd\xfa\x79\xe1\x66\xbc\x9f\x5b\x74\xdb\x82\xea\x8a\x53\xff\xc5\xb1\x5a\x3e\xe7\xaa\x0e\xa3\x3d\x0d\x3a\xda\x46\x84\x05\x71\x30\x19\x2c\x62\xd1\x70\x7c\x3e\x72\x3c\x79\x43\x45\x33\x98\x2b\x71\xb2\x56\x1f\x7a\x73\xd2\x52\xaa\xa4\xbc\x0f\xe5\x47\x53\x25\x26\xee\x28\xf4\x67\x05\xe0\x60\x8f\xcc\xc2\x97\x29\x49\xb5\x88\xbe\x22\x53\x4c\x76\xa4\x7a\xd0\x42\x98\xa1\xb1\x6e\x92\x04\x7f\x7e\x20\x97\x8b\xdb\x81\x84\xd6\x55\x19\x21\x03\xe8\xf3\x75\x59\x06\xd3\x54\xab\xa6\x59\xf1\xce\x21\x97\x8d\xf5\xbc\x6d\xdf\xb5\xf4\x28\xee\xd6\xae\xb6\x33\x77\xe9\x2d\xf1\xf1\x52\xd1\xe4\x5e\xe8\xe4\x21\x10\x07\x93\xc1\x3e\x27\x08\x23\x24\xde\x92\xd9\xe8\xcf\xaa\x14\xff\xe3\x99\x36\x75\x82\x64\xa2\x18\xae\xfd\x06\x2d\x16\x5d\xc6\xeb\x35\x84\xa4\xd0\x22\x65\x00\x07\x3f\x74\x3c\x6e\xe9\x56\x54\xd6\xcb\x47\xea\xf7\xc6\x13\xe5\xb5\xf0\x0a\x5c\x37\x52\x74\xb1\x59\x2b\x6f\x84\x5e\x8f\xab\xf5\x1f\x39\x84\x56\x38\x82\x38\x98\x0c\x5f\x68\xb2\x1c\xad\x04\xfc\x7a\x97\xca\x89\x53\x37\x9f\x37\x6b\x63\xbe\x26\x29\xa4\x95\x57\x99\x72\xd0\x78\x5c\x73\xb8\xff\x08\xda\xb5\x06\xe2\x60\x32\xb4\x66\x29\x68\x0c\xff\xf8\x89\x5e\xe5\x8e\x4a\xf3\xd1\xcf\xf6\x15\x61\xa8\xd2\x8a\xe8\x73\x97\x4a\x2a\x11\xf4\x5d\x5a\xa9\x89\x6f\x50\x35\x05\x00\x07\x7b\x64\x04\x7f\xd7\x1c\x18\x6e\x51\x6f\x11\x74\xd2\x7a\x8a\xdc\x36\x94\xc8\x9a\x29\x92\x17\x64\x2c\xeb\x2e\x8c\x2e\xc1\x57\x5e\x6c\xa9\x46\xc8\x00\x1a\x58\x5c\x96\x61\xda\x78\xca\x2b\x6b\xdb\x34\x51\xe6\x19\x63\x51\x6f\x90\xe3\xde\x82\xe3\x76\xa2\xe6\x8d\xea\x39\xb7\x4d\x75\xe2\x6b\x78\x7d\xd0\x01\xff\x20\x0e\x26\xc3\x7b\xf2\x3c\x62\xbe\xe5\x21\x26\xa4\x61\xf2\x12\x86\x89\xa0\x91\xbc\xd6\x94\xa0\x02\xa9\xd2\xc0\x70\x8b\x52\x4e\x0d\x61\x0c\x46\x28\x43\x0f\xe0\x60\x32\x60\xe8\x22\xb9\x52\x75\x16\x99\x60\x6b\xf2\x70\xfd\xab\x88\x62\x2c\xdb\xa8\xfb\xe3\xfd\xe3\x80\xcd\x60\x77\x5f\x3e\xc5\xf1\xb3\x03\x34\x27\x0e\xe0\xe0\x85\x98\xe8\x50\xf2\xc2\xb4\x85\x91\xfb\x17\x8c\xb1\x45\x9b\x7e\x39\xcd\x8e\x8b\x1a\x9b\x37\x7b\x5d\x48\x50\xb8\xf4\xf8\x18\xd5\x43\x87\xd4\x82\x38\x98\x0c\x53\x55\x4b\x26\x84\xf7\xc5\x15\x29\x5e\xcb\x63\x88\x53\xf8\x05\x14\xa3\x52\x2c\x99\xe9\x5b\x1f\x91\x65\x3b\x8e\xbe\x2c\x71\x19\x46\x84\x05\x71\xb0\x47\x66\x58\xf6\x5a\xa3\x51\x7b\x3b\xd2\x2b\x60\x5c\xc1\x2c\xea\x56\xe3\x75\x19\xfc\xa3\x1b\x0d\x72\x43\xec\x34\x3b\x3e\x0d\x84\xd2\x21\x08\x19\x40\x43\xbe\xcb\x32\x54\xab\x76\x18\x5a\x57\x18\x12\xe0\xeb\x53\x11\x8a\xf9\x39\xe9\x94\x4b\xa7\x58\x67\xc9\xe1\x28\xf9\x48\x3c\xc4\x7d\xc5\x9b\x00\xe5\x48\x40\x1c\xbc\xf2\xdb\xb7\xdd\x63\x36\xd9\x52\x63\xd1\xbf\xbd\x5b\x99\x4b\x7e\x75\x53\x6f\xd5\xfb\xb8\xfc\x73\xd4\x91\xcb\x0e\xb3\x72\xad\x0a\xdd\x10\x61\x41\x1c\x7c\x15\xc8\x3d\xa9\x32\xde\xf8\x42\x5d\x54\xf5\x25\x14\x65\x41\xc2\xd2\x61\x33\xac\x7f\xe4\x78\xc4\xb1\x6f\x64\x25\x6a\xdd\x7e\x56\x41\xef\x73\x10\x07\x93\x21\xc4\xfd\xd9\x89\x53\x5b\x03\xae\x40\xc0\x67\x7f\xbe\xea\xe3\xd3\x65\x8d\x58\x1c\xbe\xc0\x5f\x52\xbb\xa5\xa1\x5b\x28\x0b\x0c\x50\x6e\x00\xc4\xc1\x64\xa8\x7a\x33\x8c\x86\xd3\x15\xa4\xf1\x34\xc2\xbd\xab\xbc\x86\x70\x34\xef\xcf\x97\xd2\x8f\x15\x6b\xf1\x34\xbb\xaf\x30\x56\x1d\x0b\x05\x10\x61\x41\x1c\xec\x91\xcd\x89\xab\xbe\x7f\xeb\x13\xec\x9a\xf3\x7a\xd4\x22\x48\x22\x55\x4d\x0d\x4f\x8e\x60\x21\x3a\x86\x3f\x58\x76\x68\x0d\xfd\xe6\x0d\x3f\x84\x0c\xa0\xc1\xf8\x7f\xd9\x6c\x21\x92\x17\x9c\x4b\x69\x33\x4c\x84\x3f\x80\x31\x97\x2b\x6a\xf2\xf8\xf7\xe2\x6f\x8e\xfe\x47\xe5\xfe\x6a\x3b\x1d\xd4\xcc\x9f\xa0\xd9\x1c\x10\x07\xcf\x3f\xfd\xbc\x27\xc6\xfb\x25\xfb\x62\x40\x35\xd1\x27\xd1\x33\x98\x81\x79\xca\xe5\x8b\xb5\x26\x73\x07\x73\xfa\xe6\x70\xf3\x5c\x1e\xd4\x29\x40\x1c\x4c\x06\x5c\xa2\xc0\x0b\xd3\x8e\x9f\x9e\xc7\xbb\xcb\x15\xc7\x37\x17\x82\x64\x06\x5d\x8e\xbd\xee\xbe\x60\x1b\xe7\x89\x68\x7a\x4a\xae\x04\x2d\xc4\x04\x71\x30\x19\x0c\xac\x6f\x6a\x5c\xbc\xd8\x7d\xd7\x49\x11\xcb\xac\x87\x1b\x2c\x4f\x5c\x9e\x97\xab\x32\x9f\xbb\x8b\xe4\x90\xf6\x42\xa9\xcf\x02\xaa\x0a\x03\xe2\x60\x32\xcc\x9d\xac\x9f\x71\xd5\x68\x77\x3d\x55\x2a\x8a\x40\x4a\x92\xee\x4d\x31\xbf\xe8\x31\xa8\x42\x31\x09\x4b\x8f\x7b\x48\xd2\x7f\x08\xcd\xeb\x81\x38\xd8\x23\x13\x30\x74\x54\xfe\xea\xf3\xab\xeb\x97\xcf\x97\x4a\x0d\xc9\x1a\xc5\xca\xc4\x96\x24\x77\x46\xf9\x0f\xbb\xa9\xac\xaf\x78\xfa\xef\x3e\x47\xc8\x00\xfa\x4d\xfa\x2f\x7b\xf2\x8c\x77\x28\xfd\x73\x9d\x34\x32\xb0\xb6\x0e\x90\x02\xb9\x15\x3f\xb2\xa0\x6d\xfb\xc7\x8f\x1b\xdc\xf3\xf5\x63\x0c\xb7\xaf\x1f\x80\xf6\xe4\x01\x38\x98\x0c\x33\x43\x23\xc8\xb4\x19\xa3\x7b\x8f\x47\xeb\x03\x5f\x85\xab\xde\x96\x3c\x8b\x7f\xf6\xc3\xad\x60\xa6\xa3\x0f\xd7\x69\x7a\x31\x17\x4a\x46\x82\x38\x98\x0c\x33\xff\xc6\x07\x32\xea\xd8\x86\x1d\xa4\xf1\xb4\x35\x90\x9e\x0d\xe9\xa0\xd2\x31\x90\x5e\xf3\x31\x7e\x69\xb2\x3a\x3a\xd4\xaf\x01\xcd\xc6\x82\x38\x98\x0c\x71\xb7\xa6\x36\x54\x4b\xd1\x05\xeb\x98\x1b\xb8\x99\x84\xb7\xcf\x3c\x9e\xa1\x13\xa0\x5f\xb4\x62\x7e\x61\x88\xb4\xb9\x20\x68\x85\xa6\xb4\x40\x1c\x4c\x06\x4e\xdd\x27\xea\xc3\x07\xdf\x33\x34\x44\x56\xe8\xc2\x77\x25\xf5\x72\x2d\xd4\xab\xd9\x9c\xa7\xc2\xf9\x5c\x82\xbe\x0e\x1a\xe9\x40\x89\x04\x10\x07\x7b\x64\x1a\x0d\x64\xf3\xb1\xcd\x01\x12\x5e\xec\x3f\x17\x9e\x88\x1d\x7e\x25\xb4\x68\xc2\x1c\xee\x6b\x1b\x5d\x3c\x9e\xf4\xf8\x63\xff\xd3\x05\x3a\xf4\x01\xf0\x03\x7b\x59\x06\xf9\x22\x23\x83\x63\x72\xe5\xfa\x86\x1b\x74\x86\xdc\xb3\x37\xaa\x36\xd4\x94\x67\xdd\x3a\x82\x44\x1b\xef\x9b\x47\xca\x95\x6e\x62\x22\x2e\x18\xc4\xc1\x64\x30\x48\x3f\xa7\x79\x79\xd7\x17\xf3\xbc\xcb\x21\xe7\x17\xad\x42\xea\x8e\x7d\xb5\x4a\xeb\x01\xda\x64\xb2\x70\xba\x7e\xdb\xfe\x2a\x34\x14\x01\x71\x30\x19\x74\x06\x04\x55\x0f\x9c\xf4\xfd\x90\x62\x2b\x7a\x38\xed\xe9\xed\xc5\x76\x2b\x36\x33\x57\x54\x43\xb6\x5b\xcc\xf6\xb9\xe4\x93\x59\x11\x61\x41\x1c\x4c\x06\xf5\xe8\x6b\x11\xef\x26\xd4\xea\x32\x35\xdf\xc4\x48\x05\x24\x9c\x9c\xd4\x6e\xb5\x2a\x5b\xde\x2f\x95\xf6\xe7\x13\xd7\x39\xf3\x86\xb2\x6b\x20\x0e\x26\xc3\xbb\xd0\x36\xe9\xb7\xc6\x2e\xfb\xe6\x11\x45\x51\x7a\xa5\xad\x3c\x63\x2a\xaf\x7b\xa4\xd6\x72\x50\x17\xbe\x54\x8b\x1a\x8b\xbb\xb7\x22\xc2\x82\x38\xf8\xd1\x0c\xdf\x18\xf4\xbc\xf1\x29\x33\xb6\x3e\x06\xff\xfb\xb7\xcb\xe5\xff\xbc\xa1\xb8\x23\xfc\xa1\xfa\x17\x81\xb3\x2d\xc3\x98\xc9\xfa\x07\x50\x66\x1a\x34\xa7\x88\x38\x67\xfa\x52\x66\x7a\xb1\x84\x06\x2d\xde\x45\xf9\x23\x0d\xe9\x41\xd5\xfe\xc1\xdb\xbe\x6a\xcc\xc8\x90\x71\x1d\xbe\x1b\x42\xf2\x52\xdf\x66\x14\x52\xb0\xae\x3e\xf5\x72\x29\x33\x4d\xd1\xdb\x53\xbd\xf3\x34\x67\x79\x75\x0a\x5f\x9a\xd2\x7b\x9d\xa1\xd1\x36\xf4\xc3\x3b\xd9\x68\xab\xf7\xb8\x4a\xf8\xd4\x43\xb8\x62\x57\x6f\xf2\x52\x66\xda\xe6\x0b\xaa\x9e\x1d\x5e\x23\x52\xbc\x5b\xf8\x4b\x2b\x4d\x3e\x4d\xff\xd9\xd8\xe1\x87\x94\x26\x77\x5f\x79\xa3\x70\x3d\xb3\xab\x32\xff\xdf\xcc\xf6\x80\xee\xe5\x7f\x29\x8a\xa6\x12\xd1\x7f\xdc\x2f\xd5\x61\x93\x33\x3c\x5e\xf5\x29\xee\xc4\xe1\x23\x01\x7b\xd3\xba\x4c\x7b\xef\x20\xf5\xef\xde\x2d\x16\xe8\xe8\x77\x10\x07\xeb\x92\x8b\x62\x85\x24\x35\xa5\x77\xea\xf8\x75\x72\x16\x3b\xfa\x6d\xf8\x77\x75\x7e\xbf\xba\x9f\x12\x19\xc7\x3d\x6e\xdc\xe7\x35\x8b\xe5\x8b\x08\x0b\xe2\x60\x5d\x12\xdd\x56\xfa\x99\x65\x6e\xdc\x99\x3f\x69\x70\x92\xcc\x2a\xe6\x9c\x98\xca\xe7\x59\x46\xda\x72\xe6\xcd\xdb\x48\xca\xe7\xf7\x23\x7d\x10\x61\x41\x1c\xac\x4b\x6a\xd4\xa5\x29\xc6\x6e\xbf\xe7\x33\x4a\xae\xe8\x36\x78\xf5\x71\x4f\x20\x8d\x33\x89\x59\x4e\xd6\x7f\xdf\x4c\x89\xba\xe7\xc7\x16\x34\x06\x00\x71\xb0\x2e\x39\xfa\xe8\xf1\x11\xbb\xc4\x78\xec\x9b\x8e\x30\xfe\xc3\x75\x26\x6c\x55\xdf\x2d\x62\x2f\x2f\xaa\xf1\x22\x6d\x6b\x82\xcd\x30\x33\xa8\xf4\x11\x88\x83\x3d\xb2\xdb\xf3\xdb\x8f\xbd\xd1\x1f\xe5\xdd\x12\x0a\x14\xf9\x34\xef\xc8\x3b\x66\xec\xfd\x2a\xd4\x87\xe7\xbd\xc6\xfb\xfa\xe2\xc4\x03\x8f\x24\xc4\xfb\x19\x64\xf9\x65\x19\xd0\xdf\xfd\x9b\x65\xa1\xb5\x55\x56\xb6\x38\x3a\x2a\xc9\xda\x8f\xbf\x2b\x33\xf5\xf9\xb9\x6b\xa6\x63\xb4\x8b\x79\x7d\xc7\x86\xa3\x36\x74\x7b\x01\x1c\x7c\x18\x2f\xe6\x59\x1c\xb3\x7a\x47\xd9\xd4\xb9\x9c\x7f\x2d\x88\x55\xa4\x96\x9e\x47\xc8\xb8\x32\x57\xfd\xec\x1a\xcd\xd1\xe9\x9e\x06\x74\xc8\x1a\x88\x83\x9f\x33\xfd\x31\xfc\xe6\xc2\x5a\x67\x44\x80\xf8\xbe\xef\x3d\x34\x77\xc9\x35\xe1\x53\xfe\xdb\x21\x6b\x23\xc9\xaf\xc2\x09\xa7\xdc\xae\x43\xdb\x3c\x40\x1c\x4c\x06\x9c\x83\x67\x28\x29\xcc\x45\x06\xf3\x46\x3e\x7a\x91\x6f\x96\x1f\xd7\xde\x7d\x67\x4d\x7b\xd0\x69\xe8\xed\x6c\xec\x26\x56\x1c\x0e\x9d\x34\x07\xe2\x60\x32\x9c\x7d\x77\xa1\xf8\xf1\xde\x45\x2b\xcf\xe7\x9d\x77\x57\xce\xd7\xa3\xa5\x79\xe9\xdd\x94\xdf\x45\x22\xc8\x1a\xbe\x9a\xdf\xd5\xd9\xa1\x0a\x1c\x20\x0e\xf6\xc8\x32\x9c\xcf\x57\x91\xb9\x05\x68\x46\x8c\x6a\xa8\xd2\x54\x03\xd8\x36\xff\x1c\xc8\xfe\x7e\xb3\xdb\x88\x4e\x35\x78\x4a\xdd\x78\x2a\x88\x90\x01\xf4\xfe\xb9\x2c\x43\x6b\x65\x73\x09\x9d\xa0\xfc\xb0\xfd\xd3\xe4\x9b\xa6\x75\x28\x96\xdb\x0d\x94\xf7\x0b\xc9\x8c\x2d\x58\x8f\xd9\xda\x1e\x24\x35\xbd\x87\x66\x24\x00\x1c\x7c\x81\xe9\xc7\x80\x58\x62\xee\x77\xa2\x9f\x6d\x6d\x34\x3d\xb2\x29\xc6\x91\x56\xcf\x35\x89\x45\xdf\x3f\x91\xce\xfc\xbe\x41\xa2\x40\x03\x2d\x3d\x07\x71\xf0\x3a\xff\x73\x96\x49\x6b\x4d\xaf\x47\x66\x6f\x34\xa4\x26\xf7\x99\xdf\x3d\xee\x8f\xb8\xb7\xd0\x92\x72\x50\xdf\x21\x62\xcb\x70\x91\xfa\x01\x11\x16\xc4\xc1\x64\xb8\xe5\x3f\xfe\x29\xc5\xe7\x28\xe8\x55\x86\xb8\x16\x7b\xe9\xb1\xa5\x7c\xf1\xec\x03\x79\xfa\xfc\x97\x04\x51\xc3\x94\x41\xb6\x7f\xa1\x42\x4d\x20\x0e\x26\xc3\xdf\xba\xad\xc6\xd4\xb3\x77\x45\x6d\x56\x9c\x03\x28\xd4\x87\xe8\x0f\xa5\x76\x02\x73\x50\x69\xfc\x9d\xbb\x3d\xd8\xa9\x6d\x6d\x6b\x11\x61\x41\x1c\x7c\x7c\xb5\xca\x2e\xd1\xc4\xb0\xe7\x2c\x92\x69\xa7\x4f\xc5\x5e\x5e\xaf\xb5\xc2\xd7\x27\x1b\x2b\x87\x46\xc9\x84\xa5\xfc\x7b\xa7\xdb\x02\x21\x03\x28\x17\x79\x59\x06\x91\x76\xf5\xb2\xc2\xa3\xdb\xa3\x0e\x4c\x5b\x42\xb6\x5b\xc6\xc6\x6f\x34\xaf\xad\x04\x15\x3a\xac\x6c\x2f\xc5\x87\xa3\x30\x94\xfc\x82\x16\x41\x02\x38\x98\x0c\x0c\xa2\x6e\x26\xb3\x9b\x8e\xf1\x92\xe7\x42\xff\x7a\xb1\xcc\x67\x1b\xbe\x8d\x51\x90\x33\x74\x05\xa2\x0e\xdb\x34\xcd\xab\x74\x42\xa7\x33\x80\x38\x98\x0c\xf9\x74\x75\x56\x59\x59\x5f\x37\x08\x17\xfe\x50\x1f\x5a\xf7\x6a\x70\x49\xb7\xfd\x0e\x7d\xd4\x42\x49\xef\x90\xb0\x90\x73\x56\x0b\x9d\x97\x0f\xe2\x60\x32\xbc\x56\x9f\xe8\xc3\x69\x76\x57\x16\x5e\xc9\x6d\x22\x21\x0f\xca\x1f\x36\xec\xaa\xfe\x1e\x4f\xb3\x21\xc5\x1a\xa4\x35\x79\x90\x57\x83\x08\x0b\xe2\x60\x32\x5c\x23\x31\xa4\xc7\x1e\xd6\xaa\x18\x79\x64\xd2\x9c\xba\xbc\x8e\xd5\x5e\x81\xaa\x39\xff\x0c\x43\x22\x74\x50\x77\x26\x03\xc3\x63\x1c\xca\x4c\xdf\x8b\x7c\x17\x3b\x52\x9e\x72\x83\xf8\xd7\xad\x08\x39\x6d\x03\xf1\x49\x3f\xb5\x9b\x68\xc2\x07\x41\x1e\xc1\xee\xb4\x28\x34\x7c\x4e\xff\x99\x99\xb6\x3a\x8a\x89\x76\xaf\xc4\x6d\xb2\x9a\x0b\x18\x98\xa8\x09\x6f\xde\xbd\xd9\xeb\xf7\x55\x82\x6f\x25\x09\xcd\xf4\xa7\xba\x5d\x84\xeb\x7f\xa0\xa8\x91\x6a\x11\x9c\x6e\x66\x12\x51\x31\x89\x0f\xd2\x9a\x0c\xed\x30\x05\x8c\x09\x9c\x94\x9a\xd3\x65\xcb\xeb\x85\xfe\xf8\x4e\x20\xc1\x32\xd3\xa0\xc8\x97\x33\xd3\xd3\x0e\x6f\x42\x29\xa8\xb2\x59\xe5\x70\xc2\xde\x3e\x30\x5a\xe8\xe2\xdd\xe3\x79\xbc\xac\x9f\x3d\xb4\x15\xdd\x62\xfb\xad\x4c\xb1\xed\x3f\xd0\x58\xe3\x89\x58\x6e\xcd\xdc\xe1\xbf\x9e\x78\x6a\x91\x91\x64\x94\x87\xfe\x95\xbe\x6f\x2d\x7f\xe9\x2a\xfb\x2c\xb6\xe4\x5e\x04\x86\x43\x99\x69\x50\x4c\xc4\x39\xd3\x32\xf0\xb3\x63\x50\x71\x33\xf7\x79\xb4\x39\x65\xd7\x1f\x63\xaa\x49\xd2\xac\xe0\x2a\xde\x7e\xb3\x49\xae\x39\x53\xbf\xdb\x23\x67\x7d\x44\x71\xe5\x44\x9f\x0c\xd2\x63\x58\x8b\x77\xd6\x5a\xb8\xb2\xdf\xac\x38\xe2\xf6\xd3\x6e\xc7\x48\x3e\xe4\x7d\xdd\x5c\x77\x48\x99\xb9\x1f\x5a\xda\x49\x7a\xef\x29\xdd\x74\xd5\x95\x07\x9b\x48\x62\xf0\xc1\xe6\x20\xd2\x0b\xbf\x1b\x69\x33\xa1\x0f\x1f\xda\xdd\x18\x27\xf1\x57\xc1\x5c\xeb\xd3\x4a\xca\x08\xf2\x95\x7a\xb9\x95\x47\xbc\x30\xba\x7f\xf5\x26\xb5\xe1\x4d\x5a\x71\x86\xbc\xab\xab\xb8\x2e\x6d\x70\xc3\xba\x9d\xa2\xa7\xcd\x24\x9e\xae\x99\xaf\x82\xa7\xd9\xd9\xa7\x5d\xb9\x40\x72\xd0\xe4\xe6\xd5\x9b\x74\x87\x37\xc9\x38\x48\xd8\x60\xde\x58\x86\x35\x5b\x6f\x30\x1f\xca\xc5\xdf\xa6\x96\xdc\x8b\x27\x51\x3e\x3a\xf5\xfa\x16\x3e\xc1\xbd\x41\x5d\xca\xab\x37\x19\x00\x6f\xf2\x57\x6d\x70\x96\xe6\x66\xdc\x53\xa6\xc0\x10\xf4\x6a\xb4\x62\x4b\x8e\x9d\xf0\xf4\xa7\x84\x14\xc5\x4a\x6b\x62\x63\x59\x9d\x4e\x9d\x57\x6f\x32\x0d\xde\xa4\xd1\x5a\x39\x0e\x87\x55\xd8\xe8\x5c\x2d\x45\xe8\x7e\x25\xf3\x94\x5f\xd6\x83\xe8\x14\xf5\xd0\xf5\x9b\x6f\x65\xae\x0d\xc5\xe2\xbb\x5d\xbd\xc9\x6a\x78\x93\xd6\x9f\xd0\xec\x95\x09\x51\x05\x2b\x59\x3f\x33\xfa\xb0\xf3\x04\x0a\xde\xfe\x7e\x2f\x8d\x49\x2f\x89\xdb\xb2\xfd\xe9\x75\xf4\x0e\xfb\xff\xcd\xbf\x0a\xa8\x27\x5e\xfe\x08\x2d\x7a\xfc\x50\x1d\xba\xf8\xe2\x2c\x52\xe6\xa5\xc3\x2e\x9b\x7f\xc7\x61\xbc\xa5\xb5\xe7\x7e\x3c\x15\x6d\xfe\x54\xed\xb4\xd5\x7d\x68\x3d\x17\x88\x83\x7d\x84\x62\x79\x3d\x06\x7c\x3e\xf1\x5a\xf0\x8c\xa0\x0c\xd2\xa0\x32\x53\x84\xfc\x7a\xd6\xc0\xe5\x59\x21\x64\x27\x5e\xd5\xb4\x51\xe2\x7f\x88\x08\x0b\xe2\x60\x1f\xa1\xdc\x9c\xcf\xca\xe6\x1d\x6b\x7f\x1c\x02\xe4\x23\xd8\xb7\x66\xbf\x27\xbc\x63\x92\xa4\xc0\x4f\x71\x44\xea\x6e\xfe\xba\x3b\xd0\x00\x8d\x48\x40\x1c\xec\x23\xe4\xe3\x81\xd7\xa5\x8c\xb9\xd9\x12\x3e\x4f\x3e\x99\x9d\x46\x78\x73\x41\xff\x3d\xd3\x87\x29\x15\x46\xc5\x0e\x37\xb9\x04\x6c\x74\x63\x44\x58\x10\x07\x5f\xe1\xe8\x19\xe7\x99\x91\xc6\x51\x9f\xc3\xec\x5f\x47\xf7\x43\xcb\x77\x49\x96\xfc\x70\xa5\xa7\xaa\xae\xfc\xf3\x77\x27\x86\x70\x55\x68\xb2\x03\xc4\xc1\xbe\x6d\x72\x98\xc6\x81\x89\x78\xef\x19\xa5\x46\x77\xc7\x34\xae\x47\xab\xda\x61\xd4\x49\x88\xea\x0b\x8c\xc4\x1e\x8c\xb4\x8f\x68\x25\x65\x22\x46\x24\xa0\x97\xe4\x65\x19\x86\xc2\x2d\x08\x3e\x5a\x73\xb2\xb5\x9d\x8f\x1b\x16\xb4\xbd\xf7\xfc\x69\x3e\x3c\xda\x93\xdd\x75\x77\xc0\xfe\x75\x0f\xfd\xbc\x14\xb4\x33\x12\xc4\xc1\x64\x98\x0f\x4e\xb1\x3a\xfa\x5c\x35\x49\x1d\xa2\x5c\xfc\xa9\x25\x55\x2a\xdf\x43\x83\xd0\xa2\x64\xf2\x01\xf5\xcd\x1a\x74\x15\x14\x69\x68\x49\x35\x88\x83\x97\xf4\x79\xd1\xcb\x27\x3a\x5c\x3e\xc7\xfe\x97\x5f\x60\xeb\xe6\x5f\xa5\xa6\xeb\xfb\x0a\xbf\x62\x90\xd8\xe3\x1a\x28\x44\x5e\x16\x28\x43\xfb\x9f\x40\x1c\x4c\x86\x3b\x78\x4f\x5c\xe2\x1e\xd9\xe8\xa1\xca\x7d\x30\x21\xc2\x5c\xe3\xfa\xf4\xe5\x6e\xd8\x99\x19\xfa\x62\x3e\xcf\xec\x0f\xaa\xe7\x2c\xd0\x31\x54\x20\x0e\xbe\x9d\x68\x40\xf6\xf1\xa3\xaa\x49\x62\x24\xae\x02\xf3\xea\xc0\x89\xd6\xa6\xba\xa6\x83\x54\x67\xf6\xa0\x47\x5a\xe1\x1e\x46\x8f\x77\xe8\xa0\xed\x44\x00\x0e\x26\x43\xca\x67\xe9\xa3\x06\x8a\x1f\x37\x6f\xf6\x2e\xfd\xc5\x61\x88\xc1\xb3\x21\x90\xc9\xba\x43\xae\xd2\x3e\x3b\xd4\xa2\xa9\xd9\x94\x43\x86\x90\x01\xf4\xf9\xba\x2c\x43\x01\x81\x5b\xa4\x1a\x53\xb5\x57\x79\x76\x61\x04\x57\xbc\xfa\x2d\xfd\x9a\xbf\xdd\x6c\x2c\x82\x8c\xf7\x89\xbc\x5e\x0a\xae\x9b\x40\x47\xc5\x83\x38\x98\x0c\x01\x61\xae\xc4\x7e\x01\xe7\xae\x66\xa3\xf7\xbf\xf0\x09\x11\xeb\x53\x66\x6a\x9f\x7f\x3d\xeb\xcb\xa9\x2f\x68\x77\x88\xe4\x96\xf4\x40\x84\x05\x71\x30\x19\x3c\xa8\xdd\x76\x4d\xbf\x09\x22\xf5\x63\x69\xb6\xfd\xf2\xfb\xf8\xb4\x69\x06\xa3\x3f\xc0\xab\x72\xb5\xcc\x57\xfd\x9b\x28\x4f\x14\xb4\x1e\x13\xc4\xc1\x64\x50\x8d\xb2\x60\x54\x9f\x79\x64\xca\x5e\xe3\xa8\xfc\x6b\x91\xf1\xbb\xe3\xc3\xfc\x16\x76\xc6\xcf\x59\x24\x77\x56\x7e\x1f\x95\x63\x5f\x43\x84\x05\x71\xb0\x7b\x2b\xd3\x9a\x1a\x6c\x9c\x65\x68\xef\x22\xe4\x54\x2a\x34\x1e\x99\x28\x34\x73\xb8\x14\x6c\xe8\x3d\xf7\x35\x4f\x21\x9f\x1d\x35\x0f\xca\xfa\x83\x38\x98\x0c\x26\x65\xa2\xcb\xed\x7b\xda\xf4\x8d\x12\x8c\xdf\x6d\xa3\x47\x3e\xb5\x47\xac\xfb\x57\xbc\x18\xf7\xae\xcb\xec\x4c\xf2\xfc\x90\x17\x81\x90\x01\x34\xb0\xb8\x2c\xc3\x4e\xe4\x09\x1d\xf1\xe1\xde\x35\xe3\x92\x62\x54\x65\xd6\xd3\x65\x67\x8c\xc2\xf8\xf4\xf5\x9b\x79\x12\x7a\x7f\x8e\x82\x69\x92\xa1\x59\x0c\x10\x07\x93\xc1\xd9\x7c\xbb\x9c\x2d\xc5\xd2\x77\xe7\x33\x83\xd8\x75\x33\x0c\x7f\x09\x05\xff\x1a\xf4\xaf\xbe\x5a\xcc\x15\x3f\xe3\xb5\x45\x89\xa0\x8c\x0e\x88\x83\xc9\xc0\xcd\x5a\x90\x1c\x36\xbb\x7e\xa3\x5a\xcd\x9c\xbb\xa7\x76\xeb\xc6\x17\xe3\xac\xa8\x17\x7a\x6b\x79\x54\xc2\x34\xc1\x12\x32\x5c\xd0\x96\x74\x10\x07\x5f\x5f\x4f\x27\x16\x23\x98\xa0\x7c\x4f\xbd\x67\xe2\x74\xfb\x65\x5c\x9f\x94\x3a\xb5\xbb\x5c\xf5\xca\x08\xf9\x44\x8a\x6a\xc0\xd3\xf0\x10\x68\x7d\x3d\x80\x83\xdd\xdb\x8f\x9b\xa2\xba\x1f\x45\x1e\x31\x4f\x04\xee\x11\xd1\x27\xce\x21\x85\x0c\x4c\x69\x19\xbd\xb1\x54\x76\x44\x21\x56\xde\xff\xe1\x08\x55\x18\x06\x71\xf0\x1c\x67\x75\xbf\xfc\x82\x98\xe5\xed\x2e\x55\x72\x72\xf2\xa5\xed\x2c\x93\x95\x39\x4c\x23\xeb\x74\x2e\x92\x9d\x8d\xc1\x8a\x2f\x77\xf8\x11\x32\x80\x86\x7c\x97\x65\x88\xc6\xd5\x92\x6e\xf1\xe2\xc3\xc9\x2c\xee\x19\x3e\xe2\x1f\x7d\x9e\x4c\x6b\xaf\xff\x2e\x24\x92\x66\x0b\x99\xbb\xf0\xa4\x52\x01\x3a\x3b\x13\xc4\xc1\x64\x38\x45\xf3\x7a\xee\x6c\xee\xc1\xe4\x60\xc6\x62\xef\x69\xa0\xf0\xaa\x7f\xc0\xd2\xb1\xdd\xeb\x71\x81\x82\xe9\xc1\xab\xc8\xef\x49\x50\x35\x6f\x10\x07\x93\x61\x2d\x36\x21\xf3\x6e\xe5\xdd\xbe\xfe\x1f\xa2\xa7\x7f\x70\x74\xc6\x84\xc7\x69\x71\x6f\x25\x6d\xf9\xe2\x9b\x12\x92\x11\x32\x77\x41\xb3\xb1\x20\x0e\x26\x83\x4e\x0a\x11\x25\x35\xbb\xb0\xa5\x4e\x08\xed\x86\x44\x5d\xb5\x77\x8f\x6f\x7d\xfa\xc1\x1b\xcf\x34\x19\xcb\xad\x38\xd7\xdf\x2f\x21\xc7\x40\x1c\xec\xde\xba\x5a\x7e\xb2\xc7\x71\xd7\xa9\xc0\xa7\x8b\xbd\xf6\x43\xda\x40\x4b\x21\x75\xcf\xa5\xd5\xc4\xc8\xa3\x4b\xa0\xe1\xe3\x96\x01\x3f\xb4\xa4\x0f\xc4\xc1\x64\xb8\x9b\xc0\xc2\xeb\x31\xce\xb9\xfb\x60\x75\xb3\xbc\x55\x6c\x62\xb6\xcb\x30\x64\xe5\x87\xfe\xb7\xa1\x4f\x77\xef\x47\xaf\xb3\xed\x10\x23\x64\x00\x0d\xc6\x2f\xcb\xf0\x35\x67\xcb\x5e\x9b\x7f\x3c\xcc\xce\xf8\xa0\x2e\x6c\xad\xa4\x71\xda\xd7\x4f\x46\x8b\xae\x8e\x34\x61\xc9\x5e\x39\xe1\xef\x13\x7d\x68\x17\x32\x80\x83\xc9\xd0\xae\xf6\x9d\x4c\xff\x41\xb5\x47\x93\xcd\x57\x9e\xad\x7f\xb7\x5b\xfa\x9f\x76\xdc\x3d\x39\x93\x1b\x3f\xf8\xf0\x74\x43\x34\x98\x1c\xea\x14\x20\x0e\x26\x83\xc1\x7e\xa1\xcb\x6b\x9a\xd4\x9d\x1c\xea\xed\xcd\x55\xea\x6b\x5a\x36\x8f\x50\xa6\x5b\xe6\x3b\x6f\xa1\x30\xdb\x55\xde\x43\x3b\x9b\x84\xd2\x5a\x00\x0e\x26\x03\xf9\xfb\x22\x53\x1e\xeb\x8b\x67\xc9\xf5\x9f\xa4\xab\x12\x8f\xa3\x6d\x3f\x20\x65\x44\x6d\x09\x78\x60\x74\x33\xde\x8c\xa9\xcc\x84\x52\xc8\x20\x0e\x76\x6f\xd9\x4a\xb4\x15\x4c\xbd\xea\x02\x15\x71\x9d\x5e\xcf\x7e\xca\x97\xa1\x10\x4c\x56\x34\xeb\x1f\xfb\x8e\xfe\xb0\xf8\x6b\x89\xef\x00\x0a\x22\x2c\x88\x83\xc9\x80\x3c\x7f\xad\x20\xc4\x40\xe5\x3a\x55\xfe\x2b\xd5\xd5\x8a\x1d\xd3\x8a\x8e\xf4\xae\x59\xaa\x48\x94\x89\xd2\x8b\xeb\x39\xc5\x33\x3b\x08\x19\x40\xbf\x49\x97\x65\xb8\x4b\xa2\x3a\x5a\xb9\x12\x15\xfe\x94\x6b\x52\x9c\xa5\xf8\x1e\x55\x3b\x75\x73\xc2\x5e\xa8\x21\xfe\x69\x1f\x75\xb7\xa0\x2d\x3b\x34\x76\x02\x71\x30\x19\xa2\x6d\xd9\xe5\x7f\xa2\x68\xe7\xae\xd6\x53\xba\xb1\x28\x09\x2b\xbd\x4f\xf8\x30\xe3\xa8\xf6\x6a\xff\x5d\xf8\xe3\x54\x79\xc2\x31\xc8\x31\x10\x07\x93\x81\xcc\xfb\xa1\xf6\x9f\xaa\x8e\x5b\x29\x2f\x47\xe8\x9f\x31\x58\x54\x88\x6c\xb1\x0d\xdb\xd0\x75\x52\x94\x32\x93\xe9\x1f\x3a\xcb\xcb\x21\xc2\x82\x38\x98\x0c\xfb\xd3\x43\x9f\x5a\xb6\x17\xca\xeb\xa8\x85\x02\xff\x8d\xb5\x8f\x9e\x6f\xec\x6b\x8a\x5b\x4f\x05\x38\x25\xff\xf0\x1c\x53\x72\x87\x0a\x3b\x81\x38\xd8\xbd\x15\x6d\x75\xca\xa1\x7f\xe9\x75\xfb\xe7\x49\xdc\xbf\x03\x7a\x5f\xc1\x9f\x27\x18\x6a\xc1\xe4\xce\xaa\x29\xb8\x8b\xbc\x86\xdb\xbe\x50\x81\x50\x10\x07\x9f\x43\x67\xfe\x43\xa7\xa6\xba\x35\x5a\xdb\xa2\x93\x79\x21\x59\xa0\x2c\x2d\x2b\xfe\xd4\xc4\xe7\x46\x71\x0e\xcd\x66\x9f\x51\xc1\x9e\x28\x42\x06\xd0\x0f\xec\x65\x19\xa6\xf4\x74\x3f\x64\x96\xd0\x05\x10\xe0\x7e\xdd\x27\x76\xb5\x7b\xa9\x3d\x7f\x74\x83\x41\xe6\x96\x77\xfb\x3f\x1e\x37\xf6\xfa\x7d\x55\x68\xc5\x15\x80\x83\xc9\xd0\xf3\x8e\xf5\x76\x8a\xf5\x27\xa1\x94\x04\x7a\xce\xeb\x31\x7a\xc5\xfc\x14\x2a\x2e\x9a\xbd\x98\xb6\xb7\xab\x92\xfd\x31\x58\x7f\x41\x8e\x81\x38\x98\x0c\xbf\xd4\xcc\xe9\xcb\x9e\xb8\x6a\x7d\xfc\x20\x75\xff\xe5\x3e\x4d\x9b\xc8\x67\x4e\xbd\x26\x0c\x2b\x67\x3e\xd7\x80\x08\xfd\xc5\x03\xe8\x44\x27\x10\x07\x93\x41\x1f\xb5\xf6\xd6\x2f\xba\x3b\xd7\xc4\x45\x15\xe7\xe4\xa5\x44\x82\xdc\xd5\x3c\x92\x0a\x23\x59\x2a\xc7\xc2\xe2\x3f\x11\x61\x34\xf7\x21\xc2\x82\x38\xd8\xbd\x95\xbd\xbf\xd7\xfd\xe1\x91\xc5\xf3\xa4\x8a\x26\xa6\x0b\x14\x42\xc6\x7c\xbf\x0c\x5a\xab\x0e\x74\xcf\x34\xc7\xcc\x96\x5d\x96\x4f\x4d\x88\xb0\x20\x0e\x26\x43\x9f\xf7\x60\xd6\x4b\xcf\xa4\x6b\x99\x7f\x8d\xf3\xd7\xcf\x3c\x1d\xcb\xe9\xb0\x99\xb1\xdb\x52\xa3\xb2\x73\xe9\xe9\x7f\x54\x37\x28\x41\x99\x69\xd0\x9c\x22\xe2\x9c\xe9\x41\xf8\x3c\x08\xe5\xe3\xe8\x1a\x9f\xdb\x16\x15\x24\xa9\xf9\x67\x67\x9c\x42\x18\x92\xff\x26\xd7\x3e\x3f\x44\xd2\xea\xef\xe8\x1b\x74\x4d\xad\x6e\xbc\xfa\xd4\xcb\x34\xbc\x49\x9f\xf6\x37\x8b\xb5\x6f\x55\x22\xb4\x66\x47\x46\x9e\xf8\x9f\xdc\x6a\xf8\xb3\x52\xa6\x43\x78\x7e\xca\xb8\x26\x27\xbe\xbb\xdc\x40\x73\xf5\x26\x4f\xe0\x4d\x3e\x8a\x24\x63\x79\x5c\xc6\xb6\x49\xa6\x13\x6e\x50\x5a\xe3\xdf\x71\x88\xdc\xf6\x8b\xac\xc5\xf0\x60\x83\x54\x46\x77\xba\x56\xea\xaa\x1b\x3c\x74\xff\x6f\xf7\xf2\x72\x97\x74\x2c\xdb\x53\xd8\xcd\x0f\x27\x68\x0c\x7e\xdc\xd1\xf4\x78\xf0\x0c\x7d\x2c\xa1\x4a\x91\xa1\xdd\xe3\xc2\x30\xae\xba\xfc\xa1\x69\x22\x42\x1b\x10\x07\xcf\x3f\x65\x2c\x17\xf1\xad\x34\x1b\xdc\x3a\xa5\x5c\xfa\x54\xb0\xfc\x51\x40\x9c\xb5\x3c\xf8\x30\x70\xbf\x95\xef\x60\x43\x29\x91\x06\xca\x1a\x82\x38\x78\x81\x93\xf9\x38\xe5\x78\xeb\x40\xe5\x68\x62\xc3\xe5\x21\x7b\xad\x5a\x1a\x1d\x1d\x8e\xc0\x41\xc3\x7d\xb6\xeb\x8f\x43\x59\xbc\x50\x89\xa1\xa1\x05\x80\x83\x75\x49\x89\x34\xf1\x05\xed\xae\x6a\xc3\x68\x3c\x4d\xfd\x27\x74\xb7\xd7\xe2\x4e\x29\xba\x4a\x24\x34\x98\xc2\xf5\x32\x44\x31\xb3\xd6\x32\x10\x61\x41\x1c\xec\xde\x0e\xa8\x0a\x61\xf2\x66\xd0\xc4\xb4\x12\x57\x7e\x3e\x38\x76\xd7\x13\xa8\x48\x36\x11\x3d\x4c\xdd\x18\x75\xb2\x5b\xa0\xf4\xf7\xfd\x07\x65\x64\x01\x1c\xac\x4b\x1a\x3e\x67\xf6\x25\xe0\xd6\x2c\xf7\xe5\x89\x77\x32\xf0\xa8\xb6\xc8\xcc\x9e\x64\xc9\x69\x27\x50\x74\xda\x56\x97\xba\x66\x82\xc3\x83\x78\x3f\x83\x2c\xbf\x2c\x03\x41\x73\x91\xe9\x2f\xd5\x79\x71\xae\x1f\x09\x9e\x4f\x0d\x06\xe9\x4f\x68\x13\x13\xc9\x5b\xc5\xd6\xa5\x8d\xf5\x07\x3e\x3c\x74\x5a\x41\x5c\x30\x88\x83\xc9\x20\xfc\x94\x33\xaf\x9f\x7a\x02\xc9\x36\x27\xae\xd9\xb4\x26\x5a\xd0\x35\x6b\x43\x7d\xc8\xc5\xc2\xa2\x07\x33\x33\xcc\x2d\x80\x89\x1c\x11\x16\xc4\xc1\x64\xd0\xc5\xad\xdc\x22\xfa\x16\x21\xe4\xc4\x2b\xdf\x6e\x50\xa4\x9d\x31\x23\x53\x5b\x48\xc9\x3b\xe6\x1b\x4c\xca\xb8\x7f\x6f\xb2\x94\x07\x11\x16\xc4\xc1\x64\x98\x0c\xa3\x46\x39\x7d\x73\x91\x5a\x45\x3d\x62\x12\x3e\xf9\xef\xb1\x37\x05\xf1\x48\x3b\x3e\x06\xfe\xbb\x06\x5d\x32\x05\x71\x71\x2d\x44\x58\x10\x07\xaf\x17\x12\xfa\xe7\xcf\x4c\x7f\xd0\xca\xcc\x78\xeb\x85\xd4\xef\x6c\xa6\xf7\xe6\x0f\xed\xea\x77\x0c\xd3\x4d\xa8\x24\x8d\x93\xec\xa2\x98\xa1\xb5\xd1\x00\x0e\x26\x03\xbe\x6b\x8a\xb4\x03\x6b\x8d\x40\xe1\xed\x6b\x37\x0f\x64\x55\xec\x3a\xe2\x1d\x87\x99\x5c\xa7\x53\x3c\x91\x37\xc6\xa8\xee\x32\x30\x21\x64\x00\xbd\x7f\x2e\xcb\x70\x4f\x1b\xa9\x81\xb7\x72\xb7\x36\xaf\xe4\x1a\x92\xfa\x9a\x60\xb1\x1f\x11\x5e\xec\x17\x7f\xc7\xd7\x8c\x8c\x55\x95\x01\x86\x91\x37\xa0\xcd\x39\x00\x0e\x26\x83\x9c\xa5\x41\x39\xdd\xa1\x2c\xa6\xe8\xc9\x88\xbc\xa9\xee\x9d\xf5\x0d\xdd\x22\x8e\xcd\x67\xda\xde\x9e\xd4\xc7\x0f\xba\x0e\x27\xa1\xcd\x39\x20\x0e\x26\xc3\x47\x6b\xff\xd2\x12\xb6\xb9\xb4\x27\x46\x1e\x6b\xa1\xcf\x6c\x84\x08\xda\x67\x2a\xc9\x06\xd4\x43\x37\xba\x84\xa7\x24\x5a\xa7\xa1\xea\x65\x20\x0e\x5e\x3b\xb3\x32\xb0\x42\xc4\xa1\x28\x90\xdc\x20\xc7\xb3\x2c\xcb\x6d\x27\x59\xe5\xe3\xc4\x85\xc1\x72\xba\xcb\xf6\x5c\x23\x76\x3b\xb3\x2e\x22\x2c\x88\x83\xdd\x5b\xf3\xba\x6c\x1e\x5f\x3c\x24\x14\xb4\xaa\xb9\x21\x42\x55\xc9\x78\xc6\x27\xaa\xf7\xf5\x0e\xd5\x1d\x3f\x44\x68\xcb\xfb\x9a\x5a\xb9\x20\xc2\x82\x38\x98\x0c\x95\x2c\xbf\x0a\x08\x07\x1f\xdc\x97\xf5\xab\xca\xf7\x33\x8f\x34\x31\x22\x14\x73\xb7\x5f\x27\x9f\xc1\x20\x29\x68\x63\x37\xbe\xfb\x03\x21\x03\x28\x17\x79\x59\x86\x1f\x14\x36\xf8\xec\x3c\xdd\xcc\xbd\x84\x8a\x0f\x58\xb4\x9d\x87\x1e\xcf\xce\xdf\x38\x41\xeb\x8c\x4e\xbd\xe9\x71\xb2\x18\x2e\x0d\xc9\x00\xe2\x60\x32\xc4\xc7\x7f\x6f\x14\xff\x2e\x7c\xcf\x9b\xaf\x81\xb1\x30\x74\xf9\xcf\xb7\xcf\x15\x63\xd4\xa6\x05\x9a\x0f\x6a\x53\xf1\xb1\x48\xfe\x40\xb5\x33\x41\x1c\x4c\x06\x1a\xdf\x72\x6c\xb7\x69\xc3\x33\xca\xbc\xa9\xed\xf7\xfe\x43\x03\x7a\x9a\x51\x5e\x5b\x76\x4b\xfa\x28\x5f\xee\x86\x6f\x10\x0e\x43\x85\x9a\x40\x1c\x4c\x86\x3d\x36\xe4\x87\x9a\xcc\xd9\x29\x56\x37\x55\x64\x22\x43\x18\x1e\xd6\x25\xdc\x90\x6a\x63\x17\x75\xbd\x3e\xc4\xca\x6e\xe8\xb4\xb0\x89\x08\x0b\xe2\x60\xf7\xd6\xab\xbc\x23\xb2\x23\x2d\xc3\x59\xc0\x8e\x21\x1b\xf7\x45\x13\xe6\x9a\xd7\x1b\xe1\xe2\xf3\x9f\x1c\xd5\x6a\x18\x27\x77\x56\xb7\xb7\xff\xff\xe7\x4c\xab\x18\x7a\xfb\xbd\xa6\x64\x61\x88\x90\x20\xe9\x7d\x3f\x20\x41\x31\xef\x66\x8d\xdc\xeb\x33\x58\x1a\xf3\xe4\xee\x07\xbb\x27\x1a\xff\x99\x99\xe6\x53\xf7\x38\x54\x4b\x26\x95\x4e\x09\xe8\x20\xe5\x88\x7b\xdc\x98\x54\x11\x65\xb7\x1e\xc0\x49\xfb\x73\xb3\x67\xfa\xa7\xe5\xeb\xff\xcc\x2e\x3d\xfa\xa0\x21\xce\x30\xbf\x62\xa0\xf6\x7a\x74\x45\xf9\x4f\xa0\x86\x91\xe4\x92\x39\x21\xbe\x1e\xd3\x01\x29\xa5\x12\xbf\x8f\x74\x1c\x2c\x33\x0d\x8a\x7c\x39\x33\x1d\x48\xef\xf2\x83\xd0\xa6\xa3\xb0\xfe\x03\xb1\x35\xeb\x4b\x4d\x3f\xf3\x34\xf3\xde\x47\x6f\x66\x89\xc4\xde\xbe\x9b\x38\x3a\x7d\x65\xf8\x9f\x6f\x49\x15\x4d\xb5\x5f\x85\xba\x6f\xf4\x9e\xad\xed\xc6\x90\x67\xb6\xef\x61\x0d\xe9\xbe\x38\xee\x0b\x53\xbd\x71\x26\xac\x6e\x4c\x8a\x0b\x65\xa6\x41\x31\x11\xe7\x4c\xc3\x33\xd3\x7f\xff\xb6\x4f\x1b\x13\x3b\x6f\x58\x72\x4a\x0c\xdc\x09\xc9\x11\x97\x7a\xd2\x84\x7a\xef\x51\x5e\x6c\x65\x12\x37\xc9\x72\xca\xf0\xd2\x95\x33\xd3\x92\xf0\xcc\xf4\x77\xbc\x11\xa1\x83\x3c\xed\xad\x77\x8f\x76\xd5\xd7\xf1\x44\x72\x5f\xa3\x77\xdf\x99\x6b\x3f\xfe\xa0\x6b\xc2\xe4\x4a\x69\x3c\x61\x70\xe5\xc1\xa6\xe4\xa5\xcc\x34\xae\x21\x8a\x22\x7a\x16\x3f\xa6\x37\xb6\x02\x05\xa5\x4b\xc2\x73\x4c\x81\x23\x03\x82\xfe\x0c\xa4\xa9\x8d\x18\x59\xf4\xdd\x2a\xfe\xab\x37\x79\x29\x33\xad\xd9\x9d\x8e\x4a\xdf\x22\x68\x9a\xec\xf8\xac\x52\x69\xdb\x80\x98\x65\x4b\xb1\xc2\xc0\xbc\xb5\xa5\xb1\xfa\x8f\x42\x37\x91\x22\xe9\xd5\x9b\xbc\x94\x99\xce\x17\x38\x19\x65\x19\x65\xfe\xf7\x77\xe6\x81\xae\x52\x99\xe4\x33\x46\x49\xcc\xc4\x1c\xa2\x80\xdd\xd0\xe9\x8f\xed\x11\x98\x1d\x3b\x57\x6f\xf2\x52\x66\x7a\x5d\xe9\xf8\xc6\xf7\xc9\x48\x5b\xae\xeb\xdc\xe3\xd7\x0a\xf8\x87\xe6\x5b\xc5\xc3\x06\x87\x1e\xbf\xe0\xe6\x76\x5d\x0f\xe9\x13\x0b\xb9\x7a\x93\x97\x32\xd3\x8b\x81\x55\x9f\x4d\xd7\x9e\xf2\xb0\x15\xbe\xa7\xeb\x49\xdc\xb2\xe3\x58\xbc\x68\x8d\x0e\x45\xb3\xea\xc6\x33\x3a\x20\xdb\x4b\xc8\xb9\x7a\x93\x97\x32\xd3\xa6\xa3\xb5\x82\x5e\x4d\x89\x4f\x05\xe9\x09\x78\x9d\x97\x53\xe3\xb7\xa6\x8e\x56\xa5\xab\x92\x15\x9c\x28\xa9\xa8\x1b\x3d\x17\xae\x7a\x32\xba\xee\xff\xad\x27\xfe\x97\xfc\xd3\x3f\xe4\xfe\x20\xa7\x6a\x17\x07\x6c\x5c\x51\x4e\xe5\x83\x40\x7d\x64\xba\xb9\xd8\xdb\xcb\x3f\x9c\x4b\x13\xaf\x6d\x37\xab\x43\xb9\x5e\x10\x07\xfb\x08\x21\x99\x77\x49\x98\x0d\x6e\xe2\xcf\xce\xd1\xf5\xd4\xcf\xe1\x73\x17\x14\xf1\xa9\x47\xbf\xe5\x17\xf1\xf0\x99\xf4\xcf\xc4\x37\x80\xa6\x0f\x40\x1c\xec\x23\x74\xd1\x7e\x92\xfc\x2a\xec\x21\x5b\xeb\x29\x9a\x4c\xd1\xb8\xc3\x24\x59\x67\xe4\xf9\x89\x9f\x83\x90\xe2\x82\x4f\x9f\x1c\xea\x33\xe8\xb0\x19\x10\x07\xfb\x08\xed\xee\xde\x54\x50\x4d\xc1\xba\x1e\x32\x77\x93\xac\x9e\x95\xe3\xf1\x3a\xbf\xff\x6f\x17\xa3\xb5\x71\xac\xd7\xff\x0c\xbe\x3c\xf3\x86\xb6\xee\x81\x38\xd8\x41\x20\xaf\x14\x74\x96\x6a\x8f\x1e\xbf\x9c\x36\xbe\x95\xb7\xcc\x19\x9b\xc6\x65\xd6\xc7\xeb\x84\x27\xb9\xf8\x33\x29\x25\x91\x64\x7e\x1b\x9a\xec\x00\x71\xf0\x0d\x97\x84\xd4\x17\x1f\x64\xd9\xe5\x2d\x19\x2a\xaa\x0e\xd4\x26\x12\xd5\xc8\x75\xe3\x63\x6d\x8c\x3b\xd3\xbe\xa2\xdc\x33\xe1\x79\x12\x88\x18\x91\x80\x5e\x92\x97\x65\x30\xd1\x88\xdc\x7b\x31\x3f\x89\xe7\x89\x41\x58\x98\xdc\x75\xc1\xe1\xc1\xd6\xb1\x5a\x33\x95\x29\x58\x2c\xd4\x4d\x4e\x14\xac\x07\x15\x62\x02\x71\xf0\x65\x0a\x46\x8d\x65\xde\x46\x7d\xbf\x31\x39\x4e\x5b\x42\x3e\xd8\xcd\x3c\x6d\x9c\x13\xac\x3d\xde\xa6\xcd\xf8\x2a\xb6\xa7\x3b\xea\x2d\x0a\x2d\x53\x00\x70\x30\x19\xb8\xaa\x26\xf2\xa9\x51\x1f\x61\x51\xce\xf8\x98\xbf\x60\xf3\x99\x9e\xf9\x17\xb1\x46\x3c\xfb\x6f\xba\x7a\xf5\x1f\x21\x56\xe0\xaf\x9f\x88\xb0\x20\x0e\x26\x83\xb0\x5b\xe9\xb6\xe3\x86\x5e\xeb\x38\xfa\xe4\xa1\xe0\x3d\xe2\xf0\xd1\xb2\xc2\x5b\x65\x2b\xd4\x61\xae\x01\xba\x5b\x0f\xa7\x74\xc3\xa1\x3f\x2b\x00\x07\x93\x21\xf5\xa8\xca\xca\xe9\x05\x27\xf6\x7d\xff\xdf\x1f\x6c\x92\x8f\x18\x75\x88\xc7\xde\xbf\x6a\x3c\x76\x61\x6e\xf3\x42\x9d\xd3\x6d\x86\x8a\x13\x80\x38\x98\x0c\xa5\x8f\x67\xf4\xc6\xd0\x7a\xb7\x59\x6d\xd3\x66\x9c\x48\x3f\xcf\x37\x29\x62\x3f\x2c\xc0\xc0\xcc\xdf\x9f\x70\x2d\xb6\xb4\x75\x7a\x8f\x90\x01\xf4\xf9\xba\x2c\x43\x78\x5b\xd8\xb4\x34\x57\xda\x60\xfa\xb7\x9e\x66\x85\xbd\x0e\xe4\x30\xae\x30\x39\x91\x1c\xb7\x76\xc1\x40\x27\xd6\xbd\xde\x56\xe8\xa9\x81\x38\x98\x0c\xb8\x68\xb6\xc8\x19\x1a\x93\x27\xa6\xee\x4c\x18\x4b\x7f\xec\xaa\x26\x59\xa3\x53\x15\xe6\xae\x9d\xe4\xf7\x0a\x7b\x97\xaf\xc9\xe2\x41\xbb\xd6\x00\x1c\x4c\x86\x22\x5a\x97\x4f\x4f\x5b\x84\x0e\x7e\x15\xa7\x93\x3c\x7a\x77\x9b\xb6\xe5\x6d\xc5\x6f\x05\x1e\xb2\xb5\x55\x8f\x8e\xbf\xf2\x18\x37\xa0\x42\xf4\x20\x0e\x26\x43\x01\xa1\xd1\x48\x7a\x60\x86\x55\xb8\x57\x22\xb3\xec\x62\x41\xa0\xd2\x27\x82\x48\x61\xf9\xac\x57\x8d\x4b\xec\x65\x8f\x9e\x62\x41\x3f\x15\x20\x0e\x26\xc3\xb0\xd1\xb5\x76\x14\x0b\x61\xb1\xfb\x11\xe8\xde\xbc\xeb\x2c\x91\xfa\x4a\xad\x91\xb8\xe5\xdd\x73\x17\xd6\xaf\xed\x64\x32\x5b\xa1\xff\x61\x10\x07\x93\x41\x9c\x52\x57\xe9\xd6\xc4\x5a\x56\xb9\x4a\xe8\x2f\x24\xd9\xbd\x9b\xef\x7b\x19\xd2\x54\x65\x6d\x7e\xc7\x88\x53\xdc\x8a\x21\xf1\xdc\x44\xc8\x00\x1a\x58\x5c\x96\x01\x0f\xc9\x4b\x34\x62\x22\xa0\x58\xf3\x24\x08\xd5\xa5\x3e\x7b\x95\x2f\xa0\x06\x3b\x2e\xb4\x3f\xd4\xc4\x5a\xe2\xb6\xb3\x69\x3c\x34\xc1\x0a\xe2\xe0\x95\xdf\xda\xe9\x23\xa8\x3c\x06\x50\x70\xff\x35\x72\x04\x18\x21\x51\xdd\x62\xa5\x78\x50\x26\x7b\xc2\x76\x54\x82\xa3\x6b\x26\x6b\x9d\x0f\xad\x27\x00\x70\x30\x19\x96\x3c\xb5\xb2\xda\x3e\x60\x39\xda\xe5\x10\xde\xd3\xb0\xc4\x34\x97\xc5\x8f\x2f\x66\xbb\x5e\xd4\x71\x6d\x4b\xfa\xc2\x71\x52\x0b\xba\x5a\x10\x07\x93\x61\xf8\xdf\xcc\x30\x1d\x83\x4d\x38\xfb\x9c\x3a\x7d\xe2\x4a\x53\xfc\xfc\x4e\xc1\x66\x6e\xe6\xa9\xc2\xa9\x2b\xa7\x12\x53\x37\x2a\x27\xf4\xd4\x00\x1c\x4c\x06\x76\xda\x72\x9d\x35\xa9\xb4\x64\xea\x8d\xb7\xb6\x63\xf3\x83\xf4\x38\xdd\x5c\x27\xc2\xeb\x07\x03\x19\x4a\xd1\x6d\x4a\x73\xdb\xd0\x06\x7a\x10\x07\x93\xc1\xe0\x42\x97\x19\xa9\x9a\xc9\x55\xab\xf3\xe3\x60\xec\xdf\x01\xd2\x05\x0a\x46\x5d\xe5\x34\xc1\x43\x8a\xc5\x05\xe9\xb9\xae\x01\x0e\x84\x0c\xa0\x21\xdf\x65\x19\x2a\xde\xe5\xde\xa4\xe8\xd0\x08\x46\x79\xd4\xa1\xe1\x94\xe2\xdf\xfe\xd5\xac\xeb\xc5\x6d\x9c\xe1\xfa\x8b\xd5\x03\x4e\xee\xa5\x71\xe8\x90\x4b\x10\x07\x93\xc1\x06\x8f\x2f\x5e\xc8\xbe\x3a\xba\x14\x79\x47\xae\x59\xb6\xee\x8c\x7e\xfd\x17\xdb\x96\xa7\x5e\x40\xff\xb4\xf5\x9f\x3c\xbd\xaf\xd0\xe9\x0c\x20\x0e\x26\x43\xe5\x5f\xf4\xbf\x0e\xc5\xc2\x2b\xa6\x8d\x22\x03\xde\xaa\x51\xb5\xd1\xdf\xdb\xa5\x94\x35\x50\x1f\x59\x9f\x3e\x15\xbd\xee\xc3\x77\x1b\x11\x16\xc4\xc1\x64\x68\xfe\xfb\x30\x4a\x2b\x87\xf4\xd7\xc7\x98\xe7\xc4\xb5\xf4\xb7\xee\x8a\x87\x19\x68\x24\x64\x4a\x52\x50\xa7\xfc\xa3\xf5\xbf\xcb\x08\x2d\x2e\x01\x71\x30\x19\x6e\x61\x49\x65\xcf\xad\x13\x2b\x64\x79\xdc\x7e\x1e\x12\x1d\x8d\x1e\x1c\x6e\x3f\x9d\x70\xd6\x49\xc2\x97\x74\x2f\x4a\x6a\x5d\x01\x2a\x5a\x08\xe2\x60\x32\x2c\xec\x25\x76\xb5\x97\xe5\xcb\x0a\xd4\x65\xaa\x7d\xc0\xdc\x20\x35\xf9\x38\xd8\xdc\xe8\xd0\x52\xf4\x76\x2c\xc8\x19\x89\xfe\x31\x74\x26\x19\x68\x30\x7e\x59\x06\xbe\x04\xf4\x91\x1b\xb8\xa8\xfd\x3d\x98\xa2\xb1\x03\x68\x89\x75\x33\x51\xe8\xbc\xea\x5a\x0e\x9d\xec\x91\xbe\x04\x83\x9d\xf6\x50\x7a\x0f\xc4\xc1\x64\x78\x4e\xe9\xf2\x8b\xce\xd5\xa0\x97\x01\x99\x1e\x6b\xf0\x5f\x79\xaa\x11\x75\xe6\xda\xf0\xcf\xdc\x8c\xb7\x71\x86\xe1\x14\x9e\x77\xa1\x72\x88\x20\x0e\x26\x03\xb5\x9d\x18\x9b\x6a\x50\xd4\xc3\x19\x8f\xaf\xd5\xcb\xd6\x94\x64\x54\x22\x29\x6f\x3a\xcb\xf4\xfa\xd3\x85\xe5\x67\x6c\x28\x32\xa1\xda\xe3\x20\x0e\x26\x43\xcc\x1e\x5f\xc3\x4f\xd1\xc3\x35\xb2\xbc\x9a\x6a\x1b\x9b\xfd\xe1\x6c\x23\xda\x14\xdf\x3e\xd9\x97\xfe\xb1\xa8\x06\x53\x26\xde\x91\x88\xb0\x20\x0e\x26\xc3\x72\xe4\xa6\xe1\x47\x6c\xd5\x47\x39\xb5\x49\x9e\x55\xc1\x6c\x8b\x9d\x7b\x04\xa4\x4b\x37\xf6\x96\xe9\x9d\x73\x32\xe7\x08\x30\xb7\x10\x61\x41\x1c\x4c\x06\xbb\x4d\xd7\xbf\xfd\xe8\x8d\xee\x64\x76\xdd\x43\xbe\xc3\x79\x94\xa8\xb3\x4c\x37\xab\x19\x28\xbf\xe8\x71\xf0\xbd\x91\x54\x35\x83\xd6\xac\x80\x7e\x93\x2e\xcb\x40\xf1\x0d\x75\x96\x8f\x59\xd8\x1c\x87\xe1\xa7\xa7\x53\xc5\x12\x87\xc5\xbc\x16\xe6\x76\x81\x50\x82\x63\x77\x09\x11\xb1\xfe\x3a\xb4\x3e\x0c\xc4\xc1\x64\x30\x7c\xc2\x63\xe0\x99\xa7\xc1\xf8\x92\x52\x3c\xf9\x3e\xfe\xc8\x2b\x57\xa1\xe4\x8c\xf3\xc5\x33\x9b\xf4\x5c\x2a\xcc\xa9\x9d\xd6\x75\x44\x58\x10\x07\xaf\xc0\x54\xb8\xd8\x7f\x61\xae\x4b\x6c\x16\xaf\xff\x0f\xf9\x1f\xa6\x62\x9f\xde\x98\x00\x8d\xe9\xe9\x00\xbf\x4e\x5f\x9c\xaf\x17\xe9\x0e\x22\x2c\x88\x83\xc9\x10\xcb\xe0\xd5\x58\xf3\x5d\x57\xf8\xeb\x11\x16\x8b\xef\x87\xd6\xe1\x52\x2e\xed\xc0\xa9\xe3\xca\x2c\x12\xac\xd3\x74\xac\x06\x52\x68\x8b\x0c\x88\x83\xc9\xd0\x53\xa0\x6c\x35\x48\x47\xfd\x9e\xb6\xc8\x52\x5c\xf8\x3d\x33\x1f\x5a\x65\xc8\x1a\xcf\x9b\x8f\x44\x05\x74\x9e\xe2\x4d\xe9\x9f\x6c\xa0\x8c\x2c\x80\x83\xc9\x10\x13\x90\x36\x7c\xc4\x65\xfc\x92\x51\xdc\x30\x3c\xf8\xeb\xab\x8b\x23\x65\xb2\x94\xd3\xec\xc8\xb2\x71\x57\x0e\x22\xfa\xf7\x4b\xef\x10\x32\x80\x7e\x60\x2f\xcb\x10\xfc\x40\x39\xa8\xae\x47\xa0\xb0\x50\xd7\xc4\xa8\xb3\x6b\x87\xfb\x44\x80\xe3\xc4\xea\x1b\x99\xfa\x96\x5b\x8c\xea\x45\x57\x33\x54\x62\x04\xc4\xc1\x64\xf8\x83\x9c\xf4\xe1\xcf\x3a\x8e\x52\xbf\xdb\x54\x9e\x5b\x56\x8a\x80\xfd\xf3\x93\x1d\x4f\xbc\x3e\x13\xcb\xd7\xcf\x91\x9f\xf2\xf8\xcc\x20\xc2\x82\x38\xf8\x99\x1a\x95\x28\x9b\x8c\xdc\x68\x75\xce\x4f\xac\x1f\x56\x73\x87\x7d\x89\xc3\x54\x1c\x5a\x92\x1f\xd0\x21\x41\xd2\xc0\x25\x92\xdd\x57\x42\x84\x05\x71\x30\x19\x4e\xca\x96\xb9\xee\xa8\x7d\xd4\x5e\x61\x14\xa0\x65\xf1\x60\x7b\x17\x7c\xd8\xb1\x98\x46\x6d\x3e\xc2\x8d\x3d\x76\x73\x1a\x0d\x1f\x1a\x45\x83\x38\x98\x0c\x36\x25\x11\x4c\xda\x6b\x4a\x79\x26\xc9\xa2\x2a\x49\x27\xfd\x72\xad\x95\x75\xe8\x6c\x7f\x9e\x99\xda\x0f\xb1\x72\xac\x89\x47\x56\x41\xdf\x4a\x00\x07\xcf\x4c\xef\x2d\x28\x5e\x37\xcf\xc9\x37\x08\x88\xca\x30\xe1\xde\x69\xf9\x64\xfb\xf4\x30\xbe\xe3\x75\xac\xee\x06\x16\x7d\xaa\x65\xae\x09\x94\x99\x06\xcd\x29\x22\xce\x99\xbe\x94\x99\x26\xef\x50\xbc\xa9\xf9\xea\x5e\xc5\xcf\x7a\xa1\xa4\x8b\x69\x81\xdd\xb0\x66\x1d\x7d\xea\x92\x9a\xa1\xb6\xf2\xc9\x7b\xd6\x2e\x6a\xc7\x57\x9f\x7a\xb9\x94\x99\x46\x0f\x29\x91\xbd\x5e\xc2\x96\xd8\x61\xb8\x33\xf5\x4d\x66\x91\xe2\xce\x94\x45\x13\xc1\x6a\xec\x6a\xa6\x88\x8f\xaa\xfc\x4f\x03\xf2\xab\x37\x79\x29\x33\xed\x1a\xec\xe0\xe8\x62\x58\x4e\x50\xbf\x3d\x31\xc9\xe1\xd6\x97\x67\xe1\x9d\x7f\xef\xf3\xdb\x75\xf9\x1c\x16\x5b\xd9\xfc\xd2\x21\x9d\xff\xcd\x6c\x0f\xe8\x5e\x5e\xee\x92\x5b\x91\x27\x33\xd4\xb6\xad\x35\x18\x93\x02\xff\x7a\xde\x54\x10\x97\x85\x06\xe3\xe4\x85\xb5\x6d\x62\x67\x90\x0e\x19\x88\xd0\x45\x23\xb4\x01\x71\xb0\x2e\xa9\x64\xc4\x49\x3a\x7a\x7f\xf0\xce\x3b\xbe\x0e\xdd\xe0\x86\xeb\x43\x5e\x3b\x7d\xce\xc8\x4d\x86\x54\x7c\xf3\xfc\x4d\x7c\x23\x1a\x9e\x88\xb0\x20\x0e\xd6\x25\xdf\x5c\x1c\xca\xff\xff\x58\xfb\xcb\xa8\xac\x9e\xf7\xff\x03\xa5\x24\xa5\x11\x10\x41\x42\xba\x91\x50\x1a\x69\x24\xa5\x95\x54\xba\x11\x90\x6e\x04\x69\x69\xa4\x44\x4a\x3a\x25\xa5\x51\x42\xba\xa4\x95\x92\xee\x6e\x38\x8f\xee\xfd\xff\x9c\x7d\xff\xd6\xd9\x67\x2d\xbe\xcf\x5f\xeb\x9a\x59\xd7\x7a\xef\x3d\xf1\x9e\x99\xcb\x76\xb5\x7f\x91\xe3\x79\xe5\x5f\x82\x13\xf2\xc1\x0f\x35\x83\xd9\xa4\xd5\x0f\x4f\x1a\x65\xe7\xb6\x6c\x9b\x99\x81\xfb\xac\x50\x1c\xe8\x93\xac\xac\xc0\xf8\x88\x28\xc8\x1e\xaf\x99\x81\x22\x5b\xce\x84\x37\xdd\xf3\x6a\xfb\xaf\xa6\x9e\xf5\xee\xe3\xdf\x3c\x76\x66\x66\xe6\xc0\xe9\x34\x28\x0e\xf4\x49\x2e\x23\x9b\x5a\x20\x98\x71\xc7\x95\x6a\x90\x85\xf0\x87\x46\xa5\xc8\xce\x9c\x15\xd3\x5c\x75\xe4\x21\x29\xc5\x07\xc8\x1c\x71\x02\x46\x2f\x14\x07\xfa\x24\x7b\x9e\x5e\xb8\x6c\xb5\xb3\xe4\xb1\x1d\xa9\xb4\xef\xd8\xb5\xd2\x94\x7a\xf7\xd7\xdc\x5f\x8e\xca\x0d\xd5\x79\xbc\xf8\x1c\xe1\x0b\x50\xbb\x0d\x4a\xe5\xf0\x62\x10\x08\x11\x1d\x66\x66\x1d\x1a\xd8\x40\xf3\x36\x29\x2a\x4a\x75\x9e\xea\x96\x93\x15\x2c\x96\x1a\x96\x10\xc1\xe2\x08\xf1\x71\xc6\x03\x8e\x3a\x41\x70\x20\x31\xbc\x6b\x23\xe7\xd0\x51\xa7\x0c\x3d\x4b\xe0\x09\x59\x7a\xb1\xd1\xd6\x4f\xa6\xf4\xe4\xbd\x5e\xb7\x28\xc3\x47\x8c\x87\x07\x61\xc1\x83\xb0\xb0\x50\x1c\x48\x0c\x7d\x9f\x87\x6f\x7c\xbe\x36\x69\xf1\x06\xca\x6c\xad\xa5\x8a\x7b\x15\x9d\xe3\xc5\xb5\xbd\xd9\x7f\xf5\x40\x59\xc1\xcc\x7a\xd6\x0f\x28\xb2\x06\xc5\x81\x2f\xa5\x38\xda\x25\x7d\x62\x8f\x7e\x17\x79\xbd\xa7\x8a\xad\x6b\xb8\x68\x95\xb6\xb7\x56\xcd\xef\x27\xa1\x1b\x67\x75\x44\xa0\x36\xcc\x0f\x5c\x4a\x81\xe0\x40\x62\xc0\x0c\xac\xa8\xd9\x9c\x3d\x91\x79\x97\x53\x94\x2a\x4d\xa2\x56\xf7\x47\xa6\x29\xbe\xc4\x50\x30\x34\xe3\x11\x57\x0d\x95\x89\x0b\x70\x3a\x0d\x8a\x03\x1f\x53\x68\x7e\x2a\xd3\xda\xd1\xc6\xe3\x75\xb1\x75\xf2\x3e\x8e\xa2\x48\x8b\x5d\x84\xa2\x7a\xb2\x0d\x33\xf9\xc3\x59\xb3\x95\x19\xd9\x67\x98\x18\xa0\xfe\x3f\xf0\x62\x38\x58\xbe\x27\x4d\xee\x1f\x1a\x75\x18\x28\xf8\xd4\xd4\x77\x7d\xa9\x7e\x93\x24\x54\x79\x4f\xbb\x40\xb9\xbe\x99\x46\x11\x6b\x1c\xb8\x33\x0d\xc5\x81\xc4\xd0\xf3\xbc\xf8\x48\xfd\xd8\x5f\x4e\x6a\x88\x4d\x16\x29\x7e\x28\x25\x03\x35\xc0\x02\x73\xd7\xbc\xdb\x43\x87\xf0\x46\x6a\x78\x09\x38\xcc\x0d\xc5\x81\xc4\xf0\x10\x0b\x7b\xe9\xbd\x8f\x87\x70\xc2\x12\x11\xe9\x82\xae\x0e\xe6\x54\x0a\xfd\xda\x72\xb8\x72\x96\x67\xd6\xa9\x9f\xfb\xe4\xfb\xb7\xb0\xb0\x50\x1c\x48\x0c\xc7\x1c\xca\xea\x1b\xe6\xa3\x5a\x55\xee\x09\x93\xb5\xe7\x9d\x17\x49\xc5\x05\xe6\x85\x02\xf3\x3a\xac\x6d\xbf\x3b\x1b\x1f\xad\x00\x1a\x83\xe2\x40\x62\xf8\xce\xae\x1b\x39\x46\xf4\x4e\xc1\x28\xa7\x1d\xb3\x9f\x3e\x3d\xa2\xaf\xf4\x4f\xe2\xc8\x92\x0e\x2a\x27\x89\xf4\xcf\x01\x87\x2c\x60\x75\x00\xc5\x81\xc4\xe0\x86\x43\xed\x1a\xba\xa5\x6f\x1b\x83\x1a\x26\x1f\x22\x95\xd4\xf8\x31\x96\x54\x45\x83\xd4\x23\xbd\xd1\xf6\x83\x4c\x29\xca\xda\x34\x70\x4c\x01\xc2\x8b\x84\x17\x83\x84\x35\x82\x6a\xad\x0f\x0b\xae\x78\x85\x54\x78\x14\x9a\x17\xf9\xc2\x6b\x73\x0e\xb1\x9f\x98\x78\x4f\x06\x89\x68\xc9\x07\x0b\x80\x8d\x6b\x28\x0e\x24\x86\x07\x7f\x9b\x4b\x5b\xac\x2b\xd9\xfb\x67\x97\xd4\xe9\x10\x62\xa3\xf9\xe8\x5c\x2a\xa7\x89\x78\xc9\xcf\x9a\x71\x1f\x92\x65\xa4\xad\xc2\xc2\x42\x71\x20\x31\x5c\x1a\xb8\x48\xd4\x8b\x1e\xd3\x28\x29\xf5\xa5\x5c\x89\x0d\x9c\x88\x96\x04\xf4\x22\x09\x9b\xeb\x16\x04\x2f\xdf\xc3\x98\xb2\x03\x9e\x76\x87\xe2\x40\x62\xc8\x1d\xfb\x95\x3c\x6b\xa0\x28\xf7\x9e\xc3\x41\xea\x47\xb9\x86\x35\x61\x56\x81\x87\x12\x4a\x33\x6b\x86\xce\xef\xd9\xb2\xa7\xc7\x7f\x81\xd3\x0f\x10\x1c\x78\x98\xf8\x1e\xd0\x6f\x41\xbb\x52\xc0\x24\x88\x83\x8e\x18\xd7\xc9\x98\xaa\xdb\x6f\x33\xfd\xcf\x4a\x0c\x71\xa3\x87\xfe\xf2\x84\x6f\x0e\x70\xa6\xfd\xd2\xc6\x79\x23\x66\x72\xd2\x19\xf9\xe4\x47\x5d\xe6\x6b\xf2\x1e\xfc\xd5\x3a\x5e\x3f\xb6\x7a\xdb\xf3\xc7\xc4\x45\xdd\x25\xbe\xe8\xbf\xce\xb4\x38\xa3\x8a\x50\xe3\x65\x61\x50\x20\xba\x4c\x6e\x73\x3a\x5d\x8d\x1d\xda\x73\x24\xba\x32\x81\xe5\xfb\x8f\x9f\x16\x2a\xd0\x22\xd6\xfd\x07\x9d\x24\x68\xd4\xfb\x79\xe3\x85\x97\xbb\x9a\xc9\xdd\x2e\x87\x9b\x59\xe3\xf7\x57\x32\x25\x36\x42\x11\x6d\xa8\x38\x44\xec\x49\x38\x2a\xc8\x99\x86\x8a\x0c\xef\x4c\xd3\xaa\xdf\x0f\x60\x7f\xe6\x99\xbb\x48\x52\x64\xd7\x27\xdc\x86\xe6\x26\xe3\x1f\xd3\xf1\xf2\x09\x29\xad\x58\x34\xbb\x37\xd9\x76\xe8\x7f\x50\x9f\x69\x03\x0b\x8e\x8b\xf4\xab\x74\x71\x62\xb5\x82\xaf\xef\x9b\xb3\x62\xb2\x53\x6d\xb4\x36\x3e\xbe\x4f\x8a\x73\x70\x76\xed\xb4\x01\x9c\x69\xa8\x98\xb0\x3a\xd3\x60\x67\x9a\xf2\xe1\x74\xa4\x4c\x99\xc8\x13\x19\x8e\xd1\x8b\x70\x9b\x4a\x43\x83\xa1\xb0\x94\x79\x3e\x57\xe7\x9c\xfd\x5f\x52\xa9\x44\x5f\x92\x6e\xed\x4c\xfb\x82\x9d\xe9\xe3\xb4\x82\x87\x2a\xf4\x42\xe9\x9d\x35\x38\x68\xfe\xeb\xd1\xc4\xb1\x83\x13\x58\x9f\x7a\xd2\xec\x50\x23\xca\x38\x38\x10\x86\x6e\x6f\xa0\xfa\xc2\x39\xd3\xfb\x8d\xca\x9a\x0b\x19\xbb\xfe\x81\x1d\xd6\x23\x7e\x77\x15\x26\xfa\xad\xb4\x66\xd7\x32\x55\x0e\x48\xc2\xe3\x24\x11\x8c\x7d\x9e\xde\xbe\x49\x38\x67\xfa\xab\xbd\x4e\xb0\xe8\x0f\x13\x5c\xe1\xca\x37\x52\x81\x8f\xd8\xaa\x5e\x6a\x09\x9a\x5c\x1b\x87\x5e\xea\xb9\xac\x09\x24\x76\xd1\x44\xdd\xbe\x49\x38\x67\x5a\xf6\x79\x37\x4a\xb9\xe8\xc3\xc8\xd7\xc3\xb1\x32\x5c\xce\x9c\x13\xdd\x13\x8a\xef\x53\xf5\xa5\xb0\x73\xfa\x79\xc7\x8e\x53\xb6\x74\x6e\xdf\x24\x9c\x33\x4d\x38\x68\x4c\x46\x29\xf1\x22\xa6\x79\x4f\xa7\x47\x47\xf7\x69\xa5\x4a\xeb\x78\xe0\xc6\x91\x44\x49\x9a\xc8\x67\x6a\x84\x7f\x6d\x16\xb7\x6f\x12\xce\x99\xe6\x22\x7c\xfe\xa0\x79\xa2\x3e\xf4\x1d\x09\x9b\x65\xa5\x27\xb6\xc4\x92\x2b\x4d\xb6\x24\x03\xfa\xef\xa7\x9d\xd3\x19\x0e\x7c\x34\x5c\xb7\x6f\x12\xce\x99\xce\xa5\xb5\x16\xaa\xaf\x7d\x72\x67\xe9\x9f\xf3\xc4\x4f\x85\xe3\x78\x09\xdc\x9a\xd9\x88\xd1\x98\x0e\x9e\xad\x32\xb9\x46\xe7\x59\xbe\xff\xcd\x5a\x05\xea\x4b\x84\x1f\x84\xd8\x33\x24\x62\x18\xec\xe8\x5a\x32\x2f\xd5\xb7\x7c\xd5\x68\x2d\x1e\x6d\x72\xa0\x70\x99\xf0\xb3\x8b\x87\xd6\xcd\xae\xd9\x3d\x03\xde\x46\x83\xe2\xc0\x25\x25\x28\x0b\x63\x95\x8c\x33\x53\xa3\xd8\x6a\x6c\xb8\x0f\xd2\xd6\xbd\x7c\x3a\x70\x09\xf4\x0c\x3b\x87\x30\x55\xa3\xe6\xf3\x13\x81\x9b\x91\x50\x1c\xf8\x66\xe4\x56\x41\x64\x5c\xaa\xfb\x15\x6b\xa9\x81\x5a\xe8\x44\xbf\x0f\xc2\x74\xb7\xe8\x84\x72\x9b\x1f\xd1\x45\x9e\x4f\x00\x7a\x3c\x30\x8f\x84\xe2\x40\x83\xd0\x58\x51\x8b\xd0\x1d\xfc\xdf\xf5\xa7\x95\xfb\x0c\x3a\x23\x7b\xab\xaa\x75\xa4\x22\x08\xa4\x6a\xb3\x88\x3b\xe9\xce\x85\x87\x7a\xc0\x9d\x69\x28\x0e\x94\x04\xd7\xf4\x4f\xe4\xa4\x13\x23\x3f\xc4\xd1\x0b\x6f\x06\x83\x9b\xea\xb3\xf9\x9c\x0e\x4f\x9a\x33\xde\x9c\xaf\x79\xa2\xd1\xda\xdb\x00\x4f\xd9\x40\x71\xe0\xa7\x6c\x74\x96\xb4\x43\xd9\x65\xad\x9f\x29\xed\x05\xbf\x14\x32\x49\x46\x88\x35\xed\x0a\x4a\xd9\xb6\xab\x5c\xaa\xdd\xaa\xfb\xe4\x32\x03\x9b\x91\x40\xfd\x24\xe1\xc5\xf0\xf9\x95\x4f\xd5\x93\x5a\x97\x6d\x82\xda\x73\xce\xb7\x4d\xe7\x0b\xeb\xbe\xd1\x1e\x05\x02\x1c\x9b\x8e\x78\x52\x06\x9c\x22\x12\xc0\xab\x89\x50\x1c\x28\x0f\xed\x32\x3b\x3d\xbd\x2b\x5f\x66\xd1\x32\x46\x2a\x65\x5e\x53\xf2\xaa\x9f\x45\xcd\x30\x54\xa2\xcb\xbe\xc4\x98\x88\xe3\x40\x6d\xa9\x81\x85\x85\xe2\xc0\xf7\x9f\xa4\x84\xb3\xcb\x26\x3f\x65\xbc\x51\xd7\xff\xd0\xc4\xd5\x28\x79\xf9\x5e\x27\x6c\x91\xf2\xde\xa9\xf4\xba\x12\xfe\xae\xe0\xf4\x07\xe0\xfe\x13\x04\x07\x5e\xb8\x46\x16\x5a\xb0\x1d\x58\x3c\xd0\x1a\xde\x0b\xe5\x5c\xef\x6f\x5b\x74\xf8\x76\xc6\x53\x20\x99\x28\x3f\x5c\x1c\xfa\x37\x34\x0c\x78\xd2\x1c\x8a\x03\xd7\x4a\x64\xd2\xd8\xf5\x21\xd0\x28\x1a\x7d\xf4\xe2\x93\xad\x01\x55\xba\xdb\x5e\x7d\xe8\x00\xf9\x1d\xc2\xa4\x80\x7d\x75\x8b\x06\xa3\x12\x58\x58\x28\x0e\x94\x04\x9d\x42\x2c\xff\x5f\xd3\x77\xb4\x7e\x09\x6a\xaa\xac\x9d\x73\xf4\x73\x3d\xe7\xfe\xfa\x39\xf9\x3b\x15\xba\x05\x37\xcf\x0c\xed\x17\xc0\x72\x80\x1a\xbe\xe0\xc5\xf0\x12\x85\xbe\x51\x9f\xa8\x23\x34\x26\xfe\xca\x26\x65\x35\x56\xf8\x2e\x67\x58\x35\xe7\x3f\xc3\xe9\x39\x61\x2a\x49\x53\xe7\x2e\xe0\x31\x46\x28\x0e\x94\x87\x09\xa9\x17\x23\x82\xaa\x68\x85\xb3\xa4\x71\xc8\x33\x5d\x07\xcb\x9f\xc3\x1e\xe2\xd1\xfd\xe2\x7d\xca\xb0\xd6\xac\xe9\x13\xad\x07\x5c\xfd\x81\xe2\x40\x79\x90\x58\x17\x25\xb6\xd7\xd3\xf4\x90\x0f\x46\xb5\x8c\xae\x0e\xb0\x26\x5c\xa4\x9d\x33\x5f\xbb\xd0\x33\x21\x18\x5e\x24\xce\x2f\x03\x8e\xc2\x40\x71\x20\x31\xd8\xc8\x49\xc8\xf4\x68\x34\x75\xbc\xfc\x11\x49\x73\x17\x8b\x96\xb3\x8d\x5e\xbf\x23\xc1\x70\x79\x56\x77\x42\xd9\x5e\xf7\xe1\xff\xfb\x22\xa0\x38\x50\x12\x58\x2b\x03\xa9\x87\x7a\x5e\x95\x16\xbd\xbb\xa4\xa4\x52\x0a\x2c\xe1\xb8\xa7\x3e\x6a\x1e\x33\xcf\x19\x8b\x6d\x64\xa3\xae\x28\xf4\x0b\x16\x16\x8a\x03\x25\xa1\x49\xe4\xe5\x18\xfa\x52\x9a\x6b\x3d\x6a\x8e\x50\x94\xec\x13\xba\x46\x61\x79\x2e\x63\xc5\x3b\x71\xcf\xd5\x66\x06\x8b\xaf\x5e\x01\xaf\x79\x43\x4d\x2c\xe0\xc5\x50\x17\x1e\x64\x6b\x14\x30\x96\x57\xf9\x52\xa6\xc0\xba\xcb\x3c\x04\xc5\x7d\xe8\xb0\x9a\xe6\xa7\x9a\x19\xce\x7b\xa1\x16\x37\x24\x1f\x58\x87\xa1\x38\x50\x1e\x38\xff\x89\x34\x29\xff\x38\xca\x4c\x5a\x29\x97\x38\x29\x78\x40\x9f\x62\x15\xaa\xe7\xe5\xdc\xb2\xa8\xce\x10\xa9\x10\x75\x44\x0b\x94\x58\x86\xe2\x40\x79\x78\x55\xa3\x1f\x83\x5a\xb0\xbf\x3b\xfe\xfa\xf7\xd2\xce\x6f\xe6\xef\x92\x39\xb5\x4b\x2f\x3e\xc9\x14\x64\xbc\xb5\x26\x9d\xe9\x38\x05\x2a\x0f\x41\x71\x20\x31\xb8\x61\xd8\x1c\xc6\xa5\x2f\x7d\x73\x0d\x5b\x8a\xd1\xae\x56\x2c\xe3\x29\x7f\xb4\x24\x5b\x8d\x35\xfe\x5e\x50\xc7\xdb\xf2\xa1\x0f\xf0\xd2\x32\x14\x07\x4a\xc2\xc0\xc0\x18\x4e\x7f\x4e\x4d\x23\xed\xa5\xac\x6e\x1f\xc9\xe4\xcf\xcc\xdc\x7e\x87\xf1\x77\x87\x8b\xc8\xfb\x79\x79\xee\xa4\xc6\x40\x7d\x65\x28\x0e\x94\x84\x23\xe7\x87\x16\x51\x78\x3e\xc3\xbc\x37\xad\x2c\x4a\xba\xaf\xab\x43\xec\xce\x4e\xd6\xc9\x0b\x13\x75\x6f\xe4\x8e\x0c\x83\x54\x81\x61\x02\x6a\xca\x07\x2f\x86\xad\xd6\xdc\x81\xe9\xbc\x5d\xe5\x1c\x81\x4a\xab\x57\xdd\xb1\x38\x16\xe5\x7e\x21\x6a\x52\x87\xdb\x9d\x2b\x5f\xed\xbc\xc9\x0c\x8b\x61\x1d\x86\xe2\x40\x79\xc8\x65\x3f\x46\x0d\xe8\x70\xd1\x19\xc9\x3c\x44\x8f\xaa\xb8\x87\x8a\x6a\xa5\x6a\xcb\x6e\xf6\x58\x93\x81\x35\x46\xf5\xa6\xde\x0f\x1d\x58\x0a\x42\x70\xa0\x3c\xe0\x74\x6c\x05\xa3\x6a\x73\x3c\x79\x85\x89\xaf\x2c\x83\x39\x3b\x1d\x5d\xb2\x5c\x31\x4d\xcc\x76\xfe\x2f\xa2\x43\x1b\x53\x45\x08\xa8\x25\x01\xc5\x81\xc4\xc0\xbc\xbf\x34\xfc\xf5\xd7\x7b\x3d\xed\x52\x81\xa7\xa4\xa6\x0a\x86\x5b\x58\x35\x1a\x15\x25\xc5\xfb\x15\xcf\x27\x83\xb3\x59\x49\x81\x3f\x03\x14\x07\x4a\x02\xc9\x16\x36\xee\x19\x6d\xb7\x09\xda\x2c\xe1\x28\xaa\xf5\xf5\x31\xc7\x5e\x01\xee\xaa\x64\xd9\x64\x9c\x97\x51\xeb\xb8\xc6\x10\xf0\xf6\x38\x14\x07\x4a\x82\x46\x54\xca\x97\xaa\xd8\x6c\x75\x11\x7b\x47\x99\x3d\x5b\x2c\xf5\x3b\x9e\xe8\x41\x1d\xc9\xed\xbc\x96\x6b\x81\x9c\x9a\xfb\xad\x5c\x40\x69\x61\x88\xc9\xf8\xff\x71\x0d\x2b\xe9\xb8\xfe\xbb\x25\x8d\x1b\x62\x83\x89\x0c\xfe\xa6\x79\xef\xa3\x1a\x43\xf9\xf2\x78\x8f\x4b\x03\x9e\x7f\xf8\x19\xcb\xc4\x8a\xc0\x1f\x12\x82\x03\xe5\x61\x7a\xf1\x43\x84\x71\xad\xea\x46\x11\x8f\xc8\x43\x61\x45\x2b\xdc\x9c\xea\xb1\x6e\xd3\x67\x8d\x0e\x5b\x83\x6f\xee\x5b\xb5\xa3\xd8\xc1\xc2\x42\x71\xa0\x3c\xb4\x54\x18\x76\xb1\x39\x6d\x0a\x7e\xad\xbc\x28\x67\x36\x0d\x88\x88\xbd\x5b\x69\x68\xb1\x95\xf1\xd2\xc2\xd4\x19\xed\x4b\xf3\xb2\x1e\x2c\x2c\x14\x07\x12\x83\xe7\xa7\x22\xdd\x7c\x7b\xc9\xda\xb7\xc8\xbc\x1b\x99\xf6\xa8\xc3\x5b\xf2\x16\x5d\x1d\x69\x0c\xf5\xf1\x9f\x69\x2e\x5f\xf0\x8c\x24\xc0\xc2\x42\x71\xe0\xc7\x66\x92\xfe\xca\x5e\xa9\x54\xbd\xb0\x0e\x89\x6d\x8b\xf3\x0e\xd6\xc5\x56\x33\x6e\x8a\x48\xbf\x78\xf4\x99\x16\x9d\xe6\x17\xe6\x7a\x28\x2c\x2c\x14\x07\x4a\xc2\xc9\xe0\xab\x99\x67\x8c\x1d\x37\x94\x3c\x6f\xf7\x26\x33\xb1\x5e\x7e\xa9\xfe\x45\x14\x95\x34\x90\xa4\x42\x1a\x3a\x4c\x4e\xa6\x0a\x54\x2b\x84\x5a\x26\xfd\x1f\x62\x98\x16\x67\x6f\x53\xfe\x69\x46\xbd\x47\x61\xba\x45\x64\xfc\xab\x11\xc3\xbd\x35\x42\x68\x1f\x75\xbb\x2f\xfd\xce\x44\x34\xa1\x24\x20\x06\x08\x0e\xbc\x9a\x68\x5c\x44\xad\x93\xb7\x40\x90\x54\x70\xba\xdf\x56\x61\x6f\x83\xa7\xcb\x1e\x2b\x5f\xf6\xa7\x18\x1f\x11\xc5\x2b\x81\xbc\x04\x78\xbe\x05\x8a\x03\xe5\xe1\x63\x37\x86\xd6\xd5\xa1\x55\x81\x9d\x81\x1f\xfe\x71\x18\xa1\x69\xbb\xf7\x48\x65\x27\xbf\xba\x16\xb5\xf8\x13\x09\x64\x94\x30\xe0\x5e\x3e\x14\x07\x12\x83\xf1\x37\x7d\x5f\xaf\xef\x1f\xf2\xd4\xbe\xe3\xa5\xe3\x61\xdc\x89\x59\x93\x7b\x9c\x8f\xe0\x54\xab\xbb\x28\xe3\xcc\x6c\x47\x2c\x04\xf8\xe8\x50\x1c\x28\x09\xe4\x7a\xe9\x77\x04\x68\x89\x5d\x62\x0e\x23\xea\x05\x16\x56\x0d\x10\xe8\xcc\x88\x5c\xee\x3c\x78\x14\x48\x29\x62\x21\xcd\x64\x00\x1c\xe9\x83\xe2\x40\x49\x60\x43\x14\xed\x58\xbd\x74\xdc\x28\x24\xe7\x4e\xbf\x61\x61\x3a\xce\xe6\x8c\xe7\xb0\x6f\x75\x40\x16\x78\xa9\xbb\xdf\xb2\xef\xcc\x0c\x13\x03\xd4\x02\x16\x5e\x0c\xdf\x16\x8e\x56\x8f\x58\x54\x0f\x13\x63\xef\x56\xd1\x6e\x56\x0a\x34\x2a\xf0\x37\xef\xa2\xf9\x36\x71\xe5\x38\xba\x49\x04\x86\x01\xef\x66\x41\x71\xa0\x3c\x54\x32\x45\xaa\x6d\xaf\xe6\xf0\xe7\x9f\x15\x2c\x9a\xe7\xf1\x99\x1f\xd7\xfe\x5a\x3d\x1b\xdb\x42\x25\xad\x66\x91\x93\xab\x91\x00\xae\xc8\x40\x71\xa0\x3c\xb8\xd4\x75\xec\x23\x25\x69\xef\xdc\xcd\x74\xcc\xca\xc6\x26\x51\xe7\x7d\x97\x61\x50\x8b\x47\x83\xf3\xaf\x31\x89\x14\x67\x3f\x71\x04\x16\x16\x8a\x03\x89\xc1\x9f\xa2\xd0\x87\x2d\xb0\x73\x7d\x9a\x7a\x1d\xd3\x98\xd5\x20\x30\xb9\x8c\xf8\xed\xbf\xe0\x66\xec\x93\xb5\x99\x31\xea\x19\xa2\x0a\xc0\x9e\x87\xe0\x40\x49\x28\xf1\x4a\xdc\x1c\x71\x17\x22\x46\x50\x39\x67\xc6\xd4\x63\xbd\x74\x92\x76\x08\xff\xe6\xd7\x1a\x86\xf8\x49\xf9\xd2\xfa\x58\x1d\x58\xa4\x40\x71\xe0\xca\x17\x36\x7f\x54\x27\x37\xd4\x9e\xc7\xa3\xdb\xec\x30\x73\xa3\xb5\xf8\x4c\xab\x89\xa0\x72\x4c\xd7\x2d\x61\xab\xba\x4f\xb7\x63\xc6\x03\xce\x34\xd4\x9e\x22\xac\xce\x34\x9c\x33\xfd\x83\x21\xdd\x24\x49\xc9\x7b\xcf\x99\x86\xe0\x13\x83\x81\xc3\x83\x40\x82\x54\xfa\x99\xf9\x4b\x47\xda\xb1\xdc\x5c\x52\x45\xc3\xf6\xdb\x6f\xbd\xc0\x39\xd3\x2f\x7a\xe6\xa7\x8e\x1b\x25\x57\xb6\x86\x43\x3a\xc2\x73\x77\x73\xd6\x12\x90\x0e\x84\x83\xe6\x57\xf1\x04\x5e\x34\xdb\x32\x0f\xa1\xde\xbe\x49\x38\x67\x7a\x06\x61\x51\xda\x5d\xc3\xe6\xf5\x80\xd4\x77\xcf\x2d\x39\x09\x39\x69\xaa\xe9\xcb\xd9\xb7\x0e\xb4\x51\xf7\x52\xe2\xc2\x59\xc4\x59\xfe\x37\xbb\x3d\x50\xb9\x84\xff\x24\x4b\xb0\xbd\x50\xd3\x2c\x7b\x9a\xa3\xe9\x79\xb5\xaf\x65\x2d\x89\xa7\xa5\xfc\x53\xbf\xf3\x05\xf8\x38\xe0\xbf\x19\x2e\xd3\x1a\x52\x02\x64\x03\xc1\x81\xd4\x68\xe8\xa8\x11\xb4\xe6\xff\xcf\x8e\x69\xfb\x2c\x5a\xc3\xbe\xdd\xfa\xe6\xd3\xdf\x0e\xeb\xf4\xa5\xee\x42\x36\x9f\x22\x0f\xd4\x1d\xe0\x4c\x21\x14\x07\x52\xe3\x87\x28\x65\xdd\xe4\xce\x26\x0f\xaf\x48\xf1\x7a\xd9\xf5\xee\x12\x3e\x01\xa2\xbe\x83\x05\x8d\xba\xae\x4b\x64\xab\x3c\xb5\x56\xe0\x0a\x23\x14\x07\xfa\x24\x5b\x9c\x9d\xf1\x05\x2c\xf2\x4a\xe4\x11\xbf\xe9\xfe\xd3\xa2\x1e\x2f\x0e\x73\x1e\xc2\xf1\x1f\x99\x60\xb2\x54\xfd\x87\x94\x79\x1f\x38\x4b\x07\xc5\x81\x92\x20\xbd\x77\xe1\xa3\xc6\xdf\xca\x14\xaf\x87\x4a\x12\x85\x3d\x17\xf6\x28\x37\x7f\x1e\x45\x4f\x74\x41\xde\xc9\xf5\x13\x8a\x0f\x25\xb0\xe5\x05\xc5\x81\xef\x0a\x3f\x2d\xf8\xf5\xe7\xeb\x6f\x8b\x88\x27\x74\xc4\xc2\x0c\x1e\x61\xfd\x38\xa8\x92\xee\x6b\x42\xc8\x0f\x79\x7c\x53\x76\x8f\x5e\x75\xc0\xfe\xcf\x50\x2a\xff\x3f\xcc\x48\xe5\x53\x8d\x8e\xb1\x3f\x97\x6f\xcf\x98\xa7\x4d\x1a\xd4\xf1\x93\xe5\xd7\x1c\xb7\xb0\x3e\x3d\x15\xaf\x2c\x22\x10\x7a\xd8\x09\xbc\xbb\x00\xc5\x81\xf2\xd0\x48\xd9\xed\x24\x1a\x91\xce\xe1\x4f\x1b\x73\x4f\xdf\xef\x2e\xbe\x78\x69\xce\xe3\xaf\x62\xa9\x5b\x47\xe2\x53\x87\x1f\xeb\x54\xd9\x61\x61\xa1\x38\x50\x1e\x06\xb3\x66\x52\x1e\xda\xa4\xa9\x7d\x2b\x29\x89\x6d\x78\x21\x79\xd6\x7e\x07\xc9\x35\xf6\x8d\x1d\xe2\xbe\xae\xb8\x2e\x56\x91\xfd\x34\x2c\x2c\x14\x07\x12\x43\x6f\x96\x4d\x18\xde\xe6\xf8\x77\xe6\x44\xda\xa1\xb2\xb6\xec\xdd\xdc\xb5\x28\xd5\x2d\x94\x25\x5e\x2f\xc9\x8c\x47\xe3\x01\xc9\x40\xd1\x71\x28\x0e\x94\x04\x22\x76\x96\x9f\x9d\xc3\xee\x0d\xa6\x44\x13\x61\x49\x39\xee\x11\x39\x1b\x3f\x19\xdf\x4a\x33\xf1\x14\xb1\x72\xcb\x4f\x97\x0c\x00\xef\xf9\x41\x71\xa0\x24\xe0\xf7\xed\xee\xfe\x10\x70\x41\x3e\x30\x08\xff\xa2\xb2\xf9\x26\x49\x30\xc5\x2b\x38\x5e\x07\x1f\x87\x24\xfa\x77\x93\xd5\xf1\x9f\x05\x98\x18\xa0\xfe\x3f\xf0\x62\xf0\x19\x7f\x3e\xe9\x94\x4e\xc3\xb1\x3f\x52\x21\x3d\xee\xb3\x65\xca\xce\x94\x6e\x4d\x99\x7d\xa5\x34\x20\xf9\x0a\x5d\xcf\xf8\xa3\x2a\xac\xc3\x50\x1c\x28\x0f\x54\xa5\xd6\xe8\x6c\xfb\x67\x25\x2c\x35\x44\xf7\x94\xdd\x06\x5f\x2f\xab\xd6\xee\x37\x9a\xd4\x85\x17\x04\x3a\x70\x3a\x0c\x4d\x5e\xc0\xc2\x42\x71\xe0\xad\xbf\x6f\x5a\x6a\x14\xc8\xf7\x87\x71\xbd\x4a\x88\xd1\x53\x51\xa3\xef\xee\x89\x4f\x10\xbf\xc6\xbf\x08\x40\x45\xd1\xfb\x90\x25\x03\xbc\x18\x0f\xc5\x81\xaf\xc9\x9a\xee\x7d\x68\xb8\x1c\x12\xf0\x1c\xd0\x32\x8e\xea\xaa\x8f\x96\xd1\xd0\x3b\xc9\x3a\xfb\xbc\xac\xa0\x89\xb3\x68\x42\xf3\x7a\x03\xb8\x26\x0b\xc1\x81\x92\xc0\xbf\x73\x32\x14\x72\xd4\x64\x41\x88\xdc\x98\xf0\xfe\x4d\x96\xe8\xcc\x64\xf8\x2f\x4c\xb5\xeb\x09\x49\x2c\xbc\xe5\x84\x8d\xb2\x68\x58\x58\x28\x0e\x94\x04\xc6\xdf\xcc\xc2\xb2\xc6\x9e\x2b\xcd\xf6\x77\xdf\x38\x93\x9c\xb6\xf0\x56\x4c\xb9\xe9\x4c\x5e\x4b\xeb\x3f\x43\x5b\x61\x7c\x9d\xc1\x0f\x13\x03\x94\x17\x09\x2f\x86\xd3\xd3\x03\xab\xde\x33\xdc\x33\xa1\x24\x7d\x55\xb6\x7b\x6f\x83\x88\x2e\xce\x7d\x83\x3c\x53\x72\x8d\x36\x7a\xcf\xad\x1c\x9c\x80\x53\xd7\x50\x1c\x28\x0f\xc7\x94\x95\xf7\xa8\xff\x28\x5b\x2c\xee\xec\x91\x77\x24\x3c\x2a\x27\xd5\x38\xbf\xb8\x8b\x58\x13\xb3\x3b\x47\xa1\x2e\xf1\xf9\xe7\x63\xc0\xf8\x87\xe0\x40\x79\x50\x7a\x4c\x1b\xbb\xc8\xaa\x37\x8b\xd8\x25\x25\xca\xb7\x72\xcd\x1b\xa6\xcd\x3d\xa6\x2a\x60\x3c\x75\x4f\xee\x5d\xa5\xf1\x36\x06\x70\x9f\x0a\x8a\x03\x9b\x02\x2b\xd6\x27\xf4\x62\xed\x6f\xfa\x27\xb3\x86\x88\x82\x09\x7d\x3f\xfd\xd0\x41\x16\xd7\xff\x3a\x1a\x24\x70\xee\xba\xfa\x2c\x1d\x78\x08\x04\x8a\x03\x25\x81\x4c\x43\xf0\xcf\xca\x41\x25\x77\x7f\x51\x35\x03\xfb\xcf\x7d\x69\x1b\xec\xcc\xac\x0e\x7d\x92\x74\x29\x6e\x2c\xaa\x7f\xc1\x6a\x87\x80\x33\x4d\xec\x3f\xf4\x96\x81\xee\x69\xed\xc5\x88\x16\x43\x6d\xd4\x56\xe7\xc3\x36\xce\xde\xef\xf6\x46\xca\xbb\x41\xdb\x8d\xe8\x0b\xd2\x3f\xff\xeb\x4c\xa7\xa4\x19\x20\xb7\xd7\x70\x63\x0c\x68\x92\xd3\x06\x9c\x4d\x7d\xb2\x42\x89\x28\x0a\x6d\xf9\xc3\x80\x95\x76\x62\x70\xb8\xb6\x9c\xf3\x1f\xf4\x9c\xe2\x58\xf0\xe3\x47\x71\x63\xbb\x2c\x85\xfb\x58\x86\x76\x6f\x5d\xf3\xff\x9a\xae\xe8\x53\x58\x7f\xc0\xed\x7a\x7c\x1a\xda\x6b\x05\x72\xa6\xa1\x22\xc3\x3b\xd3\x01\x28\x1a\xe1\x67\x16\x08\xfe\x47\x62\xba\xd2\xef\x5b\x8c\x07\x09\x2e\xc4\x6d\x92\xbf\x88\xe8\xed\xf8\xf6\x5d\x4b\x15\x25\xa8\xfc\x07\x7d\x4e\x40\xdb\x5a\x47\x44\xcd\x4f\x85\x6b\xd1\x71\x2c\xfc\xc8\x2d\x64\x47\xdc\x3f\x24\xec\xcb\xcb\x16\x59\x05\xbc\x7b\xf4\x63\x27\x80\x33\x0d\x15\x13\x56\x67\x1a\xec\x4c\x57\xef\x7e\x4d\xaa\xfd\xc5\xad\xcd\x2f\xd3\x2a\x37\x61\xf3\x23\x8b\x1b\xcd\x97\xf3\xa3\xe4\xce\x92\xc8\x9a\x9e\x49\xad\xcb\xfd\xef\xb7\x76\xa6\x5b\xc0\xce\xf4\xb2\xbf\xb0\x9d\xfd\xdb\xa1\xcc\x66\xe4\xa8\xbf\xc8\x38\xbb\x26\x4f\xd6\x90\xfb\xfc\xde\x0a\x0c\x32\x29\xae\xa6\x7f\x88\x67\x98\xb9\xf5\x64\xb3\x05\xce\x99\xd6\xce\x75\xe2\x53\x57\xbf\x8f\x2c\xbd\x91\xb7\xe6\xc3\xd9\x97\x39\x68\x16\x5a\x55\x22\x81\xf7\x27\x4c\xb8\x44\x54\x50\x5a\x38\xe5\xf6\x4d\xc2\x39\xd3\xe9\x15\x2e\x1a\xfe\xf3\x6d\x9b\x73\x05\x17\xdb\xc9\xdd\xbd\x4a\x35\xd3\xfc\xff\x88\x25\x77\x64\x7e\xd9\xb7\x60\x6a\x06\x7f\x69\xb8\x7d\x93\x70\xce\xb4\xd5\xe4\x83\xe9\x9f\xbc\x6a\x16\x92\x87\x2e\x92\x3b\x1b\xef\xdb\xc2\xdc\x79\xe3\x1a\xb6\x8b\xcd\xe5\x1c\x57\xc8\xb9\x53\xa3\x46\x6f\xdf\x24\x9c\x33\x4d\x5e\x85\x4b\xa4\xbb\x83\x3e\xb3\x79\x91\x7f\x58\xb2\x70\xf5\x3a\x12\xf5\xcd\x86\xf5\x3c\x72\xef\x13\xe3\xaf\x1c\x0f\xd3\xd7\x95\x6f\xdf\x24\x9c\x33\x9d\x1b\x99\xf8\xd1\xde\xf1\x9f\x85\x59\x44\x2c\xc2\xfb\x9f\xbf\x36\xe6\xd9\x90\x4e\xaf\xec\x4e\x55\xac\xe4\x8f\x3d\xb6\x6d\x7a\xd7\x6f\xdf\x24\x9c\x33\xad\xe0\x37\x8f\xc7\x9b\x87\xab\x4e\xbb\x77\xbf\x56\xac\x80\x40\x86\x46\x6d\x7a\x6c\x90\x8f\x4c\x3a\xea\x84\xce\x7f\x6e\x4a\x4e\xe3\x7f\xb3\x56\x81\xfa\x12\xe1\x07\x21\xda\xef\x68\x24\x3a\xe8\xf7\xeb\x0d\x10\xd9\x32\x73\x29\x28\xe5\xce\xd7\xfd\x4c\x96\xdd\x83\xb1\xbf\xb5\xe7\x1c\x39\x8a\x3f\x05\xea\xb3\x42\x71\xa0\xff\xaf\x56\x52\x3c\x59\x1e\x42\xc2\xe4\x14\x0d\xa9\xcc\xb0\x46\x1f\x25\x7a\x4e\xe4\x6b\xf7\x7c\x37\xab\x07\x4e\xe3\xcc\x3b\x15\xe8\xc0\xae\x04\x14\x07\x1a\x84\xba\xfc\xbd\xab\xf7\xdd\xfa\x4b\xcf\x70\x66\x3e\xf8\x87\x24\xdf\x19\xaf\x9b\x7c\xd3\xad\x1e\x3e\x5c\x9c\x79\x65\x89\xcb\x33\x00\x9c\x95\x83\xe2\x02\x9e\xa1\xfc\x37\x6c\xe0\xf4\xe9\x7c\xc1\x77\xf3\x58\x1c\xa7\xd8\x18\x49\x4e\x1c\x27\x33\xb7\x78\x2d\xa1\x1d\x97\x1d\x0e\x91\x53\xe7\xa9\xcf\x08\xc0\x48\x0c\xc5\x05\x3c\x43\xfc\x6f\x58\x8c\x30\xbd\xfc\xb0\x64\xc6\x64\x99\xd4\xd1\xf7\x51\xcd\x4f\x53\xf1\x8c\x7d\x8c\x0a\xc4\x0f\xae\xe8\x5d\x59\xc8\x68\xf9\x50\x80\x3b\x19\x50\x1c\x28\x09\x18\x99\x63\x2f\xc9\x95\x05\xe5\x59\x5c\x1e\xa5\x33\xbb\x05\xc5\xb6\x8c\x23\x2f\x74\x0e\x3c\x3f\x2d\xca\x8d\x7b\x39\x6d\xdd\x85\x0d\x5c\x79\x81\xf8\x49\xc2\x8b\x41\xee\xf2\xf7\xcf\xea\x16\x54\xba\xf3\x21\x82\xc3\x5f\x2b\x1e\x4a\xa7\x3a\xba\x92\xb4\x19\x66\xd1\xf3\x2e\x55\x94\xd7\x7b\x5f\x80\x93\xf8\x50\x1c\x48\x0c\x6b\x2a\x14\x88\xd7\x8f\xa5\x48\x2b\x35\xfc\x76\x73\x04\x2d\x54\xbb\x5a\x63\x3e\x7a\x9f\x6b\xe6\xbe\x7b\xe0\xe5\xfa\xb5\xa7\x0e\x78\xb3\x17\x8a\x03\xe5\xa1\x91\xb2\x20\x9d\xa3\x5f\x29\xf2\x41\x7a\xf2\xf4\x4d\xe7\x91\x14\x66\x08\xe1\x4b\xf7\xcc\xaf\x09\x12\x4b\x97\x94\x52\x5a\x96\xf9\xff\x6f\x09\xf4\xff\x9b\x03\x89\xe1\xfa\x92\xeb\x6f\xc7\xa9\x2c\x62\xc0\xb6\xc4\xa9\x22\x26\x8b\x57\x62\x90\x39\x47\xb3\x3c\xc3\xea\x8f\x27\xac\x91\x34\xb1\xca\xc0\xca\x0a\x8a\x03\x89\xa1\xbd\xf7\x31\xa5\xff\x6e\xeb\x6f\x82\x99\xd2\x87\x74\x29\x3c\x64\xfd\x65\x64\x01\x6a\xe4\xb2\xaf\xd9\x1c\x4c\xb0\x44\x96\x50\x80\x23\xd5\x50\x1c\x28\x09\x35\x69\x25\x95\xff\xc8\xed\xc2\x35\xb4\x86\xf8\xf7\xb7\xed\x88\xf7\xb3\x38\xab\x18\x58\x32\x94\xdb\x4b\x4f\x23\xaf\x3d\x58\xe7\x61\x62\x80\x1a\xbe\xe0\xc5\xe0\x1a\xd8\x89\x7a\x97\x35\x3b\x06\x13\x27\xe5\x5c\xac\x99\x24\xf2\x77\xe5\x0c\x93\xfd\x3f\x26\x86\x92\xa7\x68\x7c\x0b\x6e\x39\x69\xc0\xb9\x0a\x08\x0e\x7c\x70\xf2\x69\xc3\x57\xc6\x87\x89\x4a\x94\x65\x1e\x18\x5f\x78\x70\x6c\x66\x4a\x25\x2b\x1a\x10\x36\x54\xf0\x46\x56\x5c\x12\xde\x98\x02\x57\x18\xa1\x38\x50\x1e\x90\x0f\xd1\xae\xf7\x4b\x3f\x20\xa0\x6d\x8b\x15\x0d\xb0\x12\x14\x5a\x7f\x48\xb0\x3f\x30\xe2\x31\xe2\x36\x23\x4d\x53\xff\xcd\x08\x7c\xc2\x50\x1c\x48\x0c\x03\x33\x25\x82\x65\x4e\xa2\x69\x46\x18\xcc\x28\xed\x8a\x71\x03\x3b\x77\x6e\xe6\x08\x10\xf5\x18\xc3\xd5\xc7\xd0\xcb\xd5\xa2\x80\xd7\xbc\xa1\x38\x90\x18\x94\x88\x31\xef\x0d\x22\x6e\x0e\x6f\x72\x64\x72\x86\xfe\x23\xfd\xd0\xc7\x8b\x51\xa0\xb1\xa5\x17\xbe\xca\xa2\x5b\x9b\x93\xc0\x08\xdc\xfb\x81\xe2\x40\x49\xa8\xa0\x26\xfe\xb2\x4f\x81\x99\x3d\xd9\x8c\xc0\xdd\xff\xb3\x3d\x9a\xc3\xdc\xfd\xe5\xe8\xf8\xf9\xe9\xab\xa7\x0b\x75\xfd\xef\x09\x8a\x60\x62\x80\x9a\x58\xc0\x8b\x21\xb6\x02\x5d\x71\xc7\x9d\xb3\xce\x4e\xa4\x6c\xf8\x65\x48\x55\xf2\xc6\x7c\xee\x52\xc0\x46\x6f\x44\xe3\x1a\xc3\x03\xae\xce\x76\xe0\x41\x7e\x28\x0e\x24\x86\x03\x62\xa7\xe9\xbd\x90\x93\xe9\xc1\x43\xa9\x96\x11\x95\xe3\xc1\xe9\x56\x96\x6a\x47\xba\xca\x28\x8a\x3b\x5d\x3d\xaf\x39\x75\x7c\x81\xcd\x11\x08\x0e\x94\x07\x1a\xc1\x29\xa1\xa4\xd3\x12\x49\x5b\x6e\xbe\x81\x13\x4e\xae\xec\x55\x94\x51\x36\xc9\x71\x3f\x29\x74\xee\x78\xfd\xb8\x54\x2b\xc0\x42\x86\xe2\x40\x62\x40\xfe\xc2\xbb\xbc\x9e\xa4\x7a\x4f\x7e\xee\x6e\x0b\x62\x42\x65\x0c\x57\xeb\x7d\xe4\x16\x06\xc4\xa6\x93\xa2\x17\x3e\xf9\x9f\xf7\x81\xc3\xb9\x50\x1c\x48\x0c\xee\xf9\x8d\x68\xad\xdc\x1f\x42\x24\xfa\xf5\x87\xed\xee\x48\xe0\xca\xe9\x3c\x69\x8e\xec\x67\xe9\x7c\x28\x2f\xc8\x30\x4b\x88\xb1\x04\x0b\x0b\xc5\x81\x92\x80\x86\xfb\xec\x03\xe1\xb6\x43\x38\xab\x13\xa7\x91\xf1\x23\xac\x71\x41\x2f\xf3\x93\xba\x65\xc4\xb0\x56\x3d\x12\x43\x1d\xa2\x6b\x67\x98\x18\xa0\xa6\x7c\xf0\x62\xe8\x70\x1b\x0f\x35\x65\x95\x27\x35\xfa\x81\x2e\x9d\x90\xac\x88\x9a\xd5\x6e\x2e\xda\x52\xaa\xb7\x41\x34\x80\x7a\xa7\x86\x5a\x16\xf8\x28\xa0\x38\x90\x18\x48\x6d\x48\x51\x1f\x59\xf7\xe4\x60\x52\x6e\x3a\x67\x67\xa0\xf7\x65\x47\xf9\xb5\xf7\xa1\xf0\xb7\xa0\x10\x7a\x30\x52\x67\xba\x62\xc0\xc2\x42\x71\xa0\x3c\x20\x4a\xf6\x5a\x48\x64\x12\x37\x08\x53\x6f\xc5\x74\xd4\xd7\xda\x17\xf2\x3b\xae\xfc\x4e\x74\xd1\xb5\x5a\x68\x70\x56\x1a\x16\xb9\x84\x85\x85\xe2\x40\x62\xc0\x7d\xe0\xa4\x88\x48\xab\x8c\xc5\x84\xc1\xee\x10\x62\xcf\x6a\xfb\x3a\xe9\x12\x7d\x2c\x75\x9b\xa9\xef\x7a\xe6\xe3\x6c\x8a\x02\x50\xcb\x1c\x8a\x03\x89\xc1\x53\x8e\x51\xbc\xf9\x6f\x41\x63\x02\x7d\xbc\x16\x0d\xe7\x5b\x9c\x5f\x2f\xbd\x11\x3d\x7e\x13\xe4\xf0\xcf\x5b\xd4\x65\x32\xe3\x03\x27\x05\xa1\x38\x50\x12\x4e\xb5\x0d\xd7\x9a\x5d\x9a\xe8\xa6\x13\xa2\x03\xfe\xb2\x9b\x85\x9a\x45\xdc\x3c\x9e\xde\xeb\x4d\x7c\xf1\x6b\xfe\xdd\x9f\x53\x62\x7d\x98\x18\xa0\x26\xe3\xf0\x62\xa0\x64\x37\xef\x8d\xb4\x20\xfc\xd4\xf6\x61\x26\x36\x94\xd7\x53\xfd\xa2\xa4\xe3\xb4\x44\x18\xbf\x27\x7e\x38\xe2\x5e\x78\x73\x27\x70\xaa\x0f\x8a\x03\x89\x81\xcf\xce\x25\xfb\x43\xfd\x11\x7a\xf9\xde\x58\x44\x3d\x4e\x42\x4d\xc4\x9b\x0c\x6b\xcd\x0d\x87\xcd\x67\xdc\x2e\x71\x76\x8c\x07\xc0\x19\x44\x28\x0e\x94\x87\x1f\x83\x33\x41\xcf\x2e\xb2\x24\x90\x86\x3f\x3e\x3a\xa4\x5e\x78\x77\x62\x53\x5d\x4c\x88\xea\x1b\xfe\x2f\xc7\x8e\x0c\xdb\x9e\x18\x70\x0d\xa1\x38\x90\x18\x7e\x69\x63\x7e\x34\xf8\x70\x69\x7d\x9f\xd9\x93\x3c\x5b\xec\x97\xbb\xbe\x7e\x2c\x39\xa6\xf6\x61\x78\x65\x72\x7c\x46\xfe\x17\x0e\x3e\x58\x58\x28\x0e\x24\x86\x65\xca\x4d\x4a\x27\x67\xc1\x9f\xdc\xca\xea\x83\xf9\x04\x1c\x1c\xeb\x2b\xec\x24\x0e\xc7\x7c\xe5\xdd\x98\x3d\x65\x5a\x0f\x99\x80\xb3\x1a\x50\x1c\x28\x09\x71\x6c\x77\xa8\xfa\xdf\x2b\xeb\xa2\x2d\xbf\x7d\xeb\xf3\xa8\xd6\x50\x59\xf6\x59\xb8\xa3\x87\xc2\x5f\x02\xd3\x0f\x3d\xde\x3d\x93\x28\x80\x19\x09\xb1\x4c\x82\x17\xc3\x78\x3c\x15\x9d\xd1\xe3\xa1\x4c\xb9\xfb\x2c\x39\x3e\x6a\x0d\xf5\xf4\x29\x11\xc5\x58\x87\x0f\x2c\x08\x7c\x7e\x2b\x7c\x4f\xaa\x07\xde\x9b\x81\xe2\x40\x62\xb0\x29\xed\xd8\x21\xa9\x55\x13\xb7\x7e\x83\xee\x13\x40\x92\x29\x78\x33\xdc\xff\xfe\xf4\x2b\x6f\x26\xcf\xf6\x41\xd0\x1b\xc6\x18\xe0\x19\x40\x28\x0e\xfc\xe8\x8e\xc7\xe3\x6e\xff\xb3\x8b\x5a\x84\xa7\x89\xae\x86\x67\xc2\x3d\xf3\xeb\x16\x74\x47\x54\x82\x44\xdc\x9f\xd2\x2c\xfc\x0e\xeb\x81\x1a\xc0\x50\x1c\x48\x0c\x82\x65\x8d\x8e\x41\x27\x2d\x96\xf1\x3d\x13\x52\x7f\xb2\x13\x1e\xea\x63\xad\x23\xc6\x0f\x70\x0a\xd9\x4e\xda\x46\x84\xd1\x50\x03\xd3\x5d\x28\x0e\x24\x86\x44\xc5\x1e\xfa\x00\x61\x17\xad\xe5\x1b\xc4\x40\x7e\x22\x49\x13\x8a\x1f\x74\xd8\xc5\x92\xe4\x95\x76\x7e\x3f\x37\x09\xbf\xf3\xc7\xc2\xc2\x42\x71\xa0\x24\xbc\x2d\xde\xa3\x99\xb7\x66\x52\x28\x1e\x69\x33\x4b\xd8\x68\x74\xc0\xfa\x7b\xaa\x4d\x2c\xa9\xd2\x97\xec\x90\xd4\x86\x9b\xde\x00\xbc\xb3\x02\xb5\x80\x85\x17\x03\x87\x90\xd6\x25\xd1\x98\xe1\xf5\x2b\x96\x44\xde\xef\x8c\x8d\xe7\xdb\xea\x3f\x39\xd4\x78\x8e\x42\x12\x7c\x0e\x29\x25\xc3\xd6\x80\x7a\xae\x50\x1c\x48\x0c\xbb\x54\xca\x74\xaa\x01\x6c\xda\xeb\xf8\x44\x1a\xa9\x2d\x96\xdf\x84\x25\x66\x3e\x36\xe5\x9e\x8b\x1d\x21\x7f\xac\x15\x4e\xf8\x08\x14\x16\x81\xe2\x40\x79\xc8\x18\x21\x67\x7c\x18\xc5\xad\x4d\x25\xe7\xcf\x5f\xd4\xda\x25\x31\x31\x8a\x76\xb8\xf8\xca\x9f\x97\xc8\x51\xb2\x4c\xfe\xe8\x13\x0e\x2c\x2c\x14\x07\x12\x83\xbb\xcb\x37\xce\x75\x1e\x99\x68\x4a\xda\xad\xba\x97\xf5\x92\x68\xa5\x49\xdf\xff\xb2\x84\x74\x38\xdc\x08\xd4\x61\xaa\x39\xbf\x04\x4e\x71\x41\x71\x20\x31\x38\x9c\x79\xd2\x60\x86\x6c\x53\x97\xc8\xe4\xa4\x30\xf0\x4c\xf1\x54\x87\xa9\x6f\xa4\xc8\x5e\xed\x55\x93\x67\x18\x90\xaa\x25\xca\xc0\xc2\x42\x71\xa0\x24\x54\xbe\x78\xf9\x67\xbb\xb4\xe2\x97\xad\x8c\x1e\xe7\x8d\xb8\x65\xdc\xb5\x49\x6a\x8e\xd7\x0f\x24\x1b\x5e\xfb\x02\xfc\x57\x72\x58\xfc\x80\x33\x0d\xb5\xa7\x08\xab\x33\x0d\xe7\x4c\xb7\x0b\x85\x79\x62\x5e\xdd\x6b\x98\xb0\x7b\xf4\x42\x8a\xf9\x84\x73\xe1\xd9\x47\xbe\x0c\x16\x9c\xaa\x83\xe4\x09\x3a\xcc\x84\x05\xaf\xdb\x6f\xbd\xc0\x39\xd3\x72\x08\x51\x6f\x3d\x4c\x55\x92\xdd\xdb\x9f\x0e\xad\x37\x8a\xcc\x16\x86\x44\x05\x67\x2e\x34\xe9\x48\xc5\x3f\x98\xbb\x48\xa9\xbe\xfd\x0b\x79\x2d\x70\xce\xf4\x7e\x1b\x91\x2b\x67\x7c\xf7\xe1\x9c\x64\xe9\x5d\x5f\x8a\xbf\xee\xac\xd4\x03\x55\xa4\xb4\xfd\x3e\xb3\x59\x47\x8e\xe4\xe5\x8c\x1c\xff\x9b\xdd\x1e\xa8\x5c\xc2\x7f\x92\x4b\xcb\xce\x77\x7e\xdd\x94\x3b\x09\xbc\xb6\x44\x39\x21\xb9\xbb\xc3\x62\xac\xf3\x54\x4d\x22\xa3\x99\x54\xba\xdc\x48\xdf\x56\x0f\x38\x27\x01\xc5\x81\x3e\xc9\xad\x9a\xba\x21\x32\xdf\xae\x79\xbd\x2f\xed\x02\xf2\x77\xcb\x8f\x35\x22\x10\xed\xdc\x46\x9e\x44\x67\x24\x38\x68\x4a\x90\x33\x02\x2f\x4b\x41\x71\x20\x35\x76\xae\x38\xd6\x3e\xef\x37\x7d\x17\xd4\x35\xc0\x31\xff\xad\x21\x33\xeb\x82\xf5\xd5\x34\xf1\xe2\x84\xd9\x6a\x5c\x6b\x2e\x52\x1f\x70\x85\x11\x8a\x03\x7d\x92\xad\x8d\xd3\xee\x3c\x36\xdf\xb4\x8e\x26\x9c\x73\xfb\x6c\xfb\xc9\x75\x5b\x26\x54\xd4\x23\x5f\x7e\x42\x9b\xe6\xc1\xbc\xf6\xe8\x92\x80\x85\x85\xe2\x40\x9f\x24\xab\x28\xe3\x1d\x5f\x59\x82\x48\x59\x05\xfc\x67\x6f\xed\xd4\x79\x24\x63\x56\x47\xb0\x3e\x3b\xb4\xe8\x0b\xbc\xef\xa2\x7f\x7a\x36\x0e\x9c\x36\x86\xe0\x40\x49\x10\x29\x76\x46\x2f\x7d\x1e\x29\xee\xb1\xf2\xef\xf2\xed\x77\xd3\xd8\xfe\xd4\x0f\x65\x8b\x88\xf2\x1f\x2d\x6d\x8e\x04\xd6\xe9\x7a\xd3\x60\xff\x67\x28\x95\xc3\x8b\xe1\xeb\x67\x39\xdf\xde\x87\x41\xc9\xea\x73\x4f\x09\xe5\x42\xcd\xb4\x94\x64\xa7\xc8\xf2\xb2\xe3\x05\xea\xe6\xb9\x44\x8b\x86\x1c\x81\x5a\xc8\x50\x1c\x48\x0c\x56\xbc\x67\xde\xf2\x5e\x2c\x02\xf6\x34\xcd\xbe\x0f\xfc\x44\x6c\x2d\xca\x44\x90\x09\xbe\x63\x5e\xf0\x98\x2b\x91\x34\x3d\x67\x04\x4e\xb4\x43\x71\xa0\x3c\x58\x8d\xf5\x72\x3d\xad\x37\x25\x64\xf1\x27\xa4\x62\x4e\x14\x78\xf8\xf0\xf0\xed\x9e\x5e\xbf\x7a\x50\x77\x2b\x3e\x1e\x41\xe1\x0d\x36\x10\x16\x82\x03\x89\x61\xfe\x75\x8b\x2e\x97\xe5\xa7\xec\xfb\xab\x75\xa6\x0c\x47\xbf\x19\xa5\x2d\x49\xd4\x69\x19\x09\xb0\xc4\x70\x34\xe8\x0f\x5c\x71\xde\xc0\xc2\x42\x71\x20\x31\xf4\xa1\x32\xe4\xb6\xb1\x44\x6f\x3e\x71\x52\xad\x48\xd6\xd8\x52\x37\x8a\x37\xa9\xeb\x53\xc2\x45\x3c\x23\x6e\x08\xd9\x72\x47\x00\x9e\xca\x80\xe2\x40\x49\x08\x30\x9a\x35\x78\xcf\xce\xf6\x4d\xee\x69\x51\x3c\x4b\xee\x1c\x22\x4a\xea\x1e\x29\xf5\x77\x04\x5e\xa3\xe0\x92\xdc\xa2\xb3\x55\x22\xe0\x1e\x02\xc4\xff\x07\x5e\x0c\x7b\xbb\xff\xc8\xde\x61\x6b\xf5\x91\x8a\x0c\x0d\x91\xcd\xa2\xb5\x6e\x48\x86\x5c\x61\x36\x56\xf9\x1c\x79\x0d\xdb\xc7\xeb\x24\x01\x6f\xce\x41\x71\x20\x31\xbc\x32\x34\x54\x37\x21\x32\x14\x13\x34\x2e\xa3\xfb\xf1\x44\xba\x43\x23\x47\xbc\x33\x31\xb1\x56\xf3\xf1\x43\x27\x3a\x7d\x7e\x0a\xc0\x99\x86\xe2\x40\x79\x78\xca\x70\xd9\xb5\xe9\x8f\x2b\xf5\xc4\xf2\xc3\x26\x12\xdd\x3f\xfd\xbd\x0b\x8b\x38\x9b\x18\x9d\x24\xcb\xc0\x16\x42\x75\xcf\x1f\xc0\xbd\x7c\x28\x0e\x24\x86\x37\x99\xac\x4b\xe6\x9f\x78\xca\xc7\x68\xe9\x5e\x11\xd5\xa4\x11\x53\x28\xaf\x6b\x3f\x38\x15\x43\x0e\x61\xb3\x6b\xb2\xa4\xf2\x05\x4a\xc5\x43\x71\x20\x31\x04\xa2\x75\x7c\x1e\x44\x1f\xad\xf0\x22\x5d\x5a\xbb\x7e\x4b\x66\x91\x17\xe2\xbe\x43\xae\x7e\x47\x57\xaa\x31\x93\x45\x3b\x9f\x18\x58\x81\x42\x71\xa0\x24\x84\xd2\x35\xd0\xe7\xa6\x77\xa1\x28\x5a\x49\x72\x17\x0e\xd9\x29\xfe\x7d\xa9\xdd\x3a\x21\xef\x14\x69\x54\x64\x15\xf2\xb4\x94\x5c\x12\x26\x06\x28\x2f\x12\x5e\x0c\x0c\x43\x1a\xdc\x7c\x06\x14\xb8\x33\xa9\xba\x18\xc1\x14\x3d\x77\xb8\x55\x1c\x8a\xd5\x6b\x2f\xb6\x54\xd7\xc7\xc3\x8e\x46\x32\x23\x60\x1d\x86\xe2\xc0\x15\xe8\xcd\x26\xe5\x93\x99\xe6\x76\xc5\xbf\x7b\x8d\x04\xac\x5c\x86\xd9\xed\x04\x3b\x26\x8c\x3d\x91\xbc\xa7\xbc\xeb\x89\xa3\x8e\x08\x0c\x13\x50\x1c\x28\x0f\x8b\x22\xd4\x82\x6a\x9e\xd7\x41\x5f\x0f\xb6\xc4\x12\x09\x9d\xe5\x7a\x65\x15\xd8\xe8\x31\xe5\x04\xa5\xf0\x46\xef\x4f\x9b\x49\x00\x65\x14\xa0\x38\x90\x18\xe8\xba\x08\xaa\x1f\xf7\x99\xd2\xf8\x38\x14\xdd\x94\xd4\xd5\xde\xf8\xbe\x92\xbd\x1b\x21\x3e\x73\xb3\x41\x13\x55\xea\x61\x7b\x04\x48\x17\x8a\x03\x89\x81\x8f\xb7\x2a\x13\x53\x3a\x4e\xa4\x27\xcd\x77\xf8\x46\x59\x4d\x25\x3d\x38\x44\x0a\x03\x85\xe0\x79\x74\x85\xd7\x4f\x19\x5a\x9a\xdf\x80\x33\x6d\x17\xa1\x46\x88\x13\xd5\xe4\x32\xb9\xdd\xda\x40\x8e\x51\x11\x35\xf1\x8e\xd7\x58\xc8\xff\xee\x71\x7f\xa6\x72\x74\x89\x27\xb2\xf8\x7f\x9d\x69\x9d\x77\xe6\xee\x42\x2a\x2f\xc3\x3d\x5f\x3f\x92\x68\x97\x9b\x4c\x45\x9d\x45\x0f\xf0\xf6\xfc\x4b\xe9\xc7\xe3\xe5\x9e\x8a\x66\x5b\xfb\x1f\xd4\x80\xaf\x5e\xeb\xdf\x4d\xb1\xc3\x08\x2e\xda\xc1\x8b\x47\xb8\x5a\xb5\x13\xee\x4e\x94\xf4\xab\x6c\x98\xa6\xba\x33\x6d\x0e\xd1\xe0\x3b\xd3\x50\x91\xe1\x9d\xe9\x93\xd7\x53\x08\xb5\x33\x6a\x83\xad\x93\x98\xc9\xeb\x73\x94\xac\x32\x23\x8d\x4c\x58\x95\x14\x73\xee\xbe\x3b\xe3\xca\x25\xb9\xf8\xff\xdd\x43\xc1\xbc\x93\x17\xf9\x6e\x3f\xfe\x20\x3e\x18\x8d\x00\x63\x1c\xe3\xd7\xf6\x0a\x25\xfa\x46\x5e\x86\x5f\x4b\xc7\x23\xaf\x1c\xba\x77\xbe\x6d\x68\xff\xff\xc5\x84\xd5\x99\x96\x04\xcd\xc3\xd6\x4d\xb4\x2a\xb2\x5d\x8b\x68\x12\xbc\x57\x06\x2a\x46\x31\xef\xf1\x0b\x07\x8b\xad\xf7\x20\x54\x31\x5d\xd0\x9f\xe7\x8b\xa3\xc9\xdd\x7a\xea\x87\xc0\x09\x9e\xfa\x9d\x17\x10\x60\xe1\x24\x38\x74\xeb\xa4\x77\xb3\x2b\xb5\x08\x57\xb6\xd0\x1d\x09\xe9\xb6\x05\xbe\x12\xc3\x68\x43\xa3\xdc\x31\x5a\xbb\x7d\x93\x42\xe0\x26\xd9\x03\xbc\x93\x04\xdd\xde\x0f\x5e\xe9\x88\x3b\x73\x92\xe1\x05\x74\x53\x3e\xf4\x7e\xe0\x81\x7b\x8d\x83\x7f\xdf\x8a\xff\x17\xb1\xd4\xed\x9b\xd4\x06\x37\xe9\x72\xc2\xc2\x7b\xaf\xbc\x47\xf0\x85\xa8\xe1\x9c\xe9\xb3\x9f\x85\xc1\xeb\x7f\x73\xde\x30\xeb\x2a\xe7\xe3\x66\x95\x14\x7f\x50\xc0\xba\x7d\x93\x4e\xe0\x26\xbd\x2a\x9d\x57\x9e\x66\x44\xcd\x07\xae\xaf\x1f\x4d\x18\x0f\xc9\xec\x74\x13\xd8\x3f\x44\xeb\x58\x21\x18\xc4\xe5\xd2\x45\x17\xc3\xb8\x7d\x93\x51\xe0\x26\xef\xae\x77\x55\x62\xf7\x4c\xad\x3b\x12\x8f\x97\x8e\x6b\xc5\x15\xbe\xb5\x8b\x25\xd1\xf0\x7c\x80\x8d\x86\x5b\x22\xcb\xce\xc6\x79\xdb\xa2\x3c\x21\x92\x08\xa9\xe0\x26\xa9\x9a\xe4\xbf\x33\xcd\xfc\xf1\xd0\x92\xd4\xb0\x44\x9e\x23\xea\xcf\x43\x0a\x51\xf5\x25\xc0\x7c\xeb\xfd\xec\xec\x29\xcb\x60\x51\xe6\xed\x9b\xac\x05\x37\xa9\xb6\x8d\x12\x1d\xfb\xd6\x61\x6b\x6b\xf9\x41\xfd\x6e\xb8\x0d\xba\x99\x81\x7b\x46\xb6\x48\x04\x2a\x82\x92\x74\x60\x24\x45\x5b\xdb\xff\x66\xb1\x02\xf5\x29\xc2\x8f\x42\x31\xa3\xa2\x1f\x89\x9d\x3f\x7d\xad\x6f\x7f\x7e\x92\xfe\x79\x90\xbc\x27\xb3\xfd\x65\xbb\xd6\x20\x72\xc3\x0f\x4e\x8d\xc0\xd7\x1e\xf1\xb0\x1f\x30\x14\x07\x1a\x85\x32\xd3\x90\x7f\x2d\x0c\x9c\xf8\xe8\x48\x35\xa3\xda\xe2\xfe\x48\x4b\x4d\xe2\x70\x18\xce\x52\x7b\x3b\x3b\xe4\xac\xb3\x26\x38\x1c\x09\x0b\x0b\xc5\x81\x46\xa1\xde\xad\x2b\x4a\x81\xb7\x73\x54\xc7\x4c\x7f\xde\xb0\x0f\xd9\xc6\xcf\xc7\xad\xe3\x61\xfb\x0f\xdb\xd8\x44\xb6\x36\x74\xb1\xdc\x05\x8e\xd1\x42\x71\xa0\x51\x08\x5d\x8e\x63\x25\x9b\xb9\x8a\x40\xc4\x94\x79\xad\xd4\xc7\x71\xf4\x2b\x8f\x30\x11\x1e\xa2\x39\x37\xd6\xa7\x68\x54\xfd\xfc\x44\xe0\xa5\x3c\x28\x0e\x74\xec\xaa\xba\xaa\xbb\x69\xd3\xfb\xaf\xf4\x1f\x3d\x83\xbe\xde\x1a\x8d\x3b\xda\x6a\x3e\x84\x5a\x5d\xf7\xf9\x56\x1f\x36\xf0\x44\xb2\x2f\x7a\xc0\xc2\x42\x71\xa0\xde\x9a\x8c\x86\x90\xf8\xdd\xff\x91\x57\x38\xc3\xb7\x23\xd0\x63\xc4\x10\x24\xe6\x3a\x75\x91\x92\x1b\xc9\x88\x51\x69\x5c\xed\xef\x1e\x0d\x4c\x49\x20\x7e\x92\xf0\x62\xc8\x7c\xbc\x35\x25\x10\x46\xb5\x5a\xde\xfb\x82\xf8\x18\xd1\xd2\x53\xa3\xc8\x3c\x39\x88\xf2\x99\xdd\x4d\xdd\x91\xf7\xa6\x46\x3f\x30\x35\x83\xe2\x40\x62\x70\xcc\x4a\xd1\xf2\x36\xe6\x4f\x28\xf2\x3b\xb8\x92\xda\x61\xec\xfe\xa6\x66\x9a\x63\xea\x6f\xeb\xcb\x26\xbd\x43\x86\x4a\xe9\x08\xd4\x08\x82\xe2\x40\x62\x38\xa8\x7f\xf9\x63\x55\x73\x67\x94\x8d\x55\x50\x4d\xb2\xfe\xe2\xab\xbe\xef\x64\xd1\x66\xf5\x49\x93\x25\xc6\xd5\x31\xea\x37\x61\xe0\xe5\x53\x28\x0e\x94\x5e\x7b\xec\x07\x03\x19\xda\x9d\x3a\x33\xb6\x0a\x1c\xf6\x11\x85\xc2\xee\x94\xe7\x3a\x59\xf5\x1a\x29\x71\xc5\x35\xc6\x36\xb4\x5c\xc0\xe5\x14\x28\x0e\x24\x06\x49\xe9\xf2\x33\x06\x06\x4c\xbb\xd7\xee\x2e\x1c\x9b\xe3\x4f\xa7\x73\x0a\xa2\xde\x08\x18\x9c\xcb\xd7\x21\xad\x5a\x60\x89\xcd\x01\x8b\x15\x28\x0e\xd4\xdb\xe3\xd9\x22\xc4\xe4\xe5\x2c\xeb\x68\x72\x95\x1e\xdd\xcc\xe3\x22\xed\x8b\xb2\xd7\xcf\x52\x7b\x76\x3d\x97\xdf\xfd\x8d\xd6\x68\x5e\x87\x89\x01\x6a\xf8\x82\x17\xc3\x3b\x11\x04\xe4\x42\xa5\x7e\xb1\xf5\x7f\x6b\x58\x2b\xda\x63\x5c\x2d\xf6\xd4\x58\xf9\x45\xfc\xf4\xa1\xaf\xaa\x99\x30\x7e\x8e\x03\xb7\xbc\xa1\x38\xb0\xe7\x70\xe7\x2b\xbf\xef\xea\x3d\xd7\xac\xcd\x8f\x0e\x14\x65\x04\x14\x4e\x9f\xce\x38\xb9\x50\xbd\x73\xb8\xbe\xf5\x44\x27\x9b\x14\x94\x03\x9e\x03\x04\x07\x12\x83\x18\x87\xb9\xfe\x23\xa1\x98\x98\xea\xf8\x17\xcf\xd9\x35\xa7\x62\x7e\x85\x88\xd6\x94\x60\xc4\x35\x3b\xaf\x7f\x54\xb4\x0a\x78\xf9\x0c\x16\x16\x8a\x03\xa5\x77\xae\x73\x71\xac\xbd\xcd\x2d\xe4\xb7\x4e\x30\xbf\xa0\x83\x3f\x82\x3f\xc3\x03\x2c\x87\xe4\xb6\x07\x5d\x24\xf9\xee\x87\x76\x63\xc0\xaa\x02\x8a\x03\x89\x81\x6b\x92\x5f\x6f\x4a\xe6\x3d\xc1\x10\x09\x5f\x3e\xf5\x73\x81\x40\xd9\x08\xf3\xfb\x42\x81\x01\x3e\x49\xc4\x18\x1d\x13\x98\x5a\xc0\x17\x01\xc5\x81\x7a\x8b\xfd\xfc\x85\x1f\x42\x03\x01\xfb\xbb\xda\x64\xf7\xf7\x7c\xdd\x6a\x2f\xb6\x3c\xaa\x2a\xb9\xd2\x52\xe5\x4d\x75\x78\xc9\x7f\x70\x00\x25\xe8\xa1\x26\x16\xf0\x62\x78\x31\xd9\xe9\x3d\xde\xdd\x65\xab\xfe\xf9\x47\x56\xdb\x6c\x9f\x3a\xf7\xba\x5d\xc9\xc2\x9a\xf1\x97\xef\x1d\x77\x19\x66\xe4\xae\x89\x60\x1d\x86\xe2\xc0\xe5\x64\xb5\x10\x24\xb5\x86\x6a\x69\x75\x0a\xde\xd3\xa0\x7f\xf3\x39\x58\x2b\x0e\x49\x6a\xe1\x1e\x49\x74\x4f\xa6\x65\xad\xff\xec\x07\x3c\xf0\x04\xc5\x81\xc4\x20\x43\x96\x8a\xf6\x6f\xfe\x6c\x78\x2c\x25\xee\xe9\x18\x49\xda\x7c\x9b\x3c\x8b\x35\x63\x70\xf4\x57\x89\x88\x39\x51\xb4\x9f\x46\xc0\x2e\x3e\x14\x07\x4a\xaf\x8f\xda\x36\x0f\xfb\x85\xa3\x29\x2b\x7e\x6a\xa4\x95\xf2\xd3\xaf\xb5\xbb\x2f\xf0\xe3\x2f\x5e\xe7\x33\x3a\x53\x93\x22\x32\x34\x5a\x01\x07\xcb\x21\x38\x90\x18\xd2\x68\xb7\xf3\xb7\x3e\x9e\x66\x73\x6d\x60\x8b\xd4\xdf\x27\xb7\xc7\xd5\x7e\xd4\xc5\xf3\x5b\x04\x7f\xa4\xeb\x1d\x3f\x1a\x35\x03\xe0\xf4\x42\x71\xa0\xde\xb2\xfa\x4d\x48\x8b\x84\x2e\x32\xb2\x71\xd5\x71\x7d\xe7\xfb\x19\xe6\xe6\xbc\x53\xcc\xec\xf5\xf7\xc1\x51\x58\xdd\x8b\x75\x34\xd7\xbf\x30\x31\x40\x4d\xf9\xe0\xc5\x60\xd6\xee\x4d\xa4\x84\x5d\x3d\xdc\xa5\xe1\xda\xa1\x9f\xbd\x46\x7f\xda\xed\x50\x9f\x32\xc5\x72\x76\x71\xef\xc4\xa1\xf7\xcb\x67\xe0\x96\x37\x14\x07\x12\x83\x08\xcb\xbb\x4b\x1e\x3c\x87\x66\x62\xa4\xb4\x19\xa5\x31\x43\xc4\x04\x8d\xf7\xe4\x0d\xee\x97\x7e\xf6\x0f\xce\x12\x19\x2e\xb3\x85\x61\x61\xa1\x38\x90\x18\x56\x49\x35\xb5\x0c\x71\x73\x1b\x8d\x99\x24\xed\x50\x12\xb4\x91\x26\x14\x17\x59\xa9\xc8\x65\x9b\xfd\x28\x78\x98\x46\x5b\xad\x17\x60\x61\xa1\x38\x70\x7a\x1b\x7c\xda\xaa\x3a\xdb\x64\x82\x8a\x59\x91\xfb\x9c\x4d\xa3\xa2\x06\xe4\xec\xb3\x10\x94\xee\x8f\x64\x47\x44\x7f\x67\x35\x2b\x03\x76\x22\x21\x38\x90\x18\xa6\x98\xe9\x47\x1a\x7b\x29\x5f\x7e\x7a\xbe\x28\x37\xa6\xd0\xaf\xf5\x26\x97\x33\x9c\x94\x3f\x37\x28\xa3\xfa\xfe\xf5\x76\x53\x0e\x50\x16\x1b\x8a\x03\xf5\x76\xd9\xc0\x5d\x51\xaa\xc4\x42\xfb\x77\x8a\xb7\xf4\x8a\xe2\x48\x7f\x7d\x2d\x82\xf9\x57\xbf\x93\xae\xab\x14\x96\x3e\x66\x49\x0b\xc0\x9a\x86\x9a\x8c\xff\x1f\x7f\x06\xfd\x35\x0b\x26\xd2\x9b\xc3\xbe\xb3\xd9\x3d\xe9\x1b\x77\xac\x93\x58\x97\xb2\x2b\xea\x2d\x84\x1a\x76\x77\xeb\x2b\x96\x6e\xe0\x0f\x09\xc5\x81\xc4\xf0\x27\x5f\x0b\x43\xc7\xd2\xa4\xea\xf8\xc1\x9f\x72\xbb\x37\x29\x51\x6e\x7c\xec\x3b\x48\x19\xc2\x0a\x09\x95\x04\xb8\xb5\x4d\x97\xc0\x39\x05\x28\x0e\x24\x86\x05\x0a\x03\x43\x1c\xe6\x0d\x77\xed\xfb\xbf\x09\x54\x38\x08\xbd\xb7\x7e\x9c\x69\x7f\xbf\xf0\x21\xa3\x6a\x44\x4d\x34\x52\xe5\x06\x26\x90\x50\x1c\x28\xbd\x5f\xd5\xdf\x7c\x11\x23\xbd\x2b\xb7\xa2\xb0\x11\xfe\x9c\x63\x94\x36\xf0\x9a\xe7\x1f\xfe\x5e\x6a\x99\x0f\x9f\x58\x5f\x7e\xd7\x5f\x40\x0c\x50\x1c\x48\x0c\x7e\xb1\xd8\xe5\x93\x02\x36\x49\x16\x16\xd7\x7d\xa7\xa8\xae\x3f\x66\xf4\xdc\x18\x34\x5a\x09\x7e\x4b\xa4\xe8\x72\x16\x3f\x4f\x05\xcc\x3d\x28\x0e\xd4\x5b\x63\x61\xae\x6f\xd3\x05\x4a\x6b\x7f\x68\xb4\xa8\x43\xcc\x15\xfb\xf7\xed\xfc\xe9\x94\x22\xb2\x64\x7d\x62\x55\xb8\x82\xc7\xaa\xe2\x61\x62\x80\x5a\x26\xc1\x8b\xa1\x9b\xa1\x39\x30\x05\x7b\x8f\xa9\xdb\x2a\x51\xc6\xc0\x87\x40\xb0\x43\xdb\xff\x7a\x6b\x3b\x3f\xc9\x5d\x58\xfe\x57\x3f\x4b\x0b\x70\x57\x08\x8a\x03\x89\x81\x2d\xc8\xa8\x3f\xd0\xf8\xb7\xc9\x4f\x8a\x70\x3a\xcf\x84\x20\x7c\x94\x84\xd3\x15\x07\x2e\xbb\x56\x44\x19\xdd\x15\xa1\x50\x0f\xc0\x4c\x80\xe2\x40\x62\x60\x22\xb4\x39\x23\x79\x3f\x98\xf4\xbd\xd2\xe7\x4d\xa7\xca\x98\x3a\x1b\xcf\xac\xc0\x87\x87\x85\x92\x8e\x3c\xd2\x01\x72\x7c\xbf\x80\xa9\x08\x14\x07\x4a\x6f\xc6\x85\xd3\xb8\x52\xed\x46\x53\x43\x3f\xa5\x8b\x8b\xfe\x3f\x6f\x1b\x4a\x8d\xb1\x73\xff\x9f\xc9\x92\x99\x62\x42\xef\x05\x98\x81\xbd\x79\x28\x0e\x24\x86\x9f\x0f\x13\x4f\x0f\xb4\x7a\xd1\xc4\x39\xd3\x43\x56\xdc\xeb\x04\x2d\x8a\xae\x53\x72\xa8\xd8\xd4\x52\x54\xa9\xba\xeb\xad\x79\xd6\x60\x61\xa1\x38\x50\x6f\x11\x4e\xee\xb7\x6f\xb9\xee\x3c\x69\x11\x10\xa0\x95\x60\x61\x41\xca\xc3\xce\x2c\xc0\x77\x7f\x94\x43\x98\xb4\xca\xf8\x53\xf1\xf2\x39\x4c\x0c\x50\x0b\x58\x78\x31\xb8\x07\x5d\x7d\xd8\xd7\x37\x57\x6e\xb9\x0a\xd1\xfc\xad\x40\xd6\xc3\xa0\x77\xfd\x94\x18\x81\xc2\xd3\x8e\xf3\x97\xb1\xd8\xe7\xcb\x27\x80\x2b\x0b\xc1\x81\xc4\xc0\xb1\xe3\x39\x1e\x8c\x69\xe9\x6b\x28\xde\xaa\x18\x23\x50\x20\xfb\xe4\x71\xb2\xf6\xc7\xf5\x42\x57\x03\x73\xae\xe3\xd3\xb8\xff\x57\xcc\x1c\x8a\x03\x89\xc1\x30\x45\x96\xe5\xd9\xfd\xf1\x4b\xa1\x55\xd7\xe0\xb4\xaf\xe5\x9f\x3c\xd9\x48\xd7\x03\xf9\x18\xe7\xf1\x95\x50\xb5\xed\xf7\xde\x01\x0b\x61\x28\x0e\x94\xde\x03\x81\x05\x9c\x1e\x55\x73\xb2\x2c\xa9\x20\x6f\xaa\xee\x79\x4f\xbe\xd2\x8a\xc4\xee\x75\xc3\x75\x42\x0f\x81\xc3\x62\x81\x3f\xc0\x11\x1b\x28\x0e\x24\x06\xfb\x00\xf2\xbd\xd7\x17\x2e\x8f\x08\xf5\xe5\xdf\xa2\xd0\xa1\x89\x7a\x60\xfe\x51\x4d\x30\x6b\xc5\x94\x24\xfb\x83\x97\xcf\xde\x0b\xd4\x83\x81\xe2\x40\xbd\xad\xc5\x70\xfb\xba\xcb\xd3\xce\xf4\x60\x88\x5f\xd8\xcb\x98\xa3\x15\x87\x6e\xd7\x0a\xf3\xfb\x9a\xdc\xfd\x7b\x9a\xd7\x81\x6b\x8b\xf6\x80\x35\x0d\xb5\xa9\x08\x2b\x34\x3d\x0a\xde\x07\x51\x44\x0a\x26\x6d\x43\xd5\x76\x4f\xdc\x7e\x7c\xaf\x08\x51\xcf\xd4\x4f\x3b\x93\xb6\x73\x27\xe2\xe5\x70\x67\xb7\x5d\xfd\x0a\xfa\xd5\xed\xb7\x5e\x76\xe1\x36\x98\xb6\xad\x6a\x5b\xbf\x11\x05\x1a\x04\x27\x7d\xae\xfc\xcb\x9c\xaf\xaf\x2f\x94\x5f\xe5\xaf\x8f\x99\x36\x58\x43\x1d\xfb\xd1\x43\xe2\xf6\x4d\x5e\x82\x9b\xcc\x16\x16\xae\xb2\xac\xf0\x29\xa5\x0c\x2b\xc2\xe4\x7c\xa1\x8a\x5f\xcb\x31\x8c\xe7\x14\x61\x50\xd2\xea\x79\x46\x7e\xa5\xea\x93\xf0\xbf\xd9\xed\x81\xca\x25\xfc\x27\xc9\x5b\x9e\xb5\xe7\x99\x75\xff\xa4\xa4\x99\x8d\x65\x4d\xc3\xc8\xa0\x2f\x2d\xc9\x73\xa4\xe9\x5d\xa8\xe5\x99\x52\x6b\x57\x54\x1e\xe0\x46\x42\x71\xe0\x42\xd3\xd3\x33\x8e\x4e\x22\x3d\xe1\x47\x59\xfd\xc3\x2e\x13\x54\x95\xe7\x06\x4b\x63\xdd\x49\x14\xec\x9a\x24\x62\xb1\xc2\x3e\x2a\x40\x61\x52\x28\x0e\xf4\x49\x7e\x69\x6b\xe3\x51\xd6\x9c\x37\xbf\x31\x1f\x3e\x2c\xdc\x21\x79\xec\xd5\xb3\xcc\x19\x96\xf4\xc7\xf2\xa3\x44\x79\xa2\x83\x97\x25\xb0\x12\x87\xe2\x40\x22\xf7\xe0\xf6\xf0\x56\x0f\xd3\x25\x9c\xe3\x3f\x3a\x59\x94\x3d\x99\xd5\x64\x4e\xa6\xd6\x7a\xba\xd4\x14\xb2\x97\xaa\x90\x38\x61\x00\x94\x5b\x80\xe2\x40\x9f\x24\x3d\xff\xc9\x57\xcc\x55\xaa\xca\x80\x92\xb7\x29\xb3\xe5\x85\xcc\xf9\xcf\x0f\xa7\x37\xc3\x30\xde\x60\xd3\x67\x2c\x70\xe3\x60\x01\x35\xe1\xa0\x38\x50\x6f\xc3\xbf\xbd\x26\x0d\x45\x60\x1b\xd0\x8c\x56\x9e\xab\x23\xa2\xe9\x6c\x48\x3a\x7a\xa3\x39\x66\xbd\xa1\xb9\x3f\xbb\xcb\x91\x5d\x46\x0f\xcc\xdc\x20\x54\x0e\x2f\x86\x8c\xec\xe9\xe5\x1e\xcd\xfd\x29\xb7\xc7\x66\xf3\xbf\x50\xfa\xde\xc8\xde\xf7\x37\x72\x52\xa8\xed\x21\xfd\x91\x1b\x2d\xe9\xf3\x12\x38\x7b\x0e\xc5\x81\xc4\x60\xf1\xd7\x67\xa1\x31\x5b\x38\x3a\xf2\xc7\xdb\xbe\x0e\x7f\xf6\xc1\x30\x16\xf9\x09\xdd\x79\x8f\xaf\x63\xb1\xa9\xfc\x77\x0e\xe8\x8f\x60\x61\xa1\x38\x90\x18\x9a\xab\xbc\x7f\x08\xf5\xcf\x21\x7c\x68\x9a\x7c\x44\x28\x8c\x2f\xe4\x40\x92\x46\x68\x28\x4e\x36\x59\xe1\x18\x90\x72\x75\x47\x2d\x1c\x16\x16\x8a\x03\xa5\x57\x85\x55\x6c\xa2\x29\xdc\x6b\x7f\xc4\x65\x0b\xc5\x45\xc0\xba\x21\xfd\x28\xea\x75\xc7\x83\x54\xf3\xf7\xdb\x64\xae\xee\x31\xec\x8b\xb0\xb0\x50\x1c\x48\x0c\xab\x26\x1f\x6c\x94\xa9\x46\x9c\xd5\x3f\x7e\xb1\x68\xdf\x0d\x27\x62\xc2\x13\x14\x5b\x1b\xd7\xdc\x73\xb5\xf6\x66\x30\xc8\x79\x55\x04\x2c\x3a\x20\x38\x50\x6f\x27\xba\x13\xbb\x0f\x62\x7f\x35\x8e\xf8\x9f\xf4\x5b\x1e\x04\x73\x1f\x78\x5d\x27\xf7\xcf\x51\x13\xb4\x75\x1b\xbd\x98\xfb\xe9\xfc\x1b\x26\x06\xa8\xff\x0f\xbc\x18\xd4\xa8\x1a\x93\x99\xe3\x9c\x1d\xab\xec\xbf\x1b\x50\xf5\x50\x7c\x66\x23\x5b\x91\xd8\xe9\x3a\x11\xc2\xca\x6c\x38\x7e\xeb\xdc\x97\x08\xeb\x30\x14\x07\x7e\x2a\xb0\x66\xfe\x1d\x4d\xcd\xf7\x97\xf9\xdb\xf7\x10\x53\x6a\x74\xf9\xc9\xf7\x70\x11\x77\xea\x5f\xf2\x7b\xe0\x91\xa4\x6a\x7e\x9d\x02\x5e\xe4\x87\xe2\x40\x62\x68\x0f\x51\x89\x74\x8c\xa5\x96\xb6\xd4\x8c\x27\xf2\x40\x9e\x16\x44\x40\xc5\x46\x1b\x6c\xf1\xa6\xc2\xd9\x7d\xdc\x94\xba\x25\x0c\xdc\xa1\x81\xe2\x40\xe9\xe5\xc9\xfb\x92\x25\x2d\xf0\xc4\xc2\x24\xe6\xc7\x56\x6c\xec\x88\x24\xad\xd1\x5b\x1c\x39\x85\x7c\x57\x3a\x1e\x8e\x17\xdc\xd2\xef\x1d\x60\x61\xa1\x38\x90\x18\x26\x2d\x75\xab\x5b\x0f\xdc\x35\x59\xa3\x19\x06\x08\xb2\xf7\x67\x82\xfa\x74\xd6\xb3\xd8\x0b\x6a\xc7\xc7\x15\x47\x7b\x2f\x51\x72\x61\x61\xa1\x38\x50\x6f\x45\x9a\x22\xab\x44\x17\x66\x07\xbb\x1c\x5e\xd6\x68\xbb\x85\x9b\x53\x27\xc4\xeb\x1c\x8d\x2a\x27\xd5\x30\x54\x3c\x7e\x5d\x5e\x7a\x0d\x13\x03\x94\x19\x09\x2f\x86\x30\xf9\xa5\x9b\x67\x15\xf2\xb3\xf8\x3a\x9a\x53\x12\xa4\x03\x44\x41\x8f\x51\xd5\x6f\x54\x5f\x31\x4c\x6d\xff\x38\x0a\x37\x5b\x01\xe6\x42\x50\x1c\xb8\x92\x9f\x4e\x50\x56\xf2\xa2\xf0\xd1\x5a\x51\xea\xb6\xb3\xb1\x53\x78\x36\x9e\x9c\x65\x73\xec\x38\x65\xef\x53\xca\x7b\x3b\xf6\xec\xc0\xe2\x0b\x8a\x03\x89\xa1\xec\x9f\x8b\x4a\xad\xb5\x15\x46\x86\xc3\x94\xeb\xfe\x31\x83\x56\x86\x94\x8f\xf0\xea\x61\x34\x31\x16\xde\x12\x61\xf4\xfd\xff\xf7\x40\x2b\x14\x07\x4a\xaf\x63\xde\x34\x56\x79\x95\x11\xdd\x1d\x2a\xa2\xbf\xa4\x87\x4b\xd7\xdf\x11\xe7\xab\xdb\x15\xc7\xf4\x6d\xba\xfb\x7c\x3f\x3a\xe5\x02\x9f\x30\x14\x07\x12\x83\x96\xf2\xee\x67\x71\xdf\x70\xf9\xc5\x67\x15\xf4\xb1\x0c\x3f\x59\x7d\x8f\x57\x9a\x4a\xd4\xce\xca\x84\x0f\x92\x86\x4a\x5f\x4c\x3c\x02\xac\xe9\x82\xa0\x5d\xb2\xb2\xd8\x36\xc1\xe8\xc1\xc2\xc5\xb0\x5a\xe5\x2c\x99\x25\x1e\x3c\xfd\xdf\x02\xd7\xdd\x48\xc1\xe8\x6a\xa1\x33\x5d\xff\xb5\xa6\xab\x79\x8d\x9a\x6c\x56\x44\xef\x2e\xdb\xc4\x5f\xb1\x55\xce\xbc\x8a\x3b\xc5\x7d\x21\xc7\x6a\x60\x96\x69\x3d\x77\xfc\x41\x62\xf0\xee\x7f\x50\x89\x79\xc4\xdf\x93\x53\x14\xda\x08\xe5\xf3\xce\xab\xd9\xae\x34\x1f\x53\x7b\x16\xf0\x52\x10\xbe\x35\x6d\x2b\x5c\x9c\x7c\xe2\x47\x00\x59\xd3\x50\x91\xe1\xad\xe9\x7f\x85\x2d\xf9\xf8\x1f\xfd\xd1\xd9\xd1\x4b\x67\xff\xcd\xf7\x3f\xd1\xa4\xd8\x7f\x8c\xbe\xda\x71\x57\x49\xce\x3d\xb4\x52\xbb\x60\xfe\x3f\xa8\x5e\xa4\x5c\x2d\x85\x80\xe5\x03\x7f\x55\xd5\x14\x77\x3b\x71\x2d\x7d\xc1\x07\x37\x77\x4b\x73\x78\xd2\xe3\x64\x0b\x71\x96\xcb\x6a\x01\x6b\x1a\x2a\x26\xac\xd0\x34\xd8\x9a\xd6\x5c\x6a\x99\xe6\x41\xd3\xd3\x66\x4f\xed\xbf\xa7\x1b\x48\x3e\xb7\x45\x14\x6a\x40\xf9\x41\x1a\xff\x2a\x95\xd4\x7f\x20\x86\xf0\xf4\xd6\x53\x3f\x31\x38\x6b\x9a\xf3\x5a\xd2\xb6\x6c\xa0\xd2\x91\x0c\x29\x7e\xb5\x21\xe1\x29\x8e\xed\x45\xeb\xa6\x8b\xe1\x10\x12\x47\x33\xd7\x85\xd5\xa5\x4e\xc8\xed\x9b\x84\xb3\xa6\x23\x59\x57\x19\x74\xee\x0b\x2d\xc8\x2c\xdc\xa7\x72\xeb\xbc\x1c\xeb\x56\x70\xc2\xd3\x76\xca\x8e\xa3\x50\x1f\x62\xe2\x54\x7f\x5a\x7c\xfb\x26\xe1\xac\x69\xbd\x48\x27\x9c\xa0\xac\xa0\x4f\x8f\x9e\x65\x94\x23\xcf\x93\x52\xa5\x13\x7f\xe7\x71\x12\x0b\x5e\xd7\x89\xbb\xda\x34\x6a\x14\x64\xbc\x7d\x93\x70\xd6\xb4\x45\xc8\xea\x17\xc4\xea\x6f\x54\xb3\x98\x21\x8b\x5f\x9c\xaf\xff\x74\xad\xd3\x09\xb0\xb5\x7b\x1f\x75\x45\x85\x91\xed\x4d\xf2\xd5\xdd\xbe\x49\x38\x6b\x7a\xba\x0b\x43\xf4\x0b\x7a\xec\xba\xf7\x2f\xe9\x43\x63\xaf\x18\x7e\x26\xe7\xbf\x5e\x21\xb2\x5f\x77\xd3\x90\x0e\x9a\xa9\x39\x17\x6f\x5d\xa7\x5c\x52\x0c\xce\x9a\x26\xb8\xc2\xbd\xc0\x0a\xb9\xbf\x6b\x2a\x14\x89\x74\x67\x71\x78\x38\x2a\x28\xcf\x5c\x57\x92\xf0\x95\x5f\x5a\xd2\x87\xc4\x23\xce\x6f\xb7\x6f\x12\xce\x9a\xb6\xb6\xeb\x9f\x89\x61\x44\x63\xd5\xf9\x62\x69\x4f\xdc\xac\x7c\xfe\xc2\x93\x9e\x7d\xc1\xef\xb3\x7b\xbd\x6a\xd2\x31\x33\xbb\xa5\xc1\xff\x66\xb1\x02\xf5\x29\xc2\x8f\x42\x73\x2d\x5e\x2e\xd1\xc9\x7a\xef\xce\x4c\x67\x25\x6e\xfa\x66\xf8\xf0\x1b\xdb\x3b\x7a\xaa\xba\x4d\xbf\x65\x35\x3b\x15\xad\x07\x01\x27\x53\xa1\x38\xf0\x75\x38\x12\x43\xee\x6e\x45\xaf\x8c\xa2\xc3\xea\xda\x57\x72\x1e\xeb\xd6\x21\xff\x5e\x1a\x0d\x3a\x7c\x8d\x2e\x32\xa3\xa1\x59\x5e\x07\x76\x16\xa1\x38\xd0\x28\xf4\xfe\x29\x23\x67\xdf\x3f\x6b\x27\x12\xa3\x85\xcc\xfd\xf4\x35\xff\x6c\xe2\x1e\xf7\x6e\x53\x95\xd6\x76\x5e\x39\xae\x01\x23\x7a\xe0\x2d\x37\x28\x0e\x34\x0a\xf9\xeb\x20\x8f\x39\xed\x62\x8f\x17\x69\x8c\xcb\xca\x7e\xc4\x46\x2a\x5a\xbd\xcc\x54\xf9\xc8\x2f\x8f\x4b\xda\xf3\xdd\x55\xd5\x15\xb0\x64\xa1\x38\x50\xd8\x92\x0f\x3b\x77\xcc\x91\xe5\x57\x82\x55\xa6\x70\x5c\x89\x9d\x17\x36\xf5\xd1\x39\xfd\x6c\x32\x03\x19\x52\x16\x25\x06\x57\x95\x81\xca\xa4\x50\x1c\x28\xec\x77\xed\x35\x03\xd1\xb6\xa8\x06\xae\xbd\xe4\xd0\x7f\x41\x8d\xac\x29\xc7\xbd\x3d\x83\x3f\x2e\x0b\x3f\xf7\x3d\xc6\x4c\xa6\x19\xaa\x84\x4d\x49\xa0\x7e\x92\xf0\x62\x88\x70\xe1\x4e\x7e\xee\xb9\xb8\xfa\xd7\xda\xb1\xaf\x6b\xf2\xce\x74\x8e\x7d\xee\xf6\xf5\x93\x8f\x6d\x8b\x8d\x71\x7a\x8b\xea\x86\x40\x79\x47\x28\x0e\xfc\xa8\x4f\x32\xba\x95\x96\xb5\xcf\xe6\xd9\xeb\x3f\x5e\x3d\x12\x35\xb6\x21\x2b\x88\xa4\xdd\xa4\x9f\xe8\x8a\xe4\x38\xd0\x2a\x10\x0c\x6a\x61\x61\xa1\x38\x90\x18\x46\x29\x38\x6a\xad\xe3\x7c\x58\x95\x6e\xc6\x26\xec\x3f\xfe\x94\xe6\xfd\xfa\xb5\x83\x2a\x46\x73\x8f\x63\xad\x9b\x5d\xbe\xfb\x31\x50\xa6\x16\x8a\x03\xa5\x37\x4f\xab\xe9\xef\xf7\xcd\xb0\xe6\x24\x81\xfd\x8c\xfa\xa4\x54\x7a\xcd\x7b\x1a\x52\x3f\xfa\x99\xb4\x18\x25\x71\x71\xc4\x63\xc5\x36\x61\x61\xa1\x38\x50\x58\x55\x3e\x2b\xde\xc5\xf3\xa7\x5d\x29\x5c\xd7\xa6\xa2\x75\x1d\xfb\xe3\x1a\x2e\x7b\xf6\xdf\xa4\xb0\x51\x37\x25\x5f\x7c\xdb\xee\x11\x81\x85\x85\xe2\x40\x61\x9b\xd1\x84\xff\xe8\x7e\xb0\x9f\xfd\x50\xdc\x44\xd5\x5a\x60\x7f\x47\x46\x2a\x08\xd7\x98\x4c\x3c\xe7\x27\x43\x6b\xc2\x0b\xb7\xc0\x4e\x98\x18\xa0\x86\x2f\x78\x31\xfc\xc8\xda\xfc\x71\x64\xb3\xab\x4a\x9f\x99\x9d\xff\xa8\xd4\xc5\x52\x2e\x55\xfa\x81\xf4\x0b\xc1\x19\x2f\x3e\xba\xac\xc8\xe6\x4b\xa0\x3e\x0e\x14\x07\xbe\x35\x1d\xff\x6b\xc9\xae\x2f\xc9\x03\xa1\xa4\x82\x8a\x38\x61\xc3\x91\x8f\x49\x0c\xdd\xde\xa7\x61\xb4\x17\x93\x7a\xf9\x92\xd3\x1c\x38\x5c\x0e\xc5\x81\xc4\xd0\x31\x2f\x9e\xfc\x6d\x6e\xd9\x46\x67\x9c\xcd\xfe\x7c\x5f\x30\x4c\x19\x61\xa7\x39\x3f\xe5\x2d\xc5\x0f\xfe\x9d\x29\xad\x31\x2a\x42\xe0\x26\x27\x04\x07\x4a\xef\x47\x52\xa4\xe7\xc7\xf1\x48\xb6\xe4\x7b\x4f\x77\x64\x42\x12\x9e\xfe\x29\xa9\x16\x3b\xad\x16\x0d\x49\x54\x5b\x4e\xfd\xa5\x91\x04\x3c\xea\x03\xc5\x81\xc2\x16\x49\x09\xcd\xbc\x0d\x74\xa4\x5d\x4d\x8d\x64\x72\x12\x78\x13\x8b\x7a\x4a\x17\x21\xfb\xb4\x96\x9f\x28\x3d\xfe\x81\xf9\xc5\x87\xf7\xb0\xb0\x50\x1c\x28\x6c\x0b\xd9\xb9\x4f\xd0\x31\xad\x7a\xac\xbb\x04\xd5\x52\x03\x5d\xcc\xc8\x1b\x1b\xde\xf9\x67\x6c\x45\x43\x95\x5e\x73\x5e\x03\xe2\x86\x30\x31\x40\x4d\x2c\xe0\xc5\x10\x5f\x60\x39\xe6\x76\x47\x36\xc2\x58\x3e\xfe\x4d\xcc\x84\x3f\xaa\x83\xfc\x36\xf3\x28\xca\xa9\xb4\xb5\xb2\xb9\xbd\x93\xfc\x2c\xb0\xaa\x80\xe2\x40\x62\xd0\x7e\xfb\x3d\xdb\xdb\x29\x29\x37\x57\x68\xfb\x26\x62\x80\xdf\x7b\xbe\xcc\x54\xec\xec\xd9\x33\xed\x55\xe4\xbb\xaf\x09\xcc\xc8\x80\xe3\xb9\x50\x1c\x48\x0c\x29\x84\x3f\x4c\xac\x14\x27\x43\x8e\x91\x33\x17\xf5\x45\x5e\xb5\x85\x3b\xf3\x6a\x7e\x09\xfd\x3e\xb6\x8a\xbb\xc3\x53\x95\x69\x10\x03\x0b\x0b\xc5\x81\xd2\x4b\x9d\xcc\xb0\x1d\x2e\x67\x6f\xac\xec\x13\x58\xe9\x7a\x8e\x97\x95\x8c\xf6\xb2\x60\xb3\x33\x58\x3b\x8b\x9e\x2d\xc7\x80\x3b\x05\x38\x6a\x04\xc5\x81\xc2\x6a\xd3\x93\x69\xaa\xfd\xd9\x42\x12\xa8\xb9\x1b\x3f\x56\xb4\x41\x71\xe7\xc1\x1b\x7d\x83\x16\xa2\x57\xd4\xae\x23\x65\xbf\x8f\xa4\x81\x83\x51\x50\x1c\x28\x2c\xed\x8e\x10\x75\x67\x22\x8f\xbe\x3b\xe5\x3b\xc9\x47\x61\xfa\x85\x71\x68\x44\x89\x66\x74\xd3\x86\xe6\xf6\x08\xbf\xfb\x31\x14\x69\x60\x62\x80\x9a\xf2\xc1\x8b\x81\x2b\xb1\xdc\xfd\x0e\xad\xb5\x6b\xe6\x1f\x97\xac\x8f\xc4\x9c\x4a\x11\x26\xec\x89\xbe\x2d\x88\x8b\x9e\x95\xb3\x17\x2c\x23\xaf\x1e\x02\x07\x2b\x20\x38\x90\x18\x5c\x1c\x5e\xbd\x20\x99\xc5\x6e\x97\xe1\x4d\x76\x11\xb5\xa6\x27\x77\xbc\xef\x7a\xca\xa9\x3e\xfb\xe8\x9b\xb4\xb9\x1b\x36\x97\x25\xb0\x3b\x02\xc5\x81\xc4\xe0\x5a\x31\x1c\x70\x65\x75\xb4\x55\xba\xb5\xf0\xc8\x38\x93\xd7\xeb\xd3\x6a\xe6\xfb\x77\xfd\x0f\x5d\x1f\xa7\xbd\x97\xd2\x60\x76\x00\x4e\xc9\x41\x71\xa0\xf4\xaa\x19\x44\xc5\x04\x31\x49\xa0\x7f\x0c\x23\x90\xd7\x3c\x98\xb5\xd7\x74\x32\xb0\xfe\xde\xba\x12\x50\xfd\xc4\x04\xf7\xb4\x62\x68\x1b\xd8\xcb\x81\xe0\x40\x61\x3f\x8b\x0c\x49\x3e\x9f\x19\x9c\x4f\xfc\x83\x63\x71\xaf\x9b\xdc\xbe\xe0\xd3\x3f\x09\xc9\xdd\x8f\xc3\x8e\xe1\xf2\xf9\x6f\x6a\x8c\x74\x61\x61\xa1\x38\x50\xd8\xca\xc2\x18\x15\x5b\x26\x85\x82\x45\x2d\x92\x25\x54\x01\x8e\xa4\x67\x2d\x21\xc9\x4c\xde\x9d\x82\x1d\xb9\x66\xca\x3a\xa4\xaf\xa5\x60\x62\x80\x9a\x8c\xff\x1f\xb7\xa6\x79\x53\x1d\xe3\x5e\x84\x19\x69\xa7\x79\xd4\xb3\x14\x8a\x35\x5c\xdb\xd4\xb3\x2e\x0f\x8a\x12\xa3\x1f\x62\xbd\x9a\xe6\xf9\x09\x88\x01\x8a\x03\x89\x41\xb6\xd0\xe3\xbc\x2d\x5e\x32\x3b\x61\xad\x3f\x64\x32\xce\x13\xbb\xd7\x10\x79\xa7\x56\x75\xe1\x70\xf7\xe5\x8a\x7e\xe4\xcb\x4b\xa0\x0c\x22\x14\x07\x9e\x40\xa2\xd5\xb5\x3f\xfc\x45\x16\x4d\x25\x84\x18\xda\xe2\x8a\x89\x63\xa5\x19\xe4\xc1\xa0\xb4\xeb\xbe\x6d\x15\xfa\x97\x7b\x00\x17\xb8\xc4\x08\xc5\x81\xd2\x4b\x8a\xe7\xfa\x6d\xd3\x31\x75\x44\x4a\x47\xc5\xd0\xee\xd1\x60\xda\xf4\xaa\x80\x03\x4d\x53\x09\x85\xf9\x2a\xa5\xcc\x71\x76\x24\xf0\xa4\x1c\x14\x07\x0a\x9b\x64\x36\x84\x33\xd5\xd5\xbf\xd8\xdc\x76\x95\xf2\xaf\x98\x77\xaa\xf7\x26\x19\x41\xf4\x64\x83\xcd\xcf\x61\xef\xde\xcd\x07\x31\x60\x97\x17\x8a\x03\x85\x35\x4b\x56\x12\x7d\xf5\xb5\x69\x3b\xe4\x6b\x99\xbf\x10\xfe\x95\x77\xd4\xc3\x6e\x65\x51\xf1\x81\x1e\x84\xd5\x5f\x43\x95\x6d\x4c\xc7\x30\x31\x40\x2d\x93\xe0\xc5\xa0\x4d\x91\xa1\x51\xdb\x77\x2f\x61\xc5\x33\x7f\x25\x6e\xbb\x6a\xb9\x78\x2b\xec\xfc\x7d\xfe\x03\x83\x04\x86\x61\xa6\x96\xf6\x16\x6f\xe0\x57\x06\xc1\x81\xc4\xe0\x10\x10\x91\xf5\xb1\x20\x33\x94\x05\x4b\x1e\xdf\xe2\xf1\xf4\x91\xe0\x83\xec\x04\xbc\x51\x13\x7d\xe2\x25\x32\x85\xef\x82\xef\x81\x29\x19\x14\x07\x12\x83\xba\x5e\x1c\x4e\x6f\xd9\x7b\xb9\x95\xbd\x4d\x25\xeb\xa9\xec\xe7\xa7\x63\x44\x0c\x07\x8a\x75\xdd\xbd\x3b\x77\x72\x05\x3e\xf6\x01\xe9\x85\xe2\xc0\x7f\x86\x41\x8e\xf8\xba\xc7\x0d\x1b\xb6\x5b\xc6\xc5\x96\x7e\x85\x0f\x2d\x48\x96\xbc\x37\x9b\x8d\xf6\x86\x34\x06\x76\xd7\x70\x2c\x80\xde\x42\x71\xa0\xb0\xf4\xb9\x92\x57\x58\x89\x66\xc4\x9e\xd7\x8a\x1f\xd7\x89\x25\x44\xa9\x7e\xec\x6b\x7a\xa6\x1a\x7d\xd4\xe5\x7b\x37\x6b\xb9\xfe\x09\x98\x8a\x40\x71\xa0\xb0\x7c\x4e\xbf\xe8\xae\x2e\x8a\xd9\xae\x86\x99\xde\x23\x47\xf3\xe0\x88\xfc\x48\x90\x76\x8b\xad\xfe\x2a\x5e\x83\x81\xe8\xa3\x99\x81\x0e\x13\x03\xd4\x02\x16\x5e\x0c\x13\x69\xe9\x29\x93\xbe\x13\xbf\x3a\x57\x89\x7e\x04\xdc\x15\xdf\xff\x39\x8c\x88\x8a\x7e\xf9\x93\x88\x33\x80\xe4\xd1\x00\xa2\x19\x70\xfe\x0e\x8a\x03\x89\xa1\xa2\xc2\x31\x4e\xc4\x54\x6e\xd8\x8c\x43\x35\xb6\xc2\xba\xb8\x6a\xa2\x69\x87\xd3\x8d\xe3\x99\x91\x6d\x26\x15\xf6\x13\x77\x5e\x04\x58\x58\x28\x0e\x24\x06\xd5\x5f\x19\x66\xed\x1b\xc1\x8c\x39\xde\x05\x4b\xcc\x7f\x54\xb7\xaf\x3f\x2e\xcc\x48\xcd\x2c\x36\x1d\x0e\x8c\xb6\xca\xca\x3f\x00\x7e\x38\x50\x1c\x28\xbd\x84\x9f\x0d\x33\xf4\xe6\x1e\xb9\x9a\xff\x55\x5c\xaf\x10\x6a\xb2\x55\x5a\x09\x93\x5a\x64\xc1\x94\x64\x66\x4d\x6b\x6b\xd7\xe0\x03\x4e\x55\x40\x71\xa0\xb0\x4d\x66\xba\x26\xee\x8b\xdb\x31\x1c\x07\x5c\xdf\xa2\x05\x0d\xa9\x18\x4f\x1b\xe3\xb6\x6d\xe4\xcd\xe8\xbe\xa9\xea\x8e\xdd\xc7\x02\x4e\x87\x41\x71\xa0\xb0\x18\xe9\x35\x03\xcd\x4d\xd9\xc7\x4a\xb3\x7c\x8f\x6c\xca\x0b\x0b\x2a\x4b\x07\x30\x4f\x9f\xfb\x64\x0e\x35\x24\x51\x27\x4d\xae\x60\x00\xd6\x34\xd4\xa6\x22\xac\xd2\x34\x9c\x35\x5d\x33\xd3\x56\xdb\xdb\xf5\xfc\xa2\x2e\xa7\x05\xa9\x57\x55\xac\xf4\x97\x3b\x67\xf9\x73\x5a\xe3\xee\x0c\x7b\x42\x7e\xe3\x38\x62\x8a\xdb\x6f\xbd\xc0\x59\xd3\x9c\x17\x28\xe9\xcc\x49\x7e\x7f\x6e\x98\x7d\x8d\xb0\x5d\x7b\xd8\xed\x0d\xf5\xfc\x2e\x17\x05\x18\x9e\x97\x7b\x9d\x92\x2a\x59\xd0\xdc\xbe\x49\x38\x6b\x3a\x5c\xb5\x94\x09\x9d\x73\x01\xcb\xf1\x4b\x91\xa0\xf1\xa7\x33\x31\xf6\xc2\x94\x56\x95\xfe\x7f\x84\xc3\x9f\xb6\xa5\x45\x51\xdf\x10\xff\x6f\x76\x7b\xa0\x72\xf9\x7f\x14\xec\xaa\xd4\xc1\x49\x3d\x41\x37\x7d\x1a\xe2\xc0\x5b\x7d\x55\xed\x67\xc7\xb5\x1c\xd4\xfd\x19\x69\xc9\x3c\x01\xdd\x4c\xeb\xc4\x0a\x78\xb0\x16\x8a\x03\x4f\xe3\xbf\x0c\x12\x6d\xb4\xa6\x44\xc8\xd5\x4d\xaf\xf3\xba\xdb\xbb\x75\x93\xe8\x94\xdf\x59\x33\xe4\x3c\x41\xbf\xb6\xec\x65\xfb\x01\x2c\xf0\xa1\x38\xd0\x27\xc9\x89\x54\x69\x9b\x2d\xde\xa4\xa4\x4f\xba\x9b\xf0\x30\xbb\x34\xb3\xfc\x69\xd2\xef\x17\x22\x74\x71\xda\xc2\x45\x86\x94\xdf\xcc\x81\x6d\x19\x28\x0e\x24\x72\xce\x85\xe2\xc6\x29\xbc\xb5\x53\xfc\x88\x52\xac\xb8\xd9\xbe\xbf\x2b\x85\x89\x4b\x34\xc6\x89\x72\x3f\x04\x9d\xf1\xfd\x4a\xeb\x74\x80\xb0\x10\x1c\xf8\x78\x5a\xec\x78\xd7\x5e\x2e\x3d\x31\x83\xd3\x09\xae\xdb\x2c\xcf\x98\xcb\xe8\xa8\x8a\x5b\x14\x37\x4b\x9f\x11\xb2\xfa\xdf\x14\x37\x60\x05\x0a\xc5\x81\xc2\x72\x4d\x06\x8f\xdb\xb9\x2d\x3f\x0e\x6c\xab\xdb\x31\x71\x52\xfc\x86\xc1\xff\x6e\x19\x6b\xda\x4c\x7b\x2d\xb7\x79\x2a\xd0\x51\xb2\x0d\xd8\xed\x81\x50\x39\xbc\x18\xa4\x09\xf7\x3f\xbf\x9c\x75\x57\xa4\xf3\x5b\x1a\xcf\xfb\x87\x38\xd0\x76\xb0\x64\x29\xda\x53\x72\xfe\x6a\x75\x05\x89\xbc\x77\x10\x28\x2e\x0c\xc5\x81\xc4\xa0\x69\xfb\xf6\xea\x11\xce\xf1\xc8\xb3\x8e\xb9\x97\x29\xc5\xef\x3e\xf7\x75\xaf\xba\x56\x60\x3d\x0f\xb3\xdf\x27\x22\xe0\x72\x0f\xff\x0c\x0b\x0b\xc5\x81\xc4\xb0\x97\xe5\x64\x23\xb0\xc2\x1a\xac\x94\x72\x76\x8a\xfc\x77\x36\x07\xe9\x49\xb2\x66\xb4\x31\xd1\xc2\xa7\xb6\xd9\x22\xdd\x16\xaf\x16\xe0\x5a\x2f\x04\x07\x4a\x6f\x45\x41\x29\x96\x78\xe1\x50\xd1\x70\x78\x55\x16\x4b\x11\xc9\x0a\xa7\xd6\xf6\xc8\x53\x45\x6b\xab\xeb\x20\x0d\xfa\xa1\x48\xe6\x0c\x60\x34\x81\xe0\x40\x61\x65\x07\x6c\xe9\x0d\x57\x14\xf6\x16\x31\xc5\x31\x45\x98\xea\xad\x3d\xa2\xea\xd5\x2a\x52\xd1\x5c\xaa\x4b\xc9\x48\xf3\xfa\x4f\x80\x53\xcc\x50\x1c\x28\xec\x1f\xdc\xc8\xa4\xc7\xd5\xe2\x06\x61\x53\x1d\x42\x69\xd6\xc4\x8a\x84\x33\xba\x09\xc6\xaa\xcb\xd9\x32\xfe\xcc\x0b\xa2\x75\xcf\x56\x60\x62\x80\xfa\xff\xc0\x8b\x81\xdf\xcc\x33\x98\x54\x81\xa7\xe2\x42\x65\x2c\xeb\x97\xf3\x27\x6f\x1e\x27\x73\xd4\x55\xd7\xa1\x06\x74\x81\xf1\x2f\x9c\x1c\x37\x7d\xb0\x0e\x43\x71\xe0\x07\x13\xe5\x59\x93\x2e\xb2\x11\x2a\xb8\x11\x52\xc5\x5f\x5e\x14\x25\xbc\xdf\xc0\x1e\xee\xb9\xab\xe4\x19\x61\x33\x2b\x1c\x43\x98\x05\x9c\xd7\x80\xe2\xc0\x67\xcf\xdf\xab\xb0\x0b\x3d\xf9\xdc\xce\xda\x36\xd5\xf5\x28\x6d\x48\xc8\x59\xd8\xc8\xd6\xf1\x2c\x4d\x65\x16\xd7\xd9\x2b\x3c\x40\x08\x28\xbe\x01\xc5\x81\xd2\xfb\x72\x47\x57\xd0\x75\x31\x2a\x24\xcf\x73\xfe\xbe\x2b\xd9\x64\x6f\xbb\xe2\xd3\xaf\xd8\x09\xa2\x41\x5d\x21\x0c\x6a\x16\x2f\x17\x26\x61\x61\xa1\x38\x50\xd8\xf3\xce\x97\x27\xf4\x8f\xaa\x7f\xfb\x69\xf1\xce\xae\xcd\xcd\x6a\xfe\x75\xf7\xeb\x5d\x7c\xef\xad\xf7\x31\x71\x9c\x8b\x3e\xe9\x05\x3d\x2c\x2c\x14\x07\x0a\xcb\x5b\x8f\x67\xf2\x78\x8a\x67\xab\x99\xb1\xd7\xbc\xd4\x6a\x4d\x65\x64\x83\x3d\x55\x72\xa5\xf8\xb8\x3b\xa1\xd0\xf1\x2f\xd5\xba\x10\x4c\x0c\x50\x66\x24\xbc\x18\x72\xe9\x63\x87\x6c\xbb\x17\x48\x67\x3a\x83\x5a\x1c\xde\x9b\x52\x8c\xad\x2c\xf5\x78\x9e\xbf\x69\x25\xbd\xd7\xb0\x1c\xdc\x4b\x0e\xdc\xf3\x80\xe2\x40\x62\xb8\x34\x3b\x11\x7d\x2d\x10\x95\xb4\x8b\xc0\x5d\x8b\x88\x8b\x42\x76\xfd\x51\x70\xc7\xfc\xbe\x42\x64\x65\xde\x7d\xf9\x45\x25\x3b\x60\xf7\x1e\x8a\x03\x57\x6f\x2b\xf8\x64\x81\x10\x24\x8b\xde\xf2\x12\x23\x5b\xcb\x75\xc4\x06\x55\xab\xa4\xbb\x35\xde\xd2\x62\xd0\x68\xff\x5b\x5f\xeb\x12\xf0\xf0\x2b\x14\x07\x4a\xef\x14\xc9\x89\xc7\xa7\xc2\x8a\xb0\xd1\x87\x81\x89\x5f\x03\x3b\x4e\x1f\xe1\xd6\x8a\x33\x5b\xba\x64\x71\xfb\xbf\xc0\x34\x6b\x56\x3c\x05\x0e\x89\x43\x70\xa0\xb0\x48\x08\x59\xab\xaf\x38\x0a\x6c\x33\x35\x82\xf5\x43\x56\xab\xd9\x4c\x97\x70\xa5\xdd\xca\xb8\x67\xa9\x47\xe5\x2d\x38\x53\xe8\x5e\x02\xd6\xb4\xbf\x12\xb3\x45\x4d\x98\x47\xce\xa2\x9e\x0a\x4f\x96\xd1\x6f\x87\x6c\x94\xb1\x61\x86\xbd\x22\x66\xc5\x95\xd7\x37\x9f\x71\x9f\x4d\xfe\xd7\x9a\xbe\x40\xfb\x83\xdc\x7d\x96\x11\x38\x9a\x49\x10\xeb\x34\xb1\x1e\x86\x76\xc8\xb0\x98\xb6\x89\x15\xbe\xb6\x65\x72\xb0\xb3\xab\x4f\xfe\x1f\xd4\x86\xa3\xa0\xbb\xe4\x3e\x81\x73\xbc\x5d\x15\x7e\xbc\x45\xca\xbb\xeb\x57\xcc\xf4\xe4\xd4\x79\xf9\xe7\xe2\xa3\x92\xba\x78\x47\x9d\x20\x6b\x1a\x2a\x32\xbc\x35\x9d\x67\x3a\x62\x8d\xc1\x78\x90\x57\xe1\x21\x58\x57\xf6\x2b\xbb\x84\xcc\xb4\x8f\x79\x59\x3e\x62\x92\x65\x27\x3a\xfa\xad\x97\xdf\xf9\x7f\x50\xe2\x76\x4a\x9a\x14\x89\xca\x4b\xeb\x11\x7a\xb5\x38\x3a\x17\x8b\x5d\xf5\xb4\xe5\x6a\xf4\x2e\x3c\x0c\x4b\x13\x4b\xb2\xb2\x12\x03\xc0\x9a\x86\x8a\x09\xab\x34\x0d\xb6\xa6\x67\x74\xf2\x37\x0f\x07\x6c\xed\xa2\xf7\x4e\x57\xfc\xfe\x16\x6b\x11\x8d\x4d\x7b\xcf\x2b\x4e\x24\x60\xd4\x72\x66\x48\xbc\xf1\xa1\xbc\xf5\xd4\xcf\x17\xce\x9a\xee\x12\xb1\x4a\xc8\x92\xfd\x7d\x37\x7c\xd1\xcc\x08\x19\xb9\x57\xf4\x20\x2d\xa6\x8e\xfa\x35\xf1\x2e\x56\x8f\xdc\xf2\xcd\x60\xf2\xf9\xed\x9b\x84\xb3\xa6\x99\xf8\x7e\xe4\xbd\x51\x17\x0a\xa0\x16\x0a\x70\x8a\xaf\x2c\x79\xd6\xdd\xd7\x1f\x31\x33\x83\xa9\x2c\xf2\x8c\x4a\xcb\x30\x49\x59\xf8\xf6\x4d\xc2\x59\xd3\x69\xc8\xdf\x7f\x6e\xa2\xb4\x72\x46\xa0\xb7\x49\x65\x0a\x8a\xea\x31\x49\xff\x19\xe9\x5c\xab\x7b\x9b\xed\x55\xd3\x66\x71\x4e\x80\x7f\xfb\x26\xe1\xac\xe9\xc7\x7d\xa3\xba\x4c\xa2\x0d\x03\x6a\x53\x82\x8b\x1d\xfc\x54\xfb\x5a\x68\xed\xf8\xff\x50\x43\xab\xce\x77\x5c\xbe\x45\xd2\xb9\x60\xdf\xbe\x49\x38\x6b\xfa\x90\xfe\x5d\x82\x69\xe5\xfb\x77\xf9\x3f\x93\xbf\xe0\x4a\x19\xde\xc3\x55\x13\xbc\xdf\x31\x41\x90\xef\x3f\x85\x3e\x33\x9e\x75\x36\x7b\xfb\x26\xe1\xac\xe9\x77\x51\x2f\x23\x22\x27\xa7\x08\x77\x37\x31\xed\x19\x69\x3d\x4f\x66\x32\xb4\xbc\x0d\xcb\x0e\x53\xb3\xdf\xf3\x25\x4c\x48\x7c\x79\x72\xfb\x26\xe1\xac\x69\xf7\x09\x24\xcd\x7d\x5c\x16\x4a\xe1\xfe\xa2\xb0\xe2\xbb\xd9\x3b\xb8\x2b\x55\xe1\xd9\x54\xf5\x1b\x94\x2a\xce\x9f\xcc\xf5\xa6\x96\xfe\x37\x8b\x15\xa8\x4f\x11\x7e\x14\xaa\xae\xd5\x7c\xec\x58\x4a\x7e\x4a\x72\xfa\x22\x9b\x32\x7b\xa1\x0e\x53\xa4\x31\x95\x53\x79\xe5\xc5\xcc\x64\x12\x8d\xca\x98\x2f\x30\x4f\x87\xe2\x40\xa3\x50\x41\x82\x14\xde\xf3\x7d\x41\xb6\xad\x99\x3b\x3d\x71\xed\xf4\x25\xf6\x59\x38\x8c\x0d\x66\x14\x5b\x88\xf7\x9b\xf1\x99\x25\x7b\x33\x61\x61\xa1\x38\xd0\x28\xf4\x89\x5e\x21\x54\xac\x62\x62\x20\xcb\xab\xcf\x9b\x7d\x46\xb7\xbb\x40\xb8\xee\x51\x53\xd0\xc4\x38\xf1\x95\xd7\x44\x3c\x5a\x78\x30\x2c\x2c\x14\x07\x1a\x2e\xb8\x5d\x7d\xf5\xb5\xd1\x03\xc8\xba\xe6\x0d\xa7\x45\x53\x6b\x87\xc6\x90\x1e\x90\x50\x97\x88\xde\x20\xc6\xc7\xbe\x40\x96\x1e\x03\x8e\xe7\x42\x71\xa0\xde\xfe\x53\xf7\xbc\x9b\xc4\x20\x36\xe3\x26\xf4\xc4\x80\xe6\x22\x51\x88\x62\x63\xf4\xae\xf3\xf9\xbd\x70\x29\xfa\x48\xed\x17\xdf\x3b\x03\x60\x61\xa1\x38\xd0\xb9\x2b\x86\x6f\x7b\xbb\xa2\x19\xa4\x49\x56\xd3\xe2\xf2\x15\xb6\xbd\x94\x39\xfe\xa9\xaf\x85\xb1\xa8\xf3\xc6\x36\xfd\xfe\x30\xf3\x10\xce\xc2\xa6\x24\x50\x3f\xc9\xff\xa3\x12\x55\xbd\x5b\x03\x86\xe7\xb1\xdb\x33\x34\x73\xd1\x3d\xa5\x50\xc1\xd5\x60\x91\xe3\x07\x99\x5c\xc8\x6d\x5f\x3a\x07\x15\x43\x6e\xb0\x00\x2f\x1d\x82\x03\x89\x21\x29\x98\x55\xe7\x73\x62\x4c\xa5\xe6\xf1\xdd\xb1\xcf\x6c\x4e\x6c\x22\x0e\xba\xe8\x98\x8a\x45\x69\x1f\xe2\x55\x94\x43\x91\xae\x57\x80\x1d\x56\x08\x0e\x94\xde\x24\x6e\xc5\xf6\xda\x37\x34\x41\x1b\xf1\xa9\x7c\xde\x25\x94\x04\x36\xbf\x5c\x32\x47\xac\xbe\xf2\x5f\xfd\xab\xc4\x50\x48\x7f\x0c\xdc\x8d\x84\xe2\x40\x62\x88\x51\xc4\x45\x37\x78\xa5\xe6\xa2\xb2\xf6\x1a\x31\xfa\xa7\xc3\x14\x92\xe2\x42\xdf\x8a\x54\xcb\x27\xc7\x14\x2f\x42\xd3\xf9\x05\x60\x9b\x19\x8a\x03\xf5\x16\x33\x20\x21\xed\x99\x54\xf5\x1c\x66\xa2\x73\xca\xdb\xd5\xba\x9b\x10\xc9\xec\x58\x13\xb1\x68\xf7\xac\x64\xca\x99\x3e\x6e\x33\xa0\xc4\x32\x14\x07\x12\xc3\x0c\xde\xbe\xac\x82\xd6\x98\xee\x83\x5a\xc2\x6c\xe7\x0a\x4a\x0b\x0a\x0f\x55\xfd\x13\x9c\xc5\x5e\x3f\xc2\xa5\x2d\x65\x44\x91\x51\x98\x18\xa0\x86\x2f\x78\x31\x98\xab\x5c\x8f\xa2\xe5\xc4\x38\x35\x64\x48\xf0\xfc\xb5\xdb\xa9\xde\xde\x9a\xe5\xb8\x69\x0a\x7a\x71\xe3\xc3\xc2\x64\xd4\xe2\x0b\x94\x01\x86\xe2\x40\x62\xf8\xc8\x94\x78\xf7\x0d\xe1\x03\x64\xb9\x86\xfa\x3d\x4c\x79\x86\xa1\xbb\xaf\x49\xdd\xd0\x3e\x44\x74\x08\xf1\x6b\xd8\x1f\x22\xf5\xfc\x01\xcc\x5e\x08\x0e\xfc\x52\xeb\x81\x39\xd9\xdc\x35\x65\x81\x60\x24\xb6\x00\x8d\x29\x87\xe8\x22\xf5\xc6\x4f\x84\xc3\x5e\x01\xed\xe6\xfb\xe9\x0f\x4a\x36\x45\x01\x23\x1d\x82\x03\x89\xc1\xa1\x09\x53\x94\xe5\x01\x7e\xce\x65\x2b\x53\x88\x0e\xaa\xcc\x58\x23\xf3\x25\x0a\xa2\x48\x96\xc4\x4b\x1f\x4b\x13\x36\x0e\x2f\x2f\x60\x53\x1c\x82\x03\xf5\x56\xcd\xfb\xcb\x01\x7b\xd5\x8f\x2a\xac\xc7\xdf\x18\x9d\x6b\x9a\x5f\x9c\x3a\x54\x22\x25\x28\x54\x65\xd4\x75\xb3\x96\x79\x30\x5c\x0f\x00\xbb\xd7\x10\x1c\x48\x0c\x99\x43\x8d\xb1\x29\x3b\x66\x7d\x92\xf5\xab\xb6\x75\x86\xb3\x86\x6d\x64\x07\xf9\xdb\x03\x37\x4a\x2d\xbb\x59\x12\x2b\xe7\x1a\x5d\x30\x31\x40\x4d\x2c\xe0\xc5\xf0\xec\x5f\x9c\x5a\x58\x25\x8d\x98\x18\xdd\x8f\xfe\x3b\xb3\x33\x2f\xbc\xf3\x04\x02\x93\xe2\x99\x6f\xf2\xc4\x3e\x30\x2e\xf2\x09\x00\x1d\x86\xe2\xc0\x65\xc9\xe4\xa3\x59\xf1\xef\xda\x46\x56\x60\xf3\xac\x5b\x50\x07\xd9\x0b\x30\xcb\xd1\xa9\x11\x11\xa1\x47\xa7\xc4\x98\x52\xff\xdd\x06\x0e\x55\x43\x71\xa0\xf4\x06\xd1\x64\xde\x0b\x22\x12\xae\x0f\x19\x7e\x47\x4e\x91\x61\x6a\x18\xfb\xe0\xeb\xcf\x41\xb1\x8b\x59\xfd\xc1\xfb\x87\x03\x47\x09\x40\x11\x35\x28\x0e\x24\x86\xa7\xb9\x15\x6f\xb6\x7e\xf8\x6e\x72\x57\xc9\xbf\x2d\xee\xe9\x88\x6c\xf8\xfc\x19\x0d\x0f\xa1\xc9\xc7\x09\x41\x67\x7e\xc8\x2f\x1e\xf0\x4e\xa1\x38\xf0\x93\xaa\x41\x75\x8b\x2a\x4d\xc3\x4e\xaf\xab\x83\xd4\x9e\x07\x55\xe9\xd5\x8f\x76\xda\xf8\xa6\xb5\x0e\x13\xb4\xcb\x8b\x71\xde\x84\x02\x4f\xdc\x43\x71\x20\x31\x9c\xd8\x16\x12\x72\x32\x8c\x18\x6d\x6f\xcd\x06\x34\x31\xfd\x79\x14\xf7\x6a\x44\xe4\xdd\x2b\xba\xb3\x80\xfd\xb2\x02\x14\x2a\xda\x46\x98\x18\xa0\xa6\x7c\xf0\x62\x88\x34\x66\x3f\x14\x65\x90\x69\x3f\xb8\x91\x11\xec\xbf\xc1\x5c\x09\x7b\xc6\x60\x1a\x91\x33\x88\x96\x17\x8c\xf0\xd2\x6e\xdb\x19\xd8\x77\x81\xe2\xc0\x05\x0b\xc7\x45\x48\x24\xf2\x0e\x75\xa8\xd7\xbe\x33\x77\xd1\x5d\xf3\x84\xcf\x5f\x8c\xe1\xf7\x55\xa1\xa3\x6c\xc9\x6a\x75\x96\x3a\x01\xce\x3f\x14\x07\x4a\x6f\x1a\xaa\x53\x6f\xfc\x0f\x5f\x17\x13\x5a\x39\xed\x9f\xb9\x8c\x65\xb5\x05\x26\x64\xf6\x4b\x31\x92\x7f\x8c\x55\xfd\x37\x6f\x14\xc4\x80\x4b\xe9\x10\x1c\x48\x0c\x67\xe3\x6b\xa8\xec\xb1\x23\x95\xd9\xe4\xf5\xab\x21\xaa\xcf\xf0\x25\x5c\x2a\x9d\xe9\x0e\x3e\x91\xf6\x3f\x2e\x5f\x1f\x99\x51\x79\x00\x0b\x0b\xc5\x81\x7a\xfb\xd9\x61\xa4\x22\xfc\x34\xe8\xa8\xa6\xdd\xcf\xaa\x75\xf8\xa1\x2e\x33\x4f\x00\xf6\x72\xd5\xb9\xfa\x21\x87\x94\x4c\xb9\xe4\x6f\xe0\xc5\x69\x28\x0e\x24\x86\x37\x76\xa3\x15\xb4\x31\x82\xd4\xbe\xec\xf4\xeb\x7d\x6f\x3c\xd7\x62\x77\x49\x91\x68\xe8\x8b\x13\x72\x43\xb5\x7f\x6a\x8e\x3e\xab\x80\x89\x01\x6a\x32\x0e\x2f\x06\x87\xac\x2e\x15\x0d\x5e\xfd\x3d\xfc\xe6\xc3\x62\x14\xa1\x84\x13\xf1\x8a\x4d\x26\x05\xce\x38\x21\x75\x03\xa2\xcb\x5a\x39\xad\x17\xc0\x1f\x12\x82\x03\x89\x41\x3d\x71\x6e\xbf\x77\x21\x50\xad\xd2\x30\xfb\x7e\xf1\x64\xe3\x67\x13\x0a\x0d\xcd\xc7\xa7\xbc\xfe\x4d\xe6\x79\xfa\x44\xd5\xc3\xc0\xd3\xd0\x50\x1c\xb8\x3c\xdb\x87\xbf\x48\x2e\x59\x5c\xbf\xa6\x5a\x7e\x9a\x69\xa2\x11\x32\xf7\x65\xff\x28\x7d\x46\x10\x5e\x87\xc8\xd0\xdb\x2a\x68\x3e\x0a\x54\x10\x80\xe2\xc0\x47\x8d\xe6\xf0\x78\x89\x13\xeb\x05\x04\x27\x14\x2e\x17\x0a\xd1\x31\x69\xcb\x62\xce\xb6\xff\x59\x3c\x6f\x55\x0e\xe0\x9f\x63\xde\x05\x0e\x14\x40\x71\xa0\xde\x86\x7c\xb0\xf2\x6c\xc8\x7a\x9c\x99\x5a\xd2\xb7\x5f\xf8\x22\x78\x31\xcf\xdd\x9b\x0f\x63\xcd\x1b\xbb\x59\xbf\x5c\x81\x43\x7d\x94\x0b\x16\x16\x8a\x03\x89\xe1\x1f\xa3\xde\x42\xef\xc4\x96\x70\x70\x71\x93\xe2\x5f\xa4\xdf\x96\xeb\xa5\xc3\x52\x68\x57\x55\x22\xda\xa5\xcd\x04\x28\x74\x4f\x9f\xc0\xc4\x00\xb5\x4c\x82\x17\x03\x71\xd5\xe9\x5c\x8e\xae\xe7\xfd\x0f\x9c\xb2\xc6\xf2\x21\xfd\x0f\x50\x1f\xc7\xdd\x1d\x25\x22\xb5\xb6\x9d\x48\x34\x59\x7c\xf6\x10\x38\x65\x03\xc5\x81\xc4\xb0\x64\x1d\x66\xfd\xae\xa1\x40\x33\xce\x1f\x75\x2b\x3f\x64\x6b\x54\xb2\x26\x09\x59\x8a\x42\xb8\xb5\x90\xcf\x45\x4e\x63\x01\xd5\x07\x16\x16\x8a\x03\xa5\x77\x76\x2e\x5e\x8a\xda\x29\xf0\x40\xfb\x69\x29\x42\x95\x5b\x95\x9d\xe4\x5d\x82\x88\x79\x79\xbb\x26\xdc\x63\x9c\x07\xe3\xa3\x54\xc0\xfd\x5b\x28\x0e\x24\x06\xc6\x58\xdd\xd0\x1f\x9f\x59\xd8\xd7\xea\x0d\x2e\xf9\x99\x7b\xc4\x1c\x3d\xad\xf1\xb9\x9e\x71\xbd\x88\x58\xbc\x67\xa1\x79\x27\xd4\x12\xd0\x18\x04\x07\xea\xed\x18\xae\xf8\x11\xb2\x1f\x3e\xd9\x67\xf6\xec\xae\x14\x8a\x7b\x36\xa8\xef\x4a\xbe\xce\x31\x56\x48\xdf\x5f\xb5\x7a\xc8\x29\x15\x0d\x6c\x95\x41\x71\x20\x31\x6c\x25\xf4\x57\x25\x6c\xaf\xd0\xf9\xde\xe9\x30\xb9\xf7\x23\x30\x72\x38\x59\x61\x67\xa9\x2d\x60\x67\x65\x60\xf7\xc9\xaa\xed\x13\xe0\x41\x6f\xa8\x05\x2c\xbc\x18\x16\xde\x0b\x10\x1e\x38\x93\x72\xc9\xbb\xbf\x63\x1a\xf3\xfa\x33\x25\xc1\xc8\xf3\x4a\x94\x73\x8e\x73\x0f\x7d\xcd\x2e\xb0\xa7\x2f\x0e\x78\xa1\x00\x82\x03\x89\xa1\x6e\xb4\xe3\xe3\xae\x70\x94\x7d\xdd\x4a\x9c\xe8\x7d\xa7\xc2\x8d\xb9\x8e\x23\x4a\xbb\x84\x71\x9f\x17\x32\x13\x3c\xb3\xfb\x65\xc0\xa3\xc4\x50\x1c\x78\x14\x56\xa2\xee\x6c\x59\xcd\x0d\x1b\x89\x94\xf2\x59\xf9\xf5\x10\xd5\x1d\x91\x42\x54\xe7\xee\x4d\xcb\xcf\xb2\xe5\xe0\xb6\x33\x8a\xef\xc0\x28\x0c\xc1\x81\xc4\x10\x8c\xf6\xd3\x95\x69\x29\x7e\x8c\x7e\xef\x3a\x8b\xb7\x2b\x0f\x55\x8c\x7c\xcf\xea\x57\x1a\xe7\x1f\x07\x9d\xa0\x90\x8e\x12\xee\x7f\xb0\xb0\x50\x1c\xa8\xb7\xd6\xfe\xd8\x31\x47\x77\x64\xd9\x87\xbe\xb5\x28\x78\x7a\x0b\xf1\x99\x94\xc8\xbe\x9d\xdb\x3d\xf2\x76\x20\x64\x60\xf6\x72\x54\xfc\x05\x0b\x0b\xc5\x81\xc4\x90\x2e\x39\xc4\xfe\xf0\xf8\xd5\x18\x5a\xf4\xb8\x70\x23\xc5\x02\xf9\x98\xe6\xd9\x11\x8b\x3f\x91\x91\x01\xcf\xd5\xef\xb0\xbf\xba\x37\x80\x35\x0d\xb5\xa9\x08\x2b\x35\x0d\x67\x4d\x27\xe6\x30\x26\x0c\x3c\xd1\xb9\x77\xce\x7b\x76\xfc\xed\xa7\xbe\xb6\xe0\xca\xb3\xf3\x3e\xb3\x75\x12\xc5\x35\x7a\xd6\x4d\xca\xb1\x9a\xdb\x6f\xbd\xc0\x59\xd3\x86\x8e\xe9\x1c\xcb\x3f\xbf\x62\x4c\xf2\x49\x3e\x42\xba\x10\x08\x29\x4c\xc6\xeb\xd8\x8d\xa8\xc3\x73\xc2\x75\x1f\xd7\xd0\x6e\x74\xbf\x7d\x93\x70\xd6\xb4\xe0\x75\x36\x02\x7a\x8c\x3e\xcd\xca\x42\x3c\x6d\x2e\x32\x63\x0b\x26\xab\x76\xa8\x43\xa9\x4e\x56\xcd\x6a\xd7\x25\x17\xad\x57\xdc\xff\x66\xb7\x07\x2a\x97\xff\xc7\x45\xd9\x57\xef\x04\xdd\xae\x7c\xaf\x38\x92\x7b\xd4\x25\x9c\x73\x33\xad\x45\x72\xdc\xfa\xee\x79\x5d\xfb\x4a\x8d\xdb\xcd\xbb\x57\x03\x8f\x94\x42\x71\xe0\x35\x9d\xfb\x01\x06\x32\xde\xcb\xc1\xf9\xb2\xa1\x6a\xd1\xbf\x4e\x23\x3b\x59\x79\xa3\xaa\x9c\xa2\xef\x6b\xdb\x39\x02\x64\x1f\xcb\x01\x0f\x6c\x41\x71\x20\x91\xcf\xe5\x28\xbf\xd3\x22\x31\x91\x52\xc8\x3a\x8e\x72\x26\xce\x1a\x2a\x34\x2a\x15\xed\x3f\x10\xfb\xe0\x39\xfb\xca\x87\x21\x25\x13\x78\x7e\x02\x8a\x03\x7d\x92\xdf\x74\x16\x3e\x23\x0a\xa2\x3d\xca\xbb\xc2\x42\xf9\xd6\xb6\xef\x4b\xf8\xbb\xea\x6e\x95\x49\x80\x9a\x5a\xa0\x54\x39\xf1\x9b\x58\xa0\x22\x00\x14\x07\xea\xed\x36\xeb\x9b\x9d\xc3\x4a\xa3\x19\xdd\xb1\xa8\x94\xc5\x41\x5f\x64\x27\xba\xe4\xa5\x60\x87\x5d\x0a\x1d\xd3\xc5\x3b\xfc\x15\x64\x40\x79\x08\x28\x0e\x7c\xe5\xb2\x53\x05\xcd\xa1\x79\x4b\xce\xfb\x5f\x87\x89\x81\x8e\xf2\x99\x6d\xaa\xda\xa5\x56\xbe\x22\xed\x82\x75\x88\x89\x38\xe7\xa4\x06\xec\xff\x0c\xa5\x72\x78\x31\x84\x77\x56\x15\xcd\x51\x4f\x17\x9a\x8d\xd1\x9a\xef\x9d\x71\x10\x20\x8c\x9d\x3a\x84\x55\x0b\xb3\x11\xbc\x0f\x4a\xf7\x45\x4e\x7b\x0a\xeb\x30\x14\x07\x12\xc3\xb0\x6d\x0b\x32\xaf\xf9\x4e\xb5\x4d\xcc\x12\x1e\x55\x67\x56\xf9\x9d\x40\x02\xa9\x3f\x04\x6f\xde\xc6\x1f\x88\x19\x52\xa6\xf8\x02\xb6\x21\x14\x07\x4a\xef\xd9\x6a\xe1\x87\x03\x1d\xe5\x3f\x7c\x7f\x72\xe5\x1e\x22\xc5\x59\x7c\x7f\x95\x4f\x15\x5a\xad\x5d\x69\x8c\x6f\x38\xe3\x83\x17\x2f\x04\xcc\xb7\x21\x38\x90\x18\x12\x6d\x7e\xc7\x21\x97\x48\x1e\xdf\xfb\xad\x1c\x12\xd1\xde\x28\xed\x59\x45\x87\xc0\x1a\x44\x88\xd2\x9f\x4e\xa5\xe5\xf1\x6b\xce\x1f\x16\x16\x8a\x03\xf5\xf6\x9e\x3c\x35\xee\xe9\xdb\xa6\x6d\xeb\x41\x2b\x95\x73\x69\xc9\xad\x45\xc9\xe2\xe7\x87\xe7\x3a\x78\x51\xa5\x2c\x53\x7b\xe3\xcc\xc0\x60\x0d\xc5\x81\xc4\x10\x94\x37\xe0\x64\x6e\x2f\x8c\x1d\xa2\xab\x55\xf4\x2d\x97\xec\x21\x85\xec\x2e\x23\xa9\xa2\x29\x2a\x77\xce\x64\x6c\x93\x97\x37\x2a\x4c\x0c\x50\xff\x1f\x78\x31\xb4\xd3\x1a\xed\x24\x3b\x7b\x28\x24\xcc\x11\xd5\xfc\x6c\x0e\xec\x4e\x40\x65\xdb\xff\x4e\x1d\x59\xac\xd7\x57\x2c\x6a\x24\x1a\x05\x6c\x81\x42\x71\x20\x31\xe0\xf6\x44\x93\xc7\x91\x9a\x76\x75\x13\x9f\x7d\x3d\xc0\x56\x55\x2b\xf5\x53\xda\x70\x8d\xc6\xef\x67\x75\xc9\x3f\xc2\x21\x09\x05\xf6\x81\xa1\x38\xf0\x2b\xf7\x0f\x0f\x3e\xd0\x23\xcb\xd2\xe9\x3e\x30\x1d\xca\x6c\xdf\x38\xcc\xc2\xa6\x0f\xf9\x72\x57\x83\xf1\x67\xc7\xbc\xae\xde\x72\x96\x3e\x2c\x2c\x14\x07\x12\x83\x6d\xc8\xc1\x6b\xcb\x39\xb2\x2b\x72\xbf\x7f\xa3\x5d\xec\x64\xe4\xa8\xec\x0f\x1a\xdf\x34\x95\xa9\x91\x0f\x8d\x2b\x31\x1f\x3b\xd1\xc1\xc2\x42\x71\xa0\xde\xe2\x7a\x90\x14\xd9\xde\x10\x51\x6d\x46\xb3\x57\x1f\x4c\xf1\x88\x2a\x68\x74\xbd\xc8\xb6\x92\x48\x41\xc4\xbf\xc2\x53\xd3\x0c\x01\x26\x42\x50\x1c\x48\x0c\x07\xde\xbc\xa7\x38\xfa\x1e\x4c\x6b\xfe\x27\x51\x0d\xd4\x66\x1b\x36\x8f\xe2\x2c\x3c\xb2\x6f\x0e\x9c\xa7\xc9\x82\xcf\x3b\x63\xee\xc2\xc4\x00\x65\x46\xc2\x8b\x61\x4d\xea\x7c\xcf\xc9\xf6\x2a\x99\x45\xaf\x55\x55\x20\xd2\xf7\xcd\x09\x4d\x03\x89\x69\xf5\xa9\x77\x8e\x8f\xc8\xc0\xf3\x1e\x3d\xe0\x1e\x32\x14\x07\x12\x03\x46\xad\x2a\x83\xbc\x9b\x64\xd8\x37\xb6\x09\x8e\x2b\x0a\x23\xb7\x6d\x52\xb6\xb9\x86\x73\xaa\xec\x21\x44\xcc\xc5\xa6\x96\x7f\x9f\x60\x61\xa1\x38\x50\x7a\x15\x5a\x75\x6d\x66\x85\xca\x5d\x82\x87\xaa\x14\xcf\x0f\x7b\x8e\x1d\x6b\x53\x85\x49\x97\xf3\x82\x97\xf9\xc3\xd1\x50\x85\xf4\x80\x6a\x4a\x50\x1c\xd8\x9a\x0e\xd3\x23\x34\x9c\xff\x3a\xfd\x3a\x74\x66\x76\xa2\x47\xc9\x55\x72\x2e\x6b\x41\x50\xd6\xbc\x70\x85\x4b\x68\xf6\x9c\x6f\x15\x28\x11\x08\xc5\x81\x7a\xfb\x55\x64\xf6\xc5\x37\xdc\xdc\xe7\xaf\x3e\x19\x4b\x78\xb2\x75\x3d\x99\x72\xf4\x5a\xcb\x23\x44\x44\x4e\x42\xf1\xed\x6c\x2e\x67\x7b\x0e\x58\xd3\x84\x49\x5a\xc1\x48\xaa\xa2\x11\xb4\xaa\xdd\x6b\x5e\xaf\xa4\x56\x1a\x87\xcd\x6a\xde\xa8\x37\xfc\x4b\x24\x4d\x67\xef\xb9\xd4\xb9\xf7\x5f\x6b\x3a\xae\x13\xc9\x40\xcd\x40\x2f\x59\x61\x74\x11\x4f\x08\xc5\x91\x52\xb8\x9c\xf9\x9d\xab\xfc\x15\xc3\x3c\x4d\xc6\x38\xee\xc6\x23\x8b\xff\xa0\x8b\xcc\x9c\x0e\xd9\x73\x4f\x3c\xec\xf3\x5c\xa6\x6c\x72\x44\x63\xce\x49\x58\xb6\x47\x35\xbd\x17\xf2\xe6\x09\xa8\x64\xdf\xa9\xd1\x80\xac\x69\xa8\xc8\xf0\xd6\xb4\xe3\xc2\x33\xf4\xe1\xb8\xba\x0f\xce\x2b\x6c\x4b\x6e\xcc\xed\x3d\xe3\xd9\xc1\x7e\x5a\xcf\x1a\x57\x2f\x9f\x20\xe0\xa0\xaf\x9d\x44\xfd\x07\x35\xd6\x33\x17\xd3\x71\x89\x63\x57\x2d\x8f\xf7\xc1\x16\xe2\x70\x0f\xf4\xa1\x50\x3d\x29\x93\xf9\x2c\x87\xd2\xcf\x3c\x92\xf4\x90\x0a\xb0\xa6\xa1\x62\xc2\x4a\x4d\x83\xad\x69\x94\xf2\xbf\xcb\x62\x4e\xa7\xca\xc2\xd1\x3b\x3f\xb7\xfc\x88\x8c\x31\x4a\x1f\x05\x09\x6b\x66\xd8\xde\xb1\x68\x9c\x4b\xcb\x21\x31\xbc\xf5\xd4\xaf\x05\xce\x9a\x0e\x30\x3c\x43\xfb\xd4\x2b\xb8\x31\x2f\x73\x79\x72\xe1\xa6\x89\x26\xad\xaa\x54\xcc\x53\xda\x5d\x7c\xb1\x4d\x22\x29\xce\xfa\x38\xfa\xf6\x4d\xc2\x59\xd3\x88\x8a\xe5\xc2\x66\xa7\xeb\x95\xef\x6c\x64\xe8\xe9\x1c\xf2\x16\x90\xdc\x3e\x91\xbd\x1d\xc6\x9d\x28\x99\xf2\xde\x2a\x5a\x13\xee\xbd\x7d\x93\x70\xd6\x74\xd3\x4c\xc8\xa4\x63\x18\x72\xe6\x33\xcc\xce\x00\x51\xd1\x75\x4f\xbb\x48\x2e\x53\x6d\x85\xaf\xc2\x0e\x81\xb6\x3c\x6f\x11\x39\xef\xde\xbe\x49\x38\x6b\x1a\xb3\xf8\xf7\x5a\x50\x63\x75\xf2\x46\xee\xee\xa3\xce\x8f\x98\x43\xe4\xaa\x54\xc8\x96\x13\x25\xcc\x9f\x24\x64\x76\x66\xfa\x8a\xae\x6f\xdf\x24\x9c\x35\x5d\x9e\x5e\xab\xfc\x3c\x80\x61\xbc\x8a\x15\x83\xa5\x4a\xb4\x90\xa5\x82\x84\x84\x76\x8f\xf7\x8f\xb8\xf4\x04\x8a\x6d\xf2\x6b\x1d\xcc\xdb\x37\x09\x67\x4d\xdf\xf3\xaf\xe3\x69\x7f\x8e\x94\x3f\x27\x64\xc2\xfe\xc8\x3f\x3f\x3e\x09\x57\x64\xf9\x41\x15\x06\x7d\x30\xf3\xba\x92\x6b\x5a\xb9\xcf\xed\x9b\x84\xb3\xa6\x1f\x1a\x54\xb0\x8b\x97\x4b\x7b\x09\xb4\xcc\x47\xb1\x15\x9b\x18\x29\xbe\x4d\x5b\x9e\x29\xf8\xda\xed\xf1\x94\xea\xee\xa7\x22\x7c\xff\xff\xcd\x62\x05\xea\x53\x84\x1f\x85\x66\x79\x1a\x08\x4e\x85\x68\xba\xb1\xf7\xee\xae\xd7\xfc\x9a\xa0\xf8\x1c\x55\x9c\xff\xf2\xbb\x59\x2a\x77\x9e\xef\x23\x4f\x36\xe9\x0f\xc0\xf6\x0c\x04\x07\x1a\x85\xa2\x54\xfc\xd1\xf8\x30\x3f\x5d\x6a\x72\xe9\x12\x14\x91\xf3\x2b\x5c\xe7\x7b\xb8\xf9\xa4\x39\x9e\x44\x0a\x37\xdf\x7f\x98\xe2\x09\xd4\xcf\x84\xe2\xc0\x8b\x95\xaf\x39\xfa\xd7\xad\xbc\xdb\x36\x1a\x1d\xa4\x25\x71\xc2\x3e\x9b\x02\x1e\xdb\xd1\xaf\xb0\xcb\x45\xa8\x2c\xe4\xef\xc7\x88\x09\x02\x8b\x15\x08\x0e\x7c\xc1\x4c\xce\x72\xd8\x92\x37\x69\x9e\x96\x60\x69\xf7\xaf\x8d\x38\x95\x3b\x92\x73\x2c\xe6\x92\x50\x6d\x65\xc9\xe6\x92\x5f\xef\x1d\x25\x58\x58\x28\x2e\xe0\x19\xde\xff\x97\x3f\xcf\xfb\x21\xe1\xb4\x50\xe8\xee\xc9\x97\xc7\x7c\x8b\x34\x92\xb3\xc6\xb3\xcc\x96\xfa\x8c\xb3\xc8\xf3\x1c\x13\xdf\xbf\x5f\x79\xfe\x06\xfc\x79\x08\x0e\x34\x25\x29\x99\x6d\xf8\x6b\x6b\x36\x1c\xeb\x75\xdd\x7f\x8a\xea\xab\xc6\xbd\xda\x85\xa8\xba\x61\x50\x76\xe4\xb0\xe1\x5a\xa5\xa7\xca\x64\x0a\x9b\x92\x40\xfd\x24\xe1\xc5\x40\xc5\x70\x37\xbb\xd6\x62\xbf\xc5\x97\x53\xe5\x0a\xdd\xf3\xf2\x6f\x7d\xe0\xe2\x96\x29\xe9\xde\x51\x63\xf3\x4b\x84\xb7\x38\xa8\xfd\xc0\xf5\x66\x08\x0e\x24\x86\xeb\x15\x74\x37\xa6\x23\x44\x6e\xa9\xd8\x4a\xfe\x0a\x7b\xba\x79\x92\xec\xdd\x2a\x66\x6e\xb6\xb7\x3f\x72\x5f\x7c\x7e\x12\xfa\xff\x1e\xb4\x81\xe2\x40\x62\x70\x2c\x95\xc1\xa3\xe2\xf2\x3a\xa9\xca\x31\x97\xed\x9b\x57\x0b\x1f\x95\x71\x53\x9f\x45\x2c\xdd\x1d\x39\x7b\xfc\x38\xc1\xe8\xff\xc3\xda\x5f\x46\x65\x15\xac\x8f\xff\x30\x5d\xd2\x25\x08\xd2\x2d\xa0\x34\x12\x4a\xa7\x94\xa4\x20\x5d\x12\x8a\x80\x84\x20\x1d\x82\x88\x80\x02\xd2\x48\x83\x74\x29\x20\xa9\x20\x21\x9d\xd2\x1d\xd2\x48\xf7\xf3\xea\xde\xdf\xf3\x6c\xce\xfa\xcd\x7f\x2d\xcf\xfb\xcf\xba\x66\xaf\xb9\x3f\xfb\xde\x33\x73\xcd\xcc\x35\x22\x0b\xdd\xb8\x02\xe0\x60\x32\x60\x3e\x66\x88\x6d\xb4\xfa\x24\x42\x85\x16\xc4\xe5\x3e\x76\x23\x26\x28\xd6\xb7\x55\xa0\x73\x88\x36\x36\x21\x3c\xcc\xf0\xe5\x31\xa4\x2e\x88\x83\xc9\xf0\xf4\xae\xc8\x9e\xd9\xae\x01\x8a\x69\x2f\x45\xf7\xe1\x7e\xfb\xcb\xac\xe5\xa9\x88\xe2\x1f\xbe\xb6\x48\xd8\x9a\x13\xc3\xea\x89\xcd\x88\xb0\x20\x0e\x26\xc3\x47\xd6\xb4\x87\xe4\x7e\x4d\xa2\x4f\x8e\x3a\x6e\x3c\x4f\x54\x6e\xfb\xf4\x2c\x1e\x59\x23\x9d\x3e\xe9\x8f\xcd\x0b\x6e\xad\x0b\x3c\xe8\x8a\x27\xd0\xe7\xeb\xaa\x0c\x95\x2d\xe2\x86\xbe\xef\xbe\x58\x47\x19\xe5\x9c\xe8\xeb\x70\x25\xe2\x0f\x21\x0b\xf4\xcf\xdf\x5d\x3f\x26\x5e\x4d\x90\x5a\x9e\x82\xf6\xd1\x82\x38\x98\x0c\xe1\x5d\x83\x6d\x04\xbb\x9e\xcc\x85\xb7\x6e\x38\x1f\x86\x6f\x33\x8a\x4a\xa3\x68\x7e\x15\x67\x1e\x8d\x62\x89\x1e\x0b\x4d\xe1\x64\x83\x4e\xe6\x03\x38\xf8\x55\xff\x15\x12\x84\x63\x03\xb7\x71\xef\x1f\xf3\x39\x58\xbc\xfe\x95\x6d\xf6\xd7\x43\xfc\x20\xec\xab\x87\xa2\x77\xbe\xa4\xcb\x40\x23\xb4\x33\x15\xc4\xc1\xaf\xc8\xe6\x50\xd9\xf6\x7b\x76\x9a\x3e\xe4\x80\xf9\x39\xfe\xc5\x4c\xee\xc4\x63\xa2\x76\x7d\x5c\x8e\xda\xe3\xcd\xf4\xd5\xd9\x79\x1a\x3a\x44\x58\x10\x07\x93\x21\x04\x55\xed\x07\xda\x0d\x7f\xfa\x8b\x37\x2f\xf6\x4d\x79\x7a\x08\xcc\xbc\x51\x05\x0c\xcc\x9b\xcf\x78\x56\x73\xf1\x26\x42\x8f\x6a\xa1\x05\x4b\x00\x07\x93\x21\x8b\x51\x46\x04\x6f\x12\x25\xa8\xbc\x74\xe5\x04\xe7\xf6\x53\x75\x5b\xbc\x12\xd9\x1a\xf7\x47\xd4\xec\x71\x85\x42\x23\xeb\xbe\xbf\x10\x32\x80\x06\x16\x57\x65\x30\xec\xb8\x5d\x3d\x19\xce\xd2\x21\x45\xdf\x6c\xdc\x8f\x41\xce\x7b\x78\x40\xb3\x4d\xb9\x96\x3e\x57\x1e\xfc\x64\x34\x19\x6b\x0e\xda\xf0\x0a\xe2\x60\x32\xfc\x5a\x0d\x2e\x11\x72\xbf\x43\xed\x86\xd7\x29\xef\xd0\xb0\xea\x69\xfd\x25\xdf\x44\x6c\x77\xa5\x66\x05\x75\xb5\xb8\x37\xc8\x46\x0f\x11\x16\xc4\xc1\x4b\x26\x96\xfd\x9c\x7b\xb1\xb4\x5a\x1e\x45\x90\xed\xe7\x14\x27\xa0\x5d\x36\xbf\x95\x20\xae\xc2\x69\xbb\x18\x3c\xf1\xae\x55\xcc\x06\x7a\x5a\x10\x07\x2f\x22\x2a\xb2\xbf\xb8\xc2\xc2\x31\xb3\xa1\xe7\xc1\x76\xf7\xfc\x4f\x2a\xcf\x03\x9f\x9d\x27\xd7\xa7\xd8\x7c\x13\x8f\x5c\x3f\x1b\xda\x40\xab\x23\x20\x0e\x26\x03\x4d\xda\x07\x0c\x37\x91\x9b\x28\x0e\xb7\x79\xf2\xe9\x9c\x7b\x26\x05\xb2\x87\x7e\xad\x34\xad\xdc\x7f\xe1\x99\x72\x88\xdc\x30\x93\x88\x08\x0b\xe2\x60\x32\x30\x77\xf9\x8c\x3d\xf0\x97\x8b\x90\xe1\xa4\x7d\xcd\xb4\x34\xae\xb0\x76\x6f\x94\x6e\xff\x53\x8c\x7e\x5c\x8a\x11\xdb\x5e\xc8\x8b\x6a\x84\x0c\xa0\x21\xdf\x55\x19\xba\xac\x39\xd9\x0f\xf5\x3a\x9b\x12\xf1\x74\x9b\x1a\x19\xa3\x5b\x6e\xbb\x1f\x9a\x8c\x3e\xdd\xd9\x10\x2b\xc4\xce\xcd\x78\x57\x9e\x8a\x78\x60\x10\x07\x93\xa1\xb2\xea\x8f\x74\xe3\xc6\x1f\x6b\x3d\xc5\x49\x0e\xed\x75\x0a\xdb\xeb\x73\xdc\xf7\x7c\x97\x4a\x27\x05\x08\xac\xb0\x14\x4e\x4e\xa0\x9c\x03\x88\x83\xc9\x30\x99\x3e\xb2\x61\x24\x94\xc8\xd0\x43\xa4\x98\xdd\xa6\x89\xf7\xa5\xf0\xe6\x06\x4b\xf1\xa9\x76\x34\x1b\x71\x81\xa5\xb4\x1e\x2f\x74\x36\x12\xc4\xc1\x64\xa8\xc3\x60\xfc\x43\x4d\xa8\xa8\xd7\xf6\x66\xbe\x59\x17\x7d\x98\x8b\x97\xd1\xa5\xbd\x50\xe3\xde\x0f\xfa\x05\x5b\x96\xa0\x42\x91\x06\x68\x57\x05\x80\x83\xc9\x50\xf1\xb8\x4e\x2b\xe2\xc4\x63\x32\x34\xf7\x61\xd0\xb3\xf3\x70\xe4\x47\x18\xbc\x21\x0e\xaf\x03\x6a\xd8\xcb\x3d\xbc\x32\xde\xea\x43\x23\x1c\x10\x07\x93\xc1\x9d\xde\xdd\x5a\x8f\xcb\x8c\x54\x9f\x77\x12\x99\xd7\xe7\x27\xd5\xb3\x15\xa3\xcc\xb0\xce\x8f\xc2\xe6\x0f\x1f\x32\x89\xe6\x9e\xde\x43\xc8\x00\x1a\x8c\x5f\x95\x21\x7e\xb3\xf1\x66\x34\xa9\xb0\x24\x9e\x2c\x7a\x12\x19\x29\xea\xc3\xbc\x98\xb5\x05\x31\x33\x2b\x3f\xfb\x22\xee\x62\x89\x87\x28\xd0\x1d\xce\x20\x0e\x26\x83\xe7\x8d\xe0\x21\xe7\x07\x13\x41\x1e\x5a\x77\x45\xac\x6e\x5c\xd4\xcb\x05\xbb\x94\x55\x1b\xd0\x30\x88\xc5\xd3\x71\x59\xac\xfe\x84\xaa\x75\x80\x38\x98\x0c\x0a\xef\xa3\xe3\x6a\x37\x1b\x26\x43\x0f\x6a\x1d\x88\x99\x4d\x99\x76\xa8\x3d\xfd\xbe\x24\x2e\xc6\x17\x7c\x7b\x29\x63\x4c\x80\x14\x05\x9d\x66\x01\x70\x30\x19\x84\xc2\x02\x1b\x8e\x13\xe6\xad\x47\x44\x97\x18\x3e\x73\xae\x66\x6e\x4d\x66\xcf\x5b\x2c\x7d\x1a\x70\x8b\xaa\x0d\xff\xc5\x29\x48\x86\x08\x0b\xe2\x60\x32\x90\x5b\xef\x6e\x5e\xaf\x4f\x10\x8c\x79\xf0\xa2\x36\x6e\x90\xdd\xb6\x2b\x7a\xa6\xa6\xcd\x22\xc7\x35\xb9\xa4\xf3\xda\xad\x9b\x0e\x14\x50\xa6\x17\xc0\xc1\x64\x10\xe9\xb0\xa8\xf5\x17\x39\xd9\xd3\x22\x49\xe6\x7c\x3e\xc1\x17\xd8\x2b\x71\x52\x93\x3b\xf5\xfd\xfb\xe9\x91\x78\x6d\x98\x9d\x79\x04\x42\x06\xd0\x34\xe9\xaa\x0c\xcf\xb4\x99\x70\x47\x63\x2a\x06\x96\x65\xb4\xb9\xc2\x48\x83\x8b\x16\x9b\x9e\xf4\x33\xe7\xd2\x07\x7b\xb8\xc9\x90\x89\x79\xd9\x40\x2f\x05\x88\x83\xd7\x9a\x46\x7f\x55\xbf\x94\x41\x46\x36\x5a\x6d\x54\xa3\x99\x34\xcd\xf5\x73\x89\x51\x5b\x49\xc6\x2e\x57\xaa\x42\x5e\x69\xd9\xa1\x04\x4a\x26\x80\x38\x98\x0c\xc5\xb9\xd4\x84\xb3\x87\x39\xd4\xde\x7a\x5f\xd7\xb2\xd5\x32\x88\x76\x08\x5c\xce\x17\x69\x28\xf3\x0d\x09\x08\xb9\x63\x6a\x65\xa1\xa2\xd0\x20\x0e\x5e\xcb\xb4\xf3\xbd\x3b\xf9\xf6\x23\xe4\x8a\xf2\xd4\xb6\x60\x09\x82\x0b\xe3\xde\xc4\x57\x17\x46\xbf\x7b\x8c\x78\xe3\x02\xce\x6f\xa8\x41\xdb\x1f\x40\x1c\x4c\x06\xf7\x32\xda\x3a\xbf\xc5\x40\xac\x0c\x3d\x96\x54\xd5\xa4\x0a\xaa\xae\x63\x87\xeb\x78\x18\xdf\x64\xf1\x5e\x47\x28\x21\x99\x2b\x41\x9b\xef\x40\x1c\x4c\x86\x9a\x0a\x2c\x2f\x92\xdb\xd4\x83\x16\x93\x28\xb1\x84\x2f\x9d\xa6\xfb\x28\x9e\x94\x47\x94\x5c\x2b\x50\x6f\x1a\x33\xa4\xd3\xea\xae\x47\xc8\x00\x9a\xc0\x5e\x95\x41\xe8\x30\xe1\xf8\xcf\x45\x36\xc1\x63\x6d\x3c\xbf\xcd\xa6\xb7\x38\xab\xba\xe6\x41\xfc\x5e\xb9\x19\x56\x68\x75\x41\x9d\xfd\xa5\xd0\x2b\x0c\xe2\x60\x32\x48\x1c\x2e\xdf\xeb\x7a\x5d\x9f\x67\x7d\xdb\x23\x8e\x67\xaa\xe0\xf6\xb4\x3f\x63\x49\x7c\xfe\xe8\xb7\xe2\xa1\x75\xa1\x70\xf3\xe0\x30\x44\x58\x10\x07\x93\x81\x7f\xc6\xf1\x76\x3d\x9f\x51\x5e\x8c\x9b\xa9\x47\x59\x36\xd2\x40\x07\xfe\x26\x6f\xe3\xaf\x8f\xa8\xf3\x3c\x3f\x32\x6c\xb2\x3e\x9b\x20\xc2\x82\x38\x98\x0c\x13\x97\xf7\x5e\xde\xfe\x1c\xb5\x88\x23\xca\x3d\x7b\x43\xfd\x10\x99\xdf\xa6\xda\x96\x46\xce\x90\x62\xd8\xce\xf4\xa3\x8c\xdd\x3e\x74\xd7\x31\x88\x83\xc9\x80\x99\xd2\xe8\xeb\x3a\x24\x70\x3f\xd8\xee\x89\xa0\xc0\x70\x7a\xe5\x91\xe5\xcf\x07\xad\xeb\x63\xa4\x9f\x7b\x7e\x96\xbb\xe7\x98\xd6\x41\x93\x14\x00\x07\x1f\x40\x46\x16\xa7\xef\xb8\xc9\x77\x14\x69\x0a\x34\x47\x12\x4f\x3d\xbe\xf7\xf0\xe2\xab\x95\x5a\x05\x8e\xd0\xb6\xad\xb0\xe7\x7c\xc8\x05\x94\x9a\x06\x2d\x2a\x22\x6a\x4d\x5f\x49\x4d\xeb\x96\xcc\xd4\x78\xfa\x0b\x3f\xfd\x98\xc8\x31\xc6\xd0\xce\x23\x7e\xf4\x2c\x42\x90\xec\xf4\x7b\x82\xee\x43\x4f\x1d\x95\x3a\xb2\x86\x7f\x5f\x7a\xb9\x92\x9a\x16\xe8\x48\x3c\x1e\xad\x14\xf3\x32\x94\x7d\xff\xd9\xb6\xbc\xe8\xb5\xc3\xdb\xb1\x76\x6f\x51\x9a\x33\x85\x2f\x99\x5e\x77\x58\x4f\x31\xff\xbd\xc9\x2b\xa9\xe9\xd0\x3d\x6d\xf5\x4a\xfc\x88\x2e\xd9\x16\x12\xca\x43\xca\x95\x32\x9a\x6c\xdb\xcc\xb3\x75\x8a\xef\xf2\x43\xb7\x5e\x63\xf2\x51\x31\xfd\x6f\x56\x7b\x40\x7d\x79\xf5\x95\x6c\xff\x24\x94\x5c\xfd\x37\xcf\xb8\xe5\x7b\xd4\xd3\xc7\x03\x0a\x42\xfc\xa2\x98\x25\x7e\xf2\xdc\x2e\x1b\xcb\xd8\x4b\x6f\x48\x48\xa0\x79\x07\x88\x83\xbd\x92\xbd\xb5\x0f\x7b\x8c\x42\xbd\xf9\x89\xf9\xe5\x6c\xef\xbf\xfd\x31\xb3\x53\x2d\xe3\x68\x7f\xff\xfd\x72\x85\xf9\xc5\xb1\x28\xa9\xc4\x38\x22\x2c\x88\x83\xbd\x92\x4f\x19\xd0\x6c\x5f\xa9\x7c\x19\xd5\xb4\x2f\x11\x4b\xc9\xfc\xa3\x1a\x82\xfd\x25\x41\xe9\xe2\x1a\x56\x11\x85\xe2\x8f\x04\x1e\x21\x28\xa5\x03\xe2\x60\xaf\x24\x91\xdd\xdf\xf7\x0f\xee\xfa\x51\xba\x15\x2a\xb3\x91\xf7\xcd\xbc\xee\xba\xa6\x7b\x2c\xe0\xd3\x2f\xa9\xe2\x2e\x5b\x58\xeb\x7f\x08\x2d\x47\x80\x38\xd8\x2b\xc9\x95\xf1\x67\xb3\x83\x3b\x6e\x32\x30\xc9\xe1\xf1\x47\xd9\xc2\x17\xbf\x44\xf9\xac\x45\xe6\x78\x04\x9c\x65\xc7\xcc\xf5\xd0\x91\xa6\x10\x61\x41\x1c\xec\x95\xfc\x2a\xd4\xa9\x47\x4a\x42\x26\x61\x13\x2c\x92\xfb\x6a\xbe\xe6\x87\x90\x4b\x4d\xfc\xc6\x11\x8f\x74\x60\xdb\xb0\xc4\x8c\x41\x13\xb4\xdd\x18\x64\xf9\x55\x19\x5e\x9b\xc5\xea\x4c\x6d\xbf\x21\x6b\x0f\x40\x33\x8b\x79\xcb\x30\x6d\x28\x9b\x80\xa5\xe4\x78\xc6\x5b\x11\x32\x1a\xbd\x4a\x41\x05\xe5\x5e\x40\x1c\xfc\xd4\xb4\x6b\x83\x49\x10\xad\x99\x03\x26\x96\xcd\xf9\x1d\x6b\x15\x8c\xe1\x5f\x4b\x1b\xb5\xa9\xa3\xa4\xab\x6c\x82\x09\x36\xd8\x07\xd0\x94\x19\xc4\xc1\x64\xc8\x37\x5b\xed\xfb\xa0\xfe\x47\x80\xf8\xb6\x5e\x43\xc7\x43\xeb\xdf\x44\xf7\x5f\xd9\xe3\xe3\xd8\x07\x77\xa6\xae\x2d\x19\x74\x1e\xab\x20\xc2\x82\x38\x98\x0c\x86\x4a\xad\xb4\x84\xe4\x6a\x22\x92\xcf\xe4\xa6\x9e\xc7\xf2\x89\xdd\x9f\xd7\x57\x36\x8d\x5e\x89\x34\xc9\x6e\x4a\xae\x09\xb4\xb4\x84\x26\xb6\x00\x0e\x26\x03\xe5\xa0\xec\xde\xb8\x17\xb2\x00\xb6\xfa\x3d\x81\x7c\x7b\x2a\xd1\x40\x47\x7b\xf3\xf5\xd9\xcf\x61\xc3\xfd\x93\x5c\x8f\x86\xea\xa1\x5b\x23\x41\x1c\x4c\x86\x61\x3a\x81\xc4\xeb\x13\x38\x14\x1c\xec\xfa\x11\xa8\x78\xae\x45\xf8\xae\x52\x7d\x95\xe2\xfa\x69\x8c\x9d\xf8\x59\x1c\xfc\x69\x98\x08\x19\x40\xff\x3f\x57\x65\x38\xcd\xae\x91\x5c\x79\xa4\xbb\xd9\xa0\x53\x87\x11\xf8\xc9\xca\x88\xf8\x25\x93\xb5\x86\x9f\xd1\xa9\xe6\x5e\xdd\x71\x1b\x67\x10\xb4\x9f\x0e\xc4\xc1\xb7\x1b\xb7\x65\xd2\x9e\x3f\x2c\xd1\xc1\x71\x5d\x31\xf6\x76\x97\x7f\x57\x6e\xee\x80\xb6\xf8\xa6\xf6\x87\x23\xfa\x50\x8a\x4c\x72\x10\x94\xf1\x06\x71\x30\x19\x4c\x33\x75\x62\x5f\x23\x15\x6a\xd6\x7b\x2c\xb9\xa8\xc6\xf5\xd6\x38\x6b\x73\xde\xbd\xdc\xe2\x5e\x18\xc3\x49\x35\x0e\x7b\xe7\x02\xdd\x84\x05\xe2\x60\x32\xb0\x1f\x61\x72\x90\xa9\xfe\xba\x57\xd5\x5b\x7a\x78\xa2\x79\x77\xe6\x93\xf8\x10\x4d\xbe\x48\x77\x90\xaa\x3f\x8e\x6f\x7e\x5c\x32\x34\xb4\x00\x71\x30\x19\x74\x5e\x4d\xff\x7c\xf7\x84\x65\x62\xe4\x3d\xce\x83\xfd\x85\xa0\x2a\x8b\x9b\x72\x02\xf4\x69\xa3\x3f\x28\x0c\x42\xb2\x71\x24\xa4\xa0\x89\x2d\x88\x83\xc9\x40\x45\xe8\x7f\xac\x77\xdd\x48\xe6\x48\xd4\xeb\xb5\x11\xeb\x75\xc9\x55\x75\x87\xc8\x36\xcd\x60\xd1\xfa\x66\x22\xb9\x8f\xf4\xb1\x6e\x08\x19\x40\xc9\xc8\xab\x32\x94\x3d\x7f\x20\xc2\x14\x23\x90\x47\x91\x27\xf9\x40\x39\x9c\x79\xe0\xcc\xbc\xd8\x35\x9d\x7f\x23\x8b\x62\xc5\xdf\x9c\x6e\x8b\xf3\x04\xba\x4a\x00\xc0\xc1\x64\x98\x78\x62\x78\xfa\x77\xf4\x96\x16\xcb\xe8\x8f\x88\x42\xe4\xc4\xdb\x09\xc5\xc8\xab\x54\x4b\xf5\x93\xe7\xf7\xa9\x06\x27\xed\xc3\x21\xc7\x40\x1c\x4c\x86\x6f\xfb\x47\x4d\xdb\x14\xf7\xb1\x64\x25\xbf\x1c\x2c\xdd\x45\x2a\x38\xc2\xf0\x75\x47\xce\x99\x59\xbd\xc5\xfc\x4c\xd3\xb3\xb4\x00\x9a\xe0\x83\x38\x98\x0c\x94\x1c\x93\x23\xda\x44\x97\x6a\xab\x0e\x69\x04\x8f\x72\x0c\x8b\xc7\x9b\xb9\x2c\xb8\xd1\x57\x2b\x7e\xcb\xdb\x99\x4a\x9e\xbd\x82\xf2\xf3\x20\x0e\x26\x43\x36\x5e\xbf\x0e\x55\xb4\xc0\x88\xf4\xd1\xdb\xa6\xd3\xe6\x1f\x02\x89\xe5\xef\xe9\xd5\xda\x64\xa6\x3e\x9f\x1c\xf5\x06\x5b\xb8\x8f\x43\xa9\x69\x8b\x79\xea\xc6\xe7\x9a\x12\x66\xee\x3b\x4d\x77\x8c\x8b\x63\x91\x08\x5d\xf8\x6d\xd2\xe5\x44\x54\xa8\x4f\x67\x85\x36\xf1\xde\x64\xfd\x67\x6a\xda\x89\xc7\x7c\x97\x22\x7e\xff\xf9\xad\x44\x3a\x5c\x41\xf7\x7d\x8c\x5f\x91\xdc\x33\x8a\x6b\x26\x53\x33\x53\x25\x79\x1e\x7e\x7f\xfe\xb3\xc0\xb1\xaa\xf1\x70\x99\x6e\xd7\xfa\x97\x52\xfd\xe6\xb3\x58\xce\x65\x12\xa2\x50\x7b\x0c\x61\xcd\x60\x6f\xe4\xd2\x07\x26\x0a\xf4\xa1\x44\xb0\xd4\x34\x28\xf2\xd5\xd4\x74\x64\x4c\xa0\xf9\xbb\xfa\xb5\xe0\xd6\x75\xfe\x08\xe9\xb0\x31\x47\x53\xd9\xfe\x32\xcb\xdf\x2a\xd5\xda\xcf\x9b\x18\x98\x5d\x57\x5f\xfe\xe7\x94\x26\x5e\xa4\xb0\xf4\x9a\x28\xab\xdc\xf3\x67\xb9\x4a\x18\x4e\xc7\x5e\x3d\xb5\x9e\x66\xad\x22\x84\xd7\x7c\xdd\xe3\x8f\x43\xd9\xe7\xa1\xd4\x34\x28\x26\xa2\xd6\xb4\x2c\x6c\x1c\xd6\x79\xa1\x54\x8e\x89\xb3\xb4\x80\x2f\x4a\x25\xf5\x6b\x0b\x65\x49\xa2\x1b\x69\x3b\x9d\x80\x3b\xaa\xb8\xc8\xaf\x34\xdb\x97\xe8\xc9\x3f\x0f\xfd\x90\x78\xe0\x43\x3f\x03\x3b\xbb\x27\x85\xda\x04\xb1\x8c\x95\x98\x55\xfc\xf6\x71\x8f\x26\x8d\x83\x46\xb4\xf5\xaa\x65\x22\x3a\xc5\x04\xdf\x5f\x3f\x64\xff\xf7\x26\xc5\xe1\x4d\xba\x2e\x6d\x90\xaf\x6c\x48\x53\xed\x51\x7d\xea\x9d\xa9\x17\xde\x0d\xaf\xa6\xdb\x30\xbd\x4d\xf9\x79\x0b\x45\x61\x2f\x70\xca\xfb\x7f\x50\x24\xe7\x11\xbc\xc9\xdc\xc1\x8c\xa9\xdf\xf4\x78\xee\x2a\xba\xb4\xcf\x82\x7b\xf7\xc5\xae\x7f\x68\xc2\x18\xc8\x92\x66\x3a\xf5\xbb\x46\x23\x7b\x9d\xfe\xf4\xdf\x9b\x74\xb9\x72\xb8\x57\x4f\x92\x93\x3c\x29\xa1\xc2\xcd\x40\x92\x29\xb9\xf6\x10\xf5\x61\x3e\x46\xba\xd3\xec\x9e\xe4\x8c\xc9\xcb\x7a\xed\xca\xd8\xa2\x7f\x6f\x32\x0a\xde\x64\x0a\x51\x5d\x36\xb7\xc8\x71\x14\x7f\x42\xd9\x4d\xf6\xfa\x16\x2c\xc9\x18\x94\x68\xb4\x39\xa6\xe3\xf5\xf8\xdb\x6c\x6a\x37\x76\xba\xfe\xbd\xc9\x64\x78\x93\x76\x41\xdb\x42\xb9\x67\x6a\x59\xd9\x63\x94\xe8\x25\x8f\x3d\x09\xfc\x6c\x0d\x98\xe5\x58\x07\xab\xf8\xd8\x3d\xa3\xb8\x9f\x63\xec\xfe\x7b\x93\xd5\xf0\x26\xb3\xe9\x5e\x79\x6a\xea\xd3\xdc\x0c\x31\x5a\x99\x39\xcb\x5d\xea\xce\x98\xcf\x7e\xe4\x77\x61\x50\x13\xec\xa3\x34\xd8\xc6\x72\x76\xf7\x7f\x33\x59\x01\xbd\x8a\x57\xbf\x42\xbd\xbf\x70\x3e\xbc\xb7\xff\x4a\xb2\xdd\xfd\xc8\xad\x38\xf8\x94\xe4\xbb\x7b\xab\xe7\x63\xe7\xd2\x66\xad\x54\xa5\xc5\xb9\x80\xc7\xe7\xd0\xac\x02\xc0\xc1\xbe\x42\x02\xdc\x3e\xf2\x81\xd1\xe2\xb2\x49\xd5\x75\xe9\x11\x2a\x0c\x6f\xf9\x75\xe3\x22\xdf\xac\x0c\x9f\x0b\xfe\xa4\xe6\xda\xe3\xfd\x0b\x4d\xf4\x41\x1c\xec\x2b\x54\x6d\x62\x86\xb1\x83\x9f\x15\xa1\xdd\x26\xcf\xeb\xac\xb3\xd9\x2a\xd6\x99\xb9\x60\xce\x52\x1f\x99\xf2\xd4\x4f\x97\x87\x40\x4c\x1b\xda\x31\x0f\xe0\x60\x5f\x21\xf2\x77\x77\xbf\x19\x69\xf9\x1f\xae\x37\x33\x32\x8d\xf2\x60\xe6\x44\xd8\xf8\x88\x8c\x3b\x9d\x5c\xeb\xa7\xcd\xc6\x5e\xaa\x7e\x09\x1d\x94\x05\x71\xb0\xbe\x55\x2d\xfb\x14\xd1\x66\xa5\x85\x65\xb3\x44\xae\x51\x75\x59\xc5\x61\x76\x4f\xf3\xc1\xf7\x95\xfa\xc0\xda\x3b\x47\x68\xc8\xf9\x35\x28\x88\xb0\x20\x2e\x40\x12\xf9\x3f\xc3\x06\xcc\x85\xde\x2c\xe4\xea\xbf\x40\xc3\x9b\x9f\x5c\xe4\x6a\x9f\x1d\xae\xee\xa7\xbd\xf6\x13\x05\xed\xf1\xf9\x92\xdb\x06\xf5\x84\x33\x62\x48\x02\xfa\x93\xbc\x2a\x83\xf8\xcd\x38\xa1\xec\x0f\x22\x6b\xc8\xe6\x54\x46\xb8\x1d\x7a\x1e\x25\xe3\xf7\xed\x86\x8d\x2f\xce\xf5\x2a\x3d\x76\x6f\x2c\xc4\x2d\x21\x1e\x18\xc4\xc1\x0f\xbd\xdc\xd3\xb7\xc8\x39\xba\x5f\xf2\x97\x14\xf9\xd5\x73\x1f\xba\x62\x1e\xbe\x5e\xbb\xa8\xe3\xe4\x21\xad\x88\xcc\x37\x37\xe2\x7f\x56\x42\x87\x5e\x00\x1c\xbc\x6e\xe4\x8d\x26\x14\x7c\xd2\xaa\x81\x9f\xa4\xa4\x19\x27\x62\x81\x7b\xaa\xbf\xb7\xd3\x1a\x36\x03\x73\x4b\xd7\xdf\x4f\x1a\x58\x93\x43\xcb\xcc\x20\x0e\x26\xc3\x57\x94\x67\xa1\xd8\xf1\x5d\x12\xed\xfd\x6c\x77\xd4\x06\x5a\xc2\x67\xd8\x4d\x0e\x1b\xe7\x3e\x30\x46\x9a\xe8\xf8\x28\x58\x4a\x40\x67\x69\x40\x1c\xbc\x7e\x0b\x46\xb0\xbe\x52\xd3\xb0\x40\x8f\x61\x47\xc7\x75\xb6\xe5\xc8\x27\x47\x03\x71\x8f\xed\x30\x59\x8c\x23\xb8\x4c\x1f\x71\x6f\x18\x22\xc2\x82\x38\x98\x0c\xee\x26\x2f\x9a\xbb\xcf\xc7\x0b\x72\x2e\xae\x37\xb8\x8b\x33\x94\xb2\x63\x3b\xcb\x0b\x66\x75\xe3\xbf\x51\x5e\xac\x73\xd5\xb8\x80\x0a\xce\x80\x3e\x5f\x57\x65\x50\x32\xbe\xc1\x82\xc4\xb1\xae\x38\x66\x87\xd3\x76\x3b\x7e\x87\x34\xfb\x94\x05\xc5\x73\x38\x86\xa6\x61\xa6\x26\x9c\xc0\xfb\x27\x74\x8c\x04\xc4\xc1\x64\xc0\xea\x7e\xbe\x92\x49\x93\x32\xb6\x70\xab\x74\x8b\xff\x7e\x0a\xa3\xe7\xf2\x8a\x9e\xb8\xc9\x06\x26\x27\x26\x5d\x9f\x44\x7a\x10\x34\x69\x03\x71\xf0\xd3\x86\x04\xbd\xa3\xa8\x29\x6c\x0b\x74\xfd\x2f\x93\x6e\x3d\xc7\x3b\x3d\x0c\x72\xd9\x62\x26\x44\xfd\xf3\xc9\xb3\x94\xeb\x15\x03\x26\x2f\x74\xda\x10\xc0\xc1\x64\x78\xa7\xd4\x76\x5d\xc2\xeb\xd1\x5f\xe7\xb8\xb6\xc3\x55\xb7\x3d\xb6\x8e\x44\xa9\x20\xcb\x71\x8f\xb1\x00\x53\x91\x9c\xb4\x1c\x11\xe8\xaa\x3a\x10\x07\xbf\x1f\x3b\x47\x05\xcb\x6c\x2e\x20\xc2\x57\x56\xa2\x74\x6d\x56\x96\xb2\x79\xfc\x7e\xe0\xa3\xef\x99\x25\xf8\x27\x34\x28\x6c\x17\xaf\xa0\xd2\xcd\x20\x0e\x26\x43\x82\x13\x63\xe6\xd3\xe6\x5d\x06\xcd\x43\x45\x6b\x94\xec\x66\xfb\xdb\xf2\x12\xef\xeb\x88\x36\xdb\xaf\x67\x62\x26\x86\x78\xf0\x42\xd7\xf6\x82\x06\x16\xff\x65\x1f\xed\xf8\xef\x21\xbd\x1e\x21\xab\x6f\xce\xed\x24\x03\xdf\xb0\x48\x1b\x68\xa4\x65\xc7\x34\x08\x4e\x9f\xa8\x96\xd1\x0a\x8b\xe0\x42\xc9\x01\x10\x07\xbf\xb6\x57\xd3\xb1\xde\x5d\x51\x52\xfa\xc2\xda\x94\xbe\xc1\xef\xb7\xed\x1a\x79\x89\xb2\xe7\x6d\x2b\x19\x2c\x4e\xe6\xdb\x76\x15\xa3\x90\x0c\x20\x0e\x26\x43\x9b\xf3\x8b\xdf\x2f\xf3\x54\x25\x51\x3b\xd6\xdc\xdf\xfe\x1d\xb9\xd3\x3c\x66\x14\x88\xe2\x71\x6b\x26\x26\xcd\x48\x85\x45\x12\x0b\xca\x9d\x82\x38\x98\x0c\xad\x02\xe9\x7d\x1e\x13\xf2\xde\xde\x85\x23\xfa\xd3\xa5\x93\xfe\xb5\x3c\x6f\x75\x66\x58\xbb\x36\xc5\x73\x8d\xb4\xeb\x5f\x69\x39\x23\xc2\x82\x38\x58\xdf\x06\xa6\x5f\xe6\x47\xb4\xa7\xa4\x64\xb7\xbb\xbd\x90\x7e\x77\x03\xc3\x93\xa8\xb5\x7c\xb3\xa2\x41\x89\xce\x2c\x13\xf3\x43\xb3\x6e\x24\x22\x2c\x88\x83\xc9\xe0\x48\xaa\x6e\x3c\x38\xc5\x98\xc0\x6c\xf6\xd9\xd3\xef\x8b\x64\x4a\x48\x35\xb3\x24\xf7\x83\xa6\x36\xb2\x19\xcd\xb5\x98\xb1\xdb\xeb\xd0\x71\x38\xc0\x90\xef\xaa\x0c\x97\xf9\xf5\x16\x9b\x1c\x7f\xcd\xda\xb7\xb2\xd7\xf0\x1c\xdd\x90\x1c\x70\xb5\x9f\xdd\x76\x64\xd6\x0f\x2b\xe5\x08\xaa\xfc\xe0\x0c\x25\xa0\x40\x1c\xbc\x0a\xbd\xba\xf8\xcf\xe1\x79\xd6\x4f\x61\xd3\x68\x1a\xcf\x1e\xd8\xdb\x37\xc6\xe9\x7f\xc4\xf2\xd4\x10\x92\xa7\xed\xe5\x33\x9a\x41\xcf\x45\x84\x05\x71\x30\x19\x4e\x64\x8e\x4e\x66\xb4\xe6\x7b\x1d\xca\xdf\xbd\x57\xe5\xd5\x14\x55\xa8\x12\x69\xe4\xaf\x30\xd6\xba\x8b\x55\x3e\x76\x03\xbb\x13\x3a\x87\x0c\xe2\x60\x32\x24\x60\xa1\xee\xb0\x50\xef\x6a\xc5\xcd\x6b\x17\x54\x3a\x44\xd7\xe4\x66\x70\x5d\x5a\x87\x72\xdf\x7f\x4f\x99\x94\xe9\x49\x95\x00\xed\xdc\x01\x71\xb0\xbe\xc5\xc0\xfe\x8e\x71\xa9\xfe\x2e\x03\x1f\xc9\x2a\x4e\x86\xf9\x66\xdb\x57\xbe\x4a\x37\x07\xfc\x3d\xa5\x39\xde\xdf\x24\xb8\x66\x7f\x4c\x11\x61\x41\x1c\x4c\x86\x88\x98\xf9\xd4\xfc\x38\xba\x02\x19\x8a\xdb\xc5\xfb\xbf\xb6\x71\x37\x8a\xac\x43\xa8\xa3\x18\x8a\xb2\xf4\xdb\x5d\xe6\xd1\x0a\x83\x11\x32\x80\x06\xe3\x57\x65\xb0\x1b\x3f\x94\xf1\x61\xb8\x24\x14\x70\x75\xcb\x61\x4c\xe2\xec\x8a\x3b\xd8\x92\x9c\x74\x75\xca\xe6\xd8\xf7\xb0\xb1\xcb\x98\x86\x2e\xc1\x03\x71\x30\x19\x1a\xd6\x9b\xd1\xa8\x22\xb8\x53\xd2\xc3\x3f\x61\x7b\x52\x06\x19\x2c\x53\x6f\x9b\xbc\x5d\xbd\x5b\xd2\xee\x5c\xc6\x8f\xd4\xef\x03\x8d\x9d\x40\x1c\x4c\x06\x6b\xbb\x1c\xd6\x7d\xaa\x8f\x56\x1c\x62\xc4\x2c\x5b\x16\x66\xe6\x28\x03\x2c\x9a\xa2\x13\x02\x39\x23\x45\xba\xaa\xca\xba\xb7\xa1\xff\x73\x10\x07\xbf\xea\x1f\x55\xa5\x24\xd9\x77\xab\x1d\x37\xb1\x6f\x57\x51\xe7\x5a\x5e\x87\xfc\x73\x71\x6f\x46\x22\x42\x1e\x2b\xa3\x23\x9d\xd6\x8b\x4f\x88\xb0\x20\x0e\xd6\xb7\xa8\x4f\x91\xd9\x5c\xbf\xf8\xa6\xaa\xef\x72\x51\x05\x68\x8b\xf6\x7f\x51\xb0\x55\x0c\x22\x49\x2a\x35\x93\x35\x1a\xc1\xd7\xe2\x9d\x41\x84\x05\x71\x30\x19\x6e\x52\x7a\x24\xec\x5a\x8f\x7f\x5f\x31\x9e\x6f\xc2\x64\xe3\x58\x50\x77\xa6\xb7\x74\x6e\xb3\x7b\x80\xcc\x2b\x3b\xdb\x7d\x6d\x01\xaa\x08\x03\x9a\x26\x5d\x95\x61\xcd\xb8\x77\x82\x2c\xcc\x74\xf9\x6f\x3e\x47\x06\xf2\xd3\x3c\x2c\xa4\xb7\x4d\x53\x3b\x99\xf7\xcf\x34\x53\x69\x2a\x5f\x4f\x07\xe6\x23\x1e\x18\xc4\xc1\x64\x58\x22\x0b\x34\x9a\xd6\xa8\x48\xe9\xb6\xfc\x10\xde\x7d\xd1\x6c\x60\x35\x7e\x57\x5a\x4f\x94\x21\x59\xe4\xd5\xd9\xdc\xe0\xfb\x76\xa8\x0a\x3d\x88\x83\xc9\xb0\xda\xc7\x3f\x27\x88\x4f\x5e\x87\x79\xc6\xb7\x14\x98\x90\x24\x20\x97\xf9\xfd\xc7\x4e\xcd\x23\xd2\x4e\x34\x0f\x02\xc1\x73\x0d\x68\x11\x1d\xc4\xc1\x64\x78\xc1\x73\xed\xf3\x12\x5b\x0b\xef\x0d\xfd\x74\xe7\xb9\x5e\x76\xc2\xb8\x66\x4d\xd2\x3c\x0a\x35\x17\xc3\xfa\x89\x12\xcf\xcb\x0b\x68\x9f\x02\x88\x83\xdf\x55\xa1\xcd\x5d\x77\x8b\x92\xbd\x53\x5b\x69\xda\x27\x78\xc7\x89\xe1\x2f\x13\xfa\xdb\xca\xd7\x6e\x8d\xa9\x62\x32\xf1\x7d\x81\xd5\xb1\xd0\x50\x04\xc0\xc1\x64\xa0\xbf\x31\xf1\x2e\xd4\xe5\xb7\xc7\x58\x31\x5d\x08\x65\xf1\xc3\x3f\xb4\x7b\x64\xb4\x69\x73\x24\xb7\x0a\xfc\x09\x55\xeb\x33\x56\xa5\x10\x32\x80\x26\xb0\x57\x65\xa0\x4a\x65\x6c\x75\xaa\x24\x0b\x92\x6c\x1f\x26\x42\x15\x73\x75\x3b\xfb\xf2\x83\xda\x2b\xfa\x5d\xfa\xdc\xdf\x38\x4c\x3c\x9a\x46\xa8\xcc\x32\x88\x83\xc9\x80\x47\xf2\x89\x79\x0b\x4b\x83\x7a\xf0\xed\x65\x7a\x50\x02\x06\x8b\x33\x9b\x2e\x0a\xe6\x86\xff\x7d\x2f\x72\x3f\xa2\xea\xa6\x00\xe8\x92\x11\x10\x07\x93\x61\xea\x8d\x53\xeb\x6e\x5a\xa7\x2b\xe1\xb7\xd9\x3f\xdf\xd3\xda\xd9\x65\xd3\xd1\x2f\x63\xac\xc3\x7b\xd5\xc6\x89\x3f\x28\xc6\x7c\xc5\x41\x84\x05\x71\x30\x19\x0c\x28\xb8\x97\x42\xfd\x45\x15\x0e\xf2\xc9\x7e\xba\xd9\xf1\x55\xf5\x12\x5e\x3c\x55\x5a\xdf\xb1\x57\x2c\xae\xb0\xf9\xfb\x17\x1f\xaa\x91\x04\xe2\x60\x7d\xfb\xbc\x70\xbb\x18\xd3\x0b\xd9\x77\x4c\x2d\x94\x24\x73\x33\x98\x88\x8c\xa8\xba\x99\xe0\xc1\xdf\xe7\x1e\x89\xf1\x73\x32\x63\xc9\x50\x81\x15\x10\x07\x93\x21\x44\xd0\xca\xf2\xa5\x1c\x4b\x54\xd3\x56\x90\xc9\xfe\xba\x6c\xcb\x62\x42\x4c\x98\xe0\x93\xf9\xaf\x1f\xd7\x8d\x22\x29\xdf\x4d\x47\x42\xa9\x69\xd0\xa2\x22\xa2\xd6\xf4\x10\x7c\x1d\x04\xcf\x89\x44\x8e\x65\xb0\xaa\xff\x05\x76\xbb\x0e\xcd\x22\x9d\x98\xba\x48\xb8\xe1\xdc\xaf\xfa\xfe\x75\xd2\xa1\xe3\x2f\xcb\xb4\xff\x83\xa5\x97\x1d\x78\x93\xdc\xc2\x5c\x4d\xf2\xb5\x92\xe1\x49\xfe\xa6\x93\x54\xb1\x0e\x54\xfe\x25\xab\x38\x7d\x82\x58\x58\x04\x2a\x2f\x8c\x09\x5e\x53\x13\xff\x7b\x93\xe7\xf0\x26\x99\x08\x7c\x7b\x31\x63\x96\xd3\x30\x6a\x4e\xd7\xfb\xe2\xb2\x91\x2e\x0f\x82\xff\xd8\x25\x6b\xb3\xcd\xb8\x7d\x0d\xee\x78\x13\xcc\xfc\xbf\x59\xed\x01\xf5\xe5\xd5\x57\xf2\x27\x99\xe9\x23\x34\x3e\xa4\xc8\x89\x9c\x79\x7f\xa7\xd2\xde\x0b\xfc\x77\x0d\x9f\xaa\x6f\x11\x6c\xee\xaf\xb1\x10\x7c\xc2\xc5\x83\xce\xad\x81\x38\xd8\x2b\xc9\x53\x96\x24\x44\xe5\x76\x71\x9d\x59\x64\x3d\xaa\x80\x69\x1d\x33\x06\x49\xd6\xb6\xba\xa9\xa1\x11\x59\x2a\x86\xf6\x96\xdc\x33\xe8\x4d\x07\x71\xb0\x57\x52\xb5\xd0\x06\x9d\x07\x6d\x37\xfc\x0e\xa9\x4b\xec\xd8\xd3\x4f\x3f\x03\xdc\xe5\xa6\x77\x3c\x0b\x4e\x19\x1d\xd1\x55\x6c\x90\x33\xa0\x5b\x8a\x40\x1c\xec\x95\xb4\x37\xfd\xf0\x40\xa0\x0e\xaf\xce\x6b\x77\x0a\xab\x9c\xf8\x90\xc1\x54\x2a\x79\x47\xe8\x6c\x55\xae\x5b\x87\xa4\x7e\x28\x01\x55\x0a\xba\x71\x00\xc0\xc1\xb7\x72\x87\xb9\x2e\xb6\x32\xae\x61\x3d\x77\x2a\xfd\x10\x7e\x37\xe1\xf8\x67\xaf\xbc\xce\x37\xe6\x44\x11\x63\x01\x2a\x07\xb3\x79\x69\x28\xd3\x0b\xe2\x60\xaf\x64\x0d\x23\x46\x35\x21\xf9\x6c\x9d\x0b\xcf\x65\x3d\x4b\x67\x9f\x83\x92\x95\x48\x9f\x31\xf1\x6a\x3c\x8a\xaa\x9c\x8d\x69\x2c\x06\xb4\xda\x03\xb2\xfc\xaa\x0c\xb9\xbf\xbb\xb4\x48\xf1\xcc\xf9\x6e\x3e\xeb\xfd\xfc\xdc\x5c\x10\x73\xf2\xc1\xb5\x17\xa4\x7e\xea\xf7\xae\xff\xf9\x24\x39\x10\x14\x03\x4d\x67\x40\x1c\x4c\x86\xfa\xc3\x6f\x49\x36\x96\xc4\x0d\xe4\x3e\xac\x6c\xc7\x2c\x8b\xae\x77\x7f\x23\xc7\x8e\x71\x0d\x0f\x0c\xd8\x5a\x5b\x35\x0d\x62\xf3\x21\xc2\x82\x38\x98\x0c\x58\x6c\x5f\x05\x0c\xf2\x05\xab\xac\x07\xce\x25\xd4\x07\x37\xbe\x64\x8b\x30\x93\xad\x94\x27\xcd\x8c\xc8\x8f\x78\xc9\x21\xb9\x08\x41\xeb\x06\x00\x0e\x26\xc3\xbe\xbf\x9b\xea\xf1\x9d\x97\x0f\xd3\x43\xdc\x9e\x10\x3a\x5e\x50\x59\xc8\x44\xfb\x47\xf6\x7c\xff\xc6\xe7\xbf\x2f\x49\x8c\x59\x04\x55\x2d\x06\x71\xb0\xbe\xc5\xb5\x78\x61\xff\xf3\xa5\xdc\x45\xad\x4d\x66\x8c\x11\x2a\x16\xba\x52\xde\x8a\xd0\xeb\xc1\xa4\x34\x45\xa7\x04\xd2\xaf\xea\x97\xd3\x88\xb0\x20\x0e\x26\x03\xab\xe2\x32\xe9\x03\x34\x7b\x15\x8a\xdb\x99\x76\xeb\xd1\xae\xb2\x9f\xeb\x34\x48\x1b\xf0\xe9\x39\x4e\xbf\xb2\xe3\x5d\x70\x61\x3c\x45\xc8\x00\xfa\xff\xb9\x2a\x43\x03\x9b\xfd\xe9\x40\xa9\x95\x7b\xe2\xfe\xfe\x80\x37\x59\x15\xe3\xe4\x76\x9c\xfc\x1a\x7b\x78\xe3\x0a\x0b\xd1\x2b\xfd\x48\xc5\x87\xd0\x78\x1b\xc0\xc1\x64\xf8\x2b\x93\x5c\xe1\xf3\x91\xe6\xa9\x45\x43\x3d\x52\x49\x98\xe8\x3c\x81\xc0\x0d\x51\xb6\x3a\xc2\xce\x24\x71\x97\x2c\xf3\xd1\x62\xe8\x9c\x07\x88\x83\xc9\xc0\x4d\x68\x7a\xb0\x62\x49\x44\xd1\xcc\xb4\x1a\x87\x4b\xf7\x5e\xb6\xc4\x91\xa7\x69\x1b\x73\xbc\x84\xc5\xb8\x39\xc5\x39\xf2\x2e\x74\x55\x13\x88\x83\xc9\x50\xf8\x4d\xee\xb7\xcf\x3d\xa5\xd1\xb3\xaf\x6f\x2a\x62\x15\x6d\x65\xf9\xc8\x8f\xa8\x56\xa3\xbd\x30\xbe\x52\xde\xd0\x1c\x5c\xde\x0f\x42\x84\x05\x71\xf0\x8b\xa5\x08\xa4\x57\x5a\xb5\xee\x53\x3d\xe8\xa8\xb8\x36\x2a\x23\xcc\x51\xd1\x3f\x9a\x3a\xfc\x77\x67\xc3\x45\xcf\xdd\xd0\x92\xe2\xeb\xff\xd5\xa3\x01\x70\x30\x19\xde\x66\x07\x21\x11\x3e\xfa\x46\xbc\xf3\x38\xa0\xf2\x1e\x2e\x23\x75\x5e\x24\x69\xe1\x93\x5c\x24\xf1\x85\x38\x83\xf0\x54\xd9\x0d\x73\x84\x0c\xa0\x64\xe4\x7f\xd9\x7b\xfe\x47\xd0\x40\x28\x43\x8d\xb4\x63\x24\xfb\x47\x7c\xb1\xc4\xfb\xf4\xa5\x83\xe7\x7e\xb3\x3b\xbf\xd3\xd8\x36\xa3\xbd\xae\xdf\x83\xca\x85\x80\x38\x98\x0c\xaf\xb7\xfc\x25\xea\x32\x43\x66\x1f\x7f\x91\xaf\x8c\x4e\x58\xb9\x29\x1f\xc0\xc5\xab\xb3\x52\x70\x72\xdb\x6b\xb9\x27\xd3\xc2\x1d\x1a\xc6\x83\x38\x98\x0c\x78\x27\x03\xbd\xc7\x6d\x9f\xef\xb0\xee\xa5\xc6\x78\xcb\xa5\x4f\xc8\xd2\xf4\x54\x93\x76\x4f\x6e\x17\x89\xea\x9d\x1a\xdd\xd4\xe9\x87\x06\x84\x00\x0e\x26\x83\x12\xcb\x73\x0b\xbe\xe2\xf7\x94\xc9\xc5\x6c\xdf\xb8\x83\xec\x65\xd3\x9b\xb2\x2a\xf3\x3a\xfc\x67\x5e\xb7\x29\xdc\x0b\xc3\x67\x84\xd6\x81\x41\x1c\xac\x6f\x39\x4a\x4c\xdc\xac\x9d\x84\xc7\x65\x0d\x24\x0c\x34\xf8\xe2\x3e\xd6\xdb\x7d\xed\xdd\x78\x67\xe5\x88\xdb\x5e\xaa\xe8\xb9\x59\x2f\x01\xa5\xa6\x57\xb8\x37\x53\x59\x42\x1e\x28\x8f\x7e\xb4\x7e\xb5\x45\xdb\x46\x33\xf5\xe6\x0c\xd5\x36\xcd\x2a\xfb\x60\x7f\x9a\xe9\x60\x20\x27\xf1\x3f\x53\xd3\x27\xbd\xb2\xae\xf8\x79\x06\x31\xe4\xe2\x29\xa9\x98\xee\xcf\xcf\xdd\x44\xbb\x2d\x23\x4c\xdd\xde\x3c\xbc\x4d\xdb\xf5\x78\x8f\x1d\xeb\x3f\x7b\xcb\x57\xad\xa3\xc6\xb5\xb9\x53\x42\xf4\x1e\x2e\xf9\xc5\xb9\x5f\xaa\x69\xc3\xef\x3e\xdf\x08\x9b\xac\x59\x3a\x82\x94\xda\x0b\x3b\x58\x6a\x1a\x14\xf9\x6a\x6a\x9a\x8e\x0e\x6f\xa3\x69\xb6\xfe\xbe\x9f\x57\x5a\x66\x30\xd6\x48\xd0\x6b\xa6\xf3\xbc\x85\x5d\x25\x8d\x10\x83\x24\x35\xb9\x8e\xbe\x4f\xff\x81\xfe\xd8\x14\x58\xc3\x6b\x8e\x32\x2f\xaf\x6d\x7e\x1c\x56\x7e\xb4\xfa\x2b\x41\x47\x29\x06\x33\xad\x47\x5c\xd9\x3a\x12\x4d\xbf\x9d\x0a\x4a\x4d\x83\x62\x22\x6a\x4d\xc3\x53\xd3\xa6\x42\x19\x89\xb6\x07\xc9\x37\x39\xae\xed\x58\xb8\x2d\xcf\x92\x6e\xd6\x28\xd3\xdb\xd7\xd9\xca\x58\x5e\xc4\xd3\x9f\x60\x1f\xb7\xfc\xf3\xd0\x4f\xe2\x4a\x6a\xba\x52\xe9\xa7\x9b\x85\x31\x72\x5f\x20\x6a\x5b\x87\x30\xa3\xd5\xb3\xc8\xd2\x1f\x05\x1a\xe1\xf2\x87\x91\x3f\x3d\xe6\x1c\x8d\x58\xa5\xff\xbd\xc9\x2b\xa9\xe9\x8c\xce\xd8\x9b\x95\x3f\xd6\x92\x02\x53\xfa\x3f\x95\x9e\xf2\x1b\x21\x7f\xa1\x79\x74\x57\xe3\xd5\xf7\x0f\x26\x86\x4f\x24\xd3\x22\xff\xfd\x26\x22\x89\x2b\xa9\xe9\x1e\x65\x61\x7d\xdb\x73\x85\x1e\x89\xf9\x8f\x7c\xb7\x12\x7e\x7c\xf8\x2d\xa7\x22\xb6\x7f\xc9\x1e\x12\x59\x47\x63\xab\x15\x37\xfc\xef\x47\x98\x25\xae\xa4\xa6\xed\xa6\x6e\x61\x8c\xd8\x6f\x87\x88\xa1\x5d\x22\x2b\xa7\x8e\xd2\xfa\x2f\xeb\xa2\x9f\x6b\x3d\xcd\x71\xd7\xc5\xdf\x7c\x5c\x16\x2a\xf3\xef\x4d\x5e\x49\x4d\xbf\xa7\xe2\x9a\xb7\x37\xf2\x79\xaa\x4a\xb6\x92\xf1\x26\x4e\xae\x4f\x80\x7a\x93\x9b\x4b\xfa\xe1\xad\x84\xc4\x09\xe3\x79\x46\x5e\x94\x7f\x6f\xf2\x4a\x6a\x1a\xc7\x38\xca\x8a\x49\xe5\x5a\xb9\x96\xfa\xd2\x4e\x2a\xe3\x12\x1a\x12\xd2\xd3\xd3\x3b\xb2\x4f\x9c\x56\x9b\x9e\x49\x06\xad\x97\xd9\xfc\x7b\x93\x57\x52\xd3\xc6\xc4\x8d\xe9\x07\x23\x2c\x44\x4b\x62\x49\x0e\xf1\xec\x96\x3e\x1b\xb1\xd7\xdb\xff\xbe\x1f\x4c\x38\xea\xc9\x27\xa4\xff\x3a\xaa\xff\xbf\x99\xac\x80\x5e\xc5\xab\x5f\x21\x63\x61\x41\x46\xd3\x38\x36\x8a\x60\x9a\x47\xc9\x94\xdb\xa8\x55\xa5\x66\xa9\x0b\x42\x19\x31\x5d\x83\x3c\xaf\xad\xf2\xff\x26\x41\x5b\xdb\x41\x1c\xec\x2b\xf4\xfb\x7c\x2e\x8d\xfb\x01\x8d\xe1\xf8\x4f\xaf\x13\xe3\x48\x16\x14\xda\x62\xea\xdf\x0c\xbf\x0d\xb7\x6f\xe8\xf0\x45\x6a\x10\x4d\x41\x45\xe7\x40\x1c\xec\x2b\xd4\xbe\x35\x56\x9c\x6d\x4b\x24\x81\xaf\x5e\x47\xf3\xc0\xf4\x22\x8d\xb2\xe2\x97\xf2\x9b\xa1\x6f\xd4\xc4\x43\xb6\x3c\x84\x36\x39\x50\x41\x30\x10\x07\xfb\x0a\x19\x49\x94\x0e\xf9\x22\x0d\xfe\xf4\x2e\xf9\x11\xb7\xf1\x12\x8f\x26\xff\x19\x07\x4f\x3a\xce\xe0\xe7\xf0\x42\xad\x2f\x17\x7d\xe3\x3a\x88\xb0\x20\x2e\x40\x52\xe2\xff\xef\x38\x5c\xd5\x8f\x49\xfc\x32\x06\x25\x21\x8c\xd3\xef\xa6\xc8\x81\x18\xb5\xc3\xec\x4d\x65\x49\xfc\xe8\x13\x1a\xda\x3d\xe4\xe7\xdf\xec\xa1\xe3\x70\x00\x0e\x36\x24\x79\xa2\x27\x85\x43\xdf\x69\xc0\x1a\x59\xc5\xf4\x44\xde\x28\x45\x96\xf1\xf5\xf9\xad\x16\x32\x69\xa1\xbb\x49\xe6\xc4\x8c\xaa\xca\xf3\x88\x21\x09\xe8\x4f\xf2\xaa\x0c\x4d\x5a\x53\x3d\xe8\x43\x64\xa2\x18\xa9\x71\x55\x9e\xc4\x4d\x38\xa5\x0b\x24\xce\xc9\x66\x3b\x45\x24\x46\xd1\x65\x39\x26\xa1\x50\x3d\x1f\x10\x07\x93\xc1\x40\xf9\xbd\x9c\xc7\xc7\xa9\x6a\xb3\x82\xb3\xa4\x56\x8a\x45\x7a\x59\xcb\x36\x22\x1d\xc1\x23\xfc\xae\x3f\x3f\xeb\x5e\x55\x86\x42\x17\x73\x81\x38\x98\x0c\x0c\xa3\xdc\x6b\x4f\xca\x08\x76\x5c\x47\xaf\x15\xbc\xc2\xe5\xc0\x2f\xe8\xa2\x41\xcd\xfc\x10\xce\x31\xae\x62\x37\xcf\x35\x67\xea\x80\x08\x0b\xe2\x60\x32\x58\xfc\xfa\xfe\xb2\xed\x43\xd0\x7c\x80\xe4\x5b\xd4\xdb\x17\x44\x75\x5d\xf5\x49\xa6\x65\xba\x0e\xfa\x96\x1b\xd2\xe3\x25\xfd\xe3\xd0\x1b\x01\xe2\x60\x32\x3c\xff\x7e\x2f\xeb\xc8\xa7\xf8\x4f\xd2\xd7\xcc\xb2\x99\x08\x8d\xe9\x63\xe1\x17\x96\xef\xe4\xc5\x64\xb1\x3a\x6c\x4e\x3c\x1c\xb1\xa1\xbe\x05\x71\x30\x19\xae\xdb\x34\x4e\xb6\xbb\xa9\xc4\xb3\xeb\x60\x52\x1b\xe7\xbf\x97\xe5\x2b\x0f\xfd\x12\x74\xe6\xa7\xbc\x2f\xbc\x64\x2c\xde\xe5\x10\x87\x90\x01\xf4\xf9\xba\x2a\x43\xf7\x43\xff\xe8\x20\xc1\x32\x94\x38\x7d\x8c\x8f\x67\xae\x28\x3d\x35\x58\xf9\xba\x15\x39\x36\xda\x3b\xe1\x9f\xc8\x0f\x45\x9f\x68\x22\x1e\x18\xc4\xc1\x64\x08\xd8\xec\x41\xb9\xc7\x53\xce\x58\x51\x5b\x68\xd2\x6e\x39\x32\x1d\x11\x20\xb0\x6f\x30\x12\xb0\x29\xb0\xc9\xa9\x8c\x5e\xca\xec\x81\x08\x0b\xe2\xe0\xcb\xcc\x56\xfe\x97\x7f\x58\x0e\x83\xa7\xfa\x13\x08\x2b\x45\x09\x38\xb8\x3d\xea\xbb\x91\x16\x43\x48\x7e\x3e\x6d\x32\x1a\xfb\x49\x05\x9d\x36\x04\x71\x30\x19\x96\xa5\x59\xdf\xaf\x5d\xc4\x8f\x33\xa3\xbb\xac\x0f\x94\x30\x0b\xeb\xf9\x88\x26\xa9\x55\x51\x4a\xf0\x84\x79\x9c\x77\x68\x39\xa0\x21\xc2\x82\x38\x98\x0c\x85\x29\x8d\x18\xcd\xa4\xfb\xb2\x72\x46\x35\xf5\xb7\x76\xe2\xe3\x1f\xd0\x3a\x44\x0c\x8c\x26\x5f\x4f\xf2\x8d\x41\xfa\xad\x33\x0a\xed\x53\x00\x71\x30\x19\x32\xbc\x8f\xb5\x79\xb2\x6d\xfa\x95\xbb\x0d\xe5\xdd\x56\x1f\xbc\x7b\x7b\x40\x3d\x8b\xce\xe3\x99\x6f\x4a\x60\xed\xfd\x22\x94\x39\x00\x21\x03\x68\x60\x71\x55\x06\x53\xfc\x65\xb3\x33\xfe\x94\xb9\x6c\xa2\x60\x99\x00\xe1\x17\x8f\xfc\x8b\xdd\x53\xc2\xb4\xf1\x2b\xf6\xaa\x82\x88\x6c\x95\xef\xf7\x42\xdb\x94\x01\x1c\x4c\x86\xd8\xd3\xef\xc2\xce\x78\x3f\x0b\x39\x8a\x8b\x9b\x9c\x8d\xd2\x34\x02\x25\xd8\x8d\x4d\xdd\xea\x49\x0f\x0a\x69\x9d\x43\xc6\xee\xba\x23\xc2\x82\x38\x98\x0c\xdb\x5a\xc7\xf7\x26\x7d\x29\xdc\x71\xa2\x58\x76\x50\x5a\x88\x7e\xb1\x6d\x87\x71\x10\xa9\x8a\x30\x1c\xff\xed\x4e\xe2\xb8\xcd\x22\x8f\x08\x0b\xe2\xe0\x57\xfd\xff\xe0\x70\x89\x60\x91\xa4\x64\x53\x5c\x77\x4e\xe0\xbb\xa5\xed\x2f\x73\xad\x30\x4a\xf1\xa1\xb0\xd7\xe7\xc1\x22\x77\xf9\x68\x28\x3f\x0f\xe2\x60\x32\xec\x4a\xf9\xe0\x93\xc9\x36\x7c\x2f\x3b\x78\xfd\xe0\x9d\x7c\x65\x86\x56\xcb\xb1\x77\x1a\x16\x59\xbc\x75\x4f\x30\x47\x84\x75\x2b\x94\x8d\x04\x71\x30\x19\x9a\x39\x2e\x26\x8a\x3c\xd4\x4c\xc5\x90\x43\xc9\x28\x9a\x5e\xe1\xce\x5c\xf3\x91\x23\x11\x1c\x2f\x5b\xe1\x57\xbe\x70\x3f\xc0\x6c\x80\x12\x50\x80\x21\xdf\x55\x19\xc2\xd7\x51\x0d\xb3\xad\x94\x49\x16\x7d\x89\xe5\x79\x72\x0e\x83\xe5\xdc\x78\x7d\x3c\x5a\x3b\x2e\x78\x28\xf3\xb2\xc6\x7e\x9d\x41\xd5\xe4\x40\x1c\x4c\x86\x64\x7c\x83\x50\x76\x8d\xe5\x5a\x93\xe5\x01\x59\xfa\xdb\x1c\x06\xfe\x8a\xc7\x5b\xb5\xa1\xdb\x6d\xe4\x75\x18\x35\xcd\x4e\x2a\x4c\x88\xb0\x20\x0e\x26\x03\x0a\x3d\xa3\x95\x6d\x84\xe2\xde\x3a\x32\x6b\xaf\xd0\x51\x06\x53\x0a\xb2\xff\xcd\x6f\xb9\x34\xd7\x8c\xd9\x2d\x7c\xeb\xa3\x95\xc9\x11\x61\x41\x1c\x4c\x86\x75\x8f\x6f\x0b\x85\x05\x69\x5a\xd7\x23\xfd\xaa\xd8\x50\x30\x24\x2e\xf8\x6e\xca\xb9\xbc\x8e\xdd\xf0\xc8\x17\xee\xc6\xf0\x3d\x83\xc2\x82\x38\x98\x0c\x9d\x53\x81\xa9\xcf\x58\x3a\xd6\x33\xae\x9f\xf3\x89\xdc\x9f\x94\x5a\x9c\x10\x12\x3e\x8f\x9c\x49\x1b\x6b\x7c\xf3\xda\x21\xc8\x0d\x2a\xa3\x00\xe2\x60\x32\xdc\xcb\x4e\xdb\xab\x71\x7b\xdf\xd9\xdf\xd3\x2e\x3e\xa4\xc1\x57\x6a\x91\x51\x8e\xf3\x57\x0a\x29\x7c\x29\xcc\xb0\xea\x8f\xf0\xaf\xdb\x08\x19\x40\x83\xf1\xff\x52\x5e\x58\xb4\xc0\x15\x55\xa1\x67\x15\x19\xf9\x6d\xdc\x7b\x3f\xce\x46\x6b\xbe\x2e\xca\xc7\xe8\x91\x0b\x6d\xfa\x6c\x93\x2a\x59\x0b\xd0\x41\x2c\x10\x07\x93\x61\x6e\x5c\x26\xcc\x65\x36\xa4\xaf\x3b\x95\xfa\xc6\xa6\x3b\x1a\xea\x9b\x02\xb5\xa1\x53\xa1\xd9\x16\xa9\xa1\xa4\x51\x97\x97\x19\x50\xf7\x82\x38\x98\x0c\x03\xae\xd9\xc6\x2f\x6a\x4f\xec\xdb\xce\xdb\x63\xe8\x66\xd6\x09\x0a\xf0\x28\x2f\xfe\x50\x22\xbf\x95\x7f\xbd\x3e\xc5\xda\xab\x77\x88\x08\x0b\xe2\x60\x32\x0c\x3e\xe6\xf9\xca\xcc\xc7\x9d\xdd\xdd\x34\x9a\x45\xe4\xb9\x49\x4b\xf2\x90\xdc\x22\xa8\x33\xd2\x71\x7f\xef\x8f\x50\xba\x25\xc3\x1b\x44\x58\x10\x07\x93\xe1\x83\x21\xab\xb9\xad\x43\xc9\xf7\x53\x8f\xec\x15\xc7\xdd\x7b\xad\xd6\x21\x8f\x25\xa4\x65\x35\x51\xaa\xda\x38\x17\xe2\x8c\xc3\xa1\x45\x17\x10\x07\x93\x61\xf4\xc7\xa0\x17\x11\xd7\xa3\x93\xb2\x4f\xc4\x96\x07\x76\xf7\x8e\x38\x12\xd2\x8d\xc6\xdf\xa3\x2c\xbd\xcc\x0a\xdc\xfc\x16\xf8\x84\x06\xba\x4f\x01\x30\x4d\xba\x2a\xc3\xde\x82\x62\xb3\x8c\x54\x56\xcb\x6e\x77\xe0\x4b\x9f\xf4\xaa\x97\x28\x8e\x2f\x55\x8d\xf4\x99\x8c\xc7\x30\xb8\x43\x03\x9a\x6a\xa0\x57\x18\xc4\xc1\x64\xe8\x1e\xb9\x31\xb0\xc5\x7f\xa3\xf0\x01\xef\x10\xca\xdd\xa3\x5b\x0d\xdc\xef\xf9\xf9\xfe\xba\xbf\xf3\xc0\x11\x25\xab\xb6\xc2\xb0\x85\xee\x09\x07\x71\x30\x19\x4a\xc4\xd8\xb3\x5f\x52\x50\xb0\x4f\xcf\x8a\x85\x7c\xf3\x4b\xe0\xae\x2d\xae\x17\x44\xf3\x3f\x09\xfe\x61\xac\xc8\x6c\xda\x51\x23\x80\x08\x0b\xe2\x60\x32\xa4\x45\x62\x48\x0f\x8e\x65\x86\x71\xf4\xad\xed\xec\x98\xe3\x15\xf7\x54\x1b\x31\x75\x9e\xba\x76\xef\xab\xbd\xba\xad\x43\x25\x0c\x6d\xcb\x05\x71\x30\x19\xf2\xa3\xde\x0b\xcf\x70\x6e\xde\xbd\xf8\xde\xd9\x97\x12\xdd\x19\x80\x62\xb2\x58\xe9\xea\xe0\xf9\x44\xd6\x44\x81\x42\xf2\x1c\x7d\x0b\x3a\x36\x06\xe0\x60\x32\xf8\x47\x77\xcb\xae\x49\x26\x5e\x7b\x52\xe0\xc9\x30\x77\x11\xdf\xd0\x10\xbe\x3f\x77\x2f\x21\xef\xaf\x78\xd9\x9e\x2e\xe9\x6a\x54\x10\x42\x06\xd0\x04\xf6\xaa\x0c\x33\x53\xd5\x9e\x11\xca\xcd\x54\xd8\x9e\xbd\xd4\xc1\x7b\xdb\xdf\x4a\x4e\xe5\x50\x8a\xae\x99\x8f\x48\x58\x18\x58\xde\x68\x2a\x86\x8e\x36\x81\x38\x98\x0c\x32\x5b\x75\x97\x4f\xbe\x12\x51\x78\x7d\xbb\xd3\xb5\x24\xca\x38\xdd\x18\xf7\x75\x74\xde\x40\xa1\x33\x5b\x8e\xbd\x2f\x92\x3e\x1c\xda\x84\x08\xe2\x60\x32\x5c\xfb\xfe\x65\xa4\xfc\x98\x74\xd1\xd5\x3f\x6c\xe4\x8f\x00\xae\xa4\x2a\x99\xbd\x0d\x9a\xf7\x76\xf1\x65\x52\x7b\xbe\xcd\xad\x7b\xd0\x49\x21\x10\x07\x93\x41\x6a\xc4\x26\x50\x1c\x99\xdb\xed\x41\xe0\x64\xcd\xb5\xdc\x06\x9b\x80\x06\x2e\x66\xf9\x86\xef\x32\x97\x8c\xc5\x0f\x7d\x3d\x95\x39\x11\x61\x41\x1c\x4c\x86\x0c\x2b\xb1\x44\x14\xa2\x76\x9e\x05\x9f\xd7\x04\x1a\x2b\x67\x4d\x28\x14\xc8\x46\x9c\xb1\xaa\xb2\x16\xc1\xb8\x75\x58\x62\xa2\xd6\x88\xb0\x20\x0e\x26\xc3\xc3\xe4\x87\xc1\xf6\x25\x45\x33\x3a\xc7\xc1\x71\xbb\xae\xf6\x01\x04\xfb\x5b\x4c\x29\x15\x26\x72\xef\xac\xf4\x4c\x6b\x3f\xd0\x9c\x41\xa9\x69\xd0\xa2\x22\xa2\xd6\xf4\x95\xd4\x74\x8e\x87\xa7\x89\xde\x86\x66\xf8\xdc\x58\x61\xa2\x41\x7f\x7e\x51\x8c\x4a\x4e\xd8\x05\x96\x75\x46\x52\x8e\xe7\x3e\xd5\xe1\xcf\xad\x7f\x5f\x7a\xb9\x92\x9a\xd6\xbd\x7f\x7b\x01\x4d\x1b\xc5\xb1\x65\x97\x9f\x79\x9f\xa3\x6d\xd1\xfa\x20\x04\x59\xf5\xd3\xdb\x22\x0c\x92\xe1\xf3\x3e\xb5\xbd\xa4\x7f\x6f\xf2\x4a\x6a\x5a\xc4\xad\x61\x27\xe9\xee\xb9\x23\xf6\x73\x1e\x3c\x03\x06\xb9\x89\x8e\xdb\x76\x7e\xe9\xec\xb8\x31\xd9\x39\x0e\x4e\xd4\x9b\x2a\x1a\xff\x9b\xd5\x1e\x50\x5f\x5e\x7d\x25\xd5\x31\xb3\x1f\x5f\x2b\x20\x94\xf3\x0a\x14\x8c\xc6\x9a\xc9\xd4\x1e\xb4\x63\xc5\xcb\x1b\xdc\x5d\x64\x45\xbb\x67\x14\x4e\x1d\xcf\x8a\xd0\x06\xc4\xc1\x5e\x49\x5e\xe4\xbf\x2e\x73\xb9\xd4\x15\x8a\x1b\xfb\xd9\x2b\x6f\x68\xd2\x8f\x63\x26\x15\x62\xf3\xf6\x22\x3a\xab\xd2\x2e\x18\x3f\xfc\xfe\x81\x08\x0b\xe2\x60\xaf\x24\x9f\x60\x4b\x5f\xd9\x25\xa9\xb2\xa6\x2e\x89\xc3\x22\xda\xf3\x0e\xde\xe5\xbb\x2f\x2c\xea\x8c\x66\x16\x22\x2d\x07\x6b\x3e\x90\x41\xb3\x03\x10\x07\x7b\x25\x1b\x5e\x6d\xd8\x53\xd4\x4d\x2f\xaa\xad\x2e\x5d\x08\x91\xbc\x8e\xe6\x9c\xe1\x74\x7d\x81\x71\xeb\x6d\x6c\x66\xab\xd5\xb3\xbd\x16\x37\x28\x0b\x07\xe0\x60\xaf\xa4\x4a\x59\x65\x1f\xb2\x60\x07\x0f\xf7\xe0\x5b\xfa\x6b\xe3\x12\x7b\xe1\xa9\x51\xda\x95\x04\xbe\x37\x84\x2d\x25\xe6\x34\xb5\x2d\xa0\xbd\x2d\x20\x0e\xf6\x4a\x9a\xaa\x4d\xa6\x71\xe3\x99\x59\xd0\xb1\x59\xc8\x88\xd9\x57\x7d\x37\x8c\xae\xe2\xbe\xfc\xc0\xaf\x11\x72\x1d\x5f\xbb\xfa\x80\x7c\x07\xf1\xff\x0c\xb2\xfc\xaa\x0c\x91\xf6\x93\xab\xd6\x07\x7c\x74\xe7\x58\x17\xe7\xb5\xb9\x4d\x8f\xb9\xe9\xb5\x3b\x96\x50\x54\x14\xa8\x38\x1a\xde\x3a\x7f\x0e\xbd\x83\x78\x60\x10\x07\x93\xe1\x24\x1b\x79\xd3\xe2\x25\xbd\x02\x9f\xec\xc8\xa6\xdc\x23\xcd\xc3\xb7\x05\x24\xb5\x46\xde\x7f\x42\x8e\x2a\x07\xbb\x7a\x8e\x46\xb5\xa0\xad\xa0\x00\x0e\x26\x03\x76\xf5\x59\x9e\xd9\x03\xb4\xd2\xeb\xae\xa5\xb1\xb9\x93\xc2\x4c\x84\xe7\xcb\xad\x2d\x53\x04\x3a\xf9\x6f\x55\x9e\x70\xa0\x73\xb0\x23\xc2\x82\x38\xf8\x3e\xb2\xc1\x4d\x62\x4b\x79\xe4\x86\x3c\xc3\x33\x17\xc7\xe2\x77\x83\xf3\xc3\xe4\xa2\xdf\x4e\x63\xaf\xa1\x3b\x98\x1a\xf3\x8e\xe9\x40\x45\xf7\x40\x1c\x4c\x86\x57\x44\x21\x8d\x1c\xfb\x6e\x84\x69\x1a\xa1\x35\xfd\x14\x0b\x01\x51\x77\x85\x31\xf5\x7e\x3f\x93\xfb\x26\xba\x82\xdb\xf4\xa8\x16\x1a\x5a\x80\x38\x98\x0c\x9a\xb9\x95\xdf\xd1\x15\xd9\x1f\x60\x18\x60\xa2\xc8\x7f\xe8\x1a\xa9\xa7\xf5\x65\xd4\xba\xbf\x11\xfb\xe7\xb6\xc1\x5f\x69\xc1\x19\x6c\x84\x0c\xa0\xff\x9f\xab\x32\x28\xe3\x45\xa5\x5e\x2f\x9f\xe0\x3a\x4a\xc9\x59\x1f\x45\x62\x15\x15\xf8\xb5\xfa\xf5\xd5\xa0\xf1\xb0\x6f\x32\x6d\xd0\xdb\xb5\x19\x68\x53\x21\x88\x83\xc9\x60\x1d\x79\x5b\xea\x81\x30\xc7\x2c\x6f\xd4\x6f\x47\xbf\xed\x19\xa3\x98\x9b\xdb\x2c\x3f\x2b\xe7\xed\xa2\xe8\x32\x08\xa9\x63\x7c\xa1\x77\x0d\xc4\xc1\x64\xa8\x3b\xa5\x15\xd2\xe2\x2b\x1b\x24\x47\x0d\xe8\xf4\x0b\xab\xd6\x0b\xc9\x69\xe6\x95\xeb\x60\x11\x90\xf2\xe9\x3a\x91\x2e\xe3\x2b\x46\x84\x05\x71\xf0\x0b\x13\x8d\x58\xfa\x39\xa7\x77\x3f\x73\x37\x06\x39\xbb\x26\x77\x7f\xf4\x1e\x50\xda\x08\x08\xa1\x7e\x8f\x46\xa7\xd2\x9f\x1f\xab\x00\x6d\x12\x07\x71\x30\x19\x12\xc5\xcb\xfa\x6d\x30\xfb\xc7\x83\x71\xef\x27\x08\x1e\x71\xb4\x7d\xa2\x5a\xe6\x31\xc6\x36\xa8\x57\x9d\x33\x77\x7b\x9b\xec\x11\x8e\x08\x0b\xe2\x60\x32\x48\xc6\x49\xe1\xcd\x7f\x3f\x41\x31\xf3\x69\x45\x0a\x7f\xed\x4b\xe8\x5d\x9f\x81\x34\xc1\x25\xfb\x8b\x4d\xff\xce\xc7\xe7\x78\x2b\xcf\x11\x32\x80\x92\x91\x57\x65\x90\x1a\x89\x9a\x5f\xbe\x5e\xf4\xdc\x5a\x14\xa5\xeb\x65\x99\xf6\xa3\xf3\xb7\xab\xe1\xac\x11\xeb\x83\xf1\x82\x6c\xcf\x2b\x5d\x12\x67\xff\x6f\xd0\xf2\xff\xe6\xe0\x97\x1f\x25\x67\xbb\x8f\x39\x7b\x95\x1e\xdf\x28\x7e\xd6\x1f\x11\x1d\xd7\x6c\x23\xdd\x61\xcd\x47\xd2\x24\x71\x5e\xef\x10\xab\x50\x0b\x9d\x1e\x07\x71\x30\x19\x3c\xd7\x8a\xa4\x5a\xe2\x1b\xdb\x05\xec\xe4\x36\xdc\x1c\xad\x78\xdf\x60\xba\xbd\xca\xac\x7d\xdb\x4f\xda\x75\x9f\xfb\xb0\xba\x15\xba\x4e\x08\xc4\xc1\x64\x40\x2e\x46\x99\x2e\xf1\x3e\x9a\xe9\x5d\xb2\xa3\x9f\xe7\x78\x44\x8d\xfe\x88\x91\x58\xbe\x51\xa3\x29\x31\xca\xec\xd5\x3b\xe6\x03\x28\x91\x0e\xe2\x60\x32\x38\xe3\xf3\xcd\x2e\xa3\xc6\xdf\x41\x7e\x95\x29\x66\xb2\xf9\x78\xa3\x9c\x9d\x75\x79\xa1\xd5\x2f\xcf\x8c\x04\x93\xbf\xb9\x9b\xe4\xff\x4e\x4d\xd7\xa0\xc6\xaa\xe6\x9c\x1a\x2e\x9d\xf2\x27\xda\x78\x46\xf1\xc5\x5a\x44\x2b\x22\x9b\xcd\x8c\x47\xfe\x48\x51\xe4\x1e\xf8\xd1\x5e\xfb\x9f\xa9\xe9\x57\x69\x4e\xe1\x67\x03\x65\xb2\x12\x41\x4c\xd4\xc4\x9d\xea\x4e\x81\xc3\x8c\xf3\x26\xa2\xc3\xf8\xc5\x2f\xab\x62\x8b\x8b\x68\x59\xff\x03\x25\x93\xca\x90\xe6\x7b\xbb\xe5\xd2\x1d\xf3\xe4\x2e\xcf\x1b\xfe\xb3\xb9\x99\x61\xdd\x88\xdc\x33\xb4\xb7\x45\xbd\x97\x37\xcf\x5b\x2b\x61\xa9\x69\x50\xe4\xab\xa9\xe9\x55\xf4\x8e\x56\x76\x07\x34\xce\x3b\xd1\x6a\xf8\xf7\x52\x9f\x31\xb5\x95\xb8\x44\x12\xa1\x1a\x34\xd4\x86\x91\x91\x7b\x7c\x56\x1f\xfd\x0f\x74\x4c\xf3\xfa\xb8\xb5\xc9\xe1\x63\xdb\x82\x3b\xa1\x64\x77\x7f\xe8\xe6\xc6\x3f\xa5\x3c\xb4\xc7\x30\x7c\x9a\xb2\x77\xd6\x2c\x7c\x28\x0a\xa5\xa6\x41\x31\x11\xb5\xa6\xe1\xa9\xe9\x45\xac\xaf\x3d\xf5\xb2\x3b\x3a\x63\x5e\x37\x7e\x7c\xbc\x6b\x3a\xb9\x66\xe5\xcb\x9a\x1d\xfe\x3e\xd1\xdf\xe6\xc2\x93\x57\x00\x4f\xfb\x9f\x87\x7e\xbe\x57\x52\xd3\x4d\xed\x81\xe8\x75\x71\x8e\x2b\xea\x06\xab\x94\x45\x97\xec\xd7\x29\x75\xf2\x6a\x67\x48\xbe\x32\x47\x97\xfd\x79\xfd\xf6\xe3\xaf\xb2\x7f\x6f\xf2\x4a\x6a\x9a\x32\x9a\x8c\xba\xba\x41\xa6\x26\x33\x3b\x95\xcf\xa2\xcb\xce\xad\x32\xbe\xce\x5b\x15\xb9\xfd\xf8\xce\x89\x8b\xda\xed\x0e\x2c\xf9\x7f\x6f\xf2\x4a\x6a\x5a\x4f\x43\x93\x38\x71\x4e\x42\x20\xf2\xc7\x81\xa0\x4c\x52\x0b\x69\x9f\x87\x93\x18\x99\x32\xe3\xb2\x9b\x92\xf6\x48\xb5\xdb\xf9\xbf\xe7\xfc\x7d\xaf\xa4\xa6\x83\x0c\x5e\x0f\x7f\xe6\x26\x36\x2e\xc9\xa6\x10\x1f\xc2\x67\xa4\xfe\x13\x17\xaf\x4d\xa7\xdf\xcc\xf0\x44\x22\x2c\xd8\xef\xdb\x7a\xf8\xbf\x37\x79\x25\x35\xcd\x7e\x42\x6e\x14\x31\xab\x4b\x7d\x1a\xb6\xf0\x68\x13\x37\x96\x0d\xfb\xe4\xb2\x80\xe5\x7b\x6b\x96\xcc\x61\x87\x22\x77\x3e\x49\xe1\xbf\x37\x79\x25\x35\xdd\xf2\x78\x82\x3b\xf4\xe8\x25\xb7\x3d\x16\x41\xa1\xc9\x17\x92\x02\x74\x29\x6b\x74\xcc\x96\x73\xc2\xe5\x5e\xf1\x60\xc2\x64\xd3\xe0\x7f\x6f\xf2\x4a\x6a\xba\x2f\x88\xf3\x01\x6f\x92\x3a\x3b\x8b\xb1\xe5\x63\x62\x36\xa6\xd8\x81\xeb\xcf\x37\xf9\xbe\x8c\x74\x7a\xbb\xce\x9c\xe4\x7d\x16\xfd\x1f\x9d\x9a\x06\xbd\x8a\xff\x65\x65\x91\x94\xc1\x70\x82\x81\x80\x93\x85\xae\x95\x68\x2a\xe8\xf2\x86\x47\x5b\xd0\x5c\x46\x44\x1a\x7a\x96\x99\xa0\xaf\xec\x33\x5e\x25\x68\x65\x11\xc0\xc1\xbe\x42\x67\x46\x44\x37\xfd\x0d\xba\xa3\x04\x0e\x3f\xf2\x6b\x25\x79\x75\x53\xa2\x8e\x63\x9a\x21\xd9\x75\xf4\x6c\xcd\x0a\xaf\x98\xec\x3c\x45\x84\x05\x71\xf0\x9c\x43\xd6\xf0\xdb\xc1\xcb\xbc\x5f\xc8\x61\xbc\x1f\xb6\xfa\xd0\xc2\x8d\x32\x1e\x3f\x94\x43\xf1\xfd\xed\xe2\xfb\x0d\x35\x8f\x52\xa0\x10\xca\x39\x00\x38\xf8\xe5\x9c\xd7\xa3\x06\xdd\xc5\x9f\xe6\xf2\x3c\x7b\x91\x9f\x81\xb4\x9d\xd7\x4b\xcc\xdf\x41\xd5\x27\x71\x5c\x55\x4b\x1d\xb6\x9f\x3a\x0d\x2d\xa2\x80\x38\xd8\x57\xe8\x6d\x9f\xae\xaa\x75\xc1\xc9\xba\xf0\x65\x6d\xdb\xb4\xcf\xfb\x8f\xbf\x3e\x05\x06\x3f\x76\x95\x42\x8b\x88\xba\xfb\xe5\x8f\x69\xf5\x5f\x44\x58\x10\x07\xeb\xdb\x17\xe6\x31\xab\xd9\xad\xd9\x6d\xd1\xa9\x79\x32\xb3\xe9\x1a\xde\x33\xe7\x04\x53\xd5\x79\x2a\x46\x7c\x36\x3b\x14\x17\x6e\x27\x50\x75\x38\xd0\x9f\xe4\x55\x19\xb4\xaa\xeb\xdf\x9e\x24\xb2\xde\xe0\xe3\xce\x90\xa5\x58\xb4\xfd\xf6\x4a\x32\x1b\x73\x49\xd7\xe7\x66\xe5\x63\xa4\xc8\x79\xa1\x4d\x12\xc4\x03\x83\x38\xd8\x03\x7f\xaa\xb8\x89\xf5\x75\xcd\xcd\xec\x32\xf9\x46\x38\xfe\x8c\x42\xf3\x47\x0a\x4f\xce\x99\x50\xa4\x4c\x26\xfc\xe6\x43\x8b\x1b\x0f\xa0\x59\x05\x88\x83\xc9\xb0\xf7\xf8\x51\x9d\x0e\x95\xc6\x26\xf3\xf9\x17\xbf\xf2\x85\xbf\xa7\xe2\xc8\xf1\xf9\x06\x6a\x65\xbc\x17\x3d\x4e\x74\xc1\x77\x69\x25\xa1\x75\x50\x00\x07\x93\x41\x2e\xf1\x64\x60\xc6\x62\x5c\x6d\x4d\xb3\x73\x67\x7f\x20\xfe\x54\xf1\xe4\xd2\xae\xf5\x28\xe7\x11\x97\xa0\x9e\x82\xa4\x7f\xf7\x4b\x44\x58\x10\x07\x93\xc1\x89\x89\xf0\x17\x5e\xa2\xbf\x18\x47\x9a\xa9\x62\x30\xa1\x6b\x94\x5a\x99\x9f\xc6\xdf\x19\x21\x0f\x13\xf7\x6a\x6c\xbc\xed\x59\x68\xd7\x2f\x88\x83\xf5\x2d\xe3\x49\xea\x77\xc1\x4d\x8d\xd2\xe9\x20\xaf\x8e\x82\xde\x5a\x4c\x02\x77\x0a\x5a\xa4\x68\x3b\x2b\xfb\x73\x83\xc6\x55\x7d\xae\x05\x84\x0c\xa0\xcf\xd7\x55\x19\xa8\x15\x09\xd9\xbf\x3d\xd6\x93\xbb\x67\xea\x75\x71\x31\x6f\x20\xbe\x9d\xf3\x26\xd2\x37\x21\x22\x21\x65\xf6\x25\x43\xa8\x24\x29\x34\xd5\x06\x71\xb0\x07\xee\x2b\xaf\xe4\x52\xba\x8e\x99\x3f\x73\x18\xda\xb3\x87\x12\x8e\x9c\x95\x25\x19\x16\xe0\xee\x22\x2f\x1d\x2f\x64\xb0\xa6\x46\x02\xed\x53\x00\x71\x30\x19\xf0\x79\x77\x62\x8c\xba\xd3\xff\x72\xc6\x13\xa2\xe3\xcd\x5f\xc7\xa5\xd0\x4d\xcc\x75\x94\xfe\x94\x97\xa4\xbb\x90\xc5\x7a\x87\x65\x07\x11\x16\xc4\xc1\x64\xf0\x9b\x3c\x19\x8c\x7d\x66\xbf\x23\xcb\x89\xa9\xf2\x1d\xdd\x83\x4e\xee\x82\x3d\x30\x92\x53\xbf\xd6\x23\xe5\x79\xf3\xbb\xb6\xd0\x6d\x44\x58\x10\x07\x93\xa1\xe3\x45\x28\x4a\x40\xb3\x1c\xef\x41\xd8\x42\xe6\x2b\x06\xf1\x7c\xd6\xf7\x45\x8c\x95\x78\xea\x01\xc1\xfb\xee\xee\x4c\xa4\x29\x50\x09\x6b\x10\x07\xeb\xdb\x56\xfe\xd1\x04\xe4\x10\xdc\x80\x16\x87\x5f\xab\x9c\x37\x34\x97\x6f\x9a\x92\x7c\x74\x90\xfc\xae\x3e\x45\x78\x16\x3a\x7e\xd3\x46\x04\x21\x03\x68\x60\xf1\x5f\xea\x46\x7a\x1a\x2d\x79\x2b\x3d\x57\x11\x39\xf9\x39\x20\xb8\x6b\x96\x98\x64\x37\x20\x56\xb4\xd4\xb8\xf6\x24\xc5\xe1\xe2\xeb\x8e\x30\x74\xd5\x15\x88\x83\x3d\xf0\xa6\xfc\xa7\x1a\xa4\xe5\xec\x80\xe3\x68\xcd\xb6\x02\xbf\x43\x6b\x06\xdd\x10\xba\x2f\x2f\x44\x3f\x3f\xa5\x59\xda\xdf\xa6\x1f\x6d\x43\x84\x05\x71\x30\x19\x30\x8a\x1e\x3b\xbf\x24\xbf\x95\x75\x43\x25\x94\xd8\xee\x96\x4c\x4f\xdc\xa8\xdc\x9a\xfb\xdb\x3d\xe1\xfa\xa0\xbe\x0c\x51\x8e\x8e\x67\xd0\xd1\x53\x00\x07\x93\xe1\xd2\x34\x89\x0c\x8f\x9b\x48\xa4\xf1\xfb\x70\x35\x49\x52\x69\xd2\x1d\x3b\x5a\x9b\x59\xfc\xf3\xfa\xda\xfc\x4f\x51\xb2\xaf\x33\xa1\xaf\x0f\x88\x83\xc9\x90\x56\x70\x6b\xf4\x25\xe1\x8b\x8b\x55\xf1\x80\x43\x1f\x2c\xd3\x10\x8e\xa2\x0e\xb1\xea\x78\xa9\x8c\x68\xbe\xc1\x89\x6a\xd5\xb3\x4e\x28\x95\x01\xe0\x60\x7d\xfb\xa4\xf6\x3e\xeb\x13\x9a\x1c\x3a\xa6\xad\xfb\x6a\x0f\xfc\x9d\x58\xed\xb7\xfb\xf0\x6c\x7a\x53\xee\x69\x53\x61\xfa\xc4\xe8\x30\xdb\x21\x64\x00\x0d\xf9\xae\xca\xf0\xb0\xf6\xcd\x74\x59\x97\xed\x6a\x2b\xea\x29\xb9\x74\xdd\x07\x23\x5b\x3c\xff\xf8\x1a\xc5\x0f\x0e\x82\x45\x77\x51\xa5\x71\x63\xcb\x11\x0f\x0c\xe2\x60\x0f\x9c\x5f\x1b\xd6\xa6\x8e\xba\x7b\xf6\xe2\x66\xaf\x8e\x07\x9b\xee\x41\x0a\x21\xba\x0c\x9e\x6a\x3b\x0e\x7a\x8a\x97\x13\xcf\xfa\x2e\x3a\x94\x7b\x01\x70\x30\x19\x02\x0a\x5f\x91\xab\x96\x4d\x25\xdd\x9e\xcc\xdb\xe9\x66\xba\x2f\x82\xd6\x58\xcb\x86\x61\x53\x17\xc0\xf5\xd4\xdd\x59\xd0\x9c\x13\x5a\xc5\x07\x71\x30\x19\x78\x39\x25\xef\xbf\xec\x14\x79\xb1\x92\x89\x46\xc7\xcd\xa6\xc9\x4b\x4c\x15\xaa\xeb\xcb\x9d\xba\xa5\xd2\x88\x59\x89\x92\xf7\xa3\x1e\x5a\x8e\x05\x70\x30\x19\xce\x58\xeb\x39\xcc\x9d\x04\xf6\x7c\xde\xdf\x91\x60\x52\xd6\x19\xd9\x69\x54\xde\xc3\x6d\x61\xfd\x8c\xe6\x1b\x3e\xba\x2c\x51\x02\x15\x75\x07\x71\xb0\xbe\x95\xbb\x95\x87\x67\xe8\xcf\x8f\xf3\x10\xd3\xcd\x92\x80\x11\x9b\xac\xe8\xef\xe7\x57\xcc\xd5\xd5\xa1\xf4\xa4\x6d\x5d\xaa\xb5\x8e\xbe\x08\x19\x40\x83\xf1\xab\x32\xf4\x15\x7b\xfe\x6a\x62\x89\xaf\xa0\xf9\x7c\x91\x91\xff\x0b\xed\x0f\xe6\xe7\x08\xaf\xb3\xdf\x44\x58\x97\xb9\x3b\x68\xef\x42\xe7\x03\xa1\xff\x73\x00\x07\x7b\x60\xb5\xac\x59\x54\xac\x8a\x62\xa9\x6b\xda\xf9\xd7\xb5\x06\x64\x25\x29\xd8\x86\x45\x75\x19\xdb\xba\xec\xf6\xd4\xb1\x2e\xf0\xb4\x07\x11\x61\x41\x1c\x4c\x86\x54\xe3\x56\xba\x7b\x87\xa4\xfb\x19\x5d\xc4\x74\x99\x1e\xb6\xe3\xed\x9b\x7a\xbf\xcd\xd4\x24\x1b\x2f\xd5\xe6\x2e\x35\xa6\xb9\xa1\x2d\x93\x20\x0e\x26\xc3\x4d\xc3\xb4\x3f\x8b\xef\x5b\x62\xad\x78\xfd\x05\x46\x63\xe4\x28\x9d\x4a\xa2\xb3\x25\x28\xbe\x11\xaa\x33\x6e\x04\x3d\xa8\x9f\x82\x3a\x01\xc4\xc1\x64\xb0\xc0\x4e\x5e\x2a\x52\xf4\x89\xa9\x1d\x2e\xab\xc6\x57\xdb\x8b\x74\x48\x5e\x69\xb7\xb8\xc9\x96\x3d\x90\xe6\x46\xe8\x61\xf3\x14\x3a\x20\x0a\xe2\x60\x7d\x7b\xdf\xce\xd7\xf5\x44\x76\x84\x47\x90\x87\x4d\x06\x15\xe3\x84\x33\x58\x33\xfa\xcd\x69\x51\x05\xda\x5c\xdb\x9f\x87\x44\xd2\x2a\xd0\x4d\x80\xa0\x69\xd2\x55\x19\x7c\xc2\xb0\x4d\x2e\x42\x68\x27\x71\x9a\x67\xf5\xf4\x94\x7b\xcb\x6f\xce\xf3\xde\x9d\xad\x7e\x8e\x9a\x6a\x2f\x72\x7f\xbd\x45\x0a\x0b\xf1\xc0\x20\x0e\xf6\xc0\x5c\x0d\x3d\x76\xcc\xba\xba\x84\x71\xfc\x2f\x6f\x5d\xd4\xc5\x1b\x49\x3b\xde\x39\x4a\xba\x6d\x72\x87\xd7\xe6\xb8\x23\x3b\x83\x0f\x4a\x1b\x82\x38\xf8\x41\x2c\xf9\xe1\x87\xae\xc4\x53\x8a\x7e\xf3\x4b\xca\xde\x73\x9b\xa5\x38\xd3\xf3\x0a\x71\xce\xb6\x99\xb9\xb7\xc8\xc6\xcd\xb0\x64\xd4\xa0\x83\x58\x00\x0e\x26\xc3\x8f\xdb\xd5\x86\x84\x04\x4e\xcf\xe4\x6c\xa2\xeb\xe5\x2b\x9f\x0f\x4b\x3c\x67\x0e\xc4\x0b\x0c\x45\xf9\x1d\x87\xde\x92\xe8\xa8\x5e\x8d\x08\x0b\xe2\x60\x32\x64\xe6\xdb\xbe\xb3\xce\xaf\xa0\x17\xed\xac\x31\x18\x9a\xfc\xd0\x1c\x34\xe6\x6c\xad\x5b\x1f\x5a\x4b\x45\xee\x9f\xef\x1c\x62\x7e\x89\x08\x0b\xe2\x60\x7d\x3b\x1d\x7c\xb6\xad\x7f\x84\x99\x80\x3d\xa5\x5e\xbe\x57\x44\xf9\x69\x8e\x45\xfd\x5b\xc6\xf2\x17\x4c\x92\x40\x59\xcd\x07\x85\xfa\x9d\x08\x19\x40\x13\xd8\xab\x32\x1c\x8d\x2b\x39\x7a\xc9\x22\xbf\x6e\x52\xec\x0d\x88\x0e\xe3\xce\xd4\x53\x28\x70\xf5\xb4\x53\x2b\xf2\x32\x16\xc8\xb5\x0a\x68\xcf\x40\x3c\x30\x88\x83\x3d\xb0\x2c\xc3\x75\x1d\x8e\x4e\x57\xde\xd8\x90\x64\x89\x3e\xad\xcb\x98\xe9\xf1\x51\xa2\xae\x51\xe2\x8f\x5f\x3f\x0f\xc7\x13\xac\x90\x41\x03\x48\x10\x07\x93\xe1\xdc\xd2\x53\x87\x35\x7d\x8b\xe3\x9c\x47\xea\x40\x4b\x3e\x94\xe0\xee\xf3\xdf\xe9\x9f\x56\x9e\x26\x87\x7c\x99\xd6\xaa\xca\x28\x86\xfe\x70\x40\x1c\x4c\x06\xf4\x7c\xca\x98\xcd\x27\xaa\x3a\xca\x04\xa8\x81\xcf\xb2\x23\xed\x8e\x6d\x5f\x09\x29\xa6\xd6\x29\x06\x4c\xdd\x1a\x30\xc6\xef\x84\x6e\x25\x03\x71\x30\x19\xe4\x9d\x7d\x08\x6a\x56\x59\x93\x87\x90\xe6\x95\xb7\x84\x12\x47\x2d\xb7\x8e\xb3\x14\x63\x9b\x5c\x70\xb1\xc9\xf0\x1a\x03\xd6\x21\x19\x40\x1c\xac\x6f\x7b\xb0\x64\x97\xf5\x03\x3a\xdb\x34\x09\x3b\x87\x09\xff\x50\x3f\xa1\xaa\x51\xc2\x71\x64\x10\xaf\x53\x90\xf5\x9e\xf8\x78\xd9\x30\x05\xa5\xa6\x41\x8b\x8a\x88\x5a\xd3\x57\x52\xd3\x03\x77\x69\x8b\x39\x1b\xb0\x32\x13\x23\x35\x14\xac\xef\xf2\x74\xd5\xb0\x0b\x35\xfb\xde\x60\xf0\x93\xda\x38\x1c\xf8\x93\xee\xfc\xf2\xdf\x97\x5e\xae\xa4\xa6\x09\x5c\xca\x82\x89\x2f\x4b\xfb\xb1\x34\xfa\xbe\x39\x66\x9c\xab\x97\xa7\x37\x21\x39\x77\x49\x37\xfd\x1e\xbb\xb3\x9e\xac\x5d\xd4\xf1\xef\x4d\x5e\x49\x4d\xef\x7b\xfb\x0a\xe0\x46\xf3\x3f\xe6\xbd\xd8\x7d\x58\x10\xde\xf4\x28\xcf\xef\x79\xd1\xba\xe1\x41\x38\x61\x14\xea\xcf\xa1\x7c\xc1\x7f\xbd\x62\xf1\xd1\xff\xb7\xbe\xbc\xfa\x4a\xb2\xd4\x63\x7b\xf4\x8b\x33\xd9\x53\x77\xe1\xa0\xcb\xa3\x49\x53\x4e\x95\x6f\x09\xe4\x11\x1b\x29\xaa\xa6\x72\x9f\x1d\xaf\xe4\x21\x23\xb4\x01\x71\x30\x6d\x24\xf3\x6c\x70\x54\x54\x57\xde\xbd\xf3\x97\x17\x5a\x8c\x62\x73\x70\xe9\x5b\xca\x3f\xcb\x62\xac\x9c\xd8\x68\xe1\x4d\x9f\xa1\x84\x2a\xeb\x82\x38\xd8\x2b\xd9\xe1\xfd\x9b\xe2\xd5\xc3\x29\x37\x47\x8a\x6f\x29\x53\x39\x9f\xa4\xb0\xf0\x45\x12\x6d\xc7\x0d\x09\x31\x75\xbc\x03\x15\x64\x7f\x42\xd7\xa2\x81\x38\xd8\x2b\x79\x91\xdc\x25\x56\xfd\x9c\xc4\x42\xe1\x6e\xf5\x9f\xd2\xe8\x4f\x11\xf7\xa6\x19\x64\xb9\x66\xfa\x0a\x83\x72\x69\xf5\xb7\xc5\xbc\x44\x10\x61\x41\x1c\xec\x95\xc4\x73\x3c\x38\xdf\x72\x5c\xbb\xb4\xf1\x3e\x7a\xe6\x7f\x8d\x58\xe8\xba\x99\xe5\xb7\x2e\xcc\xc6\x0a\xdc\xac\x1a\xff\xbd\x46\xc5\x50\xe8\xf0\x1e\x80\x83\xf5\x2d\xc3\x24\x2b\x4f\x9a\x1c\xf5\x93\x88\x4b\x02\x8b\xf4\xc3\x76\xc3\x66\x9e\xe9\xfc\x8c\xfa\x7e\xc9\x1b\x9d\x5a\x58\xa8\xda\xfa\x9b\x88\xff\x67\x90\xe5\x57\x65\x38\xef\x13\x8a\x1e\xf9\x9b\x37\xea\xb9\x4b\x13\xc1\x4e\x53\xe6\x2e\x59\x83\x9d\x93\xbf\xe2\x5a\xdc\x89\xfc\xc7\x82\xfc\x51\xb4\x02\xf4\x8f\x07\xe0\x60\x0f\x7c\xc0\xcd\xbf\x57\xfb\x89\xd1\x39\x7c\xfd\xd5\x0f\x33\x6f\x4c\x5b\x42\xdc\x32\x8f\x65\x2c\x97\x9c\xb9\x1f\x91\xdd\x5b\xbd\xee\xd0\x9d\x4a\x20\x0e\x26\x03\x25\xa6\xc1\x78\xb3\x9d\xc7\x8b\xda\x95\xfa\x92\x07\x34\x63\xb8\xc8\xd4\xa7\xa5\x59\x2f\x4b\x72\xcc\xb9\x0a\x67\x46\x26\x2a\xa0\xc2\x31\x20\x0e\x26\x43\x2a\xff\x05\x6b\xb5\x8b\xf3\xd4\x47\x07\xf3\x11\xfa\x8a\x7b\x13\xb5\xb1\x5e\x51\xe5\x1c\x9c\xb9\x8b\x48\xea\x3a\x99\x81\x4c\x6b\xd0\x80\x10\xc0\xc1\x64\xe8\xea\x62\x0f\x56\x40\x55\x4e\x8f\x4c\xab\x36\xbe\x4f\x37\x59\x2b\xab\xab\x5f\x7d\x49\x14\x73\x44\x68\xf8\xd4\x7e\xe8\xa7\x1f\x74\x3b\x0f\x88\x83\xf5\xed\x0e\x21\xc1\x74\x5f\xd1\x9d\xb9\xb6\xf7\x27\xa1\x0e\x84\xa2\xa5\xd6\x41\x69\xb2\xba\x38\xdc\x5f\x35\x52\x6e\x98\x11\x4d\xf1\x43\x9b\x0a\x41\xff\x3f\x57\x65\xe0\x53\xb1\x16\xc9\xc3\x22\xa7\x7d\xc3\x3f\x68\xb2\x3b\x6b\x1b\xb4\x6f\x62\xd4\xd0\x7a\x27\x89\x11\xfb\xc1\x0f\x1d\x15\x42\xfa\x3f\xd0\x36\x10\x00\x07\xdf\x61\x8a\xbf\x46\xb0\x8a\x13\x37\x70\xa6\x4a\x76\x19\xea\xb1\x53\x75\x1a\x66\x52\x13\x32\xec\xac\x1d\x76\xdd\x3a\xe9\x4b\x68\x36\x34\xde\x06\x71\x30\x19\x92\x0f\xda\xf8\x13\x0a\xa9\x2b\x7e\x44\x8b\x3f\x22\x2e\xff\x5d\xf9\x6b\x86\x92\x19\xc9\xf6\xfb\xd2\x13\xb1\x7b\x3b\x1b\x74\x2b\x50\x79\x61\x10\x07\x93\xe1\xb3\x70\xe3\x0f\x3d\x1e\x01\x02\xbf\x88\x3b\xd8\x0d\x2f\x58\x9f\x37\x47\x1e\xc8\x55\xc5\x07\x04\x08\x8e\xa5\xc5\xf3\x1b\xf0\x42\xb7\x46\x82\x38\x98\x0c\x54\x34\xc2\x31\x4f\x97\x56\x66\x57\x45\x5d\x97\x78\x46\x6e\x63\xd3\x68\x6a\x90\x31\xf2\x74\x97\xa7\x9c\xe7\x66\xd0\xf2\xdc\x84\xfa\x16\xc4\xc1\xfa\xd6\x86\xcd\xff\xc3\xad\x16\x1b\x41\xab\x62\xdf\xdc\x5b\xb5\x1f\x95\x16\x45\xdc\x2e\x30\xe5\xc3\x9d\x3d\xec\x83\x31\x97\x0d\xbd\x36\xa0\xba\x3c\x80\x64\xe4\x55\x19\x2c\x86\x2e\x4e\x8a\xef\x29\x58\x6c\xc8\xff\x7c\x93\x95\xba\x65\x1b\x51\x48\x59\x73\x0d\xa3\xe4\x56\x2c\x67\x74\xd1\x2a\xbb\x4c\x32\x34\xef\x00\x70\xb0\x07\x36\xb2\xf1\xa5\x78\xd7\xc0\x70\x89\xab\x5b\xa2\x11\x7e\xda\x38\x57\x34\xda\xaa\xe6\xb9\xf0\x30\xfd\x29\xe5\x76\x16\xfd\x98\x36\x54\x85\x1e\xc4\xc1\x64\x58\xe4\x1d\xec\xdf\x45\x41\xa9\xed\x1c\x79\xd6\x7c\xed\x00\x43\x8c\x9e\xfc\xa3\xae\x2a\xbf\x72\xbe\x30\x2d\xf1\x04\x2e\x3b\x3d\x74\x31\x0d\x88\x83\x6f\x2a\x1c\xa7\x29\x51\x49\x21\x34\x8b\xfa\xe3\xb7\xea\x54\x9a\x94\x26\xe4\x7e\xb6\x33\x86\x2e\x2c\xca\xbd\x53\x56\x42\xd7\x42\x0d\x5d\xf5\x0f\xe2\x60\x32\xf0\xa4\xcc\xf2\x0f\x33\xf1\xe5\x1c\x30\x70\x9c\x6f\xc4\xa9\xe3\xde\xa1\x57\x69\x20\x7f\x82\x8c\x7e\x24\x70\xb2\x95\x81\xf5\x5b\x14\x4a\x4d\xdf\xbb\xb6\xf6\xa2\xe7\x96\x2e\x61\x87\xa5\xd6\xac\xe6\xe7\xe3\xcd\x2a\xaf\xb3\xdd\x26\x94\xcf\x17\x5b\x8a\x51\x4c\x7c\x9a\x31\xbd\xff\x99\x9a\x36\xb6\x1f\x1b\x64\x96\x95\x6f\x51\x91\xac\xb2\x43\x0d\x77\x0f\x2a\x5c\x0d\x48\x8f\x99\x94\x3b\x5f\xff\x4a\x60\xed\xf6\x51\xdc\xf7\x3f\x7f\xdb\xea\x51\xde\x7e\xff\x36\x0e\x13\xcd\xe2\x3e\x69\xb5\x07\x51\x7a\x92\x8c\x47\xc4\x51\xcd\xd9\x05\x7f\x0d\xf9\x18\xce\x8a\xb1\x61\xa9\x69\x50\xe4\xab\xa9\x69\x5a\x7d\xef\x95\x6d\x4e\xfe\x00\x36\x55\x2d\xee\xa1\x80\xc3\xbb\x3f\x9c\x9e\x14\xd5\x88\xa1\x6b\xd8\xdd\x7e\x3d\xc4\xe3\xd3\x48\xfd\x9f\x2b\xf8\x3d\xac\xcb\xb2\xd4\x53\xb8\xb8\x86\x43\x09\xfe\xcf\x27\x65\xa9\x94\x7c\xec\xb4\x82\x92\x64\xa3\xe4\xdb\xc7\xc2\xcd\xc6\xa8\xa1\xd4\x34\x28\x26\xa2\xd6\x34\x3c\x35\xcd\x22\x7a\x4c\x27\x8c\xa6\x47\xba\x8f\x34\x77\x64\x75\x84\xc6\xb0\xb5\xb0\xaf\x83\xff\x7a\xa1\x62\x75\x43\xc2\xbe\x62\xe2\x61\xc9\x3f\x0f\xfd\x1a\xaf\xa4\xa6\xe9\x28\x12\x6a\xf5\xc7\x33\x98\x90\xea\x9e\xe6\x37\x1f\x2b\x7d\x34\xbb\x53\x99\xb6\x2f\x49\xf2\xa4\x99\x81\x2c\x26\x7f\xca\x40\xe7\xdf\x9b\xbc\x92\x9a\x2e\x77\x56\x0a\xc5\x72\x75\x1c\xc2\x31\xb5\xfa\x7c\x44\xcf\x79\xcb\x03\x45\x23\x7b\xe1\x49\x37\x99\xca\x5d\x4d\x15\x7f\x54\xa2\x7f\x4f\x4d\x37\x5e\x49\x4d\x13\x71\xa7\xb1\xd4\x62\xf0\xcf\xaa\x34\x8d\x7c\x76\x68\x40\xc9\xc1\xd0\x3b\xd8\x48\xc3\xf8\x2a\x96\xec\xa5\xf1\x35\x6a\xd9\x84\xea\xdf\x9b\xbc\x92\x9a\xde\x6c\xa7\xef\x77\xc9\x4a\xc9\xd3\x4e\xc4\xd3\x0f\x8e\x0c\x5e\xe4\xd6\xbd\x7c\xa3\x1c\x42\xdd\x14\x2e\x28\x89\xc2\xa9\x20\xf6\x3f\xa8\xc2\x7c\x25\x35\x4d\xbb\xff\x32\xf5\xc0\x44\xc6\x38\x48\xe3\x0e\x69\xaf\x31\x57\x9d\x47\xdd\x6f\xd2\xef\x6c\xcd\x62\x9f\xe4\x0c\x23\x3e\xdb\xa5\xfe\xf8\xf7\x26\xaf\xa4\xa6\xd1\x5b\x31\x7e\x93\xcb\xf3\xfc\xbc\x7f\xf3\xe9\xd0\xdf\x65\xa7\x89\xf9\x46\xd5\x77\x48\x1f\x89\x0e\x92\xb1\xee\x5f\x1f\xed\x7e\xfc\xf3\xdf\x9b\xbc\x92\x9a\xe6\x7e\x71\xa4\xc2\x26\xd8\x9a\xf5\xc4\xe7\x36\x3b\x6e\x61\x74\x82\xd0\xb8\x5a\xb0\xb2\xdb\xdf\xac\x0b\xb7\x01\x4a\x1e\x8f\xc0\xa5\xff\xcd\x64\x05\xf4\x2a\xfe\x97\xbb\x3b\x7a\x7e\xa9\x8d\x84\x9e\x68\xfb\x65\x18\x20\x2b\x37\xe0\xf4\x60\x78\xd3\x62\x92\x18\xf9\xe6\x68\xb7\x64\x36\x7d\x40\xfd\x03\xa5\x4f\x41\x1c\xec\x2b\x64\xe9\x3e\xa7\x7b\x2d\xea\xe0\x63\xe6\x45\x15\xed\x82\x0b\xfe\x4f\x62\x66\xbb\xda\x8f\x6c\xa8\x96\x81\xf6\x27\xc1\xca\x49\x33\xd0\xaa\x0f\x88\x83\x7d\x85\xb2\x6d\xb4\xd0\x8d\xd4\x22\x2b\x55\x39\x1f\xcd\x1e\x1f\x9a\xc4\x37\xa5\x5c\x0a\xd2\x4d\x6b\x3a\x7b\xe1\x7c\xbd\xc8\xe1\xd0\x82\x8a\x88\x82\x38\x78\x6a\x7a\xf1\x9b\x2a\x97\xfe\x93\x97\xbe\x6f\x4e\x63\x50\xf9\xa9\x0e\xf3\x05\x2e\xcf\xf9\xf7\x7c\x79\xef\x1d\x87\xcc\x4b\x50\xeb\xcc\x41\xa9\x69\x00\x07\x5f\x02\x3c\x11\x7f\x53\x47\x17\xe4\x99\x29\x82\x42\x2d\x62\xfd\x95\x2b\x7f\xc3\x22\xaa\x2e\x06\xfd\x0e\x61\x0b\x37\xfd\x51\xd7\xab\x6b\x88\xb0\x20\x0e\x16\xb6\xf9\xd2\x98\xc0\x93\x7a\x4a\xaa\xef\xbb\x4f\x38\x83\xe8\xfd\x51\xec\x76\x4d\xac\x32\x3f\x61\x8d\x6d\xf1\xd8\xea\x34\xac\x73\xa8\xfa\x10\xe8\x4f\xf2\xaa\x0c\xef\xe6\x2a\x9f\x5a\xd4\x69\xb6\x26\x6b\xcd\xd6\x56\xc9\x87\x84\xcc\x3c\x5f\xc1\x42\x93\xba\x5c\xd0\xdc\x7e\x24\xc8\xaa\x9a\x03\x4d\xda\x40\x1c\xec\x81\x45\x5a\x16\x59\x34\xa2\x0e\xbb\x47\x18\xdb\x4a\x63\xdf\x3c\x09\xc8\xcd\x5d\xc8\xd3\xe5\x8c\xb1\x14\xb8\x51\x5d\x56\x78\xf2\x20\x02\x11\x16\xc4\xc1\x64\xf0\x28\xc2\xf9\xe0\x16\xdd\x76\x77\xab\xa3\xfb\x94\xbd\x6f\xdb\xea\x9b\xe3\xa1\x66\x0d\xa7\x64\xf8\xad\xb6\x2e\x71\xe5\x78\x0d\xa8\x4c\x3a\x88\x83\xc9\x30\xe2\x6e\x9a\xe7\x53\x87\xbd\x42\xf5\x34\x4d\x13\x7f\x26\xf4\xf6\x6a\xe7\x9b\x3b\x39\x04\x2e\xfc\xee\x0c\xa7\x7d\x2a\xb2\x18\xd0\x25\xc3\x20\x0e\xd6\x09\xab\x2a\xef\x0b\xce\x4b\xf9\x5c\x03\x6f\xe1\xd6\xe4\x9c\x84\xa9\xe2\xfc\xfc\x7a\xeb\x52\xbc\xd2\x2b\xbf\x51\xca\x92\x65\x48\x04\x3a\x06\x06\xe2\xe0\x33\xd7\xd3\x6b\x35\x8f\xef\x67\xe9\x7c\x97\xdb\xfe\x98\x4a\xec\xab\xf3\xd7\xd2\x20\x6d\x8f\xc9\xf9\x1b\x15\x3d\xcf\x6d\x8b\x20\x4c\xe8\x72\x4e\xd0\xe7\xeb\xaa\x0c\xe4\xef\xc9\xfa\xb8\x2e\x36\x69\xe9\x4a\x23\x30\x4c\x3c\xbb\x93\x76\x99\x30\xb4\x9d\x7c\xbd\x54\xdf\x71\x23\xf7\x52\x56\x2b\x41\x67\x23\x41\x1c\x7c\x76\xf5\xf6\x4c\xad\xb1\xff\xc3\x99\xbd\x07\x3f\x55\xa1\x3b\xfa\x09\x5b\xc8\xb3\x39\xfa\xb8\xee\x29\x85\xbf\x5c\xdf\x4c\x77\xef\x40\x67\x44\x41\x1c\x3c\xe7\x50\xb3\xac\xe2\x8a\x51\x62\x38\xfd\x7d\x3f\x81\x0e\xff\x43\x01\x65\xa7\x15\x4e\x2f\xbf\xa6\xbe\x5d\xe2\xd2\xf0\x2c\x8d\x3d\x94\x80\x02\x71\x30\x19\xec\x08\x9c\x0c\xe8\x72\xdb\x95\x5e\xd1\xdb\x34\x24\xb4\x07\xa4\x36\x3f\xb3\x8c\x0f\x11\x32\x90\x77\x52\xa0\x0b\xb9\x99\x64\xb7\x8c\x08\x0b\xe2\x60\x9d\x40\xae\xc8\xf8\x0b\x5b\x95\x6f\xef\x7a\x1d\xed\xcd\x5f\x95\x1a\x69\x94\xce\x2c\xd7\x71\x4a\x54\x04\x2e\x37\x9f\x3e\xa2\x15\x35\x87\x8a\xdb\x83\x38\xf8\x65\xe9\xc7\x67\x35\xb7\xfb\xf5\x71\x5c\x53\x90\xca\x30\x4b\xe5\x92\xef\xc5\x22\xc9\x19\x5f\x50\xcd\xe0\x4f\x8f\xb1\x90\x18\xfe\x24\x45\xc8\x00\x1a\x58\xfc\x97\x7f\x06\x34\x93\x8c\x8d\x99\xfa\x0b\x22\xd9\xba\x8a\xac\x4c\xd5\x8b\xa9\x20\x5b\xdc\xc6\x13\xa1\x89\xfe\xeb\x31\x97\x8d\x58\xe8\xd0\x16\x52\x10\x07\xdf\xc1\x94\x37\xa0\x5c\x60\xb9\x7f\x7a\xdc\xae\x26\xda\xcc\xfd\x30\x81\xfb\x11\x35\xbb\x94\x1f\x7f\x36\x47\xbc\x1d\x99\x9e\x7e\x75\x13\x94\x88\x03\x70\x30\x19\x0c\xc2\x7a\xa7\xfa\xac\x7b\x62\xc5\x43\xf5\x33\x8d\x2a\x0d\xef\xa8\xf3\x3f\x65\x72\x11\x48\x26\x7f\x3e\xf4\x43\xcb\xb4\xbf\x11\xba\x41\x0b\xc4\xc1\x64\x90\x46\x6f\xb0\x7d\x5d\xf4\xa3\x5a\x41\x48\xb3\xd9\xd8\x71\x2b\x6c\x70\xfb\x89\xc9\x57\x4c\xdc\x2e\xee\x67\x96\x3e\x79\x2f\xa7\xa0\x4d\xd5\x20\x0e\xd6\x09\xeb\x61\x1d\xd2\x6f\xd6\x76\xaa\xd3\xfc\xc4\xe2\xfd\x76\x37\x31\x3a\x6f\xb5\xac\x7b\xb8\xb2\x16\x3c\xa8\x9a\x1d\x6e\x15\xdc\x85\x92\x9c\x20\x0e\x16\xb6\x30\x36\xc0\x4d\x87\xca\x50\xda\x47\xf2\xf6\xaa\xfa\x86\xcd\xc3\x28\x37\x7e\x1c\x4b\x29\x4e\x77\x32\x9b\xc4\x17\xde\x8f\xe2\x3b\x10\x32\x80\x86\x7c\x57\x65\xa0\x90\x7e\x62\x1e\xf9\x54\x8c\xb2\x91\x56\x3f\xc8\x55\xcf\xe3\x9d\xe8\x60\x5d\x63\x94\xd2\x07\xeb\x9f\x8f\x84\x06\x5e\x32\x54\x40\xeb\x2e\x20\x0e\xf6\xc0\xda\xc4\x56\xc2\xdc\x2f\x1e\x68\xef\xd1\x6c\x0b\xb3\xae\xee\xf0\x2f\x9c\xd5\xa3\xd1\x64\x2b\x10\x2a\x0c\xfb\xe4\x9d\x47\x93\x43\x37\x01\x82\x38\x78\xad\x69\xb1\xb8\xf2\xae\x77\x04\x6c\x78\x9f\xf7\x5b\xcd\x6d\x05\xc8\x29\x29\xf2\x2e\xbc\x42\x51\xdb\xfb\xab\x48\x2f\xdf\xa7\x63\x43\x77\x97\x80\x38\x98\x0c\x91\xf2\x3b\x05\xd3\x6c\xaa\xf4\xa1\xb7\x7a\xc6\x46\x68\xd4\x2c\x30\x58\x7a\x53\xcc\xae\xcb\x48\xb3\x66\xa2\xde\xf8\x79\x91\x00\x15\xce\x02\x71\xb0\x4e\x60\xfe\x51\xb5\xda\xb0\x11\xc0\xff\xf6\x96\x8d\x71\x4a\xcd\x77\xf9\x63\x69\xff\x67\x58\x06\xe3\xbd\x3d\x3a\x2d\x7e\xa8\xef\xc2\x69\x11\x61\x41\x1c\x2c\x6c\x3b\x95\x66\x20\x0b\x0e\x55\xbb\xf7\xfd\x37\x2f\x9e\x33\xbd\x41\x4d\xeb\x7d\xd1\xf1\xe9\xf2\xe5\xf6\xb3\xa2\xef\xd7\xef\xa4\xdd\x7d\x8f\x90\x01\x34\x18\xbf\x2a\xc3\x7a\xcb\x22\xf3\x9b\xb0\x84\xa9\x37\xde\xd7\xee\x30\x90\xab\xe7\xec\x89\x4b\xbc\xe1\x77\xbc\x99\xc2\xf8\x8e\x9d\x60\xe3\x69\x0f\x74\xeb\x26\x88\x83\x57\x84\x59\x57\x95\x38\xb0\xbf\xdf\xf3\x18\x79\x9c\x5c\x32\x83\x5b\x39\x4f\xd5\x3f\x7e\xdc\xe6\xcf\x59\x27\x1f\xee\x69\xbb\x8c\x31\x74\xd9\x32\x88\x83\xaf\x69\x65\x17\xdd\x67\x3a\x7e\x76\x4d\xba\x0e\x69\xfb\x03\x8f\x78\x81\x00\xf6\xee\x26\x95\x17\x7a\xf0\x71\x09\x5d\xab\x8b\x85\x0d\xb4\xf9\x0e\xc4\xc1\x64\x78\x40\xdd\x5d\xa6\xc0\x37\xd8\x3d\x86\x8a\x7e\xc0\x5e\xab\xbe\xfe\xae\x65\x9d\xda\x74\xd0\x99\x7a\xe5\x95\xe4\xf1\x45\x96\x2f\x07\x22\x2c\x88\x83\x75\xc2\x68\xa7\x3c\x35\x3f\x47\x51\xfb\x3b\x5b\x91\xd0\xfe\x2f\x6b\xda\x66\xbc\x6f\xef\xee\x9b\x33\x7d\x31\xfe\x1d\x6d\xe4\xeb\xfd\x16\xaa\x35\x0d\xe2\xe0\x9b\x56\x9c\xec\xf5\x1f\x3f\x64\xc4\xfc\x6e\xc9\x48\x54\x3d\x24\x9b\xc6\xbc\x8c\x72\x03\xb3\xac\xf0\xb5\xe7\x03\xcb\x3e\x59\x9e\xaf\x9f\x10\x32\x80\xa6\x49\xff\xa5\x62\xa1\x6c\x80\xfb\xbb\xbd\x9e\x8f\x89\xe1\x11\x95\x6c\x37\x2b\x50\xe2\xd0\xd0\x47\xa5\x68\xa8\xd8\xfd\xf2\xea\x16\x48\x5e\xf7\x41\x9b\x77\x40\x1c\xec\x81\xc3\x8e\xb7\xd8\x8c\x2f\x48\xc6\xce\xeb\x3e\x73\xf6\x6d\xfc\xb8\xd4\x7c\xf5\x84\x32\x59\x8d\x49\xf9\x44\xb3\xe5\x46\x6e\x05\x0a\x34\xec\x07\x71\x30\x19\x5c\x74\xd8\xe5\x7f\x30\xf4\x9c\x5a\xb9\xaf\x70\xda\x47\x89\x7f\xcf\xbd\x97\x7b\x69\x40\x7e\xf0\x68\x21\xb6\x24\x65\xc6\x88\xdb\x15\x11\x16\xc4\xc1\x64\x68\x4c\x5e\xdb\x32\x49\x1f\xbe\x44\x51\x99\xde\x44\xba\x63\x12\x97\xa7\xfd\xdc\x1c\x19\x33\xaa\xf5\xee\xee\x83\xcd\x48\x24\xad\x63\x44\x58\x10\x07\xeb\x04\x2d\x97\x03\xfe\xe1\x6c\x74\xbb\x35\xc3\x93\xf2\xed\xcf\x2d\x4d\x65\x5c\xdf\x17\xbf\xe3\x56\x38\x8a\xc4\x74\x8c\xe1\x95\x76\x42\x25\x52\x41\x1c\x7c\x77\xd8\x12\xfe\x27\x14\x86\xc6\x10\x55\x8b\xe4\x0c\x05\xa5\xce\x49\x87\xea\xc3\x5a\x05\xd7\xda\xcc\x93\xd5\x46\x47\x45\x43\xdc\xdf\xd0\x85\xb1\x80\x09\xec\x55\x19\x96\x5f\xd0\x9d\xc5\xc8\x57\xcd\x75\x35\xeb\x6b\x5b\xb4\x07\x79\x90\xf6\x2d\x7c\x77\x15\x22\xf3\x60\xc6\x93\xbc\xae\x7a\x42\x05\xcd\x01\x41\x1c\xec\x81\x03\x23\x18\xa4\xcb\x43\xf3\x59\x06\x92\x30\x17\x82\xd1\xf4\x72\x53\x1c\x27\xda\x0d\xe7\xdf\xb6\x67\x7e\xf1\x6b\x7f\x2f\xba\xc5\x88\x08\x0b\xe2\x60\x32\xc8\xfe\x2e\xd1\x4d\xc7\x3f\xb6\xec\x9d\xc0\x0e\x4d\x4a\x8c\x11\x73\x8d\xb3\x41\x9f\x69\xc1\xce\x4f\x6d\x25\x61\x25\x7c\xd4\x00\x1d\x6f\x06\x71\x30\x19\xbc\xb1\x9e\xb6\x1b\xe4\x26\x77\x46\xf5\x7e\x6e\x55\x27\x6d\x6b\xeb\x7a\xbc\x28\x48\x1a\xfb\xe6\x0d\xcd\xc6\xb1\xbd\xd3\xc3\x19\x2e\x44\x58\x10\x07\xeb\x84\x1c\xbb\x2c\x4e\x2a\x8b\x91\xc7\xe9\x48\x6f\x24\x67\xe6\xb1\xec\x1e\xf0\xec\xae\xe8\xa8\xe2\xbc\xa3\x5c\x27\x7c\xca\xb9\x72\x71\x03\x11\x16\xc4\xc1\xc2\xfe\x6c\xd1\x67\xd4\x23\x89\x1a\xd8\xa8\x56\x89\x29\x70\xc0\x64\x2b\xd5\xa7\x79\xca\xf7\xf4\x24\x49\x5c\x3d\x28\xe5\x43\x5e\x26\x3d\x94\x9a\x06\x2d\x2a\x22\x6a\x4d\x5f\x49\x4d\x37\xb5\xd6\xad\x67\x50\x4e\x05\x08\x77\x79\x7d\x54\x58\x5e\xf4\x0b\x57\x3e\x0b\xb7\xb4\x40\xb5\x11\x28\xdb\x2e\x39\x5a\xee\x70\xfa\xf7\xa5\x97\x2b\xa9\x69\x8d\x43\x7f\x24\xa7\xdf\x31\xaf\x7d\x36\x3b\x5e\x20\xd1\x30\xf9\xbd\x7b\x63\x1d\x94\xb4\x2a\x92\xef\x1f\x5e\xff\xae\x17\xd5\x1f\xf5\xdf\x9b\xbc\x92\x9a\x4e\xb2\xfe\xeb\x54\x2b\x37\xa9\xc9\x12\xf7\x49\x54\xe1\x8e\x4b\xec\xaa\xc2\x05\xe6\x6d\x2a\x8b\xe2\xd6\x26\xc3\x72\x3c\x62\x33\xa3\xff\xcd\x6a\x0f\xa8\x2f\xaf\xbe\x92\xbf\x30\x39\x63\x6f\x60\xb9\x31\xd6\xc4\xb4\xeb\x5e\x24\x9e\x2a\x3d\x8b\xd9\x0f\x9f\xd6\xfb\x25\x19\x49\x5f\x3d\x9b\xa8\xaa\x91\x89\xd0\x06\xc4\xc1\xb4\x11\xa2\x0a\xec\x7d\x1b\x36\xee\xbc\x30\x8c\xc3\xab\x64\x2a\x23\xb5\xfb\x83\xbf\xd4\xd4\xc2\xb6\xef\x42\xe9\x20\xb0\x8f\xeb\x5e\x36\x22\x2c\x88\x83\xbd\x92\x8a\x8e\x79\xa2\x63\x4c\x13\x16\xc3\x97\x2e\x2c\x5c\x1f\xf3\x98\x4f\xdc\x86\xdf\xfd\x34\x44\xff\xb9\xec\xab\x6c\xfe\x9c\xe1\x3a\xf4\x55\x05\x71\xb0\x57\xd2\x11\xad\x23\x84\xe6\xe1\xdc\xfc\xab\x28\xd9\x68\x87\x63\x5e\xa6\x8e\x82\x41\x8d\xaa\x97\x9c\xe1\x1f\x77\xea\x92\xbe\x46\x6f\x42\x1b\xbe\x40\x1c\xac\x13\x9e\xf5\x2b\xdb\x14\x68\x08\x34\xd0\xfc\xa4\xb9\x6d\xf7\x35\x5d\x1d\xf5\x4b\x33\x81\x11\xb6\x5d\xaa\xca\x8f\x4f\x53\xd9\x37\x24\x26\x11\x61\x41\x1c\x2c\xac\xd2\x9b\x9a\xb3\xe2\x09\x96\x0a\xf6\x3f\x78\xe5\x59\x5b\xa8\x7a\x5f\x65\x64\x50\xf1\x14\x36\xcc\x4e\x69\x3e\x31\x2d\x91\x04\xd6\x21\xfe\x9f\x41\x96\x5f\x95\x41\xd2\x99\x75\xe5\x97\x62\x5c\x9f\x54\xc1\x42\xb4\x1e\xc6\x5d\xcb\x43\xbf\x37\xeb\x9d\x1f\x22\xbe\x6e\x93\x7d\x58\x92\xb2\xfe\x05\xad\x7a\x81\x38\xd8\x03\x8f\x1b\x17\xb1\xa7\xb9\xeb\x11\x3a\x09\x91\x91\x30\x0b\x9f\x24\x55\x61\x08\xf0\xf8\xdd\x3a\xee\x6e\xcc\x58\x2d\x1e\xee\x4f\x87\x6a\x6e\x83\x38\x98\x0c\xcf\xd4\xe3\x32\xff\x54\x45\x33\x16\xb5\xb6\xed\x63\xb3\x38\xcb\xd4\xf6\xa5\x67\x4b\xe1\x2d\x2c\xb4\xac\x55\x2a\x0a\x4d\xa2\x40\x39\x64\x10\x07\x93\x81\xa9\x54\xa5\xca\xf4\x3c\xac\x72\xaf\xb1\xbc\xa8\x65\x13\x35\xc0\x2d\x9b\x5a\x5a\xd8\x50\x5f\x8f\xce\xda\xfd\x69\x99\x8e\x1c\x34\xde\x06\x71\xb0\x4e\xc8\xf0\x93\xc6\xbf\x4c\x1d\xaa\x5e\x28\x75\xfe\x45\xdb\x27\x76\xc1\xb7\x6f\xf7\x3b\x74\x80\xef\xeb\x40\x44\x5d\xc7\xf2\xce\x6d\xe8\x46\x3f\x10\x07\x0b\xeb\xa1\x33\x2c\xa2\x51\x60\x3c\xc2\xe7\x41\x38\xa3\x64\x52\xd3\x96\xeb\xd1\x6d\x4c\x2c\xbe\xf3\x76\xae\x48\x1f\x99\x2a\xbc\x70\x18\x21\x03\xe8\xff\xe7\xaa\x0c\xec\xcc\x2f\x13\x2c\x05\x5f\x30\xd7\xd1\x3e\x5d\x2f\xfa\x35\x7a\x4d\xd5\xef\x17\xe9\xef\xe8\x3b\xa7\x18\x1e\xca\xb5\x7f\x0d\xae\x43\x99\x7f\x10\x07\x7b\x60\x0d\x62\x6a\xc9\x3d\xe1\xe9\xc4\xd6\x87\x5b\x56\x4a\xa9\xa7\x43\x4c\x87\xf7\x9f\xf5\xbe\x0f\x12\xed\xc3\xa9\xff\x1d\x29\x21\x6b\x84\x08\x0b\xe2\x60\x32\x8c\xaf\x4e\x0d\xa8\xc5\x69\xb4\xa7\xad\xac\xad\xdc\x65\xbc\xa1\x4e\xdb\x83\x8a\x31\x3b\x5d\xfb\x71\x6a\x89\xfc\x07\xd2\xde\x6f\x68\x45\x11\xc4\xc1\x64\xe8\x5d\x93\x9a\xf3\xd8\xe5\x91\x55\xa1\x27\xf9\x59\xf8\x3e\xdc\xeb\xe6\xfc\xa3\x96\x69\x21\x7d\x6e\x1e\xa9\x37\x91\x5b\x05\x2b\x49\x88\xb0\x20\x0e\xbe\xda\xa3\x1c\x89\xf1\xeb\xcf\x39\x86\xc5\x50\xfc\xa5\xbe\x08\xaa\xce\x71\xc3\xc4\x13\x93\xc1\x2d\x15\x39\x74\x93\x66\x09\xcc\xb8\x74\x68\xb5\x07\xc0\xc1\xc2\x12\x3a\xb7\x15\x74\x39\x88\x22\x05\x04\xd7\x6e\x85\x6d\x5f\xff\x26\x9d\xa6\xee\xaa\x70\x27\xdc\xe7\x40\x6b\xf8\xfc\x6b\x9d\xda\x2e\x42\x06\x50\x32\xf2\xaa\x0c\xde\xcd\xa6\x6e\x06\x23\x9f\xcc\xf1\x55\x07\x8e\x1f\x9d\x13\x92\x49\x2d\xed\x11\x19\x91\x49\xf1\x7c\x1c\xf1\x38\xfb\xa4\x41\x41\x0d\x0d\x5a\x00\x1c\x7c\x04\x6b\x39\x4b\x74\xc0\x88\x23\x7f\x4d\x3b\xae\x30\x8e\x6f\x51\xfd\xc6\x57\xa4\xc3\x20\x19\x7a\x4d\x7c\x3b\x6f\xe1\x92\x98\xd1\xff\x1b\xc1\x02\x38\xf8\xa6\x15\x43\x4d\xc1\xa8\x26\xcb\xda\x8b\x0f\xe6\x4e\x6d\xf2\x78\xf9\xac\xa5\x14\xab\x94\xac\x4c\x85\x19\x8b\xaa\xa7\x8f\xf6\x34\xa1\x9d\xf2\x20\x0e\x26\x03\x6e\xb9\xaf\x7d\xed\x6d\x4c\xe6\xa4\x53\x1b\xab\x43\xa3\xa2\x27\xfe\xfb\x59\xf1\xa7\xf7\x9d\xd8\x66\x16\xa2\xee\x7e\x25\x15\x84\xea\x8b\x81\x38\x58\x27\x7c\xa8\x7f\xbf\x4f\xc5\x8e\xed\x51\xe5\xee\x11\x69\x1d\xa2\xbf\xd0\x34\x4a\x94\xea\x39\x1d\x56\x31\x42\xd2\x42\x17\x9b\x93\x58\x0e\xa5\xa6\xbf\x38\x7f\x46\x5b\x52\x32\x55\x1c\x98\xbb\x67\x4d\xe2\xac\xa3\xec\x76\x5e\x45\x2d\xf6\xf1\xb6\x40\x3f\x52\x17\xbb\xa3\x8b\x8e\xee\x7f\xa6\xa6\x71\x28\xc3\xb0\x24\xa4\x75\xbe\x22\x61\x89\x3c\x33\x4a\x69\xa8\xb7\x88\xbb\xf7\xfd\x66\x17\x53\x69\x3f\x7f\xd2\xe7\xb1\x9d\x65\x92\xff\x40\xfd\xae\x75\xe4\x30\xad\xfd\xe1\x32\x9e\xae\x9e\x1e\x61\x2f\x0a\x40\xa2\x57\x20\xdd\xcf\x65\x37\xf9\x29\x2b\xfd\x7a\xbc\xc1\x9c\x05\x96\x9a\x06\x45\xbe\x9a\x9a\x9e\x23\xc3\x1b\x2c\x7a\xe0\x8a\x2f\xd3\x9d\xde\x12\x6d\xfd\xf6\x80\xef\x57\x1d\xff\xdb\x6b\xbd\x98\x7a\xa6\x0e\x06\xd3\xd2\x63\xca\xff\x99\x26\xc7\xfd\x50\xfe\x81\xa4\xcf\x71\xc8\x29\x50\x51\x9a\x8a\xdd\x7c\x83\x77\x85\x3f\x26\x20\xfd\x57\xea\x7a\x2d\xf2\x49\x3b\x92\x26\x94\x9a\x06\xc5\x44\xd4\x9a\x96\x83\x8d\xc3\x96\x83\x85\x9c\xf9\xca\x33\xe8\x4c\x2c\x16\xfd\x1f\x63\x34\x73\x7a\xe1\x5c\x7b\x33\x28\x14\x51\x34\x6b\xa2\xc6\x57\xcc\xb5\x62\xfc\xcf\x43\x3f\x24\x5e\xf8\xd0\x6f\x56\xbd\xb1\x38\x67\xb3\x23\x6c\x24\x81\x7e\x38\xf5\x5a\xd6\xba\xab\x7f\x09\xa9\xb0\xb0\x40\x70\x11\x47\x63\xe9\x69\x31\x9f\xdd\xbf\x37\x79\x0f\xde\x64\xc3\x67\x5d\x6f\xf2\x62\x75\x23\xec\xc5\xc7\xf5\xef\x2b\xc9\x72\x84\x59\x5f\xa1\x94\x73\x7d\xfd\x36\xbd\xca\xec\xc7\x28\x76\x53\xf4\xdf\x9b\xd4\x87\x37\xe9\xd9\x63\xe8\xb3\x16\xc4\xbe\x5b\x61\xfa\xe3\x2f\xb7\xdd\xd9\xfd\x7a\xe2\x36\x8b\x57\x19\x58\x47\x2b\xb2\x6b\xaa\x29\x2f\x14\xfe\x07\x15\xb5\x5d\xe1\x4d\xe6\xbb\xfb\x06\x98\xbe\xa1\x9a\xfe\x38\x60\x31\xa6\xc3\xbd\x5c\xb7\x77\xa3\xcc\xf1\x0e\x6a\xd7\x6e\xf4\xdb\x15\x81\xa7\x0d\x85\xd7\xfe\xbd\xc9\xf7\xf0\x26\xcd\x08\xf6\xbb\xba\xab\x7e\x6b\x4d\x6e\xd0\x8a\x30\x71\x7a\xfc\xc5\x70\x4d\x2a\xec\x54\xa1\x10\x7f\x97\xb2\xdf\xcf\x50\x72\xbd\xed\xdf\x9b\x4c\x81\x37\x29\xf1\x80\xa5\xad\xf8\x69\xf3\xa5\xf5\x96\x26\x49\xda\xc0\xc0\x7d\xb4\x8e\xf2\x5d\xd9\x0f\xe5\xda\xa8\x71\x2a\xc2\xae\xab\xf2\x2f\xfe\xbd\xc9\x1a\x78\x93\xea\x6f\x8a\x0e\x02\xb1\xf7\x0d\x54\x7b\x9e\xed\xfe\xf2\x8f\x7e\xd8\x11\x73\xb9\x1b\xb2\x9e\xa0\x3c\x62\x69\xf6\x30\x6b\x57\x70\xf0\x7f\x33\x59\x01\xbd\x8a\x57\xbf\x42\x02\xd8\x9e\x28\x9b\x68\x7c\x71\x3c\x0c\x0e\x4e\x94\x3b\x07\xb3\x3a\xec\x82\x49\x8a\xd5\x17\xb5\xc9\x3c\x02\xdf\xfc\xb1\x72\x37\xa1\x25\x40\x00\x07\xfb\x03\x96\x97\xe0\x29\x21\x76\xa4\xbd\x39\x25\xce\xf8\x21\x04\xa7\xd6\xee\x33\xcb\x99\x91\x25\xd5\xa7\x83\xc8\xb6\x5b\x49\x8f\xca\xad\x94\xa1\x5d\xdd\x00\x0e\xf6\x15\xd2\xf1\xe9\xad\x09\xaa\x9b\x79\x75\xe7\xe3\x52\xb1\xa8\x57\x63\xdc\xcd\x90\x0b\xea\xa0\xdf\x4c\xc5\xfd\xbb\x94\x6f\xd3\xbd\xdc\x5f\x21\xc2\x82\x38\x78\x05\x42\x01\xaa\xa2\x8b\xe8\x0c\xa6\xed\x4a\x13\xe1\x0f\x95\x9e\xb5\x44\x13\x6b\x64\xa3\xb3\x8e\x93\x01\x16\xb8\x58\x96\x91\x14\xd0\x64\x05\xc4\xc1\x6e\x5c\xf9\xe4\xc4\x28\x15\xb2\x78\xe7\x58\x7d\x22\xe8\xa9\x8b\xe5\xdf\x4f\xec\xcf\x6f\x92\x64\x7b\x19\x92\xec\x18\x5b\x8b\xb1\x19\x53\x7f\x83\x4e\x0b\x03\x38\xd8\xbe\xab\x1b\xd2\xf5\x43\x04\x4c\x29\xe9\xe2\xa1\x4a\x97\x36\x7d\x21\xa9\x91\xb1\xc4\xc5\x59\xe6\xcb\xed\x3e\x2f\x18\x6a\xe6\xc6\x32\xbf\x20\x86\x24\xa0\x3f\xc9\xff\x52\x70\xc6\x97\xea\x55\xd5\xa6\x8f\x27\x0f\xe9\xc6\x09\x46\xa1\xb7\x27\x61\xb5\xb9\x0c\xb6\x77\x0a\x09\xbd\xf9\x63\xa2\x81\xaf\xcf\xa0\x59\x05\x88\x83\xc9\xe0\x23\x55\x71\xfc\xb0\x71\xa8\x42\x43\xe9\xef\x8f\x59\xca\xe9\xd8\x4f\xee\x12\x1d\xb6\x9a\xb2\xb1\x6b\x63\x05\x03\xa7\xdd\x68\xd0\x7d\x8c\x20\x0e\xf6\xab\xd1\x3a\xb8\x4f\xf0\xe8\x8b\x5f\x4e\x16\xcc\xbe\xcc\x72\x8f\xb8\xfc\xc5\x6b\x48\x1b\x1d\xd0\x27\x94\x45\x9a\x8b\xd9\x2c\xb6\x04\x15\xec\x05\x71\xb0\xb0\x76\xeb\xc6\x5e\xc2\xe8\x31\xc3\x69\x96\x8e\x92\x77\xba\x93\x59\x53\x31\xbd\x16\x8d\x2c\xf4\xf9\x7d\xc7\x8b\x6d\x5f\xf4\xd7\x99\x41\xd9\x48\x00\x07\x93\x21\x77\x77\x0f\xcf\x85\x80\x5d\x3e\x81\x3c\x45\x55\xe5\x2e\xf6\x89\xd2\xc3\x86\x1f\xf7\xf6\x04\x78\x87\x0a\x1a\x3c\x1e\xa1\xaa\x41\x89\x74\x10\x07\x93\x41\xaa\xe0\xbb\x1d\x4b\x65\x6f\x31\x1b\x95\x8d\x6c\xe6\xb9\xcc\xbd\xb7\x04\x51\x29\x51\xac\x4e\x2d\xaa\x65\xa9\x96\xaa\xa8\x3d\xd0\xa6\x6a\xd0\xe7\xeb\xaa\x0c\x09\xe1\x4d\xb6\x2d\x92\x72\xb1\x03\x72\x8f\x43\x96\xee\x08\x1a\x9a\xd1\x3c\xa8\x39\xbb\x73\x71\x6b\xef\x64\x69\x5e\x1a\x29\x59\x06\xf1\xc0\x20\x0e\x26\xc3\x37\xae\xf9\xa8\x8f\x3f\x2d\x9a\xd8\x16\xe2\x91\xd5\x86\x22\x84\x3a\x52\x9e\x56\xf5\x91\xdf\x9f\x1a\x7c\x6d\x52\x7c\x0b\x97\xf1\x3b\x22\x2c\x88\x83\x5f\xfe\x76\xc6\xa2\x5b\x4f\xd9\xf0\x6b\x5c\x12\x77\xda\x6e\xb1\xc9\x4b\x83\x6e\x99\xc7\x9c\xe0\xd5\xf5\xeb\xd5\x7d\x29\x72\x6c\xb5\x04\xd0\xae\x5f\x00\x07\x0b\xfb\x5b\x51\xc6\xad\x26\xec\xf0\x51\xf3\xfe\x38\xa3\xfc\x45\xe3\xc3\x9e\xb3\x45\x52\x1f\xa5\x8a\x29\xa9\xc9\xf0\xb7\x07\x9a\x1b\xd0\x11\x1d\x10\x07\x93\x01\x47\x68\xc1\x1e\x3b\x52\xa0\x55\x86\x31\x8c\xb9\x2f\xe2\x9a\x7d\xdf\x84\xa4\xcd\xca\xce\x41\x69\x57\xc4\x50\x8d\x07\x4b\x2b\x94\xdc\x03\x71\x30\x19\x54\x97\x97\x96\xd3\x9f\xa6\xb3\x86\xba\x25\x75\xd2\x5a\x0c\x9d\x89\x54\xe1\x23\x4d\xbc\x72\xb9\xd7\x1d\x78\x61\x7c\xc7\x1d\x47\x1e\x21\x03\x68\x60\x71\x55\x06\x87\x40\x49\x2e\x9a\xca\x6b\x74\xfc\xb1\x1d\x22\x54\xf8\xbf\x1b\xb2\xf6\x7a\xbe\xe3\x84\xbd\xc9\x0c\x4c\x62\x19\x34\xc7\x10\x84\x16\x6e\x41\x1c\xfc\x3e\x85\x82\x9a\x9b\x4d\x3a\xc8\x41\x11\x43\x0c\x56\x6b\x18\x7c\xac\xc3\x21\x15\xd2\x82\x27\x4b\xf9\x89\x03\x54\x47\x0f\x57\x56\x4e\xa1\x7f\x48\x00\x07\xfb\xd5\x50\xa5\xfb\x82\x75\x93\x32\x39\x42\x6e\xb2\x8b\xd8\xa6\x17\xe9\xbc\xe2\xa8\x98\x6c\xc4\x79\x48\x91\x23\x99\x6e\x48\xb8\x98\x04\x3d\x2d\x88\x83\x85\x25\x7e\xd7\xfa\x58\x30\xeb\x86\x94\x30\xcf\xc3\x2d\x6a\x3c\xe3\xc7\x29\x9c\x0f\xb4\xe3\xcd\x30\xbf\x60\xfa\x06\x68\x06\xb4\x72\x41\x85\xb3\x40\x1c\x4c\x86\x46\x3f\x21\x7a\x26\xe9\x9b\xde\x67\x78\x13\xca\x6f\xae\xbd\x35\xab\xd0\x2d\x3d\x0f\xfe\x32\x3c\x5c\xe4\x44\xa4\x43\x24\x33\x08\x55\xa9\x00\x71\x30\x19\x16\xcd\x65\x36\xf1\x5a\xbc\x9e\x7c\x13\xf4\x91\x49\xd8\x36\xbd\xaf\xeb\x87\xa6\x65\x8c\x54\x90\x91\x19\x70\xf1\xfb\x48\xe1\x63\x34\x42\x06\xd0\x90\xef\xaa\x0c\xef\xcf\x78\xcb\xe9\x0f\xfe\x3c\xb2\xf7\x10\xec\xe3\x7a\xce\x9d\xfe\x93\xca\x57\x84\x46\x68\x75\x8c\x7b\x8e\xfb\x97\x91\xaa\x16\x54\xe9\x0b\xc4\xc1\x64\x70\xf1\xd3\x6b\xb6\x4e\xe2\xb1\xfc\xc6\x9c\x82\x21\x52\x23\xbb\xce\x97\x76\x93\xe5\xdd\x52\x18\xa5\x39\xf1\xf5\x1e\x85\x6f\x3d\x4e\x50\xa6\x08\xc0\xc1\x7e\xb5\x09\xef\x59\x93\xc0\x17\x4c\xc9\x39\x5c\x54\x92\x8d\xd1\x59\x7b\x7a\x8b\xa2\xae\xcb\x48\x8b\x73\x76\x94\xed\xfe\xe6\x4f\xc8\xe4\x10\x61\x41\x1c\x2c\x6c\x70\x29\x5a\x2e\x81\xd1\xb2\xc5\x87\x34\xe4\x9f\xe1\x9d\xbb\x3c\xb8\x89\x4a\x77\x72\x02\x4e\xff\x5e\xfb\xab\x95\x47\x6b\x81\xc9\x8d\x08\x0b\xe2\x60\x32\xc4\x1a\xae\x99\x98\x76\xe8\x37\x24\x36\xa2\xae\x7f\x6e\x59\x33\xe4\x41\x25\xdd\x34\x78\xbf\x54\x4f\xe4\xab\x10\x44\xad\x37\x00\x95\x93\x00\x71\x30\x19\xfa\x96\x0a\x56\xfa\x71\xc7\x3e\x23\x99\x5e\x13\xc2\xbb\x58\x0f\x8a\xa9\x5c\x91\xd2\xab\xde\xcb\xdd\xa5\x32\x1e\x7b\x8e\xca\xb2\x8f\x90\x01\x34\x18\xbf\x2a\x03\xc9\xb3\xd8\x1f\x35\xc4\x81\x46\x58\x51\xc4\x38\x21\x9b\x4e\xaa\xe4\x4e\x7b\xb7\x1e\xd5\x70\xb2\x92\x19\x5f\xc6\xbd\x50\x21\x94\x45\x3c\x30\x88\x83\x1f\xb7\x88\x68\xf9\xa6\x30\x6b\xd6\xcd\xb0\x11\x28\x35\xa8\xe6\x1f\x21\x98\xd5\xcf\x56\x45\xa5\xad\x90\x9b\x27\x7b\x28\x32\x40\x0d\xed\xb0\x07\x71\xb0\x5f\x4d\x41\xb2\x60\x5f\xd7\xd6\x20\x6c\x6e\x7a\xe3\x37\x72\xcc\x6b\x9a\x57\xdf\xd2\x93\x37\x92\xd3\x27\xf5\x3c\x4c\xd7\xae\x31\x44\x40\x1b\xa3\x40\x1c\x2c\x6c\x3f\x01\x72\x15\xe3\x3d\x4a\xee\x53\xba\x31\x7f\x89\xcc\xa7\xef\x82\xcc\xef\xe1\xd2\xfd\x2d\xb0\xd6\xfd\x13\xaf\xca\x1e\x83\xab\x8f\x08\x0b\xe2\x60\x32\xa0\xb0\xb8\xf1\x1b\xff\x2e\x49\x9c\x42\x4f\x77\x50\x91\xcd\x0a\x98\xa9\x2c\x50\xa0\x22\x1b\x9c\x10\xe6\xea\x31\x1b\x92\xb8\x03\x55\x10\x00\x71\x30\x19\x34\xe7\x87\x92\x1e\xf5\xd0\x20\x31\x5b\x33\x50\x5c\x58\x71\xae\x57\x06\x58\x53\x90\xf7\x71\xb0\xe0\xb7\xc5\x4c\x64\xd8\x29\x43\x9b\x56\x40\xd3\xa4\xab\x32\x64\xf8\x19\x59\x65\x64\x74\x7e\xfa\x4e\x7a\x6e\xae\x16\xba\xee\x51\x9e\x74\x39\xd6\xf3\x84\x29\xe2\x43\xe3\x8b\x7a\xc7\x86\xda\x85\xff\x5b\x91\xfd\x7f\x73\x30\x19\x90\xdf\x2b\x5e\xe4\x11\xf3\x1e\x5a\x89\xba\x6e\x61\x8a\xbb\x71\xf4\xe3\xc8\x38\x7f\x7b\x4a\x80\xed\xfa\x88\x4e\x60\x3c\xf4\x36\x74\x2e\x02\xc4\xc1\x7e\xb5\x99\x0c\xad\xf1\x5a\x2d\x79\xaa\x61\x49\xe1\xc8\x4b\x6f\xef\x8a\xb8\x0e\x03\x8f\x83\x9f\xb3\x92\xbd\xe7\x51\xb4\x1e\xa2\x53\xc1\x88\xb0\x20\x0e\x16\x76\xc8\xcd\xfb\xa5\x5f\x82\x68\xc6\x17\x06\xb4\x02\x87\xcc\xa4\x87\xaa\x2e\x7d\xf7\xa7\xd2\x1e\xca\x77\xd8\x5b\x9d\x09\x4d\xd8\x42\x87\x64\x40\x1c\x4c\x86\xac\x92\x9c\xe8\x0d\x11\xed\x6f\x3c\xec\x35\x58\x01\x1b\x45\x43\x73\xdf\x0e\xb2\x53\x3e\x57\x05\x7c\xeb\x51\xd3\xa4\xaf\x8a\x85\x2e\x09\x02\x71\x30\x19\x2e\x9d\xc9\x1d\x3f\xbf\x79\xf0\xf8\x73\x58\x4c\x13\x63\xb9\xae\xd9\x25\xd7\xb4\x6a\x7e\xad\x8a\x63\xdf\x9f\xe0\x1d\xfd\x8d\x53\x39\x84\x0c\xa0\x09\xec\x7f\x99\x5a\x16\x69\x77\x35\x39\xf1\x54\x6e\xc6\x76\xb2\xd3\x8a\x89\x0f\x06\x55\x58\x8f\x0f\xf1\x74\x1c\x48\xdc\xa7\xdb\x7d\xda\x5d\x01\x5d\x6c\x0e\xe2\xe0\x85\x6d\xbb\x6c\xbf\x86\xe5\xfe\xc2\xe1\x5d\xfb\xa8\xe0\x6d\xf0\xec\x4f\x86\xb5\x3d\x67\x45\xf3\x31\x73\x87\x8a\x0a\x05\x56\x74\x0a\xb4\x64\x08\xe2\x60\xbf\x9a\x0c\xfd\x33\xba\x47\x75\x09\xa8\xde\x42\x84\x3c\x07\xeb\x4a\x52\xe1\x8b\x47\x62\xef\x45\x8e\x65\xb6\x0e\xf2\x39\x53\x5f\xf0\x43\x7f\x38\x20\x0e\x16\x96\xd3\x9e\xc0\xff\x57\xb2\xff\xc8\x4d\x2e\x67\x05\xdd\xac\xfb\xca\xc2\x27\xaf\x4d\xad\x30\xd9\xc7\x42\x8e\x86\xaf\xcd\x8c\x9c\xed\x23\xc2\x82\x38\x98\x0c\x24\x5e\xb9\x2c\x21\x72\x87\xd2\x9d\xb9\x7c\x75\x41\xdd\xd5\xe2\x1a\x8a\xad\xb9\x1f\xa2\x65\x79\xac\xfa\x1a\x8b\xc8\xef\xe6\x43\x55\x31\x41\x1c\xfc\x7c\x57\x06\x59\x8b\x37\x96\x8b\x36\xaf\x15\xef\x4b\x65\x34\xc1\xea\x6d\xce\x57\xe4\x36\x09\xc6\x81\x2f\xdf\x59\x9b\x71\xea\x4e\xfe\x84\x52\xd3\xa0\x45\x45\x44\xad\xe9\x61\xf8\x3a\x08\xe6\x09\x75\x8c\x78\xf7\x5d\x75\x4f\xad\xe3\xe3\xd7\xe1\x9f\x5b\x3f\x2c\x9b\xc4\x2f\x0a\x76\x65\x99\x71\xc8\xf6\x4f\x51\x8a\xfc\xeb\x3a\x48\xa8\x0c\xd2\x5f\x78\x93\x8b\xaf\xcf\x7d\x26\x5f\xf6\xa0\x0f\xf0\x86\x5d\xec\xa6\x6a\xb0\x8c\xe7\xea\xb4\xbb\x76\x27\x68\x8f\xca\x7e\x8c\x74\x6e\x15\x2b\xfa\xf7\x26\x2f\xae\xdc\x21\x5e\x4d\xad\x87\xcc\xab\x6e\x81\x8d\x37\xf1\x89\x9e\x3d\x2a\x41\x18\xc9\x3a\x14\x2b\xf2\xd3\x03\xc3\x0e\xaa\x5b\xe2\x9f\xa5\x4a\xff\x37\xab\x3d\xa0\xbe\xbc\xfa\x4a\x16\x5a\x09\x77\x4f\x0a\x5e\x67\xfb\xff\xb1\xf6\x96\x51\x55\x35\xef\xff\x3f\x4a\x4a\x77\x23\x8d\xd2\x20\xdd\xd2\x1d\x82\x20\x29\xa0\x94\xd2\x1d\xd2\xdd\x9d\x22\x48\x8b\x74\x4b\x87\x34\x48\x4b\x08\x12\x06\xa1\xa4\x74\xf3\x7f\x74\xf6\x7d\xff\xf6\xf9\xac\xef\xfe\xaf\xe5\xfd\xfc\xb5\xde\x73\xce\x9e\xf7\xcc\x9e\x3d\xd7\xcc\x75\x5d\x21\xae\x8c\x2b\x7d\x98\x08\xd1\x4c\x8c\xf3\x40\xca\x77\xd0\xf2\x56\xa8\xe9\x5a\x42\x69\x55\x84\xd9\x06\x8a\x03\x0f\xc9\x77\x51\x26\x93\xa6\x61\x25\xf3\x0e\xd5\x2c\x0a\xc4\xad\x1d\x5f\xef\xc9\x04\x26\x99\x22\x24\xa7\x8f\xf6\x9b\xe9\x56\x0f\x1f\x03\x43\x12\x82\x03\xaf\xb7\xcf\xac\x15\xa7\x42\xa9\x15\x03\x7f\xbf\xcd\x8f\x57\x79\x49\xb9\x15\xb3\xfb\xec\xf0\x09\x52\x5e\x4e\xe2\xd3\x37\xae\x34\x99\x40\x2e\x12\x28\x0e\x24\x3b\xdb\x28\x1b\xc8\xa5\xd8\x60\x39\x35\x46\xa3\xb8\x3a\xd6\x13\x71\x73\x5a\xb8\xc8\xa7\x81\x44\xef\xd7\x4a\x1f\x7f\x48\xac\x30\x0d\x9c\x3d\x87\xe0\x40\x43\xb2\x80\xbc\x89\xd3\x3e\xbf\x8e\x64\x60\x28\xab\xab\xb3\x34\xcd\x6a\x31\xc8\xf2\xc5\x17\xae\x04\xdc\x05\x49\xc9\x26\x1f\xe2\x89\xfb\x40\x56\x0b\x08\x0e\x9c\x0d\xb8\x8e\xba\x43\xf9\xda\xae\x89\x32\xc8\x08\x2d\x6e\xe8\x25\xe5\x19\xb1\x83\x9d\x07\x37\x9f\x70\xf6\xe2\xab\xcc\x5a\x2e\x1d\x5d\xd8\xfc\x0c\xe5\xf2\xff\x91\xb6\x57\x43\x57\x50\x69\x55\x5c\x93\x59\x3d\xe5\x07\xc7\x68\x65\x72\xb1\x7e\x92\x88\xee\xd0\x83\xe7\xb3\x39\x15\x65\x11\xd3\xd9\xc0\x73\x80\xe2\x40\x66\x28\xd0\x7e\xd2\x38\x20\xc9\xf8\x4c\x85\xcf\xb5\xa4\xac\x7d\x59\x49\x49\xef\xc9\xdc\x01\x3e\x2a\x69\xfa\x99\xd8\x78\xf5\x25\x3f\x90\x0d\x18\x8a\x03\x2f\xe3\xbb\x05\x77\xf9\x37\x93\x9e\x56\x3a\x57\x17\x88\xce\x33\xa2\x33\xba\x27\x15\xf3\xf5\x3b\x3e\x7f\x8b\x84\x9a\xef\x82\xb2\xb4\x01\x2c\xe3\x21\x38\x90\x6c\x6e\xc9\x78\x27\x05\xba\x32\xf9\x8f\xa1\xb0\x10\x82\x71\xa2\xeb\xf8\xb3\xe9\x5b\x14\xaf\x5f\xfb\x51\x7a\xba\x3c\xd3\x55\xcf\x01\xf6\x3f\xa1\x38\x90\x19\xa4\x72\x5b\x77\x94\x73\xc7\x0c\x8a\x7c\x9d\x70\xc9\x0b\x47\x9e\x7f\xcd\x0d\x35\x6b\x4c\xfe\x3a\x2e\x38\xba\xcf\xc7\xdc\x12\xa8\x0d\x3c\x5b\x08\x0e\x64\x06\x25\xa5\x8a\x7c\x56\x9a\x59\xcd\xa4\x8b\x62\xc1\xdb\xdc\xd1\x98\xb1\x9d\x02\xb9\x49\x5f\x4d\xab\xaf\x48\x2d\x4e\x10\x38\x9e\xb1\x02\xd9\xdd\x21\xe6\x1f\x78\x33\x94\x09\xb8\xc7\xbb\x6b\xe6\x65\xb5\xa2\x58\x9e\x07\x11\x1b\x0b\x3f\x72\xa6\xf5\xc4\xd8\x92\x96\x14\x91\x6b\x9a\xb3\x1b\xf8\x4d\x01\xfb\xc1\x50\x1c\xc8\x0c\xf8\x22\xec\x1a\xca\xed\x11\x6d\xf4\x08\xe5\x9d\xde\x44\x4c\x49\x25\x32\x5c\x9f\x52\xae\xed\x58\x88\x1f\x85\xf7\xe9\x8a\x17\x00\x67\x61\xa0\x38\x50\xaf\x19\x0d\x11\x35\xe8\xab\x6b\x7e\x4c\x58\x4b\x0c\xa5\xbe\x15\x8e\x2f\xf7\x39\xdc\xf5\xfd\x94\x27\x5e\xd3\x67\x5b\xdc\x8a\x34\x3d\xa0\x8a\x10\x14\x07\x4e\x0d\xad\x76\x20\x37\x95\x1c\x81\x52\x1a\x14\xb5\x4b\x47\x3c\xb5\x9f\xe4\xea\xfd\xe6\x9b\x4d\xd4\xd9\xc7\x23\x13\x74\x35\x96\x1e\xe0\x14\x33\x14\x07\x32\x03\x95\xbf\xd6\x02\x5d\x85\x39\xf2\xf5\xf4\xf0\x71\xf0\xef\xb9\x94\x8f\x5f\xbb\x23\x5b\xa2\x9e\x19\x8b\x54\x7b\xb1\xfe\x26\x78\x97\x02\x93\x85\xe2\x40\x66\x60\xc3\x52\xd3\x8c\x1c\x8f\xc8\x18\x36\x7e\xd0\xa6\x24\x32\x2b\xbe\xad\x85\xe1\x74\x4f\x56\x86\xac\x41\x29\xb8\xe4\xb8\x46\x04\x28\x3c\x0e\x15\x8c\x84\x37\x43\x05\x0a\x9e\xc0\xe2\x79\xbf\x3d\x41\xfc\x02\xcb\x7c\xc7\xab\xbc\x98\xaa\xdf\x4a\x82\xcb\x76\xd5\x7b\x65\x32\x13\xe8\xe8\x6b\xd6\xb0\x1f\x0c\xc5\x81\xcc\x20\xfe\x81\x73\x02\x81\xf2\x4e\xa9\xa5\x21\x89\x2b\xa5\xaf\x76\xdd\x83\x81\x4a\x39\x19\xec\xee\xf5\x23\xbc\x16\xbb\x36\xbd\x5e\xa0\xd7\xa0\x38\x50\xaf\x3d\x1f\x4b\x1a\x18\x6e\xec\x8a\x29\x9b\x4d\x1a\x9c\xc7\x0b\x19\x1e\x34\x0e\x3e\xa9\xbe\x5c\x4d\x68\xfe\x4c\x2e\xd3\xf0\x29\x10\xf8\x3a\x80\xe2\xc0\x6f\x1f\x47\xff\x4f\x42\xdc\x79\xbb\x5f\xba\xd1\x05\xbf\x39\x31\x39\xb5\x8c\xaa\xaf\x67\xf1\x20\xab\xaa\x4c\x59\x64\xdc\x93\x41\x06\x6a\xf9\x41\x71\x20\x33\x78\xec\xb9\x13\x0e\xb6\xba\x5c\x9a\x34\xc9\x53\xde\x52\xf9\x2e\x4d\x87\xea\x26\xd7\xb3\x6f\x71\x4b\x2d\x36\xa9\xbb\x12\xdd\x32\x1b\x08\x4d\x3f\xa3\x35\x43\x61\x0b\xe1\xe5\x18\x14\x97\xeb\x4a\xe9\x58\x10\x0f\xc6\x0a\xb1\xb1\xd7\x56\xbe\x4d\x91\xb4\xf4\x34\x7c\x67\x28\xed\xdf\xa1\x69\x8e\x8a\x7a\x2c\xa4\x9f\x08\x6f\xf0\x6d\x08\x33\x24\x78\xc8\xd3\xb6\xf2\x2d\xe7\x85\xdf\x5b\x14\x3c\x3e\x58\xe3\xcc\xe1\xc7\x50\xfb\x17\xca\xbf\xfe\x42\x0e\xa9\xbe\x20\x5d\xef\x13\xfd\x97\x45\x12\x39\xee\xa8\xc0\x87\xef\x4e\xf1\x57\xb9\x38\xbd\xe3\xd8\x0d\xbd\x42\xfa\x41\xa1\x69\x28\x65\xf8\xd0\x34\xdb\x3a\xbe\x47\x7a\xfe\x0b\xf5\xed\x08\x89\x79\xc6\x4d\x52\x81\x88\x21\x8e\x8d\xe2\x4f\x62\x28\x33\xa4\x56\xd8\x32\xcc\xc8\xff\xfe\xd9\xcc\x1d\x7c\x5d\xc3\x9c\x83\x06\x45\x71\x57\xa9\x4d\x31\x99\x49\xc7\x57\xae\x2f\x25\xa9\x50\x65\xa3\xa4\x86\x12\xa4\x43\x5f\x5c\x00\xa1\x69\x28\x4d\x58\xad\x69\x70\x68\xba\x48\xf5\x79\xe8\x41\x5a\x17\xda\xd0\x5c\x6d\xf4\xdc\x7e\x0b\x47\xfe\x67\x11\xdf\x1f\xf1\x67\xd8\x21\x2e\x63\x31\x5f\x98\x9e\x96\xfe\xf5\xd2\xef\x21\x5c\x68\xfa\xca\x65\xb9\xb9\xf9\xd9\xa1\x4c\x0f\x06\x39\x1d\xee\xa8\x44\x60\x79\x3b\xcd\x64\xd3\xec\x9d\x94\x95\xbc\xe0\x9b\x68\xde\xbe\xf7\x7f\xdf\x24\x5c\x68\x7a\xc7\x73\xf3\x11\x8e\xd5\x0a\xa6\x9b\xbc\x51\x26\xa5\x5e\x10\x93\x96\x4d\x24\x8e\xe2\x65\x24\xff\x75\xd0\x47\x13\x4a\x51\xc1\x80\xbf\x6f\x12\x2e\x34\xfd\xba\x4f\xd3\xe4\x97\xff\xab\xdc\x11\x6c\x8e\xe7\x13\xe6\x45\x48\x3f\x2a\x2a\x17\xed\xd0\xde\xf1\x3d\xbf\x77\xd7\x77\x79\xd6\x24\xe7\xef\x9b\x84\x0b\x4d\x07\x0c\xdc\xe8\x66\x8b\x93\x78\xbd\xa0\x7d\x8d\xff\x94\x76\x3d\xe6\xf2\x86\xba\x8f\xa8\xa2\x70\xf5\xa1\x30\xc7\x02\x73\x82\xa3\xd8\xdf\x37\x09\x17\x9a\xce\x74\x79\xf6\x56\xcf\x1f\x71\x75\xfe\xc1\x79\x1b\x9f\x6b\x4a\x51\x55\x94\x09\xb6\xce\xa4\x9b\xcc\xb5\x09\x3f\xa2\xeb\xa4\x02\xd9\xdf\x37\x09\x17\x9a\xd6\x7d\xd8\x66\xa6\x2b\xb0\x1e\xae\x2d\xed\x94\x3f\xa0\xe3\x26\xd2\xdb\xef\xe5\x26\xd8\x88\x61\xf1\xb6\x2d\xb6\xb0\x0e\x83\xfe\x3f\xa8\x1b\x0e\x17\x9a\xee\x09\x37\x39\x55\xf6\xa1\x3b\x5d\x4c\xa1\xba\x18\x8e\xe1\xc2\xc5\x19\xa7\x9c\x24\x7c\xf9\x38\x6e\x15\xa3\x57\xed\xf9\x6e\xed\xe2\x7f\xf3\xb1\x02\x35\x14\xe1\xdf\x42\x86\x08\x33\xb9\x12\x83\x53\xaf\x34\x3f\x18\x94\x46\x2b\x7a\x58\xc8\xad\xcb\x60\x72\xcd\x09\xfb\x98\xfc\x14\xd3\xe3\x38\xf2\x1a\x81\x4d\xc0\x50\x1c\xf8\x44\x97\xa1\xaa\xf9\xb5\xc0\x4f\x7b\x44\x4b\x71\x36\xe7\xd2\xd6\x83\x16\xed\xca\x22\x17\xef\x6f\x77\x4e\x2c\x0c\x5e\x45\xd3\x76\x02\x3b\xac\x50\x1c\xe8\x75\x41\xf2\x99\x86\xf2\xee\xe1\x94\xcc\x1f\x42\xb1\x35\xaa\x93\x91\xe5\x06\x12\x16\xbb\x69\x2a\xef\x59\xd6\xd6\xa4\xdc\x7d\x92\x8f\x08\x30\x59\x28\x0e\x24\xfb\xd2\xf3\x4a\xa9\x3b\x91\xc0\xa1\xf7\xe5\x80\x5f\x05\x5d\xdb\x04\xc5\xcb\xd4\xc3\xd6\x15\xc4\x4f\x51\x5a\xc9\x0f\xc8\xcf\xf2\x80\x2b\x97\x50\x5c\x90\xe4\xed\x7f\xcb\xa6\xcf\xcf\x8e\x16\x79\x7a\x93\x4f\x29\xb3\x59\x55\x1c\x17\x87\x96\xaf\x58\xea\x2f\xc9\xcd\xd3\x64\xaf\x26\x98\xbd\x6f\xba\xdb\x0c\x93\x85\xe2\xc0\xc9\xdc\xcc\x3d\xd0\x18\x93\x83\xdf\x33\xbe\x76\xb2\xa7\x2f\x14\x19\xbb\x97\x9b\x68\x81\xc2\x76\x52\x60\x93\xd4\xb4\x4b\x57\x9d\x45\x07\x5b\x92\x40\x4d\x92\xf0\x66\x98\x7f\x11\x6b\xd1\xa8\xbc\xd0\x4e\xa4\xfb\xf3\xa4\xda\x9b\x22\x2a\x70\xea\x8c\x59\x89\xaf\x9b\xec\xa7\xcf\x9e\x1f\x55\x9e\x9d\x03\xec\x07\x43\x71\x20\x33\x74\x12\xca\x67\xdd\xd5\xf9\x70\x25\xf4\x35\xfe\xfa\x51\x96\x4a\xc1\xcc\x6f\x91\x57\xb7\x34\x7b\x4a\x1b\x3a\x96\xad\x3d\x07\x9f\x03\x37\xf3\xa1\x38\xf0\xfa\x94\xe9\xd5\xd4\x4e\xe1\xa1\xe5\x6f\x76\x89\x88\x28\x29\x6b\x82\x97\xf3\xd3\x98\xf5\xf1\x6e\x3d\xf8\x56\xe3\xa8\x2f\x4d\x5a\x80\xc7\x0b\xc5\x81\x64\x59\xef\xc5\xdc\xe5\x66\x59\xb5\xa9\xf9\xf5\xfb\x5e\x6d\x9c\x38\x6d\x54\x4d\x32\x27\x53\x3c\x87\xcb\xc3\xb1\x29\x5a\x0d\x1b\xef\x6b\x98\x2c\x14\x07\x32\x43\x39\x3e\x9f\xc7\x7b\xe1\xef\x41\xee\x25\xbc\x48\x19\x37\xdb\xaa\xa1\x4e\xee\xe1\xda\x8b\x36\x6b\xbf\x14\x9b\x4e\xe8\x4b\x64\x80\x94\xc8\x50\x1c\xc8\x0c\x56\xc6\x07\x25\xb1\xb7\x0f\x55\x8a\xf1\x2f\x88\x63\x89\x38\xd7\x8e\x5a\xe7\x95\x3c\x0a\x67\x2b\xd4\xdf\x86\x60\x64\xbd\xd0\x48\x01\xee\x46\x42\xbc\xbe\xe0\xcd\xd0\x83\x37\x5d\x27\x87\x3e\x6e\xe4\x57\x8b\x6e\xb6\xd6\x1b\x50\xbf\xf8\xf3\x87\x11\x8e\xce\xd6\x9d\xac\xc9\xb8\x6c\x5d\x9b\x42\x60\x87\x15\x8a\x03\x99\xa1\x3b\x97\x64\xf2\x27\x51\xb4\x88\x1f\x8b\xb6\x7e\xb4\xc6\xee\x2a\x87\x1b\xdd\x94\x58\x5b\xcd\xac\x67\x75\x8a\xab\x2b\x23\x03\xf0\x2d\x08\xc5\x81\x7a\x6d\x7f\xa8\xc1\x97\xa9\x81\x95\x39\x9f\x0a\xfb\x73\x5c\xf5\x89\xe8\x39\x56\x6f\xcf\x9f\x9f\xfb\x6c\x03\x03\x65\x81\x35\x74\xa1\xc0\xcc\x00\xc5\x81\x3f\x88\x55\xdd\x04\x46\xe2\xb5\x9e\xd4\xb3\xe0\x27\x3b\xae\xcb\x3a\x6b\xea\x23\x09\x3b\x72\xa9\x22\x45\x65\xe7\xbb\xbf\x56\x1c\x02\xce\x8f\x42\x71\x20\x33\xd8\x9e\xb2\x11\x19\xff\x61\xb9\xb9\x42\xb2\xb7\xc3\x5a\xed\x91\xad\xed\xfe\x5c\x63\x80\xb3\xa8\xa4\xb5\x70\x50\x7e\xd8\xc7\x0e\x64\x4c\x82\xe2\x40\x66\xb0\x0f\x7b\xf7\xad\xdf\x9f\x8d\x0d\xaf\xf0\x29\xc3\xb3\x3b\xcd\x83\x5d\x5b\xd8\x55\xf8\xc8\x07\xba\x2c\xce\x8c\x2e\x9f\xf0\x4b\x80\x13\xf6\x50\x0b\x0b\x78\x33\x14\xaa\x84\x6b\xec\x04\xb0\x53\xe9\xa7\x7e\x94\xd0\xc8\x9c\xd6\x92\x6e\xc4\xbb\xbf\xe5\xac\x8d\x24\xcb\xca\x21\x79\xae\x9e\x00\x1c\x35\x82\xe2\xc0\xd7\xbc\xcb\x33\x4b\x3f\xef\xe9\xfe\x54\x71\x7f\x67\x1b\x77\x1f\x13\xf9\xd8\xd3\x0e\xa9\x31\x9e\xaa\xb0\x70\x37\xab\x45\xd3\x30\x18\x48\x5f\x0c\xc5\x81\x7a\xed\x13\xba\x70\x06\xb9\x49\x40\x88\xf0\x0b\x16\x1d\xff\xe5\x44\xd2\xf1\x2d\x91\x40\x5f\x67\x9b\x19\x59\x96\xa9\xe3\x62\x7b\x69\x5d\x98\x2c\x14\x07\x92\xad\xcf\x10\xe3\x76\x9c\xf8\x74\xab\x52\x4b\x59\xc9\x78\x4b\xcf\xaf\xa7\x3e\xe6\x62\xf5\x45\x58\x57\xc9\xcc\x89\x5e\xb2\xb1\x3a\x90\x46\x0c\x8a\x03\x99\xa1\x77\xda\xff\xa8\x45\x74\xf9\x03\x17\x29\x1f\xd6\xa2\x82\x72\x20\x7b\x22\xff\x33\xd1\xba\x1f\x3f\xd4\xee\x8b\x3f\xc2\xd4\x4f\x02\x12\x7a\x43\x71\x20\x33\x2c\x7a\x08\xa7\xbd\x2d\x5e\x4b\x36\xee\xf9\x45\xe5\x56\xb8\x88\x81\xb9\xfa\xdb\x12\xcb\xbf\xca\xb0\x8b\xe3\xa0\x7a\x8c\x6b\xde\x19\xf8\x72\x85\x58\xf2\xc1\x9b\xa1\xb5\x19\x9f\x9c\x89\x6d\xa9\x60\x4a\xea\x4f\xb7\x5b\x6d\x79\x4a\x00\xf1\x60\x0c\xf3\x59\xc5\x29\x16\x19\x69\x47\x0f\x2d\x8f\x34\xec\x07\x43\x71\x20\x33\xe0\x1c\x15\x21\xfb\x5c\xde\x2c\x0a\xcb\x53\x64\x20\xd1\xab\xa7\x31\x7c\xd7\x53\x19\xc8\x5a\x78\x7e\x48\xf6\x2e\x68\xa8\x73\xab\x0c\x26\x0b\xc5\x81\x7a\x4d\xfd\x22\xcb\x70\x96\xa5\x91\xeb\x3d\xc6\x80\xa9\x8e\xfa\xf7\x34\x4c\x03\x82\xed\x86\x02\x5f\x74\xfb\x6d\x23\xc6\x25\xeb\x4d\x6c\x98\x2c\x14\x07\x92\xed\x7a\x6f\xd9\x10\x5f\xae\xf4\x70\x75\x33\x29\x3c\x92\xc9\x9a\xb1\x94\xb7\xef\x81\x35\xb6\xde\x5d\xf1\x02\xce\x98\xbc\xb7\x69\xc0\xbd\x08\x28\x0e\x64\x06\x14\x5f\xb6\x29\xda\x55\xd3\x99\x4f\x6b\x68\x6d\x01\x16\x1b\x32\xd9\xdd\xca\x69\x06\x31\x34\x8e\x9d\xbb\x11\xf5\x4a\xe1\xb7\x80\x50\x06\x14\x07\x32\x03\xbf\x5f\xaa\x7c\xa7\xe8\xad\x65\x0d\xb1\x5c\xbc\x7d\x04\xc5\x6d\x8f\xd0\x5d\xb3\x33\xfc\x74\xc7\xc7\xf3\xe2\xd4\xca\x1a\xb4\x9f\x61\x66\x80\x5a\x8c\xc3\x9b\x81\x0e\xf1\x1e\x3b\xf7\xb5\x40\xf5\x8c\x9b\xc3\xca\xc2\x60\x9c\xfe\x14\x1a\xc1\x12\x89\xef\x87\x8c\xe8\x9e\xc4\x1c\x8c\x9d\xab\x5c\xd8\x0f\x86\xe2\x40\x66\x88\xd3\xd4\x18\x2e\x75\x8e\x08\x2e\x2f\xd3\x33\xb6\xd5\x8d\x8f\xd2\xee\x64\x0a\xdb\xac\xdd\x67\xfa\xfc\x96\x74\xe9\xa7\xe4\x35\x70\x08\x11\x8a\x03\xf5\x5a\x64\x8d\xe9\x9a\x4f\x4f\x13\x6e\x0c\xd1\x13\x22\xed\xbd\xa8\x8a\x9b\xda\xa9\x5b\xcd\x56\x2d\x38\x4d\x67\x49\xb4\xe4\xee\x8d\xc0\x84\x03\xc5\x81\x64\x7f\x7e\x76\xb0\x89\xcd\xcb\x36\xbe\x35\x4a\xbb\x69\xff\x52\xcf\xa4\x7b\xca\xed\xb7\xee\x2f\xd3\xe6\xc8\x5f\x2e\xfd\x9e\x9f\xb7\x81\xfa\xb7\x50\x1c\xc8\x0c\x34\xbf\xf1\x13\xdb\x06\x9c\x45\x16\x57\xed\x62\x5f\x7a\xbf\xbb\x88\x68\x77\x8c\x23\x7d\x99\xab\xfd\xb0\x9f\xa4\xc0\x93\xa2\x10\x38\x03\x02\xc5\x81\xcc\xc0\x5a\xcc\x7e\xc1\x43\x47\xa6\x4e\x1f\x92\xc3\x71\xd8\x72\x15\xe7\xd5\x6b\x9d\x4b\x6c\x41\x99\x80\x9e\x56\x1e\x88\x9f\x12\x44\x0e\xd4\x7d\x80\xf8\x4c\x82\x37\x03\xa1\x01\xff\x58\x5f\x70\xaa\x97\xfa\x71\x38\xeb\xd8\xe0\xac\xb2\xfe\xd8\x8a\xed\x4d\x52\x7e\x28\x0a\x97\x9f\xf0\xca\x9a\x04\x10\x36\x84\xe2\x40\x66\xc8\xee\x1e\xaa\xe3\x64\x3b\xff\x34\x95\x2b\x41\x28\x97\xe7\x97\x2f\x86\xcf\x39\xf2\xd1\xc4\x0a\x49\xf8\x06\x5b\x39\xd2\xd6\x08\xb8\x3e\x07\xc5\x81\x7a\xad\x6f\x34\x7f\xbc\xd9\x65\x8b\x2c\x06\x53\x92\xa8\xf0\x8d\xdc\x8d\xf4\xc3\x59\xdc\x65\xd4\x12\xbd\xcb\x70\xda\x0a\x83\x89\xcf\xef\x61\xb2\x50\x1c\x48\x56\x8a\x98\x46\x73\xd7\xcd\x76\xb0\x2c\xea\xda\xc8\x61\xa6\xe3\x5b\xee\x0d\x2b\x72\x4b\xcf\x18\x31\x6d\xce\x23\xb7\xc7\xbb\x58\x66\xc0\xb6\x34\x04\x07\x32\x43\x15\x92\xa4\x63\xf0\xdb\xb7\x04\x02\xa4\x6f\x82\x1f\xd7\x73\xce\x26\x4f\xa9\x3b\x59\x18\x7e\xa3\x64\x6f\x15\x76\xe0\xf1\xb9\x0e\x80\xc9\x42\x71\x20\x33\x74\x24\xd2\x57\x9a\x39\x8b\x3d\x56\x93\xb8\x89\xcc\x55\xc2\xc2\x6b\x24\x7a\xff\xfa\x56\xa6\x73\x67\x13\x03\xe1\xc2\x9e\x9a\x34\x05\xcc\x0c\x50\x1f\xb0\xf0\x66\x98\x36\x15\xf7\xab\x97\x4e\x38\xf2\xf1\xff\x93\x41\xaa\xb3\xd2\xb6\x75\x83\xc9\xaf\x7f\x4d\x5f\xda\xa4\x9e\x34\x6e\x8e\xb0\x02\xd4\x58\x81\xe2\xc0\x17\xb1\x32\xed\x86\x42\xcd\xf6\x85\xb8\xc5\x79\x97\xf4\xe5\x73\x68\x9a\xf0\x9b\x2e\x1f\xb5\x2a\x0f\x37\xbb\x73\x75\x3e\x90\xa2\xc3\x03\x2e\x62\x41\x70\xa0\x5e\x3b\x7f\xdf\xd2\x76\x79\xb2\x20\x8b\xb9\x93\x68\xc0\x73\xda\xf7\xaa\x4b\xb3\xd3\x4d\x3a\xe8\xe6\x9b\x9f\x02\xdb\x73\xea\x6a\x5f\xa0\xae\x3b\x14\x07\x92\x65\x2e\xf6\x47\xfb\x10\x91\x3a\x6f\x3b\x2c\x83\xb6\x28\xfa\x50\x3e\xbf\x98\xfc\xcb\x70\x5f\xf6\xbd\x68\xf5\x19\x57\x69\x4f\x01\x1d\xe0\x36\x1a\x04\x07\x32\x43\x5b\x79\xe7\xb3\x55\x1d\x4d\x3b\x4b\xe9\xdc\xcd\x2f\x87\x2c\xd8\xd6\xa3\x3b\x99\x94\x2e\x13\xbe\xa6\xef\xad\xa2\x96\x19\xcc\x81\xa2\xc1\x50\x1c\xc8\x0c\x6e\x66\x71\x46\x7b\xc3\x04\xe5\x25\xfd\x77\x82\xd8\xc5\x0f\x43\x8c\x68\x91\x96\x78\xec\xd6\x59\x89\xbf\x29\x1d\x1d\x2d\x22\x0f\x00\xa1\x69\xa8\x4d\x45\x58\xad\x69\xb8\xd0\xb4\xdd\x6d\x2f\xa2\x49\xbd\xb8\x14\x3a\x2f\x3c\x81\xae\x7a\xab\x1f\x35\x3e\xc5\xea\x1b\xa6\x72\x71\x7c\x21\xf2\xaf\x2e\x42\x4c\x14\xff\x7e\xeb\x05\x2e\x34\x5d\xbf\xd4\xcc\x15\x72\x4d\x3d\x5e\x5a\xf7\x39\x77\x95\x07\xfb\x36\x01\x5f\x9b\xfd\x4e\x62\x5e\xd3\xb7\xcd\xe6\x11\x8d\x86\xfc\xd5\xbf\x6f\x12\x2e\x34\xdd\x82\x75\xde\x6d\xc0\x97\xb2\x48\xa5\x8b\xfe\x59\x99\x99\xd5\x4b\x59\xf1\xa6\x86\x77\x19\xb7\xd4\xe2\x83\x07\x85\x0d\xeb\xa4\xd7\x7f\xb3\xdb\x03\xf5\x2c\xe1\x87\xe4\xda\x0c\x52\x2e\xe9\xfc\xa6\x65\x1c\xce\x6f\x46\x04\xff\x21\x5f\x26\x1d\xfc\xbd\x1f\xda\x2b\x7a\x4d\xf2\xf6\x0d\x51\xf8\xca\x39\x30\xdb\x40\x71\xa0\x21\xc9\x83\x25\xed\x7e\x45\x76\x5d\x1f\x23\xbd\xf4\x88\x2b\xff\xc1\xf7\x25\x0d\x8f\x4f\x13\x4e\x44\x93\xe9\xb3\xab\x08\x6b\xbe\x33\xc0\xa1\x42\x28\x0e\x34\x76\x7c\xbf\x67\x11\xe0\x93\x2b\x66\x08\x32\xc6\x7e\x14\xda\x7a\xcb\x23\xfe\x2c\x25\xd9\x52\xea\x3e\x46\xba\xb8\x79\x9f\x52\x4f\x13\x70\x32\x0b\x8a\x03\xc9\xa6\x35\x2d\xd9\x16\xf2\x21\x3b\xc7\xdb\x59\x51\x06\xbb\x28\xf3\x2f\x4b\x9e\xf8\xc6\x7c\xc9\x8e\x79\x43\xa3\x10\x3d\xe0\xf4\x64\x14\x26\x0b\xc5\x81\x86\xe4\x33\x4a\xae\x37\xa1\x1f\xbe\xfb\x6b\xa3\x57\xb0\x7e\x78\x59\xab\xb1\x8c\x32\xaa\xc2\x65\xc2\x6e\x3c\x8b\x79\x16\x14\xf3\xb3\x01\x38\x73\x0d\xc5\x81\x86\x24\xed\xbc\x5c\x8d\xc3\x81\xa7\x81\x4e\x43\xce\xc2\xa7\x18\x47\xc2\x8e\x3b\x59\x82\xbf\xdb\xfb\x44\xf0\x8c\x33\xca\xca\x3f\xfa\x00\x15\xbb\xa0\x5c\x0e\x6f\x86\xc3\x56\x63\xa3\xaa\xf5\x23\x65\xb7\xa4\x17\x6e\x9b\x3e\x3a\xe7\x4e\xfa\xf3\xdc\x76\x3f\x7e\xd0\xf5\xe5\x94\x8a\xed\x30\xb4\x7e\x81\xfd\x60\x28\x0e\x64\x06\x0b\x9c\x2e\x51\x05\xc2\x79\xdb\x16\x9d\xe6\xee\x13\xe2\xe3\xa1\xdc\x05\x63\x7d\x03\xd3\x45\x02\x24\xb2\x33\x0d\x04\xa9\x19\x20\xc1\x16\x14\x07\xce\x77\x33\xf0\x0a\x9b\xb2\x77\x5d\x97\x7f\x8d\x31\xa4\xd2\xd8\xfd\xc7\x81\x73\x2d\x7f\xac\x9b\x61\x91\xc5\x24\xd7\x4f\x76\x5f\x54\x0b\x98\x2c\x14\x07\x92\xbd\xf7\x23\xb2\xbd\x48\x51\x35\xdb\x5b\x81\xf7\x60\x60\x39\xa8\xd1\xf6\x17\x5b\xed\x37\xf3\x2f\x01\x45\xdb\x5a\x84\xbd\xe8\x32\xd1\x30\x59\x28\x0e\x64\x86\x97\xb5\x2b\xb3\x44\x27\x62\xae\xaf\x46\x30\x9e\x6d\x76\x14\x1b\x29\x65\x3c\x1a\xa5\x6a\x5d\x68\xab\xec\x21\x90\xf8\xde\x6c\x05\x6c\x79\x41\x71\x20\x33\x7c\xa2\xe2\xe4\x17\x7c\xbd\xcc\xf4\x11\xa9\x4b\x6d\x47\x29\xcd\x36\x42\xbe\x67\x65\x39\xf8\x96\xf9\xae\xb9\xde\x9b\xb1\x45\x5d\x3b\x98\x19\xa0\xe6\x1f\x78\x33\x70\x38\x0b\x8d\x11\x6f\x15\x58\x77\x04\x7e\x7c\x9e\x42\x6e\x56\xed\x49\xe6\x3f\xea\x1a\xed\x17\x10\xbe\x33\xeb\xc7\xcc\x2c\x03\xa4\x61\x87\xe2\x40\x66\x78\xf3\xc6\x9c\x04\x8d\x40\xa6\xf5\xe4\xab\x15\xfd\xd2\xa1\xb6\xee\x7a\x23\x6d\x6e\x06\x36\x55\xe8\x80\xa9\x37\xf1\x9e\x58\x37\x15\x4c\x16\x8a\x03\xf5\x5a\xba\x90\xc6\xf9\x3b\x79\x8f\xe0\xf0\x6f\x81\x85\xf9\xce\x15\xbd\x68\xa4\xa8\xba\x09\xb9\x17\x6b\x0c\x77\xfb\x5f\x65\xd2\xf4\x01\x95\xb1\xa1\x38\x90\x6c\x0e\x2a\x1f\x7d\x51\x59\xd9\x30\x15\x2f\x77\xae\xfa\x22\x8a\x05\xce\xae\x66\x15\xf2\x38\x17\x05\x02\xbd\x6c\xd1\x25\xad\x35\x70\xbf\x01\x8a\x03\x99\xe1\xf0\xa0\x60\x18\x17\xe7\x22\x76\x95\x42\x6f\x80\xe2\xe3\xad\x61\x4b\x55\x45\x6c\x47\xfb\x37\x35\xd7\xfa\x47\xe1\x19\xd3\xe5\x40\x41\x43\x28\x0e\x64\x86\x17\xe4\xfa\x4f\x34\x7d\xab\x79\x94\x88\xde\x3b\x84\x9c\xcd\x71\x90\x86\xb9\xea\x08\xa2\x9a\x06\x75\x32\xdb\xd4\x3a\x7a\xa3\x3e\x80\x99\x01\x2a\x18\x09\x6f\x06\xdb\xc7\x3a\x44\x06\xce\xfe\x0b\xe7\x84\x45\xd8\xef\xa9\x46\x78\xff\x3c\x34\xff\xd5\x85\x8a\xde\x7d\x4f\xef\x09\xb2\xd9\x98\x53\x1f\xb0\x3d\x05\xc1\x81\xcc\xf0\x8a\xd8\x83\xba\xe6\xae\xb5\x9c\x6c\xce\x4f\xd4\xd4\xf0\x0f\x9d\x3d\x14\x54\xcd\xdf\xfb\xef\x8a\xab\x90\x4a\xdf\x0a\x9d\x4f\x04\x92\x6b\x40\x71\xa0\x5e\x6b\x9e\xd9\x48\xb4\x27\xad\xa8\x1d\x76\x45\xda\x23\x3d\x53\x98\xc0\xfb\x52\xa6\x2d\x44\x14\xaa\xed\xa5\x47\xb2\x3c\xd2\xf5\x08\xd8\xed\x81\xe2\x40\xb2\x1b\x09\x6c\xf4\x27\x1c\xed\x27\x92\x22\x02\x0a\x3a\xc7\x6f\xf7\x4d\x54\x88\x10\xed\x1f\x34\x3a\x06\xb7\x90\xa1\x4a\xde\xcf\x77\x81\xc9\x42\x71\x20\x33\x3c\xd7\x5f\x48\xd8\xdd\xb1\x7c\x46\xb0\xd1\xe5\x77\x5f\xfc\xf6\x4e\x47\x9f\x88\x68\xa3\xfc\x68\xad\xf8\xf3\xec\xea\x97\xa9\x39\xda\x40\x68\xba\x65\xa8\xfc\xe9\x23\x71\xa7\x7b\x92\xfa\xec\x61\x0f\xb8\x48\xb1\x38\x76\xcb\xdc\x07\xd5\x12\x4b\x68\x4e\x2f\xdc\x2c\x03\x10\x46\xfe\x1d\xe3\x9d\xb8\x4a\x71\x24\x0d\xc3\x74\x68\xc7\x94\x6a\xd1\x15\x78\xff\x5b\xb4\x33\xb0\x9a\xb9\xeb\x03\xe6\x7d\xef\xfb\x33\x07\xca\x5e\x16\xff\x42\x1b\xc6\xdf\x96\x60\xa3\x56\x60\x21\x29\xbc\xba\xa0\x35\xf7\x74\xd4\x23\xda\x4a\xe2\xa4\xb7\x95\xd4\xc8\xc3\xf3\xce\x9f\x96\x38\x05\x85\xa6\xa1\x94\xe1\x43\xd3\x61\x9f\x8d\x1c\xfc\xbe\xc5\xdd\xee\xd4\xaa\x5a\x71\xc6\x12\x4e\xb7\x64\x40\x5a\x7a\xf2\x7b\x6d\x2c\x57\xf8\x76\xb9\xc2\xe4\xc5\xf4\xbf\x50\xc7\xa6\x78\xa2\xd0\x26\xa7\x02\x2b\x67\x15\xf6\xbb\xaf\x63\xdd\x49\x23\x71\x39\xb3\x73\x8d\xaa\xce\x6b\xd3\xb8\xeb\xff\x7c\x2c\x05\x42\xd3\x50\x9a\xb0\x5a\xd3\xe0\xd0\x74\x07\x2e\x71\x1c\xd9\x87\x77\x3e\x3d\x05\xed\x2c\x9c\x57\x93\x93\xc8\xaf\xcf\x3e\x46\xec\x3b\x7f\x49\xc6\xbc\xfb\xe3\xee\x08\x99\xcc\x5f\x2f\xfd\xfc\xe1\x42\xd3\x8e\xc1\xcc\x87\x42\xb1\x81\xe3\x1f\x14\x1e\x25\xa7\x3f\x91\x61\xcf\x4e\x4c\xe1\xba\xbb\x9a\x20\xfb\x88\x3d\xe0\xbb\x43\x6b\x3a\xe3\xdf\x37\x09\x17\x9a\x9e\xed\xd6\xc6\x63\x9e\x53\x20\x33\xbe\xbd\x7a\xc8\xab\xf0\x68\x42\x64\xf5\x61\x5d\x84\x0d\x12\x85\xd5\xaf\xb7\xf7\x63\x77\x67\x2e\xfe\xbe\x49\xb8\xd0\xf4\xd8\xf1\xdc\x0a\x89\xf7\x00\xc7\x9c\x58\x94\x53\x43\xe1\x68\x0d\x16\x01\x29\x2b\x81\x54\xb0\x47\x00\xff\x6c\x01\xce\x46\xfc\xe9\xdf\x37\x09\x17\x9a\x5e\xf3\x70\x94\xc3\xf9\xda\x19\x31\x2b\xff\x16\xc9\xc6\xc5\x8e\x83\x6a\x9e\xa3\x0e\xf9\x60\x63\xa1\x91\xc8\xb9\x4b\x6c\xcf\x40\xf0\xef\x9b\x84\x0b\x4d\xdf\x15\x8f\xd6\x09\x62\x25\x30\xfc\xa2\x9a\xb4\xbf\xfe\xcc\xe3\x09\xd9\x52\x65\xb6\x3a\xb5\x22\x26\xdf\x65\x93\xa8\xe0\xf7\xde\xff\xa0\x54\x39\x5c\x68\x9a\xe1\xbc\xbd\xf6\x6a\x3b\x37\xa8\x54\x47\xdb\xb7\x8a\x90\xdf\x54\xb3\x08\x8d\x20\x24\x4a\x49\x8e\xd7\x2b\x25\x51\xd3\x7c\x23\xfc\xef\x9b\x84\x0b\x4d\x0f\x12\x3a\x1f\xcf\x1d\x85\xdd\xfa\xc5\xd2\xfe\x8a\x45\x17\xd1\xb6\xf2\xd2\x69\x93\x29\x1b\x6d\x79\x25\xff\x3c\xba\xc2\xcc\xe2\xcb\x7f\xf3\xb1\x02\x35\x14\xe1\xdf\x42\x2c\x7d\x2e\xb1\x07\x01\xe6\x09\x42\x2f\x9a\xac\xb9\x3e\x9e\xc4\x68\x4a\xc6\x1c\xe0\xf5\x2c\x5d\xf7\x66\x4e\x37\x13\x6d\xbe\x06\xb6\x99\xa1\x38\x70\xce\x40\xbb\xc9\xca\x83\x18\x54\x4d\x1c\x07\xf1\xef\xb7\x5d\x59\x65\x14\x3f\x8f\xa6\x53\x3d\x79\xbb\xf6\x60\x03\xcf\xcd\xed\xc0\xa9\x1a\x26\x0b\xc5\x81\x5e\x17\x99\x27\xed\x4d\x17\x9b\xd2\xf4\x7e\x48\x17\x26\xb8\x85\xca\x73\xce\x0a\x8c\x15\x79\x5d\x31\x37\xd3\xcb\x29\x4e\xb1\x98\xe6\xbd\x30\x59\x28\x0e\x9c\xd9\xaf\x80\x78\xef\xe8\x23\xef\xdd\xfc\xf7\x04\xfe\x33\xf5\xdd\xd5\x5d\x78\x28\x96\x8a\x8a\x1a\x8f\xe8\xbb\x0e\x34\x94\xcc\xd1\x81\x33\x8e\x50\x1c\x28\x25\x88\xa6\xce\xd6\x83\x6d\x37\x4a\x92\x56\xd9\xc3\x1b\xcf\xc4\x0a\xc2\xef\xbf\x0c\xeb\xf2\x6a\x0f\x78\x3d\x1a\xb5\x3f\xcd\x9a\x67\x03\xc5\x7c\xa0\x38\x50\x97\xb5\xfb\xda\xcc\xac\x6d\x6c\xd7\xc5\xb8\x67\x2e\x9c\x33\xf9\x6b\x5d\x9e\x12\x3f\xf7\x9e\x14\xc3\x70\xa9\xa8\xcc\x0b\x6d\x55\xd3\x87\x2d\x49\xa0\x26\x49\x78\x33\xe0\xb2\x87\x0a\xde\x18\x66\x19\x23\xf4\x8c\x4b\xa9\x58\x62\x4d\x5e\xbb\x39\x0b\x21\x7d\x7c\x1f\xa9\xba\x55\xf9\x1a\xd9\xc4\x6b\x16\x38\x50\x00\xc1\x81\x2b\x98\x31\x9d\x0a\xe7\x53\xdd\x6d\x10\xf1\x7c\x91\x66\xb4\x25\xcc\xab\x20\x24\xc2\xcd\x77\xea\x5e\xc5\x68\x1b\xf7\xc0\x2f\x8b\x39\x09\x26\x0b\xc5\x81\x7a\xad\x20\x82\xf3\x72\x45\x77\xf6\xfe\xb6\x1a\x8d\xa4\xae\x6f\x9c\x4e\xc2\xbd\x9b\xb5\x83\xe7\xe4\x62\xb1\xbc\x9f\xc4\xc8\xdd\x66\x81\x94\xaa\x50\x1c\xb8\x84\xb5\x1c\x59\x97\x88\x70\xae\xf7\xc7\x81\x71\xfb\x69\x0c\xcd\xbe\xd2\xa9\xc7\x5f\x84\xb3\xce\xce\x5b\x96\x4d\x2f\x6a\xb7\x6a\x80\xa4\x94\x50\x1c\xc8\x0c\x63\xc6\x5b\xda\xe4\x48\x1f\x1a\x51\x2c\xdd\x44\x83\xc3\x2a\x93\xbd\xb7\x3e\x29\xb0\x44\x7f\x1c\x37\x2f\x90\xc1\x41\xeb\xe7\x00\x52\xf0\x41\x71\xa0\x2e\x7b\x9b\x95\x9b\x5c\x3b\x2e\xda\x66\xdd\xe7\xbb\xf8\x6b\x26\xe1\xe2\xfe\x07\xed\xe5\x2c\xb5\xa6\x91\xb2\x3a\x46\xe7\x49\x85\xcd\x32\x98\x19\xa0\x5e\x5f\xf0\x66\x58\xf0\x25\x0a\xaa\x13\xbb\xf7\xfa\x07\x56\xce\xb5\xc4\x9d\x3d\xdc\xaf\x59\x8f\x19\xa8\x5f\xd8\xaf\x34\xc6\x3c\x6f\xc4\x43\xc9\x06\x12\x27\x42\x71\x20\x33\xb4\xe5\x98\x5b\xf3\xf1\x3c\xca\xa4\x0d\x7b\xb7\x8e\x91\xb7\xcc\xd4\xf7\x9e\x5d\x57\x90\xd1\xc6\x60\x45\xe1\x22\xaa\x88\x7c\x1d\x48\xa9\x0a\xc5\x81\x7a\x8d\x52\xc1\x62\x9b\x93\x30\xce\x51\xe3\x5e\x42\x68\xa9\x30\xe5\x3d\x47\x16\x31\x09\x45\x14\x8e\x65\xb6\x3f\xcc\x74\x74\xbc\xf4\x95\x30\x59\x28\x0e\x24\x7b\x5f\xe8\xb0\xca\x24\x3e\xe1\x2e\x1b\x0b\xee\xa3\x05\x55\x1c\x85\x53\x01\x49\x87\x48\xee\xc2\xd3\x77\xc8\x0e\x51\xae\xa4\x18\x22\x30\x59\x28\x0e\x64\x06\xf2\x32\x3e\xd4\x92\xc0\x1b\x8f\x3a\xb6\x21\x5a\xf4\x47\x76\x6e\xfe\x6f\xe5\xda\x1f\xb6\xe7\x24\x8d\x36\xc8\xb5\xbf\xdf\x9e\xd1\x84\xc9\x42\x71\xa0\x2e\x33\x0a\x45\xa1\xbc\xbf\xdf\xbf\xb2\x6e\x69\x59\x78\x35\x12\xd4\xb0\xbb\x59\xfe\xa3\x11\x51\xb4\x6b\xfd\x4a\x30\x45\x8d\xfd\x00\xa8\x28\x0b\xb5\xb0\x80\x37\x43\xef\xf0\x4c\x96\xc7\xce\x1d\xc7\x3f\xb7\x99\x50\xd1\x8f\x73\x9c\x15\xeb\xcc\x30\x93\x9f\xd8\xde\x0d\xc4\xd9\xc2\x78\xf6\xe4\x0b\x90\xd8\x1c\x8a\x03\x99\xe1\x61\x50\xc6\xf5\x91\x0e\x5a\xf1\x9c\x4e\xce\xad\x81\xfd\x80\xe0\x1d\x9a\x9e\x8f\x98\xdf\x76\x6f\x9c\x1f\xd2\x62\xe5\x46\xe2\xba\xc3\x64\xa1\x38\x70\x68\xba\x99\xff\xe2\x90\xd1\x7a\xea\xe6\x95\x7f\xaf\xdb\xaa\x21\x72\x2d\xd3\x8c\xdd\xc0\x59\xe5\xa7\x97\xc1\xe8\xdc\xf4\xf6\x66\x40\x0c\x19\x8a\x03\xc9\x6a\x18\x2f\x56\xe2\xcf\x8b\x6f\x88\xae\xaa\x15\x24\xda\x99\x7c\xf2\xd7\xd3\xbc\x9b\x3e\x73\xc0\x79\xef\xb3\x14\x29\xa7\xc2\x47\x20\x73\x14\x14\x07\x32\x83\x4d\x2e\x53\x32\x9b\x1f\xd2\x5c\xc6\xf7\x8b\x2c\x86\x44\xa2\xd9\x57\xb1\xfc\x56\x8e\x5a\xbe\x8d\x8b\x01\x03\x61\x84\x9f\x72\x80\x87\x00\xc5\x81\xba\x2c\x63\x5e\x37\x20\xf3\x41\xda\x69\x5c\x6a\xcf\x10\x66\x32\x63\x9f\x21\x56\x06\x2d\x93\x4d\x12\xb7\x2c\x8f\x63\xf7\x37\x8d\xf3\x5d\x98\x19\xa0\x96\x7c\xf0\x66\x48\x17\x32\xa6\x34\x37\xbc\xba\x9c\xf0\xa6\x58\x91\x12\x3b\x4e\x13\x25\x54\xe1\xf0\x31\xf5\xad\x0a\x55\xd0\xf8\xde\xea\x6b\x9f\xf0\xcf\xc6\xc0\xff\xcd\x81\xcc\xc0\x80\x8c\xf9\x25\x73\x88\xfe\x8c\x41\xf3\x8f\x9d\x10\x8b\xec\x10\xfe\x97\x72\x03\x33\x92\x71\x4d\xc6\xc3\x89\x65\xe6\x9a\x90\x48\x98\x2c\x14\x07\xea\xb5\x8b\xd0\xdd\xdc\x09\x77\x4a\x7d\x8c\x06\x46\xad\x39\x9b\x71\xae\x4d\xe3\x52\x6b\x19\xb9\xf9\x4f\xdf\xe5\xa9\xc4\xf7\x6f\xf1\x02\x77\x6f\xa0\x38\x90\xec\xf2\x11\x05\xd9\x6b\xd3\x7e\x3a\xfe\x35\x81\x9b\xcc\x08\xe9\xdc\x00\x62\x0d\x3e\xf5\x37\xab\xc1\x2f\xe6\xe6\xb2\x82\x4d\x55\x80\x7a\xe6\x50\x1c\xb8\xb6\x48\x74\x18\xe7\x97\x5a\x36\xb9\x8b\xdd\x98\xaf\x37\xaa\xe5\x39\x23\x1e\xf1\xf6\x2f\xc2\xef\x51\x73\xbd\x09\x6f\x67\x99\x4b\x59\x06\xa6\x47\x08\x0e\xd4\x65\x11\xf3\xb4\xd3\x89\xf5\xfa\x08\x16\xd7\x7e\x3d\x71\xfa\x35\x08\x15\xd3\x9b\x04\x91\x16\xeb\x55\xf8\x6c\x12\x45\x52\xbf\x86\xf2\x61\x66\x80\x5a\x8c\xc3\x9b\xe1\x29\x6f\x1e\xfa\x7a\xfb\x2b\x33\xf2\x98\x9f\x1d\x6c\x4a\xb5\xfe\xf7\x16\x12\x5a\x5e\x7a\xb2\xd4\xa7\x37\xdc\xc3\x23\x7d\x24\x0c\x54\x93\x83\xe2\x40\x66\x88\xdd\x5a\xa0\x75\x7e\x44\xbb\xdf\x35\x2c\x7a\xfa\x0d\xd7\xdd\xc9\xf4\x87\xd4\x89\xd6\xb3\x41\x9f\x94\xcc\x54\xf7\xd2\x6d\x0a\x60\x4f\x0b\x8a\x03\x9f\x6d\x8c\x9b\x23\xff\x5e\xa8\xf4\xc2\xb1\xde\xb5\xac\xa1\xc5\x59\x7f\xcd\xac\xd1\x27\xb0\xfa\x0d\xd6\x15\x76\x88\x79\x1e\x45\x32\xb0\x66\x80\xe2\xc0\x01\xa8\x09\xed\x1d\x85\x3b\x52\x76\x09\x1e\xc8\x6d\x43\x63\x04\x0e\x3f\x1c\x23\xa4\x4e\xee\x99\x6b\x2e\xb1\xa6\x57\x5a\xe1\xde\x17\x00\x02\x50\x10\x1c\xc8\x0c\xd4\x4e\xad\x13\x21\xfb\x5c\xae\x1a\x4d\xd8\xf3\x17\x75\x2e\xeb\x5f\x5f\x8d\x7c\x79\x41\x8d\x53\xa8\xd4\x26\xfd\x5a\x86\xb7\x28\x16\x26\x0b\xc5\x81\x2b\x42\xa7\xfb\xc9\x96\x90\x11\x87\x8c\x14\xa2\x1b\x12\xa6\xd6\x5b\x3b\x72\xe6\x55\xd9\xdb\x61\x8f\x63\x95\x95\x5e\xba\x64\xcf\xbc\x81\x99\x01\xea\x33\x09\xde\x0c\x16\xa8\xcc\x93\xf3\xaf\x8b\xa7\xa5\xd7\x90\x1d\xb8\x94\xb9\xd6\x9c\x1d\xcf\x74\x3a\xde\x2b\x7c\xb0\x9a\xe1\xf6\xfa\xfa\xb8\x44\x09\xd8\x96\x86\xe0\x40\x66\x58\x97\xf6\xf4\x31\xf1\xd5\x57\xe7\x1e\x21\x7a\x28\x52\x67\x18\xb5\xe9\xb4\x8b\xe3\xa1\x35\x45\xe4\x15\xc4\x68\x70\x13\xf4\xcf\x73\x80\xe2\xc0\x43\xb8\x5d\xda\xe9\x99\x7b\x10\x85\x7b\xee\xe0\x30\xad\xf5\x5e\x60\xe9\xfa\xcf\xa6\x81\x36\xfc\x02\x04\xbd\x21\xb2\xc3\x5a\x1c\x06\x60\x08\x43\x70\x20\x59\xd4\xa3\xb0\x1d\xb5\xa4\x98\x5a\x11\xfa\xa6\x3b\x0c\x85\x02\x91\x4c\x5a\x6a\x01\xef\x38\x52\x6f\x0b\x1e\x7a\xab\x0f\xfa\x2c\xd0\xc2\x64\xa1\x38\x90\x19\xea\xbe\xcb\xb3\x5d\xde\xf4\x57\x25\xdd\xa2\x27\x74\x0b\xfe\xf4\x4e\xb5\xd6\xac\x7f\xfc\xd7\x16\x1e\xed\x89\x5d\x45\x24\x9d\x26\xb0\xdb\x0d\xc5\x81\xba\x4c\xa0\x92\xf5\x5d\xb6\xde\xfd\x87\x29\x7d\x56\x19\xf4\xe2\x76\xca\xf2\xb4\x0c\x19\x89\xe7\x86\x1c\x53\x6a\x8f\xda\x52\xae\x17\xba\x60\x66\x80\xfa\x80\xfd\x1f\x71\x30\xe4\xab\x4f\x18\xa2\xf5\xae\x15\xa8\x1b\xae\xc6\x79\x99\x15\xc6\x23\x9d\x29\xaf\x7e\x2e\xa1\x3e\xd4\xad\x64\x47\xf9\xe4\x03\x94\xd5\x80\xe2\x40\x66\x08\x5f\x24\x71\xc2\x5d\xfb\xf1\xf6\xf0\xee\xf4\xa7\xa5\x8d\x26\x23\x8a\x6f\x4a\xb6\x66\xdc\x78\x3a\x38\x46\x48\x89\x3c\xaf\xc2\x80\xdb\xe3\x50\x1c\xf8\xd6\x34\x03\x81\x7f\x79\x4a\x77\xba\x7c\xa9\x7f\xfa\xe3\xd5\xc6\xaa\x4e\x89\x37\xc3\x9e\x84\x69\x2f\xa8\x5b\x85\x98\x96\x86\xbc\x81\xdd\x6e\x28\x0e\x24\xbb\x76\x72\xbb\x5e\x6b\xfc\x76\x3f\xf9\x51\xdb\xce\x4e\x53\x7a\xbc\x6e\x51\x29\x31\x47\xcb\x29\xa5\xc4\x8b\x3d\xb2\xdf\x4b\x9d\xdd\xc0\x43\x80\xe0\x40\x66\x18\xba\xeb\xee\xf9\xf0\x5d\x45\x34\xf3\x29\x56\x3d\x62\xf8\x0c\x2a\xd7\xb4\x7c\x6a\xfe\x7e\x0e\xa3\xe6\x3d\x84\xdf\xe9\x91\x47\x40\xbd\x03\x28\x0e\xd4\x65\xc1\x67\x2a\x66\x2d\xb7\xa2\x0b\x07\x02\x72\x58\xb1\x03\x5a\x08\xb0\x0a\xef\x4e\xcc\xa2\x37\x2d\x45\xda\x55\x3e\x4d\x22\x3d\xfa\x27\x34\x0d\xb5\xa9\x08\xab\x35\x0d\x17\x9a\xc6\xe4\xe9\x0d\x08\x74\xb7\xa1\xd4\xf9\x35\xf5\x61\xbf\x24\xbf\x20\xca\x9a\xc9\xef\x73\xa1\xa3\xb1\x27\x4e\x58\x9c\x44\x38\xf2\xc4\xdf\x6f\xbd\xc0\x85\xa6\xad\x1f\x72\x4d\x26\x07\x1c\xb1\x86\xea\x39\xe4\x6b\x90\xad\x61\x9a\x08\x18\xbb\xfc\x4c\xdc\xbe\x53\x46\x1a\x46\xff\x8b\x8c\x21\xee\xef\x9b\x84\x0b\x4d\xc7\x87\x32\xfd\xd9\xdf\x56\xeb\x67\x5a\x0a\xe7\xcf\xbf\x35\x53\x40\x67\x89\x2b\x17\x90\x38\x43\xfc\xa7\x1f\x77\xb1\x54\xcc\x8f\xfa\xbf\xd9\xed\x81\x7a\x96\xf0\x43\xf2\xa3\x4d\x56\x11\x2a\xa2\x6e\xc3\xf7\x14\x3a\xe9\x6c\x36\xea\x34\xed\x81\x3b\xf3\x44\xab\xca\x6b\x45\xd5\x06\x7c\x96\xd6\xba\x40\xb0\x17\x8a\x03\x0d\xc9\x80\xf9\xc3\xd1\x38\xd2\xec\x87\x1f\xe7\xbb\xb3\xc8\xd0\x46\x57\x51\xaa\x5e\x6c\x5b\x0a\x0b\x7e\xc5\x88\x3c\x69\x66\xea\x6b\x04\xaa\xca\x43\x71\xa0\xb1\xe3\x24\xc7\x51\x5f\x4d\x60\x55\x7d\xed\xf2\x8e\x87\x67\xb8\x95\x26\x9b\xad\x63\x0c\x9f\x8a\xa0\x11\x27\x08\x37\x75\xe8\x7b\xe9\x0f\x98\x2c\x14\x07\xce\x84\x35\x62\x30\x19\x86\xee\xfe\xd6\x43\xe3\xa6\x9f\x7c\x69\x83\xff\x25\x2e\xc5\xd1\xa0\x48\x53\xa4\x68\xf8\x03\xd6\xdd\xc7\x2d\x40\x51\x68\x28\x0e\x34\x24\x11\xf0\x67\x4c\x4f\x9c\x23\x65\x04\xb5\xe7\x5a\xa3\xc6\xfa\x8c\x77\xee\x10\x9e\x2f\xe2\x23\x14\x8a\x0b\xf5\x1f\x78\x3b\x8f\x00\x39\xf2\xa0\x38\x50\x97\x7d\x9e\xa7\xaa\x2e\xcb\x51\x0e\x73\xdf\x5e\x68\xbb\x65\x92\x1e\x54\x79\x25\xd5\xe9\x60\xc3\xad\xba\x44\xba\x38\xd5\xe8\xf1\x6a\x02\x36\x3f\x43\xb9\x1c\xde\x0c\xbf\x64\x25\x49\x78\x5e\xe5\xdd\x37\xc2\x5d\x14\x35\x45\x14\x36\x31\xe8\x51\xaa\xf3\x3a\xfd\x22\x89\x4d\xf7\xce\xed\x8c\x73\x0b\xb8\x16\x08\xc5\x81\xcc\x50\x52\x10\x46\x62\xca\xd5\x40\x76\x8b\x6a\x5e\xb7\xe4\x45\x37\x55\x7b\x60\xbf\xe5\x7a\xce\xf3\x07\x3e\xea\x98\x96\xab\xf9\xcd\x89\x30\x59\x28\x0e\x9c\x7e\x02\x55\xa2\xd4\x73\x3b\xf3\x26\x1e\x8d\x4c\xeb\xa9\xc6\x77\xca\x7e\x63\xaa\x9b\x3b\x21\x19\x86\xb1\x17\xab\x73\x2b\x12\x1c\x31\x30\x59\x28\x0e\x24\xfb\x68\x3b\xa6\xeb\x7b\x0e\x3d\x17\x59\xa2\x58\xb4\x6c\x22\x07\x0f\xe2\xdd\xaf\x6d\x4f\x85\x09\xba\xb8\x6d\x51\x1b\xb7\x50\xb4\x44\x81\x83\x4e\x10\x1c\xc8\x0c\xb5\xae\xf9\xd3\xfd\x24\xaf\xf0\xeb\x0b\x62\xaf\x94\xd2\x88\x42\xb6\x08\x9e\xdb\x8e\xc6\x2d\x31\xad\xfb\x61\x27\x6b\x45\xb2\x00\xc7\x6c\xa1\x38\xf0\x07\xfe\x8f\xaf\xf2\xa2\x0e\xda\xe8\x4e\x77\x5c\x9b\x33\xb7\x6c\xc6\xd5\xf6\x8d\xe5\x6a\x9e\x6a\x1d\x25\x68\x8e\x5e\xde\xe2\x12\x09\x87\x99\x01\x6a\xfe\x81\x37\xc3\x1c\xe1\xcd\x66\xe7\xd3\x59\x12\xcd\x74\x66\x6f\x39\x0d\xf3\x17\x78\xad\x4a\xcb\xaa\x68\xd3\x11\x11\x58\xf4\xca\x5f\x5f\x38\x02\x17\x65\xa1\x38\x90\x19\x2a\x55\x1d\x56\x6b\x7a\x32\x9b\x35\x10\xe9\x70\xe3\xc4\xad\x51\x4f\x70\xdf\x6a\x56\x2d\x2b\xc6\xfb\x0f\xfe\xec\x48\x49\x74\x07\xce\x2a\x42\x71\xa0\x5e\xd3\xca\x71\x79\xb2\x98\xc4\xcd\x7d\x72\xb0\x6f\x23\x20\x1d\x3b\xeb\x9c\x6e\xda\xfc\x9b\x31\x0e\xd9\x0e\x51\xb2\x98\x3a\x4d\xfa\x2e\x4c\x16\x8a\x03\x47\x23\xa3\xad\x51\x1f\xeb\xa0\x51\xd9\xbc\x2f\xed\x55\x67\xad\x53\x33\x09\x46\xed\xea\x8e\xac\x79\x28\x42\xbd\x42\xd8\xcd\xc8\x00\x98\x01\x8a\x03\x99\xc1\x2d\x82\x2c\x4d\xa6\x9e\xd3\xe7\x01\x63\xef\x67\x0c\x53\x9d\x55\xac\x42\xe9\x02\x4a\x64\x67\xde\x90\x6f\xb1\x23\x17\xc9\xef\x00\xeb\x42\x71\xa0\x2e\xf3\xa8\x35\xb5\x79\x64\xf3\x20\x16\x5b\xad\xdb\x46\xf8\x08\xb7\x7e\x54\x76\x9b\xf1\x77\x50\x44\x4e\x6d\x54\x96\xd9\x9d\x80\x63\x45\x98\x19\xa0\x82\x91\xff\x63\x19\x7f\xdb\xe1\xdb\x98\xb5\xc6\xc2\xc2\x7a\xa3\x91\x68\x93\x01\xd6\x2a\x85\xed\x1b\x19\xcd\xa9\x0b\x5d\x1a\x8c\x1c\xea\xcf\x35\x40\x0c\x19\x8a\x03\x99\xe1\x97\xf2\x9b\x1d\x76\xf5\xde\x38\x76\x4a\x02\xb9\xc2\xe5\xb2\x5f\x1b\x28\x17\x64\x61\xcb\x77\xc5\xf4\x98\x38\x0e\x37\xd9\x6c\x80\x2f\x71\x28\x0e\x5c\xf7\xc1\x7e\xa0\x71\x92\x8a\x20\x6f\xe4\xf4\x1e\xa9\xa1\x3f\xaa\xac\x84\xdd\xc7\xed\x50\x09\xa5\xf7\xbf\x9a\xe8\x96\x9c\xbe\xf4\xa8\xc2\x64\xa1\x38\x90\x2c\xda\x63\xc3\x97\x9d\x59\xb7\xbd\xaa\x93\x97\x6a\xe2\xf0\xd6\x9d\x32\x83\x85\x11\x9f\xf7\x45\xdc\xb5\x7d\x33\x68\x3a\x44\xad\x06\x9c\x60\x82\xe2\x40\x66\xb8\xf6\xb6\xaa\x6f\xb3\x7e\xa1\x51\x2e\xe8\xae\x60\xa2\xb1\xf7\xd4\x84\x2b\xfa\x68\x66\x3c\xad\xa9\xbe\xf2\xa6\xb7\xe6\xa8\x0c\x19\x08\x4d\xeb\xbd\xbd\xbd\x26\xf2\x67\xbd\xd4\x5e\xc0\x4a\xf4\xd6\x07\x5d\xc2\xdb\xdd\xc1\x0c\x6e\x88\x1e\x5e\x12\x5b\xca\xaf\xdf\xb4\x05\x2d\xff\x3b\x34\x7d\xd5\xd1\xe9\x77\xa8\x9b\xc3\x99\xfa\x5e\xcb\xe3\xf6\x31\xe7\xf0\x46\x59\x03\x9a\xad\x7d\x59\xe4\x44\xc9\x91\xe1\x75\xb0\xd0\xbb\x7f\xa1\x03\x62\xfa\x32\xac\x48\xb7\x43\xf4\x44\x44\xda\x9e\x22\x09\xf5\x05\xb4\x92\x0e\x1b\xdf\x33\xc4\xd1\xfe\xe6\x35\x7c\x1e\xa3\x5d\x02\x0a\x4d\x43\x29\xc3\x87\xa6\x91\xd0\x88\x31\x6d\xa2\xdb\x78\x98\xcc\xc5\xa9\xf4\xa7\xa6\x58\x1c\xa8\x93\xed\xcb\x9d\x04\xc2\x03\xd7\xb5\x04\xf9\x59\xff\xb4\xff\x0b\xed\x1e\x0c\xa5\xc7\x70\xae\xf9\x1d\x4f\x20\xf0\x68\x52\x48\x15\xed\x50\x4f\xae\x5f\xc1\x79\x88\x2f\xf8\x36\x72\xbd\x91\x0d\x92\x06\x10\x9a\x86\xd2\x84\xd5\x9a\x06\x87\xa6\xa3\x57\x39\x1e\x7d\x69\x20\x68\x5b\x2c\x67\x4b\xe7\x54\xeb\x7c\x97\x2b\xb0\x80\xfd\x61\x25\xfa\x05\x37\x01\x99\xbc\xf9\x9b\xfe\xb3\xbf\x5e\xfa\x75\xc2\x85\xa6\x0f\x2e\x89\xf0\x1d\x85\xb9\xf8\xc9\x9f\x3b\x2d\x65\x97\x7e\xec\xaf\xf4\xae\xad\xca\x33\xc8\xc6\x70\x8d\x6e\xb3\xc1\x27\x57\xfb\xfb\x83\x90\x9d\x70\xa1\xe9\xdf\xf5\xb2\x2f\x6a\x31\x83\xda\xbb\x1e\xb3\x76\xf5\xd2\x11\x5b\xbe\x62\x90\x3f\x24\xba\xfd\x81\x6d\x33\xb3\x7c\x49\x6e\xdd\xca\xf4\xef\x9b\x84\x0b\x4d\xab\xfd\x4e\x99\x52\x12\x6c\xbf\x9f\xd0\xd0\x44\xd9\x47\x2f\x2d\xc4\x59\x60\x59\xbe\xe4\x66\x88\xe7\x39\xc5\x58\xae\x71\x9b\xfc\x6f\x17\xb8\x11\x32\x9d\x70\xa1\x69\x26\x79\xa5\x4f\xcc\x6d\xaf\x5a\xb5\xf4\x9a\xd5\x4f\x78\x7f\xcf\xf7\xe7\x64\x2e\xe2\xf2\xd9\x89\x2f\x78\x3e\xe1\x3e\x66\x62\xfc\xf3\xf7\x4d\xc2\x85\xa6\x49\xcd\xee\xfc\x24\x6d\x58\xb4\xf3\x1a\x19\x1e\x62\xbb\x6b\x4c\x33\xed\x7e\xe3\x20\xdb\x95\xf4\x8e\xff\x9e\x2f\x8d\x56\xc6\xd0\xdf\x5f\xd4\xee\x84\x0b\x4d\x3b\x07\x48\x59\xfa\x8b\x51\x29\xfb\xde\x50\x7f\xc7\xcf\xda\xb7\x58\x0a\x61\xaf\xf0\xab\xb5\x60\xbf\x39\x76\x9b\xcb\xce\x6f\x58\xfa\xfb\x26\xe1\x42\xd3\x87\xdb\xb7\x63\x09\xf5\x8f\x50\xf5\x24\xd4\x10\xa7\x4d\x2d\x11\x52\x94\xb4\x29\x78\xa4\xd6\x03\x65\xd9\xe3\xd0\x6f\xb1\xb4\x98\xfc\x37\x1f\x2b\x50\x43\x11\xfe\x2d\xe4\x7a\x75\x5b\x65\x8a\x40\x6d\x3b\xc4\x61\x63\xdc\x4a\x37\xfb\xb2\x7d\xaf\x88\x23\x2b\xfd\x77\x03\x61\xe9\x82\x46\xfe\x87\x39\x20\x48\x02\xc5\x81\xde\x42\x2f\xe7\x34\xc8\x28\x4a\x14\x7b\xc2\x57\x0c\x82\xc2\xc3\xed\x9f\x24\xce\xbe\x4f\xfb\xe2\xc6\xd8\xd1\x46\x8c\x98\x70\x3d\x15\x06\xbc\xe4\xa1\x38\xd0\xeb\xe2\xf1\x2a\xc5\xd7\xf8\xb7\xeb\xaf\x30\xd2\x2c\xd9\x99\x5d\x69\x42\x0b\xf1\xf3\xb0\x17\x69\x71\x09\x3d\x9e\xa4\xbe\x9c\x21\xea\x3d\x84\xc9\x42\x71\x20\x59\xd3\x23\x9f\x8e\xe2\xb0\xef\x87\x3f\x65\xf0\x1c\x44\xb9\x69\x16\xbe\x95\x06\x6d\x74\x64\x3d\xbe\xdd\x86\x8d\x73\x49\x9e\xec\xe4\x07\x93\x85\xe2\x40\xb2\x07\x89\x4a\xf4\xad\x27\x5c\x57\x2e\xd1\x0b\x03\xeb\x79\x6f\x79\x1a\x64\x4d\x1d\xcd\x33\xe4\x5d\x1d\x97\x77\x3f\x9b\x3e\xfa\xf1\x0a\x26\x0b\xc5\x81\xba\x8c\xcb\x10\xbf\x25\x27\xa3\x8b\x7f\x4b\xcd\x71\xb9\x99\x80\xc4\x6a\x9e\x73\x83\x7b\xfb\xd9\xc8\x6e\x6d\xac\x7c\x9e\xbc\xe6\xda\x29\x6c\x49\x02\x35\x49\xc2\x9b\xc1\x6d\xd3\xdc\xc2\xb2\xc9\x94\xfd\xf5\x4c\x31\xe3\xcf\x08\xae\x87\xe8\x01\xe8\x92\xe1\x65\x4f\xf9\x7c\xc5\xff\x54\x05\x3d\x7a\x08\xfc\x60\x28\x0e\x64\x86\xa7\xf6\x4b\x41\x63\x59\xdf\x84\x6b\x56\x38\x1e\xef\xb1\xea\x63\xf1\x08\xd9\xf0\xdf\xf5\x94\xdd\x30\x36\x76\xa0\x7f\x77\x22\x02\x5c\xac\x82\xe2\x40\x8f\x57\xb9\x83\x74\x06\x0b\xb9\xe6\x8a\xb5\xcb\xbb\x8d\x57\x7b\x49\x12\x33\x93\xbb\xef\x3c\x70\xf4\x66\x39\xc9\x8b\x7f\xa0\x3b\xfc\x2b\x4c\x16\x8a\x03\xc9\x8a\xed\xf4\xb2\x5e\x3b\x9f\xeb\x0d\xf0\x64\x6f\x51\xcf\x0c\xa1\xcf\xa7\x36\x99\x2b\xea\x4e\x8d\xa1\xad\x9d\x36\x2c\x0f\xdd\x05\xb2\xfa\x40\x71\x20\x59\x22\x16\x63\x79\x86\xfa\x29\x85\x36\xd7\xed\x3a\xfe\xcc\xf7\x47\xab\x0b\x0f\x52\x08\x86\xed\x94\xb6\xdd\x53\x35\x3d\xee\xa4\x72\xc2\x64\xa1\x38\x50\x97\xd1\x7f\xb9\x42\x5f\x45\xe4\x40\xde\xc3\x28\xc1\x2c\xd8\xbd\xce\xfb\x83\xf2\xf4\x8b\xfe\xbc\xa3\xb0\x7a\x9c\x8f\x09\x21\x57\x05\x3e\xcc\x0c\x50\xaf\xaf\xff\x71\x03\x4a\x2e\x31\x69\x26\xc8\x79\xa6\x99\xf1\xde\x57\xf4\xd1\x23\xa4\xb8\x29\xd4\x80\xcd\xb9\x77\xb4\xbd\xb2\x22\x06\x12\xad\x5b\x40\x15\x26\x28\x0e\x64\x06\x2c\xce\x78\xec\x2d\x25\xe3\xf9\x8c\x82\xb6\x04\x3e\xc1\x38\x3b\xfa\xf7\xad\x23\x0e\xc6\xd9\x36\x7c\xd7\xa5\x61\x5c\x6f\xc3\x81\xa4\xf1\x50\x1c\xf8\xe8\x64\xe7\x1d\x62\xdc\xc0\xe3\xa3\xcd\x09\x3a\xb5\x35\x67\xb6\xf2\x16\x37\x33\x93\xcc\xa9\xba\x2a\x13\x1b\x94\x0d\xd3\x1b\x71\xe0\x82\x19\x14\x07\x92\xa5\x10\x38\x1b\x19\x17\xca\x9d\xd1\x6c\x36\x0d\x69\x4f\x6d\xcb\x29\x7b\xf1\x61\xf6\x4c\x83\x36\xd6\xc5\xe8\xc9\x4b\x2a\x23\x79\xe0\x1b\x08\x8a\x03\xff\x5a\x11\xd7\x2b\xae\x45\x5a\x76\xf9\x46\xb4\xc2\x8c\xa8\xb5\xa0\xda\xda\xbc\xd7\x19\x9a\xa6\x23\x37\xc6\x5a\xae\x34\x0f\x7a\x80\xc0\x0b\x14\x07\xea\xb2\x3d\xb3\x6c\xf5\xc5\xb5\xa9\xd3\x6b\x14\x64\x4e\x8b\xf7\xae\x1c\x17\x19\x74\x49\x7c\xb2\x8a\xb5\xd1\x6e\x86\x53\x1f\x70\xc8\x81\xeb\x70\x50\x0b\x0b\x78\x33\x5c\x87\xb7\xb6\xa9\x37\xef\x3c\x63\x3f\xff\xa5\x94\x1e\xcb\xe8\x45\x7b\xcd\xf3\xa9\x6f\x8c\x8d\x25\xb9\x6c\xfb\xa3\x02\xca\xb1\x16\xec\x07\x43\x71\x20\x33\x30\x21\xa6\xe9\x59\x72\x28\x46\xe0\xbb\xa9\x0a\xef\x0d\x25\x61\xbb\x36\x07\xfe\xde\xa5\x8d\xe8\xcd\xf7\x47\xc6\xc2\xac\x50\x00\x92\xe0\x41\x71\xa0\xc7\x1b\x31\x81\x57\x3e\xde\x21\xf6\xae\x98\x50\x4d\xd4\xdf\xe6\x84\x4f\x7e\xf4\x6c\x8c\x3d\x43\x3c\xdf\xd0\x61\xcf\x6e\x71\x89\x2d\x10\x26\x0b\xc5\x81\x64\xbd\xe3\x90\x12\xe8\x65\xd3\x1d\x51\x6f\xff\x34\xfe\x86\xdb\x7f\xda\xb6\x65\x8b\xc6\x7c\x54\x31\x54\xb3\x11\x7a\x8f\x4d\xfe\x0e\x37\x4c\x16\x8a\x03\xc9\x9a\x48\x9c\x6f\x2a\x49\x3b\x10\xf7\x3c\xd0\x15\xb7\x79\xf3\xb8\x56\x1e\xe9\x2b\xa3\x8d\xd4\x88\x8d\x02\xdf\x9f\xce\xb6\x4f\xdb\x80\x75\xa1\x38\x50\x97\x4d\xee\x56\x0b\xdf\x88\x18\x0e\x7f\xf0\xfb\xde\x70\x1c\x66\x53\xdf\x2b\x51\x11\x36\x60\x62\xd3\x3a\xb8\xf6\x27\x74\xb1\xb6\x2d\x09\x66\x06\xa8\x25\x1f\xbc\x19\x8e\x28\xc9\x7d\x58\x5b\xa6\x78\x64\x54\xfc\xac\xc7\x64\x06\x1c\xa5\x74\x24\x5b\x62\xcf\x4a\x77\xaa\xf1\xb8\x29\xfb\xa3\xff\xc9\x2b\x01\xc5\x81\xcc\x80\x11\x64\x44\x89\xd5\x5a\x77\x81\xca\x9e\x76\x6f\x9d\x92\xfa\x13\x67\x64\x64\xe6\x25\x15\x87\x70\xd0\xd5\x78\x3b\xf9\xe4\x3f\x1b\x9c\x50\x1c\xf8\xd0\x8a\xca\x7c\x57\xa3\x87\x49\x57\x46\xe6\x4e\xb1\x5c\x1c\x6b\x6e\x6d\xd1\x8a\xfa\x4a\xb3\x60\xc8\x59\x03\x41\x6b\x6f\xf7\x80\x38\x70\x68\x05\x82\x03\xc9\xca\xaf\x9a\xab\x2a\x5a\xdd\x5e\xcd\xce\x4e\xb7\x32\x99\xe4\xb2\xfb\xa0\x46\xc1\x20\xe1\x6d\xad\x74\x8d\xa0\xe8\xb1\x84\x8a\x03\xa4\x86\x86\xe2\x40\xb2\x3e\x41\xab\xf7\x24\xcb\x75\x7f\x1b\xee\x91\xc6\xd4\x48\xcc\x63\xe4\x7d\x0e\xfc\x30\xb1\xe9\xb1\x61\x14\xeb\x15\x93\xad\xa8\x8c\x01\x93\x85\xe2\xc0\x37\x64\x08\x6a\xf0\x8a\x4d\xb5\x7a\xc6\x51\x6f\x0a\x14\x89\x10\xcf\x53\xba\x7e\x07\x3c\xfe\xf0\x39\xf0\x30\x16\x0f\xdd\x9e\xf9\x2e\xb0\xa7\x05\xb5\x18\x87\x37\xc3\xa9\xea\x2b\xbc\xc6\x15\xf7\xd7\xa8\x46\xf2\x16\x13\x78\x17\x9b\xde\x22\xda\xd5\xd1\xfa\x34\x9e\x03\x71\x47\x6e\x77\xb0\x5f\x75\xc2\x7e\x30\x14\x07\x32\x03\x89\x37\x09\x63\x92\x14\xc1\xa1\x45\xbb\x34\x53\x20\x6d\xda\x9c\x47\x76\x05\x63\x5c\xdc\xe1\x2a\x69\xfc\xaf\x33\x17\x76\x05\x44\x20\x86\x0c\xc1\x81\x13\x1f\x4c\x4e\xa9\x3b\x2e\xbe\x68\xa1\x29\x11\x33\xe4\xfa\x34\xc5\x30\x55\x6f\x35\x52\x28\x21\x52\x5b\x4c\x8b\x82\x5e\x4e\x13\x01\xdc\x8d\x84\xe2\x40\xb2\xe1\xad\x5f\x67\x4b\x7d\x26\x6a\x59\x74\x1f\xa4\x84\xc5\xae\xae\x9d\xe0\xbf\x93\xcb\x49\xbe\xb5\xc7\x32\xef\xdf\xe4\x99\x5e\x01\xdc\x46\x83\xe2\xc0\x57\x7a\xf2\x89\xab\xa3\x6f\xcf\x62\xb4\x3c\x9a\x3e\xcf\x3e\x60\xe6\x96\x1a\x7f\x53\xee\xce\xfa\x25\xfc\x2b\x99\x5b\x50\x2a\x12\x02\x90\x4f\x01\x8a\x03\x67\xf2\x5c\x34\xbf\xff\x84\x92\xee\x6b\x6c\xc3\x2b\x6b\x1a\x62\x93\x3e\x76\x8f\x48\xc5\xfa\x3e\x65\xfd\x1f\x9d\x6f\xfb\xbf\x2c\xb0\x32\xc2\xcc\x00\xf5\x99\x04\x6f\x86\x92\x3c\x8c\xe6\x6f\xcc\x43\x84\x37\x2e\xb5\x08\x6e\xe3\x9c\xce\xde\x5d\x21\x1d\x98\x2c\x4f\x96\x31\x18\xb7\xa3\x5f\xfb\x22\x00\x45\x40\xa0\x38\xf0\x71\xb6\xe4\xd2\x07\x29\x08\xae\xad\x34\x88\xc8\x83\xb3\x9f\xce\x5d\x98\xbf\x91\x18\xde\xc8\x33\xbf\xed\x58\xb1\xac\x64\x33\xca\x06\xaa\x37\x43\x71\xa0\xc7\xfb\xce\x46\xa5\x7b\x9e\x88\x3e\x22\xa3\x14\xe3\x69\xe3\xfd\x87\xfb\x15\xa2\x5c\xb9\xa3\xd4\x69\x0c\xb4\xfe\x66\x8f\xbc\x74\x6f\x4f\xc0\x64\xa1\x38\x90\x2c\x5e\x89\xfa\x2c\xa3\x98\x1c\x4d\x80\x9d\x29\x53\x10\x3d\xea\x8d\x58\x76\x3e\xcf\x22\x67\x4b\x89\x3b\xb5\x9f\x58\x99\x91\x34\x90\x61\x04\x8a\x03\xcf\x0c\x4c\xc6\xb8\x11\xfc\xc9\xd2\xaf\xf9\x71\xf7\xa3\x06\x72\x06\xea\x1f\xf2\x16\xec\x36\x37\x36\xbd\x48\x34\x9f\x61\xa1\xd8\x05\x12\x51\x41\x71\xa0\x2e\x7b\x56\x1a\xad\x70\x28\x6a\x50\xa7\x44\xb8\x81\x4f\x51\xe7\x22\x92\x49\xcb\xa4\x7a\xa6\xf7\x69\x43\x48\xc1\x71\xc9\x6a\xeb\xd1\x27\x98\x19\xa0\x3e\x60\xe1\xcd\xb0\xf9\x88\x59\x14\x51\x71\x4e\x1a\x89\xf0\xbd\xfa\xa2\xec\x46\xd5\x2d\xfe\x24\xca\x33\xee\xf4\xbd\x6b\x41\xa1\x69\xa1\xd5\xf9\x7e\xd8\x0f\x86\xe2\xc0\x17\xb1\x70\xf5\x9e\xc5\x20\x46\x0e\x64\xfb\x28\xd5\x96\x91\xff\x56\x94\x6c\x62\x47\x65\xa5\x9b\x30\x52\x13\x6d\xaa\xc0\x6f\x22\x07\x32\xbb\x42\x71\xe0\x43\x88\x39\x4e\xb9\x19\xd9\x6f\xd8\x0e\x9a\xc4\x36\x0d\x1a\x6b\x68\x44\xf0\xb6\x8d\x4a\xf5\x8b\xaa\x1f\x1f\xb4\x3f\xb0\xcd\xb2\x06\x8a\x6d\x42\x71\xe0\x99\x81\x99\x8b\x75\xdc\x8b\xb8\x8b\xa8\xc2\x60\x3f\xce\xda\xb7\x0c\xe5\xfc\x25\xcf\x8f\x10\xe3\xfa\xf9\x92\xb5\x6a\x31\x76\x6d\xa0\x02\x2d\x14\x07\x92\x65\xc8\xea\x1c\x09\x23\x20\x23\xdb\xbc\x8d\xd0\x50\x2a\x6a\x17\xa6\xfa\x8b\xc3\xf4\x3b\x8e\x2c\x07\x3d\x25\xdd\xa3\x35\xf2\x4e\x60\xa0\x41\x71\xe0\x68\x55\x95\xc0\x3b\x3f\xc5\xc0\x0a\x95\xf5\x91\xec\xbd\x07\x66\xd5\xe3\xf1\x48\xf7\x4d\x3c\x26\xc3\x33\xfc\x90\x87\xb1\xd7\xb9\xad\x81\xd0\x34\xd4\xa6\x22\xac\xd6\x34\x5c\x68\xfa\x03\xcd\xeb\x9d\x7a\x79\xad\x57\xcb\x07\x4e\xcd\x1f\xf1\x8d\x03\x4b\xce\x69\x8b\xcc\x57\x0f\x03\xfd\x3e\x55\xca\x0e\xc4\xca\xfc\x07\xdb\x68\x70\xa1\xe9\xac\x80\x3f\x65\x58\x0e\x41\x2b\x99\x1a\x28\x42\x4f\x98\xfd\x35\x8b\xc5\xde\xb1\x2d\x95\xa5\x14\xaa\xf0\xb7\x75\xca\x62\xdc\xa4\xff\x7d\x93\x70\xa1\x69\x6e\xad\xe5\x72\x33\x79\xde\x43\x74\x36\x65\x11\x69\x36\xac\x11\xb7\x27\x21\xeb\x81\x87\xd3\xbb\xf2\xed\x43\x6f\x90\xbf\xff\x24\xf8\x6f\x76\x7b\xa0\x9e\x25\xfc\x90\xcc\x38\xb8\x8f\x4b\x7c\x8e\x92\xca\x8b\x2a\xfb\xd0\x5a\xb6\x84\xe8\xb9\x5f\x83\x5a\x92\xe7\xf4\x80\xf3\x9b\x2f\x1c\xf8\x16\x97\x40\x8e\x3c\x28\x0e\x34\x24\x85\xaf\xe4\xa9\x5f\xde\xf5\xa1\x6c\x4d\xfe\xd2\xb0\x51\x4d\x52\xfe\x9c\x3b\xfd\xf8\x90\xe9\x4f\x04\xde\xe4\x28\x86\x5c\xb0\x0e\x70\xac\x03\x8a\x03\x17\x69\x4a\xf5\xf3\xbd\xd0\x32\x0c\x10\xad\x22\x46\xd8\x0f\x69\xab\xd9\x4d\xce\x0b\xc7\xac\x38\x1f\xcd\x34\x17\xec\xfb\xd2\x6a\x0e\x24\xd8\x82\xe2\x40\xb2\x47\xb2\x67\x31\xa9\xc6\x6b\xd8\x9e\x7d\xed\xfb\xaa\x34\xb4\x78\xc1\x64\xda\x16\x2b\x07\xa4\x24\xa3\x1b\x4b\xd6\x2f\xf9\xf3\x5e\x00\xcb\x57\x08\x0e\x9c\x1a\x9a\x0a\xe3\xf0\xee\xb5\xf0\x7d\x37\xa2\xd8\xf0\x56\x69\xd6\xc9\x5a\xc7\x9f\x94\xa3\x0e\xa5\x59\xf1\xb3\xc6\x5b\xdf\x98\x2f\x81\x91\x0e\xc5\x81\xba\xec\xe5\x6e\xce\x9f\x19\xec\x1e\x33\x46\x46\x8e\xaf\x9d\x3f\x8a\x54\x2a\x3b\x46\xc4\x55\x9d\xa3\x5e\xdb\x9c\x22\xa4\x58\x79\xc9\x8a\xc2\xe6\x67\x28\x97\xc3\x9b\x41\x51\xf0\x7a\x86\xc6\x2d\xb5\xed\xc7\xa0\x40\x61\xae\xb2\x2d\x16\x7f\x8d\x86\x28\xaf\x66\x0a\x21\x27\x3f\xf9\x53\x97\x0d\x14\xe0\x9e\x07\x14\x07\x32\x03\xfd\x76\x25\x4b\xfc\x4b\x66\x32\x6d\xf3\xd6\x8c\xb3\x07\xce\x91\x0e\x83\xcb\xcb\x5f\x5d\x6c\x16\x1e\x4e\x44\xd3\x50\xee\x92\x00\xd5\xf5\xa1\x38\xd0\xe3\x45\x62\xc8\x39\xfa\x1e\x5e\x67\x25\x18\x90\x4a\x34\xc9\x64\x93\x57\xd7\xef\x9c\x7d\xb5\x7f\x5d\xe4\xdc\x77\xed\xa7\x77\x3c\x02\xfc\x5a\x28\x0e\x24\xdb\x71\xa4\xf7\xc7\xf2\xe2\x87\x4b\xfe\xe8\x8d\xc5\x73\x3d\x56\xca\x8d\x27\xb8\x72\x4c\xc5\xb2\x88\x7a\x3c\xd2\xf9\xbf\x7a\x56\x31\x61\xb2\x50\x1c\xf8\xeb\x20\xb6\x30\x77\x86\xbf\x72\x8b\xdd\xf7\x40\xa8\x56\x5f\x28\x94\x91\xbc\x8a\x36\x59\xf9\x70\x54\xc6\xb1\x22\x46\x48\x92\x02\xb0\x2e\x14\x07\xea\x32\xb1\x8a\xf8\x4a\x24\xab\x4f\xa6\x3f\x29\x59\xf6\x59\x9d\xcc\x85\xf1\x19\xc5\x14\x3e\x97\x71\xf7\x2e\x3f\xab\x09\x3b\x70\x67\xf1\x86\x99\x01\x6a\xfe\x81\x37\x43\xd6\x84\x4b\xee\x0b\x67\x9b\x1f\x26\x0c\xdf\x69\xb4\x2b\x16\xe5\xca\x7b\x6a\x04\x5e\xe7\x12\x8f\xff\x28\x62\x9b\x4d\xa4\xc7\x3c\x00\x2e\xa5\x43\x70\xe0\x4a\xe9\x5b\x45\xd9\x55\xf1\xe2\x7b\x3b\x3b\x9d\x84\x47\x84\x77\x64\xdd\xc8\xda\x6a\x74\xea\x4b\x12\x25\x17\x68\xf6\x3f\xee\x79\x0e\xc3\x64\xa1\x38\xd0\xe3\x3d\xf6\xbc\x36\xff\xe5\x2c\xb5\xc2\xd1\x71\x2e\x6c\x85\x25\x66\x4b\x5c\xe5\xbd\xe2\x15\x9a\x4d\x6c\x6b\x6c\x69\x80\xf6\xfd\x72\x1e\x26\x0b\xc5\x81\x64\x59\x5a\x42\x73\xb5\x84\x24\x69\x0c\x9d\x5f\x65\x4e\x1d\x6d\x9c\x1b\xe7\x6f\x7f\xef\x39\xe7\x7f\xf6\x1d\x59\xe8\xcf\x72\xbb\x09\xf0\x4d\x07\xc5\x81\xcb\xfd\xd8\x5f\x52\xb5\xc8\xd2\xde\xa6\x0d\x3f\x89\xa3\x0f\x9f\xe1\x45\x1b\x30\x19\x8b\xe3\x33\xc8\xa4\x2e\x94\xfa\xbc\x30\xd6\x0d\x1c\xd8\x84\xe2\x40\x5d\x36\x26\x8b\xf8\xfb\x2a\x87\xdc\x05\x41\x98\xe1\xbb\x6f\x92\xf9\x6b\x2d\xd3\xdf\x77\xcd\x84\x8b\x62\xf3\xda\x0b\x74\x92\xd0\x4b\x80\x7d\x60\xa8\x60\x24\xbc\x19\x4c\xa3\x27\x5e\xad\x6d\x67\x7c\xd3\x7d\xee\x5a\x76\x9b\xcb\x9b\xac\xa7\xc3\x74\x18\xa3\x59\x38\x3f\x18\x6d\xfc\x73\xdc\xde\xa4\x1a\xb0\x1f\x0e\xc1\x81\x0b\x3b\x1e\x24\x74\x2d\x39\x87\xd0\x48\x20\x38\xf2\xf3\x9f\x77\xac\xdb\xd1\x1e\x7b\xfc\xea\xad\xd4\xe1\x2a\xbf\x47\x21\xac\x22\x77\x05\x93\x85\xe2\x40\x8f\x97\xd6\xcc\x89\xa9\x7e\xe1\x2d\x63\x04\xf6\x22\xb1\xe3\xf8\x48\x7c\x13\x13\xaf\x96\x24\x35\x1d\xe6\xa4\xda\xe7\x3c\x5b\x4f\xcf\x2a\x98\x2c\x14\x07\x5e\x6f\xcb\x84\xa1\x18\x74\x2e\x7a\xd6\x75\xcb\x73\xea\x0f\x53\x47\x29\xe2\xe1\x77\x1f\xb1\xc9\xa5\x91\xff\xa0\x30\x7a\xf9\xe9\x05\xf0\x52\x83\xe2\x40\xb2\x38\x84\x46\xb4\x77\x66\x75\xea\xe6\xd4\x4c\xba\xd3\x37\xb6\xd1\xfa\xeb\x10\xb5\x7f\x7a\xa0\x88\x07\x4f\xe9\xad\x64\xa3\xb8\x2c\x00\xa1\xe9\xb3\xd5\xab\x47\x95\xd1\x2f\x0d\x9c\xdf\xd0\x1a\x97\x12\x3e\x6d\x6e\xa3\xb8\x46\x26\xd9\x9a\x9b\xf2\x5a\xd7\x57\x36\xdf\xd6\x66\xfd\x77\x68\xba\xa0\xf1\x03\x6e\xd3\x72\xc1\xc6\x37\x74\x89\xda\x18\xa4\x4a\xc9\xca\x1a\xee\xb3\x13\xd7\xda\x91\x61\x73\xd1\x47\x55\x97\xc9\x84\xff\xde\xc4\x7a\x21\x6f\x23\x6c\xe5\x59\xb1\xf7\x66\x22\x55\xec\x6a\xc8\xa8\xa9\x09\xb3\x54\x58\x97\x3d\x76\xe7\x79\x52\x8e\x5e\xe5\xc9\x6b\x50\x68\x1a\x4a\x19\x3e\x34\xfd\xc7\xb0\x18\xa1\x98\x73\x98\x2b\xf2\x42\xcb\xe9\xda\x8a\x80\xa4\x80\x18\xf7\x91\x52\xf3\xb0\x0e\xdb\x5b\x73\x23\x84\xe0\xa6\xa2\x7f\xa1\xc8\x42\xee\xd1\xb7\xb0\x95\xe5\xce\x8c\xb6\xd8\x19\x54\xbb\x7b\x1e\x13\x96\x65\x7a\x1b\xbb\x7f\x55\x9a\x08\xa3\xbe\xfb\x60\x5e\x1e\x08\x4d\x43\x69\xc2\x6a\x4d\xcb\x83\xd6\x61\xee\x2f\x89\x57\x66\x1f\x86\x8a\xf9\x50\xa9\x1f\xa3\xbf\xc7\xe1\xff\x93\xf8\x38\x39\x1f\x87\xbc\xf6\x4c\x89\x2f\x66\xc7\x69\xd8\xf9\xaf\x97\x7e\x08\x3c\xe0\xa5\x1f\x31\x9f\x92\x10\xc6\x23\x71\x99\xba\x08\xa5\x2a\xd2\x9d\xbd\xe6\xdd\x99\x11\xe1\xa7\xf6\xaa\xb8\x2f\xbc\x8b\x91\xa5\xd5\xa5\x10\xff\xbe\x49\x09\x70\x93\xad\xe3\xf2\x3f\xf8\x1b\x0c\xa4\x26\xdf\x1c\x4c\x84\x35\x6f\x0c\x5d\x18\x74\x5c\x2e\x26\x32\x98\x8a\xd2\x07\x70\xf1\xf9\xf1\xa6\xfc\x7d\x93\x06\x70\xcb\x78\x49\x92\xdb\xa2\x74\x63\xcf\x1c\xb0\xca\x53\x8d\x34\xd5\x94\xdf\x19\x8c\xf1\x95\xcc\x34\x77\x87\xb4\x37\xa4\x2b\x17\x9b\x29\xfc\x7d\x93\xee\x70\xff\x32\x65\x0a\x3d\x36\x49\xdd\x70\xb6\xcc\x9a\xc7\x70\x96\x19\x81\x8f\x8c\xe4\x9c\xfb\xd2\xc3\x7f\xac\xe9\x7a\x38\xaf\x51\xec\xed\xdf\x37\x99\x04\x6e\xd2\xa6\x28\x7e\x34\x90\x80\x1c\xb7\xc2\x84\x7e\xca\x22\xc3\x71\x9d\x1a\xef\x0e\x1a\x8e\x8c\x14\x36\xc6\xf7\xb8\xfe\x99\x95\x2e\x87\xbf\x6f\xf2\x2d\xb8\x49\x6f\x0d\xad\x2c\x5f\x52\x53\x8c\x18\x7b\x13\x8c\xe7\x19\x68\x49\x25\x5c\xc5\x54\x13\xe6\xb6\x9a\xfa\xc8\x1e\xc3\x0d\x47\xb8\x49\x7f\xdf\x64\x0b\xb8\xc9\xe5\x0d\x59\xab\x2d\xdd\x2c\x82\x6f\x71\x47\xcd\x9b\xad\xaa\xe8\xa1\x4f\x86\xbf\x9f\xfa\x4e\x5b\xa7\xa5\x7a\xb8\xb5\xd8\x17\xff\x6d\x0e\x71\xbd\xff\x7f\x43\x11\xfe\x2d\xf4\x3c\xcd\x61\xa2\x84\x4e\x78\x76\x41\x85\x29\xc3\xe1\xfe\xc6\xaa\xad\xad\x0c\x9e\xb0\xdc\xe2\x99\xab\xcb\x4f\x2b\x03\x7a\x72\x41\xd8\x04\x0c\xc5\x81\xde\x42\xa1\xaa\x16\x3b\x51\xdf\xfa\xd8\x54\x6f\x4f\x34\x61\x89\x3c\xf7\x32\xa0\x7a\x31\x63\xb6\xfd\x90\xdd\x7f\x0c\x5b\xe5\x41\xcd\xce\x10\x4c\x16\x8a\x03\xcd\xeb\xfa\x96\x01\xc2\x33\xb3\xb3\x9c\xb9\x8a\xab\x04\x36\xf7\x03\x64\x0f\xc3\xf3\x5d\x5a\x04\xe2\x3b\x9a\x9a\x8b\x3a\x54\xb4\x09\x81\x90\x0e\x14\x07\x92\x35\x1e\x1e\x08\x52\x20\x7d\xd2\xd4\xdd\x8b\x1d\xf9\x7e\xfa\x5a\x97\x9a\xb1\x26\x5e\xff\x14\x77\x1a\x2d\x2e\xbe\x83\xfc\xc6\x97\x07\x26\x0b\xc5\x05\x49\xe2\xfe\x3f\x6b\x7f\x16\xd3\x9d\x9b\xf0\xaf\x8c\x88\xf6\x7f\x9e\x8f\x4e\xd9\xdf\x31\xce\xbf\x3a\x2e\xbb\x5f\xc2\x94\x81\x5b\xfe\x75\x2a\x91\x1b\x1f\x58\xfb\x43\x70\x20\xd9\x1d\xb6\x42\x7a\xc7\x57\x47\x68\xb7\xea\xb7\xed\xfd\xb2\xa6\xe5\x4e\x33\x92\x12\x1c\xef\x52\x20\x85\xb0\xf6\x64\x3a\x0e\x1d\x9f\xc3\x96\x24\x50\x93\x24\xbc\x19\x64\xa2\xa9\x3b\x19\x82\xf8\x68\x6f\x63\x39\x96\xc5\x4b\x68\xdf\x57\x30\x4e\x0f\x7c\x8a\xa4\x3f\x13\x94\xfa\x47\xf9\xc6\x39\x14\x08\x40\x41\x71\x20\x33\xd4\x85\x3d\xfe\x1a\x4d\x11\xa5\x32\x9e\x53\x31\xa0\xc8\x58\x75\xc8\x1a\x65\x1f\xfb\x51\xf5\xfa\xe7\x8f\x06\x8e\xb3\xfd\xd8\x96\x7a\xe0\xbe\x07\x04\x07\x3e\x3a\x69\x86\x95\x9e\x7b\xa9\xee\x72\xb2\x21\x3b\xb1\x9f\x9f\x12\x77\x6c\x9e\x44\xf9\x0d\xa3\x64\x5c\xcf\x90\x04\xbd\x5a\x2c\x0a\xd8\xb8\x85\xe2\x40\xb2\xbc\xcf\xb6\xd4\x30\xd3\xe5\x82\x28\x87\x2f\xcb\xf2\x36\x6c\x1e\x11\xae\x9e\xd0\x7d\xed\x67\x6f\x21\xdd\xef\x2b\x7f\xe4\xfb\x22\x08\x26\x0b\xc5\x81\x7a\x8d\x9d\xc0\x04\x57\x63\xf8\xae\x9e\x5d\x62\x5f\x77\xf8\x0b\x1b\x5e\x26\xf4\x51\xcd\x29\xca\xce\x13\xdf\x66\x02\x17\xdb\x41\x87\x05\x98\x2c\x14\x07\x92\xbd\x98\x2f\xb9\x7b\x9f\xb7\x02\xdf\xae\x51\xfd\x29\xb6\x2b\xea\x9d\x7b\xa1\x47\xce\x3c\x9a\x66\xcc\x58\x08\xce\x76\x2e\x67\xbf\x5a\x61\x66\x80\x7a\x7d\xc1\x9b\x41\x50\x2a\xeb\x46\xfb\x84\xeb\x19\x39\xdd\x4a\xbe\xc1\x79\x8c\x51\x86\x6d\xf4\x8e\x8d\xf0\xde\xf4\xe5\x9c\xa3\xb6\x99\x80\x2d\x23\xec\x07\x43\x71\xe0\x5a\xd3\xd5\x8c\x42\x36\x74\x84\x8a\xaf\x7d\xe6\x9a\x3c\x27\xc3\xf6\x0d\xff\x34\x9f\xe6\x3d\xff\x15\x95\xd5\x7c\xab\x58\xc5\x59\x08\x38\x0a\x0f\xc5\x81\x73\x31\x5d\x5b\xbc\x77\x08\x8c\xea\xd1\x79\x3e\x9f\x25\xc8\x70\xd6\xfb\xd9\x80\x39\xf1\xe5\xfa\xd9\x64\xb1\xa8\x67\x8e\xbc\x46\x2c\x13\x4c\x16\x8a\x03\xc9\x96\xf7\xb5\x06\x7a\xb5\x84\x4b\x49\x1b\x9a\xd3\x62\x61\xf8\x91\xb0\xa3\x6b\xd7\x3a\xba\x2d\xa0\x7d\x71\x45\xbc\x59\x9a\x93\x21\x81\xc9\x42\x71\xa0\x5e\x1b\xf5\xb8\xbd\xe1\x56\x99\xdd\xb3\x3a\x26\x24\xba\x96\x19\x5b\x9c\xb1\x61\xd8\x30\xf7\x50\x4b\xf9\x44\xce\x81\x40\xed\xcd\x39\x32\x4c\x16\x8a\x03\xc9\xc6\xd4\x64\x89\x5a\x63\xd8\x4c\xeb\xdc\x0f\x23\xfd\x24\xe9\x5e\xdb\x23\x85\x25\xa5\x9a\x35\x36\x38\x3f\xf5\xbe\x3f\x8b\x80\xc3\x0b\x66\x06\xa8\x85\x05\xbc\x19\xac\x5e\xfd\xbc\xb1\x9f\x2d\x16\xb8\xb8\x9c\x28\x9d\xc2\x33\x52\xaf\x7a\x3d\x2b\x2f\x26\x1a\x67\x8c\xb2\x23\xab\xbc\xfd\xb1\x19\x28\x45\x05\xc5\x81\xaf\xc3\xe9\xda\x90\x50\x51\xf5\x07\xfe\x72\xc1\xe5\x2a\xbb\xa4\xe1\x37\xf2\x0a\xa3\x47\xa4\xd6\x50\xad\x28\x8b\xc8\xbc\xa2\xfc\x27\x83\x16\x14\x07\xea\xb5\x45\x46\xfc\x4e\x37\x5f\xce\xfd\x16\x35\x34\x32\x6b\xee\xc7\x38\x91\xf4\xfc\xd6\x5c\xac\x5f\x2d\x1b\x37\xd9\x08\xa3\x52\xab\x4e\x60\xb2\x50\x1c\x48\xd6\xe0\xcb\xc1\x37\xb9\x46\x5c\x37\x6e\x83\xdb\x0f\xea\xbf\x88\x05\xfb\xe7\xbe\x56\xfc\x25\x71\xfd\x9a\x6f\x5e\x7a\x1b\x67\x04\x19\x18\xc2\x50\x1c\xa8\xd7\x58\x48\xad\x50\x7a\xae\x66\x7c\x56\x2d\x52\x23\xad\x73\x75\xe2\xd0\x5d\x5e\xf5\xe6\xc7\x35\x0d\xe3\x2f\xa8\x6e\x58\x04\x97\x03\x49\xe3\xa1\x38\xb0\xc7\xa6\xe8\xbc\xb3\x36\x5d\x25\x6a\xb1\x98\x49\xa9\xa2\xc6\xa8\x32\xb9\x1d\x45\x75\x78\x05\xd4\xf8\xa8\x0e\x97\x13\xa9\x2e\xef\x03\x33\x03\xc4\x92\x0f\xde\x0c\x68\x4f\xac\x43\xfc\xea\x64\x9d\xd6\xc8\xfb\x3a\x53\x96\x79\xe6\x8f\xb9\x08\xb8\x3c\x37\xcf\xde\x0b\x8c\xda\x5a\xb3\x08\x1c\x02\x15\xc2\xa1\x38\x90\x19\x58\x37\x99\xbf\x91\x9a\xac\x79\x15\xb6\x1d\x7d\xe4\x41\xa5\x6f\x7e\x6e\x66\xb5\x87\xb1\x3b\x52\x12\xa8\x32\x93\xd7\xc8\x67\x06\x6c\x0c\x40\x71\xa0\x5e\xb3\x37\x32\x3a\x97\xfe\xa2\x55\xbd\x7a\xc3\x9f\xa3\xb8\x8b\xa8\x3e\xe3\x1c\xf2\x82\x9e\x01\xb7\xf7\x41\x2d\xbd\xba\x42\x14\x45\x05\x4c\x16\x8a\x03\xc9\x8e\x98\xda\x2a\x21\xf4\xf4\x89\x47\xa6\xb6\xa8\x1d\x63\xaa\x72\x6f\xe7\x55\x9a\x62\xd3\x37\xf9\xfc\xe2\xf1\xec\xce\xfd\x44\x06\x64\xde\x86\xe2\x40\xbd\x86\x98\xcd\xab\xa4\xa3\x38\xca\xf6\x31\x1a\xe1\x45\x8a\x89\x8c\xba\x0d\xfa\x0d\xfa\x87\xdf\x87\xef\x6b\xf4\x05\xe7\x84\xac\x0c\xf7\x60\xb2\x50\x1c\x48\xb6\x6f\x0e\x6f\xe2\x79\xa4\x50\x6b\xfe\xb2\x2c\xed\x4c\x83\x0a\x7e\x2e\xfa\xab\x2a\x4c\xbe\x65\xe9\xea\x7b\x02\x67\x7e\xfc\x35\x61\x30\x33\x40\x2d\xc6\xe1\xcd\x30\xec\xe3\xbb\xcf\xc6\xf5\xde\xf7\x33\x9e\x54\x82\xb7\x2c\xc1\xed\x83\xa8\x5f\xe8\x1b\xd9\x03\x04\xdf\xd0\x1e\x24\x64\x06\x5f\x02\x79\x25\xa0\x38\x90\x19\x76\x27\xda\x6f\x9f\x97\xe7\xa3\xaf\xe7\x0e\x2e\x4f\x51\xb5\x36\xa9\x1f\x26\xf3\xfc\x9a\x7a\xc8\x15\xfd\xf1\x7c\xd7\xd6\xf0\x1b\x90\xbb\x04\x8a\x03\xdf\x8b\xa0\xf5\x32\xa4\xd3\xce\xc6\x49\x9b\x0c\xe8\x52\x91\x47\x61\x18\xca\x77\x25\x6c\x57\x72\x13\x0d\x1c\x7a\x8e\xf0\xf1\x39\x1f\x50\x19\x1b\x8a\x03\xc9\x8e\xb9\x69\x6d\xac\xfe\x39\x7e\x26\xb4\xda\xe5\x56\x8b\xdc\xf6\xb5\x63\x25\xb2\x40\x4a\xa6\xcd\x2d\x0d\xa1\x30\xdf\xea\xd5\xed\x54\x98\x2c\x14\x07\xea\x35\xca\x00\xcc\x34\x34\xf3\xeb\x12\x9c\xa6\xcf\x3d\x3e\xde\x51\xa8\x93\x3f\x6f\x3b\x31\xbe\xdd\xf1\x5c\x20\xf2\x60\x0f\x50\x27\x08\x07\x4e\x55\x40\x70\x20\xd9\x8c\x96\xef\x06\x99\xfb\xe2\xa8\x65\xaa\x99\xdf\xbe\x06\x4f\x98\xed\x4b\x85\xdf\xa6\xff\x8d\x8e\x34\x93\xca\x3a\xb6\xa6\xb9\x0f\x64\x5a\x81\xfa\x4c\x82\x37\x83\x56\x85\xc7\xe5\x73\x9b\x0e\x69\x31\x09\x1f\x49\x89\x5d\x05\x2d\xb2\xb1\xcd\x48\x41\xa9\x17\xc4\x15\x2f\xf9\x7a\x0a\x08\xd7\x80\x7c\xe9\x50\x1c\xc8\x0c\x5c\xbe\x0f\x78\x7c\xf4\xbb\x76\xc4\x84\xd3\x04\xa8\x6b\x7e\x06\xdc\x30\xed\xdc\xef\xe7\x38\x1c\x73\x30\x59\xc5\xc2\x52\x40\x41\x83\xc9\x42\x71\xe0\xd0\xf4\x27\x99\xa6\x06\xe9\x10\xa2\x0e\xa2\x27\xbf\x3e\x3e\x3e\xb5\x53\x92\x6a\xbb\x19\x29\x16\x2a\x09\xaa\x92\x8b\x22\xd1\x62\x15\x02\x42\xd3\x10\x1c\x48\x56\x90\xd6\xb4\xd1\xd2\x6c\x41\xca\xd7\xca\xd6\xf3\xce\xa8\x1c\xdd\x13\x39\x5c\x59\x79\x72\x9f\x03\xdb\xe1\xe7\x11\x3f\x58\x23\x80\x3b\xde\x50\x1c\xa8\xd7\x6c\x8e\x5a\x66\xee\xd0\x90\x4d\x8c\xa8\x60\xe2\x67\xda\x97\x8c\x0c\x3a\x96\xdc\xb1\x89\x5d\x25\xd2\xbf\xca\x56\xe2\xb4\xb9\x18\x87\xc9\x42\x71\x20\xd9\x92\x8f\x3f\x82\x97\x0a\x1c\xc6\x46\x1b\xe7\xfd\x0a\x3f\x59\x7c\x51\x50\x3d\x25\x71\x1a\x43\x25\xfe\x19\x3b\xc7\xf8\x3c\xc9\x11\x38\xa7\x00\xf5\x01\xfb\x3f\x72\x84\xa6\x05\x6e\x3e\x29\x55\x9b\x4c\x12\x36\x96\x78\x88\x11\x66\x7c\x88\x3e\xec\x3b\x3a\x26\x65\xf7\xd5\x38\x56\xb4\x8e\xfd\x08\x98\x78\xa1\x38\x90\x19\xce\xfc\x4e\x38\xb7\x0a\x06\xc3\x2f\xd9\xda\x7f\xdc\x77\xef\x68\xdf\x79\x1b\x2f\x38\x85\xf8\x81\xfe\xe4\x9d\x20\x12\x89\xd5\x1f\x20\xfd\x10\x14\x07\x0e\x4d\x57\x44\xb6\xb4\xd5\x1a\x49\x7a\x5f\x70\x77\xd9\xc9\xbb\x1c\xcd\xeb\xd6\xef\x8d\x05\x4b\x7b\x28\x6f\xe6\x4f\xe8\xe8\x53\x03\x7b\xf3\x50\x1c\x48\xd6\x45\x28\xf2\x93\xa1\xe9\xec\x33\xca\x30\xea\x5b\x9f\x2d\x67\xaa\xfd\xd5\xec\xcc\x3e\x68\x9a\xe2\xf0\x22\x4e\xac\x50\xf4\x8c\x37\xc0\x64\xa1\x38\x50\xaf\x75\x7b\x53\x8f\x8e\x54\xda\xde\xc3\xb4\x4a\x4e\x18\x41\x2f\x9b\xea\x89\xa0\x54\x67\xd6\x74\xbe\x3c\x29\x7b\x69\x5d\xa6\x42\xcb\x05\x93\x85\xe2\x40\xb2\xda\x1a\x34\xf6\x97\x62\x16\xc4\x57\x68\x9f\xe3\x92\x78\x8f\xe8\xc5\x8f\xb1\xe3\x8c\xdb\x1e\x1a\x61\xde\x1d\x74\xf4\xbe\x3a\xdf\x05\x42\xd3\x50\x9b\x8a\xb0\x5a\xd3\xb3\xe0\x7d\x10\xb1\x37\x6f\xd2\x14\x1d\x16\x73\xfa\xd2\x98\x3c\xe8\xde\x25\xc5\xd6\xea\x24\x8b\xb0\x77\x5e\x93\xc8\x6e\x77\xf1\x29\xb9\x76\xe9\xfd\xfd\xd6\xcb\x01\xb8\x49\xf4\xfd\x1c\x62\xae\x77\x61\xea\x91\x0f\xd4\x8b\xad\x04\xbd\xe7\xb0\xf9\x8a\xe2\xda\xf4\x8b\x03\x92\x79\x9c\x1b\x5a\x0a\x2f\x66\xff\xbe\xc9\x1b\x70\x93\x91\xf1\x9d\x2a\x74\x9d\x3e\xbf\x4c\x3f\x2b\x0a\xc9\xe6\xea\x8d\x7d\x37\x56\x43\x99\xa2\x65\x78\xba\xba\x59\x1f\x6c\x12\xf8\x44\xfc\xbf\xd9\xed\x81\x7a\x96\xf0\x43\x92\x6d\x27\x4d\xba\x70\xec\xf5\xf4\x50\xe6\x44\x8e\xb9\x5a\x0f\xde\xed\x71\xa6\x77\x75\xf9\x9f\x0f\x24\xbf\xc9\x63\xd0\xcd\xa7\x7d\x07\xae\x9e\x42\x70\xa0\x21\x99\x57\xd2\x65\xa2\xf7\x83\xc1\xa9\xb3\xb1\x99\xac\x91\x35\x8c\x8e\x9b\x83\x35\x9a\xef\x0e\xdd\xb2\x81\xad\xc9\xf0\xe0\xf3\x5d\xe0\x0e\x3f\x14\x07\xce\x6a\x21\xb9\x3f\x18\x2f\x75\x30\x3c\xd4\xc1\xaf\xd8\xe5\x46\xe9\xf4\x14\x31\xc6\x6e\xef\xde\x67\x6b\x2b\x2a\xc7\xa7\x69\xef\xfc\x80\x33\x9b\x50\x1c\xf8\x9b\x4e\x22\x57\x9b\x23\x52\x4e\x97\x0d\xa1\x99\x1d\xfb\xe0\xc1\xd7\x7a\xe6\x01\xe7\xe3\xd8\xbc\x4a\x91\x88\xa8\x5b\xa7\x77\xde\x00\x75\x1c\xa0\x38\xd0\xd8\xf1\xb6\xbf\x8e\x15\xbc\x5f\x7c\x8a\xf0\xea\xb0\xe7\xc1\x04\x1d\xe2\x94\x59\xfe\xbb\xd6\x17\x9d\xb9\x41\x95\x5e\x6d\xfe\xf9\xbf\xb1\x80\x83\xab\x10\x1c\x48\x96\xae\xec\xa1\x3c\xa5\x30\x1a\x57\x1c\xf6\x56\xb2\xa4\x39\xa2\x53\x29\xc5\x95\x1a\x61\xc0\x70\x64\xf1\x83\x9f\x9b\x3c\xb6\xe4\x19\xb0\xf9\x19\xca\xe5\xf0\x66\x88\xef\xdc\x9a\x1c\x08\x7d\x8a\xc4\x32\xc7\xda\x5b\x1a\xad\xf6\xc2\x40\x18\x87\x5a\xbf\xc3\xb5\x2d\x75\xe7\x6d\x4c\xfa\x9d\x18\xe0\x14\x24\x14\x07\x32\xc3\xb2\x0b\x1b\x72\x17\x4a\xe4\xad\x4a\xa6\xa3\xa2\x96\xf2\xcf\xd4\x8c\x8f\xfe\xb8\x4e\x60\x47\x9c\xed\x85\xb9\xcd\x78\xd6\x14\x9d\x02\xbd\x06\xc1\x81\x7a\x6d\x9a\xcc\x8e\xd5\x1b\xe9\x68\x85\xf9\xf4\xfc\x47\xdd\x79\x1a\x6a\xee\x98\x9b\x59\xd1\xd3\xe5\x6b\x13\xec\xb4\x4f\x19\x64\x74\x40\x76\x1e\x28\x0e\x24\xbb\x85\x9d\xf8\xfc\x0e\xf6\xe8\x4f\xb2\xd0\x9f\x65\xcf\x36\x57\x47\x0b\xc5\xd1\x33\x7f\x98\xde\x5b\x31\x14\x4b\xb9\xac\x3f\x39\x05\x36\x2a\xa1\x38\x50\xaf\xa5\x63\x2a\x97\x2c\x90\xc9\xf7\x86\xdc\x1a\xd7\x79\x4b\x5c\x5b\xf0\xaa\x42\x2c\xb1\xb7\xc4\x56\x87\xb0\x14\x8b\x25\xe4\xf7\x4f\xa0\x04\x09\x14\x07\x92\x2d\xb8\x57\x44\x91\xed\xb4\xac\xfd\x76\x85\x2d\xa7\x17\xcf\x57\x13\x67\xb5\xcc\xcf\x06\xbb\x93\x5f\x75\x51\x20\x2f\xe9\xd1\x5d\x2a\x98\x19\xa0\xe6\x1f\x78\x33\x7c\xe7\xff\xb8\x1f\xe7\x71\x36\x93\x75\xfe\xb1\xb8\xfd\xd9\x1f\x4b\x77\x51\x95\x96\xac\xb7\x91\xf8\x38\xc3\x2b\xba\x54\x79\x3a\xc0\xe7\x0c\x14\x07\x32\x43\x96\x15\x8d\xb2\xab\x71\xb9\xba\x56\xe5\xba\x18\xd5\xbc\x8f\x7c\x96\xf0\xb4\x2c\xc3\xd3\xbd\xe7\x13\x06\x76\xcf\xfc\xd7\x3f\x03\x0b\x63\x28\x0e\xd4\x6b\x0d\x95\x3e\x2c\xcf\x18\x2e\xe6\x51\x7f\x53\xff\xfc\x2d\x40\x96\x75\x84\xfe\xa0\x84\x67\xf5\xad\x7d\xc7\xb4\x56\x31\xbf\xbe\x16\x3a\x4c\x16\x8a\x03\xe7\xbb\x89\x98\x8e\x73\x4a\xd3\x29\x3e\x10\x50\xd6\xfb\x49\x1d\xa9\xc2\x5b\xf4\x56\xde\xfe\x80\xee\xd1\xde\x35\x96\x2b\x2e\x55\x34\x90\x54\x02\x8a\x03\xf5\x1a\xce\x95\xa9\xcc\xd2\xc3\xe0\x6d\xf4\x8f\xc6\xb9\x65\xc9\xe1\xf5\xca\xe7\x89\xda\xf5\x66\x82\xad\x08\xfe\x8e\xef\x7f\x25\x58\x02\xb7\x85\xa1\x38\xf0\xca\x2d\x9f\x68\xf6\x19\x5e\x74\xb6\xfc\xd0\xbc\x4e\x4b\x73\x17\x4a\xc1\x0e\xee\x66\x43\xaf\x41\x91\xc8\xa8\x6c\x1b\x95\x13\x43\x2e\xb0\x8c\x87\x08\x46\xc2\x9b\x01\x3f\x8a\x49\x7c\x2b\x82\x2d\xc7\x8c\xc4\x86\x68\x52\xa7\xb9\x16\x39\xad\x96\xdc\x1e\x3f\x81\xfd\xcb\x6d\xc1\xc3\x00\xae\x56\xa0\x24\x0d\x14\x07\x32\x03\xf5\x29\xaa\xbc\xc2\x83\xcf\xa4\x92\x2d\x0c\xa6\x6f\xe4\xc2\x5c\x4a\x16\x0e\x2d\x36\x8d\xcc\xeb\xfc\xbd\x82\xac\xaa\x1e\x70\x02\xe9\x2a\xa0\x38\x50\xaf\x89\x28\x2b\x1a\x4e\x44\xbd\x70\xb9\x9a\x44\xbf\xf8\x4a\x23\xf9\xe7\x95\x00\x05\xb7\xd3\x92\xeb\x17\x5a\x69\x7f\x8b\x7b\x08\x9c\x40\x86\x56\x28\x0e\x24\x1b\x64\x76\x9d\x27\x34\xe9\x2f\xcb\x4c\xb4\x99\xb1\x90\x2b\x98\xee\x46\x76\x64\xca\x64\xa5\xc0\xb3\x70\xd2\xf4\xd4\x50\x41\xca\x04\x26\x0b\xc5\x81\x7a\xcd\xb3\x76\x20\x62\x20\x33\xdb\x9e\xf7\x25\x5d\x1e\x46\xdc\x47\xd4\x2d\xcf\xd7\x82\x15\xd7\x93\x6c\x1f\x34\x51\x2e\xf8\x37\xff\xfc\x01\x42\xd3\xf1\x3d\x0b\x8f\x29\x3c\x38\xe4\x0f\x33\x0d\x48\x71\xd9\x93\x83\x1a\x12\xd8\x16\x55\x19\x76\xc9\x22\x69\x35\xbb\xd8\x5b\x3d\xb9\xff\x1d\x9a\xe6\xd4\xf6\x54\x38\x35\x40\xc5\x58\x8d\xf7\xa3\xe8\x1f\xae\xfb\xf0\xd2\xf2\x43\x09\x37\x09\xfd\xaf\x49\xea\xeb\xb6\x67\xe1\x9d\xff\x4e\x76\x8c\xe5\x8b\xe6\x7f\x69\x27\x42\x38\xb7\x7d\x64\x51\x38\x9d\x95\xd7\xeb\x5f\x8b\x59\xb7\xf4\xe3\xdb\xac\x91\xc5\x82\x11\xa9\x37\x26\x28\x34\x0d\xa5\x0c\x1f\x9a\x76\x63\x27\x48\x3b\x98\x7e\x3d\xe0\x3f\x5d\x1d\xee\x2f\x2c\xd7\x24\x3c\x18\x33\x64\xbf\xc9\xd8\x5e\x1f\x7a\xb7\xe2\x48\xfb\x4e\xe2\xbf\xd0\xe0\xc5\xe6\xae\xee\x62\xdd\xf2\xaf\xc7\x13\x2f\x51\x86\x07\x70\x67\x63\x89\xed\x8d\x2a\xd2\xf1\x4e\x24\xda\xb6\xdd\x70\x02\x1c\x81\xd0\x34\x94\x26\xac\xd6\x34\x38\x34\xed\xe2\x20\x61\x8d\x99\xf9\x9e\x9d\x58\x76\x50\x21\x95\x48\x36\xff\x49\x14\x87\x66\x5f\x2b\x9f\x10\xd1\x64\xc2\xec\xa3\x97\xc6\x72\x7f\xbd\xf4\x7b\x08\x17\x9a\xe6\x43\x9e\x6b\xf6\x4c\x68\xea\x17\x68\xf7\x11\x31\xd7\x26\xd9\xb3\xea\xcc\xfe\x84\x11\x3b\xb4\xb2\xdb\x8f\xe9\x49\x77\xd5\xdf\xff\xf7\x4d\xc2\x85\xa6\x8d\x11\x11\x68\xa6\x2a\x29\xd0\xb6\xb5\xc5\x44\x3d\xdf\xaf\xdc\xc3\x7b\x14\x1f\xf0\xc4\xb8\x50\xfc\x0b\x06\x53\xff\xe4\x4c\xcc\x7f\x50\xde\x1a\x2e\x34\x7d\xe1\xfd\xed\x7d\xe5\x7b\xcf\xc1\x0f\x1a\xd5\xc6\x36\x31\xae\x8b\xfa\xe4\x06\xd8\x36\xe7\x73\xd5\xf2\xba\x9d\x0f\x11\xbf\xa4\xfd\xfd\x9a\xfa\x21\x5c\x68\x5a\x4a\x91\x0f\xcf\xdc\xa4\xb5\xbb\x0a\x8d\x32\xe0\xc0\x24\x61\xb2\x6f\x8f\x5b\xe3\x22\xe3\xc2\xd0\xca\x90\xad\xa5\x49\xe7\xa2\xf0\xef\x9b\x84\x0b\x4d\xef\xd5\x6f\xbe\xa6\xb5\x17\xfa\x94\x4f\x6b\x83\xeb\x8a\x5c\x26\xee\xcf\x41\xc2\xac\xf1\xd3\xc1\xfb\xbe\x86\xcd\x6b\x9b\xbb\xcb\x7f\x9b\xea\x3a\x42\xe6\x21\x5c\x68\xda\x82\x67\x8f\xe1\x7d\x6e\xc6\xd0\xfb\x9f\xa3\xb8\x94\xfd\x46\x1b\x4f\x68\x2e\x88\x73\xe6\xe7\xb6\x99\xca\x5f\xca\x1c\xcb\x23\xfb\xfc\x7d\x93\x70\xa1\x69\x6a\x5d\x44\x1e\x0f\x67\x62\xfe\x66\x0d\x1f\x9f\xc3\xea\xbe\x62\x51\x43\xf9\x7b\x88\xae\x17\x95\xbb\x29\xaf\x28\xba\xe2\xca\xa5\xfe\x9b\x8f\x15\xa8\xa1\x08\xff\x16\x1a\x34\x77\xfc\xc1\xcd\x28\xe7\xd4\xae\xd2\x9f\x50\xcf\x8d\xf1\x89\x88\x4b\xb1\xf3\x49\x6e\x97\x8d\xed\xbb\x54\x14\x53\x92\x61\xe0\xd6\x34\x14\x07\x7a\x0b\x31\x0e\xf1\x59\x60\x06\xdd\xf8\xcd\x8c\x04\xfd\x3a\x5f\xa7\xbd\x37\x1f\xee\x7a\x41\x84\x5e\x6c\x88\x22\x7b\x88\x85\xe4\xdf\x02\x44\xbc\xa1\x38\xf0\x57\x05\xda\x0c\x33\xe1\x1f\x2e\x2b\x31\x7b\x3b\x03\x8b\xad\xc5\x9d\xef\xc7\x97\xdb\x66\x8e\x99\x74\xea\x8f\xd8\x6f\xf4\xa8\xff\xc9\xaf\x0b\xc5\x81\x6f\xa7\xdc\x70\xa6\x87\x93\x76\x24\x58\xe9\xf4\xf2\x0e\x28\x28\x92\x98\xce\x4b\x3c\x29\x89\x1d\xff\x70\x73\xeb\x8f\x88\x94\x69\x40\x1a\x70\x3b\x05\x82\x03\x3d\xdb\x18\x97\x11\xf7\x76\xc1\xda\x95\xed\xaf\x05\xf6\x48\xad\xd5\x35\xfb\x9e\x72\x4f\xaa\x32\xb3\x31\x29\x6a\x02\xb5\x5b\x36\x88\x80\x87\x00\xc5\x81\x5e\x6e\xbe\x3b\x2b\x09\xfd\xe5\x56\x27\xaf\x79\x75\x7b\x25\xcf\x2f\x45\x76\xe8\x4b\x4b\xa7\xc6\x9b\x77\xde\x8a\x6c\x7e\x16\x15\xbf\x36\x86\x2d\x49\xa0\x26\x49\x78\x33\x94\x31\x87\x87\x8a\xb8\x97\xf1\xdc\x7f\x73\x24\xd0\x5b\x42\x13\x2b\x37\xb1\x29\xed\x9f\x99\xcb\x9f\x5a\x8a\xb3\xc6\x14\xe7\x64\x0c\xfb\xc1\x50\x1c\x38\x39\xa7\x51\x98\x29\xba\xed\x6d\xc1\xfa\x5f\x96\xa6\x27\xd7\x1e\x8e\xb8\xe1\x11\x0d\x08\x64\x4f\x57\xe6\x7e\x18\x57\xf9\x73\x51\x01\x7b\x75\x50\x1c\xf8\x64\xaa\xa0\x68\x9a\x27\x11\x66\xbf\x2f\x75\xa4\xa8\x73\x2c\xce\x83\x84\x6f\xb4\x3a\x6c\x9f\xa9\xab\xb3\xcb\xcb\x56\xa3\xf7\x50\x80\x13\x99\x50\x1c\x48\x76\xdb\x83\xe6\x44\x4d\xa4\x4c\xa1\xe3\xd4\x3a\xda\x19\x61\xfa\xe4\xf6\x2a\x9e\x44\x37\x69\x21\x1f\x55\xe0\x73\x11\x76\x73\x1c\xe0\x76\x0a\x14\x07\x3e\x96\x3a\x52\xd3\x79\x9f\x71\x9f\x40\xa4\xd1\x24\xc7\xc2\x0c\xa7\x57\x91\x2d\x42\x5b\x8f\xad\x26\x77\x30\x30\x47\xa7\xb3\x34\x31\x0c\x58\xa4\x43\x70\x20\x33\x08\x60\x3c\xcb\x4e\xe0\x42\x0e\xcb\x44\x1c\x34\xdf\xf5\xb2\x68\xa1\x08\x7a\x31\x59\x77\xe2\xe2\xd9\x12\xaa\xde\xd6\x8f\xd5\x06\x64\x77\x87\x7a\x7d\xc1\x9b\xe1\xa1\xf9\x84\x66\x6f\xdc\xc4\x0d\xd7\x62\x56\xf4\x87\xe5\x3f\x8f\x8d\x03\x16\x02\xec\x23\xc4\x79\xb4\x33\x03\x13\x06\xf9\x59\xcd\x61\x3f\x18\x8a\x03\x99\xc1\xd1\xe3\xf5\x7b\x62\x66\xa4\x22\x97\x5b\x7f\xd0\x4c\x0e\xbe\x68\x22\x94\xd8\x7a\xc9\x77\x7e\x32\x51\xff\xf3\x2b\xa3\x76\xdb\x0d\xd8\x0f\x86\xe2\x40\xbd\x86\xbf\x53\xcc\xaf\xdb\x3c\xa5\x9d\x1f\x99\x69\x9c\xa0\x9c\xfb\xf0\x5c\x66\x79\xfd\xfc\xd7\x63\x55\x47\xce\x4b\xad\xcd\xe5\x35\x5c\x60\x35\x0d\xc1\x81\x64\x45\xef\xf3\x4c\xb0\x7c\x44\x9d\x89\x3f\xef\xdf\x13\x6f\x79\x65\x12\xc4\x1c\x97\xac\xfa\x33\x03\xf3\x59\x94\xf0\xfa\xc9\x10\x2b\x30\xe1\x40\x71\xe0\x5d\x01\xb9\x10\xe1\xc7\x8f\xbd\xbf\x95\x76\x44\x54\xf5\x96\xd7\x86\xfb\x7e\xc0\x45\x30\x3e\xb9\x1c\xfc\x7a\x3e\xbc\x20\xb8\x2a\x03\x78\x0c\x8a\x03\x99\xe1\xa5\xb8\xaa\x9e\xe7\xfc\xce\xd9\xae\x22\xaa\xf8\xfd\xfe\xc3\x99\x9e\x51\x96\xbe\x04\xae\xd8\x57\xc9\x18\x51\x79\x42\x94\x16\xc8\x30\x33\x40\x2d\x2c\xe0\xcd\xf0\xd6\x34\xc8\xd1\x40\x07\xbb\x24\x7b\xba\x6e\x7c\x7e\x2c\xfb\xcf\x38\x4e\x5f\xc9\x77\x16\xda\x96\xd7\xaa\x9f\x89\x64\x7c\x7c\x80\x54\x02\x50\x1c\xc8\x0c\xf1\x86\xcb\xf2\xdd\xa4\xa6\xd6\xbb\x07\x8f\xf4\x05\xf4\x45\x9a\x8a\x07\xf9\xea\x89\xf5\xdf\x89\xbd\x3c\x58\x7b\xe2\x96\x43\x02\x44\x8a\xa0\x38\xf0\x05\x86\x78\xdf\x9e\x91\xef\xdb\xa4\xa9\x46\xe9\x13\x65\x38\x26\x13\x55\x37\xd2\xfd\xfa\x03\xdb\xb1\xb6\x21\xcc\xbc\xd8\x2d\x4a\x40\x0c\x19\x8a\x83\x2b\x45\x85\x84\x5f\xcb\x1b\x9e\xe5\x79\xd1\x6e\x7d\x0b\x7d\x51\x4c\xaa\xd6\xb2\x07\xf1\x2b\x9a\x3d\x2b\x89\xfb\xf3\x28\x15\xb9\x4d\xe0\xf8\x03\x04\x07\x7a\xb6\x07\xd7\x54\xe7\xd6\xbf\x55\x22\x5f\xfc\xbe\xc8\x6e\x78\x5f\xea\xa4\x32\x9c\x71\x5c\xe6\x1e\xf6\xa7\x7d\x4d\xb4\x2b\x8d\x77\x5d\x0e\x26\x0b\xc5\x81\xcc\x20\xf3\x20\x86\x21\x54\x91\x88\xf3\x89\x57\xc0\x8c\x79\x85\x5a\xea\x8b\xe0\x38\xbc\x85\xfb\x3b\xc3\x34\x3f\x73\x8c\x31\x3f\x61\x2e\xc3\xcc\x00\xb5\xe4\x83\x37\x83\x94\xa9\x33\xd7\x2d\xb1\x62\x89\x10\x87\xc9\x5f\x33\x7a\x5c\x4b\xd5\x57\x6d\xb5\xa7\x4a\x85\x7f\x2e\x28\x03\xa4\xb9\x90\xea\x1c\x61\x3f\x18\x8a\x03\x9f\xb0\x2f\xee\x8a\x44\xce\x11\xb8\xf7\x68\xb6\x34\x75\x7c\x2a\x65\xb3\x73\xa2\xa2\xa7\x9d\xc1\xa6\x09\xf1\xea\xf3\x36\x69\x4c\x32\x07\x70\xc2\x1e\x82\x03\xf5\xda\x52\x52\x5d\x68\xd0\xf8\x9b\x97\xc9\x05\xd2\xe1\x63\x0a\x11\x4c\x98\xc5\x4f\xd5\x77\x5c\xe8\x42\x51\x90\x73\xaa\x9e\xc7\x8e\x37\xc3\x64\xa1\x38\x90\xec\xdb\x4b\x14\x89\x28\x27\x6b\xea\x55\xb5\xd7\x9e\x2e\xa9\x4d\x91\xf5\xfc\x2f\x1f\x88\x11\x04\x30\xf2\xa9\x85\x8c\x77\xfb\xd2\x3e\x03\x46\x04\x04\x07\x7a\xb6\x6f\xde\xb2\xdd\xd3\x0d\x17\x18\x9c\xbe\x6b\xa5\xaa\x14\xd6\xd5\x16\x54\xf7\x59\x9d\x76\x2c\x3b\xff\x47\x79\x61\x52\xbc\xc0\x0e\xb0\x1d\x0b\xc5\x81\xcc\x70\x48\x50\x50\x32\x7f\x5b\xe5\xc0\xe7\xb7\xfe\xb7\x9f\x75\x72\x48\x27\x65\xab\x3d\x19\xe5\x55\x59\xbe\x46\x08\x9a\x52\x93\x95\xc0\x09\x26\xa8\xc5\x38\xbc\x19\x7e\x9f\x91\xf8\x94\xbf\x3b\x9e\x29\xd0\x23\x6c\xea\xe7\x7b\x6c\xba\xb1\x8d\xd2\xe0\xae\x75\xca\x81\xbf\x3e\x3b\xfb\x94\xb1\x0c\x38\xc1\x04\xc5\x81\x2b\x16\x0a\xc7\x94\x3f\x9d\x8c\xb3\xb6\x25\x4b\x9f\xf4\x51\x66\x7a\x53\xce\x70\xa4\x22\xef\x81\xe0\xae\x26\x41\x78\x6c\xc7\x15\x00\x78\x0c\x8a\x03\xf5\x1a\x8a\x20\x8e\x85\x66\x18\x81\xa8\xb0\x69\x17\x4b\x4b\x9a\x37\x25\x5f\xff\x1e\xe7\x5e\x8e\x30\x56\x98\x83\x5c\xac\xb3\xdf\x02\x70\x63\x0a\x8a\x03\xc9\x72\xc7\x96\x69\xab\xd6\x21\xed\x18\x58\x37\x38\xfb\x97\x6f\xf8\xe3\x3a\xa1\x94\xbf\xc6\x0b\x66\x89\x79\x82\x65\x73\x40\x8c\x7a\x0c\x93\x85\xe2\x40\xcf\xd6\x59\x27\xef\x38\x7c\xfc\xdd\x9e\xb5\xd2\x5c\x09\xef\xe8\x3b\x4f\x04\xb1\x70\xa5\xfb\x13\xb8\x88\x88\xb6\x2c\x7c\xd3\xf7\xd6\x81\x02\x2b\x50\x1c\xc8\x0c\x8d\x92\x9c\xdd\xcc\x2b\x6a\x72\x02\x97\xf1\xc8\x16\x62\x2b\x23\x34\xb1\x15\xbc\x0b\x47\x57\xa9\xd1\x09\xb2\x89\x8c\x28\x76\x69\x30\x33\x40\x7d\x26\xc1\x9b\xa1\x6a\x36\xdd\x63\xa5\x4f\xd7\x90\xcf\xe8\x61\x20\x8a\xb8\xaf\xc3\x7d\x4b\xe9\xa2\x4f\xa6\xa6\x71\xa9\x21\xd4\x8d\x69\xcc\x5c\x12\xb0\x1f\x0c\xc5\x81\x93\x6b\x1c\x64\xae\x26\xdd\xed\x50\x67\xdc\x64\x95\x94\x4f\xfc\xd0\x3d\x56\x85\xf2\xe6\xd6\xa5\x46\x88\x11\x5a\x58\x32\x77\xfd\xfe\x67\x98\x2c\x14\x07\xea\x35\x82\x4b\x8d\x41\x4b\x76\x74\x37\xf9\xc9\x5f\x77\x58\xdc\x57\x69\xf6\x67\x22\xc7\xa7\x33\x9f\x8f\x53\x14\xd0\x85\xa3\x0b\xd1\xba\xc2\x64\xa1\x38\x90\xec\x44\x98\x6b\x88\xb9\xda\xc7\xdf\x8e\x8e\xda\x98\x1f\x6c\x3b\x6f\x21\x07\x9f\x28\xd2\x56\x6a\x9d\xea\xcf\xd3\x7f\xa1\xad\x40\x07\x32\x9a\x42\x71\xa0\x67\x4b\xd2\xb1\x62\x9d\xe9\xcb\xa0\x4d\xb5\xd7\x68\x96\xe3\x21\x51\x8e\x65\x8a\x79\x3f\x39\x26\xdd\x02\xfd\xed\xc0\x3d\xda\xa7\xd1\xc0\x85\x7f\x28\x0e\x64\x86\x56\x92\x7c\x39\xe4\x90\xea\x46\x47\xe3\xba\xd1\x81\x8f\x38\x0b\xcf\x96\x72\x2d\xd1\x49\x50\x79\xed\x83\xe9\x09\x38\x6a\xdf\xad\xc3\xcc\x00\xf5\x01\x0b\x6f\x86\xd8\x57\xcb\xbe\x9f\xbb\x6b\x6e\x4c\xd0\xbb\xf6\x66\x8d\xb1\xb2\x0d\x68\x4c\xad\x44\x09\x7c\xc4\x2d\x3d\x27\xbe\x72\x7f\x77\x02\x52\xa2\x40\x71\x20\x33\x90\x86\x49\x8d\xec\xcd\xa9\x6a\xe4\x17\xf6\x8b\x50\xda\x11\xaa\xbc\x95\xf5\xff\x7e\xc2\xb9\xf1\x31\x82\x5c\x38\xe1\xd6\xa1\x60\x1d\x4c\x16\x8a\x03\xf5\xda\x2a\x11\xb5\x6e\x27\x9f\x0f\xa6\xef\x03\x53\x24\x49\x1d\xe2\xd0\x92\x07\x17\x83\xcf\xe9\x89\x24\x43\xf8\x45\x88\xac\x1c\x8c\x81\x2a\x15\x50\x1c\x48\x56\x57\xce\xdc\xdf\x6a\x99\xe3\xbd\x4b\x7d\x1d\xc3\x27\x11\xd1\x90\xd4\xf4\xd8\x4c\x72\x29\x6c\x4b\x83\x5f\x5b\xef\x70\xaf\x87\xe7\x60\xb2\x50\x1c\xe8\xd9\xda\xe7\x9e\xb4\xb6\x36\x7c\xdd\x4a\xd2\x1e\xa7\x23\x49\x2c\x53\xf8\x3d\xc9\xb4\x15\xf4\x52\xb0\x81\xbe\x2d\x3e\xf2\xe3\xe1\x05\x70\x88\x18\x8a\x03\x99\xc1\x58\x04\x43\x2d\x08\xb9\x85\x8d\x78\xaa\x2a\x30\x6b\xde\xac\x1b\x2f\x39\xd8\x02\x01\xa5\x2a\x99\xcd\x24\xea\x6e\x82\xa3\x10\x0b\x10\x9a\x86\xda\x54\x84\xd5\x9a\x86\x0b\x4d\xcb\x2d\x0b\xfb\x88\x91\xde\x4b\x77\xae\x93\x10\xca\x1d\xa8\xae\x91\xc2\xc2\xa9\xe0\x8f\x39\xe6\x96\x7c\xa4\xdc\x2a\x25\x7f\x45\xfb\xf7\x5b\x2f\x70\xa1\x69\xdb\x0b\x8e\x8f\xdc\x72\xa2\x12\xef\xbf\xab\xbc\xf4\xd3\xde\x90\xa6\x5e\x4a\x16\xe2\x65\x63\x9c\xba\xa1\xad\xba\xfb\x5b\xa9\xbc\xfb\xef\x9b\x84\x0b\x4d\x1f\xbc\x6c\xc7\xa3\x5e\xbc\x6a\xfd\x39\x3e\x98\x47\x9d\x33\xd6\xd0\x89\xd4\xcb\x12\x17\x64\x6f\x3f\xd6\xa7\x13\x19\x81\xcd\x87\xf6\xdf\xec\xf6\x40\x3d\x4b\xf8\x21\x59\x4b\xc8\xab\xf9\xc1\xab\xe1\x5c\x2d\x4d\xb6\x8c\x4d\x3d\xda\xb0\x65\x88\x50\xd1\xd2\x6c\xf6\x0f\x1b\x0b\x8b\x20\xfd\xf5\x0a\x70\xd2\x16\x8a\x03\x0d\xc9\x95\xb4\xc0\x3b\x3b\x95\x49\xe7\x3b\xcb\x7c\x6b\x45\xf8\x3d\xf8\xe6\xcf\x54\xf1\x54\xca\x8e\xf0\xce\x54\x4a\xde\xa8\x27\xc9\x01\x47\xfb\xa1\x38\xd0\xd8\xa1\xa9\xd9\xf6\x61\x47\x50\x0a\x29\xdb\x22\x99\xa6\x39\x12\xe5\xd6\x6b\xa9\x42\xb8\x15\xc1\x13\xfb\x4e\x24\x88\x4f\xda\x4f\x49\x11\x26\x0b\xc5\x81\x64\xb5\x1b\x79\x6b\x37\xd6\x02\x4c\x57\xdc\xeb\x86\x69\x1c\xa9\xb4\x53\x7e\xbf\x2b\x0b\x59\xf3\x93\xcd\x94\x15\x7f\xd7\x97\x28\x07\xbc\x55\xa1\x38\xd0\xb3\xfd\x20\xbc\xea\x66\x80\x8b\xa6\x9d\x38\x56\x18\x2e\x30\x49\x51\xa8\xac\xe4\x99\xa0\x54\xce\x3d\xbf\x73\xc1\x64\x58\xd3\xd5\x37\x05\x93\x85\xe2\x40\x43\x92\xbb\xea\x68\xcc\x41\xb6\xa5\x63\x46\xb2\x78\x35\xa7\x2d\x85\x13\xbf\x96\x5e\xa8\xa1\x85\xc5\xab\xed\xd9\xca\x6e\x0a\xd3\x2e\x19\x6c\x7e\x86\x72\x39\xbc\x19\xc2\x58\x4d\x7f\xfb\x20\xff\xc1\x7b\x13\xf2\x5a\x0f\x7d\xef\x24\xdd\xe5\x95\xc9\x39\xdd\xb3\xfd\x81\xd1\xd1\x02\x7d\xc5\x76\x9b\x5d\xd8\x0f\x86\xe2\x40\x66\x20\x8c\xea\xb4\x3b\xe9\xcc\xeb\x92\xc8\x29\xeb\x38\xd3\xbc\x65\x4b\x78\xfa\xc6\x4e\xc0\xdd\x93\xad\xfb\xdc\x9d\x7d\x3b\xc5\x0b\x78\x0e\x50\x1c\x38\x7f\xd9\x37\xab\xde\x4a\xb5\xa6\x0b\x8f\x2c\xcf\x48\x8c\x2a\x8e\x67\xd1\x4c\x67\x65\x98\xc2\x77\xa9\xcc\x7d\x84\x53\xf7\x2a\xaa\x9e\xc2\x64\xa1\x38\xb8\xbb\x91\x54\x5f\x5b\x7c\xd5\xfd\x7a\x48\x66\x92\xb5\xe9\x22\xc6\xa8\xe9\x75\xf0\x47\xec\x6c\x47\x2b\x08\xf0\x33\xa2\x8a\xac\x04\xfe\xb9\x1b\xf9\x7f\x73\xe0\xf9\xd9\x5c\xe8\x1b\x66\x2f\x8a\xe7\xb7\x8a\x08\x6a\x7c\xbb\x41\xbd\x75\x9e\xe3\xa4\xbc\xa6\x97\xbc\xb4\x2e\x3d\xbe\x94\x87\x48\x6d\xc0\xfc\x0c\xc1\x81\xcf\x9e\xb7\x5e\x52\x07\x1f\x9b\xcc\x2b\x47\x3a\xcc\x2c\xe5\x50\xc7\x65\xe2\xdf\xfc\x58\xa2\x11\x19\x95\xac\xf3\xa8\x52\x90\x90\x7a\x08\x24\x4c\x84\x98\x7f\xfe\xc7\x39\x05\xa3\xaa\xfe\xc6\x35\xb4\x8b\xa7\x8f\x7f\x7c\x48\x71\x2c\x9c\x90\x4f\xc3\x7c\x80\x7a\x56\x2c\x66\xd6\xdb\x88\xc7\x36\x23\x54\x08\x7c\x89\x43\x70\x20\x33\x48\x16\xe7\x1f\x17\x1c\x95\xa7\x0f\x6a\xd6\x4e\xad\xbe\xde\x6d\xa5\xb6\x0d\x0f\x23\xc5\x37\x9c\xc5\x0f\x77\x97\xd7\x13\xb6\x00\xb2\x7b\x40\x71\xa0\x5e\xbb\x83\xdb\xb4\xe0\xc7\x9d\xf4\xfe\x60\x0e\x41\x7b\xa7\xed\x8e\x34\x09\x2a\x63\xcc\x67\x31\xdb\xbb\x12\x3d\x19\xe8\xf6\xdc\x88\x40\x5a\x34\x28\x0e\x24\xfb\x00\x95\xb4\x7b\x9a\x4a\x35\x31\x00\x77\x99\x69\xdb\x3e\xaf\xa8\xb3\x82\xf1\x8e\x4b\x26\x57\xf7\x1c\x4a\xee\xa4\x6a\xd5\x99\x30\x4c\x16\x8a\x03\x3d\xdb\x22\x06\x12\x7a\x35\x9a\x77\xbe\xa7\xcf\xd1\xa3\x71\x29\x35\xa2\xa6\x23\x6d\x4b\x53\x07\x9e\x62\x3c\x52\x33\x08\x44\x54\x29\x04\xea\x45\x42\x71\x20\x33\x98\x18\x86\x7f\x3b\x1d\xfe\xb5\xa4\xe6\x82\xc1\x71\xec\x7e\xf5\x28\x70\x9b\x6a\x3c\x1d\xd1\x0c\xc3\x5e\x53\xa7\x7c\x1f\xe3\x68\x0d\x66\x06\xa8\x60\x24\xbc\x19\x66\x68\x69\xba\x87\x70\xfb\xdb\x9b\x08\xb9\x15\x29\xcb\x04\x1d\x6d\x59\xd1\x89\x65\x76\xc7\x07\x6c\x8e\xeb\xb3\x53\x78\x6b\x80\xd3\x7f\x50\x1c\xc8\x0c\x8f\x75\x8d\x4a\x8f\x50\x76\x49\x96\x5e\x35\x07\x17\xea\xea\xf7\x13\x8d\x52\xae\x3f\x38\xf0\xe2\x0d\xc1\xaa\x44\xa0\x0b\xc3\x06\x0a\x5c\x42\x71\xa0\x5e\x73\xa0\x2b\x4a\x8e\x40\x4f\x95\x1e\xfd\x1c\x38\xfa\xf2\xee\xce\x42\xe9\x4f\x8f\x8b\x9d\xa8\xc3\xe3\xa7\x36\xd5\x2b\xb3\xb9\xaf\x50\x61\xb2\x50\x1c\x78\x7b\xd9\x79\xd8\xed\x1d\x5d\x28\xba\x57\x32\xb2\xfd\xf1\x11\xb3\xef\x9b\x0c\x09\xad\xe3\xd6\x09\x84\xf3\x79\x21\xdd\x5f\x5c\xce\xe7\xc0\xf6\x32\x04\x07\x2e\x73\xd3\x1c\x34\xfa\x82\x61\xbd\x84\x59\x04\x1b\xed\x56\x72\xff\xfd\x37\x86\xa3\xb6\x0b\x3f\xad\x1f\xde\xda\x1c\x66\xba\x3c\xe1\x5f\x01\x42\xd3\x8f\x7e\x86\xd0\x73\xf8\xe9\xf5\xee\x8b\x9f\xce\x92\xac\xe3\x33\xf3\x39\x2c\x04\xc7\x7a\x27\x28\xc5\xe4\x7b\x6d\x5f\x77\xe8\x1d\xfc\x3b\x34\x1d\xfc\x5a\x5c\xec\x80\x81\x54\xdc\x96\x58\xd5\x33\x61\x26\xaa\x9b\x4a\x58\x86\xe2\xec\x4d\x99\x43\xc3\x2d\x53\x94\xab\x60\x9b\x7f\xd7\x9a\x66\xa1\xb6\xff\xa1\x25\x7e\x8e\x6b\x24\xb8\xdb\x58\xbc\xc7\x4e\xd4\x90\xbb\x79\x63\xdd\x8d\x4e\x17\xca\xb0\xc5\x47\x48\x81\xef\x08\x0a\x4d\x43\x29\xc3\x87\xa6\x63\xb4\x7e\x77\xa6\x0e\x5c\x1d\xd0\x3c\x41\x4e\xe0\xd0\x8f\xbb\xd5\xdb\x9e\x6d\x75\xe9\xd5\x74\x91\xf3\x88\x76\xb6\xf1\xa9\x8d\xd1\xbf\xd0\x4c\x23\xfc\xae\x1a\x16\x36\xe5\xcc\xec\xaa\xfb\x53\x39\x87\xe5\x71\x3d\xb9\x3d\x44\x99\xe6\x2f\xbf\x90\x7b\xb5\xc5\x7d\x68\x9d\x01\x42\xd3\x50\x9a\xb0\x5a\xd3\xe0\xd0\xb4\xb2\x7c\xc2\x81\x39\x89\xd7\x6f\x1e\x32\xed\xfb\x66\x72\xf4\x3a\x2a\x48\x38\x63\x0f\x22\xdc\x3c\xc8\x55\x34\xc9\x5b\x88\xa5\xff\xfe\x72\xaf\x3f\x5c\x68\x3a\xae\xf6\x58\x75\x40\x86\x69\xc1\xc0\xfd\x61\x1c\x02\xcd\xc9\x9b\x44\xf7\x70\x24\x53\xb2\xf0\x5a\x6a\xf2\x76\xd6\x42\xcb\xa2\xe1\xbf\x6f\x12\x2e\x34\x4d\xb6\x9b\xb9\x42\x21\xd9\xee\xbd\xf4\xf4\x14\x7d\xf5\x99\x52\x91\x2b\x4d\x75\x88\x11\x92\xd7\x6f\x4b\xe6\xcc\xfa\x2f\xa7\x81\xbc\x7f\xdf\x24\x5c\x68\x1a\xbf\x40\x40\xc0\x50\xfc\x96\xd1\x03\x72\x0f\xa7\x5e\x8f\xd1\xa9\xb2\x34\x87\x99\xd5\xfb\x9c\xec\x57\xb7\x27\x9f\x49\xa9\xe1\x76\xfe\x7d\x93\x70\xa1\xe9\x41\xd9\x52\xc1\x74\xe4\x67\x5f\xdf\xf0\xd9\x93\x05\xc7\x55\x32\x32\x44\xef\x5b\xea\x4c\xad\x38\x35\x66\x54\x32\x55\x3c\x5c\x68\xfa\xfb\x26\xe1\x42\xd3\xa2\x0a\x72\x5c\x3c\xcb\xa2\xb5\x97\x5d\x1d\x82\xa5\x6e\x84\x34\xbb\x45\x25\x59\x5b\xb3\x3c\x49\xa1\xa9\xb5\x73\xb5\x67\xef\xfe\x83\xea\x43\x70\xa1\x69\xf3\xfb\x24\xa6\x5e\x3c\x54\xcf\xe6\x66\x85\xe2\xdc\xa6\xf7\xd4\x86\xce\x96\xbf\xe2\x04\x12\x71\x2b\xb8\xe6\xb0\xe0\x9a\x1d\xff\xfd\xad\x69\x7f\xb8\xd0\xf4\xf7\x0c\x3b\x0f\x6e\x53\x66\x75\xb1\x1b\x4f\x95\xda\x8e\xea\x5a\x2c\x41\x36\xda\xdc\xe3\x91\xc9\xd7\x28\x82\x3f\x3e\x48\x47\x7f\xfe\x6f\x3e\x56\xa0\x86\x22\xfc\x5b\xe8\xbd\xb6\x4f\xf6\x2e\xbe\x01\xb7\x55\x5a\x67\xd1\xcf\x78\x7d\xc1\x70\xea\x70\x1d\xa2\x52\x8d\xb6\x9e\x35\x12\xf6\x0f\xa9\x53\x40\x92\x52\x28\x0e\xf4\x16\x12\xc4\xd3\x30\x1f\x55\x55\xff\x73\x9b\xbb\xf6\xc4\xbe\xae\xa9\x5c\xf9\x1b\xa9\xe4\xee\xfd\x07\x76\x4f\x38\x7e\xa5\x23\x7c\x3f\x02\x2a\xca\x42\x71\xa0\xd7\x45\x68\x8c\x7d\xde\x3d\x26\xcd\x92\x92\xc7\xca\x3e\x0d\x81\x53\x6b\x1d\xbf\xcb\x13\x3f\xa2\x3e\xe3\x18\x53\xeb\xa7\x1d\xd5\xc1\x06\x4e\x32\x41\x71\x20\xd9\xdf\xce\x85\xac\xb3\x97\x2e\xfb\x0a\xaf\x55\x33\xca\x6f\x3e\x51\x32\x2c\x76\x21\xdc\xfd\x10\x8f\xf8\xf1\xb5\x53\x77\xe6\xe3\xe7\xc0\xad\x0c\x28\x2e\x48\xf2\xe1\xff\x73\x62\x7e\x2b\x6a\xff\x4d\x32\x3e\x22\x0b\x66\xb7\xf5\x3d\x95\x2c\x82\xab\xa1\x39\xa5\x03\x0a\x74\xb9\xc8\x9e\x01\x1f\x93\x7b\x42\x40\xfd\x5b\x28\x0e\x9c\x83\xa8\x18\x65\xd4\xe0\x80\xe3\xd8\xfd\x52\x7d\xb0\xf9\xd6\x3d\xff\xdc\x0f\x96\xb5\x3b\xcb\xc6\x1b\x03\x05\xa1\xb4\xe4\x37\x1e\x89\xb0\x25\x09\xd4\x24\x09\x6f\x86\xa1\xa7\xcf\xcb\xef\xb4\xf4\x1f\x0e\x0a\x56\xa6\x3f\xb4\xa3\x6c\x1f\xb1\xac\x1f\x67\xf9\xee\xd9\x4f\x9b\xc3\xca\x13\x9e\x1b\x06\x9c\x27\x86\xe2\xc0\xdb\xcc\x6b\x21\xb5\x0a\xe5\xbf\xc4\xd4\x4e\xd3\x9f\x44\x0d\x46\x20\x34\x5c\x5e\xe0\xae\xc6\xa4\xbe\xc7\xdb\xdf\xea\x7b\xf8\xe3\xff\x63\xed\x2f\xa3\xb2\x7a\xde\xf7\x7f\x98\x12\xa4\x53\x44\x4a\x40\x4a\xba\x25\x94\x4e\x09\x69\x10\x90\x46\x5a\x1a\x51\x1a\x01\xe9\x06\xe9\x46\x42\x10\xa4\xbb\x1b\xa4\x41\x29\xe9\xee\x90\x10\x84\xfb\xc9\xef\xda\xf7\x7b\xed\xeb\xbb\xd6\xfe\xaf\xe5\xe7\xf9\x6b\x9d\x33\x0c\xc7\x5c\x33\x7b\x8e\x99\xf3\x6c\x43\x00\x8e\x99\x21\x38\xf0\xd5\xc9\xcf\x97\x8c\xb5\x82\x25\x77\x0a\x8b\x75\xac\x36\xee\x06\x4e\xad\x04\x05\xff\x50\xa2\x1b\x4b\x79\x16\x1f\xe1\xe5\x23\xab\x01\xdc\xfa\x85\xe2\x40\x61\x45\xcc\x98\xed\x86\xa6\xca\x0d\x30\x25\x30\xaa\xee\x86\x6d\xea\x44\x9b\x39\x85\x18\x4d\x1f\x3b\x30\xba\x6e\x97\xc5\x7f\x0e\x04\x6a\x46\x41\x71\x20\x31\x04\x16\x8a\x85\x8a\x26\x6f\x1e\x11\x3f\xfa\x45\xfa\x5c\x52\x80\xfb\x22\xad\x86\x6d\x51\xe3\x7d\x45\x63\xe9\x13\xd2\x21\x93\x03\xe0\x8c\x0a\x8a\x03\xf5\x56\xa0\x22\xb9\xdc\x24\xab\xda\xe2\xb1\xc1\xb7\x07\x12\x3f\xe5\x3f\x87\xf9\x90\xcb\x66\xb1\x76\x32\x0a\x89\x8d\x36\x5c\x22\xb5\xb3\xc1\xc4\x00\xb5\x7c\xc1\x8b\x61\x93\xe0\xad\x4f\xff\xc2\x7b\xbc\x07\x5e\xf2\xf8\xd7\x18\x24\x01\x7b\x65\xf7\xb9\x7b\x22\xda\xb5\x11\x63\xde\xd1\x30\x2e\x14\x22\x02\x0f\xcc\x20\x38\x90\x18\xee\xa6\xf7\x46\x21\x04\xac\x59\x21\x8a\x35\xe0\xb4\xdd\x0a\x7f\x78\x8d\x1d\x4c\xd8\x16\xbb\x5a\xe4\x75\x19\xf5\xf2\x85\xe0\x82\x2d\xf0\xe4\x12\x82\x03\x8d\x83\x44\x6f\x59\xd5\x83\x1e\x26\xca\x1e\xcf\x55\x5a\x66\x4d\xba\x3b\xd1\x67\x24\xe7\xdd\x5b\x0d\xf1\xa4\xd9\x21\x78\xf2\x4e\x0a\x40\x3d\x73\x28\x0e\x14\x16\x13\x79\xf8\x98\xe2\xf9\x17\xb6\x0f\xed\xe3\xc1\x91\x61\x07\xd1\xc1\x2a\x34\xe5\x3f\x96\x0b\xad\x5e\xdd\x9a\xce\x4b\xad\xb6\xb2\xc0\xc2\x42\x71\x20\x31\x8c\xbf\x1f\x1c\xe3\xc0\x59\x4e\xe2\xb2\xc3\x30\xe9\x51\xe2\xb8\x78\x23\x27\x7f\x68\x2b\xb4\x10\x49\x81\x1b\x8e\xfa\x32\x80\x04\xb8\x61\x0f\xc5\x81\x0b\x1b\x92\xa7\xc8\x9d\x34\x79\x10\xbc\x70\xc0\x0a\x0d\xa7\x4f\x20\xfb\x10\x49\x7d\xb6\xaf\xa9\x9b\x3b\xae\xcb\xc9\x9d\x2b\xdc\x1a\x0c\x13\x03\xd4\xc6\x02\x5e\x0c\xdc\xb4\xfe\x19\x51\x2d\x4a\xa8\x15\x13\x01\x24\x15\x0f\x47\xe7\xcd\xdb\x84\xed\x18\x35\xca\xea\x11\xfe\xcc\x96\x4f\x59\x96\x01\x1e\x32\x14\x07\x12\x83\x89\x6b\x9a\xc4\x25\x9f\x99\xaf\x4f\xb5\x4c\xc8\xce\x34\x43\xcd\x52\x07\x35\x81\x2b\xc5\xd6\xc4\xfb\xcc\x3e\xaf\x0e\xc3\x13\xa0\x14\x15\x14\x07\x1a\x87\xc5\x44\xd7\xf3\x74\x3c\xef\xac\x0b\x8e\xea\xe9\xfa\x0a\x0e\xdb\x22\x24\x3e\x15\x0c\xeb\x9d\x86\x9b\xf8\x99\x20\xfb\xb0\x6c\xa0\x4c\x10\x14\x07\x2e\x61\x7d\x98\xad\x40\xb2\x9b\x4f\xff\xc4\xa9\x9f\x34\xa5\xee\xb9\x25\x05\x7d\x57\xd1\x40\xca\x93\x9f\x54\xbb\xee\x45\x26\x64\xf9\x40\x01\x31\x28\x0e\x24\x06\xab\x40\xa9\x74\x96\x17\x69\x17\x83\xd6\x8d\xa4\xda\xe6\xfd\x6f\x87\x0a\x2f\x35\x8e\xdb\x3f\x76\xbc\xca\x13\x73\xfa\x86\xaf\x0b\xbc\x9a\x86\xe2\x40\xbd\x35\xd9\x1e\xe0\xfa\x69\x16\xe1\x4b\x2b\x76\x30\x4d\xa2\xec\x6d\xee\x84\x44\xea\xea\xa7\x51\x76\x3c\x2a\xc6\x74\x61\xea\x3b\x89\x0a\x14\x11\x85\xd8\xf2\xc1\x8b\x41\x85\x31\x28\x2e\x6a\x18\xff\x16\x0b\x23\xe2\x7d\x36\x8f\xaa\xdf\xf2\xd4\xc3\xd2\xfb\xa7\x14\xd9\x55\x12\x62\x5c\x9f\xd7\x44\xd5\x61\x1d\x86\xe2\xc0\x6f\x23\x4f\x3c\xef\xd5\xf5\xe8\x8f\xae\xb8\xda\xb4\x36\x50\xbd\x0b\x7e\x6f\xe1\xf4\xd2\xdd\x8f\x15\xc3\x49\x53\xb4\x3a\x72\x64\x2a\x1b\x78\x1b\x09\xc1\x81\xc6\xe1\x3a\x07\x23\x7a\xb8\x7b\x29\x0d\x2d\x72\x87\x21\x9c\xc2\xfd\x13\x72\x47\x50\x80\x28\x3f\x3e\xf6\x81\xa6\x9c\x92\x7b\x6d\x04\x50\x49\x01\x8a\x03\x85\x2d\x7a\x64\xf1\x51\x67\xed\xba\x64\x75\xda\xec\x28\xd0\xb4\x8e\x98\x61\xf8\xef\xc1\x88\x52\x57\x6d\x7d\xf3\xd1\x6c\xe3\xda\x17\xe0\x77\x0c\x8a\x03\x89\xc1\x3f\x75\x95\xb9\x57\x92\xcb\xac\xd9\x86\x91\x6f\x80\x99\x5f\x7e\x67\xed\x33\xe2\x60\xcf\x54\xa1\x47\x12\x73\xf7\x5b\x04\x4c\xa0\xde\x01\x14\x07\xea\x2d\x4e\xd9\x64\xb5\xc5\x7b\x4b\xd2\xe0\x8e\xd9\xe2\x60\xfa\xfc\xc9\x30\x34\x0f\xe9\xbb\x03\xf1\x92\x55\xaa\xfe\x53\x89\x62\x22\x40\x5d\x32\xa8\xcd\xf8\xff\xf1\xcb\xe0\xf9\xe1\xbd\x21\x36\x52\xf7\x2c\xf7\xe1\x77\x09\x87\x7d\xfb\x40\x64\x81\x83\x49\x82\x9c\x3b\xc1\x36\xdb\x86\xab\x6b\x7f\xde\x03\xbf\x0c\x10\x1c\x48\x0c\xec\x41\x54\x1f\x7e\xcd\x78\xed\x32\x27\xf1\x15\xa3\xa4\x5f\xe0\x3b\x33\x61\xe4\xe1\xc5\x9a\xd5\x58\xcc\xef\x74\x8a\x34\x66\x01\x8b\x3b\x14\x07\x76\x23\x5b\x02\x6e\x07\xeb\xae\xbf\xa4\x8a\x92\x3d\x44\x7f\x9c\xe5\x5a\xf4\xec\x7e\xa4\x4d\xd0\x92\xc9\x1f\xa3\xaf\x39\xeb\x66\x2e\xe8\x80\x1b\x09\xc1\x81\xc5\xe0\x9e\xd9\x8f\xbe\x2d\x9a\x47\xbc\x9e\x9c\x4a\xc2\x57\xc8\x71\x81\x9f\x66\x40\x78\x80\x43\xa8\x4e\xbb\xff\x7b\x79\xd6\x07\xb8\xc6\x05\xc5\x81\xc4\x70\x37\x90\xa2\xf0\xde\xab\x97\xb6\xd8\x08\xb8\xae\xc5\x0a\x42\xd9\x9c\x02\x87\x41\x62\x95\x46\x0a\xc1\xde\xc6\xe5\x81\x65\x92\x40\x2a\x10\x28\x0e\x9c\xd5\xdc\xae\xef\xdc\x72\xdc\x2e\x77\xce\xd2\xed\x45\xb1\xaf\x92\xe7\x23\x53\x44\x61\xd3\xef\x98\x3d\x6d\x08\x12\x9b\x23\xcf\x76\xef\xc1\xc4\x00\xf5\x99\x04\x2f\x06\x7f\x5a\x7c\x6f\x3a\x49\x52\x8a\xac\x5f\xa7\x9d\x4e\x91\x5f\x8a\x9f\x69\xfc\xb1\xfa\x1c\xfb\x49\x67\xd1\xb7\xc6\x70\xc9\xa9\xdf\x17\x50\x2f\x04\x07\x12\x03\x2f\x31\x8d\xe3\x40\x79\x43\xb9\x8b\x11\x79\xce\xb9\x70\xd5\xf0\x58\x79\x4d\xe9\xbb\x61\x4d\x74\x8b\xe1\x46\x87\xc1\x62\x42\xe0\x35\x0b\x14\x07\x1a\x07\x5b\xd5\x5f\x5c\x77\xab\x66\x5a\xea\xf9\x6d\x8b\x0b\x67\xd8\x1c\x1a\x14\x85\x56\x93\x15\xfe\x3e\x44\x50\x45\x7f\xa9\x91\x5f\x0f\x98\x9c\x50\x1c\x28\xec\x9d\x39\xd7\x15\x65\xc1\x2a\x57\x31\x0b\xbb\xe9\x6e\xbf\x1a\xb3\xd9\x28\x71\x2d\xb5\x57\x1a\xcb\xa5\x7d\x47\xfe\x18\x36\x3f\x98\x61\x61\xa1\x38\x90\x18\xdc\xd8\x8f\x8c\xeb\xc8\xa9\x3d\x50\x37\xf0\xac\x79\x9f\x25\x7f\xca\x24\xc1\x56\xc3\x79\x7d\x45\xb5\xa7\x26\x59\x69\xa9\xf4\xcc\x11\x16\x16\x8a\x03\x97\xd4\x2b\xb1\x50\xc2\x56\x57\xc4\x73\xeb\x6a\xe8\x54\xf2\xbf\xa4\xcf\xd6\x8c\x8f\xbb\x6c\xaa\xae\xe5\x5d\x2e\x4c\xf7\xec\xd3\xff\x02\x13\x03\xd4\x07\x2c\xbc\x18\x28\x89\xb3\x12\xef\x33\xfc\x7a\x48\x2c\xd1\x3d\xc6\xa4\xd6\x98\xf7\x36\x8a\x28\x9e\xbc\xeb\xa5\xd7\xdd\x15\x63\xaa\x76\x8d\x34\xa0\xa8\x13\x14\x07\x12\x43\xcc\x68\x50\x42\xb3\x9f\x8b\xc8\xef\x39\xe2\xa4\x47\xe2\x04\x8e\xd9\x5d\xfa\xcc\x71\x8e\xee\x96\xaf\x94\xa6\xed\x05\xe7\x59\xb4\x61\x61\xa1\x38\xd0\x38\x90\x18\xe3\x21\xb6\xe5\xc7\x44\xf9\x7f\xef\x98\xe7\xd9\x63\x27\x4d\xf1\x5e\x42\x50\x97\x50\x75\xdc\x7c\xa0\x5d\xf7\x76\x51\x0b\xc8\x13\x0e\xc5\x81\x0f\x38\x03\x04\x65\x8e\x1c\x39\x29\x73\x59\xfc\x25\x6f\x63\x62\x3b\xdb\x6d\x1a\xca\xe4\xd9\xa2\xd2\xbf\xbd\xb6\x3b\xc3\xd8\x23\x04\x8c\x1a\x28\x0e\x24\x86\xb0\x82\x08\x62\xec\xf6\xe7\x3a\xa2\xe7\x9e\x13\x58\x77\xda\x6b\x90\x9e\x61\x90\x89\xad\xf6\x8a\x55\x6e\xbd\xf4\x1e\xc5\x88\x01\xee\x29\x40\x71\xa0\xde\xfa\x6a\xf6\x2c\xb1\xf1\x9c\x49\x5d\x3f\x78\x56\xf3\xa4\x64\x1e\xc1\xe2\x87\xd0\xb8\x69\x4e\xcb\x50\x7c\xd6\xe8\x00\x02\x45\xf4\x2d\x60\x4d\x43\x1d\x2a\xc2\x6a\x4d\xc3\x59\xd3\xd1\xb8\x7a\x3c\xf8\x16\x56\x1a\x8a\x73\x8f\xea\x2f\x08\xb9\xe4\x0d\x7d\xac\x82\x48\x54\x0e\x2a\x4d\x95\x15\x3f\x72\xf9\xb1\x62\xfd\xfb\xd1\x0b\x9c\x35\x6d\x8c\xd2\xc9\x27\x86\x23\x41\xec\xd5\xb7\x8c\x50\xac\x66\x9c\x83\x2f\xa5\x29\xe0\x3b\xcb\x8d\xa6\xf3\x75\xef\x9c\x8d\xa1\x4a\xfb\xdf\x9b\x84\xb3\xa6\x25\x68\x7e\x86\x8a\x94\xb4\xac\x0d\x7f\xc8\xde\xb7\x62\xbf\xe2\x9b\x7a\xe8\xee\xf4\x5e\x3a\xa7\xd9\xee\xd4\x7a\xd9\xa4\x4b\xdb\xec\x7f\x73\xda\x03\x35\x96\xf0\x53\xd2\xb7\x37\xf2\x3b\xf5\xd2\x94\x87\xcc\xfb\x01\xef\x27\xa5\x41\x79\x84\x95\xdf\xf0\x57\xee\xee\x24\xd8\xf8\x3c\xe4\xb2\x9d\xcc\x88\x84\xc9\x06\x8a\x03\x4d\xc9\x07\x68\xfe\x84\xf1\x44\x9c\x22\x44\xeb\xf9\x4b\x9a\x3a\x3a\x72\xbb\x3e\xde\xb7\x7a\xc5\xc1\x99\x96\x57\x0f\x3f\x14\x55\x07\x03\xf5\x2c\xa0\x38\x90\x1a\x2b\x82\x23\x3d\xf4\xb4\xba\xba\x5f\xdf\x59\x27\xd9\x36\x95\xc8\xd6\x44\x43\x6c\x4c\xdd\x3f\xf7\xac\x0e\x34\x9f\x09\x18\x6c\x04\xca\xb7\x41\x71\xa0\xb0\xec\x72\xbb\x0a\xb9\xf6\xab\xa5\x1a\xb2\xe6\x76\xee\xb2\x8f\x0b\xa5\xcd\x36\x9f\x16\xcc\x6e\xa9\x96\xe5\x4f\xb5\xb8\x09\xbb\xfd\xff\xb7\x16\x10\x1c\x68\x4a\x56\x20\xba\x21\xa4\x66\xc5\xec\xe4\x56\x0c\xa6\x1e\x60\x3a\xe8\x87\x47\x32\xaa\xcd\x90\x14\x2a\xa0\x92\xad\x60\xe8\x53\x62\x02\x0f\x65\xa1\x38\xb8\x7d\xe6\x9e\x40\xce\x3c\x7a\xc3\x7d\x9b\xc3\xd5\xe7\x9f\xd9\xf1\xab\x30\x4f\xda\x11\xe2\xdb\x1a\x29\x19\xe8\xf2\x6a\xdb\xa7\xf8\x60\xbf\xcf\x50\x2a\x87\x17\xc3\xb7\xf6\x93\x40\x62\xd4\xf5\xb5\x25\x3a\x8f\x56\xa5\xba\x59\xd7\x6d\xed\x40\x11\xc4\xdf\x3d\x11\x7a\x71\xaf\x09\x77\x87\xda\x80\xdb\xdc\x50\x1c\x48\x0c\x55\x3a\x4f\x44\x54\x34\x55\xbc\x64\xc2\x3b\x3d\x14\x3e\xc6\x21\x6e\xb7\xfa\x75\x18\x5f\x9d\x99\x09\x17\x5a\x17\x54\x0a\x86\x22\xc1\xc2\x42\x71\xe0\x6d\xbc\x4c\x4e\x01\x7d\x8b\xca\xc5\xb1\x69\x76\x89\xfc\x68\xf1\x0f\x04\xb2\x3b\xe7\x89\x39\x32\xba\x3f\xfc\x0e\x5a\x46\xe2\x17\x80\x7c\xe9\x50\x1c\xf8\xae\xe2\xd7\x26\x01\xbc\xc1\x57\xaa\xb7\xe9\xda\x6c\xbc\xfc\x86\x6b\x31\x52\x5c\x71\xdd\xa9\x2d\xa7\x2c\x42\xed\x58\x52\xbc\xa8\x81\xc0\x5d\x45\x08\x0e\x24\x86\x3d\xae\x18\x46\xd1\xfb\x51\xb3\xb5\x59\x2f\x9f\x54\xf2\xae\xae\x5c\x59\x1b\x09\x0f\x9a\xbf\xf8\x1e\xc3\xc5\xca\x1e\x71\xb1\xf4\x0a\x78\xdf\x00\xc1\x81\x7a\xfb\x29\x65\xd8\x89\x41\xc4\xc1\xb6\x34\xc9\x77\x84\x5d\x56\x24\x99\xed\x45\xe8\x23\xff\x4d\xf5\x27\x1b\x03\xb2\x0f\x7f\xd0\xf1\x08\xc0\xc4\x00\xf5\xfb\xf3\x7f\xdc\x30\xa5\x31\x64\x20\xbc\xe2\x0e\xa6\x73\x3b\xa6\x7c\xcf\xb5\xc0\x2f\x23\xfa\xf5\x2a\x9c\x88\x51\x91\x0e\x5b\x3e\xeb\xda\x57\x06\x48\x91\x0d\xc5\x81\xc4\xd0\xce\xb3\xd1\xde\x9a\x8d\xc3\x20\xb5\x60\x12\xe3\x6d\xb7\x38\x20\xf2\x86\xb1\xc4\x5c\x0f\x3d\x68\x8b\xa8\x04\x9f\x99\xf1\x23\x03\x2c\x2c\x14\x07\x4e\x8b\xd6\xaf\x8f\x32\xc5\x47\x91\x20\x88\x4f\xa2\xf5\xd2\xe4\x9b\x5d\xec\xca\x37\x9d\x85\x1b\xd3\xbf\x89\x25\xd2\x01\x6e\x3c\xce\xc0\xd9\x14\x14\x07\x0a\x8b\x8c\x95\x19\xfd\x04\xd7\x4b\xf8\xc9\x97\xcd\xa1\x40\xf2\xfc\xec\xbf\xb1\xd5\x39\xc3\x7d\x2b\x6d\x87\xa1\x2d\xa2\x2c\xa7\x08\xc0\xf5\x07\x28\x0e\x24\x86\x26\xd2\x70\x03\x35\x5f\xe6\xed\x4d\x6b\x19\x2b\xfa\xa6\x17\x7f\x69\xab\x56\x6a\x46\x10\xbf\x71\x0a\x17\x45\xbc\x45\x99\x5e\x03\x4a\x4a\x41\x71\xa0\xde\x1e\xdc\xe4\xb0\xb8\x13\x37\x58\x0b\xa2\x19\xa8\xdf\xa3\x45\x56\x65\xa3\x0f\x19\xd9\xbf\x97\x60\x17\x12\xec\xeb\x29\x7a\xdc\x7f\x05\x13\x03\x94\x19\xf9\x7f\xd4\x7d\x40\x55\xa1\x29\x67\xf1\xaf\x8d\xfe\xa2\x7c\x6c\xe4\xa6\xe7\xb5\x99\x44\xd1\xdf\x4e\xc1\xcc\x4e\xf8\xd5\x57\xfa\x03\x03\x63\x23\xac\xc3\x50\x1c\x48\x0c\x6e\xdd\x9a\xaf\x91\x0a\x6c\xef\x77\x88\xbd\xd0\x68\xcd\x6f\x75\x98\xf7\xf9\x96\xd3\x2c\x92\x37\xa5\x7d\x7f\xb3\x9e\x49\x44\xf4\x19\xb0\x83\x85\xe0\x40\xe3\x30\x8b\xb5\xa7\xff\xc1\x58\xbe\x9f\xb0\xce\x68\x22\x6a\xf5\xb2\xbd\x12\x99\x0c\xb5\xce\xe3\x7e\x9a\x65\x22\xd9\x7e\x5c\x56\x4c\x00\x2c\x2c\x14\x07\xce\x77\x93\x9c\xa5\xe4\xed\xa1\xb3\x4b\x93\x72\x57\x7b\x25\xe7\xa0\x06\x2d\x37\x6a\xdc\x7d\xe5\xc9\x73\x2e\x15\x7d\xb7\x5d\xde\xb7\x40\x15\x21\x28\x0e\x24\x06\x52\x0d\xa1\xf9\x8d\x93\x4a\xee\xa1\xe2\x6a\x06\xb6\xce\x63\x69\x5b\xec\xec\x9c\x6e\xfd\xfb\x19\x52\xdc\x98\x54\xab\x41\x6a\xa7\x80\x35\x2d\x79\xfd\xb1\xd8\x1e\x23\x5b\x50\x4a\xc0\x60\x76\xcf\xd4\xe0\xa6\x60\xbc\xe9\x87\x99\x07\x3f\x5d\x71\xcb\xec\x87\x2b\x79\xba\xa1\xff\x5a\xd3\xad\x57\xf7\x4e\x9e\x7a\x51\xc7\x94\x7f\xdc\x2b\x0c\x7b\x4e\x22\x25\xf8\xb4\xc7\x8b\x39\x82\xf5\xc3\xa6\x20\xe1\x23\xd6\x75\x56\xf4\xff\xa0\xb7\xb5\xcb\xe3\x77\x5f\x21\x09\x97\xe0\xcc\x3e\x36\x8d\x5a\x88\x4d\x97\x4d\x49\xb3\x18\x29\x1c\xf2\x34\xf1\x0f\x0a\x55\x8e\x94\x01\x59\xd3\x50\x91\xe1\xad\xe9\xf1\xe1\x10\x86\x6d\x6d\xeb\x53\x1b\xb7\xa3\x83\x8c\xc0\x0b\xbf\x77\x6f\x91\xc8\xee\xb9\xf2\xc6\xf6\x45\x38\x27\xcf\x20\x45\xb7\xfd\x07\xe5\x31\x40\xc0\x65\x52\x79\xb0\x70\x56\xae\x65\x7c\x3c\xb9\xd3\xb1\x35\x52\x6a\x95\x24\xa5\x70\x6c\xf2\x97\xc6\x4f\xd8\x3d\x24\x0d\xb0\xa6\xa1\x62\xc2\x6a\x4d\x83\xad\x69\xef\xa7\x62\x69\xe8\x61\xc7\x17\x57\xf4\xb2\x03\xcc\x42\x1a\x3b\x08\x71\x56\x87\xfd\x35\xf9\x12\xf5\x02\x52\x9b\xa4\x25\x59\xfa\xff\xbc\xf5\x6b\x85\xb3\xa6\x2f\xae\x68\x1d\x96\xcb\xce\x0a\x78\x3f\xa7\x8e\x2b\x52\x14\x6c\xce\x67\x4e\xea\xb7\xe2\xb8\xbb\x7a\x36\x4e\x8c\xe9\xc4\x75\x12\xff\x7b\x93\x70\xd6\x34\x55\xad\x97\xf8\xa3\xac\xd8\xb8\x54\xbb\x47\x2b\xae\xd1\x1d\x59\x3c\xb9\x0d\x55\x34\x27\x3e\x75\xdb\x05\xf9\xb7\x97\x6d\xfc\xe7\xff\xde\x24\x9c\x35\x7d\x68\x9c\xf4\xe9\x87\x07\x9d\x4b\x1a\xdf\xb1\xbb\x77\x4f\x94\x1d\xde\xa1\x57\x2a\x07\xba\x72\xb2\x6b\x1b\x05\x76\xbe\xe1\x0b\xdf\x7f\x6f\x12\xce\x9a\xe6\x0e\x3b\xdd\x18\x0b\xf9\x63\x66\x79\xb2\x8e\xd7\xe2\xb1\x30\xce\x2a\xe0\x81\xa7\x81\xfb\x98\x81\x31\xd9\x45\x81\xbf\xea\x37\xea\xbf\x37\x09\x67\x4d\x0f\xd2\x9f\x58\xb4\x73\x67\xd8\xb7\x78\xf2\xb9\xb3\x13\xc9\xb5\x44\xe0\xe0\x0b\x51\xb2\x20\x27\x3c\xa4\xd7\xe5\x11\x12\xe9\xc8\xff\xf7\x26\xe1\xac\x69\xcb\x3b\xc2\xed\x55\x11\xee\x83\x07\x9c\x25\xa5\x6e\x6f\x51\x05\x42\x9f\xe7\xee\x1d\x65\xc9\x7f\xd2\x72\x79\x72\x26\xfd\x8a\xa4\xf9\xdf\x9b\x84\xb3\xa6\x93\x2b\x36\x39\x89\x88\x0c\x4d\x7f\x0a\x97\x94\x26\x20\x5e\x51\xff\xd0\x56\xc5\x8b\x57\xbc\x94\x9a\x48\xe5\xb7\xaf\x9e\x16\x32\xf9\xdf\x7c\xac\x40\x4d\x45\xf8\x55\xc8\x7a\xf6\x4b\xdd\x9a\x71\xa4\xab\xfd\xae\xaf\xce\xc1\x55\xa2\x77\x29\xff\x7a\x8d\x4a\xc5\x67\xfb\xeb\xac\x35\x83\x40\xec\x5b\xa0\x20\x18\x14\x07\x5a\x85\x68\xa9\x16\xf4\x0c\x1f\x33\x27\xf0\x7d\xe1\xa4\x12\x33\x8a\x2d\x60\x30\xa4\xec\x24\xac\x58\x52\xb6\xbf\x35\x26\xa0\x6a\x5f\x00\xde\x46\x42\x71\xa0\xe5\x82\x08\x01\xbb\xed\xf2\xd0\xf9\xed\x0a\x7a\x96\x4d\xc6\x77\x3e\xe4\xe4\x04\x75\xc9\x3d\x85\x37\x23\x75\x4c\xa5\x88\xd3\x64\x16\x40\xc1\x19\x28\x0e\x14\xb6\x55\xfc\xcd\x88\xe6\xd3\x5e\x63\xb1\x84\x59\x5c\xf6\xf3\x92\xcb\x68\x1f\x5d\x6b\x83\xa5\xed\x54\x1f\x5f\x7f\xc3\x07\xe5\x7e\x80\xaf\x05\xc5\x81\x53\x1b\xbd\x47\x77\x2a\xf9\x9c\x9b\xb4\x1d\x23\x1f\xfd\xac\xf2\xa5\x9d\x2c\xda\x57\x59\x8f\xbb\x63\xcb\xdf\xbe\xdf\x8f\x71\xa6\x1c\x06\xbe\xd8\xa0\x38\xf0\x31\xb3\xc1\x77\xd4\xae\xd5\x3b\x9e\xef\x51\x3b\x4e\x84\x3e\x59\xef\x59\x67\xd0\xa0\x5e\x1f\x9f\x33\x97\x22\xe0\x15\x45\x91\x3c\x39\x81\x6d\x49\xa0\x7e\x24\xff\x8f\x2f\xd7\xcb\xb3\xee\xd3\xcf\x06\x08\xad\x5f\xc7\x1f\x0c\x3d\x74\x25\x75\xe1\x70\xe3\xf6\x9a\x42\xcb\xc5\xfd\xae\xea\x7f\x19\x8e\x04\xec\xd3\xa1\x38\xd0\x38\x94\xf0\x4b\xce\x54\xa0\xbd\xd5\x54\x6f\xe0\xa9\xec\xd0\xdb\xd9\x22\xa0\xa1\xe5\xc6\x0c\xec\x17\x1c\x54\xdd\x11\x0e\x7d\xb3\x1b\x0a\xbc\x75\x87\xe0\x40\xe3\xc0\x86\x19\x95\xf2\x32\xaa\x4d\xf6\xa5\x2e\x71\xb3\x2a\x1e\xaa\xd4\xb9\x2f\xf9\xee\x51\x6b\xb8\x53\x92\xa7\x80\x0f\xc2\x18\x26\xf0\xda\x10\x8a\x03\xa7\x78\xd2\xdd\x14\xc3\x72\x1e\x30\x7d\x91\xfa\x39\x94\xe5\x89\x9c\x55\x69\x28\xfe\x54\x8e\x3c\xd3\x43\x82\xce\xf1\xe2\x51\xf5\x3e\x20\x3f\x0c\x14\x07\x1a\x04\x2a\x44\x5a\x92\xc1\x83\xd9\x8d\xb8\xfa\x71\x23\x96\x4c\x7c\x6d\x85\x07\x8f\x0a\xcf\x55\xaa\xee\x6e\x18\x3c\x9f\x4d\xbd\x79\xfb\x0e\xb8\x02\x0e\xc1\x81\x7a\x3b\xdd\x90\x64\x61\xaf\xce\x43\xb5\x4c\x9a\x17\x8a\x25\xc5\xf3\x60\x96\x4b\xbf\xc1\xab\x44\xff\x0e\xdf\x55\x32\x55\xa5\x8f\xf8\x13\x98\x18\xa0\x96\x2f\x78\x31\x8c\xbc\x4c\x21\x44\xbd\xb0\x3b\xd6\xd7\x66\xfc\xc1\x58\x9b\xd6\xf3\x58\x14\x83\xea\xe0\xed\x00\x4e\x06\xff\xd4\x8f\x8e\xcb\x5f\xb9\xb0\x0e\x43\x71\xa0\x71\x50\xa5\x17\x29\x78\x42\x27\x8c\x2a\xed\xf6\x76\xe5\xe1\xf6\x32\xcd\x47\x46\x62\x0d\x53\x16\x8c\x11\x37\x77\xb2\x25\x8e\x72\x1f\x1f\x58\x58\x28\x0e\x7c\xcc\x1c\x7f\x71\x34\x2d\x88\xa9\x3f\xa8\xbd\xa4\x29\x93\xa2\x71\xf9\xe3\x4b\x19\x6b\xac\xcb\xd4\x9f\x2f\x2f\x1e\x47\xb0\x85\x90\x03\xa7\xd7\x50\x1c\x28\xec\xd1\x18\x5f\x1c\x1f\x57\x6c\xa7\x8f\x74\x6d\x16\xdd\x74\xe9\x1d\xdc\xc3\x7c\x8a\xf8\xda\x54\xd4\x6b\x63\x77\x0f\xc9\x22\x4b\x60\x0a\x43\x71\xa0\x41\x18\x4f\xa0\x3b\x69\xdc\x73\x56\x53\x17\xb1\x21\x54\x57\xe1\xd2\x7d\xdb\x7d\x1d\x5d\x4f\x95\x63\xb9\x7c\x91\xcf\xbf\x4d\x5a\x11\x07\x58\xd3\x10\x1c\xd8\x8d\x64\x54\x22\xb4\x7c\xcb\x8a\xed\xe7\x75\x1a\xe0\xf6\x45\x8d\x6b\x2e\x6c\xca\x56\xc6\xf4\x96\x47\xa1\xd2\x80\x33\x7e\x64\x0b\x1f\x78\x1b\x09\xb1\xb1\x80\x17\xc3\x2c\xbd\x0d\xf1\x3c\x35\xff\x2f\xb5\x96\xad\xbe\xfb\x01\x4e\x41\x2f\x99\x43\x84\xb4\x9e\x5c\x6c\x7c\x7b\xd7\xd3\x42\xdc\x52\x0e\x24\x5b\x86\xe2\xc0\x37\xec\x8b\xbf\x9e\x32\xe6\x9d\xeb\xc9\x05\x27\x72\xe0\xa7\xce\x24\xcf\xd1\x32\xf7\xbc\x41\x56\x24\xa9\x60\x4c\xf7\x4e\xd3\xea\x44\x01\x7e\xcf\x21\x38\xd0\x38\xd0\xfd\x25\x49\x41\x6b\x3b\xe8\x56\xd3\x8c\x13\x7a\x84\x40\x15\xaf\xd9\xf1\x49\x69\x4e\x37\x29\xd9\xdc\x55\x0e\x59\xe3\x33\xf9\x3a\x2c\x2c\x14\x07\x0a\x7b\xf1\x86\x80\x98\xb3\xe6\x9a\x5a\xd1\x4c\xdb\xee\xef\xd3\x00\xfd\x53\x8f\x67\x63\x3f\xbf\x5d\x2d\x74\x39\xb4\x3b\x28\x77\xd3\x00\xd6\x34\x14\x07\x1a\x84\x77\x54\x37\xc6\xed\x17\xbf\xcd\x28\x34\xb9\xe9\xf4\xb1\xb2\x87\x88\x96\xd3\xcf\x06\x3f\x2e\xdd\x13\x7b\x6a\xd4\x13\x19\x5c\x60\x0e\x0b\x0b\xc5\x81\xab\x54\xa4\x58\xa4\xd6\x8a\x1b\x69\x7c\x47\x98\xfc\xee\xc5\x68\xaa\xa1\x77\xa2\x1c\x24\xe7\xf2\x64\x95\x7b\x29\x3d\x67\xaf\xb9\x38\x15\x26\x06\xa8\x2d\x1f\xbc\x18\x70\x87\x78\xef\x36\xd9\x2a\x3a\x04\xe1\x87\xe0\xa5\x8d\x18\xfe\xc6\x56\xd1\x7e\x60\x55\x17\x65\x87\xac\xd3\xd1\x20\x4b\xa2\xa4\x00\xeb\x30\x14\x07\x2e\x22\x3a\x84\xb5\xf4\xe9\xa4\xad\x46\x97\xeb\x67\xa1\xbe\x41\x92\x9d\xed\x9f\xb6\x99\xfa\xef\xb7\x9b\x4e\x1e\x5e\xca\xa5\x8b\x5d\xc0\x35\x10\x28\x0e\xfc\x7b\x3e\xbb\x49\x33\xf8\xca\x25\x8a\xcc\xde\x9b\x0d\x49\xd7\x7d\x4c\x87\x7f\x5a\xfe\xf5\x97\x2d\x4c\x75\x45\x8e\x91\x15\x6a\x15\xa0\xc2\x15\x14\x07\x0a\x1b\xdd\x93\x62\xc9\xa1\xee\x2b\xb3\xd8\x61\xf0\xa8\x94\xf3\xcf\x66\x99\x07\x53\xe4\x7e\x30\xeb\x42\x73\x32\xbe\xef\xdf\x70\xec\x64\x58\x58\x28\x0e\x34\x08\x28\xee\xca\x6d\x0e\x58\xc4\xc6\xf3\x67\xf8\xe9\xab\x82\x73\x33\xfd\x04\x38\x5c\xa8\xbd\xa2\xae\xfe\xd5\xdf\xa4\x23\xbc\xce\x81\x65\x02\x8a\x03\x8b\xe1\x6e\x35\xcd\x3c\x83\x6b\x4a\x07\x43\xc6\xdf\xe1\x7d\x5c\xca\x97\x4f\x02\x63\x4b\xf4\xcc\x7b\x55\xb1\xd9\x3f\xac\xb7\x1b\x87\xc1\xc4\x00\xb5\x19\x87\x17\x43\xa9\x88\x8b\x67\x08\x15\xe2\x0b\x3d\x1b\x81\x2c\x3d\x9c\x8f\xa8\x7f\xdf\xee\x94\x73\xa8\x44\x76\xd5\xef\xb4\x63\xbc\x69\x5b\xb8\x85\x75\x18\x8a\x03\xa7\xfa\x67\x79\xd1\x61\x83\xf4\xa3\x2c\x40\xa8\x4a\x6f\x3e\xfc\xfa\x08\xe5\x74\x3b\xcc\xa2\x54\x8a\xed\x66\x94\x9d\x5d\xc5\x77\x75\x0e\x16\x16\x8a\x03\x8d\x43\xed\x33\xa4\xa9\x21\x5a\x71\x76\x3d\xa5\xdf\xc4\x31\xec\x2b\xf1\x4f\x35\x23\x0a\x8b\xd8\xdb\x6e\x6d\xbe\x78\x23\x4e\xb5\x95\x03\x49\x82\xa0\x38\x50\xd8\xf8\x97\x0e\x07\xea\xb6\xdf\xa4\x50\xa5\xc6\xfe\x3e\x2d\xbb\x97\x42\x4d\x9e\xea\xb7\x61\x87\x3c\xa5\xcb\x88\x85\x8c\x2d\xe5\xd6\x02\x0b\x0b\xc5\x81\x6b\x2c\x7b\x50\x86\x54\x5d\x55\x63\x75\xbf\x79\xb5\xba\xdc\xa5\xc1\xbb\x1e\xfc\x88\x6a\x99\xfe\xd3\xdd\x9c\x1b\xfd\xae\xa4\xd8\xe4\x66\xe0\x4c\x0b\x82\x03\xf5\x56\x19\x79\xb8\x87\xe7\x28\x62\x96\x75\x9b\x9f\x9e\x33\x8a\x82\xd4\xa2\x4a\x9e\x50\x22\xf7\x71\x28\xcf\x7b\x42\x0a\x3c\x11\xa9\x59\x98\x18\xa0\x3e\x93\xe0\xc5\x40\xa5\x14\x4d\x9a\x39\xba\xb0\xee\x5e\xa1\x5e\x88\x25\x89\x80\xf0\xed\x41\xee\x8b\x7d\x5b\x0d\x36\x4e\xf7\xf3\x33\x8b\x89\x6c\xe0\x41\x1a\x14\x07\x1a\x87\x81\xdd\xfe\x58\xf7\xdf\x77\xe3\x35\xa8\xca\xf7\x73\xff\x1c\x75\x90\x2f\xd7\x1f\x54\x8a\x66\xa5\x19\xc6\x25\x72\x0e\x87\x24\x01\x19\x11\xa1\x38\x70\xe9\x16\x66\x9c\x59\x3e\x1e\x5b\x99\x7e\xda\x54\x39\x8d\xf6\x4b\x83\xf9\xe1\xc4\x6a\x7b\x93\x2f\x2d\x62\x1a\x41\x45\x35\xae\x58\x80\xc9\x09\xc5\x81\xc2\x26\x87\x52\x91\x32\x0a\x44\xe8\x89\xef\xd1\x8c\x64\xd9\x3d\x2d\x26\xa8\x1f\x4b\x77\x6f\x98\xb0\xec\x96\x79\x6e\x2f\x11\xfb\x00\x78\xc5\x01\xc5\x81\x06\x81\x4c\xa8\x81\x78\xc9\xc3\x22\x47\x74\xff\x21\x85\x03\xae\x16\x4b\x1c\xc6\xc3\x0a\xee\x4e\x5b\xcc\x3f\x6f\x3b\x25\x90\x87\x08\x1e\x03\xcf\xc6\x20\x38\x50\x6f\x03\x7c\xe3\xc5\xdb\x79\xa6\x02\xec\xe9\x04\x55\xc5\xdc\x47\xbe\x48\x11\x79\x93\x1f\x86\xdb\x87\xbe\x8c\xfb\xc3\xd6\xf1\x2e\x97\x10\x26\x06\xa8\x0f\x58\x78\x31\x5c\x2a\x19\xb5\x61\xcb\x8c\xd0\x76\x7e\x55\x90\xf6\x4a\x9c\x3e\xf3\xe3\x41\x39\x3d\x64\xcb\xfd\x59\xcb\x43\xa7\xed\xff\xf9\x10\x1f\xd6\x61\x28\x0e\x34\x0e\x83\x49\x7b\xa3\xef\xde\x33\xba\xe4\x7d\xdf\xa8\xb7\x14\x26\x50\xf6\xe0\x79\xae\xae\x50\xc4\x3d\x96\x45\x58\xac\xf8\xcb\x2b\x19\x48\x1a\x0f\xc5\x81\xc6\xc1\xfc\xd5\xd8\xb7\x3a\x7a\x47\xa9\xc3\x61\x11\x2e\xbc\x90\x32\x36\xf3\x2b\x7e\x5b\xd7\x65\x11\x6c\x9c\xd6\xd0\xe0\x9b\xed\xb1\x6d\x58\x58\x28\x0e\x14\xf6\x25\xbb\xe4\xc4\x4e\xaf\x3f\xf9\xe6\x9f\xcc\xaa\x36\xe5\xa9\x9f\x83\xd5\x1a\x06\xbd\xd5\x7f\x0c\x1d\x47\xe7\xf8\xb8\xbe\x5c\x76\xc0\xc2\x42\x71\xa0\x41\xc0\xb6\x68\x78\x68\x50\xa6\xc3\xd4\x36\x95\x7a\xe3\x47\xb1\x1d\xbf\xa2\x8b\xf7\x36\x99\xab\x5d\x52\x11\x13\x61\x7d\xda\x3c\x17\x30\x6a\xa0\x38\x70\x92\x20\xa4\xf8\x26\xad\x8f\xa4\xaa\x4b\x3e\xa3\x62\x82\x76\xaf\x56\x19\xea\xf8\x59\x42\xca\xe3\xb7\xd8\xda\xf0\x8c\x5c\x0c\x6d\xd3\x00\x6b\x1a\xea\x50\x11\x56\x6b\x1a\xce\x9a\x9e\x31\xae\x23\xfa\x4a\x7d\xf5\xbe\xc6\xbb\x42\x8c\xda\x5c\xec\x61\xd7\x75\x68\xed\x38\x4a\x9d\xf8\xba\x0a\x0b\xc7\x73\xef\xe9\xb9\x7f\x3f\x7a\x81\xb3\xa6\xdb\x5c\x8f\x88\x32\x55\x93\x2b\x0b\xd8\xa8\x7f\xeb\x6f\x3b\x64\xa3\xfc\xf2\xbe\x58\x0a\xb7\xcf\x38\x8c\x53\x2c\xe4\x4f\x0b\x54\xf8\xf7\x26\xe1\xac\xe9\xdc\x0c\xcc\xeb\x3a\x06\xf3\xe0\xbf\x6d\x14\x99\x02\x6a\x06\x0c\x1b\xdd\xf3\x6e\xc9\x77\xd2\x8e\x94\xdf\x7d\xa1\xae\x50\x12\x1b\xff\xdf\x9c\xf6\x40\x8d\x25\xfc\x94\x8c\x97\xbc\xc3\xf6\xc8\xf9\x1e\xe7\x98\x69\x9e\xac\x2d\x97\xa1\x9a\x9b\x52\x83\xe8\x13\x92\xc0\xa0\xd9\xfc\x4c\x89\x66\xc1\x8f\x80\x35\x0d\xc5\x81\x9f\xc3\x4d\xbd\x4a\xbe\xfa\x60\x3b\x4f\xf3\xca\x75\xec\xcb\xd6\x81\xd3\x35\xa9\xe9\xd9\xbd\xa2\xe6\x4c\x77\x83\xaf\xab\xd9\x83\x39\x40\x7d\x22\x28\x0e\xa4\xc6\x37\xcf\xd9\xcb\xd4\xa6\x8b\xaf\x8a\xf4\x84\xdf\xa3\x5d\x3f\x79\xd0\x5c\xf3\x31\xad\xda\x74\xf4\xde\xc3\xdd\x89\x54\x55\x0f\xe6\x87\xb0\xb0\x50\x1c\x28\x6c\x8f\xf2\x37\xeb\x35\x84\x0f\x9c\x61\x68\xcc\x55\x36\x3b\x22\x03\x13\x96\x45\x86\x4d\x8f\xc8\xef\x23\x6d\x77\x0c\x7c\x0e\xec\x00\x1e\xca\x42\x71\xa0\x41\x90\x1c\xef\xb9\x21\xd2\x7a\x8f\x14\x2e\x1d\x94\x44\x82\x28\xe9\x10\xea\x26\x6a\x90\xf9\x77\x58\x10\xc5\x99\x1f\xe9\x52\xe7\x36\x05\x16\x16\x8a\x03\x67\xf4\x7b\x46\xfb\xb2\xcf\x52\x36\xcb\x11\x7b\x50\xcb\x4a\x72\x52\x62\x49\x94\x98\x92\x2a\xf3\x09\x65\x97\x82\xfc\xb4\xb1\xfb\x95\x31\xec\xf7\x19\x4a\xe5\xf0\x62\xa8\x32\xea\xf9\xb1\x85\x69\x56\x99\x25\x44\xbd\x54\x4b\xfa\x73\x42\xba\xa2\x58\x36\x53\xea\x86\x83\x37\x8f\x22\x7c\x2d\x5b\x2d\x11\xf0\x90\x21\x38\xd0\x38\x30\x8e\x71\x0e\xf2\x28\xa4\xbc\xb9\x53\x63\x8d\xa5\xbb\xc5\x9e\x66\xf9\xf0\x77\xb9\x9c\x19\x16\x6f\xe5\x92\x75\xdb\x82\x75\x3b\xf0\x10\x01\x8a\x03\x5b\xf4\x01\x8c\xf3\x19\xde\x47\xe9\xc3\xef\x04\xdf\xdb\x35\xb6\xbd\x60\x9f\xe6\xab\x3b\x19\x08\xd1\xc4\x53\xa6\x99\x1b\x27\x30\xb4\x02\x6e\xff\x41\x70\xa0\xb0\x5f\xa3\x04\xe2\x9c\x63\x9f\xde\x21\x48\xdc\xea\xfe\xfe\x89\x16\x8f\xcd\xe9\x6b\x69\xee\xce\xb4\x5a\x8f\x5e\xc0\x5a\xc9\x5a\x26\x90\x09\x0b\x8a\x03\xfb\xf3\xf4\xdb\xb7\xb1\x87\xd9\x44\x57\xd4\x4a\x7c\xcc\x19\x5d\x5c\xf7\x9a\xe8\xc6\x13\xb2\xcb\x51\x8f\xb6\x99\x85\x10\x06\xe4\x81\x1a\x76\x50\x1c\xa8\xb7\xef\x4c\x5f\xf9\x51\x6a\x7b\x2c\xbe\x32\x88\xed\x6e\x8d\x3f\x0c\xd6\x4f\xba\x13\xa6\x40\x36\xbc\xa3\xf2\xb4\x4a\x7e\xb1\xf3\xd9\x67\x98\x18\xa0\x7e\x7f\xe0\xc5\x10\x53\xee\xc5\xf7\xdc\xbb\x8d\x4e\x99\xec\x09\x51\xa9\xa3\x73\x3d\x3e\xdb\xb9\x9d\x4c\xb9\xa3\xa0\xad\xd0\xef\x7c\x75\xf7\x73\x20\x83\x0c\x14\x07\x1a\x07\x02\x6e\xe7\x96\xba\x80\x29\xe5\x12\xae\xa2\xda\x99\x12\xe1\xd0\x5b\x1f\xe9\xdd\x44\x82\xb7\xba\x71\x62\xb9\x92\x4b\xa5\x89\x40\x3a\x21\x28\x0e\x34\x0e\x0d\xd2\x6f\x95\x02\xfe\x34\xa7\x19\x9e\x7f\xc5\xda\xbd\xfa\x73\xc6\x67\x9b\xf8\xd2\xa0\x2d\xac\x4e\x1b\x1f\x39\xa0\x41\x44\x0e\xa8\xde\x0c\xc5\x81\xc2\x36\x26\xae\x07\xb3\x7c\x12\xbe\xdc\x44\x75\xe6\x29\x88\x68\x9c\x3c\x7c\xb2\x7c\x9d\x8c\x48\x95\x16\x37\xc4\xc1\xaf\xee\x5a\x02\x3c\xa8\x82\xe2\x40\x83\xa0\xe4\xf8\x87\x7b\xa1\x9e\x84\x4c\x2f\x90\x6d\x32\x53\x98\x27\xa7\x2f\x5a\x15\x01\x95\xff\xea\xf5\xd2\x8a\x46\x26\xb5\xac\x2e\x90\x54\x02\x8a\x03\xf5\xf6\xf9\x78\xa6\x9e\xc4\x50\x34\x25\x43\xd0\xc9\x87\x46\xdf\xcf\xcf\x11\xcb\xb5\xe3\x62\x0d\x96\x6e\x9d\x78\x4c\x9c\xb3\x26\xcf\x45\x60\x62\x80\x32\x23\xe1\xc5\xa0\xc7\x3b\x69\xfb\xdc\xa7\xec\x2f\xf2\x72\x5b\x11\x9d\xb3\xd2\x1d\xcd\x5a\x13\x7e\x76\xe3\x48\x66\x35\xa4\xf6\xcf\x02\x2e\xc7\xc0\x05\x5e\x28\x0e\x34\x0e\xf7\xe4\x5a\xf9\xee\x3d\xca\xfb\xf0\x83\x33\xc7\xf9\xb2\x55\x47\x41\xe0\x9d\x0e\xff\xe1\x83\x47\xa1\x88\x75\xb7\x23\xe1\x8a\x02\x40\x15\x7a\x28\x0e\x34\x0e\x66\x4e\x74\x6e\x2c\xf1\x48\x91\x21\x27\x65\x27\xc3\x86\xb1\xd9\xa3\xcd\x85\xa8\x79\xe8\x28\x6f\xec\x11\x6d\xac\xa4\x09\x76\x81\x14\x84\x50\x1c\x28\x2c\xf1\xa7\x53\x65\x02\xb1\xbc\x6c\x51\x8a\x91\x29\x76\xa5\x6d\x66\xc5\xab\x89\x20\x8e\x8e\x9b\x48\x72\x69\x71\x6e\x6a\x64\x5c\xa0\x86\x1d\x14\x07\x1a\x04\x3e\xde\xaa\x6c\x0c\xe9\x38\xe1\x81\x34\x9f\xb1\xdb\x17\x6a\xca\x19\x41\xc1\x52\xe8\x28\x04\xcf\xa3\xcb\x3d\x3b\x65\x68\x69\x26\x01\x6b\x9a\xca\x39\xd0\x88\xa7\x7c\x43\xcc\xca\xad\xeb\x6f\xbb\xf5\xaa\xe3\x71\xad\xc4\x10\x37\xba\x3e\x0a\x6d\x34\xd7\xa6\x1b\xde\xeb\xc0\xff\x5a\xd3\xb6\x0c\x3e\x5f\x6f\x2d\xdf\x99\x6f\xbf\xea\x7a\xa2\x50\x87\xbf\x14\xa7\xdd\x5f\x73\x97\x41\x3b\xb3\x23\xd4\x5b\xc8\xb1\xff\x56\xf0\x3f\xe8\x30\x7a\x50\x7b\xe0\x2f\xcb\xcd\xe5\x77\x3f\x59\x34\x88\xc2\x2d\xef\x60\x06\x0b\x52\xad\x53\x17\x14\x35\xb3\x21\xa1\x8a\x37\xbb\x8b\x8a\x12\x11\xfd\xc7\x9a\x86\x8a\xfc\x01\x11\x03\x64\x4d\x33\x4a\xd7\xa8\x7c\xa6\x9b\x98\x5d\x45\x70\x78\x73\xe3\x3a\x93\xf4\x78\x66\x0e\x33\xad\x56\x65\xb7\x5b\x10\x5f\xa1\x2b\x4c\xf6\xe0\xbf\xc6\xc0\x97\x83\x77\xbe\x08\xfd\x2d\x39\xd7\x75\x4b\x5f\x4d\xd3\x52\xd8\xea\x5c\xc6\x57\xfb\x6c\x58\xbd\x50\x67\xb7\xa7\xf0\x56\xa3\x00\x6b\x1a\x2a\x26\xac\xd6\xb4\x2c\x68\x1f\x46\xb4\xf3\x93\x46\xaa\x3c\x7d\x70\xea\x11\x17\x2d\x35\x1a\xd2\xe8\xa3\xb9\x2f\x0d\xc3\xae\x09\x77\xc6\xbf\x6f\xc4\xd2\xa1\xe8\xcf\xfe\xf3\xd6\x0f\x81\x07\x2e\xd5\x75\xb0\xe9\xdd\x25\x05\x47\x2d\x73\xcc\xe3\x05\x2c\xf3\xa9\x10\xcf\xe5\x82\x80\x9b\xa4\x40\xf7\xd6\xf1\xf7\xec\xdc\x5b\xae\x7d\xff\xde\xa4\x32\xb8\x49\xea\x78\xb5\xc7\x9b\x2f\xa7\x07\x94\xa2\xbd\x19\x2f\x3c\xe6\xca\x6b\x43\x69\xb1\x26\x7e\xa4\x88\xad\xd5\xea\xb3\x5f\x25\x39\x50\xfe\x7b\x93\x7a\x70\x4f\x98\x03\x4d\xc7\x07\x23\x10\xae\xee\xe9\xa2\x45\xdf\x86\x08\xee\xb1\x51\xec\x25\xb0\xe8\x85\xca\x24\x27\x3f\xa7\x9b\x1c\xf4\xf9\x77\xcf\x1f\xc1\x0d\xdc\xa4\x5a\x98\x8d\xf3\xec\x2f\x6f\xf4\x42\x39\x06\x19\x89\x5f\x2f\xb0\x03\xdc\x4d\xe9\xa4\xab\x1a\x59\x78\x48\x8b\x31\x04\xcf\x07\xa6\xfe\xbd\xc9\x38\x70\x93\x4e\x59\xa5\x56\x7e\xec\x91\x82\x89\xdf\xd3\x34\x27\x0b\xa6\x67\xd4\xe4\xbd\x6a\x45\xc3\x0a\x16\x62\xc9\x09\xcc\x72\x47\x45\xff\xb5\x0a\x73\xb0\x24\x42\x19\xb8\x49\xbb\x76\x71\x9a\xfd\x15\x8a\xf2\x2e\xdd\x49\xaf\xa0\x20\xde\xc9\xfa\x81\x57\xf6\xde\xb3\xe1\x5c\x59\x19\x62\x7c\xdf\x0a\x78\xfe\x07\x4d\x36\x82\x9b\x7c\x72\x56\xf8\xae\x29\xff\xe4\xa1\x46\x7d\x6a\x13\xd2\x23\x4d\x86\xdf\x16\xfd\xce\x7f\xfa\xff\x9c\xe9\x6c\x61\xa6\xde\x94\xb5\x7c\xfe\xdf\x7c\xac\x40\x4d\x45\xf8\x55\x28\x58\x8c\xeb\x8e\xbb\x8b\x6d\x48\xf3\x10\x8f\x54\xe8\x4d\x45\xe1\x23\x0a\x5e\xa6\xd4\x47\xef\xaa\x69\x4a\x42\x59\x54\x34\x33\xd2\x60\x3f\xc0\x50\x1c\xb8\x6e\xe4\x40\xfa\x7e\xdb\xed\xe9\x20\xdd\x5b\x45\xf9\x9b\xe3\xd4\x87\x86\xf2\x91\x6a\x6b\xa6\x92\xe9\xb9\xc5\x0b\x57\x07\x7a\x76\x76\xb0\xb0\x50\x1c\x68\xb9\x28\x7d\x8b\xce\x13\x1f\xe1\x6c\x8b\x95\xf2\xc5\x93\x73\x61\xb7\x7b\x7f\x28\x83\x87\x80\x2d\x79\x61\xe9\x3d\xa1\xe0\x89\x58\x79\x16\x70\x0e\x0a\xc1\x81\x52\xa3\xa4\xe7\x2f\x32\x7e\xfc\xb2\x30\x3a\xfb\x6a\xe9\xb6\x25\x4a\x74\x92\xfb\x6e\x05\xf7\x5f\xa7\xd1\x3a\x7c\xab\xa6\x74\x31\x47\x2f\x6f\x58\x58\x28\xee\x83\x18\xe2\x7f\xc3\x96\xad\x89\xa6\x47\x0c\xff\xb9\x49\x7e\x75\xc6\x6f\x8e\x19\x35\xb6\x2c\x2e\x9e\x1c\xca\x51\x95\x3d\x50\x8b\xfb\x98\x61\x5f\x21\x1f\x16\x16\x8a\xfb\x20\x86\xf2\xdf\xb0\x46\xb6\x29\xa1\x1e\xef\x3e\x0e\x46\x7d\x73\x1a\x17\x74\xd8\xe0\x62\x5a\x5f\xb4\x92\x68\xbf\xe4\xdd\xf4\xca\xf2\xf8\xfb\xa9\x11\xc8\xea\x03\xf5\x23\x09\x2f\x06\x74\x97\x72\x0b\x32\xb3\xe1\xcc\x93\x92\x9a\xc5\xb7\x15\x89\x17\x1f\x2a\x1b\x90\xce\x8c\x2e\xca\xdf\x38\xca\x66\x30\x4e\x53\x01\xe7\xe2\x50\x1c\x48\x0c\xe9\x61\x3a\x0f\x73\x0b\xbf\xfa\x5c\xc6\xcb\xec\xb4\x92\x47\xb4\xda\x7e\x9a\xb3\x8a\x7d\x73\x7e\x66\x21\x24\xf2\x03\x59\x81\x13\xc8\xa2\x09\xc5\x81\xc4\xd0\x6e\x89\xcd\xf7\xb7\x36\xc0\x82\x9b\xea\x84\xf5\x03\xee\xef\x43\xa6\xdf\x8f\x2f\x11\x62\x4c\xd2\x54\xca\xa6\x22\x79\xb8\x9f\x49\x00\x37\x32\x21\x38\x90\x18\x56\xbd\x19\x4c\x7b\x05\x79\xd3\x19\xbe\x1d\x6a\xd8\xbf\x14\xe7\x51\xea\xba\xd5\x56\x4e\x64\xd2\x72\xca\xa0\xba\xd5\x25\xfa\x05\x1c\xaf\x42\x71\x20\x31\x9c\xbb\x17\xf9\xa5\xc7\xa8\xa2\x10\x47\x62\xd7\x57\x90\x8d\x51\xb0\xe7\xca\x3e\xbd\x8c\x3d\x71\x6a\x62\x7f\xfa\x3a\xb1\xcf\xb6\x0f\x16\x16\x8a\x03\x89\xc1\x42\x58\x93\xf0\xc9\x34\xd7\x7e\xe8\xcc\xb0\xed\x8b\xea\xb2\x6b\xe6\x69\xfa\x20\xfd\x88\x57\x04\x75\x68\x41\xb1\x77\x05\xd6\x84\x61\x62\x80\x5a\xbe\xe0\xc5\x60\xfc\x9a\x42\xd0\x2e\xcb\xaa\x4e\x66\x37\x9a\x03\x69\xfb\xa7\xfb\x58\x10\xdb\x9e\x4c\xc0\xe7\xeb\x95\xe0\x27\x78\xd5\x17\xaa\xc0\x9d\x75\x28\x0e\x24\x06\xa7\x90\x68\x86\x16\x9f\x64\xdb\x0c\xd4\x35\x1e\xdf\xfd\x6a\xa6\xea\x38\xf7\xcf\xcf\xfd\x1b\x11\x26\xa4\xed\x27\x1b\xab\x52\x80\x34\x0d\x50\x1c\x48\x0c\xef\xa3\x56\x31\x22\x1a\x94\x4a\x7c\xc4\xbd\xc6\xe3\xde\xa8\x88\xff\x46\xc5\xd2\x63\xa0\xca\x48\x7c\xa1\xe4\x19\x7d\x22\xa1\x5a\x06\x0b\x0b\xc5\x81\xc4\xf0\x38\x57\xba\xab\xea\x79\x45\x8a\x8b\xe5\xf7\x46\xbe\x6a\xed\x81\xc2\x48\x9d\xd1\x0e\x65\xf4\x20\xcf\x9f\x64\x2c\x05\x8a\x6a\xc0\x53\x25\x28\x0e\x24\x86\x07\x5d\x04\x83\x3f\x3e\x2a\xe1\x89\x71\x7d\x08\x72\xd3\x32\x14\x63\x1d\xfd\xe6\xcd\x41\xfa\xba\xfe\x16\x4b\x62\xf1\x22\x81\x1f\x78\xd6\x0b\xc5\x81\xc4\x30\xf5\x0b\x79\x26\xe9\xf6\xe5\xdd\x31\x93\xdb\xbc\x0e\xe5\xab\x3e\x01\x39\xe4\x96\xf0\x42\xe4\xea\x52\xbe\x71\x06\x34\x73\x06\x43\xe0\xa1\x2c\xc4\xc6\xe2\xff\x28\x45\xc5\x55\xfd\xbd\x8a\x2e\xea\xd2\x31\x8c\xe2\x61\x51\x9d\x6b\x43\x24\x3a\xff\x72\x50\x0d\xa6\x34\xbe\xb4\xfa\xab\x95\x6e\x41\xe0\xd5\x34\x14\x07\x7e\x35\x7d\x7a\xeb\xa4\x1e\x37\x5e\xa2\x72\xb4\xc1\xf8\x61\x8b\x02\xbf\xe5\x6f\x6f\x01\xa5\x9b\x31\x8b\x8a\xf9\xb0\x5e\x8d\x2e\x3e\x1f\xf0\x6a\x1a\x82\x03\x1f\x33\x7f\xf8\xba\x8e\xaf\xd3\x15\x1c\x1d\x4c\x7b\xcc\xed\x7c\xbe\x7f\xa5\x9d\x21\xd4\x19\xc5\x3c\x6a\x9f\xb4\x6a\x2f\x40\x18\x06\x3c\x4a\x87\xe2\x40\x62\x98\xd8\x88\x93\x2e\xd5\x12\xeb\x7a\x1a\x58\x73\xe8\x97\x4c\x27\x9d\xf8\xa5\x98\x82\xe9\xcf\x5b\xba\x99\x50\xdc\xcb\xb5\x5e\x4a\xe0\xcb\x15\x8a\x03\x89\xc1\xf8\x59\x4c\x00\xfd\x50\xa4\x26\xa9\x2b\xcb\x17\x62\x1e\x1f\xbb\x56\xdf\x35\xd3\x61\x2c\x5e\x42\x25\x8b\x18\xc3\xd8\xb9\x8b\x70\x60\xa2\x41\x70\x20\x31\x8c\x89\xf9\x78\x22\x61\xdb\xa5\xde\x5f\x32\x53\x96\xe3\x4b\x8b\xc7\x1c\x96\xb3\x7f\x51\x66\x5d\xdd\x6a\x82\x5b\xdb\xc1\xc7\x9a\x01\x13\x03\xd4\x96\x0f\x5e\x0c\x14\x64\x5e\x98\x08\xe4\x4f\x1a\xe2\x6b\x6a\x36\x6c\xac\x6c\xda\x73\xb2\xbe\x4d\xd4\xba\x69\x36\xc4\xf7\x17\x49\x84\xac\x72\x29\xc3\x3a\x0c\xc5\x81\xc4\x50\xbc\xc7\x14\x6f\x2d\x75\x8d\x64\xa2\x57\x94\x6c\x1f\x63\x68\xbe\xb1\xf5\x38\xf8\x5d\x92\x8f\x9f\x94\x0e\x12\xd2\x36\x6a\x00\x60\xe9\x40\x71\xe0\x22\xa2\xe9\x1e\x52\xd5\x73\x2b\xe5\x22\x1d\x32\xf4\x6b\x98\xd5\xa3\x73\x9e\xb8\xa7\x37\xf5\x8f\x43\x18\xdf\x90\x31\x9b\x6d\x10\xc5\x03\x47\x65\x10\x1c\x48\x0c\x68\xc3\x9f\xee\x97\x35\x50\xb5\xe1\xd2\xb1\x21\xe7\xaf\x69\xa3\x50\xd9\x3d\x3d\xbc\x67\xe8\x41\x7e\x95\x71\x8c\xee\xab\x44\x04\xb8\x91\x50\x1c\x48\x0c\x0a\x48\x53\xd9\x59\x47\xaa\x1e\xea\xc5\x53\x9a\x5f\xd1\xce\xf6\x6f\x8e\x0c\xd7\xf3\xe8\xea\x3c\xd7\x2b\x2c\xd3\x3b\x2c\xfb\x6a\x61\x61\xa1\x38\x90\x18\x7e\xcd\x36\x4e\xca\xa3\x4d\x0e\x58\x71\x0d\x5d\xd3\xe1\x63\x77\x84\x9e\x89\xcb\x89\x24\x61\xe9\x22\x14\xb1\xf3\x2a\x06\xcf\x02\x99\x56\xa0\x36\xe3\xf0\x62\xb8\x9e\x4e\x74\xda\xdd\xc7\x71\x74\xba\x68\xad\xae\x8c\xb6\x53\x90\xfa\xfc\x2c\xf0\x92\xbe\x38\x49\x46\xed\xe4\x41\x41\xbb\x38\x01\xf0\x9a\x05\x82\x03\xef\x19\x1e\xa0\x62\x12\x9e\xb3\x7f\x34\x65\xf8\x74\x3c\xb7\xf8\x83\x83\x46\xfb\xd0\x13\x61\x3d\x40\xbb\x64\x25\x5a\x94\xfe\xfe\x22\x70\xc3\x1e\x8a\x03\x27\xf3\xc4\x3c\x5f\x93\xd3\x43\x45\x39\x12\x66\xd2\x29\xa1\x12\xe6\xb9\xc1\x92\x1f\xe9\x4c\x94\x97\x6f\xd7\xe1\x60\x93\x38\xcd\x07\x9c\x22\x28\x0e\x24\x86\x8d\x00\xa4\xeb\xbb\xa8\x09\xea\xe1\xb7\xf1\xa1\x8f\xea\x7d\xbc\xe3\x7f\x04\xa1\x50\xc7\xf4\xf4\x74\xb6\xc5\xef\x12\xbb\xae\x02\x76\x19\x14\x07\x12\x43\x5d\xff\x66\x74\xb5\xf2\x43\xaa\xbf\xac\x7b\x1d\xbd\x81\x9d\x6e\x96\x4f\xe7\x0f\x52\x55\x55\xc2\x59\x5b\x1c\x83\x68\x33\x09\x80\x45\x0d\x8a\x03\x89\x41\x26\x56\x80\xde\x63\x42\x4f\xf4\xa4\x4f\x75\x47\xfa\x84\xb0\xf5\x77\x54\x2c\x65\x9f\x6e\x58\xc1\xab\x7c\xf3\x9f\x3e\xb7\x5f\x22\x60\x62\x80\xfa\x4c\xfa\x3f\xd2\xee\xe8\x11\x48\x1a\x76\xf2\x46\xde\xcd\x9b\xfe\x61\x4b\xfb\x5a\x4b\x7d\x75\x61\x89\x36\x70\x86\x78\x8e\x76\x8a\x06\xd3\x3f\x0f\x70\xfe\xa1\x38\xf0\x32\xb1\xa7\xf5\x9c\xf7\x89\x41\x20\x9b\xe5\xd9\x8a\x75\x79\x33\x7e\x83\x16\x62\xd4\xd0\x24\x69\xb4\x8d\x3a\xc9\x3c\xd3\xe4\x57\x40\x0c\x50\x1c\x48\x0c\x8e\xaa\x63\xdc\x4b\x9b\x9c\x66\xd9\x7d\x11\xcc\x66\x63\x5a\xe1\x2e\xe5\x2a\xc7\x8c\x69\xe5\x7f\x7c\xeb\x49\x55\xd2\x8c\xa9\x80\x54\xff\x50\x1c\x48\x0c\x3b\x88\xc2\x26\x8f\x9b\x12\xf1\xe9\x45\x55\x82\x5a\xd5\x39\x56\x54\x26\x2f\x45\x9b\x7c\xb1\x9f\x66\xd2\xa5\xcf\xf6\xe8\x6b\x28\xc2\xc2\x42\x71\x20\x31\xf8\x1e\x9d\x9c\x92\x4a\x9d\x0e\xf7\xe5\x47\x77\x1a\x52\x38\xe6\xf8\xf7\x3b\x59\x04\xd9\xd2\xec\xc4\xaf\x97\xdc\x1d\x7a\x65\xdb\x0e\xdc\x1b\x85\xe0\x40\x62\xd0\x9f\x36\x14\xb4\xd2\x88\x7b\xde\x43\xa4\x68\x66\x11\x18\x60\xf2\x5b\x76\xe9\xbd\xe9\xf2\xde\x52\x40\x65\xd8\xba\xa7\x6d\x75\x2b\x4c\x0c\x50\x1f\xb0\xf0\x62\x58\x10\xf3\x20\x32\xd0\xca\x38\xd3\x7c\xff\xf4\x74\x47\x3b\x3e\xc3\x6e\x71\x40\x55\x93\xef\x5e\xab\x77\xf0\x00\xd7\x8f\x77\xe7\xbd\xc0\xcd\x5c\x08\x0e\x24\x06\x71\x17\xdd\x6c\x01\xad\x38\x12\x8f\x5a\x8c\x96\x10\x1b\xa4\x11\x2a\xe1\x98\xd6\xab\xc4\xb8\x78\xcb\xe8\x66\xb9\x77\xfa\xd6\xc0\x0d\x26\x28\x0e\x24\x86\x87\x6a\x4c\x73\xc9\x3c\x8f\xd8\x83\xdf\x1c\x3b\xff\xe2\xad\xe9\x22\xb3\x67\x9a\xaa\x3a\xd2\x9e\x26\x12\xae\x54\x15\x98\x63\x00\x7a\x0b\xc5\x81\xc4\x40\xdf\xf6\xcd\x89\xf7\x49\x8c\x84\xc8\xea\xde\x63\xd3\x08\x0f\xef\x6c\xb9\x53\xb2\xdc\x5b\xb2\x2f\x64\x31\xeb\x92\x3f\x85\x27\x81\xda\x22\x50\x1c\x48\x0c\x87\xa6\x3a\x0c\x7c\xb2\x2b\x03\x74\x8e\xb4\x67\xb3\xa2\xba\x4a\x8e\x59\x2a\xef\xe2\x89\x72\xcf\x68\xa8\x0f\x7c\x4e\xbe\x3e\x92\x87\x85\x85\xe2\x40\x62\xc0\xff\x45\x26\x70\xd0\x1b\xc3\x1b\x19\x3f\x91\xdb\xbb\xd5\xf5\xa3\x5c\xf9\x3d\x65\x30\xa6\x9b\x83\xb2\x7c\xb0\xf9\xa8\x55\xe6\xba\x4f\x34\xd2\xff\xb7\x43\xc5\x0f\x62\xc8\x3e\x7e\xc1\x92\x08\x3f\xc1\xe7\x20\x73\x19\x97\xfb\x6c\x23\x7d\x4c\x77\x53\x43\x5e\x35\xde\x65\x8d\x27\x6f\x7c\x46\x20\xf1\xdc\xeb\xeb\xc3\xc6\x98\xcf\x23\xcb\xeb\x16\xff\x7e\xf4\x72\x0a\x6e\x12\x5f\xaa\x93\x6e\x94\x4a\xf1\x6a\x1e\x63\x64\x45\xe2\x3c\x67\x0f\x3d\x2f\xb2\xe6\xeb\xe8\x3d\x6e\xd3\x09\x72\xc7\xa7\x5c\xe7\xff\x5a\xde\xfa\xe5\xff\xb7\x3f\x0c\x7e\x7e\x90\x67\xf7\x0a\xd1\xf8\x3f\xf1\xaa\xe7\xa3\x2f\xed\x77\xc8\x67\x9a\xa9\xe4\xdd\x35\x56\x97\x43\x1c\xea\xcf\x43\x52\xc3\xb5\x74\x85\xfd\x0f\xa1\x38\xd0\xfc\xb0\x53\xef\x35\xc6\x60\xb1\x7f\xde\xb1\xf5\x5c\xf1\x11\x22\x9b\xd5\x9d\x39\x56\xf7\x97\x5e\x29\x03\xe3\xf4\x15\xc5\x57\xf6\x05\x40\x58\x28\x0e\x9c\x36\xb5\x78\x40\xea\xbb\x7f\xaf\xc4\xe4\x6d\xf9\xee\x99\x6c\xe7\xe6\xfd\xec\xa2\xa2\x81\x90\x6a\x4f\xb1\x16\x7b\x3e\x8c\xb4\x0c\xe0\xae\x18\x14\x07\x9a\x1f\xe5\xbc\x94\xef\x71\xb2\x31\x7b\x8f\x76\x1c\x43\x8a\x85\x1a\x8b\x16\x3f\x8a\xe3\x5c\x7c\x3c\x0c\x76\xf2\x8f\xb3\xc7\xf1\x5c\x5c\x81\x85\x85\xe2\x40\xf3\x63\x81\x45\x42\x4c\x0e\xad\x72\x88\x9a\x75\xfe\x59\xde\xb7\xdb\x20\x75\x82\x6c\x2f\xfd\xc9\xf7\x88\x19\x92\x5f\x65\xac\x3b\x4f\x80\x5c\x2e\x50\x1c\x68\x7e\x88\x27\xb4\xae\x32\x07\x54\xe8\x5e\x48\x30\xf8\xf5\x3a\x94\xf8\x7f\xf0\x1d\x77\x79\xbd\x7d\xd6\x88\x73\x7a\xfc\x7a\x5f\xc4\x66\x09\xf6\x63\x09\x25\x39\x78\x31\xd4\x19\x4b\x3f\xe3\xf7\x3d\xe6\x63\xdc\x08\xef\xfd\x45\xe1\x8e\x3b\x20\xbb\xee\x1c\xd0\xe8\x8f\x5a\x3b\xf7\x68\x91\xbf\x28\x7d\x04\x58\xea\x21\x38\x90\x18\x0a\x6f\xf4\xd9\x4d\x2d\xf2\xec\x5a\x8d\x74\x39\xa6\xbb\x38\x4b\x54\xdb\x3e\x4a\xd8\xff\x16\xf3\x90\x67\x1b\xda\x98\xa0\x76\x58\x82\x85\x85\xe2\x40\x62\xe8\xe5\x4e\x4b\x7b\x71\xe3\x67\xfb\x9a\x7f\x66\x7e\x10\xc7\xd6\x21\x70\x35\xd7\x3c\x41\x5e\x3b\xad\x3b\x9c\xae\xab\x9d\xff\x2f\x90\x0b\x02\x8a\x03\x9f\xc3\xb1\xb1\xd5\x96\x17\x23\x19\xa2\xb7\x7e\x3d\x61\x95\xa0\xa1\x32\xd1\xdd\x0d\xe8\x0c\x51\x6f\x60\xa3\x6f\xdf\x0f\xa1\x2d\x7a\x04\x6c\xfa\x20\x38\xf0\x36\xea\x5e\xc9\xfe\x2a\xb1\x2f\xbd\x7d\x69\x51\x31\x67\x5f\x25\xad\x4d\x3a\x91\x2f\xbe\x6f\x88\x8e\x4f\xb5\xea\xea\x6f\x0c\xfc\x2d\x60\x6c\x21\x38\x90\x18\x04\x45\xcd\x82\x4b\xee\xdc\x58\xda\x34\xce\x4d\x46\x53\x58\xf9\xbb\x66\x9d\x7c\x10\xa0\xb7\x8c\x1e\x6d\x4c\xaa\xe2\xbb\x83\x0f\xe4\x1b\x81\x32\x83\xfe\x8f\xe4\x33\xe6\x91\xc1\x0c\x9a\x3c\xdf\x25\x3a\x2b\x0a\xb8\x26\x5c\x2e\x9f\x2b\xaa\xcf\x9d\x86\x07\x5e\x7f\xb4\xb5\xd1\x60\xd1\xd1\x03\xde\xf5\x43\x71\x20\x31\xcc\xda\x2d\x6e\x0c\x71\x91\x34\x23\x08\x7d\xd2\xa0\x72\xf4\x91\x20\x8a\x3b\x42\x72\xe1\xb6\x1f\x0b\xc1\x22\xcf\x28\xf6\x45\xc4\x01\xee\x97\x43\x70\x20\x31\x28\xb2\xef\x30\xcd\xee\xd4\xba\x3d\xa6\x42\x9f\xad\x60\xd2\x3c\xf9\xcc\xfc\x48\xf2\xe6\x57\x7e\x74\xed\xd4\xbe\x40\xdc\x51\x3f\x60\x64\x42\x71\xe0\xba\xda\xdf\x1a\xd7\x7f\x29\xf5\x92\xeb\x5d\x61\xa0\xed\xdf\x58\x25\x1f\x1c\xf8\x5b\xa9\xec\xf9\xbf\xc9\x9e\x7c\xd6\x64\x20\x48\xc5\x01\x0b\x0b\xc5\x81\xc4\x80\xce\x77\x54\x40\xb9\x35\xbe\xff\x24\x35\xe0\x8a\xfc\xc4\x1f\x63\xee\xd9\x30\xa5\x43\x01\xcd\xce\x0b\xe1\xb7\x72\x8f\x38\x44\x5a\x00\x6b\x70\x17\xff\x2d\x2d\xe1\x73\xb3\xc6\x51\xa1\x07\x43\x2b\x1f\xfe\x3e\xaa\x41\x17\x09\x5f\x13\x77\xf8\x73\xf8\x2b\xbc\x5b\x96\xaf\xe2\xc5\x7f\xad\x41\x54\x6a\x31\xa1\xd2\xc3\x42\x5b\x0f\x96\x6c\x9a\xd1\xc3\x44\x2c\xeb\x2d\x7f\x82\xdd\x2b\xa4\x27\x81\xde\xbf\x4b\xc7\x66\xbb\x10\xff\x83\x5e\xf0\xf2\xe6\xd9\x06\xb2\xcb\x2f\x9e\xf5\x8b\x7e\xb3\xc8\x95\xfb\xf8\x4a\x6e\xed\xc7\x76\x95\xf4\x0a\x2e\xf5\x22\xa1\x0d\x76\x2f\xc8\x1a\x84\x8a\x0c\x6f\x0d\x26\xe6\x22\x5d\x2f\xb7\xe1\x54\xc5\xa3\xf5\x62\xb5\x92\x87\xc5\x6d\x4b\x5f\xd8\x3d\x47\x77\x6e\xdc\x7a\x6e\x64\x6f\x67\xd9\xce\xf7\xdf\xf3\xa2\x59\x34\x2a\xa3\x4e\xca\xa0\x5c\x17\x0d\xd4\x18\xd7\x72\xbc\x69\x91\xd8\x3b\x9e\xf5\xd6\x65\xde\x3b\x22\xbe\x16\xf3\x2f\x90\x01\x6b\x10\x2a\x26\xac\xd6\x2f\xd8\x1a\x3c\xc4\xac\xec\x67\x1e\xe7\xcb\x90\xc0\xd9\xcb\xab\xc2\x13\xac\xad\x5b\xc3\x8a\xb7\x2a\xf5\xd0\x2b\xe5\x98\xaf\xc2\x5a\x4c\xb3\xfd\xe7\xd5\x5e\x14\xce\x1a\x44\x74\xb1\x93\xec\x38\x4b\x1f\x75\x7d\x3b\xd9\xf7\xc6\x03\xc5\xf1\xec\x45\x31\x37\xf7\x27\x21\xd4\xab\x1b\xa1\x2f\x7c\xae\x84\x3e\xff\xde\x24\x9c\x35\x78\x60\x6d\x86\xd5\x24\x99\x7c\xb8\xb4\x72\x45\x59\x64\xff\xba\x6b\x9b\x20\xe7\xf9\xd5\x50\xd5\x74\x9f\x52\xf2\xa4\x96\xcd\x83\x9b\x7f\x6f\x12\xce\x1a\x2c\x39\xe9\x97\x7e\x1d\x74\xb1\xfa\xd8\x0b\xdb\xf9\x74\x39\x29\xf7\x9a\xfa\xc5\xce\xea\x77\x1e\x54\x7e\xb1\x71\xbd\x90\x2f\x52\xff\xbe\x8d\x12\x85\xb3\x06\xbd\xff\xce\x9b\x6a\x9a\xd0\x65\xa7\xb0\x5c\xbf\xb6\x30\x6f\xb1\x97\xba\xfb\xe4\xa1\x29\x45\x36\x1e\xa2\x6f\x60\x04\x7f\xed\x1d\x8c\x7f\x6f\x12\xce\x1a\x94\xf1\xd0\xd5\x2d\xc6\xe4\x32\x5e\x0b\xaf\xbf\x27\xf8\xa2\xc4\x76\x42\x10\x33\xcc\xe0\x68\xf8\x05\xa3\x9f\x13\x1d\x5e\x1c\x23\xfd\xbf\x37\x09\x67\x0d\x3e\xa5\xf1\x4a\x27\xbd\x75\xb8\x6b\xc8\x46\x1b\x48\x2f\x64\x5b\x7b\xfd\xdc\x31\x22\xb0\xb5\x27\x3c\xe0\xb5\x97\x8f\x13\x3d\xc7\xf5\xbf\x37\x09\x67\x0d\x5a\xd9\xab\xe6\x79\xb1\xfe\x9e\xfd\x29\x99\x93\xd4\xd1\xd0\x70\x12\xb2\x93\xb6\xdc\xc3\x79\xa8\x76\x07\xc3\xc2\xb3\xb6\x24\xbf\xf1\x7f\xb3\x3f\x85\x9a\x8a\xf0\xab\xd0\xe2\x43\x79\x99\x7b\xb6\x76\x08\x22\x08\x69\xb4\x3b\x65\x4a\x2b\x4e\xec\xdb\xca\xf1\x26\xca\x7b\xfa\xde\xb6\xd5\x0a\x4c\xb9\xc0\x17\x11\x14\x07\x5a\x85\xf4\x14\x62\x3f\x9e\xbf\xb1\xc3\x79\xd9\x2c\xc8\x79\x54\x26\xb2\x28\xee\x2d\x5b\xbf\x35\x47\x85\x7d\x4a\x96\x6b\x4d\x7b\x42\x0f\x7c\x1e\x43\x71\xa0\x55\x08\x37\x93\x90\x2a\xfe\xd4\x71\xac\x60\xca\xe5\x0b\x8a\x30\xcd\x6d\x5c\x28\xad\x56\x66\x1c\x6e\x44\xd2\x4d\x02\x39\xba\x4f\x32\x70\x28\x09\xc5\x81\x56\xa1\x0f\xc5\x92\x9e\xa7\x04\x1e\xc1\x05\x16\x8f\x27\xc3\x93\xa6\xb8\x09\x4f\xbd\xb6\xaf\xe8\x1d\x18\x68\x8c\x3e\x25\x54\xc5\xe8\x3b\xc3\xc2\x42\x71\x1f\xc4\x90\xfe\x1b\xd6\xd4\x88\xb0\x35\x24\xae\x87\x7e\x29\xe1\x95\xe3\x54\x6f\xf5\xdb\x2a\xa7\xf4\x79\xc1\x69\x86\xe7\x75\x61\xec\x12\x71\xac\x5b\x9e\xb0\xb0\x50\x1c\x68\x4b\xd2\x97\xee\x60\x65\xf7\x18\x33\x9c\xd2\xef\xe7\xdf\xea\xd4\x7a\xc1\x34\x16\x6c\x7c\xf9\x82\x2e\x94\xbf\xe8\xf6\x15\x2f\x07\x85\x46\x60\x5b\x12\xa8\x1f\x49\x78\x31\xdc\xfd\x31\x71\x18\xbf\x37\x16\x88\xd1\xd0\x2d\x26\x26\x7f\x52\xae\xa9\x33\xa1\xab\x70\x63\x2c\xd2\x4e\x8e\x1b\x62\xe7\x84\x06\xe4\x37\x85\xe2\x40\x62\xa8\x15\xcf\xe0\xfc\xb3\x8f\xaf\x3e\x53\x77\x14\xf0\x3b\xef\x1d\xad\x66\xcc\xb3\xb7\xc6\xa9\xad\x92\x8e\xc1\x21\xb1\x3f\x7f\x4f\x53\x02\x4f\x45\x20\x38\x90\x18\x28\x8e\xc2\xf0\xb8\x96\x84\x71\xf2\x7e\xff\x70\x08\x3d\x66\xd8\xd5\x25\x2e\xd5\x93\xdb\xe3\xb3\xbc\x17\xa2\x95\x9e\x43\xaf\x09\xe4\xc3\x83\xe2\x40\x62\x50\x51\x3b\xa2\xa5\xe8\x7c\xbd\xb0\xf6\xfc\xd0\xc3\x39\x64\xd6\x90\xa0\x31\xb7\xa3\x08\xa9\x2f\xe5\xe5\x64\xdf\x51\x69\xf1\x23\xe0\x3c\x0e\x8a\x03\x89\xe1\xf7\xbd\xf3\x9b\x7c\xe1\x8d\x81\x17\x11\x3b\x6b\xea\xf3\xc7\x49\x0d\x63\x2f\x7d\x32\x53\x38\xaa\xfa\xeb\xc9\x7f\x87\x8f\x5d\x01\x65\xf0\xa0\x38\x90\x18\x66\x4d\xea\xfa\x18\xb6\x4d\x25\x1b\xe9\x94\x1f\xa1\x62\x06\x3d\x14\x3c\x5c\x51\x32\xc9\x8f\x1a\x35\x94\xf8\x14\x14\xa8\xfc\xb1\x10\x26\x06\xa8\xe5\x0b\x5e\x0c\xd5\x4f\x14\xf6\x05\x9d\xd0\x39\x99\xe3\x7d\x14\x8b\xc8\x36\xbb\xb7\xe5\xca\xde\xc6\x50\xa8\x0d\x52\x33\x79\x51\xd4\x9a\x3f\x04\xde\xb3\x43\x71\xe0\x47\x07\x81\x1d\x01\x85\x1c\x99\x82\x7e\x96\x31\xe4\xef\x3c\xee\x1e\x86\x51\x1a\x8e\xc7\x16\x6e\xab\xfb\x33\xd1\x6c\xd5\x09\x6d\x11\x01\x8f\x0e\x20\x38\x90\x18\x64\x13\xf3\xec\xa5\x5e\xd7\xcc\x4b\x7e\x33\xdf\x9b\x58\x4e\x4b\xc1\xe1\xd1\x70\xe0\xa2\x1d\xef\xf8\xc8\xc9\x45\xd3\x74\xcf\x0c\x28\xfc\x0c\xc5\x81\xc4\x20\x7e\x69\x7c\xf9\xc9\x72\x39\xc5\xfc\x07\x2e\x2e\x7f\x6e\x86\xae\x8a\xfa\xe4\x04\x6e\x6e\x45\x58\x6b\xe3\x6c\x4a\xc6\xbd\x71\xe0\x7a\x24\x14\x07\x12\x03\x46\x93\x9c\xd8\x39\x33\x57\xb5\xd2\xd7\xdf\x7f\x04\x08\xd6\x37\x6b\xa5\xd0\x14\xa6\x93\x3c\x88\xf6\x7f\xcd\x91\x28\xe7\xb3\x03\x09\x38\xa1\x38\x90\x18\x52\xba\x37\x84\x29\x36\x2a\x2a\x90\x42\xaf\x16\x3f\xe7\xbc\x7b\x2e\x55\x25\x70\x3c\x72\x76\xcf\x53\xa2\x51\xc1\xe4\xc1\x71\x87\x04\x4c\x0c\x50\x1b\x0b\x78\x31\x70\x8c\xd6\xaf\xf0\x1a\x52\x27\x62\xaa\x7b\xf6\xe4\x4d\x92\x71\x4a\x27\x93\xa7\xe9\x04\x6c\x67\xa8\x97\x0d\x28\xbb\x9c\xb0\x1d\xc3\x3a\x0c\xc5\x81\x9f\x23\x2d\xe5\x89\x6d\x2f\xcc\x39\x48\xfd\xa0\x12\x2a\x73\x3b\xd8\x4a\x09\x3c\xbd\x4b\xd0\xf9\x19\x23\xc1\xbe\x8d\xf9\x0e\xd5\x9d\x72\xe0\x39\x12\x04\x07\x12\xc3\x8d\x3f\xf1\xdf\x20\xbd\xe9\x60\xd5\xe8\x3b\x8e\x24\x18\xf7\x54\x82\xb7\x2a\x51\xd1\x87\xe7\x63\x43\x58\x1b\x07\x87\xa2\xaf\xa8\x60\x61\xa1\x38\x90\x18\x22\x1b\x9f\xd2\x2c\x92\x7e\xe5\x2d\x08\x9a\x44\xbd\x1c\xc2\xad\x1e\x49\xf4\x5c\xdc\xf7\x3a\xfb\xab\x42\xf8\xa9\xbe\xc2\x40\x06\x30\x99\xa0\x38\x90\x18\x7e\x70\x8d\x93\x95\x08\x6f\xbc\x65\x7e\x99\x5c\x96\x4a\x8e\x33\xcf\x54\xf8\x84\x2e\x93\x83\xf3\xdd\x1b\xdc\x0d\xaa\xc2\xcf\xa2\xc0\xdb\x34\x28\x0e\x24\x06\x3d\xf4\xdf\x43\x98\x3a\xf9\x35\xb2\x3f\xeb\x2d\xfd\x2c\x66\x49\x9f\x46\xf2\x39\x7b\xbb\xf2\x8a\x62\x28\xe8\x70\x8a\xcf\xa3\xe0\xc2\xc4\x00\xb5\xe5\x83\x17\x43\x3b\x37\xc6\xbb\x52\xd6\x63\x5b\x0a\x1e\xdd\xea\x05\x01\x07\x54\xa9\x3a\xf6\x5c\xc1\x32\xc3\x0d\x4b\x3f\x93\xc7\x61\x24\x1c\x40\x42\x65\x28\x0e\x24\x86\xbe\x3c\xaa\x82\xc4\x87\xf1\x22\xcb\x6f\xc6\x59\x91\xc8\x85\xb7\x77\x96\xff\x86\x67\x2e\xd8\x45\x4b\xd7\x3e\x96\xad\x1e\xf3\x02\xce\x1b\xa0\x38\x70\xde\x7d\x65\x49\xbe\x82\x87\x6a\xec\x64\x0f\x7a\xa5\xe9\x66\x69\x95\x25\x47\xa6\xf1\xd2\xa8\xf8\x44\xe7\x3f\xa2\x6d\xf3\xbf\x89\x01\x9e\x54\x40\x71\x20\x31\x20\x3e\xfa\xa2\x23\xfb\x34\x5d\x93\xae\xce\x77\x96\xeb\xef\x15\xfd\x70\xf2\xfb\x50\xcc\x56\x91\xbc\x10\xd5\x20\x94\x56\xef\xa7\x80\x59\x0e\xc5\x81\xc4\x30\x96\x7f\x58\x77\x8f\x65\x7b\x19\x65\xd2\x08\x81\x5a\x9a\x0f\x09\x97\xc1\x56\x16\x8d\x66\xed\xe5\x4f\xd4\x7a\xc9\x3a\x52\x7b\x40\x0c\x50\x1c\x48\x0c\x6c\x31\xc9\x5b\x38\x0f\x64\xf8\x0f\x2a\x83\x79\xdc\x16\xb3\x15\x32\x0e\x19\x08\x59\xf4\xcb\xb8\x82\x2e\x1f\xfd\xe0\x2c\xf3\x21\x87\x89\x01\x6a\x33\x0e\x2f\x86\x0e\xc7\x60\xf2\xe7\xb2\xef\xb2\x17\x02\x85\xcc\xc5\x95\x9c\x89\xc9\xec\x90\xba\x83\x06\xdc\x36\x12\x7b\xd1\x64\x42\xdb\x73\x81\xf3\x06\x28\x0e\x24\x06\x79\x01\xdf\x77\xa4\xab\xf2\xd4\x3f\x89\x8f\x71\xb1\x0f\x0c\x2d\xed\x95\xaa\x9b\xce\xb7\xa7\xaa\x2b\xa6\x7c\xfc\x1d\x8e\x28\x81\x87\xe7\x50\x1c\x48\x0c\x35\xaf\x3e\xd0\x6f\x14\xcb\x3e\x47\x25\xe0\x46\x42\x13\x3f\x7c\x11\xe5\x17\xc0\x3a\x7e\x96\x7d\xe7\x7a\xd8\x1c\xa1\x73\x4d\xe4\x0d\x2c\x2c\x14\x07\x12\x43\xb4\xfc\xfa\xf0\xb7\x56\xde\x56\x65\xed\x05\x03\x9e\x08\x09\x49\x54\x71\x29\x3b\x57\xba\x40\xdc\x4a\xff\x1a\xff\x2a\x9c\xf9\x1a\xe0\x09\x33\x04\x07\x12\x83\xa1\x65\xa9\x27\x3f\x0a\x6d\x6c\xb7\xe5\x2c\xa1\x73\x6c\xaf\x7e\x86\xc9\x34\x7e\x94\x30\x17\x11\xe1\xb3\x0c\x95\xd9\xf6\x6b\x31\x58\x58\x28\x0e\x24\x06\x7f\xb5\xe8\x83\xca\x9b\x8f\xf9\x87\xc6\x48\x29\x0e\xa5\x7c\x89\x65\x64\xcc\xae\x6a\x3c\xfe\x43\xcf\x4d\x93\x9c\x18\x93\xf0\x11\x80\xec\xda\x10\x9f\x49\xf0\x62\xb0\x60\x72\xfa\xbb\x42\x72\xa9\xb1\x45\xb2\xb3\xbe\x40\x9e\xa4\xd2\x65\xb1\x9c\x2f\xe6\xdf\x3d\x9a\x38\xd4\x5b\xfd\xb2\x1a\x15\x78\xfa\x07\xc5\x81\xc4\x90\xaf\x75\x75\x8d\xb0\xd5\xe7\x48\xdb\xb4\xaa\xcb\xc5\xd9\x27\xfe\xc4\xec\xa2\x52\x50\x2c\x4f\xed\xe1\x5b\x99\xd0\x81\x70\x05\xe0\x8d\x1e\x14\x07\xce\xa1\xab\x1d\x71\xa3\xa6\x58\x97\xc1\xb8\x48\x93\x18\x78\xf1\x21\xd4\xfa\xfd\x52\x98\xe9\xbb\x7b\xd1\x7a\x06\x76\x3f\x5b\x53\xd1\x80\x94\x14\x50\x1c\x48\x0c\x83\x62\x12\x0c\xf7\xef\x7f\x7c\x9c\xa0\xca\xc4\xc5\xfa\x89\xa0\x77\x5c\xc4\x58\xdc\x7d\x2a\x46\xfd\xd3\x5d\x81\xb2\xc9\xfb\x72\xc0\x23\x05\x28\x0e\x24\x06\xb1\x4c\x1c\x07\xa7\x62\x34\x1d\xc7\xfb\xa7\x37\xf2\x41\x83\x23\x25\x2f\x0d\x3f\x50\x76\xb4\xa1\x0b\x2c\xed\x34\x3b\x1d\x1f\x5f\xc3\xc2\x42\x71\x20\x31\x98\xad\x84\xe2\xdb\xde\xc1\xf4\x7e\xb3\x8a\xf4\x05\x31\x1a\x6d\x6e\x6c\x18\xb3\x88\x65\x2e\xd1\xce\xa6\x99\xb1\x46\xcf\xeb\xdd\x01\x4c\x0c\x50\x1f\xb0\xf0\x62\xc0\x8c\x8e\x30\x97\x57\xf4\x23\xd8\xf8\x6c\x8b\x2a\x8b\x2d\xa7\xb2\xb1\xbd\x83\xab\x45\x5a\xcf\xb2\x60\x84\x81\xab\x73\x35\x09\x5c\xab\x82\xe2\x40\x62\xf8\x7a\x23\xd6\xd9\xb3\x31\xff\x93\xaf\x7f\x1c\x85\x82\x2e\xf7\x90\x91\xf1\x91\xe0\x2c\x83\x49\xb0\x8d\xef\x26\xf1\x77\xe5\x37\xc0\xd7\x04\x14\x07\x12\x43\xf3\xfe\x9d\x8c\xe9\x80\xae\x93\xa3\xe4\xea\x39\xaa\x28\x1c\xef\x27\x95\x12\xa1\x33\xac\x43\x9f\x5e\x96\x4c\xd5\x0c\xfe\x72\x00\xee\x71\x42\x71\x20\x31\x78\x12\xae\xf1\xa9\x0b\xab\xc5\xa4\xe2\x73\x14\xdc\x67\x94\x48\x20\x99\x62\x9f\xfa\xb5\x5c\xd3\xd5\xc1\xd4\x84\x19\x31\xcc\x05\x14\xb0\x87\xe2\x40\x62\x68\x6a\x68\x1c\xba\x1d\x0b\x7e\x8a\x4a\x27\xe8\xa3\x6c\xb9\xc3\x91\x30\x92\x3b\x22\xd8\xa6\xdd\xac\xa3\xe5\x20\xd1\xfa\xe9\x0a\x78\x0d\x04\xc5\x81\xc4\xb0\x78\xe7\xd3\xea\x1b\xee\xb9\xe5\x17\x1b\xa6\x51\x5f\xef\x67\xbc\x68\x48\xea\x94\xd7\xdc\xcf\xa9\x12\x63\xea\xa5\x14\x4a\x37\xe4\x04\xac\x41\xa8\x43\xc5\xff\x67\x0d\x8a\xc2\x59\x83\x3d\x01\x4d\x8e\xc9\x09\x0c\x11\xac\xc8\x78\x7d\xa3\x4c\xdf\xfa\xa6\x79\xa5\x13\x0b\x3b\x10\x16\x8b\xf1\x77\xec\x8e\xae\x87\x14\xff\xfd\xe8\x05\xce\x1a\x0c\x96\x3c\xbd\x43\x60\x4e\x66\xdd\x9b\xe0\xab\x37\x17\x45\xa1\xfb\x42\x25\xb4\xa3\x5e\xf7\x5e\xf0\x5b\xa1\x58\xb3\xed\x2c\xfb\xaf\xff\x9b\xa3\x17\xa8\x3f\x0c\x7e\x7e\xec\x6c\x1f\x36\xf9\x6a\xee\x3e\x31\x10\x50\x1e\x17\x88\x52\x1e\xc6\x94\xfb\xe5\x1b\xf7\xe7\xbd\x2a\x67\x5a\x44\xc2\xa0\xcc\x44\x35\x70\x85\x00\x82\x03\xcd\x0f\xad\x7b\x6e\xd2\xcc\xd1\xbf\x71\x1c\xed\x53\x9e\x07\xa1\x47\xca\x7a\x31\xfd\x11\x43\x36\x2a\xfb\x8d\x2f\xd7\xcf\xfa\xb4\xc1\x0e\x58\x90\xa1\x38\xd0\xfc\x38\xf6\xe0\x7e\x59\x59\x4d\x25\x4e\x93\xd2\x12\xf6\x80\x0d\x55\x72\x37\x51\x46\xcb\xd8\x67\xd6\xea\xed\xa2\x4b\x4b\x6f\x8f\x13\xe0\x71\x43\x71\xa0\xf9\xc1\x58\xa5\x30\x28\xfc\xfb\xc1\x0c\x97\x56\x42\x51\x03\xce\xd7\xcb\x17\x37\xb6\xa1\xaa\xef\x38\xfb\x03\x88\x31\x06\x14\x5d\x2c\x00\x03\x00\x8a\x03\xcd\x0f\xc5\x9f\xaf\xfd\xda\x7f\x1f\xe3\x1c\xed\xf8\x89\xe9\x6d\xe8\x4f\xbc\x92\x5c\x4e\x8f\xdd\x8e\xa1\x7d\x1b\x64\xbb\x91\xf4\x67\x70\x11\xb0\x2b\x20\x38\xd0\xfc\xa0\x4d\x7f\xf5\x23\xc9\xfd\xec\x81\xdf\xe8\x3a\xda\xa3\x63\xed\x72\xec\x20\x9b\x43\x8a\x17\x86\xd7\xbb\x09\x21\x24\xa4\xbc\xe2\xdd\xb0\x1f\x4b\x28\xc9\xc1\x8b\x01\x75\xf1\x67\x2e\x7e\x08\xd5\xf6\x2b\x12\xe2\xfd\xb7\x29\x23\x4b\x41\xd6\xdf\xd1\xa2\xb1\x3b\x39\xd9\x83\x32\x47\x1e\xd2\xd8\x01\xef\x89\xa1\x38\x90\x18\xa2\x5d\xac\x2c\xf5\x3f\xe2\x16\xbd\x61\x1a\x66\xdb\xfe\x5d\x49\xaa\x1e\x86\xbd\xb5\x7e\xc2\x9c\xc3\xa5\x2a\x21\xea\x62\x7e\x37\x07\xd8\x98\x40\x70\x20\x31\xdc\x6b\xaf\xc9\x31\x2b\xe9\xd0\xf4\x50\x45\x56\x76\x50\x24\x75\x99\xa8\x91\xe9\x67\x1d\xb7\x7a\xdd\xdb\x8e\x99\xbf\x27\x99\x02\xe4\xc9\x85\xe2\x40\x62\xe8\xb4\x79\x69\xb0\xd0\xf0\x46\x59\xe9\xd9\x53\x2a\x21\xe5\x6d\xd1\x78\xc6\xa9\xc3\x7a\x59\x3d\xcf\x77\xd5\x97\xc4\xaf\x56\x97\x91\x61\x61\xa1\x38\x90\x18\xce\xa6\xd6\x45\xb9\x14\x1c\x7f\x24\x2b\x65\x6a\x7a\xd2\xbb\x2c\x1c\xab\x13\xf9\x72\xdb\xff\xc6\xbe\x61\x56\x50\x3f\x7a\x70\x03\x24\x98\x81\xe2\x40\x62\x10\x79\xf0\x6a\x88\xe0\x67\xc0\x29\xde\xfe\x60\xb6\x86\xe9\x67\x75\x63\x3c\xac\x20\x9f\xec\xe5\x9f\x49\xb8\xb3\xab\x71\xca\x8e\x26\x40\xf6\x38\x08\x33\x08\x5e\x0c\xcf\x5d\xb4\x37\x76\x67\x8c\xef\x5f\xcb\x05\xe8\xfd\x94\xe4\xd1\xb8\x79\xf9\x71\x52\xce\x1f\x8b\x42\x7b\xa9\x73\x77\x77\xa6\x15\xb8\xf8\x01\xc5\x81\x0f\x65\xb7\x78\x83\x7a\x64\x83\xcf\x92\xc7\xb2\x1e\xbb\x17\x7f\x3d\x60\x64\x24\xfd\xa3\xee\xcf\xb4\xdf\x4d\x71\x40\xa2\x17\x1d\x83\x0b\x1c\xca\x42\x70\x20\x31\xc4\x96\xa3\x9a\x6e\x39\x34\x85\xbf\x7a\x27\x5a\xc7\x74\xd4\xcd\x49\x62\x2d\x25\xd0\x8a\xe7\xe6\xc3\xe0\xc3\x6a\x83\x1c\xe8\xfb\x02\x16\x16\x8a\x03\x89\x41\xf9\xa2\x4b\xad\xa5\x45\xe2\xfa\x27\xd6\x83\x87\xfd\x43\x5f\xdd\x51\x57\x4a\x87\x92\x54\xc6\xe3\x49\x05\x67\x0a\xbd\x76\x0c\x2e\x00\x0f\x6f\xca\xb1\x91\xe7\x9e\x5b\xc9\xee\x05\x4e\x98\xc8\xda\xd3\x29\x57\xfd\xac\x1f\x0e\x55\x8f\x2b\x75\x9b\x8a\xb6\x64\x6c\x9c\x4a\xf3\xff\xeb\xe1\x0d\x5d\x5b\x37\x78\x4e\xf6\x2f\x61\xcc\xdf\x68\xf0\xf7\xa9\x23\xea\x5f\xea\xe3\xfb\x3b\x51\x67\xdf\xbb\x19\x6e\x89\x11\xc8\x92\xf8\x0f\xfa\xe5\x42\x46\x1e\x63\x44\xfb\x69\xdf\x81\x5d\x2d\x6b\xfc\x74\x6d\xbb\xb3\xfd\x5b\x55\x8b\x8d\xcf\xf7\xab\x5d\x59\xe9\xc6\xa6\xbb\x40\x1e\x1e\x54\x64\x78\x0f\x2f\xb8\xdc\x26\xdc\xca\xa3\x7c\xef\xbb\x31\x3f\xf2\xa7\xe1\xa1\xaa\x17\x5f\xa8\x55\x3a\x0f\x07\xf2\x9a\x07\x26\x33\x23\xdd\xf2\xab\xff\x83\x7e\x8a\x4e\x5f\x61\x17\x6f\x64\xab\x8a\xd0\xbf\x16\x4e\xf9\xbe\xb6\xef\x4d\xd3\xf5\x39\x5e\x5b\x28\x6d\x85\x15\x95\x83\x87\xab\x06\xf0\xf0\xa0\x62\xc2\x8a\xa2\x82\x3d\x3c\xe1\xa7\xcd\x44\x9c\xeb\xbd\x53\xb4\x3c\x27\x65\xbc\xd4\xe7\xef\xde\x58\x54\x23\x4d\x2a\xe9\x86\xf0\x3d\x25\xed\xce\xfd\xfa\xeb\xdf\x93\x49\xf8\xc0\x79\x78\x8b\x81\x0a\xdf\x2c\xd7\xcf\x06\x5d\x52\x83\xae\xf2\x99\x7d\x68\xdf\xe7\x9b\x7c\xae\x77\xbe\xbe\x58\x8d\x9d\xbd\x0d\x8f\xe4\xb8\xfa\xf7\x26\xe1\x3c\x3c\x09\xd4\x15\xe6\x16\xf3\xab\xe4\x5c\xc1\x8b\x12\xdb\xa1\x48\xa6\x83\x0b\x47\x17\xe6\x7c\x22\xb5\x14\xa7\xed\x6e\x94\xc5\x43\xd7\x7f\x6f\x12\xce\xc3\xd3\xc5\xf9\xf3\xb0\xf0\x68\x85\xbc\x31\x9d\xa9\x89\x2f\xdf\x77\x42\x36\x77\x8a\x5c\xbe\xd2\x6f\x83\xe8\xf0\xa9\x5b\xd3\xfe\xf1\xbf\x5b\x4d\x3e\x70\x1e\x5e\xa3\xa7\xeb\x53\x07\xde\x6a\x7c\x93\x6b\x5f\x6a\xea\x00\x65\xef\x8f\xee\x09\x01\x05\x91\x04\xf9\x8e\x41\xd3\xcf\xa8\x52\x10\xce\xfe\xbd\x49\x38\x0f\x4f\x0c\x77\x66\x8f\xee\xbd\xb1\x84\xaf\x3c\xfa\xec\xe8\x7b\x36\x26\xb6\x87\xad\xaa\x48\xdb\xdc\xe4\x8f\xa9\xb4\xff\x56\x3a\x4f\x10\xfe\x7b\x93\x70\x1e\xde\x4c\xb9\x8f\x78\x52\x97\x46\xdd\x30\x97\xdc\x96\x47\xac\x9a\x41\x81\x59\x87\xde\x37\x5a\x21\x5e\xcf\x03\x87\xee\x73\xc6\x82\x47\xff\xde\x24\x9c\x87\xe7\xfb\x6d\x21\xda\xa3\x4d\x7a\x2d\x65\xe6\x21\x56\xcd\xe9\xa4\x99\xd3\xe1\x71\x52\xb6\x59\x4e\x52\x72\x28\x45\xe4\xa7\x97\xcc\xff\xa3\x3b\x66\x50\x53\x11\x7e\xb9\x98\xcf\x27\xe9\xa1\x2e\xe8\xce\x8c\xfb\xad\x8f\xc1\xd4\xcc\xba\xc2\x1c\xa2\xbd\x94\x4a\xf0\xda\x44\xb0\x4c\x46\x51\x68\x57\x19\x38\x26\x80\xe2\x40\xcb\xc5\xcc\x4e\x02\xf2\x80\xc8\x8b\x84\xb1\xc0\xce\xe0\xa2\xa7\x96\x15\x42\xbd\x47\x0d\xcd\x7c\xfe\xe7\xe3\x65\xae\x93\xb6\x83\xd7\x5f\x61\x61\xa1\x38\xd0\x72\x11\xd6\x84\xa1\x18\xf3\xab\x99\x38\x94\xd8\xeb\x80\x72\x34\x54\x4c\x6d\x4f\xbf\x77\x27\x5f\x82\xc7\x1a\xc5\x3d\xec\x8e\x23\x95\x2e\x2c\x2c\x14\x07\x5a\x2e\xe2\x5d\x05\x95\x8c\xd6\x82\xf1\x04\x4c\xc8\x31\x38\x4b\x1e\xc8\x91\xdf\xa1\x88\x32\x0a\x4e\xfc\x88\x17\x5d\x1f\x30\xec\x3a\x02\xa4\xd2\x83\xe2\x40\x8b\xfc\xfb\x48\xc1\x91\x4e\xb6\x10\xa7\xa7\x29\x73\x27\x92\x6b\x62\x5a\x2b\x47\xaf\xea\x94\x71\xc9\x38\x22\xef\x71\x73\xd0\x2d\x2e\x02\xa9\xfb\xa1\x38\xd0\x96\x64\xe8\x91\xe8\xb3\xbc\x5e\xd9\xfa\xc2\x5d\x95\x87\x61\x77\xc4\x28\x9b\x6b\x1f\xa7\x3e\xc5\xd9\x8f\xb4\x9f\x21\x11\xd7\xd8\xbf\x8e\x87\xed\x1d\xa0\x7e\x24\xe1\xc5\xa0\xd5\xd6\x25\x5c\x4e\x87\x26\x54\x79\x92\x6b\x7e\x87\xb4\xe9\xcf\x46\x61\x56\x45\x03\x8d\xce\xb7\xae\x06\xf6\x6f\xc6\x93\x23\xc0\xe1\x2c\x14\x07\x12\x83\xfb\x9e\x5a\xfc\xe6\x57\x23\x6c\x1d\x23\x5e\x27\x4e\xcb\x11\xb3\x31\xc6\x9d\xea\x56\x61\xe3\x42\x72\x5f\xd6\x0f\x33\x92\xe6\x9f\x61\x61\xa1\x38\x90\x18\xf4\x9b\x18\x7b\x5f\x9b\xf1\x36\xab\xa1\x7e\x41\xa3\xd0\xb9\x8f\x9a\xc6\x79\xd0\xed\xe3\x2b\x14\x5d\x17\x60\x13\xd3\x4c\x85\x09\xa4\xee\x87\xe2\xc0\x77\xcc\x82\x98\x3a\xde\xfd\x08\x35\x0f\x42\xde\x0a\xcf\x57\x34\x7e\xa5\x16\xa7\x6f\x4a\x3c\x99\xe7\x24\xf7\xa7\xe9\xde\x27\x8d\x43\xc0\x6c\x83\xe2\x40\x62\x28\x69\xc0\xa5\xb0\x3b\x77\x21\xf7\xf9\xb4\xd4\x90\xb3\x93\x7d\xbf\x4e\xd5\x31\x5c\x01\xcb\x48\x37\x48\x44\x9f\x96\xe9\x6a\xf4\x02\x16\x16\x8a\x03\x89\x41\xea\x2f\x55\x11\x1b\xdf\xd3\x38\x9c\xb0\xe9\x7e\xfb\x6b\x8d\xab\x24\x82\x7c\xad\x17\x8c\x9b\xc2\x1e\xa9\xab\x32\xb1\xcd\xb2\x67\x40\x99\x0c\x88\xe5\x0b\x5e\x0c\x87\xf4\x67\x18\x97\x3c\x86\x6d\xd8\x84\x56\x22\x96\x0b\xaf\xa8\x1f\x67\x1e\x34\xc4\x55\x6c\xed\xe6\x28\x4a\x88\xb5\xa0\xc7\x47\x01\x37\x88\x21\x38\x90\x18\x12\x2f\x59\x1d\x71\x8c\x66\x19\x48\x9c\xa9\xab\x67\x4c\x85\xe7\x9d\xd5\xa8\xbe\x77\x9e\xfb\x79\x67\xb5\x53\x58\x1c\xef\x68\x7f\x80\x85\x85\xe2\xc0\xb7\xb3\x05\x85\xef\xae\xac\xff\x29\x55\xd7\xfb\x50\xf1\x6a\xbe\x60\x17\x9d\x68\x75\x03\xef\x12\x91\xaa\x4e\x25\x29\x4d\xa2\x52\x1b\x98\x6b\x50\x1c\x48\x0c\xa8\x1a\x2a\x12\x3e\xc2\x19\x25\xbe\x4a\xe8\xee\xc6\x0b\xea\x08\x6d\xa1\x52\x93\xaf\x11\x1c\xeb\x38\x50\x4c\x02\x50\xb8\xe3\x80\xf7\x0a\x50\x1c\x48\x0c\xb2\xfc\x08\x01\x4b\xca\xc1\x75\x6a\x97\x2d\x38\x5c\x69\x9d\x64\x7e\xbf\xb2\x85\xe8\xab\x8c\x12\x9d\x06\xaa\x69\x6f\xd5\xd6\xa7\x01\xc7\x11\x82\x03\x89\x61\xb2\x0a\x95\x59\x76\x40\xd3\xb8\xd0\xc7\x51\xbf\xee\x1d\x05\x76\x7d\xf7\x93\xd2\x8c\x61\x0e\xdd\x1a\xbe\xfa\x34\xd2\xf9\x6e\xe0\xdd\x06\xd4\xc6\x02\x5e\x0c\xe7\xb9\xc8\x7f\x4e\xd4\x42\x4e\x45\x87\x79\x1c\x34\xec\x3e\x35\xba\x9f\x2b\xdc\x32\xda\x69\x8c\x7a\x17\x87\x73\x56\xae\xf6\xf2\x03\x8f\x53\x21\x38\x90\x18\x44\x38\x7e\x21\x4c\x5d\x88\x18\xba\xfc\x49\xc5\x0e\xa2\xe3\x29\x3d\xb7\x79\x94\xa9\xee\xa5\x35\x35\xf2\xce\xdd\x36\x96\x3a\x0d\xf8\xba\x82\xe2\x40\x62\x18\x60\x7e\xb6\xab\x63\x89\x89\x14\xfe\x8c\xe8\xbb\xdf\xfb\xb3\x5e\x8e\x87\x65\xc1\xd5\x23\xe9\x33\x5c\x6f\xef\x46\xd0\xf6\xd3\x01\xee\x3e\x14\x07\x12\xc3\xc1\x85\x8d\xf9\x1e\xb2\xc9\x1a\x4b\x1d\x19\xc7\xa0\xca\x0a\xc5\x98\x69\xe3\xc7\x1e\xb5\xe6\x40\xbc\xf5\xe9\xec\x04\x89\x92\x43\x58\x58\x28\x0e\x6c\xc3\xd7\xcf\x6d\xf8\xcc\x7e\x49\x3f\x47\xe0\x3c\x33\xe0\x50\x5f\x32\xbc\xcb\xc7\x9e\xdc\xc3\x88\x46\x73\x6e\xe5\x35\x41\x7c\xbc\x01\xdc\xba\x84\xe0\x40\x62\xb8\x66\xbe\x75\xb4\x28\x1a\xdb\xb6\xf5\x33\xd5\x47\x2d\xbf\xfe\x90\xee\x26\x92\xe9\x8f\xc7\x92\x8e\x50\x3e\x73\x84\x25\xcd\x7d\x17\x26\x06\xa8\x2d\x1f\xbc\x18\x56\x9d\xe2\xb6\xf6\x30\x9a\xc5\x47\x77\xb2\x17\x3e\xd4\x1b\x2c\x56\xe1\xb1\x8f\xf7\x1a\xf0\x37\x23\xb0\x6a\x7f\x5b\x53\x91\x06\x1e\xfe\x42\x71\xe0\x9a\x29\x2c\x5f\xba\xf2\xee\x0a\xce\x39\x87\x88\x7f\xe2\x74\xff\x2c\x77\x27\x0c\x11\x59\xff\xc3\x79\x40\x0f\x92\xda\xf2\xfc\x5d\x53\x6b\x58\x58\x28\x0e\x2c\x86\x09\xad\x06\x9c\x45\x4c\x96\x8e\xbc\x2d\x79\xb2\x4b\xca\xdd\x05\x43\x85\x60\xed\x67\xd2\xaf\x4e\xb2\x90\x3a\xe6\x11\x1f\x39\x00\x62\x80\xe0\x40\x62\xc8\xdb\x7c\x3c\xd6\xbf\xc1\xe7\xc2\xf2\x0e\xe5\x86\x07\xdb\xb5\x4b\x82\xb5\x18\x4b\x79\xa9\x2c\x8d\x92\x52\xf1\x5e\xfe\xda\x0d\x50\xca\x16\x8a\x03\x89\xc1\x4b\xc1\x3f\x8b\x75\x5d\x6b\xc6\xbc\x93\x4d\x3f\x99\xac\x6d\xfc\xa3\xf9\x53\x46\x4c\xbf\x95\x08\x8b\x07\xbf\x2d\x9f\x22\x35\x87\xc1\xc2\x42\x71\x20\x31\x9c\x27\xdc\x61\xb0\xcc\x1e\x95\x77\x9e\x7b\xfc\xb8\x57\x4e\x81\xec\xeb\xa6\x50\x5a\xd2\xa0\xa8\x5b\xaf\xab\x01\x0a\xf1\xf7\x8c\x38\x98\x18\xa0\x36\xe3\xff\xc7\x25\xb0\x77\xee\xa7\x2a\x89\x5f\x2b\x0a\x25\x6f\xcb\x5e\x7f\x4d\x51\x41\xf3\x1c\x93\x77\x55\xe9\x22\x63\x8c\x1b\xb7\x8b\xac\x99\xba\x07\x5c\x02\x83\xe0\x40\x62\x20\x8e\x67\xb9\x67\x6f\x61\x36\x1b\xa6\x9e\xb8\x66\xc5\x26\xa9\x16\x33\x8a\xb8\xbf\xae\x45\x14\x5e\x50\x79\xd5\x77\x3e\x6a\x0d\x24\xc1\x87\xe2\x40\x62\x40\x0f\x20\x7c\x44\x30\x96\xfa\x7e\x48\x30\xb5\xfb\xdc\xaf\xff\x4c\x5f\xc6\x44\x49\xe0\x66\x55\xfe\x5b\x94\xf3\x58\xd2\xb8\x1c\x90\x1f\x02\x8a\x03\x89\x41\xa9\x5d\xcb\xd4\xf3\x74\xfe\x3a\x42\xd2\xc5\x88\xfd\x27\x3f\x6f\x88\xfb\x5f\xca\xdd\xc0\xd8\x8e\x25\x2b\xa4\x4c\xbd\x8b\x7a\xe0\x91\x02\x14\x07\x12\x83\x8e\x34\x81\xd3\xbe\xfa\x46\xc0\x82\xe3\xb3\xcc\xef\xae\x0a\xa9\x35\x3d\x96\xb1\xbf\x10\x4b\x77\x57\x51\x96\x7b\x93\xb3\x59\xa6\x60\x61\xa1\x38\x90\x18\x64\xb1\xce\xb7\xed\x77\xaf\xe7\x5d\xc8\xf4\xe3\xfa\x57\xee\xf3\x7c\x60\x90\xc8\x38\xac\xaf\xf5\x65\x46\x24\xec\x75\x54\x60\x74\x86\x89\x01\xea\x33\x09\x5e\x0c\xa7\x51\x68\x1b\x12\xd3\x7f\x0c\x66\xea\x9f\xbd\x73\x3a\x58\xcf\xe0\x1e\x51\x9e\xe1\x14\xc7\x88\xe8\xd7\xda\xd0\xcb\xb6\x70\x01\x4e\x22\xa1\x38\x70\xa2\xf6\x0a\x4e\xd2\x9b\xe2\x17\x19\x1d\x7d\xcc\xdd\xe7\xec\xf9\xf5\x27\x65\x6f\x72\xad\x27\x82\xc3\x57\xc2\x2c\xbf\xec\x3a\xbe\xa2\x80\x85\x85\xe2\x40\x62\x08\x1f\x48\xac\x44\xc0\x94\xcd\x12\x2e\x47\x2c\x10\x15\x79\xe9\x97\xea\xfe\x6c\x03\x6f\x6b\xaa\x88\x44\xd8\x96\x52\xb2\x5a\xa9\x09\x16\x16\x8a\x03\x89\xc1\x9e\x32\xfc\x4c\xc0\x15\xeb\x89\x80\xf9\x95\x26\xaf\xc6\xfd\x05\x95\xf7\x1f\xc4\x7f\xf4\xca\x95\x63\x88\x4b\xb4\xb7\xe4\xdc\x07\xce\x4d\xa1\x38\x90\x18\xac\xe5\x2d\x42\x8d\xd6\x0b\x75\xcc\xfa\xbd\x90\x99\xaa\xef\x65\x31\x38\x22\xf1\x17\x20\xc7\x87\x98\xb4\xa9\x3f\x38\x20\x7f\x7f\x04\x0b\x0b\xc5\x81\xc4\xc0\x1f\x93\xa1\x1e\x8e\xbc\x83\x7a\xc6\xc0\xcb\x1b\x9a\x4f\x53\x94\xc5\x56\xce\xbf\x36\xe4\x81\x88\x78\x87\xc8\x53\x51\xeb\x0d\x0b\x4c\x0c\x50\x1f\xb0\xf0\x62\x68\x29\x19\xc4\xf0\xd7\xf2\x27\x6a\xd8\xdc\x37\xd2\x93\xdb\x12\x54\x61\xd3\xeb\xbc\x11\xa9\xa2\x75\xf6\xe3\xcf\x47\xc3\xb9\x71\x82\x75\x18\x8a\x03\x89\x01\xc3\x70\xfa\x7e\xcf\x3c\x55\xc4\x19\x7a\x09\xa9\x0c\x0a\xc9\xde\xfd\x84\xbb\xf3\xf8\xe5\x21\xe2\x05\x12\xdf\x0d\xcc\x18\xea\x89\x81\xfb\x4f\x10\x1c\x48\x0c\xbf\x70\x5b\x5b\xfa\x22\x18\x7c\x51\x63\x95\x3f\xe0\x4c\x70\xc6\xa3\xb3\xad\x2c\x0c\xed\x99\x76\x2c\x48\xa9\xa3\x2a\xd2\x90\x00\xa7\xfe\x50\x1c\x48\x0c\x54\x32\xf6\x55\x35\x6d\x2d\x9c\x17\xd9\x04\xfa\xf2\x3a\x1e\xde\x94\xeb\xc5\x59\x0d\x6d\xcb\xc9\xd9\xd5\x2f\x0e\xa7\xac\xde\x00\x97\x06\xa0\x38\x90\x18\x04\xd2\x54\x82\x7c\xf8\xe9\x94\x47\xff\x3e\xfa\x23\x28\xce\xa1\xc8\xed\xa8\xea\x9b\x93\xf6\x24\x41\xfe\x65\x28\xce\x77\x53\x94\x54\x58\x58\x28\x0e\x24\x06\x7f\x84\x8c\xe4\xdf\xbc\x83\x4e\x6a\xdd\xb5\x04\x8f\x6a\x2c\x04\x84\x0b\x0f\xd7\xd6\x4d\x28\xe7\x37\x44\x78\x3a\xf6\x28\x1d\x0c\x00\x0f\x0f\xea\x50\xf1\xff\x79\x78\x3e\x70\x1e\x9e\xc3\x8f\x94\x9b\xd4\xed\xed\x94\x8c\x8d\xab\xe3\x11\x97\x86\xa5\xbd\x45\xf4\x0f\x04\x7f\xa4\x0b\xee\x3c\xb3\xac\x90\xe9\xdb\x68\xfa\xf7\xa3\x17\x38\x0f\xcf\x8d\xaa\xe4\xfe\x62\xfb\x3d\xcf\xbd\xcb\xab\x17\xcb\xb4\xb2\x91\xbd\x64\xed\x1d\xcf\x3c\x95\xfc\xdf\x3e\xa3\x21\x8b\x5f\x23\xe4\xfa\xdf\x1c\xbd\x40\xfd\x61\xf0\xf3\xa3\xc4\xfa\xf5\xa7\xbd\xca\x47\x4d\x98\x3f\x0e\x25\xd1\x04\x98\xbf\x35\xf7\x15\x2a\x88\x88\xf8\x8c\x3e\x79\xbc\x63\xb2\xd4\xf8\x05\xf8\xb1\x84\xe2\xc0\x99\x3f\x37\xb1\xb5\x6e\x2f\x29\xa2\x24\x38\xfb\xbe\x38\x4b\x6c\xd9\x9e\x2b\xbd\x7f\x72\xae\x65\x15\x76\x5e\x82\x7d\x3e\xd8\xcb\x62\x00\xb8\x62\x10\x1c\x68\x7e\x90\x1f\x21\xbe\x3b\xd8\x52\x98\xf3\x28\x6c\xe3\x68\x28\x29\xd7\xb0\xf2\x6d\x28\xf1\x1d\x21\xa9\xf5\x95\xd9\xe3\x13\xa5\x42\x22\x05\x1e\x23\x42\x70\xa0\xf9\x21\x69\xfc\x7b\x33\x41\xac\xa3\x64\x32\xb3\x61\x66\x98\xb4\x26\xfb\xbd\xca\x2f\x24\x16\x19\x59\xa7\x96\x71\x06\xd7\xf9\xbd\x9a\x3c\x58\x58\x28\x0e\x34\x3f\x48\xa8\xf7\xef\xe2\x9d\xf0\xaa\xd8\x7d\x34\x43\x90\x37\xd2\xa3\x3c\xfe\x36\x29\x25\x4d\x34\x3b\xf4\xf4\xa5\xcd\x97\xb5\xd3\x6f\x40\x9a\x6e\x28\x0e\x34\x3f\x7e\x6e\xb6\x39\xff\xc2\x8c\x0a\x9f\x31\x9b\x10\x31\xbb\x98\x95\x50\x2b\x4a\x34\xa9\x75\x9b\x20\x19\xb8\x77\xda\x2f\x5b\x3c\x0f\xbc\xe8\x82\x92\xdc\xff\x91\x4c\x67\x95\xb0\xb4\x3c\xc0\xc5\x5b\xb8\xf9\xcf\x6b\x4d\x8a\x66\x75\xfd\x84\x3e\xc5\x1d\x6b\xb9\x28\x5a\x4d\xd1\x1e\x6b\x2d\x5e\xe0\xc0\x0c\x8a\x03\x89\x61\xf1\x2f\xfa\x77\xc3\xe9\xc7\x2f\x5f\x3c\x38\xcd\xd2\xe2\xe0\xbf\xa7\x11\x86\x15\x86\xad\x67\x9a\xb0\x9e\x8e\x23\x72\xac\xe7\x24\x07\xec\xce\x20\x38\x70\x72\xf5\x17\xad\x6b\xd1\x59\xe6\x0b\x77\x37\x83\x1b\xde\xd1\x9c\x3d\x20\x58\xbd\x28\x1a\x14\xdc\x61\xa9\xd6\x8e\x1f\x54\xdd\x21\xec\x87\x85\x85\xe2\x40\x62\xd0\x6b\xc2\x38\x97\x58\x91\x12\x3e\xd2\xa2\xbb\xfc\x7c\x2f\x3e\x2d\x85\xf0\x53\x5f\xe3\x49\x89\x8f\x4d\xea\xad\xa0\xf7\x69\x18\x90\xf5\x06\x8a\x03\x89\x61\x5e\xf8\xdd\x04\x06\xe1\xe6\x85\x96\x6a\x52\xbe\x46\x4e\xf3\x2c\x2f\xda\x5d\x21\x99\x5f\x4d\x55\x1f\x1f\x94\x79\x1c\x22\x6e\x03\x07\x45\x50\x1c\x48\x0c\xb7\x07\xea\x13\x5f\x74\x12\xd5\xda\x33\xf4\x36\xc7\x22\x33\x0d\x2b\x23\xf6\x4e\x45\x9b\x44\x7f\xfb\x5b\xf4\x36\x05\x3f\xb6\x5b\x80\x89\x01\xca\x0c\x82\x17\xc3\x3b\x4b\xfd\x87\xde\x55\xb9\xe9\x79\x77\xdf\x44\x14\xbf\x16\x64\x57\x35\x4e\x10\x13\x3d\x28\xd3\xd8\xb6\xc5\xbc\xc6\xe9\x0c\x04\xca\xd5\x42\x71\x20\x31\xb8\x96\x3e\x5e\xcf\x50\xae\xc0\xfc\xd8\x34\x5c\x19\x2b\xfb\x27\xfb\x71\x69\x26\x1e\xf1\xc1\xd7\x07\xcd\x1f\x84\x3f\x5d\xd1\x7b\x01\xb7\x19\xa1\x38\x90\x18\xa4\xe8\xfd\xbf\xfb\x8f\x91\xed\xd0\x6b\x96\x23\x98\xab\x57\xed\x0e\x8b\x9f\x96\xea\x1d\xf5\x73\x49\x0d\x4c\xf3\x3e\x57\x42\x67\x87\x85\x85\xe2\x40\x62\x88\x2d\xd3\xef\xeb\x6d\x23\x44\x92\x69\xa0\xbb\xcc\x48\x4c\x64\x28\x0e\xd0\xe2\x18\x6b\xfa\xec\xff\xdd\xbb\x4d\x2a\x25\x23\x07\xb8\xdf\x0b\xc5\x81\xc4\x10\xf8\x60\xdc\x91\x45\xc0\x0b\xcf\xa6\x8e\x03\x49\x75\x1d\x73\xc5\xe1\x82\xad\xac\x23\xa8\x61\x86\xbf\xb2\x25\x6d\x89\x9d\xde\x1d\xb0\x06\xb3\x19\x14\xfe\xa2\x6e\x4a\xcd\xf5\x6a\x45\xf1\xc9\x4f\xa6\x73\x59\xa7\x59\x51\x66\x9c\xfc\x50\x7f\x5a\x97\xf1\x69\xef\x88\xa2\xf8\xbf\xd6\x20\xad\xba\x05\x39\x0a\xf5\xb3\x7e\x8a\xa9\x8f\x74\x62\xb5\x0a\x1d\xad\x04\x75\xba\xef\xb6\xc7\x96\x32\x7f\x7c\x4f\xdd\x34\x52\xc7\xfd\x0f\xfa\x97\x60\x60\xa4\xf3\xb2\xe8\x8c\x55\x1a\xbb\xe1\xed\x85\xb5\x18\xd5\xb1\xb1\x3b\x77\xa9\xd4\xb3\xbe\xfb\xcf\x09\x03\xd9\xbe\x73\x81\xac\x41\xa8\xc8\xf0\xd6\xa0\x51\x55\xb6\xb2\x5b\x3f\x8f\x4f\xc2\x3c\x45\x6a\xbb\x60\x08\x69\x94\xbd\x4b\xb1\x23\x56\xb4\xa8\x97\x62\x4f\x70\x7a\xd2\xed\xf0\x7f\x50\x9e\xbe\x5b\xd6\xb8\xeb\x4f\x8f\x1d\x93\xaf\xa4\x16\x65\xfd\x7c\x25\x3e\x0a\xb6\x55\xb0\x7e\x0f\x75\xa5\xce\xac\x2a\xa8\xd0\x73\x02\xac\x41\xa8\x98\xb0\xa2\x94\x60\x6b\x70\xaf\xb8\xfa\xd1\x60\x60\xfc\xc5\xf0\xbc\x91\x38\x6d\x07\x6b\xcd\xa5\xc1\x63\xe7\x1f\x3b\x7d\xf1\x47\x6f\x4e\x72\xf7\x89\x4f\x7f\xfd\xf3\x6a\xdf\x0a\x67\x0d\x52\xca\x71\x97\x4b\x3d\x48\x2d\xf2\xbc\x53\x7f\x89\x2d\x32\xc7\x66\xc5\x16\xb3\xf8\x13\x2d\x91\xff\x0e\x27\xa5\x31\xeb\xb6\xc2\xee\xbf\x37\x09\x67\x0d\xfe\xa6\xa7\x28\xb7\x1e\x22\x54\xf6\x91\x6c\x25\xff\x5d\xa2\x61\xcc\x92\x71\x14\xf0\x2d\xd1\x62\x21\x5f\x00\xc7\xa6\xca\xf5\x2d\xca\xbf\x37\x09\x67\x0d\xda\x4f\x07\x88\xc5\xa8\x94\xdc\xd3\x77\xa0\x76\x76\xb6\x3b\xbd\xfc\x95\x50\x26\xc8\xa3\x74\x9a\xbc\xcc\xc9\xfb\xa4\x13\xdf\xe8\xf8\xdf\x9b\x84\xb3\x06\xdd\xb2\x3a\x28\xb3\xbe\x20\x1b\x14\x7a\x85\xdf\x1a\x87\x3e\x9c\x39\x79\x92\xc1\x15\xaf\x35\x95\xf8\x2a\x6f\xbb\xcd\x6f\xf9\x5a\xf0\xdf\x9b\x84\xb3\x06\xe7\x97\xc5\xf6\x96\x45\x79\xce\x6c\x50\x23\x48\x53\x59\x18\xb3\x50\x7c\x78\xa3\xaa\x98\x39\x22\x65\xa3\x93\x37\x10\xac\x3c\x5b\xfe\xbd\x49\x38\x6b\xb0\xdc\xc5\x7f\x11\x57\xae\x61\x20\x8a\x6c\xc3\x19\xf7\x23\xfe\x5b\xc2\xe7\x76\x9f\xbe\xe6\x95\x6c\x1b\x6c\x0f\xb8\xbb\x8e\x37\x8b\xfd\x7b\x93\x70\xd6\xe0\x98\x51\xe4\x00\x56\xae\x6b\x62\x7c\x8d\xf6\xe9\x33\x97\x74\xda\x92\xd3\x4c\x69\xb1\xe1\x37\xe7\xde\x27\x26\xa4\x76\xdd\x94\x72\xff\x9b\xfd\x29\xd4\x54\x84\x5f\x85\x0c\x05\x9f\x65\x92\x4b\x89\xb8\x56\xe5\x3a\xd0\x6a\x7e\x78\x97\xd7\xe2\xc9\x3f\xe9\x14\xc1\x2f\xe4\x87\x46\xfa\x67\x39\xc0\x10\x28\xec\x0d\xc5\x81\x56\x21\x15\x73\x8f\x77\xec\x37\xce\xad\xd9\x85\x15\x7c\xb3\xfb\x49\x55\x16\x9e\x8d\xed\xec\x52\x49\x86\x4d\xaa\xd8\x0f\x42\x93\xf3\x01\xc7\x11\x8a\x03\xad\x42\x9e\x8a\x34\xc8\x39\xe5\x5f\x13\x24\xfc\xb0\x5c\x90\xdc\x9a\x92\x24\xe5\xe5\x08\x57\x5d\xe4\x14\x1f\xc6\xdd\x0b\x46\xd5\x78\x03\x94\x46\x86\xe2\x40\xab\xd0\x9f\x67\x87\x8d\xfd\x59\x2e\x64\x11\x41\x2c\xf6\x44\xca\xc6\x99\x57\xab\x83\x14\xbf\x0e\xee\x44\x0d\xec\xdd\xe0\x93\x59\x26\x00\x17\xed\xa0\x38\x50\x6f\xdb\xfc\x4b\xf3\xf3\x9d\x16\xf6\x9f\x27\x21\x50\xa3\xeb\xa2\x96\x28\xc5\xde\xfd\x50\x73\xe6\x13\x47\xb5\x80\xb8\x81\xfa\xed\x92\x1e\x16\x16\x8a\x03\x6d\x49\xba\x95\x6d\x59\x42\x72\x96\x7f\x5c\x9e\xd4\xa5\x34\x8b\x47\xa0\xa8\x2e\x4d\xb9\x11\xd4\xfa\xa7\x87\x29\x5e\x0a\x7f\x31\x67\x56\x82\x6d\x49\xa0\x7e\x24\xe1\xc5\xc0\x94\x94\xdf\xf4\x8b\xa9\xce\x47\x2a\x12\xed\x02\xe7\x9a\x7b\xf0\xec\xf1\x97\x59\x8d\x5e\xfe\xb3\x11\x1b\x76\xcc\xf2\xd4\x08\xe0\xe9\x15\x14\x07\x12\x03\xbf\xb5\xb9\x08\x96\xac\x36\x45\xfc\x3c\xde\xcf\xaf\x59\x97\x47\x2e\xf9\x3b\xda\xd5\xda\x48\xae\x16\xcb\x61\x85\xe2\xbc\x3e\x40\x86\x7e\x28\x0e\x34\xbc\xf7\x11\xe9\x9b\xc5\x47\x89\x8a\xe9\x04\xb4\x5b\x28\x78\x4c\x4b\x55\x11\x03\x44\x15\x22\x85\xa3\xd0\xf1\xd4\x55\x2a\xa6\x0c\x44\x61\x61\xa1\x38\x90\x18\x8e\x9c\x31\x4a\x6e\x88\x64\x09\x86\x32\xb3\x7d\x54\x09\x84\x9f\xc5\x11\x99\x2d\xcc\xf3\x3d\x99\xe2\x5a\x1b\xb8\x6f\x5f\x34\xc0\x0b\x0b\x0b\xc5\x81\x7a\x1b\x69\xab\xe4\x38\xb7\x6d\x71\x71\xd7\xe2\xeb\xac\x8c\xaf\x4d\x74\xfc\x67\xc7\x93\xe4\x5b\x9a\x4b\x3d\xef\x5e\x3c\xe1\xdd\x71\x43\xe0\x6d\x10\x04\x07\x12\xc3\x55\x29\x5d\xec\x96\xd5\x23\xa3\xbf\x12\x38\xd3\x22\x8b\x7b\x77\x82\x0d\xf4\x57\xb6\xfa\xbd\x5d\xba\xf0\xc6\x48\x4f\xd3\x88\x9b\x61\x62\x80\x5a\xbe\xe0\xc5\x90\x5f\x39\x14\x66\x55\x5d\x4f\x61\x1c\x40\x56\x98\xd6\x59\x29\x89\xa1\x72\xda\xc9\x1c\x4f\xf4\xd4\x51\x6e\x60\xd7\xc2\x6c\x0a\x50\x2f\x14\x07\x12\xc3\xb3\x13\xba\xf5\x69\x76\x42\x7b\x75\x5a\x01\xa7\xb6\xa9\x2b\xb6\xb4\x98\x91\xcf\x26\x72\x8e\xb3\x2a\x61\xd6\xb9\x8a\xc2\x59\x40\xc6\x3c\x28\x0e\x9c\xdf\xcf\x2f\xe3\x91\xd7\xe9\x81\x09\xeb\x03\x54\xe2\xe1\xfc\x6c\x07\xea\x45\xb3\x00\xcb\x17\x78\x03\xd2\x7e\x91\x6f\x57\x9a\xbe\x01\x15\x36\xa0\x38\xb0\x01\x40\x59\x74\xbb\x6e\xfd\x6d\x6f\x10\xd5\x0c\x6d\x71\xc1\x8b\x89\x73\x13\x15\x5f\xce\x59\x8b\xbe\x58\xc7\x72\x63\x2d\xa6\x16\x70\x83\xa0\x38\x50\x6f\xdf\xba\xc4\x8c\x8e\x5b\x6c\x1c\xbe\x78\xbf\xec\xec\xe6\x7c\x66\xae\xe9\x6c\x66\x49\xcc\x19\xe9\x80\x5e\x7b\xa8\x99\x78\xb4\x02\xbc\x3f\x83\xe2\x40\x62\x60\x4e\x7b\xcc\xcf\x7d\x88\x30\xfd\xf4\x15\x52\xcd\x5b\x9c\xc7\x77\x5b\xb7\xf2\x42\x83\x1f\xe3\x8e\x2f\x57\x5a\x0f\x2a\x88\x8b\xd3\xc2\xc4\x00\xb5\xb1\x80\x17\x03\x03\x63\x8f\x53\xba\xce\x19\xda\x7c\x8b\xa7\xac\x31\xd3\x9e\x62\x80\x5a\xd8\x72\xc5\x2b\x12\x99\x0c\xa5\x38\x62\x9e\xf5\x4b\xe0\xf2\x04\x14\x07\x12\xc3\x36\x3b\xc9\x62\x89\xbf\xaf\x79\xbf\x76\x10\xf2\xad\xbc\x43\x75\x39\x83\x49\x1c\xed\xec\x73\x15\x83\x6c\x3a\x2e\xed\xfd\x9f\x7a\xb0\xb0\x50\x1c\x68\x78\xbb\x68\x50\x4b\xcb\x30\x31\xa9\x3a\x89\xa6\x75\x58\x9e\x70\x2f\xfa\x12\xfb\xdc\x21\x4d\x7f\xdb\x83\x3c\xdb\x59\xd0\xd8\x9e\x05\x5c\x8f\x84\xe2\x40\x62\xe0\xb9\x69\x12\x3d\xcf\xf2\x51\xbb\x08\x6c\x16\x17\x5d\x33\x59\x0b\xa1\x43\xdf\xbf\xfe\x89\xe4\x20\x35\x5e\x97\x78\x4d\x4d\x0e\x18\x99\x50\x1c\xa8\xb7\xe7\x4b\xa4\x9e\x85\xa7\x03\xc8\xe2\xc4\x69\xe8\x65\x16\xa4\xaa\x99\x44\x5d\xc9\x59\x3c\xf4\x53\x58\x61\xc8\x0f\xac\x1b\x87\x80\x53\x01\x28\x0e\x24\x86\xbb\x03\x12\x33\x8c\xc2\x57\xd4\x1e\x46\xf8\x7c\x29\x33\xdd\xcd\x4e\x9b\xde\xfb\xa5\x5e\x32\x3f\x69\xa5\x89\xee\x3e\xba\xd5\x29\x05\x8e\x31\x20\xb6\x7c\xf0\x62\x28\xdc\x79\xce\x94\x90\xee\x12\xf0\xed\x29\xbd\x84\xc0\x1b\x92\x97\x99\x9e\xef\xa2\x9d\xad\x76\x32\x15\x48\x6c\x07\xfd\xbf\x64\x6f\xc2\x3a\x0c\xc5\x81\xc4\x90\xfd\x81\x54\x92\xcf\xc8\x7e\x78\xa2\xc4\x6d\xaf\x78\x6d\x52\x79\x30\x81\xae\x20\x92\x6e\x1f\xc5\x52\x8f\x64\x54\xe2\x5a\x21\x09\x16\x16\x8a\x03\x0d\xef\x8c\xd3\x41\x62\x8c\xb9\x55\xaa\x26\xea\xde\xeb\xa8\x65\x16\x75\x0f\xf7\xe1\xfa\xae\x38\x4a\x25\xf1\x95\x03\x11\x8a\xcf\x54\xc0\x03\x0b\x28\x0e\x9c\x12\xa0\x3d\x08\xd9\xe7\x21\xf3\x95\x4f\x4e\x78\x96\x47\x9a\xf6\xd5\x8a\x19\x52\x6a\x86\x07\x72\x7c\xdf\x97\x12\x7f\xfc\xed\xca\x04\x20\x25\x00\x04\x07\xea\x6d\x86\x6f\xda\xf2\xca\x0b\xe9\x4f\xdf\x09\xf1\x1e\x06\xdd\x34\x49\xea\x38\xdb\x28\x96\x1d\x6d\xea\x1e\x32\xbd\xcd\xe4\x33\x59\xd3\x80\x85\x85\xe2\x40\x62\xb0\xfb\x51\xf2\x7d\xa6\x12\xbf\xc0\x9d\x3c\x49\x80\xf0\xfb\x73\xd9\xf8\xef\x0e\x48\xe2\xb2\xb8\x94\x3d\x45\x66\x0b\x7f\xbb\x9b\x04\x60\x62\x80\xda\x8c\xc3\x8b\x81\x79\x3c\xb9\x47\xf1\xd8\x36\x59\x91\xb7\x15\xc5\x11\xa5\xfe\x46\xb3\x2a\xec\x7d\x99\xf3\x21\x5b\x4e\xdd\x29\x37\x03\x55\x06\x12\xac\xc3\x50\x1c\x48\x0c\x52\x3d\xfb\xcf\x30\x1a\x22\x88\x1f\xc6\xd2\xc9\x10\xcb\x50\x6e\x36\x3e\xe6\x48\x0c\xdb\xa0\x42\x49\xa6\x69\xab\x73\xeb\xb6\x03\x2e\xa6\x40\x71\xa0\xe1\xcd\xb5\x43\xf6\xeb\xa8\x63\x8f\xc5\xc4\xfe\x65\x14\xc1\x7f\x55\xba\x8d\x29\x2e\x18\x8e\xfb\xe7\xb0\x9a\x01\xcd\xc5\x04\x65\x3b\x06\x16\x16\x8a\x03\x89\xe1\x99\x26\xbf\x40\x7f\x5b\x2e\x17\x9b\x21\x72\x52\xff\x37\xd3\x82\xc2\x7b\x38\x6a\x9b\x75\x3d\x5b\x0b\x81\x36\x1d\xc2\xb4\x88\x80\xaf\x00\xc5\x81\x7a\x8b\x80\xd9\xa4\xd9\x53\x1a\x4a\xa2\x91\x27\xf9\x82\x88\x84\x35\x33\x67\x2b\xaa\x02\x45\x3b\xd3\x3b\x05\x09\xd5\x1c\xeb\xce\x5f\xe0\xba\x3b\x14\x07\x12\xc3\xec\xfd\xc1\xa6\xbc\xcb\x3b\x15\xf6\x0b\xe2\xd7\xf6\xae\x6f\xec\x49\x35\x6c\x99\x6c\xde\x76\xeb\x38\x46\x7b\xb0\xdd\x6a\xf1\x9f\xc2\xc4\x00\xf5\x99\x04\x2f\x06\x52\x37\x6d\x97\x13\x86\x12\x47\xea\x84\x97\xaa\x6a\x6b\xd4\xac\xef\x29\xfd\x16\xb5\xc8\x2c\x66\x1f\xba\xb3\x1d\xa5\x16\xfd\x71\x87\x75\x18\x8a\x03\x89\x41\xd1\xc4\xce\xf9\xe5\x2f\x7c\x1b\x24\x9a\x3b\xd2\x98\xfa\x45\x01\xd8\xab\x85\x38\x9f\xf5\x11\xb0\xbc\xc5\x87\xfa\x71\xf1\x37\x80\xbb\x65\x50\x1c\xb8\xe8\x19\xe3\x63\x53\x8d\xd4\x33\x33\x4f\xde\xed\x98\xbd\x49\x44\x1f\x6b\x24\x6a\xe3\xfa\x4e\xe9\xad\xfa\x84\x77\xf8\xf4\x97\x3f\x80\x2b\x0e\x50\x1c\x48\x0c\x3f\xc5\xb3\xf8\xc4\x15\xc3\x19\x48\xe6\x04\xd7\xc2\x6c\x5c\x83\x36\xfb\x7a\xbe\xb1\xd9\x23\xa4\xc4\x1f\x50\x57\x08\x86\x7a\xaf\xc1\xc2\x42\x71\xe0\xca\xf9\xcc\x69\xe1\x81\x1e\x2e\x75\xee\x0c\xca\x83\x5c\xaa\xe3\x06\x0f\xef\xad\x22\xe6\x78\x11\x26\x32\x94\x0b\xc4\x6b\xbe\x1f\xff\x02\x0b\x0b\xc5\x81\xc4\xf0\x25\xb0\x31\xf1\xfb\x03\xff\xba\x2d\x7a\x29\xa7\xf7\x2a\x2d\x5e\x13\x61\x42\x8a\x68\xa1\xbd\x3b\xc4\x97\x42\x9f\xd8\x27\x78\xe8\x60\x62\x80\xfa\x80\x85\x17\xc3\x24\x8b\x75\xba\x81\x97\x2c\x5e\xfa\xdc\xdb\x04\xbe\xfe\x59\xe5\x7d\xe5\xd2\xb4\x02\xeb\x4b\x74\xab\x2a\x9a\x0f\xa6\x96\xcc\xfa\xb0\x0e\x43\x71\x20\x31\x54\x8c\xa7\xcc\x3f\x3f\xee\x19\x37\xc7\x3d\xd0\x10\xc1\xaf\xc6\x5c\x12\xf6\x1b\x2b\x7b\xb2\x1d\x77\xf9\xeb\x8a\xb1\xb5\xa0\x17\xf8\x06\x84\xe2\x40\xc3\x3b\x6c\xb4\x6a\x91\xf9\xc0\x2c\xd9\xe9\x1a\x8b\x80\x9e\x4c\x64\x66\x96\xf9\xf5\x31\xbf\x4f\xd9\x5d\x5d\x94\x37\x1b\xab\x6e\x13\x26\xb0\xb0\x50\x1c\x48\x0c\xde\x1f\x6e\x45\x67\x8d\xbe\xb9\x5c\xfa\x12\xe6\x4a\x0b\x62\x5f\x9b\xe9\x0f\xcb\x78\x3d\xe5\x96\x4a\x58\x94\x5c\x0c\xbe\x65\xff\x05\x0b\x0b\xc5\x81\x7a\x4b\x3b\xb6\x85\x15\xb8\xa5\xbe\xf4\xaa\x3c\xee\xa2\x8c\x99\x3f\x43\xed\xc7\x06\x2a\x01\x89\x2a\xa1\x01\xee\x63\x32\xa3\x7d\x26\xe0\xb4\x1b\x8a\x03\x89\xc1\x78\xf7\xd7\x72\x7e\x4d\xcc\x92\xb9\xbe\xed\x22\xd9\x7e\xad\x95\x4a\xfe\x60\x94\xa9\xf7\x3d\x81\xa3\xf3\xaf\xb4\x62\x31\xf1\x71\x80\x35\x08\x75\xa8\xf8\xff\xac\xc1\x56\x38\x6b\xd0\xb5\x34\x47\x98\x63\xdc\xf6\x46\x5d\xaa\xdc\xf1\x26\xd0\x87\x1b\xf7\x5e\xf5\x07\x1e\x94\x57\xa1\xb6\x62\x8a\xdf\x03\x37\x8f\x88\xfe\xfd\xe8\x05\xce\x1a\x0c\xda\x50\x62\x9b\x76\xdd\xb6\xfc\x16\x7a\x94\xae\xe2\x71\x4c\x4d\xa4\xbf\x23\xa1\xad\xaa\x61\x92\x78\x40\x97\x36\xf4\xcc\x70\xf8\x7f\x73\xf4\x02\xf5\x87\xc1\xcf\x0f\x14\xea\xa0\x23\xbe\xf3\x33\x8f\x71\x4d\x42\xaf\xfe\x31\x2a\x52\xe5\x9a\x7c\x77\xc7\x30\xb1\x69\x35\xf5\x83\xfd\x7d\x9f\xcc\x73\xd8\xff\x10\x8a\x03\xcd\x8f\x73\xbb\x6e\x99\xb0\x2d\x4d\xbb\x1d\xfa\xe4\xe7\x2a\x8c\xf6\x48\x84\xb9\x52\x3a\xac\x45\xcf\xf5\x47\x2a\x87\xef\xf8\xb2\xfb\x00\xbe\x02\x14\x07\x52\x9c\xf8\x8e\x79\x50\xe2\xca\xe8\xae\x05\xa1\xf9\xc0\x11\x5a\x85\x42\xe7\xec\x27\x65\x56\x7e\xd4\x17\x8a\xdd\x68\xaf\xf6\xe4\xf2\x80\x47\x3c\x50\x1c\x68\x7e\x84\x66\x38\x5d\xec\x69\xa0\x7d\x65\x7e\xb9\xb8\x56\xfb\xd5\xe5\xbd\x0d\x56\x19\x39\xc5\xb5\x64\x18\x73\x4b\x8e\xce\xdc\x64\x0e\xf0\x81\x05\xc5\x81\x7a\x3b\x2e\xef\x5f\xc1\x11\xfe\xf9\xd6\x79\x3b\x6d\x85\xf0\x12\x45\xc4\xc4\xf5\xf6\xbd\xa5\x2e\xd5\x6d\x79\x1c\x02\xc6\xef\xd8\x3e\xa0\xf0\x24\x14\x07\x9a\x1f\x13\xc6\x45\xea\x46\x2c\xb5\x63\x47\x0f\xac\xca\xe8\x85\x56\x5e\xec\x89\x6a\x61\x56\xff\x46\x37\x10\xc5\xdc\x3f\xca\x49\x38\xbc\x81\xfd\x58\x42\x49\x0e\x5e\x0c\xe1\xb3\x13\xd1\x93\xb7\x2b\x1f\xcb\x97\xa2\x3f\x11\xdf\xe5\xa1\x10\xfe\x78\xdb\x23\xf9\x26\xaa\xf6\xf8\x3e\x7d\x8f\x91\xa9\x82\x2c\x70\x4d\x05\x82\x03\x89\xa1\x7b\xa4\xda\x2e\x97\xc8\x3b\x40\x8b\x46\x6a\x6e\xe8\x46\xd3\xd3\xc8\xb8\xb6\x79\x49\x9b\x5a\xaa\xe6\xf2\x25\xcf\xf6\x2f\x54\xa0\xaa\x00\x14\x07\xfe\xb1\x44\xce\x96\xfb\xda\x61\xdf\x7e\xfb\x9e\x4d\x95\xb4\xcb\xda\xfb\x71\x9c\x02\xa3\xf4\xd7\x07\xb5\xae\x4a\x84\x03\x81\xae\xa9\xc0\x07\x16\x14\x07\x12\xc3\xad\x35\xfd\x1e\x3a\x81\x02\x57\xa9\x09\x12\x06\xea\x6a\x80\x7c\xc2\xd2\xeb\x9d\x57\x71\x1f\xec\x59\x69\x16\x83\x1f\x0f\x86\x02\x05\xce\xa1\x38\xf0\xe7\xe0\xa4\xec\x14\x4e\xd1\x09\x73\xb3\x8d\x8f\x66\xe9\xca\x3a\x22\x8a\xf5\x15\xe6\x78\xfc\x4f\x99\x89\xc0\x9a\xc7\xb1\x86\xa9\x5d\xc0\xe7\x20\x04\x07\x4e\xbe\xe0\x26\xa9\xb2\xfe\xea\xda\x7e\xbc\x3c\xae\xe5\x53\xac\x80\x1d\x91\x14\x42\xe1\x83\xac\x37\xc4\x83\x8e\xa3\x7b\xa5\xb4\xa7\x59\x30\x31\x40\x99\x41\xff\xc7\x15\xfd\x0b\x29\x0d\xd7\x9c\x46\x44\xb3\x39\x47\x81\xaa\xd0\x3c\x76\x8d\x2f\x4f\xf5\x51\xd6\x26\xd0\xaa\xda\xb8\xd8\xb8\xbc\x74\x06\x81\x2b\xfa\x10\x1c\x48\x0c\xa8\x2d\x99\x89\xec\xe1\x01\xae\xb6\xd1\xce\x21\x23\x6a\xfe\x9f\xd2\x36\x54\xa6\x8c\xf2\x0c\x5a\x67\x74\x1d\xa7\xa8\x3d\xa5\xf7\x80\x7b\xce\x10\x1c\x68\x78\x99\x19\x88\x3a\xb8\x30\xb5\x9f\x66\x07\x5d\xf5\x46\x45\xb2\xa8\x1f\x89\xaa\xc4\xb1\x07\xee\x57\x0a\x5a\xac\x08\xd7\x3f\x0f\x03\xb2\xde\x40\x71\x20\x31\xc4\x58\x09\x07\x0b\x21\x7b\x27\xd0\xe0\x97\x60\x6f\x2b\x18\x19\x27\xa0\x79\x4b\x60\x3e\xc8\x21\x1d\xa0\x69\x7e\xd6\x28\xa6\x6d\x0c\x0b\x0b\xc5\x81\x7a\x5b\xa0\xa6\x75\xf8\xb7\x09\x05\xd5\xa6\x9f\x25\x52\x14\x3b\xb9\x95\x6c\x47\x16\x2b\xec\x47\x8a\x4a\xbf\x70\x7b\xa6\x2e\xea\x7e\x10\x60\x0d\x32\x3e\xfd\x89\xfc\x4b\x2b\xb4\x02\x7d\xd0\xe3\x32\xdf\xe9\xb0\xdf\x63\x5b\xb7\x1e\x47\x46\x68\x66\x4f\x74\x35\x85\xfa\xa1\x5f\xdd\x7f\xad\x41\x06\xa1\x78\x66\xaa\x07\xbf\x6c\x43\x57\x75\x56\x27\xdc\x6b\x49\x17\x5f\xb8\x39\xd5\x0f\x8b\xdc\xdf\xb3\x4f\x4f\xb5\x96\xa9\x9c\xfc\x0f\xba\xf3\x29\x87\x9a\x7c\x8d\x7a\x1c\x5b\xfa\x94\x21\xfd\x89\x6e\xa1\xc7\xc1\x68\x78\xcb\xb7\xf3\x5f\xf5\xf3\x63\x97\x16\xdc\x18\xb4\x20\x6b\x10\x2a\x32\xbc\x35\x18\x35\x8b\x63\x38\xdb\x89\x95\x37\xb7\x9a\xac\xb7\x5d\x64\xbc\xe2\xde\x25\x98\x53\xd4\xad\xc7\x7c\x4e\xa6\x14\xb9\xa2\x71\x15\xf0\x5f\x87\x3f\x8d\x30\xa3\x7d\x77\x3c\xfd\xa5\xc5\xf2\x44\xf8\xcf\xc4\x90\x84\x5f\x06\x1f\x09\x22\xac\xdf\xfe\xb8\xaf\xfc\xf5\xb5\xef\x20\x07\x60\x0d\x42\xc5\x84\x15\x05\xfc\xff\xb1\xf6\x96\x51\x59\x7c\xdf\xff\x37\x0d\xd2\x48\x49\x83\x48\xb7\x28\x2d\x1d\x2a\x48\x4b\x87\x74\x48\x77\xb7\x74\x83\xb4\x74\x77\x83\xd2\xdd\x25\x20\x48\x4a\x08\x22\x92\x02\x12\x02\xf7\xa3\x6b\xfe\x9f\x35\x7c\xd7\x9a\x7b\x2d\x7f\xcf\x5f\x6b\x9f\xb9\xf6\xf5\x3e\x73\xce\x9c\x7d\xf6\xde\x2f\xc0\xfd\xa0\x19\x34\x33\x49\xec\x49\xb0\x9d\xf9\x53\xd5\xb9\xd3\x3b\x1c\x51\xb3\x8d\xa8\x6f\x1d\xbc\x12\x4d\xdb\x3e\x39\x4a\x71\x72\xc3\xff\xf3\x6a\x0f\xf7\x14\xbc\xda\xb3\x2b\x62\x3f\xd6\xed\x7e\x49\xcf\xf5\x3a\x2c\xcf\x6c\x7c\x5f\x03\xdd\x23\x68\xea\xf0\xb5\xb4\x2b\x73\x30\xea\x23\x57\x2d\x71\x9b\x7f\x1f\x52\x09\x3c\x64\xd3\x1e\x7b\x91\xe7\x23\xce\xca\xb0\x67\x7d\x6a\xaf\xdf\xb5\x3f\xdd\xbc\x0d\x4a\x49\x62\xc0\x6d\x80\x37\xd9\x13\x94\xdf\x4c\x0d\xf8\xf7\x21\x75\xc1\x43\x5a\x58\x1c\x95\xed\xb2\x9a\xf4\x55\x71\x29\x7e\x7e\xfc\xc8\x63\x14\xfb\x97\x4c\x7f\x56\x21\x87\x2e\x4d\xd8\xd1\xe7\xf1\x62\x1c\xe3\x7f\x1f\xd2\x1d\x3c\x24\x19\x2e\xd9\xf0\xa3\xa4\xfe\x26\x23\xfc\x2f\x31\xa7\xbe\x86\xe3\x9b\xd4\x8e\x9f\xcb\xca\x4b\xbd\x29\xbe\x3d\x9e\xec\xfa\x75\xa8\xfa\xef\x43\xbe\x07\x0f\x59\x78\x74\x92\x1f\xe2\xfe\x1e\xbb\x4a\x33\x84\xe0\xe9\xf8\xcd\xe5\x7a\xc2\xd2\x42\x18\xeb\x07\xb2\xe2\x70\xbf\x3f\x98\x55\xad\x91\xff\x3e\x64\x0d\x78\x48\x49\xda\xa3\x48\x9e\x47\xac\xfe\x4c\x7d\x12\xe8\x84\x13\x91\xd9\xbd\x56\x3e\x1b\xb9\x89\xbb\xdd\x93\xe4\x38\xf3\x82\x9e\x9e\xff\x9e\xa8\x08\xd7\x06\x1e\x72\x8c\xc4\x7e\xd4\xeb\xb6\x20\x8f\x20\xa6\x65\xe7\x6f\x40\x44\xef\xa4\x03\xe9\x53\x57\xcd\xe6\xe5\xbd\x97\x98\x82\x9d\x9f\x3b\x58\xfe\x6f\xf6\xa7\x50\x53\xf1\xee\x2a\xc4\x4a\x31\x6c\xa6\x97\xda\xc5\x2a\x62\x67\xc1\x7b\xbb\x73\x41\x80\xe2\x1f\x13\x5e\x48\xe8\xbe\x51\x40\x44\x75\x43\xf8\x4e\x14\xe8\xd1\x05\xc5\x81\x56\xa1\x20\x03\xb1\x60\x45\x8b\x9c\xcd\x71\xdc\xb0\xfb\x68\x54\xec\xf6\x57\xd1\x39\x46\xdc\x78\x39\xdc\xdb\x98\x1f\x13\xd9\x1e\xeb\x00\x3b\x3e\x28\x0e\xf4\x5e\x47\x47\x33\x6c\x7e\xaa\xa7\xac\x48\xe9\x35\xb7\x33\xf2\xfb\x53\xc2\xd8\xfe\x5f\x5d\x75\xdb\x76\xf4\xa4\x75\x61\x5c\xb8\xc5\x60\x20\xa3\x0b\x8a\x03\xad\x42\x36\x17\xf1\xf0\x78\xc7\x7a\x73\xaa\xcd\x6d\x0c\xa6\x9c\xdc\xa8\x8d\x92\xc7\xc2\x2c\x8f\xf9\xcf\x09\xe3\x95\x7b\xe3\x05\x44\xfe\x5f\x63\x74\x08\x0e\x64\x56\xab\xff\xed\x80\x04\x93\x49\x4b\xd9\x5f\x79\xd6\x5c\x67\xd7\x05\x67\x25\xe9\x28\x0a\xfc\xbf\x1d\xc7\x72\xac\xae\x82\xad\x52\xd7\xc0\xa5\x6f\x08\x0e\x54\xd6\xfa\xa4\x9a\x8a\xd8\xf2\xd4\x29\xb7\xe8\xfe\x5e\x15\x5e\xf0\x21\x6b\x44\x89\xc0\xeb\x3c\xee\x97\x8e\x51\xbb\x15\x2b\x1a\xd4\x96\x1f\x60\x5b\x12\xa8\x97\xe4\x5d\x31\x9c\xf7\xb0\x15\xa0\xfc\xdc\x6f\xd0\x0a\xc0\x65\xce\xca\x3c\xa2\x6c\x89\xb8\x99\x51\x32\xf5\x68\x42\xe5\xaa\x34\x10\x9a\x13\x05\x5a\x39\x42\x71\x20\x31\x50\x8c\xad\x71\x1c\xce\x4c\x7d\x28\x11\x4f\xfe\x65\x1b\x9f\xea\xe8\x90\xb8\x34\x56\x5f\xcc\x4e\x06\xa7\xa2\xfd\x20\xc6\x3f\x5f\x1c\x66\x16\x8a\x03\x89\xa1\xa4\x24\x31\x79\x76\xad\x6d\x5a\xd5\xba\xc7\x46\xe6\x8f\x66\xd2\xc2\xd4\x71\xfb\xf3\xb6\xe1\x0f\x08\x85\x3b\xa2\x27\x11\x55\xf3\xc0\x09\x35\x04\x07\xfa\xd7\x08\xd7\x4b\x1e\xec\x72\x78\x9c\x28\xb0\x0d\x04\xc8\x65\xeb\xa3\xba\x5c\x2d\x1a\x72\x33\x05\xee\x58\x29\xb4\x97\xf3\xc1\xa7\x01\x5b\x12\x28\x0e\x64\x16\xee\x89\xba\xb0\x62\xfd\x98\x46\xd2\xbe\x4f\x79\xfb\x1c\xb1\x08\x9d\xed\x7d\x5b\x34\xa9\x4b\x55\x99\x3f\x6f\x97\xfd\xd3\xf7\x80\xca\x29\x50\x1c\x48\x0c\x9a\x2b\x1c\xe8\x9d\x84\x3f\x7a\x7d\x06\x44\xa2\xe1\xab\x45\xf4\x24\x12\x27\x35\xf7\xb4\xaa\x52\xeb\xaf\x44\xd9\x9d\x5f\xb5\x77\xc0\xc4\x00\xb5\x7c\xdd\x15\x43\xce\xd2\x0a\x3e\xdd\x44\x2c\x92\x25\xe9\x26\x8e\xe0\x55\x77\x40\x36\xce\x3b\xb4\xbf\x7a\xc8\xf0\x88\xa5\x1e\xaf\x7f\x58\x54\x03\xd5\xcc\xa0\x38\x90\x18\x0a\xbd\xda\x7e\x66\x7f\x4d\x85\x6b\xa3\x62\xe8\x08\x7f\x67\xe5\x50\xfd\x96\x4e\x97\x28\x66\x8c\xc3\x5e\xcf\x55\x5c\xde\xc3\x2f\x17\x66\x16\x8a\x03\x89\x41\x23\xad\xe7\xaa\x65\xc6\xf1\x15\xc7\x8e\xbc\xd4\x24\xa1\x5f\xe3\xe2\xde\x16\x8a\x77\x70\x1b\x9f\xda\x2e\x16\x7f\x21\x0a\x22\x70\x4d\x14\x8a\x03\xfd\x6b\x8b\x28\x2a\xf7\x86\xa8\x29\x42\x0a\xb2\xd9\x25\x54\x26\xab\x7c\xcf\xd1\x7b\xb8\xbc\xed\x93\xaa\xb1\x18\x74\x6d\x07\x90\xb1\x80\xf6\x72\x50\x1c\xc8\x2c\xd7\x2c\x3b\xa3\x08\x46\x5d\x02\x17\x9e\x86\x34\x5e\x32\x26\x89\x27\x6d\x95\xb0\xe4\x13\x53\xa7\x8a\x81\x76\xc2\x55\xfe\x4c\xa0\x37\x15\x14\x07\x12\xc3\x2b\x4d\xe9\x82\x80\xcb\x77\xe8\x09\xcc\x7e\x4c\xf3\x96\x26\xb3\x31\xbf\xaa\xcd\x3a\xe1\x4f\xd8\x6a\xed\xd1\x2d\x90\x53\xea\x81\x32\xb0\x50\x1b\x8b\xbb\x62\x10\x6b\x4e\x89\x1e\x25\xe9\xda\xd5\x68\x41\x74\xf6\x1f\xb9\x68\x2a\xf5\xc0\xed\xb8\xdd\x62\xb4\x8f\xad\x6a\x42\x7c\xc1\x4e\x0f\x34\x97\x80\xe2\x40\x62\x90\xab\x3f\xb1\xe0\xf7\x38\xb2\x9f\xb9\xd7\x17\x55\x48\xa0\x5f\x44\x62\x3b\xcf\xe8\x56\x3b\xae\x52\x86\xca\xf6\xfa\xe3\xe1\x1c\xd0\x29\x13\x8a\x03\x89\xc1\xc8\xf8\xd7\x0d\x9a\x70\xae\xc4\x73\x76\xbc\xec\x9a\xbd\x47\xdf\x3e\x32\xee\x86\xde\xc7\xb1\x70\xfb\xf8\x3b\x77\xe1\x73\xf4\x57\x3b\x98\x59\x28\x0e\xf4\xaf\xbd\x60\xc1\x42\x4e\xf2\xd5\x5a\x6f\xe3\xeb\x25\x55\x2a\x9e\xc0\x7f\x98\x7a\xea\x75\xd5\xdd\xd0\xfa\x79\x4f\x59\x04\xd9\x81\x0e\xf8\x20\x86\xe2\x40\x66\x71\x02\x96\x73\x18\xb1\x6c\x65\x9f\xdd\xd6\xb1\xa8\x6c\xcc\xd4\x39\xea\x73\xa4\x0b\x19\x54\xdb\xbf\xad\x6a\x99\x9a\xec\x8c\x05\x34\x06\xc5\x81\xc4\x80\xc1\x31\x78\x82\x38\x72\xa5\x98\xf0\x62\xa3\xe4\x4a\x8c\x67\x64\xe9\xa9\x41\x33\x8e\x44\x12\x8f\x2f\xaf\xab\xde\xc3\xc5\x28\x5d\x98\x18\xa0\xb6\x7c\x77\xc5\x40\xf2\x69\xef\xf9\x17\x31\x94\x22\xb8\xc0\x81\xd8\x6c\xfb\x8f\x7e\xf7\x39\x58\xa7\x44\x7f\xb4\x0e\x74\xff\xfe\x78\x44\x42\x90\x08\x24\x8a\x41\x71\x20\x31\x3c\x4e\x41\xc7\x32\x8e\xca\x4c\xb6\x0a\x76\xaf\xf4\xe7\x51\x55\x9e\x95\x24\x20\x97\xdd\xc3\x95\xea\xf8\x91\xa2\x23\xff\xb4\x1a\x28\xb9\x0c\xc5\x81\xc4\x70\xb9\x22\xe1\xd2\x99\xe6\xd3\xd8\xc9\x68\xfe\x11\x6e\x88\x33\xf9\x2a\xcd\x7c\x76\xdc\x2a\x2d\xac\x56\xfc\xed\xe9\xa9\xb2\x12\x70\x8a\x0a\xc5\x81\xfe\x35\x93\x6a\xee\x95\xe1\xc1\xec\xdb\xd0\x3c\xee\x2c\x9f\x1b\x29\x25\x15\xc3\x7c\xd2\x35\x2d\x7a\x63\x99\xa0\x5b\x37\x5b\x14\x5a\x20\x24\x06\xc5\x81\xcc\x0e\xfc\xac\xbe\x7d\x9d\x5c\x62\x68\xdc\xec\x50\xb4\x42\x49\xa1\x3a\xa9\x9c\x75\x25\x8d\x61\xf0\x63\x6b\x76\xbe\x7b\x37\xd6\x36\x13\x66\x16\x8a\x03\x89\x61\xa5\xda\x3f\x44\x48\xb0\x26\xd9\x07\x41\x13\x5e\x82\xad\x09\x27\x67\xcc\xdf\x49\xf1\xcd\x2b\x39\x41\x84\xeb\xe1\x31\x92\x6f\xd5\x30\x31\x40\x6d\xc6\xef\x8a\x61\x43\xdc\x95\xa3\x4d\xd7\x32\x90\xbf\x9a\x06\xf5\x23\xd3\xf0\x55\xc9\x73\x91\xfb\xdf\xc6\x7c\xa6\xf6\x89\x71\xc9\x50\x6d\x47\x76\x61\x0f\x0c\xc5\x81\xc4\x90\xf7\x67\x93\x79\xa1\x09\x33\x2e\xdc\x3c\xf3\xa5\x61\x83\xcb\xef\x07\xd2\x54\xa8\x3d\x35\x05\x4f\x2a\xad\x4a\xfa\xe4\xbf\x8b\x01\x0d\x38\xa1\x38\x90\x18\x0a\x3a\xf2\x28\x4f\x73\xd7\x4d\x6f\xa5\x9a\xe7\xff\x3e\x30\xb6\x5a\xd2\xe1\x5e\xa8\x25\x93\xfa\x9b\xdb\x40\x1c\xfd\x99\xff\x33\xf0\xc2\x81\xe2\x40\xff\x9a\x0c\x8a\xab\x9f\x62\xad\x5c\xa3\x76\xfc\x85\x61\x13\xd6\x86\x68\x9e\x35\xab\x7c\x5a\xd0\x88\xc8\x52\xd2\x2b\xfb\x96\xd2\x79\x38\x98\x59\x28\x0e\x64\x56\x58\xd5\xbd\xb8\x14\x81\x6a\x03\x85\xf0\x0f\xa1\x22\xf5\x95\x4d\x9e\xe0\xc3\xbe\x47\x04\xec\xb3\x4f\xe4\x36\x75\x0d\x4d\x4d\x80\xb6\xc7\x50\x1c\x48\x0c\x26\xba\xa6\xac\x81\xe6\x8a\x0c\x43\x85\xe3\xd9\x19\x3b\xb5\x3a\x4c\xbf\x4e\x90\x9d\x3f\xb8\xde\x66\x9b\xff\xc8\xa8\x9c\x7f\xf3\x00\x26\x06\xa8\xcf\xa4\xbb\x62\x18\x30\x8a\xd0\x86\xc7\x3a\xa7\x58\x94\xf2\x52\x52\x81\x87\x2b\x96\xf0\xe5\x99\x56\x17\xf5\xe4\x2b\xa7\xca\xee\x38\x53\x95\x07\x3a\x44\x42\x71\x20\x31\x98\xf2\xf9\xab\xd7\xa8\x9b\x69\x6f\x67\x9a\xe2\xd0\x3b\xf4\x93\x78\x61\x63\x98\x93\x5e\xf6\xc8\x9e\x24\x5c\xce\xc6\xf4\x4c\x02\x05\xff\xa1\x38\x90\x18\xec\xd1\x38\x1d\xd2\xb2\x27\x17\xf1\x48\x9d\x88\x18\x4c\xdc\x58\xaa\xc2\xc5\xef\xfd\x1a\x1a\x38\x62\x0b\x1e\xe0\x93\xf5\xf4\x01\xae\xac\x41\x71\xa0\x7f\xad\xb9\x4c\x46\x25\x42\x6b\xf1\xcb\xf6\xaf\x8c\x6e\x01\xa5\x15\x9a\xac\x0e\xf5\x5d\x59\xea\x03\x4c\xe7\x62\x25\xdc\x57\x67\x71\x6e\x30\xb3\x50\x1c\xc8\xac\x74\x0a\x12\x35\xa9\xf5\xad\x55\x1b\xbe\xfd\x9f\xb4\x9f\x4d\xfc\x9d\x09\xf8\x8a\x5d\x83\x11\xb3\x3b\xc3\x28\xfe\xfb\xb7\xa4\x40\xa7\x20\x28\x0e\x24\x06\xee\xad\x36\x57\x95\x88\xd9\xd7\x1c\xbc\xf9\xe3\xdf\x6e\x96\xea\x82\xc4\x50\xc4\x1e\x9a\x39\xfb\x10\x8c\x3c\xc8\xee\x09\x4c\xb5\x84\x89\x01\xea\x03\xf6\xae\x18\xc4\x9b\x10\x0f\x44\x37\x68\xde\x3a\x3f\x29\x96\x61\xfb\xc0\xc0\xd0\xf1\xf2\xb3\x58\xfa\x0e\xbd\x66\xe4\x50\x41\xd2\x19\x1b\x1b\x1a\x10\x4c\x80\xe0\x40\x62\x60\x8a\x70\x68\xe2\x0b\x11\xdf\xa1\x0e\x6b\xa3\x2d\xaf\xee\x7d\x56\xc0\x8e\x23\x54\x85\xa5\x2e\x8a\x5e\xbf\x24\x30\xa5\x58\x01\xbc\x19\xa0\x38\xf0\xdd\xb2\x57\x74\x7b\xf6\xd7\x31\x25\xaf\xe4\x8f\x94\xd9\xd7\xca\xcf\x39\x83\xe4\x1f\xe2\x67\x3c\xfe\x43\x1d\xdf\xf2\xe3\xc1\x9b\x6a\x75\xe0\x6e\x19\x04\x07\xfa\xd7\xf6\x1f\x0d\xf4\x66\xbb\x4f\xa8\x17\x91\xbc\x15\xef\x9a\xfd\xac\x6a\x67\x7f\xcd\x78\x9d\xd7\x82\xe0\x6f\x2b\x9f\xf7\xea\xf0\x07\x90\x4f\x0c\xc5\x81\xcc\x3a\x55\xf1\xc1\x91\x06\x8b\x6d\x89\x0e\x17\x37\x6f\x2b\xde\x23\x0d\xe5\xff\x7b\xaf\x6e\x7a\xa4\x91\x30\x5a\xea\x80\xed\x6f\x13\x12\xcc\x2c\x14\x07\x12\x03\xeb\xbc\x99\x77\x87\x2f\xf3\xd1\x43\xd7\xdb\xfc\x76\x74\x7a\x51\xd7\xce\x8a\x2f\x82\xf3\x6b\x74\x2d\xaf\x45\xcd\x8a\x1c\x92\xa4\x80\xd0\x20\xd4\xa1\x22\xac\x29\xe0\x57\xf0\x39\x48\x16\x3c\x13\x11\xfb\x28\xf2\x68\xdd\x2f\x8c\x17\xbb\x6a\x1e\xc8\x0b\x44\x96\x3b\x28\x43\x3f\x73\xc8\xf9\x51\xe3\x07\xa4\xd9\x3b\xff\xfd\xe8\xe5\x14\x3c\xe4\xf6\xb3\x1e\x87\x23\xe5\xa3\x07\x79\x08\xe8\xfd\xd5\x7e\x07\x74\xc5\x1d\x48\x25\x31\x2a\xa1\xa4\x31\x9a\x11\x6b\x51\x5b\xcc\xcd\xff\x37\x47\x2f\x50\x3f\xec\x7f\xcc\x0f\xf8\x5b\xb1\xdd\x4b\x87\xe9\xb8\x59\x7c\xe6\x35\x3f\xa3\x1c\x7a\xe3\x11\xba\x79\x24\x2e\x4b\x92\x9d\xe9\x10\xac\x98\x33\x67\x60\x7e\x40\x70\xa0\xf9\x61\xa9\x16\xba\x5b\x9f\x45\x5c\x3a\x3a\x73\xb9\xc1\x78\x81\x66\x35\x16\x32\x2a\x41\xcd\x9f\x89\xa6\xce\x6a\x39\xd1\xfc\xd0\x08\x1d\x66\x16\x8a\x03\xcd\x0f\x63\xa1\x49\xef\xc9\xd5\x38\xb3\xdc\xee\x5f\x2c\xc8\x8c\x42\x11\xfa\x23\x86\xf5\xeb\x59\x73\xdd\x0d\xea\xac\xdf\x2d\x0b\xd9\x7d\x60\x66\xa1\x38\x90\x90\x73\x5c\xdc\x33\xee\x3d\x7a\xa0\xc5\x55\x6a\x1c\xf5\x54\x06\xc5\x70\x39\x1d\x3f\xfe\x01\xe7\x7b\x95\x72\x81\xb1\x65\x8d\xa6\x00\xa0\x7e\x0a\x14\x07\x32\x2b\xb8\x33\xc4\x75\xcf\x8a\x02\x71\xab\xee\x95\xca\x6a\x91\x31\x9c\x12\xd2\xba\xf8\xf1\x5c\x8a\x65\xa8\x3b\xc7\xcf\x5c\x31\x4f\xa0\x63\x03\x14\x07\x9a\x1f\xe8\x93\xc1\x5d\xf3\x63\xe6\x16\xd9\x0f\x83\xba\x0e\x9a\xc9\x83\x65\x71\xe5\x1f\x92\x96\x9d\xe9\x22\xf8\x91\x55\xd6\x1f\xa6\x7f\x86\xbd\x2c\xa1\x24\x77\x57\x0c\xcd\xaa\xda\x02\xb8\xef\x83\x69\x71\xf0\xea\x69\x08\xea\x27\x9b\x36\xe5\x2c\x56\xb9\xd2\xa7\x1b\x53\xea\x96\x2e\x04\x52\x2a\x6b\x80\x45\x03\x82\x03\x89\x81\xc6\xa7\x5e\xef\xf5\x9f\xbc\x0b\xac\x9a\x65\x67\x9b\x07\x2b\xb6\x55\x7a\x3a\xde\x95\x5f\xfc\x59\xe6\x7a\x79\x7a\x83\x22\xf6\x80\xc2\xaa\x50\x1c\x48\x0c\x3f\xc3\x56\xda\x3c\x3c\x45\x6b\x97\xde\xa3\x67\x04\x96\x22\x49\x2e\x84\x2a\xca\x93\xe3\x8f\x91\xf6\x27\x2f\xfa\x2c\xa8\xc2\x03\x9d\x2b\xa0\x38\xd0\xbf\x16\xdc\x72\x6d\xac\x14\x94\x7d\x3c\xec\x56\x7c\x20\xcd\x1a\xad\x40\x26\x8f\xe5\xf4\x66\xfb\xa8\x67\xd4\xdf\x91\x42\xaf\x95\x1a\xa8\xd1\x03\xc5\x81\xcc\xd6\xa4\xec\xcd\x53\x7b\x97\xf7\x8e\x8e\xfe\xf8\x56\x64\xf7\xa4\xf6\xc7\x2d\x61\xcd\x3e\xc2\x30\x9e\x82\xe6\x90\x9f\x9e\x8e\x02\x70\x47\x05\x8a\x03\x89\x61\xc2\xed\x4c\xdf\xe6\xc8\xd5\x67\xda\x54\x5f\xc1\x3d\x60\x77\x38\xfe\x60\xb8\xf9\xd4\x48\x42\x03\x5d\x7d\xf3\x3b\xe3\xa4\xa7\x22\x4c\x0c\x50\xc1\xa0\xff\xf1\x66\xe0\x0a\xa7\xcf\x67\xc2\x48\x71\xee\x54\x3f\x08\xdd\x71\xfe\x1a\x15\x85\xc9\x55\xc6\x31\x71\xf5\xda\xa6\x18\xdd\xb0\xf6\xcf\x02\xf0\x66\x80\xe0\x40\x62\xb0\x61\x9f\xf5\x1e\xdd\x29\x71\xa4\xbd\x59\xcc\x37\xd8\x4d\xa9\xff\x8d\x4c\xe8\xf4\x75\x2f\x98\xfc\xf2\xa5\xa2\xe5\xdf\xb4\x2c\x60\xe5\x84\xe2\x40\x62\x60\xb7\x23\x7a\x90\x22\xb9\xb1\x34\x39\x64\xef\x83\x88\x8c\x5e\x2a\xdc\xa7\xdd\x4e\xab\x53\x7c\x6e\xa3\xef\x73\x6c\xd2\x28\x00\x44\x1c\xa1\x38\xd0\xbf\xf6\x51\x25\x18\x67\x42\x95\x3c\xea\x70\x3c\x45\x8e\xb2\x2f\x9d\x79\x3d\xb7\xbb\x64\xd3\xd8\x04\x6b\x17\xf9\xfe\xa5\x20\xcf\x5f\x20\x6b\x10\x8a\x03\x99\x3d\x1d\xda\xa4\x45\x99\xd6\xfe\x25\x20\xe7\x21\xf4\xe7\x24\x9f\xc2\xe4\xb3\x0e\xc7\xc4\xea\xf4\x6c\xac\xb2\x4c\x0a\xa9\x88\xec\x05\x10\x1a\x54\x53\x0a\x92\xa3\x20\xd0\xf6\xc5\xc3\xbf\xcd\xe6\x57\x86\xff\xfb\x28\xd1\x9e\x7d\xec\x5c\xe8\x46\x98\x00\x05\x1b\x31\x98\x80\xea\xbf\xa1\xc1\x0d\x85\xc5\x0e\xe9\x2e\xfb\x4a\x11\x4a\x67\xd4\xe8\xfe\x57\x41\x07\xdb\x51\x57\xe4\x63\x75\x75\x59\xec\xda\xb9\x53\x0b\x4d\x5f\xfe\x83\xb2\x25\xf2\x52\x94\x3d\x76\xec\x64\x60\x49\x9a\x22\x4d\xf6\x7d\x19\x4e\xfa\xf2\xa1\x7f\xf4\xfb\x08\x4c\x13\xed\xdb\x4b\xbf\x25\x54\x50\x68\x10\xca\xf2\xdd\xd0\xa0\x87\x6c\xfd\x21\xb2\x4e\x51\x2e\xa9\x74\x59\x5b\x25\x4a\x7f\xdc\x8c\xfa\xba\x71\x39\x45\x13\x96\x01\xe6\x84\x87\xf0\xbd\x76\x8b\xff\x9e\x24\x9f\x65\x1f\xfe\xdc\x71\x2b\x54\xee\xdf\xb7\xd5\x5a\xd6\xe4\x36\x78\x94\xf1\x3b\x58\x79\x9e\x3d\x66\xfb\x50\x4f\x33\xe9\xf2\x35\x10\x1a\x84\xb2\x09\x6b\x0a\x08\x0e\x0d\x4e\xf9\x51\x4d\x67\xa6\x8c\xd7\x35\x22\x0c\x51\x88\x3a\xdc\x54\xb2\x91\xbe\xf8\x9d\x1a\xec\x1b\xa5\x85\x27\xab\xa6\x81\x5c\xfd\x7f\xd0\x14\xf0\x4e\x68\x70\x3d\xa4\x4b\x38\x5a\xbe\x34\x3d\x9c\xa3\x3b\xf8\xd1\x86\x5d\xd3\x31\xa7\x2c\xdf\xdb\x2f\x1f\xbb\xb0\x2a\xc4\xde\x94\x6a\x48\x93\xfd\xfb\x90\x77\x42\x83\xf6\x5c\xdd\x4e\x99\x42\xe1\x04\x19\x5e\x6e\x82\x37\xf8\xdf\x9e\xeb\x9c\x4f\xf7\xbc\x75\x10\xdb\xb4\xb9\xff\x4a\xd3\xb2\x04\x13\xeb\xdf\x87\xbc\x13\x1a\xe4\x94\x92\xc4\xca\xf0\xe5\xa8\x0e\x1b\x51\x0d\xa9\x1c\xe9\x95\x57\xf3\x50\xb3\xe8\xf5\x45\x5c\x15\xd3\xa6\x9e\x7d\xd3\xd9\x4c\xf8\xef\x43\xde\x09\x0d\x22\x6e\x60\x8a\xd0\xf3\xb0\x37\x30\x48\xdb\xd5\x49\xcd\x51\x8d\x55\xc0\x13\xd9\x88\xb9\xef\xf5\x14\xe1\x09\x39\xbe\xaf\x28\xf8\xd7\xba\x97\x61\x92\xa2\x77\x42\x83\x33\x3a\x29\x75\xee\xbb\x93\x0b\xa5\x43\xb9\x9f\x1b\x75\xe2\x7d\x1d\x23\x6a\xe8\x78\xaf\x17\x17\x47\x5f\x28\xc3\x73\xd1\xc4\x85\xfd\xfb\x90\x77\x42\x83\x3f\x4c\x5d\xac\xfb\x08\xfc\x6a\xe2\xfc\x13\x6f\x37\xaf\x5f\x68\xfd\x29\xfa\x1d\xfd\x33\xd3\xf5\xf9\xd3\x7a\x2d\xb8\xd4\x2e\x93\x87\xff\x3e\xe4\x9d\xd0\xe0\x48\xd4\x96\x8b\x70\x67\x44\x74\xdb\xa6\x4c\xc0\x42\xc5\xfa\x29\xfa\xe1\x47\x59\x66\xf2\x47\x53\x8f\x47\xed\x83\x66\xf6\x6c\x3d\xfe\x6f\xf6\xa7\x50\x53\xf1\xee\x2a\x84\x40\xd3\x33\x39\xbf\x4d\x7b\x0a\xdf\x79\xcc\xcb\xb1\x4b\xc7\xfa\x7a\xe9\x8a\x96\xeb\x04\xcf\x11\xd9\xcd\x7f\xe7\xd8\x97\x4f\x12\xf6\x02\x86\xe2\x40\xab\x90\xbe\x8e\x48\x86\x2b\x47\x2b\x05\x8d\x7b\xa9\xff\xe3\xd3\xc2\x6b\xa5\x45\xef\x38\x16\x7b\x86\xbe\x7e\x9c\x5d\x62\x09\xfa\x17\x59\x30\xb3\x50\x1c\xb8\xa7\xcb\x17\x12\xff\x66\x87\x13\x61\x17\x13\xfb\xe4\xa7\x7f\xb9\x19\x5a\xdf\xde\x54\x9a\xd2\x9e\xcd\xdf\xb0\x72\x7b\xbe\x67\x26\x07\xea\x41\x41\x71\xe0\x62\xe4\x3e\x69\x3a\x5d\xbf\xe8\x17\x05\x04\x7d\x9a\x88\xf4\x4e\x28\x75\xf3\x13\x89\x4f\x99\xe6\x91\xe9\xbf\x16\x8b\x0f\xe3\x09\xfb\xc1\xcc\x42\x71\x20\xdf\x5a\x78\xb6\xd8\x7e\x4a\x59\x7f\x64\x2e\xc2\xe8\x9a\x33\x46\x7e\x3f\xd6\xbf\x8f\xd8\x3d\x9f\xd5\xc3\xc9\x73\xeb\xd5\xe5\x69\x16\x10\x1a\x84\xe2\x40\x5b\x92\xbc\x1e\xa7\x17\xf7\x38\x7f\x99\x7d\x4f\x0f\x0a\x3e\x36\xa0\x7a\x88\xa9\xc8\x02\x37\x1a\xfd\x37\xee\x49\x19\x66\x73\x55\xef\xde\x3a\x6c\x4b\x02\xf5\x92\xbc\x2b\x06\x29\x5b\x8e\xb7\xad\x99\x4f\xb2\xe7\xc3\x9d\x1e\xca\x6e\x1a\x36\xd3\x77\x47\xe0\xc9\x10\x1e\x2f\xa5\x34\xd9\xe9\x13\x7e\x1b\x4a\x07\xae\xea\x43\x70\x20\x31\x70\x12\x91\xe7\x54\x9b\xd7\x4c\xe1\x4a\x47\xe6\xba\x35\x1a\xeb\x7a\x4b\x72\xa2\x66\x5f\x09\x13\x49\x79\x0b\x85\x48\x49\x5e\x02\x45\x43\xa0\x38\x90\x18\x54\xf4\xb7\xb0\x23\x7b\xec\x8c\xd7\x73\x42\x67\x82\x33\xba\x29\x89\xdf\x26\x20\xf1\x84\x96\x87\x2e\xde\x96\x7b\xfa\x8b\x2c\x25\xc3\xcc\x42\x71\x20\x31\x50\x76\x6d\x1a\xd2\x69\xa4\x59\x65\x69\x4e\x1f\x29\x73\xdc\x5c\x5b\xa5\x3c\x22\x28\x6a\xe0\x11\xf7\xc6\x76\x55\x8a\xd0\xce\x03\x8e\x60\xa0\x38\x90\x6f\x89\xdf\x61\xd2\x23\x22\xb0\xa8\x76\xd4\x6d\x4d\x60\xfa\x2b\x30\x1b\xd2\x69\xf1\x98\xe0\x2a\x0c\xd8\xdd\xf6\x36\x09\x61\x7f\x07\x2a\x5e\x42\x71\xe0\xc6\xe8\x71\x98\x68\xb9\x1a\x99\x49\x41\x25\xe8\xfa\x54\xcd\x32\x63\xac\xa8\x09\xc1\xd2\xfc\x44\x6e\xf9\xc1\xa2\xfd\x4c\x1f\xdc\x64\x61\x62\x80\x5a\xbe\xee\x8a\x21\xd4\xc4\x63\x95\xd1\xe3\x0d\x1c\x3d\x36\x95\x99\x44\x5a\xaf\x99\x06\xaf\xc7\x33\x6d\x8c\x53\x44\x61\x11\x5a\x2f\x39\xe1\x06\x79\xd8\x03\x43\x71\x20\x31\x88\x13\x3d\x1f\xe4\x18\xa9\xfd\x9e\x1e\xe5\x34\x54\xec\x4d\xc2\x8a\x47\x45\x23\xf2\x66\x3a\xd2\x82\x4e\x97\xdc\xda\xc1\xda\x1d\x68\x3c\x09\xc5\x81\x13\x2c\x6e\x14\x33\x48\x44\x3a\x4a\xa9\x58\x9e\x27\xbf\x34\xcd\x22\x7c\xd4\x20\x25\xd9\x91\xc5\xbc\x3c\xb2\xd1\xba\xfc\x53\x53\x17\xe8\xeb\x09\xc5\x81\xc4\x20\x11\x5f\xa1\x78\xc9\x69\xdc\x78\x81\x6c\x3a\xee\xc2\x62\xd2\x15\x1a\x8e\xee\xae\xcd\x12\x13\xa8\xf9\x83\x5d\xd4\x30\xa4\x1e\x08\x32\x41\x71\x20\xdf\x96\xa2\x71\x4a\x05\xc8\xa0\x18\xbe\x8a\xdd\x08\x4f\x3e\xed\x71\xc9\xf2\x91\x73\xe7\xd2\x87\xcf\x3b\x14\x98\x7a\x95\x59\x21\x78\x03\x33\x0b\xc5\x81\xcf\x7c\x03\x72\x93\x17\xb9\x35\xe7\x45\x8a\x04\xe8\xe4\x58\xdd\x54\x35\xb7\x3f\x78\x8b\x74\xb5\xbd\xa5\x3b\xc1\x8f\x2c\xd2\x3f\xfa\x02\x13\x03\xd4\xc6\xe2\xae\x18\x02\xf2\xaf\x4b\xec\x77\x18\x88\x9f\x72\xe7\x15\x76\xcd\x5c\xfb\xd8\x29\x85\x1c\x3f\x41\x3c\x46\x1c\x17\x79\xfe\x6c\xcb\xe5\xa6\x0b\xf6\xc0\x50\x1c\x48\x0c\x87\xa6\x9b\x8b\x95\x84\x4d\xe5\x02\xad\xe5\xf4\x3d\x65\xb3\xb7\x39\x2a\xa5\x13\x5a\xf9\xd2\xec\x2c\x05\xb4\xe7\x6d\x8f\x06\x80\x8b\x29\x50\x1c\x48\x0c\xfc\x3d\x74\x33\x85\xc8\xf7\x49\xec\x78\x50\x37\x72\xbe\x5c\xb9\x9d\xba\xc7\xa2\xb9\xb6\x95\x45\x58\x28\x94\x9d\xd4\x57\x7c\x06\x92\x11\xa1\x38\xf0\x57\x45\x66\xd0\xc4\xc1\x29\x45\x23\x5a\x42\x22\x4f\x75\x49\x15\xaf\x0e\xdf\xc7\x1b\x7a\xf7\x26\x47\xaf\x8f\x23\x8f\x31\x8a\x45\x80\xa6\x0a\x50\x1c\xc8\xb7\xb9\x4a\xf5\xa4\xc1\x33\x93\x64\xf1\xb2\x6c\x4e\x92\x6f\x73\xb0\x74\x67\xf1\x6e\xd8\x7a\x3f\x62\xac\x7a\xe6\x54\x0d\x6d\xd4\xb2\x02\xd9\x72\x10\x1c\x48\x0c\x1e\x69\xd5\x45\x31\xbe\x6b\x97\x76\xd1\xed\x89\xc3\x29\xd2\xb8\x6d\x3c\xa4\x84\xe4\xc6\xa8\x2f\x26\x0f\xe5\x04\x11\x0a\x83\x08\x60\x62\x80\xda\xf2\xdd\x15\x43\x55\xd4\xcc\xdb\x4e\x22\xec\x05\xdb\x50\x65\xb2\xb7\xc2\x4d\x5f\xab\xbf\x0b\x0d\x9e\x6a\x53\xa3\x8a\x3a\x1c\x2a\x98\x34\xb7\xa1\xc0\x1e\x18\x8a\x03\x89\x81\xda\x0a\xe7\x17\xbe\x8a\x37\x0e\x77\xf4\xb9\x63\xc2\x90\xfe\xed\xd0\x0a\xc6\xce\xfb\x08\x4b\x55\x7a\xd5\x5f\x3f\x64\x6f\x45\x96\x60\x66\xa1\x38\x90\x18\xce\xaf\xd7\x94\x08\x39\x53\xd4\xe0\x86\xf5\xf1\xe2\x79\xd6\x0a\x45\xad\x93\x86\x6e\x0b\x4e\x8c\xd3\x3f\x08\xbf\xb5\xfd\xd0\x6c\x01\xdc\x77\x81\xe0\x40\x62\x68\x0a\x63\xf3\x10\xff\xe0\x89\xe5\xe8\x1e\x29\x87\xb0\xd6\x6e\xbf\x78\xa9\xd5\xf6\xac\xf0\xb1\x89\x10\x4e\xf6\x4b\xfb\xdd\x3c\x60\x71\x87\xe2\x40\xbe\x0d\xc9\xff\x9b\x22\x8a\xec\xfe\x0e\x8d\xf2\x26\xd6\xc4\x66\x8f\x8b\x65\xcd\x13\xb1\xb8\xca\xd9\x55\xf5\x1b\xe7\xc1\xb0\xb2\xe7\x14\xcc\x2c\x14\x07\x12\x43\xe1\x2f\xbc\xfb\x5a\x2f\x88\xb6\xc3\x52\x4e\x95\xd7\xb0\x5d\xc5\x51\xbd\xaa\x8b\xa2\xe1\x47\xf9\x1f\x32\x05\xbf\x0b\x3f\x4a\x06\x6e\x90\x40\x6d\xc6\xff\x47\x75\xd9\x77\x1f\x47\x4e\x14\x6f\xe1\x76\x67\x0a\x89\xbc\x48\x04\xc7\xf4\x82\xde\x1e\xe3\x2e\xbe\xb5\x25\x37\x35\x23\xf4\x29\x52\x03\xda\x85\x42\x71\x20\x31\xc8\x9c\x51\xb6\x0e\xef\xf7\x35\x4e\x79\xb1\x06\xfe\xa2\xc4\x3e\x34\xaa\xd6\xc1\x5a\x6f\xaa\x99\xda\x17\x1b\xc4\xe0\xbb\x4f\x93\x08\x04\xdb\x20\x38\x90\x18\x36\x9b\x54\x71\x58\x67\xd8\x96\x4a\xa4\x87\x49\xd2\x46\x4f\xa5\x68\xae\x1e\xbc\x27\x8f\x94\x67\x20\x7a\x6f\xef\x27\x9d\x2b\x43\x0c\x3c\x2d\x04\x07\x12\x03\x29\x0d\x22\x65\x22\x02\x4b\x58\xac\x68\xd3\x32\x6a\x5d\x34\xe2\x2c\xfd\xd4\xc3\xc5\xf0\x43\xdb\x6e\x0a\x7a\x7d\xb2\x9e\x37\xc0\x9d\x2a\x28\x0e\x9c\xab\xcd\xd1\xfc\xf9\xba\x0d\xe5\x35\x9b\x99\xe7\x8f\x17\x5e\xdc\x5f\x2c\xb2\x8b\x8e\x74\xc3\xbb\x7e\x5f\x94\x2d\x4b\xd5\x76\x7c\xb0\x06\x72\xb5\x21\x38\x90\x18\x04\xf4\xe9\x31\xe6\x50\x2d\xa7\x84\x58\x16\x04\xc2\xf9\x67\xb1\x93\xa5\x2f\xaf\xc3\xfe\xde\x53\x72\x7d\xa6\x1a\x3e\x5e\xa4\xa0\x0f\x13\x03\xd4\x67\xd2\x5d\x31\xf0\xe2\x16\x3d\x67\xb0\x60\x34\xf9\xfe\x3e\x48\xed\xa1\xdb\x1f\x73\x25\xbf\xf6\x5a\x3d\xad\x7c\x9d\x86\x7b\x5f\x84\xeb\x38\x88\x80\x2b\x2f\x50\x1c\x48\x0c\x8f\xbe\x70\x78\x91\xee\xd0\x4f\xad\x55\xc9\x4b\x1b\x9e\xf4\xf1\xdb\x24\x34\xe0\x07\x20\x7a\xc5\x56\x76\xf0\xfe\xf6\x70\xa2\x36\x00\x72\xa4\x20\x38\x90\x18\x7a\xfd\xbc\xc7\x39\x75\x3a\xa3\x2f\x5f\xa7\xb2\x97\xd5\x9e\xae\x21\xa5\xdb\x8c\x5d\x2c\xdc\xb4\x0d\xa1\xf1\x31\x7f\x6e\x0c\xdc\x07\xb6\xfd\x10\x1c\x48\x0c\x7f\x86\xbf\x94\xd8\x73\x04\x85\x61\x35\x7f\x75\x49\x75\xa1\x5f\x4f\x5d\x54\x4c\xd4\x4b\x1e\x6b\x8e\x97\xa7\x7b\x3e\xb8\x9d\x1d\x01\xa4\xed\x40\x70\x20\xdf\x6a\x2b\xb2\x1d\x10\x7a\x5a\xf1\x23\xed\x68\xa1\x85\xa5\xe5\x15\x0b\xef\xfa\xb7\x69\xce\x3e\xe1\xe9\xb3\x79\xa0\xe4\xa1\xdc\x09\x54\x5b\x83\xe2\x40\x62\xf8\x7d\x7c\xf4\x3c\xfa\x2a\x44\x3c\x2f\x10\x87\x9a\xb7\xd8\x8a\xc7\x82\xbb\x45\xfd\xd6\xd4\x9f\x5d\xa0\x13\x7e\x7e\xe1\x8b\x3f\x16\x4c\x0c\x50\x1f\xb0\x77\xc5\xe0\xa2\xe9\x0c\x6f\x13\x11\x69\x50\x5a\x10\x7d\x9e\x26\x31\xab\x59\x7f\xa4\x4b\x3d\xf4\xb4\x5a\x2e\x68\xed\xcf\xe3\x76\x5b\x37\xa0\x29\x20\x14\x07\x12\x83\x68\x6e\x96\x82\x74\x91\xfb\xe7\x94\x8a\x6f\xd1\x9d\xdf\xaf\xd2\x53\x0c\x48\x3f\x11\x3a\x3d\xb9\xa5\x5a\x8f\xaa\x21\x6d\x5b\xfa\x04\x33\x0b\xc5\x81\xc4\xc0\x75\x16\xa0\xfa\x9d\xab\x69\xf9\x77\x62\xeb\xd3\x27\xb8\xd2\x82\x02\x4b\xf8\x0d\x56\xf4\x2d\xe6\x6d\xda\x29\x2d\x3b\x71\xa8\xc0\x9e\x01\x8a\x03\x89\x41\xe4\x11\x0b\xd1\xe2\xd2\xa0\x44\x8b\x88\x55\xe3\x7d\xf7\x2a\xef\x65\x83\xee\x0d\x03\x47\x16\xc3\x69\x4a\xec\x1e\x43\x0e\x32\xe0\xbe\x0b\x14\x07\xf2\xed\x36\x65\xdb\xbc\x8b\x63\xc1\xe9\xb5\x28\xa2\x33\x17\xf5\x47\xe9\x1c\x71\x93\x3a\x8d\xc5\x54\x6f\xca\x41\x14\xd6\x8a\xef\x03\x40\x52\x35\x14\x07\x12\x83\xdb\xe0\xbb\xef\x6f\x16\xb5\xe7\x0e\xd3\x8e\x70\xa3\xf9\x5b\xcc\x15\x8c\x70\x89\x6a\x5c\xd6\xf4\x91\xf2\x45\x74\x96\x6a\x42\x9b\x81\xd0\x20\xd4\xa1\x22\xac\x29\xe0\x9d\xd0\x60\x8b\xed\xe7\xc7\x9b\x91\x14\xc7\x9b\x68\x7b\x3e\x2f\x9c\x02\x52\xd3\x7f\x33\x6b\x6b\x35\x38\xb1\xb7\x06\xa2\x27\xa5\x5a\x75\xf9\xfe\xfb\xd1\xcb\x9d\xd0\xa0\xf6\xc5\xc7\x51\x99\xe7\xaa\x5d\xb8\xed\x5e\x1d\x25\xc1\xad\x56\x28\x25\x36\x7a\x61\xde\xf8\x62\x4e\x7f\x76\xda\x1e\x7d\x0c\x9b\xfb\xbf\x39\x7a\x81\xfa\x61\x77\xe7\xc7\xfa\x6f\xb2\x87\x29\x0a\x2e\xfa\x8b\x3d\xaf\x36\xf3\x1b\x6c\x54\xd7\x56\x07\x47\x31\xe0\xcc\x5f\x0f\x28\xd7\x4f\xba\x51\xed\x02\xdb\x28\x28\x0e\x34\x3f\x02\x99\x0a\xc3\x5b\x43\xa4\xbc\x9f\x73\xbc\x89\xae\xe9\x7c\x75\xe9\x83\x7c\x6a\xf1\x9c\x7a\x58\xc7\xb8\xd7\x64\x3d\x3f\x4e\xa1\x13\x28\x67\x00\xc1\x81\xe6\x47\xdb\x4b\xdf\xa2\x7b\x52\xe1\xd8\xc9\x79\x07\x62\xe2\x32\xc5\x8f\x3f\x34\x44\x08\x7f\x6f\x2f\x27\x0b\xcd\x71\xfb\x11\x84\x3e\xa3\x06\x33\x0b\xc5\x81\xe6\xc7\xa3\x58\x9e\xa4\x7e\x64\xfa\xd1\x88\xaa\xa5\xa0\xb0\xbc\xe7\xe2\xf9\x4b\x0e\xa3\x2c\x0f\x9e\xa1\xac\x78\xd5\xc9\x32\xee\x4e\x02\x6f\x35\x28\x0e\xe4\xdb\x04\xdc\x49\xbe\x67\x39\x39\x98\xfa\xf7\x93\xec\xc2\x50\x65\xf5\x7e\x72\xa5\x3a\x65\x3f\x6e\x63\xea\x6b\x52\xec\x65\xe7\xd4\x00\x5a\x7c\x42\x71\xe0\xbb\x97\x07\x13\x6b\x6d\xbe\x69\xcd\xa7\x4c\x5c\x4e\x18\x5d\x5a\x2b\x41\xa6\x83\x91\x45\x9f\x05\x2f\x74\x3f\xf7\x3c\xd1\x5e\x1c\xb3\x06\x3a\x36\x40\x48\xee\xae\x18\x04\xe7\x3a\xe2\xb4\x25\x35\x13\xd1\x84\x57\xf8\x38\x1c\x8b\xc2\x5b\x29\x15\xfc\x90\x0f\x22\xe5\xae\xc5\x73\xd9\x4e\x4d\x66\x01\x3f\x40\x71\x20\x31\xc4\x9b\x06\x2f\x59\x85\x50\xd4\xad\xd7\x0c\x7a\x68\xea\x9f\x13\x87\x6a\x22\xb5\x87\x15\x0f\xff\xcd\xad\xa8\xb8\x7a\x03\x2f\x0f\x24\x23\x42\x71\x20\x31\xac\x35\xa4\xaa\x72\x33\x93\xfc\xb4\xc1\xa5\x38\x68\xef\x98\x62\xe6\xbd\x5d\x22\xca\xba\xdd\x5a\xdd\x41\xd1\x3a\x28\x42\x52\x02\xf2\xf0\xa0\x38\xf0\x45\xdc\xba\x5e\x85\xed\x65\xb2\x84\x02\xb1\xa9\x16\x34\x47\x8d\x70\x2a\xa5\x92\xbe\x92\x5d\x89\xcc\x71\x1d\xfe\x78\x38\xba\x34\x7e\xe0\x22\x2e\x04\x07\xf2\xed\x08\x6e\x80\x20\x73\x0a\x29\x3a\x7f\x40\xe2\xf7\x97\x11\xd9\xd9\x84\x32\x48\x21\xa5\xed\x3a\xce\xf7\x46\x46\xa4\x59\x54\x0b\x81\x12\xbb\x50\x1c\x48\x0c\x55\xe4\x43\xc4\x43\x1d\x2d\x93\xdc\xee\x43\xab\x75\xdb\x53\x67\xb3\x13\x97\x1a\xfc\x1e\x45\x89\x9f\xd2\xc7\xd7\x57\xec\x8a\x8f\x60\x62\x80\x0a\x06\xdd\x15\xc3\x4f\x91\xeb\xaf\xc3\x59\x51\x45\xbf\xc8\x43\xde\xea\x58\xfb\xcd\xd3\x93\x8b\xa3\xa6\x04\x48\xe3\xe4\x48\xbb\xf6\x4b\x1c\x6f\x03\x97\x45\xa1\x38\xf0\xdd\x4b\x3f\x82\x35\x8e\x94\x6c\x67\x4e\x76\xc2\x2d\xba\x7c\x64\x39\xc1\x1e\x0a\x87\xdf\x4f\xc4\x7e\xad\x10\x77\x65\x7e\x42\xda\x05\xb6\xea\x50\x1c\x48\x0c\xac\x9a\x82\xbc\xd8\x0d\x21\x95\x3f\x9d\xf7\x1f\x74\x4b\x6e\x54\xe6\x6d\x38\x38\xc2\x31\x48\x12\x28\x0a\x71\x44\xd8\xb9\xf7\x01\x89\xf1\x50\x1c\x48\x0c\x56\x7c\x9d\xae\xde\x84\x0e\x25\xb7\x68\x9f\x93\x4a\x8c\x0b\xc8\x65\x6d\x50\x67\x6e\xe1\xa9\xd3\x99\xa5\xf7\xe8\x1a\xd1\x3a\x49\x60\x66\xa1\x38\x70\x2e\x4c\xf5\x71\xfb\x6a\xb7\xe4\x9b\x08\x4c\x1c\xbf\x7b\xa7\xf6\xea\xa7\xf2\x51\xb4\xb3\x14\x67\xe8\x2b\xf9\x24\xd3\x5f\xeb\xa7\xb7\x80\xd0\xa0\x81\xd0\x49\x98\xf4\x68\x93\xaf\xb1\xd2\x07\x49\x05\x83\xd7\x3a\x0b\x74\xdd\xf6\xc5\x8b\x94\x86\x6a\x01\x93\xfa\x64\x26\x2a\x70\xff\x0d\x0d\xe2\xbe\x13\xde\xf3\x2e\xf8\x7b\xfd\xa1\x2d\x41\xd3\x29\xec\xe9\xaf\x29\xb1\x00\x25\x43\xf1\xe2\x87\xc4\x2f\x5e\x50\xd0\xe4\x8b\xfc\x37\x52\x73\xb6\x2b\x75\x93\x22\xda\x7d\x09\xe7\x61\x59\x46\x30\x60\xa7\x1b\x0c\x57\xa3\x75\xca\xe5\xc6\x3a\x4a\x3e\xf9\x27\xf0\x9d\xc2\x33\x50\x68\x10\xca\xf2\xdd\xd0\x20\xb1\xf5\xaf\x57\x3f\x2d\x08\x4b\x2d\xc9\x88\x64\xa3\xf9\x8d\xca\x39\xcb\x70\xff\x4a\xf0\xeb\x87\x39\x4e\xb4\x68\xb3\x35\x3b\x26\xfd\xf7\xb1\x8d\x2e\x77\x2a\xff\x3c\xb5\xd6\xdd\x71\x0f\x24\xf3\x6a\xe5\x4b\x64\x71\xef\x33\xa1\x5b\xc2\x15\x31\x9b\x90\x73\x97\xae\x56\x05\x42\x83\x50\x36\x61\xbd\x06\xc1\xa1\xc1\x96\x0b\x63\xbc\x41\x49\x44\x26\xa9\x5a\xf5\x76\x5f\x12\x1b\x7f\x16\xf4\x6b\xd2\xac\xea\x8d\xee\xcd\x37\xaa\x26\x61\x21\xd1\xff\x1e\xc1\xf2\xbb\x13\x1a\x3c\x7e\x24\x9c\xfc\xf2\xf5\x76\x47\xf8\x34\x16\xfa\x97\x3f\x58\x09\xc1\xac\x7b\x69\x8e\xbc\x7e\x32\x0b\xdc\x07\xc8\xae\x46\x88\xa2\xff\x3e\xe4\x9d\xd0\x60\x11\xc5\xc9\x28\x93\xab\xc4\x17\xad\x38\xec\x65\x45\xde\x2d\xc3\x1b\x1a\xff\xdd\x10\xe1\x84\xa9\xce\x63\x39\x6a\xd3\xc6\xc9\xda\x7f\x1f\xf2\x4e\x68\x70\xc8\x6c\x8b\x61\x8c\x6a\x2b\x15\xa3\x49\xf7\xcf\x11\x86\xda\x48\x77\xa8\x4f\xf2\x73\x9a\x57\x95\xf1\x7b\x21\x68\x82\x79\x6a\xff\x5e\xdd\xd3\xef\x4e\x68\x90\xfe\x9a\x36\xd4\x62\x2b\x50\x24\xf6\x6d\xb5\x93\xe6\x60\x96\x48\x53\xdc\xd5\x3c\xbc\x17\x2d\xf5\x57\x54\xc9\xba\x89\x23\xf8\xcb\x7f\x1f\xf2\x4e\x68\x70\x2e\xc2\xc3\xf6\x8b\x93\x4a\x2a\x99\x5c\x30\xe5\x33\xe7\xd5\x23\xe4\x7c\x5d\xf1\xea\x7a\xc9\xab\xad\x59\x99\xb5\x3c\xb4\x9c\x94\x7f\x1f\xf2\x4e\x68\x70\xe4\x65\x48\x11\x16\x8f\x3b\x6a\x3c\xf6\x16\x4f\x1c\xc7\xe7\x16\xc3\x8d\xbf\x2a\xb4\x9a\x88\xd5\x31\xb6\x3b\xec\xdb\xb6\xd9\x1a\xff\x3e\xe4\x9d\xd0\xe0\x05\x31\xeb\xd6\x59\x53\x1d\x4f\x04\xaf\xf5\x9c\x43\xd8\xeb\xc5\x47\xa6\x0e\xe2\x4a\xb5\xc7\x56\xce\x3c\x2e\x94\x8a\x4a\x5b\x7d\xff\x47\xfb\x53\x88\xa9\xf8\x3f\x8a\x83\x29\x3f\x24\xc4\xe6\x27\x2f\xe5\xcc\x5d\x8f\x6a\xff\x68\x1c\x40\x4a\x13\xf6\x8b\x1e\x5f\x74\xeb\xfd\x39\x6e\x9c\x04\xa3\x38\x70\xdc\x09\xc5\x81\x56\xa1\xc8\xb5\x7c\x5a\x09\x65\x3d\x79\x2e\xe4\x49\x3a\xbe\xc5\xbf\xa3\x5e\xb8\x26\x66\x5d\x7b\xed\xdc\x0b\x21\x8a\x44\x29\x15\xda\xc0\x71\x27\x14\x07\x5a\x85\x9e\xe1\x70\xff\x5e\xae\x51\x33\x2f\x15\xaa\x63\x53\xd1\xde\x10\x90\xac\x36\x5d\x5d\x52\x9a\x66\x68\x0a\x51\x93\x8c\xef\x79\x27\x03\x33\x0b\xc5\x81\x56\xa1\x2b\xd6\xa7\x43\xb1\x63\x2e\x52\xbf\x69\x62\x6f\xcf\x32\x6a\x11\x03\xb6\xad\x4d\x8a\x30\x08\xf4\x4d\x98\xcd\xe8\xa4\x93\x59\x80\xbe\x41\x50\x1c\xc8\xb7\xd5\x07\x64\x36\x9f\x6e\xa8\x9e\x3a\x04\xaf\xbf\xb9\xdc\xd2\xcf\xbb\x96\x71\x4b\x4c\x6e\xb7\xdc\xfa\x49\x30\xfc\xa6\x92\x98\x3a\x1b\x66\x16\x8a\x03\xb7\xfd\x75\xb0\xb7\xfe\x53\x7b\xea\x34\x8b\x36\xa3\x6c\x11\xb6\xeb\xca\xa3\xa6\x4d\xb4\x6a\xfb\xb9\x31\x7e\x9e\x31\xdb\xb1\xcb\xb7\x07\xb6\x25\x81\x7a\x49\xde\x15\x83\xd1\x9f\x61\xdf\x9b\xe4\xe8\xf4\x4b\xa2\x2c\x59\x5d\xef\xa3\xd0\x4f\x6f\xee\xf5\x0e\x29\xe7\x3c\x56\x54\x77\xa5\x7c\x96\xbc\x3d\x06\x64\xdb\x40\x70\xa0\x07\xd6\x62\x13\xcd\xb5\xe3\x6b\x44\xe1\x6c\xcb\x95\x51\x0d\xc6\x88\x33\x5f\xa1\x29\xc2\xf0\xd4\x2e\x7a\xca\x17\x82\xed\x48\x5e\x0a\x5c\xa3\x86\xe2\x40\x62\x08\x71\xab\x96\x23\x95\xe3\x8e\x35\x13\x30\xe6\x25\xec\x9e\x0d\xed\xfb\x92\x5e\xc5\xf7\xab\xa3\x27\x48\x76\x7f\x37\x52\x4c\x13\xb8\xe7\x0b\xc5\x81\xc4\xb0\x72\xdc\x46\x32\xb9\x5b\x59\xa5\xa7\x69\x31\xe0\xa9\x67\xfc\x02\x1e\x73\x7c\x3f\x14\x3b\x3d\x60\x7f\x67\xb0\xc0\x9b\x2e\x1f\xd8\x92\x40\x71\x20\xdf\x7e\xb8\x3f\xa1\x14\xc5\xab\x7a\xff\xb4\x42\x7d\x57\xc6\xa4\xd8\x88\xdc\x1e\xe7\x6d\xea\xef\xaa\xb2\x67\x31\x3c\x98\xb4\x2c\x9e\x40\x41\x16\x28\x0e\xe4\x5b\x92\xf4\xbc\xa1\x33\xba\x19\xf8\x42\xf9\x9f\x72\xfe\x4c\xd6\x6f\x48\xe5\xe0\x0c\x57\x57\xda\x8e\xe8\x27\xd0\xb3\x27\xc7\x99\x67\x61\x62\x80\x5a\xbe\xee\x8a\x01\xa3\xe6\xed\xfc\x8c\x7e\x0d\xd2\x9c\xf7\x48\xb6\x48\xb1\xfd\x4b\x7a\xbb\x14\x64\xb3\x73\x43\xf1\xf5\xfa\xbc\x28\x94\xc6\xd8\x30\xd8\x03\x43\x71\xa0\x07\xae\xbe\x7d\xc7\x45\x25\x6e\xbb\x47\x22\x93\xce\xf3\x4b\x6c\x66\x48\x2b\xc8\xf7\xd0\xa3\x18\xd7\xc9\x35\x0e\x51\x5f\xbd\x11\x4f\x05\x98\x14\x10\x1c\x48\x0c\x73\x61\x3f\xb3\x43\x0d\x1d\x56\xdb\xdc\xc4\x2d\x8e\x89\x23\x63\xe4\x59\x05\x15\x07\x7b\xd7\x6c\x89\x9e\x8c\xca\x66\x2b\xe9\x6c\xc2\xcc\x42\x71\xe0\xdc\x20\xaa\xb3\xa1\xdd\x65\x4a\xf4\x24\x04\xc9\xc6\x6e\x8a\xe7\x6d\xa1\xfe\x35\x2a\xac\x2f\x36\xf8\x6a\xdd\xe7\x86\x77\x69\xf1\x81\x0a\x69\x50\x1c\xc8\xb7\x3e\x39\x6e\x0c\xcd\xad\x2c\x3f\x2c\xbf\xc5\xa6\x60\xb8\x95\x54\xc6\xd5\x10\x98\x16\x30\x54\x35\x13\xed\x8b\x76\x05\x29\x1a\xfe\x85\x99\x85\xe2\x40\xbe\xc5\x32\xa2\x34\x30\xce\xf6\x78\x96\xc6\x47\x12\x7d\x8a\xf3\xd1\x71\xbb\x35\x36\x20\xa7\x91\xe2\x55\x9d\x4a\x3f\xe3\xb3\xd0\xd0\xfb\x30\x31\x40\x6d\x2c\xee\x8a\x41\x1b\xc9\xac\xd4\xc1\xc9\x19\x81\xed\x9b\x6c\x0b\x8d\xcf\xed\xc3\xb4\x46\x81\x91\xac\x4c\xaa\x5a\x8c\x3f\x24\x38\xa7\xe2\xcf\x80\x0e\x91\x50\x1c\xb8\x6f\x10\xcd\xe6\xf7\xed\x4d\xbb\x1c\xf9\x62\x8a\x81\x88\x6d\xfb\x5a\x33\xe2\xed\x53\x43\x01\xef\x71\x1b\x6d\x17\x75\x55\x39\xd6\x09\x20\x0b\x1c\x82\x03\x89\x41\xf3\x28\x57\x7c\xa1\xd6\x7d\x5d\x98\xdd\x6c\xc1\xbe\xac\x24\xa4\x4e\xe9\x27\xeb\x50\xe1\x67\x6c\x34\x9b\xc3\xf7\x38\xd3\xa8\xc0\x35\x51\x28\x0e\x24\x06\x22\xf9\xc1\x92\x9d\x47\xc5\xbc\xa6\x24\x6f\x74\x1f\x27\xf2\xc9\x4a\xcc\x3c\x4f\x38\x2d\x2a\xaf\xfe\x3d\x4c\xa3\xa4\x8b\x22\xd4\x02\x33\x0b\xc5\x81\x7c\x6b\x10\xa3\x88\x8a\xf2\x93\x61\xbb\x07\xd5\xa9\x77\xd0\xe7\xef\x34\x81\xb5\xd1\x17\xec\xf5\x90\xa8\xa2\xfb\x1a\xdb\x8c\x97\x99\x78\x30\xb3\x50\x1c\xc8\xb7\x83\x16\xad\xa1\x4e\x36\x35\x23\xf7\xba\xa7\xf9\xef\xf5\x26\x7f\x43\x8d\x21\x74\x7f\xf5\x39\xf5\xd3\x7a\xbb\x2d\x1a\xa2\x44\x11\x32\x4c\x0c\x50\x5b\xbe\xff\x51\x6a\x18\xee\xe9\x59\x41\x45\x46\x3d\xbe\xf7\xbc\xfd\x83\xde\xe9\xb6\x9d\x3a\x4d\x4f\x03\xde\x6c\x63\x01\x3a\xcc\x9a\x69\xbc\x66\xa0\xf5\x17\x14\x07\x7a\x60\x52\x09\x95\x1d\x9f\xe6\x97\x71\xf9\x19\x0b\x57\x26\xef\x75\xd5\x4c\x2c\x5a\x6b\x50\x7f\xac\xb9\xbc\xd2\x36\x88\x95\x0e\x4e\x00\xf2\x89\xa1\x38\x90\x18\xae\xc9\x7a\x9b\xdf\xc9\x69\x44\xd7\x2f\x39\xfb\x31\x54\x15\x3c\xca\xe6\x76\x3c\x98\x23\xd3\x9f\xa6\x1a\x7a\xfd\x3a\x30\x5e\x02\xd8\xe1\x40\x71\x20\x31\x24\x36\xc4\x5e\x87\xd5\x96\x7d\x53\x41\xb0\x6e\xeb\x97\xc4\x26\xa0\xf8\x20\x60\x3f\x8b\x61\x23\x4e\xe9\xb1\xf6\x2e\xfb\x05\x1f\x50\x6f\x19\x8a\x03\xf9\x56\x25\x78\xc6\x15\x33\x92\xcf\xdf\xc7\x9c\x89\x42\xc1\x7a\xae\x69\x98\x9c\xe9\xd7\xab\xb7\xb7\x94\x33\x5a\xd7\x6a\x3b\x2c\xa8\x3c\xc0\x7d\x17\x08\x0e\xe4\xdb\x1b\x35\x9b\xce\xdf\x8d\xc8\x2e\x36\x88\xb5\xbe\x0f\xb5\xf3\x3c\x0a\xf4\x9f\x09\xd9\x47\x31\x85\x50\xb8\x37\xc6\x4a\xb1\xe8\x39\xc0\xc4\x00\xb5\x19\xff\x1f\x59\x83\x6f\x17\x50\x55\x70\xd2\x35\xdb\x55\xe2\xb9\x84\xde\xfd\x21\xa3\x70\x43\x43\xc3\x98\x6f\xfb\x8d\x67\x73\xcf\x21\x2c\x95\x96\x0e\xc8\x1a\x84\xe0\x40\x0f\xfc\x9e\x77\x60\x33\xbb\xa1\xda\xf8\xac\x30\x2f\xd2\x32\x3b\xd0\x3e\x05\xc7\x71\x0b\xe9\x6f\x65\xbb\xbb\xaa\xa5\xe6\x1f\xc2\x64\x60\x4b\x06\xc5\x81\xc4\x50\xe4\xb6\x85\xa3\x43\xfd\x4b\x7b\x81\xfe\x7e\x48\x35\x31\x2f\xa2\xa2\x0d\xcf\xe7\x75\xd3\x06\x21\x14\x4b\x6b\x81\x92\xd7\x8d\x40\x75\x59\x28\x0e\x24\x86\xeb\xc2\x14\x4a\x63\x45\x53\x38\xd7\x35\xfe\x84\x9f\x93\x1c\x2e\x23\x38\x5c\x5e\x67\xdc\xd4\xfb\x69\x2b\xac\xb8\x56\x9e\x1a\x73\x80\xc6\x20\x38\x90\x6f\x9d\xa5\xce\xf9\xdc\x31\x8f\xde\x5d\xd1\xbd\x4d\x2a\xc8\x50\x5c\xe8\x6a\x34\xd6\x8d\xad\x9c\xbc\x5e\x79\x36\x7b\x88\x78\xf8\x18\x38\xcb\x81\xe2\xc0\x25\x3d\x24\x94\xad\x29\x15\x46\x89\x8d\xce\x18\x33\x23\x52\x73\x10\xf0\x5a\x4d\x7b\x3f\xa2\x0c\x21\x1e\xb0\x4b\x97\xea\x2c\xbd\xfe\x0d\x44\x83\x20\x3e\x93\xee\x8a\x61\xb8\xc9\x87\xdb\x37\xe1\xda\x46\x2d\xdb\xe5\xe8\xf5\x92\xa2\x3e\x39\x9f\xe0\x3d\x78\xbc\x56\xde\xe0\x54\x8d\x66\xe5\xf7\xc2\x71\xb0\x07\x86\xe2\x40\x0f\xac\xc7\x72\xf8\x5b\x57\x7b\xf8\x49\x62\xa2\xa1\x14\x87\x52\x6b\xcb\xd3\xef\x7f\x04\xf3\x96\x24\xa6\x29\xea\x27\x35\xea\x4f\xe3\xda\x61\x66\xa1\x38\x70\x7b\x02\x5e\x0d\x84\x5e\xce\x1c\xab\xfe\x76\xd9\x21\xd2\xac\xbf\xaa\xac\x24\xf1\xe7\x17\xb9\x09\x87\xc4\x71\xf0\x57\x75\xfa\x91\x40\x93\x57\x28\x0e\x24\x86\xc8\x91\xa4\x75\x7d\x5f\xa2\xb4\xda\x3a\x14\x73\xd1\x09\x24\xc5\x06\x87\x54\xbe\x36\x16\xa2\x73\x59\x6c\xaa\x2e\xff\x5c\x4b\xe0\xf5\x08\xc5\x81\x7c\x2b\xaa\xd1\xee\xb7\x3f\xc4\x5c\x72\x52\x70\xc8\xff\x12\xfb\xaa\x72\xb2\xce\x89\x80\xa8\x95\xff\xb9\x4d\xc0\x67\x84\xd8\xa7\xbf\x81\x5d\x34\x14\x07\xf2\x6d\xc2\x97\x9e\xa5\x0e\xf6\x49\x2a\xe5\xc4\xd7\x83\x95\x2f\x73\xa3\x43\xe2\xf2\x45\x51\xce\x2e\xd8\xf0\x99\xc3\xe4\xe7\x7c\xc6\x08\x61\x62\x80\xfa\x80\xbd\x2b\x86\xa9\xa1\x69\x86\x33\x33\x2c\x3a\x89\xf2\xc6\xc0\x4f\x6c\xd7\x5c\x4b\xfd\xec\x22\x5d\x81\xac\xdb\xbe\x59\xdf\x5c\xf8\xc2\x27\x81\xe3\x79\x28\x0e\x5c\x77\xda\xb8\x07\xdf\x54\xff\x85\xb0\xd4\x7b\x7d\xc7\xf3\x5b\xd2\x42\xb9\x9e\xa9\xd6\xf3\xc8\xb9\xfb\xaf\xec\x71\xf1\xee\xcf\xe8\x01\x5d\x48\xa1\x38\x90\x18\x7c\xee\x6f\xd4\xb9\xd0\x1d\x17\x06\x6d\x09\x87\x6c\x3a\x1f\x7d\xf8\x76\x95\xdc\x4b\x1c\x50\xe0\xf7\x29\x1f\xcd\xf2\x62\x4e\x00\xe8\x8c\x08\xc5\x81\xc4\x20\x5e\x19\x7f\xcf\xbe\x25\x71\x8a\x24\xb2\x27\xa8\x2c\xf1\x2f\x6f\xed\xc8\xc0\x89\x5b\xb5\xbd\x48\xf4\x35\x31\x73\xd4\x03\x7a\x20\x11\x06\x8a\x03\xf9\xb6\xd3\x11\xe9\x1c\x11\x8e\xa2\x56\x47\xa2\x7d\x25\x78\x45\x18\xab\x13\x2f\x8e\xc4\xb2\x1d\xab\x79\xee\xea\x60\xa3\x3b\x8c\x13\x28\x9f\x03\xc5\x81\x7c\x8b\x28\xc0\x20\x12\xcc\xa7\x80\x12\x6e\x90\xce\xb3\xf4\xe6\x88\x34\xfd\xea\x6a\x80\x09\xf7\xc3\xbd\x90\x01\x91\xc7\x51\x8a\x79\x75\x40\x68\x10\xea\x50\x11\xd6\x6b\xf0\x4e\x68\xd0\x71\xe5\x76\x7e\xc8\xd4\xab\x6b\x6b\x5e\xb6\x22\xb2\xde\x50\x39\x32\x6a\x91\xd9\xcb\xd4\x5d\xf5\xf4\x27\xd1\x93\x77\x69\xe3\x54\xff\x7e\xf4\x72\x27\x34\x98\xb2\x97\x31\xc5\xef\x53\x17\xd1\x33\x78\x93\xd2\xb4\x99\x41\x63\x4b\xb5\xf6\xd7\xa7\xa1\xab\xc4\xeb\xde\xe6\xec\xf2\xae\xfb\xcf\xff\x9b\xa3\x17\xa8\x1f\x76\x77\x7e\xb4\x66\x8a\x6e\x85\xa2\x67\x5b\x3b\x70\xf8\x38\xec\x5a\x9e\x1c\x0d\xda\xd3\x74\x08\x55\x75\xe4\xee\xa6\x2f\x92\x95\xff\xf5\x0c\x81\xfd\x87\x50\x1c\xe8\x3f\x9c\x2b\x29\xef\x61\xd4\xd4\x6f\x98\xf6\xe8\x3a\xa9\xc7\xff\x2a\x7b\x24\x62\x10\x70\x8d\xcb\x5d\x50\x1c\x20\xb0\x16\xeb\xab\x02\x48\x03\x8a\x03\x7f\x6d\xa7\x52\x27\xcb\x25\xcd\xc9\x6e\x0b\x2f\xf5\x2d\x0f\x19\x62\x27\x9a\x09\xa3\x06\xcf\xe2\x54\xa2\x63\x23\xfb\xed\x77\x4a\x54\x01\x5f\xdb\x10\x1c\x78\x4f\x7d\xaa\xb1\x2a\x22\x8d\x47\xe8\xd7\x5a\xac\x8d\xe4\xff\xcd\xc8\x61\x2d\xea\x51\xc1\xa5\xe4\x31\xf6\xa5\xef\xed\xf4\x50\x19\x70\x49\x12\x8a\x03\xf9\xb6\x96\xdf\xf4\xca\x40\x72\x47\xe4\x1b\x4e\x55\xc6\xba\xd6\xe8\x2c\x46\x0c\x03\xb1\x8c\x5a\x55\x4a\x46\xb0\x43\x2c\x97\x03\xdb\x01\xcc\x2c\x14\x07\xf2\xed\xe7\xb6\x4c\x2a\xd2\xb3\x05\xc9\xfe\x72\xbc\x25\x2c\xb2\x35\x89\xee\xdc\x12\x51\xe4\xd6\x83\xb9\xf5\x2f\x7a\xfc\x72\x79\xbc\x13\xb0\x97\x25\x94\xe4\xee\x8a\xe1\x5a\x68\x41\x2f\x46\x9b\xe5\xcd\x33\x1d\x41\xb6\xc2\x37\x66\x9a\xe5\x31\x02\x81\xb9\x7b\x02\x5d\x87\x12\x8f\xc6\x0f\xec\xea\x68\x81\x1d\x04\x04\x07\x7a\xe0\x91\x26\xf1\x94\x5d\xf3\xf1\x76\x03\x81\x62\xea\x72\x43\x1e\xdb\x67\xcc\x42\xf9\xe7\x03\xd4\x0f\xe1\x44\xb0\x5e\x8f\x6c\xf2\x02\x95\x95\xa0\x38\x90\x18\x5e\x8e\x38\xb3\xcf\x8b\x8d\xfe\xb6\x2e\xc5\xcc\xe1\x53\x5e\x56\xd6\x44\xe6\xcd\x98\x89\xd9\xcd\x6e\xb7\x21\x17\x6a\x7b\x4e\x04\x74\x50\x85\xe2\x40\x62\xc0\x66\xd9\xde\xe3\x3c\xf4\x47\x3e\x9c\x97\xa5\x46\x8e\x8e\x90\x7f\xe7\x4e\x7a\x64\x62\x15\xa9\xb3\xe2\x3e\xf8\xb0\xc8\x23\x15\xa8\x4d\x03\xc5\x81\x7c\xbb\x6a\xa0\x3f\xbf\x68\xe9\xb5\x45\xaa\x21\x42\xb4\x96\xbd\xa3\xc9\xf0\xe1\x99\x15\x83\x4d\x4b\x0d\x91\x0b\x51\x23\xad\x87\x39\xd0\x53\x18\x8a\x03\xf9\xf6\xc3\x85\xd9\xf0\x63\x7c\x3d\x06\x05\xa4\x92\x98\x87\xfe\xa1\xb2\xdf\x91\x0e\xa2\x6d\x46\x44\x9f\x18\xcf\x12\x27\x67\x31\xf0\x01\xed\x3b\xa0\x82\x41\x77\xc5\x70\x71\x9b\x19\x69\x78\xa3\x74\x3f\xbc\x2e\xd3\x31\x07\x3d\x75\x58\xb0\x57\x5c\xad\x20\xe3\x9e\x4b\xb0\xd3\x24\x09\x1e\x09\x11\xb0\xef\x83\xe2\x40\x0f\x1c\x36\x96\xf0\xab\x49\xcc\xe9\xde\x29\xcd\x1f\xce\xf7\xfb\x38\x31\x1f\x3c\x69\x43\xe9\xfb\xb4\x89\x17\x7f\x5f\xa6\x2d\x89\x50\x98\xc2\xcc\x42\x71\x20\x31\x7c\xb4\x08\x1d\xce\xc5\x94\xff\x53\xfc\x2e\x8f\x1a\xbd\xa1\xa4\x81\xc7\x9e\xf7\xd4\xd7\x21\x30\xe7\x42\x39\x54\xba\xcf\x85\x14\x68\x11\x03\xc5\x81\xc4\x90\x6f\x2e\xc3\x60\xf2\xb8\x06\x7b\xc4\xd6\x7f\x33\xef\x05\x89\x91\x73\xae\x4c\xbe\x84\x17\xd2\x46\x54\x2d\xe6\x9c\xf9\xc0\x0b\x20\x69\x05\x8a\x03\xf9\x76\xfa\xc6\xec\x85\xd6\xa2\x91\xbe\xbb\x60\xfa\xce\x60\xc6\xe6\xca\x41\x69\x49\x89\x94\x6f\x78\x37\x6f\xf2\x5c\xe1\xe5\xd6\xc5\x2d\x10\x1a\x5c\xf6\x9b\xd8\xb3\x59\x3e\x10\xba\xff\x53\x5c\x40\x42\xd6\x8f\xf5\x39\xd3\x7b\xed\x97\xc8\xfb\x1b\x2e\xcf\xd4\xb2\x2c\xe9\x50\x1a\xff\x1b\x1a\x9c\x8f\x63\x75\xea\xbf\x17\xa5\x3b\x2e\x2d\xfe\xe4\x09\x9f\x3e\xeb\xd6\xe1\x9f\xcb\x8d\xc1\x6f\x23\xd3\x79\xfc\x8b\xa2\x7e\x92\x4f\xff\x83\xba\xe7\xa6\xf6\xbc\xf4\xd5\x0a\xac\x6f\x7f\x5e\xa9\xf8\xc4\x42\xbf\x86\x7e\x04\xf3\x3a\xff\xd9\xc5\x36\x36\x42\x63\xa4\xb3\xc0\x30\x28\x34\x08\x65\xf9\x6e\x68\xd0\x97\x47\x72\xe3\x1e\x8e\x6e\x5d\xea\x53\x6f\x8a\xfe\x47\xde\x02\x74\x71\x2a\x4b\x3f\x84\x19\x66\x3d\xa2\x67\x2f\x29\xad\x7e\x60\xfe\xf7\x8e\xa0\x52\xa3\xa3\x59\xe8\xa5\x7e\xbd\x7c\x48\x21\x9b\xd7\xb8\x88\x57\xba\xbe\xdb\xfe\x88\x3d\xef\x97\x8b\xf9\x43\x9b\xec\x18\x27\x20\x34\x08\x65\x13\xd6\x6b\x10\x1c\x1a\xdc\xa4\x5b\x36\xaa\x88\x77\x41\x5f\xe9\x31\x3f\x9d\x3a\x49\x27\x0c\x23\x14\x31\xfb\x8d\x87\x5b\x9a\x8f\x89\xf6\x33\xbb\xa0\x30\xf1\x9f\x57\xfb\xce\x3b\xa1\xc1\x9d\xbc\x19\x92\xe4\xd9\x47\x35\xec\x6f\x84\xee\xe3\x7e\x42\xf8\xb8\x62\xd5\x9a\xff\xe1\xef\xc1\x55\x52\x05\x19\xae\x23\x85\xe1\xe1\xbf\x0f\x79\x27\x34\xd8\xb1\x1e\xf9\x2b\x43\xef\xe5\xa9\x89\xa1\x85\x1d\xda\x58\xe6\xbd\x0e\xee\xd3\xb6\x97\xf5\x02\x85\x7f\xcb\x5f\x04\x92\x56\xfc\xfe\xd7\xd8\x4e\x98\x64\xe7\xdd\xac\xc1\x40\x2e\x35\xe5\x1f\x86\xc5\xbd\x62\xed\x43\xc4\x59\x63\x48\x4b\x87\x09\xce\xe3\x3f\xc4\xa9\xad\xe3\xc9\x8f\x2d\xdf\x68\x98\xfd\xfb\x90\x77\x42\x83\x0b\x54\xfb\x6d\x89\xc4\x42\x7a\x09\x57\x2e\x38\x26\x7d\x76\x43\x8c\xdd\xb4\x29\xda\x13\xfc\xdf\x4d\xd6\x17\xa3\xe4\xc6\xf0\xba\xfe\x7d\xc8\x3b\xa1\x41\xb1\x61\xb3\xcf\xc6\xc4\x23\x55\xa4\xfa\x2b\xe1\x36\x2b\x0e\x0c\xe5\x6b\x78\xd5\x1c\xb6\x98\x54\x7e\xa4\x29\x28\xb2\x27\x51\xff\x07\x1d\x15\xef\x84\x06\xa5\xf0\xc6\xd9\xe8\x04\x03\x1c\xd3\x8b\x02\xf4\x9c\x07\xf5\xc4\xaf\x7b\x0d\xa2\x18\xdf\xe2\x7e\xcd\x15\xfa\xe5\x2f\x29\xca\xf9\xaf\x9b\xc5\x30\xc9\xce\x3b\xa1\xc1\x9c\x42\xf3\xe5\x45\x53\x56\x3c\x55\x6d\x91\x27\x97\x1f\xbd\x2e\x93\x7e\x8a\x97\xae\xd0\x0f\xd3\x48\x7d\xde\xa6\x37\x17\x64\xfa\xd7\xf8\xb9\xe6\xff\xbf\xa9\x78\x77\x15\x9a\x7f\xa6\xf8\xc2\x91\x6b\xef\xa9\xed\x1f\xbf\x10\xf6\x17\x8f\xe7\x1d\x3e\xde\x2b\x1a\xd5\x5b\x76\xde\x57\x8b\x09\x09\xbf\xad\x06\xae\x51\x43\x71\xa0\x55\xc8\x71\xf5\x43\x84\x31\x85\x93\xba\xc0\xce\x2f\x35\x22\x61\xa5\xf5\x26\x2a\xed\x1b\x0c\xa6\x69\x02\xf2\x50\x84\x82\xd4\xee\x54\xa0\x4b\x0a\x14\x07\x5a\x85\x22\x48\xaa\x8a\xe8\x3d\x2d\xff\x32\x69\x04\xeb\xe7\xf5\x68\xf8\x15\xa0\xd7\xd6\x73\xfc\x26\x66\x0d\xfd\xc4\x1b\x99\xef\x6b\x3c\x00\x33\x0b\xc5\x81\x56\xa1\x1d\xe9\x95\x9e\x8e\x32\x92\x66\xdc\x72\xe6\xc7\x2e\x61\x03\xaa\x36\x0f\x83\xc6\xc4\x98\x57\x1a\xbe\xf1\xaa\x15\x31\x8e\xa4\x0a\xc3\xcc\x42\x71\x81\x62\xa2\xff\x35\xdb\x61\x63\x10\x4f\x52\xc4\xf1\x87\xfa\xfe\x42\x6c\x2d\x65\xb1\x3e\xd7\x87\x59\x3b\xdf\x1b\xd4\x7e\x49\x84\x7d\x09\x7f\xf5\x12\xe0\x22\x2a\x14\x07\xf2\x2d\x57\x51\x55\x57\x59\x2d\xf2\x52\x57\xbf\xe7\x9b\x0f\xfe\xdb\xa3\x0d\x97\xaa\xf6\xd6\xe4\x39\x14\xc8\x55\xa7\x28\x39\x91\x62\x0b\xb0\x2d\x09\xd4\x4b\xf2\xae\x18\x5e\x51\x20\xa1\x34\x70\x3c\x65\xed\x64\x3a\xd9\x52\xac\x9e\x27\x12\xd8\xda\x89\xb0\x6e\x79\xdf\x33\x8e\x7f\x69\x75\xa0\xed\xfb\xff\x7a\xba\x40\x70\xa0\x07\x76\x52\x2a\xa6\xdd\x7d\x35\xf1\x96\x0a\x5e\x32\xce\xd2\x0c\xf3\x1a\xef\x24\x5c\x4d\xcf\x99\xb7\xe3\x95\x21\x7e\x39\xf2\xcf\x74\x7b\x98\x59\x28\x0e\x24\x86\x15\x61\x45\xbf\x13\x79\x49\x57\x9a\xf7\xc1\xd5\x84\x1c\x76\x89\x51\xcb\xcf\x02\x6e\x8d\x73\xdc\x63\xb6\xce\xa9\x64\xc3\x72\x80\x23\x18\x28\x0e\x24\x86\xb1\xdb\x89\x58\x84\x60\xb9\xad\x84\x2f\x3e\x32\xab\xbe\x83\x7c\x08\x92\x66\xb9\x9b\xc1\x71\xcc\x4d\xec\xed\xa5\x68\x57\x79\xc0\x17\x1b\x14\x07\x12\xc3\x89\xc6\x57\xc1\x53\xa4\x38\x3e\x24\x32\x16\x03\x83\x7e\x74\xd7\x8c\x72\xb2\xb5\x27\x4c\x08\x9d\x2c\x16\xed\xf7\xfb\xb3\xb2\x81\xe3\x2d\x28\x0e\xe4\xdb\x0d\x8c\x07\x84\x76\xee\x0a\x3b\xa5\x75\x05\x2b\x48\xc4\xc1\xdc\x67\xa3\xcc\x7d\x6f\x9a\x12\xcf\x2a\xfb\x23\x0d\x02\x2c\x85\x5c\x61\x62\x80\x5a\xbe\xee\x8a\x81\x49\x57\x9f\x80\xf5\xcd\xc5\x77\x59\xd3\xe9\x91\x45\x97\x29\xec\x60\x34\x1e\x41\x36\x65\x95\xfa\xf4\x84\x24\x8f\x04\x3c\x4b\x17\xd8\x03\x43\x71\xe0\x93\x9d\xdf\x1d\x23\x25\xe4\xfd\xbe\x0b\xac\x91\x3d\x6b\x56\x6d\x4b\x56\x19\xcd\x7c\x45\x08\xd7\xf0\x4f\xda\xab\x7f\x3c\x14\x29\x99\x05\x4e\x76\x20\x38\x70\x2b\x8c\xb8\xcf\xac\x3f\xb3\xf7\xd1\x9a\xbd\x4b\x13\xa4\x42\x23\xb1\x7d\x3b\x1f\xa6\x0e\x5f\xa4\x29\x6f\xa2\x48\x22\x45\x5a\x31\x00\x89\xbf\x50\x1c\x48\x0c\x46\x71\xeb\x46\xad\x94\x09\x73\x58\xee\x92\x0c\x3f\xc2\xeb\x0e\x36\xc6\x18\x71\xbf\xa6\xbd\x4a\xcc\xe2\x16\x71\x98\xf7\x6b\x03\xaa\x5a\x40\x71\x20\x31\xe8\x3c\xcd\x6d\x48\x49\x26\x7e\x3c\xb9\x9b\xf4\x40\xce\x5e\xd9\x22\x40\xce\xc4\x70\x24\xfb\xcc\xd6\xfa\x80\x03\x51\x08\xf5\x0a\xf0\x2d\x14\x07\xf2\xed\xf7\x60\xc1\x54\x8c\x3c\xbc\x95\x6c\xdc\xcf\xdb\x02\x3d\x68\x85\xac\x4f\xbf\xa8\xab\x4b\x5e\xab\x3f\x47\x14\x9f\xba\xaa\x96\x21\x01\xb2\x06\x21\x36\x16\x77\xc5\xb0\xe7\x74\x10\xdf\x21\x7f\x63\xb8\x11\x89\xe6\x9e\xa7\x61\xaf\x70\x92\x42\x7a\x92\x8e\xd7\x36\x19\x28\x3d\x0f\x2f\xee\xd8\x5f\x0e\x7b\x60\x28\x0e\xf4\xc0\xc2\xf3\x66\x1a\x17\xbf\x9f\xbd\xa3\x37\x92\x9a\xb3\x4b\x8f\xec\x17\x22\x55\xa8\x94\x8b\xa7\xaf\x79\xfb\xb2\xb3\x1c\xd9\x84\x17\x78\x9f\x43\x71\x20\x31\xd4\xda\x5c\x8a\x11\x6c\x9a\x5a\x11\x76\xd5\x86\xc4\x6d\x50\x0d\xcf\x3d\xe7\x67\x67\xa1\xaa\xe4\x8e\x26\xda\xfb\xc1\x6e\xff\x13\x38\x1d\x81\xe2\xc0\xf5\x6e\xbc\xf7\x2f\xb0\xf6\x8f\xc6\x3e\xaf\x22\xc5\x21\x86\x2f\xcd\x3c\x29\x89\xeb\xb0\xea\x76\xa5\x63\x6c\xc8\x5e\x71\xf4\x9b\x06\x62\x57\x50\x1c\x48\x0c\x5d\xbc\xa4\xdf\x0f\xa6\x1d\x56\x6b\x3e\xa5\xfe\xf5\xd2\xca\x7d\xe4\x54\xea\x7a\xa4\x36\xda\xd3\x2f\x64\xf9\xc5\x9c\x0e\xb5\x1c\xb8\x30\x0c\xc5\x81\x7c\xcb\x46\x2b\xb0\x8f\x26\x7b\xc8\x3e\xbd\xbb\x89\x71\x9c\x7a\x3d\x76\xf8\x60\x25\xae\x72\xf3\x95\x76\x5a\x3f\xbd\xef\x2c\x37\x8e\x23\x4c\x0c\x50\x5b\xbe\xbb\x62\x48\xe5\xfd\xf3\x5e\x28\xc0\x6e\xe9\x93\x82\xe5\xa0\x9f\x57\x83\x4e\x41\xd6\xd4\x27\x13\xea\x18\xea\x1d\x78\x2e\x3b\x19\xf7\xb2\x8f\xb0\x07\x86\xe2\x40\x0f\x9c\xec\x7a\x81\x16\xc8\xf8\x62\xd4\x2f\x51\x60\xef\x47\xab\xd2\xc2\x6c\xbb\x1a\x53\xfb\x81\x6e\x47\x91\xb5\x0f\x0a\x4e\x9d\x06\x90\x57\x0d\xc5\x81\xc4\xf0\xf5\x73\x71\xb6\xef\x4b\x1a\xd9\x95\x75\x45\x8c\x40\x8b\xa7\xcd\x59\xab\x42\x55\xac\xa8\x27\x5e\x62\xcb\x6b\xec\x5b\x70\x5f\xc2\x61\x66\xa1\x38\xf0\x99\xd6\x79\x7c\x31\xba\x86\xbe\x75\xf5\x64\xa5\xd8\xdc\x47\x4c\xeb\xc7\x02\x38\x9f\x8e\x6e\xa5\x05\x1e\x88\xdf\xe4\x47\xbe\x3f\x64\x04\xce\xb4\x20\x38\x90\x18\x9a\x70\xb4\x37\x8f\xec\x2a\x8a\xe5\x92\x9e\x09\x6e\xfe\xc2\xe5\x16\xd3\xb0\xb1\xbc\x7f\xde\x1e\x21\x31\xf5\x78\x7f\xcb\x4b\x0f\xb8\x39\x01\xc5\x81\x7c\xbb\x93\x6f\x0a\x1f\x29\x9a\xc7\xf6\xd0\x5b\xc1\x2a\xaa\xe6\xe1\x19\xbd\xe0\x11\xbf\xac\xec\x77\x24\x24\xcf\x0f\x98\x4f\x05\x1f\x5c\xc0\xc4\x00\xb5\x19\xbf\x2b\x86\xaf\x08\x56\x19\xdc\x5b\x1f\x66\x97\x4a\x93\x0b\x03\x8d\x3d\xb9\x76\x22\xc9\x69\x8e\xb1\xa7\x63\xe1\x6c\x6e\xfc\x2b\x7b\x3e\x6b\x01\xee\x85\xe0\xc0\x65\x03\x95\x6e\xd1\xbe\x14\x3c\x5f\x6c\xb1\x1d\x2a\xb9\x3f\x18\x6d\xf7\xd9\xd4\x69\x73\x70\xee\xfc\xcf\xe3\xa0\x3f\x26\xf3\xb4\x52\x15\xc0\xea\x03\xc1\x81\xc4\xc0\x2d\x64\xb0\xa3\xe1\x2e\x5d\xcd\xe0\x1a\x79\xf8\x10\xcb\xfb\xb1\x23\x6d\x2e\x83\xed\x6f\x6d\x85\xd3\x31\x32\x2b\x1b\x02\x67\x20\xdb\x06\x8a\x03\x89\x81\xbe\x8f\x30\x68\xdc\x14\x61\x0d\x4f\xac\xae\xd3\x67\xd7\x64\xf3\x13\xb3\x42\x9f\x07\x0b\x12\xde\xa0\x56\xe3\x73\x4f\x56\x86\x50\x98\x59\x28\x0e\x24\x86\x01\x11\x0a\x65\x5f\x29\x19\x38\xa5\x22\xeb\xa7\xf2\xcd\xa3\xa2\xed\x7e\x84\xab\x0b\xcd\xb1\x9b\x6d\x44\xfd\x91\x7d\x6f\xd5\x49\x61\x66\xa1\x38\x90\x6f\xe1\xc4\x77\xcc\x1b\x54\x7b\xa8\xc9\x19\xd7\x1d\x71\xa2\xb9\xd3\xa8\xe0\x56\x91\x51\x23\x63\xbd\xf6\x76\x59\x2d\xd5\x4e\x9c\x9c\x61\x62\x80\xfa\x4c\xfa\x1f\xd7\xdd\x9d\xed\xda\x68\x91\x1b\x4f\x35\xd4\x16\x5c\x27\x5a\xbf\xe4\x1d\xf5\x1a\x29\x65\x05\x0f\xb0\x58\xe1\x38\x50\x84\xc6\xc1\xe5\x03\xd7\xdd\x21\x38\xd0\x03\xbb\x06\x7a\x57\x7c\xe9\xac\xba\x87\xaf\xcd\x91\xca\xdd\x58\x2b\x4e\xd3\x3e\x1b\x51\x37\xd4\x83\x36\x1f\x95\xa2\x2a\xbd\x9a\xb8\x0e\x33\x0b\xc5\x81\xc4\x20\x9d\xb2\x88\xb0\x93\x3c\xd9\xf6\xa5\xe2\x76\x98\xf2\x8f\xa7\xa3\x24\xd1\x8b\xee\x77\xdf\xf1\x12\x71\x7e\xdc\xcf\xca\x85\x57\x01\xda\x3f\x43\x71\x20\x31\x38\x13\x0a\xa9\x2f\x31\x45\xc5\x17\xfc\xe4\x7c\xac\xdd\x7c\xb9\xab\xbc\xca\xae\xab\xf1\x89\x86\xa1\xbf\xd1\x4b\x9c\x97\x4d\x0b\xc8\x7e\x86\xe2\x40\x62\x70\xc3\x56\x20\x53\xc7\x1c\xd1\x9e\x43\xb7\x78\xe9\x65\xc2\x71\x68\xe1\x38\x5f\x5f\x8f\x22\x6b\x96\xba\x53\x52\xf6\x80\x78\x06\x78\x8f\x41\x71\x20\xdf\xfa\x38\x4c\xd0\x4a\xde\x2b\xf7\x33\x31\xc1\xf0\xa7\x16\x4a\xf3\x2e\xf2\x56\x29\xea\x89\x48\x7e\xef\x1a\xb4\xeb\xf9\x63\x7b\xa0\x09\x26\x06\xa8\x0f\xd8\xbb\x62\xa0\xde\x51\x37\x57\xe7\xe0\x8c\xde\x6d\xda\x09\x47\x72\xc8\xb0\xac\x31\x8b\x6d\x72\xf0\xf6\x79\x97\x93\x79\x84\x60\xb4\xfa\xa8\x14\xc8\x02\x87\xe0\x40\x0f\xbc\xe9\xc9\x63\x83\xc8\x13\x16\x89\x79\x4c\xb4\x8f\x8d\x6e\xf6\xeb\xe7\x0d\xcb\xe7\xb9\xdf\x19\x5c\x6f\x2f\xf5\xc5\x3e\x0e\x55\x02\xc1\x04\x28\x0e\x24\x06\x81\xea\xf5\xfb\x82\x9e\xd5\x31\x69\x6c\x65\x2c\x95\xf7\x64\x27\xb3\x82\x96\x5d\xc5\x36\x19\xdf\x7c\x18\xd0\x79\x2d\x60\x79\xfa\x00\x66\x16\x8a\x03\x89\x01\x3e\xe4\x33\xed\x62\x44\x76\xae\x14\x21\xb2\x32\xe5\x89\xc5\x30\x0d\xcd\x08\x7c\xaa\xfe\xc5\x83\x8e\xf0\x57\x8f\x53\xe5\x4d\x18\x60\x66\xa1\x38\x90\x18\x9e\x84\xa8\xce\x84\x10\xe9\xca\x99\xbd\xe8\x95\x2b\x12\x7a\xbd\xf9\x30\x8f\xe8\xcc\x4d\xed\x20\x41\x56\x9b\x42\x6f\x6d\x93\x17\xa8\xe9\x0d\xc5\x81\xeb\x0f\x8e\x47\xdf\xa4\x5b\xad\x4b\x3f\xeb\x6f\x40\x96\xf8\x7c\xc8\x54\x7e\x35\xf0\xf5\x0b\xd5\x47\xba\x87\xfc\x6d\xb4\x03\xdf\x12\xdd\x81\xd0\x20\xd4\xa1\x22\xac\xd7\xe0\x9d\xd0\xe0\xfc\x8f\xdc\x03\x7a\xfe\xfb\x87\x02\xe6\x0a\x7c\xf6\xfa\x99\x48\xda\xe6\x62\x41\x2f\x3a\x63\xb9\x33\xc5\x31\x92\xaa\xca\xce\x0b\xff\xfd\xe8\xe5\x4e\x68\x50\x50\x90\x89\xf8\x1c\xcf\xe5\xc9\xf9\x96\x53\xab\x93\xd5\xb9\x5a\x8a\x81\x71\x29\x2d\x6b\xd2\xa7\x7a\x35\xf8\xf7\x67\x25\xcc\xf4\xff\x37\x47\x2f\x50\x3f\xec\xee\xfc\x38\x43\x78\x5e\x11\x47\xe4\x2f\x89\xf3\x10\x87\xf0\xfa\x56\x85\xd1\x6c\xbe\x38\x7c\x11\x7f\xed\x0c\x59\x5b\x63\xff\x77\x19\x0b\x50\x77\x00\x8a\x03\x1f\x0f\xb0\x9e\x1e\x97\x37\xaa\x4f\x56\x48\xae\x70\x08\x63\x76\x1b\x19\x7e\x78\xa2\xb4\x57\xb0\x7c\x86\x56\xe2\x83\xfd\x97\x05\xfb\x21\x90\xfe\x0a\xc1\x81\xe6\xc7\x8f\x07\x8f\xbe\xdd\xcf\x4e\x9b\x67\x2e\x24\xb0\xba\x9f\x36\xf7\x66\x5d\xb8\xee\x71\xa8\x1a\xb3\x58\xd2\xf6\x4c\x2c\xde\x5f\x61\x55\x98\x59\x28\x0e\x5c\x70\x57\xbc\x22\xa4\x99\xc7\x59\xe9\x97\x21\xc7\xee\x30\x51\x42\x03\x49\xe5\xd0\x34\x39\x6d\x0b\x77\x2e\xbf\xa9\x8a\xfb\xdb\xe9\x00\x98\x59\x28\x0e\x34\x3f\xa2\xcf\x31\x5a\x46\x75\x56\xcd\xcb\xd9\xdb\xdb\x10\x79\x8a\x13\xed\xe9\x53\x17\xfd\xe9\x37\xd1\xa8\x75\x3e\xc8\x0e\xd0\x7a\x01\x0b\x11\x14\x07\xf2\x2d\xc2\x8d\x2a\xc6\x60\x8b\xe4\x89\xb3\xac\x5b\x08\x7e\xe3\x13\x0a\x93\x87\x11\x1f\xc7\x03\x5e\xc9\xe4\x26\x8e\x79\xe4\x10\xd0\x30\xc3\x5e\x96\x50\x92\xfb\x1f\x2d\x9b\x95\x8f\x88\x47\x7b\x03\x3f\xe9\x8c\x1f\x98\x38\x6b\x7e\x5f\xa1\x58\x75\x24\xad\x16\x1d\x0e\x3e\x5d\x40\xfc\x91\x49\xd4\xa5\x09\x7b\x60\x28\x0e\xf4\xc0\xbf\x3f\x65\xc2\xf5\xdf\x63\x58\x27\x7f\x31\x7c\xc8\x9e\x3d\xf4\x9c\xea\x0c\x63\xb3\x21\xe6\xb1\xa8\xf5\x6b\x9a\xfe\x01\xf6\xd7\x40\x0a\x29\x14\x07\x12\x03\xae\x8b\x73\x64\xe3\x4e\x00\x67\x3a\x49\x7b\x3b\x6f\x8d\xc6\x12\xfe\xdf\x1f\x6b\x5d\x3a\xc5\x8b\xfd\x42\xc7\x1f\xe0\x22\x98\x81\x33\x12\x28\x0e\x24\x06\x95\x6e\x5a\xb7\x51\x27\x5e\x6e\x5e\x19\x64\x6d\xab\x79\xda\xa7\x1d\x0e\x9f\xaa\x68\x89\x7e\x30\x27\x25\x8b\x5c\xa1\xab\xd0\x03\x79\xb4\x50\x1c\x48\x0c\x19\xbf\x0a\x5f\x13\x52\xe6\x6a\x8e\x7d\xc8\xdd\xc5\x4f\x74\xf6\xa1\xa6\x1c\x63\x7d\x25\xf3\x64\xcf\x35\x8f\x7d\xa8\xe5\xe9\x1c\x50\xac\x15\x8a\x03\xf9\x76\xd2\x1b\xd5\xe7\x84\xc8\xdd\x49\x61\x54\xa6\xd0\xed\x5d\xb5\x76\xca\xfb\x97\x1a\x3e\xdc\x2b\xcf\x27\xa6\xb2\x46\xc4\x22\x2b\x3f\xc2\xc4\x00\x15\x0c\xba\x2b\x06\x9e\x8f\x28\xac\xf1\xab\xb1\x4f\xf8\x75\x32\x73\xe6\x29\x13\xfa\xda\xaa\x5d\x03\x91\x4c\xc9\x88\x09\x71\x45\xd1\xed\xce\xa5\x3d\x60\x0f\x0c\xc5\x81\x1e\x18\xd5\xa6\x57\x39\x21\x63\x05\x37\x23\x78\x8f\xf2\x76\xc4\x5a\xa3\x3b\xda\xae\x80\x84\x43\x1b\x01\x9f\x2b\x26\x8f\xe5\xc1\x0e\x50\x59\x09\x8a\x03\x89\x41\xae\x4c\x71\x58\x0d\xef\x29\xc7\xb7\xd7\x9e\x0f\x5e\x06\x17\x35\xb2\xd9\x4a\x07\x13\xc7\x91\x09\x35\xdf\x97\xe6\x5f\x46\x3d\x3d\x87\x99\x85\xe2\xc0\x7d\x36\xde\x12\xbf\x99\x7c\xa9\x6b\xbd\x6f\xf0\x8d\x92\x87\xc8\xab\x11\xb9\x2e\x93\xbc\x5b\x68\xdd\xd6\x7a\xb9\xed\xeb\x54\x1f\x3d\xb0\xe9\x83\xe2\x40\x62\x08\x25\xc6\x31\x92\x49\x7d\x1a\xbd\x44\x98\x9e\xf2\x6a\x05\xb7\x97\x77\x9a\x3a\x1b\x9f\x59\xfe\x14\x63\x90\xc6\xe0\x22\x26\x9b\x19\x08\x0d\x16\xf7\xad\x12\xd9\x3e\x76\xfa\x1e\x80\x6e\x9d\xd2\x82\xa1\x64\x04\xb7\xac\xd4\x76\x3a\x5e\xe0\x16\x2b\x92\x89\x8c\x60\xe0\x94\xff\xdf\xd0\xe0\x9e\x51\xb5\x0c\x97\x8e\xfc\x47\xa1\xf3\x22\x72\xe1\xe3\xb0\xc8\x82\x07\x2e\x69\xbc\x63\xab\x9f\x95\xa2\xc4\xf4\x6a\xe3\x85\xb3\xff\x7b\x15\xeb\x22\xc4\xa2\xc7\x30\xdf\x28\x25\xdf\x32\x7e\xb7\xe1\x5d\x4a\xc9\x49\xd7\xf2\x12\xf9\x1b\x66\xb3\x49\xff\x3c\xae\x7b\x68\x1d\xa0\xd0\x20\x94\xe5\xbb\xa1\x41\x6c\x41\x57\x53\xfd\x79\x4d\x96\xb4\x23\x8b\x84\x0c\x23\x21\x7a\xaa\xa7\x02\x25\x27\xba\x70\xdd\x9a\xb1\x7b\x19\x1b\x9c\x03\x27\xff\x41\x7f\x61\x2f\xbf\xc8\x26\xc0\x11\x2f\x31\x38\x0b\x5a\xa1\x51\x1c\x2c\x4a\x6d\xdf\xce\x95\x98\xdb\x3d\x77\xc3\xe0\xa9\x5f\xfa\x40\x00\x84\x06\xa1\x6c\xc2\x7a\x0d\xbe\x04\x2d\xbd\x32\x3a\xb5\x29\xab\xc7\x58\xd8\x0e\xeb\x5a\x98\x4f\x7a\xa7\xec\x2a\xd2\xbb\x71\x10\x9b\x9f\xea\x5f\x5c\x07\xb7\xfa\x04\xdf\x14\xfc\xf3\x6a\x0f\xc7\x03\x5e\xed\xfb\x19\x44\x66\x5a\x42\xc5\xcb\xdb\x71\xfe\x28\x4f\x33\xe6\x7f\x46\xf9\x99\xf0\x7b\x82\xed\x9d\x24\x6d\x3f\x5e\x67\x23\xf2\xb1\xf3\xbf\x0f\xa9\x0c\x1e\xb2\x17\xd3\xfe\x40\x2f\xb6\xe0\x79\x6f\xea\x56\xf6\x6c\x8f\x75\x70\x93\x31\x2d\xd2\xef\x41\xac\x73\x22\x72\xf2\xb4\xfe\xd3\xac\xe2\x7f\x1f\x52\x0f\x3c\xe4\xc0\xcb\xea\xca\xb4\xe8\x80\xa1\xaf\x44\x12\x26\xe1\xdf\xed\xfc\xc2\x8f\x6f\x02\x0d\xd8\x24\x43\x71\xae\x6e\xdc\x5e\x4e\x13\xff\x7b\x72\x1b\x9c\x07\x78\xc8\x43\x7c\x14\xd2\x6e\x91\xfd\x69\x37\x05\x5b\xcb\x98\x4f\xe9\xdb\x6a\x14\xfc\xac\x7b\xbf\x15\x8d\xee\x8d\x3e\x9c\xf5\x4f\x1b\xae\xfe\xf7\x21\x93\xc0\x43\xd2\x6e\x56\x47\x1b\xea\x15\xe4\x4c\x5e\xa0\xf3\x28\xe5\x33\x24\xe6\x35\xd9\x7e\xb5\xf5\xa3\xff\xf9\x34\x81\x44\xe0\x67\xd4\x0a\xed\xbf\x0f\x59\x0b\x1e\x92\xd7\xdc\x0e\x93\xe5\x49\x94\x8a\xc5\x6f\x2b\x0f\x3f\x93\x69\xed\x81\xf0\x04\x76\x47\x02\xdd\x07\x1b\x0b\x65\xa8\xa2\x46\x83\x6f\xfe\x7d\xc8\x76\xf0\x90\x6c\xe3\xeb\x2d\x52\x70\x2f\xc3\x98\x6c\x5e\xf7\xfa\x9e\x52\x57\x66\x7e\xea\xca\xe9\x4f\x39\xef\x3b\xb1\xbe\x1f\x14\xba\xa3\x6a\xfe\x7f\xb3\x3f\x85\x9a\x8a\x77\x57\xa1\x3e\x3e\xb9\x3c\x22\x5a\xb7\x84\x2c\x7c\xfe\x8e\xea\xa6\x0b\x42\x0c\xf9\x8c\xb2\x97\x39\xb3\x3c\xa9\x7e\xed\x1f\x50\xf4\xb3\x04\x61\x2f\x60\x28\x0e\xb4\x0a\x6d\xd5\xc9\xc2\x87\x2a\xbf\x19\x37\x0b\x6a\xba\x40\x92\xc6\xf9\xfe\xda\xc0\x79\x7a\xc2\x11\xcd\xba\xf1\xb9\x8e\x10\xcb\x66\x34\x1b\xcc\x2c\x14\x07\x5a\x85\x96\xcd\x6f\xa9\x1d\xad\x06\xa5\x7f\x72\x78\x77\xf2\xdc\x0f\x27\x7f\x7a\xf4\xad\xdd\x34\xdd\xbf\x59\x4f\xa8\x54\xf3\xd3\x48\x00\xd0\x14\x10\x8a\x03\x97\x0d\x3c\x7f\xb3\xf4\x31\xf1\xec\x7d\xc6\xe8\x58\xf9\x15\x2b\x9e\xaa\x85\xf5\x66\xbe\xf3\x8b\x43\xc9\x6d\xcf\xcb\x0c\x5a\xb3\xcf\x40\xd5\x17\x28\x0e\xe4\x84\x5e\x25\x1e\x0b\x77\x29\xb9\xfc\xb0\xdf\xd4\xc2\xa1\x2c\xfe\x6f\x2d\xde\x7e\x70\x2a\x0b\x46\xb5\x1c\xb5\x08\x7f\x91\x1e\x3d\x35\x03\x33\x0b\xc5\x81\x16\xb7\xed\x4b\x29\x97\xdb\xe8\xa1\x33\xb6\xd0\xf9\x1a\xfa\x93\x40\x21\xa2\x27\x52\xa8\x5c\x4e\x18\x4d\xee\x7c\x39\x73\xce\x18\x0b\x05\xb0\x2d\x09\xd4\x4b\xf2\xae\x18\xbc\x10\xef\x09\x94\x05\xdc\xaf\xbd\x91\x53\x77\xbc\xb4\xe7\x65\xc4\x0a\x9e\x9c\xe3\x34\x38\x3a\xf5\x7a\xd0\x29\xc7\xfa\x74\x0f\xc8\x0d\x82\xe2\x40\x7e\xd8\xae\x5a\xae\x3b\xf6\x9c\xff\xca\xde\xe2\xa1\xfd\x11\xf5\xec\x8f\x88\x96\xa9\x35\x77\xd6\x59\x18\xfc\xd3\xb7\x5d\x54\x45\xf4\xc0\x96\x04\x8a\x03\x89\xe1\x18\xd7\xff\x19\x62\x91\xa5\x34\x71\x4c\x2b\xa5\xee\xcf\xf6\xfb\x08\xc3\x8c\x92\x1b\xf2\x5f\x04\xfb\x9e\x10\xec\x39\xbd\xb8\x78\x07\x33\x0b\xc5\x81\xc4\xd0\xf5\x41\x04\xfb\x95\x54\x63\x9d\x65\xfc\x07\xa6\xc2\x1c\xf2\xd9\x2a\x2e\x83\x0a\x9f\x63\x1c\x35\xb7\x2c\xb5\x21\xf6\x7b\xa9\xc0\x8d\x38\x28\x0e\xe4\x84\x87\x39\x22\x33\x19\x45\xe5\xc6\x65\x0b\xba\x58\x4f\xd3\xff\xc2\x3f\x4e\x7a\x46\xbf\xfe\xa1\xf3\xd8\x47\xd6\xb8\x6b\x21\xa1\xc2\x1f\x66\x16\x8a\x03\x89\xe1\xd5\xe4\x54\xae\xd8\x93\x0e\xd9\x1e\x5b\x99\x9f\x64\x17\xd3\x6b\xe1\xf9\x45\x5e\x3d\x56\x55\x9d\x86\xd1\x25\xe7\xb8\x8d\xb7\xbb\x30\x31\x40\x2d\x5f\x77\xc5\xa0\xdf\xaa\x73\x8f\xd9\xe2\xc9\x66\x1b\x15\x17\xad\xe5\x6c\x71\x8a\xa0\x6d\xd7\x60\xde\xdb\x71\xcf\xf2\xe1\xd0\xf0\x13\xcf\x6c\x60\x0a\x43\x71\x20\x3f\xf4\x7c\xf6\xdd\x0e\xd5\xc6\x3b\xdd\x12\x2b\x57\x91\xe0\x9c\x9d\xf5\x5a\xac\xd4\x75\xf2\xcf\x35\x10\x7b\xc3\x2e\x28\xb0\xf5\x18\xf8\xaa\x80\xe2\x40\x62\x78\xd8\x1e\x3c\x60\x4a\x13\xd7\x3b\x53\xe1\xb3\x54\xf0\x82\xb2\x3f\xdc\xc3\xc1\x1c\xab\x6f\xe0\x03\x81\x5c\x8a\x63\x24\x7a\x33\x50\x80\x0e\x8a\x03\x89\x41\x4c\xb2\x73\xee\x72\x88\xe0\xd7\x92\x89\x3a\x0e\x09\xf7\xd5\xa3\x8b\x59\x93\xc4\x2a\x86\xae\xa4\x97\x63\x12\x24\x05\x7a\x12\x40\x7a\x1f\x14\x07\x72\xc2\xae\xc9\x4a\xc5\x85\x9a\x5e\xfa\x71\xec\xa0\x10\x9a\xc6\x0f\x84\xad\xf3\x19\xdb\x45\x44\xeb\xd4\x27\x6b\xb5\x88\xe3\x09\xae\x4f\x60\x66\xa1\x38\x90\x18\x7a\x11\xbf\xaa\xcc\x67\x46\x77\x12\x87\x70\x49\xa9\x91\x99\xc1\x79\xb4\xa2\x4c\xc9\x49\xc2\x31\xa6\x71\x23\xf2\x2f\x56\x20\xd9\xc2\xc4\x00\xb5\xb1\xf8\x1f\xf9\xc4\x78\xe3\xfa\x08\x56\x41\x4e\xef\x3e\x95\xa8\x58\x3c\xc6\xf7\xcc\x23\x11\x18\xf1\xe2\xb5\xe6\xf0\x5f\xa5\x7c\x6e\xb5\x46\x06\x54\xf1\x82\xe2\x40\x7e\x50\xba\x32\xa8\x47\x36\xe3\xb6\x1d\x26\xa8\x3f\x44\xb4\x54\x24\x5f\xf8\xb6\x9f\xfa\x97\x95\xf2\x20\x3f\x5f\x8b\xe6\xa2\xc0\x07\x28\x5a\x0b\xc5\x81\xa3\x41\xf3\x73\x13\x97\x21\x69\x68\xba\x1c\xb9\xe4\x5f\x5c\x52\xd6\xca\xff\xd6\x65\xb5\xe5\x97\xa9\xcd\xe3\x6b\xd5\x24\x0e\x2a\xd1\x00\xe1\x0a\x08\x0e\x24\x06\xd4\xe2\x1e\x83\x0b\x7a\x72\x63\x01\xf4\x2f\xba\x6e\x7c\x8d\x08\x68\xd7\x09\xeb\x1f\x08\x6a\x05\x9f\x45\x20\x29\xa3\xd1\x96\x00\x61\x1b\x28\x0e\x7c\xb3\x17\x21\x15\x4b\xc1\x48\x08\xb1\x5a\xa1\xb1\xd1\x37\xd8\x68\x03\x77\xac\x94\x4b\x3e\x57\x41\xe8\xe0\x23\x71\xef\x7b\x53\xf8\x17\xc0\xcd\x5e\x08\x0e\x24\x06\xc4\xd4\x1b\xf5\x45\x9b\x98\x60\xf3\x09\xf4\x18\x14\xd9\xae\x5c\x15\xc6\x50\x57\xc5\x96\xb7\x02\xf1\x2b\x8c\xd7\x3c\x9c\xb2\x6e\x30\x31\x40\x6d\xf9\xfe\x47\x6e\x90\xd1\xeb\xb0\x1d\x8f\xf4\x50\xad\x6d\xcf\xb9\x16\xe4\x6f\xf6\x2c\x83\x9e\x7b\x48\xbf\x0e\xb4\xb6\xac\xfb\x72\x2d\xc8\x55\x80\x06\x26\x50\x1c\xc8\x0f\x76\xb7\x85\x7d\xd9\x19\xa4\x5b\x89\xf0\x67\x68\xac\xd2\xbd\x65\x8e\x9b\xb4\xa5\xd2\x16\x97\x75\x19\xaf\x32\xf6\x63\xb6\x7a\x81\xb2\x81\x50\x1c\x48\x0c\xf8\x5c\x03\x92\xcf\x39\xbe\x56\x5d\x38\x56\xe9\x9a\x0a\xbf\xe8\x94\x27\xe2\xf6\x9f\x71\xfd\xd3\xc0\xc3\x58\xf2\x06\x35\xca\x16\xa8\x84\x05\xc5\x81\xc4\x90\x79\x9f\x01\xf3\xdd\x33\x79\x25\xc9\x95\xb0\x6c\x5c\x93\xbc\x19\x89\x6d\x07\x22\x22\x3a\x1a\x8b\x8c\xaf\x4a\x67\xdf\x26\xec\x80\xca\x9f\x50\x1c\x38\x41\x4a\xe7\xfd\xbb\xa7\x51\x6d\xf8\xef\xcc\xfc\xc6\x3f\x25\x1a\x14\xf1\x6b\xce\x57\xb9\xc3\x53\x04\xc5\xb7\x20\x56\x28\x68\xc0\x75\x03\x09\x52\x10\x1c\x48\x0c\x68\x46\xe2\x34\xa8\xfa\x5e\x14\xaf\xf1\x90\xd2\x1c\x5b\x4d\xd1\xa5\xb2\xb2\x39\xb6\x43\xd4\xf1\xbc\x29\x03\x67\x75\x74\x6a\xc8\x60\x62\x80\xda\x8c\xdf\x15\xc3\x28\x8b\xb8\xec\xea\x07\xc1\xe0\x57\x18\x57\x06\x9e\x81\xa1\x91\xa5\x4b\xe1\x0c\x1d\x8f\x15\x0b\xac\x24\x76\xdc\x04\x58\x14\x81\xec\x49\x28\x0e\xe4\x87\xa8\x67\xef\x97\xd1\xe6\x56\xb5\xe9\xdf\x2f\x8d\xae\xf7\xd4\x49\x7f\x97\x24\x8b\xbe\xf5\x6a\xb5\x7b\x4f\x1c\xf6\xe9\x8b\x9d\xd9\x09\xcc\x2c\x14\x07\x12\x03\x6d\x97\xbf\x2e\x55\xd0\x86\x5d\xc7\xaf\xe5\x48\x39\xb2\xa3\x40\x5e\xf2\x3a\xf8\xd3\x6f\xeb\x69\xb6\x38\x73\x76\xa2\xe8\x91\xcb\x30\xb3\x50\x1c\x78\xcf\x50\xbe\xa0\xdf\x62\x75\x20\x7d\x43\xb5\x3c\xc3\x57\xca\x37\x57\xbd\x5c\xc6\xc5\xb6\xad\xbf\xf1\x0a\x51\xf6\xa3\x67\x55\x0b\x50\x69\x00\x8a\x03\x39\x41\x6c\x2e\xff\xfb\xc1\x9e\xa6\xc6\x97\xde\xd9\x8c\xac\x89\xc8\xb7\x84\xa3\xb9\x46\x27\x13\x4a\x02\xbe\x32\x53\x45\x65\xb2\x63\x40\x82\x14\x14\x07\x12\x83\x4f\x9e\x46\x85\xec\x97\xd1\xc8\xc3\x6a\xfa\x62\x6d\x8e\xc0\xd6\xbd\xb4\x4c\x1f\x8c\x98\xa3\xbd\xc3\xb3\xf5\xaf\x64\x73\x7f\xdf\xc3\xc4\x00\xf5\x99\xf4\x3f\x0a\x8a\x36\x46\x66\x51\xa7\x13\x25\xa5\x37\x26\x7d\xa7\xd9\xc9\xf1\x25\x78\x4d\xc3\x15\x2a\xc3\x3a\x5b\xda\x5f\xa8\xe0\x89\x16\x03\xe4\xe1\x41\x71\x20\x3f\xd8\xef\x57\xd5\x1f\x3c\x32\x24\xfb\x83\x8c\xd8\x12\xeb\x30\xed\x51\xcb\x9e\xbb\x68\xf5\x62\xf3\x8b\x98\xe7\x12\xfa\xb7\xef\xd7\x40\x90\x09\x8a\x03\x89\x61\x2f\x3a\xe0\x0a\xc5\xf8\x72\x51\x40\x0d\x7e\x2d\xba\x50\x53\xae\x0c\x45\xf3\xb7\xb5\x73\x29\x17\xd2\xa5\x0e\xd9\x83\x84\x1d\xe0\x6c\x1e\x8a\x03\x89\xa1\xf6\x21\x97\x71\x3b\xe6\x06\x5b\x5d\x4f\x68\xdc\xe5\x48\x67\x76\xaf\xe8\x08\xa7\xb9\x17\xa1\x68\x4e\xeb\xe0\x07\xd5\x50\x01\x31\xe0\x62\x0a\x04\x07\x72\xc2\x05\x45\x82\x96\xe5\xbb\x55\x36\x15\x67\x05\x99\xfe\x02\xab\xa3\xfb\x6c\x1d\x36\x27\x89\x18\x43\x72\xdb\xb4\x8c\xd7\x1a\x3b\x91\x40\x2a\x01\x04\x07\x12\xc3\x0a\x3d\xf3\xda\xa7\x82\xc8\xd8\x1e\x01\xb3\x56\xa5\x63\xb8\xbd\xd7\xd4\xb4\x4e\x51\x7c\xc1\x51\x74\x42\x09\x07\x32\xca\xee\x74\x40\x59\x34\x88\x0f\xd8\xff\x51\x30\x31\xcd\x69\x00\xb3\xe3\x4c\x10\xde\xc7\xc3\xc4\x5a\x3f\xc8\xa5\xb1\x1f\xf9\x58\x28\x2f\xf2\xeb\xc4\x77\x93\x55\x8f\xf2\x37\x40\x0e\x08\x14\x07\xae\x3b\x5d\xc8\xa0\x86\x97\xa8\x60\x79\x84\x72\x6e\xa6\xd8\x22\x71\x43\x62\x41\x54\x53\x1b\xf4\x20\xf9\x76\xc4\x7e\xa0\xe1\x39\x0d\x70\x12\x09\xc5\x81\xc4\xe0\xd6\x1d\x74\x68\x2c\x66\x4a\x96\x87\x19\x4d\x84\x49\x8a\x2c\x60\x1c\x27\xf2\x58\xab\x0c\xeb\xdd\xf4\xe4\x40\x54\x45\x0c\x29\x2f\x10\x79\x85\xe0\x40\x62\x08\xb4\xff\x2b\x32\x84\x3c\x83\xf1\xa9\xdd\x04\xd9\x79\x2c\xb3\x7e\x5d\xfd\xe5\xd9\x58\x4f\xe1\x4e\xd2\x48\x3a\x63\x85\xe1\x7c\x10\xcc\x2c\x14\x07\x2e\x16\x62\x5e\x67\x5f\x20\x68\xc6\xd1\xb8\xde\xab\xe6\x27\xff\x13\xce\xa2\xc2\x09\x3f\xec\xbb\x9f\xb9\x79\x76\x9b\x77\x40\xdf\x16\x36\xcc\x2c\x14\x07\x12\x43\xf0\xf6\xb3\x29\xfa\x84\x58\xf7\xbe\x3f\xb7\x8a\xe6\x25\x94\x23\x7b\xc9\xd2\x5f\x75\x45\xcd\x32\xec\x24\x7c\xe5\xbd\xd1\x94\xae\x80\xd0\x20\xd4\xa1\x22\xac\xd7\xe0\x02\xf8\x1c\x24\x91\x75\xe3\x53\x64\x0f\x4b\xa5\xce\xa8\xf0\x64\xc0\x74\x64\xbd\xd9\x85\x3f\xc1\x19\x82\xce\x3b\xff\x27\xab\xfb\x7a\x85\x16\xff\x7e\x2b\x1b\xee\x0c\x3c\x24\xea\x90\xb8\x02\x62\xb0\x3f\xef\xab\x75\x86\x51\x97\x8a\x8c\x6f\xfd\xfe\x1a\x1f\x83\x53\x5e\x24\x1f\x26\x57\x7d\x42\x4c\x2b\xec\xf9\xbf\x39\x7a\x81\xfa\x61\xff\xa3\x31\x6b\x27\x12\x7e\x92\x62\x81\xdd\x8f\xa0\xdb\x55\xea\x59\x57\x49\x79\x57\xc6\xda\xd5\x13\xd5\xaf\xe3\x65\x95\x89\x89\x4f\xb3\x81\x16\xfc\x50\x1c\x48\x1a\xf3\xee\x9f\x26\x58\xd2\x31\x28\x1c\x54\xbd\xb8\xb2\xf5\x85\xb7\xa8\x03\xbe\xda\x66\xc7\x51\x86\x5d\xca\xc8\x5c\x7c\xac\xab\xe1\x03\x2e\x7b\x43\x70\xa0\xf9\x61\x5b\x50\xe3\x98\x57\x1c\x4d\x90\xfe\xdd\xfe\xfd\x2c\x43\xc5\x45\x9c\x85\xc3\x4b\x89\xdf\xb8\xa7\xb4\x3c\x7b\x2d\x9a\xc3\x66\x40\x44\x1e\x8a\x03\xcd\x0f\xd9\x1c\xe6\x1f\x94\xcd\xae\xcc\xe8\x54\x56\x07\xd1\x63\x75\x12\x6a\x2a\x5f\xec\xb5\x99\x05\x55\x98\x59\x53\xa2\x1f\x99\xad\x00\xb7\x5f\xa0\x38\x90\x13\x08\x78\xdb\x22\x56\x1b\xf2\xfb\xc6\x6b\xc8\x1e\x6a\x68\xf1\x3f\x59\xcd\x3b\xea\x90\xfa\x86\x4b\x25\x47\x67\x2e\xda\x2e\xa9\x0b\xbc\xda\xa1\x38\xd0\xfc\x08\x73\x6d\xbf\x87\x43\x5c\x91\xa9\x7d\xdb\xb3\x5c\xa3\xfe\x20\x40\x46\x8c\x06\xc5\x08\x25\x7f\x79\xfc\x23\x67\xde\x9f\xd2\x91\x33\xd8\xcb\x12\x4a\x72\x77\xc5\x80\xb3\x14\xc0\x47\xe0\xe0\x01\x4f\xd1\x2d\x13\x5b\x98\x18\xbb\xff\x37\xeb\x25\xc2\xf5\x77\x31\xba\x98\xc4\x67\x47\xf1\xcd\x09\x40\x79\x1a\x28\x0e\xe4\x07\xee\xc3\x78\xb8\x6a\xb6\x7c\x56\xac\xae\x36\xc4\xd1\x81\x7b\xf0\x7a\x4b\x81\xb5\x8a\x48\x08\x9d\xbf\x9a\xd6\x75\xc8\x7e\x93\x8e\x02\x57\xa1\x20\x38\x90\x18\xc2\x36\x52\xee\x73\x10\x10\x23\xa4\xa9\x4b\x07\x2a\xfc\x10\x1f\x92\x7c\xfe\x26\x5f\x3b\xf1\xbc\x80\x93\x07\x47\x27\x81\xf7\x06\xb8\x7b\x09\xc5\x81\xc4\x10\x17\x40\x71\x2d\xa1\x30\x77\xb2\x6f\xd6\x33\xa3\xf4\x32\xc2\xe2\x3a\x33\x62\xd4\xe9\x75\xbe\xee\x22\xa2\x2e\xef\x4f\xd5\x13\xa0\x90\x26\x14\x07\x0e\xe8\xe2\xfb\x68\x09\x22\x18\xda\x72\xd3\x8d\x8b\xb6\xd9\x2a\x35\xdb\x53\xbb\xb8\x86\x78\x5f\xb5\x14\xdc\x9e\xe5\x46\x7c\x72\x4c\x81\x99\x85\xe2\x40\x62\x10\x64\x90\xe9\x60\x92\xb0\x65\xca\x71\xce\xbe\xa0\x6d\x4b\xe0\xe7\x66\x2a\xec\x46\x73\x19\x78\x4e\x5c\x90\x97\xb3\x5f\x9b\x12\x08\x13\x03\x54\x30\xe8\xae\x18\x84\x3f\x8c\x10\x8a\xb2\x2e\xbd\x9c\xb0\x8d\x34\x48\xe6\xf0\x0e\xce\x22\xec\x6f\x7a\x47\xa1\x6e\xe4\x6d\x5d\x2d\xd4\x3a\x78\x0e\xdc\x02\x82\xe2\x40\x7e\x58\xf9\xb3\x68\xae\x8d\x83\xc8\x7e\x53\x36\x6b\x79\x2a\x68\x95\x6f\x8e\x9f\xe5\x39\x43\xfe\xc0\xbd\x7f\xca\xe8\x74\xe4\xf8\x35\x50\xf9\x13\x8a\x03\x89\x21\x89\xdd\xff\xa5\xc2\xe3\xcb\x58\x9c\x88\x13\x35\xb3\xca\xda\x64\xc4\x49\xf3\xc5\x37\x13\x57\x7e\x33\x6c\x35\x9f\xbf\x4b\x67\xec\xc0\xcc\x42\x71\x20\x31\x50\xe9\x74\x6c\x14\xf0\x95\x07\x37\x67\xbb\xb4\x94\xae\xc2\x4d\x0b\x75\x77\x7f\xfa\x14\xa1\x52\xe3\x1b\x6a\x35\xc0\xa8\x93\x2f\x00\x33\x0b\xc5\x81\x9c\x60\x41\xe4\x63\xdc\x77\x8c\x9f\xc5\x39\xd1\x99\x1e\xf5\x89\x75\x43\x5e\x84\xd8\x38\x96\x64\xe3\x42\x99\x32\xc1\x49\xaf\x9b\x02\x1d\x08\x0d\x72\x19\x7a\x5c\xd8\x3a\x7a\xaa\x9a\x8c\x32\xeb\x18\x14\x53\x4f\x6c\xe0\xdf\xfa\xbf\xb9\x9d\x30\x44\xa3\x3c\x10\x22\xc4\x86\xc3\xfa\x6f\x68\xd0\x9a\xef\x09\x2f\xe1\x04\x06\xba\xae\xb8\xd4\x99\xc0\x82\xcd\x1e\x3f\x5e\x6c\x6a\x15\x81\x3b\x76\x77\xc1\x04\x6d\xab\x2d\xf7\xe8\x7f\x8f\x7e\x1c\x99\xe9\xd8\xbd\xe7\x17\xc5\xcb\x9b\xc9\xd1\xfb\x58\x07\xab\xfa\x24\x74\xc2\xbd\x27\x76\xbf\x05\x7d\xdb\x64\xc7\x3b\x73\x01\x85\x06\xa1\x2c\xdf\x0d\x0d\x1e\x08\x8c\xeb\x36\xa8\x73\x5b\xc6\xdd\xa2\x9e\x99\xbb\xb3\xcc\x93\x64\x96\xfe\x95\xc4\x92\xca\x50\x6f\xfe\x6a\xae\x27\x92\x8c\xf8\x1f\xb4\x1b\xb9\xf0\x76\x71\x40\x37\x26\x44\xc1\xc5\x56\x95\xb1\x62\xd9\x24\x20\xa6\xe9\xd9\xd1\x90\x26\xaa\xbb\x90\x59\xfa\x28\xe3\x3e\x10\x1a\x84\xb2\x09\xeb\x35\x08\x0e\x0d\x2e\x19\x77\x3d\xc1\x23\x5b\x75\x7c\xdd\x6b\xa3\xce\xac\xbe\x4f\x4c\x68\x54\x14\x2e\xed\xd2\x6f\x9a\x1e\x31\x41\x30\x3e\x6f\xc3\xf5\xcf\xab\xbd\xe8\x9d\xd0\xa0\xde\xb3\x00\x78\x91\x17\x4a\x85\x7a\x47\x52\xd1\x73\xf2\x65\xc9\x01\x89\x0c\x25\x56\xbe\xbb\x3a\xaf\xde\xe1\xac\xad\x61\x17\x6c\xfd\xfb\x90\x77\x42\x83\xc6\x76\x41\xd8\xfc\xa2\xe6\x2c\x9c\xa2\xf7\x91\xaf\xa9\xda\xfb\x9e\xf0\xaa\xb9\x1d\xac\xe5\xa1\xd8\x31\xb4\x73\x2d\x8e\x8c\x12\xfc\xfb\x90\x77\x42\x83\xb6\x2b\x2a\x53\xcf\xc8\xd5\x99\xaf\xab\x86\x37\xc3\xac\x23\xfe\x38\x28\x66\x21\x24\xde\x94\x0f\x4f\x3d\xfa\x3b\x14\x1f\x44\x2d\xfc\xef\x43\xde\x09\x0d\xde\xbb\xe0\x2b\x3e\x42\x6f\x79\x58\x14\x33\x68\x89\x2b\x28\x31\x11\xee\xaf\x4a\xdb\xdc\x19\x9f\x1d\x2e\x46\x69\xd9\x1d\x69\xfe\xfd\xdf\x87\xbc\x13\x1a\xfc\xc4\x79\x78\xb6\xeb\x1c\x1e\xa4\xe8\x4f\x39\x45\x17\x94\xbd\x5d\xc9\x98\x57\xc7\xaa\xbd\xb7\x69\xf3\x93\x2c\x51\x67\x96\xa4\xfe\xdf\x87\xbc\x13\x1a\xbc\xff\xc4\x3c\x3f\xee\xc7\xe1\xb7\xc4\x10\x4d\x2c\x84\xd4\x36\x23\xc2\x68\x69\xf4\xf8\xe6\x38\x06\xa9\xbc\xda\xda\x7b\xbd\x1f\xbd\xff\x7d\xc8\x3b\xa1\xc1\xfe\x72\xcd\xe8\xea\xca\x85\xa1\x3f\xfd\x9b\x35\xa7\x6b\x28\xc5\x35\xd5\x76\x94\x81\x25\x46\xb7\x2f\xf3\xd8\xf1\x67\xd3\x2a\xe1\xfe\x6f\xf6\xa7\x50\x53\xf1\xee\x2a\x44\xc0\xfc\xe2\x4d\x63\x12\xde\x5a\xc1\xce\x78\xfe\x9c\xda\x6a\x4a\x5a\xdb\xf7\xd7\xad\x0d\xfe\x83\xae\x02\xfd\x69\xda\x61\xf1\x40\xd3\x6a\x28\x0e\xf4\x02\xbe\x1a\xb2\x24\xac\x97\xd8\x3a\xc6\x96\x5a\x32\x18\x13\x19\x64\x42\x43\xfd\xce\x4f\xb9\x89\x79\x4a\xc5\xff\x21\x30\xd5\x9a\x1e\xa8\x7e\x03\xc5\x81\x56\xa1\x52\x53\x7e\x3a\x99\xae\x7c\x79\x8c\xc1\x55\xdd\xa5\xcc\x12\x8f\x98\xee\x87\xc8\xb9\x5f\x6b\x51\x44\x5f\xc3\x9b\x35\x68\x65\x02\x1d\x6f\xa1\x38\x70\x49\xb7\xdc\xb4\x19\x2b\xf6\xef\xe9\xde\xc4\xaf\x12\x1a\x6e\x09\x5e\x1f\x32\x18\x54\x3f\xa7\x68\xf4\x1a\xd5\xce\x7c\x30\x94\x31\x87\x00\x33\x0b\xc5\x81\x8a\x91\xc7\x3e\xa3\xac\x38\x7c\xa7\xf5\x47\x08\xc9\x8d\x6f\x98\x7d\xa1\x3e\x83\xb5\xc4\xf5\xa3\xd7\xd4\x32\x91\x90\x70\x96\x06\xc7\xcb\x28\x98\x59\x28\x0e\xb4\x25\xc9\x5c\x7b\x9a\x15\x03\x5f\xbd\x66\x1b\x1a\x0d\xb7\x74\xc9\xb7\xcb\xf5\xcb\x37\x13\x49\xe8\xb8\x2f\x9e\xa9\xad\xc6\x38\x71\x6a\x04\xb6\x25\x81\x7a\x49\xde\x15\x43\xc5\xdb\xc2\xf0\xf1\x74\xba\xd0\x54\xbf\x92\xa7\x44\x67\xd5\xd4\x25\xd1\x6a\xee\xf4\x08\xac\x27\x38\xee\xef\x66\x92\x66\x43\x80\xf4\x3e\x28\x0e\x24\x86\x24\x0f\x17\xb4\xca\xb7\x38\x7f\xa3\x18\xea\x0f\x54\xa2\x29\x47\xc4\xe6\xbe\xb5\x6a\xa4\xf1\x22\xc8\x11\x77\x92\x04\x15\x77\x37\x00\x7b\x07\x08\x0e\x24\x86\x66\x8a\xc5\x5e\xff\x95\x17\x0d\x55\xc8\x12\x3f\x2b\x93\xfc\x43\x82\x1d\x5e\x91\x07\xb5\x12\xb7\x70\x7e\x94\x80\x73\xeb\xe5\x07\x3a\xfc\x43\x71\xe0\x86\xe0\x98\x01\x34\xdf\x3b\x37\xbc\x03\x25\x93\x9c\x8f\x19\xf7\xd9\xf1\xc3\xfa\x90\x7f\xd5\x74\x89\x8c\x13\x30\x4d\x09\x4d\x88\x02\x7d\x83\xa0\x38\x90\x18\x6c\x33\xb3\xa3\x96\x0f\xfc\x89\xba\x38\xb6\xe0\x4c\x03\xa3\xac\xb1\x14\x23\x42\x62\x0d\x1a\x9c\xa4\xcd\xd4\x29\x7a\x19\xdf\x03\x79\x57\x50\x1c\x48\x0c\xf5\x95\xe1\x2c\xe3\xb6\x4b\x28\xb3\xac\x3e\x38\x4e\x79\x76\x0e\x03\x51\xc7\xf6\x62\x49\x9b\x9c\xb8\x05\xd6\x61\xbe\xc4\x18\x99\x30\x31\x40\x2d\x5f\x77\xc5\x10\x6d\x83\x18\xfc\x9b\x22\xd1\x6d\x46\x2f\x18\xf1\x94\x9a\x8a\x8f\xb8\x30\xbd\xd7\xfc\x73\x4b\x7e\x6d\xe3\xa4\x42\x7e\x06\x01\xf0\xe5\x0a\xc5\x81\xdf\x0c\x16\x25\xbf\xa6\xe6\x98\xaa\x04\x8a\xba\x6c\x26\xe3\xe1\x5e\x79\x71\xf6\xe3\x19\x1f\x67\xd5\x6b\x20\x15\x08\xda\x2b\x98\x1a\x02\x6f\x06\x08\x0e\x7c\xb2\xf3\xd5\xee\xdc\xf3\x39\x9b\x83\x29\xe3\xf0\x8d\xdd\x2f\x3f\x8c\xb2\x24\xa7\x57\x09\x37\x62\x1d\x8f\x97\xf8\x6e\x8c\x9c\x7d\x80\x82\xa2\x50\x1c\xc8\x09\x89\xb7\x7a\x3e\x5e\x36\xe3\x17\x3a\x83\xd2\xbc\xc1\x4f\x90\x7f\xff\xe5\x48\x09\x98\x40\xb4\x0a\x30\x8a\x2e\xf8\xf3\x2b\x2c\x29\x0f\x66\x16\x8a\x03\x89\x21\xee\xd2\x3a\x9b\x8b\xd2\x79\x54\x58\xd2\xe4\x3e\x6b\xa5\x6c\xd0\x6a\x73\x0c\x02\xe2\xfd\xa1\x76\xcc\x03\x72\xa3\xc6\x17\xe2\x40\xd9\x40\x28\x0e\x24\x06\x7e\xa4\xc7\x6d\x25\x44\xd9\x09\xc3\x24\x4b\x34\x2a\xaf\x16\x65\x03\xee\xab\x9f\xcb\xf1\x89\xbb\x6f\xa4\xe2\xfe\xc0\x12\x4b\x8d\x87\x89\x01\x6a\x63\x71\x57\x0c\x2f\xaa\xa4\xe7\xfa\x6e\xec\xba\x2e\xc3\xf5\x85\xae\x7f\x71\xa6\x9e\x07\x4b\x44\x8e\xfb\xdd\x62\xf9\x36\xff\x08\x0f\xac\xca\x01\xce\x1b\xa0\x38\x70\x01\xab\x58\x84\xd1\x05\x61\xcd\x65\x38\x52\x91\xe2\x30\x5e\x0a\x74\xd1\xb0\xf7\xe6\x28\xbd\x7e\xf5\xf5\xcd\x15\x5e\x4f\x46\xde\x03\x65\x74\xa0\x38\x90\x18\xb2\x36\xc3\xc9\x17\x6b\x1c\xf9\xb5\x1e\xbf\xa5\x5b\x3d\x16\x9a\x9f\xfb\x88\xe9\xe5\xf1\xbc\x9b\xc0\xab\x4a\x91\x8f\x6b\xfe\xff\x9d\x8e\x40\x71\x20\x27\xdc\xb8\x5c\xd6\xe6\xda\x44\x4f\xf6\xa8\x8c\x1e\x12\x8a\xbd\xea\x54\xd0\x10\x9a\xe0\xf0\x1e\xb5\x78\xa3\xe6\xe6\x24\x8e\xac\x07\x34\x9e\x84\xe2\x40\x62\x88\xdf\xc3\x16\x43\x46\x42\xa1\xfa\xf5\x8b\x36\x75\x4b\x2b\x3a\x95\xcf\x32\xba\x91\x16\x2b\x06\xc1\x27\x8c\x1e\x23\x9a\x28\x00\x48\x90\x82\xe2\x40\x62\xc8\xea\x0b\x10\x27\x16\x7b\xd3\xd3\x86\x1d\xaa\x23\xc1\x58\x40\x68\x32\x59\x90\x13\xfa\xee\xe8\x70\x56\x9f\x11\xfe\x34\x46\xef\x19\x4c\x0c\x50\x5b\xbe\xbb\x62\x70\xa2\x79\x7f\x7d\x9e\x7a\xcf\x7d\x3f\xb8\x96\x50\x48\x4d\x34\x9c\xe9\x7e\xe9\x6b\x9f\x6c\x69\x32\xfc\xb0\x27\x46\x87\x96\xc2\x2c\x40\x16\x38\x04\x07\x12\x43\x55\x17\x19\x6d\x24\x83\xdc\x57\xca\x5c\xea\xf7\xda\xba\x09\xd2\xfd\xcf\x9f\x92\xdf\x74\x7f\x1d\xeb\x9f\x83\x7b\xd6\x63\x5c\x0b\x1c\x0c\x40\x71\x20\x31\xe4\x68\x73\xb2\xbc\x25\xc4\xd5\xa4\xec\x68\x46\xf9\x15\x67\x1e\x1f\x3a\x65\x4f\x93\x92\xec\xd7\x6d\x8c\x8c\x39\xba\x33\xab\x05\x94\x74\x83\xe2\x40\x4e\x58\x1b\x66\x2f\x65\xe2\x3b\x51\x26\xb2\xff\x72\x2d\xdd\xc1\xbd\xdf\xcd\xea\xa0\x5f\x43\x97\x34\xf5\x02\x5d\x23\x77\xac\x2a\x0b\x88\x06\x41\x71\xe0\x06\x26\xe9\x54\xef\x98\xa4\x57\x1e\xce\x3d\x45\x9c\x7a\x8e\x63\xfd\x64\x59\x79\xb4\x60\x26\xef\xc7\x64\x11\xa9\x9a\xa4\x1e\x26\x77\x06\xe0\x04\x08\x0e\x24\x86\xb7\x9b\x66\xda\x5a\x16\xa7\x6c\xcf\x9b\xfa\x0f\xcf\xcb\xdb\x3b\x3d\x7e\xa0\x3a\x3f\x26\xcc\x89\xe7\x8c\xd9\x8f\x51\x39\x56\x7e\x03\x13\x03\xd4\x66\xfc\xae\x18\x88\x03\x8e\xb9\x73\x49\x3e\xf6\xdb\x54\x5d\x37\x09\x88\x55\x66\xbf\xb4\xe2\xc5\xcf\xb2\x18\x27\x4b\x3c\x35\x31\xd5\xa5\x79\x05\xdc\xfb\x81\xe2\xc0\xb5\x91\x7d\x58\x92\x48\x58\x1b\x95\x1d\xe9\x9b\xa9\x0a\xd9\x42\xd1\xd8\xa6\xa9\x3f\x66\x73\xde\xa6\x65\x7f\x54\xfb\xe5\x91\xe5\x01\xb4\x9d\x81\xe2\x40\x62\x20\xa6\x8d\x42\xec\x23\x34\xab\xe0\x3b\x6f\x27\x93\xbe\x36\xeb\x43\x2d\x2c\xb9\xf2\x22\xac\x66\x88\xee\x4d\x1d\x4b\xdf\xfb\x0a\x84\x9f\xa1\x38\x90\x13\x38\xcf\x16\x92\x86\x0e\x6c\x23\x42\xb0\x9f\x67\x7f\x0a\x2b\xc8\x4f\xa1\x1d\x49\xd7\xb9\x35\x36\xc0\x23\x2d\x19\x5a\x78\xed\x50\x09\x33\x0b\xc5\x81\xc4\x30\xbc\x80\x97\x8b\x12\x84\xc1\x20\x61\xf8\x75\x79\x02\x99\xb4\x33\xac\x4c\xe1\x41\x30\xc2\x44\x7e\x91\xe7\x4b\xf2\xf7\x03\x2b\xc0\x79\x21\x14\x07\x12\xc3\xc3\xfe\x0e\xb1\xfe\xfd\x8a\x6a\xac\x47\x2b\x91\x5c\x51\x9d\x96\x02\x6c\x88\x2e\x76\x01\x3d\x03\xa2\x61\x13\x5a\x01\x2d\x83\x52\x30\x31\x40\x7d\x26\xdd\x15\xc3\x43\x0c\x95\xc9\xf0\x2f\xd6\xb3\xf4\x85\xa4\xe8\x4e\x72\xbd\x6a\x4e\x1a\xc1\x02\x87\xee\x3f\x4a\x7f\x6b\xd5\xc4\x0b\xba\x2f\x7f\x00\x2e\xe8\x40\x70\x20\x31\xf0\x98\x6a\x22\xb3\x49\xea\x86\x6a\xba\x24\xc0\x55\x54\x28\xbe\x92\xfd\x29\x6e\x91\xcc\xe8\x88\xcf\xb6\x68\x26\x20\x28\xe7\x65\x06\xdc\xa2\x87\xe0\xc0\x75\xa7\xf3\xff\xf0\xbf\xd5\xd8\x19\x73\x7a\x89\x72\x1f\x6e\x27\x5a\x67\x45\xaa\xf6\x74\xfc\x01\x56\x10\xaa\x13\xaa\x3d\xb1\xd1\x38\x50\x68\x0c\x8a\x03\x39\x41\x73\xeb\x30\x8e\xde\x44\xa6\xc0\xa5\x20\xf8\x67\xbf\x13\x4d\x8a\x8f\x3d\xcb\x6a\xc9\xb3\x39\x7e\x7e\x92\xa9\xf0\xbc\xcc\x24\xa0\xe1\x22\x14\x07\xfe\x9a\x08\xb8\x5c\x92\xd8\x66\x3f\x4f\x5e\x27\xd3\x62\xcb\x0e\x8a\xb7\x9b\x7a\xf0\xac\xea\x9b\xab\x20\xba\x03\x6a\x10\x57\xf1\x4b\x39\xe0\x6b\x02\x82\x03\x67\xa6\xf2\xc8\x8b\x05\x18\x53\x33\xc3\x35\x69\xc8\x05\xdc\x22\x0e\x5b\x5b\xfb\x76\x4d\xa5\x68\xb3\xf6\xd2\x94\x55\xad\x67\x27\x7a\x00\x17\x0d\x21\x3e\x60\xff\xc7\x75\x22\x52\x05\xb8\x68\x84\xd6\x64\x6a\x06\x5e\xfb\xeb\xb7\x3a\x64\x09\x0b\x53\x4c\x56\x52\x66\x0f\xc7\x07\x6a\x50\x68\x7d\x22\x80\x8d\x34\x14\x07\x12\xc3\x65\x64\xc4\xe0\xa3\xaa\x37\x1c\xdb\x8e\x4f\xa4\x1f\x32\xbd\x33\x7e\x9c\x6a\xb8\xc1\x25\x5b\xe5\x6a\x0b\xff\xa1\x6d\x29\x14\x13\x58\x26\xa0\x38\x90\x18\xdc\xe9\x73\x56\x2e\x9b\x5a\x9d\xd3\xe6\xe9\x83\x54\x9d\xe8\xdf\x3f\x8f\x3d\x93\x56\x5c\xf7\xd4\xe7\x7e\x70\xf0\xbe\x54\x68\xf9\x19\xcc\x2c\x14\x07\x72\x02\x63\xff\x2a\xd1\xcd\x6b\xd9\xa8\xfc\x43\xb4\x0c\xe6\x6a\xab\x8c\xdc\x43\x8f\x33\x41\xa7\x64\xe4\x6c\xcd\xc7\x5c\x66\x09\xf9\x40\x52\x35\x14\x07\x12\x43\x65\xda\x08\x06\x81\x6b\x76\xe4\xcd\x07\x7f\x3f\xa3\xb2\x92\xd0\xc7\x9f\xf2\x38\x74\x95\xd0\xa3\x1b\x24\x1f\x31\x14\xeb\xbf\x05\x82\xe5\x50\x1c\x48\x0c\x5a\x29\xe2\x46\xe7\xbc\xac\x92\x12\xac\xd7\xc5\x0c\x3f\x47\xa5\xde\xa8\x7b\x91\x22\x68\x0a\x78\x86\x48\xfa\x56\x78\xce\x48\xa5\x02\xa1\x41\xa8\x43\x45\x58\xaf\xc1\x3b\xa1\xc1\x24\x6f\x84\x38\xfd\x37\x81\x8f\xe6\x5a\x91\x6d\x4f\xa7\x77\xd5\x25\xe0\x4f\x43\xa3\x84\xff\x96\x13\x3a\x23\x4b\x7c\xd4\x98\x93\xff\xf7\xa3\x97\x3b\xa1\xc1\x07\x3c\x12\xcd\xcb\x35\xc5\x14\xd1\x8b\xfa\x45\xef\x6d\xd8\xa2\x1f\xaa\x86\x5e\xb8\xf3\xe6\x05\xcf\xa8\xcd\x5d\x1f\xc2\x05\x6d\xfc\xdf\x1c\xbd\x40\xfd\xb0\xbb\xf3\x03\x8b\x6f\x68\x55\x3e\xbb\xdd\x89\xef\x22\xff\xa5\x66\x4d\x0d\x2e\x15\xd1\xbd\x22\x87\xf2\x31\x33\xd2\xdc\x44\xdf\x1c\xaf\x9f\x40\xa3\x6d\x28\x0e\x34\x3f\x9c\x3d\x8f\x9f\x8d\xd2\x7f\x4d\x2c\x28\xf9\x2e\xb6\x44\xb9\x27\xfd\x06\xcd\x62\xbf\x6c\xcc\xe5\x87\x0f\xfb\x10\xfa\x6b\xa1\x31\xa0\x2d\x38\x14\x07\x9a\x1f\x9c\x87\x8b\x12\xa4\xbc\xf7\x35\x33\x5d\x7d\x75\xa9\xe6\x55\x0b\x0b\xed\xd4\xf7\x7b\x47\xd3\x3d\x11\x86\x5c\x6a\xb6\xf8\xdb\x80\xae\x75\x50\x1c\xb8\x1e\x39\xeb\x58\x36\xef\x61\x2f\xcf\x11\xe7\xc5\x0f\x4d\x81\x9f\x76\x57\xcf\xba\xd1\x51\x43\x63\x9a\x26\xf0\xcb\xb1\xcf\x9a\x73\x80\xb4\x36\x28\x0e\x34\x3f\x96\xe4\xfa\x54\xbc\xc3\xd6\x8c\xc5\x12\xbe\x5e\x66\x63\xe0\xd6\x3a\xe8\x91\x7d\x50\x78\x71\xd5\x57\xbf\x8d\xc2\x16\xa4\xa6\x09\x9c\x0d\x40\x71\xa0\xf9\x81\x3c\x59\xff\x76\xa1\xfd\x93\xc3\x4f\xe9\xf6\xa7\xda\x3f\x1a\x50\x62\x55\xeb\xe3\x95\x77\xa5\x96\x11\xe1\x9f\xb1\x19\x7c\x63\x73\x82\xbd\x2c\xa1\x24\x77\x57\x0c\xf9\xf7\x5e\x26\x68\x74\x47\x46\x97\x3f\x19\x7c\xce\x2a\x4b\xae\x27\x6f\x7d\xdd\x7e\x34\x17\x8f\x72\x16\x94\xa9\xc3\xb6\xdf\x7a\x0a\x7b\x60\x28\x0e\x24\x06\xca\xa4\xf3\xee\xdb\x26\xeb\x12\xe1\xb5\x89\xf0\xb1\xc0\x8e\x24\x66\xb9\xe7\xd9\x94\xb7\x87\x0b\x69\x39\xa4\x9a\xdb\x1a\x74\xae\x30\xb3\x50\x1c\x48\x0c\x09\x1e\x2c\x2c\x46\xe4\x4a\x5a\x7e\x6b\xcc\xfe\x9a\xc6\xfe\x4c\x6c\x13\x5a\xc7\x4b\x89\x7f\xa6\xcb\xad\x8f\x77\xae\x64\x49\x99\x60\x66\xa1\x38\x70\x6d\x9a\x40\x02\x5c\x23\x62\xaa\x65\xca\xd0\x58\xb7\x25\x63\x9d\xe3\xbe\x59\x9d\x4f\xe9\x0f\xf4\x4d\xc4\x38\x67\x8e\xe8\x12\xbe\x00\x31\x3c\x28\x0e\x24\x06\xd7\xb3\x6c\xbc\xed\x05\x4a\x9d\xba\xc7\x0d\x9f\x86\x6e\x0c\x4c\x36\x03\x5d\x50\xee\x8d\x7c\xa5\x20\x79\xe4\x7d\xcf\x3e\x2e\x14\x98\x11\x50\x1c\x48\x0c\xc2\x99\x6f\x67\x98\x5a\xc5\x2a\x07\x5e\xdc\xaa\x1f\xc2\xc7\xd6\x2c\xf0\xb1\x7c\x27\x66\x0f\xc2\xe6\xc4\x8c\xc9\x5f\x23\x5c\x4e\x80\x89\x01\x2a\x18\x74\x57\x0c\x06\xa5\x91\x64\x14\x8f\xb5\x46\xe7\x7c\xd9\x2f\x56\xb2\xe4\xd1\x16\xa5\x37\x53\xc3\x48\xbd\x3f\xd2\xdf\xe4\xca\x12\xde\x9c\x66\x02\xe7\x91\x10\x1c\x48\x0c\x4f\x51\x0b\xdc\x91\x2b\xa2\x36\xf1\x7e\x1e\x3e\x30\xf3\x9d\x72\x68\x98\x8e\xe8\x9d\xb9\x94\x65\x90\xfd\xce\xc9\x60\xbf\x10\x02\x94\xbd\x87\xe2\xc0\x1f\x58\x06\x1f\x14\xda\x1e\xd0\x74\x86\xfa\xa1\x5d\x3e\x37\xc2\x88\x9a\x96\x88\x6f\x72\xde\x88\x8a\x41\x1b\x4e\x7a\xf6\xf0\xe5\x09\x90\xc1\x0e\xc5\x81\x9c\x90\xee\xe3\x93\x67\xaf\x11\x87\x59\x86\xbc\x2b\x3e\x8c\x9c\x45\x24\xe3\xd9\xc1\x48\xc7\xf1\x8d\x1e\xbf\xf2\x95\xb9\x75\x0c\x32\x10\x1a\x84\xe2\xc0\x8d\xb6\x93\xe9\x32\xd1\x25\x5e\x94\xf1\x7c\x74\x75\x64\x8a\x66\x8a\x49\x5c\xab\x43\x3d\xd5\x9c\x5d\x35\x15\x40\x8d\xdb\x18\x89\xfd\x05\x84\x06\x71\xfd\xe0\x42\x72\x0a\xd4\x13\xca\x50\xfc\xf8\xc9\xa8\xec\xd2\xdd\xac\x1c\x28\xf6\xe3\xd4\x55\x93\xd1\x1a\x8f\x95\xf9\x32\x7f\xfc\x37\x34\x58\x15\x5b\x5d\xdc\xa9\xba\x83\xf4\x56\x6f\xee\xab\x90\x49\x79\xeb\x80\x64\xdb\xf4\x00\xfe\xe7\x6e\x2b\x34\xe7\x9f\x5b\x7b\xdb\xfa\xff\x41\xff\x88\x60\x10\x9b\x69\x2e\x38\x5d\x2e\x89\x6e\x11\xab\x90\x74\xf9\xaf\x0c\xfd\x7f\xac\xfd\x65\x54\x55\xd1\xf6\xff\x8f\x03\xd2\x48\x23\x48\x48\xa7\x84\x84\x02\x82\xd2\x25\x25\x20\xdd\x0a\x48\x77\x83\xb4\x74\x23\x8d\x94\x80\x80\x84\x48\x87\x12\xd2\x20\xdd\xdd\x29\x2d\x28\xcd\xff\xc1\x7f\x9c\x3d\xee\x77\x9f\x3b\xc6\xfe\xfc\x06\xf7\xf9\x6b\xcc\xb5\xce\x3c\xef\xbd\xd7\xda\x6b\xae\x39\xa7\x17\xe1\xe3\x1f\xa3\x97\xbe\xd1\xd3\x97\x6b\xb6\xae\xa0\xd0\x20\x94\x65\xf8\xd0\xa0\x13\x41\x2a\xf1\x37\x0f\x37\x4a\x0f\x13\x6e\xdc\xba\xd8\x2c\xc2\xc8\xf2\x4e\x6a\xb7\x6b\xc2\x45\x2e\xf1\x8b\x6c\x74\xfa\x79\xcf\xff\x40\x3f\x1d\x0d\x3e\x88\x41\x2d\x54\xba\x4a\x43\x0a\x08\xf3\xa0\xaf\x5b\x7b\x3c\xb5\xca\xe6\x3d\xf2\x75\xa8\xd2\xa4\x1a\x73\xfa\x19\x0e\x10\x1a\x84\xb2\x09\xeb\x35\x08\x0e\x0d\x26\xb1\x49\xfc\x8a\xcc\x8e\x8b\x5b\xf9\x2e\x7b\xb6\xc4\xb2\x2b\x6b\x6f\xe8\x83\xe1\xc4\xaa\xe0\x2f\x9f\x41\xe8\x83\x4e\xc1\xa3\x71\xeb\xd5\xde\x17\x2e\x34\x98\xea\xc1\x61\x34\x19\x1c\xb8\x30\x66\xf3\x31\x83\xe1\xb2\xc5\xe3\x55\xa6\xb3\xd2\xc4\xd9\x44\xb9\x4f\xce\x5d\xab\xf2\x39\x87\xe1\xdb\x0f\x09\x17\x1a\x2c\x73\x38\x2c\xfe\x3b\xd4\x32\x7c\xd4\xe6\xbb\x60\x83\xe2\x83\xf3\x81\xa2\x42\x4e\xaa\x36\x72\x77\xc9\xcc\xd7\xa9\x99\xf9\xce\x87\xdb\x0f\x09\x17\x1a\x24\x41\xee\xf4\x11\x22\xa0\xec\x2b\x2b\x2c\xc0\x15\xd3\x72\x70\xac\x4f\x18\x49\x13\x2a\x33\xca\xdc\x46\xca\x47\xd9\x94\x40\x40\xba\xfd\x90\x70\xa1\xc1\x61\xf5\xb2\x7f\xf7\x30\x1f\xba\x9d\xab\x46\x24\xcb\x08\xbd\xd8\x19\x62\x70\x39\x89\x4e\xea\x39\x35\xfd\xf4\x2c\x99\xe1\xe2\x62\xfc\xf6\x43\xc2\x85\x06\xbd\x8a\xca\x8e\x7d\xd8\x2f\x64\xbf\x74\x26\x04\xa9\x54\x87\x74\xf1\x6b\xff\x99\xa8\x6b\x51\x31\x45\xdd\x8b\xbd\xcc\xa9\x79\xcd\x70\xfb\x21\xe1\x42\x83\x33\xc5\x0e\x53\x11\xef\xf3\xd6\x9b\x38\x68\x56\x98\xbb\x6e\x3a\x02\xc6\x33\x52\x99\xdd\x50\x9a\xfe\xf5\xb3\xc8\x58\x14\x46\x3f\xbc\xfd\x90\x70\xa1\xc1\x16\x8e\x99\xc0\xef\x7d\xd2\x2d\xf1\xba\x91\x76\xe6\x7d\x7c\xc8\xbc\xc5\x6a\x22\x86\x42\x59\xc1\xee\x78\xab\xd6\xc8\x8d\x08\xb7\x6d\x55\xa9\xf5\x7f\x7b\x14\xe1\x57\xa1\x13\x75\xe1\x85\xf2\x7a\x23\x62\x46\xa2\xa8\xf2\xd0\x44\xe1\xa8\x09\xbb\xb3\x0a\x01\x2c\x7a\x2a\x0a\x3c\x29\xd6\xba\xd4\xa7\xc0\x11\x0c\x14\x07\x4e\x8b\xe1\xd5\x54\xaf\xc1\x5b\xd7\x32\x25\x43\xf2\x27\x11\x6b\x37\x2b\x24\xc3\x54\xbf\x6b\x79\x77\xd5\xd0\xe2\xe8\xf1\x23\x5e\x14\xa0\x44\x27\x14\x07\x2e\x01\xe4\x6d\x16\xb0\x55\x60\x7c\x50\x9d\xb6\x33\x61\x24\xb7\xca\xff\xe5\x03\x6b\x74\xbc\x59\xf0\x63\xd3\xe2\x82\x4f\x35\x02\x24\x3c\x30\xb3\x50\x1c\xc8\x09\x8d\x61\x12\xe7\xf1\xd1\xf9\xe5\x9f\xd1\xa9\x90\xdf\x71\xd7\xbe\xc0\xc7\xb2\xc2\x38\x6c\xc2\x94\xd8\x63\xba\x79\xf5\x56\xd9\x05\xb8\xa5\x03\xc5\x05\x88\x22\xfd\xa7\x59\x2e\xb7\xbb\x0b\xff\x68\xfc\xd2\xd2\x1e\xeb\x38\x2e\x29\x70\xb0\x8a\x27\x2a\x6b\x35\x67\xbe\x93\x7b\x72\xa4\xe7\x86\x2f\x80\x0b\xf4\x1a\x84\xe2\x40\xb3\xad\x0c\xd1\xa0\xc7\x97\xea\xda\x71\xb5\xbe\x5a\xcc\x52\x94\xc4\x78\xcc\xc0\xaa\x64\xf3\xe0\x8e\x12\xbf\xee\xfc\x87\x43\xef\x23\x4f\xd8\x96\x04\xea\x25\x09\x2f\x06\x99\x3f\x5f\x6d\xef\x1f\x2e\xa0\x06\xcf\xfd\x54\xb4\xb8\xe6\x59\x61\xba\xac\xd1\x6d\x7a\xb6\x93\xbf\x4e\xae\xa8\xf2\xe3\x70\x0e\x68\xe5\x08\xc5\x81\xc4\x10\xa8\x20\x64\x2c\xf9\x96\x48\x20\x4b\xf4\x97\x73\x84\x3e\x8d\x60\x93\x74\x28\x6a\xbf\x5a\xb5\xdb\xa7\x1b\x6c\x8c\xd9\x9d\x4a\x35\x98\x59\x28\x0e\x24\x86\x1c\xd9\x90\xcf\x0f\xf6\xe6\x52\x38\x1c\xc2\xdf\xfb\x1b\x3b\x54\x3d\xd9\xe4\xfb\x71\xf1\xee\xa7\xf1\x84\x89\x81\x27\xf2\x08\x0e\x50\x71\x00\x8a\x03\x97\xd8\x5d\xd2\x0c\x7f\xd7\xd7\x49\x3b\x1a\xff\xb8\xe1\xe4\x79\x8c\x6a\x53\xde\x08\xce\x8e\x55\x37\xe3\x96\x76\xa8\x5f\x97\x9b\x4d\x1a\x70\xeb\x12\x82\x03\x89\xc1\xe0\x39\xce\x4f\x5d\xd7\x91\xac\x1e\x96\xc6\x33\xad\xbb\x77\x8b\xa7\xc5\xf5\x0e\x7e\xaf\xb3\x74\xa2\x34\x75\xde\x41\xf9\x42\x0a\xf4\x1a\x84\xe2\x40\xb3\xc5\x28\x9c\x8a\xec\xb7\x7f\xfa\xf2\xb8\xfb\x93\x9f\x7e\xf5\x4b\xff\x2f\x91\xe3\x4d\x95\xad\xcf\x1e\x77\x0c\xec\xbc\xe0\xc9\xf4\x3b\x86\x89\x01\x6a\xf9\x82\x17\x03\xcd\xa3\xf7\x84\x35\xc9\x1a\x78\xdb\x65\x0b\x35\x6e\xe6\x3a\x8f\xd1\x8f\x28\x5e\x90\xb2\xbc\xc8\x56\x4e\xf6\x7f\x7f\x87\xe3\x43\x12\x6c\xc2\x50\x1c\x48\x0c\x7d\xa6\x04\xf1\x4e\x1d\xb9\x2f\xf6\x83\x58\xb3\x6c\x7e\xce\x4d\x84\xcf\xf0\x96\xe7\xdd\xc3\x1d\x52\xeb\xcf\x70\x22\xbd\xcc\x01\xca\x27\x42\x71\x20\x31\xe4\x0e\xf7\x6c\xfd\x88\x38\x0d\x16\xd8\x6c\x63\xcd\x56\x30\x8f\x15\xb8\x3b\x74\x54\xfd\xa9\xed\xaf\xf2\x31\xe1\x9f\x09\x8a\x32\x20\xba\x0f\xc5\x81\x9c\x10\xa7\x6e\xde\x70\x7f\x8d\xa3\x66\x72\x4c\xeb\xec\xef\x82\xc1\xf9\x28\x3f\xa5\xd3\x41\xec\x37\xdb\x1d\xfd\x62\x45\x54\xb1\x1c\xe0\xe0\x1b\x8a\x03\x89\x41\x02\x39\x28\x66\xc0\x34\xae\x64\x7d\xe8\xf8\xa6\x6e\xa9\xa6\xd6\x5c\x98\x14\x53\x71\xb5\xc7\x2d\xb0\x97\x1e\x01\x3b\xc6\x0f\x38\xa1\x86\xe2\xc0\x87\x0d\xb1\x89\x18\xef\xf4\x38\xef\xd1\x2d\x70\xd3\xf9\x36\xc6\x25\xd6\x7e\x4a\xc9\x7b\xcc\xfc\x33\x4a\x5d\xad\xcf\xe3\x7e\xc2\xcf\x6a\x98\x18\xa0\x36\x16\xff\xa5\xd4\x70\xe0\x1e\xbf\x2a\xd1\x70\x9c\x7e\x59\xde\x48\x5f\x4e\x89\x2a\x9a\x35\xab\x1a\x7d\xf7\x25\xb5\xee\x47\x9b\x35\xc6\x17\x68\xc0\x29\x2a\x14\x07\x12\x43\x80\x88\x5a\x5d\x9d\x3e\xde\x3d\xf1\x58\x7b\x8c\xec\x2f\xd3\xbd\x7f\x9f\x1c\x9e\x87\x6b\xfb\x23\x14\x88\xfd\xaa\xfd\x6b\xda\x0c\xe4\xac\x43\x71\xe0\xbe\x28\x8f\x87\xde\xea\x04\x19\xc5\x6e\xd9\x07\x9d\x8a\x27\x5c\x87\xa6\x12\x75\x2c\xa3\xaf\xac\x22\x55\x2f\x4c\xd6\xe5\xb5\xcb\x8f\xc3\xcc\x42\x71\x20\x27\xf8\x13\x18\xa9\x46\xa0\xaf\x48\x0b\xbd\x6f\x3e\x48\x5f\x9d\xbd\xb2\x0a\x97\xee\x63\x7f\x85\x66\x45\xda\x29\x3a\xf1\x95\xd0\x1c\x08\x96\x43\x71\x20\x31\xe4\xf6\x7a\x28\x19\x3a\xff\x9d\x98\x1a\x22\x12\x76\x92\xa3\xb0\x0f\x4d\x21\xf8\x1d\x1d\x57\x9a\xaa\xbd\xfa\xeb\xf3\xc5\xc5\x1e\x90\x20\x05\xc5\x81\x66\x4b\xb7\x5a\xf0\xb0\xb9\x53\x39\x40\x73\x36\x51\x78\x18\x43\x44\x42\x7f\xf3\x25\xa1\x76\x40\xea\x59\x15\x93\xa9\xe5\xa7\x48\x35\x64\x98\x18\xa0\xb6\x7c\xf0\x62\x30\xf6\x56\xe8\x74\xf9\x55\x9c\x61\x38\x4c\xb2\x45\x72\x81\x76\xa7\x1e\xbb\x8e\xe3\x7d\x74\x2c\xeb\x30\x19\xc9\xd0\x8d\x2d\xb2\x12\x6c\xc2\x50\x1c\x48\x0c\xdf\x4b\x82\x58\x3e\xf4\x3a\x8c\x77\xb6\x8f\x8e\x9f\xc8\xf4\x30\x3c\xd2\xcd\x78\xb2\xc8\x4a\xc7\x44\x4b\x1b\xd5\xa0\x2b\xf6\x1a\x28\x35\x0c\xc5\x81\x53\x48\xcd\x36\x18\x0f\x35\xa6\xee\x35\x74\xfc\x31\x48\xd7\x5a\x22\xd8\xd3\x22\x1f\x4a\xb9\x91\xa4\x4a\x11\x92\x99\x54\x8f\xdb\xdd\x04\x52\x48\x21\x38\x90\x13\x82\xba\x5c\xdb\x9b\xfa\x54\xde\xa6\x35\x61\x22\x79\x3f\x2b\xa1\x88\x13\x5d\x12\xff\x31\x52\xac\xf4\xf5\x72\xd9\xea\xa3\x18\xed\x0e\xcc\x2c\x14\x07\x12\x83\xab\xa7\x10\x85\xce\x77\x2d\x44\x84\xb8\xa4\x2a\xeb\xfd\x8b\x83\xc2\xe7\xc6\xb8\x6f\xa3\x79\x1a\x38\xc2\xd3\x85\x73\x8f\x92\x80\x88\x23\x14\x07\x2e\xee\x37\x6a\x4a\x9e\xba\x35\xd1\x8f\xf4\x24\x27\x95\xe2\xef\xc1\xd5\xdc\x14\xa3\xd4\x01\x43\x71\xeb\xb3\x0f\x17\xdb\x6f\x2b\xb7\x8b\x60\x62\x80\xda\x8c\xc3\x8b\x01\xcd\x8b\x43\x76\x5b\x1e\x71\xf5\x73\xfa\xe3\x97\x44\xbf\xab\x33\xed\x34\x25\xf4\xfe\xca\xc5\x86\xb5\xff\x4c\xe1\xe9\xea\xbd\x03\x24\xf1\x40\x71\x20\x31\x30\xee\xe0\x5b\x38\x63\x47\xad\x48\xd6\xff\x2b\x5e\x58\x17\x27\x16\xfa\xcc\x5e\xd1\xc1\x74\xe4\x8a\x2f\x45\x5d\xbf\xbb\x82\x9b\x0d\x33\x0b\xc5\x81\xc4\x80\x84\x7a\x5a\xb8\xa9\x42\x7a\x9d\x88\x18\xba\x88\x10\x68\x2a\xcd\x31\x69\x32\x90\xda\x6e\xde\x79\xf6\xc3\x98\x97\x50\xcd\x0d\xc8\x64\x82\xe2\xc0\xa1\xc1\x37\x44\x42\x7c\x48\x9a\x38\x68\x13\x69\x7f\xfa\x62\x77\x73\x0c\x9f\x3e\x16\x6e\x11\xaa\xd9\xb9\xe3\x66\x4a\x63\x2b\x9a\x6c\x0d\x9c\x9b\x42\x70\xe0\x37\xc3\x4d\x45\xd1\xbf\x51\x76\xd5\x9f\x32\x2d\x77\x4a\x7c\xa4\x6a\xfc\xfd\x28\x50\x66\xaf\x9c\xca\xce\xee\x09\x85\xe2\x26\x7d\x03\xda\x64\x42\x71\xa0\xd9\x6a\x6f\x17\x18\x9d\xe2\x09\x67\x93\x93\x0b\x8c\x8a\xa6\x84\x71\x4c\x7b\x6a\x90\x9b\x28\x26\xe5\xc9\x71\xbc\x96\x96\xc5\x23\xa9\x82\x89\x01\xea\x33\x09\x5e\x0c\xe7\xb5\x0a\x35\x13\x2f\x94\x56\x9f\x4a\xb0\x7a\x72\x7b\xe1\x9d\x50\x2d\x64\xc6\xfa\x39\xa3\x10\xeb\x96\x97\xa7\xec\x22\xc8\x03\xf5\xb7\xa1\x38\x90\x18\x9a\x13\x58\x1b\xd7\xad\x8b\x14\x53\xea\x75\x32\x3c\xa4\xec\x7b\xd1\xd6\x05\x68\xb7\x71\x5b\xec\x4d\x9f\x0f\xe8\x13\x57\x44\x14\xc2\xcc\x42\x71\x20\x31\x84\x1c\x4e\x9f\x3c\x9e\x18\x95\x57\x9f\x3e\x0d\xb1\xfd\xf1\x9b\xef\x9b\xb7\x88\x70\x59\x3e\x87\x15\xcf\x04\xfb\x44\xfa\x8d\x08\x10\x5f\x81\xe2\xc0\x5f\x13\x4f\x02\xe3\x7a\xf8\x09\x7d\x9e\xe2\xc4\xa3\x47\x8b\x3a\xb3\x19\x91\x8c\xca\x1d\xf3\xba\xde\xec\x3f\x1d\x37\xe9\x54\x2a\x06\xea\x2d\x43\x71\x20\x31\x68\x31\xfd\x46\x68\x4f\x2c\xbc\xff\xc8\x88\x9a\x7b\x0c\xd5\x2f\x5e\x4c\xd5\xcc\xe8\xa8\x89\xc7\xb0\x8c\x0d\xfd\xbc\x8d\x44\x1b\x08\x3f\x43\x71\xa0\xd9\xb2\xbf\x59\x2b\x76\x76\x1d\xf3\xa7\x96\xb7\x36\x99\x11\x08\xbf\x67\xfc\x7a\x47\x02\xe5\xcf\xcf\xd0\x55\x64\xec\x17\x5e\x69\x8d\xa1\x30\x31\x40\x7d\xc0\xc2\x8b\xe1\x79\xd2\x61\x69\x69\xe9\x65\x01\x21\xd2\x71\x7d\xdc\x54\xb8\x0f\x97\x87\x76\x71\x91\x46\x08\x1b\xbb\x43\xcc\x87\x6f\x6f\xea\x81\x0c\x5d\x28\x0e\x24\x86\x6d\x31\x02\x81\x43\x02\xcc\xb7\xa3\xe1\xc6\x0f\x17\x5d\x1d\x0b\xdd\xab\x6f\xa4\x19\x78\x24\xf9\xdf\xd6\xbf\xbe\x8a\xf2\xbd\x01\x42\xa4\x50\x1c\x48\x0c\xd7\xfe\xf1\xab\x59\xfe\x3a\xb9\xc2\x5f\x8b\xca\x0d\xb9\x70\x76\xdc\x7c\x5c\x7d\x71\x7e\xfd\xb0\xda\xdb\x26\xe9\xa3\xdc\xa1\x07\x7a\x0d\x42\x71\x20\x27\xa0\x6a\xee\x61\x71\xfe\x1a\x3f\x50\x4d\xd0\x91\x47\x95\x8e\x54\x62\xa6\x58\x6f\x7c\x4d\xff\x14\xa7\xa5\xec\x72\x7c\x60\x2b\x07\xc8\x1a\x84\xe2\x40\x62\xd8\xa5\x65\xae\x39\x7b\xc0\x8d\xb5\x97\xb6\xd4\x78\xb7\x87\x71\xda\x75\xc7\x23\x67\xf7\x15\x2a\x4d\x56\xfd\x6b\x44\x02\x51\x59\xe0\xf5\x08\xc5\x81\x67\x9b\x24\x99\xf2\x78\xb5\x21\xac\x78\x07\xfd\x54\x9c\x93\xad\x54\x9d\xbd\xf3\x2f\xd5\x2b\x93\xab\xb9\x35\xa5\x03\x4f\xc4\xdf\xcf\x80\xd0\x20\xd4\xa1\x22\xac\xd7\x20\x5c\x68\xd0\x23\x0d\xf5\x7e\x83\x42\x57\xde\x3b\xac\x7a\x3f\x52\x94\xfd\x61\xc4\x97\xe1\xb4\x3f\x9f\x65\xee\x68\x3c\x48\x3f\xe2\x67\x46\x48\xbf\xfd\xd1\x0b\x5c\x68\x50\x80\x76\xf9\xa4\x79\x99\x4f\xf3\x86\x3d\x1e\xfb\xf4\x4a\x6d\x4e\x46\x2c\xf7\x65\x56\x98\xe7\x93\xc5\xe2\xb2\x6b\xf7\x36\xef\xdb\x9e\xdc\x69\xfd\xdf\x7e\x18\xfc\xf3\x91\xce\xa6\xf1\x48\x90\x74\x7e\x9f\x49\x31\xa7\x82\x64\xc6\xed\x5b\x6b\x61\xd3\xdd\xc7\xd3\x12\x19\xa7\x91\xb9\x24\x0b\xab\xad\x40\x11\x0a\x28\x0e\xf4\x7c\xd0\x39\xa8\x5f\xec\xde\x75\x8e\x71\x64\x56\x70\x8c\xbb\x66\x19\x24\xbf\x26\xab\xa3\xa4\x3b\x40\xe6\x2c\xf2\x92\x1e\x0a\x98\x01\x02\x21\x50\x1c\xe8\xf9\x78\xbd\xa6\x13\x68\xdb\x3f\x47\x4a\xf1\x10\xd7\xd3\x98\x29\x6f\xec\xe1\x8a\x83\xb3\x8d\x00\xdf\x52\x69\x37\x11\xdf\xdd\x58\x0d\x3d\x20\x5c\x01\xc1\x81\xfb\x56\xef\xdf\x9d\xe3\xff\xc9\x55\x6b\x47\x26\x22\xff\xfa\x5d\xde\x27\xd2\x22\x59\x6f\x6c\x3f\xa2\x76\x04\x5f\x31\x7d\xea\xee\x06\xe0\xba\x1d\x14\x07\x7a\x3e\x8c\x47\x55\x96\x5f\xea\x99\xfd\x13\x1e\xe2\x50\x0a\x79\xcf\xba\x3f\x5b\xd9\xf0\x9c\xf2\x4e\x3b\x76\x9b\xe1\x35\x99\x04\x09\x8d\x03\xb0\x45\x85\xe0\x40\xb3\xc5\x7c\x88\xd5\x16\x89\x41\xb4\xe1\xb7\x4b\x48\xa6\x6a\x79\x3c\x57\x5c\x4e\xfb\x71\xbb\x38\xf2\x91\x28\x73\xa2\xd8\xfc\xe7\xb7\x53\xb0\x97\x25\x94\xe4\xe0\xc5\x50\x26\x9d\x51\x65\x59\x9f\xab\xab\xca\x77\x17\x81\x4d\xf4\x4e\x89\x2b\xdf\xea\x80\x2a\x63\x4c\x9d\xe0\xe0\x5f\xe5\xe6\xc7\xa9\x40\xfd\x14\x28\x0e\x24\x86\x0e\xa4\x1e\xdc\x38\x4d\x19\xf6\x4d\xd2\x85\x0d\x5a\x9d\x17\x9d\xe3\x98\x33\xa5\xa5\x8a\x64\x42\x06\x4f\x0a\xf5\x1f\x2b\x64\x00\xf7\xe2\xa0\x38\x90\x18\xa2\xd5\x74\x24\x10\x38\xfd\x5a\x3c\x33\x36\x04\xb5\xce\xdc\x1a\x9d\x64\xa8\x69\xe8\x91\xde\x97\xb4\x6e\x64\xf1\xc6\xf9\xb1\x01\x9f\x83\x50\x1c\xc8\x09\x8b\x0d\x7c\x1e\xe6\xf7\xff\x1c\x1f\xa1\x45\xf6\xbf\x3e\x4a\x31\x32\x1f\x40\xfa\x55\x3a\xd3\xf1\x4d\xf0\xf5\xb1\x97\x5d\x8c\x11\x70\x97\x1e\x8a\x03\x89\x61\xe3\xc5\x75\xcf\x13\x1c\xca\xde\x0f\x01\x69\x54\x22\x2d\x98\xac\x04\x36\x32\x0d\x43\x46\xa7\xc5\x82\xfe\x13\x94\x79\x49\xc1\x40\x42\x01\x14\x07\x3e\x28\x92\x5e\x23\x9f\x3f\x9f\x44\x1e\x2c\x24\xec\x36\x16\xf9\x2e\x15\xe1\x17\xf8\x51\xa0\x28\x46\x60\xd3\x8e\x16\xdd\x8b\x7a\x91\x09\x26\x06\xa8\x60\xd0\x7f\xb9\x88\x8b\x1a\x7d\x4f\xd7\x49\x13\xb5\x61\xf6\xd4\xa4\x71\xc2\xab\x74\xff\xfc\xdb\x33\x6d\xb9\xed\xc6\xb6\x0e\x81\xd8\x86\xa9\x1d\x60\x1b\x05\xc5\x81\xc4\x90\x29\x7c\x84\x40\xb6\x82\xbd\xa7\x98\xf2\x34\x96\x26\x96\x44\x48\x5b\x93\x48\x43\x72\x23\x98\x4b\xbb\xbb\xae\x72\xe0\x65\x53\x1f\x70\x63\x16\x82\x03\x89\xc1\x39\x73\xfb\xfa\xc5\x36\x9e\x9d\x68\x78\x0f\x4d\xe8\xb6\xf6\xf5\x01\xa7\xe5\xb7\x9c\x58\xf5\xcd\x89\x7d\xb1\xb2\x2e\x77\xff\x87\xc0\x5d\x04\x08\x0e\xe4\x84\xf9\x33\x3f\x9c\x0c\x96\x82\x33\x9a\x62\xe7\x13\x3f\xdc\x9a\x30\x8e\x21\x91\x15\xe2\xb4\x8c\x51\x8e\x1e\x4d\xf3\x5f\x9e\x08\x46\x40\x8e\x23\x04\x07\x12\x83\x5b\xd0\xd5\x3c\xf7\x3c\x67\x27\xbe\xb6\x02\x06\x02\xe7\xf1\xee\x81\x16\xef\x12\x96\x00\x3a\xe9\xdf\xbc\x5d\x74\x63\x7f\xe2\x0a\x20\x34\xe8\x80\xfc\x52\xf2\x5b\x20\x4a\x3c\x69\xb0\xd1\xa3\x7b\x9c\xbf\x9e\x9b\xc5\x34\x1a\x26\xd1\xcc\x62\x12\x3b\xcf\xd0\x31\x48\xf6\x9b\xfe\x67\x68\x30\xfb\x5a\xa0\x62\xea\x49\xdc\x8c\xfb\x66\xb5\x21\xb9\x05\x95\xe7\xe7\xd0\x25\xc3\x39\xdf\xce\x5d\xa5\x00\xb9\x5f\xbc\x9c\x36\xa3\xff\x81\xbe\xf9\xd3\x71\x8c\x51\x23\xa0\xd8\xa1\x58\x8f\x3c\x9b\xdd\xed\x81\x6d\xb4\x2e\x83\x30\x8b\xeb\x60\x65\x5d\xaa\xde\x7c\x37\x7b\x15\x14\x1a\x84\xb2\x0c\x1f\x1a\x6c\x55\x0b\x47\x1c\xf1\xa4\xc1\xf6\x91\xa5\x96\x20\x2c\xb5\xfb\x42\x6d\xb0\x9f\x23\x9a\x9e\x47\xb0\x1b\xe3\xca\x4c\x94\x47\x26\xfb\x1f\xa8\x67\xa3\xe1\x50\xc2\xf6\x7d\x7a\x0a\xc5\xcc\x72\x0e\x8f\xfe\xc2\xf1\x28\x11\x03\x1e\x22\xca\x7d\xae\xd5\xa4\xb8\xa9\xb4\x25\x3e\x20\x34\x08\x65\x13\xd6\x6b\x10\x1c\x1a\x6c\xf0\xdd\x76\x96\xec\xc8\xce\x9b\xbf\x4e\xc6\x69\x19\xb9\xeb\x19\x41\xa7\x2e\x19\xed\xf9\xcb\x90\x8f\x27\x01\xfb\x15\x3b\x25\xdf\xad\x57\xfb\x66\xb8\xd0\x20\xd5\x74\xa2\xac\xc6\x49\xa6\xd9\x2b\xc6\x93\x62\x04\x63\x93\xeb\xe8\x41\xc7\x6b\x3e\x2f\x74\x5b\x4b\xb4\x1b\x69\x2b\xe4\x6a\xce\xdb\x0f\x09\x17\x1a\x24\xee\x3f\x14\x0f\x66\x19\x22\x78\xc4\x10\x61\x22\xb3\xf8\x99\x62\x49\xb4\x4d\x9f\x23\x66\xfa\xad\x07\x83\xcf\x3b\x52\xdf\x40\xee\xdb\x0f\x09\x17\x1a\x6c\x58\xe1\xd4\xd6\x42\xaf\x9e\x48\x40\x93\x6b\x0e\xae\xff\xab\x1f\x9d\xf8\x8e\x79\x44\x50\x26\x49\xb9\xb2\x82\x4c\x6a\x93\xf9\x7f\xd0\xde\x10\x2e\x34\xf8\xe0\xfe\xbd\x59\x23\x2e\xe2\x1f\x21\x18\xba\xfa\x77\x51\x7a\xfa\xa9\x14\x5e\xbe\xd6\xd3\x4d\xd0\xe0\xe2\xa2\x24\x0b\xd7\x5b\x99\xb8\xfd\x90\x70\xa1\xc1\x90\x22\x8b\x2a\x07\xeb\xab\xb5\x58\xe6\xb0\x13\x27\x04\x8e\xcd\x66\xbe\xee\x2f\x8e\x54\x74\x97\xc6\x0e\xbf\x8a\xcf\xc2\x33\x17\x6e\x3f\x24\x5c\x68\xf0\x1c\xcf\x84\xc5\xd4\x90\x2d\x99\xd3\x4f\x43\x10\x13\xfd\x81\xda\xa7\x34\x5a\xf7\x27\x4c\x9a\x65\xec\xcf\xd0\x70\xa8\x03\xad\x65\x6e\x3f\x24\x5c\x68\xf0\x15\x97\xea\x51\xca\x21\x39\x52\x77\x70\x80\x20\xf1\xd7\x38\x65\x52\xd1\x3b\x61\xf9\xee\xba\xb2\x6b\x22\x12\x4a\x39\xdf\xdf\xde\xb6\x6f\xa4\xd6\xff\xed\x51\x84\x5f\x85\xfa\x8e\xc9\xb2\xb1\xda\xf4\x91\xeb\xde\x1d\xdf\x5d\x90\x24\x59\x55\x9b\xd7\x22\x3c\x4a\xd2\x4e\x12\x9c\x4b\xf4\xa4\x2e\x32\xb5\x00\x4e\xea\x21\x38\xd0\x2a\x54\x1a\x19\x28\x79\x96\x11\x58\x55\x3a\x26\x7d\x81\x1b\x8e\xa5\x14\x1a\x67\x41\x2d\x69\x5a\xcf\x9f\x5f\xc8\xfb\xd6\x81\xc6\x19\xa8\x96\x0d\xc5\x81\x6f\x2b\xfd\xdd\x10\x11\xd7\x72\xce\x67\xb9\x49\x20\xde\x49\xeb\x26\xca\xc0\xce\xa4\xdc\x79\x53\x38\xd7\xd8\xfb\xb0\x45\xad\x5c\x0a\x38\x9c\x85\xe2\x40\x4e\x90\xc7\xc8\x99\xaa\x1d\xb0\x1b\x2b\x09\x73\xf9\x6e\x4d\x2e\xfb\x75\x80\x7a\xf4\x6f\x8b\xce\x5d\xc1\xec\x29\xfb\xf0\xe3\x14\x25\xa0\xe6\x18\x14\x17\x20\x8a\xfc\xff\xc4\xae\x8a\xda\xa3\xc2\xd2\x2a\x16\x0d\x0a\x49\xef\x13\xa6\x67\xa6\x05\xee\xe6\x6f\x6e\x3f\xf8\xd5\x87\xb3\x28\x73\x9d\xc6\xee\x0c\x2c\xc5\x50\x1c\x78\xb6\x1e\xfe\x97\x42\x8e\x44\x6c\x25\x53\xad\xb5\xdc\x0e\x21\xe2\x8c\x8d\x01\x9f\xd9\xdb\xb7\x2b\x8b\xf0\x26\x6b\x9f\x9f\x94\x01\x05\x45\xa1\x5e\x92\xf0\x62\x40\xea\x3b\x36\x9f\xd1\xbc\xf4\x6d\xa9\x74\x4d\x49\x23\xc0\x40\x47\x60\x49\x39\xe9\xd0\x13\x15\x88\xbc\x79\xd0\xda\x18\x3a\x00\xc4\x32\xa1\x38\x90\x18\x72\xdd\xbc\xbf\xbd\x67\x59\xed\x73\x3f\xa7\xd9\xd2\xa0\x78\x55\xc6\xd1\xa6\x14\x48\x32\xf9\xe7\x0d\x75\x8d\xb1\x14\xbe\x77\x16\xf0\xd5\x0d\xc5\x81\xc4\x60\x29\xfa\xc9\xff\xf1\xfd\x78\x76\x8e\x5d\x37\xdf\xa7\xad\x96\xfa\xb2\x95\xd3\x99\xa5\x2f\xda\xcc\x84\xa6\x63\xee\x32\x4c\xb3\x74\xc3\xcc\x42\x71\x20\x27\x14\x65\xd6\x61\xbe\x59\x48\x30\xcd\x23\xcd\xf0\x0c\x91\x20\x78\x77\x60\x23\x88\xaa\xe8\x5b\x45\x94\xd9\xd0\x52\x5b\x26\x8b\x37\x05\x33\x0b\xc5\x81\xc4\xc0\xf9\xc0\xe1\xa2\x47\x81\x67\xde\xdc\x20\x2b\xa1\x9c\x7b\xfd\x05\x81\x9f\xe5\x66\xae\x8b\x48\x30\x8a\x8e\x14\xf7\x82\x51\x37\x90\x28\x06\xc5\x81\x66\x3b\x84\xd1\xce\xf1\x82\x07\x23\x8a\xe4\x03\xfa\xd8\x0c\x71\xdf\xa4\xba\x6b\x86\x39\xa1\x44\xe8\x44\x7d\x26\x7e\xd5\x75\xe2\x2c\x20\x06\xa8\xe5\x0b\x5e\x0c\xce\x9b\xed\xb1\x21\xfb\xdd\xe2\x7f\xf4\x7a\xca\x71\xd6\xaf\x23\x8c\x76\x95\xc3\xb4\xff\xd5\xd0\xbb\x7d\xeb\xf2\x51\xee\x78\xab\x09\xec\xf8\x20\x38\x70\x41\x51\x5a\xdd\xe2\xc4\x53\x92\x85\x1a\x7b\xd6\xfe\xbe\x8e\xfa\x93\x95\x79\x2d\xce\x7b\xcb\xa1\xa6\x07\xc6\x0a\xbc\xdb\x66\x91\xbd\x30\xb3\x50\x1c\x48\x0c\x38\x7a\xdb\xcc\x38\x05\x2e\xad\x1f\x47\xe8\x69\x7e\x3b\xd2\x19\x0c\x2a\xfc\x14\xe7\x3b\x9a\xb0\x09\x62\x5a\xea\x4c\x26\x15\x01\x7a\x56\x40\x71\x20\x27\xe0\x7f\x72\xaf\x4f\xb8\x7b\xd8\x80\xcf\x3f\xfd\xf9\x59\xe3\x48\xc2\xac\x5a\xdf\x46\x78\x9a\x8a\xb6\x5c\xa4\x5f\x98\x6e\xa9\x04\x70\xb2\x03\xc5\x81\xc4\x80\xf1\x6a\xae\x24\x1a\x65\x6d\xa6\x8d\x82\xdf\x57\x8d\x4d\xb8\x32\xcb\xe8\xe1\x38\x8e\xc8\x5d\xd5\x28\xf4\x0e\x2c\xad\x21\x4e\x20\xae\x00\xc5\x81\x66\x9b\xf4\x59\x70\x48\x9f\x88\x51\x4e\x90\xa6\x11\x4b\xab\xa6\x2f\xcf\xf2\x49\xce\xcb\x0f\x1b\x2f\xd3\x52\x7b\x1b\x44\x92\xf2\xf1\x62\x60\x62\x80\xda\x58\xc0\x8b\xe1\x19\xf1\x64\xdc\x6b\x6a\xc4\xef\x43\x69\xd5\xcd\x2b\x3a\x6f\x07\x02\xef\x8d\xcf\xa2\x87\x13\xad\x4b\x3e\xfc\x88\xcd\x2d\x9f\x43\x0c\x9b\x30\x14\x07\x12\x43\xd4\xb4\x58\xd8\xb4\x12\x86\xe0\x87\xf5\xa4\xb9\x51\xc3\x37\x8f\x22\x83\x73\x5f\xcd\x9f\xce\x59\xd4\x68\xee\x96\xc5\x96\xc5\x01\x1a\x83\xe2\x40\x62\x60\x79\x92\x16\xb2\x2c\xce\x38\xba\xe9\xdb\xf1\xe0\x97\x52\x8c\x8d\xe8\x48\x19\xe2\x92\x9a\x62\x26\x6f\x62\x83\xaf\x94\x88\x0c\xd0\x18\x1d\x8a\x03\x1f\x0c\x1c\xdd\xf9\xc7\x39\x4c\x25\x8b\xd1\x9e\xb1\x6b\x42\x52\x66\xd2\x9a\x11\xf0\x77\xd3\xec\x6c\x11\x27\x9b\x27\xc6\xec\x95\x8b\x39\xcc\x2c\x14\x07\x12\xc3\xb3\xaa\x47\xb6\xc7\xa9\x1d\x03\x52\xd6\xd9\x93\x92\xfd\x29\x86\x1e\x3a\x65\x7e\x92\xf6\x5c\xed\x14\x58\xf5\x11\xbb\x05\xfa\xc0\x5d\x59\x28\x0e\x9c\xce\x25\xc8\x7f\x4f\x98\xd4\x71\xe0\x7b\x91\x7b\x39\xf5\xf4\x77\xfb\x24\x87\x58\x01\xdc\x9f\x13\xc8\x52\x2a\x7e\x07\x94\x38\x45\x16\x30\x31\x40\x6d\xf9\xe0\xc5\x20\xb8\xf2\xdd\xdd\x22\xb9\xb8\x4f\xce\x9b\xd6\xe5\xc7\x2f\x7e\xf4\xd6\x95\x64\x3e\x26\x4e\x9c\xa9\x55\x42\x71\x13\x7f\xda\x05\x20\x10\x02\xc5\x81\xc4\xb0\x6f\x23\x12\xc1\x3e\xd6\xc9\xfb\x63\xcd\x9f\xf1\xc3\xb3\xb8\x19\xc7\x37\x8d\x11\xe6\xcc\x96\xec\xad\x24\xe1\x0b\x66\xe6\x71\x8b\x30\xb3\x50\x1c\x48\x0c\xc3\x9c\xda\x0a\x09\x7a\x0d\x0f\x8c\x4f\x1f\x0e\x11\x3e\xb7\xb5\x45\xad\x71\x5d\x65\xc4\x44\x48\xbd\xe3\xd1\xe6\xbe\x9c\x3d\x0e\x54\xc9\x86\xe2\x40\x4e\x50\xb2\x4b\xff\x9b\x89\x42\x5f\x90\xa7\xa6\xdb\x89\x92\x91\xd5\x22\x11\xa5\x9c\x2b\x96\x13\xf5\xaf\x3d\xb2\xa4\x04\x57\xb7\x1c\xc8\x89\x81\xe2\x40\x62\x58\x63\x50\xc5\xe7\x17\xfc\xc0\x2a\xed\x99\x6c\x97\x5e\x8e\xc2\xec\xcd\xd3\x36\x6f\x72\xb3\xfc\x4a\x8d\xdb\x65\x68\xd8\xbe\x06\xb8\x2b\x0b\xc5\x81\x66\x3b\xfa\x3a\x9b\x6c\xd3\xc3\xc5\x9e\xb9\xa9\xe8\x8b\x53\x04\x41\x21\x85\x61\x66\x87\x7d\x75\xcb\x72\x88\x5a\x29\xb6\x62\x02\x99\x18\x4c\x0c\x50\x9b\x71\x78\x31\x28\x1d\xc6\xe4\xb5\x28\x6b\x55\xf1\x92\x86\x91\x2a\xfd\x6a\x6f\x2e\x71\x6b\x0c\x4c\xd6\x3f\x8a\x72\x7b\xea\x5d\xe1\x87\xb9\x34\x03\xf8\x01\x82\x03\x89\x61\xe2\x70\xc5\xbe\xd2\x7f\x40\x62\x6a\x38\xe4\xe1\x6f\x8b\x70\xad\x0b\x99\xc1\x20\x4d\x87\x0b\xc4\x19\xeb\x44\xff\x90\xd7\x23\x40\xfd\x6d\x28\x0e\x24\x86\xcf\x2c\x76\x6e\xa2\x85\xc5\x69\x9d\x36\xbd\x81\xdb\x94\xc8\x79\x75\xcb\x3a\x9d\x29\xe4\xd5\x56\xb1\x34\xb1\x71\xb8\x03\x95\x40\xbd\x56\x28\x0e\xe4\x84\xd4\x5f\x9a\xc1\xda\x1d\x5f\xaf\x7e\x9d\x69\xe2\xc9\xbd\x52\x43\x79\x32\x18\x34\x6e\x42\xd0\xd0\x78\x29\x62\x54\xfc\xd0\xe0\xd1\x36\xcc\x2c\x14\x07\x12\xc3\x80\xe3\x7c\x97\x60\xed\xbf\x89\x3f\x27\x1a\xc9\xa4\x8f\xe3\xa4\x53\x4b\xe8\x1b\xe2\x82\xea\xad\xb0\x7a\x57\xfe\x62\x37\xd2\x00\x51\x10\x28\x0e\x34\xdb\xb5\xf1\x3a\x4c\x43\xc4\x23\x8f\xac\xa2\xee\x44\x2d\x0b\x7d\xd5\xdf\x07\x79\x4a\xe3\x67\x73\xc8\x8d\xf3\x22\x51\x61\x09\x3b\xb8\x30\x31\x40\x7d\x26\xc1\x8b\xe1\x29\x55\x63\x70\x95\xeb\x23\x4d\x94\x3a\xcb\x65\xd7\x63\x5f\x87\xbb\x1a\xcd\x65\xd3\xed\xe2\x2a\x2f\xa4\xf1\xae\xd8\x48\x07\x81\x4a\xce\x50\x1c\x48\x0c\x95\x03\x73\xf4\xe7\x2e\xc6\x73\x9c\x81\x09\x4d\xc7\xaf\xd3\xd8\xb6\x16\xbe\xb4\x9b\xec\xce\xec\x0f\x39\xaf\x79\x99\x65\xf5\x53\xc0\xcc\x42\x71\x20\x31\x5c\xc6\x53\x48\x7f\x6d\xf0\xbb\x9c\xbf\xd4\x3d\x25\x4d\xa4\xd0\x8a\xa6\x0d\x25\x56\x9e\xe7\x53\x71\x34\x9e\x28\xa7\xb3\x45\x00\xae\x38\x40\x71\x20\x27\xf8\x76\x5b\xd4\xbd\xe8\xae\xe1\xc7\x79\xa9\x5c\x48\xaf\x22\xc9\xd7\xfc\x06\xdf\xa6\xdf\x6e\x54\x48\xdf\x9b\x6c\x72\xf2\x2b\x2f\xd0\x78\x12\x8a\x03\x89\x61\xbc\x47\xe6\xb8\x83\x13\xf7\xa0\xe2\xcc\xcd\xf8\x37\x05\x47\xf8\xe1\x0c\xfa\xb0\x01\x13\x25\xaf\x80\x4c\x2f\xeb\x6f\xf5\x25\xa0\x82\x31\x14\x07\x9a\x2d\x07\x37\x2a\x9f\x17\x41\xcd\xa5\x72\xbb\x67\xc5\x28\x26\xd2\x8b\xd4\x6e\xfe\xdf\xa6\xd5\x4d\x04\xaf\x53\xdd\x30\x12\x7f\x44\x13\xc2\xc4\x00\xf5\x01\x0b\x2f\x06\x2f\x63\x41\xfa\x01\xa9\x97\xcb\x77\xbf\x9c\x13\x66\xf5\x2a\xdd\x7b\x8f\x72\xd4\x7f\x6e\x45\x72\x81\xde\xad\x67\x16\x67\xf3\x17\xd8\x9f\x43\x71\xe0\x7c\x62\xa2\xf4\x5e\x72\xd6\x7a\x9f\x52\xde\x89\xc1\x69\x66\xdc\xf0\x72\x73\x3f\x1a\x9b\x11\xf1\x72\x7c\xc2\xf7\xe8\xc1\xf7\x02\x80\x24\x05\x28\x0e\x24\x86\xc1\x49\x34\x3a\xd4\xd2\x14\x1e\x24\xd1\x79\x8e\x17\x7b\x33\x76\x26\xdb\x5d\x59\xe4\x47\xcd\x05\xea\x3b\x79\x93\x4f\x25\xee\xbc\x83\x99\x85\xe2\x40\x4e\x28\xdd\x70\xc0\x97\x5e\xf1\x25\xe3\xe3\x15\xa0\x0e\x8b\x4b\x67\x64\x34\x7d\xf6\x84\x34\xb7\xab\xbe\x57\x85\x8d\xbc\x4f\x3a\x66\x1f\xf8\x10\x86\xe0\x40\x62\x78\x2d\x55\x45\xd8\x4d\xde\x44\x98\xf0\xee\xdf\xf5\x27\x0c\xff\xab\xdc\x12\x92\xc2\xf4\x20\x21\x15\x14\xfe\xbd\x2c\x0f\x2a\x73\xe0\x38\x16\x8a\x03\xcd\xf6\xfb\x82\xb4\xfa\x03\x1e\x8c\x1f\x62\xba\xe5\xa7\x9f\xd1\x87\x05\xdf\xfe\x1c\xc8\xa1\x6c\x7d\xab\x80\xbe\xbe\x26\x2e\x4c\xc0\x13\x0f\x84\x06\xa1\x0e\x15\x61\xbd\x06\xe1\x42\x83\x6f\xa7\x29\xe3\xed\x22\x9b\x07\x02\x45\xb7\xd6\xb3\x3f\x59\x6d\x87\x69\x77\xbd\x50\xd3\x0a\x6c\xac\xbd\x1b\xf3\x40\xbf\xce\xe6\xdd\xed\x8f\x5e\xe0\x42\x83\xfb\x58\x96\x14\x4a\x7f\x1b\x2b\x0f\x23\x3f\x18\x22\x7d\xe2\x7f\x59\x46\x50\xf2\x4a\xc7\x22\x8d\x3e\x0f\x6f\x88\xb1\x71\x48\x66\xfa\x7f\x73\xf4\x02\xf5\xc3\xe0\x9f\x0f\xc5\x3f\xc1\xa3\x5d\xfe\xf4\x7a\x91\x6b\x49\x51\x65\xaf\x44\x0b\x8a\xde\x58\x99\x96\x70\xd0\x46\xf2\xef\x64\xb6\xd7\xd2\x94\x01\xb7\x80\xa0\x38\xd0\xf3\x21\x38\x39\xc7\xaf\x49\x34\xc9\xc1\xed\xf2\xd6\xf3\x46\x3f\x28\xe5\x09\x7f\x68\x3e\x33\xdb\x4b\xe2\xa2\x91\x78\xce\x50\xc5\x1d\xa0\x64\x06\x14\x07\x7a\x3e\x4a\x69\x17\x9f\x48\x0b\x9f\xa9\x90\x98\xbc\xc7\xd9\x38\x3c\xeb\xa4\x7e\xe1\xaa\x84\x55\xb9\xef\x52\x55\x5a\xd6\xb0\x2c\xf0\x62\x04\x10\x32\x04\x07\x72\x02\xcf\x77\x12\x74\xd4\x6f\xc9\x15\xf4\x08\x6a\x77\x99\x8b\xd9\xdb\x4d\x14\x0a\xad\x7d\x25\x0a\x4a\x4e\xf5\xe6\xa6\xec\x5b\x15\x80\x16\x31\x50\x1c\xe8\xf9\xa0\x8e\x5a\x23\x2d\xde\x75\xcf\x51\x70\xc3\x28\x36\xea\xc3\xc6\x1b\x78\x52\xbf\x35\x8d\x61\x8d\xe9\xfa\x55\xdb\x90\x9a\xbd\x19\x68\x2f\x07\xc5\x81\x66\x7b\xe5\x4e\xcd\x98\x70\xb3\x6b\xf2\xdb\x99\x30\xba\x12\xdd\xf8\x91\xa9\xd3\x8e\x9f\x2c\x22\xd5\x1f\x7b\x1d\x99\x26\xaa\x0d\x86\x7d\xd8\xcb\x12\x4a\x72\xff\xe5\x6b\x1b\xcb\xba\x08\x99\xe2\x68\xd8\x78\x97\x2c\x76\xe2\x1b\x63\x76\xb4\x62\x8f\xcf\x02\x9a\x3a\x85\x7d\xb2\xe1\x46\xdc\x2c\x02\x70\xea\x00\xc5\x81\xc4\xb0\x67\x90\x8d\xf2\x46\x0e\x8b\x2f\xdc\xe2\x41\xcb\x90\xd5\x5f\x17\x14\xc3\xcd\x7b\x03\x81\x69\x03\x04\x9f\x62\x86\x8d\x95\xf2\x80\xfb\xbd\x50\x1c\x48\x0c\xa2\xf5\xf2\x75\x24\x99\x13\x14\x2a\x26\x08\x43\x9e\xeb\x65\x7e\xbc\xae\x03\xb3\x1b\x1e\x17\xcc\x69\x3c\x43\x59\x5a\x21\x45\x40\x3b\x5d\x28\x0e\xe4\x84\x43\x29\x75\x12\xa3\x69\x79\x8e\x81\xad\x9e\x1c\x14\x7a\x47\xf4\xce\x29\xbb\x27\x6f\x95\xad\x9c\xe9\xe5\x6d\x4a\xa6\x22\xd5\xd6\x61\x66\xa1\x38\x90\x18\x1c\xbe\x31\x8f\x26\x6f\xc5\x97\xb0\x14\x7f\x0f\x59\xf5\xab\xd7\x4d\x33\xb3\x08\xd6\x20\xc7\x4b\xfc\x1a\x4f\x72\x27\x7e\xfd\x3e\x70\xa9\x06\x8a\x03\xcd\x56\xcd\xb2\xe2\x5e\xd0\x6f\xe5\x34\x49\x2a\xbf\x06\x11\x5e\x27\x57\x29\xdf\x4f\x6b\xca\xb9\xeb\x67\x0a\x89\xb8\xaf\x9d\x78\xb9\x94\x60\x62\x80\x0a\x06\xc1\x8b\x01\xf3\x70\xb1\x7f\xfe\x41\x94\xd9\x93\xe6\x4c\x11\x23\xdb\x1a\xc3\x76\x89\xc2\x6f\x2c\x68\xf7\x6b\x12\xed\xaa\xb0\xda\xf6\x8b\xd9\x80\x0f\x4d\x08\x0e\xdc\xbe\xc3\x4c\xa5\x77\x58\x6b\xe1\xcb\xe9\xf2\x04\x96\xa6\xd8\xf7\x35\x3e\xe7\x42\x3a\xbd\xa9\x20\x17\xb6\x03\x43\x16\xfd\x5e\x21\x20\x0c\x0f\xc5\x81\xc4\xc0\x86\x5d\xc7\x32\x99\xc1\x40\x9c\x6d\x21\xb2\x70\xd0\xad\xd8\xf7\xc8\x9f\xad\xe6\x44\x93\xf9\x90\x82\x67\x5f\xaf\xc6\xf5\x67\x28\xcc\x2c\x14\x07\xbe\xc0\xf6\x9d\x50\x57\x23\x8f\xc3\xce\xe9\xf0\x2f\x2d\xd9\x45\x53\xad\x0f\xfa\x57\xea\x1d\x07\xda\x2b\xe2\x9f\x31\x6c\xb9\x64\x75\x40\x85\x6f\x28\x0e\x24\x86\x7b\xa4\xe8\x5c\x08\x24\x34\x29\x9b\xe3\xf3\x89\x8c\x05\x5e\x77\x4a\xf3\xbf\x7c\x44\x91\xba\xd7\x44\xe2\xd4\x9a\xbb\xa9\x18\xd6\x07\x84\x06\xbb\x14\xbf\x08\xaa\x23\xd0\xe3\x1c\xf3\x48\xb7\xb3\x1a\x6e\x7f\x0b\xae\xae\x67\x9c\x3f\xdd\x0f\x9e\xa7\xc2\xf5\xb2\x73\xc5\x1b\xfa\xcf\xd0\x20\xaf\x06\x96\x5e\xe3\x33\x7b\xbb\x62\xde\xd6\xf3\xae\x76\xfb\x00\x89\xcd\x01\x2e\xf5\x4f\x9c\xca\x99\x52\x6a\x5c\x99\xee\xc4\x3e\xff\x81\xbe\x1c\xe8\x27\xf5\x9b\xe8\xa8\xbb\x79\x88\xbf\x52\x9a\xf4\x4e\xea\x8d\xc7\xdf\x72\x9a\x80\xf9\x1c\x8c\xb7\x97\xef\xd4\x66\xdd\x75\x41\xa1\x41\x28\xcb\xf0\xa1\xc1\x60\x4a\xbf\xf7\x8b\x9d\x8a\x08\x93\x91\x22\xe4\xc7\xb4\x0b\xbc\xce\xdf\xb7\xbe\x5d\x8a\x36\xeb\xa9\xad\xaf\xf0\x28\x8e\x8e\xfe\x67\xa6\x1e\xf1\x72\x30\xce\xce\x6f\xd9\xb2\xa9\x85\x66\x13\x55\x7c\x5a\xe1\xb4\x3a\x0b\x6c\xcb\x27\x01\x9b\x2d\x82\x2c\xb2\x28\x9d\x4e\x55\x40\x68\x10\xca\x26\xac\xd7\xa0\x1c\x68\xe9\x8d\xd4\x93\xe9\xdf\x19\xfb\x24\x7c\xf4\xb6\x95\xd9\xa8\x11\x8f\x5b\xc8\xb2\x62\xfa\xe5\xbe\xc7\x06\x96\x4a\x6e\x89\x92\xa4\x4c\xfc\xad\x57\x7b\x04\x3e\xf0\x6a\xaf\xf4\xbb\xa7\x95\xd4\x78\xe2\x07\x39\xe3\x84\xb9\x92\x92\x0a\x01\x2e\x75\x72\xb5\x6f\x93\xf7\xf0\xd7\xd9\x68\xa3\x4f\xad\x16\x19\xb7\x1f\xf2\x15\x5c\x0d\xd3\x60\xfc\xf7\xb1\x5b\x6a\x4f\x0e\xd5\x42\xb1\x14\x35\x4a\x3a\x7f\xbb\xe2\x18\xb1\x15\xbd\x8b\x60\x25\x6a\x2e\xec\x0d\xd8\x1a\xbc\xfd\x90\x06\xe0\x21\xa7\xb4\x4e\x65\x0d\x06\x94\x1f\x0d\xd6\x27\x62\x85\xce\x14\x8b\xbe\x2e\x46\xae\xd8\x7d\xfc\xd2\xf0\x1b\xbb\xde\x17\xa5\xcb\x44\x8c\xdb\x0f\xe9\x09\x1e\xd2\x1e\x73\x71\x25\xc4\x72\x18\xe7\x45\x85\x31\x86\x5f\xea\xdd\xb6\xd6\xb2\xd1\xf7\x81\x7f\x87\x18\xb7\x1f\xa1\x93\xde\xd9\x94\x22\xbc\xfd\x90\x49\xe0\x21\xa5\x3e\x8e\x6a\xe2\xd0\xae\x5b\x13\x4b\xe7\x31\xb1\x9c\x09\x8f\xf5\x22\xad\x5e\x72\xaf\xcf\x24\xe5\x24\xa1\x7e\xe1\x98\x64\xe4\xbd\xfd\x90\x15\xe0\x21\x9d\xde\xa6\x85\x3f\x88\x8e\xe9\xb9\x8b\xb8\x7f\xd6\x5e\x71\xf7\xe7\x2f\xfd\xdd\x4f\xa7\x07\x9f\xf6\xa6\x67\xe2\x32\x8e\xb2\x5f\x38\xdc\x7e\xc8\x26\xf0\x90\x1c\x75\x6b\xd8\xce\x19\x85\x21\x6d\x16\xef\x5e\x87\xd5\x7f\x22\x3d\x37\x9f\x3c\x72\xdd\x96\x3d\xe4\x0b\xd4\x91\x33\x76\xc7\xba\x6d\x06\xa8\xd6\xff\xed\x51\x84\x5f\x85\xa6\xbc\x48\xc9\xfa\xbc\xf9\x9f\xb8\x25\xc7\x1e\xdb\x46\x0a\xdf\x53\x2c\x69\x20\x1a\xad\xeb\x99\x6d\xa2\xf6\x98\x38\xe0\x1d\x02\x0e\x67\xa1\x38\xd0\x2a\x24\xae\x91\xa0\xea\x30\x8b\xca\x14\xfc\x5d\x16\x8d\xca\xfc\xfd\xc3\xd4\x7b\x21\xa3\xa6\x08\xad\xa8\x5d\xda\xf9\xde\xf7\xf9\xdb\x80\xdb\x4a\x50\x1c\x68\x15\x7a\x77\x10\xe7\x14\xcb\xad\xe3\x7f\xf7\x27\x92\x5d\x67\x64\x23\xb9\x6d\x4b\x45\xc2\xfa\xf2\x55\x58\x51\xe7\xc8\xcb\xa7\x25\x47\x77\x61\x66\xa1\x38\x90\x13\xf4\x5e\x35\x77\x63\xac\x48\xbc\xff\xa6\xad\x30\xbc\xdc\xf4\x67\x1e\xdd\x38\xd4\x87\x14\x99\x99\xa1\xcb\x72\x0f\xf7\xc9\x9d\x7f\xc0\x1d\x4c\x28\x0e\x34\x5b\xdc\xdd\x10\x66\x9b\x55\x54\x1a\x91\x84\xf1\xa2\xcd\x0c\xc6\x60\xec\x36\x2f\x7d\x3e\x3e\x6f\xba\x1f\x33\xcb\x38\x34\xf9\xb4\x40\x5c\x01\x8a\x03\x15\xe1\x7e\x5b\x41\xa9\x3a\xe4\xd0\xac\x44\x6c\x99\xbf\xd4\x8b\x70\xf9\xbd\x30\x6e\x99\x2c\x5d\xf6\x7d\x68\x36\xbf\xf0\xac\x19\xa6\x17\x11\x6c\x4b\x02\xf5\x92\x84\x17\x43\x4a\x17\xae\x70\xa4\x7e\x64\x5a\xdd\xe6\x11\x55\x2c\x0d\x2e\x71\xfc\xa4\x46\xb9\xde\xda\xaf\x01\xb1\x8f\x3c\x1b\x24\x0d\x77\x80\xde\x36\x50\x1c\x48\x0c\x3d\xa3\x0e\x1d\x73\xdf\x9c\x07\x99\x34\x6b\xd6\x2d\xbe\x84\xb5\xb1\xe9\xa5\x6d\xdc\x10\xb9\x8c\x69\x55\x17\x3d\xc9\xf8\xac\x0e\xb8\x17\x8a\x03\xb9\x57\xdd\xbb\xbf\xf3\x58\x09\x59\xab\x8a\xb2\x80\x3e\xef\x5a\x94\xa2\xd8\x82\x2b\xd8\x78\x7c\xc8\xd7\xfb\x71\x04\x2f\x33\x9b\xcc\x0d\xcc\x2c\x14\x07\x72\xc2\xb7\x97\x1c\xe2\xd7\xba\xf8\x7d\xe2\x87\x68\x93\xfa\x99\x12\xdd\x65\x29\x0c\x27\x57\x8a\xbf\x15\xef\x0b\xa1\x7d\x4e\x89\xcf\x06\x8e\x1e\xa0\x38\xf0\xad\x64\x6f\x23\x6e\x25\x2d\xaf\x69\xf9\x8f\x02\xd5\xb4\x16\x2b\xf9\x5b\x42\x66\x49\x68\xc7\x18\x34\x42\x42\xc2\x9a\x3d\xfe\xcb\x96\xc0\xad\x64\x08\x0e\x24\x86\x7e\xb5\xb3\x02\x5d\xdb\xdd\x9d\x0b\x13\x59\x6d\xd6\xa8\xbe\x24\x2f\x85\xc7\x0a\x5c\x96\x0c\x31\xef\xfd\xeb\xb5\x31\x52\xb4\x23\x81\xea\xb2\x10\xcb\x17\xbc\x18\x74\xe7\x05\x6d\xc4\xd1\x3b\x56\xa3\x65\x84\xca\xdd\x73\x55\xf0\x17\x37\xde\xd8\xc5\x73\x3f\x66\x08\xdf\xda\xff\x73\x32\x99\x0a\x64\x4f\x42\x71\xe0\xab\x6b\x97\xb2\x6d\x45\xc5\x67\x1a\xbf\x2c\xc8\xa4\x9b\x56\xbf\x7e\x7b\xd3\xec\x95\xae\x5d\x6c\x9b\xc0\x77\x93\xf0\x7c\xa2\x5d\x61\x1a\xb8\xba\x06\xc1\x81\xdc\x5b\x69\x1d\xb3\x23\xda\x17\x21\x93\x18\x11\x2c\x9e\x70\x7c\x7c\xa9\xa8\x23\xdd\x71\x07\xcd\x07\xc9\x6a\x61\xb2\x0c\x4b\xab\x0a\xf8\xce\x86\xe2\x40\x4e\x50\x6e\x89\x7c\x29\xfe\xf0\x55\xbf\x10\x65\x3e\x9d\x8a\x94\x95\xda\x79\x28\x52\xa5\x7f\xfc\xbc\xb5\xf5\x92\xc5\x52\x5d\x3e\x0e\x70\x38\x0b\xc5\x81\x03\x99\xc6\x61\x4a\x3a\xa1\x7e\x26\x8d\x2e\xf1\x16\xea\xff\x64\x7e\xaa\x75\x50\x98\x4d\xea\x47\x0d\x64\x20\x90\xd2\x62\xc9\x31\x87\x03\x81\x4c\x08\x0e\x2c\x86\x0e\x45\x7b\xc9\x1d\x91\xbc\xde\x33\x87\xeb\x80\xfa\x55\xc4\xdc\xa0\xc0\xe3\x7a\x3d\xa4\x62\x4d\x84\xb1\x45\xec\x06\x55\xa0\x31\x3a\xd4\xc6\x02\x5e\x0c\x6a\x1f\x27\xcd\x19\x5d\x1d\xd0\x2c\xdf\x4c\xa5\xe6\x5d\xad\xb3\x2c\x86\xb8\xa1\xbe\x74\x7c\xe3\xdb\x9b\xf0\x5c\x63\x8a\xc0\x13\xc8\x5f\x81\xe2\xc0\x0d\x38\x25\x6c\x72\xbd\xb9\x1f\xe0\xb3\x3e\x0e\x97\x95\x3c\x48\xd0\x92\x63\x3c\x7f\xde\x48\x6e\xf4\xd4\xe8\x15\x26\xea\x63\x17\xf7\x1e\x98\x59\x28\x0e\xe4\xde\xba\xa1\x8e\xd1\xe2\x05\x89\xe7\x09\xa4\xbd\x1f\xec\x54\xd9\x39\xb6\xc5\xa9\x7c\x85\x0f\x9b\xf4\x6c\x76\xb9\x03\xe7\xbd\x1c\x80\x2c\x70\x28\x0e\xdc\x8a\x55\x87\xe7\x03\x92\x5d\xb0\x65\x08\x87\x10\x93\xda\x98\xf4\x93\x6c\x25\x39\xff\x08\x94\x24\xaa\x74\x9f\x14\x25\x1b\x0d\x91\x4a\x60\xf5\x81\xe0\x40\xb3\x3d\x1e\xb9\xf3\x47\x59\xee\xe6\xa5\x9b\x53\xac\x55\x52\x50\xb5\xa1\x84\xcc\x43\xbe\x7f\xad\xa2\xc5\xdd\x6b\xc4\x29\xe8\x86\x9c\x5e\x30\xb3\x50\x1c\x48\x0c\xe8\x2a\x0e\x67\xe3\x89\x6c\x42\x91\x53\xee\xee\xb5\xf3\x42\x0a\x39\x7b\xed\xfa\xa1\x77\x94\xfe\xa0\xdd\x68\xdd\xd8\xa4\x48\x1f\xc0\xc4\x00\xb5\xe5\x83\x17\xc3\xea\xb4\x5f\x55\x94\x45\x65\x29\xf2\x60\x87\x59\xef\xab\xc0\xe1\x0b\x4d\xd7\xb7\x49\x32\x23\xc8\x8c\x08\x7b\xef\x6e\x34\xde\xfc\x86\x4d\x18\x8a\x03\xd7\x9d\xd6\x47\xdf\x1b\xff\x62\xa9\xd8\xdb\x72\xb0\xcb\xe6\xe8\xda\xf7\xb5\x45\x95\x70\x5b\xf5\x15\x55\xea\x23\x6f\x63\x99\xe7\x4e\x1d\x30\xb3\x50\x1c\xc8\xbd\x87\x76\x93\xfe\x5c\xc3\x67\xef\x56\x07\x89\xf7\xfb\xed\x0a\x3a\x36\xa2\x34\xd2\x44\x04\xf5\xdf\x70\xad\x24\xfd\x9d\x71\x99\x07\x02\x99\x50\x1c\xc8\x09\x2e\x8d\xc7\x1c\xd8\x31\x42\x51\xc1\x0d\x4c\xf7\x58\x15\xee\xab\xd3\x32\xf7\x0d\xcd\x1b\x54\xc9\x0a\x5a\x7d\x0b\xca\xfc\x33\x03\xdc\x70\x86\xe2\x40\xb3\xcd\x0b\x6c\x1d\x3b\xff\x46\xde\xe4\xb0\xc6\xe4\x43\xb4\x75\x96\xe3\x67\x65\xe5\xf3\xb5\xb9\x1c\x7b\x2e\xe4\x5e\xc0\x0b\x52\xb6\x3f\x30\xb3\x50\x1c\x48\x0c\x84\x7b\x88\x92\x79\x78\x6f\xcc\xeb\x45\xeb\x2e\xb1\x9c\x9a\xaa\xd6\xcf\x15\xcf\xdf\x35\x87\x6b\xc8\xa6\x57\xe6\xd6\xf2\x55\x00\x37\x48\xa0\x36\xe3\xf0\x62\x98\xd6\x38\x30\x23\x0e\x40\xa0\x8e\x9e\x68\x97\xda\xcc\x6b\x15\x65\xcb\xfd\xb7\xac\x66\x6c\xbe\xa0\x77\x56\x5e\x74\x98\xcf\x97\x02\x9b\x30\x14\x07\x12\x83\x75\xc2\xef\xe4\xee\x6d\x59\x3c\xe2\xba\x5f\x73\xc4\xd8\xd7\xaa\xba\x58\x1f\xe7\x5f\x4b\xa6\xce\xf8\x9d\xac\xe3\x9e\x55\x05\x01\x7b\x06\x28\x0e\xe4\xde\xb0\x84\x6f\xbd\x6a\xfa\xf8\x0f\x3d\xd7\x2e\x6c\x36\xf8\x3c\x4f\xd7\xfc\xad\x33\x84\x4d\xe4\x43\x8a\x2f\x6f\x54\x7f\xe1\x2e\x02\x19\xba\x50\x1c\xb8\x39\xcc\xd4\x6b\x5c\xd3\x77\x7f\x4a\x8f\x8e\xb0\x0d\xe2\xde\xf5\x7f\x4f\xad\x0e\x46\xc9\x4f\x34\xc0\xa4\xb4\xd3\xa7\xac\x54\xb6\x03\xae\xac\x41\x71\xa0\xd9\xb2\xe7\x07\x5e\xd5\x6a\xa1\x6b\x4b\xb2\x4d\x3e\xa2\x77\xfd\x11\xfe\x98\xd4\x92\xc9\x44\x0c\x35\xb4\x1a\x6d\x65\xc1\x24\x7e\x13\xb8\x41\x02\xc5\x81\xc4\x50\xe4\x97\x2a\xf4\x93\xff\xa3\xf5\x07\x69\x4b\x72\x09\x7a\x11\x17\xab\xa6\x50\x86\x6a\x33\x37\x37\x15\x76\x3a\x55\xce\xfb\x13\x85\x30\x31\x40\x7d\x26\xc1\x8b\x41\x78\xf1\x48\x23\x0d\x61\x2b\x7e\xb1\xf4\xe3\xc6\x47\xdb\x96\x70\x29\xa3\x72\xf7\xe9\x27\xdd\xbb\xc6\x2f\xf0\xde\x7c\xc2\xdc\xd6\x82\x4d\x18\x8a\x03\x89\x01\xbd\x92\x70\x9d\x3c\xff\x65\x49\xd5\xe9\xf3\x31\x73\x8f\xca\x33\x5b\x0f\xb1\x37\xcf\xa7\x72\xc3\xd3\xa6\x22\x14\xef\x91\x04\x01\x49\xf6\x50\x1c\xc8\xbd\x49\x7d\xce\x19\x9a\x51\x87\x78\x41\xd1\xaf\x2a\x98\xef\xe4\x7c\xbc\x7e\xfa\xa0\x05\x5f\x3d\x63\xd7\xd8\xe4\x99\x80\x77\x02\x0f\xd0\xf6\x18\x8a\x03\x39\xa1\x70\xe6\x8d\xb2\x1c\xa9\xe4\xcb\xeb\xb7\xdd\x07\xc6\x9d\x3d\x8b\x15\xab\xe4\xcd\x4b\x26\x51\x04\x47\x73\x15\x5d\x9a\x35\xbd\x0f\x60\x66\xa1\x38\xd0\x6c\x0b\xc6\x05\xc2\x87\x86\x36\xae\x2f\x59\xa9\x5e\x16\x34\x35\x3c\xad\x8b\x1a\x5e\x1a\x8e\x5b\x94\x76\x6e\xd4\x14\xc3\xd7\x63\x01\x12\x61\xa0\x38\x90\x18\x18\x22\x5f\x28\x89\x79\x4e\xff\xae\x36\xd6\x37\xcd\x71\x38\x1e\x64\x79\x55\xa6\x8b\xf2\x5d\xa9\x1a\x9d\xe9\x95\xbb\x42\x7b\x25\x70\xda\x0d\xf5\x01\x0b\x2f\x86\x24\x0e\xd1\x92\x93\x42\x47\x24\xcb\x60\x3c\xec\x99\x21\x67\xab\x44\x66\x19\xfc\x18\x5c\x8a\xf9\xd7\x51\xfa\x77\xf2\x91\x79\x81\x2b\x2f\x50\x1c\x48\x0c\x52\x2a\x2f\x17\xbd\xe4\x16\x49\x24\xd4\x8b\x0b\xe3\x90\x27\xe8\xc5\x2f\xae\xe8\xcc\x9e\x25\x67\x50\x63\x0a\x69\x92\x89\xa8\x03\x7b\x06\x28\x0e\xe4\xde\xbb\x54\x37\x59\x2f\x1d\xea\x9c\x75\x5b\x13\xe3\xdc\xe3\xff\x7c\x9d\x6c\x09\x19\xb0\x21\xad\xdd\xb6\x71\x08\xc0\xfa\x97\x2b\x09\xcc\x16\x8a\x03\xdf\xc9\xa8\xeb\x0d\xb9\xfb\x1e\xa9\xdc\x8d\x02\x0b\xdb\x76\xb6\xd1\x0d\x29\xa4\xb4\x77\xeb\x34\x39\x0a\x47\x23\x98\xd9\x71\x21\x96\x00\x66\x16\x8a\x03\xcd\xf6\xd9\x03\x43\x1d\x0f\xf9\xde\xf7\x08\x8b\x54\xf9\xca\x06\x57\xcb\x2c\x27\xba\x3f\x09\x9e\x6b\x9d\x76\xd2\x45\xa3\x33\x7e\xf2\x00\xbe\xd4\xa0\x38\x90\x18\xb8\xed\xc2\x0f\x82\x68\xa4\xee\x79\x3e\x7e\xd9\x8e\x73\x86\xf3\xdc\x3a\xb0\xc9\xe1\x64\xb6\xe6\x15\x99\x14\xcd\x09\x1b\xa7\xda\x2c\x10\x1a\x84\x3a\x54\x84\xf5\x1a\x9c\x01\x9f\x83\x74\x9b\x75\xd4\xde\xc9\xc6\x14\xeb\x62\xb7\x2b\x2d\xbb\xba\xb9\xfe\xa0\xa4\x43\xdd\x5c\xdc\xc0\x39\x7d\x27\xf9\xde\x5c\x1d\x33\xca\xed\x8f\x5e\xfe\xc1\xd5\x88\x7a\xcd\x37\xc6\x22\xc5\xa5\x11\x5a\x97\xb5\xef\x98\xe5\xf0\x69\xb3\x1f\x79\x23\xf6\x95\x0f\x72\xb1\x3e\x52\xc7\xb7\x02\x21\xea\xff\xcd\xd1\x0b\xd4\x0f\x83\x7f\x3e\x42\x1f\xcb\x48\xb1\xfc\x3a\x2d\xfc\x7c\x3a\xd1\x76\x6d\x34\x32\x3f\x10\xf9\x4f\x4d\xd0\xb3\xb3\x57\xff\x12\x05\xd1\x38\x77\xb9\x01\xf6\x1f\x42\x71\xa0\xe7\xe3\x71\xf2\x51\x88\xa7\xff\xb9\x37\x91\x57\xb6\xd5\xb9\x61\x06\x6f\xe7\x47\x42\x75\x55\x0b\x8e\x82\x34\x8e\x59\x94\xda\x38\x43\x20\xbd\x0f\x8a\x03\x29\xae\xdb\x91\xaa\xca\xb7\x77\x3d\xf5\x91\x58\xf6\x72\xba\x16\xed\xd1\x30\xf3\xc7\x05\x92\xc4\x24\xf3\xcf\x82\x3e\xe6\xbd\x9f\x35\x90\x61\x66\xa1\x38\xf0\x35\xb3\x3e\xc2\x75\xa5\x2a\x51\x36\x77\x62\x82\xa5\xb4\x23\x9e\x61\x59\x27\xce\x0f\xfa\xb9\x0c\x0c\x0d\x16\xfc\x33\x3f\xb0\x9f\x01\xb7\xf8\xa0\x38\xf0\x6c\x47\xfe\x50\x93\xf7\xdc\x3f\x79\x69\x8b\x79\xfa\xfc\xb1\x7d\xfc\x84\xa7\x9e\x2c\xf9\x0b\x61\x4b\xa3\x74\xf9\x1a\x4e\xd3\x4c\x39\x60\xb6\x10\x1c\xe8\xf9\xf8\x16\xa2\x36\xbd\xb6\xa7\x8a\xb3\x9e\x86\xab\xd1\xe5\x4a\x9a\x61\x22\x3b\xde\xc6\x82\x3b\x62\x60\x49\x30\x35\x4d\xe0\x22\x0d\x74\xf6\x87\x92\x1c\xbc\x18\xa8\x7c\x62\xcb\x95\xdc\xa5\x2f\xbb\x96\x72\x07\x04\x16\x1f\xd4\xa0\xc5\x99\x0e\xe7\x84\x31\x37\xe1\x3c\x59\x12\xfa\x7d\xc9\x2c\x0b\x9b\x30\x14\x07\xee\xd2\x5b\xf5\xd5\xc7\xa0\x37\x24\x57\xf8\xca\x6b\x93\x6d\x09\x9b\x85\xf8\x91\x20\xad\x39\xa3\x61\xcb\xf3\x4f\xfa\xf7\x5f\xba\xa6\x31\xc0\xcc\x42\x71\x20\xf7\x5e\xd5\x8a\x69\x52\xa1\xbc\xa9\x5c\x30\x30\xdd\x4d\x3c\x4c\xfb\xf1\x70\xe0\x39\x19\xaa\x45\x64\x9a\x47\x1c\xaf\x5c\x29\x4d\x08\x70\x49\x12\x8a\x03\x39\xe1\x33\x45\x4a\x4a\x36\x35\x9d\x0e\x8f\x55\xa4\xf9\x02\xe5\xb9\x83\x94\x8d\x43\x1a\xb6\x93\xda\x87\x0e\xfb\x60\x95\xd5\x30\x39\xe0\xc0\x0c\x8a\x03\xcd\x76\x5b\x78\x6d\xdc\x64\x50\x9f\x59\xac\x22\x5d\x48\xe8\x2b\x73\xc3\x6a\xcc\x22\xde\x61\x97\x07\xc7\xe3\x2f\xd6\x7a\x47\x7d\x34\x40\xd1\x5a\x28\x0e\x24\x86\xf7\xd1\x67\x7b\xea\xb4\xfd\xac\x5f\x51\x28\xea\xf1\x39\xbe\xe4\x2a\x73\xbc\xfa\xd6\xd8\x2b\xcc\x68\x1b\xcb\x8a\x23\x39\x3c\x7f\x09\x13\x03\x54\x30\x08\x5e\x0c\x99\x02\x26\x9c\xf2\xc5\x81\x78\xbb\x05\x04\x75\xb3\xa7\xf9\x5f\x5a\xa3\xb8\x1c\xbb\x7a\x04\x0a\xed\xe5\x9f\xe9\x9e\x4d\x7a\x02\x87\xb2\x50\x1c\x48\x0c\x9d\x03\xfe\xa7\xda\xff\x32\xe8\x62\x76\xb0\x02\xad\xe2\x1d\xa7\xbd\x6b\x9e\x31\xe7\x44\x3c\x58\x16\x98\x9b\x27\x37\x5f\xd1\xac\x86\x99\x85\xe2\x40\xee\x25\x0e\x0d\x31\x3e\xfa\xf4\x50\xf1\x09\x02\x9d\xad\xea\xcc\x1b\xd5\x2e\xa3\xd0\x1f\x74\xb1\x9b\x7c\x46\xfd\xf3\x0b\xac\xf6\xbe\x40\xb5\x17\x28\x0e\x5c\x02\x89\xce\x9e\xec\xdd\xd7\x7d\xe7\x2b\xab\x2f\xed\x0c\xcf\x55\x11\xaa\xe8\x0d\xef\xbe\xcd\x7e\xed\xf4\xb5\x5b\x5b\xad\x23\x67\x19\x01\xb8\x02\x04\xc1\x81\x66\x8b\xd6\x70\x7a\x19\xc8\x43\x23\x27\xb0\x2c\xfa\xd1\x41\x69\x42\x76\x96\x21\x1e\xb7\xf5\x39\x5d\xc9\x54\x0a\x85\x2a\x32\x5d\xe3\x36\x10\x1a\xbc\xc0\xe1\x78\x36\x46\xa4\x53\x1e\xed\xa4\x7a\x07\x1d\xfb\x4e\xb5\x26\x8e\x23\x3a\x7b\xa0\x50\xe7\x94\x0b\xc5\x39\x31\x2b\xa5\xc8\x7f\x86\x06\x75\x26\xe3\xf6\x19\x14\x4f\x0c\x14\x38\x3e\xb2\x33\x59\xe7\x38\xd0\x6e\xb8\x72\x51\x17\x67\xdd\xb4\x70\x07\x9c\x2c\x5c\x32\x5e\xff\xe7\xe9\xed\x73\x06\xb2\x77\xf7\x7b\xc8\xff\x1e\x45\xa6\x53\xb4\xd7\xd6\x96\x27\x84\x7a\x9f\x3f\x97\x97\xa6\x92\x7c\x2a\xf1\xec\xf1\x87\x50\x50\x68\x10\xca\x32\x7c\x68\x50\x57\xd5\xbe\x0f\xbf\x2f\xce\xde\x55\xe2\xdf\x0a\xa3\x02\x49\xfd\xf6\x73\x03\xcc\x98\xbe\x7f\xa3\x1f\xa5\x44\x7e\x69\x2c\x77\x5e\xfe\x07\x8a\x8c\x81\x3d\x16\x7d\x48\x43\xc2\xc3\x43\x57\x15\x38\x5a\xc6\xb4\x65\x96\x4a\xff\x2f\x91\x01\x3f\x73\xf0\x34\x62\x2a\x10\xcd\x0c\x08\x0d\x42\xd9\x84\xf5\x1a\x04\x87\x06\x5b\x4f\xd4\xe9\x72\xa6\x19\xbc\x2f\xfa\xf0\x33\x84\x65\xb6\x71\x42\x30\x08\xd3\xfb\x2f\x44\x66\xda\x1c\x32\x26\x17\xba\x38\x6e\x9f\xf6\x25\x02\x17\x1a\xac\xf6\xe3\x6a\x47\x3b\x5d\xa4\xe5\x93\xba\x4f\xe4\x2d\x8a\xa9\x22\xd6\xbd\x1b\x4b\xea\x2c\x1a\x83\xee\x8c\xba\x31\x9c\x95\xf5\xeb\xf6\x43\xc2\x85\x06\xcf\x64\x37\xee\xd2\xbb\x5a\xaf\xf5\x8b\xe7\xa6\xbf\x31\xf7\x88\x7f\xf2\xeb\xa6\xfb\x70\xf9\xd3\x90\xaa\xb0\xea\xc9\xc0\xac\xbc\xe0\xed\x87\x84\x0b\x0d\xc6\xce\x61\x0a\x18\x59\xd0\xfe\x3a\x7d\xdc\x15\x70\x24\x36\x88\xbb\x6d\x13\x30\x22\x70\xd8\x6b\xf1\xeb\xb3\xea\x9e\x8d\x1c\xf5\xd5\xed\x87\x84\x0b\x0d\x1a\x47\x53\xb6\x08\xa2\xfc\x7a\x3a\x4a\x6e\x63\xca\xe0\xa8\x53\xf7\xa8\xc8\x28\x6a\xd3\xa0\x3f\x6f\xf1\x9c\x1b\x77\xfe\xee\x08\xda\xed\x87\x84\x0b\x0d\xf6\x9c\x99\x72\x50\xf3\x2f\xe5\x5e\xd9\x1c\x49\x95\xb4\xd6\x06\x7a\x33\xbb\x30\x6d\x7f\x68\xb4\x39\xe4\x6b\xb0\x61\x26\x76\x14\xb8\xfd\x90\x70\xa1\x41\x26\x94\x73\xd3\x91\x5e\x1f\x8a\x77\x41\x33\xbb\x77\x10\xff\xfd\xb6\x17\x8d\x19\x7f\xf1\xaa\x5a\xcf\x09\x4d\xb4\xc3\x65\xec\x26\xf1\xf6\x43\xc2\x85\x06\xbd\x34\x4a\x32\x98\x50\x6d\xf9\x04\xc3\x6b\x63\x7a\xd8\xad\x47\x59\x07\x84\xfc\x06\x4f\x46\x91\xae\xd9\xdc\x3d\x5b\xf9\x7d\xfb\xff\x37\xfb\x53\xa8\x47\x11\x7e\x15\x6a\x5a\xf2\xff\xc6\x19\x18\x8d\xf6\x4a\x40\xa6\xc8\xe3\xa7\x79\x15\xed\xa6\x31\xe3\xf1\xd3\xe9\xb2\x57\xa6\xdb\x74\xc4\xb1\x23\x18\xb0\x17\x30\x14\x07\x2e\x6b\xed\xc7\x79\xbf\xfd\x1c\x45\x01\x37\x8d\xc6\xdd\xfb\x78\x65\x71\x3d\xff\xf1\x8a\xa5\xca\xa5\x85\xbf\xfe\x64\xc1\xe3\x29\x06\xa0\xd6\x3b\x14\x07\x7a\xaf\xa7\x11\x36\x5e\xcc\x10\x2c\x67\x5c\xc9\xe6\xcc\xd2\x38\x87\x3a\xfb\xfb\x97\xac\x48\x32\xbc\x45\x5f\xc5\x54\xd4\x77\x89\xf9\x00\xe4\x9f\x41\x71\x60\x27\x98\xfb\xf0\x95\x9b\x7a\x67\x3c\x2a\xc2\x96\x5f\x17\x2a\xf2\xb3\x0e\x10\x89\xdb\x90\x4f\x78\xe0\xe9\x2f\x6b\x1d\xa9\x3d\x0a\xf4\x3f\x83\xe2\x40\x7b\x07\xae\xbf\x44\xf2\xcd\xc1\x61\x8f\x73\xa9\x03\x48\xa9\xf5\x44\xc7\xc9\x75\xf3\x73\xbe\x93\xb4\x7f\x79\xec\x2e\x3e\xe0\xda\x2d\x01\x54\x16\x82\xe2\x40\x66\x89\x39\x67\x2b\x48\xd7\xec\xfc\xcb\xcc\x69\x62\x75\x0d\x3a\x86\x7b\xf6\x9f\xe9\xa9\x28\xa1\xe9\x9c\x85\x5c\x4e\xdc\xcc\x36\x8f\xc3\xb6\x24\x50\x2f\xc9\xff\xd2\x37\x28\x7f\x27\x6b\x72\x2e\x3d\x3c\x80\xbd\x4d\xe5\x29\x6d\xe1\xce\x1d\xaa\x9a\xc7\x6b\x72\x97\x79\x6c\xa2\x15\x9a\xda\xbf\xfd\xf2\x60\x13\x86\xe2\x40\x62\x78\xfa\xe7\xe7\xe7\x08\x3a\x83\x57\x01\x02\xb6\x44\x45\xe9\x93\x6f\x03\xdd\xa7\xd3\xb5\x10\x51\x48\x6c\xa5\x44\xf7\x50\xc7\x48\x80\x0e\xe6\x50\x1c\xb8\x6f\x10\x9f\x66\x53\x24\xff\x3b\xde\x22\x7b\xf3\x56\x06\x2e\xc7\xeb\x02\x8b\xa5\x1f\x73\xa5\xbf\x2f\x36\x4b\x5d\xac\x2a\x55\xaa\x80\xcf\x63\x28\x0e\xe4\x04\x89\x28\xaf\x16\x04\x4b\x85\x83\xef\x51\x47\x11\x92\xa4\x55\x41\x81\xc5\xf4\xf2\xd2\xa5\xa5\x35\x0a\x3f\xee\xa1\x79\x55\xa8\x75\xc2\xcc\x42\x71\xe0\x93\xfa\x2a\xa4\x67\xcc\x3e\x57\xe5\x3e\x9a\xb8\x63\xc6\x8f\xdf\x56\x29\xbe\x76\x4b\xc4\x98\xc2\x9e\xa3\xe5\x4e\x9c\x98\xe6\xb5\xf9\x07\x1c\x6f\x41\x70\x20\xb3\x6b\x54\x39\x97\xf7\x36\x4c\x6b\xab\xbb\x79\x4d\xcd\xfa\x33\xb9\xa7\x6b\x0e\x49\xec\xc6\x84\xf1\x09\xcd\xe3\x35\xed\xfa\xb0\xb1\x61\x62\x80\x5a\xbe\xe0\xc5\x40\x3c\xf8\x7c\xd8\xdc\x89\xa2\x5b\x1c\x6b\x3a\xd7\xa0\x41\xf8\x3e\x2e\x93\x15\x19\x49\xd5\xd8\x67\xd9\xd0\xca\x4b\x1f\xb5\x47\x51\xc0\x8e\x0f\x82\x03\x77\x14\x9b\x4f\xfc\x89\x54\xfb\x2d\xde\xb4\xb3\xe5\xa6\x11\xfb\xd4\x70\xc3\x47\x2f\x2a\xdd\x26\xf0\xec\xea\xd3\xfd\x9a\x07\x3f\x7e\x00\x9f\x98\x50\x1c\x48\x0c\x3e\x3b\xdc\x3f\x28\x5a\xf8\xf0\xcc\x1f\x7f\x08\x92\x98\xca\xa3\xb8\x5f\xf8\x4e\x24\xe5\x58\x4d\x57\xdc\x26\x33\xe5\xeb\x90\x2e\xf0\x08\x43\x71\x20\x27\xb8\x21\x7b\x21\x46\xb9\x1f\xa9\x97\x2a\xb6\xea\xfd\x44\x8d\xfd\x40\x8a\xff\x19\xcd\x7b\xb9\xf9\xb5\xb5\x1a\xe5\x00\xba\xd6\x6f\x20\x93\x09\x8a\x03\xfd\x6b\xed\x1c\x1e\x71\x95\x4b\xa2\xe3\x92\x9d\x08\xbd\x67\xbc\xb3\x7e\xcc\xf7\x34\xb4\x0f\xcf\x1c\xc5\xf2\x1a\x3f\x11\xd2\x13\x85\x03\x3d\xf6\xa0\x38\x90\xd9\x83\x01\xc6\xfb\xc7\xc6\xfe\xbc\x98\x88\x6f\x71\xbe\xcd\x68\x99\xaa\x1d\x72\x8c\x88\x25\xcc\x6d\x6a\x2a\x05\x31\x60\x7b\xfe\x40\x87\x89\x01\x6a\x63\x01\x2f\x06\x59\xcd\xf5\x74\xeb\xdf\x14\x48\xc7\xc9\x1f\x59\x1d\x72\x6c\xf0\x1f\xf5\x17\x7d\x16\x39\x19\x14\xdf\x1f\x71\xfd\x2d\x97\x1d\x0f\xdc\x52\x87\xe2\x40\x62\xa8\x47\xe6\xd2\x6b\xec\x91\x49\x60\x32\x8f\xf5\xbe\x3f\xdc\xb6\xeb\x4a\x66\x18\x1d\x8b\x77\x6a\xe7\xb1\xcc\xdc\xab\xf6\xd0\xdf\x04\x66\x16\x8a\x03\xc7\x57\x26\x50\xf8\x2d\xec\x63\x44\xe9\x30\x58\x33\x5e\x39\x0d\x4b\x7e\xf8\x7d\xf8\xdc\x59\x19\x89\x33\x9f\xce\x1a\xed\x81\xae\x28\x50\x77\x1a\x8a\x03\x8b\xc1\x60\xe9\xa3\xc4\x53\x75\xbb\x37\xbd\xf4\x0a\x8f\x15\xb0\x9e\x52\xbb\xfb\x5c\xa2\xeb\x9d\xe5\xee\xa4\xf2\x87\xe9\x8f\x98\x03\xff\x1a\x14\x07\xfa\xd7\x4c\x09\xd7\x5d\xf7\xcc\xd3\x2c\xb9\x82\x44\xa8\x45\xb0\x6a\xff\x85\x3d\x88\xef\xf5\x38\xf1\x29\x7e\xd9\xe0\xf3\xb1\xd9\x39\x09\xb8\xef\x02\xc5\x81\xcc\x06\x49\xf1\x4b\x08\xa4\x14\x76\xbb\xa5\x96\x1b\x85\xb9\xae\x0e\xea\x6e\xfc\x1b\xa5\x8e\x5e\x7f\x95\xd4\x84\xb5\xb2\x3f\x44\xcc\x0f\x74\x21\x85\xd8\xf2\xc1\x8b\xe1\x6e\x52\xbc\x02\x4e\xeb\x61\x96\x4e\x22\x27\xcf\x19\xed\x91\x81\xbe\xf0\x86\x56\xc0\xb0\xf6\xe2\x11\xf5\xdf\x4f\x4a\xbf\x2d\x80\x4a\xce\x50\x1c\x48\x0c\x31\xa9\xae\x5f\x02\x94\xd2\x4e\x1c\xe9\xf2\x1f\x34\x11\xbf\xaa\x88\x6c\x0a\x4a\x09\x97\xa5\x1f\xd8\x8c\xff\x51\x77\x16\xc4\x0f\x1c\x63\x40\x71\xe0\x2f\xd7\xb3\x31\x23\x8a\xfd\x24\x64\x61\x97\xd4\xa7\xdf\x33\x12\x0b\x09\x22\xc8\xe5\x8b\xa8\x13\x16\xcc\x58\x97\x39\x5b\x9e\x47\x02\x9d\x11\xa1\x38\xb0\x13\xce\x37\x7d\x52\xe6\x05\xfe\xfc\x94\x4a\x0f\xdc\xba\x8b\xaa\xcf\xca\x5f\x54\x7c\xb8\x85\x42\xef\x1d\x1b\xec\xbd\xda\x5c\x01\x24\x23\x42\x71\xa0\x7f\x0d\x67\xfc\x02\xd3\x5d\x58\x40\x15\xa7\x18\x47\x72\xca\xf2\x58\x9b\x19\xe7\x6b\x29\x8b\x15\xe7\xc0\xea\x1f\x2b\xfd\xc1\xc6\x20\xa0\xf7\x33\x14\x07\x32\x9b\xa5\x52\x38\x43\x1b\xf6\x43\x00\xab\x78\x7d\xeb\xab\xa3\xcd\x23\xa3\x3b\x56\x53\x88\x89\x84\xe7\x34\x9c\x49\x13\x53\x58\x89\x40\x11\x72\xa8\xcd\xf8\x7f\x69\x92\x43\xf4\xf0\xc6\x6f\xaf\xdd\xa6\x03\x5d\x6b\xc7\x2d\xf5\xd4\x6c\xf0\x3d\x2f\x57\x50\xf0\xd6\xf7\x22\x7e\x6d\xd9\x5d\x3f\xd6\x01\xa0\x24\x00\x04\x07\x12\xc3\x6b\xd4\xcc\x6d\xbe\x3c\x9a\x87\xd9\xac\x6b\x96\x06\x44\x9e\x63\xa7\xec\x4f\x8c\xdc\x5e\xe0\x49\x13\xa1\x2e\x13\x7d\x2f\xe0\xbe\x03\xa4\xc5\x40\x70\x20\x31\xc4\x31\x08\x2b\x66\xd9\x2a\xa2\xb0\x45\xde\x13\xff\x87\xca\xf0\xf2\xab\x08\x23\x6f\xe3\xb9\x2f\x97\x4c\x82\x3d\xf7\xf6\x07\x64\xa0\xba\x2c\x14\x07\xce\x26\xd8\xfb\xf8\xa5\x14\xd1\xbd\x4b\xea\xc0\x2c\x43\xf9\x47\xf6\x57\xfc\x56\x29\xca\x44\xdb\xbd\xac\x88\x07\xeb\x2b\x17\xcb\x3e\x8f\x81\xa3\x32\x08\x0e\xf4\xaf\xa9\x6e\xda\xce\x3e\xff\x54\x4d\x86\x17\x8f\x56\x85\xb2\x82\xe5\xa3\x67\x9b\xb4\xa7\xaf\x1d\xd7\x1b\xd4\x75\x6f\xf5\x81\xe2\x83\x4c\x98\x59\x28\x0e\x64\x76\x47\xb7\xf0\xc1\xe0\xd2\x7c\x63\xca\x6f\x5c\x7b\x7f\x7f\x9c\x84\x18\xd7\xf8\xab\xee\xaf\xed\xbd\x95\x2f\x5d\x0b\x1a\xf7\x89\x02\x60\x62\x80\xfa\x4c\x82\x17\x83\x0d\x41\xe9\x44\xec\x0e\x46\xb1\xb2\xf7\xcf\xda\xc8\xd1\x9d\x85\x4c\xf3\xfb\x34\xf4\xd1\xf9\xe2\x95\xce\x6b\x42\x57\x2d\x0d\x40\x7b\x02\x28\x0e\x24\x06\x9e\x77\x3d\x51\xe8\xdb\x65\x7a\x65\x87\x34\x09\x69\xe8\xb5\x9b\x53\x72\x55\x1e\xe6\xeb\x15\xf1\xe7\x28\xbf\xc9\x4a\xaa\x0d\xaf\x80\xd4\x12\x08\x0e\x24\x86\xf3\xe5\x93\xf0\x26\x72\xcb\x7e\xb9\xae\x99\x5d\x52\xd3\x4a\x46\x9b\xf8\x1d\x56\x13\x17\x4c\x9d\x87\x08\x1f\x3f\x3f\x7e\xf8\x0a\xe8\x98\x04\xc5\x81\x9b\xe4\xb4\xb1\x48\x86\xb3\xdc\xc5\x9f\x75\xfb\xb5\xdc\x5a\x61\x24\x96\x6e\x2d\xa4\x4c\x9e\x55\xe0\x72\x17\xad\xde\xe7\x79\x01\x0e\x90\x4f\x0c\xc5\x81\xfe\x35\x95\xd0\xb0\xf9\x44\x71\x02\x72\x4e\xee\x57\x6d\xba\x2d\xb6\xbf\xd6\xb8\xe4\xc2\xb5\x53\x08\x0f\x95\x84\xc8\xac\xa6\x1e\x56\x03\x8b\x1a\x14\x07\x32\x3b\xc9\xf1\x7b\xba\x22\xe5\xd5\x59\x81\x05\x6d\x2c\xb7\xd8\x73\x0f\xe2\x52\x44\xfa\xa6\xc5\xb9\xf1\x47\x7f\x8b\x0b\x5e\x9c\x3b\xc9\x02\xa5\x86\x21\x3e\x60\xff\x4b\x3e\xf1\x80\x76\xfd\xa3\x7b\x7f\xe8\x89\x44\x33\x0e\xc8\x3b\xe5\xc8\x31\x02\x66\xc3\x0f\x17\x99\xae\xfc\xf6\x6f\xbc\x7e\x63\x96\x03\xdd\xc9\xa0\x38\x90\x18\xa2\x87\xad\x36\x79\x82\x39\x4d\x8d\xb0\x43\xb4\x1f\x5d\x5c\x2d\xa7\x29\x89\x4e\x45\x48\x63\xb2\x18\x53\x5d\x28\x1c\xdd\xc5\x05\x3e\x2d\xa1\x38\x90\x18\x62\x36\x04\xae\xdf\x96\xff\x5e\xb3\xba\xe1\xc8\xc7\x92\x3f\x34\xb9\xd2\x5b\xaf\x0f\xc5\x78\xd8\x26\xf0\x4d\xfe\xf1\x88\xfc\x47\x76\x60\xf5\x81\xe0\x40\x4e\x08\xc3\x4d\xee\xf4\x75\xc8\x93\xec\xec\x28\xc9\x79\xa1\x65\x5e\x19\x8b\x56\xac\xfb\xf1\x22\xb2\xb0\xc8\xa8\x54\xf6\xfe\xcb\x25\xa0\xaa\x2a\x14\x07\xfa\xd7\x74\x44\x70\xdc\x24\x7c\xcf\x0a\x9b\x1d\x4b\x5b\x23\x31\xe9\xa2\xa5\x9b\xd7\x64\x58\xf0\x37\x22\xd1\x42\x3d\x70\x03\xf3\x5f\xa1\xc2\xcc\x42\x71\x20\xb3\xd5\x6a\xaf\x8e\xd4\x95\xff\xbe\xa5\xb4\x69\xca\xd1\x26\x98\x1a\xf4\xbf\x20\xef\xef\x26\xfa\x15\x8a\x2c\xbc\x17\x4f\xb1\xfd\x04\x09\x08\x0d\x42\x1d\x2a\xc2\x7a\x0d\xc2\x85\x06\xdf\x3d\xcd\x44\xf7\x4c\x4e\x0f\xcf\xb9\x8f\xab\x12\xaf\xe6\xf7\xae\xb0\x97\x07\x4d\x28\x53\xe6\x23\x5b\x54\xb3\x4f\x6d\xb6\xce\xed\x43\x83\x22\x70\xa1\xc1\x22\x2f\x84\x8e\x64\xf4\xe1\xc6\x86\x12\x7f\xa7\x39\x9a\x3b\x73\x9d\x82\x1b\x34\xa1\xa7\x61\xcc\x38\xdd\x2a\xc6\xba\x64\x6e\xb7\x6d\x78\xa4\xf5\x7f\xfb\x61\xf0\xcf\x87\xca\x79\xda\x7b\x31\x8d\x87\x8e\x0f\xc6\xdb\x6f\x34\x45\xac\xc3\x53\x7a\x9f\x50\xd1\xe4\x7e\xe3\x4c\x45\x6e\x56\x93\x13\x70\xd3\x05\x1e\x68\x08\x0e\x5c\x97\x9d\x73\x54\x58\x78\xd5\xd8\xf6\xe0\x73\x68\x86\x83\x8c\xf1\xf0\x03\x03\x87\xc5\xda\xea\x1e\xaa\xe1\x7e\x44\xa3\x8f\x0e\x1e\xf6\x30\xb3\x50\x1c\x38\xc5\xfa\x34\x95\x55\x74\x34\x1e\x47\x08\x21\xda\x56\x7b\x59\x2a\x81\x7b\xc3\x4b\xd0\xb4\x54\x83\x57\x33\xa2\xfc\x72\xe9\xd1\x16\x07\x90\x62\x0d\xc1\x81\x4b\xd8\xb2\x47\x13\x0d\xbf\x2e\x0e\xa1\x2b\x5b\x9e\x8c\x5f\x2b\x09\x39\x95\xd4\x25\x7e\xb6\x48\xf4\x47\xd2\x41\xf9\x75\xb5\x3e\x0f\x50\x2b\x1a\x8a\x03\x09\xd9\xe9\xce\xc3\xdc\x31\x3d\xc5\xe6\x2f\xb5\x5e\x66\x5d\x47\x49\xaf\x7b\xb5\x4e\x1e\x6a\xf1\x34\xe9\xf5\x85\xf9\x0f\x0a\x97\x7e\x04\xde\xc1\x50\x1c\x38\x34\xf8\x54\xf5\x0d\x77\xde\xa5\x58\xc0\x09\x5f\x99\xfc\xa7\x37\x1d\x2c\x65\xa3\xf4\x01\x8d\x41\x39\x7b\xe7\xab\xc8\x3f\x8d\xce\xc7\x60\x2f\x4b\x28\xc9\xc1\x8b\xe1\x1d\x57\xea\x24\x85\x69\xe9\xe1\x42\x52\x46\x27\x56\x7a\x8c\x18\x21\x0e\x3a\x4f\x74\x0a\xa6\xe7\x1d\xd2\x97\x93\xc8\xcb\x59\x66\xc0\xb5\x43\x08\x0e\x24\x06\x63\xf7\x85\x9c\x99\x2f\x2b\x81\x58\xb5\xe1\x11\xd7\xa6\x47\xa9\x91\x5d\x18\x94\x83\x68\x7f\xe4\x54\x8e\x6c\x53\x45\x99\x34\x80\x0f\x2c\x28\x0e\x24\x86\x11\x8a\xe7\x16\xa1\xb8\x3f\x9f\xb1\x54\x3c\x41\xed\xf4\xac\x16\x35\x52\x18\x51\x73\x59\x39\xd9\x94\xa5\x4b\xda\xdf\x2d\x5e\x32\x86\x99\x85\xe2\xc0\xf5\xb0\x6e\x42\x94\x57\x44\x34\xee\x3c\x30\x25\xe0\x24\xc7\x67\xc1\x7e\xc7\xe4\x7e\x97\x71\xfb\xb0\x58\x6d\xcf\xbf\x3e\x70\x26\x0a\x68\x43\x04\xc5\x81\xbf\xb6\xb9\xa4\xd8\x2f\x94\xd8\x51\x37\x24\x8f\x4d\x66\x52\xf0\xb1\x18\xbf\xcc\xc6\x64\x57\xbe\xaf\xae\x60\x21\x73\xc4\xf0\xa3\x34\x04\xbe\xb6\x21\x38\x90\x59\xc9\x12\x4e\x49\xff\x0d\x87\x16\x9d\xd6\xeb\x15\x82\xcf\xcb\x86\xf6\x13\xef\x0a\xda\x22\x12\xc2\x5d\xd8\xb8\x5f\x52\x91\xf1\x5d\xc0\xc4\x00\x15\x0c\x82\x17\x03\xfd\x3f\xe7\x43\x94\xb6\xb8\x0c\x9d\x73\x5d\x77\xac\x0a\xa6\x26\x0c\x2b\x46\xf6\x61\x22\xa2\x7b\x2b\x5e\xfb\x94\xde\x5e\x99\xc0\xe6\x17\x8a\x03\x89\x41\x57\x2a\x51\x61\xab\x98\xae\x2f\xa6\x5b\x4f\xf6\x1d\xfe\xbe\x75\xb9\xf8\x5f\xc3\xad\x4b\xc2\xcf\x4d\x52\x4a\x57\x26\x12\x5f\x2f\x80\xcb\xde\x10\x1c\x48\x0c\xf6\xae\xca\x2e\x95\x7f\x76\x0b\xb4\xc5\x44\xbe\x22\x5f\xfa\x67\xfc\x4d\xc7\x26\x47\x89\x3d\x18\x65\xec\x6f\x9f\xe7\x34\x12\xe2\x04\xc2\xcf\x10\x1c\xc8\x09\x03\xa5\xc3\xc1\x56\x33\x2e\xae\x6b\x5a\x1b\x66\x12\x8c\xc2\x39\x2b\xe3\x59\x8d\x5a\x57\x28\xcb\x7b\xed\x77\x35\x2a\x77\xae\x81\xe3\x3d\x28\x0e\xf4\xaf\xd1\x4c\xd8\x63\x5c\x9c\x56\xfe\xd9\xcc\x7b\xf2\x57\x4e\xfe\xd7\x20\xce\x22\xa2\x65\x7a\x4c\xd0\x56\x12\x11\xf7\xd3\xa0\xef\xec\x7b\x40\x68\xb0\x48\x06\x69\xd2\x32\xa1\x64\x85\x18\x31\x6e\xd9\x6a\x4a\xdf\x48\xfa\xdb\xaf\x4d\x42\xa6\xd7\x18\x7d\xea\x6b\x36\xec\x5f\xef\xb5\xff\x67\x68\xd0\xde\x8a\x9b\x1c\xd3\xb2\xd3\x52\xc4\x48\xc5\x53\xf8\xb1\xe4\x33\x7a\x61\x3e\x6d\x13\x27\xf5\x37\xe5\x15\x77\xed\x0c\xea\x0b\xc9\xff\x33\x34\x99\x38\xf5\x82\x31\x7e\xac\x1e\x83\x3f\x91\xea\xef\xbb\xd7\xca\x72\x8d\x82\x22\x2b\x09\xff\x9a\x94\x99\xf3\x8b\xfd\x10\x5b\xb5\x40\xa1\x41\x28\xcb\xf0\xa1\xc1\x09\xd5\xa7\x96\x08\xb1\x54\xb9\xa4\xe7\x46\x91\xa9\xa6\x8c\xfc\x7a\x08\xb3\xcf\xbb\x7b\x6b\xf1\xed\xe4\xfa\x05\xb7\xbc\xb6\x46\xfe\x73\xb9\xeb\xdc\x8e\x37\x36\x1d\xc1\xa3\x33\xd1\x49\xbd\x28\x77\x36\xa5\x55\x60\x49\xe0\x89\xa5\xa6\xfb\xfe\x57\xa4\xd9\xc5\xb7\x06\x05\x08\x0d\x42\xd9\x84\xf5\x1a\x04\x87\x06\x6b\x23\x38\x7c\xaf\xbf\xec\x1e\x4a\x1c\x5c\x9b\x2e\xac\xb5\x7f\xa1\xdc\xc1\xe6\x11\x56\x65\xa0\x21\x09\x28\x7c\xcd\xc1\xfe\x3d\xe8\xd6\xab\xbd\x2f\x5c\x68\x10\x77\x2c\xd5\xe9\xe6\xbd\xeb\xab\xed\x40\x97\x78\x5e\xee\x39\xd4\x31\x65\x04\x23\xc1\x37\x6f\xb0\x2a\xd7\x6b\x7f\x35\xfc\xfc\x7b\x79\xfb\x21\xe1\x42\x83\x5d\x9d\xad\xd6\x71\x8f\xa8\x7f\x4e\x58\xcc\xac\x6a\xf3\xfc\x32\x6d\xf4\xef\x2c\x99\x31\xcb\xff\x27\x88\x80\xcb\x46\x76\xd0\xa6\x7e\xfb\x21\xe1\x42\x83\x1a\x0c\xab\x83\x2f\x93\x38\x52\x76\x26\xf4\xff\xc5\xaa\xec\xd3\xbd\x1f\x5c\xdb\x2e\xf6\xdb\xdb\xb1\x3c\xf8\xf8\xe3\x7d\x19\xf1\xed\x73\x23\x7d\xe1\x42\x83\x85\x46\x39\x84\xb5\xc3\xa2\x22\x31\x71\x9d\xd7\x72\x33\xee\x85\x66\x73\xb8\xae\xc5\x7d\x3a\x08\xa4\xaf\x4c\xe6\x10\xb0\x91\xc6\x6e\x3f\x24\x5c\x68\xf0\xaf\x63\xca\x78\x5b\xa3\x01\xa6\x3c\xda\xe5\x9f\xb2\x7f\x9f\x3f\x3b\x8e\xbd\x74\xc6\x48\xa7\x2a\xa5\xbf\xdf\x31\x4e\x37\x3a\x1f\x73\xfb\x21\xe1\x42\x83\x81\xd3\xa5\xfa\x39\x05\xcb\x6f\xe9\x07\x9b\xc2\xc6\x79\xf9\x3e\xf7\x77\xf6\xae\xaf\x3c\x44\xee\x5a\xf5\x8a\xe2\x7e\x2e\x55\x69\x78\xfb\x21\xe1\x42\x83\x95\x43\xd9\xf7\x8b\x56\xd5\xae\x9a\xe9\x67\x9e\x5b\x3e\xc8\x1a\x6b\xf2\x19\x6e\x24\xa3\x28\x59\x52\x9e\xa2\x42\xfb\x47\xbc\x85\xfe\xbf\xd9\x9f\x42\x3d\x8a\xf0\xab\xd0\xfd\xa9\x4c\xac\x80\x01\x57\xd5\x27\xc7\xc6\xb3\xa8\x38\x03\x57\x99\x4f\xdc\xe8\x66\x43\x04\x3e\x63\x72\x3d\x2e\xa5\x4c\x8c\x52\x80\xbd\x80\xa1\x38\xd0\x2a\x14\xc9\x21\x62\x22\xf5\xee\xbe\x54\x9c\xb2\xc2\x6e\xac\x1f\x67\x62\x78\x52\xe6\x57\xc3\x23\xd9\xde\xf7\xab\x14\x69\x8e\x04\x1c\xc0\x09\x17\x14\x07\x5a\x85\xa6\x9d\x4f\x87\x15\x37\x4a\xb6\x50\x5c\x58\x35\x63\x99\x42\x8b\xe2\x82\x69\xe5\x02\xc7\xbf\xf6\x99\x12\xea\xa8\x44\x7f\x48\x02\x12\x0b\xa0\x38\x90\x13\xf8\xef\x21\x75\x65\x1a\xb7\xbc\x7d\x93\x32\x6c\x5f\x59\x6d\xcc\xc2\x99\x6c\x9f\xbe\x67\x82\x48\xe0\xc8\xa7\xbf\x6c\xd6\xf8\xd9\x13\x66\x16\x8a\x03\xa7\xda\xa0\xd3\xb3\xfa\x38\x09\x76\xe5\x70\x23\x78\x71\xb4\x1b\xce\x17\x5b\x4c\xf0\x50\xc9\xec\xb0\xed\xbc\xa4\x46\xed\x1b\xfc\x53\x04\xa4\xda\x40\x70\x20\x27\x98\xf4\x44\xe8\xec\x59\xf3\x44\xe2\xa3\x63\xf2\x3d\xda\x44\xb7\x8f\xef\xb5\x33\x4a\x76\x09\x5a\xcc\x73\x0e\x5b\x43\xac\xdd\xfd\x08\xdb\x92\x40\xbd\x24\xff\x4b\xe3\xc9\x99\x8a\xcb\xd1\x31\xd1\xe0\xce\x74\xbc\x1f\x9b\x2f\x29\x04\x93\xfd\x9b\x4a\x94\x52\xec\xbd\x4e\x6f\xe6\x0f\xee\x7b\xe8\x00\x25\xe4\xa1\x38\x90\x18\xee\x2e\x6a\x2b\x0d\x29\xe2\x57\xff\x5e\x4e\xaf\xcc\x7f\x9e\xb2\x73\xa7\x4a\x50\x59\x61\x87\x70\x49\xc8\xd0\x67\x54\x65\xaa\xe5\x2d\x70\x8a\x0a\xc1\x81\xfc\xe0\x12\x74\xe4\x10\x87\xde\x66\x7e\xfa\x33\xaf\xb4\x7d\x3a\x8e\xce\xa8\xc0\x71\xa6\x33\x88\x03\xa1\xb5\x2c\xa0\xb2\x60\x6a\xf3\x33\x90\xb7\x01\xc1\x81\x9b\x27\xed\x31\xea\x99\xa1\xec\x8a\x6a\xf7\x8d\x0a\x1a\xd7\x7a\x8b\x6f\xcc\x69\xa4\xef\xe5\xc7\xef\xba\xbb\x3d\xa5\xa9\xf5\x8e\x01\xf6\x65\x50\x1c\xc8\xec\x4d\xdb\xe4\xd0\xdc\x72\x1d\x93\xd5\xde\x2b\xf9\xe4\x8e\x09\x93\x8e\x3b\x9e\x8e\xbf\x4f\xf7\x52\xf9\xd2\x4f\x34\x9e\xfc\x99\xcf\x87\x99\x85\xe2\x40\x4e\xf0\x94\x77\xf0\x7a\x28\x65\x8c\xcb\xca\x82\x25\x79\xbc\xec\xae\x67\x37\xc1\x97\x73\xcc\xef\xaa\xac\xbe\x71\xdf\x18\x4b\xfc\xf7\x27\x98\x18\xa0\x96\x2f\x78\x31\x64\xb5\x2e\xf7\x8b\x3d\x54\xf4\xe8\x42\x2a\x6e\xc9\xbd\xd6\x70\xf8\x90\xa7\x64\x23\x67\x9b\x29\x71\xad\x36\x37\x4c\xb5\xe4\xf2\x09\x36\x61\x28\x0e\x24\x86\x9f\x11\xbe\x09\x71\x3f\x4d\xa5\x09\xb7\x71\x91\x65\xda\x05\x7a\x3a\x68\xfd\x5c\xc7\x95\x65\x76\x37\x78\x7e\xdd\xbc\x3a\x18\xe0\x86\x99\x85\xe2\x40\x7e\xd8\xea\x09\x1a\xa4\x61\x9b\x0e\x33\xd6\x3b\xe0\xa8\x75\x9a\xe5\xfa\x39\xa2\xfa\xdc\xcb\xce\x98\xeb\xb7\x40\xa0\x9a\x5b\x33\x95\x0b\xcc\x2c\x14\x07\x3e\xe6\xfb\xd2\x19\x9a\x12\x96\x74\x57\x78\xa0\x75\xd2\x3d\x04\x97\xf1\x63\x17\xee\x56\xd9\x9b\xe1\x42\x53\x49\xd4\xd3\xf3\x49\xc1\x41\xe0\x98\x0f\x82\x03\xa7\x1c\xfd\x29\xdf\x43\xf6\x20\xe9\x75\xd4\x95\x32\x92\x8f\x7b\x11\x93\x3a\xfb\x5c\x68\xb0\xd3\xe2\x9a\xe6\xdb\x51\xae\xea\x16\x3e\x90\xd6\x06\xc5\x81\x9c\x90\xae\xfa\xcb\x94\x8b\x49\x51\x8d\xdd\xb8\xcd\x28\x82\x63\x2c\x5a\xe8\x9c\x47\xfc\x68\xff\x05\x42\x7c\xb7\x96\xdb\xdb\xbd\x3a\x1c\x98\x18\xa0\x36\x16\xf0\x62\x98\x9b\xf0\xf9\xac\x58\xf4\xfc\x1a\x5d\x0d\xb9\x01\x87\xe3\xe5\xa5\x7a\xc1\x3f\x2f\x4f\xf3\xf7\x63\x9c\xb9\xc8\xd2\x01\x5c\x45\x88\xb0\x09\x43\x71\xe0\x7a\x37\x4f\x7d\xcd\x5f\x69\x7c\x0d\x35\x20\x39\x89\x2c\x4c\xaf\x31\x0e\x65\x55\x62\xab\xaf\x88\x7c\x9f\xd5\x2a\x1c\x9c\x6f\xf5\x7c\x03\x66\x16\x8a\x03\xf9\x01\x61\x17\x43\xb4\x85\x32\x42\x1a\x15\xbb\x96\x9a\x45\xae\xee\x29\x46\x6e\x8e\xeb\xa1\x5b\x47\x8e\xc0\x60\x20\xe2\x54\x57\x3f\x50\xbc\x17\x8a\x03\x39\xa1\x47\x3f\x09\x65\x7a\xb8\xa8\xae\x5d\x5e\x50\xb1\x72\xdb\x42\xa9\xee\x69\x58\x87\xd7\x48\x54\x0d\x45\xf3\x6a\xdb\xd2\x5e\xb1\x24\x90\xfd\x0c\xc1\x81\xcc\xe2\xda\x6d\xeb\xea\x88\xef\xcb\x31\xa1\xf2\x3b\x4b\x57\x96\xac\xa0\x38\x28\x74\x88\x77\x58\x8c\x58\x71\xfb\x11\x0f\x73\x79\x03\xb3\x85\xe2\x40\x4e\x30\x58\x3d\xd5\x52\x41\x73\xfd\x18\x97\xfc\x05\x35\xba\xa8\xc7\x5d\x61\xd1\x5a\x1e\x5f\x41\x6d\x4b\x00\x3b\x46\xd6\xe9\xcf\x21\x90\x28\x06\xb5\xe5\x83\x17\x03\x0f\x27\xe6\xc3\x54\xaf\x56\x8d\x07\x67\xdd\xbf\x0a\x5c\x3c\x16\x83\x3b\x9a\xc6\xf7\x5d\x0b\x75\xd4\x86\x27\xb5\xa4\x3f\xc4\x03\xa9\xb4\x50\x1c\x48\x0c\xde\x7a\x77\xee\xa7\x87\xf5\x89\x84\xae\x1c\xff\x9b\x70\x62\xde\xf5\xdb\x64\xd9\xe4\x9f\x23\xb2\xd6\xbf\xc8\xc4\x61\x97\x78\x93\x0a\x33\x0b\xc5\x81\xfc\x50\xad\xa5\x8b\x39\x66\x50\x49\xab\xec\x47\xe0\x9e\xd0\xec\xdd\xbf\x7d\xf7\xca\x62\xf0\xcd\x89\x99\xe4\xe8\x59\xc8\xe6\xd2\xca\x30\xcc\x2c\x14\x07\x72\x42\x62\xd5\x0e\x29\x8b\x4f\xcf\xec\xe1\xfc\x8e\x63\xf5\x26\x8f\x6c\x3d\x4b\x1e\xe3\x2e\x89\x85\xf3\xca\x3c\x83\xed\x95\xd0\x3e\x3a\x90\xe3\x08\xc1\x81\xcc\x22\x3a\xab\x4f\x15\x0a\x27\x87\x3e\x7d\x42\x26\x4d\x68\x24\xb7\xda\x59\x18\xcf\xbc\x24\xd9\x92\xb5\xcc\x6a\x3f\xef\xe1\x8f\x1e\x0d\x33\x0b\xc5\x81\x9c\x80\xa5\xda\x89\x74\x80\x97\xc6\x23\x21\xb5\x2b\xe6\xb5\x22\x15\x96\x5c\xa6\x31\xe5\xe5\xad\xf9\x57\x49\xec\x53\x04\x7f\xf0\xa3\x16\x98\x18\xa0\x36\xe3\xff\xa5\x0b\x69\x8d\x27\xb7\x4c\x5b\xca\xab\x19\xed\x85\xb8\x02\x4d\x4a\x14\xfd\xbc\x80\x93\x76\x24\x9e\x17\xd5\x56\x88\xde\x7a\xfd\xca\x40\x4b\x10\x28\x0e\x24\x06\x2f\x04\x81\x5c\xbe\xc1\x11\x45\x63\x72\xb2\x98\xef\xd6\xf9\xe3\x2a\x62\x25\x4b\x86\xa7\x57\xcf\x22\x66\x2c\x9c\xb1\xb3\x49\x80\xfe\x30\x50\x1c\xc8\x0f\x98\xd9\xd8\x6d\x61\x9f\xb4\xfe\x89\xd3\xdb\x53\xfa\x71\x6f\xd4\xf8\xb5\xad\x5c\x2d\xbd\x1d\xb0\xee\x79\x9d\x66\x60\xb8\xda\x0b\xe4\xe1\x41\x71\xe0\x7a\xcb\x5e\xc9\xe9\x91\x73\x33\x24\xe2\x31\xe7\xd1\x77\x3c\x49\xe4\x31\xd2\x54\x76\x83\x0f\x1b\x47\x69\xda\x35\x9e\xd1\x67\xd2\x72\x01\x49\x3c\x10\x1c\xf8\x16\xfd\xaf\x26\x9b\x71\x27\xa6\x41\x9e\x54\x12\xcf\x11\xcf\xf3\xc8\x37\x77\x16\x66\x18\xed\xd8\x84\xe9\xc3\x1f\xbb\x09\x85\x49\x00\xd9\x72\x50\x1c\xb8\x2c\x7f\xc4\x43\xe9\xb8\xec\x93\xeb\x8b\x93\x1b\x96\x4a\xdd\x4f\xa6\x1f\x77\x50\xe3\x70\xda\x26\xd1\x9d\x69\x89\x68\xcb\x82\x1b\xef\xc0\xc4\x00\xf5\x99\x04\x2f\x86\x08\x33\xb4\xed\xd5\x1e\xd5\xdd\x4e\x66\x29\xfb\x9d\xf1\xb8\x14\x0b\xf2\x66\x0d\x4f\xaf\xe8\x6c\xee\x8d\xa5\x67\x05\xb8\x68\xc0\xbd\x74\x28\x0e\x24\x86\xb7\x8b\xcb\xbc\x72\x77\xbb\xf7\xa4\x2e\xdd\xe3\x0a\xd9\x1b\xf3\xf9\x33\x96\xd4\xc5\x54\x10\x68\xbd\x6a\x7f\xa2\xb9\x32\xd2\x01\xb9\x9e\x50\x1c\xc8\x0f\x25\x33\xea\x78\x5f\x2a\xb8\x3c\x4a\x52\x92\xee\x19\xe0\xf7\xa6\x4e\x9b\x85\x32\xe0\xed\x63\x19\x10\x16\x63\xb7\x45\x7c\x09\x6e\x84\x99\x85\xe2\x40\x4e\xb8\xe7\xee\xd7\x5c\xc2\x2e\x59\x95\x90\x29\xac\xe1\xb8\x34\x25\xc3\x6d\x64\x78\x86\x68\x4d\x18\xd4\x1d\xb4\x44\x6d\xae\x2c\x05\x54\x55\x85\xe2\x40\x66\x7b\xdf\xa2\x89\x65\xa7\x65\x3e\x50\x22\x7f\x2f\xae\x41\xcf\x1c\x23\xa0\x1e\x6f\x6e\xe1\xbb\xf2\x25\x24\x21\xb8\xa6\x9c\xd0\x08\xb8\x53\x05\xc5\x81\x9c\xa0\x6f\xbd\x6f\x8d\xa4\x55\xe0\x88\x7b\x12\x74\x82\xcb\x32\xf3\x3b\xd5\xcd\x37\x59\x4f\x3a\xd6\xfe\x09\x39\xcd\x64\x9b\xa5\x97\x28\x4c\x0c\x50\x1f\xb0\xf0\x62\xf0\xff\x29\x90\x12\x9b\x8b\xf9\x4f\x4f\xf7\x5c\xeb\xe0\xd1\xda\xe9\xc8\x88\x44\x72\xa5\x60\xa9\xf9\x97\x07\xfa\x5c\xff\x3a\x9c\x80\x0d\x24\x14\x07\x12\xc3\x54\x7c\x39\x02\x72\xc1\x3f\x76\xd2\xb4\x31\x53\x04\xbb\x5f\xf9\xcf\xb2\x75\x94\xf1\x4b\x85\xac\x33\xc3\x59\xed\x17\x7c\x52\x80\x6a\x6b\x50\x1c\xc8\x0f\x5d\xb5\x0c\x82\x98\x9a\xc6\x66\x22\xe8\x14\x6c\x9f\xd5\xac\xdb\x24\x62\xfa\x37\x28\x25\x0f\xb4\xab\xae\x2c\xcf\xf4\x5e\x22\xb9\xc3\xcc\x42\x71\x20\x27\xf0\x3a\xaf\x67\xdd\xdf\xcb\x37\xa5\x0d\xff\xb0\x73\xea\x73\x78\xd8\x54\x37\x71\xa0\x9d\xa7\xfa\xa3\xba\xdf\x33\xed\x4d\xe3\xf1\x09\xcc\x2c\x14\x07\x32\x1b\xf2\x6f\x74\x07\xd9\x60\x9e\xd3\xd5\x31\xcd\x8e\x23\x54\xf1\xa9\xed\x19\x31\xd1\x15\xf2\xd2\xc1\xfa\x8d\xd3\x06\x8d\x04\xca\x7d\x98\x59\x28\x0e\x5c\x95\x47\x40\x40\x51\x74\x86\xc6\x50\xb9\x90\x9d\xf5\xd8\xfb\xb3\xc1\x4d\xd3\xb8\xbf\xcc\x1f\x44\x1b\x5e\x41\xe6\x1a\x8d\x20\x42\x79\x20\x34\x08\x75\xa8\x08\xeb\x35\x08\x17\x1a\x94\xb6\x33\x8a\x5c\xac\x5d\x46\x22\x75\xc5\xd9\x9e\x11\x11\x32\xe0\xec\x36\x51\xbf\x5a\xe3\xa0\x10\x52\x8c\xee\xe2\xdc\xbb\xf4\xbe\xfd\xd1\x0b\x5c\x68\x90\x23\xe2\x9f\xe2\x30\x69\x61\xe7\xf2\x03\xff\xe1\xd2\xbc\x2f\x16\x2c\x14\x1c\xc5\xdc\xad\x33\x18\x56\xa1\xd9\x28\xe4\xc7\x9f\x9f\xfc\x6f\x8e\x5e\xa0\x7e\x18\xfc\xf3\xf1\x47\x81\xa1\xd4\x58\x86\x6d\x41\x25\xa0\x52\xca\x61\x3d\x6e\xed\x37\x0b\xe9\x40\xa8\xe7\x9b\x47\x95\x3f\xb2\xc3\x3f\x2f\xf7\x7f\x84\xfd\x87\x50\x1c\xe8\xf9\x78\xc9\x14\x33\x17\x19\x69\xb9\x7f\x7a\x96\x34\xf7\x63\x2b\x71\x6b\xc2\x57\xcd\xca\x7d\xeb\x59\x72\xee\x13\xd7\x27\x81\x4e\xa6\xc5\x30\xb3\x50\x1c\x48\x1a\x7f\x82\x34\xbc\x86\x28\x1c\x79\xf7\xb6\x3d\xda\x7d\x48\x8c\x43\x91\x70\xbc\xc3\xeb\x87\xdf\x75\x1c\x30\x10\x10\x74\xf6\x36\x00\x37\x13\xa0\x38\xf0\x0d\xab\x59\x4d\xac\xc8\x72\xbe\xb8\x4c\x92\x84\x15\x39\xd4\x84\xf4\x10\xb1\xea\x30\xd1\xc9\x6f\x5c\x4b\x24\x9d\x1f\x11\x77\xb3\xa4\x81\xb3\x01\x08\x0e\xdc\xad\x2d\x24\x76\x98\x74\x06\x31\xac\x28\xe5\x49\xb8\x1c\xca\xbb\xbf\x77\xa3\xc8\x53\x9e\x2a\xa2\xa2\xb7\x64\x5d\x7d\x19\x8f\x15\x07\xae\x74\x42\x71\xe0\x0b\xa8\xbe\x4f\x2d\xa2\x91\x8f\x49\xe3\x34\xe4\x7c\xc7\x5a\x8a\x78\xe8\x3e\x4c\xfa\x52\x3e\x18\x23\x79\xf1\x83\xe2\x0b\xdd\xec\xb8\x15\x90\x62\x0d\x21\xb9\xff\x12\x0d\x12\x6b\x70\xd3\xfb\x86\xff\x4d\x33\xb4\xe4\x0d\xc3\xab\x38\xc3\xca\x4b\xf9\xf2\xd5\x51\xb3\x32\x41\xf3\xa2\x24\xe9\xbf\x3f\x81\x0b\xc9\x50\x1c\xb8\x63\x83\x95\xe2\xd2\x73\xe5\xc9\x14\xfe\xdf\xdd\x04\x83\xea\x6a\x17\x2b\x5a\xaa\xd8\x79\x1c\xc2\x53\xce\xf1\x6f\x29\x75\xc2\x2c\x81\xef\x36\x28\x0e\xe4\x87\x8a\x17\x7b\x7d\xd8\x13\xe7\xaa\x3f\x62\x5a\x30\xd6\x89\x15\xf9\x19\x45\x7e\xef\x5a\xd6\x1c\xde\xc1\x3d\xfb\xea\xf5\x35\x0e\x0f\xa8\x7a\x03\xc5\x81\xcf\x9f\x16\x5c\xbe\x1d\xa7\xda\x6a\x9e\x25\xa7\x06\x71\xd6\xa6\xc6\x10\x14\x17\x17\x2b\x51\xef\x52\x96\xaa\xb8\xac\xa1\x16\xe3\x00\xdd\x37\xa1\x38\x70\x46\x66\x9d\x1f\xbf\x9c\xe2\xdf\xb6\x57\x2a\x3a\x05\xc2\xcc\x01\x6a\x08\xc9\xd8\x2f\xbd\x55\xe3\x65\x47\x88\xfd\x38\x4c\xa8\x26\x81\xa2\xce\x50\x1c\xc8\x09\x12\x1f\xf2\x89\xee\xe9\xea\xf2\xfb\x73\x09\x61\x22\xf0\x3a\xad\x27\x1b\xd5\xa3\x1e\x1d\x29\xec\x5e\x47\xaa\xe9\x7e\xa9\xd7\xc7\x84\x89\x01\x2a\x18\x04\x2f\x06\xa3\x72\x44\xc4\x4a\xa2\x94\x17\xa8\xd9\x99\x11\x1a\x72\x81\x83\x8d\xa8\x76\x1d\x64\xe3\x5c\x23\x15\x7f\xc8\x46\xa8\x73\xc6\x00\x3f\x40\x71\xe0\x7c\x8d\x6a\x21\xdb\x96\x22\x34\x34\x6e\x03\x52\x7d\x5c\x1c\x4e\x7f\x5b\xb4\x3b\x73\x5b\xcf\xf6\x19\x71\x6a\x4a\xbe\xd8\xbf\x1d\xa4\x07\xf2\x35\x20\x38\x70\x06\xfb\x90\x87\x66\xc3\xf0\xe8\xa7\x14\xe2\x17\x09\x4e\x94\x8e\xaf\x7f\x38\x88\x2f\x3f\xc6\x41\x65\xb0\xc4\xc8\x3b\xf1\xb3\xde\x02\x12\x0a\xa0\x38\x70\x17\x52\xad\x31\xaa\xe3\x1c\x79\xda\x1d\x4c\x22\xb1\xe8\xc2\x88\x66\x99\x3e\x0e\x8d\x47\x05\x94\xfd\xe4\x19\xa2\xa7\x9d\x99\x54\x5d\x30\xb3\x50\x1c\xc8\x6c\xe0\xf0\xa7\x21\x72\xf3\x8d\xbd\xde\x1d\xc6\x29\xc3\xdc\xd7\x8e\x69\x04\x39\x16\xdf\x05\x83\xcd\xf0\x6e\x82\xfb\x56\xe6\xca\x17\x80\xd0\xe0\xd9\xf9\x00\xda\xce\x77\xc2\x46\xe2\xab\x9d\x0b\xdd\xa8\x65\x39\xb6\xf1\x32\x95\xb2\x8b\xaf\x11\x91\x91\x3c\x2b\xf1\xca\x59\xff\x4f\x41\xd1\xad\x49\x06\xb7\x7a\x5c\x4c\x62\xee\x0f\xbd\x5f\xf6\xde\x78\x1a\x72\x94\xbd\xd3\x27\x6e\x0c\x09\xee\x20\xee\x3f\x1b\x36\xd0\xdf\xfd\x0f\xb4\xf3\x83\x17\xf3\x58\x46\x62\x15\x6d\x38\x86\x4e\x78\x1d\xf2\x7c\xa2\xb0\x00\x05\xcd\x8b\x0c\x0c\xba\x1f\x57\x39\xb4\xc1\x24\x57\xa0\xd0\x20\x94\x65\xf8\xd0\x60\x13\xae\xed\x8f\x4f\x36\xf8\x0f\x56\x74\x19\xc6\x8f\x39\xea\xf5\xde\x2c\xa0\x98\x1c\x0f\x64\x7c\x7c\xdf\x58\x20\xc1\x33\x7b\xfe\xe5\x3f\xdf\xe9\x5f\xd4\xb6\x54\xac\x49\x6d\xda\xed\xde\xe0\x7f\x4e\xdc\xfd\x82\xfb\xaa\xe7\xd3\xb3\x99\x50\x4d\x75\xd5\xa1\x4c\xa7\x0b\xbd\x6c\x20\x34\x08\x65\x13\xd6\x6b\x10\x1c\x1a\xac\xcb\xfd\xc0\x19\x2b\xca\x35\xf6\x4c\xed\xc8\x0e\x69\x40\x1c\x53\xab\xae\xc3\x2b\x6e\x66\x2c\xea\x22\xaf\x57\xe9\x3c\xec\xfc\xe7\xad\x57\xfb\x66\xb8\xd0\x20\x76\x37\x91\xc2\xf4\xe0\xb9\x53\xba\x1a\x22\x93\x60\x41\x2b\xe6\x97\x1c\x5a\xfd\x1c\x4d\xc3\x92\xb7\x1e\xaa\xab\x3f\xea\x50\x92\x6e\x3f\x24\x5c\x68\xf0\xf2\x7e\x06\x57\x6a\x48\xe4\x23\xe4\x1f\x52\x3c\x32\x03\x0e\x75\x61\xfe\x2b\xdd\xa6\x8d\xa6\x0e\xbf\xcd\xf8\x31\x8a\x7d\xe7\x6e\x5b\x96\x20\x54\xa2\x19\x2e\x34\x18\x5a\x7e\x45\x4d\xd7\x86\xb3\x42\x65\x3d\x8c\x45\x83\xdd\xb3\xc5\x15\x81\x88\xb2\x8c\x18\xcb\x7c\xd8\x8d\x65\x2d\x10\x73\xff\xce\xed\x87\x84\x0b\x0d\x9a\xfe\x91\x0f\x68\xea\x0a\x10\x0f\x1b\xc5\x17\x71\xfe\xf3\xac\xcc\x3b\x8a\x3c\x3d\xce\xc8\xf3\x24\xe4\x49\x8f\x97\xe7\xa4\xee\xed\x4b\x6d\x36\xc3\x85\x06\x83\x7e\x55\x8f\xd3\xec\x0b\x7d\x8d\xba\x37\xfe\x96\x50\x57\xee\x39\x0f\x6a\xec\x0b\x4b\x36\x87\x19\xb7\x9e\xc1\x6d\xb2\x4f\x42\x72\xb7\x1f\x12\x2e\x34\x68\xd9\x87\x85\x20\x9c\xf2\x7b\x7d\x26\x99\x9c\xd4\xe3\xe1\xe0\x07\xdc\x82\x81\x52\x4a\x53\xe4\x01\xea\x64\x5d\xdc\xda\xcf\xb2\x1d\xb7\x1f\x12\x2e\x34\x98\x8d\xbb\xdd\x61\x67\x20\xb9\x64\xfa\x57\x8e\x4b\xf6\xb0\x18\xef\x98\x3b\x2d\xe5\x22\x5e\xeb\x72\x22\xc5\xb2\x24\x1e\xfd\x05\xdb\xff\x66\x7f\x0a\xf5\x28\xfe\x97\xe2\x60\x4e\x09\x82\x8d\x3e\x41\x7f\xbe\xa3\x53\x71\x50\xea\x74\x0f\xc4\x6d\x74\x95\x89\x1e\x33\x44\xa5\xda\x66\xfd\x53\x8b\xed\x03\x32\xba\xa0\x38\xd0\x2a\x94\xfe\xe8\x54\x47\xf1\xdc\x3c\xee\x83\x40\x0f\xd3\x2a\xd5\x46\xc4\x87\x93\x97\xa4\x7e\x3e\xad\x4c\x0f\x4c\x1f\xa5\x3c\x49\xc9\xc1\x82\x99\x85\xe2\x40\xab\xd0\x51\x34\xb3\x7c\x7f\xb2\x7e\xad\xd0\x45\xb2\xa7\xca\xb1\x8d\x6c\x81\xed\x7e\xf6\xd6\xd4\xc8\x82\xce\x24\xe2\xcf\xc0\xc9\xd4\x08\x98\x59\x28\x2e\x40\x14\xf1\xff\xd9\xf6\xc6\x99\x67\xa4\xf8\xa1\xd5\x7b\xef\xd4\x7c\x0e\x1a\xa1\xfb\xa0\x50\x52\x60\xc9\x32\x3a\x80\x10\x14\xf7\x07\x8f\xad\x47\x19\xc8\xe8\x82\xe2\x40\x1d\x6f\x59\x29\x93\x4a\xf8\x94\x64\x8c\x77\xb4\xf3\xe6\x7e\x8d\xbd\x20\xfb\x13\xe0\xfb\xb7\xb3\xb1\x2c\x9b\xbe\xf9\xfd\xe7\x32\x3e\x7f\x1c\x98\x59\x28\x0e\xe4\x84\x3d\xb9\xd0\x8c\x31\xce\xd5\x8f\xb5\xab\xbf\x50\x89\x31\x93\x98\xd8\x23\x89\x8d\x11\x85\x97\xca\xc9\x25\x71\x66\x11\xa3\x5f\x03\x95\xe2\xa0\x5e\x92\xff\xa5\x31\x7a\xc4\xfa\x57\xab\xf0\x8e\x1f\x66\x6a\xeb\x8e\x97\xf4\xc6\xdf\xdf\xe6\x08\x0a\x54\x49\xec\x23\xee\xc7\xc4\xc6\xa6\x97\xa2\x03\x1f\x2b\x50\x1c\xf8\xb6\x12\x96\x92\x23\x46\xe2\xa1\xc2\x07\x49\xb1\xa1\xa8\x32\xc1\xcf\x9f\xef\x9f\x2d\x92\x1d\xf6\xc5\x4e\x25\x53\xe5\xb8\x71\xb9\x02\x8d\xca\xa0\x38\x90\x1f\x52\x49\xe6\x72\x5b\x69\x84\x0f\xd3\x83\x27\x66\x82\x7a\x89\x7b\xde\x49\xe0\x20\xbe\x0b\x98\x1e\x0d\xbb\x74\x23\x69\x75\xd3\x76\x85\x99\x85\xe2\x40\x62\xb8\xe7\xcf\xd9\xa7\x9f\x7c\x74\x2e\x56\xe1\xdd\x49\xaf\x66\x2b\xc6\x74\x4c\x1e\xea\xc5\x51\xae\xe2\xca\x98\x9a\x3f\x9d\xbf\xfa\x1d\x38\xd9\x81\xe0\x40\x62\xf0\xec\x72\xe2\x5b\x64\xf6\x56\x40\x61\xda\x20\x6a\x0b\x7e\x1c\xc0\x5a\x2a\x48\x90\x99\xf0\xbb\x5b\x7c\x7a\xb6\x9f\x9d\xb1\x0f\x68\x47\x04\xc5\x81\xab\x11\xc6\x76\x99\x79\xe8\x5c\x3b\x48\x75\x2e\x4a\x14\x30\xf4\xf1\xe2\x88\xff\x95\xa5\xdd\x41\xd3\xcc\x90\x29\xa0\x1c\xc0\x5b\x06\x32\x00\xa0\x96\xaf\xff\xd2\x85\x74\xe1\xc2\x76\xa8\x7c\xde\x8c\x4e\xe9\xf5\x05\x9a\x82\xc6\x82\x81\x96\xdf\x83\x80\xf3\xea\x01\xea\x45\xd4\xd1\x6f\x11\x66\x40\xb7\x27\x28\x0e\x24\x06\x69\x5c\xff\x13\x36\xdf\xc7\x4f\x89\x9c\x9e\xf8\xd8\xf1\x3f\x6a\x8b\x22\xe2\xeb\xa8\x3e\xfe\x56\x96\x8d\x8c\x87\x4b\xac\xc4\xf5\x0c\x66\x16\x8a\x03\xf9\xc1\xcb\x9d\xa1\xba\x79\x8e\xd4\x26\x78\x11\xd9\x6f\xcf\x8e\x7d\x26\x52\x93\x9d\x77\xe6\x5d\x57\x4f\xc0\xe9\x2a\x89\x48\xfc\x80\x04\x70\x94\x0c\xc1\x81\xc4\x60\x21\xb7\xc2\x1f\xbc\xd6\xc0\x51\x19\x1f\xb0\x8d\x6b\x66\x4b\x99\x8b\xf3\xeb\xe7\x7c\x62\xf5\x85\x6b\xca\x0a\x56\xe1\x35\x1e\x36\xcc\x2c\x14\x07\x12\xc3\xe9\x49\x0b\x63\x49\xb9\x3c\xe2\xee\x06\xd5\xdf\x16\x62\x33\x02\x49\x24\x7d\xa1\xab\x84\xc8\x50\x9c\x50\x47\x97\x81\x0d\xfc\xaf\x30\xb3\x50\x1c\xc8\x09\x67\x83\x4d\x3b\xe9\xbf\x7b\x4e\xab\xd8\x8f\xa8\x3a\x68\x45\xdf\x3f\x77\xeb\x37\xb5\x91\xed\x93\x7f\x8a\xfd\xbd\xc8\x37\xf9\xa3\x04\x4c\x0c\x50\x1b\x0b\x78\x31\xa0\xc6\x5b\xc7\xd7\x3c\x99\x3a\xc7\x11\xc6\x45\x0d\x9b\xbd\x1b\x35\x9b\xc8\xef\x34\xf0\x47\x88\x9d\x1c\xfb\xe0\x01\x4f\xa2\x0a\x70\x8a\x0a\xc5\x81\xc4\x10\xb6\x23\xfe\x3a\x05\x4b\xc9\x24\x94\xe1\x69\x27\x03\x91\x2a\xf2\x37\xb5\x74\x09\x12\x3e\x3a\x8e\xb7\x52\x04\xd7\x5c\xca\xea\xc0\xbf\x06\xc5\x81\xfc\x20\x36\xf1\x0b\xbb\xf0\xad\xb1\x6c\x0a\xef\x3d\x34\x8f\x17\x73\xab\xfe\xdb\xc7\x25\x7b\xaf\x36\x6c\x19\xc4\xaa\x10\xdc\x72\x4e\x81\xc4\x02\x28\x0e\x24\x86\x7f\xbc\x5a\xf2\x3f\xf4\x7d\x87\xee\x09\xa4\xca\x1e\xb5\x3d\xbd\x56\x71\x22\x12\x11\xee\xcd\x09\x9f\x79\x1d\x59\x22\xf1\xf0\x1d\xd0\x07\x0e\x8a\x03\x89\xc1\xfe\x5f\x94\xce\x0b\x05\xcd\x72\x8d\xa7\xe1\xb5\x76\xfa\xc1\x8d\x72\x16\x87\x26\x36\xa8\xe7\x88\xde\x36\x01\x75\xff\xc8\x19\x99\x80\x5b\x97\x10\x1c\xc8\x09\x28\xde\xbe\xa7\xb6\x16\x04\x3e\x9c\xf7\x0f\xec\xe9\xf1\x03\x9b\xbe\x7a\xcc\xd8\xdd\x9f\x55\xe9\xf1\xaa\x90\xce\xbb\xda\xdb\xf3\x82\x89\x01\x6a\xcb\x07\x2f\x86\x7d\x1a\x57\xca\xd8\xa9\xc4\xae\x43\xa1\xf8\x16\xbb\xe9\xaa\xe7\x4e\xd6\xb1\x02\x5e\x4a\x5b\xfc\x05\xb6\x11\x8f\xba\xbd\x39\x81\x4a\x03\x50\x1c\x48\x0c\xf7\xfe\xf0\x54\x0c\xda\xf0\xde\xdb\xda\x79\x8f\xf4\x24\xff\x75\xac\xc0\xa4\xdc\x75\x84\xb6\xe8\x66\x1a\xea\x12\x11\xb1\x78\x04\x1e\xf0\xe2\x85\xe0\xc0\x4d\x72\x96\x8c\xf2\x32\xa8\xf8\xdc\x7d\x1d\x15\x53\x3f\x67\xbd\x57\xb1\xde\x11\x9d\x2f\x4a\xff\x16\x43\x8b\xbf\x6b\xc4\xcb\x96\x09\x14\x46\x86\xe2\x40\x62\x08\x8a\xbe\x90\xbe\x72\x97\x35\x73\x7d\x63\xd4\xb7\x31\xf0\xe3\xe1\xf4\x89\x80\xad\x27\xf5\x1b\xfc\x2c\xe6\xf7\xc4\xdd\x61\xf7\x81\xab\xc8\x50\x1c\x78\x99\x28\x9e\x47\x1a\x74\xbe\x6a\xbb\xca\xcf\x33\x7b\xba\xb1\xfb\xe3\xdb\x56\x76\x54\xaf\x20\xf5\x0e\xd6\xec\x47\x73\x35\xc2\xaf\x15\xc0\x32\x01\xc1\x81\x9c\xb0\xaf\x7b\x62\x57\xc1\xa3\x7f\x46\xae\x54\x84\x89\x22\x46\x14\xc6\x9e\x1b\x95\xaa\x53\x3b\xf0\xc8\x92\x4e\x76\x3a\xfe\xa7\x79\x28\x4c\x0c\x50\x9b\xf1\xff\x52\xfc\x28\x76\x78\x78\x4d\xe2\xd9\xf1\xe1\xdd\x66\x8d\xf9\x91\xd3\x2a\x26\xd9\xa2\xea\x88\x25\xc6\xc9\xcf\xa4\xac\x42\x36\x98\xfa\x40\x59\x34\x28\x0e\x24\x06\x59\xcf\x20\x9a\x5c\xe6\x16\x72\xd4\x47\x29\x75\xb9\xeb\x91\x83\xda\x3b\x64\x0a\x5a\x59\x31\xa5\x8f\xea\xd9\xc7\x9d\x77\xf1\x80\x64\x44\x28\x0e\xe4\x07\xa1\x0d\x57\x34\xe7\xf2\x87\x81\x4f\x05\x9d\xc4\x9d\xd5\x4d\x6a\x30\xbd\x44\x08\xda\xb2\x43\x8a\x78\x19\x7a\x17\x85\xab\x38\x80\x26\x39\x50\x1c\x48\x0c\x98\x47\xcb\x64\xf1\xff\x38\x28\xaa\x74\x8f\xe6\xfe\xec\xf5\xda\x47\x34\xd9\x15\x34\xff\xa5\x4f\xc1\xaf\xb5\x58\x19\x69\x28\x13\x04\x22\x8e\x10\x1c\x48\x0c\x99\x5f\x9c\xd8\x4e\xee\x84\xc9\x95\xeb\xc9\xec\x29\x72\x2a\x0c\x7f\x0d\x49\x57\xf4\xac\x44\x7a\x88\x86\x97\x15\xae\x58\x37\xbf\x05\xf8\x16\x82\x03\x39\x81\xaf\x7c\x9e\x9c\x72\xac\xbd\xdb\xde\x47\xb7\xde\x90\xa4\x4e\x15\xbf\x71\xf6\x90\xa8\xdc\xa6\xec\x32\xfc\x91\x48\xc2\x90\x98\x2f\x4c\x0c\x50\x9f\x49\xf0\x62\xb8\xe0\x2f\x59\xb1\x08\xd4\x43\x56\x66\x91\x95\xa5\x08\xfd\xfb\xe5\xc7\xd5\x95\xe8\x4d\x60\x5d\x1e\x6a\x5f\x09\x6d\x7d\x11\x0a\xd0\xbd\x0f\x8a\x03\x89\xc1\x4d\xca\x5f\xb1\xde\xd5\xec\xbb\x96\xab\xd4\x3b\x26\xd6\xe2\x39\x39\xe1\x62\xae\xd5\xa7\xdf\xc8\xea\xf7\xb8\x7c\xf1\x82\x78\x81\xa8\x18\x14\x07\xf2\xc3\xec\x7b\xe4\xcf\x08\xe5\x4b\xe6\x74\x41\x01\x17\x8f\x74\x9f\xa5\xbf\xd3\x0c\xda\x2f\x6c\x6d\x69\x3d\xc6\xad\xee\x59\xdc\x18\x06\xc2\x36\x50\x1c\x48\x0c\x77\x84\x90\xb7\xac\xd3\xff\x65\xbb\x08\xe4\x93\x07\xc7\x7b\x09\x7f\x08\x74\x2f\xaf\xfe\x8e\xf1\x64\xa0\xe9\xbd\x71\x74\xa5\x76\x01\xcc\x2c\x14\x07\xde\x33\x50\xf8\xf0\x69\x55\x27\x97\xd4\xbb\xb8\x28\x44\x6e\xbc\xe5\x9f\x22\xb1\x7f\x36\xe7\x81\xa8\xa7\xe0\x7f\xe7\x93\x9b\x07\x2a\x0a\xb0\x67\x80\xe0\x40\x4e\x98\xeb\xdb\x27\xa0\xe3\x13\x13\xa5\xe3\xa1\xf3\x95\x75\xa5\x1f\x9a\x25\x4e\xff\xd8\x4a\xfd\xec\xfd\x5b\xa6\x27\x87\xf9\xe2\xcf\xcc\x60\x62\x80\xfa\x80\x85\x17\x03\x7f\x6c\xa3\xd8\x23\x2d\xc7\xa4\x5c\x54\x35\xb2\xb2\xea\x07\x2a\x4e\x4e\xc3\x7d\x8c\x67\xec\x2d\xec\x89\xfc\xe1\x31\x96\xe8\xc0\xfb\x1c\x8a\x03\x89\x81\xae\x86\xbf\x0a\x85\x5b\xc6\x07\xef\x24\xed\x81\x4c\xe1\xdb\x41\xb5\xa5\x72\x72\x07\x8f\x2a\xf6\x5d\xf4\x7a\xa9\x1a\xd9\x7c\xe0\x8b\x15\x8a\x03\xf9\x61\x59\x5e\xa8\x06\xc7\x03\x35\x43\x0b\xcf\x31\xc5\xde\xc9\xe1\xcd\x7b\xd1\x8a\xf9\xe4\xd5\x8e\xe5\x34\xfd\xdc\xb6\x1e\x1c\xea\xbf\x30\xb3\x50\x1c\x48\x0c\x8a\xab\xa6\x35\x2e\xab\xc6\xb3\xa9\x92\x2e\xdb\x29\xfb\x0c\x8b\x59\xce\xc3\x47\x4e\xca\x3e\xe2\x6d\x01\xcb\xc7\xeb\x47\x47\x40\x7c\x14\x8a\x03\x89\xe1\x9c\x72\x52\xcc\x53\x4f\x25\xb6\xb5\xe8\xf7\x24\x8d\xb9\x06\xa6\xe4\xbc\xea\xdd\xeb\x40\x89\x00\xa1\x55\x5b\x5f\xf5\xec\x21\x1b\x20\xe1\x15\x82\x03\x39\x81\x6e\xe6\xf8\x86\x00\xef\x32\xc4\x4d\xae\x33\x7a\x5c\x80\x48\xe0\x5a\x63\xdc\xe7\x27\xd5\x40\x1b\x72\x1a\xd7\x23\x11\x26\x54\x4e\x20\x34\x08\x75\xa8\x08\xeb\x35\x08\x17\x1a\x3c\xa6\xed\x35\x23\x77\xcc\x0a\x4b\xa1\x96\x6f\xb6\x19\x39\xa5\xe8\xfe\xbc\xae\x39\x4e\xa6\x9d\xd9\xd7\x87\xda\x79\xf9\xc7\x2e\xe5\xf6\x47\x2f\x70\xa1\xc1\xc1\x67\xf1\x4b\x8d\x12\x1e\x74\x17\xb5\x1e\x25\xa4\xa9\xd5\x83\xde\x16\x14\x48\xbc\xa8\x44\xaf\x99\xc5\x9e\xe7\x5e\x47\x15\x8d\xff\x6f\x8e\x5e\xa0\x7e\x18\xfc\xf3\x71\xf0\x2f\xe1\xf0\x1e\xdd\x17\xdf\x06\xcd\x43\x94\x8e\x6c\xf6\x2e\x22\xaf\x1b\xac\xb8\x79\x9d\x41\x97\xcb\x32\xd1\x84\x8f\x2b\x40\x0f\x04\x28\x0e\xf4\x7c\x1c\x3e\xa5\x39\x18\xb5\xac\xfd\x8b\x71\x21\xab\x55\x5b\x21\xaf\x26\xab\x73\xff\xfe\xdb\x16\x35\x8d\xe2\xe2\xc2\x98\x78\x96\x54\x40\x1a\x50\x1c\xb8\x65\xf3\x12\x5e\x44\x02\xdd\xda\xce\x82\x41\x54\x11\x61\x37\xb3\xe8\x7d\xda\x80\x0a\x25\x2e\xf7\xf1\xf3\x61\xee\x2a\x2a\xf3\x7b\x40\x33\x3c\x28\x0e\xf4\x7c\x0c\x5f\x29\x17\x99\xa5\x19\xa0\x31\xd5\xae\x1c\x8e\x0c\xdf\x6f\xaf\xe5\xc3\x47\x14\xc3\xcf\x5e\xa0\xb9\x74\xcc\x6e\x2f\xbb\x00\x3a\x23\x42\x71\xa0\xe7\x63\xca\xcd\x5b\xdc\xac\x7e\x59\x28\xf6\xa6\xdd\x76\x03\x7d\xf2\x6f\xaa\x31\xb6\xe6\xbd\x5f\x63\x4b\x5b\x1d\x11\x06\xe5\x2c\x71\xc0\xad\x6c\x28\x0e\x7c\x2b\xfb\x3d\x6b\x4c\x56\xa5\xc6\xc6\x73\x1f\xf6\xc6\x7e\x97\xc4\x7b\x3e\x2c\x9d\xc7\x3a\x18\x48\x81\xad\x1e\x48\x9c\x6c\x8c\x06\xe6\xb0\x97\x25\x94\xe4\xe0\xc5\xf0\xc2\x7e\xd1\xf0\xeb\xbd\x29\x37\x4c\xfc\x26\x4d\xc6\x6f\xd1\xf2\x0e\x3e\xa9\xf2\xec\xea\xac\x1b\x8c\xd1\x8d\x15\xee\x87\xb1\x40\xb0\x0d\x8a\x03\x89\x01\x01\xe5\x81\xbd\x6e\xe9\x3f\x63\xf4\x4f\x1b\xb4\x16\x93\xdf\xe8\x1b\x8a\xa4\x2d\x9a\xf0\x3b\x7b\x83\x5c\xa7\xaa\xdb\xc6\x7a\x49\x80\x4b\x92\x10\x1c\xb8\x2e\x7b\x2e\x11\x71\x39\xaa\x29\x4f\xa3\x01\x0f\xab\x4c\x62\x09\x9f\xab\x25\x06\xd5\xa1\xf2\x6b\x55\xde\xb9\xbe\xd8\x37\x0e\xda\x80\xc6\xa0\x38\x90\x18\xf6\xb1\xf9\xf4\xd5\x3f\xaa\x7a\xbc\x55\xe7\x91\xfb\xa5\xf6\x19\x3b\x6b\x81\xbf\x28\xaa\x93\x83\x14\x8f\xa3\xe4\x47\xf1\x3e\x29\x70\x3d\x03\x8a\x03\x89\xe1\xc2\xa2\x35\x9d\x68\x38\x3a\x41\x99\x1d\xd9\xe4\x7b\x8b\x56\xa9\xd2\x4d\x89\xcf\xc6\xd2\xaa\xc9\x1c\x75\x35\xd3\x1a\xaf\x21\x33\xb0\x2b\x81\xe0\x40\x4e\x78\xb9\x5e\xd5\xf6\x6f\xa1\x89\xd1\x0a\x9f\x20\xb5\xdb\x9c\x4c\x7b\xb8\x18\xa5\x33\x0c\x71\x81\x6c\xe7\x5a\x76\x93\xbc\x20\x2d\x1f\x26\x06\xa8\x60\x10\xbc\x18\x2e\x43\x58\x19\x7f\xcf\x13\x3c\xa7\xdc\xb9\x7c\xb7\xdd\xc3\x39\x27\xfc\x90\xd1\x97\x63\xfc\x53\xc0\x87\xea\xfc\xa3\x24\x25\x04\xa0\x44\x27\x14\x07\xce\x27\xce\x1e\xfc\xa3\xc3\x22\x4d\x9d\x84\xc5\x37\x8f\x3a\xe9\x33\x42\x78\xea\x1f\x6e\x3f\x52\x3f\x28\x22\x9c\x8f\xa7\xa1\x56\x70\x00\xe4\x13\x43\x70\x20\x3f\x68\x7f\xbf\x5e\x91\xee\x9b\x9a\x26\xee\x8a\x26\xcd\xcb\x52\x22\x0c\xd2\x0c\xf5\x77\x0c\xf6\x4b\xcc\x47\xfa\xb4\xe7\x62\xaf\x0b\x7c\xb2\x40\x71\x20\x31\x34\x28\x21\x1b\x3a\x7d\x35\x7d\x9a\x59\xe2\xfd\x0c\xf3\xc8\x59\xac\x0e\x7b\xa0\x25\x91\xa6\x79\x4e\xd7\xc4\x39\x83\x45\x29\xbe\x17\x66\x16\x8a\x03\x89\x21\xd2\xef\x9b\xf1\x96\xe2\x68\xdb\xfd\x0f\x2e\x24\x2e\xa7\x83\xd4\x6b\xb2\x17\x9e\xb3\x19\x5d\xa2\x87\xf9\x5a\xcf\x24\xf9\x06\xb2\x7c\xbd\xfe\xff\x5c\x32\xa7\x4f\x69\xd1\x1c\x75\x04\x21\x4d\xa3\x3c\x65\xd7\xcb\x86\x04\xb6\x49\x31\x79\xfa\x19\x6c\xed\xc4\xae\x3b\x8f\xca\xfb\xf1\xfc\xff\x3f\x2c\x1b\xff\x1f\xd0\xff\x5f\x00\x00\x00\xff\xff\xf3\x37\xf0\x5c\x67\x3f\x28\x00") + +func fixtures_assetsCarNerpanetCarBytes() ([]byte, error) { + return bindataRead( + _fixtures_assetsCarNerpanetCar, + "fixtures/_assets/car/nerpanet.car", + ) +} + +func fixtures_assetsCarNerpanetCar() (*asset, error) { + bytes, err := fixtures_assetsCarNerpanetCarBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "fixtures/_assets/car/nerpanet.car", size: 2637671, mode: os.FileMode(420), modTime: time.Unix(1633763138, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _fixtures_assetsProofParamsParametersJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\xd9\x49\x6f\x6a\x4b\x92\x07\xf0\xfd\xfb\x14\x57\x77\x5d\xb7\x95\x19\x39\x45\xbc\x1d\x60\x03\xc2\x80\x98\xc1\x6c\x4a\x39\x44\x9a\xe1\x31\x1e\xc0\x98\x56\x7d\xf7\x96\xab\x55\x6a\xa9\x7c\xb8\xad\x52\xbd\xeb\x76\xcb\x3b\x4b\x47\xb6\x7e\xe7\x9f\x11\x91\x71\xfe\xf3\xb7\x6f\xdf\xbe\x5f\x00\x7f\xec\x8f\xbb\x5d\xfe\xb1\xcb\x3f\x8a\xbd\x8f\x7c\x5a\x6e\xf8\x47\xf6\x7f\xfc\x11\x7c\x5c\xff\xd8\xf0\x71\xfd\x07\x9f\x8e\xcc\x3f\xf6\xbb\x82\x97\x69\xb7\xfd\xeb\xc2\x17\x0b\x3e\xfe\xc0\x1f\xe2\xfd\x47\x3a\x91\x82\xcc\x8a\x74\x50\x26\x11\x19\x30\x00\x80\xcc\xca\x90\x24\x1d\xa4\x92\x44\x09\x0c\x29\x14\x46\xcb\x14\x0d\x50\x0e\x42\x10\x09\xb2\x41\xfc\xc7\xde\x1f\xfd\xa6\xf8\xfe\xfb\xb7\xf7\xff\xe7\xdb\xb7\xef\x71\x99\xbe\xff\xfe\xed\x7b\x7f\x33\xb9\xae\xea\x83\xb7\xc5\xe6\xad\xef\xe7\x8f\xa7\xda\xc2\x6d\xd7\xe0\x43\x74\xed\x45\x7d\x7d\x5b\x6c\x07\x33\x7d\x8c\xcd\x43\xad\xb6\x5f\xae\x07\xdf\xff\xf2\xdf\x0f\xa7\xe5\x0b\x17\xa7\xf7\xe7\x9d\x95\x22\x50\x46\x08\x39\x22\x6a\x61\x82\xf3\xa8\x20\x58\x23\x23\x43\xb6\xff\x78\xa2\xe0\x78\xda\x1d\xff\x5a\x2c\x6f\xfc\xfd\xf7\x6f\x20\x34\xfe\xf6\xed\xdb\xdf\xfe\xf2\x35\x6c\x2e\xeb\x12\x97\x38\x34\xad\x79\x81\x33\x35\x4a\xa7\xf5\x63\x75\xdf\xac\xa4\xf1\xf3\x2a\x75\x1f\x0e\xb1\xed\xf2\xb4\x5f\x3f\xf5\x6f\x96\x36\xfb\xed\x19\x66\x1f\x5d\x04\x0b\x32\xf8\xfe\x27\x94\x0d\x94\x0c\x1b\x69\x38\x92\x0b\x18\x83\x23\x48\x9f\xe2\x12\x73\xd0\x59\x3a\x0c\x21\x38\x19\x33\x70\xcc\x31\x69\xf0\x31\x46\x36\x06\x03\x38\x49\xe4\x83\xce\xc1\x50\x0c\x0e\x33\x68\x54\x99\x41\x72\x56\x36\xd1\xfd\xcc\x8c\x97\x83\xab\x93\xe7\x6b\xde\x8c\x1f\x71\xa2\x9a\x54\x4c\x2b\x45\x65\xb6\xeb\x20\x3e\x0d\x34\xef\x64\xf5\xed\x72\x89\xf5\x2e\x8f\xda\x25\x99\x91\xde\x25\xed\x29\xa2\x37\x02\xbc\x26\xc7\x89\xc0\x1b\xad\xac\xf5\x59\xa9\x5c\x6e\x63\x94\x45\x27\x48\xc2\x17\x02\x2a\x0d\x4e\xae\x71\x4a\xab\xfa\x7e\x7a\xf2\x97\x5b\x7e\xbc\xcd\xf7\xad\x7c\x1b\xfa\x55\xa3\xfb\x9a\xdb\x7a\xb0\xaa\xcf\xa6\x95\x4b\x85\x46\xc3\xed\x68\xf2\x11\x47\x27\xcf\xe4\x4c\x62\x9d\x85\x94\x59\x0a\x99\x8d\x87\x8c\x36\xc9\xe4\x7d\xf0\x9f\x86\xa3\xd8\x0b\xa3\x01\x23\x25\x29\x2d\x52\x06\x65\x80\x62\x62\x05\x39\x29\xe1\x7d\x48\x46\x64\x97\x20\x92\xb2\xc6\x45\x99\x94\x35\x22\x44\xaf\x18\xd9\x13\xdf\x4f\x4f\x1c\x8e\x0e\x0f\xb1\x3e\x69\x37\x1a\x93\xe7\x9b\xdc\xae\x16\xe3\xb9\xab\xda\xbc\x7e\x3a\x55\xcf\x9b\xa2\x3d\x7e\xbd\xea\xed\x7a\x01\x30\xba\x0d\x3f\x02\x21\x44\x44\x61\x6d\x60\xb2\x18\x82\x31\xc2\x0b\xc3\x4a\xe4\x6c\x23\x68\xa9\x3e\xe3\x64\xfd\xdb\x36\xa5\xc1\x19\x8e\x6a\xb3\x3a\x2c\xf7\x8d\x8a\xca\x76\x73\x9e\xec\xec\xba\x19\x61\x3c\x18\x5e\x6d\xef\x36\xbf\x36\xc6\x87\xb3\x3b\xbf\xad\x7d\xd3\x3c\x8d\x3f\xba\xe4\x9c\x1c\x39\xc4\x64\xa5\x4e\xe0\x48\x92\x67\x13\x12\x24\xd2\xec\x63\xf8\x94\x4a\x6c\x44\x74\xca\x62\x62\x4f\x86\x14\x27\x41\x48\xec\x04\x39\x9d\x00\x05\x68\xce\x9e\x92\x34\x36\x19\x34\xc1\x31\x7b\x19\x18\x20\x00\x3b\xa3\xb2\x52\xf2\x27\x15\x87\x86\xd5\x5b\xab\x7b\x8c\xab\x41\xfd\x61\x59\x8f\xba\x11\x2b\xfb\x43\xaa\xec\xbb\xf6\x46\x33\xd7\xd9\x8f\x8f\xd6\x6e\x5a\xb0\xae\xb4\x7a\x25\x5d\x4a\x08\xe9\x24\xc7\xec\x94\xd2\xfc\xde\x0d\xb4\x72\x91\x94\xb0\xce\xfa\x8c\x50\x6e\x83\x0a\xd1\x8a\xaf\xc4\x53\x1a\x9b\xb0\x19\x77\xbc\x1a\x85\x30\x55\x33\xb3\xae\x2f\x1e\xaf\x85\x9d\xbe\xd4\xf4\x13\x4f\x47\x12\x9f\x97\x17\x3f\xd9\xcc\x1e\xd6\x55\x5b\xe9\x36\x4a\x68\x88\xdf\x0f\x51\x36\x36\x27\xaf\xc1\x39\xad\x58\x19\x61\x14\x27\x9f\x30\xc7\xcf\xa2\x01\xd2\xda\x99\x14\x0c\x28\xe7\x81\x51\x45\xc5\x06\x72\xb2\x11\x82\x50\x68\xc8\x4b\x54\x32\x69\xc3\x49\x60\xd4\x59\x99\x14\x32\x79\x14\x4a\x5a\xe3\x7f\xd2\xab\x52\xf7\xb1\x0d\x83\xd3\xa1\x6d\xa0\xd1\xef\x9e\x57\x78\xbe\xd9\xcd\x64\x65\xe6\x4a\x77\x27\xdb\xe0\x5b\xf2\xad\xf3\xb6\x90\xbb\xd9\xa9\x7a\xfd\xc8\x13\x35\x69\xa2\x10\x9c\xf5\xc2\x59\x40\xd4\x48\x36\x93\x45\xa5\x85\xca\xc6\xfc\x7f\xe1\x29\x4d\xce\x78\x39\x79\xae\xf5\xc7\x2f\x47\xfb\x2c\xd5\x7e\x5e\x3f\xa2\x8f\xd3\xfd\xb0\xa3\xaf\x97\xd1\x6c\x9c\xe2\xa5\xb1\xb9\xbe\x9d\x9b\xe1\x69\x51\xc4\x8f\x34\x4a\x27\x9d\x99\x7d\x4c\xe4\x43\xfe\x7b\xe5\x21\xce\x32\x04\x9d\x30\x27\x21\x3e\x89\xc6\x25\xa7\x28\x60\xcc\x56\x64\x19\x84\x13\xc4\xcc\x81\xd9\x39\x25\x18\xc8\x59\x54\xc6\x00\xeb\x60\x29\xfa\x60\x09\x35\x47\x01\x68\xac\x55\xd1\x38\xfc\x49\xcd\x99\xbc\xd4\x8a\x56\x7d\x30\x7b\x6a\x9f\xcf\xe3\xc5\x48\xf9\xce\xf3\xeb\xd3\xa4\xd1\xad\xd0\xf1\x81\x07\xf6\xa1\x76\x2c\x5c\xac\x30\x1e\x97\xd5\x51\x59\x9f\x72\xca\x90\xd6\x42\x69\xca\x8c\xd9\x78\x21\x2d\x3b\x43\x48\xa4\x82\xa3\x4f\x6b\xe4\xff\x36\x50\xf9\x94\x53\x51\x32\x87\xda\x74\xb7\x1a\x6e\x16\xc3\xc6\xe5\x92\xaf\x9b\xab\x7f\xae\xed\x3b\xbb\x59\x8f\xcc\xed\xb1\x4f\x45\xfb\x52\x6d\x34\xbb\xbe\xfb\x11\x27\x24\x88\xc9\x42\xb6\x26\x4a\x1f\x50\x67\x49\xd1\x83\x63\x72\xc1\x45\xa7\xe4\xa7\xe0\xfc\x9d\x47\x39\x97\x38\x59\x63\xa3\xcd\x06\x74\x96\x56\xa2\xb3\x22\xe4\xcc\x9a\x85\x97\xd1\xc8\x64\xbc\x13\x51\x9b\x77\xb8\xe4\x19\x3d\x38\x63\x8c\x53\x8a\x53\xbc\x9f\x1e\x3f\xde\xe4\xd8\x3a\xd9\xfd\xee\xb6\xc5\x6d\x3a\xc8\xd6\xa4\x7a\x6b\x0f\x56\x83\x56\x6a\x76\x46\xbd\xa4\xf3\xce\xe3\xf2\xd5\x14\xab\xea\xfc\x23\x10\xc4\xac\x89\x03\xd8\x2c\x33\x33\xe9\x88\xef\xaf\xc2\x2b\x12\x29\x05\x1d\xb1\x1c\x48\x69\x65\xc8\x29\x54\xf6\x4f\x3a\x60\x7f\x0a\x51\x69\x7e\x06\xb4\xa4\xa7\xb6\xba\x2c\x16\x95\xc3\xa8\xda\x58\xc9\xd0\xeb\xd5\x5c\xfb\xb2\xde\x9f\xae\xc7\x26\x0d\x2e\xd7\xd6\xb5\xdd\x95\x97\x4b\x51\x7d\x2c\xb9\x5e\x65\xe4\x68\x34\x68\x34\xc6\x62\xf6\x4a\x5b\x8c\xc2\x5a\xa6\xcc\x09\x21\x7c\x22\x8f\x31\xc4\x06\x65\x16\x00\x21\x68\xd6\x1c\x2d\x3b\x49\x6c\xac\x0a\x59\xb0\x00\xeb\x93\x4d\xac\x81\x8d\x8d\x12\x9d\xd4\x1e\xa2\x25\x08\x32\x20\x26\xf7\x93\x39\x39\x9d\xe2\x6d\xef\xf6\xfa\xf5\x18\x1e\x76\x79\xd3\x4c\x8d\xc5\x72\x79\xdd\xd2\xf2\x58\x89\x5d\xe7\x36\x13\xaa\x3c\x36\xe7\x55\x3f\x3a\xc9\xe5\x47\xa2\x84\x3a\x3b\xf2\xd2\x66\xd6\x82\x89\xc1\x78\x65\x19\xa4\x70\x21\xc8\xe0\xef\x94\xe7\xaf\x49\x54\x9a\xa0\x79\xed\x72\x7d\x8a\x4f\x3d\x72\x97\x87\xca\x1a\xbb\xd7\x82\x06\x32\x4f\x4f\x87\xfd\xaa\x7f\xac\x2c\x16\x79\xd6\xdb\xd5\x96\x72\xbb\x7e\xd8\xd5\x4b\xc6\xe5\x28\x80\xb4\xb2\x0e\x53\x92\x92\xd8\x12\xbb\xfc\x5e\x8a\x40\x30\xa2\xbc\x53\x9e\x7f\x01\x0f\xfc\x00\x0b\x8e\xb5\x10\x36\x58\x97\x89\x22\x67\x22\x11\x85\xd7\x2e\x19\x0d\x36\x06\xe7\x83\xf0\xc2\x27\x83\x39\x4a\x61\xa5\xd1\x2e\x64\x48\x80\x41\x50\xe2\x7c\x3f\x41\x5c\xe9\xea\xcb\xb9\xd2\x5d\xcc\x8a\x3a\x5e\x7b\xd0\xbe\x9a\x15\xb4\xed\x5b\x67\x98\x76\x2f\xed\xdb\x3e\x5e\x0e\xb5\xd6\x68\x31\x68\x3c\xc9\x92\xab\xa8\x42\x29\x82\x73\x28\x7c\x7c\x6f\x14\x14\x00\x3c\x3b\x91\x65\x26\x1d\x29\xdc\x19\x0d\x2d\x3a\x49\xda\x59\xa7\xec\x17\x22\x2a\x4d\xd0\x74\x82\xc7\xc3\xbc\x7d\x2d\xe4\xae\xdf\xa5\xd5\xb5\x3b\xdd\x6c\x47\xf2\x39\xbd\xb4\x5f\x6b\xb1\x88\x17\xd2\x93\xca\xe0\xb8\x68\x66\x39\x72\x1f\x79\x0c\x25\x08\x59\xa2\x71\x3e\x45\x43\x5e\x67\x81\x39\x66\xf0\xd9\x7b\x92\xf6\x4e\x0d\xfa\x25\x3c\xc1\x82\x20\xb4\x40\x49\x38\xd2\x96\x49\x00\x4a\x70\xec\x04\x90\xe1\x44\x64\x33\x2b\x4e\x60\x82\xc8\x94\x11\x39\x58\xf9\xce\x15\xb4\x42\xe3\xd5\x4f\xba\xd8\x64\x7d\x9c\x45\x39\x6c\xc7\xfd\x4b\x3c\xa7\x27\xd3\x02\xd3\x6c\x92\xea\x5f\x06\x74\xea\x16\x93\xc5\x64\xf4\xdc\xdc\x98\xf1\xdb\x66\x56\xb9\x95\x74\x31\xe9\x84\x27\xe9\x93\x09\x9e\x01\xd8\x5b\x99\x81\xbd\xb3\xd6\x2a\xa1\xe0\xce\xbd\xeb\x6b\x12\x95\xdf\xbd\x72\x7f\xd5\x7b\x70\x8f\xfb\xdb\x6a\x31\x6d\x6c\x2e\xd3\x4a\xf1\xd6\x85\x4d\x65\xae\x7b\xf1\x79\x51\x64\x75\x5e\x9d\x17\x63\xaa\x0d\xcf\xd5\xcd\x47\x1e\x9b\x94\x43\x92\x1a\x73\xb0\xda\xda\x24\x1c\xb3\x64\xd0\xc9\x02\xbd\xcf\xf6\xff\x1a\x4f\x71\xf2\x71\xcd\xe9\x7f\x98\x8e\xbc\xff\x63\x19\xfd\x69\xb9\xdb\xfe\xef\x53\x62\xb1\xf0\x60\xec\x3f\x7e\x27\x14\x24\x25\x15\x26\x00\x23\x2c\x47\x21\x10\x38\x39\x08\x90\x62\xf0\x12\x53\x96\xa8\x9d\x23\xa1\x59\x99\xe0\x33\x33\x42\x50\x8e\x54\x10\x16\x15\xfc\xa4\x24\x4d\x23\x77\x5e\xb6\xd3\xe7\xf6\x6e\xdf\x39\x77\x74\x65\xd7\xe8\x5c\x1a\x8f\xfe\xec\x4e\x5d\x36\xe3\x27\x54\xb3\xfa\xaa\x69\x26\x54\x95\x6e\x51\xb2\x1d\x53\x3a\x07\xa9\x14\x72\xcc\x3e\x8b\x6c\x08\x8c\xcd\x4a\xa4\xc4\x9a\x2c\xde\x59\x1d\x7e\x58\x72\x7c\x29\xaa\xd2\x60\xf9\x8d\x5f\xec\xeb\xb5\xe2\xd4\x19\x1f\x9a\x4b\x38\x34\x4e\x93\xdd\xc3\x76\x70\x2c\x66\x8b\x65\x42\x7b\x28\xf2\x65\xf7\x56\x1b\x3d\xb5\x0e\xcd\x63\x49\xef\x8f\xd2\x27\x26\x02\xf2\x89\xa5\x13\x08\x0a\xb3\x34\x46\x69\x25\xb4\xf6\x77\x2a\xf7\x2f\x65\xb2\xc1\x87\xac\x6d\x64\xa5\xb5\x67\x4d\x26\x19\x83\xec\x9c\x13\xde\xa0\x09\xa0\x10\x92\xd1\x19\xc0\xf8\x8c\x9c\x84\x22\x17\x30\xb0\x8b\x2a\xc7\xa4\x1d\xdc\x4f\xd4\x73\x75\x3f\x3a\xb9\xf6\xb4\x5b\x99\x1e\x65\x6b\x36\x5a\x4c\xcc\xe4\x3a\x73\xaf\x45\xbf\xde\x4e\xb2\xd7\x3c\x36\x9e\x27\xe1\x38\x96\x8f\xf3\x55\xad\xe4\x0c\x46\xe7\x0c\x39\x0e\x24\x7d\x20\x65\xa3\x8c\x9c\x75\xcc\x92\x38\x78\x19\xee\xac\x13\xcb\x6f\x22\x5f\xca\xab\xbc\xe3\x2d\x77\xdb\xf5\xa1\x09\x55\x3b\x9a\x2d\x2f\xb7\xea\xb0\xcf\xc3\xb7\xea\x75\xb7\xf2\xcb\x4a\x3d\xdc\x16\xab\xd3\xeb\xf3\xe0\x98\x5f\x13\x6e\x9b\x25\x53\xb7\x35\xd2\x51\xf2\x92\x72\x60\x23\x8d\x11\x0e\xac\xb3\xce\x65\x01\x08\x8a\xff\xaf\xac\x38\x26\x8b\xca\x6a\x34\x12\x7c\x90\xce\x9a\xec\x3d\x78\x93\xa5\x0e\x3e\x68\xcc\xd6\x59\xb6\x4a\x69\xeb\xb2\xf0\x1e\xbd\x4f\x3a\x18\x93\x62\x10\xd6\x40\x08\xf7\xb3\xd5\x9b\x55\x7a\xbd\x73\xff\x74\xee\xdf\xdc\xfc\xa6\x3a\xcd\x4e\xa5\xf3\x78\x2a\x9e\x5f\x0f\x1d\xb9\xa3\xa6\x8c\x45\xaf\xcd\xcb\xce\xb8\xff\x3a\x2f\xf3\x22\xb6\x12\x58\x33\x07\xe7\x05\x07\x32\xd6\x91\x47\xd4\x42\x67\xb2\xe2\x5f\xd8\xad\x7d\x29\xad\xd2\x64\x3d\xd7\xce\xcb\x7d\xfd\xed\x32\x99\xca\xc6\x6e\x95\x3a\xc7\xd5\x93\x6c\x6d\x3b\xbb\x30\x3b\x8d\xf4\x6d\x50\x9b\x17\xb2\xd6\xb8\xae\x96\xb7\x82\xa8\x64\x1f\x60\xd1\x05\x0e\xe4\x53\x48\x94\x7c\x60\xb0\xc6\x3b\x56\x16\x04\x4a\xc5\xfa\x33\xa4\xf0\x83\x14\x82\x57\xc6\x25\xc8\x10\x3d\xca\x14\xad\x0c\x41\x9b\xac\xbd\xb3\x80\xc2\x79\x4e\xcc\x32\x08\x6f\x54\x4e\x36\x6a\x76\x2e\x68\xeb\x85\x0c\x99\xb3\x43\xf8\xc9\x47\x57\xde\xbe\xec\x3b\x16\xf5\xac\xdd\xcf\x0d\x74\x46\x8f\x76\xbb\x6d\x71\x7b\x79\x7c\x81\xd0\xe7\x4a\x63\xec\xb7\xe6\x3c\x1b\x35\xc7\xfd\x5b\xab\xa4\x66\x79\x85\x28\x1c\x78\x23\x31\x66\x6d\x39\x24\x6b\x65\x36\x31\x6a\x4b\x42\xdc\xf9\x46\x74\xef\xee\xf2\xa5\xc4\xca\x77\x4d\xa4\x1e\x3b\xc7\xca\xc3\xac\xf2\x64\x6b\x6f\xcb\x61\x7e\xc4\xeb\x55\x9b\xbc\xee\xe4\x81\x3a\xdf\x9e\x1e\x7b\xb5\xcb\xbc\x26\xb7\xb0\xbe\x85\x92\x53\x18\x5d\xd0\xde\x47\x19\xb5\xc8\x29\x38\x0e\x08\x21\x2a\x63\x82\x96\x3e\xa5\x3b\x33\xc3\xaf\xd0\x82\x7f\xd2\x22\x9b\x65\xd0\x5e\xe8\x68\xa2\x91\xac\x9d\xa1\x10\x32\x80\x0e\x21\x02\x67\xe3\x35\x44\x27\x85\xc8\xf2\x7d\xae\xb0\xca\x49\x50\x59\x5a\x8f\xda\xa4\x94\xc3\x4f\x7a\xe2\xd0\xbd\xb1\x1d\x2c\xa1\x93\xeb\xb7\xda\x3a\x8e\x5b\xae\xde\xb7\xb7\xeb\xc3\xd3\xb9\x65\x5b\xb6\x8a\x6b\xd3\xeb\xba\xd7\xdb\x70\x40\x45\xc9\xc7\x6b\x89\x42\x66\xf4\xf6\xfd\x55\x89\x10\x39\x08\x11\x23\x38\x25\x75\x08\x26\xf2\x9d\x9e\xf8\xe7\xcf\xa5\xbf\x40\xac\x34\x5f\xbc\x18\x6e\x6a\xb6\xba\x38\xbe\x0c\xe6\x7e\xdd\x7b\x38\x79\xe0\xd7\x5d\x93\xb6\xbb\xa2\x7b\x4b\xab\xda\xa1\x3f\x98\x15\xdd\x7a\x77\xbc\x6e\x97\xec\x32\x3d\x12\xa2\x06\x03\x51\xe8\x08\x84\x49\x04\x15\x51\x86\x9c\x10\xb5\xb4\x77\x6a\xd7\x3f\x69\xfd\xf6\xb7\xdf\xfe\x2b\x00\x00\xff\xff\x9b\x45\x46\xd6\x29\x22\x00\x00") + +func fixtures_assetsProofParamsParametersJsonBytes() ([]byte, error) { + return bindataRead( + _fixtures_assetsProofParamsParametersJson, + "fixtures/_assets/proof-params/parameters.json", + ) +} + +func fixtures_assetsProofParamsParametersJson() (*asset, error) { + bytes, err := fixtures_assetsProofParamsParametersJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "fixtures/_assets/proof-params/parameters.json", size: 8745, mode: os.FileMode(420), modTime: time.Unix(1624501759, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _fixtures_assetsProofParamsSrsInnerProductJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xcb\x4d\x6b\x83\x30\x18\x00\xe0\x7b\x7e\xc5\x4b\xce\xcb\x30\x26\x92\xe8\x6d\x6c\x6c\x43\x18\x4c\xa8\xd0\x9e\x8a\xe6\x43\xd2\x0f\xad\x49\x2a\xc5\xe2\x7f\x2f\x52\x7a\x7f\x9e\x3b\x02\xc0\x53\x2a\x89\x75\x27\xe2\xfa\xde\x78\x72\xf1\x83\xbe\xaa\x48\x26\xfa\x1e\x7c\xc0\x05\xac\x06\x00\x2b\xa7\x71\x01\xb8\x3a\xeb\x91\xf3\xaf\x83\xaa\xfa\x6f\x5b\xb3\xff\x52\xe9\xad\x28\x79\xfe\xf3\x39\xaa\x7a\x17\x66\x4f\x37\xb7\xbf\xf6\x37\x7e\x1c\xa7\x8a\x75\xf8\xed\x99\xb5\xeb\x4c\x88\xeb\x6f\x4c\x9a\x30\x9a\x50\x26\x6d\xd6\x36\x92\xf2\x8c\x6a\x91\x32\x2b\x33\x69\x98\xc8\xc5\x6b\x04\xa3\xe2\xe0\xf7\xc1\xcd\x06\x17\x90\x20\x80\x05\x2d\xe8\x11\x00\x00\xff\xff\x9d\xcd\xc0\x04\xb0\x00\x00\x00") + +func fixtures_assetsProofParamsSrsInnerProductJsonBytes() ([]byte, error) { + return bindataRead( + _fixtures_assetsProofParamsSrsInnerProductJson, + "fixtures/_assets/proof-params/srs-inner-product.json", + ) +} + +func fixtures_assetsProofParamsSrsInnerProductJson() (*asset, error) { + bytes, err := fixtures_assetsProofParamsSrsInnerProductJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "fixtures/_assets/proof-params/srs-inner-product.json", size: 176, mode: os.FileMode(420), modTime: time.Unix(1626679099, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _fixtures_assetsArchDiagramMonopic = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x00\xf4\x10\x0b\xef\xff\x4d\x4f\x4e\x4f\x50\x49\x43\x01\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\x13\xed\x5d\xdf\x73\xdb\xb8\x11\xfe\x57\x3c\x7a\x6a\x67\xe8\x1c\x17\x3f\x89\xbc\x5d\x73\xf7\xd0\x69\x73\x97\x49\xd2\xb9\xce\x34\x19\x8d\x2c\xd1\xb6\x7a\xb2\xe8\x4a\x72\x72\xd7\x8c\xff\xf7\x82\xa4\xb0\x24\x65\xc1\x27\x90\x5a\x51\x95\x9c\x07\x87\xa6\x49\x10\x04\x81\xc5\xee\xb7\xdf\xee\x7e\x1b\x64\x57\xff\x4e\xc7\xab\xe5\xe0\xf5\xb7\xfc\xf0\x92\xcb\xfc\x68\x9c\xcd\x57\xe9\x7c\x35\xbc\x9a\xa5\xf3\x49\x3a\x19\xbc\x5e\x2d\x1e\xd2\x68\x70\x97\x4d\xd2\xd9\x70\x95\xfe\xb6\x1a\xbc\x2e\xae\x4e\x92\x81\x3d\x7b\xbf\x1c\x5e\x65\x8b\x49\xba\x18\x8e\xb3\x59\xb6\x18\xbc\x16\x4c\x27\x60\xe2\x38\x89\xa3\xc1\xf2\x76\x34\xc9\xbe\x0e\x57\xd3\xdf\xd2\x99\xbd\xcb\x5e\x3f\x5a\xad\x46\xe3\xdb\x91\x6d\x1b\xdb\xcd\x5b\x18\xff\x7a\xb3\xed\xfe\x85\xed\xdd\x68\x7e\xf3\x30\x1b\x2d\xd6\x4f\xb1\x7f\x8f\x06\xd7\x8b\xd1\x5d\x3a\x1c\xcd\xc7\xb7\xd9\x62\xb8\x48\xaf\x5d\x87\xa4\x7d\xc0\xba\x33\xc5\x23\x87\x57\x8b\xf2\xa9\x8d\x93\xb3\x65\x79\x72\x96\x8d\x7f\xcd\x5f\xef\x7a\x34\x5b\xda\x7e\x4c\xb2\x71\xad\x2d\xb0\x17\xdc\x4e\x27\x93\x74\x8e\x17\x8c\x57\xb7\x8b\xec\xe1\xe6\x16\x4f\x5c\x8d\x6c\xb7\xed\xa9\xf9\x64\xb8\xfa\xfd\xde\xbe\x10\x6b\x9c\x4b\xe7\xf9\x6b\xe2\xf8\xad\x46\x37\x83\xd7\xf6\x9d\xf2\x4b\x87\x53\x7b\x9a\x55\x03\x94\x5d\x5f\x2f\xd3\x7c\x5c\xe3\x28\x1e\xb8\xf7\x5b\x4e\xff\x6b\xdb\x1c\xf0\x38\x52\xf6\xdc\xf2\xe1\xca\x5e\x6c\x6f\xb5\x7d\xb4\x2f\xf0\xaf\xcf\x78\x33\x3e\xc7\xf5\x73\xfd\xfd\xb0\xd1\xcb\xa4\x68\xb5\x31\x08\x8b\xe5\x96\x91\x59\xad\x4f\xce\xed\xe3\xed\xd1\x45\xf3\xdf\xbb\xd9\xc3\xdd\xd5\x74\x7e\x83\x1d\x1c\x67\x8b\x79\xfe\x45\xa0\x7a\x66\xd1\xce\xd2\x7d\x8f\xbc\xdf\xd9\x62\x7a\x33\xb5\x83\x38\x10\x26\xba\x64\x80\x37\x6f\xbc\xb2\x6b\x60\xcb\x24\x68\x7e\xd1\x75\x17\xd7\xef\x3e\xcd\xef\x5a\x4e\x57\xbf\x17\xf3\xe2\x3e\xb3\x87\xd3\x6c\xee\xc6\xa8\xec\x45\xfe\xcc\xe2\x80\xb9\x03\xee\x0e\x84\x3b\x90\x83\xcf\xf8\xa0\xc9\x68\x79\x5b\x0d\xea\xb7\xc1\x7d\xf1\xd9\x1e\x8a\x9f\x99\xfd\xf9\xb8\x39\x6a\xb3\xc6\x50\xe6\xb7\xe3\xb7\x28\x3f\x59\x39\x3b\x44\xfe\x11\x17\xd7\xa3\x71\x3a\xb4\x1d\xdd\x9c\x1e\xcd\xb7\x74\x4d\xd6\x66\x58\xb5\x86\xf2\xcf\x33\x4c\x27\xd3\x55\xed\xa3\xaf\xc7\xe3\x0f\x86\x0f\xbf\x8c\x7e\xf2\xe9\xd7\x2b\xe5\xe9\x8a\x6b\x76\xf4\xb1\x1c\x30\xe0\x22\x1f\x1a\x9c\xcb\x90\x6c\x5b\x40\xee\x99\xf6\x42\x2b\x36\x86\xeb\x6f\x5c\x4e\xde\xe2\xcc\x7d\x66\x3f\x60\x31\x9b\x1f\xd7\x0d\x33\x3b\x69\xec\xf5\xcb\xaf\x69\x5a\x8e\xfb\x74\x6e\xa7\xc9\x70\x96\x5e\xaf\x8a\x5f\xdd\x27\x2e\x66\xdd\xd3\x27\x96\x57\xaf\xb2\xf2\xde\x2d\xa3\x31\x9a\x4d\x6f\xe6\x77\x45\x2f\x20\x97\x69\x5f\xd2\xf2\x17\x7c\x92\x9d\xae\xb7\xf8\xfb\x74\x92\xa2\xdc\x29\x3f\xd3\xe6\xa2\xc6\xc5\xac\x5d\x03\x57\xd9\x6a\x95\xdd\x95\x4b\xbd\x14\x96\xef\xd3\xd5\x62\x9a\x7e\x19\xcd\x2e\xbe\x7f\xf7\xd7\xc1\xfa\x45\x15\xe4\xef\xf9\xf4\x0d\x26\xd3\x45\xb1\x2e\xea\x92\x02\x20\x7f\xf1\x69\xde\xcf\x81\x54\x11\x80\x6b\x84\x41\x21\xb1\xeb\xf3\x7e\xdd\x14\x83\x7c\x6e\x3f\xdb\xfc\x6d\x3a\x72\x82\xab\xf1\xb0\xd8\x7d\xe3\xb6\x5d\x64\x10\x71\x86\x5d\x8c\xf3\x46\x66\xd3\x79\xba\xb1\xb0\xd6\x13\x77\x43\x0a\xe3\x85\x9e\x95\xb7\x21\x93\x3d\x22\x30\x6c\x85\x78\x36\x3c\x7c\x37\xd9\x5c\xc7\x6c\xdd\xcb\xe5\xea\xf7\x7c\x17\xe3\x35\x19\x77\x69\x87\xe1\x12\x72\x39\xe3\xa4\xfd\x5a\x94\xfe\xdd\xde\x70\x91\x6f\x4f\x5b\x45\x14\x18\xb9\x16\x44\x60\x14\x1e\xe9\x5c\x26\x15\x1f\x69\x9e\xad\x46\xe5\xa4\x67\xdb\xbe\xe9\x33\x52\xe5\x19\xb1\xba\x4c\x6f\xf2\xa9\x6f\xef\x98\x3c\xd3\x99\xcf\x5b\x77\x9e\x9a\xb8\xbf\x1b\xdd\xd7\xbb\x63\xcc\xc0\xb7\xab\x6d\x15\xd9\xc5\x48\x96\xe3\xca\xb7\xe9\x0b\xae\x97\xcd\x1e\x26\x79\xbf\x9e\xec\xc7\x9b\xba\x85\x9b\x81\x82\xd1\xc8\x2a\xe0\xe6\x0f\x17\x48\x2e\x4f\x87\x35\xa1\xa5\xea\x6b\x86\xd5\xe6\xc3\xf5\x6c\x74\x63\x5b\x07\x5c\x7c\x8a\xa8\xd3\x86\x13\x49\x6e\xa1\x1b\x0d\x1b\x8f\xf8\xb1\x03\x52\x0e\xc5\xfa\x3e\xa3\x83\x07\x91\xed\x38\x88\x72\xd7\xbd\x84\xfd\xdf\xec\x25\x1f\x56\xd9\x62\x74\x93\x5e\x7c\x9a\xbf\x5b\x64\xab\xcc\xf6\xca\x09\xda\x72\x2b\x38\x2b\x41\x2b\x3d\x82\xb6\xd8\xfb\xb6\x4a\x5a\x06\xc9\xc0\x6d\x9d\xc6\x1d\xd9\x2d\xaa\x17\x49\xfb\xa4\x0b\x21\x92\x96\x31\x46\x2f\x69\x99\x55\xd8\x03\x24\x2d\x30\x16\xbc\x96\xe5\x8e\x6b\x99\x69\x11\xdc\xb6\xd9\xb1\xed\x84\xb0\xdb\x31\x91\xb8\x15\x40\x26\x36\xf3\xfd\xb5\x8d\x24\x67\x3c\xf6\x68\xa3\x50\x18\x7e\xbb\x6a\xa3\xb0\x4d\x1b\x65\xda\xd0\xbd\x30\xd3\x44\x9b\xad\x14\x84\x33\x2b\xf1\x8c\x76\xd2\x5d\xf5\x4f\x80\x4c\xb3\x61\xdc\x67\xb3\x00\xd7\x9d\x67\x89\x62\xad\xa6\xae\xd6\xed\x4c\x1d\x6e\x22\xbb\xd9\xb8\x51\x83\x98\x66\x1a\x71\x15\x84\xcb\xc5\xbd\xe0\x72\xca\x8b\xcb\x69\x7d\x92\xb8\x1c\x8b\x74\x37\x5c\x2e\x89\x2e\x55\x1b\x5c\xee\xcd\xcf\x6f\xdf\x7e\xff\xd3\x0f\x1f\x2e\x3e\x7d\x77\xf1\xfe\xc7\x0f\x1f\x73\x58\xe1\x62\x67\x54\x4e\x27\x75\x54\xce\xbe\x45\x69\xb0\x1e\x18\x95\xd3\x0e\x83\xd3\x0e\x83\xd3\xce\xec\xd4\xce\x04\xd6\xfa\xbc\x50\x39\x6d\xba\xa2\x72\xd2\x10\xed\x63\x27\x88\xca\xbd\xc9\x16\x69\x85\xa3\x85\x08\x58\x30\xe2\xc8\x3c\x1f\x60\xe0\x38\x45\xec\xfa\xf2\xb6\x32\x16\xe2\x48\x74\x93\xb1\x71\xa4\xdb\x88\xd8\x7f\xfc\x73\x67\x79\x0a\x86\xd5\x05\xaa\xb5\x99\xa2\x4b\x79\x78\x81\x0a\x05\xa6\x5f\x1e\x25\x78\x64\x10\xca\x8b\xf1\x08\xce\x4b\xaa\xe6\x80\x57\x0b\xb1\x5a\x3c\xcb\x61\xf5\x44\x00\x22\x53\x54\x76\x47\x09\x06\xd1\xe8\xef\x46\x9c\xdc\x5e\xf0\x97\x5c\x20\xd6\xbd\x33\x40\x85\x19\x33\xc6\xdb\x59\x1a\xc2\x44\x42\xe2\x7e\x25\xe3\x96\xf6\x4a\x12\x71\xb4\x57\x4a\x33\x9f\xc4\x38\x95\x74\xa0\x2e\xa8\xb3\xc2\x39\xf5\x73\x38\x27\xf7\xe3\x9c\x0c\x71\x4e\x8e\x47\x62\x50\xb9\x0d\x7b\x42\x3c\x79\xb3\x0b\x41\x88\x27\xe8\x03\x20\x9e\xa0\x82\x10\x4f\xa1\xc9\x04\x6d\xc2\xe9\x64\x38\x4b\xda\xc9\x0f\x55\x97\x42\x50\x42\xb2\xdb\x90\x9c\xc2\xbc\xeb\x04\x41\x09\x42\x4c\x56\xca\x76\x6f\xaf\xe3\x9a\xf4\x04\x2a\x64\x97\xb5\x80\xa3\x77\x45\xba\x81\xc7\x64\xc3\x0a\x84\x08\x2d\x03\x20\xd2\x94\xe2\x84\x6c\xb0\x59\x42\xb7\x0b\xea\x84\xca\xa7\x2d\x89\x30\x4c\x1d\x62\x62\x6b\x76\x64\x16\xb6\x32\xa7\x88\x61\xda\xb5\x9d\x74\xb5\xaf\x5b\x51\x0b\x4b\x85\x1b\x5d\xd8\x3b\x63\x97\x71\xc3\xd4\x96\x51\x0f\xc8\xa5\x72\x38\xa5\x72\x38\xa5\x72\x96\xb7\x72\x86\xb7\x9d\x2d\xe7\x85\x5c\x42\x57\xe4\xb2\x34\xb1\xb7\xa9\x12\x0a\xba\xaa\x12\x0c\x54\x3b\x7f\x26\x0b\x42\x05\x0b\xba\xeb\x51\xa1\x82\x09\x3f\x49\x54\x50\x47\xbc\x23\x21\xda\xb4\x93\x5a\x05\x64\xbc\x33\x2e\x58\xb2\x8b\x2b\x4b\x4e\x45\xd0\x07\x2e\xa8\x11\x03\x4c\x10\x03\x44\x4e\x34\x20\x29\x3a\x9f\x2c\xe7\x85\x0b\x3e\x0d\x17\x08\xc6\x05\xc9\xa8\x74\x2d\x41\x22\x29\xea\xcc\x5b\x1d\xb7\x12\x7b\xa0\x34\x9d\x8d\x50\x82\x87\xb3\x74\xb5\xb2\x83\x7a\x6d\xc7\xa2\xb8\xc5\xce\xff\xbb\x57\xb7\xe9\xec\x7a\x95\xcd\xd3\x57\x77\xd9\x3c\x9b\x2c\x46\x5f\x5f\x5d\x4f\x6f\xec\x95\x97\xf9\x65\xaf\xf2\x71\x5b\x4c\xaf\x5e\x59\x99\x93\xa6\xe5\xfb\x46\x74\x20\x64\xbd\x83\xeb\xc5\xff\xb1\xfe\xe0\xe7\x41\xca\x30\x50\x72\xbd\x87\x14\x2e\x87\x27\x00\x65\x13\xf2\xc4\xf9\x41\xa4\xfd\x33\xdd\xd2\x32\x66\x49\x04\x1a\x71\x45\x42\x5a\x2c\xa3\x03\x45\x64\x42\x68\x1a\x9f\x1d\x37\x33\xf6\x61\x96\xb1\x17\xb3\x8c\x91\x9b\x19\x9b\x9e\xf0\xc9\xcd\x2e\x84\xe1\x93\x70\x08\x7c\x32\x0e\xc2\x27\x65\x4c\x45\x23\x27\xa2\x1a\x24\x74\x34\x4f\x16\xfb\xf0\x4a\xa5\x3b\xc3\x95\x84\x60\x2d\x87\x76\xfb\x78\x09\xf2\x9e\x94\xa3\xee\xdd\x22\x1b\xa7\xcb\xa5\xed\x0a\x4e\x70\x42\x4f\x67\x6c\xbc\x7c\x56\xd3\x95\xa9\x08\x84\x28\x2f\xe3\x2d\x0d\x5e\x2a\x85\x56\x53\xf1\x92\xa8\x60\x61\x9e\x84\x98\xfe\xea\xd8\xf8\x40\x0a\x4e\x12\xad\x34\x5d\xd1\x4a\x68\x67\xf7\x57\x01\x9c\xc1\x88\xa5\x7a\x42\x0e\xea\x01\xb2\x94\x0e\xa0\x94\x4e\xbd\x91\x0e\x14\x50\x0e\x13\x50\x67\x46\x0b\x52\xbc\x23\x64\xc9\x4c\x4c\xe7\xa6\x23\xf4\x1c\x29\x71\x72\x41\x71\x5b\xd6\x27\xee\x84\x2f\xd1\xc7\x6b\xc3\xcb\xcb\x15\x01\xe4\x62\x03\x92\xb1\x01\xd9\xd8\xa0\x55\x4f\x71\xc8\x8d\xce\x84\xc6\x21\x17\x2c\x77\xea\x38\xe4\x92\xa0\xbe\x73\x1c\xb2\xf2\x05\xec\x88\xce\x01\x3b\x86\xd0\xad\x5f\x7a\x4f\x68\xe4\x9c\x20\x52\x38\x41\xfb\x42\xd1\x4c\xd2\x39\xc6\x88\xf9\xcc\xc8\x9c\xdc\xd7\xd5\x57\x25\xc1\xd7\xb8\x8c\xbb\xf6\x5c\x12\x02\x73\xc9\xb9\x09\x5a\xed\x91\xb3\x89\x1f\xdf\x42\xfe\x5d\xdc\x17\xff\x6e\xb3\x0b\x41\xf8\x56\x7c\x08\xfe\x5d\x1c\xc8\xbf\xa3\xa3\xef\x80\xf6\x06\x2a\x16\x21\x4a\xdd\xd6\x39\x33\x5e\x21\x92\x74\x6d\x3c\x69\x8b\xe2\xf3\x48\x20\xbf\x4d\x10\x02\x71\x65\x62\x86\xad\x42\x4e\x76\x15\x72\x9a\x0a\xf1\x8c\xc5\x49\xc6\x40\xd5\x69\xef\x2c\xe1\x7b\xf0\xff\x00\x27\x8c\x1e\x06\xd6\x92\xf9\xae\xeb\xcc\xd5\xd8\xb4\x74\xb0\xea\x7a\xf6\xa5\x84\xd0\x63\xc4\xd5\x89\x46\x59\x7c\x9a\x7f\x48\x17\x5f\xa6\x63\x0c\xbe\x2b\xb3\xe8\xec\x8a\xb5\xc9\x63\x63\xd9\x48\x7e\x92\x58\x9b\xea\x89\x19\xb8\x25\xc1\xcd\xae\x58\x9b\x6c\x12\x6e\x78\xd2\x07\xd6\x26\x1c\xb2\x26\x1d\xb2\x26\x1d\xd9\x46\x3a\xae\x8d\x3c\x33\xaa\x8d\x94\x9d\xe9\x81\xdc\x4b\x0f\xec\x9e\x33\x02\x88\xa2\xf0\x94\xa4\xe3\xc3\x8b\x73\x33\xb7\x12\x8f\xb9\xc5\xbc\xb0\x16\xb2\x71\x41\x21\x05\x4e\xf7\x94\xea\xe9\x49\x17\xc2\xc0\x2c\x76\x08\x30\x2b\x2c\xd5\x13\x21\xfa\xcd\x84\x17\x60\x11\x9d\x01\x16\x43\xa7\x9b\xca\x98\x30\xfb\x15\x55\xfc\x8b\x4a\xda\x27\xf9\x14\x55\x92\x4f\x1f\xdc\xd6\xdd\x52\xce\xf3\x51\x7a\x64\xbf\xe9\x4c\xdb\x60\xc2\x67\x86\x17\x9b\x75\xb7\xb6\x35\x55\x0a\x47\x46\x67\x9a\x83\x39\xab\x8d\x45\x3e\xe3\x30\xd1\x7e\x20\x2f\x46\x14\x0d\xfa\x02\xf2\x36\xba\x10\x06\xe4\xf1\x43\x00\x79\x2c\x8c\xa8\x46\x24\xe0\x72\xa0\xd3\x93\x26\x8d\x75\xd5\x1c\x13\xa2\x05\x2e\x5a\xe2\x77\x26\x82\x8a\xfd\xcd\xa9\xb2\xde\x32\xba\x30\x4f\xaa\x5d\xae\x8c\x7a\xdd\x39\x92\x87\x1d\x5b\x65\x03\x60\xf2\x44\xc3\x0f\x55\x2f\x20\x43\x45\x23\xdc\x39\x9a\x87\x35\x8a\x19\x5c\xaa\x88\xf5\x00\x2e\x94\x79\x34\x5d\xaa\xd5\x8a\x12\x5f\xe9\x05\x11\xce\x97\xf3\x0a\xe6\x61\x5d\x2b\x1a\x94\x69\xea\x9b\xeb\xa6\x0f\xed\x05\x9a\x63\xac\x6a\x93\xae\x9c\x5d\x1b\xaa\xca\x9b\xd1\xfc\xcb\x68\x79\x01\x5b\x94\x95\xcf\x7b\xd4\x43\x36\x96\x68\xb9\xc5\xac\x67\x9b\x9b\x7f\x6e\xf6\x61\x80\xac\xcb\xe3\xe7\xaa\x6c\xac\xff\x47\x53\x18\xe3\xd1\xaa\x59\xed\x0e\x70\x4e\xe3\x94\x46\x42\x0a\x66\xc8\xaf\x12\x5e\x61\x6e\x2b\x54\x8a\x30\xcd\x08\x66\x58\x1e\x20\x23\x08\x21\x14\xe7\x8d\x72\x07\xae\x65\xe6\x5a\x66\x18\x0e\xe0\x5a\xe6\xae\x65\xee\x5a\xe6\x38\x0c\xae\x65\xee\x5a\xe6\xae\x65\xee\x5a\xe6\xae\x65\xee\x5a\xe6\xae\x65\x51\xe2\x02\xbb\x6b\x65\x4f\xb7\xa0\x67\x95\xad\x7a\xe0\x1a\x48\x42\x4e\x47\x5b\x1f\x12\xe8\x9a\x0f\x89\x71\x4d\x95\x73\x4b\x90\xb1\x70\xa0\x74\x4e\x9d\x94\xd3\xe6\xad\xdd\x27\x47\x37\xe9\xa7\xf9\xbb\xac\x46\xab\x33\xb0\x0f\x3f\x21\xa1\xff\x4c\x29\xc2\xf4\x31\x67\xc7\x29\xf4\x81\xaf\xe0\x07\x5f\x51\xa4\x2b\x94\xe9\x0a\x85\xba\x5d\x83\x3d\xc1\xb0\xf5\xce\x84\xc2\xb0\x45\xc2\x07\x6a\x18\x56\xc9\x20\x4e\x21\xf3\xa6\x5c\x8f\x65\xf7\x64\xda\x3e\x70\x4c\x74\x0e\x7f\x31\x74\xd1\x2f\x92\x0e\xe1\x85\x97\x62\x46\xe8\x77\xf1\xc7\x71\x8a\x4a\xc5\x42\x1d\x4b\xa0\x92\x25\x7a\xe2\x13\x37\x3b\x13\x0a\x99\x89\x03\xf0\x89\xf3\x0a\x3a\x21\x90\x19\xe8\x3d\x90\x58\x8a\xc5\x32\x9a\xdd\xdb\xf6\xd3\x55\xcd\xfc\x58\xa6\xff\x19\xce\x1f\xee\xae\xd2\x45\xa1\x5f\x41\xf1\x27\x55\xfc\xb4\x0a\x94\x55\x18\x4c\xf1\x80\x5c\xe3\xb1\xa7\xec\x4f\x9e\xcf\x68\x7c\x5e\x3e\x13\x0b\xcb\xa4\xf1\x86\x56\xc5\x45\xe2\xde\xe9\xb1\xa9\x7e\x19\xcd\x66\x76\x0c\x91\x3e\x08\x2d\xb3\xce\x78\xfd\x1d\xc0\x3b\x8b\x74\xd9\xae\x3e\x02\xc4\x84\xc1\x2e\xa2\x25\x19\x0b\x78\x5d\x99\xd4\xaa\xbd\x23\x2b\x71\xad\x24\x44\x56\x87\x20\x42\x8a\x99\xd4\x2d\xbf\x27\x1d\x37\x41\xb3\x93\x0b\x30\xda\x48\x57\xf6\x88\x10\x40\x10\xaa\x1c\x1f\x1b\xaa\x0c\xfa\x05\x55\xde\x23\xaa\xfc\xe6\x76\x34\x9d\x5f\xe4\x04\xb6\x80\x2c\x51\x90\x34\x03\x44\x7b\x02\x96\x2b\xc0\xad\x42\xdc\x2a\xc8\xad\xc2\xdc\xe0\xcc\x6a\x72\x00\x74\x2d\xca\xc1\x12\x41\x95\xaa\x93\x30\x83\x40\x88\x64\x63\x47\x57\x0f\x83\x19\x38\x51\xc9\xc6\x7b\x4c\xd7\x99\x07\x0a\xec\x2a\xd7\x58\xb3\x2a\x06\x13\x51\xe1\x1e\x38\xb0\x58\x63\x49\x85\xe4\x23\x94\x8f\x45\x31\x18\x16\xc5\x60\xe7\x56\x14\x83\x99\xce\xe1\xef\xc0\xbd\xa5\xa7\xbb\x53\xa7\x84\x0f\xd6\x62\xdc\x74\x6e\x3c\x21\x0c\x83\xe4\x94\x85\x0f\x2a\xd2\xef\x7d\x8e\x1c\xd8\xd9\x10\xbf\x92\x7f\x30\x1a\xee\xf2\xe9\xe4\xb7\xc1\xeb\xcb\xba\x51\xc8\x04\x7e\xca\x96\x1c\x40\x0e\xb5\x98\x1a\x45\x97\x09\x9f\x05\xd5\xbf\x03\x75\x74\x8a\xb6\xd4\xa7\x59\x9e\x09\x3a\x67\x62\x95\xed\x36\xa4\xbf\xda\x76\x16\xf3\xd1\x2c\x68\x4f\x02\xd9\xd4\xb5\x81\xf7\x11\x20\x02\x12\x55\x6d\x59\x39\xb7\x51\xd5\x96\xa8\x6a\xcb\x73\x53\xb5\xa5\xe9\x9a\x90\x15\xda\xfa\x25\x21\x66\x51\xc5\x66\x16\xd2\xcb\x3f\x57\x9d\x1d\x1f\x6d\xbd\xe3\xb2\x16\x9b\x2b\x09\x2b\x44\xc0\x8b\x8b\xc3\x79\x37\xfd\xa1\xfc\x48\xdf\x60\xc8\xdf\x60\xa2\xaf\x32\xe2\x55\x67\x44\x78\x19\x71\x71\x88\x32\xe2\x22\x28\xb6\x84\x69\x46\x58\xea\x39\x3e\xbd\x28\xee\x1a\xee\xf4\x58\x85\x3c\xf9\x02\xe6\x3a\xa7\x17\xe0\x41\xe0\xc0\xd1\xa5\xc5\x67\x09\x3f\xd1\xec\x78\xfd\x80\x03\x55\xf6\xad\x20\x80\xa0\x99\x1e\x5f\xf5\x83\x0f\x60\x72\x7c\x86\xc9\xf1\x19\x26\xc7\x67\x98\x1c\x9f\x9d\x5b\x72\x7c\x96\x74\x0e\xd9\x35\xbe\x1c\x1f\xb2\x7b\xc4\x6e\xec\x4b\x92\x94\x40\xe7\xb6\x35\x55\x4d\x4e\x26\xf7\xe1\xae\x97\xa7\x47\x31\xfc\x29\x5d\x7d\xcd\x16\xbf\x56\xc1\x84\xed\xb2\xd7\x26\xa7\x97\xee\xf8\xa2\xf9\xef\xdd\xec\xe1\xee\x6a\x3a\xbf\xc1\x14\x3d\x54\x1c\x59\xde\xd6\x48\x89\x45\x0d\x11\xd2\x9c\x4c\x8d\xe3\x61\xa5\x79\xe0\xd8\xca\x89\xe5\x09\x68\x5e\x5c\xaf\xfb\xd3\x41\x9a\x2c\xe5\xdd\x9d\xaf\xcd\x7a\x62\x42\xf4\xe3\x7c\x8d\x11\xfd\x89\x11\xfd\x89\x31\xba\x01\x6b\x12\x40\x6c\xce\xcd\xf9\xda\xb5\xae\x18\x53\x5e\x47\x82\xea\xac\x2a\x80\xd4\x7b\x20\x2e\x89\x20\x6b\x4a\x1f\x5b\x68\x22\xd3\xf2\x44\xf3\x1f\xf1\x5e\xf3\x1f\x05\xd9\x52\xba\x19\x9c\x68\x7a\x32\xa6\x2a\x72\x3d\xba\x5d\x31\xb7\x30\xc3\x74\xbe\x4c\x9f\x59\x70\x62\x6e\x52\x74\x34\xa6\xa8\x38\x24\x8c\x27\xde\xf8\x81\xb8\xb3\xa3\x55\xf9\x70\x74\xd5\x39\x36\x01\x80\x4e\xb9\x64\x86\x2a\x74\x5e\x50\xa6\x8c\xa7\xf3\x6a\x2b\xc2\x1a\xc9\x41\x65\x81\x41\x1e\x9d\x22\x2f\xcc\x8b\x6b\x77\xaf\xae\x5d\x87\x06\xec\xee\xd5\x8d\x37\xbd\xba\xa5\x4b\xe7\xd0\x5a\x3c\x86\xb8\x80\x40\x2d\x5e\xa0\x16\x2f\x50\x8b\x17\xe7\xa6\xc5\x4b\xe8\xea\xd7\x65\xac\x65\x09\x2c\x20\x2a\x94\x68\x88\xf6\x63\xc9\xf7\x81\x11\xb2\xb3\x73\xe1\x4a\x9f\x0b\xd7\x9f\xc4\x09\xc3\xf5\x19\xc6\xeb\x33\xde\x57\x5e\xf6\xcd\x2e\x04\xb9\x70\xf9\x21\xf2\xb2\xf3\xc0\xbc\xec\x74\xf1\x25\x67\x15\x7e\xbd\x36\xe5\xb6\x16\x74\xf1\x47\x60\x62\xea\x4b\xa6\xfa\xaa\xa4\xb9\xd9\x85\xa0\x19\xad\x0f\x51\x49\x53\x87\x55\xd2\xd4\x44\x46\x01\x63\x2d\x8b\xf5\x49\xaa\xda\x29\x31\xec\xa1\x7c\x40\xee\x50\xa5\x2b\xa7\xdb\x2e\xea\x2d\xa1\xcb\x5c\x26\x4e\xd0\xf9\xf4\xd3\x8f\x1f\x7f\xf9\xf9\xfd\xdf\x2e\xfe\x74\x93\x2d\x97\xd3\x7b\xbb\x82\xa3\x8b\xab\xe9\x6a\xf9\x75\x74\x1f\x5d\xa4\xab\xf1\xab\x3f\xe3\xc7\x96\x09\xd5\x5c\xa4\xcb\xe3\xa1\x05\x59\xd3\x3c\x88\x22\x03\xb1\x38\x3a\xf7\xd4\x49\xc6\xcf\x88\xce\xee\xa9\xcb\xa4\x65\x68\xa0\x2b\xb4\xb1\xb3\x55\x1b\x6f\x14\x8e\x8c\xca\x5c\x56\x07\x36\x6a\x8d\xb3\x5f\x0d\x26\xef\xaa\xb2\x77\x61\xfa\xae\xf8\xcc\xa2\x67\x20\xee\x1c\x3d\x53\x96\xe8\xa1\x08\x0a\xdc\x87\x05\xa9\x5e\x54\xec\x32\xc9\x89\xf1\xab\xd8\x68\xb1\xa9\xbe\x8c\xc6\xcd\x2e\x04\xa9\xd8\xea\x10\x46\xa3\x0a\x33\x1a\xd5\xe9\x71\x73\x1b\x81\x2a\x18\x6f\x25\x5a\xfa\x8d\x21\xae\xd1\x6b\x72\x56\x75\x2b\x50\x8c\x13\x96\x2d\x52\xb2\x9d\x31\x03\xde\x72\x68\xd0\x99\xaf\xac\xf6\x53\xec\x29\x48\xa5\x13\x47\xa7\xd2\x09\x78\x61\x1c\xed\xd1\x4f\xbf\x4e\xf6\xb3\xb3\x3e\x27\x9a\xf1\xd0\xa6\x1f\xa6\x11\xe6\x1f\x05\x0c\x1a\x01\x8c\x60\xc9\xdd\x93\x11\x4e\x96\xf3\xd2\xe8\x44\x67\x8d\x4e\xb4\xcc\x3f\x24\x45\xad\x90\x06\x50\xb9\x9e\x0d\x91\xbe\x29\xc9\x92\x5b\xbc\xf8\x30\x9c\x0f\x43\x79\x95\xd0\x2a\x3f\x31\x26\x28\x66\xbc\xaf\x30\xb4\xcd\x2e\x84\xf9\x30\x0e\x11\x86\xc6\xc3\x4a\x1c\x31\xa0\xa3\x98\xb4\xe0\x46\xef\xca\xd6\x48\x4e\x30\xc2\xed\xe7\xb7\x6f\xbf\xff\xe9\x87\x0f\x17\x9f\xbe\xbb\x78\xff\xe3\x87\x8f\xb9\x36\x7d\x81\x34\xf3\xb3\x92\x14\xfc\x19\x6b\xd5\x2f\x28\x24\xae\x4d\x85\x71\x4e\xaa\xaf\xda\x35\x8d\xce\x04\xdb\xad\x87\xa8\x5d\xa3\xc2\x6a\xd7\x18\xdd\x7a\xeb\x67\x71\x15\xf6\xd2\x2e\x35\x63\x4e\x09\x3e\xb5\xf5\x5e\x27\xc1\xa2\x34\xa6\xaa\xa6\x25\x09\x99\x84\x31\x55\x30\x19\xa1\x77\x2d\x27\x23\xf8\x92\xef\x74\x2e\xbf\x27\x08\x8b\x07\x49\xb2\x2d\x95\x07\x91\xf4\xcd\xb1\x45\x3c\x1b\x7e\xa2\xa6\xbf\xe8\xc5\xf4\xcf\xa3\x8c\x16\xe3\x74\x36\xb2\x5b\xf2\xae\xf6\xbf\x69\x44\x3b\x4b\xdd\x8f\x3b\x07\x53\x9f\x61\xe6\x33\xe3\x82\x9d\x8d\x23\xef\x9b\x33\x0b\x75\x36\xb2\x73\x8c\x51\x4b\xbe\x84\xd6\x91\xb5\xed\x70\x1b\x22\x72\xa1\x2b\x4a\xce\xb9\xa4\x0a\x4b\x30\xad\x35\x2a\x81\x25\xf0\x92\x97\x4c\x36\xce\x32\x60\x7e\xcb\xa0\x2a\x83\x84\x29\xfa\x65\x5f\x29\xfa\x6b\x9d\x51\xc1\x96\x81\x3c\x44\x8a\x7e\x19\x94\xa2\x9f\x29\xd5\x92\xb7\x4c\xc7\x4d\x61\x86\x8a\x37\x26\x60\x1f\x7e\x16\x13\xe4\x67\xe1\xc7\xa6\x6b\x01\xe7\x2f\x7e\x96\xbd\xa7\x9e\xfd\x34\xff\x90\x2e\xbe\x4c\xc7\x01\x89\xb5\x79\x43\xe3\xb2\xf3\xad\x9f\x82\x8d\xe8\x5c\xc1\xca\x71\x80\xa5\xe3\x80\x57\xf5\xee\xce\x4c\xeb\x02\xde\x59\xed\x62\x54\x51\x7a\xa5\x2f\x9a\xc0\x07\xa3\x4e\x0e\xa8\xa9\x9b\x42\xce\x23\x44\xc5\x6c\x12\x2f\x1e\x21\xe7\x11\x92\x7e\x8f\x10\x46\xb5\x54\xf5\x2d\x59\x5f\x04\xa5\xcd\x2e\x04\xa9\x73\xec\x10\x04\x25\x16\x18\xd5\x42\xc7\x46\x4e\xe8\x9c\x4d\x22\xa8\xfa\xb5\xe8\x27\xc3\x84\xf2\x6a\x54\xe2\x24\x13\x4c\x08\x11\xe9\x8e\x5c\x64\x16\x5d\xf2\x36\x2a\xd5\x2e\xc4\xfe\x5d\xd5\x2c\xd1\xc8\x3c\x61\x67\x61\x59\xd5\xf7\xc0\x6a\x96\x70\x1a\x95\x70\x0a\x15\xd6\xa0\xc3\xaa\x6f\xe2\xcc\xb2\x4e\x08\xdd\x59\xc1\xa2\x72\x5e\x68\xde\xba\x54\x17\x43\xc0\xcc\xbc\xa0\x3b\x0e\xdd\x01\x7f\x29\x46\x74\xb5\x4a\xf4\xfb\xca\xbe\xfc\xbe\xb5\xce\x40\x38\xba\x73\x08\xbf\xaf\x0c\xf2\xfb\x32\xe9\x73\x94\x75\xcf\xb1\x0b\x31\x55\xb8\x61\x42\x58\x1e\x55\x13\x61\xd8\xac\x2c\xbc\xda\x22\x46\xd2\x47\x2b\xd6\xaa\xfb\x17\xa2\x2b\x78\xa1\x29\xca\xb3\x3f\x96\xef\x94\xef\xe6\xdf\x06\x5f\xec\xb2\x78\x7c\xfc\x1f\x9b\xdb\x10\x1f\x02\xe6\x00\x00\x01\x00\x00\xff\xff\x68\xd8\x28\x49\xf4\x10\x00\x00") + +func fixtures_assetsArchDiagramMonopicBytes() ([]byte, error) { + return bindataRead( + _fixtures_assetsArchDiagramMonopic, + "fixtures/_assets/arch-diagram.monopic", + ) +} + +func fixtures_assetsArchDiagramMonopic() (*asset, error) { + bytes, err := fixtures_assetsArchDiagramMonopicBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "fixtures/_assets/arch-diagram.monopic", size: 4340, mode: os.FileMode(420), modTime: time.Unix(1624501759, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "fixtures/_assets/car/calibnet.car": fixtures_assetsCarCalibnetCar, + "fixtures/_assets/car/devnet.car": fixtures_assetsCarDevnetCar, + "fixtures/_assets/car/forcenet.car": fixtures_assetsCarForcenetCar, + "fixtures/_assets/car/interopnet.car": fixtures_assetsCarInteropnetCar, + "fixtures/_assets/car/nerpanet.car": fixtures_assetsCarNerpanetCar, + "fixtures/_assets/proof-params/parameters.json": fixtures_assetsProofParamsParametersJson, + "fixtures/_assets/proof-params/srs-inner-product.json": fixtures_assetsProofParamsSrsInnerProductJson, + "fixtures/_assets/arch-diagram.monopic": fixtures_assetsArchDiagramMonopic, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} + +var _bintree = &bintree{nil, map[string]*bintree{ + "fixtures": &bintree{nil, map[string]*bintree{ + "_assets": &bintree{nil, map[string]*bintree{ + "arch-diagram.monopic": &bintree{fixtures_assetsArchDiagramMonopic, map[string]*bintree{}}, + "car": &bintree{nil, map[string]*bintree{ + "calibnet.car": &bintree{fixtures_assetsCarCalibnetCar, map[string]*bintree{}}, + "devnet.car": &bintree{fixtures_assetsCarDevnetCar, map[string]*bintree{}}, + "forcenet.car": &bintree{fixtures_assetsCarForcenetCar, map[string]*bintree{}}, + "interopnet.car": &bintree{fixtures_assetsCarInteropnetCar, map[string]*bintree{}}, + "nerpanet.car": &bintree{fixtures_assetsCarNerpanetCar, map[string]*bintree{}}, + }}, + "proof-params": &bintree{nil, map[string]*bintree{ + "parameters.json": &bintree{fixtures_assetsProofParamsParametersJson, map[string]*bintree{}}, + "srs-inner-product.json": &bintree{fixtures_assetsProofParamsSrsInnerProductJson, map[string]*bintree{}}, + }}, + }}, + }}, +}} + +// RestoreAsset restores an asset under the given directory +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil +} + +// RestoreAssets restores an asset under the given directory recursively +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, filepath.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) +} diff --git a/fixtures/fortest/constants.go b/fixtures/fortest/constants.go index 726250f466..41df836bfe 100644 --- a/fixtures/fortest/constants.go +++ b/fixtures/fortest/constants.go @@ -11,22 +11,22 @@ import ( "github.com/filecoin-project/go-address" cid "github.com/ipfs/go-cid" - "github.com/filecoin-project/go-filecoin/build/project" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - gen "github.com/filecoin-project/go-filecoin/tools/gengen/util" + "github.com/filecoin-project/venus/build/project" + "github.com/filecoin-project/venus/pkg/crypto" + gen "github.com/filecoin-project/venus/tools/gengen/util" ) // The file used to build these addresses can be found in: -// $GOPATH/src/github.com/filecoin-project/go-filecoin/fixtures/setup.json +// $GOPATH/src/github.com/filecoin-project/venus/fixtures/setup.json // // If said file is modified these addresses will need to change as well // rebuild using // TODO: move to build script -// https://github.com/filecoin-project/go-filecoin/issues/921 +// https://github.com/filecoin-project/venus/issues/921 // cat ./fixtures/setup.json | ./tools/gengen/gengen --json --keypath fixtures > fixtures/genesis.car 2> fixtures/gen.json // // The fake cids used for commX in setup.json are generated using this tool: -// $GOPATH/src/github.com/filecoin-project/go-filecoin/tools/gengen/gencfg +// $GOPATH/src/github.com/filecoin-project/venus/tools/gengen/gencfg // TestAddresses is a list of pregenerated addresses. var TestAddresses []address.Address diff --git a/fixtures/genesis-sectors/README.md b/fixtures/genesis-sectors/README.md deleted file mode 100644 index d06dde474a..0000000000 --- a/fixtures/genesis-sectors/README.md +++ /dev/null @@ -1,27 +0,0 @@ -## Generating genesis-sectors - -Genesis sectors are generated using the [Lotus](https://docs.lotu.sh/en+setup-local-dev-net) seed tool. -Follow the directions there to install lotus and then run: -``` -./lotus-seed pre-seal --sector-size 2048 --num-sectors 2 --miner-addr=t0106 -``` -The sector-size must be one of the sizes in use by the proof system. And the miner address should be the address -of the bootstrap miner to be created with gengen. By default in gengen this address starts at t0106 and the id address number is incremented for every additional miner. -This will create a `.genesis-sectors` directory in your home directory. - -### Configure setup.json for gengen - -The genesis setup.json file will need to be updated to match the data in the presealed directory. - -1. Unencode the preseal key using `xxd -r -p ~/.genesis-sectors/pre-seal-t0106.key` and copy the private key to the importKeys. -2. Use the information provided in `pre-seal-t0106.json` to update the sector size, commR, commD, sectorNum, commP, pieceSize, and endEpoch of the sectors in setup.json. - -### Initialize with presealed sectors - -To initialize a bootstrap miner using presealed sectors: -```bash -./go-filecoin init --genesisfile=genesis.car --wallet-keyfile=[miner key] --miner-actor-address=t0106 --presealed-sectordir=[preseal directory] -``` -Where `miner key` is the key file imported for the miner. This will be the keyfile whose name is the `minerOwner` specified in setup.json -(e.g. if setup.json has `keysToGen` set to 5, then the miner owner key file will be `fixtures/test/5.key).` -The presealed sector directory should be set to `[path to home directory]/.genesis-sectors` by default. \ No newline at end of file diff --git a/fixtures/genesis-sectors/badger/000000.vlog b/fixtures/genesis-sectors/badger/000000.vlog deleted file mode 100644 index a377411190..0000000000 Binary files a/fixtures/genesis-sectors/badger/000000.vlog and /dev/null differ diff --git a/fixtures/genesis-sectors/badger/000004.sst b/fixtures/genesis-sectors/badger/000004.sst deleted file mode 100644 index c81359c7ba..0000000000 Binary files a/fixtures/genesis-sectors/badger/000004.sst and /dev/null differ diff --git a/fixtures/genesis-sectors/badger/KEYREGISTRY b/fixtures/genesis-sectors/badger/KEYREGISTRY deleted file mode 100644 index a33c51867d..0000000000 --- a/fixtures/genesis-sectors/badger/KEYREGISTRY +++ /dev/null @@ -1 +0,0 @@ -› ฦใJม=ฮW–ํFHello Badger \ No newline at end of file diff --git a/fixtures/genesis-sectors/badger/MANIFEST b/fixtures/genesis-sectors/badger/MANIFEST deleted file mode 100644 index 35dfa8f217..0000000000 Binary files a/fixtures/genesis-sectors/badger/MANIFEST and /dev/null differ diff --git a/fixtures/genesis-sectors/cache/s-t0106-0/p_aux b/fixtures/genesis-sectors/cache/s-t0106-0/p_aux new file mode 100644 index 0000000000..22d45690a8 --- /dev/null +++ b/fixtures/genesis-sectors/cache/s-t0106-0/p_aux @@ -0,0 +1,2 @@ +้5 +y ์;๒ #หdRcาœz0ไ๐tฝ ุ/lตqฌmห๓p๊๘่๗bำซั๖€•w‰ชฉ‹K! \ No newline at end of file diff --git a/fixtures/genesis-sectors/cache/s-t0106-0/sc-02-data-tree-r-last.dat b/fixtures/genesis-sectors/cache/s-t0106-0/sc-02-data-tree-r-last.dat new file mode 100644 index 0000000000..22f3f0fc1a --- /dev/null +++ b/fixtures/genesis-sectors/cache/s-t0106-0/sc-02-data-tree-r-last.dat @@ -0,0 +1 @@ +lตqฌmห๓p๊๘่๗bำซั๖€•w‰ชฉ‹K! \ No newline at end of file diff --git a/fixtures/genesis-sectors/cache/s-t0106-0/t_aux b/fixtures/genesis-sectors/cache/s-t0106-0/t_aux new file mode 100644 index 0000000000..d70c530b4e Binary files /dev/null and b/fixtures/genesis-sectors/cache/s-t0106-0/t_aux differ diff --git a/fixtures/genesis-sectors/cache/s-t0106-1/p_aux b/fixtures/genesis-sectors/cache/s-t0106-1/p_aux new file mode 100644 index 0000000000..e84e41204b --- /dev/null +++ b/fixtures/genesis-sectors/cache/s-t0106-1/p_aux @@ -0,0 +1 @@ +ัช7Pž๑KQแ…ฮ$z8ถฒPฅcทGr8ZWl1๛๖fซLFชHES+0|Z{๎ฝไxI&‚‘ู%ึ9 \ No newline at end of file diff --git a/fixtures/genesis-sectors/cache/s-t0106-1/sc-02-data-tree-r-last.dat b/fixtures/genesis-sectors/cache/s-t0106-1/sc-02-data-tree-r-last.dat new file mode 100644 index 0000000000..0f8e078693 --- /dev/null +++ b/fixtures/genesis-sectors/cache/s-t0106-1/sc-02-data-tree-r-last.dat @@ -0,0 +1 @@ +๛๖fซLFชHES+0|Z{๎ฝไxI&‚‘ู%ึ9 \ No newline at end of file diff --git a/fixtures/genesis-sectors/cache/s-t0106-1/t_aux b/fixtures/genesis-sectors/cache/s-t0106-1/t_aux new file mode 100644 index 0000000000..c831762597 Binary files /dev/null and b/fixtures/genesis-sectors/cache/s-t0106-1/t_aux differ diff --git a/fixtures/genesis-sectors/cache/s-t0106-3/p_aux b/fixtures/genesis-sectors/cache/s-t0106-3/p_aux deleted file mode 100644 index 7d6fb5ad6c..0000000000 --- a/fixtures/genesis-sectors/cache/s-t0106-3/p_aux +++ /dev/null @@ -1,2 +0,0 @@ -…žไ ภ0ศ€c๒๊ ฯ๗(3ฆ(_N8`YธแDหฑชจ2ฐDึ„ฟ‚‹K -QA$-อP \ No newline at end of file diff --git a/fixtures/genesis-sectors/cache/s-t0106-3/sc-02-data-tree-d.dat b/fixtures/genesis-sectors/cache/s-t0106-3/sc-02-data-tree-d.dat deleted file mode 100644 index 68c9e4bcf3..0000000000 Binary files a/fixtures/genesis-sectors/cache/s-t0106-3/sc-02-data-tree-d.dat and /dev/null differ diff --git a/fixtures/genesis-sectors/cache/s-t0106-3/sc-02-data-tree-r-last.dat b/fixtures/genesis-sectors/cache/s-t0106-3/sc-02-data-tree-r-last.dat deleted file mode 100644 index 5642960bbc..0000000000 --- a/fixtures/genesis-sectors/cache/s-t0106-3/sc-02-data-tree-r-last.dat +++ /dev/null @@ -1,2 +0,0 @@ -YธแDหฑชจ2ฐDึ„ฟ‚‹K -QA$-อP \ No newline at end of file diff --git a/fixtures/genesis-sectors/cache/s-t0106-3/t_aux b/fixtures/genesis-sectors/cache/s-t0106-3/t_aux deleted file mode 100644 index 4d1c4e94c6..0000000000 Binary files a/fixtures/genesis-sectors/cache/s-t0106-3/t_aux and /dev/null differ diff --git a/fixtures/genesis-sectors/cache/s-t0106-4/p_aux b/fixtures/genesis-sectors/cache/s-t0106-4/p_aux deleted file mode 100644 index e1cb959f5d..0000000000 --- a/fixtures/genesis-sectors/cache/s-t0106-4/p_aux +++ /dev/null @@ -1 +0,0 @@ -oนฝาI>‚>2 3)cใฆบไEฎS๑ฤัc2 =์g!Wฬpyจ๏๒น8„ฝ๕์ฅฃRAƒW_ๆฆ+ \ No newline at end of file diff --git a/fixtures/genesis-sectors/cache/s-t0106-4/sc-02-data-tree-d.dat b/fixtures/genesis-sectors/cache/s-t0106-4/sc-02-data-tree-d.dat deleted file mode 100644 index 1e23cbb0b4..0000000000 Binary files a/fixtures/genesis-sectors/cache/s-t0106-4/sc-02-data-tree-d.dat and /dev/null differ diff --git a/fixtures/genesis-sectors/cache/s-t0106-4/sc-02-data-tree-r-last.dat b/fixtures/genesis-sectors/cache/s-t0106-4/sc-02-data-tree-r-last.dat deleted file mode 100644 index 664f890539..0000000000 --- a/fixtures/genesis-sectors/cache/s-t0106-4/sc-02-data-tree-r-last.dat +++ /dev/null @@ -1 +0,0 @@ -์g!Wฬpyจ๏๒น8„ฝ๕์ฅฃRAƒW_ๆฆ+ \ No newline at end of file diff --git a/fixtures/genesis-sectors/cache/s-t0106-4/t_aux b/fixtures/genesis-sectors/cache/s-t0106-4/t_aux deleted file mode 100644 index e853ad25ec..0000000000 Binary files a/fixtures/genesis-sectors/cache/s-t0106-4/t_aux and /dev/null differ diff --git a/fixtures/genesis-sectors/pre-seal-t0106.json b/fixtures/genesis-sectors/pre-seal-t0106.json index a6bc74f649..0a24b9eb0c 100644 --- a/fixtures/genesis-sectors/pre-seal-t0106.json +++ b/fixtures/genesis-sectors/pre-seal-t0106.json @@ -1,56 +1,62 @@ { "t0106": { - "Owner": "t3qx4zrflimpjboxn3ivs6t4eel7frijxhcdvae6z6dtnocvz54yeop2kfdxggn7dfhl72cqqhsf6nf5fgkl3a", - "Worker": "t3qx4zrflimpjboxn3ivs6t4eel7frijxhcdvae6z6dtnocvz54yeop2kfdxggn7dfhl72cqqhsf6nf5fgkl3a", + "ID": "t0106", + "Owner": "t3s3g5ktor5jgqpwfhxufvpk5g7nfsoif5rhny33ibmxpkndalckm6gbknvyuaymfnc764s6mixu7z62xm7yza", + "Worker": "t3s3g5ktor5jgqpwfhxufvpk5g7nfsoif5rhny33ibmxpkndalckm6gbknvyuaymfnc764s6mixu7z62xm7yza", + "PeerId": "12D3KooWQrDvsWxU1dN5udhbJbxyNgj4wr4mFvrkjC9HJfhEFypj", "MarketBalance": "0", "PowerBalance": "0", "SectorSize": 2048, "Sectors": [ { "CommR": { - "/": "bafk4ehzaqugph7z7yajugw6wz6nn7x3akr3e32wecwexllfgqndnjt3nsaya" + "/": "bagboea4b5abcaziacbne3v3hh6bhgatc3dop72pnztj4xtvmppj4sq3jnieqoesx" }, "CommD": { - "/": "bafk4chzavlx2s3zsomp6beohyevpbql477qyr7qnvgkvfwbbcqzfijo62arq" + "/": "baga6ea4seaqc3dgscuewdd76uubtaki6usrdki7b4os7otho2downpjspp2ruii" }, - "SectorID": 3, + "SectorID": 0, "Deal": { "PieceCID": { - "/": "bafk4chzavlx2s3zsomp6beohyevpbql477qyr7qnvgkvfwbbcqzfijo62arq" + "/": "baga6ea4seaqc3dgscuewdd76uubtaki6usrdki7b4os7otho2downpjspp2ruii" }, "PieceSize": 2048, - "Client": "t3qx4zrflimpjboxn3ivs6t4eel7frijxhcdvae6z6dtnocvz54yeop2kfdxggn7dfhl72cqqhsf6nf5fgkl3a", + "VerifiedDeal": false, + "Client": "t3s3g5ktor5jgqpwfhxufvpk5g7nfsoif5rhny33ibmxpkndalckm6gbknvyuaymfnc764s6mixu7z62xm7yza", "Provider": "t0106", + "Label": "0", "StartEpoch": 0, "EndEpoch": 9001, "StoragePricePerEpoch": "0", "ProviderCollateral": "0", "ClientCollateral": "0" }, - "ProofType": 4 + "ProofType": 0 }, { "CommR": { - "/": "bafk4ehza24k4j256kulsu34e4szjvmsbytibrx7kjzajc6c6rlcn2jfosada" + "/": "bagboea4b5abcal4itszbnmkiad3iasaqrndnejqqooxiiidu5ntgkybviipf5lid" }, "CommD": { - "/": "bafk4chzaqfni3wpij32pzgv2vuf63utnufburrjzrcoud75oz3pxkfisligq" + "/": "baga6ea4seaqmxjiljjcnscjhp2rc45tfjx5itjhpszsnaims7rzsdo5zlafqspq" }, - "SectorID": 4, + "SectorID": 1, "Deal": { "PieceCID": { - "/": "bafk4chzaqfni3wpij32pzgv2vuf63utnufburrjzrcoud75oz3pxkfisligq" + "/": "baga6ea4seaqmxjiljjcnscjhp2rc45tfjx5itjhpszsnaims7rzsdo5zlafqspq" }, "PieceSize": 2048, - "Client": "t3qx4zrflimpjboxn3ivs6t4eel7frijxhcdvae6z6dtnocvz54yeop2kfdxggn7dfhl72cqqhsf6nf5fgkl3a", + "VerifiedDeal": false, + "Client": "t3s3g5ktor5jgqpwfhxufvpk5g7nfsoif5rhny33ibmxpkndalckm6gbknvyuaymfnc764s6mixu7z62xm7yza", "Provider": "t0106", + "Label": "1", "StartEpoch": 0, "EndEpoch": 9001, "StoragePricePerEpoch": "0", "ProviderCollateral": "0", "ClientCollateral": "0" }, - "ProofType": 4 + "ProofType": 0 } ] } diff --git a/fixtures/genesis-sectors/pre-seal-t0106.key b/fixtures/genesis-sectors/pre-seal-t0106.key index 921b8fa400..e001d3f563 100644 --- a/fixtures/genesis-sectors/pre-seal-t0106.key +++ b/fixtures/genesis-sectors/pre-seal-t0106.key @@ -1 +1 @@ -7b2254797065223a22626c73222c22507269766174654b6579223a222f38556f58767a47495532482f546754416d73777839366d32645643586b52716e49496c44684a7247436f3d227d \ No newline at end of file +7b2254797065223a22626c73222c22507269766174654b6579223a224536552b4f6d6f2b61746a73634e4f306f524a765a66646d4b336c466c39776f305963574456686e3654593d227d \ No newline at end of file diff --git a/fixtures/genesis-sectors/sealed/s-t0106-0 b/fixtures/genesis-sectors/sealed/s-t0106-0 new file mode 100644 index 0000000000..ed9ff3793c Binary files /dev/null and b/fixtures/genesis-sectors/sealed/s-t0106-0 differ diff --git a/fixtures/genesis-sectors/sealed/s-t0106-1 b/fixtures/genesis-sectors/sealed/s-t0106-1 new file mode 100644 index 0000000000..ac8ae86b1f Binary files /dev/null and b/fixtures/genesis-sectors/sealed/s-t0106-1 differ diff --git a/fixtures/genesis-sectors/sealed/s-t0106-3 b/fixtures/genesis-sectors/sealed/s-t0106-3 deleted file mode 100644 index 9b8d9bdaeb..0000000000 Binary files a/fixtures/genesis-sectors/sealed/s-t0106-3 and /dev/null differ diff --git a/fixtures/genesis-sectors/sealed/s-t0106-4 b/fixtures/genesis-sectors/sealed/s-t0106-4 deleted file mode 100644 index 5c3760ae76..0000000000 Binary files a/fixtures/genesis-sectors/sealed/s-t0106-4 and /dev/null differ diff --git a/fixtures/genesis-sectors/sectorstore.json b/fixtures/genesis-sectors/sectorstore.json old mode 100755 new mode 100644 index 46e3e33343..415dd92278 --- a/fixtures/genesis-sectors/sectorstore.json +++ b/fixtures/genesis-sectors/sectorstore.json @@ -1,5 +1,5 @@ { - "ID": "0baa0d34-115b-48c8-9f9e-4c03fc1e2896", + "ID": "25baacb2-e4eb-42a1-8e66-587910bcced5", "Weight": 0, "CanSeal": false, "CanStore": false diff --git a/fixtures/genesis-sectors/staging/s-t0106-3 b/fixtures/genesis-sectors/staging/s-t0106-3 deleted file mode 100644 index 412c078dfc..0000000000 Binary files a/fixtures/genesis-sectors/staging/s-t0106-3 and /dev/null differ diff --git a/fixtures/genesis-sectors/staging/s-t0106-4 b/fixtures/genesis-sectors/staging/s-t0106-4 deleted file mode 100644 index 162019d0c3..0000000000 Binary files a/fixtures/genesis-sectors/staging/s-t0106-4 and /dev/null differ diff --git a/fixtures/networks/calibration.go b/fixtures/networks/calibration.go new file mode 100644 index 0000000000..261d6f3b95 --- /dev/null +++ b/fixtures/networks/calibration.go @@ -0,0 +1,66 @@ +package networks + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" +) + +type NetworkConf struct { + Bootstrap config.BootstrapConfig + Network config.NetworkParamsConfig +} + +func Calibration() *NetworkConf { + return &NetworkConf{ + Bootstrap: config.BootstrapConfig{ + Addresses: []string{ + "/dns4/bootstrap-0.calibration.fildev.network/tcp/1347/p2p/12D3KooWJkikQQkxS58spo76BYzFt4fotaT5NpV2zngvrqm4u5ow", + "/dns4/bootstrap-1.calibration.fildev.network/tcp/1347/p2p/12D3KooWLce5FDHR4EX4CrYavphA5xS3uDsX6aoowXh5tzDUxJav", + "/dns4/bootstrap-2.calibration.fildev.network/tcp/1347/p2p/12D3KooWA9hFfQG9GjP6bHeuQQbMD3FDtZLdW1NayxKXUT26PQZu", + "/dns4/bootstrap-3.calibration.fildev.network/tcp/1347/p2p/12D3KooWMHDi3LVTFG8Szqogt7RkNXvonbQYqSazxBx41A5aeuVz", + }, + MinPeerThreshold: 0, + Period: "30s", + }, + Network: config.NetworkParamsConfig{ + DevNet: true, + NetworkType: constants.NetworkCalibnet, + GenesisNetworkVersion: network.Version0, + BlockDelay: 30, + ConsensusMinerMinPower: 32 << 30, + ReplaceProofTypes: []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, + }, + ForkUpgradeParam: &config.ForkUpgradeConfig{ + UpgradeBreezeHeight: -1, + UpgradeSmokeHeight: -2, + UpgradeIgnitionHeight: -3, + UpgradeRefuelHeight: -4, + UpgradeAssemblyHeight: 30, + UpgradeTapeHeight: 60, + UpgradeLiftoffHeight: -5, + UpgradeKumquatHeight: 90, + UpgradePriceListOopsHeight: 119, + UpgradeCalicoHeight: 120, + UpgradePersianHeight: 100 + (120 * 1), + UpgradeOrangeHeight: 300, + UpgradeTrustHeight: 330, + UpgradeNorwegianHeight: 360, + UpgradeTurboHeight: 390, + UpgradeHyperdriveHeight: 420, + + BreezeGasTampingDuration: 120, + UpgradeClausHeight: 270, + UpgradeChocolateHeight: 312746, + UpgradeSnapDealsHeight: 99999999, + }, + DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 1}, + AddressNetwork: address.Testnet, + PreCommitChallengeDelay: abi.ChainEpoch(150), + }, + } +} diff --git a/fixtures/networks/forcenet.go b/fixtures/networks/forcenet.go new file mode 100644 index 0000000000..5a189f18b2 --- /dev/null +++ b/fixtures/networks/forcenet.go @@ -0,0 +1,61 @@ +package networks + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" +) + +func ForceNet() *NetworkConf { + return &NetworkConf{ + Bootstrap: config.BootstrapConfig{ + Addresses: []string{}, + + MinPeerThreshold: 0, + Period: "30s", + }, + Network: config.NetworkParamsConfig{ + DevNet: true, + ReplaceProofTypes: []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg8MiBV1, + abi.RegisteredSealProof_StackedDrg512MiBV1, + abi.RegisteredSealProof_StackedDrg32GiBV1, + }, + NetworkType: constants.NetworkForce, + GenesisNetworkVersion: network.Version14, + BlockDelay: 30, + ConsensusMinerMinPower: 2048, + ForkUpgradeParam: &config.ForkUpgradeConfig{ + UpgradeBreezeHeight: -1, + BreezeGasTampingDuration: 0, + UpgradeSmokeHeight: -1, + UpgradeIgnitionHeight: -2, + UpgradeRefuelHeight: -3, + UpgradeTapeHeight: -4, + UpgradeLiftoffHeight: -6, + // This signals our tentative epoch for mainnet launch. Can make it later, but not earlier. + // Miners, clients, developers, custodians all need time to prepare. + // We still have upgrades and state changes to do, but can happen after signaling timing here. + + UpgradeAssemblyHeight: -5, // critical: the network can bootstrap from v1 only + UpgradeKumquatHeight: -7, + UpgradePriceListOopsHeight: -8, + UpgradeCalicoHeight: -9, + UpgradePersianHeight: -10, + UpgradeOrangeHeight: -11, + UpgradeClausHeight: -12, + UpgradeTrustHeight: -13, + UpgradeNorwegianHeight: -14, + UpgradeTurboHeight: -15, + UpgradeHyperdriveHeight: -16, + UpgradeChocolateHeight: -17, + UpgradeSnapDealsHeight: -18, + }, + DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: config.DrandMainnet}, + AddressNetwork: address.Testnet, + PreCommitChallengeDelay: abi.ChainEpoch(10), + }, + } +} diff --git a/fixtures/networks/integrationtestnet.go b/fixtures/networks/integrationtestnet.go new file mode 100644 index 0000000000..28a1aed686 --- /dev/null +++ b/fixtures/networks/integrationtestnet.go @@ -0,0 +1,50 @@ +package networks + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/pkg/config" +) + +func IntegrationNet() *NetworkConf { + + return &NetworkConf{ + Bootstrap: config.BootstrapConfig{ + Addresses: []string{}, + MinPeerThreshold: 0, + Period: "30s", + }, + Network: config.NetworkParamsConfig{ + BlockDelay: 30, + ConsensusMinerMinPower: 10 << 40, + GenesisNetworkVersion: network.Version0, + ForkUpgradeParam: &config.ForkUpgradeConfig{ + UpgradeBreezeHeight: 41280, + UpgradeSmokeHeight: 51000, + UpgradeIgnitionHeight: 94000, + UpgradeRefuelHeight: 130800, + UpgradeAssemblyHeight: 138720, + UpgradeTapeHeight: 140760, + UpgradeLiftoffHeight: 148888, + UpgradeKumquatHeight: 170000, + UpgradePriceListOopsHeight: 265199, + UpgradeCalicoHeight: 265200, + UpgradePersianHeight: 265200 + (120 * 60), + UpgradeOrangeHeight: 336458, + UpgradeTrustHeight: 550321, + UpgradeNorwegianHeight: 665280, + UpgradeTurboHeight: 712320, + UpgradeHyperdriveHeight: 892800, + UpgradeChocolateHeight: 1231620, + UpgradeSnapDealsHeight: 999999999999, + + BreezeGasTampingDuration: 120, + UpgradeClausHeight: 343200, + }, + DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 5, 51000: 1}, + AddressNetwork: address.Testnet, + PreCommitChallengeDelay: abi.ChainEpoch(150), + }, + } +} diff --git a/fixtures/networks/interop.go b/fixtures/networks/interop.go deleted file mode 100644 index 2b884b134d..0000000000 --- a/fixtures/networks/interop.go +++ /dev/null @@ -1,80 +0,0 @@ -package networks - -import ( - "encoding/base64" - - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-filecoin/internal/pkg/config" -) - -type NetworkConf struct { - Bootstrap config.BootstrapConfig - Drand config.DrandConfig - Network config.NetworkParamsConfig -} - -func Interop() *NetworkConf { - const ( - interopBootstrap0 string = "/dns4/t01000.miner.interopnet.kittyhawk.wtf/tcp/1347/p2p/12D3KooWQfrGdBE8N2RzcnuHfyWZ4MBKMYZ6z1oPdhEbFxSNo1du" - interopBootstrap1 string = "/ip4/34.217.110.132/tcp/1347/p2p/12D3KooWQfrGdBE8N2RzcnuHfyWZ4MBKMYZ6z1oPdhEbFxSNo1du" - interopBootstrap2 string = "/dns4/peer0.interopnet.kittyhawk.wtf/tcp/1347/p2p/12D3KooWKmHh5mQofRhFr6f6qsT4ksL7qUtd2BWC24wPHVFL9gej" - interopBootstrap3 string = "/ip4/54.187.182.170/tcp/1347/p2p/12D3KooWKmHh5mQofRhFr6f6qsT4ksL7qUtd2BWC24wPHVFL9gej" - interopBootstrap4 string = "/dns4/peer1.interopnet.kittyhawk.wtf/tcp/1347/p2p/12D3KooWCWWtn3GMFVSn2PY7k9K7QkQTVA6p6wojUr5PgS5h1xtK" - interopBootstrap5 string = "/ip4/52.24.84.39/tcp/1347/p2p/12D3KooWCWWtn3GMFVSn2PY7k9K7QkQTVA6p6wojUr5PgS5h1xtK" - ) - - var interopDrandKeys = []string{ - "gsJ5zOdERQ5o3pjuCPlpigHdOPjjvjxT8rhA+50JrWKgtrh5geF54bFLyaLShMmF", - "gtUTCK00bGhvgbgJRVFZfXuWMpXL8xNAGpPfm69S1a6YqHdFvucIOaTW5lw0K9Fb", - "lO6/1T9LpqO4MEI2QAoS5ziF5aeBUJpcjUHS6LR2kj2OpgUmSbPBcoL1liF/lsXe", - "jcQjHkK07fOehu8VeUAWkkgGR5GCddp2fT5VjFINY3WtlTUwYQ/Sfa8RAYeHemXQ", - } - - var distKey [][]byte - for _, key := range interopDrandKeys { - bs, err := base64.StdEncoding.DecodeString(key) - if err != nil { - panic(err) - } - distKey = append(distKey, bs) - } - - return &NetworkConf{ - Bootstrap: config.BootstrapConfig{ - Addresses: []string{ - interopBootstrap0, - interopBootstrap1, - interopBootstrap2, - interopBootstrap3, - interopBootstrap4, - interopBootstrap5, - }, - MinPeerThreshold: 1, - Period: "10s", - }, - Drand: config.DrandConfig{ - Addresses: []string{ - "gabbi.drand.fil-test.net:443", - "linus.drand.fil-test.net:443", - "nicolas.drand.fil-test.net:443", - "mathilde.drand.fil-test.net:443", - "jeff.drand.fil-test.net:443", - "philipp.drand.fil-test.net:443", - "ludovic.drand.fil-test.net:443", - }, - Secure: true, - DistKey: distKey, - StartTimeUnix: 1588221360, - RoundSeconds: 30, - }, - Network: config.NetworkParamsConfig{ - ConsensusMinerMinPower: 2 << 30, - ReplaceProofTypes: []int64{ - int64(abi.RegisteredProof_StackedDRG512MiBSeal), - int64(abi.RegisteredProof_StackedDRG32GiBSeal), - int64(abi.RegisteredProof_StackedDRG64GiBSeal), - }, - }, - } -} diff --git a/fixtures/networks/interopnet.go b/fixtures/networks/interopnet.go new file mode 100644 index 0000000000..37f4fbd9ce --- /dev/null +++ b/fixtures/networks/interopnet.go @@ -0,0 +1,61 @@ +package networks + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" +) + +func InteropNet() *NetworkConf { + return &NetworkConf{ + Bootstrap: config.BootstrapConfig{ + Addresses: []string{ + "/dns4/bootstrap-0.interop.fildev.network/tcp/1347/p2p/12D3KooWN86wA54r3v9M8bBYbc1vK9W1ehHDxVGPRaoeUYuXF8R7", + "/dns4/bootstrap-1.interop.fildev.network/tcp/1347/p2p/12D3KooWNZ41kev8mtBZgWe43qam1VX9pJyf87jnaisQP2urZZ2M", + }, + MinPeerThreshold: 0, + Period: "30s", + }, + Network: config.NetworkParamsConfig{ + DevNet: true, + ReplaceProofTypes: []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg2KiBV1, + abi.RegisteredSealProof_StackedDrg8MiBV1, + abi.RegisteredSealProof_StackedDrg512MiBV1, + }, + NetworkType: constants.NetworkInterop, + GenesisNetworkVersion: network.Version0, + BlockDelay: 30, + ConsensusMinerMinPower: 2048, + MinVerifiedDealSize: 256, + ForkUpgradeParam: &config.ForkUpgradeConfig{ + UpgradeBreezeHeight: -1, + UpgradeSmokeHeight: -1, + UpgradeIgnitionHeight: -2, + UpgradeRefuelHeight: -3, + UpgradeAssemblyHeight: -5, + UpgradeTapeHeight: -4, + UpgradeLiftoffHeight: -6, + UpgradeKumquatHeight: -7, + UpgradePriceListOopsHeight: -8, + UpgradeCalicoHeight: -9, + UpgradePersianHeight: -10, + UpgradeOrangeHeight: -11, + UpgradeTrustHeight: -13, + UpgradeNorwegianHeight: -14, + UpgradeTurboHeight: -15, + UpgradeHyperdriveHeight: -16, + UpgradeChocolateHeight: -17, + UpgradeSnapDealsHeight: -18, + + BreezeGasTampingDuration: 0, + UpgradeClausHeight: -11, + }, + DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 1}, + AddressNetwork: address.Testnet, + PreCommitChallengeDelay: abi.ChainEpoch(10), + }, + } +} diff --git a/fixtures/networks/mainnet.go b/fixtures/networks/mainnet.go new file mode 100644 index 0000000000..f5c972d137 --- /dev/null +++ b/fixtures/networks/mainnet.go @@ -0,0 +1,71 @@ +package networks + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" +) + +func Mainnet() *NetworkConf { + return &NetworkConf{ + Bootstrap: config.BootstrapConfig{ + Addresses: []string{ + "/dns4/bootstrap-0.mainnet.filops.net/tcp/1347/p2p/12D3KooWCVe8MmsEMes2FzgTpt9fXtmCY7wrq91GRiaC8PHSCCBj", + "/dns4/bootstrap-1.mainnet.filops.net/tcp/1347/p2p/12D3KooWCwevHg1yLCvktf2nvLu7L9894mcrJR4MsBCcm4syShVc", + "/dns4/bootstrap-2.mainnet.filops.net/tcp/1347/p2p/12D3KooWEWVwHGn2yR36gKLozmb4YjDJGerotAPGxmdWZx2nxMC4", + "/dns4/bootstrap-3.mainnet.filops.net/tcp/1347/p2p/12D3KooWKhgq8c7NQ9iGjbyK7v7phXvG6492HQfiDaGHLHLQjk7R", + "/dns4/bootstrap-4.mainnet.filops.net/tcp/1347/p2p/12D3KooWL6PsFNPhYftrJzGgF5U18hFoaVhfGk7xwzD8yVrHJ3Uc", + "/dns4/bootstrap-5.mainnet.filops.net/tcp/1347/p2p/12D3KooWLFynvDQiUpXoHroV1YxKHhPJgysQGH2k3ZGwtWzR4dFH", + "/dns4/bootstrap-6.mainnet.filops.net/tcp/1347/p2p/12D3KooWP5MwCiqdMETF9ub1P3MbCvQCcfconnYHbWg6sUJcDRQQ", + "/dns4/bootstrap-7.mainnet.filops.net/tcp/1347/p2p/12D3KooWRs3aY1p3juFjPy8gPN95PEQChm2QKGUCAdcDCC4EBMKf", + "/dns4/bootstrap-8.mainnet.filops.net/tcp/1347/p2p/12D3KooWScFR7385LTyR4zU1bYdzSiiAb5rnNABfVahPvVSzyTkR", + "/dns4/lotus-bootstrap.forceup.cn/tcp/41778/p2p/12D3KooWFQsv3nRMUevZNWWsY1Wu6NUzUbawnWU5NcRhgKuJA37C", + "/dns4/bootstrap-0.starpool.in/tcp/12757/p2p/12D3KooWGHpBMeZbestVEWkfdnC9u7p6uFHXL1n7m1ZBqsEmiUzz", + "/dns4/bootstrap-1.starpool.in/tcp/12757/p2p/12D3KooWQZrGH1PxSNZPum99M1zNvjNFM33d1AAu5DcvdHptuU7u", + "/dns4/node.glif.io/tcp/1235/p2p/12D3KooWBF8cpp65hp2u9LK5mh19x67ftAam84z9LsfaquTDSBpt", + "/dns4/bootstrap-0.ipfsmain.cn/tcp/34721/p2p/12D3KooWQnwEGNqcM2nAcPtRR9rAX8Hrg4k9kJLCHoTR5chJfz6d", + "/dns4/bootstrap-1.ipfsmain.cn/tcp/34723/p2p/12D3KooWMKxMkD5DMpSWsW7dBddKxKT7L2GgbNuckz9otxvkvByP", + }, + MinPeerThreshold: 1, + Period: "30s", + }, + Network: config.NetworkParamsConfig{ + DevNet: false, + NetworkType: constants.NetworkMainnet, + GenesisNetworkVersion: network.Version0, + BlockDelay: 30, + ForkUpgradeParam: &config.ForkUpgradeConfig{ + UpgradeBreezeHeight: 41280, + UpgradeSmokeHeight: 51000, + UpgradeIgnitionHeight: 94000, + UpgradeRefuelHeight: 130800, + UpgradeAssemblyHeight: 138720, + UpgradeTapeHeight: 140760, + UpgradeLiftoffHeight: 148888, + // This signals our tentative epoch for mainnet launch. Can make it later, but not earlier. + // Miners, clients, developers, custodians all need time to prepare. + // We still have upgrades and state changes to do, but can happen after signaling timing here. + UpgradeKumquatHeight: 170000, + UpgradePriceListOopsHeight: 265199, + UpgradeCalicoHeight: 265200, + UpgradePersianHeight: 265200 + (builtin2.EpochsInHour * 60), + UpgradeOrangeHeight: 336458, + UpgradeTrustHeight: 550321, // 2021-03-04T00:00:30Z + UpgradeNorwegianHeight: 665280, // 2021-04-12T22:00:00Z + UpgradeTurboHeight: 712320, // 2021-04-29T06:00:00Z + UpgradeHyperdriveHeight: 892800, // 2021-06-30T22:00:00Z + UpgradeChocolateHeight: 1231620, + UpgradeSnapDealsHeight: 999999999999, + + BreezeGasTampingDuration: 120, + UpgradeClausHeight: 343200, // 2020-12-22T02:00:00Z + }, + DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 5, 51000: 1}, + AddressNetwork: address.Mainnet, + PreCommitChallengeDelay: abi.ChainEpoch(150), + }, + } +} diff --git a/fixtures/networks/net_2k.go b/fixtures/networks/net_2k.go new file mode 100644 index 0000000000..33e626851e --- /dev/null +++ b/fixtures/networks/net_2k.go @@ -0,0 +1,56 @@ +package networks + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" +) + +func Net2k() *NetworkConf { + return &NetworkConf{ + Bootstrap: config.BootstrapConfig{ + Addresses: []string{}, + MinPeerThreshold: 0, + Period: "30s", + }, + Network: config.NetworkParamsConfig{ + NetworkType: constants.Network2k, + GenesisNetworkVersion: network.Version14, + BlockDelay: 4, + ConsensusMinerMinPower: 2048, + MinVerifiedDealSize: 256, + ReplaceProofTypes: []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg2KiBV1, + abi.RegisteredSealProof_StackedDrg8MiBV1, + }, + ForkUpgradeParam: &config.ForkUpgradeConfig{ + UpgradeBreezeHeight: -1, + UpgradeSmokeHeight: -1, + UpgradeIgnitionHeight: -2, + UpgradeRefuelHeight: -3, + UpgradeTapeHeight: -4, + UpgradeAssemblyHeight: -5, + UpgradeLiftoffHeight: -6, + UpgradeKumquatHeight: -7, + UpgradePriceListOopsHeight: -8, + UpgradeCalicoHeight: -9, + UpgradePersianHeight: -10, + UpgradeOrangeHeight: -11, + UpgradeTrustHeight: -13, + UpgradeNorwegianHeight: -14, + UpgradeTurboHeight: -15, + UpgradeHyperdriveHeight: -16, + UpgradeChocolateHeight: -17, + UpgradeSnapDealsHeight: -18, + + BreezeGasTampingDuration: 0, + UpgradeClausHeight: -11, + }, + DrandSchedule: map[abi.ChainEpoch]config.DrandEnum{0: 1}, + AddressNetwork: address.Testnet, + PreCommitChallengeDelay: abi.ChainEpoch(10), + }, + } +} diff --git a/fixtures/networks/testnet.go b/fixtures/networks/testnet.go deleted file mode 100644 index 67d3dd501c..0000000000 --- a/fixtures/networks/testnet.go +++ /dev/null @@ -1,85 +0,0 @@ -package networks - -import ( - "encoding/base64" - - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-filecoin/internal/pkg/config" -) - -func Testnet() *NetworkConf { - const ( - testnetBootstrap0 string = "/dns4/bootstrap-0-sin.fil-test.net/tcp/1347/p2p/12D3KooWKNF7vNFEhnvB45E9mw2B5z6t419W3ziZPLdUDVnLLKGs" - testnetBootstrap1 string = "/ip4/86.109.15.57/tcp/1347/p2p/12D3KooWKNF7vNFEhnvB45E9mw2B5z6t419W3ziZPLdUDVnLLKGs" - testnetBootstrap2 string = "/dns4/bootstrap-0-dfw.fil-test.net/tcp/1347/p2p/12D3KooWECJTm7RUPyGfNbRwm6y2fK4wA7EB8rDJtWsq5AKi7iDr" - testnetBootstrap3 string = "/ip4/139.178.84.45/tcp/1347/p2p/12D3KooWECJTm7RUPyGfNbRwm6y2fK4wA7EB8rDJtWsq5AKi7iDr" - testnetBootstrap4 string = "/dns4/bootstrap-0-fra.fil-test.net/tcp/1347/p2p/12D3KooWC7MD6m7iNCuDsYtNr7xVtazihyVUizBbhmhEiyMAm9ym" - testnetBootstrap5 string = "/ip4/136.144.49.17/tcp/1347/p2p/12D3KooWC7MD6m7iNCuDsYtNr7xVtazihyVUizBbhmhEiyMAm9ym" - testnetBootstrap6 string = "/dns4/bootstrap-1-sin.fil-test.net/tcp/1347/p2p/12D3KooWD8eYqsKcEMFax6EbWN3rjA7qFsxCez2rmN8dWqkzgNaN" - testnetBootstrap7 string = "/ip4/86.109.15.55/tcp/1347/p2p/12D3KooWD8eYqsKcEMFax6EbWN3rjA7qFsxCez2rmN8dWqkzgNaN" - testnetBootstrap8 string = "/dns4/bootstrap-1-dfw.fil-test.net/tcp/1347/p2p/12D3KooWLB3RR8frLAmaK4ntHC2dwrAjyGzQgyUzWxAum1FxyyqD" - testnetBootstrap9 string = "/ip4/139.178.84.41/tcp/1347/p2p/12D3KooWLB3RR8frLAmaK4ntHC2dwrAjyGzQgyUzWxAum1FxyyqD" - testnetBootstrap10 string = "/dns4/bootstrap-1-fra.fil-test.net/tcp/1347/p2p/12D3KooWGPDJAw3HW4uVU3JEQBfFaZ1kdpg4HvvwRMVpUYbzhsLQ" - testnetBootstrap11 string = "/ip4/136.144.49.131/tcp/1347/p2p/12D3KooWGPDJAw3HW4uVU3JEQBfFaZ1kdpg4HvvwRMVpUYbzhsLQ" - ) - - var testnetDrandKeys = []string{ - "gsJ5zOdERQ5o3pjuCPlpigHdOPjjvjxT8rhA+50JrWKgtrh5geF54bFLyaLShMmF", - "gtUTCK00bGhvgbgJRVFZfXuWMpXL8xNAGpPfm69S1a6YqHdFvucIOaTW5lw0K9Fb", - "lO6/1T9LpqO4MEI2QAoS5ziF5aeBUJpcjUHS6LR2kj2OpgUmSbPBcoL1liF/lsXe", - "jcQjHkK07fOehu8VeUAWkkgGR5GCddp2fT5VjFINY3WtlTUwYQ/Sfa8RAYeHemXQ", - } - - var distKey [][]byte - for _, key := range testnetDrandKeys { - bs, err := base64.StdEncoding.DecodeString(key) - if err != nil { - panic(err) - } - distKey = append(distKey, bs) - } - - return &NetworkConf{ - Bootstrap: config.BootstrapConfig{ - Addresses: []string{ - testnetBootstrap0, - testnetBootstrap1, - testnetBootstrap2, - testnetBootstrap3, - testnetBootstrap4, - testnetBootstrap5, - testnetBootstrap6, - testnetBootstrap7, - testnetBootstrap8, - testnetBootstrap9, - testnetBootstrap10, - testnetBootstrap11, - }, - MinPeerThreshold: 1, - Period: "10s", - }, - Drand: config.DrandConfig{ - Addresses: []string{ - "gabbi.drand.fil-test.net:443", - "linus.drand.fil-test.net:443", - "nicolas.drand.fil-test.net:443", - "mathilde.drand.fil-test.net:443", - "jeff.drand.fil-test.net:443", - "philipp.drand.fil-test.net:443", - "ludovic.drand.fil-test.net:443", - }, - Secure: true, - DistKey: distKey, - StartTimeUnix: 1588221360, - RoundSeconds: 30, - }, - Network: config.NetworkParamsConfig{ - ConsensusMinerMinPower: 1024 << 30, - ReplaceProofTypes: []int64{ - int64(abi.RegisteredProof_StackedDRG32GiBSeal), - int64(abi.RegisteredProof_StackedDRG64GiBSeal), - }, - }, - } -} diff --git a/fixtures/proof-params/parameters.json b/fixtures/proof-params/parameters.json new file mode 100644 index 0000000000..1d45844545 --- /dev/null +++ b/fixtures/proof-params/parameters.json @@ -0,0 +1,152 @@ +{ + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0170db1f394b35d995252228ee359194b13199d259380541dc529fb0099096b0.params": { + "cid": "QmVxjFRyhmyQaZEtCh7nk2abc7LhFkzhnRX4rcHqCCpikR", + "digest": "7610b9f82bfc88405b7a832b651ce2f6", + "sector_size": 2048 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0170db1f394b35d995252228ee359194b13199d259380541dc529fb0099096b0.vk": { + "cid": "QmcS5JZs8X3TdtkEBpHAdUYjdNDqcL7fWQFtQz69mpnu2X", + "digest": "0e0958009936b9d5e515ec97b8cb792d", + "sector_size": 2048 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0cfb4f178bbb71cf2ecfcd42accce558b27199ab4fb59cb78f2483fe21ef36d9.params": { + "cid": "QmUiRx71uxfmUE8V3H9sWAsAXoM88KR4eo1ByvvcFNeTLR", + "digest": "1a7d4a9c8a502a497ed92a54366af33f", + "sector_size": 536870912 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0cfb4f178bbb71cf2ecfcd42accce558b27199ab4fb59cb78f2483fe21ef36d9.vk": { + "cid": "QmfCeddjFpWtavzfEzZpJfzSajGNwfL4RjFXWAvA9TSnTV", + "digest": "4dae975de4f011f101f5a2f86d1daaba", + "sector_size": 536870912 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-3ea05428c9d11689f23529cde32fd30aabd50f7d2c93657c1d3650bca3e8ea9e.params": { + "cid": "QmcSTqDcFVLGGVYz1njhUZ7B6fkKtBumsLUwx4nkh22TzS", + "digest": "82c88066be968bb550a05e30ff6c2413", + "sector_size": 2048 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-3ea05428c9d11689f23529cde32fd30aabd50f7d2c93657c1d3650bca3e8ea9e.vk": { + "cid": "QmSTCXF2ipGA3f6muVo6kHc2URSx6PzZxGUqu7uykaH5KU", + "digest": "ffd79788d614d27919ae5bd2d94eacb6", + "sector_size": 2048 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-50c7368dea9593ed0989e70974d28024efa9d156d585b7eea1be22b2e753f331.params": { + "cid": "QmU9SBzJNrcjRFDiFc4GcApqdApN6z9X7MpUr66mJ2kAJP", + "digest": "700171ecf7334e3199437c930676af82", + "sector_size": 8388608 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-50c7368dea9593ed0989e70974d28024efa9d156d585b7eea1be22b2e753f331.vk": { + "cid": "QmbmUMa3TbbW3X5kFhExs6WgC4KeWT18YivaVmXDkB6ANG", + "digest": "79ebb55f56fda427743e35053edad8fc", + "sector_size": 8388608 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-5294475db5237a2e83c3e52fd6c2b03859a1831d45ed08c4f35dbf9a803165a9.params": { + "cid": "QmdNEL2RtqL52GQNuj8uz6mVj5Z34NVnbaJ1yMyh1oXtBx", + "digest": "c49499bb76a0762884896f9683403f55", + "sector_size": 8388608 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-5294475db5237a2e83c3e52fd6c2b03859a1831d45ed08c4f35dbf9a803165a9.vk": { + "cid": "QmUiVYCQUgr6Y13pZFr8acWpSM4xvTXUdcvGmxyuHbKhsc", + "digest": "34d4feeacd9abf788d69ef1bb4d8fd00", + "sector_size": 8388608 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-7d739b8cf60f1b0709eeebee7730e297683552e4b69cab6984ec0285663c5781.params": { + "cid": "QmVgCsJFRXKLuuUhT3aMYwKVGNA9rDeR6DCrs7cAe8riBT", + "digest": "827359440349fe8f5a016e7598993b79", + "sector_size": 536870912 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-7d739b8cf60f1b0709eeebee7730e297683552e4b69cab6984ec0285663c5781.vk": { + "cid": "QmfA31fbCWojSmhSGvvfxmxaYCpMoXP95zEQ9sLvBGHNaN", + "digest": "bd2cd62f65c1ab84f19ca27e97b7c731", + "sector_size": 536870912 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-0377ded656c6f524f1618760bffe4e0a1c51d5a70c4509eedae8a27555733edc.params": { + "cid": "QmaUmfcJt6pozn8ndq1JVBzLRjRJdHMTPd4foa8iw5sjBZ", + "digest": "2cf49eb26f1fee94c85781a390ddb4c8", + "sector_size": 34359738368 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-0377ded656c6f524f1618760bffe4e0a1c51d5a70c4509eedae8a27555733edc.vk": { + "cid": "QmR9i9KL3vhhAqTBGj1bPPC7LvkptxrH9RvxJxLN1vvsBE", + "digest": "0f8ec542485568fa3468c066e9fed82b", + "sector_size": 34359738368 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-559e581f022bb4e4ec6e719e563bf0e026ad6de42e56c18714a2c692b1b88d7e.params": { + "cid": "Qmdtczp7p4wrbDofmHdGhiixn9irAcN77mV9AEHZBaTt1i", + "digest": "d84f79a16fe40e9e25a36e2107bb1ba0", + "sector_size": 34359738368 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-559e581f022bb4e4ec6e719e563bf0e026ad6de42e56c18714a2c692b1b88d7e.vk": { + "cid": "QmZCvxKcKP97vDAk8Nxs9R1fWtqpjQrAhhfXPoCi1nkDoF", + "digest": "fc02943678dd119e69e7fab8420e8819", + "sector_size": 34359738368 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-2627e4006b67f99cef990c0a47d5426cb7ab0a0ad58fc1061547bf2d28b09def.params": { + "cid": "QmeAN4vuANhXsF8xP2Lx5j2L6yMSdogLzpcvqCJThRGK1V", + "digest": "3810b7780ac0e299b22ae70f1f94c9bc", + "sector_size": 68719476736 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-2627e4006b67f99cef990c0a47d5426cb7ab0a0ad58fc1061547bf2d28b09def.vk": { + "cid": "QmWV8rqZLxs1oQN9jxNWmnT1YdgLwCcscv94VARrhHf1T7", + "digest": "59d2bf1857adc59a4f08fcf2afaa916b", + "sector_size": 68719476736 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-b62098629d07946e9028127e70295ed996fe3ed25b0f9f88eb610a0ab4385a3c.params": { + "cid": "QmVkrXc1SLcpgcudK5J25HH93QvR9tNsVhVTYHm5UymXAz", + "digest": "2170a91ad5bae22ea61f2ea766630322", + "sector_size": 68719476736 + }, + "v28-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-b62098629d07946e9028127e70295ed996fe3ed25b0f9f88eb610a0ab4385a3c.vk": { + "cid": "QmbfQjPD7EpzjhWGmvWAsyN2mAZ4PcYhsf3ujuhU9CSuBm", + "digest": "6d3789148fb6466d07ee1e24d6292fd6", + "sector_size": 68719476736 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-032d3138d22506ec0082ed72b2dcba18df18477904e35bafee82b3793b06832f.params": { + "cid": "QmWceMgnWYLopMuM4AoGMvGEau7tNe5UK83XFjH5V9B17h", + "digest": "434fb1338ecfaf0f59256f30dde4968f", + "sector_size": 2048 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-032d3138d22506ec0082ed72b2dcba18df18477904e35bafee82b3793b06832f.vk": { + "cid": "QmamahpFCstMUqHi2qGtVoDnRrsXhid86qsfvoyCTKJqHr", + "digest": "dc1ade9929ade1708238f155343044ac", + "sector_size": 2048 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-6babf46ce344ae495d558e7770a585b2382d54f225af8ed0397b8be7c3fcd472.params": { + "cid": "QmYBpTt7LWNAWr1JXThV5VxX7wsQFLd1PHrGYVbrU1EZjC", + "digest": "6c77597eb91ab936c1cef4cf19eba1b3", + "sector_size": 536870912 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-6babf46ce344ae495d558e7770a585b2382d54f225af8ed0397b8be7c3fcd472.vk": { + "cid": "QmWionkqH2B6TXivzBSQeSyBxojaiAFbzhjtwYRrfwd8nH", + "digest": "065179da19fbe515507267677f02823e", + "sector_size": 536870912 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-ecd683648512ab1765faa2a5f14bab48f676e633467f0aa8aad4b55dcb0652bb.params": { + "cid": "QmPXAPPuQtuQz7Zz3MHMAMEtsYwqM1o9H1csPLeiMUQwZH", + "digest": "09e612e4eeb7a0eb95679a88404f960c", + "sector_size": 8388608 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-ecd683648512ab1765faa2a5f14bab48f676e633467f0aa8aad4b55dcb0652bb.vk": { + "cid": "QmYCuipFyvVW1GojdMrjK1JnMobXtT4zRCZs1CGxjizs99", + "digest": "b687beb9adbd9dabe265a7e3620813e4", + "sector_size": 8388608 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-0-sha256_hasher-82a357d2f2ca81dc61bb45f4a762807aedee1b0a53fd6c4e77b46a01bfef7820.params": { + "cid": "QmengpM684XLQfG8754ToonszgEg2bQeAGUan5uXTHUQzJ", + "digest": "6a388072a518cf46ebd661f5cc46900a", + "sector_size": 34359738368 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-0-sha256_hasher-82a357d2f2ca81dc61bb45f4a762807aedee1b0a53fd6c4e77b46a01bfef7820.vk": { + "cid": "Qmf93EMrADXAK6CyiSfE8xx45fkMfR3uzKEPCvZC1n2kzb", + "digest": "0c7b4aac1c40fdb7eb82bc355b41addf", + "sector_size": 34359738368 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-2-sha256_hasher-96f1b4a04c5c51e4759bbf224bbc2ef5a42c7100f16ec0637123f16a845ddfb2.params": { + "cid": "QmS7ye6Ri2MfFzCkcUJ7FQ6zxDKuJ6J6B8k5PN7wzSR9sX", + "digest": "1801f8a6e1b00bceb00cc27314bb5ce3", + "sector_size": 68719476736 + }, + "v28-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-2-sha256_hasher-96f1b4a04c5c51e4759bbf224bbc2ef5a42c7100f16ec0637123f16a845ddfb2.vk": { + "cid": "QmehSmC6BhrgRZakPDta2ewoH9nosNzdjCqQRXsNFNUkLN", + "digest": "a89884252c04c298d0b3c81bfd884164", + "sector_size": 68719476736 + } +} diff --git a/fixtures/setup.json b/fixtures/setup.json index 578a35c618..2f6d62ad9a 100644 --- a/fixtures/setup.json +++ b/fixtures/setup.json @@ -1,7 +1,7 @@ { "seed": 4, "keysToGen": 5, - "importKeys": [{"privateKey":"/8UoXvzGIU2H/TgTAmswx96m2dVCXkRqnIIlDhJrGCo=","sigType":2}], + "importKeys": [{"privateKey":"E6U+Omo+atjscNO0oRJvZfdmK3lFl9wo0YcWDVhn6TY=","type":2}], "preallocatedFunds": [ "1000000", "1000000", @@ -13,27 +13,28 @@ "miners": [{ "owner": 5, "sealProofType": 3, + "marketBalance": "0", "committedSectors": [{ - "commR": {"/":"bafk4ehzaqugph7z7yajugw6wz6nn7x3akr3e32wecwexllfgqndnjt3nsaya"}, - "commD": {"/":"bafk4chzavlx2s3zsomp6beohyevpbql477qyr7qnvgkvfwbbcqzfijo62arq"}, + "commR": {"/":"bagboea4b5abcaziacbne3v3hh6bhgatc3dop72pnztj4xtvmppj4sq3jnieqoesx"}, + "commD": {"/":"baga6ea4seaqc3dgscuewdd76uubtaki6usrdki7b4os7otho2downpjspp2ruii"}, "sectorNum": 3, "proofType": 3, "dealCfg": { - "commP": {"/":"bafk4chzavlx2s3zsomp6beohyevpbql477qyr7qnvgkvfwbbcqzfijo62arq"}, + "commP": {"/":"baga6ea4seaqc3dgscuewdd76uubtaki6usrdki7b4os7otho2downpjspp2ruii"}, "pieceSize": 2048, "verified": false, - "endEpoch": 9001 + "endEpoch": 1000000 } },{ - "commR": {"/":"bafk4ehza24k4j256kulsu34e4szjvmsbytibrx7kjzajc6c6rlcn2jfosada"}, - "commD": {"/":"bafk4chzaqfni3wpij32pzgv2vuf63utnufburrjzrcoud75oz3pxkfisligq"}, + "commR": {"/":"bagboea4b5abcal4itszbnmkiad3iasaqrndnejqqooxiiidu5ntgkybviipf5lid"}, + "commD": {"/":"baga6ea4seaqmxjiljjcnscjhp2rc45tfjx5itjhpszsnaims7rzsdo5zlafqspq"}, "sectorNum": 4, "proofType": 3, "dealCfg": { - "commP": {"/":"bafk4chzaqfni3wpij32pzgv2vuf63utnufburrjzrcoud75oz3pxkfisligq"}, + "commP": {"/":"baga6ea4seaqmxjiljjcnscjhp2rc45tfjx5itjhpszsnaims7rzsdo5zlafqspq"}, "pieceSize": 2048, "verified": false, - "endEpoch": 9001 + "endEpoch": 1000000 } }] diff --git a/functional-tests/common.go b/functional-tests/common.go deleted file mode 100644 index 4a7aac73ce..0000000000 --- a/functional-tests/common.go +++ /dev/null @@ -1,91 +0,0 @@ -package functional - -import ( - "context" - "encoding/json" - "os" - "path/filepath" - "testing" - "time" - - "github.com/filecoin-project/go-address" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" -) - -// setup presealed sectors and use these paths to run test against sectors with larger sector size -//genCfgPath := filepath.Join("./512", "setup.json") -//presealPath := "./512" -func fixtureGenCfg() string { - wd, _ := os.Getwd() - return filepath.Join(wd, "..", "fixtures/setup.json") -} - -func fixturePresealPath() string { - wd, _ := os.Getwd() - return filepath.Join(wd, "..", "fixtures/genesis-sectors") -} - -func loadGenesisConfig(t *testing.T, path string) *gengen.GenesisCfg { - configFile, err := os.Open(path) - if err != nil { - t.Errorf("failed to open config file %s: %s", path, err) - } - defer func() { _ = configFile.Close() }() - - var cfg gengen.GenesisCfg - if err := json.NewDecoder(configFile).Decode(&cfg); err != nil { - t.Errorf("failed to parse config: %s", err) - } - return &cfg -} - -func makeNode(ctx context.Context, t *testing.T, seed *node.ChainSeed, chainClock clock.ChainEpochClock, drand drand.IFace) *node.Node { - builder := test.NewNodeBuilder(t). - WithBuilderOpt(node.ChainClockConfigOption(chainClock)). - WithGenesisInit(seed.GenesisInitFunc). - WithBuilderOpt(node.MonkeyPatchSetProofTypeOption(constants.DevRegisteredSealProof)) - if drand != nil { - builder = builder.WithBuilderOpt(node.DrandConfigOption(drand)) - } - return builder.Build(ctx) -} - -func initNodeGenesisMiner(ctx context.Context, t *testing.T, nd *node.Node, seed *node.ChainSeed, minerIdx int, presealPath string) (address.Address, address.Address, error) { - seed.GiveKey(t, nd, minerIdx) - miner, owner := seed.GiveMiner(t, nd, 0) - - gen, err := nd.Chain().ChainReader.GetGenesisBlock(ctx) - require.NoError(t, err) - - c := nd.Repo.Config() - c.SectorBase.PreSealedSectorsDirPath = presealPath - err = nd.Repo.ReplaceConfig(c) - require.NoError(t, err) - - err = node.InitSectors(ctx, nd.Repo, gen) - require.NoError(t, err) - return miner, owner, err -} - -func simulateBlockMining(ctx context.Context, t *testing.T, fakeClock clock.Fake, blockTime time.Duration, node *node.Node) { - var err error - for { - select { - case <-ctx.Done(): - return - default: - // check error from previous loop (but only if not done) - require.NoError(t, err) - - fakeClock.Advance(blockTime) - _, err = node.BlockMining.BlockMiningAPI.MiningOnce(ctx) - } - } -} diff --git a/functional-tests/drand_test.go b/functional-tests/drand_test.go deleted file mode 100644 index d299105e24..0000000000 --- a/functional-tests/drand_test.go +++ /dev/null @@ -1,58 +0,0 @@ -package functional - -import ( - "context" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestDrandPublic(t *testing.T) { - tf.FunctionalTest(t) - t.Skip(("requires local drand setup")) - - ctx := context.Background() - genTime := int64(1000000000) - blockTime := 30 * time.Second - propDelay := 6 * time.Second - // The clock is intentionally set some way ahead of the genesis time so the miner can produce - // catch-up blocks as quickly as possible. - fakeClock := clock.NewFake(time.Unix(genTime, 0).Add(4 * time.Hour)) - - // The fixture is needed in order to use the presealed genesis sectors fixture. - // Future code could decouple the whole setup.json from the presealed information. - genCfg := loadGenesisConfig(t, fixtureGenCfg()) - seed := node.MakeChainSeed(t, genCfg) - chainClock := clock.NewChainClockFromClock(uint64(genTime), blockTime, propDelay, fakeClock) - - nd := makeNode(ctx, t, seed, chainClock, nil) - - err := nd.Start(ctx) - require.NoError(t, err) - defer nd.Stop(ctx) - - err = nd.DrandAPI.Configure([]string{ - "drand-test3.nikkolasg.xyz:5003", - }, true, false) - require.NoError(t, err) - - entry1, err := nd.DrandAPI.GetEntry(ctx, 1) - require.NoError(t, err) - - assert.Equal(t, drand.Round(1), entry1.Round) - assert.NotNil(t, entry1.Data) - - entry2, err := nd.DrandAPI.GetEntry(ctx, 2) - require.NoError(t, err) - - valid, err := nd.DrandAPI.VerifyEntry(entry1, entry2) - require.NoError(t, err) - require.True(t, valid) -} diff --git a/functional-tests/faucet_test.go b/functional-tests/faucet_test.go deleted file mode 100644 index 32443e23b8..0000000000 --- a/functional-tests/faucet_test.go +++ /dev/null @@ -1,126 +0,0 @@ -package functional - -import ( - "bytes" - "context" - "fmt" - "io/ioutil" - "net/http" - "net/url" - "os" - "os/exec" - "strconv" - "strings" - "testing" - "time" - - "github.com/filecoin-project/go-address" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -var faucetBinary = "../tools/faucet/faucet" - -func TestFaucetSendFunds(t *testing.T) { - tf.FunctionalTest(t) - if _, err := os.Stat(faucetBinary); os.IsNotExist(err) { - panic("faucet not found, run `go run build/*.go build` to fix") - } - - ctx := context.Background() - genTime := int64(1000000000) - blockTime := 30 * time.Second - propDelay := 6 * time.Second - // Set clock ahead so the miner can produce catch-up blocks as quickly as possible. - fakeClock := clock.NewFake(time.Unix(genTime, 0).Add(1 * time.Hour)) - - genCfg := loadGenesisConfig(t, fixtureGenCfg()) - seed := node.MakeChainSeed(t, genCfg) - chainClock := clock.NewChainClockFromClock(uint64(genTime), blockTime, propDelay, fakeClock) - drandImpl := &drand.Fake{ - GenesisTime: time.Unix(genTime, 0).Add(-1 * blockTime), - FirstFilecoin: 0, - } - - nd := makeNode(ctx, t, seed, chainClock, drandImpl) - api, stopAPI := test.RunNodeAPI(ctx, nd, t) - defer stopAPI() - - _, owner, err := initNodeGenesisMiner(ctx, t, nd, seed, genCfg.Miners[0].Owner, fixturePresealPath()) - require.NoError(t, err) - err = nd.Start(ctx) - require.NoError(t, err) - defer nd.Stop(ctx) - - // Start faucet server - faucetctx, faucetcancel := context.WithCancel(context.Background()) - faucetDripFil := uint64(123) - MustStartFaucet(faucetctx, t, api.Address(), owner, faucetDripFil) - defer faucetcancel() - // Wait for faucet to be ready - time.Sleep(1 * time.Second) - - // Generate an address to receive funds. - targetKi, err := crypto.NewSecpKeyFromSeed(bytes.NewReader(bytes.Repeat([]byte{1, 2, 3, 4}, 16))) - require.NoError(t, err) - targetAddr, err := targetKi.Address() - require.NoError(t, err) - - // Make request for funds - msgcid := MustSendFundsFaucet(t, "localhost:9797", targetAddr) - assert.NotEmpty(t, msgcid) - - // Mine the block containing the message, and another one to evaluate that state. - for i := 0; i < 2; i++ { - _, err := nd.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - } - - // Check that funds have been transferred - expectedBalance := types.NewAttoFILFromFIL(faucetDripFil) - actr, err := nd.PorcelainAPI.ActorGet(ctx, targetAddr) - require.NoError(t, err) - assert.True(t, actr.Balance.Equals(expectedBalance)) -} - -// MustStartFaucet runs the faucet with a provided node API endpoint and wallet from which to source transfers. -func MustStartFaucet(ctx context.Context, t *testing.T, endpoint string, sourceWallet address.Address, faucetVal uint64) { - parts := strings.Split(endpoint, "/") - filAPI := fmt.Sprintf("%s:%s", parts[2], parts[4]) - - cmd := exec.CommandContext(ctx, - faucetBinary, - "-fil-api="+filAPI, - "-fil-wallet="+sourceWallet.String(), - "-faucet-val="+strconv.FormatUint(faucetVal, 10), - ) - if err := cmd.Start(); err != nil { - t.Fatal(err) - } -} - -// MustMustSendFundsFaucet sends funds to the given wallet address -func MustSendFundsFaucet(t *testing.T, host string, target address.Address) string { - data := url.Values{} - data.Set("target", target.String()) - - resp, err := http.PostForm("http://"+host+"/tap", data) - if err != nil { - t.Fatal(err) - } - if resp.StatusCode != 200 { - all, _ := ioutil.ReadAll(resp.Body) - t.Fatalf("faucet request failed: %d %s", resp.StatusCode, all) - } - - msgcid := resp.Header.Get("Message-Cid") - return msgcid -} diff --git a/functional-tests/lib/helpers.bash b/functional-tests/lib/helpers.bash deleted file mode 100755 index ccd03cad63..0000000000 --- a/functional-tests/lib/helpers.bash +++ /dev/null @@ -1,226 +0,0 @@ -#!/usr/bin/env bash - -set -eo pipefail - -function finish { - local -i MAX_WAIT=60 - - echo "" - echo "cleaning up..." - kill "$BOOTSTRAP_MN_PID" || true - kill "$STORAGE_MN_PID" || true - kill "$CL_PID" || true - - # Force KILL after MAX_WAIT seconds if the daemons don't exit - ( - sleep $MAX_WAIT && kill -9 "$BOOTSTRAP_MN_PID"; - echo "Sent SIGKILL to BOOTSTRAP_MN, daemon failed to stop within $MAX_WAIT second at end of test"; - ) & WAITER_BOOTSTRAP_MN=$! - - # Force KILL after MAX_WAIT seconds if the daemons don't exit - ( - sleep $MAX_WAIT && kill -9 "$STORAGE_MN_PID"; - echo "Sent SIGKILL to MN, daemon failed to stop within $MAX_WAIT second at end of test"; - ) & WAITER_MN=$! - - ( - sleep $MAX_WAIT && kill -9 "$CL_PID"; - echo "Sent SIGKILL to CL, daemon failed to stop within $MAX_WAIT second at end of test"; - ) & WAITER_CL=$! - - # Wait for daemons to exit - wait "$BOOTSTRAP_MN_PID" - wait "$STORAGE_MN_PID" - wait "$CL_PID" - - # Kill watchers - kill $WAITER_BOOTSTRAP_MN - kill $WAITER_MN - kill $WAITER_CL - - rm -f "${PIECE_1_PATH}" - rm -f "${PIECE_2_PATH}" - rm -f "${UNSEAL_PATH}" - rm -rf "${CL_REPO_DIR}" - rm -rf "${BOOTSTRAP_MN_REPO_DIR}" - rm -rf "${STORAGE_MN_REPO_DIR}" - rm -rf "${CL_SECTOR_DIR}" - rm -rf "${BOOTSTRAP_MN_SECTOR_DIR}" - rm -rf "${STORAGE_MN_SECTOR_DIR}" -} - -function free_port { - python -c "import socket; s = socket.socket(); s.bind(('', 0)); print(s.getsockname()[1])" -} - -function import_private_key { - ./go-filecoin wallet import "${FIXTURES_PATH}/$1".key \ - --repodir="$2" -} - -function init_local_daemon { - ./go-filecoin init \ - --auto-seal-interval-seconds="${AUTO_SEAL_INTERVAL_SECONDS}" \ - --repodir="$1" \ - --sectordir="$2" \ - --cmdapiaddr=/ip4/127.0.0.1/tcp/"$3" \ - --genesisfile="$4" -} - -function init_devnet_daemon { - if [[ "$CLUSTER" = "staging" ]]; then - ./go-filecoin init \ - --auto-seal-interval-seconds="${AUTO_SEAL_INTERVAL_SECONDS}" \ - --repodir="$1" \ - --cmdapiaddr=/ip4/127.0.0.1/tcp/"$2" \ - --devnet-staging \ - --genesisfile="http://test.kittyhawk.wtf:8020/genesis.car" - else - ./go-filecoin init \ - --auto-seal-interval-seconds="${AUTO_SEAL_INTERVAL_SECONDS}" \ - --repodir="$1" \ - --cmdapiaddr=/ip4/127.0.0.1/tcp/"$2" \ - --devnet-nightly \ - --genesisfile="http://nightly.kittyhawk.wtf:8020/genesis.car" - fi -} - -function start_daemon { - ./go-filecoin daemon \ - --repodir="$1" \ - --block-time="${BLOCK_TIME}" \ - --cmdapiaddr=/ip4/127.0.0.1/tcp/"$2" \ - --swarmlisten=/ip4/127.0.0.1/tcp/"$3" & -} - -function get_first_address { - ./go-filecoin id \ - --repodir="$1" \ - | jq -r ".Addresses[0]" -} - -function get_peer_id { - ./go-filecoin id \ - --repodir="$1" \ - | jq -r ".ID" -} - -function get_peers { - ./go-filecoin swarm peers \ - --repodir="$1" -} - -function wait_for_peers { - local __peers - - __peers=$(get_peers "$1") - until [[ ! -z "$__peers" ]]; do - __peers=$(get_peers "$1") - sleep 1 - done -} - -function swarm_connect { - ./go-filecoin swarm connect "$1" \ - --repodir="$2" - local __peers - - __peers=$(get_peers "$2") - until [[ "$__peers" = "$1" ]]; do - __peers=$(get_peers "$2") - sleep 1 - done -} - -function chain_ls { - ./go-filecoin chain ls --enc=json \ - --repodir="$1" -} - -function wait_for_message_in_chain_by_method_and_sender { - IFS=$'\n' # make newlines the only separator - - local __chain="" - local __hodl="" - - # set the maximum number of chain polls to FLOOR(seconds/10) - local __polls_remaining=$(($( printf "%.0f" "$4" )/10)) - - while [ -z $__hodl ]; do - # dump chain state to stdout if we time out - if [ $__polls_remaining -eq 0 ] - then - echo "timed out after waiting seconds=$4 for method=$1, sent from address=$2, to be included in repodir=$3 chain..." - chain_ls "$3" - unset IFS - exit 1 - fi - - __hodl=$(echo "$(chain_ls $3)" \ - | jq -r '.[].messages["/"]' | while read -r cid; do ./go-filecoin show messages $cid --enc=json --repodir=$3; done | jq -s 'add' \ - | jq ".[] | select(.meteredMessage != null) | .meteredMessage.message | select(.method == \"$1\").from | select(. == \"$2\")" 2>/dev/null | head -n 1 || true) - - __polls_remaining=$((__polls_remaining - 1)) - local seconds_remaining=$((__polls_remaining*10)) - echo "$(date "+%T") - sleeping for 10 seconds ($seconds_remaining seconds remaining - method=$1, sent from address=$2)" - echo "$__hodl" - sleep 10 - done - - unset IFS -} - -function create_miner { - ./go-filecoin miner create 100 \ - --gas-limit=10000 \ - --gas-price=1 \ - --repodir="$1" -} - -function send_fil { - ./go-filecoin message send \ - --from "$1" \ - --value $2 \ - --gas-limit=10000 \ - --gas-price=1 \ - "$3" \ - --repodir="$4" -} - -function set_wallet_default_address_in_config { - ./go-filecoin config wallet.defaultAddress \""$1"\" \ - --repodir="$2" -} - -function set_mining_address_in_config { - ./go-filecoin config mining.minerAddress \""$1"\" \ - --repodir="$2" -} - -function wait_mpool_size { - ./go-filecoin mpool \ - --wait-for-count="$1" \ - --repodir="$2" -} - -function set_price { - ./go-filecoin miner set-price --repodir="$3" --gas-price=1 --gas-limit=300 "$1" "$2" --enc=json | jq -r .MinerSetPriceResponse.AddAskCid.'"\/"' -} - -function miner_update_pid { - ./go-filecoin miner update-peerid "$1" "$2" \ - --gas-price=1 --gas-limit=300 \ - --repodir="$3" -} - -function message_wait { - ./go-filecoin message wait $1 --repodir=$2 -} - -function fork_message_wait { - eval "exec $1< <(./go-filecoin message wait $2 --repodir=$3)" -} - -function join { - cat <&"$1" -} diff --git a/functional-tests/mining_chain_test.go b/functional-tests/mining_chain_test.go deleted file mode 100644 index 34829a0a12..0000000000 --- a/functional-tests/mining_chain_test.go +++ /dev/null @@ -1,196 +0,0 @@ -package functional - -import ( - "context" - "testing" - "time" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/stretchr/testify/require" - "gotest.tools/assert" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/proofs" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -const defaultBlockTime = builtin.EpochDurationSeconds -const defaultPropDelay = 6 * time.Second - -func TestSingleMiner(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - genTime := int64(1000000000) - // The clock is intentionally set some way ahead of the genesis time so the miner can produce - // catch-up blocks as quickly as possible. - fakeClock := clock.NewFake(time.Unix(genTime, 0).Add(4 * time.Hour)) - - // The fixture is needed in order to use the presealed genesis sectors fixture. - // Future code could decouple the whole setup.json from the presealed information. - genCfg := loadGenesisConfig(t, fixtureGenCfg()) - seed := node.MakeChainSeed(t, genCfg) - chainClock := clock.NewChainClockFromClock(uint64(genTime), defaultBlockTime, defaultPropDelay, fakeClock) - - drandImpl := &drand.Fake{ - GenesisTime: time.Unix(genTime, 0).Add(-1 * defaultBlockTime), - FirstFilecoin: 0, - } - - nd := makeNode(ctx, t, seed, chainClock, drandImpl) - minerAddr, _, err := initNodeGenesisMiner(ctx, t, nd, seed, genCfg.Miners[0].Owner, fixturePresealPath()) - require.NoError(t, err) - - err = nd.Start(ctx) - require.NoError(t, err) - defer nd.Stop(ctx) - - // Inspect genesis state. - chainReader := nd.Chain().ChainReader - head := block.NewTipSetKey(chainReader.GenesisCid()) - assert.Assert(t, chainReader.GetHead().Equals(head)) - - // Mine a block. - blk, err := nd.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - assert.Equal(t, abi.ChainEpoch(1), blk.Height) - assert.Assert(t, head.Equals(blk.Parents)) - assert.Equal(t, minerAddr, blk.Miner) - assert.Assert(t, int64(blk.Timestamp) >= genTime) - assert.Assert(t, int64(blk.Timestamp) < genTime+defaultBlockTime) - head = block.NewTipSetKey(blk.Cid()) - - // Inspect chain state. - assert.Assert(t, chainReader.GetHead().Equals(head)) - - // Mine some more and expect a connected chain. - for i := 2; i <= 5; i++ { - blk, err = nd.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - assert.Assert(t, head.Equals(blk.Parents)) - assert.Equal(t, abi.ChainEpoch(i), blk.Height) - head = block.NewTipSetKey(blk.Cid()) - } -} - -func TestSyncFromSingleMiner(t *testing.T) { - tf.IntegrationTest(t) - ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) - defer cancel() - - genTime := int64(1000000000) - fakeClock := clock.NewFake(time.Unix(genTime, 0)) - - drandImpl := &drand.Fake{ - GenesisTime: time.Unix(genTime, 0).Add(-1 * defaultBlockTime), - FirstFilecoin: 0, - } - - genCfg := loadGenesisConfig(t, fixtureGenCfg()) - seed := node.MakeChainSeed(t, genCfg) - chainClock := clock.NewChainClockFromClock(uint64(genTime), defaultBlockTime, defaultPropDelay, fakeClock) - assert.Equal(t, fakeClock.Now(), chainClock.Now()) - - ndMiner := makeNode(ctx, t, seed, chainClock, drandImpl) - _, _, err := initNodeGenesisMiner(ctx, t, ndMiner, seed, genCfg.Miners[0].Owner, fixturePresealPath()) - require.NoError(t, err) - - ndValidator := makeNode(ctx, t, seed, chainClock, drandImpl) - - err = ndMiner.Start(ctx) - require.NoError(t, err) - err = ndValidator.Start(ctx) - require.NoError(t, err) - defer ndMiner.Stop(ctx) - defer ndValidator.Stop(ctx) - - node.ConnectNodes(t, ndValidator, ndMiner) - - // Check the nodes are starting in the same place. - head := ndMiner.Chain().ChainReader.GetHead() - assert.Assert(t, ndValidator.Chain().ChainReader.GetHead().Equals(head)) - - // Mine some blocks. - for i := 1; i <= 3; i++ { - fakeClock.Advance(defaultBlockTime) - blk, err := ndMiner.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - assert.Equal(t, abi.ChainEpoch(i), blk.Height) - head = block.NewTipSetKey(blk.Cid()) - } - - // Inspect validator node chain state. - require.NoError(t, th.WaitForIt(50, 20*time.Millisecond, func() (bool, error) { - return ndValidator.Chain().ChainReader.GetHead().Equals(head), nil - }), "validator failed to sync new head") -} - -func TestBootstrapWindowedPoSt(t *testing.T) { - // This test can require up to a whole proving period to elapse, which is slow even with fake proofs. - tf.FunctionalTest(t) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - genTime := int64(1000000000) - fakeClock := clock.NewFake(time.Unix(genTime, 0)) - - // Load genesis config fixture. - genCfg := loadGenesisConfig(t, fixtureGenCfg()) - // set proving period start to something soon - start := abi.ChainEpoch(0) - genCfg.Miners[0].ProvingPeriodStart = &start - - seed := node.MakeChainSeed(t, genCfg) - - // fake proofs so we can run through a proving period quickly - miner := test.NewNodeBuilder(t). - WithBuilderOpt(node.ChainClockConfigOption(clock.NewChainClockFromClock(uint64(genTime), defaultBlockTime, defaultPropDelay, fakeClock))). - WithGenesisInit(seed.GenesisInitFunc). - WithBuilderOpt(node.DrandConfigOption(&drand.Fake{ - GenesisTime: time.Unix(genTime, 0).Add(-1 * defaultBlockTime), - FirstFilecoin: 0, - })). - WithBuilderOpt(node.VerifierConfigOption(&proofs.FakeVerifier{})). - WithBuilderOpt(node.PoStGeneratorOption(&consensus.TestElectionPoster{})). - Build(ctx) - - _, _, err := initNodeGenesisMiner(ctx, t, miner, seed, genCfg.Miners[0].Owner, fixturePresealPath()) - require.NoError(t, err) - - err = miner.Start(ctx) - require.NoError(t, err) - - err = miner.StorageMining.Start(ctx) - require.NoError(t, err) - - // mine once to enter proving period - go simulateBlockMining(ctx, t, fakeClock, defaultBlockTime, miner) - - minerAddr := miner.Repo.Config().Mining.MinerAddress - - // Post should have been triggered, simulate mining while waiting for update to proving period start - for i := 0; i < 50; i++ { - head := miner.Chain().ChainReader.GetHead() - - view, err := miner.Chain().State.StateView(head) - require.NoError(t, err) - - poSts, err := view.MinerSuccessfulPoSts(ctx, minerAddr) - require.NoError(t, err) - - if poSts > 0 { - return - } - - // We need to mine enough blocks to get to get to the deadline that contains our sectors. Add some friction here. - time.Sleep(2 * time.Second) - } - t.Fatal("Timouut waiting for windowed PoSt") -} diff --git a/functional-tests/network-deployment/README.md b/functional-tests/network-deployment/README.md deleted file mode 100644 index d2af40b75a..0000000000 --- a/functional-tests/network-deployment/README.md +++ /dev/null @@ -1,68 +0,0 @@ -Network Deployment Tests -======================== - -These tests can be run against a deployed kittyhawk network to verify -expected behavior. - -All tests can be run by invoking the `test` command with the `-deployment ` -flag from the project root. A `go-filecoin` binary should be built and located in the -project root (`go run ./build build-filecoin`). - -``` -$ go run ./build test -deployment nightly -unit false -``` - -Their are currently four suported networks: `nightly`, `staging`, `users`, and `local`. - -The `local` network is primarly used to help during development as the network will run -with a `5s` block time and smaller 1KiB sectors. - -## Writing Tests - -A deployment test is any test with a call to `tf.Deployment(t)`. The call to `tf.Deployment` -returns the network name the test should be configured for. This value can be passed into -`fastesting.NewDeploymentEnvironment` so everything is configured correctly. - -Due to the large setup cost (chain syncing / processing) the same process can be used for -related tests as long as no state between tests is shared (creating a miner in one, and using it -in another). - -``` -package networkdeployment_test - -import ( - "context" - "testing" - - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/fastesting" -) - -func TestFoo(t *testing.T) { - network := tf.DeploymentTest(t) - - ctx := context.Background() - ctx, env := fastesting.NewDeploymentEnvironment(ctx, t, network, fast.FilecoinOpts{}) - - // Teardown will shutdown all running processes the environment knows about - // and cleanup anything the environment setup. This includes the directory - // the environment was created to use. - defer func() { - err := env.Teardown(ctx) - require.NoError(t, err) - }() - - node := env.RequireNewNodeWithFunds() - - // Tests can reuse the same enviroment or even a shared process. Tests should not depend - // on output of any other test such as a created miner, etc - - t.Run("Do something with node", func(t *testing.T) { - }) - - t.Run("Do something else with node", func(t *testing.T) { - }) -``` diff --git a/functional-tests/network-deployment/bootstrap_test.go b/functional-tests/network-deployment/bootstrap_test.go deleted file mode 100644 index 6925085384..0000000000 --- a/functional-tests/network-deployment/bootstrap_test.go +++ /dev/null @@ -1,98 +0,0 @@ -package networkdeployment_test - -import ( - "context" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/fastesting" - - pr "github.com/libp2p/go-libp2p-core/peer" - "github.com/multiformats/go-multiaddr" -) - -// TestBootstrap verifies information about the bootstrap peers -func TestBootstrap(t *testing.T) { - network := tf.DeploymentTest(t) - - ctx := context.Background() - ctx, env := fastesting.NewDeploymentEnvironment(ctx, t, network, fast.FilecoinOpts{}) - defer func() { - err := env.Teardown(ctx) - require.NoError(t, err) - }() - - client := env.RequireNewNodeStarted() - - t.Run("Check that we are connected to bootstrap peers", func(t *testing.T) { - maddrChan := make(chan multiaddr.Multiaddr, 16) - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - go func() { - defer close(maddrChan) - protop2p := multiaddr.ProtocolWithCode(multiaddr.P_P2P) - for { - select { - case <-ctx.Done(): - return - case <-time.After(5 * time.Second): - peers, err := client.SwarmPeers(ctx) - assert.NoError(t, err) - - for _, peer := range peers { - transport, err := multiaddr.NewMultiaddr(peer.Addr) - require.NoError(t, err) - - // /ipfs/ - peercomp, err := multiaddr.NewComponent(protop2p.Name, peer.Peer) - require.NoError(t, err) - - fullmaddr := transport.Encapsulate(peercomp) - maddrChan <- fullmaddr - } - } - } - }() - - bootstrapAddrs := networkBootstrapPeers(network) - require.NotEmpty(t, bootstrapAddrs) - - bootstrapPeers, err := createResolvedPeerInfoMap(ctx, bootstrapAddrs) - require.NoError(t, err) - - for maddr := range maddrChan { - pinfo, err := pr.AddrInfoFromP2pAddr(maddr) - require.NoError(t, err) - - if _, ok := bootstrapPeers[pinfo.ID]; !ok { - continue - } - - // pinfo will have only a single address as it comes from a single multiaddr - require.NotEmpty(t, pinfo.Addrs) - addr := pinfo.Addrs[0] - - t.Logf("Looking at addr %s", addr) - for _, a := range bootstrapPeers[pinfo.ID].Addrs { - if addr.Equal(a) { - t.Logf("Found addr for peer %s", pinfo.ID) - delete(bootstrapPeers, pinfo.ID) - } - } - - if len(bootstrapPeers) == 0 { - cancel() - } - - for peerID := range bootstrapPeers { - t.Logf("Still waiting for %s", peerID) - } - } - }) -} diff --git a/functional-tests/network-deployment/logging_test.go b/functional-tests/network-deployment/logging_test.go deleted file mode 100644 index 661199175d..0000000000 --- a/functional-tests/network-deployment/logging_test.go +++ /dev/null @@ -1,9 +0,0 @@ -package networkdeployment_test - -import ( - logging "github.com/ipfs/go-log/v2" -) - -func init() { - logging.SetAllLoggers(logging.LevelInfo) -} diff --git a/functional-tests/network-deployment/relay_check_test.go b/functional-tests/network-deployment/relay_check_test.go deleted file mode 100644 index 0cdabb9d4d..0000000000 --- a/functional-tests/network-deployment/relay_check_test.go +++ /dev/null @@ -1,316 +0,0 @@ -package networkdeployment_test - -import ( - "context" - "io" - "testing" - "time" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/fixtures/networks" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/fastesting" - - "github.com/ipfs/go-cid" - pr "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/routing" - "github.com/multiformats/go-multiaddr" - "github.com/multiformats/go-multiaddr-dns" -) - -// TestRelayCheck is a two part test -// 1) Check that the relay peers are advertising their addresses under -// the correct dht key -// 2) Check that a node behind a NAT aquires a circuit relay address from -// one of the relay peers -func TestRelayCheck(t *testing.T) { - network := tf.DeploymentTest(t) - - ctx := context.Background() - ctx, env := fastesting.NewDeploymentEnvironment(ctx, t, network, fast.FilecoinOpts{}) - defer func() { - err := env.Teardown(ctx) - require.NoError(t, err) - }() - - client := env.RequireNewNodeStarted() - - // In this test we query the dht looking for providers of the relay key - // and verify that all of the expected providers show up at some point. - t.Run("Check for relay providers", func(t *testing.T) { - dhtKey, err := cid.Decode("zb2rhZ6FpTqFZyiAtpQFRKmybPMjq5A7oPHfmD5WeBko5kRAo") - require.NoError(t, err) - - maddrChan := make(chan multiaddr.Multiaddr, 16) - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - eventChan, err := scanDhtProviders(ctx, t, client, dhtKey) - require.NoError(t, err) - - go func() { - defer close(maddrChan) - for event := range eventChan { - // There is only a single PeerInfo in the response see command `findprovs`. - pinfo := event.Responses[0] - - // For some reason if a peer responses to a query, it will not include its - // own addresses. This might be a bug. However, all it means is that we need - // to take at least two arounds from two different peers, which is largely - // just luck of the draw. - if len(pinfo.Addrs) == 0 { - t.Logf("No addresses returned for peer %s", pinfo.ID) - continue - } - - t.Logf("Found record for peer %s", pinfo.ID) - - // Converts the pinfo into a set of addresses - maddrs, err := pr.AddrInfoToP2pAddrs(pinfo) - if err != nil { - t.Logf("Failed to get maddrs") - continue - } - - for _, maddr := range maddrs { - maddrChan <- maddr - } - } - }() - - relayPeersAddrs := networkRelayPeers(network) - require.NotEmpty(t, relayPeersAddrs) - - // To verify that all of the relay peers are advertising correctly we need to - // see one of their addresses come through when we query the relay provider key. - // Below we construct a peer.ID mapping to a PeerInfo that contains addresses we - // expect to see. - // The address we expect to see is either the dns4 multiaddr from relayPeersAddrs, - // or the resolved ip4 address. - relayPeers, err := createResolvedPeerInfoMap(ctx, relayPeersAddrs) - require.NoError(t, err) - - for maddr := range maddrChan { - pinfo, err := pr.AddrInfoFromP2pAddr(maddr) - require.NoError(t, err) - - if _, ok := relayPeers[pinfo.ID]; !ok { - continue - } - - // pinfo will have only a single address as it comes from a single multiaddr - require.NotEmpty(t, pinfo.Addrs) - addr := pinfo.Addrs[0] - - t.Logf("Looking at addr %s", addr) - for _, a := range relayPeers[pinfo.ID].Addrs { - if addr.Equal(a) { - t.Logf("Found addr for peer %s", pinfo.ID) - delete(relayPeers, pinfo.ID) - } - } - - if len(relayPeers) == 0 { - cancel() - } - - for peerID := range relayPeers { - t.Logf("Still waiting for %s", peerID) - } - } - }) - - // In this test we want to verify that we retrieve a circuit relay address - // from one of our expected relay providers. - t.Run("Has circuit address", func(t *testing.T) { - details, err := client.ID(ctx) - require.NoError(t, err) - - maddrChan := make(chan multiaddr.Multiaddr, 16) - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - go func() { - defer close(maddrChan) - for { - select { - case <-ctx.Done(): - return - case <-time.After(5 * time.Second): - details, err := client.ID(ctx) - assert.NoError(t, err) - - for _, maddr := range details.Addresses { - maddrChan <- maddr - } - } - } - }() - - relayPeersAddrs := networkRelayPeers(network) - require.NotEmpty(t, relayPeersAddrs) - - relayPeers, err := createResolvedPeerInfoMap(ctx, relayPeersAddrs) - require.NoError(t, err) - - // To verify that we have a circuit address from one of our relays we need to - // strip off the circuit component, and compare the address to the known addresses - // of our relays - - protop2p := multiaddr.ProtocolWithCode(multiaddr.P_P2P) - protocircuit := multiaddr.ProtocolWithCode(multiaddr.P_CIRCUIT) - - // /ipfs/ - peercomp, err := multiaddr.NewComponent(protop2p.Name, details.ID.String()) - require.NoError(t, err) - - // /p2p-circuit - relaycomp, err := multiaddr.NewComponent(protocircuit.Name, "") - require.NoError(t, err) - - // /p2p-circuit/ipfs/ - relaypeer := relaycomp.Encapsulate(peercomp) - - for maddr := range maddrChan { - if _, err := maddr.ValueForProtocol(multiaddr.P_CIRCUIT); err != nil { - continue - } - - t.Logf("Found circuit addr %s", maddr) - - relayaddr := maddr.Decapsulate(relaypeer) - pinfo, err := pr.AddrInfoFromP2pAddr(relayaddr) - require.NoError(t, err) - - if _, ok := relayPeers[pinfo.ID]; !ok { - continue - } - - // pinfo will have only a single address as it comes from a single multiaddr - require.NotEmpty(t, pinfo.Addrs) - addr := pinfo.Addrs[0] - - if _, ok := relayPeers[pinfo.ID]; !ok { - t.Logf("Found circuit address %s from unexpected peer %s", maddr, pinfo.ID) - continue - } - - for _, a := range relayPeers[pinfo.ID].Addrs { - if addr.Equal(a) { - t.Logf("Addr relays through %s", pinfo.ID) - cancel() - break - } - } - } - }) -} - -func createResolvedPeerInfoMap(ctx context.Context, addrs []string) (map[pr.ID]*pr.AddrInfo, error) { - protop2p := multiaddr.ProtocolWithCode(multiaddr.P_P2P) - - relayPeers := make(map[pr.ID]*pr.AddrInfo) - for _, addr := range addrs { - maddr, err := multiaddr.NewMultiaddr(addr) - if err != nil { - return nil, err - } - - pinfo, err := pr.AddrInfoFromP2pAddr(maddr) - if err != nil { - return nil, err - } - - // PeerInfo stores just the transport of the multiaddr and removes the peer - // component from the end. However, when we resolve the dns4 address to ip4 - // we get back the full address, so we want to strip the peer component - // for consistently - - // This is the /ipfs/ component - peercomp, err := multiaddr.NewComponent(protop2p.Name, pinfo.ID.String()) - if err != nil { - return nil, err - } - - rmaddrs, err := madns.Resolve(ctx, maddr) - if err != nil { - return nil, err - } - - for _, maddr := range rmaddrs { - pinfo.Addrs = append(pinfo.Addrs, maddr.Decapsulate(peercomp)) - } - - relayPeers[pinfo.ID] = pinfo - } - - return relayPeers, nil -} - -// scanDhtProviders runs a `findprovs` at least every 5 seconds and reads through all -// of the events looking for `notif.Provider` events. These events contain PeerInfo -// which we convert into a slice of multiaddrs and publish on our maddrChan. -func scanDhtProviders(ctx context.Context, t *testing.T, node *fast.Filecoin, dhtKey cid.Cid) (<-chan routing.QueryEvent, error) { - eventChan := make(chan routing.QueryEvent, 16) - - go func() { - defer close(eventChan) - for { - select { - case <-ctx.Done(): - return - case <-time.After(5 * time.Second): - t.Logf("Finding Providers for %s", dhtKey) - decoder, err := node.DHTFindProvs(ctx, dhtKey) - if err != nil { - t.Logf("Failed to run `findprovs`: %s", err) - continue - } - - // Read all of the events from `findprovs` - for { - var event routing.QueryEvent - if err := decoder.Decode(&event); err != nil { - if err == io.EOF { - break - } - - t.Logf("Decode failed %s", err) - continue - } - - if event.Type == routing.Provider { - if len(event.Responses) == 0 { - t.Logf("No responses for provider event") - continue - } - - eventChan <- event - } - } - } - } - }() - - return eventChan, nil -} - -// returns the list of peer address for the network bootstrap peers -func networkBootstrapPeers(network string) []string { - // Currently all bootstrap addresses are relay peers - - switch network { - case "interop": - return networks.Interop().Bootstrap.Addresses - } - - return []string{} -} - -// returns the list of peer address for network relay peers -func networkRelayPeers(network string) []string { - return networkBootstrapPeers(network) -} diff --git a/functional-tests/plege_sector_test.go b/functional-tests/plege_sector_test.go deleted file mode 100644 index c26eee6aba..0000000000 --- a/functional-tests/plege_sector_test.go +++ /dev/null @@ -1,99 +0,0 @@ -package functional - -import ( - "context" - "testing" - "time" - - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" - - "github.com/stretchr/testify/require" -) - -func TestMiningPledgeSector(t *testing.T) { - tf.FunctionalTest(t) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - genTime := int64(1000000000) - blockTime := 1 * time.Second - propDelay := 200 * time.Millisecond - fakeClock := clock.NewFake(time.Unix(genTime, 0)) - - genCfg := loadGenesisConfig(t, fixtureGenCfg()) - genCfg.Miners = append(genCfg.Miners, &gengen.CreateStorageMinerConfig{ - Owner: 1, - SealProofType: constants.DevSealProofType, - }) - seed := node.MakeChainSeed(t, genCfg) - chainClock := clock.NewChainClockFromClock(uint64(genTime), blockTime, propDelay, fakeClock) - - drandImpl := &drand.Fake{ - GenesisTime: time.Unix(genTime, 0).Add(-1 * blockTime), - FirstFilecoin: 0, - } - - bootstrapMiner := makeNode(ctx, t, seed, chainClock, drandImpl) - _, _, err := initNodeGenesisMiner(ctx, t, bootstrapMiner, seed, genCfg.Miners[0].Owner, fixturePresealPath()) - require.NoError(t, err) - - newMiner := makeNode(ctx, t, seed, chainClock, drandImpl) - seed.GiveKey(t, newMiner, 1) - - err = bootstrapMiner.Start(ctx) - require.NoError(t, err) - err = newMiner.Start(ctx) - require.NoError(t, err) - defer bootstrapMiner.Stop(ctx) - defer newMiner.Stop(ctx) - - node.ConnectNodes(t, newMiner, bootstrapMiner) - - // Have bootstrap miner mine continuously so newMiner's pledgeSector can put multiple messages on chain. - go simulateBlockMining(ctx, t, fakeClock, blockTime, bootstrapMiner) - - // create a miner - env := commands.CreateServerEnv(ctx, newMiner) - porcelainAPI := commands.GetPorcelainAPI(env) - peer := newMiner.Network().Network.GetPeerID() - - _, err = porcelainAPI.MinerCreate(ctx, seed.Addr(t, 1), types.NewAttoFILFromFIL(1), 10000, abi.RegisteredProof_StackedDRG2KiBSeal, peer, types.NewAttoFILFromFIL(5)) - require.NoError(t, err) - - // setup mining with new miner address and start mining - require.NoError(t, newMiner.SetupMining(ctx)) - err = newMiner.StorageMining.Start(ctx) - require.NoError(t, err) - - err = newMiner.PieceManager().PledgeSector(ctx) - require.NoError(t, err) - - // wait while checking to see if the new miner has added any sectors (indicating sealing was successful) - for i := 0; i < 100; i++ { - ts, err := newMiner.PorcelainAPI.ChainHead() - require.NoError(t, err) - - maddr, err := newMiner.BlockMining.BlockMiningAPI.MinerAddress() - require.NoError(t, err) - - status, err := newMiner.PorcelainAPI.MinerGetStatus(ctx, maddr, ts.Key()) - require.NoError(t, err) - - if status.SectorCount > 0 { - return - } - - time.Sleep(2 * time.Second) - } - t.Fatal("Did not add sectors in the allotted time") -} diff --git a/functional-tests/retrieval b/functional-tests/retrieval deleted file mode 100755 index b853ba0f98..0000000000 --- a/functional-tests/retrieval +++ /dev/null @@ -1,229 +0,0 @@ -#!/usr/bin/env bash - -set -eo pipefail - -DIR="$(dirname "${BASH_SOURCE[0]}")" - -source "$DIR/lib/helpers.bash" - -export GO_FILECOIN_LOG_LEVEL=3 -export FILECOIN_PROOFS_FAST_DELAY_SECONDS=1 -export RUST_LOG=info - -if [ -z "$1" ]; then - FIXTURES_PATH="./fixtures/test" - COMMIT_SECTOR_AND_POST_TIMEOUT=120 -else - FIXTURES_PATH="./fixtures/live" - COMMIT_SECTOR_AND_POST_TIMEOUT=3600 -fi - -go run ./build/*.go build - -if [ -z "$2" ]; then - AUTO_SEAL_INTERVAL_SECONDS="0" -else - AUTO_SEAL_INTERVAL_SECONDS="$2" -fi - -# forward-declare stuff that we need to clean up -STORAGE_MN_PID="" -BOOTSTRAP_MN_PID="" -CL_PID="" -STORAGE_MN_REPO_DIR="" -BOOTSTRAP_MN_REPO_DIR="" -CL_REPO_DIR="" -STORAGE_MN_SECTOR_DIR="" -BOOTSTRAP_MN_SECTOR_DIR="" -CL_SECTOR_DIR="" -PIECE_1_PATH=$(mktemp) -PIECE_2_PATH=$(mktemp) -UNSEAL_PATH=$(mktemp) -BLOCK_TIME="5s" -HODL="HODL HODL HODL HODL HODL HODL HODL HODL HODL HODL HODL HODL HODL HODL HODL" - -if [ "${FIXTURES_PATH}" = "./fixtures/test" ] ; then - dd if=/dev/urandom of="${PIECE_1_PATH}" bs=1 count=500 - dd if=/dev/urandom of="${PIECE_2_PATH}" bs=1 count=500 -else - # Maximum number of user piece-bytes in a Live-configuration sector is - # equal to 266338304. Our first piece will not fill up the whole sector. - dd if=/dev/urandom of="${PIECE_1_PATH}" bs=$((1024*1024)) count=100 - # Adding this second piece will cause the sector sealing process to run. - dd if=/dev/urandom of="${PIECE_2_PATH}" bs=$((1024*1024)) count=100 -fi - -trap finish EXIT - -STORAGE_MN_REPO_DIR=$(mktemp -d $(mktemp -d /tmp/XXXXXX)/XXXXXX) -rm -rf $STORAGE_MN_REPO_DIR -STORAGE_MN_SECTOR_DIR=$(mktemp -d $(mktemp -d /tmp/XXXXXX)/XXXXXX) -STORAGE_MN_CMDAPI_PORT=$(free_port) -STORAGE_MN_SWARM_PORT=$(free_port) - -BOOTSTRAP_MN_REPO_DIR=$(mktemp -d $(mktemp -d /tmp/XXXXXX)/XXXXXX) -rm -rf $BOOTSTRAP_MN_REPO_DIR -BOOTSTRAP_MN_SECTOR_DIR=$(mktemp -d $(mktemp -d /tmp/XXXXXX)/XXXXXX) -BOOTSTRAP_MN_CMDAPI_PORT=$(free_port) -BOOTSTRAP_MN_SWARM_PORT=$(free_port) - -CL_REPO_DIR=$(mktemp -d $(mktemp -d /tmp/XXXXXX)/XXXXXX) -rm -rf $CL_REPO_DIR -CL_SECTOR_DIR=$(mktemp -d $(mktemp -d /tmp/XXXXXX)/XXXXXX) -CL_CMDAPI_PORT=$(free_port) -CL_SWARM_PORT=$(free_port) - -echo "" -echo "generating private keys..." -BOOTSTRAP_MN_MINER_FIL_ADDR=$(jq -r '.Miners[] | select(.Owner == 0).Address' < "${FIXTURES_PATH}/gen.json") - -echo "" -echo "initializing daemons..." -init_local_daemon "${BOOTSTRAP_MN_REPO_DIR}" "${BOOTSTRAP_MN_SECTOR_DIR}" "${BOOTSTRAP_MN_CMDAPI_PORT}" "${FIXTURES_PATH}/genesis.car" -init_local_daemon "${STORAGE_MN_REPO_DIR}" "${STORAGE_MN_SECTOR_DIR}" "${STORAGE_MN_CMDAPI_PORT}" "${FIXTURES_PATH}/genesis.car" -init_local_daemon "${CL_REPO_DIR}" "${CL_SECTOR_DIR}" "${CL_CMDAPI_PORT}" "${FIXTURES_PATH}/genesis.car" - -echo "" -echo "start daemons..." -start_daemon "${STORAGE_MN_REPO_DIR}" "${STORAGE_MN_CMDAPI_PORT}" "${STORAGE_MN_SWARM_PORT}" -STORAGE_MN_PID=$! -start_daemon "${BOOTSTRAP_MN_REPO_DIR}" "${BOOTSTRAP_MN_CMDAPI_PORT}" "${BOOTSTRAP_MN_SWARM_PORT}" -BOOTSTRAP_MN_PID=$! -start_daemon "${CL_REPO_DIR}" "${CL_CMDAPI_PORT}" "${CL_SWARM_PORT}" -CL_PID=$! - -sleep 2 - -echo "" -echo "client imports pieces..." -PIECE_1_CID=$(./go-filecoin client import --repodir="${CL_REPO_DIR}" < "${PIECE_1_PATH}") -PIECE_2_CID=$(./go-filecoin client import --repodir="${CL_REPO_DIR}" < "${PIECE_2_PATH}") - -echo "" -echo "importing private keys..." -BOOTSTRAP_MN_MINER_OWNER_FIL_ADDR=$(import_private_key 0 "${BOOTSTRAP_MN_REPO_DIR}") -CL_FIL_ADDRESS=$(import_private_key 1 "${CL_REPO_DIR}") -STORAGE_MN_MINER_OWNER_FIL_ADDR=$(import_private_key 2 "${STORAGE_MN_REPO_DIR}") - -echo "" -echo "ensure that miner address is set so that the bootstrap miner-node can mine..." -set_mining_address_in_config "${BOOTSTRAP_MN_MINER_FIL_ADDR}" "${BOOTSTRAP_MN_REPO_DIR}" - -echo "" -echo "node default address should match what's associated with imported SK..." -set_wallet_default_address_in_config "${CL_FIL_ADDRESS}" "${CL_REPO_DIR}" -set_wallet_default_address_in_config "${BOOTSTRAP_MN_MINER_OWNER_FIL_ADDR}" "${BOOTSTRAP_MN_REPO_DIR}" -set_wallet_default_address_in_config "${STORAGE_MN_MINER_OWNER_FIL_ADDR}" "${STORAGE_MN_REPO_DIR}" - -echo "" -echo "get storage mining node's libp2p identity..." -STORAGE_MN_PEER_ID=$(get_peer_id "${STORAGE_MN_REPO_DIR}") - -echo "" -echo "connecting daemons..." -swarm_connect "$(get_first_address "${CL_REPO_DIR}")" "${BOOTSTRAP_MN_REPO_DIR}" -swarm_connect "$(get_first_address "${BOOTSTRAP_MN_REPO_DIR}")" "${STORAGE_MN_REPO_DIR}" - -echo "" -echo "" -echo "" -echo "********************** BEGIN STORAGE PROTOCOL" -echo "" -echo "" -echo "" - -echo "" -echo "bootstrap miner node starts mining (so that messages can be processed)..." -./go-filecoin mining start \ - --repodir="$BOOTSTRAP_MN_REPO_DIR" \ - -echo "" -echo "bootstrap miner shares some funds with the storage miner..." -SEND_FIL_MSG_CID=$(send_fil "$BOOTSTRAP_MN_MINER_OWNER_FIL_ADDR" 100 "${STORAGE_MN_MINER_OWNER_FIL_ADDR}" "${BOOTSTRAP_MN_REPO_DIR}") - -echo "" -echo "block until FIL-transferring messages are in blockchain..." -message_wait "${SEND_FIL_MSG_CID}" "${BOOTSTRAP_MN_REPO_DIR}" -message_wait "${SEND_FIL_MSG_CID}" "${CL_REPO_DIR}" -message_wait "${SEND_FIL_MSG_CID}" "${STORAGE_MN_REPO_DIR}" - -echo "" -echo "create a new miner actor (for storage miner)..." -STORAGE_MN_MINER_FIL_ADDR=$(create_miner "${STORAGE_MN_REPO_DIR}") - -echo "" -echo "storage miner node starts mining (so that it processes storage proposals)..." -./go-filecoin mining start \ - --repodir="$STORAGE_MN_REPO_DIR" \ - -echo "" -echo "update miner's libp2p identity to match its node's..." -STORAGE_MN_MINER_UPDATE_PID_MSG_CID=$(miner_update_pid "${STORAGE_MN_MINER_FIL_ADDR}" "${STORAGE_MN_PEER_ID}" "${STORAGE_MN_REPO_DIR}") - -echo "" -echo "storage miner adds its ask to the market..." -STORAGE_MN_MINER_SET_PRICE_MSG_CID=$(set_price 10 10000 "${STORAGE_MN_REPO_DIR}") - -echo "" -echo "block until miner peer id-update and set price-messages appear in chains..." -message_wait "${STORAGE_MN_MINER_UPDATE_PID_MSG_CID}" "${BOOTSTRAP_MN_REPO_DIR}" -message_wait "${STORAGE_MN_MINER_UPDATE_PID_MSG_CID}" "${CL_REPO_DIR}" -message_wait "${STORAGE_MN_MINER_UPDATE_PID_MSG_CID}" "${STORAGE_MN_REPO_DIR}" -message_wait "${STORAGE_MN_MINER_SET_PRICE_MSG_CID}" "${BOOTSTRAP_MN_REPO_DIR}" -message_wait "${STORAGE_MN_MINER_SET_PRICE_MSG_CID}" "${CL_REPO_DIR}" -message_wait "${STORAGE_MN_MINER_SET_PRICE_MSG_CID}" "${STORAGE_MN_REPO_DIR}" - -echo "" -echo "client proposes a storage deal, which transfers file 1..." -PROPOSAL1_CID=$(./go-filecoin client propose-storage-deal "${STORAGE_MN_MINER_FIL_ADDR}" "${PIECE_1_CID}" 0 5 --repodir="$CL_REPO_DIR" --enc=json | jq -r '.ProposalCid["/"]') -echo "proposal 1 cid: $PROPOSAL1_CID" - -echo "" -echo "client proposes a storage deal, which transfers piece 2..." -PROPOSAL2_CID=$(./go-filecoin client propose-storage-deal "${STORAGE_MN_MINER_FIL_ADDR}" "${PIECE_2_CID}" 0 5 --repodir="$CL_REPO_DIR" --enc=json | jq -r '.ProposalCid["/"]') -echo "proposal 2 cid: $PROPOSAL2_CID" - -echo "" -echo "wait for commitSector sent by miner owner to be included in a block viewable by all nodes..." -wait_for_message_in_chain_by_method_and_sender commitSector "${STORAGE_MN_MINER_OWNER_FIL_ADDR}" "${CL_REPO_DIR}" "${COMMIT_SECTOR_AND_POST_TIMEOUT}" -wait_for_message_in_chain_by_method_and_sender commitSector "${STORAGE_MN_MINER_OWNER_FIL_ADDR}" "${BOOTSTRAP_MN_REPO_DIR}" "${COMMIT_SECTOR_AND_POST_TIMEOUT}" -wait_for_message_in_chain_by_method_and_sender commitSector "${STORAGE_MN_MINER_OWNER_FIL_ADDR}" "${STORAGE_MN_REPO_DIR}" "${COMMIT_SECTOR_AND_POST_TIMEOUT}" - -echo "" -echo "wait for submitPoSt, too..." -wait_for_message_in_chain_by_method_and_sender submitPoSt "${STORAGE_MN_MINER_OWNER_FIL_ADDR}" "${CL_REPO_DIR}" "${COMMIT_SECTOR_AND_POST_TIMEOUT}" -wait_for_message_in_chain_by_method_and_sender submitPoSt "${STORAGE_MN_MINER_OWNER_FIL_ADDR}" "${BOOTSTRAP_MN_REPO_DIR}" "${COMMIT_SECTOR_AND_POST_TIMEOUT}" -wait_for_message_in_chain_by_method_and_sender submitPoSt "${STORAGE_MN_MINER_OWNER_FIL_ADDR}" "${STORAGE_MN_REPO_DIR}" "${COMMIT_SECTOR_AND_POST_TIMEOUT}" - -echo "" -echo "storage deal 1 status:" -./go-filecoin client query-storage-deal "${PROPOSAL1_CID}" --repodir="$CL_REPO_DIR" --enc=json | jq . - -echo "" -echo "storage deal 2 status:" -./go-filecoin client query-storage-deal "${PROPOSAL2_CID}" --repodir="$CL_REPO_DIR" --enc=json | jq . - -echo "" -echo "" -echo "" -echo "********************** BEGIN RETRIEVAL PROTOCOL" -echo "" -echo "" -echo "" - -./go-filecoin retrieval-client retrieve-piece "${STORAGE_MN_MINER_FIL_ADDR}" "${PIECE_1_CID}" \ - --repodir="${CL_REPO_DIR}" > "${UNSEAL_PATH}" - -GOT=$(shasum < "${UNSEAL_PATH}") -EXPECTED=$(shasum < "${PIECE_1_PATH}") - -if [ "${GOT}" = "${EXPECTED}" ]; then - echo "Round trip passed!" - exit 0 -else - echo "Round trip Failed!, expected file" - echo "${UNSEAL_PATH}" - echo "to have same contents as file" - echo "${PIECE_1_PATH}" - exit 1 -fi diff --git a/functional-tests/run b/functional-tests/run deleted file mode 100755 index 63c54409bb..0000000000 --- a/functional-tests/run +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -o pipefail - -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" - -# Go tests -go test -v "./$(basename $DIR)/..." -functional - -# Shell Tests -. $DIR/retrieval - - diff --git a/go.mod b/go.mod index c4ea375001..ac8d08121e 100644 --- a/go.mod +++ b/go.mod @@ -1,105 +1,145 @@ -module github.com/filecoin-project/go-filecoin +module github.com/filecoin-project/venus -go 1.13 +go 1.16 require ( - contrib.go.opencensus.io/exporter/jaeger v0.1.0 - contrib.go.opencensus.io/exporter/prometheus v0.1.0 + contrib.go.opencensus.io/exporter/jaeger v0.2.1 + contrib.go.opencensus.io/exporter/prometheus v0.4.0 github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect + github.com/Gurpartap/async v0.0.0-20180927173644-4f7f499dd9ee github.com/Microsoft/go-winio v0.4.14 // indirect - github.com/cskr/pubsub v1.0.2 + github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d + github.com/awnumar/memguard v0.22.2 + github.com/bluele/gcache v0.0.0-20190518031135-bc40bd653833 + github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e + github.com/dgraph-io/badger/v2 v2.2007.3 github.com/docker/distribution v2.7.1+incompatible // indirect github.com/docker/docker v0.7.3-0.20190315170154-87d593639c77 github.com/docker/go-connections v0.4.0 // indirect - github.com/docker/go-units v0.4.0 // indirect - github.com/drand/drand v0.8.1 - github.com/drand/kyber v1.0.1-0.20200331114745-30e90cc60f99 - github.com/filecoin-project/chain-validation v0.0.6-0.20200518190139-483332336e8e - github.com/filecoin-project/filecoin-ffi v0.26.1-0.20200508175440-05b30afeb00d - github.com/filecoin-project/go-address v0.0.2-0.20200218010043-eb9bb40ed5be - github.com/filecoin-project/go-amt-ipld/v2 v2.0.1-0.20200424220931-6263827e49f2 - github.com/filecoin-project/go-bitfield v0.0.1 + github.com/docker/go-units v0.4.0 + github.com/drand/drand v1.2.1 + github.com/drand/kyber v1.1.4 + github.com/fatih/color v1.10.0 + github.com/filecoin-project/filecoin-ffi v0.30.4-0.20200910194244-f640612a1a1f + github.com/filecoin-project/go-address v0.0.5 + github.com/filecoin-project/go-amt-ipld/v2 v2.1.1-0.20201006184820-924ee87a1349 // indirect + github.com/filecoin-project/go-bitfield v0.2.4 + github.com/filecoin-project/go-cbor-util v0.0.0-20201016124514-d0bbec7bfcc4 + github.com/filecoin-project/go-commp-utils v0.1.3 github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 - github.com/filecoin-project/go-data-transfer v0.3.0 - github.com/filecoin-project/go-fil-commcid v0.0.0-20200208005934-2b8bd03caca5 - github.com/filecoin-project/go-fil-markets v0.2.7 + github.com/filecoin-project/go-data-transfer v1.12.0 + github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a + github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec github.com/filecoin-project/go-leb128 v0.0.0-20190212224330-8d79a5489543 - github.com/filecoin-project/go-paramfetch v0.0.2-0.20200505180321-973f8949ea8e - github.com/filecoin-project/go-statestore v0.1.0 - github.com/filecoin-project/go-storedcounter v0.0.0-20200421200003-1c99c62e8a5b - github.com/filecoin-project/sector-storage v0.0.0-20200508203401-a74812ba12f3 - github.com/filecoin-project/specs-actors v0.5.3 - github.com/filecoin-project/storage-fsm v0.0.0-20200508212339-4980cb4c92b1 - github.com/fxamacker/cbor/v2 v2.2.0 - github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect - github.com/golangci/golangci-lint v1.21.0 + github.com/filecoin-project/go-paramfetch v0.0.2 + github.com/filecoin-project/go-state-types v0.1.1 + github.com/filecoin-project/specs-actors v0.9.14 + github.com/filecoin-project/specs-actors/v2 v2.3.6 + github.com/filecoin-project/specs-actors/v3 v3.1.1 + github.com/filecoin-project/specs-actors/v4 v4.0.1 + github.com/filecoin-project/specs-actors/v5 v5.0.4 + github.com/filecoin-project/specs-actors/v6 v6.0.1 + github.com/filecoin-project/specs-actors/v7 v7.0.0-20211118013026-3dce48197cec + github.com/filecoin-project/specs-storage v0.1.1-0.20201105051918-5188d9774506 + github.com/filecoin-project/test-vectors/schema v0.0.5 + github.com/filecoin-project/venus-auth v1.3.1-0.20210809053831-012d55d5f578 + github.com/gbrlsnchs/jwt/v3 v3.0.0 + github.com/go-errors/errors v1.0.1 + github.com/go-kit/kit v0.10.0 + github.com/golang/mock v1.6.0 + github.com/golang/snappy v0.0.2-0.20190904063534-ff6b7dc882cf // indirect + github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a + github.com/golangci/golangci-lint v1.39.0 + github.com/google/flatbuffers v2.0.0+incompatible // indirect github.com/google/go-github v17.0.0+incompatible - github.com/google/go-querystring v1.0.0 // indirect - github.com/google/uuid v1.1.1 - github.com/ipfs/go-bitswap v0.2.8 - github.com/ipfs/go-block-format v0.0.2 - github.com/ipfs/go-blockservice v0.1.3 - github.com/ipfs/go-cid v0.0.5 - github.com/ipfs/go-datastore v0.4.4 - github.com/ipfs/go-ds-badger2 v0.0.0-20200211201106-609c9d2a39c7 - github.com/ipfs/go-fs-lock v0.0.1 - github.com/ipfs/go-graphsync v0.0.6-0.20200504202014-9d5f2c26a103 - github.com/ipfs/go-hamt-ipld v0.1.1-0.20200501020327-d53d20a7063e - github.com/ipfs/go-ipfs-blockstore v1.0.0 + github.com/google/uuid v1.3.0 + github.com/hako/durafmt v0.0.0-20200710122514-c0fb7b4da026 + github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e + github.com/hashicorp/go-multierror v1.1.1 + github.com/hashicorp/golang-lru v0.5.4 + github.com/howeyc/gopass v0.0.0-20190910152052-7cb4b85ec19c + github.com/ipfs-force-community/metrics v1.0.1-0.20211022060227-11142a08b729 + github.com/ipfs-force-community/venus-common-utils v0.0.0-20210714054928-2042a9040759 + github.com/ipfs/go-bitswap v0.5.1 + github.com/ipfs/go-block-format v0.0.3 + github.com/ipfs/go-blockservice v0.2.1 + github.com/ipfs/go-cid v0.1.0 + github.com/ipfs/go-datastore v0.5.1 + github.com/ipfs/go-ds-badger2 v0.1.2 + github.com/ipfs/go-fs-lock v0.0.6 + github.com/ipfs/go-graphsync v0.11.0 + github.com/ipfs/go-ipfs-blockstore v1.1.2 github.com/ipfs/go-ipfs-chunker v0.0.5 github.com/ipfs/go-ipfs-cmdkit v0.0.1 - github.com/ipfs/go-ipfs-cmds v0.0.1 - github.com/ipfs/go-ipfs-exchange-interface v0.0.1 - github.com/ipfs/go-ipfs-exchange-offline v0.0.1 + github.com/ipfs/go-ipfs-cmds v0.5.0 + github.com/ipfs/go-ipfs-ds-help v1.1.0 + github.com/ipfs/go-ipfs-exchange-interface v0.1.0 + github.com/ipfs/go-ipfs-exchange-offline v0.1.1 github.com/ipfs/go-ipfs-files v0.0.8 - github.com/ipfs/go-ipfs-keystore v0.0.1 - github.com/ipfs/go-ipfs-routing v0.1.0 - github.com/ipfs/go-ipld-cbor v0.0.5-0.20200204214505-252690b78669 + github.com/ipfs/go-ipfs-routing v0.2.1 + github.com/ipfs/go-ipld-cbor v0.0.6 github.com/ipfs/go-ipld-format v0.2.0 - github.com/ipfs/go-log/v2 v2.0.9-0.20200520025255-8c45666d33d4 - github.com/ipfs/go-merkledag v0.3.1 + github.com/ipfs/go-log v1.0.5 + github.com/ipfs/go-log/v2 v2.4.0 + github.com/ipfs/go-merkledag v0.5.1 github.com/ipfs/go-path v0.0.7 github.com/ipfs/go-unixfs v0.2.4 - github.com/ipfs/iptb v1.3.8-0.20190401234037-98ccf4228a73 - github.com/ipld/go-car v0.1.1-0.20200429200904-c222d793c339 - github.com/ipld/go-ipld-prime v0.0.2-0.20200428162820-8b59dc292b8e - github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52 + github.com/ipfs/iptb v1.4.0 + github.com/ipld/go-car v0.3.3 github.com/jbenet/goprocess v0.1.4 github.com/jstemmer/go-junit-report v0.9.1 - github.com/libp2p/go-libp2p v0.8.1 - github.com/libp2p/go-libp2p-autonat-svc v0.1.0 - github.com/libp2p/go-libp2p-circuit v0.2.1 - github.com/libp2p/go-libp2p-core v0.5.1 - github.com/libp2p/go-libp2p-kad-dht v0.1.1 - github.com/libp2p/go-libp2p-peerstore v0.2.2 - github.com/libp2p/go-libp2p-pubsub v0.2.6 - github.com/libp2p/go-libp2p-swarm v0.2.3 + github.com/libp2p/go-eventbus v0.2.1 + github.com/libp2p/go-libp2p v0.17.0 + github.com/libp2p/go-libp2p-core v0.13.0 + github.com/libp2p/go-libp2p-kad-dht v0.15.0 + github.com/libp2p/go-libp2p-peerstore v0.6.0 + github.com/libp2p/go-libp2p-pubsub v0.6.0 + github.com/libp2p/go-libp2p-swarm v0.9.0 + github.com/libp2p/go-libp2p-yamux v0.7.0 github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 github.com/mitchellh/go-homedir v1.1.0 + github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/morikuni/aec v1.0.0 // indirect - github.com/multiformats/go-multiaddr v0.2.1 - github.com/multiformats/go-multiaddr-dns v0.2.0 - github.com/multiformats/go-multiaddr-net v0.1.4 - github.com/multiformats/go-multihash v0.0.13 + github.com/multiformats/go-multiaddr v0.4.0 + github.com/multiformats/go-multiaddr-dns v0.3.1 + github.com/multiformats/go-multihash v0.1.0 github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.0.1 // indirect - github.com/otiai10/copy v1.0.2 + github.com/patrickmn/go-cache v2.1.0+incompatible + github.com/pborman/uuid v1.2.0 + github.com/pelletier/go-toml v1.6.0 // indirect github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.0 - github.com/prometheus/client_golang v1.5.1 - github.com/prometheus/common v0.9.1 - github.com/stretchr/testify v1.5.1 - github.com/whyrusleeping/cbor-gen v0.0.0-20200501014322-5f9941ef88e0 + github.com/prometheus/client_golang v1.11.0 + github.com/raulk/clock v1.1.0 + github.com/spf13/afero v1.2.2 // indirect + github.com/spf13/cast v1.3.1 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a + github.com/stretchr/objx v0.2.0 // indirect + github.com/stretchr/testify v1.7.0 + github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2 github.com/whyrusleeping/go-logging v0.0.1 github.com/whyrusleeping/go-sysinfo v0.0.0-20190219211824-4a357d4b90b1 - go.opencensus.io v0.22.3 - go.uber.org/zap v1.15.0 - golang.org/x/net v0.0.0-20200301022130-244492dfa37a // indirect - golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 - golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e - golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 - gopkg.in/urfave/cli.v2 v2.0.0-20180128182452-d3ae77c26ac8 + github.com/whyrusleeping/pubsub v0.0.0-20190708150250-92bcb0691325 + github.com/xorcare/golden v0.6.1-0.20191112154924-b87f686d7542 // indirect + go.opencensus.io v0.23.0 + go.uber.org/zap v1.19.0 + golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e + golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c + golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 + gopkg.in/cheggaaa/pb.v1 v1.0.28 + gorm.io/driver/mysql v1.1.1 + gorm.io/gorm v1.21.12 gotest.tools v2.2.0+incompatible ) -replace github.com/filecoin-project/filecoin-ffi => ./vendors/filecoin-ffi +replace ( + github.com/filecoin-project/filecoin-ffi => ./extern/filecoin-ffi + github.com/filecoin-project/go-jsonrpc => github.com/ipfs-force-community/go-jsonrpc v0.1.4-0.20210731021807-68e5207079bc + github.com/filecoin-project/test-vectors => ./extern/test-vectors + github.com/golangci/golangci-lint => github.com/golangci/golangci-lint v1.39.0 + github.com/ipfs/go-ipfs-cmds => github.com/ipfs-force-community/go-ipfs-cmds v0.6.1-0.20210521090123-4587df7fa0ab +) diff --git a/go.sum b/go.sum index c9aac26a76..4c3327a8d5 100644 --- a/go.sum +++ b/go.sum @@ -1,21 +1,79 @@ +4d63.com/gochecknoglobals v0.0.0-20201008074935-acfc0b28355a h1:wFEQiK85fRsEVF0CRrPAos5LoAryUsIX1kPW/WrIqFw= +4d63.com/gochecknoglobals v0.0.0-20201008074935-acfc0b28355a/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -contrib.go.opencensus.io/exporter/jaeger v0.1.0 h1:WNc9HbA38xEQmsI40Tjd/MNU/g8byN2Of7lwIjv0Jdc= -contrib.go.opencensus.io/exporter/jaeger v0.1.0/go.mod h1:VYianECmuFPwU37O699Vc1GOcy+y8kOsfaxHRImmjbA= -contrib.go.opencensus.io/exporter/prometheus v0.1.0 h1:SByaIoWwNgMdPSgl5sMqM2KDE5H/ukPWBRo314xiDvg= -contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZJ6mgB+PgBcCIa79kEKR8YCW+A= -github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7 h1:PqzgE6kAMi81xWQA2QIVxjWkFHptGgC547vchpUbtFo= +cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= +cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +contrib.go.opencensus.io/exporter/jaeger v0.2.1 h1:yGBYzYMewVL0yO9qqJv3Z5+IRhPdU7e9o/2oKpX4YvI= +contrib.go.opencensus.io/exporter/jaeger v0.2.1/go.mod h1:Y8IsLgdxqh1QxYxPC5IgXVmBaeLUeQFfBeBi9PbeZd0= +contrib.go.opencensus.io/exporter/prometheus v0.3.0/go.mod h1:rpCPVQKhiyH8oomWgm34ZmgIdZa8OVYO5WAIygPbBBE= +contrib.go.opencensus.io/exporter/prometheus v0.4.0 h1:0QfIkj9z/iVZgK31D9H9ohjjIDApI2GOPScCKwxedbs= +contrib.go.opencensus.io/exporter/prometheus v0.4.0/go.mod h1:o7cosnyfuPVK0tB8q0QmaQNhGnptITnPQB+z1+qeFB0= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= +dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= +dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= +dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= +git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/Gurpartap/async v0.0.0-20180927173644-4f7f499dd9ee h1:8doiS7ib3zi6/K172oDhSKU0dJ/miJramo9NITOMyZQ= +github.com/Gurpartap/async v0.0.0-20180927173644-4f7f499dd9ee/go.mod h1:W0GbEAA4uFNYOGG2cJpmFJ04E6SD1NLELPYZB57/7AY= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Kubuxu/go-os-helper v0.0.1 h1:EJiD2VUQyh5A9hWJLmc6iWg6yIcJ7jpBcwC8GMGXfDk= github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= @@ -24,98 +82,176 @@ github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQ github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/Stebalien/go-bitfield v0.0.1 h1:X3kbSSPUaJK60wV2hjOPZwmpljr6VGCqdq4cBLhbQBo= github.com/Stebalien/go-bitfield v0.0.1/go.mod h1:GNjFpasyUVkHMsfEOk8EFLJ9syQ6SI+XWrX9Wf2XH0s= -github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8= +github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= +github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= -github.com/apache/thrift v0.12.0 h1:pODnxUFNcjP9UTLZGTdeh+j16A8lJbRvD3rOtrk/7bs= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/ashanbrown/forbidigo v1.1.0 h1:SJOPJyqsrVL3CvR0veFZFmIM0fXS/Kvyikqvfphd0Z4= +github.com/ashanbrown/forbidigo v1.1.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v0.0.0-20210308000810-4155955488a0 h1:27owMIbvO33XL56BKWPy+SCU69I9wPwPXuMf5mAbVGU= +github.com/ashanbrown/makezero v0.0.0-20210308000810-4155955488a0/go.mod h1:oG9Dnez7/ESBqc4EdrdNlryeo7d0KcW1ftXHm7nU/UU= +github.com/awnumar/memcall v0.0.0-20191004114545-73db50fd9f80 h1:8kObYoBO4LNmQ+fLiScBfxEdxF1w2MHlvH/lr9MLaTg= +github.com/awnumar/memcall v0.0.0-20191004114545-73db50fd9f80/go.mod h1:S911igBPR9CThzd/hYQQmTc9SWNu3ZHIlCGaWsWsoJo= +github.com/awnumar/memguard v0.22.2 h1:tMxcq1WamhG13gigK8Yaj9i/CHNUO3fFlpS9ABBQAxw= +github.com/awnumar/memguard v0.22.2/go.mod h1:33OwJBHC+T4eEfFcDrQb78TMlBMBvcOPCXWU9xE34gM= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.32.11/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= +github.com/benbjohnson/clock v1.0.1/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.0.2/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bombsimon/wsl v1.2.5 h1:9gTOkIwVtoDZywvX802SDHokeX4kW1cKnV8ZTVAPkRs= -github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= +github.com/bep/debounce v1.2.0 h1:wXds8Kq8qRfwAOpAxHrJDbCXgC5aHSzgQb/0gKsHQqo= +github.com/bep/debounce v1.2.0/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/bluele/gcache v0.0.0-20190518031135-bc40bd653833 h1:yCfXxYaelOyqnia8F/Yng47qhmfC9nKTRIbYRrRueq4= +github.com/bluele/gcache v0.0.0-20190518031135-bc40bd653833/go.mod h1:8c4/i2VlovMO2gBnHGQPN5EJw+H0lx1u/5p+cgsXtCk= +github.com/bombsimon/wsl/v3 v3.2.0 h1:x3QUbwW7tPGcCNridvqmhSRthZMTALnkg5/1J+vaUas= +github.com/bombsimon/wsl/v3 v3.2.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= +github.com/briandowns/spinner v1.11.1/go.mod h1:QOuQk7x+EaDASo80FEXwlwiA+j/PPIcX3FScO+3/ZPQ= github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btcd v0.0.0-20190605094302-a0d1e3e36d50/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= +github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= +github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= +github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d h1:yJzD/yFppdVCf6ApMkVy8cUxV0XrxdP9rVf6D87/Mng= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= +github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd h1:qdGvebPBDuYDPGi1WCPjy1tGyMpmDK8IEapSsszn7HE= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723 h1:ZA/jbKoGcVAnER6pCHPEkGdZOV7U1oLUedErBHCUMs0= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.6 h1:Tsy7EppNow2pDC0jN7Hsmcb6mHd71ZbI1vFissRBtc0= +github.com/charithe/durationcheck v0.0.6/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= +github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.2.1-0.20180108230905-e214231b295a/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cosiner/argv v0.1.0/go.mod h1:EusR6TucWKX+zFgtdUsKT2Cvg45K5rtpCcWz4hK06d8= github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 h1:HVTnpeuvF6Owjd5mniCL8DEXo7uYXdQEmOP4FJbV5tg= github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3/go.mod h1:p1d6YEZWvFzEh4KLyvBcVSnrfNDDvK2zfK/4x2v/4pE= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= -github.com/dave/jennifer v1.4.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +github.com/daixiang0/gci v0.2.8 h1:1mrIGMBQsBu0P7j7m1M8Lb+ZeZxsZL+jyGX4YoMJJpg= +github.com/daixiang0/gci v0.2.8/go.mod h1:+4dZ7TISfSmqfAGv59ePaHfNzgGtIkHAhhdKggP1JAc= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/dchest/blake2b v1.0.0 h1:KK9LimVmE0MjRl9095XJmKqZ+iLxWATvlcpVFRtaw6s= -github.com/dchest/blake2b v1.0.0/go.mod h1:U034kXgbJpCle2wSk5ybGIVhOSHCVLMDqOzcPEA0F7s= -github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f h1:6itBiEUtu+gOzXZWn46bM5/qm8LlV6/byR7Yflx/y6M= +github.com/davidlazar/go-crypto v0.0.0-20190912175916-7055855a373f/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/deepmap/oapi-codegen v1.3.13 h1:9HKGCsdJqE4dnrQ8VerFS0/1ZOJPmAhN+g8xgp8y3K4= +github.com/deepmap/oapi-codegen v1.3.13/go.mod h1:WAmG5dWY8/PYHt4vKxlt90NsbHMAOCiteYKZMiIRfOo= +github.com/denis-tingajkin/go-header v0.4.2 h1:jEeSF4sdv8/3cT/WY8AgDHUoItNSoEZ7qg9dX7pc218= +github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= +github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e h1:lj77EKYUpYXTd8CD/+QMIf8b6OIOTsfEBSXiAzuEHTU= +github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e/go.mod h1:3ZQK6DMPSz/QZ73jlWxBtUhNA8xZx7LzUFSq/OfP8vk= github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= github.com/dgraph-io/badger v1.6.0-rc1/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgraph-io/badger v1.6.0 h1:DshxFxZWXUcO0xX476VJC07Xsr6ZCBVRHKZ93Oh7Evo= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgraph-io/badger/v2 v2.0.1-rc1.0.20200120142413-c3333a5a830e h1:Jz7uYxTCDVrtL5tzPxPu6o7Ybhom8Az7sWmjUO1OkQc= -github.com/dgraph-io/badger/v2 v2.0.1-rc1.0.20200120142413-c3333a5a830e/go.mod h1:3KY8+bsP8wI0OEnQJAKpd4wIJW/Mm32yw2j/9FUVnIM= -github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3 h1:MQLRM35Pp0yAyBYksjbj1nZI/w6eyRY/mWoM1sFf4kU= +github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= +github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= +github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= +github.com/dgraph-io/badger/v2 v2.0.3/go.mod h1:3KY8+bsP8wI0OEnQJAKpd4wIJW/Mm32yw2j/9FUVnIM= +github.com/dgraph-io/badger/v2 v2.2007.3 h1:Sl9tQWz92WCbVSe8pj04Tkqlm2boW+KAxd+XSs58SQI= +github.com/dgraph-io/badger/v2 v2.2007.3/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= +github.com/dgraph-io/badger/v3 v3.2011.1 h1:Hmyof0WMEF/QtutX5SQHzIMnJQxb/IrSzhjckV2SD6g= +github.com/dgraph-io/badger/v3 v3.2011.1/go.mod h1:0rLLrQpKVQAL0or/lBLMQznhr6dWWX7h5AKnmnqx268= github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.0.4-0.20210122082011-bb5d392ed82d h1:eQYOG6A4td1tht0NdJB9Ls6DsXRGb2Ft6X9REU/MbbE= +github.com/dgraph-io/ristretto v0.0.4-0.20210122082011-bb5d392ed82d/go.mod h1:tv2ec8nA7vRpSYX7/MbP52ihrUMXIHit54CQMq8npXQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f h1:dDxpBYafY/GYpcl+LS4Bn3ziLPuEdGRkRjYAbSlWxSA= github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= @@ -128,552 +264,828 @@ github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKoh github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/drand/bls12-381 v0.3.2 h1:RImU8Wckmx8XQx1tp1q04OV73J9Tj6mmpQLYDP7V1XE= github.com/drand/bls12-381 v0.3.2/go.mod h1:dtcLgPtYT38L3NO6mPDYH0nbpc5tjPassDqiniuAt4Y= -github.com/drand/drand v0.8.1 h1:wAGnZKa+HbyNvRQOwLGIVnJR14o9kS/0+w9VroJ1AO0= -github.com/drand/drand v0.8.1/go.mod h1:ZdzIrSqqEYZvMiS1UuZlJs3WTb9uLz1I9uH0icYPqoE= +github.com/drand/drand v1.2.1 h1:KB7z+69YbnQ5z22AH/LMi0ObDR8DzYmrkS6vZXTR9jI= +github.com/drand/drand v1.2.1/go.mod h1:j0P7RGmVaY7E/OuO2yQOcQj7OgeZCuhgu2gdv0JAm+g= github.com/drand/kyber v1.0.1-0.20200110225416-8de27ed8c0e2/go.mod h1:UpXoA0Upd1N9l4TvRPHr1qAUBBERj6JQ/mnKI3BPEmw= -github.com/drand/kyber v1.0.1-0.20200331114745-30e90cc60f99 h1:BxLbcT0yq9ii6ShXn7U+0oXB2ABfEfw6GutaVPxoj2Y= -github.com/drand/kyber v1.0.1-0.20200331114745-30e90cc60f99/go.mod h1:Rzu9PGFt3q8d7WWdrHmR8dktHucO0dSTWlMYrgqjSpA= +github.com/drand/kyber v1.0.2/go.mod h1:x6KOpK7avKj0GJ4emhXFP5n7M7W7ChAPmnQh/OL6vRw= +github.com/drand/kyber v1.1.4 h1:YvKM03QWGvLrdTnYmxxP5iURAX+Gdb6qRDUOgg8i60Q= +github.com/drand/kyber v1.1.4/go.mod h1:9+IgTq7kadePhZg7eRwSD7+bA+bmvqRK+8DtmoV5a3U= +github.com/drand/kyber-bls12381 v0.2.0/go.mod h1:zQip/bHdeEB6HFZSU3v+d3cQE0GaBVQw9aR2E7AdoeI= +github.com/drand/kyber-bls12381 v0.2.1 h1:/d5/YAdaCmHpYjF1NZevOEcKGaq6LBbyvkCTIdGqDjs= +github.com/drand/kyber-bls12381 v0.2.1/go.mod h1:JwWn4nHO9Mp4F5qCie5sVIPQZ0X6cw8XAeMRvc/GXBE= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/elastic/go-sysinfo v1.3.0 h1:eb2XFGTMlSwG/yyU9Y8jVAYLIzU2sFzWXwo2gmetyrE= -github.com/elastic/go-sysinfo v1.3.0/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0= -github.com/elastic/go-windows v1.0.0 h1:qLURgZFkkrYyTTkvYpsZIgf83AUsdIHfvlJaqaZ7aSY= -github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/ema/qdisc v0.0.0-20190904071900-b82c76788043/go.mod h1:ix4kG2zvdUd8kEKSW0ZTr1XLks0epFpI4j745DXxlNE= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= +github.com/esimonov/ifshort v1.0.2 h1:K5s1W2fGfkoWXsFlxBNqT6J0ZCncPaKrGM5qe0bni68= +github.com/esimonov/ifshort v1.0.2/go.mod h1:yZqNJUrNn20K8Q9n2CrjTKYyVEmX209Hgu+M1LBpeZE= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.8.0 h1:5bzFgL+oy7JITMTxUPJ00n7VxmYd/PdMp5mHFX40/RY= github.com/fatih/color v1.8.0/go.mod h1:3l45GVGkyrnYNl9HoIjnp2NnNWvh6hLAqD8yTfGjnw8= -github.com/filecoin-project/chain-validation v0.0.6-0.20200518190139-483332336e8e h1:3x2eL2t3ZkMOHt1b5WS5aVWyJeo5+WjWCT77QdPGSwk= -github.com/filecoin-project/chain-validation v0.0.6-0.20200518190139-483332336e8e/go.mod h1:6B3uenDcH8n+PKqgzUtZmgyCzKy4qpiLwJ5aw7Rj2xQ= -github.com/filecoin-project/go-address v0.0.0-20200107215422-da8eea2842b5/go.mod h1:SAOwJoakQ8EPjwNIsiakIQKsoKdkcbx8U3IapgCg9R0= -github.com/filecoin-project/go-address v0.0.2-0.20200218010043-eb9bb40ed5be h1:TooKBwR/g8jG0hZ3lqe9S5sy2vTUcLOZLlz3M5wGn2E= -github.com/filecoin-project/go-address v0.0.2-0.20200218010043-eb9bb40ed5be/go.mod h1:SAOwJoakQ8EPjwNIsiakIQKsoKdkcbx8U3IapgCg9R0= -github.com/filecoin-project/go-amt-ipld/v2 v2.0.1-0.20200131012142-05d80eeccc5e/go.mod h1:boRtQhzmxNocrMxOXo1NYn4oUc1NGvR8tEa79wApNXg= -github.com/filecoin-project/go-amt-ipld/v2 v2.0.1-0.20200424220931-6263827e49f2 h1:jamfsxfK0Q9yCMHt8MPWx7Aa/O9k2Lve8eSc6FILYGQ= -github.com/filecoin-project/go-amt-ipld/v2 v2.0.1-0.20200424220931-6263827e49f2/go.mod h1:boRtQhzmxNocrMxOXo1NYn4oUc1NGvR8tEa79wApNXg= -github.com/filecoin-project/go-bitfield v0.0.0-20200309034705-8c7ac40bd550/go.mod h1:iodsLxOFZnqKtjj2zkgqzoGNrv6vUqj69AT/J8DKXEw= -github.com/filecoin-project/go-bitfield v0.0.0-20200416002808-b3ee67ec9060/go.mod h1:iodsLxOFZnqKtjj2zkgqzoGNrv6vUqj69AT/J8DKXEw= -github.com/filecoin-project/go-bitfield v0.0.1 h1:Xg/JnrqqE77aJVKdbEyR04n9FZQWhwrN+buDgQCVpZU= -github.com/filecoin-project/go-bitfield v0.0.1/go.mod h1:Ry9/iUlWSyjPUzlAvdnfy4Gtvrq4kWmWDztCU1yEgJY= -github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2 h1:av5fw6wmm58FYMgJeoB/lK9XXrgdugYiTqkdxjTy9k8= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= +github.com/filecoin-project/go-address v0.0.3/go.mod h1:jr8JxKsYx+lQlQZmF5i2U0Z+cGQ59wMIps/8YW/lDj8= +github.com/filecoin-project/go-address v0.0.5 h1:SSaFT/5aLfPXycUlFyemoHYhRgdyXClXCyDdNJKPlDM= +github.com/filecoin-project/go-address v0.0.5/go.mod h1:jr8JxKsYx+lQlQZmF5i2U0Z+cGQ59wMIps/8YW/lDj8= +github.com/filecoin-project/go-amt-ipld/v2 v2.1.0/go.mod h1:nfFPoGyX0CU9SkXX8EoCcSuHN1XcbN0c6KBh7yvP5fs= +github.com/filecoin-project/go-amt-ipld/v2 v2.1.1-0.20201006184820-924ee87a1349 h1:pIuR0dnMD0i+as8wNnjjHyQrnhP5O5bmba/lmgQeRgU= +github.com/filecoin-project/go-amt-ipld/v2 v2.1.1-0.20201006184820-924ee87a1349/go.mod h1:vgmwKBkx+ca5OIeEvstiQgzAZnb7R6QaqE1oEDSqa6g= +github.com/filecoin-project/go-amt-ipld/v3 v3.0.0/go.mod h1:Qa95YNAbtoVCTSVtX38aAC1ptBnJfPma1R/zZsKmx4o= +github.com/filecoin-project/go-amt-ipld/v3 v3.1.0 h1:ZNJ9tEG5bE72vBWYiuh5bkxJVM3ViHNOmQ7qew9n6RE= +github.com/filecoin-project/go-amt-ipld/v3 v3.1.0/go.mod h1:UjM2QhDFrrjD5s1CdnkJkat4ga+LqZBZgTMniypABRo= +github.com/filecoin-project/go-bitfield v0.2.0/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= +github.com/filecoin-project/go-bitfield v0.2.3/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= +github.com/filecoin-project/go-bitfield v0.2.4 h1:uZ7MeE+XfM5lqrHJZ93OnhQKc/rveW8p9au0C68JPgk= +github.com/filecoin-project/go-bitfield v0.2.4/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2/go.mod h1:pqTiPHobNkOVM5thSRsHYjyQfq7O5QSCMhvuu9JoDlg= +github.com/filecoin-project/go-cbor-util v0.0.0-20201016124514-d0bbec7bfcc4 h1:YmE80qPn5K0txSqxnRNiCRAWyXI1LTO//I4c4H0QwbM= +github.com/filecoin-project/go-cbor-util v0.0.0-20201016124514-d0bbec7bfcc4/go.mod h1:pqTiPHobNkOVM5thSRsHYjyQfq7O5QSCMhvuu9JoDlg= +github.com/filecoin-project/go-commp-utils v0.1.3 h1:rTxbkNXZU7FLgdkBk8RsQIEOuPONHykEoX3xGk41Fkw= +github.com/filecoin-project/go-commp-utils v0.1.3/go.mod h1:3ENlD1pZySaUout0p9ANQrY3fDFoXdqyX04J+dWpK30= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 h1:2pMXdBnCiXjfCYx/hLqFxccPoqsSveQFxVLvNxy9bus= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= -github.com/filecoin-project/go-data-transfer v0.3.0 h1:BwBrrXu9Unh9JjjX4GAc5FfzUNioor/aATIjfc7JTBg= -github.com/filecoin-project/go-data-transfer v0.3.0/go.mod h1:cONglGP4s/d+IUQw5mWZrQK+FQATQxr3AXzi4dRh0l4= -github.com/filecoin-project/go-fil-commcid v0.0.0-20200208005934-2b8bd03caca5 h1:yvQJCW9mmi9zy+51xA01Ea2X7/dL7r8eKDPuGUjRmbo= -github.com/filecoin-project/go-fil-commcid v0.0.0-20200208005934-2b8bd03caca5/go.mod h1:JbkIgFF/Z9BDlvrJO1FuKkaWsH673/UdFaiVS6uIHlA= -github.com/filecoin-project/go-fil-markets v0.2.7 h1:bgdK/e+xW15aVZLtdFLzAHdrx1hqtGF9veg2lstLK6o= -github.com/filecoin-project/go-fil-markets v0.2.7/go.mod h1:LI3VFHse33aU0djAmFQ8+Hg39i0J8ibAoppGu6TbgkA= +github.com/filecoin-project/go-data-transfer v1.12.0 h1:y44x35JvB93kezahMURKizIa/aizGTPSHqi5cbAfTEo= +github.com/filecoin-project/go-data-transfer v1.12.0/go.mod h1:tDrD2jLU2TpVhd+5B8iqBp0fQRV4lP80WZccKXugjYc= +github.com/filecoin-project/go-ds-versioning v0.0.0-20211206185234-508abd7c2aff h1:2bG2ggVZ/rInd/YqUfRj4A5siGuYOPxxuD4I8nYLJF0= +github.com/filecoin-project/go-ds-versioning v0.0.0-20211206185234-508abd7c2aff/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= +github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= +github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a h1:hyJ+pUm/4U4RdEZBlg6k8Ma4rDiuvqyGpoICXAxwsTg= +github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= +github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= +github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= +github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= +github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0/go.mod h1:7aWZdaQ1b16BVoQUYR+eEvrDCGJoPLxFpDynFjYfBjI= +github.com/filecoin-project/go-hamt-ipld/v3 v3.0.1/go.mod h1:gXpNmr3oQx8l3o7qkGyDjJjYSRX7hp/FGOStdqrWyDI= +github.com/filecoin-project/go-hamt-ipld/v3 v3.1.0 h1:rVVNq0x6RGQIzCo1iiJlGFm9AGIZzeifggxtKMU7zmI= +github.com/filecoin-project/go-hamt-ipld/v3 v3.1.0/go.mod h1:bxmzgT8tmeVQA1/gvBwFmYdT8SOFUwB3ovSUfG1Ux0g= github.com/filecoin-project/go-leb128 v0.0.0-20190212224330-8d79a5489543 h1:aMJGfgqe1QDhAVwxRg5fjCRF533xHidiKsugk7Vvzug= github.com/filecoin-project/go-leb128 v0.0.0-20190212224330-8d79a5489543/go.mod h1:mjrHv1cDGJWDlGmC0eDc1E5VJr8DmL9XMUcaFwiuKg8= -github.com/filecoin-project/go-padreader v0.0.0-20200210211231-548257017ca6 h1:92PET+sx1Hb4W/8CgFwGuxaKbttwY+UNspYZTvXY0vs= -github.com/filecoin-project/go-padreader v0.0.0-20200210211231-548257017ca6/go.mod h1:0HgYnrkeSU4lu1p+LEOeDpFsNBssa0OGGriWdA4hvaE= -github.com/filecoin-project/go-paramfetch v0.0.1/go.mod h1:fZzmf4tftbwf9S37XRifoJlz7nCjRdIrMGLR07dKLCc= -github.com/filecoin-project/go-paramfetch v0.0.2-0.20200218225740-47c639bab663 h1:eYxi6vI5CyeXD15X1bB3bledDXbqKxqf0wQzTLgwYwA= -github.com/filecoin-project/go-paramfetch v0.0.2-0.20200218225740-47c639bab663/go.mod h1:fZzmf4tftbwf9S37XRifoJlz7nCjRdIrMGLR07dKLCc= -github.com/filecoin-project/go-paramfetch v0.0.2-0.20200505180321-973f8949ea8e h1:R+HNoQWirMBOhQC+L1OpYUVbvMjB+jq1hx5LmLFvNfA= -github.com/filecoin-project/go-paramfetch v0.0.2-0.20200505180321-973f8949ea8e/go.mod h1:fZzmf4tftbwf9S37XRifoJlz7nCjRdIrMGLR07dKLCc= -github.com/filecoin-project/go-statemachine v0.0.0-20200226041606-2074af6d51d9 h1:k9qVR9ItcziSB2rxtlkN/MDWNlbsI6yzec+zjUatLW0= -github.com/filecoin-project/go-statemachine v0.0.0-20200226041606-2074af6d51d9/go.mod h1:FGwQgZAt2Gh5mjlwJUlVB62JeYdo+if0xWxSEfBD9ig= -github.com/filecoin-project/go-statestore v0.1.0 h1:t56reH59843TwXHkMcwyuayStBIiWBRilQjQ+5IiwdQ= +github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20/go.mod h1:mPn+LRRd5gEKNAtc+r3ScpW2JRU/pj4NBKdADYWHiak= +github.com/filecoin-project/go-paramfetch v0.0.2 h1:a6W3Ij6CKhwHYYlx+5mqvBIyw4CabZH2ojdEaoAZ6/g= +github.com/filecoin-project/go-paramfetch v0.0.2/go.mod h1:1FH85P8U+DUEmWk1Jkw3Bw7FrwTVUNHk/95PSPG+dts= +github.com/filecoin-project/go-state-types v0.0.0-20200903145444-247639ffa6ad/go.mod h1:IQ0MBPnonv35CJHtWSN3YY1Hz2gkPru1Q9qoaYLxx9I= +github.com/filecoin-project/go-state-types v0.0.0-20200904021452-1883f36ca2f4/go.mod h1:IQ0MBPnonv35CJHtWSN3YY1Hz2gkPru1Q9qoaYLxx9I= +github.com/filecoin-project/go-state-types v0.0.0-20200928172055-2df22083d8ab/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.0.0-20201102161440-c8033295a1fc/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.1.0/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.1.1-0.20210810190654-139e0e79e69e/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.1.1 h1:LR260vya4p++atgf256W6yV3Lxl5mKrBFcEZePWQrdg= +github.com/filecoin-project/go-state-types v0.1.1/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe h1:dF8u+LEWeIcTcfUcCf3WFVlc81Fr2JKg8zPzIbBDKDw= +github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe/go.mod h1:FGwQgZAt2Gh5mjlwJUlVB62JeYdo+if0xWxSEfBD9ig= github.com/filecoin-project/go-statestore v0.1.0/go.mod h1:LFc9hD+fRxPqiHiaqUEZOinUJB4WARkRfNl10O7kTnI= -github.com/filecoin-project/go-storedcounter v0.0.0-20200421200003-1c99c62e8a5b h1:fkRZSPrYpk42PV3/lIXiL0LHetxde7vyYYvSsttQtfg= -github.com/filecoin-project/go-storedcounter v0.0.0-20200421200003-1c99c62e8a5b/go.mod h1:Q0GQOBtKf1oE10eSXSlhN45kDBdGvEcVOqMiffqX+N8= -github.com/filecoin-project/sector-storage v0.0.0-20200508203401-a74812ba12f3 h1:WezmdxkWlnTe9xLzIitUrsvUVmjmWDEEuAe9l8A+Os0= -github.com/filecoin-project/sector-storage v0.0.0-20200508203401-a74812ba12f3/go.mod h1:B+xzopr/oWZJz2hBL5Ekb7Obcum5ntmfbaAUlaaho28= -github.com/filecoin-project/specs-actors v0.0.0-20200210130641-2d1fbd8672cf/go.mod h1:xtDZUB6pe4Pksa/bAJbJ693OilaC5Wbot9jMhLm3cZA= -github.com/filecoin-project/specs-actors v0.0.0-20200409043918-e569f4a2f504/go.mod h1:mdJraXq5vMy0+/FqVQIrnNlpQ/Em6zeu06G/ltQ0/lA= -github.com/filecoin-project/specs-actors v0.3.0/go.mod h1:nQYnFbQ7Y0bHZyq6HDEuVlCPR+U3z5Q3wMOQ+2aiV+Y= -github.com/filecoin-project/specs-actors v0.4.1-0.20200509020627-3c96f54f3d7d/go.mod h1:UW3ft23q6VS8wQoNqLWjENsu9gu1uh6lxOd+H8cwhT8= -github.com/filecoin-project/specs-actors v0.5.2/go.mod h1:r5btrNzZD0oBkEz1pohv80gSCXQnqGrD0kYwOTiExyE= -github.com/filecoin-project/specs-actors v0.5.3 h1:fdq8Gx0izhnUKl6sYEtI4SUEjT2U6W2w06HeqLz5vmw= -github.com/filecoin-project/specs-actors v0.5.3/go.mod h1:r5btrNzZD0oBkEz1pohv80gSCXQnqGrD0kYwOTiExyE= -github.com/filecoin-project/specs-storage v0.0.0-20200417134612-61b2d91a6102 h1:T3f/zkuvgtgqcXrb0NO3BicuveGOxxUAMPa/Yif2kuE= -github.com/filecoin-project/specs-storage v0.0.0-20200417134612-61b2d91a6102/go.mod h1:xJ1/xl9+8zZeSSSFmDC3Wr6uusCTxyYPI0VeNVSFmPE= -github.com/filecoin-project/storage-fsm v0.0.0-20200508212339-4980cb4c92b1 h1:qsiHXwP9Nz20xHzbKlR4K3hifvaTzE2K8iwsnRhHR68= -github.com/filecoin-project/storage-fsm v0.0.0-20200508212339-4980cb4c92b1/go.mod h1:3wZV/yMjSlKkP80kXnJSeYRGwsWKd08XGAVIQKvcyYQ= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/filecoin-project/go-statestore v0.2.0 h1:cRRO0aPLrxKQCZ2UOQbzFGn4WDNdofHZoGPjfNaAo5Q= +github.com/filecoin-project/go-statestore v0.2.0/go.mod h1:8sjBYbS35HwPzct7iT4lIXjLlYyPor80aU7t7a/Kspo= +github.com/filecoin-project/specs-actors v0.9.4/go.mod h1:BStZQzx5x7TmCkLv0Bpa07U6cPKol6fd3w9KjMPZ6Z4= +github.com/filecoin-project/specs-actors v0.9.13/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= +github.com/filecoin-project/specs-actors v0.9.14 h1:68PVstg2UB3ZsMLF+DKFTAs/YKsqhKWynkr0IqmVRQY= +github.com/filecoin-project/specs-actors v0.9.14/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= +github.com/filecoin-project/specs-actors/v2 v2.3.5-0.20210114162132-5b58b773f4fb/go.mod h1:LljnY2Mn2homxZsmokJZCpRuhOPxfXhvcek5gWkmqAc= +github.com/filecoin-project/specs-actors/v2 v2.3.6 h1:UxnWTfQd7JsOae39/aHCK0m1IBjdcyymCJfqxuSkn+g= +github.com/filecoin-project/specs-actors/v2 v2.3.6/go.mod h1:DJMpxVRXvev9t8P0XWA26RmTzN+MHiL9IlItVLT0zUc= +github.com/filecoin-project/specs-actors/v3 v3.1.0/go.mod h1:mpynccOLlIRy0QnR008BwYBwT9fen+sPR13MA1VmMww= +github.com/filecoin-project/specs-actors/v3 v3.1.1 h1:BE8fsns1GnEOxt1DTE5LxBK2FThXtWmCChgcJoHTg0E= +github.com/filecoin-project/specs-actors/v3 v3.1.1/go.mod h1:mpynccOLlIRy0QnR008BwYBwT9fen+sPR13MA1VmMww= +github.com/filecoin-project/specs-actors/v4 v4.0.0/go.mod h1:TkHXf/l7Wyw4ZejyXIPS2rK8bBO0rdwhTZyQQgaglng= +github.com/filecoin-project/specs-actors/v4 v4.0.1 h1:AiWrtvJZ63MHGe6rn7tPu4nSUY8bA1KDNszqJaD5+Fg= +github.com/filecoin-project/specs-actors/v4 v4.0.1/go.mod h1:TkHXf/l7Wyw4ZejyXIPS2rK8bBO0rdwhTZyQQgaglng= +github.com/filecoin-project/specs-actors/v5 v5.0.4 h1:OY7BdxJWlUfUFXWV/kpNBYGXNPasDIedf42T3sGx08s= +github.com/filecoin-project/specs-actors/v5 v5.0.4/go.mod h1:5BAKRAMsOOlD8+qCw4UvT/lTLInCJ3JwOWZbX8Ipwq4= +github.com/filecoin-project/specs-actors/v6 v6.0.0/go.mod h1:V1AYfi5GkHXipx1mnVivoICZh3wtwPxDVuds+fbfQtk= +github.com/filecoin-project/specs-actors/v6 v6.0.1 h1:laxvHNsvrq83Y9n+W7znVCePi3oLyRf0Rkl4jFO8Wew= +github.com/filecoin-project/specs-actors/v6 v6.0.1/go.mod h1:V1AYfi5GkHXipx1mnVivoICZh3wtwPxDVuds+fbfQtk= +github.com/filecoin-project/specs-actors/v7 v7.0.0-20211117170924-fd07a4c7dff9/go.mod h1:p6LIOFezA1rgRLMewbvdi3Pp6SAu+q9FtJ9CAleSjrE= +github.com/filecoin-project/specs-actors/v7 v7.0.0-20211118013026-3dce48197cec h1:KV9vE+Sl2Y3qKsrpba4HcE7wHwK7v6O5U/S0xHbje6A= +github.com/filecoin-project/specs-actors/v7 v7.0.0-20211118013026-3dce48197cec/go.mod h1:p6LIOFezA1rgRLMewbvdi3Pp6SAu+q9FtJ9CAleSjrE= +github.com/filecoin-project/specs-storage v0.1.1-0.20201105051918-5188d9774506 h1:Ur/l2+6qN+lQiqjozWWc5p9UDaAMDZKTlDS98oRnlIw= +github.com/filecoin-project/specs-storage v0.1.1-0.20201105051918-5188d9774506/go.mod h1:nJRRM7Aa9XVvygr3W9k6xGF46RWzr2zxF/iGoAIfA/g= +github.com/filecoin-project/test-vectors/schema v0.0.5 h1:w3zHQhzM4pYxJDl21avXjOKBLF8egrvwUwjpT8TquDg= +github.com/filecoin-project/test-vectors/schema v0.0.5/go.mod h1:iQ9QXLpYWL3m7warwvK1JC/pTri8mnfEmKygNDqqY6E= +github.com/filecoin-project/venus-auth v1.3.1-0.20210809053831-012d55d5f578 h1:RpiHYKzuEnWoPhp2HO7sVC8QY78TZIpO4dhbp0g/g+A= +github.com/filecoin-project/venus-auth v1.3.1-0.20210809053831-012d55d5f578/go.mod h1:/cbLZYvQhinVFUG4TP2Uy1o7LtF+guT21qZIMTmKk0g= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:1i71OnUq3iUe1ma7Lr6yG6/rjvM3emb6yoL7xLFzcVQ= +github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= +github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= +github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= +github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzPPUss= +github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fxamacker/cbor/v2 v2.2.0 h1:6eXqdDDe588rSYAi1HfZKbx6YYQO4mxQ9eC6xYpU/JQ= -github.com/fxamacker/cbor/v2 v2.2.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= +github.com/fzipp/gocyclo v0.3.1 h1:A9UeX3HJSXTBzvHzhqoYVuE0eAhe+aM8XBCCwsPMZOc= +github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= +github.com/gbrlsnchs/jwt/v3 v3.0.0 h1:gtPjdT3gAbBLjVckJsgNf+a46sqrCBfRebg2r/NysIo= +github.com/gbrlsnchs/jwt/v3 v3.0.0/go.mod h1:AncDcjXz18xetI3A6STfXq2w+LuTx8pQ8bGEwRN8zVM= +github.com/getkin/kin-openapi v0.13.0/go.mod h1:WGRs2ZMM1Q8LR1QBEwUxC6RJEfaBcD0s+pcEVXFuAjw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127 h1:0gkP6mzaMqkmpcJYCFOLkIBwI7xFExG03bbkOkCvUPI= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db h1:GYXWx7Vr3+zv833u+8IoXbNnQY0AdXsxAgI0kX7xcwA= -github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= +github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-critic/go-critic v0.5.5 h1:hqPHqQt/2l4Syc2VOIgcuy0FSytcbatOHWggu45vhw8= +github.com/go-critic/go-critic v0.5.5/go.mod h1:eMs1Oc/oIP+CYNVN09M+XZYffIPuRHawxzlggAPN9Kk= +github.com/go-delve/delve v1.5.0/go.mod h1:c6b3a1Gry6x8a4LGCe/CWzrocrfaHvkUxCj3k4bvSUQ= +github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-lintpack/lintpack v0.5.2 h1:DI5mA3+eKdWeJ40nU4d6Wc26qmdG8RCi/btYq0TuRN0= -github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= +github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/log v0.1.0 h1:DGJh0Sm43HbOeYDNnVZFl8BvcYVvjD5bqYJvp0REbwQ= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= +github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-redis/redis/v7 v7.0.0-beta h1:sm826nuE9AVZl06YSag54VTSpbGdIUMXCXXOHh48nFU= +github.com/go-redis/redis/v7 v7.0.0-beta/go.mod h1:dohSoK1cSNPaisjbZhSk7RYyPhVx2k+4sAbJdPK5KPs= +github.com/go-redis/redis_rate/v7 v7.0.1 h1:qpJUfKFkEF2zQSD1GnlC3oeZMd+E7ym55HU49BZKqbY= +github.com/go-redis/redis_rate/v7 v7.0.1/go.mod h1:IWxoSa694TQvppZ53Y5yZtqSfHKflOx+xtSw1TsSoT4= +github.com/go-resty/resty/v2 v2.4.0 h1:s6TItTLejEI+2mn98oijC5w/Rk2YU+OA6x0mnZN6r6k= +github.com/go-resty/resty/v2 v2.4.0/go.mod h1:B88+xCTEwvfD94NOuE6GS1wMlnoKNY8eEiNizfNwOwA= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= github.com/go-toolsmith/astcopy v1.0.0 h1:OMgl1b1MEpjFQ1m5ztEO06rz5CUd3oBv9RF7+DyvdG8= github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6 h1:aTBUNRTatDDU24gbOEKEoLiDwxtc98ga6K/iMTm6fvs= -github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astequal v1.0.0 h1:4zxD8j3JRFNyLN46lodQuqz3xdKSrur7U/sr0SDS/gQ= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086 h1:EIMuvbE9fbtQtimdLe5yeXjuC5CeKbQt8zH6GwtIrhM= -github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= -github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30 h1:zRJPftZJNLPDiOtvYbFRwjSbaJAcVOf80TeEmWGe2kQ= -github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8 h1:vVouagbdmqTVlCIAxpyYsNNTbkKZ3V66VpKOLU/s6W4= -github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= github.com/go-toolsmith/pkgload v1.0.0 h1:4DFWWMXVfbcN5So1sBNW9+yeiMqLFGl1wFLTL5R0Tgg= github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.0 h1:zKymWyA1TRYvqYrYDrfEMZULyrhcnGY3x7LDKU2XQaA= github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b h1:ekuhfTjngPhisSjOJ0QWKpPQE8/rbknHaes6WVJj5Hw= -github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/godbus/dbus v0.0.0-20190402143921-271e53dc4968/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/gofrs/flock v0.8.0 h1:MSdYClljsF3PbENUUEx85nkWfJSGfzYI9yEBZOJz6CY= +github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.4.0 h1:zgVt4UpGxcqVOw97aRGxT4svlcmdK35fynLNctY32zI= +github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/gogo/status v1.0.3/go.mod h1:SavQ51ycCLnc7dGyJxp8YAmudx8xqiVrRf+6IXRsugc= +github.com/gogo/status v1.1.0 h1:+eIkrewn5q6b30y+g/BJINVVdi2xH7je5MPJ3ZPK3JA= +github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= +github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1 h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.0 h1:kbxbvI4Un1LUWKxufD+BiE6AEExYYgkQLQmLFqA1LFk= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= -github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.2-0.20190904063534-ff6b7dc882cf h1:gFVkHXmVAhEbxZVDln5V9GKrLaluNoFHDbrZwAWZgws= +github.com/golang/snappy v0.0.2-0.20190904063534-ff6b7dc882cf/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 h1:YYWNAGTKWhKpcLLt7aSj/odlKrSrelQwlovBpDuf19w= -github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw= github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= -github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3 h1:pe9JHs3cHHDQgOFXJJdYkK6fLz2PWyYtP4hthoCMvs8= -github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= -github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee h1:J2XAy40+7yz70uaOiMbNnluTg7gyQhtGqLQncQh+4J8= -github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.21.0 h1:HxAxpR8Z0M8omihvQdsD3PF0qPjlqYqp2vMJzstoKeI= -github.com/golangci/golangci-lint v1.21.0/go.mod h1:phxpHK52q7SE+5KpPnti4oZTdFCEsn/tKN+nFvCKXfk= -github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc h1:gLLhTLMk2/SutryVJ6D4VZCU3CUqr8YloG7FPIBWFpI= -github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/golangci-lint v1.39.0 h1:aAUjdBxARwkGLd5PU0vKuym281f2rFOyqh3GB4nXcq8= +github.com/golangci/golangci-lint v1.39.0/go.mod h1:mzMK3FGyk8LKTOxpRDcDqxwHVudnYemESTt5rpUxqCM= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770 h1:EL/O5HGrF7Jaq0yNhBLucz9hTuRzj2LdwGBOaENgxIk= -github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21 h1:leSNB7iYzLYSSx3J/s5sVf4Drkc68W2wm4Ixh/mr0us= -github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= -github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0 h1:HVfrLniijszjS1aiNg8JbBMO2+E1WIQ+j/gL4SQqGPg= -github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20210208091834-cd28932614b5 h1:c9Mqqrm/Clj5biNaG7rABrmwUq88nHh0uABo2b/WYmc= +github.com/golangci/revgrep v0.0.0-20210208091834-cd28932614b5/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= +github.com/google/flatbuffers v1.12.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v2.0.0+incompatible h1:dicJ2oXwypfwUGnB2/TYWYEKiuk9eYQlQO/AnOHl5mI= +github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-dap v0.2.0/go.mod h1:5q8aYQFnHOAZEMP+6vmq25HKYAEwE+LF5yh7JKrrhSQ= github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.17 h1:rMrlX2ZY2UbvT+sdz3+6J+pp2z+msCq9MxTU6ymxbBY= github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= +github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= +github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= +github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= +github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gookit/color v1.3.8/go.mod h1:R3ogXq2B9rTbXoSHJ1HyUVAZ3poOJHpd9nQmyGZsfvQ= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4= github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f h1:KMlcu9X58lhTA/KrfX8Bi1LQSO4pzoVjTiL3h4Jk+Zk= github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= +github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254 h1:Nb2aRlC404yz7gQIfRZxX9/MLvQiqXyiBTJtgAy6yrI= +github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254/go.mod h1:M9mZEtGIsR1oDaZagNPNG9iq9n2HrhZ17dsXk73V3Lw= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2 h1:Pgr17XVTNXAk3q/r4CpKzC5xBM/qW1uVLV+IhRZpIIk= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= -github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3 h1:JVnpOZS+qxli+rgVl98ILOXVNbW+kb5wcxeGx8ShUIw= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.4.1 h1:/7clKqrVfiVwiBQLM0Uke4KvXnO6JcCTS7HwF2D6wG8= +github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1 h1:xHopR5L2lRz6OsjH4R2HG5wRhW9ySl3FsHIvi5pcXwc= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/forcetypeassert v0.0.0-20200621232751-01d4955beaa5 h1:rx8127mFPqXXsfPSo8BwnIU97MKFZc89WHAHt8PwDVY= +github.com/gostaticanalysis/forcetypeassert v0.0.0-20200621232751-01d4955beaa5/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 h1:FlFbCRLd5Jr4iYXZufAvgWN6Ao0JrI5chLINnUXDDr0= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.14.3 h1:OCJlWkOUoTnl0neNGlf4fUm3TmbEtguw7vR+nGtnDjY= -github.com/grpc-ecosystem/grpc-gateway v1.14.3/go.mod h1:6CwZWGDSPRJidgKAtJVvND6soZe6fT7iteq8wDPdhb0= -github.com/gxed/go-shellwords v1.0.3 h1:2TP32H4TAklZUdz84oj95BJhVnIrRasyx2j1cqH5K38= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= +github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/gxed/go-shellwords v1.0.3/go.mod h1:N7paucT91ByIjmVJHhvoarjoQnmsi3Jd3vH7VqgtMxQ= -github.com/gxed/hashland/keccakpg v0.0.1 h1:wrk3uMNaMxbXiHibbPO4S0ymqJMm41WiudyFSs7UnsU= github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1 h1:SheiaIt0sda5K+8FLz952/1iWS9zrnKsEJaOJu4ZbSc= github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hannahhoward/cbor-gen-for v0.0.0-20191218204337-9ab7b1bcc099 h1:vQqOW42RRM5LoM/1K5dK940VipLqpH8lEVGrMz+mNjU= -github.com/hannahhoward/cbor-gen-for v0.0.0-20191218204337-9ab7b1bcc099/go.mod h1:WVPCl0HO/0RAL5+vBH2GMxBomlxBF70MAS78+Lu1//k= +github.com/hako/durafmt v0.0.0-20200710122514-c0fb7b4da026 h1:BpJ2o0OR5FV7vrkDYfXYVJQeMNWa8RhklZOpW2ITAIQ= +github.com/hako/durafmt v0.0.0-20200710122514-c0fb7b4da026/go.mod h1:5Scbynm8dF1XAPwIwkGPqzkM/shndPm79Jd1003hTjE= +github.com/hannahhoward/cbor-gen-for v0.0.0-20200817222906-ea96cece81f1 h1:F9k+7wv5OIk1zcq23QpdiL0hfDuXPjuOmMNaC6fgQ0Q= +github.com/hannahhoward/cbor-gen-for v0.0.0-20200817222906-ea96cece81f1/go.mod h1:jvfsLIxk0fY/2BKSQ1xf2406AKA5dwMmKKv0ADcOfN8= github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e h1:3YKHER4nmd7b5qy5t0GWDTwSn4OyRgfAXSmo6VnryBY= github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e/go.mod h1:I8h3MITA53gN9OnWGCgaMa0JWVRdXthWw4M3CPM54OY= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hodgesds/perf-utils v0.0.8/go.mod h1:F6TfvsbtrF88i++hou29dTXlI2sfsJv+gRZDtmTJkAs= +github.com/howeyc/gopass v0.0.0-20190910152052-7cb4b85ec19c h1:aY2hhxLhjEAbfXOx2nRJxCXezC6CO2V/yN+OCr1srtk= +github.com/howeyc/gopass v0.0.0-20190910152052-7cb4b85ec19c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= +github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= +github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/ipfs/bbloom v0.0.1 h1:s7KkiBPfxCeDVo47KySjK0ACPc5GJRUxFpdyWEuDjhw= +github.com/influxdata/influxdb-client-go/v2 v2.2.2 h1:O0CGIuIwQafvAxttAJ/VqMKfbWWn2Mt8rbOmaM2Zj4w= +github.com/influxdata/influxdb-client-go/v2 v2.2.2/go.mod h1:fa/d1lAdUHxuc1jedx30ZfNG573oQTQmUni3N6pcW+0= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/ipfs-force-community/go-ipfs-cmds v0.6.1-0.20210521090123-4587df7fa0ab h1:+Jov61TTljdzTKBecQizmUWJ6IIoVgzjukKppVr5TgI= +github.com/ipfs-force-community/go-ipfs-cmds v0.6.1-0.20210521090123-4587df7fa0ab/go.mod h1:ZgYiWVnCk43ChwoH8hAmI1IRbuVtq3GSTHwtRB/Kqhk= +github.com/ipfs-force-community/go-jsonrpc v0.1.4-0.20210731021807-68e5207079bc h1:L4JH2Ltl/Embq4qYezs3RsIYW1BB/fB9TfUkk42FOzU= +github.com/ipfs-force-community/go-jsonrpc v0.1.4-0.20210731021807-68e5207079bc/go.mod h1:XBBpuKIMaXIIzeqzO1iucq4GvbF8CxmXRFoezRh+Cx4= +github.com/ipfs-force-community/metrics v1.0.0/go.mod h1:mn40SioMuKtjmRumHFy/fJ26Pn028XuDjUJE9dorjyw= +github.com/ipfs-force-community/metrics v1.0.1-0.20211022060227-11142a08b729 h1:elS3KmzAMVrcZpmP2RMEjs9Zlwh6LfhJTfYQdj4TREs= +github.com/ipfs-force-community/metrics v1.0.1-0.20211022060227-11142a08b729/go.mod h1:mn40SioMuKtjmRumHFy/fJ26Pn028XuDjUJE9dorjyw= +github.com/ipfs-force-community/venus-common-utils v0.0.0-20210714054928-2042a9040759 h1:dI1FSoq0C85B1Y+G2ZYrhf5TeIkumzmtz4tjakoqSxU= +github.com/ipfs-force-community/venus-common-utils v0.0.0-20210714054928-2042a9040759/go.mod h1:AWIt7L1UiUeIzqQdjQ/quZcVcCdnr6GXabGLBgEIMzU= github.com/ipfs/bbloom v0.0.1/go.mod h1:oqo8CVWsJFMOZqTglBG4wydCE4IQA/G2/SEofB0rjUI= github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0= github.com/ipfs/go-bitswap v0.0.9/go.mod h1:kAPf5qgn2W2DrgAcscZ3HrM9qh4pH+X8Fkk3UPrwvis= github.com/ipfs/go-bitswap v0.1.0/go.mod h1:FFJEf18E9izuCqUtHxbWEvq+reg7o4CW5wSAE1wsxj0= github.com/ipfs/go-bitswap v0.1.2/go.mod h1:qxSWS4NXGs7jQ6zQvoPY3+NmOfHHG47mhkiLzBpJQIs= -github.com/ipfs/go-bitswap v0.1.8 h1:38X1mKXkiU6Nzw4TOSWD8eTVY5eX3slQunv3QEWfXKg= -github.com/ipfs/go-bitswap v0.1.8/go.mod h1:TOWoxllhccevbWFUR2N7B1MTSVVge1s6XSMiCSA4MzM= -github.com/ipfs/go-bitswap v0.2.8 h1:5tQrbyyRS3DkzvcM5n+bVjdSAHLgvH7D+1LopndhUII= -github.com/ipfs/go-bitswap v0.2.8/go.mod h1:2Yjog0GMdH8+AsxkE0DI9D2mANaUTxbVVav0pPoZoug= +github.com/ipfs/go-bitswap v0.5.1 h1:721YAEDBnLIrvcIMkCHCdqp34hA8jwL9yKMkyJpSpco= +github.com/ipfs/go-bitswap v0.5.1/go.mod h1:P+ckC87ri1xFLvk74NlXdP0Kj9RmWAh4+H78sC6Qopo= github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc= -github.com/ipfs/go-block-format v0.0.2 h1:qPDvcP19izTjU8rgo6p7gTXZlkMkF5bz5G3fqIsSCPE= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= +github.com/ipfs/go-block-format v0.0.3 h1:r8t66QstRp/pd/or4dpnbVfXT5Gt7lOqRvC+/dDTpMc= +github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk= github.com/ipfs/go-blockservice v0.0.7/go.mod h1:EOfb9k/Y878ZTRY/CH0x5+ATtaipfbRhbvNSdgc/7So= github.com/ipfs/go-blockservice v0.1.0/go.mod h1:hzmMScl1kXHg3M2BjTymbVPjv627N7sYcvYaKbop39M= -github.com/ipfs/go-blockservice v0.1.3 h1:9XgsPMwwWJSC9uVr2pMDsW2qFTBSkxpGMhmna8mIjPM= -github.com/ipfs/go-blockservice v0.1.3/go.mod h1:OTZhFpkgY48kNzbgyvcexW9cHrpjBYIjSR0KoDOFOLU= -github.com/ipfs/go-cid v0.0.1 h1:GBjWPktLnNyX0JiQCNFpUuUSoMw5KMyqrsejHYlILBE= +github.com/ipfs/go-blockservice v0.2.1 h1:NJ4j/cwEfIg60rzAWcCIxRtOwbf6ZPK49MewNxObCPQ= +github.com/ipfs/go-blockservice v0.2.1/go.mod h1:k6SiwmgyYgs4M/qt+ww6amPeUH9EISLRBnvUurKJhi8= github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.3 h1:UIAh32wymBpStoe83YCzwVQQ5Oy/H0FdxvUS6DJDzms= github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= github.com/ipfs/go-cid v0.0.4-0.20191112011718-79e75dffeb10/go.mod h1:/BYOuUoxkE+0f6tGzlzMvycuN+5l35VOR4Bpg2sCmds= -github.com/ipfs/go-cid v0.0.4 h1:UlfXKrZx1DjZoBhQHmNHLC1fK1dUJDN20Y28A7s+gJ8= github.com/ipfs/go-cid v0.0.4/go.mod h1:4LLaPOQwmk5z9LBgQnpkivrx8BJjUyGwTXCd5Xfj6+M= -github.com/ipfs/go-cid v0.0.5 h1:o0Ix8e/ql7Zb5UVUJEUfjsWCIY8t48++9lR8qi6oiJU= github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-datastore v0.0.1 h1:AW/KZCScnBWlSb5JbnEnLKFWXL224LBEh/9KXXOrUms= +github.com/ipfs/go-cid v0.0.6-0.20200501230655-7c82f3b81c00/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= +github.com/ipfs/go-cid v0.0.6/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-cid v0.1.0 h1:YN33LQulcRHjfom/i25yoOZR4Telp1Hr/2RU3d0PnC0= +github.com/ipfs/go-cid v0.1.0/go.mod h1:rH5/Xv83Rfy8Rw6xG+id3DYAMUVmem1MowoKwdXmN2o= github.com/ipfs/go-datastore v0.0.1/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= -github.com/ipfs/go-datastore v0.0.5 h1:q3OfiOZV5rlsK1H5V8benjeUApRfMGs4Mrhmr6NriQo= github.com/ipfs/go-datastore v0.0.5/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= -github.com/ipfs/go-datastore v0.1.0 h1:TOxI04l8CmO4zGtesENhzm4PwkFwJXY3rKiYaaMf9fI= github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= -github.com/ipfs/go-datastore v0.1.1 h1:F4k0TkTAZGLFzBOrVKDAvch6JZtuN4NHkfdcEZL50aI= github.com/ipfs/go-datastore v0.1.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw= -github.com/ipfs/go-datastore v0.3.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw= github.com/ipfs/go-datastore v0.4.0/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-datastore v0.4.4 h1:rjvQ9+muFaJ+QZ7dN5B1MSDNQ0JVZKkkES/rMZmA8X8= github.com/ipfs/go-datastore v0.4.4/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= +github.com/ipfs/go-datastore v0.4.5/go.mod h1:eXTcaaiN6uOlVCLS9GjJUJtlvJfM3xk23w3fyfrmmJs= +github.com/ipfs/go-datastore v0.4.7-0.20211013204805-28a3721c2e66/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= +github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= +github.com/ipfs/go-datastore v0.5.1 h1:WkRhLuISI+XPD0uk3OskB0fYFSyqK8Ob5ZYew9Qa1nQ= +github.com/ipfs/go-datastore v0.5.1/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ds-badger v0.0.2 h1:7ToQt7QByBhOTuZF2USMv+PGlMcBC7FW7FdgQ4FCsoo= github.com/ipfs/go-ds-badger v0.0.2/go.mod h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjvRcKeSGij8= -github.com/ipfs/go-ds-badger v0.0.5 h1:dxKuqw5T1Jm8OuV+lchA76H9QZFyPKZeLuT6bN42hJQ= github.com/ipfs/go-ds-badger v0.0.5/go.mod h1:g5AuuCGmr7efyzQhLL8MzwqcauPojGPUaHzfGTzuE3s= +github.com/ipfs/go-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9YlmAvpQBk= github.com/ipfs/go-ds-badger v0.2.1/go.mod h1:Tx7l3aTph3FMFrRS838dcSJh+jjA7cX9DrGVwx/NOwE= -github.com/ipfs/go-ds-badger2 v0.0.0-20200211201106-609c9d2a39c7 h1:2P493YpV0SsG9c0btHfZt9eZCO+tzLAelQyrwQQcey0= -github.com/ipfs/go-ds-badger2 v0.0.0-20200211201106-609c9d2a39c7/go.mod h1:d/QTAGj3T4lF4CuFpywNnAQ0RbffuDc1BtGFAvuYWls= +github.com/ipfs/go-ds-badger v0.2.3/go.mod h1:pEYw0rgg3FIrywKKnL+Snr+w/LjJZVMTBRn4FS6UHUk= +github.com/ipfs/go-ds-badger v0.2.7/go.mod h1:02rnztVKA4aZwDuaRPTf8mpqcKmXP7mLl6JPxd14JHA= +github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= +github.com/ipfs/go-ds-badger2 v0.1.0/go.mod h1:pbR1p817OZbdId9EvLOhKBgUVTM3BMCSTan78lDDVaw= +github.com/ipfs/go-ds-badger2 v0.1.2 h1:sQc2q1gaXrv8YFNeUtxil0neuyDf9hnVHfLsi7lpXfE= +github.com/ipfs/go-ds-badger2 v0.1.2/go.mod h1:3FtQmDv6fMubygEfU43bsFelYpIiXX/XEYA54l9eCwg= github.com/ipfs/go-ds-leveldb v0.0.1/go.mod h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc= +github.com/ipfs/go-ds-leveldb v0.1.0/go.mod h1:hqAW8y4bwX5LWcCtku2rFNX3vjDZCy5LZCg+cSZvYb8= github.com/ipfs/go-ds-leveldb v0.4.1/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= -github.com/ipfs/go-fs-lock v0.0.1 h1:XHX8uW4jQBYWHj59XXcjg7BHlHxV9ZOYs6Y43yb7/l0= -github.com/ipfs/go-fs-lock v0.0.1/go.mod h1:DNBekbboPKcxs1aukPSaOtFA3QfSdi5C855v0i9XJ8Y= -github.com/ipfs/go-graphsync v0.0.6-0.20200504202014-9d5f2c26a103 h1:SD+bXod/pOWKJCGj0tG140ht8Us5k+3JBcHw0PVYTho= -github.com/ipfs/go-graphsync v0.0.6-0.20200504202014-9d5f2c26a103/go.mod h1:jMXfqIEDFukLPZHqDPp8tJMbHO9Rmeb9CEGevngQbmE= -github.com/ipfs/go-hamt-ipld v0.0.15-0.20200131012125-dd88a59d3f2e h1:bUtmeXx6JpjxRPlMdlKfPXC5kKhLHuueXKgs1Txb9ZU= -github.com/ipfs/go-hamt-ipld v0.0.15-0.20200131012125-dd88a59d3f2e/go.mod h1:9aQJu/i/TaRDW6jqB5U217dLIDopn50wxLdHXM2CTfE= -github.com/ipfs/go-hamt-ipld v0.0.15-0.20200204200533-99b8553ef242/go.mod h1:kq3Pi+UP3oHhAdKexE+kHHYRKMoFNuGero0R7q3hWGg= -github.com/ipfs/go-hamt-ipld v0.1.1-0.20200501020327-d53d20a7063e h1:Klv6s+kbuhh0JVpGFmFK2t6AtZxJfAnVneQHh1DlFOo= -github.com/ipfs/go-hamt-ipld v0.1.1-0.20200501020327-d53d20a7063e/go.mod h1:giiPqWYCnRBYpNTsJ/EX1ojldX5kTXrXYckSJQ7ko9M= -github.com/ipfs/go-ipfs-blockstore v0.0.1 h1:O9n3PbmTYZoNhkgkEyrXTznbmktIXif62xLX+8dPHzc= +github.com/ipfs/go-ds-leveldb v0.4.2/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= +github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= +github.com/ipfs/go-fs-lock v0.0.6 h1:sn3TWwNVQqSeNjlWy6zQ1uUGAZrV3hPOyEA6y1/N2a0= +github.com/ipfs/go-fs-lock v0.0.6/go.mod h1:OTR+Rj9sHiRubJh3dRhD15Juhd/+w6VPOY28L7zESmM= +github.com/ipfs/go-graphsync v0.11.0 h1:PiiD5CnoC3xEHMW8d6uBGqGcoTwiMB5d9CORIEyF6iA= +github.com/ipfs/go-graphsync v0.11.0/go.mod h1:wC+c8vGVjAHthsVIl8LKr37cUra2GOaMYcQNNmMxDqE= +github.com/ipfs/go-hamt-ipld v0.1.1/go.mod h1:1EZCr2v0jlCnhpa+aZ0JZYp8Tt2w16+JJOAVz17YcDk= github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08= -github.com/ipfs/go-ipfs-blockstore v0.1.0 h1:V1GZorHFUIB6YgTJQdq7mcaIpUfCM3fCyVi+MTo9O88= -github.com/ipfs/go-ipfs-blockstore v0.1.0/go.mod h1:5aD0AvHPi7mZc6Ci1WCAhiBQu2IsfTduLl+422H6Rqw= -github.com/ipfs/go-ipfs-blockstore v0.1.4 h1:2SGI6U1B44aODevza8Rde3+dY30Pb+lbcObe1LETxOQ= -github.com/ipfs/go-ipfs-blockstore v0.1.4 h1:2SGI6U1B44aODevza8Rde3+dY30Pb+lbcObe1LETxOQ= -github.com/ipfs/go-ipfs-blockstore v0.1.4/go.mod h1:Jxm3XMVjh6R17WvxFEiyKBLUGr86HgIYJW/D/MwqeYQ= -github.com/ipfs/go-ipfs-blockstore v0.1.4/go.mod h1:Jxm3XMVjh6R17WvxFEiyKBLUGr86HgIYJW/D/MwqeYQ= -github.com/ipfs/go-ipfs-blockstore v1.0.0 h1:pmFp5sFYsYVvMOp9X01AK3s85usVcLvkBTRsN6SnfUA= -github.com/ipfs/go-ipfs-blockstore v1.0.0/go.mod h1:knLVdhVU9L7CC4T+T4nvGdeUIPAXlnd9zmXfp+9MIjU= +github.com/ipfs/go-ipfs-blockstore v0.2.1/go.mod h1:jGesd8EtCM3/zPgx+qr0/feTXGUeRai6adgwC+Q+JvE= +github.com/ipfs/go-ipfs-blockstore v1.1.0/go.mod h1:5QDUApRqpgPcfGstCxYeMnjt/DYQtXXdJVCvxHHuWVk= +github.com/ipfs/go-ipfs-blockstore v1.1.2 h1:WCXoZcMYnvOTmlpX+RSSnhVN0uCmbWTeepTGX5lgiXw= +github.com/ipfs/go-ipfs-blockstore v1.1.2/go.mod h1:w51tNR9y5+QXB0wkNcHt4O2aSZjTdqaEWaQdSxEyUOY= github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ= github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk= -github.com/ipfs/go-ipfs-chunker v0.0.1 h1:cHUUxKFQ99pozdahi+uSC/3Y6HeRpi9oTeUHbE27SEw= github.com/ipfs/go-ipfs-chunker v0.0.1/go.mod h1:tWewYK0we3+rMbOh7pPFGDyypCtvGcBFymgY4rSDLAw= github.com/ipfs/go-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7NapWLY8= github.com/ipfs/go-ipfs-chunker v0.0.5/go.mod h1:jhgdF8vxRHycr00k13FM8Y0E+6BoalYeobXmUyTreP8= github.com/ipfs/go-ipfs-cmdkit v0.0.1 h1:X6YXEAjUljTzevE6DPUKXSqcgf+4FXzcn5B957F5MXo= github.com/ipfs/go-ipfs-cmdkit v0.0.1/go.mod h1:9FtbMdUabcSqv/G4/8WCxSLxkZxn/aZEFrxxqnVcRbg= -github.com/ipfs/go-ipfs-cmds v0.0.1 h1:wPTynLMa+JImcTsPaVmrUDP8mJ3S8HQVUWixnKi7+k4= -github.com/ipfs/go-ipfs-cmds v0.0.1/go.mod h1:k7I8PptE2kCJchR3ta546LRyxl4/uBYbLQHOJM0sUQ8= github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ= github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-ipfs-ds-help v0.0.1 h1:QBg+Ts2zgeemK/dB0saiF/ykzRGgfoFMT90Rzo0OnVU= github.com/ipfs/go-ipfs-ds-help v0.0.1/go.mod h1:gtP9xRaZXqIQRh1HRpp595KbBEdgqWFxefeVKOV8sxo= -github.com/ipfs/go-ipfs-ds-help v0.1.1 h1:IW/bXGeaAZV2VH0Kuok+Ohva/zHkHmeLFBxC1k7mNPc= github.com/ipfs/go-ipfs-ds-help v0.1.1/go.mod h1:SbBafGJuGsPI/QL3j9Fc5YPLeAu+SzOkI0gFwAg+mOs= -github.com/ipfs/go-ipfs-ds-help v1.0.0 h1:bEQ8hMGs80h0sR8O4tfDgV6B01aaF9qeTrujrTLYV3g= github.com/ipfs/go-ipfs-ds-help v1.0.0/go.mod h1:ujAbkeIgkKAWtxxNkoZHWLCyk5JpPoKnGyCcsoF6ueE= -github.com/ipfs/go-ipfs-exchange-interface v0.0.1 h1:LJXIo9W7CAmugqI+uofioIpRb6rY30GUu7G6LUfpMvM= +github.com/ipfs/go-ipfs-ds-help v1.1.0 h1:yLE2w9RAsl31LtfMt91tRZcrx+e61O5mDxFRR994w4Q= +github.com/ipfs/go-ipfs-ds-help v1.1.0/go.mod h1:YR5+6EaebOhfcqVCyqemItCLthrpVNot+rsOU/5IatU= github.com/ipfs/go-ipfs-exchange-interface v0.0.1/go.mod h1:c8MwfHjtQjPoDyiy9cFquVtVHkO9b9Ob3FG91qJnWCM= -github.com/ipfs/go-ipfs-exchange-offline v0.0.1 h1:P56jYKZF7lDDOLx5SotVh5KFxoY6C81I1NSHW1FxGew= +github.com/ipfs/go-ipfs-exchange-interface v0.1.0 h1:TiMekCrOGQuWYtZO3mf4YJXDIdNgnKWZ9IE3fGlnWfo= +github.com/ipfs/go-ipfs-exchange-interface v0.1.0/go.mod h1:ych7WPlyHqFvCi/uQI48zLZuAWVP5iTQPXEfVaw5WEI= github.com/ipfs/go-ipfs-exchange-offline v0.0.1/go.mod h1:WhHSFCVYX36H/anEKQboAzpUws3x7UeEGkzQc3iNkM0= -github.com/ipfs/go-ipfs-files v0.0.1 h1:OroTsI58plHGX70HPLKy6LQhPR3HZJ5ip61fYlo6POM= -github.com/ipfs/go-ipfs-files v0.0.1/go.mod h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4= -github.com/ipfs/go-ipfs-files v0.0.3 h1:ME+QnC3uOyla1ciRPezDW0ynQYK2ikOh9OCKAEg4uUA= +github.com/ipfs/go-ipfs-exchange-offline v0.1.1 h1:mEiXWdbMN6C7vtDG21Fphx8TGCbZPpQnz/496w/PL4g= +github.com/ipfs/go-ipfs-exchange-offline v0.1.1/go.mod h1:vTiBRIbzSwDD0OWm+i3xeT0mO7jG2cbJYatp3HPk5XY= github.com/ipfs/go-ipfs-files v0.0.3/go.mod h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4= -github.com/ipfs/go-ipfs-files v0.0.7 h1:s5BRD12ndahqYifeH1S8Z73zqZhR+3IdKYAG9PiETs0= -github.com/ipfs/go-ipfs-files v0.0.7/go.mod h1:wiN/jSG8FKyk7N0WyctKSvq3ljIa2NNTiZB55kpTdOs= +github.com/ipfs/go-ipfs-files v0.0.4/go.mod h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4= github.com/ipfs/go-ipfs-files v0.0.8 h1:8o0oFJkJ8UkO/ABl8T6ac6tKF3+NIpj67aAB6ZpusRg= github.com/ipfs/go-ipfs-files v0.0.8/go.mod h1:wiN/jSG8FKyk7N0WyctKSvq3ljIa2NNTiZB55kpTdOs= -github.com/ipfs/go-ipfs-keystore v0.0.1 h1:sE4lNCZYl7OsgZp4Nmm4TCvIN3ub5tTDfjT6lIh6Brk= -github.com/ipfs/go-ipfs-keystore v0.0.1/go.mod h1:5WjcKN1ESzCVzYKo5JvO1iYHLE0n626HL/cr3dSkqBs= github.com/ipfs/go-ipfs-posinfo v0.0.1 h1:Esoxj+1JgSjX0+ylc0hUmJCOv6V2vFoZiETLR6OtpRs= github.com/ipfs/go-ipfs-posinfo v0.0.1/go.mod h1:SwyeVP+jCwiDu0C313l/8jg6ZxM0qqtlt2a0vILTc1A= -github.com/ipfs/go-ipfs-pq v0.0.1 h1:zgUotX8dcAB/w/HidJh1zzc1yFq6Vm8J7T2F4itj/RU= github.com/ipfs/go-ipfs-pq v0.0.1/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY= github.com/ipfs/go-ipfs-pq v0.0.2 h1:e1vOOW6MuOwG2lqxcLA+wEn93i/9laCY8sXAw76jFOY= github.com/ipfs/go-ipfs-pq v0.0.2/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY= -github.com/ipfs/go-ipfs-routing v0.0.1 h1:394mZeTLcbM/LDO12PneBYvkZAUA+nRnmC0lAzDXKOY= github.com/ipfs/go-ipfs-routing v0.0.1/go.mod h1:k76lf20iKFxQTjcJokbPM9iBXVXVZhcOwc360N4nuKs= -github.com/ipfs/go-ipfs-routing v0.1.0 h1:gAJTT1cEeeLj6/DlLX6t+NxD9fQe2ymTO6qWRDI/HQQ= github.com/ipfs/go-ipfs-routing v0.1.0/go.mod h1:hYoUkJLyAUKhF58tysKpids8RNDPO42BVMgK5dNsoqY= -github.com/ipfs/go-ipfs-util v0.0.1 h1:Wz9bL2wB2YBJqggkA4dD7oSmqB4cAnpNbGrlHJulv50= +github.com/ipfs/go-ipfs-routing v0.2.1 h1:E+whHWhJkdN9YeoHZNj5itzc+OR292AJ2uE9FFiW0BY= +github.com/ipfs/go-ipfs-routing v0.2.1/go.mod h1:xiNNiwgjmLqPS1cimvAw6EyB9rkVDbiocA4yY+wRNLM= github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc= +github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= +github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= github.com/ipfs/go-ipld-cbor v0.0.2/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= -github.com/ipfs/go-ipld-cbor v0.0.3 h1:ENsxvybwkmke7Z/QJOmeJfoguj6GH3Y0YOaGrfy9Q0I= github.com/ipfs/go-ipld-cbor v0.0.3/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= -github.com/ipfs/go-ipld-cbor v0.0.4 h1:Aw3KPOKXjvrm6VjwJvFf1F1ekR/BH3jdof3Bk7OTiSA= github.com/ipfs/go-ipld-cbor v0.0.4/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= -github.com/ipfs/go-ipld-cbor v0.0.5-0.20200204214505-252690b78669 h1:jIVle1vGSzxyUhseYNEqd7qcDVRrIbJ7UxGwao70cF0= -github.com/ipfs/go-ipld-cbor v0.0.5-0.20200204214505-252690b78669/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= -github.com/ipfs/go-ipld-format v0.0.1 h1:HCu4eB/Gh+KD/Q0M8u888RFkorTWNIL3da4oc5dwc80= +github.com/ipfs/go-ipld-cbor v0.0.5/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= +github.com/ipfs/go-ipld-cbor v0.0.6-0.20211211231443-5d9b9e1f6fa8/go.mod h1:ssdxxaLJPXH7OjF5V4NSjBbcfh+evoR4ukuru0oPXMA= +github.com/ipfs/go-ipld-cbor v0.0.6 h1:pYuWHyvSpIsOOLw4Jy7NbBkCyzLDcl64Bf/LZW7eBQ0= +github.com/ipfs/go-ipld-cbor v0.0.6/go.mod h1:ssdxxaLJPXH7OjF5V4NSjBbcfh+evoR4ukuru0oPXMA= github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms= -github.com/ipfs/go-ipld-format v0.0.2 h1:OVAGlyYT6JPZ0pEfGntFPS40lfrDmaDbQwNHEY2G9Zs= github.com/ipfs/go-ipld-format v0.0.2/go.mod h1:4B6+FM2u9OJ9zCV+kSbgFAZlOrv1Hqbf0INGQgiKf9k= github.com/ipfs/go-ipld-format v0.2.0 h1:xGlJKkArkmBvowr+GMCX0FEZtkro71K1AwiKnL37mwA= github.com/ipfs/go-ipld-format v0.2.0/go.mod h1:3l3C1uKoadTPbeNfrDi+xMInYKlx2Cvg1BuydPSdzQs= -github.com/ipfs/go-log v0.0.1 h1:9XTUN/rW64BCG1YhPK9Hoy3q8nr4gOmHHBpgFdfw6Lc= +github.com/ipfs/go-ipld-legacy v0.1.0 h1:wxkkc4k8cnvIGIjPO0waJCe7SHEyFgl+yQdafdjGrpA= +github.com/ipfs/go-ipld-legacy v0.1.0/go.mod h1:86f5P/srAmh9GcIcWQR9lfFLZPrIyyXQeVlOWeeWEuI= +github.com/ipfs/go-ipns v0.1.2 h1:O/s/0ht+4Jl9+VoxoUo0zaHjnZUS+aBQIKTuzdZ/ucI= +github.com/ipfs/go-ipns v0.1.2/go.mod h1:ioQ0j02o6jdIVW+bmi18f4k2gRf0AV3kZ9KeHYHICnQ= github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.0 h1:BW3LQIiZzpNyolt84yvKNCd3FU+AK4VDw1hnHR+1aiI= github.com/ipfs/go-log v1.0.0/go.mod h1:JO7RzlMK6rA+CIxFMLOuB6Wf5b81GDiKElL7UPSIKjA= github.com/ipfs/go-log v1.0.1/go.mod h1:HuWlQttfN6FWNHRhlY5yMk/lW7evQC0HHGOxEwMRR8I= -github.com/ipfs/go-log v1.0.2 h1:s19ZwJxH8rPWzypjcDpqPLIyV7BnbLqvpli3iZoqYK0= github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk= -github.com/ipfs/go-log v1.0.3 h1:Gg7SUYSZ7BrqaKMwM+hRgcAkKv4QLfzP4XPQt5Sx/OI= github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A= +github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= +github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= +github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= github.com/ipfs/go-log/v2 v2.0.1/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.2 h1:xguurydRdfKMJjKyxNXNU8lYP0VZH1NUwJRwUorjuEw= github.com/ipfs/go-log/v2 v2.0.2/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.3 h1:Q2gXcBoCALyLN/pUQlz1qgu0x3uFV6FzP9oXhpfyJpc= github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.9-0.20200520025255-8c45666d33d4 h1:jxy4/1nHY8atvUQf/pRhFHGFySBWQPIfLHG1ODS7R4M= -github.com/ipfs/go-log/v2 v2.0.9-0.20200520025255-8c45666d33d4/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= +github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= +github.com/ipfs/go-log/v2 v2.0.8/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= +github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= +github.com/ipfs/go-log/v2 v2.1.2-0.20200626104915-0016c0b4b3e4/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= +github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= +github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= +github.com/ipfs/go-log/v2 v2.4.0 h1:iR/2o9PGWanVJrBgIH5Ff8mPGOwpqLaPIAFqSnsdlzk= +github.com/ipfs/go-log/v2 v2.4.0/go.mod h1:nPZnh7Cj7lwS3LpRU5Mwr2ol1c2gXIEXuF6aywqrtmo= github.com/ipfs/go-merkledag v0.0.6/go.mod h1:QYPdnlvkOg7GnQRofu9XZimC5ZW5Wi3bKys/4GQQfto= -github.com/ipfs/go-merkledag v0.2.3 h1:aMdkK9G1hEeNvn3VXfiEMLY0iJnbiQQUHnM0HFJREsE= github.com/ipfs/go-merkledag v0.2.3/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= -github.com/ipfs/go-merkledag v0.3.1 h1:3UqWINBEr3/N+r6OwgFXAddDP/8zpQX/8J7IGVOCqRQ= -github.com/ipfs/go-merkledag v0.3.1/go.mod h1:fvkZNNZixVW6cKSZ/JfLlON5OlgTXNdRLz0p6QG/I2M= +github.com/ipfs/go-merkledag v0.2.4/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= +github.com/ipfs/go-merkledag v0.5.1 h1:tr17GPP5XtPhvPPiWtu20tSGZiZDuTaJRXBLcr79Umk= +github.com/ipfs/go-merkledag v0.5.1/go.mod h1:cLMZXx8J08idkp5+id62iVftUQV+HlYJ3PIhDfZsjA4= github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg= github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY= github.com/ipfs/go-path v0.0.7 h1:H06hKMquQ0aYtHiHryOMLpQC1qC3QwXwkahcEVD51Ho= github.com/ipfs/go-path v0.0.7/go.mod h1:6KTKmeRnBXgqrTvzFrPV3CamxcgvXX/4z79tfAd2Sno= github.com/ipfs/go-peertaskqueue v0.0.4/go.mod h1:03H8fhyeMfKNFWqzYEVyMbcPUeYrqP1MX6Kd+aN+rMQ= github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U= -github.com/ipfs/go-peertaskqueue v0.1.1 h1:+gPjbI+V3NktXZOqJA1kzbms2pYmhjgQQal0MzZrOAY= -github.com/ipfs/go-peertaskqueue v0.1.1/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U= -github.com/ipfs/go-peertaskqueue v0.2.0 h1:2cSr7exUGKYyDeUyQ7P/nHPs9P7Ht/B+ROrpN1EJOjc= -github.com/ipfs/go-peertaskqueue v0.2.0/go.mod h1:5/eNrBEbtSKWCG+kQK8K8fGNixoYUnr+P7jivavs9lY= -github.com/ipfs/go-todocounter v0.0.1 h1:kITWA5ZcQZfrUnDNkRn04Xzh0YFaDFXsoO2A81Eb6Lw= -github.com/ipfs/go-todocounter v0.0.1/go.mod h1:l5aErvQc8qKE2r7NDMjmq5UNAvuZy0rC8BHOplkWvZ4= +github.com/ipfs/go-peertaskqueue v0.7.0 h1:VyO6G4sbzX80K58N60cCaHsSsypbUNs1GjO5seGNsQ0= +github.com/ipfs/go-peertaskqueue v0.7.0/go.mod h1:M/akTIE/z1jGNXMU7kFB4TeSEFvj68ow0Rrb04donIU= +github.com/ipfs/go-unixfs v0.2.2-0.20190827150610-868af2e9e5cb/go.mod h1:IwAAgul1UQIcNZzKPYZWOCijryFBeCV79cNubPzol+k= github.com/ipfs/go-unixfs v0.2.4 h1:6NwppOXefWIyysZ4LR/qUBPvXd5//8J3jiMdvpbw6Lo= github.com/ipfs/go-unixfs v0.2.4/go.mod h1:SUdisfUjNoSDzzhGVxvCL9QO/nKdwXdr+gbMUdqcbYw= github.com/ipfs/go-verifcid v0.0.1 h1:m2HI7zIuR5TFyQ1b79Da5N9dnnCP1vcu2QqawmWlK2E= github.com/ipfs/go-verifcid v0.0.1/go.mod h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZc0g37pY0= -github.com/ipfs/iptb v1.3.8-0.20190401234037-98ccf4228a73 h1:aVEkLO+VpBjWcEh6XuhRus91Pd2Wj4p6cgcq/gS0er8= -github.com/ipfs/iptb v1.3.8-0.20190401234037-98ccf4228a73/go.mod h1:1rzHpCYtNp87/+hTxG5TfCVn/yMY3dKnLn8tBiMfdmg= -github.com/ipld/go-car v0.1.1-0.20200429200904-c222d793c339 h1:YEYaf6mrrjoTfGpi7MajslcGvhP23Sh0b3ubcGYRMw0= -github.com/ipld/go-car v0.1.1-0.20200429200904-c222d793c339/go.mod h1:eajxljm6I8o3LitnFeVEmucwZmz7+yLSiKce9yYMefg= -github.com/ipld/go-ipld-prime v0.0.2-0.20200428162820-8b59dc292b8e h1:ZISbJlM0urTANR9KRfRaqlBmyOj5uUtxs2r4Up9IXsA= -github.com/ipld/go-ipld-prime v0.0.2-0.20200428162820-8b59dc292b8e/go.mod h1:uVIwe/u0H4VdKv3kaN1ck7uCb6yD9cFLS9/ELyXbsw8= -github.com/ipld/go-ipld-prime-proto v0.0.0-20200428191222-c1ffdadc01e1 h1:K1Ysr7kgIlo7YQkPqdkA6H7BVdIugvuAz7OQUTJxLdE= -github.com/ipld/go-ipld-prime-proto v0.0.0-20200428191222-c1ffdadc01e1/go.mod h1:OAV6xBmuTLsPZ+epzKkPB1e25FHk/vCtyatkdHcArLs= +github.com/ipfs/iptb v1.4.0 h1:YFYTrCkLMRwk/35IMyC6+yjoQSHTEcNcefBStLJzgvo= +github.com/ipfs/iptb v1.4.0/go.mod h1:1rzHpCYtNp87/+hTxG5TfCVn/yMY3dKnLn8tBiMfdmg= +github.com/ipld/go-car v0.1.0/go.mod h1:RCWzaUh2i4mOEkB3W45Vc+9jnS/M6Qay5ooytiBHl3g= +github.com/ipld/go-car v0.3.3 h1:D6y+jvg9h2ZSv7GLUMWUwg5VTLy1E7Ak+uQw5orOg3I= +github.com/ipld/go-car v0.3.3/go.mod h1:/wkKF4908ULT4dFIFIUZYcfjAnj+KFnJvlh8Hsz1FbQ= +github.com/ipld/go-codec-dagpb v1.3.0 h1:czTcaoAuNNyIYWs6Qe01DJ+sEX7B+1Z0LcXjSatMGe8= +github.com/ipld/go-codec-dagpb v1.3.0/go.mod h1:ga4JTU3abYApDC3pZ00BC2RSvC3qfBb9MSJkMLSwnhA= +github.com/ipld/go-ipld-prime v0.0.2-0.20191108012745-28a82f04c785/go.mod h1:bDDSvVz7vaK12FNvMeRYnpRFkSUPNQOiCYQezMD/P3w= +github.com/ipld/go-ipld-prime v0.9.0/go.mod h1:KvBLMr4PX1gWptgkzRjVZCrLmSGcZCb/jioOQwCqZN8= +github.com/ipld/go-ipld-prime v0.9.1-0.20210324083106-dc342a9917db/go.mod h1:KvBLMr4PX1gWptgkzRjVZCrLmSGcZCb/jioOQwCqZN8= +github.com/ipld/go-ipld-prime v0.11.0/go.mod h1:+WIAkokurHmZ/KwzDOMUuoeJgaRQktHtEaLglS3ZeV8= +github.com/ipld/go-ipld-prime v0.12.3/go.mod h1:PaeLYq8k6dJLmDUSLrzkEpoGV4PEfe/1OtFN/eALOc8= +github.com/ipld/go-ipld-prime v0.14.3-0.20211207234443-319145880958 h1:olscE5Sv+ts+N9YLQsIL9k6eS6y6CXMGRl5RCr2Cn/E= +github.com/ipld/go-ipld-prime v0.14.3-0.20211207234443-319145880958/go.mod h1:QcE4Y9n/ZZr8Ijg5bGPT0GqYWgZ1704nH0RDcQtgTP0= +github.com/ipld/go-ipld-prime-proto v0.0.0-20191113031812-e32bd156a1e5/go.mod h1:gcvzoEDBjwycpXt3LBE061wT9f46szXGHAmj9uoP6fU= github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52 h1:QG4CGBqCeuBo6aZlGAamSkxWdgWfZGeE49eUOWJPA4c= github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52/go.mod h1:fdg+/X9Gg4AsAIzWpEHwnqd+QY3b7lajxyjE1m4hkq4= -github.com/jackpal/gateway v1.0.5 h1:qzXWUJfuMdlLMtt0a3Dgt+xkWQiA5itDEITVJtuSwMc= github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= -github.com/jackpal/go-nat-pmp v1.0.1 h1:i0LektDkO1QlrTm/cSuP+PyBCDnYvjPLGl4LdWEMiaA= github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec h1:DQqZhhDvrTrEQ3Qod5yfavcA064e53xlQ+xajiorXgM= github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4uRSZMmzKNLoXvTu1sfx+1kv/DojUlPrSZGs= -github.com/jbenet/go-cienv v0.1.0 h1:Vc/s0QbQtoxX8MwwSLWWh+xNNZvM3Lw7NsTcHrvvhMc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c h1:uUx61FiAa1GI6ZmVd2wf2vULeQZIKG66eybjNXKYCz4= github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c/go.mod h1:sdx1xVM9UuLw1tXnhJWN3piypTUO3vCIHYmG15KE/dU= -github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2 h1:vhC1OXXiT9R2pczegwz6moDvuRpggaroAXhPIseh57A= github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= -github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8 h1:bspPhN+oKYFk5fcGNuQzp6IGzYQSenLEgH3s6jkXrWw= +github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= +github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= -github.com/jbenet/goprocess v0.1.3 h1:YKyIEECS/XvcfHtBzxtjBBbWK+MbvA6dG8ASiqwvr10= github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 h1:rp+c0RAYOWj8l6qbCUTSiRLG/iKnW3K3/QfPPuSsBt4= -github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= +github.com/jgautheron/goconst v1.4.0 h1:hp9XKUpe/MPyDamUbfsrGpe+3dnY2whNK4EtB86dvLM= +github.com/jgautheron/goconst v1.4.0/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= +github.com/jingyugao/rowserrcheck v0.0.0-20210315055705-d907ca737bb1 h1:4Rlb26NqzNtbDH69CRpr0vZooj3jAlXTycWCX3xRYAY= +github.com/jingyugao/rowserrcheck v0.0.0-20210315055705-d907ca737bb1/go.mod h1:TOQpc2SLx6huPfoFGK3UOnEG+u02D3C1GeosjupAKCA= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.2 h1:eVKgfIdy9b6zbWBMgFpfDPoAMifwSZagU9HmEU6zgiI= +github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.1.1-0.20190114141812-62fb9bc030d1 h1:qBCV/RLV02TSfQa7tFmxTihnG+u+7JXByOkhlkR5rmQ= github.com/jonboulle/clockwork v0.1.1-0.20190114141812-62fb9bc030d1/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= +github.com/jonboulle/clockwork v0.2.0 h1:J2SLSdy7HgElq8ekSl2Mxh6vrRNFxqbXGenYH2I02Vs= +github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw= +github.com/jsimonetti/rtnetlink v0.0.0-20190830100107-3784a6c7c552/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw= +github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4/go.mod h1:WGuG/smIU4J/54PblvSbh+xvCZmpJnFgr3ds6Z55XMQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE= github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kabukky/httpscerts v0.0.0-20150320125433-617593d7dcb3 h1:Iy7Ifq2ysilWU4QlCx/97OoI4xT1IV7i8byT/EyIT/M= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/julz/importas v0.0.0-20210228071311-d0bf5cb4e1db h1:ZmwBthGFMVAieuVpLzuedUH9l4pY/0iFG16DN9dS38o= +github.com/julz/importas v0.0.0-20210228071311-d0bf5cb4e1db/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/kabukky/httpscerts v0.0.0-20150320125433-617593d7dcb3/go.mod h1:BYpt4ufZiIGv2nXn4gMxnfKV306n3mWXgNu/d2TqdTU= github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= +github.com/kilic/bls12-381 v0.0.0-20200607163746-32e1441c8a9f/go.mod h1:XXfR6YFCRSrkEXbNlIyDsgXVNJWVUV30m/ebkVy9n6s= +github.com/kilic/bls12-381 v0.0.0-20200731194930-64c428e1bff5/go.mod h1:XXfR6YFCRSrkEXbNlIyDsgXVNJWVUV30m/ebkVy9n6s= +github.com/kilic/bls12-381 v0.0.0-20200820230200-6b2c19996391 h1:51kHw7l/dUDdOdW06AlUGT5jnpj6nqQSILebcsikSjA= +github.com/kilic/bls12-381 v0.0.0-20200820230200-6b2c19996391/go.mod h1:XXfR6YFCRSrkEXbNlIyDsgXVNJWVUV30m/ebkVy9n6s= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.0 h1:YTDO4pNy7AUN/021p+JGHycQyYNIyMoenM1YDVK6RlY= +github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= +github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg= +github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b h1:wxtKgYHEncAU00muMD06dzLiahtGM1eouRNOzVV7tdQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= -github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d h1:68u9r4wEvL3gYg2jvAOgROwZ3H+Y3hIDk4tbbmIjcYQ= github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= +github.com/koron/go-ssdp v0.0.2 h1:fL3wAoyT6hXHQlORyXUW4Q23kkQpJRgEAYcZB5BR71o= +github.com/koron/go-ssdp v0.0.2/go.mod h1:XoLfkAiA2KeZsYh4DbHxD7h3nR2AZNqVQOa+LJuqPYs= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/libp2p/go-addr-util v0.0.1 h1:TpTQm9cXVRVSKsYbgQ7GKc3KbbHVTnbostgGaDEP+88= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.4.0 h1:2Nx7XbdbE/BYZeoip2mURKUdtHQRuy6Ug+wR7K9ywNM= +github.com/kulti/thelper v0.4.0/go.mod h1:vMu2Cizjy/grP+jmsvOFDx1kYP6+PD1lqg4Yu5exl2U= +github.com/kunwardeep/paralleltest v1.0.2 h1:/jJRv0TiqPoEy/Y8dQxCFJhD56uS/pnvtatgTZBHokU= +github.com/kunwardeep/paralleltest v1.0.2/go.mod h1:ZPqNm1fVHPllh5LPVujzbVz1JN2GhLxSfY+oqUsvG30= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/ldez/gomoddirectives v0.2.1 h1:9pAcW9KRZW7HQjFwbozNvFMcNVwdCBufU7os5QUwLIY= +github.com/ldez/gomoddirectives v0.2.1/go.mod h1:sGicqkRgBOg//JfpXwkB9Hj0X5RyJ7mlACM5B9f6Me4= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= -github.com/libp2p/go-buffer-pool v0.0.1 h1:9Rrn/H46cXjaA2HQ5Y8lyhOS1NhTkZ4yuEs2r3Eechg= +github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= +github.com/libp2p/go-addr-util v0.1.0 h1:acKsntI33w2bTU7tC9a0SaPimJGfSI0bFKC18ChxeVI= +github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw= github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-conn-security v0.0.1 h1:4kMMrqrt9EUNCNjX1xagSJC+bq16uqjMe9lk1KBMVNs= +github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= +github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= github.com/libp2p/go-conn-security v0.0.1/go.mod h1:bGmu51N0KU9IEjX7kl2PQjgZa40JQWnayTvNMgD/vyk= github.com/libp2p/go-conn-security-multistream v0.0.2/go.mod h1:nc9vud7inQ+d6SO0I/6dSWrdMnHnzZNHeyUQqrAJulE= -github.com/libp2p/go-conn-security-multistream v0.1.0 h1:aqGmto+ttL/uJgX0JtQI0tD21CIEy5eYd1Hlp0juHY0= github.com/libp2p/go-conn-security-multistream v0.1.0/go.mod h1:aw6eD7LOsHEX7+2hJkDxw1MteijaVcI+/eP2/x3J1xc= -github.com/libp2p/go-eventbus v0.1.0 h1:mlawomSAjjkk97QnYiEmHsLu7E136+2oCWSHRUvMfzQ= +github.com/libp2p/go-conn-security-multistream v0.2.0/go.mod h1:hZN4MjlNetKD3Rq5Jb/P5ohUnFLNzEAR4DLSzpn2QLU= +github.com/libp2p/go-conn-security-multistream v0.2.1/go.mod h1:cR1d8gA0Hr59Fj6NhaTpFhJZrjSYuNmhpT2r25zYR70= +github.com/libp2p/go-conn-security-multistream v0.3.0 h1:9UCIKlBL1hC9u7nkMXpD1nkc/T53PKMAn3/k9ivBAVc= +github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= github.com/libp2p/go-eventbus v0.1.0/go.mod h1:vROgu5cs5T7cv7POWlWxBaVLxfSegC5UGQf8A2eEmx4= -github.com/libp2p/go-flow-metrics v0.0.1 h1:0gxuFd2GuK7IIP5pKljLwps6TvcuYgvG7Atqi3INF5s= +github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc= +github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= +github.com/libp2p/go-flow-metrics v0.0.2/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= github.com/libp2p/go-libp2p v0.0.30/go.mod h1:XWT8FGHlhptAv1+3V/+J5mEpzyui/5bvFsNuWYs611A= github.com/libp2p/go-libp2p v0.1.0/go.mod h1:6D/2OBauqLUoqcADOJpn9WbKqvaM07tDw68qHM0BxUM= github.com/libp2p/go-libp2p v0.1.1/go.mod h1:I00BRo1UuUSdpuc8Q2mN7yDF/oTUTRAX6JWpTiK9Rp8= -github.com/libp2p/go-libp2p v0.6.0 h1:EFArryT9N7AVA70LCcOh8zxsW+FeDnxwcpWQx9k7+GM= -github.com/libp2p/go-libp2p v0.6.0/go.mod h1:mfKWI7Soz3ABX+XEBR61lGbg+ewyMtJHVt043oWeqwg= -github.com/libp2p/go-libp2p v0.6.1 h1:mxabyJf4l6AmotDOKObwSfBNBWjL5VYXysVFLUMAuB8= github.com/libp2p/go-libp2p v0.6.1/go.mod h1:CTFnWXogryAHjXAKEbOf1OWY+VeAP3lDMZkfEI5sT54= github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xSU1ivxn0k= github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniVO7zIHGMw= -github.com/libp2p/go-libp2p v0.8.1 h1:6AK178W4GmfGxV+L51bd54/fSWEjNR+S0DO0odk/CwI= github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= +github.com/libp2p/go-libp2p v0.8.3/go.mod h1:EsH1A+8yoWK+L4iKcbPYu6MPluZ+CHWI9El8cTaefiM= +github.com/libp2p/go-libp2p v0.9.2/go.mod h1:cunHNLDVus66Ct9iXXcjKRLdmHdFdHVe1TAnbubJQqQ= +github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2QxCZlwRH0= +github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m2kJVru3rM= +github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= +github.com/libp2p/go-libp2p v0.17.0 h1:8l4GV401OSd4dFRyHDtIT/mEzdh/aQGoFC8xshYgm5M= +github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= +github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= +github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= +github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= github.com/libp2p/go-libp2p-autonat v0.0.6/go.mod h1:uZneLdOkZHro35xIhpbtTzLlgYturpu4J5+0cZK3MqE= -github.com/libp2p/go-libp2p-autonat v0.1.0 h1:aCWAu43Ri4nU0ZPO7NyLzUvvfqd0nE3dX0R/ZGYVgOU= github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= -github.com/libp2p/go-libp2p-autonat v0.1.1 h1:WLBZcIRsjZlWdAZj9CiBSvU2wQXoUOiS1Zk1tM7DTJI= github.com/libp2p/go-libp2p-autonat v0.1.1/go.mod h1:OXqkeGOY2xJVWKAGV2inNF5aKN/djNA3fdpCWloIudE= github.com/libp2p/go-libp2p-autonat v0.2.0/go.mod h1:DX+9teU4pEEoZUqR1PiMlqliONQdNbfzE1C718tcViI= github.com/libp2p/go-libp2p-autonat v0.2.1/go.mod h1:MWtAhV5Ko1l6QBsHQNSuM6b1sRkXrpk0/LqCr+vCVxI= -github.com/libp2p/go-libp2p-autonat v0.2.2 h1:4dlgcEEugTFWSvdG2UIFxhnOMpX76QaZSRAtXmYB8n4= github.com/libp2p/go-libp2p-autonat v0.2.2/go.mod h1:HsM62HkqZmHR2k1xgX34WuWDzk/nBwNHoeyyT4IWV6A= -github.com/libp2p/go-libp2p-autonat-svc v0.1.0 h1:28IM7iWMDclZeVkpiFQaWVANwXwE7zLlpbnS7yXxrfs= -github.com/libp2p/go-libp2p-autonat-svc v0.1.0/go.mod h1:fqi8Obl/z3R4PFVLm8xFtZ6PBL9MlV/xumymRFkKq5A= +github.com/libp2p/go-libp2p-autonat v0.2.3/go.mod h1:2U6bNWCNsAG9LEbwccBDQbjzQ8Krdjge1jLTE9rdoMM= +github.com/libp2p/go-libp2p-autonat v0.4.2/go.mod h1:YxaJlpr81FhdOv3W3BTconZPfhaYivRdf53g+S2wobk= +github.com/libp2p/go-libp2p-autonat v0.6.0/go.mod h1:bFC6kY8jwzNNWoqc8iGE57vsfwyJ/lP4O4DOV1e0B2o= +github.com/libp2p/go-libp2p-autonat v0.7.0 h1:rCP5s+A2dlhM1Xd66wurE0k7S7pPmM0D+FlqqSBXxks= +github.com/libp2p/go-libp2p-autonat v0.7.0/go.mod h1:uPvPn6J7cN+LCfFwW5tpOYvAz5NvPTc4iBamTV/WDMg= github.com/libp2p/go-libp2p-blankhost v0.0.1/go.mod h1:Ibpbw/7cPPYwFb7PACIWdvxxv0t0XCCI10t7czjAjTc= github.com/libp2p/go-libp2p-blankhost v0.1.1/go.mod h1:pf2fvdLJPsC1FsVrNP3DUUvMzUts2dsLLBEpo1vW1ro= -github.com/libp2p/go-libp2p-blankhost v0.1.4 h1:I96SWjR4rK9irDHcHq3XHN6hawCRTPUADzkJacgZLvk= github.com/libp2p/go-libp2p-blankhost v0.1.4/go.mod h1:oJF0saYsAXQCSfDq254GMNmLNz6ZTHTOvtF4ZydUvwU= +github.com/libp2p/go-libp2p-blankhost v0.1.6/go.mod h1:jONCAJqEP+Z8T6EQviGL4JsQcLx1LgTGtVqFNY8EMfQ= +github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= +github.com/libp2p/go-libp2p-blankhost v0.3.0 h1:kTnLArltMabZlzY63pgGDA4kkUcLkBFSM98zBssn/IY= +github.com/libp2p/go-libp2p-blankhost v0.3.0/go.mod h1:urPC+7U01nCGgJ3ZsV8jdwTp6Ji9ID0dMTvq+aJ+nZU= github.com/libp2p/go-libp2p-circuit v0.0.9/go.mod h1:uU+IBvEQzCu953/ps7bYzC/D/R0Ho2A9LfKVVCatlqU= github.com/libp2p/go-libp2p-circuit v0.1.0/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFkZeIRmfunbA7pmFh8= -github.com/libp2p/go-libp2p-circuit v0.1.4 h1:Phzbmrg3BkVzbqd4ZZ149JxCuUWu2wZcXf/Kr6hZJj8= github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU= -github.com/libp2p/go-libp2p-circuit v0.2.1 h1:BDiBcQxX/ZJJ/yDl3sqZt1bjj4PkZCEi7IEpwxXr13k= github.com/libp2p/go-libp2p-circuit v0.2.1/go.mod h1:BXPwYDN5A8z4OEY9sOfr2DUQMLQvKt/6oku45YUmjIo= +github.com/libp2p/go-libp2p-circuit v0.2.2/go.mod h1:nkG3iE01tR3FoQ2nMm06IUrCpCyJp1Eo4A1xYdpjfs4= +github.com/libp2p/go-libp2p-circuit v0.4.0 h1:eqQ3sEYkGTtybWgr6JLqJY6QLtPWRErvFjFDfAOO1wc= +github.com/libp2p/go-libp2p-circuit v0.4.0/go.mod h1:t/ktoFIUzM6uLQ+o1G6NuBl2ANhBKN9Bc8jRIk31MoA= +github.com/libp2p/go-libp2p-connmgr v0.2.3/go.mod h1:Gqjg29zI8CwXX21zRxy6gOg8VYu3zVerJRt2KyktzH4= +github.com/libp2p/go-libp2p-connmgr v0.2.4 h1:TMS0vc0TCBomtQJyWr7fYxcVYYhx+q/2gF++G5Jkl/w= +github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0= github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= github.com/libp2p/go-libp2p-core v0.0.2/go.mod h1:9dAcntw/n46XycV4RnlBq3BpgrmyUi9LuoTNdPrbUco= github.com/libp2p/go-libp2p-core v0.0.3/go.mod h1:j+YQMNz9WNSkNezXOsahp9kwZBKBvxLpKD316QWSJXE= @@ -681,721 +1093,1146 @@ github.com/libp2p/go-libp2p-core v0.0.4/go.mod h1:jyuCQP356gzfCFtRKyvAbNkyeuxb7O github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= github.com/libp2p/go-libp2p-core v0.2.2/go.mod h1:8fcwTbsG2B+lTgRJ1ICZtiM5GWCWZVoVrLaDRvIRng0= github.com/libp2p/go-libp2p-core v0.2.4/go.mod h1:STh4fdfa5vDYr0/SzYYeqnt+E6KfEV5VxfIrm0bcI0g= -github.com/libp2p/go-libp2p-core v0.3.0 h1:F7PqduvrztDtFsAa/bcheQ3azmNo+Nq7m8hQY5GiUW8= +github.com/libp2p/go-libp2p-core v0.2.5/go.mod h1:6+5zJmKhsf7yHn1RbmYDu08qDUpIUxGdqHuEZckmZOA= github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= github.com/libp2p/go-libp2p-core v0.3.1/go.mod h1:thvWy0hvaSBhnVBaW37BvzgVV68OUhgJJLAa6almrII= github.com/libp2p/go-libp2p-core v0.4.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.0 h1:FBQ1fpq2Fo/ClyjojVJ5AKXlKhvNc/B6U0O+7AN1ffE= github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.1 h1:6Cu7WljPQtGY2krBlMoD8L/zH3tMUsCbqNFH7cZwCoI= github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-crypto v0.0.1 h1:JNQd8CmoGTohO/akqrH16ewsqZpci2CbgYH/LmYl8gw= +github.com/libp2p/go-libp2p-core v0.5.2/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.3/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.4/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.5/go.mod h1:vj3awlOr9+GMZJFH9s4mpt9RHHgGqeHCopzbYKZdRjM= +github.com/libp2p/go-libp2p-core v0.5.6/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.6.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.7.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.8.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.8.2/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.8.5/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.8.6/go.mod h1:dgHr0l0hIKfWpGpqAMbpo19pen9wJfdCGv51mTmdpmM= +github.com/libp2p/go-libp2p-core v0.9.0/go.mod h1:ESsbz31oC3C1AvMJoGx26RTuCkNhmkSRCqZ0kQtJ2/8= +github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= +github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= +github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= +github.com/libp2p/go-libp2p-core v0.13.0 h1:IFG/s8dN6JN2OTrXX9eq2wNU/Zlz2KLdwZUp5FplgXI= +github.com/libp2p/go-libp2p-core v0.13.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE= github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I= -github.com/libp2p/go-libp2p-crypto v0.1.0 h1:k9MFy+o2zGDNGsaoZl0MA3iZ75qXxr9OOoAZF+sD5OQ= github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI= github.com/libp2p/go-libp2p-discovery v0.0.5/go.mod h1:YtF20GUxjgoKZ4zmXj8j3Nb2TUSBHFlOCetzYdbZL5I= -github.com/libp2p/go-libp2p-discovery v0.1.0 h1:j+R6cokKcGbnZLf4kcNwpx6mDEUPF3N6SrqMymQhmvs= github.com/libp2p/go-libp2p-discovery v0.1.0/go.mod h1:4F/x+aldVHjHDHuX85x1zWoFTGElt8HnoDzwkFZm29g= -github.com/libp2p/go-libp2p-discovery v0.2.0 h1:1p3YSOq7VsgaL+xVHPi8XAmtGyas6D2J6rWBEfz/aiY= github.com/libp2p/go-libp2p-discovery v0.2.0/go.mod h1:s4VGaxYMbw4+4+tsoQTqh7wfxg97AEdo4GYBt6BadWg= -github.com/libp2p/go-libp2p-discovery v0.3.0 h1:+JnYBRLzZQtRq0mK3xhyjBwHytLmJXMTZkQfbw+UrGA= github.com/libp2p/go-libp2p-discovery v0.3.0/go.mod h1:o03drFnz9BVAZdzC/QUQ+NeQOu38Fu7LJGEOK2gQltw= -github.com/libp2p/go-libp2p-host v0.0.1 h1:dnqusU+DheGcdxrE718kG4XgHNuL2n9eEv8Rg5zy8hQ= +github.com/libp2p/go-libp2p-discovery v0.4.0/go.mod h1:bZ0aJSrFc/eX2llP0ryhb1kpgkPyTo23SJ5b7UQCMh4= +github.com/libp2p/go-libp2p-discovery v0.5.0/go.mod h1:+srtPIU9gDaBNu//UHvcdliKBIcr4SfDcm0/PfPJLug= +github.com/libp2p/go-libp2p-discovery v0.6.0 h1:1XdPmhMJr8Tmj/yUfkJMIi8mgwWrLUsCB3bMxdT+DSo= +github.com/libp2p/go-libp2p-discovery v0.6.0/go.mod h1:/u1voHt0tKIe5oIA1RHBKQLVCWPna2dXmPNHc2zR9S8= github.com/libp2p/go-libp2p-host v0.0.1/go.mod h1:qWd+H1yuU0m5CwzAkvbSjqKairayEHdR5MMl7Cwa7Go= -github.com/libp2p/go-libp2p-host v0.0.3 h1:BB/1Z+4X0rjKP5lbQTmjEjLbDVbrcmLOlA6QDsN5/j4= github.com/libp2p/go-libp2p-host v0.0.3/go.mod h1:Y/qPyA6C8j2coYyos1dfRm0I8+nvd4TGrDGt4tA7JR8= -github.com/libp2p/go-libp2p-interface-connmgr v0.0.1 h1:Q9EkNSLAOF+u90L88qmE9z/fTdjLh8OsJwGw74mkwk4= github.com/libp2p/go-libp2p-interface-connmgr v0.0.1/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= -github.com/libp2p/go-libp2p-interface-connmgr v0.0.5 h1:KG/KNYL2tYzXAfMvQN5K1aAGTYSYUMJ1prgYa2/JI1E= github.com/libp2p/go-libp2p-interface-connmgr v0.0.5/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= -github.com/libp2p/go-libp2p-interface-pnet v0.0.1 h1:7GnzRrBTJHEsofi1ahFdPN9Si6skwXQE9UqR2S+Pkh8= github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k= -github.com/libp2p/go-libp2p-kad-dht v0.1.1 h1:IH6NQuoUv5w5e1O8Jc3KyVDtr0rNd0G9aaADpLI1xVo= -github.com/libp2p/go-libp2p-kad-dht v0.1.1/go.mod h1:1kj2Rk5pX3/0RwqMm9AMNCT7DzcMHYhgDN5VTi+cY0M= -github.com/libp2p/go-libp2p-kbucket v0.2.0 h1:FB2a0VkOTNGTP5gu/I444u4WabNM9V1zCkQcWb7zajI= -github.com/libp2p/go-libp2p-kbucket v0.2.0/go.mod h1:JNymBToym3QXKBMKGy3m29+xprg0EVr/GJFHxFEdgh8= -github.com/libp2p/go-libp2p-loggables v0.0.1 h1:HVww9oAnINIxbt69LJNkxD8lnbfgteXR97Xm4p3l9ps= +github.com/libp2p/go-libp2p-kad-dht v0.15.0 h1:Ke+Oj78gX5UDXnA6HBdrgvi+fStJxgYTDa51U0TsCLo= +github.com/libp2p/go-libp2p-kad-dht v0.15.0/go.mod h1:rZtPxYu1TnHHz6n1RggdGrxUX/tA1C2/Wiw3ZMUDrU0= +github.com/libp2p/go-libp2p-kbucket v0.3.1/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio= +github.com/libp2p/go-libp2p-kbucket v0.4.7 h1:spZAcgxifvFZHBD8tErvppbnNiKA5uokDu3CV7axu70= +github.com/libp2p/go-libp2p-kbucket v0.4.7/go.mod h1:XyVo99AfQH0foSf176k4jY1xUJ2+jUJIZCSDm7r2YKk= github.com/libp2p/go-libp2p-loggables v0.0.1/go.mod h1:lDipDlBNYbpyqyPX/KcoO+eq0sJYEVR2JgOexcivchg= github.com/libp2p/go-libp2p-loggables v0.1.0 h1:h3w8QFfCt2UJl/0/NW4K829HX/0S4KD31PQ7m8UXXO8= github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= -github.com/libp2p/go-libp2p-metrics v0.0.1 h1:yumdPC/P2VzINdmcKZd0pciSUCpou+s0lwYCjBbzQZU= github.com/libp2p/go-libp2p-metrics v0.0.1/go.mod h1:jQJ95SXXA/K1VZi13h52WZMa9ja78zjyy5rspMsC/08= github.com/libp2p/go-libp2p-mplex v0.1.1/go.mod h1:KUQWpGkCzfV7UIpi8SKsAVxyBgz1c9R5EvxgnwLsb/I= github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo= -github.com/libp2p/go-libp2p-mplex v0.2.1 h1:E1xaJBQnbSiTHGI1gaBKmKhu1TUKkErKJnE8iGvirYI= github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE= -github.com/libp2p/go-libp2p-mplex v0.2.2 h1:+Ld7YDAfVERQ0E+qqjE7o6fHwKuM0SqTzYiwN1lVVSA= github.com/libp2p/go-libp2p-mplex v0.2.2/go.mod h1:74S9eum0tVQdAfFiKxAyKzNdSuLqw5oadDq7+L/FELo= -github.com/libp2p/go-libp2p-mplex v0.2.3 h1:2zijwaJvpdesST2MXpI5w9wWFRgYtMcpRX7rrw0jmOo= github.com/libp2p/go-libp2p-mplex v0.2.3/go.mod h1:CK3p2+9qH9x+7ER/gWWDYJ3QW5ZxWDkm+dVvjfuG3ek= -github.com/libp2p/go-libp2p-nat v0.0.4 h1:+KXK324yaY701On8a0aGjTnw8467kW3ExKcqW2wwmyw= +github.com/libp2p/go-libp2p-mplex v0.4.0/go.mod h1:yCyWJE2sc6TBTnFpjvLuEJgTSw/u+MamvzILKdX7asw= +github.com/libp2p/go-libp2p-mplex v0.4.1 h1:/pyhkP1nLwjG3OM+VuaNJkQT/Pqq73WzB3aDN3Fx1sc= +github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= github.com/libp2p/go-libp2p-nat v0.0.4/go.mod h1:N9Js/zVtAXqaeT99cXgTV9e75KpnWCvVOiGzlcHmBbY= -github.com/libp2p/go-libp2p-nat v0.0.5 h1:/mH8pXFVKleflDL1YwqMg27W9GD8kjEx7NY0P6eGc98= github.com/libp2p/go-libp2p-nat v0.0.5/go.mod h1:1qubaE5bTZMJE+E/uu2URroMbzdubFz1ChgiN79yKPE= -github.com/libp2p/go-libp2p-nat v0.0.6 h1:wMWis3kYynCbHoyKLPBEMu4YRLltbm8Mk08HGSfvTkU= github.com/libp2p/go-libp2p-nat v0.0.6/go.mod h1:iV59LVhB3IkFvS6S6sauVTSOrNEANnINbI/fkaLimiw= -github.com/libp2p/go-libp2p-net v0.0.1 h1:xJ4Vh4yKF/XKb8fd1Ev0ebAGzVjMxXzrxG2kjtU+F5Q= +github.com/libp2p/go-libp2p-nat v0.1.0 h1:vigUi2MEN+fwghe5ijpScxtbbDz+L/6y8XwlzYOJgSY= +github.com/libp2p/go-libp2p-nat v0.1.0/go.mod h1:DQzAG+QbDYjN1/C3B6vXucLtz3u9rEonLVPtZVzQqks= github.com/libp2p/go-libp2p-net v0.0.1/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c= -github.com/libp2p/go-libp2p-net v0.0.2 h1:qP06u4TYXfl7uW/hzqPhlVVTSA2nw1B/bHBJaUnbh6M= github.com/libp2p/go-libp2p-net v0.0.2/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c= -github.com/libp2p/go-libp2p-netutil v0.0.1 h1:LgD6+skofkOx8z6odD9+MZHKjupv3ng1u6KRhaADTnA= github.com/libp2p/go-libp2p-netutil v0.0.1/go.mod h1:GdusFvujWZI9Vt0X5BKqwWWmZFxecf9Gt03cKxm2f/Q= github.com/libp2p/go-libp2p-netutil v0.1.0 h1:zscYDNVEcGxyUpMd0JReUZTrpMfia8PmLKcKF72EAMQ= github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= -github.com/libp2p/go-libp2p-peer v0.0.1 h1:0qwAOljzYewINrU+Kndoc+1jAL7vzY/oY2Go4DCGfyY= +github.com/libp2p/go-libp2p-noise v0.1.1/go.mod h1:QDFLdKX7nluB7DEnlVPbz7xlLHdwHFA9HiohJRr3vwM= +github.com/libp2p/go-libp2p-noise v0.2.0/go.mod h1:IEbYhBBzGyvdLBoxxULL/SGbJARhUeqlO8lVSREYu2Q= +github.com/libp2p/go-libp2p-noise v0.3.0 h1:NCVH7evhVt9njbTQshzT7N1S3Q6fjj9M11FCgfH5+cA= +github.com/libp2p/go-libp2p-noise v0.3.0/go.mod h1:JNjHbociDJKHD64KTkzGnzqJ0FEV5gHJa6AB00kbCNQ= github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo= github.com/libp2p/go-libp2p-peer v0.1.1/go.mod h1:jkF12jGB4Gk/IOo+yomm+7oLWxF278F7UnrYUQ1Q8es= -github.com/libp2p/go-libp2p-peer v0.2.0 h1:EQ8kMjaCUwt/Y5uLgjT8iY2qg0mGUT0N1zUjer50DsY= github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY= -github.com/libp2p/go-libp2p-peerstore v0.0.1 h1:twKovq8YK5trLrd3nB7PD2Zu9JcyAIdm7Bz9yBWjhq8= github.com/libp2p/go-libp2p-peerstore v0.0.1/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20= github.com/libp2p/go-libp2p-peerstore v0.0.6/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20= github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY= -github.com/libp2p/go-libp2p-peerstore v0.1.3 h1:wMgajt1uM2tMiqf4M+4qWKVyyFc8SfA+84VV9glZq1M= github.com/libp2p/go-libp2p-peerstore v0.1.3/go.mod h1:BJ9sHlm59/80oSkpWgr1MyY1ciXAXV397W6h1GH/uKI= -github.com/libp2p/go-libp2p-peerstore v0.2.0 h1:XcgJhI8WyUOCbHyRLNEX5542YNj8hnLSJ2G1InRjDhk= +github.com/libp2p/go-libp2p-peerstore v0.1.4/go.mod h1:+4BDbDiiKf4PzpANZDAT+knVdLxvqh7hXOujessqdzs= github.com/libp2p/go-libp2p-peerstore v0.2.0/go.mod h1:N2l3eVIeAitSg3Pi2ipSrJYnqhVnMNQZo9nkSCuAbnQ= github.com/libp2p/go-libp2p-peerstore v0.2.1/go.mod h1:NQxhNjWxf1d4w6PihR8btWIRjwRLBr4TYKfNgrUkOPA= -github.com/libp2p/go-libp2p-peerstore v0.2.2 h1:iqc/m03jHn5doXN3+kS6JKvqQRHEltiXljQB85iVHWE= github.com/libp2p/go-libp2p-peerstore v0.2.2/go.mod h1:NQxhNjWxf1d4w6PihR8btWIRjwRLBr4TYKfNgrUkOPA= +github.com/libp2p/go-libp2p-peerstore v0.2.3/go.mod h1:K8ljLdFn590GMttg/luh4caB/3g0vKuY01psze0upRw= +github.com/libp2p/go-libp2p-peerstore v0.2.4/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= +github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= +github.com/libp2p/go-libp2p-peerstore v0.2.7/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= +github.com/libp2p/go-libp2p-peerstore v0.2.8/go.mod h1:gGiPlXdz7mIHd2vfAsHzBNAMqSDkt2UBFwgcITgw1lA= +github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0= +github.com/libp2p/go-libp2p-peerstore v0.6.0 h1:HJminhQSGISBIRb93N6WK3t6Fa8OOTnHd/VBjL4mY5A= +github.com/libp2p/go-libp2p-peerstore v0.6.0/go.mod h1:DGEmKdXrcYpK9Jha3sS7MhqYdInxJy84bIPtSu65bKc= github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-protocol v0.0.1 h1:+zkEmZ2yFDi5adpVE3t9dqh/N9TbpFWywowzeEzBbLM= github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s= -github.com/libp2p/go-libp2p-protocol v0.1.0 h1:HdqhEyhg0ToCaxgMhnOmUO8snQtt/kQlcjVk3UoJU3c= github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk= -github.com/libp2p/go-libp2p-pubsub v0.2.6 h1:ypZaukCFrtD8cNeeb9nnWG4MD2Y1T0p22aQ+f7FKJig= -github.com/libp2p/go-libp2p-pubsub v0.2.6/go.mod h1:5jEp7R3ItQ0pgcEMrPZYE9DQTg/H3CTc7Mu1j2G4Y5o= -github.com/libp2p/go-libp2p-record v0.0.1 h1:zN7AS3X46qmwsw5JLxdDuI43cH5UYwovKxHPjKBYQxw= +github.com/libp2p/go-libp2p-pubsub v0.3.2-0.20200527132641-c0712c6e92cf/go.mod h1:TxPOBuo1FPdsTjFnv+FGZbNbWYsp74Culx+4ViQpato= +github.com/libp2p/go-libp2p-pubsub v0.6.0 h1:98+RXuEWW17U6cAijK1yaTf6mw/B+n5yPA421z+dlo0= +github.com/libp2p/go-libp2p-pubsub v0.6.0/go.mod h1:nJv87QM2cU0w45KPR1rZicq+FmFIOD16zmT+ep1nOmg= +github.com/libp2p/go-libp2p-quic-transport v0.10.0/go.mod h1:RfJbZ8IqXIhxBRm5hqUEJqjiiY8xmEuq3HUDS993MkA= +github.com/libp2p/go-libp2p-quic-transport v0.11.2/go.mod h1:wlanzKtIh6pHrq+0U3p3DY9PJfGqxMgPaGKaK5LifwQ= +github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= +github.com/libp2p/go-libp2p-quic-transport v0.15.0/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= +github.com/libp2p/go-libp2p-quic-transport v0.15.2 h1:wHBEceRy+1/8Ec8dAIyr+/P7L2YefIGprPVy5LrMM+k= +github.com/libp2p/go-libp2p-quic-transport v0.15.2/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= -github.com/libp2p/go-libp2p-record v0.1.0 h1:wHwBGbFzymoIl69BpgwIu0O6ta3TXGcMPvHUAcodzRc= github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= -github.com/libp2p/go-libp2p-record v0.1.1 h1:ZJK2bHXYUBqObHX+rHLSNrM3M8fmJUlUHrodDPPATmY= github.com/libp2p/go-libp2p-record v0.1.1/go.mod h1:VRgKajOyMVgP/F0L5g3kH7SVskp17vFi2xheb5uMJtg= -github.com/libp2p/go-libp2p-routing v0.0.1 h1:hPMAWktf9rYi3ME4MG48qE7dq1ofJxiQbfdvpNntjhc= +github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGdsU/9W//C8dqjQDk= +github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= +github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= -github.com/libp2p/go-libp2p-routing v0.1.0 h1:hFnj3WR3E2tOcKaGpyzfP4gvFZ3t8JkQmbapN0Ct+oU= -github.com/libp2p/go-libp2p-routing v0.1.0/go.mod h1:zfLhI1RI8RLEzmEaaPwzonRvXeeSHddONWkcTcB54nE= +github.com/libp2p/go-libp2p-routing-helpers v0.2.3/go.mod h1:795bh+9YeoFl99rMASoiVgHdi5bjack0N1+AFAdbvBw= github.com/libp2p/go-libp2p-secio v0.0.3/go.mod h1:hS7HQ00MgLhRO/Wyu1bTX6ctJKhVpm+j2/S2A5UqYb0= github.com/libp2p/go-libp2p-secio v0.1.0/go.mod h1:tMJo2w7h3+wN4pgU2LSYeiKPrfqBgkOsdiKK77hE7c8= -github.com/libp2p/go-libp2p-secio v0.2.0 h1:ywzZBsWEEz2KNTn5RtzauEDq5RFEefPsttXYwAWqHng= github.com/libp2p/go-libp2p-secio v0.2.0/go.mod h1:2JdZepB8J5V9mBp79BmwsaPQhRPNN2NrnB2lKQcdy6g= -github.com/libp2p/go-libp2p-secio v0.2.1 h1:eNWbJTdyPA7NxhP7J3c5lT97DC5d+u+IldkgCYFTPVA= github.com/libp2p/go-libp2p-secio v0.2.1/go.mod h1:cWtZpILJqkqrSkiYcDBh5lA3wbT2Q+hz3rJQq3iftD8= -github.com/libp2p/go-libp2p-secio v0.2.2 h1:rLLPvShPQAcY6eNurKNZq3eZjPWfU9kXF2eI9jIYdrg= github.com/libp2p/go-libp2p-secio v0.2.2/go.mod h1:wP3bS+m5AUnFA+OFO7Er03uO1mncHG0uVwGrwvjYlNY= github.com/libp2p/go-libp2p-swarm v0.0.6/go.mod h1:s5GZvzg9xXe8sbeESuFpjt8CJPTCa8mhEusweJqyFy8= github.com/libp2p/go-libp2p-swarm v0.1.0/go.mod h1:wQVsCdjsuZoc730CgOvh5ox6K8evllckjebkdiY5ta4= -github.com/libp2p/go-libp2p-swarm v0.2.2 h1:T4hUpgEs2r371PweU3DuH7EOmBIdTBCwWs+FLcgx3bQ= github.com/libp2p/go-libp2p-swarm v0.2.2/go.mod h1:fvmtQ0T1nErXym1/aa1uJEyN7JzaTNyBcHImCxRpPKU= -github.com/libp2p/go-libp2p-swarm v0.2.3 h1:uVkCb8Blfg7HQ/f30TyHn1g/uCwXsAET7pU0U59gx/A= github.com/libp2p/go-libp2p-swarm v0.2.3/go.mod h1:P2VO/EpxRyDxtChXz/VPVXyTnszHvokHKRhfkEgFKNM= +github.com/libp2p/go-libp2p-swarm v0.2.4/go.mod h1:/xIpHFPPh3wmSthtxdGbkHZ0OET1h/GGZes8Wku/M5Y= +github.com/libp2p/go-libp2p-swarm v0.2.8/go.mod h1:JQKMGSth4SMqonruY0a8yjlPVIkb0mdNSwckW7OYziM= +github.com/libp2p/go-libp2p-swarm v0.3.0/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJegb7H57B5hWQR5Kk= +github.com/libp2p/go-libp2p-swarm v0.5.0/go.mod h1:sU9i6BoHE0Ve5SKz3y9WfKrh8dUat6JknzUehFx8xW4= +github.com/libp2p/go-libp2p-swarm v0.5.3/go.mod h1:NBn7eNW2lu568L7Ns9wdFrOhgRlkRnIDg0FLKbuu3i8= +github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= +github.com/libp2p/go-libp2p-swarm v0.9.0 h1:LdWjHDVjPMYt3NCG2EHcQiIP8XzA8BHhHz8ZLAYol2Y= +github.com/libp2p/go-libp2p-swarm v0.9.0/go.mod h1:2f8d8uxTJmpeqHF/1ujjdXZp+98nNIbujVOMEZxCbZ8= github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.0.4 h1:Qev57UR47GcLPXWjrunv5aLIQGO4n9mhI/8/EIrEEFc= github.com/libp2p/go-libp2p-testing v0.0.4/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.1.0 h1:WaFRj/t3HdMZGNZqnU2pS7pDRBmMeoDx7/HDNpeyT9U= github.com/libp2p/go-libp2p-testing v0.1.0/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-testing v0.1.1 h1:U03z3HnGI7Ni8Xx6ONVZvUFOAzWYmolWf5W5jAOPNmU= github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-tls v0.1.3 h1:twKMhMu44jQO+HgQK9X8NHO5HkeJu2QbhLzLJpa8oNM= +github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= +github.com/libp2p/go-libp2p-testing v0.3.0/go.mod h1:efZkql4UZ7OVsEfaxNHZPzIehtsBXMrXnCfJIgDti5g= +github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= +github.com/libp2p/go-libp2p-testing v0.4.2/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= +github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= +github.com/libp2p/go-libp2p-testing v0.6.0 h1:tV/wz6mS1VoAYA/5DGTiyzw9TJ+eXMCMvzU5VPLJSgg= +github.com/libp2p/go-libp2p-testing v0.6.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= +github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= +github.com/libp2p/go-libp2p-tls v0.3.1 h1:lsE2zYte+rZCEOHF72J1Fg3XK3dGQyKvI6i5ehJfEp0= +github.com/libp2p/go-libp2p-tls v0.3.1/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= github.com/libp2p/go-libp2p-transport v0.0.1/go.mod h1:UzbUs9X+PHOSw7S3ZmeOxfnwaQY5vGDzZmKPod3N3tk= -github.com/libp2p/go-libp2p-transport v0.0.5 h1:pV6+UlRxyDpASSGD+60vMvdifSCby6JkJDfi+yUMHac= github.com/libp2p/go-libp2p-transport v0.0.5/go.mod h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A= github.com/libp2p/go-libp2p-transport-upgrader v0.0.4/go.mod h1:RGq+tupk+oj7PzL2kn/m1w6YXxcIAYJYeI90h6BGgUc= -github.com/libp2p/go-libp2p-transport-upgrader v0.1.1 h1:PZMS9lhjK9VytzMCW3tWHAXtKXmlURSc3ZdvwEcKCzw= github.com/libp2p/go-libp2p-transport-upgrader v0.1.1/go.mod h1:IEtA6or8JUbsV07qPW4r01GnTenLW4oi3lOPbUMGJJA= -github.com/libp2p/go-libp2p-transport-upgrader v0.2.0 h1:5EhPgQhXZNyfL22ERZTUoVp9UVVbNowWNVtELQaKCHk= github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns= +github.com/libp2p/go-libp2p-transport-upgrader v0.3.0/go.mod h1:i+SKzbRnvXdVbU3D1dwydnTmKRPXiAR/fyvi1dXuL4o= +github.com/libp2p/go-libp2p-transport-upgrader v0.4.2/go.mod h1:NR8ne1VwfreD5VIWIU62Agt/J18ekORFU/j1i2y8zvk= +github.com/libp2p/go-libp2p-transport-upgrader v0.4.3/go.mod h1:bpkldbOWXMrXhpZbSV1mQxTrefOg2Fi+k1ClDSA4ppw= +github.com/libp2p/go-libp2p-transport-upgrader v0.4.6/go.mod h1:JE0WQuQdy+uLZ5zOaI3Nw9dWGYJIA7mywEtP2lMvnyk= +github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= +github.com/libp2p/go-libp2p-transport-upgrader v0.6.0 h1:GfMCU+2aGGEm1zW3UcOz6wYSn8tXQalFfVfcww99i5A= +github.com/libp2p/go-libp2p-transport-upgrader v0.6.0/go.mod h1:1e07y1ZSZdHo9HPbuU8IztM1Cj+DR5twgycb4pnRzRo= +github.com/libp2p/go-libp2p-xor v0.0.0-20210714161855-5c005aca55db/go.mod h1:LSTM5yRnjGZbWNTA/hRwq2gGFrvRIbQJscoIL/u6InY= github.com/libp2p/go-libp2p-yamux v0.1.2/go.mod h1:xUoV/RmYkg6BW/qGxA9XJyg+HzXFYkeXbnhjmnYzKp8= github.com/libp2p/go-libp2p-yamux v0.1.3/go.mod h1:VGSQVrqkh6y4nm0189qqxMtvyBft44MOYYPpYKXiVt4= github.com/libp2p/go-libp2p-yamux v0.2.0/go.mod h1:Db2gU+XfLpm6E4rG5uGCFX6uXA8MEXOxFcRoXUODaK8= -github.com/libp2p/go-libp2p-yamux v0.2.1 h1:Q3XYNiKCC2vIxrvUJL+Jg1kiyeEaIDNKLjgEjo3VQdI= github.com/libp2p/go-libp2p-yamux v0.2.1/go.mod h1:1FBXiHDk1VyRM1C0aez2bCfHQ4vMZKkAQzZbkSQt5fI= -github.com/libp2p/go-libp2p-yamux v0.2.2 h1:eGvbqWqWY9S5lrpe2gA0UCOLCdzCgYSAR3vo/xCsNQg= github.com/libp2p/go-libp2p-yamux v0.2.2/go.mod h1:lIohaR0pT6mOt0AZ0L2dFze9hds9Req3OfS+B+dv4qw= -github.com/libp2p/go-libp2p-yamux v0.2.5 h1:MuyItOqz03oi8npvjgMJxgnhllJLZnO/dKVOpTZ9+XI= github.com/libp2p/go-libp2p-yamux v0.2.5/go.mod h1:Zpgj6arbyQrmZ3wxSZxfBmbdnWtbZ48OpsfmQVTErwA= -github.com/libp2p/go-libp2p-yamux v0.2.7 h1:vzKu0NVtxvEIDGCv6mjKRcK0gipSgaXmJZ6jFv0d/dk= github.com/libp2p/go-libp2p-yamux v0.2.7/go.mod h1:X28ENrBMU/nm4I3Nx4sZ4dgjZ6VhLEn0XhIoZ5viCwU= -github.com/libp2p/go-maddr-filter v0.0.1 h1:apvYTg0aIxxQyBX+XHKOR+0+lYhGs1Yv+JmTH9nyl5I= +github.com/libp2p/go-libp2p-yamux v0.2.8/go.mod h1:/t6tDqeuZf0INZMTgd0WxIRbtK2EzI2h7HbFm9eAKI4= +github.com/libp2p/go-libp2p-yamux v0.4.0/go.mod h1:+DWDjtFMzoAwYLVkNZftoucn7PelNoy5nm3tZ3/Zw30= +github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= +github.com/libp2p/go-libp2p-yamux v0.5.4/go.mod h1:tfrXbyaTqqSU654GTvK3ocnSZL3BuHoeTSqhcel1wsE= +github.com/libp2p/go-libp2p-yamux v0.6.0/go.mod h1:MRhd6mAYnFRnSISp4M8i0ClV/j+mWHo2mYLifWGw33k= +github.com/libp2p/go-libp2p-yamux v0.7.0 h1:bVXHbTj/XH4uBBsPrg26BlDABk5WYRlssY73P0SjhPc= +github.com/libp2p/go-libp2p-yamux v0.7.0/go.mod h1:fMyA0CsPfHkIuBU0wjRGrCjTBFiXTXxG0k5M4ETv+08= github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= -github.com/libp2p/go-maddr-filter v0.0.5 h1:CW3AgbMO6vUvT4kf87y4N+0P8KUl2aqLYhrGyDUbLSg= github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= +github.com/libp2p/go-maddr-filter v0.1.0 h1:4ACqZKw8AqiuJfwFGq1CYDFugfXTOos+qQ3DETkhtCE= +github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= github.com/libp2p/go-mplex v0.0.3/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0= github.com/libp2p/go-mplex v0.0.4/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0= -github.com/libp2p/go-mplex v0.1.0 h1:/nBTy5+1yRyY82YaO6HXQRnO5IAGsXTjEJaR3LdTPc0= github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU= -github.com/libp2p/go-mplex v0.1.1 h1:huPH/GGRJzmsHR9IZJJsrSwIM5YE2gL4ssgl1YWb/ps= github.com/libp2p/go-mplex v0.1.1/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= -github.com/libp2p/go-mplex v0.1.2 h1:qOg1s+WdGLlpkrczDqmhYzyk3vCfsQ8+RxRTQjOZWwI= github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= -github.com/libp2p/go-msgio v0.0.2 h1:ivPvEKHxmVkTClHzg6RXTYHqaJQ0V9cDbq+6lKb3UV0= +github.com/libp2p/go-mplex v0.2.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= +github.com/libp2p/go-mplex v0.3.0 h1:U1T+vmCYJaEoDJPV1aq31N56hS+lJgb397GsylNSgrU= +github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= github.com/libp2p/go-msgio v0.0.2/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-msgio v0.0.3/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.4 h1:agEFehY3zWJFUHK6SEMR7UYmk2z6kC3oeCM7ybLhguA= github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-nat v0.0.3 h1:l6fKV+p0Xa354EqQOQP+d8CivdLM4kl5GxC1hSc/UeI= +github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= +github.com/libp2p/go-msgio v0.1.0 h1:8Q7g/528ivAlfXTFWvWhVjTE8XG8sDTkRUKPYh9+5Q8= +github.com/libp2p/go-msgio v0.1.0/go.mod h1:eNlv2vy9V2X/kNldcZ+SShFE++o2Yjxwx6RAYsmgJnE= github.com/libp2p/go-nat v0.0.3/go.mod h1:88nUEt0k0JD45Bk93NIwDqjlhiOwOoV36GchpcVc1yI= -github.com/libp2p/go-nat v0.0.4 h1:KbizNnq8YIf7+Hn7+VFL/xE0eDrkPru2zIO9NMwL8UQ= github.com/libp2p/go-nat v0.0.4/go.mod h1:Nmw50VAvKuk38jUBcmNh6p9lUJLoODbJRvYAa/+KSDo= -github.com/libp2p/go-nat v0.0.5 h1:qxnwkco8RLKqVh1NmjQ+tJ8p8khNLFxuElYG/TwqW4Q= github.com/libp2p/go-nat v0.0.5/go.mod h1:B7NxsVNPZmRLvMOwiEO1scOSyjA56zxYAGv1yQgRkEU= -github.com/libp2p/go-netroute v0.1.2 h1:UHhB35chwgvcRI392znJA3RCBtZ3MpE3ahNCN5MR4Xg= +github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= +github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= +github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= +github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= +github.com/libp2p/go-netroute v0.1.6 h1:ruPJStbYyXVYGQ81uzEDzuvbYRLKRrLvTYd33yomC38= +github.com/libp2p/go-netroute v0.1.6/go.mod h1:AqhkMh0VuWmfgtxKPp3Oc1LdU5QSWS7wl0QLhSZqXxQ= github.com/libp2p/go-openssl v0.0.2/go.mod h1:v8Zw2ijCSWBQi8Pq5GAixw6DbFfa9u6VIYDXnvOXkc0= github.com/libp2p/go-openssl v0.0.3/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.4 h1:d27YZvLoTyMhIN4njrkr8zMDOM4lfpHIp6A+TK9fovg= github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.0.1 h1:7PhkfH73VXfPJYKQ6JwS5I/eVcoyYi9IMNGc6FWpFLw= +github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= +github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA= -github.com/libp2p/go-reuseport-transport v0.0.2 h1:WglMwyXyBu61CMkjCCtnmqNqnjib0GIEjMiHTwR/KN4= +github.com/libp2p/go-reuseport v0.0.2/go.mod h1:SPD+5RwGC7rcnzngoYC86GjPzjSywuQyMVAheVBD9nQ= +github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= +github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= github.com/libp2p/go-reuseport-transport v0.0.2/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs= -github.com/libp2p/go-reuseport-transport v0.0.3 h1:zzOeXnTooCkRvoH+bSXEfXhn76+LAiwoneM0gnXjF2M= github.com/libp2p/go-reuseport-transport v0.0.3/go.mod h1:Spv+MPft1exxARzP2Sruj2Wb5JSyHNncjf1Oi2dEbzM= -github.com/libp2p/go-sockaddr v0.0.2 h1:tCuXfpA9rq7llM/v834RKc/Xvovy/AqM9kHvTV/jY/Q= +github.com/libp2p/go-reuseport-transport v0.0.4/go.mod h1:trPa7r/7TJK/d+0hdBLOCGvpQQVOU74OXbNCIMkufGw= +github.com/libp2p/go-reuseport-transport v0.0.5/go.mod h1:TC62hhPc8qs5c/RoXDZG6YmjK+/YWUPC0yYmeUecbjc= +github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7CyD1zuN7xQT8gc= +github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-stream-muxer v0.0.1 h1:Ce6e2Pyu+b5MC1k3eeFtAax0pW4gc6MosYSLV05UeLw= +github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= +github.com/libp2p/go-sockaddr v0.1.1 h1:yD80l2ZOdGksnOyHrhxDdTDFrf7Oy+v3FMVArIRgZxQ= +github.com/libp2p/go-sockaddr v0.1.1/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14= -github.com/libp2p/go-stream-muxer v0.1.0 h1:3ToDXUzx8pDC6RfuOzGsUYP5roMDthbUKRdMRRhqAqY= github.com/libp2p/go-stream-muxer v0.1.0/go.mod h1:8JAVsjeRBCWwPoZeH0W1imLOcriqXJyFvB0mR4A04sQ= github.com/libp2p/go-stream-muxer-multistream v0.1.1/go.mod h1:zmGdfkQ1AzOECIAcccoL8L//laqawOsO03zX8Sa+eGw= -github.com/libp2p/go-stream-muxer-multistream v0.2.0 h1:714bRJ4Zy9mdhyTLJ+ZKiROmAFwUHpeRidG+q7LTQOg= github.com/libp2p/go-stream-muxer-multistream v0.2.0/go.mod h1:j9eyPol/LLRqT+GPLSxvimPhNph4sfYfMoDPd7HkzIc= +github.com/libp2p/go-stream-muxer-multistream v0.3.0 h1:TqnSHPJEIqDEO7h1wZZ0p3DXdvDSiLHQidKKUGZtiOY= +github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= github.com/libp2p/go-tcp-transport v0.0.4/go.mod h1:+E8HvC8ezEVOxIo3V5vCK9l1y/19K427vCzQ+xHKH/o= -github.com/libp2p/go-tcp-transport v0.1.0 h1:IGhowvEqyMFknOar4FWCKSWE0zL36UFKQtiRQD60/8o= github.com/libp2p/go-tcp-transport v0.1.0/go.mod h1:oJ8I5VXryj493DEJ7OsBieu8fcg2nHGctwtInJVpipc= -github.com/libp2p/go-tcp-transport v0.1.1 h1:yGlqURmqgNA2fvzjSgZNlHcsd/IulAnKM8Ncu+vlqnw= github.com/libp2p/go-tcp-transport v0.1.1/go.mod h1:3HzGvLbx6etZjnFlERyakbaYPdfjg2pWP97dFZworkY= -github.com/libp2p/go-tcp-transport v0.2.0 h1:YoThc549fzmNJIh7XjHVtMIFaEDRtIrtWciG5LyYAPo= github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcroCGYw28kh94oLe0= -github.com/libp2p/go-testutil v0.0.1 h1:Xg+O0G2HIMfHqBOBDcMS1iSZJ3GEcId4qOxCQvsGZHk= +github.com/libp2p/go-tcp-transport v0.2.3/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU= +github.com/libp2p/go-tcp-transport v0.2.4/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU= +github.com/libp2p/go-tcp-transport v0.2.7/go.mod h1:lue9p1b3VmZj1MhhEGB/etmvF/nBQ0X9CW2DutBT3MM= +github.com/libp2p/go-tcp-transport v0.4.0 h1:VDyg4j6en3OuXf90gfDQh5Sy9KowO9udnd0OU8PP6zg= +github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I= -github.com/libp2p/go-testutil v0.1.0 h1:4QhjaWGO89udplblLVpgGDOQjzFlRavZOjuEnz2rLMc= github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc= github.com/libp2p/go-ws-transport v0.0.5/go.mod h1:Qbl4BxPfXXhhd/o0wcrgoaItHqA9tnZjoFZnxykuaXU= -github.com/libp2p/go-ws-transport v0.1.0 h1:F+0OvvdmPTDsVc4AjPHjV7L7Pk1B7D5QwtDcKE2oag4= github.com/libp2p/go-ws-transport v0.1.0/go.mod h1:rjw1MG1LU9YDC6gzmwObkPd/Sqwhw7yT74kj3raBFuo= -github.com/libp2p/go-ws-transport v0.2.0 h1:MJCw2OrPA9+76YNRvdo1wMnSOxb9Bivj6sVFY1Xrj6w= github.com/libp2p/go-ws-transport v0.2.0/go.mod h1:9BHJz/4Q5A9ludYWKoGCFC5gUElzlHoKzu0yY9p/klM= -github.com/libp2p/go-ws-transport v0.3.0 h1:mjo6pL5aVR9rCjl9wNq3DupbaQlyR61pzoOT2MdtxaA= github.com/libp2p/go-ws-transport v0.3.0/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= +github.com/libp2p/go-ws-transport v0.3.1/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= +github.com/libp2p/go-ws-transport v0.4.0/go.mod h1:EcIEKqf/7GDjth6ksuS/6p7R49V4CBY6/E7R/iyhYUA= +github.com/libp2p/go-ws-transport v0.5.0 h1:cO6x4P0v6PfxbKnxmf5cY2Ny4OPDGYkUqNvZzp/zdlo= +github.com/libp2p/go-ws-transport v0.5.0/go.mod h1:I2juo1dNTbl8BKSBYo98XY85kU2xds1iamArLvl8kNg= github.com/libp2p/go-yamux v1.2.1/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= -github.com/libp2p/go-yamux v1.2.3 h1:xX8A36vpXb59frIzWFdEgptLMsOANMFq2K7fPRlunYI= github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= -github.com/libp2p/go-yamux v1.3.0 h1:FsYzT16Wq2XqUGJsBbOxoz9g+dFklvNi7jN6YFPfl7U= github.com/libp2p/go-yamux v1.3.0/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= -github.com/libp2p/go-yamux v1.3.3 h1:mWuzZRCAeTBFdynLlsYgA/EIeMOLr8XY04wa52NRhsE= github.com/libp2p/go-yamux v1.3.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= -github.com/libp2p/go-yamux v1.3.5 h1:ibuz4naPAully0pN6J/kmUARiqLpnDQIzI/8GCOrljg= github.com/libp2p/go-yamux v1.3.5/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.3.6/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.3.7/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= +github.com/libp2p/go-yamux v1.4.0/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= +github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI= +github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= +github.com/libp2p/go-yamux/v2 v2.2.0/go.mod h1:3So6P6TV6r75R9jiBpiIKgU/66lOarCZjqROGxzPpPQ= +github.com/libp2p/go-yamux/v2 v2.3.0 h1:luRV68GS1vqqr6EFUjtu1kr51d+IbW0gSowu8emYWAI= +github.com/libp2p/go-yamux/v2 v2.3.0/go.mod h1:iTU+lOIn/2h0AgKcL49clNTwfEw+WSfDYrXe05EyKIs= +github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= +github.com/lucas-clemente/quic-go v0.19.3/go.mod h1:ADXpNbTQjq1hIzCpB+y/k5iz4n4z4IwqoLb94Kh5Hu8= +github.com/lucas-clemente/quic-go v0.21.2/go.mod h1:vF5M1XqhBAHgbjKcJOXY3JZz3GP0T3FQhz/uyOUS38Q= +github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= +github.com/lucas-clemente/quic-go v0.24.0 h1:ToR7SIIEdrgOhgVTHvPgdVRJfgVy+N0wQAagH7L4d5g= +github.com/lucas-clemente/quic-go v0.24.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= +github.com/lufia/iostat v1.1.0/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/AQ+Pg= +github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magefile/mage v1.9.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= +github.com/magefile/mage v1.11.0 h1:C/55Ywp9BpgVVclD3lRnSYCwXTYxmSppIgLeDYlNuls= +github.com/magefile/mage v1.11.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb h1:RHba4YImhrUVQDHUCe2BNSOz4tVy2yGyXhvYDvxGgeE= -github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/maratori/testpackage v1.0.1 h1:QtJ5ZjqapShm0w5DosRjg0PRlSdAdlx+W6cCKoALdbQ= +github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= +github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= +github.com/marten-seemann/qtls v0.10.0/go.mod h1:UvMd1oaYDACI99/oZUYLzMCkBXQVT0aGm99sJhbT8hs= +github.com/marten-seemann/qtls-go1-15 v0.1.1/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= +github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= +github.com/marten-seemann/qtls-go1-15 v0.1.5/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= +github.com/marten-seemann/qtls-go1-16 v0.1.4 h1:xbHbOGGhrenVtII6Co8akhLEdrawwB2iHl5yhJRpnco= +github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= +github.com/marten-seemann/qtls-go1-17 v0.1.0-rc.1/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= +github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= +github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +github.com/mattn/go-colorable v0.0.0-20170327083344-ded68f7a9561/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5 h1:tHXDdz1cpzGaovsTB+TVB8q90WEokoVmfMqoVcrLUgw= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-xmlrpc v0.0.3/go.mod h1:mqc2dz7tP5x5BKlCahN/n+hs7OSZKJkS9JsHNBRlrxA= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= +github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mdlayher/genetlink v1.0.0/go.mod h1:0rJ0h4itni50A86M2kHcgS85ttZazNt7a8H2a2cw0Gc= +github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA= +github.com/mdlayher/netlink v0.0.0-20190828143259-340058475d09/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M= +github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M= +github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY= +github.com/mdlayher/wifi v0.0.0-20190303161829-b1436901ddee/go.mod h1:Evt/EIne46u9PtQbeTx2NTcqURpr5K4SvKtGmBuDPN8= +github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81 h1:QASJXOGm2RZ5Ardbc86qNFvby9AqkLDibfChMtAg5QM= +github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.0.5 h1:cTDWX83qkDajREg4GO0sQcYrjJtSSh3308DWJzpnUqg= +github.com/mgechev/revive v1.0.5/go.mod h1:tSw34BaGZ0iF+oVKDOjq1/LuxGifgW7shaJ6+dBYFXg= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= +github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16 h1:5W7KhL8HVF3XCFOweFD3BNESdnO8ewyYTFT2R+/b8FQ= github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0 h1:U41/2erhAKcmSI14xh/ZTUdBPOzDOIfS93ibzUSl8KM= github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= +github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mmcloughlin/avo v0.0.0-20201105074841-5d2f697d268f/go.mod h1:6aKT4zZIrpGqB3RpFU14ByCSSyKY6LfJz4J/JJChHfI= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= -github.com/mr-tron/base58 v1.1.0 h1:Y51FGVJ91WBqCEabAi5OPUz38eAx8DakuAm5svLcsfQ= +github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= +github.com/mozilla/tls-observatory v0.0.0-20210209181001-cf43108d6880/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2 h1:ZEw4I2EgPKDJ2iEw0cNmLB3ROrEmkOtXIkaG7wZg+78= github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3 h1:v+sk57XuaCKGXpWtVBX8YJzO7hMGx4Aajh4TQbdEFdc= github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= +github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= +github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= github.com/multiformats/go-multiaddr v0.0.1/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.0.2 h1:RBysRCv5rv3FWlhKWKoXv8tnsCUpEpIZpCmqAGZos2s= github.com/multiformats/go-multiaddr v0.0.2/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.0.4 h1:WgMSI84/eRLdbptXMkMWDXPjPq7SPLIgGUVm2eroyU4= github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= github.com/multiformats/go-multiaddr v0.1.0/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.1.1 h1:rVAztJYMhCQ7vEFr8FvxW3mS+HF2eY/oPbOMeS0ZDnE= github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0 h1:lR52sFwcTCuQb6bTfnXF6zA2XfyYvyd+5a9qECv/J90= github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1 h1:SgG/cw5vqyB5QQe5FPe2TqggU9WtrA9X4nZw7LlVqOI= github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= +github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= +github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= +github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= +github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= +github.com/multiformats/go-multiaddr v0.4.0 h1:hL/K4ZJhJ5PTw3nwylq9lGU5yArzcAroZmex1ghSEkQ= +github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= -github.com/multiformats/go-multiaddr-dns v0.0.2 h1:/Bbsgsy3R6e3jf2qBahzNHzww6usYaZ0NhNH3sqdFS8= github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= -github.com/multiformats/go-multiaddr-dns v0.2.0 h1:YWJoIDwLePniH7OU5hBnDZV6SWuvJqJ0YtN6pLeH9zA= github.com/multiformats/go-multiaddr-dns v0.2.0/go.mod h1:TJ5pr5bBO7Y1B18djPuRsVkduhQH2YqYSbxWJzYGdK0= -github.com/multiformats/go-multiaddr-fmt v0.0.1 h1:5YjeOIzbX8OTKVaN72aOzGIYW7PnrZrnkDyOfAWRSMA= +github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= +github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= github.com/multiformats/go-multiaddr-fmt v0.0.1/go.mod h1:aBYjqL4T/7j4Qx+R73XSv/8JsgnRFlf0w2KGLCmXl3Q= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.0.1 h1:76O59E3FavvHqNg7jvzWzsPSW5JSi/ek0E4eiDVbg9g= github.com/multiformats/go-multiaddr-net v0.0.1/go.mod h1:nw6HSxNmCIQH27XPGBuX+d1tnvM7ihcFwHMSstNAVUU= -github.com/multiformats/go-multiaddr-net v0.1.0 h1:ZepO8Ezwovd+7b5XPPDhQhayk1yt0AJpzQBpq9fejx4= github.com/multiformats/go-multiaddr-net v0.1.0/go.mod h1:5JNbcfBOP4dnhoZOv10JJVkJO0pCCEf8mTnipAo2UZQ= -github.com/multiformats/go-multiaddr-net v0.1.1 h1:jFFKUuXTXv+3ARyHZi3XUqQO+YWMKgBdhEvuGRfnL6s= github.com/multiformats/go-multiaddr-net v0.1.1/go.mod h1:5JNbcfBOP4dnhoZOv10JJVkJO0pCCEf8mTnipAo2UZQ= -github.com/multiformats/go-multiaddr-net v0.1.2 h1:P7zcBH9FRETdPkDrylcXVjQLQ2t1JQtNItZULWNWgeg= github.com/multiformats/go-multiaddr-net v0.1.2/go.mod h1:QsWt3XK/3hwvNxZJp92iMQKME1qHfpYmyIjFVsSOY6Y= -github.com/multiformats/go-multiaddr-net v0.1.3 h1:q/IYAvoPKuRzGeERn3uacWgm0LIWkLZBAvO5DxSzq3g= github.com/multiformats/go-multiaddr-net v0.1.3/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.1.4 h1:g6gwydsfADqFvrHoMkS0n9Ok9CG6F7ytOH/bJDkhIOY= github.com/multiformats/go-multiaddr-net v0.1.4/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multibase v0.0.1 h1:PN9/v21eLywrFWdFNsFKaU04kLJzuYzmrJR+ubhT9qA= +github.com/multiformats/go-multiaddr-net v0.1.5/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= +github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multihash v0.0.1 h1:HHwN1K12I+XllBCrqKnhX949Orn4oawPkegHMu2vDqQ= +github.com/multiformats/go-multibase v0.0.2/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= +github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= +github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= +github.com/multiformats/go-multicodec v0.2.0/go.mod h1:/y4YVwkfMyry5kFbMTbLJKErhycTIftytRV+llXdyS4= +github.com/multiformats/go-multicodec v0.3.0 h1:tstDwfIjiHbnIjeM5Lp+pMrSeN+LCMsEwOrkPmWm03A= +github.com/multiformats/go-multicodec v0.3.0/go.mod h1:qGGaQmioCDh+TeFOnxrbU0DaIPw8yFgAZgFG0V7p1qQ= github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= -github.com/multiformats/go-multihash v0.0.8 h1:wrYcW5yxSi3dU07n5jnuS5PrNwyHy0zRHGVoUugWvXg= github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= github.com/multiformats/go-multihash v0.0.9/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10 h1:lMoNbh2Ssd9PUF74Nz008KGzGPlfeV6wH3rit5IIGCM= github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13 h1:06x+mk/zj1FoMsgNejLpy6QTvJqlSt/BhLEy87zidlc= github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multistream v0.0.1 h1:JV4VfSdY9n7ECTtY59/TlSyFCzRILvYx4T4Ws8ZgihU= +github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= +github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= +github.com/multiformats/go-multihash v0.1.0 h1:CgAgwqk3//SVEw3T+6DqI4mWMyRuDwZtOWcJT0q9+EA= +github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84= github.com/multiformats/go-multistream v0.0.1/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= github.com/multiformats/go-multistream v0.0.4/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= -github.com/multiformats/go-multistream v0.1.0 h1:UpO6jrsjqs46mqAK3n6wKRYFhugss9ArzbyUzU+4wkQ= github.com/multiformats/go-multistream v0.1.0/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= -github.com/multiformats/go-multistream v0.1.1 h1:JlAdpIFhBhGRLxe9W6Om0w++Gd6KMWoFPZL/dEnm9nI= github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= +github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= +github.com/multiformats/go-multistream v0.2.2 h1:TCYu1BHTDr1F/Qm75qwYISQdzGcRdC21nFgQW7l7GBo= +github.com/multiformats/go-multistream v0.2.2/go.mod h1:UIcnm7Zuo8HKG+HkWgfQsGL+/MIEhyTqbODbIUwSXKs= github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2 h1:6sUvyh2YHpJCb8RZ6eYzj6iJQ4+chWYmyIHxszqlPTA= github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5 h1:XVZwSo04Cs3j/jS0uAEPpT3JY6DzMcVLLoWOSnCxOjg= github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= +github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E= -github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= +github.com/nakabonne/nestif v0.3.0 h1:+yOViDGhg8ygGrmII72nV9B/zGxY188TYpfolntsaPw= +github.com/nakabonne/nestif v0.3.0/go.mod h1:dI314BppzXjJ4HsCnbo7XzrJHPszZsjnk5wEBSYHI2c= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= +github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c h1:5bFTChQxSKNwy8ALwOebjekYExl9HTT9urdawqC95tA= github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c/go.mod h1:7qN3Y0BvzRUf4LofcoJplQL10lsFDb4PYlePTVwrP28= -github.com/nikkolasg/slog v0.0.0-20170921200349-3c8d441d7a1e h1:07zdEcJ4Fble5uWsqKpjW19699kQWRLXP+RZh1a6ZRg= -github.com/nikkolasg/slog v0.0.0-20170921200349-3c8d441d7a1e/go.mod h1:79GLCU4P87rYvYYACbNwVyc1WmRvkwQbYnybpCmRXzg= +github.com/nishanths/exhaustive v0.1.0 h1:kVlMw8h2LHPMGUVqUj6230oQjjTMFjwcZrnkhXzFfl8= +github.com/nishanths/exhaustive v0.1.0/go.mod h1:S1j9110vxV1ECdCudXRkeMnFQ/DQk9ajLT0Uf2MYZQQ= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= +github.com/nishanths/predeclared v0.2.1 h1:1TXtjmy4f3YCFjTxRd8zcFHOmoUir+gp0ESzjFzG2sw= +github.com/nishanths/predeclared v0.2.1/go.mod h1:HvkGJcA3naj4lOwnFXFDkFxVtSqQMB9sbB1usJ+xjQE= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= +github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1 h1:K0jcRCwNQM3vFGh1ppMtDh/+7ApJrjldlX8fA0jDTLQ= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= +github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= +github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg= +github.com/opentracing-contrib/go-grpc v0.0.0-20180928155321-4b5a12d3ff02/go.mod h1:JNdpVEzCpXBgIiv4ds+TzhN1hrtxq6ClLrTlT9OQRSc= +github.com/opentracing-contrib/go-grpc v0.0.0-20191001143057-db30781987df h1:vdYtBU6zvL7v+Tr+0xFM/qhahw/EvY8DMMunZHKH6eE= +github.com/opentracing-contrib/go-grpc v0.0.0-20191001143057-db30781987df/go.mod h1:DYR5Eij8rJl8h7gblRrOZ8g0kW1umSpKqYIBTgeDtLo= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= +github.com/opentracing-contrib/go-stdlib v1.0.0 h1:TBS7YuVotp8myLon4Pv7BtCBzOTo1DeZCld0Z63mW2w= +github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/otiai10/copy v1.0.2 h1:DDNipYy6RkIkjMwy+AWzgKiNTyj2RUI9yEMeETEpVyc= -github.com/otiai10/copy v1.0.2/go.mod h1:c7RpqBkwMom4bYTSkLSym4VSJz/XtncWRAj/J4PEIMY= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95 h1:+OLn68pqasWca0z5ryit9KGfp3sUsW4Lqg32iRMJyzs= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/mint v1.3.0 h1:Ady6MKVezQwHBkGzLFbrsywyp09Ah7rkmfjV3Bcr5uc= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.6.0 h1:aetoXYr0Tv7xRU/V4B4IZJ2QcbtMUFoNb3ORp7TzIK4= +github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/peterh/liner v0.0.0-20170317030525-88609521dc4b/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992 h1:bzMe+2coZJYHnhGgVlcQKuRy4FSny4ds8dLQjw5P1XE= github.com/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= -github.com/polydawn/refmt v0.0.0-20190408063855-01bf1e26dd14 h1:2m16U/rLwVaRdz7ANkHtHTodP3zTP3N451MADg64x5k= github.com/polydawn/refmt v0.0.0-20190408063855-01bf1e26dd14/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= -github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1 h1:CskT+S6Ay54OwxBGB0R3Rsx4Muto6UnEYTyKJbyRIAI= github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= -github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a h1:hjZfReYVLbqFkAtr2us7vdy04YWz3LVAirzP7reh8+M= github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e h1:ZOcivgkkFRnjfoTcGsDq3UQYiBmekwLA+qg0OjyB/ls= +github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polyfloyd/go-errorlint v0.0.0-20201127212506-19bd8db6546f h1:xAw10KgJqG5NJDfmRqJ05Z0IFblKumjtMeyiOLxj3+4= +github.com/polyfloyd/go-errorlint v0.0.0-20201127212506-19bd8db6546f/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829 h1:D+CiwcpGTW6pL6bv6KI3KbyEyCKyS+1JWS2h8PNDnGA= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA= -github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= +github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= +github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f h1:BVwpUVJDADN2ufcGik7W992pyps0wZ888b/y9GXcLTU= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0 h1:kUZDBDTdBVBYBj5Tmh2NZLlF60mfjA27rM34b+cVwNU= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.30.0 h1:JEkYlQnpzrzQFxi6gnukFPdQ+ac82oRhzMcIduJu/Ug= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/node_exporter v1.0.0-rc.0.0.20200428091818-01054558c289/go.mod h1:FGbBv5OPKjch+jNUJmEQpMZytIdyW0NdBtWFcfSKusc= +github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1 h1:/K3IL0Z1quvmJ7X0A1AwNEK7CRkVK3YwfOU/QAL4WGg= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.1.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/statsd_exporter v0.20.0/go.mod h1:YL3FWCG8JBBtaUSxAg4Gz2ZYu22bS84XM89ZQXXTWmQ= +github.com/prometheus/statsd_exporter v0.21.0 h1:hA05Q5RFeIjgwKIYEdFd59xu5Wwaznf33yKI+pyX6T8= +github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.1 h1:2KTXnHBCR4BUl8UAL2bCUorOBGC8RsmYncuDA9NEFW4= +github.com/quasilyte/go-ruleguard v0.3.1/go.mod h1:s41wdpioTcgelE3dlTUgK57UaUxjihg/DBGUccoN5IU= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.1/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20210203162857-b223e0831f88/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20210221215616-dfcc94e3dffd/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/raulk/clock v1.1.0 h1:dpb29+UKMbLqiU/jqIJptgLR1nn23HLgMY0sTCDza5Y= +github.com/raulk/clock v1.1.0/go.mod h1:3MpVxdZ/ODBQDxbN+kzshf5OSZwPjtMDx6BBXBmOeY0= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/cors v1.6.0 h1:G9tHG9lebljV9mfp9SNPDL36nCDxmo3zTlAf1YgvzmI= -github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.6.2 h1:aIihoIOHCiLZHxyoNQ+ABL4NKhFTgKLBdMLyEAh98m0= +github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d h1:BzRvVq1EHuIjxpijCEKpAxzKUUMurOQ4sknehIATRh8= -github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= -github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= -github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= +github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= +github.com/ryancurrah/gomodguard v1.2.0 h1:YWfhGOrXwLGiqcC/u5EqG6YeS8nh+1fw0HEc85CVZro= +github.com/ryancurrah/gomodguard v1.2.0/go.mod h1:rNqbC4TOIdUDcVMSIpNNAzTbzXAZa6W5lnUepvuMMgQ= +github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanposhiho/wastedassign v0.2.0 h1:0vycy8D/Ky55U5ub8oJFqyDv9M4ICM/wte9sAp2/7Mc= +github.com/sanposhiho/wastedassign v0.2.0/go.mod h1:LGpq5Hsv74QaqM47WtIsRSF/ik9kqk07kchgv66tLVE= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec/v2 v2.7.0 h1:mOhJv5w6UyNLpSssQOQCc7eGkKLuicAxvf66Ey/X4xk= +github.com/securego/gosec/v2 v2.7.0/go.mod h1:xNbGArrGUspJLuz3LS5XCY1EBW/0vABAl/LWfSklmiM= +github.com/sercand/kuberesolver v2.1.0+incompatible/go.mod h1:lWF3GL0xptCB/vCiJPl/ZshwPsX/n4Y7u0CW9E7aQIQ= +github.com/sercand/kuberesolver v2.4.0+incompatible h1:WE2OlRf6wjLxHwNkkFLQGaZcVLEXjMjBPjjEU5vksH8= +github.com/sercand/kuberesolver v2.4.0+incompatible/go.mod h1:lWF3GL0xptCB/vCiJPl/ZshwPsX/n4Y7u0CW9E7aQIQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/shirou/gopsutil/v3 v3.21.2/go.mod h1:ghfMypLDrFSWN2c9cDYFLHyynQ+QUht0cv/18ZqVczw= +github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= +github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= +github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041 h1:llrF3Fs4018ePo4+G/HV/uQUqEI1HMDjCeOf2V6puPc= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= +github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= +github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= +github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= +github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= +github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= +github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= +github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= +github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= +github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= +github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= +github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= +github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= +github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo= +github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= +github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= +github.com/siebenmann/go-kstat v0.0.0-20160321171754-d34789b79745/go.mod h1:G81aIFAMS9ECrwBYR9YxhlPjWgrItd+Kje78O6+uqm8= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w= github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= -github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa h1:E+gaaifzi2xF65PbDmuKI3PhLWY6G5opMLniFq8vmXA= github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod h1:2RVY1rIf+2J2o/IM9+vPq9RzmHDSseB7FoXiSNIUsoU= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 h1:WN9BUFbdyOsSH/XohnWpXOlq9NBD5sGAB2FciQMUEe8= github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smola/gocompat v0.2.0 h1:6b1oIMlUXIpz//VKEDzPVBK8KG7beVwmHIUEBIs/Pns= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sourcegraph/go-diff v0.5.1 h1:gO6i5zugwzo1RVTvgvfwCOSVegNuvnNi6bAD1QCmkHs= -github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= -github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a h1:/eS3yfGjQKG+9kayBkj0ip1BGhq6zJ3eaVksphxAaek= +github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/soundcloud/go-runit v0.0.0-20150630195641-06ad41a06c4a/go.mod h1:LeFCbQYJ3KJlPs/FvPz2dy1tkpxyeNESVyCNNzRXFR0= +github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= +github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= +github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= +github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.0-20170417170307-b6cb39589372/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= +github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v0.0.0-20170417173400-9e4c21054fa1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/src-d/envconfig v1.0.0 h1:/AJi6DtjFhZKNx3OB2qMsq7y4yT5//AeSZIe7rk+PX8= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= +github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= +github.com/ssgreg/nlreturn/v2 v2.1.0 h1:6/s4Rc49L6Uo6RLjhWZGBpWWjfzk2yrf1nIW8m4wgVA= +github.com/ssgreg/nlreturn/v2 v2.1.0/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a h1:AhmOdSHeswKHBjhsLs/7+1voOxT+LLrSk/Nxvk35fug= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b h1:HxLVTlqcHhFAz3nWUcuvpH7WuOMv8LQoCWmruLfFH2U= +github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tetafro/godot v1.4.4 h1:VAtLEoAMmopIzHVWVBrztjVWDeYm1OD/DKqhqXR4828= +github.com/tetafro/godot v1.4.4/go.mod h1:FVDd4JuKliW3UgjswZfJfHq4vAx0bD/Jd5brJjGeaz4= github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e h1:T5PdfK/M1xyrHwynxMIVMWLS7f/qHwfslZphxtGnw7s= github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= -github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e h1:RumXZ56IrCj4CL+g1b9OL/oH0QnsF976bC8xQFYUD5Q= -github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94 h1:ig99OeTyDwQWhPe2iw9lwfQVF1KB3Q4fpP3X7/2VBG8= +github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/tj/go-spin v1.1.0 h1:lhdWZsvImxvZ3q1C5OIB7d72DuOwP4O2NdBg9PyzNds= +github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= +github.com/tklauser/go-sysconf v0.3.4/go.mod h1:Cl2c8ZRWfHD5IrfHo9VN+FX9kCFjIOyVklgXycLB6ek= +github.com/tklauser/numcpus v0.2.1/go.mod h1:9aU+wOc6WjUIZEwWMP62PL/41d65P+iks1gBkr4QyP8= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck v1.0.0 h1:e/6yv/rH08TZFvkYpaAMrgGbaQHVFdzaPPv4a5EIu+o= +github.com/tomarrell/wrapcheck v1.0.0/go.mod h1:Bd3i1FaEKe3XmcPoHhNQ+HM0S8P6eIXoQIoGj/ndJkU= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/tommy-muehle/go-mnd/v2 v2.3.1 h1:a1S4+4HSXDJMgeODJH/t0EEKxcVla6Tasw+Zx9JJMog= +github.com/tommy-muehle/go-mnd/v2 v2.3.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/twitchyliquid64/golang-asm v0.15.0/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.23.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U= +github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v1.5.1-0.20181102163054-1fc5c315e03c/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go v1.2.4 h1:cTciPbZ/VSOzCLKclmssnfQ/jyoVyOcJ3aoJyUV1Urc= +github.com/ugorji/go v1.2.4/go.mod h1:EuaSCk8iZMdIspsu6HXH7X2UGKw1ezO4wCfGszGmmo4= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ultraware/funlen v0.0.2 h1:Av96YVBwwNSe4MLR7iI/BIa3VyI7/djnto/pK3Uxbdo= -github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.4 h1:C5VurWRRCKjuENsbM6GYVw8W++WVW9rSxoACKIvxzz8= +github.com/ugorji/go/codec v1.2.4/go.mod h1:bWBu1+kIRWcF8uMklKaJrR6fTWQOwAlrIzX22pHwryA= +github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg= github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli/v2 v2.0.0 h1:+HU9SCbu8GnEUFtIBfuUNXN39ofWViIEJIp6SURMpCg= +github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.0.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= -github.com/urfave/cli/v2 v2.2.0 h1:JTTnM6wKzdA0Jqodd966MVj4vWbbquZykeX1sKbe2C4= github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= -github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517 h1:ChMKTho2hWKpks/nD/FL2KqM1wuVt62oJeiE8+eFpGs= -github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= +github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/uudashr/gocognit v1.0.1 h1:MoG2fZ0b/Eo7NXoIwCVFLG5JED3qgQz5/NEE+rOsjPs= +github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= -github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= +github.com/valyala/fasthttp v1.16.0/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl6TwOBhHCA= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/quicktemplate v1.6.3/go.mod h1:fwPzK2fHuYEODzJ9pkw0ipCPNHZ2tD5KW4lOuSdPKzY= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436 h1:qOpVTI+BrstcjTZLm2Yz/3sOnqkzj3FQoh0g+E5s3Gc= +github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= +github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= +github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= +github.com/wangjia184/sortedset v0.0.0-20160527075905-f5d03557ba30/go.mod h1:YkocrP2K2tcw938x9gCOmT5G5eCD6jsTz0SZuyAqwIE= +github.com/warpfork/go-testmark v0.3.0 h1:Q81c4u7hT+BR5kNfNQhEF0VT2pmL7+Kk0wD+ORYl7iA= +github.com/warpfork/go-testmark v0.3.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0= github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= -github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830 h1:8kxMKmKzXXL4Ru1nyhvdms/JjWt+3YLpvRb/bAjO/y0= github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a h1:G++j5e0OC488te356JvdhaM8YS6nMsjLAYF7JxCv07w= github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= -github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc h1:BCPnHtcboadS0DvysUuJXZ4lWVv5Bh5i7+tbIyi+ck4= -github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc/go.mod h1:r45hJU7yEoA81k6MWNhpMj/kms0n14dkzkxYHoB96UM= -github.com/whyrusleeping/cbor-gen v0.0.0-20191212224538-d370462a7e8a/go.mod h1:xdlJQaiqipF0HW+Mzpg7XRM3fWbGvfgFlcppuvlkIvY= -github.com/whyrusleeping/cbor-gen v0.0.0-20191216205031-b047b6acb3c0 h1:efb/4CnrubzNGqQOeHErxyQ6rIsJb7GcgeSDF7fqWeI= +github.com/weaveworks/common v0.0.0-20200512154658-384f10054ec5 h1:EYxr08r8x6r/5fLEAMMkida1BVgxVXE4LfZv/XV+znU= +github.com/weaveworks/common v0.0.0-20200512154658-384f10054ec5/go.mod h1:c98fKi5B9u8OsKGiWHLRKus6ToQ1Tubeow44ECO1uxY= +github.com/weaveworks/promrus v1.2.0 h1:jOLf6pe6/vss4qGHjXmGz4oDJQA+AOCqEL3FvvZGz7M= +github.com/weaveworks/promrus v1.2.0/go.mod h1:SaE82+OJ91yqjrE1rsvBWVzNZKcHYFtMUyS1+Ogs/KA= github.com/whyrusleeping/cbor-gen v0.0.0-20191216205031-b047b6acb3c0/go.mod h1:xdlJQaiqipF0HW+Mzpg7XRM3fWbGvfgFlcppuvlkIvY= -github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158 h1:WXhVOwj2USAXB5oMDwRl3piOux2XMV9TANaYxXHdkoE= github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= -github.com/whyrusleeping/cbor-gen v0.0.0-20200206220010-03c9665e2a66/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= -github.com/whyrusleeping/cbor-gen v0.0.0-20200402171437-3d27c146c105/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= -github.com/whyrusleeping/cbor-gen v0.0.0-20200414195334-429a0b5e922e h1:JY8o/ebUUrCYetWmjRCNghxC59cOEaili83rxPRQCLw= github.com/whyrusleeping/cbor-gen v0.0.0-20200414195334-429a0b5e922e/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= -github.com/whyrusleeping/cbor-gen v0.0.0-20200501014322-5f9941ef88e0 h1:dmdwCOVtJAm7qwONARangN4jgCisVFmSJ486JZ1LYaA= -github.com/whyrusleeping/cbor-gen v0.0.0-20200501014322-5f9941ef88e0/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= +github.com/whyrusleeping/cbor-gen v0.0.0-20200504204219-64967432584d/go.mod h1:W5MvapuoHRP8rz4vxjwCK1pDqF1aQcWsV5PZ+AHbqdg= +github.com/whyrusleeping/cbor-gen v0.0.0-20200710004633-5379fc63235d/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200715143311-227fab5a2377/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200723185710-6a3894a6352b/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200806213330-63aa96ca5488/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200810223238-211df3b9e24c/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200812213548-958ddffe352c/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200826160007-0b9f6c5fb163/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20210118024343-169e9d70c0c2/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2 h1:bsUlNhdmbtlfdLVXAVfuvKQ01RnWAM09TVrJkI7NZs4= +github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc h1:9lDbC6Rz4bwmou+oE6Dt4Cb2BGMur5eR/GYptkKUVHo= github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= github.com/whyrusleeping/go-logging v0.0.1 h1:fwpzlmT0kRC/Fmd0MdmGgJG/CXIZ6gFq46FQZjprUcc= github.com/whyrusleeping/go-logging v0.0.1/go.mod h1:lDPYj54zutzG1XYfHAhcc7oNXEburHQBn+Iqd4yS4vE= -github.com/whyrusleeping/go-notifier v0.0.0-20170827234753-097c5d47330f h1:M/lL30eFZTKnomXY6huvM6G0+gVquFNf6mxghaWlFUg= github.com/whyrusleeping/go-notifier v0.0.0-20170827234753-097c5d47330f/go.mod h1:cZNvX9cFybI01GriPRMXDtczuvUhgbcYr9iCGaNlRv8= github.com/whyrusleeping/go-sysinfo v0.0.0-20190219211824-4a357d4b90b1 h1:ctS9Anw/KozviCCtK6VWMz5kPL9nbQzbQY4yfqlIV4M= github.com/whyrusleeping/go-sysinfo v0.0.0-20190219211824-4a357d4b90b1/go.mod h1:tKH72zYNt/exx6/5IQO6L9LoQ0rEjd5SbbWaDTs9Zso= -github.com/whyrusleeping/mafmt v1.2.8 h1:TCghSl5kkwEE0j+sU/gudyhVMRlpBin8fMBBHg59EbA= github.com/whyrusleeping/mafmt v1.2.8/go.mod h1:faQJFPbLSxzD9xpA02ttW/tS9vZykNvXwGvqIpk20FA= github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= +github.com/whyrusleeping/pubsub v0.0.0-20190708150250-92bcb0691325 h1:++Zf4xQ7YrkE81gNHIjVqx5JZsn0nbMeHOkY1ILAIME= +github.com/whyrusleeping/pubsub v0.0.0-20190708150250-92bcb0691325/go.mod h1:g7ckxrjiFh8mi1AY7ox23PZD0g6QU/TxW3U3unX7I3A= github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee h1:lYbXeSvJi5zk5GLKVuid9TVjS9a0OmLIDKTfoZBL6Ow= github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg= -github.com/x-cray/logrus-prefixed-formatter v0.5.2 h1:00txxvfBM9muc0jiLIEAkAcIMJzfthRT6usrui8uGmg= github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= -github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/c-for-go v0.0.0-20201112171043-ea6dce5809cb h1:/7/dQyiKnxAOj9L69FhST7uMe17U015XPzX7cy+5ykM= +github.com/xlab/c-for-go v0.0.0-20201112171043-ea6dce5809cb/go.mod h1:pbNsDSxn1ICiNn9Ct4ZGNrwzfkkwYbx/lw8VuyutFIg= +github.com/xlab/pkgconfig v0.0.0-20170226114623-cea12a0fd245 h1:Sw125DKxZhPUI4JLlWugkzsrlB50jR9v2khiD9FxuSo= +github.com/xlab/pkgconfig v0.0.0-20170226114623-cea12a0fd245/go.mod h1:C+diUUz7pxhNY6KAoLgrTYARGWnt82zWTylZlxT92vk= +github.com/xorcare/golden v0.6.0/go.mod h1:7T39/ZMvaSEZlBPoYfVFmsBLmUl3uz9IuzWj/U6FtvQ= +github.com/xorcare/golden v0.6.1-0.20191112154924-b87f686d7542 h1:oWgZJmC1DorFZDpfMfWg7xk29yEOZiXmo/wZl+utTI8= +github.com/xorcare/golden v0.6.1-0.20191112154924-b87f686d7542/go.mod h1:7T39/ZMvaSEZlBPoYfVFmsBLmUl3uz9IuzWj/U6FtvQ= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.dedis.ch/fixbuf v1.0.3 h1:hGcV9Cd/znUxlusJ64eAlExS+5cJDIyTyEG+otu5wQs= go.dedis.ch/fixbuf v1.0.3/go.mod h1:yzJMt34Wa5xD37V5RTdmp38cz3QhMagdGoem9anUalw= go.dedis.ch/kyber/v3 v3.0.4/go.mod h1:OzvaEnPvKlyrWyp3kGXlFdp7ap1VC6RkZDTaPikqhsQ= -go.dedis.ch/kyber/v3 v3.0.9 h1:i0ZbOQocHUjfFasBiUql5zVeC7u/vahFd96DFA8UOWk= go.dedis.ch/kyber/v3 v3.0.9/go.mod h1:rhNjUUg6ahf8HEg5HUvVBYoWY4boAafX8tYxX+PS+qg= go.dedis.ch/protobuf v1.0.5/go.mod h1:eIV4wicvi6JK0q/QnfIEGeSFNG0ZeB24kzut5+HaRLo= go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI4= go.dedis.ch/protobuf v1.0.11 h1:FTYVIEzY/bfl37lu3pR4lIj+F9Vp1jE8oh91VmxKgLo= go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.4 h1:hi1bXHMVrlQh6WwxAy+qZCV/SYIlqo+Ushwdpa4tAKg= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= +go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= +go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= -go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= +go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= +go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.starlark.net v0.0.0-20190702223751-32f345186213/go.mod h1:c1/X6cHgvdXj6pUlmWKMkuqRnW4K8x2vwt6JAaaircg= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/goleak v1.0.0 h1:qsup4IcBdlmsnGfqyLl4Ntn3C2XCCuKAE7DwHpScyUo= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= +go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.1 h1:nYDKopTbvAPq/NrUVZwT15y2lpROBiLLyoRTbXOYWOo= go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go4.org v0.0.0-20190218023631-ce4c26f7be8e h1:m9LfARr2VIOW0vsV19kEKp/sWQvZnGobA8JHui/XJoY= -go4.org v0.0.0-20190218023631-ce4c26f7be8e/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE= +go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +go4.org v0.0.0-20200411211856-f5505b9728dd h1:BNJlw5kRTzdmyfh5U8F93HA2OwkP7ZGwA51eJ/0wKOU= +go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg= +golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= +golang.org/x/arch v0.0.0-20201008161808-52c3e6f60cff/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= +golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25 h1:jsG6UpNLt9iAsb0S2AGW28DveNzzgmbXR+ENoPjUeIU= golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392 h1:ACG4HJsFiNMf47Y4PeRoebLNy/2lXT9EtprMuTFWt1M= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200427165652-729f1e841bcc h1:ZGI/fILM2+ueot/UixBSoj9188jCAxVHEZEGhqq67I4= -golang.org/x/crypto v0.0.0-20200427165652-729f1e841bcc/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e h1:VvfwVmMH40bpMeizC9/K7ipM5Qjucuu16RWfneFPyhQ= +golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190227160552-c95aed5357e7 h1:C2F/nMkR/9sfUTpvR3QrjBuTdvMUC/cFajkphs1YLQo= golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190921015927-1a5e07d1ff72/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200519113804-d87ec0cfa476/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d h1:LO7XpTYMwTqxjLcGWPijK3vRXg1aWdlNOVOHRq45d7c= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 h1:Wo7BWFiOk0QRFMLYMqJGFMd9CgUAcGx7V+qEg/h5IBI= +golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c h1:pkQiBZBvdos9qq4wBAHqlzuZHEXo07pqV06ef90u1WI= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180202135801-37707fdb30a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1405,157 +2242,412 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190302025703-b6889370fb10 h1:xQJI9OEiErEQ++DoXOHqEpzsGMrAv2Q2jyCpi7DmfpQ= golang.org/x/sys v0.0.0-20190302025703-b6889370fb10/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190411185658-b44545bcd369/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd h1:r7DufRZuZbWB7j439YfAzP8RPDa9unLkpwQKUYbIMPI= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190524122548-abf6ff778158/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190524152521-dbbf3f1254d4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190526052359-791d8a0f4d09/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69 h1:rOhMmluY6kLMhdnrivzec6lLgaVbMHMn2ISQXJeJ5EM= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191025090151-53bf42e6b339/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200427175716-29b57079015a h1:08u6b1caTT9MQY4wSbmsd4Ulm6DmgNYnbImBuZjGJow= -golang.org/x/sys v0.0.0-20200427175716-29b57079015a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200812155832-6a926be9bd1d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200926100807-9d91bd62050c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210217105451-b926d437f341/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210228012217-479acdf4ea46/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 h1:foEbQz/B0Oz6YIqu/69kfXPYeFQAuuMYFkjaqXzl5Wo= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138 h1:H3uGjxCR/6Ds0Mjgyp7LMK81+LvmbvWWEnJhzk1Pi9E= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361 h1:RIIXAeV6GvDBuADKumTODatUqANFZ+5BPMnzsy4hulY= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200108195415-316d2f248479/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200318150045-ba25ddc85566 h1:OXjomkWHhzUx4+HldlJ2TsMxJdWgEo5CTtspD1wdhdk= -golang.org/x/tools v0.0.0-20200318150045-ba25ddc85566/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200216192241-b320d3a0f5a2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200711155855-7342f9734a7d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201011145850-ed2f50202694/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201105001634-bc3cf281b174/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201112185108-eeaa07dd7696/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201114224030-61ea331ec02b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201118003311-bd56c0adb394/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210104081019-d8d6ddbec6ee/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.3.1 h1:oJra/lMfmtm13/rgY/8i3MzjFWYXvQIAKjQ3HqofMk8= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/api v0.3.2 h1:iTp+3yyl/KOtxa/d1/JUE0GGSoR6FuW5udver22iwpw= -google.golang.org/api v0.3.2/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0 h1:yfrXXP61wVuLb0vBcG6qaOoIoqYEzOQS8jum51jkv2w= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b h1:lohp5blsw53GBXtLyLNaTXPXS9pJ1tiTw61ZHUoE9Qw= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk= +google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= +google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20200406120821-33397c535dc2 h1:KlOjjpQjL4dqscfbhtQvAnRMm5PaRTchHHczffkUiq0= -google.golang.org/genproto v0.0.0-20200406120821-33397c535dc2/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 h1:PDIOdWxZ8eRizhKa1AAvY53xsvLB1cWorMjslvY3VA8= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0 h1:G+97AoqBnmZIT91cLG/EkCoK9NSelj64P8bOHHNmGn0= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0 h1:vb/1TCsVn3DcJlQ0Gs1yB1pKI6Do2/QNwxdKqmc/b0s= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= -google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1 h1:heWvX7J6qbGWbeFS/aRmiy1eYaT+QMV6wNvHDyMjQV4= gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v2 v2.0.0-20180128182452-d3ae77c26ac8 h1:Ggy3mWN4l3PUFPfSG0YB3n5fVYggzysUmiUQ89SnX6Y= -gopkg.in/urfave/cli.v2 v2.0.0-20180128182452-d3ae77c26ac8/go.mod h1:cKXr3E0k4aosgycml1b5z33BVV6hai1Kh7uDgFOkbcs= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/mysql v1.1.1 h1:yr1bpyqiwuSPJ4aGGUX9nu46RHXlF8RASQVb1QQNcvo= +gorm.io/driver/mysql v1.1.1/go.mod h1:KdrTanmfLPPyAOeYGyG+UpDys7/7eeWT1zCq+oekYnU= +gorm.io/gorm v1.21.9/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= +gorm.io/gorm v1.21.12 h1:3fQM0Eiz7jcJEhPggHEpoYnsGZqynMzverL77DV40RM= +gorm.io/gorm v1.21.12/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -howett.net/plist v0.0.0-20181124034731-591f970eefbb h1:jhnBjNi9UFpfpl8YZhA9CrOqpnJdvzuiHsl/dnxl11M= -howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3 h1:qTakTkI6ni6LFD5sBwwsdSO+AQqbSIxOauHTTQKZ/7o= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +lukechampine.com/blake3 v1.1.6 h1:H3cROdztr7RCfoaTpGZFQsrqvweFLrqS73j7L7cmR5c= +lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= +modernc.org/cc v1.0.0 h1:nPibNuDEx6tvYrUAtvDTTw98rx5juGsa5zuDnKwEEQQ= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/fileutil v1.0.0/go.mod h1:JHsWpkrk/CnVV1H/eGlFf85BEpfkrp56ro8nojIq9Q8= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/golex v1.0.1 h1:EYKY1a3wStt0RzHaH8mdSRNg78Ub0OHxYfCRWw35YtM= +modernc.org/golex v1.0.1/go.mod h1:QCA53QtsT1NdGkaZZkF5ezFwk4IXh4BGNafAARTC254= +modernc.org/lex v1.0.0/go.mod h1:G6rxMTy3cH2iA0iXL/HRRv4Znu8MK4higxph/lE7ypk= +modernc.org/lexer v1.0.0/go.mod h1:F/Dld0YKYdZCLQ7bD0USbWL4YKCyTDRDHiDTOs0q0vk= +modernc.org/mathutil v1.1.1 h1:FeylZSVX8S+58VsyJlkEj2bcpdytmp9MmDKZkKx8OIE= +modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/strutil v1.1.0 h1:+1/yCzZxY2pZwwrsbH+4T7BQMoLQ9QiBshRC9eicYsc= +modernc.org/strutil v1.1.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0 h1:7ccXrupWZIS3twbUGrtKmHS2DXY6xegFua+6O3xgAFU= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +mvdan.cc/gofumpt v0.1.1 h1:bi/1aS/5W00E2ny5q65w9SnKpWEF/UIOqDYBILpo9rA= +mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f h1:Cq7MalBHYACRd6EesksG1Q8EoIAKOsiZviGKbOLIej4= -mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4 h1:JPJh2pk3+X4lXAkZIk2RuE/7/FoK9maXw+TNPJhVS/c= +mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7 h1:HT3e4Krq+IE44tiN36RvVEb6tvqeIdtsVSsxmNPqlFU= +mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7/go.mod h1:hBpJkZE8H/sb+VRFvw2+rBpHNsTBcvSpk61hr8mzXZE= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/internal/app/go-filecoin/connectors/common.go b/internal/app/go-filecoin/connectors/common.go deleted file mode 100644 index a913a31d1c..0000000000 --- a/internal/app/go-filecoin/connectors/common.go +++ /dev/null @@ -1,35 +0,0 @@ -package connectors - -import ( - "github.com/filecoin-project/specs-actors/actors/abi" - "golang.org/x/xerrors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" -) - -type chainState interface { - GetTipSet(key block.TipSetKey) (block.TipSet, error) - Head() block.TipSetKey -} - -func GetChainHead(m chainState) (tipSetToken []byte, tipSetEpoch abi.ChainEpoch, err error) { - tsk := m.Head() - - ts, err := m.GetTipSet(tsk) - if err != nil { - return nil, 0, xerrors.Errorf("failed to get tip: %w", err) - } - - h, err := ts.Height() - if err != nil { - return nil, 0, err - } - - tok, err := encoding.Encode(tsk) - if err != nil { - return nil, 0, xerrors.Errorf("failed to marshal TipSetKey to CBOR byte slice for TipSetToken: %w", err) - } - - return tok, h, nil -} diff --git a/internal/app/go-filecoin/connectors/fsm_chain/chain_connector.go b/internal/app/go-filecoin/connectors/fsm_chain/chain_connector.go deleted file mode 100644 index 15b21f9b64..0000000000 --- a/internal/app/go-filecoin/connectors/fsm_chain/chain_connector.go +++ /dev/null @@ -1,42 +0,0 @@ -package fsmchain - -import ( - "context" - - "github.com/filecoin-project/specs-actors/actors/abi" - fsm "github.com/filecoin-project/storage-fsm" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" -) - -// ChainConnector uses the chain store to provide a ChainHead method -type ChainConnector struct { - chainStore *chain.Store -} - -var _ fsm.Chain = new(ChainConnector) - -func NewChainConnector(chainStore *chain.Store) ChainConnector { - return ChainConnector{chainStore: chainStore} -} - -func (a *ChainConnector) ChainHead(ctx context.Context) (fsm.TipSetToken, abi.ChainEpoch, error) { - // TODO: use the provided context - ts, err := a.chainStore.GetTipSet(a.chainStore.GetHead()) - if err != nil { - return nil, 0, err - } - - tok, err := encoding.Encode(ts.Key()) - if err != nil { - return nil, 0, err - } - - height, err := ts.Height() - if err != nil { - return nil, 0, err - } - - return tok, height, err -} diff --git a/internal/app/go-filecoin/connectors/fsm_events/connector.go b/internal/app/go-filecoin/connectors/fsm_events/connector.go deleted file mode 100644 index de18e88395..0000000000 --- a/internal/app/go-filecoin/connectors/fsm_events/connector.go +++ /dev/null @@ -1,85 +0,0 @@ -package fsmeventsconnector - -import ( - "context" - - "github.com/filecoin-project/specs-actors/actors/abi" - fsm "github.com/filecoin-project/storage-fsm" - logging "github.com/ipfs/go-log/v2" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsampler" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" -) - -var log = logging.Logger("fsm_events") // nolint: deadcode - -type FiniteStateMachineEventsConnector struct { - scheduler *chainsampler.HeightThresholdScheduler - tsp chain.TipSetProvider -} - -var _ fsm.Events = new(FiniteStateMachineEventsConnector) - -func New(scheduler *chainsampler.HeightThresholdScheduler, tsp chain.TipSetProvider) FiniteStateMachineEventsConnector { - return FiniteStateMachineEventsConnector{ - scheduler: scheduler, - tsp: tsp, - } -} - -func (f FiniteStateMachineEventsConnector) ChainAt(hnd fsm.HeightHandler, rev fsm.RevertHandler, confidence int, h abi.ChainEpoch) error { - // wait for an epoch past the target that gives us some confidence it won't reorg - l := f.scheduler.AddListener(h + abi.ChainEpoch(confidence)) - - ctx := context.Background() - - go func() { - var handledToken fsm.TipSetToken - for { - select { - case <-l.DoneCh: - return - case err := <-l.ErrCh: - log.Warn(err) - return - case tsk := <-l.HitCh: - ts, err := f.tsp.GetTipSet(tsk) - if err != nil { - log.Error(err) - return - } - - targetTipset, err := chain.FindTipsetAtEpoch(ctx, ts, h, f.tsp) - if err != nil { - log.Error(err) - return - } - - handledToken, err := encoding.Encode(targetTipset.Key()) - if err != nil { - log.Error(err) - return - } - - sampleHeight, err := targetTipset.Height() - if err != nil { - log.Error(err) - return - } - err = hnd(ctx, handledToken, sampleHeight) - if err != nil { - log.Error(err) - return - } - case <-l.InvalidCh: - err := rev(ctx, handledToken) - if err != nil { - log.Error(err) - return - } - } - } - }() - return nil -} diff --git a/internal/app/go-filecoin/connectors/fsm_node/connector.go b/internal/app/go-filecoin/connectors/fsm_node/connector.go deleted file mode 100644 index 3479d7499e..0000000000 --- a/internal/app/go-filecoin/connectors/fsm_node/connector.go +++ /dev/null @@ -1,279 +0,0 @@ -package fsmnodeconnector - -import ( - "bytes" - "context" - "fmt" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin/market" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - "github.com/filecoin-project/specs-actors/actors/crypto" - fsm "github.com/filecoin-project/storage-fsm" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cst" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -type FiniteStateMachineNodeConnector struct { - minerAddr address.Address - waiter *msg.Waiter - chain *chain.Store - chainState *cst.ChainStateReadWriter - stateViewer *appstate.TipSetStateViewer - outbox *message.Outbox -} - -var _ fsm.SealingAPI = new(FiniteStateMachineNodeConnector) - -func New(minerAddr address.Address, waiter *msg.Waiter, chain *chain.Store, viewer *appstate.TipSetStateViewer, outbox *message.Outbox, chainState *cst.ChainStateReadWriter) *FiniteStateMachineNodeConnector { - return &FiniteStateMachineNodeConnector{ - minerAddr: minerAddr, - chain: chain, - chainState: chainState, - outbox: outbox, - stateViewer: viewer, - waiter: waiter, - } -} - -func (f *FiniteStateMachineNodeConnector) StateWaitMsg(ctx context.Context, mcid cid.Cid) (fsm.MsgLookup, error) { - var lookup fsm.MsgLookup - err := f.waiter.Wait(ctx, mcid, msg.DefaultMessageWaitLookback, func(blk *block.Block, message *types.SignedMessage, r *vm.MessageReceipt) error { - lookup.Height = blk.Height - receipt := fsm.MessageReceipt{ - ExitCode: r.ExitCode, - Return: r.ReturnValue, - GasUsed: int64(r.GasUsed), - } - lookup.Receipt = receipt - - // find tip set key at block height - tsHead, err := f.chain.GetTipSet(f.chain.GetHead()) - if err != nil { - return err - } - tsAtHeight, err := chain.FindTipsetAtEpoch(ctx, tsHead, blk.Height, f.chain) - if err != nil { - return err - } - - tsk := tsAtHeight.Key() - token, err := encoding.Encode(tsk) - if err != nil { - return err - } - - lookup.TipSetTok = token - return nil - }) - if err != nil { - return fsm.MsgLookup{}, err - } - - return lookup, err -} - -func (f *FiniteStateMachineNodeConnector) StateComputeDataCommitment(ctx context.Context, _ address.Address, sectorType abi.RegisteredProof, deals []abi.DealID, tok fsm.TipSetToken) (cid.Cid, error) { - view, err := f.stateViewForToken(tok) - if err != nil { - return cid.Undef, err - } - - return view.MarketComputeDataCommitment(ctx, sectorType, deals) -} - -func (f *FiniteStateMachineNodeConnector) StateSectorPreCommitInfo(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tok fsm.TipSetToken) (*miner.SectorPreCommitOnChainInfo, error) { - view, err := f.stateViewForToken(tok) - if err != nil { - return nil, err - } - - info, found, err := view.MinerGetPrecommittedSector(ctx, maddr, sectorNumber) - if err != nil { - return nil, err - } - - if !found { - return nil, fmt.Errorf("Could not find pre-committed sector for miner %s", maddr.String()) - } - - return info, nil -} - -func (f *FiniteStateMachineNodeConnector) StateMinerSectorSize(ctx context.Context, maddr address.Address, tok fsm.TipSetToken) (abi.SectorSize, error) { - view, err := f.stateViewForToken(tok) - if err != nil { - return 0, err - } - - conf, err := view.MinerSectorConfiguration(ctx, maddr) - if err != nil { - return 0, err - } - return conf.SectorSize, err -} - -func (f *FiniteStateMachineNodeConnector) StateMinerWorkerAddress(ctx context.Context, maddr address.Address, tok fsm.TipSetToken) (address.Address, error) { - view, err := f.stateViewForToken(tok) - if err != nil { - return address.Undef, err - } - - _, worker, err := view.MinerControlAddresses(ctx, maddr) - return worker, err -} - -func (f *FiniteStateMachineNodeConnector) StateMarketStorageDeal(ctx context.Context, dealID abi.DealID, tok fsm.TipSetToken) (market.DealProposal, market.DealState, error) { - view, err := f.stateViewForToken(tok) - if err != nil { - return market.DealProposal{}, market.DealState{}, err - } - - deal, err := view.MarketDealProposal(ctx, dealID) - if err != nil { - return market.DealProposal{}, market.DealState{}, err - } - - state, found, err := view.MarketDealState(ctx, dealID) - if err != nil { - return market.DealProposal{}, market.DealState{}, err - } else if !found { - // The FSM actually ignores this value because it calls this before the sector is committed. - // But it can't tolerate returning an error here for not found. - // See https://github.com/filecoin-project/storage-fsm/issues/18 - state = &market.DealState{ - SectorStartEpoch: -1, - LastUpdatedEpoch: -1, - SlashEpoch: -1, - } - } - - return deal, *state, err -} - -func (f *FiniteStateMachineNodeConnector) StateMinerDeadlines(ctx context.Context, maddr address.Address, tok fsm.TipSetToken) (*miner.Deadlines, error) { - var tsk block.TipSetKey - err := encoding.Decode(tok, &tsk) - if err != nil { - return nil, err - } - - view, err := f.stateViewer.StateView(tsk) - if err != nil { - return nil, err - } - - return view.MinerDeadlines(ctx, maddr) -} - -func (f *FiniteStateMachineNodeConnector) StateMinerInitialPledgeCollateral(context.Context, address.Address, abi.SectorNumber, fsm.TipSetToken) (big.Int, error) { - // The FSM uses this result to attach value equal to the collateral to the ProveCommit message sent from the - // worker account. This isn't absolutely necessary if the miner actor already has sufficient unlocked balance. - // The initial pledge requirement calculations are currently very difficult to access, so I'm returning - // zero here pending a proper implementation after cleaning up the actors. - // TODO https://github.com/filecoin-project/go-filecoin/issues/4035 - return big.Zero(), nil -} - -func (f *FiniteStateMachineNodeConnector) SendMsg(ctx context.Context, from, to address.Address, method abi.MethodNum, value, gasPrice big.Int, gasLimit int64, params []byte) (cid.Cid, error) { - mcid, cerr, err := f.outbox.SendEncoded( - ctx, - from, - to, - value, - gasPrice, - gas.Unit(gasLimit), - true, - method, - params, - ) - if err != nil { - return cid.Undef, err - } - err = <-cerr - if err != nil { - return cid.Undef, err - } - return mcid, nil -} - -func (f *FiniteStateMachineNodeConnector) ChainHead(_ context.Context) (fsm.TipSetToken, abi.ChainEpoch, error) { - ts, err := f.chain.GetTipSet(f.chain.GetHead()) - if err != nil { - return fsm.TipSetToken{}, 0, err - } - - epoch, err := ts.Height() - if err != nil { - return fsm.TipSetToken{}, 0, err - } - - tok, err := encoding.Encode(ts.Key()) - if err != nil { - return fsm.TipSetToken{}, 0, err - } - - return tok, epoch, nil -} - -func (f *FiniteStateMachineNodeConnector) ChainGetRandomness(ctx context.Context, tok fsm.TipSetToken, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { - var tsk block.TipSetKey - if err := encoding.Decode(tok, &tsk); err != nil { - return abi.Randomness{}, err - } - return f.chainState.SampleChainRandomness(ctx, tsk, personalization, randEpoch, entropy) -} - -func (f *FiniteStateMachineNodeConnector) ChainGetTicket(ctx context.Context, tok fsm.TipSetToken) (abi.SealRandomness, abi.ChainEpoch, error) { - var tsk block.TipSetKey - if err := encoding.Decode(tok, &tsk); err != nil { - return abi.SealRandomness{}, 0, err - } - - ts, err := f.chain.GetTipSet(tsk) - if err != nil { - return abi.SealRandomness{}, 0, err - } - - epoch, err := ts.Height() - if err != nil { - return abi.SealRandomness{}, 0, err - } - - randomEpoch := epoch - miner.ChainFinalityish - - buf := new(bytes.Buffer) - err = f.minerAddr.MarshalCBOR(buf) - if err != nil { - return abi.SealRandomness{}, 0, err - } - - randomness, err := f.ChainGetRandomness(ctx, tok, crypto.DomainSeparationTag_SealRandomness, randomEpoch, buf.Bytes()) - return abi.SealRandomness(randomness), randomEpoch, err -} - -func (f *FiniteStateMachineNodeConnector) ChainReadObj(ctx context.Context, obj cid.Cid) ([]byte, error) { - return f.chainState.ReadObj(ctx, obj) -} - -func (f *FiniteStateMachineNodeConnector) stateViewForToken(tok fsm.TipSetToken) (*appstate.View, error) { - var tsk block.TipSetKey - err := encoding.Decode(tok, &tsk) - if err != nil { - return nil, err - } - - return f.stateViewer.StateView(tsk) -} diff --git a/internal/app/go-filecoin/connectors/fsm_storage/repo_storage_connector.go b/internal/app/go-filecoin/connectors/fsm_storage/repo_storage_connector.go deleted file mode 100644 index d5536795b3..0000000000 --- a/internal/app/go-filecoin/connectors/fsm_storage/repo_storage_connector.go +++ /dev/null @@ -1,46 +0,0 @@ -package fsmstorage - -import ( - "errors" - - "github.com/filecoin-project/sector-storage/stores" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paths" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" -) - -type RepoStorageConnector struct { - inner repo.Repo -} - -var _ stores.LocalStorage = new(RepoStorageConnector) - -func NewRepoStorageConnector(r repo.Repo) *RepoStorageConnector { - return &RepoStorageConnector{inner: r} -} - -func (b *RepoStorageConnector) GetStorage() (stores.StorageConfig, error) { - rpt, err := b.inner.Path() - if err != nil { - return stores.StorageConfig{}, err - } - - scg := b.inner.Config().SectorBase - - spt, err := paths.GetSectorPath(scg.RootDirPath, rpt) - if err != nil { - return stores.StorageConfig{}, err - } - - out := stores.StorageConfig{StoragePaths: []stores.LocalPath{{Path: spt}}} - - if scg.PreSealedSectorsDirPath != "" { - out.StoragePaths = append(out.StoragePaths, stores.LocalPath{Path: scg.PreSealedSectorsDirPath}) - } - - return out, nil -} - -func (b *RepoStorageConnector) SetStorage(f func(*stores.StorageConfig)) error { - return errors.New("unsupported operation: manipulating store paths must happen through go-filecoin") -} diff --git a/internal/app/go-filecoin/connectors/retrieval_market/client.go b/internal/app/go-filecoin/connectors/retrieval_market/client.go deleted file mode 100644 index 342dade803..0000000000 --- a/internal/app/go-filecoin/connectors/retrieval_market/client.go +++ /dev/null @@ -1,173 +0,0 @@ -package retrievalmarketconnector - -import ( - "bytes" - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/retrievalmarket" - "github.com/filecoin-project/go-fil-markets/shared" - "github.com/filecoin-project/specs-actors/actors/abi" - paychActor "github.com/filecoin-project/specs-actors/actors/builtin/paych" - "github.com/ipfs/go-cid" - blockstore "github.com/ipfs/go-ipfs-blockstore" - xerrors "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// RetrievalClientConnector is the glue between go-filecoin and go-fil-markets' -// retrieval market interface -type RetrievalClientConnector struct { - bs blockstore.Blockstore - - // APIs/interfaces - paychMgr PaychMgrAPI - signer RetrievalSigner - cs ChainReaderAPI -} - -var _ retrievalmarket.RetrievalClientNode = new(RetrievalClientConnector) - -// NewRetrievalClientConnector creates a new RetrievalClientConnector -func NewRetrievalClientConnector( - bs blockstore.Blockstore, - cs ChainReaderAPI, - signer RetrievalSigner, - paychMgr PaychMgrAPI, -) *RetrievalClientConnector { - return &RetrievalClientConnector{ - bs: bs, - cs: cs, - paychMgr: paychMgr, - signer: signer, - } -} - -// GetOrCreatePaymentChannel gets or creates a payment channel and posts to chain -func (r *RetrievalClientConnector) GetOrCreatePaymentChannel(ctx context.Context, clientAddress address.Address, minerAddress address.Address, clientFundsAvailable abi.TokenAmount, tok shared.TipSetToken) (address.Address, cid.Cid, error) { - - if clientAddress == address.Undef || minerAddress == address.Undef { - return address.Undef, cid.Undef, xerrors.New("empty address") - } - chinfo, err := r.paychMgr.GetPaymentChannelByAccounts(clientAddress, minerAddress) - if err != nil { - return address.Undef, cid.Undef, err - } - if chinfo.IsZero() { - // create the payment channel - bal, err := r.getBalance(ctx, clientAddress, tok) - if err != nil { - return address.Undef, cid.Undef, err - } - - filAmt := types.NewAttoFIL(clientFundsAvailable.Int) - if bal.LessThan(filAmt) { - return address.Undef, cid.Undef, xerrors.New("not enough funds in wallet") - } - - return r.paychMgr.CreatePaymentChannel(clientAddress, minerAddress, clientFundsAvailable) - } - mcid, err := r.paychMgr.AddFundsToChannel(chinfo.UniqueAddr, clientFundsAvailable) - return chinfo.UniqueAddr, mcid, err -} - -// AllocateLane creates a new lane for this paymentChannel with 0 FIL in the lane -// Assumes AllocateLane is called after GetOrCreatePaymentChannel -func (r *RetrievalClientConnector) AllocateLane(paymentChannel address.Address) (lane uint64, err error) { - return r.paychMgr.AllocateLane(paymentChannel) -} - -// CreatePaymentVoucher creates a payment voucher for the retrieval client. -func (r *RetrievalClientConnector) CreatePaymentVoucher(ctx context.Context, paychAddr address.Address, amount abi.TokenAmount, lane uint64, tok shared.TipSetToken) (*paychActor.SignedVoucher, error) { - height, err := r.getBlockHeight(tok) - if err != nil { - return nil, err - } - - bal, err := r.getBalance(ctx, paychAddr, tok) - if err != nil { - return nil, err - } - if amount.GreaterThan(bal) { - return nil, xerrors.New("insufficient funds for voucher amount") - } - - chinfo, err := r.paychMgr.GetPaymentChannelInfo(paychAddr) - if err != nil { - return nil, err - } - v := paychActor.SignedVoucher{ - TimeLockMin: height + 1, - SecretPreimage: nil, // optional - Extra: nil, // optional - Lane: lane, - Nonce: chinfo.NextNonce, - Amount: amount, - MinSettleHeight: height + 1, - Merges: nil, - Signature: nil, - } - - var buf bytes.Buffer - if err := v.MarshalCBOR(&buf); err != nil { - return nil, err - } - - sig, err := r.signer.SignBytes(ctx, buf.Bytes(), chinfo.From) - if err != nil { - return nil, err - } - v.Signature = &sig - - if err := r.paychMgr.AddVoucherToChannel(paychAddr, &v); err != nil { - return nil, err - } - return &v, nil -} - -func (r *RetrievalClientConnector) WaitForPaymentChannelAddFunds(messageCID cid.Cid) error { - return r.paychMgr.WaitForAddFundsMessage(context.Background(), messageCID) -} - -func (r *RetrievalClientConnector) WaitForPaymentChannelCreation(messageCID cid.Cid) (address.Address, error) { - return r.paychMgr.WaitForCreatePaychMessage(context.Background(), messageCID) -} - -func (r *RetrievalClientConnector) getBlockHeight(tok shared.TipSetToken) (abi.ChainEpoch, error) { - ts, err := r.getTipSet(tok) - if err != nil { - return 0, err - } - return ts.Height() -} - -func (r *RetrievalClientConnector) getBalance(ctx context.Context, account address.Address, tok shared.TipSetToken) (types.AttoFIL, error) { - var tsk block.TipSetKey - if err := encoding.Decode(tok, &tsk); err != nil { - return types.ZeroAttoFIL, xerrors.Wrapf(err, "failed to marshal TipSetToken into a TipSetKey") - } - - actor, err := r.cs.GetActorAt(ctx, tsk, account) - if err != nil { - return types.ZeroAttoFIL, err - } - - return actor.Balance, nil -} - -func (r *RetrievalClientConnector) GetChainHead(ctx context.Context) (shared.TipSetToken, abi.ChainEpoch, error) { - return connectors.GetChainHead(r.cs) -} - -func (r *RetrievalClientConnector) getTipSet(tok shared.TipSetToken) (block.TipSet, error) { - var tsk block.TipSetKey - if err := encoding.Decode(tok, &tsk); err != nil { - return block.TipSet{}, xerrors.Wrapf(err, "failed to marshal TipSetToken into a TipSetKey") - } - - return r.cs.GetTipSet(tsk) -} diff --git a/internal/app/go-filecoin/connectors/retrieval_market/client_test.go b/internal/app/go-filecoin/connectors/retrieval_market/client_test.go deleted file mode 100644 index 140c10d474..0000000000 --- a/internal/app/go-filecoin/connectors/retrieval_market/client_test.go +++ /dev/null @@ -1,399 +0,0 @@ -package retrievalmarketconnector_test - -import ( - "context" - "errors" - "testing" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/shared_testutil" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - specs "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - specst "github.com/filecoin-project/specs-actors/support/testing" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - dss "github.com/ipfs/go-datastore/sync" - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - . "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors/retrieval_market" - pch "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel" - paychtest "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel/testing" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cst" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor/builtin" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -func TestRetrievalClientConnector_GetOrCreatePaymentChannel(t *testing.T) { - testflags.IntegrationTest(t) - ctx := context.Background() - - paych := specst.NewActorAddr(t, "paych") - balance := abi.NewTokenAmount(1000) - channelAmt := abi.NewTokenAmount(101) - - t.Run("if the payment channel does not exist", func(t *testing.T) { - t.Run("returns a message CID to wait for", func(t *testing.T) { - bs, cs, client, miner, genTs := testSetup(ctx, t, balance) - pchMgr, fakePaychAPI := makePaychMgr(ctx, t, client, miner, paych) - fakePaychAPI.ExpectedMsgCid, fakePaychAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, client, miner, paych, channelAmt, exitcode.Ok, 2) - - rmc := NewRetrievalMarketClientFakeAPI(t) - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - tok, err := encoding.Encode(genTs.Key()) - require.NoError(t, err) - - rmc.MsgSendCid = shared_testutil.GenerateCids(1)[0] - - expectedAddr, mcid, err := rcnc.GetOrCreatePaymentChannel(ctx, client, miner, channelAmt, tok) - require.NoError(t, err) - assert.Equal(t, address.Undef, expectedAddr) - assert.False(t, mcid.Equals(rmc.MsgSendCid)) - }) - t.Run("Errors if there aren't enough funds in wallet", func(t *testing.T) { - bs, cs, client, miner, genTs := testSetup(ctx, t, balance) - pchMgr, _ := makePaychMgr(ctx, t, client, miner, paych) - rmc := NewRetrievalMarketClientFakeAPI(t) - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - tok, err := encoding.Encode(genTs.Key()) - require.NoError(t, err) - - res, mcid, err := rcnc.GetOrCreatePaymentChannel(ctx, client, miner, big.NewInt(2000), tok) - assert.EqualError(t, err, "not enough funds in wallet") - assert.Equal(t, address.Undef, res) - assert.True(t, mcid.Equals(cid.Undef)) - }) - - t.Run("Errors if client or minerWallet addr is invalid", func(t *testing.T) { - bs, cs, client, miner, genTs := testSetup(ctx, t, balance) - pchMgr, _ := makePaychMgr(ctx, t, client, miner, paych) - rmc := NewRetrievalMarketClientFakeAPI(t) - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - tok, err := encoding.Encode(genTs.Key()) - require.NoError(t, err) - - _, mcid, err := rcnc.GetOrCreatePaymentChannel(ctx, client, address.Undef, channelAmt, tok) - assert.EqualError(t, err, "empty address") - assert.True(t, mcid.Equals(cid.Undef)) - }) - }) - - t.Run("if payment channel exists, returns payment channel addr and cid for add funds msg", func(t *testing.T) { - bs, cs, client, miner, genTs := testSetup(ctx, t, balance) - pchMgr, fakePaychAPI := makePaychMgr(ctx, t, client, miner, paych) - - fakePaychAPI.ExpectedMsgCid, fakePaychAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, client, miner, paych, channelAmt, exitcode.Ok, 2) - - rmc := NewRetrievalMarketClientFakeAPI(t) - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - - tok, err := encoding.Encode(genTs.Key()) - require.NoError(t, err) - - requireCreatePaymentChannel(ctx, t, fakePaychAPI, pchMgr, channelAmt, client, miner, paych) - - fakePaychAPI.ExpectedMsgCid, fakePaychAPI.ExpectedResult = paychtest.GenSendFundsMessage(client, paych, channelAmt, exitcode.Ok, 4) - - actualChID, mcid, err := rcnc.GetOrCreatePaymentChannel(ctx, client, miner, channelAmt, tok) - require.NoError(t, err) - assert.False(t, mcid.Equals(cid.Undef)) - assert.Equal(t, paych, actualChID) - }) -} - -func TestRetrievalClientConnector_AllocateLane(t *testing.T) { - testflags.IntegrationTest(t) - ctx := context.Background() - bs, cs, client, miner, _ := testSetup(ctx, t, abi.NewTokenAmount(100)) - - paych := specst.NewIDAddr(t, 101) - channelAmt := abi.NewTokenAmount(10) - pchMgr, fakePaychAPI := makePaychMgr(ctx, t, client, miner, paych) - fakePaychAPI.ExpectedMsgCid, fakePaychAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, client, miner, paych, channelAmt, exitcode.Ok, 2) - - t.Run("Errors if payment channel does not exist", func(t *testing.T) { - rmc := NewRetrievalMarketClientFakeAPI(t) - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - - addr, err := address.NewIDAddress(12345) - require.NoError(t, err) - res, err := rcnc.AllocateLane(addr) - assert.EqualError(t, err, "No state for /t012345") - assert.Zero(t, res) - }) - t.Run("Increments and returns lastLane val", func(t *testing.T) { - rmc := NewRetrievalMarketClientFakeAPI(t) - - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - requireCreatePaymentChannel(ctx, t, fakePaychAPI, pchMgr, channelAmt, client, miner, paych) - - lane, err := rcnc.AllocateLane(paych) - require.NoError(t, err) - - chinfo, err := pchMgr.GetPaymentChannelInfo(paych) - require.NoError(t, err) - require.Equal(t, chinfo.NextLane-1, lane) - }) -} - -func TestRetrievalClientConnector_CreatePaymentVoucher(t *testing.T) { - testflags.IntegrationTest(t) - ctx := context.Background() - balance := abi.NewTokenAmount(1000) - bs, cs, client, miner, genTs := testSetup(ctx, t, balance) - paych := specst.NewIDAddr(t, 101) - expVoucherAmt := big.NewInt(10) - channelAmt := abi.NewTokenAmount(101) - - pchActor := actor.NewActor(shared_testutil.GenerateCids(1)[0], channelAmt, cid.Undef) - cs.SetActor(paych, pchActor) - - tok, err := encoding.Encode(genTs.Key()) - require.NoError(t, err) - - t.Run("Returns a voucher with a signature", func(t *testing.T) { - pchMgr, fakePaychAPI := makePaychMgr(ctx, t, client, miner, paych) - fakePaychAPI.ExpectedMsgCid, fakePaychAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, client, miner, paych, channelAmt, exitcode.Ok, 2) - - rmc := NewRetrievalMarketClientFakeAPI(t) - rmc.StubSignature(nil) - - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - requireCreatePaymentChannel(ctx, t, fakePaychAPI, pchMgr, channelAmt, client, miner, paych) - - lane, err := rcnc.AllocateLane(paych) - require.NoError(t, err) - assert.Equal(t, uint64(0), lane) - - voucher, err := rcnc.CreatePaymentVoucher(ctx, paych, expVoucherAmt, lane, tok) - require.NoError(t, err) - assert.Equal(t, expVoucherAmt, voucher.Amount) - assert.Equal(t, lane, voucher.Lane) - assert.Equal(t, uint64(2), voucher.Nonce) - assert.NotNil(t, voucher.Signature) - chinfo, err := pchMgr.GetPaymentChannelInfo(paych) - require.NoError(t, err) - // nil SecretPreimage gets stored as zero value. - voucher.SecretPreimage = []byte{} - assert.True(t, chinfo.HasVoucher(voucher)) - }) - - t.Run("Each lane or voucher increases NextNonce", func(t *testing.T) { - pchMgr, fakePaychAPI := makePaychMgr(ctx, t, client, miner, paych) - fakePaychAPI.ExpectedMsgCid, fakePaychAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, client, miner, paych, channelAmt, exitcode.Ok, 2) - - rmc := NewRetrievalMarketClientFakeAPI(t) - rmc.StubSignature(nil) - - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - requireCreatePaymentChannel(ctx, t, fakePaychAPI, pchMgr, channelAmt, client, miner, paych) - - chinfo, err := pchMgr.GetPaymentChannelInfo(paych) - require.NoError(t, err) - require.Equal(t, uint64(0), chinfo.NextLane) - require.Equal(t, uint64(1), chinfo.NextNonce) - - expectedNonce := uint64(10) // 3 lanes + 3*2 vouchers + 1 - for i := 0; i <= 2; i++ { - lane, err := rcnc.AllocateLane(paych) - require.NoError(t, err) - for j := 0; j <= 1; j++ { - amt := int64(i + j + 1) - newAmt := big.NewInt(amt) - _, err := rcnc.CreatePaymentVoucher(ctx, paych, newAmt, lane, tok) - require.NoError(t, err) - } - } - chinfo, err = pchMgr.GetPaymentChannelInfo(paych) - require.NoError(t, err) - assert.Equal(t, expectedNonce, chinfo.NextNonce) - }) - - t.Run("Errors if can't get block height/head tipset", func(t *testing.T) { - pchMgr, _ := makePaychMgr(ctx, t, client, miner, paych) - - _, _, _, localCs, _ := requireNewEmptyChainStore(ctx, t) - messageStore := chain.NewMessageStore(bs) - cs := cst.NewChainStateReadWriter(localCs, messageStore, bs, builtin.DefaultActors) - - rmc := NewRetrievalMarketClientFakeAPI(t) - - badTsKey := block.NewTipSetKey(shared_testutil.GenerateCids(1)[0]) - badTok, err := encoding.Encode(badTsKey) - require.NoError(t, err) - - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - res, err := rcnc.CreatePaymentVoucher(ctx, paych, abi.NewTokenAmount(1), 0, badTok) - assert.EqualError(t, err, "Key not found in tipindex") - assert.Nil(t, res) - }) - - t.Run("Errors if payment channel does not exist", func(t *testing.T) { - badAddr := specst.NewIDAddr(t, 990) - pchMgr, _ := makePaychMgr(ctx, t, client, miner, badAddr) - - rmc := NewRetrievalMarketClientFakeAPI(t) - rmc.StubSignature(nil) - - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - voucher, err := rcnc.CreatePaymentVoucher(ctx, badAddr, big.NewInt(100), 1, tok) - assert.EqualError(t, err, "No such address t0990") - assert.Nil(t, voucher) - }) - - t.Run("errors if not enough balance in payment channel", func(t *testing.T) { - pchMgr, fakePaychAPI := makePaychMgr(ctx, t, client, miner, paych) - - fakePaychAPI.ExpectedMsgCid, fakePaychAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, client, miner, paych, channelAmt, exitcode.Ok, 2) - - poorActor := actor.NewActor(shared_testutil.GenerateCids(1)[0], channelAmt, cid.Undef) - cs.SetActor(paych, poorActor) - - rmc := NewRetrievalMarketClientFakeAPI(t) - rmc.StubSignature(nil) - - requireCreatePaymentChannel(ctx, t, fakePaychAPI, pchMgr, channelAmt, client, miner, paych) - - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - lane, err := rcnc.AllocateLane(paych) - require.NoError(t, err) - - tooMuch := abi.NewTokenAmount(channelAmt.Int64() + 1) - voucher, err := rcnc.CreatePaymentVoucher(ctx, paych, tooMuch, lane, tok) - assert.EqualError(t, err, "insufficient funds for voucher amount") - assert.Nil(t, voucher) - }) - - t.Run("errors if lane is invalid", func(t *testing.T) { - pchMgr, fakePaychAPI := makePaychMgr(ctx, t, client, miner, paych) - - fakePaychAPI.ExpectedMsgCid, fakePaychAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, client, miner, paych, channelAmt, exitcode.Ok, 2) - rmc := NewRetrievalMarketClientFakeAPI(t) - rmc.StubSignature(nil) - - requireCreatePaymentChannel(ctx, t, fakePaychAPI, pchMgr, channelAmt, client, miner, paych) - - // check when no lanes allocated - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - voucher, err := rcnc.CreatePaymentVoucher(ctx, paych, expVoucherAmt, 0, tok) - require.Nil(t, voucher) - assert.EqualError(t, err, "lane does not exist 0") - require.Nil(t, voucher) - - lane, err := rcnc.AllocateLane(paych) - require.NoError(t, err) - - // check when there is a lane allocated - voucher, err = rcnc.CreatePaymentVoucher(ctx, paych, expVoucherAmt, lane+1, tok) - require.Nil(t, voucher) - assert.EqualError(t, err, "lane does not exist 1") - }) - - t.Run("Errors if can't sign bytes", func(t *testing.T) { - pchMgr, fakePaychAPI := makePaychMgr(ctx, t, client, miner, paych) - fakePaychAPI.ExpectedMsgCid, fakePaychAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, client, miner, paych, channelAmt, exitcode.Ok, 2) - - rmc := NewRetrievalMarketClientFakeAPI(t) - rmc.SigErr = errors.New("signature failure") - rmc.StubSignature(errors.New("signature failure")) - - rcnc := NewRetrievalClientConnector(bs, cs, rmc, pchMgr) - requireCreatePaymentChannel(ctx, t, fakePaychAPI, pchMgr, channelAmt, client, miner, paych) - - lane, err := rcnc.AllocateLane(paych) - require.NoError(t, err) - - voucher, err := rcnc.CreatePaymentVoucher(ctx, paych, big.NewInt(1), lane, tok) - assert.EqualError(t, err, "signature failure") - assert.Nil(t, voucher) - }) -} - -func testSetup(ctx context.Context, t *testing.T, bal abi.TokenAmount) (bstore.Blockstore, *message.FakeProvider, address.Address, address.Address, block.TipSet) { - _, builder, genTs, chainStore, st1 := requireNewEmptyChainStore(ctx, t) - rootBlk := builder.AppendBlockOnBlocks() - block.RequireNewTipSet(t, rootBlk) - require.NoError(t, chainStore.SetHead(ctx, genTs)) - root, err := st1.Commit(ctx) - require.NoError(t, err) - - // add tipset and state to chainstore - require.NoError(t, chainStore.PutTipSetMetadata(ctx, &chain.TipSetMetadata{ - TipSet: genTs, - TipSetStateRoot: root, - TipSetReceipts: types.EmptyReceiptsCID, - })) - - ds := repo.NewInMemoryRepo().ChainDatastore() - bs := bstore.NewBlockstore(ds) - - fakeProvider := message.NewFakeProvider(t) - fakeProvider.Builder = builder - clientAddr := specst.NewIDAddr(t, 102) - clientActor := actor.NewActor(specs.AccountActorCodeID, bal, cid.Undef) - fakeProvider.SetHead(genTs.Key()) - fakeProvider.SetActor(clientAddr, clientActor) - - minerAddr := specst.NewIDAddr(t, 101) - - return bs, fakeProvider, clientAddr, minerAddr, genTs -} - -func requireCreatePaymentChannel(ctx context.Context, t *testing.T, testAPI *paychtest.FakePaymentChannelAPI, m *pch.Manager, balance abi.TokenAmount, client, miner, paych address.Address) { - - _, mcid, err := m.CreatePaymentChannel(client, miner, balance) - require.NoError(t, err) - - // give goroutine a chance to update channel store - time.Sleep(100 * time.Millisecond) - require.True(t, testAPI.ExpectedMsgCid.Equals(mcid)) - assertChannel(t, paych, m, true) -} - -func requireNewEmptyChainStore(ctx context.Context, t *testing.T) (cid.Cid, *chain.Builder, block.TipSet, *chain.Store, state.Tree) { - store := cbor.NewMemCborStore() - - // Cribbed from chain/store_test - st1 := state.NewState(store) - root, err := st1.Commit(ctx) - require.NoError(t, err) - - // link testing state to test block - builder := chain.NewBuilder(t, address.Undef) - genTS := builder.NewGenesis() - r := repo.NewInMemoryRepo() - - // setup chain store - ds := r.Datastore() - cs := chain.NewStore(ds, store, chain.NewStatusReporter(), genTS.At(0).Cid()) - return root, builder, genTS, cs, st1 -} - -func makePaychMgr(ctx context.Context, t *testing.T, client, miner, paych address.Address) (*pch.Manager, *paychtest.FakePaymentChannelAPI) { - ds := dss.MutexWrap(datastore.NewMapDatastore()) - testAPI := paychtest.NewFakePaymentChannelAPI(ctx, t) - viewer := paychtest.NewFakeStateViewer(t) - pchMgr := pch.NewManager(context.Background(), ds, testAPI, testAPI, viewer) - - viewer.GetFakeStateView().AddActorWithState(paych, client, miner, address.Undef) - return pchMgr, testAPI -} - -func assertChannel(t *testing.T, paych address.Address, pchMgr *pch.Manager, exists bool) { - has, err := pchMgr.ChannelExists(paych) - assert.NoError(t, err) - assert.Equal(t, has, exists) -} diff --git a/internal/app/go-filecoin/connectors/retrieval_market/common.go b/internal/app/go-filecoin/connectors/retrieval_market/common.go deleted file mode 100644 index 1e9b4d9fcc..0000000000 --- a/internal/app/go-filecoin/connectors/retrieval_market/common.go +++ /dev/null @@ -1,45 +0,0 @@ -package retrievalmarketconnector - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/shared" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - paychActor "github.com/filecoin-project/specs-actors/actors/builtin/paych" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" -) - -// ChainReaderAPI is the subset of the Wallet interface needed by the retrieval client node -type ChainReaderAPI interface { - // GetBalance gets the balance in AttoFIL for a given address - Head() block.TipSetKey - GetTipSet(key block.TipSetKey) (block.TipSet, error) - GetActorAt(ctx context.Context, tipKey block.TipSetKey, addr address.Address) (*actor.Actor, error) -} - -// RetrievalSigner is an interface with the ability to sign data -type RetrievalSigner interface { - SignBytes(ctx context.Context, data []byte, addr address.Address) (crypto.Signature, error) -} - -// PaychMgrAPI is an API used for communicating with payment channel actor and store. -type PaychMgrAPI interface { - AllocateLane(paychAddr address.Address) (uint64, error) - ChannelExists(paychAddr address.Address) (bool, error) - GetMinerWorkerAddress(ctx context.Context, miner address.Address, tok shared.TipSetToken) (address.Address, error) - GetPaymentChannelInfo(paychAddr address.Address) (*paymentchannel.ChannelInfo, error) - GetPaymentChannelByAccounts(payer, payee address.Address) (*paymentchannel.ChannelInfo, error) - CreatePaymentChannel(payer, payee address.Address, amt abi.TokenAmount) (address.Address, cid.Cid, error) - AddFundsToChannel(paychAddr address.Address, amt abi.TokenAmount) (cid.Cid, error) - AddVoucherToChannel(paychAddr address.Address, voucher *paychActor.SignedVoucher) error - AddVoucher(paychAddr address.Address, voucher *paychActor.SignedVoucher, proof []byte, expected big.Int, tok shared.TipSetToken) (abi.TokenAmount, error) - WaitForCreatePaychMessage(ctx context.Context, mcid cid.Cid) (address.Address, error) - WaitForAddFundsMessage(ctx context.Context, mcid cid.Cid) error -} diff --git a/internal/app/go-filecoin/connectors/retrieval_market/fake_api.go b/internal/app/go-filecoin/connectors/retrieval_market/fake_api.go deleted file mode 100644 index 5d1872601c..0000000000 --- a/internal/app/go-filecoin/connectors/retrieval_market/fake_api.go +++ /dev/null @@ -1,122 +0,0 @@ -package retrievalmarketconnector - -import ( - "context" - "io" - "math/rand" - "os" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/crypto" - "github.com/ipfs/go-cid" - xerrors "github.com/pkg/errors" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// RetrievalMarketClientFakeAPI is a test API that satisfies all needed interface methods -// for a RetrievalMarketClient -type RetrievalMarketClientFakeAPI struct { - t *testing.T - AllocateLaneErr error - - PayChBalanceErr error - - CreatePaymentChannelErr error - WorkerAddr address.Address - WorkerAddrErr error - Nonce uint64 - NonceErr error - - Sig crypto.Signature - SigErr error - - MsgSendCid cid.Cid - MsgSendErr error - - SendNewVoucherErr error - ExpectedVouchers map[address.Address]*paymentchannel.VoucherInfo - ActualVouchers map[address.Address]bool - - ExpectedSectorIDs map[uint64]string - ActualSectorIDs map[uint64]bool - UnsealErr error -} - -func (rmFake *RetrievalMarketClientFakeAPI) ChannelExists(_ address.Address) (bool, error) { - return true, nil -} - -// NewRetrievalMarketClientFakeAPI creates an instance of a test API that satisfies all needed -// interface methods for a RetrievalMarketClient. -func NewRetrievalMarketClientFakeAPI(t *testing.T) *RetrievalMarketClientFakeAPI { - return &RetrievalMarketClientFakeAPI{ - t: t, - WorkerAddr: requireMakeTestFcAddr(t), - Nonce: rand.Uint64(), - ExpectedVouchers: make(map[address.Address]*paymentchannel.VoucherInfo), - ActualVouchers: make(map[address.Address]bool), - ExpectedSectorIDs: make(map[uint64]string), - ActualSectorIDs: make(map[uint64]bool), - } -} - -// -------------- API METHODS -// NextNonce mocks getting an actor's next nonce -func (rmFake *RetrievalMarketClientFakeAPI) NextNonce(_ context.Context, _ address.Address) (uint64, error) { - rmFake.Nonce++ - return rmFake.Nonce, rmFake.NonceErr -} - -// SignBytes mocks signing data -func (rmFake *RetrievalMarketClientFakeAPI) SignBytes(_ context.Context, _ []byte, _ address.Address) (crypto.Signature, error) { - return rmFake.Sig, rmFake.SigErr -} - -// UnsealSector mocks unsealing. Assign a filename to ExpectedSectorIDs[sectorID] to -// test -func (rmFake *RetrievalMarketClientFakeAPI) UnsealSector(_ context.Context, sectorID uint64) (io.ReadCloser, error) { - if rmFake.UnsealErr != nil { - return nil, rmFake.UnsealErr - } - name, ok := rmFake.ExpectedSectorIDs[sectorID] - if !ok { - return nil, xerrors.New("RetrievalMarketClientFakeAPI: sectorID does not exist") - } - rc, err := os.OpenFile(name, os.O_RDONLY, 0500) - require.NoError(rmFake.t, err) - rmFake.ActualSectorIDs[sectorID] = true - return rc, nil -} - -// --------------- Testing methods - -// StubMessageResponse sets up a message, message receipt and return value for a create payment -// channel message -func (rmFake *RetrievalMarketClientFakeAPI) StubSignature(sigError error) { - mockSigner, _ := types.NewMockSignersAndKeyInfo(1) - addr1 := mockSigner.Addresses[0] - - sig, err := mockSigner.SignBytes(context.TODO(), []byte("pork chops and applesauce"), addr1) - require.NoError(rmFake.t, err) - - signature := crypto.Signature{ - Type: crypto.SigTypeBLS, - Data: sig.Data, - } - rmFake.Sig = signature - rmFake.SigErr = sigError -} - -// requireMakeTestFcAddr generates a random ID addr for test -func requireMakeTestFcAddr(t *testing.T) address.Address { - res, err := address.NewIDAddress(rand.Uint64()) - require.NoError(t, err) - return res -} - -var _ RetrievalSigner = &RetrievalMarketClientFakeAPI{} -var _ UnsealerAPI = &RetrievalMarketClientFakeAPI{} diff --git a/internal/app/go-filecoin/connectors/retrieval_market/provider.go b/internal/app/go-filecoin/connectors/retrieval_market/provider.go deleted file mode 100644 index 5c7496906f..0000000000 --- a/internal/app/go-filecoin/connectors/retrieval_market/provider.go +++ /dev/null @@ -1,120 +0,0 @@ -package retrievalmarketconnector - -import ( - "bufio" - "context" - "io" - "math" - - "github.com/filecoin-project/go-address" - retmkt "github.com/filecoin-project/go-fil-markets/retrievalmarket" - rmnet "github.com/filecoin-project/go-fil-markets/retrievalmarket/network" - "github.com/filecoin-project/go-fil-markets/shared" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin/paych" - blockstore "github.com/ipfs/go-ipfs-blockstore" - xerrors "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors" -) - -// MaxInt is the max value of an Int -const MaxInt = int(^uint(0) >> 1) - -// RetrievalProviderConnector is the glue between go-filecoin and retrieval market provider API -type RetrievalProviderConnector struct { - chainReader ChainReaderAPI - bstore blockstore.Blockstore - net rmnet.RetrievalMarketNetwork - paychMgr PaychMgrAPI - unsealer UnsealerAPI -} - -var _ retmkt.RetrievalProviderNode = &RetrievalProviderConnector{} - -// UnsealerAPI is the API required for unsealing a sectorgi -type UnsealerAPI interface { - UnsealSector(ctx context.Context, sectorID uint64) (io.ReadCloser, error) -} - -// NewRetrievalProviderConnector creates a new RetrievalProviderConnector -func NewRetrievalProviderConnector(net rmnet.RetrievalMarketNetwork, us UnsealerAPI, - bs blockstore.Blockstore, paychMgr PaychMgrAPI, chainReader ChainReaderAPI) *RetrievalProviderConnector { - return &RetrievalProviderConnector{ - bstore: bs, - net: net, - paychMgr: paychMgr, - unsealer: us, - chainReader: chainReader, - } -} - -// UnsealSector unseals the sector given by sectorId and offset with length `length` -// It rejects offsets > int size and length > int64 size; the interface wants -// uint64s. This would return a bufio overflow error anyway, but the check -// is provided as a debugging convenience for the consumer of this function. -func (r *RetrievalProviderConnector) UnsealSector(ctx context.Context, sectorID uint64, - offset uint64, length uint64) (io.ReadCloser, error) { - // reject anything that's a real uint64 rather than trying to get cute - // and offset that much or copy into a buf that large - if offset >= uint64(MaxInt) { - return nil, xerrors.New("offset overflows int") - } - if length >= math.MaxInt64 { - return nil, xerrors.New("length overflows int64") - } - - unsealedSector, err := r.unsealer.UnsealSector(ctx, sectorID) - if err != nil { - return nil, err - } - return newWrappedReadCloser(unsealedSector, offset, length) -} - -type limitedOffsetReadCloser struct { - originalRC io.ReadCloser - limitedReader io.Reader -} - -func newWrappedReadCloser(originalRc io.ReadCloser, offset, length uint64) (io.ReadCloser, error) { - bufr := bufio.NewReader(originalRc) - _, err := bufr.Discard(int(offset)) - if err != nil { - return nil, err - } - limitedR := io.LimitedReader{R: bufr, N: int64(length)} - return &limitedOffsetReadCloser{ - originalRC: originalRc, - limitedReader: &limitedR, - }, nil -} - -func (wrc limitedOffsetReadCloser) Read(p []byte) (int, error) { - return wrc.limitedReader.Read(p) -} -func (wrc limitedOffsetReadCloser) Close() error { - return wrc.originalRC.Close() -} - -// SavePaymentVoucher stores the provided payment voucher. -// Returns the difference between voucher amount and largest previous voucher amount, and -// error if this amount is less than `expected` amount -func (r *RetrievalProviderConnector) SavePaymentVoucher(_ context.Context, paymentChannel address.Address, voucher *paych.SignedVoucher, proof []byte, expected abi.TokenAmount, tok shared.TipSetToken) (actual abi.TokenAmount, err error) { - actual, err = r.paychMgr.AddVoucher(paymentChannel, voucher, proof, expected, tok) - - if err != nil { - return abi.NewTokenAmount(0), err - } - - return actual, nil -} - -// GetMinerWorkerAddress produces the worker address for the provided storage -// miner address from the tipset for the provided token. -func (r *RetrievalProviderConnector) GetMinerWorkerAddress(ctx context.Context, miner address.Address, tok shared.TipSetToken) (address.Address, error) { - return r.paychMgr.GetMinerWorkerAddress(ctx, miner, tok) -} - -func (r *RetrievalProviderConnector) GetChainHead(ctx context.Context) (shared.TipSetToken, abi.ChainEpoch, error) { - return connectors.GetChainHead(r.chainReader) -} diff --git a/internal/app/go-filecoin/connectors/retrieval_market/provider_test.go b/internal/app/go-filecoin/connectors/retrieval_market/provider_test.go deleted file mode 100644 index 8bb3834df0..0000000000 --- a/internal/app/go-filecoin/connectors/retrieval_market/provider_test.go +++ /dev/null @@ -1,180 +0,0 @@ -package retrievalmarketconnector_test - -import ( - "context" - "errors" - "io/ioutil" - "math/rand" - "os" - "reflect" - "testing" - - "github.com/filecoin-project/go-address" - gfmtut "github.com/filecoin-project/go-fil-markets/shared_testutil" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin/paych" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - specst "github.com/filecoin-project/specs-actors/support/testing" - "github.com/ipfs/go-datastore" - dss "github.com/ipfs/go-datastore/sync" - blockstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - . "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors/retrieval_market" - pch "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel" - paychtest "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel/testing" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/piecemanager" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestNewRetrievalProviderNodeConnector(t *testing.T) { - tf.UnitTest(t) - rmnet := gfmtut.NewTestRetrievalMarketNetwork(gfmtut.TestNetworkParams{}) - pm := piecemanager.NewFiniteStateMachineBackEnd(nil, nil) - bs := blockstore.NewBlockstore(dss.MutexWrap(datastore.NewMapDatastore())) - - pchMgr, _ := makePaychMgr(context.Background(), t, - specst.NewIDAddr(t, 99), - specst.NewIDAddr(t, 100), - specst.NewActorAddr(t, "foobar")) - rpc := NewRetrievalProviderConnector(rmnet, &pm, bs, pchMgr, nil) - assert.NotZero(t, rpc) -} - -func TestRetrievalProviderConnector_UnsealSector(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - sectorID := rand.Uint64() - fixtureFile, err := ioutil.TempFile(".", "file") - require.NoError(t, err) - fileData := "somedata" - _, err = fixtureFile.WriteString(fileData) - require.NoError(t, err) - defer func() { _ = os.Remove(fixtureFile.Name()) }() - - intSz := reflect.TypeOf(0).Size()*8 - 1 - maxOffset := uint64(1 << intSz) - - testCases := []struct { - name string - offset, length, expectedLen uint64 - unsealErr error - expectedErr string - }{ - {name: "happy path", offset: 2, length: 6, expectedLen: 6, expectedErr: ""}, - {name: "happy even if length more than file length", offset: 2, length: 9999, expectedLen: 6, expectedErr: ""}, - {name: "returns error if Unseal errors", unsealErr: errors.New("boom"), expectedErr: "boom"}, - {name: "returns EOF if offset more than file length", offset: 9999, expectedErr: "EOF"}, - {name: "returns error if offset > int64", offset: maxOffset, expectedErr: "offset overflows int"}, - {name: "returns error if length > int64", length: 1 << 63, expectedErr: "length overflows int64"}, - } - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - rmp, rpc := unsealTestSetup(ctx, t) - rmp.ExpectedSectorIDs[sectorID] = fixtureFile.Name() - - if tc.expectedErr != "" { - rmp.UnsealErr = tc.unsealErr - _, err := rpc.UnsealSector(ctx, sectorID, tc.offset, tc.length) - assert.EqualError(t, err, tc.expectedErr) - } else { - res, err := rpc.UnsealSector(ctx, sectorID, tc.offset, tc.length) - require.NoError(t, err) - readBytes := make([]byte, tc.length+1) - readlen, err := res.Read(readBytes) - require.NoError(t, err) - assert.Equal(t, int(tc.expectedLen), readlen) - - // check that it read something & the offset worked - assert.Equal(t, fileData[2:], string(readBytes[0:6])) - } - }) - } -} - -func unsealTestSetup(ctx context.Context, t *testing.T) (*RetrievalMarketClientFakeAPI, *RetrievalProviderConnector) { - rmnet := gfmtut.NewTestRetrievalMarketNetwork(gfmtut.TestNetworkParams{}) - bs := blockstore.NewBlockstore(dss.MutexWrap(datastore.NewMapDatastore())) - rmp := NewRetrievalMarketClientFakeAPI(t) - pchMgr, _ := makePaychMgr(ctx, t, - specst.NewIDAddr(t, 99), - specst.NewIDAddr(t, 100), - specst.NewActorAddr(t, "foobar")) - rpc := NewRetrievalProviderConnector(rmnet, rmp, bs, pchMgr, nil) - return rmp, rpc -} - -func TestRetrievalProviderConnector_SavePaymentVoucher(t *testing.T) { - ctx := context.Background() - - rmnet := gfmtut.NewTestRetrievalMarketNetwork(gfmtut.TestNetworkParams{}) - pm := piecemanager.NewFiniteStateMachineBackEnd(nil, nil) - - bs := blockstore.NewBlockstore(dss.MutexWrap(datastore.NewMapDatastore())) - pchan := specst.NewIDAddr(t, 100) - clientAddr := specst.NewIDAddr(t, 101) - minerAddr := specst.NewIDAddr(t, 102) - root := gfmtut.GenerateCids(1)[0] - tsk := block.NewTipSetKey(root) - tok, err := encoding.Encode(tsk) - require.NoError(t, err) - - voucher := &paych.SignedVoucher{ - Lane: rand.Uint64(), - Nonce: rand.Uint64(), - Amount: big.NewInt(rand.Int63()), - MinSettleHeight: abi.ChainEpoch(99), - SecretPreimage: []byte{}, - } - proof := []byte("proof") - - t.Run("saves payment voucher and returns voucher amount if new", func(t *testing.T) { - viewer, pchMgr := makeViewerAndManager(ctx, t, clientAddr, minerAddr, pchan) - viewer.GetFakeStateView().AddActorWithState(pchan, clientAddr, minerAddr, address.Undef) - rmp := NewRetrievalMarketClientFakeAPI(t) - // simulate creating payment channel - rmp.ExpectedVouchers[pchan] = &pch.VoucherInfo{Voucher: voucher, Proof: proof} - - rpc := NewRetrievalProviderConnector(rmnet, &pm, bs, pchMgr, nil) - - tokenamt, err := rpc.SavePaymentVoucher(ctx, pchan, voucher, proof, voucher.Amount, tok) - assert.NoError(t, err) - assert.True(t, voucher.Amount.Equals(tokenamt)) - - chinfo, err := pchMgr.GetPaymentChannelInfo(pchan) - require.NoError(t, err) - assert.True(t, chinfo.HasVoucher(voucher)) - }) - - t.Run("errors if manager fails to save voucher, does not store new channel info", func(t *testing.T) { - viewer, pchMgr := makeViewerAndManager(ctx, t, clientAddr, minerAddr, pchan) - viewer.GetFakeStateView().AddActorWithState(pchan, clientAddr, minerAddr, address.Undef) - viewer.GetFakeStateView().PaychActorPartiesErr = errors.New("boom") - - rmp := NewRetrievalMarketClientFakeAPI(t) - rmp.ExpectedVouchers[pchan] = &pch.VoucherInfo{Voucher: voucher, Proof: proof} - rpc := NewRetrievalProviderConnector(rmnet, &pm, bs, pchMgr, nil) - _, err := rpc.SavePaymentVoucher(ctx, pchan, voucher, proof, voucher.Amount, tok) - assert.EqualError(t, err, "boom") - - _, err = pchMgr.GetPaymentChannelInfo(pchan) - require.EqualError(t, err, "No state for /t0100: datastore: key not found") - }) -} - -func makeViewerAndManager(ctx context.Context, t *testing.T, client, miner, paych address.Address) (*paychtest.FakeStateViewer, *pch.Manager) { - ds := dss.MutexWrap(datastore.NewMapDatastore()) - testAPI := paychtest.NewFakePaymentChannelAPI(ctx, t) - viewer := paychtest.NewFakeStateViewer(t) - pchMgr := pch.NewManager(context.Background(), ds, testAPI, testAPI, viewer) - blockHeight := uint64(1234) - balance := types.NewAttoFILFromFIL(1000) - - testAPI.ExpectedMsgCid, testAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, client, miner, paych, balance, exitcode.Ok, blockHeight) - return viewer, pchMgr -} diff --git a/internal/app/go-filecoin/connectors/sectors/persisted.go b/internal/app/go-filecoin/connectors/sectors/persisted.go deleted file mode 100644 index 2e36f1a6ba..0000000000 --- a/internal/app/go-filecoin/connectors/sectors/persisted.go +++ /dev/null @@ -1,31 +0,0 @@ -package sectors - -import ( - "sync" - - "github.com/filecoin-project/go-storedcounter" - "github.com/filecoin-project/specs-actors/actors/abi" - fsm "github.com/filecoin-project/storage-fsm" - "github.com/ipfs/go-datastore" -) - -// PersistedSectorNumberCounter dispenses unique sector numbers using a -// monotonically increasing internal counter -type PersistedSectorNumberCounter struct { - inner *storedcounter.StoredCounter - innerLk sync.Mutex -} - -var _ fsm.SectorIDCounter = new(PersistedSectorNumberCounter) - -func (s *PersistedSectorNumberCounter) Next() (abi.SectorNumber, error) { - s.innerLk.Lock() - defer s.innerLk.Unlock() - i, err := s.inner.Next() - return abi.SectorNumber(i), err -} - -func NewPersistedSectorNumberCounter(ds datastore.Batching) fsm.SectorIDCounter { - sc := storedcounter.New(ds, datastore.NewKey("/storage/nextid")) - return &PersistedSectorNumberCounter{inner: sc} -} diff --git a/internal/app/go-filecoin/connectors/storage_market/client.go b/internal/app/go-filecoin/connectors/storage_market/client.go deleted file mode 100644 index d9e08b2b32..0000000000 --- a/internal/app/go-filecoin/connectors/storage_market/client.go +++ /dev/null @@ -1,244 +0,0 @@ -package storagemarketconnector - -import ( - "context" - "reflect" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/shared" - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/market" - spaminer "github.com/filecoin-project/specs-actors/actors/builtin/miner" - spapow "github.com/filecoin-project/specs-actors/actors/builtin/power" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-hamt-ipld" - cbor "github.com/ipfs/go-ipld-cbor" - xerrors "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// StorageClientNodeConnector adapts the node to provide the correct interface to the storage client. -type StorageClientNodeConnector struct { - connectorCommon - - clientAddr ClientAddressGetter - cborStore cbor.IpldStore -} - -type ClientAddressGetter func() (address.Address, error) - -var _ storagemarket.StorageClientNode = &StorageClientNodeConnector{} - -// NewStorageClientNodeConnector creates a new connector -func NewStorageClientNodeConnector( - cbor cbor.IpldStore, - cs chainReader, - w *msg.Waiter, - s types.Signer, - ob *message.Outbox, - ca ClientAddressGetter, - sv *appstate.Viewer, -) *StorageClientNodeConnector { - return &StorageClientNodeConnector{ - connectorCommon: connectorCommon{cs, sv, w, s, ob}, - cborStore: cbor, - clientAddr: ca, - } -} - -// AddFunds adds storage market funds for a storage client -func (s *StorageClientNodeConnector) AddFunds(ctx context.Context, addr address.Address, amount abi.TokenAmount) (cid.Cid, error) { - clientAddr, err := s.clientAddr() - if err != nil { - return cid.Undef, err - } - return s.addFunds(ctx, clientAddr, addr, amount) -} - -// EnsureFunds compares the passed amount to the available balance for an address, and will add funds if necessary -func (s *StorageClientNodeConnector) EnsureFunds(ctx context.Context, addr, walletAddr address.Address, amount abi.TokenAmount, tok shared.TipSetToken) (cid.Cid, error) { - balance, err := s.GetBalance(ctx, addr, tok) - if err != nil { - return cid.Undef, err - } - - if balance.Available.LessThan(amount) { - return s.AddFunds(ctx, addr, big.Sub(amount, balance.Available)) - } - - return cid.Undef, err -} - -// ListClientDeals returns all deals published on chain for the given account -func (s *StorageClientNodeConnector) ListClientDeals(ctx context.Context, addr address.Address, tok shared.TipSetToken) ([]storagemarket.StorageDeal, error) { - return s.listDeals(ctx, tok, func(proposal *market.DealProposal, _ *market.DealState) bool { - return proposal.Client == addr - }) -} - -// ListStorageProviders finds all miners that will provide storage -func (s *StorageClientNodeConnector) ListStorageProviders(ctx context.Context, tok shared.TipSetToken) ([]*storagemarket.StorageProviderInfo, error) { - var tsk block.TipSetKey - if err := encoding.Decode(tok, &tsk); err != nil { - return nil, xerrors.Wrapf(err, "failed to marshal TipSetToken into a TipSetKey") - } - - var spState spapow.State - err := s.chainStore.GetActorStateAt(ctx, tsk, builtin.StoragePowerActorAddr, &spState) - if err != nil { - return nil, err - } - - infos := []*storagemarket.StorageProviderInfo{} - powerHamt, err := hamt.LoadNode(ctx, s.cborStore, spState.Claims) - if err != nil { - return nil, err - } - - err = powerHamt.ForEach(ctx, func(minerAddrStr string, _ interface{}) error { - minerAddr, err := address.NewFromString(minerAddrStr) - if err != nil { - return err - } - - var mState spaminer.State - err = s.chainStore.GetActorStateAt(ctx, tsk, minerAddr, &mState) - if err != nil { - return err - } - - info := mState.Info - infos = append(infos, &storagemarket.StorageProviderInfo{ - Address: minerAddr, - Owner: info.Owner, - Worker: info.Worker, - SectorSize: uint64(info.SectorSize), - PeerID: info.PeerId, - }) - return nil - }) - if err != nil { - return nil, err - } - - return infos, nil -} - -// ValidatePublishedDeal validates a deal has been published correctly -// Adapted from https://github.com/filecoin-project/lotus/blob/3b34eba6124d16162b712e971f0db2ee108e0f67/markets/storageadapter/client.go#L156 -func (s *StorageClientNodeConnector) ValidatePublishedDeal(ctx context.Context, deal storagemarket.ClientDeal) (dealID abi.DealID, err error) { - var unsigned types.UnsignedMessage - var receipt *vm.MessageReceipt - - // TODO: This is an inefficient way to discover a deal ID. See if we can find it uniquely on chain some other way or store the dealID when the message first lands (#4066). - // give the wait 30 seconds to avoid races - ctx, cancel := context.WithTimeout(ctx, 30*time.Second) - defer cancel() - - // Fetch receipt to return dealId - about2Days := uint64(24 * 60) - err = s.waiter.Wait(ctx, *deal.PublishMessage, about2Days, func(_ *block.Block, msg *types.SignedMessage, rcpt *vm.MessageReceipt) error { - unsigned = msg.Message - receipt = rcpt - return nil - }) - if err != nil { - return 0, err - } - - tok, err := encoding.Encode(s.chainStore.Head()) - if err != nil { - return 0, err - } - - minerWorker, err := s.GetMinerWorkerAddress(ctx, deal.Proposal.Provider, tok) - if err != nil { - return 0, err - } - - if unsigned.From != minerWorker { - return 0, xerrors.Errorf("deal wasn't published by storage provider: from=%s, provider=%s", unsigned.From, deal.Proposal.Provider) - } - - if unsigned.To != builtin.StorageMarketActorAddr { - return 0, xerrors.Errorf("deal publish message wasn't set to StorageMarket actor (to=%s)", unsigned.To) - } - - if unsigned.Method != builtin.MethodsMarket.PublishStorageDeals { - return 0, xerrors.Errorf("deal publish message called incorrect method (method=%d)", unsigned.Method) - } - - var params market.PublishStorageDealsParams - err = encoding.Decode(unsigned.Params, ¶ms) - if err != nil { - return 0, err - } - - msgProposals := params.Deals - // The return value doesn't recapitulate the whole deal. If inspection is required, we should look up the deal - // in the market actor state. - - for _, proposal := range msgProposals { - if reflect.DeepEqual(proposal.Proposal, deal.Proposal) { - var ret market.PublishStorageDealsReturn - err := encoding.Decode(receipt.ReturnValue, &ret) - if err != nil { - return 0, err - } - return ret.IDs[0], nil - } - } - - return 0, xerrors.Errorf("published deal does not match ClientDeal") -} - -// SignProposal uses the local wallet to sign the given proposal -func (s *StorageClientNodeConnector) SignProposal(ctx context.Context, signer address.Address, proposal market.DealProposal) (*market.ClientDealProposal, error) { - buf, err := encoding.Encode(&proposal) - if err != nil { - return nil, err - } - - signature, err := s.SignBytes(ctx, signer, buf) - if err != nil { - return nil, err - } - - return &market.ClientDealProposal{ - Proposal: proposal, - ClientSignature: *signature, - }, nil -} - -// GetDefaultWalletAddress returns the default account for this node -func (s *StorageClientNodeConnector) GetDefaultWalletAddress(_ context.Context) (address.Address, error) { - return s.clientAddr() -} - -// ValidateAskSignature ensures the given ask has been signed correctly -func (s *StorageClientNodeConnector) ValidateAskSignature(ctx context.Context, signed *storagemarket.SignedStorageAsk, tok shared.TipSetToken) (bool, error) { - ask := signed.Ask - - buf, err := encoding.Encode(ask) - if err != nil { - return false, err - } - - return s.VerifySignature(ctx, *signed.Signature, ask.Miner, buf, tok) -} - -// EventLogger logs new events on the storage client -func (s *StorageClientNodeConnector) EventLogger(event storagemarket.ClientEvent, deal storagemarket.ClientDeal) { - log.Infof("Event: %s, Proposal CID: %s, State: %s, Message: %s", storagemarket.ClientEvents[event], deal.ProposalCid, storagemarket.DealStates[deal.State], deal.Message) -} diff --git a/internal/app/go-filecoin/connectors/storage_market/common.go b/internal/app/go-filecoin/connectors/storage_market/common.go deleted file mode 100644 index 9d6ed16771..0000000000 --- a/internal/app/go-filecoin/connectors/storage_market/common.go +++ /dev/null @@ -1,250 +0,0 @@ -package storagemarketconnector - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/shared" - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - spasm "github.com/filecoin-project/specs-actors/actors/builtin/market" - "github.com/filecoin-project/specs-actors/actors/crypto" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - "github.com/filecoin-project/specs-actors/actors/util/adt" - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - logging "github.com/ipfs/go-log/v2" - "golang.org/x/xerrors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -var log = logging.Logger("storage-protocol") - -type chainReader interface { - Head() block.TipSetKey - GetTipSet(block.TipSetKey) (block.TipSet, error) - GetTipSetStateRoot(ctx context.Context, tipKey block.TipSetKey) (cid.Cid, error) - GetActorStateAt(ctx context.Context, tipKey block.TipSetKey, addr address.Address, out interface{}) error - StateView(key block.TipSetKey) (*state.View, error) - cbor.IpldStore -} - -// WorkerGetter is a function that can retrieve the miner worker for the given address from actor state -type WorkerGetter func(ctx context.Context, minerAddr address.Address, baseKey block.TipSetKey) (address.Address, error) - -type connectorCommon struct { - chainStore chainReader - stateViewer *appstate.Viewer - waiter *msg.Waiter - signer types.Signer - outbox *message.Outbox -} - -// MostRecentStateId returns the state key from the current head of the chain. -func (c *connectorCommon) GetChainHead(_ context.Context) (shared.TipSetToken, abi.ChainEpoch, error) { // nolint: golint - return connectors.GetChainHead(c.chainStore) -} - -func (c *connectorCommon) WaitForMessage(ctx context.Context, mcid cid.Cid, onCompletion func(exitcode.ExitCode, []byte, error) error) error { - return c.waiter.Wait(ctx, mcid, msg.DefaultMessageWaitLookback, func(b *block.Block, message *types.SignedMessage, r *vm.MessageReceipt) error { - return onCompletion(r.ExitCode, r.ReturnValue, nil) - }) -} - -func (c *connectorCommon) addFunds(ctx context.Context, fromAddr address.Address, addr address.Address, amount abi.TokenAmount) (cid.Cid, error) { - mcid, _, err := c.outbox.Send( - ctx, - fromAddr, - builtin.StorageMarketActorAddr, - types.NewAttoFIL(amount.Int), - types.NewGasPrice(1), - gas.NewGas(5000), - true, - builtin.MethodsMarket.AddBalance, - &addr, - ) - return mcid, err -} - -// SignBytes uses the local wallet to sign the bytes with the given address -func (c *connectorCommon) SignBytes(ctx context.Context, signer address.Address, b []byte) (*crypto.Signature, error) { - sig, err := c.signer.SignBytes(ctx, b, signer) - return &sig, err -} - -func (c *connectorCommon) GetBalance(ctx context.Context, addr address.Address, tok shared.TipSetToken) (storagemarket.Balance, error) { - var tsk block.TipSetKey - if err := encoding.Decode(tok, &tsk); err != nil { - return storagemarket.Balance{}, xerrors.Errorf("failed to marshal TipSetToken into a TipSetKey: %w", err) - } - - // Direct state access should be replaced with use of the state view. - var smState spasm.State - err := c.chainStore.GetActorStateAt(ctx, tsk, builtin.StorageMarketActorAddr, &smState) - if err != nil { - return storagemarket.Balance{}, err - } - - view, err := c.chainStore.StateView(tsk) - if err != nil { - return storagemarket.Balance{}, err - } - resAddr, err := view.InitResolveAddress(ctx, addr) - if err != nil { - return storagemarket.Balance{}, err - } - - available, err := c.getBalance(ctx, smState.EscrowTable, resAddr) - if err != nil { - return storagemarket.Balance{}, err - } - - locked, err := c.getBalance(ctx, smState.LockedTable, resAddr) - if err != nil { - return storagemarket.Balance{}, err - } - - return storagemarket.Balance{ - Available: abi.NewTokenAmount(available.Int64()), - Locked: abi.NewTokenAmount(locked.Int64()), - }, nil -} - -func (c *connectorCommon) GetMinerWorkerAddress(ctx context.Context, miner address.Address, tok shared.TipSetToken) (address.Address, error) { - view, err := c.loadStateView(tok) - if err != nil { - return address.Undef, err - } - - _, fcworker, err := view.MinerControlAddresses(ctx, miner) - if err != nil { - return address.Undef, err - } - - return fcworker, nil -} - -func (c *connectorCommon) OnDealSectorCommitted(ctx context.Context, provider address.Address, dealID abi.DealID, cb storagemarket.DealSectorCommittedCallback) error { - view, err := c.chainStore.StateView(c.chainStore.Head()) - if err != nil { - cb(err) - return err - } - - resolvedProvider, err := view.InitResolveAddress(ctx, provider) - if err != nil { - cb(err) - return err - } - - err = c.waiter.WaitPredicate(ctx, msg.DefaultMessageWaitLookback, func(msg *types.SignedMessage, msgCid cid.Cid) bool { - resolvedTo, err := view.InitResolveAddress(ctx, msg.Message.To) - if err != nil { - return false - } - - if resolvedTo != resolvedProvider { - return false - } - - if msg.Message.Method != builtin.MethodsMiner.ProveCommitSector { - return false - } - - // that's enough for us to check chain state - view, err = c.chainStore.StateView(c.chainStore.Head()) - if err != nil { - return false - } - - _, found, err := view.MarketDealState(ctx, dealID) - if err != nil { - return false - } - - return found - }, func(b *block.Block, signedMessage *types.SignedMessage, receipt *vm.MessageReceipt) error { - return nil - }) - - cb(err) - return err -} - -func (c *connectorCommon) getBalance(ctx context.Context, root cid.Cid, addr address.Address) (abi.TokenAmount, error) { - // These should be replaced with methods on the state view - table, err := adt.AsBalanceTable(state.StoreFromCbor(ctx, c.chainStore), root) - if err != nil { - return abi.TokenAmount{}, err - } - - hasBalance, err := table.Has(addr) - if err != nil { - return big.Zero(), err - } - balance := abi.NewTokenAmount(0) - if hasBalance { - balance, err = table.Get(addr) - if err != nil { - return big.Zero(), err - } - } - return balance, nil -} - -func (c *connectorCommon) listDeals(ctx context.Context, tok shared.TipSetToken, predicate func(proposal *spasm.DealProposal, dealState *spasm.DealState) bool) ([]storagemarket.StorageDeal, error) { - view, err := c.loadStateView(tok) - if err != nil { - return nil, err - } - - // Deals are not indexed in (expensive) chain state. - // This iterates *all* deal states, loads the associated proposals, and filters by provider. - // This is going to be really slow until we find a place to index deals, either here or in the module. - deals := []storagemarket.StorageDeal{} - err = view.MarketDealStatesForEach(ctx, func(dealId abi.DealID, state *spasm.DealState) error { - proposal, err := view.MarketDealProposal(ctx, dealId) - if err != nil { - return xerrors.Errorf("no proposal for deal %d: %w", dealId, err) - } - if predicate(&proposal, state) { - deals = append(deals, storagemarket.StorageDeal{ - DealProposal: proposal, - DealState: *state, - }) - } - return nil - }) - return deals, err -} - -func (c *connectorCommon) VerifySignature(ctx context.Context, signature crypto.Signature, signer address.Address, plaintext []byte, tok shared.TipSetToken) (bool, error) { - view, err := c.loadStateView(tok) - if err != nil { - return false, err - } - - validator := state.NewSignatureValidator(view) - - return nil == validator.ValidateSignature(ctx, plaintext, signer, signature), nil -} - -func (c *connectorCommon) loadStateView(tok shared.TipSetToken) (*appstate.View, error) { - var tsk block.TipSetKey - if err := encoding.Decode(tok, &tsk); err != nil { - return nil, xerrors.Errorf("failed to marshal tok to a tipset key: %w", err) - } - return c.chainStore.StateView(tsk) -} diff --git a/internal/app/go-filecoin/connectors/storage_market/provider.go b/internal/app/go-filecoin/connectors/storage_market/provider.go deleted file mode 100644 index 2d53712983..0000000000 --- a/internal/app/go-filecoin/connectors/storage_market/provider.go +++ /dev/null @@ -1,204 +0,0 @@ -package storagemarketconnector - -import ( - "context" - "io" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/shared" - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/market" - spaminer "github.com/filecoin-project/specs-actors/actors/builtin/miner" - "github.com/filecoin-project/specs-actors/actors/util/adt" - "github.com/ipfs/go-cid" - "github.com/pkg/errors" - "golang.org/x/xerrors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/piecemanager" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// StorageProviderNodeConnector adapts the node to provide an interface for the storage provider -type StorageProviderNodeConnector struct { - connectorCommon - - minerAddr address.Address - chainStore chainReader - outbox *message.Outbox - pieceManager piecemanager.PieceManager -} - -var _ storagemarket.StorageProviderNode = &StorageProviderNodeConnector{} - -// NewStorageProviderNodeConnector creates a new connector -func NewStorageProviderNodeConnector(ma address.Address, - cs chainReader, - ob *message.Outbox, - w *msg.Waiter, - pm piecemanager.PieceManager, - s types.Signer, - sv *appstate.Viewer, -) *StorageProviderNodeConnector { - return &StorageProviderNodeConnector{ - connectorCommon: connectorCommon{cs, sv, w, s, ob}, - chainStore: cs, - minerAddr: ma, - outbox: ob, - pieceManager: pm, - } -} - -// AddFunds adds storage market funds for a storage provider -func (s *StorageProviderNodeConnector) AddFunds(ctx context.Context, addr address.Address, amount abi.TokenAmount) (cid.Cid, error) { - tok, err := encoding.Encode(s.chainStore.Head()) - if err != nil { - return cid.Undef, err - } - - workerAddr, err := s.GetMinerWorkerAddress(ctx, s.minerAddr, tok) - if err != nil { - return cid.Undef, err - } - - return s.addFunds(ctx, workerAddr, addr, amount) -} - -// EnsureFunds compares the passed amount to the available balance for an address, and will add funds if necessary -func (s *StorageProviderNodeConnector) EnsureFunds(ctx context.Context, addr, walletAddr address.Address, amount abi.TokenAmount, tok shared.TipSetToken) (cid.Cid, error) { - balance, err := s.GetBalance(ctx, addr, tok) - if err != nil { - return cid.Undef, err - } - - if balance.Available.LessThan(amount) { - return s.AddFunds(ctx, addr, big.Sub(amount, balance.Available)) - } - - return cid.Undef, err -} - -// PublishDeals publishes storage deals on chain -func (s *StorageProviderNodeConnector) PublishDeals(ctx context.Context, deal storagemarket.MinerDeal) (cid.Cid, error) { - params := market.PublishStorageDealsParams{Deals: []market.ClientDealProposal{deal.ClientDealProposal}} - - tok, err := encoding.Encode(s.chainStore.Head()) - if err != nil { - return cid.Undef, err - } - - workerAddr, err := s.GetMinerWorkerAddress(ctx, s.minerAddr, tok) - if err != nil { - return cid.Undef, err - } - - mcid, _, err := s.outbox.Send( - ctx, - workerAddr, - builtin.StorageMarketActorAddr, - types.ZeroAttoFIL, - types.NewGasPrice(1), - gas.NewGas(10000), - true, - builtin.MethodsMarket.PublishStorageDeals, - ¶ms, - ) - - if err != nil { - return cid.Undef, err - } - - return mcid, err -} - -// ListProviderDeals lists all deals for the given provider -func (s *StorageProviderNodeConnector) ListProviderDeals(ctx context.Context, addr address.Address, tok shared.TipSetToken) ([]storagemarket.StorageDeal, error) { - return s.listDeals(ctx, tok, func(proposal *market.DealProposal, dealState *market.DealState) bool { - return proposal.Provider == addr - }) -} - -// OnDealComplete adds the piece to the storage provider -func (s *StorageProviderNodeConnector) OnDealComplete(ctx context.Context, deal storagemarket.MinerDeal, pieceSize abi.UnpaddedPieceSize, pieceReader io.Reader) error { - // TODO: callback. - return s.pieceManager.SealPieceIntoNewSector(ctx, deal.DealID, deal.Proposal.StartEpoch, deal.Proposal.EndEpoch, pieceSize, pieceReader) -} - -// LocatePieceForDealWithinSector finds the sector, offset and length of a piece associated with the given deal id -func (s *StorageProviderNodeConnector) LocatePieceForDealWithinSector(ctx context.Context, dealID abi.DealID, tok shared.TipSetToken) (sectorNumber uint64, offset uint64, length uint64, err error) { - var tsk block.TipSetKey - if err := encoding.Decode(tok, &tsk); err != nil { - return 0, 0, 0, xerrors.Errorf("failed to marshal TipSetToken into a TipSetKey: %w", err) - } - - var smState market.State - err = s.chainStore.GetActorStateAt(ctx, tsk, builtin.StorageMarketActorAddr, &smState) - if err != nil { - return 0, 0, 0, err - } - - stateStore := state.StoreFromCbor(ctx, s.chainStore) - proposals, err := adt.AsArray(stateStore, smState.Proposals) - if err != nil { - return 0, 0, 0, err - } - - var minerState spaminer.State - err = s.chainStore.GetActorStateAt(ctx, tsk, s.minerAddr, &minerState) - if err != nil { - return 0, 0, 0, err - } - - precommitted, err := adt.AsMap(stateStore, minerState.PreCommittedSectors) - if err != nil { - return 0, 0, 0, err - } - - var sectorInfo spaminer.SectorPreCommitOnChainInfo - err = precommitted.ForEach(§orInfo, func(key string) error { - k, err := adt.ParseIntKey(key) - if err != nil { - return err - } - sectorNumber = uint64(k) - - for _, deal := range sectorInfo.Info.DealIDs { - if deal == dealID { - offset = uint64(0) - for _, did := range sectorInfo.Info.DealIDs { - var proposal market.DealProposal - found, err := proposals.Get(uint64(did), &proposal) - if err != nil { - return err - } - if !found { - return errors.Errorf("Could not find miner deal %d in storage market state", did) - } - - if did == dealID { - sectorNumber = uint64(k) - length = uint64(proposal.PieceSize) - return nil // Found! - } - offset += uint64(proposal.PieceSize) - } - } - } - return errors.New("Deal not found") - }) - return -} - -// EventLogger logs new events on the storage provider -func (s *StorageProviderNodeConnector) EventLogger(event storagemarket.ProviderEvent, deal storagemarket.MinerDeal) { - log.Infof("Event: %s, Proposal CID: %s, State: %s, Message: %s", storagemarket.ProviderEvents[event], deal.ProposalCid, storagemarket.DealStates[deal.State], deal.Message) -} diff --git a/internal/app/go-filecoin/internal/submodule/block_mining_submodule.go b/internal/app/go-filecoin/internal/submodule/block_mining_submodule.go deleted file mode 100644 index 3e7df5c70a..0000000000 --- a/internal/app/go-filecoin/internal/submodule/block_mining_submodule.go +++ /dev/null @@ -1,47 +0,0 @@ -package submodule - -import ( - "context" - "sync" - - "github.com/filecoin-project/go-filecoin/internal/pkg/mining" - "github.com/filecoin-project/go-filecoin/internal/pkg/postgenerator" - mining_protocol "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/mining" -) - -// BlockMiningSubmodule enhances the `Node` with block mining capabilities. -type BlockMiningSubmodule struct { - BlockMiningAPI *mining_protocol.API - - // Mining stuff. - AddNewlyMinedBlock newBlockFunc - // cancelMining cancels the context for block production and sector commitments. - CancelMining context.CancelFunc - MiningWorker *mining.DefaultWorker - MiningScheduler mining.Scheduler - Mining struct { - sync.Mutex - IsMining bool - } - MiningDoneWg *sync.WaitGroup - - // Inject non-default post generator here or leave nil for default - PoStGenerator postgenerator.PoStGenerator -} - -type newBlockFunc func(context.Context, mining.FullBlock) - -// NewBlockMiningSubmodule creates a new block mining submodule. -func NewBlockMiningSubmodule(ctx context.Context, gen postgenerator.PoStGenerator) (BlockMiningSubmodule, error) { - return BlockMiningSubmodule{ - // BlockMiningAPI: nil, - // AddNewlyMinedBlock: nil, - // cancelMining: nil, - // MiningWorker: nil, - // MiningScheduler: nil, - // mining: nil, - // miningDoneWg: nil, - // MessageSub: nil, - PoStGenerator: gen, - }, nil -} diff --git a/internal/app/go-filecoin/internal/submodule/blockservice_submoodule.go b/internal/app/go-filecoin/internal/submodule/blockservice_submoodule.go deleted file mode 100644 index 16c532062e..0000000000 --- a/internal/app/go-filecoin/internal/submodule/blockservice_submoodule.go +++ /dev/null @@ -1,26 +0,0 @@ -package submodule - -import ( - "context" - - bserv "github.com/ipfs/go-blockservice" -) - -// BlockServiceSubmodule enhances the `Node` with networked key/value fetching capabilities. -// -// TODO: split chain data from piece data (issue: https://github.com/filecoin-project/go-filecoin/issues/3481) -// Note: at present: -// - `BlockService` is shared by chain/graphsync and piece/bitswap data -type BlockServiceSubmodule struct { - // Blockservice is a higher level interface for fetching data - Blockservice bserv.BlockService -} - -// NewBlockserviceSubmodule creates a new block service submodule. -func NewBlockserviceSubmodule(ctx context.Context, blockstore *BlockstoreSubmodule, network *NetworkSubmodule) (BlockServiceSubmodule, error) { - bservice := bserv.New(blockstore.Blockstore, network.Bitswap) - - return BlockServiceSubmodule{ - Blockservice: bservice, - }, nil -} diff --git a/internal/app/go-filecoin/internal/submodule/blockstore_submodule.go b/internal/app/go-filecoin/internal/submodule/blockstore_submodule.go deleted file mode 100644 index a33ae7536b..0000000000 --- a/internal/app/go-filecoin/internal/submodule/blockstore_submodule.go +++ /dev/null @@ -1,41 +0,0 @@ -package submodule - -import ( - "context" - - ds "github.com/ipfs/go-datastore" - bstore "github.com/ipfs/go-ipfs-blockstore" - - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" -) - -// BlockstoreSubmodule enhances the `Node` with local key/value storing capabilities. -// -// TODO: split chain data from piece data (issue: https://github.com/filecoin-project/go-filecoin/issues/3481) -// Note: at present: -// - `Blockstore` is shared by chain/graphsync and piece/bitswap data -// - `cborStore` is used for chain state and shared with piece data exchange for deals at the moment. -type BlockstoreSubmodule struct { - // Blockstore is the un-networked blocks interface - Blockstore bstore.Blockstore - - // cborStore is a wrapper for a `cbor.IpldStore` that works on the local IPLD-Cbor objects stored in `Blockstore`. - CborStore *cborutil.IpldStore -} - -type blockstoreRepo interface { - Datastore() ds.Batching -} - -// NewBlockstoreSubmodule creates a new block store submodule. -func NewBlockstoreSubmodule(ctx context.Context, repo blockstoreRepo) (BlockstoreSubmodule, error) { - // set up block store - bs := bstore.NewBlockstore(repo.Datastore()) - // setup a ipldCbor on top of the local store - ipldCborStore := cborutil.NewIpldStore(bs) - - return BlockstoreSubmodule{ - Blockstore: bs, - CborStore: ipldCborStore, - }, nil -} diff --git a/internal/app/go-filecoin/internal/submodule/chain_submodule.go b/internal/app/go-filecoin/internal/submodule/chain_submodule.go deleted file mode 100644 index 73efd57bac..0000000000 --- a/internal/app/go-filecoin/internal/submodule/chain_submodule.go +++ /dev/null @@ -1,82 +0,0 @@ -package submodule - -import ( - "context" - - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cst" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/filecoin-project/go-filecoin/internal/pkg/slashing" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor/builtin" - "github.com/filecoin-project/go-filecoin/internal/pkg/vmsupport" -) - -// ChainSubmodule enhances the `Node` with chain capabilities. -type ChainSubmodule struct { - ChainReader *chain.Store - MessageStore *chain.MessageStore - State *cst.ChainStateReadWriter - - Sampler *chain.Sampler - ActorState *appstate.TipSetStateViewer - Processor *consensus.DefaultProcessor - - StatusReporter *chain.StatusReporter -} - -// xxx go back to using an interface here -/*type nodeChainReader interface { - GenesisCid() cid.Cid - GetHead() block.TipSetKey - GetTipSet(block.TipSetKey) (block.TipSet, error) - GetTipSetState(ctx context.Context, tsKey block.TipSetKey) (state.Tree, error) - GetTipSetStateRoot(tsKey block.TipSetKey) (cid.Cid, error) - GetTipSetReceiptsRoot(tsKey block.TipSetKey) (cid.Cid, error) - HeadEvents() *ps.PubSub - Load(context.Context) error - Stop() -} -*/ -type chainRepo interface { - ChainDatastore() repo.Datastore -} - -type chainConfig interface { - GenesisCid() cid.Cid -} - -// NewChainSubmodule creates a new chain submodule. -func NewChainSubmodule(config chainConfig, repo chainRepo, blockstore *BlockstoreSubmodule, verifier *ProofVerificationSubmodule) (ChainSubmodule, error) { - // initialize chain store - chainStatusReporter := chain.NewStatusReporter() - chainStore := chain.NewStore(repo.ChainDatastore(), blockstore.CborStore, chainStatusReporter, config.GenesisCid()) - - actorState := appstate.NewTipSetStateViewer(chainStore, blockstore.CborStore) - messageStore := chain.NewMessageStore(blockstore.Blockstore) - chainState := cst.NewChainStateReadWriter(chainStore, messageStore, blockstore.Blockstore, builtin.DefaultActors) - faultChecker := slashing.NewFaultChecker(chainState) - syscalls := vmsupport.NewSyscalls(faultChecker, verifier.ProofVerifier) - processor := consensus.NewDefaultProcessor(syscalls, chainState) - - return ChainSubmodule{ - ChainReader: chainStore, - MessageStore: messageStore, - ActorState: actorState, - State: chainState, - Processor: processor, - StatusReporter: chainStatusReporter, - }, nil -} - -type chainNode interface { - Chain() ChainSubmodule -} - -// Start loads the chain from disk. -func (c *ChainSubmodule) Start(ctx context.Context, node chainNode) error { - return node.Chain().ChainReader.Load(ctx) -} diff --git a/internal/app/go-filecoin/internal/submodule/discovery_submodule.go b/internal/app/go-filecoin/internal/submodule/discovery_submodule.go deleted file mode 100644 index df5f6a70d6..0000000000 --- a/internal/app/go-filecoin/internal/submodule/discovery_submodule.go +++ /dev/null @@ -1,109 +0,0 @@ -package submodule - -import ( - "context" - "time" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/discovery" - "github.com/filecoin-project/go-filecoin/internal/pkg/net" - "github.com/filecoin-project/go-filecoin/internal/pkg/util/moresync" - "github.com/ipfs/go-cid" - logging "github.com/ipfs/go-log/v2" - "github.com/pkg/errors" -) - -var log = logging.Logger("node") // nolint: deadcode - -// DiscoverySubmodule enhances the `Node` with peer discovery capabilities. -type DiscoverySubmodule struct { - Bootstrapper *discovery.Bootstrapper - BootstrapReady *moresync.Latch - - // PeerTracker maintains a list of peers. - PeerTracker *discovery.PeerTracker - - // HelloHandler handle peer connections for the "hello" protocol. - HelloHandler *discovery.HelloProtocolHandler -} - -type discoveryConfig interface { - GenesisCid() cid.Cid -} - -// NewDiscoverySubmodule creates a new discovery submodule. -func NewDiscoverySubmodule(ctx context.Context, config discoveryConfig, bsConfig *config.BootstrapConfig, network *NetworkSubmodule) (DiscoverySubmodule, error) { - periodStr := bsConfig.Period - period, err := time.ParseDuration(periodStr) - if err != nil { - return DiscoverySubmodule{}, errors.Wrapf(err, "couldn't parse bootstrap period %s", periodStr) - } - - // bootstrapper maintains connections to some subset of addresses - ba := bsConfig.Addresses - bpi, err := net.PeerAddrsToAddrInfo(ba) - if err != nil { - return DiscoverySubmodule{}, errors.Wrapf(err, "couldn't parse bootstrap addresses [%s]", ba) - } - - minPeerThreshold := bsConfig.MinPeerThreshold - - // create a bootstrapper - bootstrapper := discovery.NewBootstrapper(bpi, network.Host, network.Host.Network(), network.Router, minPeerThreshold, period) - - // set up peer tracking - peerTracker := discovery.NewPeerTracker(network.Host.ID()) - - return DiscoverySubmodule{ - Bootstrapper: bootstrapper, - BootstrapReady: moresync.NewLatch(uint(minPeerThreshold)), - PeerTracker: peerTracker, - HelloHandler: discovery.NewHelloProtocolHandler(network.Host, config.GenesisCid(), network.NetworkName), - }, nil -} - -type discoveryNode interface { - Network() NetworkSubmodule - Chain() ChainSubmodule - Syncer() SyncerSubmodule -} - -// Start starts the discovery submodule for a node. It blocks until bootstrap -// satisfies the configured security conditions. -func (m *DiscoverySubmodule) Start(node discoveryNode) error { - // Start bootstrapper. - m.Bootstrapper.Start(context.Background()) - - // Register peer tracker disconnect function with network. - m.PeerTracker.RegisterDisconnect(node.Network().Host.Network()) - - // Start up 'hello' handshake service - peerDiscoveredCallback := func(ci *block.ChainInfo) { - m.PeerTracker.Track(ci) - m.BootstrapReady.Done() - err := node.Syncer().ChainSyncManager.BlockProposer().SendHello(ci) - if err != nil { - log.Errorf("error receiving chain info from hello %s: %s", ci, err) - return - } - } - - // chain head callback - chainHeadCallback := func() (block.TipSet, error) { - return node.Chain().State.GetTipSet(node.Chain().State.Head()) - } - - // Register the "hello" protocol with the network - m.HelloHandler.Register(peerDiscoveredCallback, chainHeadCallback) - - // Wait for bootstrap to be sufficient connected - m.BootstrapReady.Wait() - - return nil -} - -// Stop stops the discovery submodule. -func (m *DiscoverySubmodule) Stop() { - m.Bootstrapper.Stop() -} diff --git a/internal/app/go-filecoin/internal/submodule/messaging_submodule.go b/internal/app/go-filecoin/internal/submodule/messaging_submodule.go deleted file mode 100644 index be70c9a9d0..0000000000 --- a/internal/app/go-filecoin/internal/submodule/messaging_submodule.go +++ /dev/null @@ -1,71 +0,0 @@ -package submodule - -import ( - "context" - - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/journal" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/net/msgsub" - "github.com/filecoin-project/go-filecoin/internal/pkg/net/pubsub" -) - -// MessagingSubmodule enhances the `Node` with internal messaging capabilities. -type MessagingSubmodule struct { - // Incoming messages for block mining. - Inbox *message.Inbox - - // Messages sent and not yet mined. - Outbox *message.Outbox - - // Network Fields - MessageTopic *pubsub.Topic - MessageSub pubsub.Subscription - - MsgPool *message.Pool - MsgSigVal *consensus.MessageSignatureValidator -} - -type messagingConfig interface { - Journal() journal.Journal -} - -type messagingRepo interface { - Config() *config.Config -} - -// NewMessagingSubmodule creates a new discovery submodule. -func NewMessagingSubmodule(ctx context.Context, config messagingConfig, repo messagingRepo, network *NetworkSubmodule, chain *ChainSubmodule, wallet *WalletSubmodule) (MessagingSubmodule, error) { - msgSyntaxValidator := consensus.NewMessageSyntaxValidator() - msgSignatureValidator := consensus.NewMessageSignatureValidator(chain.State) - msgPool := message.NewPool(repo.Config().Mpool, msgSyntaxValidator) - inbox := message.NewInbox(msgPool, message.InboxMaxAgeTipsets, chain.ChainReader, chain.MessageStore) - - // setup messaging topic. - // register block validation on pubsub - mtv := msgsub.NewMessageTopicValidator(msgSyntaxValidator, msgSignatureValidator) - if err := network.pubsub.RegisterTopicValidator(mtv.Topic(network.NetworkName), mtv.Validator(), mtv.Opts()...); err != nil { - return MessagingSubmodule{}, errors.Wrap(err, "failed to register message validator") - } - topic, err := network.pubsub.Join(msgsub.Topic(network.NetworkName)) - if err != nil { - return MessagingSubmodule{}, err - } - - msgQueue := message.NewQueue() - outboxPolicy := message.NewMessageQueuePolicy(chain.MessageStore, message.OutboxMaxAgeRounds) - msgPublisher := message.NewDefaultPublisher(pubsub.NewTopic(topic), msgPool) - outbox := message.NewOutbox(wallet.Signer, msgSyntaxValidator, msgQueue, msgPublisher, outboxPolicy, chain.ChainReader, chain.State, config.Journal().Topic("outbox")) - - return MessagingSubmodule{ - Inbox: inbox, - Outbox: outbox, - MessageTopic: pubsub.NewTopic(topic), - // MessageSub: nil, - MsgPool: msgPool, - MsgSigVal: msgSignatureValidator, - }, nil -} diff --git a/internal/app/go-filecoin/internal/submodule/network_submodule.go b/internal/app/go-filecoin/internal/submodule/network_submodule.go deleted file mode 100644 index d3c1d46d21..0000000000 --- a/internal/app/go-filecoin/internal/submodule/network_submodule.go +++ /dev/null @@ -1,216 +0,0 @@ -package submodule - -import ( - "context" - "time" - - "github.com/ipfs/go-bitswap" - bsnet "github.com/ipfs/go-bitswap/network" - "github.com/ipfs/go-cid" - ds "github.com/ipfs/go-datastore" - graphsync "github.com/ipfs/go-graphsync" - graphsyncimpl "github.com/ipfs/go-graphsync/impl" - gsnet "github.com/ipfs/go-graphsync/network" - gsstoreutil "github.com/ipfs/go-graphsync/storeutil" - exchange "github.com/ipfs/go-ipfs-exchange-interface" - offroute "github.com/ipfs/go-ipfs-routing/offline" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/libp2p/go-libp2p" - autonatsvc "github.com/libp2p/go-libp2p-autonat-svc" - circuit "github.com/libp2p/go-libp2p-circuit" - "github.com/libp2p/go-libp2p-core/host" - p2pmetrics "github.com/libp2p/go-libp2p-core/metrics" - "github.com/libp2p/go-libp2p-core/routing" - dht "github.com/libp2p/go-libp2p-kad-dht" - dhtopts "github.com/libp2p/go-libp2p-kad-dht/opts" - libp2pps "github.com/libp2p/go-libp2p-pubsub" - rhost "github.com/libp2p/go-libp2p/p2p/host/routed" - "github.com/libp2p/go-libp2p/p2p/protocol/ping" - ma "github.com/multiformats/go-multiaddr" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/discovery" - "github.com/filecoin-project/go-filecoin/internal/pkg/net" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" -) - -// NetworkSubmodule enhances the `Node` with networking capabilities. -type NetworkSubmodule struct { - NetworkName string - - Host host.Host - - // Router is a router from IPFS - Router routing.Routing - - pubsub *libp2pps.PubSub - - // TODO: split chain bitswap from storage bitswap (issue: ???) - Bitswap exchange.Interface - - Network *net.Network - - GraphExchange graphsync.GraphExchange -} - -type blankValidator struct{} - -func (blankValidator) Validate(_ string, _ []byte) error { return nil } -func (blankValidator) Select(_ string, _ [][]byte) (int, error) { return 0, nil } - -type networkConfig interface { - GenesisCid() cid.Cid - OfflineMode() bool - IsRelay() bool - Libp2pOpts() []libp2p.Option -} - -type networkRepo interface { - Config() *config.Config - Datastore() ds.Batching -} - -// NewNetworkSubmodule creates a new network submodule. -func NewNetworkSubmodule(ctx context.Context, config networkConfig, repo networkRepo, blockstore *BlockstoreSubmodule) (NetworkSubmodule, error) { - bandwidthTracker := p2pmetrics.NewBandwidthCounter() - libP2pOpts := append(config.Libp2pOpts(), libp2p.BandwidthReporter(bandwidthTracker)) - - networkName, err := retrieveNetworkName(ctx, config.GenesisCid(), blockstore.CborStore) - if err != nil { - return NetworkSubmodule{}, err - } - - // set up host - var peerHost host.Host - var router routing.Routing - validator := blankValidator{} - var pubsubMessageSigning bool - if !config.OfflineMode() { - makeDHT := func(h host.Host) (routing.Routing, error) { - r, err := dht.New( - ctx, - h, - dhtopts.Datastore(repo.Datastore()), - dhtopts.NamespacedValidator("v", validator), - dhtopts.Protocols(net.FilecoinDHT(networkName)), - ) - if err != nil { - return nil, errors.Wrap(err, "failed to setup routing") - } - router = r - return r, err - } - - var err error - peerHost, err = buildHost(ctx, config, libP2pOpts, repo, makeDHT) - if err != nil { - return NetworkSubmodule{}, err - } - // require message signing in online mode when we have priv key - pubsubMessageSigning = true - } else { - router = offroute.NewOfflineRouter(repo.Datastore(), validator) - peerHost = rhost.Wrap(noopLibP2PHost{}, router) - pubsubMessageSigning = false - } - - // Set up libp2p network - // The gossipsub heartbeat timeout needs to be set sufficiently low - // to enable publishing on first connection. The default of one - // second is not acceptable for tests. - libp2pps.GossipSubHeartbeatInterval = 100 * time.Millisecond - gsub, err := libp2pps.NewGossipSub(ctx, peerHost, libp2pps.WithMessageSigning(pubsubMessageSigning), libp2pps.WithDiscovery(&discovery.NoopDiscovery{})) - if err != nil { - return NetworkSubmodule{}, errors.Wrap(err, "failed to set up network") - } - - // set up bitswap - nwork := bsnet.NewFromIpfsHost(peerHost, router) - //nwork := bsnet.NewFromIpfsHost(innerHost, router) - bswap := bitswap.New(ctx, nwork, blockstore.Blockstore) - - // set up pinger - pingService := ping.NewPingService(peerHost) - - // set up graphsync - graphsyncNetwork := gsnet.NewFromLibp2pHost(peerHost) - loader := gsstoreutil.LoaderForBlockstore(blockstore.Blockstore) - storer := gsstoreutil.StorerForBlockstore(blockstore.Blockstore) - gsync := graphsyncimpl.New(ctx, graphsyncNetwork, loader, storer, graphsyncimpl.RejectAllRequestsByDefault()) - - // build network - network := net.New(peerHost, net.NewRouter(router), bandwidthTracker, net.NewPinger(peerHost, pingService)) - // build the network submdule - return NetworkSubmodule{ - NetworkName: networkName, - Host: peerHost, - Router: router, - pubsub: gsub, - Bitswap: bswap, - GraphExchange: gsync, - Network: network, - }, nil -} - -func retrieveNetworkName(ctx context.Context, genCid cid.Cid, cborStore cbor.IpldStore) (string, error) { - var genesis block.Block - err := cborStore.Get(ctx, genCid, &genesis) - if err != nil { - return "", errors.Wrapf(err, "failed to get block %s", genCid.String()) - } - - return appstate.NewView(cborStore, genesis.StateRoot.Cid).InitNetworkName(ctx) -} - -// buildHost determines if we are publically dialable. If so use public -// Address, if not configure node to announce relay address. -func buildHost(ctx context.Context, config networkConfig, libP2pOpts []libp2p.Option, repo networkRepo, makeDHT func(host host.Host) (routing.Routing, error)) (host.Host, error) { - // Node must build a host acting as a libp2p relay. Additionally it - // runs the autoNAT service which allows other nodes to check for their - // own dialability by having this node attempt to dial them. - makeDHTRightType := func(h host.Host) (routing.PeerRouting, error) { - return makeDHT(h) - } - - if config.IsRelay() { - cfg := repo.Config() - publicAddr, err := ma.NewMultiaddr(cfg.Swarm.PublicRelayAddress) - if err != nil { - return nil, err - } - publicAddrFactory := func(lc *libp2p.Config) error { - lc.AddrsFactory = func(addrs []ma.Multiaddr) []ma.Multiaddr { - if cfg.Swarm.PublicRelayAddress == "" { - return addrs - } - return append(addrs, publicAddr) - } - return nil - } - relayHost, err := libp2p.New( - ctx, - libp2p.EnableRelay(circuit.OptHop), - libp2p.EnableAutoRelay(), - libp2p.Routing(makeDHTRightType), - publicAddrFactory, - libp2p.ChainOptions(libP2pOpts...), - ) - if err != nil { - return nil, err - } - // Set up autoNATService as a streamhandler on the host. - _, err = autonatsvc.NewAutoNATService(ctx, relayHost) - if err != nil { - return nil, err - } - return relayHost, nil - } - return libp2p.New( - ctx, - libp2p.EnableAutoRelay(), - libp2p.Routing(makeDHTRightType), - libp2p.ChainOptions(libP2pOpts...), - ) -} diff --git a/internal/app/go-filecoin/internal/submodule/proof_verification_submodule.go b/internal/app/go-filecoin/internal/submodule/proof_verification_submodule.go deleted file mode 100644 index d675e4deef..0000000000 --- a/internal/app/go-filecoin/internal/submodule/proof_verification_submodule.go +++ /dev/null @@ -1,17 +0,0 @@ -package submodule - -import ( - "github.com/filecoin-project/sector-storage/ffiwrapper" -) - -// ProofVerificationSubmodule adds proof verification capabilities to the node. -type ProofVerificationSubmodule struct { - ProofVerifier ffiwrapper.Verifier -} - -// NewProofVerificationSubmodule creates a new proof verification submodule. -func NewProofVerificationSubmodule(verifier ffiwrapper.Verifier) ProofVerificationSubmodule { - return ProofVerificationSubmodule{ - ProofVerifier: verifier, - } -} diff --git a/internal/app/go-filecoin/internal/submodule/retrieval_protocol_submodule.go b/internal/app/go-filecoin/internal/submodule/retrieval_protocol_submodule.go deleted file mode 100644 index fa48ec534b..0000000000 --- a/internal/app/go-filecoin/internal/submodule/retrieval_protocol_submodule.go +++ /dev/null @@ -1,77 +0,0 @@ -package submodule - -import ( - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/piecestore" - iface "github.com/filecoin-project/go-fil-markets/retrievalmarket" - "github.com/filecoin-project/go-fil-markets/retrievalmarket/discovery" - impl "github.com/filecoin-project/go-fil-markets/retrievalmarket/impl" - "github.com/filecoin-project/go-fil-markets/retrievalmarket/network" - "github.com/filecoin-project/go-storedcounter" - "github.com/ipfs/go-datastore" - "github.com/ipfs/go-datastore/namespace" - blockstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/libp2p/go-libp2p-core/host" - - retmkt "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors/retrieval_market" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cst" - "github.com/filecoin-project/go-filecoin/internal/pkg/piecemanager" -) - -// RetrievalProviderDSPrefix is a prefix for all datastore keys related to the retrieval provider -const RetrievalProviderDSPrefix = "/retrievalmarket/provider" - -// RetrievalCounterDSKey is the datastore key for the stored counter used by the retrieval counter -const RetrievalCounterDSKey = "/retrievalmarket/client/counter" - -// RetrievalClientDSPrefix is a prefix for all datastore keys related to the retrieval clients -const RetrievalClientDSPrefix = "/retrievalmarket/client" - -// RetrievalProtocolSubmodule enhances the node with retrieval protocol -// capabilities. -type RetrievalProtocolSubmodule struct { - client iface.RetrievalClient - provider iface.RetrievalProvider -} - -// NewRetrievalProtocolSubmodule creates a new retrieval protocol submodule. -func NewRetrievalProtocolSubmodule( - bs blockstore.Blockstore, - ds datastore.Batching, - cr *cst.ChainStateReadWriter, - host host.Host, - providerAddr address.Address, - signer retmkt.RetrievalSigner, - pchMgrAPI retmkt.PaychMgrAPI, - pieceManager piecemanager.PieceManager, -) (*RetrievalProtocolSubmodule, error) { - - retrievalDealPieceStore := piecestore.NewPieceStore(namespace.Wrap(ds, datastore.NewKey(PieceStoreDSPrefix))) - - netwk := network.NewFromLibp2pHost(host) - pnode := retmkt.NewRetrievalProviderConnector(netwk, pieceManager, bs, pchMgrAPI, nil) - - marketProvider, err := impl.NewProvider(providerAddr, pnode, netwk, retrievalDealPieceStore, bs, namespace.Wrap(ds, datastore.NewKey(RetrievalProviderDSPrefix))) - if err != nil { - return nil, err - } - - cnode := retmkt.NewRetrievalClientConnector(bs, cr, signer, pchMgrAPI) - counter := storedcounter.New(ds, datastore.NewKey(RetrievalCounterDSKey)) - - resolver := discovery.Multi(discovery.NewLocal(namespace.Wrap(ds, datastore.NewKey(DiscoveryDSPrefix)))) - marketClient, err := impl.NewClient(netwk, bs, cnode, resolver, namespace.Wrap(ds, datastore.NewKey(RetrievalClientDSPrefix)), counter) - if err != nil { - return nil, err - } - - return &RetrievalProtocolSubmodule{marketClient, marketProvider}, nil -} - -func (rps *RetrievalProtocolSubmodule) Client() iface.RetrievalClient { - return rps.client -} - -func (rps *RetrievalProtocolSubmodule) Provider() iface.RetrievalProvider { - return rps.provider -} diff --git a/internal/app/go-filecoin/internal/submodule/storage_mining_submodule.go b/internal/app/go-filecoin/internal/submodule/storage_mining_submodule.go deleted file mode 100644 index 6c701d705e..0000000000 --- a/internal/app/go-filecoin/internal/submodule/storage_mining_submodule.go +++ /dev/null @@ -1,188 +0,0 @@ -package submodule - -import ( - "context" - "sync" - - "github.com/filecoin-project/go-address" - sectorstorage "github.com/filecoin-project/sector-storage" - "github.com/filecoin-project/sector-storage/ffiwrapper" - "github.com/filecoin-project/sector-storage/stores" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - fsm "github.com/filecoin-project/storage-fsm" - "github.com/ipfs/go-datastore" - - fsmchain "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors/fsm_chain" - fsmeventsconnector "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors/fsm_events" - fsmnodeconnector "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors/fsm_node" - fsmstorage "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors/fsm_storage" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors/sectors" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsampler" - "github.com/filecoin-project/go-filecoin/internal/pkg/piecemanager" - "github.com/filecoin-project/go-filecoin/internal/pkg/poster" - "github.com/filecoin-project/go-filecoin/internal/pkg/postgenerator" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" -) - -// StorageMiningSubmodule enhances the `Node` with storage mining capabilities. -type StorageMiningSubmodule struct { - started bool - startedLk sync.RWMutex - - // StorageMining is used by the miner to fill and seal sectors. - PieceManager piecemanager.PieceManager - - // PoStGenerator generates election PoSts - PoStGenerator postgenerator.PoStGenerator - - hs *chainsampler.HeightThresholdScheduler - fsm *fsm.Sealing - poster *poster.Poster -} - -// NewStorageMiningSubmodule creates a new storage mining submodule. -func NewStorageMiningSubmodule( - minerAddr address.Address, - ds datastore.Batching, - c *ChainSubmodule, - m *MessagingSubmodule, - mw *msg.Waiter, - stateViewer *appstate.Viewer, - sealProofType abi.RegisteredProof, - r repo.Repo, - postGeneratorOverride postgenerator.PoStGenerator, -) (*StorageMiningSubmodule, error) { - chainThresholdScheduler := chainsampler.NewHeightThresholdScheduler(c.ChainReader) - - ccn := fsmchain.NewChainConnector(c.ChainReader) - - sdx := stores.NewIndex() - - fcg := ffiwrapper.Config{ - SealProofType: sealProofType, - } - - scg := sectorstorage.SealerConfig{AllowPreCommit1: true, AllowPreCommit2: true, AllowCommit: true} - - mgr, err := sectorstorage.New(context.TODO(), fsmstorage.NewRepoStorageConnector(r), sdx, &fcg, scg, []string{}, nil) - if err != nil { - return nil, err - } - - sid := sectors.NewPersistedSectorNumberCounter(ds) - - // FSM requires id address to work correctly. Resolve it now and hope it's stable - // - minerAddrID, err := resolveMinerAddress(context.TODO(), c, minerAddr, stateViewer) - if err != nil { - return nil, err - } - - ncn := fsmnodeconnector.New(minerAddrID, mw, c.ChainReader, c.ActorState, m.Outbox, c.State) - - ppStart, err := getMinerProvingPeriod(c, minerAddr, stateViewer) - if err != nil { - return nil, err - } - - pcp := fsm.NewBasicPreCommitPolicy(&ccn, abi.ChainEpoch(2*60*24), ppStart%miner.WPoStProvingPeriod) - - fsmConnector := fsmeventsconnector.New(chainThresholdScheduler, c.State) - fsm := fsm.New(ncn, fsmConnector, minerAddrID, ds, mgr, sid, ffiwrapper.ProofVerifier, &pcp) - - bke := piecemanager.NewFiniteStateMachineBackEnd(fsm, sid) - - modu := &StorageMiningSubmodule{ - PieceManager: &bke, - hs: chainThresholdScheduler, - fsm: fsm, - poster: poster.NewPoster(minerAddr, m.Outbox, mgr, c.State, stateViewer, mw), - } - - // allow the caller to provide a thing which generates fake PoSts - if postGeneratorOverride == nil { - modu.PoStGenerator = mgr.Prover - } else { - modu.PoStGenerator = postGeneratorOverride - } - - return modu, nil -} - -// Start starts the StorageMiningSubmodule -func (s *StorageMiningSubmodule) Start(ctx context.Context) error { - s.startedLk.Lock() - defer s.startedLk.Unlock() - - if s.started { - return nil - } - - err := s.fsm.Run(ctx) - if err != nil { - return err - } - - s.started = true - return nil -} - -// Stop stops the StorageMiningSubmodule -func (s *StorageMiningSubmodule) Stop(ctx context.Context) error { - s.startedLk.Lock() - defer s.startedLk.Unlock() - - if !s.started { - return nil - } - - err := s.fsm.Stop(ctx) - if err != nil { - return err - } - - s.poster.StopPoSting() - s.started = false - return nil -} - -// HandleNewHead submits a new chain head for possible fallback PoSt. -func (s *StorageMiningSubmodule) HandleNewHead(ctx context.Context, newHead block.TipSet) error { - s.startedLk.RLock() - defer s.startedLk.RUnlock() - - if !s.started { - return nil - } - - err := s.hs.HandleNewTipSet(ctx, newHead) - if err != nil { - return err - } - - return s.poster.HandleNewHead(ctx, newHead) -} - -func getMinerProvingPeriod(c *ChainSubmodule, minerAddr address.Address, viewer *appstate.Viewer) (abi.ChainEpoch, error) { - tsk := c.ChainReader.GetHead() - root, err := c.ChainReader.GetTipSetStateRoot(tsk) - if err != nil { - return 0, err - } - view := viewer.StateView(root) - return view.MinerProvingPeriodStart(context.Background(), minerAddr) -} - -func resolveMinerAddress(ctx context.Context, c *ChainSubmodule, minerAddr address.Address, viewer *appstate.Viewer) (address.Address, error) { - tsk := c.ChainReader.GetHead() - root, err := c.ChainReader.GetTipSetStateRoot(tsk) - if err != nil { - return address.Undef, err - } - view := viewer.StateView(root) - return view.InitResolveAddress(ctx, minerAddr) -} diff --git a/internal/app/go-filecoin/internal/submodule/storage_networking_submodule.go b/internal/app/go-filecoin/internal/submodule/storage_networking_submodule.go deleted file mode 100644 index 438d5957bf..0000000000 --- a/internal/app/go-filecoin/internal/submodule/storage_networking_submodule.go +++ /dev/null @@ -1,20 +0,0 @@ -package submodule - -import ( - "context" - - exchange "github.com/ipfs/go-ipfs-exchange-interface" -) - -// StorageNetworkingSubmodule enhances the `Node` with data transfer capabilities. -type StorageNetworkingSubmodule struct { - // Exchange is the interface for fetching data from other nodes. - Exchange exchange.Interface -} - -// NewStorgeNetworkingSubmodule creates a new storage networking submodule. -func NewStorgeNetworkingSubmodule(ctx context.Context, network *NetworkSubmodule) (StorageNetworkingSubmodule, error) { - return StorageNetworkingSubmodule{ - Exchange: network.Bitswap, - }, nil -} diff --git a/internal/app/go-filecoin/internal/submodule/storage_protocol_submodule.go b/internal/app/go-filecoin/internal/submodule/storage_protocol_submodule.go deleted file mode 100644 index c2aa86c1a9..0000000000 --- a/internal/app/go-filecoin/internal/submodule/storage_protocol_submodule.go +++ /dev/null @@ -1,171 +0,0 @@ -package submodule - -import ( - "context" - "os" - - "github.com/filecoin-project/go-statestore" - "github.com/filecoin-project/go-storedcounter" - - "github.com/filecoin-project/go-address" - datatransfer "github.com/filecoin-project/go-data-transfer" - graphsyncimpl "github.com/filecoin-project/go-data-transfer/impl/graphsync" - "github.com/filecoin-project/go-fil-markets/filestore" - "github.com/filecoin-project/go-fil-markets/piecestore" - "github.com/filecoin-project/go-fil-markets/retrievalmarket/discovery" - iface "github.com/filecoin-project/go-fil-markets/storagemarket" - impl "github.com/filecoin-project/go-fil-markets/storagemarket/impl" - smvalid "github.com/filecoin-project/go-fil-markets/storagemarket/impl/requestvalidation" - "github.com/filecoin-project/go-fil-markets/storagemarket/impl/storedask" - smnetwork "github.com/filecoin-project/go-fil-markets/storagemarket/network" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-datastore" - "github.com/ipfs/go-datastore/namespace" - "github.com/ipfs/go-graphsync" - blockstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/libp2p/go-libp2p-core/host" - "github.com/pkg/errors" - - storagemarketconnector "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors/storage_market" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paths" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/piecemanager" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// DiscoveryDSPrefix is a prefix for all datastore keys used by the local -const DiscoveryDSPrefix = "/deals/local" - -// ClientDSPrefix is a prefix for all datastore keys used by a storage client -const ClientDSPrefix = "/deals/client" - -// ProviderDSPrefix is a prefix for all datastore keys used by the storage provider -const ProviderDSPrefix = "/deals/provider" - -// DTCounterDSKey is the datastore key for the stored counter used by data transfer -const DTCounterDSKey = "/datatransfer/counter" - -// PieceStoreDSPrefix is a prefix for all datastore keys used by the piecestore -const PieceStoreDSPrefix = "/piecestore" - -// AskDSKey is the datastore key for the stored ask used by the storage provider -const AskDSKey = "/deals/latest-ask" - -// StorageProtocolSubmodule enhances the node with storage protocol -// capabilities. -type StorageProtocolSubmodule struct { - StorageClient iface.StorageClient - StorageProvider iface.StorageProvider - dataTransfer datatransfer.Manager - requestValidator *smvalid.UnifiedRequestValidator - pieceManager piecemanager.PieceManager -} - -// NewStorageProtocolSubmodule creates a new storage protocol submodule. -func NewStorageProtocolSubmodule( - ctx context.Context, - clientAddr storagemarketconnector.ClientAddressGetter, - c *ChainSubmodule, - m *MessagingSubmodule, - mw *msg.Waiter, - s types.Signer, - h host.Host, - ds datastore.Batching, - bs blockstore.Blockstore, - gsync graphsync.GraphExchange, - stateViewer *appstate.Viewer, -) (*StorageProtocolSubmodule, error) { - cnode := storagemarketconnector.NewStorageClientNodeConnector(cborutil.NewIpldStore(bs), c.State, mw, s, m.Outbox, clientAddr, stateViewer) - dtStoredCounter := storedcounter.New(ds, datastore.NewKey(DTCounterDSKey)) - dt := graphsyncimpl.NewGraphSyncDataTransfer(h, gsync, dtStoredCounter) - clientDs := namespace.Wrap(ds, datastore.NewKey(ClientDSPrefix)) - validator := smvalid.NewUnifiedRequestValidator(nil, statestore.New(clientDs)) - err := dt.RegisterVoucherType(&smvalid.StorageDataTransferVoucher{}, validator) - if err != nil { - return nil, err - } - - local := discovery.NewLocal(namespace.Wrap(ds, datastore.NewKey(DiscoveryDSPrefix))) - client, err := impl.NewClient(smnetwork.NewFromLibp2pHost(h), bs, dt, local, clientDs, cnode) - if err != nil { - return nil, errors.Wrap(err, "error creating storage client") - } - - sm := &StorageProtocolSubmodule{ - StorageClient: client, - dataTransfer: dt, - requestValidator: validator, - } - sm.StorageClient.SubscribeToEvents(cnode.EventLogger) - return sm, nil -} - -func (sm *StorageProtocolSubmodule) AddStorageProvider( - ctx context.Context, - minerAddr address.Address, - c *ChainSubmodule, - m *MessagingSubmodule, - mw *msg.Waiter, - pm piecemanager.PieceManager, - s types.Signer, - h host.Host, - ds datastore.Batching, - bs blockstore.Blockstore, - gsync graphsync.GraphExchange, - repoPath string, - sealProofType abi.RegisteredProof, - stateViewer *appstate.Viewer, -) error { - sm.pieceManager = pm - - pnode := storagemarketconnector.NewStorageProviderNodeConnector(minerAddr, c.State, m.Outbox, mw, pm, s, stateViewer) - - pieceStagingPath, err := paths.PieceStagingDir(repoPath) - if err != nil { - return err - } - - // ensure pieces directory exists - err = os.MkdirAll(pieceStagingPath, 0700) - if err != nil { - return err - } - - fs, err := filestore.NewLocalFileStore(filestore.OsPath(pieceStagingPath)) - if err != nil { - return err - } - - providerDs := namespace.Wrap(ds, datastore.NewKey(ProviderDSPrefix)) - sm.requestValidator.SetPushDeals(statestore.New(providerDs)) - ps := piecestore.NewPieceStore(namespace.Wrap(ds, datastore.NewKey(PieceStoreDSPrefix))) - storedAsk, err := storedask.NewStoredAsk(ds, datastore.NewKey(AskDSKey), pnode, minerAddr) - if err != nil { - return err - } - sm.StorageProvider, err = impl.NewProvider(smnetwork.NewFromLibp2pHost(h), providerDs, bs, fs, ps, sm.dataTransfer, pnode, minerAddr, sealProofType, storedAsk) - if err == nil { - sm.StorageProvider.SubscribeToEvents(pnode.EventLogger) - } - return err -} - -func (sm *StorageProtocolSubmodule) Provider() (iface.StorageProvider, error) { - if sm.StorageProvider == nil { - return nil, errors.New("Mining has not been started so storage provider is not available") - } - return sm.StorageProvider, nil -} - -func (sm *StorageProtocolSubmodule) Client() iface.StorageClient { - return sm.StorageClient -} - -func (sm *StorageProtocolSubmodule) PieceManager() (piecemanager.PieceManager, error) { - if sm.StorageProvider == nil { - return nil, errors.New("Mining has not been started so piece manager is not available") - } - return sm.pieceManager, nil -} diff --git a/internal/app/go-filecoin/internal/submodule/syncer_submodule.go b/internal/app/go-filecoin/internal/submodule/syncer_submodule.go deleted file mode 100644 index 7db886e006..0000000000 --- a/internal/app/go-filecoin/internal/submodule/syncer_submodule.go +++ /dev/null @@ -1,141 +0,0 @@ -package submodule - -import ( - "context" - "time" - - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-graphsync" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/fetcher" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/net/blocksub" - "github.com/filecoin-project/go-filecoin/internal/pkg/net/pubsub" - "github.com/filecoin-project/go-filecoin/internal/pkg/slashing" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" -) - -// SyncerSubmodule enhances the node with chain syncing capabilities -type SyncerSubmodule struct { - BlockTopic *pubsub.Topic - BlockSub pubsub.Subscription - ChainSelector nodeChainSelector - Consensus consensus.Protocol - FaultDetector slashing.ConsensusFaultDetector - ChainSyncManager *chainsync.Manager - Drand drand.IFace - - // cancelChainSync cancels the context for chain sync subscriptions and handlers. - CancelChainSync context.CancelFunc - // faultCh receives detected consensus faults - faultCh chan slashing.ConsensusFault -} - -type syncerConfig interface { - GenesisCid() cid.Cid - BlockTime() time.Duration - ChainClock() clock.ChainEpochClock - Drand() drand.IFace -} - -type nodeChainSelector interface { - Weight(context.Context, block.TipSet, cid.Cid) (fbig.Int, error) - IsHeavier(ctx context.Context, a, b block.TipSet, aStateID, bStateID cid.Cid) (bool, error) -} - -// NewSyncerSubmodule creates a new chain submodule. -func NewSyncerSubmodule(ctx context.Context, config syncerConfig, blockstore *BlockstoreSubmodule, network *NetworkSubmodule, - discovery *DiscoverySubmodule, chn *ChainSubmodule, postVerifier consensus.EPoStVerifier) (SyncerSubmodule, error) { - // setup validation - blkValid := consensus.NewDefaultBlockValidator(config.ChainClock(), chn.MessageStore, chn.State) - msgValid := consensus.NewMessageSyntaxValidator() - syntax := consensus.WrappedSyntaxValidator{ - BlockSyntaxValidator: blkValid, - MessageSyntaxValidator: msgValid, - } - - // register block validation on pubsub - btv := blocksub.NewBlockTopicValidator(blkValid) - if err := network.pubsub.RegisterTopicValidator(btv.Topic(network.NetworkName), btv.Validator(), btv.Opts()...); err != nil { - return SyncerSubmodule{}, errors.Wrap(err, "failed to register block validator") - } - - // setup topic. - topic, err := network.pubsub.Join(blocksub.Topic(network.NetworkName)) - if err != nil { - return SyncerSubmodule{}, err - } - - genBlk, err := chn.ChainReader.GetGenesisBlock(ctx) - if err != nil { - return SyncerSubmodule{}, errors.Wrap(err, "failed to locate genesis block during node build") - } - - // setup default drand - d := config.Drand() - - // set up consensus - elections := consensus.NewElectionMachine(chn.State) - sampler := chain.NewSampler(chn.ChainReader, genBlk.Ticket) - tickets := consensus.NewTicketMachine(sampler) - stateViewer := consensus.AsDefaultStateViewer(state.NewViewer(blockstore.CborStore)) - nodeConsensus := consensus.NewExpected(blockstore.CborStore, blockstore.Blockstore, chn.Processor, &stateViewer, - config.BlockTime(), elections, tickets, postVerifier, chn.ChainReader, config.ChainClock(), d) - nodeChainSelector := consensus.NewChainSelector(blockstore.CborStore, &stateViewer, config.GenesisCid()) - - // setup fecher - network.GraphExchange.RegisterIncomingRequestHook(func(p peer.ID, requestData graphsync.RequestData, hookActions graphsync.IncomingRequestHookActions) { - _, has := requestData.Extension(fetcher.ChainsyncProtocolExtension) - if has { - // TODO: Don't just validate every request with the extension -- support only known selectors - // TODO: use separate block store for the chain (supported in GraphSync) - hookActions.ValidateRequest() - } - }) - fetcher := fetcher.NewGraphSyncFetcher(ctx, network.GraphExchange, blockstore.Blockstore, syntax, config.ChainClock(), discovery.PeerTracker) - faultCh := make(chan slashing.ConsensusFault) - faultDetector := slashing.NewConsensusFaultDetector(faultCh) - - chainSyncManager, err := chainsync.NewManager(nodeConsensus, blkValid, nodeChainSelector, chn.ChainReader, chn.MessageStore, fetcher, config.ChainClock(), faultDetector) - if err != nil { - return SyncerSubmodule{}, err - } - - return SyncerSubmodule{ - BlockTopic: pubsub.NewTopic(topic), - // BlockSub: nil, - Consensus: nodeConsensus, - ChainSelector: nodeChainSelector, - ChainSyncManager: &chainSyncManager, - Drand: d, - // cancelChainSync: nil, - faultCh: faultCh, - }, nil -} - -type syncerNode interface { -} - -// Start starts the syncer submodule for a node. -func (s *SyncerSubmodule) Start(ctx context.Context, _node syncerNode) error { - go func() { - for { - select { - case <-ctx.Done(): - return - case <-s.faultCh: - // TODO #3690 connect this up to a slasher that sends messages - // to outbound queue to carry out penalization - } - } - }() - return s.ChainSyncManager.Start(ctx) -} diff --git a/internal/app/go-filecoin/internal/submodule/wallet_submodule.go b/internal/app/go-filecoin/internal/submodule/wallet_submodule.go deleted file mode 100644 index 5651089101..0000000000 --- a/internal/app/go-filecoin/internal/submodule/wallet_submodule.go +++ /dev/null @@ -1,35 +0,0 @@ -package submodule - -import ( - "context" - - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/wallet" - "github.com/pkg/errors" -) - -// WalletSubmodule enhances the `Node` with a "Wallet" and FIL transfer capabilities. -type WalletSubmodule struct { - Wallet *wallet.Wallet - Signer types.Signer -} - -type walletRepo interface { - WalletDatastore() repo.Datastore -} - -// NewWalletSubmodule creates a new storage protocol submodule. -func NewWalletSubmodule(ctx context.Context, repo walletRepo, chain *ChainSubmodule) (WalletSubmodule, error) { - backend, err := wallet.NewDSBackend(repo.WalletDatastore()) - if err != nil { - return WalletSubmodule{}, errors.Wrap(err, "failed to set up wallet backend") - } - fcWallet := wallet.New(backend) - - return WalletSubmodule{ - Wallet: fcWallet, - Signer: state.NewSigner(chain.ActorState, chain.ChainReader, fcWallet), - }, nil -} diff --git a/internal/app/go-filecoin/node/block.go b/internal/app/go-filecoin/node/block.go deleted file mode 100644 index fe9a23f8aa..0000000000 --- a/internal/app/go-filecoin/node/block.go +++ /dev/null @@ -1,85 +0,0 @@ -package node - -import ( - "context" - - "github.com/pkg/errors" - "go.opencensus.io/trace" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics/tracing" - "github.com/filecoin-project/go-filecoin/internal/pkg/mining" - "github.com/filecoin-project/go-filecoin/internal/pkg/net/blocksub" - "github.com/filecoin-project/go-filecoin/internal/pkg/net/pubsub" -) - -// AddNewBlock receives a newly mined block and stores, validates and propagates it to the network. -func (node *Node) AddNewBlock(ctx context.Context, o mining.FullBlock) (err error) { - b := o.Header - ctx, span := trace.StartSpan(ctx, "Node.AddNewBlock") - span.AddAttributes(trace.StringAttribute("block", b.Cid().String())) - defer tracing.AddErrorEndSpan(ctx, span, &err) - - // Put block in storage wired to an exchange so this node and other - // nodes can fetch it. - log.Debugf("putting block in bitswap exchange: %s", b.Cid().String()) - blkCid, err := node.Blockstore.CborStore.Put(ctx, b) - if err != nil { - return errors.Wrap(err, "could not add new block to online storage") - } - - // Publish blocksub message - log.Debugf("publishing new block: %s", b.Cid().String()) - go func() { - payload, err := blocksub.MakePayload(o.Header, o.BLSMessages, o.SECPMessages) - if err != nil { - log.Errorf("failed to create blocksub payload: %s", err) - } - err = node.syncer.BlockTopic.Publish(ctx, payload) - if err != nil { - log.Errorf("failed to publish on blocksub: %s", err) - } - }() - - log.Debugf("syncing new block: %s", b.Cid().String()) - ci := block.NewChainInfo(node.Host().ID(), node.Host().ID(), block.NewTipSetKey(blkCid), b.Height) - return node.syncer.ChainSyncManager.BlockProposer().SendOwnBlock(ci) -} - -func (node *Node) handleBlockSub(ctx context.Context, msg pubsub.Message) (err error) { - sender := msg.GetSender() - source := msg.GetSource() - // ignore messages from self - if sender == node.Host().ID() || source == node.Host().ID() { - return nil - } - - ctx, span := trace.StartSpan(ctx, "Node.handleBlockSub") - defer tracing.AddErrorEndSpan(ctx, span, &err) - - var payload blocksub.Payload - err = encoding.Decode(msg.GetData(), &payload) - if err != nil { - return errors.Wrapf(err, "failed to decode blocksub payload from source: %s, sender: %s", source, sender) - } - - header := &payload.Header - span.AddAttributes(trace.StringAttribute("block", header.Cid().String())) - log.Infof("Received new block %s from peer %s", header.Cid(), sender) - log.Debugf("Received new block sender: %s source: %s, %s", sender, source, header) - - // The block we went to all that effort decoding is dropped on the floor! - // Don't be too quick to change that, though: the syncer re-fetching the block - // is currently critical to reliable validation. - // See https://github.com/filecoin-project/go-filecoin/issues/2962 - // TODO Implement principled trusting of ChainInfo's - // to address in #2674 - chainInfo := block.NewChainInfo(source, sender, block.NewTipSetKey(header.Cid()), header.Height) - err = node.syncer.ChainSyncManager.BlockProposer().SendGossipBlock(chainInfo) - if err != nil { - return errors.Wrapf(err, "failed to notify syncer of new block, block: %s", header.Cid()) - } - - return nil -} diff --git a/internal/app/go-filecoin/node/block_propagate_test.go b/internal/app/go-filecoin/node/block_propagate_test.go deleted file mode 100644 index b0881e9e40..0000000000 --- a/internal/app/go-filecoin/node/block_propagate_test.go +++ /dev/null @@ -1,250 +0,0 @@ -package node_test - -import ( - "context" - "fmt" - "testing" - "time" - - "github.com/filecoin-project/go-address" - specsbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/util/adt" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - . "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/proofs" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/version" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" -) - -func TestBlockPropsManyNodes(t *testing.T) { - tf.IntegrationTest(t) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - numNodes := 4 - _, nodes, fakeClock, blockTime := makeNodesBlockPropTests(t, numNodes) - - StartNodes(t, nodes) - defer StopNodes(nodes) - - minerNode := nodes[0] - - ConnectNodes(t, minerNode, nodes[1]) - ConnectNodes(t, nodes[1], nodes[2]) - ConnectNodes(t, nodes[2], nodes[3]) - - // Advance node's time so that it is epoch 1 - fakeClock.Advance(blockTime) - nextBlk, err := minerNode.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - // Wait for network connection notifications to propagate - time.Sleep(time.Millisecond * 100) - - equal := false - for i := 0; i < 30; i++ { - for j := 1; j < numNodes; j++ { - otherHead := nodes[j].PorcelainAPI.ChainHeadKey() - assert.NotNil(t, otherHead) - equal = otherHead.ToSlice()[0].Equals(nextBlk.Cid()) - if equal { - break - } - time.Sleep(time.Millisecond * 20) - } - } - - assert.True(t, equal, "failed to sync chains") -} - -func TestChainSyncA(t *testing.T) { - tf.IntegrationTest(t) - - ctx := context.Background() - _, nodes, fakeClock, blockTime := makeNodesBlockPropTests(t, 2) - - StartNodes(t, nodes) - defer StopNodes(nodes) - - ConnectNodes(t, nodes[0], nodes[1]) - - fakeClock.Advance(blockTime) - _, err := nodes[0].BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - fakeClock.Advance(blockTime) - _, err = nodes[0].BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - fakeClock.Advance(blockTime) - thirdBlock, err := nodes[0].BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - equal := false - for i := 0; i < 30; i++ { - otherHead := nodes[1].PorcelainAPI.ChainHeadKey() - assert.NotNil(t, otherHead) - equal = otherHead.ToSlice()[0].Equals(thirdBlock.Cid()) - if equal { - break - } - time.Sleep(time.Millisecond * 50) - } - - assert.True(t, equal, "failed to sync chains") -} - -func TestChainSyncWithMessages(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - - /* setup */ - // genesis has two accounts - genCfg := &gengen.GenesisCfg{} - require.NoError(t, gengen.MinerConfigs(MakeTestGenCfg(t, 1).Miners)(genCfg)) - require.NoError(t, gengen.GenKeys(3, "1000000")(genCfg)) - require.NoError(t, gengen.NetworkName(version.TEST)(genCfg)) - cs := MakeChainSeed(t, genCfg) - genUnixSeconds := int64(1234567890) - genTime := time.Unix(genUnixSeconds, 0) - fakeClock := clock.NewFake(genTime) - blockTime := 30 * time.Second - propDelay := 6 * time.Second - c := clock.NewChainClockFromClock(uint64(genUnixSeconds), blockTime, propDelay, fakeClock) - - // first node is the message sender. - builder1 := test.NewNodeBuilder(t). - WithBuilderOpt(ChainClockConfigOption(c)). - WithGenesisInit(cs.GenesisInitFunc). - WithBuilderOpt(VerifierConfigOption(&proofs.FakeVerifier{})). - WithBuilderOpt(MonkeyPatchSetProofTypeOption(constants.DevRegisteredSealProof)). - WithBuilderOpt(DrandConfigOption(drand.NewFake(genTime))) - nodeSend := builder1.Build(ctx) - senderAddress := cs.GiveKey(t, nodeSend, 1) - - // second node is receiver - builder2 := test.NewNodeBuilder(t). - WithBuilderOpt(ChainClockConfigOption(c)). - WithGenesisInit(cs.GenesisInitFunc). - WithBuilderOpt(VerifierConfigOption(&proofs.FakeVerifier{})). - WithBuilderOpt(MonkeyPatchSetProofTypeOption(constants.DevRegisteredSealProof)). - WithBuilderOpt(DrandConfigOption(drand.NewFake(genTime))) - nodeReceive := builder2.Build(ctx) - receiverAddress := cs.GiveKey(t, nodeReceive, 2) - - // third node is miner - builder3 := test.NewNodeBuilder(t). - WithBuilderOpt(ChainClockConfigOption(c)). - WithGenesisInit(cs.GenesisInitFunc). - WithBuilderOpt(VerifierConfigOption(&proofs.FakeVerifier{})). - WithBuilderOpt(MonkeyPatchSetProofTypeOption(constants.DevRegisteredSealProof)). - WithBuilderOpt(PoStGeneratorOption(&consensus.TestElectionPoster{})). - WithBuilderOpt(DrandConfigOption(drand.NewFake(genTime))) - nodeMine := builder3.Build(ctx) - cs.GiveKey(t, nodeMine, 0) - cs.GiveMiner(t, nodeMine, 0) - - StartNodes(t, []*Node{nodeSend, nodeReceive, nodeMine}) - ConnectNodes(t, nodeSend, nodeMine) - ConnectNodes(t, nodeMine, nodeSend) - ConnectNodes(t, nodeMine, nodeReceive) - ConnectNodes(t, nodeReceive, nodeMine) - - /* collect initial balance values */ - senderStart, err := nodeSend.PorcelainAPI.WalletBalance(ctx, senderAddress) - require.NoError(t, err) - receiverStart, err := nodeReceive.PorcelainAPI.WalletBalance(ctx, receiverAddress) - require.NoError(t, err) - gasPrice := types.NewGasPrice(1) - expGasCost := gas.NewGas(242).ToTokens(gasPrice) // DRAGONS -- this is brittle need a better way to predict this. - - /* send message from SendNode */ - sendVal := specsbig.NewInt(100) - _, _, err = nodeSend.PorcelainAPI.MessageSend( - ctx, - senderAddress, - receiverAddress, - sendVal, - gasPrice, - gas.NewGas(1000), - builtin.MethodSend, - adt.Empty, - ) - require.NoError(t, err) - smsgs, err := nodeMine.PorcelainAPI.MessagePoolWait(ctx, 1) - require.NoError(t, err) - require.Equal(t, 1, len(smsgs)) - uCid, err := smsgs[0].Message.Cid() // Message waiter needs unsigned cid for bls - require.NoError(t, err) - - /* mine block with message */ - fakeClock.Advance(blockTime) - fmt.Printf("about to mining once\n") - _, err = nodeMine.BlockMining.BlockMiningAPI.MiningOnce(ctx) - require.NoError(t, err) - fmt.Printf("finished mining once\n") - /* verify new state */ - _, err = nodeReceive.PorcelainAPI.MessageWaitDone(ctx, uCid) - require.NoError(t, err) - _, err = nodeSend.PorcelainAPI.MessageWaitDone(ctx, uCid) - require.NoError(t, err) - - senderEnd, err := nodeSend.PorcelainAPI.WalletBalance(ctx, senderAddress) - require.NoError(t, err) - receiverEnd, err := nodeReceive.PorcelainAPI.WalletBalance(ctx, receiverAddress) - require.NoError(t, err) - - assert.Equal(t, senderStart, specsbig.Add(specsbig.Add(senderEnd, sendVal), expGasCost)) - assert.Equal(t, receiverEnd, specsbig.Add(receiverStart, sendVal)) -} - -// makeNodes makes at least two nodes, a miner and a client; numNodes is the total wanted -func makeNodesBlockPropTests(t *testing.T, numNodes int) (address.Address, []*Node, clock.Fake, time.Duration) { - seed := MakeChainSeed(t, MakeTestGenCfg(t, 3)) - ctx := context.Background() - genUnixSeconds := int64(1234567890) - genTime := time.Unix(genUnixSeconds, 0) - fc := clock.NewFake(genTime) - blockTime := 30 * time.Second - propDelay := 6 * time.Second - c := clock.NewChainClockFromClock(1234567890, blockTime, propDelay, fc) - - builder := test.NewNodeBuilder(t). - WithGenesisInit(seed.GenesisInitFunc). - WithBuilderOpt(ChainClockConfigOption(c)). - WithBuilderOpt(VerifierConfigOption(&proofs.FakeVerifier{})). - WithBuilderOpt(PoStGeneratorOption(&consensus.TestElectionPoster{})). - WithBuilderOpt(MonkeyPatchSetProofTypeOption(constants.DevRegisteredSealProof)). - WithBuilderOpt(DrandConfigOption(drand.NewFake(genTime))). - WithInitOpt(PeerKeyOpt(PeerKeys[0])) - minerNode := builder.Build(ctx) - seed.GiveKey(t, minerNode, 0) - mineraddr, _ := seed.GiveMiner(t, minerNode, 0) - - nodes := []*Node{minerNode} - - nodeLimit := 1 - if numNodes > 2 { - nodeLimit = numNodes - } - builder2 := test.NewNodeBuilder(t). - WithGenesisInit(seed.GenesisInitFunc). - WithBuilderOpt(ChainClockConfigOption(c)). - WithBuilderOpt(VerifierConfigOption(&proofs.FakeVerifier{})). - WithBuilderOpt(PoStGeneratorOption(&consensus.TestElectionPoster{})). - WithBuilderOpt(MonkeyPatchSetProofTypeOption(constants.DevRegisteredSealProof)). - WithBuilderOpt(DrandConfigOption(drand.NewFake(genTime))) - - for i := 0; i < nodeLimit; i++ { - nodes = append(nodes, builder2.Build(ctx)) - } - return mineraddr, nodes, fc, blockTime -} diff --git a/internal/app/go-filecoin/node/builder.go b/internal/app/go-filecoin/node/builder.go deleted file mode 100644 index 4dd50206e3..0000000000 --- a/internal/app/go-filecoin/node/builder.go +++ /dev/null @@ -1,388 +0,0 @@ -package node - -import ( - "context" - "time" - - "github.com/filecoin-project/sector-storage/ffiwrapper" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - "github.com/filecoin-project/specs-actors/actors/builtin/power" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-merkledag" - "github.com/libp2p/go-libp2p" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/internal/submodule" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cfg" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cst" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/dag" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/journal" - "github.com/filecoin-project/go-filecoin/internal/pkg/postgenerator" - drandapi "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/storage" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/version" -) - -// Builder is a helper to aid in the construction of a filecoin node. -type Builder struct { - blockTime time.Duration - libp2pOpts []libp2p.Option - offlineMode bool - verifier ffiwrapper.Verifier - postGen postgenerator.PoStGenerator - propDelay time.Duration - repo repo.Repo - journal journal.Journal - isRelay bool - chainClock clock.ChainEpochClock - genCid cid.Cid - drand drand.IFace -} - -// BuilderOpt is an option for building a filecoin node. -type BuilderOpt func(*Builder) error - -// OfflineMode enables or disables offline mode. -func OfflineMode(offlineMode bool) BuilderOpt { - return func(c *Builder) error { - c.offlineMode = offlineMode - return nil - } -} - -// IsRelay configures node to act as a libp2p relay. -func IsRelay() BuilderOpt { - return func(c *Builder) error { - c.isRelay = true - return nil - } -} - -// BlockTime sets the blockTime. -func BlockTime(blockTime time.Duration) BuilderOpt { - return func(c *Builder) error { - c.blockTime = blockTime - return nil - } -} - -// PropagationDelay sets the time the node needs to wait for blocks to arrive before mining. -func PropagationDelay(propDelay time.Duration) BuilderOpt { - return func(c *Builder) error { - c.propDelay = propDelay - return nil - } -} - -// Libp2pOptions returns a builder option that sets up the libp2p node -func Libp2pOptions(opts ...libp2p.Option) BuilderOpt { - return func(b *Builder) error { - // Quietly having your options overridden leads to hair loss - if len(b.libp2pOpts) > 0 { - panic("Libp2pOptions can only be called once") - } - b.libp2pOpts = opts - return nil - } -} - -// VerifierConfigOption returns a function that sets the verifier to use in the node consensus -func VerifierConfigOption(verifier ffiwrapper.Verifier) BuilderOpt { - return func(c *Builder) error { - c.verifier = verifier - return nil - } -} - -// PoStGeneratorOption returns a builder option that sets the post generator to -// use during block generation -func PoStGeneratorOption(generator postgenerator.PoStGenerator) BuilderOpt { - return func(b *Builder) error { - b.postGen = generator - return nil - } -} - -// ChainClockConfigOption returns a function that sets the chainClock to use in the node. -func ChainClockConfigOption(clk clock.ChainEpochClock) BuilderOpt { - return func(c *Builder) error { - c.chainClock = clk - return nil - } -} - -// DrandConfigOption returns a function that sets the node's drand interface -func DrandConfigOption(d drand.IFace) BuilderOpt { - return func(c *Builder) error { - c.drand = d - return nil - } -} - -// JournalConfigOption returns a function that sets the journal to use in the node. -func JournalConfigOption(jrl journal.Journal) BuilderOpt { - return func(c *Builder) error { - c.journal = jrl - return nil - } -} - -// MonkeyPatchNetworkParamsOption returns a function that sets global vars in the -// binary's specs actor dependency to change network parameters that live there -func MonkeyPatchNetworkParamsOption(params *config.NetworkParamsConfig) BuilderOpt { - return func(c *Builder) error { - if params.ConsensusMinerMinPower > 0 { - power.ConsensusMinerMinPower = big.NewIntUnsigned(params.ConsensusMinerMinPower) - } - if len(params.ReplaceProofTypes) > 0 { - newSupportedTypes := make(map[abi.RegisteredProof]struct{}) - for _, proofType := range params.ReplaceProofTypes { - newSupportedTypes[abi.RegisteredProof(proofType)] = struct{}{} - } - // Switch reference rather than mutate in place to avoid concurrent map mutation (in tests). - miner.SupportedProofTypes = newSupportedTypes - } - return nil - } -} - -// MonkeyPatchSetProofTypeOption returns a function that sets package variable -// SuppurtedProofTypes to be only the given registered proof type -func MonkeyPatchSetProofTypeOption(proofType abi.RegisteredProof) BuilderOpt { - return func(c *Builder) error { - // Switch reference rather than mutate in place to avoid concurrent map mutation (in tests). - miner.SupportedProofTypes = map[abi.RegisteredProof]struct{}{proofType: {}} - return nil - } -} - -// New creates a new node. -func New(ctx context.Context, opts ...BuilderOpt) (*Node, error) { - // initialize builder and set base values - n := &Builder{ - offlineMode: false, - blockTime: clock.DefaultEpochDuration, - propDelay: clock.DefaultPropagationDelay, - verifier: ffiwrapper.ProofVerifier, - } - - // apply builder options - for _, o := range opts { - if err := o(n); err != nil { - return nil, err - } - } - - // build the node - return n.build(ctx) -} - -func (b *Builder) build(ctx context.Context) (*Node, error) { - // - // Set default values on un-initialized fields - // - - if b.repo == nil { - b.repo = repo.NewInMemoryRepo() - } - - var err error - - if b.journal == nil { - b.journal = journal.NewNoopJournal() - } - - // fetch genesis block id - b.genCid, err = readGenesisCid(b.repo.Datastore()) - if err != nil { - return nil, err - } - - // create the node - nd := &Node{ - OfflineMode: b.offlineMode, - Repo: b.repo, - } - - nd.Blockstore, err = submodule.NewBlockstoreSubmodule(ctx, b.repo) - if err != nil { - return nil, errors.Wrap(err, "failed to build node.Blockstore") - } - - nd.network, err = submodule.NewNetworkSubmodule(ctx, (*builder)(b), b.repo, &nd.Blockstore) - if err != nil { - return nil, errors.Wrap(err, "failed to build node.Network") - } - - nd.Discovery, err = submodule.NewDiscoverySubmodule(ctx, (*builder)(b), b.repo.Config().Bootstrap, &nd.network) - if err != nil { - return nil, errors.Wrap(err, "failed to build node.Discovery") - } - - nd.VersionTable, err = version.ConfigureProtocolVersions(nd.network.NetworkName) - if err != nil { - return nil, err - } - - nd.Blockservice, err = submodule.NewBlockserviceSubmodule(ctx, &nd.Blockstore, &nd.network) - if err != nil { - return nil, errors.Wrap(err, "failed to build node.Blockservice") - } - - nd.ProofVerification = submodule.NewProofVerificationSubmodule(b.verifier) - - nd.chain, err = submodule.NewChainSubmodule((*builder)(b), b.repo, &nd.Blockstore, &nd.ProofVerification) - if err != nil { - return nil, errors.Wrap(err, "failed to build node.Chain") - } - if b.drand == nil { - genBlk, err := nd.chain.ChainReader.GetGenesisBlock(ctx) - if err != nil { - return nil, errors.Wrap(err, "failed to construct drand grpc") - } - dGRPC, err := DefaultDrandIfaceFromConfig(b.repo.Config(), genBlk.Timestamp) - if err != nil { - return nil, err - } - b.drand = dGRPC - } - - if b.chainClock == nil { - // get the genesis block time from the chainsubmodule - geneBlk, err := nd.chain.ChainReader.GetGenesisBlock(ctx) - if err != nil { - return nil, err - } - b.chainClock = clock.NewChainClock(geneBlk.Timestamp, b.blockTime, b.propDelay) - } - nd.ChainClock = b.chainClock - - nd.syncer, err = submodule.NewSyncerSubmodule(ctx, (*builder)(b), &nd.Blockstore, &nd.network, &nd.Discovery, &nd.chain, nd.ProofVerification.ProofVerifier) - if err != nil { - return nil, errors.Wrap(err, "failed to build node.Syncer") - } - - nd.Wallet, err = submodule.NewWalletSubmodule(ctx, b.repo, &nd.chain) - if err != nil { - return nil, errors.Wrap(err, "failed to build node.Wallet") - } - - nd.Messaging, err = submodule.NewMessagingSubmodule(ctx, (*builder)(b), b.repo, &nd.network, &nd.chain, &nd.Wallet) - if err != nil { - return nil, errors.Wrap(err, "failed to build node.Messaging") - } - - nd.StorageNetworking, err = submodule.NewStorgeNetworkingSubmodule(ctx, &nd.network) - if err != nil { - return nil, errors.Wrap(err, "failed to build node.StorageNetworking") - } - - nd.BlockMining, err = submodule.NewBlockMiningSubmodule(ctx, b.postGen) - if err != nil { - return nil, errors.Wrap(err, "failed to build node.BlockMining") - } - - waiter := msg.NewWaiter(nd.chain.ChainReader, nd.chain.MessageStore, nd.Blockstore.Blockstore, nd.Blockstore.CborStore) - - nd.PorcelainAPI = porcelain.New(plumbing.New(&plumbing.APIDeps{ - Chain: nd.chain.State, - Sync: cst.NewChainSyncProvider(nd.syncer.ChainSyncManager), - Config: cfg.NewConfig(b.repo), - DAG: dag.NewDAG(merkledag.NewDAGService(nd.Blockservice.Blockservice)), - Expected: nd.syncer.Consensus, - MsgPool: nd.Messaging.MsgPool, - MsgPreviewer: msg.NewPreviewer(nd.chain.ChainReader, nd.Blockstore.CborStore, nd.Blockstore.Blockstore, nd.chain.Processor), - MsgWaiter: waiter, - Network: nd.network.Network, - Outbox: nd.Messaging.Outbox, - PieceManager: nd.PieceManager, - Wallet: nd.Wallet.Wallet, - })) - - nd.StorageProtocol, err = submodule.NewStorageProtocolSubmodule( - ctx, - nd.PorcelainAPI.WalletDefaultAddress, - &nd.chain, - &nd.Messaging, - waiter, - nd.Wallet.Signer, - nd.Host(), - nd.Repo.Datastore(), - nd.Blockstore.Blockstore, - nd.network.GraphExchange, - state.NewViewer(nd.Blockstore.CborStore), - ) - if err != nil { - return nil, err - } - - nd.StorageAPI = storage.NewAPI(nd.StorageProtocol) - nd.DrandAPI = drandapi.New(b.drand, nd.PorcelainAPI) - - return nd, nil -} - -// Repo returns the repo. -func (b Builder) Repo() repo.Repo { - return b.repo -} - -// Builder private method accessors for impl's - -type builder Builder - -func (b builder) GenesisCid() cid.Cid { - return b.genCid -} - -func (b builder) BlockTime() time.Duration { - return b.blockTime -} - -func (b builder) Repo() repo.Repo { - return b.repo -} - -func (b builder) IsRelay() bool { - return b.isRelay -} - -func (b builder) ChainClock() clock.ChainEpochClock { - return b.chainClock -} - -func (b builder) Journal() journal.Journal { - return b.journal -} - -func (b builder) Libp2pOpts() []libp2p.Option { - return b.libp2pOpts -} - -func (b builder) OfflineMode() bool { - return b.offlineMode -} - -func (b builder) Drand() drand.IFace { - return b.drand -} - -func DefaultDrandIfaceFromConfig(cfg *config.Config, fcGenTS uint64) (drand.IFace, error) { - drandConfig := cfg.Drand - addrs := make([]drand.Address, len(drandConfig.Addresses)) - for i, a := range drandConfig.Addresses { - addrs[i] = drand.NewAddress(a, drandConfig.Secure) - } - return drand.NewGRPC(addrs, drandConfig.DistKey, time.Unix(drandConfig.StartTimeUnix, 0), - time.Unix(int64(fcGenTS), 0), time.Duration(drandConfig.RoundSeconds)*time.Second) -} diff --git a/internal/app/go-filecoin/node/config.go b/internal/app/go-filecoin/node/config.go deleted file mode 100644 index cf6f8258e3..0000000000 --- a/internal/app/go-filecoin/node/config.go +++ /dev/null @@ -1,43 +0,0 @@ -package node - -import ( - libp2p "github.com/libp2p/go-libp2p" - ci "github.com/libp2p/go-libp2p-core/crypto" - errors "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" -) - -// OptionsFromRepo takes a repo and returns options that configure a node -// to use the given repo. -func OptionsFromRepo(r repo.Repo) ([]BuilderOpt, error) { - sk, err := privKeyFromKeystore(r) - if err != nil { - return nil, err - } - - cfg := r.Config() - cfgopts := []BuilderOpt{ - // Libp2pOptions can only be called once, so add all options here. - Libp2pOptions( - libp2p.ListenAddrStrings(cfg.Swarm.Address), - libp2p.Identity(sk), - ), - } - - dsopt := func(c *Builder) error { - c.repo = r - return nil - } - - return append(cfgopts, dsopt), nil -} - -func privKeyFromKeystore(r repo.Repo) (ci.PrivKey, error) { - sk, err := r.Keystore().Get("self") - if err != nil { - return nil, errors.Wrap(err, "failed to get key from keystore") - } - - return sk, nil -} diff --git a/internal/app/go-filecoin/node/helpers.go b/internal/app/go-filecoin/node/helpers.go deleted file mode 100644 index cf0af16188..0000000000 --- a/internal/app/go-filecoin/node/helpers.go +++ /dev/null @@ -1,30 +0,0 @@ -package node - -import ( - "context" - "encoding/json" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/net/pubsub" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - "github.com/pkg/errors" -) - -type pubSubHandler func(ctx context.Context, msg pubsub.Message) error - -// readGenesisCid is a helper function that queries the provided datastore for -// an entry with the genesisKey cid, returning if found. -func readGenesisCid(ds datastore.Datastore) (cid.Cid, error) { - bb, err := ds.Get(chain.GenesisKey) - if err != nil { - return cid.Undef, errors.Wrap(err, "failed to read genesisKey") - } - - var c cid.Cid - err = json.Unmarshal(bb, &c) - if err != nil { - return cid.Undef, errors.Wrap(err, "failed to cast genesisCid") - } - return c, nil -} diff --git a/internal/app/go-filecoin/node/init.go b/internal/app/go-filecoin/node/init.go deleted file mode 100644 index 64ef07f05d..0000000000 --- a/internal/app/go-filecoin/node/init.go +++ /dev/null @@ -1,348 +0,0 @@ -package node - -import ( - "context" - "encoding/json" - "fmt" - "io/ioutil" - "os" - "path/filepath" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/sector-storage/stores" - "github.com/filecoin-project/specs-actors/actors/abi" - fsm "github.com/filecoin-project/storage-fsm" - "github.com/google/uuid" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - bstore "github.com/ipfs/go-ipfs-blockstore" - keystore "github.com/ipfs/go-ipfs-keystore" - acrypto "github.com/libp2p/go-libp2p-core/crypto" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors/sectors" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paths" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/genesis" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/wallet" -) - -const defaultPeerKeyBits = 2048 - -// initCfg contains configuration for initializing a node's repo. -type initCfg struct { - peerKey acrypto.PrivKey - defaultKey *crypto.KeyInfo - initImports []*crypto.KeyInfo -} - -// InitOpt is an option for initialization of a node's repo. -type InitOpt func(*initCfg) - -// PeerKeyOpt sets the private key for a node's 'self' libp2p identity. -// If unspecified, initialization will create a new one. -func PeerKeyOpt(k acrypto.PrivKey) InitOpt { - return func(opts *initCfg) { - opts.peerKey = k - } -} - -// DefaultKeyOpt sets the private key for the wallet's default account. -// If unspecified, initialization will create a new one. -func DefaultKeyOpt(ki *crypto.KeyInfo) InitOpt { - return func(opts *initCfg) { - opts.defaultKey = ki - } -} - -// ImportKeyOpt imports the provided key during initialization. -func ImportKeyOpt(ki *crypto.KeyInfo) InitOpt { - return func(opts *initCfg) { - opts.initImports = append(opts.initImports, ki) - } -} - -// Init initializes a Filecoin repo with genesis state and keys. -// This will always set the configuration for wallet default address (to the specified default -// key or a newly generated one), but otherwise leave the repo's config object intact. -// Make further configuration changes after initialization. -func Init(ctx context.Context, r repo.Repo, gen genesis.InitFunc, opts ...InitOpt) error { - cfg := new(initCfg) - for _, o := range opts { - o(cfg) - } - - bs := bstore.NewBlockstore(r.Datastore()) - cst := cborutil.NewIpldStore(bs) - chainstore, err := chain.Init(ctx, r, bs, cst, gen) - if err != nil { - return errors.Wrap(err, "Could not Init Node") - } - - if err := initPeerKey(r.Keystore(), cfg.peerKey); err != nil { - return err - } - - backend, err := wallet.NewDSBackend(r.WalletDatastore()) - if err != nil { - return errors.Wrap(err, "failed to open wallet datastore") - } - w := wallet.New(backend) - - defaultKey, err := initDefaultKey(w, cfg.defaultKey) - if err != nil { - return err - } - err = importInitKeys(w, cfg.initImports) - if err != nil { - return err - } - - defaultAddress, err := defaultKey.Address() - if err != nil { - return errors.Wrap(err, "failed to extract address from default key") - } - r.Config().Wallet.DefaultAddress = defaultAddress - if err = r.ReplaceConfig(r.Config()); err != nil { - return errors.Wrap(err, "failed to write config") - } - - genesisBlock, err := chainstore.GetGenesisBlock(ctx) - if err != nil { - return err - } - return InitSectors(ctx, r, genesisBlock) -} - -func initPeerKey(store keystore.Keystore, key acrypto.PrivKey) error { - var err error - if key == nil { - key, _, err = acrypto.GenerateKeyPair(acrypto.RSA, defaultPeerKeyBits) - if err != nil { - return errors.Wrap(err, "failed to create peer key") - } - } - if err := store.Put("self", key); err != nil { - return errors.Wrap(err, "failed to store private key") - } - return nil -} - -func initDefaultKey(w *wallet.Wallet, key *crypto.KeyInfo) (*crypto.KeyInfo, error) { - var err error - if key == nil { - key, err = w.NewKeyInfo() - if err != nil { - return nil, errors.Wrap(err, "failed to create default key") - } - } else { - if _, err := w.Import(key); err != nil { - return nil, errors.Wrap(err, "failed to import default key") - } - } - return key, nil -} - -func importInitKeys(w *wallet.Wallet, importKeys []*crypto.KeyInfo) error { - for _, ki := range importKeys { - _, err := w.Import(ki) - if err != nil { - return err - } - } - return nil -} - -func InitSectors(ctx context.Context, rep repo.Repo, genesisBlock *block.Block) error { - cfg := rep.Config() - - rpt, err := rep.Path() - if err != nil { - return err - } - - spt, err := paths.GetSectorPath(cfg.SectorBase.RootDirPath, rpt) - if err != nil { - return err - } - - if err := ensureSectorDirAndMetadata(false, spt); err != nil { - return err - } - - if cfg.SectorBase.PreSealedSectorsDirPath != "" && cfg.Mining.MinerAddress != address.Undef { - if err := ensureSectorDirAndMetadata(true, cfg.SectorBase.PreSealedSectorsDirPath); err != nil { - return err - } - - if err := importPreSealedSectorMetadata(ctx, rep, genesisBlock, cfg.Mining.MinerAddress); err != nil { - return err - } - } - return nil -} - -// Save the provided slice of sector metadata (corresponding to pre-sealed -// sectors) to the keyspace used by the finite-state machine. -func persistGenesisFSMState(rep repo.Repo, info []fsm.SectorInfo) error { - for idx := range info { - key := datastore.NewKey(fsm.SectorStorePrefix).ChildString(fmt.Sprint(info[idx].SectorNumber)) - - b, err := encoding.Encode(&info[idx]) - if err != nil { - return err - } - - if err := rep.Datastore().Put(key, b); err != nil { - return err - } - } - - return nil -} - -func importPreSealedSectorMetadata(ctx context.Context, rep repo.Repo, genesisBlock *block.Block, maddr address.Address) error { - stateFSM, err := createGenesisFSMState(ctx, rep, genesisBlock, maddr) - if err != nil { - return err - } - - err = persistGenesisFSMState(rep, stateFSM) - if err != nil { - return err - } - - max := abi.SectorNumber(0) - for idx := range stateFSM { - if stateFSM[idx].SectorNumber > max { - max = stateFSM[idx].SectorNumber - } - } - - // Increment the sector number counter until it is ready to dispense numbers - // outside of the range of numbers already consumed by the pre-sealed - // sectors. - cnt := sectors.NewPersistedSectorNumberCounter(rep.Datastore()) - for { - num, err := cnt.Next() - if err != nil { - return err - } - if num > max { - break - } - } - - return nil -} - -func ensureSectorDirAndMetadata(containsPreSealedSectors bool, dirPath string) error { - _, err := os.Stat(filepath.Join(dirPath, stores.MetaFile)) - if os.IsNotExist(err) { - // TODO: Set the appropriate permissions. - _ = os.MkdirAll(dirPath, 0777) - - dirMeta := stores.LocalStorageMeta{ - ID: stores.ID(uuid.New().String()), - Weight: 10, - CanSeal: true, - CanStore: true, - } - - if containsPreSealedSectors { - dirMeta.CanSeal = false - dirMeta.CanStore = false - dirMeta.Weight = 0 - } - - b, err := json.MarshalIndent(&dirMeta, "", " ") - if err != nil { - return err - } - - // TODO: Set the appropriate permissions. - if err := ioutil.WriteFile(filepath.Join(dirPath, stores.MetaFile), b, 0777); err != nil { - return err - } - } else if err != nil { - return err - } - - return nil -} - -// Produce a slice of fsm.SectorInfo (used to seed the storage finite-state -// machine with pre-sealed sectors) for a storage miner given a newly-minted -// genesis block. -func createGenesisFSMState(ctx context.Context, rep repo.Repo, genesisBlock *block.Block, maddr address.Address) ([]fsm.SectorInfo, error) { - view := state.NewViewer(cborutil.NewIpldStore(bstore.NewBlockstore(rep.Datastore()))).StateView(genesisBlock.StateRoot.Cid) - - conf, err := view.MinerSectorConfiguration(ctx, maddr) - if err != nil { - return nil, err - } - - // Loop through all the sectors in the genesis miner's proving set and - // persist to the shared (with storage-fsm) data store the relevant bits of - // sector and deal metadata. - var out []fsm.SectorInfo - - err = view.MinerSectorsForEach(ctx, maddr, func(sectorNumber abi.SectorNumber, sealedCID cid.Cid, proofType abi.RegisteredProof, dealIDs []abi.DealID) error { - pieces := make([]fsm.Piece, len(dealIDs)) - for idx := range dealIDs { - deal, err := view.MarketDealProposal(ctx, dealIDs[idx]) - if err != nil { - return err - } - - pieces[idx] = fsm.Piece{ - Piece: abi.PieceInfo{ - Size: deal.PieceSize, - PieceCID: deal.PieceCID, - }, - DealInfo: &fsm.DealInfo{ - DealID: dealIDs[idx], - DealSchedule: fsm.DealSchedule{ - StartEpoch: deal.StartEpoch, - EndEpoch: deal.EndEpoch, - }, - }, - } - } - - unsealedCID, err := view.MarketComputeDataCommitment(ctx, conf.SealProofType, dealIDs) - if err != nil { - return err - } - - out = append(out, fsm.SectorInfo{ - State: fsm.Proving, - SectorNumber: sectorNumber, - SectorType: proofType, - Pieces: pieces, - TicketValue: abi.SealRandomness{}, - TicketEpoch: 0, - PreCommit1Out: nil, - CommD: &unsealedCID, - CommR: &sealedCID, - Proof: nil, - PreCommitMessage: nil, - SeedValue: abi.InteractiveSealRandomness{}, - SeedEpoch: 0, - CommitMessage: nil, - }) - - return nil - }) - if err != nil { - return nil, err - } - - return out, nil -} diff --git a/internal/app/go-filecoin/node/message.go b/internal/app/go-filecoin/node/message.go deleted file mode 100644 index 7771ff016c..0000000000 --- a/internal/app/go-filecoin/node/message.go +++ /dev/null @@ -1,33 +0,0 @@ -package node - -import ( - "context" - - "github.com/filecoin-project/go-filecoin/internal/pkg/net/pubsub" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func (node *Node) processMessage(ctx context.Context, pubSubMsg pubsub.Message) (err error) { - sender := pubSubMsg.GetSender() - - // ignore messages from self - if sender == node.Host().ID() { - return nil - } - - unmarshaled := &types.SignedMessage{} - if err := unmarshaled.Unmarshal(pubSubMsg.GetData()); err != nil { - return err - } - // TODO #3566 This is redundant with pubsub repeater validation. - // We should do this in one call, maybe by waiting on pool add in repeater? - err = node.Messaging.MsgSigVal.Validate(ctx, unmarshaled) - if err != nil { - return err - } - - log.Debugf("Received new message %s from peer %s", unmarshaled, pubSubMsg.GetSender()) - - _, err = node.Messaging.Inbox.Add(ctx, unmarshaled) - return err -} diff --git a/internal/app/go-filecoin/node/message_propagate_test.go b/internal/app/go-filecoin/node/message_propagate_test.go deleted file mode 100644 index 46f7f514a5..0000000000 --- a/internal/app/go-filecoin/node/message_propagate_test.go +++ /dev/null @@ -1,99 +0,0 @@ -package node_test - -import ( - "context" - "testing" - "time" - - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/util/adt" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/specs-actors/actors/abi" - - . "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/proofs" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/version" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" - specsbig "github.com/filecoin-project/specs-actors/actors/abi/big" -) - -// TestMessagePropagation is a high level check that messages are propagated between message -// pools of connected nodes. -func TestMessagePropagation(t *testing.T) { - tf.UnitTest(t) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - // Generate a key and install an account actor at genesis which will be able to send messages. - genCfg := &gengen.GenesisCfg{} - require.NoError(t, gengen.GenKeys(1, "1000000")(genCfg)) - require.NoError(t, gengen.NetworkName(version.TEST)(genCfg)) - - cs := MakeChainSeed(t, genCfg) - - // Initialize the first node to be the message sender. - builder1 := test.NewNodeBuilder(t) - builder1.WithGenesisInit(cs.GenesisInitFunc) - builder1.WithBuilderOpt(VerifierConfigOption(&proofs.FakeVerifier{})) - builder1.WithBuilderOpt(MonkeyPatchSetProofTypeOption(constants.DevRegisteredSealProof)) - - sender := builder1.Build(ctx) - senderAddress := cs.GiveKey(t, sender, 0) - - // Initialize other nodes to receive the message. - builder2 := test.NewNodeBuilder(t) - builder2.WithGenesisInit(cs.GenesisInitFunc) - builder2.WithBuilderOpt(VerifierConfigOption(&proofs.FakeVerifier{})) - builder2.WithBuilderOpt(MonkeyPatchSetProofTypeOption(constants.DevRegisteredSealProof)) - receiverCount := 2 - receivers := builder2.BuildMany(ctx, receiverCount) - - nodes := append([]*Node{sender}, receivers...) - StartNodes(t, nodes) - defer StopNodes(nodes) - - // Connect nodes in series - ConnectNodes(t, nodes[0], nodes[1]) - ConnectNodes(t, nodes[1], nodes[2]) - // Wait for network connection notifications to propagate - time.Sleep(time.Millisecond * 200) - - require.Equal(t, 0, len(nodes[1].Messaging.Inbox.Pool().Pending())) - require.Equal(t, 0, len(nodes[2].Messaging.Inbox.Pool().Pending())) - require.Equal(t, 0, len(nodes[0].Messaging.Inbox.Pool().Pending())) - - fooMethod := abi.MethodNum(7232) - - t.Run("message propagates", func(t *testing.T) { - _, _, err := sender.PorcelainAPI.MessageSend( - ctx, - senderAddress, - builtin.InitActorAddr, - specsbig.NewInt(100), - types.NewGasPrice(1), - gas.Unit(5000), - fooMethod, - adt.Empty, - ) - require.NoError(t, err) - - require.NoError(t, th.WaitForIt(50, 100*time.Millisecond, func() (bool, error) { - return len(nodes[0].Messaging.Inbox.Pool().Pending()) == 1 && - len(nodes[1].Messaging.Inbox.Pool().Pending()) == 1 && - len(nodes[2].Messaging.Inbox.Pool().Pending()) == 1, nil - }), "failed to propagate messages") - - assert.True(t, nodes[0].Messaging.Inbox.Pool().Pending()[0].Message.Method == fooMethod) - assert.True(t, nodes[1].Messaging.Inbox.Pool().Pending()[0].Message.Method == fooMethod) - assert.True(t, nodes[2].Messaging.Inbox.Pool().Pending()[0].Message.Method == fooMethod) - }) -} diff --git a/internal/app/go-filecoin/node/node.go b/internal/app/go-filecoin/node/node.go deleted file mode 100644 index 238aaa81f4..0000000000 --- a/internal/app/go-filecoin/node/node.go +++ /dev/null @@ -1,706 +0,0 @@ -package node - -import ( - "context" - "fmt" - "reflect" - "runtime" - - "github.com/filecoin-project/go-address" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - bserv "github.com/ipfs/go-blockservice" - "github.com/ipfs/go-cid" - logging "github.com/ipfs/go-log/v2" - "github.com/libp2p/go-libp2p-core/host" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/internal/submodule" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics" - "github.com/filecoin-project/go-filecoin/internal/pkg/mining" - "github.com/filecoin-project/go-filecoin/internal/pkg/net/pubsub" - "github.com/filecoin-project/go-filecoin/internal/pkg/piecemanager" - "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/drand" - mining_protocol "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/mining" - "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/storage" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/version" -) - -var log = logging.Logger("node") // nolint: deadcode - -var ( - // ErrNoMinerAddress is returned when the node is not configured to have any miner addresses. - ErrNoMinerAddress = errors.New("no miner addresses configured") -) - -// Node represents a full Filecoin node. -type Node struct { - // OfflineMode, when true, disables libp2p. - OfflineMode bool - - // ChainClock is a chainClock used by the node for chain epoch. - ChainClock clock.ChainEpochClock - - // Repo is the repo this node was created with. - // - // It contains all persistent artifacts of the filecoin node. - Repo repo.Repo - - PorcelainAPI *porcelain.API - DrandAPI *drand.API - StorageAPI *storage.API - - // - // Core services - // - - Blockstore submodule.BlockstoreSubmodule - network submodule.NetworkSubmodule - Blockservice submodule.BlockServiceSubmodule - Discovery submodule.DiscoverySubmodule - - // - // Subsystems - // - - chain submodule.ChainSubmodule - syncer submodule.SyncerSubmodule - BlockMining submodule.BlockMiningSubmodule - StorageMining *submodule.StorageMiningSubmodule - - // - // Supporting services - // - - Wallet submodule.WalletSubmodule - Messaging submodule.MessagingSubmodule - StorageNetworking submodule.StorageNetworkingSubmodule - ProofVerification submodule.ProofVerificationSubmodule - - // - // Protocols - // - - VersionTable *version.ProtocolVersionTable - StorageProtocol *submodule.StorageProtocolSubmodule - RetrievalProtocol *submodule.RetrievalProtocolSubmodule -} - -// Start boots up the node. -func (node *Node) Start(ctx context.Context) error { - if err := metrics.RegisterPrometheusEndpoint(node.Repo.Config().Observability.Metrics); err != nil { - return errors.Wrap(err, "failed to setup metrics") - } - - if err := metrics.RegisterJaeger(node.network.Host.ID().Pretty(), node.Repo.Config().Observability.Tracing); err != nil { - return errors.Wrap(err, "failed to setup tracing") - } - - err := node.chain.Start(ctx, node) - if err != nil { - return err - } - - // Only set these up if there is a miner configured. - if _, err := node.MiningAddress(); err == nil { - if err := node.setupStorageMining(ctx); err != nil { - log.Errorf("setup mining failed: %v", err) - return err - } - } - - // TODO: defer establishing these API endpoints until the chain is synced when the commands - // can handle their absence: https://github.com/filecoin-project/go-filecoin/issues/3137 - err = node.setupProtocols() - if err != nil { - return errors.Wrap(err, "failed to set up protocols:") - } - - var syncCtx context.Context - syncCtx, node.syncer.CancelChainSync = context.WithCancel(context.Background()) - - // Wire up propagation of new chain heads from the chain store to other components. - head, err := node.PorcelainAPI.ChainHead() - if err != nil { - return errors.Wrap(err, "failed to get chain head") - } - go node.handleNewChainHeads(syncCtx, head) - - if !node.OfflineMode { - - // Subscribe to block pubsub topic to learn about new chain heads. - node.syncer.BlockSub, err = node.pubsubscribe(syncCtx, node.syncer.BlockTopic, node.handleBlockSub) - if err != nil { - log.Error(err) - } - - // Subscribe to the message pubsub topic to learn about messages to mine into blocks. - // TODO: defer this subscription until after mining (block production) is started: - // https://github.com/filecoin-project/go-filecoin/issues/2145. - // This is blocked by https://github.com/filecoin-project/go-filecoin/issues/2959, which - // is necessary for message_propagate_test to start mining before testing this behaviour. - node.Messaging.MessageSub, err = node.pubsubscribe(syncCtx, node.Messaging.MessageTopic, node.processMessage) - if err != nil { - return err - } - - // Start node discovery - if err := node.Discovery.Start(node); err != nil { - return err - } - - if err := node.syncer.Start(syncCtx, node); err != nil { - return err - } - - // Wire up syncing and possible mining - go node.doMiningPause(syncCtx) - } - - return nil -} - -// Subscribes a handler function to a pubsub topic. -func (node *Node) pubsubscribe(ctx context.Context, topic *pubsub.Topic, handler pubSubHandler) (pubsub.Subscription, error) { - sub, err := topic.Subscribe() - if err != nil { - return nil, errors.Wrapf(err, "failed to subscribe") - } - go node.handleSubscription(ctx, sub, handler) - return sub, nil -} - -func (node *Node) setIsMining(isMining bool) { - node.BlockMining.Mining.Lock() - defer node.BlockMining.Mining.Unlock() - node.BlockMining.Mining.IsMining = isMining -} - -func (node *Node) handleNewMiningOutput(ctx context.Context, miningOutCh <-chan mining.FullBlock) { - defer func() { - node.BlockMining.MiningDoneWg.Done() - }() - for { - select { - case <-ctx.Done(): - return - case output, ok := <-miningOutCh: - if !ok { - log.Errorf("scheduler stopped. stopping mining.") - node.StopMining(context.Background()) - return - } - - node.BlockMining.MiningDoneWg.Add(1) - go func() { - if node.IsMining() { - node.BlockMining.AddNewlyMinedBlock(ctx, output) - } - node.BlockMining.MiningDoneWg.Done() - }() - } - } - -} - -func (node *Node) handleNewChainHeads(ctx context.Context, firstHead block.TipSet) { - newHeadCh := node.chain.ChainReader.HeadEvents().Sub(chain.NewHeadTopic) - defer log.Infof("new head handler exited") - defer node.chain.ChainReader.HeadEvents().Unsub(newHeadCh) - - handler := message.NewHeadHandler(node.Messaging.Inbox, node.Messaging.Outbox, node.chain.ChainReader, firstHead) - - for { - log.Debugf("waiting for new head") - select { - case ts, ok := <-newHeadCh: - if !ok { - log.Errorf("failed new head channel receive") - return - } - newHead, ok := ts.(block.TipSet) - if !ok { - log.Errorf("non-tipset published on heaviest tipset channel") - continue - } - height, _ := newHead.Height() - log.Debugf("received new head height %s, key %s", height, newHead.Key()) - - if node.StorageMining != nil { - log.Debugf("storage mining handling new head") - if err := node.StorageMining.HandleNewHead(ctx, newHead); err != nil { - log.Error(err) - } - } - - log.Debugf("message pool handling new head") - if err := handler.HandleNewHead(ctx, newHead); err != nil { - log.Error(err) - } - case <-ctx.Done(): - return - } - } -} - -func (node *Node) cancelSubscriptions() { - if node.syncer.CancelChainSync != nil { - node.syncer.CancelChainSync() - } - - if node.syncer.BlockSub != nil { - node.syncer.BlockSub.Cancel() - node.syncer.BlockSub = nil - } - - if node.Messaging.MessageSub != nil { - node.Messaging.MessageSub.Cancel() - node.Messaging.MessageSub = nil - } -} - -// Stop initiates the shutdown of the node. -func (node *Node) Stop(ctx context.Context) { - node.StopMining(ctx) - - node.cancelSubscriptions() - node.chain.ChainReader.Stop() - - if node.StorageMining != nil { - if err := node.StorageMining.Stop(ctx); err != nil { - fmt.Printf("error stopping storage miner: %s\n", err) - } - node.StorageMining = nil - } - - if err := node.Host().Close(); err != nil { - fmt.Printf("error closing host: %s\n", err) - } - - if err := node.Repo.Close(); err != nil { - fmt.Printf("error closing repo: %s\n", err) - } - - node.Discovery.Stop() - - fmt.Println("stopping filecoin :(") -} - -func (node *Node) addNewlyMinedBlock(ctx context.Context, o mining.FullBlock) { - log.Debugf("Got a newly mined block from the mining worker: %s", o.Header) - if err := node.AddNewBlock(ctx, o); err != nil { - log.Warnf("error adding new mined block: %s. err: %s", o.Header.Cid().String(), err.Error()) - } -} - -func (node *Node) addMinedBlockSynchronous(ctx context.Context, o mining.FullBlock) error { - wait := node.syncer.ChainSyncManager.BlockProposer().WaiterForTarget(block.NewTipSetKey(o.Header.Cid())) - err := node.AddNewBlock(ctx, o) - if err != nil { - return err - } - err = wait() - return err -} - -// MiningAddress returns the address of the mining actor mining on behalf of -// the node. -func (node *Node) MiningAddress() (address.Address, error) { - addr := node.Repo.Config().Mining.MinerAddress - if addr.Empty() { - return address.Undef, ErrNoMinerAddress - } - - return addr, nil -} - -// SetupMining initializes all the functionality the node needs to start mining. -// This method is idempotent. -func (node *Node) SetupMining(ctx context.Context) error { - // ensure we have a miner actor before we even consider mining - minerAddr, err := node.MiningAddress() - if err != nil { - return errors.Wrap(err, "failed to get mining address") - } - head := node.PorcelainAPI.ChainHeadKey() - view, err := node.PorcelainAPI.MinerStateView(head) - if err != nil { - return errors.Wrap(err, "failed to load state view") - } - _, _, err = view.MinerControlAddresses(ctx, minerAddr) - if err != nil { - return errors.Wrap(err, "failed to get miner actor") - } - - // ensure we've got our storage mining submodule configured - if node.StorageMining == nil { - if err := node.setupStorageMining(ctx); err != nil { - return err - } - } - - if node.RetrievalProtocol == nil { - if err := node.setupRetrievalMining(ctx); err != nil { - return err - } - } - // ensure we have a mining worker - if node.BlockMining.MiningWorker == nil { - if node.BlockMining.MiningWorker, err = node.CreateMiningWorker(ctx); err != nil { - return err - } - } - - if err := node.StorageMining.Start(ctx); err != nil { - fmt.Printf("error starting storage miner: %s\n", err) - } - - if err := node.StorageProtocol.StorageProvider.Start(ctx); err != nil { - fmt.Printf("error starting storage provider: %s\n", err) - } - - return nil -} - -func (node *Node) setupStorageMining(ctx context.Context) error { - if node.StorageMining != nil { - return errors.New("storage mining submodule has already been initialized") - } - - minerAddr, err := node.MiningAddress() - if err != nil { - return err - } - - head := node.Chain().ChainReader.GetHead() - status, err := node.PorcelainAPI.MinerGetStatus(ctx, minerAddr, head) - if err != nil { - return err - } - - repoPath, err := node.Repo.Path() - if err != nil { - return err - } - - sealProofType := status.SealProofType - - cborStore := node.Blockstore.CborStore - - waiter := msg.NewWaiter(node.chain.ChainReader, node.chain.MessageStore, node.Blockstore.Blockstore, cborStore) - - // TODO: rework these modules so they can be at least partially constructed during the building phase #3738 - stateViewer := state.NewViewer(cborStore) - - node.StorageMining, err = submodule.NewStorageMiningSubmodule(minerAddr, node.Repo.Datastore(), &node.chain, &node.Messaging, waiter, stateViewer, sealProofType, node.Repo, node.BlockMining.PoStGenerator) - if err != nil { - return err - } - - return node.StorageProtocol.AddStorageProvider( - ctx, - minerAddr, - &node.chain, - &node.Messaging, - waiter, - node.StorageMining.PieceManager, - node.Wallet.Signer, - node.Host(), - node.Repo.Datastore(), - node.Blockstore.Blockstore, - node.network.GraphExchange, - repoPath, - sealProofType, - stateViewer, - ) -} - -func (node *Node) setupRetrievalMining(ctx context.Context) error { - providerAddr, err := node.MiningAddress() - if err != nil { - return errors.Wrap(err, "failed to get mining address") - } - - waiter := msg.NewWaiter(node.chain.ChainReader, node.chain.MessageStore, node.Blockstore.Blockstore, node.Blockstore.CborStore) - - mgrStateViewer := paymentchannel.NewManagerStateViewer(node.Chain().ChainReader, node.Blockstore.CborStore) - paychMgr := paymentchannel.NewManager( - ctx, - node.Repo.Datastore(), - waiter, - node.Messaging.Outbox, - mgrStateViewer) - - rp, err := submodule.NewRetrievalProtocolSubmodule( - node.Blockstore.Blockstore, - node.Repo.Datastore(), - node.chain.State, - node.Host(), - providerAddr, - node.Wallet.Signer, - paychMgr, - node.PieceManager(), - ) - if err != nil { - return errors.Wrap(err, "failed to build node.RetrievalProtocol") - } - node.RetrievalProtocol = rp - return nil -} - -func (node *Node) doMiningPause(ctx context.Context) { - // doMiningPause receives state transition signals from the syncer - // dispatcher allowing syncing to make progress. - // - // When mining, the node passes these signals along to the scheduler - // pausing and continuing mining based on syncer state. - catchupCh := node.Syncer().ChainSyncManager.TransitionChannel() - for { - select { - case <-ctx.Done(): - return - case toCatchup, ok := <-catchupCh: - if !ok { - return - } - if node.BlockMining.MiningScheduler == nil { - // drop syncer transition signals if not mining - continue - } - if toCatchup { - node.BlockMining.MiningScheduler.Pause() - } else { - node.BlockMining.MiningScheduler.Continue() - } - } - } -} - -// StartMining causes the node to start feeding blocks to the mining worker and initializes -// the StorageMining for the mining address. -func (node *Node) StartMining(ctx context.Context) error { - if node.IsMining() { - return errors.New("Node is already mining") - } - - err := node.SetupMining(ctx) - if err != nil { - return errors.Wrap(err, "failed to setup mining") - } - - if node.BlockMining.MiningScheduler == nil { - node.BlockMining.MiningScheduler = mining.NewScheduler(node.BlockMining.MiningWorker, node.PorcelainAPI.ChainHead, node.ChainClock) - } else if node.BlockMining.MiningScheduler.IsStarted() { - return fmt.Errorf("miner scheduler already started") - } - - // The block mining scheduler Start() accepts a long-running context, and stopping is performed by cancellation of - // that context. - // The storage mining module and provider take the immediate context, hopefully don't run any goroutines that - // shut down when that context is done (which is ~immediately), and provide explicit Stop() methods instead. - // We should pick one consistent way of doing things. - var miningCtx context.Context - miningCtx, node.BlockMining.CancelMining = context.WithCancel(context.Background()) - - outCh, doneWg := node.BlockMining.MiningScheduler.Start(miningCtx) - - node.BlockMining.MiningDoneWg = doneWg - node.BlockMining.AddNewlyMinedBlock = node.addNewlyMinedBlock - node.BlockMining.MiningDoneWg.Add(1) - go node.handleNewMiningOutput(miningCtx, outCh) - - node.setIsMining(true) - - return nil -} - -// StopMining stops mining on new blocks. -func (node *Node) StopMining(ctx context.Context) { - node.setIsMining(false) - - if node.BlockMining.CancelMining != nil { - node.BlockMining.CancelMining() - } - - if node.BlockMining.MiningDoneWg != nil { - node.BlockMining.MiningDoneWg.Wait() - } - - if node.StorageMining != nil { - err := node.StorageMining.Stop(ctx) - if err != nil { - log.Warn("Error stopping storage miner", err) - } - } -} - -func (node *Node) handleSubscription(ctx context.Context, sub pubsub.Subscription, handler pubSubHandler) { - for { - received, err := sub.Next(ctx) - if err != nil { - if ctx.Err() != context.Canceled { - log.Errorf("error reading message from topic %s: %s", sub.Topic(), err) - } - return - } - - if err := handler(ctx, received); err != nil { - handlerName := runtime.FuncForPC(reflect.ValueOf(handler).Pointer()).Name() - if err != context.Canceled { - log.Errorf("error in handler %s for topic %s: %s", handlerName, sub.Topic(), err) - } - } - } -} - -// setupProtocols creates protocol clients and miners, then sets the node's APIs -// for each -func (node *Node) setupProtocols() error { - blockMiningAPI := mining_protocol.New( - node.MiningAddress, - node.addMinedBlockSynchronous, - node.chain.ChainReader, - node.IsMining, - node.SetupMining, - node.StartMining, - node.StopMining, - node.GetMiningWorker, - node.ChainClock, - ) - - node.BlockMining.BlockMiningAPI = &blockMiningAPI - return nil -} - -// GetMiningWorker ensures mining is setup and then returns the worker -func (node *Node) GetMiningWorker(ctx context.Context) (*mining.DefaultWorker, error) { - if err := node.SetupMining(ctx); err != nil { - return nil, err - } - return node.BlockMining.MiningWorker, nil -} - -// CreateMiningWorker creates a mining.Worker for the node using the configured -// getStateTree, getWeight, and getAncestors functions for the node -func (node *Node) CreateMiningWorker(ctx context.Context) (*mining.DefaultWorker, error) { - minerAddr, err := node.MiningAddress() - if err != nil { - return nil, errors.Wrap(err, "failed to get mining address") - } - - head := node.PorcelainAPI.ChainHeadKey() - view, err := node.PorcelainAPI.MinerStateView(head) - if err != nil { - return nil, errors.Wrapf(err, "failed to load miner state") - } - owner, _, err := view.MinerControlAddresses(ctx, minerAddr) - if err != nil { - return nil, errors.Wrapf(err, "failed to read miner control addresses") - } - - poster := node.BlockMining.PoStGenerator - if poster == nil { - poster = node.StorageMining.PoStGenerator - } - genBlk, err := node.Chain().ChainReader.GetGenesisBlock(ctx) - if err != nil { - return nil, err - } - sampler := chain.NewSampler(node.Chain().ChainReader, genBlk.Ticket) - - return mining.NewDefaultWorker(mining.WorkerParameters{ - API: node.PorcelainAPI, - - MinerAddr: minerAddr, - MinerOwnerAddr: owner, - WorkerSigner: node.Wallet.Signer, - - GetStateTree: node.chain.ChainReader.GetTipSetState, - GetWeight: node.getWeight, - Election: consensus.NewElectionMachine(node.PorcelainAPI), - TicketGen: consensus.NewTicketMachine(sampler), - TipSetMetadata: node.chain.ChainReader, - - MessageSource: node.Messaging.Inbox.Pool(), - MessageStore: node.chain.MessageStore, - MessageQualifier: consensus.NewMessagePenaltyChecker(node.Chain().State), - Blockstore: node.Blockstore.Blockstore, - Clock: node.ChainClock, - Poster: poster, - ChainState: node.chain.ChainReader, - Drand: node.Syncer().Drand, - }), nil -} - -// getWeight is the default GetWeight function for the mining worker. -func (node *Node) getWeight(ctx context.Context, ts block.TipSet) (fbig.Int, error) { - parent, err := ts.Parents() - if err != nil { - return fbig.Zero(), err - } - var baseStRoot cid.Cid - if parent.Empty() { - // use genesis state as parent state of genesis block - baseStRoot, err = node.chain.ChainReader.GetTipSetStateRoot(ts.Key()) - } else { - baseStRoot, err = node.chain.ChainReader.GetTipSetStateRoot(parent) - } - if err != nil { - return fbig.Zero(), err - } - return node.syncer.ChainSelector.Weight(ctx, ts, baseStRoot) -} - -// -- Accessors - -// Host returns the nodes host. -func (node *Node) Host() host.Host { - return node.network.Host -} - -// PieceManager returns the node's PieceManager. -func (node *Node) PieceManager() piecemanager.PieceManager { - return node.StorageMining.PieceManager -} - -// BlockService returns the nodes blockservice. -func (node *Node) BlockService() bserv.BlockService { - return node.Blockservice.Blockservice -} - -// CborStore returns the nodes cborStore. -func (node *Node) CborStore() *cborutil.IpldStore { - return node.Blockstore.CborStore -} - -// IsMining returns a boolean indicating whether the node is mining blocks. -func (node *Node) IsMining() bool { - node.BlockMining.Mining.Lock() - defer node.BlockMining.Mining.Unlock() - return node.BlockMining.Mining.IsMining -} - -// Chain returns the chain submodule. -func (node *Node) Chain() submodule.ChainSubmodule { - return node.chain -} - -// Syncer returns the syncer submodule. -func (node *Node) Syncer() submodule.SyncerSubmodule { - return node.syncer -} - -// Network returns the network submodule. -func (node *Node) Network() submodule.NetworkSubmodule { - return node.network -} diff --git a/internal/app/go-filecoin/node/node_test.go b/internal/app/go-filecoin/node/node_test.go deleted file mode 100644 index 12f388c34e..0000000000 --- a/internal/app/go-filecoin/node/node_test.go +++ /dev/null @@ -1,235 +0,0 @@ -package node_test - -import ( - "context" - "errors" - "fmt" - "testing" - "time" - - "github.com/libp2p/go-libp2p-core/peer" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/proofs" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" -) - -func TestNodeConstruct(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithGenesisInit(gengen.DefaultGenesis) - builder.WithBuilderOpt(node.FakeProofVerifierBuilderOpts()...) - nd := builder.Build(ctx) - assert.NotNil(t, nd.Host) - - nd.Stop(context.Background()) -} - -func TestNodeNetworking(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithGenesisInit(gengen.DefaultGenesis) - builder.WithBuilderOpt(node.FakeProofVerifierBuilderOpts()...) - nds := builder.BuildMany(ctx, 2) - nd1, nd2 := nds[0], nds[1] - - pinfo := peer.AddrInfo{ - ID: nd2.Host().ID(), - Addrs: nd2.Host().Addrs(), - } - - err := nd1.Host().Connect(ctx, pinfo) - assert.NoError(t, err) - - nd1.Stop(ctx) - nd2.Stop(ctx) -} - -func TestConnectsToBootstrapNodes(t *testing.T) { - tf.UnitTest(t) - - t.Run("no bootstrap nodes no problem", func(t *testing.T) { - ctx := context.Background() - - r := repo.NewInMemoryRepo() - r.Config().Swarm.Address = "/ip4/0.0.0.0/tcp/0" - - require.NoError(t, node.Init(ctx, r, gengen.DefaultGenesis)) - r.Config().Bootstrap.Addresses = []string{} - opts, err := node.OptionsFromRepo(r) - require.NoError(t, err) - - nd, err := node.New(ctx, opts...) - require.NoError(t, err) - assert.NoError(t, nd.Start(ctx)) - defer nd.Stop(ctx) - }) - - t.Run("connects to bootstrap nodes", func(t *testing.T) { - ctx := context.Background() - - // These are two bootstrap nodes we'll connect to. - builder := test.NewNodeBuilder(t) - builder.WithGenesisInit(gengen.DefaultGenesis) - builder.WithBuilderOpt(node.FakeProofVerifierBuilderOpts()...) - nds := builder.BuildMany(ctx, 2) - node.StartNodes(t, nds) - nd1, nd2 := nds[0], nds[1] - - // Gotta be a better way to do this? - peer1 := fmt.Sprintf("%s/ipfs/%s", nd1.Host().Addrs()[0].String(), nd1.Host().ID().Pretty()) - peer2 := fmt.Sprintf("%s/ipfs/%s", nd2.Host().Addrs()[0].String(), nd2.Host().ID().Pretty()) - - // Create a node with the nodes above as bootstrap nodes. - r := repo.NewInMemoryRepo() - r.Config().Swarm.Address = "/ip4/0.0.0.0/tcp/0" - - require.NoError(t, node.Init(ctx, r, gengen.DefaultGenesis)) - r.Config().Bootstrap.Addresses = []string{peer1, peer2} - - opts, err := node.OptionsFromRepo(r) - require.NoError(t, err) - nd, err := node.New(ctx, opts...) - require.NoError(t, err) - nd.Discovery.Bootstrapper.MinPeerThreshold = 2 - nd.Discovery.Bootstrapper.Period = 10 * time.Millisecond - assert.NoError(t, nd.Start(ctx)) - defer nd.Stop(ctx) - - // Ensure they're connected. - connected := false - // poll until we are connected, to avoid flaky tests - for i := 0; i <= 30; i++ { - l1 := len(nd.Host().Network().ConnsToPeer(nd1.Host().ID())) - l2 := len(nd.Host().Network().ConnsToPeer(nd2.Host().ID())) - - connected = l1 == 1 && l2 == 1 - if connected { - break - } - time.Sleep(10 * time.Millisecond) - } - - assert.True(t, connected, "failed to connect") - }) -} - -func TestNodeInit(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithGenesisInit(gengen.DefaultGenesis) - builder.WithBuilderOpt(node.FakeProofVerifierBuilderOpts()...) - builder.WithBuilderOpt(node.OfflineMode(true)) - - nd := builder.Build(ctx) - - assert.NoError(t, nd.Start(ctx)) - - assert.NotEqual(t, 0, nd.PorcelainAPI.ChainHeadKey().Len()) - nd.Stop(ctx) -} - -func TestNodeStartMining(t *testing.T) { - t.Skip("Skip pending storage market integration #3731") - tf.UnitTest(t) - - ctx := context.Background() - - seed := node.MakeChainSeed(t, node.MakeTestGenCfg(t, 100)) - builder := test.NewNodeBuilder(t) - builder.WithInitOpt(node.PeerKeyOpt(node.PeerKeys[0])) - builder.WithGenesisInit(seed.GenesisInitFunc) - minerNode := builder.Build(ctx) - - seed.GiveKey(t, minerNode, 0) - seed.GiveMiner(t, minerNode, 0) // TODO: update to accommodate new go-fil-markets integration - // Start mining give error for fail to get miner actor from the heaviest tipset stateroot - assert.Contains(t, minerNode.StartMining(ctx).Error(), "failed to setup mining") - - assert.NoError(t, minerNode.Start(ctx)) - - t.Run("Start/Stop/Start results in a MiningScheduler that is started", func(t *testing.T) { - assert.NoError(t, minerNode.StartMining(ctx)) - defer minerNode.StopMining(ctx) - assert.True(t, minerNode.BlockMining.MiningScheduler.IsStarted()) - minerNode.StopMining(ctx) - assert.False(t, minerNode.BlockMining.MiningScheduler.IsStarted()) - assert.NoError(t, minerNode.StartMining(ctx)) - assert.True(t, minerNode.BlockMining.MiningScheduler.IsStarted()) - }) - - t.Run("Start + Start gives an error message saying mining is already started", func(t *testing.T) { - assert.NoError(t, minerNode.StartMining(ctx)) - defer minerNode.StopMining(ctx) - err := minerNode.StartMining(ctx) - assert.Error(t, err, "node is already mining") - }) -} - -func TestOptionWithError(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - r := repo.NewInMemoryRepo() - assert.NoError(t, node.Init(ctx, r, gengen.DefaultGenesis)) - - opts, err := node.OptionsFromRepo(r) - assert.NoError(t, err) - - scaryErr := errors.New("i am an error grrrr") - errOpt := func(c *node.Builder) error { - return scaryErr - } - - opts = append(opts, errOpt) - - _, err = node.New(ctx, opts...) - assert.Error(t, err, scaryErr) - -} - -func TestNodeConfig(t *testing.T) { - tf.UnitTest(t) - - defaultCfg := config.NewDefaultConfig() - - // fake mining - verifier := &proofs.FakeVerifier{} - - configBlockTime := 99 - configPropagationDelay := 20 - - builderOptions := []node.BuilderOpt{ - node.VerifierConfigOption(verifier), - node.BlockTime(time.Duration(configBlockTime)), - node.PropagationDelay(time.Duration(configPropagationDelay)), - } - - initOpts := []node.InitOpt{} - - builder := test.NewNodeBuilder(t) - builder.WithGenesisInit(gengen.DefaultGenesis) - builder.WithInitOpt(initOpts...) - builder.WithBuilderOpt(builderOptions...) - builder.WithBuilderOpt(node.OfflineMode(true)) - - n := builder.Build(context.Background()) - cfg := n.Repo.Config() - - assert.Equal(t, true, n.OfflineMode) - assert.Equal(t, defaultCfg.Mining, cfg.Mining) - assert.Equal(t, &config.SwarmConfig{ - Address: "/ip4/127.0.0.1/tcp/0", - }, cfg.Swarm) -} diff --git a/internal/app/go-filecoin/node/test/api.go b/internal/app/go-filecoin/node/test/api.go deleted file mode 100644 index ed421bdfce..0000000000 --- a/internal/app/go-filecoin/node/test/api.go +++ /dev/null @@ -1,145 +0,0 @@ -package test - -import ( - "context" - "encoding/json" - "fmt" - "os" - "strings" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" -) - -// NodeAPI wraps an in-process Node to provide a command API server and client for testing. -type NodeAPI struct { - node *node.Node - tb testing.TB -} - -// NewNodeAPI creates a wrangler for a node. -func NewNodeAPI(node *node.Node, tb testing.TB) *NodeAPI { - return &NodeAPI{node, tb} -} - -// RunNodeAPI creates a new API server and `Run()`s it. -func RunNodeAPI(ctx context.Context, node *node.Node, tb testing.TB) (client *Client, stop func()) { - api := NewNodeAPI(node, tb) - return api.Run(ctx) -} - -// Node returns the node backing the API. -func (a *NodeAPI) Node() *node.Node { - return a.node -} - -// Run start s a command API server for the node. -// Returns a client proxy and a function to terminate the NodeAPI server. -func (a *NodeAPI) Run(ctx context.Context) (client *Client, stop func()) { - ready := make(chan interface{}) - terminate := make(chan os.Signal, 1) - - go func() { - err := commands.RunAPIAndWait(ctx, a.node, a.node.Repo.Config().API, ready, terminate) - require.NoError(a.tb, err) - }() - <-ready - - addr, err := a.node.Repo.APIAddr() - require.NoError(a.tb, err) - require.NotEmpty(a.tb, addr, "empty API address") - - return &Client{addr, a.tb}, func() { - close(terminate) - } -} - -// Client is an in-process client to a command API. -type Client struct { - address string - tb testing.TB -} - -// Address returns the address string to which the client sends command RPCs. -func (c *Client) Address() string { - return c.address -} - -// Run runs a CLI command and returns its output. -func (c *Client) Run(ctx context.Context, command ...string) *th.CmdOutput { - c.tb.Helper() - args := []string{ - "go-filecoin", // A dummy first arg is required, simulating shell invocation. - fmt.Sprintf("--cmdapiaddr=%s", c.address), - } - args = append(args, command...) - - // Create pipes for the client to write stdout and stderr. - readStdOut, writeStdOut, err := os.Pipe() - require.NoError(c.tb, err) - readStdErr, writeStdErr, err := os.Pipe() - require.NoError(c.tb, err) - var readStdin *os.File // no stdin needed - - exitCode, err := commands.Run(ctx, args, readStdin, writeStdOut, writeStdErr) - // Close the output side of the pipes so that ReadAll() on the read ends can complete. - require.NoError(c.tb, writeStdOut.Close()) - require.NoError(c.tb, writeStdErr.Close()) - - out := th.ReadOutput(c.tb, command, readStdOut, readStdErr) - if err != nil { - out.SetInvocationError(err) - } else { - out.SetStatus(exitCode) - } - require.NoError(c.tb, err, "client execution error") - - return out -} - -// RunSuccess runs a command and asserts that it succeeds (status of zero and logs no errors). -func (c *Client) RunSuccess(ctx context.Context, command ...string) *th.CmdOutput { - output := c.Run(ctx, command...) - output.AssertSuccess() - return output -} - -// RunFail runs a command and asserts that it fails with a specified message on stderr. -func (c *Client) RunFail(ctx context.Context, err string, command ...string) *th.CmdOutput { - output := c.Run(ctx, command...) - output.AssertFail(err) - return output -} - -// RunJSON runs a command, asserts success, and parses the response as JSON. -func (c *Client) RunJSON(ctx context.Context, command ...string) map[string]interface{} { - out := c.RunSuccess(ctx, command...) - var parsed map[string]interface{} - require.NoError(c.tb, json.Unmarshal([]byte(out.ReadStdout()), &parsed)) - return parsed -} - -// RunMarshaledJSON runs a command, asserts success, and marshals the JSON response. -func (c *Client) RunMarshaledJSON(ctx context.Context, result interface{}, command ...string) { - out := c.RunSuccess(ctx, command...) - require.NoError(c.tb, json.Unmarshal([]byte(out.ReadStdout()), &result)) -} - -// RunSuccessFirstLine executes the given command, asserts success and returns -// the first line of stdout. -func (c *Client) RunSuccessFirstLine(ctx context.Context, args ...string) string { - return c.RunSuccessLines(ctx, args...)[0] -} - -// RunSuccessLines executes the given command, asserts success and returns -// an array of lines of the stdout. -func (c *Client) RunSuccessLines(ctx context.Context, args ...string) []string { - output := c.RunSuccess(ctx, args...) - result := output.ReadStdoutTrimNewlines() - return strings.Split(result, "\n") -} diff --git a/internal/app/go-filecoin/node/test/builder.go b/internal/app/go-filecoin/node/test/builder.go deleted file mode 100644 index b528e5c2b2..0000000000 --- a/internal/app/go-filecoin/node/test/builder.go +++ /dev/null @@ -1,138 +0,0 @@ -package test - -import ( - "context" - "io/ioutil" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/genesis" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" -) - -// NodeBuilder creates and configures Filecoin nodes for in-process testing. -// This is intended to replace use of GenNode and the various other node construction entry points -// that end up there. -// Note that (August 2019) there are two things called "config": the configuration read in from -// file to the config.Config structure, and node.Config which is really just some dependency -// injection. This builder avoids exposing the latter directly. -type NodeBuilder struct { - // Initialisation function for the genesis block and state. - gif genesis.InitFunc - // Options to the repo initialisation. - initOpts []node.InitOpt - // Mutations to be applied to node config after initialisation. - configMutations []node.ConfigOpt - // Mutations to be applied to the node builder config before building. - builderOpts []node.BuilderOpt - - tb testing.TB -} - -// NewNodeBuilder creates a new node builder. -func NewNodeBuilder(tb testing.TB) *NodeBuilder { - return &NodeBuilder{ - gif: gengen.MakeGenesisFunc(gengen.NetworkName("gfctest")), - initOpts: []node.InitOpt{}, - configMutations: []node.ConfigOpt{ - // Default configurations that make sense for integration tests. - // The can be overridden by subsequent `withConfigChanges`. - node.ConfigOpt(func(c *config.Config) { - // Bind only locally, defer port selection until binding. - c.API.Address = "/ip4/127.0.0.1/tcp/0" - c.Swarm.Address = "/ip4/127.0.0.1/tcp/0" - }), - }, - builderOpts: []node.BuilderOpt{}, - tb: tb, - } -} - -// WithGenesisInit sets the built nodes' genesis function. -func (b *NodeBuilder) WithGenesisInit(gif genesis.InitFunc) *NodeBuilder { - b.gif = gif - return b -} - -// WithInitOpt adds one or more options to repo initialisation. -func (b *NodeBuilder) WithInitOpt(opts ...node.InitOpt) *NodeBuilder { - b.initOpts = append(b.initOpts, opts...) - return b -} - -// WithBuilderOpt adds one or more node building options to node creation. -func (b *NodeBuilder) WithBuilderOpt(opts ...node.BuilderOpt) *NodeBuilder { - b.builderOpts = append(b.builderOpts, opts...) - return b -} - -// WithConfig adds a configuration mutation function to be invoked after repo initialisation. -func (b *NodeBuilder) WithConfig(cm node.ConfigOpt) *NodeBuilder { - b.configMutations = append(b.configMutations, cm) - return b -} - -// Build creates a node as specified by this builder. -// This many be invoked multiple times to create many nodes. -func (b *NodeBuilder) Build(ctx context.Context) *node.Node { - // Initialise repo. - repo := repo.NewInMemoryRepo() - - // Apply configuration changes (must happen before node.OptionsFromRepo()). - sectorDir, err := ioutil.TempDir("", "go-fil-test-sectors") - b.requireNoError(err) - repo.Config().SectorBase.RootDirPath = sectorDir - for _, m := range b.configMutations { - m(repo.Config()) - } - - b.requireNoError(node.Init(ctx, repo, b.gif, b.initOpts...)) - - // Initialize the node. - repoConfigOpts, err := node.OptionsFromRepo(repo) - b.requireNoError(err) - - nd, err := node.New(ctx, append(repoConfigOpts, b.builderOpts...)...) - b.requireNoError(err) - return nd -} - -// BuildAndStart build a node and starts it. -func (b *NodeBuilder) BuildAndStart(ctx context.Context) *node.Node { - n := b.Build(ctx) - err := n.Start(ctx) - b.requireNoError(err) - return n -} - -// BuildAndStartAPI is a convenience function composing BuildAndStart with -// RunNodeAPI -func (b *NodeBuilder) BuildAndStartAPI(ctx context.Context) (*node.Node, *Client, func()) { - n := b.BuildAndStart(ctx) - c, apiDone := RunNodeAPI(ctx, n, b.tb) - done := func() { - apiDone() - n.Stop(ctx) - } - return n, c, done -} - -func (b *NodeBuilder) requireNoError(err error) { - b.tb.Helper() - require.NoError(b.tb, err) -} - -// BuildMany builds numNodes nodes with the builder's configuration. -func (b *NodeBuilder) BuildMany(ctx context.Context, numNodes int) []*node.Node { - var out []*node.Node - for i := 0; i < numNodes; i++ { - nd := b.Build(ctx) - out = append(out, nd) - } - - return out -} diff --git a/internal/app/go-filecoin/node/test/setup.go b/internal/app/go-filecoin/node/test/setup.go deleted file mode 100644 index 61c02bb60d..0000000000 --- a/internal/app/go-filecoin/node/test/setup.go +++ /dev/null @@ -1,170 +0,0 @@ -package test - -import ( - "context" - "encoding/json" - "os" - "testing" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/build/project" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" -) - -const blockTime = builtin.EpochDurationSeconds * time.Second - -// MustCreateNodesWithBootstrap creates an in-process test setup capable of testing communication between nodes. -// Every setup will have one bootstrap node (the first node that is called) that is setup to have power to mine. -// All of the proofs for the set-up are fake (but additional nodes will still need to create miners and add storage to -// gain power). All nodes will be started and connected to each other. The returned cancel function ensures all nodes -// are stopped when the test is over. -func MustCreateNodesWithBootstrap(ctx context.Context, t *testing.T, additionalNodes uint) ([]*node.Node, context.CancelFunc) { - ctx, cancel := context.WithCancel(ctx) - nodes := make([]*node.Node, 1+additionalNodes) - - // create bootstrap miner - seed, genCfg, fakeClock, chainClock := CreateBootstrapSetup(t) - nodes[0] = CreateBootstrapMiner(ctx, t, seed, chainClock, genCfg) - - // create additional nodes - for i := uint(0); i < additionalNodes; i++ { - node := NewNodeBuilder(t). - WithGenesisInit(seed.GenesisInitFunc). - WithConfig(node.DefaultAddressConfigOpt(seed.Addr(t, int(i+1)))). - WithBuilderOpt(node.PoStGeneratorOption(&consensus.TestElectionPoster{})). - WithBuilderOpt(node.FakeProofVerifierBuilderOpts()...). - WithBuilderOpt(node.ChainClockConfigOption(chainClock)). - WithBuilderOpt(node.DrandConfigOption(drand.NewFake(chainClock.StartTimeOfEpoch(0)))). - Build(ctx) - addr := seed.GiveKey(t, node, int(i+1)) - err := node.PorcelainAPI.ConfigSet("wallet.defaultAddress", addr.String()) - require.NoError(t, err) - err = node.Start(ctx) - require.NoError(t, err) - nodes[i+1] = node - } - - // connect all nodes - for i := 0; i < len(nodes); i++ { - for j := 0; j < i; j++ { - node.ConnectNodes(t, nodes[i], nodes[j]) - } - } - - // start simulated mining and wait for shutdown - go func() { - for { - select { - case <-ctx.Done(): - return - default: - RequireMineOnce(ctx, t, fakeClock, nodes[0]) - } - } - }() - - return nodes, cancel -} - -func RequireMineOnce(ctx context.Context, t *testing.T, fakeClock clock.Fake, node *node.Node) *block.Block { - fakeClock.Advance(blockTime) - blk, err := node.BlockMining.BlockMiningAPI.MiningOnce(ctx) - - // fail only if ctx not done - select { - case <-ctx.Done(): - return nil - default: - require.NoError(t, err) - } - - return blk -} - -func CreateBootstrapSetup(t *testing.T) (*node.ChainSeed, *gengen.GenesisCfg, clock.Fake, clock.ChainEpochClock) { - // set up paths and fake clock. - genTime := int64(1000000000) - fakeClock := clock.NewFake(time.Unix(genTime, 0)) - propDelay := 6 * time.Second - - // Load genesis config fixture. - genCfgPath := project.Root("fixtures/setup.json") - genCfg := loadGenesisConfig(t, genCfgPath) - genCfg.Miners = append(genCfg.Miners, &gengen.CreateStorageMinerConfig{ - Owner: 5, - SealProofType: constants.DevSealProofType, - }) - seed := node.MakeChainSeed(t, genCfg) - chainClock := clock.NewChainClockFromClock(uint64(genTime), blockTime, propDelay, fakeClock) - - return seed, genCfg, fakeClock, chainClock -} - -func CreateBootstrapMiner(ctx context.Context, t *testing.T, seed *node.ChainSeed, chainClock clock.ChainEpochClock, genCfg *gengen.GenesisCfg) *node.Node { - // set up paths and fake clock. - presealPath := project.Root("fixtures/genesis-sectors") - minerAddress, err := address.NewIDAddress(106) - require.NoError(t, err) - - // create bootstrap miner - bootstrapMiner := NewNodeBuilder(t). - WithGenesisInit(seed.GenesisInitFunc). - WithBuilderOpt(node.FakeProofVerifierBuilderOpts()...). - WithBuilderOpt(node.PoStGeneratorOption(&consensus.TestElectionPoster{})). - WithBuilderOpt(node.ChainClockConfigOption(chainClock)). - WithBuilderOpt(node.DrandConfigOption(drand.NewFake(chainClock.StartTimeOfEpoch(0)))). - WithBuilderOpt(node.MonkeyPatchSetProofTypeOption(constants.DevRegisteredSealProof)). - WithConfig(func(c *config.Config) { - c.SectorBase.PreSealedSectorsDirPath = presealPath - c.Mining.MinerAddress = minerAddress - }). - Build(ctx) - - addr := seed.GiveKey(t, bootstrapMiner, 0) - err = bootstrapMiner.PorcelainAPI.ConfigSet("wallet.defaultAddress", addr.String()) - require.NoError(t, err) - - _, _, err = initNodeGenesisMiner(ctx, t, bootstrapMiner, seed, genCfg.Miners[0].Owner) - require.NoError(t, err) - err = bootstrapMiner.Start(ctx) - require.NoError(t, err) - - return bootstrapMiner -} - -func initNodeGenesisMiner(ctx context.Context, t *testing.T, nd *node.Node, seed *node.ChainSeed, minerIdx int) (address.Address, address.Address, error) { - seed.GiveKey(t, nd, minerIdx) - miner, owner := seed.GiveMiner(t, nd, 0) - - genesisBlock, err := nd.Chain().ChainReader.GetGenesisBlock(ctx) - require.NoError(t, err) - - err = node.InitSectors(ctx, nd.Repo, genesisBlock) - require.NoError(t, err) - return miner, owner, err -} - -func loadGenesisConfig(t *testing.T, path string) *gengen.GenesisCfg { - configFile, err := os.Open(path) - if err != nil { - t.Errorf("failed to open config file %s: %s", path, err) - } - defer func() { _ = configFile.Close() }() - - var cfg gengen.GenesisCfg - if err := json.NewDecoder(configFile).Decode(&cfg); err != nil { - t.Errorf("failed to parse config: %s", err) - } - return &cfg -} diff --git a/internal/app/go-filecoin/node/testing.go b/internal/app/go-filecoin/node/testing.go deleted file mode 100644 index e8dde7ac2a..0000000000 --- a/internal/app/go-filecoin/node/testing.go +++ /dev/null @@ -1,246 +0,0 @@ -package node - -import ( - "context" - "math/rand" - "testing" - - "github.com/filecoin-project/go-address" - ds "github.com/ipfs/go-datastore" - blockstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/libp2p/go-libp2p-core/crypto" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/fixtures/fortest" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/proofs" - "github.com/filecoin-project/go-filecoin/internal/pkg/wallet" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" -) - -// ChainSeed is a generalized struct for configuring node -type ChainSeed struct { - info *gengen.RenderedGenInfo - bstore blockstore.Blockstore -} - -// MakeChainSeed creates a chain seed struct (see above) from a given -// genesis config -func MakeChainSeed(t *testing.T, cfg *gengen.GenesisCfg) *ChainSeed { - t.Helper() - - mds := ds.NewMapDatastore() - bstore := blockstore.NewBlockstore(mds) - - info, err := gengen.GenGen(context.TODO(), cfg, bstore) - require.NoError(t, err) - - return &ChainSeed{ - info: info, - bstore: bstore, - } -} - -// GenesisInitFunc is a th.GenesisInitFunc using the chain seed -func (cs *ChainSeed) GenesisInitFunc(cst cbor.IpldStore, bs blockstore.Blockstore) (*block.Block, error) { - keys, err := cs.bstore.AllKeysChan(context.TODO()) - if err != nil { - return nil, err - } - - for k := range keys { - blk, err := cs.bstore.Get(k) - if err != nil { - return nil, err - } - - if err := bs.Put(blk); err != nil { - return nil, err - } - } - - var blk block.Block - if err := cst.Get(context.TODO(), cs.info.GenesisCid, &blk); err != nil { - return nil, err - } - - return &blk, nil -} - -// GiveKey gives the given key to the given node -func (cs *ChainSeed) GiveKey(t *testing.T, nd *Node, key int) address.Address { - t.Helper() - bcks := nd.Wallet.Wallet.Backends(wallet.DSBackendType) - require.Len(t, bcks, 1, "expected to get exactly one datastore backend") - - dsb := bcks[0].(*wallet.DSBackend) - kinfo := cs.info.Keys[key] - require.NoError(t, dsb.ImportKey(kinfo)) - - addr, err := kinfo.Address() - require.NoError(t, err) - - return addr -} - -// GiveMiner gives the specified miner to the node. Returns the address and the owner addresss -func (cs *ChainSeed) GiveMiner(t *testing.T, nd *Node, which int) (address.Address, address.Address) { - t.Helper() - cfg := nd.Repo.Config() - m := cs.info.Miners[which] - cfg.Mining.MinerAddress = m.Address - - require.NoError(t, nd.Repo.ReplaceConfig(cfg)) - - ownerAddr, err := cs.info.Keys[m.Owner].Address() - require.NoError(t, err) - - return m.Address, ownerAddr -} - -// Addr returns the address for the given key -func (cs *ChainSeed) Addr(t *testing.T, key int) address.Address { - t.Helper() - k := cs.info.Keys[key] - - a, err := k.Address() - if err != nil { - t.Fatal(err) - } - - return a -} - -// ConfigOpt mutates a node config post initialization -type ConfigOpt func(*config.Config) - -// MinerConfigOpt is a config option that sets a node's miner address to one of -// the chain seed's miner addresses -func (cs *ChainSeed) MinerConfigOpt(which int) ConfigOpt { - return func(cfg *config.Config) { - m := cs.info.Miners[which] - cfg.Mining.MinerAddress = m.Address - } -} - -// MinerInitOpt is a node init option that imports the key for the miner's owner -func (cs *ChainSeed) MinerInitOpt(which int) InitOpt { - kwhich := cs.info.Miners[which].Owner - kinfo := cs.info.Keys[kwhich] - return ImportKeyOpt(kinfo) -} - -// KeyInitOpt is a node init option that imports one of the chain seed's -// keys to a node's wallet -func (cs *ChainSeed) KeyInitOpt(which int) InitOpt { - kinfo := cs.info.Keys[which] - return ImportKeyOpt(kinfo) -} - -// FixtureChainSeed returns the genesis function that -func FixtureChainSeed(t *testing.T) *ChainSeed { - return MakeChainSeed(t, &fortest.TestGenGenConfig) -} - -// DefaultAddressConfigOpt is a node config option setting the default address -func DefaultAddressConfigOpt(addr address.Address) ConfigOpt { - return func(cfg *config.Config) { - cfg.Wallet.DefaultAddress = addr - } -} - -// ConnectNodes connects two nodes together -func ConnectNodes(t *testing.T, a, b *Node) { - t.Helper() - pi := peer.AddrInfo{ - ID: b.Host().ID(), - Addrs: b.Host().Addrs(), - } - - err := a.Host().Connect(context.TODO(), pi) - if err != nil { - t.Fatal(err) - } -} - -// FakeProofVerifierBuilderOpts returns default configuration for testing -func FakeProofVerifierBuilderOpts() []BuilderOpt { - return []BuilderOpt{ - VerifierConfigOption(&proofs.FakeVerifier{}), - } -} - -// StartNodes starts some nodes, failing on any error. -func StartNodes(t *testing.T, nds []*Node) { - t.Helper() - for _, nd := range nds { - if err := nd.Start(context.Background()); err != nil { - t.Fatal(err) - } - } -} - -// StopNodes initiates shutdown of some nodes. -func StopNodes(nds []*Node) { - for _, nd := range nds { - nd.Stop(context.Background()) - } -} - -// MustCreateStorageMinerResult contains the result of a CreateStorageMiner command -type MustCreateStorageMinerResult struct { - MinerAddress *address.Address - Err error -} - -// PeerKeys are a list of keys for peers that can be used in testing. -var PeerKeys = []crypto.PrivKey{ - mustGenKey(101), - mustGenKey(102), -} - -// MakeTestGenCfg returns a genesis configuration used for tests. -// This config has one miner with numSectors sectors and two accounts, -// the first is the miner's owner/worker and the accounts both have 10000 FIL -func MakeTestGenCfg(t *testing.T, numSectors int) *gengen.GenesisCfg { - commCfgs, err := gengen.MakeCommitCfgs(numSectors) - require.NoError(t, err) - return &gengen.GenesisCfg{ - KeysToGen: 2, - Miners: []*gengen.CreateStorageMinerConfig{ - { - Owner: 0, - PeerID: mustPeerID(PeerKeys[0]).Pretty(), - CommittedSectors: commCfgs, - SealProofType: constants.DevSealProofType, - }, - }, - Network: "gfctest", - PreallocatedFunds: []string{ - "10000", - "10000", - }, - } -} - -func mustGenKey(seed int64) crypto.PrivKey { - r := rand.New(rand.NewSource(seed)) - priv, _, err := crypto.GenerateEd25519Key(r) - if err != nil { - panic(err) - } - - return priv -} - -func mustPeerID(k crypto.PrivKey) peer.ID { - pid, err := peer.IDFromPrivateKey(k) - if err != nil { - panic(err) - } - return pid -} diff --git a/internal/app/go-filecoin/paths/paths.go b/internal/app/go-filecoin/paths/paths.go deleted file mode 100644 index 1ab36ef4e1..0000000000 --- a/internal/app/go-filecoin/paths/paths.go +++ /dev/null @@ -1,55 +0,0 @@ -package paths - -import ( - "os" - "path/filepath" - - "github.com/mitchellh/go-homedir" -) - -// node repo path defaults -const filPathVar = "FIL_PATH" -const defaultRepoDir = "~/.filecoin" - -// node sector storage path defaults -const filSectorPathVar = "FIL_SECTOR_PATH" -const defaultSectorDir = ".filecoin_sectors" -const defaultPieceStagingDir = "pieces" - -// GetRepoPath returns the path of the filecoin repo from a potential override -// string, the FIL_PATH environment variable and a default of ~/.filecoin/repo. -func GetRepoPath(override string) (string, error) { - // override is first precedence - if override != "" { - return homedir.Expand(override) - } - // Environment variable is second precedence - envRepoDir := os.Getenv(filPathVar) - if envRepoDir != "" { - return homedir.Expand(envRepoDir) - } - // Default is third precedence - return homedir.Expand(defaultRepoDir) -} - -// GetSectorPath returns the path of the filecoin sector storage from a -// potential override string, the FIL_SECTOR_PATH environment variable and a -// default of repoPath/../.filecoin_sectors. -func GetSectorPath(override, repoPath string) (string, error) { - // override is first precedence - if override != "" { - return homedir.Expand(override) - } - // Environment variable is second precedence - envRepoDir := os.Getenv(filSectorPathVar) - if envRepoDir != "" { - return homedir.Expand(envRepoDir) - } - // Default is third precedence: repoPath/../defaultSectorDir - return homedir.Expand(filepath.Join(repoPath, "../", defaultSectorDir)) -} - -// PieceStagingDir returns the path to the piece staging directory repo path -func PieceStagingDir(repoPath string) (string, error) { - return homedir.Expand(filepath.Join(repoPath, "../", defaultPieceStagingDir)) -} diff --git a/internal/app/go-filecoin/paymentchannel/integration_test.go b/internal/app/go-filecoin/paymentchannel/integration_test.go deleted file mode 100644 index 54806484a4..0000000000 --- a/internal/app/go-filecoin/paymentchannel/integration_test.go +++ /dev/null @@ -1,154 +0,0 @@ -package paymentchannel_test - -import ( - "context" - "math/big" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - spect "github.com/filecoin-project/specs-actors/support/testing" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - dss "github.com/ipfs/go-datastore/sync" - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - retrievalmarketconnector "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/connectors/retrieval_market" - pch "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel" - paychtest "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel/testing" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -// TestAddFundsToChannel verifies that a call to GetOrCreatePaymentChannel sends -// funds to the actor if it already exists -func TestPaymentChannel(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - chainBuilder, bs, genTs := testSetup2(ctx, t) - ds := dss.MutexWrap(datastore.NewMapDatastore()) - - balance := abi.NewTokenAmount(1000000) - initActorUtil := paychtest.NewFakeInitActorUtil(ctx, t, balance) - root, err := chainBuilder.GetTipSetStateRoot(genTs.Key()) - require.NoError(t, err) - - initialChannelAmt := abi.NewTokenAmount(1200) - _, client, miner, paychID, paych := initActorUtil.StubCtorSendResponse(initialChannelAmt) - fakeProvider := message.NewFakeProvider(t) - fakeProvider.Builder = chainBuilder - clientActor := actor.NewActor(builtin.AccountActorCodeID, balance, root) - fakeProvider.SetHead(genTs.Key()) - fakeProvider.SetActor(client, clientActor) - - viewer := paychtest.NewFakeStateViewer(t) - - pchMgr := pch.NewManager(context.Background(), ds, initActorUtil, initActorUtil, viewer) - - viewer.GetFakeStateView().AddActorWithState(paych, client, miner, address.Undef) - - rmc := retrievalmarketconnector.NewRetrievalMarketClientFakeAPI(t) - - connector := retrievalmarketconnector.NewRetrievalClientConnector(bs, fakeProvider, rmc, pchMgr) - assert.NotNil(t, connector) - tok, err := encoding.Encode(genTs.Key()) - require.NoError(t, err) - - addr, mcid, err := connector.GetOrCreatePaymentChannel(ctx, client, miner, initialChannelAmt, tok) - require.NoError(t, err) - assert.Equal(t, address.Undef, addr) - - addr, err = connector.WaitForPaymentChannelCreation(mcid) - require.NoError(t, err) - assert.Equal(t, paych, addr) - - // make sure the channel info is there - chinfo, err := pchMgr.GetPaymentChannelInfo(paych) - require.NoError(t, err) - require.Equal(t, paych, chinfo.UniqueAddr) - - paychActorUtil := paychtest.FakePaychActorUtil{ - T: t, - Balance: types.NewAttoFIL(initialChannelAmt.Int), - PaychAddr: paych, - PaychIDAddr: paychID, - Client: client, - ClientID: spect.NewIDAddr(t, 999), - Miner: miner, - } - - fakeProvider.SetHead(genTs.Key()) - fakeProvider.SetActor(client, clientActor) - - viewer.GetFakeStateView().AddActorWithState(paychActorUtil.PaychAddr, paychActorUtil.Client, paychActorUtil.Miner, address.Undef) - assert.NotNil(t, connector) - - addVal := abi.NewTokenAmount(333) - expCid := paychActorUtil.StubSendFundsResponse(paychActorUtil.Client, addVal, exitcode.Ok, 1) - - // set up sends and waits to go to the payment channel actor util / harness - initActorUtil.DelegateSender(paychActorUtil.Send) - initActorUtil.DelegateWaiter(paychActorUtil.Wait) - - addr, mcid, err = connector.GetOrCreatePaymentChannel(ctx, client, miner, addVal, tok) - require.NoError(t, err) - assert.Equal(t, paychActorUtil.PaychAddr, addr) - assert.True(t, mcid.Equals(expCid)) - - err = connector.WaitForPaymentChannelAddFunds(mcid) - require.NoError(t, err) - - expBal := types.NewAttoFIL(big.NewInt(1533)) - assert.True(t, expBal.Equals(paychActorUtil.Balance)) -} - -func testSetup2(ctx context.Context, t *testing.T) (*chain.Builder, bstore.Blockstore, block.TipSet) { - _, builder, genTs, cs, st1 := requireNewEmptyChainStore(ctx, t) - rootBlk := builder.AppendBlockOnBlocks() - block.RequireNewTipSet(t, rootBlk) - require.NoError(t, cs.SetHead(ctx, genTs)) - root, err := st1.Commit(ctx) - require.NoError(t, err) - - // add tipset and state to chainstore - require.NoError(t, cs.PutTipSetMetadata(ctx, &chain.TipSetMetadata{ - TipSet: genTs, - TipSetStateRoot: root, - TipSetReceipts: types.EmptyReceiptsCID, - })) - - ds := repo.NewInMemoryRepo().ChainDatastore() - bs := bstore.NewBlockstore(ds) - return builder, bs, genTs -} - -func requireNewEmptyChainStore(ctx context.Context, t *testing.T) (cid.Cid, *chain.Builder, block.TipSet, *chain.Store, state.Tree) { - store := cbor.NewMemCborStore() - - // Cribbed from chain/store_test - st1 := state.NewState(store) - root, err := st1.Commit(ctx) - require.NoError(t, err) - - // link testing state to test block - builder := chain.NewBuilder(t, address.Undef) - genTS := builder.NewGenesis() - r := repo.NewInMemoryRepo() - - // setup chain store - ds := r.Datastore() - cs := chain.NewStore(ds, store, chain.NewStatusReporter(), genTS.At(0).Cid()) - return root, builder, genTS, cs, st1 -} diff --git a/internal/app/go-filecoin/paymentchannel/manager.go b/internal/app/go-filecoin/paymentchannel/manager.go deleted file mode 100644 index 1781cc7942..0000000000 --- a/internal/app/go-filecoin/paymentchannel/manager.go +++ /dev/null @@ -1,403 +0,0 @@ -package paymentchannel - -import ( - "bytes" - "context" - "sync" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/shared" - "github.com/filecoin-project/go-statestore" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - initActor "github.com/filecoin-project/specs-actors/actors/builtin/init" - paychActor "github.com/filecoin-project/specs-actors/actors/builtin/paych" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - "github.com/ipfs/go-datastore/namespace" - xerrors "github.com/pkg/errors" - "github.com/prometheus/common/log" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -var defaultGasPrice = types.NewAttoFILFromFIL(actor.DefaultGasCost) -var defaultGasLimit = gas.NewGas(5000) -var zeroAmt = abi.NewTokenAmount(0) - -// Manager manages payment channel actor and the data paymentChannels operations. -type Manager struct { - ctx context.Context - paymentChannels *paychStore - sender MsgSender - waiter MsgWaiter - stateViewer ActorStateViewer -} - -// PaymentChannelStorePrefix is the prefix used in the datastore -var PaymentChannelStorePrefix = "/retrievaldeals/paymentchannel" - -// MsgWaiter is an interface for waiting for a message to appear on chain -type MsgWaiter interface { - Wait(ctx context.Context, msgCid cid.Cid, lookback uint64, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error -} - -// MsgSender is an interface for something that can post messages on chain -type MsgSender interface { - // Send posts a message to the chain - Send(ctx context.Context, - from, to address.Address, - value types.AttoFIL, - gasPrice types.AttoFIL, - gasLimit gas.Unit, - bcast bool, - method abi.MethodNum, - params interface{}) (out cid.Cid, pubErrCh chan error, err error) -} - -// ActorStateViewer is an interface to StateViewer that the Manager uses -type ActorStateViewer interface { - GetStateView(ctx context.Context, tok shared.TipSetToken) (ManagerStateView, error) -} - -// NewManager creates and returns a new paymentchannel.Manager -func NewManager(ctx context.Context, ds datastore.Batching, waiter MsgWaiter, sender MsgSender, viewer ActorStateViewer) *Manager { - s := statestore.New(namespace.Wrap(ds, datastore.NewKey(PaymentChannelStorePrefix))) - - store := paychStore{store: s} - - return &Manager{ctx, &store, sender, waiter, viewer} -} - -// AllocateLane adds a new lane to a payment channel entry -func (pm *Manager) AllocateLane(paychAddr address.Address) (laneID uint64, err error) { - err = pm.paymentChannels.Mutate(paychAddr, func(info *ChannelInfo) error { - laneID = info.NextLane - info.NextLane++ - info.NextNonce++ - return nil - }) - return laneID, err -} - -// GetPaymentChannelByAccounts looks up a payment channel via payer/payee -// returns an empty ChannelInfo if not found. -func (pm *Manager) GetPaymentChannelByAccounts(payer, payee address.Address) (*ChannelInfo, error) { - var chinfos []ChannelInfo - var found ChannelInfo - - if err := pm.paymentChannels.List(&chinfos); err != nil { - return nil, err - } - for _, chinfo := range chinfos { - if chinfo.From == payer && chinfo.To == payee { - found = chinfo - break - } - } - return &found, nil -} - -// GetPaymentChannelInfo retrieves channel info from the paymentChannels. -// Assumes channel exists. -func (pm *Manager) GetPaymentChannelInfo(paychAddr address.Address) (*ChannelInfo, error) { - storedState := pm.paymentChannels.Get(paychAddr) - if storedState == nil { - return nil, xerrors.New("no stored state") - } - var chinfo ChannelInfo - if err := storedState.Get(&chinfo); err != nil { - return nil, err - } - return &chinfo, nil -} - -// CreatePaymentChannel will send the message to the InitActor to create a paych.Actor. -// If successful, a new payment channel entry will be persisted to the -// paymentChannels via a message wait handler. Returns the created payment channel address -func (pm *Manager) CreatePaymentChannel(client, miner address.Address, amt abi.TokenAmount) (address.Address, cid.Cid, error) { - chinfo, err := pm.GetPaymentChannelByAccounts(client, miner) - if err != nil { - return address.Undef, cid.Undef, err - } - if !chinfo.IsZero() { - return address.Undef, cid.Undef, xerrors.Errorf("payment channel exists for client %s, miner %s", client, miner) - } - pm.paymentChannels.storeLk.Lock() - - execParams, err := PaychActorCtorExecParamsFor(client, miner) - if err != nil { - pm.paymentChannels.storeLk.Unlock() - return address.Undef, cid.Undef, err - } - - mcid, _, err := pm.sender.Send( - pm.ctx, - client, - builtin.InitActorAddr, - types.NewAttoFIL(amt.Int), - defaultGasPrice, - defaultGasLimit, - true, - builtin.MethodsInit.Exec, - &execParams, - ) - if err != nil { - pm.paymentChannels.storeLk.Unlock() - return address.Undef, cid.Undef, err - } - go pm.handlePaychCreateResult(pm.ctx, mcid, client, miner) - return address.Undef, mcid, nil -} - -// AddVoucherToChannel saves a new signed voucher entry to the payment store -// Assumes paychAddr channel has already been created. -// Called by retrieval client connector -func (pm *Manager) AddVoucherToChannel(paychAddr address.Address, voucher *paychActor.SignedVoucher) error { - return pm.saveNewVoucher(paychAddr, voucher, nil) -} - -// AddVoucher saves voucher to the store -// If payment channel record does not exist in store, it will be created. -// Each new voucher amount must be > the last largest voucher by at least `expected` -// Called by retrieval provider connector -func (pm *Manager) AddVoucher(paychAddr address.Address, voucher *paychActor.SignedVoucher, proof []byte, expected big.Int, tok shared.TipSetToken) (abi.TokenAmount, error) { - has, err := pm.ChannelExists(paychAddr) - if err != nil { - return zeroAmt, err - } - if !has { - return pm.providerCreatePaymentChannelWithVoucher(paychAddr, voucher, proof, tok) - } - - chinfo, err := pm.GetPaymentChannelInfo(paychAddr) - if err != nil { - return zeroAmt, err - } - // check that this voucher amount is sufficiently larger than the last, largest voucher amount. - largest := chinfo.LargestVoucherAmount() - delta := abi.TokenAmount{Int: abi.NewTokenAmount(0).Sub(voucher.Amount.Int, largest.Int)} - if expected.LessThan(delta) { - return zeroAmt, xerrors.Errorf("voucher amount insufficient") - } - if err = pm.saveNewVoucher(paychAddr, voucher, proof); err != nil { - return zeroAmt, err - } - - return delta, nil -} - -// ChannelExists returns whether paychAddr has a store entry, + error -// Exported for retrieval provider -func (pm *Manager) ChannelExists(paychAddr address.Address) (bool, error) { - return pm.paymentChannels.Has(paychAddr) -} - -// PaychActorCtorExecParamsFor constructs parameters to send a message to InitActor -// To construct a paychActor -func PaychActorCtorExecParamsFor(client, miner address.Address) (initActor.ExecParams, error) { - - ctorParams := paychActor.ConstructorParams{From: client, To: miner} - marshaled, err := encoding.Encode(ctorParams) - if err != nil { - return initActor.ExecParams{}, err - } - - p := initActor.ExecParams{ - CodeCID: builtin.PaymentChannelActorCodeID, - ConstructorParams: marshaled, - } - return p, nil -} - -// GetMinerWorkerAddress gets a miner worker address from the miner address -func (pm *Manager) GetMinerWorkerAddress(ctx context.Context, miner address.Address, tok shared.TipSetToken) (address.Address, error) { - view, err := pm.stateViewer.GetStateView(ctx, tok) - if err != nil { - return address.Undef, err - } - _, fcworker, err := view.MinerControlAddresses(ctx, miner) - return fcworker, err -} - -func (pm *Manager) WaitForCreatePaychMessage(ctx context.Context, mcid cid.Cid) (address.Address, error) { - var newPaychAddr address.Address - - handleResult := func(b *block.Block, sm *types.SignedMessage, mr *vm.MessageReceipt) error { - var res initActor.ExecReturn - if err := encoding.Decode(mr.ReturnValue, &res); err != nil { - return err - } - - newPaychAddr = res.RobustAddress - return nil - } - - err := pm.waiter.Wait(pm.ctx, mcid, msg.DefaultMessageWaitLookback, handleResult) - if err != nil { - return address.Undef, err - } - return newPaychAddr, nil -} - -func (pm *Manager) AddFundsToChannel(paychAddr address.Address, amt abi.TokenAmount) (cid.Cid, error) { - var chinfo ChannelInfo - st := pm.paymentChannels.Get(paychAddr) - if err := st.Get(&chinfo); err != nil { - return cid.Undef, err - } - - mcid, _, err := pm.sender.Send(context.TODO(), chinfo.From, paychAddr, amt, defaultGasPrice, defaultGasLimit, true, builtin.MethodSend, nil) - if err != nil { - return cid.Undef, err - } - // TODO: track amts in paych store by lane: https://github.com/filecoin-project/go-filecoin/issues/4046 - return mcid, nil -} - -func (pm *Manager) WaitForAddFundsMessage(ctx context.Context, mcid cid.Cid) error { - handleResult := func(b *block.Block, sm *types.SignedMessage, mr *vm.MessageReceipt) error { - if mr.ExitCode != exitcode.Ok { - return xerrors.Errorf("Add funds failed with exitcode %d", mr.ExitCode) - } - return nil - } - return pm.waiter.Wait(pm.ctx, mcid, msg.DefaultMessageWaitLookback, handleResult) -} - -// WaitForPaychCreateMsg waits for mcid to appear on chain and returns the robust address of the -// created payment channel -// TODO: set up channel tracking before knowing paych addr: https://github.com/filecoin-project/go-filecoin/issues/4045 -// -func (pm *Manager) handlePaychCreateResult(ctx context.Context, mcid cid.Cid, client, miner address.Address) { - defer pm.paymentChannels.storeLk.Unlock() - var paychAddr address.Address - - handleResult := func(_ *block.Block, _ *types.SignedMessage, mr *vm.MessageReceipt) error { - if mr.ExitCode != exitcode.Ok { - return xerrors.Errorf("create message failed with exit code %d", mr.ExitCode) - } - - var decodedReturn initActor.ExecReturn - if err := decodedReturn.UnmarshalCBOR(bytes.NewReader(mr.ReturnValue)); err != nil { - return err - } - paychAddr = decodedReturn.RobustAddress - return nil - } - - if err := pm.waiter.Wait(ctx, mcid, msg.DefaultMessageWaitLookback, handleResult); err != nil { - log.Errorf("payment channel creation failed because: %s", err.Error()) - return - } - - // TODO check again to make sure a payment channel has not been created for this From/To - chinfo := ChannelInfo{ - From: client, - To: miner, - NextLane: 0, - NextNonce: 1, - UniqueAddr: paychAddr, - } - if err := pm.paymentChannels.Begin(paychAddr, &chinfo); err != nil { - log.Error(err) - } -} - -// Called ONLY in context of a retrieval provider. -func (pm *Manager) providerCreatePaymentChannelWithVoucher(paychAddr address.Address, voucher *paychActor.SignedVoucher, proof []byte, tok shared.TipSetToken) (abi.TokenAmount, error) { - pm.paymentChannels.storeLk.Lock() - defer pm.paymentChannels.storeLk.Unlock() - view, err := pm.stateViewer.GetStateView(pm.ctx, tok) - if err != nil { - return zeroAmt, err - } - from, to, err := view.PaychActorParties(pm.ctx, paychAddr) - if err != nil { - return zeroAmt, err - } - // needs to "allocate" a lane as well as storing a voucher so this bumps - // lane once and nonce twice - chinfo := ChannelInfo{ - From: from, - To: to, - NextLane: 1, - NextNonce: 2, - UniqueAddr: paychAddr, - Vouchers: []*VoucherInfo{{Voucher: voucher, Proof: proof}}, - } - if err = pm.paymentChannels.Begin(paychAddr, &chinfo); err != nil { - return zeroAmt, err - } - return voucher.Amount, nil -} - -// saveNewVoucher saves a voucher to an existing payment channel -func (pm *Manager) saveNewVoucher(paychAddr address.Address, voucher *paychActor.SignedVoucher, proof []byte) error { - has, err := pm.paymentChannels.Has(paychAddr) - if err != nil { - return err - } - if !has { - return xerrors.Errorf("channel does not exist %s", paychAddr.String()) - } - if err := pm.paymentChannels.Mutate(paychAddr, func(info *ChannelInfo) error { - if info.NextLane <= voucher.Lane { - return xerrors.Errorf("lane does not exist %d", voucher.Lane) - } - if info.HasVoucher(voucher) { - return xerrors.Errorf("voucher already saved") - } - info.NextNonce++ - info.Vouchers = append(info.Vouchers, &VoucherInfo{ - Voucher: voucher, - Proof: proof, - }) - return nil - }); err != nil { - return err - } - return nil -} - -// paychStore is a thin threadsafe wrapper for StateStore -type paychStore struct { - storeLk sync.RWMutex - store *statestore.StateStore -} - -type mutator func(info *ChannelInfo) error - -func (ps *paychStore) Mutate(addr address.Address, m mutator) error { - ps.storeLk.Lock() - defer ps.storeLk.Unlock() - return ps.store.Get(addr).Mutate(m) -} -func (ps *paychStore) List(info *[]ChannelInfo) error { - ps.storeLk.RLock() - defer ps.storeLk.RUnlock() - return ps.store.List(info) -} -func (ps *paychStore) Get(addr address.Address) *statestore.StoredState { - ps.storeLk.RLock() - defer ps.storeLk.RUnlock() - return ps.store.Get(addr) -} -func (ps *paychStore) Has(addr address.Address) (bool, error) { - ps.storeLk.RLock() - defer ps.storeLk.RUnlock() - return ps.store.Has(addr) -} - -func (ps *paychStore) Begin(addr address.Address, info *ChannelInfo) error { - return ps.store.Begin(addr, info) -} diff --git a/internal/app/go-filecoin/paymentchannel/manager_test.go b/internal/app/go-filecoin/paymentchannel/manager_test.go deleted file mode 100644 index 83768ede34..0000000000 --- a/internal/app/go-filecoin/paymentchannel/manager_test.go +++ /dev/null @@ -1,353 +0,0 @@ -package paymentchannel_test - -import ( - "context" - "errors" - "fmt" - "math/rand" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/shared_testutil" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - paychActor "github.com/filecoin-project/specs-actors/actors/builtin/paych" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - spect "github.com/filecoin-project/specs-actors/support/testing" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - dss "github.com/ipfs/go-datastore/sync" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - . "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel" - paychtest "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel/testing" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestManager_GetPaymentChannelInfo(t *testing.T) { - tf.UnitTest(t) - t.Run("returns err if info does not exist", func(t *testing.T) { - ds := dss.MutexWrap(datastore.NewMapDatastore()) - ctx := context.Background() - testAPI := paychtest.NewFakePaymentChannelAPI(ctx, t) - viewer := paychtest.NewFakeStateViewer(t) - m := NewManager(context.Background(), ds, testAPI, testAPI, viewer) - res, err := m.GetPaymentChannelInfo(spect.NewIDAddr(t, 1020)) - assert.EqualError(t, err, "No state for /t01020: datastore: key not found") - assert.Nil(t, res) - }) -} - -func TestManager_CreatePaymentChannel(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - viewer := paychtest.NewFakeStateViewer(t) - balance := abi.NewTokenAmount(301) - - t.Run("happy path", func(t *testing.T) { - ds := dss.MutexWrap(datastore.NewMapDatastore()) - testAPI := paychtest.NewFakePaymentChannelAPI(ctx, t) - testAPI.ExpectedMsgCid = shared_testutil.GenerateCids(1)[0] - - m := NewManager(context.Background(), ds, testAPI, testAPI, viewer) - clientAddr, minerAddr, paychUniqueAddr, _ := requireSetupPaymentChannel(t, testAPI, m, balance) - exists, err := m.ChannelExists(paychUniqueAddr) - require.NoError(t, err) - assert.True(t, exists) - - chinfo, err := m.GetPaymentChannelInfo(paychUniqueAddr) - require.NoError(t, err) - require.NotNil(t, chinfo) - expectedChinfo := ChannelInfo{ - NextLane: 0, - NextNonce: 1, - From: clientAddr, - To: minerAddr, - UniqueAddr: paychUniqueAddr, - } - assert.Equal(t, expectedChinfo, *chinfo) - }) - t.Run("returns err and does not create channel if Send fails", func(t *testing.T) { - ds := dss.MutexWrap(datastore.NewMapDatastore()) - testAPI := paychtest.NewFakePaymentChannelAPI(ctx, t) - testAPI.MsgSendErr = errors.New("sendboom") - clientAddr := spect.NewIDAddr(t, rand.Uint64()) - minerAddr := spect.NewIDAddr(t, rand.Uint64()) - paych := spect.NewActorAddr(t, "paych") - blockHeight := uint64(1234) - m := NewManager(context.Background(), ds, testAPI, testAPI, viewer) - - testAPI.ExpectedMsgCid, testAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, clientAddr, minerAddr, paych, balance, exitcode.Ok, blockHeight) - - addr, mcid, err := m.CreatePaymentChannel(clientAddr, minerAddr, balance) - assert.EqualError(t, err, "sendboom") - assert.True(t, mcid.Equals(cid.Undef)) - assert.Equal(t, address.Undef, addr) - }) - - t.Run("errors if payment channel exists", func(t *testing.T) { - ds := dss.MutexWrap(datastore.NewMapDatastore()) - testAPI := paychtest.NewFakePaymentChannelAPI(ctx, t) - m := NewManager(context.Background(), ds, testAPI, testAPI, viewer) - clientAddr, minerAddr, _, _ := requireSetupPaymentChannel(t, testAPI, m, types.ZeroAttoFIL) - _, mcid, err := m.CreatePaymentChannel(clientAddr, minerAddr, balance) - assert.EqualError(t, err, "payment channel exists for client t0901, miner t0902") - assert.True(t, mcid.Equals(cid.Undef)) - }) -} - -func TestManager_AllocateLane(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - ds := dss.MutexWrap(datastore.NewMapDatastore()) - testAPI := paychtest.NewFakePaymentChannelAPI(ctx, t) - balance := big.NewInt(301) - - viewer := paychtest.NewFakeStateViewer(t) - m := NewManager(context.Background(), ds, testAPI, testAPI, viewer) - clientAddr, minerAddr, paychUniqueAddr, _ := requireSetupPaymentChannel(t, testAPI, m, balance) - - t.Run("saves a new lane", func(t *testing.T) { - lane, err := m.AllocateLane(paychUniqueAddr) - require.NoError(t, err) - assert.Equal(t, uint64(0), lane) - - chinfo, err := m.GetPaymentChannelInfo(paychUniqueAddr) - require.NoError(t, err) - require.NotNil(t, chinfo) - expectedChinfo := ChannelInfo{ - NextLane: 1, - NextNonce: 2, - From: clientAddr, - To: minerAddr, - UniqueAddr: paychUniqueAddr, - } - - assert.Equal(t, expectedChinfo, *chinfo) - }) - - t.Run("errors if update lane doesn't exist", func(t *testing.T) { - badAddr := spect.NewActorAddr(t, "nonexistent") - lane, err := m.AllocateLane(badAddr) - expErr := fmt.Sprintf("No state for /%s", badAddr.String()) - assert.EqualError(t, err, expErr) - assert.Zero(t, lane) - }) -} - -// AddVoucherToChannel is called by a retrieval client -func TestManager_AddVoucherToChannel(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - amt := big.NewInt(300) - balance := big.NewInt(301) - sig := crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: []byte("doesntmatter")} - root := shared_testutil.GenerateCids(1)[0] - - v := paychActor.SignedVoucher{ - Nonce: 2, - TimeLockMax: abi.ChainEpoch(12345), - TimeLockMin: abi.ChainEpoch(12346), - Amount: amt, - Signature: &sig, - SecretPreimage: []uint8{}, - } - newV := v - newV.Amount = abi.NewTokenAmount(500) - - testAPI := paychtest.NewFakePaymentChannelAPI(ctx, t) - - t.Run("happy path", func(t *testing.T) { - ds := dss.MutexWrap(datastore.NewMapDatastore()) - viewer := paychtest.NewFakeStateViewer(t) - manager := NewManager(context.Background(), ds, testAPI, testAPI, viewer) - clientAddr, minerAddr, paychUniqueAddr, _ := requireSetupPaymentChannel(t, testAPI, manager, balance) - lane, err := manager.AllocateLane(paychUniqueAddr) - require.NoError(t, err) - v.Lane = lane - testAPI.ExpectedMsgCid, testAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, clientAddr, minerAddr, paychUniqueAddr, balance, exitcode.Ok, 42) - - assert.NoError(t, manager.AddVoucherToChannel(paychUniqueAddr, &v)) - }) - - t.Run("errors if channel doesn't exist", func(t *testing.T) { - _, manager := setupViewerManager(ctx, t, root) - assert.EqualError(t, manager.AddVoucherToChannel(spect.NewActorAddr(t, "not-there"), &v), "channel does not exist t2bfuuk4wniuwo2tfso3bfar55hf4d6zq4fbcagui") - }) - - t.Run("returns error if lane does not exist", func(t *testing.T) { - ds := dss.MutexWrap(datastore.NewMapDatastore()) - viewer := paychtest.NewFakeStateViewer(t) - manager := NewManager(context.Background(), ds, testAPI, testAPI, viewer) - _, _, paychUniqueAddr, _ := requireSetupPaymentChannel(t, testAPI, manager, balance) - assert.EqualError(t, manager.AddVoucherToChannel(paychUniqueAddr, &v), "lane does not exist 0") - }) -} - -// AddVoucher is called by a retrieval provider -func TestManager_AddVoucher(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - paychAddr := spect.NewActorAddr(t, "abcd123") - paychIDAddr := spect.NewIDAddr(t, 103) - clientAddr := spect.NewIDAddr(t, 99) - minerAddr := spect.NewIDAddr(t, 100) - - root := shared_testutil.GenerateCids(1)[0] - proof := []byte("proof") - amt := big.NewInt(300) - sig := crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: []byte("doesntmatter")} - v := paychActor.SignedVoucher{ - Nonce: 2, - TimeLockMax: abi.ChainEpoch(12345), - TimeLockMin: abi.ChainEpoch(12346), - Lane: 0, - Amount: amt, - Signature: &sig, - SecretPreimage: []uint8{}, - } - - tsk := block.NewTipSetKey(root) - tok, err := encoding.Encode(tsk) - require.NoError(t, err) - - t.Run("Adding a valid voucher creates a payment channel info and saves the voucher", func(t *testing.T) { - testAPI := paychtest.NewFakePaymentChannelAPI(ctx, t) - ds := dss.MutexWrap(datastore.NewMapDatastore()) - viewer := paychtest.NewFakeStateViewer(t) - manager := NewManager(context.Background(), ds, testAPI, testAPI, viewer) - viewer.GetFakeStateView().AddActorWithState(paychAddr, clientAddr, minerAddr, address.Undef) - - increment := int64(10) - // increment voucher amount by 10, expect 10 - numVouchers := 3 - for i := 0; i < numVouchers; i++ { - newV := v - newV.Amount = abi.NewTokenAmount(increment * int64(i+1)) - resAmt, err := manager.AddVoucher(paychAddr, &newV, proof, abi.NewTokenAmount(increment), tok) - require.NoError(t, err) - assert.True(t, resAmt.Equals(abi.NewTokenAmount(increment))) - } - has, err := manager.ChannelExists(paychAddr) - require.NoError(t, err) - assert.True(t, has) - chinfo, err := manager.GetPaymentChannelInfo(paychAddr) - require.NoError(t, err) - require.NotNil(t, chinfo) - assert.Len(t, chinfo.Vouchers, numVouchers) - assert.Equal(t, abi.NewTokenAmount(30), chinfo.Vouchers[2].Voucher.Amount) - }) - - t.Run("returns error if we try to save the same voucher", func(t *testing.T) { - viewer, manager := setupViewerManager(ctx, t, root) - viewer.GetFakeStateView().AddActorWithState(paychAddr, clientAddr, minerAddr, paychIDAddr) - resAmt, err := manager.AddVoucher(paychAddr, &v, []byte("porkchops"), abi.NewTokenAmount(1), tok) - require.NoError(t, err) - assert.Equal(t, amt, resAmt) - - resAmt, err = manager.AddVoucher(paychAddr, &v, []byte("porkchops"), abi.NewTokenAmount(1), tok) - assert.EqualError(t, err, "voucher already saved") - assert.Equal(t, abi.NewTokenAmount(0), resAmt) - }) - - t.Run("returns error if marshaling fails", func(t *testing.T) { - viewer, manager := setupViewerManager(ctx, t, root) - viewer.GetFakeStateView().AddActorWithState(paychAddr, clientAddr, address.Undef, address.Undef) - resAmt, err := manager.AddVoucher(paychAddr, &v, []byte("applesauce"), abi.NewTokenAmount(1), tok) - assert.EqualError(t, err, "cannot marshal undefined address") - assert.Equal(t, abi.NewTokenAmount(0), resAmt) - }) - - t.Run("returns error if cannot get actor state/parties", func(t *testing.T) { - viewer, manager := setupViewerManager(ctx, t, root) - sv := viewer.GetFakeStateView() - sv.AddActorWithState(paychAddr, clientAddr, minerAddr, paychIDAddr) - sv.PaychActorPartiesErr = errors.New("boom") - resAmt, err := manager.AddVoucher(paychAddr, &v, []byte("porkchops"), abi.NewTokenAmount(1), tok) - assert.EqualError(t, err, "boom") - assert.Equal(t, abi.NewTokenAmount(0), resAmt) - }) - - t.Run("returns error if voucher amount is insufficient", func(t *testing.T) { - viewer, manager := setupViewerManager(ctx, t, root) - - viewer.GetFakeStateView().AddActorWithState(paychAddr, clientAddr, minerAddr, paychIDAddr) - resAmt, err := manager.AddVoucher(paychAddr, &v, []byte("porkchops"), abi.NewTokenAmount(1), tok) - require.NoError(t, err) - _, err = manager.AllocateLane(paychAddr) - require.NoError(t, err) - - // newV.Amount - v.Amount (300) must be > expected (100), or returns error - amounts := []uint64{10, 300, 399} - for _, amt := range amounts { - newV := v - newV.Amount = types.NewAttoFILFromFIL(amt) - resAmt, err = manager.AddVoucher(paychAddr, &newV, []byte("porkchops"), abi.NewTokenAmount(1), tok) - assert.EqualError(t, err, "voucher amount insufficient") - assert.Equal(t, abi.NewTokenAmount(0), resAmt) - } - }) - -} - -func TestManager_GetMinerWorker(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - minerAddr := spect.NewIDAddr(t, 100) - minerWorkerAddr := spect.NewIDAddr(t, 101) - root := shared_testutil.GenerateCids(1)[0] - viewer, manager := setupViewerManager(ctx, t, root) - sv := viewer.GetFakeStateView() - - tsk := block.NewTipSetKey(root) - tok, err := encoding.Encode(tsk) - require.NoError(t, err) - - t.Run("happy path", func(t *testing.T) { - viewer.GetFakeStateView().AddMinerWithState(minerAddr, minerWorkerAddr) - res, err := manager.GetMinerWorkerAddress(ctx, minerAddr, tok) - assert.NoError(t, err) - assert.Equal(t, minerWorkerAddr, res) - }) - - t.Run("returns error if getting control addr fails", func(t *testing.T) { - sv.AddMinerWithState(minerAddr, minerWorkerAddr) - sv.MinerControlErr = errors.New("boom") - _, err := manager.GetMinerWorkerAddress(ctx, minerAddr, tok) - assert.EqualError(t, err, "boom") - }) -} - -func setupViewerManager(ctx context.Context, t *testing.T, root cid.Cid) (*paychtest.FakeStateViewer, *Manager) { - testAPI := paychtest.NewFakePaymentChannelAPI(ctx, t) - ds := dss.MutexWrap(datastore.NewMapDatastore()) - viewer := paychtest.NewFakeStateViewer(t) - return viewer, NewManager(context.Background(), ds, testAPI, testAPI, viewer) -} - -func requireSetupPaymentChannel(t *testing.T, testAPI *paychtest.FakePaymentChannelAPI, m *Manager, balance abi.TokenAmount) (address.Address, address.Address, address.Address, uint64) { - clientAddr := spect.NewIDAddr(t, 901) - minerAddr := spect.NewIDAddr(t, 902) - paychUniqueAddr := spect.NewActorAddr(t, "abcd123") - blockHeight := uint64(1234) - - testAPI.ExpectedMsgCid, testAPI.ExpectedResult = paychtest.GenCreatePaychActorMessage(t, clientAddr, minerAddr, paychUniqueAddr, balance, exitcode.Ok, blockHeight) - - _, mcid, err := m.CreatePaymentChannel(clientAddr, minerAddr, balance) - require.NoError(t, err) - - chinfo, err := m.GetPaymentChannelInfo(paychUniqueAddr) - require.NoError(t, err) - require.Equal(t, paychUniqueAddr, chinfo.UniqueAddr) - - // give goroutine a chance to update channel store - assert.True(t, testAPI.ExpectedMsgCid.Equals(testAPI.ActualWaitCid)) - assert.True(t, testAPI.ExpectedMsgCid.Equals(mcid)) - - return clientAddr, minerAddr, paychUniqueAddr, blockHeight -} diff --git a/internal/app/go-filecoin/paymentchannel/mgr_state_view_api.go b/internal/app/go-filecoin/paymentchannel/mgr_state_view_api.go deleted file mode 100644 index 81eebb56d7..0000000000 --- a/internal/app/go-filecoin/paymentchannel/mgr_state_view_api.go +++ /dev/null @@ -1,53 +0,0 @@ -package paymentchannel - -import ( - "context" - "fmt" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/shared" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" -) - -// ManagerStateViewer is a wrapper for state viewer and state view to fulfill requirements for -// the paymentchannel.Manager -type ManagerStateViewer struct { - reader chainReader - viewer *state.Viewer -} - -// ManagerStateView is the subset of StateView that the ManagerStateViewer needs. -type ManagerStateView interface { - PaychActorParties(ctx context.Context, paychAddr address.Address) (from, to address.Address, err error) - MinerControlAddresses(ctx context.Context, addr address.Address) (owner, worker address.Address, err error) -} - -// ChainReader is the subset of the ChainReadWriter API that the Manager uses -type chainReader interface { - GetTipSetStateRoot(block.TipSetKey) (cid.Cid, error) -} - -// NewManagerStateViewer initializes a new ManagerStateViewer -func NewManagerStateViewer(cr chainReader, cs *cborutil.IpldStore) *ManagerStateViewer { - stateViewer := state.NewViewer(cs) - return &ManagerStateViewer{cr, stateViewer} -} - -// GetStateView gets a state view for the provided token `tok` -func (msv *ManagerStateViewer) GetStateView(ctx context.Context, tok shared.TipSetToken) (ManagerStateView, error) { - var tsk block.TipSetKey - if err := encoding.Decode(tok, &tsk); err != nil { - return nil, fmt.Errorf("failed to marshal TipSetToken into a TipSetKey: %w", err) - } - - root, err := msv.reader.GetTipSetStateRoot(tsk) - if err != nil { - return nil, fmt.Errorf("failed to get tip state: %w", err) - } - return msv.viewer.StateView(root), nil -} diff --git a/internal/app/go-filecoin/paymentchannel/testing/fake_init_actor_util.go b/internal/app/go-filecoin/paymentchannel/testing/fake_init_actor_util.go deleted file mode 100644 index 26ed211111..0000000000 --- a/internal/app/go-filecoin/paymentchannel/testing/fake_init_actor_util.go +++ /dev/null @@ -1,167 +0,0 @@ -package testing - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - init_ "github.com/filecoin-project/specs-actors/actors/builtin/init" - "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - "github.com/filecoin-project/specs-actors/support/mock" - spect "github.com/filecoin-project/specs-actors/support/testing" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// FakeInitActorUtil fulfils the MsgSender and MsgWaiter interfaces for a Manager -// via the specs_actors mock runtime. It executes init.Actor exports directly. -type FakeInitActorUtil struct { - t *testing.T - ctx context.Context - *mock.Runtime - *initActorHarness - newActor, newActorID, caller address.Address - result MsgResult - msgSender sender - msgWaiter waiter -} - -// NewFakeInitActorUtil initializes a FakeInitActorUtil and constructs -// the InitActor. -func NewFakeInitActorUtil(ctx context.Context, t *testing.T, balance abi.TokenAmount) *FakeInitActorUtil { - - builder := mock.NewBuilder(context.Background(), builtin.InitActorAddr). - WithBalance(balance, abi.NewTokenAmount(0)) - - fai := &FakeInitActorUtil{ - ctx: ctx, - Runtime: builder.Build(t), - initActorHarness: new(initActorHarness), - t: t, - } - fai.constructInitActor() - fai.Runtime.Verify() - fai.msgSender = fai.defaultSend - fai.msgWaiter = fai.defaultWait - return fai -} - -type sender func(ctx context.Context, - from, to address.Address, - value types.AttoFIL, - gasPrice types.AttoFIL, - gasLimit gas.Unit, - bcast bool, - method abi.MethodNum, - params interface{}) (out cid.Cid, pubErrCh chan error, err error) - -type waiter func(_ context.Context, msgCid cid.Cid, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error - -// Send simulates posting to chain but calls actor code directly -func (fai *FakeInitActorUtil) Send(ctx context.Context, - from, to address.Address, - value types.AttoFIL, - gasPrice types.AttoFIL, - gasLimit gas.Unit, - bcast bool, - method abi.MethodNum, - params interface{}) (out cid.Cid, pubErrCh chan error, err error) { - - return fai.msgSender(ctx, from, to, value, gasPrice, gasLimit, bcast, method, params) -} -func (fai *FakeInitActorUtil) defaultSend(ctx context.Context, - from, to address.Address, - value types.AttoFIL, - gasPrice types.AttoFIL, - gasLimit gas.Unit, - bcast bool, - method abi.MethodNum, - params interface{}) (out cid.Cid, pubErrCh chan error, err error) { - execParams, ok := params.(*init_.ExecParams) - require.True(fai.t, ok) - fai.ExecAndVerify(from, value, execParams) - return fai.result.MsgCid, nil, nil -} - -// Wait simulates waiting for the result of a message and calls the callback `cb` -func (fai *FakeInitActorUtil) Wait(ctx context.Context, msgCid cid.Cid, lookback uint64, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error { - return fai.msgWaiter(ctx, msgCid, cb) -} - -func (fai *FakeInitActorUtil) defaultWait(_ context.Context, msgCid cid.Cid, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error { - require.Equal(fai.t, msgCid, fai.result.MsgCid) - res := fai.result - return cb(res.Block, res.Msg, res.Rcpt) -} - -// DelegateSender allows test to delegate a sender function -func (fai *FakeInitActorUtil) DelegateSender(delegate sender) { - fai.msgSender = delegate -} - -// DelegateWaiter allows test to deletate a waiter function -func (fai *FakeInitActorUtil) DelegateWaiter(delegate waiter) { - fai.msgWaiter = delegate -} - -// StubCtorSendResponse sets up addresses for the initActor and generates -// message responses from the call to create a new payment channel -func (fai *FakeInitActorUtil) StubCtorSendResponse(msgVal abi.TokenAmount) (msgCid cid.Cid, client, miner, idaddr, uniqueaddr address.Address) { - fai.caller = spect.NewActorAddr(fai.t, "client account addr") - fai.newActor = spect.NewActorAddr(fai.t, "new paych actor addr") - fai.newActorID = spect.NewIDAddr(fai.t, 100) - miner = spect.NewActorAddr(fai.t, "miner account addr") - fai.Runtime.SetNewActorAddress(fai.newActor) - - msgCid, msgRes := GenCreatePaychActorMessage(fai.t, fai.caller, miner, fai.newActor, msgVal, exitcode.Ok, 42) - fai.result = msgRes - return msgCid, fai.caller, miner, fai.newActorID, fai.newActor -} - -// ExecAndVerify sets up init actor to execute a constructor given a caller and value -func (fai *FakeInitActorUtil) ExecAndVerify(caller address.Address, value abi.TokenAmount, params *init_.ExecParams) { - a := fai.initActorHarness - expParams := runtime.CBORBytes(params.ConstructorParams) - - fai.Runtime.SetReceived(value) - fai.Runtime.SetCaller(caller, builtin.AccountActorCodeID) - fai.Runtime.ExpectCreateActor(builtin.PaymentChannelActorCodeID, fai.newActorID) - - fai.Runtime.ExpectSend(fai.newActorID, builtin.MethodConstructor, expParams, value, nil, exitcode.Ok) - exret := a.execAndVerify(fai.Runtime, params) - require.Equal(fai.t, fai.newActor, exret.RobustAddress) - require.Equal(fai.t, fai.newActorID, exret.IDAddress) -} - -// constructInitActor constructs an initActor harness with the fai mock runtime, so that initActor exports -// can be tested in go-filecoin. -func (fai *FakeInitActorUtil) constructInitActor() { - fai.Runtime.SetCaller(builtin.SystemActorAddr, builtin.SystemActorCodeID) - fai.Runtime.ExpectValidateCallerAddr(builtin.SystemActorAddr) - h := &initActorHarness{} - ret := fai.Runtime.Call(h.Constructor, &init_.ConstructorParams{NetworkName: "mock"}) - require.Nil(fai.t, ret) - fai.initActorHarness = h -} - -// actor harnesses should be very lightweight. -type initActorHarness struct { - init_.Actor - t testing.TB -} - -func (h *initActorHarness) execAndVerify(rt *mock.Runtime, params *init_.ExecParams) *init_.ExecReturn { - rt.ExpectValidateCallerAny() - ret := rt.Call(h.Exec, params).(*init_.ExecReturn) - require.NotNil(h.t, ret) - rt.Verify() - return ret -} diff --git a/internal/app/go-filecoin/paymentchannel/testing/fake_mgr_api.go b/internal/app/go-filecoin/paymentchannel/testing/fake_mgr_api.go deleted file mode 100644 index 1d18f5b58b..0000000000 --- a/internal/app/go-filecoin/paymentchannel/testing/fake_mgr_api.go +++ /dev/null @@ -1,172 +0,0 @@ -package testing - -import ( - "context" - "math/rand" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/shared_testutil" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - initActor "github.com/filecoin-project/specs-actors/actors/builtin/init" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - spect "github.com/filecoin-project/specs-actors/support/testing" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// FakePaymentChannelAPI mocks some needed APIs for a payment channel manager -type FakePaymentChannelAPI struct { - t *testing.T - ctx context.Context - - Balance types.AttoFIL - - ActualWaitCid cid.Cid - ExpectedMsgCid cid.Cid - ExpectedResult MsgResult - ActualResult MsgResult - - MsgSendErr error - MsgWaitErr error -} - -// MsgResult stores test message receipts -type MsgResult struct { - Block *block.Block - Msg *types.SignedMessage - DecodedParams interface{} - MsgCid cid.Cid - Rcpt *vm.MessageReceipt -} - -var msgRcptsUndef = MsgResult{} - -// NewFakePaymentChannelAPI creates a new mock payment channel API -func NewFakePaymentChannelAPI(ctx context.Context, t *testing.T) *FakePaymentChannelAPI { - return &FakePaymentChannelAPI{ - t: t, - ctx: ctx, - } -} - -// API methods - -// Wait mocks waiting for a message to be mined -func (f *FakePaymentChannelAPI) Wait(_ context.Context, msgCid cid.Cid, lookback uint64, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error { - if f.MsgWaitErr != nil { - return f.MsgWaitErr - } - f.ActualWaitCid = msgCid - return cb(f.ExpectedResult.Block, f.ExpectedResult.Msg, f.ExpectedResult.Rcpt) -} - -// Send mocks sending a message on chain -func (f *FakePaymentChannelAPI) Send(_ context.Context, - from, to address.Address, - value types.AttoFIL, - gasPrice types.AttoFIL, - gasLimit gas.Unit, - bcast bool, - method abi.MethodNum, - params interface{}) (out cid.Cid, pubErrCh chan error, err error) { - - if f.MsgSendErr != nil { - return cid.Undef, nil, f.MsgSendErr - } - if f.ExpectedResult == msgRcptsUndef || f.ExpectedMsgCid == cid.Undef { - f.t.Fatal("no message or no cid registered") - } - - expMessage := f.ExpectedResult.Msg.Message - require.Equal(f.t, f.ExpectedResult.DecodedParams, params) - require.Equal(f.t, expMessage.GasLimit, gasLimit) - require.Equal(f.t, expMessage.GasPrice, gasPrice) - require.Equal(f.t, expMessage.From, from) - require.Equal(f.t, expMessage.To, to) - require.Equal(f.t, expMessage.Value, value) - require.Equal(f.t, expMessage.Method, method) - require.True(f.t, bcast) - return f.ExpectedMsgCid, nil, nil -} - -// testing methods - -// GenCreatePaychActorMessage sets up a message response, with desired exit code and block height -// for creating a payment channel actor -func GenCreatePaychActorMessage( - t *testing.T, - clientAccountAddr, minerAccountAddr, paychUniqueAddr address.Address, - amt abi.TokenAmount, - code exitcode.ExitCode, - height uint64) (cid.Cid, MsgResult) { - - newcid := shared_testutil.GenerateCids(1)[0] - - msg := types.NewUnsignedMessage(clientAccountAddr, builtin.InitActorAddr, 1, - types.NewAttoFIL(amt.Int), builtin.MethodsInit.Exec, []byte{}) - msg.GasPrice = types.NewAttoFILFromFIL(100) - msg.GasLimit = gas.NewGas(5000) - - params, err := paymentchannel.PaychActorCtorExecParamsFor(clientAccountAddr, minerAccountAddr) - if err != nil { - t.Fatal("could not construct send params") - } - msg.Params = requireEncode(t, ¶ms) - - retVal := initActor.ExecReturn{ - IDAddress: spect.NewIDAddr(t, rand.Uint64()), // IDAddress is currently unused - RobustAddress: paychUniqueAddr, - } - - emptySig := crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte{'0'}} - return newcid, MsgResult{ - Block: &block.Block{Height: abi.ChainEpoch(height)}, - Msg: &types.SignedMessage{Message: *msg, Signature: emptySig}, - MsgCid: newcid, - Rcpt: &vm.MessageReceipt{ExitCode: code, ReturnValue: requireEncode(t, &retVal)}, - DecodedParams: ¶ms, - } -} - -// GenSendFundsMessage sets up a message response, with desired exit code and block height -// for a message that just sends funds between two addresses -func GenSendFundsMessage( - from, to address.Address, - amt abi.TokenAmount, - code exitcode.ExitCode, - height uint64) (cid.Cid, MsgResult) { - newcid := shared_testutil.GenerateCids(1)[0] - - msg := types.NewUnsignedMessage(from, to, 2, - types.NewAttoFIL(amt.Int), builtin.MethodSend, []byte{}) - msg.GasPrice = types.NewAttoFILFromFIL(100) - msg.GasLimit = gas.NewGas(5000) - emptySig := crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte{'0'}} - return newcid, MsgResult{ - Block: &block.Block{Height: abi.ChainEpoch(height)}, - Msg: &types.SignedMessage{Message: *msg, Signature: emptySig}, - MsgCid: newcid, - Rcpt: &vm.MessageReceipt{ExitCode: code}, - } -} - -func requireEncode(t *testing.T, params interface{}) []byte { - encodedParams, err := encoding.Encode(params) - if err != nil { - t.Fatal(err.Error()) - } - return encodedParams -} - -var _ paymentchannel.MsgSender = &FakePaymentChannelAPI{} -var _ paymentchannel.MsgWaiter = &FakePaymentChannelAPI{} diff --git a/internal/app/go-filecoin/paymentchannel/testing/fake_paych_actor_util.go b/internal/app/go-filecoin/paymentchannel/testing/fake_paych_actor_util.go deleted file mode 100644 index e5b37edc61..0000000000 --- a/internal/app/go-filecoin/paymentchannel/testing/fake_paych_actor_util.go +++ /dev/null @@ -1,80 +0,0 @@ -package testing - -import ( - "context" - "math/big" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/shared_testutil" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// FakePaychActorUtil fulfils the MsgSender and MsgWaiter interfaces for a Manager -// via the specs_actors mock runtime. It executes paych.Actor exports directly. -type FakePaychActorUtil struct { - *testing.T - Balance types.AttoFIL - PaychAddr, PaychIDAddr, Client, ClientID, Miner address.Address - SendErr error - result MsgResult -} - -// Send stubs a message Sender -func (fai *FakePaychActorUtil) Send(ctx context.Context, - from, to address.Address, - value types.AttoFIL, - gasPrice types.AttoFIL, - gasLimit gas.Unit, - bcast bool, - method abi.MethodNum, - params interface{}) (mcid cid.Cid, pubErrCh chan error, err error) { - - if fai.result != msgRcptsUndef { - mcid = fai.result.MsgCid - } - - fai.doSend(value) - return mcid, pubErrCh, fai.SendErr -} - -// Wait stubs a message Waiter -func (fai *FakePaychActorUtil) Wait(_ context.Context, _ cid.Cid, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error { - res := fai.result - return cb(res.Block, res.Msg, res.Rcpt) -} - -// StubSendFundsMessage sets expectations for a message that just sends funds to the actor -func (fai *FakePaychActorUtil) StubSendFundsResponse(from address.Address, amt abi.TokenAmount, code exitcode.ExitCode, height int64) cid.Cid { - newCID := shared_testutil.GenerateCids(1)[0] - - msg := types.NewUnsignedMessage(from, fai.PaychAddr, 1, amt, builtin.MethodSend, []byte{}) - msg.GasPrice = abi.NewTokenAmount(100) - msg.GasLimit = gas.NewGas(5000) - - emptySig := crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte{'0'}} - fai.result = MsgResult{ - Block: &block.Block{Height: abi.ChainEpoch(height)}, - Msg: &types.SignedMessage{Message: *msg, Signature: emptySig}, - DecodedParams: nil, - MsgCid: newCID, - Rcpt: &vm.MessageReceipt{ExitCode: code}, - } - return newCID -} - -func (fai *FakePaychActorUtil) doSend(amt abi.TokenAmount) { - require.Equal(fai, amt, fai.result.Msg.Message.Value) - nb := big.NewInt(0).Add(fai.Balance.Int, amt.Int) - fai.Balance = types.NewAttoFIL(nb) -} diff --git a/internal/app/go-filecoin/paymentchannel/testing/fake_state_viewer.go b/internal/app/go-filecoin/paymentchannel/testing/fake_state_viewer.go deleted file mode 100644 index 807c6f4228..0000000000 --- a/internal/app/go-filecoin/paymentchannel/testing/fake_state_viewer.go +++ /dev/null @@ -1,78 +0,0 @@ -package testing - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/shared" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paymentchannel" -) - -type FakeStateViewer struct { - view *FakeStateView -} - -// NewFakeStateViewer initializes a new FakeStateViewer -func NewFakeStateViewer(t *testing.T) *FakeStateViewer { - view := &FakeStateView{ - t: t, - actors: make(map[address.Address]*FakeActorState), - } - return &FakeStateViewer{view: view} -} - -// GetStateView returns the fake state view as a paymentchannel.ManagerStateView interface -func (f FakeStateViewer) GetStateView(ctx context.Context, tok shared.TipSetToken) (paymentchannel.ManagerStateView, error) { - return f.view, nil -} - -// GetFakeStateView returns the FakeStateView as itself so test setup can be done. -func (f FakeStateViewer) GetFakeStateView() *FakeStateView { - return f.view -} - -// FakeStateView mocks a state view for payment channel actor testing -type FakeStateView struct { - t *testing.T - actors map[address.Address]*FakeActorState - PaychActorPartiesErr, ResolveAddressAtErr, MinerControlErr error -} - -var _ paymentchannel.ManagerStateView = new(FakeStateView) - -// FakeActorState is a mock actor state containing test info -type FakeActorState struct { - To, From, IDAddr, MinerWorker address.Address -} - -// MinerControlAddresses mocks returning miner worker and miner actor address -func (f *FakeStateView) MinerControlAddresses(_ context.Context, addr address.Address) (owner, worker address.Address, err error) { - actorState, ok := f.actors[addr] - if !ok { - f.t.Fatalf("actor doesn't exist: %s", addr.String()) - } - return address.Undef, actorState.MinerWorker, f.MinerControlErr -} - -// PaychActorParties mocks returning the From and To addrs of a paych.Actor -func (f *FakeStateView) PaychActorParties(_ context.Context, paychAddr address.Address) (from, to address.Address, err error) { - st, ok := f.actors[paychAddr] - if !ok { - f.t.Fatalf("actor does not exist %s", paychAddr.String()) - } - return st.From, st.To, f.PaychActorPartiesErr -} - -// AddActorWithState sets up a mock state for actorAddr -func (f *FakeStateView) AddActorWithState(actorAddr, from, to, id address.Address) { - f.actors[actorAddr] = &FakeActorState{to, from, id, address.Undef} -} - -// AddMinerWithState sets up a mock state for a miner actor with a worker address -func (f *FakeStateView) AddMinerWithState(minerActor, minerWorker address.Address) { - f.actors[minerActor] = &FakeActorState{MinerWorker: minerWorker} -} - -var _ paymentchannel.ActorStateViewer = &FakeStateViewer{} diff --git a/internal/app/go-filecoin/paymentchannel/types.go b/internal/app/go-filecoin/paymentchannel/types.go deleted file mode 100644 index 254e75243c..0000000000 --- a/internal/app/go-filecoin/paymentchannel/types.go +++ /dev/null @@ -1,56 +0,0 @@ -package paymentchannel - -import ( - "reflect" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin/paych" -) - -//go:generate cbor-gen-for ChannelInfo VoucherInfo - -// The key for the store is the payment channel's "robust" or "unique" address - -// ChannelInfo is the primary payment channel record -// UniqueAddr: aka RobustAddr, used externally to refer to payment channel -// Duplicated in data due to need to check for existing payment channel since you can't -// iterate over key/value pairs in statestore at present -type ChannelInfo struct { - UniqueAddr, From, To address.Address - NextLane, NextNonce uint64 - Vouchers []*VoucherInfo // All vouchers submitted for this channel -} - -// IsZero returns whether it is a zeroed/blank ChannelInfo -func (ci *ChannelInfo) IsZero() bool { - return ci.UniqueAddr.Empty() && ci.To.Empty() && ci.From.Empty() && - ci.NextLane == 0 && len(ci.Vouchers) == 0 -} - -// HasVoucher returns true if `voucher` is already in `info` -func (ci *ChannelInfo) HasVoucher(voucher *paych.SignedVoucher) bool { - for _, v := range ci.Vouchers { - if reflect.DeepEqual(*v.Voucher, *voucher) { - return true - } - } - return false -} - -// LargestVoucherAmount returns the largest stored voucher amount -func (ci *ChannelInfo) LargestVoucherAmount() abi.TokenAmount { - res := abi.NewTokenAmount(0) - for _, v := range ci.Vouchers { - if v.Voucher.Amount.GreaterThan(res) { - res = v.Voucher.Amount - } - } - return res -} - -// VoucherInfo is a record of a voucher submitted for a payment channel -type VoucherInfo struct { - Voucher *paych.SignedVoucher - Proof []byte -} diff --git a/internal/app/go-filecoin/paymentchannel/types_cbor_gen.go b/internal/app/go-filecoin/paymentchannel/types_cbor_gen.go deleted file mode 100644 index 9ace18622f..0000000000 --- a/internal/app/go-filecoin/paymentchannel/types_cbor_gen.go +++ /dev/null @@ -1,240 +0,0 @@ -// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. - -package paymentchannel - -import ( - "fmt" - "io" - - "github.com/filecoin-project/specs-actors/actors/builtin/paych" - cbg "github.com/whyrusleeping/cbor-gen" - xerrors "golang.org/x/xerrors" -) - -var _ = xerrors.Errorf - -func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { - if t == nil { - _, err := w.Write(cbg.CborNull) - return err - } - if _, err := w.Write([]byte{134}); err != nil { - return err - } - - // t.UniqueAddr (address.Address) (struct) - if err := t.UniqueAddr.MarshalCBOR(w); err != nil { - return err - } - - // t.From (address.Address) (struct) - if err := t.From.MarshalCBOR(w); err != nil { - return err - } - - // t.To (address.Address) (struct) - if err := t.To.MarshalCBOR(w); err != nil { - return err - } - - // t.NextLane (uint64) (uint64) - if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.NextLane))); err != nil { - return err - } - - // t.NextNonce (uint64) (uint64) - if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.NextNonce))); err != nil { - return err - } - - // t.Vouchers ([]*paymentchannel.VoucherInfo) (slice) - if len(t.Vouchers) > cbg.MaxLength { - return xerrors.Errorf("Slice value in field t.Vouchers was too long") - } - - if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajArray, uint64(len(t.Vouchers)))); err != nil { - return err - } - for _, v := range t.Vouchers { - if err := v.MarshalCBOR(w); err != nil { - return err - } - } - return nil -} - -func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) error { - br := cbg.GetPeeker(r) - - maj, extra, err := cbg.CborReadHeader(br) - if err != nil { - return err - } - if maj != cbg.MajArray { - return fmt.Errorf("cbor input should be of type array") - } - - if extra != 6 { - return fmt.Errorf("cbor input had wrong number of fields") - } - - // t.UniqueAddr (address.Address) (struct) - - { - - if err := t.UniqueAddr.UnmarshalCBOR(br); err != nil { - return err - } - - } - // t.From (address.Address) (struct) - - { - - if err := t.From.UnmarshalCBOR(br); err != nil { - return err - } - - } - // t.To (address.Address) (struct) - - { - - if err := t.To.UnmarshalCBOR(br); err != nil { - return err - } - - } - // t.NextLane (uint64) (uint64) - - maj, extra, err = cbg.CborReadHeader(br) - if err != nil { - return err - } - if maj != cbg.MajUnsignedInt { - return fmt.Errorf("wrong type for uint64 field") - } - t.NextLane = uint64(extra) - // t.NextNonce (uint64) (uint64) - - maj, extra, err = cbg.CborReadHeader(br) - if err != nil { - return err - } - if maj != cbg.MajUnsignedInt { - return fmt.Errorf("wrong type for uint64 field") - } - t.NextNonce = uint64(extra) - // t.Vouchers ([]*paymentchannel.VoucherInfo) (slice) - - maj, extra, err = cbg.CborReadHeader(br) - if err != nil { - return err - } - - if extra > cbg.MaxLength { - return fmt.Errorf("t.Vouchers: array too large (%d)", extra) - } - - if maj != cbg.MajArray { - return fmt.Errorf("expected cbor array") - } - if extra > 0 { - t.Vouchers = make([]*VoucherInfo, extra) - } - for i := 0; i < int(extra); i++ { - - var v VoucherInfo - if err := v.UnmarshalCBOR(br); err != nil { - return err - } - - t.Vouchers[i] = &v - } - - return nil -} - -func (t *VoucherInfo) MarshalCBOR(w io.Writer) error { - if t == nil { - _, err := w.Write(cbg.CborNull) - return err - } - if _, err := w.Write([]byte{130}); err != nil { - return err - } - - // t.Voucher (paych.SignedVoucher) (struct) - if err := t.Voucher.MarshalCBOR(w); err != nil { - return err - } - - // t.Proof ([]uint8) (slice) - if len(t.Proof) > cbg.ByteArrayMaxLen { - return xerrors.Errorf("Byte array in field t.Proof was too long") - } - - if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajByteString, uint64(len(t.Proof)))); err != nil { - return err - } - if _, err := w.Write(t.Proof); err != nil { - return err - } - return nil -} - -func (t *VoucherInfo) UnmarshalCBOR(r io.Reader) error { - br := cbg.GetPeeker(r) - - maj, extra, err := cbg.CborReadHeader(br) - if err != nil { - return err - } - if maj != cbg.MajArray { - return fmt.Errorf("cbor input should be of type array") - } - - if extra != 2 { - return fmt.Errorf("cbor input had wrong number of fields") - } - - // t.Voucher (paych.SignedVoucher) (struct) - - { - - pb, err := br.PeekByte() - if err != nil { - return err - } - if pb == cbg.CborNull[0] { - var nbuf [1]byte - if _, err := br.Read(nbuf[:]); err != nil { - return err - } - } else { - t.Voucher = new(paych.SignedVoucher) - if err := t.Voucher.UnmarshalCBOR(br); err != nil { - return err - } - } - - } - // t.Proof ([]uint8) (slice) - - maj, extra, err = cbg.CborReadHeader(br) - if err != nil { - return err - } - - if extra > cbg.ByteArrayMaxLen { - return fmt.Errorf("t.Proof: byte array too large (%d)", extra) - } - if maj != cbg.MajByteString { - return fmt.Errorf("expected byte array") - } - t.Proof = make([]byte, extra) - if _, err := io.ReadFull(br, t.Proof); err != nil { - return err - } - return nil -} diff --git a/internal/app/go-filecoin/plumbing/api.go b/internal/app/go-filecoin/plumbing/api.go deleted file mode 100644 index cc2ef2157d..0000000000 --- a/internal/app/go-filecoin/plumbing/api.go +++ /dev/null @@ -1,351 +0,0 @@ -package plumbing - -import ( - "context" - "io" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - acrypto "github.com/filecoin-project/specs-actors/actors/crypto" - "github.com/ipfs/go-cid" - ipld "github.com/ipfs/go-ipld-format" - logging "github.com/ipfs/go-log/v2" - "github.com/libp2p/go-libp2p-core/metrics" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p/p2p/protocol/ping" - ma "github.com/multiformats/go-multiaddr" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cfg" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cst" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/dag" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/status" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/net" - "github.com/filecoin-project/go-filecoin/internal/pkg/piecemanager" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/wallet" -) - -// API is the plumbing implementation, the irreducible set of calls required -// to implement protocols and user/network-facing features. You probably should -// depend on the higher level porcelain.API instead of this api, as it includes -// these calls in addition to higher level convenience calls to make them more -// ergonomic. -type API struct { - logger logging.EventLogger - - chain *cst.ChainStateReadWriter - syncer *cst.ChainSyncProvider - config *cfg.Config - dag *dag.DAG - expected consensus.Protocol - msgPool *message.Pool - msgPreviewer *msg.Previewer - msgWaiter *msg.Waiter - network *net.Network - outbox *message.Outbox - pieceManager func() piecemanager.PieceManager - wallet *wallet.Wallet -} - -// APIDeps contains all the API's dependencies -type APIDeps struct { - Chain *cst.ChainStateReadWriter - Sync *cst.ChainSyncProvider - Config *cfg.Config - DAG *dag.DAG - Expected consensus.Protocol - MsgPool *message.Pool - MsgPreviewer *msg.Previewer - MsgWaiter *msg.Waiter - Network *net.Network - Outbox *message.Outbox - PieceManager func() piecemanager.PieceManager - Wallet *wallet.Wallet -} - -// New constructs a new instance of the API. -func New(deps *APIDeps) *API { - return &API{ - logger: logging.Logger("porcelain"), - chain: deps.Chain, - syncer: deps.Sync, - config: deps.Config, - dag: deps.DAG, - expected: deps.Expected, - msgPool: deps.MsgPool, - msgPreviewer: deps.MsgPreviewer, - msgWaiter: deps.MsgWaiter, - network: deps.Network, - outbox: deps.Outbox, - pieceManager: deps.PieceManager, - wallet: deps.Wallet, - } -} - -// ActorGet returns an actor from the latest state on the chain -func (api *API) ActorGet(ctx context.Context, addr address.Address) (*actor.Actor, error) { - return api.chain.GetActor(ctx, addr) -} - -// ActorGetSignature returns the signature of the given actor's given method. -// The function signature is typically used to enable a caller to decode the -// output of an actor method call (message). -func (api *API) ActorGetSignature(ctx context.Context, actorAddr address.Address, method abi.MethodNum) (_ vm.ActorMethodSignature, err error) { - return api.chain.GetActorSignature(ctx, actorAddr, method) -} - -// ActorLs returns a channel with actors from the latest state on the chain -func (api *API) ActorLs(ctx context.Context) (<-chan state.GetAllActorsResult, error) { - return api.chain.LsActors(ctx) -} - -// BlockTime returns the block time used by the consensus protocol. -func (api *API) BlockTime() time.Duration { - return api.expected.BlockTime() -} - -// ConfigSet sets the given parameters at the given path in the local config. -// The given path may be either a single field name, or a dotted path to a field. -// The JSON value may be either a single value or a whole data structure to be replace. -// For example: -// ConfigSet("datastore.path", "dev/null") and ConfigSet("datastore", "{\"path\":\"dev/null\"}") -// are the same operation. -func (api *API) ConfigSet(dottedPath string, paramJSON string) error { - return api.config.Set(dottedPath, paramJSON) -} - -// ConfigGet gets config parameters from the given path. -// The path may be either a single field name, or a dotted path to a field. -func (api *API) ConfigGet(dottedPath string) (interface{}, error) { - return api.config.Get(dottedPath) -} - -// ChainGetBlock gets a block by CID -func (api *API) ChainGetBlock(ctx context.Context, id cid.Cid) (*block.Block, error) { - return api.chain.GetBlock(ctx, id) -} - -// ChainGetMessages gets a message collection by CID -func (api *API) ChainGetMessages(ctx context.Context, metaCid cid.Cid) ([]*types.UnsignedMessage, []*types.SignedMessage, error) { - return api.chain.GetMessages(ctx, metaCid) -} - -// ChainGetReceipts gets a receipt collection by CID -func (api *API) ChainGetReceipts(ctx context.Context, id cid.Cid) ([]vm.MessageReceipt, error) { - return api.chain.GetReceipts(ctx, id) -} - -// ChainHeadKey returns the head tipset key -func (api *API) ChainHeadKey() block.TipSetKey { - return api.chain.Head() -} - -// ChainSetHead sets `key` as the new head of this chain iff it exists in the nodes chain store. -func (api *API) ChainSetHead(ctx context.Context, key block.TipSetKey) error { - return api.chain.SetHead(ctx, key) -} - -// ChainTipSet returns the tipset at the given key -func (api *API) ChainTipSet(key block.TipSetKey) (block.TipSet, error) { - return api.chain.GetTipSet(key) -} - -// ChainLs returns an iterator of tipsets from head to genesis -func (api *API) ChainLs(ctx context.Context) (*chain.TipsetIterator, error) { - return api.chain.Ls(ctx) -} - -func (api *API) SampleChainRandomness(ctx context.Context, head block.TipSetKey, tag acrypto.DomainSeparationTag, - epoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { - return api.chain.SampleChainRandomness(ctx, head, tag, epoch, entropy) -} - -// SyncerStatus returns the current status of the active or last active chain sync operation. -func (api *API) SyncerStatus() status.Status { - return api.syncer.Status() -} - -// ChainSyncHandleNewTipSet submits a chain head to the syncer for processing. -func (api *API) ChainSyncHandleNewTipSet(ci *block.ChainInfo) error { - return api.syncer.HandleNewTipSet(ci) -} - -// ChainExport exports the chain from `head` up to and including the genesis block to `out` -func (api *API) ChainExport(ctx context.Context, head block.TipSetKey, out io.Writer) error { - return api.chain.ChainExport(ctx, head, out) -} - -// ChainImport imports a chain from `in`. -func (api *API) ChainImport(ctx context.Context, in io.Reader) (block.TipSetKey, error) { - return api.chain.ChainImport(ctx, in) -} - -// OutboxQueues lists addresses with non-empty outbox queues (in no particular order). -func (api *API) OutboxQueues() []address.Address { - return api.outbox.Queue().Queues() -} - -// OutboxQueueLs lists messages in the queue for an address. -func (api *API) OutboxQueueLs(sender address.Address) []*message.Queued { - return api.outbox.Queue().List(sender) -} - -// OutboxQueueClear clears messages in the queue for an address/ -func (api *API) OutboxQueueClear(ctx context.Context, sender address.Address) { - api.outbox.Queue().Clear(ctx, sender) -} - -// MessagePoolPending lists messages un-mined in the pool -func (api *API) MessagePoolPending() []*types.SignedMessage { - return api.msgPool.Pending() -} - -// MessagePoolGet fetches a message from the pool. -func (api *API) MessagePoolGet(cid cid.Cid) (value *types.SignedMessage, ok bool) { - return api.msgPool.Get(cid) -} - -// MessagePoolRemove removes a message from the message pool. -func (api *API) MessagePoolRemove(cid cid.Cid) { - api.msgPool.Remove(cid) -} - -// MessagePreview previews the Gas cost of a message by running it locally on the client and -// recording the amount of Gas used. -func (api *API) MessagePreview(ctx context.Context, from, to address.Address, method abi.MethodNum, params ...interface{}) (gas.Unit, error) { - return api.msgPreviewer.Preview(ctx, from, to, method, params...) -} - -// StateView loads the state view for a tipset, i.e. the state *after* the application of the tipset's messages. -func (api *API) StateView(baseKey block.TipSetKey) (*appstate.View, error) { - return api.chain.StateView(baseKey) -} - -// MessageSend sends a message. It uses the default from address if none is given and signs the -// message using the wallet. This call "sends" in the sense that it enqueues the -// message in the msg pool and broadcasts it to the network; it does not wait for the -// message to go on chain. Note that no default from address is provided. The error -// channel returned receives either nil or an error and is immediately closed after -// the message is published to the network to signal that the publish is complete. -func (api *API) MessageSend(ctx context.Context, from, to address.Address, value types.AttoFIL, gasPrice types.AttoFIL, gasLimit gas.Unit, method abi.MethodNum, params interface{}) (cid.Cid, chan error, error) { - return api.outbox.Send(ctx, from, to, value, gasPrice, gasLimit, true, method, params) -} - -//SignedMessageSend sends a siged message. -func (api *API) SignedMessageSend(ctx context.Context, smsg *types.SignedMessage) (cid.Cid, chan error, error) { - return api.outbox.SignedSend(ctx, smsg, true) -} - -// MessageWait invokes the callback when a message with the given cid appears on chain. -// It will find the message in both the case that it is already on chain and -// the case that it appears in a newly mined block. An error is returned if one is -// encountered or if the context is canceled. Otherwise, it waits forever for the message -// to appear on chain. -func (api *API) MessageWait(ctx context.Context, msgCid cid.Cid, lookback uint64, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error { - return api.msgWaiter.Wait(ctx, msgCid, lookback, cb) -} - -// NetworkGetBandwidthStats gets stats on the current bandwidth usage of the network -func (api *API) NetworkGetBandwidthStats() metrics.Stats { - return api.network.GetBandwidthStats() -} - -// NetworkGetPeerAddresses gets the current addresses of the node -func (api *API) NetworkGetPeerAddresses() []ma.Multiaddr { - return api.network.GetPeerAddresses() -} - -// NetworkGetPeerID gets the current peer id of the node -func (api *API) NetworkGetPeerID() peer.ID { - return api.network.GetPeerID() -} - -// NetworkFindProvidersAsync issues a findProviders query to the filecoin network content router. -func (api *API) NetworkFindProvidersAsync(ctx context.Context, key cid.Cid, count int) <-chan peer.AddrInfo { - return api.network.Router.FindProvidersAsync(ctx, key, count) -} - -// NetworkGetClosestPeers issues a getClosestPeers query to the filecoin network. -func (api *API) NetworkGetClosestPeers(ctx context.Context, key string) (<-chan peer.ID, error) { - return api.network.GetClosestPeers(ctx, key) -} - -// NetworkPing sends echo request packets over the network. -func (api *API) NetworkPing(ctx context.Context, pid peer.ID) (<-chan ping.Result, error) { - return api.network.Pinger.Ping(ctx, pid) -} - -// NetworkFindPeer searches the libp2p router for a given peer id -func (api *API) NetworkFindPeer(ctx context.Context, peerID peer.ID) (peer.AddrInfo, error) { - return api.network.FindPeer(ctx, peerID) -} - -// NetworkConnect connects to peers at the given addresses -func (api *API) NetworkConnect(ctx context.Context, addrs []string) (<-chan net.ConnectionResult, error) { - return api.network.Connect(ctx, addrs) -} - -// NetworkPeers lists peers currently available on the network -func (api *API) NetworkPeers(ctx context.Context, verbose, latency, streams bool) (*net.SwarmConnInfos, error) { - return api.network.Peers(ctx, verbose, latency, streams) -} - -// WalletAddresses gets addresses from the wallet -func (api *API) WalletAddresses() []address.Address { - return api.wallet.Addresses() -} - -// WalletNewAddress generates a new wallet address -func (api *API) WalletNewAddress(protocol address.Protocol) (address.Address, error) { - return wallet.NewAddress(api.wallet, protocol) -} - -// WalletImport adds a given set of KeyInfos to the wallet -func (api *API) WalletImport(kinfos ...*crypto.KeyInfo) ([]address.Address, error) { - return api.wallet.Import(kinfos...) -} - -// WalletExport returns the KeyInfos for the given wallet addresses -func (api *API) WalletExport(addrs []address.Address) ([]*crypto.KeyInfo, error) { - return api.wallet.Export(addrs) -} - -// DAGGetNode returns the associated DAG node for the passed in CID. -func (api *API) DAGGetNode(ctx context.Context, ref string) (interface{}, error) { - return api.dag.GetNode(ctx, ref) -} - -// DAGGetFileSize returns the file size for a given Cid -func (api *API) DAGGetFileSize(ctx context.Context, c cid.Cid) (uint64, error) { - return api.dag.GetFileSize(ctx, c) -} - -// DAGCat returns an iostream with a piece of data stored on the merkeldag with -// the given cid. -func (api *API) DAGCat(ctx context.Context, c cid.Cid) (io.Reader, error) { - return api.dag.Cat(ctx, c) -} - -// DAGImportData adds data from an io reader to the merkledag and returns the -// Cid of the given data. Once the data is in the DAG, it can fetched from the -// node via Bitswap and a copy will be kept in the blockstore. -func (api *API) DAGImportData(ctx context.Context, data io.Reader) (ipld.Node, error) { - return api.dag.ImportData(ctx, data) -} - -// PieceManager returns the piece manager -func (api *API) PieceManager() piecemanager.PieceManager { - return api.pieceManager() -} diff --git a/internal/app/go-filecoin/plumbing/cfg/config.go b/internal/app/go-filecoin/plumbing/cfg/config.go deleted file mode 100644 index 21533cabd6..0000000000 --- a/internal/app/go-filecoin/plumbing/cfg/config.go +++ /dev/null @@ -1,35 +0,0 @@ -package cfg - -import ( - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "sync" -) - -// Config is plumbing implementation for setting and retrieving values from local config. -type Config struct { - repo repo.Repo - lock sync.Mutex -} - -// NewConfig returns a new Config. -func NewConfig(repo repo.Repo) *Config { - return &Config{repo: repo} -} - -// Set sets a value in config -func (s *Config) Set(dottedKey string, jsonString string) error { - s.lock.Lock() - defer s.lock.Unlock() - - cfg := s.repo.Config() - if err := cfg.Set(dottedKey, jsonString); err != nil { - return err - } - - return s.repo.ReplaceConfig(cfg) -} - -// Get gets a value from config -func (s *Config) Get(dottedKey string) (interface{}, error) { - return s.repo.Config().Get(dottedKey) -} diff --git a/internal/app/go-filecoin/plumbing/cfg/config_test.go b/internal/app/go-filecoin/plumbing/cfg/config_test.go deleted file mode 100644 index 5dc76b7540..0000000000 --- a/internal/app/go-filecoin/plumbing/cfg/config_test.go +++ /dev/null @@ -1,121 +0,0 @@ -package cfg - -import ( - "testing" - - "github.com/filecoin-project/go-address" - - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestConfigGet(t *testing.T) { - tf.UnitTest(t) - - t.Run("emits the referenced config value", func(t *testing.T) { - repo := repo.NewInMemoryRepo() - cfgAPI := NewConfig(repo) - - out, err := cfgAPI.Get("bootstrap") - - require.NoError(t, err) - expected := config.NewDefaultConfig().Bootstrap - assert.Equal(t, expected, out) - }) - - t.Run("failure cases fail", func(t *testing.T) { - repo := repo.NewInMemoryRepo() - cfgAPI := NewConfig(repo) - - _, err := cfgAPI.Get("nonexistantkey") - assert.EqualError(t, err, "key: nonexistantkey invalid for config") - - _, err = cfgAPI.Get("bootstrap.nope") - assert.EqualError(t, err, "key: bootstrap.nope invalid for config") - - _, err = cfgAPI.Get(".inval.id-key") - assert.EqualError(t, err, "key: .inval.id-key invalid for config") - }) -} - -func TestConfigSet(t *testing.T) { - tf.UnitTest(t) - - t.Run("sets the config value", func(t *testing.T) { - defaultCfg := config.NewDefaultConfig() - - repo := repo.NewInMemoryRepo() - cfgAPI := NewConfig(repo) - - jsonBlob := `{"addresses": ["bootup1", "bootup2"]}` - - err := cfgAPI.Set("bootstrap", jsonBlob) - require.NoError(t, err) - out, err := cfgAPI.Get("bootstrap") - require.NoError(t, err) - - // validate output - expected := config.NewDefaultConfig().Bootstrap - expected.Addresses = []string{"bootup1", "bootup2"} - assert.Equal(t, expected, out) - - // validate config write - cfg := repo.Config() - assert.Equal(t, expected, cfg.Bootstrap) - assert.Equal(t, defaultCfg.Datastore, cfg.Datastore) - - err = cfgAPI.Set("api.address", ":1234") - require.NoError(t, err) - assert.Equal(t, ":1234", cfg.API.Address) - - testAddr := vmaddr.RequireIDAddress(t, 100).String() - err = cfgAPI.Set("mining.minerAddress", testAddr) - require.NoError(t, err) - assert.Equal(t, testAddr, cfg.Mining.MinerAddress.String()) - - err = cfgAPI.Set("wallet.defaultAddress", testAddr) - require.NoError(t, err) - assert.Equal(t, testAddr, cfg.Wallet.DefaultAddress.String()) - - testSwarmAddr := "/ip4/0.0.0.0/tcp/0" - err = cfgAPI.Set("swarm.address", testSwarmAddr) - require.NoError(t, err) - assert.Equal(t, testSwarmAddr, cfg.Swarm.Address) - - err = cfgAPI.Set("datastore.path", "/dev/null") - require.NoError(t, err) - assert.Equal(t, "/dev/null", cfg.Datastore.Path) - }) - - t.Run("failure cases fail", func(t *testing.T) { - repo := repo.NewInMemoryRepo() - cfgAPI := NewConfig(repo) - - // bad key - jsonBlob := `{"addresses": ["bootup1", "bootup2"]}` - - err := cfgAPI.Set("botstrap", jsonBlob) - assert.EqualError(t, err, "json: unknown field \"botstrap\"") - - // bad value type (bootstrap is a struct not a list) - jsonBlobBadType := `["bootup1", "bootup2"]` - err = cfgAPI.Set("bootstrap", jsonBlobBadType) - assert.Error(t, err) - - // bad JSON - jsonBlobInvalid := `{"addresses": [bootup1, "bootup2"]}` - - err = cfgAPI.Set("bootstrap", jsonBlobInvalid) - assert.EqualError(t, err, "json: cannot unmarshal string into Go struct field Config.bootstrap of type config.BootstrapConfig") - - // bad address - jsonBlobBadAddr := "f4cqnyc0muxjajygqavu645m8ja04vckk2kcorrupt" - err = cfgAPI.Set("wallet.defaultAddress", jsonBlobBadAddr) - assert.EqualError(t, err, address.ErrUnknownProtocol.Error()) - }) - -} diff --git a/internal/app/go-filecoin/plumbing/cst/chain_state.go b/internal/app/go-filecoin/plumbing/cst/chain_state.go deleted file mode 100644 index 5c190c6be4..0000000000 --- a/internal/app/go-filecoin/plumbing/cst/chain_state.go +++ /dev/null @@ -1,349 +0,0 @@ -package cst - -import ( - "context" - "fmt" - "io" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - initactor "github.com/filecoin-project/specs-actors/actors/builtin/init" - acrypto "github.com/filecoin-project/specs-actors/actors/crypto" - blocks "github.com/ipfs/go-block-format" - "github.com/ipfs/go-blockservice" - "github.com/ipfs/go-cid" - blockstore "github.com/ipfs/go-ipfs-blockstore" - offline "github.com/ipfs/go-ipfs-exchange-offline" - format "github.com/ipfs/go-ipld-format" - logging "github.com/ipfs/go-log/v2" - merkdag "github.com/ipfs/go-merkledag" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/dag" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/slashing" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - vmstate "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -var logStore = logging.Logger("plumbing/chain_store") - -type chainReadWriter interface { - GetHead() block.TipSetKey - GetGenesisBlock(ctx context.Context) (*block.Block, error) - GetTipSet(block.TipSetKey) (block.TipSet, error) - GetTipSetState(context.Context, block.TipSetKey) (vmstate.Tree, error) - GetTipSetStateRoot(block.TipSetKey) (cid.Cid, error) - SetHead(context.Context, block.TipSet) error - ReadOnlyStateStore() cborutil.ReadOnlyIpldStore -} - -// ChainStateReadWriter composes a: -// ChainReader providing read access to the chain and its associated state. -// ChainWriter providing write access to the chain head. -type ChainStateReadWriter struct { - readWriter chainReadWriter - bstore blockstore.Blockstore // Provides chain blocks. - messageProvider chain.MessageProvider - actors vm.ActorCodeLoader - cborutil.ReadOnlyIpldStore -} - -type actorStore struct { - ctx context.Context - cborutil.ReadOnlyIpldStore -} - -func (as *actorStore) Context() context.Context { - return as.ctx -} - -type carStore struct { - store blockstore.Blockstore -} - -func newCarStore(bs blockstore.Blockstore) *carStore { - return &carStore{bs} -} - -func (cs *carStore) Put(b blocks.Block) error { - return cs.store.Put(b) -} - -type actorNotRegisteredError struct{} - -func (e actorNotRegisteredError) Error() string { - return "actor not registered" -} - -func (e actorNotRegisteredError) ActorNotFound() bool { - return true -} - -var ( - // ErrNoMethod is returned by Get when there is no method signature (eg, transfer). - ErrNoMethod = errors.New("no method") - // ErrNoActorImpl is returned by Get when the actor implementation doesn't exist, eg - // the actor address is an empty actor, an address that has received a transfer of FIL - // but hasn't yet been upgraded to an account actor. (The actor implementation might - // also genuinely be missing, which is not expected.) - ErrNoActorImpl = errors.New("no actor implementation") -) - -// NewChainStateReadWriter returns a new ChainStateReadWriter. -func NewChainStateReadWriter(crw chainReadWriter, messages chain.MessageProvider, bs blockstore.Blockstore, ba vm.ActorCodeLoader) *ChainStateReadWriter { - return &ChainStateReadWriter{ - readWriter: crw, - bstore: bs, - messageProvider: messages, - actors: ba, - ReadOnlyIpldStore: crw.ReadOnlyStateStore(), - } -} - -// Head returns the head tipset -func (chn *ChainStateReadWriter) Head() block.TipSetKey { - return chn.readWriter.GetHead() -} - -// GetTipSet returns the tipset at the given key -func (chn *ChainStateReadWriter) GetTipSet(key block.TipSetKey) (block.TipSet, error) { - return chn.readWriter.GetTipSet(key) -} - -// Ls returns an iterator over tipsets from head to genesis. -func (chn *ChainStateReadWriter) Ls(ctx context.Context) (*chain.TipsetIterator, error) { - ts, err := chn.readWriter.GetTipSet(chn.readWriter.GetHead()) - if err != nil { - return nil, err - } - return chain.IterAncestors(ctx, chn.readWriter, ts), nil -} - -// GetBlock gets a block by CID -func (chn *ChainStateReadWriter) GetBlock(ctx context.Context, id cid.Cid) (*block.Block, error) { - bsblk, err := chn.bstore.Get(id) - if err != nil { - return nil, err - } - return block.DecodeBlock(bsblk.RawData()) -} - -func (chn *ChainStateReadWriter) ReadObj(ctx context.Context, obj cid.Cid) ([]byte, error) { - blk, err := chn.bstore.Get(obj) - if err != nil { - return nil, err - } - - return blk.RawData(), nil -} - -// GetMessages gets a message collection by CID returned as unsigned bls and signed secp -func (chn *ChainStateReadWriter) GetMessages(ctx context.Context, metaCid cid.Cid) ([]*types.UnsignedMessage, []*types.SignedMessage, error) { - secp, bls, err := chn.messageProvider.LoadMessages(ctx, metaCid) - if err != nil { - return []*types.UnsignedMessage{}, []*types.SignedMessage{}, err - } - return bls, secp, nil -} - -// GetReceipts gets a receipt collection by CID. -func (chn *ChainStateReadWriter) GetReceipts(ctx context.Context, id cid.Cid) ([]vm.MessageReceipt, error) { - return chn.messageProvider.LoadReceipts(ctx, id) -} - -// SampleChainRandomness computes randomness seeded by a ticket from the chain `head` at `sampleHeight`. -func (chn *ChainStateReadWriter) SampleChainRandomness(ctx context.Context, head block.TipSetKey, tag acrypto.DomainSeparationTag, - epoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { - genBlk, err := chn.readWriter.GetGenesisBlock(ctx) - if err != nil { - return nil, err - } - rnd := crypto.ChainRandomnessSource{Sampler: chain.NewRandomnessSamplerAtHead(chn.readWriter, genBlk.Ticket, head)} - return rnd.Randomness(ctx, tag, epoch, entropy) -} - -// GetActor returns an actor from the latest state on the chain -func (chn *ChainStateReadWriter) GetActor(ctx context.Context, addr address.Address) (*actor.Actor, error) { - return chn.GetActorAt(ctx, chn.readWriter.GetHead(), addr) -} - -// GetTipSetStateRoot produces the state root for the provided tipset key. -func (chn *ChainStateReadWriter) GetTipSetStateRoot(ctx context.Context, tipKey block.TipSetKey) (cid.Cid, error) { - return chn.readWriter.GetTipSetStateRoot(tipKey) -} - -// GetActorAt returns an actor at a specified tipset key. -func (chn *ChainStateReadWriter) GetActorAt(ctx context.Context, tipKey block.TipSetKey, addr address.Address) (*actor.Actor, error) { - st, err := chn.readWriter.GetTipSetState(ctx, tipKey) - if err != nil { - return nil, errors.Wrap(err, "failed to load latest state") - } - - idAddr, err := chn.ResolveAddressAt(ctx, tipKey, addr) - if err != nil { - return nil, err - } - - actr, found, err := st.GetActor(ctx, idAddr) - if err != nil { - return nil, err - } - if !found { - return nil, types.ErrNotFound - } - return actr, nil -} - -// GetActorStateAt returns the root state of an actor at a given point in the chain (specified by tipset key) -func (chn *ChainStateReadWriter) GetActorStateAt(ctx context.Context, tipKey block.TipSetKey, addr address.Address, out interface{}) error { - act, err := chn.GetActorAt(ctx, tipKey, addr) - if err != nil { - return err - } - - blk, err := chn.bstore.Get(act.Head.Cid) - if err != nil { - return err - } - - return encoding.Decode(blk.RawData(), out) -} - -// ResolveAddressAt resolves ID address for actor -func (chn *ChainStateReadWriter) ResolveAddressAt(ctx context.Context, tipKey block.TipSetKey, addr address.Address) (address.Address, error) { - st, err := chn.readWriter.GetTipSetState(ctx, tipKey) - if err != nil { - return address.Undef, errors.Wrap(err, "failed to load latest state") - } - - init, found, err := st.GetActor(ctx, builtin.InitActorAddr) - if err != nil { - return address.Undef, err - } - if !found { - return address.Undef, errors.Wrapf(err, "no actor at address %s", addr) - } - - blk, err := chn.bstore.Get(init.Head.Cid) - if err != nil { - return address.Undef, err - } - - var state initactor.State - err = encoding.Decode(blk.RawData(), &state) - if err != nil { - return address.Undef, err - } - - return state.ResolveAddress(&actorStore{ctx, chn.ReadOnlyIpldStore}, addr) -} - -// LsActors returns a channel with actors from the latest state on the chain -func (chn *ChainStateReadWriter) LsActors(ctx context.Context) (<-chan vmstate.GetAllActorsResult, error) { - st, err := chn.readWriter.GetTipSetState(ctx, chn.readWriter.GetHead()) - if err != nil { - return nil, err - } - return st.GetAllActors(ctx), nil -} - -// GetActorSignature returns the signature of the given actor's given method. -// The function signature is typically used to enable a caller to decode the -// output of an actor method call (message). -func (chn *ChainStateReadWriter) GetActorSignature(ctx context.Context, actorAddr address.Address, method abi.MethodNum) (vm.ActorMethodSignature, error) { - if method == builtin.MethodSend { - return nil, ErrNoMethod - } - - actor, err := chn.GetActor(ctx, actorAddr) - if err != nil { - return nil, errors.Wrap(err, "failed to get actor") - } else if actor.Empty() { - return nil, ErrNoActorImpl - } - - // Dragons: this is broken, we need to ask the VM for the impl, it might need to apply migrations based on epoch - executable, err := chn.actors.GetActorImpl(actor.Code.Cid) - if err != nil { - return nil, errors.Wrap(err, "failed to load actor code") - } - - signature, err := executable.Signature(method) - if err != nil { - return nil, fmt.Errorf("missing export: %d", method) - } - - return signature, nil -} - -// SetHead sets `key` as the new head of this chain iff it exists in the nodes chain store. -func (chn *ChainStateReadWriter) SetHead(ctx context.Context, key block.TipSetKey) error { - headTs, err := chn.readWriter.GetTipSet(key) - if err != nil { - return err - } - return chn.readWriter.SetHead(ctx, headTs) -} - -// ReadOnlyStateStore returns a read-only state store. -func (chn *ChainStateReadWriter) ReadOnlyStateStore() cborutil.ReadOnlyIpldStore { - return chn.readWriter.ReadOnlyStateStore() -} - -// ChainExport exports the chain from `head` up to and including the genesis block to `out` -func (chn *ChainStateReadWriter) ChainExport(ctx context.Context, head block.TipSetKey, out io.Writer) error { - headTS, err := chn.GetTipSet(head) - if err != nil { - return err - } - logStore.Infof("starting CAR file export: %s", head.String()) - if err := chain.Export(ctx, headTS, chn.readWriter, chn.messageProvider, chn, out); err != nil { - return err - } - logStore.Infof("exported CAR file with head: %s", head.String()) - return nil -} - -// ChainImport imports a chain from `in`. -func (chn *ChainStateReadWriter) ChainImport(ctx context.Context, in io.Reader) (block.TipSetKey, error) { - logStore.Info("starting CAR file import") - headKey, err := chain.Import(ctx, newCarStore(chn.bstore), in) - if err != nil { - return block.UndefTipSet.Key(), err - } - logStore.Infof("imported CAR file with head: %s", headKey) - return headKey, nil -} - -// ChainStateTree returns the state tree as a slice of IPLD nodes at the passed stateroot cid `c`. -func (chn *ChainStateReadWriter) ChainStateTree(ctx context.Context, c cid.Cid) ([]format.Node, error) { - offl := offline.Exchange(chn.bstore) - blkserv := blockservice.New(chn.bstore, offl) - dserv := merkdag.NewDAGService(blkserv) - return dag.NewDAG(dserv).RecursiveGet(ctx, c) -} - -func (chn *ChainStateReadWriter) StateView(key block.TipSetKey) (*state.View, error) { - root, err := chn.readWriter.GetTipSetStateRoot(key) - if err != nil { - return nil, errors.Wrapf(err, "failed to get state root for %s", key.String()) - } - return state.NewView(chn, root), nil -} - -func (chn *ChainStateReadWriter) AccountStateView(key block.TipSetKey) (state.AccountStateView, error) { - return chn.StateView(key) -} - -func (chn *ChainStateReadWriter) FaultStateView(key block.TipSetKey) (slashing.FaultStateView, error) { - return chn.StateView(key) -} diff --git a/internal/app/go-filecoin/plumbing/cst/chain_sync.go b/internal/app/go-filecoin/plumbing/cst/chain_sync.go deleted file mode 100644 index a7019b7a75..0000000000 --- a/internal/app/go-filecoin/plumbing/cst/chain_sync.go +++ /dev/null @@ -1,38 +0,0 @@ -package cst - -import ( - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/status" -) - -type chainSync interface { - BlockProposer() chainsync.BlockProposer - Status() status.Status -} - -// ChainSyncProvider provides access to chain sync operations and their status. -type ChainSyncProvider struct { - sync chainSync -} - -// NewChainSyncProvider returns a new ChainSyncProvider. -func NewChainSyncProvider(chainSyncer chainSync) *ChainSyncProvider { - return &ChainSyncProvider{ - sync: chainSyncer, - } -} - -// Status returns the chains current status, this includes whether or not the syncer is currently -// running, the chain being synced, and the time it started processing said chain. -func (chs *ChainSyncProvider) Status() status.Status { - return chs.sync.Status() -} - -// HandleNewTipSet extends the Syncer's chain store with the given tipset if they -// represent a valid extension. It limits the length of new chains it will -// attempt to validate and caches invalid blocks it has encountered to -// help prevent DOS. -func (chs *ChainSyncProvider) HandleNewTipSet(ci *block.ChainInfo) error { - return chs.sync.BlockProposer().SendOwnBlock(ci) -} diff --git a/internal/app/go-filecoin/plumbing/dag/dag.go b/internal/app/go-filecoin/plumbing/dag/dag.go deleted file mode 100644 index 9cbd45276e..0000000000 --- a/internal/app/go-filecoin/plumbing/dag/dag.go +++ /dev/null @@ -1,156 +0,0 @@ -package dag - -import ( - "context" - "fmt" - "io" - - "github.com/ipfs/go-cid" - chunk "github.com/ipfs/go-ipfs-chunker" - format "github.com/ipfs/go-ipld-format" - ipld "github.com/ipfs/go-ipld-format" - "github.com/ipfs/go-merkledag" - dag "github.com/ipfs/go-merkledag" - "github.com/ipfs/go-path" - "github.com/ipfs/go-path/resolver" - "github.com/ipfs/go-unixfs" - imp "github.com/ipfs/go-unixfs/importer" - uio "github.com/ipfs/go-unixfs/io" - "github.com/pkg/errors" -) - -// DAG is a service for accessing the merkledag -type DAG struct { - dserv format.DAGService // Provides access to state tree. -} - -// NewDAG creates a DAG with a given DAGService -func NewDAG(dserv ipld.DAGService) *DAG { - return &DAG{ - dserv: dserv, - } -} - -// GetNode returns the associated DAG node for the passed in CID. -func (dag *DAG) GetNode(ctx context.Context, ref string) (interface{}, error) { - parsedRef, err := path.ParsePath(ref) - if err != nil { - return nil, err - } - - resolver := resolver.NewBasicResolver(dag.dserv) - - objc, rem, err := resolver.ResolveToLastNode(ctx, parsedRef) - if err != nil { - return nil, err - } - - obj, err := dag.dserv.Get(ctx, objc) - if err != nil { - return nil, err - } - - var out interface{} = obj - if len(rem) > 0 { - final, _, err := obj.Resolve(rem) - if err != nil { - return nil, err - } - out = final - } - - return out, nil -} - -// GetFileSize returns the file size for a given Cid -func (dag *DAG) GetFileSize(ctx context.Context, c cid.Cid) (uint64, error) { - fnode, err := dag.dserv.Get(ctx, c) - if err != nil { - return 0, err - } - switch n := fnode.(type) { - case *merkledag.ProtoNode: - return unixfs.DataSize(n.Data()) - case *merkledag.RawNode: - return n.Size() - default: - return 0, fmt.Errorf("unrecognized node type: %T", fnode) - } -} - -// Cat returns an iostream with a piece of data stored on the merkeldag with -// the given cid. -// -// TODO: this goes back to 'how is data stored and referenced' -// For now, lets just do things the ipfs way. -// https://github.com/filecoin-project/specs/issues/136 -func (dag *DAG) Cat(ctx context.Context, c cid.Cid) (uio.DagReader, error) { - data, err := dag.dserv.Get(ctx, c) - if err != nil { - return nil, err - } - return uio.NewDagReader(ctx, data, dag.dserv) -} - -// ImportData adds data from an io stream to the merkledag and returns the Cid -// of the given data -func (dag *DAG) ImportData(ctx context.Context, data io.Reader) (ipld.Node, error) { - bufds := ipld.NewBufferedDAG(ctx, dag.dserv) - - spl := chunk.DefaultSplitter(data) - - nd, err := imp.BuildDagFromReader(bufds, spl) - if err != nil { - return nil, err - } - return nd, bufds.Commit() -} - -// RecursiveGet will walk the dag in order (depth first) starting at the given root `c`. -func (dag *DAG) RecursiveGet(ctx context.Context, c cid.Cid) ([]ipld.Node, error) { - collector := dagCollector{ - dagserv: dag.dserv, - } - return collector.collectState(ctx, c) -} - -// -// Helpers for recursive dag get. -// - -type dagCollector struct { - dagserv format.DAGService - state []format.Node -} - -// collectState recursively walks the state tree starting with `stateRoot` and returns it as a slice of IPLD nodes. -// Calling this method does not have any side effects. -func (dc *dagCollector) collectState(ctx context.Context, stateRoot cid.Cid) ([]format.Node, error) { - dagNd, err := dc.dagserv.Get(ctx, stateRoot) - if err != nil { - return nil, errors.Wrapf(err, "failed to load stateroot from dagservice %s", stateRoot) - } - dc.addState(dagNd) - seen := cid.NewSet() - for _, l := range dagNd.Links() { - if err := dag.Walk(ctx, dc.getLinks, l.Cid, seen.Visit); err != nil { - return nil, errors.Wrapf(err, "dag service failed walking stateroot %s", stateRoot) - } - } - return dc.state, nil - -} - -func (dc *dagCollector) getLinks(ctx context.Context, c cid.Cid) ([]*format.Link, error) { - nd, err := dc.dagserv.Get(ctx, c) - if err != nil { - return nil, errors.Wrapf(err, "failed to load link from dagservice %s", c) - } - dc.addState(nd) - return nd.Links(), nil - -} - -func (dc *dagCollector) addState(nd format.Node) { - dc.state = append(dc.state, nd) -} diff --git a/internal/app/go-filecoin/plumbing/msg/previewer.go b/internal/app/go-filecoin/plumbing/msg/previewer.go deleted file mode 100644 index e93d2c11df..0000000000 --- a/internal/app/go-filecoin/plumbing/msg/previewer.go +++ /dev/null @@ -1,47 +0,0 @@ -package msg - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -// Abstracts over a store of blockchain state. -type previewerChainReader interface { - GetHead() block.TipSetKey - GetTipSetState(context.Context, block.TipSetKey) (state.Tree, error) - GetTipSet(block.TipSetKey) (block.TipSet, error) -} - -// Dragons: delete -type messagePreviewer interface { -} - -// Previewer calculates the amount of Gas needed for a command -type Previewer struct { - // To get the head tipset state root. - chainReader previewerChainReader - // To load the tree for the head tipset state root. - cst cbor.IpldStore - // For vm storage. - bs bstore.Blockstore - // To to preview messages - processor messagePreviewer -} - -// NewPreviewer constructs a Previewer. -func NewPreviewer(chainReader previewerChainReader, cst cbor.IpldStore, bs bstore.Blockstore, processor messagePreviewer) *Previewer { - return &Previewer{chainReader, cst, bs, processor} -} - -// Preview sends a read-only message to an actor. -func (p *Previewer) Preview(ctx context.Context, optFrom, to address.Address, method abi.MethodNum, params ...interface{}) (gas.Unit, error) { - panic("unimplemented") -} diff --git a/internal/app/go-filecoin/plumbing/msg/testing.go b/internal/app/go-filecoin/plumbing/msg/testing.go deleted file mode 100644 index 698b7b8412..0000000000 --- a/internal/app/go-filecoin/plumbing/msg/testing.go +++ /dev/null @@ -1,53 +0,0 @@ -package msg - -import ( - "context" - "testing" - - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/genesis" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/filecoin-project/go-filecoin/internal/pkg/wallet" -) - -type commonDeps struct { - repo repo.Repo - wallet *wallet.Wallet - chainStore *chain.Store - messages *chain.MessageStore - blockstore bstore.Blockstore - cst cbor.IpldStore -} - -func requiredCommonDeps(t *testing.T, gif genesis.InitFunc) *commonDeps { // nolint: deadcode - r := repo.NewInMemoryRepo() - bs := bstore.NewBlockstore(r.Datastore()) - return requireCommonDepsWithGifAndBlockstore(t, gif, r, bs) -} - -// This version is useful if you are installing actors with consensus.AddActor and you -// need to set some actor state up ahead of time (actor state is ultimately found in the -// block store). -func requireCommonDepsWithGifAndBlockstore(t *testing.T, gif genesis.InitFunc, r repo.Repo, bs bstore.Blockstore) *commonDeps { - cst := cborutil.NewIpldStore(bs) - chainStore, err := chain.Init(context.Background(), r, bs, cst, gif) - require.NoError(t, err) - messageStore := chain.NewMessageStore(bs) - backend, err := wallet.NewDSBackend(r.WalletDatastore()) - require.NoError(t, err) - wallet := wallet.New(backend) - - return &commonDeps{ - repo: r, - wallet: wallet, - chainStore: chainStore, - messages: messageStore, - blockstore: bs, - cst: cst, - } -} diff --git a/internal/app/go-filecoin/plumbing/msg/waiter.go b/internal/app/go-filecoin/plumbing/msg/waiter.go deleted file mode 100644 index 677a1f2592..0000000000 --- a/internal/app/go-filecoin/plumbing/msg/waiter.go +++ /dev/null @@ -1,323 +0,0 @@ -package msg - -import ( - "context" - "fmt" - - "github.com/cskr/pubsub" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/ipfs/go-cid" - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - logging "github.com/ipfs/go-log/v2" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -var log = logging.Logger("messageimpl") - -var DefaultMessageWaitLookback uint64 = 2 // in most cases, this should be enough to avoid races. - -// Abstracts over a store of blockchain state. -type waiterChainReader interface { - GetHead() block.TipSetKey - GetTipSet(block.TipSetKey) (block.TipSet, error) - GetTipSetState(context.Context, block.TipSetKey) (state.Tree, error) - GetTipSetReceiptsRoot(block.TipSetKey) (cid.Cid, error) - HeadEvents() *pubsub.PubSub -} - -// Waiter waits for a message to appear on chain. -type Waiter struct { - chainReader waiterChainReader - messageProvider chain.MessageProvider - cst cbor.IpldStore - bs bstore.Blockstore -} - -// ChainMessage is an on-chain message with its block and receipt. -type ChainMessage struct { - Message *types.SignedMessage - Block *block.Block - Receipt *vm.MessageReceipt -} - -// WaitPredicate is a function that identifies a message and returns true when found. -type WaitPredicate func(msg *types.SignedMessage, msgCid cid.Cid) bool - -// NewWaiter returns a new Waiter. -func NewWaiter(chainStore waiterChainReader, messages chain.MessageProvider, bs bstore.Blockstore, cst cbor.IpldStore) *Waiter { - return &Waiter{ - chainReader: chainStore, - cst: cst, - bs: bs, - messageProvider: messages, - } -} - -// Find searches the blockchain history (but doesn't wait). -func (w *Waiter) Find(ctx context.Context, lookback uint64, pred WaitPredicate) (*ChainMessage, bool, error) { - headTipSet, err := w.chainReader.GetTipSet(w.chainReader.GetHead()) - if err != nil { - return nil, false, err - } - return w.findMessage(ctx, headTipSet, lookback, pred) -} - -// WaitPredicate invokes the callback when the passed predicate succeeds. -// See api description. -// -// Note: this method does too much -- the callback should just receive the tipset -// containing the message and the caller should pull the receipt out of the block -// if in fact that's what it wants to do, using something like receiptFromTipset. -// Something like receiptFromTipset is necessary because not every message in -// a block will have a receipt in the tipset: it might be a duplicate message. -// This method will always check for the message in the current head tipset. -// A lookback parameter > 1 will cause this method to check for the message in -// up to that many previous tipsets on the chain of the current head. -func (w *Waiter) WaitPredicate(ctx context.Context, lookback uint64, pred WaitPredicate, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error { - ch := w.chainReader.HeadEvents().Sub(chain.NewHeadTopic) - defer func() { - w.chainReader.HeadEvents().Unsub(ch, chain.NewHeadTopic) - }() - - head, err := w.chainReader.GetTipSet(w.chainReader.GetHead()) - if err != nil { - return err - } - - chainMsg, found, err := w.findMessage(ctx, head, lookback, pred) - if err != nil { - return err - } - if found { - return cb(chainMsg.Block, chainMsg.Message, chainMsg.Receipt) - } - - chainMsg, found, err = w.waitForMessage(ctx, ch, head, pred) - if err != nil { - return err - } - if found { - return cb(chainMsg.Block, chainMsg.Message, chainMsg.Receipt) - } - return err -} - -// Wait uses WaitPredicate to invoke the callback when a message with the given cid appears on chain. -func (w *Waiter) Wait(ctx context.Context, msgCid cid.Cid, lookback uint64, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error { - log.Infof("Calling Waiter.Wait CID: %s", msgCid.String()) - - pred := func(msg *types.SignedMessage, c cid.Cid) bool { - return c.Equals(msgCid) - } - - return w.WaitPredicate(ctx, lookback, pred, cb) -} - -// findMessage looks for a matching in the chain and returns the message, -// block and receipt, when it is found. Returns the found message/block or nil -// if now block with the given CID exists in the chain. -// The lookback parameter is the number of tipsets in the past this method will check before giving up. -func (w *Waiter) findMessage(ctx context.Context, head block.TipSet, lookback uint64, pred WaitPredicate) (*ChainMessage, bool, error) { - var err error - for iterator := chain.IterAncestors(ctx, w.chainReader, head); err == nil && !iterator.Complete(); err = iterator.Next() { - msg, found, err := w.receiptForTipset(ctx, iterator.Value(), pred) - if err != nil { - log.Errorf("Waiter.Wait: %s", err) - return nil, false, err - } - if found { - return msg, true, nil - } - - lookback-- - if lookback <= 0 { - break - } - } - return nil, false, err -} - -// waitForMessage looks for a matching message in a channel of tipsets and returns -// the message, block and receipt, when it is found. Reads until the channel is -// closed or the context done. Returns the found message/block (or nil if the -// channel closed without finding it), whether it was found, or an error. -func (w *Waiter) waitForMessage(ctx context.Context, ch <-chan interface{}, head block.TipSet, pred WaitPredicate) (*ChainMessage, bool, error) { - lastHead := head - for { - select { - case <-ctx.Done(): - return nil, false, ctx.Err() - case raw, more := <-ch: - if !more { - return nil, false, nil - } - switch raw := raw.(type) { - case error: - e := raw.(error) - log.Errorf("Waiter.Wait: %s", e) - return nil, false, e - case block.TipSet: - msg, found, err := w.receiptForChain(ctx, raw, lastHead, pred) - if err != nil { - return nil, false, err - } - if found { - return msg, found, nil - } - lastHead = raw - // otherwise continue waiting - default: - return nil, false, fmt.Errorf("unexpected type in channel: %T", raw) - } - } - } -} - -func (w *Waiter) receiptForChain(ctx context.Context, ts block.TipSet, prevTs block.TipSet, pred WaitPredicate) (*ChainMessage, bool, error) { - // New tipsets typically have the previous head as a parent, so handle this cheap case - parents, err := ts.Parents() - if err != nil { - return nil, false, err - } - - if parents.Equals(prevTs.Key()) { - return w.receiptForTipset(ctx, ts, pred) - } - - // check all tipsets up to the last common ancestor of the last tipset we have seen - _, newChain, err := chain.CollectTipsToCommonAncestor(ctx, w.chainReader, prevTs, ts) - if err != nil { - return nil, false, err - } - - for _, ts := range newChain { - msg, found, err := w.receiptForTipset(ctx, ts, pred) - if err != nil { - return nil, false, err - } - if found { - return msg, found, nil - } - } - return nil, false, nil -} - -func (w *Waiter) receiptForTipset(ctx context.Context, ts block.TipSet, pred WaitPredicate) (*ChainMessage, bool, error) { - // The targetMsg might be the CID of either a signed SECP message or an unsigned - // BLS message. - // This accumulates the CIDs of the messages as they appear on chain (signed or unsigned) - // but then unwraps them all, obtaining the CID of the unwrapped SECP message body if - // applicable. This unwrapped message CID is then used to find the target message in the - // unwrapped de-duplicated tipset messages, and thence the corresponding receipt by index. - tsMessages := make([][]*types.UnsignedMessage, ts.Len()) - for i := 0; i < ts.Len(); i++ { - blk := ts.At(i) - secpMsgs, blsMsgs, err := w.messageProvider.LoadMessages(ctx, blk.Messages.Cid) - if err != nil { - return nil, false, err - } - - originalCids := make([]cid.Cid, len(blsMsgs)+len(secpMsgs)) - unwrappedMsgs := make([]*types.UnsignedMessage, len(blsMsgs)+len(secpMsgs)) - wrappedMsgs := make([]*types.SignedMessage, len(blsMsgs)+len(secpMsgs)) - for j, msg := range blsMsgs { - c, err := msg.Cid() - if err != nil { - return nil, false, err - } - originalCids[j] = c - unwrappedMsgs[j] = msg - wrappedMsgs[j] = &types.SignedMessage{Message: *msg} - } - for j, msg := range secpMsgs { - c, err := msg.Cid() - if err != nil { - return nil, false, err - } - originalCids[len(blsMsgs)+j] = c - unwrappedMsgs[len(blsMsgs)+j] = &msg.Message // Unwrap - wrappedMsgs[len(blsMsgs)+j] = msg - } - tsMessages[i] = unwrappedMsgs - - for k, wrapped := range wrappedMsgs { - if pred(wrapped, originalCids[k]) { - // Take CID of the unwrapped message, which might be different from the original. - unwrappedTarget, err := wrapped.Message.Cid() - if err != nil { - return nil, false, err - } - - recpt, err := w.receiptByIndex(ctx, ts.Key(), unwrappedTarget, tsMessages) - if err != nil { - return nil, false, errors.Wrap(err, "error retrieving receipt from tipset") - } - return &ChainMessage{wrappedMsgs[k], blk, recpt}, true, nil - } - } - } - return nil, false, nil -} - -func (w *Waiter) receiptByIndex(ctx context.Context, tsKey block.TipSetKey, targetCid cid.Cid, messages [][]*types.UnsignedMessage) (*vm.MessageReceipt, error) { - receiptCid, err := w.chainReader.GetTipSetReceiptsRoot(tsKey) - if err != nil { - return nil, err - } - - receipts, err := w.messageProvider.LoadReceipts(ctx, receiptCid) - if err != nil { - return nil, err - } - - deduped, err := deduppedMessages(messages) - if err != nil { - return nil, err - } - - receiptIndex := 0 - for _, blkMessages := range deduped { - for _, msg := range blkMessages { - msgCid, err := msg.Cid() - if err != nil { - return nil, err - } - - if msgCid.Equals(targetCid) { - if receiptIndex >= len(receipts) { - return nil, errors.Errorf("could not find message receipt at index %d", receiptIndex) - } - return &receipts[receiptIndex], nil - } - receiptIndex++ - } - } - return nil, errors.Errorf("could not find message cid %s in dedupped messages", targetCid.String()) -} - -func deduppedMessages(tsMessages [][]*types.UnsignedMessage) ([][]*types.UnsignedMessage, error) { - allMessages := make([][]*types.UnsignedMessage, len(tsMessages)) - msgFilter := make(map[cid.Cid]struct{}) - - for i, blkMessages := range tsMessages { - for _, msg := range blkMessages { - mCid, err := msg.Cid() - if err != nil { - return nil, err - } - - _, found := msgFilter[mCid] - if !found { - allMessages[i] = append(allMessages[i], msg) - msgFilter[mCid] = struct{}{} - } - } - } - return allMessages, nil -} diff --git a/internal/app/go-filecoin/plumbing/msg/waiter_test.go b/internal/app/go-filecoin/plumbing/msg/waiter_test.go deleted file mode 100644 index b0848e4897..0000000000 --- a/internal/app/go-filecoin/plumbing/msg/waiter_test.go +++ /dev/null @@ -1,257 +0,0 @@ -package msg - -import ( - "context" - "sync" - "testing" - "time" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -var mockSigner, _ = types.NewMockSignersAndKeyInfo(10) - -var newSignedMessage = types.NewSignedMessageForTestGetter(mockSigner) - -func testWaitHelp(wg *sync.WaitGroup, t *testing.T, waiter *Waiter, expectMsg *types.SignedMessage, expectError bool, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) { - expectCid, err := expectMsg.Cid() - if cb == nil { - cb = func(b *block.Block, msg *types.SignedMessage, - rcp *vm.MessageReceipt) error { - assert.True(t, types.SmsgCidsEqual(expectMsg, msg)) - if wg != nil { - wg.Done() - } - - return nil - } - } - assert.NoError(t, err) - - err = waiter.Wait(context.Background(), expectCid, DefaultMessageWaitLookback, cb) - assert.Equal(t, expectError, err != nil) -} - -type smsgs []*types.SignedMessage -type smsgsSet [][]*types.SignedMessage - -func setupTest(t *testing.T) (cbor.IpldStore, *chain.Store, *chain.MessageStore, *Waiter) { - d := requiredCommonDeps(t, gengen.DefaultGenesis) - return d.cst, d.chainStore, d.messages, NewWaiter(d.chainStore, d.messages, d.blockstore, d.cst) -} - -func TestWait(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - cst, chainStore, msgStore, waiter := setupTest(t) - - testWaitExisting(ctx, t, cst, chainStore, msgStore, waiter) - testWaitNew(ctx, t, cst, chainStore, msgStore, waiter) -} - -func testWaitExisting(ctx context.Context, t *testing.T, cst cbor.IpldStore, chainStore *chain.Store, msgStore *chain.MessageStore, waiter *Waiter) { - m1, m2 := newSignedMessage(), newSignedMessage() - head := chainStore.GetHead() - headTipSet, err := chainStore.GetTipSet(head) - require.NoError(t, err) - chainWithMsgs := newChainWithMessages(cst, msgStore, headTipSet, smsgsSet{smsgs{m1, m2}}) - ts := chainWithMsgs[len(chainWithMsgs)-1] - require.Equal(t, 1, ts.Len()) - require.NoError(t, chainStore.PutTipSetMetadata(ctx, &chain.TipSetMetadata{ - TipSet: ts, - TipSetStateRoot: ts.ToSlice()[0].StateRoot.Cid, - TipSetReceipts: ts.ToSlice()[0].MessageReceipts.Cid, - })) - require.NoError(t, chainStore.SetHead(ctx, ts)) - - testWaitHelp(nil, t, waiter, m1, false, nil) - testWaitHelp(nil, t, waiter, m2, false, nil) -} - -func testWaitNew(ctx context.Context, t *testing.T, cst cbor.IpldStore, chainStore *chain.Store, msgStore *chain.MessageStore, waiter *Waiter) { - var wg sync.WaitGroup - - _, _ = newSignedMessage(), newSignedMessage() // flush out so we get distinct messages from testWaitExisting - m3, m4 := newSignedMessage(), newSignedMessage() - head := chainStore.GetHead() - headTipSet, err := chainStore.GetTipSet(head) - require.NoError(t, err) - chainWithMsgs := newChainWithMessages(cst, msgStore, headTipSet, smsgsSet{smsgs{m3, m4}}) - - wg.Add(2) - go testWaitHelp(&wg, t, waiter, m3, false, nil) - go testWaitHelp(&wg, t, waiter, m4, false, nil) - time.Sleep(10 * time.Millisecond) - - ts := chainWithMsgs[len(chainWithMsgs)-1] - require.Equal(t, 1, ts.Len()) - require.NoError(t, chainStore.PutTipSetMetadata(ctx, &chain.TipSetMetadata{ - TipSet: ts, - TipSetStateRoot: ts.ToSlice()[0].StateRoot.Cid, - TipSetReceipts: ts.ToSlice()[0].MessageReceipts.Cid, - })) - require.NoError(t, chainStore.SetHead(ctx, ts)) - - wg.Wait() -} - -func TestWaitError(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - cst, chainStore, msgStore, waiter := setupTest(t) - - testWaitError(ctx, t, cst, chainStore, msgStore, waiter) -} - -func testWaitError(ctx context.Context, t *testing.T, cst cbor.IpldStore, chainStore *chain.Store, msgStore *chain.MessageStore, waiter *Waiter) { - m1, m2, m3, m4 := newSignedMessage(), newSignedMessage(), newSignedMessage(), newSignedMessage() - head := chainStore.GetHead() - headTipSet, err := chainStore.GetTipSet(head) - require.NoError(t, err) - chain := newChainWithMessages(cst, msgStore, headTipSet, smsgsSet{smsgs{m1, m2}}, smsgsSet{smsgs{m3, m4}}) - // set the head without putting the ancestor block in the chainStore. - err = chainStore.SetHead(ctx, chain[len(chain)-1]) - assert.Nil(t, err) - - testWaitHelp(nil, t, waiter, m2, true, nil) -} - -func TestWaitRespectsContextCancel(t *testing.T) { - tf.UnitTest(t) - - ctx, cancel := context.WithCancel(context.Background()) - _, _, _, waiter := setupTest(t) - - failIfCalledCb := func(b *block.Block, msg *types.SignedMessage, - rcp *vm.MessageReceipt) error { - assert.Fail(t, "Should not be called -- message doesnt exist") - return nil - } - - var err error - doneCh := make(chan struct{}) - go func() { - defer close(doneCh) - err = waiter.Wait(ctx, types.CidFromString(t, "somecid"), DefaultMessageWaitLookback, failIfCalledCb) - }() - - cancel() - - select { - case <-doneCh: - assert.Error(t, err) - case <-time.After(2 * time.Second): - assert.Fail(t, "Wait should have returned when context was canceled") - } -} - -// NewChainWithMessages creates a chain of tipsets containing the given messages -// and stores them in the given store. Note the msg arguments are slices of -// slices of messages -- each slice of slices goes into a successive tipset, -// and each slice within this slice goes into a block of that tipset -func newChainWithMessages(store cbor.IpldStore, msgStore *chain.MessageStore, root block.TipSet, msgSets ...[][]*types.SignedMessage) []block.TipSet { - var tipSets []block.TipSet - parents := root - height := abi.ChainEpoch(0) - stateRootCidGetter := types.NewCidForTestGetter() - - // only add root to the chain if it is not the zero-valued-tipset - if parents.Defined() { - for i := 0; i < parents.Len(); i++ { - mustPut(store, parents.At(i)) - } - tipSets = append(tipSets, parents) - height, _ = parents.Height() - height++ - } - emptyTxMeta, err := msgStore.StoreMessages(context.Background(), []*types.SignedMessage{}, []*types.UnsignedMessage{}) - if err != nil { - panic(err) - } - emptyReceiptsCid, err := msgStore.StoreReceipts(context.Background(), []vm.MessageReceipt{}) - if err != nil { - panic(err) - } - - for _, tsMsgs := range msgSets { - var blocks []*block.Block - receipts := []vm.MessageReceipt{} - // If a message set does not contain a slice of messages then - // add a tipset with no messages and a single block to the chain - if len(tsMsgs) == 0 { - child := &block.Block{ - Height: height, - Parents: parents.Key(), - Messages: e.NewCid(emptyTxMeta), - MessageReceipts: e.NewCid(emptyReceiptsCid), - } - mustPut(store, child) - blocks = append(blocks, child) - } - for _, msgs := range tsMsgs { - for _, msg := range msgs { - c, err := msg.Cid() - if err != nil { - panic(err) - } - receipts = append(receipts, vm.MessageReceipt{ExitCode: 0, ReturnValue: c.Bytes(), GasUsed: gas.Zero}) - } - txMeta, err := msgStore.StoreMessages(context.Background(), msgs, []*types.UnsignedMessage{}) - if err != nil { - panic(err) - } - - child := &block.Block{ - Messages: e.NewCid(txMeta), - Parents: parents.Key(), - Height: height, - StateRoot: e.NewCid(stateRootCidGetter()), // Differentiate all blocks - } - blocks = append(blocks, child) - } - receiptCid, err := msgStore.StoreReceipts(context.TODO(), receipts) - if err != nil { - panic(err) - } - - for _, blk := range blocks { - blk.MessageReceipts = e.NewCid(receiptCid) - mustPut(store, blk) - } - - ts, err := block.NewTipSet(blocks...) - if err != nil { - panic(err) - } - tipSets = append(tipSets, ts) - parents = ts - height++ - } - - return tipSets -} - -// mustPut stores the thingy in the store or panics if it cannot. -func mustPut(store cbor.IpldStore, thingy interface{}) cid.Cid { - cid, err := store.Put(context.Background(), thingy) - if err != nil { - panic(err) - } - return cid -} diff --git a/internal/app/go-filecoin/porcelain/api.go b/internal/app/go-filecoin/porcelain/api.go deleted file mode 100644 index a5965de54d..0000000000 --- a/internal/app/go-filecoin/porcelain/api.go +++ /dev/null @@ -1,148 +0,0 @@ -package porcelain - -import ( - "context" - "io" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - "github.com/libp2p/go-libp2p-core/peer" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// API is the porcelain implementation, a set of convenience calls written on the -// plumbing api, to be used to build user facing features and protocols. -// -// The porcelain.API provides porcelain calls **as well as the plumbing calls**. -// This is because most consumers depend on a combination of porcelain and plumbing -// calls. Flattening both apis into a single implementation enables consumers to take -// a single dependency and not have to know which api a call comes from. The mechanism -// is embedding: the plumbing implementation is embedded in the porcelain implementation, making -// all the embedded type (plumbing) calls available on the embedder type (porcelain). -// Providing a single implementation on which to depend also enables consumers to choose -// at what level to mock out their dependencies: low (plumbing) or high (porcelain). -// We ensure that porcelain calls only depend on the narrow subset of the plumbing api -// on which they depend by implementing them in free functions that take their specific -// subset of the plumbing.api. The porcelain.API delegates porcelain calls to these -// free functions. -// -// If you are implementing a user facing feature or a protocol this is probably the implementation -// you should depend on. Define the subset of it that you use in an interface in your package -// take this implementation as a dependency. -type API struct { - *plumbing.API -} - -// New returns a new porcelain.API. -func New(plumbing *plumbing.API) *API { - return &API{plumbing} -} - -// ChainHead returns the current head tipset -func (a *API) ChainHead() (block.TipSet, error) { - return ChainHead(a) -} - -// ChainGetFullBlock returns the full block given the header cid -func (a *API) ChainGetFullBlock(ctx context.Context, id cid.Cid) (*block.FullBlock, error) { - return GetFullBlock(ctx, a, id) -} - -// MessagePoolWait waits for the message pool to have at least messageCount unmined messages. -// It's useful for integration testing. -func (a *API) MessagePoolWait(ctx context.Context, messageCount uint) ([]*types.SignedMessage, error) { - return MessagePoolWait(ctx, a, messageCount) -} - -// MinerCreate creates a miner -func (a *API) MinerCreate( - ctx context.Context, - accountAddr address.Address, - gasPrice types.AttoFIL, - gasLimit gas.Unit, - sealProofType abi.RegisteredProof, - pid peer.ID, - collateral types.AttoFIL, -) (_ address.Address, err error) { - return MinerCreate(ctx, a, accountAddr, gasPrice, gasLimit, sealProofType, pid, collateral) -} - -// MinerPreviewCreate previews the Gas cost of creating a miner -func (a *API) MinerPreviewCreate( - ctx context.Context, - fromAddr address.Address, - sectorSize abi.SectorSize, - pid peer.ID, -) (usedGas gas.Unit, err error) { - return MinerPreviewCreate(ctx, a, fromAddr, sectorSize, pid) -} - -// MinerGetStatus queries for status of a miner. -func (a *API) MinerGetStatus(ctx context.Context, minerAddr address.Address, baseKey block.TipSetKey) (MinerStatus, error) { - return MinerGetStatus(ctx, a, minerAddr, baseKey) -} - -// ProtocolParameters fetches the current protocol configuration parameters. -func (a *API) ProtocolParameters(ctx context.Context) (*ProtocolParams, error) { - return ProtocolParameters(ctx, a) -} - -// WalletBalance returns the current balance of the given wallet address. -func (a *API) WalletBalance(ctx context.Context, address address.Address) (abi.TokenAmount, error) { - return WalletBalance(ctx, a, address) -} - -// WalletDefaultAddress returns a default wallet address from the config. -// If none is set it picks the first address in the wallet and sets it as the default in the config. -func (a *API) WalletDefaultAddress() (address.Address, error) { - return WalletDefaultAddress(a) -} - -// SealPieceIntoNewSector writes the provided piece into a new sector -func (a *API) SealPieceIntoNewSector(ctx context.Context, dealID abi.DealID, dealStart, dealEnd abi.ChainEpoch, pieceSize abi.UnpaddedPieceSize, pieceReader io.Reader) error { - return SealPieceIntoNewSector(ctx, a, dealID, dealStart, dealEnd, pieceSize, pieceReader) -} - -// PingMinerWithTimeout pings a storage or retrieval miner, waiting the given -// timeout and returning desciptive errors. -func (a *API) PingMinerWithTimeout( - ctx context.Context, - minerPID peer.ID, - timeout time.Duration, -) error { - return PingMinerWithTimeout(ctx, minerPID, timeout, a) -} - -// MinerSetWorkerAddress sets the miner worker address to the provided address -func (a *API) MinerSetWorkerAddress(ctx context.Context, toAddr address.Address, gasPrice types.AttoFIL, gasLimit gas.Unit) (cid.Cid, error) { - return MinerSetWorkerAddress(ctx, a, toAddr, gasPrice, gasLimit) -} - -// MessageWaitDone blocks until the message is on chain -func (a *API) MessageWaitDone(ctx context.Context, msgCid cid.Cid) (*vm.MessageReceipt, error) { - return MessageWaitDone(ctx, a, msgCid) -} - -func (a *API) PowerStateView(baseKey block.TipSetKey) (consensus.PowerStateView, error) { - return a.StateView(baseKey) -} - -func (a *API) MinerStateView(baseKey block.TipSetKey) (MinerStateView, error) { - return a.StateView(baseKey) -} - -func (a *API) FaultsStateView(baseKey block.TipSetKey) (consensus.FaultStateView, error) { - return a.StateView(baseKey) -} - -func (a *API) ProtocolStateView(baseKey block.TipSetKey) (ProtocolStateView, error) { - return a.StateView(baseKey) -} diff --git a/internal/app/go-filecoin/porcelain/chain.go b/internal/app/go-filecoin/porcelain/chain.go deleted file mode 100644 index e7b95e53b3..0000000000 --- a/internal/app/go-filecoin/porcelain/chain.go +++ /dev/null @@ -1,43 +0,0 @@ -package porcelain - -import ( - "context" - - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -type chainHeadPlumbing interface { - ChainHeadKey() block.TipSetKey - ChainTipSet(key block.TipSetKey) (block.TipSet, error) -} - -// ChainHead gets the current head tipset from plumbing. -func ChainHead(plumbing chainHeadPlumbing) (block.TipSet, error) { - return plumbing.ChainTipSet(plumbing.ChainHeadKey()) -} - -type fullBlockPlumbing interface { - ChainGetBlock(context.Context, cid.Cid) (*block.Block, error) - ChainGetMessages(context.Context, cid.Cid) ([]*types.UnsignedMessage, []*types.SignedMessage, error) -} - -// GetFullBlock returns a full block: header, messages, receipts. -func GetFullBlock(ctx context.Context, plumbing fullBlockPlumbing, id cid.Cid) (*block.FullBlock, error) { - var out block.FullBlock - var err error - - out.Header, err = plumbing.ChainGetBlock(ctx, id) - if err != nil { - return nil, err - } - - out.BLSMessages, out.SECPMessages, err = plumbing.ChainGetMessages(ctx, out.Header.Messages.Cid) - if err != nil { - return nil, err - } - - return &out, nil -} diff --git a/internal/app/go-filecoin/porcelain/client.go b/internal/app/go-filecoin/porcelain/client.go deleted file mode 100644 index 9b56e4d52e..0000000000 --- a/internal/app/go-filecoin/porcelain/client.go +++ /dev/null @@ -1,18 +0,0 @@ -package porcelain - -import ( - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// Ask is a result of querying for an ask, it may contain an error -type Ask struct { - Miner address.Address - Price types.AttoFIL - Expiry abi.ChainEpoch - ID uint64 - - Error error -} diff --git a/internal/app/go-filecoin/porcelain/message.go b/internal/app/go-filecoin/porcelain/message.go deleted file mode 100644 index c5206bf657..0000000000 --- a/internal/app/go-filecoin/porcelain/message.go +++ /dev/null @@ -1,34 +0,0 @@ -package porcelain - -import ( - "context" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/util/moresync" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -type waitPlumbing interface { - MessageWait(context.Context, cid.Cid, uint64, func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error -} - -// MessageWaitDone blocks until the given message cid appears on chain -func MessageWaitDone(ctx context.Context, plumbing waitPlumbing, msgCid cid.Cid) (*vm.MessageReceipt, error) { - l := moresync.NewLatch(1) - var ret *vm.MessageReceipt - err := plumbing.MessageWait(ctx, msgCid, msg.DefaultMessageWaitLookback, func(_ *block.Block, _ *types.SignedMessage, rcpt *vm.MessageReceipt) error { - ret = rcpt - l.Done() - return nil - }) - if err != nil { - return nil, err - } - l.Wait() - return ret, nil -} diff --git a/internal/app/go-filecoin/porcelain/miner.go b/internal/app/go-filecoin/porcelain/miner.go deleted file mode 100644 index c918605a93..0000000000 --- a/internal/app/go-filecoin/porcelain/miner.go +++ /dev/null @@ -1,290 +0,0 @@ -package porcelain - -import ( - "context" - "fmt" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - - address "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/power" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - cid "github.com/ipfs/go-cid" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// mcAPI is the subset of the plumbing.API that MinerCreate uses. -type mcAPI interface { - ConfigGet(dottedPath string) (interface{}, error) - ConfigSet(dottedPath string, paramJSON string) error - MessageSend(ctx context.Context, from, to address.Address, value types.AttoFIL, gasPrice types.AttoFIL, gasLimit gas.Unit, method abi.MethodNum, params interface{}) (cid.Cid, chan error, error) - MessageWait(ctx context.Context, msgCid cid.Cid, lookback uint64, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error - WalletDefaultAddress() (address.Address, error) -} - -type MinerStateView interface { - MinerControlAddresses(ctx context.Context, maddr address.Address) (owner, worker address.Address, err error) - MinerPeerID(ctx context.Context, maddr address.Address) (peer.ID, error) - MinerSectorConfiguration(ctx context.Context, maddr address.Address) (*state.MinerSectorConfiguration, error) - MinerSectorCount(ctx context.Context, maddr address.Address) (uint64, error) - MinerDeadlines(ctx context.Context, maddr address.Address) (*miner.Deadlines, error) - PowerNetworkTotal(ctx context.Context) (*state.NetworkPower, error) - MinerClaimedPower(ctx context.Context, miner address.Address) (raw, qa abi.StoragePower, err error) - MinerInfo(ctx context.Context, maddr address.Address) (miner.MinerInfo, error) -} - -// MinerCreate creates a new miner actor for the given account and returns its address. -// It will wait for the the actor to appear on-chain and add set the address to mining.minerAddress in the config. -// TODO: add ability to pass in a KeyInfo to store for signing blocks. -// See https://github.com/filecoin-project/go-filecoin/issues/1843 -func MinerCreate( - ctx context.Context, - plumbing mcAPI, - minerOwnerAddr address.Address, - gasPrice types.AttoFIL, - gasLimit gas.Unit, - sealProofType abi.RegisteredProof, - pid peer.ID, - collateral types.AttoFIL, -) (_ address.Address, err error) { - if minerOwnerAddr == (address.Address{}) { - minerOwnerAddr, err = plumbing.WalletDefaultAddress() - if err != nil { - return address.Undef, err - } - } - - addr, err := plumbing.ConfigGet("mining.minerAddress") - if err != nil { - return address.Undef, err - } - if addr != address.Undef { - return address.Undef, fmt.Errorf("can only have one miner per node") - } - - params := power.CreateMinerParams{ - Worker: minerOwnerAddr, - Owner: minerOwnerAddr, - Peer: pid, - SealProofType: sealProofType, - } - - smsgCid, _, err := plumbing.MessageSend( - ctx, - minerOwnerAddr, - builtin.StoragePowerActorAddr, - collateral, - gasPrice, - gasLimit, - builtin.MethodsPower.CreateMiner, - ¶ms, - ) - if err != nil { - return address.Undef, err - } - - var result power.CreateMinerReturn - err = plumbing.MessageWait(ctx, smsgCid, msg.DefaultMessageWaitLookback, func(blk *block.Block, smsg *types.SignedMessage, receipt *vm.MessageReceipt) (err error) { - if receipt.ExitCode != exitcode.Ok { - // Dragons: do we want to have this back? - return fmt.Errorf("Error executing actor code (exitcode: %d)", receipt.ExitCode) - } - return encoding.Decode(receipt.ReturnValue, &result) - }) - if err != nil { - return address.Undef, err - } - - if err = plumbing.ConfigSet("mining.minerAddress", result.RobustAddress.String()); err != nil { - return address.Undef, err - } - - return result.RobustAddress, nil -} - -// mpcAPI is the subset of the plumbing.API that MinerPreviewCreate uses. -type mpcAPI interface { - ConfigGet(dottedPath string) (interface{}, error) - MessagePreview(ctx context.Context, from, to address.Address, method abi.MethodNum, params ...interface{}) (gas.Unit, error) - NetworkGetPeerID() peer.ID - WalletDefaultAddress() (address.Address, error) -} - -// MinerPreviewCreate previews the Gas cost of creating a miner -func MinerPreviewCreate( - ctx context.Context, - plumbing mpcAPI, - fromAddr address.Address, - sectorSize abi.SectorSize, - pid peer.ID, -) (usedGas gas.Unit, err error) { - if fromAddr.Empty() { - fromAddr, err = plumbing.WalletDefaultAddress() - if err != nil { - return gas.NewGas(0), err - } - } - - if pid == "" { - pid = plumbing.NetworkGetPeerID() - } - - if _, err := plumbing.ConfigGet("mining.minerAddress"); err != nil { - return gas.NewGas(0), fmt.Errorf("can only have one miner per node") - } - - usedGas, err = plumbing.MessagePreview( - ctx, - fromAddr, - builtin.StorageMarketActorAddr, - builtin.MethodsPower.CreateMiner, - sectorSize, - pid, - ) - if err != nil { - return gas.NewGas(0), errors.Wrap(err, "Could not create miner. Please consult the documentation to setup your wallet and genesis block correctly") - } - - return usedGas, nil -} - -// MinerSetPriceResponse collects relevant stats from the set price process -type MinerSetPriceResponse struct { - MinerAddr address.Address - Price types.AttoFIL -} - -type minerStatusPlumbing interface { - MinerStateView(baseKey block.TipSetKey) (MinerStateView, error) - ChainTipSet(key block.TipSetKey) (block.TipSet, error) -} - -// MinerProvingWindow contains a miners proving period start and end as well -// as a set of their proving set. -type MinerProvingWindow struct { - Start abi.ChainEpoch - End abi.ChainEpoch - ProvingSet map[string]types.Commitments -} - -// MinerStatus contains a miners power and the total power of the network -type MinerStatus struct { - ActorAddress address.Address - OwnerAddress address.Address - WorkerAddress address.Address - PeerID peer.ID - - SealProofType abi.RegisteredProof - SectorSize abi.SectorSize - WindowPoStPartitionSectors uint64 - SectorCount uint64 - PoStFailureCount int - - RawPower abi.StoragePower - NetworkRawPower abi.StoragePower - NetworkQualityAdjustedPower abi.StoragePower - QualityAdjustedPower abi.StoragePower -} - -// MinerGetStatus queries the power of a given miner. -func MinerGetStatus(ctx context.Context, plumbing minerStatusPlumbing, minerAddr address.Address, key block.TipSetKey) (MinerStatus, error) { - view, err := plumbing.MinerStateView(key) - if err != nil { - return MinerStatus{}, err - } - sectorCount, err := view.MinerSectorCount(ctx, minerAddr) - if err != nil { - return MinerStatus{}, err - } - minerInfo, err := view.MinerInfo(ctx, minerAddr) - if err != nil { - return MinerStatus{}, err - } - rawPower, qaPower, err := view.MinerClaimedPower(ctx, minerAddr) - if err != nil { - return MinerStatus{}, err - } - totalPower, err := view.PowerNetworkTotal(ctx) - if err != nil { - return MinerStatus{}, err - } - - return MinerStatus{ - ActorAddress: minerAddr, - OwnerAddress: minerInfo.Owner, - WorkerAddress: minerInfo.Worker, - PeerID: minerInfo.PeerId, - - SealProofType: minerInfo.SealProofType, - SectorSize: minerInfo.SectorSize, - WindowPoStPartitionSectors: minerInfo.WindowPoStPartitionSectors, - SectorCount: sectorCount, - - RawPower: rawPower, - QualityAdjustedPower: qaPower, - NetworkRawPower: totalPower.RawBytePower, - NetworkQualityAdjustedPower: totalPower.QualityAdjustedPower, - }, nil -} - -// mwapi is the subset of the plumbing.API that MinerSetWorkerAddress use. -type mwapi interface { - ConfigGet(dottedPath string) (interface{}, error) - ChainHeadKey() block.TipSetKey - MinerStateView(baseKey block.TipSetKey) (MinerStateView, error) - MessageSend(ctx context.Context, from, to address.Address, value types.AttoFIL, gasPrice types.AttoFIL, gasLimit gas.Unit, method abi.MethodNum, params interface{}) (cid.Cid, chan error, error) -} - -// MinerSetWorkerAddress sets the worker address of the miner actor to the provided new address, -// waits for the message to appear on chain and then sets miner.workerAddr config to the new address. -func MinerSetWorkerAddress( - ctx context.Context, - plumbing mwapi, - workerAddr address.Address, - gasPrice types.AttoFIL, - gasLimit gas.Unit, -) (cid.Cid, error) { - - retVal, err := plumbing.ConfigGet("mining.minerAddress") - if err != nil { - return cid.Undef, err - } - minerAddr, ok := retVal.(address.Address) - if !ok { - return cid.Undef, errors.New("problem converting miner address") - } - - head := plumbing.ChainHeadKey() - state, err := plumbing.MinerStateView(head) - if err != nil { - return cid.Undef, errors.Wrap(err, "could not get miner owner address") - } - - owner, _, err := state.MinerControlAddresses(ctx, minerAddr) - if err != nil { - return cid.Undef, errors.Wrap(err, "could not get miner owner address") - } - - c, _, err := plumbing.MessageSend( - ctx, - owner, - minerAddr, - types.ZeroAttoFIL, - gasPrice, - gasLimit, - builtin.MethodsMiner.ChangeWorkerAddress, - &workerAddr) - return c, err -} diff --git a/internal/app/go-filecoin/porcelain/miner_test.go b/internal/app/go-filecoin/porcelain/miner_test.go deleted file mode 100644 index 5924103c57..0000000000 --- a/internal/app/go-filecoin/porcelain/miner_test.go +++ /dev/null @@ -1,290 +0,0 @@ -package porcelain_test - -import ( - "context" - "errors" - "fmt" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin/power" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cfg" - . "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - "github.com/filecoin-project/go-filecoin/internal/pkg/wallet" -) - -type minerCreate struct { - testing *testing.T - address address.Address - config *cfg.Config - wallet *wallet.Wallet - msgCid cid.Cid - msgFail bool -} - -func newMinerCreate(t *testing.T, msgFail bool, address address.Address) *minerCreate { - testRepo := repo.NewInMemoryRepo() - backend, err := wallet.NewDSBackend(testRepo.WalletDatastore()) - require.NoError(t, err) - return &minerCreate{ - testing: t, - address: address, - config: cfg.NewConfig(testRepo), - wallet: wallet.New(backend), - msgFail: msgFail, - } -} - -func (mpc *minerCreate) ConfigGet(dottedPath string) (interface{}, error) { - return mpc.config.Get(dottedPath) -} - -func (mpc *minerCreate) ConfigSet(dottedPath string, paramJSON string) error { - return mpc.config.Set(dottedPath, paramJSON) -} - -func (mpc *minerCreate) MessageSend(ctx context.Context, from, to address.Address, value types.AttoFIL, gasPrice types.AttoFIL, gasLimit gas.Unit, method abi.MethodNum, params interface{}) (cid.Cid, chan error, error) { - if mpc.msgFail { - return cid.Cid{}, nil, errors.New("test Error") - } - mpc.msgCid = types.CidFromString(mpc.testing, "somecid") - - return mpc.msgCid, nil, nil -} - -func (mpc *minerCreate) MessageWait(ctx context.Context, msgCid cid.Cid, lookback uint64, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error { - assert.Equal(mpc.testing, msgCid, msgCid) - midAddr, err := address.NewIDAddress(100) - if err != nil { - return err - } - - value, err := encoding.Encode(&power.CreateMinerReturn{ - IDAddress: midAddr, - RobustAddress: mpc.address, - }) - if err != nil { - return err - } - - receipt := vm.MessageReceipt{ - ReturnValue: value, - ExitCode: exitcode.Ok, - } - return cb(nil, nil, &receipt) -} - -func (mpc *minerCreate) WalletDefaultAddress() (address.Address, error) { - return wallet.NewAddress(mpc.wallet, address.SECP256K1) -} - -func TestMinerCreate(t *testing.T) { - tf.UnitTest(t) - - t.Run("success", func(t *testing.T) { - ctx := context.Background() - expectedAddress := vmaddr.NewForTestGetter()() - plumbing := newMinerCreate(t, false, expectedAddress) - collateral := types.NewAttoFILFromFIL(1) - - addr, err := MinerCreate( - ctx, - plumbing, - address.Address{}, - types.NewGasPrice(0), - gas.NewGas(100), - constants.DevSealProofType, - "", - collateral, - ) - require.NoError(t, err) - assert.Equal(t, expectedAddress, addr) - }) - - t.Run("failure to send", func(t *testing.T) { - ctx := context.Background() - plumbing := newMinerCreate(t, true, address.Address{}) - collateral := types.NewAttoFILFromFIL(1) - - _, err := MinerCreate( - ctx, - plumbing, - address.Address{}, - types.NewGasPrice(0), - gas.NewGas(100), - constants.DevSealProofType, - "", - collateral, - ) - assert.Error(t, err, "Test Error") - }) -} - -type mStatusPlumbing struct { - ts block.TipSet - head block.TipSetKey - miner, owner, worker address.Address -} - -func (p *mStatusPlumbing) ChainHeadKey() block.TipSetKey { - return p.head -} - -func (p *mStatusPlumbing) ChainTipSet(_ block.TipSetKey) (block.TipSet, error) { - return p.ts, nil -} - -func (p *mStatusPlumbing) MinerStateView(baseKey block.TipSetKey) (MinerStateView, error) { - return &state.FakeStateView{ - Power: &state.NetworkPower{ - RawBytePower: big.NewInt(4), - QualityAdjustedPower: big.NewInt(4), - MinerCount: 0, - MinPowerMinerCount: 0, - }, - Miners: map[address.Address]*state.FakeMinerState{ - p.miner: { - Owner: p.owner, - Worker: p.worker, - ClaimedRawPower: abi.NewStoragePower(2), - ClaimedQAPower: abi.NewStoragePower(2), - }, - }, - }, nil -} - -func TestMinerGetStatus(t *testing.T) { - tf.UnitTest(t) - key := block.NewTipSetKey(types.NewCidForTestGetter()()) - ts, err := block.NewTipSet(&block.Block{}) - require.NoError(t, err) - - plumbing := mStatusPlumbing{ - ts, key, vmaddr.RequireIDAddress(t, 1), vmaddr.RequireIDAddress(t, 2), vmaddr.RequireIDAddress(t, 3), - } - status, err := MinerGetStatus(context.Background(), &plumbing, plumbing.miner, key) - assert.NoError(t, err) - assert.Equal(t, plumbing.owner, status.OwnerAddress) - assert.Equal(t, plumbing.worker, status.WorkerAddress) - assert.Equal(t, "4", status.NetworkQualityAdjustedPower.String()) - assert.Equal(t, "2", status.QualityAdjustedPower.String()) -} - -type mSetWorkerPlumbing struct { - head block.TipSetKey - getStatusFail, msgFail, msgWaitFail, cfgFail bool - minerAddr, ownerAddr, workerAddr address.Address -} - -func (p *mSetWorkerPlumbing) ChainHeadKey() block.TipSetKey { - return p.head -} - -func (p *mSetWorkerPlumbing) MinerStateView(baseKey block.TipSetKey) (MinerStateView, error) { - if p.getStatusFail { - return &state.FakeStateView{}, errors.New("for testing") - } - - return &state.FakeStateView{ - Miners: map[address.Address]*state.FakeMinerState{ - p.minerAddr: { - Owner: p.ownerAddr, - Worker: p.workerAddr, - }, - }, - }, nil -} - -func (p *mSetWorkerPlumbing) MessageSend(ctx context.Context, from, to address.Address, value types.AttoFIL, gasPrice types.AttoFIL, gasLimit gas.Unit, method abi.MethodNum, params interface{}) (cid.Cid, chan error, error) { - - if p.msgFail { - return cid.Cid{}, nil, errors.New("MsgFail") - } - return types.EmptyMessagesCID, nil, nil -} - -func (p *mSetWorkerPlumbing) MessageWait(ctx context.Context, msgCid cid.Cid, cb func(*block.Block, *types.SignedMessage, *vm.MessageReceipt) error) error { - if p.msgWaitFail { - return errors.New("MsgWaitFail") - } - return nil -} - -func (p *mSetWorkerPlumbing) ConfigGet(dottedKey string) (interface{}, error) { - if p.cfgFail { - return address.Undef, errors.New("ConfigGet failed") - } - if dottedKey == "mining.minerAddress" { - return p.minerAddr, nil - } - return address.Undef, fmt.Errorf("unknown config %s", dottedKey) -} - -func TestMinerSetWorkerAddress(t *testing.T) { - tf.UnitTest(t) - - minerOwner := vmaddr.RequireIDAddress(t, 100) - minerAddr := vmaddr.RequireIDAddress(t, 101) - workerAddr := vmaddr.RequireIDAddress(t, 102) - gprice := types.ZeroAttoFIL - glimit := gas.NewGas(0) - - t.Run("Calling set worker address sets address", func(t *testing.T) { - plumbing := &mSetWorkerPlumbing{ - workerAddr: workerAddr, - ownerAddr: minerOwner, - minerAddr: minerAddr, - } - - _, err := MinerSetWorkerAddress(context.Background(), plumbing, workerAddr, gprice, glimit) - assert.NoError(t, err) - assert.Equal(t, workerAddr, plumbing.workerAddr) - }) - - testCases := []struct { - name string - plumbing *mSetWorkerPlumbing - error string - }{ - { - name: "When MessageSend fails, returns the error and does not set worker address", - plumbing: &mSetWorkerPlumbing{msgFail: true}, - error: "MsgFail", - }, - { - name: "When ConfigGet fails, returns the error and does not set worker address", - plumbing: &mSetWorkerPlumbing{cfgFail: true}, - error: "CfgFail", - }, - { - name: "When MinerGetStatus fails, returns the error and does not set worker address", - plumbing: &mSetWorkerPlumbing{getStatusFail: true}, - error: "CfgFail", - }, - } - - for _, test := range testCases { - t.Run(test.name, func(t *testing.T) { - _, err := MinerSetWorkerAddress(context.Background(), test.plumbing, workerAddr, gprice, glimit) - assert.Error(t, err, test.error) - assert.Empty(t, test.plumbing.workerAddr) - }) - } -} diff --git a/internal/app/go-filecoin/porcelain/mpool.go b/internal/app/go-filecoin/porcelain/mpool.go deleted file mode 100644 index fdeb0e1d83..0000000000 --- a/internal/app/go-filecoin/porcelain/mpool.go +++ /dev/null @@ -1,25 +0,0 @@ -package porcelain - -import ( - "context" - "time" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// The subset of plumbing used by MessagePoolWait -type mpwPlumbing interface { - MessagePoolPending() []*types.SignedMessage -} - -// MessagePoolWait waits until the message pool contains at least messageCount unmined messages. -func MessagePoolWait(ctx context.Context, plumbing mpwPlumbing, messageCount uint) ([]*types.SignedMessage, error) { - pending := plumbing.MessagePoolPending() - for len(pending) < int(messageCount) { - // Poll pending again after subscribing in case a message arrived since. - pending = plumbing.MessagePoolPending() - time.Sleep(200 * time.Millisecond) - } - - return pending, nil -} diff --git a/internal/app/go-filecoin/porcelain/mpool_test.go b/internal/app/go-filecoin/porcelain/mpool_test.go deleted file mode 100644 index 58ba94a9a3..0000000000 --- a/internal/app/go-filecoin/porcelain/mpool_test.go +++ /dev/null @@ -1,95 +0,0 @@ -package porcelain_test - -import ( - "context" - "sync" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -type fakeMpoolWaitPlumbing struct { - pending []*types.SignedMessage - afterPendingCalled func() // Invoked after each call to MessagePoolPending -} - -func newFakeMpoolWaitPlumbing(onPendingCalled func()) *fakeMpoolWaitPlumbing { - return &fakeMpoolWaitPlumbing{ - afterPendingCalled: onPendingCalled, - } -} - -func (plumbing *fakeMpoolWaitPlumbing) MessagePoolPending() []*types.SignedMessage { - if plumbing.afterPendingCalled != nil { - defer plumbing.afterPendingCalled() - } - return plumbing.pending -} - -func TestMessagePoolWait(t *testing.T) { - tf.UnitTest(t) - - ki := types.MustGenerateKeyInfo(1, 42) - signer := types.NewMockSigner(ki) - - t.Run("empty", func(t *testing.T) { - - plumbing := newFakeMpoolWaitPlumbing(nil) - msgs, e := porcelain.MessagePoolWait(context.Background(), plumbing, 0) - require.NoError(t, e) - assert.Equal(t, 0, len(msgs)) - }) - - t.Run("returns immediates", func(t *testing.T) { - - plumbing := newFakeMpoolWaitPlumbing(nil) - plumbing.pending = types.NewSignedMsgs(3, signer) - - msgs, e := porcelain.MessagePoolWait(context.Background(), plumbing, 3) - require.NoError(t, e) - assert.Equal(t, 3, len(msgs)) - }) - - t.Run("waits", func(t *testing.T) { - - var plumbing *fakeMpoolWaitPlumbing - callCount := 0 - - // This callback to the MessagePoolPending plumbing orchestrates the appearance of - // pending messages and notifications on the pubsub subscription. - handlePendingCalled := func() { - if callCount == 0 { - // The first call is checking for the fast path; do nothing. - } else if callCount == 2 { - // Add a message to the pool. - plumbing.pending = types.NewSignedMsgs(1, signer) - } - callCount++ - } - - plumbing = newFakeMpoolWaitPlumbing(handlePendingCalled) - finished := assertMessagePoolWaitAsync(plumbing, 1, t) - - finished.Wait() - }) -} - -// assertMessagePoolWaitAsync waits for msgCount messages asynchronously -func assertMessagePoolWaitAsync(plumbing *fakeMpoolWaitPlumbing, msgCount uint, t *testing.T) *sync.WaitGroup { - finished := sync.WaitGroup{} - finished.Add(1) - - go func() { - msgs, e := porcelain.MessagePoolWait(context.Background(), plumbing, msgCount) - require.NoError(t, e) - assert.Equal(t, msgCount, uint(len(msgs))) - defer finished.Done() - }() - - return &finished -} diff --git a/internal/app/go-filecoin/porcelain/network.go b/internal/app/go-filecoin/porcelain/network.go deleted file mode 100644 index c863ff606f..0000000000 --- a/internal/app/go-filecoin/porcelain/network.go +++ /dev/null @@ -1,37 +0,0 @@ -package porcelain - -import ( - "context" - "fmt" - "time" - - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p/p2p/protocol/ping" - "github.com/pkg/errors" -) - -type netPlumbing interface { - NetworkPing(ctx context.Context, pid peer.ID) (<-chan ping.Result, error) -} - -// PingMinerWithTimeout pings a storage or retrieval miner, waiting the given -// timeout and returning descriptive errors. -func PingMinerWithTimeout(ctx context.Context, minerPID peer.ID, timeout time.Duration, plumbing netPlumbing) error { - ctx, cancel := context.WithTimeout(ctx, timeout) - defer cancel() - - res, err := netPlumbing.NetworkPing(plumbing, ctx, minerPID) - if err != nil { - return err - } - - select { - case _, ok := <-res: - if !ok { - return errors.New("couldn't establish connection to miner: ping channel closed") - } - return nil - case <-ctx.Done(): - return fmt.Errorf("couldn't establish connection to miner: %s, timed out after %s", ctx.Err(), timeout.String()) - } -} diff --git a/internal/app/go-filecoin/porcelain/network_test.go b/internal/app/go-filecoin/porcelain/network_test.go deleted file mode 100644 index 920234050f..0000000000 --- a/internal/app/go-filecoin/porcelain/network_test.go +++ /dev/null @@ -1,69 +0,0 @@ -package porcelain_test - -import ( - "context" - "testing" - "time" - - "github.com/libp2p/go-libp2p-core/peer" - "github.com/stretchr/testify/assert" - - . "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - "github.com/filecoin-project/go-filecoin/internal/pkg/net" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - "github.com/libp2p/go-libp2p/p2p/protocol/ping" -) - -type ntwkPingPlumbing struct { - self peer.ID // pinging this will fail immediately - rtt time.Duration // pinging all other ids will resolve after rtt -} - -func (npp *ntwkPingPlumbing) NetworkPing(ctx context.Context, pid peer.ID) (<-chan ping.Result, error) { - if pid == npp.self { - return nil, net.ErrPingSelf - } - c := make(chan ping.Result) - - go func() { - <-time.After(npp.rtt) - c <- ping.Result{ - RTT: npp.rtt, - Error: nil, - } - }() - return c, nil -} - -func newNtwkPingPlumbing(rtt time.Duration, self peer.ID) *ntwkPingPlumbing { - return &ntwkPingPlumbing{ - rtt: rtt, - self: self, - } -} - -func TestPingSuccess(t *testing.T) { - self := th.RequireRandomPeerID(t) - plumbing := newNtwkPingPlumbing(100*time.Millisecond, self) - pid := th.RequireRandomPeerID(t) - ctx := context.Background() - - assert.NoError(t, PingMinerWithTimeout(ctx, pid, time.Second, plumbing)) -} - -func TestPingSelfFails(t *testing.T) { - self := th.RequireRandomPeerID(t) - plumbing := newNtwkPingPlumbing(100*time.Millisecond, self) - ctx := context.Background() - - assert.Error(t, PingMinerWithTimeout(ctx, self, time.Second, plumbing)) -} - -func TestPingTimeout(t *testing.T) { - self := th.RequireRandomPeerID(t) - plumbing := newNtwkPingPlumbing(300*time.Millisecond, self) - pid := th.RequireRandomPeerID(t) - ctx := context.Background() - - assert.Error(t, PingMinerWithTimeout(ctx, pid, 100*time.Millisecond, plumbing)) -} diff --git a/internal/app/go-filecoin/porcelain/piecemanager.go b/internal/app/go-filecoin/porcelain/piecemanager.go deleted file mode 100644 index 7c31a1225a..0000000000 --- a/internal/app/go-filecoin/porcelain/piecemanager.go +++ /dev/null @@ -1,24 +0,0 @@ -package porcelain - -import ( - "context" - "io" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/piecemanager" -) - -type pmPlumbing interface { - PieceManager() piecemanager.PieceManager -} - -// SealPieceIntoNewSector writes the provided piece-bytes into a new sector. -func SealPieceIntoNewSector(ctx context.Context, p pmPlumbing, dealID abi.DealID, dealStart, dealEnd abi.ChainEpoch, pieceSize abi.UnpaddedPieceSize, pieceReader io.Reader) error { - if p.PieceManager() == nil { - return errors.New("must be mining to add piece") - } - - return p.PieceManager().SealPieceIntoNewSector(ctx, dealID, dealStart, dealEnd, pieceSize, pieceReader) -} diff --git a/internal/app/go-filecoin/porcelain/protocol.go b/internal/app/go-filecoin/porcelain/protocol.go deleted file mode 100644 index 23cff98eb3..0000000000 --- a/internal/app/go-filecoin/porcelain/protocol.go +++ /dev/null @@ -1,79 +0,0 @@ -package porcelain - -import ( - "context" - "time" - - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" -) - -// SectorInfo provides information about a sector construction -type SectorInfo struct { - Size abi.SectorSize - MaxPieceSize abi.UnpaddedPieceSize -} - -// ProtocolParams contains parameters that modify the filecoin nodes protocol -type ProtocolParams struct { - Network string - AutoSealInterval uint - BlockTime time.Duration - SupportedSectors []SectorInfo -} - -type protocolParamsPlumbing interface { - ConfigGet(string) (interface{}, error) - ChainHeadKey() block.TipSetKey - ProtocolStateView(baseKey block.TipSetKey) (ProtocolStateView, error) - BlockTime() time.Duration -} - -type ProtocolStateView interface { - InitNetworkName(ctx context.Context) (string, error) -} - -// ProtocolParameters returns protocol parameter information about the node -func ProtocolParameters(ctx context.Context, plumbing protocolParamsPlumbing) (*ProtocolParams, error) { - autoSealIntervalInterface, err := plumbing.ConfigGet("mining.autoSealIntervalSeconds") - if err != nil { - return nil, err - } - - autoSealInterval, ok := autoSealIntervalInterface.(uint) - if !ok { - return nil, errors.New("Failed to read autoSealInterval from config") - } - - networkName, err := getNetworkName(ctx, plumbing) - if err != nil { - return nil, errors.Wrap(err, "could not retrieve network name") - } - - sectorSizes := []abi.SectorSize{constants.DevSectorSize, constants.FiveHundredTwelveMiBSectorSize} - - var supportedSectors []SectorInfo - for _, sectorSize := range sectorSizes { - maxUserBytes := abi.PaddedPieceSize(sectorSize).Unpadded() - supportedSectors = append(supportedSectors, SectorInfo{sectorSize, maxUserBytes}) - } - - return &ProtocolParams{ - Network: networkName, - AutoSealInterval: autoSealInterval, - BlockTime: plumbing.BlockTime(), - SupportedSectors: supportedSectors, - }, nil -} - -func getNetworkName(ctx context.Context, plumbing protocolParamsPlumbing) (string, error) { - view, err := plumbing.ProtocolStateView(plumbing.ChainHeadKey()) - if err != nil { - return "", errors.Wrap(err, "failed to query state") - } - return view.InitNetworkName(ctx) -} diff --git a/internal/app/go-filecoin/porcelain/protocol_test.go b/internal/app/go-filecoin/porcelain/protocol_test.go deleted file mode 100644 index f812c8ce37..0000000000 --- a/internal/app/go-filecoin/porcelain/protocol_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package porcelain_test - -import ( - "context" - "testing" - "time" - - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" -) - -const protocolTestParamBlockTime = time.Second - -type testProtocolParamsPlumbing struct { - testing *testing.T - autoSealInterval uint -} - -func (tppp *testProtocolParamsPlumbing) ConfigGet(path string) (interface{}, error) { - assert.Equal(tppp.testing, "mining.autoSealIntervalSeconds", path) - return tppp.autoSealInterval, nil -} - -func (tppp *testProtocolParamsPlumbing) ChainHeadKey() block.TipSetKey { - return block.NewTipSetKey() -} - -func (tppp *testProtocolParamsPlumbing) BlockTime() time.Duration { - return protocolTestParamBlockTime -} - -func (tppp *testProtocolParamsPlumbing) ProtocolStateView(_ block.TipSetKey) (porcelain.ProtocolStateView, error) { - return &state.FakeStateView{ - NetworkName: "protocolTest", - }, nil -} - -func TestProtocolParams(t *testing.T) { - t.Parallel() - - t.Run("emits the a ProtocolParams object with the correct values", func(t *testing.T) { - t.Parallel() - - plumbing := &testProtocolParamsPlumbing{ - testing: t, - autoSealInterval: 120, - } - - expected := &porcelain.ProtocolParams{ - AutoSealInterval: 120, - Network: "protocolTest", - SupportedSectors: []porcelain.SectorInfo{ - {constants.DevSectorSize, abi.PaddedPieceSize(constants.DevSectorSize).Unpadded()}, - {constants.FiveHundredTwelveMiBSectorSize, abi.PaddedPieceSize(constants.FiveHundredTwelveMiBSectorSize).Unpadded()}, - }, - BlockTime: protocolTestParamBlockTime, - } - - out, err := porcelain.ProtocolParameters(context.TODO(), plumbing) - require.NoError(t, err) - - assert.Equal(t, expected, out) - }) -} diff --git a/internal/app/go-filecoin/porcelain/wallet.go b/internal/app/go-filecoin/porcelain/wallet.go deleted file mode 100644 index 196f37f6ac..0000000000 --- a/internal/app/go-filecoin/porcelain/wallet.go +++ /dev/null @@ -1,64 +0,0 @@ -package porcelain - -import ( - "context" - - initact "github.com/filecoin-project/specs-actors/actors/builtin/init" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" -) - -// ErrNoDefaultFromAddress is returned when a default wallet address couldn't be determined (eg, there are zero addresses in the wallet). -var ErrNoDefaultFromAddress = errors.New("unable to determine a default wallet address") - -type wbPlumbing interface { - ActorGet(ctx context.Context, addr address.Address) (*actor.Actor, error) -} - -// WalletBalance gets the current balance associated with an address -func WalletBalance(ctx context.Context, plumbing wbPlumbing, addr address.Address) (abi.TokenAmount, error) { - act, err := plumbing.ActorGet(ctx, addr) - if err == types.ErrNotFound || err == initact.ErrAddressNotFound { - // if the account doesn't exit, the balance should be zero - return abi.NewTokenAmount(0), nil - } - if err != nil { - return abi.NewTokenAmount(0), err - } - return act.Balance, nil -} - -type wdaPlumbing interface { - ConfigGet(dottedPath string) (interface{}, error) - ConfigSet(dottedPath string, paramJSON string) error - WalletAddresses() []address.Address -} - -// WalletDefaultAddress returns a default wallet address from the config. -// If none is set it picks the first address in the wallet and -// sets it as the default in the config. -func WalletDefaultAddress(plumbing wdaPlumbing) (address.Address, error) { - ret, err := plumbing.ConfigGet("wallet.defaultAddress") - addr := ret.(address.Address) - if err != nil || !addr.Empty() { - return addr, err - } - - // No default is set; pick the 0th and make it the default. - if len(plumbing.WalletAddresses()) > 0 { - addr := plumbing.WalletAddresses()[0] - err := plumbing.ConfigSet("wallet.defaultAddress", addr.String()) - if err != nil { - return address.Undef, err - } - - return addr, nil - } - - return address.Undef, ErrNoDefaultFromAddress -} diff --git a/internal/app/go-filecoin/porcelain/wallet_test.go b/internal/app/go-filecoin/porcelain/wallet_test.go deleted file mode 100644 index 2a809776bd..0000000000 --- a/internal/app/go-filecoin/porcelain/wallet_test.go +++ /dev/null @@ -1,123 +0,0 @@ -package porcelain_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cfg" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/wallet" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -type wbTestPlumbing struct { - balance types.AttoFIL -} - -type wdaTestPlumbing struct { - config *cfg.Config - wallet *wallet.Wallet -} - -func newWdaTestPlumbing(t *testing.T) *wdaTestPlumbing { - repo := repo.NewInMemoryRepo() - backend, err := wallet.NewDSBackend(repo.WalletDatastore()) - require.NoError(t, err) - return &wdaTestPlumbing{ - config: cfg.NewConfig(repo), - wallet: wallet.New(backend), - } -} - -func (wbtp *wbTestPlumbing) ActorGet(ctx context.Context, addr address.Address) (*actor.Actor, error) { - aux := abi.NewTokenAmount(0) - aux.SetBits(wbtp.balance.Int.Bits()) - testActor := actor.NewActor(cid.Undef, aux, cid.Undef) - return testActor, nil -} - -func (wdatp *wdaTestPlumbing) ConfigGet(dottedPath string) (interface{}, error) { - return wdatp.config.Get(dottedPath) -} - -func (wdatp *wdaTestPlumbing) ConfigSet(dottedPath string, paramJSON string) error { - return wdatp.config.Set(dottedPath, paramJSON) -} - -func (wdatp *wdaTestPlumbing) WalletAddresses() []address.Address { - return wdatp.wallet.Addresses() -} - -func (wdatp *wdaTestPlumbing) WalletNewAddress() (address.Address, error) { - return wallet.NewAddress(wdatp.wallet, address.SECP256K1) -} - -func TestWalletBalance(t *testing.T) { - tf.UnitTest(t) - - t.Run("Returns the correct value for wallet balance", func(t *testing.T) { - ctx := context.Background() - - plumbing := &wbTestPlumbing{ - balance: types.NewAttoFILFromFIL(20), - } - balance, err := porcelain.WalletBalance(ctx, plumbing, address.Undef) - require.NoError(t, err) - - assert.Equal(t, types.NewAttoTokenFromToken(20), balance) - }) -} - -func TestWalletDefaultAddress(t *testing.T) { - tf.UnitTest(t) - - t.Run("it returns the configured wallet default if it exists", func(t *testing.T) { - wdatp := newWdaTestPlumbing(t) - - addr, err := wdatp.WalletNewAddress() - require.NoError(t, err) - err = wdatp.ConfigSet("wallet.defaultAddress", addr.String()) - require.NoError(t, err) - - _, err = porcelain.WalletDefaultAddress(wdatp) - require.NoError(t, err) - }) - - t.Run("default is consistent if none configured", func(t *testing.T) { - wdatp := newWdaTestPlumbing(t) - - addresses := []address.Address{} - for i := 0; i < 10; i++ { - a, err := wdatp.WalletNewAddress() - require.NoError(t, err) - addresses = append(addresses, a) - } - - expected, err := porcelain.WalletDefaultAddress(wdatp) - require.NoError(t, err) - require.True(t, isInList(expected, addresses)) - for i := 0; i < 30; i++ { - got, err := porcelain.WalletDefaultAddress(wdatp) - require.NoError(t, err) - assert.Equal(t, expected, got) - } - }) -} - -func isInList(needle address.Address, haystack []address.Address) bool { - for _, a := range haystack { - if a == needle { - return true - } - } - return false -} diff --git a/internal/pkg/block/block.go b/internal/pkg/block/block.go deleted file mode 100644 index 3436fd63d8..0000000000 --- a/internal/pkg/block/block.go +++ /dev/null @@ -1,183 +0,0 @@ -package block - -import ( - "encoding/json" - "fmt" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - blocks "github.com/ipfs/go-block-format" - cid "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - node "github.com/ipfs/go-ipld-format" - - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" -) - -// BlockMessageLimit is the maximum number of messages in a block -const BlockMessageLimit = 512 - -// Block is a block in the blockchain. -type Block struct { - // control field for encoding struct as an array - _ struct{} `cbor:",toarray"` - - // Miner is the address of the miner actor that mined this block. - Miner address.Address `json:"miner"` - - // Ticket is the ticket submitted with this block. - Ticket Ticket `json:"ticket"` - - // ElectionProof is the vrf proof giving this block's miner authoring rights - ElectionProof *crypto.ElectionProof - - // BeaconEntries contain the verifiable oracle randomness used to elect - // this block's author leader - BeaconEntries []*drand.Entry - - // PoStProofs are the winning post proofs - PoStProofs []PoStProof `json:"PoStProofs"` - - // Parents is the set of parents this block was based on. Typically one, - // but can be several in the case where there were multiple winning ticket- - // holders for an epoch. - Parents TipSetKey `json:"parents"` - - // ParentWeight is the aggregate chain weight of the parent set. - ParentWeight fbig.Int `json:"parentWeight"` - - // Height is the chain height of this block. - Height abi.ChainEpoch `json:"height"` - - // StateRoot is the CID of the root of the state tree after application of the messages in the parent tipset - // to the parent tipset's state root. - StateRoot e.Cid `json:"stateRoot,omitempty"` - - // MessageReceipts is a list of receipts corresponding to the application of the messages in the parent tipset - // to the parent tipset's state root (corresponding to this block's StateRoot). - MessageReceipts e.Cid `json:"messageReceipts,omitempty"` - - // Messages is the set of messages included in this block - Messages e.Cid `json:"messages,omitempty"` - - // The aggregate signature of all BLS signed messages in the block - BLSAggregateSig *crypto.Signature `json:"blsAggregateSig"` - - // The timestamp, in seconds since the Unix epoch, at which this block was created. - Timestamp uint64 `json:"timestamp"` - - // The signature of the miner's worker key over the block - BlockSig *crypto.Signature `json:"blocksig"` - - // ForkSignaling is extra data used by miners to communicate - ForkSignaling uint64 - - cachedCid cid.Cid - - cachedBytes []byte -} - -// IndexMessagesField is the message field position in the encoded block -const IndexMessagesField = 10 - -// IndexParentsField is the parents field position in the encoded block -const IndexParentsField = 5 - -// Cid returns the content id of this block. -func (b *Block) Cid() cid.Cid { - if b.cachedCid == cid.Undef { - if b.cachedBytes == nil { - bytes, err := encoding.Encode(b) - if err != nil { - panic(err) - } - b.cachedBytes = bytes - } - c, err := constants.DefaultCidBuilder.Sum(b.cachedBytes) - if err != nil { - panic(err) - } - - b.cachedCid = c - } - - return b.cachedCid -} - -// ToNode converts the Block to an IPLD node. -func (b *Block) ToNode() node.Node { - data, err := encoding.Encode(b) - if err != nil { - panic(err) - } - c, err := constants.DefaultCidBuilder.Sum(data) - if err != nil { - panic(err) - } - - blk, err := blocks.NewBlockWithCid(data, c) - if err != nil { - panic(err) - } - node, err := cbor.DecodeBlock(blk) - if err != nil { - panic(err) - } - return node -} - -func (b *Block) String() string { - errStr := "(error encoding Block)" - cid := b.Cid() - js, err := json.MarshalIndent(b, "", " ") - if err != nil { - return errStr - } - return fmt.Sprintf("Block cid=[%v]: %s", cid, string(js)) -} - -// DecodeBlock decodes raw cbor bytes into a Block. -func DecodeBlock(b []byte) (*Block, error) { - var out Block - if err := encoding.Decode(b, &out); err != nil { - return nil, err - } - - out.cachedBytes = b - - return &out, nil -} - -// Equals returns true if the Block is equal to other. -func (b *Block) Equals(other *Block) bool { - return b.Cid().Equals(other.Cid()) -} - -// SignatureData returns the block's bytes with a null signature field for -// signature creation and verification -func (b *Block) SignatureData() []byte { - tmp := &Block{ - Miner: b.Miner, - Ticket: b.Ticket, - ElectionProof: b.ElectionProof, - Parents: b.Parents, - ParentWeight: b.ParentWeight, - Height: b.Height, - Messages: b.Messages, - StateRoot: b.StateRoot, - MessageReceipts: b.MessageReceipts, - PoStProofs: b.PoStProofs, - BeaconEntries: b.BeaconEntries, - Timestamp: b.Timestamp, - BLSAggregateSig: b.BLSAggregateSig, - ForkSignaling: b.ForkSignaling, - // BlockSig omitted - } - - return tmp.ToNode().RawData() -} diff --git a/internal/pkg/block/block_test.go b/internal/pkg/block/block_test.go deleted file mode 100644 index 430a4762f7..0000000000 --- a/internal/pkg/block/block_test.go +++ /dev/null @@ -1,443 +0,0 @@ -package block_test - -import ( - "bytes" - "encoding/json" - "reflect" - "testing" - - "github.com/filecoin-project/specs-actors/actors/abi" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - blk "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" -) - -func TestTriangleEncoding(t *testing.T) { - tf.UnitTest(t) - - // We want to be sure that: - // Block => json => Block - // yields exactly the same thing as: - // Block => IPLD node => CBOR => IPLD node => json => IPLD node => Block (!) - // because we want the output encoding of a Block directly from memory - // (first case) to be exactly the same as the output encoding of a Block from - // storage (second case). WTF you might say, and you would not be wrong. The - // use case is machine-parsing command output. For example dag_daemon_test - // dumps the block from memory as json (first case). It then dag gets - // the block by cid which yeilds a json-encoded ipld node (first half of - // the second case). It json decodes this ipld node and then decodes the node - // into a block (second half of the second case). I don't claim this is ideal, - // see: https://github.com/filecoin-project/go-filecoin/issues/599 - - newAddress := vmaddr.NewForTestGetter() - - testRoundTrip := func(t *testing.T, exp *blk.Block) { - jb, err := json.Marshal(exp) - require.NoError(t, err) - var jsonRoundTrip blk.Block - err = json.Unmarshal(jb, &jsonRoundTrip) - require.NoError(t, err) - - ipldNodeOrig, err := encoding.Encode(jsonRoundTrip) - assert.NoError(t, err) - var cborJSONRoundTrip blk.Block - err = encoding.Decode(ipldNodeOrig, &cborJSONRoundTrip) - assert.NoError(t, err) - types.AssertHaveSameCid(t, exp, &cborJSONRoundTrip) - } - t.Run("encoding block with zero fields works", func(t *testing.T) { - testRoundTrip(t, &blk.Block{}) - }) - - t.Run("encoding block with nonzero fields works", func(t *testing.T) { - // We should ensure that every field is set -- zero values might - // pass when non-zero values do not due to nil/null encoding. - posts := []blk.PoStProof{blk.NewPoStProof(constants.DevRegisteredWinningPoStProof, []byte{0x07})} - b := &blk.Block{ - Miner: newAddress(), - Ticket: blk.Ticket{VRFProof: []byte{0x01, 0x02, 0x03}}, - ElectionProof: &crypto.ElectionProof{VRFProof: []byte{0x0a, 0x0b}}, - Height: 2, - BeaconEntries: []*drand.Entry{ - { - Round: drand.Round(1), - Data: []byte{0x3}, - }, - }, - Messages: e.NewCid(types.CidFromString(t, "somecid")), - MessageReceipts: e.NewCid(types.CidFromString(t, "somecid")), - Parents: blk.NewTipSetKey(types.CidFromString(t, "somecid")), - ParentWeight: fbig.NewInt(1000), - StateRoot: e.NewCid(types.CidFromString(t, "somecid")), - Timestamp: 1, - BlockSig: &crypto.Signature{ - Type: crypto.SigTypeBLS, - Data: []byte{0x3}, - }, - BLSAggregateSig: &crypto.Signature{ - Type: crypto.SigTypeBLS, - Data: []byte{0x3}, - }, - PoStProofs: posts, - ForkSignaling: 6, - } - s := reflect.TypeOf(*b) - // This check is here to request that you add a non-zero value for new fields - // to the above (and update the field count below). - // Also please add non zero fields to "b" and "diff" in TestSignatureData - // and add a new check that different values of the new field result in - // different output data. - require.Equal(t, 18, s.NumField()) // Note: this also counts private fields - testRoundTrip(t, b) - }) -} - -func TestBlockString(t *testing.T) { - tf.UnitTest(t) - - var b blk.Block - cid := b.Cid() - - got := b.String() - assert.Contains(t, got, cid.String()) -} - -func TestDecodeBlock(t *testing.T) { - tf.UnitTest(t) - - t.Run("successfully decodes raw bytes to a Filecoin block", func(t *testing.T) { - addrGetter := vmaddr.NewForTestGetter() - - c1 := types.CidFromString(t, "a") - c2 := types.CidFromString(t, "b") - cM := types.CidFromString(t, "messages") - cR := types.CidFromString(t, "receipts") - - before := &blk.Block{ - Miner: addrGetter(), - Ticket: blk.Ticket{VRFProof: []uint8{}}, - Parents: blk.NewTipSetKey(c1), - Height: 2, - ParentWeight: fbig.Zero(), - Messages: e.NewCid(cM), - StateRoot: e.NewCid(c2), - MessageReceipts: e.NewCid(cR), - BlockSig: &crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: []byte{}}, - BLSAggregateSig: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte{}}, - } - - after, err := blk.DecodeBlock(before.ToNode().RawData()) - require.NoError(t, err) - assert.Equal(t, after.Cid(), before.Cid()) - assert.Equal(t, before, after) - }) - - t.Run("decode failure results in an error", func(t *testing.T) { - _, err := blk.DecodeBlock([]byte{1, 2, 3}) - assert.Error(t, err) - assert.Contains(t, err.Error(), "cbor: cannot unmarshal") - }) -} - -func TestEquals(t *testing.T) { - tf.UnitTest(t) - - c1 := types.CidFromString(t, "a") - c2 := types.CidFromString(t, "b") - - s1 := types.CidFromString(t, "state1") - s2 := types.CidFromString(t, "state2") - - var h1 abi.ChainEpoch = 1 - var h2 abi.ChainEpoch = 2 - - b1 := &blk.Block{Parents: blk.NewTipSetKey(c1), StateRoot: e.NewCid(s1), Height: h1} - b2 := &blk.Block{Parents: blk.NewTipSetKey(c1), StateRoot: e.NewCid(s1), Height: h1} - b3 := &blk.Block{Parents: blk.NewTipSetKey(c1), StateRoot: e.NewCid(s2), Height: h1} - b4 := &blk.Block{Parents: blk.NewTipSetKey(c2), StateRoot: e.NewCid(s1), Height: h1} - b5 := &blk.Block{Parents: blk.NewTipSetKey(c1), StateRoot: e.NewCid(s1), Height: h2} - b6 := &blk.Block{Parents: blk.NewTipSetKey(c2), StateRoot: e.NewCid(s1), Height: h2} - b7 := &blk.Block{Parents: blk.NewTipSetKey(c1), StateRoot: e.NewCid(s2), Height: h2} - b8 := &blk.Block{Parents: blk.NewTipSetKey(c2), StateRoot: e.NewCid(s2), Height: h1} - b9 := &blk.Block{Parents: blk.NewTipSetKey(c2), StateRoot: e.NewCid(s2), Height: h2} - assert.True(t, b1.Equals(b1)) - assert.True(t, b1.Equals(b2)) - assert.False(t, b1.Equals(b3)) - assert.False(t, b1.Equals(b4)) - assert.False(t, b1.Equals(b5)) - assert.False(t, b1.Equals(b6)) - assert.False(t, b1.Equals(b7)) - assert.False(t, b1.Equals(b8)) - assert.False(t, b1.Equals(b9)) - assert.True(t, b3.Equals(b3)) - assert.False(t, b3.Equals(b4)) - assert.False(t, b3.Equals(b6)) - assert.False(t, b3.Equals(b9)) - assert.False(t, b4.Equals(b5)) - assert.False(t, b5.Equals(b6)) - assert.False(t, b6.Equals(b7)) - assert.False(t, b7.Equals(b8)) - assert.False(t, b8.Equals(b9)) - assert.True(t, b9.Equals(b9)) -} - -func TestBlockJsonMarshal(t *testing.T) { - tf.UnitTest(t) - - var parent, child blk.Block - child.Miner = vmaddr.NewForTestGetter()() - child.Height = 1 - child.ParentWeight = fbig.Zero() - child.Parents = blk.NewTipSetKey(parent.Cid()) - child.StateRoot = e.NewCid(parent.Cid()) - - child.Messages = e.NewCid(types.CidFromString(t, "somecid")) - child.MessageReceipts = e.NewCid(types.CidFromString(t, "somecid")) - - marshalled, e1 := json.Marshal(&child) - assert.NoError(t, e1) - str := string(marshalled) - - assert.Contains(t, str, child.Miner.String()) - assert.Contains(t, str, parent.Cid().String()) - assert.Contains(t, str, child.Messages.String()) - assert.Contains(t, str, child.MessageReceipts.String()) - - // marshal/unmarshal symmetry - var unmarshalled blk.Block - e2 := json.Unmarshal(marshalled, &unmarshalled) - assert.NoError(t, e2) - - assert.Equal(t, child, unmarshalled) - types.AssertHaveSameCid(t, &child, &unmarshalled) - assert.True(t, child.Equals(&unmarshalled)) -} - -func TestSignatureData(t *testing.T) { - tf.UnitTest(t) - newAddress := vmaddr.NewForTestGetter() - posts := []blk.PoStProof{blk.NewPoStProof(constants.DevRegisteredWinningPoStProof, []byte{0x07})} - - b := &blk.Block{ - Miner: newAddress(), - Ticket: blk.Ticket{VRFProof: []byte{0x01, 0x02, 0x03}}, - ElectionProof: &crypto.ElectionProof{VRFProof: []byte{0x0a, 0x0b}}, - BeaconEntries: []*drand.Entry{ - { - Round: drand.Round(5), - Data: []byte{0x0c}, - }, - }, - Height: 2, - Messages: e.NewCid(types.CidFromString(t, "somecid")), - MessageReceipts: e.NewCid(types.CidFromString(t, "somecid")), - Parents: blk.NewTipSetKey(types.CidFromString(t, "somecid")), - ParentWeight: fbig.NewInt(1000), - ForkSignaling: 3, - StateRoot: e.NewCid(types.CidFromString(t, "somecid")), - Timestamp: 1, - PoStProofs: posts, - BlockSig: &crypto.Signature{ - Type: crypto.SigTypeBLS, - Data: []byte{0x3}, - }, - } - - diffPoSts := []blk.PoStProof{blk.NewPoStProof(constants.DevRegisteredWinningPoStProof, []byte{0x17})} - - diff := &blk.Block{ - Miner: newAddress(), - Ticket: blk.Ticket{VRFProof: []byte{0x03, 0x01, 0x02}}, - ElectionProof: &crypto.ElectionProof{VRFProof: []byte{0x0c, 0x0d}}, - BeaconEntries: []*drand.Entry{ - { - Round: drand.Round(44), - Data: []byte{0xc0}, - }, - }, - Height: 3, - Messages: e.NewCid(types.CidFromString(t, "someothercid")), - MessageReceipts: e.NewCid(types.CidFromString(t, "someothercid")), - Parents: blk.NewTipSetKey(types.CidFromString(t, "someothercid")), - ParentWeight: fbig.NewInt(1001), - ForkSignaling: 2, - StateRoot: e.NewCid(types.CidFromString(t, "someothercid")), - Timestamp: 4, - PoStProofs: diffPoSts, - BlockSig: &crypto.Signature{ - Type: crypto.SigTypeBLS, - Data: []byte{0x4}, - }, - } - - // Changing BlockSig does not affect output - func() { - before := b.SignatureData() - - cpy := b.BlockSig - defer func() { b.BlockSig = cpy }() - - b.BlockSig = diff.BlockSig - after := b.SignatureData() - assert.True(t, bytes.Equal(before, after)) - }() - - // Changing all other fields does affect output - // Note: using reflectors doesn't seem to make this much less tedious - // because it appears that there is no generic field setting function. - func() { - before := b.SignatureData() - - cpy := b.Miner - defer func() { b.Miner = cpy }() - - b.Miner = diff.Miner - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - - cpy := b.Ticket - defer func() { b.Ticket = cpy }() - - b.Ticket = diff.Ticket - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - - cpy := b.ElectionProof - defer func() { b.ElectionProof = cpy }() - - b.ElectionProof = diff.ElectionProof - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - - cpy := b.Height - defer func() { b.Height = cpy }() - - b.Height = diff.Height - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - - cpy := b.Messages - defer func() { b.Messages = cpy }() - - b.Messages = diff.Messages - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - - cpy := b.MessageReceipts - defer func() { b.MessageReceipts = cpy }() - - b.MessageReceipts = diff.MessageReceipts - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - - cpy := b.Parents - defer func() { b.Parents = cpy }() - - b.Parents = diff.Parents - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - - cpy := b.ParentWeight - defer func() { b.ParentWeight = cpy }() - - b.ParentWeight = diff.ParentWeight - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - - cpy := b.ForkSignaling - defer func() { b.ForkSignaling = cpy }() - - b.ForkSignaling = diff.ForkSignaling - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - - cpy := b.StateRoot - defer func() { b.StateRoot = cpy }() - - b.StateRoot = diff.StateRoot - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - - cpy := b.Timestamp - defer func() { b.Timestamp = cpy }() - - b.Timestamp = diff.Timestamp - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - - cpy := b.PoStProofs - defer func() { b.PoStProofs = cpy }() - - b.PoStProofs = diff.PoStProofs - after := b.SignatureData() - assert.False(t, bytes.Equal(before, after)) - }() - - func() { - before := b.SignatureData() - cpy := b.BeaconEntries - defer func() { - b.BeaconEntries = cpy - }() - - b.BeaconEntries = diff.BeaconEntries - after := b.SignatureData() - - assert.False(t, bytes.Equal(before, after)) - }() - -} diff --git a/internal/pkg/block/chain_info.go b/internal/pkg/block/chain_info.go deleted file mode 100644 index 2953cd760b..0000000000 --- a/internal/pkg/block/chain_info.go +++ /dev/null @@ -1,47 +0,0 @@ -package block - -import ( - "fmt" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/libp2p/go-libp2p-core/peer" -) - -// ChainInfo is used to track metadata about a peer and its chain. -type ChainInfo struct { - // The originator of the TipSetKey propagation wave. - Source peer.ID - // The peer that sent us the TipSetKey message. - Sender peer.ID - Head TipSetKey - Height abi.ChainEpoch -} - -// NewChainInfo creates a chain info from a peer id a head tipset key and a -// chain height. -func NewChainInfo(source peer.ID, sender peer.ID, head TipSetKey, height abi.ChainEpoch) *ChainInfo { - return &ChainInfo{ - Source: source, - Sender: sender, - Head: head, - Height: height, - } -} - -// Returns a human-readable string representation of a chain info -func (i *ChainInfo) String() string { - return fmt.Sprintf("{source=%s sender:%s height=%d head=%s}", i.Source, i.Sender, i.Height, i.Head) -} - -// CISlice is for sorting chain infos -type CISlice []*ChainInfo - -// Len returns the number of chain infos in the slice. -func (cis CISlice) Len() int { return len(cis) } - -// Swap swaps chain infos. -func (cis CISlice) Swap(i, j int) { cis[i], cis[j] = cis[j], cis[i] } - -// Less compares chain infos on peer ID. There should only ever be one chain -// info per peer in a CISlice. -func (cis CISlice) Less(i, j int) bool { return string(cis[i].Source) < string(cis[j].Source) } diff --git a/internal/pkg/block/epost_info.go b/internal/pkg/block/epost_info.go deleted file mode 100644 index 91c8bf50b3..0000000000 --- a/internal/pkg/block/epost_info.go +++ /dev/null @@ -1,31 +0,0 @@ -package block - -import ( - "github.com/filecoin-project/specs-actors/actors/abi" -) - -// PoStProof is a winning post proof included in a block header -type PoStProof struct { - _ struct{} `cbor:",toarray"` - RegisteredProof abi.RegisteredProof - ProofBytes []byte -} - -// NewPoStProof constructs an epost proof from registered proof and bytes -func NewPoStProof(rpp abi.RegisteredProof, bs []byte) PoStProof { - return PoStProof{ - RegisteredProof: rpp, - ProofBytes: bs, - } -} - -// FromABIPoStProofs converts the abi post proof type to a local type for -// serialization purposes -func FromABIPoStProofs(postProofs ...abi.PoStProof) []PoStProof { - out := make([]PoStProof, len(postProofs)) - for i, p := range postProofs { - out[i] = PoStProof{RegisteredProof: p.RegisteredProof, ProofBytes: p.ProofBytes} - } - - return out -} diff --git a/internal/pkg/block/full_block.go b/internal/pkg/block/full_block.go deleted file mode 100644 index 18781ea646..0000000000 --- a/internal/pkg/block/full_block.go +++ /dev/null @@ -1,20 +0,0 @@ -package block - -import "github.com/filecoin-project/go-filecoin/internal/pkg/types" - -// FullBlock carries a block header and the message and receipt collections -// referenced from the header. -type FullBlock struct { - Header *Block - SECPMessages []*types.SignedMessage - BLSMessages []*types.UnsignedMessage -} - -// NewFullBlock constructs a new full block. -func NewFullBlock(header *Block, secp []*types.SignedMessage, bls []*types.UnsignedMessage) *FullBlock { - return &FullBlock{ - Header: header, - SECPMessages: secp, - BLSMessages: bls, - } -} diff --git a/internal/pkg/block/testing.go b/internal/pkg/block/testing.go deleted file mode 100644 index d7da49dbd9..0000000000 --- a/internal/pkg/block/testing.go +++ /dev/null @@ -1,15 +0,0 @@ -package block - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -// RequireNewTipSet instantiates and returns a new tipset of the given blocks -// and requires that the setup validation succeed. -func RequireNewTipSet(t *testing.T, blks ...*Block) TipSet { - ts, err := NewTipSet(blks...) - require.NoError(t, err) - return ts -} diff --git a/internal/pkg/block/ticket.go b/internal/pkg/block/ticket.go deleted file mode 100644 index e6ca45ce4a..0000000000 --- a/internal/pkg/block/ticket.go +++ /dev/null @@ -1,28 +0,0 @@ -package block - -import ( - "bytes" - "fmt" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" -) - -// A Ticket is a marker of a tick of the blockchain's clock. It is the source -// of randomness for proofs of storage and leader election. It is generated -// by the miner of a block using a VRF. -type Ticket struct { - _ struct{} `cbor:",toarray"` - // A proof output by running a VRF on the VRFProof of the parent ticket - VRFProof crypto.VRFPi -} - -// String returns the string representation of the VRFProof of the ticket -func (t Ticket) String() string { - return fmt.Sprintf("%x", t.VRFProof) -} - -func (t *Ticket) Compare(o *Ticket) int { - tDigest := t.VRFProof.Digest() - oDigest := o.VRFProof.Digest() - return bytes.Compare(tDigest[:], oDigest[:]) -} diff --git a/internal/pkg/block/tipset.go b/internal/pkg/block/tipset.go deleted file mode 100644 index 05e0f21ee2..0000000000 --- a/internal/pkg/block/tipset.go +++ /dev/null @@ -1,159 +0,0 @@ -package block - -import ( - "bytes" - "sort" - - "github.com/filecoin-project/specs-actors/actors/abi" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/ipfs/go-cid" - "github.com/pkg/errors" -) - -// TipSet is a non-empty, immutable set of blocks at the same height with the same parent set. -// Blocks in a tipset are canonically ordered by ticket. Blocks may be iterated either via -// ToSlice() (which involves a shallow copy) or efficiently by index with At(). -// TipSet is a lightweight value type; passing by pointer is usually unnecessary. -// -// Canonical tipset block ordering does not match the order of CIDs in a TipSetKey used as -// a tipset "key". -type TipSet struct { - // This slice is wrapped in a struct to enforce immutability. - blocks []*Block - // Key is computed at construction and cached. - key TipSetKey -} - -var ( - // errNoBlocks is returned from the tipset constructor when given no blocks. - errNoBlocks = errors.New("no blocks for tipset") - // errUndefTipSet is returned from tipset methods invoked on an undefined tipset. - errUndefTipSet = errors.New("undefined tipset") -) - -// UndefTipSet is a singleton representing a nil or undefined tipset. -var UndefTipSet = TipSet{} - -// NewTipSet builds a new TipSet from a collection of blocks. -// The blocks must be distinct (different CIDs), have the same height, and same parent set. -func NewTipSet(blocks ...*Block) (TipSet, error) { - if len(blocks) == 0 { - return UndefTipSet, errNoBlocks - } - - first := blocks[0] - height := first.Height - parents := first.Parents - weight := first.ParentWeight - cids := make([]cid.Cid, len(blocks)) - - sorted := make([]*Block, len(blocks)) - for i, blk := range blocks { - if i > 0 { // Skip redundant checks for first block - if blk.Height != height { - return UndefTipSet, errors.Errorf("Inconsistent block heights %d and %d", height, blk.Height) - } - if !blk.Parents.Equals(parents) { - return UndefTipSet, errors.Errorf("Inconsistent block parents %s and %s", parents.String(), blk.Parents.String()) - } - if !blk.ParentWeight.Equals(weight) { - return UndefTipSet, errors.Errorf("Inconsistent block parent weights %d and %d", weight, blk.ParentWeight) - } - } - sorted[i] = blk - } - - // Sort blocks by ticket - sort.Slice(sorted, func(i, j int) bool { - cmp := sorted[i].Ticket.Compare(&sorted[j].Ticket) - if cmp == 0 { - // Break ticket ties with the block CIDs, which are distinct. - cmp = bytes.Compare(sorted[i].Cid().Bytes(), sorted[j].Cid().Bytes()) - } - return cmp < 0 - }) - for i, blk := range sorted { - cids[i] = blk.Cid() - } - // Duplicate blocks (CIDs) are rejected here, pass that error through. - key, err := NewTipSetKeyFromUnique(cids...) - if err != nil { - return UndefTipSet, err - } - return TipSet{sorted, key}, nil -} - -// Defined checks whether the tipset is defined. -// Invoking any other methods on an undefined tipset will result in undefined behaviour (c.f. cid.Undef) -func (ts TipSet) Defined() bool { - return len(ts.blocks) > 0 -} - -// Len returns the number of blocks in the tipset. -func (ts TipSet) Len() int { - return len(ts.blocks) -} - -// At returns the i'th block in the tipset. -// An index outside the half-open range [0, Len()) will panic. -func (ts TipSet) At(i int) *Block { - return ts.blocks[i] -} - -// Key returns a key for the tipset. -func (ts TipSet) Key() TipSetKey { - return ts.key -} - -// ToSlice returns an ordered slice of pointers to the tipset's blocks. -func (ts TipSet) ToSlice() []*Block { - slice := make([]*Block, len(ts.blocks)) - copy(slice, ts.blocks) - return slice -} - -// MinTicket returns the smallest ticket of all blocks in the tipset. -func (ts TipSet) MinTicket() (Ticket, error) { - if len(ts.blocks) == 0 { - return Ticket{}, errUndefTipSet - } - return ts.blocks[0].Ticket, nil -} - -// Height returns the height of a tipset. -func (ts TipSet) Height() (abi.ChainEpoch, error) { - if len(ts.blocks) == 0 { - return 0, errUndefTipSet - } - return ts.blocks[0].Height, nil -} - -// Parents returns the CIDs of the parents of the blocks in the tipset. -func (ts TipSet) Parents() (TipSetKey, error) { - if len(ts.blocks) == 0 { - return TipSetKey{}, errUndefTipSet - } - return ts.blocks[0].Parents, nil -} - -// ParentWeight returns the tipset's ParentWeight in fixed point form. -func (ts TipSet) ParentWeight() (fbig.Int, error) { - if len(ts.blocks) == 0 { - return fbig.Zero(), errUndefTipSet - } - return ts.blocks[0].ParentWeight, nil -} - -// Equals tests whether the tipset contains the same blocks as another. -// Equality is not tested deeply: two tipsets are considered equal if their keys (ordered block CIDs) are equal. -func (ts TipSet) Equals(ts2 TipSet) bool { - return ts.Key().Equals(ts2.Key()) -} - -// String returns a formatted string of the CIDs in the TipSet. -// "{ }" -// Note: existing callers use this as a unique key for the tipset. We should change them -// to use the TipSetKey explicitly -func (ts TipSet) String() string { - return ts.Key().String() -} diff --git a/internal/pkg/block/tipset_key.go b/internal/pkg/block/tipset_key.go deleted file mode 100644 index e549126616..0000000000 --- a/internal/pkg/block/tipset_key.go +++ /dev/null @@ -1,225 +0,0 @@ -package block - -import ( - "encoding/json" - "fmt" - "sort" - - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/ipfs/go-cid" - "github.com/pkg/errors" -) - -// TipSetKey is an immutable set of CIDs forming a unique key for a TipSet. -// Equal keys will have equivalent iteration order. CIDs are maintained in -// the same order as the canonical iteration order of blocks in a tipset (which is by ticket). -// This convention is maintained by the caller. The order of input cids to the constructor -// must be the same as this canonical order. It is the caller's responsibility to not -// construct a key with duplicate ids -// TipSetKey is a lightweight value type; passing by pointer is usually unnecessary. -type TipSetKey struct { - // The slice is wrapped in a struct to enforce immutability. - cids []e.Cid -} - -// NewTipSetKey initialises a new TipSetKey. -// Duplicate CIDs are silently ignored. -func NewTipSetKey(ids ...cid.Cid) TipSetKey { - if len(ids) == 0 { - // Empty set is canonically represented by a nil slice rather than zero-length slice - // so that a zero-value exactly matches an empty one. - return TipSetKey{} - } - - cids := make([]e.Cid, len(ids)) - for i := 0; i < len(ids); i++ { - cids[i] = e.NewCid(ids[i]) - } - return TipSetKey{cids} -} - -// NewTipSetKeyFromUnique initialises a set with CIDs that are expected to be unique. -func NewTipSetKeyFromUnique(ids ...cid.Cid) (TipSetKey, error) { - s := NewTipSetKey(ids...) - if s.Len() != len(AsSet(ids)) { - return TipSetKey{}, errors.Errorf("Duplicate CID in %s", ids) - } - return s, nil -} - -// Empty checks whether the set is empty. -func (s TipSetKey) Empty() bool { - return s.Len() == 0 -} - -// Has checks whether the set contains `id`. -func (s TipSetKey) Has(id cid.Cid) bool { - // Find index of the first CID not less than id. - idx := sort.Search(len(s.cids), func(i int) bool { - return !cidLess(s.cids[i].Cid, id) - }) - return idx < len(s.cids) && s.cids[idx].Cid.Equals(id) -} - -// Len returns the number of items in the set. -func (s TipSetKey) Len() int { - return len(s.cids) -} - -// ToSlice returns a slice listing the cids in the set. -func (s TipSetKey) ToSlice() []cid.Cid { - return unwrap(s.cids) -} - -// Iter returns an iterator that allows the caller to iterate the set in its sort order. -func (s TipSetKey) Iter() TipSetKeyIterator { - return TipSetKeyIterator{ - s: s.ToSlice(), - i: 0, - } -} - -// Equals checks whether the set contains exactly the same CIDs as another. -func (s TipSetKey) Equals(other TipSetKey) bool { - if len(s.cids) != len(other.cids) { - return false - } - for i := 0; i < len(s.cids); i++ { - if !s.cids[i].Cid.Equals(other.cids[i].Cid) { - return false - } - } - return true -} - -// ContainsAll checks if another set is a subset of this one. -// We can assume that the relative order of members of one key is -// maintained in the other since we assume that all ids are sorted -// by corresponding block ticket value. -func (s *TipSetKey) ContainsAll(other TipSetKey) bool { - // Since we assume the ids must have the same relative sorting we can - // perform one pass over this set, advancing the other index whenever the - // values match. - otherIdx := 0 - for i := 0; i < s.Len() && otherIdx < other.Len(); i++ { - if s.cids[i].Cid.Equals(other.cids[otherIdx].Cid) { - otherIdx++ - } - } - // otherIdx is advanced the full length only if every element was found in this set. - return otherIdx == other.Len() -} - -// String returns a string listing the cids in the set. -func (s TipSetKey) String() string { - out := "{" - for it := s.Iter(); !it.Complete(); it.Next() { - out = fmt.Sprintf("%s %s", out, it.Value().String()) - } - return out + " }" -} - -// MarshalJSON serializes the key to JSON. -func (s TipSetKey) MarshalJSON() ([]byte, error) { - return json.Marshal(s.cids) -} - -// UnmarshalJSON parses JSON into the key. -// Note that this pattern technically violates the immutability. -func (s *TipSetKey) UnmarshalJSON(b []byte) error { - var cids []cid.Cid - if err := json.Unmarshal(b, &cids); err != nil { - return err - } - - k, err := NewTipSetKeyFromUnique(cids...) - if err != nil { - return err - } - s.cids = k.cids - return nil -} - -// MarshalCBOR marshals the tipset key as an array of cids -func (s TipSetKey) MarshalCBOR() ([]byte, error) { - // encode the zero value as length zero slice instead of nil per spec - if s.cids == nil { - encodableZero := make([]e.Cid, 0) - return encoding.Encode(encodableZero) - } - return encoding.Encode(s.cids) -} - -// UnmarshalCBOR unmarshals a cbor array of cids to a tipset key -func (s *TipSetKey) UnmarshalCBOR(data []byte) error { - var sortedEncCids []e.Cid - err := encoding.Decode(data, &sortedEncCids) - if err != nil { - return err - } - sortedCids := unwrap(sortedEncCids) - tmp, err := NewTipSetKeyFromUnique(sortedCids...) - if err != nil { - return err - } - *s = tmp - return nil -} - -// TipSetKeyIterator is a iterator over a sorted collection of CIDs. -type TipSetKeyIterator struct { - s []cid.Cid - i int -} - -// Complete returns true if the iterator has reached the end of the set. -func (si *TipSetKeyIterator) Complete() bool { - return si.i >= len(si.s) -} - -// Next advances the iterator to the next item and returns true if there is such an item. -func (si *TipSetKeyIterator) Next() bool { - switch { - case si.i < len(si.s): - si.i++ - return si.i < len(si.s) - case si.i == len(si.s): - return false - default: - panic("unreached") - } -} - -// Value returns the current item for the iterator -func (si TipSetKeyIterator) Value() cid.Cid { - switch { - case si.i < len(si.s): - return si.s[si.i] - case si.i == len(si.s): - return cid.Undef - default: - panic("unreached") - } -} - -func cidLess(c1, c2 cid.Cid) bool { - return c1.KeyString() < c2.KeyString() -} - -// unwrap goes from a slice of encodable cids to a slice of cids -func unwrap(eCids []e.Cid) []cid.Cid { - out := make([]cid.Cid, len(eCids)) - for i := 0; i < len(eCids); i++ { - out[i] = eCids[i].Cid - } - return out -} - -func AsSet(cids []cid.Cid) map[cid.Cid]struct{} { - set := make(map[cid.Cid]struct{}) - for _, c := range cids { - set[c] = struct{}{} - } - return set -} diff --git a/internal/pkg/block/tipset_key_test.go b/internal/pkg/block/tipset_key_test.go deleted file mode 100644 index 2e59fdd702..0000000000 --- a/internal/pkg/block/tipset_key_test.go +++ /dev/null @@ -1,140 +0,0 @@ -package block_test - -import ( - "encoding/json" - "testing" - - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - blk "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestTipSetKey(t *testing.T) { - tf.UnitTest(t) - - c1, _ := cid.Parse("zDPWYqFD4b5HLFuPfhkjJJkfvm4r8KLi1V9e2ahJX6Ab16Ay24pJ") - c2, _ := cid.Parse("zDPWYqFD4b5HLFuPfhkjJJkfvm4r8KLi1V9e2ahJX6Ab16Ay24pK") - c3, _ := cid.Parse("zDPWYqFD4b5HLFuPfhkjJJkfvm4r8KLi1V9e2ahJX6Ab16Ay24pL") - c4, _ := cid.Parse("zDPWYqFD4b5HLFuPfhkjJJkfvm4r8KLi1V9e2ahJX6Ab16Ay24pM") - - t.Run("empty", func(t *testing.T) { - s := blk.NewTipSetKey() - assert.True(t, s.Empty()) - assert.Equal(t, 0, s.Len()) - - it := s.Iter() - assert.Equal(t, it.Value(), cid.Undef) - assert.False(t, it.Next()) - }) - - t.Run("zero value is empty", func(t *testing.T) { - var s blk.TipSetKey - assert.True(t, s.Empty()) - assert.Equal(t, 0, s.Len()) - - it := s.Iter() - assert.Equal(t, it.Value(), cid.Undef) - assert.False(t, it.Next()) - - assert.True(t, s.Equals(blk.NewTipSetKey())) - - // Bytes must be equal in order to have equivalent CIDs - zeroBytes, err := encoding.Encode(s) - require.NoError(t, err) - emptyBytes, err := encoding.Encode(blk.NewTipSetKey()) - require.NoError(t, err) - assert.Equal(t, zeroBytes, emptyBytes) - }) - - t.Run("order set by caller", func(t *testing.T) { - s1 := blk.NewTipSetKey(c1, c2, c3) - s2 := blk.NewTipSetKey(c3, c2, c1) - s3 := blk.NewTipSetKey(c3, c2, c1) - - assert.False(t, s1.Equals(s2)) - assert.True(t, s2.Equals(s3)) - - // Sorted order is not a defined property, but an important implementation detail to - // verify unless the implementation is changed. - assert.Equal(t, []cid.Cid{c1, c2, c3}, s1.ToSlice()) - assert.Equal(t, []cid.Cid{c3, c2, c1}, s2.ToSlice()) - }) - - t.Run("fails if unexpected duplicates", func(t *testing.T) { - _, e := blk.NewTipSetKeyFromUnique(c1, c2, c3) - assert.NoError(t, e) - _, e = blk.NewTipSetKeyFromUnique(c1, c1, c2, c3) - assert.Error(t, e) - }) - - t.Run("contains", func(t *testing.T) { - empty := blk.NewTipSetKey() - s := blk.NewTipSetKey(c1, c2, c3) - - assert.False(t, empty.Has(c1)) - assert.True(t, s.Has(c1)) - assert.True(t, s.Has(c2)) - assert.True(t, s.Has(c3)) - assert.False(t, s.Has(c4)) - - assert.True(t, s.ContainsAll(empty)) - assert.True(t, s.ContainsAll(blk.NewTipSetKey(c1))) - assert.True(t, s.ContainsAll(s)) - assert.False(t, s.ContainsAll(blk.NewTipSetKey(c4))) - assert.False(t, s.ContainsAll(blk.NewTipSetKey(c1, c4))) - - assert.True(t, empty.ContainsAll(empty)) - assert.False(t, empty.ContainsAll(s)) - }) - - t.Run("iteration", func(t *testing.T) { - s := blk.NewTipSetKey(c3, c2, c1) - it := s.Iter() - assert.True(t, c3.Equals(it.Value())) - assert.True(t, it.Next()) - assert.True(t, c2.Equals(it.Value())) - assert.True(t, it.Next()) - assert.True(t, c1.Equals(it.Value())) - assert.False(t, it.Next()) - assert.Equal(t, it.Value(), cid.Undef) - assert.True(t, it.Complete()) - }) -} - -func TestTipSetKeyCborRoundtrip(t *testing.T) { - tf.UnitTest(t) - - makeCid := types.NewCidForTestGetter() - exp := blk.NewTipSetKey(makeCid(), makeCid(), makeCid()) - buf, err := encoding.Encode(exp) - assert.NoError(t, err) - - var act blk.TipSetKey - err = encoding.Decode(buf, &act) - assert.NoError(t, err) - - assert.Equal(t, 3, act.Len()) - assert.True(t, act.Equals(exp)) -} - -func TestTipSetKeyJSONRoundtrip(t *testing.T) { - tf.UnitTest(t) - - makeCid := types.NewCidForTestGetter() - exp := blk.NewTipSetKey(makeCid(), makeCid(), makeCid()) - - buf, err := json.Marshal(exp) - assert.NoError(t, err) - - var act blk.TipSetKey - err = json.Unmarshal(buf, &act) - assert.NoError(t, err) - - assert.Equal(t, 3, act.Len()) - assert.True(t, act.Equals(exp)) -} diff --git a/internal/pkg/block/tipset_test.go b/internal/pkg/block/tipset_test.go deleted file mode 100644 index a24df0a312..0000000000 --- a/internal/pkg/block/tipset_test.go +++ /dev/null @@ -1,222 +0,0 @@ -package block_test - -import ( - "bytes" - "testing" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/require" - - "github.com/stretchr/testify/assert" - - blk "github.com/filecoin-project/go-filecoin/internal/pkg/block" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -const parentWeight = uint64(1337000) - -var ( - cid1, cid2 cid.Cid - mockSignerForTest types.MockSigner - cidGetter func() cid.Cid -) - -func init() { - cidGetter = types.NewCidForTestGetter() - cid1 = cidGetter() - cid2 = cidGetter() - - mockSignerForTest, _ = types.NewMockSignersAndKeyInfo(2) -} - -func block(t *testing.T, ticket []byte, height int, parentCid cid.Cid, parentWeight, timestamp uint64, msg string) *blk.Block { - return &blk.Block{ - Ticket: blk.Ticket{VRFProof: ticket}, - Parents: blk.NewTipSetKey(parentCid), - ParentWeight: fbig.NewInt(int64(parentWeight)), - Height: 42 + abi.ChainEpoch(height), - Messages: e.NewCid(cidGetter()), - StateRoot: e.NewCid(cidGetter()), - MessageReceipts: e.NewCid(cidGetter()), - Timestamp: timestamp, - } -} - -func TestTipSet(t *testing.T) { - tf.UnitTest(t) - - b1, b2, b3 := makeTestBlocks(t) - - t.Run("undefined tipset", func(t *testing.T) { - assert.False(t, blk.UndefTipSet.Defined()) - // No other methods are defined - }) - - t.Run("ordered by ticket digest", func(t *testing.T) { - ts := RequireNewTipSet(t, b3, b2, b1) // Presented in reverse order - assert.True(t, ts.Defined()) - assert.Equal(t, b1, ts.At(0)) - assert.Equal(t, b2, ts.At(1)) - assert.Equal(t, b3, ts.At(2)) - assert.Equal(t, []*blk.Block{b1, b2, b3}, ts.ToSlice()) - }) - - t.Run("order breaks ties with CID", func(t *testing.T) { - b1 := block(t, []byte{1}, 1, cid1, parentWeight, 1, "1") - b2 := block(t, []byte{1}, 1, cid1, parentWeight, 2, "2") - - ts := RequireNewTipSet(t, b1, b2) - if bytes.Compare(b1.Cid().Bytes(), b2.Cid().Bytes()) < 0 { - assert.Equal(t, []*blk.Block{b1, b2}, ts.ToSlice()) - } else { - assert.Equal(t, []*blk.Block{b2, b1}, ts.ToSlice()) - } - }) - - t.Run("len", func(t *testing.T) { - t1 := RequireNewTipSet(t, b1) - assert.True(t, t1.Defined()) - assert.Equal(t, 1, t1.Len()) - - t3 := RequireNewTipSet(t, b1, b2, b3) - assert.True(t, t3.Defined()) - assert.Equal(t, 3, t3.Len()) - }) - - t.Run("key", func(t *testing.T) { - assert.Equal(t, blk.NewTipSetKey(b1.Cid()), RequireNewTipSet(t, b1).Key()) - // sorted ticket order is b1, b2, b3 - assert.Equal(t, blk.NewTipSetKey(b1.Cid(), b2.Cid(), b3.Cid()), - RequireNewTipSet(t, b2, b3, b1).Key()) - }) - - t.Run("height", func(t *testing.T) { - tsHeight, _ := RequireNewTipSet(t, b1).Height() - assert.Equal(t, b1.Height, tsHeight) - }) - - t.Run("parents", func(t *testing.T) { - tsParents, _ := RequireNewTipSet(t, b1).Parents() - assert.Equal(t, b1.Parents, tsParents) - }) - - t.Run("parent weight", func(t *testing.T) { - tsParentWeight, _ := RequireNewTipSet(t, b1).ParentWeight() - assert.Equal(t, types.Uint64ToBig(parentWeight), tsParentWeight) - }) - - t.Run("min ticket", func(t *testing.T) { - tsTicket, _ := RequireNewTipSet(t, b1).MinTicket() - assert.Equal(t, b1.Ticket, tsTicket) - - tsTicket, _ = RequireNewTipSet(t, b2).MinTicket() - assert.Equal(t, b2.Ticket, tsTicket) - - tsTicket, _ = RequireNewTipSet(t, b3, b2, b1).MinTicket() - assert.Equal(t, b1.Ticket, tsTicket) - }) - - t.Run("equality", func(t *testing.T) { - ts1a := RequireNewTipSet(t, b3, b2, b1) - ts1b := RequireNewTipSet(t, b1, b2, b3) - ts2 := RequireNewTipSet(t, b1, b2) - ts3 := RequireNewTipSet(t, b2) - - assert.Equal(t, ts1a, ts1a) - assert.Equal(t, ts1a, ts1b) - assert.NotEqual(t, ts1a, ts2) - assert.NotEqual(t, ts1a, ts3) - assert.NotEqual(t, ts1a, blk.UndefTipSet) - assert.NotEqual(t, ts2, blk.UndefTipSet) - assert.NotEqual(t, ts3, blk.UndefTipSet) - }) - - t.Run("slice", func(t *testing.T) { - assert.Equal(t, []*blk.Block{b1}, RequireNewTipSet(t, b1).ToSlice()) - - ts := RequireNewTipSet(t, b3, b2, b1) // Presented in reverse order - slice := ts.ToSlice() - assert.Equal(t, []*blk.Block{b1, b2, b3}, slice) - - slice[1] = b1 - slice[2] = b2 - assert.NotEqual(t, slice, ts.ToSlice()) - assert.Equal(t, []*blk.Block{b1, b2, b3}, ts.ToSlice()) // tipset is immutable - }) - - t.Run("string", func(t *testing.T) { - // String shouldn't really need testing, but some existing code uses the string as a - // datastore key and depends on the format exactly. - assert.Equal(t, "{ "+b1.Cid().String()+" }", RequireNewTipSet(t, b1).String()) - - expected := blk.NewTipSetKey(b1.Cid(), b2.Cid(), b3.Cid()).String() - assert.Equal(t, expected, RequireNewTipSet(t, b3, b2, b1).String()) - }) - - t.Run("empty new tipset fails", func(t *testing.T) { - _, err := blk.NewTipSet() - require.Error(t, err) - assert.Contains(t, err.Error(), "no blocks for tipset") - }) - - t.Run("duplicate block fails new tipset", func(t *testing.T) { - b1, b2, b3 = makeTestBlocks(t) - ts, err := blk.NewTipSet(b1, b2, b1) - assert.Error(t, err) - assert.False(t, ts.Defined()) - }) - - t.Run("mismatched height fails new tipset", func(t *testing.T) { - b1, b2, b3 = makeTestBlocks(t) - b1.Height = 3 - ts, err := blk.NewTipSet(b1, b2, b3) - assert.Error(t, err) - assert.False(t, ts.Defined()) - }) - - t.Run("mismatched parents fails new tipset", func(t *testing.T) { - b1, b2, b3 = makeTestBlocks(t) - b1.Parents = blk.NewTipSetKey(cid1, cid2) - ts, err := blk.NewTipSet(b1, b2, b3) - assert.Error(t, err) - assert.False(t, ts.Defined()) - }) - - t.Run("mismatched parent weight fails new tipset", func(t *testing.T) { - b1, b2, b3 = makeTestBlocks(t) - b1.ParentWeight = fbig.NewInt(3000) - ts, err := blk.NewTipSet(b1, b2, b3) - assert.Error(t, err) - assert.False(t, ts.Defined()) - }) -} - -func TestUndefKey(t *testing.T) { - ts := blk.UndefTipSet - udKey := ts.Key() - assert.True(t, udKey.Empty()) -} - -func makeTestBlocks(t *testing.T) (*blk.Block, *blk.Block, *blk.Block) { - b1 := block(t, []byte{2}, 1, cid1, parentWeight, 1, "1") - b2 := block(t, []byte{3}, 1, cid1, parentWeight, 2, "2") - b3 := block(t, []byte{1}, 1, cid1, parentWeight, 3, "3") - - // The tickets are constructed such that their digests are ordered. - require.True(t, b1.Ticket.Compare(&b2.Ticket) < 0) - require.True(t, b2.Ticket.Compare(&b3.Ticket) < 0) - return b1, b2, b3 -} - -// RequireNewTipSet instantiates and returns a new tipset of the given blocks -// and requires that the setup validation succeed. -func RequireNewTipSet(t *testing.T, blks ...*blk.Block) blk.TipSet { - ts, err := blk.NewTipSet(blks...) - require.NoError(t, err) - return ts -} diff --git a/internal/pkg/cborutil/msgreader.go b/internal/pkg/cborutil/msgreader.go deleted file mode 100644 index 687ff0489f..0000000000 --- a/internal/pkg/cborutil/msgreader.go +++ /dev/null @@ -1,32 +0,0 @@ -package cborutil - -import ( - "bufio" - "fmt" - "io" - - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" -) - -// MaxMessageSize is the maximum message size to read -const MaxMessageSize = 256 << 10 - -// ErrMessageTooLarge is returned when reading too big of a message -var ErrMessageTooLarge = fmt.Errorf("attempted to read a message larger than the limit") - -// MsgReader is a cbor message reader -type MsgReader struct { - br *bufio.Reader -} - -// NewMsgReader returns a new MsgReader -func NewMsgReader(r io.Reader) *MsgReader { - return &MsgReader{ - br: bufio.NewReader(r), - } -} - -// ReadMsg reads a cbor message into the given object -func (mr *MsgReader) ReadMsg(i interface{}) error { - return encoding.StreamDecode(mr.br, i) -} diff --git a/internal/pkg/cborutil/store.go b/internal/pkg/cborutil/store.go deleted file mode 100644 index 1dacdb1082..0000000000 --- a/internal/pkg/cborutil/store.go +++ /dev/null @@ -1,84 +0,0 @@ -package cborutil - -import ( - "context" - "time" - - blocks "github.com/ipfs/go-block-format" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" -) - -// IpldStore is a go-filecoin implementation of the go-hamt-ipld CborStore -// interface. -type IpldStore struct { - blocks Blocks -} - -// Blocks is the interface of block storage needed by the IpldStore -type Blocks interface { - GetBlock(context.Context, cid.Cid) (blocks.Block, error) - AddBlock(blocks.Block) error -} - -// Blockstore is the interface of internal block storage used to implement -// a default Blocks interface. -type Blockstore interface { - Get(cid.Cid) (blocks.Block, error) - Put(blocks.Block) error -} - -type bswrapper struct { - bs Blockstore -} - -func (bs *bswrapper) GetBlock(_ context.Context, c cid.Cid) (blocks.Block, error) { - return bs.bs.Get(c) -} - -func (bs *bswrapper) AddBlock(blk blocks.Block) error { - return bs.bs.Put(blk) -} - -// NewIpldStore returns an ipldstore backed by a blockstore. -func NewIpldStore(bs Blockstore) *IpldStore { - return &IpldStore{blocks: &bswrapper{bs}} -} - -// Get decodes the cbor bytes in the ipld node pointed to by cid c into out. -func (s *IpldStore) Get(ctx context.Context, c cid.Cid, out interface{}) error { - ctx, cancel := context.WithTimeout(ctx, time.Second*10) - defer cancel() - - blk, err := s.blocks.GetBlock(ctx, c) - if err != nil { - return err - } - return encoding.Decode(blk.RawData(), out) -} - -// Put encodes the interface into cbor bytes and stores them as a block -func (s *IpldStore) Put(ctx context.Context, v interface{}) (cid.Cid, error) { - data, err := encoding.Encode(v) - if err != nil { - return cid.Undef, err - } - - c, err := constants.DefaultCidBuilder.Sum(data) - if err != nil { - return cid.Undef, err - } - - blk, err := blocks.NewBlockWithCid(data, c) - if err != nil { - return cid.Undef, err - } - - if err := s.blocks.AddBlock(blk); err != nil { - return cid.Undef, err - } - - return c, nil -} diff --git a/internal/pkg/chain/car.go b/internal/pkg/chain/car.go deleted file mode 100644 index 21fcb1e5ce..0000000000 --- a/internal/pkg/chain/car.go +++ /dev/null @@ -1,220 +0,0 @@ -package chain - -import ( - "context" - "io" - - blocks "github.com/ipfs/go-block-format" - "github.com/ipfs/go-cid" - format "github.com/ipfs/go-ipld-format" - logging "github.com/ipfs/go-log/v2" - "github.com/ipld/go-car" - carutil "github.com/ipld/go-car/util" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -var logCar = logging.Logger("chain/car") - -type carChainReader interface { - GetTipSet(block.TipSetKey) (block.TipSet, error) -} -type carMessageReader interface { - MessageProvider -} - -type carStateReader interface { - ChainStateTree(ctx context.Context, c cid.Cid) ([]format.Node, error) -} - -// Fields need to stay lower case to match car's default refmt encoding as -// refmt can't handle arbitrary casing. -type carHeader struct { - Roots block.TipSetKey `cbor:"roots"` - Version uint64 `cbor:"version"` -} - -// Export will export a chain (all blocks and their messages) to the writer `out`. -func Export(ctx context.Context, headTS block.TipSet, cr carChainReader, mr carMessageReader, sr carStateReader, out io.Writer) error { - // ensure we don't duplicate writes to the car file. // e.g. only write EmptyMessageCID once. - filter := make(map[cid.Cid]bool) - - // fail if headTS isn't in the store. - if _, err := cr.GetTipSet(headTS.Key()); err != nil { - return err - } - - // Write the car header - ch := carHeader{ - Roots: headTS.Key(), - Version: 1, - } - chb, err := encoding.Encode(ch) - if err != nil { - return err - } - - logCar.Debugf("car file chain head: %s", headTS.Key()) - if err := carutil.LdWrite(out, chb); err != nil { - return err - } - - iter := IterAncestors(ctx, cr, headTS) - // accumulate TipSets in descending order. - for ; !iter.Complete(); err = iter.Next() { - if err != nil { - return err - } - tip := iter.Value() - // write blocks - for i := 0; i < tip.Len(); i++ { - hdr := tip.At(i) - logCar.Debugf("writing block: %s", hdr.Cid()) - - if !filter[hdr.Cid()] { - if err := carutil.LdWrite(out, hdr.Cid().Bytes(), hdr.ToNode().RawData()); err != nil { - return err - } - filter[hdr.Cid()] = true - } - - meta, err := mr.LoadTxMeta(ctx, hdr.Messages.Cid) - if err != nil { - return err - } - - if !filter[hdr.Messages.Cid] { - logCar.Debugf("writing txMeta: %s", hdr.Messages) - if err := exportTxMeta(ctx, out, meta); err != nil { - return err - } - filter[hdr.Messages.Cid] = true - } - - secpMsgs, blsMsgs, err := mr.LoadMessages(ctx, hdr.Messages.Cid) - if err != nil { - return err - } - - if !filter[meta.SecpRoot.Cid] { - logCar.Debugf("writing secp message collection: %s", hdr.Messages) - if err := exportAMTSignedMessages(ctx, out, secpMsgs); err != nil { - return err - } - filter[meta.SecpRoot.Cid] = true - } - - if !filter[meta.BLSRoot.Cid] { - logCar.Debugf("writing bls message collection: %s", hdr.Messages) - if err := exportAMTUnsignedMessages(ctx, out, blsMsgs); err != nil { - return err - } - filter[meta.BLSRoot.Cid] = true - } - - // TODO(#3473) we can remove MessageReceipts from the exported file once addressed. - rect, err := mr.LoadReceipts(ctx, hdr.MessageReceipts.Cid) - if err != nil { - return err - } - - if !filter[hdr.MessageReceipts.Cid] { - logCar.Debugf("writing message-receipt collection: %s", hdr.Messages) - if err := exportAMTReceipts(ctx, out, rect); err != nil { - return err - } - filter[hdr.MessageReceipts.Cid] = true - } - - if hdr.Height == 0 { - logCar.Debugf("writing state tree: %s", hdr.StateRoot) - stateRoots, err := sr.ChainStateTree(ctx, hdr.StateRoot.Cid) - if err != nil { - return err - } - for _, r := range stateRoots { - if err := carutil.LdWrite(out, r.Cid().Bytes(), r.RawData()); err != nil { - return err - } - } - } - } - } - return nil -} - -func exportAMTSignedMessages(ctx context.Context, out io.Writer, smsgs []*types.SignedMessage) error { - ms := carWritingMessageStore(out) - - cids, err := ms.storeSignedMessages(smsgs) - if err != nil { - return err - } - - _, err = ms.storeAMTCids(ctx, cids) - return err -} - -func exportAMTUnsignedMessages(ctx context.Context, out io.Writer, umsgs []*types.UnsignedMessage) error { - ms := carWritingMessageStore(out) - - cids, err := ms.storeUnsignedMessages(umsgs) - if err != nil { - return err - } - - _, err = ms.storeAMTCids(ctx, cids) - return err -} - -func exportAMTReceipts(ctx context.Context, out io.Writer, receipts []vm.MessageReceipt) error { - ms := carWritingMessageStore(out) - - _, err := ms.StoreReceipts(ctx, receipts) - return err -} - -func exportTxMeta(ctx context.Context, out io.Writer, meta types.TxMeta) error { - ms := carWritingMessageStore(out) - _, err := ms.StoreTxMeta(ctx, meta) - return err -} - -func carWritingMessageStore(out io.Writer) *MessageStore { - return NewMessageStore(carExportBlockstore{out: out}) -} - -type carStore interface { - Put(blocks.Block) error -} - -// Import imports a chain from `in` to `bs`. -func Import(ctx context.Context, cs carStore, in io.Reader) (block.TipSetKey, error) { - header, err := car.LoadCar(cs, in) - if err != nil { - return block.UndefTipSet.Key(), err - } - headKey := block.NewTipSetKey(header.Roots...) - return headKey, nil -} - -// carExportBlockstore allows a structure that would normally put blocks in a block store to output to a car file instead. -type carExportBlockstore struct { - out io.Writer -} - -func (cs carExportBlockstore) DeleteBlock(c cid.Cid) error { panic("not implement") } -func (cs carExportBlockstore) Has(c cid.Cid) (bool, error) { panic("not implement") } -func (cs carExportBlockstore) Get(c cid.Cid) (blocks.Block, error) { panic("not implement") } -func (cs carExportBlockstore) GetSize(c cid.Cid) (int, error) { panic("not implement") } -func (cs carExportBlockstore) Put(b blocks.Block) error { - return carutil.LdWrite(cs.out, b.Cid().Bytes(), b.RawData()) -} -func (cs carExportBlockstore) PutMany(b []blocks.Block) error { panic("not implement") } -func (cs carExportBlockstore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) { - panic("not implement") -} -func (cs carExportBlockstore) HashOnRead(enabled bool) { panic("not implement") } diff --git a/internal/pkg/chain/car_test.go b/internal/pkg/chain/car_test.go deleted file mode 100644 index a22c8070b4..0000000000 --- a/internal/pkg/chain/car_test.go +++ /dev/null @@ -1,326 +0,0 @@ -package chain_test - -import ( - "bufio" - "bytes" - "context" - - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-amt-ipld/v2" - - "github.com/ipfs/go-cid" - ds "github.com/ipfs/go-datastore" - blockstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - format "github.com/ipfs/go-ipld-format" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - typegen "github.com/whyrusleeping/cbor-gen" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -func TestChainImportExportGenesis(t *testing.T) { - tf.UnitTest(t) - - ctx, gene, cb, carW, carR, bstore := setupDeps(t) - - // export the car file to a carW - mustExportToBuffer(ctx, t, gene, cb, &mockStateReader{}, carW) - - // import the car file from the carR - importedKey := mustImportFromBuffer(ctx, t, bstore, carR) - assert.Equal(t, gene.Key(), importedKey) - - // walk the blockstore and assert it had all blocks imported - validateBlockstoreImport(ctx, t, gene.Key(), gene.Key(), bstore) -} - -func TestChainImportExportSingleTip(t *testing.T) { - tf.UnitTest(t) - ctx, gene, cb, carW, carR, bstore := setupDeps(t) - // extend the head by one - headTS := cb.AppendOn(gene, 1) - - // export the car file to carW - mustExportToBuffer(ctx, t, headTS, cb, &mockStateReader{}, carW) - - // import the car file from carR - importedKey := mustImportFromBuffer(ctx, t, bstore, carR) - assert.Equal(t, headTS.Key(), importedKey) - - // walk the blockstore and assert it had all blocks imported - validateBlockstoreImport(ctx, t, headTS.Key(), gene.Key(), bstore) -} - -func TestChainImportExportWideTip(t *testing.T) { - tf.UnitTest(t) - ctx, gene, cb, carW, carR, bstore := setupDeps(t) - // extend the head by one, two wide - headTS := cb.AppendOn(gene, 2) - // export the car file to a carW - mustExportToBuffer(ctx, t, headTS, cb, &mockStateReader{}, carW) - // import the car file from carR - importedKey := mustImportFromBuffer(ctx, t, bstore, carR) - assert.Equal(t, headTS.Key(), importedKey) - // walk the blockstore and assert it had all blocks imported - validateBlockstoreImport(ctx, t, headTS.Key(), gene.Key(), bstore) -} - -func TestChainImportExportMultiTip(t *testing.T) { - tf.UnitTest(t) - ctx, gene, cb, carW, carR, bstore := setupDeps(t) - // extend the head by one - headTS := cb.AppendOn(gene, 1) - headTS = cb.AppendOn(headTS, 1) - - // export the car file to a buffer - mustExportToBuffer(ctx, t, headTS, cb, &mockStateReader{}, carW) - - // import the car file from the buffer - importedKey := mustImportFromBuffer(ctx, t, bstore, carR) - assert.Equal(t, headTS.Key(), importedKey) - - // walk the blockstore and assert it had all blocks imported - validateBlockstoreImport(ctx, t, headTS.Key(), gene.Key(), bstore) -} - -func TestChainImportExportMultiWideTip(t *testing.T) { - tf.UnitTest(t) - ctx, gene, cb, carW, carR, bstore := setupDeps(t) - // extend the head by one - headTS := cb.AppendOn(gene, 1) - // extend by one, two wide. - headTS = cb.AppendOn(headTS, 2) - - // export the car file to a buffer - mustExportToBuffer(ctx, t, headTS, cb, &mockStateReader{}, carW) - - // import the car file from the buffer - importedKey := mustImportFromBuffer(ctx, t, bstore, carR) - assert.Equal(t, headTS.Key(), importedKey) - - // walk the blockstore and assert it had all blocks imported - validateBlockstoreImport(ctx, t, headTS.Key(), gene.Key(), bstore) -} - -func TestChainImportExportMultiWideBaseTip(t *testing.T) { - tf.UnitTest(t) - ctx, gene, cb, carW, carR, bstore := setupDeps(t) - // extend the head by one, two wide - headTS := cb.AppendOn(gene, 2) - // extend by one - headTS = cb.AppendOn(headTS, 1) - - // export the car file to a buffer - mustExportToBuffer(ctx, t, headTS, cb, &mockStateReader{}, carW) - - // import the car file from the buffer - importedKey := mustImportFromBuffer(ctx, t, bstore, carR) - assert.Equal(t, headTS.Key(), importedKey) - - // walk the blockstore and assert it had all blocks imported - validateBlockstoreImport(ctx, t, headTS.Key(), gene.Key(), bstore) -} - -func TestChainImportExportMultiWideTips(t *testing.T) { - tf.UnitTest(t) - ctx, gene, cb, carW, carR, bstore := setupDeps(t) - // extend the head by one, two wide - headTS := cb.AppendOn(gene, 2) - // extend by one, two wide - headTS = cb.AppendOn(headTS, 2) - - // export the car file to a buffer - mustExportToBuffer(ctx, t, headTS, cb, &mockStateReader{}, carW) - - // import the car file from the buffer - importedKey := mustImportFromBuffer(ctx, t, bstore, carR) - assert.Equal(t, headTS.Key(), importedKey) - - // walk the blockstore and assert it had all blocks imported - validateBlockstoreImport(ctx, t, headTS.Key(), gene.Key(), bstore) -} - -func TestChainImportExportMessages(t *testing.T) { - tf.UnitTest(t) - - ctx, gene, cb, carW, carR, bstore := setupDeps(t) - - keys := types.MustGenerateKeyInfo(1, 42) - mm := vm.NewMessageMaker(t, keys) - alice := mm.Addresses()[0] - - ts1 := cb.AppendManyOn(1, gene) - msgs := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 1), - mm.NewSignedMessage(alice, 2), - mm.NewSignedMessage(alice, 3), - mm.NewSignedMessage(alice, 4), - mm.NewSignedMessage(alice, 5), - } - ts2 := cb.BuildOneOn(ts1, func(b *chain.BlockBuilder) { - b.AddMessages(msgs, []*types.UnsignedMessage{}) - }) - - // export the car file to a buffer - mustExportToBuffer(ctx, t, ts2, cb, &mockStateReader{}, carW) - - // import the car file from the buffer - importedKey := mustImportFromBuffer(ctx, t, bstore, carR) - assert.Equal(t, ts2.Key(), importedKey) - - // walk the blockstore and assert it had all blocks imported - validateBlockstoreImport(ctx, t, ts2.Key(), gene.Key(), bstore) -} - -func TestChainImportExportMultiTipSetWithMessages(t *testing.T) { - tf.UnitTest(t) - - ctx, gene, cb, carW, carR, bstore := setupDeps(t) - - keys := types.MustGenerateKeyInfo(1, 42) - mm := vm.NewMessageMaker(t, keys) - alice := mm.Addresses()[0] - - ts1 := cb.AppendManyOn(1, gene) - msgs := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 1), - mm.NewSignedMessage(alice, 2), - mm.NewSignedMessage(alice, 3), - mm.NewSignedMessage(alice, 4), - mm.NewSignedMessage(alice, 5), - } - ts2 := cb.BuildOneOn(ts1, func(b *chain.BlockBuilder) { - b.AddMessages( - msgs, - []*types.UnsignedMessage{}, - ) - }) - - ts3 := cb.AppendOn(ts2, 3) - - // export the car file to a buffer - mustExportToBuffer(ctx, t, ts3, cb, &mockStateReader{}, carW) - - // import the car file from the buffer - importedKey := mustImportFromBuffer(ctx, t, bstore, carR) - assert.Equal(t, ts3.Key(), importedKey) - - // walk the blockstore and assert it had all blocks imported - validateBlockstoreImport(ctx, t, ts3.Key(), gene.Key(), bstore) -} - -func mustExportToBuffer(ctx context.Context, t *testing.T, head block.TipSet, cb *chain.Builder, msr *mockStateReader, carW *bufio.Writer) { - err := chain.Export(ctx, head, cb, cb, msr, carW) - assert.NoError(t, err) - require.NoError(t, carW.Flush()) -} - -func mustImportFromBuffer(ctx context.Context, t *testing.T, bstore blockstore.Blockstore, carR *bufio.Reader) block.TipSetKey { - importedKey, err := chain.Import(ctx, bstore, carR) - assert.NoError(t, err) - return importedKey -} - -func setupDeps(t *testing.T) (context.Context, block.TipSet, *chain.Builder, *bufio.Writer, *bufio.Reader, blockstore.Blockstore) { - // context for operations - ctx := context.Background() - - // chain builder and its genesis - cb := chain.NewBuilder(t, address.Undef) - gene := cb.NewGenesis() - // buffers to read and write the car file from - var buf bytes.Buffer - carW := bufio.NewWriter(&buf) - carR := bufio.NewReader(&buf) - - // a store to import the car file to and validate from. - mds := ds.NewMapDatastore() - bstore := blockstore.NewBlockstore(mds) - return ctx, gene, cb, carW, carR, bstore - -} - -func validateBlockstoreImport(ctx context.Context, t *testing.T, start, stop block.TipSetKey, bstore blockstore.Blockstore) { - as := cbor.NewCborStore(bstore) - - // walk the blockstore and assert it had all blocks imported - cur := start - for { - var parents block.TipSetKey - for _, c := range cur.ToSlice() { - bsBlk, err := bstore.Get(c) - assert.NoError(t, err) - blk, err := block.DecodeBlock(bsBlk.RawData()) - assert.NoError(t, err) - - txMetaBlk, err := bstore.Get(blk.Messages.Cid) - require.NoError(t, err) - var meta types.TxMeta - require.NoError(t, encoding.Decode(txMetaBlk.RawData(), &meta)) - - secpAMT, err := amt.LoadAMT(ctx, as, meta.SecpRoot.Cid) - require.NoError(t, err) - - var smsg types.SignedMessage - requireAMTDecoding(ctx, t, bstore, secpAMT, &smsg) - - blsAMT, err := amt.LoadAMT(ctx, as, meta.BLSRoot.Cid) - require.NoError(t, err) - - var umsg types.UnsignedMessage - requireAMTDecoding(ctx, t, bstore, blsAMT, &umsg) - - rectAMT, err := amt.LoadAMT(ctx, as, blk.MessageReceipts.Cid) - require.NoError(t, err) - - var rect vm.MessageReceipt - requireAMTDecoding(ctx, t, bstore, rectAMT, &rect) - - if parents.Len() == 0 { - parents = blk.Parents - } else { - assert.True(t, blk.Parents.Equals(parents), "malformed tipsets in imported chain") - } - } - if cur.Equals(stop) { - break - } - if cur.Equals(parents) { - t.Fatal("validate blockstore import is looping") - } - cur = parents - } -} - -func requireAMTDecoding(ctx context.Context, t *testing.T, bstore blockstore.Blockstore, root *amt.Root, dest interface{}) { - err := root.ForEach(ctx, func(_ uint64, d *typegen.Deferred) error { - var c e.Cid - if err := encoding.Decode(d.Raw, &c); err != nil { - return err - } - - b, err := bstore.Get(c.Cid) - if err != nil { - return err - } - return encoding.Decode(b.RawData(), dest) - }) - require.NoError(t, err) - -} - -type mockStateReader struct{} - -func (mr *mockStateReader) ChainStateTree(ctx context.Context, c cid.Cid) ([]format.Node, error) { - return nil, nil -} diff --git a/internal/pkg/chain/init.go b/internal/pkg/chain/init.go deleted file mode 100644 index 51cec7006b..0000000000 --- a/internal/pkg/chain/init.go +++ /dev/null @@ -1,53 +0,0 @@ -package chain - -import ( - "context" - "encoding/json" - - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/genesis" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" -) - -// Init initializes a DefaultSyncer in the given repo. -func Init(ctx context.Context, r repo.Repo, bs bstore.Blockstore, cst cbor.IpldStore, gen genesis.InitFunc) (*Store, error) { - // TODO the following should be wrapped in the chain.Store or a sub - // interface. - // Generate the genesis tipset. - genesis, err := gen(cst, bs) - if err != nil { - return nil, err - } - genTipSet, err := block.NewTipSet(genesis) - if err != nil { - return nil, errors.Wrap(err, "failed to generate genesis block") - } - chainStore := NewStore(r.ChainDatastore(), cst, NewStatusReporter(), genesis.Cid()) - - // Persist the genesis tipset to the repo. - genTsas := &TipSetMetadata{ - TipSet: genTipSet, - TipSetStateRoot: genesis.StateRoot.Cid, - TipSetReceipts: genesis.MessageReceipts.Cid, - } - if err = chainStore.PutTipSetMetadata(ctx, genTsas); err != nil { - return nil, errors.Wrap(err, "failed to put genesis block in chain store") - } - if err = chainStore.SetHead(ctx, genTipSet); err != nil { - return nil, errors.Wrap(err, "failed to persist genesis block in chain store") - } - // Persist the genesis cid to the repo. - val, err := json.Marshal(genesis.Cid()) - if err != nil { - return nil, errors.Wrap(err, "failed to marshal genesis cid") - } - if err = r.Datastore().Put(GenesisKey, val); err != nil { - return nil, errors.Wrap(err, "failed to persist genesis cid") - } - - return chainStore, nil -} diff --git a/internal/pkg/chain/message_store.go b/internal/pkg/chain/message_store.go deleted file mode 100644 index 1531f60684..0000000000 --- a/internal/pkg/chain/message_store.go +++ /dev/null @@ -1,305 +0,0 @@ -package chain - -import ( - "context" - - "github.com/filecoin-project/go-amt-ipld/v2" - blocks "github.com/ipfs/go-block-format" - "github.com/ipfs/go-cid" - blockstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/pkg/errors" - cbg "github.com/whyrusleeping/cbor-gen" - - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -// MessageProvider is an interface exposing the load methods of the -// MessageStore. -type MessageProvider interface { - LoadMessages(context.Context, cid.Cid) ([]*types.SignedMessage, []*types.UnsignedMessage, error) - LoadReceipts(context.Context, cid.Cid) ([]vm.MessageReceipt, error) - LoadTxMeta(context.Context, cid.Cid) (types.TxMeta, error) -} - -// MessageWriter is an interface exposing the write methods of the -// MessageStore. -type MessageWriter interface { - StoreMessages(ctx context.Context, secpMessages []*types.SignedMessage, blsMessages []*types.UnsignedMessage) (cid.Cid, error) - StoreReceipts(context.Context, []vm.MessageReceipt) (cid.Cid, error) - StoreTxMeta(context.Context, types.TxMeta) (cid.Cid, error) -} - -// MessageStore stores and loads collections of signed messages and receipts. -type MessageStore struct { - bs blockstore.Blockstore -} - -// NewMessageStore creates and returns a new store -func NewMessageStore(bs blockstore.Blockstore) *MessageStore { - return &MessageStore{bs: bs} -} - -// LoadMessages loads the signed messages in the collection with cid c from ipld -// storage. -func (ms *MessageStore) LoadMessages(ctx context.Context, metaCid cid.Cid) ([]*types.SignedMessage, []*types.UnsignedMessage, error) { - // load txmeta - meta, err := ms.LoadTxMeta(ctx, metaCid) - if err != nil { - return nil, nil, err - } - - secpCids, err := ms.loadAMTCids(ctx, meta.SecpRoot.Cid) - if err != nil { - return nil, nil, err - } - - // load secp messages from cids - secpMsgs := make([]*types.SignedMessage, len(secpCids)) - for i, c := range secpCids { - messageBlock, err := ms.bs.Get(c) - if err != nil { - return nil, nil, errors.Wrapf(err, "failed to get secp message %s", c) - } - - message := &types.SignedMessage{} - if err := encoding.Decode(messageBlock.RawData(), message); err != nil { - return nil, nil, errors.Wrapf(err, "could not decode secp message %s", c) - } - secpMsgs[i] = message - } - - blsCids, err := ms.loadAMTCids(ctx, meta.BLSRoot.Cid) - if err != nil { - return nil, nil, err - } - - // load bls messages from cids - blsMsgs := make([]*types.UnsignedMessage, len(blsCids)) - for i, c := range blsCids { - messageBlock, err := ms.bs.Get(c) - if err != nil { - return nil, nil, errors.Wrapf(err, "failed to get bls message %s", c) - } - - message := &types.UnsignedMessage{} - if err := encoding.Decode(messageBlock.RawData(), message); err != nil { - return nil, nil, errors.Wrapf(err, "could not decode bls message %s", c) - } - blsMsgs[i] = message - } - - return secpMsgs, blsMsgs, nil -} - -// StoreMessages puts the input signed messages to a collection and then writes -// this collection to ipld storage. The cid of the collection is returned. -func (ms *MessageStore) StoreMessages(ctx context.Context, secpMessages []*types.SignedMessage, blsMessages []*types.UnsignedMessage) (cid.Cid, error) { - var ret types.TxMeta - var err error - - // store secp messages - secpCids, err := ms.storeSignedMessages(secpMessages) - if err != nil { - return cid.Undef, errors.Wrap(err, "could not store secp messages") - } - - secpRaw, err := ms.storeAMTCids(ctx, secpCids) - if err != nil { - return cid.Undef, errors.Wrap(err, "could not store secp cids as AMT") - } - ret.SecpRoot = e.NewCid(secpRaw) - - // store bls messages - blsCids, err := ms.storeUnsignedMessages(blsMessages) - if err != nil { - return cid.Undef, errors.Wrap(err, "could not store secp cids as AMT") - } - blsRaw, err := ms.storeAMTCids(ctx, blsCids) - if err != nil { - return cid.Undef, errors.Wrap(err, "could not store bls cids as AMT") - } - ret.BLSRoot = e.NewCid(blsRaw) - - return ms.StoreTxMeta(ctx, ret) -} - -// LoadReceipts loads the signed messages in the collection with cid c from ipld -// storage and returns the slice implied by the collection -func (ms *MessageStore) LoadReceipts(ctx context.Context, c cid.Cid) ([]vm.MessageReceipt, error) { - rawReceipts, err := ms.loadAMTRaw(ctx, c) - if err != nil { - return nil, err - } - - // load receipts from cids - receipts := make([]vm.MessageReceipt, len(rawReceipts)) - for i, raw := range rawReceipts { - receipt := vm.MessageReceipt{} - if err := encoding.Decode(raw, &receipt); err != nil { - return nil, errors.Wrapf(err, "could not decode receipt %s", c) - } - receipts[i] = receipt - } - - return receipts, nil -} - -// StoreReceipts puts the input signed messages to a collection and then writes -// this collection to ipld storage. The cid of the collection is returned. -func (ms *MessageStore) StoreReceipts(ctx context.Context, receipts []vm.MessageReceipt) (cid.Cid, error) { - // store secp messages - rawReceipts, err := ms.storeMessageReceipts(receipts) - if err != nil { - return cid.Undef, errors.Wrap(err, "could not store secp messages") - } - - return ms.storeAMTRaw(ctx, rawReceipts) -} - -func (ms *MessageStore) loadAMTCids(ctx context.Context, c cid.Cid) ([]cid.Cid, error) { - as := cborutil.NewIpldStore(ms.bs) - a, err := amt.LoadAMT(ctx, as, c) - if err != nil { - return []cid.Cid{}, err - } - - cids := make([]cid.Cid, a.Count) - for i := uint64(0); i < a.Count; i++ { - var c cid.Cid - if err := a.Get(ctx, i, &c); err != nil { - return nil, errors.Wrapf(err, "could not retrieve %d cid from AMT", i) - } - - cids[i] = c - } - - return cids, nil -} - -func (ms *MessageStore) loadAMTRaw(ctx context.Context, c cid.Cid) ([][]byte, error) { - as := cborutil.NewIpldStore(ms.bs) - a, err := amt.LoadAMT(ctx, as, c) - if err != nil { - return nil, err - } - - raws := make([][]byte, a.Count) - for i := uint64(0); i < a.Count; i++ { - var raw cbg.Deferred - if err := a.Get(ctx, i, &raw); err != nil { - return nil, errors.Wrapf(err, "could not retrieve %d bytes from AMT", i) - } - - raws[i] = raw.Raw - } - return raws, nil -} - -// LoadTxMeta loads the secproot, blsroot data from the message store -func (ms *MessageStore) LoadTxMeta(ctx context.Context, c cid.Cid) (types.TxMeta, error) { - metaBlock, err := ms.bs.Get(c) - if err != nil { - return types.TxMeta{}, errors.Wrapf(err, "failed to get tx meta %s", c) - } - - var meta types.TxMeta - if err := encoding.Decode(metaBlock.RawData(), &meta); err != nil { - return types.TxMeta{}, errors.Wrapf(err, "could not decode tx meta %s", c) - } - return meta, nil -} - -func (ms *MessageStore) storeUnsignedMessages(messages []*types.UnsignedMessage) ([]cid.Cid, error) { - cids := make([]cid.Cid, len(messages)) - var err error - for i, msg := range messages { - cids[i], _, err = ms.storeBlock(msg) - if err != nil { - return nil, err - } - } - return cids, nil -} - -func (ms *MessageStore) storeSignedMessages(messages []*types.SignedMessage) ([]cid.Cid, error) { - cids := make([]cid.Cid, len(messages)) - var err error - for i, msg := range messages { - cids[i], _, err = ms.storeBlock(msg) - if err != nil { - return nil, err - } - } - return cids, nil -} - -// StoreTxMeta writes the secproot, blsroot block to the message store -func (ms *MessageStore) StoreTxMeta(ctx context.Context, meta types.TxMeta) (cid.Cid, error) { - c, _, err := ms.storeBlock(meta) - return c, err -} - -func (ms *MessageStore) storeMessageReceipts(receipts []vm.MessageReceipt) ([][]byte, error) { - rawReceipts := make([][]byte, len(receipts)) - for i, rcpt := range receipts { - _, rcptBlock, err := ms.storeBlock(rcpt) - if err != nil { - return nil, err - } - rawReceipts[i] = rcptBlock.RawData() - } - return rawReceipts, nil -} - -func (ms *MessageStore) storeBlock(data interface{}) (cid.Cid, blocks.Block, error) { - sblk, err := makeBlock(data) - if err != nil { - return cid.Undef, nil, err - } - - if err := ms.bs.Put(sblk); err != nil { - return cid.Undef, nil, err - } - - return sblk.Cid(), sblk, nil -} - -func makeBlock(obj interface{}) (blocks.Block, error) { - data, err := encoding.Encode(obj) - if err != nil { - return nil, err - } - - c, err := constants.DefaultCidBuilder.Sum(data) - if err != nil { - return nil, err - } - - return blocks.NewBlockWithCid(data, c) -} - -func (ms *MessageStore) storeAMTRaw(ctx context.Context, bs [][]byte) (cid.Cid, error) { - as := cborutil.NewIpldStore(ms.bs) - - rawMarshallers := make([]cbg.CBORMarshaler, len(bs)) - for i, raw := range bs { - rawMarshallers[i] = &cbg.Deferred{Raw: raw} - } - return amt.FromArray(ctx, as, rawMarshallers) -} - -func (ms *MessageStore) storeAMTCids(ctx context.Context, cids []cid.Cid) (cid.Cid, error) { - as := cborutil.NewIpldStore(ms.bs) - - cidMarshallers := make([]cbg.CBORMarshaler, len(cids)) - for i, c := range cids { - cidMarshaller := cbg.CborCid(c) - cidMarshallers[i] = &cidMarshaller - } - return amt.FromArray(ctx, as, cidMarshallers) -} diff --git a/internal/pkg/chain/message_store_test.go b/internal/pkg/chain/message_store_test.go deleted file mode 100644 index 89ff326db2..0000000000 --- a/internal/pkg/chain/message_store_test.go +++ /dev/null @@ -1,64 +0,0 @@ -package chain_test - -import ( - "context" - "testing" - - "github.com/ipfs/go-datastore" - blockstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -func TestMessageStoreMessagesHappy(t *testing.T) { - ctx := context.Background() - keys := types.MustGenerateKeyInfo(2, 42) - mm := vm.NewMessageMaker(t, keys) - - alice := mm.Addresses()[0] - bob := mm.Addresses()[1] - - msgs := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 0), - mm.NewSignedMessage(alice, 1), - mm.NewSignedMessage(bob, 0), - mm.NewSignedMessage(alice, 2), - mm.NewSignedMessage(alice, 3), - mm.NewSignedMessage(bob, 1), - mm.NewSignedMessage(alice, 4), - mm.NewSignedMessage(bob, 2), - } - - bs := blockstore.NewBlockstore(datastore.NewMapDatastore()) - ms := chain.NewMessageStore(bs) - msgsCid, err := ms.StoreMessages(ctx, msgs, []*types.UnsignedMessage{}) - assert.NoError(t, err) - - rtMsgs, _, err := ms.LoadMessages(ctx, msgsCid) - assert.NoError(t, err) - - assert.Equal(t, msgs, rtMsgs) -} - -func TestMessageStoreReceiptsHappy(t *testing.T) { - ctx := context.Background() - mr := vm.NewReceiptMaker() - - receipts := []vm.MessageReceipt{ - mr.NewReceipt(), - mr.NewReceipt(), - mr.NewReceipt(), - } - - bs := blockstore.NewBlockstore(datastore.NewMapDatastore()) - ms := chain.NewMessageStore(bs) - receiptCids, err := ms.StoreReceipts(ctx, receipts) - assert.NoError(t, err) - - rtReceipts, err := ms.LoadReceipts(ctx, receiptCids) - assert.NoError(t, err) - assert.Equal(t, receipts, rtReceipts) -} diff --git a/internal/pkg/chain/reorg.go b/internal/pkg/chain/reorg.go deleted file mode 100644 index 6fa133cacb..0000000000 --- a/internal/pkg/chain/reorg.go +++ /dev/null @@ -1,43 +0,0 @@ -package chain - -import ( - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/pkg/errors" -) - -// IsReorg determines if choosing the end of the newChain as the new head -// would cause a "reorg" given the current head is at curHead. -// A reorg occurs when the old head is not a member of the new chain AND the -// old head is not a subset of the new head. -func IsReorg(old, new, commonAncestor block.TipSet) bool { - oldSortedSet := old.Key() - newSortedSet := new.Key() - - return !(&newSortedSet).ContainsAll(oldSortedSet) && !commonAncestor.Equals(old) -} - -// ReorgDiff returns the dropped and added block heights resulting from the -// reorg given the old and new heads and their common ancestor. -func ReorgDiff(old, new, commonAncestor block.TipSet) (abi.ChainEpoch, abi.ChainEpoch, error) { - hOld, err := old.Height() - if err != nil { - return 0, 0, err - } - - hNew, err := new.Height() - if err != nil { - return 0, 0, err - } - - hCommon, err := commonAncestor.Height() - if err != nil { - return 0, 0, err - } - - if hCommon > hOld || hCommon > hNew { - return 0, 0, errors.New("invalid common ancestor") - } - - return hOld - hCommon, hNew - hCommon, nil -} diff --git a/internal/pkg/chain/reorg_test.go b/internal/pkg/chain/reorg_test.go deleted file mode 100644 index ea4ab2a783..0000000000 --- a/internal/pkg/chain/reorg_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package chain_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestIsReorgFork(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - - // main chain has 3 blocks past CA, fork has 1 - old, new, common := getForkOldNewCommon(ctx, t, builder, 2, 3, 1) - assert.True(t, chain.IsReorg(old, new, common)) -} -func TestIsReorgPrefix(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - // Old head is a direct ancestor of new head - old, new, common := getForkOldNewCommon(ctx, t, builder, 2, 3, 0) - assert.False(t, chain.IsReorg(old, new, common)) -} - -func TestIsReorgSubset(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - old, new, common := getSubsetOldNewCommon(ctx, t, builder, 2) - assert.False(t, chain.IsReorg(old, new, common)) -} - -func TestReorgDiffFork(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - // main chain has 11 blocks past CA, fork has 10 - old, new, common := getForkOldNewCommon(ctx, t, builder, 10, 11, 10) - - dropped, added, err := chain.ReorgDiff(old, new, common) - assert.NoError(t, err) - assert.Equal(t, abi.ChainEpoch(10), dropped) - assert.Equal(t, abi.ChainEpoch(11), added) -} - -func TestReorgDiffSubset(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - old, new, common := getSubsetOldNewCommon(ctx, t, builder, 10) - - dropped, added, err := chain.ReorgDiff(old, new, common) - assert.NoError(t, err) - assert.Equal(t, abi.ChainEpoch(1), dropped) - assert.Equal(t, abi.ChainEpoch(1), added) -} - -// getForkOldNewCommon is a testing helper function that creates chain with the builder. -// The blockchain forks and the common ancestor block is 'a' (> 0) blocks after the genesis block. -// The main chain has an additional 'b' blocks, the fork has an additional 'c' blocks. -// This function returns the forked head, the main head and the common ancestor. -func getForkOldNewCommon(ctx context.Context, t *testing.T, builder *chain.Builder, a, b, c int) (block.TipSet, block.TipSet, block.TipSet) { - // Add "a" tipsets to the head of the chainStore. - commonHead := builder.AppendManyOn(a, block.UndefTipSet) - oldHead := commonHead - - if c > 0 { - oldHead = builder.AppendManyOn(c, commonHead) - } - newHead := builder.AppendManyOn(b, commonHead) - return oldHead, newHead, commonHead -} - -// getSubsetOldNewCommon is a testing helper function that creates and stores -// a blockchain in the chainStore. The blockchain has 'a' blocks after genesis -// and then a fork. The forked head has a single block and the main chain -// consists of this single block and another block together forming a tipset -// that is a superset of the forked head. -func getSubsetOldNewCommon(ctx context.Context, t *testing.T, builder *chain.Builder, a int) (block.TipSet, block.TipSet, block.TipSet) { - commonHead := builder.AppendManyBlocksOnBlocks(a) - block1 := builder.AppendBlockOnBlocks(commonHead) - block2 := builder.AppendBlockOnBlocks(commonHead) - - oldHead := block.RequireNewTipSet(t, block1) - superset := block.RequireNewTipSet(t, block1, block2) - return oldHead, superset, block.RequireNewTipSet(t, commonHead) -} diff --git a/internal/pkg/chain/sampler.go b/internal/pkg/chain/sampler.go deleted file mode 100644 index 4e657ec241..0000000000 --- a/internal/pkg/chain/sampler.go +++ /dev/null @@ -1,79 +0,0 @@ -package chain - -import ( - "context" - - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" -) - -// Creates a new sampler for the chain identified by `head`. -func NewRandomnessSamplerAtHead(reader TipSetProvider, genesisTicket block.Ticket, head block.TipSetKey) *RandomnessSamplerAtHead { - return &RandomnessSamplerAtHead{ - sampler: NewSampler(reader, genesisTicket), - head: head, - } -} - -// A sampler draws randomness seeds from the chain. -// -// This implementation doesn't do any caching: it traverses the chain each time. A cache that could be directly -// indexed by epoch could speed up repeated samples from the same chain. -type Sampler struct { - reader TipSetProvider - genesisTicket block.Ticket -} - -func NewSampler(reader TipSetProvider, genesisTicket block.Ticket) *Sampler { - return &Sampler{reader, genesisTicket} -} - -// Draws a ticket from the chain identified by `head` and the highest tipset with height <= `epoch`. -// If `head` is empty (as when processing the pre-genesis state or the genesis block), the seed derived from -// a fixed genesis ticket. -// Note that this may produce the same value for different, neighbouring epochs when the epoch references a round -// in which no blocks were produced (an empty tipset or "null block"). A caller desiring a unique see for each epoch -// should blend in some distinguishing value (such as the epoch itself) into a hash of this ticket. -func (s *Sampler) SampleTicket(ctx context.Context, head block.TipSetKey, epoch abi.ChainEpoch) (block.Ticket, error) { - var ticket block.Ticket - if !head.Empty() { - start, err := s.reader.GetTipSet(head) - if err != nil { - return block.Ticket{}, err - } - // Note: it is not an error to have epoch > start.Height(); in the case of a run of null blocks the - // sought-after height may be after the base (last non-empty) tipset. - // It's also not an error for the requested epoch to be negative. - - tip, err := FindTipsetAtEpoch(ctx, start, epoch, s.reader) - if err != nil { - return block.Ticket{}, err - } - ticket, err = tip.MinTicket() - if err != nil { - return block.Ticket{}, err - } - } else { - // Sampling for the genesis state or genesis tipset. - ticket = s.genesisTicket - } - - return ticket, nil -} - -///// A chain sampler with a specific head tipset key. ///// - -type RandomnessSamplerAtHead struct { - sampler *Sampler - head block.TipSetKey -} - -func (s *RandomnessSamplerAtHead) Sample(ctx context.Context, epoch abi.ChainEpoch) (crypto.RandomSeed, error) { - ticket, err := s.sampler.SampleTicket(ctx, s.head, epoch) - if err != nil { - return nil, err - } - return crypto.MakeRandomSeed(ticket.VRFProof) -} diff --git a/internal/pkg/chain/sampler_test.go b/internal/pkg/chain/sampler_test.go deleted file mode 100644 index 6953647384..0000000000 --- a/internal/pkg/chain/sampler_test.go +++ /dev/null @@ -1,125 +0,0 @@ -package chain_test - -import ( - "context" - "strconv" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestSamplingChainRandomness(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - genesisTicket := block.Ticket{VRFProof: []byte{1, 2, 3, 4}} - - makeSample := func(sampleEpoch int) block.Ticket { - vrfProof := genesisTicket.VRFProof - if sampleEpoch >= 0 { - vrfProof = []byte(strconv.Itoa(sampleEpoch)) - } - return block.Ticket{ - VRFProof: vrfProof, - } - } - - t.Run("happy path", func(t *testing.T) { - builder, ch := makeChain(t, 21) - head := ch[0].Key() - sampler := chain.NewSampler(builder, genesisTicket) - - r, err := sampler.SampleTicket(ctx, head, abi.ChainEpoch(20)) - assert.NoError(t, err) - assert.Equal(t, makeSample(20), r) - - r, err = sampler.SampleTicket(ctx, head, abi.ChainEpoch(3)) - assert.NoError(t, err) - assert.Equal(t, makeSample(3), r) - - r, err = sampler.SampleTicket(ctx, head, abi.ChainEpoch(0)) - assert.NoError(t, err) - assert.Equal(t, makeSample(0), r) - }) - - t.Run("skips missing tipsets", func(t *testing.T) { - builder, ch := makeChain(t, 21) - head := ch[0].Key() - sampler := chain.NewSampler(builder, genesisTicket) - - // Sample height after the head falls back to the head. - headParent := ch[1].Key() - r, err := sampler.SampleTicket(ctx, headParent, abi.ChainEpoch(20)) - assert.NoError(t, err) - assert.Equal(t, makeSample(19), r) - - // Another way of the same thing, sample > head. - r, err = sampler.SampleTicket(ctx, head, abi.ChainEpoch(21)) - assert.NoError(t, err) - assert.Equal(t, makeSample(20), r) - - // Add new head so as to produce null blocks between 20 and 25 - // i.e.: 25 20 19 18 ... 0 - headAfterNulls := builder.BuildOneOn(ch[0], func(b *chain.BlockBuilder) { - b.IncHeight(4) - b.SetTicket([]byte(strconv.Itoa(25))) - }) - - // Sampling in the nulls falls back to the last non-null - r, err = sampler.SampleTicket(ctx, headAfterNulls.Key(), abi.ChainEpoch(24)) - assert.NoError(t, err) - assert.Equal(t, makeSample(20), r) - }) - - t.Run("genesis", func(t *testing.T) { - builder, ch := makeChain(t, 6) - head := ch[0].Key() - gen := (ch[len(ch)-1]).Key() - sampler := chain.NewSampler(builder, genesisTicket) - - // Sample genesis from longer chain. - r, err := sampler.SampleTicket(ctx, head, abi.ChainEpoch(0)) - assert.NoError(t, err) - assert.Equal(t, makeSample(0), r) - - // Sample before genesis from longer chain. - r, err = sampler.SampleTicket(ctx, head, abi.ChainEpoch(-1)) - assert.NoError(t, err) - assert.Equal(t, makeSample(0), r) - - // Sample genesis from genesis-only chain. - r, err = sampler.SampleTicket(ctx, gen, abi.ChainEpoch(0)) - assert.NoError(t, err) - assert.Equal(t, makeSample(0), r) - - // Sample before genesis from genesis-only chain. - r, err = sampler.SampleTicket(ctx, gen, abi.ChainEpoch(-1)) - assert.NoError(t, err) - assert.Equal(t, makeSample(0), r) - - // Sample empty chain. - r, err = sampler.SampleTicket(ctx, block.NewTipSetKey(), abi.ChainEpoch(0)) - assert.NoError(t, err) - assert.Equal(t, makeSample(-1), r) - r, err = sampler.SampleTicket(ctx, block.NewTipSetKey(), abi.ChainEpoch(-1)) - assert.NoError(t, err) - assert.Equal(t, makeSample(-1), r) - }) -} - -// Builds a chain of single-block tips, returned in descending height order. -// Each block's ticket is its stringified height (as bytes). -func makeChain(t *testing.T, length int) (*chain.Builder, []block.TipSet) { - b := chain.NewBuilder(t, address.Undef) - height := 0 - head := b.BuildManyOn(length, block.UndefTipSet, func(b *chain.BlockBuilder) { - b.SetTicket([]byte(strconv.Itoa(height))) - height++ - }) - return b, b.RequireTipSets(head.Key(), length) -} diff --git a/internal/pkg/chain/status.go b/internal/pkg/chain/status.go deleted file mode 100644 index 4a18a76881..0000000000 --- a/internal/pkg/chain/status.go +++ /dev/null @@ -1,169 +0,0 @@ -package chain - -import ( - "fmt" - "sync" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/specs-actors/actors/abi" - logging "github.com/ipfs/go-log/v2" -) - -var logChainStatus = logging.Logger("chain/status") - -// Reporter defines an interface to updating and reporting the status of the blockchain. -type Reporter interface { - UpdateStatus(...StatusUpdates) - Status() Status -} - -// StatusReporter implements the Reporter interface. -type StatusReporter struct { - statusMu sync.Mutex - status *Status -} - -// UpdateStatus updates the status heald by StatusReporter. -func (sr *StatusReporter) UpdateStatus(update ...StatusUpdates) { - sr.statusMu.Lock() - defer sr.statusMu.Unlock() - for _, u := range update { - u(sr.status) - } - logChainStatus.Debugf("syncing status: %s", sr.status.String()) -} - -// Status returns a copy of the current status. -func (sr *StatusReporter) Status() Status { - return *sr.status -} - -// NewStatusReporter initializes a new StatusReporter. -func NewStatusReporter() *StatusReporter { - return &StatusReporter{ - status: newDefaultChainStatus(), - } -} - -// Status defines a structure used to represent the state of a chain store and syncer. -type Status struct { - // The heaviest TipSet that has been fully validated. - ValidatedHead block.TipSetKey - // The height of ValidatedHead. - ValidatedHeadHeight abi.ChainEpoch - - // They head of the chain currently being fetched/validated, or undef if none. - SyncingHead block.TipSetKey - // The height of SyncingHead. - SyncingHeight uint64 - // Whether SyncingTip is trusted as a head far away from the validated head. - SyncingTrusted bool - // Unix time at which syncing of chain at SyncingHead began, zero if valdation hasn't started. - SyncingStarted int64 - // Whether SyncingHead has been validated. - SyncingComplete bool - // Whether SyncingHead has been fetched. - SyncingFetchComplete bool - - // The key of the tipset currently being fetched - FetchingHead block.TipSetKey - // The height of FetchingHead - FetchingHeight uint64 -} - -// NewDefaultChainStatus returns a ChainStaus with the default empty values. -func newDefaultChainStatus() *Status { - return &Status{ - ValidatedHead: block.UndefTipSet.Key(), - ValidatedHeadHeight: 0, - SyncingHead: block.UndefTipSet.Key(), - SyncingHeight: 0, - SyncingTrusted: false, - SyncingStarted: 0, - SyncingComplete: true, - SyncingFetchComplete: true, - FetchingHead: block.UndefTipSet.Key(), - FetchingHeight: 0, - } -} - -// String returns the Status as a string -func (s Status) String() string { - return fmt.Sprintf("validatedHead=%s, validatedHeight=%d, syncingStarted=%d, syncingHead=%s, syncingHeight=%d, syncingTrusted=%t, syncingComplete=%t syncingFetchComplete=%t fetchingHead=%s, fetchingHeight=%d", - s.ValidatedHead, s.ValidatedHeadHeight, s.SyncingStarted, - s.SyncingHead, s.SyncingHeight, s.SyncingTrusted, s.SyncingComplete, s.SyncingFetchComplete, - s.FetchingHead, s.FetchingHeight) -} - -// StatusUpdates defines a type for ipdating syncer status. -type StatusUpdates func(*Status) - -// -// Validation Updates -// -func validateHead(u block.TipSetKey) StatusUpdates { - return func(s *Status) { - s.ValidatedHead = u - } -} - -func validateHeight(u abi.ChainEpoch) StatusUpdates { - return func(s *Status) { - s.ValidatedHeadHeight = u - } -} - -// -// Syncing Updates -// - -func syncHead(u block.TipSetKey) StatusUpdates { - return func(s *Status) { - s.SyncingHead = u - } -} - -func syncHeight(u uint64) StatusUpdates { - return func(s *Status) { - s.SyncingHeight = u - } -} - -func syncTrusted(u bool) StatusUpdates { - return func(s *Status) { - s.SyncingTrusted = u - } -} - -func syncingStarted(u int64) StatusUpdates { - return func(s *Status) { - s.SyncingStarted = u - } -} - -func syncComplete(u bool) StatusUpdates { - return func(s *Status) { - s.SyncingComplete = u - } -} - -func syncFetchComplete(u bool) StatusUpdates { - return func(s *Status) { - s.SyncingFetchComplete = u - } -} - -// -// Fetching Updates -// - -func fetchHead(u block.TipSetKey) StatusUpdates { - return func(s *Status) { - s.FetchingHead = u - } -} -func fetchHeight(u uint64) StatusUpdates { - return func(s *Status) { - s.FetchingHeight = u - } -} diff --git a/internal/pkg/chain/status_test.go b/internal/pkg/chain/status_test.go deleted file mode 100644 index 45aaca126a..0000000000 --- a/internal/pkg/chain/status_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package chain - -import ( - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/stretchr/testify/assert" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestStatus(t *testing.T) { - tf.UnitTest(t) - - sr := NewStatusReporter() - assert.Equal(t, *newDefaultChainStatus(), sr.Status()) - assert.Equal(t, newDefaultChainStatus().String(), sr.Status().String()) - - // single update - cidFn := types.NewCidForTestGetter() - t0 := block.NewTipSetKey(cidFn()) - sr.UpdateStatus(validateHead(t0)) - assert.Equal(t, t0, sr.Status().ValidatedHead) - - // multi update - t1 := block.NewTipSetKey(cidFn()) - t2 := block.NewTipSetKey(cidFn()) - t3 := block.NewTipSetKey(cidFn()) - expStatus := Status{ - ValidatedHead: t1, - ValidatedHeadHeight: 1, - SyncingHead: t2, - SyncingHeight: 456, - SyncingTrusted: true, - SyncingStarted: 123, - SyncingComplete: false, - SyncingFetchComplete: true, - FetchingHead: t3, - FetchingHeight: 789, - } - sr.UpdateStatus(validateHead(t1), validateHeight(1), syncingStarted(123), syncHead(t2), - syncHeight(456), syncTrusted(true), syncComplete(false), syncFetchComplete(true), - fetchHead(t3), fetchHeight(789)) - assert.Equal(t, expStatus, sr.Status()) -} diff --git a/internal/pkg/chain/store.go b/internal/pkg/chain/store.go deleted file mode 100644 index 8941a4fd77..0000000000 --- a/internal/pkg/chain/store.go +++ /dev/null @@ -1,428 +0,0 @@ -package chain - -import ( - "context" - "runtime/debug" - "sync" - - "github.com/cskr/pubsub" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - cbor "github.com/ipfs/go-ipld-cbor" - logging "github.com/ipfs/go-log/v2" - "github.com/pkg/errors" - "go.opencensus.io/trace" - - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics/tracing" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -// NewHeadTopic is the topic used to publish new heads. -const NewHeadTopic = "new-head" - -// GenesisKey is the key at which the genesis Cid is written in the datastore. -var GenesisKey = datastore.NewKey("/consensus/genesisCid") - -var logStore = logging.Logger("chain.store") - -// HeadKey is the key at which the head tipset cid's are written in the datastore. -var HeadKey = datastore.NewKey("/chain/heaviestTipSet") - -type ipldSource struct { - // cst is a store allowing access - // (un)marshalling and interop with go-ipld-hamt. - cborStore cbor.IpldStore -} - -type tsState struct { - StateRoot e.Cid - Reciepts e.Cid -} - -func newSource(cst cbor.IpldStore) *ipldSource { - return &ipldSource{ - cborStore: cst, - } -} - -// GetBlock retrieves a filecoin block by cid from the IPLD store. -func (source *ipldSource) GetBlock(ctx context.Context, c cid.Cid) (*block.Block, error) { - var block block.Block - - err := source.cborStore.Get(ctx, c, &block) - if err != nil { - return nil, errors.Wrapf(err, "failed to get block %s", c.String()) - } - return &block, nil -} - -// Store is a generic implementation of the Store interface. -// It works(tm) for now. -type Store struct { - // ipldSource is a wrapper around ipld storage. It is used - // for reading filecoin block and state objects kept by the node. - stateAndBlockSource *ipldSource - - // ds is the datastore for the chain's private metadata which consists - // of the tipset key to state root cid mapping, and the heaviest tipset - // key. - ds repo.Datastore - - // genesis is the CID of the genesis block. - genesis cid.Cid - // head is the tipset at the head of the best known chain. - head block.TipSet - // Protects head and genesisCid. - mu sync.RWMutex - - // headEvents is a pubsub channel that publishes an event every time the head changes. - // We operate under the assumption that tipsets published to this channel - // will always be queued and delivered to subscribers in the order discovered. - // Successive published tipsets may be supersets of previously published tipsets. - // TODO: rename to notifications. Also, reconsider ordering assumption depending - // on decisions made around the FC node notification system. - // TODO: replace this with a synchronous event bus - // https://github.com/filecoin-project/go-filecoin/issues/2309 - headEvents *pubsub.PubSub - - // Tracks tipsets by height/parentset for use by expected consensus. - tipIndex *TipIndex - - // Reporter is used by the store to update the current status of the chain. - reporter Reporter -} - -// NewStore constructs a new default store. -func NewStore(ds repo.Datastore, cst cbor.IpldStore, sr Reporter, genesisCid cid.Cid) *Store { - return &Store{ - stateAndBlockSource: newSource(cst), - ds: ds, - headEvents: pubsub.New(12), - tipIndex: NewTipIndex(), - genesis: genesisCid, - reporter: sr, - } -} - -// Load rebuilds the Store's caches by traversing backwards from the -// most recent best head as stored in its datastore. Because Load uses a -// content addressed datastore it guarantees that parent blocks are correctly -// resolved from the datastore. Furthermore Load ensures that all tipsets -// references correctly have the same parent height, weight and parent set. -// However, Load DOES NOT validate state transitions, it assumes that the -// tipset were only Put to the Store after checking for valid transitions. -// -// Furthermore Load trusts that the Store's backing datastore correctly -// preserves the cids of the heaviest tipset under the "HeadKey" datastore key. -// If the HeadKey cids are tampered with and invalid blocks added to the datastore -// then Load could be tricked into loading an invalid chain. Load will error if the -// head does not link back to the expected genesis block, or the Store's -// datastore does not store a link in the chain. In case of error the caller -// should not consider the chain useable and propagate the error. -func (store *Store) Load(ctx context.Context) (err error) { - ctx, span := trace.StartSpan(ctx, "Store.Load") - defer tracing.AddErrorEndSpan(ctx, span, &err) - - // Clear the tipset index. - store.tipIndex = NewTipIndex() - - headTsKey, err := store.loadHead() - if err != nil { - return err - } - - headTs, err := LoadTipSetBlocks(ctx, store.stateAndBlockSource, headTsKey) - if err != nil { - return errors.Wrap(err, "error loading head tipset") - } - startHeight := headTs.At(0).Height - logStore.Infof("start loading chain at tipset: %s, height: %d", headTsKey.String(), startHeight) - // Ensure we only produce 10 log messages regardless of the chain height. - logStatusEvery := startHeight / 10 - - var genesii block.TipSet - // Provide tipsets directly from the block store, not from the tipset index which is - // being rebuilt by this traversal. - tipsetProvider := TipSetProviderFromBlocks(ctx, store.stateAndBlockSource) - for iterator := IterAncestors(ctx, tipsetProvider, headTs); !iterator.Complete(); err = iterator.Next() { - if err != nil { - return err - } - - height, err := iterator.Value().Height() - if err != nil { - return err - } - if logStatusEvery != 0 && (height%logStatusEvery) == 0 { - logStore.Infof("load tipset: %s, height: %v", iterator.Value().String(), height) - } - stateRoot, receipts, err := store.loadStateRootAndReceipts(iterator.Value()) - if err != nil { - return err - } - err = store.PutTipSetMetadata(ctx, &TipSetMetadata{ - TipSet: iterator.Value(), - TipSetStateRoot: stateRoot, - TipSetReceipts: receipts, - }) - if err != nil { - return err - } - - genesii = iterator.Value() - } - // Check genesis here. - if genesii.Len() != 1 { - return errors.Errorf("load terminated with tipset of %d blocks, expected genesis with exactly 1", genesii.Len()) - } - - loadCid := genesii.At(0).Cid() - if !loadCid.Equals(store.genesis) { - return errors.Errorf("expected genesis cid: %s, loaded genesis cid: %s", store.genesis, loadCid) - } - - logStore.Infof("finished loading %d tipsets from %s", startHeight, headTs.String()) - // Set actual head. - return store.SetHead(ctx, headTs) -} - -// loadHead loads the latest known head from disk. -func (store *Store) loadHead() (block.TipSetKey, error) { - var emptyCidSet block.TipSetKey - bb, err := store.ds.Get(HeadKey) - if err != nil { - return emptyCidSet, errors.Wrap(err, "failed to read HeadKey") - } - - var cids block.TipSetKey - err = encoding.Decode(bb, &cids) - if err != nil { - return emptyCidSet, errors.Wrap(err, "failed to cast headCids") - } - - return cids, nil -} - -func (store *Store) loadStateRootAndReceipts(ts block.TipSet) (cid.Cid, cid.Cid, error) { - h, err := ts.Height() - if err != nil { - return cid.Undef, cid.Undef, err - } - key := datastore.NewKey(makeKey(ts.String(), h)) - bb, err := store.ds.Get(key) - if err != nil { - return cid.Undef, cid.Undef, errors.Wrapf(err, "failed to read tipset key %s", ts.String()) - } - - var metadata tsState - err = encoding.Decode(bb, &metadata) - if err != nil { - return cid.Undef, cid.Undef, errors.Wrapf(err, "failed to decode tip set metadata %s", ts.String()) - } - - return metadata.StateRoot.Cid, metadata.Reciepts.Cid, nil -} - -// PutTipSetMetadata persists the blocks of a tipset and the tipset index. -func (store *Store) PutTipSetMetadata(ctx context.Context, tsm *TipSetMetadata) error { - // Update tipindex. - err := store.tipIndex.Put(tsm) - if err != nil { - return err - } - // Persist the state mapping. - if err = store.writeTipSetMetadata(tsm); err != nil { - return err - } - - return nil -} - -// GetTipSet returns the tipset identified by `key`. -func (store *Store) GetTipSet(key block.TipSetKey) (block.TipSet, error) { - return store.tipIndex.GetTipSet(key) -} - -// GetTipSetState returns the aggregate state of the tipset identified by `key`. -func (store *Store) GetTipSetState(ctx context.Context, key block.TipSetKey) (state.Tree, error) { - stateCid, err := store.tipIndex.GetTipSetStateRoot(key) - if err != nil { - return nil, err - } - return state.LoadState(ctx, store.stateAndBlockSource.cborStore, stateCid) -} - -// GetGenesisState returns the state tree at genesis to retrieve initialization parameters. -func (store *Store) GetGenesisState(ctx context.Context) (state.Tree, error) { - // retrieve genesis block - genesis, err := store.stateAndBlockSource.GetBlock(ctx, store.GenesisCid()) - if err != nil { - return nil, err - } - - // create state tree - return state.LoadState(ctx, store.stateAndBlockSource.cborStore, genesis.StateRoot.Cid) -} - -// GetGenesisBlock returns the genesis block held by the chain store. -func (store *Store) GetGenesisBlock(ctx context.Context) (*block.Block, error) { - return store.stateAndBlockSource.GetBlock(ctx, store.GenesisCid()) -} - -// GetTipSetStateRoot returns the aggregate state root CID of the tipset identified by `key`. -func (store *Store) GetTipSetStateRoot(key block.TipSetKey) (cid.Cid, error) { - return store.tipIndex.GetTipSetStateRoot(key) -} - -// GetTipSetReceiptsRoot returns the root CID of the message receipts for the tipset identified by `key`. -func (store *Store) GetTipSetReceiptsRoot(key block.TipSetKey) (cid.Cid, error) { - return store.tipIndex.GetTipSetReceiptsRoot(key) -} - -// HasTipSetAndState returns true iff the default store's tipindex is indexing -// the tipset identified by `key`. -func (store *Store) HasTipSetAndState(ctx context.Context, key block.TipSetKey) bool { - return store.tipIndex.Has(key) -} - -// GetTipSetAndStatesByParentsAndHeight returns the the tipsets and states tracked by -// the default store's tipIndex that have parents identified by `parentKey`. -func (store *Store) GetTipSetAndStatesByParentsAndHeight(parentKey block.TipSetKey, h abi.ChainEpoch) ([]*TipSetMetadata, error) { - return store.tipIndex.GetByParentsAndHeight(parentKey, h) -} - -// HasTipSetAndStatesWithParentsAndHeight returns true if the default store's tipindex -// contains any tipset identified by `parentKey`. -func (store *Store) HasTipSetAndStatesWithParentsAndHeight(parentKey block.TipSetKey, h abi.ChainEpoch) bool { - return store.tipIndex.HasByParentsAndHeight(parentKey, h) -} - -// HeadEvents returns a pubsub interface the pushes events each time the -// default store's head is reset. -func (store *Store) HeadEvents() *pubsub.PubSub { - return store.headEvents -} - -// SetHead sets the passed in tipset as the new head of this chain. -func (store *Store) SetHead(ctx context.Context, ts block.TipSet) error { - logStore.Debugf("SetHead %s", ts.String()) - - // Add logging to debug sporadic test failure. - if !ts.Defined() { - logStore.Errorf("publishing empty tipset") - logStore.Error(debug.Stack()) - } - - noop, err := store.setHeadPersistent(ctx, ts) - if err != nil { - return err - } - if noop { - // exit without sending head events if head was already set to ts - return nil - } - - h, err := ts.Height() - if err != nil { - return err - } - store.reporter.UpdateStatus(validateHead(ts.Key()), validateHeight(h)) - // Publish an event that we have a new head. - store.HeadEvents().Pub(ts, NewHeadTopic) - - return nil -} - -// ReadOnlyStateStore provides a read-only IPLD store for access to chain state. -func (store *Store) ReadOnlyStateStore() cborutil.ReadOnlyIpldStore { - return cborutil.ReadOnlyIpldStore{IpldStore: store.stateAndBlockSource.cborStore} -} - -func (store *Store) setHeadPersistent(ctx context.Context, ts block.TipSet) (bool, error) { - // setHeaadPersistent sets the head in memory and on disk if the head is not - // already set to ts. If it is already set to ts it skips this and returns true - store.mu.Lock() - defer store.mu.Unlock() - - // Ensure consistency by storing this new head on disk. - if errInner := store.writeHead(ctx, ts.Key()); errInner != nil { - return false, errors.Wrap(errInner, "failed to write new Head to datastore") - } - if ts.Equals(store.head) { - return true, nil - } - - store.head = ts - - return false, nil -} - -// writeHead writes the given cid set as head to disk. -func (store *Store) writeHead(ctx context.Context, cids block.TipSetKey) error { - logStore.Debugf("WriteHead %s", cids.String()) - val, err := encoding.Encode(cids) - if err != nil { - return err - } - - return store.ds.Put(HeadKey, val) -} - -// writeTipSetMetadata writes the tipset key and the state root id to the -// datastore. -func (store *Store) writeTipSetMetadata(tsm *TipSetMetadata) error { - if tsm.TipSetStateRoot == cid.Undef { - return errors.New("attempting to write state root cid.Undef") - } - - if tsm.TipSetReceipts == cid.Undef { - return errors.New("attempting to write receipts cid.Undef") - } - - metadata := tsState{ - StateRoot: e.NewCid(tsm.TipSetStateRoot), - Reciepts: e.NewCid(tsm.TipSetReceipts), - } - val, err := encoding.Encode(metadata) - if err != nil { - return err - } - - // datastore keeps key:stateRoot (k,v) pairs. - h, err := tsm.TipSet.Height() - if err != nil { - return err - } - key := datastore.NewKey(makeKey(tsm.TipSet.String(), h)) - return store.ds.Put(key, val) -} - -// GetHead returns the current head tipset cids. -func (store *Store) GetHead() block.TipSetKey { - store.mu.RLock() - defer store.mu.RUnlock() - - if !store.head.Defined() { - return block.TipSetKey{} - } - - return store.head.Key() -} - -// GenesisCid returns the genesis cid of the chain tracked by the default store. -func (store *Store) GenesisCid() cid.Cid { - store.mu.Lock() - defer store.mu.Unlock() - return store.genesis -} - -// Stop stops all activities and cleans up. -func (store *Store) Stop() { - store.headEvents.Shutdown() -} diff --git a/internal/pkg/chain/store_test.go b/internal/pkg/chain/store_test.go deleted file mode 100644 index 114d2b5122..0000000000 --- a/internal/pkg/chain/store_test.go +++ /dev/null @@ -1,436 +0,0 @@ -package chain_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -// Default Chain diagram below. Note that blocks in the same tipset are in parentheses. -// -// genesis -> (link1blk1, link1blk2) -> (link2blk1, link2blk2, link2blk3) -> link3blk1 -> (null block) -> (null block) -> (link4blk1, link4blk2) - -// newChainStore creates a new chain store for tests. -func newChainStore(r repo.Repo, genCid cid.Cid) *chain.Store { - return chain.NewStore(r.Datastore(), cbor.NewMemCborStore(), chain.NewStatusReporter(), genCid) -} - -// requirePutTestChain puts the count tipsets preceding head in the source to -// the input chain store. -func requirePutTestChain(ctx context.Context, t *testing.T, chainStore *chain.Store, head block.TipSetKey, source *chain.Builder, count int) { - tss := source.RequireTipSets(head, count) - for _, ts := range tss { - tsas := &chain.TipSetMetadata{ - TipSet: ts, - TipSetStateRoot: ts.At(0).StateRoot.Cid, - TipSetReceipts: types.EmptyReceiptsCID, - } - require.NoError(t, chainStore.PutTipSetMetadata(ctx, tsas)) - } -} - -func requireGetTsasByParentAndHeight(t *testing.T, chain *chain.Store, pKey block.TipSetKey, h abi.ChainEpoch) []*chain.TipSetMetadata { - tsasSlice, err := chain.GetTipSetAndStatesByParentsAndHeight(pKey, h) - require.NoError(t, err) - return tsasSlice -} - -type HeadAndTipsetGetter interface { - GetHead() block.TipSetKey - GetTipSet(block.TipSetKey) (block.TipSet, error) -} - -func requirePutBlocksToCborStore(t *testing.T, cst cbor.IpldStore, blocks ...*block.Block) { - for _, block := range blocks { - _, err := cst.Put(context.Background(), block) - require.NoError(t, err) - } -} - -/* Putting and getting tipsets and states. */ - -// Adding tipsets to the store doesn't error. -func TestPutTipSet(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - genTS := builder.NewGenesis() - r := repo.NewInMemoryRepo() - cs := newChainStore(r, genTS.At(0).Cid()) - - genTsas := &chain.TipSetMetadata{ - TipSet: genTS, - TipSetStateRoot: genTS.At(0).StateRoot.Cid, - TipSetReceipts: types.EmptyReceiptsCID, - } - err := cs.PutTipSetMetadata(ctx, genTsas) - assert.NoError(t, err) -} - -// Tipsets can be retrieved by key (all block cids). -func TestGetByKey(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - genTS := builder.NewGenesis() - r := repo.NewInMemoryRepo() - cs := newChainStore(r, genTS.At(0).Cid()) - - // Construct test chain data - link1 := builder.AppendOn(genTS, 2) - link2 := builder.AppendOn(link1, 3) - link3 := builder.AppendOn(link2, 1) - link4 := builder.BuildOn(link3, 2, func(bb *chain.BlockBuilder, i int) { bb.IncHeight(2) }) - - // Put the test chain to the store - requirePutTestChain(ctx, t, cs, link4.Key(), builder, 5) - - // Check that we can get all tipsets by key - gotGTS := requireGetTipSet(ctx, t, cs, genTS.Key()) - gotGTSSR := requireGetTipSetStateRoot(ctx, t, cs, genTS.Key()) - - got1TS := requireGetTipSet(ctx, t, cs, link1.Key()) - got1TSSR := requireGetTipSetStateRoot(ctx, t, cs, link1.Key()) - - got2TS := requireGetTipSet(ctx, t, cs, link2.Key()) - got2TSSR := requireGetTipSetStateRoot(ctx, t, cs, link2.Key()) - - got3TS := requireGetTipSet(ctx, t, cs, link3.Key()) - got3TSSR := requireGetTipSetStateRoot(ctx, t, cs, link3.Key()) - - got4TS := requireGetTipSet(ctx, t, cs, link4.Key()) - got4TSSR := requireGetTipSetStateRoot(ctx, t, cs, link4.Key()) - assert.Equal(t, genTS, gotGTS) - assert.Equal(t, link1, got1TS) - assert.Equal(t, link2, got2TS) - assert.Equal(t, link3, got3TS) - assert.Equal(t, link4, got4TS) - - assert.Equal(t, genTS.At(0).StateRoot.Cid, gotGTSSR) - assert.Equal(t, link1.At(0).StateRoot.Cid, got1TSSR) - assert.Equal(t, link2.At(0).StateRoot.Cid, got2TSSR) - assert.Equal(t, link3.At(0).StateRoot.Cid, got3TSSR) - assert.Equal(t, link4.At(0).StateRoot.Cid, got4TSSR) -} - -// Tipset state is loaded correctly -func TestGetTipSetState(t *testing.T) { - ctx := context.Background() - ds := repo.NewInMemoryRepo().ChainDatastore() - bs := bstore.NewBlockstore(ds) - cst := cborutil.NewIpldStore(bs) - - // setup testing state - fakeCode := types.CidFromString(t, "somecid") - balance := abi.NewTokenAmount(1000000) - testActor := actor.NewActor(fakeCode, balance, cid.Undef) - addr := vmaddr.NewForTestGetter()() - st1 := state.NewState(cst) - require.NoError(t, st1.SetActor(ctx, addr, testActor)) - root, err := st1.Commit(ctx) - require.NoError(t, err) - - // link testing state to test block - builder := chain.NewBuilder(t, address.Undef) - gen := builder.NewGenesis() - testTs := builder.BuildOneOn(gen, func(b *chain.BlockBuilder) { - b.SetStateRoot(root) - }) - - // setup chain store - store := chain.NewStore(ds, cst, chain.NewStatusReporter(), gen.At(0).Cid()) - - // add tipset and state to chain store - require.NoError(t, store.PutTipSetMetadata(ctx, &chain.TipSetMetadata{ - TipSet: testTs, - TipSetStateRoot: root, - TipSetReceipts: types.EmptyReceiptsCID, - })) - - // verify output of GetTipSetState - st2, err := store.GetTipSetState(ctx, testTs.Key()) - assert.NoError(t, err) - for actRes := range st2.GetAllActors(ctx) { - assert.NoError(t, actRes.Error) - assert.Equal(t, addr, actRes.Key) - assert.Equal(t, fakeCode, actRes.Actor.Code.Cid) - assert.Equal(t, testActor.Head, actRes.Actor.Head) - assert.Equal(t, uint64(0), actRes.Actor.CallSeqNum) - assert.Equal(t, balance, actRes.Actor.Balance) - } -} - -// Tipsets can be retrieved by parent key (all block cids of parents). -func TestGetByParent(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - genTS := builder.NewGenesis() - r := repo.NewInMemoryRepo() - cs := newChainStore(r, genTS.At(0).Cid()) - - // Construct test chain data - link1 := builder.AppendOn(genTS, 2) - link2 := builder.AppendOn(link1, 3) - link3 := builder.AppendOn(link2, 1) - link4 := builder.BuildOn(link3, 2, func(bb *chain.BlockBuilder, i int) { bb.IncHeight(2) }) - - // Put the test chain to the store - requirePutTestChain(ctx, t, cs, link4.Key(), builder, 5) - - gotG := requireGetTsasByParentAndHeight(t, cs, block.TipSetKey{}, 0) - got1 := requireGetTsasByParentAndHeight(t, cs, genTS.Key(), 1) - got2 := requireGetTsasByParentAndHeight(t, cs, link1.Key(), 2) - got3 := requireGetTsasByParentAndHeight(t, cs, link2.Key(), 3) - got4 := requireGetTsasByParentAndHeight(t, cs, link3.Key(), 6) // two null blocks in between 3 and 4! - - assert.Equal(t, genTS, gotG[0].TipSet) - assert.Equal(t, link1, got1[0].TipSet) - assert.Equal(t, link2, got2[0].TipSet) - assert.Equal(t, link3, got3[0].TipSet) - assert.Equal(t, link4, got4[0].TipSet) - - assert.Equal(t, genTS.At(0).StateRoot.Cid, gotG[0].TipSetStateRoot) - assert.Equal(t, link1.At(0).StateRoot.Cid, got1[0].TipSetStateRoot) - assert.Equal(t, link2.At(0).StateRoot.Cid, got2[0].TipSetStateRoot) - assert.Equal(t, link3.At(0).StateRoot.Cid, got3[0].TipSetStateRoot) - assert.Equal(t, link4.At(0).StateRoot.Cid, got4[0].TipSetStateRoot) -} - -func TestGetMultipleByParent(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - genTS := builder.NewGenesis() - r := repo.NewInMemoryRepo() - cs := newChainStore(r, genTS.At(0).Cid()) - - // Construct test chain data - link1 := builder.AppendOn(genTS, 2) - link2 := builder.AppendOn(link1, 3) - link3 := builder.AppendOn(link2, 1) - link4 := builder.BuildOn(link3, 2, func(bb *chain.BlockBuilder, i int) { bb.IncHeight(2) }) - - // Put the test chain to the store - requirePutTestChain(ctx, t, cs, link4.Key(), builder, 5) - - // Add extra children to the genesis tipset - otherLink1 := builder.AppendOn(genTS, 1) - otherRoot1 := types.CidFromString(t, "otherState") - newChildTsas := &chain.TipSetMetadata{ - TipSet: otherLink1, - TipSetStateRoot: otherRoot1, - TipSetReceipts: types.EmptyReceiptsCID, - } - require.NoError(t, cs.PutTipSetMetadata(ctx, newChildTsas)) - gotNew1 := requireGetTsasByParentAndHeight(t, cs, genTS.Key(), 1) - require.Equal(t, 2, len(gotNew1)) - for _, tsas := range gotNew1 { - if tsas.TipSet.Len() == 1 { - assert.Equal(t, otherRoot1, tsas.TipSetStateRoot) - } else { - assert.Equal(t, link1.At(0).StateRoot.Cid, tsas.TipSetStateRoot) - } - } -} - -/* Head and its State is set and notified properly. */ - -// The constructor call sets the genesis cid for the chain store. -func TestSetGenesis(t *testing.T) { - tf.UnitTest(t) - - builder := chain.NewBuilder(t, address.Undef) - genTS := builder.NewGenesis() - r := repo.NewInMemoryRepo() - cs := newChainStore(r, genTS.At(0).Cid()) - - require.Equal(t, genTS.At(0).Cid(), cs.GenesisCid()) -} - -func assertSetHead(t *testing.T, chainStore *chain.Store, ts block.TipSet) { - ctx := context.Background() - err := chainStore.SetHead(ctx, ts) - assert.NoError(t, err) -} - -// Set and Get Head. -func TestHead(t *testing.T) { - tf.UnitTest(t) - - builder := chain.NewBuilder(t, address.Undef) - genTS := builder.NewGenesis() - r := repo.NewInMemoryRepo() - sr := chain.NewStatusReporter() - cs := chain.NewStore(r.Datastore(), cbor.NewMemCborStore(), sr, genTS.At(0).Cid()) - - // Construct test chain data - link1 := builder.AppendOn(genTS, 2) - link2 := builder.AppendOn(link1, 3) - link3 := builder.AppendOn(link2, 1) - link4 := builder.BuildOn(link3, 2, func(bb *chain.BlockBuilder, i int) { bb.IncHeight(2) }) - - // Head starts as an empty cid set - assert.Equal(t, block.TipSetKey{}, cs.GetHead()) - - // Set Head - assertSetHead(t, cs, genTS) - assert.Equal(t, genTS.Key(), cs.GetHead()) - assert.Equal(t, genTS.Key(), sr.Status().ValidatedHead) - - // Move head forward - assertSetHead(t, cs, link4) - assert.Equal(t, link4.Key(), cs.GetHead()) - assert.Equal(t, link4.Key(), sr.Status().ValidatedHead) - - // Move head back - assertSetHead(t, cs, link1) - assert.Equal(t, link1.Key(), cs.GetHead()) - assert.Equal(t, link1.Key(), sr.Status().ValidatedHead) -} - -func assertEmptyCh(t *testing.T, ch <-chan interface{}) { - select { - case <-ch: - assert.True(t, false) - default: - } -} - -// Head events are propagated on HeadEvents. -func TestHeadEvents(t *testing.T) { - tf.UnitTest(t) - - builder := chain.NewBuilder(t, address.Undef) - genTS := builder.NewGenesis() - r := repo.NewInMemoryRepo() - chainStore := newChainStore(r, genTS.At(0).Cid()) - - // Construct test chain data - link1 := builder.AppendOn(genTS, 2) - link2 := builder.AppendOn(link1, 3) - link3 := builder.AppendOn(link2, 1) - link4 := builder.BuildOn(link3, 2, func(bb *chain.BlockBuilder, i int) { bb.IncHeight(2) }) - ps := chainStore.HeadEvents() - chA := ps.Sub(chain.NewHeadTopic) - chB := ps.Sub(chain.NewHeadTopic) - - assertSetHead(t, chainStore, genTS) - assertSetHead(t, chainStore, link1) - assertSetHead(t, chainStore, link2) - assertSetHead(t, chainStore, link3) - assertSetHead(t, chainStore, link4) - assertSetHead(t, chainStore, link3) - assertSetHead(t, chainStore, link2) - assertSetHead(t, chainStore, link1) - assertSetHead(t, chainStore, genTS) - heads := []block.TipSet{genTS, link1, link2, link3, link4, link3, link2, link1, genTS} - - // Heads arrive in the expected order - for i := 0; i < 9; i++ { - headA := <-chA - headB := <-chB - assert.Equal(t, headA, headB) - assert.Equal(t, headA, heads[i]) - } - - // No extra notifications - assertEmptyCh(t, chA) - assertEmptyCh(t, chB) -} - -/* Loading */ -// Load does not error and gives the chain store access to all blocks and -// tipset indexes along the heaviest chain. -func TestLoadAndReboot(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - genTS := builder.NewGenesis() - rPriv := repo.NewInMemoryRepo() - ds := rPriv.Datastore() - cst := cborutil.NewIpldStore(bstore.NewBlockstore(ds)) - - // Construct test chain data - link1 := builder.AppendOn(genTS, 2) - link2 := builder.AppendOn(link1, 3) - link3 := builder.AppendOn(link2, 1) - link4 := builder.BuildOn(link3, 2, func(bb *chain.BlockBuilder, i int) { bb.IncHeight(2) }) - - // Add blocks to blockstore - requirePutBlocksToCborStore(t, cst, genTS.ToSlice()...) - requirePutBlocksToCborStore(t, cst, link1.ToSlice()...) - requirePutBlocksToCborStore(t, cst, link2.ToSlice()...) - requirePutBlocksToCborStore(t, cst, link3.ToSlice()...) - requirePutBlocksToCborStore(t, cst, link4.ToSlice()...) - - chainStore := chain.NewStore(ds, cst, chain.NewStatusReporter(), genTS.At(0).Cid()) - requirePutTestChain(ctx, t, chainStore, link4.Key(), builder, 5) - assertSetHead(t, chainStore, genTS) // set the genesis block - - assertSetHead(t, chainStore, link4) - chainStore.Stop() - - // rebuild chain with same datastore and cborstore - sr := chain.NewStatusReporter() - rebootChain := chain.NewStore(ds, cst, sr, genTS.At(0).Cid()) - err := rebootChain.Load(ctx) - assert.NoError(t, err) - assert.Equal(t, link4.Key(), sr.Status().ValidatedHead) - - // Check that chain store has index - // Get a tipset and state by key - got2 := requireGetTipSet(ctx, t, rebootChain, link2.Key()) - assert.Equal(t, link2, got2) - - // Get another by parent key - got4 := requireGetTsasByParentAndHeight(t, rebootChain, link3.Key(), 6) - assert.Equal(t, 1, len(got4)) - assert.Equal(t, link4, got4[0].TipSet) - - // Check the head - assert.Equal(t, link4.Key(), rebootChain.GetHead()) -} - -type tipSetGetter interface { - GetTipSet(block.TipSetKey) (block.TipSet, error) -} - -func requireGetTipSet(ctx context.Context, t *testing.T, chainStore tipSetGetter, key block.TipSetKey) block.TipSet { - ts, err := chainStore.GetTipSet(key) - require.NoError(t, err) - return ts -} - -type tipSetStateRootGetter interface { - GetTipSetStateRoot(tsKey block.TipSetKey) (cid.Cid, error) -} - -func requireGetTipSetStateRoot(ctx context.Context, t *testing.T, chainStore tipSetStateRootGetter, key block.TipSetKey) cid.Cid { - stateCid, err := chainStore.GetTipSetStateRoot(key) - require.NoError(t, err) - return stateCid -} diff --git a/internal/pkg/chain/testing.go b/internal/pkg/chain/testing.go deleted file mode 100644 index e9c0082f3e..0000000000 --- a/internal/pkg/chain/testing.go +++ /dev/null @@ -1,624 +0,0 @@ -package chain - -import ( - "context" - "encoding/binary" - "fmt" - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - blocks "github.com/ipfs/go-block-format" - "github.com/ipfs/go-cid" - ds "github.com/ipfs/go-datastore" - syncds "github.com/ipfs/go-datastore/sync" - blockstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/pkg/errors" - "github.com/stretchr/testify/require" - - bls "github.com/filecoin-project/filecoin-ffi" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// Builder builds fake chains and acts as a provider and fetcher for the chain thus generated. -// All blocks are unique (even if they share parents) and form valid chains of parents and heights, -// but do not carry valid tickets. Each block contributes a weight of 1. -// State root CIDs are computed by an abstract StateBuilder. The default FakeStateBuilder produces -// state CIDs that are distinct but not CIDs of any real state tree. A more sophisticated -// builder could actually apply the messages to a state tree (not yet implemented). -// The builder is deterministic: two builders receiving the same sequence of calls will produce -// exactly the same chain. -type Builder struct { - t *testing.T - minerAddress address.Address - stateBuilder StateBuilder - stamper TimeStamper - bs blockstore.Blockstore - cstore cbor.IpldStore - messages *MessageStore - seq uint64 // For unique tickets - - // Cache of the state root CID computed for each tipset key. - tipStateCids map[string]cid.Cid -} - -var _ BlockProvider = (*Builder)(nil) -var _ TipSetProvider = (*Builder)(nil) -var _ MessageProvider = (*Builder)(nil) - -// NewBuilder builds a new chain faker with default fake state building. -func NewBuilder(t *testing.T, miner address.Address) *Builder { - return NewBuilderWithDeps(t, miner, &FakeStateBuilder{}, &ZeroTimestamper{}) -} - -// NewBuilderWithDeps builds a new chain faker. -// Blocks will have `miner` set as the miner address, or a default if empty. -func NewBuilderWithDeps(t *testing.T, miner address.Address, sb StateBuilder, stamper TimeStamper) *Builder { - if miner.Empty() { - var err error - miner, err = address.NewSecp256k1Address([]byte("miner")) - require.NoError(t, err) - } - - bs := blockstore.NewBlockstore(syncds.MutexWrap(ds.NewMapDatastore())) - b := &Builder{ - t: t, - minerAddress: miner, - stateBuilder: sb, - stamper: stamper, - bs: bs, - cstore: cborutil.NewIpldStore(bs), - messages: NewMessageStore(bs), - tipStateCids: make(map[string]cid.Cid), - } - - ctx := context.TODO() - _, err := b.messages.StoreMessages(ctx, []*types.SignedMessage{}, []*types.UnsignedMessage{}) - require.NoError(t, err) - _, err = b.messages.StoreReceipts(ctx, []vm.MessageReceipt{}) - require.NoError(t, err) - - nullState := types.CidFromString(t, "null") - b.tipStateCids[block.NewTipSetKey().String()] = nullState - return b -} - -// NewGenesis creates and returns a tipset of one block with no parents. -func (f *Builder) NewGenesis() block.TipSet { - return block.RequireNewTipSet(f.t, f.AppendBlockOn(block.UndefTipSet)) -} - -// AppendBlockOnBlocks creates and returns a new block child of `parents`, with no messages. -func (f *Builder) AppendBlockOnBlocks(parents ...*block.Block) *block.Block { - tip := block.UndefTipSet - if len(parents) > 0 { - tip = block.RequireNewTipSet(f.t, parents...) - } - return f.AppendBlockOn(tip) -} - -// AppendBlockOn creates and returns a new block child of `parent`, with no messages. -func (f *Builder) AppendBlockOn(parent block.TipSet) *block.Block { - return f.Build(parent, 1, nil).At(0) -} - -// AppendOn creates and returns a new `width`-block tipset child of `parents`, with no messages. -func (f *Builder) AppendOn(parent block.TipSet, width int) block.TipSet { - return f.Build(parent, width, nil) -} - -// AppendManyBlocksOnBlocks appends `height` blocks to the chain. -func (f *Builder) AppendManyBlocksOnBlocks(height int, parents ...*block.Block) *block.Block { - tip := block.UndefTipSet - if len(parents) > 0 { - tip = block.RequireNewTipSet(f.t, parents...) - } - return f.BuildManyOn(height, tip, nil).At(0) -} - -// AppendManyBlocksOn appends `height` blocks to the chain. -func (f *Builder) AppendManyBlocksOn(height int, parent block.TipSet) *block.Block { - return f.BuildManyOn(height, parent, nil).At(0) -} - -// AppendManyOn appends `height` tipsets to the chain. -func (f *Builder) AppendManyOn(height int, parent block.TipSet) block.TipSet { - return f.BuildManyOn(height, parent, nil) -} - -// BuildOnBlock creates and returns a new block child of singleton tipset `parent`. See Build. -func (f *Builder) BuildOnBlock(parent *block.Block, build func(b *BlockBuilder)) *block.Block { - tip := block.UndefTipSet - if parent != nil { - tip = block.RequireNewTipSet(f.t, parent) - } - return f.BuildOneOn(tip, build).At(0) -} - -// BuildOneOn creates and returns a new single-block tipset child of `parent`. -func (f *Builder) BuildOneOn(parent block.TipSet, build func(b *BlockBuilder)) block.TipSet { - return f.Build(parent, 1, singleBuilder(build)) -} - -// BuildOn creates and returns a new `width` block tipset child of `parent`. -func (f *Builder) BuildOn(parent block.TipSet, width int, build func(b *BlockBuilder, i int)) block.TipSet { - return f.Build(parent, width, build) -} - -// BuildManyOn builds a chain by invoking Build `height` times. -func (f *Builder) BuildManyOn(height int, parent block.TipSet, build func(b *BlockBuilder)) block.TipSet { - require.True(f.t, height > 0, "") - for i := 0; i < height; i++ { - parent = f.Build(parent, 1, singleBuilder(build)) - } - return parent -} - -// Build creates and returns a new tipset child of `parent`. -// The tipset carries `width` > 0 blocks with the same height and parents, but different tickets. -// Note: the blocks will all have the same miner, which is unrealistic and forbidden by consensus; -// generalise this to random miner addresses when that is rejected by the syncer. -// The `build` function is invoked to modify the block before it is stored. -func (f *Builder) Build(parent block.TipSet, width int, build func(b *BlockBuilder, i int)) block.TipSet { - require.True(f.t, width > 0) - var blocks []*block.Block - - height := abi.ChainEpoch(0) - grandparentKey := block.NewTipSetKey() - if parent.Defined() { - var err error - height = parent.At(0).Height + 1 - grandparentKey, err = parent.Parents() - require.NoError(f.t, err) - } - - parentWeight, err := f.stateBuilder.Weigh(parent, f.StateForKey(grandparentKey)) - require.NoError(f.t, err) - - emptyBLSSig := crypto.Signature{ - Type: crypto.SigTypeBLS, - Data: (*bls.Aggregate([]bls.Signature{}))[:], - } - for i := 0; i < width; i++ { - ticket := block.Ticket{} - ticket.VRFProof = make([]byte, binary.Size(f.seq)) - binary.BigEndian.PutUint64(ticket.VRFProof, f.seq) - f.seq++ - - b := &block.Block{ - Ticket: ticket, - Miner: f.minerAddress, - BeaconEntries: []*drand.Entry{}, - PoStProofs: []block.PoStProof{}, - ParentWeight: parentWeight, - Parents: parent.Key(), - Height: height, - Messages: e.NewCid(types.EmptyTxMetaCID), - MessageReceipts: e.NewCid(types.EmptyReceiptsCID), - BLSAggregateSig: &emptyBLSSig, - // Omitted fields below - //StateRoot: stateRoot, - //EPoStInfo: ePoStInfo, - //ForkSignaling: forkSig, - Timestamp: f.stamper.Stamp(height), - BlockSig: &crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: []byte{}}, - } - - if build != nil { - build(&BlockBuilder{b, f.t, f.messages}, i) - } - - // Compute state root for this block. - ctx := context.Background() - prevState := f.StateForKey(parent.Key()) - smsgs, umsgs, err := f.messages.LoadMessages(ctx, b.Messages.Cid) - require.NoError(f.t, err) - stateRootRaw, _, err := f.stateBuilder.ComputeState(prevState, [][]*types.UnsignedMessage{umsgs}, [][]*types.SignedMessage{smsgs}) - require.NoError(f.t, err) - b.StateRoot = e.NewCid(stateRootRaw) - - // add block to cstore - _, err = f.cstore.Put(ctx, b) - require.NoError(f.t, err) - blocks = append(blocks, b) - } - tip := block.RequireNewTipSet(f.t, blocks...) - // Compute and remember state for the tipset. - f.tipStateCids[tip.Key().String()] = f.ComputeState(tip) - - return tip -} - -// StateForKey loads (or computes) the state root for a tipset key. -func (f *Builder) StateForKey(key block.TipSetKey) cid.Cid { - state, found := f.tipStateCids[key.String()] - if found { - return state - } - // No state yet computed for this tip (perhaps because the blocks in it have not previously - // been considered together as a tipset). - tip, err := f.GetTipSet(key) - require.NoError(f.t, err) - return f.ComputeState(tip) -} - -// GetBlockstoreValue gets data straight out of the underlying blockstore by cid -func (f *Builder) GetBlockstoreValue(ctx context.Context, c cid.Cid) (blocks.Block, error) { - return f.bs.Get(c) -} - -// ComputeState computes the state for a tipset from its parent state. -func (f *Builder) ComputeState(tip block.TipSet) cid.Cid { - parentKey, err := tip.Parents() - require.NoError(f.t, err) - // Load the state of the parent tipset and compute the required state (recursively). - prev := f.StateForKey(parentKey) - state, _, err := f.stateBuilder.ComputeState(prev, [][]*types.UnsignedMessage{}, f.tipMessages(tip)) - require.NoError(f.t, err) - return state -} - -// tipMessages returns the messages of a tipset. Each block's messages are -// grouped into a slice and a slice of these slices is returned. -func (f *Builder) tipMessages(tip block.TipSet) [][]*types.SignedMessage { - ctx := context.Background() - var msgs [][]*types.SignedMessage - for i := 0; i < tip.Len(); i++ { - smsgs, _, err := f.messages.LoadMessages(ctx, tip.At(i).Messages.Cid) - require.NoError(f.t, err) - msgs = append(msgs, smsgs) - } - return msgs -} - -// Wraps a simple build function in one that also accepts an index, propagating a nil function. -func singleBuilder(build func(b *BlockBuilder)) func(b *BlockBuilder, i int) { - if build == nil { - return nil - } - return func(b *BlockBuilder, i int) { build(b) } -} - -///// Block builder ///// - -// BlockBuilder mutates blocks as they are generated. -type BlockBuilder struct { - block *block.Block - t *testing.T - messages *MessageStore -} - -// SetTicket sets the block's ticket. -func (bb *BlockBuilder) SetTicket(raw []byte) { - bb.block.Ticket = block.Ticket{VRFProof: crypto.VRFPi(raw)} -} - -// SetTimestamp sets the block's timestamp. -func (bb *BlockBuilder) SetTimestamp(timestamp uint64) { - bb.block.Timestamp = timestamp -} - -// IncHeight increments the block's height, implying a number of null blocks before this one -// is mined. -func (bb *BlockBuilder) IncHeight(nullBlocks abi.ChainEpoch) { - bb.block.Height += nullBlocks -} - -// AddMessages adds a message & receipt collection to the block. -func (bb *BlockBuilder) AddMessages(secpmsgs []*types.SignedMessage, blsMsgs []*types.UnsignedMessage) { - ctx := context.Background() - - meta, err := bb.messages.StoreMessages(ctx, secpmsgs, blsMsgs) - require.NoError(bb.t, err) - - bb.block.Messages = e.NewCid(meta) -} - -// SetStateRoot sets the block's state root. -func (bb *BlockBuilder) SetStateRoot(root cid.Cid) { - bb.block.StateRoot = e.NewCid(root) -} - -///// State builder ///// - -// StateBuilder abstracts the computation of state root CIDs from the chain builder. -type StateBuilder interface { - ComputeState(prev cid.Cid, blsMessages [][]*types.UnsignedMessage, secpMessages [][]*types.SignedMessage) (cid.Cid, []vm.MessageReceipt, error) - Weigh(tip block.TipSet, state cid.Cid) (fbig.Int, error) -} - -// FakeStateBuilder computes a fake state CID by hashing the CIDs of a block's parents and messages. -type FakeStateBuilder struct { -} - -// ComputeState computes a fake state from a previous state root CID and the messages contained -// in list-of-lists of messages in blocks. Note that if there are no messages, the resulting state -// is the same as the input state. -// This differs from the true state transition function in that messages that are duplicated -// between blocks in the tipset are not ignored. -func (FakeStateBuilder) ComputeState(prev cid.Cid, blsMessages [][]*types.UnsignedMessage, secpMessages [][]*types.SignedMessage) (cid.Cid, []vm.MessageReceipt, error) { - receipts := []vm.MessageReceipt{} - - // Accumulate the cids of the previous state and of all messages in the tipset. - inputs := []cid.Cid{prev} - for _, blockMessages := range blsMessages { - for _, msg := range blockMessages { - mCId, err := msg.Cid() - if err != nil { - return cid.Undef, []vm.MessageReceipt{}, err - } - inputs = append(inputs, mCId) - receipts = append(receipts, vm.MessageReceipt{ - ExitCode: 0, - ReturnValue: mCId.Bytes(), - GasUsed: gas.NewGas(3), - }) - } - } - for _, blockMessages := range secpMessages { - for _, msg := range blockMessages { - mCId, err := msg.Cid() - if err != nil { - return cid.Undef, []vm.MessageReceipt{}, err - } - inputs = append(inputs, mCId) - receipts = append(receipts, vm.MessageReceipt{ - ExitCode: 0, - ReturnValue: mCId.Bytes(), - GasUsed: gas.NewGas(3), - }) - } - } - - if len(inputs) == 1 { - // If there are no messages, the state doesn't change! - return prev, receipts, nil - } - - root, err := makeCid(inputs) - if err != nil { - return cid.Undef, []vm.MessageReceipt{}, err - } - return root, receipts, nil -} - -// Weigh computes a tipset's weight as its parent weight plus one for each block in the tipset. -func (FakeStateBuilder) Weigh(tip block.TipSet, state cid.Cid) (fbig.Int, error) { - parentWeight := fbig.Zero() - if tip.Defined() { - var err error - parentWeight, err = tip.ParentWeight() - if err != nil { - return fbig.Zero(), err - } - } - - return fbig.Add(parentWeight, fbig.NewInt(int64(tip.Len()))), nil -} - -///// Timestamper ///// - -// TimeStamper is an object that timestamps blocks -type TimeStamper interface { - Stamp(abi.ChainEpoch) uint64 -} - -// ZeroTimestamper writes a default of 0 to the timestamp -type ZeroTimestamper struct{} - -// Stamp returns a stamp for the current block -func (zt *ZeroTimestamper) Stamp(height abi.ChainEpoch) uint64 { - return uint64(0) -} - -// ClockTimestamper writes timestamps based on a blocktime and genesis time -type ClockTimestamper struct { - c clock.ChainEpochClock -} - -// NewClockTimestamper makes a new stamper for creating production valid timestamps -func NewClockTimestamper(chainClock clock.ChainEpochClock) *ClockTimestamper { - return &ClockTimestamper{ - c: chainClock, - } -} - -// Stamp assigns a valid timestamp given genesis time and block time to -// a block of the provided height. -func (ct *ClockTimestamper) Stamp(height abi.ChainEpoch) uint64 { - startTime := ct.c.StartTimeOfEpoch(height) - - return uint64(startTime.Unix()) -} - -///// State evaluator ///// - -// FakeStateEvaluator is a syncStateEvaluator that delegates to the FakeStateBuilder. -type FakeStateEvaluator struct { - FakeStateBuilder -} - -// RunStateTransition delegates to StateBuilder.ComputeState. -func (e *FakeStateEvaluator) RunStateTransition(ctx context.Context, tip block.TipSet, blsMessages [][]*types.UnsignedMessage, secpMessages [][]*types.SignedMessage, parentWeight fbig.Int, stateID cid.Cid, receiptCid cid.Cid) (cid.Cid, []vm.MessageReceipt, error) { - return e.ComputeState(stateID, blsMessages, secpMessages) -} - -// ValidateHeaderSemantic is a stub that always returns no error -func (e *FakeStateEvaluator) ValidateHeaderSemantic(_ context.Context, _ *block.Block, _ block.TipSet) error { - return nil -} - -// ValidateHeaderSemantic is a stub that always returns no error -func (e *FakeStateEvaluator) ValidateMessagesSemantic(_ context.Context, _ *block.Block, _ block.TipSetKey) error { - return nil -} - -///// Chain selector ///// - -// FakeChainSelector is a syncChainSelector that delegates to the FakeStateBuilder -type FakeChainSelector struct { - FakeStateBuilder -} - -// IsHeavier compares chains weighed with StateBuilder.Weigh. -func (e *FakeChainSelector) IsHeavier(ctx context.Context, a, b block.TipSet, aStateID, bStateID cid.Cid) (bool, error) { - aw, err := e.Weigh(a, aStateID) - if err != nil { - return false, err - } - bw, err := e.Weigh(b, bStateID) - if err != nil { - return false, err - } - return aw.GreaterThan(bw), nil -} - -// Weight delegates to the statebuilder -func (e *FakeChainSelector) Weight(ctx context.Context, ts block.TipSet, stID cid.Cid) (fbig.Int, error) { - return e.Weigh(ts, stID) -} - -///// Interface and accessor implementations ///// - -// GetBlock returns the block identified by `c`. -func (f *Builder) GetBlock(ctx context.Context, c cid.Cid) (*block.Block, error) { - var block block.Block - if err := f.cstore.Get(ctx, c, &block); err != nil { - return nil, err - } - return &block, nil -} - -// GetBlocks returns the blocks identified by `cids`. -func (f *Builder) GetBlocks(ctx context.Context, cids []cid.Cid) ([]*block.Block, error) { - ret := make([]*block.Block, len(cids)) - for i, c := range cids { - var block block.Block - if err := f.cstore.Get(ctx, c, &block); err != nil { - return nil, err - } - ret[i] = &block - } - return ret, nil -} - -// GetTipSet returns the tipset identified by `key`. -func (f *Builder) GetTipSet(key block.TipSetKey) (block.TipSet, error) { - ctx := context.Background() - var blocks []*block.Block - for it := key.Iter(); !it.Complete(); it.Next() { - var blk block.Block - if err := f.cstore.Get(ctx, it.Value(), &blk); err != nil { - return block.UndefTipSet, fmt.Errorf("no block %s", it.Value()) - } - blocks = append(blocks, &blk) - } - return block.NewTipSet(blocks...) -} - -// FetchTipSets fetchs the tipset at `tsKey` from the fetchers blockStore backed by the Builder. -func (f *Builder) FetchTipSets(ctx context.Context, key block.TipSetKey, from peer.ID, done func(t block.TipSet) (bool, error)) ([]block.TipSet, error) { - var tips []block.TipSet - for { - tip, err := f.GetTipSet(key) - if err != nil { - return nil, err - } - tips = append(tips, tip) - ok, err := done(tip) - if err != nil { - return nil, err - } - if ok { - break - } - key, err = tip.Parents() - if err != nil { - return nil, err - } - } - return tips, nil -} - -// FetchTipSetHeaders fetchs the tipset at `tsKey` from the fetchers blockStore backed by the Builder. -func (f *Builder) FetchTipSetHeaders(ctx context.Context, key block.TipSetKey, from peer.ID, done func(t block.TipSet) (bool, error)) ([]block.TipSet, error) { - return f.FetchTipSets(ctx, key, from, done) -} - -// GetTipSetStateRoot returns the state root that was computed for a tipset. -func (f *Builder) GetTipSetStateRoot(key block.TipSetKey) (cid.Cid, error) { - found, ok := f.tipStateCids[key.String()] - if !ok { - return cid.Undef, errors.Errorf("no state for %s", key) - } - return found, nil -} - -// RequireTipSet returns a tipset by key, which must exist. -func (f *Builder) RequireTipSet(key block.TipSetKey) block.TipSet { - tip, err := f.GetTipSet(key) - require.NoError(f.t, err) - return tip -} - -// RequireTipSets returns a chain of tipsets from key, which must exist and be long enough. -func (f *Builder) RequireTipSets(head block.TipSetKey, count int) []block.TipSet { - var tips []block.TipSet - var err error - for i := 0; i < count; i++ { - tip := f.RequireTipSet(head) - tips = append(tips, tip) - head, err = tip.Parents() - require.NoError(f.t, err) - } - return tips -} - -// LoadMessages returns the message collections tracked by the builder. -func (f *Builder) LoadMessages(ctx context.Context, metaCid cid.Cid) ([]*types.SignedMessage, []*types.UnsignedMessage, error) { - return f.messages.LoadMessages(ctx, metaCid) -} - -// LoadReceipts returns the message collections tracked by the builder. -func (f *Builder) LoadReceipts(ctx context.Context, c cid.Cid) ([]vm.MessageReceipt, error) { - return f.messages.LoadReceipts(ctx, c) -} - -// LoadTxMeta returns the tx meta wrapper tracked by the builder. -func (f *Builder) LoadTxMeta(ctx context.Context, metaCid cid.Cid) (types.TxMeta, error) { - return f.messages.LoadTxMeta(ctx, metaCid) -} - -// StoreReceipts stores message receipts and returns a commitment. -func (f *Builder) StoreReceipts(ctx context.Context, receipts []vm.MessageReceipt) (cid.Cid, error) { - return f.messages.StoreReceipts(ctx, receipts) -} - -// StoreTxMeta stores a tx meta -func (f *Builder) StoreTxMeta(ctx context.Context, meta types.TxMeta) (cid.Cid, error) { - return f.messages.StoreTxMeta(ctx, meta) -} - -///// Internals ///// - -func makeCid(i interface{}) (cid.Cid, error) { - bytes, err := encoding.Encode(i) - if err != nil { - return cid.Undef, err - } - return constants.DefaultCidBuilder.Sum(bytes) -} diff --git a/internal/pkg/chain/tip_index.go b/internal/pkg/chain/tip_index.go deleted file mode 100644 index 6ee88ca745..0000000000 --- a/internal/pkg/chain/tip_index.go +++ /dev/null @@ -1,162 +0,0 @@ -package chain - -import ( - "fmt" - "sync" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - "github.com/pkg/errors" -) - -var ( - // ErrNotFound is returned when the key for a "Get" lookup is not in the index. - ErrNotFound = errors.New("Key not found in tipindex") -) - -// TipSetMetadata is the type stored at the leaves of the TipIndex. It contains -// a tipset pointing to blocks, the root cid of the chain's state after -// applying the messages in this tipset to it's parent state, and the cid of the receipts -// for these messages. -type TipSetMetadata struct { - // TipSetStateRoot is the root of aggregate state after applying tipset - TipSetStateRoot cid.Cid - - // TipSet is the set of blocks that forms the tip set - TipSet block.TipSet - - // TipSetReceipts receipts from all message contained within this tipset - TipSetReceipts cid.Cid -} - -type tsmByTipSetID map[string]*TipSetMetadata - -// TipIndex tracks tipsets and their states by tipset block ids and parent -// block ids. All methods are threadsafe as shared data is guarded by a -// mutex. -type TipIndex struct { - mu sync.Mutex - // tsasByParents allows lookup of all TipSetAndStates with the same parent IDs. - tsasByParentsAndHeight map[string]tsmByTipSetID - // tsasByID allows lookup of recorded TipSetAndStates by TipSet ID. - tsasByID tsmByTipSetID -} - -// NewTipIndex is the TipIndex constructor. -func NewTipIndex() *TipIndex { - return &TipIndex{ - tsasByParentsAndHeight: make(map[string]tsmByTipSetID), - tsasByID: make(map[string]*TipSetMetadata), - } -} - -// Put adds an entry to both of TipIndex's internal indexes. -// After this call the input TipSetMetadata can be looked up by the ID of -// the tipset, or the tipset's parent. -func (ti *TipIndex) Put(tsas *TipSetMetadata) error { - ti.mu.Lock() - defer ti.mu.Unlock() - tsKey := tsas.TipSet.String() - // Update tsasByID - ti.tsasByID[tsKey] = tsas - - // Update tsasByParents - pSet, err := tsas.TipSet.Parents() - if err != nil { - return err - } - pKey := pSet.String() - h, err := tsas.TipSet.Height() - if err != nil { - return err - } - key := makeKey(pKey, h) - tsasByID, ok := ti.tsasByParentsAndHeight[key] - if !ok { - tsasByID = make(map[string]*TipSetMetadata) - ti.tsasByParentsAndHeight[key] = tsasByID - } - tsasByID[tsKey] = tsas - return nil -} - -// Get returns the tipset given by the input ID and its state. -func (ti *TipIndex) Get(tsKey block.TipSetKey) (*TipSetMetadata, error) { - ti.mu.Lock() - defer ti.mu.Unlock() - tsas, ok := ti.tsasByID[tsKey.String()] - if !ok { - return nil, ErrNotFound - } - return tsas, nil -} - -// GetTipSet returns the tipset from func (ti *TipIndex) Get(tsKey string) -func (ti *TipIndex) GetTipSet(tsKey block.TipSetKey) (block.TipSet, error) { - tsas, err := ti.Get(tsKey) - if err != nil { - return block.UndefTipSet, err - } - return tsas.TipSet, nil -} - -// GetTipSetStateRoot returns the tipsetStateRoot from func (ti *TipIndex) Get(tsKey string). -func (ti *TipIndex) GetTipSetStateRoot(tsKey block.TipSetKey) (cid.Cid, error) { - tsas, err := ti.Get(tsKey) - if err != nil { - return cid.Cid{}, err - } - return tsas.TipSetStateRoot, nil -} - -// GetTipSetReceiptsRoot returns the tipsetReceipts from func (ti *TipIndex) Get(tsKey string). -func (ti *TipIndex) GetTipSetReceiptsRoot(tsKey block.TipSetKey) (cid.Cid, error) { - tsas, err := ti.Get(tsKey) - if err != nil { - return cid.Cid{}, err - } - return tsas.TipSetReceipts, nil -} - -// Has returns true iff the tipset with the input ID is stored in -// the TipIndex. -func (ti *TipIndex) Has(tsKey block.TipSetKey) bool { - ti.mu.Lock() - defer ti.mu.Unlock() - _, ok := ti.tsasByID[tsKey.String()] - return ok -} - -// GetByParentsAndHeight returns the all tipsets and states stored in the TipIndex -// such that the parent ID of these tipsets equals the input. -func (ti *TipIndex) GetByParentsAndHeight(pKey block.TipSetKey, h abi.ChainEpoch) ([]*TipSetMetadata, error) { - key := makeKey(pKey.String(), h) - ti.mu.Lock() - defer ti.mu.Unlock() - tsasByID, ok := ti.tsasByParentsAndHeight[key] - if !ok { - return nil, ErrNotFound - } - var ret []*TipSetMetadata - for _, tsas := range tsasByID { - ret = append(ret, tsas) - } - return ret, nil -} - -// HasByParentsAndHeight returns true iff there exist tipsets, and states, -// tracked in the TipIndex such that the parent ID of these tipsets equals the -// input. -func (ti *TipIndex) HasByParentsAndHeight(pKey block.TipSetKey, h abi.ChainEpoch) bool { - key := makeKey(pKey.String(), h) - ti.mu.Lock() - defer ti.mu.Unlock() - _, ok := ti.tsasByParentsAndHeight[key] - return ok -} - -// makeKey returns a unique string for every parent set key and height input -func makeKey(pKey string, h abi.ChainEpoch) string { - return fmt.Sprintf("p-%s h-%d", pKey, h) -} diff --git a/internal/pkg/chain/traversal.go b/internal/pkg/chain/traversal.go deleted file mode 100644 index d170f0a5d9..0000000000 --- a/internal/pkg/chain/traversal.go +++ /dev/null @@ -1,230 +0,0 @@ -package chain - -import ( - "context" - "errors" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" -) - -// TipSetProvider provides tipsets for traversal. -type TipSetProvider interface { - GetTipSet(tsKey block.TipSetKey) (block.TipSet, error) -} - -// IterAncestors returns an iterator over tipset ancestors, yielding first the start tipset and -// then its parent tipsets until (and including) the genesis tipset. -func IterAncestors(ctx context.Context, store TipSetProvider, start block.TipSet) *TipsetIterator { - return &TipsetIterator{ctx, store, start} -} - -// TipsetIterator is an iterator over tipsets. -type TipsetIterator struct { - ctx context.Context - store TipSetProvider - value block.TipSet -} - -// Value returns the iterator's current value, if not Complete(). -func (it *TipsetIterator) Value() block.TipSet { - return it.value -} - -// Complete tests whether the iterator is exhausted. -func (it *TipsetIterator) Complete() bool { - return !it.value.Defined() -} - -// Next advances the iterator to the next value. -func (it *TipsetIterator) Next() error { - select { - case <-it.ctx.Done(): - return it.ctx.Err() - default: - parentKey, err := it.value.Parents() - // Parents is empty (without error) for the genesis tipset. - if err != nil || parentKey.Len() == 0 { - it.value = block.UndefTipSet - } else { - it.value, err = it.store.GetTipSet(parentKey) - } - return err - } -} - -// BlockProvider provides blocks. -type BlockProvider interface { - GetBlock(ctx context.Context, cid cid.Cid) (*block.Block, error) -} - -// LoadTipSetBlocks loads all the blocks for a tipset from the store. -func LoadTipSetBlocks(ctx context.Context, store BlockProvider, key block.TipSetKey) (block.TipSet, error) { - var blocks []*block.Block - for it := key.Iter(); !it.Complete(); it.Next() { - blk, err := store.GetBlock(ctx, it.Value()) - if err != nil { - return block.UndefTipSet, err - } - blocks = append(blocks, blk) - } - return block.NewTipSet(blocks...) -} - -type tipsetFromBlockProvider struct { - ctx context.Context // Context to use when loading blocks - blocks BlockProvider // Provides blocks -} - -// TipSetProviderFromBlocks builds a tipset provider backed by a block provider. -// Blocks will be loaded with the provided context, since GetTipSet does not accept a -// context parameter. This can and should be removed when GetTipSet does take a context. -func TipSetProviderFromBlocks(ctx context.Context, blocks BlockProvider) TipSetProvider { - return &tipsetFromBlockProvider{ctx, blocks} -} - -// GetTipSet loads the blocks for a tipset. -func (p *tipsetFromBlockProvider) GetTipSet(tsKey block.TipSetKey) (block.TipSet, error) { - return LoadTipSetBlocks(p.ctx, p.blocks, tsKey) -} - -// CollectTipsToCommonAncestor traverses chains from two tipsets (called old and new) until their common -// ancestor, collecting all tipsets that are in one chain but not the other. -// The resulting lists of tipsets are ordered by decreasing height. -func CollectTipsToCommonAncestor(ctx context.Context, store TipSetProvider, oldHead, newHead block.TipSet) (oldTips, newTips []block.TipSet, err error) { - oldIter := IterAncestors(ctx, store, oldHead) - newIter := IterAncestors(ctx, store, newHead) - - commonAncestor, err := FindCommonAncestor(oldIter, newIter) - if err != nil { - return - } - commonHeight, err := commonAncestor.Height() - if err != nil { - return - } - - // Refresh iterators modified by FindCommonAncestors - oldIter = IterAncestors(ctx, store, oldHead) - newIter = IterAncestors(ctx, store, newHead) - - // Add 1 to the height argument so that the common ancestor is not - // included in the outputs. - oldTips, err = CollectTipSetsOfHeightAtLeast(ctx, oldIter, commonHeight+1) - if err != nil { - return - } - newTips, err = CollectTipSetsOfHeightAtLeast(ctx, newIter, commonHeight+1) - return -} - -// ErrNoCommonAncestor is returned when two chains assumed to have a common ancestor do not. -var ErrNoCommonAncestor = errors.New("no common ancestor") - -// FindCommonAncestor returns the common ancestor of the two tipsets pointed to -// by the input iterators. If they share no common ancestor ErrNoCommonAncestor -// will be returned. -func FindCommonAncestor(leftIter, rightIter *TipsetIterator) (block.TipSet, error) { - for !rightIter.Complete() && !leftIter.Complete() { - left := leftIter.Value() - right := rightIter.Value() - - leftHeight, err := left.Height() - if err != nil { - return block.UndefTipSet, err - } - rightHeight, err := right.Height() - if err != nil { - return block.UndefTipSet, err - } - - // Found common ancestor. - if left.Equals(right) { - return left, nil - } - - // Update the pointers. Pointers move back one tipset if they - // point to a tipset at the same height or higher than the - // other pointer's tipset. - if rightHeight >= leftHeight { - if err := rightIter.Next(); err != nil { - return block.UndefTipSet, err - } - } - - if leftHeight >= rightHeight { - if err := leftIter.Next(); err != nil { - return block.UndefTipSet, err - } - } - } - return block.UndefTipSet, ErrNoCommonAncestor -} - -// CollectTipSetsOfHeightAtLeast collects all tipsets with a height greater -// than or equal to minHeight from the input tipset. -func CollectTipSetsOfHeightAtLeast(ctx context.Context, iterator *TipsetIterator, minHeight abi.ChainEpoch) ([]block.TipSet, error) { - var ret []block.TipSet - var err error - var h abi.ChainEpoch - for ; !iterator.Complete(); err = iterator.Next() { - if err != nil { - return nil, err - } - h, err = iterator.Value().Height() - if err != nil { - return nil, err - } - if h < minHeight { - return ret, nil - } - ret = append(ret, iterator.Value()) - } - return ret, nil -} - -// FindTipSetAtEpoch finds the highest tipset with height <= the input epoch -// by traversing backwards from start -func FindTipsetAtEpoch(ctx context.Context, start block.TipSet, epoch abi.ChainEpoch, reader TipSetProvider) (ts block.TipSet, err error) { - iterator := IterAncestors(ctx, reader, start) - var h abi.ChainEpoch - for ; !iterator.Complete(); err = iterator.Next() { - if err != nil { - return - } - ts = iterator.Value() - h, err = ts.Height() - if err != nil { - return - } - if h <= epoch { - break - } - } - // If the iterator completed, ts is the genesis tipset. - return -} - -// FindLatestDRAND returns the latest DRAND entry in the chain beginning at start -func FindLatestDRAND(ctx context.Context, start block.TipSet, reader TipSetProvider) (*drand.Entry, error) { - iterator := IterAncestors(ctx, reader, start) - var err error - for ; !iterator.Complete(); err = iterator.Next() { - if err != nil { - return nil, err - } - ts := iterator.Value() - // DRAND entries must be the same for all blocks on the tipset as - // an invariant of the tipset provider - - entries := ts.At(0).BeaconEntries - if len(entries) > 0 { - return entries[len(entries)-1], nil - } - // No entries, simply move on to the next ancestor - } - return nil, errors.New("no DRAND entries in chain") -} diff --git a/internal/pkg/chain/traversal_test.go b/internal/pkg/chain/traversal_test.go deleted file mode 100644 index 82a5cfa1d5..0000000000 --- a/internal/pkg/chain/traversal_test.go +++ /dev/null @@ -1,236 +0,0 @@ -package chain_test - -import ( - "context" - "fmt" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestIterAncestors(t *testing.T) { - tf.UnitTest(t) - miner, err := address.NewSecp256k1Address([]byte(fmt.Sprintf("address"))) - require.NoError(t, err) - - t.Run("iterates", func(t *testing.T) { - ctx := context.Background() - store := chain.NewBuilder(t, miner) - - root := store.AppendBlockOnBlocks() - b11 := store.AppendBlockOnBlocks(root) - b12 := store.AppendBlockOnBlocks(root) - b21 := store.AppendBlockOnBlocks(b11, b12) - - t0 := block.RequireNewTipSet(t, root) - t1 := block.RequireNewTipSet(t, b11, b12) - t2 := block.RequireNewTipSet(t, b21) - - it := chain.IterAncestors(ctx, store, t2) - assert.False(t, it.Complete()) - assert.True(t, t2.Equals(it.Value())) - - assert.NoError(t, it.Next()) - assert.False(t, it.Complete()) - assert.True(t, t1.Equals(it.Value())) - - assert.NoError(t, it.Next()) - assert.False(t, it.Complete()) - assert.True(t, t0.Equals(it.Value())) - - assert.NoError(t, it.Next()) - assert.True(t, it.Complete()) - }) - - t.Run("respects context", func(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - store := chain.NewBuilder(t, miner) - - root := store.AppendBlockOnBlocks() - b11 := store.AppendBlockOnBlocks(root) - b12 := store.AppendBlockOnBlocks(root) - b21 := store.AppendBlockOnBlocks(b11, b12) - - block.RequireNewTipSet(t, root) - t1 := block.RequireNewTipSet(t, b11, b12) - t2 := block.RequireNewTipSet(t, b21) - - it := chain.IterAncestors(ctx, store, t2) - assert.False(t, it.Complete()) - assert.True(t, t2.Equals(it.Value())) - - assert.NoError(t, it.Next()) - assert.False(t, it.Complete()) - assert.True(t, t1.Equals(it.Value())) - - cancel() - - assert.Error(t, it.Next()) - }) -} - -// Happy path -func TestCollectTipSetsOfHeightAtLeast(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - - chainLen := 15 - head := builder.AppendManyOn(chainLen, block.UndefTipSet) - - stopHeight := abi.ChainEpoch(4) - iterator := chain.IterAncestors(ctx, builder, head) - tipsets, err := chain.CollectTipSetsOfHeightAtLeast(ctx, iterator, stopHeight) - assert.NoError(t, err) - latestHeight, err := tipsets[0].Height() - require.NoError(t, err) - assert.Equal(t, abi.ChainEpoch(14), latestHeight) - earliestHeight, err := tipsets[len(tipsets)-1].Height() - require.NoError(t, err) - assert.Equal(t, abi.ChainEpoch(4), earliestHeight) - assert.Equal(t, 11, len(tipsets)) -} - -// Height at least 0. -func TestCollectTipSetsOfHeightAtLeastZero(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - - chainLen := 25 - head := builder.AppendManyOn(chainLen, block.UndefTipSet) - - stopHeight := abi.ChainEpoch(0) - iterator := chain.IterAncestors(ctx, builder, head) - tipsets, err := chain.CollectTipSetsOfHeightAtLeast(ctx, iterator, stopHeight) - assert.NoError(t, err) - latestHeight, err := tipsets[0].Height() - require.NoError(t, err) - assert.Equal(t, abi.ChainEpoch(24), latestHeight) - earliestHeight, err := tipsets[len(tipsets)-1].Height() - require.NoError(t, err) - assert.Equal(t, abi.ChainEpoch(0), earliestHeight) - assert.Equal(t, chainLen, len(tipsets)) -} - -// The starting epoch is a null block. -func TestCollectTipSetsOfHeightAtLeastStartingEpochIsNull(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - head := builder.NewGenesis() - - // Add 30 tipsets to the head of the chainStore. - head = builder.AppendManyOn(30, head) - - // Now add 10 null blocks and 1 tipset. - head = builder.BuildOneOn(head, func(b *chain.BlockBuilder) { - b.IncHeight(10) - }) - - // Now add 19 more tipsets. - head = builder.AppendManyOn(19, head) - - stopHeight := abi.ChainEpoch(35) - iterator := chain.IterAncestors(ctx, builder, head) - tipsets, err := chain.CollectTipSetsOfHeightAtLeast(ctx, iterator, stopHeight) - assert.NoError(t, err) - latestHeight, err := tipsets[0].Height() - require.NoError(t, err) - assert.Equal(t, abi.ChainEpoch(60), latestHeight) - earliestHeight, err := tipsets[len(tipsets)-1].Height() - require.NoError(t, err) - assert.Equal(t, abi.ChainEpoch(41), earliestHeight) - assert.Equal(t, 20, len(tipsets)) -} - -func TestFindCommonAncestorSameChain(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - head := builder.NewGenesis() - // Add 30 tipsets to the head of the chainStore. - head = builder.AppendManyOn(30, head) - headIterOne := chain.IterAncestors(ctx, builder, head) - headIterTwo := chain.IterAncestors(ctx, builder, head) - commonAncestor, err := chain.FindCommonAncestor(headIterOne, headIterTwo) - assert.NoError(t, err) - assert.Equal(t, head, commonAncestor) -} - -func TestFindCommonAncestorFork(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - head := builder.NewGenesis() - - // Add 3 tipsets to the head of the chainStore. - commonHeadTip := builder.AppendManyOn(3, head) - - // Grow the fork chain - lenFork := 10 - forkHead := builder.AppendManyOn(lenFork, commonHeadTip) - - // Grow the main chain - lenMainChain := 14 - mainHead := builder.AppendManyOn(lenMainChain, commonHeadTip) - - forkItr := chain.IterAncestors(ctx, builder, forkHead) - mainItr := chain.IterAncestors(ctx, builder, mainHead) - commonAncestor, err := chain.FindCommonAncestor(mainItr, forkItr) - assert.NoError(t, err) - assert.Equal(t, commonHeadTip, commonAncestor) -} - -func TestFindCommonAncestorNoFork(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - head := builder.NewGenesis() - - // Add 30 tipsets to the head of the chainStore. - head = builder.AppendManyOn(30, head) - headIterOne := chain.IterAncestors(ctx, builder, head) - - // Now add 19 more tipsets. - expectedAncestor := head - head = builder.AppendManyOn(19, head) - headIterTwo := chain.IterAncestors(ctx, builder, head) - - commonAncestor, err := chain.FindCommonAncestor(headIterOne, headIterTwo) - assert.NoError(t, err) - assert.True(t, expectedAncestor.Equals(commonAncestor)) -} - -// This test exercises an edge case fork that our previous common ancestor -// utility handled incorrectly. -func TestFindCommonAncestorNullBlockFork(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder := chain.NewBuilder(t, address.Undef) - head := builder.NewGenesis() - - // Add 10 tipsets to the head of the chainStore. - commonHead := builder.AppendManyOn(10, head) - - // From the common ancestor, add a block following a null block. - headAfterNull := builder.BuildOneOn(commonHead, func(b *chain.BlockBuilder) { - b.IncHeight(1) - }) - afterNullItr := chain.IterAncestors(ctx, builder, headAfterNull) - - // Add a block (with no null) on another fork. - headNoNull := builder.AppendOn(commonHead, 1) - noNullItr := chain.IterAncestors(ctx, builder, headNoNull) - - commonAncestor, err := chain.FindCommonAncestor(afterNullItr, noNullItr) - assert.NoError(t, err) - assert.Equal(t, commonHead, commonAncestor) -} diff --git a/internal/pkg/chain/util.go b/internal/pkg/chain/util.go deleted file mode 100644 index fad9317222..0000000000 --- a/internal/pkg/chain/util.go +++ /dev/null @@ -1,14 +0,0 @@ -package chain - -import ( - "github.com/filecoin-project/go-filecoin/internal/pkg/block" -) - -// Reverse reverses the order of the slice `chain`. -func Reverse(chain []block.TipSet) { - // https://github.com/golang/go/wiki/SliceTricks#reversing - for i := len(chain)/2 - 1; i >= 0; i-- { - opp := len(chain) - 1 - i - chain[i], chain[opp] = chain[opp], chain[i] - } -} diff --git a/internal/pkg/chainsampler/height_threshold_listener.go b/internal/pkg/chainsampler/height_threshold_listener.go deleted file mode 100644 index 8839dfdb7b..0000000000 --- a/internal/pkg/chainsampler/height_threshold_listener.go +++ /dev/null @@ -1,105 +0,0 @@ -package chainsampler - -import ( - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" -) - -// HeightThresholdListener listens for new heaviest chains and notifies when a height threshold is crossed. -type HeightThresholdListener struct { - target abi.ChainEpoch - targetHit bool - - HitCh chan block.TipSetKey - ErrCh chan error - InvalidCh chan struct{} - DoneCh chan struct{} -} - -// NewHeightThresholdListener creates a new listener -func NewHeightThresholdListener(target abi.ChainEpoch, hitCh chan block.TipSetKey, errCh chan error, invalidCh, doneCh chan struct{}) *HeightThresholdListener { - return &HeightThresholdListener{ - target: target, - targetHit: false, - HitCh: hitCh, - ErrCh: errCh, - InvalidCh: invalidCh, - DoneCh: doneCh, - } -} - -// Handle a chainStore update by sending appropriate status messages back to the channels. -// newChain is all the tipsets that are new since the last head update. -// Normally, this will be a single tipset, but in the case of a re-org it will contain -// all the common ancestors of the new tipset to the greatest common ancestor. -// The tipsets must be ordered from newest (highest block height) to oldest. -// Returns false if this handler is no longer valid. -func (l *HeightThresholdListener) Handle(chain []block.TipSet) (bool, error) { - if len(chain) < 1 { - return true, nil - } - - h, err := chain[0].Height() - if err != nil { - return true, err - } - - // check if we've hit finality and should stop listening - if h >= l.target+miner.ChainFinalityish { - l.DoneCh <- struct{}{} - return false, nil - } - - lcaHeight, err := chain[len(chain)-1].Height() - if err != nil { - return true, err - } - - // if we have already seen a target tipset - if l.targetHit { - // if we've completely reverted - if h < l.target { - l.InvalidCh <- struct{}{} - l.targetHit = false - // if we've re-orged to a point before the target - } else if lcaHeight < l.target { - l.InvalidCh <- struct{}{} - err := l.sendHit(chain) - if err != nil { - return true, err - } - } - return true, nil - } - - // otherwise send randomness if we've hit the height - if h >= l.target { - l.targetHit = true - err := l.sendHit(chain) - if err != nil { - return true, err - } - } - return true, nil -} - -func (l *HeightThresholdListener) sendHit(chain []block.TipSet) error { - // assume chainStore not empty and first tipset height greater than target - firstTargetTipset := chain[0] - for _, ts := range chain { - h, err := ts.Height() - if err != nil { - return err - } - - if h < l.target { - break - } - firstTargetTipset = ts - } - - l.HitCh <- firstTargetTipset.Key() - return nil -} diff --git a/internal/pkg/chainsampler/height_threshold_listener_test.go b/internal/pkg/chainsampler/height_threshold_listener_test.go deleted file mode 100644 index 9e5ad1cc70..0000000000 --- a/internal/pkg/chainsampler/height_threshold_listener_test.go +++ /dev/null @@ -1,259 +0,0 @@ -package chainsampler - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestNewHeightThresholdListener(t *testing.T) { - tf.UnitTest(t) - builder := chain.NewBuilder(t, address.Undef) - genesis := builder.NewGenesis() - - startHead := builder.BuildManyOn(6, genesis, nil) - - t.Run("does nothing until chain crosses threshold", func(t *testing.T) { - ctx, cancel := context.WithCancel(context.TODO()) - - hc, ec, ic, dc := setupChannels() - listener := NewHeightThresholdListener(11, hc, ec, ic, dc) - - // 6 + 3 = 9 which is less than 11 - nextTS := builder.BuildManyOn(3, startHead, nil) - newChain, err := tipsetToSlice(nextTS, 4, builder) - require.NoError(t, err) - - go func() { - _, err := listener.Handle(newChain) - require.NoError(t, err) - cancel() - }() - - expectCancelBeforeOutput(ctx, hc, ec, ic, dc) - }) - - t.Run("add tipset at target height sends key", func(t *testing.T) { - hc, ec, ic, dc := setupChannels() - listener := NewHeightThresholdListener(7, hc, ec, ic, dc) - - nextTS := builder.Build(startHead, 1, nil) - go func() { - _, err := listener.Handle([]block.TipSet{nextTS}) - require.NoError(t, err) - }() - - key := waitForKey(t, hc, ec, ic, dc) - assert.Equal(t, nextTS.Key(), key) - }) - - t.Run("invalidates when new fork head is lower than target", func(t *testing.T) { - hc, ec, ic, dc := setupChannels() - listener := NewHeightThresholdListener(8, hc, ec, ic, dc) - - nextTS := builder.BuildManyOn(4, startHead, nil) - newChain, err := tipsetToSlice(nextTS, 4, builder) - require.NoError(t, err) - - go func() { - _, err := listener.Handle(newChain) - require.NoError(t, err) - }() - - key := waitForKey(t, hc, ec, ic, dc) - assert.Equal(t, newChain[2].Key(), key) - - shorterFork := builder.BuildManyOn(1, startHead, nil) - go func() { - _, err := listener.Handle([]block.TipSet{shorterFork}) - require.NoError(t, err) - }() - - waitForInvalidation(t, hc, ec, ic, dc) - }) - - t.Run("invalidates and then sends new seed when new fork head is higher than target with a lower lca", func(t *testing.T) { - hc, ec, ic, dc := setupChannels() - listener := NewHeightThresholdListener(8, hc, ec, ic, dc) - - nextTS := builder.BuildManyOn(4, startHead, nil) - newChain, err := tipsetToSlice(nextTS, 4, builder) - require.NoError(t, err) - - go func() { - _, err := listener.Handle(newChain) - require.NoError(t, err) - }() - - key := waitForKey(t, hc, ec, ic, dc) - assert.Equal(t, newChain[2].Key(), key) - - fork := builder.BuildManyOn(3, startHead, nil) - forkSlice, err := tipsetToSlice(fork, 3, builder) - require.NoError(t, err) - - go func() { - _, err := listener.Handle(forkSlice) - require.NoError(t, err) - }() - - // first invalidate - waitForInvalidation(t, hc, ec, ic, dc) - - // then send new key - key = waitForKey(t, hc, ec, ic, dc) - assert.Equal(t, forkSlice[1].Key(), key) - }) - - t.Run("does nothing if new chain is entirely above threshold", func(t *testing.T) { - ctx, cancel := context.WithCancel(context.TODO()) - - hc, ec, ic, dc := setupChannels() - listener := NewHeightThresholdListener(8, hc, ec, ic, dc) - - // cross the threshold (8) with 4 tipsets - nextTS := builder.BuildManyOn(4, startHead, nil) - newChain, err := tipsetToSlice(nextTS, 4, builder) - require.NoError(t, err) - - go func() { - _, err := listener.Handle(newChain) - require.NoError(t, err) - }() - - key := waitForKey(t, hc, ec, ic, dc) - assert.Equal(t, newChain[2].Key(), key) - - // add 3 more tipsets on existing highest head that do not cross threshold - nextTS = builder.BuildManyOn(3, nextTS, nil) - newChain, err = tipsetToSlice(nextTS, 4, builder) - require.NoError(t, err) - - go func() { - _, err := listener.Handle(newChain) - require.NoError(t, err) - cancel() - }() - - expectCancelBeforeOutput(ctx, hc, ec, ic, dc) - }) - - t.Run("sends on done channel when finality is crossed", func(t *testing.T) { - hc, ec, ic, dc := setupChannels() - listener := NewHeightThresholdListener(8, hc, ec, ic, dc) - - // cross the threshold (8) with 4 tipsets - nextTS := builder.BuildManyOn(4, startHead, nil) - newChain, err := tipsetToSlice(nextTS, 4, builder) - require.NoError(t, err) - - go func() { - _, err := listener.Handle(newChain) - require.NoError(t, err) - }() - - key := waitForKey(t, hc, ec, ic, dc) - assert.Equal(t, newChain[2].Key(), key) - - // add tipsets till finality - go func() { - for i := abi.ChainEpoch(0); i < miner.ChainFinalityish; i++ { - nextTS = builder.BuildOn(nextTS, 1, nil) - valid, err := listener.Handle([]block.TipSet{nextTS}) - require.NoError(t, err) - - h, err := nextTS.Height() - require.NoError(t, err) - if h >= 8+miner.ChainFinalityish { - assert.False(t, valid) - } else { - assert.True(t, valid) - } - } - }() - - select { - case <-hc: - panic("unexpected sample key") - case err := <-ec: - panic(err) - case <-ic: - panic("unexpected height invalidation") - case <-dc: - return // got value on done channel - } - }) -} - -func setupChannels() (chan block.TipSetKey, chan error, chan struct{}, chan struct{}) { - return make(chan block.TipSetKey), make(chan error), make(chan struct{}), make(chan struct{}) -} - -func waitForKey(t *testing.T, hc chan block.TipSetKey, ec chan error, ic, dc chan struct{}) block.TipSetKey { - select { - case key := <-hc: - return key - case err := <-ec: - panic(err) - case <-ic: - panic("unexpected height invalidation") - case <-dc: - panic("listener completed before sending key") - } -} - -func expectCancelBeforeOutput(ctx context.Context, hc chan block.TipSetKey, ec chan error, ic, dc chan struct{}) { - select { - case <-hc: - panic("unexpected target tip set") - case err := <-ec: - panic(err) - case <-ic: - panic("unexpected height invalidation") - case <-dc: - panic("listener completed before sending seed") - case <-ctx.Done(): - return - } -} - -func waitForInvalidation(t *testing.T, hc chan block.TipSetKey, ec chan error, ic, dc chan struct{}) { - select { - case <-hc: - panic("got key when we expected invalidation") - case err := <-ec: - panic(err) - case <-ic: - return - case <-dc: - panic("listener completed before sending key") - } -} - -func tipsetToSlice(ts block.TipSet, ancestors int, builder *chain.Builder) ([]block.TipSet, error) { - s := make([]block.TipSet, ancestors) - for i := 0; i < ancestors; i++ { - s[i] = ts - - tskey, err := ts.Parents() - if err != nil { - return nil, err - } - - ts, err = builder.GetTipSet(tskey) - if err != nil { - return nil, err - } - } - return s, nil -} diff --git a/internal/pkg/chainsampler/height_threshold_scheduler.go b/internal/pkg/chainsampler/height_threshold_scheduler.go deleted file mode 100644 index 4e78477c3b..0000000000 --- a/internal/pkg/chainsampler/height_threshold_scheduler.go +++ /dev/null @@ -1,90 +0,0 @@ -package chainsampler - -import ( - "context" - "sync" - - "github.com/filecoin-project/specs-actors/actors/abi" - logging "github.com/ipfs/go-log/v2" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" -) - -var log = logging.Logger("chainsampler") // nolint: deadcode - -// HeightThresholdScheduler listens for changes to chain height and notifies when the threshold is hit or invalidated -type HeightThresholdScheduler struct { - mtx sync.Mutex - heightListeners []*HeightThresholdListener - chainStore *chain.Store - prevHead block.TipSet -} - -// NewHeightThresholdScheduler creates a new scheduler -func NewHeightThresholdScheduler(chainStore *chain.Store) *HeightThresholdScheduler { - return &HeightThresholdScheduler{ - chainStore: chainStore, - } -} - -// AddListener adds a new listener for the target height -func (hts *HeightThresholdScheduler) AddListener(target abi.ChainEpoch) *HeightThresholdListener { - hc := make(chan block.TipSetKey) - ec := make(chan error) - ic := make(chan struct{}) - dc := make(chan struct{}) - newListener := NewHeightThresholdListener(target, hc, ec, ic, dc) - - hts.mtx.Lock() - defer hts.mtx.Unlock() - hts.heightListeners = append(hts.heightListeners, newListener) - return newListener -} - -// CancelListener stops a listener from listening and sends a message over its done channel -func (hts *HeightThresholdScheduler) CancelListener(cancelledListener *HeightThresholdListener) { - hts.mtx.Lock() - defer hts.mtx.Unlock() - var remainingListeners []*HeightThresholdListener - for _, l := range hts.heightListeners { - if l != cancelledListener { - remainingListeners = append(remainingListeners, l) - } - } - hts.heightListeners = remainingListeners - cancelledListener.DoneCh <- struct{}{} -} - -// HandleNewTipSet must be called when the chain head changes. -func (hts *HeightThresholdScheduler) HandleNewTipSet(ctx context.Context, newHead block.TipSet) error { - var err error - var newTips []block.TipSet - - hts.mtx.Lock() - defer hts.mtx.Unlock() - if hts.prevHead.Defined() { - _, newTips, err = chain.CollectTipsToCommonAncestor(ctx, hts.chainStore, hts.prevHead, newHead) - if err != nil { - return errors.Wrapf(err, "failed to collect tips between %s and %s", hts.prevHead, newHead) - } - } else { - newTips = []block.TipSet{newHead} - } - hts.prevHead = newHead - - var newListeners []*HeightThresholdListener - for _, listener := range hts.heightListeners { - valid, err := listener.Handle(newTips) - if err != nil { - log.Error("Error checking storage miner chainStore listener", err) - } - - if valid { - newListeners = append(newListeners, listener) - } - } - hts.heightListeners = newListeners - return nil -} diff --git a/internal/pkg/chainsync/chainsync.go b/internal/pkg/chainsync/chainsync.go deleted file mode 100644 index bf45e6cfa9..0000000000 --- a/internal/pkg/chainsync/chainsync.go +++ /dev/null @@ -1,64 +0,0 @@ -package chainsync - -import ( - "context" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/internal/dispatcher" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/internal/syncer" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/status" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/slashing" -) - -// BlockProposer allows callers to propose new blocks for inclusion in the chain. -type BlockProposer interface { - SendHello(ci *block.ChainInfo) error - SendOwnBlock(ci *block.ChainInfo) error - SendGossipBlock(ci *block.ChainInfo) error - WaiterForTarget(wk block.TipSetKey) func() error -} - -// Manager sync the chain. -type Manager struct { - syncer *syncer.Syncer - dispatcher *dispatcher.Dispatcher - transitionCh chan bool -} - -// NewManager creates a new chain sync manager. -func NewManager(fv syncer.FullBlockValidator, hv syncer.BlockValidator, cs syncer.ChainSelector, s syncer.ChainReaderWriter, m *chain.MessageStore, f syncer.Fetcher, c clock.Clock, detector *slashing.ConsensusFaultDetector) (Manager, error) { - syncer, err := syncer.NewSyncer(fv, hv, cs, s, m, f, status.NewReporter(), c, detector) - if err != nil { - return Manager{}, err - } - gapTransitioner := dispatcher.NewGapTransitioner(s, syncer) - dispatcher := dispatcher.NewDispatcher(syncer, gapTransitioner) - return Manager{ - syncer: syncer, - dispatcher: dispatcher, - transitionCh: gapTransitioner.TransitionChannel(), - }, nil -} - -// Start starts the chain sync manager. -func (m *Manager) Start(ctx context.Context) error { - m.dispatcher.Start(ctx) - return m.syncer.InitStaged() -} - -// BlockProposer returns the block proposer. -func (m *Manager) BlockProposer() BlockProposer { - return m.dispatcher -} - -// TransitionChannel returns a channel emitting transition flags. -func (m *Manager) TransitionChannel() chan bool { - return m.transitionCh -} - -// Status returns the block proposer. -func (m *Manager) Status() status.Status { - return m.syncer.Status() -} diff --git a/internal/pkg/chainsync/fetcher/graphsync_fetcher.go b/internal/pkg/chainsync/fetcher/graphsync_fetcher.go deleted file mode 100644 index 1474c6ae23..0000000000 --- a/internal/pkg/chainsync/fetcher/graphsync_fetcher.go +++ /dev/null @@ -1,664 +0,0 @@ -package fetcher - -import ( - "context" - "fmt" - "sync" - "time" - - "github.com/filecoin-project/go-amt-ipld/v2" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/internal/syncer" - blocks "github.com/ipfs/go-block-format" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-graphsync" - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - logging "github.com/ipfs/go-log/v2" - "github.com/ipld/go-ipld-prime" - cidlink "github.com/ipld/go-ipld-prime/linking/cid" - basicnode "github.com/ipld/go-ipld-prime/node/basic" - ipldselector "github.com/ipld/go-ipld-prime/traversal/selector" - selectorbuilder "github.com/ipld/go-ipld-prime/traversal/selector/builder" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/pkg/errors" - typegen "github.com/whyrusleeping/cbor-gen" - - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -var logGraphsyncFetcher = logging.Logger("chainsync.fetcher.graphsync") - -const ( - // Timeout for a single graphsync request getting "stuck" - // -- if no more responses are received for a period greater than this, - // we will assume the request has hung-up and cancel it - progressTimeout = 10 * time.Second - - // AMT selector recursion. An AMT has arity of 8 so this gives allows - // us to retrieve trees with 8^10 (1,073,741,824) elements. - amtRecurstionDepth = uint32(10) - - // field index of AMT node in AMT head - amtHeadNodeFieldIndex = 2 - - // field index of links array AMT node - amtNodeLinksFieldIndex = 1 - - // field index of values array AMT node - amtNodeValuesFieldIndex = 2 -) - -// ChainsyncProtocolExtension is the extension name to indicate graphsync requests are to sync the chain -const ChainsyncProtocolExtension = graphsync.ExtensionName("chainsync") - -// interface conformance check -var _ syncer.Fetcher = (*GraphSyncFetcher)(nil) - -// GraphExchange is an interface wrapper to Graphsync so it can be stubbed in -// unit testing -type GraphExchange interface { - Request(ctx context.Context, p peer.ID, root ipld.Link, selector ipld.Node, extensions ...graphsync.ExtensionData) (<-chan graphsync.ResponseProgress, <-chan error) -} - -type graphsyncFallbackPeerTracker interface { - List() []*block.ChainInfo - Self() peer.ID -} - -// GraphSyncFetcher is used to fetch data over the network. It is implemented -// using a Graphsync exchange to fetch tipsets recursively -type GraphSyncFetcher struct { - exchange GraphExchange - validator consensus.SyntaxValidator - store bstore.Blockstore - ssb selectorbuilder.SelectorSpecBuilder - peerTracker graphsyncFallbackPeerTracker - systemClock clock.Clock -} - -// NewGraphSyncFetcher returns a GraphsyncFetcher wired up to the input Graphsync exchange and -// attached local blockservice for reloading blocks in memory once they are returned -func NewGraphSyncFetcher(ctx context.Context, exchange GraphExchange, blockstore bstore.Blockstore, - v consensus.SyntaxValidator, systemClock clock.Clock, pt graphsyncFallbackPeerTracker) *GraphSyncFetcher { - gsf := &GraphSyncFetcher{ - store: blockstore, - validator: v, - exchange: exchange, - ssb: selectorbuilder.NewSelectorSpecBuilder(basicnode.Style.Any), - peerTracker: pt, - systemClock: systemClock, - } - return gsf -} - -// Graphsync can fetch a fixed number of tipsets from a remote peer recursively -// with a single request. We don't know until we get all of the response whether -// our final tipset was included in the response -// -// When fetching tipsets we try to balance performance for two competing cases: -// - an initial chain sync that is likely to fetch lots and lots of tipsets -// - a future update sync that is likely to fetch only a few -// -// To do this, the Graphsync fetcher starts fetching a single tipset at a time, -// then gradually ramps up to fetch lots of tipsets at once, up to a fixed limit -// -// The constants below determine the maximum number of tipsets fetched at once -// (maxRecursionDepth) and how fast the ramp up is (recursionMultipler) -const maxRecursionDepth = 64 -const recursionMultiplier = 4 - -// FetchTipSets gets Tipsets starting from the given tipset key and continuing until -// the done function returns true or errors -// -// For now FetchTipSets operates in two parts: -// 1. It fetches relevant blocks through Graphsync, which writes them to the block store -// 2. It reads them from the block store and validates their syntax as blocks -// and constructs a tipset -// This does have a potentially unwanted side effect of writing blocks to the block store -// that later don't validate (bitswap actually does this as well) -// -// TODO: In the future, the blocks will be validated directly through graphsync as -// go-filecoin migrates to the same IPLD library used by go-graphsync (go-ipld-prime) -// -// See: https://github.com/filecoin-project/go-filecoin/issues/3175 -func (gsf *GraphSyncFetcher) FetchTipSets(ctx context.Context, tsKey block.TipSetKey, originatingPeer peer.ID, done func(block.TipSet) (bool, error)) ([]block.TipSet, error) { - return gsf.fetchTipSetsCommon(ctx, tsKey, originatingPeer, done, gsf.loadAndVerifyFullBlock, gsf.fullBlockSel, gsf.recFullBlockSel) -} - -// FetchTipSetHeaders behaves as FetchTipSets but it only fetches and -// syntactically validates a chain of headers, not full blocks. -func (gsf *GraphSyncFetcher) FetchTipSetHeaders(ctx context.Context, tsKey block.TipSetKey, originatingPeer peer.ID, done func(block.TipSet) (bool, error)) ([]block.TipSet, error) { - return gsf.fetchTipSetsCommon(ctx, tsKey, originatingPeer, done, gsf.loadAndVerifyHeader, gsf.headerSel, gsf.recHeaderSel) -} - -func (gsf *GraphSyncFetcher) fetchTipSetsCommon(ctx context.Context, tsKey block.TipSetKey, originatingPeer peer.ID, done func(block.TipSet) (bool, error), loadAndVerify func(context.Context, block.TipSetKey) (block.TipSet, []cid.Cid, error), selGen func() ipld.Node, recSelGen func(int) ipld.Node) ([]block.TipSet, error) { - // We can run into issues if we fetch from an originatingPeer that we - // are not already connected to so we usually ignore this value. - // However if the originator is our own peer ID (i.e. this node mined - // the block) then we need to fetch from ourselves to retrieve it - fetchFromSelf := originatingPeer == gsf.peerTracker.Self() - rpf, err := newRequestPeerFinder(gsf.peerTracker, fetchFromSelf) - if err != nil { - return nil, err - } - - // fetch initial tipset - startingTipset, err := gsf.fetchFirstTipset(ctx, tsKey, loadAndVerify, selGen, rpf) - if err != nil { - return nil, err - } - - // fetch remaining tipsets recursively - return gsf.fetchRemainingTipsets(ctx, startingTipset, done, loadAndVerify, recSelGen, rpf) -} - -func (gsf *GraphSyncFetcher) fetchFirstTipset(ctx context.Context, tsKey block.TipSetKey, loadAndVerify func(context.Context, block.TipSetKey) (block.TipSet, []cid.Cid, error), selGen func() ipld.Node, rpf *requestPeerFinder) (block.TipSet, error) { - blocksToFetch := tsKey.ToSlice() - for { - peer := rpf.CurrentPeer() - logGraphsyncFetcher.Infof("fetching initial tipset %s from peer %s", tsKey, peer) - err := gsf.fetchBlocks(ctx, selGen, blocksToFetch, peer) - if err != nil { - // A likely case is the peer doesn't have the tipset. When graphsync provides - // this status we should quiet this log. - logGraphsyncFetcher.Infof("request failed: %s", err) - } - - var verifiedTip block.TipSet - verifiedTip, blocksToFetch, err = loadAndVerify(ctx, tsKey) - if err != nil { - return block.UndefTipSet, err - } - if len(blocksToFetch) == 0 { - return verifiedTip, nil - } - - logGraphsyncFetcher.Infof("incomplete fetch for initial tipset %s, trying new peer", tsKey) - // Some of the blocks may have been fetched, but avoid tricksy optimization here and just - // request the whole bunch again. Graphsync internally will avoid redundant network requests. - err = rpf.FindNextPeer() - if err != nil { - return block.UndefTipSet, errors.Wrapf(err, "fetching tipset: %s", tsKey) - } - } -} - -func (gsf *GraphSyncFetcher) fetchRemainingTipsets(ctx context.Context, startingTipset block.TipSet, done func(block.TipSet) (bool, error), loadAndVerify func(context.Context, block.TipSetKey) (block.TipSet, []cid.Cid, error), recSelGen func(int) ipld.Node, rpf *requestPeerFinder) ([]block.TipSet, error) { - out := []block.TipSet{startingTipset} - isDone, err := done(startingTipset) - if err != nil { - return nil, err - } - - // fetch remaining tipsets recursively - recursionDepth := 1 - anchor := startingTipset // The tipset above the one we actually want to fetch. - for !isDone { - // Because a graphsync query always starts from a single CID, - // we fetch tipsets anchored from any block in the last (i.e. highest) tipset and - // recursively fetching sets of parents. - childBlock := anchor.At(0) - peer := rpf.CurrentPeer() - logGraphsyncFetcher.Infof("fetching chain from height %d, block %s, peer %s, %d levels", childBlock.Height, childBlock.Cid(), peer, recursionDepth) - err := gsf.fetchBlocksRecursively(ctx, recSelGen, childBlock.Cid(), peer, recursionDepth) - if err != nil { - // something went wrong in a graphsync request, but we want to keep trying other peers, so - // just log error - logGraphsyncFetcher.Infof("request failed, trying another peer: %s", err) - } - var incomplete []cid.Cid - for i := 0; !isDone && i < recursionDepth; i++ { - tsKey, err := anchor.Parents() - if err != nil { - return nil, err - } - - var verifiedTip block.TipSet - verifiedTip, incomplete, err = loadAndVerify(ctx, tsKey) - if err != nil { - return nil, err - } - if len(incomplete) == 0 { - out = append(out, verifiedTip) - isDone, err = done(verifiedTip) - if err != nil { - return nil, err - } - anchor = verifiedTip - } else { - logGraphsyncFetcher.Infof("incomplete fetch for tipset %s, trying new peer", tsKey) - err := rpf.FindNextPeer() - if err != nil { - return nil, errors.Wrapf(err, "fetching tipset: %s", tsKey) - } - break // Stop verifying, make another fetch - } - } - if len(incomplete) == 0 && recursionDepth < maxRecursionDepth { - recursionDepth *= recursionMultiplier - } - } - return out, nil -} - -// fullBlockSel is a function that generates a selector for a block and its messages. -func (gsf *GraphSyncFetcher) fullBlockSel() ipld.Node { - selector := gsf.ssb.ExploreIndex(block.IndexMessagesField, - gsf.ssb.ExploreRange(0, 2, gsf.fetchThroughAMTSelector(amtRecurstionDepth)), - ).Node() - - return selector -} - -// headerSel is a function that generates a selector for a block header. -func (gsf *GraphSyncFetcher) headerSel() ipld.Node { - return gsf.ssb.Matcher().Node() -} - -// fetchBlocks requests a single set of cids as individual blocks, fetching -// non-recursively -func (gsf *GraphSyncFetcher) fetchBlocks(ctx context.Context, selGen func() ipld.Node, cids []cid.Cid, targetPeer peer.ID) error { - selector := selGen() - var wg sync.WaitGroup - // Any of the multiple parallel requests might fail. Wait for all of them to complete, then - // return any error (in this case, the first one to be received). - var setAnyError sync.Once - var anyError error - for _, c := range cids { - requestCtx, requestCancel := context.WithCancel(ctx) - defer requestCancel() - requestChan, errChan := gsf.exchange.Request(requestCtx, targetPeer, cidlink.Link{Cid: c}, selector, graphsync.ExtensionData{Name: ChainsyncProtocolExtension}) - wg.Add(1) - go func(requestChan <-chan graphsync.ResponseProgress, errChan <-chan error, cancelFunc func()) { - defer wg.Done() - err := gsf.consumeResponse(requestChan, errChan, cancelFunc) - if err != nil { - setAnyError.Do(func() { - anyError = err - }) - } - }(requestChan, errChan, requestCancel) - } - wg.Wait() - return anyError -} - -func (gsf *GraphSyncFetcher) fetchThroughAMTSelector(recursionDepth uint32) selectorbuilder.SelectorSpec { - return gsf.ssb.ExploreIndex(amtHeadNodeFieldIndex, - gsf.ssb.ExploreRecursive(ipldselector.RecursionLimitDepth(int(recursionDepth)), - gsf.ssb.ExploreUnion( - gsf.ssb.ExploreIndex(amtNodeLinksFieldIndex, gsf.ssb.ExploreAll(gsf.ssb.ExploreRecursiveEdge())), - gsf.ssb.ExploreIndex(amtNodeValuesFieldIndex, gsf.ssb.ExploreAll(gsf.ssb.Matcher()))))) -} - -func (gsf *GraphSyncFetcher) consumeResponse(requestChan <-chan graphsync.ResponseProgress, errChan <-chan error, cancelFunc func()) error { - timer := gsf.systemClock.NewTimer(progressTimeout) - var anyError error - for errChan != nil || requestChan != nil { - select { - case err, ok := <-errChan: - if !ok { - errChan = nil - } - anyError = err - timer.Reset(progressTimeout) - case _, ok := <-requestChan: - if !ok { - requestChan = nil - } - timer.Reset(progressTimeout) - case <-timer.Chan(): - cancelFunc() - } - } - return anyError -} - -// recFullBlockSel generates a selector for a chain of full blocks including -// messages. -func (gsf *GraphSyncFetcher) recFullBlockSel(recursionDepth int) ipld.Node { - // recursive selector to fetch n sets of parent blocks - // starting from block matching base cid: - // - fetch all parent blocks, with messages - // - with exactly the first parent block, repeat again for its parents - // - continue up to recursion depth - selector := gsf.ssb.ExploreRecursive(ipldselector.RecursionLimitDepth(recursionDepth), gsf.ssb.ExploreIndex(block.IndexParentsField, - gsf.ssb.ExploreUnion( - gsf.ssb.ExploreAll( - gsf.ssb.ExploreIndex(block.IndexMessagesField, - gsf.ssb.ExploreRange(0, 2, gsf.fetchThroughAMTSelector(amtRecurstionDepth)), - )), - gsf.ssb.ExploreIndex(0, gsf.ssb.ExploreRecursiveEdge()), - ))).Node() - return selector -} - -// recHeaderSel generates a selector for a chain of only block headers. -func (gsf *GraphSyncFetcher) recHeaderSel(recursionDepth int) ipld.Node { - selector := gsf.ssb.ExploreRecursive(ipldselector.RecursionLimitDepth(recursionDepth), gsf.ssb.ExploreIndex(block.IndexParentsField, - gsf.ssb.ExploreUnion( - gsf.ssb.ExploreAll( - gsf.ssb.Matcher(), - ), - gsf.ssb.ExploreIndex(0, gsf.ssb.ExploreRecursiveEdge()), - ))).Node() - return selector -} - -// fetchBlocksRecursively gets the blocks from recursionDepth ancestor tipsets -// starting from baseCid. -func (gsf *GraphSyncFetcher) fetchBlocksRecursively(ctx context.Context, recSelGen func(int) ipld.Node, baseCid cid.Cid, targetPeer peer.ID, recursionDepth int) error { - requestCtx, requestCancel := context.WithCancel(ctx) - defer requestCancel() - selector := recSelGen(recursionDepth) - - requestChan, errChan := gsf.exchange.Request(requestCtx, targetPeer, cidlink.Link{Cid: baseCid}, selector, graphsync.ExtensionData{Name: ChainsyncProtocolExtension}) - return gsf.consumeResponse(requestChan, errChan, requestCancel) -} - -// loadAndVerifyHeaders loads the IPLD blocks for the headers in a tipset. -// It returns the tipset if complete. Otherwise it returns UndefTipset and the -// CIDs of all missing headers. -func (gsf *GraphSyncFetcher) loadAndVerifyHeader(ctx context.Context, key block.TipSetKey) (block.TipSet, []cid.Cid, error) { - // Load the block headers that exist. - incomplete := make(map[cid.Cid]struct{}) - tip, err := gsf.loadTipHeaders(ctx, key, incomplete) - if err != nil { - return block.UndefTipSet, nil, err - } - if len(incomplete) == 0 { - return tip, nil, nil - } - incompleteArr := make([]cid.Cid, 0, len(incomplete)) - for cid := range incomplete { - incompleteArr = append(incompleteArr, cid) - } - return block.UndefTipSet, incompleteArr, nil -} - -// Loads the IPLD blocks for all blocks in a tipset, and checks for the presence of the -// message list structures in the store. -// Returns the tipset if complete. Otherwise it returns UndefTipSet and the CIDs of -// all blocks missing either their header or messages. -func (gsf *GraphSyncFetcher) loadAndVerifyFullBlock(ctx context.Context, key block.TipSetKey) (block.TipSet, []cid.Cid, error) { - // Load the block headers that exist. - incomplete := make(map[cid.Cid]struct{}) - tip, err := gsf.loadTipHeaders(ctx, key, incomplete) - if err != nil { - return block.UndefTipSet, nil, err - } - - err = gsf.loadAndVerifySubComponents(ctx, tip, incomplete, - func(meta types.TxMeta) cid.Cid { - return meta.SecpRoot.Cid - }, - func(rawBlock blocks.Block) error { - messages := []*types.SignedMessage{} - - err := gsf.loadAndProcessAMTData(ctx, rawBlock.Cid(), func(msgBlock blocks.Block) error { - var message types.SignedMessage - if err := encoding.Decode(msgBlock.RawData(), &message); err != nil { - return errors.Wrapf(err, "could not decode secp message (cid %s)", msgBlock.Cid()) - } - if err := gsf.validator.ValidateSignedMessageSyntax(ctx, &message); err != nil { - return errors.Wrapf(err, "invalid syntax for secp message (cid %s)", msgBlock.Cid()) - } - messages = append(messages, &message) - return nil - }) - if err != nil { - return err - } - - return nil - }) - if err != nil { - return block.UndefTipSet, nil, err - } - - err = gsf.loadAndVerifySubComponents(ctx, tip, incomplete, - func(meta types.TxMeta) cid.Cid { - return meta.BLSRoot.Cid - }, - func(rawBlock blocks.Block) error { - messages := []*types.UnsignedMessage{} - - err := gsf.loadAndProcessAMTData(ctx, rawBlock.Cid(), func(msgBlock blocks.Block) error { - var message types.UnsignedMessage - if err := encoding.Decode(msgBlock.RawData(), &message); err != nil { - return errors.Wrapf(err, "could not decode bls message (cid %s)", msgBlock.Cid()) - } - if err := gsf.validator.ValidateUnsignedMessageSyntax(ctx, &message); err != nil { - return errors.Wrapf(err, "invalid syntax for bls message (cid %s)", msgBlock.Cid()) - } - - messages = append(messages, &message) - return nil - }) - if err != nil { - return err - } - - return nil - }) - - // TODO #3312 we should validate these messages in the same way we validate blocks - if err != nil { - return block.UndefTipSet, nil, err - } - - if len(incomplete) > 0 { - incompleteArr := make([]cid.Cid, 0, len(incomplete)) - for cid := range incomplete { - incompleteArr = append(incompleteArr, cid) - } - return block.UndefTipSet, incompleteArr, nil - } - - return tip, nil, nil -} - -// loadAndProcessAMTData processes data loaded from an AMT that is stored in the fetcher's datastore. -func (gsf *GraphSyncFetcher) loadAndProcessAMTData(ctx context.Context, c cid.Cid, processFn func(b blocks.Block) error) error { - as := cbor.NewCborStore(gsf.store) - - a, err := amt.LoadAMT(ctx, as, c) - if err != nil { - if err == bstore.ErrNotFound { - return err - } - return errors.Wrapf(err, "fetched data (cid %s) could not be decoded as an AMT", c.String()) - } - - return a.ForEach(ctx, func(index uint64, deferred *typegen.Deferred) error { - var c cid.Cid - if err := cbor.DecodeInto(deferred.Raw, &c); err != nil { - return errors.Wrapf(err, "cid from amt could not be decoded as a Cid (index %d)", index) - } - - ok, err := gsf.store.Has(c) - if err != nil { - return errors.Wrapf(err, "could not retrieve secp message from blockstore (cid %s)", c) - } - - if !ok { - return bstore.ErrNotFound - } - - rawMsg, err := gsf.store.Get(c) - if err != nil { - return errors.Wrapf(err, "could not retrieve secp message from blockstore (cid %s)", c) - } - - if err := processFn(rawMsg); err != nil { - return errors.Wrapf(err, "could not decode secp message (cid %s)", c) - } - - return nil - }) -} - -func (gsf *GraphSyncFetcher) loadTxMeta(c cid.Cid) (types.TxMeta, error) { - rawMetaBlock, err := gsf.store.Get(c) - if err != nil { - return types.TxMeta{}, err - } - var ret types.TxMeta - err = encoding.Decode(rawMetaBlock.RawData(), &ret) - if err != nil { - return types.TxMeta{}, err - } - return ret, nil -} - -// Loads and validates the block headers for a tipset. Returns the tipset if complete, -// else the cids of blocks which are not yet stored. -func (gsf *GraphSyncFetcher) loadTipHeaders(ctx context.Context, key block.TipSetKey, incomplete map[cid.Cid]struct{}) (block.TipSet, error) { - rawBlocks := make([]blocks.Block, 0, key.Len()) - for it := key.Iter(); !it.Complete(); it.Next() { - hasBlock, err := gsf.store.Has(it.Value()) - if err != nil { - return block.UndefTipSet, err - } - if !hasBlock { - incomplete[it.Value()] = struct{}{} - continue - } - rawBlock, err := gsf.store.Get(it.Value()) - if err != nil { - return block.UndefTipSet, err - } - rawBlocks = append(rawBlocks, rawBlock) - } - - // Validate the headers. - validatedBlocks, err := sanitizeBlocks(ctx, rawBlocks, gsf.validator) - if err != nil || len(validatedBlocks) == 0 { - return block.UndefTipSet, err - } - tip, err := block.NewTipSet(validatedBlocks...) - return tip, err -} - -type getMetaComponentFn func(types.TxMeta) cid.Cid -type verifyComponentFn func(blocks.Block) error - -// Loads and validates the block messages for a tipset. Returns the tipset if complete, -// else the cids of blocks which are not yet stored. -func (gsf *GraphSyncFetcher) loadAndVerifySubComponents(ctx context.Context, - tip block.TipSet, - incomplete map[cid.Cid]struct{}, - getMetaComponent getMetaComponentFn, - verifyComponent verifyComponentFn) error { - subComponents := make([]blocks.Block, 0, tip.Len()) - - // Check that nested structures are also stored, recording any that are missing as incomplete. - for i := 0; i < tip.Len(); i++ { - blk := tip.At(i) - - meta, err := gsf.loadTxMeta(blk.Messages.Cid) - if err == bstore.ErrNotFound { - // exit early as we can't load anything else without txmeta - incomplete[blk.Cid()] = struct{}{} - continue - } - if err != nil { - return err - } - - link := getMetaComponent(meta) - ok, err := gsf.store.Has(link) - if err != nil { - return err - } - if !ok { - incomplete[blk.Cid()] = struct{}{} - continue - } - rawBlock, err := gsf.store.Get(link) - if err != nil { - return err - } - subComponents = append(subComponents, rawBlock) - } - - for _, rawBlock := range subComponents { - err := verifyComponent(rawBlock) - if err != nil { - // If this is a not found error, this simply means we failed to fetch some information. - // Mark this block as incomplete, but don't fail. - if err == bstore.ErrNotFound { - incomplete[rawBlock.Cid()] = struct{}{} - return nil - } - return err - } - } - - return nil -} - -type requestPeerFinder struct { - peerTracker graphsyncFallbackPeerTracker - currentPeer peer.ID - triedPeers map[peer.ID]struct{} -} - -func newRequestPeerFinder(peerTracker graphsyncFallbackPeerTracker, fetchFromSelf bool) (*requestPeerFinder, error) { - pri := &requestPeerFinder{ - peerTracker: peerTracker, - triedPeers: make(map[peer.ID]struct{}), - } - - // If the new cid triggering this request came from ourselves then - // the first peer to request from should be ourselves. - if fetchFromSelf { - pri.triedPeers[peerTracker.Self()] = struct{}{} - pri.currentPeer = peerTracker.Self() - return pri, nil - } - - // Get a peer ID from the peer tracker - err := pri.FindNextPeer() - if err != nil { - return nil, err - } - return pri, nil -} - -func (pri *requestPeerFinder) CurrentPeer() peer.ID { - return pri.currentPeer -} - -func (pri *requestPeerFinder) FindNextPeer() error { - chains := pri.peerTracker.List() - for _, chain := range chains { - if _, tried := pri.triedPeers[chain.Sender]; !tried { - pri.triedPeers[chain.Sender] = struct{}{} - pri.currentPeer = chain.Sender - return nil - } - } - return fmt.Errorf("Unable to find any untried peers") -} - -func sanitizeBlocks(ctx context.Context, unsanitized []blocks.Block, validator consensus.BlockSyntaxValidator) ([]*block.Block, error) { - var blocks []*block.Block - for _, u := range unsanitized { - block, err := block.DecodeBlock(u.RawData()) - if err != nil { - return nil, errors.Wrapf(err, "fetched data (cid %s) was not a block", u.Cid().String()) - } - - if err := validator.ValidateSyntax(ctx, block); err != nil { - return nil, errors.Wrapf(err, "invalid block %s", block.Cid()) - } - - blocks = append(blocks, block) - } - return blocks, nil -} diff --git a/internal/pkg/chainsync/fetcher/graphsync_fetcher_test.go b/internal/pkg/chainsync/fetcher/graphsync_fetcher_test.go deleted file mode 100644 index 992a0644d6..0000000000 --- a/internal/pkg/chainsync/fetcher/graphsync_fetcher_test.go +++ /dev/null @@ -1,972 +0,0 @@ -package fetcher_test - -import ( - "bytes" - "context" - "fmt" - "io" - "reflect" - "testing" - "time" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-datastore" - dss "github.com/ipfs/go-datastore/sync" - "github.com/ipfs/go-graphsync" - graphsyncimpl "github.com/ipfs/go-graphsync/impl" - gsnet "github.com/ipfs/go-graphsync/network" - gsstoreutil "github.com/ipfs/go-graphsync/storeutil" - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - format "github.com/ipfs/go-ipld-format" - "github.com/ipld/go-ipld-prime" - cidlink "github.com/ipld/go-ipld-prime/linking/cid" - basicnode "github.com/ipld/go-ipld-prime/node/basic" - "github.com/ipld/go-ipld-prime/traversal/selector" - selectorbuilder "github.com/ipld/go-ipld-prime/traversal/selector/builder" - "github.com/libp2p/go-libp2p-core/peer" - mocknet "github.com/libp2p/go-libp2p/p2p/net/mock" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/fetcher" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/discovery" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -const visitsPerBlock = 18 - -type notDecodable struct { - _ struct{} `cbor:",toarray"` - Num int `json:"num"` - Message string `json:"message"` -} - -func init() { - encoding.RegisterIpldCborType(notDecodable{}) -} - -func TestGraphsyncFetcher(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - bs := bstore.NewBlockstore(dss.MutexWrap(datastore.NewMapDatastore())) - fc, chainClock := clock.NewFakeChain(1234567890, 5*time.Second, time.Second, time.Now().Unix()) - bv := consensus.NewDefaultBlockValidator(chainClock, nil, nil) - msgV := &consensus.FakeMessageValidator{} - syntax := consensus.WrappedSyntaxValidator{ - BlockSyntaxValidator: bv, - MessageSyntaxValidator: msgV, - } - - pid0 := th.RequireIntPeerID(t, 0) - builder := chain.NewBuilderWithDeps(t, address.Undef, &chain.FakeStateBuilder{}, chain.NewClockTimestamper(chainClock)) - keys := types.MustGenerateKeyInfo(2, 42) - mm := vm.NewMessageMaker(t, keys) - notDecodableBytes, err := encoding.Encode(notDecodable{Num: 5, Message: "applesauce"}) - require.NoError(t, err) - notDecodableBlock, err := cbor.Decode(notDecodableBytes, constants.DefaultHashFunction, -1) - require.NoError(t, err) - - alice := mm.Addresses()[0] - bob := mm.Addresses()[1] - - ssb := selectorbuilder.NewSelectorSpecBuilder(basicnode.Style.Any) - - amtSelector := ssb.ExploreIndex(2, - ssb.ExploreRecursive(selector.RecursionLimitDepth(10), - ssb.ExploreUnion( - ssb.ExploreIndex(1, ssb.ExploreAll(ssb.ExploreRecursiveEdge())), - ssb.ExploreIndex(2, ssb.ExploreAll(ssb.Matcher()))))) - - layer1Selector, err := ssb.ExploreIndex(block.IndexMessagesField, - ssb.ExploreRange(0, 2, amtSelector), - ).Selector() - - require.NoError(t, err) - - recursiveSelector := func(levels int) selector.Selector { - s, err := ssb.ExploreRecursive(selector.RecursionLimitDepth(levels), ssb.ExploreIndex(block.IndexParentsField, - ssb.ExploreUnion( - ssb.ExploreAll( - ssb.ExploreIndex(block.IndexMessagesField, - ssb.ExploreRange(0, 2, amtSelector), - )), - ssb.ExploreIndex(0, ssb.ExploreRecursiveEdge()), - ))).Selector() - require.NoError(t, err) - return s - } - msgStore := chain.NewMessageStore(bs) - - pid1 := th.RequireIntPeerID(t, 1) - pid2 := th.RequireIntPeerID(t, 2) - - doneAt := func(tsKey block.TipSetKey) func(block.TipSet) (bool, error) { - return func(ts block.TipSet) (bool, error) { - if ts.Key().Equals(tsKey) { - return true, nil - } - return false, nil - } - } - withMessageBuilder := func(b *chain.BlockBuilder) { - b.AddMessages( - []*types.SignedMessage{mm.NewSignedMessage(alice, 1)}, - []*types.UnsignedMessage{&mm.NewSignedMessage(bob, 1).Message}, - ) - } - withMessageEachBuilder := func(b *chain.BlockBuilder, i int) { - withMessageBuilder(b) - } - - verifyMessagesFetched := func(t *testing.T, ts block.TipSet) { - for i := 0; i < ts.Len(); i++ { - blk := ts.At(i) - - // use fetcher blockstore to retrieve messages - secpMsgs, blsMsgs, err := msgStore.LoadMessages(ctx, blk.Messages.Cid) - require.NoError(t, err) - - // get expected messages from builders block store - expectedSecpMessages, expectedBLSMsgs, err := builder.LoadMessages(ctx, blk.Messages.Cid) - require.NoError(t, err) - - require.True(t, reflect.DeepEqual(secpMsgs, expectedSecpMessages)) - require.True(t, reflect.DeepEqual(blsMsgs, expectedBLSMsgs)) - } - } - - loader := successLoader(ctx, builder) - t.Run("happy path returns correct tipsets", func(t *testing.T) { - gen := builder.NewGenesis() - final := builder.BuildOn(gen, 3, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - mgs := newMockableGraphsync(ctx, bs, fc, t) - mgs.stubResponseWithLoader(pid0, layer1Selector, loader, final.Key().ToSlice()...) - mgs.stubResponseWithLoader(pid0, recursiveSelector(1), loader, final.At(0).Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0)) - done := doneAt(gen.Key()) - - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - require.NoError(t, err, "the request completes successfully") - mgs.verifyReceivedRequestCount(4) - require.Equal(t, 2, len(ts), "the right number of tipsets is returned") - require.True(t, final.Key().Equals(ts[0].Key()), "the initial tipset is correct") - require.True(t, gen.Key().Equals(ts[1].Key()), "the remaining tipsets are correct") - }) - - t.Run("initial request fails on a block but fallback peer succeeds", func(t *testing.T) { - gen := builder.NewGenesis() - final := builder.BuildOn(gen, 3, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - chain1 := block.NewChainInfo(pid1, pid1, final.Key(), height) - chain2 := block.NewChainInfo(pid2, pid2, final.Key(), height) - pt := newFakePeerTracker(chain0, chain1, chain2) - - mgs := newMockableGraphsync(ctx, bs, fc, t) - pid0Loader := errorOnCidsLoader(loader, final.At(1).Cid(), final.At(2).Cid()) - pid1Loader := errorOnCidsLoader(loader, final.At(2).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, pid0Loader, final.Key().ToSlice()...) - mgs.expectRequestToRespondWithLoader(pid1, layer1Selector, pid1Loader, final.At(1).Cid(), final.At(2).Cid()) - mgs.expectRequestToRespondWithLoader(pid2, layer1Selector, loader, final.At(2).Cid()) - mgs.expectRequestToRespondWithLoader(pid2, recursiveSelector(1), loader, final.At(0).Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, pt) - - done := doneAt(gen.Key()) - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - require.NoError(t, err, "the request completes successfully") - mgs.verifyReceivedRequestCount(7) - mgs.verifyExpectations() - require.Equal(t, 2, len(ts), "the right number of tipsets is returned") - require.True(t, final.Key().Equals(ts[0].Key()), "the initial tipset is correct") - require.True(t, gen.Key().Equals(ts[1].Key()), "the remaining tipsets are correct") - }) - - t.Run("initial request fails and no other peers succeed", func(t *testing.T) { - gen := builder.NewGenesis() - final := builder.BuildOn(gen, 3, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - chain1 := block.NewChainInfo(pid1, pid1, final.Key(), height) - chain2 := block.NewChainInfo(pid2, pid2, final.Key(), height) - pt := newFakePeerTracker(chain0, chain1, chain2) - mgs := newMockableGraphsync(ctx, bs, fc, t) - errorLoader := errorOnCidsLoader(loader, final.At(1).Cid(), final.At(2).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, errorLoader, final.Key().ToSlice()...) - mgs.expectRequestToRespondWithLoader(pid1, layer1Selector, errorLoader, final.At(1).Cid(), final.At(2).Cid()) - mgs.expectRequestToRespondWithLoader(pid2, layer1Selector, errorLoader, final.At(1).Cid(), final.At(2).Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, pt) - - done := doneAt(gen.Key()) - - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - mgs.verifyReceivedRequestCount(7) - mgs.verifyExpectations() - require.EqualError(t, err, fmt.Sprintf("fetching tipset: %s: Unable to find any untried peers", final.Key().String())) - require.Nil(t, ts) - }) - - t.Run("requests fails because blocks are present but are missing messages", func(t *testing.T) { - gen := builder.NewGenesis() - final := builder.BuildOn(gen, 3, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - mgs := newMockableGraphsync(ctx, bs, fc, t) - final2Meta, err := builder.LoadTxMeta(ctx, final.At(2).Messages.Cid) - require.NoError(t, err) - errorOnMessagesLoader := errorOnCidsLoader(loader, final2Meta.SecpRoot.Cid) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, errorOnMessagesLoader, final.Key().ToSlice()...) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0)) - - done := doneAt(gen.Key()) - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - mgs.verifyReceivedRequestCount(3) - mgs.verifyExpectations() - require.EqualError(t, err, fmt.Sprintf("fetching tipset: %s: Unable to find any untried peers", final.Key().String())) - require.Nil(t, ts) - }) - - t.Run("partial response fail during recursive fetch recovers at fail point", func(t *testing.T) { - gen := builder.NewGenesis() - final := builder.BuildManyOn(5, gen, withMessageBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - chain1 := block.NewChainInfo(pid1, pid1, final.Key(), height) - chain2 := block.NewChainInfo(pid2, pid2, final.Key(), height) - pt := newFakePeerTracker(chain0, chain1, chain2) - - blocks := make([]*block.Block, 4) // in fetch order - prev := final.At(0) - for i := 0; i < 4; i++ { - parent := prev.Parents.Iter().Value() - prev, err = builder.GetBlock(ctx, parent) - require.NoError(t, err) - blocks[i] = prev - } - - mgs := newMockableGraphsync(ctx, bs, fc, t) - pid0Loader := errorOnCidsLoader(loader, blocks[3].Cid()) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, pid0Loader, final.At(0).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(1), pid0Loader, final.At(0).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(4), pid0Loader, blocks[0].Cid()) - mgs.expectRequestToRespondWithLoader(pid1, recursiveSelector(4), loader, blocks[2].Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, pt) - - done := func(ts block.TipSet) (bool, error) { - if ts.Key().Equals(gen.Key()) { - return true, nil - } - return false, nil - } - - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - require.NoError(t, err, "the request completes successfully") - mgs.verifyReceivedRequestCount(4) - mgs.verifyExpectations() - require.Equal(t, 6, len(ts), "the right number of tipsets is returned") - expectedTs := final - for _, resultTs := range ts { - require.True(t, expectedTs.Key().Equals(resultTs.Key()), "the initial tipset is correct") - key, err := expectedTs.Parents() - require.NoError(t, err) - if !key.Empty() { - expectedTs, err = builder.GetTipSet(key) - require.NoError(t, err) - } - } - }) - - t.Run("missing single block in multi block tip during recursive fetch", func(t *testing.T) { - gen := builder.NewGenesis() - multi := builder.BuildOn(gen, 3, withMessageEachBuilder) - penultimate := builder.BuildManyOn(3, multi, withMessageBuilder) - final := builder.BuildOn(penultimate, 1, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - mgs := newMockableGraphsync(ctx, bs, fc, t) - errorInMultiBlockLoader := errorOnCidsLoader(loader, multi.At(1).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, errorInMultiBlockLoader, final.At(0).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(1), errorInMultiBlockLoader, final.At(0).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(4), errorInMultiBlockLoader, penultimate.At(0).Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0)) - done := doneAt(gen.Key()) - - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - mgs.verifyReceivedRequestCount(3) - mgs.verifyExpectations() - require.EqualError(t, err, fmt.Sprintf("fetching tipset: %s: Unable to find any untried peers", multi.Key().String())) - require.Nil(t, ts) - }) - - t.Run("missing single block in multi block tip during recursive fetch, recover through fallback", func(t *testing.T) { - gen := builder.NewGenesis() - multi := builder.BuildOn(gen, 3, withMessageEachBuilder) - withMultiParent := builder.BuildOn(multi, 1, withMessageEachBuilder) - penultimate := builder.BuildManyOn(2, withMultiParent, withMessageBuilder) - final := builder.BuildOn(penultimate, 1, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - chain1 := block.NewChainInfo(pid1, pid1, final.Key(), height) - chain2 := block.NewChainInfo(pid2, pid2, final.Key(), height) - - mgs := newMockableGraphsync(ctx, bs, fc, t) - errorInMultiBlockLoader := errorOnCidsLoader(loader, multi.At(1).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, errorInMultiBlockLoader, final.At(0).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(1), errorInMultiBlockLoader, final.At(0).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(4), errorInMultiBlockLoader, penultimate.At(0).Cid()) - mgs.expectRequestToRespondWithLoader(pid1, recursiveSelector(4), loader, withMultiParent.At(0).Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0, chain1, chain2)) - done := doneAt(gen.Key()) - - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - require.NoError(t, err, "the request completes successfully") - mgs.verifyReceivedRequestCount(4) - mgs.verifyExpectations() - require.Equal(t, 6, len(ts), "the right number of tipsets is returned") - expectedTs := final - for _, resultTs := range ts { - require.True(t, expectedTs.Key().Equals(resultTs.Key()), "the initial tipset is correct") - key, err := expectedTs.Parents() - require.NoError(t, err) - if !key.Empty() { - expectedTs, err = builder.GetTipSet(key) - require.NoError(t, err) - } - } - }) - - t.Run("stopping at edge heights in recursive fetch", func(t *testing.T) { - gen := builder.NewGenesis() - recursive16stop := builder.BuildManyOn(1, gen, withMessageBuilder) - recursive16middle := builder.BuildManyOn(15, recursive16stop, withMessageBuilder) - recursive4stop := builder.BuildManyOn(1, recursive16middle, withMessageBuilder) - recursive4middle := builder.BuildManyOn(3, recursive4stop, withMessageBuilder) - recursive1stop := builder.BuildManyOn(1, recursive4middle, withMessageBuilder) - final := builder.BuildOn(recursive1stop, 1, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - nextKey := final.Key() - for i := 1; i <= 22; i++ { - tipset, err := builder.GetTipSet(nextKey) - require.NoError(t, err) - mgs := newMockableGraphsync(ctx, bs, fc, t) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, loader, final.At(0).Cid()) - receivedRequestCount := 1 - if i > 1 { - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(1), loader, final.At(0).Cid()) - receivedRequestCount++ - } - if i > 2 { - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(4), loader, recursive1stop.At(0).Cid()) - receivedRequestCount++ - } - if i > 6 { - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(16), loader, recursive4stop.At(0).Cid()) - receivedRequestCount++ - } - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0)) - done := doneAt(tipset.Key()) - - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - require.NoError(t, err, "the request completes successfully") - mgs.verifyReceivedRequestCount(receivedRequestCount) - mgs.verifyExpectations() - - require.Equal(t, i, len(ts), "the right number of tipsets is returned") - lastTs := ts[len(ts)-1] - verifyMessagesFetched(t, lastTs) - - nextKey, err = tipset.Parents() - require.NoError(t, err) - } - }) - - t.Run("value returned with non block format", func(t *testing.T) { - mgs := newMockableGraphsync(ctx, bs, fc, t) - - key := block.NewTipSetKey(notDecodableBlock.Cid()) - chain0 := block.NewChainInfo(pid0, pid0, key, 0) - notDecodableLoader := simpleLoader([]format.Node{notDecodableBlock}) - mgs.stubResponseWithLoader(pid0, layer1Selector, notDecodableLoader, notDecodableBlock.Cid()) - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0)) - - done := doneAt(key) - ts, err := fetcher.FetchTipSets(ctx, key, pid0, done) - require.Error(t, err) - assert.Contains(t, err.Error(), fmt.Sprintf("fetched data (cid %s) was not a block: cbor: cannot unmarshal", notDecodableBlock.Cid().String())) - require.Nil(t, ts) - }) - - t.Run("block returned with invalid syntax", func(t *testing.T) { - mgs := newMockableGraphsync(ctx, bs, fc, t) - blk := simpleBlock() - blk.Height = 1 - blk.Timestamp = uint64(chainClock.StartTimeOfEpoch(blk.Height).Unix()) - key := block.NewTipSetKey(blk.Cid()) - chain0 := block.NewChainInfo(pid0, pid0, key, blk.Height) - invalidSyntaxLoader := simpleLoader([]format.Node{blk.ToNode()}) - mgs.stubResponseWithLoader(pid0, layer1Selector, invalidSyntaxLoader, blk.Cid()) - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0)) - done := doneAt(key) - ts, err := fetcher.FetchTipSets(ctx, key, pid0, done) - require.EqualError(t, err, fmt.Sprintf("invalid block %s: block %s has nil miner address", blk.Cid().String(), blk.Cid().String())) - require.Nil(t, ts) - }) - - t.Run("blocks present but messages don't decode", func(t *testing.T) { - mgs := newMockableGraphsync(ctx, bs, fc, t) - blk := requireSimpleValidBlock(t, 3, address.Undef) - metaCid, err := msgStore.StoreTxMeta(ctx, types.TxMeta{SecpRoot: e.NewCid(notDecodableBlock.Cid()), BLSRoot: e.NewCid(types.EmptyMessagesCID)}) - require.NoError(t, err) - blk.Messages = e.NewCid(metaCid) - key := block.NewTipSetKey(blk.Cid()) - chain0 := block.NewChainInfo(pid0, pid0, key, blk.Height) - nd, err := (&types.SignedMessage{}).ToNode() - require.NoError(t, err) - notDecodableLoader := simpleLoader([]format.Node{blk.ToNode(), notDecodableBlock, nd}) - mgs.stubResponseWithLoader(pid0, layer1Selector, notDecodableLoader, blk.Cid()) - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0)) - - done := doneAt(key) - ts, err := fetcher.FetchTipSets(ctx, key, pid0, done) - require.EqualError(t, err, fmt.Sprintf("fetched data (cid %s) could not be decoded as an AMT: cbor input had wrong number of fields", notDecodableBlock.Cid().String())) - require.Nil(t, ts) - }) - - t.Run("messages don't validate", func(t *testing.T) { - gen := builder.NewGenesis() - final := builder.BuildOn(gen, 1, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - mgs := newMockableGraphsync(ctx, bs, fc, t) - mgs.stubResponseWithLoader(pid0, layer1Selector, loader, final.Key().ToSlice()...) - - errorMv := mockSyntaxValidator{ - validateMessagesError: fmt.Errorf("Everything Failed"), - } - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, errorMv, fc, newFakePeerTracker(chain0)) - done := doneAt(gen.Key()) - - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - require.Nil(t, ts) - require.Error(t, err, "invalid messages for for message collection (cid %s)", final.At(0).Messages.String()) - }) - - t.Run("hangup occurs during first layer fetch but recovers through fallback", func(t *testing.T) { - gen := builder.NewGenesis() - final := builder.BuildOn(gen, 3, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - chain1 := block.NewChainInfo(pid1, pid1, final.Key(), height) - chain2 := block.NewChainInfo(pid2, pid2, final.Key(), height) - pt := newFakePeerTracker(chain0, chain1, chain2) - - mgs := newMockableGraphsync(ctx, bs, fc, t) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, loader, final.At(0).Cid()) - mgs.expectRequestToRespondWithHangupAfter(pid0, layer1Selector, loader, 0, final.At(1).Cid(), final.At(2).Cid()) - mgs.expectRequestToRespondWithLoader(pid1, layer1Selector, loader, final.At(1).Cid()) - mgs.expectRequestToRespondWithHangupAfter(pid1, layer1Selector, loader, 0, final.At(2).Cid()) - mgs.expectRequestToRespondWithLoader(pid2, layer1Selector, loader, final.At(2).Cid()) - mgs.expectRequestToRespondWithLoader(pid2, recursiveSelector(1), loader, final.At(0).Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, pt) - done := doneAt(gen.Key()) - - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - require.NoError(t, err, "the request completes successfully") - mgs.verifyReceivedRequestCount(7) - mgs.verifyExpectations() - require.Equal(t, 2, len(ts), "the right number of tipsets is returned") - require.True(t, final.Key().Equals(ts[0].Key()), "the initial tipset is correct") - require.True(t, gen.Key().Equals(ts[1].Key()), "the remaining tipsets are correct") - }) - - t.Run("initial request hangs up and no other peers succeed", func(t *testing.T) { - gen := builder.NewGenesis() - final := builder.BuildOn(gen, 3, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - chain1 := block.NewChainInfo(pid1, pid1, final.Key(), height) - chain2 := block.NewChainInfo(pid2, pid2, final.Key(), height) - pt := newFakePeerTracker(chain0, chain1, chain2) - mgs := newMockableGraphsync(ctx, bs, fc, t) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, loader, final.At(0).Cid()) - mgs.expectRequestToRespondWithHangupAfter(pid0, layer1Selector, loader, 0, final.At(1).Cid(), final.At(2).Cid()) - mgs.expectRequestToRespondWithHangupAfter(pid1, layer1Selector, loader, 0, final.At(1).Cid(), final.At(2).Cid()) - mgs.expectRequestToRespondWithHangupAfter(pid2, layer1Selector, loader, 0, final.At(1).Cid(), final.At(2).Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, pt) - done := doneAt(gen.Key()) - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - - mgs.verifyReceivedRequestCount(7) - mgs.verifyExpectations() - require.EqualError(t, err, fmt.Sprintf("fetching tipset: %s: Unable to find any untried peers", final.Key().String())) - require.Nil(t, ts) - }) - - t.Run("partial response hangs up during recursive fetch recovers at hang up point", func(t *testing.T) { - gen := builder.NewGenesis() - final := builder.BuildManyOn(5, gen, withMessageBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - chain1 := block.NewChainInfo(pid1, pid1, final.Key(), height) - chain2 := block.NewChainInfo(pid2, pid2, final.Key(), height) - pt := newFakePeerTracker(chain0, chain1, chain2) - - blocks := make([]*block.Block, 4) // in fetch order - prev := final.At(0) - for i := 0; i < 4; i++ { - parent := prev.Parents.Iter().Value() - prev, err = builder.GetBlock(ctx, parent) - require.NoError(t, err) - blocks[i] = prev - } - - mgs := newMockableGraphsync(ctx, bs, fc, t) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, loader, final.At(0).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(1), loader, final.At(0).Cid()) - mgs.expectRequestToRespondWithHangupAfter(pid0, recursiveSelector(4), loader, 2*visitsPerBlock, blocks[0].Cid()) - mgs.expectRequestToRespondWithLoader(pid1, recursiveSelector(4), loader, blocks[2].Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, pt) - - done := func(ts block.TipSet) (bool, error) { - if ts.Key().Equals(gen.Key()) { - return true, nil - } - return false, nil - } - - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - - require.NoError(t, err, "the request completes successfully") - mgs.verifyReceivedRequestCount(4) - mgs.verifyExpectations() - require.Equal(t, 6, len(ts), "the right number of tipsets is returned") - expectedTs := final - for _, resultTs := range ts { - require.True(t, expectedTs.Key().Equals(resultTs.Key()), "the initial tipset is correct") - key, err := expectedTs.Parents() - require.NoError(t, err) - if !key.Empty() { - expectedTs, err = builder.GetTipSet(key) - require.NoError(t, err) - } - } - }) - - t.Run("hangs up on single block in multi block tip during recursive fetch", func(t *testing.T) { - gen := builder.NewGenesis() - multi := builder.BuildOn(gen, 3, withMessageEachBuilder) - penultimate := builder.BuildManyOn(3, multi, withMessageBuilder) - final := builder.BuildOn(penultimate, 1, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - mgs := newMockableGraphsync(ctx, bs, fc, t) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, loader, final.At(0).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(1), loader, final.At(0).Cid()) - mgs.expectRequestToRespondWithHangupAfter(pid0, recursiveSelector(4), loader, 2*visitsPerBlock, penultimate.At(0).Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0)) - done := doneAt(gen.Key()) - - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - - mgs.verifyReceivedRequestCount(3) - mgs.verifyExpectations() - require.EqualError(t, err, fmt.Sprintf("fetching tipset: %s: Unable to find any untried peers", multi.Key().String())) - require.Nil(t, ts) - }) - - t.Run("hangs up on single block in multi block tip during recursive fetch, recover through fallback", func(t *testing.T) { - gen := builder.NewGenesis() - multi := builder.BuildOn(gen, 3, withMessageEachBuilder) - withMultiParent := builder.BuildOn(multi, 1, withMessageEachBuilder) - penultimate := builder.BuildManyOn(2, withMultiParent, withMessageBuilder) - final := builder.BuildOn(penultimate, 1, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - chain1 := block.NewChainInfo(pid1, pid1, final.Key(), height) - chain2 := block.NewChainInfo(pid2, pid2, final.Key(), height) - - mgs := newMockableGraphsync(ctx, bs, fc, t) - mgs.expectRequestToRespondWithLoader(pid0, layer1Selector, loader, final.At(0).Cid()) - mgs.expectRequestToRespondWithLoader(pid0, recursiveSelector(1), loader, final.At(0).Cid()) - mgs.expectRequestToRespondWithHangupAfter(pid0, recursiveSelector(4), loader, 2*visitsPerBlock, penultimate.At(0).Cid()) - mgs.expectRequestToRespondWithLoader(pid1, recursiveSelector(4), loader, withMultiParent.At(0).Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0, chain1, chain2)) - done := doneAt(gen.Key()) - - ts, err := fetcher.FetchTipSets(ctx, final.Key(), pid0, done) - - require.NoError(t, err, "the request completes successfully") - mgs.verifyReceivedRequestCount(4) - mgs.verifyExpectations() - require.Equal(t, 6, len(ts), "the right number of tipsets is returned") - expectedTs := final - for _, resultTs := range ts { - require.True(t, expectedTs.Key().Equals(resultTs.Key()), "the initial tipset is correct") - key, err := expectedTs.Parents() - require.NoError(t, err) - if !key.Empty() { - expectedTs, err = builder.GetTipSet(key) - require.NoError(t, err) - } - } - }) -} - -func TestHeadersOnlyGraphsyncFetch(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - bs := bstore.NewBlockstore(dss.MutexWrap(datastore.NewMapDatastore())) - fc := clock.NewFake(time.Now()) - genTime := uint64(1234567890) - chainClock := clock.NewChainClockFromClock(genTime, 5*time.Second, time.Second, fc) - bv := consensus.NewDefaultBlockValidator(chainClock, nil, nil) - msgV := &consensus.FakeMessageValidator{} - syntax := consensus.WrappedSyntaxValidator{ - BlockSyntaxValidator: bv, - MessageSyntaxValidator: msgV, - } - pid0 := th.RequireIntPeerID(t, 0) - builder := chain.NewBuilderWithDeps(t, address.Undef, &chain.FakeStateBuilder{}, chain.NewClockTimestamper(chainClock)) - keys := types.MustGenerateKeyInfo(1, 42) - mm := vm.NewMessageMaker(t, keys) - notDecodableBlock, err := cbor.WrapObject(notDecodable{Num: 5, Message: "applebutter"}, constants.DefaultHashFunction, -1) - require.NoError(t, err) - - alice := mm.Addresses()[0] - - ssb := selectorbuilder.NewSelectorSpecBuilder(basicnode.Style.Any) - layer1Selector, err := ssb.Matcher().Selector() - require.NoError(t, err) - - recursiveSelector := func(levels int) selector.Selector { - s, err := ssb.ExploreRecursive(selector.RecursionLimitDepth(levels), ssb.ExploreIndex(block.IndexParentsField, - ssb.ExploreUnion( - ssb.ExploreAll( - ssb.Matcher(), - ), - ssb.ExploreIndex(0, ssb.ExploreRecursiveEdge()), - ))).Selector() - require.NoError(t, err) - return s - } - - doneAt := func(tsKey block.TipSetKey) func(block.TipSet) (bool, error) { - return func(ts block.TipSet) (bool, error) { - if ts.Key().Equals(tsKey) { - return true, nil - } - return false, nil - } - } - withMessageBuilder := func(b *chain.BlockBuilder) { - b.AddMessages( - []*types.SignedMessage{mm.NewSignedMessage(alice, 1)}, - []*types.UnsignedMessage{}, - ) - } - withMessageEachBuilder := func(b *chain.BlockBuilder, i int) { - withMessageBuilder(b) - } - - verifyNoMessages := func(t *testing.T, ts block.TipSet) { - for i := 0; i < ts.Len(); i++ { - blk := ts.At(i) - stored, err := bs.Has(blk.Messages.Cid) - require.NoError(t, err) - require.False(t, stored) - } - } - - t.Run("happy path returns correct tipsets", func(t *testing.T) { - gen := builder.NewGenesis() - final := builder.BuildOn(gen, 3, withMessageEachBuilder) - height, err := final.Height() - require.NoError(t, err) - chain0 := block.NewChainInfo(pid0, pid0, final.Key(), height) - mgs := newMockableGraphsync(ctx, bs, fc, t) - loader := successHeadersLoader(ctx, builder) - mgs.stubResponseWithLoader(pid0, layer1Selector, loader, final.Key().ToSlice()...) - mgs.stubResponseWithLoader(pid0, recursiveSelector(1), loader, final.At(0).Cid()) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0)) - done := doneAt(gen.Key()) - - ts, err := fetcher.FetchTipSetHeaders(ctx, final.Key(), pid0, done) - require.NoError(t, err, "the request completes successfully") - mgs.verifyReceivedRequestCount(4) - require.Equal(t, 2, len(ts), "the right number of tipsets is returned") - require.True(t, final.Key().Equals(ts[0].Key()), "the initial tipset is correct") - require.True(t, gen.Key().Equals(ts[1].Key()), "the remaining tipsets are correct") - verifyNoMessages(t, ts[0]) - verifyNoMessages(t, ts[1]) - }) - - t.Run("fetch succeeds when messages don't decode", func(t *testing.T) { - mgs := newMockableGraphsync(ctx, bs, fc, t) - blk := requireSimpleValidBlock(t, 3, address.Undef) - metaCid, err := builder.StoreTxMeta(ctx, types.TxMeta{SecpRoot: e.NewCid(notDecodableBlock.Cid()), BLSRoot: e.NewCid(types.EmptyMessagesCID)}) - require.NoError(t, err) - blk.Messages = e.NewCid(metaCid) - key := block.NewTipSetKey(blk.Cid()) - chain0 := block.NewChainInfo(pid0, pid0, key, blk.Height) - nd, err := (&types.SignedMessage{}).ToNode() - require.NoError(t, err) - notDecodableLoader := simpleLoader([]format.Node{blk.ToNode(), notDecodableBlock, nd}) - mgs.stubResponseWithLoader(pid0, layer1Selector, notDecodableLoader, blk.Cid()) - fetcher := fetcher.NewGraphSyncFetcher(ctx, mgs, bs, syntax, fc, newFakePeerTracker(chain0)) - - done := doneAt(key) - ts, err := fetcher.FetchTipSetHeaders(ctx, key, pid0, done) - assert.NoError(t, err) - require.Equal(t, 1, len(ts)) - assert.NoError(t, err) - assert.Equal(t, key, ts[0].Key()) - }) -} - -func TestRealWorldGraphsyncFetchOnlyHeaders(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - // setup a chain - fc, chainClock := clock.NewFakeChain(1234567890, 5*time.Second, time.Second, time.Now().Unix()) - builder := chain.NewBuilderWithDeps(t, address.Undef, &chain.FakeStateBuilder{}, chain.NewClockTimestamper(chainClock)) - keys := types.MustGenerateKeyInfo(2, 42) - mm := vm.NewMessageMaker(t, keys) - alice := mm.Addresses()[0] - bob := mm.Addresses()[1] - gen := builder.NewGenesis() - - // count > 64 force multiple layers in amts - messageCount := uint64(100) - - secpMessages := make([]*types.SignedMessage, messageCount) - blsMessages := make([]*types.UnsignedMessage, messageCount) - for i := uint64(0); i < messageCount; i++ { - secpMessages[i] = mm.NewSignedMessage(alice, i) - blsMessages[i] = &mm.NewSignedMessage(bob, i).Message - } - - tipCount := 32 - final := builder.BuildManyOn(tipCount, gen, func(b *chain.BlockBuilder) { - b.AddMessages(secpMessages, blsMessages) - }) - - // setup network - mn := mocknet.New(ctx) - - host1, err := mn.GenPeer() - if err != nil { - t.Fatal("error generating host") - } - host2, err := mn.GenPeer() - if err != nil { - t.Fatal("error generating host") - } - err = mn.LinkAll() - if err != nil { - t.Fatal("error linking hosts") - } - - gsnet1 := gsnet.NewFromLibp2pHost(host1) - - // setup receiving peer to just record message coming in - gsnet2 := gsnet.NewFromLibp2pHost(host2) - - // setup a graphsync fetcher and a graphsync responder - - bs := bstore.NewBlockstore(dss.MutexWrap(datastore.NewMapDatastore())) - - bv := consensus.NewDefaultBlockValidator(chainClock, nil, nil) - msgV := &consensus.FakeMessageValidator{} - syntax := consensus.WrappedSyntaxValidator{BlockSyntaxValidator: bv, - MessageSyntaxValidator: msgV, - } - pt := discovery.NewPeerTracker(peer.ID("")) - pt.Track(block.NewChainInfo(host2.ID(), host2.ID(), block.TipSetKey{}, 0)) - - localLoader := gsstoreutil.LoaderForBlockstore(bs) - localStorer := gsstoreutil.StorerForBlockstore(bs) - - localGraphsync := graphsyncimpl.New(ctx, gsnet1, localLoader, localStorer) - - fetcher := fetcher.NewGraphSyncFetcher(ctx, localGraphsync, bs, syntax, fc, pt) - - remoteLoader := func(lnk ipld.Link, lnkCtx ipld.LinkContext) (io.Reader, error) { - cid := lnk.(cidlink.Link).Cid - b, err := builder.GetBlockstoreValue(ctx, cid) - if err != nil { - return nil, err - } - return bytes.NewBuffer(b.RawData()), nil - } - graphsyncimpl.New(ctx, gsnet2, remoteLoader, nil) - - tipsets, err := fetcher.FetchTipSetHeaders(ctx, final.Key(), host2.ID(), func(ts block.TipSet) (bool, error) { - if ts.Key().Equals(gen.Key()) { - return true, nil - } - return false, nil - }) - require.NoError(t, err) - - require.Equal(t, tipCount+1, len(tipsets)) - - // Check the headers are in the store. - // Check that the messages and receipts are NOT in the store. - expectedTips := builder.RequireTipSets(final.Key(), tipCount+1) - for _, ts := range expectedTips { - stored, err := bs.Has(ts.At(0).Cid()) - require.NoError(t, err) - assert.True(t, stored) - - stored, err = bs.Has(ts.At(0).Messages.Cid) - require.NoError(t, err) - assert.False(t, stored) - - stored, err = bs.Has(ts.At(0).MessageReceipts.Cid) - require.NoError(t, err) - assert.False(t, stored) - } -} - -func TestRealWorldGraphsyncFetchAcrossNetwork(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - // setup a chain - builder := chain.NewBuilder(t, address.Undef) - keys := types.MustGenerateKeyInfo(1, 42) - mm := vm.NewMessageMaker(t, keys) - alice := mm.Addresses()[0] - gen := builder.NewGenesis() - i := uint64(0) - tipCount := 32 - final := builder.BuildManyOn(tipCount, gen, func(b *chain.BlockBuilder) { - b.AddMessages( - []*types.SignedMessage{mm.NewSignedMessage(alice, i)}, - []*types.UnsignedMessage{}, - ) - }) - - // setup network - mn := mocknet.New(ctx) - - host1, err := mn.GenPeer() - if err != nil { - t.Fatal("error generating host") - } - host2, err := mn.GenPeer() - if err != nil { - t.Fatal("error generating host") - } - err = mn.LinkAll() - if err != nil { - t.Fatal("error linking hosts") - } - - gsnet1 := gsnet.NewFromLibp2pHost(host1) - - // setup receiving peer to just record message coming in - gsnet2 := gsnet.NewFromLibp2pHost(host2) - - // setup a graphsync fetcher and a graphsync responder - - bs := bstore.NewBlockstore(dss.MutexWrap(datastore.NewMapDatastore())) - bv := th.NewFakeBlockValidator() - msgV := &consensus.FakeMessageValidator{} - syntax := consensus.WrappedSyntaxValidator{ - BlockSyntaxValidator: bv, - MessageSyntaxValidator: msgV, - } - fc := clock.NewFake(time.Now()) - pt := discovery.NewPeerTracker(peer.ID("")) - pt.Track(block.NewChainInfo(host2.ID(), host2.ID(), block.TipSetKey{}, 0)) - - localLoader := gsstoreutil.LoaderForBlockstore(bs) - localStorer := gsstoreutil.StorerForBlockstore(bs) - - localGraphsync := graphsyncimpl.New(ctx, gsnet1, localLoader, localStorer) - gsFetcher := fetcher.NewGraphSyncFetcher(ctx, localGraphsync, bs, syntax, fc, pt) - - remoteLoader := func(lnk ipld.Link, lnkCtx ipld.LinkContext) (io.Reader, error) { - cid := lnk.(cidlink.Link).Cid - node, err := tryBlockstoreValue(ctx, builder, cid) - if err != nil { - return nil, err - } - return bytes.NewBuffer(node.RawData()), nil - } - otherGraphsync := graphsyncimpl.New(ctx, gsnet2, remoteLoader, nil, graphsyncimpl.RejectAllRequestsByDefault()) - otherGraphsync.RegisterIncomingRequestHook(func(p peer.ID, requestData graphsync.RequestData, hookActions graphsync.IncomingRequestHookActions) { - _, has := requestData.Extension(fetcher.ChainsyncProtocolExtension) - if has { - hookActions.ValidateRequest() - } - }) - tipsets, err := gsFetcher.FetchTipSets(ctx, final.Key(), host2.ID(), func(ts block.TipSet) (bool, error) { - if ts.Key().Equals(gen.Key()) { - return true, nil - } - return false, nil - }) - require.NoError(t, err) - - require.Equal(t, tipCount+1, len(tipsets)) - - // Check the headers and messages structures are in the store. - expectedTips := builder.RequireTipSets(final.Key(), tipCount+1) - for _, ts := range expectedTips { - stored, err := bs.Has(ts.At(0).Cid()) - require.NoError(t, err) - assert.True(t, stored) - - rawMeta, err := bs.Get(ts.At(0).Messages.Cid) - require.NoError(t, err) - var meta types.TxMeta - err = encoding.Decode(rawMeta.RawData(), &meta) - require.NoError(t, err) - - stored, err = bs.Has(meta.SecpRoot.Cid) - require.NoError(t, err) - assert.True(t, stored) - } -} diff --git a/internal/pkg/chainsync/fetcher/graphsync_helpers_test.go b/internal/pkg/chainsync/fetcher/graphsync_helpers_test.go deleted file mode 100644 index 866c8e91ec..0000000000 --- a/internal/pkg/chainsync/fetcher/graphsync_helpers_test.go +++ /dev/null @@ -1,480 +0,0 @@ -package fetcher_test - -import ( - "bytes" - "context" - "encoding/binary" - "errors" - "fmt" - "io" - "reflect" - "testing" - "time" - - "github.com/filecoin-project/go-address" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - blocks "github.com/ipfs/go-block-format" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-graphsync" - bstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - format "github.com/ipfs/go-ipld-format" - "github.com/ipld/go-ipld-prime" - cidlink "github.com/ipld/go-ipld-prime/linking/cid" - basicnode "github.com/ipld/go-ipld-prime/node/basic" - "github.com/ipld/go-ipld-prime/traversal" - "github.com/ipld/go-ipld-prime/traversal/selector" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -// fakeRequest captures the parameters necessary to uniquely -// identify a graphsync request -type fakeRequest struct { - p peer.ID - root ipld.Link - selector selector.Selector -} - -// fakeResponse represents the necessary data to simulate a graphsync query -// a graphsync query has: -// - two return values: -// - a channel of ResponseProgress -// - a channel of errors -// - one side effect: -// - blocks written to a block store -// when graphsync is called for a matching request, -// -- the responses array is converted to a channel -// -- the error array is converted to a channel -// -- a blks array is written to mock graphsync block store -type fakeResponse struct { - responses []graphsync.ResponseProgress - errs []error - blks []format.Node - hangupAfter int -} - -// String serializes the errs and blks field to a printable string for debug -func (fr fakeResponse) String() string { - errStr := "" - for _, err := range fr.errs { - if err != nil { - errStr += err.Error() - } else { - errStr += fmt.Sprintf("") - } - } - blkStr := "" - for _, blk := range fr.blks { - if blk == nil { - blkStr += fmt.Sprintf("") - } else { - blkStr += fmt.Sprintf("cid: %s, raw data: %x\n", blk.Cid(), blk.RawData()) - } - } - return fmt.Sprintf("ipld nodes: %s\nerrs: %s\n\n", blkStr, errStr) -} - -const noHangup = -1 - -// request response just records a request and the respond to send when its -// made for a stub -type requestResponse struct { - request fakeRequest - response fakeResponse -} - -// hungRequest represents a request that has hung, pending a timeout -// causing a cancellation, which will in turn close the channels -type hungRequest struct { - ctx context.Context - responseChan chan graphsync.ResponseProgress - errChan chan error -} - -// mockableGraphsync conforms to the graphsync exchange interface needed by -// the graphsync fetcher but will only send stubbed responses -type mockableGraphsync struct { - clock clock.Fake - hungRequests []*hungRequest - incomingHungRequest chan *hungRequest - requestsToProcess chan struct{} - ctx context.Context - stubs []requestResponse - expectedRequests []fakeRequest - receivedRequests []fakeRequest - store bstore.Blockstore - t *testing.T -} - -func (mgs *mockableGraphsync) stubString() string { - stubStr := "" - for _, reqResp := range mgs.stubs { - stubStr += reqResp.response.String() - } - return stubStr -} - -func newMockableGraphsync(ctx context.Context, store bstore.Blockstore, clock clock.Fake, t *testing.T) *mockableGraphsync { - mgs := &mockableGraphsync{ - ctx: ctx, - incomingHungRequest: make(chan *hungRequest), - requestsToProcess: make(chan struct{}, 1), - store: store, - clock: clock, - t: t, - } - go mgs.processHungRequests() - return mgs -} - -// processHungRequests handles requests that hangup, by advancing the clock until -// the fetcher cancels those requests, which then causes the channels to close -func (mgs *mockableGraphsync) processHungRequests() { - for { - select { - case hungRequest := <-mgs.incomingHungRequest: - mgs.hungRequests = append(mgs.hungRequests, hungRequest) - select { - case mgs.requestsToProcess <- struct{}{}: - default: - } - case <-mgs.requestsToProcess: - var newHungRequests []*hungRequest - for _, hungRequest := range mgs.hungRequests { - select { - case <-hungRequest.ctx.Done(): - close(hungRequest.errChan) - close(hungRequest.responseChan) - default: - newHungRequests = append(newHungRequests, hungRequest) - } - } - mgs.hungRequests = newHungRequests - if len(mgs.hungRequests) > 0 { - mgs.clock.Advance(15 * time.Second) - select { - case mgs.requestsToProcess <- struct{}{}: - default: - } - } - case <-mgs.ctx.Done(): - return - } - } -} - -// expect request will record a given set of requests as "expected", which can -// then be verified against received requests in verify expectations -func (mgs *mockableGraphsync) expectRequest(pid peer.ID, s selector.Selector, cids ...cid.Cid) { - for _, c := range cids { - mgs.expectedRequests = append(mgs.expectedRequests, fakeRequest{pid, cidlink.Link{Cid: c}, s}) - } -} - -// verifyReceivedRequestCount will fail a test if the expected number of requests were not received -func (mgs *mockableGraphsync) verifyReceivedRequestCount(n int) { - require.Equal(mgs.t, n, len(mgs.receivedRequests), "correct number of graphsync requests were made") -} - -// verifyExpectations will fail a test if all expected requests were not received -func (mgs *mockableGraphsync) verifyExpectations() { - for _, expectedRequest := range mgs.expectedRequests { - matchedRequest := false - for _, receivedRequest := range mgs.receivedRequests { - if reflect.DeepEqual(expectedRequest, receivedRequest) { - matchedRequest = true - break - } - } - require.True(mgs.t, matchedRequest, "expected request was made for peer %s, cid %s", expectedRequest.p.String(), expectedRequest.root.String()) - } -} - -// stubResponseWithLoader stubs a response when the mocked graphsync -// instance is called with the given peer, selector, one of the cids -// by executing the specified root and selector using the given cid loader -func (mgs *mockableGraphsync) stubResponseWithLoader(pid peer.ID, s selector.Selector, loader mockGraphsyncLoader, cids ...cid.Cid) { - for _, c := range cids { - mgs.stubSingleResponseWithLoader(pid, s, loader, noHangup, c) - } -} - -// stubResponseWithHangupAfter stubs a response when the mocked graphsync -// instance is called with the given peer, selector, one of the cids -// by executing the specified root and selector using the given cid loader -// however the response will hangup at stop sending on the channel after N -// responses -func (mgs *mockableGraphsync) stubResponseWithHangupAfter(pid peer.ID, s selector.Selector, loader mockGraphsyncLoader, hangup int, cids ...cid.Cid) { - for _, c := range cids { - mgs.stubSingleResponseWithLoader(pid, s, loader, hangup, c) - } -} - -var ( - errHangup = errors.New("Hangup") -) - -// stubResponseWithLoader stubs a response when the mocked graphsync -// instance is called with the given peer, selector, and cid -// by executing the specified root and selector using the given cid loader -func (mgs *mockableGraphsync) stubSingleResponseWithLoader(pid peer.ID, s selector.Selector, loader mockGraphsyncLoader, hangup int, c cid.Cid) { - var blks []format.Node - var responses []graphsync.ResponseProgress - - linkLoader := func(lnk ipld.Link, lnkCtx ipld.LinkContext) (io.Reader, error) { - cid := lnk.(cidlink.Link).Cid - node, err := loader(cid) - if err != nil { - return nil, err - } - blks = append(blks, node) - return bytes.NewBuffer(node.RawData()), nil - } - root := cidlink.Link{Cid: c} - nb := basicnode.Style.Any.NewBuilder() - err := root.Load(mgs.ctx, ipld.LinkContext{}, nb, linkLoader) - if err != nil { - mgs.stubs = append(mgs.stubs, requestResponse{ - fakeRequest{pid, root, s}, - fakeResponse{errs: []error{err}, hangupAfter: hangup}, - }) - return - } - node := nb.Build() - visited := 0 - visitor := func(tp traversal.Progress, n ipld.Node, tr traversal.VisitReason) error { - if hangup != noHangup && visited >= hangup { - return errHangup - } - visited++ - responses = append(responses, graphsync.ResponseProgress{Node: n, Path: tp.Path, LastBlock: tp.LastBlock}) - return nil - } - err = traversal.Progress{ - Cfg: &traversal.Config{ - Ctx: mgs.ctx, - LinkLoader: linkLoader, - LinkTargetNodeStyleChooser: func(lnk ipld.Link, lnkCtx ipld.LinkContext) (ipld.NodeStyle, error) { - return basicnode.Style.Any, nil - }, - }, - }.WalkAdv(node, s, visitor) - if err == errHangup { - err = nil - } - mgs.stubs = append(mgs.stubs, requestResponse{ - fakeRequest{pid, root, s}, - fakeResponse{responses, []error{err}, blks, hangup}, - }) -} - -// expectRequestToRespondWithLoader is just a combination of an expectation and a stub -- -// it expects the request to come in and responds with the given loader -func (mgs *mockableGraphsync) expectRequestToRespondWithLoader(pid peer.ID, s selector.Selector, loader mockGraphsyncLoader, cids ...cid.Cid) { - mgs.expectRequest(pid, s, cids...) - mgs.stubResponseWithLoader(pid, s, loader, cids...) -} - -// expectRequestToRespondWithHangupAfter is just a combination of an expectation and a stub -- -// it expects the request to come in and responds with the given loader, but hangup after -// the given number of responses -func (mgs *mockableGraphsync) expectRequestToRespondWithHangupAfter(pid peer.ID, s selector.Selector, loader mockGraphsyncLoader, hangup int, cids ...cid.Cid) { - mgs.expectRequest(pid, s, cids...) - mgs.stubResponseWithHangupAfter(pid, s, loader, hangup, cids...) -} - -func (mgs *mockableGraphsync) processResponse(ctx context.Context, mr fakeResponse) (<-chan graphsync.ResponseProgress, <-chan error) { - for _, block := range mr.blks { - requireBlockStorePut(mgs.t, mgs.store, block) - } - - errChan := make(chan error, len(mr.errs)) - for _, err := range mr.errs { - errChan <- err - } - responseChan := make(chan graphsync.ResponseProgress, len(mr.responses)) - for _, response := range mr.responses { - responseChan <- response - } - - if mr.hangupAfter == noHangup { - close(errChan) - close(responseChan) - } else { - mgs.incomingHungRequest <- &hungRequest{ctx, responseChan, errChan} - } - - return responseChan, errChan -} - -func (mgs *mockableGraphsync) Request(ctx context.Context, p peer.ID, root ipld.Link, selectorSpec ipld.Node, extensions ...graphsync.ExtensionData) (<-chan graphsync.ResponseProgress, <-chan error) { - parsed, err := selector.ParseSelector(selectorSpec) - if err != nil { - return mgs.processResponse(ctx, fakeResponse{nil, []error{fmt.Errorf("invalid selector")}, nil, noHangup}) - } - request := fakeRequest{p, root, parsed} - mgs.receivedRequests = append(mgs.receivedRequests, request) - for _, stub := range mgs.stubs { - if reflect.DeepEqual(stub.request, request) { - return mgs.processResponse(ctx, stub.response) - } - } - return mgs.processResponse(ctx, fakeResponse{nil, []error{fmt.Errorf("unexpected request")}, nil, noHangup}) -} - -type fakePeerTracker struct { - peers []*block.ChainInfo -} - -func newFakePeerTracker(cis ...*block.ChainInfo) *fakePeerTracker { - return &fakePeerTracker{ - peers: cis, - } -} - -func (fpt *fakePeerTracker) List() []*block.ChainInfo { - return fpt.peers -} - -func (fpt *fakePeerTracker) Self() peer.ID { - return peer.ID("") -} - -func requireBlockStorePut(t *testing.T, bs bstore.Blockstore, data format.Node) { - err := bs.Put(data) - require.NoError(t, err) -} - -func simpleBlock() *block.Block { - return &block.Block{ - ParentWeight: fbig.Zero(), - Parents: block.NewTipSetKey(), - Height: 0, - StateRoot: e.NewCid(types.EmptyMessagesCID), - Messages: e.NewCid(types.EmptyTxMetaCID), - MessageReceipts: e.NewCid(types.EmptyReceiptsCID), - BlockSig: &crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: []byte{}}, - BLSAggregateSig: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte{}}, - } -} - -func requireSimpleValidBlock(t *testing.T, nonce uint64, miner address.Address) *block.Block { - b := simpleBlock() - ticket := block.Ticket{} - ticket.VRFProof = make([]byte, binary.Size(nonce)) - binary.BigEndian.PutUint64(ticket.VRFProof, nonce) - b.Ticket = ticket - bytes, err := cbor.DumpObject("null") - require.NoError(t, err) - rawRoot, err := cid.Prefix{ - Version: 1, - Codec: cid.DagCBOR, - MhType: constants.DefaultHashFunction, - MhLength: -1, - }.Sum(bytes) - require.NoError(t, err) - b.StateRoot = e.NewCid(rawRoot) - b.Miner = miner - return b -} - -type mockSyntaxValidator struct { - validateMessagesError error - validateReceiptsError error -} - -func (mv mockSyntaxValidator) ValidateSyntax(ctx context.Context, blk *block.Block) error { - return nil -} - -func (mv mockSyntaxValidator) ValidateSignedMessageSyntax(ctx context.Context, message *types.SignedMessage) error { - return mv.validateMessagesError -} - -func (mv mockSyntaxValidator) ValidateUnsignedMessageSyntax(ctx context.Context, message *types.UnsignedMessage) error { - return nil -} - -func (mv mockSyntaxValidator) ValidateReceiptsSyntax(ctx context.Context, receipts []vm.MessageReceipt) error { - return mv.validateReceiptsError -} - -// blockAndMessageProvider is any interface that can load blocks, messages, AND -// message receipts (such as a chain builder) -type blockAndMessageProvider interface { - GetBlockstoreValue(ctx context.Context, c cid.Cid) (blocks.Block, error) -} - -func tryBlockstoreValue(ctx context.Context, f blockAndMessageProvider, c cid.Cid) (format.Node, error) { - b, err := f.GetBlockstoreValue(ctx, c) - if err != nil { - return nil, err - } - - return cbor.DecodeBlock(b) -} - -func tryBlockNode(ctx context.Context, f chain.BlockProvider, c cid.Cid) (format.Node, error) { - if block, err := f.GetBlock(ctx, c); err == nil { - return block.ToNode(), nil - } - return nil, fmt.Errorf("cid could not be resolved through builder") -} - -// mockGraphsyncLoader is a function that loads cids into ipld.Nodes (or errors), -// used to construct a mock query result against a CID and a selector -type mockGraphsyncLoader func(cid.Cid) (format.Node, error) - -// successLoader will load any cids returned by the given block and message provider -// or error otherwise -func successLoader(ctx context.Context, provider blockAndMessageProvider) mockGraphsyncLoader { - return func(cidToLoad cid.Cid) (format.Node, error) { - return tryBlockstoreValue(ctx, provider, cidToLoad) - } -} - -// successHeadersLoader will load any cids returned by the given block -// provider or error otherwise. -func successHeadersLoader(ctx context.Context, provider chain.BlockProvider) mockGraphsyncLoader { - return func(cidToLoad cid.Cid) (format.Node, error) { - return tryBlockNode(ctx, provider, cidToLoad) - } -} - -// errorOnCidsLoader will override a base loader to error for the specified cids -// or otherwise return the results from the base loader -func errorOnCidsLoader(baseLoader mockGraphsyncLoader, errorOnCids ...cid.Cid) mockGraphsyncLoader { - return func(cidToLoad cid.Cid) (format.Node, error) { - for _, testCid := range errorOnCids { - if cidToLoad.Equals(testCid) { - return nil, fmt.Errorf("Everything failed") - } - } - return baseLoader(cidToLoad) - } -} - -// simple loader loads cids from a simple array of nodes -func simpleLoader(store []format.Node) mockGraphsyncLoader { - cidsToNodes := make(map[cid.Cid]format.Node, len(store)) - for _, node := range store { - cidsToNodes[node.Cid()] = node - } - return func(cidToLoad cid.Cid) (format.Node, error) { - node, has := cidsToNodes[cidToLoad] - if !has { - return nil, fmt.Errorf("Everything failed") - } - return node, nil - } -} diff --git a/internal/pkg/chainsync/internal/dispatcher/dispatcher.go b/internal/pkg/chainsync/internal/dispatcher/dispatcher.go deleted file mode 100644 index 88914a72ae..0000000000 --- a/internal/pkg/chainsync/internal/dispatcher/dispatcher.go +++ /dev/null @@ -1,433 +0,0 @@ -package dispatcher - -import ( - "container/heap" - "context" - "runtime/debug" - - logging "github.com/ipfs/go-log/v2" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/util/moresync" -) - -var log = logging.Logger("chainsync.dispatcher") - -// DefaultInQueueSize is the size of the channel used for receiving targets from producers. -const DefaultInQueueSize = 5 - -// DefaultWorkQueueSize is the size of the work queue -const DefaultWorkQueueSize = 20 - -// MaxEpochGap is the maximum number of epochs chainsync can fall behind -// before catching up -const MaxEpochGap = 10 - -// dispatchSyncer is the interface of the logic syncing incoming chains -type dispatchSyncer interface { - HandleNewTipSet(context.Context, *block.ChainInfo, bool) error -} - -type transitionSyncer interface { - SetStagedHead(context.Context) error -} - -// chainHeadState is the interface for determining the head of the chain -type chainHeadState interface { - GetHead() block.TipSetKey - GetTipSet(block.TipSetKey) (block.TipSet, error) -} - -// NewDispatcher creates a new syncing dispatcher with default queue sizes. -func NewDispatcher(catchupSyncer dispatchSyncer, trans Transitioner) *Dispatcher { - return NewDispatcherWithSizes(catchupSyncer, trans, DefaultWorkQueueSize, DefaultInQueueSize) -} - -// NewDispatcherWithSizes creates a new syncing dispatcher. -func NewDispatcherWithSizes(syncer dispatchSyncer, trans Transitioner, workQueueSize, inQueueSize int) *Dispatcher { - return &Dispatcher{ - workQueue: NewTargetQueue(), - workQueueSize: workQueueSize, - syncer: syncer, - transitioner: trans, - incoming: make(chan Target, inQueueSize), - control: make(chan interface{}, 1), - registeredCb: func(t Target, err error) {}, - } -} - -// cbMessage registers a user callback to be fired following every successful -// sync. -type cbMessage struct { - cb func(Target, error) -} - -// Dispatcher receives, sorts and dispatches targets to the catchupSyncer to control -// chain syncing. -// -// New targets arrive over the incoming channel. The dispatcher then puts them -// into the workQueue which sorts them by their claimed chain height. The -// dispatcher pops the highest priority target from the queue and then attempts -// to sync the target using its internal catchupSyncer. -// -// The dispatcher has a simple control channel. It reads this for external -// controls. Currently there is only one kind of control message. It registers -// a callback that the dispatcher will call after every non-erroring sync. -type Dispatcher struct { - // workQueue is a priority queue of target chain heads that should be - // synced - workQueue *TargetQueue - workQueueSize int - // incoming is the queue of incoming sync targets to the dispatcher. - incoming chan Target - // syncer is used for dispatching sync targets for chain heads to sync - // local chain state to these targets. - syncer dispatchSyncer - - // catchup is true when the syncer is in catchup mode - catchup bool - // transitioner wraps logic for transitioning between catchup and follow states. - transitioner Transitioner - - // registeredCb is a callback registered over the control channel. It - // is called after every successful sync. - registeredCb func(Target, error) - // control is a queue of control messages not yet processed. - control chan interface{} - - // syncTargetCount counts the number of successful syncs. - syncTargetCount uint64 -} - -// SendHello handles chain information from bootstrap peers. -func (d *Dispatcher) SendHello(ci *block.ChainInfo) error { - return d.enqueue(ci) -} - -// SendOwnBlock handles chain info from a node's own mining system -func (d *Dispatcher) SendOwnBlock(ci *block.ChainInfo) error { - return d.enqueue(ci) -} - -// SendGossipBlock handles chain info from new blocks sent on pubsub -func (d *Dispatcher) SendGossipBlock(ci *block.ChainInfo) error { - return d.enqueue(ci) -} - -func (d *Dispatcher) enqueue(ci *block.ChainInfo) error { - d.incoming <- Target{ChainInfo: *ci} - return nil -} - -// Start launches the business logic for the syncing subsystem. -func (d *Dispatcher) Start(syncingCtx context.Context) { - go func() { - defer func() { - log.Errorf("exiting") - if r := recover(); r != nil { - log.Errorf("panic: %v", r) - debug.PrintStack() - } - }() - - var last *Target - for { - // Handle shutdown - select { - case <-syncingCtx.Done(): - log.Infof("context done") - return - default: - } - - // Handle control signals - select { - case ctrl := <-d.control: - log.Debugf("processing control: %v", ctrl) - d.processCtrl(ctrl) - default: - } - - // Handle incoming targets - var ws []Target - if last != nil { - ws = append(ws, *last) - last = nil - } - select { - case first := <-d.incoming: - ws = append(ws, first) - ws = append(ws, d.drainIncoming()...) - log.Debugf("received %d incoming targets: %v", len(ws), ws) - default: - } - catchup, err := d.transitioner.MaybeTransitionToCatchup(d.catchup, ws) - if err != nil { - log.Errorf("state update error from reading chain head %s", err) - } else { - d.catchup = catchup - } - for i, syncTarget := range ws { - // Drop targets we don't have room for - if d.workQueue.Len() >= d.workQueueSize { - log.Infof("not enough space for %d targets on work queue", len(ws)-i) - break - } - // Sort new targets by putting on work queue. - d.workQueue.Push(syncTarget) - } - - // Check for work to do - log.Debugf("processing work queue of %d", d.workQueue.Len()) - syncTarget, popped := d.workQueue.Pop() - if popped { - log.Debugf("processing %v", syncTarget) - // Do work - err := d.syncer.HandleNewTipSet(syncingCtx, &syncTarget.ChainInfo, d.catchup) - log.Debugf("finished processing %v", syncTarget) - if err != nil { - log.Infof("failed sync of %v (catchup=%t): %s", &syncTarget.ChainInfo, d.catchup, err) - } - d.syncTargetCount++ - d.registeredCb(syncTarget, err) - follow, err := d.transitioner.MaybeTransitionToFollow(syncingCtx, d.catchup, d.workQueue.Len()) - if err != nil { - log.Errorf("state update error setting head %s", err) - } else { - d.catchup = !follow - log.Debugf("catchup state: %v", d.catchup) - } - } else { - // No work left, block until something shows up - log.Debugf("drained work queue, waiting") - select { - case extra := <-d.incoming: - log.Debugf("stopped waiting, received %v", extra) - last = &extra - } - } - } - }() -} - -func (d *Dispatcher) drainIncoming() []Target { - // drainProduced reads all values within the incoming channel buffer at time - // of calling without blocking. It reads at most incomingBufferSize. - // - // Note: this relies on a single reader of the incoming channel to - // avoid blocking. - n := len(d.incoming) - produced := make([]Target, n) - for i := 0; i < n; i++ { - produced[i] = <-d.incoming - } - return produced -} - -// RegisterCallback registers a callback on the dispatcher that -// will fire after every successful target sync. -func (d *Dispatcher) RegisterCallback(cb func(Target, error)) { - d.control <- cbMessage{cb: cb} -} - -// WaiterForTarget returns a function that will block until the dispatcher -// processes the given target and returns the error produced by that targer -func (d *Dispatcher) WaiterForTarget(waitKey block.TipSetKey) func() error { - processed := moresync.NewLatch(1) - var syncErr error - d.RegisterCallback(func(t Target, err error) { - if t.ChainInfo.Head.Equals(waitKey) { - syncErr = err - processed.Done() - } - }) - return func() error { - processed.Wait() - return syncErr - } -} -func (d *Dispatcher) processCtrl(ctrlMsg interface{}) { - // processCtrl takes a control message, determines its type, and performs the - // specified action. - // - // Using interfaces is overkill for now but is the way to make this - // extensible. (Delete this comment if we add more than one control) - switch typedMsg := ctrlMsg.(type) { - case cbMessage: - d.registeredCb = typedMsg.cb - default: - // We don't know this type, log and ignore - log.Info("dispatcher control can not handle type %T", typedMsg) - } -} - -// Target tracks a logical request of the syncing subsystem to run a -// syncing job against given inputs. -type Target struct { - block.ChainInfo -} - -// Transitioner determines whether the caller should move between catchup and -// follow states. -type Transitioner interface { - MaybeTransitionToCatchup(bool, []Target) (bool, error) - MaybeTransitionToFollow(context.Context, bool, int) (bool, error) - TransitionChannel() chan bool -} - -// GapTransitioner changes state based on the detection of gaps between the -// local head and syncing targets. -type GapTransitioner struct { - // headState is used to determine the head tipset height for switching - // measuring gaps. - headState chainHeadState - // headSetter sets the chain head to the internal staged value. - headSetter transitionSyncer - // transitionCh emits true when transitioning to catchup and false - // when transitioning to follow - transitionCh chan bool -} - -// NewGapTransitioner returns a new gap transitioner -func NewGapTransitioner(headState chainHeadState, headSetter transitionSyncer) *GapTransitioner { - return &GapTransitioner{ - headState: headState, - headSetter: headSetter, - transitionCh: make(chan bool, 0), - } -} - -// MaybeTransitionToCatchup returns true if the state is already catchup, or if -// it should transition from follow to catchup. Undefined on error. -func (gt *GapTransitioner) MaybeTransitionToCatchup(inCatchup bool, targets []Target) (bool, error) { - if inCatchup { - return true, nil - } - // current head height - head, err := gt.headState.GetTipSet(gt.headState.GetHead()) - if err != nil { - return false, err - } - headHeight, err := head.Height() - if err != nil { - return false, err - } - - // transition from follow to catchup if incoming targets have gaps - // Note: we run this check even on targets we may drop - for _, target := range targets { - if target.Height > headHeight+MaxEpochGap { - gt.transitionCh <- true - return true, nil - } - } - return false, nil -} - -// MaybeTransitionToFollow returns true if the state is already follow, or if -// it should transition from catchup to follow. Undefined on error. -func (gt *GapTransitioner) MaybeTransitionToFollow(ctx context.Context, inCatchup bool, outstandingTargets int) (bool, error) { - if !inCatchup { - return true, nil - } - - // transition from catchup to follow if the work queue is empty. - // this is safe -- all gap conditions cause syncing to enter catchup - // this is pessimistic -- gap conditions could be gone before we transition - if outstandingTargets == 0 { - gt.transitionCh <- false - // set staging to head on transition catchup --> follow - return true, gt.headSetter.SetStagedHead(ctx) - } - - return false, nil -} - -// TransitionChannel returns a channel emitting transition flags. -func (gt *GapTransitioner) TransitionChannel() chan bool { - return gt.transitionCh -} - -// TargetQueue orders dispatcher syncRequests by the underlying `targetQueue`'s -// prioritization policy. -// -// It also filters the `targetQueue` so that it always contains targets with -// unique chain heads. -// -// It wraps the `targetQueue` to prevent panics during -// normal operation. -type TargetQueue struct { - q targetQueue - targetSet map[string]struct{} -} - -// NewTargetQueue returns a new target queue. -func NewTargetQueue() *TargetQueue { - rq := make(targetQueue, 0) - heap.Init(&rq) - return &TargetQueue{ - q: rq, - targetSet: make(map[string]struct{}), - } -} - -// Push adds a sync target to the target queue. -func (tq *TargetQueue) Push(t Target) { - // If already in queue drop quickly - if _, inQ := tq.targetSet[t.ChainInfo.Head.String()]; inQ { - return - } - heap.Push(&tq.q, t) - tq.targetSet[t.ChainInfo.Head.String()] = struct{}{} - return -} - -// Pop removes and returns the highest priority syncing target. If there is -// nothing in the queue the second argument returns false -func (tq *TargetQueue) Pop() (Target, bool) { - if tq.Len() == 0 { - return Target{}, false - } - req := heap.Pop(&tq.q).(Target) - popKey := req.ChainInfo.Head.String() - delete(tq.targetSet, popKey) - return req, true -} - -// Len returns the number of targets in the queue. -func (tq *TargetQueue) Len() int { - return tq.q.Len() -} - -// targetQueue orders targets by a policy. -// -// The current simple policy is to order syncing requests by claimed chain -// height. -// -// `targetQueue` can panic so it shouldn't be used unwrapped -type targetQueue []Target - -// Heavily inspired by https://golang.org/pkg/container/heap/ -func (rq targetQueue) Len() int { return len(rq) } - -func (rq targetQueue) Less(i, j int) bool { - // We want Pop to give us the highest priority so we use greater than - return rq[i].Height > rq[j].Height -} - -func (rq targetQueue) Swap(i, j int) { - rq[i], rq[j] = rq[j], rq[i] -} - -func (rq *targetQueue) Push(x interface{}) { - syncReq := x.(Target) - *rq = append(*rq, syncReq) -} - -func (rq *targetQueue) Pop() interface{} { - old := *rq - n := len(old) - item := old[n-1] - *rq = old[0 : n-1] - return item -} diff --git a/internal/pkg/chainsync/internal/dispatcher/dispatcher_test.go b/internal/pkg/chainsync/internal/dispatcher/dispatcher_test.go deleted file mode 100644 index 2ba0b0f006..0000000000 --- a/internal/pkg/chainsync/internal/dispatcher/dispatcher_test.go +++ /dev/null @@ -1,211 +0,0 @@ -package dispatcher_test - -import ( - "context" - "strconv" - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/internal/dispatcher" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/util/moresync" -) - -type mockSyncer struct { - headsCalled []block.TipSetKey -} - -type noopTransitioner struct{} - -func (nt *noopTransitioner) MaybeTransitionToCatchup(inCatchup bool, _ []dispatcher.Target) (bool, error) { - return inCatchup, nil -} -func (nt *noopTransitioner) MaybeTransitionToFollow(_ context.Context, inCatchup bool, _ int) (bool, error) { - return !inCatchup, nil -} -func (nt *noopTransitioner) TransitionChannel() chan bool { - return nil -} - -func (fs *mockSyncer) HandleNewTipSet(_ context.Context, ci *block.ChainInfo, _ bool) error { - fs.headsCalled = append(fs.headsCalled, ci.Head) - return nil -} - -func TestDispatchStartHappy(t *testing.T) { - tf.UnitTest(t) - s := &mockSyncer{ - headsCalled: make([]block.TipSetKey, 0), - } - nt := &noopTransitioner{} - testDispatch := dispatcher.NewDispatcher(s, nt) - - cis := []*block.ChainInfo{ - // We need to put these in priority order to avoid a race. - // If we send 0 before 42, it is possible the dispatcher will - // pick up 0 and start processing before it sees 42. - chainInfoFromHeight(t, 42), - chainInfoFromHeight(t, 16), - chainInfoFromHeight(t, 3), - chainInfoFromHeight(t, 2), - chainInfoFromHeight(t, 0), - } - - testDispatch.Start(context.Background()) - - // set up a blocking channel and register to unblock after 5 synced - allDone := moresync.NewLatch(5) - testDispatch.RegisterCallback(func(t dispatcher.Target, _ error) { allDone.Done() }) - - // receive requests before Start() to test deterministic order - go func() { - for _, ci := range cis { - assert.NoError(t, testDispatch.SendHello(ci)) - } - }() - allDone.Wait() - - // check that the mockSyncer synced in order - require.Equal(t, 5, len(s.headsCalled)) - for i := range cis { - assert.Equal(t, cis[i].Head, s.headsCalled[i]) - } -} - -func TestDispatcherDropsWhenFull(t *testing.T) { - tf.UnitTest(t) - s := &mockSyncer{ - headsCalled: make([]block.TipSetKey, 0), - } - nt := &noopTransitioner{} - testWorkSize := 20 - testBufferSize := 30 - testDispatch := dispatcher.NewDispatcherWithSizes(s, nt, testWorkSize, testBufferSize) - - finished := moresync.NewLatch(1) - testDispatch.RegisterCallback(func(target dispatcher.Target, _ error) { - // Fail if the work that should be dropped gets processed - assert.False(t, target.Height == 100) - assert.False(t, target.Height == 101) - assert.False(t, target.Height == 102) - if target.Height == 0 { - // 0 has lowest priority of non-dropped - finished.Done() - } - }) - for j := 0; j < testWorkSize; j++ { - ci := chainInfoFromHeight(t, j) - assert.NoError(t, testDispatch.SendHello(ci)) - } - // Should be dropped - assert.NoError(t, testDispatch.SendHello(chainInfoFromHeight(t, 100))) - assert.NoError(t, testDispatch.SendHello(chainInfoFromHeight(t, 101))) - assert.NoError(t, testDispatch.SendHello(chainInfoFromHeight(t, 102))) - - testDispatch.Start(context.Background()) - - finished.Wait() -} - -func TestQueueHappy(t *testing.T) { - tf.UnitTest(t) - testQ := dispatcher.NewTargetQueue() - - // Add syncRequests out of order - sR0 := dispatcher.Target{ChainInfo: *(chainInfoFromHeight(t, 0))} - sR1 := dispatcher.Target{ChainInfo: *(chainInfoFromHeight(t, 1))} - sR2 := dispatcher.Target{ChainInfo: *(chainInfoFromHeight(t, 2))} - sR47 := dispatcher.Target{ChainInfo: *(chainInfoFromHeight(t, 47))} - - testQ.Push(sR2) - testQ.Push(sR47) - testQ.Push(sR0) - testQ.Push(sR1) - - assert.Equal(t, 4, testQ.Len()) - - // Pop in order - out0 := requirePop(t, testQ) - out1 := requirePop(t, testQ) - out2 := requirePop(t, testQ) - out3 := requirePop(t, testQ) - - assert.Equal(t, abi.ChainEpoch(47), out0.ChainInfo.Height) - assert.Equal(t, abi.ChainEpoch(2), out1.ChainInfo.Height) - assert.Equal(t, abi.ChainEpoch(1), out2.ChainInfo.Height) - assert.Equal(t, abi.ChainEpoch(0), out3.ChainInfo.Height) - - assert.Equal(t, 0, testQ.Len()) -} - -func TestQueueDuplicates(t *testing.T) { - tf.UnitTest(t) - testQ := dispatcher.NewTargetQueue() - - // Add syncRequests with same height - sR0 := dispatcher.Target{ChainInfo: *(chainInfoFromHeight(t, 0))} - sR0dup := dispatcher.Target{ChainInfo: *(chainInfoFromHeight(t, 0))} - - testQ.Push(sR0) - testQ.Push(sR0dup) - - // Only one of these makes it onto the queue - assert.Equal(t, 1, testQ.Len()) - - // Pop - first := requirePop(t, testQ) - assert.Equal(t, abi.ChainEpoch(0), first.ChainInfo.Height) - - // Now if we push the duplicate it goes back on - testQ.Push(sR0dup) - assert.Equal(t, 1, testQ.Len()) - - second := requirePop(t, testQ) - assert.Equal(t, abi.ChainEpoch(0), second.ChainInfo.Height) -} - -func TestQueueEmptyPopErrors(t *testing.T) { - tf.UnitTest(t) - testQ := dispatcher.NewTargetQueue() - sR0 := dispatcher.Target{ChainInfo: *(chainInfoFromHeight(t, 0))} - sR47 := dispatcher.Target{ChainInfo: *(chainInfoFromHeight(t, 47))} - - // Push 2 - testQ.Push(sR47) - testQ.Push(sR0) - - // Pop 3 - assert.Equal(t, 2, testQ.Len()) - _ = requirePop(t, testQ) - assert.Equal(t, 1, testQ.Len()) - _ = requirePop(t, testQ) - assert.Equal(t, 0, testQ.Len()) - - _, popped := testQ.Pop() - assert.False(t, popped) - -} - -// requirePop is a helper requiring that pop does not error -func requirePop(t *testing.T, q *dispatcher.TargetQueue) dispatcher.Target { - req, popped := q.Pop() - require.True(t, popped) - return req -} - -// chainInfoFromHeight is a helper that constructs a unique chain info off of -// an int. The tipset key is a faked cid from the string of that integer and -// the height is that integer. -func chainInfoFromHeight(t *testing.T, h int) *block.ChainInfo { - hStr := strconv.Itoa(h) - c := types.CidFromString(t, hStr) - return &block.ChainInfo{ - Head: block.NewTipSetKey(c), - Height: abi.ChainEpoch(h), - } -} diff --git a/internal/pkg/chainsync/internal/syncer/syncer.go b/internal/pkg/chainsync/internal/syncer/syncer.go deleted file mode 100644 index b917206080..0000000000 --- a/internal/pkg/chainsync/internal/syncer/syncer.go +++ /dev/null @@ -1,618 +0,0 @@ -package syncer - -import ( - "context" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - "github.com/ipfs/go-cid" - logging "github.com/ipfs/go-log/v2" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/pkg/errors" - "go.opencensus.io/trace" - - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/status" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics/tracing" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -// Syncer updates its chain.Store according to the methods of its -// consensus.Protocol. It uses a bad tipset cache and a limit on new -// blocks to traverse during chain collection. The Syncer can query the -// network for blocks. The Syncer maintains the following invariant on -// its store: all tipsets that pass the syncer's validity checks are added to the -// chain store along with their state root CID. -// -// Ideally the code that syncs the chain according to consensus rules should -// be independent of any particular implementation of consensus. Currently the -// Syncer is coupled to details of Expected Consensus. This dependence -// exists in the widen function, the fact that widen is called on only one -// tipset in the incoming chain, and assumptions regarding the existence of -// grandparent state in the store. -type Syncer struct { - // fetcher is the networked block fetching service for fetching blocks - // and messages. - fetcher Fetcher - // BadTipSetCache is used to filter out collections of invalid blocks. - badTipSets *BadTipSetCache - - // Evaluates tipset messages and stores the resulting states. - fullValidator FullBlockValidator - // Validates headers and message structure - blockValidator BlockValidator - // Selects the heaviest of two chains - chainSelector ChainSelector - // Provides and stores validated tipsets and their state roots. - chainStore ChainReaderWriter - // Provides message collections given cids - messageProvider messageStore - - clock clock.Clock - // staged is the heaviest tipset seen by the syncer so far - staged block.TipSet - - // faultDetector is used to manage information about potential consensus faults - faultDetector - - // Reporter is used by the syncer to update the current status of the chain. - reporter status.Reporter -} - -// Fetcher defines an interface that may be used to fetch data from the network. -type Fetcher interface { - // FetchTipSets will only fetch TipSets that evaluate to `false` when passed to `done`, - // this includes the provided `ts`. The TipSet that evaluates to true when - // passed to `done` will be in the returned slice. The returns slice of TipSets is in Traversal order. - FetchTipSets(context.Context, block.TipSetKey, peer.ID, func(block.TipSet) (bool, error)) ([]block.TipSet, error) - - // FetchTipSetHeaders will fetch only the headers of tipset blocks. - // Returned slice in reversal order - FetchTipSetHeaders(context.Context, block.TipSetKey, peer.ID, func(block.TipSet) (bool, error)) ([]block.TipSet, error) -} - -// ChainReaderWriter reads and writes the chain store. -type ChainReaderWriter interface { - GetHead() block.TipSetKey - GetTipSet(tsKey block.TipSetKey) (block.TipSet, error) - GetTipSetStateRoot(tsKey block.TipSetKey) (cid.Cid, error) - GetTipSetReceiptsRoot(tsKey block.TipSetKey) (cid.Cid, error) - HasTipSetAndState(ctx context.Context, tsKey block.TipSetKey) bool - PutTipSetMetadata(ctx context.Context, tsas *chain.TipSetMetadata) error - SetHead(ctx context.Context, ts block.TipSet) error - HasTipSetAndStatesWithParentsAndHeight(pTsKey block.TipSetKey, h abi.ChainEpoch) bool - GetTipSetAndStatesByParentsAndHeight(pTsKey block.TipSetKey, h abi.ChainEpoch) ([]*chain.TipSetMetadata, error) -} - -type messageStore interface { - LoadMessages(context.Context, cid.Cid) ([]*types.SignedMessage, []*types.UnsignedMessage, error) - LoadReceipts(context.Context, cid.Cid) ([]vm.MessageReceipt, error) - StoreReceipts(context.Context, []vm.MessageReceipt) (cid.Cid, error) -} - -// ChainSelector chooses the heaviest between chains. -type ChainSelector interface { - // IsHeavier returns true if tipset a is heavier than tipset b and false if - // tipset b is heavier than tipset a. - IsHeavier(ctx context.Context, a, b block.TipSet, aStateID, bStateID cid.Cid) (bool, error) - // Weight returns the weight of a tipset after the upgrade to version 1 - Weight(ctx context.Context, ts block.TipSet, stRoot cid.Cid) (fbig.Int, error) -} - -// BlockValidator does semanitc validation on headers -type BlockValidator interface { - // ValidateHeaderSemantic validates conditions on a block header that can be - // checked with the parent header but not parent state. - ValidateHeaderSemantic(ctx context.Context, header *block.Block, parents block.TipSet) error - // ValidateMessagesSemantic validates a block's messages against parent state without applying the messages - ValidateMessagesSemantic(ctx context.Context, child *block.Block, parents block.TipSetKey) error -} - -// FullBlockValidator does semantic validation on fullblocks. -type FullBlockValidator interface { - // RunStateTransition returns the state root CID resulting from applying the input ts to the - // prior `stateRoot`. It returns an error if the transition is invalid. - RunStateTransition(ctx context.Context, ts block.TipSet, blsMessages [][]*types.UnsignedMessage, secpMessages [][]*types.SignedMessage, parentWeight fbig.Int, stateID cid.Cid, receiptRoot cid.Cid) (cid.Cid, []vm.MessageReceipt, error) -} - -// faultDetector tracks data for detecting consensus faults and emits faults -// upon detection. -type faultDetector interface { - CheckBlock(b *block.Block, p block.TipSet) error -} - -var reorgCnt *metrics.Int64Counter - -func init() { - reorgCnt = metrics.NewInt64Counter("chain/reorg_count", "The number of reorgs that have occurred.") -} - -var ( - // ErrChainHasBadTipSet is returned when the syncer traverses a chain with a cached bad tipset. - ErrChainHasBadTipSet = errors.New("input chain contains a cached bad tipset") - // ErrNewChainTooLong is returned when processing a fork that split off from the main chain too many blocks ago. - ErrNewChainTooLong = errors.New("input chain forked from best chain past finality limit") - // ErrUnexpectedStoreState indicates that the syncer's chain store is violating expected invariants. - ErrUnexpectedStoreState = errors.New("the chain store is in an unexpected state") -) - -var syncOneTimer *metrics.Float64Timer - -func init() { - syncOneTimer = metrics.NewTimerMs("syncer/sync_one", "Duration of single tipset validation in milliseconds") -} - -var logSyncer = logging.Logger("chainsync.syncer") - -// NewSyncer constructs a Syncer ready for use. The chain reader must have a -// head tipset to initialize the staging field. -func NewSyncer(fv FullBlockValidator, hv BlockValidator, cs ChainSelector, s ChainReaderWriter, m messageStore, f Fetcher, sr status.Reporter, c clock.Clock, fd faultDetector) (*Syncer, error) { - return &Syncer{ - fetcher: f, - badTipSets: &BadTipSetCache{ - bad: make(map[string]struct{}), - }, - fullValidator: fv, - blockValidator: hv, - chainSelector: cs, - chainStore: s, - messageProvider: m, - clock: c, - faultDetector: fd, - reporter: sr, - }, nil -} - -// InitStaged reads the head from the syncer's chain store and sets the syncer's -// staged field. Used for initializing syncer. -func (syncer *Syncer) InitStaged() error { - staged, err := syncer.chainStore.GetTipSet(syncer.chainStore.GetHead()) - if err != nil { - return err - } - syncer.staged = staged - return nil -} - -// SetStagedHead sets the syncer's internal staged tipset to the chain's head. -func (syncer *Syncer) SetStagedHead(ctx context.Context) error { - return syncer.chainStore.SetHead(ctx, syncer.staged) -} - -// fetchAndValidateHeaders fetches headers and runs semantic block validation -// on the chain of fetched headers -func (syncer *Syncer) fetchAndValidateHeaders(ctx context.Context, ci *block.ChainInfo) ([]block.TipSet, error) { - head, err := syncer.chainStore.GetTipSet(syncer.chainStore.GetHead()) - if err != nil { - return nil, err - } - headHeight, err := head.Height() - if err != nil { - return nil, err - } - headers, err := syncer.fetcher.FetchTipSetHeaders(ctx, ci.Head, ci.Sender, func(t block.TipSet) (bool, error) { - h, err := t.Height() - if err != nil { - return true, err - } - if h+miner.ChainFinalityish < headHeight { - return true, ErrNewChainTooLong - } - - parents, err := t.Parents() - if err != nil { - return true, err - } - return syncer.chainStore.HasTipSetAndState(ctx, parents), nil - }) - if err != nil { - return nil, err - } - // Fetcher returns chain in Traversal order, reverse it to height order - chain.Reverse(headers) - - parent, _, err := syncer.ancestorsFromStore(headers[0]) - if err != nil { - return nil, err - } - for i, ts := range headers { - for i := 0; i < ts.Len(); i++ { - err = syncer.blockValidator.ValidateHeaderSemantic(ctx, ts.At(i), parent) - if err != nil { - return nil, err - } - } - parent = headers[i] - } - return headers, nil -} - -// syncOne syncs a single tipset with the chain store. syncOne calculates the -// parent state of the tipset and calls into consensus to run a state transition -// in order to validate the tipset. In the case the input tipset is valid, -// syncOne calls into consensus to check its weight, and then updates the head -// of the store if this tipset is the heaviest. -// -// Precondition: the caller of syncOne must hold the syncer's lock (syncer.mu) to -// ensure head is not modified by another goroutine during run. -func (syncer *Syncer) syncOne(ctx context.Context, grandParent, parent, next block.TipSet) error { - priorHeadKey := syncer.chainStore.GetHead() - - // if tipset is already priorHeadKey, we've been here before. do nothing. - if priorHeadKey.Equals(next.Key()) { - return nil - } - - stopwatch := syncOneTimer.Start(ctx) - defer stopwatch.Stop(ctx) - - // Lookup parent state and receipt root. It is guaranteed by the syncer that it is in the chainStore. - stateRoot, err := syncer.chainStore.GetTipSetStateRoot(parent.Key()) - if err != nil { - return err - } - - // Gather tipset messages - var nextSecpMessages [][]*types.SignedMessage - var nextBlsMessages [][]*types.UnsignedMessage - for i := 0; i < next.Len(); i++ { - blk := next.At(i) - secpMsgs, blsMsgs, err := syncer.messageProvider.LoadMessages(ctx, blk.Messages.Cid) - if err != nil { - return errors.Wrapf(err, "syncing tip %s failed loading message list %s for block %s", next.Key(), blk.Messages, blk.Cid()) - } - - nextBlsMessages = append(nextBlsMessages, blsMsgs) - nextSecpMessages = append(nextSecpMessages, secpMsgs) - } - - // Gather validated parent weight - parentWeight, err := syncer.calculateParentWeight(ctx, parent, grandParent) - if err != nil { - return err - } - - parentReceiptRoot, err := syncer.chainStore.GetTipSetReceiptsRoot(parent.Key()) - if err != nil { - return err - } - - // Run a state transition to validate the tipset and compute - // a new state to add to the store. - root, receipts, err := syncer.fullValidator.RunStateTransition(ctx, next, nextBlsMessages, nextSecpMessages, parentWeight, stateRoot, parentReceiptRoot) - if err != nil { - return err - } - - // Now that the tipset is validated preconditions are satisfied to check - // consensus faults - for i := 0; i < next.Len(); i++ { - err := syncer.faultDetector.CheckBlock(next.At(i), parent) - if err != nil { - return err - } - } - - receiptCid, err := syncer.messageProvider.StoreReceipts(ctx, receipts) - if err != nil { - return errors.Wrapf(err, "could not store message rerceipts for tip set %s", next.String()) - } - - err = syncer.chainStore.PutTipSetMetadata(ctx, &chain.TipSetMetadata{ - TipSet: next, - TipSetStateRoot: root, - TipSetReceipts: receiptCid, - }) - if err != nil { - return err - } - logSyncer.Debugf("Successfully updated store with %s", next.String()) - return nil -} - -// TODO #3537 this should be stored the first time it is computed and retrieved -// from disk just like aggregate state roots. -func (syncer *Syncer) calculateParentWeight(ctx context.Context, parent, grandParent block.TipSet) (fbig.Int, error) { - var baseStRoot cid.Cid - var err error - if grandParent.Equals(block.UndefTipSet) { - // use genesis state as parent of genesis block - baseStRoot, err = syncer.chainStore.GetTipSetStateRoot(parent.Key()) - } else { - baseStRoot, err = syncer.chainStore.GetTipSetStateRoot(grandParent.Key()) - } - if err != nil { - return fbig.Zero(), err - } - return syncer.chainSelector.Weight(ctx, parent, baseStRoot) -} - -// ancestorsFromStore returns the parent and grandparent tipsets of `ts` -func (syncer *Syncer) ancestorsFromStore(ts block.TipSet) (block.TipSet, block.TipSet, error) { - parentCids, err := ts.Parents() - if err != nil { - return block.UndefTipSet, block.UndefTipSet, err - } - parent, err := syncer.chainStore.GetTipSet(parentCids) - if err != nil { - return block.UndefTipSet, block.UndefTipSet, err - } - grandParentCids, err := parent.Parents() - if err != nil { - return block.UndefTipSet, block.UndefTipSet, err - } - if grandParentCids.Empty() { - // parent == genesis ==> grandParent undef - return parent, block.UndefTipSet, nil - } - grandParent, err := syncer.chainStore.GetTipSet(grandParentCids) - if err != nil { - return block.UndefTipSet, block.UndefTipSet, err - } - return parent, grandParent, nil -} - -func (syncer *Syncer) logReorg(ctx context.Context, curHead, newHead block.TipSet) { - curHeadIter := chain.IterAncestors(ctx, syncer.chainStore, curHead) - newHeadIter := chain.IterAncestors(ctx, syncer.chainStore, newHead) - commonAncestor, err := chain.FindCommonAncestor(curHeadIter, newHeadIter) - if err != nil { - // Should never get here because reorgs should always have a - // common ancestor.. - logSyncer.Warnf("unexpected error when running FindCommonAncestor for reorg log: %s", err.Error()) - return - } - - reorg := chain.IsReorg(curHead, newHead, commonAncestor) - if reorg { - reorgCnt.Inc(ctx, 1) - dropped, added, err := chain.ReorgDiff(curHead, newHead, commonAncestor) - if err == nil { - logSyncer.With( - "currentHead", curHead, - "newHead", newHead, - ).Infof("reorg dropping %d height and adding %d", dropped, added) - } else { - logSyncer.With( - "currentHead", curHead, - "newHead", newHead, - ).Infof("reorg") - logSyncer.Errorw("unexpected error from ReorgDiff during log", "error", err) - } - } -} - -// widen computes a tipset implied by the input tipset and the store that -// could potentially be the heaviest tipset. In the context of EC, widen -// returns the union of the input tipset and the biggest tipset with the same -// parents from the store. -// TODO: this leaks EC abstractions into the syncer, we should think about this. -func (syncer *Syncer) widen(ctx context.Context, ts block.TipSet) (block.TipSet, error) { - // Lookup tipsets with the same parents from the store. - parentSet, err := ts.Parents() - if err != nil { - return block.UndefTipSet, err - } - height, err := ts.Height() - if err != nil { - return block.UndefTipSet, err - } - if !syncer.chainStore.HasTipSetAndStatesWithParentsAndHeight(parentSet, height) { - return block.UndefTipSet, nil - } - candidates, err := syncer.chainStore.GetTipSetAndStatesByParentsAndHeight(parentSet, height) - if err != nil { - return block.UndefTipSet, err - } - if len(candidates) == 0 { - return block.UndefTipSet, nil - } - - // Only take the tipset with the most blocks (this is EC specific logic) - max := candidates[0].TipSet - for _, candidate := range candidates[0:] { - if candidate.TipSet.Len() > max.Len() { - max = candidate.TipSet - } - } - - // Form a new tipset from the union of ts and the largest in the store, de-duped. - var blockSlice []*block.Block - blockCids := make(map[cid.Cid]struct{}) - for i := 0; i < ts.Len(); i++ { - blk := ts.At(i) - blockCids[blk.Cid()] = struct{}{} - blockSlice = append(blockSlice, blk) - } - for i := 0; i < max.Len(); i++ { - blk := max.At(i) - if _, found := blockCids[blk.Cid()]; !found { - blockSlice = append(blockSlice, blk) - blockCids[blk.Cid()] = struct{}{} - } - } - wts, err := block.NewTipSet(blockSlice...) - if err != nil { - return block.UndefTipSet, err - } - - // check that the tipset is distinct from the input and tipsets from the store. - if wts.String() == ts.String() || wts.String() == max.String() { - return block.UndefTipSet, nil - } - - return wts, nil -} - -// HandleNewTipSet validates and syncs the chain rooted at the provided tipset -// to a chain store. Iff catchup is false then the syncer will set the head. -func (syncer *Syncer) HandleNewTipSet(ctx context.Context, ci *block.ChainInfo, catchup bool) error { - err := syncer.handleNewTipSet(ctx, ci) - if err != nil { - return err - } - if catchup { - return nil - } - return syncer.SetStagedHead(ctx) -} - -func (syncer *Syncer) handleNewTipSet(ctx context.Context, ci *block.ChainInfo) (err error) { - // handleNewTipSet extends the Syncer's chain store with the given tipset if - // the chain is a valid extension. It stages new heaviest tipsets for later - // setting the chain head - logSyncer.Debugf("Begin fetch and sync of chain with head %v", ci.Head) - ctx, span := trace.StartSpan(ctx, "Syncer.HandleNewTipSet") - span.AddAttributes(trace.StringAttribute("tipset", ci.Head.String())) - defer tracing.AddErrorEndSpan(ctx, span, &err) - - // If the store already has this tipset then the syncer is finished. - if syncer.chainStore.HasTipSetAndState(ctx, ci.Head) { - return nil - } - - syncer.reporter.UpdateStatus(status.SyncingStarted(syncer.clock.Now().Unix()), status.SyncHead(ci.Head), status.SyncHeight(ci.Height), status.SyncComplete(false)) - defer syncer.reporter.UpdateStatus(status.SyncComplete(true)) - syncer.reporter.UpdateStatus(status.SyncFetchComplete(false)) - - tipsets, err := syncer.fetchAndValidateHeaders(ctx, ci) - if err != nil { - return errors.Wrapf(err, "failure fetching or validating headers") - } - - // Once headers check out, fetch messages - _, err = syncer.fetcher.FetchTipSets(ctx, ci.Head, ci.Sender, func(t block.TipSet) (bool, error) { - parentsKey, err := t.Parents() - if err != nil { - return true, err - } - height, err := t.Height() - if err != nil { - return false, err - } - - // validate block message structure - for i := 0; i < t.Len(); i++ { - err := syncer.blockValidator.ValidateMessagesSemantic(ctx, t.At(i), parentsKey) - if err != nil { - return false, err - } - } - - // update status with latest fetched head and height - syncer.reporter.UpdateStatus(status.FetchHead(t.Key()), status.FetchHeight(height)) - return syncer.chainStore.HasTipSetAndState(ctx, parentsKey), nil - }) - if err != nil { - return errors.Wrapf(err, "failure fetching full blocks") - } - - syncer.reporter.UpdateStatus(status.SyncFetchComplete(true)) - - parent, grandParent, err := syncer.ancestorsFromStore(tipsets[0]) - if err != nil { - return err - } - - // Try adding the tipsets of the chain to the store, checking for new - // heaviest tipsets. - for i, ts := range tipsets { - // TODO: this "i==0" leaks EC specifics into syncer abstraction - // for the sake of efficiency, consider plugging up this leak. - var wts block.TipSet - if i == 0 { - wts, err = syncer.widen(ctx, ts) - if err != nil { - return err - } - if wts.Defined() { - logSyncer.Debug("attempt to sync after widen") - err = syncer.syncOne(ctx, grandParent, parent, wts) - if err != nil { - return err - } - err = syncer.stageIfHeaviest(ctx, wts) - if err != nil { - return err - } - } - } - // If the tipsets has length greater than 1, then we need to sync each tipset - // in the chain in order to process the chain fully, including the non-widened - // first tipset. - // If the chan has length == 1, we can avoid processing the non-widened tipset - // as a performance optimization, because this tipset cannot be heavier - // than the widened first tipset. - if !wts.Defined() || len(tipsets) > 1 { - err = syncer.syncOne(ctx, grandParent, parent, ts) - if err != nil { - // While `syncOne` can indeed fail for reasons other than consensus, - // adding to the badTipSets at this point is the simplest, since we - // have access to the chain. If syncOne fails for non-consensus reasons, - // there is no assumption that the running node's data is valid at all, - // so we don't really lose anything with this simplification. - syncer.badTipSets.AddChain(tipsets[i:]) - return errors.Wrapf(err, "failed to sync tipset %s, number %d of %d in chain", ts.Key(), i, len(tipsets)) - } - } - - if i%500 == 0 { - logSyncer.Infof("processing block %d of %v for chain with head at %v", i, len(tipsets), ci.Head.String()) - } - grandParent = parent - parent = ts - } - return syncer.stageIfHeaviest(ctx, parent) -} - -func (syncer *Syncer) stageIfHeaviest(ctx context.Context, candidate block.TipSet) error { - // stageIfHeaviest sets the provided candidates to the staging head of the chain if they - // are heavier. Precondtion: candidates are validated and added to the store. - parentKey, err := candidate.Parents() - if err != nil { - return err - } - candidateParentStateID, err := syncer.chainStore.GetTipSetStateRoot(parentKey) - if err != nil { - return err - } - - stagedParentKey, err := syncer.staged.Parents() - if err != nil { - return err - } - var stagedBaseStateID cid.Cid - if stagedParentKey.Empty() { // if staged is genesis base state is genesis state - stagedBaseStateID = syncer.staged.At(0).StateRoot.Cid - } else { - stagedBaseStateID, err = syncer.chainStore.GetTipSetStateRoot(stagedParentKey) - if err != nil { - return err - } - } - - heavier, err := syncer.chainSelector.IsHeavier(ctx, candidate, syncer.staged, candidateParentStateID, stagedBaseStateID) - if err != nil { - return err - } - - // If it is the heaviest update the chainStore. - if heavier { - // Gather the entire new chain for reorg comparison and logging. - syncer.logReorg(ctx, syncer.staged, candidate) - syncer.staged = candidate - } - - return nil -} - -// Status returns the current syncer status. -func (syncer *Syncer) Status() status.Status { - return syncer.reporter.Status() -} diff --git a/internal/pkg/chainsync/internal/syncer/syncer_integration_test.go b/internal/pkg/chainsync/internal/syncer/syncer_integration_test.go deleted file mode 100644 index fe8ac69e51..0000000000 --- a/internal/pkg/chainsync/internal/syncer/syncer_integration_test.go +++ /dev/null @@ -1,119 +0,0 @@ -package syncer_test - -import ( - "context" - "testing" - "time" - - "github.com/filecoin-project/go-address" - bstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/internal/syncer" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/status" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// Syncer is capable of recovering from a fork reorg after the store is loaded. -// This is a regression test to guard against the syncer assuming that the store having all -// blocks from a tipset means the syncer has computed its state. -// Such a case happens when the store has just loaded, but this tipset is not on its heaviest chain). -// See https://github.com/filecoin-project/go-filecoin/issues/1148#issuecomment-432008060 -func TestLoadFork(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - // Set up in the standard way, but retain references to the repo and cbor stores. - builder := chain.NewBuilder(t, address.Undef) - genesis := builder.NewGenesis() - genStateRoot, err := builder.GetTipSetStateRoot(genesis.Key()) - require.NoError(t, err) - - repo := repo.NewInMemoryRepo() - bs := bstore.NewBlockstore(repo.Datastore()) - cborStore := cborutil.NewIpldStore(bs) - store := chain.NewStore(repo.ChainDatastore(), cborStore, chain.NewStatusReporter(), genesis.At(0).Cid()) - require.NoError(t, store.PutTipSetMetadata(ctx, &chain.TipSetMetadata{TipSetStateRoot: genStateRoot, TipSet: genesis, TipSetReceipts: types.EmptyReceiptsCID})) - require.NoError(t, store.SetHead(ctx, genesis)) - - // Note: the chain builder is passed as the fetcher, from which blocks may be requested, but - // *not* as the store, to which the syncer must ensure to put blocks. - eval := &chain.FakeStateEvaluator{} - sel := &chain.FakeChainSelector{} - s, err := syncer.NewSyncer(eval, eval, sel, store, builder, builder, status.NewReporter(), clock.NewFake(time.Unix(1234567890, 0)), &noopFaultDetector{}) - require.NoError(t, err) - require.NoError(t, s.InitStaged()) - - base := builder.AppendManyOn(3, genesis) - left := builder.AppendManyOn(4, base) - right := builder.AppendManyOn(3, base) - - // Sync the two branches, which stores all blocks in the underlying stores. - assert.NoError(t, s.HandleNewTipSet(ctx, block.NewChainInfo("", "", left.Key(), heightFromTip(t, left)), false)) - assert.NoError(t, s.HandleNewTipSet(ctx, block.NewChainInfo("", "", right.Key(), heightFromTip(t, right)), false)) - verifyHead(t, store, left) - - // The syncer/store assume that the fetcher populates the underlying block store such that - // tipsets can be reconstructed. The chain builder used for testing doesn't do that, so do - // it manually here. - for _, tip := range []block.TipSet{left, right} { - for itr := chain.IterAncestors(ctx, builder, tip); !itr.Complete(); require.NoError(t, itr.Next()) { - for _, block := range itr.Value().ToSlice() { - _, err := cborStore.Put(ctx, block) - require.NoError(t, err) - } - } - } - - // Load a new chain store on the underlying data. It will only compute state for the - // left (heavy) branch. It has a fetcher that can't provide blocks. - newStore := chain.NewStore(repo.ChainDatastore(), cborStore, chain.NewStatusReporter(), genesis.At(0).Cid()) - require.NoError(t, newStore.Load(ctx)) - fakeFetcher := th.NewTestFetcher() - offlineSyncer, err := syncer.NewSyncer(eval, eval, sel, newStore, builder, fakeFetcher, status.NewReporter(), clock.NewFake(time.Unix(1234567890, 0)), &noopFaultDetector{}) - require.NoError(t, err) - require.NoError(t, offlineSyncer.InitStaged()) - - assert.True(t, newStore.HasTipSetAndState(ctx, left.Key())) - assert.False(t, newStore.HasTipSetAndState(ctx, right.Key())) - - // The newRight head extends right. The store already has the individual blocks up to the point - // `right`, but has not computed their state (because it's not the heavy branch). - // Obtuse code organisation means that the syncer will - // attempt to fetch `newRight` *and `right`* blocks from the network in the process of computing - // the state sequence for them all. Yes, this is a bit silly - the `right` blocks are already local. - // The test is guarding against a prior incorrect behaviour where the syncer would not attempt to - // fetch the `right` blocks (because it already has them) but *also* would not compute their state. - // We detect this by making the final `newRight` blocks fetchable, but not the `right` blocks, and - // expect the syncer to fail due to that failed fetch. - // This test would fail to work if the syncer could inspect the store directly to avoid requesting - // blocks already local, but also correctly recomputed the state. - - // Note that since the blocks are in the store, and a real fetcher will consult the store before - // trying the network, this won't actually cause a network request. But it's really hard to follow. - newRight := builder.AppendManyOn(1, right) - fakeFetcher.AddSourceBlocks(newRight.ToSlice()...) - - // Test that the syncer can't sync a block chained from on the right (originally shorter) chain - // without getting old blocks from network. i.e. the store index has been trimmed - // of non-heaviest chain blocks. - - err = offlineSyncer.HandleNewTipSet(ctx, block.NewChainInfo("", "", newRight.Key(), heightFromTip(t, newRight)), false) - assert.Error(t, err) - - // The left chain is ok without any fetching though. - assert.NoError(t, offlineSyncer.HandleNewTipSet(ctx, block.NewChainInfo("", "", left.Key(), heightFromTip(t, left)), false)) -} - -type noopFaultDetector struct{} - -func (fd *noopFaultDetector) CheckBlock(_ *block.Block, _ block.TipSet) error { - return nil -} diff --git a/internal/pkg/chainsync/internal/syncer/syncer_test.go b/internal/pkg/chainsync/internal/syncer/syncer_test.go deleted file mode 100644 index e66e9aef9a..0000000000 --- a/internal/pkg/chainsync/internal/syncer/syncer_test.go +++ /dev/null @@ -1,621 +0,0 @@ -package syncer_test - -import ( - "context" - "testing" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - "github.com/ipfs/go-cid" - bstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/pkg/errors" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/internal/syncer" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/status" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -func heightFromTip(t *testing.T, tip block.TipSet) abi.ChainEpoch { - h, err := tip.Height() - if err != nil { - t.Fatal(err) - } - return h -} - -func TestOneBlock(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - t1 := builder.AppendOn(genesis, 1) - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t1.Key(), heightFromTip(t, t1)), false)) - - verifyTip(t, store, t1, t1.At(0).StateRoot.Cid) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, t1) -} - -func TestMultiBlockTip(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - tip := builder.AppendOn(genesis, 2) - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", tip.Key(), heightFromTip(t, tip)), false)) - - verifyTip(t, store, tip, builder.StateForKey(tip.Key())) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, tip) -} - -func TestTipSetIncremental(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - t1 := builder.AppendOn(genesis, 1) - - t2 := builder.AppendOn(genesis, 1) - - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t1.Key(), heightFromTip(t, t1)), false)) - - verifyTip(t, store, t1, builder.StateForKey(t1.Key())) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, t1) - - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t2.Key(), heightFromTip(t, t2)), false)) - _, err := store.GetTipSet(t2.Key()) - require.Error(t, err) - - merged := block.RequireNewTipSet(t, t1.At(0), t2.At(0)) - verifyTip(t, store, merged, builder.StateForKey(merged.Key())) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, merged) -} - -func TestChainIncremental(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - t1 := builder.AppendOn(genesis, 2) - - t2 := builder.AppendOn(t1, 3) - - t3 := builder.AppendOn(t2, 1) - - t4 := builder.AppendOn(t3, 2) - - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t1.Key(), heightFromTip(t, t1)), false)) - verifyTip(t, store, t1, builder.StateForKey(t1.Key())) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, t1) - - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t2.Key(), heightFromTip(t, t2)), false)) - verifyTip(t, store, t2, builder.StateForKey(t2.Key())) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, t2) - - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t3.Key(), heightFromTip(t, t3)), false)) - verifyTip(t, store, t3, builder.StateForKey(t3.Key())) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, t3) - - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t4.Key(), heightFromTip(t, t4)), false)) - verifyTip(t, store, t4, builder.StateForKey(t4.Key())) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, t4) -} - -func TestChainJump(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - t1 := builder.AppendOn(genesis, 2) - t2 := builder.AppendOn(t1, 3) - t3 := builder.AppendOn(t2, 1) - t4 := builder.AppendOn(t3, 2) - - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t4.Key(), heightFromTip(t, t4)), false)) - verifyTip(t, store, t1, builder.StateForKey(t1.Key())) - verifyTip(t, store, t2, builder.StateForKey(t2.Key())) - verifyTip(t, store, t3, builder.StateForKey(t3.Key())) - verifyTip(t, store, t4, builder.StateForKey(t4.Key())) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, t4) -} - -func TestIgnoreLightFork(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - forkbase := builder.AppendOn(genesis, 1) - forkHead := builder.AppendOn(forkbase, 1) - - t1 := builder.AppendOn(forkbase, 1) - t2 := builder.AppendOn(t1, 1) - t3 := builder.AppendOn(t2, 1) - t4 := builder.AppendOn(t3, 1) - - // Sync heaviest branch first. - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t4.Key(), heightFromTip(t, t4)), false)) - verifyTip(t, store, t4, builder.StateForKey(t4.Key())) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, t4) - - // Lighter fork is processed but not change head. - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", forkHead.Key(), heightFromTip(t, forkHead)), false)) - _, err := store.GetTipSet(forkHead.Key()) - require.Error(t, err) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, t4) -} - -func TestAcceptHeavierFork(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - forkbase := builder.AppendOn(genesis, 1) - - main1 := builder.AppendOn(forkbase, 1) - main2 := builder.AppendOn(main1, 1) - main3 := builder.AppendOn(main2, 1) - main4 := builder.AppendOn(main3, 1) - - // Fork is heavier with more blocks, despite shorter (with default fake weighing function - // from FakeStateEvaluator). - fork1 := builder.AppendOn(forkbase, 3) - fork2 := builder.AppendOn(fork1, 1) - fork3 := builder.AppendOn(fork2, 1) - - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", main4.Key(), heightFromTip(t, main4)), false)) - verifyTip(t, store, main4, builder.StateForKey(main4.Key())) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, main4) - - // Heavier fork updates head3 - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", fork3.Key(), heightFromTip(t, fork3)), false)) - verifyTip(t, store, fork1, builder.StateForKey(fork1.Key())) - verifyTip(t, store, fork2, builder.StateForKey(fork2.Key())) - verifyTip(t, store, fork3, builder.StateForKey(fork3.Key())) - require.NoError(t, syncer.SetStagedHead(ctx)) - verifyHead(t, store, fork3) -} - -func TestRejectFinalityFork(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, s := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - head := builder.AppendManyOn(int(miner.ChainFinalityish+2), genesis) - assert.NoError(t, s.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", head.Key(), heightFromTip(t, head)), false)) - - // Differentiate fork for a new chain. Fork has FinalityEpochs + 1 - // blocks on top of genesis so forkFinalityBase is more than FinalityEpochs - // behind head - forkFinalityBase := builder.BuildOneOn(genesis, func(bb *chain.BlockBuilder) { - bb.SetTicket([]byte{0xbe}) - }) - forkFinalityHead := builder.AppendManyOn(int(miner.ChainFinalityish), forkFinalityBase) - assert.Error(t, s.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", forkFinalityHead.Key(), heightFromTip(t, forkFinalityHead)), false)) -} - -func TestNoUncessesaryFetch(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, s := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - head := builder.AppendManyOn(4, genesis) - assert.NoError(t, s.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", head.Key(), heightFromTip(t, head)), false)) - - // A new syncer unable to fetch blocks from the network can handle a tipset that's already - // in the store and linked to genesis. - emptyFetcher := chain.NewBuilder(t, address.Undef) - newSyncer, err := syncer.NewSyncer(&chain.FakeStateEvaluator{}, &chain.FakeStateEvaluator{}, &chain.FakeChainSelector{}, store, builder, emptyFetcher, status.NewReporter(), clock.NewFake(time.Unix(1234567890, 0)), &noopFaultDetector{}) - require.NoError(t, err) - require.NoError(t, newSyncer.InitStaged()) - assert.NoError(t, newSyncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", head.Key(), heightFromTip(t, head)), false)) -} - -// Syncer must track state of subsets of parent tipsets tracked in the store -// when they are the ancestor in a chain. This is in order to maintain the -// invariant that the aggregate state of the parents of the base of a collected chain -// is kept in the store. This invariant allows chains built on subsets of -// tracked tipsets to be handled correctly. -// This test tests that the syncer stores the state of such a base tipset of a collected chain, -// i.e. a subset of an existing tipset in the store. -// -// Ex: {A1, A2} -> {B1, B2, B3} in store to start -// {B1, B2} -> {C1, C2} chain 1 input to syncer -// C1 -> D1 chain 2 input to syncer -// -// The last operation will fail if the state of subset {B1, B2} is not -// kept in the store because syncing C1 requires retrieving parent state. -func TestSubsetParent(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, s := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - // Set up chain with {A1, A2} -> {B1, B2, B3} - tipA1A2 := builder.AppendOn(genesis, 2) - tipB1B2B3 := builder.AppendOn(tipA1A2, 3) - require.NoError(t, s.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", tipB1B2B3.Key(), heightFromTip(t, tipB1B2B3)), false)) - - // Sync one tipset with a parent equal to a subset of an existing - // tipset in the store: {B1, B2} -> {C1, C2} - tipB1B2 := block.RequireNewTipSet(t, tipB1B2B3.At(0), tipB1B2B3.At(1)) - tipC1C2 := builder.AppendOn(tipB1B2, 2) - - assert.NoError(t, s.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", tipC1C2.Key(), heightFromTip(t, tipC1C2)), false)) - - // Sync another tipset with a parent equal to a subset of the tipset - // just synced: C1 -> D1 - tipC1 := block.RequireNewTipSet(t, tipC1C2.At(0)) - tipD1OnC1 := builder.AppendOn(tipC1, 1) - assert.NoError(t, s.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", tipD1OnC1.Key(), heightFromTip(t, tipD1OnC1)), false)) - - // A full parent also works fine: {C1, C2} -> D1 - tipD1OnC1C2 := builder.AppendOn(tipC1C2, 1) - assert.NoError(t, s.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", tipD1OnC1C2.Key(), heightFromTip(t, tipD1OnC1C2)), false)) -} - -// Check that the syncer correctly adds widened chain ancestors to the store. -func TestWidenChainAncestor(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - link1 := builder.AppendOn(genesis, 2) - link2 := builder.AppendOn(link1, 3) - link3 := builder.AppendOn(link2, 1) - link4 := builder.AppendOn(link3, 2) - - // Build another block with parents link1, but not included in link2. - link2Alt := builder.AppendOn(link1, 1) - // Build a tipset containing one block from link2, plus this new sibling. - link2UnionSubset := block.RequireNewTipSet(t, link2.At(0), link2Alt.At(0)) - - // Sync the subset of link2 first - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", link2UnionSubset.Key(), heightFromTip(t, link2UnionSubset)), false)) - verifyTip(t, store, link2UnionSubset, builder.StateForKey(link2UnionSubset.Key())) - verifyHead(t, store, link2UnionSubset) - - // Sync chain with head at link4 - require.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", link4.Key(), heightFromTip(t, link4)), false)) - verifyTip(t, store, link4, builder.StateForKey(link4.Key())) - verifyHead(t, store, link4) - - // Check that the widened tipset (link2UnionSubset U link2) is tracked - link2Union := block.RequireNewTipSet(t, link2.At(0), link2.At(1), link2.At(2), link2Alt.At(0)) - verifyTip(t, store, link2Union, builder.StateForKey(link2Union.Key())) -} - -// Syncer finds a heaviest tipset by combining blocks from the ancestors of a -// chain and blocks already in the store. -// -// A guide to this test -- the point is that sometimes when merging chains the syncer -// will find a new heaviest tipset that is not the head of either chain. The syncer -// should correctly set this tipset as the head. -// -// From above we have the test-chain: -// genesis -> (link1blk1, link1blk2) -> (link2blk1, link2blk2, link2blk3) -> link3blk1 -> (link4blk1, link4blk2) -// -// Now we introduce a disjoint fork on top of link1 -// genesis -> (link1blk1, link1blk2) -> (forklink2blk1, forklink2blk2, forklink2blk3, forklink3blk4) -> forklink3blk1 -// -// When all blocks contribute equally to weight: -// So, the weight of the head of the test chain = -// W(link1) + 3 + 1 + 2 = W(link1) + 6 = 8 -// and the weight of the head of the fork chain = -// W(link1) + 4 + 1 = W(link1) + 5 = 7 -// and the weight of the union of link2 of both branches (a valid tipset) is -// W(link1) + 7 = 9 -// -// Therefore the syncer should set the head of the store to the union of the links.. -func TestHeaviestIsWidenedAncestor(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - link1 := builder.AppendOn(genesis, 2) - link2 := builder.AppendOn(link1, 3) - link3 := builder.AppendOn(link2, 1) - link4 := builder.AppendOn(link3, 2) - - forkLink2 := builder.AppendOn(link1, 4) - forkLink3 := builder.AppendOn(forkLink2, 1) - - // Sync main chain - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", link4.Key(), heightFromTip(t, link4)), false)) - - // Sync fork chain - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", forkLink3.Key(), heightFromTip(t, forkLink3)), false)) - - // Assert that widened chain is the new head - wideBlocks := link2.ToSlice() - wideBlocks = append(wideBlocks, forkLink2.ToSlice()...) - wideTs := block.RequireNewTipSet(t, wideBlocks...) - - verifyTip(t, store, wideTs, builder.ComputeState(wideTs)) - verifyHead(t, store, wideTs) -} - -func TestBlocksNotATipSetRejected(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - b1 := builder.AppendBlockOn(genesis) - b2 := builder.AppendBlockOnBlocks(b1) - - badKey := block.NewTipSetKey(b1.Cid(), b2.Cid()) - err := syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", badKey, b1.Height), false) - assert.Error(t, err) - - _, err = store.GetTipSet(badKey) - assert.Error(t, err) // Not present -} - -func TestBlockNotLinkedRejected(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - // Set up a parallel builder from which the syncer cannot fetch. - // The two builders are expected to produce exactly the same blocks from the same sequence - // of calls. - shadowBuilder := chain.NewBuilder(t, address.Undef) - gen2 := block.RequireNewTipSet(t, shadowBuilder.AppendBlockOnBlocks()) - require.True(t, genesis.Equals(gen2)) - - // The syncer fails to fetch this block so cannot sync it. - b1 := shadowBuilder.AppendOn(genesis, 1) - assert.Error(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", b1.Key(), heightFromTip(t, b1)), false)) - - // Make the same block available from the syncer's builder - builder.AppendBlockOn(genesis) - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", b1.Key(), heightFromTip(t, b1)), false)) -} - -type poisonValidator struct { - headerFailureTS uint64 - fullFailureTS uint64 -} - -func newPoisonValidator(t *testing.T, headerFailure, fullFailure uint64) *poisonValidator { - return &poisonValidator{headerFailureTS: headerFailure, fullFailureTS: fullFailure} -} - -func (pv *poisonValidator) RunStateTransition(_ context.Context, ts block.TipSet, _ [][]*types.UnsignedMessage, _ [][]*types.SignedMessage, - _ fbig.Int, _ cid.Cid, _ cid.Cid) (cid.Cid, []vm.MessageReceipt, error) { - stamp := ts.At(0).Timestamp - if pv.fullFailureTS == stamp { - return cid.Undef, nil, errors.New("run state transition fails on poison timestamp") - } - return cid.Undef, nil, nil -} - -func (pv *poisonValidator) ValidateHeaderSemantic(_ context.Context, header *block.Block, _ block.TipSet) error { - if pv.headerFailureTS == header.Timestamp { - return errors.New("val semantic fails on poison timestamp") - } - return nil -} - -// ValidateHeaderSemantic is a stub that always returns no error -func (pv *poisonValidator) ValidateMessagesSemantic(_ context.Context, _ *block.Block, _ block.TipSetKey) error { - return nil -} - -func TestSemanticallyBadTipSetFails(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - eval := newPoisonValidator(t, 98, 99) - builder, store, syncer := setupWithValidator(ctx, t, eval, eval) - genesis := builder.RequireTipSet(store.GetHead()) - - // Build a chain with messages that will fail semantic header validation - kis := types.MustGenerateKeyInfo(1, 42) - mm := vm.NewMessageMaker(t, kis) - alice := mm.Addresses()[0] - m1 := mm.NewSignedMessage(alice, 0) - m2 := mm.NewSignedMessage(alice, 1) - m3 := mm.NewSignedMessage(alice, 3) - - link1 := builder.BuildOneOn(genesis, func(bb *chain.BlockBuilder) { - bb.AddMessages( - []*types.SignedMessage{m1, m2, m3}, - []*types.UnsignedMessage{}, - ) - bb.SetTimestamp(98) // poison header val - }) - - // Set up a fresh builder without any of this data - err := syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", link1.Key(), heightFromTip(t, link1)), false) - require.Error(t, err) - assert.Contains(t, err.Error(), "val semantic fails") -} - -func TestSyncerStatus(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - // verify default status - s0 := syncer.Status() - assert.Equal(t, int64(0), s0.SyncingStarted) - assert.Equal(t, block.UndefTipSet.Key(), s0.SyncingHead) - assert.Equal(t, abi.ChainEpoch(0), s0.SyncingHeight) - assert.Equal(t, false, s0.SyncingTrusted) - assert.Equal(t, true, s0.SyncingComplete) - assert.Equal(t, true, s0.SyncingFetchComplete) - assert.Equal(t, block.UndefTipSet.Key(), s0.FetchingHead) - assert.Equal(t, abi.ChainEpoch(0), s0.FetchingHeight) - - // initial sync and status check - t1 := builder.AppendOn(genesis, 1) - require.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t1.Key(), heightFromTip(t, t1)), false)) - s1 := syncer.Status() - assert.Equal(t, t1.Key(), s1.FetchingHead) - assert.Equal(t, abi.ChainEpoch(1), s1.FetchingHeight) - - assert.Equal(t, true, s1.SyncingFetchComplete) - assert.Equal(t, true, s1.SyncingComplete) - - // advance the chain head, ensure status changes - t2 := builder.AppendOn(t1, 1) - require.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t2.Key(), heightFromTip(t, t2)), false)) - s2 := syncer.Status() - assert.Equal(t, false, s2.SyncingTrusted) - - assert.Equal(t, t2.Key(), s2.FetchingHead) - assert.Equal(t, abi.ChainEpoch(2), s2.FetchingHeight) - - assert.Equal(t, true, s2.SyncingFetchComplete) - assert.Equal(t, true, s2.SyncingComplete) - - // do not advance the chain head, ensure valid head remains constant but fetching head changes - t1 = builder.AppendOn(genesis, 1) - require.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t1.Key(), heightFromTip(t, t1)), false)) - s2 = syncer.Status() - assert.Equal(t, false, s2.SyncingTrusted) - - assert.Equal(t, t1.Key(), s2.FetchingHead) - assert.Equal(t, abi.ChainEpoch(1), s2.FetchingHeight) - - assert.Equal(t, true, s2.SyncingFetchComplete) - assert.Equal(t, true, s2.SyncingComplete) -} - -func TestStoresMessageReceipts(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - builder, store, syncer := setup(ctx, t) - genesis := builder.RequireTipSet(store.GetHead()) - - keys := types.MustGenerateKeyInfo(1, 42) - mm := vm.NewMessageMaker(t, keys) - alice := mm.Addresses()[0] - t1 := builder.Build(genesis, 4, func(b *chain.BlockBuilder, i int) { - b.AddMessages([]*types.SignedMessage{}, []*types.UnsignedMessage{mm.NewUnsignedMessage(alice, uint64(i))}) - }) - assert.NoError(t, syncer.HandleNewTipSet(ctx, block.NewChainInfo(peer.ID(""), "", t1.Key(), heightFromTip(t, t1)), false)) - - receiptsCid, err := store.GetTipSetReceiptsRoot(t1.Key()) - require.NoError(t, err) - - receipts, err := builder.LoadReceipts(ctx, receiptsCid) - require.NoError(t, err) - - assert.Len(t, receipts, 4) -} - -///// Set-up ///// - -// Initializes a chain builder, store and syncer. -// The chain builder has a single genesis block, which is set as the head of the store. -func setup(ctx context.Context, t *testing.T) (*chain.Builder, *chain.Store, *syncer.Syncer) { - eval := &chain.FakeStateEvaluator{} - return setupWithValidator(ctx, t, eval, eval) -} - -func setupWithValidator(ctx context.Context, t *testing.T, fullVal syncer.FullBlockValidator, headerVal syncer.BlockValidator) (*chain.Builder, *chain.Store, *syncer.Syncer) { - builder := chain.NewBuilder(t, address.Undef) - genesis := builder.NewGenesis() - genStateRoot, err := builder.GetTipSetStateRoot(genesis.Key()) - require.NoError(t, err) - ds := repo.NewInMemoryRepo().ChainDatastore() - bs := bstore.NewBlockstore(ds) - cst := cborutil.NewIpldStore(bs) - - store := chain.NewStore(ds, cst, chain.NewStatusReporter(), genesis.At(0).Cid()) - // Initialize chainStore store genesis state and tipset as head. - require.NoError(t, store.PutTipSetMetadata(ctx, &chain.TipSetMetadata{TipSetStateRoot: genStateRoot, TipSet: genesis, TipSetReceipts: types.EmptyReceiptsCID})) - require.NoError(t, store.SetHead(ctx, genesis)) - - // Note: the chain builder is passed as the fetcher, from which blocks may be requested, but - // *not* as the store, to which the syncer must ensure to put blocks. - sel := &chain.FakeChainSelector{} - syncer, err := syncer.NewSyncer(fullVal, headerVal, sel, store, builder, builder, status.NewReporter(), clock.NewFake(time.Unix(1234567890, 0)), &noopFaultDetector{}) - require.NoError(t, err) - require.NoError(t, syncer.InitStaged()) - - return builder, store, syncer -} - -///// Verification helpers ///// - -// Sub-interface of the store used for verification. -type syncStoreReader interface { - GetHead() block.TipSetKey - GetTipSet(block.TipSetKey) (block.TipSet, error) - GetTipSetStateRoot(tsKey block.TipSetKey) (cid.Cid, error) - GetTipSetAndStatesByParentsAndHeight(block.TipSetKey, abi.ChainEpoch) ([]*chain.TipSetMetadata, error) -} - -// Verifies that a tipset and associated state root are stored in the chain store. -func verifyTip(t *testing.T, store syncStoreReader, tip block.TipSet, stateRoot cid.Cid) { - foundTip, err := store.GetTipSet(tip.Key()) - require.NoError(t, err) - assert.Equal(t, tip, foundTip) - - foundState, err := store.GetTipSetStateRoot(tip.Key()) - require.NoError(t, err) - assert.Equal(t, stateRoot, foundState) - - parent, err := tip.Parents() - assert.NoError(t, err) - h, err := tip.Height() - assert.NoError(t, err) - childTsasSlice, err := store.GetTipSetAndStatesByParentsAndHeight(parent, h) - assert.NoError(t, err) - assert.True(t, containsTipSet(childTsasSlice, tip)) -} - -// Verifies that the store's head is as expected. -func verifyHead(t *testing.T, store syncStoreReader, head block.TipSet) { - headTipSet, err := store.GetTipSet(store.GetHead()) - require.NoError(t, err) - assert.Equal(t, head, headTipSet) -} - -func containsTipSet(tsasSlice []*chain.TipSetMetadata, ts block.TipSet) bool { - for _, tsas := range tsasSlice { - if tsas.TipSet.String() == ts.String() { //bingo - return true - } - } - return false -} diff --git a/internal/pkg/chainsync/status/status.go b/internal/pkg/chainsync/status/status.go deleted file mode 100644 index 0fac13fa9b..0000000000 --- a/internal/pkg/chainsync/status/status.go +++ /dev/null @@ -1,155 +0,0 @@ -package status - -import ( - "fmt" - "sync" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/specs-actors/actors/abi" - logging "github.com/ipfs/go-log/v2" -) - -// Reporter defines an interface to updating and reporting the status of the blockchain. -type Reporter interface { - UpdateStatus(...UpdateFn) - Status() Status -} - -// Status defines a structure used to represent the state of a chain store and syncer. -type Status struct { - // They head of the chain currently being fetched/validated, or undef if none. - SyncingHead block.TipSetKey - // The height of SyncingHead. - SyncingHeight abi.ChainEpoch - // Whether SyncingTip is trusted as a head far away from the validated head. - SyncingTrusted bool - // Unix time at which syncing of chain at SyncingHead began, zero if valdation hasn't started. - SyncingStarted int64 - // Whether SyncingHead has been validated. - SyncingComplete bool - // Whether SyncingHead has been fetched. - SyncingFetchComplete bool - - // The key of the tipset currently being fetched - FetchingHead block.TipSetKey - // The height of FetchingHead - FetchingHeight abi.ChainEpoch -} - -type reporter struct { - statusMu sync.Mutex - status *Status -} - -// UpdateFn defines a type for ipdating syncer status. -type UpdateFn func(*Status) - -var logChainStatus = logging.Logger("status") - -// NewReporter initializes a new status reporter. -func NewReporter() Reporter { - return &reporter{ - status: NewDefaultChainStatus(), - } -} - -// NewDefaultChainStatus returns a ChainStaus with the default empty values. -func NewDefaultChainStatus() *Status { - return &Status{ - SyncingHead: block.UndefTipSet.Key(), - SyncingHeight: 0, - SyncingTrusted: false, - SyncingStarted: 0, - SyncingComplete: true, - SyncingFetchComplete: true, - FetchingHead: block.UndefTipSet.Key(), - FetchingHeight: 0, - } -} - -// String returns the Status as a string -func (s Status) String() string { - return fmt.Sprintf("syncingStarted=%d, syncingHead=%s, syncingHeight=%d, syncingTrusted=%t, syncingComplete=%t syncingFetchComplete=%t fetchingHead=%s, fetchingHeight=%d", - s.SyncingStarted, - s.SyncingHead, s.SyncingHeight, s.SyncingTrusted, s.SyncingComplete, s.SyncingFetchComplete, - s.FetchingHead, s.FetchingHeight) -} - -// UpdateStatus updates the status heald by StatusReporter. -func (sr *reporter) UpdateStatus(update ...UpdateFn) { - sr.statusMu.Lock() - defer sr.statusMu.Unlock() - for _, u := range update { - u(sr.status) - } - logChainStatus.Debugf("syncing status: %s", sr.status.String()) -} - -// Status returns a copy of the current status. -func (sr *reporter) Status() Status { - return *sr.status -} - -// -// Syncing Updates -// - -// SyncHead updates the head. -func SyncHead(u block.TipSetKey) UpdateFn { - return func(s *Status) { - s.SyncingHead = u - } -} - -// SyncHeight updates the head. -func SyncHeight(u abi.ChainEpoch) UpdateFn { - return func(s *Status) { - s.SyncingHeight = u - } -} - -// SyncTrusted updates the trusted. -func SyncTrusted(u bool) UpdateFn { - return func(s *Status) { - s.SyncingTrusted = u - } -} - -// SyncingStarted marks the syncing as started. -func SyncingStarted(u int64) UpdateFn { - return func(s *Status) { - s.SyncingStarted = u - } -} - -// SyncComplete marks the fetch as complete. -func SyncComplete(u bool) UpdateFn { - return func(s *Status) { - s.SyncingComplete = u - } -} - -// SyncFetchComplete determines if the fetch is complete. -func SyncFetchComplete(u bool) UpdateFn { - return func(s *Status) { - s.SyncingFetchComplete = u - } -} - -// -// Fetching Updates -// - -// FetchHead gets the the head. -func FetchHead(u block.TipSetKey) UpdateFn { - return func(s *Status) { - s.FetchingHead = u - } -} - -// FetchHeight gets the height. -func FetchHeight(u abi.ChainEpoch) UpdateFn { - return func(s *Status) { - s.FetchingHeight = u - } -} diff --git a/internal/pkg/chainsync/status/status_test.go b/internal/pkg/chainsync/status/status_test.go deleted file mode 100644 index 151c1042ad..0000000000 --- a/internal/pkg/chainsync/status/status_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package status_test - -import ( - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chainsync/status" - "github.com/stretchr/testify/assert" - - //"github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestStatus(t *testing.T) { - tf.UnitTest(t) - - sr := status.NewReporter() - assert.Equal(t, *status.NewDefaultChainStatus(), sr.Status()) - assert.Equal(t, status.NewDefaultChainStatus().String(), sr.Status().String()) - - // single update - cidFn := types.NewCidForTestGetter() - - // multi update - t2 := block.NewTipSetKey(cidFn()) - t3 := block.NewTipSetKey(cidFn()) - expStatus := status.Status{ - SyncingHead: t2, - SyncingHeight: 456, - SyncingTrusted: true, - SyncingStarted: 123, - SyncingComplete: false, - SyncingFetchComplete: true, - FetchingHead: t3, - FetchingHeight: 789, - } - sr.UpdateStatus(status.SyncingStarted(123), status.SyncHead(t2), - status.SyncHeight(456), status.SyncTrusted(true), status.SyncComplete(false), status.SyncFetchComplete(true), - status.FetchHead(t3), status.FetchHeight(789)) - assert.Equal(t, expStatus, sr.Status()) -} diff --git a/internal/pkg/clock/chainclock_test.go b/internal/pkg/clock/chainclock_test.go deleted file mode 100644 index b8549f1fa4..0000000000 --- a/internal/pkg/clock/chainclock_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package clock_test - -import ( - "testing" - "time" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestChainEpochClock(t *testing.T) { - tf.UnitTest(t) - - now := int64(123456789) - bt := clock.DefaultEpochDuration - pd := clock.DefaultPropagationDelay - cec := clock.NewChainClock(uint64(now), bt, pd) - - epoch0Start := time.Unix(now, 0) - epoch1Start := epoch0Start.Add(bt) - - assert.Equal(t, abi.ChainEpoch(0), cec.EpochAtTime(epoch0Start)) - assert.Equal(t, abi.ChainEpoch(1), cec.EpochAtTime(epoch1Start)) - - epoch2Start := epoch1Start.Add(bt) - epoch2Middle := epoch2Start.Add(bt / time.Duration(5)) - assert.Equal(t, abi.ChainEpoch(2), cec.EpochAtTime(epoch2Start)) - assert.Equal(t, abi.ChainEpoch(2), cec.EpochAtTime(epoch2Middle)) - - epoch200Start := epoch0Start.Add(time.Duration(200) * bt) - assert.Equal(t, abi.ChainEpoch(200), cec.EpochAtTime(epoch200Start)) -} diff --git a/internal/pkg/clock/testing.go b/internal/pkg/clock/testing.go deleted file mode 100644 index fa6ada6fa8..0000000000 --- a/internal/pkg/clock/testing.go +++ /dev/null @@ -1,294 +0,0 @@ -package clock - -import ( - "sync" - "time" -) - -// Creates a new fake clock and chain clock wrapping it. -func NewFakeChain(genesis uint64, epochDuration time.Duration, propDelay time.Duration, now int64) (Fake, ChainEpochClock) { - fake := NewFake(time.Unix(now, 0)) - return fake, NewChainClockFromClock(genesis, epochDuration, propDelay, fake) -} - -// Fake provides an interface for a clock which can be manually advanced. -// Adapted from: https://github.com/jonboulle/clockwork -type Fake interface { - Clock - // Advance advances the Fake to a new point in time, ensuring any existing - // sleepers are notified appropriately before returning - Advance(d time.Duration) - // BlockUntil will block until the Fake has the given number of - // sleepers (callers of Sleep or After) - BlockUntil(n int) -} - -// Returns a Fake initialised at the given time.Time. -func NewFake(n time.Time) Fake { - return &fakeClock{ - time: n, - } -} - -type fakeClock struct { - timers []*fakeTimer - blockers []*blocker - time time.Time - - l sync.RWMutex -} - -// fakeTimer represents a waiting fakeTimer from NewTimer, Sleep, After, etc. -type fakeTimer struct { - callback func(interface{}, time.Time) - arg interface{} - - c chan time.Time - lk sync.RWMutex - done bool - until time.Time - - clock *fakeClock // needed for Reset() -} - -// blocker represents a caller of BlockUntil -type blocker struct { - count int - ch chan struct{} -} - -func (s *fakeTimer) awaken(now time.Time) { - s.lk.Lock() - if s.done { - s.lk.Unlock() - return - } - s.done = true - s.lk.Unlock() - s.callback(s.arg, now) -} - -func (s *fakeTimer) Chan() <-chan time.Time { return s.c } - -func (s *fakeTimer) Reset(d time.Duration) bool { - wasActive := s.Stop() - until := s.clock.Now().Add(d) - s.lk.Lock() - s.until = until - s.done = false - s.lk.Unlock() - s.clock.addTimer(s) - return wasActive -} - -func (s *fakeTimer) Stop() bool { - now := s.clock.Now() - s.lk.Lock() - if s.done { - s.lk.Unlock() - return false - } - s.done = true - // Expire the timer and notify blockers - s.until = now - s.lk.Unlock() - s.clock.Advance(0) - return true -} - -func (s *fakeTimer) whenToTrigger() time.Time { - s.lk.RLock() - defer s.lk.RUnlock() - return s.until -} - -func (fc *fakeClock) addTimer(s *fakeTimer) { - fc.l.Lock() - defer fc.l.Unlock() - - now := fc.time - if now.Sub(s.whenToTrigger()) >= 0 { - // special case - trigger immediately - s.awaken(now) - } else { - // otherwise, add to the set of sleepers - fc.timers = append(fc.timers, s) - // and notify any blockers - fc.blockers = notifyBlockers(fc.blockers, len(fc.timers)) - } -} - -// After mimics time.After; it waits for the given duration to elapse on the -// fakeClock, then sends the current time on the returned channel. -func (fc *fakeClock) After(d time.Duration) <-chan time.Time { - return fc.NewTimer(d).Chan() -} - -// notifyBlockers notifies all the blockers waiting until the -// given number of sleepers are waiting on the fakeClock. It -// returns an updated slice of blockers (i.e. those still waiting) -func notifyBlockers(blockers []*blocker, count int) (newBlockers []*blocker) { - for _, b := range blockers { - if b.count == count { - close(b.ch) - } else { - newBlockers = append(newBlockers, b) - } - } - return -} - -// Sleep blocks until the given duration has passed on the fakeClock -func (fc *fakeClock) Sleep(d time.Duration) { - <-fc.After(d) -} - -// Time returns the current time of the fakeClock -func (fc *fakeClock) Now() time.Time { - fc.l.RLock() - t := fc.time - fc.l.RUnlock() - return t -} - -// Since returns the duration that has passed since the given time on the fakeClock -func (fc *fakeClock) Since(t time.Time) time.Duration { - return fc.Now().Sub(t) -} - -func (fc *fakeClock) NewTicker(d time.Duration) Ticker { - ft := &fakeTicker{ - c: make(chan time.Time, 1), - stop: make(chan bool, 1), - clock: fc, - period: d, - } - go ft.tick() - return ft -} - -// NewTimer creates a new Timer that will send the current time on its channel -// after the given duration elapses on the fake clock. -func (fc *fakeClock) NewTimer(d time.Duration) Timer { - done := make(chan time.Time, 1) - sendTime := func(c interface{}, now time.Time) { - select { - case c.(chan time.Time) <- now: - default: - } - } - - s := &fakeTimer{ - clock: fc, - until: fc.Now().Add(d), - callback: sendTime, - arg: done, - c: done, - } - fc.addTimer(s) - return s -} - -// AfterFunc waits for the duration to elapse on the fake clock and then calls f -// in its own goroutine. -// It returns a Timer that can be used to cancel the call using its Stop method. -func (fc *fakeClock) AfterFunc(d time.Duration, f func()) Timer { - goFunc := func(fn interface{}, _ time.Time) { - go fn.(func())() - } - - s := &fakeTimer{ - clock: fc, - until: fc.Now().Add(d), - callback: goFunc, - arg: f, - // zero-valued c, the same as it is in the `time` pkg - } - fc.addTimer(s) - return s -} - -// Advance advances fakeClock to a new point in time, ensuring channels from any -// previous invocations of After are notified appropriately before returning -func (fc *fakeClock) Advance(d time.Duration) { - fc.l.Lock() - defer fc.l.Unlock() - - end := fc.time.Add(d) - var newSleepers []*fakeTimer - for _, s := range fc.timers { - if end.Sub(s.whenToTrigger()) >= 0 { - s.awaken(end) - } else { - newSleepers = append(newSleepers, s) - } - } - fc.timers = newSleepers - fc.blockers = notifyBlockers(fc.blockers, len(fc.timers)) - fc.time = end -} - -// BlockUntil will block until the fakeClock has the given number of sleepers -// (callers of Sleep or After) -func (fc *fakeClock) BlockUntil(n int) { - fc.l.Lock() - // Fast path: current number of sleepers is what we're looking for - if len(fc.timers) == n { - fc.l.Unlock() - return - } - // Otherwise, set up a new blocker - b := &blocker{ - count: n, - ch: make(chan struct{}), - } - fc.blockers = append(fc.blockers, b) - fc.l.Unlock() - <-b.ch -} - -type fakeTicker struct { - c chan time.Time - stop chan bool - clock Fake - period time.Duration -} - -func (ft *fakeTicker) Chan() <-chan time.Time { - return ft.c -} - -func (ft *fakeTicker) Stop() { - ft.stop <- true -} - -// tick sends the tick time to the ticker channel after every period. -// Tick events are discarded if the underlying ticker channel does -// not have enough capacity. -func (ft *fakeTicker) tick() { - tick := ft.clock.Now() - for { - tick = tick.Add(ft.period) - remaining := tick.Sub(ft.clock.Now()) - if remaining <= 0 { - // The tick should have already happened. This can happen when - // Advance() is called on the fake clock with a duration larger - // than this ticker's period. - select { - case ft.c <- tick: - default: - } - continue - } - - select { - case <-ft.stop: - return - case <-ft.clock.After(remaining): - select { - case ft.c <- tick: - default: - } - } - } -} diff --git a/internal/pkg/clock/testing_test.go b/internal/pkg/clock/testing_test.go deleted file mode 100644 index 08ad4ed9d8..0000000000 --- a/internal/pkg/clock/testing_test.go +++ /dev/null @@ -1,321 +0,0 @@ -package clock_test - -import ( - "testing" - "time" - - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -var startTime = time.Unix(123456789, 0) - -func TestFakeAfter(t *testing.T) { - tf.UnitTest(t) - fc := clock.NewFake(startTime) - - zero := fc.After(0) - select { - case <-zero: - default: - t.Errorf("zero did not return!") - } - one := fc.After(1) - two := fc.After(2) - six := fc.After(6) - ten := fc.After(10) - fc.Advance(1) - select { - case <-one: - default: - t.Errorf("one did not return!") - } - select { - case <-two: - t.Errorf("two returned prematurely!") - case <-six: - t.Errorf("six returned prematurely!") - case <-ten: - t.Errorf("ten returned prematurely!") - default: - } - fc.Advance(1) - select { - case <-two: - default: - t.Errorf("two did not return!") - } - select { - case <-six: - t.Errorf("six returned prematurely!") - case <-ten: - t.Errorf("ten returned prematurely!") - default: - } - fc.Advance(1) - select { - case <-six: - t.Errorf("six returned prematurely!") - case <-ten: - t.Errorf("ten returned prematurely!") - default: - } - fc.Advance(3) - select { - case <-six: - default: - t.Errorf("six did not return!") - } - select { - case <-ten: - t.Errorf("ten returned prematurely!") - default: - } - fc.Advance(100) - select { - case <-ten: - default: - t.Errorf("ten did not return!") - } -} - -func TestNewFakeAt(t *testing.T) { - tf.UnitTest(t) - t1 := time.Date(1999, time.February, 3, 4, 5, 6, 7, time.UTC) - fc := clock.NewFake(t1) - now := fc.Now() - assert.Equalf(t, now, t1, "Fake.Now() returned unexpected non-initialised value: want=%#v, got %#v", t1, now) -} - -func TestFakeSince(t *testing.T) { - tf.UnitTest(t) - fc := clock.NewFake(startTime) - now := fc.Now() - elapsedTime := time.Second - fc.Advance(elapsedTime) - assert.Truef(t, fc.Since(now) == elapsedTime, "Fake.Since() returned unexpected duration, got: %d, want: %d", fc.Since(now), elapsedTime) -} - -func TestFakeTimers(t *testing.T) { - tf.UnitTest(t) - fc := clock.NewFake(startTime) - - zero := fc.NewTimer(0) - - assert.False(t, zero.Stop(), "zero timer could be stopped") - select { - case <-zero.Chan(): - default: - t.Errorf("zero timer didn't emit time") - } - - one := fc.NewTimer(1) - - select { - case <-one.Chan(): - t.Errorf("non-zero timer did emit time") - default: - } - - assert.True(t, one.Stop(), "non-zero timer couldn't be stopped") - - fc.Advance(5) - - select { - case <-one.Chan(): - t.Errorf("stopped timer did emit time") - default: - } - - assert.False(t, one.Reset(1), "resetting stopped timer didn't return false") - assert.True(t, one.Reset(1), "resetting active timer didn't return true") - - fc.Advance(1) - - assert.False(t, one.Stop(), "triggered timer could be stopped") - - select { - case <-one.Chan(): - default: - t.Errorf("triggered timer didn't emit time") - } - - fc.Advance(1) - - select { - case <-one.Chan(): - t.Errorf("triggered timer emitted time more than once") - default: - } - - one.Reset(0) - - assert.False(t, one.Stop(), "reset to zero timer could be stopped") - select { - case <-one.Chan(): - default: - t.Errorf("reset to zero timer didn't emit time") - } -} - -type syncFunc func(didAdvance func(), shouldAdvance func(string), shouldBlock func(string)) - -func inSync(t *testing.T, func1 syncFunc, func2 syncFunc) { - stepChan1 := make(chan struct{}, 16) - stepChan2 := make(chan struct{}, 16) - go func() { - func1(func() { stepChan1 <- struct{}{} }, func(point string) { - select { - case <-stepChan2: - case <-time.After(time.Second): - t.Errorf("Did not advance, should have %s", point) - } - }, - func(point string) { - select { - case <-stepChan2: - t.Errorf("Was able to advance, should not have %s", point) - case <-time.After(10 * time.Millisecond): - } - }, - ) - }() - func2(func() { stepChan2 <- struct{}{} }, func(point string) { - select { - case <-stepChan1: - case <-time.After(time.Second): - t.Errorf("Did not advance, should have %s", point) - } - }, - func(point string) { - select { - case <-stepChan1: - t.Errorf("Was able to advance, should not have %s", point) - case <-time.After(10 * time.Millisecond): - } - }) -} - -func TestBlockingOnTimers(t *testing.T) { - tf.UnitTest(t) - fc := clock.NewFake(startTime) - - inSync(t, func(didAdvance func(), shouldAdvance func(string), _ func(string)) { - fc.BlockUntil(0) - didAdvance() - fc.BlockUntil(1) - didAdvance() - shouldAdvance("timers stopped") - fc.BlockUntil(0) - didAdvance() - fc.BlockUntil(1) - didAdvance() - fc.BlockUntil(2) - didAdvance() - fc.BlockUntil(3) - didAdvance() - shouldAdvance("timers stopped") - fc.BlockUntil(2) - didAdvance() - shouldAdvance("time advanced") - fc.BlockUntil(0) - didAdvance() - }, func(didAdvance func(), shouldAdvance func(string), shouldBlock func(string)) { - shouldAdvance("when only blocking for 0 timers") - shouldBlock("when waiting for 1 timer") - fc.NewTimer(0) - shouldBlock("when immediately expired timer added") - one := fc.NewTimer(1) - shouldAdvance("once a timer exists") - one.Stop() - didAdvance() - shouldAdvance("when only blocking for 0 timers") - shouldBlock("when all timers are stopped and waiting for a timer") - one.Reset(1) - shouldAdvance("once timer is restarted") - shouldBlock("when waiting for 2 timers with one active") - _ = fc.NewTimer(2) - shouldAdvance("when second timer added") - shouldBlock("when waiting for 3 timers with 2 active") - _ = fc.NewTimer(3) - shouldAdvance("when third timer added") - one.Stop() - didAdvance() - shouldAdvance("when blocking for 2 timers if a third is stopped") - fc.Advance(3) - didAdvance() - shouldAdvance("waiting for no timers") - }) -} - -func TestAdvancePastAfter(t *testing.T) { - tf.UnitTest(t) - - fc := clock.NewFake(startTime) - - start := fc.Now() - one := fc.After(1) - two := fc.After(2) - six := fc.After(6) - - fc.Advance(1) - assert.False(t, start.Add(1).Sub(<-one) > 0, "timestamp is too early") - - fc.Advance(5) - assert.False(t, start.Add(2).Sub(<-two) > 0, "timestamp is too early") - assert.False(t, start.Add(6).Sub(<-six) > 0, "timestamp is too early") -} - -func TestFakeTickerStop(t *testing.T) { - tf.UnitTest(t) - fc := clock.NewFake(startTime) - - ft := fc.NewTicker(1) - ft.Stop() - fc.Advance(1) - select { - case <-ft.Chan(): - t.Errorf("received unexpected tick!") - default: - } -} - -func TestFakeTickerTick(t *testing.T) { - tf.UnitTest(t) - fc := clock.NewFake(startTime) - now := fc.Now() - - // The tick at now.Add(2) should not get through since we advance time by - // two units below and the channel can hold at most one tick until it's - // consumed. - first := now.Add(1) - second := now.Add(3) - - // We wrap the Advance() calls with blockers to make sure that the ticker - // can go to sleep and produce ticks without time passing in parallel. - ft := fc.NewTicker(1) - fc.BlockUntil(1) - fc.Advance(2) - fc.BlockUntil(1) - - select { - case tick := <-ft.Chan(): - assert.Truef(t, tick == first, "wrong tick time, got: %v, want: %v", tick, first) - default: - t.Errorf("expected tick!") - } - - // Advance by one more unit, we should get another tick now. - fc.Advance(1) - fc.BlockUntil(1) - - select { - case tick := <-ft.Chan(): - assert.Truef(t, tick == second, "wrong tick time, got: %v, want: %v", tick, second) - default: - t.Errorf("expected tick!") - } - ft.Stop() -} diff --git a/internal/pkg/config/config.go b/internal/pkg/config/config.go deleted file mode 100644 index f11aff24a4..0000000000 --- a/internal/pkg/config/config.go +++ /dev/null @@ -1,422 +0,0 @@ -package config - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "os" - "reflect" - "regexp" - "strings" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// Config is an in memory representation of the filecoin configuration file -type Config struct { - API *APIConfig `json:"api"` - Bootstrap *BootstrapConfig `json:"bootstrap"` - Datastore *DatastoreConfig `json:"datastore"` - Drand *DrandConfig `json:"drand"` - Mining *MiningConfig `json:"mining"` - Mpool *MessagePoolConfig `json:"mpool"` - NetworkParams *NetworkParamsConfig `json:"parameters"` - Observability *ObservabilityConfig `json:"observability"` - SectorBase *SectorBaseConfig `json:"sectorbase"` - Swarm *SwarmConfig `json:"swarm"` - Wallet *WalletConfig `json:"wallet"` -} - -// APIConfig holds all configuration options related to the api. -type APIConfig struct { - Address string `json:"address"` - AccessControlAllowOrigin []string `json:"accessControlAllowOrigin"` - AccessControlAllowCredentials bool `json:"accessControlAllowCredentials"` - AccessControlAllowMethods []string `json:"accessControlAllowMethods"` -} - -func newDefaultAPIConfig() *APIConfig { - return &APIConfig{ - Address: "/ip4/127.0.0.1/tcp/3453", - AccessControlAllowOrigin: []string{ - "http://localhost:8080", - "https://localhost:8080", - "http://127.0.0.1:8080", - "https://127.0.0.1:8080", - }, - AccessControlAllowMethods: []string{"GET", "POST", "PUT"}, - } -} - -// DatastoreConfig holds all the configuration options for the datastore. -// TODO: use the advanced datastore configuration from ipfs -type DatastoreConfig struct { - Type string `json:"type"` - Path string `json:"path"` -} - -// Validators hold the list of validation functions for each configuration -// property. Validators must take a key and json string respectively as -// arguments, and must return either an error or nil depending on whether or not -// the given key and value are valid. Validators will only be run if a property -// being set matches the name given in this map. -var Validators = map[string]func(string, string) error{ - "heartbeat.nickname": validateLettersOnly, -} - -func newDefaultDatastoreConfig() *DatastoreConfig { - return &DatastoreConfig{ - Type: "badgerds", - Path: "badger", - } -} - -// SwarmConfig holds all configuration options related to the swarm. -type SwarmConfig struct { - Address string `json:"address"` - PublicRelayAddress string `json:"public_relay_address,omitempty"` -} - -func newDefaultSwarmConfig() *SwarmConfig { - return &SwarmConfig{ - Address: "/ip4/0.0.0.0/tcp/6000", - } -} - -// BootstrapConfig holds all configuration options related to bootstrap nodes -type BootstrapConfig struct { - Addresses []string `json:"addresses"` - MinPeerThreshold int `json:"minPeerThreshold"` - Period string `json:"period,omitempty"` -} - -// TODO: provide bootstrap node addresses -func newDefaultBootstrapConfig() *BootstrapConfig { - return &BootstrapConfig{ - Addresses: []string{}, - MinPeerThreshold: 0, // TODO: we don't actually have an bootstrap peers yet. - Period: "1m", - } -} - -// MiningConfig holds all configuration options related to mining. -type MiningConfig struct { - MinerAddress address.Address `json:"minerAddress"` - AutoSealIntervalSeconds uint `json:"autoSealIntervalSeconds"` - StoragePrice types.AttoFIL `json:"storagePrice"` -} - -func newDefaultMiningConfig() *MiningConfig { - return &MiningConfig{ - MinerAddress: address.Undef, - AutoSealIntervalSeconds: 120, - StoragePrice: types.ZeroAttoFIL, - } -} - -// WalletConfig holds all configuration options related to the wallet. -type WalletConfig struct { - DefaultAddress address.Address `json:"defaultAddress,omitempty"` -} - -func newDefaultWalletConfig() *WalletConfig { - return &WalletConfig{ - DefaultAddress: address.Undef, - } -} - -// DrandConfig holds all configuration options related to pulling randomness from Drand servers -type DrandConfig struct { - // Addresses are are drand server addresses in the format - Addresses []string `json:"addresses"` - // Secure is whether or not the drand address are secure (e.g. TLS) - Secure bool `json:"secure"` - // DistKey is the distributed public key of the server group expressed as hex encoded coefficients - DistKey [][]byte `json:"distKey"` - StartTimeUnix int64 `json:"startTimeUnix"` - RoundSeconds int `json:"roundSeconds"` -} - -func newDefaultDrandConfig() *DrandConfig { - return &DrandConfig{ - Addresses: []string{ - "localhost:8080", - "localhost:8081", - "localhost:8082", - "localhost:8083", - "localhost:8084", - }, - Secure: false, - DistKey: [][]byte{}, - StartTimeUnix: 0, - RoundSeconds: 30, - } -} - -// HeartbeatConfig holds all configuration options related to node heartbeat. -type HeartbeatConfig struct { - // BeatTarget represents the address the filecoin node will send heartbeats to. - BeatTarget string `json:"beatTarget"` - // BeatPeriod represents how frequently heartbeats are sent. - // Golang duration units are accepted. - BeatPeriod string `json:"beatPeriod"` - // ReconnectPeriod represents how long the node waits before attempting to reconnect. - // Golang duration units are accepted. - ReconnectPeriod string `json:"reconnectPeriod"` - // Nickname represents the nickname of the filecoin node, - Nickname string `json:"nickname"` -} - -// ObservabilityConfig is a container for configuration related to observables. -type ObservabilityConfig struct { - Metrics *MetricsConfig `json:"metrics"` - Tracing *TraceConfig `json:"tracing"` -} - -func newDefaultObservabilityConfig() *ObservabilityConfig { - return &ObservabilityConfig{ - Metrics: newDefaultMetricsConfig(), - Tracing: newDefaultTraceConfig(), - } -} - -// MetricsConfig holds all configuration options related to node metrics. -type MetricsConfig struct { - // Enabled will enable prometheus metrics when true. - PrometheusEnabled bool `json:"prometheusEnabled"` - // ReportInterval represents how frequently filecoin will update its prometheus metrics. - ReportInterval string `json:"reportInterval"` - // PrometheusEndpoint represents the address filecoin will expose prometheus metrics at. - PrometheusEndpoint string `json:"prometheusEndpoint"` -} - -func newDefaultMetricsConfig() *MetricsConfig { - return &MetricsConfig{ - PrometheusEnabled: false, - ReportInterval: "5s", - PrometheusEndpoint: "/ip4/0.0.0.0/tcp/9400", - } -} - -// TraceConfig holds all configuration options related to enabling and exporting -// filecoin node traces. -type TraceConfig struct { - // JaegerTracingEnabled will enable exporting traces to jaeger when true. - JaegerTracingEnabled bool `json:"jaegerTracingEnabled"` - // ProbabilitySampler will sample fraction of traces, 1.0 will sample all traces. - ProbabilitySampler float64 `json:"probabilitySampler"` - // JaegerEndpoint is the URL traces are collected on. - JaegerEndpoint string `json:"jaegerEndpoint"` -} - -func newDefaultTraceConfig() *TraceConfig { - return &TraceConfig{ - JaegerEndpoint: "http://localhost:14268/api/traces", - JaegerTracingEnabled: false, - ProbabilitySampler: 1.0, - } -} - -// MessagePoolConfig holds all configuration options related to nodes message pool (mpool). -type MessagePoolConfig struct { - // MaxPoolSize is the maximum number of pending messages will will allow in the message pool at any time - MaxPoolSize uint `json:"maxPoolSize"` - // MaxNonceGap is the maximum nonce of a message past the last received on chain - MaxNonceGap uint64 `json:"maxNonceGap"` -} - -func newDefaultMessagePoolConfig() *MessagePoolConfig { - return &MessagePoolConfig{ - MaxPoolSize: 1000000, - MaxNonceGap: 100, - } -} - -type NetworkParamsConfig struct { - ConsensusMinerMinPower uint64 // uint64 goes up to 18 EiB - ReplaceProofTypes []int64 -} - -func newDefaultNetworkParamsConfig() *NetworkParamsConfig { - return &NetworkParamsConfig{ - ConsensusMinerMinPower: 0, // 0 means don't override the value - ReplaceProofTypes: []int64{ - int64(abi.RegisteredProof_StackedDRG2KiBSeal), - int64(abi.RegisteredProof_StackedDRG512MiBSeal), - int64(abi.RegisteredProof_StackedDRG32GiBSeal), - int64(abi.RegisteredProof_StackedDRG64GiBSeal), - }, - } -} - -// SectorBaseConfig holds all configuration options related to the node's -// sector storage. -type SectorBaseConfig struct { - // RootDir is the absolute path to the root directory holding sector data. - // If empty the default of /sectors is implied. - RootDirPath string `json:"rootdir"` - - // PreSealedSectorsDir is the absolute path to the directory holding any - // pre-sealed sector files and corresponding metadata JSON. - // If empty, it is assumed that no pre-sealed sectors exist. - PreSealedSectorsDirPath string `json:"preSealedSectorsDir"` -} - -func newDefaultSectorbaseConfig() *SectorBaseConfig { - return &SectorBaseConfig{ - RootDirPath: "", - PreSealedSectorsDirPath: "", - } -} - -// NewDefaultConfig returns a config object with all the fields filled out to -// their default values -func NewDefaultConfig() *Config { - return &Config{ - API: newDefaultAPIConfig(), - Bootstrap: newDefaultBootstrapConfig(), - Datastore: newDefaultDatastoreConfig(), - Drand: newDefaultDrandConfig(), - Mining: newDefaultMiningConfig(), - Mpool: newDefaultMessagePoolConfig(), - NetworkParams: newDefaultNetworkParamsConfig(), - Observability: newDefaultObservabilityConfig(), - SectorBase: newDefaultSectorbaseConfig(), - Swarm: newDefaultSwarmConfig(), - Wallet: newDefaultWalletConfig(), - } -} - -// WriteFile writes the config to the given filepath. -func (cfg *Config) WriteFile(file string) error { - f, err := os.OpenFile(file, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) - if err != nil { - return err - } - defer f.Close() // nolint: errcheck - - configString, err := json.MarshalIndent(*cfg, "", "\t") - if err != nil { - return err - } - - _, err = fmt.Fprint(f, string(configString)) - return err -} - -// ReadFile reads a config file from disk. -func ReadFile(file string) (*Config, error) { - f, err := os.Open(file) - if err != nil { - return nil, err - } - - cfg := NewDefaultConfig() - rawConfig, err := ioutil.ReadAll(f) - if err != nil { - return nil, err - } - if len(rawConfig) == 0 { - return cfg, nil - } - - err = json.Unmarshal(rawConfig, &cfg) - if err != nil { - return nil, err - } - - return cfg, nil -} - -// Set sets the config sub-struct referenced by `key`, e.g. 'api.address' -// or 'datastore' to the json key value pair encoded in jsonVal. -func (cfg *Config) Set(dottedKey string, jsonString string) error { - if !json.Valid([]byte(jsonString)) { - jsonBytes, _ := json.Marshal(jsonString) - jsonString = string(jsonBytes) - } - - if err := validate(dottedKey, jsonString); err != nil { - return err - } - - keys := strings.Split(dottedKey, ".") - for i := len(keys) - 1; i >= 0; i-- { - jsonString = fmt.Sprintf(`{ "%s": %s }`, keys[i], jsonString) - } - - decoder := json.NewDecoder(strings.NewReader(jsonString)) - decoder.DisallowUnknownFields() - - return decoder.Decode(&cfg) -} - -// Get gets the config sub-struct referenced by `key`, e.g. 'api.address' -func (cfg *Config) Get(key string) (interface{}, error) { - v := reflect.Indirect(reflect.ValueOf(cfg)) - keyTags := strings.Split(key, ".") -OUTER: - for j, keyTag := range keyTags { - if v.Type().Kind() == reflect.Struct { - for i := 0; i < v.NumField(); i++ { - jsonTag := strings.Split( - v.Type().Field(i).Tag.Get("json"), - ",")[0] - if jsonTag == keyTag { - v = v.Field(i) - if j == len(keyTags)-1 { - return v.Interface(), nil - } - v = reflect.Indirect(v) // only attempt one dereference - continue OUTER - } - } - } - - return nil, fmt.Errorf("key: %s invalid for config", key) - } - // Cannot get here as len(strings.Split(s, sep)) >= 1 with non-empty sep - return nil, fmt.Errorf("empty key is invalid") -} - -// validate runs validations on a given key and json string. validate uses the -// validators map defined at the top of this file to determine which validations -// to use for each key. -func validate(dottedKey string, jsonString string) error { - var obj interface{} - if err := json.Unmarshal([]byte(jsonString), &obj); err != nil { - return err - } - // recursively validate sub-keys by partially unmarshalling - if reflect.ValueOf(obj).Kind() == reflect.Map { - var obj map[string]json.RawMessage - if err := json.Unmarshal([]byte(jsonString), &obj); err != nil { - return err - } - for key := range obj { - if err := validate(dottedKey+"."+key, string(obj[key])); err != nil { - return err - } - } - return nil - } - - if validationFunc, present := Validators[dottedKey]; present { - return validationFunc(dottedKey, jsonString) - } - - return nil -} - -// validateLettersOnly validates that a given value contains only letters. If it -// does not, an error is returned using the given key for the message. -func validateLettersOnly(key string, value string) error { - if match, _ := regexp.MatchString("^\"[a-zA-Z]+\"$", value); !match { - return errors.Errorf(`"%s" must only contain letters`, key) - } - return nil -} diff --git a/internal/pkg/config/config_test.go b/internal/pkg/config/config_test.go deleted file mode 100644 index dc41b158ac..0000000000 --- a/internal/pkg/config/config_test.go +++ /dev/null @@ -1,296 +0,0 @@ -package config - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestDefaults(t *testing.T) { - tf.UnitTest(t) - - cfg := NewDefaultConfig() - - bs := []string{} - assert.Equal(t, "/ip4/127.0.0.1/tcp/3453", cfg.API.Address) - assert.Equal(t, "/ip4/0.0.0.0/tcp/6000", cfg.Swarm.Address) - assert.Equal(t, bs, cfg.Bootstrap.Addresses) -} - -func TestWriteFile(t *testing.T) { - tf.UnitTest(t) - - dir, err := ioutil.TempDir("", "config") - assert.NoError(t, err) - defer func() { - require.NoError(t, os.RemoveAll(dir)) - }() - - cfg := NewDefaultConfig() - - cfgJSON, err := json.MarshalIndent(*cfg, "", "\t") - require.NoError(t, err) - expected := string(cfgJSON) - - SanityCheck(t, expected) - - assert.NoError(t, cfg.WriteFile(filepath.Join(dir, "config.json"))) - content, err := ioutil.ReadFile(filepath.Join(dir, "config.json")) - assert.NoError(t, err) - - assert.Equal(t, expected, string(content)) - assert.NoError(t, os.Remove(filepath.Join(dir, "config.json"))) -} - -func TestConfigRoundtrip(t *testing.T) { - tf.UnitTest(t) - - dir, err := ioutil.TempDir("", "config") - assert.NoError(t, err) - defer func() { - require.NoError(t, os.RemoveAll(dir)) - }() - - cfg := NewDefaultConfig() - - cfgpath := filepath.Join(dir, "config.json") - assert.NoError(t, cfg.WriteFile(cfgpath)) - - cfgout, err := ReadFile(cfgpath) - assert.NoError(t, err) - - assert.Equal(t, cfg, cfgout) -} - -func TestConfigReadFileDefaults(t *testing.T) { - tf.UnitTest(t) - - t.Run("all sections exist", func(t *testing.T) { - cfgpath, cleaner, err := createConfigFile(` - { - "api": { - "address": "/ip4/127.0.0.1/tcp/9999", - "keyThatDoesntExit": false - }, - "swarm": { - "keyThatDoesntExit": "hello" - } - }`) - assert.NoError(t, err) - defer func() { - require.NoError(t, cleaner()) - }() - cfg, err := ReadFile(cfgpath) - assert.NoError(t, err) - - assert.Equal(t, cfg.API.Address, "/ip4/127.0.0.1/tcp/9999") - assert.Equal(t, cfg.Swarm.Address, "/ip4/0.0.0.0/tcp/6000") - }) - - t.Run("missing one section", func(t *testing.T) { - cfgpath, cleaner, err := createConfigFile(` - { - "api": { - "address": "/ip4/127.0.0.1/tcp/9999", - "keyThatDoesntExit'": false - } - }`) - assert.NoError(t, err) - defer func() { - require.NoError(t, cleaner()) - }() - cfg, err := ReadFile(cfgpath) - assert.NoError(t, err) - - assert.Equal(t, cfg.API.Address, "/ip4/127.0.0.1/tcp/9999") - assert.Equal(t, cfg.Swarm.Address, "/ip4/0.0.0.0/tcp/6000") - }) - - t.Run("empty file", func(t *testing.T) { - cfgpath, cleaner, err := createConfigFile("") - assert.NoError(t, err) - defer func() { - require.NoError(t, cleaner()) - }() - cfg, err := ReadFile(cfgpath) - assert.NoError(t, err) - - assert.Equal(t, cfg.API.Address, "/ip4/127.0.0.1/tcp/3453") - assert.Equal(t, cfg.Swarm.Address, "/ip4/0.0.0.0/tcp/6000") - }) -} - -func TestConfigGet(t *testing.T) { - tf.UnitTest(t) - - t.Run("valid gets", func(t *testing.T) { - cfg := NewDefaultConfig() - - out, err := cfg.Get("api.address") - assert.NoError(t, err) - assert.Equal(t, cfg.API.Address, out) - - out, err = cfg.Get("api.accessControlAllowOrigin") - assert.NoError(t, err) - assert.Equal(t, cfg.API.AccessControlAllowOrigin, out) - - out, err = cfg.Get("api") - assert.NoError(t, err) - assert.Equal(t, cfg.API, out) - - out, err = cfg.Get("bootstrap.addresses") - assert.NoError(t, err) - assert.Equal(t, cfg.Bootstrap.Addresses, out) - - out, err = cfg.Get("bootstrap") - assert.NoError(t, err) - assert.Equal(t, cfg.Bootstrap, out) - - out, err = cfg.Get("datastore.path") - assert.NoError(t, err) - assert.Equal(t, cfg.Datastore.Path, out) - - // TODO we can test this as soon as we have bootstrap addresses. - // out, err = cfg.Get("bootstrap.addresses.0") - // assert.NoError(err) - // assert.Equal(cfg.Bootstrap.Addresses[0], out) - }) - - t.Run("invalid gets", func(t *testing.T) { - cfg := NewDefaultConfig() - - _, err := cfg.Get("datastore.") - assert.Error(t, err) - - _, err = cfg.Get(".datastore") - assert.Error(t, err) - - _, err = cfg.Get("invalidfield") - assert.Error(t, err) - - _, err = cfg.Get("bootstrap.addresses.toomuch") - assert.Error(t, err) - - _, err = cfg.Get("api-address") - assert.Error(t, err) - - // TODO: temporary as we don't have any ATM. - _, err = cfg.Get("bootstrap.addresses.0") - assert.Error(t, err) - }) -} - -func TestConfigSet(t *testing.T) { - tf.UnitTest(t) - - t.Run("set leaf values", func(t *testing.T) { - cfg := NewDefaultConfig() - - // set string - err := cfg.Set("api.address", `"/ip4/127.9.9.9/tcp/0"`) - assert.NoError(t, err) - assert.Equal(t, cfg.API.Address, "/ip4/127.9.9.9/tcp/0") - - // set slice - err = cfg.Set("api.accessControlAllowOrigin", `["http://localroast:7854"]`) - assert.NoError(t, err) - assert.Equal(t, cfg.API.AccessControlAllowOrigin, []string{"http://localroast:7854"}) - }) - - t.Run("set table value", func(t *testing.T) { - cfg := NewDefaultConfig() - - jsonBlob := `{"type": "badgerbadgerbadgerds", "path": "mushroom-mushroom"}` - err := cfg.Set("datastore", jsonBlob) - assert.NoError(t, err) - assert.Equal(t, cfg.Datastore.Type, "badgerbadgerbadgerds") - assert.Equal(t, cfg.Datastore.Path, "mushroom-mushroom") - - cfg1path, cleaner, err := createConfigFile(fmt.Sprintf(`{"datastore": %s}`, jsonBlob)) - assert.NoError(t, err) - defer func() { - require.NoError(t, cleaner()) - }() - - cfg1, err := ReadFile(cfg1path) - assert.NoError(t, err) - assert.Equal(t, cfg1.Datastore, cfg.Datastore) - - // inline tables - jsonBlob = `{"type": "badgerbadgerbadgerds", "path": "mushroom-mushroom"}` - err = cfg.Set("datastore", jsonBlob) - assert.NoError(t, err) - - assert.Equal(t, cfg1.Datastore, cfg.Datastore) - }) - - t.Run("invalid set", func(t *testing.T) { - cfg := NewDefaultConfig() - - // bad key - err := cfg.Set("datastore.nope", `"too bad, fake key"`) - assert.Error(t, err) - - // not json - err = cfg.Set("bootstrap.addresses", `nota.json?key`) - assert.Error(t, err) - - // newlines in inline tables are invalid - tomlB := `{type = "badgerbadgerbadgerds", -path = "mushroom-mushroom"}` - err = cfg.Set("datastore", tomlB) - assert.Error(t, err) - - // setting values of wrong type - err = cfg.Set("datastore.type", `["not a", "string"]`) - assert.Error(t, err) - - err = cfg.Set("bootstrap.addresses", `"not a list"`) - assert.Error(t, err) - - err = cfg.Set("api", `"strings aren't structs"`) - assert.Error(t, err) - - // Corrupt address won't pass checksum - //err = cfg.Set("mining.defaultAddress", "fcqv3gmsd9gd7dqfe60d28euf4tx9v7929corrupt") - //assert.Contains(err.Error(), "invalid") - - err = cfg.Set("wallet.defaultAddress", "corruptandtooshort") - assert.Contains(t, err.Error(), address.ErrUnknownNetwork.Error()) - }) - - t.Run("setting leaves does not interfere with neighboring leaves", func(t *testing.T) { - cfg := NewDefaultConfig() - - err := cfg.Set("bootstrap.period", `"3m"`) - assert.NoError(t, err) - err = cfg.Set("bootstrap.minPeerThreshold", `5`) - assert.NoError(t, err) - assert.Equal(t, cfg.Bootstrap.Period, "3m") - }) -} - -func createConfigFile(content string) (string, func() error, error) { - dir, err := ioutil.TempDir("", "config") - if err != nil { - return "", nil, err - } - cfgpath := filepath.Join(dir, "config.json") - - if err := ioutil.WriteFile(cfgpath, []byte(content), 0644); err != nil { - return "", nil, err - } - - return cfgpath, func() error { - return os.RemoveAll(dir) - }, nil -} diff --git a/internal/pkg/config/testing.go b/internal/pkg/config/testing.go deleted file mode 100644 index 8d31379034..0000000000 --- a/internal/pkg/config/testing.go +++ /dev/null @@ -1,19 +0,0 @@ -package config - -import ( - "strings" - "testing" - - "github.com/stretchr/testify/assert" -) - -// Makes some basic checks of a serialized config to ascertain that it looks kind of right. -// This is instead of brittle hardcoded exact config expectations. -func SanityCheck(t *testing.T, cfgJSON string) { - assert.True(t, strings.Contains(cfgJSON, "accessControlAllowOrigin")) - assert.True(t, strings.Contains(cfgJSON, "http://localhost:8080")) - assert.True(t, strings.Contains(cfgJSON, "bootstrap")) - assert.True(t, strings.Contains(cfgJSON, "bootstrap")) - assert.True(t, strings.Contains(cfgJSON, "\"minPeerThreshold\": 0")) - assert.True(t, strings.Contains(cfgJSON, "minerAddress")) -} diff --git a/internal/pkg/consensus/block_validation.go b/internal/pkg/consensus/block_validation.go deleted file mode 100644 index f0a478cca6..0000000000 --- a/internal/pkg/consensus/block_validation.go +++ /dev/null @@ -1,235 +0,0 @@ -package consensus - -import ( - "context" - "fmt" - - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/specs-actors/actors/builtin" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/ipfs/go-cid" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -type messageStore interface { - LoadMessages(context.Context, cid.Cid) ([]*types.SignedMessage, []*types.UnsignedMessage, error) - LoadReceipts(context.Context, cid.Cid) ([]vm.MessageReceipt, error) -} - -type chainState interface { - GetActorAt(ctx context.Context, tipKey block.TipSetKey, addr address.Address) (*actor.Actor, error) -} - -// BlockValidator defines an interface used to validate a blocks syntax and -// semantics. -type BlockValidator interface { - BlockSemanticValidator - BlockSyntaxValidator -} - -// SyntaxValidator defines and interface used to validate block's syntax and the -// syntax of constituent messages -type SyntaxValidator interface { - BlockSyntaxValidator - MessageSyntaxValidator -} - -// BlockSemanticValidator defines an interface used to validate a blocks -// semantics. -type BlockSemanticValidator interface { - ValidateHeaderSemantic(ctx context.Context, child *block.Block, parents block.TipSet) error - ValidateMessagesSemantic(ctx context.Context, child *block.Block, parents block.TipSetKey) error -} - -// BlockSyntaxValidator defines an interface used to validate a blocks -// syntax. -type BlockSyntaxValidator interface { - ValidateSyntax(ctx context.Context, blk *block.Block) error -} - -// MessageSyntaxValidator defines an interface used to validate a message's -// syntax. -type MessageSyntaxValidator interface { - ValidateSignedMessageSyntax(ctx context.Context, smsg *types.SignedMessage) error - ValidateUnsignedMessageSyntax(ctx context.Context, msg *types.UnsignedMessage) error -} - -// DefaultBlockValidator implements the BlockValidator interface. -type DefaultBlockValidator struct { - clock.ChainEpochClock - ms messageStore - cs chainState -} - -// WrappedSyntaxValidator implements syntax validator interface -type WrappedSyntaxValidator struct { - BlockSyntaxValidator - MessageSyntaxValidator -} - -// NewDefaultBlockValidator returns a new DefaultBlockValidator. It uses `blkTime` -// to validate blocks and uses the DefaultBlockValidationClock. -func NewDefaultBlockValidator(c clock.ChainEpochClock, m messageStore, cs chainState) *DefaultBlockValidator { - return &DefaultBlockValidator{ - ChainEpochClock: c, - ms: m, - cs: cs, - } -} - -// NotFutureBlock errors if the block belongs to a future epoch according to -// the chain clock. -func (dv *DefaultBlockValidator) NotFutureBlock(b *block.Block) error { - currentEpoch := dv.EpochAtTime(dv.Now()) - if b.Height > currentEpoch { - return fmt.Errorf("block %s with timestamp %d generate in future epoch %d", b.Cid().String(), b.Timestamp, b.Height) - } - return nil -} - -// TimeMatchesEpoch errors if the epoch and time don't match according to the -// chain clock. -func (dv *DefaultBlockValidator) TimeMatchesEpoch(b *block.Block) error { - earliestExpected, latestExpected := dv.EpochRangeAtTimestamp(b.Timestamp) - blockEpoch := b.Height - if (blockEpoch < earliestExpected) || (blockEpoch > latestExpected) { - return fmt.Errorf( - "block %s with timestamp %d generated in wrong epoch %d, expected epoch in range [%d, %d]", - b.Cid().String(), - b.Timestamp, - b.Height, - earliestExpected, - latestExpected, - ) - } - return nil -} - -// ValidateHeaderSemantic checks validation conditions on a header that can be -// checked given only the parent header. -func (dv *DefaultBlockValidator) ValidateHeaderSemantic(ctx context.Context, child *block.Block, parents block.TipSet) error { - ph, err := parents.Height() - if err != nil { - return err - } - - if child.Height <= ph { - return fmt.Errorf("block %s has invalid height %d", child.Cid().String(), child.Height) - } - - return nil -} - -// ValidateFullSemantic checks validation conditions on a block's messages that don't require message execution. -func (dv *DefaultBlockValidator) ValidateMessagesSemantic(ctx context.Context, child *block.Block, parents block.TipSetKey) error { - // validate call sequence numbers - secpMsgs, blsMsgs, err := dv.ms.LoadMessages(ctx, child.Messages.Cid) - if err != nil { - return errors.Wrapf(err, "block validation failed loading message list %s for block %s", child.Messages, child.Cid()) - } - - expectedCallSeqNum := map[address.Address]uint64{} - for _, msg := range blsMsgs { - msgCid, err := msg.Cid() - if err != nil { - return err - } - - from, err := dv.getAndValidateFromActor(ctx, msg, parents) - if err != nil { - return errors.Wrapf(err, "from actor %s for message %s of block %s invalid", msg.From, msgCid, child.Cid()) - } - - err = dv.validateMessage(msg, expectedCallSeqNum, from) - if err != nil { - return errors.Wrapf(err, "message %s of block %s invalid", msgCid, child.Cid()) - } - } - - for _, msg := range secpMsgs { - msgCid, err := msg.Cid() - if err != nil { - return err - } - - from, err := dv.getAndValidateFromActor(ctx, &msg.Message, parents) - if err != nil { - return errors.Wrapf(err, "from actor %s for message %s of block %s invalid", msg.Message.From, msgCid, child.Cid()) - } - - err = dv.validateMessage(&msg.Message, expectedCallSeqNum, from) - if err != nil { - return errors.Wrapf(err, "message %s of block %s invalid", msgCid, child.Cid()) - } - } - - return nil -} - -func (dv *DefaultBlockValidator) getAndValidateFromActor(ctx context.Context, msg *types.UnsignedMessage, parents block.TipSetKey) (*actor.Actor, error) { - actor, err := dv.cs.GetActorAt(ctx, parents, msg.From) - if err != nil { - return nil, err - } - - // ensure actor is an account actor - if !actor.Code.Equals(builtin.AccountActorCodeID) { - return nil, errors.New("sent from non-account actor") - } - - return actor, nil -} - -func (dv *DefaultBlockValidator) validateMessage(msg *types.UnsignedMessage, expectedCallSeqNum map[address.Address]uint64, fromActor *actor.Actor) error { - callSeq, ok := expectedCallSeqNum[msg.From] - if !ok { - callSeq = fromActor.CallSeqNum - } - - // ensure message is in the correct order - if callSeq != msg.CallSeqNum { - return fmt.Errorf("callseqnum (%d) out of order (expected %d) from %s", msg.CallSeqNum, callSeq, msg.From) - } - - expectedCallSeqNum[msg.From] = callSeq + 1 - return nil -} - -// ValidateSyntax validates a single block is correctly formed. -// TODO this is an incomplete implementation #3277 -func (dv *DefaultBlockValidator) ValidateSyntax(ctx context.Context, blk *block.Block) error { - // TODO special handling for genesis block #3121 - if blk.Height == 0 { - return nil - } - err := dv.NotFutureBlock(blk) - if err != nil { - return err - } - err = dv.TimeMatchesEpoch(blk) - if err != nil { - return err - } - if !blk.StateRoot.Defined() { - return fmt.Errorf("block %s has nil StateRoot", blk.Cid()) - } - if blk.Miner.Empty() { - return fmt.Errorf("block %s has nil miner address", blk.Cid()) - } - if len(blk.Ticket.VRFProof) == 0 { - return fmt.Errorf("block %s has nil ticket", blk.Cid()) - } - if blk.BlockSig == nil { - return fmt.Errorf("block %s has nil signature", blk.Cid()) - } - - //TODO: validate all the messages syntax - - return nil -} diff --git a/internal/pkg/consensus/block_validation_test.go b/internal/pkg/consensus/block_validation_test.go deleted file mode 100644 index c82957e94d..0000000000 --- a/internal/pkg/consensus/block_validation_test.go +++ /dev/null @@ -1,328 +0,0 @@ -package consensus_test - -import ( - "context" - "testing" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/ipfs/go-cid" - blockstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" -) - -func TestBlockValidHeaderSemantic(t *testing.T) { - tf.UnitTest(t) - - blockTime := clock.DefaultEpochDuration - ts := time.Unix(1234567890, 0) - genTime := ts - mclock := clock.NewChainClockFromClock(uint64(genTime.Unix()), blockTime, clock.DefaultPropagationDelay, clock.NewFake(ts)) - ctx := context.Background() - - validator := consensus.NewDefaultBlockValidator(mclock, nil, nil) - - t.Run("reject block with same height as parents", func(t *testing.T) { - // passes with valid height - c := &block.Block{Height: 2, Timestamp: uint64(ts.Add(blockTime).Unix())} - p := &block.Block{Height: 1, Timestamp: uint64(ts.Unix())} - parents := consensus.RequireNewTipSet(require.New(t), p) - require.NoError(t, validator.ValidateHeaderSemantic(ctx, c, parents)) - - // invalidate parent by matching child height - p = &block.Block{Height: 2, Timestamp: uint64(ts.Unix())} - parents = consensus.RequireNewTipSet(require.New(t), p) - - err := validator.ValidateHeaderSemantic(ctx, c, parents) - assert.Error(t, err) - assert.Contains(t, err.Error(), "invalid height") - }) -} - -func TestBlockValidMessageSemantic(t *testing.T) { - tf.UnitTest(t) - - blockTime := clock.DefaultEpochDuration - ts := time.Unix(1234567890, 0) - genTime := ts - mclock := clock.NewChainClockFromClock(uint64(genTime.Unix()), blockTime, clock.DefaultPropagationDelay, clock.NewFake(ts)) - ctx := context.Background() - - c := &block.Block{Height: 2, Timestamp: uint64(ts.Add(blockTime).Unix())} - p := &block.Block{Height: 1, Timestamp: uint64(ts.Unix())} - parents := consensus.RequireNewTipSet(require.New(t), p) - - msg0 := &types.UnsignedMessage{From: address.TestAddress, CallSeqNum: 1} - msg1 := &types.UnsignedMessage{From: address.TestAddress, CallSeqNum: 2} - msg2 := &types.UnsignedMessage{From: address.TestAddress, CallSeqNum: 3} - msg3 := &types.UnsignedMessage{From: address.TestAddress, CallSeqNum: 4} - - t.Run("rejects block with message from missing actor", func(t *testing.T) { - validator := consensus.NewDefaultBlockValidator(mclock, &fakeMsgSource{ - blsMessages: []*types.UnsignedMessage{msg1}, - }, &fakeChainState{ - err: blockstore.ErrNotFound, - }) - - err := validator.ValidateMessagesSemantic(ctx, c, parents.Key()) - require.Error(t, err) - require.Contains(t, err.Error(), "not found") - }) - - t.Run("rejects block with message from non-account actor", func(t *testing.T) { - actor := newActor(t, 0, 2) - - // set invalid code - actor.Code = e.NewCid(builtin.RewardActorCodeID) - - validator := consensus.NewDefaultBlockValidator(mclock, &fakeMsgSource{ - blsMessages: []*types.UnsignedMessage{msg1}, - }, &fakeChainState{ - actor: actor, - }) - - err := validator.ValidateMessagesSemantic(ctx, c, parents.Key()) - require.Error(t, err) - require.Contains(t, err.Error(), "non-account actor") - }) - - t.Run("accepts block with bls messages in monotonic sequence", func(t *testing.T) { - validator := consensus.NewDefaultBlockValidator(mclock, &fakeMsgSource{ - blsMessages: []*types.UnsignedMessage{msg1, msg2, msg3}, - }, &fakeChainState{ - actor: newActor(t, 0, 2), - }) - - err := validator.ValidateMessagesSemantic(ctx, c, parents.Key()) - require.NoError(t, err) - }) - - t.Run("accepts block with secp messages in monotonic sequence", func(t *testing.T) { - validator := consensus.NewDefaultBlockValidator(mclock, &fakeMsgSource{ - secpMessages: []*types.SignedMessage{{Message: *msg1}, {Message: *msg2}, {Message: *msg3}}, - }, &fakeChainState{ - actor: newActor(t, 0, 2), - }) - - err := validator.ValidateMessagesSemantic(ctx, c, parents.Key()) - require.NoError(t, err) - }) - - t.Run("rejects block with messages out of order", func(t *testing.T) { - validator := consensus.NewDefaultBlockValidator(mclock, &fakeMsgSource{ - blsMessages: []*types.UnsignedMessage{msg1, msg3, msg2}, - }, &fakeChainState{ - actor: newActor(t, 0, 2), - }) - - err := validator.ValidateMessagesSemantic(ctx, c, parents.Key()) - require.Error(t, err) - require.Contains(t, err.Error(), "out of order") - }) - - t.Run("rejects block with gaps", func(t *testing.T) { - validator := consensus.NewDefaultBlockValidator(mclock, &fakeMsgSource{ - blsMessages: []*types.UnsignedMessage{msg1, msg3}, - }, &fakeChainState{ - actor: newActor(t, 0, 2), - }) - - err := validator.ValidateMessagesSemantic(ctx, c, parents.Key()) - require.Error(t, err) - require.Contains(t, err.Error(), "out of order") - }) - - t.Run("rejects block with bls message with nonce too low", func(t *testing.T) { - validator := consensus.NewDefaultBlockValidator(mclock, &fakeMsgSource{ - blsMessages: []*types.UnsignedMessage{msg0}, - }, &fakeChainState{ - actor: newActor(t, 0, 2), - }) - - err := validator.ValidateMessagesSemantic(ctx, c, parents.Key()) - require.Error(t, err) - require.Contains(t, err.Error(), "out of order") - }) - - t.Run("rejects block with secp message with nonce too low", func(t *testing.T) { - validator := consensus.NewDefaultBlockValidator(mclock, &fakeMsgSource{ - secpMessages: []*types.SignedMessage{{Message: *msg0}}, - }, &fakeChainState{ - actor: newActor(t, 0, 2), - }) - - err := validator.ValidateMessagesSemantic(ctx, c, parents.Key()) - require.Error(t, err) - require.Contains(t, err.Error(), "out of order") - }) - - t.Run("rejects block with message too high", func(t *testing.T) { - validator := consensus.NewDefaultBlockValidator(mclock, &fakeMsgSource{ - blsMessages: []*types.UnsignedMessage{msg2}, - }, &fakeChainState{ - actor: newActor(t, 0, 2), - }) - - err := validator.ValidateMessagesSemantic(ctx, c, parents.Key()) - require.Error(t, err) - require.Contains(t, err.Error(), "out of order") - }) - - t.Run("rejects secp message < bls messages", func(t *testing.T) { - validator := consensus.NewDefaultBlockValidator(mclock, &fakeMsgSource{ - secpMessages: []*types.SignedMessage{{Message: *msg1}}, - blsMessages: []*types.UnsignedMessage{msg2}, - }, &fakeChainState{ - actor: newActor(t, 0, 2), - }) - - err := validator.ValidateMessagesSemantic(ctx, c, parents.Key()) - require.Error(t, err) - require.Contains(t, err.Error(), "out of order") - }) - - t.Run("accepts bls message < secp messages", func(t *testing.T) { - validator := consensus.NewDefaultBlockValidator(mclock, &fakeMsgSource{ - blsMessages: []*types.UnsignedMessage{msg1}, - secpMessages: []*types.SignedMessage{{Message: *msg2}}, - }, &fakeChainState{ - actor: newActor(t, 0, 2), - }) - - err := validator.ValidateMessagesSemantic(ctx, c, parents.Key()) - require.NoError(t, err) - }) -} - -func TestMismatchedTime(t *testing.T) { - tf.UnitTest(t) - - blockTime := clock.DefaultEpochDuration - genTime := time.Unix(1234567890, 1234567890%int64(time.Second)) - fc := clock.NewFake(genTime) - mclock := clock.NewChainClockFromClock(uint64(genTime.Unix()), blockTime, clock.DefaultPropagationDelay, fc) - validator := consensus.NewDefaultBlockValidator(mclock, nil, nil) - - fc.Advance(blockTime) - - // Passes with correct timestamp - c := &block.Block{Height: 1, Timestamp: uint64(fc.Now().Unix())} - require.NoError(t, validator.TimeMatchesEpoch(c)) - - // fails with invalid timestamp - c = &block.Block{Height: 1, Timestamp: uint64(genTime.Unix())} - err := validator.TimeMatchesEpoch(c) - assert.Error(t, err) - assert.Contains(t, err.Error(), "wrong epoch") -} - -func TestFutureEpoch(t *testing.T) { - tf.UnitTest(t) - - blockTime := clock.DefaultEpochDuration - genTime := time.Unix(1234567890, 1234567890%int64(time.Second)) - fc := clock.NewFake(genTime) - mclock := clock.NewChainClockFromClock(uint64(genTime.Unix()), blockTime, clock.DefaultPropagationDelay, fc) - validator := consensus.NewDefaultBlockValidator(mclock, nil, nil) - - // Fails in future epoch - c := &block.Block{Height: 1, Timestamp: uint64(genTime.Add(blockTime).Unix())} - err := validator.NotFutureBlock(c) - assert.Error(t, err) - assert.Contains(t, err.Error(), "future epoch") -} - -func TestBlockValidSyntax(t *testing.T) { - tf.UnitTest(t) - - blockTime := clock.DefaultEpochDuration - ts := time.Unix(1234567890, 0) - mclock := clock.NewFake(ts) - chainClock := clock.NewChainClockFromClock(uint64(ts.Unix()), blockTime, clock.DefaultPropagationDelay, mclock) - ctx := context.Background() - mclock.Advance(blockTime) - - validator := consensus.NewDefaultBlockValidator(chainClock, nil, nil) - - validTs := uint64(mclock.Now().Unix()) - validSt := e.NewCid(types.NewCidForTestGetter()()) - validAd := vmaddr.NewForTestGetter()() - validTi := block.Ticket{VRFProof: []byte{1}} - // create a valid block - blk := &block.Block{ - Timestamp: validTs, - StateRoot: validSt, - Miner: validAd, - Ticket: validTi, - Height: 1, - - BlockSig: &crypto.Signature{ - Type: crypto.SigTypeBLS, - Data: []byte{0x3}, - }, - } - require.NoError(t, validator.ValidateSyntax(ctx, blk)) - - // below we will invalidate each part of the block, assert that it fails - // validation, then revalidate the block - - // invalidate timestamp - blk.Timestamp = uint64(ts.Add(time.Duration(3) * blockTime).Unix()) - require.Error(t, validator.ValidateSyntax(ctx, blk)) - blk.Timestamp = validTs - require.NoError(t, validator.ValidateSyntax(ctx, blk)) - - // invalidate stateroot - blk.StateRoot = e.NewCid(cid.Undef) - require.Error(t, validator.ValidateSyntax(ctx, blk)) - blk.StateRoot = validSt - require.NoError(t, validator.ValidateSyntax(ctx, blk)) - - // invalidate miner address - blk.Miner = address.Undef - require.Error(t, validator.ValidateSyntax(ctx, blk)) - blk.Miner = validAd - require.NoError(t, validator.ValidateSyntax(ctx, blk)) - - // invalidate ticket - blk.Ticket = block.Ticket{} - require.Error(t, validator.ValidateSyntax(ctx, blk)) - blk.Ticket = validTi - require.NoError(t, validator.ValidateSyntax(ctx, blk)) - -} - -type fakeMsgSource struct { - blsMessages []*types.UnsignedMessage - secpMessages []*types.SignedMessage -} - -func (fms *fakeMsgSource) LoadMessages(context.Context, cid.Cid) ([]*types.SignedMessage, []*types.UnsignedMessage, error) { - return fms.secpMessages, fms.blsMessages, nil -} - -func (fms *fakeMsgSource) LoadReceipts(context.Context, cid.Cid) ([]vm.MessageReceipt, error) { - return nil, nil -} - -type fakeChainState struct { - actor *actor.Actor - err error -} - -func (fcs *fakeChainState) GetActorAt(ctx context.Context, tipKey block.TipSetKey, addr address.Address) (*actor.Actor, error) { - return fcs.actor, fcs.err -} diff --git a/internal/pkg/consensus/chain_selector.go b/internal/pkg/consensus/chain_selector.go deleted file mode 100644 index 8a7f5d8a19..0000000000 --- a/internal/pkg/consensus/chain_selector.go +++ /dev/null @@ -1,123 +0,0 @@ -package consensus - -// This is to implement Expected Consensus protocol -// See: https://github.com/filecoin-project/specs/blob/master/expected-consensus.md - -import ( - "bytes" - "context" - "errors" - "strings" - - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -var ( - wRatioNum = fbig.NewInt(1) - wRatioDen = fbig.NewInt(2) - wPrecision = fbig.NewInt(256) -) - -// ChainSelector weighs and compares chains. -type ChainSelector struct { - cstore cbor.IpldStore - state StateViewer - genesisCid cid.Cid -} - -// NewChainSelector is the constructor for chain selection module. -func NewChainSelector(cs cbor.IpldStore, state StateViewer, gCid cid.Cid) *ChainSelector { - return &ChainSelector{ - cstore: cs, - state: state, - genesisCid: gCid, - } -} - -func log2b(x fbig.Int) fbig.Int { - bits := x.BitLen() - return fbig.NewInt(int64(bits - 1)) -} - -// Weight returns the EC weight of this TipSet as a filecoin big int. -func (c *ChainSelector) Weight(ctx context.Context, ts block.TipSet, pStateID cid.Cid) (fbig.Int, error) { - // Retrieve parent weight. - parentWeight, err := ts.ParentWeight() - if err != nil { - return fbig.Zero(), err - } - if !pStateID.Defined() { - return fbig.Zero(), errors.New("undefined state passed to chain selector new weight") - } - powerTableView := NewPowerTableView(c.state.PowerStateView(pStateID), c.state.FaultStateView(pStateID)) - networkPower, err := powerTableView.NetworkTotalPower(ctx) - if err != nil { - return fbig.Zero(), err - } - powerMeasure := log2b(networkPower) - - wPowerFactor := fbig.Mul(wPrecision, powerMeasure) - wBlocksFactorNum := fbig.Mul(wRatioNum, fbig.Mul(powerMeasure, fbig.NewInt(int64(ts.Len())))) - wBlocksFactorDen := fbig.Mul(wRatioDen, fbig.NewInt(int64(expectedLeadersPerEpoch))) - wBlocksFactor := fbig.Div(fbig.Mul(wBlocksFactorNum, wPrecision), wBlocksFactorDen) - deltaWeight := fbig.Add(wPowerFactor, wBlocksFactor) - - return fbig.Add(parentWeight, deltaWeight), nil -} - -// IsHeavier returns true if tipset a is heavier than tipset b, and false -// vice versa. In the rare case where two tipsets have the same weight ties -// are broken by taking the tipset with the smallest ticket. In the event that -// tickets are the same, IsHeavier will break ties by comparing the -// concatenation of block cids in the tipset. -// TODO BLOCK CID CONCAT TIE BREAKER IS NOT IN THE SPEC AND SHOULD BE -// EVALUATED BEFORE GETTING TO PRODUCTION. -func (c *ChainSelector) IsHeavier(ctx context.Context, a, b block.TipSet, aStateID, bStateID cid.Cid) (bool, error) { - aW, err := c.Weight(ctx, a, aStateID) - if err != nil { - return false, err - } - bW, err := c.Weight(ctx, b, bStateID) - if err != nil { - return false, err - } - // Without ties pass along the comparison. - if !aW.Equals(bW) { - return aW.GreaterThan(bW), nil - } - - // To break ties compare the min tickets. - aTicket, err := a.MinTicket() - if err != nil { - return false, err - } - bTicket, err := b.MinTicket() - if err != nil { - return false, err - } - - cmp := bytes.Compare(bTicket.VRFProof, aTicket.VRFProof) - if cmp != 0 { - // a is heavier if b's ticket is greater than a's ticket. - return cmp == 1, nil - } - - // Tie break on cid ids. - // TODO: I think this is drastically impacted by number of blocks in tipset - // i.e. bigger tipset is always heavier. Not sure if this is ok, need to revist. - cmp = strings.Compare(a.String(), b.String()) - if cmp == 0 { - // Caller is mistakenly calling on two identical tipsets. - return false, ErrUnorderedTipSets - } - return cmp == 1, nil -} - -func (c *ChainSelector) loadStateTree(ctx context.Context, id cid.Cid) (*state.State, error) { - return state.LoadState(ctx, c.cstore, id) -} diff --git a/internal/pkg/consensus/election.go b/internal/pkg/consensus/election.go deleted file mode 100644 index c15b9e776c..0000000000 --- a/internal/pkg/consensus/election.go +++ /dev/null @@ -1,261 +0,0 @@ -package consensus - -import ( - "context" - "fmt" - - address "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-bitfield" - "github.com/filecoin-project/sector-storage/ffiwrapper" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - acrypto "github.com/filecoin-project/specs-actors/actors/crypto" - "github.com/minio/blake2b-simd" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/postgenerator" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// Interface to PoSt verification. -type EPoStVerifier interface { - // VerifyWinningPoSt verifies an election PoSt. - VerifyWinningPoSt(ctx context.Context, post abi.WinningPoStVerifyInfo) (bool, error) - GenerateWinningPoStSectorChallenge(ctx context.Context, proofType abi.RegisteredProof, minerID abi.ActorID, randomness abi.PoStRandomness, eligibleSectorCount uint64) ([]uint64, error) -} - -type SectorsStateView interface { - MinerSectorConfiguration(ctx context.Context, maddr address.Address) (*state.MinerSectorConfiguration, error) - MinerSectorStates(ctx context.Context, maddr address.Address) (*state.MinerSectorStates, error) - MinerGetSector(ctx context.Context, maddr address.Address, sectorNum abi.SectorNumber) (*miner.SectorOnChainInfo, bool, error) -} - -// ElectionMachine generates and validates PoSt partial tickets and PoSt proofs. -type ElectionMachine struct{} - -func NewElectionMachine(_ ChainRandomness) *ElectionMachine { - return &ElectionMachine{} -} - -func (em ElectionMachine) GenerateElectionProof(ctx context.Context, entry *drand.Entry, - epoch abi.ChainEpoch, miner address.Address, worker address.Address, signer types.Signer) (crypto.VRFPi, error) { - randomness, err := electionVRFRandomness(entry, miner, epoch) - if err != nil { - return nil, errors.Wrap(err, "failed to generate election randomness randomness") - } - vrfProof, err := signer.SignBytes(ctx, randomness, worker) - if err != nil { - return nil, errors.Wrap(err, "failed to sign election post randomness") - } - return vrfProof.Data, nil -} - -// GenerateWinningPoSt creates a PoSt proof over the input miner ID and sector infos. -func (em ElectionMachine) GenerateWinningPoSt(ctx context.Context, entry *drand.Entry, epoch abi.ChainEpoch, ep postgenerator.PoStGenerator, maddr address.Address, sectors SectorsStateView) ([]block.PoStProof, error) { - entropy, err := encoding.Encode(maddr) - if err != nil { - return nil, err - } - - seed := blake2b.Sum256(entry.Data) - randomness, err := crypto.BlendEntropy(acrypto.DomainSeparationTag_WinningPoStChallengeSeed, seed[:], epoch, entropy) - - if err != nil { - return nil, err - } - poStRandomness := abi.PoStRandomness(randomness) - - minerIDuint64, err := address.IDFromAddress(maddr) - if err != nil { - return nil, err - } - minerID := abi.ActorID(minerIDuint64) - - challengedSectorInfos, err := computeWinningPoStSectorChallenges(ctx, sectors, maddr, poStRandomness) - if err != nil { - return nil, err - } - - posts, err := ep.GenerateWinningPoSt(ctx, minerID, challengedSectorInfos, poStRandomness) - if err != nil { - return nil, err - } - - return block.FromABIPoStProofs(posts...), nil -} - -func (em ElectionMachine) VerifyElectionProof(_ context.Context, entry *drand.Entry, epoch abi.ChainEpoch, miner address.Address, workerSigner address.Address, vrfProof crypto.VRFPi) error { - randomness, err := electionVRFRandomness(entry, miner, epoch) - if err != nil { - return errors.Wrap(err, "failed to reproduce election randomness") - } - - return crypto.ValidateBlsSignature(randomness, workerSigner, vrfProof) -} - -// IsWinner returns true if the input challengeTicket wins the election -func (em ElectionMachine) IsWinner(challengeTicket []byte, minerPower, networkPower abi.StoragePower) bool { - // (ChallengeTicket / MaxChallengeTicket) < ExpectedLeadersPerEpoch * (MinerPower / NetworkPower) - // -> - // ChallengeTicket * NetworkPower < ExpectedLeadersPerEpoch * MinerPower * MaxChallengeTicket - - lhs := big.PositiveFromUnsignedBytes(challengeTicket[:]) - lhs = big.Mul(lhs, networkPower) - - rhs := big.Lsh(minerPower, challengeBits) - rhs = big.Mul(rhs, big.NewInt(expectedLeadersPerEpoch)) - - return big.Cmp(lhs, rhs) < 0 -} - -// VerifyWinningPoSt verifies a Winning PoSt proof. -func (em ElectionMachine) VerifyWinningPoSt(ctx context.Context, ep EPoStVerifier, seedEntry *drand.Entry, epoch abi.ChainEpoch, proofs []block.PoStProof, mIDAddr address.Address, sectors SectorsStateView) (bool, error) { - if len(proofs) == 0 { - return false, nil - } - - entropy, err := encoding.Encode(mIDAddr) - if err != nil { - return false, err - } - - seed := blake2b.Sum256(seedEntry.Data) - randomness, err := crypto.BlendEntropy(acrypto.DomainSeparationTag_WinningPoStChallengeSeed, seed[:], epoch, entropy) - if err != nil { - return false, err - } - poStRandomness := abi.PoStRandomness(randomness) - - minerIDuint64, err := address.IDFromAddress(mIDAddr) - if err != nil { - return false, err - } - minerID := abi.ActorID(minerIDuint64) - - challengedSectorInfos, err := computeWinningPoStSectorChallenges(ctx, sectors, mIDAddr, poStRandomness) - if err != nil { - return false, err - } - - proofsPrime := make([]abi.PoStProof, len(proofs)) - for idx := range proofsPrime { - proofsPrime[idx] = abi.PoStProof{ - RegisteredProof: proofs[idx].RegisteredProof, - ProofBytes: proofs[idx].ProofBytes, - } - } - - verifyInfo := abi.WinningPoStVerifyInfo{ - Randomness: poStRandomness, - Proofs: proofsPrime, - ChallengedSectors: challengedSectorInfos, - Prover: minerID, - } - return ep.VerifyWinningPoSt(ctx, verifyInfo) -} - -// Loads infos for sectors challenged by a Winning PoSt. -func computeWinningPoStSectorChallenges(ctx context.Context, sectors SectorsStateView, mIDAddr address.Address, poStRandomness abi.PoStRandomness) ([]abi.SectorInfo, error) { - provingSet, err := computeProvingSet(ctx, sectors, mIDAddr) - if err != nil { - return nil, err - } - sectorCount, err := provingSet.Count() - if err != nil { - return nil, err - } - - conf, err := sectors.MinerSectorConfiguration(ctx, mIDAddr) - if err != nil { - return nil, err - } - rp, err := conf.SealProofType.RegisteredWinningPoStProof() - if err != nil { - return nil, err - } - - minerIDuint64, err := address.IDFromAddress(mIDAddr) - if err != nil { - return nil, err - } - minerID := abi.ActorID(minerIDuint64) - - challengeIndexes, err := ffiwrapper.ProofVerifier.GenerateWinningPoStSectorChallenge(ctx, rp, minerID, poStRandomness, sectorCount) - if err != nil { - return nil, err - } - challengedSectorInfos, err := loadChallengedSectors(ctx, sectors, mIDAddr, provingSet, challengeIndexes) - if err != nil { - return nil, err - } - return challengedSectorInfos, nil -} - -// Computes the set of sectors that may be challenged by Winning PoSt for a miner. -func computeProvingSet(ctx context.Context, sectors SectorsStateView, maddr address.Address) (*abi.BitField, error) { - sectorStates, err := sectors.MinerSectorStates(ctx, maddr) - if err != nil { - return nil, err - } - - pset, err := abi.BitFieldUnion(sectorStates.Deadlines...) - if err != nil { - return nil, err - } - - // Exclude sectors declared faulty. - // Recoveries are a subset of faults, so not needed explicitly here. - pset, err = bitfield.SubtractBitField(pset, sectorStates.Faults) - if err != nil { - return nil, err - } - - // Include new sectors. - // This is to replicate existing incorrect behaviour in Lotus. - // https://github.com/filecoin-project/go-filecoin/issues/4141 - pset, err = bitfield.MergeBitFields(pset, sectorStates.NewSectors) - return pset, err -} - -func loadChallengedSectors(ctx context.Context, sectors SectorsStateView, maddr address.Address, provingSet *abi.BitField, challengeIndexes []uint64) ([]abi.SectorInfo, error) { - challengedSectorInfos := make([]abi.SectorInfo, len(challengeIndexes)) - for i, ci := range challengeIndexes { - // TODO: replace Slice()+First() with provingSet.Get(ci) when it exists. - sectorNums, err := provingSet.Slice(ci, 1) - if err != nil { - return nil, err - } - sectorNum, err := sectorNums.First() - if err != nil { - return nil, err - } - si, found, err := sectors.MinerGetSector(ctx, maddr, abi.SectorNumber(sectorNum)) - if err != nil { - return nil, err - } - if !found { - return nil, fmt.Errorf("no sector %d challenging %d", sectorNum, ci) - } - challengedSectorInfos[i] = abi.SectorInfo{ - RegisteredProof: si.Info.RegisteredProof, - SectorNumber: si.Info.SectorNumber, - SealedCID: si.Info.SealedCID, - } - } - return challengedSectorInfos, nil -} - -func electionVRFRandomness(entry *drand.Entry, miner address.Address, epoch abi.ChainEpoch) (abi.Randomness, error) { - entropy, err := encoding.Encode(miner) - if err != nil { - return nil, errors.Wrapf(err, "failed to encode entropy") - } - seed := blake2b.Sum256(entry.Data) - return crypto.BlendEntropy(acrypto.DomainSeparationTag_ElectionProofProduction, seed[:], epoch, entropy) -} diff --git a/internal/pkg/consensus/expected.go b/internal/pkg/consensus/expected.go deleted file mode 100644 index 56847e6ed6..0000000000 --- a/internal/pkg/consensus/expected.go +++ /dev/null @@ -1,446 +0,0 @@ -package consensus - -import ( - "context" - "time" - - address "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - cid "github.com/ipfs/go-cid" - blockstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/pkg/errors" - "go.opencensus.io/trace" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics/tracing" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -var ( - // ErrStateRootMismatch is returned when the computed state root doesn't match the expected result. - ErrStateRootMismatch = errors.New("blocks state root does not match computed result") - // ErrUnorderedTipSets is returned when weight and minticket are the same between two tipsets. - ErrUnorderedTipSets = errors.New("trying to order two identical tipsets") - // ErrReceiptRootMismatch is returned when the block's receipt root doesn't match the receipt root computed for the parent tipset. - ErrReceiptRootMismatch = errors.New("blocks receipt root does not match parent tip set") -) - -// challengeBits is the number of bits in the challenge ticket's domain -const challengeBits = 256 - -// expectedLeadersPerEpoch is the mean number of leaders per epoch -const expectedLeadersPerEpoch = 5 - -// WinningPoStSectorSetLookback is the past epoch offset for reading the -// winning post sector set -const WinningPoStSectorSetLookback = 10 - -// ElectionPowerTableLookback is the past epoch offset for reading the -// election power values -const ElectionPowerTableLookback = 10 - -// DRANDEpochLookback is the past filecoin epoch offset at which DRAND entries -// in that epoch should be included in a block. -const DRANDEpochLookback = 2 - -// A Processor processes all the messages in a block or tip set. -type Processor interface { - // ProcessTipSet processes all messages in a tip set. - ProcessTipSet(context.Context, state.Tree, vm.Storage, block.TipSet, []vm.BlockMessagesInfo) ([]vm.MessageReceipt, error) -} - -// TicketValidator validates that an input ticket is valid. -type TicketValidator interface { - IsValidTicket(ctx context.Context, base block.TipSetKey, entry *drand.Entry, newPeriod bool, epoch abi.ChainEpoch, miner address.Address, workerSigner address.Address, ticket block.Ticket) error -} - -// ElectionValidator validates that an election fairly produced a winner. -type ElectionValidator interface { - IsWinner(challengeTicket []byte, minerPower, networkPower abi.StoragePower) bool - VerifyElectionProof(ctx context.Context, entry *drand.Entry, epoch abi.ChainEpoch, miner address.Address, workerSigner address.Address, vrfProof crypto.VRFPi) error - VerifyWinningPoSt(ctx context.Context, ep EPoStVerifier, seedEntry *drand.Entry, epoch abi.ChainEpoch, proofs []block.PoStProof, mIDAddr address.Address, sectors SectorsStateView) (bool, error) -} - -// StateViewer provides views into the chain state. -type StateViewer interface { - PowerStateView(root cid.Cid) PowerStateView - FaultStateView(root cid.Cid) FaultStateView -} - -type chainReader interface { - GetTipSet(tsKey block.TipSetKey) (block.TipSet, error) - GetTipSetStateRoot(tsKey block.TipSetKey) (cid.Cid, error) -} - -// Expected implements expected consensus. -type Expected struct { - // ElectionValidator validates election proofs. - ElectionValidator - - // TicketValidator validates ticket generation - TicketValidator - - // cstore is used for loading state trees during message running. - cstore cbor.IpldStore - - // bstore contains data referenced by actors within the state - // during message running. Additionally bstore is used for - // accessing the power table. - bstore blockstore.Blockstore - - // chainState is a reference to the current chain state - chainState chainReader - - // processor is what we use to process messages and pay rewards - processor Processor - - // state produces snapshots - state StateViewer - - blockTime time.Duration - - // postVerifier verifies PoSt proofs and associated data - postVerifier EPoStVerifier - - clock clock.ChainEpochClock - drand drand.IFace -} - -// Ensure Expected satisfies the Protocol interface at compile time. -var _ Protocol = (*Expected)(nil) - -// NewExpected is the constructor for the Expected consenus.Protocol module. -func NewExpected(cs cbor.IpldStore, bs blockstore.Blockstore, processor Processor, state StateViewer, bt time.Duration, - ev ElectionValidator, tv TicketValidator, pv EPoStVerifier, chainState chainReader, clock clock.ChainEpochClock, drand drand.IFace) *Expected { - return &Expected{ - cstore: cs, - blockTime: bt, - bstore: bs, - processor: processor, - state: state, - ElectionValidator: ev, - TicketValidator: tv, - postVerifier: pv, - chainState: chainState, - clock: clock, - drand: drand, - } -} - -// BlockTime returns the block time used by the consensus protocol. -func (c *Expected) BlockTime() time.Duration { - return c.blockTime -} - -// RunStateTransition applies the messages in a tipset to a state, and persists that new state. -// It errors if the tipset was not mined according to the EC rules, or if any of the messages -// in the tipset results in an error. -func (c *Expected) RunStateTransition(ctx context.Context, ts block.TipSet, blsMessages [][]*types.UnsignedMessage, secpMessages [][]*types.SignedMessage, - parentWeight big.Int, parentStateRoot cid.Cid, parentReceiptRoot cid.Cid) (root cid.Cid, receipts []vm.MessageReceipt, err error) { - ctx, span := trace.StartSpan(ctx, "Expected.RunStateTransition") - span.AddAttributes(trace.StringAttribute("tipset", ts.String())) - defer tracing.AddErrorEndSpan(ctx, span, &err) - - if err := c.validateMining(ctx, ts, parentStateRoot, blsMessages, secpMessages, parentWeight, parentReceiptRoot); err != nil { - return cid.Undef, []vm.MessageReceipt{}, err - } - - priorState, err := c.loadStateTree(ctx, parentStateRoot) - if err != nil { - return cid.Undef, []vm.MessageReceipt{}, err - } - vms := vm.NewStorage(c.bstore) - var newState state.Tree - newState, receipts, err = c.runMessages(ctx, priorState, vms, ts, blsMessages, secpMessages) - if err != nil { - return cid.Undef, []vm.MessageReceipt{}, err - } - err = vms.Flush() - if err != nil { - return cid.Undef, []vm.MessageReceipt{}, err - } - - root, err = newState.Commit(ctx) - if err != nil { - return cid.Undef, []vm.MessageReceipt{}, err - } - return root, receipts, err -} - -// validateMining checks validity of the ticket, proof, signature and miner -// address of every block in the tipset. -func (c *Expected) validateMining(ctx context.Context, - ts block.TipSet, - parentStateRoot cid.Cid, - blsMsgs [][]*types.UnsignedMessage, - secpMsgs [][]*types.SignedMessage, - parentWeight big.Int, - parentReceiptRoot cid.Cid) error { - - keyStateView := c.state.PowerStateView(parentStateRoot) - sigValidator := appstate.NewSignatureValidator(keyStateView) - faultsStateView := c.state.FaultStateView(parentStateRoot) - keyPowerTable := NewPowerTableView(keyStateView, faultsStateView) - - tsHeight, err := ts.Height() - if err != nil { - return errors.Wrap(err, "could not get new tipset's height") - } - - sectorSetAncestor, err := chain.FindTipsetAtEpoch(ctx, ts, tsHeight-WinningPoStSectorSetLookback, c.chainState) - if err != nil { - return errors.Wrap(err, "failed to find sector set lookback ancestor") - } - sectorSetStateRoot, err := c.chainState.GetTipSetStateRoot(sectorSetAncestor.Key()) - if err != nil { - return errors.Wrap(err, "failed to get state root for sectorSet ancestor") - } - sectorSetStateView := c.state.PowerStateView(sectorSetStateRoot) - - electionPowerAncestor, err := chain.FindTipsetAtEpoch(ctx, ts, tsHeight-ElectionPowerTableLookback, c.chainState) - if err != nil { - return errors.Wrap(err, "failed to find election power lookback ancestor") - } - electionPowerStateRoot, err := c.chainState.GetTipSetStateRoot(electionPowerAncestor.Key()) - if err != nil { - return errors.Wrap(err, "failed to get state root for election power ancestor") - } - electionPowerStateView := c.state.PowerStateView(electionPowerStateRoot) - electionPowerTable := NewPowerTableView(electionPowerStateView, faultsStateView) - - for i := 0; i < ts.Len(); i++ { - blk := ts.At(i) - - // confirm block state root matches parent state root - if !parentStateRoot.Equals(blk.StateRoot.Cid) { - return ErrStateRootMismatch - } - - // confirm block receipts match parent receipts - if !parentReceiptRoot.Equals(blk.MessageReceipts.Cid) { - return ErrReceiptRootMismatch - } - - if !parentWeight.Equals(blk.ParentWeight) { - return errors.Errorf("block %s has invalid parent weight %d expected %d", blk.Cid().String(), blk.ParentWeight, parentWeight) - } - workerAddr, err := keyPowerTable.WorkerAddr(ctx, blk.Miner) - if err != nil { - return errors.Wrap(err, "failed to read worker address of block miner") - } - workerSignerAddr, err := keyPowerTable.SignerAddress(ctx, workerAddr) - if err != nil { - return errors.Wrapf(err, "failed to convert address, %s, to a signing address", workerAddr.String()) - } - // Validate block signature - if blk.BlockSig == nil { - return errors.Errorf("invalid nil block signature") - } - if err := crypto.ValidateSignature(blk.SignatureData(), workerSignerAddr, *blk.BlockSig); err != nil { - return errors.Wrap(err, "block signature invalid") - } - - // Verify that the BLS signature aggregate is correct - if err := sigValidator.ValidateBLSMessageAggregate(ctx, blsMsgs[i], blk.BLSAggregateSig); err != nil { - return errors.Wrapf(err, "bls message verification failed for block %s", blk.Cid()) - } - - // Verify that all secp message signatures are correct - for i, msg := range secpMsgs[i] { - if err := sigValidator.ValidateMessageSignature(ctx, msg); err != nil { - return errors.Wrapf(err, "invalid signature for secp message %d in block %s", i, blk.Cid()) - } - } - - err = c.validateDRANDEntries(ctx, blk) - if err != nil { - return errors.Wrapf(err, "invalid DRAND entries") - } - - electionEntry, err := c.electionEntry(ctx, blk) - if err != nil { - return errors.Wrapf(err, "failed to get election entry") - } - err = c.VerifyElectionProof(ctx, electionEntry, blk.Height, blk.Miner, workerSignerAddr, blk.ElectionProof.VRFProof) - if err != nil { - return errors.Wrapf(err, "failed to verify election proof") - } - // TODO this is not using nominal power, which must take into account undeclared faults - // TODO the nominal power must be tested against the minimum (power.minerNominalPowerMeetsConsensusMinimum) - // See https://github.com/filecoin-project/go-filecoin/issues/3958 - minerPower, err := electionPowerTable.MinerClaimedPower(ctx, blk.Miner) - if err != nil { - return errors.Wrap(err, "failed to read miner claim from power table") - } - networkPower, err := electionPowerTable.NetworkTotalPower(ctx) - if err != nil { - return errors.Wrap(err, "failed to read power table") - } - electionVRFDigest := blk.ElectionProof.VRFProof.Digest() - wins := c.IsWinner(electionVRFDigest[:], minerPower, networkPower) - if !wins { - return errors.Errorf("Block did not win election") - } - - valid, err := c.VerifyWinningPoSt(ctx, c.postVerifier, electionEntry, blk.Height, blk.PoStProofs, blk.Miner, sectorSetStateView) - if err != nil { - return errors.Wrapf(err, "failed verifying winning post") - } - if !valid { - return errors.Errorf("Invalid winning post") - } - - // Ticket was correctly generated by miner - sampleEpoch := blk.Height - miner.ElectionLookback - newPeriod := len(blk.BeaconEntries) > 0 - if err := c.IsValidTicket(ctx, blk.Parents, electionEntry, newPeriod, sampleEpoch, blk.Miner, workerSignerAddr, blk.Ticket); err != nil { - return errors.Wrapf(err, "invalid ticket: %s in block %s", blk.Ticket.String(), blk.Cid()) - } - } - return nil -} - -func (c *Expected) validateDRANDEntries(ctx context.Context, blk *block.Block) error { - targetEpoch := blk.Height - DRANDEpochLookback - parent, err := c.chainState.GetTipSet(blk.Parents) - if err != nil { - return err - } - - numEntries := len(blk.BeaconEntries) - // Note we don't check for genesis condition because first block must include > 0 drand entries - if numEntries == 0 { - prevEntry, err := chain.FindLatestDRAND(ctx, parent, c.chainState) - if err != nil { - return err - } - nextDRANDTime := c.drand.StartTimeOfRound(prevEntry.Round + drand.Round(1)) - if c.clock.EpochAtTime(nextDRANDTime) > targetEpoch { - return nil - } - return errors.New("Block missing required DRAND entry") - } - - lastRound := blk.BeaconEntries[numEntries-1].Round - nextDRANDTime := c.drand.StartTimeOfRound(lastRound + 1) - - if !(c.clock.EpochAtTime(nextDRANDTime) > targetEpoch) { - return errors.New("Block does not include all drand entries required") - } - - // Validate that DRAND entries link up - // Detect case where we have just mined with genesis block as parent - parentHeight, err := parent.Height() - if err != nil { - return err - } - // No prevEntry in first block so this is skipped first time around - if parentHeight != abi.ChainEpoch(0) { - prevEntry, err := chain.FindLatestDRAND(ctx, parent, c.chainState) - if err != nil { - return err - } - valid, err := c.drand.VerifyEntry(prevEntry, blk.BeaconEntries[0]) - if err != nil { - return err - } - if !valid { - return errors.Errorf("invalid DRAND link rounds %d and %d", prevEntry.Round, blk.BeaconEntries[0].Round) - } - } - for i := 0; i < numEntries-1; i++ { - valid, err := c.drand.VerifyEntry(blk.BeaconEntries[i], blk.BeaconEntries[i+1]) - if err != nil { - return err - } - if !valid { - return errors.Errorf("invalid DRAND link rounds %d and %d", blk.BeaconEntries[i].Round, blk.BeaconEntries[i+1].Round) - } - } - - return nil - -} - -func (c *Expected) electionEntry(ctx context.Context, blk *block.Block) (*drand.Entry, error) { - if len(blk.BeaconEntries) > 0 { - return blk.BeaconEntries[len(blk.BeaconEntries)-1], nil - } - - parent, err := c.chainState.GetTipSet(blk.Parents) - if err != nil { - return nil, err - } - return chain.FindLatestDRAND(ctx, parent, c.chainState) -} - -// runMessages applies the messages of all blocks within the input -// tipset to the input base state. Messages are extracted from tipset -// blocks sorted by their ticket bytes and run as a single state transition -// for the entire tipset. The output state must be flushed after calling to -// guarantee that the state transitions propagate. -// Messages that fail to apply are dropped on the floor (and no receipt is emitted). -func (c *Expected) runMessages(ctx context.Context, st state.Tree, vms vm.Storage, ts block.TipSet, - blsMessages [][]*types.UnsignedMessage, secpMessages [][]*types.SignedMessage) (state.Tree, []vm.MessageReceipt, error) { - msgs := []vm.BlockMessagesInfo{} - - // build message information per block - for i := 0; i < ts.Len(); i++ { - blk := ts.At(i) - - messageCount := len(blsMessages[i]) + len(secpMessages[i]) - if messageCount > block.BlockMessageLimit { - return nil, nil, errors.Errorf("Number of messages in block %s is %d which exceeds block message limit", blk.Cid(), messageCount) - } - - msgInfo := vm.BlockMessagesInfo{ - BLSMessages: blsMessages[i], - SECPMessages: secpMessages[i], - Miner: blk.Miner, - } - - msgs = append(msgs, msgInfo) - } - - // process tipset - receipts, err := c.processor.ProcessTipSet(ctx, st, vms, ts, msgs) - if err != nil { - return nil, nil, errors.Wrap(err, "error validating tipset") - } - - return st, receipts, nil -} - -func (c *Expected) loadStateTree(ctx context.Context, id cid.Cid) (*state.State, error) { - return state.LoadState(ctx, c.cstore, id) -} - -// DefaultStateViewer a state viewer to the power state view interface. -type DefaultStateViewer struct { - *appstate.Viewer -} - -// AsDefaultStateViewer adapts a state viewer to a power state viewer. -func AsDefaultStateViewer(v *appstate.Viewer) DefaultStateViewer { - return DefaultStateViewer{v} -} - -// PowerStateView returns a power state view for a state root. -func (v *DefaultStateViewer) PowerStateView(root cid.Cid) PowerStateView { - return v.Viewer.StateView(root) -} - -// FaultStateView returns a fault state view for a state root. -func (v *DefaultStateViewer) FaultStateView(root cid.Cid) FaultStateView { - return v.Viewer.StateView(root) -} diff --git a/internal/pkg/consensus/expected_test.go b/internal/pkg/consensus/expected_test.go deleted file mode 100644 index 3dc6f39e57..0000000000 --- a/internal/pkg/consensus/expected_test.go +++ /dev/null @@ -1,297 +0,0 @@ -package consensus_test - -import ( - "context" - "errors" - "strings" - "testing" - "time" - - "github.com/filecoin-project/go-address" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - blockstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - bls "github.com/filecoin-project/filecoin-ffi" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" -) - -type TestChainReader struct{} - -func (reader *TestChainReader) GetTipSet(tsKey block.TipSetKey) (block.TipSet, error) { - return block.UndefTipSet, errors.New("TestChainReader unimplemented") -} -func (reader *TestChainReader) GetTipSetStateRoot(tsKey block.TipSetKey) (cid.Cid, error) { - return cid.Undef, errors.New("TestChainReader unimplemented") -} - -// TestExpected_RunStateTransition_validateMining is concerned only with validateMining behavior. -// Fully unit-testing RunStateTransition is difficult due to this requiring that you -// completely set up a valid state tree with a valid matching TipSet. RunStateTransition is tested -// with integration tests (see chain_daemon_test.go for example) -func TestExpected_RunStateTransition_validateMining(t *testing.T) { - tf.UnitTest(t) - t.Skip("requires VM to support state construction by messages") - - ctx := context.Background() - mockSigner, kis := types.NewMockSignersAndKeyInfo(3) - fc := clock.NewFake(time.Unix(1234567890, 0)) - blockTime := 30 * time.Second - propDelay := 5 * time.Second - cl := clock.NewChainClockFromClock(1234567890, blockTime, propDelay, fc) - drand := &drand.Fake{} - - t.Run("passes the validateMining section when given valid mining blocks", func(t *testing.T) { - cistore, bstore := setupCborBlockstore() - genesisBlock, err := gengen.DefaultGenesis(cistore, bstore) - require.NoError(t, err) - - //Set miner actor - - pTipSet := block.RequireNewTipSet(t, genesisBlock) - nextRoot, miners, m2w := setTree(ctx, t, kis, cistore, bstore, genesisBlock.StateRoot.Cid) - - views := consensus.AsDefaultStateViewer(appstate.NewViewer(cistore)) - exp := consensus.NewExpected(cistore, bstore, th.NewFakeProcessor(), &views, th.BlockTimeTest, - &consensus.FakeElectionMachine{}, &consensus.FakeTicketMachine{}, &consensus.TestElectionPoster{}, &TestChainReader{}, cl, drand) - - nextBlocks := requireMakeNBlocks(t, 3, pTipSet, nextRoot, types.EmptyReceiptsCID, miners, m2w, mockSigner) - tipSet := block.RequireNewTipSet(t, nextBlocks...) - - emptyBLSMessages, emptyMessages := emptyMessages(len(nextBlocks)) - _, _, err = exp.RunStateTransition(ctx, tipSet, emptyBLSMessages, emptyMessages, - nextBlocks[0].ParentWeight, nextBlocks[0].StateRoot.Cid, nextBlocks[0].MessageReceipts.Cid) - assert.NoError(t, err) - }) - - t.Run("returns nil + mining error when election proof validation fails", func(t *testing.T) { - cistore, bstore := setupCborBlockstore() - genesisBlock, err := gengen.DefaultGenesis(cistore, bstore) - require.NoError(t, err) - - pTipSet := block.RequireNewTipSet(t, genesisBlock) - - miners, minerToWorker := minerToWorkerFromAddrs(ctx, t, state.NewState(cistore), vm.NewStorage(bstore), kis) - views := consensus.AsDefaultStateViewer(appstate.NewViewer(cistore)) - exp := consensus.NewExpected(cistore, bstore, consensus.NewDefaultProcessor(&vm.FakeSyscalls{}, &consensus.FakeChainRandomness{}), &views, th.BlockTimeTest, - &consensus.FailingElectionValidator{}, &consensus.FakeTicketMachine{}, &consensus.TestElectionPoster{}, &TestChainReader{}, cl, drand) - - nextBlocks := requireMakeNBlocks(t, 3, pTipSet, genesisBlock.StateRoot.Cid, types.EmptyReceiptsCID, miners, minerToWorker, mockSigner) - tipSet := block.RequireNewTipSet(t, nextBlocks...) - - emptyBLSMessages, emptyMessages := emptyMessages(len(nextBlocks)) - - _, _, err = exp.RunStateTransition(ctx, tipSet, emptyBLSMessages, emptyMessages, genesisBlock.ParentWeight, genesisBlock.StateRoot.Cid, genesisBlock.MessageReceipts.Cid) - require.Error(t, err) - assert.True(t, strings.Contains(err.Error(), "lost election")) - }) - - // TODO: test that the correct tickets are processed for election and ticket generation - - t.Run("fails when bls signature is not valid across bls messages", func(t *testing.T) { - cistore, bstore := setupCborBlockstore() - genesisBlock, err := gengen.DefaultGenesis(cistore, bstore) - require.NoError(t, err) - - miners, minerToWorker := minerToWorkerFromAddrs(ctx, t, state.NewState(cistore), vm.NewStorage(bstore), kis) - views := consensus.AsDefaultStateViewer(appstate.NewViewer(cistore)) - exp := consensus.NewExpected(cistore, bstore, th.NewFakeProcessor(), &views, th.BlockTimeTest, &consensus.FakeElectionMachine{}, &consensus.FakeTicketMachine{}, &consensus.TestElectionPoster{}, &TestChainReader{}, cl, drand) - - pTipSet := block.RequireNewTipSet(t, genesisBlock) - nextBlocks := requireMakeNBlocks(t, 3, pTipSet, genesisBlock.StateRoot.Cid, types.EmptyReceiptsCID, miners, minerToWorker, mockSigner) - tipSet := block.RequireNewTipSet(t, nextBlocks...) - - _, emptyMessages := emptyMessages(len(nextBlocks)) - - // Create BLS messages but do not update signature - blsKey := bls.PrivateKeyPublicKey(bls.PrivateKeyGenerate()) - blsAddr, err := address.NewBLSAddress(blsKey[:]) - require.NoError(t, err) - - blsMessages := make([][]*types.UnsignedMessage, tipSet.Len()) - msg := types.NewUnsignedMessage(blsAddr, vmaddr.RequireIDAddress(t, 100), 0, types.NewAttoFILFromFIL(0), builtin.MethodSend, []byte{}) - blsMessages[0] = append(blsMessages[0], msg) - - _, _, err = exp.RunStateTransition(ctx, tipSet, blsMessages, emptyMessages, nextBlocks[0].ParentWeight, nextBlocks[0].StateRoot.Cid, nextBlocks[0].MessageReceipts.Cid) - require.Error(t, err) - assert.Contains(t, err.Error(), "block BLS signature does not validate") - }) - - t.Run("fails when secp message has invalid signature", func(t *testing.T) { - cistore, bstore := setupCborBlockstore() - genesisBlock, err := gengen.DefaultGenesis(cistore, bstore) - require.NoError(t, err) - - miners, minerToWorker := minerToWorkerFromAddrs(ctx, t, state.NewState(cistore), vm.NewStorage(bstore), kis) - views := consensus.AsDefaultStateViewer(appstate.NewViewer(cistore)) - exp := consensus.NewExpected(cistore, bstore, th.NewFakeProcessor(), &views, th.BlockTimeTest, &consensus.FakeElectionMachine{}, &consensus.FakeTicketMachine{}, &consensus.TestElectionPoster{}, &TestChainReader{}, cl, drand) - - pTipSet := block.RequireNewTipSet(t, genesisBlock) - nextBlocks := requireMakeNBlocks(t, 3, pTipSet, genesisBlock.StateRoot.Cid, types.EmptyReceiptsCID, miners, minerToWorker, mockSigner) - tipSet := block.RequireNewTipSet(t, nextBlocks...) - - emptyBLSMessages, _ := emptyMessages(len(nextBlocks)) - - // Create secp message with invalid signature - keys := types.MustGenerateKeyInfo(1, 42) - blsAddr, err := address.NewSecp256k1Address(keys[0].PublicKey()) - require.NoError(t, err) - - secpMessages := make([][]*types.SignedMessage, tipSet.Len()) - msg := types.NewUnsignedMessage(blsAddr, vmaddr.RequireIDAddress(t, 100), 0, types.NewAttoFILFromFIL(0), builtin.MethodSend, []byte{}) - smsg := &types.SignedMessage{ - Message: *msg, - Signature: crypto.Signature{ - Type: crypto.SigTypeSecp256k1, - Data: []byte("not a signature"), - }, - } - secpMessages[0] = append(secpMessages[0], smsg) - - _, _, err = exp.RunStateTransition(ctx, tipSet, emptyBLSMessages, secpMessages, nextBlocks[0].ParentWeight, nextBlocks[0].StateRoot.Cid, nextBlocks[0].MessageReceipts.Cid) - require.Error(t, err) - assert.Contains(t, err.Error(), "secp message signature invalid") - }) - - t.Run("returns nil + mining error when ticket validation fails", func(t *testing.T) { - cistore, bstore := setupCborBlockstore() - genesisBlock, err := gengen.DefaultGenesis(cistore, bstore) - require.NoError(t, err) - - miners, minerToWorker := minerToWorkerFromAddrs(ctx, t, state.NewState(cistore), vm.NewStorage(bstore), kis) - views := consensus.AsDefaultStateViewer(appstate.NewViewer(cistore)) - exp := consensus.NewExpected(cistore, bstore, th.NewFakeProcessor(), &views, th.BlockTimeTest, &consensus.FakeElectionMachine{}, &consensus.FailingTicketValidator{}, &consensus.TestElectionPoster{}, &TestChainReader{}, cl, drand) - - pTipSet := block.RequireNewTipSet(t, genesisBlock) - nextBlocks := requireMakeNBlocks(t, 3, pTipSet, genesisBlock.StateRoot.Cid, types.EmptyReceiptsCID, miners, minerToWorker, mockSigner) - tipSet := block.RequireNewTipSet(t, nextBlocks...) - - emptyBLSMessages, emptyMessages := emptyMessages(len(nextBlocks)) - - _, _, err = exp.RunStateTransition(ctx, tipSet, emptyBLSMessages, emptyMessages, genesisBlock.ParentWeight, genesisBlock.StateRoot.Cid, genesisBlock.MessageReceipts.Cid) - require.NotNil(t, err) - assert.Contains(t, err.Error(), "invalid ticket") - }) - - t.Run("returns nil + mining error when signature is invalid", func(t *testing.T) { - cistore, bstore := setupCborBlockstore() - genesisBlock, err := gengen.DefaultGenesis(cistore, bstore) - require.NoError(t, err) - - miners, minerToWorker := minerToWorkerFromAddrs(ctx, t, state.NewState(cistore), vm.NewStorage(bstore), kis) - views := consensus.AsDefaultStateViewer(appstate.NewViewer(cistore)) - exp := consensus.NewExpected(cistore, bstore, th.NewFakeProcessor(), &views, th.BlockTimeTest, &consensus.FakeElectionMachine{}, &consensus.FakeTicketMachine{}, &consensus.TestElectionPoster{}, &TestChainReader{}, cl, drand) - - pTipSet := block.RequireNewTipSet(t, genesisBlock) - nextBlocks := requireMakeNBlocks(t, 3, pTipSet, genesisBlock.StateRoot.Cid, types.EmptyReceiptsCID, miners, minerToWorker, mockSigner) - - // Give block 0 an invalid signature - nextBlocks[0].BlockSig = nextBlocks[1].BlockSig - - tipSet := block.RequireNewTipSet(t, nextBlocks...) - emptyBLSMessages, emptyMessages := emptyMessages(len(nextBlocks)) - - _, _, err = exp.RunStateTransition(ctx, tipSet, emptyBLSMessages, emptyMessages, nextBlocks[0].ParentWeight, nextBlocks[0].StateRoot.Cid, nextBlocks[0].MessageReceipts.Cid) - assert.EqualError(t, err, "block signature invalid") - }) - - t.Run("returns nil + error when parent weight invalid", func(t *testing.T) { - cistore, bstore := setupCborBlockstore() - genesisBlock, err := gengen.DefaultGenesis(cistore, bstore) - require.NoError(t, err) - - miners, minerToWorker := minerToWorkerFromAddrs(ctx, t, state.NewState(cistore), vm.NewStorage(bstore), kis) - views := consensus.AsDefaultStateViewer(appstate.NewViewer(cistore)) - exp := consensus.NewExpected(cistore, bstore, th.NewFakeProcessor(), &views, th.BlockTimeTest, &consensus.FakeElectionMachine{}, &consensus.FakeTicketMachine{}, &consensus.TestElectionPoster{}, &TestChainReader{}, cl, drand) - - pTipSet := block.RequireNewTipSet(t, genesisBlock) - nextBlocks := requireMakeNBlocks(t, 3, pTipSet, genesisBlock.StateRoot.Cid, types.EmptyReceiptsCID, miners, minerToWorker, mockSigner) - tipSet := block.RequireNewTipSet(t, nextBlocks...) - - invalidParentWeight := fbig.NewInt(6) - - emptyBLSMessages, emptyMessages := emptyMessages(len(nextBlocks)) - - _, _, err = exp.RunStateTransition(ctx, tipSet, emptyBLSMessages, emptyMessages, invalidParentWeight, nextBlocks[0].StateRoot.Cid, nextBlocks[0].MessageReceipts.Cid) - assert.Contains(t, err.Error(), "invalid parent weight") - }) -} - -func emptyMessages(numBlocks int) ([][]*types.UnsignedMessage, [][]*types.SignedMessage) { - var emptyBLSMessages [][]*types.UnsignedMessage - var emptyMessages [][]*types.SignedMessage - for i := 0; i < numBlocks; i++ { - emptyBLSMessages = append(emptyBLSMessages, []*types.UnsignedMessage{}) - emptyMessages = append(emptyMessages, []*types.SignedMessage{}) - } - return emptyBLSMessages, emptyMessages -} - -func setupCborBlockstore() (*cborutil.IpldStore, blockstore.Blockstore) { - bs := blockstore.NewBlockstore(datastore.NewMapDatastore()) - cis := cborutil.NewIpldStore(bs) - - return cis, bs -} - -// requireMakeNBlocks sets up 3 blocks with 3 owner actors and 3 miner actors and puts them in the state tree. -// the owner actors have associated mockSigners for signing blocks and tickets. -func requireMakeNBlocks(t *testing.T, n int, pTipSet block.TipSet, root cid.Cid, receiptRoot cid.Cid, minerAddrs []address.Address, m2w map[address.Address]address.Address, signer types.Signer) []*block.Block { - require.True(t, n <= len(minerAddrs)) - blocks := make([]*block.Block, n) - for i := 0; i < n; i++ { - blocks[i] = th.RequireSignedTestBlockFromTipSet(t, pTipSet, root, receiptRoot, 1, minerAddrs[i], m2w[minerAddrs[i]], signer) - } - return blocks -} - -func minerToWorkerFromAddrs(ctx context.Context, t *testing.T, tree state.Tree, vms vm.Storage, kis []crypto.KeyInfo) ([]address.Address, map[address.Address]address.Address) { - minerAddrs := make([]address.Address, len(kis)) - require.Equal(t, len(kis), len(minerAddrs)) - minerToWorker := make(map[address.Address]address.Address, len(kis)) - for i := 0; i < len(kis); i++ { - addr, err := kis[i].Address() - require.NoError(t, err) - - _, minerAddrs[i] = th.RequireNewMinerActor(ctx, t, tree, vms, addr, 10000, th.RequireRandomPeerID(t), types.ZeroAttoFIL) - - minerToWorker[minerAddrs[i]] = addr - } - return minerAddrs, minerToWorker -} - -func setTree(ctx context.Context, t *testing.T, kis []crypto.KeyInfo, cstore cbor.IpldStore, bstore blockstore.Blockstore, inRoot cid.Cid) (cid.Cid, []address.Address, map[address.Address]address.Address) { - tree, err := state.LoadState(ctx, cstore, inRoot) - require.NoError(t, err) - miners := make([]address.Address, len(kis)) - m2w := make(map[address.Address]address.Address, len(kis)) - vms := vm.NewStorage(bstore) - for i, ki := range kis { - workerAddr, err := ki.Address() - require.NoError(t, err) - _, minerAddr := th.RequireNewMinerActor(ctx, t, tree, vms, workerAddr, 10000, th.RequireRandomPeerID(t), types.ZeroAttoFIL) - miners[i] = minerAddr - m2w[minerAddr] = workerAddr - } - root, err := tree.Commit(ctx) - require.NoError(t, err) - return root, miners, m2w -} diff --git a/internal/pkg/consensus/power_table_view.go b/internal/pkg/consensus/power_table_view.go deleted file mode 100644 index ff553d0d6a..0000000000 --- a/internal/pkg/consensus/power_table_view.go +++ /dev/null @@ -1,82 +0,0 @@ -package consensus - -import ( - "context" - - addr "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - - "github.com/filecoin-project/go-filecoin/internal/pkg/state" -) - -// PowerStateView is a view of chain state for election computations, typically at some lookback from the -// immediate parent state. -// This type isn't doing much that the state view doesn't already do, consider removing it. -type PowerStateView interface { - state.AccountStateView - MinerSectorConfiguration(ctx context.Context, maddr addr.Address) (*state.MinerSectorConfiguration, error) - MinerControlAddresses(ctx context.Context, maddr addr.Address) (owner, worker addr.Address, err error) - MinerSectorStates(ctx context.Context, maddr addr.Address) (*state.MinerSectorStates, error) - MinerGetSector(ctx context.Context, maddr addr.Address, sectorNum abi.SectorNumber) (*miner.SectorOnChainInfo, bool, error) - PowerNetworkTotal(ctx context.Context) (*state.NetworkPower, error) - MinerClaimedPower(ctx context.Context, miner addr.Address) (raw, qa abi.StoragePower, err error) -} - -// FaultStateView is a view of chain state for adjustment of miner power claims based on changes since the -// power state's lookback (primarily, the miner ceasing to be registered). -type FaultStateView interface { - MinerExists(ctx context.Context, maddr addr.Address) (bool, error) -} - -// An interface to the network power table for elections. -// Elections use the quality-adjusted power, rather than raw byte power. -type PowerTableView struct { - state PowerStateView - faultState FaultStateView -} - -func NewPowerTableView(state PowerStateView, faultState FaultStateView) PowerTableView { - return PowerTableView{ - state: state, - faultState: faultState, - } -} - -// Returns the network's total quality-adjusted power. -func (v PowerTableView) NetworkTotalPower(ctx context.Context) (abi.StoragePower, error) { - total, err := v.state.PowerNetworkTotal(ctx) - if err != nil { - return big.Zero(), err - } - return total.QualityAdjustedPower, nil -} - -// Returns a miner's claimed quality-adjusted power. -func (v PowerTableView) MinerClaimedPower(ctx context.Context, mAddr addr.Address) (abi.StoragePower, error) { - _, qa, err := v.state.MinerClaimedPower(ctx, mAddr) - if err != nil { - return big.Zero(), err - } - // Only return claim if fault state still tracks miner - exists, err := v.faultState.MinerExists(ctx, mAddr) - if err != nil { - return big.Zero(), err - } - if !exists { // miner was slashed - return big.Zero(), nil - } - return qa, nil -} - -// WorkerAddr returns the worker address for a miner actor. -func (v PowerTableView) WorkerAddr(ctx context.Context, mAddr addr.Address) (addr.Address, error) { - _, worker, err := v.state.MinerControlAddresses(ctx, mAddr) - return worker, err -} - -// SignerAddress returns the public key address associated with the given address. -func (v PowerTableView) SignerAddress(ctx context.Context, a addr.Address) (addr.Address, error) { - return v.state.AccountSignerAddress(ctx, a) -} diff --git a/internal/pkg/consensus/power_table_view_test.go b/internal/pkg/consensus/power_table_view_test.go deleted file mode 100644 index 4438cb492a..0000000000 --- a/internal/pkg/consensus/power_table_view_test.go +++ /dev/null @@ -1,133 +0,0 @@ -package consensus_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/ipfs/go-cid" - bstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" -) - -func TestTotal(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - numCommittedSectors := uint64(19) - numMiners := 3 - kis := types.MustGenerateBLSKeyInfo(numMiners, 0) - - cst, _, root := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis) - - table := consensus.NewPowerTableView(state.NewView(cst, root), state.NewView(cst, root)) - networkPower, err := table.NetworkTotalPower(ctx) - require.NoError(t, err) - - // TODO: test that the QA power is used when it differs from raw byte power after gengen computes it properly - // https://github.com/filecoin-project/go-filecoin/issues/4011 - expected := big.NewIntUnsigned(uint64(constants.DevSectorSize) * numCommittedSectors * uint64(numMiners)) - assert.True(t, expected.Equals(networkPower)) -} - -func TestMiner(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - kis := types.MustGenerateBLSKeyInfo(1, 0) - - numCommittedSectors := uint64(10) - cst, addrs, root := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis) - addr := addrs[0] - - table := consensus.NewPowerTableView(state.NewView(cst, root), state.NewView(cst, root)) - actual, err := table.MinerClaimedPower(ctx, addr) - require.NoError(t, err) - - expected := abi.NewStoragePower(int64(uint64(constants.DevSectorSize) * numCommittedSectors)) - assert.True(t, expected.Equals(actual)) - assert.Equal(t, expected, actual) -} - -func TestNoPowerAfterSlash(t *testing.T) { - tf.UnitTest(t) - // setup lookback state with 3 miners - ctx := context.Background() - numCommittedSectors := uint64(19) - numMiners := 3 - kis := types.MustGenerateBLSKeyInfo(numMiners, 0) - cstPower, addrsPower, rootPower := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis) - cstFaults, _, rootFaults := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis[0:2]) // drop the third key - table := consensus.NewPowerTableView(state.NewView(cstPower, rootPower), state.NewView(cstFaults, rootFaults)) - - // verify that faulted miner claim is 0 power - claim, err := table.MinerClaimedPower(ctx, addrsPower[2]) - require.NoError(t, err) - assert.Equal(t, abi.NewStoragePower(0), claim) -} - -func TestTotalPowerUnaffectedBySlash(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - numCommittedSectors := uint64(19) - numMiners := 3 - kis := types.MustGenerateBLSKeyInfo(numMiners, 0) - cstPower, _, rootPower := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis) - cstFaults, _, rootFaults := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis[0:2]) // drop the third key - table := consensus.NewPowerTableView(state.NewView(cstPower, rootPower), state.NewView(cstFaults, rootFaults)) - - // verify that faulted miner claim is 0 power - total, err := table.NetworkTotalPower(ctx) - require.NoError(t, err) - expected := abi.NewStoragePower(int64(uint64(constants.DevSectorSize) * numCommittedSectors * uint64(numMiners))) - - assert.Equal(t, expected, total) -} - -func requireMinerWithNumCommittedSectors(ctx context.Context, t *testing.T, numCommittedSectors uint64, ownerKeys []crypto.KeyInfo) (*cborutil.IpldStore, []address.Address, cid.Cid) { - r := repo.NewInMemoryRepo() - bs := bstore.NewBlockstore(r.Datastore()) - cst := cborutil.NewIpldStore(bs) - numMiners := len(ownerKeys) - minerConfigs := make([]*gengen.CreateStorageMinerConfig, numMiners) - for i := 0; i < numMiners; i++ { - commCfgs, err := gengen.MakeCommitCfgs(int(numCommittedSectors)) - require.NoError(t, err) - minerConfigs[i] = &gengen.CreateStorageMinerConfig{ - Owner: i, - CommittedSectors: commCfgs, - SealProofType: constants.DevSealProofType, - } - } - - // set up genesis block containing some miners with non-zero power - genCfg := &gengen.GenesisCfg{} - require.NoError(t, gengen.MinerConfigs(minerConfigs)(genCfg)) - require.NoError(t, gengen.NetworkName("ptvtest")(genCfg)) - require.NoError(t, gengen.ImportKeys(ownerKeys, "1000000")(genCfg)) - - info, err := gengen.GenGen(ctx, genCfg, bs) - require.NoError(t, err) - - var genesis block.Block - require.NoError(t, cst.Get(ctx, info.GenesisCid, &genesis)) - retAddrs := make([]address.Address, numMiners) - for i := 0; i < numMiners; i++ { - retAddrs[i] = info.Miners[i].Address - } - return cst, retAddrs, genesis.StateRoot.Cid -} diff --git a/internal/pkg/consensus/processor.go b/internal/pkg/consensus/processor.go deleted file mode 100644 index 6dccc29e6d..0000000000 --- a/internal/pkg/consensus/processor.go +++ /dev/null @@ -1,93 +0,0 @@ -package consensus - -import ( - "context" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/crypto" - "go.opencensus.io/trace" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics/tracing" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -// ApplicationResult contains the result of successfully applying one message. -// ExecutionError might be set and the message can still be applied successfully. -// See ApplyMessage() for details. -type ApplicationResult struct { - Receipt *vm.MessageReceipt - ExecutionError error -} - -// ApplyMessageResult is the result of applying a single message. -type ApplyMessageResult struct { - ApplicationResult // Application-level result, if error is nil. - Failure error // Failure to apply the message - FailureIsPermanent bool // Whether failure is permanent, has no chance of succeeding later. -} - -type ChainRandomness interface { - SampleChainRandomness(ctx context.Context, head block.TipSetKey, tag crypto.DomainSeparationTag, epoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) -} - -// DefaultProcessor handles all block processing. -type DefaultProcessor struct { - actors vm.ActorCodeLoader - syscalls vm.SyscallsImpl - rnd ChainRandomness -} - -var _ Processor = (*DefaultProcessor)(nil) - -// NewDefaultProcessor creates a default processor from the given state tree and vms. -func NewDefaultProcessor(syscalls vm.SyscallsImpl, rnd ChainRandomness) *DefaultProcessor { - return NewConfiguredProcessor(vm.DefaultActors, syscalls, rnd) -} - -// NewConfiguredProcessor creates a default processor with custom validation and rewards. -func NewConfiguredProcessor(actors vm.ActorCodeLoader, syscalls vm.SyscallsImpl, rnd ChainRandomness) *DefaultProcessor { - return &DefaultProcessor{ - actors: actors, - syscalls: syscalls, - rnd: rnd, - } -} - -// ProcessTipSet computes the state transition specified by the messages in all blocks in a TipSet. -func (p *DefaultProcessor) ProcessTipSet(ctx context.Context, st state.Tree, vms vm.Storage, ts block.TipSet, msgs []vm.BlockMessagesInfo) (results []vm.MessageReceipt, err error) { - ctx, span := trace.StartSpan(ctx, "DefaultProcessor.ProcessTipSet") - span.AddAttributes(trace.StringAttribute("tipset", ts.String())) - defer tracing.AddErrorEndSpan(ctx, span, &err) - - epoch, err := ts.Height() - if err != nil { - return nil, err - } - - parent, err := ts.Parents() - if err != nil { - return nil, err - } - - // Note: since the parent tipset key is now passed explicitly to ApplyTipSetMessages we can refactor to skip - // currying it in to the randomness call here. - rnd := headRandomness{ - chain: p.rnd, - head: parent, - } - v := vm.NewVM(st, &vms, p.syscalls) - - return v.ApplyTipSetMessages(msgs, parent, epoch, &rnd) -} - -// A chain randomness source with a fixed head tipset key. -type headRandomness struct { - chain ChainRandomness - head block.TipSetKey -} - -func (h *headRandomness) Randomness(ctx context.Context, tag crypto.DomainSeparationTag, epoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { - return h.chain.SampleChainRandomness(ctx, h.head, tag, epoch, entropy) -} diff --git a/internal/pkg/consensus/protocol.go b/internal/pkg/consensus/protocol.go deleted file mode 100644 index 9eec90b659..0000000000 --- a/internal/pkg/consensus/protocol.go +++ /dev/null @@ -1,36 +0,0 @@ -package consensus - -// This interface is (mostly) stateless. All of its methods are -// pure functions that only depend on their inputs. - -// Note: State does creep in through the cbor and block stores used to keep state tree and -// actor storage data in the Expected implementation. However those stores -// are global to the filecoin node so accessing the correct state is simple. -// Furthermore these stores are providing content addressed values. -// The output of these interface functions does not change based on the store state -// except for errors in the case the stores do not have a mapping. -import ( - "context" - "time" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// Protocol is an interface defining a blockchain consensus protocol. The -// methods here were arrived at after significant work fitting consensus into -// the system and the implementation level. The method set is not necessarily -// the most theoretically obvious or pleasing and should not be considered -// finalized. -type Protocol interface { - // RunStateTransition returns the state root CID resulting from applying the input ts to the - // prior `stateID`. It returns an error if the transition is invalid. - RunStateTransition(ctx context.Context, ts block.TipSet, blsMsgs [][]*types.UnsignedMessage, secpMsgs [][]*types.SignedMessage, parentWeight fbig.Int, parentStateRoot cid.Cid, parentReceiptRoot cid.Cid) (cid.Cid, []vm.MessageReceipt, error) - - // BlockTime returns the block time used by the consensus protocol. - BlockTime() time.Duration -} diff --git a/internal/pkg/consensus/testing.go b/internal/pkg/consensus/testing.go deleted file mode 100644 index 524322a4d0..0000000000 --- a/internal/pkg/consensus/testing.go +++ /dev/null @@ -1,186 +0,0 @@ -package consensus - -import ( - "context" - "fmt" - "testing" - - address "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - acrypto "github.com/filecoin-project/specs-actors/actors/crypto" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/postgenerator" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// RequireNewTipSet instantiates and returns a new tipset of the given blocks -// and requires that the setup validation succeed. -func RequireNewTipSet(require *require.Assertions, blks ...*block.Block) block.TipSet { - ts, err := block.NewTipSet(blks...) - require.NoError(err) - return ts -} - -// FakeConsensusStateViewer is a fake power state viewer. -type FakeConsensusStateViewer struct { - Views map[cid.Cid]*state.FakeStateView -} - -// PowerStateView returns the state view for a root. -func (f *FakeConsensusStateViewer) PowerStateView(root cid.Cid) PowerStateView { - return f.Views[root] -} - -// FaultStateView returns the state view for a root. -func (f *FakeConsensusStateViewer) FaultStateView(root cid.Cid) FaultStateView { - return f.Views[root] -} - -// FakeMessageValidator is a validator that doesn't validate to simplify message creation in tests. -type FakeMessageValidator struct{} - -func (mv *FakeMessageValidator) ValidateSignedMessageSyntax(ctx context.Context, smsg *types.SignedMessage) error { - return nil -} - -func (mv *FakeMessageValidator) ValidateUnsignedMessageSyntax(ctx context.Context, msg *types.UnsignedMessage) error { - return nil -} - -// FakeElectionMachine generates fake election proofs and verifies all proofs -type FakeElectionMachine struct{} - -var _ ElectionValidator = new(FakeElectionMachine) - -// GenerateElectionProof returns a fake randomness -func (fem *FakeElectionMachine) GenerateElectionProof(_ context.Context, _ *drand.Entry, - _ abi.ChainEpoch, _ address.Address, _ address.Address, _ types.Signer) (crypto.VRFPi, error) { - return MakeFakeVRFProofForTest(), nil -} - -// GenerateEPoSt returns a fake post proof -func (fem *FakeElectionMachine) GenerateWinningPoSt(ctx context.Context, entry *drand.Entry, epoch abi.ChainEpoch, ep postgenerator.PoStGenerator, maddr address.Address, sectors SectorsStateView) ([]block.PoStProof, error) { - return []block.PoStProof{{ - RegisteredProof: constants.DevRegisteredWinningPoStProof, - ProofBytes: []byte{0xe}, - }}, nil -} - -func (fem *FakeElectionMachine) IsWinner(challengeTicket []byte, minerPower, networkPower abi.StoragePower) bool { - return true -} - -func (fem *FakeElectionMachine) VerifyElectionProof(_ context.Context, _ *drand.Entry, _ abi.ChainEpoch, _ address.Address, _ address.Address, _ crypto.VRFPi) error { - return nil -} - -func (fem *FakeElectionMachine) VerifyWinningPoSt(ctx context.Context, ep EPoStVerifier, seedEntry *drand.Entry, epoch abi.ChainEpoch, proofs []block.PoStProof, mIDAddr address.Address, sectors SectorsStateView) (bool, error) { - return true, nil -} - -// FakeTicketMachine generates fake tickets and verifies all tickets -type FakeTicketMachine struct{} - -// MakeTicket returns a fake ticket -func (ftm *FakeTicketMachine) MakeTicket(ctx context.Context, base block.TipSetKey, epoch abi.ChainEpoch, miner address.Address, entry *drand.Entry, newPeriod bool, worker address.Address, signer types.Signer) (block.Ticket, error) { - return MakeFakeTicketForTest(), nil -} - -// IsValidTicket always returns true -func (ftm *FakeTicketMachine) IsValidTicket(ctx context.Context, base block.TipSetKey, entry *drand.Entry, newPeriod bool, - epoch abi.ChainEpoch, miner address.Address, workerSigner address.Address, ticket block.Ticket) error { - return nil -} - -// FailingTicketValidator marks all tickets as invalid -type FailingTicketValidator struct{} - -// IsValidTicket always returns false -func (ftv *FailingTicketValidator) IsValidTicket(ctx context.Context, base block.TipSetKey, entry *drand.Entry, newPeriod bool, - epoch abi.ChainEpoch, miner address.Address, workerSigner address.Address, ticket block.Ticket) error { - return fmt.Errorf("invalid ticket") -} - -// FailingElectionValidator marks all election candidates as invalid -type FailingElectionValidator struct{} - -var _ ElectionValidator = new(FailingElectionValidator) - -func (fev *FailingElectionValidator) IsWinner(challengeTicket []byte, minerPower, networkPower abi.StoragePower) bool { - return false -} - -func (fev *FailingElectionValidator) VerifyElectionProof(_ context.Context, _ *drand.Entry, _ abi.ChainEpoch, _ address.Address, _ address.Address, _ crypto.VRFPi) error { - return nil -} - -func (fev *FailingElectionValidator) VerifyWinningPoSt(ctx context.Context, ep EPoStVerifier, seedEntry *drand.Entry, epoch abi.ChainEpoch, proofs []block.PoStProof, mIDAddr address.Address, sectors SectorsStateView) (bool, error) { - return true, nil -} - -// MakeFakeTicketForTest creates a fake ticket -func MakeFakeTicketForTest() block.Ticket { - val := make([]byte, 65) - val[0] = 200 - return block.Ticket{ - VRFProof: crypto.VRFPi(val[:]), - } -} - -// MakeFakeVRFProofForTest creates a fake election proof -func MakeFakeVRFProofForTest() []byte { - proof := make([]byte, 65) - proof[0] = 42 - return proof -} - -// MakeFakePoStForTest creates a fake post -func MakeFakePoStsForTest() []block.PoStProof { - return []block.PoStProof{{ - RegisteredProof: constants.DevRegisteredWinningPoStProof, - ProofBytes: []byte{0xe}, - }} -} - -// NFakeSectorInfos returns numSectors fake sector infos -func RequireFakeSectorInfos(t *testing.T, numSectors uint64) []abi.SectorInfo { - var infos []abi.SectorInfo - for i := uint64(0); i < numSectors; i++ { - infos = append(infos, abi.SectorInfo{ - RegisteredProof: constants.DevRegisteredSealProof, - SectorNumber: abi.SectorNumber(i), - SealedCID: types.CidFromString(t, fmt.Sprintf("fake-sector-%d", i)), - }) - } - - return infos -} - -///// Sampler ///// - -// FakeChainRandomness generates deterministic values that are a function of a seed and the provided -// tag, epoch, and entropy (but *not* the chain head key). -type FakeChainRandomness struct { - Seed uint -} - -func (s *FakeChainRandomness) SampleChainRandomness(_ context.Context, _ block.TipSetKey, tag acrypto.DomainSeparationTag, epoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { - return []byte(fmt.Sprintf("s=%d,e=%d,t=%d,p=%s", s.Seed, epoch, tag, string(entropy))), nil -} - -type FakeSampler struct { - Seed uint -} - -func (s *FakeSampler) SampleTicket(_ context.Context, _ block.TipSetKey, epoch abi.ChainEpoch) (block.Ticket, error) { - return block.Ticket{ - VRFProof: []byte(fmt.Sprintf("s=%d,e=%d", s.Seed, epoch)), - }, nil -} diff --git a/internal/pkg/consensus/testing_poster.go b/internal/pkg/consensus/testing_poster.go deleted file mode 100644 index 3554fe0e64..0000000000 --- a/internal/pkg/consensus/testing_poster.go +++ /dev/null @@ -1,34 +0,0 @@ -package consensus - -import ( - "context" - - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/postgenerator" -) - -// TestElectionPoster generates and verifies electoin PoSts -type TestElectionPoster struct{} - -var _ EPoStVerifier = new(TestElectionPoster) -var _ postgenerator.PoStGenerator = new(TestElectionPoster) - -// VerifyWinningPoSt returns the validity of the input PoSt proof -func (ep *TestElectionPoster) VerifyWinningPoSt(_ context.Context, _ abi.WinningPoStVerifyInfo) (bool, error) { - return true, nil -} - -// GenerateWinningPoStSectorChallenge determines the challenges used to create a winning PoSt. -func (ep *TestElectionPoster) GenerateWinningPoStSectorChallenge(ctx context.Context, proofType abi.RegisteredProof, minerID abi.ActorID, randomness abi.PoStRandomness, eligibleSectorCount uint64) ([]uint64, error) { - return nil, nil -} - -// GenerateWinningPoSt creates a post proof for a winning block -func (ep *TestElectionPoster) GenerateWinningPoSt(ctx context.Context, minerID abi.ActorID, sectorInfo []abi.SectorInfo, randomness abi.PoStRandomness) ([]abi.PoStProof, error) { - return []abi.PoStProof{{ - RegisteredProof: constants.DevRegisteredWinningPoStProof, - ProofBytes: []byte{0xe}, - }}, nil -} diff --git a/internal/pkg/consensus/ticket.go b/internal/pkg/consensus/ticket.go deleted file mode 100644 index 6d16eff469..0000000000 --- a/internal/pkg/consensus/ticket.go +++ /dev/null @@ -1,83 +0,0 @@ -package consensus - -import ( - "bytes" - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - acrypto "github.com/filecoin-project/specs-actors/actors/crypto" - "github.com/minio/blake2b-simd" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -type ChainSampler interface { - SampleTicket(ctx context.Context, head block.TipSetKey, epoch abi.ChainEpoch) (block.Ticket, error) -} - -// TicketMachine uses a VRF and VDF to generate deterministic, unpredictable -// and time delayed tickets and validates these tickets. -type TicketMachine struct { - sampler ChainSampler -} - -func NewTicketMachine(sampler ChainSampler) *TicketMachine { - return &TicketMachine{sampler: sampler} -} - -// MakeTicket creates a new ticket from a chain and target epoch by running a verifiable -// randomness function on the prior ticket. -func (tm TicketMachine) MakeTicket(ctx context.Context, base block.TipSetKey, epoch abi.ChainEpoch, miner address.Address, entry *drand.Entry, newPeriod bool, worker address.Address, signer types.Signer) (block.Ticket, error) { - randomness, err := tm.ticketVRFRandomness(ctx, base, entry, newPeriod, miner, epoch) - if err != nil { - return block.Ticket{}, errors.Wrap(err, "failed to generate ticket randomness") - } - vrfProof, err := signer.SignBytes(ctx, randomness, worker) - if err != nil { - return block.Ticket{}, errors.Wrap(err, "failed to sign election post randomness") - } - return block.Ticket{ - VRFProof: vrfProof.Data, - }, nil -} - -// IsValidTicket verifies that the ticket's proof of randomness is valid with respect to its parent. -func (tm TicketMachine) IsValidTicket(ctx context.Context, base block.TipSetKey, entry *drand.Entry, newPeriod bool, - epoch abi.ChainEpoch, miner address.Address, workerSigner address.Address, ticket block.Ticket) error { - randomness, err := tm.ticketVRFRandomness(ctx, base, entry, newPeriod, miner, epoch) - if err != nil { - return errors.Wrap(err, "failed to generate ticket randomness") - } - - return crypto.ValidateBlsSignature(randomness, workerSigner, ticket.VRFProof) -} - -func (tm TicketMachine) ticketVRFRandomness(ctx context.Context, base block.TipSetKey, entry *drand.Entry, newPeriod bool, miner address.Address, epoch abi.ChainEpoch) (abi.Randomness, error) { - entropyBuf := bytes.Buffer{} - minerEntropy, err := encoding.Encode(miner) - if err != nil { - return nil, errors.Wrapf(err, "failed to encode miner entropy") - } - _, err = entropyBuf.Write(minerEntropy) - if err != nil { - return nil, err - } - if !newPeriod { // resample previous ticket and add to entropy - ticket, err := tm.sampler.SampleTicket(ctx, base, epoch) - if err != nil { - return nil, errors.Wrapf(err, "failed to sample previous ticket") - } - _, err = entropyBuf.Write(ticket.VRFProof) - if err != nil { - return nil, err - } - } - seed := blake2b.Sum256(entry.Data) - return crypto.BlendEntropy(acrypto.DomainSeparationTag_TicketProduction, seed[:], epoch, entropyBuf.Bytes()) -} diff --git a/internal/pkg/consensus/ticket_test.go b/internal/pkg/consensus/ticket_test.go deleted file mode 100644 index eba34e3dae..0000000000 --- a/internal/pkg/consensus/ticket_test.go +++ /dev/null @@ -1,84 +0,0 @@ -package consensus_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" - - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestGenValidTicketChain(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - head := block.NewTipSetKey() // Tipset key is unused by fake randomness - - // Interleave 3 signers - kis := types.MustGenerateBLSKeyInfo(3, 0) - - miner, err := address.NewIDAddress(uint64(1)) - require.NoError(t, err) - signer := types.NewMockSigner(kis) - addr1 := requireAddress(t, &kis[0]) - addr2 := requireAddress(t, &kis[1]) - addr3 := requireAddress(t, &kis[2]) - - schedule := struct { - Addrs []address.Address - }{ - Addrs: []address.Address{addr1, addr1, addr1, addr2, addr3, addr3, addr1, addr2}, - } - - rnd := consensus.FakeSampler{Seed: 0} - tm := consensus.NewTicketMachine(&rnd) - - // Grow the specified ticket chain without error - for i := 0; i < len(schedule.Addrs); i++ { - requireValidTicket(ctx, t, tm, head, abi.ChainEpoch(i), miner, schedule.Addrs[i], signer) - } -} - -func requireValidTicket(ctx context.Context, t *testing.T, tm *consensus.TicketMachine, head block.TipSetKey, epoch abi.ChainEpoch, - miner, worker address.Address, signer types.Signer) { - electionEntry := &drand.Entry{} - newPeriod := false - ticket, err := tm.MakeTicket(ctx, head, epoch, miner, electionEntry, newPeriod, worker, signer) - require.NoError(t, err) - - err = tm.IsValidTicket(ctx, head, electionEntry, newPeriod, epoch, miner, worker, ticket) - require.NoError(t, err) -} - -func TestNextTicketFailsWithInvalidSigner(t *testing.T) { - ctx := context.Background() - head := block.NewTipSetKey() // Tipset key is unused by fake randomness - miner, err := address.NewIDAddress(uint64(1)) - require.NoError(t, err) - - signer, _ := types.NewMockSignersAndKeyInfo(1) - badAddr := vmaddr.RequireIDAddress(t, 100) - rnd := consensus.FakeSampler{Seed: 0} - tm := consensus.NewTicketMachine(&rnd) - electionEntry := &drand.Entry{} - newPeriod := false - badTicket, err := tm.MakeTicket(ctx, head, abi.ChainEpoch(1), miner, electionEntry, newPeriod, badAddr, signer) - assert.Error(t, err) - assert.Nil(t, badTicket.VRFProof) -} - -func requireAddress(t *testing.T, ki *crypto.KeyInfo) address.Address { - addr, err := ki.Address() - require.NoError(t, err) - return addr -} diff --git a/internal/pkg/consensus/validation.go b/internal/pkg/consensus/validation.go deleted file mode 100644 index 347e0a5ca2..0000000000 --- a/internal/pkg/consensus/validation.go +++ /dev/null @@ -1,247 +0,0 @@ -package consensus - -import ( - "context" - "fmt" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -var dropNonAccountCt *metrics.Int64Counter -var dropInsufficientGasCt *metrics.Int64Counter -var dropNonceTooLowCt *metrics.Int64Counter -var dropNonceTooHighCt *metrics.Int64Counter - -var invReceiverUndefCt *metrics.Int64Counter -var invSenderUndefCt *metrics.Int64Counter -var invValueAboveMaxCt *metrics.Int64Counter -var invParamsNilCt *metrics.Int64Counter -var invGasPriceNegativeCt *metrics.Int64Counter -var invGasBelowMinimumCt *metrics.Int64Counter -var invNegativeValueCt *metrics.Int64Counter -var invGasAboveBlockLimitCt *metrics.Int64Counter - -// The maximum allowed message value. -var msgMaxValue = types.NewAttoFILFromFIL(2e9) - -// These gas cost values must match those in vm/internal/gascost. -// TODO: Look up gas costs from the same place the VM gets them, keyed by epoch. https://github.com/filecoin-project/go-filecoin/issues/3955 -const onChainMessageBase = gas.Unit(0) -const onChainMessagePerByte = gas.Unit(2) - -func init() { - dropNonAccountCt = metrics.NewInt64Counter("consensus/msg_non_account_sender", "Count of dropped messages with non-account sender") - dropInsufficientGasCt = metrics.NewInt64Counter("consensus/msg_insufficient_gas_err", "Count of dropped messages with insufficient gas") - dropNonceTooLowCt = metrics.NewInt64Counter("consensus/msg_nonce_low_err", "Count of dropped messages with nonce too low") - dropNonceTooHighCt = metrics.NewInt64Counter("consensus/msg_nonce_high_err", "Count of dropped messages with nonce too high") - - invReceiverUndefCt = metrics.NewInt64Counter("consensus/msg_undef_receiver", "Count of") - invSenderUndefCt = metrics.NewInt64Counter("consensus/msg_undef_sender", "Count of") - invValueAboveMaxCt = metrics.NewInt64Counter("consensus/msg_value_max", "Count of") - invParamsNilCt = metrics.NewInt64Counter("consensus/msg_params_nil", "Count of") - invGasPriceNegativeCt = metrics.NewInt64Counter("consensus/msg_gasprice_negative", "Count of") - invGasBelowMinimumCt = metrics.NewInt64Counter("consensus/msg_gaslimit_min", "Count of") - invNegativeValueCt = metrics.NewInt64Counter("consensus/msg_value_negative", "Count of invalid negative messages with negative value") - invGasAboveBlockLimitCt = metrics.NewInt64Counter("consensus/msg_gaslimit_max", "Count of invalid messages with gas above block limit") -} - -// MessageSelectionChecker checks for miner penalties on signed messages -type MessagePenaltyChecker struct { - api penaltyCheckerAPI -} - -// penaltyCheckerAPI allows the validator to access latest state -type penaltyCheckerAPI interface { - Head() block.TipSetKey - GetActorAt(ctx context.Context, tipKey block.TipSetKey, addr address.Address) (*actor.Actor, error) -} - -func NewMessagePenaltyChecker(api penaltyCheckerAPI) *MessagePenaltyChecker { - return &MessagePenaltyChecker{ - api: api, - } -} - -// PenaltyCheck checks that a message is semantically valid for processing without -// causing miner penality. It treats any miner penalty condition as an error. -func (v *MessagePenaltyChecker) PenaltyCheck(ctx context.Context, msg *types.UnsignedMessage) error { - fromActor, err := v.api.GetActorAt(ctx, v.api.Head(), msg.From) - if err != nil { - return err - } - // Sender should not be an empty actor - if fromActor == nil || fromActor.Empty() { - return fmt.Errorf("sender %s is missing/empty: %s", msg.From, msg) - } - - // Sender must be an account actor. - if !(builtin.AccountActorCodeID.Equals(fromActor.Code.Cid)) { - dropNonAccountCt.Inc(ctx, 1) - return fmt.Errorf("sender %s is non-account actor with code %s: %s", msg.From, fromActor.Code.Cid, msg) - } - - // Avoid processing messages for actors that cannot pay. - if !canCoverGasLimit(msg, fromActor) { - dropInsufficientGasCt.Inc(ctx, 1) - return fmt.Errorf("insufficient funds from sender %s to cover value and gas cost: %s ", msg.From, msg) - } - - if msg.CallSeqNum < fromActor.CallSeqNum { - dropNonceTooLowCt.Inc(ctx, 1) - return fmt.Errorf("nonce %d lower than expected %d: %s", msg.CallSeqNum, fromActor.CallSeqNum, msg) - } - - if msg.CallSeqNum > fromActor.CallSeqNum { - dropNonceTooHighCt.Inc(ctx, 1) - return fmt.Errorf("nonce %d greater than expected: %d: %s", msg.CallSeqNum, fromActor.CallSeqNum, msg) - } - - return nil -} - -// Check's whether the maximum gas charge + message value is within the actor's balance. -// Note that this is an imperfect test, since nested messages invoked by this one may transfer -// more value from the actor's balance. -func canCoverGasLimit(msg *types.UnsignedMessage, actor *actor.Actor) bool { - // balance >= (gasprice*gasLimit + value) - gascost := big.Mul(abi.NewTokenAmount(msg.GasPrice.Int.Int64()), abi.NewTokenAmount(int64(msg.GasLimit))) - expense := big.Add(gascost, abi.NewTokenAmount(msg.Value.Int.Int64())) - return actor.Balance.GreaterThanEqual(expense) -} - -// DefaultMessageSyntaxValidator checks basic conditions independent of current state -type DefaultMessageSyntaxValidator struct{} - -func NewMessageSyntaxValidator() *DefaultMessageSyntaxValidator { - return &DefaultMessageSyntaxValidator{} -} - -// ValidateSignedMessageSyntax validates signed message syntax and state-independent invariants. -// Used for incoming messages over pubsub and secp messages included in blocks. -func (v *DefaultMessageSyntaxValidator) ValidateSignedMessageSyntax(ctx context.Context, smsg *types.SignedMessage) error { - msg := &smsg.Message - var msgLen int - if smsg.Signature.Type == crypto.SigTypeBLS { - enc, err := smsg.Message.Marshal() - if err != nil { - return errors.Wrapf(err, "failed to calculate message size") - } - msgLen = len(enc) - } else { - enc, err := smsg.Marshal() - if err != nil { - return errors.Wrapf(err, "failed to calculate message size") - } - msgLen = len(enc) - } - return v.validateMessageSyntaxShared(ctx, msg, msgLen) -} - -// ValidateUnsignedMessageSyntax validates unisigned message syntax and state-independent invariants. -// Used for bls messages included in blocks. -func (v *DefaultMessageSyntaxValidator) ValidateUnsignedMessageSyntax(ctx context.Context, msg *types.UnsignedMessage) error { - enc, err := msg.Marshal() - if err != nil { - return errors.Wrapf(err, "failed to calculate message size") - } - msgLen := len(enc) - return v.validateMessageSyntaxShared(ctx, msg, msgLen) -} - -func (v *DefaultMessageSyntaxValidator) validateMessageSyntaxShared(ctx context.Context, msg *types.UnsignedMessage, msgLen int) error { - if msg.Version != types.MessageVersion { - return fmt.Errorf("version %d, expected %d", msg.Version, types.MessageVersion) - } - - if msg.To.Empty() { - invReceiverUndefCt.Inc(ctx, 1) - return fmt.Errorf("empty receiver: %s", msg) - } - if msg.From.Empty() { - invSenderUndefCt.Inc(ctx, 1) - return fmt.Errorf("empty sender: %s", msg) - } - // The spec calls for validating a non-negative call sequence num, but by - // the time it's decoded into a uint64 the check is already passed - - if msg.Value.LessThan(big.Zero()) { - invNegativeValueCt.Inc(ctx, 1) - return fmt.Errorf("negative value %s: %s", msg.Value, msg) - } - if msg.Value.GreaterThan(msgMaxValue) { - invValueAboveMaxCt.Inc(ctx, 1) - return fmt.Errorf("value %s exceeds max %s: %s", msg.Value, msgMaxValue, msg) - } - // The spec calls for validating a non-negative method num, but by the - // time it's decoded into a uint64 the check is already passed - - if msg.Params == nil { - invParamsNilCt.Inc(ctx, 1) - return fmt.Errorf("nil params (should be empty-array): %s", msg) - } - if msg.GasPrice.LessThan(types.ZeroAttoFIL) { - invGasPriceNegativeCt.Inc(ctx, 1) - return fmt.Errorf("negative gas price %s: %s", msg.GasPrice, msg) - } - // The minimum gas limit ensures the sender has enough balance to pay for inclusion of the message in the chain - // *at all*. Without this, a message could hit out-of-gas but the sender pay nothing. - // NOTE(anorth): this check has been moved to execution time, and the miner is penalized for including - // such a message. We can probably remove this. - minMsgGas := onChainMessageBase + onChainMessagePerByte*gas.Unit(msgLen) - if msg.GasLimit < minMsgGas { - invGasBelowMinimumCt.Inc(ctx, 1) - return fmt.Errorf("gas limit %d below minimum %d to cover message size: %s", msg.GasLimit, minMsgGas, msg) - } - if msg.GasLimit > types.BlockGasLimit { - invGasAboveBlockLimitCt.Inc(ctx, 1) - return fmt.Errorf("gas limit %d exceeds block limit %d: %s", msg.GasLimit, types.BlockGasLimit, msg) - } - return nil -} - -// MessageSignatureValidator validates message signatures -type MessageSignatureValidator struct { - api signatureValidatorAPI -} - -// signatureValidatorAPI allows the validator to access state needed for signature checking -type signatureValidatorAPI interface { - Head() block.TipSetKey - AccountStateView(baseKey block.TipSetKey) (state.AccountStateView, error) -} - -func NewMessageSignatureValidator(api signatureValidatorAPI) *MessageSignatureValidator { - return &MessageSignatureValidator{ - api: api, - } -} - -// Validate validates the signed message signature. Errors probably mean the -// validation failed, but possibly indicate a failure to retrieve state. -func (v *MessageSignatureValidator) Validate(ctx context.Context, smsg *types.SignedMessage) error { - head := v.api.Head() - view, err := v.api.AccountStateView(head) - if err != nil { - return errors.Wrapf(err, "failed to load state at %v", head) - } - - sigValidator := state.NewSignatureValidator(view) - - // ensure message is properly signed - if err := sigValidator.ValidateMessageSignature(ctx, smsg); err != nil { - return errors.Wrap(err, fmt.Errorf("invalid signature by sender over message data").Error()) - } - return nil -} diff --git a/internal/pkg/consensus/validation_test.go b/internal/pkg/consensus/validation_test.go deleted file mode 100644 index 3cbe0241e7..0000000000 --- a/internal/pkg/consensus/validation_test.go +++ /dev/null @@ -1,196 +0,0 @@ -package consensus_test - -import ( - "context" - "fmt" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/ipfs/go-cid" - - bls "github.com/filecoin-project/filecoin-ffi" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -var keys = types.MustGenerateKeyInfo(2, 42) -var addresses = make([]address.Address, len(keys)) - -var methodID = abi.MethodNum(21231) - -func init() { - for i, k := range keys { - addr, _ := k.Address() - addresses[i] = addr - } -} - -func TestMessagePenaltyChecker(t *testing.T) { - tf.UnitTest(t) - - alice := addresses[0] - bob := addresses[1] - actor := newActor(t, 1000, 100) - api := NewMockIngestionValidatorAPI() - api.ActorAddr = alice - api.Actor = actor - - checker := consensus.NewMessagePenaltyChecker(api) - ctx := context.Background() - - t.Run("valid", func(t *testing.T) { - msg := newMessage(t, alice, bob, 100, 5, 1, 0) - assert.NoError(t, checker.PenaltyCheck(ctx, msg)) - }) - - t.Run("non-account actor fails", func(t *testing.T) { - badActor := newActor(t, 1000, 100) - badActor.Code = e.NewCid(types.CidFromString(t, "somecid")) - msg := newMessage(t, alice, bob, 100, 5, 1, 0) - api := NewMockIngestionValidatorAPI() - api.ActorAddr = alice - api.Actor = badActor - checker := consensus.NewMessagePenaltyChecker(api) - assert.Errorf(t, checker.PenaltyCheck(ctx, msg), "account") - }) - - t.Run("can't cover value", func(t *testing.T) { - msg := newMessage(t, alice, bob, 100, 2000, 1, 0) // lots of value - assert.Errorf(t, checker.PenaltyCheck(ctx, msg), "funds") - - msg = newMessage(t, alice, bob, 100, 5, 100000, 200) // lots of expensive gas - assert.Errorf(t, checker.PenaltyCheck(ctx, msg), "funds") - }) - - t.Run("low nonce", func(t *testing.T) { - msg := newMessage(t, alice, bob, 99, 5, 1, 0) - assert.Errorf(t, checker.PenaltyCheck(ctx, msg), "too low") - }) - - t.Run("high nonce", func(t *testing.T) { - msg := newMessage(t, alice, bob, 101, 5, 1, 0) - assert.Errorf(t, checker.PenaltyCheck(ctx, msg), "too high") - }) -} - -func TestBLSSignatureValidationConfiguration(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - - // create bls address - pubKey := bls.PrivateKeyPublicKey(bls.PrivateKeyGenerate()) - from, err := address.NewBLSAddress(pubKey[:]) - require.NoError(t, err) - - msg := types.NewMeteredMessage(from, addresses[1], 0, types.ZeroAttoFIL, methodID, []byte("params"), types.NewGasPrice(1), gas.NewGas(300)) - unsigned := &types.SignedMessage{Message: *msg} - actor := newActor(t, 1000, 0) - - t.Run("syntax validator does not ignore missing signature", func(t *testing.T) { - api := NewMockIngestionValidatorAPI() - api.ActorAddr = from - api.Actor = actor - - validator := consensus.NewMessageSignatureValidator(api) - - err := validator.Validate(ctx, unsigned) - require.Error(t, err) - assert.Contains(t, err.Error(), "invalid signature") - }) -} - -func TestMessageSyntaxValidator(t *testing.T) { - tf.UnitTest(t) - var signer = types.NewMockSigner(keys) - alice := addresses[0] - bob := addresses[1] - - validator := consensus.NewMessageSyntaxValidator() - ctx := context.Background() - - t.Run("Actor not found is not an error", func(t *testing.T) { - msg, err := types.NewSignedMessage(ctx, *newMessage(t, bob, alice, 0, 0, 1, 5000), signer) - require.NoError(t, err) - assert.NoError(t, validator.ValidateSignedMessageSyntax(ctx, msg)) - }) - - t.Run("self send passes", func(t *testing.T) { - msg, err := types.NewSignedMessage(ctx, *newMessage(t, alice, alice, 100, 5, 1, 5000), signer) - require.NoError(t, err) - assert.NoError(t, validator.ValidateSignedMessageSyntax(ctx, msg), "self") - }) - - t.Run("negative value fails", func(t *testing.T) { - msg, err := types.NewSignedMessage(ctx, *newMessage(t, alice, alice, 100, -5, 1, 5000), signer) - require.NoError(t, err) - assert.Errorf(t, validator.ValidateSignedMessageSyntax(ctx, msg), "negative") - }) - - t.Run("block gas limit fails", func(t *testing.T) { - msg, err := types.NewSignedMessage(ctx, *newMessage(t, alice, bob, 100, 5, 1, types.BlockGasLimit+1), signer) - require.NoError(t, err) - assert.Errorf(t, validator.ValidateSignedMessageSyntax(ctx, msg), "block limit") - }) - -} - -func newActor(t *testing.T, balanceAF int, nonce uint64) *actor.Actor { - actor := actor.NewActor(builtin.AccountActorCodeID, abi.NewTokenAmount(int64(balanceAF)), cid.Undef) - actor.CallSeqNum = nonce - return actor -} - -func newMessage(t *testing.T, from, to address.Address, nonce uint64, valueAF int, - gasPrice int64, gasLimit gas.Unit) *types.UnsignedMessage { - val, ok := types.NewAttoFILFromString(fmt.Sprintf("%d", valueAF), 10) - require.True(t, ok, "invalid attofil") - return types.NewMeteredMessage( - from, - to, - nonce, - val, - methodID, - []byte("params"), - types.NewGasPrice(gasPrice), - gasLimit, - ) -} - -// FakeIngestionValidatorAPI provides a latest state -type FakeIngestionValidatorAPI struct { - ActorAddr address.Address - Actor *actor.Actor -} - -// NewMockIngestionValidatorAPI creates a new FakeIngestionValidatorAPI. -func NewMockIngestionValidatorAPI() *FakeIngestionValidatorAPI { - return &FakeIngestionValidatorAPI{Actor: &actor.Actor{}} -} - -func (api *FakeIngestionValidatorAPI) Head() block.TipSetKey { - return block.NewTipSetKey() -} - -func (api *FakeIngestionValidatorAPI) GetActorAt(ctx context.Context, key block.TipSetKey, a address.Address) (*actor.Actor, error) { - if a == api.ActorAddr { - return api.Actor, nil - } - return &actor.Actor{ - Balance: abi.NewTokenAmount(0), - }, nil -} - -func (api *FakeIngestionValidatorAPI) AccountStateView(baseKey block.TipSetKey) (state.AccountStateView, error) { - return &state.FakeStateView{}, nil -} diff --git a/internal/pkg/consensus/weight_test.go b/internal/pkg/consensus/weight_test.go deleted file mode 100644 index 33282e212c..0000000000 --- a/internal/pkg/consensus/weight_test.go +++ /dev/null @@ -1,113 +0,0 @@ -package consensus_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/specs-actors/actors/abi" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -func TestWeight(t *testing.T) { - cst := cbor.NewMemCborStore() - ctx := context.Background() - fakeTree := state.NewFromString(t, "test-Weight-StateCid", cst) - fakeRoot, err := fakeTree.Commit(ctx) - require.NoError(t, err) - // We only care about total power for the weight function - // Total is 16, so bitlen is 5, log2b is 4 - viewer := makeStateViewer(fakeRoot, abi.NewStoragePower(16)) - ticket := consensus.MakeFakeTicketForTest() - toWeigh := block.RequireNewTipSet(t, &block.Block{ - ParentWeight: fbig.Zero(), - Ticket: ticket, - }) - sel := consensus.NewChainSelector(cst, &viewer, types.CidFromString(t, "genesisCid")) - - t.Run("basic happy path", func(t *testing.T) { - // 0 + (4*256 + (4*1*1*256/5*2)) - // 1024 + 102 = 1126 - w, err := sel.Weight(ctx, toWeigh, fakeRoot) - assert.NoError(t, err) - assert.Equal(t, fbig.NewInt(1126), w) - }) - - t.Run("total power adjusts as expected", func(t *testing.T) { - asLowerX := makeStateViewer(fakeRoot, abi.NewStoragePower(15)) - asSameX := makeStateViewer(fakeRoot, abi.NewStoragePower(31)) - asHigherX := makeStateViewer(fakeRoot, abi.NewStoragePower(32)) - - // 0 + (3*256) + (3*1*1*256/2*5) = 844 (truncating not rounding division) - selLower := consensus.NewChainSelector(cst, &asLowerX, types.CidFromString(t, "genesisCid")) - fixWeight, err := selLower.Weight(ctx, toWeigh, fakeRoot) - assert.NoError(t, err) - assert.Equal(t, fbig.NewInt(844), fixWeight) - - // Weight is same when total bytes = 16 as when total bytes = 31 - selSame := consensus.NewChainSelector(cst, &asSameX, types.CidFromString(t, "genesisCid")) - fixWeight, err = selSame.Weight(ctx, toWeigh, fakeRoot) - assert.NoError(t, err) - assert.Equal(t, fbig.NewInt(1126), fixWeight) - - // 0 + (5*256) + (5*1*1*256/2*5) = 1408 - selHigher := consensus.NewChainSelector(cst, &asHigherX, types.CidFromString(t, "genesisCid")) - fixWeight, err = selHigher.Weight(ctx, toWeigh, fakeRoot) - assert.NoError(t, err) - assert.Equal(t, fbig.NewInt(1408), fixWeight) - }) - - t.Run("non-zero parent weight", func(t *testing.T) { - parentWeight := fbig.NewInt(int64(49)) - toWeighWithParent := block.RequireNewTipSet(t, &block.Block{ - ParentWeight: parentWeight, - Ticket: ticket, - }) - - // 49 + (4*256) + (4*1*1*256/2*5) = 1175 - w, err := sel.Weight(ctx, toWeighWithParent, fakeRoot) - assert.NoError(t, err) - assert.Equal(t, fbig.NewInt(1175), w) - }) - - t.Run("many blocks", func(t *testing.T) { - toWeighThreeBlock := block.RequireNewTipSet(t, - &block.Block{ - ParentWeight: fbig.Zero(), - Ticket: ticket, - Timestamp: 0, - }, - &block.Block{ - ParentWeight: fbig.Zero(), - Ticket: ticket, - Timestamp: 1, - }, - &block.Block{ - ParentWeight: fbig.Zero(), - Ticket: ticket, - Timestamp: 2, - }, - ) - // 0 + (4*256) + (4*3*1*256/2*5) = 1331 - w, err := sel.Weight(ctx, toWeighThreeBlock, fakeRoot) - assert.NoError(t, err) - assert.Equal(t, fbig.NewInt(1331), w) - }) -} - -func makeStateViewer(stateRoot cid.Cid, networkPower abi.StoragePower) consensus.FakeConsensusStateViewer { - return consensus.FakeConsensusStateViewer{ - Views: map[cid.Cid]*appstate.FakeStateView{ - stateRoot: appstate.NewFakeStateView(networkPower, networkPower, 0, 0), - }, - } -} diff --git a/internal/pkg/constants/registered_proofs.go b/internal/pkg/constants/registered_proofs.go deleted file mode 100644 index 02726e305b..0000000000 --- a/internal/pkg/constants/registered_proofs.go +++ /dev/null @@ -1,8 +0,0 @@ -package constants - -import "github.com/filecoin-project/specs-actors/actors/abi" - -var DevRegisteredSealProof = abi.RegisteredProof_StackedDRG2KiBSeal - -var DevRegisteredWinningPoStProof = abi.RegisteredProof_StackedDRG2KiBWinningPoSt -var DevRegisteredWindowPoStProof = abi.RegisteredProof_StackedDRG2KiBWindowPoSt diff --git a/internal/pkg/crypto/crypto.go b/internal/pkg/crypto/crypto.go deleted file mode 100644 index 16c57b847d..0000000000 --- a/internal/pkg/crypto/crypto.go +++ /dev/null @@ -1,120 +0,0 @@ -package crypto - -import ( - "crypto/ecdsa" - "crypto/elliptic" - "fmt" - "io" - - secp256k1 "github.com/ipsn/go-secp256k1" - - bls "github.com/filecoin-project/filecoin-ffi" -) - -// -// Abstract SECP and BLS crypto operations. -// - -// PrivateKeyBytes is the size of a serialized private key. -const PrivateKeyBytes = 32 - -// PublicKeyBytes is the size of a serialized public key. -const PublicKeyBytes = 65 - -// PublicKeyForSecpSecretKey returns the public key for this private key. -func PublicKeyForSecpSecretKey(sk []byte) []byte { - x, y := secp256k1.S256().ScalarBaseMult(sk) - return elliptic.Marshal(secp256k1.S256(), x, y) -} - -// SignSecp signs the given message using secp256k1 based cryptography, which must be 32 bytes long. -func SignSecp(sk, msg []byte) ([]byte, error) { - return secp256k1.Sign(msg, sk) -} - -// SignBLS signs the given message with BLS. -func SignBLS(sk, msg []byte) ([]byte, error) { - var privateKey bls.PrivateKey - copy(privateKey[:], sk) - sig := bls.PrivateKeySign(privateKey, msg) - return sig[:], nil -} - -// VerifySecp checks the given signature is a secp256k1 signature and returns true if it is valid. -func VerifySecp(pk, msg, signature []byte) bool { - if len(signature) == 65 { - // Drop the V (1byte) in [R | S | V] style signatures. - // The V (1byte) is the recovery bit and is not apart of the signature verification. - return secp256k1.VerifySignature(pk[:], msg, signature[:len(signature)-1]) - } - - return secp256k1.VerifySignature(pk[:], msg, signature) -} - -// VerifyBLS checks the given signature is valid using BLS cryptography. -func VerifyBLS(pubKey, msg, signature []byte) bool { - var blsSig bls.Signature - copy(blsSig[:], signature) - var blsPubKey bls.PublicKey - copy(blsPubKey[:], pubKey) - return bls.Verify(&blsSig, []bls.Digest{bls.Hash(msg)}, []bls.PublicKey{blsPubKey}) -} - -// VerifyBLSAggregate checks the given signature is a valid aggregate signature over all messages and public keys -func VerifyBLSAggregate(pubKeys, msgs [][]byte, signature []byte) bool { - digests := []bls.Digest{} - for _, msg := range msgs { - digests = append(digests, bls.Hash(msg)) - } - - keys := []bls.PublicKey{} - for _, pubKey := range pubKeys { - var blsPubKey bls.PublicKey - copy(blsPubKey[:], pubKey) - keys = append(keys, blsPubKey) - } - - var blsSig bls.Signature - copy(blsSig[:], signature) - return bls.Verify(&blsSig, digests, keys) -} - -// NewSecpKeyFromSeed generates a new key from the given reader. -func NewSecpKeyFromSeed(seed io.Reader) (KeyInfo, error) { - key, err := ecdsa.GenerateKey(secp256k1.S256(), seed) - if err != nil { - return KeyInfo{}, err - } - - privkey := make([]byte, PrivateKeyBytes) - blob := key.D.Bytes() - - // the length is guaranteed to be fixed, given the serialization rules for secp2561k curve points. - copy(privkey[PrivateKeyBytes-len(blob):], blob) - - return KeyInfo{ - PrivateKey: privkey, - SigType: SigTypeSecp256k1, - }, nil -} - -func NewBLSKeyFromSeed(seed io.Reader) (KeyInfo, error) { - var seedBytes bls.PrivateKeyGenSeed - read, err := seed.Read(seedBytes[:]) - if err != nil { - return KeyInfo{}, err - } - if read != len(seedBytes) { - return KeyInfo{}, fmt.Errorf("read only %d bytes of %d required from seed", read, len(seedBytes)) - } - k := bls.PrivateKeyGenerateWithSeed(seedBytes) - return KeyInfo{ - PrivateKey: k[:], - SigType: SigTypeBLS, - }, nil -} - -// EcRecover recovers the public key from a message, signature pair. -func EcRecover(msg, signature []byte) ([]byte, error) { - return secp256k1.RecoverPubkey(msg, signature) -} diff --git a/internal/pkg/crypto/crypto_test.go b/internal/pkg/crypto/crypto_test.go deleted file mode 100644 index 10b1e006c1..0000000000 --- a/internal/pkg/crypto/crypto_test.go +++ /dev/null @@ -1,87 +0,0 @@ -package crypto_test - -import ( - "bytes" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - bls "github.com/filecoin-project/filecoin-ffi" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestGenerateSecpKey(t *testing.T) { - tf.UnitTest(t) - - token := bytes.Repeat([]byte{42}, 512) - ki, err := crypto.NewSecpKeyFromSeed(bytes.NewReader(token)) - assert.NoError(t, err) - sk := ki.PrivateKey - - assert.Equal(t, len(sk), 32) - - msg := make([]byte, 32) - for i := 0; i < len(msg); i++ { - msg[i] = byte(i) - } - - digest, err := crypto.SignSecp(sk, msg) - assert.NoError(t, err) - assert.Equal(t, len(digest), 65) - pk := crypto.PublicKeyForSecpSecretKey(sk) - - // valid signature - assert.True(t, crypto.VerifySecp(pk, msg, digest)) - - // invalid signature - different message (too short) - assert.False(t, crypto.VerifySecp(pk, msg[3:], digest)) - - // invalid signature - different message - msg2 := make([]byte, 32) - copy(msg2, msg) - msg2[0] = 42 - assert.False(t, crypto.VerifySecp(pk, msg2, digest)) - - // invalid signature - different digest - digest2 := make([]byte, 65) - copy(digest2, digest) - digest2[0] = 42 - assert.False(t, crypto.VerifySecp(pk, msg, digest2)) - - // invalid signature - digest too short - assert.False(t, crypto.VerifySecp(pk, msg, digest[3:])) - assert.False(t, crypto.VerifySecp(pk, msg, digest[:29])) - - // invalid signature - digest too long - digest3 := make([]byte, 70) - copy(digest3, digest) - assert.False(t, crypto.VerifySecp(pk, msg, digest3)) - - recovered, err := crypto.EcRecover(msg, digest) - assert.NoError(t, err) - assert.Equal(t, recovered, crypto.PublicKeyForSecpSecretKey(sk)) -} - -func TestBLSSigning(t *testing.T) { - privateKey := bls.PrivateKeyGenerate() - data := []byte("data to be signed") - - signature, err := crypto.SignBLS(privateKey[:], data) - require.NoError(t, err) - - publicKey := bls.PrivateKeyPublicKey(privateKey) - - valid := crypto.VerifyBLS(publicKey[:], data, signature) - require.True(t, valid) - - // invalid signature fails - valid = crypto.VerifyBLS(publicKey[:], data, signature[3:]) - require.False(t, valid) - - // invalid digest fails - valid = crypto.VerifyBLS(publicKey[:], data[3:], signature) - require.False(t, valid) - -} diff --git a/internal/pkg/crypto/keyinfo.go b/internal/pkg/crypto/keyinfo.go deleted file mode 100644 index c26eab9fa4..0000000000 --- a/internal/pkg/crypto/keyinfo.go +++ /dev/null @@ -1,80 +0,0 @@ -package crypto - -import ( - "bytes" - - "github.com/filecoin-project/go-address" - "github.com/pkg/errors" - - bls "github.com/filecoin-project/filecoin-ffi" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" -) - -// KeyInfo is a key and its type used for signing. -type KeyInfo struct { - // Private key. - PrivateKey []byte `json:"privateKey"` - // Cryptographic system used to generate private key. - SigType SigType `json:"sigType"` -} - -// Unmarshal decodes raw cbor bytes into KeyInfo. -func (ki *KeyInfo) Unmarshal(b []byte) error { - return encoding.Decode(b, ki) -} - -// Marshal KeyInfo into bytes. -func (ki *KeyInfo) Marshal() ([]byte, error) { - return encoding.Encode(ki) -} - -// Key returns the private key of KeyInfo -func (ki *KeyInfo) Key() []byte { - return ki.PrivateKey -} - -// Type returns the type of curve used to generate the private key -func (ki *KeyInfo) Type() SigType { - return ki.SigType -} - -// Equals returns true if the KeyInfo is equal to other. -func (ki *KeyInfo) Equals(other *KeyInfo) bool { - if ki == nil && other == nil { - return true - } - if ki == nil || other == nil { - return false - } - if ki.SigType != other.SigType { - return false - } - - return bytes.Equal(ki.PrivateKey, other.PrivateKey) -} - -// Address returns the address for this keyinfo -func (ki *KeyInfo) Address() (address.Address, error) { - if ki.SigType == SigTypeBLS { - return address.NewBLSAddress(ki.PublicKey()) - } - if ki.SigType == SigTypeSecp256k1 { - return address.NewSecp256k1Address(ki.PublicKey()) - } - return address.Undef, errors.Errorf("can not generate address for unknown crypto system: %d", ki.SigType) -} - -// Returns the public key part as uncompressed bytes. -func (ki *KeyInfo) PublicKey() []byte { - if ki.SigType == SigTypeBLS { - var blsPrivateKey bls.PrivateKey - copy(blsPrivateKey[:], ki.PrivateKey) - publicKey := bls.PrivateKeyPublicKey(blsPrivateKey) - - return publicKey[:] - } - if ki.SigType == SigTypeSecp256k1 { - return PublicKeyForSecpSecretKey(ki.PrivateKey) - } - return []byte{} -} diff --git a/internal/pkg/crypto/keyinfo_test.go b/internal/pkg/crypto/keyinfo_test.go deleted file mode 100644 index 7492858365..0000000000 --- a/internal/pkg/crypto/keyinfo_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package crypto_test - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestKeyInfoMarshal(t *testing.T) { - tf.UnitTest(t) - - ki := crypto.KeyInfo{ - PrivateKey: []byte{1, 2, 3, 4}, - SigType: crypto.SigTypeSecp256k1, - } - - marshaled, err := ki.Marshal() - assert.NoError(t, err) - - kiBack := &crypto.KeyInfo{} - err = kiBack.Unmarshal(marshaled) - assert.NoError(t, err) - - assert.Equal(t, ki.Key(), kiBack.Key()) - assert.Equal(t, ki.Type(), kiBack.Type()) - assert.True(t, ki.Equals(kiBack)) -} diff --git a/internal/pkg/crypto/randomness.go b/internal/pkg/crypto/randomness.go deleted file mode 100644 index 80405d22f4..0000000000 --- a/internal/pkg/crypto/randomness.go +++ /dev/null @@ -1,83 +0,0 @@ -package crypto - -import ( - "bytes" - "context" - "encoding/binary" - "fmt" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/crypto" - "github.com/minio/blake2b-simd" - "github.com/pkg/errors" -) - -type RandomSeed []byte - -///// Chain sampling ///// - -type ChainSampler interface { - Sample(ctx context.Context, epoch abi.ChainEpoch) (RandomSeed, error) -} - -// A sampler for use when computing genesis state (the state that the genesis block points to as parent state). -// There is no chain to sample a seed from. -type GenesisSampler struct { - VRFProof VRFPi -} - -func (g *GenesisSampler) Sample(_ context.Context, epoch abi.ChainEpoch) (RandomSeed, error) { - if epoch > 0 { - return nil, fmt.Errorf("invalid use of genesis sampler for epoch %d", epoch) - } - return MakeRandomSeed(g.VRFProof) -} - -// Computes a random seed from raw ticket bytes. -// A randomness seed is the VRF digest of the minimum ticket of the tipset at or before the requested epoch -func MakeRandomSeed(rawVRFProof VRFPi) (RandomSeed, error) { - digest := rawVRFProof.Digest() - return digest[:], nil -} - -///// Randomness derivation ///// - -// RandomnessSource provides randomness to actors. -type RandomnessSource interface { - Randomness(ctx context.Context, tag crypto.DomainSeparationTag, epoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) -} - -// A randomness source that seeds computations with a sample drawn from a chain epoch. -type ChainRandomnessSource struct { - Sampler ChainSampler -} - -func (c *ChainRandomnessSource) Randomness(ctx context.Context, tag crypto.DomainSeparationTag, epoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { - seed, err := c.Sampler.Sample(ctx, epoch) - if err != nil { - return nil, errors.Wrap(err, "failed to sample chain for randomness") - } - return BlendEntropy(tag, seed, epoch, entropy) -} - -func BlendEntropy(tag crypto.DomainSeparationTag, seed RandomSeed, epoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { - buffer := bytes.Buffer{} - err := binary.Write(&buffer, binary.BigEndian, int64(tag)) - if err != nil { - return nil, errors.Wrap(err, "failed to write tag for randomness") - } - _, err = buffer.Write(seed) - if err != nil { - return nil, errors.Wrap(err, "failed to write seed for randomness") - } - err = binary.Write(&buffer, binary.BigEndian, int64(epoch)) - if err != nil { - return nil, errors.Wrap(err, "failed to write epoch for randomness") - } - _, err = buffer.Write(entropy) - if err != nil { - return nil, errors.Wrap(err, "failed to write entropy for randomness") - } - bufHash := blake2b.Sum256(buffer.Bytes()) - return bufHash[:], nil -} diff --git a/internal/pkg/crypto/signatures.go b/internal/pkg/crypto/signatures.go deleted file mode 100644 index 325edff5e3..0000000000 --- a/internal/pkg/crypto/signatures.go +++ /dev/null @@ -1,86 +0,0 @@ -package crypto - -import ( - "fmt" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/crypto" - "github.com/minio/blake2b-simd" -) - -// -// Address-based signature validation -// - -type Signature = crypto.Signature -type SigType = crypto.SigType - -const ( - SigTypeSecp256k1 = crypto.SigTypeSecp256k1 - SigTypeBLS = crypto.SigTypeBLS -) - -func Sign(data []byte, secretKey []byte, sigtype SigType) (Signature, error) { - var signature []byte - var err error - if sigtype == SigTypeSecp256k1 { - hash := blake2b.Sum256(data) - signature, err = SignSecp(secretKey, hash[:]) - } else if sigtype == SigTypeBLS { - signature, err = SignBLS(secretKey, data) - } else { - err = fmt.Errorf("unknown signature type %d", sigtype) - } - return Signature{ - Type: sigtype, - Data: signature, - }, err -} - -// ValidateSignature cryptographically verifies that 'sig' is the signed hash of 'data' with -// the public key belonging to `addr`. -func ValidateSignature(data []byte, addr address.Address, sig Signature) error { - switch addr.Protocol() { - case address.SECP256K1: - if sig.Type != SigTypeSecp256k1 { - return fmt.Errorf("incorrect signature type (%v) for address expected SECP256K1 signature", sig.Type) - } - return ValidateSecpSignature(data, addr, sig.Data) - case address.BLS: - if sig.Type != SigTypeBLS { - return fmt.Errorf("incorrect signature type (%v) for address expected BLS signature", sig.Type) - } - return ValidateBlsSignature(data, addr, sig.Data) - default: - return fmt.Errorf("incorrect address protocol (%v) for signature validation", addr.Protocol()) - } -} - -func ValidateSecpSignature(data []byte, addr address.Address, signature []byte) error { - if addr.Protocol() != address.SECP256K1 { - return fmt.Errorf("address protocol (%v) invalid for SECP256K1 signature verification", addr.Protocol()) - } - hash := blake2b.Sum256(data) - maybePk, err := EcRecover(hash[:], signature) - if err != nil { - return err - } - maybeAddr, err := address.NewSecp256k1Address(maybePk) - if err != nil { - return err - } - if maybeAddr != addr { - return fmt.Errorf("invalid SECP signature") - } - return nil -} - -func ValidateBlsSignature(data []byte, addr address.Address, signature []byte) error { - if addr.Protocol() != address.BLS { - return fmt.Errorf("address protocol (%v) invalid for BLS signature verification", addr.Protocol()) - } - if valid := VerifyBLS(addr.Payload(), data, signature); !valid { - return fmt.Errorf("invalid BLS signature") - } - return nil -} diff --git a/internal/pkg/crypto/vrf.go b/internal/pkg/crypto/vrf.go deleted file mode 100644 index 751a85c34a..0000000000 --- a/internal/pkg/crypto/vrf.go +++ /dev/null @@ -1,18 +0,0 @@ -package crypto - -import "github.com/minio/blake2b-simd" - -// VRFPi is the proof output from running a VRF. -type VRFPi []byte - -type ElectionProof struct { - _ struct{} `cbor:",toarray"` - // A proof output by running a VRF on the VRFProof of the parent ticket - VRFProof VRFPi -} - -// Digest returns the digest (hash) of a proof, for use generating challenges etc. -func (p VRFPi) Digest() [32]byte { - proofDigest := blake2b.Sum256(p) - return proofDigest -} diff --git a/internal/pkg/discovery/bootstrap.go b/internal/pkg/discovery/bootstrap.go deleted file mode 100644 index c9888a23dd..0000000000 --- a/internal/pkg/discovery/bootstrap.go +++ /dev/null @@ -1,170 +0,0 @@ -package discovery - -import ( - "context" - "math/rand" - "sync" - "time" - - logging "github.com/ipfs/go-log/v2" - host "github.com/libp2p/go-libp2p-core/host" - inet "github.com/libp2p/go-libp2p-core/network" - peer "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/routing" - dht "github.com/libp2p/go-libp2p-kad-dht" - - "github.com/filecoin-project/go-filecoin/internal/pkg/util/moresync" -) - -var logBootstrap = logging.Logger("net.bootstrap") -var filecoinDHTBootstrapConfig = dht.BootstrapConfig{ - // Recommended initial options from issu #1947 - Queries: 2, - Period: 5 * time.Minute, - Timeout: time.Minute, -} - -// Bootstrapper attempts to keep the p2p host connected to the filecoin network -// by keeping a minimum threshold of connections. If the threshold isn't met it -// connects to a random subset of the bootstrap peers. It does not use peer routing -// to discover new peers. To stop a Bootstrapper cancel the context passed in Start() -// or call Stop(). -type Bootstrapper struct { - // Config - // MinPeerThreshold is the number of connections it attempts to maintain. - MinPeerThreshold int - // Peers to connect to if we fall below the threshold. - bootstrapPeers []peer.AddrInfo - // Period is the interval at which it periodically checks to see - // if the threshold is maintained. - Period time.Duration - // ConnectionTimeout is how long to wait before timing out a connection attempt. - ConnectionTimeout time.Duration - - // Dependencies - h host.Host - d inet.Dialer - r routing.Routing - // Does the work. Usually Bootstrapper.bootstrap. Argument is a slice of - // currently-connected peers (so it won't attempt to reconnect). - Bootstrap func([]peer.ID) - - // Bookkeeping - ticker *time.Ticker - ctx context.Context - cancel context.CancelFunc - dhtBootStarted bool - filecoinPeers *moresync.Latch -} - -// NewBootstrapper returns a new Bootstrapper that will attempt to keep connected -// to the filecoin network by connecting to the given bootstrap peers. -func NewBootstrapper(bootstrapPeers []peer.AddrInfo, h host.Host, d inet.Dialer, r routing.Routing, minPeer int, period time.Duration) *Bootstrapper { - b := &Bootstrapper{ - MinPeerThreshold: minPeer, - bootstrapPeers: bootstrapPeers, - Period: period, - ConnectionTimeout: 20 * time.Second, - - h: h, - d: d, - r: r, - - filecoinPeers: moresync.NewLatch(uint(minPeer)), - } - b.Bootstrap = b.bootstrap - return b -} - -// Start starts the Bootstrapper bootstrapping. Cancel `ctx` or call Stop() to stop it. -func (b *Bootstrapper) Start(ctx context.Context) { - b.ctx, b.cancel = context.WithCancel(ctx) - b.ticker = time.NewTicker(b.Period) - - go func() { - defer b.ticker.Stop() - - for { - select { - case <-b.ctx.Done(): - return - case <-b.ticker.C: - b.Bootstrap(b.d.Peers()) - } - } - }() -} - -// Stop stops the Bootstrapper. -func (b *Bootstrapper) Stop() { - if b.cancel != nil { - b.cancel() - } -} - -// bootstrap does the actual work. If the number of connected peers -// has fallen below b.MinPeerThreshold it will attempt to connect to -// a random subset of its bootstrap peers. -func (b *Bootstrapper) bootstrap(currentPeers []peer.ID) { - peersNeeded := b.MinPeerThreshold - len(currentPeers) - if peersNeeded < 1 { - return - } - - ctx, cancel := context.WithTimeout(b.ctx, b.ConnectionTimeout) - var wg sync.WaitGroup - defer func() { - wg.Wait() - // After connecting to bootstrap peers, bootstrap the DHT. - // DHT Bootstrap is a persistent process so only do this once. - if !b.dhtBootStarted { - b.dhtBootStarted = true - err := b.bootstrapIpfsRouting() - if err != nil { - logBootstrap.Warnf("got error trying to bootstrap Routing: %s. Peer discovery may suffer.", err.Error()) - } - } - cancel() - }() - - peersAttempted := 0 - for _, i := range rand.Perm(len(b.bootstrapPeers)) { - pinfo := b.bootstrapPeers[i] - // Don't try to connect to an already connected peer. - if hasPID(currentPeers, pinfo.ID) { - continue - } - - wg.Add(1) - go func() { - if err := b.h.Connect(ctx, pinfo); err != nil { - logBootstrap.Errorf("got error trying to connect to bootstrap node %+v: %s", pinfo, err.Error()) - } - wg.Done() - }() - peersAttempted++ - if peersAttempted == peersNeeded { - return - } - } - logBootstrap.Warnf("not enough bootstrap nodes to maintain %d connections (current connections: %d)", b.MinPeerThreshold, len(currentPeers)) -} - -func hasPID(pids []peer.ID, pid peer.ID) bool { - for _, p := range pids { - if p == pid { - return true - } - } - return false -} - -func (b *Bootstrapper) bootstrapIpfsRouting() error { - dht, ok := b.r.(*dht.IpfsDHT) - if !ok { - // No bootstrapping to do exit quietly. - return nil - } - - return dht.BootstrapWithConfig(b.ctx, filecoinDHTBootstrapConfig) -} diff --git a/internal/pkg/discovery/bootstrap_test.go b/internal/pkg/discovery/bootstrap_test.go deleted file mode 100644 index 19fd635dbf..0000000000 --- a/internal/pkg/discovery/bootstrap_test.go +++ /dev/null @@ -1,134 +0,0 @@ -package discovery - -import ( - "context" - "sync" - "testing" - "time" - - offroute "github.com/ipfs/go-ipfs-routing/offline" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func panicConnect(_ context.Context, _ peer.AddrInfo) error { panic("shouldn't be called") } -func nopPeers() []peer.ID { return []peer.ID{} } -func panicPeers() []peer.ID { panic("shouldn't be called") } - -type blankValidator struct{} - -func (blankValidator) Validate(_ string, _ []byte) error { return nil } -func (blankValidator) Select(_ string, _ [][]byte) (int, error) { return 0, nil } - -func TestBootstrapperStartAndStop(t *testing.T) { - tf.UnitTest(t) - - fakeHost := th.NewFakeHost() - fakeDialer := &th.FakeDialer{PeersImpl: nopPeers} - fakeRouter := offroute.NewOfflineRouter(repo.NewInMemoryRepo().Datastore(), blankValidator{}) - - // Check that Start() causes Bootstrap() to be periodically called and - // that canceling the context causes it to stop being called. Do this - // by stubbing out Bootstrap to keep a count of the number of times it - // is called and to cancel its context after several calls. - b := NewBootstrapper([]peer.AddrInfo{}, fakeHost, fakeDialer, fakeRouter, 0, 200*time.Millisecond) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - // protects callCount - var lk sync.Mutex - callCount := 0 - b.Bootstrap = func([]peer.ID) { - lk.Lock() - defer lk.Unlock() - callCount++ - if callCount == 3 { - - // If b.Period is configured to be a too small, b.ticker will tick - // again before the context's done-channel sees a value. This - // results in a callCount of 4 instead of 3. - cancel() - } - } - - b.Start(ctx) - time.Sleep(1000 * time.Millisecond) - - lk.Lock() - defer lk.Unlock() - assert.Equal(t, 3, callCount) -} - -func TestBootstrapperBootstrap(t *testing.T) { - tf.UnitTest(t) - - t.Run("Doesn't connect if already have enough peers", func(t *testing.T) { - fakeHost := &th.FakeHost{ConnectImpl: panicConnect} - fakeDialer := &th.FakeDialer{PeersImpl: panicPeers} - fakeRouter := offroute.NewOfflineRouter(repo.NewInMemoryRepo().Datastore(), blankValidator{}) - ctx := context.Background() - - b := NewBootstrapper([]peer.AddrInfo{}, fakeHost, fakeDialer, fakeRouter, 1, time.Minute) - currentPeers := []peer.ID{th.RequireRandomPeerID(t)} // Have 1 - b.ctx = ctx - assert.NotPanics(t, func() { b.bootstrap(currentPeers) }) - }) - - var lk sync.Mutex - var connectCount int - countingConnect := func(context.Context, peer.AddrInfo) error { - lk.Lock() - defer lk.Unlock() - connectCount++ - return nil - } - - t.Run("Connects if don't have enough peers", func(t *testing.T) { - fakeHost := &th.FakeHost{ConnectImpl: countingConnect} - lk.Lock() - connectCount = 0 - lk.Unlock() - fakeDialer := &th.FakeDialer{PeersImpl: panicPeers} - fakeRouter := offroute.NewOfflineRouter(repo.NewInMemoryRepo().Datastore(), blankValidator{}) - - bootstrapPeers := []peer.AddrInfo{ - {ID: th.RequireRandomPeerID(t)}, - {ID: th.RequireRandomPeerID(t)}, - } - b := NewBootstrapper(bootstrapPeers, fakeHost, fakeDialer, fakeRouter, 3, time.Minute) - b.ctx = context.Background() - currentPeers := []peer.ID{th.RequireRandomPeerID(t)} // Have 1 - b.bootstrap(currentPeers) - time.Sleep(20 * time.Millisecond) - lk.Lock() - assert.Equal(t, 2, connectCount) - lk.Unlock() - }) - - t.Run("Doesn't try to connect to an already connected peer", func(t *testing.T) { - fakeHost := &th.FakeHost{ConnectImpl: countingConnect} - lk.Lock() - connectCount = 0 - lk.Unlock() - fakeDialer := &th.FakeDialer{PeersImpl: panicPeers} - fakeRouter := offroute.NewOfflineRouter(repo.NewInMemoryRepo().Datastore(), blankValidator{}) - - connectedPeerID := th.RequireRandomPeerID(t) - bootstrapPeers := []peer.AddrInfo{ - {ID: connectedPeerID}, - } - - b := NewBootstrapper(bootstrapPeers, fakeHost, fakeDialer, fakeRouter, 2, time.Minute) // Need 2 bootstrap peers. - b.ctx = context.Background() - currentPeers := []peer.ID{connectedPeerID} // Have 1, which is the bootstrap peer. - b.bootstrap(currentPeers) - time.Sleep(20 * time.Millisecond) - lk.Lock() - assert.Equal(t, 0, connectCount) - lk.Unlock() - }) -} diff --git a/internal/pkg/discovery/hello_protocol.go b/internal/pkg/discovery/hello_protocol.go deleted file mode 100644 index 283885eac4..0000000000 --- a/internal/pkg/discovery/hello_protocol.go +++ /dev/null @@ -1,284 +0,0 @@ -package discovery - -import ( - "context" - "fmt" - "io/ioutil" - "time" - - "github.com/filecoin-project/specs-actors/actors/abi" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/ipfs/go-cid" - logging "github.com/ipfs/go-log/v2" - "github.com/libp2p/go-libp2p-core/host" - net "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" - ma "github.com/multiformats/go-multiaddr" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics" -) - -var log = logging.Logger("/fil/hello") - -// helloProtocolID is the libp2p protocol identifier for the hello protocol. -const helloProtocolID = "/fil/hello/1.0.0" - -var genesisErrCt = metrics.NewInt64Counter("hello_genesis_error", "Number of errors encountered in hello protocol due to incorrect genesis block") -var helloMsgErrCt = metrics.NewInt64Counter("hello_message_error", "Number of errors encountered in hello protocol due to malformed message") - -// HelloMessage is the data structure of a single message in the hello protocol. -type HelloMessage struct { - _ struct{} `cbor:",toarray"` - HeaviestTipSetCids block.TipSetKey - HeaviestTipSetHeight abi.ChainEpoch - HeaviestTipSetWeight fbig.Int - GenesisHash e.Cid -} - -// LatencyMessage is written in response to a hello message for measuring peer -// latency. -type LatencyMessage struct { - _ struct{} `cbor:",toarray"` - TArrival int64 - TSent int64 -} - -// HelloProtocolHandler implements the 'Hello' protocol handler. -// -// Upon connecting to a new node, we send them a message -// containing some information about the state of our chain, -// and receive the same information from them. This is used to -// initiate a chainsync and detect connections to forks. -type HelloProtocolHandler struct { - host host.Host - - genesis cid.Cid - - // peerDiscovered is called when new peers tell us about their chain - peerDiscovered peerDiscoveredCallback - - // is used to retrieve the current heaviest tipset - // for filling out our hello messages. - getHeaviestTipSet getTipSetFunc - - networkName string -} - -type peerDiscoveredCallback func(ci *block.ChainInfo) - -type getTipSetFunc func() (block.TipSet, error) - -// NewHelloProtocolHandler creates a new instance of the hello protocol `Handler` and registers it to -// the given `host.Host`. -func NewHelloProtocolHandler(h host.Host, gen cid.Cid, networkName string) *HelloProtocolHandler { - return &HelloProtocolHandler{ - host: h, - genesis: gen, - networkName: networkName, - } -} - -// Register registers the handler with the network. -func (h *HelloProtocolHandler) Register(peerDiscoveredCallback peerDiscoveredCallback, getHeaviestTipSet getTipSetFunc) { - // register callbacks - h.peerDiscovered = peerDiscoveredCallback - h.getHeaviestTipSet = getHeaviestTipSet - - // register a handle for when a new connection against someone is created - h.host.SetStreamHandler(helloProtocolID, h.handleNewStream) - - // register for connection notifications - h.host.Network().Notify((*helloProtocolNotifiee)(h)) -} - -func (h *HelloProtocolHandler) handleNewStream(s net.Stream) { - defer s.Close() // nolint: errcheck - ctx := context.Background() - hello, err := h.receiveHello(ctx, s) - if err != nil { - helloMsgErrCt.Inc(ctx, 1) - log.Debugf("failed to receive hello message:%s", err) - // can't process a hello received in error, but leave this connection - // open because we connections are innocent until proven guilty - // (with bad genesis) - return - } - latencyMsg := &LatencyMessage{TArrival: time.Now().UnixNano()} - - // process the hello message - from := s.Conn().RemotePeer() - ci, err := h.processHelloMessage(from, hello) - switch { - // no error - case err == nil: - // notify the local node of the new `block.ChainInfo` - h.peerDiscovered(ci) - // processing errors - case err == ErrBadGenesis: - log.Debugf("peer genesis cid: %s does not match ours: %s, disconnecting from peer: %s", &hello.GenesisHash, h.genesis, from) - genesisErrCt.Inc(context.Background(), 1) - _ = s.Conn().Close() - return - default: - // Note: we do not know why it failed, but we do not wish to shut down all protocols because of it - log.Error(err) - } - - // Send the latendy message - latencyMsg.TSent = time.Now().UnixNano() - err = h.sendLatency(latencyMsg, s) - if err != nil { - log.Error(err) - } - - return -} - -// ErrBadGenesis is the error returned when a mismatch in genesis blocks happens. -var ErrBadGenesis = fmt.Errorf("bad genesis block") - -func (h *HelloProtocolHandler) processHelloMessage(from peer.ID, msg *HelloMessage) (*block.ChainInfo, error) { - if !msg.GenesisHash.Equals(h.genesis) { - return nil, ErrBadGenesis - } - - // Note: both the sender and the source are the sender for the hello messages - return block.NewChainInfo(from, from, msg.HeaviestTipSetCids, msg.HeaviestTipSetHeight), nil -} - -func (h *HelloProtocolHandler) getOurHelloMessage() (*HelloMessage, error) { - heaviest, err := h.getHeaviestTipSet() - if err != nil { - return nil, err - } - height, err := heaviest.Height() - if err != nil { - return nil, err - } - weight, err := heaviest.ParentWeight() - if err != nil { - return nil, err - } - - return &HelloMessage{ - GenesisHash: e.NewCid(h.genesis), - HeaviestTipSetCids: heaviest.Key(), - HeaviestTipSetHeight: height, - HeaviestTipSetWeight: weight, - }, nil -} - -func (h *HelloProtocolHandler) receiveHello(ctx context.Context, s net.Stream) (*HelloMessage, error) { - var hello HelloMessage - // Read cbor bytes from stream into hello message - mr := cborutil.NewMsgReader(s) - err := mr.ReadMsg(&hello) - return &hello, err -} - -func (h *HelloProtocolHandler) receiveLatency(ctx context.Context, s net.Stream) (*LatencyMessage, error) { - var latency LatencyMessage - rawLatency, err := ioutil.ReadAll(s) - if err != nil { - return nil, err - } - err = encoding.Decode(rawLatency, &latency) - if err != nil { - return nil, err - } - return &latency, nil -} - -// sendHello send a hello message on stream `s`. -func (h *HelloProtocolHandler) sendHello(s net.Stream) error { - msg, err := h.getOurHelloMessage() - if err != nil { - return err - } - msgRaw, err := encoding.Encode(msg) - if err != nil { - return err - } - n, err := s.Write(msgRaw) - if err != nil { - return err - } - if n != len(msgRaw) { - return fmt.Errorf("could not write all hello message bytes") - } - return nil -} - -func (h *HelloProtocolHandler) sendLatency(msg *LatencyMessage, s net.Stream) error { - msgRaw, err := encoding.Encode(msg) - if err != nil { - return err - } - n, err := s.Write(msgRaw) - if err != nil { - return err - } - if n != len(msgRaw) { - return fmt.Errorf("could not write all latency message bytes") - } - return nil -} - -// Note: hide `net.Notifyee` impl using a new-type -type helloProtocolNotifiee HelloProtocolHandler - -const helloTimeout = time.Second * 10 - -func (hn *helloProtocolNotifiee) asHandler() *HelloProtocolHandler { - return (*HelloProtocolHandler)(hn) -} - -// -// `net.Notifyee` impl for `helloNotify` -// - -func (hn *helloProtocolNotifiee) Connected(n net.Network, c net.Conn) { - // Connected is invoked when a connection is made to a libp2p node. - // - // - open stream on connection - // - send HelloMessage` on stream - // - read LatencyMessage response on stream - // - // Terminate the connection if it has a different genesis block - go func() { - // add timeout - ctx, cancel := context.WithTimeout(context.Background(), helloTimeout) - defer cancel() - s, err := hn.asHandler().host.NewStream(ctx, c.RemotePeer(), helloProtocolID) - if err != nil { - // If peer does not do hello keep connection open - return - } - defer func() { _ = s.Close() }() - // send out the hello message - err = hn.asHandler().sendHello(s) - if err != nil { - log.Debugf("failed to send hello handshake to peer %s: %s", c.RemotePeer(), err) - // Don't close connection for failed hello protocol impl - return - } - - // now receive latency message - _, err = hn.asHandler().receiveLatency(ctx, s) - if err != nil { - log.Debugf("failed to receive hello latency msg from peer %s: %s", c.RemotePeer(), err) - return - } - - }() -} - -func (hn *helloProtocolNotifiee) Listen(n net.Network, a ma.Multiaddr) { /* empty */ } -func (hn *helloProtocolNotifiee) ListenClose(n net.Network, a ma.Multiaddr) { /* empty */ } -func (hn *helloProtocolNotifiee) Disconnected(n net.Network, c net.Conn) { /* empty */ } -func (hn *helloProtocolNotifiee) OpenedStream(n net.Network, s net.Stream) { /* empty */ } -func (hn *helloProtocolNotifiee) ClosedStream(n net.Network, s net.Stream) { /* empty */ } diff --git a/internal/pkg/discovery/hello_protocol_test.go b/internal/pkg/discovery/hello_protocol_test.go deleted file mode 100644 index 69b690d3a8..0000000000 --- a/internal/pkg/discovery/hello_protocol_test.go +++ /dev/null @@ -1,167 +0,0 @@ -package discovery_test - -import ( - "context" - "testing" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - mocknet "github.com/libp2p/go-libp2p/p2p/net/mock" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/discovery" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -type mockHelloCallback struct { - mock.Mock -} - -func (msb *mockHelloCallback) HelloCallback(ci *block.ChainInfo) { - msb.Called(ci.Sender, ci.Head, ci.Height) -} - -type mockHeaviestGetter struct { - heaviest block.TipSet -} - -func (mhg *mockHeaviestGetter) getHeaviestTipSet() (block.TipSet, error) { - return mhg.heaviest, nil -} - -func TestHelloHandshake(t *testing.T) { - tf.UnitTest(t) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - mn, err := mocknet.WithNPeers(ctx, 2) - require.NoError(t, err) - - a := mn.Hosts()[0] - b := mn.Hosts()[1] - - genesisA := &block.Block{} - - heavy1 := block.RequireNewTipSet(t, &block.Block{Height: 2, Ticket: block.Ticket{VRFProof: []byte{0}}}) - heavy2 := block.RequireNewTipSet(t, &block.Block{Height: 3, Ticket: block.Ticket{VRFProof: []byte{1}}}) - - msc1, msc2 := new(mockHelloCallback), new(mockHelloCallback) - hg1, hg2 := &mockHeaviestGetter{heavy1}, &mockHeaviestGetter{heavy2} - - discovery.NewHelloProtocolHandler(a, genesisA.Cid(), "").Register(msc1.HelloCallback, hg1.getHeaviestTipSet) - discovery.NewHelloProtocolHandler(b, genesisA.Cid(), "").Register(msc2.HelloCallback, hg2.getHeaviestTipSet) - - msc1.On("HelloCallback", b.ID(), heavy2.Key(), abi.ChainEpoch(3)).Return() - msc2.On("HelloCallback", a.ID(), heavy1.Key(), abi.ChainEpoch(2)).Return() - - require.NoError(t, mn.LinkAll()) - require.NoError(t, mn.ConnectAllButSelf()) - - require.NoError(t, th.WaitForIt(10, 50*time.Millisecond, func() (bool, error) { - var msc1Done bool - var msc2Done bool - for _, call := range msc1.Calls { - if call.Method == "HelloCallback" { - if _, differences := msc1.ExpectedCalls[0].Arguments.Diff(call.Arguments); differences == 0 { - msc1Done = true - break - } - } - } - for _, call := range msc2.Calls { - if call.Method == "HelloCallback" { - if _, differences := msc2.ExpectedCalls[0].Arguments.Diff(call.Arguments); differences == 0 { - msc2Done = true - break - } - } - } - - return msc1Done && msc2Done, nil - })) -} - -func TestHelloBadGenesis(t *testing.T) { - tf.UnitTest(t) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - mn, err := mocknet.WithNPeers(ctx, 2) - assert.NoError(t, err) - - a := mn.Hosts()[0] - b := mn.Hosts()[1] - - builder := chain.NewBuilder(t, address.Undef) - - genesisA := builder.AppendBlockOn(block.UndefTipSet) - genesisB := builder.AppendBlockOn(block.UndefTipSet) - - heavy1 := block.RequireNewTipSet(t, &block.Block{Height: 2, Ticket: block.Ticket{VRFProof: []byte{0}}}) - heavy2 := block.RequireNewTipSet(t, &block.Block{Height: 3, Ticket: block.Ticket{VRFProof: []byte{1}}}) - - msc1, msc2 := new(mockHelloCallback), new(mockHelloCallback) - hg1, hg2 := &mockHeaviestGetter{heavy1}, &mockHeaviestGetter{heavy2} - - discovery.NewHelloProtocolHandler(a, genesisA.Cid(), "").Register(msc1.HelloCallback, hg1.getHeaviestTipSet) - discovery.NewHelloProtocolHandler(b, genesisB.Cid(), "").Register(msc2.HelloCallback, hg2.getHeaviestTipSet) - - msc1.On("HelloCallback", mock.Anything, mock.Anything, mock.Anything).Return() - msc2.On("HelloCallback", mock.Anything, mock.Anything, mock.Anything).Return() - - require.NoError(t, mn.LinkAll()) - require.NoError(t, mn.ConnectAllButSelf()) - - time.Sleep(time.Millisecond * 50) - - msc1.AssertNumberOfCalls(t, "HelloCallback", 0) - msc2.AssertNumberOfCalls(t, "HelloCallback", 0) -} - -func TestHelloMultiBlock(t *testing.T) { - tf.UnitTest(t) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - mn, err := mocknet.WithNPeers(ctx, 2) - assert.NoError(t, err) - - a := mn.Hosts()[0] - b := mn.Hosts()[1] - - builder := chain.NewBuilder(t, address.Undef) - - genesisTipset := builder.NewGenesis() - assert.Equal(t, 1, genesisTipset.Len()) - - heavy1 := builder.AppendOn(genesisTipset, 3) - heavy1 = builder.AppendOn(heavy1, 3) - heavy2 := builder.AppendOn(heavy1, 3) - - msc1, msc2 := new(mockHelloCallback), new(mockHelloCallback) - hg1, hg2 := &mockHeaviestGetter{heavy1}, &mockHeaviestGetter{heavy2} - - discovery.NewHelloProtocolHandler(a, genesisTipset.At(0).Cid(), "").Register(msc1.HelloCallback, hg1.getHeaviestTipSet) - discovery.NewHelloProtocolHandler(b, genesisTipset.At(0).Cid(), "").Register(msc2.HelloCallback, hg2.getHeaviestTipSet) - - msc1.On("HelloCallback", b.ID(), heavy2.Key(), abi.ChainEpoch(3)).Return() - msc2.On("HelloCallback", a.ID(), heavy1.Key(), abi.ChainEpoch(2)).Return() - - assert.NoError(t, mn.LinkAll()) - assert.NoError(t, mn.ConnectAllButSelf()) - - time.Sleep(time.Millisecond * 50) - - msc1.AssertExpectations(t) - msc2.AssertExpectations(t) -} diff --git a/internal/pkg/discovery/peer_tracker.go b/internal/pkg/discovery/peer_tracker.go deleted file mode 100644 index 70067b860d..0000000000 --- a/internal/pkg/discovery/peer_tracker.go +++ /dev/null @@ -1,141 +0,0 @@ -package discovery - -import ( - "sort" - "sync" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - logging "github.com/ipfs/go-log/v2" - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/pkg/errors" -) - -var logPeerTracker = logging.Logger("peer-tracker") - -// PeerTracker is used to record a subset of peers. Its methods are thread safe. -// It is designed to plug directly into libp2p disconnect notifications to -// automatically register dropped connections. -type PeerTracker struct { - // mu protects peers - mu sync.RWMutex - - // self tracks the ID of the peer tracker's owner - self peer.ID - - // peers maps peer.IDs to info about their chains - peers map[peer.ID]*block.ChainInfo - trusted map[peer.ID]struct{} -} - -// NewPeerTracker creates a peer tracker. -func NewPeerTracker(self peer.ID, trust ...peer.ID) *PeerTracker { - trustedSet := make(map[peer.ID]struct{}, len(trust)) - for _, t := range trust { - trustedSet[t] = struct{}{} - } - return &PeerTracker{ - peers: make(map[peer.ID]*block.ChainInfo), - trusted: trustedSet, - self: self, - } -} - -// SelectHead returns the chain info from trusted peers with the greatest height. -// An error is returned if no peers are in the tracker. -func (tracker *PeerTracker) SelectHead() (*block.ChainInfo, error) { - heads := tracker.listTrusted() - if len(heads) == 0 { - return nil, errors.New("no peers tracked") - } - sort.Slice(heads, func(i, j int) bool { return heads[i].Height > heads[j].Height }) - return heads[0], nil -} - -// Track adds information about a given peer.ID -func (tracker *PeerTracker) Track(ci *block.ChainInfo) { - tracker.mu.Lock() - defer tracker.mu.Unlock() - - _, tracking := tracker.peers[ci.Sender] - _, trusted := tracker.trusted[ci.Sender] - tracker.peers[ci.Sender] = ci - logPeerTracker.Infow("Track peer", "chainInfo", ci, "new", !tracking, "count", len(tracker.peers), "trusted", trusted) -} - -// Self returns the peer tracker's owner ID -func (tracker *PeerTracker) Self() peer.ID { - return tracker.self -} - -// List returns the chain info of the currently tracked peers (both trusted and untrusted). -// The info tracked by the tracker can change arbitrarily after this is called -- there is no -// guarantee that the peers returned will be tracked when they are used by the caller and no -// guarantee that the chain info is up to date. -func (tracker *PeerTracker) List() []*block.ChainInfo { - tracker.mu.Lock() - defer tracker.mu.Unlock() - - var tracked []*block.ChainInfo - for _, ci := range tracker.peers { - tracked = append(tracked, ci) - } - out := make([]*block.ChainInfo, len(tracked)) - copy(out, tracked) - return out -} - -// Remove removes a peer ID from the tracker. -func (tracker *PeerTracker) Remove(pid peer.ID) { - tracker.mu.Lock() - defer tracker.mu.Unlock() - - _, trusted := tracker.trusted[pid] - if _, tracking := tracker.peers[pid]; tracking { - delete(tracker.peers, pid) - if trusted { - logPeerTracker.Warnw("Dropping peer", "peer", pid.Pretty(), "trusted", trusted) - } else { - logPeerTracker.Infow("Dropping peer", "peer", pid.Pretty(), "trusted", trusted) - } - } -} - -// RegisterDisconnect registers a tracker remove operation as a libp2p -// "Disconnected" network event callback. -func (tracker *PeerTracker) RegisterDisconnect(ntwk network.Network) { - notifee := &network.NotifyBundle{} - notifee.DisconnectedF = func(network network.Network, conn network.Conn) { - pid := conn.RemotePeer() - tracker.Remove(pid) - } - ntwk.Notify(notifee) -} - -// trustedPeers returns a slice of peers trusted by the PeerTracker. trustedPeers remain constant after -// the PeerTracker has been initialized. -func (tracker *PeerTracker) trustedPeers() []peer.ID { - var peers []peer.ID - for p := range tracker.trusted { - peers = append(peers, p) - } - return peers -} - -// listTrusted returns the chain info of the trusted tracked peers. The info tracked by the tracker can -// change arbitrarily after this is called -- there is no guarantee that the peers returned will be -// tracked when they are used by the caller and no guarantee that the chain info is up to date. -func (tracker *PeerTracker) listTrusted() []*block.ChainInfo { - tracker.mu.Lock() - defer tracker.mu.Unlock() - - var tracked []*block.ChainInfo - for p, ci := range tracker.peers { - if _, trusted := tracker.trusted[p]; trusted { - tracked = append(tracked, ci) - } - } - out := make([]*block.ChainInfo, len(tracked)) - copy(out, tracked) - return out -} diff --git a/internal/pkg/discovery/peer_tracker_test.go b/internal/pkg/discovery/peer_tracker_test.go deleted file mode 100644 index 08c0f5ac77..0000000000 --- a/internal/pkg/discovery/peer_tracker_test.go +++ /dev/null @@ -1,139 +0,0 @@ -package discovery_test - -import ( - "context" - "sort" - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/discovery" - "github.com/libp2p/go-libp2p-core/peer" - mocknet "github.com/libp2p/go-libp2p/p2p/net/mock" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestPeerTrackerTracks(t *testing.T) { - tf.UnitTest(t) - - tracker := discovery.NewPeerTracker(peer.ID("")) - pid0 := th.RequireIntPeerID(t, 0) - pid1 := th.RequireIntPeerID(t, 1) - pid3 := th.RequireIntPeerID(t, 3) - pid7 := th.RequireIntPeerID(t, 7) - - ci0 := block.NewChainInfo(pid0, pid0, block.NewTipSetKey(types.CidFromString(t, "somecid")), 6) - ci1 := block.NewChainInfo(pid1, pid1, block.NewTipSetKey(), 0) - ci3 := block.NewChainInfo(pid3, pid3, block.NewTipSetKey(), 0) - ci7 := block.NewChainInfo(pid7, pid7, block.NewTipSetKey(), 0) - - tracker.Track(ci0) - tracker.Track(ci1) - tracker.Track(ci3) - tracker.Track(ci7) - - tracked := tracker.List() - sort.Sort(block.CISlice(tracked)) - expected := []*block.ChainInfo{ci0, ci1, ci3, ci7} - sort.Sort(block.CISlice(expected)) - assert.Equal(t, expected, tracked) - -} - -func TestPeerTrackerSelectHead(t *testing.T) { - tf.UnitTest(t) - - pid0 := th.RequireIntPeerID(t, 0) - pid1 := th.RequireIntPeerID(t, 1) - pid2 := th.RequireIntPeerID(t, 2) - pid3 := th.RequireIntPeerID(t, 3) - - ci0 := block.NewChainInfo(pid0, pid0, block.NewTipSetKey(types.CidFromString(t, "somecid0")), 6) - ci1 := block.NewChainInfo(pid1, pid1, block.NewTipSetKey(types.CidFromString(t, "somecid1")), 10) - ci2 := block.NewChainInfo(pid2, pid2, block.NewTipSetKey(types.CidFromString(t, "somecid2")), 7) - ci3 := block.NewChainInfo(pid3, pid3, block.NewTipSetKey(types.CidFromString(t, "somecid3")), 9) - - // trusting pid2 and pid3 - tracker := discovery.NewPeerTracker(pid2, pid3) - tracker.Track(ci0) - tracker.Track(ci1) - tracker.Track(ci2) - tracker.Track(ci3) - - // select the highest head - head, err := tracker.SelectHead() - assert.NoError(t, err) - assert.Equal(t, head.Head, ci3.Head) -} - -func TestPeerTrackerRemove(t *testing.T) { - tf.UnitTest(t) - - tracker := discovery.NewPeerTracker(peer.ID("")) - pid0 := th.RequireIntPeerID(t, 0) - pid1 := th.RequireIntPeerID(t, 1) - pid3 := th.RequireIntPeerID(t, 3) - pid7 := th.RequireIntPeerID(t, 7) - - ci0 := block.NewChainInfo(pid0, pid0, block.NewTipSetKey(types.CidFromString(t, "somecid")), 6) - ci1 := block.NewChainInfo(pid1, pid1, block.NewTipSetKey(), 0) - ci3 := block.NewChainInfo(pid3, pid3, block.NewTipSetKey(), 0) - ci7 := block.NewChainInfo(pid7, pid7, block.NewTipSetKey(), 0) - - tracker.Track(ci0) - tracker.Track(ci1) - tracker.Track(ci3) - tracker.Track(ci7) - - tracker.Remove(pid1) - tracker.Remove(pid3) - tracker.Remove(pid7) - - tracked := tracker.List() - expected := []*block.ChainInfo{ci0} - assert.Equal(t, expected, tracked) -} - -func TestPeerTrackerNetworkDisconnect(t *testing.T) { - tf.UnitTest(t) - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - mn, err := mocknet.FullMeshConnected(ctx, 4) - require.NoError(t, err) - - self := mn.Hosts()[0] - a := mn.Hosts()[1] - b := mn.Hosts()[2] - c := mn.Hosts()[3] - - selfID := self.ID() - aID := a.ID() - bID := b.ID() - cID := c.ID() - - aCI := block.NewChainInfo(aID, aID, block.NewTipSetKey(), 0) - bCI := block.NewChainInfo(bID, bID, block.NewTipSetKey(), 0) - - // self is the tracking node - // self tracks peers a and b - // self does not track peer c - tracker := discovery.NewPeerTracker(peer.ID("")) - tracker.Track(aCI) - tracker.Track(bCI) - - // register tracker OnDisconnect callback in self's network - tracker.RegisterDisconnect(self.Network()) - - // disconnect from tracked a and untracked c - require.NoError(t, mn.DisconnectPeers(selfID, aID)) - require.NoError(t, mn.DisconnectPeers(selfID, cID)) - - tracked := tracker.List() - assert.Equal(t, []*block.ChainInfo{bCI}, tracked) -} diff --git a/internal/pkg/drand/drand.go b/internal/pkg/drand/drand.go deleted file mode 100644 index 8cb454f5c5..0000000000 --- a/internal/pkg/drand/drand.go +++ /dev/null @@ -1,26 +0,0 @@ -package drand - -import ( - "context" - "time" -) - -// IFace is the standard inferface for interacting with the drand network -type IFace interface { - ReadEntry(ctx context.Context, drandRound Round) (*Entry, error) - VerifyEntry(parent, child *Entry) (bool, error) - FetchGroupConfig(addresses []string, secure bool, overrideGroupAddrs bool) ([]string, [][]byte, uint64, int, error) - StartTimeOfRound(round Round) time.Time - RoundsInInterval(startTime, endTime time.Time) []Round - FirstFilecoinRound() Round -} - -// Round is a type for recording drand round indexes -type Round uint64 - -// A verifiable entry from a beacon chain, carrying round and randomness information. -type Entry struct { - _ struct{} `cbor:",toarray"` - Round Round - Data []byte -} diff --git a/internal/pkg/drand/drand_grpc.go b/internal/pkg/drand/drand_grpc.go deleted file mode 100644 index e7b766f27e..0000000000 --- a/internal/pkg/drand/drand_grpc.go +++ /dev/null @@ -1,263 +0,0 @@ -package drand - -import ( - "context" - "errors" - "fmt" - "time" - - "github.com/drand/drand/beacon" - "github.com/drand/drand/core" - "github.com/drand/drand/key" - "github.com/drand/drand/net" - "github.com/drand/kyber" - logging "github.com/ipfs/go-log/v2" -) - -var log = logging.Logger("drand") - -// Address points to a drand server -type Address struct { - address string - secure bool -} - -// NewAddress creates a new address -func NewAddress(a string, secure bool) Address { - return Address{a, secure} -} - -// GRPC is a drand client that can fetch and verify from a public drand network -type GRPC struct { - addresses []Address - client *core.Client - key *key.DistPublic - - // The time of the 0th round of the DRAND chain - genesisTime time.Time - // the time of genesis block of the Filecoin chain - filecoinGenesisTime time.Time - // The DRAND round first included in the filecoin blockchain - firstFilecoin Round - // Duration of a round in this DRAND network - roundTime time.Duration - - // internal state - latestEntry *Entry - cache map[Round]*Entry -} - -var _ IFace = &GRPC{} - -// NewGRPC creates a client that will draw randomness from the given addresses. -// distKeyCoeff are hex encoded strings representing a distributed public key -// Behavior is undefined if provided address do not point to Drand servers in the same group. -func NewGRPC(addresses []Address, distKeyCoeff [][]byte, drandGenTime time.Time, filecoinGenTime time.Time, rd time.Duration) (*GRPC, error) { - distKey, err := groupKeycoefficientsToDistPublic(distKeyCoeff) - if err != nil { - return nil, err - } - - grpc := &GRPC{ - addresses: addresses, - client: core.NewGrpcClient(), - key: distKey, - genesisTime: drandGenTime, - filecoinGenesisTime: filecoinGenTime, - // firstFilecoin set in updateFirsFilecoinRound below - roundTime: rd, - cache: make(map[Round]*Entry), - } - err = grpc.updateFirstFilecoinRound() - if err != nil { - return nil, err - } - return grpc, nil -} - -func (d *GRPC) updateFirstFilecoinRound() error { - // First filecoin round is the first drand round before filecoinGenesisTime - searchStart := d.filecoinGenesisTime.Add(-1 * d.roundTime) - results := d.RoundsInInterval(searchStart, d.filecoinGenesisTime) - if len(results) != 1 { - return fmt.Errorf("found %d drand rounds between filecoinGenTime and filecoinGenTime - drandRountDuration, expected 1", len(results)) - } - d.firstFilecoin = results[0] - return nil -} - -// ReadEntry fetches an entry from one of the drand servers (trying them sequentially) and returns the result. -func (d *GRPC) ReadEntry(ctx context.Context, drandRound Round) (*Entry, error) { - if entry, ok := d.cache[drandRound]; ok { - return entry, nil - } - - // try each address, stopping when we have a key - for _, addr := range d.addresses { - if ctx.Err() != nil { // Don't try any more peers after cancellation. - return nil, ctx.Err() - } - // The drand client doesn't accept a context, so is un-cancellable :-( - pub, err := d.client.Public(addr.address, d.key, addr.secure, int(drandRound)) - if err != nil { - log.Warnf("Error fetching drand randomness from %s: %s", addr.address, err) - continue - } - - // Because the client.Public() call can't be cancelled by this context, it can return at any time, - // potentially leading to concurrent state updates below racing a new call to into ReadEntry() (because - // the caller thought it was cancelled already). - // This check will mostly, but not completely securely, avoid this. A robust fix requires avoiding - // concurrent calls to here completely, which ultimately arise from the goroutine in the mining scheduler. - // https://github.com/filecoin-project/go-filecoin/issues/4065 - if ctx.Err() != nil { - return nil, ctx.Err() - } - - entry := &Entry{ - Round: drandRound, - Data: pub.GetSignature(), - } - d.updateLocalState(entry) - return entry, nil - } - return nil, errors.New("could not retrieve drand randomess from any address") -} - -func (d *GRPC) updateLocalState(entry *Entry) { - if d.latestEntry == nil { - d.latestEntry = entry - } - if entry.Round > d.latestEntry.Round { - d.latestEntry = entry - } - d.cache[entry.Round] = entry -} - -// VerifyEntry verifies that the child's signature is a valid signature of the previous entry. -func (d *GRPC) VerifyEntry(parent, child *Entry) (bool, error) { - if len(d.key.Coefficients) == 0 { - return false, fmt.Errorf("no dist key configured") - } - msg := beacon.Message(uint64(child.Round), parent.Data) - err := key.Scheme.VerifyRecovered(d.key.Coefficients[0], msg, child.Data) - if err != nil { - return false, err - } - - return true, nil -} - -// FetchGroupConfig Should only be used when switching to a new drand server group. -// Returns hex encoded group key coefficients that can be used to construct a public key. -// If overrideGroupAddrs is true, the given set of addresses will be set as the drand nodes. -// Otherwise drand address config will be set from the retrieved group info. The -// override is useful when the the drand server is behind NAT. -func (d *GRPC) FetchGroupConfig(addresses []string, secure bool, overrideGroupAddrs bool) ([]string, [][]byte, uint64, int, error) { - defaultManager := net.NewCertManager() - client := core.NewGrpcClientFromCert(defaultManager) - - // try each address, stopping when we have a key - for _, addr := range addresses { - groupAddrs, keyCoeffs, genesisTime, roundSeconds, err := fetchGroupServer(client, Address{addr, secure}) - if err != nil { - log.Warnf("Error fetching drand group key from %s: %s", addr, err) - continue - } - d.genesisTime = time.Unix(int64(genesisTime), 0) - d.roundTime = time.Duration(roundSeconds) * time.Second - - distKey, err := groupKeycoefficientsToDistPublic(keyCoeffs) - if err != nil { - return nil, nil, 0, 0, err - } - d.key = distKey - - if overrideGroupAddrs { - d.addresses = drandAddresses(addresses, secure) - } else { - d.addresses = drandAddresses(groupAddrs, secure) - } - - err = d.updateFirstFilecoinRound() // this depends on genesis and round time so recalculate - if err != nil { - return nil, nil, 0, 0, err - } - - return groupAddrs, keyCoeffs, genesisTime, roundSeconds, nil - } - return nil, nil, 0, 0, errors.New("Could not retrieve drand group key from any address") -} - -func drandAddresses(addresses []string, secure bool) []Address { - addrs := make([]Address, len(addresses)) - for i, a := range addresses { - addrs[i] = NewAddress(a, secure) - } - return addrs -} - -func fetchGroupServer(client *core.Client, address Address) ([]string, [][]byte, uint64, int, error) { - groupResp, err := client.Group(address.address, address.secure) - if err != nil { - return nil, nil, 0, 0, err - } - - nodes := groupResp.GetNodes() - addrs := make([]string, len(nodes)) - for i, nd := range nodes { - addrs[i] = nd.GetAddress() - } - - return addrs, groupResp.DistKey, groupResp.GenesisTime, int(groupResp.Period), nil -} - -func groupKeycoefficientsToDistPublic(coefficients [][]byte) (*key.DistPublic, error) { - pubKey := key.DistPublic{} - pubKey.Coefficients = make([]kyber.Point, len(coefficients)) - for i, k := range coefficients { - pubKey.Coefficients[i] = key.KeyGroup.Point() - err := pubKey.Coefficients[i].UnmarshalBinary(k) - if err != nil { - return nil, err - } - } - return &pubKey, nil -} - -// FirstFilecoinRound returns the configured first drand round included in the filecoin blockchain -func (d *GRPC) FirstFilecoinRound() Round { - return d.firstFilecoin -} - -// StartTimeOfRound returns the time the given DRAND round will start if it is unskipped -func (d *GRPC) StartTimeOfRound(round Round) time.Time { - return d.genesisTime.Add(d.roundTime * time.Duration(round)) -} - -// RoundsInInterval returns all rounds in the given interval. - -func (d *GRPC) RoundsInInterval(startTime, endTime time.Time) []Round { - return roundsInInterval(startTime, endTime, d.StartTimeOfRound, d.roundTime) -} - -func roundsInInterval(startTime, endTime time.Time, startTimeOfRound func(Round) time.Time, roundDuration time.Duration) []Round { - // Find first round after startTime - genesisTime := startTimeOfRound(Round(0)) - truncatedStartRound := Round(startTime.Sub(genesisTime) / roundDuration) - var round Round - if startTimeOfRound(truncatedStartRound).Equal(startTime) { - round = truncatedStartRound - } else { - round = truncatedStartRound + 1 - } - roundTime := startTimeOfRound(round) - var rounds []Round - // Advance a round time until we hit endTime, adding rounds - for roundTime.Before(endTime) { - rounds = append(rounds, round) - round++ - roundTime = startTimeOfRound(round) - } - return rounds -} diff --git a/internal/pkg/drand/testing.go b/internal/pkg/drand/testing.go deleted file mode 100644 index 404ee2d413..0000000000 --- a/internal/pkg/drand/testing.go +++ /dev/null @@ -1,65 +0,0 @@ -package drand - -import ( - "context" - "encoding/binary" - "time" - - ffi "github.com/filecoin-project/filecoin-ffi" -) - -const testDRANDRoundDuration = 25 * time.Second - -// Fake is a fake drand utility that reads and validates entries as specified below -type Fake struct { - // Time of round 0 - GenesisTime time.Time - FirstFilecoin Round -} - -var _ IFace = &Fake{} - -// NewFake sets up a fake drand that starts exactly one testDRANDRoundDuration before -// the provided filecoin genesis time. -func NewFake(filecoinGenTime time.Time) *Fake { - drandGenTime := filecoinGenTime.Add(-1 * testDRANDRoundDuration) - return &Fake{ - GenesisTime: drandGenTime, - FirstFilecoin: Round(0), - } -} - -// ReadEntry immediately returns a drand entry with a signature equal to the -// round number -func (d *Fake) ReadEntry(_ context.Context, drandRound Round) (*Entry, error) { - fakeSigData := make([]byte, ffi.SignatureBytes) - binary.PutUvarint(fakeSigData, uint64(drandRound)) - return &Entry{ - Round: drandRound, - Data: fakeSigData, - }, nil -} - -// VerifyEntry always returns true without error -func (d *Fake) VerifyEntry(parent, child *Entry) (bool, error) { - return true, nil -} - -func (d *Fake) StartTimeOfRound(round Round) time.Time { - return d.GenesisTime.Add(testDRANDRoundDuration * time.Duration(round)) -} - -// RoundsInInterval returns the DRAND round numbers within [startTime, endTime) -// startTime inclusive, endTime exclusive. -func (d *Fake) RoundsInInterval(startTime, endTime time.Time) []Round { - return roundsInInterval(startTime, endTime, d.StartTimeOfRound, testDRANDRoundDuration) -} - -func (d *Fake) FirstFilecoinRound() Round { - return d.FirstFilecoin -} - -// FetchGroupConfig returns empty group addresses and key coefficients -func (d *Fake) FetchGroupConfig(_ []string, _, _ bool) ([]string, [][]byte, uint64, int, error) { - return []string{}, [][]byte{}, 0, 0, nil -} diff --git a/internal/pkg/enccid/enc_cid.go b/internal/pkg/enccid/enc_cid.go deleted file mode 100644 index f51f844b34..0000000000 --- a/internal/pkg/enccid/enc_cid.go +++ /dev/null @@ -1,128 +0,0 @@ -package enccid - -import ( - "encoding/json" - "fmt" - - cbor "github.com/fxamacker/cbor/v2" - cid "github.com/ipfs/go-cid" - ipldcbor "github.com/ipfs/go-ipld-cbor" -) - -// Cid is a cid wrapper that implements UnmarshalCBOR and MarshalCBOR. -// From ipld-cbor's perspective it is technically a pointer to a cid, because -// it maps `cbor null-val` <==> `cid.Undef` -type Cid struct { - cid.Cid -} - -// Undef wraps cid.Undef -var Undef = NewCid(cid.Undef) - -// NewCid creates an Cid struct from a cid -func NewCid(c cid.Cid) Cid { - return Cid{c} -} - -// MarshalCBOR converts the wrapped cid to bytes -func (w Cid) MarshalCBOR() ([]byte, error) { - // handle undef cid by writing null - // TODO: remove this handling after removing paths that attempt to encode an Undef CID - // This should never appear on chain, and the only usages are tests. - // https://github.com/filecoin-project/go-filecoin/issues/3931 - if w.Equals(cid.Undef) { - return []byte{0xf6}, nil - } - - // tag = 42 - tag0 := byte(0xd8) - tag1 := byte(0x2a) - - raw, err := castCidToBytes(w.Cid) - if err != nil { - return nil, err - } - // because we need to do the cbor tag outside the byte string we are forced - // to write the cbor type-len value for a byte string of raw's length - cborLen, err := cbor.Marshal(len(raw)) - if err != nil { - return nil, err - } - cborLen[0] |= 0x40 // flip major type 0 to major type 2 - prefixLen := len(cborLen) + 2 - - result := make([]byte, len(cborLen)+len(raw)+2, len(cborLen)+len(raw)+2) - result[0] = tag0 - result[1] = tag1 - copy(result[2:prefixLen], cborLen) - copy(result[prefixLen:], raw) - - return result, nil -} - -// UnmarshalCBOR fills the wrapped cid according to the cbor encoded bytes -func (w *Cid) UnmarshalCBOR(cborBs []byte) error { - if len(cborBs) == 0 { - return fmt.Errorf("nil bytes does not decode to cid") - } - // check undef cid - if len(cborBs) == 1 { - if cborBs[0] != 0xf6 { - return fmt.Errorf("invalid cbor bytes: %x for cid", cborBs[0]) - } - // this is a pointer to an undefined cid - w.Cid = cid.Undef - return nil - } - - // check tag: - if cborBs[0] != 0xd8 || cborBs[1] != 0x2a { - return fmt.Errorf("ipld cbor tags cids with tag 42 not %x", cborBs[:2]) - } - cborBs = cborBs[2:] - // strip len: - var cidBs []byte - err := cbor.Unmarshal(cborBs, &cidBs) - if err != nil { - return err - } - - w.Cid, err = castBytesToCid(cidBs) - return err -} - -// UnmarshalJSON defers to cid json unmarshalling -func (w *Cid) UnmarshalJSON(jsonBs []byte) error { - return json.Unmarshal(jsonBs, &w.Cid) -} - -// MarshalJSON defers to cid json marshalling -func (w Cid) MarshalJSON() ([]byte, error) { - return json.Marshal(w.Cid) -} - -// This is lifted from go-ipld-cbor but should probably be exported from there. -func castBytesToCid(x []byte) (cid.Cid, error) { - if len(x) == 0 { - return cid.Cid{}, ipldcbor.ErrEmptyLink - } - - if x[0] != 0 { - return cid.Cid{}, ipldcbor.ErrInvalidMultibase - } - - c, err := cid.Cast(x[1:]) - if err != nil { - return cid.Cid{}, ipldcbor.ErrInvalidLink - } - - return c, nil -} - -// This is lifted from go-ipld-cbor but should probably be exported from there. -func castCidToBytes(link cid.Cid) ([]byte, error) { - if !link.Defined() { - return nil, ipldcbor.ErrEmptyLink - } - return append([]byte{0}, link.Bytes()...), nil -} diff --git a/internal/pkg/enccid/enccid_test.go b/internal/pkg/enccid/enccid_test.go deleted file mode 100644 index 07935b3fec..0000000000 --- a/internal/pkg/enccid/enccid_test.go +++ /dev/null @@ -1,66 +0,0 @@ -package enccid_test - -import ( - "testing" - - cbor "github.com/fxamacker/cbor/v2" - cid "github.com/ipfs/go-cid" - ipldcbor "github.com/ipfs/go-ipld-cbor" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - . "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestCborRoundTrip(t *testing.T) { - tf.UnitTest(t) - - c, err := constants.DefaultCidBuilder.Sum([]byte("epigram")) - require.NoError(t, err) - w := NewCid(c) - cbytes, err := cbor.Marshal(w) - require.NoError(t, err) - - olcbytes, err := ipldcbor.DumpObject(c) - require.NoError(t, err) - assert.Equal(t, olcbytes, cbytes) - var rtOlC cid.Cid - err = ipldcbor.DecodeInto(olcbytes, &rtOlC) - require.NoError(t, err) - - var newC Cid - err = cbor.Unmarshal(cbytes, &newC) - require.NoError(t, err) - assert.Equal(t, w, newC) -} - -func TestEmptyCid(t *testing.T) { - tf.UnitTest(t) - - nullCid := NewCid(cid.Undef) - cbytes, err := cbor.Marshal(nullCid) - require.NoError(t, err) - - var retUndefCid Cid - err = cbor.Unmarshal(cbytes, &retUndefCid) - require.NoError(t, err) - assert.True(t, retUndefCid.Equals(cid.Undef)) -} - -func TestJSONRoundTrip(t *testing.T) { - tf.UnitTest(t) - - c, err := constants.DefaultCidBuilder.Sum([]byte("epigram")) - require.NoError(t, err) - w := NewCid(c) - - jBs, err := w.MarshalJSON() - require.NoError(t, err) - - var rt Cid - err = rt.UnmarshalJSON(jBs) - require.NoError(t, err) - assert.True(t, rt.Equals(w.Cid)) -} diff --git a/internal/pkg/encoding/encoding.go b/internal/pkg/encoding/encoding.go deleted file mode 100644 index b2fc98cb0b..0000000000 --- a/internal/pkg/encoding/encoding.go +++ /dev/null @@ -1,238 +0,0 @@ -package encoding - -import ( - "fmt" - "io" - "reflect" -) - -// Encodable represents types that can be encoded using this library. -type Encodable interface { - Encode(encoder Encoder) error -} - -// Decodable represents types that can be decoded using this library. -type Decodable interface { - Decode(decoder Decoder) error -} - -// Encoder represents types that can encode values. -type Encoder interface { - // EncodeUint encodes a uint. - EncodeUint(obj uint) error - // EncodeUint8 encodes a uint8. - EncodeUint8(obj uint8) error - // EncodeUint16 encodes a uint16. - EncodeUint16(obj uint16) error - // EncodeUint32 encodes a uint32. - EncodeUint32(obj uint32) error - // EncodeUint64 encodes a uint64. - EncodeUint64(obj uint64) error - // EncodeInt encodes a int8. - EncodeInt(obj int) error - // EncodeInt8 encodes a int8. - EncodeInt8(obj int8) error - // EncodeInt16 encodes a int16. - EncodeInt16(obj int16) error - // EncodeInt32 encodes a int32. - EncodeInt32(obj int32) error - // EncodeInt64 encodes a int64. - EncodeInt64(obj int64) error - // EncodeBool encodes a bool. - EncodeBool(obj bool) error - // EncodeString encodes a string. - EncodeString(obj string) error - // EncodeArray encodes an array. - EncodeArray(obj interface{}) error - // EncodeMap encodes a map. - EncodeMap(obj interface{}) error - // EncodeStruct encodes a struct. - EncodeStruct(obj interface{}) error - // Bytes returns the encoded bytes. - Bytes() []byte -} - -// Decoder represents types that can decode values. -type Decoder interface { - // DecodeValue decodes a primitive value. - DecodeValue(obj interface{}) error - // DecodeArray decodes an array. - DecodeArray(obj interface{}) error - // DecodeMap decodes a map. - DecodeMap(obj interface{}) error - // DecodeStruct decodes a struct. - DecodeStruct(obj interface{}) error -} - -type defaultEncoder = FxamackerCborEncoder -type defaultDecoder = FxamackerCborDecoder - -var defaultNewStreamDecoder = FxamackerNewStreamDecoder - -// NewStreamDecoder is a function initializing a new stream decoder -type NewStreamDecoder func(io.Reader) StreamDecoder - -// StreamDecoder wraps a stream of bytes and decodes them into an object -type StreamDecoder interface { - Decode(v interface{}) error -} - -// Encode encodes an object, returning a byte array. -func Encode(obj interface{}) ([]byte, error) { - var encoder Encoder = &defaultEncoder{} - return encode(obj, reflect.ValueOf(obj), encoder) -} - -// EncodeWith encodes an object using the encoder provided returning a byte array. -func EncodeWith(obj interface{}, encoder Encoder) ([]byte, error) { - return encode(obj, reflect.ValueOf(obj), encoder) -} - -func encode(obj interface{}, v reflect.Value, encoder Encoder) ([]byte, error) { - var err error - - // if `Encodable`, we are done - if encodable, ok := obj.(Encodable); ok { - if err = encodable.Encode(encoder); err != nil { - return nil, err - } - return encoder.Bytes(), nil - } - - // Note: this -> (v.Convert(reflect.TypeOf(uint64(0))).Interface().(uint64)) - // is because doing `obj.(uint64)` blows up on `type foo uint64` - - switch v.Kind() { - case reflect.Uint: - err = encoder.EncodeUint(v.Convert(reflect.TypeOf(uint(0))).Interface().(uint)) - case reflect.Uint8: - err = encoder.EncodeUint8(v.Convert(reflect.TypeOf(uint8(0))).Interface().(uint8)) - case reflect.Uint16: - err = encoder.EncodeUint16(v.Convert(reflect.TypeOf(uint16(0))).Interface().(uint16)) - case reflect.Uint32: - err = encoder.EncodeUint32(v.Convert(reflect.TypeOf(uint32(0))).Interface().(uint32)) - case reflect.Uint64: - err = encoder.EncodeUint64(v.Convert(reflect.TypeOf(uint64(0))).Interface().(uint64)) - case reflect.Int: - err = encoder.EncodeInt(v.Convert(reflect.TypeOf(int(0))).Interface().(int)) - case reflect.Int8: - err = encoder.EncodeInt8(v.Convert(reflect.TypeOf(int8(0))).Interface().(int8)) - case reflect.Int16: - err = encoder.EncodeInt16(v.Convert(reflect.TypeOf(int16(0))).Interface().(int16)) - case reflect.Int32: - err = encoder.EncodeInt32(v.Convert(reflect.TypeOf(int32(0))).Interface().(int32)) - case reflect.Int64: - err = encoder.EncodeInt64(v.Convert(reflect.TypeOf(int64(0))).Interface().(int64)) - case reflect.Bool: - err = encoder.EncodeBool(v.Convert(reflect.TypeOf(false)).Interface().(bool)) - case reflect.String: - err = encoder.EncodeString(v.Convert(reflect.TypeOf("")).Interface().(string)) - case reflect.Slice: - err = encoder.EncodeArray(obj) - case reflect.Array: - err = encoder.EncodeArray(obj) - case reflect.Map: - err = encoder.EncodeMap(obj) - case reflect.Struct: - err = encoder.EncodeStruct(obj) - case reflect.Ptr: - if v.IsNil() { - t := v.Type() - nv := reflect.New(t.Elem()) - return encode(obj, nv, encoder) - } - // navigate the pointer and check the underlying type - return encode(obj, reflect.Indirect(v), encoder) - case reflect.Interface: - // navigate the interface and check the underlying type - return encode(obj, v.Elem(), encoder) - default: - return nil, fmt.Errorf("unsupported type for encoding: %T", obj) - } - - if err != nil { - return nil, err - } - - return encoder.Bytes(), nil -} - -// DecodeWith decodes a decodable type, and populates a pointer to the type. -func DecodeWith(obj interface{}, decoder Decoder) error { - return decode(obj, reflect.ValueOf(obj), decoder) -} - -// Decode decodes a decodable type, and populates a pointer to the type. -func Decode(raw []byte, obj interface{}) error { - var decoder Decoder = &defaultDecoder{ - raw: raw, - } - - return decode(obj, reflect.ValueOf(obj), decoder) -} - -func decode(obj interface{}, v reflect.Value, decoder Decoder) error { - var err error - - // if `Decodable`, we are done - if decodable, ok := obj.(Decodable); ok { - if err = decodable.Decode(decoder); err != nil { - return err - } - return nil - } - k := v.Kind() - switch k { - case reflect.Uint: - return decoder.DecodeValue(obj) - case reflect.Uint8: - return decoder.DecodeValue(obj) - case reflect.Uint16: - return decoder.DecodeValue(obj) - case reflect.Uint32: - return decoder.DecodeValue(obj) - case reflect.Uint64: - return decoder.DecodeValue(obj) - // case uint128: TODO: Big uint? - case reflect.Int: - return decoder.DecodeValue(obj) - case reflect.Int8: - return decoder.DecodeValue(obj) - case reflect.Int16: - return decoder.DecodeValue(obj) - case reflect.Int32: - return decoder.DecodeValue(obj) - case reflect.Int64: - // case int128: TODO: Big int? - return decoder.DecodeValue(obj) - case reflect.Bool: - return decoder.DecodeValue(obj) - case reflect.String: - return decoder.DecodeValue(obj) - case reflect.Slice: - return decoder.DecodeArray(obj) - case reflect.Array: - return decoder.DecodeArray(obj) - case reflect.Map: - return decoder.DecodeMap(obj) - case reflect.Struct: - return decoder.DecodeStruct(obj) - case reflect.Ptr: - if v.IsNil() { - t := v.Type() - nv := reflect.New(t.Elem()) - return decode(obj, nv, decoder) - } - return decode(obj, reflect.Indirect(v), decoder) - case reflect.Interface: - return decode(obj, v.Elem(), decoder) - default: - return fmt.Errorf("unsupported type for decoding: %T, kind: %v", obj, k) - } -} - -// StreamDecode decodes a decodable type from a reader. -func StreamDecode(r io.Reader, obj interface{}) error { - streamDecoder := defaultNewStreamDecoder(r) - return streamDecoder.Decode(obj) -} diff --git a/internal/pkg/encoding/encoding_test.go b/internal/pkg/encoding/encoding_test.go deleted file mode 100644 index d5ac1b5f32..0000000000 --- a/internal/pkg/encoding/encoding_test.go +++ /dev/null @@ -1,198 +0,0 @@ -package encoding - -import ( - "testing" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "gotest.tools/assert" -) - -func doTestForEncoding(t *testing.T, original interface{}, expectedcalls interface{}) { - tf.UnitTest(t) - - encoder := newTestEncoder() - - out, err := EncodeWith(original, &encoder) - assert.NilError(t, err) - assert.DeepEqual(t, out, []byte{1, 2, 3}) - - assert.DeepEqual(t, encoder.calls, expectedcalls) - assert.DeepEqual(t, encoder.lastobj, original) -} - -func TestEncodingForEncodeUint8(t *testing.T) { - doTestForEncoding(t, uint8(21), []string{"EncodeUint8"}) -} - -func TestEncodingForEncodeUint16(t *testing.T) { - doTestForEncoding(t, uint16(21), []string{"EncodeUint16"}) -} - -func TestEncodingForEncodeUint32(t *testing.T) { - doTestForEncoding(t, uint32(21), []string{"EncodeUint32"}) -} - -func TestEncodingForEncodeUint64(t *testing.T) { - doTestForEncoding(t, uint64(21), []string{"EncodeUint64"}) -} - -func TestEncodingForEncodeInt8(t *testing.T) { - doTestForEncoding(t, int8(21), []string{"EncodeInt8"}) -} - -func TestEncodingForEncodeInt16(t *testing.T) { - doTestForEncoding(t, int16(21), []string{"EncodeInt16"}) -} - -func TestEncodingForEncodeInt32(t *testing.T) { - doTestForEncoding(t, int32(21), []string{"EncodeInt32"}) -} - -func TestEncodingForEncodeInt64(t *testing.T) { - doTestForEncoding(t, int64(21), []string{"EncodeInt64"}) - -} - -func TestEncodingForEncodeBool(t *testing.T) { - doTestForEncoding(t, false, []string{"EncodeBool"}) -} - -func TestEncodingForEncodeString(t *testing.T) { - doTestForEncoding(t, "hello", []string{"EncodeString"}) -} - -func TestEncodingForEncodeArray(t *testing.T) { - doTestForEncoding(t, []uint64{6, 2, 8}, []string{"EncodeArray"}) -} - -func TestEncodingForEncodeMap(t *testing.T) { - doTestForEncoding(t, map[string]uint64{"x": 6, "y": 8}, []string{"EncodeMap"}) -} - -func TestEncodingForEncodeStruct(t *testing.T) { - doTestForEncoding(t, struct { - X uint32 - Y byte - }{X: 6, Y: 8}, []string{"EncodeStruct"}) -} - -func TestEncodingForPointer(t *testing.T) { - obj := struct { - X uint32 - Y byte - }{X: 6, Y: 8} - doTestForEncoding(t, &obj, []string{"EncodeStruct"}) -} - -func TestEncodingForEncodable(t *testing.T) { - tf.UnitTest(t) - - encoder := newTestEncoder() - original := customPoint{X: 6, Y: 8} - - out, err := EncodeWith(original, &encoder) - assert.NilError(t, err) - assert.DeepEqual(t, out, []byte{1, 2, 3}) - - assert.DeepEqual(t, encoder.calls, []string{"EncodeArray"}) - assert.DeepEqual(t, encoder.lastobj, []uint64{6, 8}) -} - -func TestEncodingNil(t *testing.T) { - var obj *defaultPoint - doTestForEncoding(t, obj, []string{"EncodeStruct"}) -} - -func doTestForDecoding(t *testing.T, obj interface{}, expected interface{}, expectedcalls interface{}) { - tf.UnitTest(t) - - decoder := newTestDecoder() - // inject decoded value - decoder.decoded = expected - - err := DecodeWith(obj, &decoder) - assert.NilError(t, err) - - assert.DeepEqual(t, decoder.calls, expectedcalls) -} - -func TestDecodingForDecodeArray(t *testing.T) { - obj := []uint64{} - expected := []uint64{54, 2, 2} - doTestForDecoding(t, &obj, expected, []string{"DecodeArray"}) - assert.DeepEqual(t, obj, expected) -} - -func TestDecodingForMap(t *testing.T) { - obj := map[string]uint64{} - expected := map[string]uint64{"x": 6, "y": 8} - doTestForDecoding(t, &obj, expected, []string{"DecodeMap"}) - assert.DeepEqual(t, obj, expected) -} - -func TestDecodingForStruct(t *testing.T) { - obj := defaultPoint{} - expected := defaultPoint{X: 8, Y: 4} - doTestForDecoding(t, &obj, expected, []string{"DecodeStruct"}) - assert.DeepEqual(t, obj, expected) -} - -func TestDecodingForDecodable(t *testing.T) { - obj := customPoint{} - expected := customPoint{X: 8, Y: 4} - - tf.UnitTest(t) - - decoder := newTestDecoder() - // inject decoded value - decoder.decoded = []uint64{8, 4} - - err := DecodeWith(&obj, &decoder) - assert.NilError(t, err) - - assert.DeepEqual(t, decoder.calls, []string{"DecodeArray"}) - assert.DeepEqual(t, obj, expected) -} - -func TestDecodingForDoublePointerStruct(t *testing.T) { - obj := &defaultPoint{} - expected := defaultPoint{X: 8, Y: 4} - doTestForDecoding(t, &obj, expected, []string{"DecodeStruct"}) - assert.DeepEqual(t, obj, &expected) -} - -func TestDecodingForDoublePointerMap(t *testing.T) { - obj := &map[string]uint64{} - expected := map[string]uint64{"x": 6, "y": 8} - doTestForDecoding(t, &obj, expected, []string{"DecodeMap"}) - assert.DeepEqual(t, obj, &expected) -} - -type testMode int - -const testConstForMode = testMode(iota) - -func TestDecodingForConstValue(t *testing.T) { - obj := testConstForMode - expected := testConstForMode - doTestForDecoding(t, &obj, expected, []string{"DecodeValue"}) - assert.DeepEqual(t, obj, expected) -} - -func TestDecodingOnNil(t *testing.T) { - // Note: this is needed here for reasons. - // (answers might be found in CI land) - tf.UnitTest(t) - defer mustPanic(t) - - var obj *map[string]uint64 - expected := map[string]uint64{} - doTestForDecoding(t, &obj, expected, []string{"DecodeValue"}) - assert.DeepEqual(t, obj, expected) -} - -func mustPanic(t *testing.T) { - if r := recover(); r == nil { - t.Fail() - } -} diff --git a/internal/pkg/encoding/fxamacker_cbor.go b/internal/pkg/encoding/fxamacker_cbor.go deleted file mode 100644 index 8d6f04ac2f..0000000000 --- a/internal/pkg/encoding/fxamacker_cbor.go +++ /dev/null @@ -1,184 +0,0 @@ -package encoding - -import ( - "bytes" - "io" - - cbor "github.com/fxamacker/cbor/v2" -) - -// FxamackerCborEncoder is an object encoder that encodes objects based on the CBOR standard. -type FxamackerCborEncoder struct { - b bytes.Buffer -} - -// FxamackerCborDecoder is an object decoder that decodes objects based on the CBOR standard. -type FxamackerCborDecoder struct { - raw []byte -} - -// NewFxamackerCborEncoder creates a new `FxamackerCborEncoder`. -func NewFxamackerCborEncoder() FxamackerCborEncoder { - return FxamackerCborEncoder{} -} - -// NewFxamackerCborDecoder creates a new `FxamackerCborDecoder`. -func NewFxamackerCborDecoder(b []byte) FxamackerCborDecoder { - return FxamackerCborDecoder{ - raw: b, - } -} - -// FxamackerNewStreamDecoder initializes a new fxamacker cbor stream decoder -var FxamackerNewStreamDecoder = cbor.NewDecoder - -// -// FxamackerCborEncoder -// - -// EncodeUint encodes a uint. -func (encoder *FxamackerCborEncoder) EncodeUint(obj uint) error { - return encoder.encodeCbor(obj) -} - -// EncodeUint8 encodes a uint8. -func (encoder *FxamackerCborEncoder) EncodeUint8(obj uint8) error { - return encoder.encodeCbor(obj) -} - -// EncodeUint16 encodes a uint16. -func (encoder *FxamackerCborEncoder) EncodeUint16(obj uint16) error { - return encoder.encodeCbor(obj) -} - -// EncodeUint32 encodes a uint32. -func (encoder *FxamackerCborEncoder) EncodeUint32(obj uint32) error { - return encoder.encodeCbor(obj) -} - -// EncodeUint64 encodes a uint64. -func (encoder *FxamackerCborEncoder) EncodeUint64(obj uint64) error { - return encoder.encodeCbor(obj) -} - -// EncodeInt encodes a int. -func (encoder *FxamackerCborEncoder) EncodeInt(obj int) error { - return encoder.encodeCbor(obj) -} - -// EncodeInt8 encodes a int8. -func (encoder *FxamackerCborEncoder) EncodeInt8(obj int8) error { - return encoder.encodeCbor(obj) -} - -// EncodeInt16 encodes a int16. -func (encoder *FxamackerCborEncoder) EncodeInt16(obj int16) error { - return encoder.encodeCbor(obj) -} - -// EncodeInt32 encodes a int32. -func (encoder *FxamackerCborEncoder) EncodeInt32(obj int32) error { - return encoder.encodeCbor(obj) -} - -// EncodeInt64 encodes a int64. -func (encoder *FxamackerCborEncoder) EncodeInt64(obj int64) error { - return encoder.encodeCbor(obj) -} - -// EncodeBool encodes a bool. -func (encoder *FxamackerCborEncoder) EncodeBool(obj bool) error { - return encoder.encodeCbor(obj) -} - -// EncodeString encodes a string. -func (encoder *FxamackerCborEncoder) EncodeString(obj string) error { - return encoder.encodeCbor(obj) -} - -// EncodeArray encodes an array. -func (encoder *FxamackerCborEncoder) EncodeArray(obj interface{}) error { - return encoder.encodeCbor(obj) -} - -// EncodeMap encodes a map. -func (encoder *FxamackerCborEncoder) EncodeMap(obj interface{}) error { - return encoder.encodeCbor(obj) -} - -// EncodeStruct encodes a struct. -func (encoder *FxamackerCborEncoder) EncodeStruct(obj interface{}) error { - return encoder.encodeCbor(obj) -} - -// Bytes returns the encoded bytes. -func (encoder FxamackerCborEncoder) Bytes() []byte { - return encoder.b.Bytes() -} - -func (encoder *FxamackerCborEncoder) encodeCbor(obj interface{}) error { - // check for object implementing cborMarshallerStreamed - if m, ok := obj.(cborMarshalerStreamed); ok { - return m.MarshalCBOR(&encoder.b) - } - - // get cbor encoded bytes - raw, err := cbor.Marshal(obj) - if err != nil { - return err - } - - // write to buffer - encoder.b.Write(raw) - - return nil -} - -// -// FxamackerCborDecoder -// - -// DecodeValue decodes an primitive value. -func (decoder *FxamackerCborDecoder) DecodeValue(obj interface{}) error { - return decoder.decodeCbor(obj) -} - -// DecodeArray decodes an array. -func (decoder *FxamackerCborDecoder) DecodeArray(obj interface{}) error { - return decoder.decodeCbor(obj) -} - -// DecodeMap encodes a map. -func (decoder *FxamackerCborDecoder) DecodeMap(obj interface{}) error { - return decoder.decodeCbor(obj) -} - -// DecodeStruct decodes a struct. -func (decoder *FxamackerCborDecoder) DecodeStruct(obj interface{}) error { - - return decoder.decodeCbor(obj) -} - -func (decoder *FxamackerCborDecoder) decodeCbor(obj interface{}) error { - // check for object implementing cborUnmarshallerStreamed - if u, ok := obj.(cborUnmarshalerStreamed); ok { - return u.UnmarshalCBOR(bytes.NewBuffer(decoder.raw)) - } - - // decode the bytes into a cbor object - if err := cbor.Unmarshal(decoder.raw, obj); err != nil { - return err - } - // reset the bytes, nothing left with CBOR - decoder.raw = nil - - return nil -} - -type cborUnmarshalerStreamed interface { - UnmarshalCBOR(io.Reader) error -} - -type cborMarshalerStreamed interface { - MarshalCBOR(io.Writer) error -} diff --git a/internal/pkg/encoding/ipld_cbor.go b/internal/pkg/encoding/ipld_cbor.go deleted file mode 100644 index a1829f7295..0000000000 --- a/internal/pkg/encoding/ipld_cbor.go +++ /dev/null @@ -1,166 +0,0 @@ -package encoding - -import ( - "bytes" - - cbor "github.com/ipfs/go-ipld-cbor" -) - -// IpldCborEncoder is an object encoder that encodes objects based on the CBOR standard. -type IpldCborEncoder struct { - b bytes.Buffer -} - -// IpldCborDecoder is an object decoder that decodes objects based on the CBOR standard. -type IpldCborDecoder struct { - raw []byte -} - -// NewIpldCborEncoder creates a new `IpldCborEncoder`. -func NewIpldCborEncoder() IpldCborEncoder { - return IpldCborEncoder{} -} - -// NewIpldCborDecoder creates a new `IpldCborDecoder`. -func NewIpldCborDecoder(b []byte) IpldCborDecoder { - return IpldCborDecoder{ - raw: b, - } -} - -// RegisterIpldCborType registers a type for Cbor encoding/decoding. -func RegisterIpldCborType(i interface{}) { - cbor.RegisterCborType(i) -} - -// -// IpldCborEncoder -// - -// EncodeUint encodes a uint. -func (encoder *IpldCborEncoder) EncodeUint(obj uint) error { - return encoder.encodeCbor(obj) -} - -// EncodeUint8 encodes a uint8. -func (encoder *IpldCborEncoder) EncodeUint8(obj uint8) error { - return encoder.encodeCbor(obj) -} - -// EncodeUint16 encodes a uint16. -func (encoder *IpldCborEncoder) EncodeUint16(obj uint16) error { - return encoder.encodeCbor(obj) -} - -// EncodeUint32 encodes a uint32. -func (encoder *IpldCborEncoder) EncodeUint32(obj uint32) error { - return encoder.encodeCbor(obj) -} - -// EncodeUint64 encodes a uint64. -func (encoder *IpldCborEncoder) EncodeUint64(obj uint64) error { - return encoder.encodeCbor(obj) -} - -// EncodeInt encodes a int. -func (encoder *IpldCborEncoder) EncodeInt(obj int) error { - return encoder.encodeCbor(obj) -} - -// EncodeInt8 encodes a int8. -func (encoder *IpldCborEncoder) EncodeInt8(obj int8) error { - return encoder.encodeCbor(obj) -} - -// EncodeInt16 encodes a int16. -func (encoder *IpldCborEncoder) EncodeInt16(obj int16) error { - return encoder.encodeCbor(obj) -} - -// EncodeInt32 encodes a int32. -func (encoder *IpldCborEncoder) EncodeInt32(obj int32) error { - return encoder.encodeCbor(obj) -} - -// EncodeInt64 encodes a int64. -func (encoder *IpldCborEncoder) EncodeInt64(obj int64) error { - return encoder.encodeCbor(obj) -} - -// EncodeBool encodes a bool. -func (encoder *IpldCborEncoder) EncodeBool(obj bool) error { - return encoder.encodeCbor(obj) -} - -// EncodeString encodes a string. -func (encoder *IpldCborEncoder) EncodeString(obj string) error { - return encoder.encodeCbor(obj) -} - -// EncodeArray encodes an array. -func (encoder *IpldCborEncoder) EncodeArray(obj interface{}) error { - return encoder.encodeCbor(obj) -} - -// EncodeMap encodes a map. -func (encoder *IpldCborEncoder) EncodeMap(obj interface{}) error { - return encoder.encodeCbor(obj) -} - -// EncodeStruct encodes a struct. -func (encoder *IpldCborEncoder) EncodeStruct(obj interface{}) error { - return encoder.encodeCbor(obj) -} - -// Bytes returns the encoded bytes. -func (encoder IpldCborEncoder) Bytes() []byte { - return encoder.b.Bytes() -} - -func (encoder *IpldCborEncoder) encodeCbor(obj interface{}) error { - // get cbor encoded bytes - raw, err := cbor.DumpObject(obj) - if err != nil { - return err - } - - // write to buffer - encoder.b.Write(raw) - - return nil -} - -// -// IpldCborDecoder -// - -// DecodeValue encodes an array. -func (decoder *IpldCborDecoder) DecodeValue(obj interface{}) error { - return decoder.decodeCbor(obj) -} - -// DecodeArray encodes an array. -func (decoder *IpldCborDecoder) DecodeArray(obj interface{}) error { - return decoder.decodeCbor(obj) -} - -// DecodeMap encodes a map. -func (decoder *IpldCborDecoder) DecodeMap(obj interface{}) error { - return decoder.decodeCbor(obj) -} - -// DecodeStruct encodes a uint64. -func (decoder *IpldCborDecoder) DecodeStruct(obj interface{}) error { - return decoder.decodeCbor(obj) -} - -func (decoder *IpldCborDecoder) decodeCbor(obj interface{}) error { - // decode the bytes into a cbor object - if err := cbor.DecodeInto(decoder.raw, obj); err != nil { - return err - } - // reset the bytes, nothing left with CBOR - decoder.raw = nil - - return nil -} diff --git a/internal/pkg/encoding/ipld_cbor_test.go b/internal/pkg/encoding/ipld_cbor_test.go deleted file mode 100644 index 367d72a351..0000000000 --- a/internal/pkg/encoding/ipld_cbor_test.go +++ /dev/null @@ -1,110 +0,0 @@ -package encoding - -import ( - "bytes" - "reflect" - "testing" - - "gotest.tools/assert" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestIpldCborEncodingEncodeStruct(t *testing.T) { - tf.UnitTest(t) - - var original = &defaultPoint{X: 8, Y: 3} - var encoder = IpldCborEncoder{} - - err := encoder.EncodeStruct(original) - assert.NilError(t, err) - - output := encoder.Bytes() - - var expected = []byte{162, 97, 120, 8, 97, 121, 3} - assert.Assert(t, bytes.Equal(output, expected)) -} - -func TestIpldCborDecodingDecodeStruct(t *testing.T) { - tf.UnitTest(t) - - var input = []byte{162, 97, 120, 8, 97, 121, 3} - - var decoder = NewIpldCborDecoder(input) - - var output = defaultPoint{} - err := decoder.DecodeStruct(&output) - assert.NilError(t, err) - - var expected = defaultPoint{X: 8, Y: 3} - assert.Equal(t, output, expected) -} - -func TestIpldCborEncodeDecodeIsClosed(t *testing.T) { - tf.UnitTest(t) - - original := defaultPoint{X: 8, Y: 3} - - raw, err := Encode(original) - assert.NilError(t, err) - - decoded := defaultPoint{} - - err = Decode(raw, &decoded) - assert.NilError(t, err) - - assert.Assert(t, reflect.DeepEqual(original, decoded)) -} - -func TestIpldCborCustomEncoding(t *testing.T) { - tf.UnitTest(t) - - original := customPoint{X: 8, Y: 3} - - raw, err := Encode(original) - assert.NilError(t, err) - - var expected = []byte{130, 8, 3} - assert.Assert(t, bytes.Equal(raw, expected)) -} - -func TestIpldCborCustomDecoding(t *testing.T) { - tf.UnitTest(t) - - var input = []byte{130, 8, 3} - - var output = customPoint{} - err := Decode(input, &output) - assert.NilError(t, err) - - var expected = customPoint{X: 8, Y: 3} - assert.Equal(t, output, expected) -} - -type wrapper uint64 - -func TestIpldCborNewTypeEncoding(t *testing.T) { - tf.UnitTest(t) - var original = wrapper(873) - var encoder = IpldCborEncoder{} - - output, err := EncodeWith(original, &encoder) - assert.NilError(t, err) - - var expected = []byte{25, 3, 105} - assert.Assert(t, bytes.Equal(output, expected)) -} - -func TestIpldCborNewTypeDecoding(t *testing.T) { - tf.UnitTest(t) - - var input = []byte{25, 3, 105} - var decoder = NewIpldCborDecoder(input) - - var output = wrapper(0) - err := DecodeWith(&output, &decoder) - assert.NilError(t, err) - - var expected = wrapper(873) - assert.Equal(t, output, expected) -} diff --git a/internal/pkg/encoding/testing.go b/internal/pkg/encoding/testing.go deleted file mode 100644 index a98faab967..0000000000 --- a/internal/pkg/encoding/testing.go +++ /dev/null @@ -1,212 +0,0 @@ -package encoding - -import "reflect" - -func init() { - RegisterIpldCborType(defaultPoint{}) - RegisterIpldCborType(customPoint{}) -} - -type defaultPoint struct { - X uint64 - Y uint64 -} - -type testEncoder struct { - calls []string - lastobj interface{} -} - -type testDecoder struct { - calls []string - decoded interface{} -} - -func newTestEncoder() testEncoder { - return testEncoder{ - calls: []string{}, - } -} - -func newTestDecoder() testDecoder { - return testDecoder{ - calls: []string{}, - } -} - -// EncodeUint encodes a uint. -func (encoder *testEncoder) EncodeUint(obj uint) error { - encoder.calls = append(encoder.calls, "EncodeUint") - encoder.lastobj = obj - return nil -} - -// EncodeUint8 encodes a uint8. -func (encoder *testEncoder) EncodeUint8(obj uint8) error { - encoder.calls = append(encoder.calls, "EncodeUint8") - encoder.lastobj = obj - return nil -} - -// EncodeUint16 encodes a uint16. -func (encoder *testEncoder) EncodeUint16(obj uint16) error { - encoder.calls = append(encoder.calls, "EncodeUint16") - encoder.lastobj = obj - return nil -} - -// EncodeUint32 encodes a uint32. -func (encoder *testEncoder) EncodeUint32(obj uint32) error { - encoder.calls = append(encoder.calls, "EncodeUint32") - encoder.lastobj = obj - return nil -} - -// EncodeUint64 encodes a uint64. -func (encoder *testEncoder) EncodeUint64(obj uint64) error { - encoder.calls = append(encoder.calls, "EncodeUint64") - encoder.lastobj = obj - return nil -} - -// EncodeInt encodes a int. -func (encoder *testEncoder) EncodeInt(obj int) error { - encoder.calls = append(encoder.calls, "EncodeInt") - encoder.lastobj = obj - return nil -} - -// EncodeInt8 encodes a int8. -func (encoder *testEncoder) EncodeInt8(obj int8) error { - encoder.calls = append(encoder.calls, "EncodeInt8") - encoder.lastobj = obj - return nil -} - -// EncodeInt16 encodes a int16. -func (encoder *testEncoder) EncodeInt16(obj int16) error { - encoder.calls = append(encoder.calls, "EncodeInt16") - encoder.lastobj = obj - return nil -} - -// EncodeInt32 encodes a int32. -func (encoder *testEncoder) EncodeInt32(obj int32) error { - encoder.calls = append(encoder.calls, "EncodeInt32") - encoder.lastobj = obj - return nil -} - -// EncodeInt64 encodes a int64. -func (encoder *testEncoder) EncodeInt64(obj int64) error { - encoder.calls = append(encoder.calls, "EncodeInt64") - encoder.lastobj = obj - return nil -} - -// EncodeBoolean encodes a bool. -func (encoder *testEncoder) EncodeBool(obj bool) error { - encoder.calls = append(encoder.calls, "EncodeBool") - encoder.lastobj = obj - return nil -} - -// EncodeString encodes a string. -func (encoder *testEncoder) EncodeString(obj string) error { - encoder.calls = append(encoder.calls, "EncodeString") - encoder.lastobj = obj - return nil -} - -// EncodeArray encodes an array. -func (encoder *testEncoder) EncodeArray(obj interface{}) error { - encoder.calls = append(encoder.calls, "EncodeArray") - encoder.lastobj = obj - return nil -} - -// EncodeMap encodes a map. -func (encoder *testEncoder) EncodeMap(obj interface{}) error { - encoder.calls = append(encoder.calls, "EncodeMap") - encoder.lastobj = obj - return nil -} - -// EncodeStruct encodes a uint64. -func (encoder *testEncoder) EncodeStruct(obj interface{}) error { - encoder.calls = append(encoder.calls, "EncodeStruct") - encoder.lastobj = obj - return nil -} - -// Bytes returns the encoded bytes. -func (encoder testEncoder) Bytes() []byte { - return []byte{1, 2, 3} -} - -// DecodeValue encodes an array. -func (decoder *testDecoder) DecodeValue(obj interface{}) error { - decoder.calls = append(decoder.calls, "DecodeValue") - set(reflect.ValueOf(obj), decoder.decoded) - return nil -} - -// DecodeArray encodes an array. -func (decoder *testDecoder) DecodeArray(obj interface{}) error { - decoder.calls = append(decoder.calls, "DecodeArray") - set(reflect.ValueOf(obj), decoder.decoded) - return nil -} - -// DecodeMap encodes a map. -func (decoder *testDecoder) DecodeMap(obj interface{}) error { - decoder.calls = append(decoder.calls, "DecodeMap") - set(reflect.ValueOf(obj), decoder.decoded) - return nil -} - -// EncodeStruct encodes a uint64. -func (decoder *testDecoder) DecodeStruct(obj interface{}) error { - decoder.calls = append(decoder.calls, "DecodeStruct") - set(reflect.ValueOf(obj), decoder.decoded) - return nil -} - -func set(v reflect.Value, to interface{}) { - switch v.Kind() { - case reflect.Interface: - v.Elem().Set(reflect.ValueOf(to)) - case reflect.Ptr: - if v.IsNil() { - // Note: we need to figure out how to set things like a pointer to a nil pointer - panic("not supported") - } else { - set(reflect.Indirect(v), to) - } - default: - v.Set(reflect.ValueOf(to)) - } -} - -type customPoint struct { - X uint64 - Y uint64 -} - -func (p customPoint) Encode(encoder Encoder) error { - if err := encoder.EncodeArray([]uint64{p.X, p.Y}); err != nil { - return err - } - - return nil -} - -func (p *customPoint) Decode(decoder Decoder) error { - decoded := []uint64{} - if err := decoder.DecodeArray(&decoded); err != nil { - return err - } - p.X = decoded[0] - p.Y = decoded[1] - return nil -} diff --git a/internal/pkg/encoding/why_cbor.go b/internal/pkg/encoding/why_cbor.go deleted file mode 100644 index fbfbe43e28..0000000000 --- a/internal/pkg/encoding/why_cbor.go +++ /dev/null @@ -1,54 +0,0 @@ -package encoding - -import ( - "bytes" - "fmt" - - cbg "github.com/whyrusleeping/cbor-gen" -) - -// WhyCborEncoder is an object encoder that encodes objects based on the CBOR standard. -type WhyCborEncoder struct { - b *bytes.Buffer -} - -// WhyCborDecoder is an object decoder that decodes objects based on the CBOR standard. -type WhyCborDecoder struct { - b *bytes.Buffer -} - -// -// CborEncoder -// - -// EncodeObject encodes an object. -func (encoder *WhyCborEncoder) EncodeObject(obj Encodable) error { - cborobj, ok := obj.(cbg.CBORMarshaler) - if !ok { - return fmt.Errorf("Object is not a CBORMarshaler") - } - return cborobj.MarshalCBOR(encoder.b) -} - -// IntoBytes returns the encoded bytes. -func (encoder WhyCborEncoder) IntoBytes() []byte { - return encoder.b.Bytes() -} - -// -// CborDecoder -// - -// SetBytes sets the initializer internal bytes to match the input. -func (decoder *WhyCborDecoder) SetBytes(raw []byte) { - decoder.b = bytes.NewBuffer(raw) -} - -// DecodeObject decodes an object. -func (decoder WhyCborDecoder) DecodeObject(obj Decodable) error { - cborobj, ok := obj.(cbg.CBORUnmarshaler) - if !ok { - return fmt.Errorf("Object is not a CBORUnmarshaler") - } - return cborobj.UnmarshalCBOR(decoder.b) -} diff --git a/internal/pkg/encoding/why_cbor_test.go b/internal/pkg/encoding/why_cbor_test.go deleted file mode 100644 index b50a9bdc7b..0000000000 --- a/internal/pkg/encoding/why_cbor_test.go +++ /dev/null @@ -1,99 +0,0 @@ -package encoding - -import ( - "bytes" - "fmt" - "io" - "testing" - - "gotest.tools/assert" - - cbg "github.com/whyrusleeping/cbor-gen" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestWhyCborEncodingOutput(t *testing.T) { - tf.UnitTest(t) - - var original = &customPoint{X: 8, Y: 3} - var encoder = WhyCborEncoder{b: bytes.NewBuffer([]byte{})} - - err := encoder.EncodeObject(original) - assert.NilError(t, err) - - output := encoder.IntoBytes() - - var expected = []byte{130, 8, 3} - assert.Assert(t, bytes.Equal(output, expected)) -} - -func TestWhyCborDecodingOutput(t *testing.T) { - tf.UnitTest(t) - - var input = []byte{130, 8, 3} - - var decoder = &WhyCborDecoder{} - decoder.SetBytes(input) - - var output = customPoint{} - err := decoder.DecodeObject(&output) - assert.NilError(t, err) - - var expected = customPoint{X: 8, Y: 3} - assert.Equal(t, output, expected) -} - -func (t *customPoint) MarshalCBOR(w io.Writer) error { - if _, err := w.Write([]byte{130}); err != nil { - return err - } - - // t.t.X (uint64) - if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, t.X)); err != nil { - return err - } - - // t.t.Y (uint64) - if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, t.Y)); err != nil { - return err - } - return nil -} - -func (t *customPoint) UnmarshalCBOR(br io.Reader) error { - - maj, extra, err := cbg.CborReadHeader(br) - if err != nil { - return err - } - if maj != cbg.MajArray { - return fmt.Errorf("cbor input should be of type array") - } - - if extra != 2 { - return fmt.Errorf("cbor input had wrong number of fields") - } - - // t.t.X (uint64) - - maj, extra, err = cbg.CborReadHeader(br) - if err != nil { - return err - } - if maj != cbg.MajUnsignedInt { - return fmt.Errorf("wrong type for uint64 field") - } - t.X = extra - // t.t.Y (uint64) - - maj, extra, err = cbg.CborReadHeader(br) - if err != nil { - return err - } - if maj != cbg.MajUnsignedInt { - return fmt.Errorf("wrong type for uint64 field") - } - t.Y = extra - return nil -} diff --git a/internal/pkg/genesis/genesis.go b/internal/pkg/genesis/genesis.go deleted file mode 100644 index 6f649d49f4..0000000000 --- a/internal/pkg/genesis/genesis.go +++ /dev/null @@ -1,32 +0,0 @@ -package genesis - -import ( - blockstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - - address "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/util/adt" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" -) - -// InitFunc is the signature for function that is used to create a genesis block. -type InitFunc func(cst cbor.IpldStore, bs blockstore.Blockstore) (*block.Block, error) - -// Ticket is the ticket to place in the genesis block header (which can't be derived from a prior ticket), -// used in the evaluation of the messages in the genesis block, -// and *also* the ticket value used when computing the genesis state (the parent state of the genesis block). -var Ticket = block.Ticket{ - VRFProof: []byte{ - 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, - 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, - }, -} - -// VM is the view into the VM used during genesis block creation. -type VM interface { - ApplyGenesisMessage(from address.Address, to address.Address, method abi.MethodNum, value abi.TokenAmount, params interface{}, rnd crypto.RandomnessSource) (interface{}, error) - ContextStore() adt.Store -} diff --git a/internal/pkg/journal/testing.go b/internal/pkg/journal/testing.go deleted file mode 100644 index 986db2229a..0000000000 --- a/internal/pkg/journal/testing.go +++ /dev/null @@ -1,62 +0,0 @@ -package journal - -import ( - "sync" - "testing" - "time" - - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" -) - -// NewInMemoryJournal returns a journal backed by an in-memory map. -func NewInMemoryJournal(t *testing.T, clk clock.Clock) Journal { - return &MemoryJournal{ - t: t, - clock: clk, - topics: make(map[string][]entry), - } -} - -// MemoryJournal represents a journal held in memory. -type MemoryJournal struct { - t *testing.T - clock clock.Clock - topicsMu sync.Mutex - topics map[string][]entry -} - -// Topic returns a Writer with the provided `topic`. -func (mj *MemoryJournal) Topic(topic string) Writer { - mr := &MemoryWriter{ - topic: topic, - journal: mj, - } - return mr -} - -type entry struct { - time time.Time - event string - kvs []interface{} -} - -// MemoryWriter writes journal entires in memory. -type MemoryWriter struct { - topic string - journal *MemoryJournal -} - -// Write records an operation and its metadata to a Journal accepting variadic key-value -// pairs. -func (mw *MemoryWriter) Write(event string, kvs ...interface{}) { - if len(kvs)%2 != 0 { - mw.journal.t.Fatalf("journal write call has odd number of key values pairs: %d event: %s topic: %s", len(kvs), event, mw.topic) - } - mw.journal.topicsMu.Lock() - mw.journal.topics[mw.topic] = append(mw.journal.topics[mw.topic], entry{ - event: event, - time: mw.journal.clock.Now(), - kvs: kvs, - }) - mw.journal.topicsMu.Unlock() -} diff --git a/internal/pkg/message/handler.go b/internal/pkg/message/handler.go deleted file mode 100644 index 9376aa1179..0000000000 --- a/internal/pkg/message/handler.go +++ /dev/null @@ -1,51 +0,0 @@ -package message - -import ( - "context" - - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" -) - -// HeadHandler wires up new head tipset handling to the message inbox and outbox. -type HeadHandler struct { - // Inbox and outbox exported for testing. - Inbox *Inbox - Outbox *Outbox - chain chainProvider - - prevHead block.TipSet -} - -// NewHeadHandler build a new new-head handler. -func NewHeadHandler(inbox *Inbox, outbox *Outbox, chain chainProvider, head block.TipSet) *HeadHandler { - return &HeadHandler{inbox, outbox, chain, head} -} - -// HandleNewHead computes the chain delta implied by a new head and updates the inbox and outbox. -func (h *HeadHandler) HandleNewHead(ctx context.Context, newHead block.TipSet) error { - if !newHead.Defined() { - log.Warn("received empty tipset, ignoring") - return nil - } - if newHead.Equals(h.prevHead) { - log.Warnf("received non-new head tipset, ignoring %s", newHead.Key()) - return nil - } - - oldTips, newTips, err := chain.CollectTipsToCommonAncestor(ctx, h.chain, h.prevHead, newHead) - if err != nil { - return errors.Errorf("traversing chain with new head %s, prev %s: %s", newHead.Key(), h.prevHead.Key(), err) - } - if err := h.Outbox.HandleNewHead(ctx, oldTips, newTips); err != nil { - log.Errorf("updating outbound message queue for tipset %s, prev %s: %s", newHead.Key(), h.prevHead.Key(), err) - } - if err := h.Inbox.HandleNewHead(ctx, oldTips, newTips); err != nil { - log.Errorf("updating message pool for tipset %s, prev %s: %s", newHead.Key(), h.prevHead.Key(), err) - } - - h.prevHead = newHead - return nil -} diff --git a/internal/pkg/message/handler_integration_test.go b/internal/pkg/message/handler_integration_test.go deleted file mode 100644 index a2ba019d06..0000000000 --- a/internal/pkg/message/handler_integration_test.go +++ /dev/null @@ -1,138 +0,0 @@ -package message_test - -import ( - "context" - "testing" - "time" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/util/adt" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/journal" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// TestNewHeadHandlerIntegration tests inbox and outbox policy consistency. -func TestNewHeadHandlerIntegration(t *testing.T) { - tf.UnitTest(t) - signer, _ := types.NewMockSignersAndKeyInfo(2) - objournal := journal.NewInMemoryJournal(t, clock.NewFake(time.Unix(1234567890, 0))).Topic("outbox") - sender := signer.Addresses[0] - dest := signer.Addresses[1] - ctx := context.Background() - // Maximum age for a message in the pool/queue. As of August 2019, this is in rounds for the - // outbox queue and non-null tipsets for the inbox pool :-(. - // We generally desire messages to expire from the pool before the queue so that retries are - // accepted. - maxAge := uint(10) - gasPrice := types.NewGasPrice(1) - gasUnits := gas.NewGas(1000) - - makeHandler := func(provider *message.FakeProvider, root block.TipSet) *message.HeadHandler { - mpool := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - inbox := message.NewInbox(mpool, maxAge, provider, provider) - queue := message.NewQueue() - publisher := message.NewDefaultPublisher(&message.MockNetworkPublisher{}, mpool) - policy := message.NewMessageQueuePolicy(provider, maxAge) - outbox := message.NewOutbox(signer, &message.FakeValidator{}, queue, publisher, policy, - provider, provider, objournal) - - return message.NewHeadHandler(inbox, outbox, provider, root) - } - - t.Run("test send after reverted message", func(t *testing.T) { - provider := message.NewFakeProvider(t) - root := provider.NewGenesis() - actr := actor.NewActor(builtin.AccountActorCodeID, abi.NewTokenAmount(0), cid.Undef) - actr.CallSeqNum = 42 - provider.SetHeadAndActor(t, root.Key(), sender, actr) - - handler := makeHandler(provider, root) - outbox := handler.Outbox - inbox := handler.Inbox - - // First, send a message and expect to find it in the message queue and pool. - mid1, donePub1, err := outbox.Send(ctx, sender, dest, types.ZeroAttoFIL, gasPrice, gasUnits, true, abi.MethodNum(9000001), adt.Empty) - require.NoError(t, err) - require.NotNil(t, donePub1) - require.Equal(t, 1, len(outbox.Queue().List(sender))) // Message is in the queue. - pub1Err := <-donePub1 - assert.NoError(t, pub1Err) - msg1, found := inbox.Pool().Get(mid1) - require.True(t, found) // Message is in the pool. - assert.True(t, msg1.Equals(outbox.Queue().List(sender)[0].Msg)) - - // Receive the message in a block. - left := provider.BuildOneOn(root, func(b *chain.BlockBuilder) { - b.AddMessages([]*types.SignedMessage{msg1}, []*types.UnsignedMessage{}) - }) - require.NoError(t, handler.HandleNewHead(ctx, left)) - assert.Equal(t, 0, len(outbox.Queue().List(sender))) // Gone from queue. - _, found = inbox.Pool().Get(mid1) - assert.False(t, found) // Gone from pool. - - // Now re-org the chain to un-mine that message. - right := provider.BuildOneOn(root, func(b *chain.BlockBuilder) { - // No messages. - }) - require.NoError(t, handler.HandleNewHead(ctx, right)) - assert.Equal(t, 1, len(outbox.Queue().List(sender))) // Message returns to queue. - _, found = inbox.Pool().Get(mid1) - assert.True(t, found) // Message returns to pool to be mined again. - - // Send another message from the same account. - // First, send a message and expect to find it in the message queue and pool. - mid2, donePub2, err := outbox.Send(ctx, sender, dest, types.ZeroAttoFIL, gasPrice, gasUnits, true, abi.MethodNum(9000002), adt.Empty) - // This case causes the nonce to be wrongly calculated, since the first, now-unmined message - // is not in the outbox, and actor state has not updated, but the message pool already has - // a message with the same nonce. - require.NoError(t, err) - require.NotNil(t, donePub2) - - // Both messages are in the pool. - pub2Err := <-donePub2 - assert.NoError(t, pub2Err) - _, found = inbox.Pool().Get(mid1) - require.True(t, found) - msg2, found := inbox.Pool().Get(mid2) - require.True(t, found) - // Both messages are in the queue too, in the right order. - restoredQueue := outbox.Queue().List(sender) - assert.Equal(t, 2, len(restoredQueue)) - assert.True(t, msg1.Equals(restoredQueue[0].Msg)) - assert.True(t, msg2.Equals(restoredQueue[1].Msg)) - }) - - t.Run("ignores empty tipset", func(t *testing.T) { - provider := message.NewFakeProvider(t) - root := provider.NewGenesis() - provider.SetHead(root.Key()) - - handler := makeHandler(provider, root) - err := handler.HandleNewHead(ctx, block.UndefTipSet) - assert.NoError(t, err) - }) - - t.Run("ignores duplicate tipset", func(t *testing.T) { - provider := message.NewFakeProvider(t) - root := provider.NewGenesis() - provider.SetHead(root.Key()) - - handler := makeHandler(provider, root) - err := handler.HandleNewHead(ctx, root) - assert.NoError(t, err) - }) -} diff --git a/internal/pkg/message/inbox.go b/internal/pkg/message/inbox.go deleted file mode 100644 index 6ed07dc811..0000000000 --- a/internal/pkg/message/inbox.go +++ /dev/null @@ -1,153 +0,0 @@ -package message - -import ( - "context" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// InboxMaxAgeTipsets is maximum age (in non-empty tipsets) to permit messages to stay in the pool after reception. -// It should be a little shorter than the outbox max age so that messages expire from mining -// pools a little before the sender gives up on them. -const InboxMaxAgeTipsets = 6 - -// Inbox maintains a pool of received messages. -type Inbox struct { - // The pool storing received messages. - pool *Pool - // Maximum age of a pool message. - maxAgeTipsets uint - - // Provides tipsets for chain traversal. - chain chainProvider - messageProvider messageProvider -} - -// messageProvider provides message collections given their cid. -type messageProvider interface { - LoadMessages(context.Context, cid.Cid) ([]*types.SignedMessage, []*types.UnsignedMessage, error) -} - -// NewInbox constructs a new inbox. -func NewInbox(pool *Pool, maxAgeRounds uint, chain chainProvider, messages messageProvider) *Inbox { - return &Inbox{ - pool: pool, - maxAgeTipsets: maxAgeRounds, - chain: chain, - messageProvider: messages, - } -} - -// Add adds a message to the pool, tagged with the current block height. -// An error probably means the message failed to validate, -// but it could indicate a more serious problem with the system. -func (ib *Inbox) Add(ctx context.Context, msg *types.SignedMessage) (cid.Cid, error) { - head, err := ib.chain.GetTipSet(ib.chain.GetHead()) - if err != nil { - return cid.Undef, err - } - blockTime, err := head.Height() - if err != nil { - return cid.Undef, err - } - - return ib.pool.Add(ctx, msg, blockTime) -} - -// Pool returns the inbox's message pool. -func (ib *Inbox) Pool() *Pool { - return ib.pool -} - -// HandleNewHead updates the message pool in response to a new head tipset. -// This removes messages from the pool that are found in the newly adopted chain and adds back -// those from the removed chain (if any) that do not appear in the new chain. -// The `oldChain` and `newChain` lists are expected in descending height order, and each may be empty. -func (ib *Inbox) HandleNewHead(ctx context.Context, oldChain, newChain []block.TipSet) error { - chainHeight, err := reorgHeight(oldChain, newChain) - if err != nil { - return err - } - - // Add all message from the old tipsets to the message pool, so they can be mined again. - for _, tipset := range oldChain { - for i := 0; i < tipset.Len(); i++ { - block := tipset.At(i) - secpMsgs, _, err := ib.messageProvider.LoadMessages(ctx, block.Messages.Cid) - if err != nil { - return err - } - for _, msg := range secpMsgs { - _, err = ib.pool.Add(ctx, msg, chainHeight) - if err != nil { - // Messages from the removed chain are frequently invalidated, e.g. because that - // same message is already mined on the new chain. - log.Debug(err) - } - } - } - } - - // Remove all messages in the new tipsets from the pool, now mined. - // Cid() can error, so collect all the CIDs up front. - var removeCids []cid.Cid - for _, tipset := range newChain { - for i := 0; i < tipset.Len(); i++ { - secpMsgs, _, err := ib.messageProvider.LoadMessages(ctx, tipset.At(i).Messages.Cid) - if err != nil { - return err - } - for _, msg := range secpMsgs { - cid, err := msg.Cid() - if err != nil { - return err - } - removeCids = append(removeCids, cid) - } - } - } - for _, c := range removeCids { - ib.pool.Remove(c) - } - - // prune all messages that have been in the pool too long - if len(newChain) > 0 { - return timeoutMessages(ctx, ib.pool, ib.chain, newChain[0], ib.maxAgeTipsets) - } - return nil -} - -// timeoutMessages removes all messages from the pool that arrived more than maxAgeTipsets tip sets ago. -// Note that we measure the timeout in the number of tip sets we have received rather than a fixed block -// height. This prevents us from prematurely timing messages that arrive during long chains of null blocks. -// Also when blocks fill, the rate of message processing will correspond more closely to rate of tip -// sets than to the expected block time over short timescales. -func timeoutMessages(ctx context.Context, pool *Pool, chains chain.TipSetProvider, head block.TipSet, maxAgeTipsets uint) error { - var err error - - var minimumHeight abi.ChainEpoch - itr := chain.IterAncestors(ctx, chains, head) - - // Walk back maxAgeTipsets+1 tipsets to determine lowest block height to prune. - for i := uint(0); err == nil && i <= maxAgeTipsets && !itr.Complete(); i++ { - minimumHeight, err = itr.Value().Height() - if err == nil { - err = itr.Next() - } - } - if err != nil { - return err - } - - // remove all messages added before minimumHeight - for _, cid := range pool.PendingBefore(minimumHeight) { - pool.Remove(cid) - } - - return nil -} diff --git a/internal/pkg/message/inbox_test.go b/internal/pkg/message/inbox_test.go deleted file mode 100644 index ba5940f220..0000000000 --- a/internal/pkg/message/inbox_test.go +++ /dev/null @@ -1,475 +0,0 @@ -package message_test - -import ( - "context" - "fmt" - "strconv" - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestUpdateMessagePool(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - type msgs []*types.SignedMessage - type msgsSet [][]*types.SignedMessage - - var mockSigner, _ = types.NewMockSignersAndKeyInfo(10) - - t.Run("Replace head", func(t *testing.T) { - // Msg pool: [m0, m1], Chain: b[] - // to - // Msg pool: [m0], Chain: b[m1] - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 10, chainProvider, chainProvider) - - m := types.NewSignedMsgs(2, mockSigner) - requireAdd(t, ib, m[0], m[1]) - - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, msgsSet{}) - - newChain := requireChainWithMessages(t, chainProvider.Builder, parent, msgsSet{msgs{m[1]}}) - - assert.NoError(t, ib.HandleNewHead(ctx, oldChain, newChain)) - assertPoolEquals(t, p, m[0]) - }) - - t.Run("Replace head with self", func(t *testing.T) { - // Msg pool: [m0, m1], Chain: b[m2] - // to - // Msg pool: [m0, m1], Chain: b[m2] - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 10, chainProvider, chainProvider) - - m := types.NewSignedMsgs(3, mockSigner) - requireAdd(t, ib, m[0], m[1]) - - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, msgsSet{msgs{m[2]}}) - - assert.NoError(t, ib.HandleNewHead(ctx, oldChain, oldChain)) // sic - assertPoolEquals(t, p, m[0], m[1]) - }) - - t.Run("Replace head with a long chain", func(t *testing.T) { - // Msg pool: [m2, m5], Chain: b[m0, m1] - // to - // Msg pool: [m1], Chain: b[m2, m3] -> b[m4] -> b[m0] -> b[] -> b[m5, m6] - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 10, chainProvider, chainProvider) - - m := types.NewSignedMsgs(7, mockSigner) - requireAdd(t, ib, m[2], m[5]) - - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, msgsSet{msgs{m[0], m[1]}}) - - newChain := requireChainWithMessages(t, chainProvider.Builder, parent, - msgsSet{msgs{m[2], m[3]}}, - msgsSet{msgs{m[4]}}, - msgsSet{msgs{m[0]}}, - msgsSet{msgs{}}, - msgsSet{msgs{m[5], m[6]}}, - ) - - assert.NoError(t, ib.HandleNewHead(ctx, oldChain, newChain)) - assertPoolEquals(t, p, m[1]) - }) - - t.Run("Replace head with multi-block tipset chains", func(t *testing.T) { - // Msg pool: [m2, m5], Chain: {b[m0], b[m1]} - // to - // Msg pool: [m1], Chain: b[m2, m3] -> {b[m4], b[m0], b[], b[]} -> {b[], b[m6,m5]} - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 10, chainProvider, chainProvider) - - m := types.NewSignedMsgs(7, mockSigner) - requireAdd(t, ib, m[2], m[5]) - - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, msgsSet{msgs{m[0]}, msgs{m[1]}}) - - newChain := requireChainWithMessages(t, chainProvider.Builder, parent, - msgsSet{msgs{m[2], m[3]}}, - msgsSet{msgs{m[4]}, msgs{m[0]}, msgs{}, msgs{}}, - msgsSet{msgs{}, msgs{m[5], m[6]}}, - ) - - assert.NoError(t, ib.HandleNewHead(ctx, oldChain, newChain)) - assertPoolEquals(t, p, m[1]) - }) - - t.Run("Replace internal node (second one)", func(t *testing.T) { - // Msg pool: [m3, m5], Chain: b[m0] -> b[m1] -> b[m2] - // to - // Msg pool: [m1, m2], Chain: b[m0] -> b[m3] -> b[m4, m5] - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 10, chainProvider, chainProvider) - - m := types.NewSignedMsgs(6, mockSigner) - requireAdd(t, ib, m[3], m[5]) - - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, - msgsSet{msgs{m[0]}}, - msgsSet{msgs{m[1]}}, - msgsSet{msgs{m[2]}}, - ) - - newChain := requireChainWithMessages(t, chainProvider.Builder, oldChain[0], - msgsSet{msgs{m[3]}}, - msgsSet{msgs{m[4], m[5]}}, - ) - - assert.NoError(t, ib.HandleNewHead(ctx, oldChain[:len(oldChain)-1], newChain)) - assertPoolEquals(t, p, m[1], m[2]) - }) - - t.Run("Replace internal node (second one) with a long chain", func(t *testing.T) { - // Msg pool: [m6], Chain: b[m0] -> b[m1] -> b[m2] - // to - // Msg pool: [m6], Chain: b[m0] -> b[m3] -> b[m4] -> b[m5] -> b[m1, m2] - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 10, chainProvider, chainProvider) - - m := types.NewSignedMsgs(7, mockSigner) - requireAdd(t, ib, m[6]) - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, - msgsSet{msgs{m[0]}}, - msgsSet{msgs{m[1]}}, - msgsSet{msgs{m[2]}}, - ) - - newChain := requireChainWithMessages(t, chainProvider.Builder, oldChain[0], - msgsSet{msgs{m[3]}}, - msgsSet{msgs{m[4]}}, - msgsSet{msgs{m[5]}}, - msgsSet{msgs{m[1], m[2]}}, - ) - - assert.NoError(t, ib.HandleNewHead(ctx, oldChain[:len(oldChain)-1], newChain)) - assertPoolEquals(t, p, m[6]) - }) - - t.Run("Replace internal node with multi-block tipset chains", func(t *testing.T) { - // Msg pool: [m6], Chain: {b[m0], b[m1]} -> b[m2] - // to - // Msg pool: [m6], Chain: {b[m0], b[m1]} -> b[m3] -> b[m4] -> {b[m5], b[m1, m2]} - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 10, chainProvider, chainProvider) - - m := types.NewSignedMsgs(7, mockSigner) - requireAdd(t, ib, m[6]) - - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, - msgsSet{msgs{m[0]}, msgs{m[1]}}, - msgsSet{msgs{m[2]}}, - ) - - newChain := requireChainWithMessages(t, chainProvider.Builder, oldChain[0], - msgsSet{msgs{m[3]}}, - msgsSet{msgs{m[4]}}, - msgsSet{msgs{m[5]}, msgs{m[1], m[2]}}, - ) - - assert.NoError(t, ib.HandleNewHead(ctx, oldChain[:len(oldChain)-1], newChain)) - assertPoolEquals(t, p, m[6]) - }) - - t.Run("Replace with same messages in different block structure", func(t *testing.T) { - // Msg pool: [m3, m5], Chain: b[m0] -> b[m1] -> b[m2] - // to - // Msg pool: [m3, m5], Chain: {b[m0], b[m1], b[m2]} - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 10, chainProvider, chainProvider) - - m := types.NewSignedMsgs(6, mockSigner) - requireAdd(t, ib, m[3], m[5]) - - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, - msgsSet{msgs{m[0]}}, - msgsSet{msgs{m[1]}}, - msgsSet{msgs{m[2]}}, - ) - - newChain := requireChainWithMessages(t, chainProvider.Builder, parent, - msgsSet{msgs{m[0]}, msgs{m[1]}, msgs{m[2]}}, - ) - - assert.NoError(t, ib.HandleNewHead(ctx, oldChain, newChain)) - assertPoolEquals(t, p, m[3], m[5]) - }) - - t.Run("Truncate to internal node", func(t *testing.T) { - // Msg pool: [], Chain: b[m0] -> b[m1] -> b[m2] -> b[m3] - // to - // Msg pool: [m2, m3], Chain: b[m0] -> b[m1] - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 10, chainProvider, chainProvider) - m := types.NewSignedMsgs(4, mockSigner) - - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, - msgsSet{msgs{m[0]}}, - msgsSet{msgs{m[1]}}, - msgsSet{msgs{m[2]}}, - msgsSet{msgs{m[3]}}, - ) - - assert.NoError(t, ib.HandleNewHead(ctx, oldChain[:2], nil)) - assertPoolEquals(t, p, m[2], m[3]) - }) - - t.Run("Extend head", func(t *testing.T) { - // Msg pool: [m0, m1], Chain: b[] - // to - // Msg pool: [m0], Chain: b[] -> b[m1, m2] - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 10, chainProvider, chainProvider) - - m := types.NewSignedMsgs(3, mockSigner) - requireAdd(t, ib, m[0], m[1]) - - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, msgsSet{msgs{}}) - - newChain := requireChainWithMessages(t, chainProvider.Builder, oldChain[0], msgsSet{msgs{m[1], m[2]}}) - - assert.NoError(t, ib.HandleNewHead(ctx, nil, newChain)) - assertPoolEquals(t, p, m[0]) - }) - - t.Run("Extend head with a longer chain and more messages", func(t *testing.T) { - // Msg pool: [m2, m5], Chain: b[m0] -> b[m1] - // to - // Msg pool: [], Chain: b[m0] -> b[m1] -> b[m2, m3] -> b[m4] -> b[m5, m6] - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 10, chainProvider, chainProvider) - - m := types.NewSignedMsgs(7, mockSigner) - requireAdd(t, ib, m[2], m[5]) - - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, - msgsSet{msgs{m[0]}}, - msgsSet{msgs{m[1]}}, - ) - - newChain := requireChainWithMessages(t, chainProvider.Builder, oldChain[0], - msgsSet{msgs{m[2], m[3]}}, - msgsSet{msgs{m[4]}}, - msgsSet{msgs{m[5], m[6]}}, - ) - - assert.NoError(t, ib.HandleNewHead(ctx, nil, newChain)) - assertPoolEquals(t, p) - }) - - t.Run("Messages added to new chain are added at chain height", func(t *testing.T) { - // Msg pool: [m2, m5], Chain: b[m0] -> b[m1] - // to - // Msg pool: [], Chain: b[m0] -> b[m1] -> b[m2, m3] -> b[m4] -> b[m5, m6] - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - ib := message.NewInbox(p, 5, chainProvider, chainProvider) - - m := types.NewSignedMsgs(1, mockSigner) - - // old chain with one tipset containing one message - oldChain := requireChainWithMessages(t, chainProvider.Builder, parent, msgsSet{msgs{m[0]}}) - - // new chain with 10 tipsets and no messages - newChain := requireChainWithMessages(t, chainProvider.Builder, parent, - msgsSet{msgs{}}, msgsSet{msgs{}}, msgsSet{msgs{}}, msgsSet{msgs{}}, msgsSet{msgs{}}, - msgsSet{msgs{}}, msgsSet{msgs{}}, msgsSet{msgs{}}, msgsSet{msgs{}}, msgsSet{msgs{}}, - ) - - // reorg the chain. Messages added more than 5 tipsets from the head will be immediately dropped - assert.NoError(t, ib.HandleNewHead(ctx, oldChain, newChain)) - - // expect the first message to still be in the chain because it is added at the new head - assertPoolEquals(t, p, m[0]) - }) - - t.Run("Times out old messages", func(t *testing.T) { - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - maxAge := uint(10) - ib := message.NewInbox(p, maxAge, chainProvider, chainProvider) - - m := types.NewSignedMsgs(maxAge, mockSigner) - - head := requireChainWithMessages(t, chainProvider.Builder, parent, msgsSet{msgs{}})[0] - - // Add a message at each block height until maxAge is reached. - for i := uint(0); i < maxAge; i++ { - // chainProvider's head determines block time at which message is added - chainProvider.SetHead(head.Key()) - - requireAdd(t, ib, m[i]) - - // update pool with tipset that has no messages - next := requireChainWithMessages(t, chainProvider.Builder, head, msgsSet{msgs{}})[0] - assert.NoError(t, ib.HandleNewHead(ctx, nil, []block.TipSet{next})) - - // assert all added messages still in pool - assertPoolEquals(t, p, m[:i+1]...) - - head = next - } - require.Equal(t, abi.ChainEpoch(11), head.At(0).Height) - - // next tipset times out first message only - next := requireChainWithMessages(t, chainProvider.Builder, head, msgsSet{msgs{}})[0] - assert.NoError(t, ib.HandleNewHead(ctx, nil, []block.TipSet{next})) - assertPoolEquals(t, p, m[1:]...) - - // adding a chain of 4 tipsets times out based on final state - newChain := requireChainWithMessages(t, chainProvider.Builder, next, - msgsSet{msgs{}}, - msgsSet{msgs{}}, - msgsSet{msgs{}}, - msgsSet{msgs{}}, - ) - require.Equal(t, abi.ChainEpoch(16), newChain[0].At(0).Height) - assert.NoError(t, ib.HandleNewHead(ctx, nil, newChain)) - assertPoolEquals(t, p, m[5:]...) - }) - - t.Run("UnsignedMessage timeout is unaffected by null tipsets", func(t *testing.T) { - chainProvider, parent := newProviderWithGenesis(t) - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - maxAge := uint(10) - ib := message.NewInbox(p, maxAge, chainProvider, chainProvider) - - m := types.NewSignedMsgs(maxAge, mockSigner) - head := requireChainWithMessages(t, chainProvider.Builder, parent, msgsSet{msgs{}})[0] - - // Add a message at each block height until maxAge is reached - for i := uint(0); i < maxAge; i++ { - // chainProvider's head determines block time at which message is added - chainProvider.SetHead(head.Key()) - - requireAdd(t, ib, m[i]) - - // update pool with tipset that has no messages and four - // null blocks - next := chainProvider.BuildOneOn(head, func(bb *chain.BlockBuilder) { - bb.IncHeight(4) // 4 null blocks - }) - - assert.NoError(t, ib.HandleNewHead(ctx, nil, []block.TipSet{next})) - - // assert all added messages still in pool - assertPoolEquals(t, p, m[:i+1]...) - - head = next - } - - // next tipset times out first message only - next := requireChainWithMessages(t, chainProvider.Builder, head, msgsSet{msgs{}})[0] - assert.NoError(t, ib.HandleNewHead(ctx, nil, []block.TipSet{next})) - assertPoolEquals(t, p, m[1:]...) - }) -} - -func newProviderWithGenesis(t *testing.T) (*message.FakeProvider, block.TipSet) { - provider := message.NewFakeProvider(t) - head := provider.Builder.NewGenesis() - provider.SetHead(head.Key()) - return provider, head -} - -func requireAdd(t *testing.T, ib *message.Inbox, msgs ...*types.SignedMessage) { - ctx := context.Background() - for _, m := range msgs { - _, err := ib.Add(ctx, m) - require.NoError(t, err) - } -} - -func msgAsString(msg *types.SignedMessage) string { - // When using NewMessageForTestGetter msg.Method is set - // to "msgN" so we print that (it will correspond - // to a variable of the same name in the tests - // below). - return strconv.FormatInt(int64(msg.Message.Method), 10) -} - -func msgsAsString(msgs []*types.SignedMessage) string { - s := "" - for _, m := range msgs { - s = fmt.Sprintf("%s%s ", s, msgAsString(m)) - } - return "[" + s + "]" -} - -// assertPoolEquals returns true if p contains exactly the expected messages. -func assertPoolEquals(t *testing.T, p *message.Pool, expMsgs ...*types.SignedMessage) { - msgs := p.Pending() - if len(msgs) != len(expMsgs) { - assert.Failf(t, "wrong messages in pool", "expMsgs %v, got msgs %v", msgsAsString(expMsgs), msgsAsString(msgs)) - - } - for _, m1 := range expMsgs { - found := false - for _, m2 := range msgs { - if types.SmsgCidsEqual(m1, m2) { - found = true - break - } - } - if !found { - assert.Failf(t, "wrong messages in pool", "expMsgs %v, got msgs %v (msgs doesn't contain %v)", msgsAsString(expMsgs), msgsAsString(msgs), msgAsString(m1)) - } - } -} - -// requireChainWithMessages creates a chain of tipsets containing the given messages -// using the provided chain builder. The builder stores the chain. Note that -// each msgSet argument is a slice of message slices. Each slice of slices -// goes into a successive tipset and each subslice goes into one tipset block. -// Precondition: the root tipset must be defined. The chain of tipsets is -// returned in descending height order (head-first). -// TODO: move this onto the builder, #3110 -func requireChainWithMessages(t *testing.T, builder *chain.Builder, root block.TipSet, msgSets ...[][]*types.SignedMessage) []block.TipSet { - var tipSets []block.TipSet - parent := root - require.True(t, parent.Defined()) - - for _, tsMsgSet := range msgSets { - if len(tsMsgSet) == 0 { - parent = builder.BuildOneOn(parent, nil) - } else { - parent = builder.Build(parent, len(tsMsgSet), msgBuild(t, tsMsgSet)) - } - tipSets = append(tipSets, parent) - } - chain.Reverse(tipSets) - return tipSets -} - -// msgBuild takes in the msgSet dictating which messages go on which block of -// a test tipset and returns a build function that adds these messages to the -// correct block using the chain.Builder. -func msgBuild(t *testing.T, msgSet [][]*types.SignedMessage) func(*chain.BlockBuilder, int) { - return func(bb *chain.BlockBuilder, i int) { - require.True(t, i <= len(msgSet)) - bb.AddMessages(msgSet[i], []*types.UnsignedMessage{}) - } -} diff --git a/internal/pkg/message/outbox.go b/internal/pkg/message/outbox.go deleted file mode 100644 index f9f6273b6c..0000000000 --- a/internal/pkg/message/outbox.go +++ /dev/null @@ -1,225 +0,0 @@ -package message - -import ( - "context" - "sync" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/journal" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// Outbox validates and marshals messages for sending and maintains the outbound message queue. -// The code arrangement here is not quite right. We probably want to factor out the bits that -// build and sign a message from those that add to the local queue/pool and broadcast it. -// See discussion in -// https://github.com/filecoin-project/go-filecoin/pull/3178#discussion_r311593312 -// and https://github.com/filecoin-project/go-filecoin/issues/3052#issuecomment-513643661 -type Outbox struct { - // Signs messages - signer types.Signer - // Validates messages before sending them. - validator messageValidator - // Holds messages sent from this node but not yet mined. - queue *Queue - // Publishes a signed message to the network. - publisher publisher - // Maintains message queue in response to new tipsets. - policy QueuePolicy - - chains chainProvider - actors actorProvider - - // Protects the "next nonce" calculation to avoid collisions. - nonceLock sync.Mutex - - journal journal.Writer -} - -type messageValidator interface { - // Validate checks a message for validity. - ValidateSignedMessageSyntax(ctx context.Context, msg *types.SignedMessage) error -} - -type actorProvider interface { - // GetActorAt returns the actor state defined by the chain up to some tipset - GetActorAt(ctx context.Context, tipset block.TipSetKey, addr address.Address) (*actor.Actor, error) -} - -type publisher interface { - Publish(ctx context.Context, message *types.SignedMessage, height abi.ChainEpoch, bcast bool) error -} - -var msgSendErrCt = metrics.NewInt64Counter("message_sender_error", "Number of errors encountered while sending a message") - -// NewOutbox creates a new outbox -func NewOutbox(signer types.Signer, validator messageValidator, queue *Queue, - publisher publisher, policy QueuePolicy, chains chainProvider, actors actorProvider, jw journal.Writer) *Outbox { - return &Outbox{ - signer: signer, - validator: validator, - queue: queue, - publisher: publisher, - policy: policy, - chains: chains, - actors: actors, - journal: jw, - } -} - -// Queue returns the outbox's outbound message queue. -func (ob *Outbox) Queue() *Queue { - return ob.queue -} - -// Send marshals and sends a message, retaining it in the outbound message queue. -// If bcast is true, the publisher broadcasts the message to the network at the current block height. -func (ob *Outbox) Send(ctx context.Context, from, to address.Address, value types.AttoFIL, - gasPrice types.AttoFIL, gasLimit gas.Unit, bcast bool, method abi.MethodNum, params interface{}) (out cid.Cid, pubErrCh chan error, err error) { - encodedParams, err := encoding.Encode(params) - if err != nil { - return cid.Undef, nil, errors.Wrap(err, "invalid params") - } - - return ob.SendEncoded(ctx, from, to, value, gasPrice, gasLimit, bcast, method, encodedParams) -} - -// SendEncoded sends an encoded message, retaining it in the outbound message queue. -// If bcast is true, the publisher broadcasts the message to the network at the current block height. -func (ob *Outbox) SendEncoded(ctx context.Context, from, to address.Address, value types.AttoFIL, - gasPrice types.AttoFIL, gasLimit gas.Unit, bcast bool, method abi.MethodNum, encodedParams []byte) (out cid.Cid, pubErrCh chan error, err error) { - defer func() { - if err != nil { - msgSendErrCt.Inc(ctx, 1) - } - ob.journal.Write("SendEncoded", - "to", to.String(), "from", from.String(), "value", value.Int.Uint64(), "method", method, - "gasPrice", gasPrice.Int.Uint64(), "gasLimit", uint64(gasLimit), "bcast", bcast, - "encodedParams", encodedParams, "error", err, "cid", out.String()) - }() - - // The spec's message syntax validation rules restricts empty parameters - // to be encoded as an empty byte string not cbor null - if encodedParams == nil { - encodedParams = []byte{} - } - - // Lock to avoid a race inspecting the actor state and message queue to calculate next nonce. - ob.nonceLock.Lock() - defer ob.nonceLock.Unlock() - - head := ob.chains.GetHead() - - fromActor, err := ob.actors.GetActorAt(ctx, head, from) - if err != nil { - return cid.Undef, nil, errors.Wrapf(err, "no actor at address %s", from) - } - - nonce, err := nextNonce(fromActor, ob.queue, from) - if err != nil { - return cid.Undef, nil, errors.Wrapf(err, "failed calculating nonce for actor at %s", from) - } - - rawMsg := types.NewMeteredMessage(from, to, nonce, value, method, encodedParams, gasPrice, gasLimit) - signed, err := types.NewSignedMessage(ctx, *rawMsg, ob.signer) - - if err != nil { - return cid.Undef, nil, errors.Wrap(err, "failed to sign message") - } - - // Slightly awkward: it would be better validate before signing but the MeteredMessage construction - // is hidden inside NewSignedMessage. - err = ob.validator.ValidateSignedMessageSyntax(ctx, signed) - if err != nil { - return cid.Undef, nil, errors.Wrap(err, "invalid message") - } - - return sendSignedMsg(ctx, ob, signed, bcast) -} - -// SignedSend send a signed message, retaining it in the outbound message queue. -// If bcast is true, the publisher broadcasts the message to the network at the current block height. -func (ob *Outbox) SignedSend(ctx context.Context, signed *types.SignedMessage, bcast bool) (out cid.Cid, pubErrCh chan error, err error) { - defer func() { - if err != nil { - msgSendErrCt.Inc(ctx, 1) - } - }() - - return sendSignedMsg(ctx, ob, signed, bcast) -} - -// sendSignedMsg add signed message in pool and return cid -func sendSignedMsg(ctx context.Context, ob *Outbox, signed *types.SignedMessage, bcast bool) (cid.Cid, chan error, error) { - head := ob.chains.GetHead() - - height, err := tipsetHeight(ob.chains, head) - if err != nil { - return cid.Undef, nil, errors.Wrap(err, "failed to get block height") - } - - // Add to the local message queue/pool at the last possible moment before broadcasting to network. - if err := ob.queue.Enqueue(ctx, signed, uint64(height)); err != nil { - return cid.Undef, nil, errors.Wrap(err, "failed to add message to outbound queue") - } - - var c cid.Cid - if signed.Message.From.Protocol() == address.BLS { - // drop signature before generating Cid to match cid of message retrieved from block. - c, err = signed.Message.Cid() - } else { - c, err = signed.Cid() - } - if err != nil { - return cid.Undef, nil, err - } - pubErrCh := make(chan error) - - go func() { - err = ob.publisher.Publish(ctx, signed, height, bcast) - if err != nil { - log.Errorf("error: %s publishing message %s", err, c.String()) - } - pubErrCh <- err - close(pubErrCh) - }() - - return c, pubErrCh, nil -} - -// HandleNewHead maintains the message queue in response to a new head tipset. -func (ob *Outbox) HandleNewHead(ctx context.Context, oldTips, newTips []block.TipSet) error { - return ob.policy.HandleNewHead(ctx, ob.queue, oldTips, newTips) -} - -// nextNonce returns the next expected nonce value for an account actor. This is the larger -// of the actor's nonce value, or one greater than the largest nonce from the actor found in the message queue. -func nextNonce(act *actor.Actor, queue *Queue, address address.Address) (uint64, error) { - actorNonce, err := actor.NextNonce(act) - if err != nil { - return 0, err - } - - poolNonce, found := queue.LargestNonce(address) - if found && poolNonce >= actorNonce { - return poolNonce + 1, nil - } - return actorNonce, nil -} - -func tipsetHeight(provider chainProvider, key block.TipSetKey) (abi.ChainEpoch, error) { - head, err := provider.GetTipSet(key) - if err != nil { - return 0, err - } - return head.Height() -} diff --git a/internal/pkg/message/outbox_test.go b/internal/pkg/message/outbox_test.go deleted file mode 100644 index 21c77023b9..0000000000 --- a/internal/pkg/message/outbox_test.go +++ /dev/null @@ -1,165 +0,0 @@ -package message_test - -import ( - "context" - "sync" - "testing" - "time" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/util/adt" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/journal" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -func newOutboxTestJournal(t *testing.T) journal.Writer { - return journal.NewInMemoryJournal(t, clock.NewFake(time.Unix(1234567890, 0))).Topic("outbox") -} - -func TestOutbox(t *testing.T) { - tf.UnitTest(t) - - t.Run("invalid message rejected", func(t *testing.T) { - w, _ := types.NewMockSignersAndKeyInfo(1) - sender := w.Addresses[0] - queue := message.NewQueue() - publisher := &message.MockPublisher{} - provider := message.NewFakeProvider(t) - bcast := true - - ob := message.NewOutbox(w, message.FakeValidator{RejectMessages: true}, queue, publisher, - message.NullPolicy{}, provider, provider, newOutboxTestJournal(t)) - - cid, _, err := ob.Send(context.Background(), sender, sender, types.NewAttoFILFromFIL(2), types.NewGasPrice(0), gas.NewGas(0), bcast, builtin.MethodSend, adt.Empty) - assert.Errorf(t, err, "for testing") - assert.False(t, cid.Defined()) - }) - - t.Run("send message enqueues and calls Publish, but respects bcast flag for broadcasting", func(t *testing.T) { - w, _ := types.NewMockSignersAndKeyInfo(1) - sender := w.Addresses[0] - toAddr := vmaddr.NewForTestGetter()() - queue := message.NewQueue() - publisher := &message.MockPublisher{} - provider := message.NewFakeProvider(t) - - head := provider.BuildOneOn(block.UndefTipSet, func(b *chain.BlockBuilder) { - b.IncHeight(1000) - }) - actr := actor.NewActor(builtin.AccountActorCodeID, abi.NewTokenAmount(0), cid.Undef) - actr.CallSeqNum = 42 - provider.SetHeadAndActor(t, head.Key(), sender, actr) - - ob := message.NewOutbox(w, message.FakeValidator{}, queue, publisher, message.NullPolicy{}, provider, provider, newOutboxTestJournal(t)) - require.Empty(t, queue.List(sender)) - require.Nil(t, publisher.Message) - - testCases := []struct { - bcast bool - nonce uint64 - height int - }{{true, actr.CallSeqNum, 1000}, {false, actr.CallSeqNum + 1, 1000}} - - for _, test := range testCases { - _, pubDone, err := ob.Send(context.Background(), sender, toAddr, types.ZeroAttoFIL, types.NewGasPrice(0), gas.NewGas(0), test.bcast, builtin.MethodSend, adt.Empty) - require.NoError(t, err) - assert.Equal(t, uint64(test.height), queue.List(sender)[0].Stamp) - require.NotNil(t, pubDone) - pubErr := <-pubDone - assert.NoError(t, pubErr) - require.NotNil(t, publisher.Message) - assert.Equal(t, test.nonce, publisher.Message.Message.CallSeqNum) - assert.Equal(t, abi.ChainEpoch(test.height), publisher.Height) - assert.Equal(t, test.bcast, publisher.Bcast) - } - - }) - t.Run("send message avoids nonce race", func(t *testing.T) { - ctx := context.Background() - msgCount := 20 // number of messages to send - sendConcurrent := 3 // number of of concurrent message sends - - w, _ := types.NewMockSignersAndKeyInfo(1) - sender := w.Addresses[0] - toAddr := vmaddr.NewForTestGetter()() - queue := message.NewQueue() - publisher := &message.MockPublisher{} - provider := message.NewFakeProvider(t) - bcast := true - - head := provider.BuildOneOn(block.UndefTipSet, func(b *chain.BlockBuilder) { - b.IncHeight(1000) - }) - actr := actor.NewActor(builtin.AccountActorCodeID, abi.NewTokenAmount(0), cid.Undef) - actr.CallSeqNum = 42 - provider.SetHeadAndActor(t, head.Key(), sender, actr) - - s := message.NewOutbox(w, message.FakeValidator{}, queue, publisher, message.NullPolicy{}, provider, provider, newOutboxTestJournal(t)) - - var wg sync.WaitGroup - addTwentyMessages := func(batch int) { - defer wg.Done() - for i := 0; i < msgCount; i++ { - method := abi.MethodNum(batch*10000 + i) - _, _, err := s.Send(ctx, sender, toAddr, types.ZeroAttoFIL, types.NewGasPrice(0), gas.NewGas(0), bcast, method, adt.Empty) - require.NoError(t, err) - } - } - - // Add messages concurrently. - for i := 0; i < sendConcurrent; i++ { - wg.Add(1) - go addTwentyMessages(i) - } - wg.Wait() - - enqueued := queue.List(sender) - assert.Equal(t, 60, len(enqueued)) - - // Expect the nonces to be distinct and contiguous - nonces := map[uint64]bool{} - for _, message := range enqueued { - assert.Equal(t, uint64(1000), message.Stamp) - _, found := nonces[message.Msg.Message.CallSeqNum] - require.False(t, found) - nonces[message.Msg.Message.CallSeqNum] = true - } - - for i := 0; i < 60; i++ { - assert.True(t, nonces[actr.CallSeqNum+uint64(i)]) - - } - }) - - t.Run("fails with non-account actor", func(t *testing.T) { - w, _ := types.NewMockSignersAndKeyInfo(1) - sender := w.Addresses[0] - toAddr := vmaddr.NewForTestGetter()() - queue := message.NewQueue() - publisher := &message.MockPublisher{} - provider := message.NewFakeProvider(t) - - head := provider.NewGenesis() - actr := actor.NewActor(builtin.StorageMarketActorCodeID, abi.NewTokenAmount(0), cid.Undef) - provider.SetHeadAndActor(t, head.Key(), sender, actr) - - ob := message.NewOutbox(w, message.FakeValidator{}, queue, publisher, message.NullPolicy{}, provider, provider, newOutboxTestJournal(t)) - - _, _, err := ob.Send(context.Background(), sender, toAddr, types.ZeroAttoFIL, types.NewGasPrice(0), gas.NewGas(0), true, builtin.MethodSend, adt.Empty) - assert.Error(t, err) - assert.Contains(t, err.Error(), "account or empty") - }) -} diff --git a/internal/pkg/message/policy.go b/internal/pkg/message/policy.go deleted file mode 100644 index 9135719da5..0000000000 --- a/internal/pkg/message/policy.go +++ /dev/null @@ -1,130 +0,0 @@ -package message - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/specs-actors/actors/abi" - logging "github.com/ipfs/go-log/v2" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// OutboxMaxAgeRounds is the maximum age (in consensus rounds) to permit messages to stay in the outbound message queue. -// This should be a little longer than the message pool's timeout so that messages expire from mining -// pools a little before the sending node gives up on them. -const OutboxMaxAgeRounds = 10 - -var log = logging.Logger("message") - -// QueuePolicy manages a message queue state in response to changes on the blockchain. -type QueuePolicy interface { - // HandleNewHead updates a message queue in response to a new chain head. The new head may be based - // directly on the previous head, or it may be based on a prior tipset (aka a re-org). - // - `oldTips` is a list of tipsets that used to be on the main chain but are no longer. - // - `newTips` is a list of tipsets that now form the head of the main chain. - // Both lists are in descending height order, down to but not including the common ancestor tipset. - HandleNewHead(ctx context.Context, target PolicyTarget, oldTips, newTips []block.TipSet) error -} - -// PolicyTarget is outbound queue object on which the policy acts. -type PolicyTarget interface { - RemoveNext(ctx context.Context, sender address.Address, expectedNonce uint64) (msg *types.SignedMessage, found bool, err error) - Requeue(ctx context.Context, msg *types.SignedMessage, stamp uint64) error - ExpireBefore(ctx context.Context, stamp uint64) map[address.Address][]*types.SignedMessage -} - -// DefaultQueuePolicy manages a target message queue state in response to changes on the blockchain. -// Messages are removed from the queue as soon as they appear in a block that's part of a heaviest chain. -// At this point, messages are highly likely to be valid and known to a large number of nodes, -// even if the block ends up as an abandoned fork. -// There is no special handling for re-orgs and messages do not revert to the queue if the block -// ends up childless (in contrast to the message pool). -type DefaultQueuePolicy struct { - // Provides messages collections from cids. - messageProvider messageProvider - // Maximum difference in message stamp from current block height before expiring an address's queue - maxAgeRounds uint64 -} - -// NewMessageQueuePolicy returns a new policy which removes mined messages from the queue and expires -// messages older than `maxAgeTipsets` rounds. -func NewMessageQueuePolicy(messages messageProvider, maxAge uint) *DefaultQueuePolicy { - return &DefaultQueuePolicy{messages, uint64(maxAge)} -} - -// HandleNewHead removes from the queue all messages that have now been mined in new blocks. -func (p *DefaultQueuePolicy) HandleNewHead(ctx context.Context, target PolicyTarget, oldTips, newTips []block.TipSet) error { - chainHeight, err := reorgHeight(oldTips, newTips) - if err != nil { - return err - } - - // Remove all messages in the new chain from the queue since they have been mined into blocks. - // Rearrange the tipsets into ascending height order so messages are discovered in nonce order. - chain.Reverse(newTips) - for _, tipset := range newTips { - for i := 0; i < tipset.Len(); i++ { - secpMsgs, _, err := p.messageProvider.LoadMessages(ctx, tipset.At(i).Messages.Cid) - if err != nil { - return err - } - for _, minedMsg := range secpMsgs { - removed, found, err := target.RemoveNext(ctx, minedMsg.Message.From, minedMsg.Message.CallSeqNum) - if err != nil { - return err - } - if found && !minedMsg.Equals(removed) { - log.Warnf("Queued message %v differs from mined message %v with same sender & nonce", removed, minedMsg) - } - // Else if not found, the message was not sent by this node, or has already been removed - // from the queue (e.g. a blockchain re-org). - } - } - } - - // Return messages from the old chain back to the queue. This is necessary so that the next nonce - // implied by the queue+state matches that of the message pool (which will also have the un-mined - // message re-instated). - // Note that this will include messages that were never sent by this node since the queue doesn't - // keep track of "allowed" senders. However, messages from other addresses will expire - // harmlessly. - // See discussion in https://github.com/filecoin-project/go-filecoin/issues/3052 - // Traverse these in descending height order. - for _, tipset := range oldTips { - for i := 0; i < tipset.Len(); i++ { - secpMsgs, _, err := p.messageProvider.LoadMessages(ctx, tipset.At(i).Messages.Cid) - if err != nil { - return err - } - for _, restoredMsg := range secpMsgs { - err := target.Requeue(ctx, restoredMsg, uint64(chainHeight)) - if err != nil { - return err - } - } - } - } - - // Expire messages that have been in the queue for too long; they will probably never be mined. - if uint64(chainHeight) >= p.maxAgeRounds { // avoid uint subtraction overflow - expired := target.ExpireBefore(ctx, uint64(chainHeight)-p.maxAgeRounds) - for _, msg := range expired { - log.Warnf("Outbound message %v expired un-mined after %d rounds", msg, p.maxAgeRounds) - } - } - return nil -} - -// reorgHeight returns height of the new chain given only the tipset diff which may be empty -func reorgHeight(oldTips, newTips []block.TipSet) (abi.ChainEpoch, error) { - if len(newTips) > 0 { - return newTips[0].Height() - } else if len(oldTips) > 0 { // A pure rewind is unlikely in practice. - return oldTips[0].Height() - } - // this is a noop reorg. Chain height shouldn't matter. - return 0, nil -} diff --git a/internal/pkg/message/policy_test.go b/internal/pkg/message/policy_test.go deleted file mode 100644 index a4b10723e8..0000000000 --- a/internal/pkg/message/policy_test.go +++ /dev/null @@ -1,206 +0,0 @@ -package message_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -// Tests for the outbound message queue policy. -// These tests could use a fake/mock policy target, but it would require some sophistication to -// validate the order of removals, so using a real queue is a bit easier. -func TestMessageQueuePolicy(t *testing.T) { - tf.UnitTest(t) - - // Individual tests share a MessageMaker so not parallel (but quick) - ctx := context.Background() - - keys := types.MustGenerateKeyInfo(2, 42) - mm := vm.NewMessageMaker(t, keys) - - alice := mm.Addresses()[0] - bob := mm.Addresses()[1] - - requireEnqueue := func(q *message.Queue, msg *types.SignedMessage, stamp uint64) *types.SignedMessage { - err := q.Enqueue(ctx, msg, stamp) - require.NoError(t, err) - return msg - } - - t.Run("old block does nothing", func(t *testing.T) { - blocks := chain.NewBuilder(t, alice) - q := message.NewQueue() - policy := message.NewMessageQueuePolicy(blocks, 10) - - fromAlice := mm.NewSignedMessage(alice, 1) - fromBob := mm.NewSignedMessage(bob, 1) - requireEnqueue(q, fromAlice, 100) - requireEnqueue(q, fromBob, 200) - - root := blocks.NewGenesis() // Height = 0 - b1 := blocks.AppendOn(root, 1) - - err := policy.HandleNewHead(ctx, q, nil, []block.TipSet{b1}) - assert.NoError(t, err) - assert.Equal(t, qm(fromAlice, 100), q.List(alice)[0]) - assert.Equal(t, qm(fromBob, 200), q.List(bob)[0]) - }) - - t.Run("chain truncation does nothing", func(t *testing.T) { - blocks := chain.NewBuilder(t, alice) - q := message.NewQueue() - policy := message.NewMessageQueuePolicy(blocks, 10) - - fromAlice := mm.NewSignedMessage(alice, 1) - fromBob := mm.NewSignedMessage(bob, 1) - requireEnqueue(q, fromAlice, 100) - requireEnqueue(q, fromBob, 200) - - root := blocks.NewGenesis() // Height = 0 - b1 := blocks.AppendOn(root, 1) - - err := policy.HandleNewHead(ctx, q, []block.TipSet{b1}, []block.TipSet{}) - assert.NoError(t, err) - assert.Equal(t, qm(fromAlice, 100), q.List(alice)[0]) - assert.Equal(t, qm(fromBob, 200), q.List(bob)[0]) - }) - - t.Run("removes mined messages", func(t *testing.T) { - blocks := chain.NewBuilder(t, alice) - q := message.NewQueue() - policy := message.NewMessageQueuePolicy(blocks, 10) - - msgs := []*types.SignedMessage{ - requireEnqueue(q, mm.NewSignedMessage(alice, 1), 100), - requireEnqueue(q, mm.NewSignedMessage(alice, 2), 101), - requireEnqueue(q, mm.NewSignedMessage(alice, 3), 102), - requireEnqueue(q, mm.NewSignedMessage(bob, 1), 100), - } - - assert.Equal(t, qm(msgs[0], 100), q.List(alice)[0]) - assert.Equal(t, qm(msgs[3], 100), q.List(bob)[0]) - - root := blocks.BuildOneOn(block.UndefTipSet, func(b *chain.BlockBuilder) { - b.IncHeight(103) - }) - b1 := blocks.BuildOneOn(root, func(b *chain.BlockBuilder) { - b.AddMessages( - []*types.SignedMessage{msgs[0]}, - []*types.UnsignedMessage{}, - ) - }) - - err := policy.HandleNewHead(ctx, q, nil, []block.TipSet{b1}) - require.NoError(t, err) - assert.Equal(t, qm(msgs[1], 101), q.List(alice)[0]) // First message removed successfully - assert.Equal(t, qm(msgs[3], 100), q.List(bob)[0]) // No change - - // A block with no messages does nothing - b2 := blocks.AppendOn(b1, 1) - err = policy.HandleNewHead(ctx, q, []block.TipSet{}, []block.TipSet{b2}) - require.NoError(t, err) - assert.Equal(t, qm(msgs[1], 101), q.List(alice)[0]) - assert.Equal(t, qm(msgs[3], 100), q.List(bob)[0]) - - // Block with both alice and bob's next message - b3 := blocks.BuildOneOn(b2, func(b *chain.BlockBuilder) { - b.AddMessages( - []*types.SignedMessage{msgs[1], msgs[3]}, - []*types.UnsignedMessage{}, - ) - }) - err = policy.HandleNewHead(ctx, q, nil, []block.TipSet{b3}) - require.NoError(t, err) - assert.Equal(t, qm(msgs[2], 102), q.List(alice)[0]) - assert.Empty(t, q.List(bob)) // None left - - // Block with alice's last message - b4 := blocks.BuildOneOn(b3, func(b *chain.BlockBuilder) { - b.AddMessages( - []*types.SignedMessage{msgs[2]}, - []*types.UnsignedMessage{}, - ) - }) - err = policy.HandleNewHead(ctx, q, nil, []block.TipSet{b4}) - require.NoError(t, err) - assert.Empty(t, q.List(alice)) - }) - - t.Run("expires old messages", func(t *testing.T) { - blocks := chain.NewBuilder(t, alice) - messages := blocks - q := message.NewQueue() - policy := message.NewMessageQueuePolicy(messages, 10) - - msgs := []*types.SignedMessage{ - requireEnqueue(q, mm.NewSignedMessage(alice, 1), 100), - requireEnqueue(q, mm.NewSignedMessage(alice, 2), 101), - requireEnqueue(q, mm.NewSignedMessage(alice, 3), 102), - requireEnqueue(q, mm.NewSignedMessage(bob, 1), 200), - } - - assert.Equal(t, qm(msgs[0], 100), q.List(alice)[0]) - assert.Equal(t, qm(msgs[3], 200), q.List(bob)[0]) - - root := blocks.BuildOneOn(block.UndefTipSet, func(b *chain.BlockBuilder) { - b.IncHeight(100) - }) - - // Skip 9 rounds since alice's first message enqueued, so b1 has height 110 - b1 := blocks.BuildOneOn(root, func(b *chain.BlockBuilder) { - b.IncHeight(9) - }) - - err := policy.HandleNewHead(ctx, q, nil, []block.TipSet{b1}) - require.NoError(t, err) - - assert.Equal(t, qm(msgs[0], 100), q.List(alice)[0]) // No change - assert.Equal(t, qm(msgs[3], 200), q.List(bob)[0]) - - b2 := blocks.AppendOn(b1, 1) // Height b1.Height + 1 = 111 - err = policy.HandleNewHead(ctx, q, nil, []block.TipSet{b2}) - require.NoError(t, err) - assert.Empty(t, q.List(alice)) // Alice's messages all expired - assert.Equal(t, qm(msgs[3], 200), q.List(bob)[0]) // Bob's remain - }) - - t.Run("fails when messages out of nonce order", func(t *testing.T) { - blocks := chain.NewBuilder(t, alice) - messages := blocks - q := message.NewQueue() - policy := message.NewMessageQueuePolicy(messages, 10) - - msgs := []*types.SignedMessage{ - requireEnqueue(q, mm.NewSignedMessage(alice, 1), 100), - requireEnqueue(q, mm.NewSignedMessage(alice, 2), 101), - requireEnqueue(q, mm.NewSignedMessage(alice, 3), 102), - } - - root := blocks.BuildOneOn(block.UndefTipSet, func(b *chain.BlockBuilder) { - b.IncHeight(100) - }) - - b1 := blocks.BuildOneOn(root, func(b *chain.BlockBuilder) { - b.AddMessages( - []*types.SignedMessage{msgs[1]}, - []*types.UnsignedMessage{}, - ) - }) - err := policy.HandleNewHead(ctx, q, nil, []block.TipSet{b1}) - require.Error(t, err) - assert.Contains(t, err.Error(), "nonce 1, expected 2") - }) -} - -func qm(msg *types.SignedMessage, stamp uint64) *message.Queued { - return &message.Queued{Msg: msg, Stamp: stamp} -} diff --git a/internal/pkg/message/pool.go b/internal/pkg/message/pool.go deleted file mode 100644 index d50d43c0e4..0000000000 --- a/internal/pkg/message/pool.go +++ /dev/null @@ -1,173 +0,0 @@ -package message - -import ( - "context" - "sync" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -var mpSize = metrics.NewInt64Gauge("message_pool_size", "The size of the message pool") - -// PoolValidator defines a validator that ensures a message can go through the pool. -type PoolValidator interface { - ValidateSignedMessageSyntax(ctx context.Context, msg *types.SignedMessage) error -} - -// Pool keeps an unordered, de-duplicated set of Messages and supports removal by CID. -// By 'de-duplicated' we mean that insertion of a message by cid that already -// exists is a nop. We use a Pool to store all messages received by this node -// via network or directly created via user command that have yet to be included -// in a block. Messages are removed as they are processed. -// -// Pool is safe for concurrent access. -type Pool struct { - lk sync.RWMutex - - cfg *config.MessagePoolConfig - validator PoolValidator - pending map[cid.Cid]*timedmessage // all pending messages - addressNonces map[addressNonce]bool // set of address nonce pairs used to efficiently validate duplicate nonces -} - -type timedmessage struct { - message *types.SignedMessage - addedAt abi.ChainEpoch -} - -type addressNonce struct { - addr address.Address - nonce uint64 -} - -func newAddressNonce(msg *types.SignedMessage) addressNonce { - return addressNonce{addr: msg.Message.From, nonce: msg.Message.CallSeqNum} -} - -// NewPool constructs a new Pool. -func NewPool(cfg *config.MessagePoolConfig, validator PoolValidator) *Pool { - return &Pool{ - cfg: cfg, - validator: validator, - pending: make(map[cid.Cid]*timedmessage), - addressNonces: make(map[addressNonce]bool), - } -} - -// Add adds a message to the pool, tagged with the block height at which it was received. -// Does nothing if the message is already in the pool. -func (pool *Pool) Add(ctx context.Context, msg *types.SignedMessage, height abi.ChainEpoch) (cid.Cid, error) { - pool.lk.Lock() - defer pool.lk.Unlock() - - c, err := msg.Cid() - if err != nil { - return cid.Undef, errors.Wrap(err, "failed to create CID") - } - - // ignore message prior to validation if it is already in pool - _, found := pool.pending[c] - if found { - return c, nil - } - - if err = pool.validateMessage(ctx, msg); err != nil { - return cid.Undef, errors.Wrap(err, "validation error adding message to pool") - } - - pool.pending[c] = &timedmessage{message: msg, addedAt: height} - pool.addressNonces[newAddressNonce(msg)] = true - mpSize.Set(ctx, int64(len(pool.pending))) - return c, nil -} - -// Pending returns all pending messages. -func (pool *Pool) Pending() []*types.SignedMessage { - pool.lk.Lock() - defer pool.lk.Unlock() - - out := make([]*types.SignedMessage, 0, len(pool.pending)) - for _, msg := range pool.pending { - out = append(out, msg.message) - } - - return out -} - -// Get retrieves a message from the pool by CID. -func (pool *Pool) Get(c cid.Cid) (*types.SignedMessage, bool) { - pool.lk.RLock() - defer pool.lk.RUnlock() - value, ok := pool.pending[c] - if !ok { - return nil, ok - } else if value == nil { - panic("Found nil message for CID " + c.String()) - } - return value.message, ok -} - -// Remove removes the message by CID from the pending pool. -func (pool *Pool) Remove(c cid.Cid) { - pool.lk.Lock() - defer pool.lk.Unlock() - msg, ok := pool.pending[c] - if ok { - delete(pool.addressNonces, newAddressNonce(msg.message)) - delete(pool.pending, c) - } - - mpSize.Set(context.TODO(), int64(len(pool.pending))) -} - -// LargestNonce returns the largest nonce used by a message from address in the pool. -// If no messages from address are found, found will be false. -func (pool *Pool) LargestNonce(address address.Address) (largest uint64, found bool) { - for _, m := range pool.Pending() { - if m.Message.From == address { - found = true - if m.Message.CallSeqNum > largest { - largest = m.Message.CallSeqNum - } - } - } - return -} - -// PendingBefore returns the CIDs of messages added with height less than `minimumHeight`. -func (pool *Pool) PendingBefore(minimumHeight abi.ChainEpoch) []cid.Cid { - pool.lk.RLock() - defer pool.lk.RUnlock() - - var cids []cid.Cid - for c, msg := range pool.pending { - if msg.addedAt < minimumHeight { - cids = append(cids, c) - } - } - return cids -} - -// validateMessage validates that too many messages aren't added to the pool and the ones that are -// have a high probability of making it through processing. -func (pool *Pool) validateMessage(ctx context.Context, message *types.SignedMessage) error { - if uint(len(pool.pending)) >= pool.cfg.MaxPoolSize { - return errors.Errorf("message pool is full (%d messages)", pool.cfg.MaxPoolSize) - } - - // check that message with this nonce does not already exist - _, found := pool.addressNonces[newAddressNonce(message)] - if found { - return errors.Errorf("message pool contains message with same actor and nonce but different cid") - } - - // check that the message is likely to succeed in processing - return pool.validator.ValidateSignedMessageSyntax(ctx, message) -} diff --git a/internal/pkg/message/pool_test.go b/internal/pkg/message/pool_test.go deleted file mode 100644 index 92a22361da..0000000000 --- a/internal/pkg/message/pool_test.go +++ /dev/null @@ -1,238 +0,0 @@ -package message_test - -import ( - "context" - "sync" - "testing" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" -) - -var mockSigner, _ = types.NewMockSignersAndKeyInfo(10) -var newSignedMessage = types.NewSignedMessageForTestGetter(mockSigner) - -func TestMessagePoolAddRemove(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - - pool := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - msg1 := newSignedMessage() - msg2 := mustSetNonce(mockSigner, newSignedMessage(), 1) - - c1, err := msg1.Cid() - assert.NoError(t, err) - c2, err := msg2.Cid() - assert.NoError(t, err) - - assert.Len(t, pool.Pending(), 0) - m, ok := pool.Get(c1) - assert.Nil(t, m) - assert.False(t, ok) - - _, err = pool.Add(ctx, msg1, 0) - assert.NoError(t, err) - assert.Len(t, pool.Pending(), 1) - - _, err = pool.Add(ctx, msg2, 0) - assert.NoError(t, err) - assert.Len(t, pool.Pending(), 2) - - m, ok = pool.Get(c1) - assert.Equal(t, msg1, m) - assert.True(t, ok) - m, ok = pool.Get(c2) - assert.Equal(t, msg2, m) - assert.True(t, ok) - - pool.Remove(c1) - assert.Len(t, pool.Pending(), 1) - pool.Remove(c2) - assert.Len(t, pool.Pending(), 0) -} - -func TestMessagePoolValidate(t *testing.T) { - tf.UnitTest(t) - - t.Run("message pool rejects messages after it reaches its limit", func(t *testing.T) { - // alter the config to have a max size that can be quickly tested - mpoolCfg := config.NewDefaultConfig().Mpool - maxMessagePoolSize := uint(100) - mpoolCfg.MaxPoolSize = maxMessagePoolSize - ctx := context.Background() - pool := message.NewPool(mpoolCfg, th.NewMockMessagePoolValidator()) - - smsgs := types.NewSignedMsgs(maxMessagePoolSize+1, mockSigner) - for _, smsg := range smsgs[:maxMessagePoolSize] { - _, err := pool.Add(ctx, smsg, 0) - require.NoError(t, err) - } - - assert.Len(t, pool.Pending(), int(maxMessagePoolSize)) - - // attempt to add one more - _, err := pool.Add(ctx, smsgs[maxMessagePoolSize], 0) - require.Error(t, err) - assert.Contains(t, err.Error(), "message pool is full") - - assert.Len(t, pool.Pending(), int(maxMessagePoolSize)) - }) - - t.Run("validates no two messages are added with same nonce", func(t *testing.T) { - ctx := context.Background() - pool := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - - smsg1 := newSignedMessage() - _, err := pool.Add(ctx, smsg1, 0) - require.NoError(t, err) - - smsg2 := mustSetNonce(mockSigner, newSignedMessage(), smsg1.Message.CallSeqNum) - _, err = pool.Add(ctx, smsg2, 0) - require.Error(t, err) - assert.Contains(t, err.Error(), "message with same actor and nonce") - }) - - t.Run("validates using supplied validator", func(t *testing.T) { - ctx := context.Background() - validator := th.NewMockMessagePoolValidator() - validator.Valid = false - pool := message.NewPool(config.NewDefaultConfig().Mpool, validator) - - smsg1 := mustSetNonce(mockSigner, newSignedMessage(), 0) - _, err := pool.Add(ctx, smsg1, 0) - require.Error(t, err) - assert.Contains(t, err.Error(), "mock validation error") - }) -} - -func TestMessagePoolDedup(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - - pool := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - msg1 := newSignedMessage() - - assert.Len(t, pool.Pending(), 0) - _, err := pool.Add(ctx, msg1, 0) - assert.NoError(t, err) - assert.Len(t, pool.Pending(), 1) - - _, err = pool.Add(ctx, msg1, 0) - assert.NoError(t, err) - assert.Len(t, pool.Pending(), 1) -} - -func TestMessagePoolAsync(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - - count := uint(400) - mpoolCfg := config.NewDefaultConfig().Mpool - mpoolCfg.MaxPoolSize = count - msgs := types.NewSignedMsgs(count, mockSigner) - - pool := message.NewPool(mpoolCfg, th.NewMockMessagePoolValidator()) - var wg sync.WaitGroup - - for i := uint(0); i < 4; i++ { - wg.Add(1) - go func(i uint) { - for j := uint(0); j < count/4; j++ { - _, err := pool.Add(ctx, msgs[j+(count/4)*i], 0) - assert.NoError(t, err) - } - wg.Done() - }(i) - } - - wg.Wait() - assert.Len(t, pool.Pending(), int(count)) -} - -func TestLargestNonce(t *testing.T) { - tf.UnitTest(t) - - t.Run("No matches", func(t *testing.T) { - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - - m := types.NewSignedMsgs(2, mockSigner) - reqAdd(t, p, 0, m[0], m[1]) - - _, found := p.LargestNonce(vmaddr.NewForTestGetter()()) - assert.False(t, found) - }) - - t.Run("Match, largest is zero", func(t *testing.T) { - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - - m := types.NewMsgsWithAddrs(1, mockSigner.Addresses) - m[0].CallSeqNum = 0 - - sm, err := types.SignMsgs(mockSigner, m) - require.NoError(t, err) - - reqAdd(t, p, 0, sm...) - - largest, found := p.LargestNonce(m[0].From) - assert.True(t, found) - assert.Equal(t, uint64(0), largest) - }) - - t.Run("Match", func(t *testing.T) { - p := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - - m := types.NewMsgsWithAddrs(3, mockSigner.Addresses) - m[1].CallSeqNum = 1 - m[2].CallSeqNum = 2 - m[2].From = m[1].From - - sm, err := types.SignMsgs(mockSigner, m) - require.NoError(t, err) - - reqAdd(t, p, 0, sm...) - - largest, found := p.LargestNonce(m[2].From) - assert.True(t, found) - assert.Equal(t, uint64(2), largest) - }) -} - -func mustSetNonce(signer types.Signer, message *types.SignedMessage, nonce uint64) *types.SignedMessage { - return mustResignMessage(signer, message, func(m *types.UnsignedMessage) { - m.CallSeqNum = nonce - }) -} - -func mustResignMessage(signer types.Signer, message *types.SignedMessage, f func(*types.UnsignedMessage)) *types.SignedMessage { - var msg types.UnsignedMessage - msg = message.Message - f(&msg) - smg, err := signMessage(signer, msg) - if err != nil { - panic("Error signing message") - } - return smg -} - -func signMessage(signer types.Signer, message types.UnsignedMessage) (*types.SignedMessage, error) { - return types.NewSignedMessage(context.TODO(), message, signer) -} - -func reqAdd(t *testing.T, p *message.Pool, height abi.ChainEpoch, msgs ...*types.SignedMessage) { - ctx := context.Background() - for _, m := range msgs { - _, err := p.Add(ctx, m, height) - require.NoError(t, err) - } -} diff --git a/internal/pkg/message/publisher.go b/internal/pkg/message/publisher.go deleted file mode 100644 index b963ee96e4..0000000000 --- a/internal/pkg/message/publisher.go +++ /dev/null @@ -1,46 +0,0 @@ -package message - -import ( - "context" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// DefaultPublisher adds messages to a message pool and can publish them to its topic. -// This is wiring for message publication from the outbox. -type DefaultPublisher struct { - network networkPublisher - pool *Pool -} - -type networkPublisher interface { - Publish(ctx context.Context, data []byte) error -} - -// NewDefaultPublisher creates a new publisher. -func NewDefaultPublisher(pubsub networkPublisher, pool *Pool) *DefaultPublisher { - return &DefaultPublisher{pubsub, pool} -} - -// Publish marshals and publishes a message to the core message pool, and if bcast is true, -// broadcasts it to the network with the publisher's topic. -func (p *DefaultPublisher) Publish(ctx context.Context, message *types.SignedMessage, height abi.ChainEpoch, bcast bool) error { - encoded, err := message.Marshal() - if err != nil { - return errors.Wrap(err, "failed to marshal message") - } - - if _, err := p.pool.Add(ctx, message, height); err != nil { - return errors.Wrap(err, "failed to add message to message pool") - } - - if bcast { - if err = p.network.Publish(ctx, encoded); err != nil { - return errors.Wrap(err, "failed to publish message to network") - } - } - return nil -} diff --git a/internal/pkg/message/publisher_test.go b/internal/pkg/message/publisher_test.go deleted file mode 100644 index 69cfe289e7..0000000000 --- a/internal/pkg/message/publisher_test.go +++ /dev/null @@ -1,52 +0,0 @@ -package message_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -func TestDefaultMessagePublisher_Publish(t *testing.T) { - pool := message.NewPool(config.NewDefaultConfig().Mpool, testhelpers.NewMockMessagePoolValidator()) - - ms, _ := types.NewMockSignersAndKeyInfo(2) - msg := types.NewUnsignedMessage(ms.Addresses[0], ms.Addresses[1], 0, types.ZeroAttoFIL, builtin.MethodSend, []byte{}) - signed, err := types.NewSignedMessage(context.TODO(), *msg, ms) - require.NoError(t, err) - msgCid, err := signed.Cid() - require.NoError(t, err) - encoded, e := signed.Marshal() - require.NoError(t, e) - - testCases := []struct { - name string - bcast bool - }{ - {"Msg added to pool and Publish is called when bcast is true", true}, - {"Msg added to pool and Publish is NOT called when bcast is false", false}, - } - - for _, test := range testCases { - t.Run(test.name, func(t *testing.T) { - mnp := message.MockNetworkPublisher{} - pub := message.NewDefaultPublisher(&mnp, pool) - assert.NoError(t, pub.Publish(context.Background(), signed, 0, test.bcast)) - smsg, ok := pool.Get(msgCid) - assert.True(t, ok) - assert.NotNil(t, smsg) - if test.bcast { - assert.Equal(t, encoded, mnp.Data) - } else { - assert.Nil(t, mnp.Data) - } - }) - } -} diff --git a/internal/pkg/message/queue.go b/internal/pkg/message/queue.go deleted file mode 100644 index fe482dff23..0000000000 --- a/internal/pkg/message/queue.go +++ /dev/null @@ -1,238 +0,0 @@ -package message - -import ( - "context" - "sync" - - "github.com/pkg/errors" - - "github.com/filecoin-project/go-address" - - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -var ( - mqSizeGa = metrics.NewInt64Gauge("message_queue_size", "The size of the message queue") - mqOldestGa = metrics.NewInt64Gauge("message_queue_oldest", "The age of the oldest message in the queue or zero when empty") - mqExpireCt = metrics.NewInt64Counter("message_queue_expire", "The number messages expired from the queue") -) - -// Queue stores an ordered list of messages (per actor) and enforces that their nonces form a contiguous sequence. -// Each message is associated with a "stamp" (an opaque integer), and the queue supports expiring any list -// of messages where the first message has a stamp below some threshold. The relative order of stamps in a queue is -// not enforced. -// A message queue is intended to record outbound messages that have been transmitted but not yet appeared in a block, -// where the stamp could be block height. -// Queue is safe for concurrent access. -type Queue struct { - lk sync.RWMutex - // Message queues keyed by sending actor address, in nonce order - queues map[address.Address][]*Queued -} - -// Queued is a message an the stamp it was enqueued with. -type Queued struct { - Msg *types.SignedMessage - Stamp uint64 -} - -// NewQueue constructs a new, empty queue. -func NewQueue() *Queue { - return &Queue{ - queues: make(map[address.Address][]*Queued), - } -} - -// Enqueue appends a new message for an address. If the queue already contains any messages for -// from same address, the new message's nonce must be exactly one greater than the largest nonce -// present. -func (mq *Queue) Enqueue(ctx context.Context, msg *types.SignedMessage, stamp uint64) error { - defer func() { - mqSizeGa.Set(ctx, mq.Size()) - mqOldestGa.Set(ctx, int64(mq.Oldest())) - }() - - mq.lk.Lock() - defer mq.lk.Unlock() - - q := mq.queues[msg.Message.From] - if len(q) > 0 { - nextNonce := q[len(q)-1].Msg.Message.CallSeqNum + 1 - if msg.Message.CallSeqNum != nextNonce { - return errors.Errorf("Invalid nonce in %d in enqueue, expected %d", msg.Message.CallSeqNum, nextNonce) - } - } - mq.queues[msg.Message.From] = append(q, &Queued{msg, stamp}) - return nil -} - -// Requeue prepends a message for an address. If the queue already contains any messages from the -// same address, the message's nonce must be exactly one *less than* the smallest nonce present. -func (mq *Queue) Requeue(ctx context.Context, msg *types.SignedMessage, stamp uint64) error { - defer func() { - mqSizeGa.Set(ctx, mq.Size()) - mqOldestGa.Set(ctx, int64(mq.Oldest())) - }() - - mq.lk.Lock() - defer mq.lk.Unlock() - - q := mq.queues[msg.Message.From] - if len(q) > 0 { - prevNonce := q[0].Msg.Message.CallSeqNum - 1 - if msg.Message.CallSeqNum != prevNonce { - return errors.Errorf("Invalid nonce %d in requeue, expected %d", msg.Message.CallSeqNum, prevNonce) - } - } - mq.queues[msg.Message.From] = append([]*Queued{{msg, stamp}}, q...) - return nil -} - -// RemoveNext removes and returns a single message from the queue, if it bears the expected nonce value, with found = true. -// Returns found = false if the queue is empty or the expected nonce is less than any in the queue for that address -// (indicating the message had already been removed). -// Returns an error if the expected nonce is greater than the smallest in the queue. -// The caller may wish to check that the returned message is equal to that expected (not just in nonce value). -func (mq *Queue) RemoveNext(ctx context.Context, sender address.Address, expectedNonce uint64) (msg *types.SignedMessage, found bool, err error) { - defer func() { - mqSizeGa.Set(ctx, mq.Size()) - mqOldestGa.Set(ctx, int64(mq.Oldest())) - }() - - mq.lk.Lock() - defer mq.lk.Unlock() - - q := mq.queues[sender] - if len(q) > 0 { - head := q[0] - if expectedNonce == head.Msg.Message.CallSeqNum { - mq.queues[sender] = q[1:] // pop the head - msg = head.Msg - found = true - } else if expectedNonce > head.Msg.Message.CallSeqNum { - err = errors.Errorf("Next message for %s has nonce %d, expected %d", sender, head.Msg.Message.CallSeqNum, expectedNonce) - } - // else expected nonce was before the head of the queue, already removed - } - return -} - -// Clear removes all messages for a single sender address. -// Returns whether the queue was non-empty before being cleared. -func (mq *Queue) Clear(ctx context.Context, sender address.Address) bool { - defer func() { - mqSizeGa.Set(ctx, mq.Size()) - mqOldestGa.Set(ctx, int64(mq.Oldest())) - }() - - mq.lk.Lock() - defer mq.lk.Unlock() - - q := mq.queues[sender] - delete(mq.queues, sender) - return len(q) > 0 -} - -// ExpireBefore clears the queue of any sender where the first message in the queue has a stamp less than `stamp`. -// Returns a map containing any expired address queues. -func (mq *Queue) ExpireBefore(ctx context.Context, stamp uint64) map[address.Address][]*types.SignedMessage { - defer func() { - mqSizeGa.Set(ctx, mq.Size()) - mqOldestGa.Set(ctx, int64(mq.Oldest())) - }() - - mq.lk.Lock() - defer mq.lk.Unlock() - - expired := make(map[address.Address][]*types.SignedMessage) - - for sender, q := range mq.queues { - if len(q) > 0 && q[0].Stamp < stamp { - - // record the number of messages to be expired - mqExpireCt.Inc(ctx, int64(len(q))) - for _, m := range q { - expired[sender] = append(expired[sender], m.Msg) - } - - mq.queues[sender] = []*Queued{} - } - } - return expired -} - -// LargestNonce returns the largest nonce of any message in the queue for an address. -// If the queue for the address is empty, returns (0, false). -func (mq *Queue) LargestNonce(sender address.Address) (largest uint64, found bool) { - mq.lk.RLock() - defer mq.lk.RUnlock() - q := mq.queues[sender] - if len(q) > 0 { - return q[len(q)-1].Msg.Message.CallSeqNum, true - } - return 0, false -} - -// Queues returns the addresses associated with each non-empty queue. -// The order of returned addresses is neither defined nor stable. -func (mq *Queue) Queues() []address.Address { - mq.lk.RLock() - defer mq.lk.RUnlock() - - keys := make([]address.Address, len(mq.queues)) - i := 0 - for k := range mq.queues { - keys[i] = k - i++ - } - return keys -} - -// Size returns the total number of messages in the Queue. -func (mq *Queue) Size() int64 { - mq.lk.RLock() - defer mq.lk.RUnlock() - - var l int64 - for _, q := range mq.queues { - l += int64(len(q)) - } - return l -} - -// Oldest returns the oldest message stamp in the Queue. -// Oldest returns 0 if the queue is empty. -// Exported for testing only. -func (mq *Queue) Oldest() (oldest uint64) { - mq.lk.Lock() - defer mq.lk.Unlock() - - if len(mq.queues) == 0 { - return 0 - } - - // max uint64 value - oldest = 1<<64 - 1 - for _, qm := range mq.queues { - for _, m := range qm { - if m.Stamp < oldest { - oldest = m.Stamp - } - } - } - return oldest -} - -// List returns a copy of the list of messages queued for an address. -func (mq *Queue) List(sender address.Address) []*Queued { - mq.lk.RLock() - defer mq.lk.RUnlock() - q := mq.queues[sender] - out := make([]*Queued, len(q)) - for i, qm := range q { - out[i] = &Queued{} - *out[i] = *qm - } - return out -} diff --git a/internal/pkg/message/queue_test.go b/internal/pkg/message/queue_test.go deleted file mode 100644 index d97e5c655e..0000000000 --- a/internal/pkg/message/queue_test.go +++ /dev/null @@ -1,355 +0,0 @@ -package message_test - -import ( - "context" - "math" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -func TestMessageQueue(t *testing.T) { - tf.UnitTest(t) - - // Individual tests share a MessageMaker so not parallel (but quick) - keys := types.MustGenerateKeyInfo(2, 42) - mm := vm.NewMessageMaker(t, keys) - - alice := mm.Addresses()[0] - bob := mm.Addresses()[1] - require.NotEqual(t, alice, bob) - - ctx := context.Background() - - requireEnqueue := func(q *message.Queue, msg *types.SignedMessage, stamp uint64) { - err := q.Enqueue(ctx, msg, stamp) - require.NoError(t, err) - } - - requireRequeue := func(q *message.Queue, msg *types.SignedMessage, stamp uint64) { - err := q.Requeue(ctx, msg, stamp) - require.NoError(t, err) - } - - requireRemoveNext := func(q *message.Queue, sender address.Address, expectedNonce uint64) *types.SignedMessage { - msg, found, e := q.RemoveNext(ctx, sender, expectedNonce) - require.True(t, found) - require.NoError(t, e) - return msg - } - - assertLargestNonce := func(q *message.Queue, sender address.Address, expected uint64) { - largest, found := q.LargestNonce(sender) - assert.True(t, found, "no messages") - assert.Equal(t, expected, largest) - } - - assertNoNonce := func(q *message.Queue, sender address.Address) { - _, found := q.LargestNonce(sender) - assert.False(t, found, "unexpected messages") - } - - t.Run("empty queue", func(t *testing.T) { - q := message.NewQueue() - msg, found, err := q.RemoveNext(ctx, alice, 0) - assert.Nil(t, msg) - assert.False(t, found) - assert.NoError(t, err) - - assert.Empty(t, q.ExpireBefore(ctx, math.MaxUint64)) - - nonce, found := q.LargestNonce(alice) - assert.False(t, found) - assert.Zero(t, nonce) - - assert.Empty(t, q.List(alice)) - assert.Empty(t, q.Size()) - }) - - t.Run("add and remove sequence", func(t *testing.T) { - msgs := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 0), - mm.NewSignedMessage(alice, 1), - mm.NewSignedMessage(alice, 2), - } - - q := message.NewQueue() - assert.Equal(t, int64(0), q.Size()) - requireEnqueue(q, msgs[0], 0) - requireEnqueue(q, msgs[1], 0) - requireEnqueue(q, msgs[2], 0) - assert.Equal(t, int64(3), q.Size()) - - msg := requireRemoveNext(q, alice, 0) - assert.Equal(t, msgs[0], msg) - assert.Equal(t, int64(2), q.Size()) - - _, found, err := q.RemoveNext(ctx, alice, 0) // Remove first message again - assert.False(t, found) - assert.NoError(t, err) - assert.Equal(t, int64(2), q.Size()) - - msg = requireRemoveNext(q, alice, 1) - assert.Equal(t, msgs[1], msg) - assert.Equal(t, int64(1), q.Size()) - - _, found, err = q.RemoveNext(ctx, alice, 0) // Remove first message yet again - assert.False(t, found) - assert.NoError(t, err) - assert.Equal(t, int64(1), q.Size()) - - msg = requireRemoveNext(q, alice, 2) - assert.Equal(t, msgs[2], msg) - assert.Equal(t, int64(0), q.Size()) - }) - - t.Run("requeue", func(t *testing.T) { - msgs := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 0), - mm.NewSignedMessage(alice, 1), - mm.NewSignedMessage(alice, 2), - } - q := message.NewQueue() - requireEnqueue(q, msgs[0], 0) - requireEnqueue(q, msgs[1], 0) - - // Can't re-queue message with larger nonce - assert.Error(t, q.Requeue(ctx, msgs[2], 0)) - requireEnqueue(q, msgs[2], 0) - - assert.Equal(t, msgs[0], requireRemoveNext(q, alice, 0)) - requireRequeue(q, msgs[0], 0) - - assert.Equal(t, msgs[0], requireRemoveNext(q, alice, 0)) - assert.Equal(t, msgs[1], requireRemoveNext(q, alice, 1)) - assert.Error(t, q.Requeue(ctx, msgs[0], 0)) // Can't re-queue with nonce gap - - requireRequeue(q, msgs[1], 0) - requireRequeue(q, msgs[0], 0) - - assert.Equal(t, msgs[0], requireRemoveNext(q, alice, 0)) - assert.Equal(t, msgs[1], requireRemoveNext(q, alice, 1)) - assert.Equal(t, msgs[2], requireRemoveNext(q, alice, 2)) - - // Queue is empty, can re-queue anything - requireRequeue(q, mm.NewSignedMessage(alice, 3), 0) - }) - - t.Run("invalid nonce sequence", func(t *testing.T) { - msgs := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 0), - mm.NewSignedMessage(alice, 1), - mm.NewSignedMessage(alice, 2), - mm.NewSignedMessage(alice, 3), - } - - q := message.NewQueue() - requireEnqueue(q, msgs[1], 0) - - err := q.Enqueue(ctx, msgs[0], 0) // Prior to existing - assert.Error(t, err) - - err = q.Enqueue(ctx, msgs[1], 0) // Equal to existing - assert.Error(t, err) - - err = q.Enqueue(ctx, msgs[3], 0) // Gap after existing - assert.Error(t, err) - }) - - t.Run("invalid remove sequence", func(t *testing.T) { - msgs := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 10), - mm.NewSignedMessage(alice, 11), - } - - q := message.NewQueue() - requireEnqueue(q, msgs[0], 0) - requireEnqueue(q, msgs[1], 0) - - msg, found, err := q.RemoveNext(ctx, alice, 9) // Prior to head - assert.Nil(t, msg) - assert.False(t, found) - require.NoError(t, err) - - msg, found, err = q.RemoveNext(ctx, alice, 11) // After head - assert.False(t, found) - assert.Nil(t, msg) - assert.Error(t, err) - }) - - t.Run("largest nonce", func(t *testing.T) { - msgs := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 0), - mm.NewSignedMessage(alice, 1), - mm.NewSignedMessage(alice, 2), - mm.NewSignedMessage(alice, 3), - } - q := message.NewQueue() - requireEnqueue(q, msgs[0], 0) - assertLargestNonce(q, alice, 0) - requireEnqueue(q, msgs[1], 0) - assertLargestNonce(q, alice, 1) - requireEnqueue(q, msgs[2], 0) - assertLargestNonce(q, alice, 2) - - requireRemoveNext(q, alice, 0) - assertLargestNonce(q, alice, 2) - - requireEnqueue(q, msgs[3], 0) - assertLargestNonce(q, alice, 3) - - requireRemoveNext(q, alice, 1) - requireRemoveNext(q, alice, 2) - assertLargestNonce(q, alice, 3) - - requireRemoveNext(q, alice, 3) // clears queue - assertNoNonce(q, alice) - }) - - t.Run("clear", func(t *testing.T) { - msgs := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 0), - mm.NewSignedMessage(alice, 1), - mm.NewSignedMessage(alice, 2), - } - - q := message.NewQueue() - requireEnqueue(q, msgs[1], 0) - requireEnqueue(q, msgs[2], 0) - assert.Equal(t, int64(2), q.Size()) - assertLargestNonce(q, alice, 2) - q.Clear(ctx, alice) - assert.Equal(t, int64(0), q.Size()) - assertNoNonce(q, alice) - - requireEnqueue(q, msgs[0], 0) - requireEnqueue(q, msgs[1], 0) - assertLargestNonce(q, alice, 1) - }) - - t.Run("independent addresses", func(t *testing.T) { - fromAlice := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 0), - mm.NewSignedMessage(alice, 1), - mm.NewSignedMessage(alice, 2), - } - fromBob := []*types.SignedMessage{ - mm.NewSignedMessage(bob, 10), - mm.NewSignedMessage(bob, 11), - mm.NewSignedMessage(bob, 12), - } - q := message.NewQueue() - assert.Equal(t, int64(0), q.Size()) - - requireEnqueue(q, fromAlice[0], 0) - assertNoNonce(q, bob) - assert.Equal(t, int64(1), q.Size()) - - requireEnqueue(q, fromBob[0], 0) - assertLargestNonce(q, alice, 0) - assertLargestNonce(q, bob, 10) - assert.Equal(t, int64(2), q.Size()) - - requireEnqueue(q, fromBob[1], 0) - requireEnqueue(q, fromBob[2], 0) - assertLargestNonce(q, bob, 12) - assert.Equal(t, int64(4), q.Size()) - - requireEnqueue(q, fromAlice[1], 0) - requireEnqueue(q, fromAlice[2], 0) - assertLargestNonce(q, alice, 2) - assert.Equal(t, int64(6), q.Size()) - - msg := requireRemoveNext(q, alice, 0) - assert.Equal(t, fromAlice[0], msg) - assert.Equal(t, int64(5), q.Size()) - - msg = requireRemoveNext(q, bob, 10) - assert.Equal(t, fromBob[0], msg) - assert.Equal(t, int64(4), q.Size()) - - q.Clear(ctx, bob) - assertLargestNonce(q, alice, 2) - assertNoNonce(q, bob) - assert.Equal(t, int64(2), q.Size()) - }) - - t.Run("expire before stamp", func(t *testing.T) { - fromAlice := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 0), - mm.NewSignedMessage(alice, 1), - } - fromBob := []*types.SignedMessage{ - mm.NewSignedMessage(bob, 10), - mm.NewSignedMessage(bob, 11), - } - q := message.NewQueue() - - requireEnqueue(q, fromAlice[0], 100) - requireEnqueue(q, fromAlice[1], 101) - requireEnqueue(q, fromBob[0], 200) - requireEnqueue(q, fromBob[1], 201) - - assert.Equal(t, &message.Queued{Msg: fromAlice[0], Stamp: 100}, q.List(alice)[0]) - assert.Equal(t, &message.Queued{Msg: fromBob[0], Stamp: 200}, q.List(bob)[0]) - - expired := q.ExpireBefore(ctx, 0) - assert.Empty(t, expired) - - expired = q.ExpireBefore(ctx, 100) - assert.Empty(t, expired) - - // Alice's whole queue expires as soon as the first one does - expired = q.ExpireBefore(ctx, 101) - assert.Equal(t, map[address.Address][]*types.SignedMessage{ - alice: {fromAlice[0], fromAlice[1]}, - }, expired) - - assert.Empty(t, q.List(alice)) - assertNoNonce(q, alice) - assert.Equal(t, &message.Queued{Msg: fromBob[0], Stamp: 200}, q.List(bob)[0]) - assertLargestNonce(q, bob, 11) - - expired = q.ExpireBefore(ctx, 300) - assert.Equal(t, map[address.Address][]*types.SignedMessage{ - bob: {fromBob[0], fromBob[1]}, - }, expired) - - assert.Empty(t, q.List(bob)) - assertNoNonce(q, bob) - }) - - t.Run("oldest is correct", func(t *testing.T) { - fromAlice := []*types.SignedMessage{ - mm.NewSignedMessage(alice, 0), - mm.NewSignedMessage(alice, 1), - } - fromBob := []*types.SignedMessage{ - mm.NewSignedMessage(bob, 10), - mm.NewSignedMessage(bob, 11), - } - q := message.NewQueue() - - assert.Equal(t, uint64(0), q.Oldest()) - - requireEnqueue(q, fromAlice[0], 100) - assert.Equal(t, uint64(100), q.Oldest()) - - requireEnqueue(q, fromAlice[1], 101) - assert.Equal(t, uint64(100), q.Oldest()) - - requireEnqueue(q, fromBob[0], 99) - assert.Equal(t, uint64(99), q.Oldest()) - - requireEnqueue(q, fromBob[1], 1) - assert.Equal(t, uint64(1), q.Oldest()) - - }) -} diff --git a/internal/pkg/message/testing.go b/internal/pkg/message/testing.go deleted file mode 100644 index f9157fce06..0000000000 --- a/internal/pkg/message/testing.go +++ /dev/null @@ -1,128 +0,0 @@ -package message - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/pkg/errors" - "github.com/stretchr/testify/require" - "golang.org/x/xerrors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" -) - -// FakeProvider is a chain and actor provider for testing. -// The provider extends a chain.Builder for providing tipsets and maintains an explicit head CID. -// The provider can provide an actor for a single (head, address) pair. -type FakeProvider struct { - *chain.Builder - t *testing.T - - head block.TipSetKey // Provided by GetHead and expected by others - actors map[address.Address]*actor.Actor -} - -// NewFakeProvider creates a new builder and wraps with a provider. -// The builder may be accessed by `provider.Builder`. -func NewFakeProvider(t *testing.T) *FakeProvider { - builder := chain.NewBuilder(t, address.Address{}) - return &FakeProvider{ - Builder: builder, - t: t, - actors: make(map[address.Address]*actor.Actor)} -} - -// GetHead returns the head tipset key. -func (p *FakeProvider) GetHead() block.TipSetKey { - return p.head -} - -// Head fulfills the ChainReaderAPI interface -func (p *FakeProvider) Head() block.TipSetKey { - return p.GetHead() -} - -// GetActorAt returns the actor corresponding to (key, addr) if they match those last set. -func (p *FakeProvider) GetActorAt(ctx context.Context, key block.TipSetKey, addr address.Address) (*actor.Actor, error) { - if !key.Equals(p.head) { - return nil, errors.Errorf("No such tipset %s, expected %s", key, p.head) - } - a, ok := p.actors[addr] - if !ok { - return nil, xerrors.Errorf("No such address %s", addr.String()) - } - return a, nil -} - -// SetHead sets the head tipset -func (p *FakeProvider) SetHead(head block.TipSetKey) { - _, e := p.GetTipSet(head) - require.NoError(p.t, e) - p.head = head -} - -// SetActor sets an actor to be mocked on chain -func (p *FakeProvider) SetActor(addr address.Address, act *actor.Actor) { - p.actors[addr] = act -} - -// SetHeadAndActor sets the head tipset, along with the from address and actor to be provided. -func (p *FakeProvider) SetHeadAndActor(t *testing.T, head block.TipSetKey, addr address.Address, actor *actor.Actor) { - p.SetHead(head) - p.SetActor(addr, actor) -} - -// MockPublisher is a publisher which just stores the last message published. -type MockPublisher struct { - ReturnError error // Error to be returned by Publish() - Message *types.SignedMessage // Message received by Publish() - Height abi.ChainEpoch // Height received by Publish() - Bcast bool // was this broadcast? -} - -// Publish records the message etc for subsequent inspection. -func (p *MockPublisher) Publish(ctx context.Context, message *types.SignedMessage, height abi.ChainEpoch, bcast bool) error { - p.Message = message - p.Height = height - p.Bcast = bcast - return p.ReturnError -} - -// FakeValidator is a validator which configurably accepts or rejects messages. -type FakeValidator struct { - RejectMessages bool -} - -// Validate returns an error only if `RejectMessages` is true. -func (v FakeValidator) ValidateSignedMessageSyntax(ctx context.Context, msg *types.SignedMessage) error { - if v.RejectMessages { - return errors.New("rejected for testing") - } - return nil -} - -// NullPolicy is a policy that does nothing. -type NullPolicy struct { -} - -// HandleNewHead does nothing. -func (NullPolicy) HandleNewHead(ctx context.Context, target PolicyTarget, oldChain, newChain []block.TipSet) error { - return nil -} - -// MockNetworkPublisher records the last message published. -type MockNetworkPublisher struct { - Data []byte -} - -// Publish records the topic and message. -func (p *MockNetworkPublisher) Publish(ctx context.Context, data []byte) error { - p.Data = data - return nil -} diff --git a/internal/pkg/message/util.go b/internal/pkg/message/util.go deleted file mode 100644 index 4d4c11ff84..0000000000 --- a/internal/pkg/message/util.go +++ /dev/null @@ -1,15 +0,0 @@ -package message - -import ( - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" -) - -// chainProvider provides chain access for updating the message pool in response to new heads. -type chainProvider interface { - // The TipSetProvider is used only for counting non-null tipsets when expiring messages. We could remove - // this dependency if expiration was based on round number, or if this object maintained a short - // list of non-empty tip heights. - chain.TipSetProvider - GetHead() block.TipSetKey -} diff --git a/internal/pkg/metrics/export.go b/internal/pkg/metrics/export.go deleted file mode 100644 index a93d5e1475..0000000000 --- a/internal/pkg/metrics/export.go +++ /dev/null @@ -1,85 +0,0 @@ -package metrics - -import ( - "net/http" - "time" - - "contrib.go.opencensus.io/exporter/jaeger" - "contrib.go.opencensus.io/exporter/prometheus" - ma "github.com/multiformats/go-multiaddr" - manet "github.com/multiformats/go-multiaddr-net" - prom "github.com/prometheus/client_golang/prometheus" - "go.opencensus.io/stats/view" - "go.opencensus.io/trace" - - "github.com/filecoin-project/go-filecoin/internal/pkg/config" -) - -// RegisterPrometheusEndpoint registers and serves prometheus metrics -func RegisterPrometheusEndpoint(cfg *config.MetricsConfig) error { - if !cfg.PrometheusEnabled { - return nil - } - - // validate config values and marshal to types - interval, err := time.ParseDuration(cfg.ReportInterval) - if err != nil { - log.Errorf("invalid metrics interval: %s", err) - return err - } - - promma, err := ma.NewMultiaddr(cfg.PrometheusEndpoint) - if err != nil { - return err - } - - _, promAddr, err := manet.DialArgs(promma) - if err != nil { - return err - } - - // setup prometheus - registry := prom.NewRegistry() - pe, err := prometheus.NewExporter(prometheus.Options{ - Namespace: "filecoin", - Registry: registry, - }) - if err != nil { - return err - } - - view.RegisterExporter(pe) - view.SetReportingPeriod(interval) - - go func() { - mux := http.NewServeMux() - mux.Handle("/metrics", pe) - if err := http.ListenAndServe(promAddr, mux); err != nil { - log.Errorf("failed to serve /metrics endpoint on %v", err) - } - }() - - return nil -} - -// RegisterJaeger registers the jaeger endpoint with opencensus and names the -// tracer `name`. -func RegisterJaeger(name string, cfg *config.TraceConfig) error { - if !cfg.JaegerTracingEnabled { - return nil - } - je, err := jaeger.NewExporter(jaeger.Options{ - CollectorEndpoint: cfg.JaegerEndpoint, - Process: jaeger.Process{ - ServiceName: name, - }, - }) - if err != nil { - return err - } - - trace.RegisterExporter(je) - trace.ApplyConfig(trace.Config{DefaultSampler: trace.ProbabilitySampler(cfg.ProbabilitySampler)}) - - return nil -} diff --git a/internal/pkg/metrics/heartbeat_test.go b/internal/pkg/metrics/heartbeat_test.go deleted file mode 100644 index 66dd3e404e..0000000000 --- a/internal/pkg/metrics/heartbeat_test.go +++ /dev/null @@ -1,205 +0,0 @@ -package metrics_test - -import ( - "context" - "crypto/rand" - "encoding/json" - "fmt" - "testing" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-address" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/ipfs/go-cid" - "github.com/libp2p/go-libp2p" - "github.com/libp2p/go-libp2p-core/crypto" - "github.com/libp2p/go-libp2p-core/host" - net "github.com/libp2p/go-libp2p-core/network" - ma "github.com/multiformats/go-multiaddr" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" -) - -var testCid cid.Cid - -func init() { - c, err := cid.Decode("Qmd52WKRSwrBK5gUaJKawryZQ5by6UbNB8KVW2Zy6JtbyW") - if err != nil { - panic(err) - } - testCid = c -} - -type endpoint struct { - Host host.Host - Address string -} - -func newEndpoint(t *testing.T, port int) endpoint { - priv, _, err := crypto.GenerateKeyPairWithReader(crypto.RSA, 2048, rand.Reader) - if err != nil { - t.Fatal(err) - } - opts := []libp2p.Option{ - libp2p.DisableRelay(), - libp2p.ListenAddrStrings(fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", port)), - libp2p.Identity(priv), - } - - basicHost, err := libp2p.New(context.Background(), opts...) - if err != nil { - t.Fatal(err) - } - - // Build host multiaddress - hostAddr, _ := ma.NewMultiaddr(fmt.Sprintf("/ipfs/%s", basicHost.ID().Pretty())) - - // Now we can build a full multiaddress to reach this host - // by encapsulating both addresses: - addr := basicHost.Addrs()[0] - fullAddr := addr.Encapsulate(hostAddr) - - return endpoint{ - Host: basicHost, - Address: fullAddr.String(), - } -} - -func TestHeartbeatConnectSuccess(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - aggregator := newEndpoint(t, 0) - filecoin := newEndpoint(t, 0) - aggregator.Host.SetStreamHandler(metrics.HeartbeatProtocol, func(c net.Stream) { - }) - - hbs := metrics.NewHeartbeatService( - filecoin.Host, - testCid, - &config.HeartbeatConfig{ - BeatTarget: aggregator.Address, - BeatPeriod: "3s", - ReconnectPeriod: "10s", - Nickname: "BobHoblaw", - }, - func() (block.TipSet, error) { - tipSet := chain.NewBuilder(t, address.Undef).NewGenesis() - return tipSet, nil - }, - ) - - assert.Equal(t, 1, len(aggregator.Host.Peerstore().Peers())) - assert.Contains(t, aggregator.Host.Peerstore().Peers(), aggregator.Host.ID()) - assert.NoError(t, hbs.Connect(ctx)) - assert.Equal(t, 2, len(aggregator.Host.Peerstore().Peers())) - assert.Contains(t, aggregator.Host.Peerstore().Peers(), aggregator.Host.ID()) - assert.Contains(t, aggregator.Host.Peerstore().Peers(), filecoin.Host.ID()) -} - -func TestHeartbeatConnectFailure(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - filecoin := newEndpoint(t, 60001) - - hbs := metrics.NewHeartbeatService( - filecoin.Host, - testCid, - &config.HeartbeatConfig{ - BeatTarget: "", - BeatPeriod: "3s", - ReconnectPeriod: "10s", - Nickname: "BobHoblaw", - }, - func() (block.TipSet, error) { - tipSet := chain.NewBuilder(t, address.Undef).NewGenesis() - return tipSet, nil - }, - ) - assert.Error(t, hbs.Connect(ctx)) -} - -func TestHeartbeatRunSuccess(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - // we will use this to stop the run method after making assertions - runCtx, cancel := context.WithCancel(ctx) - - // port 0 to avoid conflicts - aggregator := newEndpoint(t, 0) - filecoin := newEndpoint(t, 0) - - // create a tipset, we will assert on it in the SetStreamHandler method - expHeight := abi.ChainEpoch(444) - expTs := mustMakeTipset(t, expHeight) - - addr, err := address.NewSecp256k1Address([]byte("miner address")) - require.NoError(t, err) - - // The handle method will run the assertions for the test - aggregator.Host.SetStreamHandler(metrics.HeartbeatProtocol, func(s net.Stream) { - defer func() { - require.NoError(t, s.Close()) - }() - - dec := json.NewDecoder(s) - var hb metrics.Heartbeat - require.NoError(t, dec.Decode(&hb)) - - assert.Equal(t, expTs.String(), hb.Head) - assert.Equal(t, abi.ChainEpoch(444), hb.Height) - assert.Equal(t, "BobHoblaw", hb.Nickname) - assert.Equal(t, addr, hb.MinerAddress) - cancel() - }) - - hbs := metrics.NewHeartbeatService( - filecoin.Host, - testCid, - &config.HeartbeatConfig{ - BeatTarget: aggregator.Address, - BeatPeriod: "1s", - ReconnectPeriod: "1s", - Nickname: "BobHoblaw", - }, - func() (block.TipSet, error) { - return expTs, nil - }, - metrics.WithMinerAddressGetter(func() address.Address { - return addr - }), - ) - - require.NoError(t, hbs.Connect(ctx)) - - assert.NoError(t, hbs.Run(runCtx)) - assert.Error(t, runCtx.Err(), context.Canceled.Error()) -} - -func mustMakeTipset(t *testing.T, height abi.ChainEpoch) block.TipSet { - ts, err := block.NewTipSet(&block.Block{ - Miner: vmaddr.NewForTestGetter()(), - Ticket: block.Ticket{VRFProof: []byte{0}}, - Parents: block.TipSetKey{}, - ParentWeight: fbig.Zero(), - Height: height, - MessageReceipts: e.NewCid(types.EmptyMessagesCID), - Messages: e.NewCid(types.EmptyTxMetaCID), - }) - if err != nil { - t.Fatal(err) - } - return ts -} diff --git a/internal/pkg/mining/block_generate.go b/internal/pkg/mining/block_generate.go deleted file mode 100644 index 7aa23ce400..0000000000 --- a/internal/pkg/mining/block_generate.go +++ /dev/null @@ -1,202 +0,0 @@ -package mining - -// Block generation is part of the logic of the DefaultWorker. -// 'generate' is that function that actually creates a new block from a base -// TipSet using the DefaultWorker's many utilities. - -import ( - "context" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/pkg/errors" - - bls "github.com/filecoin-project/filecoin-ffi" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// Generate returns a new block created from the messages in the pool. -func (w *DefaultWorker) Generate( - ctx context.Context, - baseTipSet block.TipSet, - ticket block.Ticket, - electionProof crypto.VRFPi, - nullBlockCount abi.ChainEpoch, - posts []block.PoStProof, - drandEntries []*drand.Entry, -) (*FullBlock, error) { - - generateTimer := time.Now() - defer func() { - log.Infof("[TIMER] DefaultWorker.Generate baseTipset: %s - elapsed time: %s", baseTipSet.String(), time.Since(generateTimer).Round(time.Millisecond)) - }() - - weight, err := w.getWeight(ctx, baseTipSet) - if err != nil { - return nil, errors.Wrap(err, "get weight") - } - - baseHeight, err := baseTipSet.Height() - if err != nil { - return nil, errors.Wrap(err, "get base tip set height") - } - - blockHeight := baseHeight + nullBlockCount + 1 - - // Construct list of message candidates for inclusion. - // These messages will be processed, and those that fail excluded from the block. - pending := w.messageSource.Pending() - mq := NewMessageQueue(pending) - candidateMsgs := orderMessageCandidates(mq.Drain(block.BlockMessageLimit)) - candidateMsgs = w.filterPenalizableMessages(ctx, candidateMsgs) - if len(candidateMsgs) > block.BlockMessageLimit { - return nil, errors.Errorf("too many messages returned from mq.Drain: %d", len(candidateMsgs)) - } - - var blsAccepted []*types.SignedMessage - var secpAccepted []*types.SignedMessage - - // Align the results with the candidate signed messages to accumulate the messages lists - // to include in the block, and handle failed messages. - for _, msg := range candidateMsgs { - if msg.Message.From.Protocol() == address.BLS { - blsAccepted = append(blsAccepted, msg) - } else { - secpAccepted = append(secpAccepted, msg) - } - } - - // Create an aggregage signature for messages - unwrappedBLSMessages, blsAggregateSig, err := aggregateBLS(blsAccepted) - if err != nil { - return nil, errors.Wrap(err, "could not aggregate bls messages") - } - - // Persist messages to ipld storage - txMetaCid, err := w.messageStore.StoreMessages(ctx, secpAccepted, unwrappedBLSMessages) - if err != nil { - return nil, errors.Wrap(err, "error persisting messages") - } - - // get tipset state root and receipt root - baseStateRoot, err := w.tsMetadata.GetTipSetStateRoot(baseTipSet.Key()) - if err != nil { - return nil, errors.Wrapf(err, "error retrieving state root for tipset %s", baseTipSet.Key().String()) - } - - baseReceiptRoot, err := w.tsMetadata.GetTipSetReceiptsRoot(baseTipSet.Key()) - if err != nil { - return nil, errors.Wrapf(err, "error retrieving receipt root for tipset %s", baseTipSet.Key().String()) - } - - // Set the block timestamp to be exactly the start of the target epoch, regardless of the current time. - // The real time might actually be much later than this if catching up from a pause in chain progress. - epochStartTime := w.clock.StartTimeOfEpoch(blockHeight) - - if drandEntries == nil { - drandEntries = []*drand.Entry{} - } - - if posts == nil { - posts = []block.PoStProof{} - } - - next := &block.Block{ - Miner: w.minerAddr, - Height: blockHeight, - BeaconEntries: drandEntries, - ElectionProof: &crypto.ElectionProof{VRFProof: electionProof}, - Messages: e.NewCid(txMetaCid), - MessageReceipts: e.NewCid(baseReceiptRoot), - Parents: baseTipSet.Key(), - ParentWeight: weight, - PoStProofs: posts, - StateRoot: e.NewCid(baseStateRoot), - Ticket: ticket, - Timestamp: uint64(epochStartTime.Unix()), - BLSAggregateSig: &blsAggregateSig, - } - - view, err := w.api.PowerStateView(baseTipSet.Key()) - if err != nil { - return nil, errors.Wrapf(err, "failed to read state view") - } - _, workerAddr, err := view.MinerControlAddresses(ctx, w.minerAddr) - if err != nil { - return nil, errors.Wrap(err, "failed to read workerAddr during block generation") - } - workerSigningAddr, err := view.AccountSignerAddress(ctx, workerAddr) - if err != nil { - return nil, errors.Wrap(err, "failed to convert worker address to signing address") - } - blockSig, err := w.workerSigner.SignBytes(ctx, next.SignatureData(), workerSigningAddr) - if err != nil { - return nil, errors.Wrap(err, "failed to sign block") - } - next.BlockSig = &blockSig - - return NewfullBlock(next, blsAccepted, secpAccepted), nil -} - -// The resulting output is not empty: it has either a block or an error. - -func aggregateBLS(blsMessages []*types.SignedMessage) ([]*types.UnsignedMessage, crypto.Signature, error) { - var sigs []bls.Signature - var unwrappedMsgs []*types.UnsignedMessage - for _, msg := range blsMessages { - // unwrap messages - unwrappedMsgs = append(unwrappedMsgs, &msg.Message) - if msg.Signature.Type != crypto.SigTypeBLS { - return []*types.UnsignedMessage{}, crypto.Signature{}, errors.New("non-BLS message signature") - } - // store message signature as bls signature - blsSig := bls.Signature{} - copy(blsSig[:], msg.Signature.Data) - sigs = append(sigs, blsSig) - } - blsAggregateSig := bls.Aggregate(sigs) - if blsAggregateSig == nil { - return []*types.UnsignedMessage{}, crypto.Signature{}, errors.New("could not aggregate signatures") - } - - return unwrappedMsgs, crypto.Signature{ - Type: crypto.SigTypeBLS, - Data: blsAggregateSig[:], - }, nil - -} - -// When a block is validated, BLS messages are processed first, so for simplicity all BLS -// messages are considered first here too. -func orderMessageCandidates(messages []*types.SignedMessage) []*types.SignedMessage { - blsMessages := []*types.SignedMessage{} - secpMessages := []*types.SignedMessage{} - - for _, m := range messages { - if m.Message.From.Protocol() == address.BLS { - blsMessages = append(blsMessages, m) - } else { - secpMessages = append(secpMessages, m) - } - } - return append(blsMessages, secpMessages...) -} - -func (w *DefaultWorker) filterPenalizableMessages(ctx context.Context, messages []*types.SignedMessage) []*types.SignedMessage { - var goodMessages []*types.SignedMessage - for _, msg := range messages { - err := w.penaltyChecker.PenaltyCheck(ctx, &msg.Message) - if err != nil { - mCid, _ := msg.Cid() - log.Debugf("Msg: %s excluded in block because penalized with err %s", mCid, err) - continue - } - goodMessages = append(goodMessages, msg) - } - return goodMessages -} diff --git a/internal/pkg/mining/mqueue.go b/internal/pkg/mining/mqueue.go deleted file mode 100644 index 9f21933008..0000000000 --- a/internal/pkg/mining/mqueue.go +++ /dev/null @@ -1,125 +0,0 @@ -package mining - -import ( - "bytes" - "container/heap" - "sort" - - "github.com/filecoin-project/go-address" - specsbig "github.com/filecoin-project/specs-actors/actors/abi/big" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// MessageQueue is a priority queue of messages from different actors. Messages are ordered -// by decreasing gas price, subject to the constraint that messages from a single actor are -// always in increasing nonce order. -// All messages for a queue are inserted at construction, after which messages may only -// be popped. -// Potential improvements include: -// - deprioritising messages after a gap in nonce value, which can never be mined (see Ethereum) -// - attempting to pack messages into a fixed gas limit (i.e. 0/1 knapsack subject to nonce ordering), -// see https://en.wikipedia.org/wiki/Knapsack_problem -type MessageQueue struct { - // A heap of nonce-ordered queues, one per sender. - senderQueues queueHeap -} - -// NewMessageQueue allocates and initializes a message queue. -func NewMessageQueue(msgs []*types.SignedMessage) MessageQueue { - // Group messages by sender. - bySender := make(map[address.Address]nonceQueue) - for _, m := range msgs { - bySender[m.Message.From] = append(bySender[m.Message.From], m) - } - - // Order each sender queue by nonce and initialize heap structure. - addrHeap := make(queueHeap, len(bySender)) - heapIdx := 0 - for _, nq := range bySender { - sort.Slice(nq, func(i, j int) bool { return nq[i].Message.CallSeqNum < nq[j].Message.CallSeqNum }) - addrHeap[heapIdx] = nq - heapIdx++ - } - heap.Init(&addrHeap) - - return MessageQueue{addrHeap} -} - -// Empty tests whether the queue is empty. -func (mq *MessageQueue) Empty() bool { - return len(mq.senderQueues) == 0 -} - -// Pop removes and returns the next message from the queue, returning (nil, false) if none remain. -func (mq *MessageQueue) Pop() (*types.SignedMessage, bool) { - if len(mq.senderQueues) == 0 { - return nil, false - } - // Select actor with best gas price. - bestQueue := &mq.senderQueues[0] - - // Pop first message off that actor's queue - msg := (*bestQueue)[0] - if len(*bestQueue) == 1 { - // If the actor's queue will become empty, remove it from the heap. - heap.Pop(&mq.senderQueues) - } else { - // If the actor's queue still has elements, remove the first and relocate the queue in the heap - // according to the gas price of its next message. - *bestQueue = (*bestQueue)[1:] - heap.Fix(&mq.senderQueues, 0) - } - return msg, true -} - -// Drain removes and returns all messages in a slice. If max is < 0 returns all -func (mq *MessageQueue) Drain(nToPop int) []*types.SignedMessage { - var out []*types.SignedMessage - for msg, hasMore := mq.Pop(); hasMore; msg, hasMore = mq.Pop() { - if nToPop == 0 { - break - } - nToPop-- - out = append(out, msg) - } - return out -} - -// A slice of messages ordered by CallSeqNum (for a single sender). -type nonceQueue []*types.SignedMessage - -// Implements heap.Interface to hold a priority queue of nonce-ordered queues, one per sender. -// Heap priority is given by the gas price of the first message for each queue. -// Each sender queue is expected to be ordered by increasing nonce. -// Implementation is simplified from https://golang.org/pkg/container/heap/#example__priorityQueue. -type queueHeap []nonceQueue - -func (pq queueHeap) Len() int { return len(pq) } - -// Less implements Heap.Interface.Less to compare items on gas price and sender address. -func (pq queueHeap) Less(i, j int) bool { - delta := specsbig.Sub(pq[i][0].Message.GasPrice, pq[j][0].Message.GasPrice) - if !delta.IsZero() { - // We want Pop to give us the highest gas price, so use GreaterThan. - return delta.GreaterThan(types.ZeroAttoFIL) - } - // Secondarily order by address to give a stable ordering. - return bytes.Compare(pq[i][0].Message.From.Bytes(), pq[j][0].Message.From.Bytes()) < 0 -} - -func (pq queueHeap) Swap(i, j int) { - pq[i], pq[j] = pq[j], pq[i] -} - -func (pq *queueHeap) Push(x interface{}) { - item := x.(nonceQueue) - *pq = append(*pq, item) -} - -func (pq *queueHeap) Pop() interface{} { - n := len(*pq) - item := (*pq)[n-1] - *pq = (*pq)[0 : n-1] - return item -} diff --git a/internal/pkg/mining/mqueue_test.go b/internal/pkg/mining/mqueue_test.go deleted file mode 100644 index b78aa9893d..0000000000 --- a/internal/pkg/mining/mqueue_test.go +++ /dev/null @@ -1,119 +0,0 @@ -package mining - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -func TestMessageQueueOrder(t *testing.T) { - tf.UnitTest(t) - - var ki = types.MustGenerateKeyInfo(10, 42) - var mockSigner = types.NewMockSigner(ki) - - a0 := mockSigner.Addresses[0] - a1 := mockSigner.Addresses[2] - a2 := mockSigner.Addresses[3] - to := mockSigner.Addresses[9] - - sign := func(from address.Address, to address.Address, nonce uint64, units uint64, price int64) *types.SignedMessage { - msg := types.UnsignedMessage{ - From: from, - To: to, - CallSeqNum: nonce, - GasPrice: types.NewGasPrice(price), - GasLimit: gas.NewGas(int64(units)), - } - s, err := types.NewSignedMessage(context.TODO(), msg, &mockSigner) - require.NoError(t, err) - return s - } - - t.Run("empty", func(t *testing.T) { - q := NewMessageQueue([]*types.SignedMessage{}) - assert.True(t, q.Empty()) - msg, ok := q.Pop() - assert.Nil(t, msg) - assert.False(t, ok) - }) - - t.Run("orders by nonce", func(t *testing.T) { - msgs := []*types.SignedMessage{ - // Msgs from a0 are in increasing order. - // Msgs from a1 are in decreasing order. - // Msgs from a2 are out of order. - // Messages from different signers are interleaved. - sign(a0, to, 0, 0, 0), - sign(a1, to, 15, 0, 0), - sign(a2, to, 5, 0, 0), - - sign(a0, to, 1, 0, 0), - sign(a1, to, 2, 0, 0), - sign(a2, to, 7, 0, 0), - - sign(a0, to, 20, 0, 0), - sign(a1, to, 1, 0, 0), - sign(a2, to, 1, 0, 0), - } - - q := NewMessageQueue(msgs) - - lastFromAddr := make(map[address.Address]uint64) - for msg, more := q.Pop(); more == true; msg, more = q.Pop() { - last, seen := lastFromAddr[msg.Message.From] - if seen { - assert.True(t, last <= msg.Message.CallSeqNum) - } - lastFromAddr[msg.Message.From] = msg.Message.CallSeqNum - } - assert.True(t, q.Empty()) - }) - - t.Run("orders by gas price", func(t *testing.T) { - msgs := []*types.SignedMessage{ - sign(a0, to, 0, 0, 2), - sign(a1, to, 0, 0, 3), - sign(a2, to, 0, 0, 1), - } - q := NewMessageQueue(msgs) - expected := []*types.SignedMessage{msgs[1], msgs[0], msgs[2]} - actual := q.Drain(-1) - assert.Equal(t, expected, actual) - assert.True(t, q.Empty()) - }) - - t.Run("nonce overrides gas price", func(t *testing.T) { - msgs := []*types.SignedMessage{ - sign(a0, to, 0, 0, 1), - sign(a0, to, 1, 0, 3), // More valuable but must come after previous message from a0 - sign(a2, to, 0, 0, 2), - } - expected := []*types.SignedMessage{msgs[2], msgs[0], msgs[1]} - - q := NewMessageQueue(msgs) - actual := q.Drain(-1) - assert.Equal(t, expected, actual) - assert.True(t, q.Empty()) - }) - - t.Run("only take as many as specified", func(t *testing.T) { - msgs := []*types.SignedMessage{ - sign(a0, to, 0, 0, 2), - sign(a1, to, 0, 0, 3), - sign(a2, to, 0, 0, 1), - } - q := NewMessageQueue(msgs) - expected := []*types.SignedMessage{msgs[1]} - actual := q.Drain(1) - assert.Equal(t, expected, actual) - assert.False(t, q.Empty()) - }) -} diff --git a/internal/pkg/mining/scheduler.go b/internal/pkg/mining/scheduler.go deleted file mode 100644 index 31263962c1..0000000000 --- a/internal/pkg/mining/scheduler.go +++ /dev/null @@ -1,212 +0,0 @@ -package mining - -// The Scheduler listens for new heaviest TipSets and schedules mining work on -// these TipSets. The scheduler is ultimately responsible for informing the -// rest of the system about new blocks mined by the Worker. This is the -// interface to implement if you want to explore an alternate mining strategy. - -import ( - "context" - "sync" - - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// FullBlock is the result of a single mining attempt. It will have a new block header with included messages. -type FullBlock struct { - Header *block.Block - BLSMessages []*types.SignedMessage - SECPMessages []*types.SignedMessage -} - -func NewfullBlock(b *block.Block, BLSMessages, SECPMessages []*types.SignedMessage) *FullBlock { - return &FullBlock{Header: b, BLSMessages: BLSMessages, SECPMessages: SECPMessages} -} - -// Scheduler is the mining interface consumers use. -type Scheduler interface { - Start(miningCtx context.Context) (<-chan FullBlock, *sync.WaitGroup) - IsStarted() bool - Pause() - Continue() -} - -// NewScheduler returns a new timingScheduler to schedule mining work on the -// input worker. -func NewScheduler(w Worker, f func() (block.TipSet, error), c clock.ChainEpochClock) Scheduler { - return &timingScheduler{ - worker: w, - pollHeadFunc: f, - chainClock: c, - } -} - -type timingScheduler struct { - // worker contains the actual mining logic. - worker Worker - // pollHeadFunc is the function the scheduler uses to poll for the - // current heaviest tipset - pollHeadFunc func() (block.TipSet, error) - // chainClock measures time and tracks the epoch-time relationship - chainClock clock.ChainEpochClock - - // mu protects skipping - mu sync.Mutex - // skipping tracks whether we should skip mining - skipping bool - - isStarted bool -} - -// Start starts mining taking in a context. -// It returns a channel for reading mining outputs and a waitgroup for teardown. -// It is the callers responsibility to close the out channel only after waiting -// on the waitgroup. -func (s *timingScheduler) Start(miningCtx context.Context) (<-chan FullBlock, *sync.WaitGroup) { - var doneWg sync.WaitGroup - outCh := make(chan FullBlock, 1) - - // loop mining work - doneWg.Add(1) - go func() { - err := s.mineLoop(miningCtx, outCh) - if err != nil { - log.Errorf("Unrecoverable error in mining loop. Mining stoped: %s", err) - close(outCh) - } - doneWg.Done() - }() - s.isStarted = true - - return outCh, &doneWg -} - -func (s *timingScheduler) mineLoop(ctx context.Context, outCh chan FullBlock) error { - // start on epoch boundary - targetEpoch := s.chainClock.WaitNextEpoch(ctx) - if s.isDone(ctx) { - return nil - } - - // The main event loop for the timing scheduler. - // Waits for a new epoch to start, polls the heaviest head, includes the correct number - // of null blocks and starts a mining job async. - // - // The scheduler will skip mining jobs if the skipping flag is set - for { - // wait for prop delay after epoch start for parent blocks to arrive - s.chainClock.WaitForEpochPropDelay(ctx, targetEpoch) - if s.isDone(ctx) { - return nil - } - - // our target is now the next epoch - targetEpoch++ - - // continue if we are skipping - if s.isSkipping() { - continue - } - - // Check for a new base tipset, and reset null count if one is found. - base, err := s.pollHeadFunc() - if err != nil { - return errors.Wrap(err, "error polling head from mining scheduler") - } - - baseHeight, err := base.Height() - if err != nil { - log.Errorf("error getting height from base", err) - } - - // block time validation should prevent us from seeing a base height than we expect - if baseHeight >= targetEpoch { - log.Errorf("Scheduled target epoch %d is not greater than base height %d", targetEpoch, baseHeight) - } - - // null count is the number of epochs between the one we are mining and the one now. - nullCount := uint64(targetEpoch-baseHeight) - 1 - - // mine now - block, err := s.worker.Mine(ctx, base, nullCount) - if err != nil { - log.Errorf("Mining failed: %s", err) - continue - } - - // wait until target to send - s.chainClock.WaitForEpoch(ctx, targetEpoch) - if s.isDone(ctx) { - return nil - } - - // send block at epoch boundary if we won - if block != nil { - outCh <- *block - } - } -} - -func (s *timingScheduler) isSkipping() bool { - s.mu.Lock() - defer s.mu.Unlock() - return s.skipping -} - -// IsStarted is called when starting mining to tell whether the scheduler should be -// started -func (s *timingScheduler) IsStarted() bool { - return s.isStarted -} - -// Pause is called to pause the scheduler from running mining work -func (s *timingScheduler) Pause() { - s.mu.Lock() - defer s.mu.Unlock() - s.skipping = true -} - -// Continue is called to unpause the scheduler's mining work -func (s *timingScheduler) Continue() { - s.mu.Lock() - defer s.mu.Unlock() - s.skipping = false -} - -// check if context is done. Should be called after every wait. -func (s *timingScheduler) isDone(ctx context.Context) bool { - select { // check for interrupt during waiting - case <-ctx.Done(): - s.isStarted = false - return true - default: - } - return false -} - -// MineOnce mines on a given base until it finds a winner or errors out. -func MineOnce(ctx context.Context, w DefaultWorker, ts block.TipSet) (*FullBlock, error) { - var nullCount uint64 - for { - blk, err := MineOneEpoch(ctx, w, ts, nullCount) - if err != nil { - return nil, err - } - - if blk != nil { - return blk, nil - } - - nullCount++ - } -} - -// MineOneEpoch attempts to mine a block in an epoch and returns the mined block, -// or nil if no block could be mined -func MineOneEpoch(ctx context.Context, w DefaultWorker, ts block.TipSet, nullCount uint64) (*FullBlock, error) { - return w.Mine(ctx, ts, nullCount) -} diff --git a/internal/pkg/mining/scheduler_test.go b/internal/pkg/mining/scheduler_test.go deleted file mode 100644 index 687aa91db2..0000000000 --- a/internal/pkg/mining/scheduler_test.go +++ /dev/null @@ -1,173 +0,0 @@ -package mining_test - -import ( - "context" - "sync" - "testing" - "time" - - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - . "github.com/filecoin-project/go-filecoin/internal/pkg/mining" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -const epochDuration = builtin.EpochDurationSeconds -const propDelay = 6 * time.Second - -// Mining loop unit tests - -func TestWorkerCalled(t *testing.T) { - tf.UnitTest(t) - ts := testHead(t) - - called := make(chan struct{}, 1) - w := NewTestWorker(t, func(_ context.Context, workHead block.TipSet, _ uint64) (*FullBlock, error) { - assert.True(t, workHead.Equals(ts)) - called <- struct{}{} - return nil, nil - }) - - fakeClock, chainClock := clock.NewFakeChain(1234567890, epochDuration, propDelay, 1234567890) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - scheduler := NewScheduler(w, headFunc(ts), chainClock) - scheduler.Start(ctx) - fakeClock.BlockUntil(1) - fakeClock.Advance(epochDuration) - fakeClock.Advance(propDelay) - - <-called -} - -func TestCorrectNullBlocksGivenEpoch(t *testing.T) { - tf.UnitTest(t) - ts := testHead(t) - h, err := ts.Height() - require.NoError(t, err) - - fakeClock, chainClock := clock.NewFakeChain(1234567890, epochDuration, propDelay, 1234567890) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - // Move forward 20 epochs - for i := 0; i < 19; i++ { - fakeClock.Advance(epochDuration) - } - - called := make(chan struct{}, 20) - w := NewTestWorker(t, func(_ context.Context, workHead block.TipSet, nullCount uint64) (*FullBlock, error) { - assert.Equal(t, uint64(h+20), nullCount) - called <- struct{}{} - return nil, nil - }) - - scheduler := NewScheduler(w, headFunc(ts), chainClock) - scheduler.Start(ctx) - fakeClock.BlockUntil(1) - // Move forward 1 epoch for a total of 21 - fakeClock.Advance(epochDuration) - fakeClock.Advance(propDelay) - - <-called -} - -func TestWaitsForEpochStart(t *testing.T) { - // If the scheduler starts partway through an epoch it will wait to mine - // until there is a new epoch boundary - tf.UnitTest(t) - ts := testHead(t) - - fakeClock, chainClock := clock.NewFakeChain(1234567890, epochDuration, propDelay, 1234567890) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - genTime := chainClock.Now() - - var wg sync.WaitGroup - wg.Add(1) - waitGroupDoneCh := make(chan struct{}) - go func() { - wg.Wait() - waitGroupDoneCh <- struct{}{} - }() - - called := make(chan struct{}, 1) - expectMiningCall := false - w := NewTestWorker(t, func(_ context.Context, workHead block.TipSet, _ uint64) (*FullBlock, error) { - if !expectMiningCall { - t.Fatal("mining worker called too early") - } - // This doesn't get called until the clock has advanced to prop delay past epoch - assert.Equal(t, genTime.Add(epochDuration).Add(propDelay), chainClock.Now()) - called <- struct{}{} - return nil, nil - }) - - scheduler := NewScheduler(w, headFunc(ts), chainClock) - scheduler.Start(ctx) - - fakeClock.BlockUntil(1) - expectMiningCall = false - fakeClock.Advance(epochDuration) // advance to epoch start - fakeClock.Advance(propDelay / 2) // advance halfway into prop delay - - // advance past propagation delay in next block and expect worker to be called - fakeClock.BlockUntil(1) - expectMiningCall = true - fakeClock.Advance(propDelay / 2) - <-called -} - -func TestSkips(t *testing.T) { - tf.UnitTest(t) - ts := testHead(t) - - fakeClock, chainClock := clock.NewFakeChain(1234567890, epochDuration, propDelay, 1234567890) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - var wg sync.WaitGroup - wg.Add(1) - w := NewTestWorker(t, func(_ context.Context, workHead block.TipSet, nullCount uint64) (*FullBlock, error) { - // This should never be reached as the first epoch should skip mining - if nullCount == 0 { - t.Fail() - return nil, nil - } - wg.Done() - return nil, nil - }) - - scheduler := NewScheduler(w, headFunc(ts), chainClock) - scheduler.Pause() - scheduler.Start(ctx) - fakeClock.BlockUntil(1) - fakeClock.Advance(epochDuration + propDelay) - fakeClock.BlockUntil(1) - scheduler.Continue() - fakeClock.Advance(epochDuration) - wg.Wait() -} - -// Helper functions - -func testHead(t *testing.T) block.TipSet { - baseBlock := &block.Block{StateRoot: e.NewCid(types.CidFromString(t, "somecid"))} - ts, err := block.NewTipSet(baseBlock) - require.NoError(t, err) - return ts -} - -func headFunc(ts block.TipSet) func() (block.TipSet, error) { - return func() (block.TipSet, error) { - return ts, nil - } -} diff --git a/internal/pkg/mining/testing.go b/internal/pkg/mining/testing.go deleted file mode 100644 index 3493904236..0000000000 --- a/internal/pkg/mining/testing.go +++ /dev/null @@ -1,49 +0,0 @@ -package mining - -import ( - "context" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -type miningFunc func(runCtx context.Context, base block.TipSet, nullBlkCount uint64) (*FullBlock, error) - -// TestWorker is a worker with a customizable work function to facilitate -// easy testing. -type TestWorker struct { - WorkFunc miningFunc - t *testing.T -} - -// Mine is the TestWorker's Work function. It simply calls the WorkFunc -// field. -func (w *TestWorker) Mine(ctx context.Context, ts block.TipSet, nullBlockCount uint64) (*FullBlock, error) { - require.NotNil(w.t, w.WorkFunc) - return w.WorkFunc(ctx, ts, nullBlockCount) -} - -// NewTestWorker creates a worker that calls the provided input -// function when Mine() is called. -func NewTestWorker(t *testing.T, f miningFunc) *TestWorker { - return &TestWorker{ - WorkFunc: f, - t: t, - } -} - -// NthTicket returns a ticket with a vrf proof equal to a byte slice wrapping -// the input uint8 value. -func NthTicket(i uint8) block.Ticket { - return block.Ticket{VRFProof: []byte{i}} -} - -// NoMessageQualifier always returns no error -type NoMessageQualifier struct{} - -func (npc *NoMessageQualifier) PenaltyCheck(_ context.Context, _ *types.UnsignedMessage) error { - return nil -} diff --git a/internal/pkg/mining/worker.go b/internal/pkg/mining/worker.go deleted file mode 100644 index 3167871c8f..0000000000 --- a/internal/pkg/mining/worker.go +++ /dev/null @@ -1,348 +0,0 @@ -package mining - -// The Worker Mines on Input received from a Scheduler. The Worker is -// responsible for generating the necessary proofs, checking for success, -// generating new blocks, and forwarding them out to the wider node. - -import ( - "context" - "time" - - address "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - cid "github.com/ipfs/go-cid" - blockstore "github.com/ipfs/go-ipfs-blockstore" - logging "github.com/ipfs/go-log/v2" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - "github.com/filecoin-project/go-filecoin/internal/pkg/postgenerator" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -var log = logging.Logger("mining") - -// Worker is the interface called by the Scheduler to run the mining work being -// scheduled. -type Worker interface { - Mine(runCtx context.Context, base block.TipSet, nullBlkCount uint64) (*FullBlock, error) -} - -// GetStateTree is a function that gets the aggregate state tree of a TipSet. It's -// its own function to facilitate testing. -type GetStateTree func(context.Context, block.TipSetKey) (state.Tree, error) - -// GetWeight is a function that calculates the weight of a TipSet. Weight is -// expressed as two uint64s comprising a rational number. -type GetWeight func(context.Context, block.TipSet) (big.Int, error) - -// MessageSource provides message candidates for mining into blocks -type MessageSource interface { - // Pending returns a slice of un-mined messages. - Pending() []*types.SignedMessage - // Remove removes a message from the source permanently - Remove(message cid.Cid) -} - -// A MessageApplier processes all the messages in a message pool. -type MessageApplier interface { - // Dragons: add something back or remove -} - -type workerPorcelainAPI interface { - consensus.ChainRandomness - BlockTime() time.Duration - PowerStateView(baseKey block.TipSetKey) (consensus.PowerStateView, error) - FaultsStateView(baseKey block.TipSetKey) (consensus.FaultStateView, error) -} - -type electionUtil interface { - GenerateElectionProof(ctx context.Context, entry *drand.Entry, epoch abi.ChainEpoch, miner address.Address, worker address.Address, signer types.Signer) (crypto.VRFPi, error) - IsWinner(challengeTicket []byte, minerPower, networkPower abi.StoragePower) bool - GenerateWinningPoSt(ctx context.Context, entry *drand.Entry, epoch abi.ChainEpoch, ep postgenerator.PoStGenerator, maddr address.Address, sectors consensus.SectorsStateView) ([]block.PoStProof, error) -} - -// ticketGenerator creates tickets. -type ticketGenerator interface { - MakeTicket(ctx context.Context, base block.TipSetKey, epoch abi.ChainEpoch, miner address.Address, entry *drand.Entry, newPeriod bool, worker address.Address, signer types.Signer) (block.Ticket, error) -} - -type tipSetMetadata interface { - GetTipSetStateRoot(key block.TipSetKey) (cid.Cid, error) - GetTipSetReceiptsRoot(key block.TipSetKey) (cid.Cid, error) -} - -type messageMessageQualifier interface { - PenaltyCheck(ctx context.Context, msg *types.UnsignedMessage) error -} - -// DefaultWorker runs a mining job. -type DefaultWorker struct { - api workerPorcelainAPI - - minerAddr address.Address - minerOwnerAddr address.Address - workerSigner types.Signer - - tsMetadata tipSetMetadata - getStateTree GetStateTree - getWeight GetWeight - election electionUtil - ticketGen ticketGenerator - messageSource MessageSource - penaltyChecker messageMessageQualifier - messageStore chain.MessageWriter // nolint: structcheck - blockstore blockstore.Blockstore - clock clock.ChainEpochClock - poster postgenerator.PoStGenerator - chainState chain.TipSetProvider - drand drand.IFace -} - -// WorkerParameters use for NewDefaultWorker parameters -type WorkerParameters struct { - API workerPorcelainAPI - - MinerAddr address.Address - MinerOwnerAddr address.Address - WorkerSigner types.Signer - - // consensus things - TipSetMetadata tipSetMetadata - GetStateTree GetStateTree - MessageQualifier messageMessageQualifier - GetWeight GetWeight - Election electionUtil - TicketGen ticketGenerator - Drand drand.IFace - - // core filecoin things - MessageSource MessageSource - MessageStore chain.MessageWriter - Blockstore blockstore.Blockstore - Clock clock.ChainEpochClock - Poster postgenerator.PoStGenerator - ChainState chain.TipSetProvider -} - -// NewDefaultWorker instantiates a new Worker. -func NewDefaultWorker(parameters WorkerParameters) *DefaultWorker { - return &DefaultWorker{ - api: parameters.API, - getStateTree: parameters.GetStateTree, - getWeight: parameters.GetWeight, - messageSource: parameters.MessageSource, - messageStore: parameters.MessageStore, - penaltyChecker: parameters.MessageQualifier, - blockstore: parameters.Blockstore, - minerAddr: parameters.MinerAddr, - minerOwnerAddr: parameters.MinerOwnerAddr, - workerSigner: parameters.WorkerSigner, - election: parameters.Election, - ticketGen: parameters.TicketGen, - tsMetadata: parameters.TipSetMetadata, - clock: parameters.Clock, - poster: parameters.Poster, - chainState: parameters.ChainState, - drand: parameters.Drand, - } -} - -// Mine implements the DefaultWorkers main mining function.. -// The returned bool indicates if this miner created a new block or not. -func (w *DefaultWorker) Mine(ctx context.Context, base block.TipSet, nullBlkCount uint64) (*FullBlock, error) { - log.Info("Worker.Mine") - if !base.Defined() { - log.Warn("Worker.Mine returning because it can't mine on an empty tipset") - return nil, errors.New("bad input tipset with no blocks sent to Mine()") - } - baseEpoch, err := base.Height() - if err != nil { - log.Warnf("Worker.Mine couldn't read base height %s", err) - return nil, err - } - currEpoch := baseEpoch + abi.ChainEpoch(1) + abi.ChainEpoch(nullBlkCount) - - log.Debugf("Mining on tipset %s, at epoch %d with %d null blocks.", base.String(), baseEpoch, nullBlkCount) - if ctx.Err() != nil { - log.Warnf("Worker.Mine returning with ctx error %s", ctx.Err().Error()) - return nil, ctx.Err() - } - - // Read uncached worker address - keyView, err := w.api.PowerStateView(base.Key()) - if err != nil { - return nil, err - } - _, workerAddr, err := keyView.MinerControlAddresses(ctx, w.minerAddr) - if err != nil { - return nil, err - } - - // Look-back for the election ticket. - // The parameter is interpreted as: lookback=1 means parent tipset. Subtract one here because the base from - // which the lookback is counted is already the parent, rather than "current" tipset. - // The sampling code will handle this underflowing past the genesis. - lookbackEpoch := currEpoch - miner.ElectionLookback - - workerSignerAddr, err := keyView.AccountSignerAddress(ctx, workerAddr) - if err != nil { - return nil, err - } - - drandEntries, err := w.drandEntriesForEpoch(ctx, base, nullBlkCount) - if err != nil { - log.Errorf("Worker.Mine failed to collect drand entries for block %s", err) - return nil, err - } - - // Determine if we've won election - electionEntry, err := w.electionEntry(ctx, base, drandEntries) - if err != nil { - log.Errorf("Worker.Mine failed to calculate drand entry for election randomness %s", err) - return nil, err - } - - newPeriod := len(drandEntries) > 0 - nextTicket, err := w.ticketGen.MakeTicket(ctx, base.Key(), lookbackEpoch, w.minerAddr, electionEntry, newPeriod, workerSignerAddr, w.workerSigner) - if err != nil { - log.Warnf("Worker.Mine couldn't generate next ticket %s", err) - return nil, err - } - - electionVRFProof, err := w.election.GenerateElectionProof(ctx, electionEntry, currEpoch, w.minerAddr, workerSignerAddr, w.workerSigner) - if err != nil { - log.Errorf("Worker.Mine failed to generate electionVRFProof %s", err) - } - electionVRFDigest := electionVRFProof.Digest() - electionPowerAncestor, err := w.lookbackTipset(ctx, base, nullBlkCount, consensus.ElectionPowerTableLookback) - if err != nil { - log.Errorf("Worker.Mine couldn't get ancestor tipset: %s", err.Error()) - return nil, err - } - electionPowerTable, err := w.getPowerTable(electionPowerAncestor.Key(), base.Key()) - if err != nil { - log.Errorf("Worker.Mine couldn't get snapshot for tipset: %s", err.Error()) - return nil, err - } - networkPower, err := electionPowerTable.NetworkTotalPower(ctx) - if err != nil { - log.Errorf("failed to get network power: %s", err) - return nil, err - } - minerPower, err := electionPowerTable.MinerClaimedPower(ctx, w.minerAddr) - if err != nil { - log.Errorf("failed to get power claim for miner: %s", err) - return nil, err - } - wins := w.election.IsWinner(electionVRFDigest[:], minerPower, networkPower) - if !wins { - // no winners we are done - return nil, nil - } - - // we have a winning block - sectorSetAncestor, err := w.lookbackTipset(ctx, base, nullBlkCount, consensus.WinningPoStSectorSetLookback) - if err != nil { - log.Errorf("Worker.Mine couldn't get ancestor tipset: %s", err.Error()) - return nil, err - } - sectorStateView, err := w.api.PowerStateView(sectorSetAncestor.Key()) - if err != nil { - log.Errorf("Worker.Mine couldn't get snapshot for tipset: %s", err.Error()) - return nil, err - } - - posts, err := w.election.GenerateWinningPoSt(ctx, electionEntry, currEpoch, w.poster, w.minerAddr, sectorStateView) - if err != nil { - log.Warnf("Worker.Mine failed to generate post") - return nil, err - } - - return w.Generate(ctx, base, nextTicket, electionVRFProof, abi.ChainEpoch(nullBlkCount), posts, drandEntries) -} - -func (w *DefaultWorker) getPowerTable(powerKey, faultsKey block.TipSetKey) (consensus.PowerTableView, error) { - powerView, err := w.api.PowerStateView(powerKey) - if err != nil { - return consensus.PowerTableView{}, err - } - faultsView, err := w.api.FaultsStateView(faultsKey) - if err != nil { - return consensus.PowerTableView{}, err - } - return consensus.NewPowerTableView(powerView, faultsView), nil -} - -func (w *DefaultWorker) lookbackTipset(ctx context.Context, base block.TipSet, nullBlkCount uint64, lookback uint64) (block.TipSet, error) { - if lookback <= nullBlkCount+1 { // new block looks back to base - return base, nil - } - baseHeight, err := base.Height() - if err != nil { - return block.UndefTipSet, err - } - targetEpoch := abi.ChainEpoch(uint64(baseHeight) + 1 + nullBlkCount - lookback) - - return chain.FindTipsetAtEpoch(ctx, base, targetEpoch, w.chainState) -} - -// drandEntriesForEpoch returns the array of drand entries that should be -// included in the next block. The return value maay be nil. -func (w *DefaultWorker) drandEntriesForEpoch(ctx context.Context, base block.TipSet, nullBlkCount uint64) ([]*drand.Entry, error) { - baseHeight, err := base.Height() - if err != nil { - return nil, err - } - // Special case genesis - var rounds []drand.Round - lastTargetEpoch := abi.ChainEpoch(uint64(baseHeight) + nullBlkCount + 1 - consensus.DRANDEpochLookback) - if baseHeight == abi.ChainEpoch(0) { - // no latest entry, targetEpoch undefined as its before genesis - - // There should be a first genesis drand round from time before genesis - // and then we grab everything between this round and genesis time - startTime := w.drand.StartTimeOfRound(w.drand.FirstFilecoinRound()) - endTime := w.clock.StartTimeOfEpoch(lastTargetEpoch + 1) - rounds = w.drand.RoundsInInterval(startTime, endTime) - } else { - latestEntry, err := chain.FindLatestDRAND(ctx, base, w.chainState) - if err != nil { - return nil, err - } - - startTime := w.drand.StartTimeOfRound(latestEntry.Round) - // end of interval is beginning of next epoch after lastTargetEpoch so - // we add 1 to lastTargetEpoch - endTime := w.clock.StartTimeOfEpoch(lastTargetEpoch + 1) - rounds = w.drand.RoundsInInterval(startTime, endTime) - // first round is round of latestEntry so omit the 0th round - rounds = rounds[1:] - } - - entries := make([]*drand.Entry, len(rounds)) - for i, round := range rounds { - entries[i], err = w.drand.ReadEntry(ctx, round) - if err != nil { - return nil, err - } - } - return entries, nil -} - -func (w *DefaultWorker) electionEntry(ctx context.Context, base block.TipSet, drandEntriesInBlock []*drand.Entry) (*drand.Entry, error) { - numEntries := len(drandEntriesInBlock) - if numEntries > 0 { - return drandEntriesInBlock[numEntries-1], nil - } - - return chain.FindLatestDRAND(ctx, base, w.chainState) -} diff --git a/internal/pkg/mining/worker_test.go b/internal/pkg/mining/worker_test.go deleted file mode 100644 index 7f6c976f70..0000000000 --- a/internal/pkg/mining/worker_test.go +++ /dev/null @@ -1,737 +0,0 @@ -package mining_test - -import ( - "context" - "errors" - "testing" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - fbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - acrypto "github.com/filecoin-project/specs-actors/actors/crypto" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - blockstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - dag "github.com/ipfs/go-merkledag" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - bls "github.com/filecoin-project/filecoin-ffi" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/mining" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -func TestLookbackElection(t *testing.T) { - tf.UnitTest(t) - t.Skip("using legacy vmcontext") - - mockSignerVal, blockSignerAddr := setupSigner() - mockSigner := &mockSignerVal - - builder := chain.NewBuilder(t, address.Undef) - head := builder.NewGenesis() - for i := 1; i < int(miner.ElectionLookback); i++ { - head = builder.AppendOn(head, 1) - } - - st, pool, addrs, bs := sharedSetup(t, mockSignerVal) - getStateTree := func(c context.Context, tsKey block.TipSetKey) (state.Tree, error) { - return st, nil - } - - rnd := &consensus.FakeChainRandomness{Seed: 0} - samp := &consensus.FakeSampler{Seed: 0} - minerAddr := addrs[3] // addr4 in sharedSetup - minerOwnerAddr := addrs[4] // addr5 in sharedSetup - - messages := chain.NewMessageStore(bs) - - t.Run("Election sees ticket lookback ancestors back", func(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - worker := mining.NewDefaultWorker(mining.WorkerParameters{ - API: th.NewDefaultFakeWorkerPorcelainAPI(blockSignerAddr, rnd), - - MinerAddr: minerAddr, - MinerOwnerAddr: minerOwnerAddr, - WorkerSigner: mockSigner, - - TipSetMetadata: fakeTSMetadata{}, - GetStateTree: getStateTree, - GetWeight: getWeightTest, - Election: consensus.NewElectionMachine(rnd), - TicketGen: consensus.NewTicketMachine(samp), - - MessageSource: pool, - MessageQualifier: &mining.NoMessageQualifier{}, - Blockstore: bs, - MessageStore: messages, - Clock: clock.NewChainClock(100000000, 30*time.Second, 6*time.Second), - }) - - blk, err := worker.Mine(ctx, head, 0) - assert.NoError(t, err) - - expectedTicket := makeExpectedTicket(ctx, t, rnd, mockSigner, head, miner.ElectionLookback, minerAddr, minerOwnerAddr) - assert.Equal(t, expectedTicket, blk.Header.Ticket) - }) -} - -func Test_Mine(t *testing.T) { - tf.UnitTest(t) - t.Skip("using legacy vmcontext") - - mockSignerVal, blockSignerAddr := setupSigner() - mockSigner := &mockSignerVal - - newCid := types.NewCidForTestGetter() - stateRoot := newCid() - baseBlock := &block.Block{Height: 0, StateRoot: e.NewCid(stateRoot), Ticket: block.Ticket{VRFProof: []byte{0}}} - tipSet := block.RequireNewTipSet(t, baseBlock) - - st, pool, addrs, bs := sharedSetup(t, mockSignerVal) - getStateTree := func(c context.Context, tsKey block.TipSetKey) (state.Tree, error) { - return st, nil - } - - rnd := &consensus.FakeChainRandomness{Seed: 0} - samp := &consensus.FakeSampler{Seed: 0} - minerAddr := addrs[3] // addr4 in sharedSetup - minerOwnerAddr := addrs[4] // addr5 in sharedSetup - messages := chain.NewMessageStore(bs) - - // TODO #3311: this case isn't testing much. Testing w.Mine further needs a lot more attention. - t.Run("Trivial success case", func(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - worker := mining.NewDefaultWorker(mining.WorkerParameters{ - API: th.NewDefaultFakeWorkerPorcelainAPI(blockSignerAddr, rnd), - - MinerAddr: minerAddr, - MinerOwnerAddr: minerOwnerAddr, - WorkerSigner: mockSigner, - - TipSetMetadata: fakeTSMetadata{}, - GetStateTree: getStateTree, - GetWeight: getWeightTest, - Election: consensus.NewElectionMachine(rnd), - TicketGen: consensus.NewTicketMachine(samp), - - MessageSource: pool, - MessageQualifier: &mining.NoMessageQualifier{}, - Blockstore: bs, - MessageStore: messages, - Clock: clock.NewChainClock(100000000, 30*time.Second, 6*time.Second), - }) - - blk, err := worker.Mine(ctx, tipSet, 0) - assert.NoError(t, err) - - expectedTicket := makeExpectedTicket(ctx, t, rnd, mockSigner, tipSet, miner.ElectionLookback, minerAddr, minerOwnerAddr) - assert.Equal(t, expectedTicket, blk.Header.Ticket) - }) - - t.Run("Block generation fails", func(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - worker := mining.NewDefaultWorker(mining.WorkerParameters{ - API: th.NewDefaultFakeWorkerPorcelainAPI(blockSignerAddr, rnd), - - MinerAddr: minerAddr, - MinerOwnerAddr: minerOwnerAddr, - WorkerSigner: mockSigner, - - TipSetMetadata: fakeTSMetadata{shouldError: true}, - GetStateTree: getStateTree, - GetWeight: getWeightTest, - Election: consensus.NewElectionMachine(rnd), - TicketGen: consensus.NewTicketMachine(samp), - - MessageSource: pool, - MessageQualifier: &mining.NoMessageQualifier{}, - Blockstore: bs, - MessageStore: messages, - Clock: clock.NewChainClock(100000000, 30*time.Second, 6*time.Second), - }) - - _, err := worker.Mine(ctx, tipSet, 0) - require.Error(t, err) - assert.Contains(t, err.Error(), "test error retrieving state root") - }) - - t.Run("Sent empty tipset", func(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - worker := mining.NewDefaultWorker(mining.WorkerParameters{ - API: th.NewDefaultFakeWorkerPorcelainAPI(blockSignerAddr, rnd), - - MinerAddr: minerAddr, - MinerOwnerAddr: minerOwnerAddr, - WorkerSigner: mockSigner, - - TipSetMetadata: fakeTSMetadata{}, - GetStateTree: getStateTree, - GetWeight: getWeightTest, - Election: consensus.NewElectionMachine(rnd), - TicketGen: consensus.NewTicketMachine(samp), - - MessageSource: pool, - MessageQualifier: &mining.NoMessageQualifier{}, - Blockstore: bs, - MessageStore: messages, - Clock: clock.NewChainClock(100000000, 30*time.Second, 6*time.Second), - }) - input := block.TipSet{} - _, err := worker.Mine(ctx, input, 0) - assert.EqualError(t, err, "bad input tipset with no blocks sent to Mine()") - }) -} - -func sharedSetupInitial() (cbor.IpldStore, *message.Pool, cid.Cid) { - r := repo.NewInMemoryRepo() - bs := blockstore.NewBlockstore(r.Datastore()) - cst := cborutil.NewIpldStore(bs) - pool := message.NewPool(config.NewDefaultConfig().Mpool, th.NewMockMessagePoolValidator()) - // Install the fake actor so we can execute it. - fakeActorCodeCid := builtin.AccountActorCodeID - return cst, pool, fakeActorCodeCid -} - -func sharedSetup(t *testing.T, mockSigner types.MockSigner) ( - state.Tree, *message.Pool, []address.Address, blockstore.Blockstore) { - - cst, pool, _ := sharedSetupInitial() - ctx := context.TODO() - d := datastore.NewMapDatastore() - bs := blockstore.NewBlockstore(d) - vms := vm.NewStorage(bs) - - addr1, addr2, addr3, addr5 := mockSigner.Addresses[0], mockSigner.Addresses[1], mockSigner.Addresses[2], mockSigner.Addresses[4] - _, st := th.RequireMakeStateTree(t, cst, map[address.Address]*actor.Actor{ - // Ensure core.NetworkAddress exists to prevent mining reward failures. - builtin.RewardActorAddr: actor.NewActor(builtin.RewardActorCodeID, abi.NewTokenAmount(1000000), cid.Undef), - }) - - _, addr4 := th.RequireNewMinerActor(ctx, t, st, vms, addr5, 10, th.RequireRandomPeerID(t), types.NewAttoFILFromFIL(10000)) - return st, pool, []address.Address{addr1, addr2, addr3, addr4, addr5}, bs -} - -func makeExpectedTicket(ctx context.Context, t *testing.T, rnd *consensus.FakeChainRandomness, mockSigner *types.MockSigner, - head block.TipSet, lookback abi.ChainEpoch, minerAddr address.Address, minerOwnerAddr address.Address) block.Ticket { - height, err := head.Height() - require.NoError(t, err) - entropy, err := encoding.Encode(minerAddr) - require.NoError(t, err) - seed, err := rnd.SampleChainRandomness(ctx, head.Key(), acrypto.DomainSeparationTag_TicketProduction, height-lookback, entropy) - require.NoError(t, err) - expectedVrfProof, err := mockSigner.SignBytes(ctx, seed, minerOwnerAddr) - require.NoError(t, err) - return block.Ticket{VRFProof: expectedVrfProof.Data} -} - -func TestApplyBLSMessages(t *testing.T) { - tf.UnitTest(t) - t.Skip("using legacy vmcontext") - - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - - ki := types.MustGenerateMixedKeyInfo(5, 5) - mockSigner := types.NewMockSigner(ki) - - newCid := types.NewCidForTestGetter() - stateRoot := newCid() - baseBlock := &block.Block{Height: 0, StateRoot: e.NewCid(stateRoot), Ticket: block.Ticket{VRFProof: []byte{0}}} - tipSet := block.RequireNewTipSet(t, baseBlock) - - st, pool, addrs, bs := sharedSetup(t, mockSigner) - getStateTree := func(c context.Context, tsKey block.TipSetKey) (state.Tree, error) { - return st, nil - } - - rnd := &consensus.FakeChainRandomness{Seed: 0} - msgStore := chain.NewMessageStore(bs) - - // assert that first two addresses have different protocols - blsAddress := addrs[0] - assert.Equal(t, address.BLS, blsAddress.Protocol()) - secpAddress := addrs[1] - assert.Equal(t, address.SECP256K1, secpAddress.Protocol()) - - // create secp and bls signed messages interleaved - for i := 0; i < 10; i++ { - var addr address.Address - if i%2 == 0 { - addr = blsAddress - } else { - addr = secpAddress - } - smsg := requireSignedMessage(t, &mockSigner, addr, addrs[3], uint64(i/2), types.NewAttoFILFromFIL(1)) - _, err := pool.Add(ctx, smsg, abi.ChainEpoch(0)) - require.NoError(t, err) - } - - worker := mining.NewDefaultWorker(mining.WorkerParameters{ - API: th.NewDefaultFakeWorkerPorcelainAPI((&mockSigner).Addresses[5], rnd), - - MinerAddr: addrs[3], - MinerOwnerAddr: addrs[4], - WorkerSigner: &mockSigner, - - TipSetMetadata: fakeTSMetadata{}, - GetStateTree: getStateTree, - GetWeight: getWeightTest, - Election: &consensus.FakeElectionMachine{}, - TicketGen: &consensus.FakeTicketMachine{}, - - MessageSource: pool, - MessageQualifier: &mining.NoMessageQualifier{}, - Blockstore: bs, - MessageStore: msgStore, - Clock: clock.NewChainClock(100000000, 30*time.Second, 6*time.Second), - }) - - block, err := worker.Mine(ctx, tipSet, 0) - require.NoError(t, err) - - t.Run("messages are divided into bls and secp messages", func(t *testing.T) { - secpMessages, blsMessages, err := msgStore.LoadMessages(ctx, block.Header.Messages.Cid) - require.NoError(t, err) - - assert.Len(t, secpMessages, 5) - assert.Len(t, blsMessages, 5) - - for _, msg := range secpMessages { - assert.Equal(t, address.SECP256K1, msg.Message.From.Protocol()) - } - - for _, msg := range blsMessages { - assert.Equal(t, address.BLS, msg.From.Protocol()) - } - }) - - t.Run("all 10 messages are stored", func(t *testing.T) { - secpMessages, blsMessages, err := msgStore.LoadMessages(ctx, block.Header.Messages.Cid) - require.NoError(t, err) - - assert.Len(t, secpMessages, 5) - assert.Len(t, blsMessages, 5) - }) - - t.Run("block bls signature can be used to validate messages", func(t *testing.T) { - digests := []bls.Digest{} - keys := []bls.PublicKey{} - - _, blsMessages, err := msgStore.LoadMessages(ctx, block.Header.Messages.Cid) - require.NoError(t, err) - for _, msg := range blsMessages { - msgBytes, err := msg.Marshal() - require.NoError(t, err) - digests = append(digests, bls.Hash(msgBytes)) - - pubKey := bls.PublicKey{} - copy(pubKey[:], msg.From.Payload()) - keys = append(keys, pubKey) - } - - blsSig := bls.Signature{} - copy(blsSig[:], block.Header.BLSAggregateSig.Data) - valid := bls.Verify(&blsSig, digests, keys) - - assert.True(t, valid) - }) -} - -func requireSignedMessage(t *testing.T, signer types.Signer, from, to address.Address, nonce uint64, value types.AttoFIL) *types.SignedMessage { - msg := types.NewMeteredMessage(from, to, nonce, value, builtin.MethodSend, []byte{}, types.NewAttoFILFromFIL(1), 300) - smsg, err := types.NewSignedMessage(context.TODO(), *msg, signer) - require.NoError(t, err) - return smsg -} - -func TestGenerateMultiBlockTipSet(t *testing.T) { - tf.UnitTest(t) - t.Skip("using legacy vmcontext") - - ctx := context.Background() - - mockSigner, blockSignerAddr := setupSigner() - st, pool, addrs, bs := sharedSetup(t, mockSigner) - getStateTree := func(c context.Context, tsKey block.TipSetKey) (state.Tree, error) { - return st, nil - } - rnd := &consensus.FakeChainRandomness{Seed: 0} - minerAddr := addrs[4] - minerOwnerAddr := addrs[3] - messages := chain.NewMessageStore(bs) - - meta := fakeTSMetadata{} - worker := mining.NewDefaultWorker(mining.WorkerParameters{ - API: th.NewDefaultFakeWorkerPorcelainAPI(blockSignerAddr, rnd), - - MinerAddr: minerAddr, - MinerOwnerAddr: minerOwnerAddr, - WorkerSigner: mockSigner, - - TipSetMetadata: meta, - GetStateTree: getStateTree, - GetWeight: getWeightTest, - Election: &consensus.FakeElectionMachine{}, - TicketGen: &consensus.FakeTicketMachine{}, - - MessageSource: pool, - MessageQualifier: &mining.NoMessageQualifier{}, - Blockstore: bs, - MessageStore: messages, - Clock: clock.NewChainClock(100000000, 30*time.Second, 6*time.Second), - }) - - builder := chain.NewBuilder(t, address.Undef) - genesis := builder.NewGenesis() - - parentTipset := builder.AppendManyOn(99, genesis) - baseTipset := builder.AppendOn(parentTipset, 2) - assert.Equal(t, 2, baseTipset.Len()) - - blk, err := worker.Generate(ctx, baseTipset, block.Ticket{VRFProof: []byte{2}}, consensus.MakeFakeVRFProofForTest(), 0, consensus.MakeFakePoStsForTest(), nil) - assert.NoError(t, err) - - txMeta, err := messages.LoadTxMeta(ctx, blk.Header.Messages.Cid) - require.NoError(t, err) - assert.Equal(t, types.EmptyMessagesCID, txMeta.SecpRoot.Cid) - - expectedStateRoot, err := meta.GetTipSetStateRoot(parentTipset.Key()) - require.NoError(t, err) - assert.Equal(t, expectedStateRoot, blk.Header.StateRoot.Cid) - - expectedReceipts, err := meta.GetTipSetReceiptsRoot(parentTipset.Key()) - require.NoError(t, err) - assert.Equal(t, expectedReceipts, blk.Header.MessageReceipts.Cid) - - assert.Equal(t, uint64(101), blk.Header.Height) - assert.Equal(t, fbig.NewInt(120), blk.Header.ParentWeight) - assert.Equal(t, block.Ticket{VRFProof: []byte{2}}, blk.Header.Ticket) -} - -// After calling Generate, do the new block and new state of the message pool conform to our expectations? -func TestGeneratePoolBlockResults(t *testing.T) { - tf.UnitTest(t) - t.Skip("using legacy vmcontext") - - ctx := context.Background() - mockSigner, blockSignerAddr := setupSigner() - newCid := types.NewCidForTestGetter() - st, pool, addrs, bs := sharedSetup(t, mockSigner) - - getStateTree := func(c context.Context, tsKey block.TipSetKey) (state.Tree, error) { - return st, nil - } - rnd := &consensus.FakeChainRandomness{Seed: 0} - messages := chain.NewMessageStore(bs) - - worker := mining.NewDefaultWorker(mining.WorkerParameters{ - API: th.NewDefaultFakeWorkerPorcelainAPI(blockSignerAddr, rnd), - - MinerAddr: addrs[4], - MinerOwnerAddr: addrs[3], - WorkerSigner: mockSigner, - - TipSetMetadata: fakeTSMetadata{}, - GetStateTree: getStateTree, - GetWeight: getWeightTest, - Election: &consensus.FakeElectionMachine{}, - TicketGen: &consensus.FakeTicketMachine{}, - - MessageSource: pool, - MessageQualifier: &mining.NoMessageQualifier{}, - Blockstore: bs, - MessageStore: messages, - Clock: clock.NewChainClock(100000000, 30*time.Second, 6*time.Second), - }) - - // addr3 doesn't correspond to an extant account, so this will trigger errAccountNotFound -- a temporary failure. - msg1 := types.NewMeteredMessage(addrs[2], addrs[0], 0, types.ZeroAttoFIL, builtin.MethodSend, nil, types.NewGasPrice(1), gas.NewGas(0)) - smsg1, err := types.NewSignedMessage(ctx, *msg1, &mockSigner) - require.NoError(t, err) - - // This is actually okay and should result in a receipt - msg2 := types.NewMeteredMessage(addrs[0], addrs[1], 0, types.ZeroAttoFIL, builtin.MethodSend, nil, types.NewGasPrice(1), gas.NewGas(0)) - smsg2, err := types.NewSignedMessage(ctx, *msg2, &mockSigner) - require.NoError(t, err) - - // add the following and then increment the actor nonce at addrs[1], nonceTooLow, a permanent error. - msg3 := types.NewMeteredMessage(addrs[1], addrs[0], 0, types.ZeroAttoFIL, builtin.MethodSend, nil, types.NewGasPrice(1), gas.NewGas(0)) - smsg3, err := types.NewSignedMessage(ctx, *msg3, &mockSigner) - require.NoError(t, err) - - msg4 := types.NewMeteredMessage(addrs[1], addrs[2], 1, types.ZeroAttoFIL, builtin.MethodSend, nil, types.NewGasPrice(1), gas.NewGas(0)) - smsg4, err := types.NewSignedMessage(ctx, *msg4, &mockSigner) - require.NoError(t, err) - - _, err = pool.Add(ctx, smsg1, 0) - assert.NoError(t, err) - _, err = pool.Add(ctx, smsg2, 0) - assert.NoError(t, err) - _, err = pool.Add(ctx, smsg3, 0) - assert.NoError(t, err) - _, err = pool.Add(ctx, smsg4, 0) - assert.NoError(t, err) - - assert.Len(t, pool.Pending(), 4) - - // Set actor nonce past nonce of message in pool. - // Have to do this here to get a permanent error in the pool. - act, actID := th.RequireLookupActor(ctx, t, st, vm.NewStorage(bs), addrs[1]) - require.NoError(t, err) - - act.CallSeqNum = 2 - err = st.SetActor(ctx, actID, act) - require.NoError(t, err) - - stateRoot, err := st.Commit(ctx) - require.NoError(t, err) - - baseBlock := block.Block{ - Parents: block.NewTipSetKey(newCid()), - Height: 100, - StateRoot: e.NewCid(stateRoot), - } - - blk, err := worker.Generate(ctx, block.RequireNewTipSet(t, &baseBlock), block.Ticket{VRFProof: []byte{0}}, consensus.MakeFakeVRFProofForTest(), 0, consensus.MakeFakePoStsForTest(), nil) - assert.NoError(t, err) - - // This is the temporary failure + the good message, - // which will be removed by the node if this block is accepted. - assert.Len(t, pool.Pending(), 2) - assert.Contains(t, pool.Pending(), smsg1) - assert.Contains(t, pool.Pending(), smsg2) - - // message and receipts can be loaded from message store and have - // length 1. - msgs, _, err := messages.LoadMessages(ctx, blk.Header.Messages.Cid) - require.NoError(t, err) - assert.Len(t, msgs, 1) // This is the good message -} - -func TestGenerateSetsBasicFields(t *testing.T) { - tf.UnitTest(t) - t.Skip("using legacy vmcontext") - - ctx := context.Background() - mockSigner, blockSignerAddr := setupSigner() - newCid := types.NewCidForTestGetter() - - st, pool, addrs, bs := sharedSetup(t, mockSigner) - - getStateTree := func(c context.Context, tsKey block.TipSetKey) (state.Tree, error) { - return st, nil - } - rnd := &consensus.FakeChainRandomness{Seed: 0} - minerAddr := addrs[3] - minerOwnerAddr := addrs[4] - - messages := chain.NewMessageStore(bs) - - worker := mining.NewDefaultWorker(mining.WorkerParameters{ - API: th.NewDefaultFakeWorkerPorcelainAPI(blockSignerAddr, rnd), - - MinerAddr: minerAddr, - MinerOwnerAddr: minerOwnerAddr, - WorkerSigner: mockSigner, - - TipSetMetadata: fakeTSMetadata{}, - GetStateTree: getStateTree, - GetWeight: getWeightTest, - Election: &consensus.FakeElectionMachine{}, - TicketGen: &consensus.FakeTicketMachine{}, - - MessageSource: pool, - MessageQualifier: &mining.NoMessageQualifier{}, - Blockstore: bs, - MessageStore: messages, - Clock: clock.NewChainClock(100000000, 30*time.Second, 6*time.Second), - }) - - h := abi.ChainEpoch(100) - w := fbig.NewInt(1000) - baseBlock := block.Block{ - Height: h, - ParentWeight: w, - StateRoot: e.NewCid(newCid()), - } - baseTipSet := block.RequireNewTipSet(t, &baseBlock) - ticket := mining.NthTicket(7) - blk, err := worker.Generate(ctx, baseTipSet, ticket, consensus.MakeFakeVRFProofForTest(), 0, consensus.MakeFakePoStsForTest(), nil) - assert.NoError(t, err) - - assert.Equal(t, h+1, blk.Header.Height) - assert.Equal(t, minerAddr, blk.Header.Miner) - assert.Equal(t, ticket, blk.Header.Ticket) - - blk, err = worker.Generate(ctx, baseTipSet, block.Ticket{VRFProof: []byte{0}}, consensus.MakeFakeVRFProofForTest(), 1, consensus.MakeFakePoStsForTest(), nil) - assert.NoError(t, err) - - assert.Equal(t, h+2, blk.Header.Height) - assert.Equal(t, fbig.Add(w, fbig.NewInt(10.0)), blk.Header.ParentWeight) - assert.Equal(t, minerAddr, blk.Header.Miner) -} - -func TestGenerateWithoutMessages(t *testing.T) { - tf.UnitTest(t) - t.Skip("using legacy vmcontext") - - ctx := context.Background() - mockSigner, blockSignerAddr := setupSigner() - newCid := types.NewCidForTestGetter() - - st, pool, addrs, bs := sharedSetup(t, mockSigner) - getStateTree := func(c context.Context, tsKey block.TipSetKey) (state.Tree, error) { - return st, nil - } - rnd := &consensus.FakeChainRandomness{Seed: 0} - messages := chain.NewMessageStore(bs) - - worker := mining.NewDefaultWorker(mining.WorkerParameters{ - API: th.NewDefaultFakeWorkerPorcelainAPI(blockSignerAddr, rnd), - - MinerAddr: addrs[4], - MinerOwnerAddr: addrs[3], - WorkerSigner: mockSigner, - - TipSetMetadata: fakeTSMetadata{}, - GetStateTree: getStateTree, - GetWeight: getWeightTest, - Election: &consensus.FakeElectionMachine{}, - TicketGen: &consensus.FakeTicketMachine{}, - - MessageSource: pool, - MessageQualifier: &mining.NoMessageQualifier{}, - Blockstore: bs, - MessageStore: messages, - Clock: clock.NewChainClock(100000000, 30*time.Second, 6*time.Second), - }) - - assert.Len(t, pool.Pending(), 0) - baseBlock := block.Block{ - Parents: block.NewTipSetKey(newCid()), - Height: 100, - StateRoot: e.NewCid(newCid()), - } - blk, err := worker.Generate(ctx, block.RequireNewTipSet(t, &baseBlock), block.Ticket{VRFProof: []byte{0}}, consensus.MakeFakeVRFProofForTest(), 0, consensus.MakeFakePoStsForTest(), nil) - assert.NoError(t, err) - - assert.Len(t, pool.Pending(), 0) // This is the temporary failure. - txMeta, err := messages.LoadTxMeta(ctx, blk.Header.Messages.Cid) - require.NoError(t, err) - assert.Equal(t, types.EmptyMessagesCID, txMeta.SecpRoot.Cid) - assert.Equal(t, types.EmptyMessagesCID, txMeta.BLSRoot.Cid) -} - -// If something goes wrong while generating a new block, even as late as when flushing it, -// no block should be returned, and the message pool should not be pruned. -func TestGenerateError(t *testing.T) { - tf.UnitTest(t) - t.Skip("using legacy vmcontext") - - ctx := context.Background() - mockSigner, blockSignerAddr := setupSigner() - newCid := types.NewCidForTestGetter() - - st, pool, addrs, bs := sharedSetup(t, mockSigner) - - getStateTree := func(c context.Context, tsKey block.TipSetKey) (state.Tree, error) { - return st, nil - } - rnd := &consensus.FakeChainRandomness{Seed: 0} - messages := chain.NewMessageStore(bs) - worker := mining.NewDefaultWorker(mining.WorkerParameters{ - API: th.NewDefaultFakeWorkerPorcelainAPI(blockSignerAddr, rnd), - - MinerAddr: addrs[4], - MinerOwnerAddr: addrs[3], - WorkerSigner: mockSigner, - - TipSetMetadata: fakeTSMetadata{shouldError: true}, - GetStateTree: getStateTree, - GetWeight: getWeightTest, - Election: &consensus.FakeElectionMachine{}, - TicketGen: &consensus.FakeTicketMachine{}, - - MessageSource: pool, - MessageQualifier: &mining.NoMessageQualifier{}, - Blockstore: bs, - MessageStore: messages, - Clock: clock.NewChainClock(100000000, 30*time.Second, 6*time.Second), - }) - - // This is actually okay and should result in a receipt - msg := types.NewMeteredMessage(addrs[0], addrs[1], 0, types.ZeroAttoFIL, builtin.MethodSend, nil, types.NewGasPrice(0), gas.Unit(0)) - smsg, err := types.NewSignedMessage(ctx, *msg, &mockSigner) - require.NoError(t, err) - _, err = pool.Add(ctx, smsg, 0) - require.NoError(t, err) - - assert.Len(t, pool.Pending(), 1) - baseBlock := block.Block{ - Parents: block.NewTipSetKey(newCid()), - Height: 100, - StateRoot: e.NewCid(newCid()), - } - baseTipSet := block.RequireNewTipSet(t, &baseBlock) - blk, err := worker.Generate(ctx, baseTipSet, block.Ticket{VRFProof: []byte{0}}, consensus.MakeFakeVRFProofForTest(), 0, consensus.MakeFakePoStsForTest(), nil) - assert.Error(t, err, "boom") - assert.Nil(t, blk.Header) - - assert.Len(t, pool.Pending(), 1) // No messages are removed from the pool. -} - -func getWeightTest(_ context.Context, ts block.TipSet) (fbig.Int, error) { - w, err := ts.ParentWeight() - if err != nil { - return fbig.Zero(), err - } - // consensus.ecV = 10 - return fbig.Add(w, fbig.NewInt(int64(ts.Len()*10))), nil -} - -func setupSigner() (types.MockSigner, address.Address) { - mockSigner, _ := types.NewMockSignersAndKeyInfo(10) - - signerAddr := mockSigner.Addresses[len(mockSigner.Addresses)-1] - return mockSigner, signerAddr -} - -type fakeTSMetadata struct { - shouldError bool -} - -func (tm fakeTSMetadata) GetTipSetStateRoot(key block.TipSetKey) (cid.Cid, error) { - if tm.shouldError { - return cid.Undef, errors.New("test error retrieving state root") - } - return dag.NewRawNode([]byte("state root")).Cid(), nil -} - -func (tm fakeTSMetadata) GetTipSetReceiptsRoot(key block.TipSetKey) (cid.Cid, error) { - return dag.NewRawNode([]byte("receipt root")).Cid(), nil -} diff --git a/internal/pkg/net/blocksub/topic.go b/internal/pkg/net/blocksub/topic.go deleted file mode 100644 index 1bc4e6a464..0000000000 --- a/internal/pkg/net/blocksub/topic.go +++ /dev/null @@ -1,49 +0,0 @@ -package blocksub - -import ( - "fmt" - - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// BlockTopic returns the network pubsub topic identifier on which new blocks are announced. -func Topic(networkName string) string { - return fmt.Sprintf("/fil/blocks/%s", networkName) -} - -type Payload struct { - _ struct{} `cbor:",toarray"` - Header block.Block - BLSMsgCids []e.Cid - SECPMsgCids []e.Cid -} - -func MakePayload(header *block.Block, BLSMessages, SECPMessages []*types.SignedMessage) ([]byte, error) { - blsCIDs := make([]e.Cid, len(BLSMessages)) - for i, m := range BLSMessages { - c, err := m.Message.Cid() // CID of the unsigned message - if err != nil { - return nil, errors.Wrapf(err, "failed to create blocksub payload for BLS msg %s", m) - } - blsCIDs[i] = e.NewCid(c) - } - secpCIDs := make([]e.Cid, len(SECPMessages)) - for i, m := range SECPMessages { - c, err := m.Cid() // CID of the signed message - if err != nil { - return nil, errors.Wrapf(err, "failed to create blocksub payload for SECP msg %s", m) - } - secpCIDs[i] = e.NewCid(c) - } - payload := Payload{ - Header: *header, - BLSMsgCids: blsCIDs, - SECPMsgCids: secpCIDs, - } - return encoding.Encode(payload) -} diff --git a/internal/pkg/net/blocksub/validator.go b/internal/pkg/net/blocksub/validator.go deleted file mode 100644 index b53472c3e4..0000000000 --- a/internal/pkg/net/blocksub/validator.go +++ /dev/null @@ -1,62 +0,0 @@ -package blocksub - -import ( - "context" - - "github.com/ipfs/go-log/v2" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-pubsub" - - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics" -) - -var blockTopicLogger = log.Logger("net/block_validator") -var mDecodeBlkFail = metrics.NewInt64Counter("net/pubsub_block_decode_failure", "Number of blocks that fail to decode seen on block pubsub channel") -var mInvalidBlk = metrics.NewInt64Counter("net/pubsub_invalid_block", "Number of blocks that fail syntax validation seen on block pubsub channel") - -// BlockTopicValidator may be registered on go-libp2p-pubsub to validate blocksub messages. -type BlockTopicValidator struct { - validator pubsub.Validator - opts []pubsub.ValidatorOpt -} - -// NewBlockTopicValidator retruns a BlockTopicValidator using `bv` for message validation -func NewBlockTopicValidator(bv consensus.BlockSyntaxValidator, opts ...pubsub.ValidatorOpt) *BlockTopicValidator { - return &BlockTopicValidator{ - opts: opts, - validator: func(ctx context.Context, p peer.ID, msg *pubsub.Message) bool { - var payload Payload - err := encoding.Decode(msg.GetData(), &payload) - if err != nil { - blockTopicLogger.Debugf("failed to decode blocksub payload from peer %s: %s", p.String(), err.Error()) - mDecodeBlkFail.Inc(ctx, 1) - return false - } - if err := bv.ValidateSyntax(ctx, &payload.Header); err != nil { - blockTopicLogger.Debugf("failed to validate block %s from peer %s: %s", payload.Header.Cid().String(), p.String(), err.Error()) - mInvalidBlk.Inc(ctx, 1) - return false - } - // Note: there is no validation here that the BLS and SECP message CIDs included in the payload - // produce the AMT roots referenced in the block header. - // At present, those lists are ignored by chain validation anyway. - // Such a check happens later in block semantic validation, but it would probably be a good idea to do - // it here too. https://github.com/filecoin-project/go-filecoin/issues/3903 - return true - }, - } -} - -func (btv *BlockTopicValidator) Topic(network string) string { - return Topic(network) -} - -func (btv *BlockTopicValidator) Validator() pubsub.Validator { - return btv.validator -} - -func (btv *BlockTopicValidator) Opts() []pubsub.ValidatorOpt { - return btv.opts -} diff --git a/internal/pkg/net/blocksub/validator_test.go b/internal/pkg/net/blocksub/validator_test.go deleted file mode 100644 index 7a4ac32111..0000000000 --- a/internal/pkg/net/blocksub/validator_test.go +++ /dev/null @@ -1,189 +0,0 @@ -package blocksub_test - -import ( - "context" - "fmt" - "testing" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - pubsub "github.com/libp2p/go-libp2p-pubsub" - pubsubpb "github.com/libp2p/go-libp2p-pubsub/pb" - mocknet "github.com/libp2p/go-libp2p/p2p/net/mock" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/net/blocksub" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" -) - -func TestBlockTopicValidator(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - mbv := th.NewStubBlockValidator() - tv := blocksub.NewBlockTopicValidator(mbv, nil) - builder := chain.NewBuilder(t, address.Undef) - pid1 := th.RequireIntPeerID(t, 1) - - goodBlk := builder.BuildOnBlock(nil, func(b *chain.BlockBuilder) {}) - badBlk := builder.BuildOnBlock(nil, func(b *chain.BlockBuilder) { - b.IncHeight(1) - }) - - mbv.StubSyntaxValidationForBlock(badBlk, fmt.Errorf("invalid block")) - - validator := tv.Validator() - - network := "gfctest" - assert.Equal(t, blocksub.Topic(network), tv.Topic(network)) - assert.True(t, validator(ctx, pid1, blkToPubSub(t, goodBlk))) - assert.False(t, validator(ctx, pid1, blkToPubSub(t, badBlk))) - assert.False(t, validator(ctx, pid1, nonBlkPubSubMsg())) -} - -func TestBlockPubSubValidation(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - - // setup a mock network and generate a host - mn := mocknet.New(ctx) - host1, err := mn.GenPeer() - require.NoError(t, err) - - // create a fake clock to trigger block validation failures - now := time.Unix(1234567890, 0) - mclock := clock.NewFake(now) - // block time will be 1 second - blocktime := time.Second * 1 - propDelay := 200 * time.Millisecond - - // setup a block validator and a topic validator - chainClock := clock.NewChainClockFromClock(uint64(now.Unix()), blocktime, propDelay, mclock) - bv := consensus.NewDefaultBlockValidator(chainClock, nil, nil) - btv := blocksub.NewBlockTopicValidator(bv) - - // setup a floodsub instance on the host and register the topic validator - network := "gfctest" - fsub1, err := pubsub.NewFloodSub(ctx, host1, pubsub.WithMessageSigning(false)) - require.NoError(t, err) - err = fsub1.RegisterTopicValidator(btv.Topic(network), btv.Validator(), btv.Opts()...) - require.NoError(t, err) - - // subscribe to the block validator topic - top1, err := fsub1.Join(btv.Topic(network)) - require.NoError(t, err) - sub1, err := top1.Subscribe() - require.NoError(t, err) - - // generate a miner address for blocks - miner := vmaddr.NewForTestGetter()() - - mclock.Advance(blocktime) // enter epoch 1 - - // create an invalid block - invalidBlk := &block.Block{ - Height: 1, - Timestamp: uint64(now.Add(time.Second * 60).Unix()), // invalid timestamp, 60 seconds in future - StateRoot: e.NewCid(types.NewCidForTestGetter()()), - Miner: miner, - Ticket: block.Ticket{VRFProof: []byte{0}}, - BlockSig: &crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: []byte{}}, - BLSAggregateSig: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte{}}, - } - // publish the invalid block - payload := blocksub.Payload{ - Header: *invalidBlk, - BLSMsgCids: nil, - SECPMsgCids: nil, - } - payloadBytes, err := encoding.Encode(payload) - require.NoError(t, err) - err = top1.Publish(ctx, payloadBytes) - assert.NoError(t, err) - - // see FIXME below (#3285) - time.Sleep(time.Millisecond * 100) - - // create a valid block - validTime := chainClock.StartTimeOfEpoch(abi.ChainEpoch(1)) - validBlk := &block.Block{ - Height: 1, - Timestamp: uint64(validTime.Unix()), - StateRoot: e.NewCid(types.NewCidForTestGetter()()), - Miner: miner, - Ticket: block.Ticket{VRFProof: []byte{0}}, - BlockSig: &crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: []byte{}}, - BLSAggregateSig: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte{}}, - } - // publish the invalid block - payload = blocksub.Payload{ - Header: *validBlk, - BLSMsgCids: nil, - SECPMsgCids: nil, - } - payloadBytes, err = encoding.Encode(payload) - require.NoError(t, err) - err = top1.Publish(ctx, payloadBytes) - assert.NoError(t, err) - - // FIXME: #3285 - // Floodsub makes no guarantees on the order of messages, this means the block we - // get here is nondeterministic. For now we do our best to let the invalid block propagate first - // by sleeping (*wince*), but it could be the case that the valid block arrives first - meaning this - // test could pass incorrectly since we don't know if the invalid block is in the channel and we - // have no easy way of checking since Next blocks if the channel is empty. A solution here - // could be to create a metrics registry in the block validator code and assert that it has seen - // one invalid block and one valid block. - // If this test ever flakes we know there is an issue with libp2p since the block validator has - // a test and sine TestBlockTopicValidator tests the plumbing of this code. - // This test should be reimplemented by starting an in-process node using something like GenNode - // refer to #3285 for details. - received, err := sub1.Next(ctx) - assert.NoError(t, err, "Receieved an invalid block over pubsub, seee issue #3285 for help debugging") - - // decode the block from pubsub - var receivedPayload blocksub.Payload - err = encoding.Decode(received.GetData(), &receivedPayload) - require.NoError(t, err) - - // assert this block is the valid one - assert.Equal(t, validBlk.Cid().String(), receivedPayload.Header.Cid().String()) -} - -// convert a types.Block to a pubsub message -func blkToPubSub(t *testing.T, blk *block.Block) *pubsub.Message { - payload := blocksub.Payload{ - Header: *blk, - BLSMsgCids: nil, - SECPMsgCids: nil, - } - data, err := encoding.Encode(&payload) - require.NoError(t, err) - return &pubsub.Message{ - Message: &pubsubpb.Message{ - Data: data, - }, - } -} - -// returns a pubsub message that will not decode to a types.Block -func nonBlkPubSubMsg() *pubsub.Message { - pbm := &pubsubpb.Message{ - Data: []byte("meow"), - } - return &pubsub.Message{ - Message: pbm, - } -} diff --git a/internal/pkg/net/msgsub/validator.go b/internal/pkg/net/msgsub/validator.go deleted file mode 100644 index 2e34307eb6..0000000000 --- a/internal/pkg/net/msgsub/validator.go +++ /dev/null @@ -1,64 +0,0 @@ -package msgsub - -import ( - "context" - - "github.com/ipfs/go-log/v2" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-pubsub" - - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/metrics" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -var messageTopicLogger = log.Logger("net/message_validator") -var mDecodeMsgFail = metrics.NewInt64Counter("net/pubsub_message_decode_failure", "Number of messages that fail to decode seen on message pubsub channel") -var mInvalidMsg = metrics.NewInt64Counter("net/pubsub_invalid_message", "Number of messages that fail syntax validation seen on message pubsub channel") - -// MessageTopicValidator may be registered on go-libp3p-pubsub to validate msgsub payloads. -type MessageTopicValidator struct { - validator pubsub.Validator - opts []pubsub.ValidatorOpt -} - -// NewMessageTopicValidator returns a MessageTopicValidator using the input -// signature and syntax validators. -func NewMessageTopicValidator(syntaxVal consensus.MessageSyntaxValidator, sigVal *consensus.MessageSignatureValidator, opts ...pubsub.ValidatorOpt) *MessageTopicValidator { - return &MessageTopicValidator{ - opts: opts, - validator: func(ctx context.Context, p peer.ID, msg *pubsub.Message) bool { - unmarshaled := &types.SignedMessage{} - if err := unmarshaled.Unmarshal(msg.GetData()); err != nil { - messageTopicLogger.Debugf("message from peer: %s failed to decode: %s", p.String(), err.Error()) - mDecodeMsgFail.Inc(ctx, 1) - return false - } - if err := syntaxVal.ValidateSignedMessageSyntax(ctx, unmarshaled); err != nil { - mCid, _ := unmarshaled.Cid() - messageTopicLogger.Debugf("message %s from peer: %s failed to syntax validate: %s", mCid.String(), p.String(), err.Error()) - mInvalidMsg.Inc(ctx, 1) - return false - } - if err := sigVal.Validate(ctx, unmarshaled); err != nil { - mCid, _ := unmarshaled.Cid() - messageTopicLogger.Debugf("message %s from peer: %s failed to signature validate: %s", mCid.String(), p.String(), err.Error()) - mInvalidMsg.Inc(ctx, 1) - return false - } - return true - }, - } -} - -func (mtv *MessageTopicValidator) Topic(network string) string { - return Topic(network) -} - -func (mtv *MessageTopicValidator) Validator() pubsub.Validator { - return mtv.validator -} - -func (mtv *MessageTopicValidator) Opts() []pubsub.ValidatorOpt { - return mtv.opts -} diff --git a/internal/pkg/net/network.go b/internal/pkg/net/network.go deleted file mode 100644 index 05f4469c83..0000000000 --- a/internal/pkg/net/network.go +++ /dev/null @@ -1,183 +0,0 @@ -package net - -import ( - "context" - "fmt" - "sort" - "sync" - - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/metrics" - "github.com/libp2p/go-libp2p-core/peer" - swarm "github.com/libp2p/go-libp2p-swarm" - ma "github.com/multiformats/go-multiaddr" - "github.com/pkg/errors" -) - -// SwarmConnInfo represents details about a single swarm connection. -type SwarmConnInfo struct { - Addr string - Peer string - Latency string - Muxer string - Streams []SwarmStreamInfo -} - -// SwarmStreamInfo represents details about a single swarm stream. -type SwarmStreamInfo struct { - Protocol string -} - -func (ci *SwarmConnInfo) Less(i, j int) bool { - return ci.Streams[i].Protocol < ci.Streams[j].Protocol -} - -func (ci *SwarmConnInfo) Len() int { - return len(ci.Streams) -} - -func (ci *SwarmConnInfo) Swap(i, j int) { - ci.Streams[i], ci.Streams[j] = ci.Streams[j], ci.Streams[i] -} - -// SwarmConnInfos represent details about a list of swarm connections. -type SwarmConnInfos struct { - Peers []SwarmConnInfo -} - -func (ci SwarmConnInfos) Less(i, j int) bool { - return ci.Peers[i].Addr < ci.Peers[j].Addr -} - -func (ci SwarmConnInfos) Len() int { - return len(ci.Peers) -} - -func (ci SwarmConnInfos) Swap(i, j int) { - ci.Peers[i], ci.Peers[j] = ci.Peers[j], ci.Peers[i] -} - -// Network is a unified interface for dealing with libp2p -type Network struct { - host host.Host - metrics.Reporter - *Router - *Pinger -} - -// New returns a new Network -func New( - host host.Host, - router *Router, - reporter metrics.Reporter, - pinger *Pinger, -) *Network { - return &Network{ - host: host, - Pinger: pinger, - Reporter: reporter, - Router: router, - } -} - -// GetPeerAddresses gets the current addresses of the node -func (network *Network) GetPeerAddresses() []ma.Multiaddr { - return network.host.Addrs() -} - -// GetPeerID gets the current peer id from libp2p-host -func (network *Network) GetPeerID() peer.ID { - return network.host.ID() -} - -// GetBandwidthStats gets stats on the current bandwidth usage of the network -func (network *Network) GetBandwidthStats() metrics.Stats { - return network.Reporter.GetBandwidthTotals() -} - -// ConnectionResult represents the result of an attempted connection from the -// Connect method. -type ConnectionResult struct { - PeerID peer.ID - Err error -} - -// Connect connects to peers at the given addresses. Does not retry. -func (network *Network) Connect(ctx context.Context, addrs []string) (<-chan ConnectionResult, error) { - outCh := make(chan ConnectionResult) - - swrm, ok := network.host.Network().(*swarm.Swarm) - if !ok { - return nil, fmt.Errorf("peerhost network was not a swarm") - } - - pis, err := PeerAddrsToAddrInfo(addrs) - if err != nil { - return nil, err - } - - go func() { - var wg sync.WaitGroup - wg.Add(len(pis)) - - for _, pi := range pis { - go func(pi peer.AddrInfo) { - swrm.Backoff().Clear(pi.ID) - err := network.host.Connect(ctx, pi) - outCh <- ConnectionResult{ - PeerID: pi.ID, - Err: err, - } - wg.Done() - }(pi) - } - - wg.Wait() - close(outCh) - }() - - return outCh, nil -} - -// Peers lists peers currently available on the network -func (network *Network) Peers(ctx context.Context, verbose, latency, streams bool) (*SwarmConnInfos, error) { - if network.host == nil { - return nil, errors.New("node must be online") - } - - conns := network.host.Network().Conns() - - out := SwarmConnInfos{ - Peers: []SwarmConnInfo{}, - } - for _, c := range conns { - pid := c.RemotePeer() - addr := c.RemoteMultiaddr() - - ci := SwarmConnInfo{ - Addr: addr.String(), - Peer: pid.Pretty(), - } - - if verbose || latency { - lat := network.host.Peerstore().LatencyEWMA(pid) - if lat == 0 { - ci.Latency = "n/a" - } else { - ci.Latency = lat.String() - } - } - if verbose || streams { - strs := c.GetStreams() - - for _, s := range strs { - ci.Streams = append(ci.Streams, SwarmStreamInfo{Protocol: string(s.Protocol())}) - } - } - sort.Sort(&ci) - out.Peers = append(out.Peers, ci) - } - - sort.Sort(&out) - return &out, nil -} diff --git a/internal/pkg/net/pinger.go b/internal/pkg/net/pinger.go deleted file mode 100644 index d21f93d032..0000000000 --- a/internal/pkg/net/pinger.go +++ /dev/null @@ -1,37 +0,0 @@ -package net - -import ( - "context" - "errors" - - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p/p2p/protocol/ping" -) - -// ErrPingSelf is returned if the pinger is instructed to ping itself. -var ErrPingSelf = errors.New("cannot ping self") - -// Pinger wraps a libp2p ping service. It exists to serve more helpful -// error messages in the case a node is pinging itself. -type Pinger struct { - *ping.PingService - self host.Host -} - -// NewPinger creates a filecoin pinger provided with a pingService and a PID. -func NewPinger(h host.Host, p *ping.PingService) *Pinger { - return &Pinger{ - PingService: p, - self: h, - } -} - -// Ping connects to other nodes on the network to test connections. The -// Pinger will error if the caller Pings the Pinger's self id. -func (p *Pinger) Ping(ctx context.Context, pid peer.ID) (<-chan ping.Result, error) { - if pid == p.self.ID() { - return nil, ErrPingSelf - } - return p.PingService.Ping(ctx, pid), nil -} diff --git a/internal/pkg/net/pubsub/topic.go b/internal/pkg/net/pubsub/topic.go deleted file mode 100644 index eb954e2f92..0000000000 --- a/internal/pkg/net/pubsub/topic.go +++ /dev/null @@ -1,82 +0,0 @@ -package pubsub - -import ( - "context" - - "github.com/libp2p/go-libp2p-core/peer" - libp2p "github.com/libp2p/go-libp2p-pubsub" -) - -// Topic publishes and subscribes to a libp2p pubsub topic -type Topic struct { - pubsubTopic *libp2p.Topic -} - -// Message defines the common interface for go-filecoin message consumers. -// It's a subset of the go-libp2p-pubsub/pubsub.go Message type. -type Message interface { - GetSource() peer.ID - GetSender() peer.ID - GetData() []byte -} - -type message struct { - inner *libp2p.Message -} - -// Subscription is a handle to a pubsub subscription. -// This matches part of the interface to a libp2p.pubsub.Subscription. -type Subscription interface { - // Topic returns this subscription's topic name - Topic() string - // Next returns the next message from this subscription - Next(ctx context.Context) (Message, error) - // Cancel cancels this subscription - Cancel() -} - -// NewTopic builds a new topic. -func NewTopic(topic *libp2p.Topic) *Topic { - return &Topic{pubsubTopic: topic} -} - -// Subscribe subscribes to a pubsub topic -func (t *Topic) Subscribe() (Subscription, error) { - sub, err := t.pubsubTopic.Subscribe() - return &subscriptionWrapper{sub}, err -} - -// Publish publishes to a pubsub topic. It blocks until there is at least one -// peer on the mesh that can receive the publish. -func (t *Topic) Publish(ctx context.Context, data []byte) error { - // return t.pubsubTopic.Publish(ctx, data) - return t.pubsubTopic.Publish(ctx, data, libp2p.WithReadiness(libp2p.MinTopicSize(1))) -} - -// subscriptionWrapper extends a pubsub.Subscription in order to wrap the Message type. -type subscriptionWrapper struct { - *libp2p.Subscription -} - -// Next wraps pubsub.Subscription.Next, implicitly adapting *pubsub.Message to the Message interface. -func (w subscriptionWrapper) Next(ctx context.Context) (Message, error) { - msg, err := w.Subscription.Next(ctx) - if err != nil { - return nil, err - } - return message{ - inner: msg, - }, nil -} - -func (m message) GetSender() peer.ID { - return m.inner.ReceivedFrom -} - -func (m message) GetSource() peer.ID { - return m.inner.GetFrom() -} - -func (m message) GetData() []byte { - return m.inner.GetData() -} diff --git a/internal/pkg/piecemanager/fsm_back_end.go b/internal/pkg/piecemanager/fsm_back_end.go deleted file mode 100644 index ecc4e1a7c7..0000000000 --- a/internal/pkg/piecemanager/fsm_back_end.go +++ /dev/null @@ -1,76 +0,0 @@ -package piecemanager - -import ( - "context" - "io" - - "github.com/pkg/errors" - - "github.com/filecoin-project/specs-actors/actors/abi" - fsm "github.com/filecoin-project/storage-fsm" -) - -var _ PieceManager = new(FiniteStateMachineBackEnd) - -type FiniteStateMachineBackEnd struct { - idc fsm.SectorIDCounter - fsm *fsm.Sealing -} - -func NewFiniteStateMachineBackEnd(fsm *fsm.Sealing, idc fsm.SectorIDCounter) FiniteStateMachineBackEnd { - return FiniteStateMachineBackEnd{ - idc: idc, - fsm: fsm, - } -} - -func (f *FiniteStateMachineBackEnd) SealPieceIntoNewSector(ctx context.Context, dealID abi.DealID, dealStart, dealEnd abi.ChainEpoch, pieceSize abi.UnpaddedPieceSize, pieceReader io.Reader) error { - sectorNumber, err := f.idc.Next() - if err != nil { - return err - } - - return f.fsm.SealPiece(ctx, pieceSize, pieceReader, sectorNumber, fsm.DealInfo{ - DealID: dealID, - DealSchedule: fsm.DealSchedule{ - StartEpoch: dealStart, - EndEpoch: dealEnd, - }, - }) -} - -func (f *FiniteStateMachineBackEnd) PledgeSector(ctx context.Context) error { - return f.fsm.PledgeSector() -} - -func (f *FiniteStateMachineBackEnd) UnsealSector(ctx context.Context, sectorID uint64) (io.ReadCloser, error) { - panic("implement me") -} - -func (f *FiniteStateMachineBackEnd) LocatePieceForDealWithinSector(ctx context.Context, dealID uint64) (sectorID uint64, offset uint64, length uint64, err error) { - sectors, err := f.fsm.ListSectors() - if err != nil { - return 0, 0, 0, errors.Wrap(err, "failed to list sectors") - } - - isEncoded := func(s fsm.SectorState) bool { - return fsm.PreCommit2 <= s && s <= fsm.Proving - } - - for _, sector := range sectors { - offset := uint64(0) - for _, piece := range sector.Pieces { - if piece.DealInfo.DealID == abi.DealID(dealID) { - if !isEncoded(sector.State) { - return 0, 0, 0, errors.Errorf("no encoded replica exists corresponding to deal id: %d", dealID) - } - - return uint64(sector.SectorNumber), offset, uint64(piece.Piece.Size.Unpadded()), nil - } - - offset += uint64(piece.Piece.Size.Unpadded()) - } - } - - return 0, 0, 0, errors.Errorf("no encoded piece could be found corresponding to deal id: %d", dealID) -} diff --git a/internal/pkg/piecemanager/interface.go b/internal/pkg/piecemanager/interface.go deleted file mode 100644 index ac7c38a5b0..0000000000 --- a/internal/pkg/piecemanager/interface.go +++ /dev/null @@ -1,37 +0,0 @@ -package piecemanager - -import ( - "context" - "io" - - "github.com/filecoin-project/specs-actors/actors/abi" -) - -// PieceManager is responsible for sealing pieces into sectors and progressing -// the sector through its lifecycle, including coordinating with the node for -// purposes of creating pre-commit and commit messages. -type PieceManager interface { - // SealPieceIntoNewSector writes the provided piece into a sector and fills - // the remaining space in the sector with self deal-data. The now-filled - // sector is encoded and, when the required bits of chain randomness are - // available, committed to the network. This method is fire-and-forget; any - // errors encountered during the pre-commit or commit flows (including - // message creation) are recorded in StorageMining metadata but not exposed - // through this API. - SealPieceIntoNewSector(ctx context.Context, dealID abi.DealID, dealStart, dealEnd abi.ChainEpoch, pieceSize abi.UnpaddedPieceSize, pieceReader io.Reader) error - - // PledgeSector behaves similarly to SealPieceIntoNewSector, but differs in - // that it does not require a deal having been made on-chain beforehand. It - // provisions a new sector, fills it with self-deal junk, and seals. - PledgeSector(ctx context.Context) error - - // UnsealSector produces a reader to the unsealed bytes associated with the - // provided sector id, or an error if no such sealed sector exists. The - // bytes produced by the Reader will not include any bit-padding. - UnsealSector(ctx context.Context, sectorID uint64) (io.ReadCloser, error) - - // LocatePieceForDealWithinSector produces information about the location of - // a deal's piece within a sealed sector, or an error if that piece does not - // exist within any sealed sectors. - LocatePieceForDealWithinSector(ctx context.Context, dealID uint64) (sectorID uint64, offset uint64, length uint64, err error) -} diff --git a/internal/pkg/poster/poster.go b/internal/pkg/poster/poster.go deleted file mode 100644 index 6425a5dab9..0000000000 --- a/internal/pkg/poster/poster.go +++ /dev/null @@ -1,240 +0,0 @@ -package poster - -import ( - "bytes" - "context" - "sync" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - logging "github.com/ipfs/go-log/v2" - - "github.com/filecoin-project/go-address" - sectorstorage "github.com/filecoin-project/sector-storage" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/cst" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/plumbing/msg" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/message" - appstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/specs-actors/actors/abi" - acrypto "github.com/filecoin-project/specs-actors/actors/crypto" -) - -var log = logging.Logger("poster") - -// Poster listens for changes to the chain head and generates and submits a PoSt if one is required. -type Poster struct { - postMutex sync.Mutex - postCancel context.CancelFunc - scheduleCancel context.CancelFunc - challenge abi.Randomness - - minerAddr address.Address - outbox *message.Outbox - mgr sectorstorage.SectorManager - chain *cst.ChainStateReadWriter - stateViewer *appstate.Viewer - waiter *msg.Waiter -} - -// NewPoster creates a Poster struct -func NewPoster( - minerAddr address.Address, - outbox *message.Outbox, - mgr sectorstorage.SectorManager, - chain *cst.ChainStateReadWriter, - stateViewer *appstate.Viewer, - waiter *msg.Waiter) *Poster { - - return &Poster{ - minerAddr: minerAddr, - outbox: outbox, - mgr: mgr, - chain: chain, - stateViewer: stateViewer, - waiter: waiter, - challenge: abi.Randomness{}, - } -} - -// HandleNewHead submits a new chain head for possible fallback PoSt. -func (p *Poster) HandleNewHead(ctx context.Context, newHead block.TipSet) error { - return p.startPoStIfNeeded(ctx, newHead) -} - -// StopPoSting stops the posting scheduler if running and any outstanding PoSts. -func (p *Poster) StopPoSting() { - p.postMutex.Lock() - defer p.postMutex.Unlock() - - if p.scheduleCancel != nil { - p.postCancel() - - p.scheduleCancel() - p.scheduleCancel = nil - } -} - -func (p *Poster) startPoStIfNeeded(ctx context.Context, newHead block.TipSet) error { - p.postMutex.Lock() - defer p.postMutex.Unlock() - - if p.postCancel != nil { - // already posting - return nil - } - - tipsetHeight, err := newHead.Height() - if err != nil { - return err - } - - root, err := p.chain.GetTipSetStateRoot(ctx, newHead.Key()) - if err != nil { - return err - } - - stateView := p.stateViewer.StateView(root) - index, open, _, challengeAt, err := stateView.MinerDeadlineInfo(ctx, p.minerAddr, tipsetHeight) - if err != nil { - return err - } - - // exit if we haven't yet hit the deadline - if tipsetHeight < open { - return nil - } - - randomness, err := p.getChallenge(ctx, newHead.Key(), challengeAt) - if err != nil { - return err - } - - // If we have not already seen this randomness, either the deadline has changed - // or the chain as reorged to a point prior to the challenge. Either way, - // it is time to start a new PoSt. - if bytes.Equal(p.challenge, randomness) { - return nil - } - p.challenge = randomness - - // stop existing PoSt, if one exists - p.cancelPoSt() - - ctx, p.postCancel = context.WithCancel(ctx) - go p.doPoSt(ctx, stateView, index) - - return nil -} - -func (p *Poster) doPoSt(ctx context.Context, stateView *appstate.View, deadlineIndex uint64) { - defer p.safeCancelPoSt() - - minerID, err := address.IDFromAddress(p.minerAddr) - if err != nil { - log.Errorf("Error retrieving miner ID from address %s: %s", p.minerAddr, err) - return - } - - partitions, err := stateView.MinerPartitionIndicesForDeadline(ctx, p.minerAddr, deadlineIndex) - if err != nil { - log.Errorf("Error retrieving partitions for address %s at index %d: %s", p.minerAddr, deadlineIndex, err) - return - } - - // if no partitions, we're done - if len(partitions) == 0 { - return - } - - // Some day we might want to choose a subset of partitions to prove at one time. Today is not that day. - sectors, err := stateView.MinerSectorInfoForDeadline(ctx, p.minerAddr, deadlineIndex, partitions) - if err != nil { - log.Errorf("error retrieving sector info for miner %s partitions at index %d: %s", p.minerAddr, deadlineIndex, err) - return - } - - proofs, err := p.mgr.GenerateWindowPoSt(ctx, abi.ActorID(minerID), sectors, abi.PoStRandomness(p.challenge)) - if err != nil { - log.Errorf("error generating window PoSt: %s", err) - return - } - - _, workerAddr, err := stateView.MinerControlAddresses(ctx, p.minerAddr) - if err != nil { - log.Errorf("could not get miner worker address fro miner %s: %s", p.minerAddr, err) - return - } - - err = p.sendPoSt(ctx, workerAddr, deadlineIndex, partitions, proofs) - if err != nil { - log.Error("error sending window PoSt: ", err) - return - } -} - -func (p *Poster) sendPoSt(ctx context.Context, workerAddr address.Address, index uint64, partitions []uint64, proofs []abi.PoStProof) error { - - windowedPost := &miner.SubmitWindowedPoStParams{ - Deadline: index, - Partitions: partitions, - Proofs: proofs, - Skipped: abi.BitField{}, - } - - mcid, errCh, err := p.outbox.Send( - ctx, - workerAddr, - p.minerAddr, - types.ZeroAttoFIL, - types.NewGasPrice(1), - gas.NewGas(10000), - true, - builtin.MethodsMiner.SubmitWindowedPoSt, - windowedPost, - ) - if err != nil { - return err - } - if err := <-errCh; err != nil { - return err - } - - // wait until we see the post on chain at least once - err = p.waiter.Wait(ctx, mcid, msg.DefaultMessageWaitLookback, func(_ *block.Block, _ *types.SignedMessage, recp *vm.MessageReceipt) error { - return nil - }) - if err != nil { - return err - } - - return nil -} - -func (p *Poster) getChallenge(ctx context.Context, head block.TipSetKey, at abi.ChainEpoch) (abi.Randomness, error) { - buf := new(bytes.Buffer) - err := p.minerAddr.MarshalCBOR(buf) - if err != nil { - return nil, err - } - - return p.chain.SampleChainRandomness(ctx, head, acrypto.DomainSeparationTag_WindowedPoStChallengeSeed, at, buf.Bytes()) -} - -func (p *Poster) safeCancelPoSt() { - p.postMutex.Lock() - defer p.postMutex.Unlock() - - p.cancelPoSt() -} - -func (p *Poster) cancelPoSt() { - if p.postCancel != nil { - p.postCancel() - p.postCancel = nil - } -} diff --git a/internal/pkg/postgenerator/interface.go b/internal/pkg/postgenerator/interface.go deleted file mode 100644 index 5f6ed58ab1..0000000000 --- a/internal/pkg/postgenerator/interface.go +++ /dev/null @@ -1,12 +0,0 @@ -package postgenerator - -import ( - "context" - - "github.com/filecoin-project/specs-actors/actors/abi" -) - -// PoStGenerator defines a method set used to generate PoSts -type PoStGenerator interface { - GenerateWinningPoSt(ctx context.Context, minerID abi.ActorID, sectorInfo []abi.SectorInfo, randomness abi.PoStRandomness) ([]abi.PoStProof, error) -} diff --git a/internal/pkg/proofs/testing.go b/internal/pkg/proofs/testing.go deleted file mode 100644 index 407291f78d..0000000000 --- a/internal/pkg/proofs/testing.go +++ /dev/null @@ -1,30 +0,0 @@ -package proofs - -import ( - "context" - - "github.com/filecoin-project/sector-storage/ffiwrapper" - "github.com/filecoin-project/specs-actors/actors/abi" -) - -// FakeVerifier is a simple mock Verifier for testing. -type FakeVerifier struct { -} - -var _ ffiwrapper.Verifier = (*FakeVerifier)(nil) - -func (f *FakeVerifier) VerifySeal(abi.SealVerifyInfo) (bool, error) { - return true, nil -} - -func (f *FakeVerifier) VerifyWinningPoSt(context.Context, abi.WinningPoStVerifyInfo) (bool, error) { - return true, nil -} - -func (f *FakeVerifier) VerifyWindowPoSt(context.Context, abi.WindowPoStVerifyInfo) (bool, error) { - return true, nil -} - -func (f *FakeVerifier) GenerateWinningPoStSectorChallenge(context.Context, abi.RegisteredProof, abi.ActorID, abi.PoStRandomness, uint64) ([]uint64, error) { - return []uint64{}, nil -} diff --git a/internal/pkg/protocol/drand/drand_api.go b/internal/pkg/protocol/drand/drand_api.go deleted file mode 100644 index eefdb98abb..0000000000 --- a/internal/pkg/protocol/drand/drand_api.go +++ /dev/null @@ -1,106 +0,0 @@ -package drand - -import ( - "context" - "encoding/json" - - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" -) - -type Config interface { - ConfigSet(dottedPath string, paramJSON string) error -} - -type API struct { - drand drand.IFace - config Config -} - -// New creates a new API -func New(drand drand.IFace, config Config) *API { - return &API{ - drand: drand, - config: config, - } -} - -// Configure fetches group configuration from a drand server. -// It runs through the list of addrs trying each one to fetch the group config. -// Once the group is retrieved, the node's group key will be set in config. -// If overrideGroupAddrs is true, the given set of addresses will be set as the drand nodes. -// Otherwise drand address config will be set from the retrieved group info. The -// override is useful when the the drand server is behind NAT. -// This method assumes all drand nodes are secure or that all of them are not. This -// mis-models the drand config, but is unlikely to be false in practice. -func (api *API) Configure(addrs []string, secure bool, overrideGroupAddrs bool) error { - groupAddrs, keyCoeffs, genesisTime, roundSeconds, err := api.drand.FetchGroupConfig(addrs, secure, overrideGroupAddrs) - if err != nil { - return errors.Wrapf(err, "Could not retrieve drand group from %+v", addrs) - } - - jsonCoeffs, err := json.Marshal(keyCoeffs) - if err != nil { - return errors.New("Could not convert coefficients to json") - } - - err = api.config.ConfigSet("drand.distKey", string(jsonCoeffs)) - if err != nil { - return errors.Wrap(err, "Could not set dist key in config") - } - - if overrideGroupAddrs { - groupAddrs = addrs - } - - jsonAddrs, err := json.Marshal(groupAddrs) - if err != nil { - return errors.New("Could not convert addresses to json") - } - - err = api.config.ConfigSet("drand.addresses", string(jsonAddrs)) - if err != nil { - return errors.Wrap(err, "Could not set drand addresses in config") - } - - jsonSecure, err := json.Marshal(secure) - if err != nil { - return errors.New("Could not convert secure to json") - } - - err = api.config.ConfigSet("drand.secure", string(jsonSecure)) - if err != nil { - return errors.Wrap(err, "Could not set drand secure in config") - } - - jsonStart, err := json.Marshal(genesisTime) - if err != nil { - return errors.Wrap(err, "Could not convert startTimeUnix to json") - } - err = api.config.ConfigSet("drand.startTimeUnix", string(jsonStart)) - if err != nil { - return errors.Wrap(err, "Could not set drand start time unix in config") - } - - jsonRoundSeconds, err := json.Marshal(roundSeconds) - if err != nil { - return errors.Wrap(err, "Could not convert roundSeconds to json") - } - err = api.config.ConfigSet("drand.roundSeconds", string(jsonRoundSeconds)) - if err != nil { - return errors.Wrap(err, "Could not set drand round seconds in config") - } - - return nil -} - -// GetEntry retrieves an entry from the drand server -func (api *API) GetEntry(ctx context.Context, round drand.Round) (*drand.Entry, error) { - return api.drand.ReadEntry(ctx, round) -} - -// VerifyEntry verifies that child is a valid entry if its parent is. -func (api *API) VerifyEntry(parent, child *drand.Entry) (bool, error) { - return api.drand.VerifyEntry(parent, child) -} diff --git a/internal/pkg/protocol/mining/mining_api.go b/internal/pkg/protocol/mining/mining_api.go deleted file mode 100644 index 4ffc9c3d71..0000000000 --- a/internal/pkg/protocol/mining/mining_api.go +++ /dev/null @@ -1,110 +0,0 @@ -package mining - -import ( - "context" - - "github.com/filecoin-project/go-address" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - "github.com/filecoin-project/go-filecoin/internal/pkg/mining" - "github.com/pkg/errors" -) - -type miningChainReader interface { - GetHead() block.TipSetKey - GetTipSet(tsKey block.TipSetKey) (block.TipSet, error) -} - -// API provides an interface to the block mining protocol. -type API struct { - minerAddress func() (address.Address, error) - addNewBlockFunc func(context.Context, mining.FullBlock) (err error) - chainReader miningChainReader - isMiningFunc func() bool - setupMiningFunc func(context.Context) error - startMiningFunc func(context.Context) error - stopMiningFunc func(context.Context) - getWorkerFunc func(ctx context.Context) (*mining.DefaultWorker, error) - chainClock clock.ChainEpochClock -} - -// New creates a new API instance with the provided deps -func New( - minerAddr func() (address.Address, error), - addNewBlockFunc func(context.Context, mining.FullBlock) (err error), - chainReader miningChainReader, - isMiningFunc func() bool, - setupMiningFunc func(ctx context.Context) error, - startMiningFunc func(context.Context) error, - stopMiningfunc func(context.Context), - getWorkerFunc func(ctx context.Context) (*mining.DefaultWorker, error), - chainClock clock.ChainEpochClock, -) API { - return API{ - minerAddress: minerAddr, - addNewBlockFunc: addNewBlockFunc, - chainReader: chainReader, - isMiningFunc: isMiningFunc, - setupMiningFunc: setupMiningFunc, - startMiningFunc: startMiningFunc, - stopMiningFunc: stopMiningfunc, - getWorkerFunc: getWorkerFunc, - chainClock: chainClock, - } -} - -// MinerAddress returns the mining address the API is using, an error is -// returned if the mining address is not set. -func (a *API) MinerAddress() (address.Address, error) { - return a.minerAddress() -} - -// MiningIsActive calls the node's IsMining function -func (a *API) MiningIsActive() bool { - return a.isMiningFunc() -} - -// MiningOnce mines and returns a single block based on the current chain head. -// It tries each epoch in turn until it finds a winner. -func (a *API) MiningOnce(ctx context.Context) (*block.Block, error) { - if a.isMiningFunc() { - return nil, errors.New("Node is already mining") - } - - ts, err := a.chainReader.GetTipSet(a.chainReader.GetHead()) - if err != nil { - return nil, err - } - - miningWorker, err := a.getWorkerFunc(ctx) - if err != nil { - return nil, err - } - - res, err := mining.MineOnce(ctx, *miningWorker, ts) - if err != nil { - return nil, err - } - - if err := a.addNewBlockFunc(ctx, *res); err != nil { - return nil, err - } - - return res.Header, nil -} - -// MiningSetup sets up a storage miner without running repeated tasks like mining -func (a *API) MiningSetup(ctx context.Context) error { - return a.setupMiningFunc(ctx) -} - -// MiningStart calls the node's StartMining function -func (a *API) MiningStart(ctx context.Context) error { - return a.startMiningFunc(ctx) -} - -// MiningStop calls the node's StopMining function -func (a *API) MiningStop(ctx context.Context) { - a.stopMiningFunc(ctx) -} diff --git a/internal/pkg/protocol/mining/mining_api_test.go b/internal/pkg/protocol/mining/mining_api_test.go deleted file mode 100644 index a9d8a32ab2..0000000000 --- a/internal/pkg/protocol/mining/mining_api_test.go +++ /dev/null @@ -1,156 +0,0 @@ -package mining_test - -import ( - "context" - "testing" - - bapi "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/mining" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestTrivialNew(t *testing.T) { - tf.UnitTest(t) - - api, _ := newAPI(t) - require.NotNil(t, api) -} - -func TestAPI_MineOnce(t *testing.T) { - tf.UnitTest(t) - t.Skip("Unskip with fake proofs") - - ctx := context.Background() - api, nd := newAPI(t) - require.NoError(t, nd.Start(ctx)) - defer nd.Stop(ctx) - - blk, err := api.MiningOnce(ctx) - require.Nil(t, err) - require.NotNil(t, blk) -} - -func TestMiningAPI_MiningSetup(t *testing.T) { - tf.UnitTest(t) - t.Skip("turn back on once vm integration is complete") - - ctx := context.Background() - api, nd := newAPI(t) - require.NoError(t, nd.Start(ctx)) - defer nd.Stop(ctx) - - require.NoError(t, api.MiningSetup(ctx)) - assert.NotNil(t, nd.PieceManager()) -} - -func TestMiningAPI_MiningStart(t *testing.T) { - tf.UnitTest(t) - t.Skip("turn back on once vm integration is complete") - - ctx := context.Background() - api, nd := newAPI(t) - require.NoError(t, nd.Start(ctx)) - defer nd.Stop(ctx) - - require.NoError(t, api.MiningStart(ctx)) - assert.True(t, nd.IsMining()) - nd.StopMining(ctx) -} - -func TestMiningAPI_MiningIsActive(t *testing.T) { - tf.UnitTest(t) - t.Skip("turn back on once vm integration is complete") - - ctx := context.Background() - api, nd := newAPI(t) - require.NoError(t, nd.Start(ctx)) - defer nd.Stop(ctx) - - require.NoError(t, nd.StartMining(ctx)) - assert.True(t, api.MiningIsActive()) - nd.StopMining(ctx) - assert.False(t, api.MiningIsActive()) - - nd.StopMining(ctx) -} - -func TestMiningAPI_MiningStop(t *testing.T) { - tf.UnitTest(t) - t.Skip("turn back on once vm integration is complete") - - ctx := context.Background() - api, nd := newAPI(t) - require.NoError(t, nd.Start(ctx)) - defer nd.Stop(ctx) - - require.NoError(t, nd.StartMining(ctx)) - api.MiningStop(ctx) - assert.False(t, nd.IsMining()) -} - -func TestMiningAPI_MiningAddress(t *testing.T) { - tf.UnitTest(t) - t.Skip("turn back on once vm integration is complete") - - ctx := context.Background() - api, nd := newAPI(t) - - require.NoError(t, nd.Start(ctx)) - defer nd.Stop(ctx) - - require.NoError(t, nd.StartMining(ctx)) - - maybeAddress, err := api.MinerAddress() - require.NoError(t, err) - minerAddress, err := nd.MiningAddress() - require.NoError(t, err) - - assert.Equal(t, minerAddress, maybeAddress) - - nd.StopMining(ctx) -} - -func TestMiningAPI_MiningTogether(t *testing.T) { - tf.UnitTest(t) - t.Skip("Ready to unskip with fake proofs") - - ctx := context.Background() - api, nd := newAPI(t) - require.NoError(t, nd.Start(ctx)) - defer nd.Stop(ctx) - - require.NoError(t, api.MiningStart(ctx)) - assert.True(t, nd.IsMining()) - blk, err := api.MiningOnce(ctx) - require.Nil(t, blk) - require.Contains(t, err.Error(), "Node is already mining") - nd.StopMining(ctx) - blk, err = api.MiningOnce(ctx) - require.Nil(t, err) - require.NotNil(t, blk) -} - -func newAPI(t *testing.T) (bapi.API, *node.Node) { - seed := node.MakeChainSeed(t, node.MakeTestGenCfg(t, 100)) - ctx := context.Background() - builder := test.NewNodeBuilder(t) - builder.WithGenesisInit(seed.GenesisInitFunc) - nd := builder.Build(ctx) - seed.GiveKey(t, nd, 0) - seed.GiveMiner(t, nd, 0) // TODO: go-fil-markets integration - return bapi.New( - nd.MiningAddress, - nd.AddNewBlock, - nd.Chain().ChainReader, - nd.IsMining, - nd.SetupMining, - nd.StartMining, - nd.StopMining, - nd.CreateMiningWorker, - nd.ChainClock, - ), nd -} diff --git a/internal/pkg/protocol/retrieval/api.go b/internal/pkg/protocol/retrieval/api.go deleted file mode 100644 index a901577ff9..0000000000 --- a/internal/pkg/protocol/retrieval/api.go +++ /dev/null @@ -1,11 +0,0 @@ -package retrieval - -import ( - iface "github.com/filecoin-project/go-fil-markets/retrievalmarket" -) - -// API is the retrieval api for the test environment -type API interface { - Client() iface.RetrievalClient - Provider() iface.RetrievalProvider -} diff --git a/internal/pkg/protocol/retrieval/doc.go b/internal/pkg/protocol/retrieval/doc.go deleted file mode 100644 index f31f24ec14..0000000000 --- a/internal/pkg/protocol/retrieval/doc.go +++ /dev/null @@ -1,8 +0,0 @@ -// Package retrieval implements a very simple retrieval protocol that works on high level like this: -// -// 1. CLIENT opens /fil/retrieval/free/0.0.0 stream to MINER -// 2. CLIENT sends MINER a RetrievePieceRequest -// 3. MINER sends CLIENT a RetrievePieceResponse with Status set to Success if it has PieceRef in a sealed sector -// 4. MINER sends CLIENT RetrievePieceChunks until all data associated with PieceRef has been sent -// 5. CLIENT reads RetrievePieceChunk from stream until EOF and then closes stream -package retrieval diff --git a/internal/pkg/protocol/retrieval/retrieval_protocol_test.go b/internal/pkg/protocol/retrieval/retrieval_protocol_test.go deleted file mode 100644 index 27e232defa..0000000000 --- a/internal/pkg/protocol/retrieval/retrieval_protocol_test.go +++ /dev/null @@ -1,86 +0,0 @@ -package retrieval_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-cid" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/node/test" - "github.com/filecoin-project/go-filecoin/internal/pkg/protocol/retrieval" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -// NOTE: The test TestRetrievalProtocolHappyPath has been deleted due to flakiness. -// Coverage of this feature has been relegated to the functional-tests/retrieval script. -// See https://github.com/filecoin-project/go-filecoin/pull/1643 - -func TestRetrievalProtocolPieceNotFound(t *testing.T) { - t.Skip("Skip pending retrieval market shared component") - tf.UnitTest(t) - - //ctx := context.Background() - - //minerNode, _, minerAddr, _ := configureMinerAndClient(t) - - //require.NoError(t, minerNode.StartMining(ctx)) - //defer minerNode.StopMining(ctx) - - //someRandomCid := types.NewCidForTestGetter()() - // - //minerPID, err := minerNode.PorcelainAPI.MinerGetPeerID(ctx, minerAddr) - //require.NoError(t, err) - - //_, err = retrievePieceBytes(ctx, minerNode.RetrievalProtocol.RetrievalProvider, someRandomCid, minerPID, minerAddr) - //require.Error(t, err) -} - -func retrievePieceBytes(ctx context.Context, retrievalAPI *retrieval.API, data cid.Cid, minerPID peer.ID, addr address.Address) ([]byte, error) { // nolint: deadcode - //r, err := retrievalAPI.RetrievePiece(ctx, data, minerPID, addr) - //if err != nil { - // return nil, err - //} - // - //slice, err := ioutil.ReadAll(r) - //if err != nil { - // return nil, err - //} - // - //return slice, nil - return nil, nil -} - -func configureMinerAndClient(t *testing.T) (minerNode *node.Node, clientNode *node.Node, minerAddr address.Address, minerOwnerAddr address.Address) { // nolint: deadcode - ctx := context.Background() - - seed := node.MakeChainSeed(t, node.MakeTestGenCfg(t, 100)) - builder1 := test.NewNodeBuilder(t) - builder1.WithInitOpt(node.PeerKeyOpt(node.PeerKeys[0])) - builder1.WithGenesisInit(seed.GenesisInitFunc) - builder2 := test.NewNodeBuilder(t) - builder2.WithGenesisInit(seed.GenesisInitFunc) - - // make two nodes, one of which is the minerNode (and gets the miner peer key) - minerNode = builder1.Build(ctx) - clientNode = builder2.Build(ctx) - - // give the minerNode node a key and the miner associated with that key - seed.GiveKey(t, minerNode, 0) - minerAddr, minerOwnerAddr = seed.GiveMiner(t, minerNode, 0) - - // give the clientNode node a private key, too - seed.GiveKey(t, clientNode, 1) - - // start 'em up - require.NoError(t, minerNode.Start(ctx)) - require.NoError(t, clientNode.Start(ctx)) - - // make sure they're swarmed together (for block propagation) - node.ConnectNodes(t, minerNode, clientNode) - - return -} diff --git a/internal/pkg/protocol/retrieval/types.go b/internal/pkg/protocol/retrieval/types.go deleted file mode 100644 index b95e7c3b74..0000000000 --- a/internal/pkg/protocol/retrieval/types.go +++ /dev/null @@ -1,35 +0,0 @@ -package retrieval - -import ( - "github.com/ipfs/go-cid" -) - -// RetrievePieceStatus communicates a successful (or failed) piece retrieval -type RetrievePieceStatus int - -const ( - // Unset is the default status - Unset = RetrievePieceStatus(iota) - - // Failure indicates that the piece could not be retrieved from the miner - Failure - - // Success means that the piece could be retrieved from the miner - Success -) - -// RetrievePieceRequest represents a retrieval miner's request for content. -type RetrievePieceRequest struct { - PieceRef cid.Cid -} - -// RetrievePieceResponse contains the requested content. -type RetrievePieceResponse struct { - Status RetrievePieceStatus - ErrorMessage string -} - -// RetrievePieceChunk is a subset of bytes for a piece being retrieved. -type RetrievePieceChunk struct { - Data []byte -} diff --git a/internal/pkg/protocol/storage/api.go b/internal/pkg/protocol/storage/api.go deleted file mode 100644 index 597f56df5b..0000000000 --- a/internal/pkg/protocol/storage/api.go +++ /dev/null @@ -1,92 +0,0 @@ -package storage - -import ( - "context" - - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/filecoin-project/go-filecoin/internal/pkg/piecemanager" - "github.com/filecoin-project/specs-actors/actors/abi" -) - -type storage interface { - Client() storagemarket.StorageClient - Provider() (storagemarket.StorageProvider, error) - PieceManager() (piecemanager.PieceManager, error) -} - -// API is the storage API for the test environment -type API struct { - storage storage -} - -// NewAPI creates a new API -func NewAPI(storage storage) *API { - return &API{storage} -} - -// PledgeSector creates a new, empty sector and seals it. -func (api *API) PledgeSector(ctx context.Context) error { - pm, err := api.storage.PieceManager() - if err != nil { - return err - } - - return pm.PledgeSector(ctx) -} - -// AddAsk stores a new price for storage -func (api *API) AddAsk(price abi.TokenAmount, duration abi.ChainEpoch) error { - provider, err := api.storage.Provider() - if err != nil { - return err - } - - return provider.AddAsk(price, duration) -} - -// ListAsks lists all asks for the miner -func (api *API) ListAsks(maddr address.Address) ([]*storagemarket.SignedStorageAsk, error) { - provider, err := api.storage.Provider() - if err != nil { - return nil, err - } - - return provider.ListAsks(maddr), nil -} - -// ProposeStorageDeal proposes a storage deal -func (api *API) ProposeStorageDeal( - ctx context.Context, - addr address.Address, - info *storagemarket.StorageProviderInfo, - data *storagemarket.DataRef, - startEpoch abi.ChainEpoch, - endEpoch abi.ChainEpoch, - price abi.TokenAmount, - collateral abi.TokenAmount, - rt abi.RegisteredProof, -) (*storagemarket.ProposeStorageDealResult, error) { - return api.storage.Client().ProposeStorageDeal(ctx, addr, info, data, startEpoch, endEpoch, price, collateral, rt) -} - -// GetStorageDeal retrieves information about an in-progress deal -func (api *API) GetStorageDeal(ctx context.Context, c cid.Cid) (storagemarket.ClientDeal, error) { - return api.storage.Client().GetLocalDeal(ctx, c) -} - -// GetClientDeals retrieves information about a in-progress deals on th miner side -func (api *API) GetClientDeals(ctx context.Context) ([]storagemarket.ClientDeal, error) { - return api.storage.Client().ListLocalDeals(ctx) -} - -// GetProviderDeals retrieves information about a in-progress deals on th miner side -func (api *API) GetProviderDeals(ctx context.Context) ([]storagemarket.MinerDeal, error) { - provider, err := api.storage.Provider() - if err != nil { - return nil, err - } - return provider.ListLocalDeals() -} diff --git a/internal/pkg/repo/fsrepo.go b/internal/pkg/repo/fsrepo.go deleted file mode 100644 index 732ce29a4b..0000000000 --- a/internal/pkg/repo/fsrepo.go +++ /dev/null @@ -1,598 +0,0 @@ -package repo - -import ( - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - "strconv" - "strings" - "sync" - "time" - - ds "github.com/ipfs/go-datastore" - badgerds "github.com/ipfs/go-ds-badger2" - lockfile "github.com/ipfs/go-fs-lock" - keystore "github.com/ipfs/go-ipfs-keystore" - logging "github.com/ipfs/go-log/v2" - "github.com/mitchellh/go-homedir" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/config" -) - -const ( - // apiFile is the filename containing the filecoin node's api address. - apiFile = "api" - configFilename = "config.json" - tempConfigFilename = ".config.json.temp" - lockFile = "repo.lock" - versionFilename = "version" - walletDatastorePrefix = "wallet" - chainDatastorePrefix = "chain" - dealsDatastorePrefix = "deals" - snapshotStorePrefix = "snapshots" - snapshotFilenamePrefix = "snapshot" -) - -var log = logging.Logger("repo") - -// FSRepo is a repo implementation backed by a filesystem. -type FSRepo struct { - // Path to the repo root directory. - path string - version uint - - // lk protects the config file - lk sync.RWMutex - cfg *config.Config - - ds Datastore - keystore keystore.Keystore - walletDs Datastore - chainDs Datastore - dealsDs Datastore - - // lockfile is the file system lock to prevent others from opening the same repo. - lockfile io.Closer -} - -var _ Repo = (*FSRepo)(nil) - -// InitFSRepo initializes a new repo at the target path with the provided configuration. -// The successful result creates a symlink at targetPath pointing to a sibling directory -// named with a timestamp and repo version number. -// The link path must be empty prior. If the computed actual directory exists, it must be empty. -func InitFSRepo(targetPath string, version uint, cfg *config.Config) error { - linkPath, err := homedir.Expand(targetPath) - if err != nil { - return err - } - - container, basename := filepath.Split(linkPath) - if container == "" { // path contained no separator - container = "./" - } - - dirpath := container + MakeRepoDirName(basename, time.Now(), version, 0) - - exists, err := fileExists(linkPath) - if err != nil { - return errors.Wrapf(err, "error inspecting repo symlink path %s", linkPath) - } else if exists { - return errors.Errorf("refusing to init repo symlink at %s, file exists", linkPath) - } - - // Create the actual directory and then the link to it. - if err = InitFSRepoDirect(dirpath, version, cfg); err != nil { - return err - } - if err = os.Symlink(dirpath, linkPath); err != nil { - return err - } - - return nil -} - -// InitFSRepoDirect initializes a new repo at a target path, establishing a provided configuration. -// The target path must not exist, or must reference an empty, read/writable directory. -func InitFSRepoDirect(targetPath string, version uint, cfg *config.Config) error { - repoPath, err := homedir.Expand(targetPath) - if err != nil { - return err - } - - if err := ensureWritableDirectory(repoPath); err != nil { - return errors.Wrap(err, "no writable directory") - } - - empty, err := isEmptyDir(repoPath) - if err != nil { - return errors.Wrapf(err, "failed to list repo directory %s", repoPath) - } - if !empty { - return fmt.Errorf("refusing to initialize repo in non-empty directory %s", repoPath) - } - - if err := WriteVersion(repoPath, version); err != nil { - return errors.Wrap(err, "initializing repo version failed") - } - - if err := initConfig(repoPath, cfg); err != nil { - return errors.Wrap(err, "initializing config file failed") - } - return nil -} - -// OpenFSRepo opens an initialized fsrepo, expecting a specific version. -// The provided path may be to a directory, or a symbolic link pointing at a directory, which -// will be resolved just once at open. -func OpenFSRepo(repoPath string, version uint) (*FSRepo, error) { - repoPath, err := homedir.Expand(repoPath) - if err != nil { - return nil, err - } - - hasConfig, err := hasConfig(repoPath) - if err != nil { - return nil, errors.Wrap(err, "failed to check for repo config") - } - - if !hasConfig { - return nil, errors.Errorf("no repo found at %s; run: 'go-filecoin init [--repodir=%s]'", repoPath, repoPath) - } - - info, err := os.Stat(repoPath) - if err != nil { - return nil, errors.Wrapf(err, "failed to stat repo link %s", repoPath) - } - - // Resolve path if it's a symlink. - var actualPath string - if info.IsDir() { - actualPath = repoPath - } else { - actualPath, err = os.Readlink(repoPath) - if err != nil { - return nil, errors.Wrapf(err, "failed to follow repo symlink %s", repoPath) - } - } - - r := &FSRepo{path: actualPath, version: version} - - r.lockfile, err = lockfile.Lock(r.path, lockFile) - if err != nil { - return nil, errors.Wrap(err, "failed to take repo lock") - } - - if err := r.loadFromDisk(); err != nil { - _ = r.lockfile.Close() - return nil, err - } - - return r, nil -} - -// MakeRepoDirName constructs a name for a concrete repo directory, which includes its -// version number and a timestamp. The name will begin with prefix and, if uniqueifier is -// non-zero, end with that (intended as an ordinal for finding a free name). -// E.g. ".filecoin-20190102-140425-012-1 -// This is exported for use by migrations. -func MakeRepoDirName(prefix string, ts time.Time, version uint, uniqueifier uint) string { - name := strings.Join([]string{ - prefix, - ts.Format("20060102-150405"), - fmt.Sprintf("v%03d", version), - }, "-") - if uniqueifier != 0 { - name = name + fmt.Sprintf("-%d", uniqueifier) - } - return name -} - -func (r *FSRepo) loadFromDisk() error { - localVersion, err := r.readVersion() - if err != nil { - return errors.Wrap(err, "failed to read version") - } - - if localVersion < r.version { - return fmt.Errorf("out of date repo version, got %d expected %d. Migrate with tools/migration/go-filecoin-migrate", localVersion, Version) - } - - if localVersion > r.version { - return fmt.Errorf("binary needs update to handle repo version, got %d expected %d. Update binary to latest release", localVersion, Version) - } - - if err := r.loadConfig(); err != nil { - return errors.Wrap(err, "failed to load config file") - } - - if err := r.openDatastore(); err != nil { - return errors.Wrap(err, "failed to open datastore") - } - - if err := r.openKeystore(); err != nil { - return errors.Wrap(err, "failed to open keystore") - } - - if err := r.openWalletDatastore(); err != nil { - return errors.Wrap(err, "failed to open wallet datastore") - } - - if err := r.openChainDatastore(); err != nil { - return errors.Wrap(err, "failed to open chain datastore") - } - - if err := r.openDealsDatastore(); err != nil { - return errors.Wrap(err, "failed to open deals datastore") - } - return nil -} - -// Config returns the configuration object. -func (r *FSRepo) Config() *config.Config { - r.lk.RLock() - defer r.lk.RUnlock() - - return r.cfg -} - -// ReplaceConfig replaces the current config with the newly passed in one. -func (r *FSRepo) ReplaceConfig(cfg *config.Config) error { - if err := r.SnapshotConfig(r.Config()); err != nil { - log.Warnf("failed to create snapshot: %s", err.Error()) - } - r.lk.Lock() - defer r.lk.Unlock() - - r.cfg = cfg - tmp := filepath.Join(r.path, tempConfigFilename) - err := os.RemoveAll(tmp) - if err != nil { - return err - } - err = r.cfg.WriteFile(tmp) - if err != nil { - return err - } - return os.Rename(tmp, filepath.Join(r.path, configFilename)) -} - -// SnapshotConfig stores a copy `cfg` in /snapshots/ appending the -// time of snapshot to the filename. -func (r *FSRepo) SnapshotConfig(cfg *config.Config) error { - snapshotFile := filepath.Join(r.path, snapshotStorePrefix, genSnapshotFileName()) - exists, err := fileExists(snapshotFile) - if err != nil { - return errors.Wrap(err, "error checking snapshot file") - } else if exists { - // this should never happen - return fmt.Errorf("file already exists: %s", snapshotFile) - } - return cfg.WriteFile(snapshotFile) -} - -// Datastore returns the datastore. -func (r *FSRepo) Datastore() ds.Batching { - return r.ds -} - -// WalletDatastore returns the wallet datastore. -func (r *FSRepo) WalletDatastore() Datastore { - return r.walletDs -} - -// ChainDatastore returns the chain datastore. -func (r *FSRepo) ChainDatastore() Datastore { - return r.chainDs -} - -// DealsDatastore returns the deals datastore. -func (r *FSRepo) DealsDatastore() Datastore { - return r.dealsDs -} - -// Version returns the version of the repo -func (r *FSRepo) Version() uint { - return r.version -} - -// Keystore returns the keystore -func (r *FSRepo) Keystore() keystore.Keystore { - return r.keystore -} - -// Close closes the repo. -func (r *FSRepo) Close() error { - if err := r.ds.Close(); err != nil { - return errors.Wrap(err, "failed to close datastore") - } - - if err := r.walletDs.Close(); err != nil { - return errors.Wrap(err, "failed to close wallet datastore") - } - - if err := r.chainDs.Close(); err != nil { - return errors.Wrap(err, "failed to close chain datastore") - } - - if err := r.dealsDs.Close(); err != nil { - return errors.Wrap(err, "failed to close miner deals datastore") - } - - if err := r.removeAPIFile(); err != nil { - return errors.Wrap(err, "error removing API file") - } - - return r.lockfile.Close() -} - -func (r *FSRepo) removeFile(path string) error { - if err := os.Remove(path); err != nil && !os.IsNotExist(err) { - return err - } - - return nil -} - -func (r *FSRepo) removeAPIFile() error { - return r.removeFile(filepath.Join(r.path, apiFile)) -} - -// Tests whether a repo directory contains the expected config file. -func hasConfig(p string) (bool, error) { - configPath := filepath.Join(p, configFilename) - - _, err := os.Lstat(configPath) - switch { - case err == nil: - return true, nil - case os.IsNotExist(err): - return false, nil - default: - return false, err - } -} - -func (r *FSRepo) loadConfig() error { - configFile := filepath.Join(r.path, configFilename) - - cfg, err := config.ReadFile(configFile) - if err != nil { - return errors.Wrapf(err, "failed to read config file at %q", configFile) - } - - r.cfg = cfg - return nil -} - -// readVersion reads the repo's version file (but does not change r.version). -func (r *FSRepo) readVersion() (uint, error) { - content, err := ReadVersion(r.path) - if err != nil { - return 0, err - } - - version, err := strconv.Atoi(content) - if err != nil { - return 0, errors.New("corrupt version file: version is not an integer") - } - - return uint(version), nil -} - -func (r *FSRepo) openDatastore() error { - switch r.cfg.Datastore.Type { - case "badgerds": - ds, err := badgerds.NewDatastore(filepath.Join(r.path, r.cfg.Datastore.Path), badgerOptions()) - if err != nil { - return err - } - r.ds = ds - default: - return fmt.Errorf("unknown datastore type in config: %s", r.cfg.Datastore.Type) - } - - return nil -} - -func (r *FSRepo) openKeystore() error { - ksp := filepath.Join(r.path, "keystore") - - ks, err := keystore.NewFSKeystore(ksp) - if err != nil { - return err - } - - r.keystore = ks - - return nil -} - -func (r *FSRepo) openChainDatastore() error { - ds, err := badgerds.NewDatastore(filepath.Join(r.path, chainDatastorePrefix), badgerOptions()) - if err != nil { - return err - } - - r.chainDs = ds - - return nil -} - -func (r *FSRepo) openWalletDatastore() error { - // TODO: read wallet datastore info from config, use that to open it up - ds, err := badgerds.NewDatastore(filepath.Join(r.path, walletDatastorePrefix), badgerOptions()) - if err != nil { - return err - } - - r.walletDs = ds - - return nil -} - -func (r *FSRepo) openDealsDatastore() error { - ds, err := badgerds.NewDatastore(filepath.Join(r.path, dealsDatastorePrefix), badgerOptions()) - if err != nil { - return err - } - - r.dealsDs = ds - - return nil -} - -// WriteVersion writes the given version to the repo version file. -func WriteVersion(p string, version uint) error { - return ioutil.WriteFile(filepath.Join(p, versionFilename), []byte(strconv.Itoa(int(version))), 0644) -} - -// ReadVersion returns the unparsed (string) version -// from the version file in the specified repo. -func ReadVersion(repoPath string) (string, error) { - file, err := ioutil.ReadFile(filepath.Join(repoPath, versionFilename)) - if err != nil { - return "", err - } - return strings.Trim(string(file), "\n"), nil -} - -func initConfig(p string, cfg *config.Config) error { - configFile := filepath.Join(p, configFilename) - exists, err := fileExists(configFile) - if err != nil { - return errors.Wrap(err, "error inspecting config file") - } else if exists { - return fmt.Errorf("config file already exists: %s", configFile) - } - - if err := cfg.WriteFile(configFile); err != nil { - return err - } - - // make the snapshot dir - snapshotDir := filepath.Join(p, snapshotStorePrefix) - return ensureWritableDirectory(snapshotDir) -} - -func genSnapshotFileName() string { - return fmt.Sprintf("%s-%d.json", snapshotFilenamePrefix, time.Now().UTC().UnixNano()) -} - -// Ensures that path points to a read/writable directory, creating it if necessary. -func ensureWritableDirectory(path string) error { - // Attempt to create the requested directory, accepting that something might already be there. - err := os.Mkdir(path, 0775) - - if err == nil { - return nil // Skip the checks below, we just created it. - } else if !os.IsExist(err) { - return errors.Wrapf(err, "failed to create directory %s", path) - } - - // Inspect existing directory. - stat, err := os.Stat(path) - if err != nil { - return errors.Wrapf(err, "failed to stat path \"%s\"", path) - } - if !stat.IsDir() { - return errors.Errorf("%s is not a directory", path) - } - if (stat.Mode() & 0600) != 0600 { - return errors.Errorf("insufficient permissions for path %s, got %04o need %04o", path, stat.Mode(), 0600) - } - return nil -} - -// Tests whether the directory at path is empty -func isEmptyDir(path string) (bool, error) { - infos, err := ioutil.ReadDir(path) - if err != nil { - return false, err - } - return len(infos) == 0, nil -} - -func fileExists(file string) (bool, error) { - _, err := os.Stat(file) - if err == nil { - return true, nil - } - if os.IsNotExist(err) { - return false, nil - } - return false, err -} - -// SetAPIAddr writes the address to the API file. SetAPIAddr expects parameter -// `port` to be of the form `:`. -func (r *FSRepo) SetAPIAddr(maddr string) error { - f, err := os.Create(filepath.Join(r.path, apiFile)) - if err != nil { - return errors.Wrap(err, "could not create API file") - } - - defer f.Close() // nolint: errcheck - - _, err = f.WriteString(maddr) - if err != nil { - // If we encounter an error writing to the API file, - // delete the API file. The error encountered while - // deleting the API file will be returned (if one - // exists) instead of the write-error. - if err := r.removeAPIFile(); err != nil { - return errors.Wrap(err, "failed to remove API file") - } - - return errors.Wrap(err, "failed to write to API file") - } - - return nil -} - -// Path returns the path the fsrepo is at -func (r *FSRepo) Path() (string, error) { - return r.path, nil -} - -// JournalPath returns the path the journal is at. -func (r *FSRepo) JournalPath() string { - return fmt.Sprintf("%s/journal.json", r.path) -} - -// APIAddrFromRepoPath returns the api addr from the filecoin repo -func APIAddrFromRepoPath(repoPath string) (string, error) { - repoPath, err := homedir.Expand(repoPath) - if err != nil { - return "", errors.Wrap(err, fmt.Sprintf("can't resolve local repo path %s", repoPath)) - } - return apiAddrFromFile(filepath.Join(repoPath, apiFile)) -} - -// APIAddrFromFile reads the address from the API file at the given path. -// A relevant comment from a similar function at go-ipfs/repo/fsrepo/fsrepo.go: -// This is a concurrent operation, meaning that any process may read this file. -// Modifying this file, therefore, should use "mv" to replace the whole file -// and avoid interleaved read/writes -func apiAddrFromFile(apiFilePath string) (string, error) { - contents, err := ioutil.ReadFile(apiFilePath) - if err != nil { - return "", errors.Wrap(err, "failed to read API file") - } - - return string(contents), nil -} - -// APIAddr reads the FSRepo's api file and returns the api address -func (r *FSRepo) APIAddr() (string, error) { - return apiAddrFromFile(filepath.Join(filepath.Clean(r.path), apiFile)) -} - -func badgerOptions() *badgerds.Options { - result := &badgerds.DefaultOptions - result.Truncate = true - return result -} diff --git a/internal/pkg/repo/mem.go b/internal/pkg/repo/mem.go deleted file mode 100644 index 0d8c3931b7..0000000000 --- a/internal/pkg/repo/mem.go +++ /dev/null @@ -1,116 +0,0 @@ -package repo - -import ( - "sync" - - "github.com/ipfs/go-datastore" - dss "github.com/ipfs/go-datastore/sync" - "github.com/ipfs/go-ipfs-keystore" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/paths" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" -) - -// MemRepo is an in-memory implementation of the Repo interface. -type MemRepo struct { - // lk guards the config - lk sync.RWMutex - C *config.Config - D Datastore - Ks keystore.Keystore - W Datastore - Chain Datastore - DealsDs Datastore - version uint - apiAddress string -} - -var _ Repo = (*MemRepo)(nil) - -// NewInMemoryRepo makes a new instance of MemRepo -func NewInMemoryRepo() *MemRepo { - return &MemRepo{ - C: config.NewDefaultConfig(), - D: dss.MutexWrap(datastore.NewMapDatastore()), - Ks: keystore.MutexWrap(keystore.NewMemKeystore()), - W: dss.MutexWrap(datastore.NewMapDatastore()), - Chain: dss.MutexWrap(datastore.NewMapDatastore()), - DealsDs: dss.MutexWrap(datastore.NewMapDatastore()), - version: Version, - } -} - -// Config returns the configuration object. -func (mr *MemRepo) Config() *config.Config { - mr.lk.RLock() - defer mr.lk.RUnlock() - - return mr.C -} - -// ReplaceConfig replaces the current config with the newly passed in one. -func (mr *MemRepo) ReplaceConfig(cfg *config.Config) error { - mr.lk.Lock() - defer mr.lk.Unlock() - - mr.C = cfg - - return nil -} - -// Datastore returns the datastore. -func (mr *MemRepo) Datastore() datastore.Batching { - return mr.D -} - -// Keystore returns the keystore. -func (mr *MemRepo) Keystore() keystore.Keystore { - return mr.Ks -} - -// WalletDatastore returns the wallet datastore. -func (mr *MemRepo) WalletDatastore() Datastore { - return mr.W -} - -// ChainDatastore returns the chain datastore. -func (mr *MemRepo) ChainDatastore() Datastore { - return mr.Chain -} - -// DealsDatastore returns the deals datastore for miners. -func (mr *MemRepo) DealsDatastore() Datastore { - return mr.DealsDs -} - -// Version returns the version of the repo. -func (mr *MemRepo) Version() uint { - return mr.version -} - -// Close deletes the temporary directories which hold staged piece data and -// sealed sectors. -func (mr *MemRepo) Close() error { - return nil -} - -// SetAPIAddr writes the address of the running API to memory. -func (mr *MemRepo) SetAPIAddr(addr string) error { - mr.apiAddress = addr - return nil -} - -// APIAddr reads the address of the running API from memory. -func (mr *MemRepo) APIAddr() (string, error) { - return mr.apiAddress, nil -} - -// Path returns the default path. -func (mr *MemRepo) Path() (string, error) { - return paths.GetRepoPath("") -} - -// JournalPath returns a string to satisfy the repo interface. -func (mr *MemRepo) JournalPath() string { - return "in_memory_filecoin_journal_path" -} diff --git a/internal/pkg/repo/repo.go b/internal/pkg/repo/repo.go deleted file mode 100644 index 46afed7894..0000000000 --- a/internal/pkg/repo/repo.go +++ /dev/null @@ -1,58 +0,0 @@ -package repo - -import ( - "github.com/ipfs/go-datastore" - ds "github.com/ipfs/go-datastore" - keystore "github.com/ipfs/go-ipfs-keystore" - - "github.com/filecoin-project/go-filecoin/internal/pkg/config" -) - -// Version is the version of repo schema that this code understands. -const Version uint = 2 - -// Datastore is the datastore interface provided by the repo -type Datastore interface { - // NB: there are other more featureful interfaces we could require here, we - // can either force it, or just do hopeful type checks. Not all datastores - // implement every feature. - datastore.Batching -} - -// Repo is a representation of all persistent data in a filecoin node. -type Repo interface { - Config() *config.Config - // ReplaceConfig replaces the current config, with the newly passed in one. - ReplaceConfig(cfg *config.Config) error - - // Datastore is a general storage solution for things like blocks. - Datastore() ds.Batching - Keystore() keystore.Keystore - - // WalletDatastore is a specific storage solution, only used to store sensitive wallet information. - WalletDatastore() Datastore - - // ChainDatastore is a specific storage solution, only used to store already validated chain data. - ChainDatastore() Datastore - - // DealsDatastore holds deals data. - DealsDatastore() Datastore - - // SetAPIAddr sets the address of the running API. - SetAPIAddr(string) error - - // APIAddr returns the address of the running API. - APIAddr() (string, error) - - // Version returns the current repo version. - Version() uint - - // Path returns the repo path. - Path() (string, error) - - // JournalPath returns the journal path. - JournalPath() string - - // Close shuts down the repo. - Close() error -} diff --git a/internal/pkg/slashing/check.go b/internal/pkg/slashing/check.go deleted file mode 100644 index aa90b212a6..0000000000 --- a/internal/pkg/slashing/check.go +++ /dev/null @@ -1,137 +0,0 @@ -package slashing - -import ( - "bytes" - "context" - "fmt" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" -) - -type FaultStateView interface { - state.AccountStateView - MinerControlAddresses(ctx context.Context, maddr address.Address) (owner, worker address.Address, err error) -} - -// Chain state required for checking consensus fault reports. -type chainReader interface { - GetTipSet(block.TipSetKey) (block.TipSet, error) -} - -// Checks the validity of reported consensus faults. -type ConsensusFaultChecker struct { - chain chainReader -} - -func NewFaultChecker(chain chainReader) *ConsensusFaultChecker { - return &ConsensusFaultChecker{chain: chain} -} - -// Checks the validity of a consensus fault reported by serialized block headers h1, h2, and optional -// common-ancestor witness h3. -func (s *ConsensusFaultChecker) VerifyConsensusFault(ctx context.Context, h1, h2, extra []byte, head block.TipSetKey, view FaultStateView) (*runtime.ConsensusFault, error) { - if bytes.Equal(h1, h2) { - return nil, fmt.Errorf("no consensus fault: blocks identical") - } - - var b1, b2, b3 block.Block - innerErr := encoding.Decode(h1, &b1) - if innerErr != nil { - return nil, errors.Wrapf(innerErr, "failed to decode h1") - } - innerErr = encoding.Decode(h2, &b2) - if innerErr != nil { - return nil, errors.Wrapf(innerErr, "failed to decode h2") - } - - // Block syntax is not validated. This implements the strictest check possible, and is also the simplest check - // possible. - // This means that blocks that could never have been included in the chain (e.g. with an empty parent state) - // are still fault-able. - - if b1.Miner != b2.Miner { - return nil, fmt.Errorf("no consensus fault: miners differ") - } - if b1.Height > b2.Height { - return nil, fmt.Errorf("no consensus fault: first block is higher than second") - } - - // Check the basic fault conditions first, defer the (expensive) signature and chain history check until last. - var fault *runtime.ConsensusFault - - // Double-fork mining fault: two blocks at the same epoch. - // It is not necessary to present a common ancestor of the blocks. - if b1.Height == b2.Height { - fault = &runtime.ConsensusFault{ - Target: b1.Miner, - Epoch: b2.Height, - Type: runtime.ConsensusFaultDoubleForkMining, - } - } - // Time-offset mining fault: two blocks with the same parent but different epochs. - // The height check is redundant at time of writing, but included for robustness to future changes to this method. - // The blocks have a common ancestor by definition (the parent). - if b1.Parents.Equals(b2.Parents) && b1.Height != b2.Height { - fault = &runtime.ConsensusFault{ - Target: b1.Miner, - Epoch: b2.Height, - Type: runtime.ConsensusFaultTimeOffsetMining, - } - } - // Parent-grinding fault: one blockโ€™s parent is a tipset that provably should have included some block but does not. - // The provable case is that two blocks are mined and the later one does not include the - // earlier one as a parent even though it could have. - // B3 must prove that the higher block (B2) could have been included in B1's tipset. - if len(extra) > 0 { - innerErr = encoding.Decode(extra, &b3) - if innerErr != nil { - return nil, errors.Wrapf(innerErr, "failed to decode extra") - } - if b1.Height == b3.Height && b3.Parents.Equals(b1.Parents) && !b2.Parents.Has(b1.Cid()) && b2.Parents.Has(b3.Cid()) { - fault = &runtime.ConsensusFault{ - Target: b1.Miner, - Epoch: b2.Height, - Type: runtime.ConsensusFaultParentGrinding, - } - } - } - - if fault == nil { - return nil, fmt.Errorf("no consensus fault: blocks are ok") - } - - // Expensive validation: signatures. - - err := verifyBlockSignature(ctx, view, b1) - if err != nil { - return nil, err - } - err = verifyBlockSignature(ctx, view, b2) - if err != nil { - return nil, err - } - - return fault, nil -} - -// Checks whether a block header is correctly signed in the context of the parent state to which it refers. -func verifyBlockSignature(ctx context.Context, view FaultStateView, blk block.Block) error { - _, worker, err := view.MinerControlAddresses(ctx, blk.Miner) - if err != nil { - panic(errors.Wrapf(err, "failed to inspect miner addresses")) - } - if blk.BlockSig == nil { - return errors.Errorf("no consensus fault: block %s has nil signature", blk.Cid()) - } - err = state.NewSignatureValidator(view).ValidateSignature(ctx, blk.SignatureData(), worker, *blk.BlockSig) - if err != nil { - return errors.Wrapf(err, "no consensus fault: block %s signature invalid", blk.Cid()) - } - return err -} diff --git a/internal/pkg/slashing/monitor.go b/internal/pkg/slashing/monitor.go deleted file mode 100644 index 6ae34a6c62..0000000000 --- a/internal/pkg/slashing/monitor.go +++ /dev/null @@ -1,67 +0,0 @@ -package slashing - -import ( - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" -) - -// ConsensusFaultDetector detects consensus faults -- misbehavior conditions where a single -// party produces multiple blocks at the same time. -type ConsensusFaultDetector struct { - // minerIndex tracks witnessed blocks by miner address and epoch - minerIndex map[address.Address]map[abi.ChainEpoch]*block.Block - // sender sends messages on behalf of the slasher - faultCh chan ConsensusFault -} - -// ConsensusFault is the information needed to submit a consensus fault -type ConsensusFault struct { - // Block1 and Block2 are two distinct blocks from an overlapping interval - // signed by the same miner - Block1, Block2 *block.Block -} - -// NewConsensusFaultDetector returns a fault detector given a fault channel -func NewConsensusFaultDetector(faultCh chan ConsensusFault) *ConsensusFaultDetector { - return &ConsensusFaultDetector{ - minerIndex: make(map[address.Address]map[abi.ChainEpoch]*block.Block), - faultCh: faultCh, - } - -} - -// CheckBlock records a new block and checks for faults -// Preconditions: the signature is already checked and p is the parent -func (detector *ConsensusFaultDetector) CheckBlock(b *block.Block, p block.TipSet) error { - latest := b.Height - parentHeight, err := p.Height() - if err != nil { - return err - } - earliest := parentHeight + 1 - - // Find per-miner index - blockByEpoch, tracked := detector.minerIndex[b.Miner] - if !tracked { - blockByEpoch = make(map[abi.ChainEpoch]*block.Block) - detector.minerIndex[b.Miner] = blockByEpoch - } - - // Add this epoch to the miner's index, emitting any detected faults - for e := earliest; e <= latest; e++ { - collision, tracked := blockByEpoch[e] - if tracked { - // Exact duplicates are not faults - if collision.Cid().Equals(b.Cid()) { - continue - } - // Emit all faults, any special handling of duplicates belongs downstream - detector.faultCh <- ConsensusFault{b, collision} - } - // In case of collision overwrite with most recent - blockByEpoch[e] = b - } - return nil -} diff --git a/internal/pkg/slashing/monitor_test.go b/internal/pkg/slashing/monitor_test.go deleted file mode 100644 index 97ee69a2de..0000000000 --- a/internal/pkg/slashing/monitor_test.go +++ /dev/null @@ -1,141 +0,0 @@ -package slashing_test - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - . "github.com/filecoin-project/go-filecoin/internal/pkg/slashing" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" -) - -func assertEmptyCh(t *testing.T, faultCh chan ConsensusFault) { - select { - case <-faultCh: - t.Fail() - default: - } -} - -func TestNoFaults(t *testing.T) { - tf.UnitTest(t) - addrGetter := vmaddr.NewForTestGetter() - minerAddr1 := addrGetter() - minerAddr2 := addrGetter() - minerAddr3 := addrGetter() - - t.Run("blocks mined by different miners don't slash", func(t *testing.T) { - parentBlock := &block.Block{Height: 42} - parentTipSet := block.RequireNewTipSet(t, parentBlock) - - block1 := &block.Block{Miner: minerAddr1, Height: 43} - block2 := &block.Block{Miner: minerAddr2, Height: 43} - block3 := &block.Block{Miner: minerAddr3, Height: 43} - - faultCh := make(chan ConsensusFault, 1) - cfd := NewConsensusFaultDetector(faultCh) - assert.NoError(t, cfd.CheckBlock(block1, parentTipSet)) - assertEmptyCh(t, faultCh) - assert.NoError(t, cfd.CheckBlock(block2, parentTipSet)) - assertEmptyCh(t, faultCh) - assert.NoError(t, cfd.CheckBlock(block3, parentTipSet)) - assertEmptyCh(t, faultCh) - }) - - t.Run("blocks mined at different heights don't slash", func(t *testing.T) { - parent1Block := &block.Block{Height: 42} - parent1TipSet := block.RequireNewTipSet(t, parent1Block) - block1 := &block.Block{Miner: minerAddr1, Height: 43} - - parent2Block := &block.Block{Height: 55} - parent2TipSet := block.RequireNewTipSet(t, parent2Block) - block2 := &block.Block{Miner: minerAddr1, Height: 56} - - faultCh := make(chan ConsensusFault, 1) - cfd := NewConsensusFaultDetector(faultCh) - assert.NoError(t, cfd.CheckBlock(block1, parent1TipSet)) - assertEmptyCh(t, faultCh) - assert.NoError(t, cfd.CheckBlock(block2, parent2TipSet)) - assertEmptyCh(t, faultCh) - }) - - t.Run("blocks with non-overlapping null intervals don't slash", func(t *testing.T) { - parent1Block := &block.Block{Height: 42} - parent1TipSet := block.RequireNewTipSet(t, parent1Block) - block1 := &block.Block{Miner: minerAddr1, Height: 46} - - parent2TipSet := block.RequireNewTipSet(t, block1) - block2 := &block.Block{Miner: minerAddr1, Height: 56} - - faultCh := make(chan ConsensusFault, 1) - cfd := NewConsensusFaultDetector(faultCh) - assert.NoError(t, cfd.CheckBlock(block1, parent1TipSet)) - assertEmptyCh(t, faultCh) - assert.NoError(t, cfd.CheckBlock(block2, parent2TipSet)) - assertEmptyCh(t, faultCh) - }) - - t.Run("duplicate equal blocks don't slash", func(t *testing.T) { - parentBlock := &block.Block{Height: 42} - parentTipSet := block.RequireNewTipSet(t, parentBlock) - - block := &block.Block{Miner: minerAddr1, Height: 43} - faultCh := make(chan ConsensusFault, 1) - cfd := NewConsensusFaultDetector(faultCh) - assert.NoError(t, cfd.CheckBlock(block, parentTipSet)) - assertEmptyCh(t, faultCh) - assert.NoError(t, cfd.CheckBlock(block, parentTipSet)) - assertEmptyCh(t, faultCh) - }) -} - -func TestFault(t *testing.T) { - tf.UnitTest(t) - addrGetter := vmaddr.NewForTestGetter() - minerAddr1 := addrGetter() - - parentBlock := &block.Block{Height: 42} - parentTipSet := block.RequireNewTipSet(t, parentBlock) - - block1 := &block.Block{Miner: minerAddr1, Height: 43, StateRoot: e.NewCid(types.CidFromString(t, "some-state"))} - block2 := &block.Block{Miner: minerAddr1, Height: 43, StateRoot: e.NewCid(types.CidFromString(t, "some-other-state"))} - - faultCh := make(chan ConsensusFault, 1) - cfd := NewConsensusFaultDetector(faultCh) - assert.NoError(t, cfd.CheckBlock(block1, parentTipSet)) - assertEmptyCh(t, faultCh) // no collision here because index is empty - assert.NoError(t, cfd.CheckBlock(block2, parentTipSet)) - fault := <-faultCh - assert.Equal(t, fault.Block1, block2) - assert.Equal(t, fault.Block2, block1) -} - -func TestFaultNullBlocks(t *testing.T) { - tf.UnitTest(t) - addrGetter := vmaddr.NewForTestGetter() - minerAddr1 := addrGetter() - - t.Run("same base", func(t *testing.T) { - parentBlock := &block.Block{Height: 42} - parentTipSet := block.RequireNewTipSet(t, parentBlock) - - block1 := &block.Block{Miner: minerAddr1, Height: 45} - block2 := &block.Block{Miner: minerAddr1, Height: 49} - - faultCh := make(chan ConsensusFault, 3) - cfd := NewConsensusFaultDetector(faultCh) - assert.NoError(t, cfd.CheckBlock(block1, parentTipSet)) - assertEmptyCh(t, faultCh) - assert.NoError(t, cfd.CheckBlock(block2, parentTipSet)) - for i := 0; i < 3; i++ { - fault := <-faultCh - assert.Equal(t, fault.Block1, block2) - assert.Equal(t, fault.Block2, block1) - } - }) - -} diff --git a/internal/pkg/state/signer.go b/internal/pkg/state/signer.go deleted file mode 100644 index 2d4cdebab4..0000000000 --- a/internal/pkg/state/signer.go +++ /dev/null @@ -1,61 +0,0 @@ -package state - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/wallet" -) - -type chainHeadTracker interface { - GetHead() block.TipSetKey -} - -// Signer looks up non-signing addresses before signing -type Signer struct { - viewer *TipSetStateViewer - chainHead chainHeadTracker - wallet *wallet.Wallet -} - -// NewSigner creates a new signer -func NewSigner(viewer *TipSetStateViewer, chainHead chainHeadTracker, wallet *wallet.Wallet) *Signer { - return &Signer{ - viewer: viewer, - chainHead: chainHead, - wallet: wallet, - } -} - -// SignBytes creates a signature for the given data using either the given addr or its associated signing address -func (s *Signer) SignBytes(ctx context.Context, data []byte, addr address.Address) (crypto.Signature, error) { - signingAddr, err := s.signingAddress(ctx, addr) - if err != nil { - return crypto.Signature{}, err - } - return s.wallet.SignBytes(data, signingAddr) -} - -// HasAddress returns whether this signer can sign with the given address -func (s *Signer) HasAddress(ctx context.Context, addr address.Address) (bool, error) { - signingAddr, err := s.signingAddress(ctx, addr) - if err != nil { - return false, err - } - return s.wallet.HasAddress(signingAddr), nil -} - -func (s *Signer) signingAddress(ctx context.Context, addr address.Address) (address.Address, error) { - if addr.Protocol() == address.BLS || addr.Protocol() == address.SECP256K1 { - // address is already a signing address. return it - return addr, nil - } - - view, err := s.viewer.StateView(s.chainHead.GetHead()) - if err != nil { - return address.Undef, err - } - return view.AccountSignerAddress(ctx, addr) -} diff --git a/internal/pkg/state/sigval.go b/internal/pkg/state/sigval.go deleted file mode 100644 index 796dd6c83d..0000000000 --- a/internal/pkg/state/sigval.go +++ /dev/null @@ -1,71 +0,0 @@ -package state - -import ( - "context" - - addr "github.com/filecoin-project/go-address" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -type AccountStateView interface { - AccountSignerAddress(ctx context.Context, a addr.Address) (addr.Address, error) -} - -// -// SignatureValidator resolves account actor addresses to their pubkey-style address for signature validation. -// -type SignatureValidator struct { - state AccountStateView -} - -func NewSignatureValidator(state AccountStateView) *SignatureValidator { - return &SignatureValidator{state: state} -} - -func (v *SignatureValidator) ValidateSignature(ctx context.Context, data []byte, signer addr.Address, sig crypto.Signature) error { - signerAddress, err := v.state.AccountSignerAddress(ctx, signer) - if err != nil { - return errors.Wrapf(err, "failed to load signer address for %v", signer) - } - return crypto.ValidateSignature(data, signerAddress, sig) -} - -func (v *SignatureValidator) ValidateMessageSignature(ctx context.Context, msg *types.SignedMessage) error { - mCid, err := msg.Message.Cid() - if err != nil { - return errors.Wrapf(err, "failed to take cid of message to check signature") - } - - return v.ValidateSignature(ctx, mCid.Bytes(), msg.Message.From, msg.Signature) -} - -func (v *SignatureValidator) ValidateBLSMessageAggregate(ctx context.Context, msgs []*types.UnsignedMessage, sig *crypto.Signature) error { - if sig == nil { - if len(msgs) > 0 { - return errors.New("Invalid empty BLS sig over messages") - } - return nil - } - pubKeys := [][]byte{} - encodedMsgCids := [][]byte{} - for _, msg := range msgs { - signerAddress, err := v.state.AccountSignerAddress(ctx, msg.From) - if err != nil { - return errors.Wrapf(err, "failed to load signer address for %v", msg.From) - } - pubKeys = append(pubKeys, signerAddress.Payload()) - mCid, err := msg.Cid() - if err != nil { - return err - } - encodedMsgCids = append(encodedMsgCids, mCid.Bytes()) - } - - if !crypto.VerifyBLSAggregate(pubKeys, encodedMsgCids, sig.Data) { - return errors.New("BLS signature invalid") - } - return nil -} diff --git a/internal/pkg/state/sigval_test.go b/internal/pkg/state/sigval_test.go deleted file mode 100644 index 5f8cc6cf5a..0000000000 --- a/internal/pkg/state/sigval_test.go +++ /dev/null @@ -1,156 +0,0 @@ -package state - -import ( - "context" - "fmt" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -type fakeStateView struct { - keys map[address.Address]address.Address -} - -func (f *fakeStateView) AccountSignerAddress(_ context.Context, a address.Address) (address.Address, error) { - if a.Protocol() == address.SECP256K1 || a.Protocol() == address.BLS { - return a, nil - } - resolved, ok := f.keys[a] - if !ok { - return address.Undef, fmt.Errorf("not found") - } - return resolved, nil - -} - -func TestSignMessageOk(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - - ms, kis := types.NewMockSignersAndKeyInfo(1) - keyAddr, err := kis[0].Address() - require.NoError(t, err) - - t.Run("no resolution", func(t *testing.T) { - v := NewSignatureValidator(&fakeStateView{}) // No resolution needed. - msg := types.NewMeteredMessage(keyAddr, keyAddr, 1, types.ZeroAttoFIL, builtin.MethodSend, nil, types.NewGasPrice(0), 0) - smsg, err := types.NewSignedMessage(ctx, *msg, ms) - require.NoError(t, err) - assert.NoError(t, v.ValidateMessageSignature(ctx, smsg)) - }) - t.Run("resolution required", func(t *testing.T) { - idAddress := vmaddr.RequireIDAddress(t, 1) - // Use ID address in message but sign with corresponding key address. - state := &fakeStateView{keys: map[address.Address]address.Address{ - idAddress: keyAddr, - }} - v := NewSignatureValidator(state) - msg := types.NewMeteredMessage(idAddress, idAddress, 1, types.ZeroAttoFIL, builtin.MethodSend, nil, types.NewGasPrice(0), 0) - msgCid, err := msg.Cid() - require.NoError(t, err) - sig, err := ms.SignBytes(ctx, msgCid.Bytes(), keyAddr) - require.NoError(t, err) - smsg := &types.SignedMessage{ - Message: *msg, - Signature: sig, - } - - assert.NoError(t, v.ValidateMessageSignature(ctx, smsg)) - }) -} - -// Signature is valid but signer does not match From Address. -func TestBadFrom(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - - signer, kis := types.NewMockSignersAndKeyInfo(2) - keyAddr, err := kis[0].Address() - require.NoError(t, err) - otherAddr, err := kis[1].Address() - require.NoError(t, err) - - t.Run("no resolution", func(t *testing.T) { - v := NewSignatureValidator(&fakeStateView{}) - - // Can't use NewSignedMessage constructor as it always signs with msg.From. - msg := types.NewMeteredMessage(keyAddr, keyAddr, 1, types.ZeroAttoFIL, builtin.MethodSend, nil, types.NewGasPrice(0), gas.NewGas(0)) - bmsg, err := msg.Marshal() - require.NoError(t, err) - sig, err := signer.SignBytes(ctx, bmsg, otherAddr) // sign with addr != msg.From - require.NoError(t, err) - smsg := &types.SignedMessage{ - Message: *msg, - Signature: sig, - } - assert.Error(t, v.ValidateMessageSignature(ctx, smsg)) - }) - t.Run("resolution required", func(t *testing.T) { - idAddress := vmaddr.RequireIDAddress(t, 1) - // Use ID address in message but sign with corresponding key address. - state := &fakeStateView{keys: map[address.Address]address.Address{ - idAddress: keyAddr, - }} - v := NewSignatureValidator(state) - - // Can't use NewSignedMessage constructor as it always signs with msg.From. - msg := types.NewMeteredMessage(idAddress, idAddress, 1, types.ZeroAttoFIL, builtin.MethodSend, nil, types.NewGasPrice(0), gas.NewGas(0)) - bmsg, err := msg.Marshal() - require.NoError(t, err) - sig, err := signer.SignBytes(ctx, bmsg, otherAddr) // sign with addr != msg.From (resolved) - require.NoError(t, err) - smsg := &types.SignedMessage{ - Message: *msg, - Signature: sig, - } - assert.Error(t, v.ValidateMessageSignature(ctx, smsg)) - }) -} - -// Signature corrupted. -func TestSignedMessageBadSignature(t *testing.T) { - tf.UnitTest(t) - ctx := context.Background() - - signer, kis := types.NewMockSignersAndKeyInfo(1) - keyAddr, err := kis[0].Address() - require.NoError(t, err) - - v := NewSignatureValidator(&fakeStateView{}) // no resolution needed - msg := types.NewMeteredMessage(keyAddr, keyAddr, 1, types.ZeroAttoFIL, builtin.MethodSend, nil, types.NewGasPrice(0), 0) - smsg, err := types.NewSignedMessage(ctx, *msg, signer) - require.NoError(t, err) - - assert.NoError(t, v.ValidateMessageSignature(ctx, smsg)) - smsg.Signature.Data[0] = smsg.Signature.Data[0] ^ 0xFF - assert.Error(t, v.ValidateMessageSignature(ctx, smsg)) -} - -// Message corrupted. -func TestSignedMessageCorrupted(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - - signer, kis := types.NewMockSignersAndKeyInfo(1) - keyAddr, err := kis[0].Address() - require.NoError(t, err) - - v := NewSignatureValidator(&fakeStateView{}) // no resolution needed - msg := types.NewMeteredMessage(keyAddr, keyAddr, 1, types.ZeroAttoFIL, builtin.MethodSend, nil, types.NewGasPrice(0), 0) - smsg, err := types.NewSignedMessage(ctx, *msg, signer) - require.NoError(t, err) - - assert.NoError(t, v.ValidateMessageSignature(ctx, smsg)) - smsg.Message.CallSeqNum = uint64(42) - assert.Error(t, v.ValidateMessageSignature(ctx, smsg)) -} diff --git a/internal/pkg/state/testing.go b/internal/pkg/state/testing.go deleted file mode 100644 index 61023cb75c..0000000000 --- a/internal/pkg/state/testing.go +++ /dev/null @@ -1,174 +0,0 @@ -package state - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - "github.com/ipfs/go-cid" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/pkg/errors" -) - -// FakeStateView is a fake state view. -type FakeStateView struct { - NetworkName string - Power *NetworkPower - Miners map[address.Address]*FakeMinerState -} - -// NewFakeStateView creates a new fake state view. -func NewFakeStateView(rawBytePower, qaPower abi.StoragePower, minerCount, minPowerMinerCount int64) *FakeStateView { - return &FakeStateView{ - Power: &NetworkPower{ - RawBytePower: rawBytePower, - QualityAdjustedPower: qaPower, - MinerCount: minerCount, - MinPowerMinerCount: minPowerMinerCount, - }, - Miners: make(map[address.Address]*FakeMinerState), - } -} - -// FakeMinerState is fake state for a single miner. -type FakeMinerState struct { - SectorConfiguration *MinerSectorConfiguration - Owner address.Address - Worker address.Address - PeerID peer.ID - ProvingPeriodStart abi.ChainEpoch - ProvingPeriodEnd abi.ChainEpoch - PoStFailures int - Sectors []miner.SectorOnChainInfo - Deadlines []*abi.BitField - ClaimedRawPower abi.StoragePower - ClaimedQAPower abi.StoragePower - PledgeRequirement abi.TokenAmount - PledgeBalance abi.TokenAmount -} - -// FakeSectorInfo fakes a subset of sector onchain info -type FakeSectorInfo struct { - ID abi.SectorNumber - SealedCID cid.Cid -} - -func (v *FakeStateView) InitNetworkName(_ context.Context) (string, error) { - return v.NetworkName, nil -} - -// MinerSectorConfiguration reports a miner's sector size. -func (v *FakeStateView) MinerSectorConfiguration(ctx context.Context, maddr address.Address) (*MinerSectorConfiguration, error) { - m, ok := v.Miners[maddr] - if !ok { - return nil, errors.Errorf("no miner %s", maddr) - } - return m.SectorConfiguration, nil -} - -// MinerSectorCount reports the number of sectors a miner has pledged -func (v *FakeStateView) MinerSectorCount(ctx context.Context, maddr address.Address) (uint64, error) { - m, ok := v.Miners[maddr] - if !ok { - return 0, errors.Errorf("no miner %s", maddr) - } - - return uint64(len(m.Sectors)), nil -} - -func (v *FakeStateView) MinerSectorStates(_ context.Context, maddr address.Address) (*MinerSectorStates, error) { - m, ok := v.Miners[maddr] - if !ok { - return nil, errors.Errorf("no miner %s", maddr) - } - return &MinerSectorStates{ - Deadlines: m.Deadlines, - Faults: abi.NewBitField(), - Recoveries: abi.NewBitField(), - NewSectors: abi.NewBitField(), - }, nil -} - -func (v *FakeStateView) MinerGetSector(_ context.Context, maddr address.Address, sectorNum abi.SectorNumber) (*miner.SectorOnChainInfo, bool, error) { - m, ok := v.Miners[maddr] - if !ok { - return nil, false, errors.Errorf("no miner %s", maddr) - } - for _, s := range m.Sectors { - if s.Info.SectorNumber == sectorNum { - return &s, true, nil - } - } - return nil, false, nil -} - -// MinerControlAddresses reports a miner's control addresses. -func (v *FakeStateView) MinerControlAddresses(_ context.Context, maddr address.Address) (owner, worker address.Address, err error) { - m, ok := v.Miners[maddr] - if !ok { - return address.Undef, address.Undef, errors.Errorf("no miner %s", maddr) - } - return m.Owner, m.Worker, nil -} - -func (v *FakeStateView) MinerExists(_ context.Context, _ address.Address) (bool, error) { - return true, nil -} - -func (v *FakeStateView) MinerPeerID(ctx context.Context, maddr address.Address) (peer.ID, error) { - m, ok := v.Miners[maddr] - if !ok { - return "", errors.Errorf("no miner %s", maddr) - } - return m.PeerID, nil -} - -func (v *FakeStateView) MinerProvingPeriod(ctx context.Context, maddr address.Address) (start abi.ChainEpoch, end abi.ChainEpoch, failureCount int, err error) { - m, ok := v.Miners[maddr] - if !ok { - return 0, 0, 0, errors.Errorf("no miner %s", maddr) - } - return m.ProvingPeriodStart, m.ProvingPeriodEnd, m.PoStFailures, nil -} - -func (v *FakeStateView) AccountSignerAddress(ctx context.Context, a address.Address) (address.Address, error) { - return a, nil -} - -func (v *FakeStateView) PowerNetworkTotal(_ context.Context) (*NetworkPower, error) { - return v.Power, nil -} - -func (v *FakeStateView) MinerClaimedPower(ctx context.Context, miner address.Address) (abi.StoragePower, abi.StoragePower, error) { - m, ok := v.Miners[miner] - if !ok { - return big.Zero(), big.Zero(), errors.Errorf("no miner %s", miner) - } - return m.ClaimedRawPower, m.ClaimedQAPower, nil -} - -func (v *FakeStateView) MinerPledgeCollateral(_ context.Context, maddr address.Address) (locked abi.TokenAmount, total abi.TokenAmount, err error) { - m, ok := v.Miners[maddr] - if !ok { - return big.Zero(), big.Zero(), errors.Errorf("no miner %s", maddr) - } - return m.PledgeRequirement, m.PledgeBalance, nil -} - -func (v *FakeStateView) MinerDeadlines(ctx context.Context, maddr address.Address) (*miner.Deadlines, error) { - return nil, nil -} - -func (v *FakeStateView) MinerInfo(ctx context.Context, maddr address.Address) (miner.MinerInfo, error) { - m, ok := v.Miners[maddr] - if !ok { - return miner.MinerInfo{}, errors.Errorf("no miner %s", maddr) - } - return miner.MinerInfo{ - Owner: m.Owner, - Worker: m.Worker, - PeerId: m.PeerID, - }, nil -} diff --git a/internal/pkg/state/tipset_viewer.go b/internal/pkg/state/tipset_viewer.go deleted file mode 100644 index b335d03db7..0000000000 --- a/internal/pkg/state/tipset_viewer.go +++ /dev/null @@ -1,36 +0,0 @@ -package state - -import ( - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" -) - -// Abstracts over a store of blockchain state. -type chainStateChainReader interface { - GetTipSetStateRoot(key block.TipSetKey) (cid.Cid, error) -} - -// TipSetStateViewer loads state views for tipsets. -type TipSetStateViewer struct { - // To get the head tipset state root. - chainReader chainStateChainReader - // To load the tree for the head tipset state root. - cst cbor.IpldStore -} - -// NewTipSetStateViewer constructs a TipSetStateViewer. -func NewTipSetStateViewer(chainReader chainStateChainReader, cst cbor.IpldStore) *TipSetStateViewer { - return &TipSetStateViewer{chainReader, cst} -} - -// StateView creates a state view after the application of a tipset's messages. -func (cs TipSetStateViewer) StateView(baseKey block.TipSetKey) (*View, error) { - root, err := cs.chainReader.GetTipSetStateRoot(baseKey) - if err != nil { - return nil, errors.Wrapf(err, "failed to get state root for %s", baseKey.String()) - } - return NewView(cs.cst, root), nil -} diff --git a/internal/pkg/state/view.go b/internal/pkg/state/view.go deleted file mode 100644 index 1c7c5b96b5..0000000000 --- a/internal/pkg/state/view.go +++ /dev/null @@ -1,688 +0,0 @@ -package state - -import ( - "context" - "fmt" - - "github.com/filecoin-project/go-bitfield" - "github.com/filecoin-project/sector-storage/ffiwrapper" - - addr "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/account" - notinit "github.com/filecoin-project/specs-actors/actors/builtin/init" - "github.com/filecoin-project/specs-actors/actors/builtin/market" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - paychActor "github.com/filecoin-project/specs-actors/actors/builtin/paych" - "github.com/filecoin-project/specs-actors/actors/builtin/power" - "github.com/filecoin-project/specs-actors/actors/util/adt" - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/libp2p/go-libp2p-core/peer" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" -) - -// Viewer builds state views from state root CIDs. -type Viewer struct { - ipldStore cbor.IpldStore -} - -// NewViewer creates a new state -func NewViewer(store cbor.IpldStore) *Viewer { - return &Viewer{store} -} - -// StateView returns a new state view. -func (c *Viewer) StateView(root cid.Cid) *View { - return NewView(c.ipldStore, root) -} - -// View is a read-only interface to a snapshot of application-level actor state. -// This object interprets the actor state, abstracting the concrete on-chain structures so as to -// hide the complications of protocol versions. -// Exported methods on this type avoid exposing concrete state structures (which may be subject to versioning) -// where possible. -type View struct { - ipldStore cbor.IpldStore - root cid.Cid -} - -// NewView creates a new state view -func NewView(store cbor.IpldStore, root cid.Cid) *View { - return &View{ - ipldStore: store, - root: root, - } -} - -// InitNetworkName Returns the network name from the init actor state. -func (v *View) InitNetworkName(ctx context.Context) (string, error) { - initState, err := v.loadInitActor(ctx) - if err != nil { - return "", err - } - return initState.NetworkName, nil -} - -// InitResolveAddress Returns ID address if public key address is given. -func (v *View) InitResolveAddress(ctx context.Context, a addr.Address) (addr.Address, error) { - if a.Protocol() == addr.ID { - return a, nil - } - - initState, err := v.loadInitActor(ctx) - if err != nil { - return addr.Undef, err - } - - state := ¬init.State{ - AddressMap: initState.AddressMap, - } - return state.ResolveAddress(v.adtStore(ctx), a) -} - -// Returns public key address if id address is given -func (v *View) AccountSignerAddress(ctx context.Context, a addr.Address) (addr.Address, error) { - if a.Protocol() == addr.SECP256K1 || a.Protocol() == addr.BLS { - return a, nil - } - - accountActorState, err := v.loadAccountActor(ctx, a) - if err != nil { - return addr.Undef, err - } - - return accountActorState.Address, nil -} - -// MinerControlAddresses returns the owner and worker addresses for a miner actor -func (v *View) MinerControlAddresses(ctx context.Context, maddr addr.Address) (owner, worker addr.Address, err error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return addr.Undef, addr.Undef, err - } - return minerState.Info.Owner, minerState.Info.Worker, nil -} - -// MinerPeerID returns the PeerID for a miner actor -func (v *View) MinerPeerID(ctx context.Context, maddr addr.Address) (peer.ID, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return "", err - } - return minerState.Info.PeerId, nil -} - -type MinerSectorConfiguration struct { - SealProofType abi.RegisteredProof - SectorSize abi.SectorSize - WindowPoStPartitionSectors uint64 -} - -// MinerSectorConfiguration returns the sector size for a miner actor -func (v *View) MinerSectorConfiguration(ctx context.Context, maddr addr.Address) (*MinerSectorConfiguration, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return nil, err - } - return &MinerSectorConfiguration{ - SealProofType: minerState.Info.SealProofType, - SectorSize: minerState.Info.SectorSize, - WindowPoStPartitionSectors: minerState.Info.WindowPoStPartitionSectors, - }, nil -} - -// MinerSectorCount counts all the on-chain sectors -func (v *View) MinerSectorCount(ctx context.Context, maddr addr.Address) (uint64, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return 0, err - } - sectors, err := v.asArray(ctx, minerState.Sectors) - if err != nil { - return 0, err - } - length := sectors.Length() - return length, nil -} - -// Loads sector info from miner state. -func (v *View) MinerGetSector(ctx context.Context, maddr addr.Address, sectorNum abi.SectorNumber) (*miner.SectorOnChainInfo, bool, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return nil, false, err - } - return minerState.GetSector(v.adtStore(ctx), sectorNum) -} - -// MinerDeadlineInfo returns information relevant to the current proving deadline -func (v *View) MinerDeadlineInfo(ctx context.Context, maddr addr.Address, epoch abi.ChainEpoch) (index uint64, open, close, challenge abi.ChainEpoch, _ error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return 0, 0, 0, 0, err - } - - deadlineInfo := minerState.DeadlineInfo(epoch) - return deadlineInfo.Index, deadlineInfo.Open, deadlineInfo.Close, deadlineInfo.Challenge, nil -} - -// MinerPartitionIndexesForDeadline returns all partitions that need to be proven in the proving period deadline for the given epoch -func (v *View) MinerPartitionIndicesForDeadline(ctx context.Context, maddr addr.Address, deadlineIndex uint64) ([]uint64, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return nil, err - } - - deadlines, err := minerState.LoadDeadlines(v.adtStore(ctx)) - if err != nil { - return nil, err - } - - // compute first partition index - partitionSize := minerState.Info.WindowPoStPartitionSectors - start, sectorCount, err := miner.PartitionsForDeadline(deadlines, partitionSize, deadlineIndex) - if err != nil { - return nil, err - } - - // if deadline contains no sectors, return no partitions - if sectorCount == 0 { - return nil, nil - } - - // compute number of partitions - partitionCount, _, err := miner.DeadlineCount(deadlines, partitionSize, deadlineIndex) - if err != nil { - return nil, err - } - - partitions := make([]uint64, partitionCount) - for i := uint64(0); i < partitionCount; i++ { - partitions[i] = start + i - } - - return partitions, err -} - -// MinerSectorInfoForPartitions retrieves sector info for sectors needed to be proven over for the given proving window partitions. -// NOTE: exposes on-chain structures directly because specs-storage requires it. -func (v *View) MinerSectorInfoForDeadline(ctx context.Context, maddr addr.Address, deadlineIndex uint64, partitions []uint64) ([]abi.SectorInfo, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return nil, err - } - - deadlines, err := minerState.LoadDeadlines(v.adtStore(ctx)) - if err != nil { - return nil, err - } - - // This is copied from miner.Actor SubmitWindowedPoSt. It should be logic in miner.State. - partitionSize := minerState.Info.WindowPoStPartitionSectors - partitionsSectors, err := miner.ComputePartitionsSectors(deadlines, partitionSize, deadlineIndex, partitions) - if err != nil { - return nil, err - } - - provenSectors, err := abi.BitFieldUnion(partitionsSectors...) - if err != nil { - return nil, err - } - - // Extract a fault set relevant to the sectors being submitted, for expansion into a map. - declaredFaults, err := bitfield.IntersectBitField(provenSectors, minerState.Faults) - if err != nil { - return nil, err - } - - declaredRecoveries, err := bitfield.IntersectBitField(declaredFaults, minerState.Recoveries) - if err != nil { - return nil, err - } - - expectedFaults, err := bitfield.SubtractBitField(declaredFaults, declaredRecoveries) - if err != nil { - return nil, err - } - - nonFaults, err := bitfield.SubtractBitField(provenSectors, expectedFaults) - if err != nil { - return nil, err - } - - empty, err := nonFaults.IsEmpty() - if err != nil { - return nil, err - } - - if empty { - return nil, fmt.Errorf("no non-faulty sectors in partitions %+v", partitions) - } - - // Select a non-faulty sector as a substitute for faulty ones. - goodSectorNo, err := nonFaults.First() - if err != nil { - return nil, err - } - - // Load sector infos for proof - sectors, err := minerState.LoadSectorInfosWithFaultMask(v.adtStore(ctx), provenSectors, expectedFaults, abi.SectorNumber(goodSectorNo)) - if err != nil { - return nil, err - } - - out := make([]abi.SectorInfo, len(sectors)) - for i, sector := range sectors { - out[i] = sector.AsSectorInfo() - } - - return out, nil -} - -// MinerSuccessfulPoSts counts how many successful window PoSts have been made this proving period so far. -func (v *View) MinerSuccessfulPoSts(ctx context.Context, maddr addr.Address) (uint64, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return 0, err - } - - return minerState.PostSubmissions.Count() -} - -// MinerDeadlines returns a bitfield of sectors in a proving period -// NOTE: exposes on-chain structures directly because it's referenced directly by the storage-fsm module. -// This is in conflict with the general goal of the state view of hiding the chain state representations from -// consumers in order to support versioning that representation through protocol upgrades. -// See https://github.com/filecoin-project/storage-fsm/issues/13 -func (v *View) MinerDeadlines(ctx context.Context, maddr addr.Address) (*miner.Deadlines, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return nil, err - } - - return minerState.LoadDeadlines(v.adtStore(ctx)) -} - -type MinerSectorStates struct { - Deadlines []*abi.BitField - Faults *abi.BitField - Recoveries *abi.BitField - NewSectors *abi.BitField -} - -func (v *View) MinerSectorStates(ctx context.Context, maddr addr.Address) (*MinerSectorStates, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return nil, err - } - - deadlines, err := minerState.LoadDeadlines(v.adtStore(ctx)) - if err != nil { - return nil, err - } - return &MinerSectorStates{ - Deadlines: deadlines.Due[:], - Faults: minerState.Faults, - Recoveries: minerState.Recoveries, - NewSectors: minerState.NewSectors, - }, nil -} - -// MinerInfo returns information about the next proving period -// NOTE: exposes on-chain structures directly (but not necessary to) -func (v *View) MinerInfo(ctx context.Context, maddr addr.Address) (miner.MinerInfo, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return miner.MinerInfo{}, err - } - - return minerState.Info, err -} - -func (v *View) MinerProvingPeriodStart(ctx context.Context, maddr addr.Address) (abi.ChainEpoch, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return 0, err - } - return minerState.ProvingPeriodStart, nil -} - -// MinerSectorsForEach Iterates over the sectors in a miner's proving set. -func (v *View) MinerSectorsForEach(ctx context.Context, maddr addr.Address, - f func(abi.SectorNumber, cid.Cid, abi.RegisteredProof, []abi.DealID) error) error { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return err - } - - sectors, err := v.asArray(ctx, minerState.Sectors) - if err != nil { - return err - } - - // This version for the new actors - var sector miner.SectorOnChainInfo - return sectors.ForEach(§or, func(secnum int64) error { - // Add more fields here as required by new callers. - return f(sector.Info.SectorNumber, sector.Info.SealedCID, sector.Info.RegisteredProof, sector.Info.DealIDs) - }) -} - -// MinerExists Returns true iff the miner exists. -func (v *View) MinerExists(ctx context.Context, maddr addr.Address) (bool, error) { - _, err := v.loadMinerActor(ctx, maddr) - if err == nil { - return true, nil - } - if err == types.ErrNotFound { - return false, nil - } - return false, err -} - -// MinerFaults Returns all sector ids that are faults -func (v *View) MinerFaults(ctx context.Context, maddr addr.Address) ([]uint64, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return nil, err - } - - return minerState.Faults.All(miner.SectorsMax) -} - -// MinerGetPrecommittedSector Looks up info for a miners precommitted sector. -// NOTE: exposes on-chain structures directly for storage FSM API. -func (v *View) MinerGetPrecommittedSector(ctx context.Context, maddr addr.Address, sectorNum abi.SectorNumber) (*miner.SectorPreCommitOnChainInfo, bool, error) { - minerState, err := v.loadMinerActor(ctx, maddr) - if err != nil { - return nil, false, err - } - - return minerState.GetPrecommittedSector(v.adtStore(ctx), sectorNum) -} - -// MarketEscrowBalance looks up a token amount in the escrow table for the given address -func (v *View) MarketEscrowBalance(ctx context.Context, addr addr.Address) (found bool, amount abi.TokenAmount, err error) { - marketState, err := v.loadMarketActor(ctx) - if err != nil { - return false, abi.NewTokenAmount(0), err - } - - escrow, err := v.asMap(ctx, marketState.EscrowTable) - if err != nil { - return false, abi.NewTokenAmount(0), err - } - - var value abi.TokenAmount - found, err = escrow.Get(adt.AddrKey(addr), &value) - return -} - -// MarketComputeDataCommitment takes deal ids and uses associated commPs to compute commD for a sector that contains the deals -func (v *View) MarketComputeDataCommitment(ctx context.Context, registeredProof abi.RegisteredProof, dealIDs []abi.DealID) (cid.Cid, error) { - marketState, err := v.loadMarketActor(ctx) - if err != nil { - return cid.Undef, err - } - - deals, err := v.asArray(ctx, marketState.Proposals) - if err != nil { - return cid.Undef, err - } - - // map deals to pieceInfo - pieceInfos := make([]abi.PieceInfo, len(dealIDs)) - for i, id := range dealIDs { - var proposal market.DealProposal - found, err := deals.Get(uint64(id), &proposal) - if err != nil { - return cid.Undef, err - } - - if !found { - return cid.Undef, fmt.Errorf("Could not find deal id %d", id) - } - - pieceInfos[i].PieceCID = proposal.PieceCID - pieceInfos[i].Size = proposal.PieceSize - } - - return ffiwrapper.GenerateUnsealedCID(registeredProof, pieceInfos) -} - -// NOTE: exposes on-chain structures directly for storage FSM interface. -func (v *View) MarketDealProposal(ctx context.Context, dealID abi.DealID) (market.DealProposal, error) { - marketState, err := v.loadMarketActor(ctx) - if err != nil { - return market.DealProposal{}, err - } - - deals, err := v.asArray(ctx, marketState.Proposals) - if err != nil { - return market.DealProposal{}, err - } - - var proposal market.DealProposal - found, err := deals.Get(uint64(dealID), &proposal) - if err != nil { - return market.DealProposal{}, err - } - if !found { - return market.DealProposal{}, fmt.Errorf("Could not find deal id %d", dealID) - } - - return proposal, nil -} - -// NOTE: exposes on-chain structures directly for storage FSM and market module interfaces. -func (v *View) MarketDealState(ctx context.Context, dealID abi.DealID) (*market.DealState, bool, error) { - marketState, err := v.loadMarketActor(ctx) - if err != nil { - return nil, false, err - } - - dealStates, err := v.asDealStateArray(ctx, marketState.States) - if err != nil { - return nil, false, err - } - return dealStates.Get(dealID) -} - -// NOTE: exposes on-chain structures directly for market interface. -// The callback receives a pointer to a transient object; take a copy or drop the reference outside the callback. -func (v *View) MarketDealStatesForEach(ctx context.Context, f func(id abi.DealID, state *market.DealState) error) error { - marketState, err := v.loadMarketActor(ctx) - if err != nil { - return err - } - - dealStates, err := v.asDealStateArray(ctx, marketState.States) - if err != nil { - return err - } - - var ds market.DealState - return dealStates.ForEach(&ds, func(dealId int64) error { - return f(abi.DealID(dealId), &ds) - }) -} - -type NetworkPower struct { - RawBytePower abi.StoragePower - QualityAdjustedPower abi.StoragePower - MinerCount int64 - MinPowerMinerCount int64 -} - -// Returns the storage power actor's values for network total power. -func (v *View) PowerNetworkTotal(ctx context.Context) (*NetworkPower, error) { - st, err := v.loadPowerActor(ctx) - if err != nil { - return nil, err - } - return &NetworkPower{ - RawBytePower: st.TotalRawBytePower, - QualityAdjustedPower: st.TotalQualityAdjPower, - MinerCount: st.MinerCount, - MinPowerMinerCount: st.NumMinersMeetingMinPower, - }, nil -} - -// Returns the power of a miner's committed sectors. -func (v *View) MinerClaimedPower(ctx context.Context, miner addr.Address) (raw, qa abi.StoragePower, err error) { - minerResolved, err := v.InitResolveAddress(ctx, miner) - if err != nil { - return big.Zero(), big.Zero(), err - } - powerState, err := v.loadPowerActor(ctx) - if err != nil { - return big.Zero(), big.Zero(), err - } - claim, err := v.loadPowerClaim(ctx, powerState, minerResolved) - if err != nil { - return big.Zero(), big.Zero(), err - } - return claim.RawBytePower, claim.QualityAdjPower, nil -} - -// PaychActorParties returns the From and To addresses for the given payment channel -func (v *View) PaychActorParties(ctx context.Context, paychAddr addr.Address) (from, to addr.Address, err error) { - a, err := v.loadActor(ctx, paychAddr) - if err != nil { - return addr.Undef, addr.Undef, err - } - var state paychActor.State - err = v.ipldStore.Get(ctx, a.Head.Cid, &state) - if err != nil { - return addr.Undef, addr.Undef, err - } - return state.From, state.To, nil -} - -func (v *View) loadPowerClaim(ctx context.Context, powerState *power.State, miner addr.Address) (*power.Claim, error) { - claims, err := v.asMap(ctx, powerState.Claims) - if err != nil { - return nil, err - } - - var claim power.Claim - found, err := claims.Get(adt.AddrKey(miner), &claim) - if err != nil { - return nil, err - } - if !found { - return nil, types.ErrNotFound - } - return &claim, nil -} - -func (v *View) loadInitActor(ctx context.Context) (*notinit.State, error) { - actr, err := v.loadActor(ctx, builtin.InitActorAddr) - if err != nil { - return nil, err - } - var state notinit.State - err = v.ipldStore.Get(ctx, actr.Head.Cid, &state) - return &state, err -} - -func (v *View) loadMinerActor(ctx context.Context, address addr.Address) (*miner.State, error) { - resolvedAddr, err := v.InitResolveAddress(ctx, address) - if err != nil { - return nil, err - } - actr, err := v.loadActor(ctx, resolvedAddr) - if err != nil { - return nil, err - } - var state miner.State - err = v.ipldStore.Get(ctx, actr.Head.Cid, &state) - return &state, err -} - -func (v *View) loadPowerActor(ctx context.Context) (*power.State, error) { - actr, err := v.loadActor(ctx, builtin.StoragePowerActorAddr) - if err != nil { - return nil, err - } - var state power.State - err = v.ipldStore.Get(ctx, actr.Head.Cid, &state) - return &state, err -} - -func (v *View) loadMarketActor(ctx context.Context) (*market.State, error) { - actr, err := v.loadActor(ctx, builtin.StorageMarketActorAddr) - if err != nil { - return nil, err - } - var state market.State - err = v.ipldStore.Get(ctx, actr.Head.Cid, &state) - return &state, err -} - -func (v *View) loadAccountActor(ctx context.Context, a addr.Address) (*account.State, error) { - resolvedAddr, err := v.InitResolveAddress(ctx, a) - if err != nil { - return nil, err - } - actr, err := v.loadActor(ctx, resolvedAddr) - if err != nil { - return nil, err - } - var state account.State - err = v.ipldStore.Get(ctx, actr.Head.Cid, &state) - return &state, err -} - -func (v *View) loadActor(ctx context.Context, address addr.Address) (*actor.Actor, error) { - tree, err := v.asMap(ctx, v.root) - if err != nil { - return nil, err - } - - var actr actor.Actor - found, err := tree.Get(adt.AddrKey(address), &actr) - if !found { - return nil, types.ErrNotFound - } - - return &actr, err -} - -func (v *View) adtStore(ctx context.Context) adt.Store { - return StoreFromCbor(ctx, v.ipldStore) -} - -func (v *View) asArray(ctx context.Context, root cid.Cid) (*adt.Array, error) { - return adt.AsArray(v.adtStore(ctx), root) -} - -func (v *View) asMap(ctx context.Context, root cid.Cid) (*adt.Map, error) { - return adt.AsMap(v.adtStore(ctx), root) -} - -func (v *View) asDealStateArray(ctx context.Context, root cid.Cid) (*market.DealMetaArray, error) { - return market.AsDealStateArray(v.adtStore(ctx), root) -} - -func (v *View) asBalanceTable(ctx context.Context, root cid.Cid) (*adt.BalanceTable, error) { - return adt.AsBalanceTable(v.adtStore(ctx), root) -} - -// StoreFromCbor wraps a cbor ipldStore for ADT access. -func StoreFromCbor(ctx context.Context, ipldStore cbor.IpldStore) adt.Store { - return &cstore{ctx, ipldStore} -} - -type cstore struct { - ctx context.Context - cbor.IpldStore -} - -func (s *cstore) Context() context.Context { - return s.ctx -} diff --git a/internal/pkg/testhelpers/consensus.go b/internal/pkg/testhelpers/consensus.go deleted file mode 100644 index ad0f637b32..0000000000 --- a/internal/pkg/testhelpers/consensus.go +++ /dev/null @@ -1,174 +0,0 @@ -package testhelpers - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - cid "github.com/ipfs/go-cid" - "github.com/stretchr/testify/require" - - bls "github.com/filecoin-project/filecoin-ffi" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -// RequireSignedTestBlockFromTipSet creates a block with a valid signature by -// the passed in miner work and a Miner field set to the minerAddr. -func RequireSignedTestBlockFromTipSet(t *testing.T, baseTipSet block.TipSet, stateRootCid cid.Cid, receiptRootCid cid.Cid, height abi.ChainEpoch, minerAddr address.Address, minerWorker address.Address, signer types.Signer) *block.Block { - ticket := consensus.MakeFakeTicketForTest() - emptyBLSSig := crypto.Signature{ - Type: crypto.SigTypeBLS, - Data: (*bls.Aggregate([]bls.Signature{}))[:], - } - - b := &block.Block{ - Miner: minerAddr, - Ticket: ticket, - Parents: baseTipSet.Key(), - ParentWeight: types.Uint64ToBig(uint64(height * 10000)), - Height: height, - StateRoot: e.NewCid(stateRootCid), - MessageReceipts: e.NewCid(receiptRootCid), - BLSAggregateSig: &emptyBLSSig, - } - sig, err := signer.SignBytes(context.TODO(), b.SignatureData(), minerWorker) - require.NoError(t, err) - b.BlockSig = &sig - - return b -} - -// FakeBlockValidator passes everything as valid -type FakeBlockValidator struct{} - -// NewFakeBlockValidator createas a FakeBlockValidator that passes everything as valid. -func NewFakeBlockValidator() *FakeBlockValidator { - return &FakeBlockValidator{} -} - -// ValidateHeaderSemantic does nothing. -func (fbv *FakeBlockValidator) ValidateHeaderSemantic(ctx context.Context, child *block.Block, parents block.TipSet) error { - return nil -} - -// ValidateSyntax does nothing. -func (fbv *FakeBlockValidator) ValidateSyntax(ctx context.Context, blk *block.Block) error { - return nil -} - -// ValidateMessagesSyntax does nothing -func (fbv *FakeBlockValidator) ValidateMessagesSyntax(ctx context.Context, messages []*types.SignedMessage) error { - return nil -} - -// ValidateUnsignedMessagesSyntax does nothing -func (fbv *FakeBlockValidator) ValidateUnsignedMessagesSyntax(ctx context.Context, messages []*types.UnsignedMessage) error { - return nil -} - -// ValidateReceiptsSyntax does nothing -func (fbv *FakeBlockValidator) ValidateReceiptsSyntax(ctx context.Context, receipts []vm.MessageReceipt) error { - return nil -} - -// StubBlockValidator is a mockable block validator. -type StubBlockValidator struct { - syntaxStubs map[cid.Cid]error - semanticStubs map[cid.Cid]error -} - -// NewStubBlockValidator creates a StubBlockValidator that allows errors to configured -// for blocks passed to the Validate* methods. -func NewStubBlockValidator() *StubBlockValidator { - return &StubBlockValidator{ - syntaxStubs: make(map[cid.Cid]error), - semanticStubs: make(map[cid.Cid]error), - } -} - -// ValidateHeaderSemantic returns nil or error for stubbed block `child`. -func (mbv *StubBlockValidator) ValidateSemantic(ctx context.Context, child *block.Block, parents *block.TipSet, _ uint64) error { - return mbv.semanticStubs[child.Cid()] -} - -// ValidateSyntax return nil or error for stubbed block `blk`. -func (mbv *StubBlockValidator) ValidateSyntax(ctx context.Context, blk *block.Block) error { - return mbv.syntaxStubs[blk.Cid()] -} - -// StubSyntaxValidationForBlock stubs an error when the ValidateSyntax is called -// on the with the given block. -func (mbv *StubBlockValidator) StubSyntaxValidationForBlock(blk *block.Block, err error) { - mbv.syntaxStubs[blk.Cid()] = err -} - -// StubSemanticValidationForBlock stubs an error when the ValidateHeaderSemantic is called -// on the with the given child block. -func (mbv *StubBlockValidator) StubSemanticValidationForBlock(child *block.Block, err error) { - mbv.semanticStubs[child.Cid()] = err -} - -// NewFakeProcessor creates a processor with a test validator and test rewarder -func NewFakeProcessor() *consensus.DefaultProcessor { - return consensus.NewConfiguredProcessor(vm.DefaultActors, &vm.FakeSyscalls{}, &consensus.FakeChainRandomness{}) -} - -// ApplyTestMessage sends a message directly to the vm, bypassing message -// validation -func ApplyTestMessage(st state.Tree, store vm.Storage, msg *types.UnsignedMessage, bh abi.ChainEpoch) (*consensus.ApplicationResult, error) { - return applyTestMessageWithAncestors(vm.DefaultActors, st, store, msg, bh, nil) -} - -// ApplyTestMessageWithActors sends a message directly to the vm with a given set of builtin actors -func ApplyTestMessageWithActors(actors vm.ActorCodeLoader, st state.Tree, store vm.Storage, msg *types.UnsignedMessage, bh abi.ChainEpoch) (*consensus.ApplicationResult, error) { - return applyTestMessageWithAncestors(actors, st, store, msg, bh, nil) -} - -// ApplyTestMessageWithGas uses the FakeBlockRewarder but the default SignedMessageValidator -func ApplyTestMessageWithGas(actors vm.ActorCodeLoader, st state.Tree, store vm.Storage, msg *types.UnsignedMessage, bh abi.ChainEpoch, minerOwner address.Address) (*consensus.ApplicationResult, error) { - applier := consensus.NewConfiguredProcessor(actors, &vm.FakeSyscalls{}, &consensus.FakeChainRandomness{}) - return newMessageApplier(msg, applier, st, store, bh, minerOwner, nil) -} - -func newMessageApplier(msg *types.UnsignedMessage, processor *consensus.DefaultProcessor, st state.Tree, vms vm.Storage, bh abi.ChainEpoch, minerOwner address.Address, ancestors []block.TipSet) (*consensus.ApplicationResult, error) { - return nil, nil -} - -// CreateAndApplyTestMessageFrom wraps the given parameters in a message and calls ApplyTestMessage. -func CreateAndApplyTestMessageFrom(t *testing.T, st state.Tree, vms vm.Storage, from address.Address, to address.Address, val, bh uint64, method abi.MethodNum, ancestors []block.TipSet, params ...interface{}) (*consensus.ApplicationResult, error) { - t.Helper() - - pdata, err := encoding.Encode(params) - if err != nil { - panic(err) - } - msg := types.NewUnsignedMessage(from, to, 0, types.NewAttoFILFromFIL(val), method, pdata) - return applyTestMessageWithAncestors(vm.DefaultActors, st, vms, msg, abi.ChainEpoch(bh), ancestors) -} - -// CreateAndApplyTestMessage wraps the given parameters in a message and calls -// CreateAndApplyTestMessageFrom sending the message from address.TestAddress -func CreateAndApplyTestMessage(t *testing.T, st state.Tree, vms vm.Storage, to address.Address, val, bh uint64, method abi.MethodNum, ancestors []block.TipSet, params ...interface{}) (*consensus.ApplicationResult, error) { - return CreateAndApplyTestMessageFrom(t, st, vms, address.TestAddress, to, val, bh, method, ancestors, params...) -} - -func applyTestMessageWithAncestors(actors vm.ActorCodeLoader, st state.Tree, store vm.Storage, msg *types.UnsignedMessage, bh abi.ChainEpoch, ancestors []block.TipSet) (*consensus.ApplicationResult, error) { - msg.GasPrice = types.NewGasPrice(1) - msg.GasLimit = gas.NewGas(300) - - ta := newTestApplier(actors) - return newMessageApplier(msg, ta, st, store, bh, address.Undef, ancestors) -} - -func newTestApplier(actors vm.ActorCodeLoader) *consensus.DefaultProcessor { - return consensus.NewConfiguredProcessor(actors, &vm.FakeSyscalls{}, &consensus.FakeChainRandomness{}) -} diff --git a/internal/pkg/testhelpers/core.go b/internal/pkg/testhelpers/core.go deleted file mode 100644 index 3e114be4f5..0000000000 --- a/internal/pkg/testhelpers/core.go +++ /dev/null @@ -1,94 +0,0 @@ -package testhelpers - -import ( - "context" - "errors" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -// RequireMakeStateTree takes a map of addresses to actors and stores them on -// the state tree, requiring that all its steps succeed. -func RequireMakeStateTree(t *testing.T, cst cbor.IpldStore, acts map[address.Address]*actor.Actor) (cid.Cid, *state.State) { - ctx := context.Background() - tree := state.NewState(cst) - - for addr, act := range acts { - err := tree.SetActor(ctx, addr, act) - require.NoError(t, err) - } - - c, err := tree.Commit(ctx) - require.NoError(t, err) - - return c, tree -} - -// RequireNewMinerActor creates a new miner actor with the given owner, pledge, and collateral, -// and requires that its steps succeed. -func RequireNewMinerActor(ctx context.Context, t *testing.T, st state.Tree, vms vm.Storage, owner address.Address, pledge uint64, pid peer.ID, coll types.AttoFIL) (*actor.Actor, address.Address) { - // Dragons: re-write using the new actor states structures directly - - return nil, address.Undef -} - -// RequireLookupActor converts the given address to an id address before looking up the actor in the state tree -func RequireLookupActor(ctx context.Context, t *testing.T, st state.Tree, vms vm.Storage, actorAddr address.Address) (*actor.Actor, address.Address) { - // Dragons: delete, nothing outside the vm should be concerned about actor id indexes - - return nil, address.Undef -} - -// RequireNewFakeActor instantiates and returns a new fake actor and requires -// that its steps succeed. -func RequireNewFakeActor(t *testing.T, vms vm.Storage, addr address.Address, codeCid cid.Cid) *actor.Actor { - return RequireNewFakeActorWithTokens(t, vms, addr, codeCid, types.NewAttoFILFromFIL(100)) -} - -// RequireNewFakeActorWithTokens instantiates and returns a new fake actor and requires -// that its steps succeed. -func RequireNewFakeActorWithTokens(t *testing.T, vms vm.Storage, addr address.Address, codeCid cid.Cid, amt types.AttoFIL) *actor.Actor { - - return nil -} - -// RequireNewInitActor instantiates and returns a new init actor -func RequireNewInitActor(t *testing.T, vms vm.Storage) *actor.Actor { - - return nil -} - -// RequireRandomPeerID returns a new libp2p peer ID or panics. -func RequireRandomPeerID(t *testing.T) peer.ID { - pid, err := RandPeerID() - require.NoError(t, err) - return pid -} - -// MockMessagePoolValidator is a mock validator -type MockMessagePoolValidator struct { - Valid bool -} - -// NewMockMessagePoolValidator creates a MockMessagePoolValidator -func NewMockMessagePoolValidator() *MockMessagePoolValidator { - return &MockMessagePoolValidator{Valid: true} -} - -// Validate returns true if the mock validator is set to validate the message -func (v *MockMessagePoolValidator) ValidateSignedMessageSyntax(ctx context.Context, msg *types.SignedMessage) error { - if v.Valid { - return nil - } - return errors.New("mock validation error") -} diff --git a/internal/pkg/testhelpers/iptbtester/genesis.go b/internal/pkg/testhelpers/iptbtester/genesis.go deleted file mode 100644 index 2d89bd4b18..0000000000 --- a/internal/pkg/testhelpers/iptbtester/genesis.go +++ /dev/null @@ -1,169 +0,0 @@ -package iptbtester - -import ( - "context" - "encoding/json" - "fmt" - "io/ioutil" - "os" - "strconv" - "testing" - "time" - - "github.com/stretchr/testify/require" - - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" -) - -// GenesisInfo chains require information to start a single node with funds -type GenesisInfo struct { - GenesisFile string - KeyFile string - WalletAddress string - MinerAddress string - SectorsDir string - PresealedSectorDir string -} - -type idResult struct { - ID string -} - -// RequireGenesisFromSetup constructs the required information and files to build a single -// filecoin node from a genesis configuration file. The GenesisInfo can be used with MustImportGenesisMiner -func RequireGenesisFromSetup(t *testing.T, dir string, setupPath string) *GenesisInfo { - cfg := ReadSetup(t, setupPath) - return RequireGenesis(t, dir, cfg) -} - -// RequireGenerateGenesis constructs the required information and files to build a single -// filecoin node with the provided funds. The GenesisInfo can be used with MustImportGenesisMiner -func RequireGenerateGenesis(t *testing.T, funds int64, dir string, genesisTime time.Time) *GenesisInfo { - // Setup, generate a genesis and key file - commCfgs, err := gengen.MakeCommitCfgs(1) - require.NoError(t, err) - cfg := &gengen.GenesisCfg{ - Seed: 0, - KeysToGen: 1, - PreallocatedFunds: []string{ - strconv.FormatInt(funds, 10), - }, - Miners: []*gengen.CreateStorageMinerConfig{ - { - Owner: 0, - CommittedSectors: commCfgs, - SealProofType: constants.DevSealProofType, - }, - }, - Network: "gfctest", - Time: uint64(genesisTime.Unix()), - } - - return RequireGenesis(t, dir, cfg) -} - -// ReadSetup reads genesis config from a setup file -func ReadSetup(t *testing.T, setupPath string) *gengen.GenesisCfg { - configFile, err := os.Open(setupPath) - if err != nil { - t.Errorf("failed to open config file %s: %s", setupPath, err) - } - defer configFile.Close() // nolint: errcheck - - var cfg gengen.GenesisCfg - if err := json.NewDecoder(configFile).Decode(&cfg); err != nil { - t.Errorf("failed to parse config: %s", err) - } - return &cfg -} - -// RequireGenesis generates a genesis block and metadata from config -func RequireGenesis(t *testing.T, dir string, cfg *gengen.GenesisCfg) *GenesisInfo { - genfile, err := ioutil.TempFile(dir, "genesis.*.car") - if err != nil { - t.Fatal(err) - } - - keyfile, err := ioutil.TempFile(dir, "wallet.*.key") - if err != nil { - t.Fatal(err) - } - - info, err := gengen.GenGenesisCar(cfg, genfile) - if err != nil { - t.Fatal(err) - } - - minerCfg := info.Miners[0] - minerKeyIndex := minerCfg.Owner - - var wsr commands.WalletSerializeResult - wsr.KeyInfo = append(wsr.KeyInfo, info.Keys[minerKeyIndex]) - if err := json.NewEncoder(keyfile).Encode(wsr); err != nil { - t.Fatal(err) - } - - walletAddr, err := info.Keys[minerKeyIndex].Address() - if err != nil { - t.Fatal(err) - } - - minerAddr := minerCfg.Address - - return &GenesisInfo{ - GenesisFile: genfile.Name(), - KeyFile: keyfile.Name(), - WalletAddress: walletAddr.String(), - MinerAddress: minerAddr.String(), - } -} - -// MustImportGenesisMiner configures a node from the GenesisInfo and starts it mining. -// The node should already be initialized with the GenesisFile, and be should started. -func MustImportGenesisMiner(tn *TestNode, gi *GenesisInfo) { - ctx := context.Background() - - tn.MustRunCmd(ctx, "go-filecoin", "config", "mining.minerAddress", fmt.Sprintf("\"%s\"", gi.MinerAddress)) - - tn.MustRunCmd(ctx, "go-filecoin", "wallet", "import", gi.KeyFile) - - tn.MustRunCmd(ctx, "go-filecoin", "config", "wallet.defaultAddress", fmt.Sprintf("\"%s\"", gi.WalletAddress)) - - // Get node id - id := idResult{} - tn.MustRunCmdJSON(ctx, &id, "go-filecoin", "id") - - // Update miner - tn.MustRunCmd(ctx, "go-filecoin", "miner", "update-peerid", "--from="+gi.WalletAddress, "--gas-price=1", "--gas-limit=300", gi.MinerAddress, id.ID) -} - -// MustInitWithGenesis init TestNode, passing in the `--genesisfile` flag, by calling MustInit -func (tn *TestNode) MustInitWithGenesis(ctx context.Context, genesisinfo *GenesisInfo, args ...string) *TestNode { - genesisfileFlag := fmt.Sprintf("--genesisfile=%s", genesisinfo.GenesisFile) - args = append(args, genesisfileFlag) - - if genesisinfo.KeyFile != "" { - keyfileFlag := fmt.Sprintf("--wallet-keyfile=%s", genesisinfo.KeyFile) - args = append(args, keyfileFlag) - } - - if genesisinfo.MinerAddress != "" { - minerActorAddressFlag := fmt.Sprintf("--miner-actor-address=%s", genesisinfo.MinerAddress) - args = append(args, minerActorAddressFlag) - } - - if genesisinfo.PresealedSectorDir != "" { - presealedSectorDirFlag := fmt.Sprintf("--presealed-sectordir=%s", genesisinfo.PresealedSectorDir) - args = append(args, presealedSectorDirFlag) - } - - if genesisinfo.SectorsDir != "" { - sectorDirFlag := fmt.Sprintf("--sectordir=%s", genesisinfo.SectorsDir) - args = append(args, sectorDirFlag) - } - - tn.MustInit(ctx, args...) - return tn -} diff --git a/internal/pkg/testhelpers/mining.go b/internal/pkg/testhelpers/mining.go deleted file mode 100644 index 7737106f8b..0000000000 --- a/internal/pkg/testhelpers/mining.go +++ /dev/null @@ -1,116 +0,0 @@ -package testhelpers - -import ( - "context" - "crypto/rand" - "time" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - acrypto "github.com/filecoin-project/specs-actors/actors/crypto" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/consensus" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" -) - -// BlockTimeTest is the block time used by workers during testing. -const BlockTimeTest = time.Second - -// FakeWorkerPorcelainAPI implements the WorkerPorcelainAPI> -type FakeWorkerPorcelainAPI struct { - blockTime time.Duration - stateView *state.FakeStateView - rnd consensus.ChainRandomness -} - -// NewDefaultFakeWorkerPorcelainAPI returns a FakeWorkerPorcelainAPI. -func NewDefaultFakeWorkerPorcelainAPI(signer address.Address, rnd consensus.ChainRandomness) *FakeWorkerPorcelainAPI { - return &FakeWorkerPorcelainAPI{ - blockTime: BlockTimeTest, - stateView: &state.FakeStateView{ - Power: &state.NetworkPower{ - RawBytePower: big.NewInt(1), - QualityAdjustedPower: big.NewInt(1), - MinerCount: 0, - MinPowerMinerCount: 0, - }, - Miners: map[address.Address]*state.FakeMinerState{}, - }, - rnd: rnd, - } -} - -// NewFakeWorkerPorcelainAPI produces an api suitable to use as the worker's porcelain api. -func NewFakeWorkerPorcelainAPI(rnd consensus.ChainRandomness, totalPower uint64, minerToWorker map[address.Address]address.Address) *FakeWorkerPorcelainAPI { - f := &FakeWorkerPorcelainAPI{ - blockTime: BlockTimeTest, - stateView: &state.FakeStateView{ - Power: &state.NetworkPower{ - RawBytePower: big.NewIntUnsigned(totalPower), - QualityAdjustedPower: big.NewIntUnsigned(totalPower), - MinerCount: 0, - MinPowerMinerCount: 0, - }, - Miners: map[address.Address]*state.FakeMinerState{}, - }, - rnd: rnd, - } - for k, v := range minerToWorker { - f.stateView.Miners[k] = &state.FakeMinerState{ - Owner: v, - Worker: v, - ClaimedRawPower: big.Zero(), - ClaimedQAPower: big.Zero(), - PledgeRequirement: big.Zero(), - PledgeBalance: big.Zero(), - } - } - return f -} - -// BlockTime returns the blocktime FakeWorkerPorcelainAPI is configured with. -func (t *FakeWorkerPorcelainAPI) BlockTime() time.Duration { - return t.blockTime -} - -// PowerStateView returns the state view. -func (t *FakeWorkerPorcelainAPI) PowerStateView(_ block.TipSetKey) (consensus.PowerStateView, error) { - return t.stateView, nil -} - -func (t *FakeWorkerPorcelainAPI) FaultsStateView(_ block.TipSetKey) (consensus.FaultStateView, error) { - return t.stateView, nil -} - -func (t *FakeWorkerPorcelainAPI) SampleChainRandomness(ctx context.Context, head block.TipSetKey, tag acrypto.DomainSeparationTag, - epoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { - return t.rnd.SampleChainRandomness(ctx, head, tag, epoch, entropy) -} - -// MakeCommitment creates a random commitment. -func MakeCommitment() []byte { - return MakeRandomBytes(32) -} - -// MakeCommitments creates three random commitments for constructing a -// types.Commitments. -func MakeCommitments() types.Commitments { - comms := types.Commitments{} - copy(comms.CommD[:], MakeCommitment()[:]) - copy(comms.CommR[:], MakeCommitment()[:]) - copy(comms.CommRStar[:], MakeCommitment()[:]) - return comms -} - -// MakeRandomBytes generates a randomized byte slice of size 'size' -func MakeRandomBytes(size int) []byte { - comm := make([]byte, size) - if _, err := rand.Read(comm); err != nil { - panic(err) - } - - return comm -} diff --git a/internal/pkg/testhelpers/net.go b/internal/pkg/testhelpers/net.go deleted file mode 100644 index 68f1a922f3..0000000000 --- a/internal/pkg/testhelpers/net.go +++ /dev/null @@ -1,209 +0,0 @@ -package testhelpers - -import ( - "context" - "crypto/rand" - "encoding/binary" - "fmt" - "testing" - "time" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/ipfs/go-cid" - "github.com/libp2p/go-libp2p-core/connmgr" - "github.com/libp2p/go-libp2p-core/event" - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/mux" - inet "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/peerstore" - "github.com/libp2p/go-libp2p-core/protocol" - ma "github.com/multiformats/go-multiaddr" - mh "github.com/multiformats/go-multihash" - "github.com/pkg/errors" - "github.com/stretchr/testify/require" -) - -var _ host.Host = &FakeHost{} - -// FakeHost is a test host.Host -type FakeHost struct { - ConnectImpl func(context.Context, peer.AddrInfo) error -} - -// NewFakeHost constructs a FakeHost with no other parameters needed -func NewFakeHost() host.Host { - nopfunc := func(_ context.Context, _ peer.AddrInfo) error { return nil } - return &FakeHost{ConnectImpl: nopfunc} -} - -// minimal implementation of host.Host interface - -func (fh *FakeHost) Addrs() []ma.Multiaddr { panic("not implemented") } // nolint: golint -func (fh *FakeHost) Close() error { panic("not implemented") } // nolint: golint -func (fh *FakeHost) ConnManager() connmgr.ConnManager { panic("not implemented") } // nolint: golint -func (fh *FakeHost) Connect(ctx context.Context, pi peer.AddrInfo) error { // nolint: golint - return fh.ConnectImpl(ctx, pi) -} -func (fh *FakeHost) EventBus() event.Bus { panic("not implemented") } //nolint: golint -func (fh *FakeHost) ID() peer.ID { panic("not implemented") } // nolint: golint -func (fh *FakeHost) Network() inet.Network { panic("not implemented") } // nolint: golint -func (fh *FakeHost) Mux() protocol.Switch { panic("not implemented") } // nolint: golint -func (fh *FakeHost) Peerstore() peerstore.Peerstore { panic("not implemented") } // nolint: golint -func (fh *FakeHost) RemoveStreamHandler(protocol.ID) { panic("not implemented") } // nolint: golint -func (fh *FakeHost) SetStreamHandler(protocol.ID, inet.StreamHandler) { panic("not implemented") } // nolint: golint -func (fh *FakeHost) SetStreamHandlerMatch(protocol.ID, func(string) bool, inet.StreamHandler) { // nolint: golint - panic("not implemented") -} - -// NewStream is required for the host.Host interface; returns a new FakeStream. -func (fh *FakeHost) NewStream(context.Context, peer.ID, ...protocol.ID) (inet.Stream, error) { // nolint: golint - return newFakeStream(), nil -} - -var _ inet.Dialer = &FakeDialer{} - -// FakeDialer is a test inet.Dialer -type FakeDialer struct { - PeersImpl func() []peer.ID -} - -// Minimal implementation of the inet.Dialer interface - -// Peers returns a fake inet.Dialer PeersImpl -func (fd *FakeDialer) Peers() []peer.ID { - return fd.PeersImpl() -} -func (fd *FakeDialer) Peerstore() peerstore.Peerstore { panic("not implemented") } // nolint: golint -func (fd *FakeDialer) LocalPeer() peer.ID { panic("not implemented") } // nolint: golint -func (fd *FakeDialer) DialPeer(context.Context, peer.ID) (inet.Conn, error) { panic("not implemented") } // nolint: golint -func (fd *FakeDialer) ClosePeer(peer.ID) error { panic("not implemented") } // nolint: golint -func (fd *FakeDialer) Connectedness(peer.ID) inet.Connectedness { panic("not implemented") } // nolint: golint -func (fd *FakeDialer) Conns() []inet.Conn { panic("not implemented") } // nolint: golint -func (fd *FakeDialer) ConnsToPeer(peer.ID) []inet.Conn { panic("not implemented") } // nolint: golint -func (fd *FakeDialer) Notify(inet.Notifiee) { panic("not implemented") } // nolint: golint -func (fd *FakeDialer) StopNotify(inet.Notifiee) { panic("not implemented") } // nolint: golint - -// fakeStream is a test inet.Stream -type fakeStream struct { - _ mux.MuxedStream - pid protocol.ID -} - -var _ inet.Stream = &fakeStream{} - -func newFakeStream() fakeStream { return fakeStream{} } - -// Minimal implementation of the inet.Stream interface - -func (fs fakeStream) Protocol() protocol.ID { return fs.pid } // nolint: golint -func (fs fakeStream) SetProtocol(id protocol.ID) { fs.pid = id } // nolint: golint -func (fs fakeStream) Stat() inet.Stat { panic("not implemented") } // nolint: golint -func (fs fakeStream) Conn() inet.Conn { panic("not implemented") } // nolint: golint -func (fs fakeStream) Write(_ []byte) (int, error) { return 1, nil } // nolint: golint -func (fs fakeStream) Read(_ []byte) (int, error) { return 1, nil } // nolint: golint -func (fs fakeStream) Close() error { return nil } // nolint: golint -func (fs fakeStream) Reset() error { return nil } // nolint: golint -func (fs fakeStream) SetDeadline(_ time.Time) error { return nil } // nolint: golint -func (fs fakeStream) SetReadDeadline(_ time.Time) error { return nil } // nolint: golint -func (fs fakeStream) SetWriteDeadline(_ time.Time) error { return nil } // nolint: golint - -// RandPeerID is a libp2p random peer ID generator. -// These peer.ID generators were copied from libp2p/go-testutil. We didn't bring in the -// whole repo as a dependency because we only need this small bit. However if we find -// ourselves using more and more pieces we should just take a dependency on it. -func RandPeerID() (peer.ID, error) { - buf := make([]byte, 16) - if n, err := rand.Read(buf); n != 16 || err != nil { - if n != 16 && err == nil { - err = errors.New("couldnt read 16 random bytes") - } - panic(err) - } - h, _ := mh.Sum(buf, mh.SHA2_256, -1) - return peer.ID(h), nil -} - -// RequireIntPeerID takes in an integer and creates a unique peer id for it. -func RequireIntPeerID(t *testing.T, i int64) peer.ID { - buf := make([]byte, 16) - n := binary.PutVarint(buf, i) - h, err := mh.Sum(buf[:n], mh.IDENTITY, -1) - require.NoError(t, err) - pid, err := peer.IDFromBytes(h) - require.NoError(t, err) - return pid -} - -// TestFetcher is an object with the same method set as Fetcher plus a method -// for adding blocks to the source. It is used to implement an object that -// behaves like Fetcher but does not go to the network for use in tests. -type TestFetcher struct { - sourceBlocks map[string]*block.Block // sourceBlocks maps block cid strings to blocks. -} - -// NewTestFetcher returns a TestFetcher with no source blocks. -func NewTestFetcher() *TestFetcher { - return &TestFetcher{ - sourceBlocks: make(map[string]*block.Block), - } -} - -// AddSourceBlocks adds the input blocks to the fetcher source. -func (f *TestFetcher) AddSourceBlocks(blocks ...*block.Block) { - for _, block := range blocks { - f.sourceBlocks[block.Cid().String()] = block - } -} - -// FetchTipSets fetchs the tipset at `tsKey` from the network using the fetchers `sourceBlocks`. -func (f *TestFetcher) FetchTipSets(ctx context.Context, tsKey block.TipSetKey, from peer.ID, done func(t block.TipSet) (bool, error)) ([]block.TipSet, error) { - var out []block.TipSet - cur := tsKey - for { - res, err := f.GetBlocks(ctx, cur.ToSlice()) - if err != nil { - return nil, err - } - - ts, err := block.NewTipSet(res...) - if err != nil { - return nil, err - } - - out = append(out, ts) - ok, err := done(ts) - if err != nil { - return nil, err - } - if ok { - break - } - - cur, err = ts.Parents() - if err != nil { - return nil, err - } - - } - - return out, nil -} - -// FetchTipSetHeaders fetches the tipset at `tsKey` but not messages -func (f *TestFetcher) FetchTipSetHeaders(ctx context.Context, tsKey block.TipSetKey, from peer.ID, done func(t block.TipSet) (bool, error)) ([]block.TipSet, error) { - return f.FetchTipSets(ctx, tsKey, from, done) -} - -// GetBlocks returns any blocks in the source with matching cids. -func (f *TestFetcher) GetBlocks(ctx context.Context, cids []cid.Cid) ([]*block.Block, error) { - var ret []*block.Block - for _, c := range cids { - if block, ok := f.sourceBlocks[c.String()]; ok { - ret = append(ret, block) - } else { - return nil, fmt.Errorf("failed to fetch block: %s", c.String()) - } - } - return ret, nil -} diff --git a/internal/pkg/testhelpers/util.go b/internal/pkg/testhelpers/util.go deleted file mode 100644 index d98e2ddbaa..0000000000 --- a/internal/pkg/testhelpers/util.go +++ /dev/null @@ -1,95 +0,0 @@ -package testhelpers - -import ( - "fmt" - "net" - "os" - "sync" - "time" - - "github.com/filecoin-project/go-filecoin/build/project" - "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -// GetFreePort gets a free port from the kernel -// Credit: https://github.com/phayes/freeport -func GetFreePort() (int, error) { - addr, err := net.ResolveTCPAddr("tcp", "0.0.0.0:0") - if err != nil { - return 0, err - } - - l, err := net.ListenTCP("tcp", addr) - if err != nil { - return 0, err - } - defer l.Close() // nolint: errcheck - return l.Addr().(*net.TCPAddr).Port, nil -} - -// MustGetFilecoinBinary returns the path where the filecoin binary will be if it has been built and panics otherwise. -func MustGetFilecoinBinary() string { - path, err := GetFilecoinBinary() - if err != nil { - panic(err) - } - - return path -} - -// GetFilecoinBinary returns the path where the filecoin binary will be if it has been built -func GetFilecoinBinary() (string, error) { - bin, provided := testflags.BinaryPath() - if !provided { - bin = project.Root("go-filecoin") - } - - _, err := os.Stat(bin) - if err != nil { - return "", err - } - - if os.IsNotExist(err) { - return "", err - } - - return bin, nil -} - -// WaitForIt waits until the given callback returns true. -func WaitForIt(count int, delay time.Duration, cb func() (bool, error)) error { - var done bool - var err error - for i := 0; i < count; i++ { - done, err = cb() - if err != nil { - return err - } - if done { - break - } - time.Sleep(delay) - } - - if !done { - return fmt.Errorf("timeout waiting for it") - } - - return nil -} - -// WaitTimeout waits for the waitgroup for the specified max timeout. -// Returns true if waiting timed out. -func WaitTimeout(wg *sync.WaitGroup, timeout time.Duration) bool { - c := make(chan struct{}) - go func() { - defer close(c) - wg.Wait() - }() - select { - case <-c: - return false // completed normally - case <-time.After(timeout): - return true // timed out - } -} diff --git a/internal/pkg/types/atto_fil.go b/internal/pkg/types/atto_fil.go deleted file mode 100644 index f069737611..0000000000 --- a/internal/pkg/types/atto_fil.go +++ /dev/null @@ -1,104 +0,0 @@ -package types - -import ( - "fmt" - "math/big" - "strings" - - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/specs-actors/actors/abi" - specsabi "github.com/filecoin-project/specs-actors/actors/abi" - specsbig "github.com/filecoin-project/specs-actors/actors/abi/big" -) - -var attoPower = 18 -var tenToTheEighteen = specsbig.Exp(specsbig.NewInt(10), specsbig.NewInt(18)) - -// ZeroAttoFIL is the zero value for an AttoFIL, exported for consistency in construction of AttoFILs -var ZeroAttoFIL = specsbig.Zero() - -// AttoFIL represents a signed multi-precision integer quantity of -// attofilecoin (atto is metric for 10**-18). The zero value for -// AttoFIL represents the value 0. -// -// Reasons for embedding a big.Int instead of *big.Int: -// - We don't have check for nil in every method that does calculations. -// - Serialization "symmetry" when serializing AttoFIL{}. -type AttoFIL = specsabi.TokenAmount - -// NewAttoFIL allocates and returns a new AttoFIL set to x. -func NewAttoFIL(x *big.Int) AttoFIL { - return specsbig.Int{Int: x} -} - -// NewAttoFILFromFIL returns a new AttoFIL representing a quantity -// of attofilecoin equal to x filecoin. -func NewAttoFILFromFIL(x uint64) AttoFIL { - xAsBigInt := specsbig.NewIntUnsigned(x) - return specsbig.Mul(xAsBigInt, tenToTheEighteen) -} - -var tenToTheEighteenTokens = specsbig.Exp(specsbig.NewInt(10), specsbig.NewInt(18)) - -// NewAttoTokenFromToken should be moved when we cleanup the types -// Dragons: clean up and likely move to specs-actors -func NewAttoTokenFromToken(x uint64) abi.TokenAmount { - xAsBigInt := abi.NewTokenAmount(0) - xAsBigInt.SetUint64(x) - return specsbig.Mul(xAsBigInt, tenToTheEighteenTokens) -} - -// NewAttoFILFromBytes allocates and returns a new AttoFIL set -// to the value of buf as the bytes of a big-endian unsigned integer. -func NewAttoFILFromBytes(buf []byte) (AttoFIL, error) { - var af AttoFIL - err := encoding.Decode(buf, &af) - if err != nil { - return af, err - } - return af, nil -} - -// NewAttoFILFromFILString allocates a new AttoFIL set to the value of s filecoin, -// interpreted as a decimal in base 10, and returns it and a boolean indicating success. -func NewAttoFILFromFILString(s string) (AttoFIL, bool) { - splitNumber := strings.Split(s, ".") - // If '.' is absent from string, add an empty string to become the decimal part - if len(splitNumber) == 1 { - splitNumber = append(splitNumber, "") - } - intPart := splitNumber[0] - decPart := splitNumber[1] - // A decimal part longer than 18 digits should be an error - if len(decPart) > attoPower || len(splitNumber) > 2 { - return ZeroAttoFIL, false - } - // The decimal is right padded with 0's if it less than 18 digits long - for len(decPart) < attoPower { - decPart += "0" - } - - return NewAttoFILFromString(intPart+decPart, 10) -} - -// NewAttoFILFromString allocates a new AttoFIL set to the value of s attofilecoin, -// interpreted in the given base, and returns it and a boolean indicating success. -func NewAttoFILFromString(s string, base int) (AttoFIL, bool) { - out := specsbig.NewInt(0) - _, isErr := out.Int.SetString(s, base) - return out, isErr -} - -// BigToUint64 converts a big Int to a uint64. It will error if -// the Int is too big to fit into 64 bits or is negative -func BigToUint64(bi specsbig.Int) (uint64, error) { - if !bi.Int.IsUint64() { - return 0, fmt.Errorf("Int: %s could not be represented as uint64", bi.String()) - } - return bi.Uint64(), nil -} - -// Uint64ToBig converts a uint64 to a big Int. Precodition: don't overflow int64. -func Uint64ToBig(u uint64) specsbig.Int { - return specsbig.NewInt(int64(u)) -} diff --git a/internal/pkg/types/atto_fil_test.go b/internal/pkg/types/atto_fil_test.go deleted file mode 100644 index e454a2eb49..0000000000 --- a/internal/pkg/types/atto_fil_test.go +++ /dev/null @@ -1,311 +0,0 @@ -package types - -import ( - "encoding/json" - "math/big" - "math/rand" - "testing" - "time" - - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - specsbig "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func BigIntFromString(s string) big.Int { - bigInt, _ := new(big.Int).SetString(s, 10) - return *bigInt -} - -func TestFILToAttoFIL(t *testing.T) { - tf.UnitTest(t) - - x := NewAttoFILFromFIL(2) - v := big.NewInt(10) - v = v.Exp(v, big.NewInt(18), nil) - v = v.Mul(v, big.NewInt(2)) - assert.True(t, NewAttoFIL(v).Equals(x)) -} - -func TestAttoFILCreation(t *testing.T) { - tf.UnitTest(t) - - a := NewAttoFILFromFIL(123) - assert.IsType(t, AttoFIL{}, a) - - ab, err := encoding.Encode(a) - require.NoError(t, err) - b, err := NewAttoFILFromBytes(ab) - require.NoError(t, err) - assert.Equal(t, a, b) - - as := a.String() - assert.Equal(t, as, "123000000000000000000") - c, ok := NewAttoFILFromString(as, 10) - assert.True(t, ok) - assert.Equal(t, a, c) - - _, ok = NewAttoFILFromFILString("asdf") - assert.False(t, ok) -} - -func TestZeroAttoFIL(t *testing.T) { - tf.UnitTest(t) - - z := NewAttoFILFromFIL(0) - assert.True(t, ZeroAttoFIL.Equals(z)) -} - -func TestAttoFILComparison(t *testing.T) { - tf.UnitTest(t) - - a := NewAttoFILFromFIL(123) - b := NewAttoFILFromFIL(123) - c := NewAttoFILFromFIL(456) - - t.Run("handles comparison", func(t *testing.T) { - assert.True(t, a.Equals(b)) - assert.True(t, b.Equals(a)) - - assert.False(t, a.Equals(c)) - assert.False(t, c.Equals(a)) - - assert.True(t, a.LessThan(c)) - assert.True(t, a.LessThanEqual(c)) - assert.True(t, c.GreaterThan(a)) - assert.True(t, c.GreaterThanEqual(a)) - assert.True(t, a.GreaterThanEqual(b)) - assert.True(t, a.LessThanEqual(b)) - }) - - t.Run("treats ZeroAttoFIL as zero", func(t *testing.T) { - d := specsbig.Sub(ZeroAttoFIL, a) - zeroValue := NewAttoFILFromFIL(0) - - assert.True(t, zeroValue.Equals(ZeroAttoFIL)) - assert.True(t, ZeroAttoFIL.Equals(zeroValue)) - assert.True(t, d.LessThan(zeroValue)) - assert.True(t, zeroValue.GreaterThan(d)) - assert.True(t, c.GreaterThan(zeroValue)) - assert.True(t, zeroValue.LessThan(c)) - }) -} - -func TestAttoFILAddition(t *testing.T) { - tf.UnitTest(t) - - a := NewAttoFILFromFIL(123) - b := NewAttoFILFromFIL(456) - - t.Run("handles addition", func(t *testing.T) { - aStr := a.String() - bStr := b.String() - sum := specsbig.Add(a, b) - - assert.Equal(t, NewAttoFILFromFIL(579), sum) - - // Storage is not reused - assert.NotEqual(t, &a, &sum) - assert.NotEqual(t, &b, &sum) - - // Values have not changed. - assert.Equal(t, aStr, a.String()) - assert.Equal(t, bStr, b.String()) - }) - - t.Run("treats ZeroAttoFIL as zero", func(t *testing.T) { - assert.True(t, specsbig.Add(ZeroAttoFIL, a).Equals(a)) - assert.True(t, specsbig.Add(a, ZeroAttoFIL).Equals(a)) - }) -} - -func TestAttoFILSubtraction(t *testing.T) { - tf.UnitTest(t) - - a := NewAttoFILFromFIL(456) - b := NewAttoFILFromFIL(123) - - t.Run("handles subtraction", func(t *testing.T) { - aStr := a.String() - bStr := b.String() - delta := specsbig.Sub(a, b) - - assert.Equal(t, delta, NewAttoFILFromFIL(333)) - - // Storage is not reused - assert.NotEqual(t, &a, &delta) - assert.NotEqual(t, &b, &delta) - - // Values have not changed. - assert.Equal(t, aStr, a.String()) - assert.Equal(t, bStr, b.String()) - }) - - t.Run("treats ZeroAttoFIL as zero", func(t *testing.T) { - assert.True(t, specsbig.Sub(a, ZeroAttoFIL).Equals(a)) - assert.True(t, specsbig.Sub(ZeroAttoFIL, ZeroAttoFIL).Equals(ZeroAttoFIL)) - }) -} - -func TestAttoFILCborMarshaling(t *testing.T) { - tf.UnitTest(t) - - t.Run("CBOR decode(encode(AttoFIL)) == identity(AttoFIL)", func(t *testing.T) { - rng := rand.New(rand.NewSource(time.Now().UnixNano())) - - for i := 0; i < 100; i++ { - preEncode := NewAttoFILFromFIL(rng.Uint64()) - postDecode := AttoFIL{} - - out, err := encoding.Encode(preEncode) - assert.NoError(t, err) - - err = encoding.Decode(out, &postDecode) - assert.NoError(t, err) - - assert.True(t, preEncode.Equals(postDecode), "pre: %s post: %s", preEncode.String(), postDecode.String()) - } - }) - t.Run("CBOR encodes zero val as ZeroAttoFIL", func(t *testing.T) { - var np AttoFIL - - out, err := encoding.Encode(np) - assert.NoError(t, err) - - out2, err := encoding.Encode(ZeroAttoFIL) - assert.NoError(t, err) - - assert.Equal(t, out, out2) - }) -} - -func TestAttoFILJsonMarshaling(t *testing.T) { - tf.UnitTest(t) - - t.Run("JSON unmarshal(marshal(AttoFIL)) == identity(AttoFIL)", func(t *testing.T) { - rng := rand.New(rand.NewSource(time.Now().UnixNano())) - - for i := 0; i < 100; i++ { - toBeMarshaled := NewAttoFILFromFIL(rng.Uint64()) - - marshaled, err := json.Marshal(toBeMarshaled) - assert.NoError(t, err) - - var unmarshaled AttoFIL - err = json.Unmarshal(marshaled, &unmarshaled) - assert.NoError(t, err) - - assert.True(t, toBeMarshaled.Equals(unmarshaled), "should be equal - toBeMarshaled: %s unmarshaled: %s)", toBeMarshaled.String(), unmarshaled.String()) - } - }) - - t.Run("unmarshal(marshal(AttoFIL)) == AttoFIL for decimal FIL", func(t *testing.T) { - toBeMarshaled, _ := NewAttoFILFromFILString("912129289198393.123456789012345678") - - marshaled, err := json.Marshal(toBeMarshaled) - assert.NoError(t, err) - - var unmarshaled AttoFIL - err = json.Unmarshal(marshaled, &unmarshaled) - assert.NoError(t, err) - - assert.True(t, toBeMarshaled.Equals(unmarshaled), "should be equal - toBeMarshaled: %s unmarshaled: %s)", toBeMarshaled.String(), unmarshaled.String()) - }) - - t.Run("cannot JSON marshall nil as *AttoFIL", func(t *testing.T) { - var np *AttoFIL - - out, err := json.Marshal(np) - assert.NoError(t, err) - - out2, err := json.Marshal(ZeroAttoFIL) - assert.NoError(t, err) - - assert.NotEqual(t, out, out2) - }) -} - -func TestAttoFILIsZero(t *testing.T) { - tf.UnitTest(t) - - p := NewAttoFILFromFIL(100) // positive - z := NewAttoFILFromFIL(0) // zero - n := specsbig.Sub(NewAttoFILFromFIL(0), p) // negative - - t.Run("returns true if zero token", func(t *testing.T) { - assert.True(t, z.IsZero()) - assert.True(t, ZeroAttoFIL.IsZero()) - }) - - t.Run("returns false if greater than zero token", func(t *testing.T) { - assert.False(t, p.IsZero()) - }) - - t.Run("returns false if less than zero token", func(t *testing.T) { - assert.False(t, n.IsZero()) - }) -} - -func TestString(t *testing.T) { - tf.UnitTest(t) - - // A very large number of attoFIL - attoFIL, _ := new(big.Int).SetString("912129289198393123456789012345678", 10) - assert.Equal(t, "912129289198393123456789012345678", NewAttoFIL(attoFIL).String()) - - // A multiple of 1000 attoFIL - attoFIL, _ = new(big.Int).SetString("9123372036854775000", 10) - assert.Equal(t, "9123372036854775000", NewAttoFIL(attoFIL).String()) - - // Less than 10^18 attoFIL - attoFIL, _ = new(big.Int).SetString("36854775878", 10) - assert.Equal(t, "36854775878", NewAttoFIL(attoFIL).String()) - - // A multiple of 100 attFIL that is less than 10^18 - attoFIL, _ = new(big.Int).SetString("36854775800", 10) - assert.Equal(t, "36854775800", NewAttoFIL(attoFIL).String()) - - // A number of attFIL that is an integer number of FIL - attoFIL, _ = new(big.Int).SetString("123000000000000000000", 10) - assert.Equal(t, "123000000000000000000", NewAttoFIL(attoFIL).String()) -} - -func TestNewAttoFILFromFILString(t *testing.T) { - tf.UnitTest(t) - - t.Run("parses legitimate values correctly", func(t *testing.T) { - attoFIL, _ := NewAttoFILFromFILString(".12345") - assert.Equal(t, BigIntFromString("123450000000000000"), *attoFIL.Int) - - attoFIL, _ = NewAttoFILFromFILString("000000.000000") - assert.Equal(t, BigIntFromString("0"), *attoFIL.Int) - - attoFIL, _ = NewAttoFILFromFILString("0000.12345") - assert.Equal(t, BigIntFromString("123450000000000000"), *attoFIL.Int) - - attoFIL, _ = NewAttoFILFromFILString("12345.0") - assert.Equal(t, BigIntFromString("12345000000000000000000"), *attoFIL.Int) - - attoFIL, _ = NewAttoFILFromFILString("12345") - assert.Equal(t, BigIntFromString("12345000000000000000000"), *attoFIL.Int) - }) - - t.Run("rejects nonsense values", func(t *testing.T) { - _, ok := NewAttoFILFromFILString("notanumber") - assert.False(t, ok) - - _, ok = NewAttoFILFromFILString("384042.wat") - assert.False(t, ok) - - _, ok = NewAttoFILFromFILString("78wat") - assert.False(t, ok) - - _, ok = NewAttoFILFromFILString("1234567890abcde") - assert.False(t, ok) - - _, ok = NewAttoFILFromFILString("127.0.0.1") - assert.False(t, ok) - }) -} diff --git a/internal/pkg/types/commitments.go b/internal/pkg/types/commitments.go deleted file mode 100644 index 0e44090802..0000000000 --- a/internal/pkg/types/commitments.go +++ /dev/null @@ -1,35 +0,0 @@ -package types - -// Commitments is a struct containing the replica and data commitments produced -// when sealing a sector. -type Commitments struct { - CommD *CommD - CommR *CommR - CommRStar *CommRStar -} - -// PoStChallengeSeedBytesLen is the number of bytes in the Proof of SpaceTime challenge seed. -const PoStChallengeSeedBytesLen uint = 32 - -// CommitmentBytesLen is the number of bytes in a CommR, CommD, CommP, and CommRStar. -const CommitmentBytesLen uint = 32 - -// PoStChallengeSeed is an input to the proof-of-spacetime generation and verification methods. -type PoStChallengeSeed [PoStChallengeSeedBytesLen]byte - -// CommR is the merkle root of the replicated data. It is an output of the -// sector sealing (PoRep) process. -type CommR [CommitmentBytesLen]byte - -// CommD is the merkle root of the original user data. It is an output of the -// sector sealing (PoRep) process. -type CommD [CommitmentBytesLen]byte - -// CommP is the merkle root of a piece of data included within the original user data. It is -// generated by the client, and the miner must generated a piece inclusion proof from CommP -// to CommD. -type CommP [CommitmentBytesLen]byte - -// CommRStar is a hash of intermediate layers. It is an output of the sector -// sealing (PoRep) process. -type CommRStar [CommitmentBytesLen]byte diff --git a/internal/pkg/types/commitments_test.go b/internal/pkg/types/commitments_test.go deleted file mode 100644 index 1737ea84c9..0000000000 --- a/internal/pkg/types/commitments_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - . "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/util/convert" - - "github.com/stretchr/testify/assert" -) - -func TestEncodingZeroVal(t *testing.T) { - t.Skip("cbor fix") - comms := Commitments{} - data, err := encoding.Encode(comms) - assert.NoError(t, err) - var newComms Commitments - err = encoding.Decode(data, &newComms) - assert.NoError(t, err) -} - -func TestEncoding(t *testing.T) { - t.Skip("cbor fix") - var comms Commitments - - commR := CommR(convert.To32ByteArray([]byte{0xf})) - commD := CommD(convert.To32ByteArray([]byte{0xa})) - commRStar := CommRStar(convert.To32ByteArray([]byte{0xc})) - - comms.CommR = &commR - comms.CommD = &commD - comms.CommRStar = &commRStar - - data, err := encoding.Encode(comms) - assert.NoError(t, err) - var newComms Commitments - err = encoding.Decode(data, &newComms) - assert.NoError(t, err) -} diff --git a/internal/pkg/types/message.go b/internal/pkg/types/message.go deleted file mode 100644 index dfc0f1f751..0000000000 --- a/internal/pkg/types/message.go +++ /dev/null @@ -1,203 +0,0 @@ -package types - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "math/big" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-amt-ipld/v2" - "github.com/filecoin-project/specs-actors/actors/abi" - blocks "github.com/ipfs/go-block-format" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - blockstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - ipld "github.com/ipfs/go-ipld-format" - errPkg "github.com/pkg/errors" - typegen "github.com/whyrusleeping/cbor-gen" - - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -const MessageVersion = 0 - -// BlockGasLimit is the maximum amount of gas that can be used to execute messages in a single block. -var BlockGasLimit = gas.NewGas(100e6) - -// EmptyMessagesCID is the cid of an empty collection of messages. -var EmptyMessagesCID cid.Cid - -// EmptyReceiptsCID is the cid of an empty collection of receipts. -var EmptyReceiptsCID cid.Cid - -// EmptyTxMetaCID is the cid of a TxMeta wrapping empty cids -var EmptyTxMetaCID cid.Cid - -func init() { - tmpCst := cborutil.NewIpldStore(blockstore.NewBlockstore(datastore.NewMapDatastore())) - emptyAMTCid, err := amt.FromArray(context.Background(), tmpCst, []typegen.CBORMarshaler{}) - if err != nil { - panic("could not create CID for empty AMT") - } - EmptyMessagesCID = emptyAMTCid - EmptyReceiptsCID = emptyAMTCid - EmptyTxMetaCID, err = tmpCst.Put(context.Background(), TxMeta{SecpRoot: e.NewCid(EmptyMessagesCID), BLSRoot: e.NewCid(EmptyMessagesCID)}) - if err != nil { - panic("could not create CID for empty TxMeta") - } -} - -// UnsignedMessage is an exchange of information between two actors modeled -// as a function call. -type UnsignedMessage struct { - // control field for encoding struct as an array - _ struct{} `cbor:",toarray"` - - Version int64 `json:"version"` - - To address.Address `json:"to"` - From address.Address `json:"from"` - // When receiving a message from a user account the nonce in - // the message must match the expected nonce in the from actor. - // This prevents replay attacks. - CallSeqNum uint64 `json:"callSeqNum"` - - Value AttoFIL `json:"value"` - - GasPrice AttoFIL `json:"gasPrice"` - GasLimit gas.Unit `json:"gasLimit"` - - Method abi.MethodNum `json:"method"` - Params []byte `json:"params"` - // Pay attention to Equals() if updating this struct. -} - -// NewUnsignedMessage creates a new message. -func NewUnsignedMessage(from, to address.Address, nonce uint64, value AttoFIL, method abi.MethodNum, params []byte) *UnsignedMessage { - return &UnsignedMessage{ - Version: MessageVersion, - To: to, - From: from, - CallSeqNum: nonce, - Value: value, - Method: method, - Params: params, - } -} - -// NewMeteredMessage adds gas price and gas limit to the message -func NewMeteredMessage(from, to address.Address, nonce uint64, value AttoFIL, method abi.MethodNum, params []byte, price AttoFIL, limit gas.Unit) *UnsignedMessage { - return &UnsignedMessage{ - Version: MessageVersion, - To: to, - From: from, - CallSeqNum: nonce, - Value: value, - GasPrice: price, - GasLimit: limit, - Method: method, - Params: params, - } -} - -// Unmarshal a message from the given bytes. -func (msg *UnsignedMessage) Unmarshal(b []byte) error { - return encoding.Decode(b, msg) -} - -// Marshal the message into bytes. -func (msg *UnsignedMessage) Marshal() ([]byte, error) { - return encoding.Encode(msg) -} - -// ToNode converts the Message to an IPLD node. -func (msg *UnsignedMessage) ToNode() (ipld.Node, error) { - data, err := encoding.Encode(msg) - if err != nil { - return nil, err - } - c, err := constants.DefaultCidBuilder.Sum(data) - if err != nil { - return nil, err - } - - blk, err := blocks.NewBlockWithCid(data, c) - if err != nil { - return nil, err - } - obj, err := cbor.DecodeBlock(blk) - if err != nil { - return nil, err - } - - return obj, nil -} - -// Cid returns the canonical CID for the message. -// TODO: can we avoid returning an error? -func (msg *UnsignedMessage) Cid() (cid.Cid, error) { - obj, err := msg.ToNode() - if err != nil { - return cid.Undef, errPkg.Wrap(err, "failed to marshal to cbor") - } - - return obj.Cid(), nil -} - -// OnChainLen returns the amount of bytes used to represent the message on chain. -func (msg *UnsignedMessage) OnChainLen() int { - bits, err := encoding.Encode(msg) - if err != nil { - panic(err) - } - return len(bits) -} - -func (msg *UnsignedMessage) String() string { - errStr := "(error encoding Message)" - cid, err := msg.Cid() - if err != nil { - return errStr - } - js, err := json.MarshalIndent(msg, "", " ") - if err != nil { - return errStr - } - return fmt.Sprintf("Message cid=[%v]: %s", cid, string(js)) -} - -// Equals tests whether two messages are equal -func (msg *UnsignedMessage) Equals(other *UnsignedMessage) bool { - return msg.To == other.To && - msg.From == other.From && - msg.CallSeqNum == other.CallSeqNum && - msg.Value.Equals(other.Value) && - msg.Method == other.Method && - msg.GasPrice.Equals(other.GasPrice) && - msg.GasLimit == other.GasLimit && - bytes.Equal(msg.Params, other.Params) -} - -// NewGasPrice constructs a gas price (in AttoFIL) from the given number. -func NewGasPrice(price int64) AttoFIL { - return NewAttoFIL(big.NewInt(price)) -} - -// TxMeta tracks the merkleroots of both secp and bls messages separately -type TxMeta struct { - _ struct{} `cbor:",toarray"` - BLSRoot e.Cid `json:"blsRoot"` - SecpRoot e.Cid `json:"secpRoot"` -} - -// String returns a readable printing string of TxMeta -func (m TxMeta) String() string { - return fmt.Sprintf("secp: %s, bls: %s", m.SecpRoot.String(), m.BLSRoot.String()) -} diff --git a/internal/pkg/types/message_test.go b/internal/pkg/types/message_test.go deleted file mode 100644 index 9587ca8bf0..0000000000 --- a/internal/pkg/types/message_test.go +++ /dev/null @@ -1,105 +0,0 @@ -package types - -import ( - "reflect" - "testing" - - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -func TestMessageMarshal(t *testing.T) { - tf.UnitTest(t) - - addrGetter := vmaddr.NewForTestGetter() - msg := NewMeteredMessage( - addrGetter(), - addrGetter(), - 42, - NewAttoFILFromFIL(17777), - builtin.MethodSend, - []byte("foobar"), - NewAttoFILFromFIL(3), - gas.NewGas(4), - ) - - // This check requests that you add a non-zero value for new fields above, - // then update the field count below. - require.Equal(t, 10, reflect.TypeOf(*msg).NumField()) - - marshalled, err := msg.Marshal() - assert.NoError(t, err) - - msgBack := UnsignedMessage{} - assert.False(t, msg.Equals(&msgBack)) - - err = msgBack.Unmarshal(marshalled) - assert.NoError(t, err) - - assert.Equal(t, msg.Version, msgBack.Version) - assert.Equal(t, msg.To, msgBack.To) - assert.Equal(t, msg.From, msgBack.From) - assert.Equal(t, msg.Value, msgBack.Value) - assert.Equal(t, msg.Method, msgBack.Method) - assert.Equal(t, msg.Params, msgBack.Params) - assert.Equal(t, msg.GasLimit, msgBack.GasLimit) - assert.Equal(t, msg.GasPrice, msgBack.GasPrice) - assert.True(t, msg.Equals(&msgBack)) -} - -func TestMessageCid(t *testing.T) { - tf.UnitTest(t) - - addrGetter := vmaddr.NewForTestGetter() - - msg1 := NewUnsignedMessage( - addrGetter(), - addrGetter(), - 0, - NewAttoFILFromFIL(999), - builtin.MethodSend, - nil, - ) - - msg2 := NewUnsignedMessage( - addrGetter(), - addrGetter(), - 0, - NewAttoFILFromFIL(4004), - builtin.MethodSend, - nil, - ) - - c1, err := msg1.Cid() - assert.NoError(t, err) - c2, err := msg2.Cid() - assert.NoError(t, err) - - assert.NotEqual(t, c1.String(), c2.String()) -} - -func TestMessageString(t *testing.T) { - tf.UnitTest(t) - - addrGetter := vmaddr.NewForTestGetter() - - msg := NewUnsignedMessage( - addrGetter(), - addrGetter(), - 0, - NewAttoFILFromFIL(999), - builtin.MethodSend, - nil, - ) - - cid, err := msg.Cid() - require.NoError(t, err) - - got := msg.String() - assert.Contains(t, got, cid.String()) -} diff --git a/internal/pkg/types/not_found.go b/internal/pkg/types/not_found.go deleted file mode 100644 index de9476b87d..0000000000 --- a/internal/pkg/types/not_found.go +++ /dev/null @@ -1,6 +0,0 @@ -package types - -import "fmt" - -// ErrNotFound is not the error you are looking for. -var ErrNotFound = fmt.Errorf("Not found") diff --git a/internal/pkg/types/signed_message.go b/internal/pkg/types/signed_message.go deleted file mode 100644 index 1c6cf203bd..0000000000 --- a/internal/pkg/types/signed_message.go +++ /dev/null @@ -1,123 +0,0 @@ -package types - -import ( - "context" - "encoding/json" - "fmt" - - blocks "github.com/ipfs/go-block-format" - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - ipld "github.com/ipfs/go-ipld-format" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" -) - -// SignedMessage contains a message and its signature -// TODO do not export these fields as it increases the chances of producing a -// `SignedMessage` with an empty signature. -type SignedMessage struct { - // control field for encoding struct as an array - _ struct{} `cbor:",toarray"` - - Message UnsignedMessage `json:"meteredMessage"` - Signature crypto.Signature `json:"signature"` - // Pay attention to Equals() if updating this struct. -} - -// NewSignedMessage accepts a message `msg` and a signer `s`. NewSignedMessage returns a `SignedMessage` containing -// a signature derived from the serialized `msg` and `msg.From` -// NOTE: this method can only sign message with From being a public-key type address, not an ID address. -// We should deprecate this and move to more explicit signing via an address resolver. -func NewSignedMessage(ctx context.Context, msg UnsignedMessage, s Signer) (*SignedMessage, error) { - msgCid, err := msg.Cid() - if err != nil { - return nil, err - } - - sig, err := s.SignBytes(ctx, msgCid.Bytes(), msg.From) - if err != nil { - return nil, err - } - - return &SignedMessage{ - Message: msg, - Signature: sig, - }, nil -} - -// Unmarshal a SignedMessage from the given bytes. -func (smsg *SignedMessage) Unmarshal(b []byte) error { - return encoding.Decode(b, smsg) -} - -// Marshal the SignedMessage into bytes. -func (smsg *SignedMessage) Marshal() ([]byte, error) { - return encoding.Encode(smsg) -} - -// Cid returns the canonical CID for the SignedMessage. -func (smsg *SignedMessage) Cid() (cid.Cid, error) { - obj, err := smsg.ToNode() - if err != nil { - return cid.Undef, errors.Wrap(err, "failed to marshal to cbor") - } - - return obj.Cid(), nil -} - -// ToNode converts the SignedMessage to an IPLD node. -func (smsg *SignedMessage) ToNode() (ipld.Node, error) { - data, err := encoding.Encode(smsg) - if err != nil { - return nil, err - } - c, err := constants.DefaultCidBuilder.Sum(data) - if err != nil { - return nil, err - } - - blk, err := blocks.NewBlockWithCid(data, c) - if err != nil { - return nil, err - } - obj, err := cbor.DecodeBlock(blk) - if err != nil { - return nil, err - } - - return obj, nil - -} - -// OnChainLen returns the amount of bytes used to represent the message on chain. -// TODO we can save this redundant encoding if we plumbed the size through from when the message was originally decoded from the network. -func (smsg *SignedMessage) OnChainLen() int { - bits, err := encoding.Encode(smsg) - if err != nil { - panic(err) - } - return len(bits) -} - -func (smsg *SignedMessage) String() string { - errStr := "(error encoding SignedMessage)" - cid, err := smsg.Cid() - if err != nil { - return errStr - } - js, err := json.MarshalIndent(smsg, "", " ") - if err != nil { - return errStr - } - return fmt.Sprintf("SignedMessage cid=[%v]: %s", cid, string(js)) -} - -// Equals tests whether two signed messages are equal. -func (smsg *SignedMessage) Equals(other *SignedMessage) bool { - return smsg.Message.Equals(&other.Message) && - smsg.Signature.Equals(&other.Signature) -} diff --git a/internal/pkg/types/signed_message_test.go b/internal/pkg/types/signed_message_test.go deleted file mode 100644 index 1d94e55c18..0000000000 --- a/internal/pkg/types/signed_message_test.go +++ /dev/null @@ -1,100 +0,0 @@ -package types - -import ( - "context" - "reflect" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -var mockSigner = NewMockSigner(MustGenerateKeyInfo(1, 42)) - -func TestSignedMessageString(t *testing.T) { - tf.UnitTest(t) - - smsg := makeMessage(t, mockSigner, 42) - cid, err := smsg.Cid() - require.NoError(t, err) - - got := smsg.String() - assert.Contains(t, got, cid.String()) -} - -func TestSignedMessageMarshal(t *testing.T) { - tf.UnitTest(t) - - smsg := makeMessage(t, mockSigner, 42) - - marshalled, err := smsg.Marshal() - assert.NoError(t, err) - - smsgBack := SignedMessage{} - assert.False(t, smsg.Equals(&smsgBack)) - - err = smsgBack.Unmarshal(marshalled) - assert.NoError(t, err) - - assert.Equal(t, smsg.Message, smsgBack.Message) - assert.Equal(t, smsg.Signature, smsgBack.Signature) - assert.True(t, smsg.Equals(&smsgBack)) -} - -func TestSignedMessageCid(t *testing.T) { - tf.UnitTest(t) - - smsg1 := makeMessage(t, mockSigner, 41) - smsg2 := makeMessage(t, mockSigner, 42) - - c1, err := smsg1.Cid() - assert.NoError(t, err) - c2, err := smsg2.Cid() - assert.NoError(t, err) - - assert.NotEqual(t, c1.String(), c2.String()) - -} - -func TestSignedMessageCidToNode(t *testing.T) { - tf.UnitTest(t) - - smsg := makeMessage(t, mockSigner, 41) - - c, err := smsg.Cid() - require.NoError(t, err) - - n, err := smsg.ToNode() - require.NoError(t, err) - - assert.Equal(t, c, n.Cid()) - -} - -func makeMessage(t *testing.T, signer MockSigner, nonce uint64) *SignedMessage { - newAddr, err := address.NewSecp256k1Address([]byte("receiver")) - require.NoError(t, err) - - msg := NewMeteredMessage( - signer.Addresses[0], - newAddr, - nonce, - NewAttoFILFromFIL(2), - abi.MethodNum(2352), - []byte("params"), - NewGasPrice(1000), - gas.NewGas(100)) - smsg, err := NewSignedMessage(context.TODO(), *msg, &signer) - require.NoError(t, err) - - // This check requests that you add a non-zero value for new fields above, - // then update the field count below. - require.Equal(t, 3, reflect.TypeOf(*smsg).NumField()) - - return smsg -} diff --git a/internal/pkg/types/signer.go b/internal/pkg/types/signer.go deleted file mode 100644 index a18da4989d..0000000000 --- a/internal/pkg/types/signer.go +++ /dev/null @@ -1,14 +0,0 @@ -package types - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/crypto" -) - -// Signer signs data with a private key obtained internally from a provided address. -type Signer interface { - SignBytes(ctx context.Context, data []byte, addr address.Address) (crypto.Signature, error) - HasAddress(ctx context.Context, addr address.Address) (bool, error) -} diff --git a/internal/pkg/types/testing.go b/internal/pkg/types/testing.go deleted file mode 100644 index 90f3be758c..0000000000 --- a/internal/pkg/types/testing.go +++ /dev/null @@ -1,348 +0,0 @@ -package types - -import ( - "bytes" - "context" - "crypto/rand" - "fmt" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/pkg/errors" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// MockSigner implements the Signer interface -type MockSigner struct { - AddrKeyInfo map[address.Address]crypto.KeyInfo - Addresses []address.Address - PubKeys [][]byte -} - -// NewMockSigner returns a new mock signer, capable of signing data with -// keys (addresses derived from) in keyinfo -func NewMockSigner(kis []crypto.KeyInfo) MockSigner { - var ms MockSigner - ms.AddrKeyInfo = make(map[address.Address]crypto.KeyInfo) - for _, k := range kis { - // extract public key - pub := k.PublicKey() - - var newAddr address.Address - var err error - if k.SigType == crypto.SigTypeSecp256k1 { - newAddr, err = address.NewSecp256k1Address(pub) - } else if k.SigType == crypto.SigTypeBLS { - newAddr, err = address.NewBLSAddress(pub) - } - if err != nil { - panic(err) - } - ms.Addresses = append(ms.Addresses, newAddr) - ms.AddrKeyInfo[newAddr] = k - ms.PubKeys = append(ms.PubKeys, pub) - } - return ms -} - -// NewMockSignersAndKeyInfo is a convenience function to generate a mock -// signers with some keys. -func NewMockSignersAndKeyInfo(numSigners int) (MockSigner, []crypto.KeyInfo) { - ki := MustGenerateKeyInfo(numSigners, 42) - signer := NewMockSigner(ki) - return signer, ki -} - -// MustGenerateMixedKeyInfo produces m bls keys and n secp keys. -// BLS and Secp will be interleaved. The keys will be valid, but not deterministic. -func MustGenerateMixedKeyInfo(m int, n int) []crypto.KeyInfo { - info := []crypto.KeyInfo{} - for m > 0 && n > 0 { - if m > 0 { - ki, err := crypto.NewBLSKeyFromSeed(rand.Reader) - if err != nil { - panic(err) - } - info = append(info, ki) - m-- - } - - if n > 0 { - ki, err := crypto.NewSecpKeyFromSeed(rand.Reader) - if err != nil { - panic(err) - } - info = append(info, ki) - n-- - } - } - return info -} - -// MustGenerateBLSKeyInfo produces n distinct BLS keyinfos. -func MustGenerateBLSKeyInfo(n int, seed byte) []crypto.KeyInfo { - token := bytes.Repeat([]byte{seed}, 512) - var keyinfos []crypto.KeyInfo - for i := 0; i < n; i++ { - token[0] = byte(i) - ki, err := crypto.NewBLSKeyFromSeed(bytes.NewReader(token)) - if err != nil { - panic(err) - } - keyinfos = append(keyinfos, ki) - } - return keyinfos -} - -// MustGenerateKeyInfo generates `n` distinct keyinfos using seed `seed`. -// The result is deterministic (for stable tests), don't use this for real keys! -func MustGenerateKeyInfo(n int, seed byte) []crypto.KeyInfo { - token := bytes.Repeat([]byte{seed}, 512) - var keyinfos []crypto.KeyInfo - for i := 0; i < n; i++ { - token[0] = byte(i) - ki, err := crypto.NewSecpKeyFromSeed(bytes.NewReader(token)) - if err != nil { - panic(err) - } - keyinfos = append(keyinfos, ki) - } - return keyinfos -} - -// SignBytes cryptographically signs `data` using the Address `addr`. -func (ms MockSigner) SignBytes(_ context.Context, data []byte, addr address.Address) (crypto.Signature, error) { - ki, ok := ms.AddrKeyInfo[addr] - if !ok { - return crypto.Signature{}, errors.New("unknown address") - } - return crypto.Sign(data, ki.Key(), ki.SigType) -} - -// HasAddress returns whether the signer can sign with this address -func (ms MockSigner) HasAddress(_ context.Context, addr address.Address) (bool, error) { - return true, nil -} - -// GetAddressForPubKey looks up a KeyInfo address associated with a given PublicKeyForSecpSecretKey for a MockSigner -func (ms MockSigner) GetAddressForPubKey(pk []byte) (address.Address, error) { - var addr address.Address - - for _, ki := range ms.AddrKeyInfo { - testPk := ki.PublicKey() - - if bytes.Equal(testPk, pk) { - addr, err := ki.Address() - if err != nil { - return addr, errors.New("could not fetch address") - } - return addr, nil - } - } - return addr, errors.New("public key not found in wallet") -} - -// NewSignedMessageForTestGetter returns a closure that returns a SignedMessage unique to that invocation. -// The message is unique wrt the closure returned, not globally. You can use this function -// in tests instead of manually creating messages -- it both reduces duplication and gives us -// exactly one place to create valid messages for tests if messages require validation in the -// future. -// TODO support chosing from address -func NewSignedMessageForTestGetter(ms MockSigner) func() *SignedMessage { - i := 0 - return func() *SignedMessage { - s := fmt.Sprintf("smsg%d", i) - i++ - newAddr, err := address.NewSecp256k1Address([]byte(s + "-to")) - if err != nil { - panic(err) - } - msg := NewMeteredMessage( - ms.Addresses[0], // from needs to be an address from the signer - newAddr, - 0, - ZeroAttoFIL, - builtin.MethodSend, - []byte("params"), - ZeroAttoFIL, - gas.Zero, - ) - smsg, err := NewSignedMessage(context.TODO(), *msg, &ms) - if err != nil { - panic(err) - } - return smsg - } -} - -// Type-related test helpers. - -// CidFromString generates Cid from string input -func CidFromString(t *testing.T, input string) cid.Cid { - c, err := constants.DefaultCidBuilder.Sum([]byte(input)) - require.NoError(t, err) - return c -} - -// NewCidForTestGetter returns a closure that returns a Cid unique to that invocation. -// The Cid is unique wrt the closure returned, not globally. You can use this function -// in tests. -func NewCidForTestGetter() func() cid.Cid { - i := 31337 - return func() cid.Cid { - obj, err := cbor.WrapObject([]int{i}, constants.DefaultHashFunction, -1) - if err != nil { - panic(err) - } - i++ - return obj.Cid() - } -} - -// NewMessageForTestGetter returns a closure that returns a message unique to that invocation. -// The message is unique wrt the closure returned, not globally. You can use this function -// in tests instead of manually creating messages -- it both reduces duplication and gives us -// exactly one place to create valid messages for tests if messages require validation in the -// future. -func NewMessageForTestGetter() func() *UnsignedMessage { - i := 0 - return func() *UnsignedMessage { - s := fmt.Sprintf("msg%d", i) - i++ - from, err := address.NewSecp256k1Address([]byte(s + "-from")) - if err != nil { - panic(err) - } - to, err := address.NewSecp256k1Address([]byte(s + "-to")) - if err != nil { - panic(err) - } - return NewUnsignedMessage( - from, - to, - 0, - ZeroAttoFIL, - abi.MethodNum(10000+i), - nil) - } -} - -// NewMsgs returns n messages. The messages returned are unique to this invocation -// but are not unique globally (ie, a second call to NewMsgs will return the same -// set of messages). -func NewMsgs(n int) []*UnsignedMessage { - newMsg := NewMessageForTestGetter() - msgs := make([]*UnsignedMessage, n) - for i := 0; i < n; i++ { - msgs[i] = newMsg() - msgs[i].CallSeqNum = uint64(i) - } - return msgs -} - -// NewSignedMsgs returns n signed messages. The messages returned are unique to this invocation -// but are not unique globally (ie, a second call to NewSignedMsgs will return the same -// set of messages). -func NewSignedMsgs(n uint, ms MockSigner) []*SignedMessage { - var err error - newMsg := NewMessageForTestGetter() - smsgs := make([]*SignedMessage, n) - for i := uint(0); i < n; i++ { - msg := newMsg() - msg.From = ms.Addresses[0] - msg.CallSeqNum = uint64(i) - msg.GasPrice = ZeroAttoFIL // NewGasPrice(1) - msg.GasLimit = gas.NewGas(0) - smsgs[i], err = NewSignedMessage(context.TODO(), *msg, ms) - if err != nil { - panic(err) - } - } - return smsgs -} - -// SignMsgs returns a slice of signed messages where the original messages -// are `msgs`, if signing one of the `msgs` fails an error is returned -func SignMsgs(ms MockSigner, msgs []*UnsignedMessage) ([]*SignedMessage, error) { - var smsgs []*SignedMessage - for _, m := range msgs { - s, err := NewSignedMessage(context.TODO(), *m, &ms) - if err != nil { - return nil, err - } - smsgs = append(smsgs, s) - } - return smsgs, nil -} - -// MsgCidsEqual returns true if the message cids are equal. It panics if -// it can't get their cid. -func MsgCidsEqual(m1, m2 *UnsignedMessage) bool { - m1Cid, err := m1.Cid() - if err != nil { - panic(err) - } - m2Cid, err := m2.Cid() - if err != nil { - panic(err) - } - return m1Cid.Equals(m2Cid) -} - -// SmsgCidsEqual returns true if the SignedMessage cids are equal. It panics if -// it can't get their cid. -func SmsgCidsEqual(m1, m2 *SignedMessage) bool { - m1Cid, err := m1.Cid() - if err != nil { - panic(err) - } - m2Cid, err := m2.Cid() - if err != nil { - panic(err) - } - return m1Cid.Equals(m2Cid) -} - -// NewMsgsWithAddrs returns a slice of `n` messages who's `From` field's are pulled -// from `a`. This method should be used when the addresses returned are to be signed -// at a later point. -func NewMsgsWithAddrs(n int, a []address.Address) []*UnsignedMessage { - if n > len(a) { - panic("cannot create more messages than there are addresess for") - } - newMsg := NewMessageForTestGetter() - msgs := make([]*UnsignedMessage, n) - for i := 0; i < n; i++ { - msgs[i] = newMsg() - msgs[i].From = a[i] - } - return msgs -} - -// HasCid allows two values with CIDs to be compared. -type HasCid interface { - Cid() cid.Cid -} - -// AssertHaveSameCid asserts that two values have identical CIDs. -func AssertHaveSameCid(t *testing.T, m HasCid, n HasCid) { - if !m.Cid().Equals(n.Cid()) { - assert.Fail(t, "CIDs don't match", "not equal %v %v", m.Cid(), n.Cid()) - } -} - -// AssertCidsEqual asserts that two CIDS are identical. -func AssertCidsEqual(t *testing.T, m cid.Cid, n cid.Cid) { - if !m.Equals(n) { - assert.Fail(t, "CIDs don't match", "not equal %v %v", m, n) - } -} diff --git a/internal/pkg/types/testing_test.go b/internal/pkg/types/testing_test.go deleted file mode 100644 index a487b5d2a3..0000000000 --- a/internal/pkg/types/testing_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package types - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestCidForTestGetter(t *testing.T) { - tf.UnitTest(t) - - newCid := NewCidForTestGetter() - c1 := newCid() - c2 := newCid() - assert.False(t, c1.Equals(c2)) - assert.False(t, c1.Equals(CidFromString(t, "somecid"))) // Just in case. -} - -func TestNewMessageForTestGetter(t *testing.T) { - tf.UnitTest(t) - - newMsg := NewMessageForTestGetter() - m1 := newMsg() - c1, _ := m1.Cid() - m2 := newMsg() - c2, _ := m2.Cid() - assert.False(t, c1.Equals(c2)) -} diff --git a/internal/pkg/version/protocol_version_table.go b/internal/pkg/version/protocol_version_table.go deleted file mode 100644 index da2d771dd5..0000000000 --- a/internal/pkg/version/protocol_version_table.go +++ /dev/null @@ -1,119 +0,0 @@ -package version - -import ( - "sort" - "strings" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/pkg/errors" -) - -// protocolVersion specifies that a particular protocol version goes into effect at a particular block height -type protocolVersion struct { - Version uint64 - EffectiveAt abi.ChainEpoch -} - -// ProtocolVersionTable is a data structure capable of specifying which protocol versions are active at which block heights. -// It must be constructed with the ProtocolVersionTableBuilder which enforces that the table has at least one -// entry at block height zero and that all the versions are sorted. -type ProtocolVersionTable struct { - versions []protocolVersion -} - -// VersionAt returns the protocol versions at the given block height for this PVT's network. -func (pvt *ProtocolVersionTable) VersionAt(height abi.ChainEpoch) (uint64, error) { - // find index of first version that is not yet active (or len(versions) if they are all active. - idx := sort.Search(len(pvt.versions), func(i int) bool { - return height < pvt.versions[i].EffectiveAt - }) - - // providing a height less than the first version is an error - if idx == 0 { - if len(pvt.versions) == 0 { - return 0, errors.Errorf("no protocol versions") - } - return 0, errors.Errorf("chain height %d is less than effective start of first version %d", - height, pvt.versions[0].EffectiveAt) - } - - // return the version just prior to the index to get the last version in effect. - return pvt.versions[idx-1].Version, nil -} - -// ProtocolVersionTableBuilder constructs a protocol version table -type ProtocolVersionTableBuilder struct { - network string - versions protocolVersionsByEffectiveAt -} - -// NewProtocolVersionTableBuilder creates a new ProtocolVersionTable that only tracks versions for the given network -func NewProtocolVersionTableBuilder(network string) *ProtocolVersionTableBuilder { - // ignore anything following a dash (including the dash) - networkPrefix := strings.Split(network, "-")[0] - - return &ProtocolVersionTableBuilder{ - network: networkPrefix, - versions: []protocolVersion{}, - } -} - -// Add configures an version for a network. If the network doesn't match the current network, this version will be ignored. -func (pvtb *ProtocolVersionTableBuilder) Add(network string, version uint64, effectiveAt abi.ChainEpoch) *ProtocolVersionTableBuilder { - // ignore version if not part of our network - if network != pvtb.network { - return pvtb - } - - protocolVersion := protocolVersion{ - Version: version, - EffectiveAt: effectiveAt, - } - - pvtb.versions = append(pvtb.versions, protocolVersion) - - return pvtb -} - -// Build constructs a protocol version table populated with properly sorted versions. -// It is an error to build whose first version is not at block height 0. -func (pvtb *ProtocolVersionTableBuilder) Build() (*ProtocolVersionTable, error) { - // sort versions in place - sort.Sort(pvtb.versions) - - // copy to insure an Add doesn't alter the table - versions := make([]protocolVersion, len(pvtb.versions)) - copy(versions, pvtb.versions) - - // enforce that the current network has an entry at block height zero - if len(versions) == 0 { - return nil, errors.Errorf("no protocol versions specified for network %s", pvtb.network) - } - if versions[0].EffectiveAt != abi.ChainEpoch(0) { - return nil, errors.Errorf("no protocol version at genesis for network %s", pvtb.network) - } - - // enforce that version numbers increase monotonically with effective at - lastVersion := versions[0].Version - for _, version := range versions[1:] { - if version.Version <= lastVersion { - return nil, errors.Errorf("protocol version %d effective at %d is not greater than previous version, %d", - version.Version, version.EffectiveAt, lastVersion) - } - lastVersion = version.Version - } - - return &ProtocolVersionTable{versions: versions}, nil -} - -// sort methods for protocolVersion slice -type protocolVersionsByEffectiveAt []protocolVersion - -func (a protocolVersionsByEffectiveAt) Len() int { return len(a) } -func (a protocolVersionsByEffectiveAt) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a protocolVersionsByEffectiveAt) Less(i, j int) bool { - if a[i].EffectiveAt == a[j].EffectiveAt { - return a[i].Version < a[j].Version - } - return a[i].EffectiveAt < a[j].EffectiveAt -} diff --git a/internal/pkg/version/protocol_version_table_test.go b/internal/pkg/version/protocol_version_table_test.go deleted file mode 100644 index 62598ab09d..0000000000 --- a/internal/pkg/version/protocol_version_table_test.go +++ /dev/null @@ -1,138 +0,0 @@ -package version - -import ( - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - - "testing" -) - -const network = "testnetwork" - -func TestUpgradeTable(t *testing.T) { - tf.UnitTest(t) - - t.Run("add single upgrade", func(t *testing.T) { - version := uint64(3) - put, err := NewProtocolVersionTableBuilder(network). - Add(network, version, abi.ChainEpoch(0)). - Build() - require.NoError(t, err) - - versionAtHeight, err := put.VersionAt(abi.ChainEpoch(0)) - require.NoError(t, err) - - assert.Equal(t, version, versionAtHeight) - - versionAtHeight, err = put.VersionAt(abi.ChainEpoch(1000)) - require.NoError(t, err) - - assert.Equal(t, version, versionAtHeight) - }) - - t.Run("finds correct version", func(t *testing.T) { - // add out of order and expect table to sort - put, err := NewProtocolVersionTableBuilder(network). - Add(network, 2, abi.ChainEpoch(20)). - Add(network, 4, abi.ChainEpoch(40)). - Add(network, 3, abi.ChainEpoch(30)). - Add(network, 1, abi.ChainEpoch(10)). - Add(network, 0, abi.ChainEpoch(0)). - Build() - require.NoError(t, err) - - for i := uint64(0); i < 50; i++ { - version, err := put.VersionAt(abi.ChainEpoch(i)) - require.NoError(t, err) - - assert.Equal(t, i/10, version) - } - }) - - t.Run("constructing a table with no versions is an error", func(t *testing.T) { - _, err := NewProtocolVersionTableBuilder(network).Build() - require.Error(t, err) - assert.Contains(t, err.Error(), "no protocol versions specified for network testnetwork") - }) - - t.Run("constructing a table with no version at genesis is an error", func(t *testing.T) { - _, err := NewProtocolVersionTableBuilder(network). - Add(network, 2, abi.ChainEpoch(20)). - Build() - require.Error(t, err) - assert.Contains(t, err.Error(), "no protocol version at genesis for network testnetwork") - }) - - t.Run("ignores versions from wrong network", func(t *testing.T) { - otherNetwork := "othernetwork" - - put, err := NewProtocolVersionTableBuilder(network). - Add(network, 0, abi.ChainEpoch(0)). - Add(otherNetwork, 1, abi.ChainEpoch(10)). - Add(otherNetwork, 2, abi.ChainEpoch(20)). - Add(network, 3, abi.ChainEpoch(30)). - Add(otherNetwork, 4, abi.ChainEpoch(40)). - Build() - require.NoError(t, err) - - for i := uint64(0); i < 50; i++ { - version, err := put.VersionAt(abi.ChainEpoch(i)) - require.NoError(t, err) - - expectedVersion := uint64(0) - if i >= 30 { - expectedVersion = 3 - } - assert.Equal(t, expectedVersion, version) - } - }) - - t.Run("version table name can be a prefix of network name", func(t *testing.T) { - network := "localnet-270a8688-1b23-4508-b675-444cb1e6f05d" - versionName := "localnet" - - put, err := NewProtocolVersionTableBuilder(network). - Add(versionName, 0, abi.ChainEpoch(0)). - Add(versionName, 1, abi.ChainEpoch(10)). - Build() - require.NoError(t, err) - - for i := uint64(0); i < 20; i++ { - version, err := put.VersionAt(abi.ChainEpoch(i)) - require.NoError(t, err) - - expectedVersion := uint64(0) - if i >= 10 { - expectedVersion = 1 - } - assert.Equal(t, expectedVersion, version) - } - }) - - t.Run("does not permit the same version number twice", func(t *testing.T) { - _, err := NewProtocolVersionTableBuilder(network). - Add(network, 0, abi.ChainEpoch(0)). - Add(network, 1, abi.ChainEpoch(10)). - Add(network, 2, abi.ChainEpoch(20)). - Add(network, 2, abi.ChainEpoch(30)). // wrong - Add(network, 4, abi.ChainEpoch(40)). - Build() - require.Error(t, err) - assert.Contains(t, err.Error(), "protocol version 2 effective at 30 is not greater than previous version, 2") - }) - - t.Run("does not permit version numbers to decline", func(t *testing.T) { - _, err := NewProtocolVersionTableBuilder(network). - Add(network, 4, abi.ChainEpoch(0)). - Add(network, 3, abi.ChainEpoch(10)). - Add(network, 2, abi.ChainEpoch(20)). - Add(network, 1, abi.ChainEpoch(30)). - Add(network, 0, abi.ChainEpoch(40)). - Build() - require.Error(t, err) - assert.Contains(t, err.Error(), "protocol version 3 effective at 10 is not greater than previous version, 4") - }) -} diff --git a/internal/pkg/version/protocol_versions.go b/internal/pkg/version/protocol_versions.go deleted file mode 100644 index af63897a7e..0000000000 --- a/internal/pkg/version/protocol_versions.go +++ /dev/null @@ -1,24 +0,0 @@ -package version - -import ( - "github.com/filecoin-project/specs-actors/actors/abi" -) - -// TEST is the network name for internal tests -const TEST = "gfctest" - -// Protocol0 is the first protocol version -const Protocol0 = 0 - -// ConfigureProtocolVersions configures all protocol upgrades for all known networks. -// TODO: support arbitrary network names at "latest" protocol version so that only coordinated -// network upgrades need to be represented here. See #3491. -func ConfigureProtocolVersions(network string) (*ProtocolVersionTable, error) { - return NewProtocolVersionTableBuilder(network). - Add("alpha2", Protocol0, abi.ChainEpoch(0)). - Add("interop", Protocol0, abi.ChainEpoch(0)). - Add("localnet", Protocol0, abi.ChainEpoch(0)). - Add("testnet", Protocol0, abi.ChainEpoch(0)). - Add(TEST, Protocol0, abi.ChainEpoch(0)). - Build() -} diff --git a/internal/pkg/vm/actor/actor.go b/internal/pkg/vm/actor/actor.go deleted file mode 100644 index b9fcfe5a64..0000000000 --- a/internal/pkg/vm/actor/actor.go +++ /dev/null @@ -1,108 +0,0 @@ -// Package actor implements tooling to write and manipulate actors in go. -package actor - -import ( - "fmt" - "io" - "io/ioutil" - - fxamackercbor "github.com/fxamacker/cbor/v2" - "github.com/ipfs/go-cid" - - "github.com/pkg/errors" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" -) - -// DefaultGasCost is default gas cost for the actor calls. -const DefaultGasCost = 100 - -// Actor is the central abstraction of entities in the system. -// -// Both individual accounts, as well as contracts (user & system level) are -// represented as actors. An actor has the following core functionality implemented on a system level: -// - track a Filecoin balance, using the `Balance` field -// - execute code stored in the `Code` field -// - read & write memory -// - replay protection, using the `Nonce` field -// -// Value sent to a non-existent address will be tracked as an empty actor that has a Balance but -// nil Code and Memory. You must nil check Code cids before comparing them. -// -// More specific capabilities for individual accounts or contract specific must be implemented -// inside the code. -// -// Not safe for concurrent access. -type Actor struct { - _ struct{} `cbor:",toarray"` - // Code is a CID of the VM code for this actor's implementation (or a constant for actors implemented in Go code). - // Code may be nil for an uninitialized actor (which exists because it has received a balance). - Code e.Cid - // Head is the CID of the root of the actor's state tree. - Head e.Cid - // CallSeqNum is the number expected on the next message from this actor. - // Messages are processed in strict, contiguous order. - CallSeqNum uint64 - // Balance is the amount of attoFIL in the actor's account. - Balance abi.TokenAmount -} - -// NewActor constructs a new actor. -func NewActor(code cid.Cid, balance abi.TokenAmount, head cid.Cid) *Actor { - return &Actor{ - Code: e.NewCid(code), - CallSeqNum: 0, - Balance: balance, - Head: e.NewCid(head), - } -} - -// Empty tests whether the actor's code is defined. -func (a *Actor) Empty() bool { - return !a.Code.Defined() -} - -// IncrementSeqNum increments the seq number. -func (a *Actor) IncrementSeqNum() { - a.CallSeqNum = a.CallSeqNum + 1 -} - -// UnmarshalCBOR must implement cbg.Unmarshaller to insert this into a hamt. -func (a *Actor) UnmarshalCBOR(r io.Reader) error { - bs, err := ioutil.ReadAll(r) - if err != nil { - return err - } - return fxamackercbor.Unmarshal(bs, a) -} - -// MarshalCBOR must implement cbg.Marshaller to insert this into a hamt. -func (a *Actor) MarshalCBOR(w io.Writer) error { - bs, err := fxamackercbor.Marshal(a) - if err != nil { - return err - } - _, err = w.Write(bs) - return err -} - -// Format implements fmt.Formatter. -func (a *Actor) Format(f fmt.State, c rune) { - f.Write([]byte(fmt.Sprintf("<%s (%p); balance: %v; nonce: %d>", builtin.ActorNameByCode(a.Code.Cid), a, a.Balance, a.CallSeqNum))) // nolint: errcheck -} - -// NextNonce returns the nonce value for an account actor, which is the nonce expected on the -// next message to be sent from that actor. -// Returns zero for a nil actor, which is the value expected on the first message. -func NextNonce(actor *Actor) (uint64, error) { - if actor == nil { - return 0, nil - } - if !(actor.Empty() || actor.Code.Equals(builtin.AccountActorCodeID)) { - return 0, errors.New("next nonce only defined for account or empty actors") - } - return actor.CallSeqNum, nil -} diff --git a/internal/pkg/vm/actor/actor_test.go b/internal/pkg/vm/actor/actor_test.go deleted file mode 100644 index e9ca1e0e6f..0000000000 --- a/internal/pkg/vm/actor/actor_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package actor_test - -import ( - "fmt" - "testing" - - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/assert" - - . "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestActorFormat(t *testing.T) { - tf.UnitTest(t) - - accountActor := NewActor(builtin.AccountActorCodeID, abi.NewTokenAmount(5), cid.Undef) - - formatted := fmt.Sprintf("%v", accountActor) - assert.Contains(t, formatted, "account") - assert.Contains(t, formatted, "balance: 5") - assert.Contains(t, formatted, "nonce: 0") - - minerActor := NewActor(builtin.StorageMinerActorCodeID, abi.NewTokenAmount(5), cid.Undef) - formatted = fmt.Sprintf("%v", minerActor) - assert.Contains(t, formatted, "miner") - - storageMarketActor := NewActor(builtin.StorageMarketActorCodeID, abi.NewTokenAmount(5), cid.Undef) - formatted = fmt.Sprintf("%v", storageMarketActor) - assert.Contains(t, formatted, "market") -} diff --git a/internal/pkg/vm/actor/builtin/default.go b/internal/pkg/vm/actor/builtin/default.go deleted file mode 100644 index e19696d334..0000000000 --- a/internal/pkg/vm/actor/builtin/default.go +++ /dev/null @@ -1,35 +0,0 @@ -package builtin - -import ( - specs "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/account" - "github.com/filecoin-project/specs-actors/actors/builtin/cron" - init_ "github.com/filecoin-project/specs-actors/actors/builtin/init" - "github.com/filecoin-project/specs-actors/actors/builtin/market" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - "github.com/filecoin-project/specs-actors/actors/builtin/multisig" - "github.com/filecoin-project/specs-actors/actors/builtin/paych" - "github.com/filecoin-project/specs-actors/actors/builtin/power" - "github.com/filecoin-project/specs-actors/actors/builtin/reward" - "github.com/filecoin-project/specs-actors/actors/builtin/system" - "github.com/filecoin-project/specs-actors/actors/builtin/verifreg" - - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/dispatch" -) - -// DefaultActors is list of all actors that ship with Filecoin. -// They are indexed by their CID. -// Dragons: add the rest of the actors -var DefaultActors = dispatch.NewBuilder(). - Add(specs.InitActorCodeID, &init_.Actor{}). - Add(specs.AccountActorCodeID, &account.Actor{}). - Add(specs.MultisigActorCodeID, &multisig.Actor{}). - Add(specs.PaymentChannelActorCodeID, &paych.Actor{}). - Add(specs.StoragePowerActorCodeID, &power.Actor{}). - Add(specs.StorageMarketActorCodeID, &market.Actor{}). - Add(specs.StorageMinerActorCodeID, &miner.Actor{}). - Add(specs.SystemActorCodeID, &system.Actor{}). - Add(specs.RewardActorCodeID, &reward.Actor{}). - Add(specs.CronActorCodeID, &cron.Actor{}). - Add(specs.VerifiedRegistryActorCodeID, &verifreg.Actor{}). - Build() diff --git a/internal/pkg/vm/address/testing.go b/internal/pkg/vm/address/testing.go deleted file mode 100644 index 4e97e7cd5c..0000000000 --- a/internal/pkg/vm/address/testing.go +++ /dev/null @@ -1,31 +0,0 @@ -package address - -import ( - "fmt" - "testing" - - "github.com/filecoin-project/go-address" -) - -func RequireIDAddress(t *testing.T, i int) address.Address { - a, err := address.NewIDAddress(uint64(i)) - if err != nil { - t.Fatalf("failed to make address: %v", err) - } - return a -} - -// NewForTestGetter returns a closure that returns an address unique to that invocation. -// The address is unique wrt the closure returned, not globally. -func NewForTestGetter() func() address.Address { - i := 0 - return func() address.Address { - s := fmt.Sprintf("address%d", i) - i++ - newAddr, err := address.NewSecp256k1Address([]byte(s)) - if err != nil { - panic(err) - } - return newAddr - } -} diff --git a/internal/pkg/vm/gas/gas.go b/internal/pkg/vm/gas/gas.go deleted file mode 100644 index 6436f8994e..0000000000 --- a/internal/pkg/vm/gas/gas.go +++ /dev/null @@ -1,32 +0,0 @@ -package gas - -import ( - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" -) - -// Unit is the unit of gas. -// This type is signed by design; it is possible for operations to consume negative gas. -type Unit int64 - -// Zero is the zero value for Gas. -var Zero = NewGas(0) - -// SystemGasLimit is the maximum gas for implicit system messages. -var SystemGasLimit = NewGas(1000000000000000000) // 10^18 - -// NewGas creates a gas value object. -func NewGas(value int64) Unit { - return Unit(value) -} - -// AsBigInt returns the internal value as a `big.Int` -func (gas Unit) AsBigInt() big.Int { - return big.NewInt(int64(gas)) -} - -// ToTokens returns the cost of the gas given the price. -func (gas Unit) ToTokens(price abi.TokenAmount) abi.TokenAmount { - // cost = gas * price - return big.Mul(gas.AsBigInt(), price) -} diff --git a/internal/pkg/vm/internal/dispatch/dispatch.go b/internal/pkg/vm/internal/dispatch/dispatch.go deleted file mode 100644 index e38b79d539..0000000000 --- a/internal/pkg/vm/internal/dispatch/dispatch.go +++ /dev/null @@ -1,114 +0,0 @@ -package dispatch - -import ( - "fmt" - "reflect" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/ipfs/go-cid" -) - -// Actor is the interface all actors have to implement. -type Actor interface { - // Exports has a list of method available on the actor. - Exports() []interface{} -} - -// Dispatcher allows for dynamic method dispatching on an actor. -type Dispatcher interface { - // Dispatch will call the given method on the actor and pass the arguments. - // - // - The `ctx` argument will be coerced to the type the method expects in its first argument. - // - If arg1 is `[]byte`, it will attempt to decode the value based on second argument in the target method. - Dispatch(method abi.MethodNum, ctx interface{}, arg1 interface{}) (interface{}, error) - // Signature is a helper function that returns the signature for a given method. - // - // Note: This is intended to be used by tests and tools. - Signature(method abi.MethodNum) (MethodSignature, error) -} - -type actorDispatcher struct { - code cid.Cid - actor Actor -} - -type method interface { - Call(in []reflect.Value) []reflect.Value - Type() reflect.Type -} - -var _ Dispatcher = (*actorDispatcher)(nil) - -// Dispatch implements `Dispatcher`. -func (d *actorDispatcher) Dispatch(methodNum abi.MethodNum, ctx interface{}, arg1 interface{}) (interface{}, error) { - // get method signature - m, err := d.signature(methodNum) - if err != nil { - return nil, err - } - - // build args to pass to the method - args := []reflect.Value{ - // the ctx will be automatically coerced - reflect.ValueOf(ctx), - } - - // Dragons: simplify this to arginterface - if arg1 == nil { - args = append(args, m.ArgNil()) - } else if raw, ok := arg1.([]byte); ok { - obj, err := m.ArgInterface(raw) - if err != nil { - return nil, err - } - args = append(args, reflect.ValueOf(obj)) - } else if raw, ok := arg1.(runtime.CBORBytes); ok { - obj, err := m.ArgInterface(raw) - if err != nil { - return nil, err - } - args = append(args, reflect.ValueOf(obj)) - } else { - args = append(args, reflect.ValueOf(arg1)) - } - - // invoke the method - out := m.method.Call(args) - - // Note: we only support single objects being returned - if len(out) > 1 { - return nil, fmt.Errorf("actor method returned more than one object. method: %d, code: %s", methodNum, d.code) - } - - // method returns unit - // Note: we need to check for `IsNill()` here because Go doesnt work if you do `== nil` on the interface - if len(out) == 0 || (out[0].Kind() != reflect.Struct && out[0].IsNil()) { - return nil, nil - } - - // forward return - return out[0].Interface(), nil -} - -func (d *actorDispatcher) signature(methodID abi.MethodNum) (*methodSignature, error) { - exports := d.actor.Exports() - - // get method entry - methodIdx := (uint64)(methodID) - if len(exports) < (int)(methodIdx) { - return nil, fmt.Errorf("Method undefined. method: %d, code: %s", methodID, d.code) - } - entry := exports[methodIdx] - if entry == nil { - return nil, fmt.Errorf("Method undefined. method: %d, code: %s", methodID, d.code) - } - - ventry := reflect.ValueOf(entry) - return &methodSignature{method: ventry}, nil -} - -// Signature implements `Dispatcher`. -func (d *actorDispatcher) Signature(methodNum abi.MethodNum) (MethodSignature, error) { - return d.signature(methodNum) -} diff --git a/internal/pkg/vm/internal/dispatch/loader.go b/internal/pkg/vm/internal/dispatch/loader.go deleted file mode 100644 index 860734eeec..0000000000 --- a/internal/pkg/vm/internal/dispatch/loader.go +++ /dev/null @@ -1,42 +0,0 @@ -package dispatch - -import ( - "fmt" - - "github.com/ipfs/go-cid" -) - -// CodeLoader allows you to load an actor's code based on its id an epoch. -type CodeLoader struct { - actors map[cid.Cid]Actor -} - -// GetActorImpl returns executable code for an actor by code cid at a specific protocol version -func (cl CodeLoader) GetActorImpl(code cid.Cid) (Dispatcher, error) { - actor, ok := cl.actors[code] - if !ok { - return nil, fmt.Errorf("Actor code not found. code: %s", code) - } - return &actorDispatcher{code: code, actor: actor}, nil -} - -// CodeLoaderBuilder helps you build a CodeLoader. -type CodeLoaderBuilder struct { - actors map[cid.Cid]Actor -} - -// NewBuilder creates a builder to generate a builtin.Actor data structure -func NewBuilder() *CodeLoaderBuilder { - return &CodeLoaderBuilder{actors: map[cid.Cid]Actor{}} -} - -// Add lets you add an actor dispatch table for a given version. -func (b *CodeLoaderBuilder) Add(code cid.Cid, actor Actor) *CodeLoaderBuilder { - b.actors[code] = actor - return b -} - -// Build builds the code loader. -func (b *CodeLoaderBuilder) Build() CodeLoader { - return CodeLoader{actors: b.actors} -} diff --git a/internal/pkg/vm/internal/dispatch/signature.go b/internal/pkg/vm/internal/dispatch/signature.go deleted file mode 100644 index 5bb59912f4..0000000000 --- a/internal/pkg/vm/internal/dispatch/signature.go +++ /dev/null @@ -1,70 +0,0 @@ -package dispatch - -import ( - "bytes" - "reflect" - - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/pkg/errors" -) - -// MethodSignature wraps a specific method and allows you to encode/decodes input/output bytes into concrete types. -type MethodSignature interface { - // ArgNil returns a nil interface for the typed argument expected by the actor method. - ArgNil() reflect.Value - // ArgInterface returns the typed argument expected by the actor method. - ArgInterface(argBytes []byte) (interface{}, error) - // ReturnInterface returns the methods typed return. - ReturnInterface(returnBytes []byte) (interface{}, error) -} - -type methodSignature struct { - method method -} - -var _ MethodSignature = (*methodSignature)(nil) - -func (ms *methodSignature) ArgNil() reflect.Value { - t := ms.method.Type().In(1) - v := reflect.New(t) - return v.Elem() -} - -func (ms *methodSignature) ArgInterface(argBytes []byte) (interface{}, error) { - // decode arg1 (this is the payload for the actor method) - t := ms.method.Type().In(1) - v := reflect.New(t) - - // This would be better fixed in then encoding library. - obj := v.Elem().Interface() - if _, ok := obj.(runtime.CBORUnmarshaler); ok { - buf := bytes.NewBuffer(argBytes) - auxv := reflect.New(t.Elem()) - obj = auxv.Interface() - - unmarsh := obj.(runtime.CBORUnmarshaler) - if err := unmarsh.UnmarshalCBOR(buf); err != nil { - return nil, err - } - return unmarsh, nil - } - - if err := encoding.Decode(argBytes, v.Interface()); err != nil { - return nil, errors.Wrap(err, "failed to decode bytes as method argument") - } - - // dereference the extra pointer created by `reflect.New()` - return v.Elem().Interface(), nil -} - -func (ms *methodSignature) ReturnInterface(returnBytes []byte) (interface{}, error) { - // decode arg1 (this is the payload for the actor method) - t := ms.method.Type().Out(0) - v := reflect.New(t) - if err := encoding.Decode(returnBytes, v.Interface()); err != nil { - return nil, errors.Wrap(err, "failed to decode return bytes for method") - } - - return v.Interface(), nil -} diff --git a/internal/pkg/vm/internal/dispatch/signature_test.go b/internal/pkg/vm/internal/dispatch/signature_test.go deleted file mode 100644 index bd1c05105e..0000000000 --- a/internal/pkg/vm/internal/dispatch/signature_test.go +++ /dev/null @@ -1,92 +0,0 @@ -package dispatch - -import ( - "reflect" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -type fakeActor struct{} - -type SimpleParams struct { - Name string -} - -type SimpleReturn struct { - someValue uint64 -} - -func (*fakeActor) simpleMethod(ctx interface{}, params SimpleParams) SimpleReturn { - return SimpleReturn{someValue: 3} -} - -func (*fakeActor) pointerParam(ctx interface{}, params *SimpleParams) SimpleReturn { - return SimpleReturn{someValue: 3} -} - -func (*fakeActor) pointerReturn(ctx interface{}, params SimpleParams) *SimpleReturn { - return &SimpleReturn{someValue: 3} -} - -func (*fakeActor) noParams(ctx interface{}) SimpleReturn { - return SimpleReturn{someValue: 3} -} - -func (*fakeActor) noReturn(ctx interface{}, params *SimpleParams) { - /* empty */ -} - -func (*fakeActor) minimalist(ctx interface{}) { - /* empty */ -} - -func TestArgInterface(t *testing.T) { - tf.UnitTest(t) - - fa := fakeActor{} - - params := SimpleParams{Name: "tester"} - setup := func(method interface{}) (methodSignature, []byte) { - s := methodSignature{method: reflect.ValueOf(method)} - - encodedParams, err := encoding.Encode(params) - assert.NoError(t, err) - - return s, encodedParams - } - - assertArgInterface := func(s methodSignature, encodedParams []byte) interface{} { - ret, err := s.ArgInterface(encodedParams) - assert.NoError(t, err) - assert.NotNil(t, ret) - return ret - } - - t.Run("simpleMethod", func(t *testing.T) { - s, encodedParams := setup(fa.simpleMethod) - - ret := assertArgInterface(s, encodedParams) - - v, ok := ret.(SimpleParams) - assert.True(t, ok) - assert.Equal(t, params.Name, v.Name) - }) - - t.Run("pointerParam", func(t *testing.T) { - s, encodedParams := setup(fa.pointerParam) - - ret := assertArgInterface(s, encodedParams) - - v, ok := ret.(*SimpleParams) - assert.True(t, ok) - assert.Equal(t, params.Name, v.Name) - }) - - t.Run("noParams", func(t *testing.T) { - // Dragons: not supported, must panic - }) -} diff --git a/internal/pkg/vm/internal/errors/vminternal.go b/internal/pkg/vm/internal/errors/vminternal.go deleted file mode 100644 index 3ca7522e51..0000000000 --- a/internal/pkg/vm/internal/errors/vminternal.go +++ /dev/null @@ -1,10 +0,0 @@ -// Package internal has all the things vm and only vm need. -// -// This contents can be slowly placed on the vm internal. -package internal - -const ( - // ErrInsufficientGas indicates that an actor did not have sufficient gas to run a message - // Dragons: remove when new actors come in - ErrInsufficientGas = 36 -) diff --git a/internal/pkg/vm/internal/gascost/gascost.go b/internal/pkg/vm/internal/gascost/gascost.go deleted file mode 100644 index fc3245b5ec..0000000000 --- a/internal/pkg/vm/internal/gascost/gascost.go +++ /dev/null @@ -1,89 +0,0 @@ -package gascost - -import ( - "fmt" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/message" - "github.com/filecoin-project/specs-actors/actors/abi" -) - -// Pricelist provides prices for operations in the VM. -// -// Note: this interface should be APPEND ONLY since last chain checkpoint -type Pricelist interface { - // OnChainMessage returns the gas used for storing a message of a given size in the chain. - OnChainMessage(msgSize int) gas.Unit - // OnChainReturnValue returns the gas used for storing the response of a message in the chain. - OnChainReturnValue(receipt *message.Receipt) gas.Unit - - // OnMethodInvocation returns the gas used when invoking a method. - OnMethodInvocation(value abi.TokenAmount, methodNum abi.MethodNum) gas.Unit - - // OnIpldGet returns the gas used for storing an object - OnIpldGet(dataSize int) gas.Unit - // OnIpldPut returns the gas used for storing an object - OnIpldPut(dataSize int) gas.Unit - - // OnCreateActor returns the gas used for creating an actor - OnCreateActor() gas.Unit - // OnDeleteActor returns the gas used for deleting an actor - OnDeleteActor() gas.Unit - - OnVerifySignature(sigType crypto.SigType, planTextSize int) (gas.Unit, error) - OnHashing(dataSize int) gas.Unit - OnComputeUnsealedSectorCid(proofType abi.RegisteredProof, pieces *[]abi.PieceInfo) gas.Unit - OnVerifySeal(info abi.SealVerifyInfo) gas.Unit - OnVerifyPoSt(info abi.WindowPoStVerifyInfo) gas.Unit - OnVerifyConsensusFault() gas.Unit -} - -var prices = map[abi.ChainEpoch]Pricelist{ - abi.ChainEpoch(0): &pricelistV0{ - // These message base/byte values must match those in message validation. - onChainMessageBase: gas.Zero, - onChainMessagePerByte: gas.NewGas(2), - onChainReturnValuePerByte: gas.NewGas(8), - sendBase: gas.NewGas(5), - sendTransferFunds: gas.NewGas(5), - sendInvokeMethod: gas.NewGas(10), - ipldGetBase: gas.NewGas(10), - ipldGetPerByte: gas.NewGas(1), - ipldPutBase: gas.NewGas(20), - ipldPutPerByte: gas.NewGas(2), - createActorBase: gas.NewGas(40), // IPLD put + 20 - createActorExtra: gas.NewGas(500), - deleteActor: gas.NewGas(-500), // -createActorExtra - // Dragons: this cost is not persistable, create a LinearCost{a,b} struct that has a `.Cost(x) -> ax + b` - verifySignature: map[crypto.SigType]func(gas.Unit) gas.Unit{ - crypto.SigTypeBLS: func(x gas.Unit) gas.Unit { return gas.NewGas(3)*x + gas.NewGas(2) }, - crypto.SigTypeSecp256k1: func(x gas.Unit) gas.Unit { return gas.NewGas(3)*x + gas.NewGas(2) }, - }, - hashingBase: gas.NewGas(5), - hashingPerByte: gas.NewGas(2), - computeUnsealedSectorCidBase: gas.NewGas(100), - verifySealBase: gas.NewGas(2000), - verifyPostBase: gas.NewGas(700), - verifyConsensusFault: gas.NewGas(10), - }, -} - -// PricelistByEpoch finds the latest prices for the given epoch -func PricelistByEpoch(epoch abi.ChainEpoch) Pricelist { - // since we are storing the prices as map or epoch to price - // we need to get the price with the highest epoch that is lower or equal to the `epoch` arg - bestEpoch := abi.ChainEpoch(0) - bestPrice := prices[bestEpoch] - for e, pl := range prices { - // if `e` happened after `bestEpoch` and `e` is earlier or equal to the target `epoch` - if e > bestEpoch && e <= epoch { - bestEpoch = e - bestPrice = pl - } - } - if bestPrice == nil { - panic(fmt.Sprintf("bad setup: no gas prices available for epoch %d", epoch)) - } - return bestPrice -} diff --git a/internal/pkg/vm/internal/gascost/pricelistV0.go b/internal/pkg/vm/internal/gascost/pricelistV0.go deleted file mode 100644 index 657497f21a..0000000000 --- a/internal/pkg/vm/internal/gascost/pricelistV0.go +++ /dev/null @@ -1,173 +0,0 @@ -package gascost - -import ( - "fmt" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/message" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" -) - -type pricelistV0 struct { - /////////////////////////////////////////////////////////////////////////// - // System operations - /////////////////////////////////////////////////////////////////////////// - - // Gas cost charged to the originator of an on-chain message (regardless of - // whether it succeeds or fails in application) is given by: - // OnChainMessageBase + len(serialized message)*OnChainMessagePerByte - // Together, these account for the cost of message propagation and validation, - // up to but excluding any actual processing by the VM. - // This is the cost a block producer burns when including an invalid message. - onChainMessageBase gas.Unit - onChainMessagePerByte gas.Unit - - // Gas cost charged to the originator of a non-nil return value produced - // by an on-chain message is given by: - // len(return value)*OnChainReturnValuePerByte - onChainReturnValuePerByte gas.Unit - - // Gas cost for any message send execution(including the top-level one - // initiated by an on-chain message). - // This accounts for the cost of loading sender and receiver actors and - // (for top-level messages) incrementing the sender's sequence number. - // Load and store of actor sub-state is charged separately. - sendBase gas.Unit - - // Gas cost charged, in addition to SendBase, if a message send - // is accompanied by any nonzero currency amount. - // Accounts for writing receiver's new balance (the sender's state is - // already accounted for). - sendTransferFunds gas.Unit - - // Gas cost charged, in addition to SendBase, if a message invokes - // a method on the receiver. - // Accounts for the cost of loading receiver code and method dispatch. - sendInvokeMethod gas.Unit - - // Gas cost (Base + len*PerByte) for any Get operation to the IPLD store - // in the runtime VM context. - ipldGetBase gas.Unit - ipldGetPerByte gas.Unit - - // Gas cost (Base + len*PerByte) for any Put operation to the IPLD store - // in the runtime VM context. - // - // Note: these costs should be significantly higher than the costs for Get - // operations, since they reflect not only serialization/deserialization - // but also persistent storage of chain data. - ipldPutBase gas.Unit - ipldPutPerByte gas.Unit - - // Gas cost for creating a new actor (via InitActor's Exec method). - // - // Note: this costs assume that the extra will be partially or totally refunded while - // the base is covering for the put. - createActorBase gas.Unit - createActorExtra gas.Unit - - // Gas cost for deleting an actor. - // - // Note: this partially refunds the create cost to incentivise the deletion of the actors. - deleteActor gas.Unit - - verifySignature map[crypto.SigType]func(gas.Unit) gas.Unit - - hashingBase gas.Unit - hashingPerByte gas.Unit - - computeUnsealedSectorCidBase gas.Unit - verifySealBase gas.Unit - verifyPostBase gas.Unit - verifyConsensusFault gas.Unit -} - -var _ Pricelist = (*pricelistV0)(nil) - -// OnChainMessage returns the gas used for storing a message of a given size in the chain. -func (pl *pricelistV0) OnChainMessage(msgSize int) gas.Unit { - return pl.onChainMessageBase + pl.onChainMessagePerByte*gas.Unit(msgSize) -} - -// OnChainReturnValue returns the gas used for storing the response of a message in the chain. -func (pl *pricelistV0) OnChainReturnValue(receipt *message.Receipt) gas.Unit { - return gas.Unit(len(receipt.ReturnValue)) * pl.onChainReturnValuePerByte -} - -// OnMethodInvocation returns the gas used when invoking a method. -func (pl *pricelistV0) OnMethodInvocation(value abi.TokenAmount, methodNum abi.MethodNum) gas.Unit { - ret := pl.sendBase - if value != abi.NewTokenAmount(0) { - ret += pl.sendTransferFunds - } - if methodNum != builtin.MethodSend { - ret += pl.sendInvokeMethod - } - return ret -} - -// OnIpldGet returns the gas used for storing an object -func (pl *pricelistV0) OnIpldGet(dataSize int) gas.Unit { - return pl.ipldGetBase + gas.Unit(dataSize)*pl.ipldGetPerByte -} - -// OnIpldPut returns the gas used for storing an object -func (pl *pricelistV0) OnIpldPut(dataSize int) gas.Unit { - return pl.ipldPutBase + gas.Unit(dataSize)*pl.ipldPutPerByte -} - -// OnCreateActor returns the gas used for creating an actor -func (pl *pricelistV0) OnCreateActor() gas.Unit { - return pl.createActorBase + pl.createActorExtra -} - -// OnDeleteActor returns the gas used for deleting an actor -func (pl *pricelistV0) OnDeleteActor() gas.Unit { - return pl.deleteActor -} - -// OnVerifySignature -func (pl *pricelistV0) OnVerifySignature(sigType crypto.SigType, planTextSize int) (gas.Unit, error) { - costFn, ok := pl.verifySignature[sigType] - if !ok { - return 0, fmt.Errorf("cost function for signature type %d not supported", sigType) - } - return costFn(gas.Unit(planTextSize)), nil -} - -// OnHashing -func (pl *pricelistV0) OnHashing(dataSize int) gas.Unit { - return pl.hashingBase + gas.Unit(dataSize)*pl.hashingPerByte -} - -// OnComputeUnsealedSectorCid -func (pl *pricelistV0) OnComputeUnsealedSectorCid(proofType abi.RegisteredProof, pieces *[]abi.PieceInfo) gas.Unit { - // TODO: this needs more cost tunning, check with @lotus - return pl.computeUnsealedSectorCidBase -} - -// OnVerifySeal -func (pl *pricelistV0) OnVerifySeal(info abi.SealVerifyInfo) gas.Unit { - // TODO: this needs more cost tunning, check with @lotus - return pl.verifySealBase -} - -// OnVerifyWinningPoSt -func (pl *pricelistV0) OnVerifyWinningPoSt(info abi.WinningPoStVerifyInfo) gas.Unit { - // TODO: this needs more cost tunning, check with @lotus - return pl.verifyPostBase -} - -// OnVerifyPoSt -func (pl *pricelistV0) OnVerifyPoSt(info abi.WindowPoStVerifyInfo) gas.Unit { - // TODO: this needs more cost tunning, check with @lotus - return pl.verifyPostBase -} - -// OnVerifyConsensusFault -func (pl *pricelistV0) OnVerifyConsensusFault() gas.Unit { - return pl.verifyConsensusFault -} diff --git a/internal/pkg/vm/internal/interpreter/interpreter.go b/internal/pkg/vm/internal/interpreter/interpreter.go deleted file mode 100644 index a8040588ab..0000000000 --- a/internal/pkg/vm/internal/interpreter/interpreter.go +++ /dev/null @@ -1,26 +0,0 @@ -package interpreter - -import ( - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/message" -) - -// VMInterpreter orchestrates the execution of messages from a tipset on that tipsetโ€™s parent state. -type VMInterpreter interface { - // ApplyTipSetMessages applies all the messages in a tipset. - // - // Note: any message processing error will be present as an `ExitCode` in the `MessageReceipt`. - ApplyTipSetMessages(blocks []BlockMessagesInfo, head block.TipSetKey, epoch abi.ChainEpoch, rnd crypto.RandomnessSource) ([]message.Receipt, error) -} - -// BlockMessagesInfo contains messages for one block in a tipset. -type BlockMessagesInfo struct { - BLSMessages []*types.UnsignedMessage - SECPMessages []*types.SignedMessage - Miner address.Address -} diff --git a/internal/pkg/vm/internal/message/result.go b/internal/pkg/vm/internal/message/result.go deleted file mode 100644 index d8e830b961..0000000000 --- a/internal/pkg/vm/internal/message/result.go +++ /dev/null @@ -1,60 +0,0 @@ -package message - -import ( - "encoding/json" - "fmt" - - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// Receipt is what is returned by executing a message on the vm. -type Receipt struct { - // control field for encoding struct as an array - _ struct{} `cbor:",toarray"` - ExitCode exitcode.ExitCode `json:"exitCode"` - ReturnValue []byte `json:"return"` - GasUsed gas.Unit `json:"gasUsed"` -} - -// Value returns a successful code with the value encoded. -// -// Callers do NOT need to encode the value before calling this method. -func Value(obj interface{}, gasUsed gas.Unit) Receipt { - code := exitcode.Ok - var aux []byte - if obj != nil { - var err error - aux, err = encoding.Encode(obj) - if err != nil { - code = exitcode.SysErrSerialization - } - } - - return Receipt{ - ExitCode: code, - ReturnValue: aux, - GasUsed: gasUsed, - } -} - -// Failure returns with a non-zero exit code. -func Failure(exitCode exitcode.ExitCode, gasAmount gas.Unit) Receipt { - return Receipt{ - ExitCode: exitCode, - ReturnValue: []byte{}, - GasUsed: gasAmount, - } -} - -func (r *Receipt) String() string { - errStr := "(error encoding MessageReceipt)" - - js, err := json.MarshalIndent(r, "", " ") - if err != nil { - return errStr - } - return fmt.Sprintf("MessageReceipt: %s", string(js)) -} diff --git a/internal/pkg/vm/internal/storage/storage.go b/internal/pkg/vm/internal/storage/storage.go deleted file mode 100644 index 4d94e71aee..0000000000 --- a/internal/pkg/vm/internal/storage/storage.go +++ /dev/null @@ -1,202 +0,0 @@ -package storage - -import ( - "context" - "errors" - - blocks "github.com/ipfs/go-block-format" - "github.com/ipfs/go-cid" - blockstore "github.com/ipfs/go-ipfs-blockstore" - cbor "github.com/ipfs/go-ipld-cbor" - format "github.com/ipfs/go-ipld-format" - ipld "github.com/ipfs/go-ipld-format" - - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" -) - -// TODO: limit memory footprint -// TODO: implement ipld.Store - -// VMStorage implements a content-addressable store for the VM. -type VMStorage struct { - blockstore blockstore.Blockstore - writeBuffer map[cid.Cid]ipld.Node - readCache map[cid.Cid]blocks.Block - readCacheEnabled bool -} - -// ErrNotFound is returned by storage when no object matches a requested Cid. -var ErrNotFound = errors.New("object not found") - -// SerializationError is returned by storage when de/serialization of the object fails. -type SerializationError struct { - error -} - -// NewStorage creates a new VMStorage. -func NewStorage(bs blockstore.Blockstore) VMStorage { - return VMStorage{ - blockstore: bs, - writeBuffer: map[cid.Cid]ipld.Node{}, - readCache: map[cid.Cid]blocks.Block{}, - readCacheEnabled: false, - } -} - -// SetReadCache enable/disables the read chache. -func (s *VMStorage) SetReadCache(enabled bool) { - s.readCacheEnabled = enabled -} - -// Put stores object and returns it's content-addressable ID. -func (s *VMStorage) Put(ctx context.Context, obj interface{}) (cid.Cid, int, error) { - nd, err := s.toNode(obj) - if err != nil { - return cid.Undef, 0, SerializationError{err} - } - - // append the object to the buffer - cid := nd.Cid() - s.writeBuffer[cid] = nd - - return cid, len(nd.RawData()), nil -} - -// CidOf returns the Cid of the object without storing it. -func (s *VMStorage) CidOf(obj interface{}) (cid.Cid, error) { - nd, err := s.toNode(obj) - if err != nil { - return cid.Undef, err - } - return nd.Cid(), nil -} - -// Get loads the object based on its content-addressable ID. -func (s *VMStorage) Get(ctx context.Context, cid cid.Cid, obj interface{}) (int, error) { - raw, err := s.GetRaw(ctx, cid) - if err != nil { - return 0, err - } - err = encoding.Decode(raw, obj) - if err != nil { - return 0, SerializationError{err} - } - return len(raw), nil -} - -// GetRaw retrieves the raw bytes stored, returns true if it exists. -func (s *VMStorage) GetRaw(ctx context.Context, cid cid.Cid) ([]byte, error) { - // attempt to read from write buffer first - n, ok := s.writeBuffer[cid] - if ok { - // decode the object - return n.RawData(), nil - } - - if s.readCacheEnabled { - // attempt to read from the read cache - n, ok := s.readCache[cid] - if ok { - // decode the object - return n.RawData(), nil - } - } - - // read from store - blk, err := s.blockstore.Get(cid) - if err != nil { - if err == blockstore.ErrNotFound { - return nil, ErrNotFound - } - return nil, err - } - - if s.readCacheEnabled { - // add object to read cache - s.readCache[cid] = blk - } - - return blk.RawData(), nil -} - -// Flush writes all the in-memory held objects down to the store. -// -// This will automatically clear the write buffer when returning without error. -// -// If the read cache is enabled, the flushed objects will be read from cache. -func (s *VMStorage) Flush() error { - // extract list of blocks for the underlying store from our internal map - blks := make([]blocks.Block, 0, len(s.writeBuffer)) - for _, nd := range s.writeBuffer { - blks = append(blks, nd) - } - - // From https://github.com/dgraph-io/badger/issues/441: "a txn should not exceed the size of a single memtable" - // Default badger.DefaultOptions.MaxTableSize is 64Mib - // Pushing this hard would require measuring the size of each block and also accounting for badger object overheads. - // 1024 would give us very generous room for 64Kib per object. - maxBatchSize := 4 * 1024 - - // Write at most maxBatchSize objects to store at a time - remaining := blks - for len(remaining) > 0 { - last := min(len(remaining), maxBatchSize) - if err := s.blockstore.PutMany(remaining[:last]); err != nil { - return err - } - remaining = remaining[last:] - } - - if s.readCacheEnabled { - // move objects to read cache - for cid, nd := range s.writeBuffer { - s.readCache[cid] = nd - } - } - // clear write buffer - s.ClearWriteBuffer() - return nil -} - -// ClearWriteBuffer drops all the pending writes. -func (s *VMStorage) ClearWriteBuffer() { - s.writeBuffer = map[cid.Cid]ipld.Node{} -} - -// Clear will clear all buffers and caches. -// -// WARNING: thil will NOT flush the pending writes to the store. -func (s *VMStorage) Clear() { - s.writeBuffer = map[cid.Cid]ipld.Node{} - s.readCache = map[cid.Cid]blocks.Block{} -} - -// Put adds a node to temporary storage by id. -func (s *VMStorage) toNode(v interface{}) (ipld.Node, error) { - var nd format.Node - var err error - if blk, ok := v.(blocks.Block); ok { - // optimize putting blocks - nd, err = cbor.DecodeBlock(blk) - } else { - var raw []byte - raw, err = encoding.Encode(v) - if err != nil { - return nil, err - } - - nd, err = cbor.Decode(raw, constants.DefaultHashFunction, -1) - } - if err != nil { - return nil, err - } - return nd, nil -} - -func min(a, b int) int { - if a < b { - return a - } - return b -} diff --git a/internal/pkg/vm/internal/storage/storage_test.go b/internal/pkg/vm/internal/storage/storage_test.go deleted file mode 100644 index 9d6102bc0b..0000000000 --- a/internal/pkg/vm/internal/storage/storage_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package storage_test - -import ( - "bytes" - "context" - "fmt" - "io/ioutil" - "os" - "testing" - - badger "github.com/ipfs/go-ds-badger2" - blockstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/storage" -) - -func TestBatchSize(t *testing.T) { - tf.IntegrationTest(t) - ctx := context.Background() - dir, err := ioutil.TempDir("", "storagetest") - require.NoError(t, err) - defer func() { - _ = os.RemoveAll(dir) - }() - ds, err := badger.NewDatastore(dir, &badger.DefaultOptions) - require.NoError(t, err) - bs := blockstore.NewBlockstore(ds) - store := storage.NewStorage(bs) - - // This iteration count was picked experimentally based on a badger default maxtablesize of 64 << 20. - // If the batching is disabled inside the store, this test should fail. - require.Equal(t, int64(64<<20), badger.DefaultOptions.MaxTableSize) - iterCount := int64(2) << 16 - - data := bytes.Repeat([]byte("badger"), 100) - for i := int64(0); i < iterCount; i++ { - _, _, err = store.Put(ctx, fmt.Sprintf("%s%d", data, i)) - require.NoError(t, err) - } - err = store.Flush() - require.NoError(t, err) -} diff --git a/internal/pkg/vm/internal/vmcontext/actor_state_handle.go b/internal/pkg/vm/internal/vmcontext/actor_state_handle.go deleted file mode 100644 index 98235af4b1..0000000000 --- a/internal/pkg/vm/internal/vmcontext/actor_state_handle.go +++ /dev/null @@ -1,98 +0,0 @@ -package vmcontext - -import ( - specsruntime "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/runtime" -) - -type actorStateHandle struct { - ctx actorStateHandleContext - // validations is a list of validations that the vm will execute after the actor code finishes. - // - // Any validation failure will result in the execution getting aborted. - validations []validateFn - // used_objs holds the pointers to objs that have been used with this handle and their expected state cid. - usedObjs map[interface{}]cid.Cid -} - -// validateFn returns True if it's valid. -type validateFn = func() bool - -type actorStateHandleContext interface { - AllowSideEffects(bool) - Create(obj specsruntime.CBORMarshaler) cid.Cid - Load(obj specsruntime.CBORUnmarshaler) cid.Cid - Replace(expected cid.Cid, obj specsruntime.CBORMarshaler) cid.Cid -} - -// NewActorStateHandle returns a new `ActorStateHandle` -// -// Note: just visible for testing. -func NewActorStateHandle(ctx actorStateHandleContext) specsruntime.StateHandle { - aux := newActorStateHandle(ctx) - return &aux -} - -func newActorStateHandle(ctx actorStateHandleContext) actorStateHandle { - return actorStateHandle{ - ctx: ctx, - validations: []validateFn{}, - usedObjs: map[interface{}]cid.Cid{}, - } -} - -var _ specsruntime.StateHandle = (*actorStateHandle)(nil) - -func (h *actorStateHandle) Create(obj specsruntime.CBORMarshaler) { - // Store the new state. - c := h.ctx.Create(obj) - // Store the expected CID of obj. - h.usedObjs[obj] = c -} - -// Readonly is the implementation of the ActorStateHandle interface. -func (h *actorStateHandle) Readonly(obj specsruntime.CBORUnmarshaler) { - // Load state to obj. - c := h.ctx.Load(obj) - // Track the state and expected CID used by the caller. - h.usedObjs[obj] = c -} - -// Transaction is the implementation of the ActorStateHandle interface. -func (h *actorStateHandle) Transaction(obj specsruntime.CBORer, f func() interface{}) interface{} { - if obj == nil { - runtime.Abortf(exitcode.SysErrorIllegalActor, "Must not pass nil to Transaction()") - } - - // Load state to obj. - prior := h.ctx.Load(obj) - - // Call user code allowing mutation but not side-effects - h.ctx.AllowSideEffects(false) - out := f() - h.ctx.AllowSideEffects(true) - - // Store the new state - newCid := h.ctx.Replace(prior, obj) - - // Record the expected state of obj - h.usedObjs[obj] = newCid - return out -} - -// Validate validates that the state was mutated properly. -// -// This method is not part of the public API, -// it is expected to be called by the runtime after each actor method. -func (h *actorStateHandle) Validate(cidFn func(interface{}) cid.Cid) { - for obj, head := range h.usedObjs { - // verify the obj has not changed - usedCid := cidFn(obj) - if usedCid != head { - runtime.Abortf(exitcode.SysErrorIllegalActor, "State mutated outside of Transaction() scope") - } - } -} diff --git a/internal/pkg/vm/internal/vmcontext/actor_state_handle_test.go b/internal/pkg/vm/internal/vmcontext/actor_state_handle_test.go deleted file mode 100644 index 8b8b52df29..0000000000 --- a/internal/pkg/vm/internal/vmcontext/actor_state_handle_test.go +++ /dev/null @@ -1,335 +0,0 @@ -package vmcontext_test - -import ( - "fmt" - "io" - "testing" - - "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/ipfs/go-cid" - "github.com/stretchr/testify/assert" - - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/vmcontext" -) - -func init() { - encoding.RegisterIpldCborType(testActorStateHandleState{}) -} - -type testActorStateHandleState struct { - FieldA string -} - -func (t *testActorStateHandleState) MarshalCBOR(w io.Writer) error { - aux, err := encoding.Encode(t.FieldA) - if err != nil { - return err - } - if _, err := w.Write(aux); err != nil { - return err - } - return nil -} - -func (t *testActorStateHandleState) UnmarshalCBOR(r io.Reader) error { - bs := make([]byte, 1024) - n, err := r.Read(bs) - if err != nil { - return err - } - if err := encoding.Decode(bs[:n], &t.FieldA); err != nil { - return err - } - return nil -} - -func setup() testSetup { - initialstate := testActorStateHandleState{FieldA: "fakestate"} - - store := vm.NewTestStorage(&initialstate) - initialhead := store.CidOf(&initialstate) - ctx := fakeActorStateHandleContext{ - head: initialhead, - store: store, - allowSideEffects: true, - } - h := vmcontext.NewActorStateHandle(&ctx) - - cleanup := func() { - // the vmcontext is supposed to call validate after each actor method - implH := h.(extendedStateHandle) - implH.Validate(func(obj interface{}) cid.Cid { return store.CidOf(obj) }) - } - - return testSetup{ - initialstate: initialstate, - h: h, - cleanup: cleanup, - } -} - -func TestActorStateHandle(t *testing.T) { - tf.UnitTest(t) - - // this test case verifies that the `Validate` works when nothing was done with the state - t.Run("noop", func(t *testing.T) { - ts := setup() - defer ts.cleanup() - }) - - t.Run("readonly", func(t *testing.T) { - ts := setup() - defer ts.cleanup() - - var out testActorStateHandleState - ts.h.Readonly(&out) - - assert.Equal(t, out, ts.initialstate) - }) - - t.Run("abort on mutating a readonly", func(t *testing.T) { - defer mustPanic(t) - - ts := setup() - defer ts.cleanup() - - var out testActorStateHandleState - ts.h.Readonly(&out) - - out.FieldA = "changed!" - }) - - t.Run("readonly multiple times", func(t *testing.T) { - ts := setup() - defer ts.cleanup() - - var out testActorStateHandleState - ts.h.Readonly(&out) - ts.h.Readonly(&out) - - assert.Equal(t, out, ts.initialstate) - }) - - t.Run("readonly promotion", func(t *testing.T) { - ts := setup() - defer ts.cleanup() - - var out testActorStateHandleState - ts.h.Readonly(&out) - - ts.h.Transaction(&out, func() interface{} { - out.FieldA = "changed!" - return nil - }) - }) - - t.Run("transaction", func(t *testing.T) { - ts := setup() - defer ts.cleanup() - - var out testActorStateHandleState - expected := "new state" - - ts.h.Transaction(&out, func() interface{} { - // check state is not what we are going to use - assert.NotEqual(t, out.FieldA, expected) - out.FieldA = expected - - return nil - }) - // check that it changed - assert.Equal(t, out.FieldA, expected) - - ts.h.Readonly(&out) - // really check by loading it again - assert.Equal(t, out.FieldA, expected) - }) - - t.Run("transaction but no mutation", func(t *testing.T) { - ts := setup() - defer ts.cleanup() - - var out testActorStateHandleState - - // should work, mutating is not compulsory - ts.h.Transaction(&out, func() interface{} { - return nil - }) - - assert.Equal(t, out, ts.initialstate) - }) - - t.Run("transaction returning value", func(t *testing.T) { - ts := setup() - defer ts.cleanup() - - var out testActorStateHandleState - - v := ts.h.Transaction(&out, func() interface{} { - return out.FieldA - }) - - assert.Equal(t, v, ts.initialstate.FieldA) - }) - - t.Run("mutated after the transaction", func(t *testing.T) { - defer mustPanic(t) - - ts := setup() - defer ts.cleanup() - - var out testActorStateHandleState - - ts.h.Transaction(&out, func() interface{} { - out.FieldA = "changed!" - return nil - }) - - out.FieldA = "changed again!" - }) - - t.Run("transaction double whammy", func(t *testing.T) { - ts := setup() - defer ts.cleanup() - - var out testActorStateHandleState - - ts.h.Transaction(&out, func() interface{} { - out.FieldA = "changed!" - return nil - }) - - v := ts.h.Transaction(&out, func() interface{} { - out.FieldA = "again!" - return out.FieldA - }) - - ts.h.Readonly(&out) - // really check by loading it again - assert.Equal(t, out.FieldA, v) - }) -} - -func TestActorStateHandleNilState(t *testing.T) { - tf.UnitTest(t) - - setup := func() (runtime.StateHandle, func()) { - store := vm.NewTestStorage(nil) - ctx := fakeActorStateHandleContext{ - store: store, - allowSideEffects: true, - } - - h := vmcontext.NewActorStateHandle(&ctx) - - cleanup := func() { - // the vmcontext is supposed to call validate after each actor method - implH := h.(extendedStateHandle) - implH.Validate(func(obj interface{}) cid.Cid { return store.CidOf(obj) }) - } - - return h, cleanup - } - - t.Run("readonly on nil state is not allowed", func(t *testing.T) { - defer mustPanic(t) - - h, cleanup := setup() - defer cleanup() - - var out testActorStateHandleState - h.Readonly(&out) - }) - - t.Run("transaction on nil state", func(t *testing.T) { - h, cleanup := setup() - defer cleanup() - - var out testActorStateHandleState - h.Transaction(&out, func() interface{} { - return nil - }) - }) - - t.Run("state initialized after transaction", func(t *testing.T) { - h, cleanup := setup() - defer cleanup() - - var out testActorStateHandleState - h.Transaction(&out, func() interface{} { - return nil - }) - - h.Readonly(&out) // should not fail - }) - - t.Run("readonly nil pointer to state", func(t *testing.T) { - defer mustPanic(t) - - h, cleanup := setup() - defer cleanup() - - h.Readonly(nil) - }) - - t.Run("transaction nil pointer to state", func(t *testing.T) { - defer mustPanic(t) - - h, cleanup := setup() - defer cleanup() - - h.Transaction(nil, func() interface{} { - return nil - }) - }) -} - -type extendedStateHandle interface { - Validate(func(interface{}) cid.Cid) -} - -type fakeActorStateHandleContext struct { - store runtime.Store - head cid.Cid - allowSideEffects bool -} - -func (ctx *fakeActorStateHandleContext) AllowSideEffects(allow bool) { - ctx.allowSideEffects = allow -} - -func (ctx *fakeActorStateHandleContext) Create(obj runtime.CBORMarshaler) cid.Cid { - ctx.head = ctx.store.Put(obj) - return ctx.head -} - -func (ctx *fakeActorStateHandleContext) Load(obj runtime.CBORUnmarshaler) cid.Cid { - found := ctx.store.Get(ctx.head, obj) - if !found { - panic("inconsistent state") - } - return ctx.head -} - -func (ctx *fakeActorStateHandleContext) Replace(expected cid.Cid, obj runtime.CBORMarshaler) cid.Cid { - if !ctx.head.Equals(expected) { - panic(fmt.Errorf("unexpected prior state %s expected %s", ctx.head, expected)) - } - ctx.head = ctx.store.Put(obj) - return ctx.head -} - -type testSetup struct { - initialstate testActorStateHandleState - h runtime.StateHandle - cleanup func() -} - -func mustPanic(t *testing.T) { - if r := recover(); r == nil { - t.Fail() - } -} diff --git a/internal/pkg/vm/internal/vmcontext/actor_store.go b/internal/pkg/vm/internal/vmcontext/actor_store.go deleted file mode 100644 index 5a73c490a7..0000000000 --- a/internal/pkg/vm/internal/vmcontext/actor_store.go +++ /dev/null @@ -1,81 +0,0 @@ -package vmcontext - -import ( - "context" - "fmt" - "reflect" - - specsruntime "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/gascost" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/runtime" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/storage" -) - -type vmStorage interface { - Get(ctx context.Context, cid cid.Cid, obj interface{}) (int, error) - Put(ctx context.Context, obj interface{}) (cid.Cid, int, error) -} - -// ActorStorage hides the storage methods from the actors and turns the errors into runtime panics. -type ActorStorage struct { - context context.Context - inner vmStorage - pricelist gascost.Pricelist - gasTank *GasTracker -} - -func NewActorStorage(ctx context.Context, inner vmStorage, gasTank *GasTracker, pricelist gascost.Pricelist) *ActorStorage { - return &ActorStorage{ - context: ctx, - inner: inner, - pricelist: pricelist, - gasTank: gasTank, - } -} - -// -// implement runtime.Store for ActorStorage -// - -var _ specsruntime.Store = (*ActorStorage)(nil) - -// Serialization technically belongs in the actor code, rather than inside the VM. -// The true VM storage interface is in terms of raw bytes and, when we have user-defined, -// serialization code will be directly in those contracts. -// Our present runtime interface is at a slightly higher level for convenience, but the exit code here is the -// actor, rather than system-level, error code. -const serializationErr = exitcode.ErrSerialization - -func (s *ActorStorage) Put(obj specsruntime.CBORMarshaler) cid.Cid { - cid, ln, err := s.inner.Put(s.context, obj) - if err != nil { - msg := fmt.Sprintf("failed to put object %s in store: %s", reflect.TypeOf(obj), err) - if _, ok := err.(storage.SerializationError); ok { - runtime.Abortf(serializationErr, msg) - } else { - panic(msg) - } - } - s.gasTank.Charge(s.pricelist.OnIpldPut(ln), "storage put %s %d bytes into %v", cid, ln, obj) - return cid -} - -func (s *ActorStorage) Get(cid cid.Cid, obj specsruntime.CBORUnmarshaler) bool { - ln, err := s.inner.Get(s.context, cid, obj) - if err == storage.ErrNotFound { - return false - } - if err != nil { - msg := fmt.Sprintf("failed to get object %s %s from store: %s", reflect.TypeOf(obj), cid, err) - if _, ok := err.(storage.SerializationError); ok { - runtime.Abortf(serializationErr, msg) - } else { - panic(msg) - } - } - s.gasTank.Charge(s.pricelist.OnIpldGet(ln), "storage get %s %d bytes into %v", cid, ln, obj) - return true -} diff --git a/internal/pkg/vm/internal/vmcontext/actor_store_test.go b/internal/pkg/vm/internal/vmcontext/actor_store_test.go deleted file mode 100644 index cff76f5b2f..0000000000 --- a/internal/pkg/vm/internal/vmcontext/actor_store_test.go +++ /dev/null @@ -1,104 +0,0 @@ -package vmcontext_test - -import ( - "context" - "fmt" - "io" - "testing" - - "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - blockstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - typegen "github.com/whyrusleeping/cbor-gen" - - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/gascost" - vmr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/runtime" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/vmcontext" -) - -func TestActorStore(t *testing.T) { - ctx := context.Background() - raw := vm.NewStorage(blockstore.NewBlockstore(datastore.NewMapDatastore())) - gasTank := vmcontext.NewGasTracker(1e6) - - t.Run("abort on put serialization failure", func(t *testing.T) { - store := vmcontext.NewActorStorage(ctx, &raw, &gasTank, gascost.PricelistByEpoch(0)) - _, thrown := tryPut(store, cannotCBOR{}) - abort, ok := thrown.(vmr.ExecutionPanic) - assert.NotNil(t, thrown) - assert.True(t, ok, "expected abort") - assert.Equal(t, exitcode.ErrSerialization, abort.Code()) - }) - - t.Run("abort on get serialization failure", func(t *testing.T) { - store := vmcontext.NewActorStorage(ctx, &raw, &gasTank, gascost.PricelistByEpoch(0)) - v := typegen.CborInt(0) - - c, thrown := tryPut(store, &v) - assert.True(t, c.Defined()) - require.Nil(t, thrown) - - var v2 typegen.CborCid - thrown = tryGet(store, c, &v2) // Attempt decode into wrong type - abort, ok := thrown.(vmr.ExecutionPanic) - assert.NotNil(t, thrown) - assert.True(t, ok, "expected abort") - assert.Equal(t, exitcode.ErrSerialization, abort.Code()) - }) - - t.Run("panic on put storage failure", func(t *testing.T) { - store := vmcontext.NewActorStorage(ctx, &brokenStorage{}, &gasTank, gascost.PricelistByEpoch(0)) - v := typegen.CborInt(0) - _, thrown := tryPut(store, &v) - _, ok := thrown.(vmr.ExecutionPanic) - assert.NotNil(t, thrown) - assert.False(t, ok, "expected non-abort panic") - }) - - t.Run("panic on get storage failure", func(t *testing.T) { - store := vmcontext.NewActorStorage(ctx, &brokenStorage{}, &gasTank, gascost.PricelistByEpoch(0)) - var v typegen.CborInt - thrown := tryGet(store, cid.Undef, &v) - _, ok := thrown.(vmr.ExecutionPanic) - assert.NotNil(t, thrown) - assert.False(t, ok, "expected non-abort panic") - }) -} - -func tryPut(s *vmcontext.ActorStorage, v runtime.CBORMarshaler) (c cid.Cid, thrown interface{}) { - defer func() { - thrown = recover() - }() - c = s.Put(v) - return -} - -func tryGet(s *vmcontext.ActorStorage, c cid.Cid, v runtime.CBORUnmarshaler) (thrown interface{}) { - defer func() { - thrown = recover() - }() - s.Get(c, v) - return -} - -type cannotCBOR struct { -} - -func (c cannotCBOR) MarshalCBOR(w io.Writer) error { - return fmt.Errorf("no") -} - -type brokenStorage struct{} - -func (brokenStorage) Get(_ context.Context, _ cid.Cid, _ interface{}) (int, error) { - return 0, fmt.Errorf("no") -} - -func (brokenStorage) Put(_ context.Context, _ interface{}) (cid.Cid, int, error) { - return cid.Undef, 0, fmt.Errorf("no") -} diff --git a/internal/pkg/vm/internal/vmcontext/context_store.go b/internal/pkg/vm/internal/vmcontext/context_store.go deleted file mode 100644 index c2d01f037e..0000000000 --- a/internal/pkg/vm/internal/vmcontext/context_store.go +++ /dev/null @@ -1,36 +0,0 @@ -package vmcontext - -import ( - "context" - - "github.com/filecoin-project/specs-actors/actors/util/adt" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/storage" -) - -// Dragons: see if we can reuse the `adt.AsStore` method to construct this instead of re-writing it -type contextStore struct { - context context.Context - store *storage.VMStorage -} - -// implement adt.Store - -var _ adt.Store = (*contextStore)(nil) - -func (a *contextStore) Context() context.Context { - return a.context -} - -// (implement cbor.IpldStore, part of adt.Store) - -func (a *contextStore) Get(ctx context.Context, id cid.Cid, obj interface{}) error { - _, err := a.store.Get(ctx, id, obj) - return err -} - -func (a *contextStore) Put(ctx context.Context, obj interface{}) (cid.Cid, error) { - id, _, err := a.store.Put(ctx, obj) - return id, err -} diff --git a/internal/pkg/vm/internal/vmcontext/gas_tracker.go b/internal/pkg/vm/internal/vmcontext/gas_tracker.go deleted file mode 100644 index 8237e6afec..0000000000 --- a/internal/pkg/vm/internal/vmcontext/gas_tracker.go +++ /dev/null @@ -1,59 +0,0 @@ -package vmcontext - -import ( - "fmt" - - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/runtime" -) - -// GasTracker maintains the state of gas usage throughout the execution of a message. -type GasTracker struct { - gasLimit gas.Unit - gasConsumed gas.Unit -} - -// NewGasTracker initializes a new empty gas tracker -func NewGasTracker(limit gas.Unit) GasTracker { - return GasTracker{ - gasLimit: limit, - gasConsumed: gas.Zero, - } -} - -// Charge will add the gas charge to the current method gas context. -// -// WARNING: this method will panic if there is no sufficient gas left. -func (t *GasTracker) Charge(amount gas.Unit, msg string, args ...interface{}) { - if ok := t.TryCharge(amount); !ok { - fmsg := fmt.Sprintf(msg, args...) - runtime.Abortf(exitcode.SysErrOutOfGas, "gas limit %d exceeded with charge of %d: %s", t.gasLimit, amount, fmsg) - } -} - -// TryCharge charges `amount` or `RemainingGas()``, whichever is smaller. -// -// Returns `True` if the there was enough gas to pay for `amount`. -func (t *GasTracker) TryCharge(amount gas.Unit) bool { - // check for limit - aux := t.gasConsumed + amount - if aux > t.gasLimit { - t.gasConsumed = t.gasLimit - return false - } - - t.gasConsumed = aux - return true -} - -// GasConsumed returns the gas consumed. -func (t *GasTracker) GasConsumed() gas.Unit { - return t.gasConsumed -} - -// RemainingGas returns the gas remaining. -func (t *GasTracker) RemainingGas() gas.Unit { - return t.gasLimit - t.gasConsumed -} diff --git a/internal/pkg/vm/internal/vmcontext/invocation_context.go b/internal/pkg/vm/internal/vmcontext/invocation_context.go deleted file mode 100644 index 281b345ceb..0000000000 --- a/internal/pkg/vm/internal/vmcontext/invocation_context.go +++ /dev/null @@ -1,610 +0,0 @@ -package vmcontext - -import ( - "bytes" - "encoding/binary" - "fmt" - "runtime/debug" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - init_ "github.com/filecoin-project/specs-actors/actors/builtin/init" - "github.com/filecoin-project/specs-actors/actors/builtin/power" - specsruntime "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - "github.com/filecoin-project/specs-actors/actors/util/adt" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/runtime" -) - -// Context for a top-level invocation sequence. -type topLevelContext struct { - originatorStableAddress address.Address // Stable (public key) address of the top-level message sender. - originatorCallSeq uint64 // Call sequence number of the top-level message. - newActorAddressCount uint64 // Count of calls to NewActorAddress (mutable). -} - -// Context for an individual message invocation, including inter-actor sends. -type invocationContext struct { - rt *VM - topLevel *topLevelContext - msg internalMessage // The message being processed - fromActor *actor.Actor // The immediate calling actor - gasTank *GasTracker - randSource crypto.RandomnessSource - isCallerValidated bool - allowSideEffects bool - toActor *actor.Actor // The receiving actor - stateHandle internalActorStateHandle -} - -type internalActorStateHandle interface { - specsruntime.StateHandle - Validate(func(interface{}) cid.Cid) -} - -func newInvocationContext(rt *VM, topLevel *topLevelContext, msg internalMessage, fromActor *actor.Actor, gasTank *GasTracker, randSource crypto.RandomnessSource) invocationContext { - // Note: the toActor and stateHandle are loaded during the `invoke()` - return invocationContext{ - rt: rt, - topLevel: topLevel, - msg: msg, - fromActor: fromActor, - gasTank: gasTank, - randSource: randSource, - isCallerValidated: false, - allowSideEffects: true, - toActor: nil, - stateHandle: nil, - } -} - -type stateHandleContext invocationContext - -func (shc *stateHandleContext) AllowSideEffects(allow bool) { - shc.allowSideEffects = allow -} - -func (shc *stateHandleContext) Create(obj specsruntime.CBORMarshaler) cid.Cid { - actr := shc.loadActor() - if actr.Head.Cid.Defined() { - runtime.Abortf(exitcode.SysErrorIllegalActor, "failed to construct actor state: already initialized") - } - c := shc.store().Put(obj) - actr.Head = e.NewCid(c) - shc.storeActor(actr) - return c -} - -func (shc *stateHandleContext) Load(obj specsruntime.CBORUnmarshaler) cid.Cid { - // The actor must be loaded from store every time since the state may have changed via a different state handle - // (e.g. in a recursive call). - actr := shc.loadActor() - c := actr.Head.Cid - if !c.Defined() { - runtime.Abortf(exitcode.SysErrorIllegalActor, "failed to load undefined state, must construct first") - } - found := shc.store().Get(c, obj) - if !found { - panic(fmt.Errorf("failed to load state for actor %s, CID %s", shc.msg.to, c)) - } - return c -} - -func (shc *stateHandleContext) Replace(expected cid.Cid, obj specsruntime.CBORMarshaler) cid.Cid { - actr := shc.loadActor() - if !actr.Head.Cid.Equals(expected) { - panic(fmt.Errorf("unexpected prior state %s for actor %s, expected %s", actr.Head, shc.msg.to, expected)) - } - c := shc.store().Put(obj) - actr.Head = e.NewCid(c) - shc.storeActor(actr) - return c -} - -func (shc *stateHandleContext) store() specsruntime.Store { - return ((*invocationContext)(shc)).Store() -} - -func (shc *stateHandleContext) loadActor() *actor.Actor { - actr, found, err := shc.rt.state.GetActor(shc.rt.context, shc.msg.to) - if err != nil { - panic(err) - } - if !found { - panic(fmt.Errorf("failed to find actor %s for state", shc.msg.to)) - } - return actr -} - -func (shc *stateHandleContext) storeActor(actr *actor.Actor) { - err := shc.rt.state.SetActor(shc.rt.context, shc.msg.to, actr) - if err != nil { - panic(err) - } -} - -// runtime aborts are trapped by invoke, it will always return an exit code. -func (ctx *invocationContext) invoke() (ret returnWrapper, errcode exitcode.ExitCode) { - // Checkpoint state, for restoration on rollback - // Note that changes prior to invocation (sequence number bump and gas prepayment) persist even if invocation fails. - priorRoot, err := ctx.rt.checkpoint() - if err != nil { - panic(err) - } - - // Install handler for abort, which rolls back all state changes from this and any nested invocations. - // This is the only path by which a non-OK exit code may be returned. - defer func() { - if r := recover(); r != nil { - if err := ctx.rt.rollback(priorRoot); err != nil { - panic(err) - } - switch r.(type) { - case runtime.ExecutionPanic: - p := r.(runtime.ExecutionPanic) - - vmlog.Warnw("Abort during actor execution.", - "errorMessage", p, - "exitCode", p.Code(), - "sender", ctx.msg.from, - "receiver", ctx.msg.to, - "methodNum", ctx.msg.method, - "value", ctx.msg.value, - "gasLimit", ctx.gasTank.gasLimit) - ret = returnWrapper{adt.Empty} // The Empty here should never be used, but slightly safer than zero value. - errcode = p.Code() - return - default: - // do not trap unknown panics - debug.PrintStack() - panic(r) - } - } - }() - - // pre-dispatch - // 1. charge gas for message invocation - // 2. load target actor - // 3. transfer optional funds - // 4. short-circuit _Send_ method - // 5. load target actor code - // 6. create target state handle - // assert from address is an ID address. - if ctx.msg.from.Protocol() != address.ID { - panic("bad code: sender address MUST be an ID address at invocation time") - } - - // 1. charge gas for msg - ctx.gasTank.Charge(ctx.rt.pricelist.OnMethodInvocation(ctx.msg.value, ctx.msg.method), "method invocation") - - // 2. load target actor - // Note: we replace the "to" address with the normalized version - ctx.toActor, ctx.msg.to = ctx.resolveTarget(ctx.msg.to) - - // 3. transfer funds carried by the msg - if !ctx.msg.value.Nil() && !ctx.msg.value.IsZero() { - if ctx.msg.value.LessThan(big.Zero()) { - runtime.Abortf(exitcode.SysErrForbidden, "attempt to transfer negative value %s from %s to %s", - ctx.msg.value, ctx.msg.from, ctx.msg.to) - } - if ctx.fromActor.Balance.LessThan(ctx.msg.value) { - runtime.Abortf(exitcode.SysErrInsufficientFunds, "sender %s insufficient balance %s to transfer %s to %s", - ctx.msg.from, ctx.fromActor.Balance, ctx.msg.value, ctx.msg.to) - } - ctx.toActor, ctx.fromActor = ctx.rt.transfer(ctx.msg.from, ctx.msg.to, ctx.msg.value) - } - - // 4. if we are just sending funds, there is nothing else to do. - if ctx.msg.method == builtin.MethodSend { - return returnWrapper{adt.Empty}, exitcode.Ok - } - - // 5. load target actor code - actorImpl := ctx.rt.getActorImpl(ctx.toActor.Code.Cid) - // 6. create target state handle - stateHandle := newActorStateHandle((*stateHandleContext)(ctx)) - ctx.stateHandle = &stateHandle - - // dispatch - adapter := runtimeAdapter{ctx: ctx} - out, err := actorImpl.Dispatch(ctx.msg.method, &adapter, ctx.msg.params) - if err != nil { - // Dragons: this could be a params deserialization error too - runtime.Abort(exitcode.SysErrInvalidMethod) - } - - // assert output implements expected interface - var marsh specsruntime.CBORMarshaler = adt.Empty - if out != nil { - var ok bool - marsh, ok = out.(specsruntime.CBORMarshaler) - if !ok { - runtime.Abortf(exitcode.SysErrorIllegalActor, "Returned value is not a CBORMarshaler") - } - } - ret = returnWrapper{inner: marsh} - - // post-dispatch - // 1. check caller was validated - // 2. check state manipulation was valid - // 4. success! - - // 1. check caller was validated - if !ctx.isCallerValidated { - runtime.Abortf(exitcode.SysErrorIllegalActor, "Caller MUST be validated during method execution") - } - - // 2. validate state access - ctx.stateHandle.Validate(func(obj interface{}) cid.Cid { - id, err := ctx.rt.store.CidOf(obj) - if err != nil { - panic(err) - } - return id - }) - - // Reset to pre-invocation state - ctx.toActor = nil - ctx.stateHandle = nil - - // 3. success! - return ret, exitcode.Ok -} - -// resolveTarget loads and actor and returns its ActorID address. -// -// If the target actor does not exist, and the target address is a pub-key address, -// a new account actor will be created. -// Otherwise, this method will abort execution. -func (ctx *invocationContext) resolveTarget(target address.Address) (*actor.Actor, address.Address) { - // resolve the target address via the InitActor, and attempt to load state. - initActorEntry, found, err := ctx.rt.state.GetActor(ctx.rt.context, builtin.InitActorAddr) - if err != nil { - panic(err) - } - if !found { - runtime.Abort(exitcode.SysErrSenderInvalid) - } - - if target == builtin.InitActorAddr { - return initActorEntry, target - } - - // get a view into the actor state - var state init_.State - if _, err := ctx.rt.store.Get(ctx.rt.context, initActorEntry.Head.Cid, &state); err != nil { - panic(err) - } - - // lookup the ActorID based on the address - targetIDAddr, err := state.ResolveAddress(ctx.rt.ContextStore(), target) - created := false - if err == init_.ErrAddressNotFound { - // actor does not exist, create an account actor - // - precond: address must be a pub-key - // - sent init actor a msg to create the new account - - if target.Protocol() != address.SECP256K1 && target.Protocol() != address.BLS { - // Don't implicitly create an account actor for an address without an associated key. - runtime.Abort(exitcode.SysErrInvalidReceiver) - } - - targetIDAddr, err = state.MapAddressToNewID(ctx.rt.ContextStore(), target) - if err != nil { - panic(err) - } - // store new state - initHead, _, err := ctx.rt.store.Put(ctx.rt.context, &state) - if err != nil { - panic(err) - } - // update init actor - initActorEntry.Head = e.NewCid(initHead) - if err := ctx.rt.state.SetActor(ctx.rt.context, builtin.InitActorAddr, initActorEntry); err != nil { - panic(err) - } - - ctx.CreateActor(builtin.AccountActorCodeID, targetIDAddr) - - // call constructor on account - newMsg := internalMessage{ - from: builtin.SystemActorAddr, - to: targetIDAddr, - value: big.Zero(), - method: builtin.MethodsAccount.Constructor, - // use original address as constructor params - // Note: constructor takes a pointer - params: &target, - } - - newCtx := newInvocationContext(ctx.rt, ctx.topLevel, newMsg, nil, ctx.gasTank, ctx.randSource) - _, code := newCtx.invoke() - if code.IsError() { - // we failed to construct an account actor.. - runtime.Abort(code) - } - - created = true - } else if err != nil { - panic(err) - } - - // load actor - targetActor, found, err := ctx.rt.state.GetActor(ctx.rt.context, targetIDAddr) - if err != nil { - panic(err) - } - if !found && created { - panic(fmt.Errorf("unreachable: actor is supposed to exist but it does not. addr: %s, idAddr: %s", target, targetIDAddr)) - } - if !found { - runtime.Abort(exitcode.SysErrInvalidReceiver) - } - - return targetActor, targetIDAddr -} - -// -// implement runtime.InvocationContext for invocationContext -// - -var _ runtime.InvocationContext = (*invocationContext)(nil) - -// Runtime implements runtime.InvocationContext. -func (ctx *invocationContext) Runtime() runtime.Runtime { - return ctx.rt -} - -// Store implements runtime.Runtime. -func (ctx *invocationContext) Store() specsruntime.Store { - return NewActorStorage(ctx.rt.context, ctx.rt.store, ctx.gasTank, ctx.rt.pricelist) -} - -// Message implements runtime.InvocationContext. -func (ctx *invocationContext) Message() specsruntime.Message { - return ctx.msg -} - -// ValidateCaller implements runtime.InvocationContext. -func (ctx *invocationContext) ValidateCaller(pattern runtime.CallerPattern) { - if ctx.isCallerValidated { - runtime.Abortf(exitcode.SysErrorIllegalActor, "Method must validate caller identity exactly once") - } - if !pattern.IsMatch((*patternContext2)(ctx)) { - runtime.Abortf(exitcode.SysErrForbidden, "Method invoked by incorrect caller") - } - ctx.isCallerValidated = true -} - -// State implements runtime.InvocationContext. -func (ctx *invocationContext) State() specsruntime.StateHandle { - return ctx.stateHandle -} - -type returnWrapper struct { - inner specsruntime.CBORMarshaler -} - -func (r returnWrapper) ToCbor() (out []byte, err error) { - if r.inner == nil { - return nil, fmt.Errorf("failed to unmarshal nil return (did you mean adt.Empty?)") - } - b := bytes.Buffer{} - if err = r.inner.MarshalCBOR(&b); err != nil { - return - } - out = b.Bytes() - if out == nil { - // A buffer with zero bytes written returns nil rather than an empty array, - // but the distinction matters for CBOR. - out = []byte{} - } - return -} - -func (r returnWrapper) Into(o specsruntime.CBORUnmarshaler) error { - // TODO: if inner is also a specsruntime.CBORUnmarshaler, overwrite o with inner. - if r.inner == nil { - return fmt.Errorf("failed to unmarshal nil return (did you mean adt.Empty?)") - } - b := bytes.Buffer{} - if err := r.inner.MarshalCBOR(&b); err != nil { - return err - } - return o.UnmarshalCBOR(&b) -} - -// Send implements runtime.InvocationContext. -func (ctx *invocationContext) Send(toAddr address.Address, methodNum abi.MethodNum, params specsruntime.CBORMarshaler, value abi.TokenAmount) (ret specsruntime.SendReturn, errcode exitcode.ExitCode) { - // check if side-effects are allowed - if !ctx.allowSideEffects { - runtime.Abortf(exitcode.SysErrorIllegalActor, "Calling Send() is not allowed during side-effect lock") - } - // prepare - // 1. alias fromActor - // 2. build internal message - - // 1. fromActor = executing toActor - from := ctx.msg.to - fromActor := ctx.toActor - - // 2. build internal message - newMsg := internalMessage{ - from: from, - to: toAddr, - value: value, - method: methodNum, - params: params, - } - - // invoke - // 1. build new context - // 2. invoke message - - // 1. build new context - newCtx := newInvocationContext(ctx.rt, ctx.topLevel, newMsg, fromActor, ctx.gasTank, ctx.randSource) - - // 2. invoke - return newCtx.invoke() -} - -/// Balance implements runtime.InvocationContext. -func (ctx *invocationContext) Balance() abi.TokenAmount { - return ctx.toActor.Balance -} - -// -// implement runtime.InvocationContext for invocationContext -// - -var _ runtime.ExtendedInvocationContext = (*invocationContext)(nil) - -func (ctx *invocationContext) NewActorAddress() address.Address { - var buf bytes.Buffer - - b1, err := encoding.Encode(ctx.topLevel.originatorStableAddress) - if err != nil { - panic(err) - } - _, err = buf.Write(b1) - if err != nil { - panic(err) - } - - err = binary.Write(&buf, binary.BigEndian, ctx.topLevel.originatorCallSeq) - if err != nil { - panic(err) - } - - err = binary.Write(&buf, binary.BigEndian, ctx.topLevel.newActorAddressCount) - if err != nil { - panic(err) - } - - actorAddress, err := address.NewActorAddress(buf.Bytes()) - if err != nil { - panic(err) - } - return actorAddress -} - -// CreateActor implements runtime.ExtendedInvocationContext. -func (ctx *invocationContext) CreateActor(codeID cid.Cid, addr address.Address) { - if !builtin.IsBuiltinActor(codeID) { - runtime.Abortf(exitcode.SysErrorIllegalArgument, "Can only create built-in actors.") - } - - if builtin.IsSingletonActor(codeID) { - runtime.Abortf(exitcode.SysErrorIllegalArgument, "Can only have one instance of singleton actors.") - } - - vmlog.Debugf("creating actor, friendly-name: %s, code: %s, addr: %s\n", builtin.ActorNameByCode(codeID), codeID, addr) - - // Check existing address. If nothing there, create empty actor. - // - // Note: we are storing the actors by ActorID *address* - _, found, err := ctx.rt.state.GetActor(ctx.rt.context, addr) - if err != nil { - panic(err) - } - if found { - runtime.Abortf(exitcode.SysErrorIllegalArgument, "Actor address already exists") - } - - // Charge gas now that easy checks are done - ctx.gasTank.Charge(ctx.rt.pricelist.OnCreateActor(), "CreateActor code %s, address %s", codeID, addr) - - newActor := &actor.Actor{ - // make this the right 'type' of actor - Code: e.NewCid(codeID), - Balance: abi.NewTokenAmount(0), - } - if err := ctx.rt.state.SetActor(ctx.rt.context, addr, newActor); err != nil { - panic(err) - } -} - -// DeleteActor implements runtime.ExtendedInvocationContext. -func (ctx *invocationContext) DeleteActor(beneficiary address.Address) { - receiver := ctx.msg.to - receiverActor, found, err := ctx.rt.state.GetActor(ctx.rt.context, receiver) - if err != nil { - panic(err) - } - if !found { - runtime.Abortf(exitcode.SysErrorIllegalActor, "delete non-existent actor %s", receiverActor) - } - ctx.gasTank.Charge(ctx.rt.pricelist.OnDeleteActor(), "DeleteActor %s", receiver) - - // Transfer any remaining balance to the beneficiary. - // This looks like it could cause a problem with gas refund going to a non-existent actor, but the gas payer - // is always an account actor, which cannot be the receiver of this message. - if receiverActor.Balance.GreaterThan(big.Zero()) { - ctx.rt.transfer(receiver, beneficiary, receiverActor.Balance) - } - - if err := ctx.rt.state.DeleteActor(ctx.rt.context, receiver); err != nil { - panic(err) - } -} - -func (ctx *invocationContext) TotalFilCircSupply() abi.TokenAmount { - rewardActor, found, err := ctx.rt.state.GetActor(ctx.rt.context, builtin.RewardActorAddr) - if !found || err != nil { - panic(fmt.Sprintf("failed to get rewardActor actor for computing total supply: %s", err)) - } - - burntActor, found, err := ctx.rt.state.GetActor(ctx.rt.context, builtin.BurntFundsActorAddr) - if !found || err != nil { - panic(fmt.Sprintf("failed to get burntActor funds actor for computing total supply: %s", err)) - } - - marketActor, found, err := ctx.rt.state.GetActor(ctx.rt.context, builtin.StorageMarketActorAddr) - if !found || err != nil { - panic(fmt.Sprintf("failed to get storage marketActor actor for computing total supply: %s", err)) - } - - // TODO: remove this, https://github.com/filecoin-project/go-filecoin/issues/4017 - powerActor, found, err := ctx.rt.state.GetActor(ctx.rt.context, builtin.StoragePowerActorAddr) - if !found || err != nil { - panic(fmt.Sprintf("failed to get storage powerActor actor for computing total supply: %s", err)) - } - - // TODO: this 2 billion is coded for temporary compatibility with the Lotus implementation of this function, - // but including it here is brittle. Instead, this should inspect the reward actor's state which records - // exactly how much has actually been distributed in block rewards to this point, robust to various - // network initial conditions. - // https://github.com/filecoin-project/go-filecoin/issues/4017 - total := big.NewInt(2e9) - total = big.Sub(total, rewardActor.Balance) - total = big.Sub(total, burntActor.Balance) - total = big.Sub(total, marketActor.Balance) - - var st power.State - if found = ctx.Store().Get(powerActor.Head.Cid, &st); !found { - panic("failed to get storage powerActor state") - } - - return big.Sub(total, st.TotalPledgeCollateral) -} - -// patternContext implements the PatternContext -type patternContext2 invocationContext - -var _ runtime.PatternContext = (*patternContext2)(nil) - -func (ctx *patternContext2) CallerCode() cid.Cid { - return ctx.fromActor.Code.Cid -} - -func (ctx *patternContext2) CallerAddr() address.Address { - return ctx.msg.from -} diff --git a/internal/pkg/vm/internal/vmcontext/runtime_adapter.go b/internal/pkg/vm/internal/vmcontext/runtime_adapter.go deleted file mode 100644 index 96eed731e0..0000000000 --- a/internal/pkg/vm/internal/vmcontext/runtime_adapter.go +++ /dev/null @@ -1,149 +0,0 @@ -package vmcontext - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/crypto" - specsruntime "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/pattern" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/runtime" -) - -type runtimeAdapter struct { - ctx *invocationContext -} - -var _ specsruntime.Runtime = (*runtimeAdapter)(nil) - -// Message implements Runtime. -func (a *runtimeAdapter) Message() specsruntime.Message { - return a.ctx.Message() -} - -// CurrEpoch implements Runtime. -func (a *runtimeAdapter) CurrEpoch() abi.ChainEpoch { - return a.ctx.Runtime().CurrentEpoch() -} - -// ImmediateCaller implements Runtime. -func (a *runtimeAdapter) ImmediateCaller() address.Address { - return a.ctx.Message().Caller() -} - -// ValidateImmediateCallerAcceptAny implements Runtime. -func (a *runtimeAdapter) ValidateImmediateCallerAcceptAny() { - a.ctx.ValidateCaller(pattern.Any{}) -} - -// ValidateImmediateCallerIs implements Runtime. -func (a *runtimeAdapter) ValidateImmediateCallerIs(addrs ...address.Address) { - a.ctx.ValidateCaller(pattern.AddressIn{Addresses: addrs}) -} - -// ValidateImmediateCallerType implements Runtime. -func (a *runtimeAdapter) ValidateImmediateCallerType(codes ...cid.Cid) { - a.ctx.ValidateCaller(pattern.CodeIn{Codes: codes}) -} - -// CurrentBalance implements Runtime. -func (a *runtimeAdapter) CurrentBalance() abi.TokenAmount { - return a.ctx.Balance() -} - -// ResolveAddress implements Runtime. -func (a *runtimeAdapter) ResolveAddress(addr address.Address) (address.Address, bool) { - return a.ctx.rt.normalizeAddress(addr) -} - -// GetActorCodeCID implements Runtime. -func (a *runtimeAdapter) GetActorCodeCID(addr address.Address) (ret cid.Cid, ok bool) { - entry, found, err := a.ctx.rt.state.GetActor(context.Background(), addr) - if !found { - return cid.Undef, false - } - if err != nil { - panic(err) - } - return entry.Code.Cid, true -} - -// GetRandomness implements Runtime. -func (a *runtimeAdapter) GetRandomness(tag crypto.DomainSeparationTag, epoch abi.ChainEpoch, entropy []byte) abi.Randomness { - randomness, err := a.ctx.randSource.Randomness(a.Context(), tag, epoch, entropy) - if err != nil { - panic(err) - } - return randomness -} - -// State implements Runtime. -func (a *runtimeAdapter) State() specsruntime.StateHandle { - return a.ctx.State() -} - -// Store implements Runtime. -func (a *runtimeAdapter) Store() specsruntime.Store { - return a.ctx.Store() -} - -// Send implements Runtime. -func (a *runtimeAdapter) Send(toAddr address.Address, methodNum abi.MethodNum, params specsruntime.CBORMarshaler, value abi.TokenAmount) (ret specsruntime.SendReturn, errcode exitcode.ExitCode) { - return a.ctx.Send(toAddr, methodNum, params, value) -} - -// Abortf implements Runtime. -func (a *runtimeAdapter) Abortf(errExitCode exitcode.ExitCode, msg string, args ...interface{}) { - runtime.Abortf(errExitCode, msg, args...) -} - -// NewActorAddress implements Runtime. -func (a *runtimeAdapter) NewActorAddress() address.Address { - return a.ctx.NewActorAddress() -} - -// CreateActor implements Runtime. -func (a *runtimeAdapter) CreateActor(codeID cid.Cid, addr address.Address) { - a.ctx.CreateActor(codeID, addr) -} - -// DeleteActor implements Runtime. -func (a *runtimeAdapter) DeleteActor(beneficiary address.Address) { - a.ctx.DeleteActor(beneficiary) -} - -// SyscallsImpl implements Runtime. -func (a *runtimeAdapter) Syscalls() specsruntime.Syscalls { - return &syscalls{ - impl: a.ctx.rt.syscalls, - ctx: a.ctx.rt.context, - gasTank: a.ctx.gasTank, - pricelist: a.ctx.rt.pricelist, - head: a.ctx.rt.currentHead, - state: a.ctx.rt.stateView(), - } -} - -func (a *runtimeAdapter) TotalFilCircSupply() abi.TokenAmount { - return a.ctx.TotalFilCircSupply() -} - -// Context implements Runtime. -// Dragons: this can disappear once we have the storage abstraction -func (a *runtimeAdapter) Context() context.Context { - return a.ctx.rt.context -} - -type nullTraceSpan struct{} - -func (*nullTraceSpan) End() {} - -// StartSpan implements Runtime. -func (a *runtimeAdapter) StartSpan(name string) specsruntime.TraceSpan { - // Dragons: leeave empty for now, add TODO to add this into gfc - return &nullTraceSpan{} -} diff --git a/internal/pkg/vm/internal/vmcontext/syscalls.go b/internal/pkg/vm/internal/vmcontext/syscalls.go deleted file mode 100644 index c0e3b4645c..0000000000 --- a/internal/pkg/vm/internal/vmcontext/syscalls.go +++ /dev/null @@ -1,76 +0,0 @@ -package vmcontext - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - specsruntime "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/gascost" -) - -type SyscallsStateView interface { - state.AccountStateView - MinerControlAddresses(ctx context.Context, maddr address.Address) (owner, worker address.Address, err error) -} - -// Syscall implementation interface. -// These methods take the chain epoch and other context that is implicit in the runtime as explicit parameters. -type SyscallsImpl interface { - VerifySignature(ctx context.Context, view SyscallsStateView, signature crypto.Signature, signer address.Address, plaintext []byte) error - HashBlake2b(data []byte) [32]byte - ComputeUnsealedSectorCID(ctx context.Context, proof abi.RegisteredProof, pieces []abi.PieceInfo) (cid.Cid, error) - VerifySeal(ctx context.Context, info abi.SealVerifyInfo) error - VerifyPoSt(ctx context.Context, info abi.WindowPoStVerifyInfo) error - VerifyConsensusFault(ctx context.Context, h1, h2, extra []byte, head block.TipSetKey, view SyscallsStateView) (*specsruntime.ConsensusFault, error) -} - -type syscalls struct { - impl SyscallsImpl - ctx context.Context - gasTank *GasTracker - pricelist gascost.Pricelist - head block.TipSetKey - state SyscallsStateView -} - -var _ specsruntime.Syscalls = (*syscalls)(nil) - -func (sys syscalls) VerifySignature(signature crypto.Signature, signer address.Address, plaintext []byte) error { - charge, err := sys.pricelist.OnVerifySignature(signature.Type, len(plaintext)) - if err != nil { - return err - } - sys.gasTank.Charge(charge, "VerifySignature") - return sys.impl.VerifySignature(sys.ctx, sys.state, signature, signer, plaintext) -} - -func (sys syscalls) HashBlake2b(data []byte) [32]byte { - sys.gasTank.Charge(sys.pricelist.OnHashing(len(data)), "HashBlake2b") - return sys.impl.HashBlake2b(data) -} - -func (sys syscalls) ComputeUnsealedSectorCID(proof abi.RegisteredProof, pieces []abi.PieceInfo) (cid.Cid, error) { - sys.gasTank.Charge(sys.pricelist.OnComputeUnsealedSectorCid(proof, &pieces), "ComputeUnsealedSectorCID") - return sys.impl.ComputeUnsealedSectorCID(sys.ctx, proof, pieces) -} - -func (sys syscalls) VerifySeal(info abi.SealVerifyInfo) error { - sys.gasTank.Charge(sys.pricelist.OnVerifySeal(info), "VerifySeal") - return sys.impl.VerifySeal(sys.ctx, info) -} - -func (sys syscalls) VerifyPoSt(info abi.WindowPoStVerifyInfo) error { - sys.gasTank.Charge(sys.pricelist.OnVerifyPoSt(info), "VerifyWindowPoSt") - return sys.impl.VerifyPoSt(sys.ctx, info) -} - -func (sys syscalls) VerifyConsensusFault(h1, h2, extra []byte) (*specsruntime.ConsensusFault, error) { - sys.gasTank.Charge(sys.pricelist.OnVerifyConsensusFault(), "VerifyConsensusFault") - return sys.impl.VerifyConsensusFault(sys.ctx, h1, h2, extra, sys.head, sys.state) -} diff --git a/internal/pkg/vm/internal/vmcontext/testing.go b/internal/pkg/vm/internal/vmcontext/testing.go deleted file mode 100644 index 2f5db94693..0000000000 --- a/internal/pkg/vm/internal/vmcontext/testing.go +++ /dev/null @@ -1,566 +0,0 @@ -package vmcontext - -import ( - "context" - "fmt" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/dispatch" - "github.com/filecoin-project/specs-actors/actors/builtin/account" - "github.com/filecoin-project/specs-actors/actors/builtin/cron" - "github.com/filecoin-project/specs-actors/actors/builtin/market" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - "github.com/filecoin-project/specs-actors/actors/builtin/multisig" - "github.com/filecoin-project/specs-actors/actors/builtin/paych" - "github.com/filecoin-project/specs-actors/actors/builtin/power" - "github.com/filecoin-project/specs-actors/actors/builtin/reward" - "github.com/filecoin-project/specs-actors/actors/builtin/system" - "github.com/filecoin-project/specs-actors/actors/puppet" - "math/rand" - - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - blockstore "github.com/ipfs/go-ipfs-blockstore" - - vtypes "github.com/filecoin-project/chain-validation/chain/types" - vdriver "github.com/filecoin-project/chain-validation/drivers" - vstate "github.com/filecoin-project/chain-validation/state" - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-crypto" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - init_ "github.com/filecoin-project/specs-actors/actors/builtin/init" - acrypto "github.com/filecoin-project/specs-actors/actors/crypto" - "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/filecoin-project/specs-actors/actors/util/adt" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - gfcrypto "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/gascost" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/interpreter" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/storage" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -var _ vstate.Factories = &Factories{} -var _ vstate.VMWrapper = (*ValidationVMWrapper)(nil) -var _ vstate.Applier = (*ValidationApplier)(nil) -var _ vstate.KeyManager = (*KeyManager)(nil) - -var ChainvalActors = dispatch.NewBuilder(). - Add(builtin.InitActorCodeID, &init_.Actor{}). - Add(builtin.AccountActorCodeID, &account.Actor{}). - Add(builtin.MultisigActorCodeID, &multisig.Actor{}). - Add(builtin.PaymentChannelActorCodeID, &paych.Actor{}). - Add(builtin.StoragePowerActorCodeID, &power.Actor{}). - Add(builtin.StorageMarketActorCodeID, &market.Actor{}). - Add(builtin.StorageMinerActorCodeID, &miner.Actor{}). - Add(builtin.SystemActorCodeID, &system.Actor{}). - Add(builtin.RewardActorCodeID, &reward.Actor{}). - Add(builtin.CronActorCodeID, &cron.Actor{}). - // add the puppet actor - Add(puppet.PuppetActorCodeID, &puppet.Actor{}). - Build() - -type Factories struct { - config *ValidationConfig -} - -func NewFactories(config *ValidationConfig) *Factories { - factory := &Factories{config} - return factory -} - -func (f *Factories) NewStateAndApplier() (vstate.VMWrapper, vstate.Applier) { - st := NewState() - return st, &ValidationApplier{state: st} -} - -func (f *Factories) NewKeyManager() vstate.KeyManager { - return newKeyManager() -} - -type fakeRandSrc struct { -} - -func (r fakeRandSrc) Randomness(_ context.Context, _ acrypto.DomainSeparationTag, _ abi.ChainEpoch, _ []byte) (abi.Randomness, error) { - return abi.Randomness("sausages"), nil -} - -func (f *Factories) NewRandomnessSource() vstate.RandomnessSource { - return &fakeRandSrc{} -} - -func (f *Factories) NewValidationConfig() vstate.ValidationConfig { - return f.config -} - -// -// ValidationConfig -// - -type ValidationConfig struct { - trackGas bool - checkExitCode bool - checkReturnValue bool - checkStateRoot bool -} - -func (v ValidationConfig) ValidateGas() bool { - return v.trackGas -} - -func (v ValidationConfig) ValidateExitCode() bool { - return v.checkExitCode -} - -func (v ValidationConfig) ValidateReturnValue() bool { - return v.checkReturnValue -} - -func (v ValidationConfig) ValidateStateRoot() bool { - return v.checkStateRoot -} - -// -// VMWrapper -// - -type specialSyscallWrapper struct { - internal *vdriver.ChainValidationSyscalls -} - -func (s specialSyscallWrapper) VerifySignature(_ context.Context, _ SyscallsStateView, signature gfcrypto.Signature, signer address.Address, plaintext []byte) error { - return s.internal.VerifySignature(signature, signer, plaintext) -} - -func (s specialSyscallWrapper) HashBlake2b(data []byte) [32]byte { - return s.internal.HashBlake2b(data) -} - -func (s specialSyscallWrapper) ComputeUnsealedSectorCID(_ context.Context, proof abi.RegisteredProof, pieces []abi.PieceInfo) (cid.Cid, error) { - return s.internal.ComputeUnsealedSectorCID(proof, pieces) -} - -func (s specialSyscallWrapper) VerifySeal(_ context.Context, info abi.SealVerifyInfo) error { - return s.internal.VerifySeal(info) -} - -func (s specialSyscallWrapper) VerifyPoSt(_ context.Context, info abi.WindowPoStVerifyInfo) error { - return s.internal.VerifyPoSt(info) -} - -func (s specialSyscallWrapper) VerifyConsensusFault(_ context.Context, h1, h2, extra []byte, _ block.TipSetKey, _ SyscallsStateView) (*runtime.ConsensusFault, error) { - return s.internal.VerifyConsensusFault(h1, h2, extra) -} - -func NewState() *ValidationVMWrapper { - bs := blockstore.NewBlockstore(datastore.NewMapDatastore()) - cst := cborutil.NewIpldStore(bs) - vmstrg := storage.NewStorage(bs) - vm := NewVM(ChainvalActors, &vmstrg, state.NewState(cst), specialSyscallWrapper{vdriver.NewChainValidationSyscalls()}) - return &ValidationVMWrapper{ - vm: &vm, - } -} - -type ValidationVMWrapper struct { - vm *VM -} - -func (w *ValidationVMWrapper) NewVM() { - return -} - -// Root implements ValidationVMWrapper. -func (w *ValidationVMWrapper) Root() cid.Cid { - root, dirty := w.vm.state.Root() - if dirty { - panic("vm state is dirty") - } - return root -} - -// Get the value at key from vm store -func (w *ValidationVMWrapper) StoreGet(key cid.Cid, out runtime.CBORUnmarshaler) error { - return w.vm.ContextStore().Get(context.Background(), key, out) -} - -// Put `value` into vm store -func (w *ValidationVMWrapper) StorePut(value runtime.CBORMarshaler) (cid.Cid, error) { - return w.vm.ContextStore().Put(context.Background(), value) -} - -// Store implements ValidationVMWrapper. -func (w *ValidationVMWrapper) Store() adt.Store { - return w.vm.ContextStore() -} - -// Actor implements ValidationVMWrapper. -func (w *ValidationVMWrapper) Actor(addr address.Address) (vstate.Actor, error) { - idAddr, found := w.vm.normalizeAddress(addr) - if !found { - return nil, fmt.Errorf("failed to normalize address: %s", addr) - } - - a, found, err := w.vm.state.GetActor(w.vm.context, idAddr) - if err != nil { - return nil, err - } - if !found { - return nil, fmt.Errorf("actor not found") - } - return &actorWrapper{a}, nil -} - -// CreateActor implements ValidationVMWrapper. -func (w *ValidationVMWrapper) CreateActor(code cid.Cid, addr address.Address, balance abi.TokenAmount, newState runtime.CBORMarshaler) (vstate.Actor, address.Address, error) { - idAddr := addr - if addr.Protocol() != address.ID { - // go through init to register - initActorEntry, found, err := w.vm.state.GetActor(w.vm.context, builtin.InitActorAddr) - if err != nil { - return nil, address.Undef, err - } - if !found { - return nil, address.Undef, fmt.Errorf("actor not found") - } - - // get a view into the actor state - var initState init_.State - if _, err := w.vm.store.Get(w.vm.context, initActorEntry.Head.Cid, &initState); err != nil { - return nil, address.Undef, err - } - - // add addr to inits map - idAddr, err = initState.MapAddressToNewID(w.vm.ContextStore(), addr) - if err != nil { - return nil, address.Undef, err - } - - // persist the init actor state - initHead, _, err := w.vm.store.Put(w.vm.context, &initState) - if err != nil { - return nil, address.Undef, err - } - initActorEntry.Head = enccid.NewCid(initHead) - if err := w.vm.state.SetActor(w.vm.context, builtin.InitActorAddr, initActorEntry); err != nil { - return nil, address.Undef, err - } - // persist state below - } - - // create actor on state stree - - // store newState - head, _, err := w.vm.store.Put(w.vm.context, newState) - if err != nil { - return nil, address.Undef, err - } - - // create and store actor object - a := &actor.Actor{ - Code: enccid.NewCid(code), - Head: enccid.NewCid(head), - Balance: balance, - } - if err := w.vm.state.SetActor(w.vm.context, idAddr, a); err != nil { - return nil, address.Undef, err - } - - if err := w.PersistChanges(); err != nil { - return nil, address.Undef, err - } - - return &actorWrapper{a}, idAddr, nil -} - -// SetActorState implements ValidationVMWrapper. -func (w *ValidationVMWrapper) SetActorState(addr address.Address, balance big.Int, state runtime.CBORMarshaler) (vstate.Actor, error) { - idAddr, ok := w.vm.normalizeAddress(addr) - if !ok { - return nil, fmt.Errorf("actor not found") - } - - a, found, err := w.vm.state.GetActor(w.vm.context, idAddr) - if err != nil { - return nil, err - } - if !found { - return nil, fmt.Errorf("actor not found") - } - // store state - head, _, err := w.vm.store.Put(w.vm.context, state) - if err != nil { - return nil, err - } - // update fields - a.Head = enccid.NewCid(head) - a.Balance = balance - - if err := w.vm.state.SetActor(w.vm.context, idAddr, a); err != nil { - return nil, err - } - - if err := w.PersistChanges(); err != nil { - return nil, err - } - - return &actorWrapper{a}, nil -} - -func (w *ValidationVMWrapper) PersistChanges() error { - if _, err := w.vm.commit(); err != nil { - return err - } - return nil -} - -// -// Applier -// - -type ValidationApplier struct { - state *ValidationVMWrapper -} - -func (a *ValidationApplier) ApplyMessage(epoch abi.ChainEpoch, msg *vtypes.Message) (vtypes.ApplyMessageResult, error) { - // Prepare message and VM. - ourMsg := a.preApplyMessage(epoch, msg) - - // Invoke. - ourreceipt, penalty, reward := a.state.vm.applyMessage(ourMsg, ourMsg.OnChainLen(), &fakeRandSrc{}) - - // Persist changes. - receipt, err := a.postApplyMessage(ourreceipt) - return vtypes.ApplyMessageResult{ - Receipt: receipt, - Penalty: penalty, - Reward: reward, - Root: a.state.Root().String(), - }, err -} - -func (a *ValidationApplier) ApplySignedMessage(epoch abi.ChainEpoch, msg *vtypes.SignedMessage) (vtypes.ApplyMessageResult, error) { - - // Prepare message and VM. - ourMsg := a.preApplyMessage(epoch, &msg.Message) - ourSigned := &types.SignedMessage{ - Message: *ourMsg, - Signature: msg.Signature, - } - - // Invoke. - ourreceipt, penalty, reward := a.state.vm.applyMessage(ourMsg, ourSigned.OnChainLen(), &fakeRandSrc{}) - - // Persist changes. - receipt, err := a.postApplyMessage(ourreceipt) - return vtypes.ApplyMessageResult{ - Receipt: receipt, - Penalty: penalty, - Reward: reward, - Root: a.state.Root().String(), - }, err -} - -func (a *ValidationApplier) preApplyMessage(epoch abi.ChainEpoch, msg *vtypes.Message) *types.UnsignedMessage { - // set epoch - // Note: this would have normally happened during `ApplyTipset()` - a.state.vm.currentEpoch = epoch - a.state.vm.pricelist = gascost.PricelistByEpoch(epoch) - - // map message - return toOurMessage(msg) -} - -func (a *ValidationApplier) postApplyMessage(ourreceipt message.Receipt) (vtypes.MessageReceipt, error) { - // commit and persist changes - // Note: this is not done on production for each msg - if err := a.state.PersistChanges(); err != nil { - return vtypes.MessageReceipt{}, err - } - - // map receipt - return vtypes.MessageReceipt{ - ExitCode: ourreceipt.ExitCode, - ReturnValue: ourreceipt.ReturnValue, - GasUsed: vtypes.GasUnits(ourreceipt.GasUsed), - }, nil -} - -func toOurMessage(theirs *vtypes.Message) *types.UnsignedMessage { - return &types.UnsignedMessage{ - To: theirs.To, - From: theirs.From, - CallSeqNum: theirs.CallSeqNum, - Value: theirs.Value, - Method: theirs.Method, - Params: theirs.Params, - GasPrice: theirs.GasPrice, - GasLimit: gas.Unit(theirs.GasLimit), - } - -} - -func toOurBlockMessageInfoType(theirs []vtypes.BlockMessagesInfo) []interpreter.BlockMessagesInfo { - ours := make([]interpreter.BlockMessagesInfo, len(theirs)) - for i, bm := range theirs { - ours[i].Miner = bm.Miner - for _, blsMsg := range bm.BLSMessages { - ourbls := &types.UnsignedMessage{ - To: blsMsg.To, - From: blsMsg.From, - CallSeqNum: blsMsg.CallSeqNum, - Value: blsMsg.Value, - Method: blsMsg.Method, - Params: blsMsg.Params, - GasPrice: blsMsg.GasPrice, - GasLimit: gas.Unit(blsMsg.GasLimit), - } - ours[i].BLSMessages = append(ours[i].BLSMessages, ourbls) - } - for _, secpMsg := range bm.SECPMessages { - oursecp := &types.SignedMessage{ - Message: types.UnsignedMessage{ - To: secpMsg.Message.To, - From: secpMsg.Message.From, - CallSeqNum: secpMsg.Message.CallSeqNum, - Value: secpMsg.Message.Value, - Method: secpMsg.Message.Method, - Params: secpMsg.Message.Params, - GasPrice: secpMsg.Message.GasPrice, - GasLimit: gas.Unit(secpMsg.Message.GasLimit), - }, - Signature: secpMsg.Signature, - } - ours[i].SECPMessages = append(ours[i].SECPMessages, oursecp) - } - } - return ours -} - -func (a *ValidationApplier) ApplyTipSetMessages(epoch abi.ChainEpoch, blocks []vtypes.BlockMessagesInfo, rnd vstate.RandomnessSource) (vtypes.ApplyTipSetResult, error) { - - ourBlkMsgs := toOurBlockMessageInfoType(blocks) - // TODO: pass through parameter when chain validation type signature is updated to propagate it - head := block.NewTipSetKey() - receipts, err := a.state.vm.ApplyTipSetMessages(ourBlkMsgs, head, epoch, rnd) - if err != nil { - return vtypes.ApplyTipSetResult{}, err - } - - theirReceipts := make([]vtypes.MessageReceipt, len(receipts)) - for i, r := range receipts { - theirReceipts[i] = vtypes.MessageReceipt{ - ExitCode: r.ExitCode, - ReturnValue: r.ReturnValue, - GasUsed: vtypes.GasUnits(r.GasUsed), - } - } - - return vtypes.ApplyTipSetResult{ - Receipts: theirReceipts, - Root: a.state.Root().String(), - }, nil -} - -// -// KeyManager -// - -type KeyManager struct { - // Private keys by address - keys map[address.Address]*gfcrypto.KeyInfo - - // Seed for deterministic secp key generation. - secpSeed int64 - // Seed for deterministic bls key generation. - blsSeed int64 // nolint: structcheck -} - -func newKeyManager() *KeyManager { - return &KeyManager{ - keys: make(map[address.Address]*gfcrypto.KeyInfo), - secpSeed: 0, - } -} - -func (k *KeyManager) NewSECP256k1AccountAddress() address.Address { - secpKey := k.newSecp256k1Key() - addr, err := secpKey.Address() - if err != nil { - panic(err) - } - k.keys[addr] = secpKey - return addr -} - -func (k *KeyManager) NewBLSAccountAddress() address.Address { - blsKey := k.newBLSKey() - addr, err := blsKey.Address() - if err != nil { - panic(err) - } - k.keys[addr] = blsKey - return addr -} - -func (k *KeyManager) Sign(addr address.Address, data []byte) (acrypto.Signature, error) { - ki, ok := k.keys[addr] - if !ok { - return acrypto.Signature{}, fmt.Errorf("unknown address %v", addr) - } - return gfcrypto.Sign(data, ki.PrivateKey, ki.SigType) -} - -func (k *KeyManager) newSecp256k1Key() *gfcrypto.KeyInfo { - randSrc := rand.New(rand.NewSource(k.secpSeed)) - prv, err := crypto.GenerateKeyFromSeed(randSrc) - if err != nil { - panic(err) - } - k.secpSeed++ - return &gfcrypto.KeyInfo{ - SigType: acrypto.SigTypeSecp256k1, - PrivateKey: prv, - } -} - -func (k *KeyManager) newBLSKey() *gfcrypto.KeyInfo { - // FIXME: bls needs deterministic key generation - //sk := ffi.PrivateKeyGenerate(s.blsSeed) - // s.blsSeed++ - sk := [32]byte{} - sk[0] = uint8(k.blsSeed) // hack to keep gas values and state roots determinist - k.blsSeed++ - return &gfcrypto.KeyInfo{ - SigType: acrypto.SigTypeBLS, - PrivateKey: sk[:], - } -} - -// -// Actor -// - -type actorWrapper struct { - *actor.Actor -} - -func (a *actorWrapper) Code() cid.Cid { - return a.Actor.Code.Cid -} -func (a *actorWrapper) Head() cid.Cid { - return a.Actor.Head.Cid -} -func (a *actorWrapper) CallSeqNum() uint64 { - return a.Actor.CallSeqNum -} -func (a *actorWrapper) Balance() abi.TokenAmount { - return a.Actor.Balance -} diff --git a/internal/pkg/vm/internal/vmcontext/testing_syscalls.go b/internal/pkg/vm/internal/vmcontext/testing_syscalls.go deleted file mode 100644 index 800446833b..0000000000 --- a/internal/pkg/vm/internal/vmcontext/testing_syscalls.go +++ /dev/null @@ -1,46 +0,0 @@ -package vmcontext - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/ipfs/go-cid" - "github.com/minio/blake2b-simd" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" -) - -type FakeSyscalls struct { -} - -func (f FakeSyscalls) VerifySignature(ctx context.Context, view SyscallsStateView, signature crypto.Signature, signer address.Address, plaintext []byte) error { - // The signer is assumed to be already resolved to a pubkey address. - return crypto.ValidateSignature(plaintext, signer, signature) -} - -func (f FakeSyscalls) HashBlake2b(data []byte) [32]byte { - return blake2b.Sum256(data) -} - -func (f FakeSyscalls) ComputeUnsealedSectorCID(ctx context.Context, proof abi.RegisteredProof, pieces []abi.PieceInfo) (cid.Cid, error) { - panic("implement me") -} - -func (f FakeSyscalls) VerifySeal(ctx context.Context, info abi.SealVerifyInfo) error { - panic("implement me") -} - -func (f FakeSyscalls) VerifyWinningPoSt(ctx context.Context, info abi.WinningPoStVerifyInfo) error { - panic("implement me") -} - -func (f FakeSyscalls) VerifyPoSt(ctx context.Context, info abi.WindowPoStVerifyInfo) error { - panic("implement me") -} - -func (f FakeSyscalls) VerifyConsensusFault(ctx context.Context, h1, h2, extra []byte, head block.TipSetKey, view SyscallsStateView) (*runtime.ConsensusFault, error) { - panic("implement me") -} diff --git a/internal/pkg/vm/internal/vmcontext/validation_test.go b/internal/pkg/vm/internal/vmcontext/validation_test.go deleted file mode 100644 index 7f3e52b63e..0000000000 --- a/internal/pkg/vm/internal/vmcontext/validation_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package vmcontext - -import ( - "fmt" - "reflect" - "runtime" - "strings" - "testing" - - "github.com/filecoin-project/chain-validation/suites" -) - -// TestSkipper contains a list of test cases skipped by the implementation. -type TestSkipper struct { - testSkips []suites.TestCase -} - -// Skip return true if the sutire.TestCase should be skipped. -func (ts *TestSkipper) Skip(test suites.TestCase) bool { - for _, skip := range ts.testSkips { - if reflect.ValueOf(skip).Pointer() == reflect.ValueOf(test).Pointer() { - fmt.Printf("=== SKIP %v\n", runtime.FuncForPC(reflect.ValueOf(test).Pointer()).Name()) - return true - } - } - return false -} - -// TestSuiteSkips contains tests we wish to skip. -var TestSuiteSkipper TestSkipper - -func init() { - // initialize the test skipper with tests being skipped - TestSuiteSkipper = TestSkipper{testSkips: []suites.TestCase{ - // None! - }} -} - -func TestChainValidationMessageSuite(t *testing.T) { - f := NewFactories(&ValidationConfig{ - trackGas: true, - checkExitCode: true, - checkReturnValue: true, - checkStateRoot: true, - }) - for _, testCase := range suites.MessageTestCases() { - if TestSuiteSkipper.Skip(testCase) { - continue - } - t.Run(caseName(testCase), func(t *testing.T) { - testCase(t, f) - }) - } -} - -func TestChainValidationTipSetSuite(t *testing.T) { - f := NewFactories(&ValidationConfig{ - trackGas: true, - checkExitCode: true, - checkReturnValue: true, - checkStateRoot: true, - }) - for _, testCase := range suites.TipSetTestCases() { - if TestSuiteSkipper.Skip(testCase) { - continue - } - t.Run(caseName(testCase), func(t *testing.T) { - testCase(t, f) - }) - } -} - -func caseName(testCase suites.TestCase) string { - fqName := runtime.FuncForPC(reflect.ValueOf(testCase).Pointer()).Name() - toks := strings.Split(fqName, ".") - return toks[len(toks)-1] -} diff --git a/internal/pkg/vm/internal/vmcontext/vmcontext.go b/internal/pkg/vm/internal/vmcontext/vmcontext.go deleted file mode 100644 index f519006e3e..0000000000 --- a/internal/pkg/vm/internal/vmcontext/vmcontext.go +++ /dev/null @@ -1,702 +0,0 @@ -package vmcontext - -import ( - "context" - "fmt" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/account" - init_ "github.com/filecoin-project/specs-actors/actors/builtin/init" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - "github.com/filecoin-project/specs-actors/actors/builtin/reward" - specsruntime "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" - "github.com/filecoin-project/specs-actors/actors/util/adt" - "github.com/ipfs/go-cid" - logging "github.com/ipfs/go-log/v2" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/dispatch" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/gascost" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/interpreter" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/runtime" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/storage" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -var vmlog = logging.Logger("vm.context") - -// VM holds the state and executes messages over the state. -type VM struct { - context context.Context - actorImpls ActorImplLookup - store *storage.VMStorage - state state.Tree - syscalls SyscallsImpl - currentHead block.TipSetKey - currentEpoch abi.ChainEpoch - pricelist gascost.Pricelist -} - -// ActorImplLookup provides access to upgradeable actor code. -type ActorImplLookup interface { - GetActorImpl(code cid.Cid) (dispatch.Dispatcher, error) -} - -type minerPenaltyFIL = abi.TokenAmount - -type gasRewardFIL = abi.TokenAmount - -type internalMessage struct { - from address.Address - to address.Address - value abi.TokenAmount - method abi.MethodNum - params interface{} -} - -// NewVM creates a new runtime for executing messages. -// Dragons: change to take a root and the store, build the tree internally -func NewVM(actorImpls ActorImplLookup, store *storage.VMStorage, st state.Tree, syscalls SyscallsImpl) VM { - return VM{ - context: context.Background(), - actorImpls: actorImpls, - store: store, - state: st, - syscalls: syscalls, - // loaded during execution - // currentEpoch: .., - } -} - -// ApplyGenesisMessage forces the execution of a message in the vm actor. -// -// This method is intended to be used in the generation of the genesis block only. -func (vm *VM) ApplyGenesisMessage(from address.Address, to address.Address, method abi.MethodNum, value abi.TokenAmount, params interface{}, rnd crypto.RandomnessSource) (interface{}, error) { - vm.pricelist = gascost.PricelistByEpoch(vm.currentEpoch) - - // normalize from addr - var ok bool - if from, ok = vm.normalizeAddress(from); !ok { - runtime.Abort(exitcode.SysErrSenderInvalid) - } - - // build internal message - imsg := internalMessage{ - from: from, - to: to, - value: value, - method: method, - params: params, - } - - ret, err := vm.applyImplicitMessage(imsg, rnd) - if err != nil { - return ret, err - } - - // commit - if _, err := vm.commit(); err != nil { - return nil, err - } - - return ret, nil -} - -func (vm *VM) rollback(root state.Root) error { - return vm.state.Rollback(vm.context, root) -} - -func (vm *VM) checkpoint() (state.Root, error) { - root, err := vm.state.Commit(vm.context) - if err != nil { - return cid.Undef, err - } - return root, nil -} - -func (vm *VM) commit() (state.Root, error) { - // Note: the following assumes the state commits into the store, - // unless the store is flushed, the state is not persisted. - - // commit the vm state - root, err := vm.state.Commit(vm.context) - if err != nil { - return cid.Undef, err - } - // flush all blocks out of the store - if err := vm.store.Flush(); err != nil { - return cid.Undef, err - } - - return root, nil -} - -// ContextStore provides access to specs-actors adt library. -// -// This type of store is used to access some internal actor state. -func (vm *VM) ContextStore() adt.Store { - return &contextStore{context: vm.context, store: vm.store} -} - -func (vm *VM) normalizeAddress(addr address.Address) (address.Address, bool) { - // short-circuit if the address is already an ID address - if addr.Protocol() == address.ID { - return addr, true - } - - // resolve the target address via the InitActor, and attempt to load state. - initActorEntry, found, err := vm.state.GetActor(vm.context, builtin.InitActorAddr) - if err != nil { - panic(errors.Wrapf(err, "failed to load init actor")) - } - if !found { - panic(errors.Wrapf(err, "no init actor")) - } - - // get a view into the actor state - var state init_.State - if _, err := vm.store.Get(vm.context, initActorEntry.Head.Cid, &state); err != nil { - panic(err) - } - - idAddr, err := state.ResolveAddress(vm.ContextStore(), addr) - if err == init_.ErrAddressNotFound { - return address.Undef, false - } else if err != nil { - panic(err) - } - return idAddr, true -} - -func (vm *VM) stateView() SyscallsStateView { - // The state tree's root is not committed until the end of a tipset, so we can't use the external state view - // type for this implementation. - // Maybe we could re-work it to use a root HAMT node rather than root CID. - return &syscallsStateView{vm} -} - -// implement VMInterpreter for VM - -var _ interpreter.VMInterpreter = (*VM)(nil) - -// ApplyTipSetMessages implements interpreter.VMInterpreter -func (vm *VM) ApplyTipSetMessages(blocks []interpreter.BlockMessagesInfo, head block.TipSetKey, epoch abi.ChainEpoch, rnd crypto.RandomnessSource) ([]message.Receipt, error) { - receipts := []message.Receipt{} - - // update current tipset - vm.currentHead = head - vm.currentEpoch = epoch - vm.pricelist = gascost.PricelistByEpoch(epoch) - - // create message tracker - // Note: the same message could have been included by more than one miner - seenMsgs := make(map[cid.Cid]struct{}) - - // process messages on each block - for _, blk := range blocks { - if blk.Miner.Protocol() != address.ID { - panic("precond failure: block miner address must be an IDAddress") - } - - // initial miner penalty and gas rewards - // Note: certain msg execution failures can cause the miner to pay for the gas - minerPenaltyTotal := big.Zero() - minerGasRewardTotal := big.Zero() - - // Process BLS messages from the block - for _, m := range blk.BLSMessages { - // do not recompute already seen messages - mcid := msgCID(m) - if _, found := seenMsgs[mcid]; found { - continue - } - - // apply message - receipt, minerPenaltyCurr, minerGasRewardCurr := vm.applyMessage(m, m.OnChainLen(), rnd) - - // accumulate result - minerPenaltyTotal = big.Add(minerPenaltyTotal, minerPenaltyCurr) - minerGasRewardTotal = big.Add(minerGasRewardTotal, minerGasRewardCurr) - receipts = append(receipts, receipt) - - // flag msg as seen - seenMsgs[mcid] = struct{}{} - } - - // Process SECP messages from the block - for _, sm := range blk.SECPMessages { - // extract unsigned message part - m := sm.Message - - // do not recompute already seen messages - mcid := msgCID(&m) - if _, found := seenMsgs[mcid]; found { - continue - } - - // apply message - // Note: the on-chain size for SECP messages is different - receipt, minerPenaltyCurr, minerGasRewardCurr := vm.applyMessage(&m, sm.OnChainLen(), rnd) - - // accumulate result - minerPenaltyTotal = big.Add(minerPenaltyTotal, minerPenaltyCurr) - minerGasRewardTotal = big.Add(minerGasRewardTotal, minerGasRewardCurr) - receipts = append(receipts, receipt) - - // flag msg as seen - seenMsgs[mcid] = struct{}{} - } - - // Pay block reward. - // Dragons: missing final protocol design on if/how to determine the nominal power - rewardMessage := makeBlockRewardMessage(blk.Miner, minerPenaltyTotal, minerGasRewardTotal, 1) - if _, err := vm.applyImplicitMessage(rewardMessage, rnd); err != nil { - return nil, err - } - } - - // cron tick - cronMessage := makeCronTickMessage() - if _, err := vm.applyImplicitMessage(cronMessage, rnd); err != nil { - return nil, err - } - - // commit state - if _, err := vm.commit(); err != nil { - return nil, err - } - - return receipts, nil -} - -// applyImplicitMessage applies messages automatically generated by the vm itself. -// -// This messages do not consume client gas and must not fail. -func (vm *VM) applyImplicitMessage(imsg internalMessage, rnd crypto.RandomnessSource) (specsruntime.CBORMarshaler, error) { - // implicit messages gas is tracked separatly and not paid by the miner - gasTank := NewGasTracker(gas.SystemGasLimit) - - // the execution of the implicit messages is simpler than full external/actor-actor messages - // execution: - // 1. load from actor - // 2. increment seqnumber (only for accounts) - // 3. build new context - // 4. invoke message - - // 1. load from actor - fromActor, found, err := vm.state.GetActor(vm.context, imsg.from) - if err != nil { - return nil, err - } - if !found { - return nil, fmt.Errorf("implicit message `from` field actor not found, addr: %s", imsg.from) - } - originatorIsAccount := fromActor.Code.Equals(builtin.AccountActorCodeID) - - // Compute the originator address. Unlike real messages, implicit ones can be originated by - // singleton non-account actors. Singleton addresses are reorg-proof so ok to use here. - var originator address.Address - if originatorIsAccount { - // Load sender account state to obtain stable pubkey address. - var senderState account.State - _, err = vm.store.Get(vm.context, fromActor.Head.Cid, &senderState) - if err != nil { - panic(err) - } - originator = senderState.Address - } else if builtin.IsBuiltinActor(fromActor.Code.Cid) { - originator = imsg.from // Cannot resolve non-account actor to pubkey addresses. - } else { - panic(fmt.Sprintf("implicit message from non-account or -singleton actor code %s", fromActor.Code.Cid)) - } - - // 2. increment seq number (only for account actors). - // The account actor distinction only makes a difference for genesis state construction via messages, where - // some messages are sent from non-account actors (e.g. fund transfers from the reward actor). - if originatorIsAccount { - fromActor.IncrementSeqNum() - if err := vm.state.SetActor(vm.context, imsg.from, fromActor); err != nil { - return nil, err - } - } - - // 3. build context - topLevel := topLevelContext{ - originatorStableAddress: originator, - originatorCallSeq: fromActor.CallSeqNum, // Implied CallSeqNum is that of the actor before incrementing. - newActorAddressCount: 0, - } - - ctx := newInvocationContext(vm, &topLevel, imsg, fromActor, &gasTank, rnd) - - // 4. invoke message - ret, code := ctx.invoke() - if code.IsError() { - return nil, fmt.Errorf("invalid exit code %d during implicit message execution: from %s, to %s, method %d, value %s, params %v", - code, imsg.from, imsg.to, imsg.method, imsg.value, imsg.params) - } - return ret.inner, nil -} - -// applyMessage applies the message to the current state. -func (vm *VM) applyMessage(msg *types.UnsignedMessage, onChainMsgSize int, rnd crypto.RandomnessSource) (message.Receipt, minerPenaltyFIL, gasRewardFIL) { - // This method does not actually execute the message itself, - // but rather deals with the pre/post processing of a message. - // (see: `invocationContext.invoke()` for the dispatch and execution) - - // initiate gas tracking - gasTank := NewGasTracker(msg.GasLimit) - - // pre-send - // 1. charge for message existence - // 2. load sender actor - // 3. check message seq number - // 4. check if _sender_ has enough funds - // 5. increment message seq number - // 6. withheld maximum gas from _sender_ - // 7. checkpoint state - - // 1. charge for bytes used in chain - msgGasCost := vm.pricelist.OnChainMessage(onChainMsgSize) - ok := gasTank.TryCharge(msgGasCost) - if !ok { - // Invalid message; insufficient gas limit to pay for the on-chain message size. - // Note: the miner needs to pay the full msg cost, not what might have been partially consumed - return message.Failure(exitcode.SysErrOutOfGas, gas.Zero), msgGasCost.ToTokens(msg.GasPrice), big.Zero() - } - - // 2. load actor from global state - if msg.From, ok = vm.normalizeAddress(msg.From); !ok { - return message.Failure(exitcode.SysErrSenderInvalid, gas.Zero), gasTank.GasConsumed().ToTokens(msg.GasPrice), big.Zero() - } - - fromActor, found, err := vm.state.GetActor(vm.context, msg.From) - if err != nil { - panic(err) - } - if !found { - // Execution error; sender does not exist at time of message execution. - return message.Failure(exitcode.SysErrSenderInvalid, gas.Zero), gasTank.GasConsumed().ToTokens(msg.GasPrice), big.Zero() - } - - if !fromActor.Code.Equals(builtin.AccountActorCodeID) { - // Execution error; sender is not an account. - return message.Failure(exitcode.SysErrSenderInvalid, gas.Zero), gasTank.gasConsumed.ToTokens(msg.GasPrice), big.Zero() - } - - // 3. make sure this is the right message order for fromActor - if msg.CallSeqNum != fromActor.CallSeqNum { - // Execution error; invalid seq number. - return message.Failure(exitcode.SysErrSenderStateInvalid, gas.Zero), gasTank.GasConsumed().ToTokens(msg.GasPrice), big.Zero() - } - - // 4. Check sender balance (gas + value being sent) - gasLimitCost := msg.GasLimit.ToTokens(msg.GasPrice) - totalCost := big.Add(msg.Value, gasLimitCost) - if fromActor.Balance.LessThan(totalCost) { - // Execution error; sender does not have sufficient funds to pay for the gas limit. - return message.Failure(exitcode.SysErrSenderStateInvalid, gas.Zero), gasTank.GasConsumed().ToTokens(msg.GasPrice), big.Zero() - } - - // 5. Increment sender CallSeqNum - fromActor.IncrementSeqNum() - // update actor - if err := vm.state.SetActor(vm.context, msg.From, fromActor); err != nil { - panic(err) - } - - // 6. Deduct gas limit funds from sender first - // Note: this should always succeed, due to the sender balance check above - // Note: after this point, we need to return this funds back before exiting - if !gasLimitCost.Nil() && !gasLimitCost.IsZero() { - vm.transfer(msg.From, builtin.RewardActorAddr, gasLimitCost) - } - - // reload from actor - // Note: balance might have changed - fromActor, found, err = vm.state.GetActor(vm.context, msg.From) - if err != nil { - panic(err) - } - if !found { - panic("unreachable: actor cannot possibly not exist") - } - - // Load sender account state to obtain stable pubkey address. - var senderState account.State - _, err = vm.store.Get(vm.context, fromActor.Head.Cid, &senderState) - if err != nil { - panic(err) - } - - // 7. checkpoint state - // Even if the message fails, the following accumulated changes will be applied: - // - CallSeqNumber increment - // - sender balance withheld - priorRoot, err := vm.checkpoint() - if err != nil { - panic(err) - } - - // send - // 1. build internal message - // 2. build invocation context - // 3. process the msg - - topLevel := topLevelContext{ - originatorStableAddress: senderState.Address, - originatorCallSeq: msg.CallSeqNum, - newActorAddressCount: 0, - } - - // 1. build internal msg - imsg := internalMessage{ - from: msg.From, - to: msg.To, - value: msg.Value, - method: msg.Method, - params: msg.Params, - } - - // 2. build invocation context - ctx := newInvocationContext(vm, &topLevel, imsg, fromActor, &gasTank, rnd) - - // 3. invoke - ret, code := ctx.invoke() - - // build receipt - receipt := message.Receipt{ - ExitCode: code, - } - // encode value - receipt.ReturnValue, err = ret.ToCbor() - if err != nil { - // failed to encode object returned by actor - receipt.ReturnValue = []byte{} - receipt.ExitCode = exitcode.SysErrorIllegalActor - } - - // post-send - // 1. charge gas for putting the return value on the chain - // 2. settle gas money around (unused_gas -> sender) - // 3. success! - - // 1. charge for the space used by the return value - // Note: the GasUsed in the message receipt does not - ok = gasTank.TryCharge(vm.pricelist.OnChainReturnValue(&receipt)) - if !ok { - // Insufficient gas remaining to cover the on-chain return value; proceed as in the case - // of method execution failure. - receipt.ExitCode = exitcode.SysErrOutOfGas - receipt.ReturnValue = []byte{} - } - - // Roll back all state if the receipt's exit code is not ok. - // This is required in addition to rollback within the invocation context since top level messages can fail for - // more reasons than internal ones. Invocation context still needs its own rollback so actors can recover and - // proceed from a nested call failure. - if receipt.ExitCode != exitcode.Ok { - if err := vm.rollback(priorRoot); err != nil { - panic(err) - } - } - - // 2. settle gas money around (unused_gas -> sender) - receipt.GasUsed = gasTank.GasConsumed() - refundGas := msg.GasLimit - receipt.GasUsed - amount := refundGas.ToTokens(msg.GasPrice) - if !amount.Nil() && !amount.IsZero() { - vm.transfer(builtin.RewardActorAddr, msg.From, refundGas.ToTokens(msg.GasPrice)) - } - - // 3. Success! - return receipt, big.Zero(), gasTank.GasConsumed().ToTokens(msg.GasPrice) -} - -// transfer debits money from one account and credits it to another. -// avoid calling this method with a zero amount else it will perform unnecessary actor loading. -// -// WARNING: this method will panic if the the amount is negative, accounts dont exist, or have inssuficient funds. -// -// Note: this is not idiomatic, it follows the Spec expectations for this method. -func (vm *VM) transfer(debitFrom address.Address, creditTo address.Address, amount abi.TokenAmount) (*actor.Actor, *actor.Actor) { - // allow only for positive amounts - if amount.LessThan(abi.NewTokenAmount(0)) { - panic("unreachable: negative funds transfer not allowed") - } - - ctx := context.Background() - - // retrieve debit account - fromActor, found, err := vm.state.GetActor(ctx, debitFrom) - if err != nil { - panic(err) - } - if !found { - panic(fmt.Errorf("unreachable: debit account not found. %s", err)) - } - - // check that account has enough balance for transfer - if fromActor.Balance.LessThan(amount) { - panic("unreachable: insufficient balance on debit account") - } - - // debit funds - fromActor.Balance = big.Sub(fromActor.Balance, amount) - if err := vm.state.SetActor(ctx, debitFrom, fromActor); err != nil { - panic(err) - } - - // retrieve credit account - toActor, found, err := vm.state.GetActor(ctx, creditTo) - if err != nil { - panic(err) - } - if !found { - panic(fmt.Errorf("unreachable: credit account not found. %s", err)) - } - - // credit funds - toActor.Balance = big.Add(toActor.Balance, amount) - if err := vm.state.SetActor(ctx, creditTo, toActor); err != nil { - panic(err) - } - return toActor, fromActor -} - -func (vm *VM) getActorImpl(code cid.Cid) dispatch.Dispatcher { - actorImpl, err := vm.actorImpls.GetActorImpl(code) - if err != nil { - runtime.Abort(exitcode.SysErrInvalidReceiver) - } - return actorImpl -} - -// -// implement runtime.Runtime for VM -// - -var _ runtime.Runtime = (*VM)(nil) - -// CurrentEpoch implements runtime.Runtime. -func (vm *VM) CurrentEpoch() abi.ChainEpoch { - return vm.currentEpoch -} - -// -// implement runtime.MessageInfo for internalMessage -// - -var _ specsruntime.Message = (*internalMessage)(nil) - -// ValueReceived implements runtime.MessageInfo. -func (msg internalMessage) ValueReceived() abi.TokenAmount { - return msg.value -} - -// Caller implements runtime.MessageInfo. -func (msg internalMessage) Caller() address.Address { - return msg.from -} - -// Receiver implements runtime.MessageInfo. -func (msg internalMessage) Receiver() address.Address { - return msg.to -} - -// -// implement syscalls state view -// - -type syscallsStateView struct { - *VM -} - -func (vm *syscallsStateView) AccountSignerAddress(ctx context.Context, accountAddr address.Address) (address.Address, error) { - // Short-circuit when given a pubkey address. - if accountAddr.Protocol() == address.SECP256K1 || accountAddr.Protocol() == address.BLS { - return accountAddr, nil - } - actor, found, err := vm.state.GetActor(vm.context, accountAddr) - if err != nil { - return address.Undef, errors.Wrapf(err, "signer resolution failed to find actor %s", accountAddr) - } - if !found { - return address.Undef, fmt.Errorf("signer resolution found no such actor %s", accountAddr) - } - var state account.State - if _, err := vm.store.Get(vm.context, actor.Head.Cid, &state); err != nil { - // This error is internal, shouldn't propagate as on-chain failure - panic(fmt.Errorf("signer resolution failed to lost state for %s ", accountAddr)) - } - return state.Address, nil -} - -func (vm *syscallsStateView) MinerControlAddresses(ctx context.Context, maddr address.Address) (owner, worker address.Address, err error) { - actor, found, err := vm.state.GetActor(vm.context, maddr) - if err != nil { - return address.Undef, address.Undef, errors.Wrapf(err, "miner resolution failed to find actor %s", maddr) - } - if !found { - return address.Undef, address.Undef, fmt.Errorf("miner resolution found no such actor %s", maddr) - } - var state miner.State - if _, err := vm.store.Get(vm.context, actor.Head.Cid, &state); err != nil { - // This error is internal, shouldn't propagate as on-chain failure - panic(fmt.Errorf("signer resolution failed to lost state for %s ", maddr)) - } - return state.Info.Owner, state.Info.Worker, nil -} - -// -// utils -// - -func msgCID(msg *types.UnsignedMessage) cid.Cid { - cid, err := msg.Cid() - if err != nil { - panic(fmt.Sprintf("failed to compute message CID: %v; %+v", err, msg)) - } - return cid -} - -func makeBlockRewardMessage(blockMiner address.Address, penalty abi.TokenAmount, gasReward abi.TokenAmount, ticketCount int64) internalMessage { - params := &reward.AwardBlockRewardParams{ - Miner: blockMiner, - Penalty: penalty, - GasReward: gasReward, - TicketCount: ticketCount, - } - encoded, err := encoding.Encode(params) - if err != nil { - panic(fmt.Errorf("failed to encode built-in block reward. %s", err)) - } - return internalMessage{ - from: builtin.SystemActorAddr, - to: builtin.RewardActorAddr, - value: big.Zero(), - method: builtin.MethodsReward.AwardBlockReward, - params: encoded, - } -} - -func makeCronTickMessage() internalMessage { - return internalMessage{ - from: builtin.SystemActorAddr, - to: builtin.CronActorAddr, - value: big.Zero(), - method: builtin.MethodsCron.EpochTick, - params: []byte{}, - } -} diff --git a/internal/pkg/vm/state/state.go b/internal/pkg/vm/state/state.go deleted file mode 100644 index 45548b6254..0000000000 --- a/internal/pkg/vm/state/state.go +++ /dev/null @@ -1,221 +0,0 @@ -package state - -import ( - "context" - "fmt" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-hamt-ipld" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" -) - -// Review: can we get rid of this? -type Tree interface { - Root() (Root, bool) - - SetActor(ctx context.Context, key actorKey, a *actor.Actor) error - GetActor(ctx context.Context, key actorKey) (*actor.Actor, bool, error) - DeleteActor(ctx context.Context, key actorKey) error - - Rollback(ctx context.Context, root Root) error - Commit(ctx context.Context) (Root, error) - - GetAllActors(ctx context.Context) <-chan GetAllActorsResult -} - -// TreeBitWidth is the bit width of the HAMT used to store a state tree -const TreeBitWidth = 5 - -// Root is the root type of a state. -// -// Any and all state can be identified by this. -// -// Note: it might not be possible to locally reconstruct the entire state if the some parts are missing. -type Root = cid.Cid - -type actorKey = address.Address - -// State is the VM state manager. -type State struct { - store cbor.IpldStore - dirty bool - root Root // The last committed root. - rootNode *hamt.Node // The current (not necessarily committed) root node. -} - -// NewState creates a new VM state. -func NewState(store cbor.IpldStore) *State { - st := newState(store, cid.Undef, hamt.NewNode(store, hamt.UseTreeBitWidth(TreeBitWidth))) - st.dirty = true - return st -} - -// LoadState creates a new VMStorage. -func LoadState(ctx context.Context, store cbor.IpldStore, root Root) (*State, error) { - rootNode, err := hamt.LoadNode(ctx, store, root, hamt.UseTreeBitWidth(TreeBitWidth)) - - if err != nil { - return nil, errors.Wrapf(err, "failed to load node for %s", root) - } - - return newState(store, root, rootNode), nil -} - -func newState(store cbor.IpldStore, root Root, rootNode *hamt.Node) *State { - return &State{ - store: store, - dirty: false, - root: root, - rootNode: rootNode, - } -} - -// GetActor retrieves an actor by their key. -// If the actor is not found it will return false and no error. -// If there are any IO or decoding errors, it will return false and the error. -func (st *State) GetActor(ctx context.Context, key actorKey) (*actor.Actor, bool, error) { - actorBytes, err := st.rootNode.FindRaw(ctx, string(key.Bytes())) - if err == hamt.ErrNotFound { - return nil, false, nil - } - if err != nil { - return nil, false, err - } - - var act actor.Actor - err = encoding.Decode(actorBytes, &act) - if err != nil { - return nil, false, err - } - - return &act, true, nil -} - -// SetActor sets the the actor to the given value whether it previously existed or not. -// -// This method will not check if the actor previuously existed, it will blindly overwrite it. -func (st *State) SetActor(ctx context.Context, key actorKey, a *actor.Actor) error { - actBytes, err := encoding.Encode(a) - if err != nil { - return err - } - if err := st.rootNode.SetRaw(ctx, string(key.Bytes()), actBytes); err != nil { - return errors.Wrap(err, "setting actor in state tree failed") - } - st.dirty = true - return nil -} - -// DeleteActor remove the actor from the storage. -// -// This method will NOT return an error if the actor was not found. -// This behaviour is based on a principle that some store implementations might not be able to determine -// whether something exists before deleting it. -func (st *State) DeleteActor(ctx context.Context, key actorKey) error { - err := st.rootNode.Delete(ctx, string(key.Bytes())) - st.dirty = true - if err == hamt.ErrNotFound { - return nil - } - return err -} - -// Commit will flush the state tree into the backing store. -// The new root is returned. -func (st *State) Commit(ctx context.Context) (Root, error) { - if err := st.rootNode.Flush(ctx); err != nil { - return cid.Undef, err - } - - root, err := st.store.Put(ctx, st.rootNode) - if err != nil { - return cid.Undef, err - } - - st.root = root - st.dirty = false - return root, nil -} - -// Rollback resets the root to a provided value. -func (st *State) Rollback(ctx context.Context, root Root) error { - // load the original root node again - rootNode, err := hamt.LoadNode(ctx, st.store, root, hamt.UseTreeBitWidth(TreeBitWidth)) - if err != nil { - return errors.Wrapf(err, "failed to load node for %s", root) - } - - // reset the root node - st.rootNode = rootNode - st.dirty = false - return nil -} - -// Root returns the last committed root of the tree and whether any writes have since occurred. -func (st *State) Root() (Root, bool) { - return st.root, st.dirty -} - -// GetAllActorsResult is the struct returned via a channel by the GetAllActors -// method. This struct contains only an address string and the actor itself. -type GetAllActorsResult struct { - Key actorKey - Actor *actor.Actor - Error error -} - -// GetAllActors returns a channel which provides all actors in the StateTree. -func (st *State) GetAllActors(ctx context.Context) <-chan GetAllActorsResult { - out := make(chan GetAllActorsResult) - go func() { - defer close(out) - st.getActorsFromPointers(ctx, out, st.rootNode.Pointers) - }() - return out -} - -// NOTE: This extracts actors from pointers recursively. Maybe we shouldn't recurse here. -func (st *State) getActorsFromPointers(ctx context.Context, out chan<- GetAllActorsResult, ps []*hamt.Pointer) { - for _, p := range ps { - for _, kv := range p.KVs { - var a actor.Actor - - if err := encoding.Decode(kv.Value.Raw, &a); err != nil { - fmt.Printf("bad raw bytes: %x\n", kv.Value.Raw) - panic(err) - } - - select { - case <-ctx.Done(): - out <- GetAllActorsResult{ - Error: ctx.Err(), - } - return - default: - addr, err := address.NewFromBytes(kv.Key) - if err != nil { - fmt.Printf("bad address key bytes: %x\n", kv.Value.Raw) - panic(err) - } - out <- GetAllActorsResult{ - Key: addr, - Actor: &a, - } - } - } - if p.Link.Defined() { - n, err := hamt.LoadNode(ctx, st.store, p.Link, hamt.UseTreeBitWidth(TreeBitWidth)) - // Even if we hit an error and can't follow this link, we should - // keep traversing its siblings. - if err != nil { - continue - } - st.getActorsFromPointers(ctx, out, n.Pointers) - } - } -} diff --git a/internal/pkg/vm/state/state_test.go b/internal/pkg/vm/state/state_test.go deleted file mode 100644 index 661c0d9a5c..0000000000 --- a/internal/pkg/vm/state/state_test.go +++ /dev/null @@ -1,159 +0,0 @@ -package state - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/ipfs/go-cid" - bstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" -) - -func TestStatePutGet(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - - bs := bstore.NewBlockstore(repo.NewInMemoryRepo().Datastore()) - cst := cborutil.NewIpldStore(bs) - tree := NewState(cst) - - act1 := actor.NewActor(builtin.AccountActorCodeID, abi.NewTokenAmount(0), cid.Undef) - act1.IncrementSeqNum() - act2 := actor.NewActor(builtin.AccountActorCodeID, abi.NewTokenAmount(0), cid.Undef) - act2.IncrementSeqNum() - act2.IncrementSeqNum() - - addrGetter := vmaddr.NewForTestGetter() - addr1 := addrGetter() - addr2 := addrGetter() - - assert.NoError(t, tree.SetActor(ctx, addr1, act1)) - assert.NoError(t, tree.SetActor(ctx, addr2, act2)) - - act1out, found, err := tree.GetActor(ctx, addr1) - assert.NoError(t, err) - assert.True(t, found) - assert.Equal(t, act1, act1out) - act2out, found, err := tree.GetActor(ctx, addr2) - assert.NoError(t, err) - assert.True(t, found) - assert.Equal(t, act2, act2out) - - // now test it persists across recreation of tree - tcid, err := tree.Commit(ctx) - assert.NoError(t, err) - - tree2, err := LoadState(ctx, cst, tcid) - assert.NoError(t, err) - - act1out2, found, err := tree2.GetActor(ctx, addr1) - assert.NoError(t, err) - assert.True(t, found) - assert.Equal(t, act1, act1out2) - act2out2, found, err := tree2.GetActor(ctx, addr2) - assert.NoError(t, err) - assert.True(t, found) - assert.Equal(t, act2, act2out2) -} - -func TestStateErrors(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - bs := bstore.NewBlockstore(repo.NewInMemoryRepo().Datastore()) - cst := cborutil.NewIpldStore(bs) - tree := NewState(cst) - - a, found, err := tree.GetActor(ctx, vmaddr.NewForTestGetter()()) - assert.Nil(t, a) - assert.False(t, found) - assert.NoError(t, err) - - c, err := constants.DefaultCidBuilder.Sum([]byte("cats")) - assert.NoError(t, err) - - tr2, err := LoadState(ctx, cst, c) - assert.Error(t, err) - assert.Nil(t, tr2) -} -func TestGetAllActors(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - bs := bstore.NewBlockstore(repo.NewInMemoryRepo().Datastore()) - cst := cborutil.NewIpldStore(bs) - tree := NewState(cst) - addr := vmaddr.NewForTestGetter()() - - actor := actor.Actor{Code: e.NewCid(builtin.AccountActorCodeID), CallSeqNum: 1234, Balance: abi.NewTokenAmount(123)} - err := tree.SetActor(ctx, addr, &actor) - assert.NoError(t, err) - _, err = tree.Commit(ctx) - require.NoError(t, err) - - results := tree.GetAllActors(ctx) - - for result := range results { - assert.Equal(t, addr, result.Key) - assert.Equal(t, actor.Code, result.Actor.Code) - assert.Equal(t, actor.CallSeqNum, result.Actor.CallSeqNum) - assert.Equal(t, actor.Balance, result.Actor.Balance) - } -} - -func TestStateTreeConsistency(t *testing.T) { - tf.UnitTest(t) - - ctx := context.Background() - bs := bstore.NewBlockstore(repo.NewInMemoryRepo().Datastore()) - cst := cborutil.NewIpldStore(bs) - tree := NewState(cst) - - var addrs []address.Address - for i := 100; i < 150; i++ { - a, err := address.NewIDAddress(uint64(i)) - if err != nil { - t.Fatal(err) - } - - addrs = append(addrs, a) - } - - randomCid, err := cid.Decode("bafy2bzacecu7n7wbtogznrtuuvf73dsz7wasgyneqasksdblxupnyovmtwxxu") - if err != nil { - t.Fatal(err) - } - - for i, a := range addrs { - if err := tree.SetActor(ctx, a, &actor.Actor{ - Code: e.NewCid(randomCid), - Head: e.NewCid(randomCid), - Balance: abi.NewTokenAmount(int64(10000 + i)), - CallSeqNum: uint64(1000 - i), - }); err != nil { - t.Fatal(err) - } - } - - root, err := tree.Commit(ctx) - if err != nil { - t.Fatal(err) - } - if root.String() != "bafy2bzaceadyjnrv3sbjvowfl3jr4pdn5p2bf3exjjie2f3shg4oy5sub7h34" { - t.Fatalf("State Tree Mismatch. Expected: bafy2bzaceadyjnrv3sbjvowfl3jr4pdn5p2bf3exjjie2f3shg4oy5sub7h34 Actual: %s", root.String()) - } - -} diff --git a/internal/pkg/vm/state/testing.go b/internal/pkg/vm/state/testing.go deleted file mode 100644 index f3d9171f13..0000000000 --- a/internal/pkg/vm/state/testing.go +++ /dev/null @@ -1,54 +0,0 @@ -package state - -import ( - "context" - "fmt" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" -) - -// NewFromString sets a state tree based on an int. -// -// TODO: we could avoid this if write a test cborStore that can map test cids to test states. -func NewFromString(t *testing.T, s string, store cbor.IpldStore) *State { - tree := NewState(store) - strAddr, err := address.NewSecp256k1Address([]byte(s)) - fmt.Printf("strAddr: %s\n", strAddr) - require.NoError(t, err) - err = tree.SetActor(context.Background(), strAddr, &actor.Actor{}) - require.NoError(t, err) - return tree -} - -// MustCommit flushes the StateTree or panics if it can't. -func MustCommit(st State) cid.Cid { - cid, err := st.Commit(context.Background()) - if err != nil { - panic(err) - } - return cid -} - -// MustGetActor gets the actor or panics if it can't. -func MustGetActor(st State, a address.Address) (*actor.Actor, bool) { - actor, found, err := st.GetActor(context.Background(), a) - if err != nil { - panic(err) - } - return actor, found -} - -// MustSetActor sets the actor or panics if it can't. -func MustSetActor(st State, address address.Address, actor *actor.Actor) cid.Cid { - err := st.SetActor(context.Background(), address, actor) - if err != nil { - panic(err) - } - return MustCommit(st) -} diff --git a/internal/pkg/vm/testing.go b/internal/pkg/vm/testing.go deleted file mode 100644 index 664694be3c..0000000000 --- a/internal/pkg/vm/testing.go +++ /dev/null @@ -1,74 +0,0 @@ -package vm - -import ( - "bytes" - - specsruntime "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/ipfs/go-cid" - cbor "github.com/ipfs/go-ipld-cbor" - cbg "github.com/whyrusleeping/cbor-gen" - - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/vmcontext" -) - -type FakeSyscalls = vmcontext.FakeSyscalls - -// TestStorage is a fake storage used for testing. -type TestStorage struct { - state interface{} -} - -// NewTestStorage returns a new "TestStorage" -func NewTestStorage(state interface{}) *TestStorage { - return &TestStorage{ - state: state, - } -} - -var _ specsruntime.Store = (*TestStorage)(nil) - -// Put implements runtime.Store. -func (ts *TestStorage) Put(v specsruntime.CBORMarshaler) cid.Cid { - ts.state = v - if cm, ok := v.(cbg.CBORMarshaler); ok { - buf := new(bytes.Buffer) - err := cm.MarshalCBOR(buf) - if err == nil { - return cid.NewCidV1(cid.Raw, buf.Bytes()) - } - } - raw, err := encoding.Encode(v) - if err != nil { - panic("failed to encode") - } - return cid.NewCidV1(cid.Raw, raw) -} - -// Get implements runtime.Store. -func (ts *TestStorage) Get(cid cid.Cid, obj specsruntime.CBORUnmarshaler) bool { - node, err := cbor.WrapObject(ts.state, constants.DefaultHashFunction, -1) - if err != nil { - return false - } - - err = encoding.Decode(node.RawData(), obj) - if err != nil { - return false - } - - return true -} - -// CidOf returns the cid of the object. -func (ts *TestStorage) CidOf(obj interface{}) cid.Cid { - if obj == nil { - return cid.Undef - } - raw, err := encoding.Encode(obj) - if err != nil { - panic("failed to encode") - } - return cid.NewCidV1(cid.Raw, raw) -} diff --git a/internal/pkg/vm/testing_messages.go b/internal/pkg/vm/testing_messages.go deleted file mode 100644 index 906d608c8b..0000000000 --- a/internal/pkg/vm/testing_messages.go +++ /dev/null @@ -1,101 +0,0 @@ -package vm - -import ( - "context" - "fmt" - "testing" - - address "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/gas" -) - -// MessageMaker creates unique, signed messages for use in tests. -type MessageMaker struct { - DefaultGasPrice types.AttoFIL - DefaultGasUnits gas.Unit - - signer *types.MockSigner - seq uint - t *testing.T -} - -// NewMessageMaker creates a new message maker with a set of signing keys. -func NewMessageMaker(t *testing.T, keys []crypto.KeyInfo) *MessageMaker { - addresses := make([]address.Address, len(keys)) - signer := types.NewMockSigner(keys) - - for i, key := range keys { - addr, _ := key.Address() - addresses[i] = addr - } - - return &MessageMaker{types.ZeroAttoFIL, gas.Unit(0), &signer, 0, t} -} - -// Addresses returns the addresses for which this maker can sign messages. -func (mm *MessageMaker) Addresses() []address.Address { - return mm.signer.Addresses -} - -// Signer returns the signer with which this maker signs messages. -func (mm *MessageMaker) Signer() *types.MockSigner { - return mm.signer -} - -// NewUnsignedMessage creates a new message. -func (mm *MessageMaker) NewUnsignedMessage(from address.Address, nonce uint64) *types.UnsignedMessage { - seq := mm.seq - mm.seq++ - to, err := address.NewSecp256k1Address([]byte("destination")) - require.NoError(mm.t, err) - return types.NewMeteredMessage( - from, - to, - nonce, - types.ZeroAttoFIL, - abi.MethodNum(9000+seq), - []byte("params"), - mm.DefaultGasPrice, - mm.DefaultGasUnits) -} - -// NewSignedMessage creates a new signed message. -func (mm *MessageMaker) NewSignedMessage(from address.Address, nonce uint64) *types.SignedMessage { - msg := mm.NewUnsignedMessage(from, nonce) - signed, err := types.NewSignedMessage(context.TODO(), *msg, mm.signer) - require.NoError(mm.t, err) - return signed -} - -// EmptyReceipts returns a slice of n empty receipts. -func EmptyReceipts(n int) []*MessageReceipt { - out := make([]*MessageReceipt, n) - for i := 0; i < n; i++ { - out[i] = &MessageReceipt{} - } - return out -} - -// ReceiptMaker generates unique receipts -type ReceiptMaker struct { - seq uint -} - -// NewReceiptMaker creates a new receipt maker -func NewReceiptMaker() *ReceiptMaker { - return &ReceiptMaker{0} -} - -// NewReceipt creates a new distinct receipt. -func (rm *ReceiptMaker) NewReceipt() MessageReceipt { - seq := rm.seq - rm.seq++ - return MessageReceipt{ - ReturnValue: []byte(fmt.Sprintf("%d", seq)), - } -} diff --git a/internal/pkg/vm/vm.go b/internal/pkg/vm/vm.go deleted file mode 100644 index 282c4b50be..0000000000 --- a/internal/pkg/vm/vm.go +++ /dev/null @@ -1,50 +0,0 @@ -package vm - -import ( - blockstore "github.com/ipfs/go-ipfs-blockstore" - - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor/builtin" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/dispatch" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/interpreter" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/message" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/storage" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/vmcontext" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" -) - -// Re-exports - -// Interpreter is the VM. -type Interpreter = interpreter.VMInterpreter - -// Storage is the raw storage for the VM. -type Storage = storage.VMStorage - -type SyscallsImpl = vmcontext.SyscallsImpl -type SyscallsStateView = vmcontext.SyscallsStateView - -// BlockMessagesInfo contains messages for one block in a tipset. -type BlockMessagesInfo = interpreter.BlockMessagesInfo - -// MessageReceipt is what is returned by executing a message on the vm. -type MessageReceipt = message.Receipt - -// NewVM creates a new VM interpreter. -func NewVM(st state.Tree, store *storage.VMStorage, syscalls SyscallsImpl) Interpreter { - vm := vmcontext.NewVM(builtin.DefaultActors, store, st, syscalls) - return &vm -} - -// NewStorage creates a new Storage for the VM. -func NewStorage(bs blockstore.Blockstore) Storage { - return storage.NewStorage(bs) -} - -// DefaultActors is a code loader with the built-in actors that come with the system. -var DefaultActors = builtin.DefaultActors - -// ActorCodeLoader allows yo to load an actor's code based on its id an epoch. -type ActorCodeLoader = dispatch.CodeLoader - -// ActorMethodSignature wraps a specific method and allows you to encode/decodes input/output bytes into concrete types. -type ActorMethodSignature = dispatch.MethodSignature diff --git a/internal/pkg/vmsupport/syscalls.go b/internal/pkg/vmsupport/syscalls.go deleted file mode 100644 index d1580e97af..0000000000 --- a/internal/pkg/vmsupport/syscalls.go +++ /dev/null @@ -1,80 +0,0 @@ -package vmsupport - -import ( - "context" - "errors" - "fmt" - - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/sector-storage/ffiwrapper" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/ipfs/go-cid" - "github.com/minio/blake2b-simd" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/slashing" - "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" -) - -type faultChecker interface { - VerifyConsensusFault(ctx context.Context, h1, h2, extra []byte, head block.TipSetKey, view slashing.FaultStateView) (*runtime.ConsensusFault, error) -} - -// Syscalls contains the concrete implementation of VM system calls, including connection to -// proof verification and blockchain inspection. -// Errors returned by these methods are intended to be returned to the actor code to respond to: they must be -// entirely deterministic and repeatable by other implementations. -// Any non-deterministic error will instead trigger a panic. -// TODO: determine a more robust mechanism for distinguishing transient runtime failures from deterministic errors -// in VM and supporting code. https://github.com/filecoin-project/go-filecoin/issues/3844 -type Syscalls struct { - faultChecker faultChecker - verifier ffiwrapper.Verifier -} - -func NewSyscalls(faultChecker faultChecker, verifier ffiwrapper.Verifier) *Syscalls { - return &Syscalls{ - faultChecker: faultChecker, - verifier: verifier, - } -} - -func (s *Syscalls) VerifySignature(ctx context.Context, view vm.SyscallsStateView, signature crypto.Signature, signer address.Address, plaintext []byte) error { - return state.NewSignatureValidator(view).ValidateSignature(ctx, plaintext, signer, signature) -} - -func (s *Syscalls) HashBlake2b(data []byte) [32]byte { - return blake2b.Sum256(data) -} - -func (s *Syscalls) ComputeUnsealedSectorCID(_ context.Context, proof abi.RegisteredProof, pieces []abi.PieceInfo) (cid.Cid, error) { - return ffiwrapper.GenerateUnsealedCID(proof, pieces) -} - -func (s *Syscalls) VerifySeal(_ context.Context, info abi.SealVerifyInfo) error { - ok, err := s.verifier.VerifySeal(info) - if err != nil { - return err - } else if !ok { - return fmt.Errorf("seal invalid") - } - return nil -} - -func (s *Syscalls) VerifyPoSt(ctx context.Context, info abi.WindowPoStVerifyInfo) error { - ok, err := s.verifier.VerifyWindowPoSt(ctx, info) - if err != nil { - return err - } - if !ok { - return errors.New("window PoSt verification failed") - } - return nil -} - -func (s *Syscalls) VerifyConsensusFault(ctx context.Context, h1, h2, extra []byte, head block.TipSetKey, view vm.SyscallsStateView) (*runtime.ConsensusFault, error) { - return s.faultChecker.VerifyConsensusFault(ctx, h1, h2, extra, head, view) -} diff --git a/internal/pkg/vmsupport/util.go b/internal/pkg/vmsupport/util.go deleted file mode 100644 index e5276adcb1..0000000000 --- a/internal/pkg/vmsupport/util.go +++ /dev/null @@ -1,18 +0,0 @@ -package vmsupport - -import ( - "context" - "fmt" - - "github.com/filecoin-project/specs-actors/actors/runtime" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/slashing" -) - -type NilFaultChecker struct { -} - -func (n *NilFaultChecker) VerifyConsensusFault(_ context.Context, _, _, _ []byte, _ block.TipSetKey, _ slashing.FaultStateView) (*runtime.ConsensusFault, error) { - return nil, fmt.Errorf("empty chain cannot have consensus fault") -} diff --git a/internal/pkg/wallet/backend.go b/internal/pkg/wallet/backend.go deleted file mode 100644 index 58928f48f5..0000000000 --- a/internal/pkg/wallet/backend.go +++ /dev/null @@ -1,33 +0,0 @@ -package wallet - -import ( - "github.com/filecoin-project/go-address" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" -) - -// Backend is the interface to represent different storage backends -// that can contain many addresses. -type Backend interface { - // Addresses returns a list of all accounts currently stored in this backend. - Addresses() []address.Address - - // Contains returns true if this backend stores the passed in address. - HasAddress(addr address.Address) bool - - // Sign cryptographically signs data with the private key associated with an address. - SignBytes(data []byte, addr address.Address) (crypto.Signature, error) - - // GetKeyInfo will return the keyinfo associated with address `addr` - // iff backend contains the addr. - GetKeyInfo(addr address.Address) (*crypto.KeyInfo, error) -} - -// Importer is a specialization of a wallet backend that can import -// new keys into its permanent storage. Disk backed wallets can do this, -// hardware wallets generally cannot. -type Importer interface { - // ImportKey imports the key described by the given keyinfo - // into the backend - ImportKey(ki *crypto.KeyInfo) error -} diff --git a/internal/pkg/wallet/dsbackend.go b/internal/pkg/wallet/dsbackend.go deleted file mode 100644 index e9565fa309..0000000000 --- a/internal/pkg/wallet/dsbackend.go +++ /dev/null @@ -1,177 +0,0 @@ -package wallet - -import ( - "crypto/rand" - "reflect" - "strings" - "sync" - - "github.com/filecoin-project/go-address" - ds "github.com/ipfs/go-datastore" - dsq "github.com/ipfs/go-datastore/query" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" -) - -// DSBackendType is the reflect type of the DSBackend. -var DSBackendType = reflect.TypeOf(&DSBackend{}) - -// DSBackend is a wallet backend implementation for storing addresses in a datastore. -type DSBackend struct { - lk sync.RWMutex - - // TODO: use a better interface that supports time locks, encryption, etc. - ds repo.Datastore - - // TODO: proper cache - cache map[address.Address]struct{} -} - -var _ Backend = (*DSBackend)(nil) - -// NewDSBackend constructs a new backend using the passed in datastore. -func NewDSBackend(ds repo.Datastore) (*DSBackend, error) { - result, err := ds.Query(dsq.Query{ - KeysOnly: true, - }) - if err != nil { - return nil, errors.Wrap(err, "failed to query datastore") - } - - list, err := result.Rest() - if err != nil { - return nil, errors.Wrap(err, "failed to read query results") - } - - cache := make(map[address.Address]struct{}) - for _, el := range list { - parsedAddr, err := address.NewFromString(strings.Trim(el.Key, "/")) - if err != nil { - return nil, errors.Wrapf(err, "trying to restore invalid address: %s", el.Key) - } - cache[parsedAddr] = struct{}{} - } - - return &DSBackend{ - ds: ds, - cache: cache, - }, nil -} - -// ImportKey loads the address in `ai` and KeyInfo `ki` into the backend -func (backend *DSBackend) ImportKey(ki *crypto.KeyInfo) error { - return backend.putKeyInfo(ki) -} - -// Addresses returns a list of all addresses that are stored in this backend. -func (backend *DSBackend) Addresses() []address.Address { - backend.lk.RLock() - defer backend.lk.RUnlock() - - var cpy []address.Address - for addr := range backend.cache { - cpy = append(cpy, addr) - } - return cpy -} - -// HasAddress checks if the passed in address is stored in this backend. -// Safe for concurrent access. -func (backend *DSBackend) HasAddress(addr address.Address) bool { - backend.lk.RLock() - defer backend.lk.RUnlock() - - _, ok := backend.cache[addr] - return ok -} - -// NewAddress creates a new address and stores it. -// Safe for concurrent access. -func (backend *DSBackend) NewAddress(protocol address.Protocol) (address.Address, error) { - switch protocol { - case address.BLS: - return backend.newBLSAddress() - case address.SECP256K1: - return backend.newSecpAddress() - default: - return address.Undef, errors.Errorf("Unknown address protocol %d", protocol) - } -} - -func (backend *DSBackend) newSecpAddress() (address.Address, error) { - ki, err := crypto.NewSecpKeyFromSeed(rand.Reader) - if err != nil { - return address.Undef, err - } - - if err := backend.putKeyInfo(&ki); err != nil { - return address.Undef, err - } - return ki.Address() -} - -func (backend *DSBackend) newBLSAddress() (address.Address, error) { - ki, err := crypto.NewBLSKeyFromSeed(rand.Reader) - if err != nil { - return address.Undef, err - } - - if err := backend.putKeyInfo(&ki); err != nil { - return address.Undef, err - } - return ki.Address() -} - -func (backend *DSBackend) putKeyInfo(ki *crypto.KeyInfo) error { - a, err := ki.Address() - if err != nil { - return err - } - - backend.lk.Lock() - defer backend.lk.Unlock() - - kib, err := ki.Marshal() - if err != nil { - return err - } - - if err := backend.ds.Put(ds.NewKey(a.String()), kib); err != nil { - return errors.Wrap(err, "failed to store new address") - } - - backend.cache[a] = struct{}{} - return nil -} - -// SignBytes cryptographically signs `data` using the private key `priv`. -func (backend *DSBackend) SignBytes(data []byte, addr address.Address) (crypto.Signature, error) { - ki, err := backend.GetKeyInfo(addr) - if err != nil { - return crypto.Signature{}, err - } - return crypto.Sign(data, ki.PrivateKey, ki.SigType) -} - -// GetKeyInfo will return the private & public keys associated with address `addr` -// iff backend contains the addr. -func (backend *DSBackend) GetKeyInfo(addr address.Address) (*crypto.KeyInfo, error) { - if !backend.HasAddress(addr) { - return nil, errors.New("backend does not contain address") - } - - // kib is a cbor of types.KeyInfo - kib, err := backend.ds.Get(ds.NewKey(addr.String())) - if err != nil { - return nil, errors.Wrap(err, "failed to fetch private key from backend") - } - - ki := &crypto.KeyInfo{} - if err := ki.Unmarshal(kib); err != nil { - return nil, errors.Wrap(err, "failed to unmarshal keyinfo from backend") - } - - return ki, nil -} diff --git a/internal/pkg/wallet/dsbackend_test.go b/internal/pkg/wallet/dsbackend_test.go deleted file mode 100644 index 488ddb7084..0000000000 --- a/internal/pkg/wallet/dsbackend_test.go +++ /dev/null @@ -1,135 +0,0 @@ -package wallet - -import ( - "sync" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-datastore" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -func TestDSBackendSimple(t *testing.T) { - tf.UnitTest(t) - - ds := datastore.NewMapDatastore() - defer func() { - require.NoError(t, ds.Close()) - }() - - fs, err := NewDSBackend(ds) - assert.NoError(t, err) - - t.Log("empty address list on empty datastore") - assert.Len(t, fs.Addresses(), 0) - - t.Log("can create new address") - addr, err := fs.NewAddress(address.SECP256K1) - assert.NoError(t, err) - - t.Log("address is stored") - assert.True(t, fs.HasAddress(addr)) - - t.Log("address is stored in repo, and back when loading fresh in a new backend") - fs2, err := NewDSBackend(ds) - assert.NoError(t, err) - - assert.True(t, fs2.HasAddress(addr)) -} - -func TestDSBackendKeyPairMatchAddress(t *testing.T) { - tf.UnitTest(t) - - ds := datastore.NewMapDatastore() - defer func() { - require.NoError(t, ds.Close()) - }() - - fs, err := NewDSBackend(ds) - assert.NoError(t, err) - - t.Log("can create new address") - addr, err := fs.NewAddress(address.SECP256K1) - assert.NoError(t, err) - - t.Log("address is stored") - assert.True(t, fs.HasAddress(addr)) - - t.Log("address references to a secret key") - ki, err := fs.GetKeyInfo(addr) - assert.NoError(t, err) - - dAddr, err := ki.Address() - assert.NoError(t, err) - - t.Log("generated address and stored address should match") - assert.Equal(t, addr, dAddr) -} - -func TestDSBackendErrorsForUnknownAddress(t *testing.T) { - tf.UnitTest(t) - - // create 2 backends - ds1 := datastore.NewMapDatastore() - defer func() { - require.NoError(t, ds1.Close()) - }() - fs1, err := NewDSBackend(ds1) - assert.NoError(t, err) - - ds2 := datastore.NewMapDatastore() - defer func() { - require.NoError(t, ds2.Close()) - }() - fs2, err := NewDSBackend(ds2) - assert.NoError(t, err) - - t.Log("can create new address in fs1") - addr, err := fs1.NewAddress(address.SECP256K1) - assert.NoError(t, err) - - t.Log("address is stored fs1") - assert.True(t, fs1.HasAddress(addr)) - - t.Log("address is not stored fs2") - assert.False(t, fs2.HasAddress(addr)) - - t.Log("address references to a secret key in fs1") - _, err = fs1.GetKeyInfo(addr) - assert.NoError(t, err) - - t.Log("address does not references to a secret key in fs2") - _, err = fs2.GetKeyInfo(addr) - assert.Error(t, err) - assert.Contains(t, "backend does not contain address", err.Error()) - -} - -func TestDSBackendParallel(t *testing.T) { - tf.UnitTest(t) - - ds := datastore.NewMapDatastore() - defer func() { - require.NoError(t, ds.Close()) - }() - - fs, err := NewDSBackend(ds) - assert.NoError(t, err) - - var wg sync.WaitGroup - count := 10 - wg.Add(count) - for i := 0; i < count; i++ { - go func() { - _, err := fs.NewAddress(address.SECP256K1) - assert.NoError(t, err) - wg.Done() - }() - } - - wg.Wait() - assert.Len(t, fs.Addresses(), 10) -} diff --git a/internal/pkg/wallet/signature_test.go b/internal/pkg/wallet/signature_test.go deleted file mode 100644 index 05dd78145a..0000000000 --- a/internal/pkg/wallet/signature_test.go +++ /dev/null @@ -1,102 +0,0 @@ -// These tests check that the signature validation in go-filecoin/types -// works as expected. They are kept in the wallet package because -// these tests need to generate signatures and the wallet package owns this -// function. They cannot be kept in types because wallet imports "types" -// for the Signature and KeyInfo types. TODO: organize packages in a way -// that makes more sense, e.g. so that signature tests can be in same package -// as signature code. - -package wallet - -import ( - "testing" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-datastore" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" -) - -/* Test types.ValidateSignature */ - -func requireSignerAddr(t *testing.T) (*DSBackend, address.Address) { - ds := datastore.NewMapDatastore() - fs, err := NewDSBackend(ds) - require.NoError(t, err) - - addr, err := fs.NewAddress(address.SECP256K1) - require.NoError(t, err) - return fs, addr -} - -// Signature is over the data being verified and was signed by the verifying -// address. Everything should work out ok. -func TestSignatureOk(t *testing.T) { - tf.UnitTest(t) - - fs, addr := requireSignerAddr(t) - - data := []byte("THESE BYTES WILL BE SIGNED") - sig, err := fs.SignBytes(data, addr) - require.NoError(t, err) - - assert.NoError(t, crypto.ValidateSignature(data, addr, sig)) -} - -// Signature is nil. -func TestNilSignature(t *testing.T) { - tf.UnitTest(t) - - _, addr := requireSignerAddr(t) - - data := []byte("THESE BYTES NEED A SIGNATURE") - assert.Error(t, crypto.ValidateSignature(data, addr, crypto.Signature{})) -} - -// Signature is over different data. -func TestDataCorrupted(t *testing.T) { - tf.UnitTest(t) - - fs, addr := requireSignerAddr(t) - - data := []byte("THESE BYTES ARE SIGNED") - sig, err := fs.SignBytes(data, addr) - require.NoError(t, err) - - corruptData := []byte("THESE BYTEZ ARE SIGNED") - - assert.Error(t, crypto.ValidateSignature(corruptData, addr, sig)) -} - -// Signature is valid for data but was signed by a different address. -func TestInvalidAddress(t *testing.T) { - tf.UnitTest(t) - - fs, addr := requireSignerAddr(t) - - data := []byte("THESE BYTES ARE SIGNED") - sig, err := fs.SignBytes(data, addr) - require.NoError(t, err) - - badAddr, err := fs.NewAddress(address.SECP256K1) - require.NoError(t, err) - - assert.Error(t, crypto.ValidateSignature(data, badAddr, sig)) -} - -// Signature is corrupted. -func TestSignatureCorrupted(t *testing.T) { - tf.UnitTest(t) - - fs, addr := requireSignerAddr(t) - - data := []byte("THESE BYTES ARE SIGNED") - sig, err := fs.SignBytes(data, addr) - require.NoError(t, err) - sig.Data[0] = sig.Data[0] ^ 0xFF // This operation ensures sig is modified - - assert.Error(t, crypto.ValidateSignature(data, addr, sig)) -} diff --git a/internal/pkg/wallet/wallet.go b/internal/pkg/wallet/wallet.go deleted file mode 100644 index f2c9e701fb..0000000000 --- a/internal/pkg/wallet/wallet.go +++ /dev/null @@ -1,193 +0,0 @@ -package wallet - -import ( - "bytes" - "fmt" - "reflect" - "sort" - "sync" - - "github.com/filecoin-project/go-address" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" -) - -// Wallet manages the locally stored addresses. -type Wallet struct { - lk sync.Mutex - - backends map[reflect.Type][]Backend -} - -// New constructs a new wallet, that manages addresses in all the -// passed in backends. -func New(backends ...Backend) *Wallet { - backendsMap := make(map[reflect.Type][]Backend) - - for _, backend := range backends { - kind := reflect.TypeOf(backend) - backendsMap[kind] = append(backendsMap[kind], backend) - } - - return &Wallet{ - backends: backendsMap, - } -} - -// HasAddress checks if the given address is stored. -// Safe for concurrent access. -func (w *Wallet) HasAddress(a address.Address) bool { - _, err := w.Find(a) - return err == nil -} - -// Find searches through all backends and returns the one storing the passed -// in address. -// Safe for concurrent access. -func (w *Wallet) Find(addr address.Address) (Backend, error) { - w.lk.Lock() - defer w.lk.Unlock() - - for _, backends := range w.backends { - for _, backend := range backends { - if backend.HasAddress(addr) { - return backend, nil - } - } - } - - return nil, fmt.Errorf("wallet has no address %s", addr) -} - -// Addresses retrieves all stored addresses. -// Safe for concurrent access. -// Always sorted in the same order. -func (w *Wallet) Addresses() []address.Address { - w.lk.Lock() - defer w.lk.Unlock() - - var out []address.Address - for _, backends := range w.backends { - for _, backend := range backends { - out = append(out, backend.Addresses()...) - } - } - sort.Slice(out, func(i, j int) bool { - return bytes.Compare(out[i].Bytes(), out[j].Bytes()) < 0 - }) - - return out -} - -// Backends returns backends by their kind. -func (w *Wallet) Backends(kind reflect.Type) []Backend { - w.lk.Lock() - defer w.lk.Unlock() - - cpy := make([]Backend, len(w.backends[kind])) - copy(cpy, w.backends[kind]) - return cpy -} - -// SignBytes cryptographically signs `data` using the private key corresponding to -// address `addr` -func (w *Wallet) SignBytes(data []byte, addr address.Address) (crypto.Signature, error) { - // Check that we are storing the address to sign for. - backend, err := w.Find(addr) - if err != nil { - return crypto.Signature{}, errors.Wrapf(err, "could not find address: %s", addr) - } - return backend.SignBytes(data, addr) -} - -// NewAddress creates a new account address on the default wallet backend. -func NewAddress(w *Wallet, p address.Protocol) (address.Address, error) { - backends := w.Backends(DSBackendType) - if len(backends) == 0 { - return address.Undef, fmt.Errorf("missing default ds backend") - } - - backend := (backends[0]).(*DSBackend) - return backend.NewAddress(p) -} - -// GetPubKeyForAddress returns the public key in the keystore associated with -// the given address. -func (w *Wallet) GetPubKeyForAddress(addr address.Address) ([]byte, error) { - info, err := w.keyInfoForAddr(addr) - if err != nil { - return nil, err - } - - return info.PublicKey(), nil -} - -// NewKeyInfo creates a new KeyInfo struct in the wallet backend and returns it -func (w *Wallet) NewKeyInfo() (*crypto.KeyInfo, error) { - newAddr, err := NewAddress(w, address.SECP256K1) - if err != nil { - return &crypto.KeyInfo{}, err - } - - return w.keyInfoForAddr(newAddr) -} - -func (w *Wallet) keyInfoForAddr(addr address.Address) (*crypto.KeyInfo, error) { - backend, err := w.Find(addr) - if err != nil { - return &crypto.KeyInfo{}, err - } - - info, err := backend.GetKeyInfo(addr) - if err != nil { - return &crypto.KeyInfo{}, err - } - return info, nil -} - -// Import adds the given keyinfos to the wallet -func (w *Wallet) Import(kinfos ...*crypto.KeyInfo) ([]address.Address, error) { - dsb := w.Backends(DSBackendType) - if len(dsb) != 1 { - return nil, fmt.Errorf("expected exactly one datastore wallet backend") - } - - imp, ok := dsb[0].(Importer) - if !ok { - return nil, fmt.Errorf("datastore backend wallets should implement importer") - } - - var out []address.Address - for _, ki := range kinfos { - if err := imp.ImportKey(ki); err != nil { - return nil, err - } - - a, err := ki.Address() - if err != nil { - return nil, err - } - out = append(out, a) - } - return out, nil -} - -// Export returns the KeyInfos for the given wallet addresses -func (w *Wallet) Export(addrs []address.Address) ([]*crypto.KeyInfo, error) { - out := make([]*crypto.KeyInfo, len(addrs)) - for i, addr := range addrs { - bck, err := w.Find(addr) - if err != nil { - return nil, err - } - - ki, err := bck.GetKeyInfo(addr) - if err != nil { - return nil, err - } - out[i] = ki - } - - return out, nil -} diff --git a/internal/pkg/wallet/wallet_test.go b/internal/pkg/wallet/wallet_test.go deleted file mode 100644 index e8d67be55f..0000000000 --- a/internal/pkg/wallet/wallet_test.go +++ /dev/null @@ -1,203 +0,0 @@ -package wallet_test - -import ( - "bytes" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-datastore" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - bls "github.com/filecoin-project/filecoin-ffi" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - vmaddr "github.com/filecoin-project/go-filecoin/internal/pkg/vm/address" - "github.com/filecoin-project/go-filecoin/internal/pkg/wallet" -) - -func TestWalletSimple(t *testing.T) { - tf.UnitTest(t) - - t.Log("create a backend") - ds := datastore.NewMapDatastore() - fs, err := wallet.NewDSBackend(ds) - assert.NoError(t, err) - - t.Log("create a wallet with a single backend") - w := wallet.New(fs) - - t.Log("check backends") - assert.Len(t, w.Backends(wallet.DSBackendType), 1) - - t.Log("create a new address in the backend") - addr, err := fs.NewAddress(address.SECP256K1) - assert.NoError(t, err) - - t.Log("test HasAddress") - assert.True(t, w.HasAddress(addr)) - - t.Log("find backend") - backend, err := w.Find(addr) - assert.NoError(t, err) - assert.Equal(t, fs, backend) - - t.Log("find unknown address") - randomAddr := vmaddr.NewForTestGetter()() - - assert.False(t, w.HasAddress(randomAddr)) - - t.Log("list all addresses") - list := w.Addresses() - assert.Len(t, list, 1) - assert.Equal(t, list[0], addr) - - t.Log("addresses are sorted") - addr2, err := fs.NewAddress(address.SECP256K1) - assert.NoError(t, err) - - if bytes.Compare(addr2.Bytes(), addr.Bytes()) < 0 { - addr, addr2 = addr2, addr - } - for i := 0; i < 16; i++ { - list := w.Addresses() - assert.Len(t, list, 2) - assert.Equal(t, list[0], addr) - assert.Equal(t, list[1], addr2) - } -} - -func TestWalletBLSKeys(t *testing.T) { - tf.UnitTest(t) - - ds := datastore.NewMapDatastore() - wb, err := wallet.NewDSBackend(ds) - require.NoError(t, err) - w := wallet.New(wb) - - addr, err := wallet.NewAddress(w, address.BLS) - require.NoError(t, err) - - data := []byte("data to be signed") - sig, err := w.SignBytes(data, addr) - require.NoError(t, err) - - t.Run("address is BLS protocol", func(t *testing.T) { - assert.Equal(t, address.BLS, addr.Protocol()) - }) - - t.Run("key uses BLS cryptography", func(t *testing.T) { - ki, err := wb.GetKeyInfo(addr) - require.NoError(t, err) - assert.Equal(t, crypto.SigTypeBLS, ki.SigType) - }) - - t.Run("valid signatures verify", func(t *testing.T) { - err := crypto.ValidateSignature(data, addr, sig) - assert.NoError(t, err) - }) - - t.Run("invalid signatures do not verify", func(t *testing.T) { - notTheData := []byte("not the data") - err := crypto.ValidateSignature(notTheData, addr, sig) - assert.Error(t, err) - - notTheSig := crypto.Signature{ - Type: crypto.SigTypeBLS, - Data: make([]byte, bls.SignatureBytes), - } - copy(notTheSig.Data[:], "not the sig") - err = crypto.ValidateSignature(data, addr, notTheSig) - assert.Error(t, err) - }) -} - -func TestSimpleSignAndVerify(t *testing.T) { - tf.UnitTest(t) - - t.Log("create a backend") - ds := datastore.NewMapDatastore() - fs, err := wallet.NewDSBackend(ds) - assert.NoError(t, err) - - t.Log("create a wallet with a single backend") - w := wallet.New(fs) - - t.Log("check backends") - assert.Len(t, w.Backends(wallet.DSBackendType), 1) - - t.Log("create a new address in the backend") - addr, err := fs.NewAddress(address.SECP256K1) - assert.NoError(t, err) - - t.Log("test HasAddress") - assert.True(t, w.HasAddress(addr)) - - t.Log("find backend") - backend, err := w.Find(addr) - assert.NoError(t, err) - assert.Equal(t, fs, backend) - - // data to sign - dataA := []byte("THIS IS A SIGNED SLICE OF DATA") - t.Log("sign content") - sig, err := w.SignBytes(dataA, addr) - assert.NoError(t, err) - - t.Log("verify signed content") - err = crypto.ValidateSignature(dataA, addr, sig) - assert.NoError(t, err) - - // data that is unsigned - dataB := []byte("I AM UNSIGNED DATA!") - t.Log("verify fails for unsigned content") - err = crypto.ValidateSignature(dataB, addr, sig) - assert.Error(t, err) -} - -func TestSignErrorCases(t *testing.T) { - tf.UnitTest(t) - - t.Log("create 2 backends") - ds1 := datastore.NewMapDatastore() - fs1, err := wallet.NewDSBackend(ds1) - assert.NoError(t, err) - - ds2 := datastore.NewMapDatastore() - fs2, err := wallet.NewDSBackend(ds2) - assert.NoError(t, err) - - t.Log("create 2 wallets each with a backend") - w1 := wallet.New(fs1) - w2 := wallet.New(fs2) - - t.Log("check backends") - assert.Len(t, w1.Backends(wallet.DSBackendType), 1) - assert.Len(t, w2.Backends(wallet.DSBackendType), 1) - - t.Log("create a new address each backend") - addr1, err := fs1.NewAddress(address.SECP256K1) - assert.NoError(t, err) - addr2, err := fs2.NewAddress(address.SECP256K1) - assert.NoError(t, err) - - t.Log("test HasAddress") - assert.True(t, w1.HasAddress(addr1)) - assert.False(t, w1.HasAddress(addr2)) - - t.Log("find backends") - backend1, err := w1.Find(addr1) - assert.NoError(t, err) - assert.Equal(t, fs1, backend1) - - t.Log("find backend fails for unknown address") - _, err = w1.Find(addr2) - assert.Error(t, err) - - // data to sign - dataA := []byte("Set tab width to '1' and make everyone happy") - t.Log("sign content") - _, err = w1.SignBytes(dataA, addr2) - assert.Error(t, err) - assert.Contains(t, err.Error(), "could not find address:") -} diff --git a/main.go b/main.go index f1f853efd2..df580a708e 100644 --- a/main.go +++ b/main.go @@ -2,42 +2,41 @@ package main import ( "context" + _ "net/http/pprof" "os" + "github.com/filecoin-project/venus/cmd" logging "github.com/ipfs/go-log/v2" - - "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" ) func main() { - // set default log level if no flags given - var level logging.LogLevel - var err error lvl := os.Getenv("GO_FILECOIN_LOG_LEVEL") if lvl == "" { - level = logging.LevelInfo + logging.SetAllLoggers(logging.LevelInfo) + _ = logging.SetLogLevel("beacon", "error") + _ = logging.SetLogLevel("peer-tracker", "error") + _ = logging.SetLogLevel("dht", "error") + _ = logging.SetLogLevel("bitswap", "error") + _ = logging.SetLogLevel("graphsync", "info") + _ = logging.SetLogLevel("heartbeat", "error") + _ = logging.SetLogLevel("dagservice", "error") + _ = logging.SetLogLevel("peerqueue", "error") + _ = logging.SetLogLevel("swarm", "error") + _ = logging.SetLogLevel("swarm2", "error") + _ = logging.SetLogLevel("basichost", "error") + _ = logging.SetLogLevel("dht_net", "error") + _ = logging.SetLogLevel("pubsub", "error") + _ = logging.SetLogLevel("relay", "error") + _ = logging.SetLogLevel("dht/RtRefreshManager", "error") } else { - level, err = logging.LevelFromString(lvl) + level, err := logging.LevelFromString(lvl) if err != nil { level = logging.LevelInfo } + logging.SetAllLoggers(level) } - logging.SetAllLoggers(level) - logging.SetLogLevel("dht", "error") // nolint: errcheck - logging.SetLogLevel("bitswap", "error") // nolint: errcheck - logging.SetLogLevel("graphsync", "info") // nolint: errcheck - logging.SetLogLevel("heartbeat", "error") // nolint: errcheck - logging.SetLogLevel("blockservice", "error") // nolint: errcheck - logging.SetLogLevel("peerqueue", "error") // nolint: errcheck - logging.SetLogLevel("swarm", "error") // nolint: errcheck - logging.SetLogLevel("swarm2", "error") // nolint: errcheck - logging.SetLogLevel("basichost", "error") // nolint: errcheck - logging.SetLogLevel("dht_net", "error") // nolint: errcheck - logging.SetLogLevel("pubsub", "error") // nolint: errcheck - logging.SetLogLevel("relay", "error") // nolint: errcheck - - code, _ := commands.Run(context.Background(), os.Args, os.Stdin, os.Stdout, os.Stderr) + code, _ := cmd.Run(context.Background(), os.Args, os.Stdin, os.Stdout, os.Stderr) os.Exit(code) } diff --git a/networking.md b/networking.md index 52def6c192..a6d610899d 100644 --- a/networking.md +++ b/networking.md @@ -45,7 +45,7 @@ a. we find the peer; highly unlikely scenario, as the chance is 1/2^256 with our b. we yield because a timer runs out; the most probable scenario. This is a healthy timeout to timebox discovery iterations. Throughout this process, the libp2p stack generates `CONNECTED` events for every new connection we establish to a peer, -for which `go-filecoin` registers a callback that triggers the Filecoin `HELLO` protocol negotiation. +for which `venus` registers a callback that triggers the Filecoin `HELLO` protocol negotiation. If the other party responds positively, chain sync with that peer begins. A few relevant aspects to note: diff --git a/parameters.json b/parameters.json deleted file mode 100644 index a47c9227e4..0000000000 --- a/parameters.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0170db1f394b35d995252228ee359194b13199d259380541dc529fb0099096b0.params": { - "cid": "QmYkygifkXnrnsN4MJsjBFHTQJHx294CyikDgDK8nYxdGh", - "digest": "df3f30442a6d6b4192f5071fb17e820c", - "sector_size": 2048 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0170db1f394b35d995252228ee359194b13199d259380541dc529fb0099096b0.vk": { - "cid": "QmdXyqbmy2bkJA9Kyhh6z25GrTCq48LwX6c1mxPsm54wi7", - "digest": "0bea3951abf9557a3569f68e52a30c6c", - "sector_size": 2048 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0cfb4f178bbb71cf2ecfcd42accce558b27199ab4fb59cb78f2483fe21ef36d9.params": { - "cid": "Qmf5XZZtP5VcYTf65MbKjLVabcS6cYMbr2rFShmfJzh5e5", - "digest": "655e6277638edc8c658094f6f0b33d54", - "sector_size": 536870912 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-0cfb4f178bbb71cf2ecfcd42accce558b27199ab4fb59cb78f2483fe21ef36d9.vk": { - "cid": "QmPuhdWnAXBks43emnkqi9FQzyU1gASKyz23zrD27BPGs8", - "digest": "57690e3a6a94c3f704802a674b34f36b", - "sector_size": 536870912 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-3ea05428c9d11689f23529cde32fd30aabd50f7d2c93657c1d3650bca3e8ea9e.params": { - "cid": "QmPNVgTN7N5vDtD5u7ERMTLcvUtrKRBfYVUDr6uW3pKhX7", - "digest": "3d390654f58e603b896ac70c653f5676", - "sector_size": 2048 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-3ea05428c9d11689f23529cde32fd30aabd50f7d2c93657c1d3650bca3e8ea9e.vk": { - "cid": "Qmbj61Zez7v5xA7nSCnmWbyLYznWJDWeusz7Yg8EcgVdoN", - "digest": "8c170a164743c39576a7f47a1b51e6f3", - "sector_size": 2048 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-50c7368dea9593ed0989e70974d28024efa9d156d585b7eea1be22b2e753f331.params": { - "cid": "QmRApb8RZoBK3cqicT7V3ydXg8yVvqPFMPrQNXP33aBihp", - "digest": "b1b58ff9a297b82885e8a7dfb035f83c", - "sector_size": 8388608 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-50c7368dea9593ed0989e70974d28024efa9d156d585b7eea1be22b2e753f331.vk": { - "cid": "QmcytF1dTdqMFoyXi931j1RgmGtLfR9LLLaBznRt1tPQyD", - "digest": "1a09e00c641f192f55af3433a028f050", - "sector_size": 8388608 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-5294475db5237a2e83c3e52fd6c2b03859a1831d45ed08c4f35dbf9a803165a9.params": { - "cid": "QmPvr54tWaVeP4WnekivzUAJitTqsQfvikBvAHNEaDNQSw", - "digest": "9380e41368ed4083dbc922b290d3b786", - "sector_size": 8388608 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-5294475db5237a2e83c3e52fd6c2b03859a1831d45ed08c4f35dbf9a803165a9.vk": { - "cid": "QmXyVLVDRCcxA9SjT7PeK8HFtyxZ2ZH3SHa8KoGLw8VGJt", - "digest": "f0731a7e20f90704bd38fc5d27882f6d", - "sector_size": 8388608 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-7d739b8cf60f1b0709eeebee7730e297683552e4b69cab6984ec0285663c5781.params": { - "cid": "Qmf5f6ko3dqj7qauzXpZqxM9B2x2sL977K6gE2ppNwuJPv", - "digest": "273ebb8c896326b7c292bee8b775fd38", - "sector_size": 536870912 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-0-0-7d739b8cf60f1b0709eeebee7730e297683552e4b69cab6984ec0285663c5781.vk": { - "cid": "QmfP3MQe8koW63n5MkDENENVHxib78MJYYyZvbneCsuze8", - "digest": "3dd94da9da64e51b3445bc528d84e76d", - "sector_size": 536870912 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-0377ded656c6f524f1618760bffe4e0a1c51d5a70c4509eedae8a27555733edc.params": { - "cid": "QmYEeeCE8uT2bsVkxcqqUYeMmMEbe6rfmo8wQCv7jFHqqm", - "digest": "c947f2021304ed43b7216f7a8436e294", - "sector_size": 34359738368 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-0377ded656c6f524f1618760bffe4e0a1c51d5a70c4509eedae8a27555733edc.vk": { - "cid": "QmXB63ExriFjB4ywWnXTnFwCcLFfCeEP3h15qtL5i7F4aX", - "digest": "ab20d7b253e7e9a0d2ccdf7599ec8ec3", - "sector_size": 34359738368 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-559e581f022bb4e4ec6e719e563bf0e026ad6de42e56c18714a2c692b1b88d7e.params": { - "cid": "QmW5Yxg3L1NSzuQVcRMHMbG3uvVoi4dTLzVaDpnEUPQpnA", - "digest": "079ba19645828ae42b22b0e3f4866e8d", - "sector_size": 34359738368 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-0-559e581f022bb4e4ec6e719e563bf0e026ad6de42e56c18714a2c692b1b88d7e.vk": { - "cid": "QmQzZ5dJ11tcSBees38WX41tZLXS9BqpEti253m5QcnTNs", - "digest": "c76125a50a7de315165de359b5174ae4", - "sector_size": 34359738368 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-2627e4006b67f99cef990c0a47d5426cb7ab0a0ad58fc1061547bf2d28b09def.params": { - "cid": "QmNk3wga1tS53FUu1QnkK8ehWA2cqpCnSEAPv3KLxdJxNa", - "digest": "421e4790c0b80e0107a7ff67acf14084", - "sector_size": 68719476736 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-2627e4006b67f99cef990c0a47d5426cb7ab0a0ad58fc1061547bf2d28b09def.vk": { - "cid": "QmVQCHGsrUtbn9RjHs1e6GXfeXDW5m9w4ge48PSX3Z2as2", - "digest": "8b60e9cc1470a6729c687d6cf0a1f79c", - "sector_size": 68719476736 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-b62098629d07946e9028127e70295ed996fe3ed25b0f9f88eb610a0ab4385a3c.params": { - "cid": "QmTL3VvydaMFWKvE5VzxjgKsJYgL9JMM4JVYNtQxdj9JK1", - "digest": "2685f31124b22ea6b2857e5a5e87ffa3", - "sector_size": 68719476736 - }, - "v26-proof-of-spacetime-fallback-merkletree-poseidon_hasher-8-8-2-b62098629d07946e9028127e70295ed996fe3ed25b0f9f88eb610a0ab4385a3c.vk": { - "cid": "QmSVWbLqQYbUbbJyfsRMzEib2rfSqMtnPks1Nw22omcBQm", - "digest": "efe703cd2839597c7ca5c2a906b74296", - "sector_size": 68719476736 - }, - "v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-032d3138d22506ec0082ed72b2dcba18df18477904e35bafee82b3793b06832f.params": { - "cid": "QmU9dH31nZZUJnsogR4Ld4ySUcH6wm2RgmGiujwnqtbU6k", - "digest": "fcef8e87ae2afd7a28aae44347b804cf", - "sector_size": 2048 - }, - "v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-032d3138d22506ec0082ed72b2dcba18df18477904e35bafee82b3793b06832f.vk": { - "cid": "QmdJ15DMGPooye5NaPcRfXUdHUDibcN7hKjbmTGuu1K4AQ", - "digest": "2ee2b3518229680db15161d4f582af37", - "sector_size": 2048 - }, - "v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-6babf46ce344ae495d558e7770a585b2382d54f225af8ed0397b8be7c3fcd472.params": { - "cid": "QmZgtxcY3tMXXQxZTA7ZTUDXLVUnfxNcerXgeW4gG2NnfP", - "digest": "3273c7135cb75684248b475781b738ee", - "sector_size": 536870912 - }, - "v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-6babf46ce344ae495d558e7770a585b2382d54f225af8ed0397b8be7c3fcd472.vk": { - "cid": "QmSS6ZkAV2aGZcgKgdPpEEgihXF1ryZX8PSAZDWSoeL1d4", - "digest": "1519b5f61d9044a59f2bdc57537c094b", - "sector_size": 536870912 - }, - "v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-ecd683648512ab1765faa2a5f14bab48f676e633467f0aa8aad4b55dcb0652bb.params": { - "cid": "QmQBGXeiNn6hVwbR6qFarQqiNGDdKk4h9ucfyvcXyfYz2N", - "digest": "7d5f896f435c38e93bcda6dd168d860b", - "sector_size": 8388608 - }, - "v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-0-0-sha256_hasher-ecd683648512ab1765faa2a5f14bab48f676e633467f0aa8aad4b55dcb0652bb.vk": { - "cid": "QmPrZgBVGMckEAeu5eSJnLmiAwcPQjKjZe5ir6VaQ5AxKs", - "digest": "fe6d2de44580a0db5a4934688899b92f", - "sector_size": 8388608 - }, - "v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-0-sha256_hasher-82a357d2f2ca81dc61bb45f4a762807aedee1b0a53fd6c4e77b46a01bfef7820.params": { - "cid": "QmZL2cq45XJn5BFzagAZwgFmLrcM1W6CXoiEF9C5j5tjEF", - "digest": "acdfed9f0512bc85a01a9fb871d475d5", - "sector_size": 34359738368 - }, - "v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-0-sha256_hasher-82a357d2f2ca81dc61bb45f4a762807aedee1b0a53fd6c4e77b46a01bfef7820.vk": { - "cid": "QmQ4zB7nNa1tDYNifBkExRnZtwtxZw775iaqvVsZyRi6Q2", - "digest": "524a2f3e9d6826593caebc41bb545c40", - "sector_size": 34359738368 - }, - "v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-2-sha256_hasher-96f1b4a04c5c51e4759bbf224bbc2ef5a42c7100f16ec0637123f16a845ddfb2.params": { - "cid": "QmY7DitNKXFeLQt9QoVQkfjM1EvRnprqUVxjmkTXkHDNka", - "digest": "f27271c0537ba65ade2ec045f8fbd069", - "sector_size": 68719476736 - }, - "v26-stacked-proof-of-replication-merkletree-poseidon_hasher-8-8-2-sha256_hasher-96f1b4a04c5c51e4759bbf224bbc2ef5a42c7100f16ec0637123f16a845ddfb2.vk": { - "cid": "QmUJsvoCuQ4LszPmeRVAkMYb5qY95ctz3UXKhu8xLzyFKo", - "digest": "576b292938c6c9d0a0e721bd867a543b", - "sector_size": 68719476736 - } -} diff --git a/pkg/beacon/beacon.go b/pkg/beacon/beacon.go new file mode 100644 index 0000000000..7b0b6df551 --- /dev/null +++ b/pkg/beacon/beacon.go @@ -0,0 +1,149 @@ +package beacon + +import ( + "context" + "time" + + "github.com/filecoin-project/go-state-types/abi" + types "github.com/filecoin-project/venus/venus-shared/chain" + logging "github.com/ipfs/go-log" + "golang.org/x/xerrors" +) + +var log = logging.Logger("beacon") + +type Response struct { + Entry types.BeaconEntry + Err error +} + +type BeaconPoint struct { //nolint + Start abi.ChainEpoch + Beacon RandomBeacon +} + +// RandomBeacon represents a system that provides randomness to Lotus. +// Other components interrogate the RandomBeacon to acquire randomness that's +// valid for a specific chain epoch. Also to verify beacon entries that have +// been posted on chain. +type RandomBeacon interface { + Entry(context.Context, uint64) <-chan Response + VerifyEntry(types.BeaconEntry, types.BeaconEntry) error + MaxBeaconRoundForEpoch(abi.ChainEpoch) uint64 +} + +// ValidateBlockValues Verify that the beacon in the block header is correct, first get beacon server at block epoch and parent block epoch in schedule. +// if paraent beacon is the same beacon server. value beacon normally but if not equal, means that the pre entry in another beacon chain, so just validate +// beacon value in current block header. the first values is parent beacon the the second value is current beacon. +func ValidateBlockValues(bSchedule Schedule, h *types.BlockHeader, parentEpoch abi.ChainEpoch, prevEntry *types.BeaconEntry) error { + { + parentBeacon := bSchedule.BeaconForEpoch(parentEpoch) + currBeacon := bSchedule.BeaconForEpoch(h.Height) + if parentBeacon != currBeacon { + if len(h.BeaconEntries) != 2 { + return xerrors.Errorf("expected two beacon entries at beacon fork, got %d", len(h.BeaconEntries)) + } + err := currBeacon.VerifyEntry(h.BeaconEntries[1], h.BeaconEntries[0]) + if err != nil { + return xerrors.Errorf("beacon at fork point invalid: (%v, %v): %w", + h.BeaconEntries[1], h.BeaconEntries[0], err) + } + return nil + } + } + + // TODO: fork logic + b := bSchedule.BeaconForEpoch(h.Height) + maxRound := b.MaxBeaconRoundForEpoch(h.Height) + if maxRound == prevEntry.Round { + if len(h.BeaconEntries) != 0 { + return xerrors.Errorf("expected not to have any beacon entries in this block, got %d", len(h.BeaconEntries)) + } + return nil + } + + if len(h.BeaconEntries) == 0 { + return xerrors.Errorf("expected to have beacon entries in this block, but didn't find any") + } + + last := h.BeaconEntries[len(h.BeaconEntries)-1] + if last.Round != maxRound { + return xerrors.Errorf("expected final beacon entry in block to be at round %d, got %d", maxRound, last.Round) + } + + for i, e := range h.BeaconEntries { + if err := b.VerifyEntry(e, *prevEntry); err != nil { + return xerrors.Errorf("beacon entry %d (%d - %x (%d)) was invalid: %w", i, e.Round, e.Data, len(e.Data), err) + } + prevEntry = &h.BeaconEntries[i] + + } + + return nil +} + +func BeaconEntriesForBlock(ctx context.Context, bSchedule Schedule, epoch abi.ChainEpoch, parentEpoch abi.ChainEpoch, prev types.BeaconEntry) ([]types.BeaconEntry, error) { //nolint + { + parentBeacon := bSchedule.BeaconForEpoch(parentEpoch) + currBeacon := bSchedule.BeaconForEpoch(epoch) + if parentBeacon != currBeacon { + // Fork logic + round := currBeacon.MaxBeaconRoundForEpoch(epoch) + out := make([]types.BeaconEntry, 2) + rch := currBeacon.Entry(ctx, round-1) + res := <-rch + if res.Err != nil { + return nil, xerrors.Errorf("getting entry %d returned error: %w", round-1, res.Err) + } + out[0] = res.Entry + rch = currBeacon.Entry(ctx, round) + res = <-rch + if res.Err != nil { + return nil, xerrors.Errorf("getting entry %d returned error: %w", round, res.Err) + } + out[1] = res.Entry + return out, nil + } + } + + beacon := bSchedule.BeaconForEpoch(epoch) + + start := time.Now() + + maxRound := beacon.MaxBeaconRoundForEpoch(epoch) + if maxRound == prev.Round { + return nil, nil + } + + // TODO: this is a sketchy way to handle the genesis block not having a beacon entry + if prev.Round == 0 { + prev.Round = maxRound - 1 + } + + cur := maxRound + var out []types.BeaconEntry + for cur > prev.Round { + rch := beacon.Entry(ctx, cur) + select { + case resp := <-rch: + if resp.Err != nil { + return nil, xerrors.Errorf("beacon entry request returned error: %w", resp.Err) + } + + out = append(out, resp.Entry) + cur = resp.Entry.Round - 1 + case <-ctx.Done(): + return nil, xerrors.Errorf("context timed out waiting on beacon entry to come back for epoch %d: %w", epoch, ctx.Err()) + } + } + + log.Debugw("fetching beacon entries", "took", time.Since(start), "numEntries", len(out)) + reverse(out) + return out, nil +} + +func reverse(arr []types.BeaconEntry) { + for i := 0; i < len(arr)/2; i++ { + arr[i], arr[len(arr)-(1+i)] = arr[len(arr)-(1+i)], arr[i] + } +} diff --git a/pkg/beacon/drand.go b/pkg/beacon/drand.go new file mode 100644 index 0000000000..ce28fc08a3 --- /dev/null +++ b/pkg/beacon/drand.go @@ -0,0 +1,180 @@ +package beacon + +import ( + "bytes" + "context" + "time" + + dchain "github.com/drand/drand/chain" + dclient "github.com/drand/drand/client" + hclient "github.com/drand/drand/client/http" + dlog "github.com/drand/drand/log" + "github.com/drand/kyber" + kzap "github.com/go-kit/kit/log/zap" + lru "github.com/hashicorp/golang-lru" + "go.uber.org/zap/zapcore" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + cfg "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// DrandBeacon connects Lotus with a drand network in order to provide +// randomness to the system in a way that's aligned with Filecoin rounds/epochs. +// +// We connect to drand peers via their public HTTP endpoints. The peers are +// enumerated in the drandServers variable. +// +// The root trust for the Drand chain is configured from build.DrandChain. +type DrandBeacon struct { + client dclient.Client + + pubkey kyber.Point + + // seconds + interval time.Duration + + drandGenTime uint64 + filGenTime uint64 + filRoundTime uint64 + + localCache *lru.Cache +} + +// DrandHTTPClient interface overrides the user agent used by drand +type DrandHTTPClient interface { + SetUserAgent(string) +} + +//NewDrandBeacon create new beacon client from config, genesis block time and block delay +func NewDrandBeacon(genTimeStamp, interval uint64, config cfg.DrandConf) (*DrandBeacon, error) { + drandChain, err := dchain.InfoFromJSON(bytes.NewReader([]byte(config.ChainInfoJSON))) + if err != nil { + return nil, xerrors.Errorf("unable to unmarshal drand chain info: %w", err) + } + + dlogger := dlog.NewKitLoggerFrom(kzap.NewZapSugarLogger( + log.SugaredLogger.Desugar(), zapcore.InfoLevel)) + + var clients []dclient.Client + for _, url := range config.Servers { + hc, err := hclient.NewWithInfo(url, drandChain, nil) + if err != nil { + return nil, xerrors.Errorf("could not create http drand client: %w", err) + } + hc.(DrandHTTPClient).SetUserAgent("drand-client-lotus/" + constants.BuildVersion) + clients = append(clients, hc) + + } + + opts := []dclient.Option{ + dclient.WithChainInfo(drandChain), + dclient.WithCacheSize(1024), + dclient.WithLogger(dlogger), + } + + log.Info("drand beacon without pubsub") + + client, err := dclient.Wrap(clients, opts...) + if err != nil { + return nil, xerrors.Errorf("creating drand client: %v", err) + } + + lc, err := lru.New(1024) + if err != nil { + return nil, err + } + + db := &DrandBeacon{ + client: client, + localCache: lc, + } + + db.pubkey = drandChain.PublicKey + db.interval = drandChain.Period + db.drandGenTime = uint64(drandChain.GenesisTime) + db.filRoundTime = interval + db.filGenTime = genTimeStamp + + return db, nil +} + +//Entry get a beacon value of specify block height, +func (db *DrandBeacon) Entry(ctx context.Context, round uint64) <-chan Response { + out := make(chan Response, 1) + if round != 0 { + be := db.getCachedValue(round) + if be != nil { + out <- Response{Entry: *be} + close(out) + return out + } + } + + go func() { + start := time.Now() + log.Infow("start fetching randomness", "round", round) + resp, err := db.client.Get(ctx, round) + + var br Response + if err != nil { + br.Err = xerrors.Errorf("drand failed Get request: %w", err) + } else { + br.Entry.Round = resp.Round() + br.Entry.Data = resp.Signature() + } + log.Infow("done fetching randomness", "round", round, "took", time.Since(start)) + out <- br + close(out) + }() + + return out +} +func (db *DrandBeacon) cacheValue(e types.BeaconEntry) { + db.localCache.Add(e.Round, e) +} + +func (db *DrandBeacon) getCachedValue(round uint64) *types.BeaconEntry { + v, ok := db.localCache.Get(round) + if !ok { + return nil + } + e, _ := v.(types.BeaconEntry) + return &e +} + +func (db *DrandBeacon) VerifyEntry(curr types.BeaconEntry, prev types.BeaconEntry) error { + if prev.Round == 0 { + // TODO handle genesis better + return nil + } + if be := db.getCachedValue(curr.Round); be != nil { + if !bytes.Equal(curr.Data, be.Data) { + return xerrors.New("invalid beacon value, does not match cached good value") + } + // return no error if the value is in the cache already + return nil + } + b := &dchain.Beacon{ + PreviousSig: prev.Data, + Round: curr.Round, + Signature: curr.Data, + } + err := dchain.VerifyBeacon(db.pubkey, b) + if err == nil { + db.cacheValue(curr) + } + return err +} + +// MaxBeaconRoundForEpoch get the turn of beacon chain corresponding to chain height +func (db *DrandBeacon) MaxBeaconRoundForEpoch(filEpoch abi.ChainEpoch) uint64 { + // TODO: sometimes the genesis time for filecoin is zero and this goes negative + latestTS := ((uint64(filEpoch) * db.filRoundTime) + db.filGenTime) - db.filRoundTime + dround := (latestTS - db.drandGenTime) / uint64(db.interval.Seconds()) + return dround +} + +var _ RandomBeacon = (*DrandBeacon)(nil) diff --git a/pkg/beacon/mock.go b/pkg/beacon/mock.go new file mode 100644 index 0000000000..4187c1400b --- /dev/null +++ b/pkg/beacon/mock.go @@ -0,0 +1,68 @@ +package beacon + +import ( + "bytes" + "context" + "encoding/binary" + "time" + + "github.com/filecoin-project/go-state-types/abi" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/minio/blake2b-simd" + "golang.org/x/xerrors" +) + +// Mock beacon assumes that filecoin rounds are 1:1 mapped with the beacon rounds +type mockBeacon struct { + interval time.Duration +} + +func NewMockBeacon(interval time.Duration) RandomBeacon { + mb := &mockBeacon{interval: interval} + + return mb +} + +func NewMockSchedule(interval time.Duration) Schedule { + return []BeaconPoint{{ + Start: abi.ChainEpoch(0), + Beacon: NewMockBeacon(interval), + }} +} + +func (mb *mockBeacon) RoundTime() time.Duration { + return mb.interval +} + +func (mb *mockBeacon) entryForIndex(index uint64) types.BeaconEntry { + buf := make([]byte, 8) + binary.BigEndian.PutUint64(buf, index) + rval := blake2b.Sum256(buf) + return types.BeaconEntry{ + Round: index, + Data: rval[:], + } +} + +func (mb *mockBeacon) Entry(ctx context.Context, index uint64) <-chan Response { + e := mb.entryForIndex(index) + out := make(chan Response, 1) + out <- Response{Entry: e} + return out +} + +func (mb *mockBeacon) VerifyEntry(from types.BeaconEntry, to types.BeaconEntry) error { + // TODO: cache this, especially for bls + oe := mb.entryForIndex(from.Round) + if !bytes.Equal(from.Data, oe.Data) { + return xerrors.Errorf("mock beacon entry was invalid!") + } + return nil +} + +func (mb *mockBeacon) MaxBeaconRoundForEpoch(epoch abi.ChainEpoch) uint64 { + // offset for better testing + return uint64(epoch + 100) +} + +var _ RandomBeacon = (*mockBeacon)(nil) diff --git a/pkg/beacon/schedule.go b/pkg/beacon/schedule.go new file mode 100644 index 0000000000..0cd3889907 --- /dev/null +++ b/pkg/beacon/schedule.go @@ -0,0 +1,43 @@ +package beacon + +import ( + "sort" + + "github.com/filecoin-project/go-state-types/abi" + xerrors "github.com/pkg/errors" + + cfg "github.com/filecoin-project/venus/pkg/config" +) + +type Schedule []BeaconPoint + +//BeaconForEpoch select beacon at specify epoch +func (bs Schedule) BeaconForEpoch(e abi.ChainEpoch) RandomBeacon { + for i := len(bs) - 1; i >= 0; i-- { + bp := bs[i] + if e >= bp.Start { + return bp.Beacon + } + } + return bs[0].Beacon +} + +//DrandConfigSchedule create new beacon schedule , used to select beacon server at specify chain height +func DrandConfigSchedule(genTimeStamp uint64, blockDelay uint64, drandSchedule map[abi.ChainEpoch]cfg.DrandEnum) (Schedule, error) { + shd := Schedule{} + + for start, config := range drandSchedule { + bc, err := NewDrandBeacon(genTimeStamp, blockDelay, cfg.DrandConfigs[config]) + if err != nil { + return nil, xerrors.Errorf("creating drand beacon: %v", err) + } + shd = append(shd, BeaconPoint{Start: start, Beacon: bc}) + } + + sort.Slice(shd, func(i, j int) bool { + return shd[i].Start < shd[j].Start + }) + + log.Infof("Schedule: %v", shd) + return shd, nil +} diff --git a/pkg/chain/cbor_gen.go b/pkg/chain/cbor_gen.go new file mode 100644 index 0000000000..9bf71264a5 --- /dev/null +++ b/pkg/chain/cbor_gen.go @@ -0,0 +1,90 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package chain + +import ( + "fmt" + "io" + "sort" + + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = sort.Sort + +var lengthBufTSState = []byte{130} + +func (t *TSState) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufTSState); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.StateRoot (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.StateRoot); err != nil { + return xerrors.Errorf("failed to write cid field t.StateRoot: %w", err) + } + + // t.Receipts (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.Receipts); err != nil { + return xerrors.Errorf("failed to write cid field t.Receipts: %w", err) + } + + return nil +} + +func (t *TSState) UnmarshalCBOR(r io.Reader) error { + *t = TSState{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.StateRoot (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.StateRoot: %w", err) + } + + t.StateRoot = c + + } + // t.Receipts (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.Receipts: %w", err) + } + + t.Receipts = c + + } + return nil +} diff --git a/pkg/chain/chain_index.go b/pkg/chain/chain_index.go new file mode 100644 index 0000000000..381d1a6ed4 --- /dev/null +++ b/pkg/chain/chain_index.go @@ -0,0 +1,173 @@ +package chain + +import ( + "context" + + "github.com/filecoin-project/go-state-types/abi" + types "github.com/filecoin-project/venus/venus-shared/chain" + lru "github.com/hashicorp/golang-lru" + xerrors "github.com/pkg/errors" +) + +var DefaultChainIndexCacheSize = 32 << 10 + +//ChainIndex tipset height index, used to getting tipset by height quickly +type ChainIndex struct { //nolint + skipCache *lru.ARCCache + + loadTipSet loadTipSetFunc + + skipLength abi.ChainEpoch +} + +//NewChainIndex return a new chain index with arc cache +func NewChainIndex(lts loadTipSetFunc) *ChainIndex { + sc, _ := lru.NewARC(DefaultChainIndexCacheSize) + return &ChainIndex{ + skipCache: sc, + loadTipSet: lts, + skipLength: 20, + } +} + +type lbEntry struct { + ts *types.TipSet + parentHeight abi.ChainEpoch + targetHeight abi.ChainEpoch + target types.TipSetKey +} + +// GetTipSetByHeight get tipset at specify height from specify tipset +// the tipset within the skiplength is directly obtained by reading the database. +// if the height difference exceeds the skiplength, the tipset is read from caching. +// if the caching fails, the tipset is obtained by reading the database and updating the cache +func (ci *ChainIndex) GetTipSetByHeight(ctx context.Context, from *types.TipSet, to abi.ChainEpoch) (*types.TipSet, error) { + if from.Height()-to <= ci.skipLength { + return ci.walkBack(ctx, from, to) + } + + rounded, err := ci.roundDown(ctx, from) + if err != nil { + return nil, err + } + + cur := rounded.Key() + // cur := from.Key() + for { + cval, ok := ci.skipCache.Get(cur) + if !ok { + fc, err := ci.fillCache(ctx, cur) + if err != nil { + return nil, err + } + cval = fc + } + + lbe := cval.(*lbEntry) + if lbe.ts.Height() == to || lbe.parentHeight < to { + return lbe.ts, nil + } else if to > lbe.targetHeight { + return ci.walkBack(ctx, lbe.ts, to) + } + + cur = lbe.target + } +} + +//GetTipsetByHeightWithoutCache get the tipset of specific height by reading the database directly +func (ci *ChainIndex) GetTipsetByHeightWithoutCache(ctx context.Context, from *types.TipSet, to abi.ChainEpoch) (*types.TipSet, error) { + return ci.walkBack(ctx, from, to) +} + +func (ci *ChainIndex) fillCache(ctx context.Context, tsk types.TipSetKey) (*lbEntry, error) { + ts, err := ci.loadTipSet(ctx, tsk) + if err != nil { + return nil, err + } + + if ts.Height() == 0 { + return &lbEntry{ + ts: ts, + parentHeight: 0, + }, nil + } + + // will either be equal to ts.Height, or at least > ts.Parent.Height() + rheight := ci.roundHeight(ts.Height()) + + parent, err := ci.loadTipSet(ctx, ts.Parents()) + if err != nil { + return nil, err + } + + rheight -= ci.skipLength + if rheight < 0 { + rheight = 0 + } + + var skipTarget *types.TipSet + if parent.Height() < rheight { + skipTarget = parent + } else { + skipTarget, err = ci.walkBack(ctx, parent, rheight) + if err != nil { + return nil, xerrors.Errorf("fillCache walkback: %s", err) + } + } + + lbe := &lbEntry{ + ts: ts, + parentHeight: parent.Height(), + targetHeight: skipTarget.Height(), + target: skipTarget.Key(), + } + ci.skipCache.Add(tsk, lbe) + + return lbe, nil +} + +// floors to nearest skipLength multiple +func (ci *ChainIndex) roundHeight(h abi.ChainEpoch) abi.ChainEpoch { + return (h / ci.skipLength) * ci.skipLength +} + +func (ci *ChainIndex) roundDown(ctx context.Context, ts *types.TipSet) (*types.TipSet, error) { + target := ci.roundHeight(ts.Height()) + + rounded, err := ci.walkBack(ctx, ts, target) + if err != nil { + return nil, err + } + + return rounded, nil +} + +func (ci *ChainIndex) walkBack(ctx context.Context, from *types.TipSet, to abi.ChainEpoch) (*types.TipSet, error) { + if to > from.Height() { + return nil, xerrors.Errorf("looking for tipset with height greater than start point") + } + + if to == from.Height() { + return from, nil + } + + ts := from + + for { + pts, err := ci.loadTipSet(ctx, ts.Parents()) + if err != nil { + return nil, err + } + + if to > pts.Height() { + // in case pts is lower than the epoch we're looking for (null blocks) + // return a tipset above that height + return ts, nil + } + if to == pts.Height() { + return pts, nil + } + + ts = pts + } +} diff --git a/pkg/chain/circulating_supply.go b/pkg/chain/circulating_supply.go new file mode 100644 index 0000000000..c94b6cbde9 --- /dev/null +++ b/pkg/chain/circulating_supply.go @@ -0,0 +1,423 @@ +package chain + +import ( + "context" + "sync" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/pkg/constants" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + cbornode "github.com/ipfs/go-ipld-cbor" + xerrors "github.com/pkg/errors" + + // Used for genesis. + msig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" + + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/reward" +) + +type ICirculatingSupplyCalcualtor interface { + GetCirculatingSupplyDetailed(ctx context.Context, height abi.ChainEpoch, st tree.Tree) (types.CirculatingSupply, error) +} + +//CirculatingSupplyCalculator used to calculate the funds at a specific block height +type CirculatingSupplyCalculator struct { + bstore blockstoreutil.Blockstore + genesisRoot cid.Cid + + // info about the Accounts in the genesis state + preIgnitionVesting []msig0.State + postIgnitionVesting []msig0.State + postCalicoVesting []msig0.State + + genesisPledge abi.TokenAmount + genesisMarketFunds abi.TokenAmount + + genesisMsigLk sync.Mutex + upgradeConfig *config.ForkUpgradeConfig +} + +//NewCirculatingSupplyCalculator create new circulating supply calculator +func NewCirculatingSupplyCalculator(bstore blockstoreutil.Blockstore, genesisRoot cid.Cid, upgradeConfig *config.ForkUpgradeConfig) *CirculatingSupplyCalculator { + return &CirculatingSupplyCalculator{bstore: bstore, genesisRoot: genesisRoot, upgradeConfig: upgradeConfig} +} + +//GetCirculatingSupplyDetailed query contract and calculate circulation status at specific height and tree state +func (caculator *CirculatingSupplyCalculator) GetCirculatingSupplyDetailed(ctx context.Context, height abi.ChainEpoch, st tree.Tree) (types.CirculatingSupply, error) { + caculator.genesisMsigLk.Lock() + defer caculator.genesisMsigLk.Unlock() + //setup genesis asset information + if caculator.preIgnitionVesting == nil || caculator.genesisPledge.IsZero() || caculator.genesisMarketFunds.IsZero() { + err := caculator.setupGenesisVestingSchedule(ctx) + if err != nil { + return types.CirculatingSupply{}, xerrors.Errorf("failed to setup pre-ignition vesting schedule: %v", err) + } + } + if caculator.postIgnitionVesting == nil { + err := caculator.setupPostIgnitionVesting(ctx) + if err != nil { + return types.CirculatingSupply{}, xerrors.Errorf("failed to setup post-ignition vesting schedule: %v", err) + } + } + if caculator.postCalicoVesting == nil { + err := caculator.setupPostCalicoVesting(ctx) + if err != nil { + return types.CirculatingSupply{}, xerrors.Errorf("failed to setup post-calico vesting schedule: %v", err) + } + } + + filVested, err := caculator.GetFilVested(ctx, height, st) + if err != nil { + return types.CirculatingSupply{}, xerrors.Errorf("failed to calculate filVested: %v", err) + } + + filReserveDisbursed := big.Zero() + if height > caculator.upgradeConfig.UpgradeAssemblyHeight { + filReserveDisbursed, err = caculator.GetFilReserveDisbursed(ctx, st) + if err != nil { + return types.CirculatingSupply{}, xerrors.Errorf("failed to calculate filReserveDisbursed: %v", err) + } + } + + filMined, err := GetFilMined(ctx, st) + if err != nil { + return types.CirculatingSupply{}, xerrors.Errorf("failed to calculate filMined: %v", err) + } + filBurnt, err := GetFilBurnt(ctx, st) + if err != nil { + return types.CirculatingSupply{}, xerrors.Errorf("failed to calculate filBurnt: %v", err) + } + filLocked, err := caculator.GetFilLocked(ctx, st) + if err != nil { + return types.CirculatingSupply{}, xerrors.Errorf("failed to calculate filLocked: %v", err) + } + ret := big.Add(filVested, filMined) + ret = big.Add(ret, filReserveDisbursed) + ret = big.Sub(ret, filBurnt) + ret = big.Sub(ret, filLocked) + + if ret.LessThan(big.Zero()) { + ret = big.Zero() + } + + return types.CirculatingSupply{ + FilVested: filVested, + FilMined: filMined, + FilBurnt: filBurnt, + FilLocked: filLocked, + FilCirculating: ret, + FilReserveDisbursed: filReserveDisbursed, + }, nil +} + +/*func (c *Expected) processBlock(ctx context.Context, ts *block.TipSet) (cid.Cid, []types.MessageReceipt, error) { + var secpMessages [][]*types.SignedMessage + var blsMessages [][]*types.Message + for i := 0; i < ts.Len(); i++ { + blk := ts.At(i) + secpMsgs, blsMsgs, err := c.messageStore.LoadMetaMessages(ctx, blk.Messages.Cid) + if err != nil { + return cid.Undef, []types.MessageReceipt{}, xerrors.Wrapf(err, "syncing tip %s failed loading message list %s for block %s", ts.Key(), blk.Messages, blk.Cid()) + } + + blsMessages = append(blsMessages, blsMsgs) + secpMessages = append(secpMessages, secpMsgs) + } + + vms := vm.NewStorage(c.bstore) + priorState, err := state.LoadState(ctx, vms, ts.At(0).StateRoot.Cid) + if err != nil { + return cid.Undef, []types.MessageReceipt{}, err + } + + var newState state.Tree + newState, receipts, err := c.runMessages(ctx, priorState, vms, ts, blsMessages, secpMessages) + if err != nil { + return cid.Undef, []types.MessageReceipt{}, err + } + err = vms.Flush() + if err != nil { + return cid.Undef, []types.MessageReceipt{}, err + } + + root, err := newState.Flush(ctx) + if err != nil { + return cid.Undef, []types.MessageReceipt{}, err + } + return root, receipts, err +} +*/ + +// sets up information about the vesting schedule +func (caculator *CirculatingSupplyCalculator) setupGenesisVestingSchedule(ctx context.Context) error { + cst := cbornode.NewCborStore(caculator.bstore) + sTree, err := tree.LoadState(ctx, cst, caculator.genesisRoot) + if err != nil { + return xerrors.Errorf("loading state tree: %v", err) + } + + gmf, err := getFilMarketLocked(ctx, sTree) + if err != nil { + return xerrors.Errorf("setting up genesis market funds: %v", err) + } + + gp, err := getFilPowerLocked(ctx, sTree) + if err != nil { + return xerrors.Errorf("setting up genesis pledge: %v", err) + } + + caculator.genesisMarketFunds = gmf + caculator.genesisPledge = gp + + totalsByEpoch := make(map[abi.ChainEpoch]abi.TokenAmount) + + // 6 months + sixMonths := abi.ChainEpoch(183 * builtin.EpochsInDay) + totalsByEpoch[sixMonths] = big.NewInt(49_929_341) + totalsByEpoch[sixMonths] = big.Add(totalsByEpoch[sixMonths], big.NewInt(32_787_700)) + + // 1 year + oneYear := abi.ChainEpoch(365 * builtin.EpochsInDay) + totalsByEpoch[oneYear] = big.NewInt(22_421_712) + + // 2 years + twoYears := abi.ChainEpoch(2 * 365 * builtin.EpochsInDay) + totalsByEpoch[twoYears] = big.NewInt(7_223_364) + + // 3 years + threeYears := abi.ChainEpoch(3 * 365 * builtin.EpochsInDay) + totalsByEpoch[threeYears] = big.NewInt(87_637_883) + + // 6 years + sixYears := abi.ChainEpoch(6 * 365 * builtin.EpochsInDay) + totalsByEpoch[sixYears] = big.NewInt(100_000_000) + totalsByEpoch[sixYears] = big.Add(totalsByEpoch[sixYears], big.NewInt(300_000_000)) + + caculator.preIgnitionVesting = make([]msig0.State, 0, len(totalsByEpoch)) + for k, v := range totalsByEpoch { + ns := msig0.State{ + InitialBalance: v, + UnlockDuration: k, + PendingTxns: cid.Undef, + } + caculator.preIgnitionVesting = append(caculator.preIgnitionVesting, ns) + } + + return nil +} + +// sets up information about the vesting schedule post the ignition upgrade +func (caculator *CirculatingSupplyCalculator) setupPostIgnitionVesting(ctx context.Context) error { + + totalsByEpoch := make(map[abi.ChainEpoch]abi.TokenAmount) + + // 6 months + sixMonths := abi.ChainEpoch(183 * builtin.EpochsInDay) + totalsByEpoch[sixMonths] = big.NewInt(49_929_341) + totalsByEpoch[sixMonths] = big.Add(totalsByEpoch[sixMonths], big.NewInt(32_787_700)) + + // 1 year + oneYear := abi.ChainEpoch(365 * builtin.EpochsInDay) + totalsByEpoch[oneYear] = big.NewInt(22_421_712) + + // 2 years + twoYears := abi.ChainEpoch(2 * 365 * builtin.EpochsInDay) + totalsByEpoch[twoYears] = big.NewInt(7_223_364) + + // 3 years + threeYears := abi.ChainEpoch(3 * 365 * builtin.EpochsInDay) + totalsByEpoch[threeYears] = big.NewInt(87_637_883) + + // 6 years + sixYears := abi.ChainEpoch(6 * 365 * builtin.EpochsInDay) + totalsByEpoch[sixYears] = big.NewInt(100_000_000) + totalsByEpoch[sixYears] = big.Add(totalsByEpoch[sixYears], big.NewInt(300_000_000)) + + caculator.postIgnitionVesting = make([]msig0.State, 0, len(totalsByEpoch)) + for k, v := range totalsByEpoch { + ns := msig0.State{ + // In the pre-ignition logic, we incorrectly set this value in Fil, not attoFil, an off-by-10^18 error + InitialBalance: big.Mul(v, big.NewInt(int64(constants.FilecoinPrecision))), + UnlockDuration: k, + PendingTxns: cid.Undef, + // In the pre-ignition logic, the start epoch was 0. This changes in the fork logic of the Ignition upgrade itself. + StartEpoch: caculator.upgradeConfig.UpgradeLiftoffHeight, + } + caculator.postIgnitionVesting = append(caculator.postIgnitionVesting, ns) + } + + return nil +} + +// sets up information about the vesting schedule post the calico upgrade +func (caculator *CirculatingSupplyCalculator) setupPostCalicoVesting(ctx context.Context) error { + + totalsByEpoch := make(map[abi.ChainEpoch]abi.TokenAmount) + + // 0 days + zeroDays := abi.ChainEpoch(0) + totalsByEpoch[zeroDays] = big.NewInt(10_632_000) + + // 6 months + sixMonths := abi.ChainEpoch(183 * builtin.EpochsInDay) + totalsByEpoch[sixMonths] = big.NewInt(19_015_887) + totalsByEpoch[sixMonths] = big.Add(totalsByEpoch[sixMonths], big.NewInt(32_787_700)) + + // 1 year + oneYear := abi.ChainEpoch(365 * builtin.EpochsInDay) + totalsByEpoch[oneYear] = big.NewInt(22_421_712) + totalsByEpoch[oneYear] = big.Add(totalsByEpoch[oneYear], big.NewInt(9_400_000)) + + // 2 years + twoYears := abi.ChainEpoch(2 * 365 * builtin.EpochsInDay) + totalsByEpoch[twoYears] = big.NewInt(7_223_364) + + // 3 years + threeYears := abi.ChainEpoch(3 * 365 * builtin.EpochsInDay) + totalsByEpoch[threeYears] = big.NewInt(87_637_883) + totalsByEpoch[threeYears] = big.Add(totalsByEpoch[threeYears], big.NewInt(898_958)) + + // 6 years + sixYears := abi.ChainEpoch(6 * 365 * builtin.EpochsInDay) + totalsByEpoch[sixYears] = big.NewInt(100_000_000) + totalsByEpoch[sixYears] = big.Add(totalsByEpoch[sixYears], big.NewInt(300_000_000)) + totalsByEpoch[sixYears] = big.Add(totalsByEpoch[sixYears], big.NewInt(9_805_053)) + + caculator.postCalicoVesting = make([]msig0.State, 0, len(totalsByEpoch)) + for k, v := range totalsByEpoch { + ns := msig0.State{ + InitialBalance: big.Mul(v, big.NewInt(int64(constants.FilecoinPrecision))), + UnlockDuration: k, + PendingTxns: cid.Undef, + StartEpoch: caculator.upgradeConfig.UpgradeLiftoffHeight, + } + caculator.postCalicoVesting = append(caculator.postCalicoVesting, ns) + } + + return nil +} + +// GetVestedFunds returns all funds that have "left" actors that are in the genesis state: +// - For Multisigs, it counts the actual amounts that have vested at the given epoch +// - For Accounts, it counts max(currentBalance - genesisBalance, 0). +func (caculator *CirculatingSupplyCalculator) GetFilVested(ctx context.Context, height abi.ChainEpoch, st tree.Tree) (abi.TokenAmount, error) { + vf := big.Zero() + if height <= caculator.upgradeConfig.UpgradeIgnitionHeight { + for _, v := range caculator.preIgnitionVesting { + au := big.Sub(v.InitialBalance, v.AmountLocked(height)) + vf = big.Add(vf, au) + } + } else if height <= caculator.upgradeConfig.UpgradeCalicoHeight { + for _, v := range caculator.postIgnitionVesting { + // In the pre-ignition logic, we simply called AmountLocked(height), assuming startEpoch was 0. + // The start epoch changed in the Ignition upgrade. + au := big.Sub(v.InitialBalance, v.AmountLocked(height-v.StartEpoch)) + vf = big.Add(vf, au) + } + } else { + for _, v := range caculator.postCalicoVesting { + // In the pre-ignition logic, we simply called AmountLocked(height), assuming startEpoch was 0. + // The start epoch changed in the Ignition upgrade. + au := big.Sub(v.InitialBalance, v.AmountLocked(height-v.StartEpoch)) + vf = big.Add(vf, au) + } + } + + // After UpgradeAssemblyHeight these funds are accounted for in GetFilReserveDisbursed + if height <= caculator.upgradeConfig.UpgradeAssemblyHeight { + // continue to use preIgnitionGenInfos, nothing changed at the Ignition epoch + vf = big.Add(vf, caculator.genesisPledge) + // continue to use preIgnitionGenInfos, nothing changed at the Ignition epoch + vf = big.Add(vf, caculator.genesisMarketFunds) + } + + return vf, nil +} + +func (caculator *CirculatingSupplyCalculator) GetFilReserveDisbursed(ctx context.Context, st tree.Tree) (abi.TokenAmount, error) { + ract, found, err := st.GetActor(ctx, builtin.ReserveAddress) + if !found || err != nil { + return big.Zero(), xerrors.Errorf("failed to get reserve actor: %v", err) + } + + // If money enters the reserve actor, this could lead to a negative term + return big.Sub(big.NewFromGo(constants.InitialFilReserved), ract.Balance), nil +} + +//GetFilMined query reward contract to get amount of mined fil +func GetFilMined(ctx context.Context, st tree.Tree) (abi.TokenAmount, error) { + ractor, found, err := st.GetActor(ctx, reward.Address) + if !found || err != nil { + return big.Zero(), xerrors.Errorf("failed to load reward actor state: %v", err) + } + + rst, err := reward.Load(adt.WrapStore(ctx, st.GetStore()), ractor) + if err != nil { + return big.Zero(), err + } + + return rst.TotalStoragePowerReward() +} + +//GetFilBurnt query burnt contract to get amount of burnt fil +func GetFilBurnt(ctx context.Context, st tree.Tree) (abi.TokenAmount, error) { + burnt, found, err := st.GetActor(ctx, builtin.BurntFundsActorAddr) + if !found || err != nil { + return big.Zero(), xerrors.Errorf("failed to load burnt actor: %v", err) + } + + return burnt.Balance, nil +} + +//GetFilLocked query the market contract and power contract to get the amount of locked fils +func (caculator *CirculatingSupplyCalculator) GetFilLocked(ctx context.Context, st tree.Tree) (abi.TokenAmount, error) { + + filMarketLocked, err := getFilMarketLocked(ctx, st) + if err != nil { + return big.Zero(), xerrors.Errorf("failed to get filMarketLocked: %v", err) + } + + filPowerLocked, err := getFilPowerLocked(ctx, st) + if err != nil { + return big.Zero(), xerrors.Errorf("failed to get filPowerLocked: %v", err) + } + + return big.Add(filMarketLocked, filPowerLocked), nil +} + +func getFilMarketLocked(ctx context.Context, st tree.Tree) (abi.TokenAmount, error) { + act, found, err := st.GetActor(ctx, market.Address) + if !found || err != nil { + return big.Zero(), xerrors.Errorf("failed to load market actor: %v", err) + } + + mst, err := market.Load(adt.WrapStore(ctx, st.GetStore()), act) + if err != nil { + return big.Zero(), xerrors.Errorf("failed to load market state: %v", err) + } + + return mst.TotalLocked() +} + +func getFilPowerLocked(ctx context.Context, st tree.Tree) (abi.TokenAmount, error) { + pactor, found, err := st.GetActor(ctx, power.Address) + if !found || err != nil { + return big.Zero(), xerrors.Errorf("failed to load power actor: %v", err) + } + + pst, err := power.Load(adt.WrapStore(ctx, st.GetStore()), pactor) + if err != nil { + return big.Zero(), xerrors.Errorf("failed to load power state: %v", err) + } + + return pst.TotalLocked() +} diff --git a/pkg/chain/circulating_supply_mock.go b/pkg/chain/circulating_supply_mock.go new file mode 100644 index 0000000000..af102e0c94 --- /dev/null +++ b/pkg/chain/circulating_supply_mock.go @@ -0,0 +1,29 @@ +package chain + +import ( + "context" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/state/tree" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var _ ICirculatingSupplyCalcualtor = (*MockCirculatingSupplyCalculator)(nil) + +type MockCirculatingSupplyCalculator struct { +} + +func NewMockCirculatingSupplyCalculator() ICirculatingSupplyCalcualtor { + return &MockCirculatingSupplyCalculator{} +} + +func (m MockCirculatingSupplyCalculator) GetCirculatingSupplyDetailed(ctx context.Context, height abi.ChainEpoch, st tree.Tree) (types.CirculatingSupply, error) { + return types.CirculatingSupply{ + FilVested: abi.TokenAmount{}, + FilMined: abi.TokenAmount{}, + FilBurnt: abi.TokenAmount{}, + FilLocked: abi.TokenAmount{}, + FilCirculating: abi.TokenAmount{}, + FilReserveDisbursed: abi.TokenAmount{}, + }, nil +} diff --git a/pkg/chain/coalescer.go b/pkg/chain/coalescer.go new file mode 100644 index 0000000000..380b4c6f9a --- /dev/null +++ b/pkg/chain/coalescer.go @@ -0,0 +1,214 @@ +package chain + +import ( + "context" + "time" + + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// WrapHeadChangeCoalescer wraps a ReorgNotifee with a head change coalescer. +// minDelay is the minimum coalesce delay; when a head change is first received, the coalescer will +// wait for that long to coalesce more head changes. +// maxDelay is the maximum coalesce delay; the coalescer will not delay delivery of a head change +// more than that. +// mergeInterval is the interval that triggers additional coalesce delay; if the last head change was +// within the merge interval when the coalesce timer fires, then the coalesce time is extended +// by min delay and up to max delay total. +func WrapHeadChangeCoalescer(fn ReorgNotifee, minDelay, maxDelay, mergeInterval time.Duration) ReorgNotifee { + c := NewHeadChangeCoalescer(fn, minDelay, maxDelay, mergeInterval) + return c.HeadChange +} + +// HeadChangeCoalescer is a stateful reorg notifee which coalesces incoming head changes +// with pending head changes to reduce state computations from head change notifications. +type HeadChangeCoalescer struct { + notify ReorgNotifee + + ctx context.Context + cancel func() + + eventq chan headChange + + revert []*types.TipSet + apply []*types.TipSet +} + +type headChange struct { + revert, apply []*types.TipSet +} + +// NewHeadChangeCoalescer creates a HeadChangeCoalescer. +func NewHeadChangeCoalescer(fn ReorgNotifee, minDelay, maxDelay, mergeInterval time.Duration) *HeadChangeCoalescer { + ctx, cancel := context.WithCancel(context.Background()) + c := &HeadChangeCoalescer{ + notify: fn, + ctx: ctx, + cancel: cancel, + eventq: make(chan headChange), + } + + go c.background(minDelay, maxDelay, mergeInterval) + + return c +} + +// HeadChange is the ReorgNotifee callback for the stateful coalescer; it receives an incoming +// head change and schedules dispatch of a coalesced head change in the background. +func (c *HeadChangeCoalescer) HeadChange(revert, apply []*types.TipSet) error { + select { + case c.eventq <- headChange{revert: revert, apply: apply}: + return nil + case <-c.ctx.Done(): + return c.ctx.Err() + } +} + +// Close closes the coalescer and cancels the background dispatch goroutine. +// Any further notification will result in an error. +func (c *HeadChangeCoalescer) Close() error { + select { + case <-c.ctx.Done(): + default: + c.cancel() + } + + return nil +} + +// Implementation details + +func (c *HeadChangeCoalescer) background(minDelay, maxDelay, mergeInterval time.Duration) { + var timerC <-chan time.Time + var first, last time.Time + + for { + select { + case evt := <-c.eventq: + c.coalesce(evt.revert, evt.apply) + + now := time.Now() + last = now + if first.IsZero() { + first = now + } + + if timerC == nil { + timerC = time.After(minDelay) + } + + case now := <-timerC: + sinceFirst := now.Sub(first) + sinceLast := now.Sub(last) + + if sinceLast < mergeInterval && sinceFirst < maxDelay { + // coalesce some more + maxWait := maxDelay - sinceFirst + wait := minDelay + if maxWait < wait { + wait = maxWait + } + + timerC = time.After(wait) + } else { + // dispatch + c.dispatch() + + first = time.Time{} + last = time.Time{} + timerC = nil + } + + case <-c.ctx.Done(): + if c.revert != nil || c.apply != nil { + c.dispatch() + } + return + } + } +} + +func (c *HeadChangeCoalescer) coalesce(revert, apply []*types.TipSet) { + // newly reverted tipsets cancel out with pending applys. + // similarly, newly applied tipsets cancel out with pending reverts. + + // pending tipsets + pendRevert := make(map[string]struct{}, len(c.revert)) + for _, ts := range c.revert { + pendRevert[ts.Key().String()] = struct{}{} + } + + pendApply := make(map[string]struct{}, len(c.apply)) + for _, ts := range c.apply { + pendApply[ts.Key().String()] = struct{}{} + } + + // incoming tipsets + reverting := make(map[string]struct{}, len(revert)) + for _, ts := range revert { + reverting[ts.Key().String()] = struct{}{} + } + + applying := make(map[string]struct{}, len(apply)) + for _, ts := range apply { + applying[ts.Key().String()] = struct{}{} + } + + // coalesced revert set + // - pending reverts are cancelled by incoming applys + // - incoming reverts are cancelled by pending applys + newRevert := make([]*types.TipSet, 0, len(c.revert)+len(revert)) + for _, ts := range c.revert { + _, cancel := applying[ts.Key().String()] + if cancel { + continue + } + + newRevert = append(newRevert, ts) + } + + for _, ts := range revert { + _, cancel := pendApply[ts.Key().String()] + if cancel { + continue + } + + newRevert = append(newRevert, ts) + } + + // coalesced apply set + // - pending applys are cancelled by incoming reverts + // - incoming applys are cancelled by pending reverts + newApply := make([]*types.TipSet, 0, len(c.apply)+len(apply)) + for _, ts := range c.apply { + _, cancel := reverting[ts.Key().String()] + if cancel { + continue + } + + newApply = append(newApply, ts) + } + + for _, ts := range apply { + _, cancel := pendRevert[ts.Key().String()] + if cancel { + continue + } + + newApply = append(newApply, ts) + } + + // commit the coalesced sets + c.revert = newRevert + c.apply = newApply +} + +func (c *HeadChangeCoalescer) dispatch() { + err := c.notify(c.revert, c.apply) + if err != nil { + log.Errorf("error dispatching coalesced head change notification: %s", err) + } + + c.revert = nil + c.apply = nil +} diff --git a/pkg/chain/coalescer_test.go b/pkg/chain/coalescer_test.go new file mode 100644 index 0000000000..6d8f4e72ab --- /dev/null +++ b/pkg/chain/coalescer_test.go @@ -0,0 +1,144 @@ +package chain + +import ( + "fmt" + "testing" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + tbig "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/crypto" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func mkAddress(i uint64) address.Address { + a, err := address.NewIDAddress(i) + if err != nil { + panic(err) + } + return a +} + +func mkBlock(parents *types.TipSet, weightInc int64, ticketNonce uint64) *types.BlockHeader { + addr := mkAddress(123561) + + c, err := cid.Decode("bafyreicmaj5hhoy5mgqvamfhgexxyergw7hdeshizghodwkjg6qmpoco7i") + if err != nil { + panic(err) + } + + pstateRoot := c + if parents != nil { + pstateRoot = parents.Blocks()[0].ParentStateRoot + } + + var height abi.ChainEpoch + var tsKey types.TipSetKey + weight := tbig.NewInt(weightInc) + var timestamp uint64 + if parents != nil { + height = parents.Height() + height = height + 1 + timestamp = parents.MinTimestamp() + constants.MainNetBlockDelaySecs + weight = tbig.Add(parents.Blocks()[0].ParentWeight, weight) + tsKey = parents.Key() + } + + return &types.BlockHeader{ + Miner: addr, + ElectionProof: &types.ElectionProof{ + VRFProof: []byte(fmt.Sprintf("====%d=====", ticketNonce)), + }, + Ticket: &types.Ticket{ + VRFProof: []byte(fmt.Sprintf("====%d=====", ticketNonce)), + }, + Parents: tsKey.Cids(), + ParentMessageReceipts: c, + BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte("boo! im a signature")}, + ParentWeight: weight, + Messages: c, + Height: height, + Timestamp: timestamp, + ParentStateRoot: pstateRoot, + BlockSig: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte("boo! im a signature")}, + ParentBaseFee: tbig.NewInt(int64(constants.MinimumBaseFee)), + } +} + +func mkTipSet(blks ...*types.BlockHeader) *types.TipSet { + ts, err := types.NewTipSet(blks) + if err != nil { + panic(err) + } + return ts +} + +func TestHeadChangeCoalescer(t *testing.T) { + tf.UnitTest(t) + + notif := make(chan headChange, 1) + c := NewHeadChangeCoalescer(func(revert, apply []*types.TipSet) error { + notif <- headChange{apply: apply, revert: revert} + return nil + }, + 100*time.Millisecond, + 200*time.Millisecond, + 10*time.Millisecond, + ) + defer c.Close() //nolint + + b0 := mkBlock(nil, 0, 0) + root := mkTipSet(b0) + bA := mkBlock(root, 1, 1) + tA := mkTipSet(bA) + bB := mkBlock(root, 1, 2) + tB := mkTipSet(bB) + tAB := mkTipSet(bA, bB) + bC := mkBlock(root, 1, 3) + tABC := mkTipSet(bA, bB, bC) + bD := mkBlock(root, 1, 4) + tABCD := mkTipSet(bA, bB, bC, bD) + bE := mkBlock(root, 1, 5) + tABCDE := mkTipSet(bA, bB, bC, bD, bE) + + c.HeadChange(nil, []*types.TipSet{tA}) //nolint + c.HeadChange(nil, []*types.TipSet{tB}) //nolint + c.HeadChange([]*types.TipSet{tA, tB}, []*types.TipSet{tAB}) //nolint + c.HeadChange([]*types.TipSet{tAB}, []*types.TipSet{tABC}) //nolint + + change := <-notif + + if len(change.revert) != 0 { + t.Fatalf("expected empty revert set but got %d elements", len(change.revert)) + } + if len(change.apply) != 1 { + t.Fatalf("expected single element apply set but got %d elements", len(change.apply)) + } + if change.apply[0] != tABC { + t.Fatalf("expected to apply tABC") + } + + c.HeadChange([]*types.TipSet{tABC}, []*types.TipSet{tABCD}) //nolint + c.HeadChange([]*types.TipSet{tABCD}, []*types.TipSet{tABCDE}) //nolint + + change = <-notif + + if len(change.revert) != 1 { + t.Fatalf("expected single element revert set but got %d elements", len(change.revert)) + } + if change.revert[0] != tABC { + t.Fatalf("expected to revert tABC") + } + if len(change.apply) != 1 { + t.Fatalf("expected single element apply set but got %d elements", len(change.apply)) + } + if change.apply[0] != tABCDE { + t.Fatalf("expected to revert tABC") + } + +} diff --git a/pkg/chain/message_store.go b/pkg/chain/message_store.go new file mode 100644 index 0000000000..2b797ae64c --- /dev/null +++ b/pkg/chain/message_store.go @@ -0,0 +1,654 @@ +package chain + +import ( + "bytes" + "context" + "fmt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + cbor2 "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/specs-actors/actors/util/adt" + + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + blockstore "github.com/ipfs/go-ipfs-blockstore" + cbor "github.com/ipfs/go-ipld-cbor" + + "github.com/pkg/errors" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// MessageProvider is an interface exposing the load methods of the +// MessageStore. +type MessageProvider interface { + LoadTipSetMessage(ctx context.Context, ts *types.TipSet) ([]types.BlockMessagesInfo, error) + LoadMetaMessages(context.Context, cid.Cid) ([]*types.SignedMessage, []*types.Message, error) + ReadMsgMetaCids(ctx context.Context, mmc cid.Cid) ([]cid.Cid, []cid.Cid, error) + LoadUnsignedMessagesFromCids(ctx context.Context, blsCids []cid.Cid) ([]*types.Message, error) + LoadSignedMessagesFromCids(ctx context.Context, secpCids []cid.Cid) ([]*types.SignedMessage, error) + LoadReceipts(context.Context, cid.Cid) ([]types.MessageReceipt, error) + LoadTxMeta(context.Context, cid.Cid) (types.MessageRoot, error) +} + +// MessageWriter is an interface exposing the write methods of the +// MessageStore. +type MessageWriter interface { + StoreMessages(ctx context.Context, secpMessages []*types.SignedMessage, blsMessages []*types.Message) (cid.Cid, error) + StoreReceipts(context.Context, []types.MessageReceipt) (cid.Cid, error) + StoreTxMeta(context.Context, types.MessageRoot) (cid.Cid, error) +} + +// MessageStore stores and loads collections of signed messages and receipts. +type MessageStore struct { + bs blockstore.Blockstore + fkCfg *config.ForkUpgradeConfig +} + +// NewMessageStore creates and returns a new store +func NewMessageStore(bs blockstore.Blockstore, fkCfg *config.ForkUpgradeConfig) *MessageStore { + return &MessageStore{bs: bs, fkCfg: fkCfg} +} + +// LoadMetaMessages loads the signed messages in the collection with cid c from ipld +// storage. +func (ms *MessageStore) LoadMetaMessages(ctx context.Context, metaCid cid.Cid) ([]*types.SignedMessage, []*types.Message, error) { + // load txmeta + meta, err := ms.LoadTxMeta(ctx, metaCid) + if err != nil { + return nil, nil, err + } + + secpCids, err := ms.loadAMTCids(ctx, meta.SecpkRoot) + if err != nil { + return nil, nil, err + } + + // load secp messages from cids + secpMsgs, err := ms.LoadSignedMessagesFromCids(ctx, secpCids) + if err != nil { + return nil, nil, err + } + + blsCids, err := ms.loadAMTCids(ctx, meta.BlsRoot) + if err != nil { + return nil, nil, err + } + + // load bls messages from cids + blsMsgs, err := ms.LoadUnsignedMessagesFromCids(ctx, blsCids) + if err != nil { + return nil, nil, err + } + + return secpMsgs, blsMsgs, nil +} + +//ReadMsgMetaCids load messager from message meta cid +func (ms *MessageStore) ReadMsgMetaCids(ctx context.Context, mmc cid.Cid) ([]cid.Cid, []cid.Cid, error) { + meta, err := ms.LoadTxMeta(ctx, mmc) + if err != nil { + return nil, nil, err + } + + secpCids, err := ms.loadAMTCids(ctx, meta.SecpkRoot) + if err != nil { + return nil, nil, err + } + blsCids, err := ms.loadAMTCids(ctx, meta.BlsRoot) + if err != nil { + return nil, nil, err + } + return blsCids, secpCids, nil +} + +//LoadMessage load message of specify message cid +//First get the unsigned message. If it is not found, then get the signed message. If still not found, an error will be returned +func (ms *MessageStore) LoadMessage(ctx context.Context, mid cid.Cid) (types.ChainMsg, error) { + m, err := ms.LoadUnsignedMessage(ctx, mid) + if err == nil { + return m, nil + } + + if err != blockstoreutil.ErrNotFound { + log.Warnf("GetCMessage: unexpected error getting unsigned message: %s", err) + } + + return ms.LoadSignedMessage(ctx, mid) +} + +//LoadUnsignedMessage load unsigned messages in tipset +func (ms *MessageStore) LoadUnsignedMessage(ctx context.Context, mid cid.Cid) (*types.Message, error) { + messageBlock, err := ms.bs.Get(ctx, mid) + if err != nil { + return nil, errors.Wrapf(err, "failed to get bls message %s", mid) + } + message := &types.Message{} + if err := message.UnmarshalCBOR(bytes.NewReader(messageBlock.RawData())); err != nil { + return nil, errors.Wrapf(err, "could not decode bls message %s", mid) + } + return message, nil +} + +//LoadUnsignedMessagesFromCids load unsigned messages of cid array +func (ms *MessageStore) LoadSignedMessage(ctx context.Context, mid cid.Cid) (*types.SignedMessage, error) { + messageBlock, err := ms.bs.Get(ctx, mid) + if err != nil { + return nil, errors.Wrapf(err, "failed to get bls message %s", mid) + } + + message := &types.SignedMessage{} + if err := message.UnmarshalCBOR(bytes.NewReader(messageBlock.RawData())); err != nil { + return nil, errors.Wrapf(err, "could not decode secp message %s", mid) + } + + return message, nil +} + +//LoadUnsignedMessagesFromCids load unsigned messages of cid array +func (ms *MessageStore) LoadUnsignedMessagesFromCids(ctx context.Context, blsCids []cid.Cid) ([]*types.Message, error) { + blsMsgs := make([]*types.Message, len(blsCids)) + for i, c := range blsCids { + message, err := ms.LoadUnsignedMessage(ctx, c) + if err != nil { + return nil, err + } + blsMsgs[i] = message + } + return blsMsgs, nil +} + +//LoadSignedMessagesFromCids load signed messages of cid array +func (ms *MessageStore) LoadSignedMessagesFromCids(ctx context.Context, secpCids []cid.Cid) ([]*types.SignedMessage, error) { + secpMsgs := make([]*types.SignedMessage, len(secpCids)) + for i, c := range secpCids { + message, err := ms.LoadSignedMessage(ctx, c) + if err != nil { + return nil, err + } + secpMsgs[i] = message + } + return secpMsgs, nil +} + +// StoreMessages puts the input signed messages to a collection and then writes +// this collection to ipld storage. The cid of the collection is returned. +func (ms *MessageStore) StoreMessages(ctx context.Context, secpMessages []*types.SignedMessage, blsMessages []*types.Message) (cid.Cid, error) { + var ret types.MessageRoot + var err error + + // store secp messages + as := cbor.NewCborStore(ms.bs) + secpMsgArr := adt.MakeEmptyArray(adt.WrapStore(context.TODO(), as)) + for i, msg := range secpMessages { + secpCid, err := ms.StoreMessage(msg) + if err != nil { + return cid.Undef, errors.Wrap(err, "could not store secp messages") + } + err = secpMsgArr.Set(uint64(i), (*cbg.CborCid)(&secpCid)) + if err != nil { + return cid.Undef, errors.Wrap(err, "could not store secp messages cid") + } + } + + secpRaw, err := secpMsgArr.Root() + if err != nil { + return cid.Undef, errors.Wrap(err, "could not store secp cids as AMT") + } + ret.SecpkRoot = secpRaw + + // store bls messages + blsMsgArr := adt.MakeEmptyArray(adt.WrapStore(context.TODO(), as)) + for i, msg := range blsMessages { + blsCid, err := ms.StoreMessage(msg) + if err != nil { + return cid.Undef, errors.Wrap(err, "could not store bls messages") + } + err = blsMsgArr.Set(uint64(i), (*cbg.CborCid)(&blsCid)) + if err != nil { + return cid.Undef, errors.Wrap(err, "could not store secp messages cid") + } + } + + blsRaw, err := blsMsgArr.Root() + if err != nil { + return cid.Undef, errors.Wrap(err, "could not store bls cids as AMT") + } + ret.BlsRoot = blsRaw + + return ms.StoreTxMeta(ctx, ret) +} + +//load message from tipset NOTICE skip message with the same nonce +func (ms *MessageStore) LoadTipSetMesssages(ctx context.Context, ts *types.TipSet) ([][]*types.SignedMessage, [][]*types.Message, error) { + var secpMessages [][]*types.SignedMessage + var blsMessages [][]*types.Message + + applied := make(map[address.Address]uint64) + + vms := cbor.NewCborStore(ms.bs) + st, err := tree.LoadState(ctx, vms, ts.Blocks()[0].ParentStateRoot) + if err != nil { + return nil, nil, errors.Wrapf(err, "failed to load state tree %s", ts.Blocks()[0].ParentStateRoot.String()) + } + + selectMsg := func(m *types.Message) (bool, error) { + var sender address.Address + if ts.Height() >= ms.fkCfg.UpgradeHyperdriveHeight { + sender, err = st.LookupID(m.From) + if err != nil { + return false, err + } + } else { + sender = m.From + } + + // The first match for a sender is guaranteed to have correct nonce -- the block isn't valid otherwise + if _, ok := applied[sender]; !ok { + applied[sender] = m.Nonce + } + + if applied[sender] != m.Nonce { + return false, nil + } + + applied[sender]++ + + return true, nil + } + + for i := 0; i < ts.Len(); i++ { + blk := ts.At(i) + secpMsgs, blsMsgs, err := ms.LoadMetaMessages(ctx, blk.Messages) + if err != nil { + return nil, nil, errors.Wrapf(err, "syncing tip %s failed loading message list %s for block %s", ts.Key(), blk.Messages, blk.Cid()) + } + + var blksecpMessages []*types.SignedMessage + var blkblsMessages []*types.Message + + for _, msg := range blsMsgs { + b, err := selectMsg(msg) + if err != nil { + return nil, nil, errors.Wrap(err, "failed to decide whether to select message for block") + } + if b { + blkblsMessages = append(blkblsMessages, msg) + } + } + + for _, msg := range secpMsgs { + b, err := selectMsg(&msg.Message) + if err != nil { + return nil, nil, errors.Wrap(err, "failed to decide whether to select message for block") + } + if b { + blksecpMessages = append(blksecpMessages, msg) + } + } + + blsMessages = append(blsMessages, blkblsMessages) + secpMessages = append(secpMessages, blksecpMessages) + } + + return secpMessages, blsMessages, nil +} + +// LoadReceipts loads the signed messages in the collection with cid c from ipld +// storage and returns the slice implied by the collection +func (ms *MessageStore) LoadReceipts(ctx context.Context, c cid.Cid) ([]types.MessageReceipt, error) { + as := cbor.NewCborStore(ms.bs) + fmt.Println(c.String()) + a, err := adt.AsArray(adt.WrapStore(ctx, as), c) + if err != nil { + return nil, err + } + + receipts := make([]types.MessageReceipt, a.Length()) + for i := uint64(0); i < a.Length(); i++ { + var rec types.MessageReceipt + if found, err := a.Get(i, &rec); err != nil { + return nil, errors.Wrapf(err, "could not retrieve %d bytes from AMT", i) + } else if !found { + return nil, errors.Errorf("failed to find receipt %d", i) + } + receipts[i] = rec + } + return receipts, nil +} + +// StoreReceipts puts the input signed messages to a collection and then writes +// this collection to ipld storage. The cid of the collection is returned. +func (ms *MessageStore) StoreReceipts(ctx context.Context, receipts []types.MessageReceipt) (cid.Cid, error) { + tmp := blockstoreutil.NewTemporary() + rectarr := adt.MakeEmptyArray(adt.WrapStore(ctx, cbor.NewCborStore(tmp))) + + for i, receipt := range receipts { + if err := rectarr.Set(uint64(i), &receipt); err != nil { + return cid.Undef, errors.Wrap(err, "failed to build receipts amt") + } + } + + root, err := rectarr.Root() + if err != nil { + return cid.Undef, err + } + + err = blockstoreutil.CopyParticial(ctx, tmp, ms.bs, root) + if err != nil { + return cid.Undef, err + } + + return rectarr.Root() +} + +func (ms *MessageStore) loadAMTCids(ctx context.Context, c cid.Cid) ([]cid.Cid, error) { + as := cbor.NewCborStore(ms.bs) + a, err := adt.AsArray(adt.WrapStore(ctx, as), c) + if err != nil { + return []cid.Cid{}, err + } + + cids := make([]cid.Cid, a.Length()) + for i := uint64(0); i < a.Length(); i++ { + oc := cbg.CborCid(c) + if found, err := a.Get(i, &oc); err != nil { + return nil, errors.Wrapf(err, "could not retrieve %d cid from AMT", i) + } else if !found { + return nil, errors.Errorf("failed to find receipt %d", i) + } + + cids[i] = cid.Cid(oc) + } + + return cids, nil +} + +// LoadTxMeta loads the secproot, blsroot data from the message store +func (ms *MessageStore) LoadTxMeta(ctx context.Context, c cid.Cid) (types.MessageRoot, error) { + metaBlock, err := ms.bs.Get(ctx, c) + if err != nil { + return types.MessageRoot{}, errors.Wrapf(err, "failed to get tx meta %s", c) + } + + var meta types.MessageRoot + if err := meta.UnmarshalCBOR(bytes.NewReader(metaBlock.RawData())); err != nil { + return types.MessageRoot{}, errors.Wrapf(err, "could not decode tx meta %s", c) + } + return meta, nil +} + +//LoadTipSetMessage message from tipset NOTICE skip message with the same nonce +func (ms *MessageStore) LoadTipSetMessage(ctx context.Context, ts *types.TipSet) ([]types.BlockMessagesInfo, error) { + //gather message + applied := make(map[address.Address]uint64) + + vms := cbor.NewCborStore(ms.bs) + st, err := tree.LoadState(ctx, vms, ts.Blocks()[0].ParentStateRoot) + if err != nil { + return nil, errors.Errorf("failed to load state tree") + } + + selectMsg := func(m *types.Message) (bool, error) { + var sender address.Address + if ts.Height() >= ms.fkCfg.UpgradeHyperdriveHeight { + sender, err = st.LookupID(m.From) + if err != nil { + return false, err + } + } else { + sender = m.From + } + + // The first match for a sender is guaranteed to have correct nonce -- the block isn't valid otherwise + if _, ok := applied[sender]; !ok { + applied[sender] = m.Nonce + } + + if applied[sender] != m.Nonce { + return false, nil + } + + applied[sender]++ + + return true, nil + } + + var blockMsg []types.BlockMessagesInfo + for i := 0; i < ts.Len(); i++ { + blk := ts.At(i) + secpMsgs, blsMsgs, err := ms.LoadMetaMessages(ctx, blk.Messages) // Corresponding to MessagesForBlock of lotus + if err != nil { + return nil, errors.Wrapf(err, "syncing tip %s failed loading message list %s for block %s", ts.Key(), blk.Messages, blk.Cid()) + } + + sBlsMsg := make([]types.ChainMsg, 0, len(blsMsgs)) + sSecpMsg := make([]types.ChainMsg, 0, len(secpMsgs)) + for _, msg := range blsMsgs { + b, err := selectMsg(msg) + if err != nil { + return nil, errors.Wrap(err, "failed to decide whether to select message for block") + } + if b { + sBlsMsg = append(sBlsMsg, msg) + } + } + for _, msg := range secpMsgs { + b, err := selectMsg(&msg.Message) + if err != nil { + return nil, errors.Wrap(err, "failed to decide whether to select message for block") + } + if b { + sSecpMsg = append(sSecpMsg, msg) + } + } + + blockMsg = append(blockMsg, types.BlockMessagesInfo{ + BlsMessages: sBlsMsg, + SecpkMessages: sSecpMsg, + Block: blk, + }) + } + + return blockMsg, nil +} + +//MessagesForTipset return of message ( bls message + secp message) of tipset +func (ms *MessageStore) MessagesForTipset(ts *types.TipSet) ([]types.ChainMsg, error) { + bmsgs, err := ms.LoadTipSetMessage(context.TODO(), ts) + if err != nil { + return nil, err + } + + var out []types.ChainMsg + for _, bm := range bmsgs { + out = append(out, bm.BlsMessages...) + out = append(out, bm.SecpkMessages...) + } + + return out, nil +} + +//StoreMessage put message(include signed message and unsigned message) to database +func (ms *MessageStore) StoreMessage(message types.ChainMsg) (cid.Cid, error) { + return cbor.NewCborStore(ms.bs).Put(context.TODO(), message) +} + +// StoreTxMeta writes the secproot, blsroot block to the message store +func (ms *MessageStore) StoreTxMeta(ctx context.Context, meta types.MessageRoot) (cid.Cid, error) { + return cbor.NewCborStore(ms.bs).Put(ctx, &meta) +} + +func MakeBlock(obj cbor2.Marshaler) (blocks.Block, error) { + buf := new(bytes.Buffer) + err := obj.MarshalCBOR(buf) + if err != nil { + return nil, err + } + data := buf.Bytes() + c, err := constants.DefaultCidBuilder.Sum(data) + if err != nil { + return nil, err + } + + return blocks.NewBlockWithCid(data, c) +} + +//todo move to a more suitable position +func ComputeNextBaseFee(baseFee abi.TokenAmount, gasLimitUsed int64, noOfBlocks int, epoch abi.ChainEpoch, upgrade *config.ForkUpgradeConfig) abi.TokenAmount { + // deta := gasLimitUsed/noOfBlocks - constants.BlockGasTarget + // change := baseFee * deta / BlockGasTarget + // nextBaseFee = baseFee + change + // nextBaseFee = max(nextBaseFee, constants.MinimumBaseFee) + + var delta int64 + if epoch > upgrade.UpgradeSmokeHeight { + delta = gasLimitUsed / int64(noOfBlocks) + delta -= constants.BlockGasTarget + } else { + delta = constants.PackingEfficiencyDenom * gasLimitUsed / (int64(noOfBlocks) * constants.PackingEfficiencyNum) + delta -= constants.BlockGasTarget + } + + // cap change at 12.5% (BaseFeeMaxChangeDenom) by capping delta + if delta > constants.BlockGasTarget { + delta = constants.BlockGasTarget + } + if delta < -constants.BlockGasTarget { + delta = -constants.BlockGasTarget + } + + change := big.Mul(baseFee, big.NewInt(delta)) + change = big.Div(change, big.NewInt(constants.BlockGasTarget)) + change = big.Div(change, big.NewInt(constants.BaseFeeMaxChangeDenom)) + + nextBaseFee := big.Add(baseFee, change) + if big.Cmp(nextBaseFee, big.NewInt(constants.MinimumBaseFee)) < 0 { + nextBaseFee = big.NewInt(constants.MinimumBaseFee) + } + return nextBaseFee +} + +//todo move to a more suitable position +func (ms *MessageStore) ComputeBaseFee(ctx context.Context, ts *types.TipSet, upgrade *config.ForkUpgradeConfig) (abi.TokenAmount, error) { + zero := abi.NewTokenAmount(0) + baseHeight := ts.Height() + + if upgrade.UpgradeBreezeHeight >= 0 && baseHeight > upgrade.UpgradeBreezeHeight && baseHeight < upgrade.UpgradeBreezeHeight+upgrade.BreezeGasTampingDuration { + return abi.NewTokenAmount(100), nil + } + + // totalLimit is sum of GasLimits of unique messages in a tipset + totalLimit := int64(0) + + seen := make(map[cid.Cid]struct{}) + + for _, b := range ts.Blocks() { + secpMsgs, blsMsgs, err := ms.LoadMetaMessages(ctx, b.Messages) + if err != nil { + return zero, errors.Wrapf(err, "error getting messages for: %s", b.Cid()) + } + + for _, m := range blsMsgs { + c := m.Cid() + if _, ok := seen[c]; !ok { + totalLimit += m.GasLimit + seen[c] = struct{}{} + } + } + for _, m := range secpMsgs { + c := m.Cid() + if _, ok := seen[c]; !ok { + totalLimit += m.Message.GasLimit + seen[c] = struct{}{} + } + } + } + + parentBaseFee := ts.Blocks()[0].ParentBaseFee + + return ComputeNextBaseFee(parentBaseFee, totalLimit, len(ts.Blocks()), baseHeight, upgrade), nil +} + +func GetReceiptRoot(receipts []types.MessageReceipt) (cid.Cid, error) { + bs := blockstore.NewBlockstore(datastore.NewMapDatastore()) + as := cbor.NewCborStore(bs) + rectarr := adt.MakeEmptyArray(adt.WrapStore(context.TODO(), as)) + for i, receipt := range receipts { + if err := rectarr.Set(uint64(i), &receipt); err != nil { + return cid.Undef, errors.Wrapf(err, "failed to build receipts amt") + } + } + return rectarr.Root() +} + +func GetChainMsgRoot(ctx context.Context, messages []types.ChainMsg) (cid.Cid, error) { + tmpbs := blockstoreutil.NewTemporary() + tmpstore := adt.WrapStore(ctx, cbor.NewCborStore(tmpbs)) + + arr := adt.MakeEmptyArray(tmpstore) + + for i, m := range messages { + b, err := m.ToStorageBlock() + if err != nil { + return cid.Undef, err + } + k := cbg.CborCid(b.Cid()) + if err := arr.Set(uint64(i), &k); err != nil { + return cid.Undef, errors.Wrap(err, "failed to put message") + } + } + + return arr.Root() +} + +// computeMsgMeta computes the root CID of the combined arrays of message CIDs +// of both types (BLS and Secpk). +func ComputeMsgMeta(bs blockstore.Blockstore, bmsgCids, smsgCids []cid.Cid) (cid.Cid, error) { + // block headers use adt0 + store := adt.WrapStore(context.TODO(), cbor.NewCborStore(bs)) + bmArr := adt.MakeEmptyArray(store) + smArr := adt.MakeEmptyArray(store) + + for i, m := range bmsgCids { + c := cbg.CborCid(m) + if err := bmArr.Set(uint64(i), &c); err != nil { + return cid.Undef, err + } + } + + for i, m := range smsgCids { + c := cbg.CborCid(m) + if err := smArr.Set(uint64(i), &c); err != nil { + return cid.Undef, err + } + } + + bmroot, err := bmArr.Root() + if err != nil { + return cid.Undef, err + } + + smroot, err := smArr.Root() + if err != nil { + return cid.Undef, err + } + + mrcid, err := store.Put(store.Context(), &types.MessageRoot{ + BlsRoot: bmroot, + SecpkRoot: smroot, + }) + if err != nil { + return cid.Undef, errors.Wrap(err, "failed to put msgmeta") + } + + return mrcid, nil +} diff --git a/pkg/chain/message_store_test.go b/pkg/chain/message_store_test.go new file mode 100644 index 0000000000..c40a62761b --- /dev/null +++ b/pkg/chain/message_store_test.go @@ -0,0 +1,67 @@ +package chain_test + +import ( + "context" + "testing" + + "github.com/ipfs/go-datastore" + blockstore "github.com/ipfs/go-ipfs-blockstore" + "github.com/stretchr/testify/assert" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/testhelpers" + "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func TestMessageStoreMessagesHappy(t *testing.T) { + testflags.UnitTest(t) + ctx := context.Background() + keys := testhelpers.MustGenerateKeyInfo(2, 42) + mm := testhelpers.NewMessageMaker(t, keys) + + alice := mm.Addresses()[0] + bob := mm.Addresses()[1] + + msgs := []*types.SignedMessage{ + mm.NewSignedMessage(alice, 0), + mm.NewSignedMessage(alice, 1), + mm.NewSignedMessage(bob, 0), + mm.NewSignedMessage(alice, 2), + mm.NewSignedMessage(alice, 3), + mm.NewSignedMessage(bob, 1), + mm.NewSignedMessage(alice, 4), + mm.NewSignedMessage(bob, 2), + } + + bs := blockstore.NewBlockstore(datastore.NewMapDatastore()) + ms := chain.NewMessageStore(bs, config.DefaultForkUpgradeParam) + msgsCid, err := ms.StoreMessages(ctx, msgs, []*types.Message{}) + assert.NoError(t, err) + + rtMsgs, _, err := ms.LoadMetaMessages(ctx, msgsCid) + assert.NoError(t, err) + + assert.Equal(t, msgs, rtMsgs) +} + +func TestMessageStoreReceiptsHappy(t *testing.T) { + ctx := context.Background() + mr := testhelpers.NewReceiptMaker() + + receipts := []types.MessageReceipt{ + mr.NewReceipt(), + mr.NewReceipt(), + mr.NewReceipt(), + } + + bs := blockstore.NewBlockstore(datastore.NewMapDatastore()) + ms := chain.NewMessageStore(bs, config.DefaultForkUpgradeParam) + receiptCids, err := ms.StoreReceipts(ctx, receipts) + assert.NoError(t, err) + + rtReceipts, err := ms.LoadReceipts(ctx, receiptCids) + assert.NoError(t, err) + assert.Equal(t, receipts, rtReceipts) +} diff --git a/pkg/chain/randomness.go b/pkg/chain/randomness.go new file mode 100644 index 0000000000..48bfdbd1aa --- /dev/null +++ b/pkg/chain/randomness.go @@ -0,0 +1,307 @@ +package chain + +import ( + "bytes" + "context" + "encoding/binary" + "math/rand" + + "github.com/filecoin-project/venus/pkg/beacon" + types "github.com/filecoin-project/venus/venus-shared/chain" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/minio/blake2b-simd" + "github.com/pkg/errors" +) + +type RandomSeed []byte + +var _ RandomnessSource = (*GenesisRandomnessSource)(nil) + +// A sampler for use when computing genesis state (the state that the genesis block points to as parent state). +// There is no chain to sample a seed from. +type GenesisRandomnessSource struct { + vrf types.VRFPi +} + +func NewGenesisRandomnessSource(vrf types.VRFPi) *GenesisRandomnessSource { + return &GenesisRandomnessSource{vrf: vrf} +} + +func (g *GenesisRandomnessSource) ChainGetRandomnessFromBeacon(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + out := make([]byte, 32) + _, _ = rand.New(rand.NewSource(int64(randEpoch))).Read(out) //nolint + return out, nil +} + +func (g *GenesisRandomnessSource) ChainGetRandomnessFromTickets(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + out := make([]byte, 32) + _, _ = rand.New(rand.NewSource(int64(randEpoch))).Read(out) //nolint + return out, nil +} + +func (g *GenesisRandomnessSource) GetChainRandomnessV1(ctx context.Context, pers crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) ([]byte, error) { + out := make([]byte, 32) + _, _ = rand.New(rand.NewSource(int64(randEpoch * 1000))).Read(out) //nolint + return out, nil +} + +func (g *GenesisRandomnessSource) GetChainRandomnessV2(ctx context.Context, pers crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) ([]byte, error) { + out := make([]byte, 32) + _, _ = rand.New(rand.NewSource(int64(randEpoch * 1000))).Read(out) //nolint + return out, nil +} + +func (g *GenesisRandomnessSource) GetBeaconRandomnessV3(ctx context.Context, pers crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) ([]byte, error) { + out := make([]byte, 32) + _, _ = rand.New(rand.NewSource(int64(randEpoch))).Read(out) //nolint + return out, nil +} + +func (g *GenesisRandomnessSource) GetBeaconRandomnessV1(ctx context.Context, pers crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) ([]byte, error) { + out := make([]byte, 32) + _, _ = rand.New(rand.NewSource(int64(randEpoch))).Read(out) //nolint + return out, nil +} + +func (g *GenesisRandomnessSource) GetBeaconRandomnessV2(ctx context.Context, pers crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) ([]byte, error) { + out := make([]byte, 32) + _, _ = rand.New(rand.NewSource(int64(randEpoch))).Read(out) //nolint + return out, nil +} + +// Computes a random seed from raw ticket bytes. +// A randomness seed is the VRF digest of the minimum ticket of the tipset at or before the requested epoch +func MakeRandomSeed(rawVRFProof types.VRFPi) (RandomSeed, error) { + digest := rawVRFProof.Digest() + return digest[:], nil +} + +///// GetRandomnessFromTickets derivation ///// + +// RandomnessSource provides randomness to actors. +type RandomnessSource interface { + GetChainRandomnessV1(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) + GetChainRandomnessV2(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) + GetBeaconRandomnessV1(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) + GetBeaconRandomnessV2(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) + GetBeaconRandomnessV3(ctx context.Context, pers crypto.DomainSeparationTag, filecoinEpoch abi.ChainEpoch, entropy []byte) ([]byte, error) +} + +type TipSetByHeight interface { + GetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) + GetTipSetByHeight(context.Context, *types.TipSet, abi.ChainEpoch, bool) (*types.TipSet, error) +} + +var _ RandomnessSource = (*ChainRandomnessSource)(nil) + +// A randomness source that seeds computations with a sample drawn from a chain epoch. +type ChainRandomnessSource struct { //nolint + reader TipSetByHeight + head types.TipSetKey + beacon beacon.Schedule +} + +func NewChainRandomnessSource(reader TipSetByHeight, head types.TipSetKey, beacon beacon.Schedule) RandomnessSource { + return &ChainRandomnessSource{reader: reader, head: head, beacon: beacon} +} + +func (c *ChainRandomnessSource) GetBeaconRandomnessTipset(ctx context.Context, randEpoch abi.ChainEpoch, lookback bool) (*types.TipSet, error) { + ts, err := c.reader.GetTipSet(ctx, c.head) + if err != nil { + return nil, err + } + + if randEpoch > ts.Height() { + return nil, xerrors.Errorf("cannot draw randomness from the future") + } + + searchHeight := randEpoch + if searchHeight < 0 { + searchHeight = 0 + } + + randTS, err := c.reader.GetTipSetByHeight(ctx, ts, searchHeight, lookback) + if err != nil { + return nil, err + } + return randTS, nil +} + +// Draws a ticket from the chain identified by `head` and the highest tipset with height <= `epoch`. +// If `head` is empty (as when processing the pre-genesis state or the genesis block), the seed derived from +// a fixed genesis ticket. +// Note that this may produce the same value for different, neighbouring epochs when the epoch references a round +// in which no blocks were produced (an empty tipset or "null block"). A caller desiring a unique see for each epoch +// should blend in some distinguishing value (such as the epoch itself) into a hash of this ticket. +func (c *ChainRandomnessSource) GetChainRandomness(ctx context.Context, epoch abi.ChainEpoch, lookback bool) (types.Ticket, error) { + if !c.head.IsEmpty() { + start, err := c.reader.GetTipSet(ctx, c.head) + if err != nil { + return types.Ticket{}, err + } + + if epoch > start.Height() { + return types.Ticket{}, xerrors.Errorf("cannot draw randomness from the future") + } + + searchHeight := epoch + if searchHeight < 0 { + searchHeight = 0 + } + + // Note: it is not an error to have epoch > start.Height(); in the case of a run of null blocks the + // sought-after height may be after the base (last non-empty) tipset. + // It's also not an error for the requested epoch to be negative. + tip, err := c.reader.GetTipSetByHeight(ctx, start, searchHeight, lookback) + if err != nil { + return types.Ticket{}, err + } + return *tip.MinTicket(), nil + } + return types.Ticket{}, xerrors.Errorf("cannot get ticket for empty tipset") +} + +// network v0-12 +func (c *ChainRandomnessSource) GetChainRandomnessV1(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + ticket, err := c.GetChainRandomness(ctx, round, true) + if err != nil { + return nil, err + } + // if at (or just past -- for null epochs) appropriate epoch + // or at genesis (works for negative epochs) + return DrawRandomness(ticket.VRFProof, pers, round, entropy) +} + +// network v13 and on +func (c *ChainRandomnessSource) GetChainRandomnessV2(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + ticket, err := c.GetChainRandomness(ctx, round, false) + if err != nil { + return nil, err + } + // if at (or just past -- for null epochs) appropriate epoch + // or at genesis (works for negative epochs) + return DrawRandomness(ticket.VRFProof, pers, round, entropy) +} + +// network v0-12 +func (c *ChainRandomnessSource) GetBeaconRandomnessV1(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + randTS, err := c.GetBeaconRandomnessTipset(ctx, round, true) + if err != nil { + return nil, err + } + + be, err := FindLatestDRAND(ctx, randTS, c.reader) + if err != nil { + return nil, err + } + + // if at (or just past -- for null epochs) appropriate epoch + // or at genesis (works for negative epochs) + return DrawRandomness(be.Data, pers, round, entropy) +} + +// network v13 +func (c *ChainRandomnessSource) GetBeaconRandomnessV2(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + randTS, err := c.GetBeaconRandomnessTipset(ctx, round, false) + if err != nil { + return nil, err + } + + be, err := FindLatestDRAND(ctx, randTS, c.reader) + if err != nil { + return nil, err + } + + // if at (or just past -- for null epochs) appropriate epoch + // or at genesis (works for negative epochs) + return DrawRandomness(be.Data, pers, round, entropy) +} + +// network v14 and on +func (c *ChainRandomnessSource) GetBeaconRandomnessV3(ctx context.Context, pers crypto.DomainSeparationTag, filecoinEpoch abi.ChainEpoch, entropy []byte) ([]byte, error) { + if filecoinEpoch < 0 { + return c.GetBeaconRandomnessV2(ctx, pers, filecoinEpoch, entropy) + } + + be, err := c.extractBeaconEntryForEpoch(ctx, filecoinEpoch) + if err != nil { + log.Errorf("failed to get beacon entry as expected: %w", err) + return nil, err + } + + return DrawRandomness(be.Data, pers, filecoinEpoch, entropy) +} + +func (c *ChainRandomnessSource) extractBeaconEntryForEpoch(ctx context.Context, filecoinEpoch abi.ChainEpoch) (*types.BeaconEntry, error) { + randTS, err := c.GetBeaconRandomnessTipset(ctx, filecoinEpoch, false) + if err != nil { + return nil, err + } + + round := c.beacon.BeaconForEpoch(filecoinEpoch).MaxBeaconRoundForEpoch(filecoinEpoch) + + for i := 0; i < 20; i++ { + cbe := randTS.Blocks()[0].BeaconEntries + for _, v := range cbe { + if v.Round == round { + return &v, nil + } + } + + next, err := c.reader.GetTipSet(ctx, randTS.Parents()) + if err != nil { + return nil, xerrors.Errorf("failed to load parents when searching back for beacon entry: %w", err) + } + + randTS = next + } + + return nil, xerrors.Errorf("didn't find beacon for round %d (epoch %d)", round, filecoinEpoch) +} + +//BlendEntropy get randomness with chain value. sha256(buf(tag, seed, epoch, entropy)) +func BlendEntropy(tag crypto.DomainSeparationTag, seed RandomSeed, epoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + buffer := bytes.Buffer{} + err := binary.Write(&buffer, binary.BigEndian, int64(tag)) + if err != nil { + return nil, errors.Wrap(err, "failed to write tag for randomness") + } + _, err = buffer.Write(seed) + if err != nil { + return nil, errors.Wrap(err, "failed to write seed for randomness") + } + err = binary.Write(&buffer, binary.BigEndian, int64(epoch)) + if err != nil { + return nil, errors.Wrap(err, "failed to write epoch for randomness") + } + _, err = buffer.Write(entropy) + if err != nil { + return nil, errors.Wrap(err, "failed to write entropy for randomness") + } + bufHash := blake2b.Sum256(buffer.Bytes()) + return bufHash[:], nil +} + +func DrawRandomness(rbase []byte, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + h := blake2b.New256() + if err := binary.Write(h, binary.BigEndian, int64(pers)); err != nil { + return nil, xerrors.Errorf("deriving randomness: %s", err) + } + VRFDigest := blake2b.Sum256(rbase) + _, err := h.Write(VRFDigest[:]) + if err != nil { + return nil, xerrors.Errorf("hashing VRFDigest: %s", err) + } + if err := binary.Write(h, binary.BigEndian, round); err != nil { + return nil, xerrors.Errorf("deriving randomness: %s", err) + } + _, err = h.Write(entropy) + if err != nil { + return nil, xerrors.Errorf("hashing entropy: %s", err) + } + + return h.Sum(nil), nil +} diff --git a/pkg/chain/reorg.go b/pkg/chain/reorg.go new file mode 100644 index 0000000000..45958159af --- /dev/null +++ b/pkg/chain/reorg.go @@ -0,0 +1,32 @@ +package chain + +import ( + "github.com/filecoin-project/go-state-types/abi" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/pkg/errors" +) + +// IsReorg determines if choosing the end of the newChain as the new head +// would cause a "reorg" given the current head is at curHead. +// A reorg occurs when the old head is not a member of the new chain AND the +// old head is not a subset of the new head. +func IsReorg(old, new, commonAncestor *types.TipSet) bool { + oldSortedSet := old.Key() + newSortedSet := new.Key() + + return !(&newSortedSet).ContainsAll(oldSortedSet) && !commonAncestor.Equals(old) +} + +// ReorgDiff returns the dropped and added block heights resulting from the +// reorg given the old and new heads and their common ancestor. +func ReorgDiff(old, new, commonAncestor *types.TipSet) (abi.ChainEpoch, abi.ChainEpoch, error) { + hOld := old.Height() + hNew := new.Height() + hCommon := commonAncestor.Height() + + if hCommon > hOld || hCommon > hNew { + return 0, 0, errors.New("invalid common ancestor") + } + + return hOld - hCommon, hNew - hCommon, nil +} diff --git a/pkg/chain/reorg_test.go b/pkg/chain/reorg_test.go new file mode 100644 index 0000000000..bc155c4ae5 --- /dev/null +++ b/pkg/chain/reorg_test.go @@ -0,0 +1,98 @@ +package chain_test + +import ( + "context" + "testing" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/stretchr/testify/assert" + + "github.com/filecoin-project/venus/pkg/chain" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func TestIsReorgFork(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + + // main chain has 3 blocks past CA, fork has 1 + old, new, common := getForkOldNewCommon(ctx, t, builder, 2, 3, 1) + assert.True(t, chain.IsReorg(old, new, common)) +} +func TestIsReorgPrefix(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + // Old head is a direct ancestor of new head + old, new, common := getForkOldNewCommon(ctx, t, builder, 2, 3, 0) + assert.False(t, chain.IsReorg(old, new, common)) +} + +func TestIsReorgSubset(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + old, new, common := getSubsetOldNewCommon(ctx, t, builder, 2) + assert.False(t, chain.IsReorg(old, new, common)) +} + +func TestReorgDiffFork(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + // main chain has 11 blocks past CA, fork has 10 + old, new, common := getForkOldNewCommon(ctx, t, builder, 10, 11, 10) + + dropped, added, err := chain.ReorgDiff(old, new, common) + assert.NoError(t, err) + assert.Equal(t, abi.ChainEpoch(10), dropped) + assert.Equal(t, abi.ChainEpoch(11), added) +} + +func TestReorgDiffSubset(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + old, new, common := getSubsetOldNewCommon(ctx, t, builder, 10) + + dropped, added, err := chain.ReorgDiff(old, new, common) + assert.NoError(t, err) + assert.Equal(t, abi.ChainEpoch(1), dropped) + assert.Equal(t, abi.ChainEpoch(1), added) +} + +// getForkOldNewCommon is a testing helper function that creates chain with the builder. +// The blockchain forks and the common ancestor block is 'a' (> 0) blocks after the genesis block. +// The main chain has an additional 'b' blocks, the fork has an additional 'c' blocks. +// This function returns the forked head, the main head and the common ancestor. +func getForkOldNewCommon(ctx context.Context, t *testing.T, builder *chain.Builder, a, b, c int) (*types.TipSet, *types.TipSet, *types.TipSet) { + // Add "a" tipsets to the head of the chainStore. + commonHead := builder.AppendManyOn(ctx, a, types.UndefTipSet) + oldHead := commonHead + + if c > 0 { + oldHead = builder.AppendManyOn(ctx, c, commonHead) + } + newHead := builder.AppendManyOn(ctx, b, commonHead) + return oldHead, newHead, commonHead +} + +// getSubsetOldNewCommon is a testing helper function that creates and stores +// a blockchain in the chainStore. The blockchain has 'a' blocks after genesis +// and then a fork. The forked head has a single block and the main chain +// consists of this single block and another block together forming a tipset +// that is a superset of the forked head. +func getSubsetOldNewCommon(ctx context.Context, t *testing.T, builder *chain.Builder, a int) (*types.TipSet, *types.TipSet, *types.TipSet) { + commonHead := builder.AppendManyBlocksOnBlocks(ctx, a) + block1 := builder.AppendBlockOnBlocks(ctx, commonHead) + block2 := builder.AppendBlockOnBlocks(ctx, commonHead) + + oldHead := testhelpers.RequireNewTipSet(t, block1) + superset := testhelpers.RequireNewTipSet(t, block1, block2) + return oldHead, superset, testhelpers.RequireNewTipSet(t, commonHead) +} diff --git a/pkg/chain/store.go b/pkg/chain/store.go new file mode 100644 index 0000000000..d3ea6ece66 --- /dev/null +++ b/pkg/chain/store.go @@ -0,0 +1,1385 @@ +package chain + +import ( + "bytes" + "context" + "fmt" + "io" + "os" + "runtime/debug" + "sync" + + lru "github.com/hashicorp/golang-lru" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + blockstore "github.com/ipfs/go-ipfs-blockstore" + cbor "github.com/ipfs/go-ipld-cbor" + logging "github.com/ipfs/go-log/v2" + "github.com/ipld/go-car" + carutil "github.com/ipld/go-car/util" + "github.com/pkg/errors" + cbg "github.com/whyrusleeping/cbor-gen" + "github.com/whyrusleeping/pubsub" + "go.opencensus.io/trace" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" + blockadt "github.com/filecoin-project/specs-actors/actors/util/adt" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/metrics/tracing" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/util" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + _init "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/multisig" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/reward" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/verifreg" + "github.com/filecoin-project/venus/venus-shared/actors/policy" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// HeadChangeTopic is the topic used to publish new heads. +const ( + HeadChangeTopic = "headchange" + HCRevert = "revert" + HCApply = "apply" + HCCurrent = "current" +) + +// ErrNoMethod is returned by Get when there is no method signature (eg, transfer). +var ErrNoMethod = errors.New("no method") + +// ErrNoActorImpl is returned by Get when the actor implementation doesn't exist, eg +// the actor address is an empty actor, an address that has received a transfer of FIL +// but hasn't yet been upgraded to an account actor. (The actor implementation might +// also genuinely be missing, which is not expected.) +var ErrNoActorImpl = errors.New("no actor implementation") + +// GenesisKey is the key at which the genesis Cid is written in the datastore. +var GenesisKey = datastore.NewKey("/consensus/genesisCid") + +var log = logging.Logger("chain.store") + +// HeadKey is the key at which the head tipset cid's are written in the datastore. +var HeadKey = datastore.NewKey("/chain/heaviestTipSet") + +var ErrNotifeeDone = errors.New("notifee is done and should be removed") + +type loadTipSetFunc func(context.Context, types.TipSetKey) (*types.TipSet, error) + +// ReorgNotifee represents a callback that gets called upon reorgs. +type ReorgNotifee func(rev, app []*types.TipSet) error + +type reorg struct { + old []*types.TipSet + new []*types.TipSet +} + +// CheckPoint is the key which the check-point written in the datastore. +var CheckPoint = datastore.NewKey("/chain/checkPoint") + +//TSState export this func is just for gen cbor tool to work +type TSState struct { + StateRoot cid.Cid + Receipts cid.Cid +} + +func ActorStore(ctx context.Context, bs blockstore.Blockstore) adt.Store { + return adt.WrapStore(ctx, cbor.NewCborStore(bs)) +} + +// Store is a generic implementation of the Store interface. +// It works(tm) for now. +type Store struct { + // ipldSource is a wrapper around ipld storage. It is used + // for reading filecoin block and state objects kept by the node. + stateAndBlockSource cbor.IpldStore + + bsstore blockstore.Blockstore + + // ds is the datastore for the chain's private metadata which consists + // of the tipset key to state root cid mapping, and the heaviest tipset + // key. + ds repo.Datastore + + // genesis is the CID of the genesis block. + genesis cid.Cid + // head is the tipset at the head of the best known chain. + head *types.TipSet + + checkPoint types.TipSetKey + // Protects head and genesisCid. + mu sync.RWMutex + + // headEvents is a pubsub channel that publishes an event every time the head changes. + // We operate under the assumption that tipsets published to this channel + // will always be queued and delivered to subscribers in the order discovered. + // Successive published tipsets may be supersets of previously published tipsets. + // TODO: rename to notifications. Also, reconsider ordering assumption depending + // on decisions made around the FC node notification system. + // TODO: replace this with a synchronous event bus + // https://github.com/filecoin-project/venus/issues/2309 + headEvents *pubsub.PubSub + + // Tracks tipsets by height/parentset for use by expected consensus. + tipIndex *TipStateCache + + circulatingSupplyCalculator ICirculatingSupplyCalcualtor + + chainIndex *ChainIndex + + reorgCh chan reorg + reorgNotifeeCh chan ReorgNotifee + + tsCache *lru.ARCCache +} + +// NewStore constructs a new default store. +func NewStore(chainDs repo.Datastore, + bsstore blockstore.Blockstore, + genesisCid cid.Cid, + circulatiingSupplyCalculator ICirculatingSupplyCalcualtor, +) *Store { + tsCache, _ := lru.NewARC(10000) + store := &Store{ + stateAndBlockSource: cbor.NewCborStore(bsstore), + ds: chainDs, + bsstore: bsstore, + headEvents: pubsub.New(64), + + checkPoint: types.EmptyTSK, + genesis: genesisCid, + reorgNotifeeCh: make(chan ReorgNotifee), + tsCache: tsCache, + } + //todo cycle reference , may think a better idea + store.tipIndex = NewTipStateCache(store) + store.chainIndex = NewChainIndex(store.GetTipSet) + store.circulatingSupplyCalculator = circulatiingSupplyCalculator + + val, err := store.ds.Get(context.TODO(), CheckPoint) + if err != nil { + store.checkPoint = types.NewTipSetKey(genesisCid) + } else { + _ = store.checkPoint.UnmarshalCBOR(bytes.NewReader(val)) //nolint:staticcheck + } + log.Infof("check point value: %v", store.checkPoint) + + store.reorgCh = store.reorgWorker(context.TODO()) + return store +} + +func (store *Store) rollbackToTipset(ctx context.Context, key types.TipSetKey) error { + var target, err = store.GetTipSet(ctx, key) + if err != nil { + return err + } + + log.Infof("rollback chain head to tipset:%s, %d", target.String(), target.Height()) + + var head *types.TipSet + + if head, err = store.loadHead(ctx); err != nil { + return err + } + + if head.Height() < target.Height() { + return fmt.Errorf("can't rollback to a tipset(%d) higher than chain head(%d)", + target.Height(), head.Height()) + } + + var toRemoveTS = make([]*types.TipSet, 0, int(head.Height()-target.Height())) + + for !head.Equals(target) && head.Height() > target.Height() { + toRemoveTS = append(toRemoveTS, head) + if head, err = store.GetTipSet(ctx, head.Parents()); err != nil { + return err + } + } + + if !head.Equals(target) { + return fmt.Errorf("target(%s) is not on main path", key.String()) + } + + for _, ts := range toRemoveTS { + _ = store.DeleteTipSetMetadata(ctx, ts) + } + + return store.SetHead(context.TODO(), head) + +} + +// Load rebuilds the Store's caches by traversing backwards from the +// most recent best head as stored in its datastore. Because Load uses a +// content addressed datastore it guarantees that parent blocks are correctly +// resolved from the datastore. Furthermore Load ensures that all tipsets +// references correctly have the same parent height, weight and parent set. +// However, Load DOES NOT validate state transitions, it assumes that the +// tipset were only Put to the Store after checking for valid transitions. +// +// Furthermore Load trusts that the Store's backing datastore correctly +// preserves the cids of the heaviest tipset under the "HeadKey" datastore key. +// If the HeadKey cids are tampered with and invalid blocks added to the datastore +// then Load could be tricked into loading an invalid chain. Load will error if the +// head does not link back to the expected genesis block, or the Store's +// datastore does not store a link in the chain. In case of error the caller +// should not consider the chain useable and propagate the error. +func (store *Store) Load(ctx context.Context) (err error) { + ctx, span := trace.StartSpan(ctx, "Store.Load") + defer tracing.AddErrorEndSpan(ctx, span, &err) + + var headTS *types.TipSet + + if vch := os.Getenv("VENUS_CHAIN_HEAD"); len(vch) != 0 { + var headKey types.TipSetKey + log.Infof("load chain head from environment 'VENUS_CHAIN_HEAD'") + if err = headKey.UnmarshalJSON([]byte(vch)); err != nil { + log.Warnf("can't unmarshal environment tipsetkey:%s", vch) + headKey = types.EmptyTSK + } + if err = store.rollbackToTipset(ctx, headKey); err != nil { + return xerrors.Errorf("rollback to tipset(%s) failed:%v", headKey.String(), err) + } + } + + if headTS, err = store.loadHead(ctx); err != nil { + return err + } + + // if venus process is terminated ungracefully, + // the chain head state may not be computed and stored, + // but it's sure that it's parent state is stored.. + if headTS.Height() > abi.ChainEpoch(0) { + var meta *TipSetMetadata + if meta, err = store.LoadTipsetMetadata(ctx, headTS); err != nil || meta == nil { + if headTS, err = store.GetTipSet(ctx, headTS.Parents()); err != nil { + return err + } + } + } + + latestHeight := headTS.At(0).Height + loopBack := latestHeight - policy.ChainFinality + log.Infof("start loading chain at tipset: %s, height: %d", headTS.Key(), headTS.Height()) + // Provide tipsets directly from the block store, not from the tipset index which is + // being rebuilt by this traversal. + tipsetProvider := TipSetProviderFromBlocks(ctx, store) + for iterator := IterAncestors(ctx, tipsetProvider, headTS); !iterator.Complete(); err = iterator.Next(ctx) { + if err != nil { + return err + } + ts := iterator.Value() + + tipSetMetadata, err := store.LoadTipsetMetadata(ctx, ts) + if err != nil { + return err + } + + store.tipIndex.Put(tipSetMetadata) + + if ts.Height() <= loopBack { + break + } + } + log.Infof("finished loading %d tipsets from %s", latestHeight, headTS.String()) + // Set actual head. + return store.SetHead(ctx, headTS) +} + +// loadHead loads the latest known head from disk. +func (store *Store) loadHead(ctx context.Context) (*types.TipSet, error) { + tskBytes, err := store.ds.Get(ctx, HeadKey) + if err != nil { + return nil, errors.Wrap(err, "failed to read HeadKey") + } + + var tsk types.TipSetKey + err = tsk.UnmarshalCBOR(bytes.NewReader(tskBytes)) + if err != nil { + return nil, errors.Wrap(err, "failed to cast headCids") + } + + return store.GetTipSet(ctx, tsk) +} + +//LoadTipsetMetadata load tipset status (state root and reciepts) +func (store *Store) LoadTipsetMetadata(ctx context.Context, ts *types.TipSet) (*TipSetMetadata, error) { + h := ts.Height() + key := datastore.NewKey(makeKey(ts.String(), h)) + + tsStateBytes, err := store.ds.Get(ctx, key) + if err != nil { + return nil, errors.Wrapf(err, "failed to read tipset key %s", ts.String()) + } + + var metadata TSState + err = metadata.UnmarshalCBOR(bytes.NewReader(tsStateBytes)) + if err != nil { + return nil, errors.Wrapf(err, "failed to decode tip set metadata %s", ts.String()) + } + return &TipSetMetadata{ + TipSet: ts, + TipSetStateRoot: metadata.StateRoot, + TipSetReceipts: metadata.Receipts, + }, nil +} + +// PutTipSetMetadata persists the blocks of a tipset and the tipset index. +func (store *Store) PutTipSetMetadata(ctx context.Context, tsm *TipSetMetadata) error { + // Update tipindex. + store.tipIndex.Put(tsm) + + // Persist the state mapping. + if err := store.writeTipSetMetadata(ctx, tsm); err != nil { + return err + } + + return nil +} + +// Ls returns an iterator over tipsets from head to genesis. +func (store *Store) Ls(ctx context.Context, fromTS *types.TipSet, count int) ([]*types.TipSet, error) { + tipsets := []*types.TipSet{fromTS} + fromKey := fromTS.Parents() + for i := 0; i < count-1; i++ { + ts, err := store.GetTipSet(ctx, fromKey) + if err != nil { + return nil, err + } + tipsets = append(tipsets, ts) + fromKey = ts.Parents() + } + types.ReverseTipSet(tipsets) + return tipsets, nil +} + +// GetBlock returns the block identified by `cid`. +func (store *Store) GetBlock(ctx context.Context, blockID cid.Cid) (*types.BlockHeader, error) { + var block types.BlockHeader + err := store.stateAndBlockSource.Get(ctx, blockID, &block) + if err != nil { + return nil, errors.Wrapf(err, "failed to get block %s", blockID.String()) + } + return &block, nil +} + +// GetBlock returns the block identified by `cid`. +func (store *Store) PutObject(ctx context.Context, obj interface{}) (cid.Cid, error) { + return store.stateAndBlockSource.Put(ctx, obj) +} + +// GetTipSet returns the tipset identified by `key`. +func (store *Store) GetTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) { + if key.IsEmpty() { + return store.GetHead(), nil + } + + val, has := store.tsCache.Get(key) + if has { + return val.(*types.TipSet), nil + } + + cids := key.Cids() + blks := make([]*types.BlockHeader, len(cids)) + for idx, c := range cids { + blk, err := store.GetBlock(context.TODO(), c) + if err != nil { + return nil, err + } + + blks[idx] = blk + } + + ts, err := types.NewTipSet(blks) + if err != nil { + return nil, err + } + store.tsCache.Add(key, ts) + + return ts, nil +} + +// GetTipSetByHeight looks back for a tipset at the specified epoch. +// If there are no blocks at the specified epoch, a tipset at an earlier epoch +// will be returned. +func (store *Store) GetTipSetByHeight(ctx context.Context, ts *types.TipSet, h abi.ChainEpoch, prev bool) (*types.TipSet, error) { + if ts == nil { + ts = store.head + } + + if h > ts.Height() { + return nil, xerrors.Errorf("looking for tipset with height greater than start point") + } + + if h == ts.Height() { + return ts, nil + } + + lbts, err := store.chainIndex.GetTipSetByHeight(ctx, ts, h) + if err != nil { + return nil, err + } + + if lbts.Height() < h { + log.Warnf("chain index returned the wrong tipset at height %d, using slow retrieval", h) + lbts, err = store.chainIndex.GetTipsetByHeightWithoutCache(ctx, ts, h) + if err != nil { + return nil, err + } + } + + if lbts.Height() == h || !prev { + return lbts, nil + } + + return store.GetTipSet(ctx, lbts.Parents()) +} + +// GetTipSetState returns the aggregate state of the tipset identified by `key`. +func (store *Store) GetTipSetState(ctx context.Context, ts *types.TipSet) (tree.Tree, error) { + if ts == nil { + ts = store.head + } + stateCid, err := store.tipIndex.GetTipSetStateRoot(ctx, ts) + if err != nil { + return nil, err + } + return tree.LoadState(ctx, store.stateAndBlockSource, stateCid) +} + +// GetGenesisBlock returns the genesis block held by the chain store. +func (store *Store) GetGenesisBlock(ctx context.Context) (*types.BlockHeader, error) { + return store.GetBlock(ctx, store.GenesisCid()) +} + +// GetTipSetStateRoot returns the aggregate state root CID of the tipset identified by `key`. +func (store *Store) GetTipSetStateRoot(ctx context.Context, key *types.TipSet) (cid.Cid, error) { + return store.tipIndex.GetTipSetStateRoot(ctx, key) +} + +// GetTipSetReceiptsRoot returns the root CID of the message receipts for the tipset identified by `key`. +func (store *Store) GetTipSetReceiptsRoot(ctx context.Context, key *types.TipSet) (cid.Cid, error) { + return store.tipIndex.GetTipSetReceiptsRoot(ctx, key) +} + +func (store *Store) GetTipsetMetadata(ctx context.Context, ts *types.TipSet) (*TipSetMetadata, error) { + tsStat, err := store.tipIndex.Get(ctx, ts) + if err != nil { + return nil, err + } + return &TipSetMetadata{ + TipSetStateRoot: tsStat.StateRoot, + TipSet: ts, + TipSetReceipts: tsStat.Receipts}, nil +} + +// HasTipSetAndState returns true iff the default store's tipindex is indexing +// the tipset identified by `key`. +func (store *Store) HasTipSetAndState(ctx context.Context, ts *types.TipSet) bool { + return store.tipIndex.Has(ctx, ts) +} + +//GetLatestBeaconEntry get latest beacon from the height. there're no beacon values in the block, try to +//get beacon in the parents tipset. the max find depth is 20. +func (store *Store) GetLatestBeaconEntry(ctx context.Context, ts *types.TipSet) (*types.BeaconEntry, error) { + cur := ts + for i := 0; i < 20; i++ { + cbe := cur.At(0).BeaconEntries + if len(cbe) > 0 { + return &cbe[len(cbe)-1], nil + } + + if cur.Height() == 0 { + return nil, xerrors.Errorf("made it back to genesis block without finding beacon entry") + } + + next, err := store.GetTipSet(ctx, cur.Parents()) + if err != nil { + return nil, xerrors.Errorf("failed to load parents when searching back for latest beacon entry: %w", err) + } + cur = next + } + + if os.Getenv("VENUS_IGNORE_DRAND") == "_yes_" { + return &types.BeaconEntry{ + Data: []byte{9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}, + }, nil + } + + return nil, xerrors.Errorf("found NO beacon entries in the 20 blocks prior to given tipset") +} + +// nolint +func (store *Store) walkBack(ctx context.Context, from *types.TipSet, to abi.ChainEpoch) (*types.TipSet, error) { + if to > from.Height() { + return nil, xerrors.Errorf("looking for tipset with height greater than start point") + } + + if to == from.Height() { + return from, nil + } + + ts := from + + for { + pts, err := store.GetTipSet(ctx, ts.Parents()) + if err != nil { + return nil, err + } + + if to > pts.Height() { + // in case pts is lower than the epoch we're looking for (null blocks) + // return a tipset above that height + return ts, nil + } + if to == pts.Height() { + return pts, nil + } + + ts = pts + } +} + +// SetHead sets the passed in tipset as the new head of this chain. +func (store *Store) SetHead(ctx context.Context, newTS *types.TipSet) error { + log.Infof("SetHead %s %d", newTS.String(), newTS.Height()) + // Add logging to debug sporadic test failure. + if !newTS.Defined() { + log.Errorf("publishing empty tipset") + log.Error(debug.Stack()) + return nil + } + + //reorg tipset + dropped, added, update, err := func() ([]*types.TipSet, []*types.TipSet, bool, error) { + var dropped []*types.TipSet + var added []*types.TipSet + var err error + store.mu.Lock() + defer store.mu.Unlock() + + if store.head != nil { + if store.head.Equals(newTS) { + return nil, nil, false, nil + } + //reorg + oldHead := store.head + dropped, added, err = CollectTipsToCommonAncestor(ctx, store, oldHead, newTS) + if err != nil { + return nil, nil, false, err + } + } else { + added = []*types.TipSet{newTS} + } + + // Ensure consistency by storing this new head on disk. + if errInner := store.writeHead(ctx, newTS.Key()); errInner != nil { + return nil, nil, false, errors.Wrap(errInner, "failed to write new Head to datastore") + } + store.head = newTS + return dropped, added, true, nil + }() + + if err != nil { + return err + } + + if !update { + return nil + } + + //todo wrap by go function + Reverse(added) + //Reverse(dropped) + + //do reorg + store.reorgCh <- reorg{ + old: dropped, + new: added, + } + return nil +} + +func (store *Store) reorgWorker(ctx context.Context) chan reorg { + headChangeNotifee := func(rev, app []*types.TipSet) error { + notif := make([]*apitypes.HeadChange, len(rev)+len(app)) + for i, revert := range rev { + notif[i] = &apitypes.HeadChange{ + Type: HCRevert, + Val: revert, + } + } + + for i, apply := range app { + notif[i+len(rev)] = &apitypes.HeadChange{ + Type: HCApply, + Val: apply, + } + } + + // Publish an event that we have a new head. + store.headEvents.Pub(notif, HeadChangeTopic) + return nil + } + + out := make(chan reorg, 32) + notifees := []ReorgNotifee{headChangeNotifee} + + go func() { + defer log.Warn("reorgWorker quit") + for { + select { + case n := <-store.reorgNotifeeCh: + notifees = append(notifees, n) + + case r := <-out: + var toremove map[int]struct{} + for i, hcf := range notifees { + err := hcf(r.old, r.new) + + switch err { + case nil: + + case ErrNotifeeDone: + if toremove == nil { + toremove = make(map[int]struct{}) + } + toremove[i] = struct{}{} + + default: + log.Error("head change func errored (BAD): ", err) + } + } + + if len(toremove) > 0 { + newNotifees := make([]ReorgNotifee, 0, len(notifees)-len(toremove)) + for i, hcf := range notifees { + _, remove := toremove[i] + if remove { + continue + } + newNotifees = append(newNotifees, hcf) + } + notifees = newNotifees + } + + case <-ctx.Done(): + return + } + } + }() + return out +} + +// SubHeadChanges returns channel with chain head updates. +// First message is guaranteed to be of len == 1, and type == 'current'. +// Then event in the message may be HCApply and HCRevert. +func (store *Store) SubHeadChanges(ctx context.Context) chan []*apitypes.HeadChange { + store.mu.RLock() + subCh := store.headEvents.Sub(HeadChangeTopic) + head := store.head + store.mu.RUnlock() + + out := make(chan []*apitypes.HeadChange, 16) + out <- []*apitypes.HeadChange{{ + Type: HCCurrent, + Val: head, + }} + + go func() { + defer close(out) + var unsubOnce sync.Once + + for { + select { + case val, ok := <-subCh: + if !ok { + log.Warn("chain head sub exit loop") + return + } + + select { + case out <- val.([]*apitypes.HeadChange): + default: + log.Errorf("closing head change subscription due to slow reader") + return + } + if len(out) > 5 { + log.Warnf("head change sub is slow, has %d buffered entries", len(out)) + } + case <-ctx.Done(): + unsubOnce.Do(func() { + go store.headEvents.Unsub(subCh) + }) + } + } + }() + return out +} + +//SubscribeHeadChanges subscribe head change event +func (store *Store) SubscribeHeadChanges(f ReorgNotifee) { + store.reorgNotifeeCh <- f +} + +// ReadOnlyStateStore provides a read-only IPLD store for access to chain state. +func (store *Store) ReadOnlyStateStore() util.ReadOnlyIpldStore { + return util.ReadOnlyIpldStore{IpldStore: store.stateAndBlockSource} +} + +// writeHead writes the given cid set as head to disk. +func (store *Store) writeHead(ctx context.Context, cids types.TipSetKey) error { + log.Debugf("WriteHead %s", cids.String()) + buf := new(bytes.Buffer) + err := cids.MarshalCBOR(buf) + if err != nil { + return err + } + + return store.ds.Put(ctx, HeadKey, buf.Bytes()) +} + +// writeTipSetMetadata writes the tipset key and the state root id to the +// datastore. +func (store *Store) writeTipSetMetadata(ctx context.Context, tsm *TipSetMetadata) error { + if tsm.TipSetStateRoot == cid.Undef { + return errors.New("attempting to write state root cid.Undef") + } + + if tsm.TipSetReceipts == cid.Undef { + return errors.New("attempting to write receipts cid.Undef") + } + + metadata := TSState{ + StateRoot: tsm.TipSetStateRoot, + Receipts: tsm.TipSetReceipts, + } + buf := new(bytes.Buffer) + err := metadata.MarshalCBOR(buf) + if err != nil { + return err + } + // datastore keeps key:stateRoot (k,v) pairs. + h := tsm.TipSet.Height() + key := datastore.NewKey(makeKey(tsm.TipSet.String(), h)) + + return store.ds.Put(ctx, key, buf.Bytes()) +} + +// deleteTipSetMetadata delete the state root id from the datastore for the tipset key. +func (store *Store) DeleteTipSetMetadata(ctx context.Context, ts *types.TipSet) error { // nolint + store.tipIndex.Del(ts) + h := ts.Height() + key := datastore.NewKey(makeKey(ts.String(), h)) + return store.ds.Delete(ctx, key) +} + +// GetHead returns the current head tipset cids. +func (store *Store) GetHead() *types.TipSet { + store.mu.RLock() + defer store.mu.RUnlock() + if !store.head.Defined() { + return types.UndefTipSet + } + + return store.head +} + +// GenesisCid returns the genesis cid of the chain tracked by the default store. +func (store *Store) GenesisCid() cid.Cid { + return store.genesis +} + +// GenesisRootCid returns the genesis root cid of the chain tracked by the default store. +func (store *Store) GenesisRootCid() cid.Cid { + genesis, _ := store.GetBlock(context.TODO(), store.GenesisCid()) + return genesis.ParentStateRoot +} + +func recurseLinks(ctx context.Context, bs blockstore.Blockstore, walked *cid.Set, root cid.Cid, in []cid.Cid) ([]cid.Cid, error) { + if root.Prefix().Codec != cid.DagCBOR { + return in, nil + } + + data, err := bs.Get(ctx, root) + if err != nil { + return nil, xerrors.Errorf("recurse links get (%s) failed: %w", root, err) + } + + var rerr error + err = cbg.ScanForLinks(bytes.NewReader(data.RawData()), func(c cid.Cid) { + if rerr != nil { + // No error return on ScanForLinks :( + return + } + + // traversed this already... + if !walked.Visit(c) { + return + } + + in = append(in, c) + var err error + in, err = recurseLinks(ctx, bs, walked, c, in) + if err != nil { + rerr = err + } + }) + if err != nil { + return nil, xerrors.Errorf("scanning for links failed: %w", err) + } + + return in, rerr +} + +func (store *Store) Export(ctx context.Context, ts *types.TipSet, inclRecentRoots abi.ChainEpoch, skipOldMsgs bool, w io.Writer) error { + h := &car.CarHeader{ + Roots: ts.Cids(), + Version: 1, + } + + if err := car.WriteHeader(h, w); err != nil { + return xerrors.Errorf("failed to write car header: %s", err) + } + + return store.WalkSnapshot(ctx, ts, inclRecentRoots, skipOldMsgs, true, func(c cid.Cid) error { + blk, err := store.bsstore.Get(ctx, c) + if err != nil { + return xerrors.Errorf("writing object to car, bs.Get: %w", err) + } + + if err := carutil.LdWrite(w, c.Bytes(), blk.RawData()); err != nil { + return xerrors.Errorf("failed to write block to car output: %w", err) + } + + return nil + }) +} + +func (store *Store) WalkSnapshot(ctx context.Context, ts *types.TipSet, inclRecentRoots abi.ChainEpoch, skipOldMsgs, skipMsgReceipts bool, cb func(cid.Cid) error) error { + if ts == nil { + ts = store.GetHead() + } + + seen := cid.NewSet() + walked := cid.NewSet() + + blocksToWalk := ts.Cids() + currentMinHeight := ts.Height() + + walkChain := func(blk cid.Cid) error { + if !seen.Visit(blk) { + return nil + } + + if err := cb(blk); err != nil { + return err + } + + data, err := store.bsstore.Get(ctx, blk) + if err != nil { + return xerrors.Errorf("getting block: %w", err) + } + + var b types.BlockHeader + if err := b.UnmarshalCBOR(bytes.NewBuffer(data.RawData())); err != nil { + return xerrors.Errorf("unmarshaling block header (cid=%s): %w", blk, err) + } + + if currentMinHeight > b.Height { + currentMinHeight = b.Height + if currentMinHeight%builtin.EpochsInDay == 0 { + log.Infow("export", "height", currentMinHeight) + } + } + + var cids []cid.Cid + if !skipOldMsgs || b.Height > ts.Height()-inclRecentRoots { + if walked.Visit(b.Messages) { + mcids, err := recurseLinks(ctx, store.bsstore, walked, b.Messages, []cid.Cid{b.Messages}) + if err != nil { + return xerrors.Errorf("recursing messages failed: %w", err) + } + cids = mcids + } + } + + if b.Height > 0 { + blocksToWalk = append(blocksToWalk, b.Parents...) + } else { + // include the genesis block + cids = append(cids, b.Parents...) + } + + out := cids + + if b.Height == 0 || b.Height > ts.Height()-inclRecentRoots { + if walked.Visit(b.ParentStateRoot) { + cids, err := recurseLinks(ctx, store.bsstore, walked, b.ParentStateRoot, []cid.Cid{b.ParentStateRoot}) + if err != nil { + return xerrors.Errorf("recursing genesis state failed: %w", err) + } + + out = append(out, cids...) + } + + if !skipMsgReceipts && walked.Visit(b.ParentMessageReceipts) { + out = append(out, b.ParentMessageReceipts) + } + } + + for _, c := range out { + if seen.Visit(c) { + if c.Prefix().Codec != cid.DagCBOR { + continue + } + + if err := cb(c); err != nil { + return err + } + + } + } + + return nil + } + + log.Infow("export started") + exportStart := constants.Clock.Now() + + for len(blocksToWalk) > 0 { + next := blocksToWalk[0] + blocksToWalk = blocksToWalk[1:] + if err := walkChain(next); err != nil { + return xerrors.Errorf("walk chain failed: %w", err) + } + } + + log.Infow("export finished", "duration", constants.Clock.Now().Sub(exportStart).Seconds()) + + return nil +} + +//Import import a car file into local db +func (store *Store) Import(ctx context.Context, r io.Reader) (*types.TipSet, error) { + header, err := car.LoadCar(ctx, store.bsstore, r) + if err != nil { + return nil, xerrors.Errorf("loadcar failed: %w", err) + } + + root, err := store.GetTipSet(ctx, types.NewTipSetKey(header.Roots...)) + if err != nil { + return nil, xerrors.Errorf("failed to load root tipset from chainfile: %w", err) + } + + // Notice here is different with lotus, because the head tipset in lotus is not computed, + // but in venus the head tipset is computed, so here we will fallback a pre tipset + // and the chain store must has a metadata for each tipset, below code is to build the tipset metadata + + // Todo What to do if it is less than 900 + var ( + loopBack = 900 + curTipset = root + ) + + log.Info("import height: ", root.Height(), " root: ", root.String(), " parents: ", root.At(0).Parents) + for i := 0; i < loopBack; i++ { + if curTipset.Height() <= 0 { + break + } + curTipsetKey := curTipset.Parents() + curParentTipset, err := store.GetTipSet(ctx, curTipsetKey) + if err != nil { + return nil, xerrors.Errorf("failed to load root tipset from chainfile: %w", err) + } + + if curParentTipset.Height() == 0 { + break + } + + //save fake root + err = store.PutTipSetMetadata(context.Background(), &TipSetMetadata{ + TipSetStateRoot: curTipset.At(0).ParentStateRoot, + TipSet: curParentTipset, + TipSetReceipts: curTipset.At(0).ParentMessageReceipts, + }) + if err != nil { + return nil, err + } + curTipset = curParentTipset + } + + if root.Height() > 0 { + root, err = store.GetTipSet(ctx, root.Parents()) + if err != nil { + return nil, xerrors.Errorf("failed to load root tipset from chainfile: %w", err) + } + } + return root, nil +} + +// SetCheckPoint set current checkpoint +func (store *Store) SetCheckPoint(checkPoint types.TipSetKey) { + store.checkPoint = checkPoint +} + +// WriteCheckPoint writes the given cids to disk. +func (store *Store) WriteCheckPoint(ctx context.Context, cids types.TipSetKey) error { + log.Infof("WriteCheckPoint %v", cids) + buf := new(bytes.Buffer) + err := cids.MarshalCBOR(buf) + if err != nil { + return err + } + return store.ds.Put(ctx, CheckPoint, buf.Bytes()) +} + +func (store *Store) GetCirculatingSupplyDetailed(ctx context.Context, height abi.ChainEpoch, st tree.Tree) (types.CirculatingSupply, error) { + return store.circulatingSupplyCalculator.GetCirculatingSupplyDetailed(ctx, height, st) +} + +//StateCirculatingSupply get circulate supply at specify epoch +func (store *Store) StateCirculatingSupply(ctx context.Context, tsk types.TipSetKey) (abi.TokenAmount, error) { + ts, err := store.GetTipSet(ctx, tsk) + if err != nil { + return abi.TokenAmount{}, err + } + + root, err := store.GetTipSetStateRoot(ctx, ts) + if err != nil { + return abi.TokenAmount{}, err + } + + sTree, err := tree.LoadState(ctx, store.stateAndBlockSource, root) + if err != nil { + return abi.TokenAmount{}, err + } + + return store.getCirculatingSupply(ctx, ts.Height(), sTree) +} + +func (store *Store) getCirculatingSupply(ctx context.Context, height abi.ChainEpoch, st tree.Tree) (abi.TokenAmount, error) { + adtStore := adt.WrapStore(ctx, store.stateAndBlockSource) + circ := big.Zero() + unCirc := big.Zero() + err := st.ForEach(func(a address.Address, actor *types.Actor) error { + switch { + case actor.Balance.IsZero(): + // Do nothing for zero-balance actors + break + case a == _init.Address || + a == reward.Address || + a == verifreg.Address || + // The power actor itself should never receive funds + a == power.Address || + a == builtin.SystemActorAddr || + a == builtin.CronActorAddr || + a == builtin.BurntFundsActorAddr || + a == builtin.SaftAddress || + a == builtin.ReserveAddress: + + unCirc = big.Add(unCirc, actor.Balance) + + case a == market.Address: + mst, err := market.Load(adtStore, actor) + if err != nil { + return err + } + + lb, err := mst.TotalLocked() + if err != nil { + return err + } + + circ = big.Add(circ, big.Sub(actor.Balance, lb)) + unCirc = big.Add(unCirc, lb) + + case builtin.IsAccountActor(actor.Code) || builtin.IsPaymentChannelActor(actor.Code): + circ = big.Add(circ, actor.Balance) + + case builtin.IsStorageMinerActor(actor.Code): + mst, err := miner.Load(adtStore, actor) + if err != nil { + return err + } + + ab, err := mst.AvailableBalance(actor.Balance) + + if err == nil { + circ = big.Add(circ, ab) + unCirc = big.Add(unCirc, big.Sub(actor.Balance, ab)) + } else { + // Assume any error is because the miner state is "broken" (lower actor balance than locked funds) + // In this case, the actor's entire balance is considered "uncirculating" + unCirc = big.Add(unCirc, actor.Balance) + } + + case builtin.IsMultisigActor(actor.Code): + mst, err := multisig.Load(adtStore, actor) + if err != nil { + return err + } + + lb, err := mst.LockedBalance(height) + if err != nil { + return err + } + + ab := big.Sub(actor.Balance, lb) + circ = big.Add(circ, big.Max(ab, big.Zero())) + unCirc = big.Add(unCirc, big.Min(actor.Balance, lb)) + default: + return xerrors.Errorf("unexpected actor: %s", a) + } + + return nil + }) + + if err != nil { + return abi.TokenAmount{}, err + } + + total := big.Add(circ, unCirc) + if !total.Equals(types.TotalFilecoinInt) { + return abi.TokenAmount{}, xerrors.Errorf("total filecoin didn't add to expected amount: %s != %s", total, types.TotalFilecoinInt) + } + + return circ, nil +} + +// GetCheckPoint get the check point from store or disk. +func (store *Store) GetCheckPoint() types.TipSetKey { + return store.checkPoint +} + +// Stop stops all activities and cleans up. +func (store *Store) Stop() { + store.headEvents.Shutdown() +} + +// ReorgOps used to reorganize the blockchain. Whenever a new tipset is approved, +// the new tipset compared with the local tipset to obtain which tipset need to be revert and which tipsets are applied +func (store *Store) ReorgOps(a, b *types.TipSet) ([]*types.TipSet, []*types.TipSet, error) { + return ReorgOps(store.GetTipSet, a, b) +} + +// ReorgOps takes two tipsets (which can be at different heights), and walks +// their corresponding chains backwards one step at a time until we find +// a common ancestor. It then returns the respective chain segments that fork +// from the identified ancestor, in reverse order, where the first element of +// each slice is the supplied tipset, and the last element is the common +// ancestor. +// +// If an error happens along the way, we return the error with nil slices. +// todo should move this code into store.ReorgOps. anywhere use this function should invoke store.ReorgOps +func ReorgOps(lts func(context.Context, types.TipSetKey) (*types.TipSet, error), a, b *types.TipSet) ([]*types.TipSet, []*types.TipSet, error) { + left := a + right := b + + var leftChain, rightChain []*types.TipSet + for !left.Equals(right) { + if left.Height() > right.Height() { + leftChain = append(leftChain, left) + par, err := lts(context.TODO(), left.Parents()) + if err != nil { + return nil, nil, err + } + + left = par + } else { + rightChain = append(rightChain, right) + par, err := lts(context.TODO(), right.Parents()) + if err != nil { + log.Infof("failed to fetch right.Parents: %s", err) + return nil, nil, err + } + + right = par + } + } + + return leftChain, rightChain, nil + +} + +// PutMessage put message in local db +func (store *Store) PutMessage(ctx context.Context, m storable) (cid.Cid, error) { + return PutMessage(ctx, store.bsstore, m) +} + +// Blockstore return local blockstore +// todo remove this method, and code that need blockstore should get from blockstore submodule +func (store *Store) Blockstore() blockstore.Blockstore { // nolint + return store.bsstore +} + +// GetParentReceipt get the receipt of parent tipset at specify message slot +func (store *Store) GetParentReceipt(b *types.BlockHeader, i int) (*types.MessageReceipt, error) { + ctx := context.TODO() + // block headers use adt0, for now. + a, err := blockadt.AsArray(adt.WrapStore(ctx, store.stateAndBlockSource), b.ParentMessageReceipts) + if err != nil { + return nil, xerrors.Errorf("amt load: %w", err) + } + + var r types.MessageReceipt + if found, err := a.Get(uint64(i), &r); err != nil { + return nil, err + } else if !found { + return nil, xerrors.Errorf("failed to find receipt %d", i) + } + + return &r, nil +} + +// GetLookbackTipSetForRound get loop back tipset and state root +func (store *Store) GetLookbackTipSetForRound(ctx context.Context, ts *types.TipSet, round abi.ChainEpoch, version network.Version) (*types.TipSet, cid.Cid, error) { + var lbr abi.ChainEpoch + + lb := policy.GetWinningPoStSectorSetLookback(version) + if round > lb { + lbr = round - lb + } + + // more null blocks than our lookback + h := ts.Height() + if lbr >= h { + // This should never happen at this point, but may happen before + // network version 3 (where the lookback was only 10 blocks). + st, err := store.GetTipSetStateRoot(ctx, ts) + if err != nil { + return nil, cid.Undef, err + } + return ts, st, nil + } + + // Get the tipset after the lookback tipset, or the next non-null one. + nextTS, err := store.GetTipSetByHeight(ctx, ts, lbr+1, false) + if err != nil { + return nil, cid.Undef, xerrors.Errorf("failed to get lookback tipset+1: %v", err) + } + + nextTh := nextTS.Height() + if lbr > nextTh { + return nil, cid.Undef, xerrors.Errorf("failed to find non-null tipset %s (%d) which is known to exist, found %s (%d)", ts.Key(), h, nextTS.Key(), nextTh) + } + + pKey := nextTS.Parents() + lbts, err := store.GetTipSet(ctx, pKey) + if err != nil { + return nil, cid.Undef, xerrors.Errorf("failed to resolve lookback tipset: %v", err) + } + + return lbts, nextTS.Blocks()[0].ParentStateRoot, nil +} + +//Actor + +// LsActors returns a channel with actors from the latest state on the chain +func (store *Store) LsActors(ctx context.Context) (map[address.Address]*types.Actor, error) { + st, err := store.GetTipSetState(ctx, store.head) + if err != nil { + return nil, err + } + + result := make(map[address.Address]*types.Actor) + err = st.ForEach(func(key address.Address, a *types.Actor) error { + result[key] = a + return nil + }) + if err != nil { + return nil, err + } + return result, nil +} + +// GetActorAt returns an actor at a specified tipset key. +func (store *Store) GetActorAt(ctx context.Context, ts *types.TipSet, addr address.Address) (*types.Actor, error) { + st, err := store.GetTipSetState(ctx, ts) + if err != nil { + return nil, errors.Wrap(err, "failed to load latest state") + } + + idAddr, err := store.LookupID(ctx, ts, addr) + if err != nil { + return nil, err + } + + actr, found, err := st.GetActor(ctx, idAddr) + if err != nil { + return nil, err + } + if !found { + return nil, types.ErrActorNotFound + } + return actr, nil +} + +// LookupID resolves ID address for actor +func (store *Store) LookupID(ctx context.Context, ts *types.TipSet, addr address.Address) (address.Address, error) { + st, err := store.GetTipSetState(ctx, ts) + if err != nil { + return address.Undef, errors.Wrap(err, "failed to load latest state") + } + + return st.LookupID(addr) +} + +// ResolveToKeyAddr get key address of specify address. +//if ths addr is bls/secpk address, return directly, other get the pubkey and generate address +func (store *Store) ResolveToKeyAddr(ctx context.Context, ts *types.TipSet, addr address.Address) (address.Address, error) { + st, err := store.StateView(ctx, ts) + if err != nil { + return address.Undef, errors.Wrap(err, "failed to load latest state") + } + + return st.ResolveToKeyAddr(ctx, addr) +} + +// StateView return state view at ts epoch +func (store *Store) StateView(ctx context.Context, ts *types.TipSet) (*state.View, error) { + if ts == nil { + ts = store.head + } + root, err := store.GetTipSetStateRoot(ctx, ts) + if err != nil { + return nil, errors.Wrapf(err, "failed to get state root for %s", ts.Key().String()) + } + + return state.NewView(store.stateAndBlockSource, root), nil +} + +// AccountView return account view at ts state +func (store *Store) AccountView(ctx context.Context, ts *types.TipSet) (state.AccountView, error) { + if ts == nil { + ts = store.head + } + root, err := store.GetTipSetStateRoot(ctx, ts) + if err != nil { + return nil, errors.Wrapf(err, "failed to get state root for %s", ts.Key().String()) + } + + return state.NewView(store.stateAndBlockSource, root), nil +} + +// ParentStateView get parent state view of ts +func (store *Store) ParentStateView(ts *types.TipSet) (*state.View, error) { + return state.NewView(store.stateAndBlockSource, ts.At(0).ParentStateRoot), nil +} + +// Store wrap adt store +func (store *Store) Store(ctx context.Context) adt.Store { + return adt.WrapStore(ctx, cbor.NewCborStore(store.bsstore)) +} diff --git a/pkg/chain/store_test.go b/pkg/chain/store_test.go new file mode 100644 index 0000000000..d9c5e159cf --- /dev/null +++ b/pkg/chain/store_test.go @@ -0,0 +1,373 @@ +package chain_test + +import ( + "context" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/testhelpers" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/util/test" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +type CborBlockStore struct { + *chain.Store + cborStore cbor.IpldStore +} + +func (cbor *CborBlockStore) PutBlocks(ctx context.Context, blocks []*types.BlockHeader) { + for _, blk := range blocks { + _, _ = cbor.cborStore.Put(ctx, blk) + } + +} + +// Default Chain diagram below. Note that blocks in the same tipset are in parentheses. +// +// genesis -> (link1blk1, link1blk2) -> (link2blk1, link2blk2, link2blk3) -> link3blk1 -> (null block) -> (null block) -> (link4blk1, link4blk2) + +// newChainStore creates a new chain store for tests. +func newChainStore(r repo.Repo, genTS *types.TipSet) *CborBlockStore { + tempBlock := r.Datastore() + cborStore := cbor.NewCborStore(tempBlock) + return &CborBlockStore{ + Store: chain.NewStore(r.ChainDatastore(), tempBlock, genTS.At(0).Cid(), chain.NewMockCirculatingSupplyCalculator()), + cborStore: cborStore, + } +} + +// requirePutTestChain puts the count tipsets preceding head in the source to +// the input chain store. +func requirePutTestChain(ctx context.Context, t *testing.T, cborStore *CborBlockStore, head types.TipSetKey, source *chain.Builder, count int) { + tss := source.RequireTipSets(ctx, head, count) + for _, ts := range tss { + tsas := &chain.TipSetMetadata{ + TipSet: ts, + TipSetStateRoot: ts.At(0).ParentStateRoot, + TipSetReceipts: testhelpers.EmptyReceiptsCID, + } + requirePutBlocksToCborStore(t, cborStore.cborStore, tsas.TipSet.Blocks()...) + require.NoError(t, cborStore.PutTipSetMetadata(ctx, tsas)) + } +} + +type HeadAndTipsetGetter interface { + GetHead() types.TipSetKey + GetTipSet(types.TipSetKey) (types.TipSet, error) +} + +func requirePutBlocksToCborStore(t *testing.T, cst cbor.IpldStore, blocks ...*types.BlockHeader) { + for _, block := range blocks { + _, err := cst.Put(context.Background(), block) + require.NoError(t, err) + } +} + +/* Putting and getting tipsets and states. */ + +// Adding tipsets to the store doesn't error. +func TestPutTipSet(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + genTS := builder.Genesis() + r := repo.NewInMemoryRepo() + cs := newChainStore(r, genTS) + + genTsas := &chain.TipSetMetadata{ + TipSet: genTS, + TipSetStateRoot: genTS.At(0).ParentStateRoot, + TipSetReceipts: testhelpers.EmptyReceiptsCID, + } + err := cs.PutTipSetMetadata(ctx, genTsas) + assert.NoError(t, err) +} + +// Tipsets can be retrieved by key (all block cids). +func TestGetByKey(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + genTS := builder.Genesis() + r := repo.NewInMemoryRepo() + cs := newChainStore(r, genTS) + + // Construct test chain data + link1 := builder.AppendOn(ctx, genTS, 2) + link2 := builder.AppendOn(ctx, link1, 3) + link3 := builder.AppendOn(ctx, link2, 1) + link4 := builder.BuildOn(ctx, link3, 2, func(bb *chain.BlockBuilder, i int) { bb.IncHeight(2) }) + + // Put the test chain to the store + requirePutTestChain(ctx, t, cs, link4.Key(), builder, 5) + + // Check that we can get all tipsets by key + gotGTS := requireGetTipSet(ctx, t, cs, genTS.Key()) + gotGTSSR := requireGetTipSetStateRoot(ctx, t, cs, genTS) + + got1TS := requireGetTipSet(ctx, t, cs, link1.Key()) + got1TSSR := requireGetTipSetStateRoot(ctx, t, cs, link1) + + got2TS := requireGetTipSet(ctx, t, cs, link2.Key()) + got2TSSR := requireGetTipSetStateRoot(ctx, t, cs, link2) + + got3TS := requireGetTipSet(ctx, t, cs, link3.Key()) + got3TSSR := requireGetTipSetStateRoot(ctx, t, cs, link3) + + got4TS := requireGetTipSet(ctx, t, cs, link4.Key()) + got4TSSR := requireGetTipSetStateRoot(ctx, t, cs, link4) + assert.ObjectsAreEqualValues(genTS, gotGTS) + assert.ObjectsAreEqualValues(link1, got1TS) + assert.ObjectsAreEqualValues(link2, got2TS) + assert.ObjectsAreEqualValues(link3, got3TS) + assert.ObjectsAreEqualValues(link4, got4TS) + + assert.Equal(t, genTS.At(0).ParentStateRoot, gotGTSSR) + assert.Equal(t, link1.At(0).ParentStateRoot, got1TSSR) + assert.Equal(t, link2.At(0).ParentStateRoot, got2TSSR) + assert.Equal(t, link3.At(0).ParentStateRoot, got3TSSR) + assert.Equal(t, link4.At(0).ParentStateRoot, got4TSSR) +} + +// Tipsets can be retrieved by key (all block cids). +func TestRevertChange(t *testing.T) { + tf.UnitTest(t) + ctx := context.TODO() + builder := chain.NewBuilder(t, address.Undef) + genTS := builder.Genesis() + cs := newChainStore(builder.Repo(), genTS) + genesis := builder.Genesis() + + link1 := builder.AppendOn(ctx, genesis, 1) + link2 := builder.AppendOn(ctx, link1, 1) + link3 := builder.AppendOn(ctx, link2, 1) + + err := cs.SetHead(ctx, link3) + require.NoError(t, err) + + link4 := builder.AppendOn(ctx, genesis, 2) + link5 := builder.AppendOn(ctx, link4, 2) + link6 := builder.AppendOn(ctx, link5, 2) + + ch := cs.SubHeadChanges(ctx) + currentA := <-ch + test.Equal(t, currentA[0].Type, chain.HCCurrent) + test.Equal(t, currentA[0].Val, link3) + + err = cs.SetHead(ctx, link6) + require.NoError(t, err) + headChanges := <-ch + + if len(headChanges) == 1 { + //maybe link3, if link3 fetch next + headChanges = <-ch + } + test.Equal(t, headChanges[0].Type, chain.HCRevert) + test.Equal(t, headChanges[0].Val, link3) + test.Equal(t, headChanges[1].Type, chain.HCRevert) + test.Equal(t, headChanges[1].Val, link2) + test.Equal(t, headChanges[2].Type, chain.HCRevert) + test.Equal(t, headChanges[2].Val, link1) + + test.Equal(t, headChanges[3].Type, chain.HCApply) + test.Equal(t, headChanges[3].Val, link4) + test.Equal(t, headChanges[4].Type, chain.HCApply) + test.Equal(t, headChanges[4].Val, link5) + test.Equal(t, headChanges[5].Type, chain.HCApply) + test.Equal(t, headChanges[5].Val, link6) +} + +/* Head and its state is set and notified properly. */ + +// The constructor call sets the genesis cid for the chain store. +func TestSetGenesis(t *testing.T) { + tf.UnitTest(t) + + builder := chain.NewBuilder(t, address.Undef) + genTS := builder.Genesis() + r := repo.NewInMemoryRepo() + cs := newChainStore(r, genTS) + + require.Equal(t, genTS.At(0).Cid(), cs.GenesisCid()) +} + +func assertSetHead(t *testing.T, cborStore *CborBlockStore, ts *types.TipSet) { + ctx := context.Background() + err := cborStore.SetHead(ctx, ts) + assert.NoError(t, err) +} + +// Set and Get Head. +func TestHead(t *testing.T) { + tf.UnitTest(t) + + ctx := context.TODO() + builder := chain.NewBuilder(t, address.Undef) + genTS := builder.Genesis() + r := builder.Repo() + bs := builder.BlockStore() + cs := chain.NewStore(r.ChainDatastore(), bs, genTS.At(0).Cid(), chain.NewMockCirculatingSupplyCalculator()) + cboreStore := &CborBlockStore{ + Store: chain.NewStore(r.ChainDatastore(), bs, genTS.At(0).Cid(), chain.NewMockCirculatingSupplyCalculator()), + } + // Construct test chain data + link1 := builder.AppendOn(ctx, genTS, 2) + link2 := builder.AppendOn(ctx, link1, 3) + link3 := builder.AppendOn(ctx, link2, 1) + link4 := builder.BuildOn(ctx, link3, 2, func(bb *chain.BlockBuilder, i int) { bb.IncHeight(2) }) + + // Head starts as an empty cid set + assert.Equal(t, types.UndefTipSet, cs.GetHead()) + + // Set Head + assertSetHead(t, cboreStore, genTS) + assert.ObjectsAreEqualValues(genTS.Key(), cs.GetHead()) + + // Move head forward + assertSetHead(t, cboreStore, link4) + assert.ObjectsAreEqualValues(link4.Key(), cs.GetHead()) + + // Move head back + assertSetHead(t, cboreStore, link1) + assert.ObjectsAreEqualValues(link1.Key(), cs.GetHead()) +} + +func assertEmptyCh(t *testing.T, ch <-chan []*apitypes.HeadChange) { + select { + case <-ch: + assert.True(t, false) + default: + } +} + +// Head events are propagated on HeadEvents. +func TestHeadEvents(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + genTS := builder.Genesis() + chainStore := newChainStore(builder.Repo(), genTS) + // Construct test chain data + link1 := builder.AppendOn(ctx, genTS, 2) + link2 := builder.AppendOn(ctx, link1, 3) + link3 := builder.AppendOn(ctx, link2, 1) + link4 := builder.BuildOn(ctx, link3, 2, func(bb *chain.BlockBuilder, i int) { bb.IncHeight(2) }) + + assertSetHead(t, chainStore, genTS) + + chA := chainStore.SubHeadChanges(ctx) + chB := chainStore.SubHeadChanges(ctx) + // HCurrent + currentA := <-chA + test.Equal(t, currentA[0].Type, chain.HCCurrent) + test.Equal(t, currentA[0].Val, genTS) + + currentB := <-chB + test.Equal(t, currentB[0].Type, chain.HCCurrent) + test.Equal(t, currentB[0].Val, genTS) + + defer ctx.Done() + assertSetHead(t, chainStore, link1) + assertSetHead(t, chainStore, link2) + assertSetHead(t, chainStore, link3) + assertSetHead(t, chainStore, link4) + assertSetHead(t, chainStore, link3) + assertSetHead(t, chainStore, link2) + assertSetHead(t, chainStore, link1) + assertSetHead(t, chainStore, genTS) + heads := []*types.TipSet{genTS, link1, link2, link3, link4, link4, link3, link2, link1, genTS} + types := []string{"apply", "apply", "apply", "apply", "apply", "revert", "revert", "revert", "revert"} + // Heads arrive in the expected order + for i := 0; i < 9; i++ { + headA := <-chA + headB := <-chB + assert.Equal(t, headA[0].Type, types[i]) + test.Equal(t, headA, headB) + test.Equal(t, headA[0].Val, heads[i]) + } + // No extra notifications + assertEmptyCh(t, chA) + assertEmptyCh(t, chB) +} + +/* Loading */ +// Load does not error and gives the chain store access to all blocks and +// tipset indexes along the heaviest chain. +func TestLoadAndReboot(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + genTS := builder.Genesis() + rPriv := repo.NewInMemoryRepo() + bs := rPriv.Datastore() + ds := rPriv.ChainDatastore() + cst := cbor.NewCborStore(bs) + + // Construct test chain data + link1 := builder.AppendOn(ctx, genTS, 2) + link2 := builder.AppendOn(ctx, link1, 3) + link3 := builder.AppendOn(ctx, link2, 1) + link4 := builder.BuildOn(ctx, link3, 2, func(bb *chain.BlockBuilder, i int) { bb.IncHeight(2) }) + + // Add blocks to blockstore + requirePutBlocksToCborStore(t, cst, genTS.ToSlice()...) + requirePutBlocksToCborStore(t, cst, link1.ToSlice()...) + requirePutBlocksToCborStore(t, cst, link2.ToSlice()...) + requirePutBlocksToCborStore(t, cst, link3.ToSlice()...) + requirePutBlocksToCborStore(t, cst, link4.ToSlice()...) + + cboreStore := &CborBlockStore{ + Store: chain.NewStore(ds, bs, genTS.At(0).Cid(), chain.NewMockCirculatingSupplyCalculator()), + cborStore: cst, + } + requirePutTestChain(ctx, t, cboreStore, link4.Key(), builder, 5) + assertSetHead(t, cboreStore, genTS) // set the genesis block + + assertSetHead(t, cboreStore, link4) + cboreStore.Stop() + + // rebuild chain with same datastore and cborstore + rebootChain := chain.NewStore(ds, bs, genTS.At(0).Cid(), chain.NewMockCirculatingSupplyCalculator()) + rebootCbore := &CborBlockStore{ + Store: rebootChain, + } + + err := rebootChain.Load(ctx) + assert.NoError(t, err) + + // Check that chain store has index + // Get a tipset and state by key + got2 := requireGetTipSet(ctx, t, rebootCbore, link2.Key()) + assert.ObjectsAreEqualValues(link2, got2) + + // Check the head + test.Equal(t, link4, rebootChain.GetHead()) +} + +func requireGetTipSet(ctx context.Context, t *testing.T, chainStore *CborBlockStore, key types.TipSetKey) *types.TipSet { + ts, err := chainStore.GetTipSet(ctx, key) + require.NoError(t, err) + return ts +} + +type tipSetStateRootGetter interface { + GetTipSetStateRoot(context.Context, *types.TipSet) (cid.Cid, error) +} + +func requireGetTipSetStateRoot(ctx context.Context, t *testing.T, chainStore tipSetStateRootGetter, ts *types.TipSet) cid.Cid { + stateCid, err := chainStore.GetTipSetStateRoot(ctx, ts) + require.NoError(t, err) + return stateCid +} diff --git a/pkg/chain/testing.go b/pkg/chain/testing.go new file mode 100644 index 0000000000..5c2ec22cc7 --- /dev/null +++ b/pkg/chain/testing.go @@ -0,0 +1,948 @@ +package chain + +import ( + "bytes" + "context" + "encoding/binary" + "fmt" + "io/ioutil" + "sync" + "testing" + + "github.com/ipld/go-car" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/libp2p/go-libp2p-core/peer" + "github.com/pkg/errors" + "github.com/stretchr/testify/require" + "golang.org/x/xerrors" + + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + blockstore "github.com/ipfs/go-ipfs-blockstore" + cbor "github.com/ipfs/go-ipld-cbor" + + "github.com/filecoin-project/venus/fixtures/asset" + "github.com/filecoin-project/venus/pkg/chainsync/exchange" + "github.com/filecoin-project/venus/pkg/clock" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/testhelpers" + "github.com/filecoin-project/venus/pkg/util" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// Builder builds fake chains and acts as a provider and fetcher for the chain thus generated. +// All blocks are unique (even if they share parents) and form valid chains of parents and heights, +// but do not carry valid tickets. Each block contributes a weight of 1. +// state root CIDs are computed by an abstract StateBuilder. The default FakeStateBuilder produces +// state CIDs that are distinct but not CIDs of any real state tree. A more sophisticated +// builder could actually apply the messages to a state tree (not yet implemented). +// The builder is deterministic: two builders receiving the same sequence of calls will produce +// exactly the same chain. +type Builder struct { + t *testing.T + genesis *types.TipSet + store *Store + minerAddress address.Address + stateBuilder StateBuilder + stamper TimeStamper + repo repo.Repo + bs blockstore.Blockstore + cstore cbor.IpldStore + mstore *MessageStore + seq uint64 // For unique tickets + eval *FakeStateEvaluator + + // Cache of the state root CID computed for each tipset key. + tipStateCids map[string]cid.Cid + + stmgr IStmgr + evaLock sync.Mutex +} + +func (f *Builder) IStmgr() IStmgr { + f.evaLock.Lock() + defer f.evaLock.Unlock() + return f.stmgr +} + +func (f *Builder) FakeStateEvaluator() *FakeStateEvaluator { + f.evaLock.Lock() + defer f.evaLock.Unlock() + + if f.eval != nil { + return f.eval + } + f.eval = &FakeStateEvaluator{ + ChainStore: f.store, + MessageStore: f.mstore, + ChsWorkingOn: make(map[types.TipSetKey]chan struct{}, 1), + } + return f.eval +} + +func (f *Builder) LoadTipSetMessage(ctx context.Context, ts *types.TipSet) ([]types.BlockMessagesInfo, error) { + // gather message + applied := make(map[address.Address]uint64) + selectMsg := func(m *types.Message) (bool, error) { + // The first match for a sender is guaranteed to have correct nonce -- the block isn't valid otherwise + if _, ok := applied[m.From]; !ok { + applied[m.From] = m.Nonce + } + + if applied[m.From] != m.Nonce { + return false, nil + } + + applied[m.From]++ + + return true, nil + } + blockMsg := []types.BlockMessagesInfo{} + for i := 0; i < ts.Len(); i++ { + blk := ts.At(i) + secpMsgs, blsMsgs, err := f.LoadMetaMessages(ctx, blk.Messages) + if err != nil { + return nil, errors.Wrapf(err, "syncing tip %s failed loading message list %s for block %s", ts.Key(), blk.Messages, blk.Cid()) + } + + var sBlsMsg []types.ChainMsg + var sSecpMsg []types.ChainMsg + for _, msg := range blsMsgs { + b, err := selectMsg(msg) + if err != nil { + return nil, xerrors.Errorf("failed to decide whether to select message for block: %w", err) + } + if b { + sBlsMsg = append(sBlsMsg, msg) + } + } + + for _, msg := range secpMsgs { + b, err := selectMsg(&msg.Message) + if err != nil { + return nil, xerrors.Errorf("failed to decide whether to select message for block: %w", err) + } + if b { + sSecpMsg = append(sSecpMsg, msg) + } + } + + blockMsg = append(blockMsg, types.BlockMessagesInfo{ + BlsMessages: sBlsMsg, + SecpkMessages: sSecpMsg, + Block: blk, + }) + } + + return blockMsg, nil +} + +func (f *Builder) Cstore() cbor.IpldStore { + return f.cstore +} + +func (f *Builder) Genesis() *types.TipSet { + return f.genesis +} + +func (f *Builder) Mstore() *MessageStore { + return f.mstore +} + +func (f *Builder) BlockStore() blockstore.Blockstore { + return f.bs +} + +func (f *Builder) Repo() repo.Repo { + return f.repo +} + +func (f *Builder) Store() *Store { + return f.store +} + +func (f *Builder) RemovePeer(peer peer.ID) {} + +var _ BlockProvider = (*Builder)(nil) +var _ TipSetProvider = (*Builder)(nil) +var _ MessageProvider = (*Builder)(nil) + +type fakeStmgr struct { + cs *Store + eva *FakeStateEvaluator +} + +func (f *fakeStmgr) GetActorAt(ctx context.Context, a address.Address, set *types.TipSet) (*types.Actor, error) { + return f.cs.GetActorAt(ctx, set, a) +} + +func (f *fakeStmgr) RunStateTransition(ctx context.Context, set *types.TipSet) (root cid.Cid, receipts cid.Cid, err error) { + return f.eva.RunStateTransition(ctx, set) +} + +var _ IStmgr = &fakeStmgr{} + +// NewBuilder builds a new chain faker with default fake state building. +func NewBuilder(t *testing.T, miner address.Address) *Builder { + return NewBuilderWithDeps(t, miner, &FakeStateBuilder{}, &ZeroTimestamper{}) +} + +// NewBuilderWithDeps builds a new chain faker. +// Blocks will have `miner` set as the miner address, or a default if empty. +func NewBuilderWithDeps(t *testing.T, miner address.Address, sb StateBuilder, stamper TimeStamper) *Builder { + if miner.Empty() { + var err error + miner, err = address.NewSecp256k1Address([]byte("miner")) + require.NoError(t, err) + } + + repo := repo.NewInMemoryRepo() + bs := repo.Datastore() + ds := repo.ChainDatastore() + cst := cbor.NewCborStore(bs) + + b := &Builder{ + t: t, + minerAddress: miner, + stateBuilder: sb, + stamper: stamper, + repo: repo, + bs: bs, + cstore: cst, + mstore: NewMessageStore(bs, config.DefaultForkUpgradeParam), + tipStateCids: make(map[string]cid.Cid), + } + ctx := context.TODO() + _, err := b.mstore.StoreMessages(ctx, []*types.SignedMessage{}, []*types.Message{}) + require.NoError(t, err) + _, err = b.mstore.StoreReceipts(ctx, []types.MessageReceipt{}) + require.NoError(t, err) + // append genesis + nullState := testhelpers.CidFromString(t, "null") + b.tipStateCids[types.NewTipSetKey().String()] = nullState + + // create a fixed genesis + b.genesis = b.GeneratorGenesis() + b.store = NewStore(ds, bs, b.genesis.At(0).Cid(), NewMockCirculatingSupplyCalculator()) + + for _, block := range b.genesis.Blocks() { + // add block to cstore + _, err := b.cstore.Put(context.TODO(), block) + require.NoError(t, err) + } + + stateRoot, receiptRoot := b.genesis.Blocks()[0].ParentStateRoot, b.genesis.Blocks()[0].ParentMessageReceipts + + b.tipStateCids[b.genesis.Key().String()] = stateRoot + require.NoError(t, err) + tipsetMeta := &TipSetMetadata{ + TipSetStateRoot: stateRoot, + TipSet: b.genesis, + TipSetReceipts: receiptRoot, + } + require.NoError(t, b.store.PutTipSetMetadata(context.TODO(), tipsetMeta)) + err = b.store.SetHead(context.TODO(), b.genesis) + require.NoError(t, err) + + b.stmgr = &fakeStmgr{cs: b.store, eva: b.FakeStateEvaluator()} + + return b +} + +// AppendBlockOnBlocks creates and returns a new block child of `parents`, with no messages. +func (f *Builder) AppendBlockOnBlocks(ctx context.Context, parents ...*types.BlockHeader) *types.BlockHeader { + var tip *types.TipSet + if len(parents) > 0 { + tip = testhelpers.RequireNewTipSet(f.t, parents...) + } + return f.AppendBlockOn(ctx, tip) +} + +// AppendBlockOn creates and returns a new block child of `parent`, with no messages. +func (f *Builder) AppendBlockOn(ctx context.Context, parent *types.TipSet) *types.BlockHeader { + return f.Build(ctx, parent, 1, nil).At(0) +} + +// AppendOn creates and returns a new `width`-block tipset child of `parents`, with no messages. +func (f *Builder) AppendOn(ctx context.Context, parent *types.TipSet, width int) *types.TipSet { + return f.Build(ctx, parent, width, nil) +} + +func (f *Builder) FlushHead(ctx context.Context) error { + _, _, e := f.FakeStateEvaluator().RunStateTransition(ctx, f.store.GetHead()) + return e +} + +// AppendManyBlocksOnBlocks appends `height` blocks to the chain. +func (f *Builder) AppendManyBlocksOnBlocks(ctx context.Context, height int, parents ...*types.BlockHeader) *types.BlockHeader { + var tip *types.TipSet + if len(parents) > 0 { + tip = testhelpers.RequireNewTipSet(f.t, parents...) + } + return f.BuildManyOn(ctx, height, tip, nil).At(0) +} + +// AppendManyBlocksOn appends `height` blocks to the chain. +func (f *Builder) AppendManyBlocksOn(ctx context.Context, height int, parent *types.TipSet) *types.BlockHeader { + return f.BuildManyOn(ctx, height, parent, nil).At(0) +} + +// AppendManyOn appends `height` tipsets to the chain. +func (f *Builder) AppendManyOn(ctx context.Context, height int, parent *types.TipSet) *types.TipSet { + return f.BuildManyOn(ctx, height, parent, nil) +} + +// BuildOnBlock creates and returns a new block child of singleton tipset `parent`. See Build. +func (f *Builder) BuildOnBlock(ctx context.Context, parent *types.BlockHeader, build func(b *BlockBuilder)) *types.BlockHeader { + var tip *types.TipSet + if parent != nil { + tip = testhelpers.RequireNewTipSet(f.t, parent) + } + return f.BuildOneOn(ctx, tip, build).At(0) +} + +// BuildOneOn creates and returns a new single-block tipset child of `parent`. +func (f *Builder) BuildOneOn(ctx context.Context, parent *types.TipSet, build func(b *BlockBuilder)) *types.TipSet { + return f.Build(ctx, parent, 1, singleBuilder(build)) +} + +// BuildOn creates and returns a new `width` block tipset child of `parent`. +func (f *Builder) BuildOn(ctx context.Context, parent *types.TipSet, width int, build func(b *BlockBuilder, i int)) *types.TipSet { + return f.Build(ctx, parent, width, build) +} + +// BuildManyOn builds a chain by invoking Build `height` times. +func (f *Builder) BuildManyOn(ctx context.Context, height int, parent *types.TipSet, build func(b *BlockBuilder)) *types.TipSet { + require.True(f.t, height > 0, "") + for i := 0; i < height; i++ { + parent = f.Build(ctx, parent, 1, singleBuilder(build)) + } + return parent +} + +// Build creates and returns a new tipset child of `parent`. +// The tipset carries `width` > 0 blocks with the same height and parents, but different tickets. +// Note: the blocks will all have the same miner, which is unrealistic and forbidden by consensus; +// generalise this to random miner addresses when that is rejected by the syncer. +// The `build` function is invoked to modify the block before it is stored. +func (f *Builder) Build(ctx context.Context, parent *types.TipSet, width int, build func(b *BlockBuilder, i int)) *types.TipSet { + tip := f.BuildOrphaTipset(parent, width, build) + + for _, block := range tip.Blocks() { + // add block to cstore + _, err := f.cstore.Put(context.TODO(), block) + require.NoError(f.t, err) + } + + // Compute and remember state for the tipset. + stateRoot, _ := f.ComputeState(ctx, tip) + f.tipStateCids[tip.Key().String()] = stateRoot + return tip +} + +func (f *Builder) BuildOrphaTipset(parent *types.TipSet, width int, build func(b *BlockBuilder, i int)) *types.TipSet { + require.True(f.t, width > 0) + var blocks []*types.BlockHeader + height := abi.ChainEpoch(0) + if parent.Defined() { + var err error + height = parent.At(0).Height + 1 + require.NoError(f.t, err) + } else { + parent = types.UndefTipSet + } + + parentWeight, err := f.stateBuilder.Weigh(context.TODO(), parent) + require.NoError(f.t, err) + + emptyBLSSig := crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: []byte(""), + // Data: (*bls.Aggregate([]bls.Signature{}))[:], + } + + for i := 0; i < width; i++ { + ticket := types.Ticket{} + ticket.VRFProof = make([]byte, binary.Size(f.seq)) + binary.BigEndian.PutUint64(ticket.VRFProof, f.seq) + f.seq++ + + b := &types.BlockHeader{ + Ticket: &ticket, + Miner: f.minerAddress, + BeaconEntries: nil, + ParentWeight: parentWeight, + Parents: parent.Key().Cids(), + Height: height, + Messages: testhelpers.EmptyTxMetaCID, + ParentMessageReceipts: testhelpers.EmptyReceiptsCID, + BLSAggregate: &emptyBLSSig, + // Omitted fields below + // ParentStateRoot: stateRoot, + // EPoStInfo: ePoStInfo, + // ForkSignaling: forkSig, + Timestamp: f.stamper.Stamp(height), + BlockSig: &crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: []byte{}}, + ElectionProof: &types.ElectionProof{VRFProof: []byte{0x0c, 0x0d}, WinCount: int64(10)}, + } + + if build != nil { + build(&BlockBuilder{b, f.t, f.mstore}, i) + } + + // Compute state root for this block. + ctx := context.Background() + prevState := f.StateForKey(ctx, parent.Key()) + smsgs, umsgs, err := f.mstore.LoadMetaMessages(ctx, b.Messages) + require.NoError(f.t, err) + + var sBlsMsg []types.ChainMsg + var sSecpMsg []types.ChainMsg + for _, m := range umsgs { + sBlsMsg = append(sBlsMsg, m) + } + + for _, m := range smsgs { + sSecpMsg = append(sSecpMsg, m) + } + blkMsgInfo := types.BlockMessagesInfo{ + BlsMessages: sBlsMsg, + SecpkMessages: sSecpMsg, + Block: b, + } + stateRootRaw, _, err := f.stateBuilder.ComputeState(prevState, []types.BlockMessagesInfo{blkMsgInfo}) + require.NoError(f.t, err) + b.ParentStateRoot = stateRootRaw + + blocks = append(blocks, b) + } + return testhelpers.RequireNewTipSet(f.t, blocks...) +} + +// StateForKey loads (or computes) the state root for a tipset key. +func (f *Builder) StateForKey(ctx context.Context, key types.TipSetKey) cid.Cid { + state, found := f.tipStateCids[key.String()] + if found { + return state + } + // No state yet computed for this tip (perhaps because the blocks in it have not previously + // been considered together as a tipset). + tip, err := f.GetTipSet(ctx, key) + require.NoError(f.t, err) + state, _ = f.ComputeState(ctx, tip) + return state +} + +// GetBlockstoreValue gets data straight out of the underlying blockstore by cid +func (f *Builder) GetBlockstoreValue(ctx context.Context, c cid.Cid) (blocks.Block, error) { + return f.bs.Get(ctx, c) +} + +// ComputeState computes the state for a tipset from its parent state. +func (f *Builder) ComputeState(ctx context.Context, tip *types.TipSet) (cid.Cid, []types.MessageReceipt) { + parentKey := tip.Parents() + // Load the state of the parent tipset and compute the required state (recursively). + prev := f.StateForKey(ctx, parentKey) + blockMsgInfo := f.tipMessages(tip) + state, receipt, err := f.stateBuilder.ComputeState(prev, blockMsgInfo) + require.NoError(f.t, err) + return state, receipt +} + +// tipMessages returns the messages of a tipset. Each block's messages are +// grouped into a slice and a slice of these slices is returned. +func (f *Builder) tipMessages(tip *types.TipSet) []types.BlockMessagesInfo { + ctx := context.Background() + var blockMessageInfos []types.BlockMessagesInfo + for i := 0; i < tip.Len(); i++ { + smsgs, blsMsg, err := f.mstore.LoadMetaMessages(ctx, tip.At(i).Messages) + require.NoError(f.t, err) + + var sBlsMsg []types.ChainMsg + var sSecpMsg []types.ChainMsg + for _, m := range blsMsg { + sBlsMsg = append(sBlsMsg, m) + } + + for _, m := range smsgs { + sSecpMsg = append(sSecpMsg, m) + } + blockMessageInfos = append(blockMessageInfos, types.BlockMessagesInfo{ + BlsMessages: sBlsMsg, + SecpkMessages: sSecpMsg, + Block: tip.At(i), + }) + } + return blockMessageInfos +} + +// Wraps a simple build function in one that also accepts an index, propagating a nil function. +func singleBuilder(build func(b *BlockBuilder)) func(b *BlockBuilder, i int) { + if build == nil { + return nil + } + return func(b *BlockBuilder, i int) { build(b) } +} + +// /// BlockHeader builder ///// + +// BlockBuilder mutates blocks as they are generated. +type BlockBuilder struct { + block *types.BlockHeader + t *testing.T + messages *MessageStore +} + +// SetTicket sets the block's ticket. +func (bb *BlockBuilder) SetTicket(raw []byte) { + bb.block.Ticket = &types.Ticket{VRFProof: raw} +} + +// SetTimestamp sets the block's timestamp. +func (bb *BlockBuilder) SetTimestamp(timestamp uint64) { + bb.block.Timestamp = timestamp +} + +// IncHeight increments the block's height, implying a number of null blocks before this one +// is mined. +func (bb *BlockBuilder) IncHeight(nullBlocks abi.ChainEpoch) { + bb.block.Height += nullBlocks +} + +// SetBlockSig set a new signature +func (bb *BlockBuilder) SetBlockSig(signature crypto.Signature) { + bb.block.BlockSig = &signature +} + +// AddMessages adds a message & receipt collection to the block. +func (bb *BlockBuilder) AddMessages(secpmsgs []*types.SignedMessage, blsMsgs []*types.Message) { + ctx := context.Background() + + meta, err := bb.messages.StoreMessages(ctx, secpmsgs, blsMsgs) + require.NoError(bb.t, err) + + bb.block.Messages = meta +} + +// SetStateRoot sets the block's state root. +func (bb *BlockBuilder) SetStateRoot(root cid.Cid) { + bb.block.ParentStateRoot = root +} + +// /// state builder ///// + +// StateBuilder abstracts the computation of state root CIDs from the chain builder. +type StateBuilder interface { + ComputeState(prev cid.Cid, blockmsg []types.BlockMessagesInfo) (cid.Cid, []types.MessageReceipt, error) + Weigh(ctx context.Context, tip *types.TipSet) (big.Int, error) +} + +// FakeStateBuilder computes a fake state CID by hashing the CIDs of a block's parents and messages. +type FakeStateBuilder struct { +} + +// ComputeState computes a fake state from a previous state root CID and the messages contained +// in list-of-lists of messages in blocks. Note that if there are no messages, the resulting state +// is the same as the input state. +// This differs from the true state transition function in that messages that are duplicated +// between blocks in the tipset are not ignored. +func (FakeStateBuilder) ComputeState(prev cid.Cid, blockmsg []types.BlockMessagesInfo) (cid.Cid, []types.MessageReceipt, error) { + receipts := []types.MessageReceipt{} + + // Accumulate the cids of the previous state and of all messages in the tipset. + inputs := []cid.Cid{prev} + for _, blockMessages := range blockmsg { + for _, msg := range append(blockMessages.BlsMessages, blockMessages.SecpkMessages...) { + mCId := msg.Cid() + inputs = append(inputs, mCId) + receipts = append(receipts, types.MessageReceipt{ + ExitCode: 0, + Return: mCId.Bytes(), + GasUsed: 3, + }) + } + } + + if len(inputs) == 1 { + // If there are no messages, the state doesn't change! + return prev, receipts, nil + } + + root, err := util.MakeCid(inputs) + if err != nil { + return cid.Undef, []types.MessageReceipt{}, err + } + return root, receipts, nil +} + +// Weigh computes a tipset's weight as its parent weight plus one for each block in the tipset. +func (FakeStateBuilder) Weigh(context context.Context, tip *types.TipSet) (big.Int, error) { + parentWeight := big.Zero() + if tip.Defined() { + parentWeight = tip.ParentWeight() + } + + return big.Add(parentWeight, big.NewInt(int64(tip.Len()))), nil +} + +// /// Timestamper ///// + +// TimeStamper is an object that timestamps blocks +type TimeStamper interface { + Stamp(abi.ChainEpoch) uint64 +} + +// ZeroTimestamper writes a default of 0 to the timestamp +type ZeroTimestamper struct{} + +// Stamp returns a stamp for the current block +func (zt *ZeroTimestamper) Stamp(height abi.ChainEpoch) uint64 { + return uint64(0) +} + +// ClockTimestamper writes timestamps based on a blocktime and genesis time +type ClockTimestamper struct { + c clock.ChainEpochClock +} + +// NewClockTimestamper makes a new stamper for creating production valid timestamps +func NewClockTimestamper(chainClock clock.ChainEpochClock) *ClockTimestamper { + return &ClockTimestamper{ + c: chainClock, + } +} + +// Stamp assigns a valid timestamp given genesis time and block time to +// a block of the provided height. +func (ct *ClockTimestamper) Stamp(height abi.ChainEpoch) uint64 { + startTime := ct.c.StartTimeOfEpoch(height) + + return uint64(startTime.Unix()) +} + +// /// state evaluator ///// + +// FakeStateEvaluator is a syncStateEvaluator that delegates to the FakeStateBuilder. +type FakeStateEvaluator struct { + ChainStore *Store + MessageStore *MessageStore + FakeStateBuilder + ChsWorkingOn map[types.TipSetKey]chan struct{} + stLk sync.Mutex +} + +// RunStateTransition delegates to StateBuilder.ComputeState +func (e *FakeStateEvaluator) RunStateTransition(ctx context.Context, ts *types.TipSet) (rootCid cid.Cid, receiptCid cid.Cid, err error) { + key := ts.Key() + e.stLk.Lock() + workingCh, exist := e.ChsWorkingOn[key] + + if exist { + e.stLk.Unlock() + select { + case <-workingCh: + e.stLk.Lock() + case <-ctx.Done(): + return cid.Undef, cid.Undef, ctx.Err() + } + } + if m, _ := e.ChainStore.LoadTipsetMetadata(ctx, ts); m != nil { + e.stLk.Unlock() + return m.TipSetStateRoot, m.TipSetReceipts, nil + } + + workingCh = make(chan struct{}) + e.ChsWorkingOn[key] = workingCh + e.stLk.Unlock() + + defer func() { + e.stLk.Lock() + delete(e.ChsWorkingOn, key) + if err == nil { + _ = e.ChainStore.PutTipSetMetadata(ctx, &TipSetMetadata{ + TipSetStateRoot: rootCid, + TipSet: ts, + TipSetReceipts: receiptCid, + }) + } + e.stLk.Unlock() + close(workingCh) + }() + + // gather message + blockMessageInfo, err := e.MessageStore.LoadTipSetMessage(ctx, ts) + if err != nil { + return cid.Undef, cid.Undef, xerrors.Errorf("failed to gather message in tipset %v", err) + } + var receipts []types.MessageReceipt + rootCid, receipts, err = e.ComputeState(ts.At(0).ParentStateRoot, blockMessageInfo) + if err != nil { + return cid.Undef, cid.Undef, errors.Wrap(err, "error compute state") + } + + receiptCid, err = e.MessageStore.StoreReceipts(ctx, receipts) + if err != nil { + return cid.Undef, cid.Undef, xerrors.Errorf("failed to save receipt: %v", err) + } + + return rootCid, receiptCid, nil +} + +func (e *FakeStateEvaluator) ValidateFullBlock(ctx context.Context, blk *types.BlockHeader) error { + parent, err := e.ChainStore.GetTipSet(ctx, types.NewTipSetKey(blk.Parents...)) + if err != nil { + return err + } + + root, receipts, err := e.RunStateTransition(ctx, parent) + if err != nil { + return err + } + + return e.ChainStore.PutTipSetMetadata(ctx, &TipSetMetadata{ + TipSetStateRoot: root, + TipSet: parent, + TipSetReceipts: receipts, + }) +} + +// /// Chain selector ///// + +// FakeChainSelector is a syncChainSelector that delegates to the FakeStateBuilder +type FakeChainSelector struct { + FakeStateBuilder +} + +// IsHeavier compares chains weighed with StateBuilder.Weigh. +func (e *FakeChainSelector) IsHeavier(ctx context.Context, a, b *types.TipSet) (bool, error) { + aw, err := e.Weigh(ctx, a) + if err != nil { + return false, err + } + bw, err := e.Weigh(ctx, b) + if err != nil { + return false, err + } + return aw.GreaterThan(bw), nil +} + +// Weight delegates to the statebuilder +func (e *FakeChainSelector) Weight(ctx context.Context, ts *types.TipSet) (big.Int, error) { + return e.Weigh(ctx, ts) +} + +// /// Interface and accessor implementations ///// + +// GetBlock returns the block identified by `c`. +func (f *Builder) GetBlock(ctx context.Context, c cid.Cid) (*types.BlockHeader, error) { + var block types.BlockHeader + if err := f.cstore.Get(ctx, c, &block); err != nil { + return nil, err + } + return &block, nil +} + +// GetBlocks returns the blocks identified by `cids`. +func (f *Builder) GetBlocksByIds(ctx context.Context, cids []cid.Cid) ([]*types.BlockHeader, error) { + ret := make([]*types.BlockHeader, len(cids)) + for i, c := range cids { + var block types.BlockHeader + if err := f.cstore.Get(ctx, c, &block); err != nil { + return nil, err + } + ret[i] = &block + } + return ret, nil +} + +// GetTipSet returns the tipset identified by `key`. +func (f *Builder) GetTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) { + var blocks []*types.BlockHeader + for _, bid := range key.Cids() { + var blk types.BlockHeader + if err := f.cstore.Get(ctx, bid, &blk); err != nil { + return nil, fmt.Errorf("no block %s", bid) + } + blocks = append(blocks, &blk) + } + return types.NewTipSet(blocks) +} + +// FetchTipSets fetchs the tipset at `tsKey` from the fetchers blockStore backed by the Builder. +func (f *Builder) FetchTipSets(ctx context.Context, key types.TipSetKey, from peer.ID, done func(t *types.TipSet) (bool, error)) ([]*types.TipSet, error) { + var tips []*types.TipSet + for { + tip, err := f.GetTipSet(ctx, key) + if err != nil { + return nil, err + } + tips = append(tips, tip) + ok, err := done(tip) + if err != nil { + return nil, err + } + if ok { + break + } + key = tip.Parents() + } + return tips, nil +} + +// FetchTipSetHeaders fetchs the tipset at `tsKey` from the fetchers blockStore backed by the Builder. +func (f *Builder) FetchTipSetHeaders(ctx context.Context, key types.TipSetKey, from peer.ID, done func(t *types.TipSet) (bool, error)) ([]*types.TipSet, error) { + return f.FetchTipSets(ctx, key, from, done) +} + +// GetTipSetStateRoot returns the state root that was computed for a tipset. +func (f *Builder) GetTipSetStateRoot(key types.TipSetKey) (cid.Cid, error) { + found, ok := f.tipStateCids[key.String()] + if !ok { + return cid.Undef, errors.Errorf("no state for %s", key) + } + return found, nil +} + +func (f *Builder) GetTipSetByHeight(ctx context.Context, ts *types.TipSet, h abi.ChainEpoch, prev bool) (*types.TipSet, error) { + if !ts.Defined() { + return ts, nil + } + if epoch := ts.Height(); epoch == h { + return ts, nil + } + + for { + ts = f.RequireTipSet(ctx, ts.Parents()) + height := ts.Height() + if height >= 0 && height == h { + return ts, nil + } else if height < h { + return ts, nil + } + } +} + +// RequireTipSet returns a tipset by key, which must exist. +func (f *Builder) RequireTipSet(ctx context.Context, key types.TipSetKey) *types.TipSet { + tip, err := f.GetTipSet(ctx, key) + require.NoError(f.t, err) + return tip +} + +// RequireTipSets returns a chain of tipsets from key, which must exist and be long enough. +func (f *Builder) RequireTipSets(ctx context.Context, head types.TipSetKey, count int) []*types.TipSet { + var tips []*types.TipSet + for i := 0; i < count; i++ { + tip := f.RequireTipSet(ctx, head) + tips = append(tips, tip) + head = tip.Parents() + } + return tips +} + +// LoadReceipts returns the message collections tracked by the builder. +func (f *Builder) LoadReceipts(ctx context.Context, c cid.Cid) ([]types.MessageReceipt, error) { + return f.mstore.LoadReceipts(ctx, c) +} + +// LoadTxMeta returns the tx meta wrapper tracked by the builder. +func (f *Builder) LoadTxMeta(ctx context.Context, metaCid cid.Cid) (types.MessageRoot, error) { + return f.mstore.LoadTxMeta(ctx, metaCid) +} + +// StoreReceipts stores message receipts and returns a commitment. +func (f *Builder) StoreReceipts(ctx context.Context, receipts []types.MessageReceipt) (cid.Cid, error) { + return f.mstore.StoreReceipts(ctx, receipts) +} + +// StoreTxMeta stores a tx meta +func (f *Builder) StoreTxMeta(ctx context.Context, meta types.MessageRoot) (cid.Cid, error) { + return f.mstore.StoreTxMeta(ctx, meta) +} + +func (f *Builder) LoadUnsignedMessagesFromCids(ctx context.Context, blsCids []cid.Cid) ([]*types.Message, error) { + return f.mstore.LoadUnsignedMessagesFromCids(ctx, blsCids) +} + +func (f *Builder) LoadSignedMessagesFromCids(ctx context.Context, secpCids []cid.Cid) ([]*types.SignedMessage, error) { + return f.mstore.LoadSignedMessagesFromCids(ctx, secpCids) +} + +// LoadMessages returns the message collections tracked by the builder. +func (f *Builder) LoadMetaMessages(ctx context.Context, metaCid cid.Cid) ([]*types.SignedMessage, []*types.Message, error) { + return f.mstore.LoadMetaMessages(ctx, metaCid) +} + +func (f *Builder) ReadMsgMetaCids(ctx context.Context, metaCid cid.Cid) ([]cid.Cid, []cid.Cid, error) { + return f.mstore.ReadMsgMetaCids(ctx, metaCid) +} + +// /// exchange ///// +func (f *Builder) GetBlocks(ctx context.Context, tsk types.TipSetKey, count int) ([]*types.TipSet, error) { + ts, err := f.GetTipSet(ctx, tsk) + if err != nil { + return nil, err + } + result := []*types.TipSet{ts} + for i := 1; i < count; i++ { + if ts.Height() == 0 { + break + } + ts, err = f.GetTipSet(ctx, ts.Parents()) + if err != nil { + return nil, err + } + result = append(result, ts) + } + return result, nil +} + +func (f *Builder) GetChainMessages(ctx context.Context, tipsets []*types.TipSet) ([]*exchange.CompactedMessages, error) { + result := []*exchange.CompactedMessages{} + for _, ts := range tipsets { + bmsgs, bmincl, smsgs, smincl, err := exchange.GatherMessages(ctx, f, f.mstore, ts) + if err != nil { + return nil, err + } + compactMsg := &exchange.CompactedMessages{} + compactMsg.Bls = bmsgs + compactMsg.BlsIncludes = bmincl + compactMsg.Secpk = smsgs + compactMsg.SecpkIncludes = smincl + result = append(result, compactMsg) + } + return result, nil +} + +func (f *Builder) GetFullTipSet(ctx context.Context, peer []peer.ID, tsk types.TipSetKey) (*types.FullTipSet, error) { + panic("implement me") +} + +func (f *Builder) AddPeer(peer peer.ID) {} + +func (f *Builder) GeneratorGenesis() *types.TipSet { + b, err := asset.Asset("fixtures/_assets/car/calibnet.car") + require.NoError(f.t, err) + source := ioutil.NopCloser(bytes.NewReader(b)) + + ch, err := car.LoadCar(context.Background(), f.bs, source) + require.NoError(f.t, err) + + // need to check if we are being handed a car file with a single genesis block or an entire chain. + bsBlk, err := f.bs.Get(context.Background(), ch.Roots[0]) + require.NoError(f.t, err) + + cur, err := types.DecodeBlock(bsBlk.RawData()) + require.NoError(f.t, err) + + ts, err := types.NewTipSet([]*types.BlockHeader{cur}) + require.NoError(f.t, err) + + return ts +} diff --git a/pkg/chain/tip_index.go b/pkg/chain/tip_index.go new file mode 100644 index 0000000000..d1c0fbb99e --- /dev/null +++ b/pkg/chain/tip_index.go @@ -0,0 +1,125 @@ +package chain + +import ( + "context" + "fmt" + "sync" + + "github.com/filecoin-project/go-state-types/abi" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + "github.com/pkg/errors" + "golang.org/x/xerrors" +) + +var ( + // ErrNotFound is returned when the key for a "Get" lookup is not in the index. + ErrNotFound = errors.New("Key not found in tipindex") +) + +// TipSetMetadata is the type stored at the leaves of the TipStateCache. It contains +// a tipset pointing to blocks, the root cid of the chain's state after +// applying the messages in this tipset to it's parent state, and the cid of the receipts +// for these messages. +type TipSetMetadata struct { + // TipSetStateRoot is the root of aggregate state after applying tipset + TipSetStateRoot cid.Cid + + // TipSet is the set of blocks that forms the tip set + TipSet *types.TipSet + + // TipSetReceipts receipts from all message contained within this tipset + TipSetReceipts cid.Cid +} + +type tipLoader interface { + GetTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) + LoadTipsetMetadata(ctx context.Context, ts *types.TipSet) (*TipSetMetadata, error) +} + +// TipStateCache tracks tipsets and their states by tipset block ids. +// All methods are thread safe. +type TipStateCache struct { + // cache allows lookup of recorded TipSet states by TipSet ID. + cache map[string]TSState + + loader tipLoader + + l sync.RWMutex +} + +// NewTipStateCache is the TipStateCache constructor. +func NewTipStateCache(loader tipLoader) *TipStateCache { + return &TipStateCache{ + cache: make(map[string]TSState, 2880), // one day height + loader: loader, + } +} + +// Put adds an entry to both of TipStateCache's internal indexes. +// After this call the input TipSetMetadata can be looked up by the ID of the tipset. +func (ti *TipStateCache) Put(tsm *TipSetMetadata) { + ti.l.Lock() + defer ti.l.Unlock() + + ti.cache[tsm.TipSet.String()] = TSState{ + StateRoot: tsm.TipSetStateRoot, + Receipts: tsm.TipSetReceipts, + } +} + +// Get returns the tipset given by the input ID and its state. +func (ti *TipStateCache) Get(ctx context.Context, ts *types.TipSet) (TSState, error) { + ti.l.RLock() + state, ok := ti.cache[ts.String()] + ti.l.RUnlock() + if !ok { + tipSetMetadata, err := ti.loader.LoadTipsetMetadata(ctx, ts) + if err != nil { + return TSState{}, xerrors.New("state not exit") + } + ti.Put(tipSetMetadata) + + return TSState{ + StateRoot: tipSetMetadata.TipSetStateRoot, + Receipts: tipSetMetadata.TipSetReceipts, + }, nil + } + return state, nil +} + +// GetTipSetStateRoot returns the tipsetStateRoot from func (ti *TipStateCache) Get(tsKey string). +func (ti *TipStateCache) GetTipSetStateRoot(ctx context.Context, ts *types.TipSet) (cid.Cid, error) { + state, err := ti.Get(ctx, ts) + if err != nil { + return cid.Cid{}, err + } + return state.StateRoot, nil +} + +// GetTipSetReceiptsRoot returns the tipsetReceipts from func (ti *TipStateCache) Get(tsKey string). +func (ti *TipStateCache) GetTipSetReceiptsRoot(ctx context.Context, ts *types.TipSet) (cid.Cid, error) { + state, err := ti.Get(ctx, ts) + if err != nil { + return cid.Cid{}, err + } + return state.Receipts, nil +} + +// Has returns true iff the tipset with the input ID is stored in +// the TipStateCache. +func (ti *TipStateCache) Has(ctx context.Context, ts *types.TipSet) bool { + _, err := ti.Get(ctx, ts) + return err == nil +} + +func (ti *TipStateCache) Del(ts *types.TipSet) { + ti.l.Lock() + defer ti.l.Unlock() + delete(ti.cache, ts.String()) +} + +// makeKey returns a unique string for every parent set key and height input +func makeKey(pKey string, h abi.ChainEpoch) string { + return fmt.Sprintf("p-%s h-%d", pKey, h) +} diff --git a/pkg/chain/traversal.go b/pkg/chain/traversal.go new file mode 100644 index 0000000000..e3580ca3a1 --- /dev/null +++ b/pkg/chain/traversal.go @@ -0,0 +1,195 @@ +package chain + +import ( + "context" + "errors" + + "github.com/filecoin-project/go-state-types/abi" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" +) + +// TipSetProvider provides tipsets for traversal. +type TipSetProvider interface { + GetTipSet(ctx context.Context, tsKey types.TipSetKey) (*types.TipSet, error) +} + +// IterAncestors returns an iterator over tipset ancestors, yielding first the start tipset and +// then its parent tipsets until (and including) the genesis tipset. +func IterAncestors(ctx context.Context, store TipSetProvider, start *types.TipSet) *TipsetIterator { + return &TipsetIterator{ctx, store, start} +} + +// TipsetIterator is an iterator over tipsets. +type TipsetIterator struct { + ctx context.Context + store TipSetProvider + value *types.TipSet +} + +// Value returns the iterator's current value, if not Complete(). +func (it *TipsetIterator) Value() *types.TipSet { + return it.value +} + +// Complete tests whether the iterator is exhausted. +func (it *TipsetIterator) Complete() bool { + return !it.value.Defined() +} + +// Next advances the iterator to the next value. +func (it *TipsetIterator) Next(ctx context.Context) error { + select { + case <-it.ctx.Done(): + return it.ctx.Err() + default: + if it.value.Height() == 0 { + it.value = &types.TipSet{} + } else { + var err error + parentKey := it.value.Parents() + it.value, err = it.store.GetTipSet(ctx, parentKey) + return err + } + return nil + } +} + +// BlockProvider provides blocks. +type BlockProvider interface { + GetBlock(ctx context.Context, cid cid.Cid) (*types.BlockHeader, error) +} + +// LoadTipSetBlocks loads all the blocks for a tipset from the store. +func LoadTipSetBlocks(ctx context.Context, store BlockProvider, key types.TipSetKey) (*types.TipSet, error) { + var blocks []*types.BlockHeader + for _, bid := range key.Cids() { + blk, err := store.GetBlock(ctx, bid) + if err != nil { + return nil, err + } + blocks = append(blocks, blk) + } + return types.NewTipSet(blocks) +} + +type tipsetFromBlockProvider struct { + ctx context.Context // Context to use when loading blocks + blocks BlockProvider // Provides blocks +} + +// TipSetProviderFromBlocks builds a tipset provider backed by a block provider. +// Blocks will be loaded with the provided context, since GetTipSet does not accept a +// context parameter. This can and should be removed when GetTipSet does take a context. +func TipSetProviderFromBlocks(ctx context.Context, blocks BlockProvider) TipSetProvider { + return &tipsetFromBlockProvider{ctx, blocks} +} + +// GetTipSet loads the blocks for a tipset. +func (p *tipsetFromBlockProvider) GetTipSet(ctx context.Context, tsKey types.TipSetKey) (*types.TipSet, error) { + return LoadTipSetBlocks(p.ctx, p.blocks, tsKey) +} + +// CollectTipsToCommonAncestor traverses chains from two tipsets (called old and new) until their common +// ancestor, collecting all tipsets that are in one chain but not the other. +// The resulting lists of tipsets are ordered by decreasing height. +func CollectTipsToCommonAncestor(ctx context.Context, store TipSetProvider, oldHead, newHead *types.TipSet) (oldTips, newTips []*types.TipSet, err error) { + oldIter := IterAncestors(ctx, store, oldHead) + newIter := IterAncestors(ctx, store, newHead) + + commonAncestor, err := FindCommonAncestor(ctx, oldIter, newIter) + if err != nil { + return + } + commonHeight := commonAncestor.Height() + + // Refresh iterators modified by FindCommonAncestors + oldIter = IterAncestors(ctx, store, oldHead) + newIter = IterAncestors(ctx, store, newHead) + + // Add 1 to the height argument so that the common ancestor is not + // included in the outputs. + oldTips, err = CollectTipSetsOfHeightAtLeast(ctx, oldIter, commonHeight+1) + if err != nil { + return + } + newTips, err = CollectTipSetsOfHeightAtLeast(ctx, newIter, commonHeight+1) + return +} + +// ErrNoCommonAncestor is returned when two chains assumed to have a common ancestor do not. +var ErrNoCommonAncestor = errors.New("no common ancestor") + +// FindCommonAncestor returns the common ancestor of the two tipsets pointed to +// by the input iterators. If they share no common ancestor ErrNoCommonAncestor +// will be returned. +func FindCommonAncestor(ctx context.Context, leftIter, rightIter *TipsetIterator) (*types.TipSet, error) { + for !rightIter.Complete() && !leftIter.Complete() { + left := leftIter.Value() + right := rightIter.Value() + + leftHeight := left.Height() + rightHeight := right.Height() + + // Found common ancestor. + if left.Equals(right) { + return left, nil + } + + // Update the pointers. Pointers move back one tipset if they + // point to a tipset at the same height or higher than the + // other pointer's tipset. + if rightHeight >= leftHeight { + if err := rightIter.Next(ctx); err != nil { + return nil, err + } + } + + if leftHeight >= rightHeight { + if err := leftIter.Next(ctx); err != nil { + return nil, err + } + } + } + return nil, ErrNoCommonAncestor +} + +// CollectTipSetsOfHeightAtLeast collects all tipsets with a height greater +// than or equal to minHeight from the input tipset. +func CollectTipSetsOfHeightAtLeast(ctx context.Context, iterator *TipsetIterator, minHeight abi.ChainEpoch) ([]*types.TipSet, error) { + var ret []*types.TipSet + var err error + var h abi.ChainEpoch + for ; !iterator.Complete(); err = iterator.Next(ctx) { + if err != nil { + return nil, err + } + h = iterator.Value().Height() + if h < minHeight { + return ret, nil + } + ret = append(ret, iterator.Value()) + } + return ret, nil +} + +// FindLatestDRAND returns the latest DRAND entry in the chain beginning at start +func FindLatestDRAND(ctx context.Context, start *types.TipSet, reader TipSetProvider) (*types.BeaconEntry, error) { + iterator := IterAncestors(ctx, reader, start) + var err error + for ; !iterator.Complete(); err = iterator.Next(ctx) { + if err != nil { + return nil, err + } + ts := iterator.Value() + // DRAND entries must be the same for all blocks on the tipset as + // an invariant of the tipset provider + + entries := ts.At(0).BeaconEntries + if len(entries) > 0 { + return &entries[len(entries)-1], nil + } + // No entries, simply move on to the next ancestor + } + return nil, errors.New("no DRAND entries in chain") +} diff --git a/pkg/chain/traversal_test.go b/pkg/chain/traversal_test.go new file mode 100644 index 0000000000..f2732921a7 --- /dev/null +++ b/pkg/chain/traversal_test.go @@ -0,0 +1,231 @@ +package chain_test + +import ( + "context" + "testing" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/chain" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func TestIterAncestors(t *testing.T) { + tf.UnitTest(t) + miner, err := address.NewSecp256k1Address([]byte("address")) + require.NoError(t, err) + + t.Run("iterates", func(t *testing.T) { + ctx := context.Background() + store := chain.NewBuilder(t, miner) + + root := store.AppendBlockOnBlocks(ctx) + b11 := store.AppendBlockOnBlocks(ctx, root) + b12 := store.AppendBlockOnBlocks(ctx, root) + b21 := store.AppendBlockOnBlocks(ctx, b11, b12) + + t0 := testhelpers.RequireNewTipSet(t, root) + t1 := testhelpers.RequireNewTipSet(t, b11, b12) + t2 := testhelpers.RequireNewTipSet(t, b21) + + it := chain.IterAncestors(ctx, store, t2) + assert.False(t, it.Complete()) + assert.True(t, t2.Equals(it.Value())) + + assert.NoError(t, it.Next(ctx)) + assert.False(t, it.Complete()) + assert.True(t, t1.Equals(it.Value())) + + assert.NoError(t, it.Next(ctx)) + assert.False(t, it.Complete()) + assert.True(t, t0.Equals(it.Value())) + + assert.NoError(t, it.Next(ctx)) + assert.True(t, it.Complete()) + }) + + t.Run("respects context", func(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + store := chain.NewBuilder(t, miner) + + root := store.AppendBlockOnBlocks(ctx) + b11 := store.AppendBlockOnBlocks(ctx, root) + b12 := store.AppendBlockOnBlocks(ctx, root) + b21 := store.AppendBlockOnBlocks(ctx, b11, b12) + + testhelpers.RequireNewTipSet(t, root) + t1 := testhelpers.RequireNewTipSet(t, b11, b12) + t2 := testhelpers.RequireNewTipSet(t, b21) + + it := chain.IterAncestors(ctx, store, t2) + assert.False(t, it.Complete()) + assert.True(t, t2.Equals(it.Value())) + + assert.NoError(t, it.Next(ctx)) + assert.False(t, it.Complete()) + assert.True(t, t1.Equals(it.Value())) + + cancel() + + assert.Error(t, it.Next(ctx)) + }) +} + +// Happy path +func TestCollectTipSetsOfHeightAtLeast(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + + chainLen := 15 + head := builder.AppendManyOn(ctx, chainLen, types.UndefTipSet) + + stopHeight := abi.ChainEpoch(4) + iterator := chain.IterAncestors(ctx, builder, head) + tipsets, err := chain.CollectTipSetsOfHeightAtLeast(ctx, iterator, stopHeight) + assert.NoError(t, err) + latestHeight := tipsets[0].Height() + assert.Equal(t, abi.ChainEpoch(14), latestHeight) + earliestHeight := tipsets[len(tipsets)-1].Height() + assert.Equal(t, abi.ChainEpoch(4), earliestHeight) + assert.Equal(t, 11, len(tipsets)) +} + +// Height at least 0. +func TestCollectTipSetsOfHeightAtLeastZero(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + + chainLen := 25 + head := builder.AppendManyOn(ctx, chainLen, types.UndefTipSet) + + stopHeight := abi.ChainEpoch(0) + iterator := chain.IterAncestors(ctx, builder, head) + tipsets, err := chain.CollectTipSetsOfHeightAtLeast(ctx, iterator, stopHeight) + assert.NoError(t, err) + latestHeight := tipsets[0].Height() + assert.Equal(t, abi.ChainEpoch(24), latestHeight) + earliestHeight := tipsets[len(tipsets)-1].Height() + assert.Equal(t, abi.ChainEpoch(0), earliestHeight) + assert.Equal(t, chainLen, len(tipsets)) +} + +// The starting epoch is a null block. +func TestCollectTipSetsOfHeightAtLeastStartingEpochIsNull(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + head := builder.Genesis() + + // Add 30 tipsets to the head of the chainStore. + head = builder.AppendManyOn(ctx, 30, head) + + // Now add 10 null blocks and 1 tipset. + head = builder.BuildOneOn(ctx, head, func(b *chain.BlockBuilder) { + b.IncHeight(10) + }) + + // Now add 19 more tipsets. + head = builder.AppendManyOn(ctx, 19, head) + + stopHeight := abi.ChainEpoch(35) + iterator := chain.IterAncestors(ctx, builder, head) + tipsets, err := chain.CollectTipSetsOfHeightAtLeast(ctx, iterator, stopHeight) + assert.NoError(t, err) + latestHeight := tipsets[0].Height() + assert.Equal(t, abi.ChainEpoch(60), latestHeight) + earliestHeight := tipsets[len(tipsets)-1].Height() + assert.Equal(t, abi.ChainEpoch(41), earliestHeight) + assert.Equal(t, 20, len(tipsets)) +} + +func TestFindCommonAncestorSameChain(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + head := builder.Genesis() + // Add 30 tipsets to the head of the chainStore. + head = builder.AppendManyOn(ctx, 30, head) + headIterOne := chain.IterAncestors(ctx, builder, head) + headIterTwo := chain.IterAncestors(ctx, builder, head) + commonAncestor, err := chain.FindCommonAncestor(ctx, headIterOne, headIterTwo) + assert.NoError(t, err) + assert.Equal(t, head, commonAncestor) +} + +func TestFindCommonAncestorFork(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + head := builder.Genesis() + + // Add 3 tipsets to the head of the chainStore. + commonHeadTip := builder.AppendManyOn(ctx, 3, head) + + // Grow the fork chain + lenFork := 10 + forkHead := builder.AppendManyOn(ctx, lenFork, commonHeadTip) + + // Grow the main chain + lenMainChain := 14 + mainHead := builder.AppendManyOn(ctx, lenMainChain, commonHeadTip) + + forkItr := chain.IterAncestors(ctx, builder, forkHead) + mainItr := chain.IterAncestors(ctx, builder, mainHead) + commonAncestor, err := chain.FindCommonAncestor(ctx, mainItr, forkItr) + assert.NoError(t, err) + assert.ObjectsAreEqualValues(commonHeadTip, commonAncestor) +} + +func TestFindCommonAncestorNoFork(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + head := builder.Genesis() + + // Add 30 tipsets to the head of the chainStore. + head = builder.AppendManyOn(ctx, 30, head) + headIterOne := chain.IterAncestors(ctx, builder, head) + + // Now add 19 more tipsets. + expectedAncestor := head + head = builder.AppendManyOn(ctx, 19, head) + headIterTwo := chain.IterAncestors(ctx, builder, head) + + commonAncestor, err := chain.FindCommonAncestor(ctx, headIterOne, headIterTwo) + assert.NoError(t, err) + assert.True(t, expectedAncestor.Equals(commonAncestor)) +} + +// This test exercises an edge case fork that our previous common ancestor +// utility handled incorrectly. +func TestFindCommonAncestorNullBlockFork(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder := chain.NewBuilder(t, address.Undef) + head := builder.Genesis() + + // Add 10 tipsets to the head of the chainStore. + commonHead := builder.AppendManyOn(ctx, 10, head) + + // From the common ancestor, add a block following a null block. + headAfterNull := builder.BuildOneOn(ctx, commonHead, func(b *chain.BlockBuilder) { + b.IncHeight(1) + }) + afterNullItr := chain.IterAncestors(ctx, builder, headAfterNull) + + // Add a block (with no null) on another fork. + headNoNull := builder.AppendOn(ctx, commonHead, 1) + noNullItr := chain.IterAncestors(ctx, builder, headNoNull) + + commonAncestor, err := chain.FindCommonAncestor(ctx, afterNullItr, noNullItr) + assert.NoError(t, err) + assert.ObjectsAreEqualValues(commonHead, commonAncestor) +} diff --git a/pkg/chain/utils.go b/pkg/chain/utils.go new file mode 100644 index 0000000000..8362cf6bd4 --- /dev/null +++ b/pkg/chain/utils.go @@ -0,0 +1,132 @@ +package chain + +import ( + "context" + "reflect" + "runtime" + "strings" + + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/rt" + blockFormat "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + + /* inline-gen template + {{range .actorVersions}} + exported{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/exported"{{end}} + /* inline-gen start */ + + exported0 "github.com/filecoin-project/specs-actors/actors/builtin/exported" + exported2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/exported" + exported3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/exported" + exported4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/exported" + exported5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/exported" + exported6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/exported" + exported7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/exported" + /* inline-gen end */ + + "github.com/filecoin-project/venus/venus-shared/actors/builtin" +) + +type MethodMeta struct { + Name string + + Params reflect.Type + Ret reflect.Type +} + +var MethodsMap = map[cid.Cid]map[abi.MethodNum]MethodMeta{} + +func init() { + // TODO: combine with the runtime actor registry. + var actors []rt.VMActor + + /* inline-gen template + {{range .actorVersions}} + actors = append(actors, exported{{.}}.BuiltinActors()...){{end}} + /* inline-gen start */ + + actors = append(actors, exported0.BuiltinActors()...) + actors = append(actors, exported2.BuiltinActors()...) + actors = append(actors, exported3.BuiltinActors()...) + actors = append(actors, exported4.BuiltinActors()...) + actors = append(actors, exported5.BuiltinActors()...) + actors = append(actors, exported6.BuiltinActors()...) + actors = append(actors, exported7.BuiltinActors()...) + /* inline-gen end */ + + for _, actor := range actors { + exports := actor.Exports() + methods := make(map[abi.MethodNum]MethodMeta, len(exports)) + + // Explicitly add send, it's special. + methods[builtin.MethodSend] = MethodMeta{ + Name: "Send", + Params: reflect.TypeOf(new(abi.EmptyValue)), + Ret: reflect.TypeOf(new(abi.EmptyValue)), + } + + // Iterate over exported methods. Some of these _may_ be nil and + // must be skipped. + for number, export := range exports { + if export == nil { + continue + } + + ev := reflect.ValueOf(export) + et := ev.Type() + + // Extract the method names using reflection. These + // method names always match the field names in the + // `builtin.Method*` structs (tested in the specs-actors + // tests). + fnName := runtime.FuncForPC(ev.Pointer()).Name() + fnName = strings.TrimSuffix(fnName[strings.LastIndexByte(fnName, '.')+1:], "-fm") + + switch abi.MethodNum(number) { + case builtin.MethodSend: + panic("method 0 is reserved for Send") + case builtin.MethodConstructor: + if fnName != "Constructor" { + panic("method 1 is reserved for Constructor") + } + } + + methods[abi.MethodNum(number)] = MethodMeta{ + Name: fnName, + Params: et.In(1), + Ret: et.Out(0), + } + } + MethodsMap[actor.Code()] = methods + } +} + +type storable interface { + ToStorageBlock() (blockFormat.Block, error) +} + +func PutMessage(ctx context.Context, bs blockstoreutil.Blockstore, m storable) (cid.Cid, error) { + b, err := m.ToStorageBlock() + if err != nil { + return cid.Undef, err + } + + if err := bs.Put(ctx, b); err != nil { + return cid.Undef, err + } + + return b.Cid(), nil +} + +// Reverse reverses the order of the slice `chain`. +func Reverse(chain []*types.TipSet) { + // https://github.com/golang/go/wiki/SliceTricks#reversing + for i := len(chain)/2 - 1; i >= 0; i-- { + opp := len(chain) - 1 - i + chain[i], chain[opp] = chain[opp], chain[i] + } +} diff --git a/pkg/chain/waiter.go b/pkg/chain/waiter.go new file mode 100644 index 0000000000..50dc1b86d9 --- /dev/null +++ b/pkg/chain/waiter.go @@ -0,0 +1,348 @@ +package chain + +import ( + "context" + "fmt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/constants" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + bstore "github.com/ipfs/go-ipfs-blockstore" + cbor "github.com/ipfs/go-ipld-cbor" + "github.com/pkg/errors" + "golang.org/x/xerrors" +) + +type MsgLookup struct { + Message cid.Cid // Can be different than requested, in case it was replaced, but only gas values changed + Receipt types.MessageReceipt + ReturnDec interface{} + TipSet types.TipSetKey + Height abi.ChainEpoch +} + +// Abstracts over a store of blockchain state. +type waiterChainReader interface { + GetHead() *types.TipSet + GetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) + LookupID(context.Context, *types.TipSet, address.Address) (address.Address, error) + GetActorAt(context.Context, *types.TipSet, address.Address) (*types.Actor, error) + GetTipSetReceiptsRoot(context.Context, *types.TipSet) (cid.Cid, error) + SubHeadChanges(context.Context) chan []*apitypes.HeadChange +} + +type IStmgr interface { + GetActorAt(context.Context, address.Address, *types.TipSet) (*types.Actor, error) + RunStateTransition(context.Context, *types.TipSet) (root cid.Cid, receipts cid.Cid, err error) +} + +// Waiter waits for a message to appear on chain. +type Waiter struct { + chainReader waiterChainReader + messageProvider MessageProvider + cst cbor.IpldStore + bs bstore.Blockstore + Stmgr IStmgr +} + +// WaitPredicate is a function that identifies a message and returns true when found. +type WaitPredicate func(msg *types.Message, msgCid cid.Cid) bool + +// NewWaiter returns a new Waiter. +func NewWaiter(chainStore waiterChainReader, messages MessageProvider, bs bstore.Blockstore, cst cbor.IpldStore) *Waiter { + return &Waiter{ + chainReader: chainStore, + cst: cst, + bs: bs, + messageProvider: messages, + } +} + +// Find searches the blockchain history (but doesn't wait). +func (w *Waiter) Find(ctx context.Context, msg types.ChainMsg, lookback abi.ChainEpoch, ts *types.TipSet, allowReplaced bool) (*apitypes.ChainMessage, bool, error) { + if ts == nil { + ts = w.chainReader.GetHead() + } + + return w.findMessage(ctx, ts, msg, lookback, allowReplaced) +} + +// WaitPredicate invokes the callback when the passed predicate succeeds. +// See api description. +// +// Note: this method does too much -- the callback should just receive the tipset +// containing the message and the caller should pull the receipt out of the block +// if in fact that's what it wants to do, using something like receiptFromTipset. +// Something like receiptFromTipset is necessary because not every message in +// a block will have a receipt in the tipset: it might be a duplicate message. +// This method will always check for the message in the current head tipset. +// A lookback parameter > 1 will cause this method to check for the message in +// up to that many previous tipsets on the chain of the current head. +func (w *Waiter) WaitPredicate(ctx context.Context, msg types.ChainMsg, confidence uint64, lookback abi.ChainEpoch, allowReplaced bool) (*apitypes.ChainMessage, error) { + ch := w.chainReader.SubHeadChanges(ctx) + chainMsg, found, err := w.waitForMessage(ctx, ch, msg, confidence, lookback, allowReplaced) + if err != nil { + return nil, err + } + if found { + return chainMsg, nil + } + return nil, nil +} + +// Wait uses WaitPredicate to invoke the callback when a message with the given cid appears on chain. +func (w *Waiter) Wait(ctx context.Context, msg types.ChainMsg, confidence uint64, lookbackLimit abi.ChainEpoch, allowReplaced bool) (*apitypes.ChainMessage, error) { + mid := msg.VMMessage().Cid() + log.Infof("Calling Waiter.Wait CID: %s", mid.String()) + + return w.WaitPredicate(ctx, msg, confidence, lookbackLimit, allowReplaced) +} + +// findMessage looks for a matching in the chain and returns the message, +// block and receipt, when it is found. Returns the found message/block or nil +// if now block with the given CID exists in the chain. +// The lookback parameter is the number of tipsets in the past this method will check before giving up. +func (w *Waiter) findMessage(ctx context.Context, from *types.TipSet, m types.ChainMsg, lookback abi.ChainEpoch, allowReplaced bool) (*apitypes.ChainMessage, bool, error) { + limitHeight := from.Height() - lookback + noLimit := lookback == constants.LookbackNoLimit + + cur := from + curActor, err := w.Stmgr.GetActorAt(ctx, m.VMMessage().From, cur) + if err != nil { + return nil, false, xerrors.Errorf("failed to load from actor") + } + + mNonce := m.VMMessage().Nonce + + for { + // If we've reached the genesis block, or we've reached the limit of + // how far back to look + if cur.Height() == 0 || !noLimit && cur.Height() <= limitHeight { + // it ain't here! + return nil, false, nil + } + + select { + case <-ctx.Done(): + return nil, false, nil + default: + } + + // we either have no messages from the sender, or the latest message we found has a lower nonce than the one being searched for, + // either way, no reason to lookback, it ain't there + if curActor == nil || curActor.Nonce == 0 || curActor.Nonce < mNonce { + return nil, false, nil + } + + pts, err := w.chainReader.GetTipSet(ctx, cur.Parents()) + if err != nil { + return nil, false, xerrors.Errorf("failed to load tipset during msg wait searchback: %w", err) + } + + grandParent, err := w.chainReader.GetTipSet(ctx, pts.Parents()) + if err != nil { + return nil, false, xerrors.Errorf("failed to load tipset during msg wait searchback: %w", err) + } + + act, err := w.Stmgr.GetActorAt(ctx, m.VMMessage().From, grandParent) + actorNoExist := errors.Is(err, types.ErrActorNotFound) + if err != nil && !actorNoExist { + return nil, false, xerrors.Errorf("failed to load the actor: %w", err) + } + + // check that between cur and parent tipset the nonce fell into range of our message + if actorNoExist || (curActor.Nonce > mNonce && act.Nonce <= mNonce) { + msg, found, err := w.receiptForTipset(ctx, cur, m, allowReplaced) + if err != nil { + log.Errorf("Waiter.Wait: %s", err) + return nil, false, err + } + if found { + return msg, true, nil + } + } + + cur = pts + curActor = act + } +} + +// waitForMessage looks for a matching message in a channel of tipsets and returns +// the message, block and receipt, when it is found. Reads until the channel is +// closed or the context done. Returns the found message/block (or nil if the +// channel closed without finding it), whether it was found, or an error. +// notice matching mesage by message from and nonce. the return message may not be +// expected, because there maybe another message have the same from and nonce value +func (w *Waiter) waitForMessage(ctx context.Context, ch <-chan []*apitypes.HeadChange, msg types.ChainMsg, confidence uint64, lookbackLimit abi.ChainEpoch, allowReplaced bool) (*apitypes.ChainMessage, bool, error) { + current, ok := <-ch + if !ok { + return nil, false, fmt.Errorf("SubHeadChanges stream was invalid") + } + //todo message wait + if len(current) != 1 { + return nil, false, fmt.Errorf("SubHeadChanges first entry should have been one item") + } + + if current[0].Type != HCCurrent { + return nil, false, fmt.Errorf("expected current head on SHC stream (got %s)", current[0].Type) + } + + currentHead := current[0].Val + chainMsg, found, err := w.receiptForTipset(ctx, currentHead, msg, allowReplaced) + if err != nil { + return nil, false, err + } + if found { + return chainMsg, found, nil + } + + var backRcp *apitypes.ChainMessage + backSearchWait := make(chan struct{}) + go func() { + r, foundMsg, err := w.findMessage(ctx, currentHead, msg, lookbackLimit, allowReplaced) + if err != nil { + log.Warnf("failed to look back through chain for message: %w", err) + return + } + if foundMsg { + backRcp = r + close(backSearchWait) + } + }() + + var candidateTS *types.TipSet + var candidateRcp *apitypes.ChainMessage + heightOfHead := currentHead.Height() + reverts := map[string]bool{} + + for { + select { + case notif, ok := <-ch: + if !ok { + return nil, false, err + } + for _, val := range notif { + switch val.Type { + case HCRevert: + if val.Val.Equals(candidateTS) { + candidateTS = nil + candidateRcp = nil + } + if backSearchWait != nil { + reverts[val.Val.Key().String()] = true + } + case HCApply: + if candidateTS != nil && val.Val.Height() >= candidateTS.Height()+abi.ChainEpoch(confidence) { + return candidateRcp, true, nil + } + + r, foundMsg, err := w.receiptForTipset(ctx, val.Val, msg, allowReplaced) + if err != nil { + return nil, false, err + } + if r != nil { + if confidence == 0 { + return r, foundMsg, err + } + candidateTS = val.Val + candidateRcp = r + } + heightOfHead = val.Val.Height() + } + } + case <-backSearchWait: + // check if we found the message in the chain and that is hasn't been reverted since we started searching + if backRcp != nil && !reverts[backRcp.TS.Key().String()] { + // if head is at or past confidence interval, return immediately + if heightOfHead >= backRcp.TS.Height()+abi.ChainEpoch(confidence) { + return backRcp, true, nil + } + + // wait for confidence interval + candidateTS = backRcp.TS + candidateRcp = backRcp + } + reverts = nil + backSearchWait = nil + case <-ctx.Done(): + return nil, false, err + } + } +} + +func (w *Waiter) receiptForTipset(ctx context.Context, ts *types.TipSet, msg types.ChainMsg, allowReplaced bool) (*apitypes.ChainMessage, bool, error) { + // The genesis block + if ts.Height() == 0 { + return nil, false, nil + } + + pts, err := w.chainReader.GetTipSet(ctx, ts.Parents()) + if err != nil { + return nil, false, err + } + blockMessageInfos, err := w.messageProvider.LoadTipSetMessage(ctx, pts) + if err != nil { + return nil, false, err + } + expectedMsg := msg.VMMessage() + expectedCid := msg.Cid() + expectedNonce := msg.VMMessage().Nonce + expectedFrom := msg.VMMessage().From + for _, bms := range blockMessageInfos { + for _, msg := range append(bms.BlsMessages, bms.SecpkMessages...) { + msgCid := msg.Cid() + if msg.VMMessage().From == expectedFrom { // cheaper to just check origin first + if msg.VMMessage().Nonce == expectedNonce { + if allowReplaced && msg.VMMessage().EqualCall(expectedMsg) { + if expectedCid != msgCid { + log.Warnw("found message with equal nonce and call params but different CID", + "wanted", expectedCid, "found", msgCid, "nonce", expectedNonce, "from", expectedFrom) + } + recpt, err := w.receiptByIndex(ctx, pts, msgCid, blockMessageInfos) + if err != nil { + return nil, false, errors.Wrap(err, "error retrieving receipt from tipset") + } + return &apitypes.ChainMessage{TS: ts, Message: msg.VMMessage(), Block: bms.Block, Receipt: recpt}, true, nil + } + + // this should be that message + return nil, false, xerrors.Errorf("found message with equal nonce as the one we are looking for (F: n %d, TS: %s n%d)", + expectedMsg.Nonce, msg.Cid(), msg.VMMessage().Nonce) + } + } + } + } + + return nil, false, nil +} + +func (w *Waiter) receiptByIndex(ctx context.Context, ts *types.TipSet, targetCid cid.Cid, blockMsgs []types.BlockMessagesInfo) (*types.MessageReceipt, error) { + var receiptCid cid.Cid + var err error + if _, receiptCid, err = w.Stmgr.RunStateTransition(ctx, ts); err != nil { + return nil, xerrors.Errorf("RunStateTransition failed:%w", err) + } + + receipts, err := w.messageProvider.LoadReceipts(ctx, receiptCid) + if err != nil { + return nil, err + } + + receiptIndex := 0 + for _, blkInfo := range blockMsgs { + //todo aggrate bls and secp msg to one msg + for _, msg := range append(blkInfo.BlsMessages, blkInfo.SecpkMessages...) { + if msg.Cid().Equals(targetCid) { + if receiptIndex >= len(receipts) { + return nil, errors.Errorf("could not find message receipt at index %d", receiptIndex) + } + return &receipts[receiptIndex], nil + } + receiptIndex++ + } + } + return nil, errors.Errorf("could not find message cid %s in dedupped messages", targetCid.String()) +} diff --git a/pkg/chain/waiter_test.go b/pkg/chain/waiter_test.go new file mode 100644 index 0000000000..5e3826d5fb --- /dev/null +++ b/pkg/chain/waiter_test.go @@ -0,0 +1,59 @@ +package chain + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + "github.com/filecoin-project/venus/pkg/constants" + + "github.com/filecoin-project/go-address" + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + cbor "github.com/ipfs/go-ipld-cbor" + "github.com/stretchr/testify/assert" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" +) + +var mockSigner, _ = testhelpers.NewMockSignersAndKeyInfo(10) + +var newSignedMessage = testhelpers.NewSignedMessageForTestGetter(mockSigner) + +func setupTest(t *testing.T) (cbor.IpldStore, *Store, *MessageStore, *Waiter) { + builder := NewBuilder(t, address.Undef) + waiter := NewWaiter(builder.store, builder.mstore, builder.bs, builder.cstore) + waiter.Stmgr = builder.IStmgr() + + return builder.cstore, builder.store, builder.mstore, waiter +} + +func TestWaitRespectsContextCancel(t *testing.T) { + tf.UnitTest(t) + + ctx, cancel := context.WithCancel(context.Background()) + _, _, _, waiter := setupTest(t) + + var err error + var chainMessage *apitypes.ChainMessage + doneCh := make(chan struct{}) + go func() { + defer close(doneCh) + chainMessage, err = waiter.Wait(ctx, newSignedMessage(0), constants.DefaultConfidence, constants.DefaultMessageWaitLookback, true) + }() + + cancel() + + select { + case <-doneCh: + fmt.Println(err) + // assert.Error(t, err) + case <-time.After(2 * time.Second): + assert.Fail(t, "Wait should have returned when context was canceled") + } + assert.Nil(t, chainMessage) +} diff --git a/pkg/chainsync/chainsync.go b/pkg/chainsync/chainsync.go new file mode 100644 index 0000000000..90ae44eb0a --- /dev/null +++ b/pkg/chainsync/chainsync.go @@ -0,0 +1,70 @@ +package chainsync + +import ( + "context" + + chain2 "github.com/filecoin-project/venus/app/submodule/chain" + "github.com/filecoin-project/venus/pkg/chainsync/exchange" + "github.com/filecoin-project/venus/pkg/chainsync/types" + "github.com/filecoin-project/venus/pkg/consensus" + "github.com/filecoin-project/venus/pkg/statemanger" + types2 "github.com/filecoin-project/venus/venus-shared/chain" + + blockstore "github.com/ipfs/go-ipfs-blockstore" + + "github.com/filecoin-project/venus/pkg/chainsync/dispatcher" + "github.com/filecoin-project/venus/pkg/chainsync/syncer" + "github.com/filecoin-project/venus/pkg/clock" + "github.com/filecoin-project/venus/pkg/fork" +) + +// BlockProposer allows callers to propose new blocks for inclusion in the chain. +type BlockProposer interface { + SetConcurrent(number int64) + Concurrent() int64 + SyncTracker() *types.TargetTracker + SendHello(ci *types2.ChainInfo) error + SendOwnBlock(ci *types2.ChainInfo) error + SendGossipBlock(ci *types2.ChainInfo) error +} + +var _ = (BlockProposer)((*dispatcher.Dispatcher)(nil)) + +// Manager sync the chain. +type Manager struct { + dispatcher *dispatcher.Dispatcher +} + +// NewManager creates a new chain sync manager. +func NewManager( + stmgr *statemanger.Stmgr, + hv *consensus.BlockValidator, + submodule *chain2.ChainSubmodule, + cs syncer.ChainSelector, + bsstore blockstore.Blockstore, + exchangeClient exchange.Client, + c clock.Clock, + fork fork.IFork) (Manager, error) { + + chainSyncer, err := syncer.NewSyncer(stmgr, hv, cs, submodule.ChainReader, + submodule.MessageStore, bsstore, + exchangeClient, c, fork) + if err != nil { + return Manager{}, err + } + + return Manager{ + dispatcher: dispatcher.NewDispatcher(chainSyncer), + }, nil +} + +// Start starts the chain sync manager. +func (m *Manager) Start(ctx context.Context) error { + m.dispatcher.Start(ctx) + return nil +} + +// BlockProposer returns the block proposer. +func (m *Manager) BlockProposer() BlockProposer { + return m.dispatcher +} diff --git a/pkg/chainsync/dispatcher/dispatcher.go b/pkg/chainsync/dispatcher/dispatcher.go new file mode 100644 index 0000000000..4abc9d9bee --- /dev/null +++ b/pkg/chainsync/dispatcher/dispatcher.go @@ -0,0 +1,265 @@ +package dispatcher + +import ( + "container/list" + "context" + "runtime/debug" + "sync" + atmoic2 "sync/atomic" + "time" + + "github.com/filecoin-project/venus/pkg/chainsync/types" + types2 "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/streadway/handy/atomic" + + logging "github.com/ipfs/go-log/v2" +) + +var log = logging.Logger("chainsync.dispatcher") + +// DefaultInQueueSize is the bucketSize of the channel used for receiving targets from producers. +const DefaultInQueueSize = 5 + +// DefaultWorkQueueSize is the bucketSize of the work queue +const DefaultWorkQueueSize = 15 + +// dispatchSyncer is the interface of the logic syncing incoming chains +type dispatchSyncer interface { + Head() *types2.TipSet + HandleNewTipSet(context.Context, *types.Target) error +} + +// NewDispatcher creates a new syncing dispatcher with default queue sizes. +func NewDispatcher(catchupSyncer dispatchSyncer) *Dispatcher { + return NewDispatcherWithSizes(catchupSyncer, DefaultWorkQueueSize, DefaultInQueueSize) +} + +// NewDispatcherWithSizes creates a new syncing dispatcher. +func NewDispatcherWithSizes(syncer dispatchSyncer, workQueueSize, inQueueSize int) *Dispatcher { + return &Dispatcher{ + workTracker: types.NewTargetTracker(workQueueSize), + syncer: syncer, + incoming: make(chan *types.Target, inQueueSize), + control: make(chan interface{}, 1), + registeredCb: func(t *types.Target, err error) {}, + cancelControler: list.New(), + maxCount: 1, + } +} + +// cbMessage registers a user callback to be fired following every successful +// sync. +type cbMessage struct { + cb func(*types.Target, error) +} + +// Dispatcher receives, sorts and dispatches targets to the catchupSyncer to control +// chain syncing. +// +// New targets arrive over the incoming channel. The dispatcher then puts them +// into the workTracker which sorts them by their claimed chain height. The +// dispatcher pops the highest priority target from the queue and then attempts +// to sync the target using its internal catchupSyncer. +// +// The dispatcher has a simple control channel. It reads this for external +// controls. Currently there is only one kind of control message. It registers +// a callback that the dispatcher will call after every non-erroring sync. +type Dispatcher struct { + // workTracker is a priority queue of target chain heads that should be + // synced + workTracker *types.TargetTracker + // incoming is the queue of incoming sync targets to the dispatcher. + incoming chan *types.Target + // syncer is used for dispatching sync targets for chain heads to sync + // local chain state to these targets. + syncer dispatchSyncer + + // registeredCb is a callback registered over the control channel. It + // is called after every successful sync. + registeredCb func(*types.Target, error) + // control is a queue of control messages not yet processed. + control chan interface{} + + cancelControler *list.List + lk sync.Mutex + conCurrent atomic.Int + maxCount int64 +} + +// SendOwnBlock handles chain info from a node's own mining system +func (d *Dispatcher) SyncTracker() *types.TargetTracker { + return d.workTracker +} + +// SendHello handles chain information from bootstrap peers. +func (d *Dispatcher) SendHello(ci *types2.ChainInfo) error { + return d.addTracker(ci) +} + +// SendOwnBlock handles chain info from a node's own mining system +func (d *Dispatcher) SendOwnBlock(ci *types2.ChainInfo) error { + return d.addTracker(ci) +} + +// SendGossipBlock handles chain info from new blocks sent on pubsub +func (d *Dispatcher) SendGossipBlock(ci *types2.ChainInfo) error { + return d.addTracker(ci) +} + +func (d *Dispatcher) addTracker(ci *types2.ChainInfo) error { + d.incoming <- &types.Target{ + ChainInfo: *ci, + Base: d.syncer.Head(), + Start: time.Now(), + } + return nil +} + +// Start launches the business logic for the syncing subsystem. +func (d *Dispatcher) Start(syncingCtx context.Context) { + go d.processIncoming(syncingCtx) + + go d.syncWorker(syncingCtx) +} + +func (d *Dispatcher) processIncoming(ctx context.Context) { + defer func() { + log.Info("exiting sync dispatcher") + if r := recover(); r != nil { + log.Errorf("panic: %v", r) + debug.PrintStack() + } + }() + + for { + // Handle shutdown + select { + case <-ctx.Done(): + log.Info("context done") + return + case ctrl := <-d.control: + log.Infof("processing control: %v", ctrl) + d.processCtrl(ctrl) + case target := <-d.incoming: + // Sort new targets by putting on work queue. + if d.workTracker.Add(target) { + log.Infof("received height %d Blocks: %d %s current work len %d incoming len: %d", + target.Head.Height(), target.Head.Len(), target.Head.Key(), d.workTracker.Len(), len(d.incoming)) + } + } + } +} + +//SetConcurrent set the max goroutine to syncing target +func (d *Dispatcher) SetConcurrent(number int64) { + d.lk.Lock() + defer d.lk.Unlock() + d.maxCount = number + diff := d.conCurrent.Get() - d.maxCount + if diff > 0 { + ele := d.cancelControler.Back() + for ele != nil && diff > 0 { + ele.Value.(context.CancelFunc)() + preEle := ele.Prev() + d.cancelControler.Remove(ele) + ele = preEle + diff-- + } + } +} + +//Concurrent get current max syncing goroutine +func (d *Dispatcher) Concurrent() int64 { + d.lk.Lock() + defer d.lk.Unlock() + return d.maxCount +} + +func (d *Dispatcher) selectTarget(lastTarget *types.Target, ch <-chan struct{}) (*types.Target, bool) { +exitFor: + for { // we are purpose to consume all notifies in channel + select { + case _, isok := <-ch: + if !isok { + return nil, false + } + default: + break exitFor + } + } + return d.workTracker.Select() +} + +func (d *Dispatcher) syncWorker(ctx context.Context) { + defer func() { + log.Infof("dispatcher.syncworker exit.") + }() + + const chKey = "sync-worker" + ch := d.workTracker.SubNewTarget(chKey, 20) + var unsolvedNotify = int64(0) + var lastTarget *types.Target + for { + select { + // must make sure, 'ch' is not blocked, or may cause syncing problems + case _, isok := <-ch: + if !isok { + break + } + if syncTarget, popped := d.selectTarget(lastTarget, ch); popped { + lastTarget = syncTarget + if d.conCurrent.Get() < d.maxCount { + atmoic2.StoreInt64(&unsolvedNotify, 0) + syncTarget.State = types.StateInSyncing + ctx, cancel := context.WithCancel(ctx) + d.cancelControler.PushBack(cancel) + d.conCurrent.Add(1) + go func() { + err := d.syncer.HandleNewTipSet(ctx, syncTarget) + if err != nil { + log.Infof("failed sync of %v at %d %s", syncTarget.Head.Key(), syncTarget.Head.Height(), err) + } + d.workTracker.Remove(syncTarget) + d.registeredCb(syncTarget, err) + d.conCurrent.Add(-1) + + // new 'target' notify may ignored, because of 'conCurrent' reaching 'maxCount', + // that means there is a new 'target' waiting for solving. + if atmoic2.LoadInt64(&unsolvedNotify) > 0 { + ch <- struct{}{} + } + }() + } else { + atmoic2.StoreInt64(&unsolvedNotify, 1) + } + } + case <-ctx.Done(): + atmoic2.StoreInt64(&unsolvedNotify, 0) + d.workTracker.UnsubNewTarget(chKey) + ch = nil + log.Infof("context.done in dispatcher.syncworker.") + return + } + } +} + +// RegisterCallback registers a callback on the dispatcher that +// will fire after every successful target sync. +func (d *Dispatcher) RegisterCallback(cb func(*types.Target, error)) { + d.control <- cbMessage{cb: cb} +} + +func (d *Dispatcher) processCtrl(ctrlMsg interface{}) { + // processCtrl takes a control message, determines its type, and performs the + // specified action. + // + // Using interfaces is overkill for now but is the way to make this + // extensible. (Delete this comment if we add more than one control) + switch typedMsg := ctrlMsg.(type) { + case cbMessage: + d.registeredCb = typedMsg.cb + default: + // We don't know this type, log and ignore + log.Info("dispatcher control can not handle type %T", typedMsg) + } +} diff --git a/pkg/chainsync/dispatcher/dispatcher_test.go b/pkg/chainsync/dispatcher/dispatcher_test.go new file mode 100644 index 0000000000..ee0cd221e3 --- /dev/null +++ b/pkg/chainsync/dispatcher/dispatcher_test.go @@ -0,0 +1,186 @@ +package dispatcher_test + +import ( + "context" + "testing" + "time" + + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + fbig "github.com/filecoin-project/go-state-types/big" + acrypto "github.com/filecoin-project/go-state-types/crypto" + proof2 "github.com/filecoin-project/specs-actors/v2/actors/runtime/proof" + syncTypes "github.com/filecoin-project/venus/pkg/chainsync/types" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/chainsync/dispatcher" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +type mockSyncer struct { + headsCalled []*types.TipSet +} + +func (fs *mockSyncer) Head() *types.TipSet { + return types.UndefTipSet +} + +func (fs *mockSyncer) HandleNewTipSet(_ context.Context, ci *syncTypes.Target) error { + fs.headsCalled = append(fs.headsCalled, ci.Head) + return nil +} + +func TestDispatchStartHappy(t *testing.T) { + tf.UnitTest(t) + s := &mockSyncer{ + headsCalled: make([]*types.TipSet, 0), + } + testDispatch := dispatcher.NewDispatcher(s) + + cis := []*types.ChainInfo{ + // We need to put these in priority order to avoid a race. + // If we send 0 before 42, it is possible the dispatcher will + // pick up 0 and start processing before it sees 42. + chainInfoWithHeightAndWeight(t, 42, 1), + chainInfoWithHeightAndWeight(t, 16, 2), + chainInfoWithHeightAndWeight(t, 3, 3), + chainInfoWithHeightAndWeight(t, 2, 4), + chainInfoWithHeightAndWeight(t, 1, 5), + } + + testDispatch.Start(context.Background()) + t.Logf("waiting for 'syncWorker' input channel standby for 100(ms)") + time.Sleep(time.Millisecond * 100) + + // set up a blocking channel and register to unblock after 5 synced + waitCh := make(chan struct{}) + testDispatch.RegisterCallback(func(target *syncTypes.Target, _ error) { + if target.Head.Key().Equals(cis[4].Head.Key()) { + waitCh <- struct{}{} + } + }) + + // receive requests before Start() to test deterministic order + for _, ci := range cis { + go func(info *types.ChainInfo) { + assert.NoError(t, testDispatch.SendHello(info)) + }(ci) + } + + select { + case <-waitCh: + case <-time.After(time.Second * 5): + assert.Failf(t, "", "couldn't waited a correct chain syncing target in 5(s)") + } +} + +func TestQueueHappy(t *testing.T) { + tf.UnitTest(t) + testQ := syncTypes.NewTargetTracker(20) + + // Add syncRequests out of order + sR0 := &syncTypes.Target{ChainInfo: *(chainInfoWithHeightAndWeight(t, 0, 1001))} + sR1 := &syncTypes.Target{ChainInfo: *(chainInfoWithHeightAndWeight(t, 1, 1001))} + sR2 := &syncTypes.Target{ChainInfo: *(chainInfoWithHeightAndWeight(t, 2, 1001))} + sR47 := &syncTypes.Target{ChainInfo: *(chainInfoWithHeightAndWeight(t, 47, 1001))} + + testQ.Add(sR2) + testQ.Add(sR47) + testQ.Add(sR0) + testQ.Add(sR1) + + assert.Equal(t, 1, testQ.Len()) + + // Pop in order + out0 := requirePop(t, testQ) + + weight := out0.ChainInfo.Head.ParentWeight() + assert.Equal(t, int64(1001), weight.Int.Int64()) +} + +func TestQueueDuplicates(t *testing.T) { + tf.UnitTest(t) + testQ := syncTypes.NewTargetTracker(20) + + // Add syncRequests with same height + sR0 := &syncTypes.Target{ChainInfo: *(chainInfoWithHeightAndWeight(t, 0, 1001))} + sR0dup := &syncTypes.Target{ChainInfo: *(chainInfoWithHeightAndWeight(t, 0, 1001))} + + testQ.Add(sR0) + testQ.Add(sR0dup) + + // Only one of these makes it onto the queue + assert.Equal(t, 1, testQ.Len()) + + // Pop + first := requirePop(t, testQ) + assert.Equal(t, abi.ChainEpoch(0), first.ChainInfo.Head.Height()) + testQ.Remove(first) + +} + +func TestQueueEmptyPopErrors(t *testing.T) { + tf.UnitTest(t) + testQ := syncTypes.NewTargetTracker(20) + sR0 := &syncTypes.Target{ChainInfo: *(chainInfoWithHeightAndWeight(t, 0, 1002))} + sR47 := &syncTypes.Target{ChainInfo: *(chainInfoWithHeightAndWeight(t, 47, 1001))} + + // Add 2 + testQ.Add(sR47) + testQ.Add(sR0) + + // Pop 3 + assert.Equal(t, 1, testQ.Len()) + first := requirePop(t, testQ) + testQ.Remove(first) + assert.Equal(t, 0, testQ.Len()) +} + +// requirePop is a helper requiring that pop does not error +func requirePop(t *testing.T, q *syncTypes.TargetTracker) *syncTypes.Target { + req, popped := q.Select() + require.True(t, popped) + return req +} + +// chainInfoWithHeightAndWeight is a helper that constructs a unique chain info off of +// an int. The tipset key is a faked cid from the string of that integer and +// the height is that integer. +func chainInfoWithHeightAndWeight(t *testing.T, h int, weight int64) *types.ChainInfo { + newAddress := testhelpers.NewForTestGetter() + posts := []proof2.PoStProof{{PoStProof: abi.RegisteredPoStProof_StackedDrgWinning32GiBV1, ProofBytes: []byte{0x07}}} + blk := &types.BlockHeader{ + Miner: newAddress(), + Ticket: &types.Ticket{VRFProof: []byte{0x03, 0x01, 0x02}}, + ElectionProof: &types.ElectionProof{VRFProof: []byte{0x0c, 0x0d}}, + BeaconEntries: []types.BeaconEntry{ + { + Round: 44, + Data: []byte{0xc0}, + }, + }, + Height: abi.ChainEpoch(h), + Messages: testhelpers.CidFromString(t, "someothercid"), + ParentMessageReceipts: testhelpers.CidFromString(t, "someothercid"), + Parents: []cid.Cid{testhelpers.CidFromString(t, "someothercid")}, + ParentWeight: fbig.NewInt(weight), + ForkSignaling: 2, + ParentStateRoot: testhelpers.CidFromString(t, "someothercid"), + Timestamp: 4, + ParentBaseFee: abi.NewTokenAmount(20), + WinPoStProof: posts, + BlockSig: &acrypto.Signature{ + Type: acrypto.SigTypeBLS, + Data: []byte{0x4}, + }, + } + b, _ := types.NewTipSet([]*types.BlockHeader{blk}) + return &types.ChainInfo{ + Head: b, + } +} diff --git a/pkg/chainsync/exchange/cbor_gen.go b/pkg/chainsync/exchange/cbor_gen.go new file mode 100644 index 0000000000..604aec8982 --- /dev/null +++ b/pkg/chainsync/exchange/cbor_gen.go @@ -0,0 +1,647 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package exchange + +import ( + "fmt" + "io" + "sort" + + chain "github.com/filecoin-project/venus/venus-shared/chain" + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = sort.Sort + +var lengthBufRequest = []byte{131} + +func (t *Request) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufRequest); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Head ([]cid.Cid) (slice) + if len(t.Head) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Head was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Head))); err != nil { + return err + } + for _, v := range t.Head { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.Head: %w", err) + } + } + + // t.Length (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Length)); err != nil { + return err + } + + // t.Options (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Options)); err != nil { + return err + } + + return nil +} + +func (t *Request) UnmarshalCBOR(r io.Reader) error { + *t = Request{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Head ([]cid.Cid) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Head: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Head = make([]cid.Cid, extra) + } + + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.Head failed: %w", err) + } + t.Head[i] = c + } + + // t.Length (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Length = uint64(extra) + + } + // t.Options (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Options = uint64(extra) + + } + return nil +} + +var lengthBufResponse = []byte{131} + +func (t *Response) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufResponse); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Status (exchange.status) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Status)); err != nil { + return err + } + + // t.ErrorMessage (string) (string) + if len(t.ErrorMessage) > cbg.MaxLength { + return xerrors.Errorf("Value in field t.ErrorMessage was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len(t.ErrorMessage))); err != nil { + return err + } + if _, err := io.WriteString(w, string(t.ErrorMessage)); err != nil { + return err + } + + // t.Chain ([]*exchange.BSTipSet) (slice) + if len(t.Chain) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Chain was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Chain))); err != nil { + return err + } + for _, v := range t.Chain { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + return nil +} + +func (t *Response) UnmarshalCBOR(r io.Reader) error { + *t = Response{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Status (exchange.status) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Status = status(extra) + + } + // t.ErrorMessage (string) (string) + + { + sval, err := cbg.ReadStringBuf(br, scratch) + if err != nil { + return err + } + + t.ErrorMessage = string(sval) + } + // t.Chain ([]*exchange.BSTipSet) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Chain: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Chain = make([]*BSTipSet, extra) + } + + for i := 0; i < int(extra); i++ { + + var v BSTipSet + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Chain[i] = &v + } + + return nil +} + +var lengthBufCompactedMessages = []byte{132} + +func (t *CompactedMessages) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufCompactedMessages); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Bls ([]*chain.Message) (slice) + if len(t.Bls) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Bls was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Bls))); err != nil { + return err + } + for _, v := range t.Bls { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.BlsIncludes ([][]uint64) (slice) + if len(t.BlsIncludes) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.BlsIncludes was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.BlsIncludes))); err != nil { + return err + } + for _, v := range t.BlsIncludes { + if len(v) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field v was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(v))); err != nil { + return err + } + for _, v := range v { + if err := cbg.CborWriteHeader(w, cbg.MajUnsignedInt, uint64(v)); err != nil { + return err + } + } + } + + // t.Secpk ([]*chain.SignedMessage) (slice) + if len(t.Secpk) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Secpk was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Secpk))); err != nil { + return err + } + for _, v := range t.Secpk { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.SecpkIncludes ([][]uint64) (slice) + if len(t.SecpkIncludes) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.SecpkIncludes was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.SecpkIncludes))); err != nil { + return err + } + for _, v := range t.SecpkIncludes { + if len(v) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field v was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(v))); err != nil { + return err + } + for _, v := range v { + if err := cbg.CborWriteHeader(w, cbg.MajUnsignedInt, uint64(v)); err != nil { + return err + } + } + } + return nil +} + +func (t *CompactedMessages) UnmarshalCBOR(r io.Reader) error { + *t = CompactedMessages{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 4 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Bls ([]*chain.Message) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Bls: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Bls = make([]*chain.Message, extra) + } + + for i := 0; i < int(extra); i++ { + + var v chain.Message + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Bls[i] = &v + } + + // t.BlsIncludes ([][]uint64) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.BlsIncludes: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.BlsIncludes = make([][]uint64, extra) + } + + for i := 0; i < int(extra); i++ { + { + var maj byte + var extra uint64 + var err error + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.BlsIncludes[i]: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.BlsIncludes[i] = make([]uint64, extra) + } + + for j := 0; j < int(extra); j++ { + + maj, val, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return xerrors.Errorf("failed to read uint64 for t.BlsIncludes[i] slice: %w", err) + } + + if maj != cbg.MajUnsignedInt { + return xerrors.Errorf("value read for array t.BlsIncludes[i] was not a uint, instead got %d", maj) + } + + t.BlsIncludes[i][j] = uint64(val) + } + + } + } + + // t.Secpk ([]*chain.SignedMessage) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Secpk: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Secpk = make([]*chain.SignedMessage, extra) + } + + for i := 0; i < int(extra); i++ { + + var v chain.SignedMessage + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Secpk[i] = &v + } + + // t.SecpkIncludes ([][]uint64) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.SecpkIncludes: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.SecpkIncludes = make([][]uint64, extra) + } + + for i := 0; i < int(extra); i++ { + { + var maj byte + var extra uint64 + var err error + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.SecpkIncludes[i]: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.SecpkIncludes[i] = make([]uint64, extra) + } + + for j := 0; j < int(extra); j++ { + + maj, val, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return xerrors.Errorf("failed to read uint64 for t.SecpkIncludes[i] slice: %w", err) + } + + if maj != cbg.MajUnsignedInt { + return xerrors.Errorf("value read for array t.SecpkIncludes[i] was not a uint, instead got %d", maj) + } + + t.SecpkIncludes[i][j] = uint64(val) + } + + } + } + + return nil +} + +var lengthBufBSTipSet = []byte{130} + +func (t *BSTipSet) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufBSTipSet); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Blocks ([]*chain.BlockHeader) (slice) + if len(t.Blocks) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Blocks was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Blocks))); err != nil { + return err + } + for _, v := range t.Blocks { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.Messages (exchange.CompactedMessages) (struct) + if err := t.Messages.MarshalCBOR(w); err != nil { + return err + } + return nil +} + +func (t *BSTipSet) UnmarshalCBOR(r io.Reader) error { + *t = BSTipSet{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Blocks ([]*chain.BlockHeader) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Blocks: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Blocks = make([]*chain.BlockHeader, extra) + } + + for i := 0; i < int(extra); i++ { + + var v chain.BlockHeader + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Blocks[i] = &v + } + + // t.Messages (exchange.CompactedMessages) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.Messages = new(CompactedMessages) + if err := t.Messages.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Messages pointer: %w", err) + } + } + + } + return nil +} diff --git a/pkg/chainsync/exchange/client.go b/pkg/chainsync/exchange/client.go new file mode 100644 index 0000000000..aa83a31035 --- /dev/null +++ b/pkg/chainsync/exchange/client.go @@ -0,0 +1,499 @@ +package exchange + +import ( + "bufio" + "bytes" + "context" + "fmt" + "io/ioutil" + "math/rand" + "time" + + cborutil "github.com/filecoin-project/go-cbor-util" + logging "github.com/ipfs/go-log" + + "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + + "go.opencensus.io/trace" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/net" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var exchangeClientLogger = logging.Logger("exchange.client") + +// client implements exchange.Client, using the libp2p ChainExchange protocol +// as the fetching mechanism. +type client struct { + // Connection manager used to contact the server. + // FIXME: We should have a reduced interface here, initialized + // just with our protocol ID, we shouldn't be able to open *any* + // connection. + host host.Host + + peerTracker *bsPeerTracker +} + +var _ Client = (*client)(nil) + +// NewClient creates a new libp2p-based exchange.Client that uses the libp2p +// ChainExhange protocol as the fetching mechanism. +func NewClient(host host.Host, pmgr net.IPeerMgr) Client { + return &client{ + host: host, + peerTracker: newPeerTracker(host, pmgr), + } +} + +// Main logic of the client request service. The provided `Request` +// is sent to the `singlePeer` if one is indicated or to all available +// ones otherwise. The response is processed and validated according +// to the `Request` options. Either a `validatedResponse` is returned +// (which can be safely accessed), or an `error` that may represent +// either a response error status, a failed validation or an internal +// error. +// +// This is the internal single point of entry for all external-facing +// APIs, currently we have 3 very heterogeneous services exposed: +// * GetBlocks: Headers +// * GetFullTipSet: Headers | Messages +// * GetChainMessages: Messages +// This function handles all the different combinations of the available +// request options without disrupting external calls. In the future the +// consumers should be forced to use a more standardized service and +// adhere to a single API derived from this function. +func (c *client) doRequest( + ctx context.Context, + req *Request, + singlePeer []peer.ID, + // In the `GetChainMessages` case, we won't request the headers but we still + // need them to check the integrity of the `CompactedMessages` in the response + // so the tipset blocks need to be provided by the caller. + tipsets []*types.TipSet, +) (*validatedResponse, error) { + // Validate request. + if req.Length == 0 { + return nil, xerrors.Errorf("invalid request of length 0") + } + + if req.Length > MaxRequestLength { + return nil, xerrors.Errorf("request length (%d) above maximum (%d)", + req.Length, MaxRequestLength) + } + + if req.Options == 0 { + return nil, xerrors.Errorf("request with no options set") + } + + // Generate the list of peers to be queried, either the + // `singlePeer` indicated or all peers available (sorted + // by an internal peer tracker with some randomness injected). + var selectPeers []peer.ID + if singlePeer != nil { + selectPeers = append(selectPeers, singlePeer...) + } else { + selectPeers = c.getShuffledPeers() + } + if len(selectPeers) == 0 { + return nil, xerrors.Errorf("no peers available") + } + + // Try the request for each peer in the list, + // return on the first successful response. + // FIXME: Doing this serially isn't great, but fetching in parallel + // may not be a good idea either. Think about this more. + globalTime := time.Now() + // Global time used to track what is the expected time we will need to get + // a response if a client fails us. + for _, peer := range selectPeers { + select { + case <-ctx.Done(): + return nil, xerrors.Errorf("context cancelled: %w", ctx.Err()) + default: + } + + // Send request, read response. + res, err := c.sendRequestToPeer(ctx, peer, req) + if err != nil { + if !xerrors.Is(err, network.ErrNoConn) { + exchangeClientLogger.Warnf("could not send request to peer %s: %s", + peer.String(), err) + } + continue + } + + // Process and validate response. + validRes, err := c.processResponse(req, res, tipsets) + if err != nil { + exchangeClientLogger.Warnf("processing peer %s response failed: %s", peer.String(), err) + continue + } + + c.peerTracker.logGlobalSuccess(time.Since(globalTime)) + c.host.ConnManager().TagPeer(peer, "bsync", SuccessPeerTagValue) + return validRes, nil + } + + return nil, xerrors.Errorf("doRequest failed for all peers") +} + +// Process and validate response. Check the status, the integrity of the +// information returned, and that it matches the request. Extract the information +// into a `validatedResponse` for the external-facing APIs to select what they +// need. +// +// We are conflating in the single error returned both status and validation +// errors. Peer penalization should happen here then, before returning, so +// we can apply the correct penalties depending on the cause of the error. +// FIXME: Add the `peer` as argument once we implement penalties. +func (c *client) processResponse(req *Request, res *Response, tipsets []*types.TipSet) (*validatedResponse, error) { + err := res.statusToError() + if err != nil { + return nil, xerrors.Errorf("status error: %s", err) + } + + options := parseOptions(req.Options) + if options.noOptionsSet() { + // Safety check: this shouldn't have been sent, and even if it did + // it should have been caught by the peer in its error status. + return nil, xerrors.Errorf("nothing was requested") + } + + // Verify that the chain segment returned is in the valid range. + // Note that the returned length might be less than requested. + resLength := len(res.Chain) + if resLength == 0 { + return nil, xerrors.Errorf("got no chain in successful response") + } + if resLength > int(req.Length) { + return nil, xerrors.Errorf("got longer response (%d) than requested (%d)", + resLength, req.Length) + } + if resLength < int(req.Length) && res.Status != Partial { + return nil, xerrors.Errorf("got less than requested without a proper status: %d", res.Status) + } + + validRes := &validatedResponse{} + if options.IncludeHeaders { + // Check for valid block sets and extract them into `TipSet`s. + validRes.tipsets = make([]*types.TipSet, resLength) + for i := 0; i < resLength; i++ { + if res.Chain[i] == nil { + return nil, xerrors.Errorf("response with nil tipset in pos %d", i) + } + for blockIdx, block := range res.Chain[i].Blocks { + if block == nil { + return nil, xerrors.Errorf("tipset with nil block in pos %d", blockIdx) + // FIXME: Maybe we should move this check to `NewTipSet`. + } + } + + validRes.tipsets[i], err = types.NewTipSet(res.Chain[i].Blocks) + if err != nil { + return nil, xerrors.Errorf("invalid tipset blocks at height (head - %d): %w", i, err) + } + } + + // Check that the returned head matches the one requested + if !types.CidArrsEqual(validRes.tipsets[0].Key().Cids(), req.Head) { + return nil, xerrors.Errorf("returned chain head does not match request") + } + + // Check `TipSet`s are connected (valid chain). + for i := 0; i < len(validRes.tipsets)-1; i++ { + if !validRes.tipsets[i].IsChildOf(validRes.tipsets[i+1]) { + return nil, fmt.Errorf("tipsets are not connected at height (head - %d)/(head - %d)", + i, i+1) + // FIXME: Maybe give more information here, like CIDs. + } + } + } + + if options.IncludeMessages { + validRes.messages = make([]*CompactedMessages, resLength) + for i := 0; i < resLength; i++ { + if res.Chain[i].Messages == nil { + return nil, xerrors.Errorf("no messages included for tipset at height (head - %d)", i) + } + validRes.messages[i] = res.Chain[i].Messages + } + + if options.IncludeHeaders { + // If the headers were also returned check that the compression + // indexes are valid before `toFullTipSets()` is called by the + // consumer. + err := c.validateCompressedIndices(res.Chain) + if err != nil { + return nil, err + } + } else { + // If we didn't request the headers they should have been provided + // by the caller. + if len(tipsets) < len(res.Chain) { + return nil, xerrors.Errorf("not enought tipsets provided for message response validation, needed %d, have %d", len(res.Chain), len(tipsets)) + } + chain := make([]*BSTipSet, 0, resLength) + for i, resChain := range res.Chain { + next := &BSTipSet{ + Blocks: tipsets[i].Blocks(), + Messages: resChain.Messages, + } + chain = append(chain, next) + } + + err := c.validateCompressedIndices(chain) + if err != nil { + return nil, err + } + } + } + + return validRes, nil +} + +func (c *client) validateCompressedIndices(chain []*BSTipSet) error { + resLength := len(chain) + for tipsetIdx := 0; tipsetIdx < resLength; tipsetIdx++ { + msgs := chain[tipsetIdx].Messages + blocksNum := len(chain[tipsetIdx].Blocks) + + if len(msgs.BlsIncludes) != blocksNum { + return xerrors.Errorf("BlsIncludes (%d) does not match number of blocks (%d)", + len(msgs.BlsIncludes), blocksNum) + } + + if len(msgs.SecpkIncludes) != blocksNum { + return xerrors.Errorf("SecpkIncludes (%d) does not match number of blocks (%d)", + len(msgs.SecpkIncludes), blocksNum) + } + + for blockIdx := 0; blockIdx < blocksNum; blockIdx++ { + for _, mi := range msgs.BlsIncludes[blockIdx] { + if int(mi) >= len(msgs.Bls) { + return xerrors.Errorf("index in BlsIncludes (%d) exceeds number of messages (%d)", + mi, len(msgs.Bls)) + } + } + + for _, mi := range msgs.SecpkIncludes[blockIdx] { + if int(mi) >= len(msgs.Secpk) { + return xerrors.Errorf("index in SecpkIncludes (%d) exceeds number of messages (%d)", + mi, len(msgs.Secpk)) + } + } + } + } + + return nil +} + +// GetBlocks implements Client.GetBlocks(). Refer to the godocs there. +func (c *client) GetBlocks(ctx context.Context, tsk types.TipSetKey, count int) ([]*types.TipSet, error) { + ctx, span := trace.StartSpan(ctx, "bsync.GetBlocks") + defer span.End() + if span.IsRecordingEvents() { + span.AddAttributes( + trace.StringAttribute("tipset", fmt.Sprint(tsk.Cids())), + trace.Int64Attribute("count", int64(count)), + ) + } + + req := &Request{ + Head: tsk.Cids(), + Length: uint64(count), + Options: Headers, + } + + validRes, err := c.doRequest(ctx, req, nil, nil) + if err != nil { + return nil, err + } + + return validRes.tipsets, nil +} + +// GetFullTipSet implements Client.GetFullTipSet(). Refer to the godocs there. +func (c *client) GetFullTipSet(ctx context.Context, peers []peer.ID, tsk types.TipSetKey) (*types.FullTipSet, error) { + // TODO: round robin through these peers on error + + req := &Request{ + Head: tsk.Cids(), + Length: 1, + Options: Headers | Messages, + } + + validRes, err := c.doRequest(ctx, req, peers, nil) + if err != nil { + return nil, err + } + + return validRes.toFullTipSets()[0], nil + // If `doRequest` didn't fail we are guaranteed to have at least + // *one* tipset here, so it's safe to index directly. +} + +// GetChainMessages implements Client.GetChainMessages(). Refer to the godocs there. +func (c *client) GetChainMessages(ctx context.Context, tipsets []*types.TipSet) ([]*CompactedMessages, error) { + head := tipsets[0] + length := uint64(len(tipsets)) + + ctx, span := trace.StartSpan(ctx, "GetChainMessages") + if span.IsRecordingEvents() { + span.AddAttributes( + trace.StringAttribute("tipset", fmt.Sprint(head.Key().Cids())), + trace.Int64Attribute("count", int64(length)), + ) + } + defer span.End() + + req := &Request{ + Head: head.Key().Cids(), + Length: length, + Options: Messages, + } + + validRes, err := c.doRequest(ctx, req, nil, tipsets) + if err != nil { + return nil, err + } + + return validRes.messages, nil +} + +// Send a request to a peer. Write request in the stream and read the +// response back. We do not do any processing of the request/response +// here. +func (c *client) sendRequestToPeer(ctx context.Context, peer peer.ID, req *Request) (_ *Response, err error) { + // Trace code. + ctx, span := trace.StartSpan(ctx, "sendRequestToPeer") + defer span.End() + if span.IsRecordingEvents() { + span.AddAttributes( + trace.StringAttribute("peer", peer.Pretty()), + ) + } + defer func() { + if err != nil { + if span.IsRecordingEvents() { + span.SetStatus(trace.Status{ + Code: 5, + Message: err.Error(), + }) + } + } + }() + // -- TRACE -- + + supported, err := c.host.Peerstore().SupportsProtocols(peer, BlockSyncProtocolID, ChainExchangeProtocolID) + if err != nil { + c.RemovePeer(peer) + return nil, xerrors.Errorf("failed to get protocols for peer: %w", err) + } + if len(supported) == 0 || (supported[0] != BlockSyncProtocolID && supported[0] != ChainExchangeProtocolID) { + c.RemovePeer(peer) + c.host.ConnManager().TagPeer(peer, "no match protocol", -2000) + return nil, xerrors.Errorf("peer %s does not support protocols %s", peer, []string{BlockSyncProtocolID, ChainExchangeProtocolID}) + } + + connectionStart := time.Now() + + // Open stream to peer. + stream, err := c.host.NewStream( + network.WithNoDial(ctx, "should already have connection"), + peer, + ChainExchangeProtocolID, BlockSyncProtocolID) + if err != nil { + c.RemovePeer(peer) + return nil, xerrors.Errorf("failed to open stream to peer: %w", err) + } + + defer func() { + // Note: this will become just stream.Close once we've completed the go-libp2p migration to + // go-libp2p-core 0.7.0 + go stream.Close() //nolint:errcheck + }() + + // Write request. + _ = stream.SetWriteDeadline(time.Now().Add(WriteReqDeadline)) + if err := cborutil.WriteCborRPC(stream, req); err != nil { + _ = stream.SetWriteDeadline(time.Time{}) + c.peerTracker.logFailure(peer, time.Since(connectionStart), req.Length) + // FIXME: Should we also remove peer here? + return nil, err + } + _ = stream.SetWriteDeadline(time.Time{}) // clear deadline // FIXME: Needs + // its own API (https://github.com/libp2p/go-libp2p-core/issues/162). + + // Read response. + _ = stream.SetReadDeadline(time.Time{}) + + //TODO Note: this will remove once we've completed the go-libp2p migration to + // go-libp2p-core 0.7.0 + respBytes, err := ioutil.ReadAll(bufio.NewReader(NewInct(stream, ReadResMinSpeed, ReadResDeadline))) + if err != nil { + return nil, err + } + + var res Response + err = cborutil.ReadCborRPC( + bytes.NewReader(respBytes), + //bufio.NewReader(NewInct(stream, ReadResMinSpeed, ReadResDeadline)), + &res) + if err != nil { + c.peerTracker.logFailure(peer, time.Since(connectionStart), req.Length) + return nil, xerrors.Errorf("failed to read chainxchg response: %w", err) + } + + // FIXME: Move all this together at the top using a defer as done elsewhere. + // Maybe we need to declare `res` in the signature. + if span.IsRecordingEvents() { + span.AddAttributes( + trace.Int64Attribute("resp_status", int64(res.Status)), + trace.StringAttribute("msg", res.ErrorMessage), + trace.Int64Attribute("chain_len", int64(len(res.Chain))), + ) + } + + c.peerTracker.logSuccess(peer, time.Since(connectionStart), uint64(len(res.Chain))) + // FIXME: We should really log a success only after we validate the response. + // It might be a bit hard to do. + return &res, nil +} + +// AddPeer implements Client.AddPeer(). Refer to the godocs there. +func (c *client) AddPeer(p peer.ID) { + c.peerTracker.addPeer(p) +} + +// RemovePeer implements Client.RemovePeer(). Refer to the godocs there. +func (c *client) RemovePeer(p peer.ID) { + c.peerTracker.removePeer(p) +} + +// getShuffledPeers returns a preference-sorted set of peers (by latency +// and failure counting), shuffling the first few peers so we don't always +// pick the same peer. +// FIXME: Consider merging with `shufflePrefix()s`. +func (c *client) getShuffledPeers() []peer.ID { + peers := c.peerTracker.prefSortedPeers() + shufflePrefix(peers) + return peers +} + +func shufflePrefix(peers []peer.ID) { + prefix := ShufflePeersPrefix + if len(peers) < prefix { + prefix = len(peers) + } + + buf := make([]peer.ID, prefix) + perm := rand.Perm(prefix) + for i, v := range perm { + buf[i] = peers[v] + } + + copy(peers, buf) +} diff --git a/pkg/chainsync/exchange/doc.go b/pkg/chainsync/exchange/doc.go new file mode 100644 index 0000000000..b20ee0c1fe --- /dev/null +++ b/pkg/chainsync/exchange/doc.go @@ -0,0 +1,19 @@ +// Package exchange contains the ChainExchange server and client components. +// +// ChainExchange is the basic chain synchronization protocol of Filecoin. +// ChainExchange is an RPC-oriented protocol, with a single operation to +// request blocks for now. +// +// A request contains a start anchor block (referred to with a CID), and a +// amount of blocks requested beyond the anchor (including the anchor itself). +// +// A client can also pass options, encoded as a 64-bit bitfield. Lotus supports +// two options at the moment: +// +// - include block contents +// - include block messages +// +// The response will include a status code, an optional message, and the +// response payload in case of success. The payload is a slice of serialized +// tipsets. +package exchange diff --git a/pkg/chainsync/exchange/inct.go b/pkg/chainsync/exchange/inct.go new file mode 100644 index 0000000000..ad3c345f58 --- /dev/null +++ b/pkg/chainsync/exchange/inct.go @@ -0,0 +1,67 @@ +package exchange + +import ( + "io" + "time" +) + +type ReaderDeadline interface { + Read([]byte) (int, error) + SetReadDeadline(time.Time) error +} + +type incrt struct { + rd ReaderDeadline + + waitPerByte time.Duration + wait time.Duration + maxWait time.Duration +} + +// New creates an Incremental Reader Timeout, with minimum sustained speed of +// minSpeed bytes per second and with maximum wait of maxWait +func NewInct(rd ReaderDeadline, minSpeed int64, maxWait time.Duration) io.Reader { + return &incrt{ + rd: rd, + waitPerByte: time.Second / time.Duration(minSpeed), + wait: maxWait, + maxWait: maxWait, + } +} + +type errNoWait struct{} + +func (err errNoWait) Error() string { + return "wait time exceeded" +} +func (err errNoWait) Timeout() bool { + return true +} + +func (crt *incrt) Read(buf []byte) (int, error) { + start := time.Now() + if crt.wait == 0 { + return 0, errNoWait{} + } + + err := crt.rd.SetReadDeadline(start.Add(crt.wait)) + if err != nil { + log.Debugf("unable to set deadline: %+v", err) + } + + n, err := crt.rd.Read(buf) + + _ = crt.rd.SetReadDeadline(time.Time{}) + if err == nil { + dur := time.Since(start) + crt.wait -= dur + crt.wait += time.Duration(n) * crt.waitPerByte + if crt.wait < 0 { + crt.wait = 0 + } + if crt.wait > crt.maxWait { + crt.wait = crt.maxWait + } + } + return n, err +} diff --git a/pkg/chainsync/exchange/interfaces.go b/pkg/chainsync/exchange/interfaces.go new file mode 100644 index 0000000000..67d2919ec1 --- /dev/null +++ b/pkg/chainsync/exchange/interfaces.go @@ -0,0 +1,42 @@ +package exchange + +import ( + "context" + + "github.com/libp2p/go-libp2p-core/peer" + + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// Server is the responder side of the ChainExchange protocol. It accepts +// requests from clients and services them by returning the requested +// chain data. +type Server interface { + Register() +} + +// Client is the requesting side of the ChainExchange protocol. It acts as +// a proxy for other components to request chain data from peers. It is chiefly +// used by the Syncer. +type Client interface { + // GetBlocks fetches block headers from the network, from the provided + // tipset *backwards*, returning as many tipsets as the count parameter, + // or less. + GetBlocks(ctx context.Context, tsk types.TipSetKey, count int) ([]*types.TipSet, error) + + // GetChainMessages fetches messages from the network, starting from the first provided tipset + // and returning messages from as many tipsets as requested or less. + GetChainMessages(ctx context.Context, tipsets []*types.TipSet) ([]*CompactedMessages, error) + + // GetFullTipSet fetches a full tipset from a given peer. If successful, + // the fetched object contains block headers and all messages in full form. + GetFullTipSet(ctx context.Context, peer []peer.ID, tsk types.TipSetKey) (*types.FullTipSet, error) + + // AddPeer adds a peer to the pool of peers that the Client requests + // data from. + AddPeer(peer peer.ID) + + // RemovePeer removes a peer from the pool of peers that the Client + // requests data from. + RemovePeer(peer peer.ID) +} diff --git a/pkg/chainsync/exchange/peer_tracker.go b/pkg/chainsync/exchange/peer_tracker.go new file mode 100644 index 0000000000..2d14e022cc --- /dev/null +++ b/pkg/chainsync/exchange/peer_tracker.go @@ -0,0 +1,179 @@ +package exchange + +// FIXME: This needs to be reviewed. + +import ( + "sort" + "sync" + "time" + + host "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p-core/peer" + + "github.com/filecoin-project/venus/pkg/net" +) + +type peerStats struct { + successes int + failures int + firstSeen time.Time + averageTime time.Duration +} + +type bsPeerTracker struct { + lk sync.Mutex + + peers map[peer.ID]*peerStats + avgGlobalTime time.Duration + + pmgr net.IPeerMgr +} + +func newPeerTracker(h host.Host, pmgr net.IPeerMgr) *bsPeerTracker { + bsPt := &bsPeerTracker{ + peers: make(map[peer.ID]*peerStats), + pmgr: pmgr, + } + + sub, err := h.EventBus().Subscribe(new(net.NewFilPeer)) + if err != nil { + panic(err) + } + + go func() { + for newPeer := range sub.Out() { + bsPt.addPeer(newPeer.(net.NewFilPeer).Id) + } + }() + return bsPt +} + +func (bpt *bsPeerTracker) addPeer(p peer.ID) { + bpt.lk.Lock() + defer bpt.lk.Unlock() + if _, ok := bpt.peers[p]; ok { + return + } + bpt.peers[p] = &peerStats{ + firstSeen: time.Now(), + } + +} + +const ( + // newPeerMul is how much better than average is the new peer assumed to be + // less than one to encourouge trying new peers + newPeerMul = 0.9 +) + +func (bpt *bsPeerTracker) prefSortedPeers() []peer.ID { + // TODO: this could probably be cached, but as long as its not too many peers, fine for now + bpt.lk.Lock() + defer bpt.lk.Unlock() + out := make([]peer.ID, 0, len(bpt.peers)) + for p := range bpt.peers { + out = append(out, p) + } + + // sort by 'expected cost' of requesting data from that peer + // additionally handle edge cases where not enough data is available + sort.Slice(out, func(i, j int) bool { + pi := bpt.peers[out[i]] + pj := bpt.peers[out[j]] + + var costI, costJ float64 + + getPeerInitLat := func(p peer.ID) float64 { + return float64(bpt.avgGlobalTime) * newPeerMul + } + + if pi.successes+pi.failures > 0 { + failRateI := float64(pi.failures) / float64(pi.failures+pi.successes) + costI = float64(pi.averageTime) + failRateI*float64(bpt.avgGlobalTime) + } else { + costI = getPeerInitLat(out[i]) + } + + if pj.successes+pj.failures > 0 { + failRateJ := float64(pj.failures) / float64(pj.failures+pj.successes) + costJ = float64(pj.averageTime) + failRateJ*float64(bpt.avgGlobalTime) + } else { + costJ = getPeerInitLat(out[j]) + } + + return costI < costJ + }) + + return out +} + +const ( + // xInvAlpha = (N+1)/2 + + localInvAlpha = 10 // 86% of the value is the last 19 + globalInvAlpha = 25 // 86% of the value is the last 49 +) + +func (bpt *bsPeerTracker) logGlobalSuccess(dur time.Duration) { + bpt.lk.Lock() + defer bpt.lk.Unlock() + + if bpt.avgGlobalTime == 0 { + bpt.avgGlobalTime = dur + return + } + delta := (dur - bpt.avgGlobalTime) / globalInvAlpha + bpt.avgGlobalTime += delta +} + +func logTime(pi *peerStats, dur time.Duration) { + if pi.averageTime == 0 { + pi.averageTime = dur + return + } + delta := (dur - pi.averageTime) / localInvAlpha + pi.averageTime += delta + +} + +func (bpt *bsPeerTracker) logSuccess(p peer.ID, dur time.Duration, reqSize uint64) { + bpt.lk.Lock() + defer bpt.lk.Unlock() + + var pi *peerStats + var ok bool + if pi, ok = bpt.peers[p]; !ok { + log.Debugf("log success called on peer not in tracker", "peerid", p.String()) + return + } + + pi.successes++ + if reqSize == 0 { + reqSize = 1 + } + logTime(pi, dur/time.Duration(reqSize)) +} + +func (bpt *bsPeerTracker) logFailure(p peer.ID, dur time.Duration, reqSize uint64) { + bpt.lk.Lock() + defer bpt.lk.Unlock() + + var pi *peerStats + var ok bool + if pi, ok = bpt.peers[p]; !ok { + log.Warn("log failure called on peer not in tracker", "peerid", p.String()) + return + } + + pi.failures++ + if reqSize == 0 { + reqSize = 1 + } + logTime(pi, dur/time.Duration(reqSize)) +} + +func (bpt *bsPeerTracker) removePeer(p peer.ID) { + bpt.lk.Lock() + defer bpt.lk.Unlock() + delete(bpt.peers, p) +} diff --git a/pkg/chainsync/exchange/protocol.go b/pkg/chainsync/exchange/protocol.go new file mode 100644 index 0000000000..357b599f66 --- /dev/null +++ b/pkg/chainsync/exchange/protocol.go @@ -0,0 +1,205 @@ +package exchange + +import ( + "time" + + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/policy" + types "github.com/filecoin-project/venus/venus-shared/chain" + logging "github.com/ipfs/go-log" + "golang.org/x/xerrors" +) + +var log = logging.Logger("exchange") + +const ( + // BlockSyncProtocolID is the protocol ID of the former blocksync protocol. + // Deprecated. + BlockSyncProtocolID = "/fil/sync/blk/0.0.1" + + // ChainExchangeProtocolID is the protocol ID of the chain exchange + // protocol. + ChainExchangeProtocolID = "/fil/chain/xchg/0.0.1" +) + +// FIXME: Bumped from original 800 to this to accommodate `syncFork()` +// use of `GetBlocks()`. It seems the expectation of that API is to +// fetch any amount of blocks leaving it to the internal logic here +// to partition and reassemble the requests if they go above the maximum. +// (Also as a consequence of this temporarily removing the `const` +// qualifier to avoid "const initializer [...] is not a constant" error.) +var MaxRequestLength = uint64(policy.ChainFinality) + +const ( + // Extracted constants from the code. + // FIXME: Should be reviewed and confirmed. + SuccessPeerTagValue = 25 + WriteReqDeadline = 5 * time.Second + ReadResDeadline = WriteReqDeadline + ReadResMinSpeed = 50 << 10 + ShufflePeersPrefix = 16 + WriteResDeadline = 60 * time.Second +) + +// FIXME: Rename. Make private. +type Request struct { + // List of ordered CIDs comprising a `TipSetKey` from where to start + // fetching backwards. + // FIXME: Consider using `TipSetKey` now (introduced after the creation + // of this protocol) instead of converting back and forth. + Head []cid.Cid + // Number of block sets to fetch from `Head` (inclusive, should always + // be in the range `[1, MaxRequestLength]`). + Length uint64 + // Request options, see `Options` type for more details. Compressed + // in a single `uint64` to save space. + Options uint64 +} + +// `Request` processed and validated to query the tipsets needed. +type validatedRequest struct { + head types.TipSetKey + length uint64 + options *parsedOptions +} + +// Request options. When fetching the chain segment we can fetch +// either block headers, messages, or both. +const ( + Headers = 1 << iota + Messages +) + +// Decompressed options into separate struct members for easy access +// during internal processing.. +type parsedOptions struct { + IncludeHeaders bool + IncludeMessages bool +} + +func (options *parsedOptions) noOptionsSet() bool { + return !options.IncludeHeaders && !options.IncludeMessages +} + +func parseOptions(optfield uint64) *parsedOptions { + return &parsedOptions{ + IncludeHeaders: optfield&(uint64(Headers)) != 0, + IncludeMessages: optfield&(uint64(Messages)) != 0, + } +} + +// FIXME: Rename. Make private. +type Response struct { + Status status + // String that complements the error status when converting to an + // internal error (see `statusToError()`). + ErrorMessage string + + Chain []*BSTipSet +} + +type status uint64 + +const ( + Ok status = 0 + // We could not fetch all blocks requested (but at least we returned + // the `Head` requested). Not considered an error. + Partial = 101 + + // Errors + NotFound = 201 + GoAway = 202 + InternalError = 203 + BadRequest = 204 +) + +// Convert status to internal error. +func (res *Response) statusToError() error { + switch res.Status { + case Ok, Partial: + return nil + // FIXME: Consider if we want to not process `Partial` responses + // and return an error instead. + case NotFound: + return xerrors.Errorf("not found") + case GoAway: + return xerrors.Errorf("not handling 'go away' chainxchg responses yet") + case InternalError: + return xerrors.Errorf("block sync peer errored: %s", res.ErrorMessage) + case BadRequest: + return xerrors.Errorf("block sync request invalid: %s", res.ErrorMessage) + default: + return xerrors.Errorf("unrecognized response code: %d", res.Status) + } +} + +// FIXME: Rename. +type BSTipSet struct { + // List of blocks belonging to a single tipset to which the + // `CompactedMessages` are linked. + Blocks []*types.BlockHeader + Messages *CompactedMessages +} + +// All messages of a single tipset compacted together instead +// of grouped by block to save space, since there are normally +// many repeated messages per tipset in different blocks. +// +// `BlsIncludes`/`SecpkIncludes` matches `Bls`/`Secpk` messages +// to blocks in the tipsets with the format: +// `BlsIncludes[BI][MI]` +// * BI: block index in the tipset. +// * MI: message index in `Bls` list +// +// FIXME: The logic to decompress this structure should belong +// to itself, not to the consumer. +type CompactedMessages struct { + Bls []*types.Message + BlsIncludes [][]uint64 + + Secpk []*types.SignedMessage + SecpkIncludes [][]uint64 +} + +// Response that has been validated according to the protocol +// and can be safely accessed. +type validatedResponse struct { + tipsets []*types.TipSet + // List of all messages per tipset (grouped by tipset, + // not by block, hence a single index like `tipsets`). + messages []*CompactedMessages +} + +// Decompress messages and form full tipsets with them. The headers +// need to have been requested as well. +func (res *validatedResponse) toFullTipSets() []*types.FullTipSet { + if len(res.tipsets) == 0 || len(res.tipsets) != len(res.messages) { + // This decompression can only be done if both headers and + // messages are returned in the response. (The second check + // is already implied by the guarantees of `validatedResponse`, + // added here just for completeness.) + return nil + } + ftsList := make([]*types.FullTipSet, len(res.tipsets)) + for tipsetIdx := range res.tipsets { + fts := &types.FullTipSet{} // FIXME: We should use the `NewFullTipSet` API. + msgs := res.messages[tipsetIdx] + for blockIdx, b := range res.tipsets[tipsetIdx].Blocks() { + fb := &types.FullBlock{ + Header: b, + } + + for _, mi := range msgs.BlsIncludes[blockIdx] { + fb.BLSMessages = append(fb.BLSMessages, msgs.Bls[mi]) + } + for _, mi := range msgs.SecpkIncludes[blockIdx] { + fb.SECPMessages = append(fb.SECPMessages, msgs.Secpk[mi]) + } + + fts.Blocks = append(fts.Blocks, fb) + } + ftsList[tipsetIdx] = fts + } + return ftsList +} diff --git a/pkg/chainsync/exchange/server.go b/pkg/chainsync/exchange/server.go new file mode 100644 index 0000000000..4ffd3d0305 --- /dev/null +++ b/pkg/chainsync/exchange/server.go @@ -0,0 +1,272 @@ +package exchange + +import ( + "bufio" + "context" + "fmt" + "time" + + cborutil "github.com/filecoin-project/go-cbor-util" + logging "github.com/ipfs/go-log" + + "go.opencensus.io/trace" + "golang.org/x/xerrors" + + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/host" + inet "github.com/libp2p/go-libp2p-core/network" + + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var exchangeServerLog = logging.Logger("exchange.server") + +type chainReader interface { + GetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) +} + +type messageStore interface { + ReadMsgMetaCids(ctx context.Context, mmc cid.Cid) ([]cid.Cid, []cid.Cid, error) + + LoadUnsignedMessagesFromCids(ctx context.Context, cids []cid.Cid) ([]*types.Message, error) + LoadSignedMessagesFromCids(ctx context.Context, cids []cid.Cid) ([]*types.SignedMessage, error) +} + +// server implements exchange.Server. It services requests for the +// libp2p ChainExchange protocol. +type server struct { + cr chainReader + mr messageStore + h host.Host +} + +var _ Server = (*server)(nil) + +// NewServer creates a new libp2p-based exchange.Server. It services requests +// for the libp2p ChainExchange protocol. +func NewServer(cr chainReader, mr messageStore, h host.Host) Server { + return &server{ + cr: cr, + mr: mr, + h: h, + } +} + +func (s *server) Register() { + s.h.SetStreamHandler(BlockSyncProtocolID, s.handleStream) // old + s.h.SetStreamHandler(ChainExchangeProtocolID, s.handleStream) // new +} + +// HandleStream implements Server.HandleStream. Refer to the godocs there. +func (s *server) handleStream(stream inet.Stream) { + ctx, span := trace.StartSpan(context.Background(), "chainxchg.HandleStream") + defer span.End() + + // Note: this will become just stream.Close once we've completed the go-libp2p migration to + // go-libp2p-core 0.7.0 + defer stream.Close() //nolint:errcheck + + var req Request + if err := cborutil.ReadCborRPC(bufio.NewReader(stream), &req); err != nil { + exchangeServerLog.Warnf("failed to read block sync request: %s", err) + return + } + fmt.Println(stream.Conn().RemotePeer()) + exchangeServerLog.Infow("block sync request", "start", req.Head, "len", req.Length) + + resp, err := s.processRequest(ctx, &req) + if err != nil { + exchangeServerLog.Warn("failed to process request: ", err) + return + } + + _ = stream.SetDeadline(time.Now().Add(WriteResDeadline)) + if err := cborutil.WriteCborRPC(stream, resp); err != nil { + _ = stream.SetDeadline(time.Time{}) + exchangeServerLog.Warnw("failed to write back response for handle stream", + "err", err, "peer", stream.Conn().RemotePeer()) + return + } + _ = stream.SetDeadline(time.Time{}) +} + +// Validate and service the request. We return either a protocol +// response or an internal error. +func (s *server) processRequest(ctx context.Context, req *Request) (*Response, error) { + validReq, errResponse := validateRequest(ctx, req) + if errResponse != nil { + // The request did not pass validation, return the response + // indicating it. + return errResponse, nil + } + + return s.serviceRequest(ctx, validReq) +} + +// Validate request. We either return a `validatedRequest`, or an error +// `Response` indicating why we can't process it. We do not return any +// internal errors here, we just signal protocol ones. +func validateRequest(ctx context.Context, req *Request) (*validatedRequest, *Response) { + _, span := trace.StartSpan(ctx, "chainxchg.ValidateRequest") + defer span.End() + + validReq := validatedRequest{} + + validReq.options = parseOptions(req.Options) + if validReq.options.noOptionsSet() { + return nil, &Response{ + Status: BadRequest, + ErrorMessage: "no options set", + } + } + + validReq.length = req.Length + if validReq.length > MaxRequestLength { + return nil, &Response{ + Status: BadRequest, + ErrorMessage: fmt.Sprintf("request length over maximum allowed (%d)", + MaxRequestLength), + } + } + if validReq.length == 0 { + return nil, &Response{ + Status: BadRequest, + ErrorMessage: "invalid request length of zero", + } + } + + if len(req.Head) == 0 { + return nil, &Response{ + Status: BadRequest, + ErrorMessage: "no cids in request", + } + } + validReq.head = types.NewTipSetKey(req.Head...) + + // FIXME: Add as a defer at the start. + span.AddAttributes( + trace.BoolAttribute("blocks", validReq.options.IncludeHeaders), + trace.BoolAttribute("messages", validReq.options.IncludeMessages), + trace.Int64Attribute("reqlen", int64(validReq.length)), + ) + + return &validReq, nil +} + +func (s *server) serviceRequest(ctx context.Context, req *validatedRequest) (*Response, error) { + _, span := trace.StartSpan(ctx, "chainxchg.ServiceRequest") + defer span.End() + + chain, err := collectChainSegment(ctx, s.cr, s.mr, req) + if err != nil { + exchangeServerLog.Warn("block sync request: collectChainSegment failed: ", err) + return &Response{ + Status: InternalError, + ErrorMessage: err.Error(), + }, nil + } + + status := Ok + if len(chain) < int(req.length) { + status = Partial + } + + return &Response{ + Chain: chain, + Status: status, + }, nil +} + +func collectChainSegment(ctx context.Context, cr chainReader, mr messageStore, req *validatedRequest) ([]*BSTipSet, error) { + var bstips []*BSTipSet + + cur := req.head + for { + var bst BSTipSet + ts, err := cr.GetTipSet(ctx, cur) + if err != nil { + return nil, xerrors.Errorf("failed loading tipset %s: %w", cur, err) + } + + if req.options.IncludeHeaders { + bst.Blocks = ts.Blocks() + } + + if req.options.IncludeMessages { + bmsgs, bmincl, smsgs, smincl, err := GatherMessages(ctx, cr, mr, ts) + if err != nil { + return nil, xerrors.Errorf("gather messages failed: %w", err) + } + + // FIXME: Pass the response to `gatherMessages()` and set all this there. + bst.Messages = &CompactedMessages{} + bst.Messages.Bls = bmsgs + bst.Messages.BlsIncludes = bmincl + bst.Messages.Secpk = smsgs + bst.Messages.SecpkIncludes = smincl + } + + bstips = append(bstips, &bst) + + // If we collected the length requested or if we reached the + // start (genesis), then stop. + if uint64(len(bstips)) >= req.length || ts.Height() == 0 { + return bstips, nil + } + + cur = ts.Parents() + } +} + +func GatherMessages(ctx context.Context, cr chainReader, mr messageStore, ts *types.TipSet) ([]*types.Message, [][]uint64, []*types.SignedMessage, [][]uint64, error) { + blsmsgmap := make(map[cid.Cid]uint64) + secpkmsgmap := make(map[cid.Cid]uint64) + var secpkincl, blsincl [][]uint64 + + var blscids, secpkcids []cid.Cid + for _, block := range ts.Blocks() { + bc, sc, err := mr.ReadMsgMetaCids(context.TODO(), block.Messages) + if err != nil { + return nil, nil, nil, nil, err + } + + // FIXME: DRY. Use `chain.Message` interface. + bmi := make([]uint64, 0, len(bc)) + for _, m := range bc { + i, ok := blsmsgmap[m] + if !ok { + i = uint64(len(blscids)) + blscids = append(blscids, m) + blsmsgmap[m] = i + } + + bmi = append(bmi, i) + } + blsincl = append(blsincl, bmi) + + smi := make([]uint64, 0, len(sc)) + for _, m := range sc { + i, ok := secpkmsgmap[m] + if !ok { + i = uint64(len(secpkcids)) + secpkcids = append(secpkcids, m) + secpkmsgmap[m] = i + } + + smi = append(smi, i) + } + secpkincl = append(secpkincl, smi) + } + + blsmsgs, err := mr.LoadUnsignedMessagesFromCids(ctx, blscids) + if err != nil { + return nil, nil, nil, nil, err + } + + secpkmsgs, err := mr.LoadSignedMessagesFromCids(ctx, secpkcids) + if err != nil { + return nil, nil, nil, nil, err + } + + return blsmsgs, blsincl, secpkmsgs, secpkincl, nil +} diff --git a/pkg/chainsync/slashfilter/mysqldb.go b/pkg/chainsync/slashfilter/mysqldb.go new file mode 100644 index 0000000000..d0932e3d31 --- /dev/null +++ b/pkg/chainsync/slashfilter/mysqldb.go @@ -0,0 +1,157 @@ +package slashfilter + +import ( + "context" + "time" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + logging "github.com/ipfs/go-log/v2" + "golang.org/x/xerrors" + "gorm.io/driver/mysql" + "gorm.io/gorm" + + "github.com/filecoin-project/venus/pkg/config" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var log = logging.Logger("mysql") + +type MysqlSlashFilter struct { + _db *gorm.DB +} + +//MinedBlock record mined block +type MinedBlock struct { + ParentEpoch int64 `gorm:"column:parent_epoch;type:bigint(20);NOT NULL"` + ParentKey string `gorm:"column:parent_key;type:varchar(256);NOT NULL"` + + Epoch int64 `gorm:"column:epoch;type:bigint(20);NOT NULL"` + Miner string `gorm:"column:miner;type:varchar(256);NOT NULL"` + Cid string `gorm:"column:cid;type:varchar(256);NOT NULL"` +} + +//NewMysqlSlashFilter create a new slash filter base on mysql database +func NewMysqlSlashFilter(cfg config.MySQLConfig) (ISlashFilter, error) { + db, err := gorm.Open(mysql.Open(cfg.ConnectionString)) + if err != nil { + return nil, xerrors.Errorf("[db connection failed] Connection : %s %w", cfg.ConnectionString, err) + } + + if cfg.Debug { + db = db.Debug() + } + + if err := db.AutoMigrate(MinedBlock{}); err != nil { + return nil, err + } + + sqlDB, err := db.DB() + if err != nil { + return nil, err + } + + // Set the maximum number of idle connections in the connection pool. + sqlDB.SetMaxIdleConns(cfg.MaxIdleConn) + // Set the maximum number of open database connections. + sqlDB.SetMaxOpenConns(cfg.MaxOpenConn) + // The maximum time that the connection can be reused is set. + sqlDB.SetConnMaxLifetime(time.Second * cfg.ConnMaxLifeTime) + + log.Info("init mysql success for LocalSlashFilter!") + return &MysqlSlashFilter{ + _db: db, + }, nil +} + +//checkSameHeightFault check whether the miner mined multi block on the same height +func (f *MysqlSlashFilter) checkSameHeightFault(bh *types.BlockHeader) error { + var bk MinedBlock + err := f._db.Model(&MinedBlock{}).Take(&bk, "miner=? and epoch=?", bh.Miner.String(), bh.Height).Error + if err == gorm.ErrRecordNotFound { + return nil + } + + other, err := cid.Decode(bk.Cid) + if err != nil { + return err + } + + if other == bh.Cid() { + return nil + } + + return xerrors.Errorf("produced block would trigger double-fork mining faults consensus fault; miner: %s; bh: %s, other: %s", bh.Miner, bh.Cid(), other) + +} + +//checkSameParentFault check whether the miner mined block on the same parent +func (f *MysqlSlashFilter) checkSameParentFault(bh *types.BlockHeader) error { + var bk MinedBlock + err := f._db.Model(&MinedBlock{}).Take(&bk, "miner=? and parent_key=?", bh.Miner.String(), types.NewTipSetKey(bh.Parents...).String()).Error + if err == gorm.ErrRecordNotFound { + return nil + } + + other, err := cid.Decode(bk.Cid) + if err != nil { + return err + } + + if other == bh.Cid() { + return nil + } + + return xerrors.Errorf("produced block would trigger time-offset mining faults consensus fault; miner: %s; bh: %s, other: %s", bh.Miner, bh.Cid(), other) + +} + +//MinedBlock check whether the block mined is slash +func (f *MysqlSlashFilter) MinedBlock(ctx context.Context, bh *types.BlockHeader, parentEpoch abi.ChainEpoch) error { + if err := f.checkSameHeightFault(bh); err != nil { + return err + } + + if err := f.checkSameParentFault(bh); err != nil { + return err + } + + { + // parent-grinding fault (didn't mine on top of our own block) + + // First check if we have mined a block on the parent epoch + var bk MinedBlock + err := f._db.Model(&MinedBlock{}).Take(&bk, "miner=? and parent_epoch=?", bh.Miner.String(), parentEpoch).Error + if err == nil { + //if exit + parent, err := cid.Decode(bk.Cid) + if err != nil { + return err + } + + var found bool + for _, c := range bh.Parents { + if c.Equals(parent) { + found = true + } + } + + if !found { + return xerrors.Errorf("produced block would trigger 'parent-grinding fault' consensus fault; miner: %s; bh: %s, expected parent: %s", bh.Miner, bh.Cid(), parent) + } + } else if err != gorm.ErrRecordNotFound { + //other error except not found + return err + } + //if not exit good block + } + + return f._db.Save(&MinedBlock{ + ParentEpoch: int64(parentEpoch), + ParentKey: types.NewTipSetKey(bh.Parents...).String(), + Epoch: int64(bh.Height), + Miner: bh.Miner.String(), + Cid: bh.Cid().String(), + }).Error +} diff --git a/pkg/chainsync/slashfilter/slashfilter.go b/pkg/chainsync/slashfilter/slashfilter.go new file mode 100644 index 0000000000..f25bf2f6b2 --- /dev/null +++ b/pkg/chainsync/slashfilter/slashfilter.go @@ -0,0 +1,125 @@ +package slashfilter + +import ( + "context" + "fmt" + + "golang.org/x/xerrors" + + "github.com/ipfs/go-cid" + ds "github.com/ipfs/go-datastore" + "github.com/ipfs/go-datastore/namespace" + + "github.com/filecoin-project/go-state-types/abi" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +//ISlashFilter used to detect whether the miner mined a invalidated block , support local db and mysql storage +type ISlashFilter interface { + MinedBlock(ctx context.Context, bh *types.BlockHeader, parentEpoch abi.ChainEpoch) error +} + +//LocalSlashFilter use badger db to save mined block for detect slash consensus block +type LocalSlashFilter struct { + byEpoch ds.Datastore // double-fork mining faults, parent-grinding fault + byParents ds.Datastore // time-offset mining faults +} + +//NewLocalSlashFilter create a slash filter base on badger db +func NewLocalSlashFilter(dstore ds.Batching) ISlashFilter { + return &LocalSlashFilter{ + byEpoch: namespace.Wrap(dstore, ds.NewKey("/slashfilter/epoch")), + byParents: namespace.Wrap(dstore, ds.NewKey("/slashfilter/parents")), + } +} + +//MinedBlock check whether the block mined is slash +func (f *LocalSlashFilter) MinedBlock(ctx context.Context, bh *types.BlockHeader, parentEpoch abi.ChainEpoch) error { + epochKey := ds.NewKey(fmt.Sprintf("/%s/%d", bh.Miner, bh.Height)) + { + // double-fork mining (2 blocks at one epoch) + if err := checkFault(ctx, f.byEpoch, epochKey, bh, "double-fork mining faults"); err != nil { + return err + } + } + + parentsKey := ds.NewKey(fmt.Sprintf("/%s/%s", bh.Miner, types.NewTipSetKey(bh.Parents...).String())) + { + // time-offset mining faults (2 blocks with the same parents) + if err := checkFault(ctx, f.byParents, parentsKey, bh, "time-offset mining faults"); err != nil { + return err + } + } + + { + // parent-grinding fault (didn't mine on top of our own block) + + // First check if we have mined a block on the parent epoch + parentEpochKey := ds.NewKey(fmt.Sprintf("/%s/%d", bh.Miner, parentEpoch)) + have, err := f.byEpoch.Has(ctx, parentEpochKey) + if err != nil { + return err + } + + if have { + // If we had, make sure it's in our parent tipset + cidb, err := f.byEpoch.Get(ctx, parentEpochKey) + if err != nil { + return xerrors.Errorf("getting other block cid: %w", err) + } + + _, parent, err := cid.CidFromBytes(cidb) + if err != nil { + return err + } + + var found bool + for _, c := range bh.Parents { + if c.Equals(parent) { + found = true + } + } + + if !found { + return xerrors.Errorf("produced block would trigger 'parent-grinding fault' consensus fault; miner: %s; bh: %s, expected parent: %s", bh.Miner, bh.Cid(), parent) + } + } + } + + if err := f.byParents.Put(ctx, parentsKey, bh.Cid().Bytes()); err != nil { + return xerrors.Errorf("putting byEpoch entry: %w", err) + } + + if err := f.byEpoch.Put(ctx, epochKey, bh.Cid().Bytes()); err != nil { + return xerrors.Errorf("putting byEpoch entry: %w", err) + } + + return nil +} + +func checkFault(ctx context.Context, t ds.Datastore, key ds.Key, bh *types.BlockHeader, faultType string) error { + fault, err := t.Has(ctx, key) + if err != nil { + return err + } + + if fault { + cidb, err := t.Get(ctx, key) + if err != nil { + return xerrors.Errorf("getting other block cid: %w", err) + } + + _, other, err := cid.CidFromBytes(cidb) + if err != nil { + return err + } + + if other == bh.Cid() { + return nil + } + + return xerrors.Errorf("produced block would trigger '%s' consensus fault; miner: %s; bh: %s, other: %s", faultType, bh.Miner, bh.Cid(), other) + } + + return nil +} diff --git a/pkg/chainsync/syncer/syncer.go b/pkg/chainsync/syncer/syncer.go new file mode 100644 index 0000000000..f5c0f49a00 --- /dev/null +++ b/pkg/chainsync/syncer/syncer.go @@ -0,0 +1,830 @@ +package syncer + +import ( + "context" + "fmt" + "sync" + "sync/atomic" + "time" + + "github.com/filecoin-project/venus/pkg/consensus" + "github.com/filecoin-project/venus/pkg/statemanger" + "github.com/hashicorp/go-multierror" + + "golang.org/x/sync/errgroup" + + syncTypes "github.com/filecoin-project/venus/pkg/chainsync/types" + cbor "github.com/ipfs/go-ipld-cbor" + + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/chainsync/exchange" + "github.com/filecoin-project/venus/pkg/clock" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/fork" + "github.com/filecoin-project/venus/pkg/metrics" + "github.com/filecoin-project/venus/pkg/metrics/tracing" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/venus-shared/actors/policy" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + blockstore "github.com/ipfs/go-ipfs-blockstore" + logging "github.com/ipfs/go-log/v2" + "github.com/pkg/errors" + "go.opencensus.io/trace" + "golang.org/x/xerrors" +) + +// Syncer updates its chain.Store according to the methods of its +// consensus.Protocol. It uses a bad tipset cache and a limit on new +// blocks to traverse during chain collection. The Syncer can query the +// network for blocks. The Syncer maintains the following invariant on +// its bsstore: all tipsets that pass the syncer's validity checks are added to the +// chain bsstore along with their state root CID. +// +// Ideally the code that syncs the chain according to consensus rules should +// be independent of any particular implementation of consensus. Currently the +// Syncer is coupled to details of Expected Consensus. This dependence +// exists in the widen function, the fact that widen is called on only one +// tipset in the incoming chain, and assumptions regarding the existence of +// grandparent state in the bsstore. + +var ( + // ErrForkTooLong is return when the syncing chain has fork with local + ErrForkTooLong = fmt.Errorf("fork longer than threshold") + // ErrChainHasBadTipSet is returned when the syncer traverses a chain with a cached bad tipset. + ErrChainHasBadTipSet = errors.New("input chain contains a cached bad tipset") + // ErrNewChainTooLong is returned when processing a fork that split off from the main chain too many blocks ago. + ErrNewChainTooLong = errors.New("input chain forked from best chain past finality limit") + // ErrUnexpectedStoreState indicates that the syncer's chain bsstore is violating expected invariants. + ErrUnexpectedStoreState = errors.New("the chain bsstore is in an unexpected state") + + logSyncer = logging.Logger("chainsync.syncer") + syncOneTimer *metrics.Float64Timer + reorgCnt *metrics.Int64Counter // nolint +) + +func init() { + syncOneTimer = metrics.NewTimerMs("syncer/sync_one", "Duration of single tipset validation in milliseconds") + reorgCnt = metrics.NewInt64Counter("chain/reorg_count", "The number of reorgs that have occurred.") +} + +// StateProcessor does semantic validation on fullblocks. +type StateProcessor interface { + // RunStateTransition returns the state root CID resulting from applying the input ts to the + // prior `stateRoot`. It returns an error if the transition is invalid. + RunStateTransition(ctx context.Context, ts *types.TipSet) (root cid.Cid, receipt cid.Cid, err error) +} + +//BlockValidator used to validate full block +type BlockValidator interface { + ValidateFullBlock(ctx context.Context, blk *types.BlockHeader) error +} + +// ChainReaderWriter reads and writes the chain bsstore. +type ChainReaderWriter interface { + GetHead() *types.TipSet + GetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) + GetTipSetStateRoot(context.Context, *types.TipSet) (cid.Cid, error) + GetTipSetReceiptsRoot(context.Context, *types.TipSet) (cid.Cid, error) + HasTipSetAndState(context.Context, *types.TipSet) bool + GetTipsetMetadata(context.Context, *types.TipSet) (*chain.TipSetMetadata, error) + PutTipSetMetadata(context.Context, *chain.TipSetMetadata) error + SetHead(context.Context, *types.TipSet) error + GetLatestBeaconEntry(context.Context, *types.TipSet) (*types.BeaconEntry, error) + GetGenesisBlock(context.Context) (*types.BlockHeader, error) +} + +//messageStore used to save and load message from db +type messageStore interface { + LoadTipSetMessage(ctx context.Context, ts *types.TipSet) ([]types.BlockMessagesInfo, error) + LoadMetaMessages(context.Context, cid.Cid) ([]*types.SignedMessage, []*types.Message, error) + LoadReceipts(context.Context, cid.Cid) ([]types.MessageReceipt, error) + StoreReceipts(context.Context, []types.MessageReceipt) (cid.Cid, error) +} + +// ChainSelector chooses the heaviest between chains. +type ChainSelector interface { + // IsHeavier returns true if tipset a is heavier than tipset b and false if + // tipset b is heavier than tipset a. + IsHeavier(ctx context.Context, a, b *types.TipSet) (bool, error) + // Weight returns the weight of a tipset after the upgrade to version 1 + Weight(ctx context.Context, ts *types.TipSet) (big.Int, error) +} + +//Syncer used to synchronize the block from the specified target, including acquiring the relevant block data and message data, +//verifying the block machine messages one by one and calculating them, checking the weight of the target after the calculation, +//and check whether it can become the latest tipset +type Syncer struct { + exchangeClient exchange.Client + // BadTipSetCache is used to filter out collections of invalid blocks. + badTipSets *syncTypes.BadTipSetCache + + // Evaluates tipset messages and stores the resulting states. + stmgr *statemanger.Stmgr + // Validates headers and message structure + blockValidator BlockValidator + // Selects the heaviest of two chains + chainSelector ChainSelector + // Provides and stores validated tipsets and their state roots. + chainStore *chain.Store + // Provides message collections given cids + messageProvider messageStore + + clock clock.Clock + headLock sync.Mutex + + bsstore blockstore.Blockstore + checkPoint types.TipSetKey + + fork fork.IFork + + delayRunTx *delayRunTsTransition +} + +// NewSyncer constructs a Syncer ready for use. The chain reader must have a +// head tipset to initialize the staging field. +func NewSyncer(stmgr *statemanger.Stmgr, + hv BlockValidator, + cs ChainSelector, + s *chain.Store, + m messageStore, + bsstore blockstore.Blockstore, + exchangeClient exchange.Client, + c clock.Clock, + fork fork.IFork) (*Syncer, error) { + + if constants.InsecurePoStValidation { + logSyncer.Warn("*********************************************************************************************") + logSyncer.Warn(" [INSECURE-POST-VALIDATION] Insecure test validation is enabled. If you see this outside of a test, it is a severe bug! ") + logSyncer.Warn("*********************************************************************************************") + } + + syncer := &Syncer{ + exchangeClient: exchangeClient, + badTipSets: syncTypes.NewBadTipSetCache(), + blockValidator: hv, + chainSelector: cs, + bsstore: bsstore, + chainStore: s, + messageProvider: m, + clock: c, + fork: fork, + stmgr: stmgr, + } + + defer func() { + syncer.delayRunTx = newDelayRunTsTransition(syncer) + syncer.delayRunTx.run() + }() + + return syncer, nil +} + +// syncOne syncs a single tipset with the chain bsstore. syncOne calculates the +// parent state of the tipset and calls into consensus to run a state transition +// in order to validate the tipset. In the case the input tipset is valid, +// syncOne calls into consensus to check its weight, and then updates the head +// of the bsstore if this tipset is the heaviest. +//todo mark bad-block +func (syncer *Syncer) syncOne(ctx context.Context, parent, next *types.TipSet) error { + logSyncer.Infof("syncOne tipset, height:%d, blocks:%s", next.Height(), next.Key().String()) + priorHeadKey := syncer.chainStore.GetHead() + // if tipset is already priorHeadKey, we've been here before. do nothing. + if priorHeadKey.Equals(next) { + return nil + } + + stopwatch := syncOneTimer.Start(ctx) + defer stopwatch.Stop(ctx) + + var err error + + if !parent.Key().Equals(syncer.checkPoint) { + var wg errgroup.Group + for i := 0; i < next.Len(); i++ { + blk := next.At(i) + wg.Go(func() error { + // Fetch the URL. + return syncer.blockValidator.ValidateFullBlock(ctx, blk) + }) + } + err = wg.Wait() + if err != nil { + var stateRootMismatched bool // nolint + + if merr, isok := err.(*multierror.Error); isok { + for _, e := range merr.Errors { + if stateRootMismatched = xerrors.Is(e, consensus.ErrStateRootMismatch); stateRootMismatched { + break + } + } + } else { + stateRootMismatched = xerrors.Is(err, consensus.ErrStateRootMismatch) // nolint + } + + if stateRootMismatched { // nolint + // todo: should here rollback, and re-compute? + _ = syncer.stmgr.Rollback(ctx, parent, next) + } + + return xerrors.Errorf("validate mining failed %w", err) + } + } + + return nil +} + +// HandleNewTipSet validates and syncs the chain rooted at the provided tipset +// to a chain bsstore. Iff catchup is false then the syncer will set the head. +func (syncer *Syncer) HandleNewTipSet(ctx context.Context, target *syncTypes.Target) (err error) { + ctx, span := trace.StartSpan(ctx, "Syncer.HandleNewTipSet") + span.AddAttributes(trace.StringAttribute("tipset", target.Head.String())) + span.AddAttributes(trace.Int64Attribute("height", int64(target.Head.Height()))) + + now := time.Now() + + defer func() { + if err != nil { + target.Err = err + target.State = syncTypes.StageSyncErrored + } else { + target.State = syncTypes.StageSyncComplete + } + tracing.AddErrorEndSpan(ctx, span, &err) + span.End() + logSyncer.Infof("handleNewTipset(height:%d, count:%d), cost time=%.4f(s)", + target.Head.Height(), target.Head.Len(), time.Since(now).Seconds()) + }() + + logSyncer.Infof("Begin fetch and sync of chain with head %v from %s at height %v", target.Head.Key(), target.Sender.String(), target.Head.Height()) + head := syncer.chainStore.GetHead() + //If the store already has this tipset then the syncer is finished. + if target.Head.At(0).ParentWeight.LessThan(head.At(0).ParentWeight) { + return xerrors.New("do not sync to a target with less weight") + } + + if syncer.chainStore.HasTipSetAndState(ctx, target.Head) || target.Head.Key().Equals(head.Key()) { + return xerrors.New("do not sync to a target has synced before") + } + + tipsets, err := syncer.fetchChainBlocks(ctx, head, target.Head) + if err != nil { + return errors.Wrapf(err, "failure fetching or validating headers") + } + logSyncer.Infof("fetch header success at %v %s ...", tipsets[0].Height(), tipsets[0].Key()) + + if err = syncer.syncSegement(ctx, target, tipsets); err == nil { + syncer.delayRunTx.update(tipsets[len(tipsets)-1]) + } + + return err +} + +func (syncer *Syncer) syncSegement(ctx context.Context, target *syncTypes.Target, tipsets []*types.TipSet) error { + parent, err := syncer.chainStore.GetTipSet(ctx, tipsets[0].Parents()) + if err != nil { + return err + } + + errProcessChan := make(chan error, 1) + errProcessChan <- nil //init + var wg sync.WaitGroup + //todo write a pipline segment processor function + if err = rangeProcess(tipsets, func(segTipset []*types.TipSet) error { + // fetch messages + startTip := segTipset[0].Height() + emdTipset := segTipset[len(segTipset)-1].Height() + logSyncer.Infof("start to fetch message segement %d-%d", startTip, emdTipset) + _, err := syncer.fetchSegMessage(ctx, segTipset) + if err != nil { + return err + } + logSyncer.Infof("finish to fetch message segement %d-%d", startTip, emdTipset) + err = <-errProcessChan + if err != nil { + return xerrors.Errorf("process message failed %v", err) + } + wg.Add(1) + go func() { + defer wg.Done() + logSyncer.Infof("start to process message segement %d-%d", startTip, emdTipset) + defer logSyncer.Infof("finish to process message segement %d-%d", startTip, emdTipset) + var processErr error + parent, processErr = syncer.processTipSetSegment(ctx, target, parent, segTipset) + if processErr != nil { + errProcessChan <- processErr + return + } + if !parent.Key().Equals(syncer.checkPoint) { + logSyncer.Infof("set chain head, height;%d, blocks:%d\n", parent.Height(), parent.Len()) + if err := syncer.SetHead(ctx, parent); err != nil { + errProcessChan <- err + return + } + } + errProcessChan <- nil + }() + return nil + }); err != nil { + return err + } + + wg.Wait() + select { + case err = <-errProcessChan: + return err + default: + return nil + } +} + +//fetchChainBlocks get the block data, from targettip to knowntip. +// if local db has the block used that block +// if local db not exist, get block from network(libp2p), +// if there is a fork, get the common root tipset of knowntip and targettip, and return the block data from root tipset to targettip +// local(ยทยทยท->A->B) + incoming(C->D->E) => ยทยทยท->A->B->C->D->E +func (syncer *Syncer) fetchChainBlocks(ctx context.Context, knownTip *types.TipSet, targetTip *types.TipSet) ([]*types.TipSet, error) { + chainTipsets := []*types.TipSet{targetTip} + var flushDB = func(saveTips []*types.TipSet) error { + bs := blockstoreutil.NewTemporary() + cborStore := cbor.NewCborStore(bs) + for _, tips := range saveTips { + for _, blk := range tips.Blocks() { + _, err := cborStore.Put(ctx, blk) + if err != nil { + return err + } + } + } + return blockstoreutil.CopyBlockstore(ctx, bs, syncer.bsstore) + } + + untilHeight := knownTip.Height() + count := 0 +loop: + for chainTipsets[len(chainTipsets)-1].Height() > untilHeight { + tipSet, err := syncer.chainStore.GetTipSet(ctx, targetTip.Parents()) + if err == nil { + chainTipsets = append(chainTipsets, tipSet) + targetTip = tipSet + count++ + if count%500 == 0 { + logSyncer.Info("load from local db ", "Height: ", tipSet.Height()) + } + continue + } + + windows := targetTip.Height() - untilHeight + if windows > 500 { + windows = 500 + } + + fetchHeaders, err := syncer.exchangeClient.GetBlocks(ctx, targetTip.Parents(), int(windows)) + if err != nil { + return nil, err + } + + if len(fetchHeaders) == 0 { + break loop + } + + logSyncer.Infof("fetch blocks %d height from %d-%d", len(fetchHeaders), fetchHeaders[0].Height(), fetchHeaders[len(fetchHeaders)-1].Height()) + if err = flushDB(fetchHeaders); err != nil { + return nil, err + } + for _, b := range fetchHeaders { + if b.Height() < untilHeight { + break loop + } + chainTipsets = append(chainTipsets, b) + targetTip = b + } + } + + base := chainTipsets[len(chainTipsets)-1] + if base.Equals(knownTip) { + chainTipsets = chainTipsets[:len(chainTipsets)-1] + base = chainTipsets[len(chainTipsets)-1] + } + + if base.IsChildOf(knownTip) { + // common case: receiving blocks that are building on top of our best tipset + chain.Reverse(chainTipsets) + return chainTipsets, nil + } + + knownParent, err := syncer.chainStore.GetTipSet(ctx, knownTip.Parents()) + if err != nil { + return nil, xerrors.Errorf("failed to load next local tipset: %w", err) + } + if base.IsChildOf(knownParent) { + // common case: receiving a block thats potentially part of the same tipset as our best block + chain.Reverse(chainTipsets) + return chainTipsets, nil + } + + logSyncer.Warnf("(fork detected) synced header chain") + fork, err := syncer.syncFork(ctx, base, knownTip) + if err != nil { + if xerrors.Is(err, ErrForkTooLong) { + // TODO: we're marking this block bad in the same way that we mark invalid blocks bad. Maybe distinguish? + logSyncer.Warn("adding forked chain to our bad tipset cache") + /* for _, b := range incoming.Blocks() { + syncer.bad.Add(b.Cid(), NewBadBlockReason(incoming.Cids(), "fork past finality")) + }*/ + } + return nil, xerrors.Errorf("failed to sync fork: %w", err) + } + err = flushDB(fork) + if err != nil { + return nil, err + } + chainTipsets = append(chainTipsets, fork...) + chain.Reverse(chainTipsets) + return chainTipsets, nil +} + +// syncFork tries to obtain the chain fragment that links a fork into a common +// ancestor in our view of the chain. +// +// If the fork is too long (build.ForkLengthThreshold), or would cause us to diverge from the checkpoint (ErrForkCheckpoint), +// we add the entire subchain to the denylist. Else, we find the common ancestor, and add the missing chain +// fragment until the fork point to the returned []TipSet. +// +// D->E-F(targetTip๏ผ‰ +// A => D->E>F +// B-C(knownTip) +// +func (syncer *Syncer) syncFork(ctx context.Context, incoming *types.TipSet, known *types.TipSet) ([]*types.TipSet, error) { + // TODO: Does this mean we always ask for ForkLengthThreshold blocks from the network, even if we just need, like, 2? + // Would it not be better to ask in smaller chunks, given that an ~ForkLengthThreshold is very rare? + tips, err := syncer.exchangeClient.GetBlocks(ctx, incoming.Parents(), int(policy.ChainFinality)) + if err != nil { + return nil, err + } + + gensisiBlock, err := syncer.chainStore.GetGenesisBlock(ctx) + if err != nil { + return nil, err + } + + nts, err := syncer.chainStore.GetTipSet(ctx, known.Parents()) + if err != nil { + return nil, xerrors.Errorf("failed to load next local tipset: %w", err) + } + + for cur := 0; cur < len(tips); { + if nts.Height() == 0 { + if !gensisiBlock.Equals(nts.At(0)) { + return nil, xerrors.Errorf("somehow synced chain that linked back to a different genesis (bad genesis: %s)", nts.Key()) + } + return nil, xerrors.Errorf("synced chain forked at genesis, refusing to sync; incoming: %s", incoming.ToSlice()) + } + + if nts.Equals(tips[cur]) { + return tips[:cur], nil + } + + if nts.Height() < tips[cur].Height() { + cur++ + } else { + nts, err = syncer.chainStore.GetTipSet(ctx, nts.Parents()) + if err != nil { + return nil, xerrors.Errorf("loading next local tipset: %w", err) + } + } + } + + return nil, ErrForkTooLong +} + +//fetchSegMessage get message in tipset +func (syncer *Syncer) fetchSegMessage(ctx context.Context, segTipset []*types.TipSet) ([]*types.FullTipSet, error) { + //get message from local bsstore + if len(segTipset) == 0 { + return []*types.FullTipSet{}, nil + } + + chain.Reverse(segTipset) + defer chain.Reverse(segTipset) + + fullTipSets := make([]*types.FullTipSet, len(segTipset)) + defer types.ReverseFullBlock(fullTipSets) + + var leftChain []*types.TipSet + var leftFullChain []*types.FullTipSet + for index, tip := range segTipset { + fullTipset, err := syncer.getFullBlock(ctx, tip) + if err != nil { + leftChain = segTipset[index:] + leftFullChain = fullTipSets[index:] + break + } + fullTipSets[index] = fullTipset + } + + if len(leftChain) == 0 { + return fullTipSets, nil + } + // fetch message from remote nodes + bs := blockstoreutil.NewTemporary() + cborStore := cbor.NewCborStore(bs) + + messages, err := syncer.exchangeClient.GetChainMessages(ctx, leftChain) + if err != nil { + return nil, err + } + + for index, tip := range leftChain { + fts, err := zipTipSetAndMessages(bs, tip, messages[index].Bls, messages[index].Secpk, messages[index].BlsIncludes, messages[index].SecpkIncludes) + if err != nil { + return nil, xerrors.Errorf("message processing failed: %w", err) + } + leftFullChain[index] = fts + + //save message + for _, m := range messages[index].Bls { + if _, err := cborStore.Put(ctx, m); err != nil { + return nil, xerrors.Errorf("BLS message processing failed: %w", err) + } + } + + for _, m := range messages[index].Secpk { + if _, err := cborStore.Put(ctx, m); err != nil { + return nil, xerrors.Errorf("SECP message processing failed: %w", err) + } + } + } + + err = blockstoreutil.CopyBlockstore(ctx, bs, syncer.bsstore) + if err != nil { + return nil, errors.Wrapf(err, "failure fetching full blocks") + } + return fullTipSets, nil +} + +// getFullBlock get full block from message store +func (syncer *Syncer) getFullBlock(ctx context.Context, tipset *types.TipSet) (*types.FullTipSet, error) { + fullBlocks := make([]*types.FullBlock, tipset.Len()) + for index, blk := range tipset.Blocks() { + secpMsg, blsMsg, err := syncer.messageProvider.LoadMetaMessages(ctx, blk.Messages) + if err != nil { + return nil, err + } + fullBlocks[index] = &types.FullBlock{ + Header: blk, + BLSMessages: blsMsg, + SECPMessages: secpMsg, + } + } + return types.NewFullTipSet(fullBlocks), nil +} + +//processTipSetSegment process a batch of tipset in turn๏ผŒ +func (syncer *Syncer) processTipSetSegment(ctx context.Context, target *syncTypes.Target, parent *types.TipSet, segTipset []*types.TipSet) (*types.TipSet, error) { + for i, ts := range segTipset { + err := syncer.syncOne(ctx, parent, ts) + if err != nil { + // While `syncOne` can indeed fail for reasons other than consensus, + // adding to the badTipSets at this point is the simplest, since we + // have access to the chain. If syncOne fails for non-consensus reasons, + // there is no assumption that the running node's data is valid at all, + // so we don't really lose anything with this simplification. + syncer.badTipSets.AddChain(segTipset[i:]) + return nil, errors.Wrapf(err, "failed to sync tipset %s, number %d of %d in chain", ts.Key().String(), i, len(segTipset)) + } + parent = ts + target.Current = ts + } + return parent, nil +} + +//Head get latest head from chain store +func (syncer *Syncer) Head() *types.TipSet { + return syncer.chainStore.GetHead() +} + +//SetHead try to sethead after complete tipset syncing, +// if the current target weight is heavier than chain store. change a new head +func (syncer *Syncer) SetHead(ctx context.Context, ts *types.TipSet) error { + syncer.headLock.Lock() + defer syncer.headLock.Unlock() + head := syncer.chainStore.GetHead() + heavier, err := syncer.chainSelector.IsHeavier(ctx, ts, head) + if err != nil { + return err + } + + // If it is the heaviest update the chainStore. + if heavier { + exceeds, err := syncer.exceedsForkLength(ctx, head, ts) + if err != nil { + return err + } + if exceeds { + return nil + } + return syncer.chainStore.SetHead(ctx, ts) + } + return nil +} + +// Check if the two tipsets have a fork length above `ForkLengthThreshold`. +// `synced` is the head of the chain we are currently synced to and `external` +// is the incoming tipset potentially belonging to a forked chain. It assumes +// the external chain has already been validated and available in the ChainStore. +// The "fast forward" case is covered in this logic as a valid fork of length 0. +// +// FIXME: We may want to replace some of the logic in `syncFork()` with this. +// `syncFork()` counts the length on both sides of the fork at the moment (we +// need to settle on that) but here we just enforce it on the `synced` side. +func (syncer *Syncer) exceedsForkLength(ctx context.Context, synced, external *types.TipSet) (bool, error) { + if synced == nil || external == nil { + // FIXME: If `cs.heaviest` is nil we should just bypass the entire + // `MaybeTakeHeavierTipSet` logic (instead of each of the called + // functions having to handle the nil case on their own). + return false, nil + } + + var err error + // `forkLength`: number of tipsets we need to walk back from the our `synced` + // chain to the common ancestor with the new `external` head in order to + // adopt the fork. + for forkLength := 0; forkLength < int(constants.ForkLengthThreshold); forkLength++ { + // First walk back as many tipsets in the external chain to match the + // `synced` height to compare them. If we go past the `synced` height + // the subsequent match will fail but it will still be useful to get + // closer to the `synced` head parent's height in the next loop. + for external.Height() > synced.Height() { + if external.Height() == 0 { + // We reached the genesis of the external chain without a match; + // this is considered a fork outside the allowed limit (of "infinite" + // length). + return true, nil + } + + external, err = syncer.chainStore.GetTipSet(ctx, external.Parents()) + if err != nil { + return false, xerrors.Errorf("failed to load parent tipset in external chain: %w", err) + } + } + + // Now check if we arrived at the common ancestor. + if synced.Equals(external) { + return false, nil + } + + // Now check to see if we've walked back to the checkpoint. + if synced.Key().Equals(syncer.checkPoint) { + return true, nil + } + + // If we didn't, go back *one* tipset on the `synced` side (incrementing + // the `forkLength`). + if synced.Height() == 0 { + // Same check as the `external` side, if we reach the start (genesis) + // there is no common ancestor. + return true, nil + } + synced, err = syncer.chainStore.GetTipSet(ctx, synced.Parents()) + if err != nil { + return false, xerrors.Errorf("failed to load parent tipset in synced chain: %w", err) + } + } + + // We traversed the fork length allowed without finding a common ancestor. + return true, nil +} + +// TODO: this function effectively accepts unchecked input from the network, +// either validate it here, or ensure that its validated elsewhere (maybe make +// sure the blocksync code checks it?) +// maybe this code should actually live in blocksync?? +func zipTipSetAndMessages(bs blockstore.Blockstore, ts *types.TipSet, allbmsgs []*types.Message, allsmsgs []*types.SignedMessage, bmi, smi [][]uint64) (*types.FullTipSet, error) { + if len(ts.Blocks()) != len(smi) || len(ts.Blocks()) != len(bmi) { + return nil, fmt.Errorf("msgincl length didnt match tipset size") + } + + fts := &types.FullTipSet{} + for bi, b := range ts.Blocks() { + if msgc := len(bmi[bi]) + len(smi[bi]); msgc > constants.BlockMessageLimit { + return nil, fmt.Errorf("block %q has too many messages (%d)", b.Cid(), msgc) + } + + var smsgs []*types.SignedMessage + var smsgCids []cid.Cid + for _, m := range smi[bi] { + smsgs = append(smsgs, allsmsgs[m]) + mCid := allsmsgs[m].Cid() + smsgCids = append(smsgCids, mCid) + } + + var bmsgs []*types.Message + var bmsgCids []cid.Cid + for _, m := range bmi[bi] { + bmsgs = append(bmsgs, allbmsgs[m]) + mCid := allbmsgs[m].Cid() + bmsgCids = append(bmsgCids, mCid) + } + + mrcid, err := chain.ComputeMsgMeta(bs, bmsgCids, smsgCids) + if err != nil { + return nil, err + } + + if b.Messages != mrcid { + return nil, fmt.Errorf("messages didnt match message root in header for ts %s", ts.Key()) + } + + fb := &types.FullBlock{ + Header: b, + BLSMessages: bmsgs, + SECPMessages: smsgs, + } + + fts.Blocks = append(fts.Blocks, fb) + } + + return fts, nil +} + +const maxProcessLen = 8 + +func rangeProcess(ts []*types.TipSet, cb func(ts []*types.TipSet) error) (err error) { + for { + if len(ts) == 0 { + break + } else if len(ts) < maxProcessLen { + // break out if less than process len + err = cb(ts) + break + } else { + processTS := ts[0:maxProcessLen] + err = cb(processTS) + if err != nil { + break + } + ts = ts[maxProcessLen:] + } + logSyncer.Infof("Sync Process End,Remaining: %v, err: %v ...", len(ts), err) + } + return err +} + +type delayRunTsTransition struct { // nolint + ch chan *types.TipSet + toRunTS *types.TipSet + syncer *Syncer + runningCount int64 +} + +func newDelayRunTsTransition(syncer *Syncer) *delayRunTsTransition { + return &delayRunTsTransition{ + ch: make(chan *types.TipSet, 10), + syncer: syncer, + } +} + +func (d *delayRunTsTransition) run() { + go d.listenUpdate() +} + +func (d *delayRunTsTransition) stop() { // nolint + close(d.ch) +} + +func (d *delayRunTsTransition) update(ts *types.TipSet) { + d.ch <- ts +} + +func (d *delayRunTsTransition) listenUpdate() { + duration := time.Second * 6 + ticker := time.NewTicker(duration) + for { + select { + case t, isok := <-d.ch: + if !isok { + return + } + if d.toRunTS == nil || (d.toRunTS != nil && !d.toRunTS.Parents().Equals(t.Parents())) { + ticker.Reset(duration) + } + d.toRunTS = t + case <-ticker.C: + if d.toRunTS != nil { + if atomic.LoadInt64(&d.runningCount) < maxProcessLen { + atomic.AddInt64(&d.runningCount, 1) + go func(ts *types.TipSet) { + _, _, err := d.syncer.stmgr.RunStateTransition(context.TODO(), ts) + if err != nil { + logSyncer.Errorf("stmgr.runStateTransaction failed:%s", err.Error()) + } + atomic.AddInt64(&d.runningCount, -1) + }(d.toRunTS) + } + d.toRunTS = nil + } + } + } +} diff --git a/pkg/chainsync/syncer/syncer_integration_test.go b/pkg/chainsync/syncer/syncer_integration_test.go new file mode 100644 index 0000000000..85ab655006 --- /dev/null +++ b/pkg/chainsync/syncer/syncer_integration_test.go @@ -0,0 +1,107 @@ +package syncer_test + +import ( + "context" + "testing" + "time" + + "github.com/filecoin-project/venus/pkg/statemanger" + + "github.com/filecoin-project/venus/pkg/chainsync/types" + types2 "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/chainsync/syncer" + "github.com/filecoin-project/venus/pkg/clock" + "github.com/filecoin-project/venus/pkg/fork" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +// Syncer is capable of recovering from a fork reorg after the bsstore is loaded. +// This is a regression test to guard against the syncer assuming that the bsstore having all +// blocks from a tipset means the syncer has computed its state. +// Such a case happens when the bsstore has just loaded, but this tipset is not on its heaviest chain). +// See https://github.com/filecoin-project/venus/issues/1148#issuecomment-432008060 +func TestLoadFork(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + // Set up in the standard way, but retain references to the repo and cbor stores. + builder := chain.NewBuilder(t, address.Undef) + genesis := builder.Genesis() + + // Note: the chain builder is passed as the fetcher, from which blocks may be requested, but + // *not* as the bsstore, to which the syncer must ensure to put blocks. + + sel := &chain.FakeChainSelector{} + + blockValidator := builder.FakeStateEvaluator() + stmgr := statemanger.NewStateManger(builder.Store(), blockValidator, nil, nil, nil, nil) + + s, err := syncer.NewSyncer(stmgr, blockValidator, sel, builder.Store(), + builder.Mstore(), builder.BlockStore(), builder, clock.NewFake(time.Unix(1234567890, 0)), nil) + + require.NoError(t, err) + + base := builder.AppendManyOn(ctx, 3, genesis) + left := builder.AppendManyOn(ctx, 4, base) + right := builder.AppendManyOn(ctx, 3, base) + + leftTarget := &types.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types2.NewChainInfo("", "", left), + } + rightTarget := &types.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types2.NewChainInfo("", "", right), + } + // Sync the two branches, which stores all blocks in the underlying stores. + assert.NoError(t, s.HandleNewTipSet(ctx, leftTarget)) + assert.Error(t, s.HandleNewTipSet(ctx, rightTarget)) + verifyHead(t, builder.Store(), left) + + _, _, err = blockValidator.RunStateTransition(ctx, blockValidator.ChainStore.GetHead()) + require.NoError(t, err) + + // The syncer/bsstore assume that the fetcher populates the underlying block bsstore such that + // tipsets can be reconstructed. The chain builder used for testing doesn't do that, so do + // it manually here. + for _, tip := range []*types2.TipSet{left, right} { + for itr := chain.IterAncestors(ctx, builder, tip); !itr.Complete(); require.NoError(t, itr.Next(ctx)) { + for _, block := range itr.Value().ToSlice() { + _, err := builder.Cstore().Put(ctx, block) + require.NoError(t, err) + } + } + } + + // Load a new chain bsstore on the underlying data. It will only compute state for the + // left (heavy) branch. It has a fetcher that can't provide blocks. + newStore := chain.NewStore(builder.Repo().ChainDatastore(), builder.BlockStore(), genesis.At(0).Cid(), chain.NewMockCirculatingSupplyCalculator()) + newStore.SetCheckPoint(genesis.Key()) + require.NoError(t, newStore.Load(ctx)) + _, err = syncer.NewSyncer(stmgr, + blockValidator, + sel, + newStore, + builder.Mstore(), + builder.BlockStore(), + builder, + clock.NewFake(time.Unix(1234567890, 0)), + fork.NewMockFork()) + require.NoError(t, err) + + assert.True(t, newStore.HasTipSetAndState(ctx, left)) + assert.False(t, newStore.HasTipSetAndState(ctx, right)) +} diff --git a/pkg/chainsync/syncer/syncer_test.go b/pkg/chainsync/syncer/syncer_test.go new file mode 100644 index 0000000000..559c15c8c5 --- /dev/null +++ b/pkg/chainsync/syncer/syncer_test.go @@ -0,0 +1,629 @@ +package syncer_test + +import ( + "context" + "testing" + "time" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + "github.com/filecoin-project/venus/pkg/statemanger" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/chainsync/syncer" + syncTypes "github.com/filecoin-project/venus/pkg/chainsync/types" + "github.com/filecoin-project/venus/pkg/clock" + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" + "github.com/filecoin-project/venus/pkg/fork" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/util/test" + "github.com/filecoin-project/venus/venus-shared/actors/policy" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + "github.com/pkg/errors" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestOneBlock(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder, syncer := setup(ctx, t) + t1 := builder.AppendOn(ctx, builder.Genesis(), 1) + target := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", t1), + } + + assert.NoError(t, syncer.HandleNewTipSet(ctx, target)) + + assert.NoError(t, builder.FlushHead(ctx)) + + verifyTip(t, builder.Store(), t1, t1.At(0).ParentStateRoot) + verifyHead(t, builder.Store(), t1) +} + +func TestMultiBlockTip(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder, syncer := setup(ctx, t) + genesis := builder.Store().GetHead() + + tip := builder.AppendOn(ctx, genesis, 2) + target := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", tip), + } + + assert.NoError(t, syncer.HandleNewTipSet(ctx, target)) + assert.NoError(t, builder.FlushHead(ctx)) + + verifyTip(t, builder.Store(), tip, builder.StateForKey(ctx, tip.Key())) + verifyHead(t, builder.Store(), tip) +} + +func TestChainIncremental(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder, syncer := setup(ctx, t) + genesis := builder.Store().GetHead() + + t1 := builder.AppendOn(ctx, genesis, 2) + + t2 := builder.AppendOn(ctx, t1, 3) + + t3 := builder.AppendOn(ctx, t2, 1) + + t4 := builder.AppendOn(ctx, t3, 2) + + target1 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", t1), + } + + target2 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", t2), + } + + target3 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", t3), + } + target4 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", t4), + } + assert.NoError(t, syncer.HandleNewTipSet(ctx, target1)) + assert.NoError(t, builder.FlushHead(ctx)) + verifyTip(t, builder.Store(), t1, builder.StateForKey(ctx, t1.Key())) + verifyHead(t, builder.Store(), t1) + + assert.NoError(t, syncer.HandleNewTipSet(ctx, target2)) + assert.NoError(t, builder.FlushHead(ctx)) + verifyTip(t, builder.Store(), t2, builder.StateForKey(ctx, t2.Key())) + verifyHead(t, builder.Store(), t2) + + assert.NoError(t, syncer.HandleNewTipSet(ctx, target3)) + assert.NoError(t, builder.FlushHead(ctx)) + verifyTip(t, builder.Store(), t3, builder.StateForKey(ctx, t3.Key())) + verifyHead(t, builder.Store(), t3) + + assert.NoError(t, syncer.HandleNewTipSet(ctx, target4)) + assert.NoError(t, builder.FlushHead(ctx)) + verifyTip(t, builder.Store(), t4, builder.StateForKey(ctx, t4.Key())) + verifyHead(t, builder.Store(), t4) +} + +func TestChainJump(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder, syncer := setup(ctx, t) + genesis := builder.Store().GetHead() + + t1 := builder.AppendOn(ctx, genesis, 2) + t2 := builder.AppendOn(ctx, t1, 3) + t3 := builder.AppendOn(ctx, t2, 1) + t4 := builder.AppendOn(ctx, t3, 2) + + target1 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", t4), + } + assert.NoError(t, syncer.HandleNewTipSet(ctx, target1)) + assert.NoError(t, builder.FlushHead(ctx)) + verifyTip(t, builder.Store(), t1, builder.StateForKey(ctx, t1.Key())) + verifyTip(t, builder.Store(), t2, builder.StateForKey(ctx, t2.Key())) + verifyTip(t, builder.Store(), t3, builder.StateForKey(ctx, t3.Key())) + verifyTip(t, builder.Store(), t4, builder.StateForKey(ctx, t4.Key())) + verifyHead(t, builder.Store(), t4) +} + +func TestIgnoreLightFork(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder, syncer := setup(ctx, t) + genesis := builder.Store().GetHead() + + forkbase := builder.AppendOn(ctx, genesis, 1) + forkHead := builder.AppendOn(ctx, forkbase, 1) + + t1 := builder.AppendOn(ctx, forkbase, 1) + t2 := builder.AppendOn(ctx, t1, 1) + t3 := builder.AppendOn(ctx, t2, 1) + t4 := builder.AppendOn(ctx, t3, 1) + + // Sync heaviest branch first. + target4 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", t4), + } + assert.NoError(t, syncer.HandleNewTipSet(ctx, target4)) + assert.NoError(t, builder.FlushHead(ctx)) + verifyTip(t, builder.Store(), t4, builder.StateForKey(ctx, t4.Key())) + verifyHead(t, builder.Store(), t4) + + // Lighter fork is processed but not change head. + + forkHeadTarget := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", forkHead), + } + assert.Error(t, syncer.HandleNewTipSet(ctx, forkHeadTarget)) + assert.NoError(t, builder.FlushHead(ctx)) + verifyHead(t, builder.Store(), t4) +} + +func TestAcceptHeavierFork(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder, syncer := setup(ctx, t) + genesis := builder.Store().GetHead() + + forkbase := builder.AppendOn(ctx, genesis, 1) + + main1 := builder.AppendOn(ctx, forkbase, 1) + main2 := builder.AppendOn(ctx, main1, 1) + main3 := builder.AppendOn(ctx, main2, 1) + main4 := builder.AppendOn(ctx, main3, 1) + + // Fork is heavier with more blocks, despite shorter (with default fake weighing function + // from FakeStateEvaluator). + fork1 := builder.AppendOn(ctx, forkbase, 3) + fork2 := builder.AppendOn(ctx, fork1, 1) + fork3 := builder.AppendOn(ctx, fork2, 1) + + main4Target := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", main4), + } + assert.NoError(t, syncer.HandleNewTipSet(ctx, main4Target)) + assert.NoError(t, builder.FlushHead(ctx)) + verifyTip(t, builder.Store(), main4, builder.StateForKey(ctx, main4.Key())) + verifyHead(t, builder.Store(), main4) + + // Heavier fork updates head3 + fork3Target := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", fork3), + } + assert.NoError(t, syncer.HandleNewTipSet(ctx, fork3Target)) + assert.NoError(t, builder.FlushHead(ctx)) + verifyTip(t, builder.Store(), fork1, builder.StateForKey(ctx, fork1.Key())) + verifyTip(t, builder.Store(), fork2, builder.StateForKey(ctx, fork2.Key())) + verifyTip(t, builder.Store(), fork3, builder.StateForKey(ctx, fork3.Key())) + verifyHead(t, builder.Store(), fork3) +} + +func TestRejectFinalityFork(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder, s := setup(ctx, t) + genesis := builder.Store().GetHead() + + head := builder.AppendManyOn(ctx, int(policy.ChainFinality+2), genesis) + target := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", head), + } + assert.NoError(t, s.HandleNewTipSet(ctx, target)) + + // Differentiate fork for a new chain. Fork has FinalityEpochs + 1 + // blocks on top of genesis so forkFinalityBase is more than FinalityEpochs + // behind head + forkFinalityBase := builder.BuildOneOn(ctx, genesis, func(bb *chain.BlockBuilder) { + bb.SetTicket([]byte{0xbe}) + }) + forkFinalityHead := builder.AppendManyOn(ctx, int(policy.ChainFinality), forkFinalityBase) + forkHeadTarget := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", forkFinalityHead), + } + assert.Error(t, s.HandleNewTipSet(ctx, forkHeadTarget)) +} + +func TestNoUncessesaryFetch(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder, s := setup(ctx, t) + genesis := builder.Store().GetHead() + + head := builder.AppendManyOn(ctx, 4, genesis) + target := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", head), + } + assert.NoError(t, s.HandleNewTipSet(ctx, target)) + + // A new syncer unable to fetch blocks from the network can handle a tipset that's already + // in the bsstore and linked to genesis. + eval := builder.FakeStateEvaluator() + stmgr := statemanger.NewStateManger(builder.Store(), eval, nil, nil, nil, nil) + newSyncer, err := syncer.NewSyncer(stmgr, + eval, + &chain.FakeChainSelector{}, + builder.Store(), + builder.Mstore(), + builder.BlockStore(), + builder, + clock.NewFake(time.Unix(1234567890, 0)), + fork.NewMockFork()) + require.NoError(t, err) + + target2 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", head), + } + err = newSyncer.HandleNewTipSet(ctx, target2) + assert.Contains(t, err.Error(), "do not sync to a target has synced before") +} + +// Syncer must track state of subsets of parent tipsets tracked in the bsstore +// when they are the ancestor in a chain. This is in order to maintain the +// invariant that the aggregate state of the parents of the base of a collected chain +// is kept in the bsstore. This invariant allows chains built on subsets of +// tracked tipsets to be handled correctly. +// This test tests that the syncer stores the state of such a base tipset of a collected chain, +// i.e. a subset of an existing tipset in the bsstore. +// +// Ex: {A1, A2} -> {B1, B2, B3} in bsstore to start +// {B1, B2} -> {C1, C2} chain 1 input to syncer +// C1 -> D1 chain 2 input to syncer +// +// The last operation will fail if the state of subset {B1, B2} is not +// kept in the bsstore because syncing C1 requires retrieving parent state. +func TestSubsetParent(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder, s := setup(ctx, t) + genesis := builder.Store().GetHead() + + // Set up chain with {A1, A2} -> {B1, B2, B3} + tipA1A2 := builder.AppendOn(ctx, genesis, 2) + tipB1B2B3 := builder.AppendOn(ctx, tipA1A2, 3) + target1 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", tipB1B2B3), + } + require.NoError(t, s.HandleNewTipSet(ctx, target1)) + + // Sync one tipset with a parent equal to a subset of an existing + // tipset in the bsstore: {B1, B2} -> {C1, C2} + tipB1B2 := testhelpers.RequireNewTipSet(t, tipB1B2B3.At(0), tipB1B2B3.At(1)) + tipC1C2 := builder.AppendOn(ctx, tipB1B2, 2) + + target2 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", tipC1C2), + } + assert.NoError(t, s.HandleNewTipSet(ctx, target2)) + + // Sync another tipset with a parent equal to a subset of the tipset + // just synced: C1 -> D1 + tipC1 := testhelpers.RequireNewTipSet(t, tipC1C2.At(0)) + tipD1OnC1 := builder.AppendOn(ctx, tipC1, 1) + + target3 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", tipD1OnC1), + } + assert.NoError(t, s.HandleNewTipSet(ctx, target3)) + + // A full parent also works fine: {C1, C2} -> D1 + tipD1OnC1C2 := builder.AppendOn(ctx, tipC1C2, 1) + target4 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", tipD1OnC1C2), + } + assert.NoError(t, s.HandleNewTipSet(ctx, target4)) +} + +func TestBlockNotLinkedRejected(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + builder, syncer := setup(ctx, t) + genesis := builder.Store().GetHead() + + // Set up a parallel builder from which the syncer cannot fetch. + // The two builders are expected to produce exactly the same blocks from the same sequence + // of calls. + shadowBuilder := chain.NewBuilder(t, address.Undef) + gen2 := shadowBuilder.Genesis() + require.True(t, genesis.Equals(gen2)) + + // The syncer fails to fetch this block so cannot sync it. + b1 := shadowBuilder.AppendOn(ctx, genesis, 1) + b2 := shadowBuilder.AppendOn(ctx, b1, 1) + target1 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", b2), + } + assert.Error(t, syncer.HandleNewTipSet(ctx, target1)) + + // Make the same block available from the syncer's builder + builder.AppendBlockOn(ctx, genesis) + target2 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", b1), + } + assert.NoError(t, syncer.HandleNewTipSet(ctx, target2)) +} + +type poisonValidator struct { + headerFailureTS uint64 + fullFailureTS uint64 +} + +func (pv *poisonValidator) RunStateTransition(ctx context.Context, ts *types.TipSet) (cid.Cid, cid.Cid, error) { + stamp := ts.At(0).Timestamp + if pv.fullFailureTS == stamp { + return testhelpers.EmptyTxMetaCID, testhelpers.EmptyTxMetaCID, errors.New("run state transition fails on poison timestamp") + } + return testhelpers.EmptyTxMetaCID, testhelpers.EmptyTxMetaCID, nil +} + +func (pv *poisonValidator) ValidateFullBlock(ctx context.Context, blk *types.BlockHeader) error { + if pv.headerFailureTS == blk.Timestamp { + return errors.New("val semantic fails on poison timestamp") + } + return nil +} + +func newPoisonValidator(t *testing.T, headerFailure, fullFailure uint64) *poisonValidator { + return &poisonValidator{headerFailureTS: headerFailure, fullFailureTS: fullFailure} +} + +func (pv *poisonValidator) ValidateHeaderSemantic(_ context.Context, header *types.BlockHeader, _ *types.TipSet) error { + if pv.headerFailureTS == header.Timestamp { + return errors.New("val semantic fails on poison timestamp") + } + return nil +} + +// ValidateHeaderSemantic is a stub that always returns no error +func (pv *poisonValidator) ValidateMessagesSemantic(_ context.Context, _ *types.BlockHeader, _ *types.TipSet) error { + return nil +} + +func TestSemanticallyBadTipSetFails(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + eval := newPoisonValidator(t, 98, 99) + builder := chain.NewBuilder(t, address.Undef) + + stmgr := statemanger.NewStateManger(builder.Store(), eval, nil, nil, nil, nil) + builder, syncer := setupWithValidator(ctx, t, builder, stmgr, eval) + + genesis := builder.Store().GetHead() + + // Build a chain with messages that will fail semantic header validation + kis := testhelpers.MustGenerateKeyInfo(1, 42) + mm := testhelpers.NewMessageMaker(t, kis) + alice := mm.Addresses()[0] + m1 := mm.NewSignedMessage(alice, 0) + m2 := mm.NewSignedMessage(alice, 1) + m3 := mm.NewSignedMessage(alice, 3) + + link1 := builder.BuildOneOn(ctx, genesis, func(bb *chain.BlockBuilder) { + bb.AddMessages( + []*types.SignedMessage{m1, m2, m3}, + []*types.Message{}, + ) + bb.SetTimestamp(98) // poison header val + }) + + // Set up a fresh builder without any of this data + target1 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", link1), + } + err := syncer.HandleNewTipSet(ctx, target1) + require.Error(t, err) + assert.Contains(t, err.Error(), "val semantic fails") +} + +// TODO: fix test +func TestStoresMessageReceipts(t *testing.T) { + t.SkipNow() + tf.UnitTest(t) + ctx := context.Background() + builder, syncer := setup(ctx, t) + genesis := builder.Store().GetHead() + + keys := testhelpers.MustGenerateKeyInfo(1, 42) + mm := testhelpers.NewMessageMaker(t, keys) + alice := mm.Addresses()[0] + t1 := builder.Build(ctx, genesis, 4, func(b *chain.BlockBuilder, i int) { + b.AddMessages([]*types.SignedMessage{}, []*types.Message{mm.NewUnsignedMessage(alice, uint64(i))}) + }) + + target1 := &syncTypes.Target{ + Base: nil, + Current: nil, + Start: time.Time{}, + End: time.Time{}, + Err: nil, + ChainInfo: *types.NewChainInfo("", "", t1), + } + assert.NoError(t, syncer.HandleNewTipSet(ctx, target1)) + + receiptsCid, err := builder.Store().GetTipSetReceiptsRoot(ctx, t1) + + require.NoError(t, err) + + receipts, err := builder.LoadReceipts(ctx, receiptsCid) + require.NoError(t, err) + + // filter same nonce + assert.Len(t, receipts, 2) +} + +// /// Set-up ///// + +// Initializes a chain builder, bsstore and syncer. +// The chain builder has a single genesis block, which is set as the head of the bsstore. +func setup(ctx context.Context, t *testing.T) (*chain.Builder, *syncer.Syncer) { + builder := chain.NewBuilder(t, address.Undef) + eval := builder.FakeStateEvaluator() + + stmgr := statemanger.NewStateManger(builder.Store(), eval, nil, nil, nil, nil) + + return setupWithValidator(ctx, t, builder, stmgr, eval) +} + +func setupWithValidator(ctx context.Context, t *testing.T, builder *chain.Builder, + stmgr *statemanger.Stmgr, headerVal syncer.BlockValidator) (*chain.Builder, *syncer.Syncer) { + // Note: the chain builder is passed as the fetcher, from which blocks may be requested, but + // *not* as the bsstore, to which the syncer must ensure to put blocks. + sel := &chain.FakeChainSelector{} + syncer, err := syncer.NewSyncer(stmgr, + headerVal, + sel, + builder.Store(), + builder.Mstore(), + builder.BlockStore(), + builder, + clock.NewFake(time.Unix(1234567890, 0)), + fork.NewMockFork()) + require.NoError(t, err) + + return builder, syncer +} + +// /// Verification helpers ///// + +// Sub-interface of the bsstore used for verification. +type syncStoreReader interface { + GetHead() *types.TipSet + GetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) + GetTipSetStateRoot(context.Context, *types.TipSet) (cid.Cid, error) +} + +// Verifies that a tipset and associated state root are stored in the chain bsstore. +func verifyTip(t *testing.T, store syncStoreReader, tip *types.TipSet, stateRoot cid.Cid) { + ctx := context.Background() + + foundTip, err := store.GetTipSet(ctx, tip.Key()) + require.NoError(t, err) + test.Equal(t, tip, foundTip) + + foundState, err := store.GetTipSetStateRoot(ctx, tip) + require.NoError(t, err) + test.Equal(t, stateRoot, foundState) +} + +// Verifies that the bsstore's head is as expected. +func verifyHead(t *testing.T, store syncStoreReader, head *types.TipSet) { + headTipSet := store.GetHead() + test.Equal(t, head, headTipSet) +} diff --git a/internal/pkg/chainsync/internal/syncer/bad_tipset_cache.go b/pkg/chainsync/types/bad_tipset_cache.go similarity index 82% rename from internal/pkg/chainsync/internal/syncer/bad_tipset_cache.go rename to pkg/chainsync/types/bad_tipset_cache.go index 46aa87a649..a77771f0d3 100644 --- a/internal/pkg/chainsync/internal/syncer/bad_tipset_cache.go +++ b/pkg/chainsync/types/bad_tipset_cache.go @@ -1,9 +1,9 @@ -package syncer +package types import ( "sync" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" + types "github.com/filecoin-project/venus/venus-shared/chain" ) // BadTipSetCache keeps track of bad tipsets that the syncer should not try to @@ -17,10 +17,16 @@ type BadTipSetCache struct { bad map[string]struct{} } +func NewBadTipSetCache() *BadTipSetCache { + return &BadTipSetCache{ + bad: make(map[string]struct{}), + } +} + // AddChain adds the chain of tipsets to the BadTipSetCache. For now it just // does the simplest thing and adds all blocks of the chain to the cache. // TODO: might want to cache a random subset once cache size is limited. -func (cache *BadTipSetCache) AddChain(chain []block.TipSet) { +func (cache *BadTipSetCache) AddChain(chain []*types.TipSet) { for _, ts := range chain { cache.Add(ts.String()) } diff --git a/pkg/chainsync/types/syncstate.go b/pkg/chainsync/types/syncstate.go new file mode 100644 index 0000000000..f569b4e5a4 --- /dev/null +++ b/pkg/chainsync/types/syncstate.go @@ -0,0 +1,28 @@ +package types + +import "fmt" + +//just compatible code lotus +type SyncStateStage int + +const ( + StageIdle = SyncStateStage(iota) + StateInSyncing + StageSyncComplete + StageSyncErrored +) + +func (v SyncStateStage) String() string { + switch v { + case StageIdle: + return "wait" + case StateInSyncing: + return "syncing" + case StageSyncComplete: + return "complete" + case StageSyncErrored: + return "error" + default: + return fmt.Sprintf("", v) + } +} diff --git a/pkg/chainsync/types/target_tracker.go b/pkg/chainsync/types/target_tracker.go new file mode 100644 index 0000000000..6ad61e467e --- /dev/null +++ b/pkg/chainsync/types/target_tracker.go @@ -0,0 +1,387 @@ +package types + +import ( + "container/list" + "sort" + "strconv" + "sync" + "time" + + fbig "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + logging "github.com/ipfs/go-log/v2" + + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var log = logging.Logger("chainsync.target") + +// Target tracks a logical request of the syncing subsystem to run a +// syncing job against given inputs. +type Target struct { + State SyncStateStage + Base *types.TipSet + Current *types.TipSet + Start time.Time + End time.Time + Err error + types.ChainInfo +} + +//IsNeighbor the target t is neighbor or not +//the same height, the same weight, the same parent is neighbor target. the can merge +func (target *Target) IsNeighbor(t *Target) bool { + if target.Head.Height() != t.Head.Height() { + return false + } + + weightIn := t.Head.ParentWeight() + targetWeight := target.Head.ParentWeight() + if !targetWeight.Equals(weightIn) { + return false + } + + if !target.Head.Parents().Equals(t.Head.Parents()) { + return false + } + return true +} + +//HasChild is another is a child target of current. +//if the t' blocks in a subset of current target ,the t is a child of current target +func (target *Target) HasChild(t *Target) bool { + return target.Head.Key().ContainsAll(t.Head.Key()) +} + +//Key return identity of target . key=weight+height+parent +func (target *Target) Key() string { + weightIn := target.Head.ParentWeight() + return weightIn.String() + + strconv.FormatInt(int64(target.Head.Height()), 10) + + target.Head.Parents().String() + +} + +// TargetTracker orders dispatcher syncRequests by the underlying `TargetBuckets`'s +// prioritization policy. +// +// It also filters the `TargetBuckets` so that it always contains targets with +// unique chain heads. +// +// It wraps the `TargetBuckets` to prevent panics during +// normal operation. +type TargetTracker struct { + bucketSize int + historySize int + q TargetBuckets + history *list.List + targetSet map[string]*Target + lowWeight fbig.Int + lk sync.Mutex + + subs map[string]chan struct{} + subLk sync.Mutex +} + +// NewTargetTracker returns a new target queue. +func NewTargetTracker(size int) *TargetTracker { + return &TargetTracker{ + bucketSize: size, + historySize: 10, + history: list.New(), + q: make(TargetBuckets, 0), + targetSet: make(map[string]*Target), + lk: sync.Mutex{}, + lowWeight: fbig.NewInt(0), + subs: make(map[string]chan struct{}), + } +} + +func (tq *TargetTracker) SubNewTarget(key string, cacheSize int) chan struct{} { + tq.subLk.Lock() + defer tq.subLk.Unlock() + ch, isok := tq.subs[key] + if isok { + return ch + } + ch = make(chan struct{}, cacheSize) + tq.subs[key] = ch + return ch +} + +func (tq *TargetTracker) UnsubNewTarget(key string) { + tq.subLk.Lock() + defer tq.subLk.Unlock() + if ch, isok := tq.subs[key]; isok { + delete(tq.subs, key) + close(ch) + } +} + +// todo: we should pub a 'stable' target +func (tq *TargetTracker) pubNewTarget() { + tq.subLk.Lock() + defer tq.subLk.Unlock() + for _, ch := range tq.subs { + ch <- struct{}{} + } +} + +// Add adds a sync target to the target queue. +// First, check whether the weight is received or not, and the message will record the minimum weight. +// If the weight is less than the current weight, it will exit automatically. +// Then, check whether the current target and the recorded target can be merged. +// If they can be merged, a new target containing more blocks will be generated. +// Try to replace a sub target in idle state. If it does not exist, the message will be displayed, +// Try to replace the target with the lowest weight and idle. +// If the above two situations do not exist, check whether the task exceeds the maximum number of saved tasks. +// If the number exceeds the maximum number, the current target will be abandoned. +// If there are any vacancies, the current target will be appended to the end. +// After each completion of this process, all targets will be reordered. First, they will be sorted according to the weight from small to large, and then they will be sorted according to the number of blocks in the group from small to large, Include as many blocks as possible. +func (tq *TargetTracker) Add(t *Target) bool { + now := time.Now() + + tq.lk.Lock() + defer tq.lk.Unlock() + //do not sync less weight + if t.Head.At(0).ParentWeight.LessThan(tq.lowWeight) { + return false + } + + t, ok := tq.widen(t) + if !ok { + return false + } + + // replace last idle task because of less weight + var replaceIndex int + var replaceTarget *Target + // try to replace a idea child target + for i := len(tq.q) - 1; i > -1; i-- { + if t.HasChild(tq.q[i]) && tq.q[i].State == StageIdle { + replaceTarget = tq.q[i] + replaceIndex = i + log.Infof("%s replace a child target at %d", t.Head.String(), i) + break + } + } + + if replaceTarget == nil { + //replace a least weight idle + for i := len(tq.q) - 1; i > -1; i-- { + if tq.q[i].State == StageIdle { + replaceTarget = tq.q[i] + replaceIndex = i + log.Infof("%s replace a idle target at %d", t.Head.String(), i) + break + } + } + } + + if replaceTarget == nil { + if len(tq.q) < tq.bucketSize { + //append to last slot + tq.q = append(tq.q, t) + } else { + //return if target queue is full + return false + } + } else { + delete(tq.targetSet, replaceTarget.ChainInfo.Head.String()) + tq.q[replaceIndex] = t + } + + tq.targetSet[t.ChainInfo.Head.String()] = t + sortTarget(tq.q) + //update lowweight + tq.lowWeight = tq.q[len(tq.q)-1].Head.At(0).ParentWeight + + tq.pubNewTarget() + + defer func(t *Target) { + log.Infof("add new block(height:%d, count:%d) cost time=%.4f\n", + t.Head.Height(), t.Head.Len(), time.Since(now).Seconds()) + }(t) + return true +} + +//sort by weight and than sort by block number in target buckets +func sortTarget(target TargetBuckets) { + //use weight as group key + groups := make(map[string][]*Target) + var keys []fbig.Int + for _, t := range target { + weight := t.Head.ParentWeight() + if _, ok := groups[weight.String()]; ok { + groups[weight.String()] = append(groups[weight.String()], t) + } else { + groups[weight.String()] = []*Target{t} + keys = append(keys, weight) + } + } + + //sort group by weight + sort.Slice(keys, func(i, j int) bool { + return keys[i].GreaterThan(keys[j]) + }) + + //sort target in group by block number + for _, key := range keys { + inGroup := groups[key.String()] + sort.Slice(inGroup, func(i, j int) bool { + return inGroup[i].Head.Len() > inGroup[j].Head.Len() + }) + } + + //update target buckets + count := 0 + for _, key := range keys { + for _, t := range groups[key.String()] { + target[count] = t + count++ + } + } +} + +// expand the tipset, traversing the local existing target, +// If there is a incoming tipset non-existent block in the neighbor node, then merge the block. +func (tq *TargetTracker) widen(t *Target) (*Target, bool) { + if len(tq.targetSet) == 0 { + return t, true + } + + var err error + // If already in queue drop quickly + for _, val := range tq.targetSet { + if val.Head.Key().ContainsAll(t.Head.Key()) { + return nil, false + } + } + + //collect neighbor block in queue include history to get block with same weight and height + sameWeightBlks := make(map[cid.Cid]*types.BlockHeader) + for _, val := range tq.targetSet { + if val.IsNeighbor(t) { + for _, blk := range val.Head.Blocks() { + bid := blk.Cid() + if !t.Head.Key().Has(bid) { + if _, ok := sameWeightBlks[bid]; !ok { + sameWeightBlks[bid] = blk + } + } + } + } + } + + if len(sameWeightBlks) == 0 { + return t, true + } + + //apply block that t don't have + blks := t.Head.Blocks() + for _, blk := range sameWeightBlks { + blks = append(blks, blk) + } + + newHead, err := types.NewTipSet(blks) + if err != nil { + return nil, false + } + t.Head = newHead + return t, true +} + +// Pop removes and returns the highest priority syncing target. If there is +// nothing in the queue the second argument returns false +func (tq *TargetTracker) Select() (*Target, bool) { + tq.lk.Lock() + defer tq.lk.Unlock() + if tq.q.Len() == 0 { + return nil, false + } + var toSyncTarget *Target + for _, target := range tq.q { + if target.State == StageIdle { + toSyncTarget = target + break + } + } + + if toSyncTarget == nil { + return nil, false + } + return toSyncTarget, true +} + +//Remove remote a target after sync completed +//First remove target from live queue, add the target to history. +func (tq *TargetTracker) Remove(t *Target) { + tq.lk.Lock() + defer tq.lk.Unlock() + for index, target := range tq.q { + if t == target { + tq.q = append(tq.q[:index], tq.q[index+1:]...) + break + } + } + t.End = time.Now() + if tq.history.Len() > tq.historySize { + tq.history.Remove(tq.history.Front()) //remove olddest + popKey := tq.history.Front().Value.(*Target).ChainInfo.Head.String() + delete(tq.targetSet, popKey) + } + tq.history.PushBack(t) +} + +//History return sync history +func (tq *TargetTracker) History() []*Target { + tq.lk.Lock() + defer tq.lk.Unlock() + var targets []*Target + for target := tq.history.Front(); target != nil; target = target.Next() { + targets = append(targets, target.Value.(*Target)) + } + return targets +} + +// Len returns the number of targets in the queue. +func (tq *TargetTracker) Len() int { + tq.lk.Lock() + defer tq.lk.Unlock() + return tq.q.Len() +} + +// Buckets returns the number of targets in the queue. +func (tq *TargetTracker) Buckets() TargetBuckets { + return tq.q +} + +// TargetBuckets orders targets by a policy. +// +// The current simple policy is to order syncing requests by claimed chain +// height. +// +// `TargetBuckets` can panic so it shouldn't be used unwrapped +type TargetBuckets []*Target + +// Len heavily inspired by https://golang.org/pkg/container/heap/ +func (rq TargetBuckets) Len() int { return len(rq) } + +func (rq TargetBuckets) Less(i, j int) bool { + // We want Pop to give us the weight priority so we use greater than + weightI := rq[i].Head.ParentWeight() + weightJ := rq[j].Head.ParentWeight() + return weightI.GreaterThan(weightJ) +} + +func (rq TargetBuckets) Swap(i, j int) { + rq[i], rq[j] = rq[j], rq[i] +} + +func (rq *TargetBuckets) Pop() interface{} { + old := *rq + n := len(old) + item := old[n-1] + *rq = old[0 : n-1] + return item +} diff --git a/internal/pkg/clock/chainclock.go b/pkg/clock/chainclock.go similarity index 78% rename from internal/pkg/clock/chainclock.go rename to pkg/clock/chainclock.go index 55c6ceaf46..8f3d7cc88e 100644 --- a/internal/pkg/clock/chainclock.go +++ b/pkg/clock/chainclock.go @@ -4,9 +4,9 @@ import ( "context" "time" - "github.com/filecoin-project/specs-actors/actors/builtin" + "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/specs-actors/actors/abi" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" ) // DefaultEpochDuration is the default duration of epochs @@ -22,7 +22,6 @@ type ChainEpochClock interface { EpochRangeAtTimestamp(t uint64) (abi.ChainEpoch, abi.ChainEpoch) StartTimeOfEpoch(e abi.ChainEpoch) time.Time WaitForEpoch(ctx context.Context, e abi.ChainEpoch) - WaitForEpochPropDelay(ctx context.Context, e abi.ChainEpoch) WaitNextEpoch(ctx context.Context) abi.ChainEpoch Clock } @@ -33,27 +32,22 @@ type chainClock struct { genesisTime time.Time // The fixed time length of the epoch window epochDuration time.Duration - // propDelay is the time between the start of the epoch and the start - // of mining for the subsequent epoch. This delay provides time for - // blocks from the previous epoch to arrive. - propDelay time.Duration Clock } // NewChainClock returns a ChainEpochClock wrapping a default clock.Clock -func NewChainClock(genesisTime uint64, blockTime time.Duration, propDelay time.Duration) ChainEpochClock { - return NewChainClockFromClock(genesisTime, blockTime, propDelay, NewSystemClock()) +func NewChainClock(genesisTime uint64, blockTime time.Duration) ChainEpochClock { + return NewChainClockFromClock(genesisTime, blockTime, NewSystemClock()) } // NewChainClockFromClock returns a ChainEpochClock wrapping the provided // clock.Clock -func NewChainClockFromClock(genesisSeconds uint64, blockTime time.Duration, propDelay time.Duration, c Clock) ChainEpochClock { +func NewChainClockFromClock(genesisSeconds uint64, blockTime time.Duration, c Clock) ChainEpochClock { gt := time.Unix(int64(genesisSeconds), 0) return &chainClock{ genesisTime: gt, epochDuration: blockTime, - propDelay: propDelay, Clock: c, } } @@ -102,11 +96,6 @@ func (cc *chainClock) WaitForEpoch(ctx context.Context, e abi.ChainEpoch) { cc.waitForEpochOffset(ctx, e, 0) } -// WaitForEpochPropDelay returns propDelay time after the start of the epoch, or when ctx is done. -func (cc *chainClock) WaitForEpochPropDelay(ctx context.Context, e abi.ChainEpoch) { - cc.waitForEpochOffset(ctx, e, cc.propDelay) -} - // waitNextEpochOffset returns when time is offset past the start of the epoch, or ctx is done. func (cc *chainClock) waitForEpochOffset(ctx context.Context, e abi.ChainEpoch, offset time.Duration) { targetTime := cc.StartTimeOfEpoch(e).Add(offset) diff --git a/pkg/clock/chainclock_test.go b/pkg/clock/chainclock_test.go new file mode 100644 index 0000000000..51b4e26070 --- /dev/null +++ b/pkg/clock/chainclock_test.go @@ -0,0 +1,34 @@ +package clock_test + +import ( + "testing" + "time" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/stretchr/testify/assert" + + "github.com/filecoin-project/venus/pkg/clock" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestChainEpochClock(t *testing.T) { + tf.UnitTest(t) + + now := int64(123456789) + bt := clock.DefaultEpochDuration + cec := clock.NewChainClock(uint64(now), bt) + + epoch0Start := time.Unix(now, 0) + epoch1Start := epoch0Start.Add(bt) + + assert.Equal(t, abi.ChainEpoch(0), cec.EpochAtTime(epoch0Start)) + assert.Equal(t, abi.ChainEpoch(1), cec.EpochAtTime(epoch1Start)) + + epoch2Start := epoch1Start.Add(bt) + epoch2Middle := epoch2Start.Add(bt / time.Duration(5)) + assert.Equal(t, abi.ChainEpoch(2), cec.EpochAtTime(epoch2Start)) + assert.Equal(t, abi.ChainEpoch(2), cec.EpochAtTime(epoch2Middle)) + + epoch200Start := epoch0Start.Add(time.Duration(200) * bt) + assert.Equal(t, abi.ChainEpoch(200), cec.EpochAtTime(epoch200Start)) +} diff --git a/internal/pkg/clock/clock.go b/pkg/clock/clock.go similarity index 100% rename from internal/pkg/clock/clock.go rename to pkg/clock/clock.go diff --git a/pkg/clock/testing.go b/pkg/clock/testing.go new file mode 100644 index 0000000000..b99bf24f67 --- /dev/null +++ b/pkg/clock/testing.go @@ -0,0 +1,294 @@ +package clock + +import ( + "sync" + "time" +) + +// Creates a new fake clock and chain clock wrapping it. +func NewFakeChain(genesis uint64, epochDuration time.Duration, now int64) (Fake, ChainEpochClock) { + fake := NewFake(time.Unix(now, 0)) + return fake, NewChainClockFromClock(genesis, epochDuration, fake) +} + +// Fake provides an interface for a clock which can be manually advanced. +// Adapted from: https://github.com/jonboulle/clockwork +type Fake interface { + Clock + // Advance advances the Fake to a new point in time, ensuring any existing + // sleepers are notified appropriately before returning + Advance(d time.Duration) + // BlockUntil will block until the Fake has the given number of + // sleepers (callers of Sleep or After) + BlockUntil(n int) +} + +// Returns a Fake initialised at the given time.Time. +func NewFake(n time.Time) Fake { + return &fakeClock{ + time: n, + } +} + +type fakeClock struct { + timers []*fakeTimer + blockers []*blocker + time time.Time + + l sync.RWMutex +} + +// fakeTimer represents a waiting fakeTimer from NewTimer, Sleep, After, etc. +type fakeTimer struct { + callback func(interface{}, time.Time) + arg interface{} + + c chan time.Time + lk sync.RWMutex + done bool + until time.Time + + clock *fakeClock // needed for Reset() +} + +// blocker represents a caller of BlockUntil +type blocker struct { + count int + ch chan struct{} +} + +func (s *fakeTimer) awaken(now time.Time) { + s.lk.Lock() + if s.done { + s.lk.Unlock() + return + } + s.done = true + s.lk.Unlock() + s.callback(s.arg, now) +} + +func (s *fakeTimer) Chan() <-chan time.Time { return s.c } + +func (s *fakeTimer) Reset(d time.Duration) bool { + wasActive := s.Stop() + until := s.clock.Now().Add(d) + s.lk.Lock() + s.until = until + s.done = false + s.lk.Unlock() + s.clock.addTimer(s) + return wasActive +} + +func (s *fakeTimer) Stop() bool { + now := s.clock.Now() + s.lk.Lock() + if s.done { + s.lk.Unlock() + return false + } + s.done = true + // Expire the timer and notify blockers + s.until = now + s.lk.Unlock() + s.clock.Advance(0) + return true +} + +func (s *fakeTimer) whenToTrigger() time.Time { + s.lk.RLock() + defer s.lk.RUnlock() + return s.until +} + +func (fc *fakeClock) addTimer(s *fakeTimer) { + fc.l.Lock() + defer fc.l.Unlock() + + now := fc.time + if now.Sub(s.whenToTrigger()) >= 0 { + // special case - trigger immediately + s.awaken(now) + } else { + // otherwise, add to the set of sleepers + fc.timers = append(fc.timers, s) + // and notify any blockers + fc.blockers = notifyBlockers(fc.blockers, len(fc.timers)) + } +} + +// After mimics time.After; it waits for the given duration to elapse on the +// fakeClock, then sends the current time on the returned channel. +func (fc *fakeClock) After(d time.Duration) <-chan time.Time { + return fc.NewTimer(d).Chan() +} + +// notifyBlockers notifies all the blockers waiting until the +// given number of sleepers are waiting on the fakeClock. It +// returns an updated slice of blockers (i.e. those still waiting) +func notifyBlockers(blockers []*blocker, count int) (newBlockers []*blocker) { + for _, b := range blockers { + if b.count == count { + close(b.ch) + } else { + newBlockers = append(newBlockers, b) + } + } + return +} + +// Sleep blocks until the given duration has passed on the fakeClock +func (fc *fakeClock) Sleep(d time.Duration) { + <-fc.After(d) +} + +// Time returns the current time of the fakeClock +func (fc *fakeClock) Now() time.Time { + fc.l.RLock() + t := fc.time + fc.l.RUnlock() + return t +} + +// Since returns the duration that has passed since the given time on the fakeClock +func (fc *fakeClock) Since(t time.Time) time.Duration { + return fc.Now().Sub(t) +} + +func (fc *fakeClock) NewTicker(d time.Duration) Ticker { + ft := &fakeTicker{ + c: make(chan time.Time, 1), + stop: make(chan bool, 1), + clock: fc, + period: d, + } + go ft.tick() + return ft +} + +// NewTimer creates a new Timer that will send the current time on its channel +// after the given duration elapses on the fake clock. +func (fc *fakeClock) NewTimer(d time.Duration) Timer { + done := make(chan time.Time, 1) + sendTime := func(c interface{}, now time.Time) { + select { + case c.(chan time.Time) <- now: + default: + } + } + + s := &fakeTimer{ + clock: fc, + until: fc.Now().Add(d), + callback: sendTime, + arg: done, + c: done, + } + fc.addTimer(s) + return s +} + +// AfterFunc waits for the duration to elapse on the fake clock and then calls f +// in its own goroutine. +// It returns a Timer that can be used to cancel the call using its Stop method. +func (fc *fakeClock) AfterFunc(d time.Duration, f func()) Timer { + goFunc := func(fn interface{}, _ time.Time) { + go fn.(func())() + } + + s := &fakeTimer{ + clock: fc, + until: fc.Now().Add(d), + callback: goFunc, + arg: f, + // zero-valued c, the same as it is in the `time` pkg + } + fc.addTimer(s) + return s +} + +// Advance advances fakeClock to a new point in time, ensuring channels from any +// previous invocations of After are notified appropriately before returning +func (fc *fakeClock) Advance(d time.Duration) { + fc.l.Lock() + defer fc.l.Unlock() + + end := fc.time.Add(d) + var newSleepers []*fakeTimer + for _, s := range fc.timers { + if end.Sub(s.whenToTrigger()) >= 0 { + s.awaken(end) + } else { + newSleepers = append(newSleepers, s) + } + } + fc.timers = newSleepers + fc.blockers = notifyBlockers(fc.blockers, len(fc.timers)) + fc.time = end +} + +// BlockUntil will block until the fakeClock has the given number of sleepers +// (callers of Sleep or After) +func (fc *fakeClock) BlockUntil(n int) { + fc.l.Lock() + // Fast path: current number of sleepers is what we're looking for + if len(fc.timers) == n { + fc.l.Unlock() + return + } + // Otherwise, set up a new blocker + b := &blocker{ + count: n, + ch: make(chan struct{}), + } + fc.blockers = append(fc.blockers, b) + fc.l.Unlock() + <-b.ch +} + +type fakeTicker struct { + c chan time.Time + stop chan bool + clock Fake + period time.Duration +} + +func (ft *fakeTicker) Chan() <-chan time.Time { + return ft.c +} + +func (ft *fakeTicker) Stop() { + ft.stop <- true +} + +// tick sends the tick time to the ticker channel after every period. +// Tick events are discarded if the underlying ticker channel does +// not have enough capacity. +func (ft *fakeTicker) tick() { + tick := ft.clock.Now() + for { + tick = tick.Add(ft.period) + remaining := tick.Sub(ft.clock.Now()) + if remaining <= 0 { + // The tick should have already happened. This can happen when + // Advance() is called on the fake clock with a duration larger + // than this ticker's period. + select { + case ft.c <- tick: + default: + } + continue + } + + select { + case <-ft.stop: + return + case <-ft.clock.After(remaining): + select { + case ft.c <- tick: + default: + } + } + } +} diff --git a/pkg/clock/testing_test.go b/pkg/clock/testing_test.go new file mode 100644 index 0000000000..dedb98b997 --- /dev/null +++ b/pkg/clock/testing_test.go @@ -0,0 +1,321 @@ +package clock_test + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" + + "github.com/filecoin-project/venus/pkg/clock" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +var startTime = time.Unix(123456789, 0) + +func TestFakeAfter(t *testing.T) { + tf.UnitTest(t) + fc := clock.NewFake(startTime) + + zero := fc.After(0) + select { + case <-zero: + default: + t.Errorf("zero did not return!") + } + one := fc.After(1) + two := fc.After(2) + six := fc.After(6) + ten := fc.After(10) + fc.Advance(1) + select { + case <-one: + default: + t.Errorf("one did not return!") + } + select { + case <-two: + t.Errorf("two returned prematurely!") + case <-six: + t.Errorf("six returned prematurely!") + case <-ten: + t.Errorf("ten returned prematurely!") + default: + } + fc.Advance(1) + select { + case <-two: + default: + t.Errorf("two did not return!") + } + select { + case <-six: + t.Errorf("six returned prematurely!") + case <-ten: + t.Errorf("ten returned prematurely!") + default: + } + fc.Advance(1) + select { + case <-six: + t.Errorf("six returned prematurely!") + case <-ten: + t.Errorf("ten returned prematurely!") + default: + } + fc.Advance(3) + select { + case <-six: + default: + t.Errorf("six did not return!") + } + select { + case <-ten: + t.Errorf("ten returned prematurely!") + default: + } + fc.Advance(100) + select { + case <-ten: + default: + t.Errorf("ten did not return!") + } +} + +func TestNewFakeAt(t *testing.T) { + tf.UnitTest(t) + t1 := time.Date(1999, time.February, 3, 4, 5, 6, 7, time.UTC) + fc := clock.NewFake(t1) + now := fc.Now() + assert.Equalf(t, now, t1, "Fake.Now() returned unexpected non-initialised value: want=%#v, got %#v", t1, now) +} + +func TestFakeSince(t *testing.T) { + tf.UnitTest(t) + fc := clock.NewFake(startTime) + now := fc.Now() + elapsedTime := time.Second + fc.Advance(elapsedTime) + assert.Truef(t, fc.Since(now) == elapsedTime, "Fake.Since() returned unexpected duration, got: %d, want: %d", fc.Since(now), elapsedTime) +} + +func TestFakeTimers(t *testing.T) { + tf.UnitTest(t) + fc := clock.NewFake(startTime) + + zero := fc.NewTimer(0) + + assert.False(t, zero.Stop(), "zero timer could be stopped") + select { + case <-zero.Chan(): + default: + t.Errorf("zero timer didn't emit time") + } + + one := fc.NewTimer(1) + + select { + case <-one.Chan(): + t.Errorf("non-zero timer did emit time") + default: + } + + assert.True(t, one.Stop(), "non-zero timer couldn't be stopped") + + fc.Advance(5) + + select { + case <-one.Chan(): + t.Errorf("stopped timer did emit time") + default: + } + + assert.False(t, one.Reset(1), "resetting stopped timer didn't return false") + assert.True(t, one.Reset(1), "resetting active timer didn't return true") + + fc.Advance(1) + + assert.False(t, one.Stop(), "triggered timer could be stopped") + + select { + case <-one.Chan(): + default: + t.Errorf("triggered timer didn't emit time") + } + + fc.Advance(1) + + select { + case <-one.Chan(): + t.Errorf("triggered timer emitted time more than once") + default: + } + + one.Reset(0) + + assert.False(t, one.Stop(), "reset to zero timer could be stopped") + select { + case <-one.Chan(): + default: + t.Errorf("reset to zero timer didn't emit time") + } +} + +type syncFunc func(didAdvance func(), shouldAdvance func(string), shouldBlock func(string)) + +func inSync(t *testing.T, func1 syncFunc, func2 syncFunc) { + stepChan1 := make(chan struct{}, 16) + stepChan2 := make(chan struct{}, 16) + go func() { + func1(func() { stepChan1 <- struct{}{} }, func(point string) { + select { + case <-stepChan2: + case <-time.After(time.Second): + t.Errorf("Did not advance, should have %s", point) + } + }, + func(point string) { + select { + case <-stepChan2: + t.Errorf("Was able to advance, should not have %s", point) + case <-time.After(10 * time.Millisecond): + } + }, + ) + }() + func2(func() { stepChan2 <- struct{}{} }, func(point string) { + select { + case <-stepChan1: + case <-time.After(time.Second): + t.Errorf("Did not advance, should have %s", point) + } + }, + func(point string) { + select { + case <-stepChan1: + t.Errorf("Was able to advance, should not have %s", point) + case <-time.After(10 * time.Millisecond): + } + }) +} + +func TestBlockingOnTimers(t *testing.T) { + tf.UnitTest(t) + fc := clock.NewFake(startTime) + + inSync(t, func(didAdvance func(), shouldAdvance func(string), _ func(string)) { + fc.BlockUntil(0) + didAdvance() + fc.BlockUntil(1) + didAdvance() + shouldAdvance("timers stopped") + fc.BlockUntil(0) + didAdvance() + fc.BlockUntil(1) + didAdvance() + fc.BlockUntil(2) + didAdvance() + fc.BlockUntil(3) + didAdvance() + shouldAdvance("timers stopped") + fc.BlockUntil(2) + didAdvance() + shouldAdvance("time advanced") + fc.BlockUntil(0) + didAdvance() + }, func(didAdvance func(), shouldAdvance func(string), shouldBlock func(string)) { + shouldAdvance("when only blocking for 0 timers") + shouldBlock("when waiting for 1 timer") + fc.NewTimer(0) + shouldBlock("when immediately expired timer added") + one := fc.NewTimer(1) + shouldAdvance("once a timer exists") + one.Stop() + didAdvance() + shouldAdvance("when only blocking for 0 timers") + shouldBlock("when all timers are stopped and waiting for a timer") + one.Reset(1) + shouldAdvance("once timer is restarted") + shouldBlock("when waiting for 2 timers with one active") + _ = fc.NewTimer(2) + shouldAdvance("when second timer added") + shouldBlock("when waiting for 3 timers with 2 active") + _ = fc.NewTimer(3) + shouldAdvance("when third timer added") + one.Stop() + didAdvance() + shouldAdvance("when blocking for 2 timers if a third is stopped") + fc.Advance(3) + didAdvance() + shouldAdvance("waiting for no timers") + }) +} + +func TestAdvancePastAfter(t *testing.T) { + tf.UnitTest(t) + + fc := clock.NewFake(startTime) + + start := fc.Now() + one := fc.After(1) + two := fc.After(2) + six := fc.After(6) + + fc.Advance(1) + assert.False(t, start.Add(1).Sub(<-one) > 0, "timestamp is too early") + + fc.Advance(5) + assert.False(t, start.Add(2).Sub(<-two) > 0, "timestamp is too early") + assert.False(t, start.Add(6).Sub(<-six) > 0, "timestamp is too early") +} + +func TestFakeTickerStop(t *testing.T) { + tf.UnitTest(t) + fc := clock.NewFake(startTime) + + ft := fc.NewTicker(1) + ft.Stop() + fc.Advance(1) + select { + case <-ft.Chan(): + t.Errorf("received unexpected tick!") + default: + } +} + +func TestFakeTickerTick(t *testing.T) { + tf.UnitTest(t) + fc := clock.NewFake(startTime) + now := fc.Now() + + // The tick at now.Add(2) should not get through since we advance time by + // two units below and the channel can hold at most one tick until it's + // consumed. + first := now.Add(1) + second := now.Add(3) + + // We wrap the Advance() calls with blockers to make sure that the ticker + // can go to sleep and produce ticks without time passing in parallel. + ft := fc.NewTicker(1) + fc.BlockUntil(1) + fc.Advance(2) + fc.BlockUntil(1) + + select { + case tick := <-ft.Chan(): + assert.Truef(t, tick == first, "wrong tick time, got: %v, want: %v", tick, first) + default: + t.Errorf("expected tick!") + } + + // Advance by one more unit, we should get another tick now. + fc.Advance(1) + fc.BlockUntil(1) + + select { + case tick := <-ft.Chan(): + assert.Truef(t, tick == second, "wrong tick time, got: %v, want: %v", tick, second) + default: + t.Errorf("expected tick!") + } + ft.Stop() +} diff --git a/internal/pkg/clock/ticker.go b/pkg/clock/ticker.go similarity index 100% rename from internal/pkg/clock/ticker.go rename to pkg/clock/ticker.go diff --git a/internal/pkg/clock/timer.go b/pkg/clock/timer.go similarity index 100% rename from internal/pkg/clock/timer.go rename to pkg/clock/timer.go diff --git a/pkg/config/beacon_config.go b/pkg/config/beacon_config.go new file mode 100644 index 0000000000..7fd6fa0fe7 --- /dev/null +++ b/pkg/config/beacon_config.go @@ -0,0 +1,72 @@ +package config + +type DrandEnum int + +const ( + DrandMainnet DrandEnum = iota + 1 + DrandTestnet + DrandDevnet + DrandLocalnet + DrandIncentinet +) + +type DrandConf struct { + Servers []string + Relays []string + ChainInfoJSON string +} + +//DrandConfigs a set of drand config +var DrandConfigs = map[DrandEnum]DrandConf{ + DrandMainnet: { + Servers: []string{ + "https://api.drand.sh", + "https://api2.drand.sh", + "https://api3.drand.sh", + "https://drand.cloudflare.com", + }, + Relays: []string{ + "/dnsaddr/api.drand.sh/", + "/dnsaddr/api2.drand.sh/", + "/dnsaddr/api3.drand.sh/", + }, + ChainInfoJSON: `{"public_key":"868f005eb8e6e4ca0a47c8a77ceaa5309a47978a7c71bc5cce96366b5d7a569937c529eeda66c7293784a9402801af31","period":30,"genesis_time":1595431050,"hash":"8990e7a9aaed2ffed73dbd7092123d6f289930540d7651336225dc172e51b2ce","groupHash":"176f93498eac9ca337150b46d21dd58673ea4e3581185f869672e59fa4cb390a"}`, + }, + DrandTestnet: { + Servers: []string{ + "https://pl-eu.testnet.drand.sh", + "https://pl-us.testnet.drand.sh", + "https://pl-sin.testnet.drand.sh", + }, + Relays: []string{ + "/dnsaddr/pl-eu.testnet.drand.sh/", + "/dnsaddr/pl-us.testnet.drand.sh/", + "/dnsaddr/pl-sin.testnet.drand.sh/", + }, + ChainInfoJSON: `{"public_key":"922a2e93828ff83345bae533f5172669a26c02dc76d6bf59c80892e12ab1455c229211886f35bb56af6d5bea981024df","period":25,"genesis_time":1590445175,"hash":"84b2234fb34e835dccd048255d7ad3194b81af7d978c3bf157e3469592ae4e02","groupHash":"4dd408e5fdff9323c76a9b6f087ba8fdc5a6da907bd9217d9d10f2287d081957"}`, + }, + DrandDevnet: { + Servers: []string{ + "https://dev1.drand.sh", + "https://dev2.drand.sh", + }, + Relays: []string{ + "/dnsaddr/dev1.drand.sh/", + "/dnsaddr/dev2.drand.sh/", + }, + ChainInfoJSON: `{"public_key":"8cda589f88914aa728fd183f383980b35789ce81b274e5daee1f338b77d02566ef4d3fb0098af1f844f10f9c803c1827","period":25,"genesis_time":1595348225,"hash":"e73b7dc3c4f6a236378220c0dd6aa110eb16eed26c11259606e07ee122838d4f","groupHash":"567d4785122a5a3e75a9bc9911d7ea807dd85ff76b78dc4ff06b075712898607"}`, + }, + DrandIncentinet: { + Servers: []string{ + "https://pl-eu.incentinet.drand.sh", + "https://pl-us.incentinet.drand.sh", + "https://pl-sin.incentinet.drand.sh", + }, + Relays: []string{ + "/dnsaddr/pl-eu.incentinet.drand.sh/", + "/dnsaddr/pl-us.incentinet.drand.sh/", + "/dnsaddr/pl-sin.incentinet.drand.sh/", + }, + ChainInfoJSON: `{"public_key":"8cad0c72c606ab27d36ee06de1d5b2db1faf92e447025ca37575ab3a8aac2eaae83192f846fc9e158bc738423753d000","period":30,"genesis_time":1595873820,"hash":"80c8b872c714f4c00fdd3daa465d5514049f457f01f85a4caf68cdcd394ba039","groupHash":"d9406aaed487f7af71851b4399448e311f2328923d454e971536c05398ce2d9b"}`, + }, +} diff --git a/pkg/config/config.go b/pkg/config/config.go new file mode 100644 index 0000000000..0a51017204 --- /dev/null +++ b/pkg/config/config.go @@ -0,0 +1,503 @@ +package config + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "os" + "reflect" + "regexp" + "strings" + "time" + + "github.com/filecoin-project/go-state-types/network" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/constants" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +const ( + scryptN = 1 << 21 + scryptP = 1 +) + +var DefaultDefaultMaxFee = types.MustParseFIL("10") + +// Config is an in memory representation of the filecoin configuration file +type Config struct { + API *APIConfig `json:"api"` + Bootstrap *BootstrapConfig `json:"bootstrap"` + Datastore *DatastoreConfig `json:"datastore"` + Mpool *MessagePoolConfig `json:"mpool"` + NetworkParams *NetworkParamsConfig `json:"parameters"` + Observability *ObservabilityConfig `json:"observability"` + Swarm *SwarmConfig `json:"swarm"` + Wallet *WalletConfig `json:"walletModule"` + SlashFilterDs *SlashFilterDsConfig `json:"slashFilter"` + RateLimitCfg *RateLimitCfg `json:"rateLimit"` +} + +// APIConfig holds all configuration options related to the api. +// nolint +type APIConfig struct { + VenusAuthURL string `json:"venusAuthURL"` + APIAddress string `json:"apiAddress"` + AccessControlAllowOrigin []string `json:"accessControlAllowOrigin"` + AccessControlAllowCredentials bool `json:"accessControlAllowCredentials"` + AccessControlAllowMethods []string `json:"accessControlAllowMethods"` +} + +type RateLimitCfg struct { + Endpoint string `json:"RedisEndpoint"` + User string `json:"user"` + Pwd string `json:"pwd"` + Enable bool `json:"enable"` +} + +func newDefaultAPIConfig() *APIConfig { + return &APIConfig{ + APIAddress: "/ip4/127.0.0.1/tcp/3453", + AccessControlAllowOrigin: []string{ + "http://localhost:8080", + "https://localhost:8080", + "http://127.0.0.1:8080", + "https://127.0.0.1:8080", + }, + AccessControlAllowMethods: []string{"GET", "POST", "PUT"}, + } +} + +// DatastoreConfig holds all the configuration options for the datastore. +// TODO: use the advanced datastore configuration from ipfs +type DatastoreConfig struct { + Type string `json:"type"` + Path string `json:"path"` +} + +// Validators hold the list of validation functions for each configuration +// property. Validators must take a key and json string respectively as +// arguments, and must return either an error or nil depending on whether or not +// the given key and value are valid. Validators will only be run if a property +// being set matches the name given in this map. +var Validators = map[string]func(string, string) error{ + "heartbeat.nickname": validateLettersOnly, +} + +func newDefaultDatastoreConfig() *DatastoreConfig { + return &DatastoreConfig{ + Type: "badgerds", + Path: "badger", + } +} + +// SwarmConfig holds all configuration options related to the swarm. +type SwarmConfig struct { + Address string `json:"address"` + PublicRelayAddress string `json:"public_relay_address,omitempty"` +} + +func newDefaultSwarmConfig() *SwarmConfig { + return &SwarmConfig{ + Address: "/ip4/0.0.0.0/tcp/0", + } +} + +// BootstrapConfig holds all configuration options related to bootstrap nodes +type BootstrapConfig struct { + Addresses []string `json:"addresses"` + MinPeerThreshold int `json:"minPeerThreshold"` + Period string `json:"period,omitempty"` +} + +// TODO: provide bootstrap node addresses +func newDefaultBootstrapConfig() *BootstrapConfig { + return &BootstrapConfig{ + Addresses: []string{}, + MinPeerThreshold: 3, // TODO: we don't actually have an bootstrap peers yet. + Period: "1m", + } +} + +// WalletConfig holds all configuration options related to the wallet. +type WalletConfig struct { + DefaultAddress address.Address `json:"defaultAddress,omitempty"` + PassphraseConfig PassphraseConfig `json:"passphraseConfig,omitempty"` + RemoteEnable bool `json:"remoteEnable"` + RemoteBackend string `json:"remoteBackend"` +} + +type PassphraseConfig struct { + ScryptN int `json:"scryptN"` + ScryptP int `json:"scryptP"` +} + +func newDefaultWalletConfig() *WalletConfig { + return &WalletConfig{ + DefaultAddress: address.Undef, + PassphraseConfig: DefaultPassphraseConfig(), + } +} + +func DefaultPassphraseConfig() PassphraseConfig { + return PassphraseConfig{ + ScryptN: scryptN, + ScryptP: scryptP, + } +} + +func TestPassphraseConfig() PassphraseConfig { + return PassphraseConfig{ + ScryptN: 1 << 15, + ScryptP: scryptP, + } +} + +// DrandConfig holds all configuration options related to pulling randomness from Drand servers +type DrandConfig struct { + StartTimeUnix int64 `json:"startTimeUnix"` + RoundSeconds int `json:"roundSeconds"` +} + +// HeartbeatConfig holds all configuration options related to node heartbeat. +type HeartbeatConfig struct { + // BeatTarget represents the address the filecoin node will send heartbeats to. + BeatTarget string `json:"beatTarget"` + // BeatPeriod represents how frequently heartbeats are sent. + // Golang duration units are accepted. + BeatPeriod string `json:"beatPeriod"` + // ReconnectPeriod represents how long the node waits before attempting to reconnect. + // Golang duration units are accepted. + ReconnectPeriod string `json:"reconnectPeriod"` + // Nickname represents the nickname of the filecoin node, + Nickname string `json:"nickname"` +} + +// ObservabilityConfig is a container for configuration related to observables. +type ObservabilityConfig struct { + Metrics *MetricsConfig `json:"metrics"` + Tracing *TraceConfig `json:"tracing"` +} + +func newDefaultObservabilityConfig() *ObservabilityConfig { + return &ObservabilityConfig{ + Metrics: newDefaultMetricsConfig(), + Tracing: newDefaultTraceConfig(), + } +} + +// MetricsConfig holds all configuration options related to node metrics. +type MetricsConfig struct { + // Enabled will enable prometheus metrics when true. + PrometheusEnabled bool `json:"prometheusEnabled"` + // ReportInterval represents how frequently filecoin will update its prometheus metrics. + ReportInterval string `json:"reportInterval"` + // PrometheusEndpoint represents the address filecoin will expose prometheus metrics at. + PrometheusEndpoint string `json:"prometheusEndpoint"` +} + +func newDefaultMetricsConfig() *MetricsConfig { + return &MetricsConfig{ + PrometheusEnabled: false, + ReportInterval: "5s", + PrometheusEndpoint: "/ip4/0.0.0.0/tcp/9400", + } +} + +// TraceConfig holds all configuration options related to enabling and exporting +// filecoin node traces. +type TraceConfig struct { + // JaegerTracingEnabled will enable exporting traces to jaeger when true. + JaegerTracingEnabled bool `json:"jaegerTracingEnabled"` + // ProbabilitySampler will sample fraction of traces, 1.0 will sample all traces. + ProbabilitySampler float64 `json:"probabilitySampler"` + // JaegerEndpoint is the URL traces are collected on. + JaegerEndpoint string `json:"jaegerEndpoint"` + ServerName string `json:"servername"` +} + +func newDefaultTraceConfig() *TraceConfig { + return &TraceConfig{ + JaegerEndpoint: "localhost:6831", + JaegerTracingEnabled: false, + ProbabilitySampler: 1.0, + ServerName: "venus-node", + } +} + +// MessagePoolConfig holds all configuration options related to nodes message pool (mpool). +type MessagePoolConfig struct { + // MaxNonceGap is the maximum nonce of a message past the last received on chain + MaxNonceGap uint64 `json:"maxNonceGap"` + // MaxFee + MaxFee types.FIL `json:"maxFee"` +} + +var DefaultMessagePoolParam = &MessagePoolConfig{ + MaxNonceGap: 100, + MaxFee: DefaultDefaultMaxFee, +} + +func newDefaultMessagePoolConfig() *MessagePoolConfig { + return &MessagePoolConfig{ + MaxNonceGap: 100, + MaxFee: DefaultDefaultMaxFee, + } +} + +// NetworkParamsConfig record netork parameters +type NetworkParamsConfig struct { + DevNet bool `json:"devNet"` + NetworkType int `json:"networkType"` + GenesisNetworkVersion network.Version `json:"genesisNetworkVersion"` + ConsensusMinerMinPower uint64 `json:"consensusMinerMinPower"` // uint64 goes up to 18 EiB + MinVerifiedDealSize int64 `json:"minVerifiedDealSize"` + ReplaceProofTypes []abi.RegisteredSealProof `json:"replaceProofTypes"` + BlockDelay uint64 `json:"blockDelay"` + DrandSchedule map[abi.ChainEpoch]DrandEnum `json:"drandSchedule"` + ForkUpgradeParam *ForkUpgradeConfig `json:"forkUpgradeParam"` + AddressNetwork address.Network `json:"addressNetwork"` + PreCommitChallengeDelay abi.ChainEpoch `json:"preCommitChallengeDelay"` +} + +// ForkUpgradeConfig record upgrade parameters +type ForkUpgradeConfig struct { + UpgradeSmokeHeight abi.ChainEpoch `json:"upgradeSmokeHeight"` + UpgradeBreezeHeight abi.ChainEpoch `json:"upgradeBreezeHeight"` + UpgradeIgnitionHeight abi.ChainEpoch `json:"upgradeIgnitionHeight"` + UpgradeLiftoffHeight abi.ChainEpoch `json:"upgradeLiftoffHeight"` + UpgradeAssemblyHeight abi.ChainEpoch `json:"upgradeActorsV2Height"` + UpgradeRefuelHeight abi.ChainEpoch `json:"upgradeRefuelHeight"` + UpgradeTapeHeight abi.ChainEpoch `json:"upgradeTapeHeight"` + UpgradeKumquatHeight abi.ChainEpoch `json:"upgradeKumquatHeight"` + UpgradePriceListOopsHeight abi.ChainEpoch `json:"upgradePriceListOopsHeight"` + BreezeGasTampingDuration abi.ChainEpoch `json:"breezeGasTampingDuration"` + UpgradeCalicoHeight abi.ChainEpoch `json:"upgradeCalicoHeight"` + UpgradePersianHeight abi.ChainEpoch `json:"upgradePersianHeight"` + UpgradeOrangeHeight abi.ChainEpoch `json:"upgradeOrangeHeight"` + UpgradeClausHeight abi.ChainEpoch `json:"upgradeClausHeight"` + UpgradeTrustHeight abi.ChainEpoch `json:"upgradeActorsV3Height"` + UpgradeNorwegianHeight abi.ChainEpoch `json:"upgradeNorwegianHeight"` + UpgradeTurboHeight abi.ChainEpoch `json:"upgradeActorsV4Height"` + UpgradeHyperdriveHeight abi.ChainEpoch `json:"upgradeHyperdriveHeight"` + UpgradeChocolateHeight abi.ChainEpoch `json:"upgradeChocolateHeight"` + UpgradeSnapDealsHeight abi.ChainEpoch `json:"upgradeSnapDealsHeight"` +} + +func IsNearUpgrade(epoch, upgradeEpoch abi.ChainEpoch) bool { + return epoch > upgradeEpoch-constants.Finality && epoch < upgradeEpoch+constants.Finality +} + +var DefaultForkUpgradeParam = &ForkUpgradeConfig{ + UpgradeBreezeHeight: 41280, + BreezeGasTampingDuration: 120, + UpgradeSmokeHeight: 51000, + UpgradeIgnitionHeight: 94000, + UpgradeRefuelHeight: 130800, + UpgradeTapeHeight: 140760, + UpgradeLiftoffHeight: 148888, + UpgradeKumquatHeight: 170000, + UpgradePriceListOopsHeight: 265199, + UpgradeCalicoHeight: 265200, + UpgradePersianHeight: 265200 + 120*60, + UpgradeAssemblyHeight: 138720, + UpgradeOrangeHeight: 336458, + UpgradeClausHeight: 343200, + UpgradeTrustHeight: 550321, + UpgradeNorwegianHeight: 665280, + UpgradeTurboHeight: 712320, + UpgradeHyperdriveHeight: 892800, + UpgradeChocolateHeight: 1231620, + UpgradeSnapDealsHeight: 999999999999, +} + +func newDefaultNetworkParamsConfig() *NetworkParamsConfig { + defaultParams := *DefaultForkUpgradeParam + return &NetworkParamsConfig{ + ConsensusMinerMinPower: 0, // 0 means don't override the value + ReplaceProofTypes: []abi.RegisteredSealProof{ + abi.RegisteredSealProof_StackedDrg2KiBV1, + abi.RegisteredSealProof_StackedDrg512MiBV1, + abi.RegisteredSealProof_StackedDrg32GiBV1, + abi.RegisteredSealProof_StackedDrg64GiBV1, + }, + DrandSchedule: map[abi.ChainEpoch]DrandEnum{0: 5, -1: 1}, + ForkUpgradeParam: &defaultParams, + } +} + +type MySQLConfig struct { + ConnectionString string `json:"connectionString"` + MaxOpenConn int `json:"maxOpenConn"` // 100 + MaxIdleConn int `json:"maxIdleConn"` // 10 + ConnMaxLifeTime time.Duration `json:"connMaxLifeTime"` // minuter: 60 + Debug bool `json:"debug"` +} + +type SlashFilterDsConfig struct { + Type string `json:"type"` + MySQL MySQLConfig `json:"mysql"` +} + +func newDefaultSlashFilterDsConfig() *SlashFilterDsConfig { + return &SlashFilterDsConfig{ + Type: "local", + MySQL: MySQLConfig{}, + } +} + +func newRateLimitConfig() *RateLimitCfg { + return &RateLimitCfg{ + Enable: false, + } +} + +// NewDefaultConfig returns a config object with all the fields filled out to +// their default values +func NewDefaultConfig() *Config { + return &Config{ + API: newDefaultAPIConfig(), + Bootstrap: newDefaultBootstrapConfig(), + Datastore: newDefaultDatastoreConfig(), + Mpool: newDefaultMessagePoolConfig(), + NetworkParams: newDefaultNetworkParamsConfig(), + Observability: newDefaultObservabilityConfig(), + Swarm: newDefaultSwarmConfig(), + Wallet: newDefaultWalletConfig(), + SlashFilterDs: newDefaultSlashFilterDsConfig(), + RateLimitCfg: newRateLimitConfig(), + } +} + +// WriteFile writes the config to the given filepath. +func (cfg *Config) WriteFile(file string) error { + f, err := os.OpenFile(file, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) + if err != nil { + return err + } + defer f.Close() // nolint: errcheck + + configString, err := json.MarshalIndent(*cfg, "", "\t") + if err != nil { + return err + } + + _, err = fmt.Fprint(f, string(configString)) + return err +} + +// ReadFile reads a config file from disk. +func ReadFile(file string) (*Config, error) { + f, err := os.Open(file) + if err != nil { + return nil, err + } + + cfg := NewDefaultConfig() + rawConfig, err := ioutil.ReadAll(f) + if err != nil { + return nil, err + } + if len(rawConfig) == 0 { + return cfg, nil + } + + err = json.Unmarshal(rawConfig, &cfg) + if err != nil { + return nil, err + } + + return cfg, nil +} + +// Set sets the config sub-struct referenced by `key`, e.g. 'api.address' +// or 'datastore' to the json key value pair encoded in jsonVal. +func (cfg *Config) Set(dottedKey string, jsonString string) error { + if !json.Valid([]byte(jsonString)) { + jsonBytes, _ := json.Marshal(jsonString) + jsonString = string(jsonBytes) + } + + if err := validate(dottedKey, jsonString); err != nil { + return err + } + + keys := strings.Split(dottedKey, ".") + for i := len(keys) - 1; i >= 0; i-- { + jsonString = fmt.Sprintf(`{ "%s": %s }`, keys[i], jsonString) + } + + decoder := json.NewDecoder(strings.NewReader(jsonString)) + decoder.DisallowUnknownFields() + + return decoder.Decode(&cfg) +} + +// Get gets the config sub-struct referenced by `key`, e.g. 'api.address' +func (cfg *Config) Get(key string) (interface{}, error) { + v := reflect.Indirect(reflect.ValueOf(cfg)) + keyTags := strings.Split(key, ".") +OUTER: + for j, keyTag := range keyTags { + if v.Type().Kind() == reflect.Struct { + for i := 0; i < v.NumField(); i++ { + jsonTag := strings.Split( + v.Type().Field(i).Tag.Get("json"), + ",")[0] + if jsonTag == keyTag { + v = v.Field(i) + if j == len(keyTags)-1 { + return v.Interface(), nil + } + v = reflect.Indirect(v) // only attempt one dereference + continue OUTER + } + } + } + + return nil, fmt.Errorf("key: %s invalid for config", key) + } + // Cannot get here as len(strings.Split(s, sep)) >= 1 with non-empty sep + return nil, fmt.Errorf("empty key is invalid") +} + +// validate runs validations on a given key and json string. validate uses the +// validators map defined at the top of this file to determine which validations +// to use for each key. +func validate(dottedKey string, jsonString string) error { + var obj interface{} + if err := json.Unmarshal([]byte(jsonString), &obj); err != nil { + return err + } + // recursively validate sub-keys by partially unmarshalling + if reflect.ValueOf(obj).Kind() == reflect.Map { + var obj map[string]json.RawMessage + if err := json.Unmarshal([]byte(jsonString), &obj); err != nil { + return err + } + for key := range obj { + if err := validate(dottedKey+"."+key, string(obj[key])); err != nil { + return err + } + } + return nil + } + + if validationFunc, present := Validators[dottedKey]; present { + return validationFunc(dottedKey, jsonString) + } + + return nil +} + +// validateLettersOnly validates that a given value contains only letters. If it +// does not, an error is returned using the given key for the message. +func validateLettersOnly(key string, value string) error { + if match, _ := regexp.MatchString("^\"[a-zA-Z]+\"$", value); !match { + return errors.Errorf(`"%s" must only contain letters`, key) + } + return nil +} diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go new file mode 100644 index 0000000000..711866b908 --- /dev/null +++ b/pkg/config/config_test.go @@ -0,0 +1,291 @@ +package config + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestDefaults(t *testing.T) { + tf.UnitTest(t) + + cfg := NewDefaultConfig() + + bs := []string{} + assert.Equal(t, "/ip4/127.0.0.1/tcp/3453", cfg.API.APIAddress) + assert.Equal(t, "/ip4/0.0.0.0/tcp/0", cfg.Swarm.Address) + assert.Equal(t, bs, cfg.Bootstrap.Addresses) +} + +func TestWriteFile(t *testing.T) { + tf.UnitTest(t) + + dir, err := ioutil.TempDir("", "config") + assert.NoError(t, err) + defer func() { + require.NoError(t, os.RemoveAll(dir)) + }() + + cfg := NewDefaultConfig() + + cfgJSON, err := json.MarshalIndent(*cfg, "", "\t") + require.NoError(t, err) + expected := string(cfgJSON) + + SanityCheck(t, expected) + + assert.NoError(t, cfg.WriteFile(filepath.Join(dir, "config.json"))) + content, err := ioutil.ReadFile(filepath.Join(dir, "config.json")) + assert.NoError(t, err) + + assert.Equal(t, expected, string(content)) + assert.NoError(t, os.Remove(filepath.Join(dir, "config.json"))) +} + +func TestConfigRoundtrip(t *testing.T) { + tf.UnitTest(t) + + dir, err := ioutil.TempDir("", "config") + assert.NoError(t, err) + defer func() { + require.NoError(t, os.RemoveAll(dir)) + }() + + cfg := NewDefaultConfig() + + cfgpath := filepath.Join(dir, "config.json") + assert.NoError(t, cfg.WriteFile(cfgpath)) + + cfgout, err := ReadFile(cfgpath) + assert.NoError(t, err) + + assert.Equal(t, cfg, cfgout) +} + +func TestConfigReadFileDefaults(t *testing.T) { + tf.UnitTest(t) + + t.Run("all sections exist", func(t *testing.T) { + cfgpath, cleaner, err := createConfigFile(` + { + "api": { + "apiAddress": "/ip4/127.0.0.1/tcp/9999", + "keyThatDoesntExit": false + }, + "swarm": { + "keyThatDoesntExit": "hello" + } + }`) + assert.NoError(t, err) + defer func() { + require.NoError(t, cleaner()) + }() + cfg, err := ReadFile(cfgpath) + assert.NoError(t, err) + + assert.Equal(t, cfg.API.APIAddress, "/ip4/127.0.0.1/tcp/9999") + assert.Equal(t, cfg.Swarm.Address, "/ip4/0.0.0.0/tcp/0") + }) + + t.Run("missing one section", func(t *testing.T) { + cfgpath, cleaner, err := createConfigFile(` + { + "api": { + "apiAddress": "/ip4/127.0.0.1/tcp/9999", + "keyThatDoesntExit'": false + } + }`) + assert.NoError(t, err) + defer func() { + require.NoError(t, cleaner()) + }() + cfg, err := ReadFile(cfgpath) + assert.NoError(t, err) + + assert.Equal(t, cfg.API.APIAddress, "/ip4/127.0.0.1/tcp/9999") + assert.Equal(t, cfg.Swarm.Address, "/ip4/0.0.0.0/tcp/0") + }) + + t.Run("empty file", func(t *testing.T) { + cfgpath, cleaner, err := createConfigFile("") + assert.NoError(t, err) + defer func() { + require.NoError(t, cleaner()) + }() + cfg, err := ReadFile(cfgpath) + assert.NoError(t, err) + + assert.Equal(t, cfg.API.APIAddress, "/ip4/127.0.0.1/tcp/3453") + assert.Equal(t, cfg.Swarm.Address, "/ip4/0.0.0.0/tcp/0") + }) +} + +func TestConfigGet(t *testing.T) { + tf.UnitTest(t) + + t.Run("valid gets", func(t *testing.T) { + cfg := NewDefaultConfig() + + out, err := cfg.Get("api.apiAddress") + assert.NoError(t, err) + assert.Equal(t, cfg.API.APIAddress, out) + + out, err = cfg.Get("api.accessControlAllowOrigin") + assert.NoError(t, err) + assert.Equal(t, cfg.API.AccessControlAllowOrigin, out) + + out, err = cfg.Get("api") + assert.NoError(t, err) + assert.Equal(t, cfg.API, out) + + out, err = cfg.Get("bootstrap.addresses") + assert.NoError(t, err) + assert.Equal(t, cfg.Bootstrap.Addresses, out) + + out, err = cfg.Get("bootstrap") + assert.NoError(t, err) + assert.Equal(t, cfg.Bootstrap, out) + + out, err = cfg.Get("datastore.path") + assert.NoError(t, err) + assert.Equal(t, cfg.Datastore.Path, out) + }) + + t.Run("invalid gets", func(t *testing.T) { + cfg := NewDefaultConfig() + + _, err := cfg.Get("datastore.") + assert.Error(t, err) + + _, err = cfg.Get(".datastore") + assert.Error(t, err) + + _, err = cfg.Get("invalidfield") + assert.Error(t, err) + + _, err = cfg.Get("bootstrap.addresses.toomuch") + assert.Error(t, err) + + _, err = cfg.Get("api-address") + assert.Error(t, err) + + // TODO: temporary as we don't have any ATM. + _, err = cfg.Get("bootstrap.addresses.0") + assert.Error(t, err) + }) +} + +func TestConfigSet(t *testing.T) { + tf.UnitTest(t) + + t.Run("set leaf values", func(t *testing.T) { + cfg := NewDefaultConfig() + + // set string + err := cfg.Set("api.apiAddress", `"/ip4/127.9.9.9/tcp/0"`) + assert.NoError(t, err) + assert.Equal(t, cfg.API.APIAddress, "/ip4/127.9.9.9/tcp/0") + + // set slice + err = cfg.Set("api.accessControlAllowOrigin", `["http://localroast:7854"]`) + assert.NoError(t, err) + assert.Equal(t, cfg.API.AccessControlAllowOrigin, []string{"http://localroast:7854"}) + }) + + t.Run("set table value", func(t *testing.T) { + cfg := NewDefaultConfig() + + jsonBlob := `{"type": "badgerbadgerbadgerds", "path": "mushroom-mushroom"}` + err := cfg.Set("datastore", jsonBlob) + assert.NoError(t, err) + assert.Equal(t, cfg.Datastore.Type, "badgerbadgerbadgerds") + assert.Equal(t, cfg.Datastore.Path, "mushroom-mushroom") + + cfg1path, cleaner, err := createConfigFile(fmt.Sprintf(`{"datastore": %s}`, jsonBlob)) + assert.NoError(t, err) + defer func() { + require.NoError(t, cleaner()) + }() + + cfg1, err := ReadFile(cfg1path) + assert.NoError(t, err) + assert.Equal(t, cfg1.Datastore, cfg.Datastore) + + // inline tables + jsonBlob = `{"type": "badgerbadgerbadgerds", "path": "mushroom-mushroom"}` + err = cfg.Set("datastore", jsonBlob) + assert.NoError(t, err) + + assert.Equal(t, cfg1.Datastore, cfg.Datastore) + }) + + t.Run("invalid set", func(t *testing.T) { + cfg := NewDefaultConfig() + + // bad key + err := cfg.Set("datastore.nope", `"too bad, fake key"`) + assert.Error(t, err) + + // not json + err = cfg.Set("bootstrap.addresses", `nota.json?key`) + assert.Error(t, err) + + // newlines in inline tables are invalid + tomlB := `{type = "badgerbadgerbadgerds", +path = "mushroom-mushroom"}` + err = cfg.Set("datastore", tomlB) + assert.Error(t, err) + + // setting values of wrong type + err = cfg.Set("datastore.type", `["not a", "string"]`) + assert.Error(t, err) + + err = cfg.Set("bootstrap.addresses", `"not a list"`) + assert.Error(t, err) + + err = cfg.Set("api", `"strings aren't structs"`) + assert.Error(t, err) + + // Corrupt address won't pass checksum + //err = cfg.Set("mining.defaultAddress", "fcqv3gmsd9gd7dqfe60d28euf4tx9v7929corrupt") + //assert.Contains(err.Error(), "invalid") + + err = cfg.Set("walletModule.defaultAddress", "corruptandtooshort") + assert.Contains(t, err.Error(), address.ErrUnknownNetwork.Error()) + }) + + t.Run("setting leaves does not interfere with neighboring leaves", func(t *testing.T) { + cfg := NewDefaultConfig() + + err := cfg.Set("bootstrap.period", `"3m"`) + assert.NoError(t, err) + err = cfg.Set("bootstrap.minPeerThreshold", `5`) + assert.NoError(t, err) + assert.Equal(t, cfg.Bootstrap.Period, "3m") + }) +} + +func createConfigFile(content string) (string, func() error, error) { + dir, err := ioutil.TempDir("", "config") + if err != nil { + return "", nil, err + } + cfgpath := filepath.Join(dir, "config.json") + + if err := ioutil.WriteFile(cfgpath, []byte(content), 0644); err != nil { + return "", nil, err + } + + return cfgpath, func() error { + return os.RemoveAll(dir) + }, nil +} diff --git a/pkg/config/testing.go b/pkg/config/testing.go new file mode 100644 index 0000000000..763cc8b1a5 --- /dev/null +++ b/pkg/config/testing.go @@ -0,0 +1,18 @@ +package config + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +// Makes some basic checks of a serialized config to ascertain that it looks kind of right. +// This is instead of brittle hardcoded exact config expectations. +func SanityCheck(t *testing.T, cfgJSON string) { + assert.True(t, strings.Contains(cfgJSON, "accessControlAllowOrigin")) + assert.True(t, strings.Contains(cfgJSON, "http://localhost:8080")) + assert.True(t, strings.Contains(cfgJSON, "bootstrap")) + assert.True(t, strings.Contains(cfgJSON, "bootstrap")) + assert.True(t, strings.Contains(cfgJSON, "\"minPeerThreshold\": 3")) +} diff --git a/pkg/consensus/block_validator.go b/pkg/consensus/block_validator.go new file mode 100644 index 0000000000..e38c712679 --- /dev/null +++ b/pkg/consensus/block_validator.go @@ -0,0 +1,969 @@ +package consensus + +import ( + "bytes" + "context" + "errors" + "fmt" + "os" + "strings" + "time" + + "go.opencensus.io/trace" + + blockadt "github.com/filecoin-project/specs-actors/actors/util/adt" + pubsub "github.com/libp2p/go-libp2p-pubsub" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/Gurpartap/async" + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + acrypto "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/network" + proof2 "github.com/filecoin-project/specs-actors/v2/actors/runtime/proof" + "github.com/filecoin-project/venus/pkg/beacon" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/fork" + appstate "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/state/tree" + bstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/pkg/vm/gas" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/hashicorp/go-multierror" + lru "github.com/hashicorp/golang-lru" + "github.com/ipfs/go-cid" + blockstore "github.com/ipfs/go-ipfs-blockstore" + cbor "github.com/ipfs/go-ipld-cbor" + "golang.org/x/xerrors" +) + +var ErrTemporal = errors.New("temporal error") +var ErrSoftFailure = errors.New("soft validation failure") +var ErrInsufficientPower = errors.New("incoming block's miner does not have minimum power") + +//BlockValidator used to validate a block is ok or not +type BlockValidator struct { + // TicketValidator validates ticket generation + tv TicketValidator + // chain data store + bstore blockstore.Blockstore + // message store + messageStore *chain.MessageStore + drand beacon.Schedule + // cstore is used for loading state trees during message running. + cstore cbor.IpldStore + // postVerifier verifies PoSt proofs and associated data + proofVerifier ProofVerifier + // state produces snapshots + state StateViewer + // Provides and stores validated tipsets and their state roots. + chainState chainReader + // Selects the heaviest of two chains + chainSelector *ChainSelector + // fork used to process fork code + fork fork.IFork + // network params + config *config.NetworkParamsConfig + // gasprice for vm + gasPirceSchedule *gas.PricesSchedule + // cache for validate block + validateBlockCache *lru.ARCCache + + Stmgr StateTransformer +} + +//NewBlockValidator create a new block validator +func NewBlockValidator(tv TicketValidator, + bstore blockstore.Blockstore, + messageStore *chain.MessageStore, + drand beacon.Schedule, + cstore cbor.IpldStore, + proofVerifier ProofVerifier, + state StateViewer, + chainState chainReader, + chainSelector *ChainSelector, + fork fork.IFork, + config *config.NetworkParamsConfig, + gasPirceSchedule *gas.PricesSchedule) *BlockValidator { + validateBlockCache, _ := lru.NewARC(2048) + return &BlockValidator{ + tv: tv, + bstore: bstore, + messageStore: messageStore, + drand: drand, + cstore: cstore, + proofVerifier: proofVerifier, + state: state, + chainState: chainState, + chainSelector: chainSelector, + fork: fork, + config: config, + gasPirceSchedule: gasPirceSchedule, + validateBlockCache: validateBlockCache, + } +} + +//ValidateBlockMsg used to validate block from incoming. check message, signature , wincount. +// if give a reject error. local node reject this block. if give a ignore error. recheck this block in latest notify +func (bv *BlockValidator) ValidateBlockMsg(ctx context.Context, blk *types.BlockMsg) pubsub.ValidationResult { + validationStart := time.Now() + defer func() { + logExpect.Debugw("block validation header", "Cid", blk.Cid(), "took", time.Since(validationStart), "height", blk.Header.Height, "age", time.Since(time.Unix(int64(blk.Header.Timestamp), 0))) + }() + + return bv.validateBlockMsg(ctx, blk) +} + +//ValidateFullBlock should match up with 'Semantical Validation' in validation.md in the spec +func (bv *BlockValidator) ValidateFullBlock(ctx context.Context, blk *types.BlockHeader) (err error) { + log.Infof("validateFullBlock:%d, cid:%s", blk.Height, blk.Cid().String()) + validationStart := time.Now() + defer func() { + if err == nil { + bv.validateBlockCache.Add(blk.Cid(), struct{}{}) + } + logExpect.Infow("block validation", "Cid", blk.Cid(), "took", time.Since(validationStart), "height", blk.Height, "age", time.Since(time.Unix(int64(blk.Timestamp), 0)), "Err", err) + }() + + if _, ok := bv.validateBlockCache.Get(blk.Cid()); ok { + return nil + } + return bv.validateBlock(ctx, blk) +} + +func (bv *BlockValidator) validateBlock(ctx context.Context, blk *types.BlockHeader) error { + parent, err := bv.chainState.GetTipSet(ctx, types.NewTipSetKey(blk.Parents...)) + if err != nil { + return xerrors.Errorf("load parent tipset failed %w", err) + } + parentWeight, err := bv.chainSelector.Weight(ctx, parent) + if err != nil { + return xerrors.Errorf("calc parent weight failed %w", err) + } + + if err := blockSanityChecks(blk); err != nil { + return xerrors.Errorf("incoming header failed basic sanity checks: %w", err) + } + + baseHeight := parent.Height() + nulls := blk.Height - (baseHeight + 1) + if tgtTS := parent.MinTimestamp() + bv.config.BlockDelay*uint64(nulls+1); blk.Timestamp != tgtTS { + return xerrors.Errorf("block has wrong timestamp: %d != %d", blk.Timestamp, tgtTS) + } + + now := uint64(time.Now().Unix()) + if blk.Timestamp > now+AllowableClockDriftSecs { + return xerrors.Errorf("block was from the future (now=%d, blk=%d): %v", now, blk.Timestamp, ErrTemporal) + } + if blk.Timestamp > now { + logExpect.Warn("Got block from the future, but within threshold", blk.Timestamp, time.Now().Unix()) + } + + // get parent beacon + prevBeacon, err := bv.chainState.GetLatestBeaconEntry(ctx, parent) + if err != nil { + return xerrors.Errorf("failed to get latest beacon entry: %w", err) + } + + if !parentWeight.Equals(blk.ParentWeight) { + return xerrors.Errorf("block %s has invalid parent weight %d expected %d", blk.Cid().String(), blk.ParentWeight, parentWeight) + } + + // get worker address + version := bv.fork.GetNtwkVersion(ctx, blk.Height) + lbTS, lbStateRoot, err := bv.chainState.GetLookbackTipSetForRound(ctx, parent, blk.Height, version) + if err != nil { + return xerrors.Errorf("failed to get lookback tipset for block: %w", err) + } + + powerStateView := bv.state.PowerStateView(lbStateRoot) + workerAddr, err := powerStateView.GetMinerWorkerRaw(ctx, blk.Miner) + if err != nil { + return xerrors.Errorf("query worker address failed: %w", err) + } + + minerCheck := async.Err(func() error { + statRoot, _, err := bv.Stmgr.RunStateTransition(ctx, parent) + if err != nil { + return err + } + if !statRoot.Equals(blk.ParentStateRoot) { + return fmt.Errorf("expect verify miner on stateroot:%s, but caclutated is :%s", + blk.ParentStateRoot.String(), statRoot.String()) + } + if err := bv.minerIsValid(ctx, blk.Miner, blk.ParentStateRoot); err != nil { + return xerrors.Errorf("minerIsValid failed: %w", err) + } + return nil + }) + + baseFeeCheck := async.Err(func() error { + baseFee, err := bv.messageStore.ComputeBaseFee(ctx, parent, bv.config.ForkUpgradeParam) + if err != nil { + return xerrors.Errorf("computing base fee: %w", err) + } + + if big.Cmp(baseFee, blk.ParentBaseFee) != 0 { + return xerrors.Errorf("base fee doesn't match: %s (header) != %s (computed)", blk.ParentBaseFee, baseFee) + } + return nil + }) + + blockSigCheck := async.Err(func() error { + // Validate block signature + data, err := blk.SignatureData() + if err != nil { + return err + } + return crypto.Verify(blk.BlockSig, workerAddr, data) + }) + + beaconValuesCheck := async.Err(func() error { + parentHeight := parent.Height() + if err = bv.ValidateBlockBeacon(blk, parentHeight, prevBeacon); err != nil { + return err + } + return nil + }) + + tktsCheck := async.Err(func() error { + beaconBase, err := bv.beaconBaseEntry(ctx, blk) + if err != nil { + return xerrors.Errorf("failed to get election entry %w", err) + } + + sampleEpoch := blk.Height - constants.TicketRandomnessLookback + bSmokeHeight := blk.Height > bv.config.ForkUpgradeParam.UpgradeSmokeHeight + if err := bv.tv.IsValidTicket(ctx, types.NewTipSetKey(blk.Parents...), beaconBase, bSmokeHeight, sampleEpoch, blk.Miner, workerAddr, *blk.Ticket); err != nil { + return xerrors.Errorf("invalid ticket: %s in block %s %w", blk.Ticket.String(), blk.Cid(), err) + } + return nil + }) + + winnerCheck := async.Err(func() error { + if err = bv.ValidateBlockWinner(ctx, workerAddr, lbTS, lbStateRoot, parent, parent.At(0).ParentStateRoot, blk, prevBeacon); err != nil { + return err + } + return nil + }) + + winPoStNv := bv.fork.GetNtwkVersion(ctx, baseHeight) + wproofCheck := async.Err(func() error { + if err := bv.VerifyWinningPoStProof(ctx, winPoStNv, blk, prevBeacon, lbStateRoot); err != nil { + return xerrors.Errorf("invalid election post: %w", err) + } + return nil + }) + + msgsCheck := async.Err(func() error { + statRoot, _, err := bv.Stmgr.RunStateTransition(ctx, parent) + if err != nil { + return err + } + keyStateView := bv.state.PowerStateView(statRoot) + sigValidator := appstate.NewSignatureValidator(keyStateView) + if err := bv.checkBlockMessages(ctx, sigValidator, blk, parent); err != nil { + return xerrors.Errorf("block had invalid messages: %w", err) + } + return nil + }) + + stateRootCheck := async.Err(func() error { + stateroot, precp, err := bv.Stmgr.RunStateTransition(ctx, parent) + if err != nil { + return xerrors.Errorf("get tipsetstate(%d, %s) failed: %w", blk.Height, blk.Parents, err) + } + + if !stateroot.Equals(blk.ParentStateRoot) { + log.Warnf("Check StateRoot for tipset(%s, %d) with mismatching state, expected:%s, actually:%s", + parent.Key().String(), parent.Height(), blk.ParentStateRoot.String(), stateroot.String()) + return xerrors.Errorf("tipset(%s) state mis-match computed state (%s != %s),%w", + parent.Key().String(), stateroot, blk.ParentStateRoot, ErrStateRootMismatch) + } + + if !precp.Equals(blk.ParentMessageReceipts) { + log.Warnf("Check MessageReceipts for tipset(%s, %d) with mismatching state, expected:%s, actually:%s", + parent.Key().String(), parent.Height(), blk.ParentStateRoot.String(), stateroot.String()) + return xerrors.Errorf("tipset(%s) message receipts mis-match computed state (%s != %s),%w", + parent.Key().String(), stateroot, blk.ParentStateRoot, ErrStateRootMismatch) + } + + return nil + }) + + await := []async.ErrorFuture{ + minerCheck, + tktsCheck, + blockSigCheck, + beaconValuesCheck, + wproofCheck, + winnerCheck, + msgsCheck, + baseFeeCheck, + stateRootCheck, + } + + var merr error + for _, fut := range await { + if err := fut.AwaitContext(ctx); err != nil { + merr = multierror.Append(merr, err) + } + } + + if merr != nil { + mulErr := merr.(*multierror.Error) + mulErr.ErrorFormat = func(es []error) string { + if len(es) == 1 { + return fmt.Sprintf("1 error occurred:\n\t* %+v\n\n", es[0]) + } + + points := make([]string, len(es)) + for i, err := range es { + points[i] = fmt.Sprintf("* %+v", err) + } + + return fmt.Sprintf( + "%d errors occurred:\n\t%s\n\n", + len(es), strings.Join(points, "\n\t")) + } + return mulErr + } + return nil +} + +func (bv *BlockValidator) validateBlockMsg(ctx context.Context, blk *types.BlockMsg) pubsub.ValidationResult { + // validate the block meta: the Message CID in the header must match the included messages + err := bv.validateMsgMeta(ctx, blk) + if err != nil { + logExpect.Warnf("error validating message metadata: %s", err) + return pubsub.ValidationReject + } + + // we want to ensure that it is a block from a known miner; we reject blocks from unknown miners + // to prevent spam attacks. + // the logic works as follows: we lookup the miner in the chain for its key. + // if we can find it then it's a known miner and we can validate the signature. + // if we can't find it, we check whether we are (near) synced in the chain. + // if we are not synced we cannot validate the block and we must ignore it. + // if we are synced and the miner is unknown, then the block is rejcected. + key, err := bv.checkPowerAndGetWorkerKey(ctx, blk.Header) + if err != nil { + if err != ErrSoftFailure && bv.isChainNearSynced() { + logExpect.Errorf("received block from unknown miner or miner that doesn't meet min power over pubsub; rejecting message") + return pubsub.ValidationReject + } + + logExpect.Errorf("cannot validate block message; unknown miner or miner that doesn't meet min power in unsynced chain") + return pubsub.ValidationIgnore + } + + err = checkBlockSignature(ctx, blk.Header, key) + if err != nil { + logExpect.Errorf("block signature verification failed: %s", err) + return pubsub.ValidationReject + } + + if blk.Header.ElectionProof.WinCount < 1 { + logExpect.Errorf("block is not claiming to be winning") + return pubsub.ValidationReject + } + + return pubsub.ValidationAccept +} + +func (bv *BlockValidator) isChainNearSynced() bool { + ts := bv.chainState.GetHead() + timestamp := ts.MinTimestamp() + timestampTime := time.Unix(int64(timestamp), 0) + return constants.Clock.Since(timestampTime) < 6*time.Hour +} + +func (bv *BlockValidator) validateMsgMeta(ctx context.Context, msg *types.BlockMsg) error { + // TODO there has to be a simpler way to do this without the blockstore dance + // block headers use adt0 + store := blockadt.WrapStore(ctx, cbor.NewCborStore(bstore.NewTemporary())) + bmArr := blockadt.MakeEmptyArray(store) + smArr := blockadt.MakeEmptyArray(store) + + for i, m := range msg.BlsMessages { + c := cbg.CborCid(m) + if err := bmArr.Set(uint64(i), &c); err != nil { + return err + } + } + + for i, m := range msg.SecpkMessages { + c := cbg.CborCid(m) + if err := smArr.Set(uint64(i), &c); err != nil { + return err + } + } + + bmroot, err := bmArr.Root() + if err != nil { + return err + } + + smroot, err := smArr.Root() + if err != nil { + return err + } + + mrcid, err := store.Put(store.Context(), &types.MessageRoot{ + BlsRoot: bmroot, + SecpkRoot: smroot, + }) + + if err != nil { + return err + } + + if msg.Header.Messages != mrcid { + return fmt.Errorf("messages didn't match root cid in header") + } + + return nil +} + +func (bv *BlockValidator) checkPowerAndGetWorkerKey(ctx context.Context, bh *types.BlockHeader) (address.Address, error) { + // we check that the miner met the minimum power at the lookback tipset + + baseTS := bv.chainState.GetHead() + version := bv.fork.GetNtwkVersion(ctx, bh.Height) + lbts, lbst, err := bv.chainState.GetLookbackTipSetForRound(ctx, baseTS, bh.Height, version) + if err != nil { + log.Warnf("failed to load lookback tipset for incoming block: %s", err) + return address.Undef, ErrSoftFailure + } + + powerStateView := bv.state.PowerStateView(lbst) + key, err := powerStateView.GetMinerWorkerRaw(ctx, bh.Miner) + if err != nil { + log.Warnf("failed to resolve worker key for miner %s: %s", bh.Miner, err) + return address.Undef, ErrSoftFailure + } + + // NOTE: we check to see if the miner was eligible in the lookback + // tipset - 1 for historical reasons. DO NOT use the lookback state + // returned by GetLookbackTipSetForRound. + + eligible, err := bv.MinerEligibleToMine(ctx, bh.Miner, baseTS.At(0).ParentStateRoot, baseTS.Height(), lbts) + if err != nil { + log.Warnf("failed to determine if incoming block's miner has minimum power: %s", err) + return address.Undef, ErrSoftFailure + } + + if !eligible { + log.Warnf("incoming block's miner is ineligible") + return address.Undef, ErrInsufficientPower + } + + return key, nil +} + +func (bv *BlockValidator) minerIsValid(ctx context.Context, maddr address.Address, baseStateRoot cid.Cid) error { + vms := cbor.NewCborStore(bv.bstore) + sm, err := tree.LoadState(ctx, vms, baseStateRoot) + if err != nil { + return xerrors.Errorf("loading state: %w", err) + } + + pact, find, err := sm.GetActor(ctx, power.Address) + if err != nil { + return xerrors.Errorf("get power actor failed: %w", err) + } + + if !find { + return xerrors.New("power actor not found") + } + + ps, err := power.Load(adt.WrapStore(ctx, vms), pact) + if err != nil { + return err + } + + _, exist, err := ps.MinerPower(maddr) + if err != nil { + return xerrors.Errorf("failed to look up miner's claim: %w", err) + } + + if !exist { + return xerrors.New("miner isn't valid") + } + + return nil +} + +func (bv *BlockValidator) ValidateBlockBeacon(blk *types.BlockHeader, parentEpoch abi.ChainEpoch, prevEntry *types.BeaconEntry) error { + if os.Getenv("VENUS_IGNORE_DRAND") == "_yes_" { + return nil + } + return beacon.ValidateBlockValues(bv.drand, blk, parentEpoch, prevEntry) +} + +func (bv *BlockValidator) beaconBaseEntry(ctx context.Context, blk *types.BlockHeader) (*types.BeaconEntry, error) { + if len(blk.BeaconEntries) > 0 { + return &blk.BeaconEntries[len(blk.BeaconEntries)-1], nil + } + + parent, err := bv.chainState.GetTipSet(ctx, types.NewTipSetKey(blk.Parents...)) + if err != nil { + return nil, err + } + return chain.FindLatestDRAND(ctx, parent, bv.chainState) +} + +func (bv *BlockValidator) ValidateBlockWinner(ctx context.Context, waddr address.Address, lbTS *types.TipSet, lbRoot cid.Cid, baseTS *types.TipSet, baseRoot cid.Cid, + blk *types.BlockHeader, prevEntry *types.BeaconEntry) error { + if blk.ElectionProof.WinCount < 1 { + return xerrors.Errorf("block is not claiming to be a winner") + } + + baseHeight := baseTS.Height() + eligible, err := bv.MinerEligibleToMine(ctx, blk.Miner, baseRoot, baseHeight, lbTS) + if err != nil { + return xerrors.Errorf("determining if miner has min power failed: %v", err) + } + + if !eligible { + return xerrors.New("block's miner is ineligible to mine") + } + + rBeacon := prevEntry + if len(blk.BeaconEntries) != 0 { + rBeacon = &blk.BeaconEntries[len(blk.BeaconEntries)-1] + } + buf := new(bytes.Buffer) + if err := blk.Miner.MarshalCBOR(buf); err != nil { + return xerrors.Errorf("failed to marshal miner address to cbor: %s", err) + } + + vrfBase, err := chain.DrawRandomness(rBeacon.Data, acrypto.DomainSeparationTag_ElectionProofProduction, blk.Height, buf.Bytes()) + if err != nil { + return xerrors.Errorf("could not draw randomness: %s", err) + } + + if err := VerifyElectionPoStVRF(ctx, waddr, vrfBase, blk.ElectionProof.VRFProof); err != nil { + return xerrors.Errorf("validating block election proof failed: %s", err) + } + + view := bv.state.PowerStateView(lbRoot) + if view == nil { + return xerrors.New("power state view is null") + } + + _, qaPower, err := view.MinerClaimedPower(ctx, blk.Miner) + if err != nil { + return xerrors.Errorf("get miner power failed: %s", err) + } + + tpow, err := view.PowerNetworkTotal(ctx) + if err != nil { + return xerrors.Errorf("get network total power failed: %s", err) + } + + j := blk.ElectionProof.ComputeWinCount(qaPower, tpow.QualityAdjustedPower) + if blk.ElectionProof.WinCount != j { + return xerrors.Errorf("miner claims wrong number of wins: miner: %d, computed: %d", blk.ElectionProof.WinCount, j) + } + + return nil +} + +func (bv *BlockValidator) MinerEligibleToMine(ctx context.Context, addr address.Address, parentStateRoot cid.Cid, parentHeight abi.ChainEpoch, lookbackTS *types.TipSet) (bool, error) { + hmp, err := bv.minerHasMinPower(ctx, addr, lookbackTS) + + // TODO: We're blurring the lines between a "runtime network version" and a "Lotus upgrade epoch", is that unavoidable? + if bv.fork.GetNtwkVersion(ctx, parentHeight) <= network.Version3 { + return hmp, err + } + + if err != nil { + return false, err + } + + if !hmp { + return false, nil + } + + // Post actors v2, also check MinerEligibleForElection with base ts + vms := cbor.NewCborStore(bv.bstore) + sm, err := tree.LoadState(ctx, vms, parentStateRoot) + if err != nil { + return false, xerrors.Errorf("loading state: %v", err) + } + + pact, find, err := sm.GetActor(ctx, power.Address) + if err != nil { + return false, xerrors.Errorf("get power actor failed: %v", err) + } + + if !find { + return false, xerrors.New("power actor not found") + } + + pstate, err := power.Load(adt.WrapStore(ctx, bv.cstore), pact) + if err != nil { + return false, err + } + + mact, find, err := sm.GetActor(ctx, addr) + if err != nil { + return false, xerrors.Errorf("loading miner actor state: %v", err) + } + + if !find { + return false, xerrors.Errorf("miner actor %s not found", addr) + } + + mstate, err := miner.Load(adt.WrapStore(ctx, vms), mact) + if err != nil { + return false, err + } + + // Non-empty power claim. + if claim, found, err := pstate.MinerPower(addr); err != nil { + return false, err + } else if !found { + return false, nil + } else if claim.QualityAdjPower.LessThanEqual(big.Zero()) { + logExpect.Infof("miner address:%v", addr.String()) + logExpect.Warnf("miner quality adjust power:%v is less than zero", claim.QualityAdjPower) + return false, nil + } + + // No fee debt. + if debt, err := mstate.FeeDebt(); err != nil { + return false, err + } else if !debt.IsZero() { + logExpect.Warnf("the debt:%v is not zero", debt) + return false, nil + } + + // No active consensus faults. + if mInfo, err := mstate.Info(); err != nil { + return false, err + } else if parentHeight <= mInfo.ConsensusFaultElapsed { + return false, nil + } + + return true, nil +} + +func (bv *BlockValidator) minerHasMinPower(ctx context.Context, addr address.Address, ts *types.TipSet) (bool, error) { + vms := cbor.NewCborStore(bv.bstore) + sm, err := tree.LoadState(ctx, vms, ts.Blocks()[0].ParentStateRoot) + if err != nil { + return false, xerrors.Errorf("loading state: %v", err) + } + + pact, find, err := sm.GetActor(ctx, power.Address) + if err != nil { + return false, xerrors.Errorf("get power actor failed: %v", err) + } + + if !find { + return false, xerrors.New("power actor not found") + } + + ps, err := power.Load(adt.WrapStore(ctx, vms), pact) + if err != nil { + return false, err + } + + return ps.MinerNominalPowerMeetsConsensusMinimum(addr) +} + +func (bv *BlockValidator) VerifyWinningPoStProof(ctx context.Context, nv network.Version, blk *types.BlockHeader, prevBeacon *types.BeaconEntry, lbst cid.Cid) error { + if constants.InsecurePoStValidation { + if len(blk.WinPoStProof) == 0 { + return xerrors.Errorf("[INSECURE-POST-VALIDATION] No winning post proof given") + } + + if string(blk.WinPoStProof[0].ProofBytes) == "valid proof" { + return nil + } + return xerrors.Errorf("[INSECURE-POST-VALIDATION] winning post was invalid") + } + + buf := new(bytes.Buffer) + if err := blk.Miner.MarshalCBOR(buf); err != nil { + return xerrors.Errorf("failed to marshal miner address: %v", err) + } + + rbase := prevBeacon + if len(blk.BeaconEntries) > 0 { + rbase = &blk.BeaconEntries[len(blk.BeaconEntries)-1] + } + + rand, err := chain.DrawRandomness(rbase.Data, acrypto.DomainSeparationTag_WinningPoStChallengeSeed, blk.Height, buf.Bytes()) + if err != nil { + return xerrors.Errorf("failed to get randomness for verifying winning post proof: %v", err) + } + + mid, err := address.IDFromAddress(blk.Miner) + if err != nil { + return xerrors.Errorf("failed to get ID from miner address %s: %v", blk.Miner, err) + } + + view := bv.state.PowerStateView(lbst) + if view == nil { + return xerrors.New("power state view is null") + } + + sectors, err := view.GetSectorsForWinningPoSt(ctx, nv, bv.proofVerifier, blk.Miner, rand) + if err != nil { + return xerrors.Errorf("getting winning post sector set: %v", err) + } + + proofs := make([]proof2.PoStProof, len(blk.WinPoStProof)) + for idx, pf := range blk.WinPoStProof { + proofs[idx] = proof2.PoStProof{PoStProof: pf.PoStProof, ProofBytes: pf.ProofBytes} + } + + ok, err := bv.proofVerifier.VerifyWinningPoSt(ctx, proof2.WinningPoStVerifyInfo{ + Randomness: rand, + Proofs: proofs, + ChallengedSectors: sectors, + Prover: abi.ActorID(mid), + }) + + if err != nil { + return xerrors.Errorf("failed to verify election post: %v", err) + } + + if !ok { + logExpect.Errorf("invalid winning post (block: %s, %x; %v)", blk.Cid(), rand, sectors) + return xerrors.Errorf("winning post was invalid") + } + + return nil +} + +// TODO: We should extract this somewhere else and make the message pool and miner use the same logic +func (bv *BlockValidator) checkBlockMessages(ctx context.Context, sigValidator *appstate.SignatureValidator, blk *types.BlockHeader, baseTS *types.TipSet) (err error) { + blksecpMsgs, blkblsMsgs, err := bv.messageStore.LoadMetaMessages(ctx, blk.Messages) + if err != nil { + return xerrors.Errorf("failed loading message list %s for block %s %v", blk.Messages, blk.Cid(), err) + } + + { + // Verify that the BLS signature aggregate is correct + if err := sigValidator.ValidateBLSMessageAggregate(ctx, blkblsMsgs, blk.BLSAggregate); err != nil { + return xerrors.Errorf("bls message verification failed for block %s %v", blk.Cid(), err) + } + + // Verify that all secp message signatures are correct + for i, msg := range blksecpMsgs { + if err := sigValidator.ValidateMessageSignature(ctx, msg); err != nil { + return xerrors.Errorf("invalid signature for secp message %d in block %s %v", i, blk.Cid(), err) + } + } + } + + nonces := make(map[address.Address]uint64) + vms := cbor.NewCborStore(bv.bstore) + st, err := tree.LoadState(ctx, vms, blk.ParentStateRoot) + if err != nil { + return xerrors.Errorf("loading state: %v", err) + } + + baseHeight := baseTS.Height() + pl := bv.gasPirceSchedule.PricelistByEpoch(baseHeight) + var sumGasLimit int64 + checkMsg := func(msg types.ChainMsg) error { + m := msg.VMMessage() + + // Phase 1: syntactic validation, as defined in the spec + minGas := pl.OnChainMessage(msg.ChainLength()) + if err := m.ValidForBlockInclusion(minGas.Total(), bv.fork.GetNtwkVersion(ctx, blk.Height)); err != nil { + return err + } + + // ValidForBlockInclusion checks if any single message does not exceed BlockGasLimit + // So below is overflow safe + sumGasLimit += m.GasLimit + if sumGasLimit > constants.BlockGasLimit { + return xerrors.Errorf("block gas limit exceeded") + } + + // Phase 2: (Partial) semantic validation: + // the sender exists and is an account actor, and the nonces make sense + var sender address.Address + if bv.fork.GetNtwkVersion(ctx, blk.Height) >= network.Version13 { + sender, err = st.LookupID(m.From) + if err != nil { + return err + } + } else { + sender = m.From + } + + if _, ok := nonces[sender]; !ok { + // `GetActor` does not validate that this is an account actor. + act, find, err := st.GetActor(ctx, sender) + if err != nil { + return xerrors.Errorf("failed to get actor: %v", err) + } + + if !find { + return xerrors.Errorf("actor %s not found", sender) + } + + if !builtin.IsAccountActor(act.Code) { + return xerrors.New("Sender must be an account actor") + } + nonces[sender] = act.Nonce + } + + if nonces[sender] != m.Nonce { + return xerrors.Errorf("wrong nonce (exp: %d, got: %d)", nonces[sender], m.Nonce) + } + nonces[sender]++ + + return nil + } + + // Validate message arrays in a temporary blockstore. + blsMsgs := make([]types.ChainMsg, len(blkblsMsgs)) + for i, m := range blkblsMsgs { + if err := checkMsg(m); err != nil { + return xerrors.Errorf("block had invalid bls message at index %d: %v", i, err) + } + + blsMsgs[i] = m + } + + secpMsgs := make([]types.ChainMsg, len(blksecpMsgs)) + for i, m := range blksecpMsgs { + if bv.fork.GetNtwkVersion(ctx, blk.Height) >= network.Version14 { + if m.Signature.Type != crypto.SigTypeSecp256k1 { + return xerrors.Errorf("block had invalid secpk message at index %d: %w", i, err) + } + } + if err := checkMsg(m); err != nil { + return xerrors.Errorf("block had invalid secpk message at index %d: %v", i, err) + } + + secpMsgs[i] = m + } + + bmroot, err := chain.GetChainMsgRoot(ctx, blsMsgs) + if err != nil { + return xerrors.Errorf("get blsMsgs root failed: %v", err) + } + + smroot, err := chain.GetChainMsgRoot(ctx, secpMsgs) + if err != nil { + return xerrors.Errorf("get secpMsgs root failed: %v", err) + } + + txMeta := &types.MessageRoot{ + BlsRoot: bmroot, + SecpkRoot: smroot, + } + b, err := chain.MakeBlock(txMeta) + if err != nil { + return xerrors.Errorf("serialize tx meta failed: %v", err) + } + if blk.Messages != b.Cid() { + return fmt.Errorf("messages didnt match message root in header") + } + return nil +} + +// ValidateMsgMeta performs structural and content hash validation of the +// messages within this block. If validation passes, it stores the messages in +// the underlying IPLD block store. +func (bv *BlockValidator) ValidateMsgMeta(ctx context.Context, fblk *types.FullBlock) error { + if msgc := len(fblk.BLSMessages) + len(fblk.SECPMessages); msgc > constants.BlockMessageLimit { + return xerrors.Errorf("block %s has too many messages (%d)", fblk.Header.Cid(), msgc) + } + + // TODO: IMPORTANT(GARBAGE). These message puts and the msgmeta + // computation need to go into the 'temporary' side of the blockstore when + // we implement that + + // We use a temporary bstore here to avoid writing intermediate pieces + // into the blockstore. + blockstore := bstore.NewTemporary() + var bcids, scids []cid.Cid + + for _, m := range fblk.BLSMessages { + c, err := chain.PutMessage(ctx, blockstore, m) + if err != nil { + return xerrors.Errorf("putting bls message to blockstore after msgmeta computation: %v", err) + } + bcids = append(bcids, c) + } + + for _, m := range fblk.SECPMessages { + c, err := chain.PutMessage(ctx, blockstore, m) + if err != nil { + return xerrors.Errorf("putting bls message to blockstore after msgmeta computation: %w", err) + } + scids = append(scids, c) + } + + // Compute the root CID of the combined message trie. + smroot, err := chain.ComputeMsgMeta(blockstore, bcids, scids) + if err != nil { + return xerrors.Errorf("validating msgmeta, compute failed: %v", err) + } + + // Check that the message trie root matches with what's in the block. + if fblk.Header.Messages != smroot { + return xerrors.Errorf("messages in full block did not match msgmeta root in header (%s != %s)", fblk.Header.Messages, smroot) + } + + // Finally, flush + return bstore.CopyParticial(context.TODO(), blockstore, bv.bstore, smroot) +} + +func blockSanityChecks(b *types.BlockHeader) error { + if b.ElectionProof == nil { + return xerrors.Errorf("block cannot have nil election proof") + } + + if b.BlockSig == nil { + return xerrors.Errorf("block had nil signature") + } + + if b.BLSAggregate == nil { + return xerrors.Errorf("block had nil bls aggregate signature") + } + + return nil +} + +func checkBlockSignature(ctx context.Context, blk *types.BlockHeader, worker address.Address) error { + _, span := trace.StartSpan(ctx, "checkBlockSignature") + defer span.End() + + if blk.IsValidated() { + return nil + } + + if blk.BlockSig == nil { + return xerrors.New("block signature not present") + } + + sigb, err := blk.SignatureData() + if err != nil { + return err + } + err = crypto.Verify(blk.BlockSig, worker, sigb) + if err == nil { + blk.SetValidated() + } + + return err +} diff --git a/pkg/consensus/chain_selector.go b/pkg/consensus/chain_selector.go new file mode 100644 index 0000000000..a816df7ee8 --- /dev/null +++ b/pkg/consensus/chain_selector.go @@ -0,0 +1,120 @@ +package consensus + +// This is to implement Expected Consensus protocol +// See: https://github.com/filecoin-project/specs/blob/master/expected-consensus.md + +import ( + "context" + "errors" + "math/big" + + logging "github.com/ipfs/go-log/v2" + + fbig "github.com/filecoin-project/go-state-types/big" + cbor "github.com/ipfs/go-ipld-cbor" + xerrors "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/state" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var log = logging.Logger("chain_selector") + +// ChainSelector weighs and compares chains. +type ChainSelector struct { + cstore cbor.IpldStore + state StateViewer +} + +// NewChainSelector is the constructor for Chain selection module. +func NewChainSelector(cs cbor.IpldStore, state StateViewer) *ChainSelector { + return &ChainSelector{ + cstore: cs, + state: state, + } +} + +// Weight returns the EC weight of this TipSet as a filecoin big int. +func (c *ChainSelector) Weight(ctx context.Context, ts *types.TipSet) (fbig.Int, error) { + pStateID := ts.At(0).ParentStateRoot + // Retrieve parent weight. + if !pStateID.Defined() { + return fbig.Zero(), errors.New("undefined state passed to Chain selector new weight") + } + //todo change view version + powerTableView := state.NewPowerTableView(c.state.PowerStateView(pStateID), c.state.FaultStateView(pStateID)) + networkPower, err := powerTableView.NetworkTotalPower(ctx) + if err != nil { + return fbig.Zero(), err + } + + log2P := int64(0) + if networkPower.GreaterThan(fbig.NewInt(0)) { + log2P = int64(networkPower.BitLen() - 1) + } else { + // Not really expect to be here ... + return fbig.Zero(), xerrors.Errorf("All power in the net is gone. You network might be disconnected, or the net is dead!") + } + + weight := ts.ParentWeight() + var out = new(big.Int).Set(weight.Int) + out.Add(out, big.NewInt(log2P<<8)) + + // (wFunction(totalPowerAtTipset(ts)) * sum(ts.blocks[].ElectionProof.WinCount) * wRatio_num * 2^8) / (e * wRatio_den) + + totalJ := int64(0) + for _, b := range ts.Blocks() { + totalJ += b.ElectionProof.WinCount + } + + eWeight := big.NewInt(log2P * constants.WRatioNum) + eWeight = eWeight.Lsh(eWeight, 8) + eWeight = eWeight.Mul(eWeight, new(big.Int).SetInt64(totalJ)) + eWeight = eWeight.Div(eWeight, big.NewInt(int64(uint64(constants.ExpectedLeadersPerEpoch)*constants.WRatioDen))) + + out = out.Add(out, eWeight) + + return fbig.Int{Int: out}, nil +} + +// IsHeavier returns true if tipset a is heavier than tipset b, and false +// vice versa. In the rare case where two tipsets have the same weight ties +// are broken by taking the tipset with more blocks. +func (c *ChainSelector) IsHeavier(ctx context.Context, a, b *types.TipSet) (bool, error) { + aW, err := c.Weight(ctx, a) + if err != nil { + return false, err + } + bW, err := c.Weight(ctx, b) + if err != nil { + return false, err + } + + heavier := aW.GreaterThan(bW) + if aW.Equals(bW) && !a.Equals(b) { + log.Errorw("weight draw", "currTs", a, "ts", b) + heavier = breakWeightTie(a, b) + } + + return heavier, nil +} + +// true if ts1 wins according to the filecoin tie-break rule +func breakWeightTie(ts1, ts2 *types.TipSet) bool { + s := len(ts1.Blocks()) + if s > len(ts2.Blocks()) { + s = len(ts2.Blocks()) + } + + // blocks are already sorted by ticket + for i := 0; i < s; i++ { + if ts1.Blocks()[i].Ticket.Less(ts2.Blocks()[i].Ticket) { + log.Infof("weight tie broken in favour of %s", ts1.Key()) + return true + } + } + + log.Infof("weight tie left unbroken, default to %s", ts2.Key()) + return false +} diff --git a/pkg/consensus/expected.go b/pkg/consensus/expected.go new file mode 100644 index 0000000000..f9718ac541 --- /dev/null +++ b/pkg/consensus/expected.go @@ -0,0 +1,233 @@ +package consensus + +import "C" +import ( + "context" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + "github.com/ipfs/go-cid" + blockstore "github.com/ipfs/go-ipfs-blockstore" + cbor "github.com/ipfs/go-ipld-cbor" + logging "github.com/ipfs/go-log" + "github.com/pkg/errors" + "go.opencensus.io/trace" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/fork" + appstate "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/pkg/vm/gas" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var ( + ErrExpensiveFork = errors.New("refusing explicit call due to state fork at epoch") + // ErrStateRootMismatch is returned when the computed state root doesn't match the expected result. + ErrStateRootMismatch = errors.New("blocks state root does not match computed result") + // ErrUnorderedTipSets is returned when weight and minticket are the same between two tipsets. + ErrUnorderedTipSets = errors.New("trying to order two identical tipsets") + // ErrReceiptRootMismatch is returned when the block's receipt root doesn't match the receipt root computed for the parent tipset. + ErrReceiptRootMismatch = errors.New("blocks receipt root does not match parent tip set") +) + +var logExpect = logging.Logger("consensus") + +const AllowableClockDriftSecs = uint64(1) + +// A Processor processes all the messages in a block or tip set. +type Processor interface { + // ProcessTipSet processes all messages in a tip set. + ProcessTipSet(context.Context, *types.TipSet, *types.TipSet, []types.BlockMessagesInfo, vm.VmOption) (cid.Cid, []types.MessageReceipt, error) + ProcessImplicitMessage(context.Context, *types.Message, vm.VmOption) (*vm.Ret, error) +} + +// TicketValidator validates that an input ticket is valid. +type TicketValidator interface { + IsValidTicket(ctx context.Context, base types.TipSetKey, entry *types.BeaconEntry, newPeriod bool, epoch abi.ChainEpoch, miner address.Address, workerSigner address.Address, ticket types.Ticket) error +} + +// Todo Delete view just use state.Viewer +// AsDefaultStateViewer adapts a state viewer to a power state viewer. +func AsDefaultStateViewer(v *appstate.Viewer) DefaultStateViewer { + return DefaultStateViewer{v} +} + +// DefaultStateViewer a state viewer to the power state view interface. +type DefaultStateViewer struct { + *appstate.Viewer +} + +// PowerStateView returns a power state view for a state root. +func (v *DefaultStateViewer) PowerStateView(root cid.Cid) appstate.PowerStateView { + return v.Viewer.StateView(root) +} + +// FaultStateView returns a fault state view for a state root. +func (v *DefaultStateViewer) FaultStateView(root cid.Cid) appstate.FaultStateView { + return v.Viewer.StateView(root) +} + +// StateViewer provides views into the Chain state. +type StateViewer interface { + PowerStateView(root cid.Cid) appstate.PowerStateView + FaultStateView(root cid.Cid) appstate.FaultStateView +} + +type chainReader interface { + GetTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) + GetHead() *types.TipSet + StateView(ctx context.Context, ts *types.TipSet) (*appstate.View, error) + GetTipSetStateRoot(context.Context, *types.TipSet) (cid.Cid, error) + GetTipSetReceiptsRoot(context.Context, *types.TipSet) (cid.Cid, error) + GetGenesisBlock(context.Context) (*types.BlockHeader, error) + GetLatestBeaconEntry(context.Context, *types.TipSet) (*types.BeaconEntry, error) + GetTipSetByHeight(context.Context, *types.TipSet, abi.ChainEpoch, bool) (*types.TipSet, error) + GetCirculatingSupplyDetailed(context.Context, abi.ChainEpoch, tree.Tree) (types.CirculatingSupply, error) + GetLookbackTipSetForRound(ctx context.Context, ts *types.TipSet, round abi.ChainEpoch, version network.Version) (*types.TipSet, cid.Cid, error) + GetTipsetMetadata(context.Context, *types.TipSet) (*chain.TipSetMetadata, error) + PutTipSetMetadata(context.Context, *chain.TipSetMetadata) error +} + +var _ chainReader = (*chain.Store)(nil) + +// Expected implements expected consensus. +type Expected struct { + // cstore is used for loading state trees during message running. + cstore cbor.IpldStore + + // bstore contains data referenced by actors within the state + // during message running. Additionally bstore is used for + // accessing the power table. + bstore blockstore.Blockstore + + // message store for message read/write + messageStore *chain.MessageStore + + // chainState is a reference to the current Chain state + chainState chainReader + + // processor is what we use to process messages and pay rewards + processor Processor + + // calculate chain randomness ticket/beacon + rnd ChainRandomness + + // fork for vm process and block validator + fork fork.IFork + + // gas price for vm + gasPirceSchedule *gas.PricesSchedule + + // circulate supply calculator for vm + circulatingSupplyCalculator chain.ICirculatingSupplyCalcualtor + + // systemcall for vm + syscallsImpl vm.SyscallsImpl + + // block validator before process tipset + blockValidator *BlockValidator +} + + + +// NewExpected is the constructor for the Expected consenus.Protocol module. +func NewExpected(cs cbor.IpldStore, + bs blockstore.Blockstore, + bt time.Duration, + chainState *chain.Store, + rnd ChainRandomness, + messageStore *chain.MessageStore, + fork fork.IFork, + config *config.NetworkParamsConfig, + gasPirceSchedule *gas.PricesSchedule, + blockValidator *BlockValidator, + syscalls vm.SyscallsImpl, + circulatingSupplyCalculator chain.ICirculatingSupplyCalcualtor, +) *Expected { + processor := NewDefaultProcessor(syscalls) + return &Expected{ + processor: processor, + syscallsImpl: syscalls, + cstore: cs, + bstore: bs, + chainState: chainState, + messageStore: messageStore, + rnd: rnd, + fork: fork, + gasPirceSchedule: gasPirceSchedule, + blockValidator: blockValidator, + circulatingSupplyCalculator: circulatingSupplyCalculator, + } +} + +// RunStateTransition applies the messages in a tipset to a state, and persists that new state. +// It errors if the tipset was not mined according to the EC rules, or if any of the messages +// in the tipset results in an error. +func (c *Expected) RunStateTransition(ctx context.Context, ts *types.TipSet) (cid.Cid, cid.Cid, error) { + begin := time.Now() + defer func() { + logExpect.Infof("expected.runstatetransition(height:%d, blocks:%d), cost time = %.4f(s)", + ts.Height(), ts.Len(), time.Since(begin).Seconds()) + }() + ctx, span := trace.StartSpan(ctx, "Expected.innerRunStateTransition") + defer span.End() + span.AddAttributes(trace.StringAttribute("blocks", ts.String())) + span.AddAttributes(trace.Int64Attribute("height", int64(ts.Height()))) + blockMessageInfo, err := c.messageStore.LoadTipSetMessage(ctx, ts) + if err != nil { + return cid.Undef, cid.Undef, err + } + // process tipset + var pts *types.TipSet + if ts.Height() == 0 { + // NB: This is here because the process that executes blocks requires that the + // block miner reference a valid miner in the state tree. Unless we create some + // magical genesis miner, this won't work properly, so we short circuit here + // This avoids the question of 'who gets paid the genesis block reward' + return ts.Blocks()[0].ParentStateRoot, ts.Blocks()[0].ParentMessageReceipts, nil + } else if ts.Height() > 0 { + parent := ts.Parents() + if pts, err = c.chainState.GetTipSet(ctx, parent); err != nil { + return cid.Undef, cid.Undef, err + } + } else { + return cid.Undef, cid.Undef, nil + } + + vmOption := vm.VmOption{ + CircSupplyCalculator: func(ctx context.Context, epoch abi.ChainEpoch, tree tree.Tree) (abi.TokenAmount, error) { + dertail, err := c.chainState.GetCirculatingSupplyDetailed(ctx, epoch, tree) + if err != nil { + return abi.TokenAmount{}, err + } + return dertail.FilCirculating, nil + }, + LookbackStateGetter: vmcontext.LookbackStateGetterForTipset(ctx, c.chainState, c.fork, ts), + NtwkVersionGetter: c.fork.GetNtwkVersion, + Rnd: NewHeadRandomness(c.rnd, ts.Key()), + BaseFee: ts.At(0).ParentBaseFee, + Fork: c.fork, + Epoch: ts.At(0).Height, + GasPriceSchedule: c.gasPirceSchedule, + Bsstore: c.bstore, + PRoot: ts.At(0).ParentStateRoot, + SysCallsImpl: c.syscallsImpl, + } + root, receipts, err := c.processor.ProcessTipSet(ctx, pts, ts, blockMessageInfo, vmOption) + if err != nil { + return cid.Undef, cid.Undef, errors.Wrap(err, "error validating tipset") + } + receiptCid, err := c.messageStore.StoreReceipts(ctx, receipts) + if err != nil { + return cid.Undef, cid.Undef, xerrors.Errorf("failed to save receipt: %v", err) + } + + return root, receiptCid, nil +} diff --git a/pkg/consensus/head_randomness.go b/pkg/consensus/head_randomness.go new file mode 100644 index 0000000000..c16a7c4827 --- /dev/null +++ b/pkg/consensus/head_randomness.go @@ -0,0 +1,37 @@ +package consensus + +import ( + "context" + + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-state-types/abi" + acrypto "github.com/filecoin-project/go-state-types/crypto" +) + +//ChainRandomness define randomness method in filecoin +type ChainRandomness interface { + ChainGetRandomnessFromBeacon(ctx context.Context, key types.TipSetKey, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) + ChainGetRandomnessFromTickets(ctx context.Context, tsk types.TipSetKey, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) +} + +var _ vmcontext.HeadChainRandomness = (*HeadRandomness)(nil) + +// A Chain randomness source with a fixed Head tipset key. +type HeadRandomness struct { + chain ChainRandomness + head types.TipSetKey +} + +func NewHeadRandomness(chain ChainRandomness, head types.TipSetKey) *HeadRandomness { + return &HeadRandomness{chain: chain, head: head} +} + +func (h HeadRandomness) ChainGetRandomnessFromBeacon(ctx context.Context, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + return h.chain.ChainGetRandomnessFromBeacon(ctx, h.head, personalization, randEpoch, entropy) +} + +func (h HeadRandomness) ChainGetRandomnessFromTickets(ctx context.Context, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + return h.chain.ChainGetRandomnessFromTickets(ctx, h.head, personalization, randEpoch, entropy) +} diff --git a/pkg/consensus/message_validator.go b/pkg/consensus/message_validator.go new file mode 100644 index 0000000000..c1f7e1f0c7 --- /dev/null +++ b/pkg/consensus/message_validator.go @@ -0,0 +1,168 @@ +package consensus + +import ( + "bytes" + "context" + "fmt" + + "github.com/filecoin-project/go-state-types/big" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/metrics" + "github.com/filecoin-project/venus/pkg/state" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var invReceiverUndefCt *metrics.Int64Counter +var invSenderUndefCt *metrics.Int64Counter +var invValueAboveMaxCt *metrics.Int64Counter +var invParamsNilCt *metrics.Int64Counter // nolint +var invGasPriceNegativeCt *metrics.Int64Counter +var invGasBelowMinimumCt *metrics.Int64Counter +var invNegativeValueCt *metrics.Int64Counter +var invGasAboveBlockLimitCt *metrics.Int64Counter + +// The maximum allowed message value. +var msgMaxValue = types.FromFil(2e9) + +// These gas cost values must match those in vm/gas. +// TODO: Look up gas costs from the same place the VM gets them, keyed by epoch. https://github.com/filecoin-project/venus/issues/3955 +const onChainMessageBase = int64(0) +const onChainMessagePerByte = int64(2) + +func init() { + invReceiverUndefCt = metrics.NewInt64Counter("consensus/msg_undef_receiver", "Count of") + invSenderUndefCt = metrics.NewInt64Counter("consensus/msg_undef_sender", "Count of") + invValueAboveMaxCt = metrics.NewInt64Counter("consensus/msg_value_max", "Count of") + invParamsNilCt = metrics.NewInt64Counter("consensus/msg_params_nil", "Count of") + invGasPriceNegativeCt = metrics.NewInt64Counter("consensus/msg_gasprice_negative", "Count of") + invGasBelowMinimumCt = metrics.NewInt64Counter("consensus/msg_gaslimit_min", "Count of") + invNegativeValueCt = metrics.NewInt64Counter("consensus/msg_value_negative", "Count of invalid negative messages with negative value") + invGasAboveBlockLimitCt = metrics.NewInt64Counter("consensus/msg_gaslimit_max", "Count of invalid messages with gas above block limit") +} + +// DefaultMessageSyntaxValidator checks basic conditions independent of current state +type DefaultMessageSyntaxValidator struct{} + +func NewMessageSyntaxValidator() *DefaultMessageSyntaxValidator { + return &DefaultMessageSyntaxValidator{} +} + +// ValidateSignedMessageSyntax validates signed message syntax and state-independent invariants. +// Used for incoming messages over pubsub and secp messages included in blocks. +func (v *DefaultMessageSyntaxValidator) ValidateSignedMessageSyntax(ctx context.Context, smsg *types.SignedMessage) error { + msg := &smsg.Message + var msgLen int + if smsg.Signature.Type == crypto.SigTypeBLS { + buf := new(bytes.Buffer) + err := smsg.Message.MarshalCBOR(buf) + if err != nil { + return errors.Wrapf(err, "failed to calculate message size") + } + msgLen = buf.Len() + } else { + buf := new(bytes.Buffer) + err := smsg.MarshalCBOR(buf) + if err != nil { + return errors.Wrapf(err, "failed to calculate message size") + } + msgLen = buf.Len() + } + return v.validateMessageSyntaxShared(ctx, msg, int64(msgLen)) +} + +// ValidateUnsignedMessageSyntax validates unisigned message syntax and state-independent invariants. +// Used for bls messages included in blocks. +func (v *DefaultMessageSyntaxValidator) ValidateUnsignedMessageSyntax(ctx context.Context, msg *types.Message) error { + buf := new(bytes.Buffer) + err := msg.MarshalCBOR(buf) + if err != nil { + return errors.Wrapf(err, "failed to calculate message size") + } + return v.validateMessageSyntaxShared(ctx, msg, int64(buf.Len())) +} + +func (v *DefaultMessageSyntaxValidator) validateMessageSyntaxShared(ctx context.Context, msg *types.Message, msgLen int64) error { + if msg.Version != types.MessageVersion { + return fmt.Errorf("version %d, expected %d", msg.Version, types.MessageVersion) + } + + if msg.To.Empty() { + invReceiverUndefCt.Inc(ctx, 1) + return fmt.Errorf("empty receiver: %s", msg) + } + if msg.From.Empty() { + invSenderUndefCt.Inc(ctx, 1) + return fmt.Errorf("empty sender: %s", msg) + } + // The spec calls for validating a non-negative call sequence num, but by + // the time it's decoded into a uint64 the check is already passed + + if msg.Value.LessThan(big.Zero()) { + invNegativeValueCt.Inc(ctx, 1) + return fmt.Errorf("negative value %s: %s", msg.Value, msg) + } + if msg.Value.GreaterThan(msgMaxValue) { + invValueAboveMaxCt.Inc(ctx, 1) + return fmt.Errorf("value %s exceeds max %s: %s", msg.Value, msgMaxValue, msg) + } + // The spec calls for validating a non-negative method num, but by the + // time it's decoded into a uint64 the check is already passed + + if msg.GasFeeCap.LessThan(types.ZeroFIL) { + invGasPriceNegativeCt.Inc(ctx, 1) + return fmt.Errorf("negative gas price %s: %s", msg.GasFeeCap, msg) + } + // The minimum gas limit ensures the sender has enough balance to pay for inclusion of the message in the Chain + // *at all*. Without this, a message could hit out-of-gas but the sender pay nothing. + // NOTE(anorth): this check has been moved to execution time, and the miner is penalized for including + // such a message. We can probably remove this. + minMsgGas := onChainMessageBase + onChainMessagePerByte*msgLen + if msg.GasLimit < minMsgGas { + invGasBelowMinimumCt.Inc(ctx, 1) + return fmt.Errorf("gas limit %d below minimum %d to cover message size: %s", msg.GasLimit, minMsgGas, msg) + } + if msg.GasLimit > constants.BlockGasLimit { + invGasAboveBlockLimitCt.Inc(ctx, 1) + return fmt.Errorf("gas limit %d exceeds block limit %d: %s", msg.GasLimit, constants.BlockGasLimit, msg) + } + return nil +} + +// MessageSignatureValidator validates message signatures +type MessageSignatureValidator struct { + api signatureValidatorAPI +} + +// signatureValidatorAPI allows the validator to access state needed for signature checking +type signatureValidatorAPI interface { + GetHead() *types.TipSet + GetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) + AccountView(ts *types.TipSet) (state.AccountView, error) +} + +func NewMessageSignatureValidator(api signatureValidatorAPI) *MessageSignatureValidator { + return &MessageSignatureValidator{ + api: api, + } +} + +// Validate validates the signed message signature. Errors probably mean the +// validation failed, but possibly indicate a failure to retrieve state. +func (v *MessageSignatureValidator) Validate(ctx context.Context, smsg *types.SignedMessage) error { + head := v.api.GetHead() + view, err := v.api.AccountView(head) + if err != nil { + return errors.Wrapf(err, "failed to load state at %v", head) + } + + sigValidator := state.NewSignatureValidator(view) + + // ensure message is properly signed + if err := sigValidator.ValidateMessageSignature(ctx, smsg); err != nil { + return errors.Wrap(err, fmt.Errorf("invalid signature by sender over message data").Error()) + } + return nil +} diff --git a/pkg/consensus/message_validator_test.go b/pkg/consensus/message_validator_test.go new file mode 100644 index 0000000000..b08bbea75c --- /dev/null +++ b/pkg/consensus/message_validator_test.go @@ -0,0 +1,168 @@ +package consensus_test + +import ( + "context" + "fmt" + "testing" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/testhelpers" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/specs-actors/actors/builtin" + + bls "github.com/filecoin-project/filecoin-ffi" + "github.com/filecoin-project/venus/pkg/consensus" + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" + "github.com/filecoin-project/venus/pkg/state" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +var keys = testhelpers.MustGenerateKeyInfo(2, 42) +var addresses = make([]address.Address, len(keys)) + +var methodID = abi.MethodNum(21231) + +func init() { + for i, k := range keys { + addr, _ := k.Address() + addresses[i] = addr + } +} + +func TestBLSSignatureValidationConfiguration(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + // create bls address + pubKey := bls.PrivateKeyPublicKey(bls.PrivateKeyGenerate()) + from, err := address.NewBLSAddress(pubKey[:]) + require.NoError(t, err) + + msg := testhelpers.NewMeteredMessage(from, addresses[1], 0, types.ZeroFIL, methodID, []byte("params"), types.NewGasFeeCap(1), types.NewGasPremium(1), 300) + mmsgCid := msg.Cid() + + var signer = testhelpers.NewMockSigner(keys) + signer.AddrKeyInfo[msg.From] = keys[0] + sig, err := signer.SignBytes(ctx, mmsgCid.Bytes(), msg.From) + require.NoError(t, err) + unsigned := &types.SignedMessage{Message: *msg, Signature: *sig} + + actor := newActor(t, 1000, 0) + + t.Run("syntax validator does not ignore missing signature", func(t *testing.T) { + api := NewMockIngestionValidatorAPI() + api.ActorAddr = from + api.Actor = actor + + validator := consensus.NewMessageSignatureValidator(api) + + err := validator.Validate(ctx, unsigned) + require.Error(t, err) + assert.Contains(t, err.Error(), "invalid signature") + }) +} + +func TestMessageSyntaxValidator(t *testing.T) { + tf.UnitTest(t) + var signer = testhelpers.NewMockSigner(keys) + alice := addresses[0] + bob := addresses[1] + + validator := consensus.NewMessageSyntaxValidator() + ctx := context.Background() + + t.Run("Actor not found is not an error", func(t *testing.T) { + msg, err := testhelpers.NewSignedMessage(ctx, *newMessage(t, bob, alice, 0, 0, 1, 5000), signer) + require.NoError(t, err) + assert.NoError(t, validator.ValidateSignedMessageSyntax(ctx, msg)) + }) + + t.Run("self send passes", func(t *testing.T) { + msg, err := testhelpers.NewSignedMessage(ctx, *newMessage(t, alice, alice, 100, 5, 1, 5000), signer) + require.NoError(t, err) + assert.NoError(t, validator.ValidateSignedMessageSyntax(ctx, msg), "self") + }) + + t.Run("negative value fails", func(t *testing.T) { + msg, err := testhelpers.NewSignedMessage(ctx, *newMessage(t, alice, alice, 100, -5, 1, 5000), signer) + require.NoError(t, err) + assert.Errorf(t, validator.ValidateSignedMessageSyntax(ctx, msg), "negative") + }) + + t.Run("block gas limit fails", func(t *testing.T) { + msg, err := testhelpers.NewSignedMessage(ctx, *newMessage(t, alice, bob, 100, 5, 1, constants.BlockGasLimit+1), signer) + require.NoError(t, err) + assert.Errorf(t, validator.ValidateSignedMessageSyntax(ctx, msg), "block limit") + }) + +} + +func newActor(t *testing.T, balanceAF int, nonce uint64) *types.Actor { + actor := types.NewActor(builtin.AccountActorCodeID, abi.NewTokenAmount(int64(balanceAF)), cid.Undef) + actor.Nonce = nonce + return actor +} + +func newMessage(t *testing.T, from, to address.Address, nonce uint64, valueAF int, + gasPrice int64, gasLimit int64) *types.Message { + val, err := types.ParseFIL(fmt.Sprintf("%d", valueAF)) + require.Nil(t, err, "invalid attofil") + return testhelpers.NewMeteredMessage( + from, + to, + nonce, + abi.TokenAmount{Int: val.Int}, + methodID, + []byte("params"), + types.NewGasFeeCap(gasPrice), + types.NewGasPremium(1), + gasLimit, + ) +} + +// FakeIngestionValidatorAPI provides a latest state +type FakeIngestionValidatorAPI struct { + Block *types.BlockHeader + ActorAddr address.Address + Actor *types.Actor +} + +// NewMockIngestionValidatorAPI creates a new FakeIngestionValidatorAPI. +func NewMockIngestionValidatorAPI() *FakeIngestionValidatorAPI { + block := mockBlock() + block.Height = 10 + return &FakeIngestionValidatorAPI{ + Actor: &types.Actor{}, + Block: block, + } +} + +func (api *FakeIngestionValidatorAPI) GetHead() *types.TipSet { + ts, _ := types.NewTipSet([]*types.BlockHeader{api.Block}) + return ts +} + +func (api *FakeIngestionValidatorAPI) GetTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) { + return types.NewTipSet([]*types.BlockHeader{api.Block}) +} + +func (api *FakeIngestionValidatorAPI) GetActorAt(ctx context.Context, key *types.TipSet, a address.Address) (*types.Actor, error) { + if a == api.ActorAddr { + return api.Actor, nil + } + return &types.Actor{ + Balance: abi.NewTokenAmount(0), + }, nil +} + +func (api *FakeIngestionValidatorAPI) AccountView(ts *types.TipSet) (state.AccountView, error) { + return &state.FakeStateView{}, nil +} diff --git a/pkg/consensus/processor.go b/pkg/consensus/processor.go new file mode 100644 index 0000000000..bef5f6539c --- /dev/null +++ b/pkg/consensus/processor.go @@ -0,0 +1,86 @@ +package consensus + +import ( + "context" + + "github.com/ipfs/go-cid" + "go.opencensus.io/trace" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/metrics/tracing" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/venus/pkg/vm" +) + +// ApplicationResult contains the result of successfully applying one message. +// ExecutionError might be set and the message can still be applied successfully. +// See ApplyMessage() for details. +type ApplicationResult struct { + Receipt *types.MessageReceipt + ExecutionError error +} + +// ApplyMessageResult is the result of applying a single message. +type ApplyMessageResult struct { + ApplicationResult // Application-level result, if error is nil. + Failure error // Failure to apply the message + FailureIsPermanent bool // Whether failure is permanent, has no chance of succeeding later. +} + +// DefaultProcessor handles all block processing. +type DefaultProcessor struct { + actors vm.ActorCodeLoader + syscalls vm.SyscallsImpl +} + +var _ Processor = (*DefaultProcessor)(nil) + +// NewDefaultProcessor creates a default processor from the given state tree and vms. +func NewDefaultProcessor(syscalls vm.SyscallsImpl) *DefaultProcessor { + return NewConfiguredProcessor(vm.DefaultActors, syscalls) +} + +// NewConfiguredProcessor creates a default processor with custom validation and rewards. +func NewConfiguredProcessor(actors vm.ActorCodeLoader, syscalls vm.SyscallsImpl) *DefaultProcessor { + return &DefaultProcessor{ + actors: actors, + syscalls: syscalls, + } +} + +// ProcessTipSet computes the state transition specified by the messages in all blocks in a TipSet. +func (p *DefaultProcessor) ProcessTipSet(ctx context.Context, + parent, ts *types.TipSet, + msgs []types.BlockMessagesInfo, + vmOption vm.VmOption, +) (cid.Cid, []types.MessageReceipt, error) { + _, span := trace.StartSpan(ctx, "DefaultProcessor.ProcessTipSet") + span.AddAttributes(trace.StringAttribute("tipset", ts.String())) + + epoch := ts.Height() + var parentEpoch abi.ChainEpoch + if parent.Defined() { + parentEpoch = parent.Height() + } + + v, err := vm.NewVM(ctx, vmOption) + if err != nil { + return cid.Undef, nil, err + } + + return v.ApplyTipSetMessages(msgs, ts, parentEpoch, epoch, nil) +} + +//ProcessImplicitMessage compute the state of specify message but this functions skip value, gas,check +func (p *DefaultProcessor) ProcessImplicitMessage(ctx context.Context, msg *types.Message, vmOption vm.VmOption) (ret *vm.Ret, err error) { + ctx, span := trace.StartSpan(ctx, "DefaultProcessor.ProcessImplicitMessage") + span.AddAttributes(trace.StringAttribute("message", msg.String())) + defer tracing.AddErrorEndSpan(ctx, span, &err) + + v, err := vm.NewVM(ctx, vmOption) + if err != nil { + return nil, err + } + return v.ApplyImplicitMessage(msg) +} diff --git a/pkg/consensus/proof_verifier.go b/pkg/consensus/proof_verifier.go new file mode 100644 index 0000000000..e47ef85831 --- /dev/null +++ b/pkg/consensus/proof_verifier.go @@ -0,0 +1,56 @@ +package consensus + +import ( + "context" + + "go.opencensus.io/trace" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" + + proof5 "github.com/filecoin-project/specs-actors/v5/actors/runtime/proof" + proof7 "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" + + "github.com/filecoin-project/venus/pkg/constants" + crypto2 "github.com/filecoin-project/venus/pkg/crypto" +) + +// Interface to PoSt verification, modify by force EPoStVerifier -> ProofVerifier +type ProofVerifier interface { + VerifySeal(info proof5.SealVerifyInfo) (bool, error) + VerifyAggregateSeals(aggregate proof5.AggregateSealVerifyProofAndInfos) (bool, error) + VerifyReplicaUpdate(update proof7.ReplicaUpdateInfo) (bool, error) + VerifyWinningPoSt(ctx context.Context, info proof5.WinningPoStVerifyInfo) (bool, error) + VerifyWindowPoSt(ctx context.Context, info proof5.WindowPoStVerifyInfo) (bool, error) + GenerateWinningPoStSectorChallenge(ctx context.Context, proofType abi.RegisteredPoStProof, minerID abi.ActorID, randomness abi.PoStRandomness, eligibleSectorCount uint64) ([]uint64, error) +} + +// SignFunc common interface for sign +type SignFunc func(context.Context, address.Address, []byte) (*crypto.Signature, error) + +// VerifyVRF checkout block vrf value +func VerifyVRF(ctx context.Context, worker address.Address, vrfBase, vrfproof []byte) error { + _, span := trace.StartSpan(ctx, "VerifyVRF") + defer span.End() + + sig := &crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: vrfproof, + } + + if err := crypto2.Verify(sig, worker, vrfBase); err != nil { + return xerrors.Errorf("vrf was invalid: %w", err) + } + + return nil +} + +//VerifyElectionPoStVRF verify election post value in block +func VerifyElectionPoStVRF(ctx context.Context, worker address.Address, rand []byte, evrf []byte) error { + if constants.InsecurePoStValidation { + return nil + } + return VerifyVRF(ctx, worker, rand, evrf) +} diff --git a/pkg/consensus/proof_verifier_mock.go b/pkg/consensus/proof_verifier_mock.go new file mode 100644 index 0000000000..1a712d315b --- /dev/null +++ b/pkg/consensus/proof_verifier_mock.go @@ -0,0 +1,40 @@ +package consensus + +import ( + "context" + + "github.com/filecoin-project/go-state-types/abi" + + proof5 "github.com/filecoin-project/specs-actors/v5/actors/runtime/proof" + proof7 "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" + + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" +) + +type genFakeVerifier struct{} + +var _ ffiwrapper.Verifier = (*genFakeVerifier)(nil) + +func (m genFakeVerifier) VerifySeal(svi proof5.SealVerifyInfo) (bool, error) { + return true, nil +} + +func (m genFakeVerifier) VerifyAggregateSeals(aggregate proof5.AggregateSealVerifyProofAndInfos) (bool, error) { + panic("implement me") +} + +func (m genFakeVerifier) VerifyReplicaUpdate(update proof7.ReplicaUpdateInfo) (bool, error) { + panic("not supported") +} + +func (m genFakeVerifier) VerifyWinningPoSt(ctx context.Context, info proof5.WinningPoStVerifyInfo) (bool, error) { + panic("not supported") +} + +func (m genFakeVerifier) VerifyWindowPoSt(ctx context.Context, info proof5.WindowPoStVerifyInfo) (bool, error) { + panic("not supported") +} + +func (m genFakeVerifier) GenerateWinningPoStSectorChallenge(ctx context.Context, proof abi.RegisteredPoStProof, id abi.ActorID, randomness abi.PoStRandomness, u uint64) ([]uint64, error) { + panic("not supported") +} diff --git a/pkg/consensus/protocol.go b/pkg/consensus/protocol.go new file mode 100644 index 0000000000..612878f864 --- /dev/null +++ b/pkg/consensus/protocol.go @@ -0,0 +1,40 @@ +package consensus + +// This interface is (mostly) stateless. All of its methods are +// pure functions that only depend on their inputs. + +// Note: state does creep in through the cbor and block stores used to keep state tree and +// actor storage data in the Expected implementation. However those stores +// are global to the filecoin node so accessing the correct state is simple. +// Furthermore these stores are providing content addressed values. +// The output of these interface functions does not change based on the store state +// except for errors in the case the stores do not have a mapping. +import ( + "context" + + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" +) + +// Protocol is an interface defining a blockchain consensus protocol. The +// methods here were arrived at after significant work fitting consensus into +// the system and the implementation level. The method set is not necessarily +// the most theoretically obvious or pleasing and should not be considered +// finalized. +/* +type Protocol interface { + StateTransformer + // Call compute message result of specify message + Call(ctx context.Context, msg *types.Message, ts *types.TipSet) (*vm.Ret, error) + + // CallWithGas compute message result of specify message base on messages in mpool + CallWithGas(ctx context.Context, msg *types.Message, priorMsgs []types.ChainMsg, ts *types.TipSet) (*vm.Ret, error) +} +*/ + +type StateTransformer interface { + // RunStateTransition returns the state root CID resulting from applying the input ts to the + // prior `stateID`. It returns an error if the transition is invalid. + // RunStateTransition(ctx context.Context, ts *types.TipSet) (root cid.Cid, receipt cid.Cid, err error) + RunStateTransition(ctx context.Context, ts *types.TipSet) (root cid.Cid, receipt cid.Cid, err error) +} diff --git a/pkg/consensus/testing.go b/pkg/consensus/testing.go new file mode 100644 index 0000000000..1e0a8d9145 --- /dev/null +++ b/pkg/consensus/testing.go @@ -0,0 +1,136 @@ +package consensus + +import ( + "context" + "fmt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + acrypto "github.com/filecoin-project/go-state-types/crypto" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/state" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// RequireNewTipSet instantiates and returns a new tipset of the given blocks +// and requires that the setup validation succeed. +func RequireNewTipSet(require *require.Assertions, blks ...*types.BlockHeader) *types.TipSet { + ts, err := types.NewTipSet(blks) + require.NoError(err) + return ts +} + +// FakeConsensusStateViewer is a fake power state viewer. +type FakeConsensusStateViewer struct { + Views map[cid.Cid]*state.FakeStateView +} + +// PowerStateView returns the state view for a root. +func (f *FakeConsensusStateViewer) PowerStateView(root cid.Cid) state.PowerStateView { + return f.Views[root] +} + +// FaultStateView returns the state view for a root. +func (f *FakeConsensusStateViewer) FaultStateView(root cid.Cid) state.FaultStateView { + return f.Views[root] +} + +// FakeMessageValidator is a validator that doesn't validate to simplify message creation in tests. +type FakeMessageValidator struct{} + +func (mv *FakeMessageValidator) ValidateSignedMessageSyntax(ctx context.Context, smsg *types.SignedMessage) error { + return nil +} + +func (mv *FakeMessageValidator) ValidateUnsignedMessageSyntax(ctx context.Context, msg *types.Message) error { + return nil +} + +// FakeTicketMachine generates fake tickets and verifies all tickets +type FakeTicketMachine struct{} + +// MakeTicket returns a fake ticket +func (ftm *FakeTicketMachine) MakeTicket(ctx context.Context, base types.TipSetKey, epoch abi.ChainEpoch, miner address.Address, entry *types.BeaconEntry, newPeriod bool, worker address.Address, signer types.Signer) (types.Ticket, error) { + return *MakeFakeTicketForTest(), nil +} + +// IsValidTicket always returns true +func (ftm *FakeTicketMachine) IsValidTicket(ctx context.Context, base types.TipSetKey, entry *types.BeaconEntry, newPeriod bool, + epoch abi.ChainEpoch, miner address.Address, workerSigner address.Address, ticket types.Ticket) error { + return nil +} + +// FailingTicketValidator marks all tickets as invalid +type FailingTicketValidator struct{} + +// IsValidTicket always returns false +func (ftv *FailingTicketValidator) IsValidTicket(ctx context.Context, base types.TipSetKey, entry *types.BeaconEntry, newPeriod bool, + epoch abi.ChainEpoch, miner address.Address, workerSigner address.Address, ticket types.Ticket) error { + return fmt.Errorf("invalid ticket") +} + +// MakeFakeTicketForTest creates a fake ticket +func MakeFakeTicketForTest() *types.Ticket { + val := make([]byte, 65) + val[0] = 200 + return &types.Ticket{ + VRFProof: val[:], + } +} + +// MakeFakeVRFProofForTest creates a fake election proof +func MakeFakeVRFProofForTest() []byte { + proof := make([]byte, 65) + proof[0] = 42 + return proof +} + +// MakeFakePoStForTest creates a fake post +//func MakeFakePoStsForTest() []block.PoStProof { +// return []block.PoStProof{{ +// RegisteredProof: constants.DevRegisteredWinningPoStProof, +// ProofBytes: []byte{0xe}, +// }} +//} +// +//// NFakeSectorInfos returns numSectors fake sector infos +//func RequireFakeSectorInfos(t *testing.T, numSectors uint64) []abi.SectorInfo { +// var infos []abi.SectorInfo +// for i := uint64(0); i < numSectors; i++ { +// infos = append(infos, abi.SectorInfo{ +// RegisteredProof: constants.DevRegisteredSealProof, +// SectorNumber: abi.SectorNumber(i), +// SealedCID: types.CidFromString(t, fmt.Sprintf("fake-sector-%d", i)), +// }) +// } +// +// return infos +//} + +///// Sampler ///// + +// FakeChainRandomness generates deterministic values that are a function of a seed and the provided +// tag, epoch, and entropy (but *not* the Chain Head key). +type FakeChainRandomness struct { + Seed uint +} + +func (s *FakeChainRandomness) GetChainRandomness(ctx context.Context, tsk types.TipSetKey, pers acrypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte, _ bool) ([]byte, error) { + return []byte(fmt.Sprintf("s=%d,e=%d,t=%d,p=%s", s.Seed, round, pers, string(entropy))), nil +} + +func (s *FakeChainRandomness) GetBeaconRandomness(ctx context.Context, tsk types.TipSetKey, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, _ bool) (abi.Randomness, error) { + return []byte(""), nil +} + +type FakeSampler struct { + Seed uint +} + +func (s *FakeSampler) SampleTicket(_ context.Context, _ types.TipSetKey, epoch abi.ChainEpoch, _ bool) (types.Ticket, error) { + return types.Ticket{ + VRFProof: []byte(fmt.Sprintf("s=%d,e=%d", s.Seed, epoch)), + }, nil +} diff --git a/pkg/consensus/testing_poster.go b/pkg/consensus/testing_poster.go new file mode 100644 index 0000000000..4539edcf03 --- /dev/null +++ b/pkg/consensus/testing_poster.go @@ -0,0 +1,27 @@ +package consensus + +import ( + "context" + + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" +) + +// TestElectionPoster generates and verifies electoin PoSts +type TestElectionPoster struct{} + +//var _ EPoStVerifier = new(TestElectionPoster) +//var _ postgenerator.PoStGenerator = new(TestElectionPoster) +// + +func (ep *TestElectionPoster) GenerateWinningPoSt(ctx context.Context, + minerID abi.ActorID, + sectorInfo []builtin.SectorInfo, + randomness abi.PoStRandomness) ([]builtin.PoStProof, error) { + return []builtin.PoStProof{{ + PoStProof: constants.DevRegisteredWinningPoStProof, + ProofBytes: []byte{0xe}, + }}, nil +} diff --git a/pkg/consensus/ticket.go b/pkg/consensus/ticket.go new file mode 100644 index 0000000000..a6d036178e --- /dev/null +++ b/pkg/consensus/ticket.go @@ -0,0 +1,86 @@ +package consensus + +import ( + "bytes" + "context" + + "github.com/filecoin-project/venus/pkg/chain" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + acrypto "github.com/filecoin-project/go-state-types/crypto" + "github.com/minio/blake2b-simd" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/crypto" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type ChainSampler interface { + SampleTicket(ctx context.Context, head types.TipSetKey, epoch abi.ChainEpoch, lookback bool) (types.Ticket, error) +} + +type tipsetLoader interface { + GetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) +} + +// TicketMachine uses a VRF and VDF to generate deterministic, unpredictable +// and time delayed tickets and validates these tickets. +type TicketMachine struct { + tipsetLoader tipsetLoader +} + +func NewTicketMachine(tipsetLoader tipsetLoader) *TicketMachine { + return &TicketMachine{tipsetLoader: tipsetLoader} +} + +// MakeTicket creates a new ticket from a Chain and target epoch by running a verifiable +// randomness function on the prior ticket. +func (tm TicketMachine) MakeTicket(ctx context.Context, base types.TipSetKey, epoch abi.ChainEpoch, miner address.Address, entry *types.BeaconEntry, newPeriod bool, worker address.Address, signer types.Signer) (types.Ticket, error) { + randomness, err := tm.ticketVRFRandomness(ctx, base, entry, newPeriod, miner, epoch) + if err != nil { + return types.Ticket{}, errors.Wrap(err, "failed to generate ticket randomness") + } + vrfProof, err := signer.SignBytes(ctx, randomness, worker) + if err != nil { + return types.Ticket{}, errors.Wrap(err, "failed to sign election post randomness") + } + return types.Ticket{ + VRFProof: vrfProof.Data, + }, nil +} + +// IsValidTicket verifies that the ticket's proof of randomness is valid with respect to its parent. +func (tm TicketMachine) IsValidTicket(ctx context.Context, base types.TipSetKey, entry *types.BeaconEntry, bSmokeHeight bool, + epoch abi.ChainEpoch, miner address.Address, workerSigner address.Address, ticket types.Ticket) error { + randomness, err := tm.ticketVRFRandomness(ctx, base, entry, bSmokeHeight, miner, epoch) + if err != nil { + return errors.Wrap(err, "failed to generate ticket randomness") + } + + return crypto.Verify(&crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: ticket.VRFProof, + }, workerSigner, randomness) +} + +func (tm TicketMachine) ticketVRFRandomness(ctx context.Context, base types.TipSetKey, entry *types.BeaconEntry, bSmokeHeight bool, miner address.Address, epoch abi.ChainEpoch) (abi.Randomness, error) { + entropyBuf := new(bytes.Buffer) + err := miner.MarshalCBOR(entropyBuf) + if err != nil { + return nil, errors.Wrapf(err, "failed to encode miner entropy") + } + + if bSmokeHeight { // todo + ts, err := tm.tipsetLoader.GetTipSet(ctx, base) + if err != nil { + return nil, err + } + _, err = entropyBuf.Write(ts.MinTicket().VRFProof) + if err != nil { + return nil, err + } + } + seed := blake2b.Sum256(entry.Data) + return chain.BlendEntropy(acrypto.DomainSeparationTag_TicketProduction, seed[:], epoch, entropyBuf.Bytes()) +} diff --git a/pkg/consensus/ticket_test.go b/pkg/consensus/ticket_test.go new file mode 100644 index 0000000000..a8caa2d5a8 --- /dev/null +++ b/pkg/consensus/ticket_test.go @@ -0,0 +1,126 @@ +package consensus_test + +import ( + "context" + "testing" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + "github.com/filecoin-project/venus/pkg/constants" + types "github.com/filecoin-project/venus/venus-shared/chain" + + fbig "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/crypto" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + + "github.com/filecoin-project/venus/pkg/consensus" +) + +func TestGenValidTicketChain(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + head, _ := types.NewTipSet([]*types.BlockHeader{mockBlock()}) // Tipset key is unused by fake randomness + loader := newMockTipsetLoader(head) + + // Interleave 3 signers + kis := testhelpers.MustGenerateBLSKeyInfo(3, 0) + + miner, err := address.NewIDAddress(uint64(1)) + require.NoError(t, err) + signer := testhelpers.NewMockSigner(kis) + addr1 := requireAddress(t, &kis[0]) + addr2 := requireAddress(t, &kis[1]) + addr3 := requireAddress(t, &kis[2]) + + schedule := struct { + Addrs []address.Address + }{ + Addrs: []address.Address{addr1, addr1, addr1, addr2, addr3, addr3, addr1, addr2}, + } + + tm := consensus.NewTicketMachine(loader) + + // Grow the specified ticket Chain without error + for i := 0; i < len(schedule.Addrs); i++ { + requireValidTicket(ctx, t, tm, head.Key(), abi.ChainEpoch(i), miner, schedule.Addrs[i], signer) + } +} + +func requireValidTicket(ctx context.Context, t *testing.T, tm *consensus.TicketMachine, head types.TipSetKey, epoch abi.ChainEpoch, + miner, worker address.Address, signer types.Signer) { + electionEntry := &types.BeaconEntry{} + newPeriod := false + ticket, err := tm.MakeTicket(ctx, head, epoch, miner, electionEntry, newPeriod, worker, signer) + require.NoError(t, err) + + err = tm.IsValidTicket(ctx, head, electionEntry, newPeriod, epoch, miner, worker, ticket) + require.NoError(t, err) +} + +func TestNextTicketFailsWithInvalidSigner(t *testing.T) { + ctx := context.Background() + head, _ := types.NewTipSet([]*types.BlockHeader{mockBlock()}) // Tipset key is unused by fake randomness + loader := newMockTipsetLoader(head) + miner, err := address.NewIDAddress(uint64(1)) + require.NoError(t, err) + + signer, _ := testhelpers.NewMockSignersAndKeyInfo(1) + badAddr := testhelpers.RequireIDAddress(t, 100) + tm := consensus.NewTicketMachine(loader) + electionEntry := &types.BeaconEntry{} + newPeriod := false + badTicket, err := tm.MakeTicket(ctx, head.Key(), abi.ChainEpoch(1), miner, electionEntry, newPeriod, badAddr, signer) + assert.Error(t, err) + assert.Nil(t, badTicket.VRFProof) +} + +func requireAddress(t *testing.T, ki *crypto.KeyInfo) address.Address { + addr, err := ki.Address() + require.NoError(t, err) + return addr +} + +func mockBlock() *types.BlockHeader { + mockCid, _ := constants.DefaultCidBuilder.Sum([]byte("mock")) + return &types.BlockHeader{ + Miner: testhelpers.NewForTestGetter()(), + Ticket: &types.Ticket{VRFProof: []byte{0x01, 0x02, 0x03}}, + ElectionProof: &types.ElectionProof{VRFProof: []byte{0x0a, 0x0b}}, + BeaconEntries: []types.BeaconEntry{ + { + Round: 5, + Data: []byte{0x0c}, + }, + }, + Height: 2, + ParentWeight: fbig.NewInt(1000), + ForkSignaling: 3, + Timestamp: 1, + ParentBaseFee: abi.NewTokenAmount(10), + BlockSig: &crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: []byte{0x3}, + }, + ParentStateRoot: mockCid, + ParentMessageReceipts: mockCid, + Messages: mockCid, + } +} + +type mockTipsetLoader struct { + tsk *types.TipSet +} + +func newMockTipsetLoader(tsk *types.TipSet) *mockTipsetLoader { + return &mockTipsetLoader{tsk: tsk} +} + +func (m *mockTipsetLoader) GetTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error) { + return m.tsk, nil +} diff --git a/pkg/consensus/weight_test.go b/pkg/consensus/weight_test.go new file mode 100644 index 0000000000..ff299c7fdd --- /dev/null +++ b/pkg/consensus/weight_test.go @@ -0,0 +1,155 @@ +package consensus_test + +import ( + "context" + "testing" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-state-types/abi" + fbig "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/consensus" + appstate "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/state/tree" +) + +func TestWeight(t *testing.T) { + cst := cbor.NewMemCborStore() + ctx := context.Background() + fakeTree := tree.NewFromString(t, "test-Weight-StateCid", cst) + fakeRoot, err := fakeTree.Flush(ctx) + require.NoError(t, err) + addrGetter := testhelpers.NewForTestGetter() + minerAddr := addrGetter() + // We only care about total power for the weight function + // Total is 16, so bitlen is 5, log2b is 4 + viewer := makeStateViewer(fakeRoot, abi.NewStoragePower(16)) + ticket := consensus.MakeFakeTicketForTest() + toWeigh := testhelpers.RequireNewTipSet(t, &types.BlockHeader{ + Miner: minerAddr, + ParentWeight: fbig.Zero(), + Ticket: ticket, + ElectionProof: &types.ElectionProof{ + WinCount: 1, + }, + ParentStateRoot: fakeRoot, + Messages: testhelpers.EmptyMessagesCID, + ParentMessageReceipts: testhelpers.EmptyReceiptsCID, + }) + + sel := consensus.NewChainSelector(cst, &viewer) + //sel := consensus.NewChainSelector(cst, &viewer, types.CidFromString(t, "genesisCid")) + + t.Run("basic happy path", func(t *testing.T) { + // 0 + (4*256 + (4*1*1*256/5*2)) + // 1024 + 102 = 1126 + w, err := sel.Weight(ctx, toWeigh) + //w, err := sel.Weight(ctx, toWeigh, fakeRoot) + assert.NoError(t, err) + assert.Equal(t, fbig.NewInt(1126), w) + }) + + t.Run("total power adjusts as expected", func(t *testing.T) { + asLowerX := makeStateViewer(fakeRoot, abi.NewStoragePower(15)) + asSameX := makeStateViewer(fakeRoot, abi.NewStoragePower(31)) + asHigherX := makeStateViewer(fakeRoot, abi.NewStoragePower(32)) + + // 0 + (3*256) + (3*1*1*256/2*5) = 844 (truncating not rounding division) + selLower := consensus.NewChainSelector(cst, &asLowerX) + fixWeight, err := selLower.Weight(ctx, toWeigh) + assert.NoError(t, err) + assert.Equal(t, fbig.NewInt(844), fixWeight) + + // Weight is same when total bytes = 16 as when total bytes = 31 + selSame := consensus.NewChainSelector(cst, &asSameX) + fixWeight, err = selSame.Weight(ctx, toWeigh) + assert.NoError(t, err) + assert.Equal(t, fbig.NewInt(1126), fixWeight) + + // 0 + (5*256) + (5*1*1*256/2*5) = 1408 + selHigher := consensus.NewChainSelector(cst, &asHigherX) + fixWeight, err = selHigher.Weight(ctx, toWeigh) + assert.NoError(t, err) + assert.Equal(t, fbig.NewInt(1408), fixWeight) + }) + + t.Run("non-zero parent weight", func(t *testing.T) { + parentWeight := fbig.NewInt(int64(49)) + toWeighWithParent := testhelpers.RequireNewTipSet(t, &types.BlockHeader{ + Miner: minerAddr, + ParentWeight: parentWeight, + Ticket: ticket, + ElectionProof: &types.ElectionProof{ + WinCount: 1, + }, + ParentStateRoot: fakeRoot, + Messages: testhelpers.EmptyMessagesCID, + ParentMessageReceipts: testhelpers.EmptyReceiptsCID, + }) + + // 49 + (4*256) + (4*1*1*256/2*5) = 1175 + w, err := sel.Weight(ctx, toWeighWithParent) + assert.NoError(t, err) + assert.Equal(t, fbig.NewInt(1175), w) + }) + + t.Run("many blocks", func(t *testing.T) { + toWeighThreeBlock := testhelpers.RequireNewTipSet(t, + &types.BlockHeader{ + Miner: minerAddr, + ParentWeight: fbig.Zero(), + Ticket: ticket, + Timestamp: 0, + ElectionProof: &types.ElectionProof{ + WinCount: 1, + }, + ParentStateRoot: fakeRoot, + Messages: testhelpers.EmptyMessagesCID, + ParentMessageReceipts: testhelpers.EmptyReceiptsCID, + }, + &types.BlockHeader{ + Miner: minerAddr, + ParentWeight: fbig.Zero(), + Ticket: ticket, + Timestamp: 1, + ElectionProof: &types.ElectionProof{ + WinCount: 1, + }, + ParentStateRoot: fakeRoot, + Messages: testhelpers.EmptyMessagesCID, + ParentMessageReceipts: testhelpers.EmptyReceiptsCID, + }, + &types.BlockHeader{ + Miner: minerAddr, + ParentWeight: fbig.Zero(), + Ticket: ticket, + Timestamp: 2, + ElectionProof: &types.ElectionProof{ + WinCount: 1, + }, + ParentStateRoot: fakeRoot, + Messages: testhelpers.EmptyMessagesCID, + ParentMessageReceipts: testhelpers.EmptyReceiptsCID, + }, + ) + // 0 + (4*256) + (4*3*1*256/2*5) = 1331 + w, err := sel.Weight(ctx, toWeighThreeBlock) + assert.NoError(t, err) + assert.Equal(t, fbig.NewInt(1331), w) + }) +} + +func makeStateViewer(stateRoot cid.Cid, networkPower abi.StoragePower) consensus.FakeConsensusStateViewer { + return consensus.FakeConsensusStateViewer{ + Views: map[cid.Cid]*appstate.FakeStateView{ + stateRoot: appstate.NewFakeStateView(networkPower, networkPower, 0, 0), + }, + } +} diff --git a/pkg/consensusfault/check.go b/pkg/consensusfault/check.go new file mode 100644 index 0000000000..1e6a4eb57c --- /dev/null +++ b/pkg/consensusfault/check.go @@ -0,0 +1,187 @@ +package consensusfault + +import ( + "bytes" + "context" + "fmt" + + cbornode "github.com/ipfs/go-ipld-cbor" + "github.com/pkg/errors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + runtime7 "github.com/filecoin-project/specs-actors/v7/actors/runtime" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/fork" + "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + "github.com/filecoin-project/venus/venus-shared/actors/policy" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type FaultStateView interface { + ResolveToKeyAddr(ctx context.Context, address address.Address) (address.Address, error) + MinerInfo(ctx context.Context, maddr address.Address, nv network.Version) (*miner.MinerInfo, error) +} + +// Chain state required for checking consensus fault reports. +type chainReader interface { + GetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) +} + +// Checks the validity of reported consensus faults. +type ConsensusFaultChecker struct { + chain chainReader + fork fork.IFork +} + +func NewFaultChecker(chain chainReader, fork fork.IFork) *ConsensusFaultChecker { + return &ConsensusFaultChecker{chain: chain, fork: fork} +} + +// Checks validity of the submitted consensus fault with the two block headers needed to prove the fault +// and an optional extra one to check common ancestry (as needed). +// Note that the blocks are ordered: the method requires a.Epoch() <= b.Epoch(). +func (s *ConsensusFaultChecker) VerifyConsensusFault(ctx context.Context, h1, h2, extra []byte, curEpoch abi.ChainEpoch, msg vm.VmMessage, gasIpld cbornode.IpldStore, view vm.SyscallsStateView, getter vmcontext.LookbackStateGetter) (*runtime7.ConsensusFault, error) { + if bytes.Equal(h1, h2) { + return nil, fmt.Errorf("no consensus fault: blocks identical") + } + + var b1, b2, b3 types.BlockHeader + innerErr := b1.UnmarshalCBOR(bytes.NewReader(h1)) + if innerErr != nil { + return nil, errors.Wrapf(innerErr, "failed to decode h1") + } + innerErr = b2.UnmarshalCBOR(bytes.NewReader(h2)) + if innerErr != nil { + return nil, errors.Wrapf(innerErr, "failed to decode h2") + } + + // workaround chain halt + forkUpgrade := s.fork.GetForkUpgrade() + if config.IsNearUpgrade(b1.Height, forkUpgrade.UpgradeOrangeHeight) { + return nil, xerrors.Errorf("consensus reporting disabled around Upgrade Orange") + } + if config.IsNearUpgrade(b2.Height, forkUpgrade.UpgradeOrangeHeight) { + return nil, xerrors.Errorf("consensus reporting disabled around Upgrade Orange") + } + + // BlockHeader syntax is not validated. This implements the strictest check possible, and is also the simplest check + // possible. + // This means that blocks that could never have been included in the chain (e.g. with an empty parent state) + // are still fault-able. + + if b1.Miner != b2.Miner { + return nil, fmt.Errorf("no consensus fault: miners differ") + } + if b1.Height > b2.Height { + return nil, fmt.Errorf("no consensus fault: first block is higher than second") + } + + // Check the basic fault conditions first, defer the (expensive) signature and chain history check until last. + var fault *runtime7.ConsensusFault + + // Double-fork mining fault: two blocks at the same epoch. + // It is not necessary to present a common ancestor of the blocks. + if b1.Height == b2.Height { + fault = &runtime7.ConsensusFault{ + Target: b1.Miner, + Epoch: b2.Height, + Type: runtime7.ConsensusFaultDoubleForkMining, + } + } + // Time-offset mining fault: two blocks with the same parent but different epochs. + // The curEpoch check is redundant at time of writing, but included for robustness to future changes to this method. + // The blocks have a common ancestor by definition (the parent). + b1PKey := types.NewTipSetKey(b1.Parents...) + b2PKey := types.NewTipSetKey(b2.Parents...) + if b1PKey.Equals(b2PKey) && b1.Height != b2.Height { + fault = &runtime7.ConsensusFault{ + Target: b1.Miner, + Epoch: b2.Height, + Type: runtime7.ConsensusFaultTimeOffsetMining, + } + } + // Parent-grinding fault: one blockโ€™s parent is a tipset that provably should have included some block but does not. + // The provable case is that two blocks are mined and the later one does not include the + // earlier one as a parent even though it could have. + // B3 must prove that the higher block (B2) could have been included in B1's tipset. + if len(extra) > 0 { + innerErr = b3.UnmarshalCBOR(bytes.NewReader(extra)) + if innerErr != nil { + return nil, errors.Wrapf(innerErr, "failed to decode extra") + } + b3PKey := types.NewTipSetKey(b3.Parents...) + if b1.Height == b3.Height && b3PKey.Equals(b1PKey) && !b2PKey.Has(b1.Cid()) && b2PKey.Has(b3.Cid()) { + fault = &runtime7.ConsensusFault{ + Target: b1.Miner, + Epoch: b2.Height, + Type: runtime7.ConsensusFaultParentGrinding, + } + } + } + + if fault == nil { + return nil, fmt.Errorf("no consensus fault: blocks are ok") + } + + // Expensive validation: signatures. + b1Version := s.fork.GetNtwkVersion(ctx, b1.Height) + err := verifyBlockSignature(ctx, b1, b1Version, curEpoch, msg.To, gasIpld, view, getter) + if err != nil { + return nil, err + } + b2Version := s.fork.GetNtwkVersion(ctx, b2.Height) + err = verifyBlockSignature(ctx, b2, b2Version, curEpoch, msg.To, gasIpld, view, getter) + if err != nil { + return nil, err + } + + return fault, nil +} + +// Checks whether a block header is correctly signed in the context of the parent state to which it refers. +func verifyBlockSignature(ctx context.Context, blk types.BlockHeader, nv network.Version, curEpoch abi.ChainEpoch, receiver address.Address, gasIpld cbornode.IpldStore, view FaultStateView, getter vmcontext.LookbackStateGetter) error { + if nv >= network.Version7 && blk.Height < curEpoch-policy.ChainFinality { + return xerrors.Errorf("cannot get worker key (currEpoch %d, height %d)", curEpoch, blk.Height) + } + + lbstate, err := getter(ctx, blk.Height) + if err != nil { + return xerrors.Errorf("fialed to look back state at height %d", blk.Height) + } + + act, err := lbstate.LoadActor(ctx, receiver) + if err != nil { + return errors.Wrapf(err, "failed to get miner actor") + } + + mas, err := miner.Load(adt.WrapStore(ctx, gasIpld), act) + if err != nil { + return xerrors.Errorf("failed to load state for miner %s", receiver) + } + + info, err := mas.Info() + if err != nil { + return xerrors.Errorf("failed to get miner info for miner %s", receiver) + } + + if blk.BlockSig == nil { + return errors.Errorf("no consensus fault: block %s has nil signature", blk.Cid()) + } + + sd, err := blk.SignatureData() + if err != nil { + return err + } + err = state.NewSignatureValidator(view).ValidateSignature(ctx, sd, info.Worker, *blk.BlockSig) + if err != nil { + return errors.Wrapf(err, "no consensus fault: block %s signature invalid", blk.Cid()) + } + return err +} diff --git a/pkg/constants/chain_parameters.go b/pkg/constants/chain_parameters.go new file mode 100644 index 0000000000..6967d297ca --- /dev/null +++ b/pkg/constants/chain_parameters.go @@ -0,0 +1,39 @@ +package constants + +import ( + "math" + + "github.com/filecoin-project/go-state-types/abi" + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" +) + +const DefaultConfidence = uint64(5) +const DefaultMessageWaitLookback = abi.ChainEpoch(100) // in most cases, this should be enough to avoid races. +const LookbackNoLimit = abi.ChainEpoch(-1) + +const BlockMessageLimit = 10000 + +// Epochs +const TicketRandomnessLookback = abi.ChainEpoch(1) + +//expect blocks number in a tipset +var ExpectedLeadersPerEpoch = builtin0.ExpectedLeadersPerEpoch + +// BlockGasLimit is the maximum amount of gas that can be used to execute messages in a single block. +const BlockGasLimit = 10_000_000_000 +const BlockGasTarget = BlockGasLimit / 2 +const BaseFeeMaxChangeDenom = 8 // 12.5% +const InitialBaseFee = 100e6 +const MinimumBaseFee = 100 +const PackingEfficiencyNum = 4 +const PackingEfficiencyDenom = 5 + +const MainNetBlockDelaySecs = uint64(builtin0.EpochDurationSeconds) + +const PropagationDelaySecs = uint64(6) + +//todo move this value to config +var InsecurePoStValidation = false + +const NoTimeout = math.MaxInt64 +const NoHeight = abi.ChainEpoch(-1) diff --git a/pkg/constants/clock.go b/pkg/constants/clock.go new file mode 100644 index 0000000000..11c072a4ac --- /dev/null +++ b/pkg/constants/clock.go @@ -0,0 +1,11 @@ +package constants + +import "github.com/raulk/clock" + +// Clock is the global clock for the system. In standard builds, +// we use a real-time clock, which maps to the `time` package. +// +// Tests that need control of time can replace this variable with +// clock.NewMock(). Always use real time for socket/stream deadlines. +// todo move this clock to clock package. constant package should refer other as little as possible +var Clock = clock.New() diff --git a/pkg/constants/common.go b/pkg/constants/common.go new file mode 100644 index 0000000000..d45a3bec1b --- /dev/null +++ b/pkg/constants/common.go @@ -0,0 +1,3 @@ +package constants + +const StringEmpty = "" diff --git a/internal/pkg/constants/hash.go b/pkg/constants/hash.go similarity index 100% rename from internal/pkg/constants/hash.go rename to pkg/constants/hash.go diff --git a/pkg/constants/network.go b/pkg/constants/network.go new file mode 100644 index 0000000000..15439243b7 --- /dev/null +++ b/pkg/constants/network.go @@ -0,0 +1,12 @@ +package constants + +const ( + NetworkDefault = 0 + NetworkMainnet = 0x1 + Network2k = 0x2 + NetworkDebug = 0x3 + NetworkCalibnet = 0x4 + NetworkNerpa = 0x5 + NetworkInterop = 0x6 + NetworkForce = 0x7 +) diff --git a/pkg/constants/registered_proofs.go b/pkg/constants/registered_proofs.go new file mode 100644 index 0000000000..51509485c4 --- /dev/null +++ b/pkg/constants/registered_proofs.go @@ -0,0 +1,9 @@ +package constants + +import "github.com/filecoin-project/go-state-types/abi" + +//just for test +var DevRegisteredSealProof = abi.RegisteredSealProof_StackedDrg2KiBV1 + +var DevRegisteredWinningPoStProof = abi.RegisteredPoStProof_StackedDrgWinning2KiBV1 +var DevRegisteredWindowPoStProof = abi.RegisteredPoStProof_StackedDrgWindow2KiBV1 diff --git a/internal/pkg/constants/sector_size.go b/pkg/constants/sector_size.go similarity index 81% rename from internal/pkg/constants/sector_size.go rename to pkg/constants/sector_size.go index f2e03d6e44..ecca0ec64e 100644 --- a/internal/pkg/constants/sector_size.go +++ b/pkg/constants/sector_size.go @@ -1,8 +1,8 @@ package constants -import "github.com/filecoin-project/specs-actors/actors/abi" +import "github.com/filecoin-project/go-state-types/abi" -const DevSealProofType = abi.RegisteredProof_StackedDRG2KiBSeal +const DevSealProofType = abi.RegisteredSealProof_StackedDrg2KiBV1 // DevSectorSize is a tiny sector useful only for testing. var DevSectorSize abi.SectorSize diff --git a/pkg/constants/shared_vals.go b/pkg/constants/shared_vals.go new file mode 100644 index 0000000000..aca034901a --- /dev/null +++ b/pkg/constants/shared_vals.go @@ -0,0 +1,67 @@ +package constants + +import ( + "math/big" + + "github.com/filecoin-project/venus/venus-shared/actors/policy" + + "github.com/filecoin-project/go-address" + + "github.com/filecoin-project/go-state-types/network" +) + +// ///// +// Consensus / Network + +const AllowableClockDriftSecs = uint64(1) + +/* inline-gen template + +const NewestNetworkVersion = network.Version{{.latestNetworkVersion}} + +/* inline-gen start */ + +const NewestNetworkVersion = network.Version15 + +/* inline-gen end */ + +// constants for Weight calculation +// The ratio of weight contributed by short-term vs long-term factors in a given round +const WRatioNum = int64(1) +const WRatioDen = uint64(2) + +const FilBase = uint64(2_000_000_000) +const FilAllocStorageMining = uint64(1_100_000_000) + +const FilecoinPrecision = uint64(1_000_000_000_000_000_000) +const FilReserved = uint64(300_000_000) + +var InitialRewardBalance *big.Int +var InitialFilReserved *big.Int + +func SetAddressNetwork(n address.Network) { + address.CurrentNetwork = n +} + +func init() { + InitialRewardBalance = big.NewInt(int64(FilAllocStorageMining)) + InitialRewardBalance = InitialRewardBalance.Mul(InitialRewardBalance, big.NewInt(int64(FilecoinPrecision))) + + InitialFilReserved = big.NewInt(int64(FilReserved)) + InitialFilReserved = InitialFilReserved.Mul(InitialFilReserved, big.NewInt(int64(FilecoinPrecision))) +} + +// assuming 4000 messages per round, this lets us not lose any messages across a +// 10 block reorg. +const BlsSignatureCacheSize = 40000 + +// Epochs +const ForkLengthThreshold = Finality + +// Size of signature verification cache +// 32k keeps the cache around 10MB in size, max +const VerifSigCacheSize = 32000 +const Finality = policy.ChainFinality + +// Epochs +const MessageConfidence = uint64(5) diff --git a/pkg/constants/version.go b/pkg/constants/version.go new file mode 100644 index 0000000000..3e5dd09833 --- /dev/null +++ b/pkg/constants/version.go @@ -0,0 +1,31 @@ +package constants + +import ( + "os" + + "github.com/filecoin-project/venus/build/flags" +) + +// BuildVersion is the local build version, set by build system +const BuildVersion = "1.1.2" + +// software version +func UserVersion() string { + if os.Getenv("VENUS_VERSION_IGNORE_COMMIT") == "1" { + return BuildVersion + } + + return BuildVersion + flags.GitCommit +} + +type Version uint32 + +func newVer(major, minor, patch uint8) Version { + return Version(uint32(major)<<16 | uint32(minor)<<8 | uint32(patch)) +} + +// semver versions of the rpc api exposed +var ( + FullAPIVersion0 = newVer(1, 4, 0) + FullAPIVersion1 = newVer(2, 1, 0) +) diff --git a/pkg/crypto/bls/bls_bench_test.go b/pkg/crypto/bls/bls_bench_test.go new file mode 100644 index 0000000000..4a4786ee42 --- /dev/null +++ b/pkg/crypto/bls/bls_bench_test.go @@ -0,0 +1,42 @@ +package bls + +import ( + "crypto/rand" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "testing" + + "github.com/filecoin-project/go-address" +) + +func BenchmarkBLSSign(b *testing.B) { + tf.BenchUnitTest(b) + signer := blsSigner{} + for i := 0; i < b.N; i++ { + b.StopTimer() + pk, _ := signer.GenPrivate() + randMsg := make([]byte, 32) + _, _ = rand.Read(randMsg) + b.StartTimer() + + _, _ = signer.Sign(pk, randMsg) + } +} + +func BenchmarkBLSVerify(b *testing.B) { + tf.BenchUnitTest(b) + signer := blsSigner{} + for i := 0; i < b.N; i++ { + b.StopTimer() + randMsg := make([]byte, 32) + _, _ = rand.Read(randMsg) + + priv, _ := signer.GenPrivate() + pk, _ := signer.ToPublic(priv) + addr, _ := address.NewBLSAddress(pk) + sig, _ := signer.Sign(priv, randMsg) + + b.StartTimer() + + _ = signer.Verify(sig, addr, randMsg) + } +} diff --git a/pkg/crypto/bls/init.go b/pkg/crypto/bls/init.go new file mode 100644 index 0000000000..33627d715b --- /dev/null +++ b/pkg/crypto/bls/init.go @@ -0,0 +1,117 @@ +package bls + +import ( + "crypto/rand" + "fmt" + crypto2 "github.com/filecoin-project/venus/pkg/crypto" + "io" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/crypto" + + ffi "github.com/filecoin-project/filecoin-ffi" +) + +const DST = string("BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_NUL_") + +type SecretKey = ffi.PrivateKey +type PublicKey = ffi.PublicKey +type Signature = ffi.Signature +type AggregateSignature = ffi.Signature + +type blsSigner struct{} + +func (s blsSigner) VerifyAggregate(pubKeys, msgs [][]byte, signature []byte) bool { + digests := []ffi.Digest{} + for _, msg := range msgs { + digests = append(digests, ffi.Hash(msg)) + } + + keys := []ffi.PublicKey{} + for _, pubKey := range pubKeys { + var blsPubKey ffi.PublicKey + copy(blsPubKey[:], pubKey) + keys = append(keys, blsPubKey) + } + + var blsSig ffi.Signature + copy(blsSig[:], signature) + return ffi.Verify(&blsSig, digests, keys) +} + +func (blsSigner) GenPrivate() ([]byte, error) { + // Generate 32 bytes of randomness + var ikm [32]byte + _, err := rand.Read(ikm[:]) + if err != nil { + return nil, fmt.Errorf("bls signature error generating random data") + } + // Note private keys seem to be serialized little-endian! + sk := ffi.PrivateKeyGenerateWithSeed(ikm) + return sk[:], nil +} + +func (blsSigner) GenPrivateFromSeed(seed io.Reader) ([]byte, error) { + var seedBytes ffi.PrivateKeyGenSeed + read, err := seed.Read(seedBytes[:]) + if err != nil { + return nil, err + } + if read != len(seedBytes) { + return nil, fmt.Errorf("read only %d bytes of %d required from seed", read, len(seedBytes)) + } + priKey := ffi.PrivateKeyGenerateWithSeed(seedBytes) + return priKey[:], nil +} + +func (blsSigner) ToPublic(priv []byte) ([]byte, error) { + if priv == nil || len(priv) != ffi.PrivateKeyBytes { + return nil, fmt.Errorf("bls signature invalid private key") + } + + sk := new(SecretKey) + copy(sk[:], priv[:ffi.PrivateKeyBytes]) + + pubkey := ffi.PrivateKeyPublicKey(*sk) + + return pubkey[:], nil +} + +func (blsSigner) Sign(p []byte, msg []byte) ([]byte, error) { + if p == nil || len(p) != ffi.PrivateKeyBytes { + return nil, fmt.Errorf("bls signature invalid private key") + } + + sk := new(SecretKey) + copy(sk[:], p[:ffi.PrivateKeyBytes]) + + sig := ffi.PrivateKeySign(*sk, msg) + + return sig[:], nil +} + +func (blsSigner) Verify(sig []byte, a address.Address, msg []byte) error { + payload := a.Payload() + if sig == nil || len(sig) != ffi.SignatureBytes || len(payload) != ffi.PublicKeyBytes { + return fmt.Errorf("bls signature failed to verify") + } + + pk := new(PublicKey) + copy(pk[:], payload[:ffi.PublicKeyBytes]) + + sigS := new(Signature) + copy(sigS[:], sig[:ffi.SignatureBytes]) + + msgs := [1]ffi.Message{msg} + pks := [1]PublicKey{*pk} + + if !ffi.HashVerify(sigS, msgs[:], pks[:]) { + return fmt.Errorf("bls signature failed to verify") + } + + return nil +} + +func init() { + crypto2.RegisterSignature(crypto.SigTypeBLS, blsSigner{}) +} diff --git a/pkg/crypto/crypto.go b/pkg/crypto/crypto.go new file mode 100644 index 0000000000..71733c883f --- /dev/null +++ b/pkg/crypto/crypto.go @@ -0,0 +1,38 @@ +package crypto + +import ( + "io" + + "github.com/filecoin-project/go-state-types/crypto" +) + +// +// Abstract SECP and BLS crypto operations. +// + +// NewSecpKeyFromSeed generates a new key from the given reader. +func NewSecpKeyFromSeed(seed io.Reader) (KeyInfo, error) { + k, err := sigs[crypto.SigTypeSecp256k1].GenPrivateFromSeed(seed) + if err != nil { + return KeyInfo{}, err + } + ki := &KeyInfo{ + SigType: SigTypeSecp256k1, + } + ki.SetPrivateKey(k) + copy(k, make([]byte, len(k))) //wipe with zero bytes + return *ki, nil +} + +func NewBLSKeyFromSeed(seed io.Reader) (KeyInfo, error) { + k, err := sigs[crypto.SigTypeBLS].GenPrivateFromSeed(seed) + if err != nil { + return KeyInfo{}, err + } + ki := &KeyInfo{ + SigType: SigTypeBLS, + } + ki.SetPrivateKey(k) + copy(k, make([]byte, len(k))) //wipe with zero bytes + return *ki, nil +} diff --git a/pkg/crypto/crypto_test.go b/pkg/crypto/crypto_test.go new file mode 100644 index 0000000000..c7385d9157 --- /dev/null +++ b/pkg/crypto/crypto_test.go @@ -0,0 +1,92 @@ +package crypto_test + +import ( + "bytes" + "github.com/filecoin-project/go-address" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + bls "github.com/filecoin-project/filecoin-ffi" + "github.com/filecoin-project/venus/pkg/crypto" + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestGenerateSecpKey(t *testing.T) { + tf.UnitTest(t) + + token := bytes.Repeat([]byte{42}, 512) + ki, err := crypto.NewSecpKeyFromSeed(bytes.NewReader(token)) + assert.NoError(t, err) + sk := ki.Key() + t.Logf("%x", sk) + assert.Equal(t, len(sk), 32) + + msg := make([]byte, 32) + for i := 0; i < len(msg); i++ { + msg[i] = byte(i) + } + + signature, err := crypto.Sign(msg, sk, crypto.SigTypeSecp256k1) + assert.NoError(t, err) + assert.Equal(t, len(signature.Data), 65) + pk, err := crypto.ToPublic(crypto.SigTypeSecp256k1, sk) + assert.NoError(t, err) + addr, err := address.NewSecp256k1Address(pk) + assert.NoError(t, err) + t.Logf("%x", pk) + // valid signature + assert.True(t, crypto.Verify(signature, addr, msg) == nil) + + // invalid signature - different message (too short) + assert.False(t, crypto.Verify(signature, addr, msg[3:]) == nil) + + // invalid signature - different message + msg2 := make([]byte, 32) + copy(msg2, msg) + msg2[0] = 42 + assert.False(t, crypto.Verify(signature, addr, msg2) == nil) + + // invalid signature - different digest + digest2 := make([]byte, 65) + copy(digest2, signature.Data) + digest2[0] = 42 + assert.False(t, crypto.Verify(&crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: digest2}, addr, msg) == nil) + + // invalid signature - digest too short + assert.False(t, crypto.Verify(&crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: signature.Data[3:]}, addr, msg) == nil) + assert.False(t, crypto.Verify(&crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: signature.Data[:29]}, addr, msg) == nil) + + // invalid signature - digest too long + digest3 := make([]byte, 70) + copy(digest3, signature.Data) + assert.False(t, crypto.Verify(&crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: digest3}, addr, msg) == nil) +} + +func TestBLSSigning(t *testing.T) { + privateKey := bls.PrivateKeyGenerate() + data := []byte("data to be signed") + t.Logf("%x", privateKey) + t.Logf("%x", bls.PrivateKeyPublicKey(privateKey)) + signature, err := crypto.Sign(data, privateKey[:], crypto.SigTypeBLS) + require.NoError(t, err) + + publicKey := bls.PrivateKeyPublicKey(privateKey) + addr, err := address.NewBLSAddress(publicKey[:]) + require.NoError(t, err) + + err = crypto.Verify(signature, addr, data) + require.NoError(t, err) + + // invalid signature fails + err = crypto.Verify(&crypto.Signature{Type: crypto.SigTypeBLS, Data: signature.Data[3:]}, addr, data) + require.Error(t, err) + + // invalid digest fails + err = crypto.Verify(signature, addr, data[3:]) + require.Error(t, err) + +} diff --git a/pkg/crypto/keyinfo.go b/pkg/crypto/keyinfo.go new file mode 100644 index 0000000000..ad1a4d698d --- /dev/null +++ b/pkg/crypto/keyinfo.go @@ -0,0 +1,179 @@ +package crypto + +import ( + "bytes" + "encoding/json" + "fmt" + + "github.com/awnumar/memguard" + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/crypto" + logging "github.com/ipfs/go-log/v2" + "github.com/pkg/errors" +) + +const ( + stBLS = "bls" + stSecp256k1 = "secp256k1" +) + +var log = logging.Logger("keyinfo") + +// KeyInfo is a key and its type used for signing. +type KeyInfo struct { + // Private key. + PrivateKey *memguard.Enclave `json:"privateKey"` + // Cryptographic system used to generate private key. + SigType SigType `json:"type"` +} + +type keyInfo struct { + // Private key. + PrivateKey []byte `json:"privateKey"` + // Cryptographic system used to generate private key. + SigType interface{} `json:"type"` +} + +func (ki *KeyInfo) UnmarshalJSON(data []byte) error { + k := keyInfo{} + err := json.Unmarshal(data, &k) + if err != nil { + return err + } + + switch k.SigType.(type) { + case string: + //compatible with lotus + st := k.SigType.(string) + if st == stBLS { + ki.SigType = crypto.SigTypeBLS + } else if st == stSecp256k1 { + ki.SigType = crypto.SigTypeSecp256k1 + } else { + return fmt.Errorf("unknown sig type value: %s", st) + } + case byte: + ki.SigType = crypto.SigType(k.SigType.(byte)) + case float64: + ki.SigType = crypto.SigType(k.SigType.(float64)) + case int: + ki.SigType = crypto.SigType(k.SigType.(int)) + case int64: + ki.SigType = crypto.SigType(k.SigType.(int64)) + default: + return fmt.Errorf("unknown sig type: %T", k.SigType) + } + ki.SetPrivateKey(k.PrivateKey) + + return nil +} + +func (ki KeyInfo) MarshalJSON() ([]byte, error) { + var err error + var b []byte + err = ki.UsePrivateKey(func(privateKey []byte) error { + k := keyInfo{} + k.PrivateKey = privateKey + if ki.SigType == crypto.SigTypeBLS { + k.SigType = stBLS + } else if ki.SigType == crypto.SigTypeSecp256k1 { + k.SigType = stSecp256k1 + } else { + return fmt.Errorf("unsupport keystore types %T", k.SigType) + } + b, err = json.Marshal(k) + return err + }) + + return b, err +} + +// Key returns the private key of KeyInfo +// This method makes the key escape from memguard's protection, so use caution +func (ki *KeyInfo) Key() []byte { + var pk []byte + err := ki.UsePrivateKey(func(privateKey []byte) error { + pk = make([]byte, len(privateKey)) + copy(pk, privateKey[:]) + return nil + }) + if err != nil { + log.Errorf("got private key failed %v", err) + return []byte{} + } + return pk +} + +// Type returns the type of curve used to generate the private key +func (ki *KeyInfo) Type() SigType { + return ki.SigType +} + +// Equals returns true if the KeyInfo is equal to other. +func (ki *KeyInfo) Equals(other *KeyInfo) bool { + if ki == nil && other == nil { + return true + } + if ki == nil || other == nil { + return false + } + if ki.SigType != other.SigType { + return false + } + + pk, err := ki.PrivateKey.Open() + if err != nil { + return false + } + defer pk.Destroy() + + otherPK, err := other.PrivateKey.Open() + if err != nil { + return false + } + defer otherPK.Destroy() + + return bytes.Equal(pk.Bytes(), otherPK.Bytes()) +} + +// Address returns the address for this keyinfo +func (ki *KeyInfo) Address() (address.Address, error) { + pubKey, err := ki.PublicKey() + if err != nil { + return address.Undef, err + } + if ki.SigType == SigTypeBLS { + return address.NewBLSAddress(pubKey) + } + if ki.SigType == SigTypeSecp256k1 { + return address.NewSecp256k1Address(pubKey) + } + return address.Undef, errors.Errorf("can not generate address for unknown crypto system: %d", ki.SigType) +} + +// Returns the public key part as uncompressed bytes. +func (ki *KeyInfo) PublicKey() ([]byte, error) { + var pubKey []byte + err := ki.UsePrivateKey(func(privateKey []byte) error { + var err error + pubKey, err = ToPublic(ki.SigType, privateKey) + return err + }) + + return pubKey, err +} + +func (ki *KeyInfo) UsePrivateKey(f func([]byte) error) error { + buf, err := ki.PrivateKey.Open() + if err != nil { + return err + } + defer buf.Destroy() + + return f(buf.Bytes()) +} + +func (ki *KeyInfo) SetPrivateKey(privateKey []byte) { + // will wipes privateKey with zeroes + ki.PrivateKey = memguard.NewEnclave(privateKey) +} diff --git a/pkg/crypto/keyinfo_test.go b/pkg/crypto/keyinfo_test.go new file mode 100644 index 0000000000..c4ab2b41f8 --- /dev/null +++ b/pkg/crypto/keyinfo_test.go @@ -0,0 +1,45 @@ +package crypto_test + +import ( + "encoding/hex" + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/filecoin-project/venus/pkg/crypto" +) + +func TestKeyInfoAddress(t *testing.T) { + prv, _ := hex.DecodeString("2a2a2a2a2a2a2a2a5fbf0ed0f8364c01ff27540ecd6669ff4cc548cbe60ef5ab") + ki := &crypto.KeyInfo{ + SigType: crypto.SigTypeSecp256k1, + } + ki.SetPrivateKey(prv) + + sign, _ := crypto.Sign([]byte("hello filecoin"), prv, crypto.SigTypeSecp256k1) + t.Logf("%x", sign) +} + +func TestKeyInfoUnmarshalAndMarshal(t *testing.T) { + prv := []byte("marshal_and_unmarshal") + prvCp := make([]byte, len(prv)) + copy(prvCp, prv) + ki := &crypto.KeyInfo{ + SigType: crypto.SigTypeSecp256k1, + } + ki.SetPrivateKey(prv) + + assert.NotNil(t, ki.PrivateKey) + t.Log(string(prv)) + assert.Equal(t, prvCp, ki.Key()) + + kiByte, err := json.Marshal(ki) + assert.NoError(t, err) + + var newKI crypto.KeyInfo + assert.NoError(t, json.Unmarshal(kiByte, &newKI)) + + assert.Equal(t, ki.Key(), newKI.Key()) + assert.Equal(t, ki.SigType, newKI.SigType) +} diff --git a/pkg/crypto/secp/init.go b/pkg/crypto/secp/init.go new file mode 100644 index 0000000000..e4f5ea798d --- /dev/null +++ b/pkg/crypto/secp/init.go @@ -0,0 +1,67 @@ +package secp + +import ( + "fmt" + crypto3 "github.com/filecoin-project/venus/pkg/crypto" + "io" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-crypto" + crypto2 "github.com/filecoin-project/go-state-types/crypto" + "github.com/minio/blake2b-simd" +) + +type secpSigner struct{} + +func (s secpSigner) VerifyAggregate(pubKeys, msgs [][]byte, signature []byte) bool { + panic("not support") +} + +func (secpSigner) GenPrivate() ([]byte, error) { + priv, err := crypto.GenerateKey() + if err != nil { + return nil, err + } + return priv, nil +} + +func (secpSigner) GenPrivateFromSeed(seed io.Reader) ([]byte, error) { + return crypto.GenerateKeyFromSeed(seed) +} + +func (secpSigner) ToPublic(pk []byte) ([]byte, error) { + return crypto.PublicKey(pk), nil +} + +func (secpSigner) Sign(pk []byte, msg []byte) ([]byte, error) { + b2sum := blake2b.Sum256(msg) + sig, err := crypto.Sign(pk, b2sum[:]) + if err != nil { + return nil, err + } + + return sig, nil +} + +func (secpSigner) Verify(sig []byte, a address.Address, msg []byte) error { + b2sum := blake2b.Sum256(msg) + pubk, err := crypto.EcRecover(b2sum[:], sig) + if err != nil { + return err + } + + maybeaddr, err := address.NewSecp256k1Address(pubk) + if err != nil { + return err + } + + if a != maybeaddr { + return fmt.Errorf("signature did not match") + } + + return nil +} + +func init() { + crypto3.RegisterSignature(crypto2.SigTypeSecp256k1, secpSigner{}) +} diff --git a/pkg/crypto/sigs.go b/pkg/crypto/sigs.go new file mode 100644 index 0000000000..ac5966d914 --- /dev/null +++ b/pkg/crypto/sigs.go @@ -0,0 +1,118 @@ +package crypto + +import ( + "fmt" + "io" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/crypto" + "golang.org/x/xerrors" +) + +// +// address-based signature validation +// + +type Signature = crypto.Signature +type SigType = crypto.SigType + +const ( + SigTypeSecp256k1 = crypto.SigTypeSecp256k1 + SigTypeBLS = crypto.SigTypeBLS +) + +const ( + BLSSignatureBytes = 96 +) + +// Sign takes in signature type, private key and message. Returns a signature for that message. +// Valid sigTypes are: "secp256k1" and "bls" +func Sign(msg []byte, privkey []byte, sigType SigType) (*crypto.Signature, error) { + sv, ok := sigs[sigType] + if !ok { + return nil, fmt.Errorf("cannot sign message with signature of unsupported type: %v", sigType) + } + + sb, err := sv.Sign(privkey, msg) + if err != nil { + return nil, err + } + return &crypto.Signature{ + Type: sigType, + Data: sb, + }, nil +} + +// Verify verifies signatures +func Verify(sig *crypto.Signature, addr address.Address, msg []byte) error { + if sig == nil { + return xerrors.Errorf("signature is nil") + } + + if addr.Protocol() == address.ID { + return fmt.Errorf("must resolve ID addresses before using them to verify a signature") + } + + sv, ok := sigs[sig.Type] + if !ok { + return fmt.Errorf("cannot verify signature of unsupported type: %v", sig.Type) + } + + return sv.Verify(sig.Data, addr, msg) +} + +func VerifyAggregate(pubKeys, msgs [][]byte, signature []byte) error { + if signature == nil { + return xerrors.Errorf("signature is nil") + } + + sv, ok := sigs[crypto.SigTypeBLS] + if !ok { + return fmt.Errorf("bls not register") + } + + if !sv.VerifyAggregate(pubKeys, msgs, signature) { + return xerrors.Errorf("verify aggregate message fail") + } + return nil +} + +// Generate generates private key of given type +func Generate(sigType crypto.SigType) ([]byte, error) { + sv, ok := sigs[sigType] + if !ok { + return nil, fmt.Errorf("cannot generate private key of unsupported type: %v", sigType) + } + + return sv.GenPrivate() +} + +// ToPublic converts private key to public key +func ToPublic(sigType crypto.SigType, pk []byte) ([]byte, error) { + sv, ok := sigs[sigType] + if !ok { + return nil, fmt.Errorf("cannot generate public key of unsupported type: %v", sigType) + } + + return sv.ToPublic(pk) +} + +// SigShim is used for introducing signature functions +type SigShim interface { + GenPrivate() ([]byte, error) + GenPrivateFromSeed(seed io.Reader) ([]byte, error) + ToPublic(pk []byte) ([]byte, error) + Sign(pk []byte, msg []byte) ([]byte, error) + Verify(sig []byte, a address.Address, msg []byte) error + VerifyAggregate(pubKeys, msgs [][]byte, signature []byte) bool +} + +var sigs map[crypto.SigType]SigShim + +// RegisterSignature should be only used during init +func RegisterSignature(typ crypto.SigType, vs SigShim) { + if sigs == nil { + sigs = make(map[crypto.SigType]SigShim) + } + sigs[typ] = vs +} diff --git a/pkg/discovery/bootstrap.go b/pkg/discovery/bootstrap.go new file mode 100644 index 0000000000..e39c548c53 --- /dev/null +++ b/pkg/discovery/bootstrap.go @@ -0,0 +1,138 @@ +package discovery + +import ( + "context" + "sync" + "time" + + "github.com/filecoin-project/venus/pkg/util/moresync" + logging "github.com/ipfs/go-log/v2" + host "github.com/libp2p/go-libp2p-core/host" + inet "github.com/libp2p/go-libp2p-core/network" + peer "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p-core/routing" +) + +var logBootstrap = logging.Logger("net.bootstrap") + +// Bootstrapper attempts to keep the p2p host connected to the filecoin network +// by keeping a minimum threshold of connections. If the threshold isn't met it +// connects to a random subset of the bootstrap peers. It does not use peer routing +// to discover new peers. To stop a Bootstrapper cancel the context passed in Start() +// or call Stop(). +type Bootstrapper struct { + // Config + // MinPeerThreshold is the number of connections it attempts to maintain. + MinPeerThreshold int + // Peers to connect to if we fall below the threshold. + bootstrapPeers []peer.AddrInfo + // Period is the interval at which it periodically checks to see + // if the threshold is maintained. + Period time.Duration + // ConnectionTimeout is how long to wait before timing out a connection attempt. + ConnectionTimeout time.Duration + + // Dependencies + h host.Host + d inet.Dialer + r routing.Routing + // Does the work. Usually Bootstrapper.bootstrap. Argument is a slice of + // currently-connected peers (so it won't attempt to reconnect). + Bootstrap func([]peer.ID) + + // Bookkeeping + /* never use `ticker` again */ + // ticker *time.Ticker + ctx context.Context + cancel context.CancelFunc + filecoinPeers *moresync.Latch +} + +// NewBootstrapper returns a new Bootstrapper that will attempt to keep connected +// to the filecoin network by connecting to the given bootstrap peers. +func NewBootstrapper(bootstrapPeers []peer.AddrInfo, h host.Host, d inet.Dialer, r routing.Routing, minPeer int, period time.Duration) *Bootstrapper { + b := &Bootstrapper{ + MinPeerThreshold: minPeer, + bootstrapPeers: bootstrapPeers, + Period: period, + ConnectionTimeout: 20 * time.Second, + + h: h, + d: d, + r: r, + + filecoinPeers: moresync.NewLatch(uint(minPeer)), + } + b.Bootstrap = b.bootstrap + return b +} + +// Start starts the Bootstrapper bootstrapping. Cancel `ctx` or call Stop() to stop it. +func (b *Bootstrapper) Start(ctx context.Context) { + b.ctx, b.cancel = context.WithCancel(ctx) + b.Bootstrap(nil) // boot first + + // does't need a ticker anymore + // b.ticker = time.NewTicker(b.Period) + + /* following commented logical was replaced by `PeerManager` */ + // go func() { + // defer b.ticker.Stop() + // + // for { + // select { + // case <-b.ctx.Done(): + // return + // case <-b.ticker.C: + // b.Bootstrap(b.d.Peers()) + // } + // } + // }() +} + +// Stop stops the Bootstrapper. +func (b *Bootstrapper) Stop() { + if b.cancel != nil { + b.cancel() + } +} + +// bootstrap does the actual work. If the number of connected peers +// has fallen below b.MinPeerThreshold it will attempt to connect to +// a random subset of its bootstrap peers. +func (b *Bootstrapper) bootstrap(currentPeers []peer.ID) { + ctx, cancel := context.WithTimeout(b.ctx, b.ConnectionTimeout) + var wg sync.WaitGroup + defer func() { + wg.Wait() + // After connecting to bootstrap peers, bootstrap the DHT. + // DHT Bootstrap is a persistent process so only do this once. + cancel() + }() + + for _, bootstrappPeer := range b.bootstrapPeers { + pinfo := bootstrappPeer + // Don't try to connect to an already connected peer. + if hasPID(currentPeers, pinfo.ID) { + continue + } + + wg.Add(1) + go func() { + if err := b.h.Connect(ctx, pinfo); err != nil { + logBootstrap.Debugf("got error trying to connect to bootstrap node %+v: %s", pinfo, err.Error()) + } + b.h.ConnManager().TagPeer(pinfo.ID, "boot-strap", 1000) + wg.Done() + }() + } +} + +func hasPID(pids []peer.ID, pid peer.ID) bool { + for _, p := range pids { + if p == pid { + return true + } + } + return false +} diff --git a/pkg/discovery/bootstrap_test.go b/pkg/discovery/bootstrap_test.go new file mode 100644 index 0000000000..47b3a3d29b --- /dev/null +++ b/pkg/discovery/bootstrap_test.go @@ -0,0 +1,134 @@ +package discovery + +import ( + "context" + "sync" + "testing" + "time" + + offroute "github.com/ipfs/go-ipfs-routing/offline" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/stretchr/testify/assert" + + "github.com/filecoin-project/venus/pkg/repo" + th "github.com/filecoin-project/venus/pkg/testhelpers" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func panicConnect(_ context.Context, _ peer.AddrInfo) error { panic("shouldn't be called") } +func nopPeers() []peer.ID { return []peer.ID{} } +func panicPeers() []peer.ID { panic("shouldn't be called") } + +type blankValidator struct{} + +func (blankValidator) Validate(_ string, _ []byte) error { return nil } +func (blankValidator) Select(_ string, _ [][]byte) (int, error) { return 0, nil } + +func TestBootstrapperStartAndStop(t *testing.T) { + tf.UnitTest(t) + + fakeHost := th.NewFakeHost() + fakeDialer := &th.FakeDialer{PeersImpl: nopPeers} + fakeRouter := offroute.NewOfflineRouter(repo.NewInMemoryRepo().ChainDatastore(), blankValidator{}) + + // Check that Start() causes Bootstrap() to be periodically called and + // that canceling the context causes it to stop being called. Do this + // by stubbing out Bootstrap to keep a count of the number of times it + // is called and to cancel its context after several calls. + b := NewBootstrapper([]peer.AddrInfo{}, fakeHost, fakeDialer, fakeRouter, 0, 200*time.Millisecond) + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // protects callCount + var lk sync.Mutex + callCount := 0 + b.Bootstrap = func([]peer.ID) { + lk.Lock() + defer lk.Unlock() + callCount++ + if callCount == 1 { + + // If b.Period is configured to be a too small, b.ticker will tick + // again before the context's done-channel sees a value. This + // results in a callCount of 4 instead of 3. + cancel() + } + } + + b.Start(ctx) + time.Sleep(1000 * time.Millisecond) + + lk.Lock() + defer lk.Unlock() + assert.Equal(t, 1, callCount) +} + +func TestBootstrapperBootstrap(t *testing.T) { + tf.UnitTest(t) + + t.Run("Doesn't connect if already have enough peers", func(t *testing.T) { + fakeHost := &th.FakeHost{ConnectImpl: panicConnect} + fakeDialer := &th.FakeDialer{PeersImpl: panicPeers} + fakeRouter := offroute.NewOfflineRouter(repo.NewInMemoryRepo().ChainDatastore(), blankValidator{}) + ctx := context.Background() + + b := NewBootstrapper([]peer.AddrInfo{}, fakeHost, fakeDialer, fakeRouter, 1, time.Minute) + currentPeers := []peer.ID{th.RequireRandomPeerID(t)} // Have 1 + b.ctx = ctx + assert.NotPanics(t, func() { b.bootstrap(currentPeers) }) + }) + + var lk sync.Mutex + var connectCount int + countingConnect := func(context.Context, peer.AddrInfo) error { + lk.Lock() + defer lk.Unlock() + connectCount++ + return nil + } + + t.Run("Connects if don't have enough peers", func(t *testing.T) { + fakeHost := &th.FakeHost{ConnectImpl: countingConnect} + lk.Lock() + connectCount = 0 + lk.Unlock() + fakeDialer := &th.FakeDialer{PeersImpl: panicPeers} + fakeRouter := offroute.NewOfflineRouter(repo.NewInMemoryRepo().ChainDatastore(), blankValidator{}) + + bootstrapPeers := []peer.AddrInfo{ + {ID: th.RequireRandomPeerID(t)}, + {ID: th.RequireRandomPeerID(t)}, + } + b := NewBootstrapper(bootstrapPeers, fakeHost, fakeDialer, fakeRouter, 3, time.Minute) + b.ctx = context.Background() + currentPeers := []peer.ID{th.RequireRandomPeerID(t)} // Have 1 + b.bootstrap(currentPeers) + time.Sleep(20 * time.Millisecond) + lk.Lock() + assert.Equal(t, 2, connectCount) + lk.Unlock() + }) + + t.Run("Doesn't try to connect to an already connected peer", func(t *testing.T) { + fakeHost := &th.FakeHost{ConnectImpl: countingConnect} + lk.Lock() + connectCount = 0 + lk.Unlock() + fakeDialer := &th.FakeDialer{PeersImpl: panicPeers} + fakeRouter := offroute.NewOfflineRouter(repo.NewInMemoryRepo().ChainDatastore(), blankValidator{}) + + connectedPeerID := th.RequireRandomPeerID(t) + bootstrapPeers := []peer.AddrInfo{ + {ID: connectedPeerID}, + } + + b := NewBootstrapper(bootstrapPeers, fakeHost, fakeDialer, fakeRouter, 2, time.Minute) // Need 2 bootstrap peers. + b.ctx = context.Background() + currentPeers := []peer.ID{connectedPeerID} // Have 1, which is the bootstrap peer. + b.bootstrap(currentPeers) + time.Sleep(20 * time.Millisecond) + lk.Lock() + assert.Equal(t, 0, connectCount) + lk.Unlock() + }) +} diff --git a/pkg/discovery/cbor_gen.go b/pkg/discovery/cbor_gen.go new file mode 100644 index 0000000000..17579c33b3 --- /dev/null +++ b/pkg/discovery/cbor_gen.go @@ -0,0 +1,245 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package discovery + +import ( + "fmt" + "io" + "sort" + + abi "github.com/filecoin-project/go-state-types/abi" + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = sort.Sort + +var lengthBufHelloMessage = []byte{132} + +func (t *HelloMessage) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufHelloMessage); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.HeaviestTipSetCids (chain.TipSetKey) (struct) + if err := t.HeaviestTipSetCids.MarshalCBOR(w); err != nil { + return err + } + + // t.HeaviestTipSetHeight (abi.ChainEpoch) (int64) + if t.HeaviestTipSetHeight >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.HeaviestTipSetHeight)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.HeaviestTipSetHeight-1)); err != nil { + return err + } + } + + // t.HeaviestTipSetWeight (big.Int) (struct) + if err := t.HeaviestTipSetWeight.MarshalCBOR(w); err != nil { + return err + } + + // t.GenesisHash (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.GenesisHash); err != nil { + return xerrors.Errorf("failed to write cid field t.GenesisHash: %w", err) + } + + return nil +} + +func (t *HelloMessage) UnmarshalCBOR(r io.Reader) error { + *t = HelloMessage{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 4 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.HeaviestTipSetCids (chain.TipSetKey) (struct) + + { + + if err := t.HeaviestTipSetCids.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.HeaviestTipSetCids: %w", err) + } + + } + // t.HeaviestTipSetHeight (abi.ChainEpoch) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.HeaviestTipSetHeight = abi.ChainEpoch(extraI) + } + // t.HeaviestTipSetWeight (big.Int) (struct) + + { + + if err := t.HeaviestTipSetWeight.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.HeaviestTipSetWeight: %w", err) + } + + } + // t.GenesisHash (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.GenesisHash: %w", err) + } + + t.GenesisHash = c + + } + return nil +} + +var lengthBufLatencyMessage = []byte{130} + +func (t *LatencyMessage) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufLatencyMessage); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.TArrival (int64) (int64) + if t.TArrival >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.TArrival)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.TArrival-1)); err != nil { + return err + } + } + + // t.TSent (int64) (int64) + if t.TSent >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.TSent)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.TSent-1)); err != nil { + return err + } + } + return nil +} + +func (t *LatencyMessage) UnmarshalCBOR(r io.Reader) error { + *t = LatencyMessage{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.TArrival (int64) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.TArrival = int64(extraI) + } + // t.TSent (int64) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.TSent = int64(extraI) + } + return nil +} diff --git a/pkg/discovery/hello_protocol.go b/pkg/discovery/hello_protocol.go new file mode 100644 index 0000000000..25f46766af --- /dev/null +++ b/pkg/discovery/hello_protocol.go @@ -0,0 +1,341 @@ +package discovery + +import ( + "bytes" + "context" + "fmt" + "time" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/chainsync/exchange" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/libp2p/go-libp2p-core/peer" + + "github.com/filecoin-project/go-state-types/abi" + fbig "github.com/filecoin-project/go-state-types/big" + fnet "github.com/filecoin-project/venus/pkg/net" + "github.com/ipfs/go-cid" + logging "github.com/ipfs/go-log/v2" + "github.com/libp2p/go-libp2p-core/host" + net "github.com/libp2p/go-libp2p-core/network" + ma "github.com/multiformats/go-multiaddr" + + "github.com/filecoin-project/venus/pkg/metrics" +) + +var log = logging.Logger("/fil/hello") + +// helloProtocolID is the libp2p protocol identifier for the hello protocol. +const helloProtocolID = "/fil/hello/1.0.0" + +var genesisErrCt = metrics.NewInt64Counter("hello_genesis_error", "Number of errors encountered in hello protocol due to incorrect genesis block") +var helloMsgErrCt = metrics.NewInt64Counter("hello_message_error", "Number of errors encountered in hello protocol due to malformed message") + +// HelloMessage is the data structure of a single message in the hello protocol. +type HelloMessage struct { + HeaviestTipSetCids types.TipSetKey + HeaviestTipSetHeight abi.ChainEpoch + HeaviestTipSetWeight fbig.Int + GenesisHash cid.Cid +} + +// LatencyMessage is written in response to a hello message for measuring peer +// latency. +type LatencyMessage struct { + TArrival int64 + TSent int64 +} + +// HelloProtocolHandler implements the 'Hello' protocol handler. +// +// Upon connecting to a new node, we send them a message +// containing some information about the state of our chain, +// and receive the same information from them. This is used to +// initiate a chainsync and detect connections to forks. +type HelloProtocolHandler struct { + host host.Host + + genesis cid.Cid + + // peerDiscovered is called when new peers tell us about their chain + peerDiscovered PeerDiscoveredCallback + + // is used to retrieve the current heaviest tipset + // for filling out our hello messages. + getHeaviestTipSet GetTipSetFunc + + //helloTimeOut is block delay + helloTimeOut time.Duration + + peerMgr fnet.IPeerMgr + exchange exchange.Client + chainStore *chain.Store + messageStore *chain.MessageStore +} + +type PeerDiscoveredCallback func(ci *types.ChainInfo) + +type GetTipSetFunc func() (*types.TipSet, error) + +// NewHelloProtocolHandler creates a new instance of the hello protocol `Handler` and registers it to +// the given `host.Host`. +func NewHelloProtocolHandler(h host.Host, + peerMgr fnet.IPeerMgr, + exchange exchange.Client, + chainStore *chain.Store, + messageStore *chain.MessageStore, + gen cid.Cid, + helloTimeOut time.Duration, +) *HelloProtocolHandler { + return &HelloProtocolHandler{ + host: h, + genesis: gen, + peerMgr: peerMgr, + exchange: exchange, + chainStore: chainStore, + messageStore: messageStore, + helloTimeOut: helloTimeOut, + } +} + +// Register registers the handler with the network. +func (h *HelloProtocolHandler) Register(peerDiscoveredCallback PeerDiscoveredCallback, getHeaviestTipSet GetTipSetFunc) { + // register callbacks + h.peerDiscovered = peerDiscoveredCallback + h.getHeaviestTipSet = getHeaviestTipSet + + // register a handle for when a new connection against someone is created + h.host.SetStreamHandler(helloProtocolID, h.handleNewStream) + + // register for connection notifications + h.host.Network().Notify((*helloProtocolNotifiee)(h)) +} + +func (h *HelloProtocolHandler) handleNewStream(s net.Stream) { + defer s.Close() // nolint: errcheck + ctx, cancel := context.WithTimeout(context.Background(), h.helloTimeOut) + defer cancel() + + hello, err := h.receiveHello(ctx, s) + if err != nil { + helloMsgErrCt.Inc(ctx, 1) + log.Debugf("failed to receive hello message:%s", err) + // can't process a hello received in error, but leave this connection + // open because we connections are innocent until proven guilty + // (with bad genesis) + return + } + latencyMsg := &LatencyMessage{TArrival: time.Now().UnixNano()} + + // process the hello message + from := s.Conn().RemotePeer() + if !hello.GenesisHash.Equals(h.genesis) { + log.Debugf("peer genesis cid: %s does not match ours: %s, disconnecting from peer: %s", &hello.GenesisHash, h.genesis, from) + genesisErrCt.Inc(context.Background(), 1) + _ = s.Conn().Close() + return + } + + go func() { + // Send the latendy message + latencyMsg.TSent = time.Now().UnixNano() + err = h.sendLatency(latencyMsg, s) + if err != nil { + log.Error(err) + } + }() + + protos, err := h.host.Peerstore().GetProtocols(s.Conn().RemotePeer()) + if err != nil { + log.Warnf("got error from peerstore.GetProtocols: %s", err) + } + if len(protos) == 0 { + log.Warn("other peer hasnt completed libp2p identify, waiting a bit") + // TODO: this better + time.Sleep(time.Millisecond * 300) + } + + fullTipSet, err := h.loadLocalFullTipset(ctx, hello.HeaviestTipSetCids) + if err != nil { + fullTipSet, err = h.exchange.GetFullTipSet(ctx, []peer.ID{from}, hello.HeaviestTipSetCids) //nolint + if err == nil { + for _, b := range fullTipSet.Blocks { + _, err = h.chainStore.PutObject(ctx, b.Header) + if err != nil { + log.Errorf("fail to save block to tipset") + return + } + _, err = h.messageStore.StoreMessages(ctx, b.SECPMessages, b.BLSMessages) + if err != nil { + log.Errorf("fail to save block to tipset") + return + } + } + } + h.host.ConnManager().TagPeer(from, "new-block", 40) + } + if err != nil { + log.Warnf("failed to get tipset message from peer %s", from) + return + } + if fullTipSet == nil { + log.Warnf("handleNewStream get null full tipset, it's scarce!") + return + } + + // notify the local node of the new `block.ChainInfo` + h.peerMgr.AddFilecoinPeer(from) + ci := types.NewChainInfo(from, from, fullTipSet.TipSet()) + h.peerDiscovered(ci) +} + +func (h *HelloProtocolHandler) loadLocalFullTipset(ctx context.Context, tsk types.TipSetKey) (*types.FullTipSet, error) { + ts, err := h.chainStore.GetTipSet(ctx, tsk) + if err != nil { + return nil, err + } + + fts := &types.FullTipSet{} + for _, b := range ts.Blocks() { + smsgs, bmsgs, err := h.messageStore.LoadMetaMessages(ctx, b.Messages) + if err != nil { + return nil, err + } + + fb := &types.FullBlock{ + Header: b, + BLSMessages: bmsgs, + SECPMessages: smsgs, + } + fts.Blocks = append(fts.Blocks, fb) + } + + return fts, nil +} + +// ErrBadGenesis is the error returned when a mismatch in genesis blocks happens. +var ErrBadGenesis = fmt.Errorf("bad genesis block") + +func (h *HelloProtocolHandler) getOurHelloMessage() (*HelloMessage, error) { + heaviest, err := h.getHeaviestTipSet() + if err != nil { + return nil, err + } + height := heaviest.Height() + weight := heaviest.ParentWeight() + + return &HelloMessage{ + GenesisHash: h.genesis, + HeaviestTipSetCids: heaviest.Key(), + HeaviestTipSetHeight: height, + HeaviestTipSetWeight: weight, + }, nil +} + +func (h *HelloProtocolHandler) receiveHello(ctx context.Context, s net.Stream) (*HelloMessage, error) { + var hello HelloMessage + err := hello.UnmarshalCBOR(s) + return &hello, err + +} + +func (h *HelloProtocolHandler) receiveLatency(ctx context.Context, s net.Stream) (*LatencyMessage, error) { + var latency LatencyMessage + err := latency.UnmarshalCBOR(s) + if err != nil { + return nil, err + } + return &latency, nil +} + +// sendHello send a hello message on stream `s`. +func (h *HelloProtocolHandler) sendHello(s net.Stream) error { + msg, err := h.getOurHelloMessage() + if err != nil { + return err + } + buf := new(bytes.Buffer) + if err := msg.MarshalCBOR(buf); err != nil { + return err + } + + n, err := s.Write(buf.Bytes()) + if err != nil { + return err + } + if n != buf.Len() { + return fmt.Errorf("could not write all hello message bytes") + } + return nil +} + +// responding to latency +func (h *HelloProtocolHandler) sendLatency(msg *LatencyMessage, s net.Stream) error { + buf := new(bytes.Buffer) + if err := msg.MarshalCBOR(buf); err != nil { + return err + } + n, err := s.Write(buf.Bytes()) + if err != nil { + return err + } + if n != buf.Len() { + return fmt.Errorf("could not write all latency message bytes") + } + return nil +} + +// Note: hide `net.Notifyee` impl using a new-type +type helloProtocolNotifiee HelloProtocolHandler + +const helloTimeout = time.Second * 10 + +func (hn *helloProtocolNotifiee) asHandler() *HelloProtocolHandler { + return (*HelloProtocolHandler)(hn) +} + +// +// `net.Notifyee` impl for `helloNotify` +// + +func (hn *helloProtocolNotifiee) Connected(n net.Network, c net.Conn) { + // Connected is invoked when a connection is made to a libp2p node. + // + // - open stream on connection + // - send HelloMessage` on stream + // - read LatencyMessage response on stream + // + // Terminate the connection if it has a different genesis block + go func() { + // add timeout + ctx, cancel := context.WithTimeout(context.Background(), helloTimeout) + defer cancel() + s, err := hn.asHandler().host.NewStream(ctx, c.RemotePeer(), helloProtocolID) + if err != nil { + // If peer does not do hello keep connection open + return + } + defer func() { _ = s.Close() }() + // send out the hello message + err = hn.asHandler().sendHello(s) + if err != nil { + log.Debugf("failed to send hello handshake to peer %s: %s", c.RemotePeer(), err) + // Don't close connection for failed hello protocol impl + return + } + + // now receive latency message + _, err = hn.asHandler().receiveLatency(ctx, s) + if err != nil { + log.Debugf("failed to receive hello latency msg from peer %s: %s", c.RemotePeer(), err) + return + } + + }() +} + +func (hn *helloProtocolNotifiee) Listen(n net.Network, a ma.Multiaddr) { /* empty */ } +func (hn *helloProtocolNotifiee) ListenClose(n net.Network, a ma.Multiaddr) { /* empty */ } +func (hn *helloProtocolNotifiee) Disconnected(n net.Network, c net.Conn) { /* empty */ } +func (hn *helloProtocolNotifiee) OpenedStream(n net.Network, s net.Stream) { /* empty */ } +func (hn *helloProtocolNotifiee) ClosedStream(n net.Network, s net.Stream) { /* empty */ } diff --git a/pkg/discovery/hello_protocol_test.go b/pkg/discovery/hello_protocol_test.go new file mode 100644 index 0000000000..a62c4db833 --- /dev/null +++ b/pkg/discovery/hello_protocol_test.go @@ -0,0 +1,198 @@ +package discovery_test + +import ( + "context" + "testing" + "time" + + ds "github.com/ipfs/go-datastore" + "github.com/libp2p/go-libp2p-core/host" + dht "github.com/libp2p/go-libp2p-kad-dht" + + "github.com/filecoin-project/go-address" + mocknet "github.com/libp2p/go-libp2p/p2p/net/mock" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/discovery" + "github.com/filecoin-project/venus/pkg/net" + "github.com/filecoin-project/venus/pkg/repo" + th "github.com/filecoin-project/venus/pkg/testhelpers" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type mockHelloCallback struct { + mock.Mock +} + +func (msb *mockHelloCallback) HelloCallback(ci *types.ChainInfo) { + msb.Called(ci.Sender, ci.Head.Key()) +} + +type mockHeaviestGetter struct { + heaviest *types.TipSet +} + +func (mhg *mockHeaviestGetter) getHeaviestTipSet() (*types.TipSet, error) { + return mhg.heaviest, nil +} + +func TestHelloHandshake(t *testing.T) { + tf.UnitTest(t) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + mn, err := mocknet.WithNPeers(ctx, 2) + require.NoError(t, err) + + a := mn.Hosts()[0] + b := mn.Hosts()[1] + + builder := chain.NewBuilder(t, address.Undef) + + genesisA := builder.Genesis() + store := builder.Store() + mstore := builder.Mstore() + heavy1 := builder.AppendOn(ctx, genesisA, 1) + heavy2 := builder.AppendOn(ctx, heavy1, 1) + + msc1, msc2 := new(mockHelloCallback), new(mockHelloCallback) + hg1, hg2 := &mockHeaviestGetter{heavy1}, &mockHeaviestGetter{heavy2} + + //peer manager + aPeerMgr, err := mockPeerMgr(ctx, t, a) + require.NoError(t, err) + + discovery.NewHelloProtocolHandler(a, aPeerMgr, nil, store, mstore, genesisA.Blocks()[0].Cid(), time.Second*30).Register(msc1.HelloCallback, hg1.getHeaviestTipSet) + discovery.NewHelloProtocolHandler(b, aPeerMgr, nil, store, mstore, genesisA.Blocks()[0].Cid(), time.Second*30).Register(msc2.HelloCallback, hg2.getHeaviestTipSet) + + msc1.On("HelloCallback", b.ID(), heavy2.Key()).Return() + msc2.On("HelloCallback", a.ID(), heavy1.Key()).Return() + + require.NoError(t, mn.LinkAll()) + require.NoError(t, mn.ConnectAllButSelf()) + + require.NoError(t, th.WaitForIt(10, 50*time.Millisecond, func() (bool, error) { + var msc1Done bool + var msc2Done bool + for _, call := range msc1.Calls { + if call.Method == "HelloCallback" { + if _, differences := msc1.ExpectedCalls[0].Arguments.Diff(call.Arguments); differences == 0 { + msc1Done = true + break + } + } + } + for _, call := range msc2.Calls { + if call.Method == "HelloCallback" { + if _, differences := msc2.ExpectedCalls[0].Arguments.Diff(call.Arguments); differences == 0 { + msc2Done = true + break + } + } + } + + return msc1Done && msc2Done, nil + })) +} + +func TestHelloBadGenesis(t *testing.T) { + tf.UnitTest(t) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + mn, err := mocknet.WithNPeers(ctx, 2) + assert.NoError(t, err) + + a := mn.Hosts()[0] + b := mn.Hosts()[1] + + builder := chain.NewBuilder(t, address.Undef) + store := builder.Store() + mstore := builder.Mstore() + + genesisA := builder.AppendOn(ctx, types.UndefTipSet, 1) + genesisB := builder.AppendOn(ctx, types.UndefTipSet, 1) + + heavy1 := builder.AppendOn(ctx, genesisA, 1) + heavy2 := builder.AppendOn(ctx, heavy1, 1) + + msc1, msc2 := new(mockHelloCallback), new(mockHelloCallback) + hg1, hg2 := &mockHeaviestGetter{heavy1}, &mockHeaviestGetter{heavy2} + + //peer manager + peerMgr, err := mockPeerMgr(ctx, t, a) + require.NoError(t, err) + + discovery.NewHelloProtocolHandler(a, peerMgr, nil, store, mstore, genesisA.Blocks()[0].Cid(), time.Second*30).Register(msc1.HelloCallback, hg1.getHeaviestTipSet) + discovery.NewHelloProtocolHandler(b, peerMgr, nil, store, mstore, genesisB.Blocks()[0].Cid(), time.Second*30).Register(msc2.HelloCallback, hg2.getHeaviestTipSet) + + msc1.On("HelloCallback", mock.Anything, mock.Anything, mock.Anything).Return() + msc2.On("HelloCallback", mock.Anything, mock.Anything, mock.Anything).Return() + + require.NoError(t, mn.LinkAll()) + require.NoError(t, mn.ConnectAllButSelf()) + + time.Sleep(time.Second) + + msc1.AssertNumberOfCalls(t, "HelloCallback", 0) + msc2.AssertNumberOfCalls(t, "HelloCallback", 0) +} + +func TestHelloMultiBlock(t *testing.T) { + tf.UnitTest(t) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + mn, err := mocknet.WithNPeers(ctx, 2) + assert.NoError(t, err) + + a := mn.Hosts()[0] + b := mn.Hosts()[1] + + builder := chain.NewBuilder(t, address.Undef) + store := builder.Store() + mstore := builder.Mstore() + + genesisTipset := builder.Genesis() + assert.Equal(t, 1, genesisTipset.Len()) + + heavy1 := builder.AppendOn(ctx, genesisTipset, 3) + heavy1 = builder.AppendOn(ctx, heavy1, 3) + heavy2 := builder.AppendOn(ctx, heavy1, 3) + + msc1, msc2 := new(mockHelloCallback), new(mockHelloCallback) + hg1, hg2 := &mockHeaviestGetter{heavy1}, &mockHeaviestGetter{heavy2} + + //peer manager + peerMgr, err := mockPeerMgr(ctx, t, a) + require.NoError(t, err) + + discovery.NewHelloProtocolHandler(a, peerMgr, nil, store, mstore, genesisTipset.At(0).Cid(), time.Second*30).Register(msc1.HelloCallback, hg1.getHeaviestTipSet) + discovery.NewHelloProtocolHandler(b, peerMgr, nil, store, mstore, genesisTipset.At(0).Cid(), time.Second*30).Register(msc2.HelloCallback, hg2.getHeaviestTipSet) + + msc1.On("HelloCallback", b.ID(), heavy2.Key()).Return() + msc2.On("HelloCallback", a.ID(), heavy1.Key()).Return() + + assert.NoError(t, mn.LinkAll()) + assert.NoError(t, mn.ConnectAllButSelf()) + + time.Sleep(time.Second * 5) + + msc1.AssertExpectations(t) + msc2.AssertExpectations(t) +} + +func mockPeerMgr(ctx context.Context, t *testing.T, h host.Host) (*net.PeerMgr, error) { + addrInfo, err := net.ParseAddresses(ctx, repo.NewInMemoryRepo().Config().Bootstrap.Addresses) + require.NoError(t, err) + + return net.NewPeerMgr(h, dht.NewDHT(ctx, h, ds.NewMapDatastore()), 10, addrInfo) +} diff --git a/internal/pkg/discovery/noop_discovery.go b/pkg/discovery/noop_discovery.go similarity index 81% rename from internal/pkg/discovery/noop_discovery.go rename to pkg/discovery/noop_discovery.go index a1daaf63fb..162c309111 100644 --- a/internal/pkg/discovery/noop_discovery.go +++ b/pkg/discovery/noop_discovery.go @@ -5,15 +5,15 @@ import ( "time" libp2pdisc "github.com/libp2p/go-libp2p-core/discovery" - pstore "github.com/libp2p/go-libp2p-peerstore" // nolint: staticcheck + "github.com/libp2p/go-libp2p-core/peer" ) // NoopDiscovery satisfies the discovery interface without doing anything type NoopDiscovery struct{} // FindPeers returns a dead channel that is always closed -func (sd *NoopDiscovery) FindPeers(ctx context.Context, ns string, opts ...libp2pdisc.Option) (<-chan pstore.PeerInfo, error) { // nolint: staticcheck - closedCh := make(chan pstore.PeerInfo) // nolint: staticcheck +func (sd *NoopDiscovery) FindPeers(ctx context.Context, ns string, opts ...libp2pdisc.Option) (<-chan peer.AddrInfo, error) { // nolint: staticcheck + closedCh := make(chan peer.AddrInfo) // nolint: staticcheck // the output is immediately closed, discovery requests end immediately // Callstack: // https://github.com/libp2p/go-libp2p-pubsub/blob/55f4ad6eb98b9e617e46641e7078944781abb54c/discovery.go#L157 diff --git a/pkg/discovery/peer_tracker.go b/pkg/discovery/peer_tracker.go new file mode 100644 index 0000000000..b2b318392b --- /dev/null +++ b/pkg/discovery/peer_tracker.go @@ -0,0 +1,142 @@ +package discovery + +import ( + "sort" + "sync" + + types "github.com/filecoin-project/venus/venus-shared/chain" + logging "github.com/ipfs/go-log/v2" + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/pkg/errors" +) + +var logPeerTracker = logging.Logger("peer-tracker") + +// PeerTracker is used to record a subset of peers. Its methods are thread safe. +// It is designed to plug directly into libp2p disconnect notifications to +// automatically register dropped connections. +type PeerTracker struct { + // mu protects peers + mu sync.RWMutex + + // self tracks the ID of the peer tracker's owner + self peer.ID + + // peers maps peer.IDs to info about their chains + peers map[peer.ID]*types.ChainInfo + trusted map[peer.ID]struct{} +} + +// NewPeerTracker creates a peer tracker. +func NewPeerTracker(self peer.ID, trust ...peer.ID) *PeerTracker { + trustedSet := make(map[peer.ID]struct{}, len(trust)) + for _, t := range trust { + trustedSet[t] = struct{}{} + } + return &PeerTracker{ + peers: make(map[peer.ID]*types.ChainInfo), + trusted: trustedSet, + self: self, + } +} + +// SelectHead returns the chain info from trusted peers with the greatest height. +// An error is returned if no peers are in the tracker. +func (tracker *PeerTracker) SelectHead() (*types.ChainInfo, error) { + heads := tracker.listTrusted() + if len(heads) == 0 { + return nil, errors.New("no peers tracked") + } + sort.Slice(heads, func(i, j int) bool { return heads[i].Head.Height() > heads[j].Head.Height() }) + return heads[0], nil +} + +// Track adds information about a given peer.ID +func (tracker *PeerTracker) Track(ci *types.ChainInfo) { + tracker.mu.Lock() + defer tracker.mu.Unlock() + + _, tracking := tracker.peers[ci.Sender] + _, trusted := tracker.trusted[ci.Sender] + tracker.peers[ci.Sender] = ci + logPeerTracker.Infow("Track peer", "chainInfo", ci, "new", !tracking, "count", len(tracker.peers), "trusted", trusted) +} + +// Self returns the peer tracker's owner ID +func (tracker *PeerTracker) Self() peer.ID { + return tracker.self +} + +// List returns the chain info of the currently tracked peers (both trusted and untrusted). +// The info tracked by the tracker can change arbitrarily after this is called -- there is no +// guarantee that the peers returned will be tracked when they are used by the caller and no +// guarantee that the chain info is up to date. +func (tracker *PeerTracker) List() []*types.ChainInfo { + tracker.mu.Lock() + defer tracker.mu.Unlock() + + var tracked []*types.ChainInfo + for _, ci := range tracker.peers { + tracked = append(tracked, ci) + } + out := make([]*types.ChainInfo, len(tracked)) + copy(out, tracked) + return out +} + +// Remove removes a peer ID from the tracker. +func (tracker *PeerTracker) Remove(pid peer.ID) { + tracker.mu.Lock() + defer tracker.mu.Unlock() + + _, trusted := tracker.trusted[pid] + if _, tracking := tracker.peers[pid]; tracking { + delete(tracker.peers, pid) + if trusted { + logPeerTracker.Warnw("Dropping peer", "peer", pid.Pretty(), "trusted", trusted) + } else { + logPeerTracker.Infow("Dropping peer", "peer", pid.Pretty(), "trusted", trusted) + } + } +} + +// RegisterDisconnect registers a tracker remove operation as a libp2p +// "Disconnected" network event callback. +func (tracker *PeerTracker) RegisterDisconnect(ntwk network.Network) { + notifee := &network.NotifyBundle{} + notifee.DisconnectedF = func(network network.Network, conn network.Conn) { + pid := conn.RemotePeer() + tracker.Remove(pid) + } + ntwk.Notify(notifee) +} + +// trustedPeers returns a slice of peers trusted by the PeerTracker. trustedPeers remain constant after +// the PeerTracker has been initialized. +// nolint +func (tracker *PeerTracker) trustedPeers() []peer.ID { + var peers []peer.ID + for p := range tracker.trusted { + peers = append(peers, p) + } + return peers +} + +// listTrusted returns the chain info of the trusted tracked peers. The info tracked by the tracker can +// change arbitrarily after this is called -- there is no guarantee that the peers returned will be +// tracked when they are used by the caller and no guarantee that the chain info is up to date. +func (tracker *PeerTracker) listTrusted() []*types.ChainInfo { + tracker.mu.Lock() + defer tracker.mu.Unlock() + + var tracked []*types.ChainInfo + for p, ci := range tracker.peers { + if _, trusted := tracker.trusted[p]; trusted { + tracked = append(tracked, ci) + } + } + out := make([]*types.ChainInfo, len(tracked)) + copy(out, tracked) + return out +} diff --git a/pkg/discovery/peer_tracker_test.go b/pkg/discovery/peer_tracker_test.go new file mode 100644 index 0000000000..39134395e0 --- /dev/null +++ b/pkg/discovery/peer_tracker_test.go @@ -0,0 +1,132 @@ +package discovery_test + +import ( + "context" + "testing" + "time" + + "github.com/filecoin-project/venus/pkg/util/test" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/libp2p/go-libp2p-core/network" + + "github.com/filecoin-project/venus/pkg/discovery" + "github.com/libp2p/go-libp2p-core/peer" + mocknet "github.com/libp2p/go-libp2p/p2p/net/mock" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + th "github.com/filecoin-project/venus/pkg/testhelpers" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestPeerTrackerSelectHead(t *testing.T) { + tf.UnitTest(t) + + pid0 := th.RequireIntPeerID(t, 0) + pid1 := th.RequireIntPeerID(t, 1) + pid2 := th.RequireIntPeerID(t, 2) + pid3 := th.RequireIntPeerID(t, 3) + + ci0 := types.NewChainInfo(pid0, pid0, th.RequireTipsetWithHeight(t, 6)) + ci1 := types.NewChainInfo(pid1, pid1, th.RequireTipsetWithHeight(t, 10)) + ci2 := types.NewChainInfo(pid2, pid2, th.RequireTipsetWithHeight(t, 7)) + ci3 := types.NewChainInfo(pid3, pid3, th.RequireTipsetWithHeight(t, 9)) + + // trusting pid2 and pid3 + tracker := discovery.NewPeerTracker(pid2, pid3) + tracker.Track(ci0) + tracker.Track(ci1) + tracker.Track(ci2) + tracker.Track(ci3) + + // select the highest head + head, err := tracker.SelectHead() + assert.NoError(t, err) + assert.Equal(t, head.Head, ci3.Head) +} + +func TestPeerTrackerRemove(t *testing.T) { + tf.UnitTest(t) + + tracker := discovery.NewPeerTracker(peer.ID("")) + pid0 := th.RequireIntPeerID(t, 0) + pid1 := th.RequireIntPeerID(t, 1) + pid3 := th.RequireIntPeerID(t, 3) + pid7 := th.RequireIntPeerID(t, 7) + + ci0 := types.NewChainInfo(pid0, pid0, th.RequireTipsetWithHeight(t, 6)) + ci1 := types.NewChainInfo(pid1, pid1, th.RequireTipsetWithHeight(t, 0)) + ci3 := types.NewChainInfo(pid3, pid3, th.RequireTipsetWithHeight(t, 0)) + ci7 := types.NewChainInfo(pid7, pid7, th.RequireTipsetWithHeight(t, 0)) + + tracker.Track(ci0) + tracker.Track(ci1) + tracker.Track(ci3) + tracker.Track(ci7) + + tracker.Remove(pid1) + tracker.Remove(pid3) + tracker.Remove(pid7) + + tracked := tracker.List() + expected := []*types.ChainInfo{ci0} + assert.Equal(t, expected, tracked) +} + +func TestPeerTrackerNetworkDisconnect(t *testing.T) { + tf.UnitTest(t) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + mn, err := mocknet.FullMeshConnected(ctx, 4) + require.NoError(t, err) + + self := mn.Hosts()[0] + a := mn.Hosts()[1] + b := mn.Hosts()[2] + c := mn.Hosts()[3] + + selfID := self.ID() + aID := a.ID() + bID := b.ID() + cID := c.ID() + + aCI := types.NewChainInfo(aID, aID, th.RequireTipsetWithHeight(t, 0)) + bCI := types.NewChainInfo(bID, bID, th.RequireTipsetWithHeight(t, 0)) + + // self is the tracking node + // self tracks peers a and b + // self does not track peer c + tracker := discovery.NewPeerTracker(peer.ID("")) + tracker.Track(aCI) + tracker.Track(bCI) + + // register tracker OnDisconnect callback in self's network + disconnect := make(chan error) + notifee := &network.NotifyBundle{} + notifee.DisconnectedF = func(network network.Network, conn network.Conn) { + disconnect <- nil + } + self.Network().Notify(notifee) + + tracker.RegisterDisconnect(self.Network()) + + waitForDisConnect := func() { + select { + case <-time.After(time.Second * 5): + t.Errorf("time out for wait disconnect notify") + case <-disconnect: + } + } + + // disconnect from tracked a and untracked c + require.NoError(t, mn.DisconnectPeers(selfID, aID)) + waitForDisConnect() + require.NoError(t, mn.DisconnectPeers(selfID, cID)) + waitForDisConnect() + + time.Sleep(time.Second) + tracked := tracker.List() + test.Equal(t, []*types.ChainInfo{bCI}, tracked) +} diff --git a/pkg/events/cache.go b/pkg/events/cache.go new file mode 100644 index 0000000000..d9558f2d8e --- /dev/null +++ b/pkg/events/cache.go @@ -0,0 +1,40 @@ +package events + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/ipfs/go-cid" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type uncachedAPI interface { + ChainNotify(context.Context) <-chan []*apitypes.HeadChange + ChainGetPath(ctx context.Context, from, to types.TipSetKey) ([]*apitypes.HeadChange, error) + StateSearchMsg(ctx context.Context, from types.TipSetKey, msg cid.Cid, limit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) + + StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) // optional / for CalledMsg + + ChainGetTipSetAfterHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) + ChainGetTipSetByHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) + ChainGetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) + ChainHead(context.Context) (*types.TipSet, error) +} + +type cache struct { + //*tipSetCache + *messageCache + uncachedAPI +} + +func newCache(api IEvent, gcConfidence abi.ChainEpoch) *cache { + return &cache{ + //newTSCache(api, gcConfidence), + newMessageCache(api), + api, + } +} diff --git a/pkg/events/eventAPI.go b/pkg/events/eventAPI.go new file mode 100644 index 0000000000..3b20bdb434 --- /dev/null +++ b/pkg/events/eventAPI.go @@ -0,0 +1,31 @@ +package events + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// A TipSetObserver receives notifications of tipsets +type TipSetObserver interface { + Apply(ctx context.Context, from, to *types.TipSet) error + Revert(ctx context.Context, from, to *types.TipSet) error +} + +type IEvent interface { + ChainNotify(context.Context) <-chan []*apitypes.HeadChange + ChainGetBlockMessages(context.Context, cid.Cid) (*apitypes.BlockMessages, error) + ChainGetTipSetByHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) + ChainGetTipSetAfterHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) + ChainHead(context.Context) (*types.TipSet, error) + StateSearchMsg(ctx context.Context, from types.TipSetKey, msg cid.Cid, limit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) + ChainGetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) + ChainGetPath(ctx context.Context, from, to types.TipSetKey) ([]*apitypes.HeadChange, error) + + StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) // optional / for CalledMsg +} diff --git a/pkg/events/events.go b/pkg/events/events.go new file mode 100644 index 0000000000..5f3daf222e --- /dev/null +++ b/pkg/events/events.go @@ -0,0 +1,44 @@ +package events + +import ( + "context" + + "github.com/filecoin-project/go-state-types/abi" + logging "github.com/ipfs/go-log/v2" + + "github.com/filecoin-project/venus/pkg/constants" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var log = logging.Logger("events") + +// HeightHandler `curH`-`ts.Height` = `confidence` +type ( + HeightHandler func(ctx context.Context, ts *types.TipSet, curH abi.ChainEpoch) error + RevertHandler func(ctx context.Context, ts *types.TipSet) error +) + +type Events struct { + *observer + *heightEvents + *hcEvents +} + +func NewEventsWithConfidence(ctx context.Context, api IEvent, gcConfidence abi.ChainEpoch) (*Events, error) { + cache := newCache(api, gcConfidence) + + ob := newObserver(cache, gcConfidence) + if err := ob.start(ctx); err != nil { + return nil, err + } + + he := newHeightEvents(cache, ob, gcConfidence) + headChange := newHCEvents(cache, ob) + + return &Events{ob, he, headChange}, nil +} + +func NewEvents(ctx context.Context, api IEvent) (*Events, error) { + gcConfidence := 2 * constants.ForkLengthThreshold + return NewEventsWithConfidence(ctx, api, gcConfidence) +} diff --git a/pkg/events/events_called.go b/pkg/events/events_called.go new file mode 100644 index 0000000000..b747dc35ac --- /dev/null +++ b/pkg/events/events_called.go @@ -0,0 +1,566 @@ +package events + +import ( + "context" + "math" + "sync" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/constants" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +const NoTimeout = math.MaxInt64 +const NoHeight = abi.ChainEpoch(-1) + +type triggerID = uint64 + +// msgH is the block height at which a message was present / event has happened +type msgH = abi.ChainEpoch + +// triggerH is the block height at which the listener will be notified about the +// message (msgH+confidence) +type triggerH = abi.ChainEpoch + +type eventData interface{} + +// EventHandler arguments: +// `prevTs` is the previous tipset, eg the "from" tipset for a state change. +// `ts` is the event tipset, eg the tipset in which the `msg` is included. +// `curH`-`ts.Height` = `confidence` +type EventHandler func(ctx context.Context, data eventData, prevTs, ts *types.TipSet, curH abi.ChainEpoch) (more bool, err error) + +// CheckFunc is used for atomicity guarantees. If the condition the callbacks +// wait for has already happened in tipset `ts` +// +// If `done` is true, timeout won't be triggered +// If `more` is false, no messages will be sent to EventHandler (RevertHandler +// may still be called) +type CheckFunc func(ctx context.Context, ts *types.TipSet) (done bool, more bool, err error) + +// Keep track of information for an event handler +type handlerInfo struct { + confidence int + timeout abi.ChainEpoch + + disabled bool // TODO: GC after gcConfidence reached + + handle EventHandler + revert RevertHandler +} + +// When a change occurs, a queuedEvent is created and put into a queue +// until the required confidence is reached +type queuedEvent struct { + trigger triggerID + data eventData + + prevTipset, tipset *types.TipSet + + called bool +} + +// Manages chain head change events, which may be forward (new tipset added to +// chain) or backward (chain branch discarded in favour of heavier branch) +type hcEvents struct { + cs IEvent + + lk sync.Mutex + lastTS *types.TipSet + + ctr triggerID + + // TODO: get rid of trigger IDs and just use pointers as keys. + triggers map[triggerID]*handlerInfo + + // TODO: instead of scheduling events in the future, look at the chain in the past. We can sip the "confidence" queue entirely. + // maps block heights to events + // [triggerH][msgH][event] + confQueue map[triggerH]map[msgH][]*queuedEvent + + // [msgH][triggerH] + revertQueue map[msgH][]triggerH + + // [timeoutH+confidence][triggerID]{calls} + timeouts map[abi.ChainEpoch]map[triggerID]int + + messageEvents + watcherEvents +} + +func newHCEvents(api IEvent, obs *observer) *hcEvents { + e := &hcEvents{ + cs: api, + confQueue: map[triggerH]map[msgH][]*queuedEvent{}, + revertQueue: map[msgH][]triggerH{}, + triggers: map[triggerID]*handlerInfo{}, + timeouts: map[abi.ChainEpoch]map[triggerID]int{}, + } + + e.messageEvents = newMessageEvents(e, api) + e.watcherEvents = newWatcherEvents(e, api) + + // We need to take the lock as the observer could immediately try calling us. + e.lk.Lock() + e.lastTS = obs.Observe((*hcEventsObserver)(e)) + e.lk.Unlock() + + return e +} + +type hcEventsObserver hcEvents + +func (e *hcEventsObserver) Apply(ctx context.Context, from, to *types.TipSet) error { + e.lk.Lock() + defer e.lk.Unlock() + + defer func() { e.lastTS = to }() + + // Check if the head change caused any state changes that we were + // waiting for + stateChanges := e.checkStateChanges(from, to) + + // Queue up calls until there have been enough blocks to reach + // confidence on the state changes + for tid, data := range stateChanges { + e.queueForConfidence(tid, data, from, to) + } + + // Check if the head change included any new message calls + newCalls := e.checkNewCalls(ctx, from, to) + + // Queue up calls until there have been enough blocks to reach + // confidence on the message calls + for tid, calls := range newCalls { + for _, data := range calls { + e.queueForConfidence(tid, data, nil, to) + } + } + + for at := from.Height() + 1; at <= to.Height(); at++ { + // Apply any queued events and timeouts that were targeted at the + // current chain height + e.applyWithConfidence(ctx, at) + e.applyTimeouts(ctx, at, to) + } + return nil +} + +func (e *hcEventsObserver) Revert(ctx context.Context, from, to *types.TipSet) error { + e.lk.Lock() + defer e.lk.Unlock() + + defer func() { e.lastTS = to }() + + reverts, ok := e.revertQueue[from.Height()] + if !ok { + return nil // nothing to do + } + + for _, triggerH := range reverts { + toRevert := e.confQueue[triggerH][from.Height()] + for _, event := range toRevert { + if !event.called { + continue // event wasn't apply()-ied yet + } + + trigger := e.triggers[event.trigger] + + if err := trigger.revert(ctx, from); err != nil { + log.Errorf("reverting chain trigger (@H %d, triggered @ %d) failed: %s", from.Height(), triggerH, err) + } + } + delete(e.confQueue[triggerH], from.Height()) + } + delete(e.revertQueue, from.Height()) + return nil +} + +// Queue up events until the chain has reached a height that reflects the +// desired confidence +func (e *hcEventsObserver) queueForConfidence(trigID uint64, data eventData, prevTS, ts *types.TipSet) { + trigger := e.triggers[trigID] + + appliedH := ts.Height() + + triggerH := appliedH + abi.ChainEpoch(trigger.confidence) + + byOrigH, ok := e.confQueue[triggerH] + if !ok { + byOrigH = map[abi.ChainEpoch][]*queuedEvent{} + e.confQueue[triggerH] = byOrigH + } + + byOrigH[appliedH] = append(byOrigH[appliedH], &queuedEvent{ + trigger: trigID, + data: data, + tipset: ts, + prevTipset: prevTS, + }) + + e.revertQueue[appliedH] = append(e.revertQueue[appliedH], triggerH) +} + +// Apply any events that were waiting for this chain height for confidence +func (e *hcEventsObserver) applyWithConfidence(ctx context.Context, height abi.ChainEpoch) { + byOrigH, ok := e.confQueue[height] + if !ok { + return // no triggers at this height + } + + for origH, events := range byOrigH { + for _, event := range events { + if event.called { + continue + } + + trigger := e.triggers[event.trigger] + if trigger.disabled { + continue + } + + more, err := trigger.handle(ctx, event.data, event.prevTipset, event.tipset, height) + if err != nil { + log.Errorf("chain trigger (@H %d, triggered @ %d) failed: %s", origH, height, err) + continue // don't revert failed calls + } + + event.called = true + + touts, ok := e.timeouts[trigger.timeout] + if ok { + touts[event.trigger]++ + } + + trigger.disabled = !more + } + } +} + +// Apply any timeouts that expire at this height +func (e *hcEventsObserver) applyTimeouts(ctx context.Context, at abi.ChainEpoch, ts *types.TipSet) { + triggers, ok := e.timeouts[at] + if !ok { + return // nothing to do + } + + for triggerID, calls := range triggers { + if calls > 0 { + continue // don't timeout if the method was called + } + trigger := e.triggers[triggerID] + if trigger.disabled { + continue + } + + // This should be cached. + timeoutTS, err := e.cs.ChainGetTipSetAfterHeight(ctx, at-abi.ChainEpoch(trigger.confidence), ts.Key()) + if err != nil { + log.Errorf("events: applyTimeouts didn't find tipset for event; wanted %d; current %d", at-abi.ChainEpoch(trigger.confidence), at) + } + + more, err := trigger.handle(ctx, nil, nil, timeoutTS, at) + if err != nil { + log.Errorf("chain trigger (call @H %d, called @ %d) failed: %s", timeoutTS.Height(), at, err) + continue // don't revert failed calls + } + + trigger.disabled = !more // allows messages after timeout + } +} + +// Listen for an event +// - CheckFunc: immediately checks if the event already occurred +// - EventHandler: called when the event has occurred, after confidence tipsets +// - RevertHandler: called if the chain head changes causing the event to revert +// - confidence: wait this many tipsets before calling EventHandler +// - timeout: at this chain height, timeout on waiting for this event +func (e *hcEvents) onHeadChanged(ctx context.Context, check CheckFunc, hnd EventHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch) (triggerID, error) { + e.lk.Lock() + defer e.lk.Unlock() + + // Check if the event has already occurred + done, more, err := check(ctx, e.lastTS) + if err != nil { + return 0, xerrors.Errorf("called check error (h: %d): %w", e.lastTS.Height(), err) + } + if done { + timeout = NoTimeout + } + + id := e.ctr + e.ctr++ + + e.triggers[id] = &handlerInfo{ + confidence: confidence, + timeout: timeout + abi.ChainEpoch(confidence), + + disabled: !more, + + handle: hnd, + revert: rev, + } + + // If there's a timeout, set up a timeout check at that height + if timeout != NoTimeout { + if e.timeouts[timeout+abi.ChainEpoch(confidence)] == nil { + e.timeouts[timeout+abi.ChainEpoch(confidence)] = map[uint64]int{} + } + e.timeouts[timeout+abi.ChainEpoch(confidence)][id] = 0 + } + + return id, nil +} + +// headChangeAPI is used to allow the composed event APIs to call back to hcEvents +// to listen for changes +type headChangeAPI interface { + onHeadChanged(ctx context.Context, check CheckFunc, hnd EventHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch) (triggerID, error) +} + +// watcherEvents watches for a state change +type watcherEvents struct { + cs IEvent + hcAPI headChangeAPI + + lk sync.RWMutex + matchers map[triggerID]StateMatchFunc +} + +func newWatcherEvents(hcAPI headChangeAPI, cs IEvent) watcherEvents { + return watcherEvents{ + cs: cs, + hcAPI: hcAPI, + matchers: make(map[triggerID]StateMatchFunc), + } +} + +// Run each of the matchers against the previous and current state to see if +// there's a change +func (we *watcherEvents) checkStateChanges(oldState, newState *types.TipSet) map[triggerID]eventData { + we.lk.RLock() + defer we.lk.RUnlock() + + res := make(map[triggerID]eventData) + for tid, matchFn := range we.matchers { + ok, data, err := matchFn(oldState, newState) + if err != nil { + log.Errorf("event diff fn failed: %s", err) + continue + } + + if ok { + res[tid] = data + } + } + return res +} + +// StateChange represents a change in state +type StateChange interface{} + +// StateChangeHandler arguments: +// `oldTs` is the state "from" tipset +// `newTs` is the state "to" tipset +// `states` is the change in state +// `curH`-`ts.Height` = `confidence` +type StateChangeHandler func(oldTs, newTs *types.TipSet, states StateChange, curH abi.ChainEpoch) (more bool, err error) + +type StateMatchFunc func(oldTs, newTs *types.TipSet) (bool, StateChange, error) + +// StateChanged registers a callback which is triggered when a specified state +// change occurs or a timeout is reached. +// +// * `CheckFunc` callback is invoked immediately with a recent tipset, it +// returns two booleans - `done`, and `more`. +// +// * `done` should be true when some on-chain state change we are waiting +// for has happened. When `done` is set to true, timeout trigger is disabled. +// +// * `more` should be false when we don't want to receive new notifications +// through StateChangeHandler. Note that notifications may still be delivered to +// RevertHandler +// +// * `StateChangeHandler` is called when the specified state change was observed +// on-chain, and a confidence threshold was reached, or the specified `timeout` +// height was reached with no state change observed. When this callback is +// invoked on a timeout, `oldTs` and `states are set to nil. +// This callback returns a boolean specifying whether further notifications +// should be sent, like `more` return param from `CheckFunc` above. +// +// * `RevertHandler` is called after apply handler, when we drop the tipset +// containing the message. The tipset passed as the argument is the tipset +// that is being dropped. Note that the event dropped may be re-applied +// in a different tipset in small amount of time. +// +// * `StateMatchFunc` is called against each tipset state. If there is a match, +// the state change is queued up until the confidence interval has elapsed (and +// `StateChangeHandler` is called) +func (we *watcherEvents) StateChanged(check CheckFunc, scHnd StateChangeHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch, mf StateMatchFunc) error { + hnd := func(ctx context.Context, data eventData, prevTs, ts *types.TipSet, height abi.ChainEpoch) (bool, error) { + states, ok := data.(StateChange) + if data != nil && !ok { + panic("expected StateChange") + } + + return scHnd(prevTs, ts, states, height) + } + + id, err := we.hcAPI.onHeadChanged(context.TODO(), check, hnd, rev, confidence, timeout) + if err != nil { + return err + } + + we.lk.Lock() + defer we.lk.Unlock() + we.matchers[id] = mf + + return nil +} + +// messageEvents watches for message calls to actors +type messageEvents struct { + cs IEvent + hcAPI headChangeAPI + + lk sync.RWMutex + matchers map[triggerID]MsgMatchFunc +} + +func newMessageEvents(hcAPI headChangeAPI, cs IEvent) messageEvents { + return messageEvents{ + cs: cs, + hcAPI: hcAPI, + matchers: make(map[triggerID]MsgMatchFunc), + } +} + +// Check if there are any new actor calls +func (me *messageEvents) checkNewCalls(ctx context.Context, from, to *types.TipSet) map[triggerID][]eventData { + me.lk.RLock() + defer me.lk.RUnlock() + + // For each message in the tipset + res := make(map[triggerID][]eventData) + me.messagesForTs(from, func(msg *types.Message) { + // TODO: provide receipts + + // Run each trigger's matcher against the message + for tid, matchFn := range me.matchers { + matched, err := matchFn(msg) + if err != nil { + log.Errorf("event matcher failed: %s", err) + continue + } + + // If there was a match, include the message in the results for the + // trigger + if matched { + res[tid] = append(res[tid], msg) + } + } + }) + + return res +} + +// Get the messages in a tipset +func (me *messageEvents) messagesForTs(ts *types.TipSet, consume func(*types.Message)) { + seen := map[cid.Cid]struct{}{} + + for i, tsb := range ts.Cids() { + msgs, err := me.cs.ChainGetBlockMessages(context.TODO(), tsb) + if err != nil { + log.Errorf("messagesForTs MessagesForBlock failed (ts.H=%d, Bcid:%s, B.Mcid:%s): %s", + ts.Height(), tsb, ts.Blocks()[i].Messages, err) + continue + } + for i, c := range msgs.Cids { + // We iterate over the CIDs to avoid having to recompute them. + _, ok := seen[c] + if ok { + continue + } + seen[c] = struct{}{} + if i < len(msgs.BlsMessages) { + consume(msgs.BlsMessages[i]) + } else { + consume(&msgs.SecpkMessages[i-len(msgs.BlsMessages)].Message) + } + } + } +} + +// MsgHandler arguments: +// `ts` is the tipset, in which the `msg` is included. +// `curH`-`ts.Height` = `confidence` +type MsgHandler func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (more bool, err error) + +type MsgMatchFunc func(msg *types.Message) (matched bool, err error) + +// Called registers a callback which is triggered when a specified method is +// called on an actor, or a timeout is reached. +// +// * `CheckFunc` callback is invoked immediately with a recent tipset, it +// returns two booleans - `done`, and `more`. +// +// * `done` should be true when some on-chain action we are waiting for has +// happened. When `done` is set to true, timeout trigger is disabled. +// +// * `more` should be false when we don't want to receive new notifications +// through MsgHandler. Note that notifications may still be delivered to +// RevertHandler +// +// * `MsgHandler` is called when the specified event was observed on-chain, +// and a confidence threshold was reached, or the specified `timeout` height +// was reached with no events observed. When this callback is invoked on a +// timeout, `msg` is set to nil. This callback returns a boolean specifying +// whether further notifications should be sent, like `more` return param +// from `CheckFunc` above. +// +// * `RevertHandler` is called after apply handler, when we drop the tipset +// containing the message. The tipset passed as the argument is the tipset +// that is being dropped. Note that the message dropped may be re-applied +// in a different tipset in small amount of time. +// +// * `MsgMatchFunc` is called against each message. If there is a match, the +// message is queued up until the confidence interval has elapsed (and +// `MsgHandler` is called) +func (me *messageEvents) Called(ctx context.Context, check CheckFunc, msgHnd MsgHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch, mf MsgMatchFunc) error { + hnd := func(ctx context.Context, data eventData, prevTs, ts *types.TipSet, height abi.ChainEpoch) (bool, error) { + msg, ok := data.(*types.Message) + if data != nil && !ok { + panic("expected msg") + } + + ml, err := me.cs.StateSearchMsg(ctx, ts.Key(), msg.Cid(), constants.LookbackNoLimit, true) + if err != nil { + return false, err + } + + if ml == nil { + return msgHnd(msg, nil, ts, height) + } + + return msgHnd(msg, &ml.Receipt, ts, height) + } + + id, err := me.hcAPI.onHeadChanged(ctx, check, hnd, rev, confidence, timeout) + if err != nil { + return err + } + + me.lk.Lock() + defer me.lk.Unlock() + me.matchers[id] = mf + + return nil +} + +// Convenience function for checking and matching messages +func (me *messageEvents) CalledMsg(ctx context.Context, hnd MsgHandler, rev RevertHandler, confidence int, timeout abi.ChainEpoch, msg types.ChainMsg) error { + return me.Called(ctx, me.CheckMsg(msg, hnd), hnd, rev, confidence, timeout, me.MatchMsg(msg.VMMessage())) +} diff --git a/pkg/events/events_height.go b/pkg/events/events_height.go new file mode 100644 index 0000000000..8099db498d --- /dev/null +++ b/pkg/events/events_height.go @@ -0,0 +1,244 @@ +package events + +import ( + "context" + "sync" + + "github.com/filecoin-project/go-state-types/abi" + types "github.com/filecoin-project/venus/venus-shared/chain" + "go.opencensus.io/trace" + "golang.org/x/xerrors" +) + +type heightHandler struct { + ts *types.TipSet + height abi.ChainEpoch + called bool + + handle HeightHandler + revert RevertHandler +} + +type heightEvents struct { + api IEvent + gcConfidence abi.ChainEpoch + + lk sync.Mutex + head *types.TipSet + tsHeights, triggerHeights map[abi.ChainEpoch][]*heightHandler + lastGc abi.ChainEpoch //nolint:structcheck +} + +func newHeightEvents(api IEvent, obs *observer, gcConfidence abi.ChainEpoch) *heightEvents { + he := &heightEvents{ + api: api, + gcConfidence: gcConfidence, + tsHeights: map[abi.ChainEpoch][]*heightHandler{}, + triggerHeights: map[abi.ChainEpoch][]*heightHandler{}, + } + he.lk.Lock() + he.head = obs.Observe((*heightEventsObserver)(he)) + he.lk.Unlock() + return he +} + +// ChainAt invokes the specified `HeightHandler` when the chain reaches the +// specified height+confidence threshold. If the chain is rolled-back under the +// specified height, `RevertHandler` will be called. +// +// ts passed to handlers is the tipset at the specified epoch, or above if lower tipsets were null. +// +// The context governs cancellations of this call, it won't cancel the event handler. +func (e *heightEvents) ChainAt(ctx context.Context, hnd HeightHandler, rev RevertHandler, confidence int, h abi.ChainEpoch) error { + if abi.ChainEpoch(confidence) > e.gcConfidence { + // Need this to be able to GC effectively. + return xerrors.Errorf("confidence cannot be greater than gcConfidence: %d > %d", confidence, e.gcConfidence) + } + handler := &heightHandler{ + height: h, + handle: hnd, + revert: rev, + } + triggerAt := h + abi.ChainEpoch(confidence) + + // Here we try to jump onto a moving train. To avoid stopping the train, we release the lock + // while calling the API and/or the trigger functions. Unfortunately, it's entirely possible + // (although unlikely) to go back and forth across the trigger heights, so we need to keep + // going back and forth here till we're synced. + // + // TODO: Consider using a worker goroutine so we can just drop the handler in a channel? The + // downside is that we'd either need a tipset cache, or we'd need to potentially fetch + // tipsets in-line inside the event loop. + e.lk.Lock() + for { + head := e.head + if head.Height() >= h { + // Head is past the handler height. We at least need to stash the tipset to + // avoid doing this from the main event loop. + e.lk.Unlock() + + var ts *types.TipSet + if head.Height() == h { + ts = head + } else { + var err error + ts, err = e.api.ChainGetTipSetAfterHeight(ctx, handler.height, head.Key()) + if err != nil { + return xerrors.Errorf("events.ChainAt: failed to get tipset: %s", err) + } + } + + // If we've applied the handler on the wrong tipset, revert. + if handler.called && !ts.Equals(handler.ts) { + ctx, span := trace.StartSpan(ctx, "events.HeightRevert") + span.AddAttributes(trace.BoolAttribute("immediate", true)) + err := handler.revert(ctx, handler.ts) + span.End() + if err != nil { + return err + } + handler.called = false + } + + // Save the tipset. + handler.ts = ts + + // If we've reached confidence and haven't called, call. + if !handler.called && head.Height() >= triggerAt { + ctx, span := trace.StartSpan(ctx, "events.HeightApply") + span.AddAttributes(trace.BoolAttribute("immediate", true)) + err := handler.handle(ctx, handler.ts, head.Height()) + span.End() + if err != nil { + return err + } + + handler.called = true + + // If we've reached gcConfidence, return without saving anything. + if head.Height() >= h+e.gcConfidence { + return nil + } + } + + e.lk.Lock() + } else if handler.called { + // We're not passed the head (anymore) but have applied the handler. Revert, try again. + e.lk.Unlock() + ctx, span := trace.StartSpan(ctx, "events.HeightRevert") + span.AddAttributes(trace.BoolAttribute("immediate", true)) + err := handler.revert(ctx, handler.ts) + span.End() + if err != nil { + return err + } + handler.called = false + e.lk.Lock() + } // otherwise, we changed heads but the change didn't matter. + + // If we managed to get through this without the head changing, we're finally done. + if head.Equals(e.head) { + e.triggerHeights[triggerAt] = append(e.triggerHeights[triggerAt], handler) + e.tsHeights[h] = append(e.tsHeights[h], handler) + e.lk.Unlock() + return nil + } + } +} + +// Updates the head and garbage collects if we're 2x over our garbage collection confidence period. +func (e *heightEventsObserver) updateHead(h *types.TipSet) { + e.lk.Lock() + defer e.lk.Unlock() + e.head = h + + if e.head.Height() < e.lastGc+e.gcConfidence*2 { + return + } + e.lastGc = h.Height() + + targetGcHeight := e.head.Height() - e.gcConfidence + for h := range e.tsHeights { + if h >= targetGcHeight { + continue + } + delete(e.tsHeights, h) + } + for h := range e.triggerHeights { + if h >= targetGcHeight { + continue + } + delete(e.triggerHeights, h) + } +} + +type heightEventsObserver heightEvents + +func (e *heightEventsObserver) Revert(ctx context.Context, from, to *types.TipSet) error { + // Update the head first so we don't accidental skip reverting a concurrent call to ChainAt. + e.updateHead(to) + + // Call revert on all hights between the two tipsets, handling empty tipsets. + for h := from.Height(); h > to.Height(); h-- { + e.lk.Lock() + triggers := e.tsHeights[h] + e.lk.Unlock() + + // 1. Triggers are only invoked from the global event loop, we don't need to hold the lock while calling. + // 2. We only ever append to or replace the trigger slice, so it's safe to iterate over it without the lock. + for _, handler := range triggers { + handler.ts = nil // invalidate + if !handler.called { + // We haven't triggered this yet, or there has been a concurrent call to ChainAt. + continue + } + ctx, span := trace.StartSpan(ctx, "events.HeightRevert") + err := handler.revert(ctx, from) + span.End() + + if err != nil { + log.Errorf("reverting chain trigger (@H %d): %s", h, err) + } + handler.called = false + } + } + return nil +} + +func (e *heightEventsObserver) Apply(ctx context.Context, from, to *types.TipSet) error { + // Update the head first so we don't accidental skip applying a concurrent call to ChainAt. + e.updateHead(to) + + for h := from.Height() + 1; h <= to.Height(); h++ { + e.lk.Lock() + triggers := e.triggerHeights[h] + tipsets := e.tsHeights[h] + e.lk.Unlock() + + // Stash the tipset for future triggers. + for _, handler := range tipsets { + handler.ts = to + } + + // Trigger the ready triggers. + for _, handler := range triggers { + if handler.called { + // We may have reverted past the trigger point, but not past the call point. + // Or there has been a concurrent call to ChainAt. + continue + } + + ctx, span := trace.StartSpan(ctx, "events.HeightApply") + span.AddAttributes(trace.BoolAttribute("immediate", false)) + err := handler.handle(ctx, handler.ts, h) + span.End() + + if err != nil { + log.Errorf("chain trigger (@H %d, called @ %d) failed: %+v", h, to.Height(), err) + } + + handler.called = true + } + } + return nil +} diff --git a/pkg/events/events_test.go b/pkg/events/events_test.go new file mode 100644 index 0000000000..490046291a --- /dev/null +++ b/pkg/events/events_test.go @@ -0,0 +1,1591 @@ +package events + +import ( + "context" + "fmt" + "time" + + "sync" + "testing" + + "gotest.tools/assert" + + "github.com/ipfs/go-cid" + "github.com/multiformats/go-multihash" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/constants" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var dummyCid cid.Cid + +func init() { + dummyCid, _ = cid.Parse("bafkqaaa") + ObserveDuration = time.Millisecond * 100 +} + +type fakeMsg struct { + bmsgs []*types.Message + smsgs []*types.SignedMessage +} + +var _ IEvent = &fakeCS{} + +type fakeCS struct { + t *testing.T + h abi.ChainEpoch + tsc *tipSetCache + + msgs map[cid.Cid]fakeMsg + blkMsgs map[cid.Cid]cid.Cid + + tipsets map[types.TipSetKey]*types.TipSet + + mu sync.Mutex + waitSub chan struct{} + subCh chan<- []*apitypes.HeadChange + callNumber map[string]int + + cancel context.CancelFunc +} + +func newFakeCS(t *testing.T) *fakeCS { + ctx, cancel := context.WithCancel(context.TODO()) + fcs := &fakeCS{ + t: t, + h: 1, + msgs: make(map[cid.Cid]fakeMsg), + blkMsgs: make(map[cid.Cid]cid.Cid), + tipsets: make(map[types.TipSetKey]*types.TipSet), + tsc: newTSCache(&fakeTSCacheAPI{}, 2*constants.ForkLengthThreshold), + callNumber: map[string]int{}, + waitSub: make(chan struct{}, 1), + cancel: cancel, + } + require.NoError(t, fcs.tsc.add(fcs.makeTs(t, nil, 1, dummyCid))) + fcs.loopNotify(ctx) + return fcs +} + +func (fcs *fakeCS) stop() { + if fcs.cancel == nil { + return + } + fcs.cancel() +} + +// our observe use a timer and call 'chainhead' to observe chain head change +// to 'PASS' these tests, we must call 'ChainNotify' to start 'waitSub' +func (fcs *fakeCS) loopNotify(ctx context.Context) { + head := fcs.ChainNotify(ctx) + go func() { + for { + select { + case <-head: + case <-ctx.Done(): + return + } + } + }() +} + +func (fcs *fakeCS) ChainHead(ctx context.Context) (*types.TipSet, error) { + fcs.mu.Lock() + defer fcs.mu.Unlock() + fcs.callNumber["ChainHead"] = fcs.callNumber["ChainHead"] + 1 + return fcs.tsc.ChainHead(ctx) +} + +func (fcs *fakeCS) ChainGetPath(ctx context.Context, from, to types.TipSetKey) ([]*apitypes.HeadChange, error) { + fcs.mu.Lock() + fcs.callNumber["ChainGetPath"] = fcs.callNumber["ChainGetPath"] + 1 + fcs.mu.Unlock() + + fromTS, err := fcs.ChainGetTipSet(ctx, from) + if err != nil { + return nil, err + } + + toTS, err := fcs.ChainGetTipSet(ctx, to) + if err != nil { + return nil, err + } + + // copied from the chainstore + revert, apply, err := chain.ReorgOps(func(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error) { + return fcs.ChainGetTipSet(ctx, tsk) + }, fromTS, toTS) + if err != nil { + return nil, err + } + + path := make([]*apitypes.HeadChange, len(revert)+len(apply)) + for i, r := range revert { + path[i] = &apitypes.HeadChange{Type: chain.HCRevert, Val: r} + } + for j, i := 0, len(apply)-1; i >= 0; j, i = j+1, i-1 { + path[j+len(revert)] = &apitypes.HeadChange{Type: chain.HCApply, Val: apply[i]} + } + return path, nil +} + +func (fcs *fakeCS) ChainGetTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) { + fcs.mu.Lock() + defer fcs.mu.Unlock() + fcs.callNumber["ChainGetTipSet"] = fcs.callNumber["ChainGetTipSet"] + 1 + return fcs.tipsets[key], nil +} + +func (fcs *fakeCS) StateSearchMsg(ctx context.Context, from types.TipSetKey, msg cid.Cid, limit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) { + fcs.mu.Lock() + defer fcs.mu.Unlock() + fcs.callNumber["StateSearchMsg"] = fcs.callNumber["StateSearchMsg"] + 1 + return nil, nil +} + +func (fcs *fakeCS) StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) { + fcs.mu.Lock() + defer fcs.mu.Unlock() + fcs.callNumber["StateGetActor"] = fcs.callNumber["StateGetActor"] + 1 + panic("Not Implemented") +} + +func (fcs *fakeCS) ChainGetTipSetByHeight(ctx context.Context, height abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) { + fcs.mu.Lock() + defer fcs.mu.Unlock() + fcs.callNumber["ChainGetTipSetByHeight"] = fcs.callNumber["ChainGetTipSetByHeight"] + 1 + + return fcs.tsc.ChainGetTipSetByHeight(ctx, height, tsk) +} +func (fcs *fakeCS) ChainGetTipSetAfterHeight(ctx context.Context, height abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) { + fcs.mu.Lock() + defer fcs.mu.Unlock() + fcs.callNumber["ChainGetTipSetAfterHeight"] = fcs.callNumber["ChainGetTipSetAfterHeight"] + 1 + + return fcs.tsc.ChainGetTipSetAfterHeight(ctx, height, tsk) +} + +func (fcs *fakeCS) makeTs(t *testing.T, parents []cid.Cid, h abi.ChainEpoch, msgcid cid.Cid) *types.TipSet { + a, _ := address.NewFromString("t00") + b, _ := address.NewFromString("t02") + var ts, err = types.NewTipSet([]*types.BlockHeader{ + { + Height: h, + Miner: a, + + Parents: parents, + + Ticket: &types.Ticket{VRFProof: []byte{byte(h % 2)}}, + + ParentStateRoot: dummyCid, + Messages: msgcid, + ParentMessageReceipts: dummyCid, + + BlockSig: &crypto.Signature{Type: crypto.SigTypeBLS}, + BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS}, + }, + { + Height: h, + Miner: b, + + Parents: parents, + + Ticket: &types.Ticket{VRFProof: []byte{byte((h + 1) % 2)}}, + + ParentStateRoot: dummyCid, + Messages: msgcid, + ParentMessageReceipts: dummyCid, + + BlockSig: &crypto.Signature{Type: crypto.SigTypeBLS}, + BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS}, + }, + }) + + if fcs.tipsets == nil { + fcs.tipsets = map[types.TipSetKey]*types.TipSet{} + } + fcs.tipsets[ts.Key()] = ts + + require.NoError(t, err) + + return ts +} + +func (fcs *fakeCS) ChainNotify(ctx context.Context) <-chan []*apitypes.HeadChange { + fcs.mu.Lock() + defer fcs.mu.Unlock() + fcs.callNumber["ChainNotify"] = fcs.callNumber["ChainNotify"] + 1 + + out := make(chan []*apitypes.HeadChange, 1) + if fcs.subCh != nil { + close(out) + fcs.t.Error("already subscribed to notifications") + return out + } + + best, err := fcs.tsc.ChainHead(ctx) + if err != nil { + panic(err) + } + + out <- []*apitypes.HeadChange{{Type: chain.HCCurrent, Val: best}} + fcs.subCh = out + close(fcs.waitSub) + + return out +} + +func (fcs *fakeCS) ChainGetBlockMessages(ctx context.Context, blk cid.Cid) (*apitypes.BlockMessages, error) { + fcs.mu.Lock() + defer fcs.mu.Unlock() + fcs.callNumber["ChainGetBlockMessages"] = fcs.callNumber["ChainGetBlockMessages"] + 1 + messages, ok := fcs.blkMsgs[blk] + if !ok { + return &apitypes.BlockMessages{}, nil + } + + ms, ok := fcs.msgs[messages] + if !ok { + return &apitypes.BlockMessages{}, nil + } + + cids := make([]cid.Cid, len(ms.bmsgs)+len(ms.smsgs)) + for i, m := range ms.bmsgs { + cids[i] = m.Cid() + } + for i, m := range ms.smsgs { + cids[i+len(ms.bmsgs)] = m.Cid() + } + + return &apitypes.BlockMessages{BlsMessages: ms.bmsgs, SecpkMessages: ms.smsgs, Cids: cids}, nil +} + +func (fcs *fakeCS) fakeMsgs(m fakeMsg) cid.Cid { + n := len(fcs.msgs) + c, err := cid.Prefix{ + Version: 1, + Codec: cid.Raw, + MhType: multihash.IDENTITY, + MhLength: -1, + }.Sum([]byte(fmt.Sprintf("%d", n))) + require.NoError(fcs.t, err) + + fcs.msgs[c] = m + return c +} + +func (fcs *fakeCS) dropSub() { + fcs.mu.Lock() + + if fcs.subCh == nil { + fcs.mu.Unlock() + fcs.t.Fatal("sub not be nil") + } + + waitCh := make(chan struct{}) + fcs.waitSub = waitCh + close(fcs.subCh) + fcs.subCh = nil + fcs.mu.Unlock() + + <-waitCh +} + +func (fcs *fakeCS) sub(rev, app []*types.TipSet) { + <-fcs.waitSub + notif := make([]*apitypes.HeadChange, len(rev)+len(app)) + + for i, r := range rev { + notif[i] = &apitypes.HeadChange{ + Type: chain.HCRevert, + Val: r, + } + } + for i, r := range app { + notif[i+len(rev)] = &apitypes.HeadChange{ + Type: chain.HCApply, + Val: r, + } + } + + fcs.subCh <- notif +} + +func (fcs *fakeCS) advance(rev, app, drop int, msgs map[int]cid.Cid, nulls ...int) { + ctx, cancel := context.WithCancel(context.Background()) + defer func() { + cancel() + time.Sleep(ObserveDuration * 2) + }() + + nullm := map[int]struct{}{} + for _, v := range nulls { + nullm[v] = struct{}{} + } + + var revs []*types.TipSet + for i := 0; i < rev; i++ { + fcs.t.Log("revert", fcs.h) + from, err := fcs.tsc.ChainHead(ctx) + require.NoError(fcs.t, err) + + if _, ok := nullm[int(from.Height())]; !ok { + require.NoError(fcs.t, fcs.tsc.revert(from)) + + if drop == 0 { + revs = append(revs, from) + } + } + if drop > 0 { + drop-- + if drop == 0 { + fcs.dropSub() + } + } + fcs.h-- + } + + var apps []*types.TipSet + for i := 0; i < app; i++ { + fcs.h++ + fcs.t.Log("apply", fcs.h) + + mc, hasMsgs := msgs[i] + if !hasMsgs { + mc = dummyCid + } + + if _, ok := nullm[int(fcs.h)]; !ok { + best, err := fcs.tsc.ChainHead(ctx) + require.NoError(fcs.t, err) + ts := fcs.makeTs(fcs.t, best.Key().Cids(), fcs.h, mc) + require.NoError(fcs.t, fcs.tsc.add(ts)) + + if hasMsgs { + fcs.blkMsgs[ts.Blocks()[0].Cid()] = mc + } + + if drop == 0 { + apps = append(apps, ts) + } + } + + if drop > 0 { + drop-- + if drop == 0 { + fcs.dropSub() + } + } + } + + fcs.sub(revs, apps) + // Wait for the last round to finish. + fcs.sub(nil, nil) + fcs.sub(nil, nil) +} + +var _ IEvent = &fakeCS{} + +type ObserveMode string + +const ( + ObModeTimer = ObserveMode("timer") + ObModeSubscription = ObserveMode("subscription") +) + +var CurObserveMode = ObModeTimer + +func TestAt(t *testing.T) { + tf.UnitTest(t) + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + var applied bool + var reverted bool + + err = events.ChainAt(context.Background(), func(_ context.Context, ts *types.TipSet, curH abi.ChainEpoch) error { + require.Equal(t, 5, int(ts.Height())) + require.Equal(t, 8, int(curH)) + applied = true + return nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 5) + require.NoError(t, err) + + fcs.advance(0, 3, 0, nil) + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + fcs.advance(0, 3, 0, nil) + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + fcs.advance(0, 3, 0, nil) + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + applied = false + + fcs.advance(0, 3, 0, nil) + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + fcs.advance(10, 0, 0, nil) + require.Equal(t, false, applied) + require.Equal(t, true, reverted) + + reverted = false + fcs.advance(0, 5, 0, nil) + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + + // observe chain head in timer mode, this kind of observe is not supported + if CurObserveMode == ObModeSubscription { + fcs.advance(10, 10, 0, nil) + require.Equal(t, true, applied) + require.Equal(t, true, reverted) + applied = false + reverted = false + + fcs.advance(10, 1, 0, nil) + require.Equal(t, false, applied) + require.Equal(t, true, reverted) + reverted = false + + fcs.advance(0, 1, 0, nil) + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + fcs.advance(0, 2, 0, nil) + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + fcs.advance(0, 1, 0, nil) // 8 + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + } + +} + +func TestAtNullTrigger(t *testing.T) { + tf.UnitTest(t) + + fcs := newFakeCS(t) + defer fcs.stop() + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + var applied bool + var reverted bool + + err = events.ChainAt(context.Background(), func(_ context.Context, ts *types.TipSet, curH abi.ChainEpoch) error { + require.Equal(t, abi.ChainEpoch(6), ts.Height()) + require.Equal(t, 8, int(curH)) + applied = true + return nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 5) + require.NoError(t, err) + + fcs.advance(0, 6, 0, nil, 5) + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + fcs.advance(0, 3, 0, nil) + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + applied = false +} + +func TestAtNullConf(t *testing.T) { + tf.UnitTest(t) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(ctx, fcs) + require.NoError(t, err) + + var applied bool + var reverted bool + + err = events.ChainAt(ctx, func(_ context.Context, ts *types.TipSet, curH abi.ChainEpoch) error { + require.Equal(t, 5, int(ts.Height())) + require.Equal(t, 8, int(curH)) + applied = true + return nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 5) + require.NoError(t, err) + + fcs.advance(0, 6, 0, nil) + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + fcs.advance(0, 3, 0, nil, 8) + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + applied = false + + fcs.advance(7, 1, 0, nil) + require.Equal(t, false, applied) + require.Equal(t, true, reverted) + reverted = false +} + +var _ tsCacheAPI = &fakeTSCacheAPI{} + +type fakeTSCacheAPI struct{} + +func (f *fakeTSCacheAPI) ChainGetTipSetAfterHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) { + panic("implement me") +} + +func (f *fakeTSCacheAPI) ChainGetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) { + panic("implement me") +} + +func (f *fakeTSCacheAPI) ChainGetTipSetByHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) { + panic("implement me") +} + +func (f *fakeTSCacheAPI) ChainHead(ctx context.Context) (*types.TipSet, error) { + panic("implement me") +} + +func TestAtStart(t *testing.T) { + tf.UnitTest(t) + + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + fcs.advance(0, 5, 0, nil) // 6 + + var applied bool + var reverted bool + + err = events.ChainAt(context.Background(), func(_ context.Context, ts *types.TipSet, curH abi.ChainEpoch) error { + require.Equal(t, 5, int(ts.Height())) + require.Equal(t, 8, int(curH)) + applied = true + return nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 5) + require.NoError(t, err) + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + fcs.advance(0, 5, 0, nil) // 11 + require.Equal(t, true, applied) + require.Equal(t, false, reverted) +} + +func TestAtStartConfidence(t *testing.T) { + tf.UnitTest(t) + + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + fcs.advance(0, 10, 0, nil) // 11 + + var applied bool + var reverted bool + + err = events.ChainAt(context.Background(), func(_ context.Context, ts *types.TipSet, curH abi.ChainEpoch) error { + require.Equal(t, 5, int(ts.Height())) + require.Equal(t, 11, int(curH)) + applied = true + return nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 5) + require.NoError(t, err) + + require.Equal(t, true, applied) + require.Equal(t, false, reverted) +} + +func TestAtChained(t *testing.T) { + tf.UnitTest(t) + + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + var applied bool + var reverted bool + + err = events.ChainAt(context.Background(), func(_ context.Context, ts *types.TipSet, curH abi.ChainEpoch) error { + return events.ChainAt(context.Background(), func(_ context.Context, ts *types.TipSet, curH abi.ChainEpoch) error { + require.Equal(t, 10, int(ts.Height())) + applied = true + return nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 10) + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 5) + require.NoError(t, err) + + fcs.advance(0, 15, 0, nil) + + require.Equal(t, true, applied) + require.Equal(t, false, reverted) +} + +func TestAtChainedConfidence(t *testing.T) { + tf.UnitTest(t) + + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + fcs.advance(0, 15, 0, nil) + + var applied bool + var reverted bool + + err = events.ChainAt(context.Background(), func(_ context.Context, ts *types.TipSet, curH abi.ChainEpoch) error { + return events.ChainAt(context.Background(), func(_ context.Context, ts *types.TipSet, curH abi.ChainEpoch) error { + require.Equal(t, 10, int(ts.Height())) + applied = true + return nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 10) + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 5) + require.NoError(t, err) + + require.Equal(t, true, applied) + require.Equal(t, false, reverted) +} + +func TestAtChainedConfidenceNull(t *testing.T) { + tf.UnitTest(t) + + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + fcs.advance(0, 15, 0, nil, 5) + + var applied bool + var reverted bool + + err = events.ChainAt(context.Background(), func(_ context.Context, ts *types.TipSet, curH abi.ChainEpoch) error { + applied = true + require.Equal(t, 6, int(ts.Height())) + return nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 5) + require.NoError(t, err) + + require.Equal(t, true, applied) + require.Equal(t, false, reverted) +} + +func matchAddrMethod(to address.Address, m abi.MethodNum) func(msg *types.Message) (matched bool, err error) { + return func(msg *types.Message) (matched bool, err error) { + return to == msg.To && m == msg.Method, nil + } +} + +func TestCalled(t *testing.T) { + tf.UnitTest(t) + + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + t0123, err := address.NewFromString("t0123") + require.NoError(t, err) + + more := true + var applied, reverted bool + var appliedMsg *types.Message + var appliedTS *types.TipSet + var appliedH abi.ChainEpoch + + err = events.Called(context.Background(), func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return false, true, nil + }, func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (bool, error) { + require.Equal(t, false, applied) + applied = true + appliedMsg = msg + appliedTS = ts + appliedH = curH + return more, nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 20, matchAddrMethod(t0123, 5)) + require.NoError(t, err) + + // create few blocks to make sure nothing get's randomly called + + fcs.advance(0, 4, 0, nil) // H=5 + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // create blocks with message (but below confidence threshold) + + fcs.advance(0, 3, 0, map[int]cid.Cid{ // msg at H=6; H=8 (confidence=2) + 0: fcs.fakeMsgs(fakeMsg{ + bmsgs: []*types.Message{ + {To: t0123, From: t0123, Method: 5, Nonce: 1}, + }, + }), + }) + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // create additional block so we are above confidence threshold + + fcs.advance(0, 2, 0, nil) // H=10 (confidence=3, apply) + + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + applied = false + + // dip below confidence + fcs.advance(2, 2, 0, nil) // H=10 (confidence=3, apply) + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + require.Equal(t, abi.ChainEpoch(7), appliedTS.Height()) + require.Equal(t, "bafkqaaa", appliedTS.Blocks()[0].Messages.String()) + require.Equal(t, abi.ChainEpoch(10), appliedH) + require.Equal(t, t0123, appliedMsg.To) + require.Equal(t, uint64(1), appliedMsg.Nonce) + require.Equal(t, abi.MethodNum(5), appliedMsg.Method) + + // revert some blocks, keep the message + + fcs.advance(3, 1, 0, nil) // H=8 (confidence=1) + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // revert the message + t.Skipf("not support in timer observe mode") + fcs.advance(2, 1, 0, nil) // H=7, we reverted ts with the msg execution, but not the msg itself + + require.Equal(t, false, applied) + require.Equal(t, true, reverted) + reverted = false + + // send new message on different height + + n2msg := fcs.fakeMsgs(fakeMsg{ + bmsgs: []*types.Message{ + {To: t0123, From: t0123, Method: 5, Nonce: 2}, + }, + }) + + fcs.advance(0, 3, 0, map[int]cid.Cid{ // (n2msg confidence=1) + 0: n2msg, + }) + + require.Equal(t, true, applied) // msg from H=7, which had reverted execution + require.Equal(t, false, reverted) + require.Equal(t, abi.ChainEpoch(10), appliedH) + applied = false + + fcs.advance(0, 2, 0, nil) // (confidence=3) + + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + applied = false + + require.Equal(t, abi.ChainEpoch(9), appliedTS.Height()) + require.Equal(t, "bafkqaaa", appliedTS.Blocks()[0].Messages.String()) + require.Equal(t, abi.ChainEpoch(12), appliedH) + require.Equal(t, t0123, appliedMsg.To) + require.Equal(t, uint64(2), appliedMsg.Nonce) + require.Equal(t, abi.MethodNum(5), appliedMsg.Method) + + // revert and apply at different height + + fcs.advance(8, 6, 0, map[int]cid.Cid{ // (confidence=3) + 1: n2msg, + }) + + // TODO: We probably don't want to call revert/apply, as restarting certain + // actions may be expensive, and in this case the message is still + // on-chain, just at different height + require.Equal(t, true, applied) + require.Equal(t, true, reverted) + reverted = false + applied = false + + require.Equal(t, abi.ChainEpoch(7), appliedTS.Height()) + require.Equal(t, "bafkqaaa", appliedTS.Blocks()[0].Messages.String()) + require.Equal(t, abi.ChainEpoch(10), appliedH) + require.Equal(t, t0123, appliedMsg.To) + require.Equal(t, uint64(2), appliedMsg.Nonce) + require.Equal(t, abi.MethodNum(5), appliedMsg.Method) + + // call method again + + fcs.advance(0, 5, 0, map[int]cid.Cid{ + 0: n2msg, + }) + + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + applied = false + + // send and revert below confidence, then cross confidence + fcs.advance(0, 2, 0, map[int]cid.Cid{ + 0: fcs.fakeMsgs(fakeMsg{ + bmsgs: []*types.Message{ + {To: t0123, From: t0123, Method: 5, Nonce: 3}, + }, + }), + }) + + fcs.advance(2, 5, 0, nil) // H=19, but message reverted + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // test timeout (it's set to 20 in the call to `events.Called` above) + + fcs.advance(0, 6, 0, nil) + + require.Equal(t, false, applied) // not calling timeout as we received messages + require.Equal(t, false, reverted) + + // test unregistering with more + + more = false + fcs.advance(0, 5, 0, map[int]cid.Cid{ + 0: fcs.fakeMsgs(fakeMsg{ + bmsgs: []*types.Message{ + {To: t0123, From: t0123, Method: 5, Nonce: 4}, // this signals we don't want more + }, + }), + }) + + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + applied = false + + fcs.advance(0, 5, 0, map[int]cid.Cid{ + 0: fcs.fakeMsgs(fakeMsg{ + bmsgs: []*types.Message{ + {To: t0123, From: t0123, Method: 5, Nonce: 5}, + }, + }), + }) + + require.Equal(t, false, applied) // should not get any further notifications + require.Equal(t, false, reverted) + + // revert after disabled + + fcs.advance(5, 1, 0, nil) // try reverting msg sent after disabling + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + fcs.advance(5, 1, 0, nil) // try reverting msg sent before disabling + + require.Equal(t, false, applied) + require.Equal(t, true, reverted) +} + +func TestCalledTimeout(t *testing.T) { + tf.UnitTest(t) + t.Skipf("not support in timer observe mode") + + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + t0123, err := address.NewFromString("t0123") + require.NoError(t, err) + + called := false + + err = events.Called(context.Background(), func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return false, true, nil + }, func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (bool, error) { + called = true + require.Nil(t, msg) + require.Equal(t, abi.ChainEpoch(20), ts.Height()) + require.Equal(t, abi.ChainEpoch(23), curH) + return false, nil + }, func(_ context.Context, ts *types.TipSet) error { + t.Fatal("revert on timeout") + return nil + }, 3, 20, matchAddrMethod(t0123, 5)) + require.NoError(t, err) + + fcs.advance(0, 21, 0, nil) + require.False(t, called) + + fcs.advance(0, 5, 0, nil) + require.True(t, called) + called = false + + // with check func reporting done + + fcs = newFakeCS(t) + defer fcs.stop() + + events, err = NewEvents(context.Background(), fcs) + require.NoError(t, err) + + err = events.Called(context.Background(), func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return true, true, nil + }, func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (bool, error) { + called = true + require.Nil(t, msg) + require.Equal(t, abi.ChainEpoch(20), ts.Height()) + require.Equal(t, abi.ChainEpoch(23), curH) + return false, nil + }, func(_ context.Context, ts *types.TipSet) error { + t.Fatal("revert on timeout") + return nil + }, 3, 20, matchAddrMethod(t0123, 5)) + require.NoError(t, err) + + fcs.advance(0, 21, 0, nil) + require.False(t, called) + + fcs.advance(0, 5, 0, nil) + require.False(t, called) +} + +func TestCalledOrder(t *testing.T) { + tf.UnitTest(t) + t.Skipf("not support in timer observe mode") + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + t0123, err := address.NewFromString("t0123") + require.NoError(t, err) + + at := 0 + + err = events.Called(context.Background(), func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return false, true, nil + }, func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (bool, error) { + switch at { + case 0: + require.Equal(t, uint64(1), msg.Nonce) + require.Equal(t, abi.ChainEpoch(4), ts.Height()) + case 1: + require.Equal(t, uint64(2), msg.Nonce) + require.Equal(t, abi.ChainEpoch(5), ts.Height()) + default: + t.Fatal("apply should only get called twice, at: ", at) + } + at++ + return true, nil + }, func(_ context.Context, ts *types.TipSet) error { + switch at { + case 2: + require.Equal(t, abi.ChainEpoch(5), ts.Height()) + case 3: + require.Equal(t, abi.ChainEpoch(4), ts.Height()) + default: + t.Fatal("revert should only get called twice, at: ", at) + } + at++ + return nil + }, 3, 20, matchAddrMethod(t0123, 5)) + require.NoError(t, err) + + fcs.advance(0, 10, 0, map[int]cid.Cid{ + 1: fcs.fakeMsgs(fakeMsg{ + bmsgs: []*types.Message{ + {To: t0123, From: t0123, Method: 5, Nonce: 1}, + }, + }), + 2: fcs.fakeMsgs(fakeMsg{ + bmsgs: []*types.Message{ + {To: t0123, From: t0123, Method: 5, Nonce: 2}, + }, + }), + }) + + fcs.advance(9, 1, 0, nil) +} + +func TestCalledNull(t *testing.T) { + tf.UnitTest(t) + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + t0123, err := address.NewFromString("t0123") + require.NoError(t, err) + + more := true + var applied, reverted bool + + err = events.Called(context.Background(), func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return false, true, nil + }, func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (bool, error) { + require.Equal(t, false, applied) + applied = true + return more, nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 20, matchAddrMethod(t0123, 5)) + require.NoError(t, err) + + // create few blocks to make sure nothing get's randomly called + + fcs.advance(0, 4, 0, nil) // H=5 + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // create blocks with message (but below confidence threshold) + + fcs.advance(0, 3, 0, map[int]cid.Cid{ // msg at H=6; H=8 (confidence=2) + 0: fcs.fakeMsgs(fakeMsg{ + bmsgs: []*types.Message{ + {To: t0123, From: t0123, Method: 5, Nonce: 1}, + }, + }), + }) + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // create additional blocks so we are above confidence threshold, but with null tipset at the height + // of application + + fcs.advance(0, 3, 0, nil, 10) // H=11 (confidence=3, apply) + + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + applied = false + + fcs.advance(5, 1, 0, nil, 10) + + require.Equal(t, false, applied) + require.Equal(t, true, reverted) +} + +func TestRemoveTriggersOnMessage(t *testing.T) { + tf.UnitTest(t) + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + t0123, err := address.NewFromString("t0123") + require.NoError(t, err) + + more := true + var applied, reverted bool + + err = events.Called(context.Background(), func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return false, true, nil + }, func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (bool, error) { + require.Equal(t, false, applied) + applied = true + return more, nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, 3, 20, matchAddrMethod(t0123, 5)) + require.NoError(t, err) + + // create few blocks to make sure nothing get's randomly called + + fcs.advance(0, 4, 0, nil) // H=5 + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // create blocks with message (but below confidence threshold) + + fcs.advance(0, 3, 0, map[int]cid.Cid{ // msg occurs at H=5, applied at H=6; H=8 (confidence=2) + 0: fcs.fakeMsgs(fakeMsg{ + bmsgs: []*types.Message{ + {To: t0123, From: t0123, Method: 5, Nonce: 1}, + }, + }), + }) + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // revert applied TS & message TS + fcs.advance(3, 1, 0, nil) // H=6 (tipset message applied in reverted, AND message reverted) + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // create additional blocks so we are above confidence threshold, but message not applied + // as it was reverted + fcs.advance(0, 5, 0, nil) // H=11 (confidence=3, apply) + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // create blocks with message again (but below confidence threshold) + + fcs.advance(0, 3, 0, map[int]cid.Cid{ // msg occurs at H=12, applied at H=13; H=15 (confidence=2) + 0: fcs.fakeMsgs(fakeMsg{ + bmsgs: []*types.Message{ + {To: t0123, From: t0123, Method: 5, Nonce: 2}, + }, + }), + }) + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // revert applied height TS, but don't remove message trigger + fcs.advance(2, 1, 0, nil) // H=13 (tipset message applied in reverted, by tipset with message not reverted) + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // create additional blocks so we are above confidence threshold + fcs.advance(0, 4, 0, nil) // H=18 (confidence=3, apply) + + require.Equal(t, true, applied) + require.Equal(t, false, reverted) +} + +type testStateChange struct { + from string + to string +} + +func TestStateChanged(t *testing.T) { + tf.UnitTest(t) + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + more := true + var applied, reverted bool + var appliedData StateChange + var appliedOldTS *types.TipSet + var appliedNewTS *types.TipSet + var appliedH abi.ChainEpoch + var matchData StateChange + + confidence := 3 + timeout := abi.ChainEpoch(20) + + err = events.StateChanged(func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return false, true, nil + }, func(oldTs, newTs *types.TipSet, data StateChange, curH abi.ChainEpoch) (bool, error) { + if data != nil { + require.Equal(t, oldTs.Key(), newTs.Parents()) + } + require.Equal(t, false, applied) + applied = true + appliedData = data + appliedOldTS = oldTs + appliedNewTS = newTs + appliedH = curH + return more, nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, confidence, timeout, func(oldTs, newTs *types.TipSet) (bool, StateChange, error) { + require.Equal(t, oldTs.Key(), newTs.Parents()) + if matchData == nil { + return false, matchData, nil + } + + d := matchData + matchData = nil + return true, d, nil + }) + require.NoError(t, err) + + // create few blocks to make sure nothing get's randomly called + + fcs.advance(0, 4, 0, nil) // H=5 + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // create state change (but below confidence threshold) + matchData = testStateChange{from: "a", to: "b"} + fcs.advance(0, 3, 0, nil) + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // create additional block so we are above confidence threshold + + fcs.advance(0, 2, 0, nil) // H=10 (confidence=3, apply) + + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + applied = false + + // dip below confidence (should not apply again) + fcs.advance(2, 2, 0, nil) // H=10 (confidence=3, apply) + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // Change happens from 5 -> 6 + require.Equal(t, abi.ChainEpoch(5), appliedOldTS.Height()) + require.Equal(t, abi.ChainEpoch(6), appliedNewTS.Height()) + + // Actually applied (with confidence) at 9 + require.Equal(t, abi.ChainEpoch(9), appliedH) + + // Make sure the state change was correctly passed through + rcvd := appliedData.(testStateChange) + require.Equal(t, "a", rcvd.from) + require.Equal(t, "b", rcvd.to) +} + +func TestStateChangedRevert(t *testing.T) { + tf.UnitTest(t) + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + more := true + var applied, reverted bool + var matchData StateChange + + confidence := 1 + timeout := abi.ChainEpoch(20) + + err = events.StateChanged(func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return false, true, nil + }, func(oldTs, newTs *types.TipSet, data StateChange, curH abi.ChainEpoch) (bool, error) { + if data != nil { + require.Equal(t, oldTs.Key(), newTs.Parents()) + } + require.Equal(t, false, applied) + applied = true + return more, nil + }, func(_ context.Context, ts *types.TipSet) error { + reverted = true + return nil + }, confidence, timeout, func(oldTs, newTs *types.TipSet) (bool, StateChange, error) { + require.Equal(t, oldTs.Key(), newTs.Parents()) + + if matchData == nil { + return false, matchData, nil + } + + d := matchData + matchData = nil + return true, d, nil + }) + require.NoError(t, err) + + fcs.advance(0, 2, 0, nil) // H=3 + + // Make a state change from TS at height 3 to TS at height 4 + matchData = testStateChange{from: "a", to: "b"} + fcs.advance(0, 1, 0, nil) // H=4 + + // Haven't yet reached confidence + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // Advance to reach confidence level + fcs.advance(0, 1, 0, nil) // H=5 + + // Should now have called the handler + require.Equal(t, true, applied) + require.Equal(t, false, reverted) + applied = false + + // Advance 3 more TS + fcs.advance(0, 3, 0, nil) // H=8 + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + t.Skipf("not support following tests in timer observe mode") + // Regress but not so far as to cause a revert + fcs.advance(3, 1, 0, nil) // H=6 + + require.Equal(t, false, applied) + require.Equal(t, false, reverted) + + // Regress back to state where change happened + fcs.advance(3, 1, 0, nil) // H=4 + + // Expect revert to have happened + require.Equal(t, false, applied) + require.Equal(t, true, reverted) +} + +func TestStateChangedTimeout(t *testing.T) { + tf.UnitTest(t) + t.Skipf("not support in timer observe mode") + + timeoutHeight := abi.ChainEpoch(20) + confidence := 3 + + testCases := []struct { + name string + checkFn CheckFunc + nilBlocks []int + expectTimeout bool + }{{ + // Verify that the state changed timeout is called at the expected height + name: "state changed timeout", + checkFn: func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return false, true, nil + }, + expectTimeout: true, + }, { + // Verify that the state changed timeout is called even if the timeout + // falls on nil block + name: "state changed timeout falls on nil block", + checkFn: func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return false, true, nil + }, + nilBlocks: []int{20, 21, 22, 23}, + expectTimeout: true, + }, { + // Verify that the state changed timeout is not called if the check + // function reports that it's complete + name: "no timeout callback if check func reports done", + checkFn: func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return true, true, nil + }, + expectTimeout: false, + }} + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + // Track whether the callback was called + called := false + + // Set up state change tracking that will timeout at the given height + err = events.StateChanged( + tc.checkFn, + func(oldTs, newTs *types.TipSet, data StateChange, curH abi.ChainEpoch) (bool, error) { + // Expect the callback to be called at the timeout height with nil data + called = true + require.Nil(t, data) + require.Equal(t, timeoutHeight, newTs.Height()) + require.Equal(t, timeoutHeight+abi.ChainEpoch(confidence), curH) + return false, nil + }, func(_ context.Context, ts *types.TipSet) error { + t.Fatal("revert on timeout") + return nil + }, confidence, timeoutHeight, func(oldTs, newTs *types.TipSet) (bool, StateChange, error) { + return false, nil, nil + }) + + require.NoError(t, err) + + // Advance to timeout height + fcs.advance(0, int(timeoutHeight)+1, 0, nil) + require.False(t, called) + + // Advance past timeout height + fcs.advance(0, 5, 0, nil, tc.nilBlocks...) + require.Equal(t, tc.expectTimeout, called) + called = false + }) + } +} + +func TestCalledMultiplePerEpoch(t *testing.T) { + tf.UnitTest(t) + + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + t0123, err := address.NewFromString("t0123") + require.NoError(t, err) + + at := 0 + + err = events.Called(context.Background(), func(ctx context.Context, ts *types.TipSet) (d bool, m bool, e error) { + return false, true, nil + }, func(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (bool, error) { + switch at { + case 0: + require.Equal(t, uint64(1), msg.Nonce) + require.Equal(t, abi.ChainEpoch(4), ts.Height()) + case 1: + require.Equal(t, uint64(2), msg.Nonce) + require.Equal(t, abi.ChainEpoch(4), ts.Height()) + default: + t.Fatal("apply should only get called twice, at: ", at) + } + at++ + return true, nil + }, func(_ context.Context, ts *types.TipSet) error { + switch at { + case 2: + require.Equal(t, abi.ChainEpoch(4), ts.Height()) + case 3: + require.Equal(t, abi.ChainEpoch(4), ts.Height()) + default: + t.Fatal("revert should only get called twice, at: ", at) + } + at++ + return nil + }, 3, 20, matchAddrMethod(t0123, 5)) + require.NoError(t, err) + + fcs.advance(0, 10, 0, map[int]cid.Cid{ + 1: fcs.fakeMsgs(fakeMsg{ + bmsgs: []*types.Message{ + {To: t0123, From: t0123, Method: 5, Nonce: 1}, + {To: t0123, From: t0123, Method: 5, Nonce: 2}, + }, + }), + }) + + fcs.advance(9, 1, 0, nil) +} + +func TestCachedSameBlock(t *testing.T) { + tf.UnitTest(t) + fcs := newFakeCS(t) + defer fcs.stop() + + _, err := NewEvents(context.Background(), fcs) + require.NoError(t, err) + + fcs.advance(0, 10, 0, map[int]cid.Cid{}) + assert.Assert(t, fcs.callNumber["ChainGetBlockMessages"] == 20, "expect call ChainGetBlockMessages %d but got ", 20, fcs.callNumber["ChainGetBlockMessages"]) + + fcs.advance(5, 10, 0, map[int]cid.Cid{}) + assert.Assert(t, fcs.callNumber["ChainGetBlockMessages"] == 30, "expect call ChainGetBlockMessages %d but got ", 30, fcs.callNumber["ChainGetBlockMessages"]) +} + +// nolint +type testObserver struct { + t *testing.T + head *types.TipSet +} + +// nolint +func (t *testObserver) Apply(_ context.Context, from, to *types.TipSet) error { + if t.head != nil { + require.True(t.t, t.head.Equals(from)) + } + t.head = to + return nil +} + +// nolint +func (t *testObserver) Revert(_ context.Context, from, to *types.TipSet) error { + if t.head != nil { + require.True(t.t, t.head.Equals(from)) + } + t.head = to + return nil +} + +func TestReconnect(t *testing.T) { + tf.UnitTest(t) + t.Skipf("not support in timer observe mode") + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + fcs := newFakeCS(t) + defer fcs.stop() + + events, err := NewEvents(ctx, fcs) + require.NoError(t, err) + + fcs.advance(0, 1, 0, nil) + + events.Observe(&testObserver{t: t}) + + fcs.advance(0, 3, 0, nil) + + // Drop on apply + fcs.advance(0, 6, 2, nil) + require.True(t, fcs.callNumber["ChainGetPath"] == 1) + + // drop across revert/apply boundary + fcs.advance(4, 2, 3, nil) + require.True(t, fcs.callNumber["ChainGetPath"] == 2) + fcs.advance(0, 6, 0, nil) + + // drop on revert + fcs.advance(3, 0, 2, nil) + require.True(t, fcs.callNumber["ChainGetPath"] == 3) + + // drop with nulls + fcs.advance(0, 5, 2, nil, 0, 1, 3) + require.True(t, fcs.callNumber["ChainGetPath"] == 4) +} diff --git a/pkg/events/message_cache.go b/pkg/events/message_cache.go new file mode 100644 index 0000000000..266fe390cb --- /dev/null +++ b/pkg/events/message_cache.go @@ -0,0 +1,43 @@ +package events + +import ( + "context" + "sync" + + lru "github.com/hashicorp/golang-lru" + "github.com/ipfs/go-cid" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" +) + +type messageCache struct { + api IEvent + + blockMsgLk sync.Mutex + blockMsgCache *lru.ARCCache +} + +func newMessageCache(api IEvent) *messageCache { + blsMsgCache, _ := lru.NewARC(500) + + return &messageCache{ + api: api, + blockMsgCache: blsMsgCache, + } +} + +func (c *messageCache) ChainGetBlockMessages(ctx context.Context, blkCid cid.Cid) (*apitypes.BlockMessages, error) { + c.blockMsgLk.Lock() + defer c.blockMsgLk.Unlock() + + msgsI, ok := c.blockMsgCache.Get(blkCid) + var err error + if !ok { + msgsI, err = c.api.ChainGetBlockMessages(ctx, blkCid) + if err != nil { + return nil, err + } + c.blockMsgCache.Add(blkCid, msgsI) + } + return msgsI.(*apitypes.BlockMessages), nil +} diff --git a/pkg/events/observer.go b/pkg/events/observer.go new file mode 100644 index 0000000000..19b91a4d4b --- /dev/null +++ b/pkg/events/observer.go @@ -0,0 +1,228 @@ +package events + +import ( + "context" + "sync" + "time" + + "github.com/filecoin-project/go-state-types/abi" + "go.opencensus.io/trace" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/constants" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var ObserveDuration = time.Second * 45 + +type observer struct { + api IEvent + + gcConfidence abi.ChainEpoch + + ready chan struct{} + + lk sync.Mutex + head *types.TipSet + maxHeight abi.ChainEpoch + observers []TipSetObserver +} + +func newObserver(api *cache, gcConfidence abi.ChainEpoch) *observer { + obs := &observer{ + api: api, + gcConfidence: gcConfidence, + + ready: make(chan struct{}), + observers: []TipSetObserver{}, + } + //obs.Observe(api.observer()) todo has ignore cache + return obs +} + +func (o *observer) start(ctx context.Context) error { + go o.listenHeadChanges(ctx) + + // Wait for the first tipset to be seen or bail if shutting down + select { + case <-o.ready: + return nil + case <-ctx.Done(): + return ctx.Err() + } +} + +func (o *observer) listenHeadChanges(ctx context.Context) { + for { + if err := o.listenHeadChangesOnce(ctx); err != nil { + log.Errorf("listen head changes errored: %s", err) + } else { + log.Debugf("listenHeadChanges quit") + } + + select { + case <-constants.Clock.After(ObserveDuration): + case <-ctx.Done(): + log.Warnf("not restarting listenHeadChanges: context error: %s", ctx.Err()) + return + } + + log.Debugf("restarting listenHeadChanges") + } +} + +func (o *observer) listenHeadChangesOnce(ctx context.Context) error { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + curHead, err := o.api.ChainHead(ctx) + if err != nil { + return xerrors.Errorf("listenHeadChanges ChainHead call failed: %w", err) + } + + o.lk.Lock() + if o.head == nil { + o.head = curHead + close(o.ready) + } + startHead := o.head + o.lk.Unlock() + + if startHead != nil && !startHead.Equals(curHead) { + changes, err := o.api.ChainGetPath(ctx, startHead.Key(), curHead.Key()) + if err != nil { + return xerrors.Errorf("failed to get path from last applied tipset to head: %w", err) + } + + if err := o.applyChanges(ctx, changes); err != nil { + return xerrors.Errorf("failed catch-up head changes: %w", err) + } + } + + return nil +} + +func (o *observer) applyChanges(ctx context.Context, changes []*apitypes.HeadChange) error { + // Used to wait for a prior notification round to finish (by tests) + if len(changes) == 0 { + return nil + } + + var rev, app []*types.TipSet + for _, changes := range changes { + switch changes.Type { + case chain.HCRevert: + rev = append(rev, changes.Val) + case chain.HCApply: + app = append(app, changes.Val) + default: + log.Errorf("unexpected head change notification type: '%s'", changes.Type) + } + } + + if err := o.headChange(ctx, rev, app); err != nil { + return xerrors.Errorf("failed to apply head changes: %w", err) + } + return nil +} + +func (o *observer) headChange(ctx context.Context, rev, app []*types.TipSet) error { + ctx, span := trace.StartSpan(ctx, "events.HeadChange") + span.AddAttributes(trace.Int64Attribute("reverts", int64(len(rev)))) + span.AddAttributes(trace.Int64Attribute("applies", int64(len(app)))) + + o.lk.Lock() + head := o.head + o.lk.Unlock() + + defer func() { + span.AddAttributes(trace.Int64Attribute("endHeight", int64(head.Height()))) + span.End() + }() + + // NOTE: bailing out here if the head isn't what we expected is fine. We'll re-start the + // entire process and handle any strange reorgs. + for i, from := range rev { + if !from.Equals(head) { + return xerrors.Errorf( + "expected to revert %s (%d), reverting %s (%d)", + head.Key(), head.Height(), from.Key(), from.Height(), + ) + } + var to *types.TipSet + if i+1 < len(rev) { + // If we have more reverts, the next revert is the next head. + to = rev[i+1] + } else { + // At the end of the revert sequenece, we need to lookup the joint tipset + // between the revert sequence and the apply sequence. + var err error + to, err = o.api.ChainGetTipSet(ctx, from.Parents()) + if err != nil { + // Well, this sucks. We'll bail and restart. + return xerrors.Errorf("failed to get tipset when reverting due to a SetHeead: %w", err) + } + } + + // Get the current observers and atomically set the head. + // + // 1. We need to get the observers every time in case some registered/deregistered. + // 2. We need to atomically set the head so new observers don't see events twice or + // skip them. + o.lk.Lock() + observers := o.observers + o.head = to + o.lk.Unlock() + + for _, obs := range observers { + if err := obs.Revert(ctx, from, to); err != nil { + log.Errorf("observer %T failed to apply tipset %s (%d) with: %s", obs, from.Key(), from.Height(), err) + } + } + + if to.Height() < o.maxHeight-o.gcConfidence { + log.Errorf("reverted past finality, from %d to %d", o.maxHeight, to.Height()) + } + + head = to + } + + for _, to := range app { + if to.Parents() != head.Key() { + return xerrors.Errorf( + "cannot apply %s (%d) with parents %s on top of %s (%d)", + to.Key(), to.Height(), to.Parents(), head.Key(), head.Height(), + ) + } + + o.lk.Lock() + observers := o.observers + o.head = to + o.lk.Unlock() + + for _, obs := range observers { + if err := obs.Apply(ctx, head, to); err != nil { + log.Errorf("observer %T failed to revert tipset %s (%d) with: %s", obs, to.Key(), to.Height(), err) + } + } + if to.Height() > o.maxHeight { + o.maxHeight = to.Height() + } + + head = to + } + return nil +} + +// Observe registers the observer, and returns the current tipset. The observer is guaranteed to +// observe events starting at this tipset. +// +// Returns nil if the observer hasn't started yet (but still registers). +func (o *observer) Observe(obs TipSetObserver) *types.TipSet { + o.lk.Lock() + defer o.lk.Unlock() + o.observers = append(o.observers, obs) + return o.head +} diff --git a/pkg/events/state/ctxstore.go b/pkg/events/state/ctxstore.go new file mode 100644 index 0000000000..a942315e20 --- /dev/null +++ b/pkg/events/state/ctxstore.go @@ -0,0 +1,29 @@ +package state + +import ( + "context" + + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" +) + +// nolint +type contextStore struct { + ctx context.Context + cst *cbor.BasicIpldStore +} + +// nolint +func (cs *contextStore) Context() context.Context { + return cs.ctx +} + +// nolint +func (cs *contextStore) Get(ctx context.Context, c cid.Cid, out interface{}) error { + return cs.cst.Get(ctx, c, out) +} + +// nolint +func (cs *contextStore) Put(ctx context.Context, v interface{}) (cid.Cid, error) { + return cs.cst.Put(ctx, v) +} diff --git a/pkg/events/state/fastapi.go b/pkg/events/state/fastapi.go new file mode 100644 index 0000000000..622695ba65 --- /dev/null +++ b/pkg/events/state/fastapi.go @@ -0,0 +1,31 @@ +package state + +import ( + "context" + + "github.com/filecoin-project/go-address" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type FastChainAPI interface { + ChainAPI + ChainGetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) +} + +type fastAPI struct { + FastChainAPI +} + +func WrapFastAPI(api FastChainAPI) ChainAPI { + return &fastAPI{ + api, + } +} + +func (a *fastAPI) StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) { + ts, err := a.FastChainAPI.ChainGetTipSet(ctx, tsk) + if err != nil { + return nil, err + } + return a.FastChainAPI.StateGetActor(ctx, actor, ts.Parents()) +} diff --git a/pkg/events/state/mock/api.go b/pkg/events/state/mock/api.go new file mode 100644 index 0000000000..eda198b22a --- /dev/null +++ b/pkg/events/state/mock/api.go @@ -0,0 +1,71 @@ +package test + +import ( + "context" + "sync" + + "github.com/filecoin-project/go-address" + + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + blockstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type MockAPI struct { + bs blockstore.Blockstore + + lk sync.Mutex + ts map[types.TipSetKey]*types.Actor + stateGetActorCalled int +} + +func NewMockAPI(bs blockstore.Blockstore) *MockAPI { + return &MockAPI{ + bs: bs, + ts: make(map[types.TipSetKey]*types.Actor), + } +} + +func (m *MockAPI) ChainHasObj(ctx context.Context, c cid.Cid) (bool, error) { + return m.bs.Has(ctx, c) +} + +func (m *MockAPI) ChainReadObj(ctx context.Context, c cid.Cid) ([]byte, error) { + blk, err := m.bs.Get(ctx, c) + if err != nil { + return nil, xerrors.Errorf("blockstore get: %w", err) + } + + return blk.RawData(), nil +} + +func (m *MockAPI) StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) { + m.lk.Lock() + defer m.lk.Unlock() + + m.stateGetActorCalled++ + return m.ts[tsk], nil +} + +func (m *MockAPI) StateGetActorCallCount() int { + m.lk.Lock() + defer m.lk.Unlock() + + return m.stateGetActorCalled +} + +func (m *MockAPI) ResetCallCounts() { + m.lk.Lock() + defer m.lk.Unlock() + + m.stateGetActorCalled = 0 +} + +func (m *MockAPI) SetActor(tsk types.TipSetKey, act *types.Actor) { + m.lk.Lock() + defer m.lk.Unlock() + + m.ts[tsk] = act +} diff --git a/pkg/events/state/mock/state.go b/pkg/events/state/mock/state.go new file mode 100644 index 0000000000..bac06b59fc --- /dev/null +++ b/pkg/events/state/mock/state.go @@ -0,0 +1,32 @@ +package test + +import ( + "context" + "testing" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" + "github.com/filecoin-project/specs-actors/v2/actors/util/adt" + "github.com/stretchr/testify/require" +) + +func CreateEmptyMarketState(t *testing.T, store adt.Store) *market.State { + emptyArrayCid, err := adt.MakeEmptyArray(store).Root() + require.NoError(t, err) + emptyMap, err := adt.MakeEmptyMap(store).Root() + require.NoError(t, err) + return market.ConstructState(emptyArrayCid, emptyMap, emptyMap) +} + +func CreateDealAMT(ctx context.Context, t *testing.T, store adt.Store, deals map[abi.DealID]*market.DealState) cid.Cid { + root := adt.MakeEmptyArray(store) + for dealID, dealState := range deals { + err := root.Set(uint64(dealID), dealState) + require.NoError(t, err) + } + rootCid, err := root.Root() + require.NoError(t, err) + return rootCid +} diff --git a/pkg/events/state/mock/tipset.go b/pkg/events/state/mock/tipset.go new file mode 100644 index 0000000000..1efda23e52 --- /dev/null +++ b/pkg/events/state/mock/tipset.go @@ -0,0 +1,27 @@ +package test + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/crypto" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" +) + +var dummyCid cid.Cid + +func init() { + dummyCid, _ = cid.Parse("bafkqaaa") +} + +func MockTipset(minerAddr address.Address, timestamp uint64) (*types.TipSet, error) { + return types.NewTipSet([]*types.BlockHeader{{ + Miner: minerAddr, + Height: 5, + ParentStateRoot: dummyCid, + Messages: dummyCid, + ParentMessageReceipts: dummyCid, + BlockSig: &crypto.Signature{Type: crypto.SigTypeBLS}, + BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS}, + Timestamp: timestamp, + }}) +} diff --git a/pkg/events/state/predicates.go b/pkg/events/state/predicates.go new file mode 100644 index 0000000000..b83cdd08df --- /dev/null +++ b/pkg/events/state/predicates.go @@ -0,0 +1,433 @@ +package state + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + cbor "github.com/ipfs/go-ipld-cbor" + + "github.com/filecoin-project/venus/app/submodule/chain" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// UserData is the data returned from the DiffTipSetKeyFunc +type UserData interface{} + +// ChainAPI abstracts out calls made by this class to external APIs +type ChainAPI interface { + chain.ChainIO + StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) +} + +// StatePredicates has common predicates for responding to state changes +type StatePredicates struct { //nolint + api ChainAPI + cst *cbor.BasicIpldStore +} + +func NewStatePredicates(api ChainAPI) *StatePredicates { + return &StatePredicates{ + api: api, + cst: cbor.NewCborStore(chain.NewAPIBlockstore(api)), + } +} + +// DiffTipSetKeyFunc check if there's a change form oldState to newState, and returns +// - changed: was there a change +// - user: user-defined data representing the state change +// - err +type DiffTipSetKeyFunc func(ctx context.Context, oldState, newState types.TipSetKey) (changed bool, user UserData, err error) + +type DiffActorStateFunc func(ctx context.Context, oldActorState *types.Actor, newActorState *types.Actor) (changed bool, user UserData, err error) + +// OnActorStateChanged calls diffStateFunc when the state changes for the given actor +func (sp *StatePredicates) OnActorStateChanged(addr address.Address, diffStateFunc DiffActorStateFunc) DiffTipSetKeyFunc { + return func(ctx context.Context, oldState, newState types.TipSetKey) (changed bool, user UserData, err error) { + oldActor, err := sp.api.StateGetActor(ctx, addr, oldState) + if err != nil { + return false, nil, err + } + newActor, err := sp.api.StateGetActor(ctx, addr, newState) + if err != nil { + return false, nil, err + } + + if oldActor.Head.Equals(newActor.Head) { + return false, nil, nil + } + return diffStateFunc(ctx, oldActor, newActor) + } +} + +type DiffStorageMarketStateFunc func(ctx context.Context, oldState market.State, newState market.State) (changed bool, user UserData, err error) + +// OnStorageMarketActorChanged calls diffStorageMarketState when the state changes for the market actor +func (sp *StatePredicates) OnStorageMarketActorChanged(diffStorageMarketState DiffStorageMarketStateFunc) DiffTipSetKeyFunc { + return sp.OnActorStateChanged(market.Address, func(ctx context.Context, oldActorState, newActorState *types.Actor) (changed bool, user UserData, err error) { + oldState, err := market.Load(adt.WrapStore(ctx, sp.cst), oldActorState) + if err != nil { + return false, nil, err + } + newState, err := market.Load(adt.WrapStore(ctx, sp.cst), newActorState) + if err != nil { + return false, nil, err + } + return diffStorageMarketState(ctx, oldState, newState) + }) +} + +type BalanceTables struct { + EscrowTable market.BalanceTable + LockedTable market.BalanceTable +} + +// DiffBalanceTablesFunc compares two balance tables +type DiffBalanceTablesFunc func(ctx context.Context, oldBalanceTable, newBalanceTable BalanceTables) (changed bool, user UserData, err error) + +// OnBalanceChanged runs when the escrow table for available balances changes +func (sp *StatePredicates) OnBalanceChanged(diffBalances DiffBalanceTablesFunc) DiffStorageMarketStateFunc { + return func(ctx context.Context, oldState market.State, newState market.State) (changed bool, user UserData, err error) { + bc, err := oldState.BalancesChanged(newState) + if err != nil { + return false, nil, err + } + + if !bc { + return false, nil, nil + } + + oldEscrowRoot, err := oldState.EscrowTable() + if err != nil { + return false, nil, err + } + + oldLockedRoot, err := oldState.LockedTable() + if err != nil { + return false, nil, err + } + + newEscrowRoot, err := newState.EscrowTable() + if err != nil { + return false, nil, err + } + + newLockedRoot, err := newState.LockedTable() + if err != nil { + return false, nil, err + } + + return diffBalances(ctx, BalanceTables{oldEscrowRoot, oldLockedRoot}, BalanceTables{newEscrowRoot, newLockedRoot}) + } +} + +type DiffDealStatesFunc func(ctx context.Context, oldDealStateRoot, newDealStateRoot market.DealStates) (changed bool, user UserData, err error) +type DiffDealProposalsFunc func(ctx context.Context, oldDealStateRoot, newDealStateRoot market.DealProposals) (changed bool, user UserData, err error) +type DiffAdtArraysFunc func(ctx context.Context, oldDealStateRoot, newDealStateRoot adt.Array) (changed bool, user UserData, err error) + +// OnDealStateChanged calls diffDealStates when the market deal state changes +func (sp *StatePredicates) OnDealStateChanged(diffDealStates DiffDealStatesFunc) DiffStorageMarketStateFunc { + return func(ctx context.Context, oldState market.State, newState market.State) (changed bool, user UserData, err error) { + sc, err := oldState.StatesChanged(newState) + if err != nil { + return false, nil, err + } + + if !sc { + return false, nil, nil + } + + oldRoot, err := oldState.States() + if err != nil { + return false, nil, err + } + newRoot, err := newState.States() + if err != nil { + return false, nil, err + } + + return diffDealStates(ctx, oldRoot, newRoot) + } +} + +// OnDealProposalChanged calls diffDealProps when the market proposal state changes +func (sp *StatePredicates) OnDealProposalChanged(diffDealProps DiffDealProposalsFunc) DiffStorageMarketStateFunc { + return func(ctx context.Context, oldState market.State, newState market.State) (changed bool, user UserData, err error) { + pc, err := oldState.ProposalsChanged(newState) + if err != nil { + return false, nil, err + } + + if !pc { + return false, nil, nil + } + + oldRoot, err := oldState.Proposals() + if err != nil { + return false, nil, err + } + newRoot, err := newState.Proposals() + if err != nil { + return false, nil, err + } + + return diffDealProps(ctx, oldRoot, newRoot) + } +} + +// OnDealProposalAmtChanged detects changes in the deal proposal AMT for all deal proposals and returns a MarketProposalsChanges structure containing: +// - Added Proposals +// - Modified Proposals +// - Removed Proposals +func (sp *StatePredicates) OnDealProposalAmtChanged() DiffDealProposalsFunc { + return func(ctx context.Context, oldDealProps, newDealProps market.DealProposals) (changed bool, user UserData, err error) { + proposalChanges, err := market.DiffDealProposals(oldDealProps, newDealProps) + if err != nil { + return false, nil, err + } + + if len(proposalChanges.Added)+len(proposalChanges.Removed) == 0 { + return false, nil, nil + } + + return true, proposalChanges, nil + } +} + +// OnDealStateAmtChanged detects changes in the deal state AMT for all deal states and returns a MarketDealStateChanges structure containing: +// - Added Deals +// - Modified Deals +// - Removed Deals +func (sp *StatePredicates) OnDealStateAmtChanged() DiffDealStatesFunc { + return func(ctx context.Context, oldDealStates, newDealStates market.DealStates) (changed bool, user UserData, err error) { + dealStateChanges, err := market.DiffDealStates(oldDealStates, newDealStates) + if err != nil { + return false, nil, err + } + + if len(dealStateChanges.Added)+len(dealStateChanges.Modified)+len(dealStateChanges.Removed) == 0 { + return false, nil, nil + } + + return true, dealStateChanges, nil + } +} + +// ChangedDeals is a set of changes to deal state +type ChangedDeals map[abi.DealID]market.DealStateChange + +// DealStateChangedForIDs detects changes in the deal state AMT for the given deal IDs +func (sp *StatePredicates) DealStateChangedForIDs(dealIds []abi.DealID) DiffDealStatesFunc { + return func(ctx context.Context, oldDealStates, newDealStates market.DealStates) (changed bool, user UserData, err error) { + changedDeals := make(ChangedDeals) + for _, dealID := range dealIds { + + // If the deal has been removed, we just set it to nil + oldDeal, oldFound, err := oldDealStates.Get(dealID) + if err != nil { + return false, nil, err + } + + newDeal, newFound, err := newDealStates.Get(dealID) + if err != nil { + return false, nil, err + } + + existenceChanged := oldFound != newFound + valueChanged := (oldFound && newFound) && *oldDeal != *newDeal + if existenceChanged || valueChanged { + changedDeals[dealID] = market.DealStateChange{ID: dealID, From: oldDeal, To: newDeal} + } + } + if len(changedDeals) > 0 { + return true, changedDeals, nil + } + return false, nil, nil + } +} + +// ChangedBalances is a set of changes to deal state +type ChangedBalances map[address.Address]BalanceChange + +// BalanceChange is a change in balance from -> to +type BalanceChange struct { + From abi.TokenAmount + To abi.TokenAmount +} + +// AvailableBalanceChangedForAddresses detects changes in the escrow table for the given addresses +func (sp *StatePredicates) AvailableBalanceChangedForAddresses(getAddrs func() []address.Address) DiffBalanceTablesFunc { + return func(ctx context.Context, oldBalances, newBalances BalanceTables) (changed bool, user UserData, err error) { + changedBalances := make(ChangedBalances) + addrs := getAddrs() + for _, addr := range addrs { + // If the deal has been removed, we just set it to nil + oldEscrowBalance, err := oldBalances.EscrowTable.Get(addr) + if err != nil { + return false, nil, err + } + + oldLockedBalance, err := oldBalances.LockedTable.Get(addr) + if err != nil { + return false, nil, err + } + + oldBalance := big.Sub(oldEscrowBalance, oldLockedBalance) + + newEscrowBalance, err := newBalances.EscrowTable.Get(addr) + if err != nil { + return false, nil, err + } + + newLockedBalance, err := newBalances.LockedTable.Get(addr) + if err != nil { + return false, nil, err + } + + newBalance := big.Sub(newEscrowBalance, newLockedBalance) + + if !oldBalance.Equals(newBalance) { + changedBalances[addr] = BalanceChange{oldBalance, newBalance} + } + } + if len(changedBalances) > 0 { + return true, changedBalances, nil + } + return false, nil, nil + } +} + +type DiffMinerActorStateFunc func(ctx context.Context, oldState miner.State, newState miner.State) (changed bool, user UserData, err error) + +func (sp *StatePredicates) OnInitActorChange(diffInitActorState DiffInitActorStateFunc) DiffTipSetKeyFunc { + return sp.OnActorStateChanged(init_.Address, func(ctx context.Context, oldActorState, newActorState *types.Actor) (changed bool, user UserData, err error) { + oldState, err := init_.Load(adt.WrapStore(ctx, sp.cst), oldActorState) + if err != nil { + return false, nil, err + } + newState, err := init_.Load(adt.WrapStore(ctx, sp.cst), newActorState) + if err != nil { + return false, nil, err + } + return diffInitActorState(ctx, oldState, newState) + }) + +} + +func (sp *StatePredicates) OnMinerActorChange(minerAddr address.Address, diffMinerActorState DiffMinerActorStateFunc) DiffTipSetKeyFunc { + return sp.OnActorStateChanged(minerAddr, func(ctx context.Context, oldActorState, newActorState *types.Actor) (changed bool, user UserData, err error) { + oldState, err := miner.Load(adt.WrapStore(ctx, sp.cst), oldActorState) + if err != nil { + return false, nil, err + } + newState, err := miner.Load(adt.WrapStore(ctx, sp.cst), newActorState) + if err != nil { + return false, nil, err + } + return diffMinerActorState(ctx, oldState, newState) + }) +} + +func (sp *StatePredicates) OnMinerSectorChange() DiffMinerActorStateFunc { + return func(ctx context.Context, oldState, newState miner.State) (changed bool, user UserData, err error) { + sectorChanges, err := miner.DiffSectors(oldState, newState) + if err != nil { + return false, nil, err + } + // nothing changed + if len(sectorChanges.Added)+len(sectorChanges.Extended)+len(sectorChanges.Removed) == 0 { + return false, nil, nil + } + + return true, sectorChanges, nil + } +} + +func (sp *StatePredicates) OnMinerPreCommitChange() DiffMinerActorStateFunc { + return func(ctx context.Context, oldState, newState miner.State) (changed bool, user UserData, err error) { + precommitChanges, err := miner.DiffPreCommits(oldState, newState) + if err != nil { + return false, nil, err + } + + if len(precommitChanges.Added)+len(precommitChanges.Removed) == 0 { + return false, nil, nil + } + + return true, precommitChanges, nil + } +} + +// DiffPaymentChannelStateFunc is function that compares two states for the payment channel +type DiffPaymentChannelStateFunc func(ctx context.Context, oldState paych.State, newState paych.State) (changed bool, user UserData, err error) + +// OnPaymentChannelActorChanged calls diffPaymentChannelState when the state changes for the the payment channel actor +func (sp *StatePredicates) OnPaymentChannelActorChanged(paychAddr address.Address, diffPaymentChannelState DiffPaymentChannelStateFunc) DiffTipSetKeyFunc { + return sp.OnActorStateChanged(paychAddr, func(ctx context.Context, oldActorState, newActorState *types.Actor) (changed bool, user UserData, err error) { + oldState, err := paych.Load(adt.WrapStore(ctx, sp.cst), oldActorState) + if err != nil { + return false, nil, err + } + newState, err := paych.Load(adt.WrapStore(ctx, sp.cst), newActorState) + if err != nil { + return false, nil, err + } + return diffPaymentChannelState(ctx, oldState, newState) + }) +} + +// PayChToSendChange is a difference in the amount to send on a payment channel when the money is collected +type PayChToSendChange struct { + OldToSend abi.TokenAmount + NewToSend abi.TokenAmount +} + +// OnToSendAmountChanges monitors changes on the total amount to send from one party to the other on a payment channel +func (sp *StatePredicates) OnToSendAmountChanges() DiffPaymentChannelStateFunc { + return func(ctx context.Context, oldState paych.State, newState paych.State) (changed bool, user UserData, err error) { + ots, err := oldState.ToSend() + if err != nil { + return false, nil, err + } + + nts, err := newState.ToSend() + if err != nil { + return false, nil, err + } + + if ots.Equals(nts) { + return false, nil, nil + } + return true, &PayChToSendChange{ + OldToSend: ots, + NewToSend: nts, + }, nil + } +} + +type AddressPair struct { + ID address.Address + PK address.Address +} + +type DiffInitActorStateFunc func(ctx context.Context, oldState init_.State, newState init_.State) (changed bool, user UserData, err error) + +func (sp *StatePredicates) OnAddressMapChange() DiffInitActorStateFunc { + return func(ctx context.Context, oldState, newState init_.State) (changed bool, user UserData, err error) { + addressChanges, err := init_.DiffAddressMap(oldState, newState) + if err != nil { + return false, nil, err + } + if len(addressChanges.Added)+len(addressChanges.Modified)+len(addressChanges.Removed) == 0 { + return false, nil, nil + } + return true, addressChanges, nil + } +} diff --git a/pkg/events/state/predicates_test.go b/pkg/events/state/predicates_test.go new file mode 100644 index 0000000000..b30274bbf7 --- /dev/null +++ b/pkg/events/state/predicates_test.go @@ -0,0 +1,579 @@ +package state + +import ( + "context" + "testing" + + test "github.com/filecoin-project/venus/pkg/events/state/mock" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + bstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/ipfs/go-cid" + cbornode "github.com/ipfs/go-ipld-cbor" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" + tutils "github.com/filecoin-project/specs-actors/v6/support/testing" +) + +var dummyCid cid.Cid + +func init() { + dummyCid, _ = cid.Parse("bafkqaaa") +} + +func TestMarketPredicates(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + bs := bstore.NewTemporarySync() + store := adt2.WrapStore(ctx, cbornode.NewCborStore(bs)) + + oldDeal1 := &market2.DealState{ + SectorStartEpoch: 1, + LastUpdatedEpoch: 2, + SlashEpoch: 0, + } + oldDeal2 := &market2.DealState{ + SectorStartEpoch: 4, + LastUpdatedEpoch: 5, + SlashEpoch: 0, + } + oldDeals := map[abi.DealID]*market2.DealState{ + abi.DealID(1): oldDeal1, + abi.DealID(2): oldDeal2, + } + + oldProp1 := &market2.DealProposal{ + PieceCID: dummyCid, + PieceSize: 0, + VerifiedDeal: false, + Client: tutils.NewIDAddr(t, 1), + Provider: tutils.NewIDAddr(t, 1), + StartEpoch: 1, + EndEpoch: 2, + StoragePricePerEpoch: big.Zero(), + ProviderCollateral: big.Zero(), + ClientCollateral: big.Zero(), + } + oldProp2 := &market2.DealProposal{ + PieceCID: dummyCid, + PieceSize: 0, + VerifiedDeal: false, + Client: tutils.NewIDAddr(t, 1), + Provider: tutils.NewIDAddr(t, 1), + StartEpoch: 2, + EndEpoch: 3, + StoragePricePerEpoch: big.Zero(), + ProviderCollateral: big.Zero(), + ClientCollateral: big.Zero(), + } + oldProps := map[abi.DealID]*market2.DealProposal{ + abi.DealID(1): oldProp1, + abi.DealID(2): oldProp2, + } + + oldBalances := map[address.Address]balance{ + tutils.NewIDAddr(t, 1): {abi.NewTokenAmount(1000), abi.NewTokenAmount(1000)}, + tutils.NewIDAddr(t, 2): {abi.NewTokenAmount(2000), abi.NewTokenAmount(500)}, + tutils.NewIDAddr(t, 3): {abi.NewTokenAmount(3000), abi.NewTokenAmount(2000)}, + tutils.NewIDAddr(t, 5): {abi.NewTokenAmount(3000), abi.NewTokenAmount(1000)}, + } + + oldStateC := createMarketState(ctx, t, store, oldDeals, oldProps, oldBalances) + + newDeal1 := &market2.DealState{ + SectorStartEpoch: 1, + LastUpdatedEpoch: 3, + SlashEpoch: 0, + } + + // deal 2 removed + + // added + newDeal3 := &market2.DealState{ + SectorStartEpoch: 1, + LastUpdatedEpoch: 2, + SlashEpoch: 3, + } + newDeals := map[abi.DealID]*market2.DealState{ + abi.DealID(1): newDeal1, + // deal 2 was removed + abi.DealID(3): newDeal3, + } + + // added + newProp3 := &market2.DealProposal{ + PieceCID: dummyCid, + PieceSize: 0, + VerifiedDeal: false, + Client: tutils.NewIDAddr(t, 1), + Provider: tutils.NewIDAddr(t, 1), + StartEpoch: 4, + EndEpoch: 4, + StoragePricePerEpoch: big.Zero(), + ProviderCollateral: big.Zero(), + ClientCollateral: big.Zero(), + } + newProps := map[abi.DealID]*market2.DealProposal{ + abi.DealID(1): oldProp1, // 1 was persisted + // prop 2 was removed + abi.DealID(3): newProp3, // new + // NB: DealProposals cannot be modified, so don't test that case. + } + newBalances := map[address.Address]balance{ + tutils.NewIDAddr(t, 1): {abi.NewTokenAmount(3000), abi.NewTokenAmount(0)}, + tutils.NewIDAddr(t, 2): {abi.NewTokenAmount(2000), abi.NewTokenAmount(500)}, + tutils.NewIDAddr(t, 4): {abi.NewTokenAmount(5000), abi.NewTokenAmount(0)}, + tutils.NewIDAddr(t, 5): {abi.NewTokenAmount(1000), abi.NewTokenAmount(3000)}, + } + + newStateC := createMarketState(ctx, t, store, newDeals, newProps, newBalances) + + minerAddr, err := address.NewFromString("t00") + require.NoError(t, err) + oldState, err := test.MockTipset(minerAddr, 1) + require.NoError(t, err) + newState, err := test.MockTipset(minerAddr, 2) + require.NoError(t, err) + + api := test.NewMockAPI(bs) + api.SetActor(oldState.Key(), &types.Actor{Code: builtin2.StorageMarketActorCodeID, Head: oldStateC}) + api.SetActor(newState.Key(), &types.Actor{Code: builtin2.StorageMarketActorCodeID, Head: newStateC}) + + t.Run("deal ID predicate", func(t *testing.T) { + preds := NewStatePredicates(api) + + dealIds := []abi.DealID{abi.DealID(1), abi.DealID(2)} + diffIDFn := preds.OnStorageMarketActorChanged(preds.OnDealStateChanged(preds.DealStateChangedForIDs(dealIds))) + + // Diff a state against itself: expect no change + changed, _, err := diffIDFn(ctx, oldState.Key(), oldState.Key()) + require.NoError(t, err) + require.False(t, changed) + + // Diff old state against new state + changed, valIDs, err := diffIDFn(ctx, oldState.Key(), newState.Key()) + require.NoError(t, err) + require.True(t, changed) + + changedDealIDs, ok := valIDs.(ChangedDeals) + require.True(t, ok) + require.Len(t, changedDealIDs, 2) + require.Contains(t, changedDealIDs, abi.DealID(1)) + require.Contains(t, changedDealIDs, abi.DealID(2)) + deal1 := changedDealIDs[abi.DealID(1)] + if deal1.From.LastUpdatedEpoch != 2 || deal1.To.LastUpdatedEpoch != 3 { + t.Fatal("Unexpected change to LastUpdatedEpoch") + } + deal2 := changedDealIDs[abi.DealID(2)] + if deal2.From.LastUpdatedEpoch != 5 || deal2.To != nil { + t.Fatal("Expected To to be nil") + } + + // Diff with non-existent deal. + noDeal := []abi.DealID{4} + diffNoDealFn := preds.OnStorageMarketActorChanged(preds.OnDealStateChanged(preds.DealStateChangedForIDs(noDeal))) + changed, _, err = diffNoDealFn(ctx, oldState.Key(), newState.Key()) + require.NoError(t, err) + require.False(t, changed) + + // Test that OnActorStateChanged does not call the callback if the state has not changed + mockAddr, err := address.NewFromString("t01") + require.NoError(t, err) + actorDiffFn := preds.OnActorStateChanged(mockAddr, func(context.Context, *types.Actor, *types.Actor) (bool, UserData, error) { + t.Fatal("No state change so this should not be called") + return false, nil, nil + }) + changed, _, err = actorDiffFn(ctx, oldState.Key(), oldState.Key()) + require.NoError(t, err) + require.False(t, changed) + + // Test that OnDealStateChanged does not call the callback if the state has not changed + diffDealStateFn := preds.OnDealStateChanged(func(context.Context, market.DealStates, market.DealStates) (bool, UserData, error) { + t.Fatal("No state change so this should not be called") + return false, nil, nil + }) + marketState0 := test.CreateEmptyMarketState(t, store) + marketCid, err := store.Put(ctx, marketState0) + require.NoError(t, err) + marketState, err := market.Load(store, &types.Actor{ + Code: builtin2.StorageMarketActorCodeID, + Head: marketCid, + }) + require.NoError(t, err) + changed, _, err = diffDealStateFn(ctx, marketState, marketState) + require.NoError(t, err) + require.False(t, changed) + }) + + t.Run("deal state array predicate", func(t *testing.T) { + preds := NewStatePredicates(api) + diffArrFn := preds.OnStorageMarketActorChanged(preds.OnDealStateChanged(preds.OnDealStateAmtChanged())) + + changed, _, err := diffArrFn(ctx, oldState.Key(), oldState.Key()) + require.NoError(t, err) + require.False(t, changed) + + changed, valArr, err := diffArrFn(ctx, oldState.Key(), newState.Key()) + require.NoError(t, err) + require.True(t, changed) + + changedDeals, ok := valArr.(*market.DealStateChanges) + require.True(t, ok) + require.Len(t, changedDeals.Added, 1) + require.Equal(t, abi.DealID(3), changedDeals.Added[0].ID) + require.True(t, dealEquality(*newDeal3, changedDeals.Added[0].Deal)) + + require.Len(t, changedDeals.Removed, 1) + + require.Len(t, changedDeals.Modified, 1) + require.Equal(t, abi.DealID(1), changedDeals.Modified[0].ID) + require.True(t, dealEquality(*newDeal1, *changedDeals.Modified[0].To)) + require.True(t, dealEquality(*oldDeal1, *changedDeals.Modified[0].From)) + + require.Equal(t, abi.DealID(2), changedDeals.Removed[0].ID) + }) + + t.Run("deal proposal array predicate", func(t *testing.T) { + preds := NewStatePredicates(api) + diffArrFn := preds.OnStorageMarketActorChanged(preds.OnDealProposalChanged(preds.OnDealProposalAmtChanged())) + changed, _, err := diffArrFn(ctx, oldState.Key(), oldState.Key()) + require.NoError(t, err) + require.False(t, changed) + + changed, valArr, err := diffArrFn(ctx, oldState.Key(), newState.Key()) + require.NoError(t, err) + require.True(t, changed) + + changedProps, ok := valArr.(*market.DealProposalChanges) + require.True(t, ok) + require.Len(t, changedProps.Added, 1) + require.Equal(t, abi.DealID(3), changedProps.Added[0].ID) + + // proposals cannot be modified -- no modified testing + + require.Len(t, changedProps.Removed, 1) + require.Equal(t, abi.DealID(2), changedProps.Removed[0].ID) + }) + + t.Run("balances predicate", func(t *testing.T) { + preds := NewStatePredicates(api) + + getAddresses := func() []address.Address { + return []address.Address{tutils.NewIDAddr(t, 1), tutils.NewIDAddr(t, 2), tutils.NewIDAddr(t, 3), tutils.NewIDAddr(t, 4)} + } + diffBalancesFn := preds.OnStorageMarketActorChanged(preds.OnBalanceChanged(preds.AvailableBalanceChangedForAddresses(getAddresses))) + + // Diff a state against itself: expect no change + changed, _, err := diffBalancesFn(ctx, oldState.Key(), oldState.Key()) + require.NoError(t, err) + require.False(t, changed) + + // Diff old state against new state + changed, valIDs, err := diffBalancesFn(ctx, oldState.Key(), newState.Key()) + require.NoError(t, err) + require.True(t, changed) + + changedBalances, ok := valIDs.(ChangedBalances) + require.True(t, ok) + require.Len(t, changedBalances, 3) + require.Contains(t, changedBalances, tutils.NewIDAddr(t, 1)) + require.Contains(t, changedBalances, tutils.NewIDAddr(t, 3)) + require.Contains(t, changedBalances, tutils.NewIDAddr(t, 4)) + + balance1 := changedBalances[tutils.NewIDAddr(t, 1)] + if !balance1.From.Equals(abi.NewTokenAmount(1000)) || !balance1.To.Equals(abi.NewTokenAmount(3000)) { + t.Fatal("Unexpected change to balance") + } + balance3 := changedBalances[tutils.NewIDAddr(t, 3)] + if !balance3.From.Equals(abi.NewTokenAmount(3000)) || !balance3.To.Equals(abi.NewTokenAmount(0)) { + t.Fatal("Unexpected change to balance") + } + balance4 := changedBalances[tutils.NewIDAddr(t, 4)] + if !balance4.From.Equals(abi.NewTokenAmount(0)) || !balance4.To.Equals(abi.NewTokenAmount(5000)) { + t.Fatal("Unexpected change to balance") + } + + // Diff with non-existent address. + getNoAddress := func() []address.Address { return []address.Address{tutils.NewIDAddr(t, 6)} } + diffNoAddressFn := preds.OnStorageMarketActorChanged(preds.OnBalanceChanged(preds.AvailableBalanceChangedForAddresses(getNoAddress))) + changed, _, err = diffNoAddressFn(ctx, oldState.Key(), newState.Key()) + require.NoError(t, err) + require.False(t, changed) + + // Test that OnBalanceChanged does not call the callback if the state has not changed + diffDealBalancesFn := preds.OnBalanceChanged(func(context.Context, BalanceTables, BalanceTables) (bool, UserData, error) { + t.Fatal("No state change so this should not be called") + return false, nil, nil + }) + marketState0 := test.CreateEmptyMarketState(t, store) + marketCid, err := store.Put(ctx, marketState0) + require.NoError(t, err) + marketState, err := market.Load(store, &types.Actor{ + Code: builtin2.StorageMarketActorCodeID, + Head: marketCid, + }) + require.NoError(t, err) + changed, _, err = diffDealBalancesFn(ctx, marketState, marketState) + require.NoError(t, err) + require.False(t, changed) + }) + +} + +func TestMinerSectorChange(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + bs := bstore.NewTemporarySync() + store := adt2.WrapStore(ctx, cbornode.NewCborStore(bs)) + + nextID := uint64(0) + nextIDAddrF := func() address.Address { + defer func() { nextID++ }() + return tutils.NewIDAddr(t, nextID) + } + + owner, worker := nextIDAddrF(), nextIDAddrF() + si0 := newSectorOnChainInfo(0, tutils.MakeCID("0", &miner2.SealedCIDPrefix), big.NewInt(0), abi.ChainEpoch(0), abi.ChainEpoch(10)) + si1 := newSectorOnChainInfo(1, tutils.MakeCID("1", &miner2.SealedCIDPrefix), big.NewInt(1), abi.ChainEpoch(1), abi.ChainEpoch(11)) + si2 := newSectorOnChainInfo(2, tutils.MakeCID("2", &miner2.SealedCIDPrefix), big.NewInt(2), abi.ChainEpoch(2), abi.ChainEpoch(11)) + oldMinerC := createMinerState(ctx, t, store, owner, worker, []miner.SectorOnChainInfo{si0, si1, si2}) + + si3 := newSectorOnChainInfo(3, tutils.MakeCID("3", &miner2.SealedCIDPrefix), big.NewInt(3), abi.ChainEpoch(3), abi.ChainEpoch(12)) + // 0 delete + // 1 extend + // 2 same + // 3 added + si1Ext := si1 + si1Ext.Expiration++ + newMinerC := createMinerState(ctx, t, store, owner, worker, []miner.SectorOnChainInfo{si1Ext, si2, si3}) + + minerAddr := nextIDAddrF() + oldState, err := test.MockTipset(minerAddr, 1) + require.NoError(t, err) + newState, err := test.MockTipset(minerAddr, 2) + require.NoError(t, err) + + api := test.NewMockAPI(bs) + api.SetActor(oldState.Key(), &types.Actor{Head: oldMinerC, Code: builtin2.StorageMinerActorCodeID}) + api.SetActor(newState.Key(), &types.Actor{Head: newMinerC, Code: builtin2.StorageMinerActorCodeID}) + + preds := NewStatePredicates(api) + + minerDiffFn := preds.OnMinerActorChange(minerAddr, preds.OnMinerSectorChange()) + change, val, err := minerDiffFn(ctx, oldState.Key(), newState.Key()) + require.NoError(t, err) + require.True(t, change) + require.NotNil(t, val) + + sectorChanges, ok := val.(*miner.SectorChanges) + require.True(t, ok) + + require.Equal(t, len(sectorChanges.Added), 1) + require.Equal(t, 1, len(sectorChanges.Added)) + require.Equal(t, si3, sectorChanges.Added[0]) + + require.Equal(t, 1, len(sectorChanges.Removed)) + require.Equal(t, si0, sectorChanges.Removed[0]) + + require.Equal(t, 1, len(sectorChanges.Extended)) + require.Equal(t, si1, sectorChanges.Extended[0].From) + require.Equal(t, si1Ext, sectorChanges.Extended[0].To) + + change, val, err = minerDiffFn(ctx, oldState.Key(), oldState.Key()) + require.NoError(t, err) + require.False(t, change) + require.Nil(t, val) + + change, val, err = minerDiffFn(ctx, newState.Key(), oldState.Key()) + require.NoError(t, err) + require.True(t, change) + require.NotNil(t, val) + + sectorChanges, ok = val.(*miner.SectorChanges) + require.True(t, ok) + + require.Equal(t, 1, len(sectorChanges.Added)) + require.Equal(t, si0, sectorChanges.Added[0]) + + require.Equal(t, 1, len(sectorChanges.Removed)) + require.Equal(t, si3, sectorChanges.Removed[0]) + + require.Equal(t, 1, len(sectorChanges.Extended)) + require.Equal(t, si1, sectorChanges.Extended[0].To) + require.Equal(t, si1Ext, sectorChanges.Extended[0].From) +} + +type balance struct { + available abi.TokenAmount + locked abi.TokenAmount +} + +func createMarketState(ctx context.Context, t *testing.T, store adt2.Store, deals map[abi.DealID]*market2.DealState, props map[abi.DealID]*market2.DealProposal, balances map[address.Address]balance) cid.Cid { + dealRootCid := test.CreateDealAMT(ctx, t, store, deals) + propRootCid := createProposalAMT(ctx, t, store, props) + balancesCids := createBalanceTable(ctx, t, store, balances) + state := test.CreateEmptyMarketState(t, store) + state.States = dealRootCid + state.Proposals = propRootCid + state.EscrowTable = balancesCids[0] + state.LockedTable = balancesCids[1] + + stateC, err := store.Put(ctx, state) + require.NoError(t, err) + return stateC +} + +func createProposalAMT(ctx context.Context, t *testing.T, store adt2.Store, props map[abi.DealID]*market2.DealProposal) cid.Cid { + root := adt2.MakeEmptyArray(store) + for dealID, prop := range props { + err := root.Set(uint64(dealID), prop) + require.NoError(t, err) + } + rootCid, err := root.Root() + require.NoError(t, err) + return rootCid +} + +func createBalanceTable(ctx context.Context, t *testing.T, store adt2.Store, balances map[address.Address]balance) [2]cid.Cid { + escrowMapRoot := adt2.MakeEmptyMap(store) + escrowMapRootCid, err := escrowMapRoot.Root() + require.NoError(t, err) + escrowRoot, err := adt2.AsBalanceTable(store, escrowMapRootCid) + require.NoError(t, err) + lockedMapRoot := adt2.MakeEmptyMap(store) + lockedMapRootCid, err := lockedMapRoot.Root() + require.NoError(t, err) + lockedRoot, err := adt2.AsBalanceTable(store, lockedMapRootCid) + require.NoError(t, err) + + for addr, balance := range balances { + err := escrowRoot.Add(addr, big.Add(balance.available, balance.locked)) + require.NoError(t, err) + err = lockedRoot.Add(addr, balance.locked) + require.NoError(t, err) + + } + escrowRootCid, err := escrowRoot.Root() + require.NoError(t, err) + lockedRootCid, err := lockedRoot.Root() + require.NoError(t, err) + return [2]cid.Cid{escrowRootCid, lockedRootCid} +} + +func createMinerState(ctx context.Context, t *testing.T, store adt2.Store, owner, worker address.Address, sectors []miner.SectorOnChainInfo) cid.Cid { + rootCid := createSectorsAMT(ctx, t, store, sectors) + + state := createEmptyMinerState(ctx, t, store, owner, worker) + state.Sectors = rootCid + + stateC, err := store.Put(ctx, state) + require.NoError(t, err) + return stateC +} + +func createEmptyMinerState(ctx context.Context, t *testing.T, store adt2.Store, owner, worker address.Address) *miner2.State { + emptyArrayCid, err := adt2.MakeEmptyArray(store).Root() + require.NoError(t, err) + emptyMap, err := adt2.MakeEmptyMap(store).Root() + require.NoError(t, err) + + emptyDeadline, err := store.Put(store.Context(), miner2.ConstructDeadline(emptyArrayCid)) + require.NoError(t, err) + + emptyVestingFunds := miner2.ConstructVestingFunds() + emptyVestingFundsCid, err := store.Put(store.Context(), emptyVestingFunds) + require.NoError(t, err) + + emptyDeadlines := miner2.ConstructDeadlines(emptyDeadline) + emptyDeadlinesCid, err := store.Put(store.Context(), emptyDeadlines) + require.NoError(t, err) + + minerInfo := emptyMap + + emptyBitfield := bitfield.NewFromSet(nil) + emptyBitfieldCid, err := store.Put(store.Context(), emptyBitfield) + require.NoError(t, err) + + state, err := miner2.ConstructState(minerInfo, 123, 4, emptyBitfieldCid, emptyArrayCid, emptyMap, emptyDeadlinesCid, emptyVestingFundsCid) + require.NoError(t, err) + return state + +} + +func createSectorsAMT(ctx context.Context, t *testing.T, store adt2.Store, sectors []miner.SectorOnChainInfo) cid.Cid { + root := adt2.MakeEmptyArray(store) + for _, sector := range sectors { + sector := miner2.SectorOnChainInfo{ + SectorNumber: sector.SectorNumber, + SealProof: sector.SealProof, + SealedCID: sector.SealedCID, + DealIDs: sector.DealIDs, + Activation: sector.Activation, + Expiration: sector.Expiration, + DealWeight: sector.DealWeight, + VerifiedDealWeight: sector.VerifiedDealWeight, + InitialPledge: sector.InitialPledge, + ExpectedDayReward: sector.ExpectedDayReward, + ExpectedStoragePledge: sector.ExpectedStoragePledge, + ReplacedSectorAge: 0, + ReplacedDayReward: big.NewInt(0), + } + err := root.Set(uint64(sector.SectorNumber), §or) + require.NoError(t, err) + } + rootCid, err := root.Root() + require.NoError(t, err) + return rootCid +} + +// returns a unique SectorOnChainInfo with each invocation with SectorNumber set to `sectorNo`. +func newSectorOnChainInfo(sectorNo abi.SectorNumber, sealed cid.Cid, weight big.Int, activation, expiration abi.ChainEpoch) miner.SectorOnChainInfo { + info := newSectorPreCommitInfo(sectorNo, sealed, expiration) + return miner.SectorOnChainInfo{ + SectorNumber: info.SectorNumber, + SealProof: info.SealProof, + SealedCID: info.SealedCID, + DealIDs: info.DealIDs, + Expiration: info.Expiration, + + Activation: activation, + DealWeight: weight, + VerifiedDealWeight: weight, + InitialPledge: big.Zero(), + ExpectedDayReward: big.Zero(), + ExpectedStoragePledge: big.Zero(), + } +} + +const ( + sectorSealRandEpochValue = abi.ChainEpoch(1) +) + +// returns a unique SectorPreCommitInfo with each invocation with SectorNumber set to `sectorNo`. +func newSectorPreCommitInfo(sectorNo abi.SectorNumber, sealed cid.Cid, expiration abi.ChainEpoch) *miner2.SectorPreCommitInfo { + return &miner2.SectorPreCommitInfo{ + SealProof: abi.RegisteredSealProof_StackedDrg32GiBV1, + SectorNumber: sectorNo, + SealedCID: sealed, + SealRandEpoch: sectorSealRandEpochValue, + DealIDs: nil, + Expiration: expiration, + } +} + +func dealEquality(expected market2.DealState, actual market.DealState) bool { + return expected.LastUpdatedEpoch == actual.LastUpdatedEpoch && + expected.SectorStartEpoch == actual.SectorStartEpoch && + expected.SlashEpoch == actual.SlashEpoch +} diff --git a/pkg/events/tscache.go b/pkg/events/tscache.go new file mode 100644 index 0000000000..d8cfaacd6f --- /dev/null +++ b/pkg/events/tscache.go @@ -0,0 +1,215 @@ +package events + +import ( + "context" + "sync" + + "github.com/filecoin-project/go-state-types/abi" + types "github.com/filecoin-project/venus/venus-shared/chain" + "golang.org/x/xerrors" +) + +type tsCacheAPI interface { + ChainGetTipSetAfterHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) + ChainGetTipSetByHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) + ChainGetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) + ChainHead(context.Context) (*types.TipSet, error) +} + +// tipSetCache implements a simple ring-buffer cache to keep track of recent +// tipsets +type tipSetCache struct { + mu sync.RWMutex + + byKey map[types.TipSetKey]*types.TipSet + byHeight []*types.TipSet + start int // chain head (end) + len int + + storage tsCacheAPI +} + +func newTSCache(storage tsCacheAPI, cap abi.ChainEpoch) *tipSetCache { + return &tipSetCache{ + byKey: make(map[types.TipSetKey]*types.TipSet, cap), + byHeight: make([]*types.TipSet, cap), + start: 0, + len: 0, + + storage: storage, + } +} +func (tsc *tipSetCache) ChainGetTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error) { + if ts, ok := tsc.byKey[tsk]; ok { + return ts, nil + } + return tsc.storage.ChainGetTipSet(ctx, tsk) +} + +func (tsc *tipSetCache) ChainGetTipSetByHeight(ctx context.Context, height abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) { + return tsc.get(ctx, height, tsk, true) +} + +func (tsc *tipSetCache) ChainGetTipSetAfterHeight(ctx context.Context, height abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) { + return tsc.get(ctx, height, tsk, false) +} + +func (tsc *tipSetCache) get(ctx context.Context, height abi.ChainEpoch, tsk types.TipSetKey, prev bool) (*types.TipSet, error) { + fallback := tsc.storage.ChainGetTipSetAfterHeight + if prev { + fallback = tsc.storage.ChainGetTipSetByHeight + } + tsc.mu.RLock() + + // Nothing in the cache? + if tsc.len == 0 { + tsc.mu.RUnlock() + log.Warnf("tipSetCache.get: cache is empty, requesting from storage (h=%d)", height) + return fallback(ctx, height, tsk) + } + + // Resolve the head. + head := tsc.byHeight[tsc.start] + if !tsk.IsEmpty() { + // Not on this chain? + var ok bool + head, ok = tsc.byKey[tsk] + if !ok { + tsc.mu.RUnlock() + return fallback(ctx, height, tsk) + } + } + + headH := head.Height() + tailH := headH - abi.ChainEpoch(tsc.len) + + if headH == height { + tsc.mu.RUnlock() + return head, nil + } else if headH < height { + tsc.mu.RUnlock() + // If the user doesn't pass a tsk, we assume "head" is the last tipset we processed. + return nil, xerrors.Errorf("requested epoch is in the future") + } else if height < tailH { + log.Warnf("tipSetCache.get: requested tipset not in cache, requesting from storage (h=%d; tail=%d)", height, tailH) + tsc.mu.RUnlock() + return fallback(ctx, height, head.Key()) + } + + direction := 1 + if prev { + direction = -1 + } + var ts *types.TipSet + for i := 0; i < tsc.len && ts == nil; i += direction { + ts = tsc.byHeight[normalModulo(tsc.start-int(headH-height)+i, len(tsc.byHeight))] + } + tsc.mu.RUnlock() + return ts, nil +} + +func (tsc *tipSetCache) ChainHead(ctx context.Context) (*types.TipSet, error) { + tsc.mu.RLock() + best := tsc.byHeight[tsc.start] + tsc.mu.RUnlock() + if best == nil { + return tsc.storage.ChainHead(ctx) + } + return best, nil +} + +func (tsc *tipSetCache) add(to *types.TipSet) error { + tsc.mu.Lock() + defer tsc.mu.Unlock() + + if tsc.len > 0 { + best := tsc.byHeight[tsc.start] + if best.Height() >= to.Height() { + return xerrors.Errorf("tipSetCache.add: expected new tipset height to be at least %d, was %d", tsc.byHeight[tsc.start].Height()+1, to.Height()) + } + if best.Key() != to.Parents() { + return xerrors.Errorf( + "tipSetCache.add: expected new tipset %s (%d) to follow %s (%d), its parents are %s", + to.Key(), to.Height(), best.Key(), best.Height(), best.Parents(), + ) + } + } + + nextH := to.Height() + if tsc.len > 0 { + nextH = tsc.byHeight[tsc.start].Height() + 1 + } + + // fill null blocks + for nextH != to.Height() { + tsc.start = normalModulo(tsc.start+1, len(tsc.byHeight)) + was := tsc.byHeight[tsc.start] + if was != nil { + tsc.byHeight[tsc.start] = nil + delete(tsc.byKey, was.Key()) + } + if tsc.len < len(tsc.byHeight) { + tsc.len++ + } + nextH++ + } + + tsc.start = normalModulo(tsc.start+1, len(tsc.byHeight)) + was := tsc.byHeight[tsc.start] + if was != nil { + delete(tsc.byKey, was.Key()) + } + tsc.byHeight[tsc.start] = to + if tsc.len < len(tsc.byHeight) { + tsc.len++ + } + tsc.byKey[to.Key()] = to + return nil +} + +func (tsc *tipSetCache) revert(from *types.TipSet) error { + tsc.mu.Lock() + defer tsc.mu.Unlock() + + return tsc.revertUnlocked(from) +} + +func (tsc *tipSetCache) revertUnlocked(ts *types.TipSet) error { + if tsc.len == 0 { + return nil // this can happen, and it's fine + } + + was := tsc.byHeight[tsc.start] + + if !was.Equals(ts) { + return xerrors.New("tipSetCache.revert: revert tipset didn't match cache head") + } + delete(tsc.byKey, was.Key()) + + tsc.byHeight[tsc.start] = nil + tsc.start = normalModulo(tsc.start-1, len(tsc.byHeight)) + tsc.len-- + + _ = tsc.revertUnlocked(nil) // revert null block gap + return nil +} + +func (tsc *tipSetCache) observer() TipSetObserver { //nolint + return (*tipSetCacheObserver)(tsc) +} + +type tipSetCacheObserver tipSetCache + +var _ TipSetObserver = new(tipSetCacheObserver) + +func (tsc *tipSetCacheObserver) Apply(_ context.Context, _, to *types.TipSet) error { + return (*tipSetCache)(tsc).add(to) +} + +func (tsc *tipSetCacheObserver) Revert(ctx context.Context, from, _ *types.TipSet) error { + return (*tipSetCache)(tsc).revert(from) +} + +func normalModulo(n, m int) int { + return ((n % m) + m) % m +} diff --git a/pkg/events/tscache_test.go b/pkg/events/tscache_test.go new file mode 100644 index 0000000000..0c47f2a9b0 --- /dev/null +++ b/pkg/events/tscache_test.go @@ -0,0 +1,217 @@ +package events + +import ( + "context" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type tsCacheAPIFailOnStorageCall struct { + t *testing.T +} + +func (tc *tsCacheAPIFailOnStorageCall) ChainGetTipSetAfterHeight(ctx context.Context, epoch abi.ChainEpoch, key types.TipSetKey) (*types.TipSet, error) { + tc.t.Fatal("storage call") + return &types.TipSet{}, nil +} + +func (tc *tsCacheAPIFailOnStorageCall) ChainGetTipSetByHeight(ctx context.Context, epoch abi.ChainEpoch, key types.TipSetKey) (*types.TipSet, error) { + tc.t.Fatal("storage call") + return &types.TipSet{}, nil +} +func (tc *tsCacheAPIFailOnStorageCall) ChainHead(ctx context.Context) (*types.TipSet, error) { + tc.t.Fatal("storage call") + return &types.TipSet{}, nil +} +func (tc *tsCacheAPIFailOnStorageCall) ChainGetTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error) { + tc.t.Fatal("storage call") + return &types.TipSet{}, nil +} + +type cacheHarness struct { + t *testing.T + + miner address.Address + tsc *tipSetCache + height abi.ChainEpoch +} + +func newCacheharness(t *testing.T) *cacheHarness { + a, err := address.NewFromString("t00") + require.NoError(t, err) + + h := &cacheHarness{ + t: t, + tsc: newTSCache(&tsCacheAPIFailOnStorageCall{t: t}, 50), + height: 75, + miner: a, + } + h.addWithParents(nil) + return h +} + +func (h *cacheHarness) addWithParents(parents []cid.Cid) { + ts, err := types.NewTipSet([]*types.BlockHeader{{ + Miner: h.miner, + Height: h.height, + ParentStateRoot: dummyCid, + Messages: dummyCid, + ParentMessageReceipts: dummyCid, + BlockSig: &crypto.Signature{Type: crypto.SigTypeBLS}, + BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS}, + Parents: parents, + }}) + require.NoError(h.t, err) + require.NoError(h.t, h.tsc.add(ts)) + h.height++ +} + +func (h *cacheHarness) add() { + last, err := h.tsc.ChainHead(context.Background()) + require.NoError(h.t, err) + h.addWithParents(last.Cids()) +} + +func (h *cacheHarness) revert() { + best, err := h.tsc.ChainHead(context.Background()) + require.NoError(h.t, err) + err = h.tsc.revert(best) + require.NoError(h.t, err) + h.height-- +} + +func (h *cacheHarness) skip(n abi.ChainEpoch) { + h.height += n +} + +func TestTsCache(t *testing.T) { + tf.UnitTest(t) + h := newCacheharness(t) + + for i := 0; i < 9000; i++ { + if i%90 > 60 { + h.revert() + } else { + h.add() + } + } +} + +func TestTsCacheNulls(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + h := newCacheharness(t) + + h.add() + h.add() + h.add() + h.skip(5) + + h.add() + h.add() + + best, err := h.tsc.ChainHead(ctx) + require.NoError(t, err) + require.Equal(t, h.height-1, best.Height()) + + ts, err := h.tsc.ChainGetTipSetByHeight(ctx, h.height-1, types.EmptyTSK) + require.NoError(t, err) + require.Equal(t, h.height-1, ts.Height()) + + ts, err = h.tsc.ChainGetTipSetByHeight(ctx, h.height-2, types.EmptyTSK) + require.NoError(t, err) + require.Equal(t, h.height-2, ts.Height()) + + // Should skip the nulls and walk back to the last tipset. + ts, err = h.tsc.ChainGetTipSetByHeight(ctx, h.height-3, types.EmptyTSK) + require.NoError(t, err) + require.Equal(t, h.height-8, ts.Height()) + + ts, err = h.tsc.ChainGetTipSetByHeight(ctx, h.height-8, types.EmptyTSK) + require.NoError(t, err) + require.Equal(t, h.height-8, ts.Height()) + + best, err = h.tsc.ChainHead(ctx) + require.NoError(t, err) + require.NoError(t, h.tsc.revert(best)) + + best, err = h.tsc.ChainHead(ctx) + require.NoError(t, err) + require.NoError(t, h.tsc.revert(best)) + + best, err = h.tsc.ChainHead(ctx) + require.NoError(t, err) + require.Equal(t, h.height-8, best.Height()) + + h.skip(50) + h.add() + + ts, err = h.tsc.ChainGetTipSetByHeight(ctx, h.height-1, types.EmptyTSK) + require.NoError(t, err) + require.Equal(t, h.height-1, ts.Height()) +} + +type tsCacheAPIStorageCallCounter struct { + t *testing.T + chainGetTipSetByHeight int + chainGetTipSetAfterHeight int + chainGetTipSet int + chainHead int +} + +func (tc *tsCacheAPIStorageCallCounter) ChainGetTipSetByHeight(ctx context.Context, epoch abi.ChainEpoch, key types.TipSetKey) (*types.TipSet, error) { + tc.chainGetTipSetByHeight++ + return &types.TipSet{}, nil +} +func (tc *tsCacheAPIStorageCallCounter) ChainGetTipSetAfterHeight(ctx context.Context, epoch abi.ChainEpoch, key types.TipSetKey) (*types.TipSet, error) { + tc.chainGetTipSetAfterHeight++ + return &types.TipSet{}, nil +} +func (tc *tsCacheAPIStorageCallCounter) ChainHead(ctx context.Context) (*types.TipSet, error) { + tc.chainHead++ + return &types.TipSet{}, nil +} +func (tc *tsCacheAPIStorageCallCounter) ChainGetTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error) { + tc.chainGetTipSet++ + return &types.TipSet{}, nil +} + +func TestTsCacheEmpty(t *testing.T) { + tf.UnitTest(t) + + // Calling best on an empty cache should just call out to the chain API + callCounter := &tsCacheAPIStorageCallCounter{t: t} + tsc := newTSCache(callCounter, 50) + _, err := tsc.ChainHead(context.Background()) + require.NoError(t, err) + require.Equal(t, 1, callCounter.chainHead) +} + +func TestTsCacheSkip(t *testing.T) { + tf.UnitTest(t) + + h := newCacheharness(t) + + ts, err := types.NewTipSet([]*types.BlockHeader{{ + Miner: h.miner, + Height: h.height, + ParentStateRoot: dummyCid, + Messages: dummyCid, + ParentMessageReceipts: dummyCid, + BlockSig: &crypto.Signature{Type: crypto.SigTypeBLS}, + BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS}, + // With parents that don't match the last block. + Parents: types.EmptyTSK.Cids(), + }}) + require.NoError(h.t, err) + err = h.tsc.add(ts) + require.Error(t, err) +} diff --git a/pkg/events/utils.go b/pkg/events/utils.go new file mode 100644 index 0000000000..e9b62282f6 --- /dev/null +++ b/pkg/events/utils.go @@ -0,0 +1,51 @@ +package events + +import ( + "context" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/constants" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// CheckMsg convenience function for checking and matching messages +func (me *messageEvents) CheckMsg(smsg types.ChainMsg, hnd MsgHandler) CheckFunc { + msg := smsg.VMMessage() + + return func(ctx context.Context, ts *types.TipSet) (done bool, more bool, err error) { + fa, err := me.cs.StateGetActor(ctx, msg.From, ts.Key()) + if err != nil { + return false, true, err + } + + // >= because actor nonce is actually the next nonce that is expected to appear on chain + if msg.Nonce >= fa.Nonce { + return false, true, nil + } + + ml, err := me.cs.StateSearchMsg(ctx, ts.Key(), msg.Cid(), constants.LookbackNoLimit, true) + if err != nil { + return false, true, xerrors.Errorf("getting receipt in CheckMsg: %w", err) + } + + if ml == nil { + more, err = hnd(msg, nil, ts, ts.Height()) + } else { + more, err = hnd(msg, &ml.Receipt, ts, ts.Height()) + } + + return true, more, err + } +} + +//MatchMsg check that a specific message is in a block message +func (me *messageEvents) MatchMsg(inmsg *types.Message) MsgMatchFunc { + return func(msg *types.Message) (matched bool, err error) { + if msg.From == inmsg.From && msg.Nonce == inmsg.Nonce && !inmsg.Equals(msg) { + return false, xerrors.Errorf("matching msg %s from %s, nonce %d: got duplicate origin/nonce msg %d", inmsg.Cid(), inmsg.From, inmsg.Nonce, msg.Nonce) + } + + return inmsg.Equals(msg), nil + } +} diff --git a/pkg/fork/fork.go b/pkg/fork/fork.go new file mode 100644 index 0000000000..5bed606f3e --- /dev/null +++ b/pkg/fork/fork.go @@ -0,0 +1,1994 @@ +package fork + +import ( + "bytes" + "context" + "encoding/binary" + "errors" + "runtime" + "sort" + "sync" + "time" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/go-state-types/rt" + ipfsblock "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + blockstore "github.com/ipfs/go-ipfs-blockstore" + cbor "github.com/ipfs/go-ipld-cbor" + logging "github.com/ipfs/go-log/v2" + mh "github.com/multiformats/go-multihash" + cbg "github.com/whyrusleeping/cbor-gen" + "go.opencensus.io/trace" + + "github.com/filecoin-project/specs-actors/actors/migration/nv3" + "github.com/filecoin-project/specs-actors/v2/actors/migration/nv4" + "github.com/filecoin-project/specs-actors/v2/actors/migration/nv7" + "github.com/filecoin-project/specs-actors/v3/actors/migration/nv10" + "github.com/filecoin-project/specs-actors/v4/actors/migration/nv12" + "github.com/filecoin-project/specs-actors/v5/actors/migration/nv13" + "github.com/filecoin-project/specs-actors/v6/actors/migration/nv14" + "github.com/filecoin-project/specs-actors/v7/actors/migration/nv15" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + multisig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" + power0 "github.com/filecoin-project/specs-actors/actors/builtin/power" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + vmstate "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/multisig" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var log = logging.Logger("fork") + +var ErrExpensiveFork = errors.New("refusing explicit call due to state fork at epoch") + +// MigrationCache can be used to cache information used by a migration. This is primarily useful to +// "pre-compute" some migration state ahead of time, and make it accessible in the migration itself. +type MigrationCache interface { + Write(key string, value cid.Cid) error + Read(key string) (bool, cid.Cid, error) + Load(key string, loadFunc func() (cid.Cid, error)) (cid.Cid, error) +} + +// MigrationFunc is a migration function run at every upgrade. +// +// - The cache is a per-upgrade cache, pre-populated by pre-migrations. +// - The oldState is the state produced by the upgrade epoch. +// - The returned newState is the new state that will be used by the next epoch. +// - The height is the upgrade epoch height (already executed). +// - The tipset is the tipset for the last non-null block before the upgrade. Do +// not assume that ts.Height() is the upgrade height. +type MigrationFunc func( + ctx context.Context, + cache MigrationCache, + oldState cid.Cid, + height abi.ChainEpoch, + ts *types.TipSet, +) (newState cid.Cid, err error) + +// PreMigrationFunc is a function run _before_ a network upgrade to pre-compute part of the network +// upgrade and speed it up. +type PreMigrationFunc func( + ctx context.Context, + cache MigrationCache, + oldState cid.Cid, + height abi.ChainEpoch, + ts *types.TipSet, +) error + +// PreMigration describes a pre-migration step to prepare for a network state upgrade. Pre-migrations +// are optimizations, are not guaranteed to run, and may be canceled and/or run multiple times. +type PreMigration struct { + // PreMigration is the pre-migration function to run at the specified time. This function is + // run asynchronously and must abort promptly when canceled. + PreMigration PreMigrationFunc + + // StartWithin specifies that this pre-migration should be started at most StartWithin + // epochs before the upgrade. + StartWithin abi.ChainEpoch + + // DontStartWithin specifies that this pre-migration should not be started DontStartWithin + // epochs before the final upgrade epoch. + // + // This should be set such that the pre-migration is likely to complete before StopWithin. + DontStartWithin abi.ChainEpoch + + // StopWithin specifies that this pre-migration should be stopped StopWithin epochs of the + // final upgrade epoch. + StopWithin abi.ChainEpoch +} + +type Upgrade struct { + Height abi.ChainEpoch + Network network.Version + Expensive bool + Migration MigrationFunc + + // PreMigrations specifies a set of pre-migration functions to run at the indicated epochs. + // These functions should fill the given cache with information that can speed up the + // eventual full migration at the upgrade epoch. + PreMigrations []PreMigration +} + +type UpgradeSchedule []Upgrade + +type migrationLogger struct{} + +func (ml migrationLogger) Log(level rt.LogLevel, msg string, args ...interface{}) { + switch level { + case rt.DEBUG: + log.Debugf(msg, args...) + case rt.INFO: + log.Infof(msg, args...) + case rt.WARN: + log.Warnf(msg, args...) + case rt.ERROR: + log.Errorf(msg, args...) + } +} + +func defaultUpgradeSchedule(cf *ChainFork, upgradeHeight *config.ForkUpgradeConfig) UpgradeSchedule { + var us UpgradeSchedule + + updates := []Upgrade{{ + Height: upgradeHeight.UpgradeBreezeHeight, + Network: network.Version1, + Migration: cf.UpgradeFaucetBurnRecovery, + }, { + Height: upgradeHeight.UpgradeSmokeHeight, + Network: network.Version2, + Migration: nil, + }, { + Height: upgradeHeight.UpgradeIgnitionHeight, + Network: network.Version3, + Migration: cf.UpgradeIgnition, + }, { + Height: upgradeHeight.UpgradeRefuelHeight, + Network: network.Version3, + Migration: cf.UpgradeRefuel, + }, { + Height: upgradeHeight.UpgradeAssemblyHeight, + Network: network.Version4, + Expensive: true, + Migration: cf.UpgradeActorsV2, + }, { + Height: upgradeHeight.UpgradeTapeHeight, + Network: network.Version5, + Migration: nil, + }, { + Height: upgradeHeight.UpgradeLiftoffHeight, + Network: network.Version5, + Migration: cf.UpgradeLiftoff, + }, { + Height: upgradeHeight.UpgradeKumquatHeight, + Network: network.Version6, + Migration: nil, + }, + //{ + // Height: upgradeHeight.UpgradePriceListOopsHeight, + // Network: network.Version6AndAHalf, + // Migration: nil, + //}, + { + Height: upgradeHeight.UpgradeCalicoHeight, + Network: network.Version7, + Migration: cf.UpgradeCalico, + }, { + Height: upgradeHeight.UpgradePersianHeight, + Network: network.Version8, + Migration: nil, + }, { + Height: upgradeHeight.UpgradeOrangeHeight, + Network: network.Version9, + Migration: nil, + }, { + Height: upgradeHeight.UpgradeTrustHeight, + Network: network.Version10, + Migration: cf.UpgradeActorsV3, + PreMigrations: []PreMigration{{ + PreMigration: cf.PreUpgradeActorsV3, + StartWithin: 120, + DontStartWithin: 60, + StopWithin: 35, + }, { + PreMigration: cf.PreUpgradeActorsV3, + StartWithin: 30, + DontStartWithin: 15, + StopWithin: 5, + }}, + Expensive: true, + }, { + Height: upgradeHeight.UpgradeNorwegianHeight, + Network: network.Version11, + Migration: nil, + }, { + Height: upgradeHeight.UpgradeTurboHeight, + Network: network.Version12, + Migration: cf.UpgradeActorsV4, + PreMigrations: []PreMigration{{ + PreMigration: cf.PreUpgradeActorsV4, + StartWithin: 120, + DontStartWithin: 60, + StopWithin: 35, + }, { + PreMigration: cf.PreUpgradeActorsV4, + StartWithin: 30, + DontStartWithin: 15, + StopWithin: 5, + }}, + Expensive: true, + }, { + Height: upgradeHeight.UpgradeHyperdriveHeight, + Network: network.Version13, + Migration: cf.UpgradeActorsV5, + PreMigrations: []PreMigration{{ + PreMigration: cf.PreUpgradeActorsV5, + StartWithin: 120, + DontStartWithin: 60, + StopWithin: 35, + }, { + PreMigration: cf.PreUpgradeActorsV5, + StartWithin: 30, + DontStartWithin: 15, + StopWithin: 5, + }}, + Expensive: true, + }, { + Height: upgradeHeight.UpgradeChocolateHeight, + Network: network.Version14, + Migration: cf.UpgradeActorsV6, + PreMigrations: []PreMigration{{ + PreMigration: cf.PreUpgradeActorsV6, + StartWithin: 120, + DontStartWithin: 60, + StopWithin: 35, + }, { + PreMigration: cf.PreUpgradeActorsV6, + StartWithin: 30, + DontStartWithin: 15, + StopWithin: 5, + }}, + Expensive: true, + }, { + Height: upgradeHeight.UpgradeSnapDealsHeight, + Network: network.Version15, + Migration: cf.UpgradeActorsV7, + PreMigrations: []PreMigration{{ + PreMigration: cf.PreUpgradeActorsV7, + StartWithin: 120, + DontStartWithin: 60, + StopWithin: 35, + }, { + PreMigration: cf.PreUpgradeActorsV7, + StartWithin: 30, + DontStartWithin: 15, + StopWithin: 5, + }}, + Expensive: true, + }, + } + + for _, u := range updates { + if u.Height < 0 { + // upgrade disabled + continue + } + us = append(us, u) + } + return us +} + +func (us UpgradeSchedule) Validate() error { + // Make sure each upgrade is valid. + for _, u := range us { + if u.Network <= 0 { + return xerrors.Errorf("cannot upgrade to version <= 0: %d", u.Network) + } + + for _, m := range u.PreMigrations { + if m.StartWithin <= 0 { + return xerrors.Errorf("pre-migration must specify a positive start-within epoch") + } + + if m.DontStartWithin < 0 || m.StopWithin < 0 { + return xerrors.Errorf("pre-migration must specify non-negative epochs") + } + + if m.StartWithin <= m.StopWithin { + return xerrors.Errorf("pre-migration start-within must come before stop-within") + } + + // If we have a dont-start-within. + if m.DontStartWithin != 0 { + if m.DontStartWithin < m.StopWithin { + return xerrors.Errorf("pre-migration dont-start-within must come before stop-within") + } + if m.StartWithin <= m.DontStartWithin { + return xerrors.Errorf("pre-migration start-within must come after dont-start-within") + } + } + } + if !sort.SliceIsSorted(u.PreMigrations, func(i, j int) bool { + return u.PreMigrations[i].StartWithin > u.PreMigrations[j].StartWithin //nolint:scopelint,gosec + }) { + return xerrors.Errorf("pre-migrations must be sorted by start epoch") + } + } + + // Make sure the upgrade order makes sense. + for i := 1; i < len(us); i++ { + prev := &us[i-1] + curr := &us[i] + if !(prev.Network <= curr.Network) { + return xerrors.Errorf("cannot downgrade from version %d to version %d", prev.Network, curr.Network) + } + // Make sure the heights make sense. + if prev.Height < 0 { + // Previous upgrade was disabled. + continue + } + if !(prev.Height < curr.Height) { + return xerrors.Errorf("upgrade heights must be strictly increasing: upgrade %d was at height %d, followed by upgrade %d at height %d", i-1, prev.Height, i, curr.Height) + } + } + return nil +} + +type chainReader interface { + GetHead() *types.TipSet + GetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) + GetTipSetByHeight(context.Context, *types.TipSet, abi.ChainEpoch, bool) (*types.TipSet, error) + GetTipSetState(context.Context, *types.TipSet) (vmstate.Tree, error) + GetGenesisBlock(context.Context) (*types.BlockHeader, error) + SubHeadChanges(context.Context) chan []*apitypes.HeadChange +} + +type IFork interface { + HandleStateForks(ctx context.Context, root cid.Cid, height abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) + GetNtwkVersion(ctx context.Context, height abi.ChainEpoch) network.Version + HasExpensiveFork(ctx context.Context, height abi.ChainEpoch) bool + GetForkUpgrade() *config.ForkUpgradeConfig + Start(ctx context.Context) error +} + +var _ = IFork((*ChainFork)(nil)) + +type versionSpec struct { + networkVersion network.Version + atOrBelow abi.ChainEpoch +} + +type migration struct { + upgrade MigrationFunc + preMigrations []PreMigration + cache *nv10.MemMigrationCache +} + +type ChainFork struct { + cr chainReader + bs blockstore.Blockstore + ipldstore cbor.IpldStore + + // Determines the network version at any given epoch. + networkVersions []versionSpec + latestVersion network.Version + + // Maps chain epochs to upgrade functions. + stateMigrations map[abi.ChainEpoch]*migration + // A set of potentially expensive/time consuming upgrades. Explicit + // calls for, e.g., gas estimation fail against this epoch with + // ErrExpensiveFork. + expensiveUpgrades map[abi.ChainEpoch]struct{} + + // upgrade param + networkType int + forkUpgrade *config.ForkUpgradeConfig +} + +func NewChainFork(ctx context.Context, cr chainReader, ipldstore cbor.IpldStore, bs blockstore.Blockstore, networkParams *config.NetworkParamsConfig) (*ChainFork, error) { + + fork := &ChainFork{ + cr: cr, + bs: bs, + ipldstore: ipldstore, + networkType: networkParams.NetworkType, + forkUpgrade: networkParams.ForkUpgradeParam, + } + + // If we have upgrades, make sure they're in-order and make sense. + us := defaultUpgradeSchedule(fork, networkParams.ForkUpgradeParam) + if err := us.Validate(); err != nil { + return nil, err + } + + stateMigrations := make(map[abi.ChainEpoch]*migration, len(us)) + expensiveUpgrades := make(map[abi.ChainEpoch]struct{}, len(us)) + var networkVersions []versionSpec + lastVersion := networkParams.GenesisNetworkVersion + if len(us) > 0 { + // If we have any upgrades, process them and create a version schedule. + for _, upgrade := range us { + if upgrade.Migration != nil || upgrade.PreMigrations != nil { + migration := &migration{ + upgrade: upgrade.Migration, + preMigrations: upgrade.PreMigrations, + cache: nv10.NewMemMigrationCache(), + } + stateMigrations[upgrade.Height] = migration + } + if upgrade.Expensive { + expensiveUpgrades[upgrade.Height] = struct{}{} + } + networkVersions = append(networkVersions, versionSpec{ + networkVersion: lastVersion, + atOrBelow: upgrade.Height, + }) + lastVersion = upgrade.Network + } + } + + fork.networkVersions = networkVersions + fork.latestVersion = lastVersion + fork.stateMigrations = stateMigrations + fork.expensiveUpgrades = expensiveUpgrades + + return fork, nil +} + +func (c *ChainFork) Start(ctx context.Context) error { + log.Info("preMigrationWorker start ...") + go c.preMigrationWorker(ctx) + + return nil +} + +func (c *ChainFork) StateTree(ctx context.Context, st cid.Cid) (*vmstate.State, error) { + return vmstate.LoadState(ctx, c.ipldstore, st) +} + +func (c *ChainFork) HandleStateForks(ctx context.Context, root cid.Cid, height abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + retCid := root + var err error + u := c.stateMigrations[height] + if u != nil && u.upgrade != nil { + startTime := time.Now() + log.Warnw("STARTING migration", "height", height, "from", root) + // Yes, we clone the cache, even for the final upgrade epoch. Why? Reverts. We may + // have to migrate multiple times. + tmpCache := u.cache.Clone() + retCid, err = u.upgrade(ctx, tmpCache, root, height, ts) + if err != nil { + log.Errorw("FAILED migration", "height", height, "from", root, "error", err) + return cid.Undef, err + } + // Yes, we update the cache, even for the final upgrade epoch. Why? Reverts. This + // can save us a _lot_ of time because very few actors will have changed if we + // do a small revert then need to re-run the migration. + u.cache.Update(tmpCache) + log.Warnw("COMPLETED migration", + "height", height, + "from", root, + "to", retCid, + "duration", time.Since(startTime), + ) + } + + return retCid, nil +} + +func (c *ChainFork) HasExpensiveFork(ctx context.Context, height abi.ChainEpoch) bool { + _, ok := c.expensiveUpgrades[height] + return ok +} + +func (c *ChainFork) GetNtwkVersion(ctx context.Context, height abi.ChainEpoch) network.Version { + // The epochs here are the _last_ epoch for every version, or -1 if the + // version is disabled. + for _, spec := range c.networkVersions { + if height <= spec.atOrBelow { + return spec.networkVersion + } + } + return c.latestVersion +} + +func runPreMigration(ctx context.Context, fn PreMigrationFunc, cache *nv10.MemMigrationCache, ts *types.TipSet) { + height := ts.Height() + parent := ts.Blocks()[0].ParentStateRoot + + startTime := time.Now() + + log.Warn("STARTING pre-migration") + // Clone the cache so we don't actually _update_ it + // till we're done. Otherwise, if we fail, the next + // migration to use the cache may assume that + // certain blocks exist, even if they don't. + tmpCache := cache.Clone() + err := fn(ctx, tmpCache, parent, height, ts) + if err != nil { + log.Errorw("FAILED pre-migration", "error", err) + return + } + // Finally, if everything worked, update the cache. + cache.Update(tmpCache) + log.Warnw("COMPLETED pre-migration", "duration", time.Since(startTime)) +} + +func (c *ChainFork) preMigrationWorker(ctx context.Context) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + type op struct { + after abi.ChainEpoch + notAfter abi.ChainEpoch + run func(ts *types.TipSet) + } + + var wg sync.WaitGroup + defer wg.Wait() + + // Turn each pre-migration into an operation in a schedule. + var schedule []op + for upgradeEpoch, migration := range c.stateMigrations { + cache := migration.cache + for _, prem := range migration.preMigrations { + preCtx, preCancel := context.WithCancel(ctx) + migrationFunc := prem.PreMigration + + afterEpoch := upgradeEpoch - prem.StartWithin + notAfterEpoch := upgradeEpoch - prem.DontStartWithin + stopEpoch := upgradeEpoch - prem.StopWithin + // We can't start after we stop. + if notAfterEpoch > stopEpoch { + notAfterEpoch = stopEpoch - 1 + } + + // Add an op to start a pre-migration. + schedule = append(schedule, op{ + after: afterEpoch, + notAfter: notAfterEpoch, + + // TODO: are these values correct? + run: func(ts *types.TipSet) { + wg.Add(1) + go func() { + defer wg.Done() + runPreMigration(preCtx, migrationFunc, cache, ts) + }() + }, + }) + + // Add an op to cancel the pre-migration if it's still running. + schedule = append(schedule, op{ + after: stopEpoch, + notAfter: -1, + run: func(ts *types.TipSet) { preCancel() }, + }) + } + } + + // Then sort by epoch. + sort.Slice(schedule, func(i, j int) bool { + return schedule[i].after < schedule[j].after + }) + + // Finally, when the head changes, see if there's anything we need to do. + // + // We're intentionally ignoring reorgs as they don't matter for our purposes. + for change := range c.cr.SubHeadChanges(ctx) { + for _, head := range change { + for len(schedule) > 0 { + op := &schedule[0] + if head.Val.Height() < op.after { + break + } + + // If we haven't passed the pre-migration height... + if op.notAfter < 0 || head.Val.Height() < op.notAfter { + op.run(head.Val) + } + schedule = schedule[1:] + } + } + } +} + +func doTransfer(tree vmstate.Tree, from, to address.Address, amt abi.TokenAmount) error { + fromAct, found, err := tree.GetActor(context.TODO(), from) + if err != nil { + return xerrors.Errorf("failed to get 'from' actor for transfer: %v", err) + } + if !found { + return xerrors.Errorf("did not find 'from' actor for transfer: %v", from.String()) + } + + fromAct.Balance = big.Sub(fromAct.Balance, amt) + if fromAct.Balance.Sign() < 0 { + return xerrors.Errorf("(sanity) deducted more funds from target account than it had (%s, %s)", from, types.FIL(amt)) + } + + if err := tree.SetActor(context.TODO(), from, fromAct); err != nil { + return xerrors.Errorf("failed to persist from actor: %v", err) + } + + toAct, found, err := tree.GetActor(context.TODO(), to) + if err != nil { + return xerrors.Errorf("failed to get 'to' actor for transfer: %v", err) + } + if !found { + return xerrors.Errorf("did not find 'to' actor for transfer: %v", from.String()) + } + + toAct.Balance = big.Add(toAct.Balance, amt) + + if err := tree.SetActor(context.TODO(), to, toAct); err != nil { + return xerrors.Errorf("failed to persist to actor: %v", err) + } + + return nil +} + +func (c *ChainFork) ParentState(ts *types.TipSet) cid.Cid { + if ts == nil { + tts := c.cr.GetHead() + return tts.Blocks()[0].ParentStateRoot + } + return ts.Blocks()[0].ParentStateRoot +} + +func (c *ChainFork) UpgradeFaucetBurnRecovery(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + // Some initial parameters + FundsForMiners := types.FromFil(1_000_000) + LookbackEpoch := abi.ChainEpoch(32000) + AccountCap := types.FromFil(0) + BaseMinerBalance := types.FromFil(20) + DesiredReimbursementBalance := types.FromFil(5_000_000) + + isSystemAccount := func(addr address.Address) (bool, error) { + id, err := address.IDFromAddress(addr) + if err != nil { + return false, xerrors.Errorf("id address: %v", err) + } + + if id < 1000 { + return true, nil + } + return false, nil + } + + minerFundsAlloc := func(pow, tpow abi.StoragePower) abi.TokenAmount { + return big.Div(big.Mul(pow, FundsForMiners), tpow) + } + + // Grab lookback state for account checks + lbts, err := c.cr.GetTipSetByHeight(ctx, ts, LookbackEpoch, false) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to get tipset at lookback height: %v", err) + } + + pts, err := c.cr.GetTipSet(ctx, lbts.Parents()) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to get tipset : %v", err) + } + + lbtree, err := c.cr.GetTipSetState(ctx, pts) + if err != nil { + return cid.Undef, xerrors.Errorf("loading state tree failed: %v", err) + } + + tree, err := c.StateTree(ctx, root) + if err != nil { + return cid.Undef, xerrors.Errorf("getting state tree: %v", err) + } + + type transfer struct { + From address.Address + To address.Address + Amt abi.TokenAmount + } + + // todo not needed + var transfers []transfer + //subcalls := make([]types.ExecutionTrace, 0) + //transferCb := func(trace types.ExecutionTrace) { + // subcalls = append(subcalls, trace) + //} + + // Take all excess funds away, put them into the reserve account + err = tree.ForEach(func(addr address.Address, act *types.Actor) error { + switch act.Code { + case builtin0.AccountActorCodeID, builtin0.MultisigActorCodeID, builtin0.PaymentChannelActorCodeID: + sysAcc, err := isSystemAccount(addr) + if err != nil { + return xerrors.Errorf("checking system account: %v", err) + } + + if !sysAcc { + transfers = append(transfers, transfer{ + From: addr, + To: builtin.ReserveAddress, + Amt: act.Balance, + }) + } + case builtin0.StorageMinerActorCodeID: + var st miner0.State + if err := c.ipldstore.Get(ctx, act.Head, &st); err != nil { + return xerrors.Errorf("failed to load miner state: %v", err) + } + + var available abi.TokenAmount + { + defer func() { + if err := recover(); err != nil { + log.Warnf("Get available balance failed (%s, %s, %s): %s", addr, act.Head, act.Balance, err) + } + available = abi.NewTokenAmount(0) + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available = st.GetAvailableBalance(act.Balance) + } + + if !available.IsZero() { + transfers = append(transfers, transfer{ + From: addr, + To: builtin.ReserveAddress, + Amt: available, + }) + } + } + return nil + }) + if err != nil { + return cid.Undef, xerrors.Errorf("foreach over state tree failed: %v", err) + } + + // Execute transfers from previous step + //fmt.Printf("num:%v, transfers:%v\n", len(transfers), transfers) + for _, t := range transfers { + if err := doTransfer(tree, t.From, t.To, t.Amt); err != nil { + return cid.Undef, xerrors.Errorf("transfer %s %s->%s failed: %v", t.Amt, t.From, t.To, err) + } + } + + // pull up power table to give miners back some funds proportional to their power + var ps power0.State + powAct, find, err := tree.GetActor(ctx, builtin0.StoragePowerActorAddr) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to load power actor: %v", err) + } + + if !find { + return cid.Undef, xerrors.New("did not find power actor") + } + + if err := c.ipldstore.Get(ctx, powAct.Head, &ps); err != nil { + return cid.Undef, xerrors.Errorf("failed to get power actor state: %v", err) + } + + totalPower := ps.TotalBytesCommitted + + var transfersBack []transfer + // Now, we return some funds to places where they are needed + err = tree.ForEach(func(addr address.Address, act *types.Actor) error { + lbact, _, err := lbtree.GetActor(ctx, addr) + if err != nil { + return xerrors.Errorf("failed to get actor in lookback state") + } + + prevBalance := abi.NewTokenAmount(0) + if lbact != nil { + prevBalance = lbact.Balance + } + + switch act.Code { + case builtin0.AccountActorCodeID, builtin0.MultisigActorCodeID, builtin0.PaymentChannelActorCodeID: + nbalance := big.Min(prevBalance, AccountCap) + if nbalance.Sign() != 0 { + transfersBack = append(transfersBack, transfer{ + From: builtin.ReserveAddress, + To: addr, + Amt: nbalance, + }) + } + case builtin0.StorageMinerActorCodeID: + var st miner0.State + if err := c.ipldstore.Get(ctx, act.Head, &st); err != nil { + return xerrors.Errorf("failed to load miner state: %v", err) + } + + var minfo miner0.MinerInfo + if err := c.ipldstore.Get(ctx, st.Info, &minfo); err != nil { + return xerrors.Errorf("failed to get miner info: %v", err) + } + + sectorsArr, err := adt0.AsArray(adt.WrapStore(ctx, c.ipldstore), st.Sectors) + if err != nil { + return xerrors.Errorf("failed to load sectors array: %v", err) + } + + slen := sectorsArr.Length() + + power := big.Mul(big.NewInt(int64(slen)), big.NewInt(int64(minfo.SectorSize))) + + mfunds := minerFundsAlloc(power, totalPower) + transfersBack = append(transfersBack, transfer{ + From: builtin.ReserveAddress, + To: minfo.Worker, + Amt: mfunds, + }) + + // Now make sure to give each miner who had power at the lookback some FIL + lbact, found, err := lbtree.GetActor(ctx, addr) + if err == nil { + if found { + var lbst miner0.State + if err := c.ipldstore.Get(ctx, lbact.Head, &lbst); err != nil { + return xerrors.Errorf("failed to load miner state: %v", err) + } + + lbsectors, err := adt0.AsArray(adt.WrapStore(ctx, c.ipldstore), lbst.Sectors) + if err != nil { + return xerrors.Errorf("failed to load lb sectors array: %v", err) + } + + if lbsectors.Length() > 0 { + transfersBack = append(transfersBack, transfer{ + From: builtin.ReserveAddress, + To: minfo.Worker, + Amt: BaseMinerBalance, + }) + } + } else { + log.Warnf("did not find actor: %s", addr.String()) + } + } else { + log.Warnf("failed to get miner in lookback state: %s", err) + } + } + return nil + }) + if err != nil { + return cid.Undef, xerrors.Errorf("foreach over state tree failed: %v", err) + } + + for _, t := range transfersBack { + if err := doTransfer(tree, t.From, t.To, t.Amt); err != nil { + return cid.Undef, xerrors.Errorf("transfer %s %s->%s failed: %v", t.Amt, t.From, t.To, err) + } + } + + // transfer all burnt funds back to the reserve account + burntAct, find, err := tree.GetActor(ctx, builtin0.BurntFundsActorAddr) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to load burnt funds actor: %v", err) + } + if !find { + return cid.Undef, xerrors.New("did not find burnt funds actor") + } + if err := doTransfer(tree, builtin0.BurntFundsActorAddr, builtin.ReserveAddress, burntAct.Balance); err != nil { + return cid.Undef, xerrors.Errorf("failed to unburn funds: %v", err) + } + + // Top up the reimbursement service + reimbAddr, err := address.NewFromString("t0111") + if err != nil { + return cid.Undef, xerrors.Errorf("failed to parse reimbursement service address") + } + + reimb, find, err := tree.GetActor(ctx, reimbAddr) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to load reimbursement account actor: %v", err) + } + if !find { + return cid.Undef, xerrors.New("did not find reimbursement actor") + } + + difference := big.Sub(DesiredReimbursementBalance, reimb.Balance) + if err := doTransfer(tree, builtin.ReserveAddress, reimbAddr, difference); err != nil { + return cid.Undef, xerrors.Errorf("failed to top up reimbursement account: %v", err) + } + + // Now, a final sanity check to make sure the balances all check out + total := abi.NewTokenAmount(0) + err = tree.ForEach(func(addr address.Address, act *types.Actor) error { + total = big.Add(total, act.Balance) + return nil + }) + if err != nil { + return cid.Undef, xerrors.Errorf("checking final state balance failed: %v", err) + } + + exp := types.FromFil(constants.FilBase) + if !exp.Equals(total) { + return cid.Undef, xerrors.Errorf("resultant state tree account balance was not correct: %s", total) + } + + return tree.Flush(ctx) +} + +func setNetworkName(ctx context.Context, store adt.Store, tree *vmstate.State, name string) error { + ia, find, err := tree.GetActor(ctx, builtin0.InitActorAddr) + if err != nil { + return xerrors.Errorf("getting init actor: %v", err) + } + if !find { + return xerrors.New("did not find init actor") + } + + initState, err := init_.Load(store, ia) + if err != nil { + return xerrors.Errorf("reading init state: %v", err) + } + + if err := initState.SetNetworkName(name); err != nil { + return xerrors.Errorf("setting network name: %v", err) + } + + c, err := store.Put(ctx, initState) + if err != nil { + return xerrors.Errorf("writing new init state: %v", err) + } + ia.Head = c + + if err := tree.SetActor(ctx, builtin0.InitActorAddr, ia); err != nil { + return xerrors.Errorf("setting init actor: %v", err) + } + + return nil +} + +// TODO: After the Liftoff epoch, refactor this to use resetMultisigVesting +func resetGenesisMsigs0(ctx context.Context, sm *ChainFork, store adt0.Store, tree *vmstate.State, startEpoch abi.ChainEpoch) error { + gb, err := sm.cr.GetGenesisBlock(ctx) + if err != nil { + return xerrors.Errorf("getting genesis block: %v", err) + } + + gts, err := types.NewTipSet([]*types.BlockHeader{gb}) + if err != nil { + return xerrors.Errorf("getting genesis tipset: %v", err) + } + + genesisTree, err := sm.StateTree(ctx, gts.Blocks()[0].ParentStateRoot) + if err != nil { + return xerrors.Errorf("loading state tree: %v", err) + } + + err = genesisTree.ForEach(func(addr address.Address, genesisActor *types.Actor) error { + if genesisActor.Code == builtin0.MultisigActorCodeID { + currActor, find, err := tree.GetActor(ctx, addr) + if err != nil { + return xerrors.Errorf("loading actor: %v", err) + } + if !find { + return xerrors.Errorf("did not find actor: %s", addr.String()) + } + + var currState multisig0.State + if err := store.Get(ctx, currActor.Head, &currState); err != nil { + return xerrors.Errorf("reading multisig state: %v", err) + } + + currState.StartEpoch = startEpoch + + head, err := store.Put(ctx, &currState) + if err != nil { + return xerrors.Errorf("writing new multisig state: %v", err) + } + currActor.Head = head + + if err := tree.SetActor(ctx, addr, currActor); err != nil { + return xerrors.Errorf("setting multisig actor: %v", err) + } + } + return nil + }) + + if err != nil { + return xerrors.Errorf("iterating over genesis actors: %v", err) + } + + return nil +} + +func makeKeyAddr(splitAddr address.Address, count uint64) (address.Address, error) { + var b bytes.Buffer + if err := splitAddr.MarshalCBOR(&b); err != nil { + return address.Undef, xerrors.Errorf("marshalling split address: %v", err) + } + + if err := binary.Write(&b, binary.BigEndian, count); err != nil { + return address.Undef, xerrors.Errorf("writing count into a buffer: %v", err) + } + + if err := binary.Write(&b, binary.BigEndian, []byte("Ignition upgrade")); err != nil { + return address.Undef, xerrors.Errorf("writing fork name into a buffer: %v", err) + } + + addr, err := address.NewActorAddress(b.Bytes()) + if err != nil { + return address.Undef, xerrors.Errorf("create actor address: %v", err) + } + + return addr, nil +} + +func splitGenesisMultisig0(ctx context.Context, addr address.Address, store adt0.Store, tree *vmstate.State, portions uint64, epoch abi.ChainEpoch) error { + if portions < 1 { + return xerrors.Errorf("cannot split into 0 portions") + } + + mact, find, err := tree.GetActor(ctx, addr) + if err != nil { + return xerrors.Errorf("getting msig actor: %v", err) + } + if !find { + return xerrors.Errorf("did not find actor: %s", addr.String()) + } + + mst, err := multisig.Load(store, mact) + if err != nil { + return xerrors.Errorf("getting msig state: %v", err) + } + + signers, err := mst.Signers() + if err != nil { + return xerrors.Errorf("getting msig signers: %v", err) + } + + thresh, err := mst.Threshold() + if err != nil { + return xerrors.Errorf("getting msig threshold: %v", err) + } + + ibal, err := mst.InitialBalance() + if err != nil { + return xerrors.Errorf("getting msig initial balance: %v", err) + } + + se, err := mst.StartEpoch() + if err != nil { + return xerrors.Errorf("getting msig start epoch: %v", err) + } + + ud, err := mst.UnlockDuration() + if err != nil { + return xerrors.Errorf("getting msig unlock duration: %v", err) + } + + pending, err := adt0.MakeEmptyMap(store).Root() + if err != nil { + return xerrors.Errorf("failed to create empty map: %v", err) + } + + newIbal := big.Div(ibal, big.NewInt(int64(portions))) + newState := &multisig0.State{ + Signers: signers, + NumApprovalsThreshold: thresh, + NextTxnID: 0, + InitialBalance: newIbal, + StartEpoch: se, + UnlockDuration: ud, + PendingTxns: pending, + } + + scid, err := store.Put(ctx, newState) + if err != nil { + return xerrors.Errorf("storing new state: %v", err) + } + + newActor := types.Actor{ + Code: builtin0.MultisigActorCodeID, + Head: scid, + Nonce: 0, + Balance: big.Zero(), + } + + i := uint64(0) + for i < portions { + keyAddr, err := makeKeyAddr(addr, i) + if err != nil { + return xerrors.Errorf("creating key address: %v", err) + } + + idAddr, err := tree.RegisterNewAddress(keyAddr) + if err != nil { + return xerrors.Errorf("registering new address: %v", err) + } + + err = tree.SetActor(ctx, idAddr, &newActor) + if err != nil { + return xerrors.Errorf("setting new msig actor state: %v", err) + } + + if err := doTransfer(tree, addr, idAddr, newIbal); err != nil { + return xerrors.Errorf("transferring split msig balance: %v", err) + } + + i++ + } + + return nil +} + +func resetMultisigVesting0(ctx context.Context, store adt0.Store, tree *vmstate.State, addr address.Address, startEpoch abi.ChainEpoch, duration abi.ChainEpoch, balance abi.TokenAmount) error { + act, find, err := tree.GetActor(ctx, addr) + if err != nil { + return xerrors.Errorf("getting actor: %v", err) + } + if !find { + return xerrors.Errorf("did not find actor: %s", addr.String()) + } + + if !builtin.IsMultisigActor(act.Code) { + return xerrors.Errorf("actor wasn't msig: %v", err) + } + + var msigState multisig0.State + if err := store.Get(ctx, act.Head, &msigState); err != nil { + return xerrors.Errorf("reading multisig state: %v", err) + } + + msigState.StartEpoch = startEpoch + msigState.UnlockDuration = duration + msigState.InitialBalance = balance + + head, err := store.Put(ctx, &msigState) + if err != nil { + return xerrors.Errorf("writing new multisig state: %v", err) + } + act.Head = head + + if err := tree.SetActor(ctx, addr, act); err != nil { + return xerrors.Errorf("setting multisig actor: %v", err) + } + + return nil +} + +func (c *ChainFork) UpgradeIgnition(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + store := adt.WrapStore(ctx, c.ipldstore) + + if c.forkUpgrade.UpgradeLiftoffHeight <= epoch { + return cid.Undef, xerrors.Errorf("liftoff height must be beyond ignition height") + } + + nst, err := nv3.MigrateStateTree(ctx, store, root, epoch) + if err != nil { + return cid.Undef, xerrors.Errorf("migrating actors state: %v", err) + } + + tree, err := c.StateTree(ctx, nst) + if err != nil { + return cid.Undef, xerrors.Errorf("getting state tree: %v", err) + } + + err = setNetworkName(ctx, store, tree, "ignition") + if err != nil { + return cid.Undef, xerrors.Errorf("setting network name: %v", err) + } + + split1, err := address.NewFromString("t0115") + if err != nil { + return cid.Undef, xerrors.Errorf("first split address: %v", err) + } + + split2, err := address.NewFromString("t0116") + if err != nil { + return cid.Undef, xerrors.Errorf("second split address: %v", err) + } + + err = resetGenesisMsigs0(ctx, c, store, tree, c.forkUpgrade.UpgradeLiftoffHeight) + if err != nil { + return cid.Undef, xerrors.Errorf("resetting genesis msig start epochs: %v", err) + } + + err = splitGenesisMultisig0(ctx, split1, store, tree, 50, epoch) + if err != nil { + return cid.Undef, xerrors.Errorf("splitting first msig: %v", err) + } + + err = splitGenesisMultisig0(ctx, split2, store, tree, 50, epoch) + if err != nil { + return cid.Undef, xerrors.Errorf("splitting second msig: %v", err) + } + + err = nv3.CheckStateTree(ctx, store, nst, epoch, builtin0.TotalFilecoin) + if err != nil { + return cid.Undef, xerrors.Errorf("sanity check after ignition upgrade failed: %v", err) + } + + return tree.Flush(ctx) +} + +func (c *ChainFork) UpgradeRefuel(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + store := adt.WrapStore(ctx, c.ipldstore) + tree, err := c.StateTree(ctx, root) + if err != nil { + return cid.Undef, xerrors.Errorf("getting state tree: %v", err) + } + + err = resetMultisigVesting0(ctx, store, tree, builtin.SaftAddress, 0, 0, big.Zero()) + if err != nil { + return cid.Undef, xerrors.Errorf("tweaking msig vesting: %v", err) + } + + err = resetMultisigVesting0(ctx, store, tree, builtin.ReserveAddress, 0, 0, big.Zero()) + if err != nil { + return cid.Undef, xerrors.Errorf("tweaking msig vesting: %v", err) + } + + err = resetMultisigVesting0(ctx, store, tree, builtin.RootVerifierAddress, 0, 0, big.Zero()) + if err != nil { + return cid.Undef, xerrors.Errorf("tweaking msig vesting: %v", err) + } + + return tree.Flush(ctx) +} + +func linksForObj(blk ipfsblock.Block, cb func(cid.Cid)) error { + switch blk.Cid().Prefix().Codec { + case cid.DagCBOR: + err := cbg.ScanForLinks(bytes.NewReader(blk.RawData()), cb) + if err != nil { + return xerrors.Errorf("cbg.ScanForLinks: %v", err) + } + return nil + case cid.Raw: + // We implicitly have all children of raw blocks. + return nil + default: + return xerrors.Errorf("vm flush copy method only supports dag cbor") + } +} + +func copyRec(ctx context.Context, from, to blockstore.Blockstore, root cid.Cid, cp func(ipfsblock.Block) error) error { + if root.Prefix().MhType == 0 { + // identity cid, skip + return nil + } + + blk, err := from.Get(ctx, root) + if err != nil { + return xerrors.Errorf("get %s failed: %v", root, err) + } + + var lerr error + err = linksForObj(blk, func(link cid.Cid) { + if lerr != nil { + // Theres no erorr return on linksForObj callback :( + return + } + + prefix := link.Prefix() + if prefix.Codec == cid.FilCommitmentSealed || prefix.Codec == cid.FilCommitmentUnsealed { + return + } + + // We always have blocks inlined into CIDs, but we may not have their children. + if prefix.MhType == mh.IDENTITY { + // Unless the inlined block has no children. + if prefix.Codec == cid.Raw { + return + } + } else { + // If we have an object, we already have its children, skip the object. + has, err := to.Has(ctx, link) + if err != nil { + lerr = xerrors.Errorf("has: %v", err) + return + } + if has { + return + } + } + + if err := copyRec(ctx, from, to, link, cp); err != nil { + lerr = err + return + } + }) + if err != nil { + return xerrors.Errorf("linksForObj (%x): %v", blk.RawData(), err) + } + if lerr != nil { + return lerr + } + + if err := cp(blk); err != nil { + return xerrors.Errorf("copy: %v", err) + } + return nil +} + +func Copy(ctx context.Context, from, to blockstore.Blockstore, root cid.Cid) error { + ctx, span := trace.StartSpan(ctx, "vm.Copy") // nolint + defer span.End() + + var numBlocks int + var totalCopySize int + + const batchSize = 128 + const bufCount = 3 + freeBufs := make(chan []ipfsblock.Block, bufCount) + toFlush := make(chan []ipfsblock.Block, bufCount) + for i := 0; i < bufCount; i++ { + freeBufs <- make([]ipfsblock.Block, 0, batchSize) + } + + errFlushChan := make(chan error) + + go func() { + for b := range toFlush { + if err := to.PutMany(ctx, b); err != nil { + close(freeBufs) + errFlushChan <- xerrors.Errorf("batch put in copy: %v", err) + return + } + freeBufs <- b[:0] + } + close(errFlushChan) + close(freeBufs) + }() + + var batch = <-freeBufs + batchCp := func(blk ipfsblock.Block) error { + numBlocks++ + totalCopySize += len(blk.RawData()) + + batch = append(batch, blk) + + if len(batch) >= batchSize { + toFlush <- batch + var ok bool + batch, ok = <-freeBufs + if !ok { + return <-errFlushChan + } + } + return nil + } + + if err := copyRec(ctx, from, to, root, batchCp); err != nil { + return xerrors.Errorf("copyRec: %v", err) + } + + if len(batch) > 0 { + toFlush <- batch + } + close(toFlush) // close the toFlush triggering the loop to end + err := <-errFlushChan // get error out or get nil if it was closed + if err != nil { + return err + } + + span.AddAttributes( + trace.Int64Attribute("numBlocks", int64(numBlocks)), + trace.Int64Attribute("copySize", int64(totalCopySize)), + ) + + return nil +} + +func (c *ChainFork) UpgradeActorsV2(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + buf := blockstoreutil.NewTieredBstore(c.bs, blockstoreutil.NewTemporarySync()) + store := chain.ActorStore(ctx, buf) + + info, err := store.Put(ctx, new(vmstate.StateInfo0)) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to create new state info for actors v2: %v", err) + } + + newHamtRoot, err := nv4.MigrateStateTree(ctx, store, root, epoch, nv4.DefaultConfig()) + if err != nil { + return cid.Undef, xerrors.Errorf("upgrading to actors v2: %v", err) + } + + newRoot, err := store.Put(ctx, &vmstate.StateRoot{ + Version: vmstate.StateTreeVersion1, + Actors: newHamtRoot, + Info: info, + }) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to persist new state root: %v", err) + } + + // perform some basic sanity checks to make sure everything still works. + if newSm, err := vmstate.LoadState(ctx, store, newRoot); err != nil { + return cid.Undef, xerrors.Errorf("state tree sanity load failed: %v", err) + } else if newRoot2, err := newSm.Flush(ctx); err != nil { + return cid.Undef, xerrors.Errorf("state tree sanity flush failed: %v", err) + } else if newRoot2 != newRoot { + return cid.Undef, xerrors.Errorf("state-root mismatch: %s != %s", newRoot, newRoot2) + } else if _, _, err := newSm.GetActor(ctx, builtin0.InitActorAddr); err != nil { + return cid.Undef, xerrors.Errorf("failed to load init actor after upgrade: %v", err) + } + + { + from := buf + to := buf.Read() + + if err := Copy(ctx, from, to, newRoot); err != nil { + return cid.Undef, xerrors.Errorf("copying migrated tree: %v", err) + } + } + + return newRoot, nil +} + +func (c *ChainFork) UpgradeLiftoff(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + tree, err := c.StateTree(ctx, root) + if err != nil { + return cid.Undef, xerrors.Errorf("getting state tree: %v", err) + } + + err = setNetworkName(ctx, adt.WrapStore(ctx, c.ipldstore), tree, "mainnet") + if err != nil { + return cid.Undef, xerrors.Errorf("setting network name: %v", err) + } + + return tree.Flush(ctx) +} + +func (c *ChainFork) UpgradeCalico(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + if c.networkType != constants.NetworkMainnet { + return root, nil + } + + store := chain.ActorStore(ctx, c.bs) + var stateRoot vmstate.StateRoot + if err := store.Get(ctx, root, &stateRoot); err != nil { + return cid.Undef, xerrors.Errorf("failed to decode state root: %v", err) + } + + if stateRoot.Version != vmstate.StateTreeVersion1 { + return cid.Undef, xerrors.Errorf( + "expected state root version 1 for calico upgrade, got %d", + stateRoot.Version, + ) + } + + newHamtRoot, err := nv7.MigrateStateTree(ctx, store, stateRoot.Actors, epoch, nv7.DefaultConfig()) + if err != nil { + return cid.Undef, xerrors.Errorf("running nv7 migration: %v", err) + } + + newRoot, err := store.Put(ctx, &vmstate.StateRoot{ + Version: stateRoot.Version, + Actors: newHamtRoot, + Info: stateRoot.Info, + }) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to persist new state root: %v", err) + } + + // perform some basic sanity checks to make sure everything still works. + if newSm, err := vmstate.LoadState(ctx, store, newRoot); err != nil { + return cid.Undef, xerrors.Errorf("state tree sanity load failed: %v", err) + } else if newRoot2, err := newSm.Flush(ctx); err != nil { + return cid.Undef, xerrors.Errorf("state tree sanity flush failed: %v", err) + } else if newRoot2 != newRoot { + return cid.Undef, xerrors.Errorf("state-root mismatch: %s != %s", newRoot, newRoot2) + } else if _, _, err := newSm.GetActor(ctx, builtin0.InitActorAddr); err != nil { + return cid.Undef, xerrors.Errorf("failed to load init actor after upgrade: %v", err) + } + + return newRoot, nil +} + +func terminateActor(ctx context.Context, tree *vmstate.State, addr address.Address, epoch abi.ChainEpoch) error { + a, found, err := tree.GetActor(context.TODO(), addr) + if err != nil { + return xerrors.Errorf("failed to get actor to delete: %v", err) + } + if !found { + return types.ErrActorNotFound + } + + if err := doTransfer(tree, addr, builtin.BurntFundsActorAddr, a.Balance); err != nil { + return xerrors.Errorf("transferring terminated actor's balance: %v", err) + } + + err = tree.DeleteActor(ctx, addr) + if err != nil { + return xerrors.Errorf("deleting actor from tree: %v", err) + } + + ia, found, err := tree.GetActor(ctx, init_.Address) + if err != nil { + return xerrors.Errorf("loading init actor: %v", err) + } + if !found { + return types.ErrActorNotFound + } + + ias, err := init_.Load(&vmstate.AdtStore{IpldStore: tree.Store}, ia) + if err != nil { + return xerrors.Errorf("loading init actor state: %v", err) + } + + if err := ias.Remove(addr); err != nil { + return xerrors.Errorf("deleting entry from address map: %v", err) + } + + nih, err := tree.Store.Put(ctx, ias) + if err != nil { + return xerrors.Errorf("writing new init actor state: %v", err) + } + + ia.Head = nih + + return tree.SetActor(ctx, init_.Address, ia) +} + +func (c *ChainFork) UpgradeActorsV3(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + // Use all the CPUs except 3. + workerCount := runtime.NumCPU() - 3 + if workerCount <= 0 { + workerCount = 1 + } + + cfg := nv10.Config{ + MaxWorkers: uint(workerCount), + JobQueueSize: 1000, + ResultQueueSize: 100, + ProgressLogPeriod: 10 * time.Second, + } + newRoot, err := c.upgradeActorsV3Common(ctx, cache, root, epoch, ts, cfg) + if err != nil { + return cid.Undef, xerrors.Errorf("migrating actors v3 state: %v", err) + } + + tree, err := c.StateTree(ctx, newRoot) + if err != nil { + return cid.Undef, xerrors.Errorf("getting state tree: %v", err) + } + + if c.networkType == constants.NetworkMainnet { + err := terminateActor(ctx, tree, types.ZeroAddress, epoch) + if err != nil && !xerrors.Is(err, types.ErrActorNotFound) { + return cid.Undef, xerrors.Errorf("deleting zero bls actor: %v", err) + } + + newRoot, err = tree.Flush(ctx) + if err != nil { + return cid.Undef, xerrors.Errorf("flushing state tree: %v", err) + } + } + + return newRoot, nil +} + +func (c *ChainFork) PreUpgradeActorsV3(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) error { + log.Info("PreUpgradeActorsV3 ......") + // Use half the CPUs for pre-migration, but leave at least 3. + workerCount := runtime.NumCPU() + if workerCount <= 4 { + workerCount = 1 + } else { + workerCount /= 2 + } + cfg := nv10.Config{MaxWorkers: uint(workerCount)} + _, err := c.upgradeActorsV3Common(ctx, cache, root, epoch, ts, cfg) + return err +} + +func (c *ChainFork) upgradeActorsV3Common( + ctx context.Context, cache MigrationCache, + root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet, + config nv10.Config, +) (cid.Cid, error) { + buf := blockstoreutil.NewTieredBstore(c.bs, blockstoreutil.NewTemporarySync()) + store := chain.ActorStore(ctx, buf) + + // Load the state root. + var stateRoot vmstate.StateRoot + if err := store.Get(ctx, root, &stateRoot); err != nil { + return cid.Undef, xerrors.Errorf("failed to decode state root: %v", err) + } + + if stateRoot.Version != vmstate.StateTreeVersion1 { + return cid.Undef, xerrors.Errorf( + "expected state root version 1 for actors v3 upgrade, got %d", + stateRoot.Version, + ) + } + + // Perform the migration + newHamtRoot, err := nv10.MigrateStateTree(ctx, store, stateRoot.Actors, epoch, config, migrationLogger{}, cache) + if err != nil { + return cid.Undef, xerrors.Errorf("upgrading to actors v3: %v", err) + } + + // Persist the result. + newRoot, err := store.Put(ctx, &vmstate.StateRoot{ + Version: vmstate.StateTreeVersion2, + Actors: newHamtRoot, + Info: stateRoot.Info, + }) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to persist new state root: %v", err) + } + + // Persist the new tree. + + { + from := buf + to := buf.Read() + + if err := Copy(ctx, from, to, newRoot); err != nil { + return cid.Undef, xerrors.Errorf("copying migrated tree: %v", err) + } + } + + return newRoot, nil +} + +func (c *ChainFork) UpgradeActorsV4(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + // Use all the CPUs except 3. + workerCount := runtime.NumCPU() - 3 + if workerCount <= 0 { + workerCount = 1 + } + + config := nv12.Config{ + MaxWorkers: uint(workerCount), + JobQueueSize: 1000, + ResultQueueSize: 100, + ProgressLogPeriod: 10 * time.Second, + } + + newRoot, err := c.upgradeActorsV4Common(ctx, cache, root, epoch, ts, config) + if err != nil { + return cid.Undef, xerrors.Errorf("migrating actors v4 state: %v", err) + } + + return newRoot, nil +} + +func (c *ChainFork) PreUpgradeActorsV4(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) error { + // Use half the CPUs for pre-migration, but leave at least 3. + workerCount := runtime.NumCPU() + if workerCount <= 4 { + workerCount = 1 + } else { + workerCount /= 2 + } + config := nv12.Config{MaxWorkers: uint(workerCount)} + _, err := c.upgradeActorsV4Common(ctx, cache, root, epoch, ts, config) + return err +} + +func (c *ChainFork) upgradeActorsV4Common( + ctx context.Context, cache MigrationCache, + root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet, + config nv12.Config, +) (cid.Cid, error) { + buf := blockstoreutil.NewTieredBstore(c.bs, blockstoreutil.NewTemporarySync()) + store := chain.ActorStore(ctx, buf) + + // Load the state root. + var stateRoot vmstate.StateRoot + if err := store.Get(ctx, root, &stateRoot); err != nil { + return cid.Undef, xerrors.Errorf("failed to decode state root: %v", err) + } + + if stateRoot.Version != vmstate.StateTreeVersion2 { + return cid.Undef, xerrors.Errorf( + "expected state root version 2 for actors v4 upgrade, got %d", + stateRoot.Version, + ) + } + + // Perform the migration + newHamtRoot, err := nv12.MigrateStateTree(ctx, store, stateRoot.Actors, epoch, config, migrationLogger{}, cache) + if err != nil { + return cid.Undef, xerrors.Errorf("upgrading to actors v4: %v", err) + } + + // Persist the result. + newRoot, err := store.Put(ctx, &vmstate.StateRoot{ + Version: vmstate.StateTreeVersion3, + Actors: newHamtRoot, + Info: stateRoot.Info, + }) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to persist new state root: %v", err) + } + + // Persist the new tree. + + { + from := buf + to := buf.Read() + + if err := Copy(ctx, from, to, newRoot); err != nil { + return cid.Undef, xerrors.Errorf("copying migrated tree: %v", err) + } + } + + return newRoot, nil +} + +func (c *ChainFork) UpgradeActorsV5(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + // Use all the CPUs except 3. + workerCount := runtime.NumCPU() - 3 + if workerCount <= 0 { + workerCount = 1 + } + + config := nv13.Config{ + MaxWorkers: uint(workerCount), + JobQueueSize: 1000, + ResultQueueSize: 100, + ProgressLogPeriod: 10 * time.Second, + } + + newRoot, err := c.upgradeActorsV5Common(ctx, cache, root, epoch, ts, config) + if err != nil { + return cid.Undef, xerrors.Errorf("migrating actors v5 state: %v", err) + } + + return newRoot, nil +} + +func (c *ChainFork) PreUpgradeActorsV5(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) error { + // Use half the CPUs for pre-migration, but leave at least 3. + workerCount := runtime.NumCPU() + if workerCount <= 4 { + workerCount = 1 + } else { + workerCount /= 2 + } + config := nv13.Config{MaxWorkers: uint(workerCount)} + _, err := c.upgradeActorsV5Common(ctx, cache, root, epoch, ts, config) + return err +} + +func (c *ChainFork) upgradeActorsV5Common( + ctx context.Context, cache MigrationCache, + root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet, + config nv13.Config, +) (cid.Cid, error) { + buf := blockstoreutil.NewTieredBstore(c.bs, blockstoreutil.NewTemporarySync()) + store := chain.ActorStore(ctx, buf) + + // Load the state root. + var stateRoot vmstate.StateRoot + if err := store.Get(ctx, root, &stateRoot); err != nil { + return cid.Undef, xerrors.Errorf("failed to decode state root: %v", err) + } + + if stateRoot.Version != vmstate.StateTreeVersion3 { + return cid.Undef, xerrors.Errorf( + "expected state root version 3 for actors v5 upgrade, got %d", + stateRoot.Version, + ) + } + + // Perform the migration + newHamtRoot, err := nv13.MigrateStateTree(ctx, store, stateRoot.Actors, epoch, config, migrationLogger{}, cache) + if err != nil { + return cid.Undef, xerrors.Errorf("upgrading to actors v5: %v", err) + } + + // Persist the result. + newRoot, err := store.Put(ctx, &vmstate.StateRoot{ + Version: vmstate.StateTreeVersion4, + Actors: newHamtRoot, + Info: stateRoot.Info, + }) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to persist new state root: %v", err) + } + + // Persist the new tree. + + { + from := buf + to := buf.Read() + + if err := Copy(ctx, from, to, newRoot); err != nil { + return cid.Undef, xerrors.Errorf("copying migrated tree: %v", err) + } + } + + return newRoot, nil +} + +func (c *ChainFork) UpgradeActorsV6(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + // Use all the CPUs except 3. + workerCount := runtime.NumCPU() - 3 + if workerCount <= 0 { + workerCount = 1 + } + + config := nv14.Config{ + MaxWorkers: uint(workerCount), + JobQueueSize: 1000, + ResultQueueSize: 100, + ProgressLogPeriod: 10 * time.Second, + } + + newRoot, err := c.upgradeActorsV6Common(ctx, cache, root, epoch, ts, config) + if err != nil { + return cid.Undef, xerrors.Errorf("migrating actors v5 state: %w", err) + } + + return newRoot, nil +} + +func (c *ChainFork) PreUpgradeActorsV6(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) error { + // Use half the CPUs for pre-migration, but leave at least 3. + workerCount := runtime.NumCPU() + if workerCount <= 4 { + workerCount = 1 + } else { + workerCount /= 2 + } + config := nv14.Config{MaxWorkers: uint(workerCount)} + _, err := c.upgradeActorsV6Common(ctx, cache, root, epoch, ts, config) + return err +} + +func (c *ChainFork) upgradeActorsV6Common( + ctx context.Context, + cache MigrationCache, + root cid.Cid, epoch abi.ChainEpoch, + ts *types.TipSet, + config nv14.Config, +) (cid.Cid, error) { + buf := blockstoreutil.NewTieredBstore(c.bs, blockstoreutil.NewTemporarySync()) + store := chain.ActorStore(ctx, buf) + + // Load the state root. + var stateRoot vmstate.StateRoot + if err := store.Get(ctx, root, &stateRoot); err != nil { + return cid.Undef, xerrors.Errorf("failed to decode state root: %w", err) + } + + if stateRoot.Version != vmstate.StateTreeVersion4 { + return cid.Undef, xerrors.Errorf( + "expected state root version 4 for actors v6 upgrade, got %d", + stateRoot.Version, + ) + } + + // Perform the migration + newHamtRoot, err := nv14.MigrateStateTree(ctx, store, stateRoot.Actors, epoch, config, migrationLogger{}, cache) + if err != nil { + return cid.Undef, xerrors.Errorf("upgrading to actors v5: %w", err) + } + + // Persist the result. + newRoot, err := store.Put(ctx, &vmstate.StateRoot{ + Version: vmstate.StateTreeVersion4, + Actors: newHamtRoot, + Info: stateRoot.Info, + }) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to persist new state root: %w", err) + } + + // Persist the new tree. + + { + from := buf + to := buf.Read() + + if err := Copy(ctx, from, to, newRoot); err != nil { + return cid.Undef, xerrors.Errorf("copying migrated tree: %w", err) + } + } + + return newRoot, nil +} + +func (c *ChainFork) UpgradeActorsV7(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + // Use all the CPUs except 3. + workerCount := runtime.NumCPU() - 3 + if workerCount <= 0 { + workerCount = 1 + } + + config := nv15.Config{ + MaxWorkers: uint(workerCount), + JobQueueSize: 1000, + ResultQueueSize: 100, + ProgressLogPeriod: 10 * time.Second, + } + + newRoot, err := c.upgradeActorsV7Common(ctx, cache, root, epoch, ts, config) + if err != nil { + return cid.Undef, xerrors.Errorf("migrating actors v6 state: %w", err) + } + + return newRoot, nil +} + +func (c *ChainFork) PreUpgradeActorsV7(ctx context.Context, cache MigrationCache, root cid.Cid, epoch abi.ChainEpoch, ts *types.TipSet) error { + // Use half the CPUs for pre-migration, but leave at least 3. + workerCount := runtime.NumCPU() + if workerCount <= 4 { + workerCount = 1 + } else { + workerCount /= 2 + } + + config := nv15.Config{MaxWorkers: uint(workerCount)} + _, err := c.upgradeActorsV7Common(ctx, cache, root, epoch, ts, config) + return err +} + +func (c *ChainFork) upgradeActorsV7Common( + ctx context.Context, + cache MigrationCache, + root cid.Cid, epoch abi.ChainEpoch, + ts *types.TipSet, + config nv15.Config, +) (cid.Cid, error) { + buf := blockstoreutil.NewTieredBstore(c.bs, blockstoreutil.NewTemporarySync()) + store := chain.ActorStore(ctx, buf) + + // Load the state root. + var stateRoot vmstate.StateRoot + if err := store.Get(ctx, root, &stateRoot); err != nil { + return cid.Undef, xerrors.Errorf("failed to decode state root: %w", err) + } + + if stateRoot.Version != vmstate.StateTreeVersion4 { + return cid.Undef, xerrors.Errorf( + "expected state root version 4 for actors v7 upgrade, got %d", + stateRoot.Version, + ) + } + + // Perform the migration + newHamtRoot, err := nv15.MigrateStateTree(ctx, store, stateRoot.Actors, epoch, config, migrationLogger{}, cache) + if err != nil { + return cid.Undef, xerrors.Errorf("upgrading to actors v7: %w", err) + } + + // Persist the result. + newRoot, err := store.Put(ctx, &vmstate.StateRoot{ + Version: vmstate.StateTreeVersion4, + Actors: newHamtRoot, + Info: stateRoot.Info, + }) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to persist new state root: %w", err) + } + + // Persist the new tree. + + { + from := buf + to := buf.Read() + + if err := Copy(ctx, from, to, newRoot); err != nil { + return cid.Undef, xerrors.Errorf("copying migrated tree: %w", err) + } + } + + return newRoot, nil +} + +func (c *ChainFork) GetForkUpgrade() *config.ForkUpgradeConfig { + return c.forkUpgrade +} diff --git a/pkg/fork/mock.go b/pkg/fork/mock.go new file mode 100644 index 0000000000..55402b4320 --- /dev/null +++ b/pkg/fork/mock.go @@ -0,0 +1,56 @@ +package fork + +import ( + "context" + + "github.com/filecoin-project/venus/pkg/config" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/ipfs/go-cid" +) + +var _ = IFork((*MockFork)(nil)) + +type MockFork struct{} + +//NewMockFork mock for test +func NewMockFork() *MockFork { + return &MockFork{} +} + +func (mockFork *MockFork) HandleStateForks(ctx context.Context, root cid.Cid, height abi.ChainEpoch, ts *types.TipSet) (cid.Cid, error) { + return root, nil +} + +func (mockFork *MockFork) GetNtwkVersion(ctx context.Context, height abi.ChainEpoch) network.Version { + return network.Version0 +} + +func (mockFork *MockFork) HasExpensiveFork(ctx context.Context, height abi.ChainEpoch) bool { + return false +} + +func (mockFork *MockFork) GetForkUpgrade() *config.ForkUpgradeConfig { + return &config.ForkUpgradeConfig{ + UpgradeSmokeHeight: -1, + UpgradeBreezeHeight: -1, + UpgradeIgnitionHeight: -1, + UpgradeLiftoffHeight: -1, + UpgradeAssemblyHeight: -1, + UpgradeRefuelHeight: -1, + UpgradeTapeHeight: -1, + UpgradeKumquatHeight: -1, + BreezeGasTampingDuration: -1, + UpgradeCalicoHeight: -1, + UpgradePersianHeight: -1, + UpgradeOrangeHeight: -1, + UpgradeClausHeight: -1, + } +} + +func (mockFork *MockFork) Start(ctx context.Context) error { + + return nil +} diff --git a/pkg/gen/gen.go b/pkg/gen/gen.go new file mode 100644 index 0000000000..535406849e --- /dev/null +++ b/pkg/gen/gen.go @@ -0,0 +1,48 @@ +package gen + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + format "github.com/ipfs/go-ipld-format" + + "github.com/filecoin-project/venus/pkg/gen/genesis" +) + +//CarWalkFunc get each child node under the node (nd) +func CarWalkFunc(nd format.Node) (out []*format.Link, err error) { + for _, link := range nd.Links() { + pref := link.Cid.Prefix() + if pref.Codec == cid.FilCommitmentSealed || pref.Codec == cid.FilCommitmentUnsealed { + continue + } + out = append(out, link) + } + + return out, nil +} + +var rootkeyMultisig = genesis.MultisigMeta{ + Signers: []address.Address{remAccTestKey}, + Threshold: 1, + VestingDuration: 0, + VestingStart: 0, +} + +var DefaultVerifregRootkeyActor = genesis.Actor{ + Type: genesis.TMultisig, + Balance: big.NewInt(0), + Meta: rootkeyMultisig.ActorMeta(), +} + +var remAccTestKey, _ = address.NewFromString("t1ceb34gnsc6qk5dt6n7xg6ycwzasjhbxm3iylkiy") +var remAccMeta = genesis.MultisigMeta{ + Signers: []address.Address{remAccTestKey}, + Threshold: 1, +} + +var DefaultRemainderAccountActor = genesis.Actor{ + Type: genesis.TMultisig, + Balance: big.NewInt(0), + Meta: remAccMeta.ActorMeta(), +} diff --git a/pkg/gen/genesis/f00_system.go b/pkg/gen/genesis/f00_system.go new file mode 100644 index 0000000000..eea94fcdb5 --- /dev/null +++ b/pkg/gen/genesis/f00_system.go @@ -0,0 +1,44 @@ +package genesis + +import ( + "context" + + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/system" + + cbor "github.com/ipfs/go-ipld-cbor" + + bstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func SetupSystemActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { + var st system.State + + cst := cbor.NewCborStore(bs) + st, err := system.MakeState(adt.WrapStore(ctx, cst), av) + if err != nil { + return nil, err + } + + statecid, err := cst.Put(ctx, st.GetState()) + if err != nil { + return nil, err + } + + actcid, err := system.GetActorCodeID(av) + if err != nil { + return nil, err + } + + act := &types.Actor{ + Code: actcid, + Head: statecid, + Balance: big.Zero(), + } + + return act, nil +} diff --git a/pkg/gen/genesis/f01_init.go b/pkg/gen/genesis/f01_init.go new file mode 100644 index 0000000000..27b5500886 --- /dev/null +++ b/pkg/gen/genesis/f01_init.go @@ -0,0 +1,188 @@ +package genesis + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/specs-actors/actors/util/adt" + + cbor "github.com/ipfs/go-ipld-cbor" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + bstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func SetupInitActor(ctx context.Context, bs bstore.Blockstore, netname string, initialActors []Actor, rootVerifier Actor, remainder Actor, av actors.Version) (int64, *types.Actor, map[address.Address]address.Address, error) { + if len(initialActors) > MaxAccounts { + return 0, nil, nil, xerrors.New("too many initial actors") + } + + cst := cbor.NewCborStore(bs) + ist, err := init_.MakeState(adt.WrapStore(ctx, cst), av, netname) + if err != nil { + return 0, nil, nil, err + } + + if err = ist.SetNextID(MinerStart); err != nil { + return 0, nil, nil, err + } + + amap, err := ist.AddressMap() + if err != nil { + return 0, nil, nil, err + } + + keyToID := map[address.Address]address.Address{} + counter := int64(AccountStart) + + for _, a := range initialActors { + if a.Type == TMultisig { + var ainfo MultisigMeta + if err := json.Unmarshal(a.Meta, &ainfo); err != nil { + return 0, nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err) + } + for _, e := range ainfo.Signers { + + if _, ok := keyToID[e]; ok { + continue + } + + fmt.Printf("init set %s t0%d\n", e, counter) + + value := cbg.CborInt(counter) + if err := amap.Put(abi.AddrKey(e), &value); err != nil { + return 0, nil, nil, err + } + counter = counter + 1 + var err error + keyToID[e], err = address.NewIDAddress(uint64(value)) + if err != nil { + return 0, nil, nil, err + } + + } + // Need to add actors for all multisigs too + continue + } + + if a.Type != TAccount { + return 0, nil, nil, xerrors.Errorf("unsupported account type: %s", a.Type) + } + + var ainfo AccountMeta + if err := json.Unmarshal(a.Meta, &ainfo); err != nil { + return 0, nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err) + } + + fmt.Printf("init set %s t0%d\n", ainfo.Owner, counter) + + value := cbg.CborInt(counter) + if err := amap.Put(abi.AddrKey(ainfo.Owner), &value); err != nil { + return 0, nil, nil, err + } + counter = counter + 1 + + var err error + keyToID[ainfo.Owner], err = address.NewIDAddress(uint64(value)) + if err != nil { + return 0, nil, nil, err + } + } + + setupMsig := func(meta json.RawMessage) error { + var ainfo MultisigMeta + if err := json.Unmarshal(meta, &ainfo); err != nil { + return xerrors.Errorf("unmarshaling account meta: %w", err) + } + for _, e := range ainfo.Signers { + if _, ok := keyToID[e]; ok { + continue + } + fmt.Printf("init set %s t0%d\n", e, counter) + + value := cbg.CborInt(counter) + if err := amap.Put(abi.AddrKey(e), &value); err != nil { + return err + } + counter = counter + 1 + var err error + keyToID[e], err = address.NewIDAddress(uint64(value)) + if err != nil { + return err + } + + } + + return nil + } + + if rootVerifier.Type == TAccount { + var ainfo AccountMeta + if err := json.Unmarshal(rootVerifier.Meta, &ainfo); err != nil { + return 0, nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err) + } + value := cbg.CborInt(80) + if err := amap.Put(abi.AddrKey(ainfo.Owner), &value); err != nil { + return 0, nil, nil, err + } + } else if rootVerifier.Type == TMultisig { + err := setupMsig(rootVerifier.Meta) + if err != nil { + return 0, nil, nil, xerrors.Errorf("setting up root verifier msig: %w", err) + } + } + + if remainder.Type == TAccount { + var ainfo AccountMeta + if err := json.Unmarshal(remainder.Meta, &ainfo); err != nil { + return 0, nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err) + } + + // TODO: Use builtin.ReserveAddress... + value := cbg.CborInt(90) + if err := amap.Put(abi.AddrKey(ainfo.Owner), &value); err != nil { + return 0, nil, nil, err + } + } else if remainder.Type == TMultisig { + err := setupMsig(remainder.Meta) + if err != nil { + return 0, nil, nil, xerrors.Errorf("setting up remainder msig: %w", err) + } + } + + amapaddr, err := amap.Root() + if err != nil { + return 0, nil, nil, err + } + + if err = ist.SetAddressMap(amapaddr); err != nil { + return 0, nil, nil, err + } + + statecid, err := cst.Put(ctx, ist.GetState()) + if err != nil { + return 0, nil, nil, err + } + + actcid, err := init_.GetActorCodeID(av) + if err != nil { + return 0, nil, nil, err + } + + act := &types.Actor{ + Code: actcid, + Head: statecid, + Balance: big.Zero(), + } + + return counter, act, keyToID, nil +} diff --git a/pkg/gen/genesis/f02_reward.go b/pkg/gen/genesis/f02_reward.go new file mode 100644 index 0000000000..adfe1deb47 --- /dev/null +++ b/pkg/gen/genesis/f02_reward.go @@ -0,0 +1,43 @@ +package genesis + +import ( + "context" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/reward" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-state-types/big" + + cbor "github.com/ipfs/go-ipld-cbor" + + bstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" +) + +func SetupRewardActor(ctx context.Context, bs bstore.Blockstore, qaPower big.Int, av actors.Version) (*types.Actor, error) { + cst := cbor.NewCborStore(bs) + rst, err := reward.MakeState(adt.WrapStore(ctx, cst), av, qaPower) + if err != nil { + return nil, err + } + + statecid, err := cst.Put(ctx, rst.GetState()) + if err != nil { + return nil, err + } + + actcid, err := reward.GetActorCodeID(av) + if err != nil { + return nil, err + } + + act := &types.Actor{ + Code: actcid, + Balance: types.BigInt{Int: constants.InitialRewardBalance}, + Head: statecid, + } + + return act, nil +} diff --git a/pkg/gen/genesis/f03_cron.go b/pkg/gen/genesis/f03_cron.go new file mode 100644 index 0000000000..7c36d58e51 --- /dev/null +++ b/pkg/gen/genesis/f03_cron.go @@ -0,0 +1,41 @@ +package genesis + +import ( + "context" + + "github.com/filecoin-project/go-state-types/big" + cbor "github.com/ipfs/go-ipld-cbor" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/cron" + + bstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func SetupCronActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { + cst := cbor.NewCborStore(bs) + st, err := cron.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av) + if err != nil { + return nil, err + } + + statecid, err := cst.Put(ctx, st.GetState()) + if err != nil { + return nil, err + } + + actcid, err := cron.GetActorCodeID(av) + if err != nil { + return nil, err + } + + act := &types.Actor{ + Code: actcid, + Head: statecid, + Balance: big.Zero(), + } + + return act, nil +} diff --git a/pkg/gen/genesis/f04_power.go b/pkg/gen/genesis/f04_power.go new file mode 100644 index 0000000000..4a575d0390 --- /dev/null +++ b/pkg/gen/genesis/f04_power.go @@ -0,0 +1,43 @@ +package genesis + +import ( + "context" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/specs-actors/actors/util/adt" + + cbor "github.com/ipfs/go-ipld-cbor" + + bstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func SetupStoragePowerActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { + + cst := cbor.NewCborStore(bs) + pst, err := power.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av) + if err != nil { + return nil, err + } + + statecid, err := cst.Put(ctx, pst.GetState()) + if err != nil { + return nil, err + } + + actcid, err := power.GetActorCodeID(av) + if err != nil { + return nil, err + } + + act := &types.Actor{ + Code: actcid, + Head: statecid, + Balance: big.Zero(), + } + + return act, nil +} diff --git a/pkg/gen/genesis/f05_market.go b/pkg/gen/genesis/f05_market.go new file mode 100644 index 0000000000..0f470614be --- /dev/null +++ b/pkg/gen/genesis/f05_market.go @@ -0,0 +1,41 @@ +package genesis + +import ( + "context" + + "github.com/filecoin-project/go-state-types/big" + cbor "github.com/ipfs/go-ipld-cbor" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + + bstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func SetupStorageMarketActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { + cst := cbor.NewCborStore(bs) + mst, err := market.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av) + if err != nil { + return nil, err + } + + statecid, err := cst.Put(ctx, mst.GetState()) + if err != nil { + return nil, err + } + + actcid, err := market.GetActorCodeID(av) + if err != nil { + return nil, err + } + + act := &types.Actor{ + Code: actcid, + Head: statecid, + Balance: big.Zero(), + } + + return act, nil +} diff --git a/pkg/gen/genesis/f06_vreg.go b/pkg/gen/genesis/f06_vreg.go new file mode 100644 index 0000000000..329c43b7e5 --- /dev/null +++ b/pkg/gen/genesis/f06_vreg.go @@ -0,0 +1,56 @@ +package genesis + +import ( + "context" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/verifreg" + + "github.com/filecoin-project/go-address" + cbor "github.com/ipfs/go-ipld-cbor" + + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/specs-actors/actors/util/adt" + + bstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var RootVerifierID address.Address + +func init() { + + idk, err := address.NewFromString("t080") + if err != nil { + panic(err) + } + + RootVerifierID = idk +} + +func SetupVerifiedRegistryActor(ctx context.Context, bs bstore.Blockstore, av actors.Version) (*types.Actor, error) { + cst := cbor.NewCborStore(bs) + vst, err := verifreg.MakeState(adt.WrapStore(ctx, cbor.NewCborStore(bs)), av, RootVerifierID) + if err != nil { + return nil, err + } + + statecid, err := cst.Put(ctx, vst.GetState()) + if err != nil { + return nil, err + } + + actcid, err := verifreg.GetActorCodeID(av) + if err != nil { + return nil, err + } + + act := &types.Actor{ + Code: actcid, + Head: statecid, + Balance: big.Zero(), + } + + return act, nil +} diff --git a/pkg/gen/genesis/genblock.go b/pkg/gen/genesis/genblock.go new file mode 100644 index 0000000000..f26659cdfa --- /dev/null +++ b/pkg/gen/genesis/genblock.go @@ -0,0 +1,41 @@ +package genesis + +import ( + "encoding/hex" + + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + "github.com/multiformats/go-multihash" +) + +const genesisMultihashString = "1220107d821c25dc0735200249df94a8bebc9c8e489744f86a4ca8919e81f19dcd72" +const genesisBlockHex = "a5684461746574696d6573323031372d30352d30352030313a32373a3531674e6574776f726b6846696c65636f696e65546f6b656e6846696c65636f696e6c546f6b656e416d6f756e7473a36b546f74616c537570706c796d322c3030302c3030302c303030664d696e6572736d312c3430302c3030302c3030306c50726f746f636f6c4c616273a36b446576656c6f706d656e746b3330302c3030302c3030306b46756e6472616973696e676b3230302c3030302c3030306a466f756e646174696f6e6b3130302c3030302c303030674d657373616765784854686973206973207468652047656e6573697320426c6f636b206f66207468652046696c65636f696e20446563656e7472616c697a65642053746f72616765204e6574776f726b2e" + +var cidBuilder = cid.V1Builder{Codec: cid.DagCBOR, MhType: multihash.SHA2_256} + +func expectedCid() cid.Cid { + mh, err := multihash.FromHexString(genesisMultihashString) + if err != nil { + panic(err) + } + return cid.NewCidV1(cidBuilder.Codec, mh) +} + +func getGenesisBlock() (blocks.Block, error) { + genesisBlockData, err := hex.DecodeString(genesisBlockHex) + if err != nil { + return nil, err + } + + genesisCid, err := cidBuilder.Sum(genesisBlockData) + if err != nil { + return nil, err + } + + block, err := blocks.NewBlockWithCid(genesisBlockData, genesisCid) + if err != nil { + return nil, err + } + + return block, nil +} diff --git a/pkg/gen/genesis/genesis.go b/pkg/gen/genesis/genesis.go new file mode 100644 index 0000000000..04735f4c9b --- /dev/null +++ b/pkg/gen/genesis/genesis.go @@ -0,0 +1,672 @@ +package genesis + +import ( + "context" + "crypto/rand" + "encoding/json" + "fmt" + + "github.com/filecoin-project/venus/pkg/consensusfault" + "github.com/filecoin-project/venus/pkg/fork" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper/impl" + "github.com/filecoin-project/venus/pkg/vmsupport" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/vm/gas" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/state/tree" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + verifreg0 "github.com/filecoin-project/specs-actors/actors/builtin/verifreg" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" + + "github.com/filecoin-project/go-state-types/network" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/multisig" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/account" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/verifreg" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/cron" + + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/reward" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/system" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + logging "github.com/ipfs/go-log/v2" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + + "github.com/filecoin-project/venus/pkg/chain" + sigs "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/repo" + bstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/pkg/vm" +) + +const AccountStart = 100 +const MinerStart = 1000 +const MaxAccounts = MinerStart - AccountStart + +var log = logging.Logger("genesis") + +type GenesisBootstrap struct { + Genesis *types.BlockHeader +} + +/* +From a list of parameters, create a genesis block / initial state + +The process: +- Bootstrap state (MakeInitialStateTree) + - Create empty state + - Create system actor + - Make init actor + - Create accounts mappings + - Set NextID to MinerStart + - Setup Reward (1.4B fil) + - Setup Cron + - Create empty power actor + - Create empty market + - Create verified registry + - Setup burnt fund address + - Initialize account / msig balances +- Instantiate early vm with genesis syscalls + - Create miners + - Each: + - power.CreateMiner, set msg value to PowerBalance + - market.AddFunds with correct value + - market.PublishDeals for related sectors + - Set network power in the power actor to what we'll have after genesis creation + - Recreate reward actor state with the right power + - For each precommitted sector + - Get deal weight + - Calculate QA Power + - Remove fake power from the power actor + - Calculate pledge + - Precommit + - Confirm valid + +Data Types: + +PreSeal :{ + CommR CID + CommD CID + SectorID SectorNumber + Deal market.DealProposal # Start at 0, self-deal! +} + +Genesis: { + Accounts: [ # non-miner, non-singleton actors, max len = MaxAccounts + { + Type: "account" / "multisig", + Value: "attofil", + [Meta: {msig settings, account key..}] + },... + ], + Miners: [ + { + Owner, Worker Addr # ID + MarketBalance, PowerBalance TokenAmount + SectorSize uint64 + PreSeals []PreSeal + },... + ], +} + +*/ + +func MakeInitialStateTree(ctx context.Context, bs bstore.Blockstore, template Template) (*tree.State, map[address.Address]address.Address, error) { + // Create empty state tree + + cst := cbor.NewCborStore(bs) + _, err := cst.Put(context.TODO(), []struct{}{}) + if err != nil { + return nil, nil, xerrors.Errorf("putting empty object: %w", err) + } + + sv, err := tree.VersionForNetwork(template.NetworkVersion) + if err != nil { + return nil, nil, xerrors.Errorf("getting state tree version: %w", err) + } + + state, err := tree.NewState(cst, sv) + if err != nil { + return nil, nil, xerrors.Errorf("making new state tree: %w", err) + } + + av, err := actors.VersionForNetwork(template.NetworkVersion) + if err != nil { + return nil, nil, xerrors.Errorf("get actor version: %w", err) + } + // Create system actor + + sysact, err := SetupSystemActor(ctx, bs, av) + if err != nil { + return nil, nil, xerrors.Errorf("setup system actor: %w", err) + } + if err := state.SetActor(ctx, system.Address, sysact); err != nil { + return nil, nil, xerrors.Errorf("set system actor: %w", err) + } + + // Create init actor + + idStart, initact, keyIDs, err := SetupInitActor(ctx, bs, template.NetworkName, template.Accounts, template.VerifregRootKey, template.RemainderAccount, av) + if err != nil { + return nil, nil, xerrors.Errorf("setup init actor: %w", err) + } + if err := state.SetActor(ctx, init_.Address, initact); err != nil { + return nil, nil, xerrors.Errorf("set init actor: %w", err) + } + + // Setup reward + // RewardActor's state is overwritten by SetupStorageMiners, but needs to exist for miner creation messages + rewact, err := SetupRewardActor(ctx, bs, big.Zero(), av) + if err != nil { + return nil, nil, xerrors.Errorf("setup reward actor: %w", err) + } + + err = state.SetActor(ctx, reward.Address, rewact) + if err != nil { + return nil, nil, xerrors.Errorf("set reward actor: %w", err) + } + + // Setup cron + cronact, err := SetupCronActor(ctx, bs, av) + if err != nil { + return nil, nil, xerrors.Errorf("setup cron actor: %w", err) + } + if err := state.SetActor(ctx, cron.Address, cronact); err != nil { + return nil, nil, xerrors.Errorf("set cron actor: %w", err) + } + + // Create empty power actor + spact, err := SetupStoragePowerActor(ctx, bs, av) + if err != nil { + return nil, nil, xerrors.Errorf("setup storage power actor: %w", err) + } + if err := state.SetActor(ctx, power.Address, spact); err != nil { + return nil, nil, xerrors.Errorf("set storage power actor: %w", err) + } + + // Create empty market actor + marketact, err := SetupStorageMarketActor(ctx, bs, av) + if err != nil { + return nil, nil, xerrors.Errorf("setup storage market actor: %w", err) + } + if err := state.SetActor(ctx, market.Address, marketact); err != nil { + return nil, nil, xerrors.Errorf("set storage market actor: %w", err) + } + + // Create verified registry + verifact, err := SetupVerifiedRegistryActor(ctx, bs, av) + if err != nil { + return nil, nil, xerrors.Errorf("setup verified registry market actor: %w", err) + } + if err := state.SetActor(ctx, verifreg.Address, verifact); err != nil { + return nil, nil, xerrors.Errorf("set verified registry actor: %w", err) + } + + bact, err := makeAccountActor(ctx, cst, av, builtin.BurntFundsActorAddr, big.Zero()) + if err != nil { + return nil, nil, xerrors.Errorf("setup burnt funds actor state: %w", err) + } + if err := state.SetActor(ctx, builtin.BurntFundsActorAddr, bact); err != nil { + return nil, nil, xerrors.Errorf("set burnt funds actor: %w", err) + } + + // Create accounts + for _, info := range template.Accounts { + + switch info.Type { + case TAccount: + if err := createAccountActor(ctx, cst, state, info, keyIDs, av); err != nil { + return nil, nil, xerrors.Errorf("failed to create account actor: %w", err) + } + + case TMultisig: + + ida, err := address.NewIDAddress(uint64(idStart)) + if err != nil { + return nil, nil, err + } + idStart++ + + if err := createMultisigAccount(ctx, cst, state, ida, info, keyIDs, av); err != nil { + return nil, nil, err + } + default: + return nil, nil, xerrors.New("unsupported account type") + } + + } + + switch template.VerifregRootKey.Type { + case TAccount: + var ainfo AccountMeta + if err := json.Unmarshal(template.VerifregRootKey.Meta, &ainfo); err != nil { + return nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err) + } + + _, ok := keyIDs[ainfo.Owner] + if ok { + return nil, nil, fmt.Errorf("rootkey account has already been declared, cannot be assigned 80: %s", ainfo.Owner) + } + + vact, err := makeAccountActor(ctx, cst, av, ainfo.Owner, template.VerifregRootKey.Balance) + if err != nil { + return nil, nil, xerrors.Errorf("setup verifreg rootkey account state: %w", err) + } + if err = state.SetActor(ctx, builtin.RootVerifierAddress, vact); err != nil { + return nil, nil, xerrors.Errorf("set verifreg rootkey account actor: %w", err) + } + case TMultisig: + if err = createMultisigAccount(ctx, cst, state, builtin.RootVerifierAddress, template.VerifregRootKey, keyIDs, av); err != nil { + return nil, nil, xerrors.Errorf("failed to set up verified registry signer: %w", err) + } + default: + return nil, nil, xerrors.Errorf("unknown account type for verifreg rootkey: %w", err) + } + + // Setup the first verifier as ID-address 81 + // TODO: remove this + skBytes, err := sigs.Generate(crypto.SigTypeBLS) + if err != nil { + return nil, nil, xerrors.Errorf("creating random verifier secret key: %w", err) + } + + verifierPk, err := sigs.ToPublic(crypto.SigTypeBLS, skBytes) + if err != nil { + return nil, nil, xerrors.Errorf("creating random verifier public key: %w", err) + } + + verifierAd, err := address.NewBLSAddress(verifierPk) + if err != nil { + return nil, nil, xerrors.Errorf("creating random verifier address: %w", err) + } + + verifierId, err := address.NewIDAddress(81) // nolint + if err != nil { + return nil, nil, err + } + + verifierAct, err := makeAccountActor(ctx, cst, av, verifierAd, big.Zero()) + if err != nil { + return nil, nil, xerrors.Errorf("setup first verifier state: %w", err) + } + + if err = state.SetActor(ctx, verifierId, verifierAct); err != nil { + return nil, nil, xerrors.Errorf("set first verifier actor: %w", err) + } + + totalFilAllocated := big.Zero() + + err = state.ForEach(func(addr address.Address, act *types.Actor) error { + if act.Balance.Nil() { + panic(fmt.Sprintf("actor %s (%s) has nil balance", addr, builtin.ActorNameByCode(act.Code))) + } + totalFilAllocated = big.Add(totalFilAllocated, act.Balance) + return nil + }) + if err != nil { + return nil, nil, xerrors.Errorf("summing account balances in state tree: %w", err) + } + + totalFil := big.Mul(big.NewInt(int64(constants.FilBase)), big.NewInt(int64(constants.FilecoinPrecision))) + remainingFil := big.Sub(totalFil, totalFilAllocated) + if remainingFil.Sign() < 0 { + return nil, nil, xerrors.Errorf("somehow overallocated filecoin (allocated = %s)", types.FIL(totalFilAllocated)) + } + + template.RemainderAccount.Balance = remainingFil + + switch template.RemainderAccount.Type { + case TAccount: + var ainfo AccountMeta + if err := json.Unmarshal(template.RemainderAccount.Meta, &ainfo); err != nil { + return nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err) + } + + _, ok := keyIDs[ainfo.Owner] + if ok { + return nil, nil, fmt.Errorf("remainder account has already been declared, cannot be assigned 90: %s", ainfo.Owner) + } + + keyIDs[ainfo.Owner] = builtin.ReserveAddress + err = createAccountActor(ctx, cst, state, template.RemainderAccount, keyIDs, av) + if err != nil { + return nil, nil, xerrors.Errorf("creating remainder acct: %w", err) + } + + case TMultisig: + if err = createMultisigAccount(ctx, cst, state, builtin.ReserveAddress, template.RemainderAccount, keyIDs, av); err != nil { + return nil, nil, xerrors.Errorf("failed to set up remainder: %w", err) + } + default: + return nil, nil, xerrors.Errorf("unknown account type for remainder: %w", err) + } + + return state, keyIDs, nil +} + +func makeAccountActor(ctx context.Context, cst cbor.IpldStore, av actors.Version, addr address.Address, bal types.BigInt) (*types.Actor, error) { + ast, err := account.MakeState(adt.WrapStore(ctx, cst), av, addr) + if err != nil { + return nil, err + } + + statecid, err := cst.Put(ctx, ast.GetState()) + if err != nil { + return nil, err + } + + actcid, err := account.GetActorCodeID(av) + if err != nil { + return nil, err + } + + act := &types.Actor{ + Code: actcid, + Head: statecid, + Balance: bal, + } + + return act, nil +} + +func createAccountActor(ctx context.Context, cst cbor.IpldStore, state *tree.State, info Actor, keyIDs map[address.Address]address.Address, av actors.Version) error { + var ainfo AccountMeta + if err := json.Unmarshal(info.Meta, &ainfo); err != nil { + return xerrors.Errorf("unmarshaling account meta: %w", err) + } + + aa, err := makeAccountActor(ctx, cst, av, ainfo.Owner, info.Balance) + if err != nil { + return err + } + + ida, ok := keyIDs[ainfo.Owner] + if !ok { + return fmt.Errorf("no registered ID for account actor: %s", ainfo.Owner) + } + + err = state.SetActor(ctx, ida, aa) + if err != nil { + return xerrors.Errorf("setting account from actmap: %w", err) + } + return nil +} + +func createMultisigAccount(ctx context.Context, cst cbor.IpldStore, state *tree.State, ida address.Address, info Actor, keyIDs map[address.Address]address.Address, av actors.Version) error { + if info.Type != TMultisig { + return fmt.Errorf("can only call createMultisigAccount with multisig Actor info") + } + var ainfo MultisigMeta + if err := json.Unmarshal(info.Meta, &ainfo); err != nil { + return xerrors.Errorf("unmarshaling account meta: %w", err) + } + + var signers []address.Address + + for _, e := range ainfo.Signers { + idAddress, ok := keyIDs[e] + if !ok { + return fmt.Errorf("no registered key ID for signer: %s", e) + } + + // Check if actor already exists + _, bFind, err := state.GetActor(ctx, e) + if err == nil && bFind { + signers = append(signers, idAddress) + continue + } + + aa, err := makeAccountActor(ctx, cst, av, e, big.Zero()) + if err != nil { + return err + } + + if err = state.SetActor(ctx, idAddress, aa); err != nil { + return xerrors.Errorf("setting account from actmap: %w", err) + } + signers = append(signers, idAddress) + } + + mst, err := multisig.MakeState(adt.WrapStore(ctx, cst), av, signers, uint64(ainfo.Threshold), abi.ChainEpoch(ainfo.VestingStart), abi.ChainEpoch(ainfo.VestingDuration), info.Balance) + if err != nil { + return err + } + + statecid, err := cst.Put(ctx, mst.GetState()) + if err != nil { + return err + } + + actcid, err := multisig.GetActorCodeID(av) + if err != nil { + return err + } + + err = state.SetActor(ctx, ida, &types.Actor{ + Code: actcid, + Balance: info.Balance, + Head: statecid, + }) + if err != nil { + return xerrors.Errorf("setting account from actmap: %w", err) + } + + return nil +} + +func VerifyPreSealedData(ctx context.Context, cs *chain.Store, stateroot cid.Cid, template Template, keyIDs map[address.Address]address.Address, nv network.Version, para *config.ForkUpgradeConfig) (cid.Cid, error) { + verifNeeds := make(map[address.Address]abi.PaddedPieceSize) + var sum abi.PaddedPieceSize + + faultChecker := consensusfault.NewFaultChecker(cs, fork.NewMockFork()) + syscalls := vmsupport.NewSyscalls(faultChecker, impl.ProofVerifier) + genesisNetworkVersion := func(context.Context, abi.ChainEpoch) network.Version { + return nv + } + + csc := func(context.Context, abi.ChainEpoch, tree.Tree) (abi.TokenAmount, error) { + return big.Zero(), nil + } + + gasPriceSchedule := gas.NewPricesSchedule(para) + vmopt := vm.VmOption{ + CircSupplyCalculator: csc, + NtwkVersionGetter: genesisNetworkVersion, + Rnd: &fakeRand{}, + BaseFee: big.NewInt(0), + Epoch: 0, + PRoot: stateroot, + Bsstore: cs.Blockstore(), + SysCallsImpl: mkFakedSigSyscalls(syscalls), + GasPriceSchedule: gasPriceSchedule, + } + + vm, err := vm.NewVM(ctx, vmopt) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to create NewVM: %w", err) + } + + for mi, m := range template.Miners { + for si, s := range m.Sectors { + if s.Deal.Provider != m.ID { + return cid.Undef, xerrors.Errorf("Sector %d in miner %d in template had mismatch in provider and miner ID: %s != %s", si, mi, s.Deal.Provider, m.ID) + } + + amt := s.Deal.PieceSize + verifNeeds[keyIDs[s.Deal.Client]] += amt + sum += amt + } + } + + verifregRoot, err := address.NewIDAddress(80) + if err != nil { + return cid.Undef, err + } + + verifier, err := address.NewIDAddress(81) + if err != nil { + return cid.Undef, err + } + + // Note: This is brittle, if the methodNum / param changes, it could break things + _, err = doExecValue(ctx, vm, verifreg.Address, verifregRoot, types.NewInt(0), builtin0.MethodsVerifiedRegistry.AddVerifier, mustEnc(&verifreg0.AddVerifierParams{ + + Address: verifier, + Allowance: abi.NewStoragePower(int64(sum)), // eh, close enough + + })) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to create verifier: %w", err) + } + + for c, amt := range verifNeeds { + // Note: This is brittle, if the methodNum / param changes, it could break things + _, err := doExecValue(ctx, vm, verifreg.Address, verifier, types.NewInt(0), builtin0.MethodsVerifiedRegistry.AddVerifiedClient, mustEnc(&verifreg0.AddVerifiedClientParams{ + Address: c, + Allowance: abi.NewStoragePower(int64(amt)), + })) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to add verified client: %w", err) + } + } + + st, err := vm.Flush() + if err != nil { + return cid.Cid{}, xerrors.Errorf("vm flush: %w", err) + } + + return st, nil +} + +func MakeGenesisBlock(ctx context.Context, rep repo.Repo, bs bstore.Blockstore, template Template, para *config.ForkUpgradeConfig) (*GenesisBootstrap, error) { + st, keyIDs, err := MakeInitialStateTree(ctx, bs, template) + if err != nil { + return nil, xerrors.Errorf("make initial state tree failed: %w", err) + } + + stateroot, err := st.Flush(ctx) + if err != nil { + return nil, xerrors.Errorf("flush state tree failed: %w", err) + } + + // temp chainstore + cs := chain.NewStore(rep.ChainDatastore(), bs, cid.Undef, chain.NewMockCirculatingSupplyCalculator()) + + // Verify PreSealed Data + stateroot, err = VerifyPreSealedData(ctx, cs, stateroot, template, keyIDs, template.NetworkVersion, para) + if err != nil { + return nil, xerrors.Errorf("failed to verify presealed data: %w", err) + } + + stateroot, err = SetupStorageMiners(ctx, cs, stateroot, template.Miners, template.NetworkVersion, para) + if err != nil { + return nil, xerrors.Errorf("setup miners failed: %w", err) + } + + store := adt.WrapStore(ctx, cbor.NewCborStore(bs)) + emptyroot, err := adt0.MakeEmptyArray(store).Root() + if err != nil { + return nil, xerrors.Errorf("amt build failed: %w", err) + } + + mm := &types.MessageRoot{ + BlsRoot: emptyroot, + SecpkRoot: emptyroot, + } + mmb, err := mm.ToStorageBlock() + if err != nil { + return nil, xerrors.Errorf("serializing msgmeta failed: %w", err) + } + if err := bs.Put(ctx, mmb); err != nil { + return nil, xerrors.Errorf("putting msgmeta block to blockstore: %w", err) + } + + log.Infof("Empty Genesis root: %s", emptyroot) + + tickBuf := make([]byte, 32) + _, _ = rand.Read(tickBuf) + genesisticket := &types.Ticket{ + VRFProof: tickBuf, + } + + filecoinGenesisCid, err := cid.Decode("bafyreiaqpwbbyjo4a42saasj36kkrpv4tsherf2e7bvezkert2a7dhonoi") + if err != nil { + return nil, xerrors.Errorf("failed to decode filecoin genesis block CID: %w", err) + } + + if !expectedCid().Equals(filecoinGenesisCid) { + return nil, xerrors.Errorf("expectedCid != filecoinGenesisCid") + } + + gblk, err := getGenesisBlock() + if err != nil { + return nil, xerrors.Errorf("failed to construct filecoin genesis block: %w", err) + } + + if !filecoinGenesisCid.Equals(gblk.Cid()) { + return nil, xerrors.Errorf("filecoinGenesisCid != gblk.Cid") + } + + if err := bs.Put(ctx, gblk); err != nil { + return nil, xerrors.Errorf("failed writing filecoin genesis block to blockstore: %w", err) + } + + b := &types.BlockHeader{ + Miner: system.Address, + Ticket: genesisticket, + Parents: types.NewTipSetKey(filecoinGenesisCid).Cids(), + Height: 0, + ParentWeight: types.NewInt(0), + ParentStateRoot: stateroot, + Messages: mmb.Cid(), + ParentMessageReceipts: emptyroot, + BLSAggregate: nil, + BlockSig: nil, + Timestamp: template.Timestamp, + ElectionProof: new(types.ElectionProof), + BeaconEntries: []types.BeaconEntry{ + { + Round: 0, + Data: make([]byte, 32), + }, + }, + ParentBaseFee: abi.NewTokenAmount(constants.InitialBaseFee), + } + + sb, err := b.ToStorageBlock() + if err != nil { + return nil, xerrors.Errorf("serializing block header failed: %w", err) + } + + if err := bs.Put(ctx, sb); err != nil { + return nil, xerrors.Errorf("putting header to blockstore: %w", err) + } + + return &GenesisBootstrap{ + Genesis: b, + }, nil +} diff --git a/pkg/gen/genesis/miners.go b/pkg/gen/genesis/miners.go new file mode 100644 index 0000000000..9a2864b32f --- /dev/null +++ b/pkg/gen/genesis/miners.go @@ -0,0 +1,658 @@ +package genesis + +import ( + "bytes" + "context" + "fmt" + "math/rand" + + power4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/power" + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + reward4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/reward" + + market4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/market" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + "github.com/filecoin-project/venus/venus-shared/actors/policy" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + "github.com/filecoin-project/go-state-types/network" + + market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/reward" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + power0 "github.com/filecoin-project/specs-actors/actors/builtin/power" + reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/consensusfault" + "github.com/filecoin-project/venus/pkg/fork" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper/impl" + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/pkg/vm/gas" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + "github.com/filecoin-project/venus/pkg/vmsupport" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func MinerAddress(genesisIndex uint64) address.Address { + maddr, err := address.NewIDAddress(MinerStart + genesisIndex) + if err != nil { + panic(err) + } + + return maddr +} + +type fakedSigSyscalls struct { + vmcontext.SyscallsImpl +} + +func (fss *fakedSigSyscalls) VerifySignature(ctx context.Context, view vmcontext.SyscallsStateView, signature crypto.Signature, signer address.Address, plaintext []byte) error { + return nil +} + +func mkFakedSigSyscalls(sys vmcontext.SyscallsImpl) vmcontext.SyscallsImpl { + return &fakedSigSyscalls{ + sys, + } +} + +// Note: Much of this is brittle, if the methodNum / param / return changes, it will break things +func SetupStorageMiners(ctx context.Context, cs *chain.Store, sroot cid.Cid, miners []Miner, nv network.Version, para *config.ForkUpgradeConfig) (cid.Cid, error) { + cst := cbor.NewCborStore(cs.Blockstore()) + av, err := actors.VersionForNetwork(nv) + if err != nil { + return cid.Undef, xerrors.Errorf("get actor version: %w", err) + } + + csc := func(context.Context, abi.ChainEpoch, tree.Tree) (abi.TokenAmount, error) { + return big.Zero(), nil + } + + genesisNetworkVersion := func(context.Context, abi.ChainEpoch) network.Version { + return nv + } + + faultChecker := consensusfault.NewFaultChecker(cs, fork.NewMockFork()) + syscalls := vmsupport.NewSyscalls(faultChecker, impl.ProofVerifier) + gasPirceSchedule := gas.NewPricesSchedule(para) + vmopt := vm.VmOption{ + CircSupplyCalculator: csc, + NtwkVersionGetter: genesisNetworkVersion, + Rnd: &fakeRand{}, + BaseFee: big.NewInt(0), + Epoch: 0, + PRoot: sroot, + Bsstore: cs.Blockstore(), + SysCallsImpl: mkFakedSigSyscalls(syscalls), + GasPriceSchedule: gasPirceSchedule, + } + + vmi, err := vm.NewVM(ctx, vmopt) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to create NewVM: %w", err) + } + + if len(miners) == 0 { + return cid.Undef, xerrors.New("no genesis miners") + } + + minerInfos := make([]struct { + maddr address.Address + + presealExp abi.ChainEpoch + + dealIDs []abi.DealID + }, len(miners)) + + maxPeriods := policy.GetMaxSectorExpirationExtension() / miner.WPoStProvingPeriod + for i, m := range miners { + // Create miner through power actor + i := i + m := m + + spt, err := miner.SealProofTypeFromSectorSize(m.SectorSize, nv) + if err != nil { + return cid.Undef, err + } + + { + constructorParams := &power0.CreateMinerParams{ + Owner: m.Worker, + Worker: m.Worker, + Peer: []byte(m.PeerID), + SealProofType: spt, + } + + params := mustEnc(constructorParams) + rval, err := doExecValue(ctx, vmi, power.Address, m.Owner, m.PowerBalance, power.Methods.CreateMiner, params) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to create genesis miner: %w", err) + } + + var ma power0.CreateMinerReturn + if err := ma.UnmarshalCBOR(bytes.NewReader(rval)); err != nil { + return cid.Undef, xerrors.Errorf("unmarshaling CreateMinerReturn: %w", err) + } + + expma := MinerAddress(uint64(i)) + if ma.IDAddress != expma { + return cid.Undef, xerrors.Errorf("miner assigned wrong address: %s != %s", ma.IDAddress, expma) + } + minerInfos[i].maddr = ma.IDAddress + + _, err = vmi.Flush() + if err != nil { + return cid.Undef, xerrors.Errorf("flushing vm: %w", err) + } + + mact, find, err := vmi.StateTree().GetActor(ctx, minerInfos[i].maddr) + if err != nil { + return cid.Undef, xerrors.Errorf("getting newly created miner actor: %w", err) + } + + if !find { + return cid.Undef, xerrors.New("actor not found") + } + + mst, err := miner.Load(adt.WrapStore(ctx, cst), mact) + if err != nil { + return cid.Undef, xerrors.Errorf("getting newly created miner state: %w", err) + } + + pps, err := mst.GetProvingPeriodStart() + if err != nil { + return cid.Undef, xerrors.Errorf("getting newly created miner proving period start: %w", err) + } + + minerInfos[i].presealExp = (maxPeriods-1)*miner0.WPoStProvingPeriod + pps - 1 + } + + // Add market funds + + if m.MarketBalance.GreaterThan(big.Zero()) { + params := mustEnc(&minerInfos[i].maddr) + _, err := doExecValue(ctx, vmi, market.Address, m.Worker, m.MarketBalance, market.Methods.AddBalance, params) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to create genesis miner (add balance): %w", err) + } + } + + // Publish preseal deals + + { + publish := func(params *market.PublishStorageDealsParams) error { + fmt.Printf("publishing %d storage deals on miner %s with worker %s\n", len(params.Deals), params.Deals[0].Proposal.Provider, m.Worker) + + ret, err := doExecValue(ctx, vmi, market.Address, m.Worker, big.Zero(), builtin0.MethodsMarket.PublishStorageDeals, mustEnc(params)) + if err != nil { + return xerrors.Errorf("failed to create genesis miner (publish deals): %w", err) + } + retval, err := market.DecodePublishStorageDealsReturn(ret, nv) + if err != nil { + return xerrors.Errorf("failed to create genesis miner (decoding published deals): %w", err) + } + ids, err := retval.DealIDs() + if err != nil { + return xerrors.Errorf("failed to create genesis miner (getting published dealIDs): %w", err) + } + + if len(ids) != len(params.Deals) { + return xerrors.Errorf("failed to create genesis miner (at least one deal was invalid on publication") + } + + minerInfos[i].dealIDs = append(minerInfos[i].dealIDs, ids...) + return nil + } + + params := &market.PublishStorageDealsParams{} + for _, preseal := range m.Sectors { + preseal.Deal.VerifiedDeal = true + preseal.Deal.EndEpoch = minerInfos[i].presealExp + params.Deals = append(params.Deals, market.ClientDealProposal{ + Proposal: preseal.Deal, + ClientSignature: crypto.Signature{Type: crypto.SigTypeBLS}, // TODO: do we want to sign these? Or do we want to fake signatures for genesis setup? + }) + + if len(params.Deals) == cbg.MaxLength { + if err := publish(params); err != nil { + return cid.Undef, err + } + + params = &market.PublishStorageDealsParams{} + } + } + + if len(params.Deals) > 0 { + if err := publish(params); err != nil { + return cid.Undef, err + } + } + } + } + + // adjust total network power for equal pledge per sector + rawPow, qaPow := big.NewInt(0), big.NewInt(0) + { + for i, m := range miners { + for pi := range m.Sectors { + rawPow = types.BigAdd(rawPow, types.NewInt(uint64(m.SectorSize))) + + dweight, vdweight, err := dealWeight(ctx, vmi, minerInfos[i].maddr, []abi.DealID{minerInfos[i].dealIDs[pi]}, 0, minerInfos[i].presealExp, av) + if err != nil { + return cid.Undef, xerrors.Errorf("getting deal weight: %w", err) + } + + sectorWeight := builtin.QAPowerForWeight(m.SectorSize, minerInfos[i].presealExp, dweight, vdweight) + + qaPow = types.BigAdd(qaPow, sectorWeight) + } + } + + _, err = vmi.Flush() + if err != nil { + return cid.Undef, xerrors.Errorf("flushing vm: %w", err) + } + + pact, find, err := vmi.StateTree().GetActor(ctx, power.Address) + if err != nil { + return cid.Undef, xerrors.Errorf("getting power actor: %w", err) + } + + if !find { + return cid.Undef, xerrors.New("power actor not exist") + } + + pst, err := power.Load(adt.WrapStore(ctx, cst), pact) + if err != nil { + return cid.Undef, xerrors.Errorf("getting power state: %w", err) + } + + if err = pst.SetTotalQualityAdjPower(qaPow); err != nil { + return cid.Undef, xerrors.Errorf("setting TotalQualityAdjPower in power state: %w", err) + } + + if err = pst.SetTotalRawBytePower(rawPow); err != nil { + return cid.Undef, xerrors.Errorf("setting TotalRawBytePower in power state: %w", err) + } + + if err = pst.SetThisEpochQualityAdjPower(qaPow); err != nil { + return cid.Undef, xerrors.Errorf("setting ThisEpochQualityAdjPower in power state: %w", err) + } + + if err = pst.SetThisEpochRawBytePower(rawPow); err != nil { + return cid.Undef, xerrors.Errorf("setting ThisEpochRawBytePower in power state: %w", err) + } + + pcid, err := cst.Put(ctx, pst.GetState()) + if err != nil { + return cid.Undef, xerrors.Errorf("putting power state: %w", err) + } + + pact.Head = pcid + + if err = vmi.StateTree().SetActor(ctx, power.Address, pact); err != nil { + return cid.Undef, xerrors.Errorf("setting power state: %w", err) + } + + ver, err := actors.VersionForNetwork(nv) + if err != nil { + return cid.Undef, xerrors.Errorf("get actor version: %w", err) + } + + rewact, err := SetupRewardActor(ctx, cs.Blockstore(), big.Zero(), ver) + if err != nil { + return cid.Undef, xerrors.Errorf("setup reward actor: %w", err) + } + + if err = vmi.StateTree().SetActor(ctx, reward.Address, rewact); err != nil { + return cid.Undef, xerrors.Errorf("set reward actor: %w", err) + } + } + + for i, m := range miners { + // Commit sectors + { + for pi, preseal := range m.Sectors { + params := &miner.SectorPreCommitInfo{ + SealProof: preseal.ProofType, + SectorNumber: preseal.SectorID, + SealedCID: preseal.CommR, + SealRandEpoch: -1, + DealIDs: []abi.DealID{minerInfos[i].dealIDs[pi]}, + Expiration: minerInfos[i].presealExp, // TODO: Allow setting externally! + } + + dweight, vdweight, err := dealWeight(ctx, vmi, minerInfos[i].maddr, params.DealIDs, 0, minerInfos[i].presealExp, av) + if err != nil { + return cid.Undef, xerrors.Errorf("getting deal weight: %w", err) + } + + sectorWeight := builtin.QAPowerForWeight(m.SectorSize, minerInfos[i].presealExp, dweight, vdweight) + + // we've added fake power for this sector above, remove it now + + _, err = vmi.Flush() + if err != nil { + return cid.Undef, xerrors.Errorf("flushing vm: %w", err) + } + + pact, find, err := vmi.StateTree().GetActor(ctx, power.Address) + if err != nil { + return cid.Undef, xerrors.Errorf("getting power actor: %w", err) + } + + if !find { + return cid.Undef, xerrors.New("power actor not exist") + } + + pst, err := power.Load(adt.WrapStore(ctx, cst), pact) + if err != nil { + return cid.Undef, xerrors.Errorf("getting power state: %w", err) + } + + pc, err := pst.TotalPower() + if err != nil { + return cid.Undef, xerrors.Errorf("getting total power: %w", err) + } + + if err = pst.SetTotalRawBytePower(types.BigSub(pc.RawBytePower, types.NewInt(uint64(m.SectorSize)))); err != nil { + return cid.Undef, xerrors.Errorf("setting TotalRawBytePower in power state: %w", err) + } + + if err = pst.SetTotalQualityAdjPower(types.BigSub(pc.QualityAdjPower, sectorWeight)); err != nil { + return cid.Undef, xerrors.Errorf("setting TotalQualityAdjPower in power state: %w", err) + } + + pcid, err := cst.Put(ctx, pst.GetState()) + if err != nil { + return cid.Undef, xerrors.Errorf("putting power state: %w", err) + } + + pact.Head = pcid + + if err = vmi.StateTree().SetActor(ctx, power.Address, pact); err != nil { + return cid.Undef, xerrors.Errorf("setting power state: %w", err) + } + + baselinePower, rewardSmoothed, err := currentEpochBlockReward(ctx, vmi, minerInfos[i].maddr, av) + if err != nil { + return cid.Undef, xerrors.Errorf("getting current epoch reward: %w", err) + } + + tpow, err := currentTotalPower(ctx, vmi, minerInfos[i].maddr) + if err != nil { + return cid.Undef, xerrors.Errorf("getting current total power: %w", err) + } + + pcd := miner0.PreCommitDepositForPower(&rewardSmoothed, tpow.QualityAdjPowerSmoothed, sectorWeight) + + pledge := miner0.InitialPledgeForPower( + sectorWeight, + baselinePower, + tpow.PledgeCollateral, + &rewardSmoothed, + tpow.QualityAdjPowerSmoothed, + circSupply(ctx, vmi, minerInfos[i].maddr), + ) + + pledge = big.Add(pcd, pledge) + + fmt.Println(types.FIL(pledge)) + _, err = doExecValue(ctx, vmi, minerInfos[i].maddr, m.Worker, pledge, miner.Methods.PreCommitSector, mustEnc(params)) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to confirm presealed sectors: %w", err) + } + + // Commit one-by-one, otherwise pledge math tends to explode + var paramBytes []byte + + if av >= actors.Version6 { + // TODO: fixup + confirmParams := &builtin6.ConfirmSectorProofsParams{ + Sectors: []abi.SectorNumber{preseal.SectorID}, + } + + paramBytes = mustEnc(confirmParams) + } else { + confirmParams := &builtin0.ConfirmSectorProofsParams{ + Sectors: []abi.SectorNumber{preseal.SectorID}, + } + + paramBytes = mustEnc(confirmParams) + } + + _, err = doExecValue(ctx, vmi, minerInfos[i].maddr, power.Address, big.Zero(), miner.Methods.ConfirmSectorProofsValid, paramBytes) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to confirm presealed sectors: %w", err) + } + + if av > actors.Version2 { + // post v2, we need to explicitly Claim this power since ConfirmSectorProofsValid doesn't do it anymore + claimParams := &power4.UpdateClaimedPowerParams{ + RawByteDelta: types.NewInt(uint64(m.SectorSize)), + QualityAdjustedDelta: sectorWeight, + } + + _, err = doExecValue(ctx, vmi, power.Address, minerInfos[i].maddr, big.Zero(), power.Methods.UpdateClaimedPower, mustEnc(claimParams)) + if err != nil { + return cid.Undef, xerrors.Errorf("failed to confirm presealed sectors: %w", err) + } + + _, err = vmi.Flush() + if err != nil { + return cid.Undef, xerrors.Errorf("flushing vm: %w", err) + } + + mact, find, err := vmi.StateTree().GetActor(ctx, minerInfos[i].maddr) + if err != nil { + return cid.Undef, xerrors.Errorf("getting miner actor: %w", err) + } + + if !find { + return cid.Undef, xerrors.New("actor not found") + } + + mst, err := miner.Load(adt.WrapStore(ctx, cst), mact) + if err != nil { + return cid.Undef, xerrors.Errorf("getting miner state: %w", err) + } + + if err = mst.EraseAllUnproven(); err != nil { + return cid.Undef, xerrors.Errorf("failed to erase unproven sectors: %w", err) + } + + mcid, err := cst.Put(ctx, mst.GetState()) + if err != nil { + return cid.Undef, xerrors.Errorf("putting miner state: %w", err) + } + + mact.Head = mcid + + if err = vmi.StateTree().SetActor(ctx, minerInfos[i].maddr, mact); err != nil { + return cid.Undef, xerrors.Errorf("setting miner state: %w", err) + } + } + } + } + } + + // Sanity-check total network power + _, err = vmi.Flush() + if err != nil { + return cid.Undef, xerrors.Errorf("flushing vm: %w", err) + } + + pact, find, err := vmi.StateTree().GetActor(ctx, power.Address) + if err != nil { + return cid.Undef, xerrors.Errorf("getting power actor: %w", err) + } + if !find { + return cid.Undef, xerrors.New("actor not found") + } + + pst, err := power.Load(adt.WrapStore(ctx, cst), pact) + if err != nil { + return cid.Undef, xerrors.Errorf("getting power state: %w", err) + } + + pc, err := pst.TotalPower() + if err != nil { + return cid.Undef, xerrors.Errorf("getting total power: %w", err) + } + + if !pc.RawBytePower.Equals(rawPow) { + return cid.Undef, xerrors.Errorf("TotalRawBytePower (%s) doesn't match previously calculated rawPow (%s)", pc.RawBytePower, rawPow) + } + + if !pc.QualityAdjPower.Equals(qaPow) { + return cid.Undef, xerrors.Errorf("QualityAdjPower (%s) doesn't match previously calculated qaPow (%s)", pc.QualityAdjPower, qaPow) + } + + // TODO: Should we re-ConstructState for the reward actor using rawPow as currRealizedPower here? + + c, err := vmi.Flush() + if err != nil { + return cid.Undef, xerrors.Errorf("flushing vm: %w", err) + } + return c, nil +} + +// TODO: copied from actors test harness, deduplicate or remove from here +type fakeRand struct{} + +func (fr *fakeRand) ChainGetRandomnessFromBeacon(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + out := make([]byte, 32) + _, _ = rand.New(rand.NewSource(int64(randEpoch * 1000))).Read(out) //nolint + return out, nil +} + +func (fr *fakeRand) ChainGetRandomnessFromTickets(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + out := make([]byte, 32) + _, _ = rand.New(rand.NewSource(int64(randEpoch * 1000))).Read(out) //nolint + return out, nil +} + +func currentTotalPower(ctx context.Context, vmi vm.Interpreter, maddr address.Address) (*power0.CurrentTotalPowerReturn, error) { + pwret, err := doExecValue(ctx, vmi, power.Address, maddr, big.Zero(), builtin0.MethodsPower.CurrentTotalPower, nil) + if err != nil { + return nil, err + } + var pwr power0.CurrentTotalPowerReturn + if err := pwr.UnmarshalCBOR(bytes.NewReader(pwret)); err != nil { + return nil, err + } + + return &pwr, nil +} + +func dealWeight(ctx context.Context, vmi vm.Interpreter, maddr address.Address, dealIDs []abi.DealID, sectorStart, sectorExpiry abi.ChainEpoch, av actors.Version) (abi.DealWeight, abi.DealWeight, error) { + // TODO: This hack should move to market actor wrapper + if av <= actors.Version2 { + params := &market0.VerifyDealsForActivationParams{ + DealIDs: dealIDs, + SectorStart: sectorStart, + SectorExpiry: sectorExpiry, + } + + var dealWeights market0.VerifyDealsForActivationReturn + ret, err := doExecValue(ctx, vmi, + market.Address, + maddr, + abi.NewTokenAmount(0), + builtin0.MethodsMarket.VerifyDealsForActivation, + mustEnc(params), + ) + if err != nil { + return big.Zero(), big.Zero(), err + } + if err := dealWeights.UnmarshalCBOR(bytes.NewReader(ret)); err != nil { + return big.Zero(), big.Zero(), err + } + + return dealWeights.DealWeight, dealWeights.VerifiedDealWeight, nil + } + params := &market4.VerifyDealsForActivationParams{Sectors: []market4.SectorDeals{{ + SectorExpiry: sectorExpiry, + DealIDs: dealIDs, + }}} + + var dealWeights market4.VerifyDealsForActivationReturn + ret, err := doExecValue(ctx, vmi, + market.Address, + maddr, + abi.NewTokenAmount(0), + market.Methods.VerifyDealsForActivation, + mustEnc(params), + ) + if err != nil { + return big.Zero(), big.Zero(), err + } + if err := dealWeights.UnmarshalCBOR(bytes.NewReader(ret)); err != nil { + return big.Zero(), big.Zero(), err + } + + return dealWeights.Sectors[0].DealWeight, dealWeights.Sectors[0].VerifiedDealWeight, nil +} + +func currentEpochBlockReward(ctx context.Context, vmi vm.Interpreter, maddr address.Address, av actors.Version) (abi.StoragePower, builtin.FilterEstimate, error) { + rwret, err := doExecValue(ctx, vmi, reward.Address, maddr, big.Zero(), reward.Methods.ThisEpochReward, nil) + if err != nil { + return big.Zero(), builtin.FilterEstimate{}, err + } + + // TODO: This hack should move to reward actor wrapper + if av <= actors.Version2 { + var epochReward reward0.ThisEpochRewardReturn + + if err := epochReward.UnmarshalCBOR(bytes.NewReader(rwret)); err != nil { + return big.Zero(), builtin.FilterEstimate{}, err + } + + return epochReward.ThisEpochBaselinePower, *epochReward.ThisEpochRewardSmoothed, nil + } + + var epochReward reward4.ThisEpochRewardReturn + + if err := epochReward.UnmarshalCBOR(bytes.NewReader(rwret)); err != nil { + return big.Zero(), builtin.FilterEstimate{}, err + } + + return epochReward.ThisEpochBaselinePower, builtin.FilterEstimate(epochReward.ThisEpochRewardSmoothed), nil +} + +// todo what is actually called here is vmi.vmOption.CircSupplyCalculator(context.TODO(), height, st) -> L55, So there is no structure UnsafeVM ??? +func circSupply(ctx context.Context, vmi vm.Interpreter, maddr address.Address) abi.TokenAmount { + //unsafeVM := &vm.UnsafeVM{VM: vmi.} + //rt := unsafeVM.MakeRuntime(ctx, &types.Message{ + // GasLimit: 1_000_000_000, + // From: maddr, + //}) + // + //return rt.TotalFilCircSupply() + + return big.Zero() +} diff --git a/pkg/gen/genesis/types.go b/pkg/gen/genesis/types.go new file mode 100644 index 0000000000..2e5fa0b8d8 --- /dev/null +++ b/pkg/gen/genesis/types.go @@ -0,0 +1,89 @@ +package genesis + +import ( + "encoding/json" + + "github.com/filecoin-project/go-state-types/network" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + + market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" +) + +type ActorType string + +const ( + TAccount ActorType = "account" + TMultisig ActorType = "multisig" +) + +type PreSeal struct { + CommR cid.Cid + CommD cid.Cid + SectorID abi.SectorNumber + Deal market2.DealProposal + ProofType abi.RegisteredSealProof +} + +type Miner struct { + ID address.Address + Owner address.Address + Worker address.Address + PeerID peer.ID //nolint:golint + + MarketBalance abi.TokenAmount + PowerBalance abi.TokenAmount + + SectorSize abi.SectorSize + + Sectors []*PreSeal +} + +type AccountMeta struct { + Owner address.Address // bls / secpk +} + +func (am *AccountMeta) ActorMeta() json.RawMessage { + out, err := json.Marshal(am) + if err != nil { + panic(err) + } + return out +} + +type MultisigMeta struct { + Signers []address.Address + Threshold int + VestingDuration int + VestingStart int +} + +func (mm *MultisigMeta) ActorMeta() json.RawMessage { + out, err := json.Marshal(mm) + if err != nil { + panic(err) + } + return out +} + +type Actor struct { + Type ActorType + Balance abi.TokenAmount + + Meta json.RawMessage +} + +type Template struct { + NetworkVersion network.Version + Accounts []Actor + Miners []Miner + + NetworkName string + Timestamp uint64 `json:",omitempty"` + + VerifregRootKey Actor + RemainderAccount Actor +} diff --git a/pkg/gen/genesis/util.go b/pkg/gen/genesis/util.go new file mode 100644 index 0000000000..4fdf2ccffc --- /dev/null +++ b/pkg/gen/genesis/util.go @@ -0,0 +1,53 @@ +package genesis + +import ( + "context" + + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/venus-shared/actors" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func mustEnc(i cbg.CBORMarshaler) []byte { + enc, err := actors.SerializeParams(i) + if err != nil { + panic(err) // ok + } + return enc +} + +func doExecValue(ctx context.Context, vmi vm.Interpreter, to, from address.Address, value types.BigInt, method abi.MethodNum, params []byte) ([]byte, error) { + act, find, err := vmi.StateTree().GetActor(ctx, from) + if err != nil { + return nil, xerrors.Errorf("doExec failed to get from actor (%s): %w", from, err) + } + + if !find { + return nil, xerrors.Errorf("actor (%s) not found", from) + } + + ret, err := vmi.ApplyImplicitMessage(&types.Message{ + To: to, + From: from, + Method: method, + Params: params, + GasLimit: 1_000_000_000_000_000, + Value: value, + Nonce: act.Nonce, + }) + if err != nil { + return nil, xerrors.Errorf("doExec apply message failed: %w", err) + } + + if ret.Receipt.ExitCode != 0 { + return nil, xerrors.Errorf("failed to call method: %w", ret.Receipt.String()) + } + + return ret.Receipt.Return, nil +} diff --git a/pkg/genesis/genesis.go b/pkg/genesis/genesis.go new file mode 100644 index 0000000000..7987c86b1d --- /dev/null +++ b/pkg/genesis/genesis.go @@ -0,0 +1,115 @@ +package genesis + +import ( + "context" + "encoding/json" + "fmt" + "io/ioutil" + "os" + + "golang.org/x/xerrors" + + "github.com/ipfs/go-blockservice" + "github.com/ipfs/go-cid" + blockstore "github.com/ipfs/go-ipfs-blockstore" + offline "github.com/ipfs/go-ipfs-exchange-offline" + cbor "github.com/ipfs/go-ipld-cbor" + logging "github.com/ipfs/go-log/v2" + "github.com/ipfs/go-merkledag" + "github.com/ipld/go-car" + "github.com/mitchellh/go-homedir" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/gen" + genesis2 "github.com/filecoin-project/venus/pkg/gen/genesis" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/pkg/vm" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var glog = logging.Logger("genesis") + +// InitFunc is the signature for function that is used to create a genesis block. +type InitFunc func(cst cbor.IpldStore, bs blockstore.Blockstore) (*types.BlockHeader, error) + +// Ticket is the ticket to place in the genesis block header (which can't be derived from a prior ticket), +// used in the evaluation of the messages in the genesis block, +// and *also* the ticket value used when computing the genesis state (the parent state of the genesis block). +var Ticket = types.Ticket{ + VRFProof: []byte{ + 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, + 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, + }, +} + +// VM is the view into the VM used during genesis block creation. +type VM interface { + ApplyGenesisMessage(from address.Address, to address.Address, method abi.MethodNum, value abi.TokenAmount, params interface{}) (*vm.Ret, error) + Flush() (tree.Root, error) +} + +//MakeGenesis return a func to construct a genesis block +func MakeGenesis(ctx context.Context, rep repo.Repo, outFile, genesisTemplate string, para *config.ForkUpgradeConfig) InitFunc { + return func(_ cbor.IpldStore, bs blockstore.Blockstore) (*types.BlockHeader, error) { + glog.Warn("Generating new random genesis block, note that this SHOULD NOT happen unless you are setting up new network") + genesisTemplate, err := homedir.Expand(genesisTemplate) + if err != nil { + return nil, err + } + + fdata, err := ioutil.ReadFile(genesisTemplate) + if err != nil { + return nil, xerrors.Errorf("reading preseals json: %w", err) + } + + var template genesis2.Template + if err := json.Unmarshal(fdata, &template); err != nil { + return nil, err + } + + if template.Timestamp == 0 { + template.Timestamp = uint64(constants.Clock.Now().Unix()) + } + + // TODO potentially replace this cached blockstore by a CBOR cache. + cbs, err := blockstoreutil.CachedBlockstore(ctx, bs, blockstoreutil.DefaultCacheOpts()) + if err != nil { + return nil, err + } + + b, err := genesis2.MakeGenesisBlock(context.TODO(), rep, cbs, template, para) + if err != nil { + return nil, xerrors.Errorf("make genesis block: %w", err) + } + + fmt.Printf("GENESIS MINER ADDRESS: t0%d\n", genesis2.MinerStart) + + f, err := os.OpenFile(outFile, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) + if err != nil { + return nil, err + } + + offl := offline.Exchange(cbs) + blkserv := blockservice.New(cbs, offl) + dserv := merkledag.NewDAGService(blkserv) + + if err := car.WriteCarWithWalker(context.TODO(), dserv, []cid.Cid{b.Genesis.Cid()}, f, gen.CarWalkFunc); err != nil { + return nil, err + } + + glog.Infof("WRITING GENESIS FILE AT %s", f.Name()) + + if err := f.Close(); err != nil { + return nil, err + } + + return b.Genesis, nil + + } +} diff --git a/pkg/genesis/init.go b/pkg/genesis/init.go new file mode 100644 index 0000000000..bf564664ec --- /dev/null +++ b/pkg/genesis/init.go @@ -0,0 +1,58 @@ +package genesis + +import ( + "context" + "encoding/json" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/config" + types "github.com/filecoin-project/venus/venus-shared/chain" + + bstore "github.com/ipfs/go-ipfs-blockstore" + cbor "github.com/ipfs/go-ipld-cbor" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/repo" +) + +// Init initializes a DefaultSyncer in the given repo. +func Init(ctx context.Context, r repo.Repo, bs bstore.Blockstore, cst cbor.IpldStore, gen InitFunc) (*chain.Store, error) { + // TODO the following should be wrapped in the chain.Store or a sub + // interface. + // Generate the genesis tipset. + genesis, err := gen(cst, bs) + if err != nil { + return nil, err + } + genTipSet, err := types.NewTipSet([]*types.BlockHeader{genesis}) + if err != nil { + return nil, errors.Wrap(err, "failed to generate genesis block") + } + //todo give fork params + + chainStore := chain.NewStore(r.ChainDatastore(), bs, genesis.Cid(), chain.NewCirculatingSupplyCalculator(bs, genesis.Cid(), config.DefaultForkUpgradeParam)) + + // Persist the genesis tipset to the repo. + genTsas := &chain.TipSetMetadata{ + TipSet: genTipSet, + TipSetStateRoot: genesis.ParentStateRoot, + TipSetReceipts: genesis.ParentMessageReceipts, + } + if err = chainStore.PutTipSetMetadata(ctx, genTsas); err != nil { + return nil, errors.Wrap(err, "failed to put genesis block in chain store") + } + if err = chainStore.SetHead(ctx, genTipSet); err != nil { + return nil, errors.Wrap(err, "failed to persist genesis block in chain store") + } + // Persist the genesis cid to the repo. + val, err := json.Marshal(genesis.Cid()) + if err != nil { + return nil, errors.Wrap(err, "failed to marshal genesis cid") + } + + if err = r.ChainDatastore().Put(ctx, chain.GenesisKey, val); err != nil { + return nil, errors.Wrap(err, "failed to persist genesis cid") + } + + return chainStore, nil +} diff --git a/internal/pkg/journal/journal.go b/pkg/journal/journal.go similarity index 100% rename from internal/pkg/journal/journal.go rename to pkg/journal/journal.go diff --git a/internal/pkg/journal/journal_test.go b/pkg/journal/journal_test.go similarity index 84% rename from internal/pkg/journal/journal_test.go rename to pkg/journal/journal_test.go index ce0bf743dd..cd2827113e 100644 --- a/internal/pkg/journal/journal_test.go +++ b/pkg/journal/journal_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/assert" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/clock" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" ) func TestSimpleInMemoryJournal(t *testing.T) { diff --git a/internal/pkg/journal/noop.go b/pkg/journal/noop.go similarity index 100% rename from internal/pkg/journal/noop.go rename to pkg/journal/noop.go diff --git a/pkg/journal/testing.go b/pkg/journal/testing.go new file mode 100644 index 0000000000..15ce39a29a --- /dev/null +++ b/pkg/journal/testing.go @@ -0,0 +1,62 @@ +package journal + +import ( + "sync" + "testing" + "time" + + "github.com/filecoin-project/venus/pkg/clock" +) + +// NewInMemoryJournal returns a journal backed by an in-memory map. +func NewInMemoryJournal(t *testing.T, clk clock.Clock) Journal { + return &MemoryJournal{ + t: t, + clock: clk, + topics: make(map[string][]entry), + } +} + +// MemoryJournal represents a journal held in memory. +type MemoryJournal struct { + t *testing.T + clock clock.Clock + topicsMu sync.Mutex + topics map[string][]entry +} + +// Topic returns a Writer with the provided `topic`. +func (mj *MemoryJournal) Topic(topic string) Writer { + mr := &MemoryWriter{ + topic: topic, + journal: mj, + } + return mr +} + +type entry struct { + time time.Time + event string + kvs []interface{} +} + +// MemoryWriter writes journal entires in memory. +type MemoryWriter struct { + topic string + journal *MemoryJournal +} + +// Write records an operation and its metadata to a Journal accepting variadic key-value +// pairs. +func (mw *MemoryWriter) Write(event string, kvs ...interface{}) { + if len(kvs)%2 != 0 { + mw.journal.t.Fatalf("journal write call has odd number of key values pairs: %d event: %s topic: %s", len(kvs), event, mw.topic) + } + mw.journal.topicsMu.Lock() + mw.journal.topics[mw.topic] = append(mw.journal.topics[mw.topic], entry{ + event: event, + time: mw.journal.clock.Now(), + kvs: kvs, + }) + mw.journal.topicsMu.Unlock() +} diff --git a/internal/pkg/journal/zap.go b/pkg/journal/zap.go similarity index 93% rename from internal/pkg/journal/zap.go rename to pkg/journal/zap.go index bbc40f6c16..34221b2785 100644 --- a/internal/pkg/journal/zap.go +++ b/pkg/journal/zap.go @@ -45,7 +45,7 @@ type ZapWriter struct { topic string } -// Record records an operation and its metadata to a Journal accepting variadic key-value +// Write records an operation and its metadata to a Journal accepting variadic key-value // pairs. func (zw *ZapWriter) Write(event string, kvs ...interface{}) { zw.logger.Infow(event, kvs...) diff --git a/pkg/jwtauth/local_jwt.go b/pkg/jwtauth/local_jwt.go new file mode 100644 index 0000000000..a6b255d212 --- /dev/null +++ b/pkg/jwtauth/local_jwt.go @@ -0,0 +1,111 @@ +package jwtauth + +import ( + "context" + "crypto/rand" + vjc "github.com/filecoin-project/venus-auth/cmd/jwtclient" + "github.com/filecoin-project/venus/app/client/funcrule" + "io" + "io/ioutil" + "strings" + + "github.com/filecoin-project/go-jsonrpc/auth" + jwt3 "github.com/gbrlsnchs/jwt/v3" + logging "github.com/ipfs/go-log" + xerrors "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/repo" +) + +type APIAlg jwt3.HMACSHA + +var jwtLog = logging.Logger("jwt") + +type JwtPayload struct { + Allow []auth.Permission +} + +// JwtAuth auth through local token +type JwtAuth struct { + apiSecret *APIAlg + jwtSecetName string + jwtHmacSecret string + payload JwtPayload + lr repo.Repo +} + +func NewJwtAuth(lr repo.Repo) (vjc.IJwtAuthClient, error) { + jwtAuth := &JwtAuth{ + jwtSecetName: "auth-jwt-private", + jwtHmacSecret: "jwt-hmac-secret", + lr: lr, + payload: JwtPayload{Allow: funcrule.AllPermissions}, + } + + var err error + jwtAuth.apiSecret, err = jwtAuth.loadAPISecret() + if err != nil { + return nil, err + } + return vjc.IJwtAuthClient(jwtAuth), nil +} + +func (jwtAuth *JwtAuth) loadAPISecret() (*APIAlg, error) { + sk, err := jwtAuth.lr.Keystore().Get(jwtAuth.jwtHmacSecret) + // todo use customer keystore to replace + if err != nil && strings.Contains(err.Error(), "no key by the given name was found") { + jwtLog.Warn("Generating new API secret") + + sk, err = ioutil.ReadAll(io.LimitReader(rand.Reader, 32)) + if err != nil { + return nil, err + } + + if err := jwtAuth.lr.Keystore().Put(jwtAuth.jwtHmacSecret, sk); err != nil { + return nil, xerrors.Wrap(err, "failed to store private key") + } + + cliToken, err := jwt3.Sign(&jwtAuth.payload, jwt3.NewHS256(sk)) + if err != nil { + return nil, err + } + + if err := jwtAuth.lr.SetAPIToken(cliToken); err != nil { + return nil, err + } + } else if err != nil { + return nil, xerrors.Errorf("could not get JWT Token: %v", err) + } + + return (*APIAlg)(jwt3.NewHS256(sk)), nil +} + +// Verify verify token from request +func (jwtAuth *JwtAuth) Verify(ctx context.Context, token string) ([]auth.Permission, error) { + var payload JwtPayload + if _, err := jwt3.Verify([]byte(token), (*jwt3.HMACSHA)(jwtAuth.apiSecret), &payload); err != nil { + return nil, xerrors.Errorf("JWT Verification failed: %v", err) + } + return payload.Allow, nil +} + +type JwtAuthAPI struct { // nolint + JwtAuth *JwtAuth +} + +// Verify check the token is valid or not +func (a *JwtAuthAPI) Verify(ctx context.Context, token string) ([]auth.Permission, error) { + var payload JwtPayload + if _, err := jwt3.Verify([]byte(token), (*jwt3.HMACSHA)(a.JwtAuth.apiSecret), &payload); err != nil { + return nil, xerrors.Errorf("JWT Verification failed: %v", err) + } + return payload.Allow, nil +} + +// AuthNew create new token with specify permission for access venus +func (a *JwtAuthAPI) AuthNew(ctx context.Context, perms []auth.Permission) ([]byte, error) { + p := JwtPayload{ + Allow: perms, // TODO: consider checking validity + } + return jwt3.Sign(&p, (*jwt3.HMACSHA)(a.JwtAuth.apiSecret)) +} diff --git a/pkg/jwtauth/remote_auth.go b/pkg/jwtauth/remote_auth.go new file mode 100644 index 0000000000..0faffeb21b --- /dev/null +++ b/pkg/jwtauth/remote_auth.go @@ -0,0 +1,64 @@ +package jwtauth + +import ( + "context" + "github.com/filecoin-project/go-jsonrpc/auth" + va "github.com/filecoin-project/venus-auth/auth" + vjc "github.com/filecoin-project/venus-auth/cmd/jwtclient" + "github.com/filecoin-project/venus-auth/core" + "github.com/ipfs-force-community/metrics/ratelimit" +) + +var _ vjc.IJwtAuthClient = (*RemoteAuth)(nil) +var _ ratelimit.ILimitFinder = (*RemoteAuth)(nil) + +type ValueFromCtx struct{} + +func (vfc *ValueFromCtx) AccFromCtx(ctx context.Context) (string, bool) { + return vjc.CtxGetName(ctx) +} +func (vfc *ValueFromCtx) HostFromCtx(ctx context.Context) (string, bool) { + return vjc.CtxGetTokenLocation(ctx) +} + +// RemoteAuth in remote verification mode, venus connects venus-auth service, and verifies whether token is legal through rpc +type RemoteAuth struct { + remote *vjc.JWTClient +} + +// NewRemoteAuth new remote auth client from venus-auth url +func NewRemoteAuth(url string) *RemoteAuth { + return &RemoteAuth{remote: vjc.NewJWTClient(url)} +} + +// Verify check token through venus-auth rpc api +func (r *RemoteAuth) Verify(ctx context.Context, token string) ([]auth.Permission, error) { + var perms []auth.Permission + var err error + + var res *va.VerifyResponse + if res, err = r.remote.Verify(ctx, token); err != nil { + return nil, err + } + + jwtPerms := core.AdaptOldStrategy(res.Perm) + perms = make([]auth.Permission, len(jwtPerms)) + copy(perms, jwtPerms) + + return perms, nil +} + +func (r *RemoteAuth) GetUserLimit(name, service, api string) (*ratelimit.Limit, error) { + res, err := r.remote.GetUserRateLimit(name) + if err != nil { + return nil, err + } + + var limit = &ratelimit.Limit{Account: name, Cap: 0, Duration: 0} + if l := res.MatchedLimit(service, api); l != nil { + limit.Cap = l.ReqLimit.Cap + limit.Duration = l.ReqLimit.ResetDur + } + + return limit, nil +} diff --git a/pkg/market/cbor_gen.go b/pkg/market/cbor_gen.go new file mode 100644 index 0000000000..7d9e55b361 --- /dev/null +++ b/pkg/market/cbor_gen.go @@ -0,0 +1,116 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package market + +import ( + "fmt" + "io" + "sort" + + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = sort.Sort + +var lengthBufFundedAddressState = []byte{131} + +func (t *FundedAddressState) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufFundedAddressState); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Addr (address.Address) (struct) + if err := t.Addr.MarshalCBOR(w); err != nil { + return err + } + + // t.AmtReserved (big.Int) (struct) + if err := t.AmtReserved.MarshalCBOR(w); err != nil { + return err + } + + // t.MsgCid (cid.Cid) (struct) + + if t.MsgCid == nil { + if _, err := w.Write(cbg.CborNull); err != nil { + return err + } + } else { + if err := cbg.WriteCidBuf(scratch, w, *t.MsgCid); err != nil { + return xerrors.Errorf("failed to write cid field t.MsgCid: %w", err) + } + } + + return nil +} + +func (t *FundedAddressState) UnmarshalCBOR(r io.Reader) error { + *t = FundedAddressState{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Addr (address.Address) (struct) + + { + + if err := t.Addr.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Addr: %w", err) + } + + } + // t.AmtReserved (big.Int) (struct) + + { + + if err := t.AmtReserved.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.AmtReserved: %w", err) + } + + } + // t.MsgCid (cid.Cid) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.MsgCid: %w", err) + } + + t.MsgCid = &c + } + + } + return nil +} diff --git a/pkg/market/fmgr.go b/pkg/market/fmgr.go new file mode 100644 index 0000000000..61388bea22 --- /dev/null +++ b/pkg/market/fmgr.go @@ -0,0 +1,49 @@ +package market + +import ( + "context" + + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/ipfs/go-cid" +) + +// fundManagerAPI is the specific methods called by the FundManager +// (used by the tests) +type fundManager interface { + MpoolPushMessage(context.Context, *types.Message, *apitypes.MessageSendSpec) (*types.SignedMessage, error) + StateMarketBalance(context.Context, address.Address, types.TipSetKey) (apitypes.MarketBalance, error) + StateWaitMsg(ctx context.Context, c cid.Cid, confidence uint64, limit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) +} + +type fmgr struct { + MPoolAPI v1api.IMessagePool + ChainInfoAPI v1api.IChainInfo + MinerStateAPI v1api.IMinerState +} + +func newFundmanager(p *FundManagerParams) fundManager { + fmAPI := &fmgr{ + MPoolAPI: p.MP, + ChainInfoAPI: p.CI, + MinerStateAPI: p.MS, + } + + return fmAPI +} + +func (o *fmgr) MpoolPushMessage(ctx context.Context, msg *types.Message, spec *apitypes.MessageSendSpec) (*types.SignedMessage, error) { + return o.MPoolAPI.MpoolPushMessage(ctx, msg, spec) +} + +func (o *fmgr) StateMarketBalance(ctx context.Context, address address.Address, tsk types.TipSetKey) (apitypes.MarketBalance, error) { + return o.MinerStateAPI.StateMarketBalance(ctx, address, tsk) +} + +func (o *fmgr) StateWaitMsg(ctx context.Context, c cid.Cid, confidence uint64, limit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) { + return o.ChainInfoAPI.StateWaitMsg(ctx, c, confidence, limit, allowReplaced) +} diff --git a/pkg/market/fundmanager.go b/pkg/market/fundmanager.go new file mode 100644 index 0000000000..d026d4b804 --- /dev/null +++ b/pkg/market/fundmanager.go @@ -0,0 +1,714 @@ +package market + +import ( + "context" + "fmt" + "sync" + + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + logging "github.com/ipfs/go-log" + "golang.org/x/xerrors" +) + +var log = logging.Logger("market_adapter") + +type FundManagerParams struct { + MP v1api.IMessagePool + CI v1api.IChainInfo + MS v1api.IMinerState + DS repo.Datastore +} + +// FundManager keeps track of funds in a set of addresses +type FundManager struct { + ctx context.Context + shutdown context.CancelFunc + api fundManager + str *Store + + lk sync.Mutex + fundedAddrs map[address.Address]*fundedAddress +} + +func NewFundManager(p *FundManagerParams) *FundManager { + fmgrapi := newFundmanager(p) + ctx, cancel := context.WithCancel(context.Background()) + return &FundManager{ + ctx: ctx, + shutdown: cancel, + api: fmgrapi, + str: &Store{p.DS}, + fundedAddrs: make(map[address.Address]*fundedAddress), + } +} + +// newFundManager is used by the tests +func newFundManager(api fundManager, ds datastore.Batching) *FundManager { + ctx, cancel := context.WithCancel(context.Background()) + return &FundManager{ + ctx: ctx, + shutdown: cancel, + api: api, + str: newStore(ds), + fundedAddrs: make(map[address.Address]*fundedAddress), + } +} + +func (fm *FundManager) Stop() { + fm.shutdown() +} + +func (fm *FundManager) Start(ctx context.Context) error { + fm.lk.Lock() + defer fm.lk.Unlock() + + // TODO: + // To save memory: + // - in State() only load addresses with in-progress messages + // - load the others just-in-time from getFundedAddress + // - delete(fm.fundedAddrs, addr) when the queue has been processed + return fm.str.forEach(ctx, func(state *FundedAddressState) { + fa := newFundedAddress(fm, state.Addr) + fa.state = state + fm.fundedAddrs[fa.state.Addr] = fa + fa.start(ctx) + }) +} + +// Creates a fundedAddress if it doesn't already exist, and returns it +func (fm *FundManager) getFundedAddress(addr address.Address) *fundedAddress { + fm.lk.Lock() + defer fm.lk.Unlock() + + fa, ok := fm.fundedAddrs[addr] + if !ok { + fa = newFundedAddress(fm, addr) + fm.fundedAddrs[addr] = fa + } + return fa +} + +// Reserve adds amt to `reserved`. If there are not enough available funds for +// the address, submits a message on chain to top up available funds. +// Returns the cid of the message that was submitted on chain, or cid.Undef if +// the required funds were already available. +func (fm *FundManager) Reserve(ctx context.Context, wallet, addr address.Address, amt abi.TokenAmount) (cid.Cid, error) { + return fm.getFundedAddress(addr).reserve(ctx, wallet, amt) +} + +// Subtract from `reserved`. +func (fm *FundManager) Release(addr address.Address, amt abi.TokenAmount) error { + return fm.getFundedAddress(addr).release(amt) +} + +// Withdraw unreserved funds. Only succeeds if there are enough unreserved +// funds for the address. +// Returns the cid of the message that was submitted on chain. +func (fm *FundManager) Withdraw(ctx context.Context, wallet, addr address.Address, amt abi.TokenAmount) (cid.Cid, error) { + return fm.getFundedAddress(addr).withdraw(ctx, wallet, amt) +} + +// GetReserved returns the amount that is currently reserved for the address +func (fm *FundManager) GetReserved(addr address.Address) abi.TokenAmount { + return fm.getFundedAddress(addr).getReserved() +} + +// FundedAddressState keeps track of the state of an address with funds in the +// datastore +type FundedAddressState struct { + Addr address.Address + // AmtReserved is the amount that must be kept in the address (cannot be + // withdrawn) + AmtReserved abi.TokenAmount + // MsgCid is the cid of an in-progress on-chain message + MsgCid *cid.Cid +} + +// fundedAddress keeps track of the state and request queues for a +// particular address +type fundedAddress struct { + ctx context.Context + env *fundManagerEnvironment + str *Store + + lk sync.RWMutex + state *FundedAddressState + + // Note: These request queues are ephemeral, they are not saved to store + reservations []*fundRequest + releases []*fundRequest + withdrawals []*fundRequest + + // Used by the tests + onProcessStartListener func() bool +} + +func newFundedAddress(fm *FundManager, addr address.Address) *fundedAddress { + return &fundedAddress{ + ctx: fm.ctx, + env: &fundManagerEnvironment{api: fm.api}, + str: fm.str, + state: &FundedAddressState{ + Addr: addr, + AmtReserved: abi.NewTokenAmount(0), + }, + } +} + +// If there is an in-progress on-chain message, don't submit any more messages +// on chain until it completes +func (a *fundedAddress) start(ctx context.Context) { + a.lk.Lock() + defer a.lk.Unlock() + + if a.state.MsgCid != nil { + a.debugf("restart: wait for %s", a.state.MsgCid) + a.startWaitForResults(ctx, *a.state.MsgCid) + } +} + +func (a *fundedAddress) getReserved() abi.TokenAmount { + a.lk.RLock() + defer a.lk.RUnlock() + + return a.state.AmtReserved +} + +func (a *fundedAddress) reserve(ctx context.Context, wallet address.Address, amt abi.TokenAmount) (cid.Cid, error) { + return a.requestAndWait(ctx, wallet, amt, &a.reservations) +} + +func (a *fundedAddress) release(amt abi.TokenAmount) error { + _, err := a.requestAndWait(context.Background(), address.Undef, amt, &a.releases) + return err +} + +func (a *fundedAddress) withdraw(ctx context.Context, wallet address.Address, amt abi.TokenAmount) (cid.Cid, error) { + return a.requestAndWait(ctx, wallet, amt, &a.withdrawals) +} + +func (a *fundedAddress) requestAndWait(ctx context.Context, wallet address.Address, amt abi.TokenAmount, reqs *[]*fundRequest) (cid.Cid, error) { + // Create a request and add it to the request queue + req := newFundRequest(ctx, wallet, amt) + + a.lk.Lock() + *reqs = append(*reqs, req) + a.lk.Unlock() + + // Process the queue + go a.process(ctx) + + // Wait for the results + select { + case <-ctx.Done(): + return cid.Undef, ctx.Err() + case r := <-req.Result: + return r.msgCid, r.err + } +} + +// Used by the tests +func (a *fundedAddress) onProcessStart(fn func() bool) { + a.lk.Lock() + defer a.lk.Unlock() + + a.onProcessStartListener = fn +} + +// Process queued requests +func (a *fundedAddress) process(ctx context.Context) { + a.lk.Lock() + defer a.lk.Unlock() + + // Used by the tests + if a.onProcessStartListener != nil { + done := a.onProcessStartListener() + if !done { + return + } + a.onProcessStartListener = nil + } + + // Check if we're still waiting for the response to a message + if a.state.MsgCid != nil { + return + } + + // Check if there's anything to do + haveReservations := len(a.reservations) > 0 || len(a.releases) > 0 + haveWithdrawals := len(a.withdrawals) > 0 + if !haveReservations && !haveWithdrawals { + return + } + + // Process reservations / releases + if haveReservations { + res, err := a.processReservations(a.reservations, a.releases) + if err == nil { + a.applyStateChange(ctx, res.msgCid, res.amtReserved) + } + a.reservations = filterOutProcessedReqs(a.reservations) + a.releases = filterOutProcessedReqs(a.releases) + } + + // If there was no message sent on chain by adding reservations, and all + // reservations have completed processing, process withdrawals + if haveWithdrawals && a.state.MsgCid == nil && len(a.reservations) == 0 { + withdrawalCid, err := a.processWithdrawals(a.withdrawals) + if err == nil && withdrawalCid != cid.Undef { + a.applyStateChange(ctx, &withdrawalCid, types.EmptyInt) + } + a.withdrawals = filterOutProcessedReqs(a.withdrawals) + } + + // If a message was sent on-chain + if a.state.MsgCid != nil { + // Start waiting for results of message (async) + a.startWaitForResults(ctx, *a.state.MsgCid) + } + + // Process any remaining queued requests + go a.process(ctx) +} + +// Filter out completed requests +func filterOutProcessedReqs(reqs []*fundRequest) []*fundRequest { + filtered := make([]*fundRequest, 0, len(reqs)) + for _, req := range reqs { + if !req.Completed() { + filtered = append(filtered, req) + } + } + return filtered +} + +// Apply the results of processing queues and save to the datastore +func (a *fundedAddress) applyStateChange(ctx context.Context, msgCid *cid.Cid, amtReserved abi.TokenAmount) { + a.state.MsgCid = msgCid + if !amtReserved.Nil() { + a.state.AmtReserved = amtReserved + } + a.saveState(ctx) +} + +// Clear the pending message cid so that a new message can be sent +func (a *fundedAddress) clearWaitState(ctx context.Context) { + a.state.MsgCid = nil + a.saveState(ctx) +} + +// Save state to datastore +func (a *fundedAddress) saveState(ctx context.Context) { + // Not much we can do if saving to the datastore fails, just log + err := a.str.save(ctx, a.state) + if err != nil { + log.Errorf("saving state to store for addr %s: %w", a.state.Addr, err) + } +} + +// The result of processing the reservation / release queues +type processResult struct { + // Requests that completed without adding funds + covered []*fundRequest + // Requests that added funds + added []*fundRequest + + // The new reserved amount + amtReserved abi.TokenAmount + // The message cid, if a message was submitted on-chain + msgCid *cid.Cid +} + +// process reservations and releases, and return the resulting changes to state +func (a *fundedAddress) processReservations(reservations []*fundRequest, releases []*fundRequest) (pr *processResult, prerr error) { + // When the function returns + defer func() { + // If there's an error, mark all requests as errored + if prerr != nil { + for _, req := range append(reservations, releases...) { + req.Complete(cid.Undef, prerr) + } + return + } + + // Complete all release requests + for _, req := range releases { + req.Complete(cid.Undef, nil) + } + + // Complete all requests that were covered by released amounts + for _, req := range pr.covered { + req.Complete(cid.Undef, nil) + } + + // If a message was sent + if pr.msgCid != nil { + // Complete all add funds requests + for _, req := range pr.added { + req.Complete(*pr.msgCid, nil) + } + } + }() + + // Split reservations into those that are covered by released amounts, + // and those to add to the reserved amount. + // Note that we process requests from the same wallet in batches. So some + // requests may not be included in covered if they don't match the first + // covered request's wallet. These will be processed on a subsequent + // invocation of processReservations. + toCancel, toAdd, reservedDelta := splitReservations(reservations, releases) + + // Apply the reserved delta to the reserved amount + reserved := big.Add(a.state.AmtReserved, reservedDelta) + if reserved.LessThan(abi.NewTokenAmount(0)) { + reserved = abi.NewTokenAmount(0) + } + res := &processResult{ + amtReserved: reserved, + covered: toCancel, + } + + // Work out the amount to add to the balance + amtToAdd := abi.NewTokenAmount(0) + if len(toAdd) > 0 && reserved.GreaterThan(abi.NewTokenAmount(0)) { + // Get available funds for address + avail, err := a.env.AvailableFunds(a.ctx, a.state.Addr) + if err != nil { + return res, err + } + + // amount to add = new reserved amount - available + amtToAdd = big.Sub(reserved, avail) + a.debugf("reserved %d - avail %d = to add %d", reserved, avail, amtToAdd) + } + + // If there's nothing to add to the balance, bail out + if amtToAdd.LessThanEqual(abi.NewTokenAmount(0)) { + res.covered = append(res.covered, toAdd...) + return res, nil + } + + // Add funds to address + a.debugf("add funds %d", amtToAdd) + addFundsCid, err := a.env.AddFunds(a.ctx, toAdd[0].Wallet, a.state.Addr, amtToAdd) + if err != nil { + return res, err + } + + // Mark reservation requests as complete + res.added = toAdd + + // Save the message CID to state + res.msgCid = &addFundsCid + return res, nil +} + +// Split reservations into those that are under the total release amount +// (covered) and those that exceed it (to add). +// Note that we process requests from the same wallet in batches. So some +// requests may not be included in covered if they don't match the first +// covered request's wallet. +func splitReservations(reservations []*fundRequest, releases []*fundRequest) ([]*fundRequest, []*fundRequest, abi.TokenAmount) { + toCancel := make([]*fundRequest, 0, len(reservations)) + toAdd := make([]*fundRequest, 0, len(reservations)) + toAddAmt := abi.NewTokenAmount(0) + + // Sum release amounts + releaseAmt := abi.NewTokenAmount(0) + for _, req := range releases { + releaseAmt = big.Add(releaseAmt, req.Amount()) + } + + // We only want to combine requests that come from the same wallet + batchWallet := address.Undef + for _, req := range reservations { + amt := req.Amount() + + // If the amount to add to the reserve is cancelled out by a release + if amt.LessThanEqual(releaseAmt) { + // Cancel the request and update the release total + releaseAmt = big.Sub(releaseAmt, amt) + toCancel = append(toCancel, req) + continue + } + + // The amount to add is greater that the release total so we want + // to send an add funds request + + // The first time the wallet will be undefined + if batchWallet == address.Undef { + batchWallet = req.Wallet + } + // If this request's wallet is the same as the batch wallet, + // the requests will be combined + if batchWallet == req.Wallet { + delta := big.Sub(amt, releaseAmt) + toAddAmt = big.Add(toAddAmt, delta) + releaseAmt = abi.NewTokenAmount(0) + toAdd = append(toAdd, req) + } + } + + // The change in the reserved amount is "amount to add" - "amount to release" + reservedDelta := big.Sub(toAddAmt, releaseAmt) + + return toCancel, toAdd, reservedDelta +} + +// process withdrawal queue +func (a *fundedAddress) processWithdrawals(withdrawals []*fundRequest) (msgCid cid.Cid, prerr error) { + // If there's an error, mark all withdrawal requests as errored + defer func() { + if prerr != nil { + for _, req := range withdrawals { + req.Complete(cid.Undef, prerr) + } + } + }() + + // Get the net available balance + avail, err := a.env.AvailableFunds(a.ctx, a.state.Addr) + if err != nil { + return cid.Undef, err + } + + netAvail := big.Sub(avail, a.state.AmtReserved) + + // Fit as many withdrawals as possible into the available balance, and fail + // the rest + withdrawalAmt := abi.NewTokenAmount(0) + allowedAmt := abi.NewTokenAmount(0) + allowed := make([]*fundRequest, 0, len(withdrawals)) + var batchWallet address.Address + for _, req := range withdrawals { + amt := req.Amount() + if amt.IsZero() { + // If the context for the request was cancelled, bail out + req.Complete(cid.Undef, err) + continue + } + + // If the amount would exceed the available amount, complete the + // request with an error + newWithdrawalAmt := big.Add(withdrawalAmt, amt) + if newWithdrawalAmt.GreaterThan(netAvail) { + msg := fmt.Sprintf("insufficient funds for withdrawal of %s: ", types.FIL(amt)) + msg += fmt.Sprintf("net available (%s) = available (%s) - reserved (%s)", + types.FIL(big.Sub(netAvail, withdrawalAmt)), types.FIL(avail), types.FIL(a.state.AmtReserved)) + if !withdrawalAmt.IsZero() { + msg += fmt.Sprintf(" - queued withdrawals (%s)", types.FIL(withdrawalAmt)) + } + err := xerrors.Errorf(msg) + a.debugf("%s", err) + req.Complete(cid.Undef, err) + continue + } + + // If this is the first allowed withdrawal request in this batch, save + // its wallet address + if batchWallet == address.Undef { + batchWallet = req.Wallet + } + // If the request wallet doesn't match the batch wallet, bail out + // (the withdrawal will be processed after the current batch has + // completed) + if req.Wallet != batchWallet { + continue + } + + // Include this withdrawal request in the batch + withdrawalAmt = newWithdrawalAmt + a.debugf("withdraw %d", amt) + allowed = append(allowed, req) + allowedAmt = big.Add(allowedAmt, amt) + } + + // Check if there is anything to withdraw. + // Note that if the context for a request is cancelled, + // req.Amount() returns zero + if allowedAmt.Equals(abi.NewTokenAmount(0)) { + // Mark allowed requests as complete + for _, req := range allowed { + req.Complete(cid.Undef, nil) + } + return cid.Undef, nil + } + + // Withdraw funds + a.debugf("withdraw funds %d", allowedAmt) + withdrawFundsCid, err := a.env.WithdrawFunds(a.ctx, allowed[0].Wallet, a.state.Addr, allowedAmt) + if err != nil { + return cid.Undef, err + } + + // Mark allowed requests as complete + for _, req := range allowed { + req.Complete(withdrawFundsCid, nil) + } + + // Save the message CID to state + return withdrawFundsCid, nil +} + +// asynchonously wait for results of message +func (a *fundedAddress) startWaitForResults(ctx context.Context, msgCid cid.Cid) { + go func() { + err := a.env.WaitMsg(a.ctx, msgCid) + if err != nil { + // We don't really care about the results here, we're just waiting + // so as to only process one on-chain message at a time + log.Errorf("waiting for results of message %s for addr %s: %w", msgCid, a.state.Addr, err) + } + + a.lk.Lock() + a.debugf("complete wait") + a.clearWaitState(ctx) + a.lk.Unlock() + + a.process(ctx) + }() +} + +func (a *fundedAddress) debugf(args ...interface{}) { + fmtStr := args[0].(string) + args = args[1:] + log.Debugf(a.state.Addr.String()+": "+fmtStr, args...) +} + +// The result of a fund request +type reqResult struct { + msgCid cid.Cid + err error +} + +// A request to change funds +type fundRequest struct { + ctx context.Context + amt abi.TokenAmount + completed chan struct{} + Wallet address.Address + Result chan reqResult +} + +func newFundRequest(ctx context.Context, wallet address.Address, amt abi.TokenAmount) *fundRequest { + return &fundRequest{ + ctx: ctx, + amt: amt, + Wallet: wallet, + Result: make(chan reqResult), + completed: make(chan struct{}), + } +} + +// Amount returns zero if the context has expired +func (frp *fundRequest) Amount() abi.TokenAmount { + if frp.ctx.Err() != nil { + return abi.NewTokenAmount(0) + } + return frp.amt +} + +// Complete is called with the message CID when the funds request has been +// started or with the error if there was an error +func (frp *fundRequest) Complete(msgCid cid.Cid, err error) { + select { + case <-frp.completed: + case <-frp.ctx.Done(): + case frp.Result <- reqResult{msgCid: msgCid, err: err}: + } + close(frp.completed) +} + +// Completed indicates if Complete has already been called +func (frp *fundRequest) Completed() bool { + select { + case <-frp.completed: + return true + default: + return false + } +} + +// fundManagerEnvironment simplifies some API calls +type fundManagerEnvironment struct { + api fundManager +} + +func (env *fundManagerEnvironment) AvailableFunds(ctx context.Context, addr address.Address) (abi.TokenAmount, error) { + bal, err := env.api.StateMarketBalance(ctx, addr, types.EmptyTSK) + if err != nil { + return abi.NewTokenAmount(0), err + } + + return big.Sub(bal.Escrow, bal.Locked), nil +} + +func (env *fundManagerEnvironment) AddFunds( + ctx context.Context, + wallet address.Address, + addr address.Address, + amt abi.TokenAmount, +) (cid.Cid, error) { + params, err := actors.SerializeParams(&addr) + if err != nil { + return cid.Undef, err + } + + smsg, aerr := env.api.MpoolPushMessage(ctx, &types.Message{ + To: market.Address, + From: wallet, + Value: amt, + Method: market.Methods.AddBalance, + Params: params, + }, nil) + + if aerr != nil { + return cid.Undef, aerr + } + return smsg.Cid(), nil +} + +func (env *fundManagerEnvironment) WithdrawFunds( + ctx context.Context, + wallet address.Address, + addr address.Address, + amt abi.TokenAmount, +) (cid.Cid, error) { + params, err := actors.SerializeParams(&market.WithdrawBalanceParams{ + ProviderOrClientAddress: addr, + Amount: amt, + }) + if err != nil { + return cid.Undef, xerrors.Errorf("serializing params: %w", err) + } + + smsg, aerr := env.api.MpoolPushMessage(ctx, &types.Message{ + To: market.Address, + From: wallet, + Value: big.NewInt(0), + Method: market.Methods.WithdrawBalance, + Params: params, + }, nil) + + if aerr != nil { + return cid.Undef, aerr + } + return smsg.Cid(), nil +} + +func (env *fundManagerEnvironment) WaitMsg(ctx context.Context, c cid.Cid) error { + _, err := env.api.StateWaitMsg(ctx, c, constants.MessageConfidence, constants.LookbackNoLimit, true) + return err +} diff --git a/pkg/market/fundmanager_test.go b/pkg/market/fundmanager_test.go new file mode 100644 index 0000000000..71d53f96f8 --- /dev/null +++ b/pkg/market/fundmanager_test.go @@ -0,0 +1,840 @@ +package market + +import ( + "bytes" + "context" + "sync" + "testing" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + ds_sync "github.com/ipfs/go-datastore/sync" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + + tutils "github.com/filecoin-project/specs-actors/v6/support/testing" + + "github.com/filecoin-project/venus/pkg/config" + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/wallet" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// TestFundManagerBasic verifies that the basic fund manager operations work +func TestFundManagerBasic(t *testing.T) { + tf.UnitTest(t) + s := setup(t) + defer s.fm.Stop() + + // Reserve 10 + // balance: 0 -> 10 + // reserved: 0 -> 10 + amt := abi.NewTokenAmount(10) + sentinel, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + + msg := s.mockAPI.getSentMessage(sentinel) + checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, amt) + + s.mockAPI.completeMsg(sentinel) + + // Reserve 7 + // balance: 10 -> 17 + // reserved: 10 -> 17 + amt = abi.NewTokenAmount(7) + sentinel, err = s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + + msg = s.mockAPI.getSentMessage(sentinel) + checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, amt) + + s.mockAPI.completeMsg(sentinel) + + // Release 5 + // balance: 17 + // reserved: 17 -> 12 + amt = abi.NewTokenAmount(5) + err = s.fm.Release(s.acctAddr, amt) + require.NoError(t, err) + + // Withdraw 2 + // balance: 17 -> 15 + // reserved: 12 + amt = abi.NewTokenAmount(2) + sentinel, err = s.fm.Withdraw(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + + msg = s.mockAPI.getSentMessage(sentinel) + checkWithdrawMessageFields(t, msg, s.walletAddr, s.acctAddr, amt) + + s.mockAPI.completeMsg(sentinel) + + // Reserve 3 + // balance: 15 + // reserved: 12 -> 15 + // Note: reserved (15) is <= balance (15) so should not send on-chain + // message + msgCount := s.mockAPI.messageCount() + amt = abi.NewTokenAmount(3) + sentinel, err = s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + require.Equal(t, msgCount, s.mockAPI.messageCount()) + require.Equal(t, sentinel, cid.Undef) + + // Reserve 1 + // balance: 15 -> 16 + // reserved: 15 -> 16 + // Note: reserved (16) is above balance (15) so *should* send on-chain + // message to top up balance + amt = abi.NewTokenAmount(1) + topUp := abi.NewTokenAmount(1) + sentinel, err = s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + + s.mockAPI.completeMsg(sentinel) + msg = s.mockAPI.getSentMessage(sentinel) + checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, topUp) + + // Withdraw 1 + // balance: 16 + // reserved: 16 + // Note: Expect failure because there is no available balance to withdraw: + // balance - reserved = 16 - 16 = 0 + amt = abi.NewTokenAmount(1) + sentinel, err = s.fm.Withdraw(s.ctx, s.walletAddr, s.acctAddr, amt) + require.Error(t, err) +} + +// TestFundManagerParallel verifies that operations can be run in parallel +func TestFundManagerParallel(t *testing.T) { + tf.UnitTest(t) + s := setup(t) + defer s.fm.Stop() + + // Reserve 10 + amt := abi.NewTokenAmount(10) + sentinelReserve10, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + + // Wait until all the subsequent requests are queued up + queueReady := make(chan struct{}) + fa := s.fm.getFundedAddress(s.acctAddr) + fa.onProcessStart(func() bool { + if len(fa.withdrawals) == 1 && len(fa.reservations) == 2 && len(fa.releases) == 1 { + close(queueReady) + return true + } + return false + }) + + // Withdraw 5 (should not run until after reserves / releases) + withdrawReady := make(chan error) + go func() { + amt = abi.NewTokenAmount(5) + _, err := s.fm.Withdraw(s.ctx, s.walletAddr, s.acctAddr, amt) + withdrawReady <- err + }() + + reserveSentinels := make(chan cid.Cid) + + // Reserve 3 + go func() { + amt := abi.NewTokenAmount(3) + sentinelReserve3, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + reserveSentinels <- sentinelReserve3 + }() + + // Reserve 5 + go func() { + amt := abi.NewTokenAmount(5) + sentinelReserve5, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + reserveSentinels <- sentinelReserve5 + }() + + // Release 2 + go func() { + amt := abi.NewTokenAmount(2) + err = s.fm.Release(s.acctAddr, amt) + require.NoError(t, err) + }() + + // Everything is queued up + <-queueReady + + // Complete the "Reserve 10" message + s.mockAPI.completeMsg(sentinelReserve10) + msg := s.mockAPI.getSentMessage(sentinelReserve10) + checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, abi.NewTokenAmount(10)) + + // The other requests should now be combined and be submitted on-chain as + // a single message + rs1 := <-reserveSentinels + rs2 := <-reserveSentinels + require.Equal(t, rs1, rs2) + + // Withdraw should not have been called yet, because reserve / release + // requests run first + select { + case <-withdrawReady: + require.Fail(t, "Withdraw should run after reserve / release") + default: + } + + // Complete the message + s.mockAPI.completeMsg(rs1) + msg = s.mockAPI.getSentMessage(rs1) + + // "Reserve 3" +3 + // "Reserve 5" +5 + // "Release 2" -2 + // Result: 6 + checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, abi.NewTokenAmount(6)) + + // Expect withdraw to fail because not enough available funds + err = <-withdrawReady + require.Error(t, err) +} + +// TestFundManagerReserveByWallet verifies that reserve requests are grouped by wallet +func TestFundManagerReserveByWallet(t *testing.T) { + tf.UnitTest(t) + s := setup(t) + defer s.fm.Stop() + + ctx := context.Background() + walletAddrA, err := s.wllt.NewAddress(ctx, address.SECP256K1) + require.NoError(t, err) + walletAddrB, err := s.wllt.NewAddress(ctx, address.SECP256K1) + require.NoError(t, err) + + // Wait until all the reservation requests are queued up + walletAQueuedUp := make(chan struct{}) + queueReady := make(chan struct{}) + fa := s.fm.getFundedAddress(s.acctAddr) + fa.onProcessStart(func() bool { + if len(fa.reservations) == 1 { + close(walletAQueuedUp) + } + if len(fa.reservations) == 3 { + close(queueReady) + return true + } + return false + }) + + type reserveResult struct { + ws cid.Cid + err error + } + results := make(chan *reserveResult) + + amtA1 := abi.NewTokenAmount(1) + go func() { + // Wallet A: Reserve 1 + sentinelA1, err := s.fm.Reserve(s.ctx, walletAddrA, s.acctAddr, amtA1) + results <- &reserveResult{ + ws: sentinelA1, + err: err, + } + }() + + amtB1 := abi.NewTokenAmount(2) + amtB2 := abi.NewTokenAmount(3) + go func() { + // Wait for reservation for wallet A to be queued up + <-walletAQueuedUp + + // Wallet B: Reserve 2 + go func() { + sentinelB1, err := s.fm.Reserve(s.ctx, walletAddrB, s.acctAddr, amtB1) + results <- &reserveResult{ + ws: sentinelB1, + err: err, + } + }() + + // Wallet B: Reserve 3 + sentinelB2, err := s.fm.Reserve(s.ctx, walletAddrB, s.acctAddr, amtB2) + results <- &reserveResult{ + ws: sentinelB2, + err: err, + } + }() + + // All reservation requests are queued up + <-queueReady + + resA := <-results + sentinelA1 := resA.ws + + // Should send to wallet A + msg := s.mockAPI.getSentMessage(sentinelA1) + checkAddMessageFields(t, msg, walletAddrA, s.acctAddr, amtA1) + + // Complete wallet A message + s.mockAPI.completeMsg(sentinelA1) + + resB1 := <-results + resB2 := <-results + require.NoError(t, resB1.err) + require.NoError(t, resB2.err) + sentinelB1 := resB1.ws + sentinelB2 := resB2.ws + + // Should send different message to wallet B + require.NotEqual(t, sentinelA1, sentinelB1) + // Should be single message combining amount 1 and 2 + require.Equal(t, sentinelB1, sentinelB2) + msg = s.mockAPI.getSentMessage(sentinelB1) + checkAddMessageFields(t, msg, walletAddrB, s.acctAddr, big.Add(amtB1, amtB2)) +} + +// TestFundManagerWithdrawal verifies that as many withdraw operations as +// possible are processed +func TestFundManagerWithdrawalLimit(t *testing.T) { + tf.UnitTest(t) + s := setup(t) + defer s.fm.Stop() + + // Reserve 10 + amt := abi.NewTokenAmount(10) + sentinelReserve10, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + + // Complete the "Reserve 10" message + s.mockAPI.completeMsg(sentinelReserve10) + + // Release 10 + err = s.fm.Release(s.acctAddr, amt) + require.NoError(t, err) + + // Queue up withdraw requests + queueReady := make(chan struct{}) + fa := s.fm.getFundedAddress(s.acctAddr) + withdrawalReqTotal := 3 + withdrawalReqEnqueued := 0 + withdrawalReqQueue := make(chan func(), withdrawalReqTotal) + fa.onProcessStart(func() bool { + // If a new withdrawal request was enqueued + if len(fa.withdrawals) > withdrawalReqEnqueued { + withdrawalReqEnqueued++ + + // Pop the next request and run it + select { + case fn := <-withdrawalReqQueue: + go fn() + default: + } + } + // Once all the requests have arrived, we're ready to process the queue + if withdrawalReqEnqueued == withdrawalReqTotal { + close(queueReady) + return true + } + return false + }) + + type withdrawResult struct { + reqIndex int + ws cid.Cid + err error + } + withdrawRes := make(chan *withdrawResult) + + // Queue up three "Withdraw 5" requests + enqueuedCount := 0 + for i := 0; i < withdrawalReqTotal; i++ { + withdrawalReqQueue <- func() { + idx := enqueuedCount + enqueuedCount++ + + amt := abi.NewTokenAmount(5) + ws, err := s.fm.Withdraw(s.ctx, s.walletAddr, s.acctAddr, amt) + withdrawRes <- &withdrawResult{reqIndex: idx, ws: ws, err: err} + } + } + // Start the first request + fn := <-withdrawalReqQueue + go fn() + + // All withdrawal requests are queued up and ready to be processed + <-queueReady + + // Organize results in request order + results := make([]*withdrawResult, withdrawalReqTotal) + for i := 0; i < 3; i++ { + res := <-withdrawRes + results[res.reqIndex] = res + } + + // Available 10 + // Withdraw 5 + // Expect Success + require.NoError(t, results[0].err) + // Available 5 + // Withdraw 5 + // Expect Success + require.NoError(t, results[1].err) + // Available 0 + // Withdraw 5 + // Expect FAIL + require.Error(t, results[2].err) + + // Expect withdrawal requests that fit under reserved amount to be combined + // into a single message on-chain + require.Equal(t, results[0].ws, results[1].ws) +} + +// TestFundManagerWithdrawByWallet verifies that withdraw requests are grouped by wallet +func TestFundManagerWithdrawByWallet(t *testing.T) { + tf.UnitTest(t) + s := setup(t) + defer s.fm.Stop() + + ctx := context.Background() + walletAddrA, err := s.wllt.NewAddress(ctx, address.SECP256K1) + require.NoError(t, err) + walletAddrB, err := s.wllt.NewAddress(ctx, address.SECP256K1) + require.NoError(t, err) + + // Reserve 10 + reserveAmt := abi.NewTokenAmount(10) + sentinelReserve, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, reserveAmt) + require.NoError(t, err) + s.mockAPI.completeMsg(sentinelReserve) + + time.Sleep(10 * time.Millisecond) + + // Release 10 + err = s.fm.Release(s.acctAddr, reserveAmt) + require.NoError(t, err) + + type withdrawResult struct { + ws cid.Cid + err error + } + results := make(chan *withdrawResult) + + // Wait until withdrawals are queued up + walletAQueuedUp := make(chan struct{}) + queueReady := make(chan struct{}) + withdrawalCount := 0 + fa := s.fm.getFundedAddress(s.acctAddr) + fa.onProcessStart(func() bool { + if len(fa.withdrawals) == withdrawalCount { + return false + } + withdrawalCount = len(fa.withdrawals) + + if withdrawalCount == 1 { + close(walletAQueuedUp) + } else if withdrawalCount == 3 { + close(queueReady) + return true + } + return false + }) + + amtA1 := abi.NewTokenAmount(1) + go func() { + // Wallet A: Withdraw 1 + sentinelA1, err := s.fm.Withdraw(s.ctx, walletAddrA, s.acctAddr, amtA1) + results <- &withdrawResult{ + ws: sentinelA1, + err: err, + } + }() + + amtB1 := abi.NewTokenAmount(2) + amtB2 := abi.NewTokenAmount(3) + go func() { + // Wait until withdraw for wallet A is queued up + <-walletAQueuedUp + + // Wallet B: Withdraw 2 + go func() { + sentinelB1, err := s.fm.Withdraw(s.ctx, walletAddrB, s.acctAddr, amtB1) + results <- &withdrawResult{ + ws: sentinelB1, + err: err, + } + }() + + // Wallet B: Withdraw 3 + sentinelB2, err := s.fm.Withdraw(s.ctx, walletAddrB, s.acctAddr, amtB2) + results <- &withdrawResult{ + ws: sentinelB2, + err: err, + } + }() + + // Withdrawals are queued up + <-queueReady + + // Should withdraw from wallet A first + resA1 := <-results + sentinelA1 := resA1.ws + msg := s.mockAPI.getSentMessage(sentinelA1) + checkWithdrawMessageFields(t, msg, walletAddrA, s.acctAddr, amtA1) + + // Complete wallet A message + s.mockAPI.completeMsg(sentinelA1) + + resB1 := <-results + resB2 := <-results + require.NoError(t, resB1.err) + require.NoError(t, resB2.err) + sentinelB1 := resB1.ws + sentinelB2 := resB2.ws + + // Should send different message for wallet B from wallet A + require.NotEqual(t, sentinelA1, sentinelB1) + // Should be single message combining amount 1 and 2 + require.Equal(t, sentinelB1, sentinelB2) + msg = s.mockAPI.getSentMessage(sentinelB1) + checkWithdrawMessageFields(t, msg, walletAddrB, s.acctAddr, big.Add(amtB1, amtB2)) +} + +// TestFundManagerRestart verifies that waiting for incomplete requests resumes +// on restart +func TestFundManagerRestart(t *testing.T) { + tf.UnitTest(t) + s := setup(t) + defer s.fm.Stop() + + ctx := context.Background() + + acctAddr2 := tutils.NewActorAddr(t, "addr2") + + // Address 1: Reserve 10 + amt := abi.NewTokenAmount(10) + sentinelAddr1, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + + msg := s.mockAPI.getSentMessage(sentinelAddr1) + checkAddMessageFields(t, msg, s.walletAddr, s.acctAddr, amt) + + // Address 2: Reserve 7 + amt2 := abi.NewTokenAmount(7) + sentinelAddr2Res7, err := s.fm.Reserve(s.ctx, s.walletAddr, acctAddr2, amt2) + require.NoError(t, err) + + msg2 := s.mockAPI.getSentMessage(sentinelAddr2Res7) + checkAddMessageFields(t, msg2, s.walletAddr, acctAddr2, amt2) + + // Complete "Address 1: Reserve 10" + s.mockAPI.completeMsg(sentinelAddr1) + + // Give the completed state a moment to be stored before restart + time.Sleep(time.Millisecond * 10) + + // Restart + mockAPIAfter := s.mockAPI + fmAfter := newFundManager(mockAPIAfter, s.ds) + err = fmAfter.Start(ctx) + require.NoError(t, err) + + amt3 := abi.NewTokenAmount(9) + reserveSentinel := make(chan cid.Cid) + go func() { + // Address 2: Reserve 9 + sentinel3, err := fmAfter.Reserve(s.ctx, s.walletAddr, acctAddr2, amt3) + require.NoError(t, err) + reserveSentinel <- sentinel3 + }() + + // Expect no message to be sent, because still waiting for previous + // message "Address 2: Reserve 7" to complete on-chain + select { + case <-reserveSentinel: + require.Fail(t, "Expected no message to be sent") + case <-time.After(10 * time.Millisecond): + } + + // Complete "Address 2: Reserve 7" + mockAPIAfter.completeMsg(sentinelAddr2Res7) + + // Expect waiting message to now be sent + sentinel3 := <-reserveSentinel + msg3 := mockAPIAfter.getSentMessage(sentinel3) + checkAddMessageFields(t, msg3, s.walletAddr, acctAddr2, amt3) +} + +// TestFundManagerReleaseAfterPublish verifies that release is successful in +// the following scenario: +// 1. Deal A adds 5 to addr1: reserved 0 -> 5 available 0 -> 5 +// 2. Deal B adds 7 to addr1: reserved 5 -> 12 available 5 -> 12 +// 3. Deal B completes, reducing addr1 by 7: reserved 12 available 12 -> 5 +// 4. Deal A releases 5 from addr1: reserved 12 -> 7 available 5 +func TestFundManagerReleaseAfterPublish(t *testing.T) { + tf.UnitTest(t) + s := setup(t) + defer s.fm.Stop() + + // Deal A: Reserve 5 + // balance: 0 -> 5 + // reserved: 0 -> 5 + amt := abi.NewTokenAmount(5) + sentinel, err := s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + s.mockAPI.completeMsg(sentinel) + + // Deal B: Reserve 7 + // balance: 5 -> 12 + // reserved: 5 -> 12 + amt = abi.NewTokenAmount(7) + sentinel, err = s.fm.Reserve(s.ctx, s.walletAddr, s.acctAddr, amt) + require.NoError(t, err) + s.mockAPI.completeMsg(sentinel) + + // Deal B: Publish (removes Deal B amount from balance) + // balance: 12 -> 5 + // reserved: 12 + amt = abi.NewTokenAmount(7) + s.mockAPI.publish(s.acctAddr, amt) + + // Deal A: Release 5 + // balance: 5 + // reserved: 12 -> 7 + amt = abi.NewTokenAmount(5) + err = s.fm.Release(s.acctAddr, amt) + require.NoError(t, err) + + // Deal B: Release 7 + // balance: 5 + // reserved: 12 -> 7 + amt = abi.NewTokenAmount(5) + err = s.fm.Release(s.acctAddr, amt) + require.NoError(t, err) +} + +type scaffold struct { + ctx context.Context + ds *ds_sync.MutexDatastore + wllt *wallet.Wallet + walletAddr address.Address + acctAddr address.Address + mockAPI *mockFundManagerAPI + fm *FundManager +} + +func setup(t *testing.T) *scaffold { + ctx := context.Background() + t.Log("create a backend") + ds := datastore.NewMapDatastore() + fs, err := wallet.NewDSBackend(ctx, ds, config.TestPassphraseConfig(), wallet.TestPassword) + assert.NoError(t, err) + t.Log("create a wallet with a single backend") + wllt := wallet.New(fs) + walletAddr, err := wllt.NewAddress(ctx, address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + acctAddr := tutils.NewActorAddr(t, "addr") + mockAPI := newMockFundManagerAPI(walletAddr) + dstore := ds_sync.MutexWrap(ds) + fm := newFundManager(mockAPI, dstore) + return &scaffold{ + ctx: ctx, + ds: dstore, + wllt: wllt, + walletAddr: walletAddr, + acctAddr: acctAddr, + mockAPI: mockAPI, + fm: fm, + } +} + +func checkAddMessageFields(t *testing.T, msg *types.Message, from address.Address, to address.Address, amt abi.TokenAmount) { + require.Equal(t, from, msg.From) + require.Equal(t, market.Address, msg.To) + require.Equal(t, amt, msg.Value) + + var paramsTo address.Address + err := paramsTo.UnmarshalCBOR(bytes.NewReader(msg.Params)) + require.NoError(t, err) + require.Equal(t, to, paramsTo) +} + +func checkWithdrawMessageFields(t *testing.T, msg *types.Message, from address.Address, addr address.Address, amt abi.TokenAmount) { + require.Equal(t, from, msg.From) + require.Equal(t, market.Address, msg.To) + require.Equal(t, abi.NewTokenAmount(0), msg.Value) + + var params market.WithdrawBalanceParams + err := params.UnmarshalCBOR(bytes.NewReader(msg.Params)) + require.NoError(t, err) + require.Equal(t, addr, params.ProviderOrClientAddress) + require.Equal(t, amt, params.Amount) +} + +type sentMsg struct { + msg *types.SignedMessage + ready chan struct{} +} + +type mockFundManagerAPI struct { + wallet address.Address + + lk sync.Mutex + escrow map[address.Address]abi.TokenAmount + sentMsgs map[cid.Cid]*sentMsg + completedMsgs map[cid.Cid]struct{} + waitingFor map[cid.Cid]chan struct{} +} + +func newMockFundManagerAPI(wallet address.Address) *mockFundManagerAPI { + return &mockFundManagerAPI{ + wallet: wallet, + escrow: make(map[address.Address]abi.TokenAmount), + sentMsgs: make(map[cid.Cid]*sentMsg), + completedMsgs: make(map[cid.Cid]struct{}), + waitingFor: make(map[cid.Cid]chan struct{}), + } +} + +func (mapi *mockFundManagerAPI) MpoolPushMessage(ctx context.Context, msg *types.Message, spec *apitypes.MessageSendSpec) (*types.SignedMessage, error) { + mapi.lk.Lock() + defer mapi.lk.Unlock() + + smsg := &types.SignedMessage{Message: *msg} + smsgCid := smsg.Cid() + mapi.sentMsgs[smsgCid] = &sentMsg{msg: smsg, ready: make(chan struct{})} + + return smsg, nil +} + +func (mapi *mockFundManagerAPI) getSentMessage(c cid.Cid) *types.Message { + mapi.lk.Lock() + defer mapi.lk.Unlock() + + for i := 0; i < 1000; i++ { + if pending, ok := mapi.sentMsgs[c]; ok { + return &pending.msg.Message + } + time.Sleep(time.Millisecond) + } + panic("expected message to be sent") +} + +func (mapi *mockFundManagerAPI) messageCount() int { + mapi.lk.Lock() + defer mapi.lk.Unlock() + + return len(mapi.sentMsgs) +} + +func (mapi *mockFundManagerAPI) completeMsg(msgCid cid.Cid) { + mapi.lk.Lock() + + pmsg, ok := mapi.sentMsgs[msgCid] + if ok { + if pmsg.msg.Message.Method == market.Methods.AddBalance { + var escrowAcct address.Address + err := escrowAcct.UnmarshalCBOR(bytes.NewReader(pmsg.msg.Message.Params)) + if err != nil { + panic(err) + } + + escrow := mapi.getEscrow(escrowAcct) + before := escrow + escrow = big.Add(escrow, pmsg.msg.Message.Value) + mapi.escrow[escrowAcct] = escrow + log.Debugf("%s: escrow %d -> %d", escrowAcct, before, escrow) + } else { + var params market.WithdrawBalanceParams + err := params.UnmarshalCBOR(bytes.NewReader(pmsg.msg.Message.Params)) + if err != nil { + panic(err) + } + escrowAcct := params.ProviderOrClientAddress + + escrow := mapi.getEscrow(escrowAcct) + before := escrow + escrow = big.Sub(escrow, params.Amount) + mapi.escrow[escrowAcct] = escrow + log.Debugf("%s: escrow %d -> %d", escrowAcct, before, escrow) + } + } + + mapi.completedMsgs[msgCid] = struct{}{} + + ready, ok := mapi.waitingFor[msgCid] + + mapi.lk.Unlock() + + if ok { + close(ready) + } +} + +func (mapi *mockFundManagerAPI) StateMarketBalance(ctx context.Context, address address.Address, tsk types.TipSetKey) (apitypes.MarketBalance, error) { + mapi.lk.Lock() + defer mapi.lk.Unlock() + + return apitypes.MarketBalance{ + Locked: abi.NewTokenAmount(0), + Escrow: mapi.getEscrow(address), + }, nil +} + +func (mapi *mockFundManagerAPI) getEscrow(a address.Address) abi.TokenAmount { + escrow := mapi.escrow[a] + if escrow.Nil() { + return abi.NewTokenAmount(0) + } + return escrow +} + +func (mapi *mockFundManagerAPI) publish(addr address.Address, amt abi.TokenAmount) { + mapi.lk.Lock() + defer mapi.lk.Unlock() + + escrow := mapi.escrow[addr] + if escrow.Nil() { + return + } + escrow = big.Sub(escrow, amt) + if escrow.LessThan(abi.NewTokenAmount(0)) { + escrow = abi.NewTokenAmount(0) + } + mapi.escrow[addr] = escrow +} + +func (mapi *mockFundManagerAPI) StateWaitMsg(ctx context.Context, c cid.Cid, confidence uint64, limit abi.ChainEpoch, allwoReplaced bool) (*apitypes.MsgLookup, error) { + res := &apitypes.MsgLookup{ + Message: c, + Receipt: types.MessageReceipt{ + ExitCode: 0, + Return: nil, + }, + } + ready := make(chan struct{}) + + mapi.lk.Lock() + _, ok := mapi.completedMsgs[c] + if !ok { + mapi.waitingFor[c] = ready + } + mapi.lk.Unlock() + + if !ok { + select { + case <-ctx.Done(): + case <-ready: + } + } + return res, nil +} diff --git a/pkg/market/store.go b/pkg/market/store.go new file mode 100644 index 0000000000..16a37c60e0 --- /dev/null +++ b/pkg/market/store.go @@ -0,0 +1,93 @@ +package market + +import ( + "bytes" + "context" + + "github.com/filecoin-project/venus/pkg/repo" + + cborrpc "github.com/filecoin-project/go-cbor-util" + "github.com/ipfs/go-datastore" + "github.com/ipfs/go-datastore/namespace" + dsq "github.com/ipfs/go-datastore/query" + + "github.com/filecoin-project/go-address" +) + +const dsKeyAddr = "Addr" + +type Store struct { + ds datastore.Batching +} + +// for test +func newStore(ds repo.Datastore) *Store { + ds = namespace.Wrap(ds, datastore.NewKey("/fundmgr/")) + return &Store{ + ds: ds, + } +} + +// save the state to the datastore +func (ps *Store) save(ctx context.Context, state *FundedAddressState) error { + k := dskeyForAddr(state.Addr) + + b, err := cborrpc.Dump(state) + if err != nil { + return err + } + + return ps.ds.Put(ctx, k, b) +} + +// get the state for the given address +// nolint +func (ps *Store) get(ctx context.Context, addr address.Address) (*FundedAddressState, error) { + k := dskeyForAddr(addr) + + data, err := ps.ds.Get(ctx, k) + if err != nil { + return nil, err + } + + var state FundedAddressState + err = cborrpc.ReadCborRPC(bytes.NewReader(data), &state) + if err != nil { + return nil, err + } + return &state, nil +} + +// forEach calls iter with each address in the datastore +func (ps *Store) forEach(ctx context.Context, iter func(*FundedAddressState)) error { + res, err := ps.ds.Query(ctx, dsq.Query{Prefix: dsKeyAddr}) + if err != nil { + return err + } + defer res.Close() //nolint:errcheck + + for { + res, ok := res.NextSync() + if !ok { + break + } + + if res.Error != nil { + return err + } + + var stored FundedAddressState + if err := stored.UnmarshalCBOR(bytes.NewReader(res.Value)); err != nil { + return err + } + + iter(&stored) + } + + return nil +} + +// The datastore key used to identify the address state +func dskeyForAddr(addr address.Address) datastore.Key { + return datastore.KeyWithNamespaces([]string{dsKeyAddr, addr.String()}) +} diff --git a/pkg/messagepool/block_proba.go b/pkg/messagepool/block_proba.go new file mode 100644 index 0000000000..61bb018d7d --- /dev/null +++ b/pkg/messagepool/block_proba.go @@ -0,0 +1,102 @@ +package messagepool + +import ( + "math" + "sync" +) + +var noWinnersProbCache []float64 +var noWinnersProbOnce sync.Once + +func noWinnersProb() []float64 { + noWinnersProbOnce.Do(func() { + poissPdf := func(x float64) float64 { + const Mu = 5 + lg, _ := math.Lgamma(x + 1) + result := math.Exp((math.Log(Mu) * x) - lg - Mu) + return result + } + + out := make([]float64, 0, MaxBlocks) + for i := 0; i < MaxBlocks; i++ { + out = append(out, poissPdf(float64(i))) + } + noWinnersProbCache = out + }) + return noWinnersProbCache +} + +var noWinnersProbAssumingCache []float64 +var noWinnersProbAssumingOnce sync.Once + +func noWinnersProbAssumingMoreThanOne() []float64 { + noWinnersProbAssumingOnce.Do(func() { + cond := math.Log(-1 + math.Exp(5)) + poissPdf := func(x float64) float64 { + const Mu = 5 + lg, _ := math.Lgamma(x + 1) + result := math.Exp((math.Log(Mu) * x) - lg - cond) + return result + } + + out := make([]float64, 0, MaxBlocks) + for i := 0; i < MaxBlocks; i++ { + out = append(out, poissPdf(float64(i+1))) + } + noWinnersProbAssumingCache = out + }) + return noWinnersProbAssumingCache +} + +func binomialCoefficient(n, k float64) float64 { + if k > n { + return math.NaN() + } + r := 1.0 + for d := 1.0; d <= k; d++ { + r *= n + r /= d + n-- + } + return r +} + +func (mp *MessagePool) blockProbabilities(tq float64) []float64 { + noWinners := noWinnersProbAssumingMoreThanOne() + + p := 1 - tq + binoPdf := func(x, trials float64) float64 { + // based on https://github.com/atgjack/prob + if x > trials { + return 0 + } + if p == 0 { + if x == 0 { + return 1.0 + } + return 0.0 + } + if p == 1 { + if x == trials { + return 1.0 + } + return 0.0 + } + coef := binomialCoefficient(trials, x) + pow := math.Pow(p, x) * math.Pow(1-p, trials-x) + if math.IsInf(coef, 0) { + return 0 + } + return coef * pow + } + + out := make([]float64, 0, MaxBlocks) + for place := 0; place < MaxBlocks; place++ { + var pPlace float64 + for otherWinners, pCase := range noWinners { + pPlace += pCase * binoPdf(float64(place), float64(otherWinners)) + } + out = append(out, pPlace) + } + return out +} diff --git a/pkg/messagepool/block_proba_test.go b/pkg/messagepool/block_proba_test.go new file mode 100644 index 0000000000..1d09731e81 --- /dev/null +++ b/pkg/messagepool/block_proba_test.go @@ -0,0 +1,49 @@ +package messagepool + +import ( + "math" + "math/rand" + "testing" + "time" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestBlockProbability(t *testing.T) { + tf.UnitTest(t) + + mp := &MessagePool{} + bp := mp.blockProbabilities(1 - 0.15) + t.Logf("%+v\n", bp) + for i := 0; i < len(bp)-1; i++ { + if bp[i] < bp[i+1] { + t.Fatalf("expected decreasing block probabilities for this quality: %d %f %f", + i, bp[i], bp[i+1]) + } + } +} + +func TestWinnerProba(t *testing.T) { + tf.UnitTest(t) + + rand.Seed(time.Now().UnixNano()) + const N = 1000000 + winnerProba := noWinnersProb() + sum := 0 + for i := 0; i < N; i++ { + minersRand := rand.Float64() + j := 0 + for ; j < MaxBlocks; j++ { + minersRand -= winnerProba[j] + if minersRand < 0 { + break + } + } + sum += j + } + + if avg := float64(sum) / N; math.Abs(avg-5) > 0.01 { + t.Fatalf("avg too far off: %f", avg) + } + +} diff --git a/pkg/messagepool/check.go b/pkg/messagepool/check.go new file mode 100644 index 0000000000..718d6cab41 --- /dev/null +++ b/pkg/messagepool/check.go @@ -0,0 +1,431 @@ +package messagepool + +import ( + "context" + "fmt" + stdbig "math/big" + "sort" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/vm/gas" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/messagepool" +) + +var baseFeeUpperBoundFactor = types.NewInt(10) + +// CheckMessages performs a set of logic checks for a list of messages, prior to submitting it to the mpool +func (mp *MessagePool) CheckMessages(ctx context.Context, protos []*messagepool.MessagePrototype) ([][]messagepool.MessageCheckStatus, error) { + flex := make([]bool, len(protos)) + msgs := make([]*types.Message, len(protos)) + for i, p := range protos { + flex[i] = !p.ValidNonce + msgs[i] = &p.Message + } + return mp.checkMessages(ctx, msgs, false, flex) +} + +// CheckPendingMessages performs a set of logical sets for all messages pending from a given actor +func (mp *MessagePool) CheckPendingMessages(ctx context.Context, from address.Address) ([][]messagepool.MessageCheckStatus, error) { + var msgs []*types.Message + mp.lk.Lock() + mset, ok := mp.pending[from] + if ok { + for _, sm := range mset.msgs { + msgs = append(msgs, &sm.Message) + } + } + mp.lk.Unlock() + + if len(msgs) == 0 { + return nil, nil + } + + sort.Slice(msgs, func(i, j int) bool { + return msgs[i].Nonce < msgs[j].Nonce + }) + + return mp.checkMessages(ctx, msgs, true, nil) +} + +// CheckReplaceMessages performs a set of logical checks for related messages while performing a +// replacement. +func (mp *MessagePool) CheckReplaceMessages(ctx context.Context, replace []*types.Message) ([][]messagepool.MessageCheckStatus, error) { + msgMap := make(map[address.Address]map[uint64]*types.Message) + count := 0 + + mp.lk.Lock() + for _, m := range replace { + mmap, ok := msgMap[m.From] + if !ok { + mmap = make(map[uint64]*types.Message) + msgMap[m.From] = mmap + mset, ok := mp.pending[m.From] + if ok { + count += len(mset.msgs) + for _, sm := range mset.msgs { + mmap[sm.Message.Nonce] = &sm.Message + } + } else { + count++ + } + } + mmap[m.Nonce] = m + } + mp.lk.Unlock() + + msgs := make([]*types.Message, 0, count) + start := 0 + for _, mmap := range msgMap { + end := start + len(mmap) + + for _, m := range mmap { + msgs = append(msgs, m) + } + + sort.Slice(msgs[start:end], func(i, j int) bool { + return msgs[start+i].Nonce < msgs[start+j].Nonce + }) + + start = end + } + + return mp.checkMessages(ctx, msgs, true, nil) +} + +// flexibleNonces should be either nil or of len(msgs), it signifies that message at given index +// has non-determied nonce at this point +func (mp *MessagePool) checkMessages(ctx context.Context, msgs []*types.Message, interned bool, flexibleNonces []bool) (result [][]messagepool.MessageCheckStatus, err error) { + if mp.api.IsLite() { + return nil, nil + } + mp.curTSLk.Lock() + curTS := mp.curTS + mp.curTSLk.Unlock() + + epoch := curTS.Height() + + var baseFee big.Int + if len(curTS.Blocks()) > 0 { + baseFee = curTS.Blocks()[0].ParentBaseFee + } else { + baseFee, err = mp.api.ChainComputeBaseFee(context.Background(), curTS) + if err != nil { + return nil, xerrors.Errorf("error computing basefee: %w", err) + } + } + + baseFeeLowerBound := getBaseFeeLowerBound(baseFee, baseFeeLowerBoundFactor) + baseFeeUpperBound := types.BigMul(baseFee, baseFeeUpperBoundFactor) + + type actorState struct { + nextNonce uint64 + requiredFunds *stdbig.Int + } + + state := make(map[address.Address]*actorState) + balances := make(map[address.Address]big.Int) + + result = make([][]messagepool.MessageCheckStatus, len(msgs)) + + for i, m := range msgs { + // pre-check: actor nonce + check := messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageGetStateNonce, + }, + } + + st, ok := state[m.From] + if !ok { + mp.lk.Lock() + mset, ok := mp.pending[m.From] + if ok && !interned { + st = &actorState{nextNonce: mset.nextNonce, requiredFunds: mset.requiredFunds} + for _, m := range mset.msgs { + st.requiredFunds = new(stdbig.Int).Add(st.requiredFunds, m.Message.Value.Int) + } + state[m.From] = st + mp.lk.Unlock() + + check.OK = true + check.Hint = map[string]interface{}{ + "nonce": st.nextNonce, + } + } else { + mp.lk.Unlock() + + stateNonce, err := mp.getStateNonce(ctx, m.From, curTS) + if err != nil { + check.OK = false + check.Err = fmt.Sprintf("error retrieving state nonce: %s", err.Error()) + } else { + check.OK = true + check.Hint = map[string]interface{}{ + "nonce": stateNonce, + } + } + + st = &actorState{nextNonce: stateNonce, requiredFunds: new(stdbig.Int)} + state[m.From] = st + } + } else { + check.OK = true + } + + result[i] = append(result[i], check) + if !check.OK { + continue + } + + // pre-check: actor balance + check = messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageGetStateBalance, + }, + } + + balance, ok := balances[m.From] + if !ok { + balance, err = mp.getStateBalance(ctx, m.From, curTS) + if err != nil { + check.OK = false + check.Err = fmt.Sprintf("error retrieving state balance: %s", err) + } else { + check.OK = true + check.Hint = map[string]interface{}{ + "balance": balance, + } + } + + balances[m.From] = balance + } else { + check.OK = true + check.Hint = map[string]interface{}{ + "balance": balance, + } + } + + result[i] = append(result[i], check) + if !check.OK { + continue + } + + // 1. Serialization + check = messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageSerialize, + }, + } + + bytes, err := m.Serialize() + if err != nil { + check.OK = false + check.Err = err.Error() + } else { + check.OK = true + } + + result[i] = append(result[i], check) + + // 2. Message size + check = messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageSize, + }, + } + + if len(bytes) > MaxMessageSize-128 { // 128 bytes to account for signature size + check.OK = false + check.Err = "message too big" + } else { + check.OK = true + } + + result[i] = append(result[i], check) + + // 3. Syntactic validation + check = messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageValidity, + }, + } + + if err := m.ValidForBlockInclusion(0, constants.NewestNetworkVersion); err != nil { + check.OK = false + check.Err = fmt.Sprintf("syntactically invalid message: %s", err.Error()) + } else { + check.OK = true + } + + result[i] = append(result[i], check) + if !check.OK { + // skip remaining checks if it is a syntatically invalid message + continue + } + + // gas checks + + // 4. Min Gas + minGas := gas.NewPricesSchedule(mp.forkParams).PricelistByEpoch(epoch).OnChainMessage(m.ChainLength()) + + check = messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageMinGas, + Hint: map[string]interface{}{ + "minGas": minGas, + }, + }, + } + + if m.GasLimit < minGas.Total() { + check.OK = false + check.Err = "GasLimit less than epoch minimum gas" + } else { + check.OK = true + } + + result[i] = append(result[i], check) + + // 5. Min Base Fee + check = messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageMinBaseFee, + }, + } + + if m.GasFeeCap.LessThan(minimumBaseFee) { + check.OK = false + check.Err = "GasFeeCap less than minimum base fee" + } else { + check.OK = true + } + + result[i] = append(result[i], check) + if !check.OK { + goto checkState + } + + // 6. Base Fee + check = messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageBaseFee, + Hint: map[string]interface{}{ + "baseFee": baseFee, + }, + }, + } + + if m.GasFeeCap.LessThan(baseFee) { + check.OK = false + check.Err = "GasFeeCap less than current base fee" + } else { + check.OK = true + } + + result[i] = append(result[i], check) + + // 7. Base Fee lower bound + check = messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageBaseFeeLowerBound, + Hint: map[string]interface{}{ + "baseFeeLowerBound": baseFeeLowerBound, + "baseFee": baseFee, + }, + }, + } + + if m.GasFeeCap.LessThan(baseFeeLowerBound) { + check.OK = false + check.Err = "GasFeeCap less than base fee lower bound for inclusion in next 20 epochs" + } else { + check.OK = true + } + + result[i] = append(result[i], check) + + // 8. Base Fee upper bound + check = messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageBaseFeeUpperBound, + Hint: map[string]interface{}{ + "baseFeeUpperBound": baseFeeUpperBound, + "baseFee": baseFee, + }, + }, + } + + if m.GasFeeCap.LessThan(baseFeeUpperBound) { + check.OK = true // on purpose, the checks is more of a warning + check.Err = "GasFeeCap less than base fee upper bound for inclusion in next 20 epochs" + } else { + check.OK = true + } + + result[i] = append(result[i], check) + + // stateful checks + checkState: + // 9. Message Nonce + check = messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageNonce, + Hint: map[string]interface{}{ + "nextNonce": st.nextNonce, + }, + }, + } + + if (flexibleNonces == nil || !flexibleNonces[i]) && st.nextNonce != m.Nonce { + check.OK = false + check.Err = fmt.Sprintf("message nonce doesn't match next nonce (%d)", st.nextNonce) + } else { + check.OK = true + st.nextNonce++ + } + + result[i] = append(result[i], check) + + // check required funds -vs- balance + st.requiredFunds = new(stdbig.Int).Add(st.requiredFunds, m.RequiredFunds().Int) + st.requiredFunds.Add(st.requiredFunds, m.Value.Int) + + // 10. Balance + check = messagepool.MessageCheckStatus{ + Cid: m.Cid(), + CheckStatus: messagepool.CheckStatus{ + Code: messagepool.CheckStatusMessageBalance, + Hint: map[string]interface{}{ + "requiredFunds": big.Int{Int: stdbig.NewInt(0).Set(st.requiredFunds)}, + }, + }, + } + + if balance.Int.Cmp(st.requiredFunds) < 0 { + check.OK = false + check.Err = "insufficient balance" + } else { + check.OK = true + } + + result[i] = append(result[i], check) + } + + return result, nil +} diff --git a/pkg/messagepool/config.go b/pkg/messagepool/config.go new file mode 100644 index 0000000000..a54e313404 --- /dev/null +++ b/pkg/messagepool/config.go @@ -0,0 +1,109 @@ +package messagepool + +import ( + "context" + "encoding/json" + "fmt" + "time" + + "github.com/ipfs/go-datastore" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/pkg/repo" +) + +var ( + ReplaceByFeeRatioDefault = 1.25 + MemPoolSizeLimitHiDefault = 30000 + MemPoolSizeLimitLoDefault = 20000 + PruneCooldownDefault = time.Minute + GasLimitOverestimation = 1.25 + + ConfigKey = datastore.NewKey("/mpool/config") +) + +type MpoolConfig struct { + PriorityAddrs []address.Address + SizeLimitHigh int + SizeLimitLow int + ReplaceByFeeRatio float64 + PruneCooldown time.Duration + GasLimitOverestimation float64 +} + +func (mc *MpoolConfig) Clone() *MpoolConfig { + r := new(MpoolConfig) + *r = *mc + return r +} + +func loadConfig(ctx context.Context, ds repo.Datastore) (*MpoolConfig, error) { + haveCfg, err := ds.Has(ctx, ConfigKey) + if err != nil { + return nil, err + } + + if !haveCfg { + return DefaultConfig(), nil + } + + cfgBytes, err := ds.Get(ctx, ConfigKey) + if err != nil { + return nil, err + } + cfg := new(MpoolConfig) + err = json.Unmarshal(cfgBytes, cfg) + return cfg, err +} + +func saveConfig(ctx context.Context, cfg *MpoolConfig, ds repo.Datastore) error { + cfgBytes, err := json.Marshal(cfg) + if err != nil { + return err + } + return ds.Put(ctx, ConfigKey, cfgBytes) +} + +func (mp *MessagePool) GetConfig() *MpoolConfig { + mp.cfgLk.Lock() + defer mp.cfgLk.Unlock() + return mp.cfg.Clone() +} + +func validateConfg(cfg *MpoolConfig) error { + if cfg.ReplaceByFeeRatio < ReplaceByFeeRatioDefault { + return fmt.Errorf("'ReplaceByFeeRatio' is less than required %f < %f", + cfg.ReplaceByFeeRatio, ReplaceByFeeRatioDefault) + } + if cfg.GasLimitOverestimation < 1 { + return fmt.Errorf("'GasLimitOverestimation' cannot be less than 1") + } + return nil +} + +func (mp *MessagePool) SetConfig(ctx context.Context, cfg *MpoolConfig) error { + if err := validateConfg(cfg); err != nil { + return err + } + cfg = cfg.Clone() + + mp.cfgLk.Lock() + mp.cfg = cfg + err := saveConfig(ctx, cfg, mp.ds) + if err != nil { + log.Warnf("error persisting mpool config: %s", err) + } + mp.cfgLk.Unlock() + + return nil +} + +func DefaultConfig() *MpoolConfig { + return &MpoolConfig{ + SizeLimitHigh: MemPoolSizeLimitHiDefault, + SizeLimitLow: MemPoolSizeLimitLoDefault, + ReplaceByFeeRatio: ReplaceByFeeRatioDefault, + PruneCooldown: PruneCooldownDefault, + GasLimitOverestimation: GasLimitOverestimation, + } +} diff --git a/pkg/messagepool/gas.go b/pkg/messagepool/gas.go new file mode 100644 index 0000000000..f0675878da --- /dev/null +++ b/pkg/messagepool/gas.go @@ -0,0 +1,393 @@ +package messagepool + +import ( + "context" + "fmt" + "math" + "math/rand" + "sort" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/exitcode" + lru "github.com/hashicorp/golang-lru" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/fork" + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +const MinGasPremium = 100e3 + +// const MaxSpendOnFeeDenom = 100 + +type GasPriceCache struct { + c *lru.TwoQueueCache +} + +type GasMeta struct { + Price big.Int + Limit int64 +} + +func NewGasPriceCache() *GasPriceCache { + // 50 because we usually won't access more than 40 + c, err := lru.New2Q(50) + if err != nil { + // err only if parameter is bad + panic(err) + } + + return &GasPriceCache{ + c: c, + } +} + +func (g *GasPriceCache) GetTSGasStats(ctx context.Context, provider Provider, ts *types.TipSet) ([]GasMeta, error) { + i, has := g.c.Get(ts.Key()) + if has { + return i.([]GasMeta), nil + } + + var prices []GasMeta + msgs, err := provider.MessagesForTipset(ctx, ts) + if err != nil { + return nil, xerrors.Errorf("loading messages: %w", err) + } + for _, msg := range msgs { + prices = append(prices, GasMeta{ + Price: msg.VMMessage().GasPremium, + Limit: msg.VMMessage().GasLimit, + }) + } + + g.c.Add(ts.Key(), prices) + + return prices, nil +} + +func (mp *MessagePool) GasEstimateFeeCap( + ctx context.Context, + msg *types.Message, + maxqueueblks int64, + tsk types.TipSetKey, +) (big.Int, error) { + ts, err := mp.api.ChainHead(ctx) + if err != nil { + return types.NewGasFeeCap(0), err + } + + parentBaseFee := ts.Blocks()[0].ParentBaseFee + increaseFactor := math.Pow(1.+1./float64(constants.BaseFeeMaxChangeDenom), float64(maxqueueblks)) + + feeInFuture := types.BigMul(parentBaseFee, types.NewInt(uint64(increaseFactor*(1<<8)))) + out := types.BigDiv(feeInFuture, types.NewInt(1<<8)) + + if msg.GasPremium != types.EmptyInt { + out = types.BigAdd(out, msg.GasPremium) + } + + return out, nil +} + +// finds 55th percntile instead of median to put negative pressure on gas price +func medianGasPremium(prices []GasMeta, blocks int) abi.TokenAmount { + sort.Slice(prices, func(i, j int) bool { + // sort desc by price + return prices[i].Price.GreaterThan(prices[j].Price) + }) + + at := constants.BlockGasTarget * int64(blocks) / 2 + at += constants.BlockGasTarget * int64(blocks) / (2 * 20) // move 5% further + prev1, prev2 := big.Zero(), big.Zero() + for _, price := range prices { + prev1, prev2 = price.Price, prev1 + at -= price.Limit + if at < 0 { + break + } + } + + premium := prev1 + if prev2.Sign() != 0 { + premium = big.Div(big.Add(prev1, prev2), big.NewInt(2)) + } + + return premium +} + +func (mp *MessagePool) GasEstimateGasPremium( + ctx context.Context, + nblocksincl uint64, + sender address.Address, + gaslimit int64, + _ types.TipSetKey, + cache *GasPriceCache, +) (big.Int, error) { + if nblocksincl == 0 { + nblocksincl = 1 + } + + var prices []GasMeta + var blocks int + + ts, err := mp.api.ChainHead(ctx) + if err != nil { + return big.Int{}, err + } + + for i := uint64(0); i < nblocksincl*2; i++ { + if ts.Height() == 0 { + break // genesis + } + + pts, err := mp.api.LoadTipSet(ctx, ts.Parents()) + if err != nil { + return types.BigInt{}, err + } + + blocks += len(pts.Blocks()) + meta, err := cache.GetTSGasStats(ctx, mp.api, pts) + if err != nil { + return types.BigInt{}, err + } + prices = append(prices, meta...) + + ts = pts + } + + premium := medianGasPremium(prices, blocks) + + if big.Cmp(premium, big.NewInt(MinGasPremium)) < 0 { + switch nblocksincl { + case 1: + premium = big.NewInt(2 * MinGasPremium) + case 2: + premium = big.NewInt(1.5 * MinGasPremium) + default: + premium = big.NewInt(MinGasPremium) + } + } + + // add some noise to normalize behaviour of message selection + const precision = 32 + // mean 1, stddev 0.005 => 95% within +-1% + noise := 1 + rand.NormFloat64()*0.005 + premium = types.BigMul(premium, types.NewInt(uint64(noise*(1< 0 { + gasLimitOverestimation = estimateMessage.Spec.GasOverEstimation + } + estimateMessage.Msg.GasLimit = int64(float64(gasLimit) * gasLimitOverestimation) + } + + if estimateMessage.Msg.GasPremium == types.EmptyInt || types.BigCmp(estimateMessage.Msg.GasPremium, types.NewInt(0)) == 0 { + gasPremium, err := mp.GasEstimateGasPremium(ctx, 10, estimateMessage.Msg.From, estimateMessage.Msg.GasLimit, types.TipSetKey{}, mp.PriceCache) + if err != nil { + return nil, xerrors.Errorf("estimating gas price: %w", err) + } + estimateMessage.Msg.GasPremium = gasPremium + } + + if estimateMessage.Msg.GasFeeCap == types.EmptyInt || types.BigCmp(estimateMessage.Msg.GasFeeCap, types.NewInt(0)) == 0 { + feeCap, err := mp.GasEstimateFeeCap(ctx, estimateMessage.Msg, 20, types.EmptyTSK) + if err != nil { + return nil, xerrors.Errorf("estimating fee cap: %w", err) + } + estimateMessage.Msg.GasFeeCap = feeCap + } + + CapGasFee(mp.GetMaxFee, estimateMessage.Msg, estimateMessage.Spec) + + return estimateMessage.Msg, nil +} + +func (mp *MessagePool) GasBatchEstimateMessageGas(ctx context.Context, estimateMessages []*apitypes.EstimateMessage, fromNonce uint64, tsk types.TipSetKey) ([]*apitypes.EstimateResult, error) { + if len(estimateMessages) == 0 { + return nil, xerrors.New("estimate messages are empty") + } + + // ChainTipSet will determine if tsk is empty + currTS, err := mp.api.ChainTipSet(ctx, tsk) + if err != nil { + return nil, xerrors.Errorf("getting tipset: %w", err) + } + + fromA, err := mp.sm.ResolveToKeyAddress(ctx, estimateMessages[0].Msg.From, currTS) + if err != nil { + return nil, xerrors.Errorf("getting key address: %w", err) + } + + pending, ts := mp.PendingFor(ctx, fromA) + priorMsgs := make([]types.ChainMsg, 0, len(pending)) + for _, m := range pending { + priorMsgs = append(priorMsgs, m) + } + + var estimateResults []*apitypes.EstimateResult + for _, estimateMessage := range estimateMessages { + estimateMsg := estimateMessage.Msg + estimateMsg.Nonce = fromNonce + + if estimateMessage.Spec != nil { + log.Infof("GasBatchEstimateMessageGas from %s, nonce %d, gas limit %d, gas fee cap %s, max fee %s", + estimateMsg.From, estimateMsg.Nonce, estimateMsg.GasLimit, estimateMsg.GasFeeCap, estimateMessage.Spec.MaxFee) + } + + if estimateMsg.GasLimit == 0 { + gasUsed, err := mp.evalMessageGasLimit(ctx, estimateMsg, priorMsgs, ts) + if err != nil { + estimateMsg.Nonce = 0 + estimateResults = append(estimateResults, &apitypes.EstimateResult{ + Msg: estimateMsg, + Err: fmt.Sprintf("estimating gas limit: %v", err), + }) + continue + } + estimateMsg.GasLimit = int64(float64(gasUsed) * estimateMessage.Spec.GasOverEstimation) + } + + if estimateMsg.GasPremium == types.EmptyInt || types.BigCmp(estimateMsg.GasPremium, types.NewInt(0)) == 0 { + gasPremium, err := mp.GasEstimateGasPremium(ctx, 10, estimateMsg.From, estimateMsg.GasLimit, types.TipSetKey{}, mp.PriceCache) + if err != nil { + estimateMsg.Nonce = 0 + estimateResults = append(estimateResults, &apitypes.EstimateResult{ + Msg: estimateMsg, + Err: fmt.Sprintf("estimating gas premium: %v", err), + }) + continue + } + estimateMsg.GasPremium = gasPremium + } + + if estimateMsg.GasFeeCap == types.EmptyInt || types.BigCmp(estimateMsg.GasFeeCap, types.NewInt(0)) == 0 { + feeCap, err := mp.GasEstimateFeeCap(ctx, estimateMsg, 20, types.EmptyTSK) + if err != nil { + estimateMsg.Nonce = 0 + estimateResults = append(estimateResults, &apitypes.EstimateResult{ + Msg: estimateMsg, + Err: fmt.Sprintf("estimating fee cap: %v", err), + }) + continue + } + estimateMsg.GasFeeCap = feeCap + } + + CapGasFee(mp.GetMaxFee, estimateMsg, estimateMessage.Spec) + + estimateResults = append(estimateResults, &apitypes.EstimateResult{ + Msg: estimateMsg, + }) + priorMsgs = append(priorMsgs, estimateMsg) + fromNonce++ + } + return estimateResults, nil +} diff --git a/pkg/messagepool/gasguess/guessgas.go b/pkg/messagepool/gasguess/guessgas.go new file mode 100644 index 0000000000..966b500691 --- /dev/null +++ b/pkg/messagepool/gasguess/guessgas.go @@ -0,0 +1,97 @@ +package gasguess + +import ( + "context" + + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" +) + +type ActorLookup func(context.Context, address.Address, types.TipSetKey) (*types.Actor, error) + +const failedGasGuessRatio = 0.5 +const failedGasGuessMax = 25_000_000 + +const MinGas = 1298450 +const MaxGas = 1600271356 + +type CostKey struct { + Code cid.Cid + M abi.MethodNum +} + +var Costs = map[CostKey]int64{ + {builtin0.InitActorCodeID, 2}: 8916753, + {builtin0.StorageMarketActorCodeID, 2}: 6955002, + {builtin0.StorageMarketActorCodeID, 4}: 245436108, + {builtin0.StorageMinerActorCodeID, 4}: 2315133, + {builtin0.StorageMinerActorCodeID, 5}: 1600271356, + {builtin0.StorageMinerActorCodeID, 6}: 22864493, + {builtin0.StorageMinerActorCodeID, 7}: 142002419, + {builtin0.StorageMinerActorCodeID, 10}: 23008274, + {builtin0.StorageMinerActorCodeID, 11}: 19303178, + {builtin0.StorageMinerActorCodeID, 14}: 566356835, + {builtin0.StorageMinerActorCodeID, 16}: 5325185, + {builtin0.StorageMinerActorCodeID, 18}: 2328637, + {builtin0.StoragePowerActorCodeID, 2}: 23600956, + // TODO: Just reuse v0 values for now, this isn't actually used + {builtin2.InitActorCodeID, 2}: 8916753, + {builtin2.StorageMarketActorCodeID, 2}: 6955002, + {builtin2.StorageMarketActorCodeID, 4}: 245436108, + {builtin2.StorageMinerActorCodeID, 4}: 2315133, + {builtin2.StorageMinerActorCodeID, 5}: 1600271356, + {builtin2.StorageMinerActorCodeID, 6}: 22864493, + {builtin2.StorageMinerActorCodeID, 7}: 142002419, + {builtin2.StorageMinerActorCodeID, 10}: 23008274, + {builtin2.StorageMinerActorCodeID, 11}: 19303178, + {builtin2.StorageMinerActorCodeID, 14}: 566356835, + {builtin2.StorageMinerActorCodeID, 16}: 5325185, + {builtin2.StorageMinerActorCodeID, 18}: 2328637, + {builtin2.StoragePowerActorCodeID, 2}: 23600956, +} + +func failedGuess(msg *types.SignedMessage) int64 { + guess := int64(float64(msg.Message.GasLimit) * failedGasGuessRatio) + if guess > failedGasGuessMax { + guess = failedGasGuessMax + } + return guess +} + +func GuessGasUsed(ctx context.Context, tsk types.TipSetKey, msg *types.SignedMessage, al ActorLookup) (int64, error) { + // MethodSend is the same in all versions. + if msg.Message.Method == builtin.MethodSend { + switch msg.Message.From.Protocol() { + case address.BLS: + return 1298450, nil + case address.SECP256K1: + return 1385999, nil + default: + // who knows? + return 1298450, nil + } + } + + to, err := al(ctx, msg.Message.To, tsk) + if err != nil { + return failedGuess(msg), xerrors.Errorf("could not lookup actor: %v", err) + } + + guess, ok := Costs[CostKey{to.Code, msg.Message.Method}] + if !ok { + return failedGuess(msg), xerrors.Errorf("unknown code-method combo") + } + if guess > msg.Message.GasLimit { + guess = msg.Message.GasLimit + } + return guess, nil +} diff --git a/pkg/messagepool/journal/env.go b/pkg/messagepool/journal/env.go new file mode 100644 index 0000000000..af9e4bb297 --- /dev/null +++ b/pkg/messagepool/journal/env.go @@ -0,0 +1,19 @@ +package journal + +import ( + "os" +) + +// envJournalDisabledEvents is the environment variable through which disabled +// journal events can be customized. +const envDisabledEvents = "VENUS_JOURNAL_DISABLED_EVENTS" + +func EnvDisabledEvents() DisabledEvents { + if env, ok := os.LookupEnv(envDisabledEvents); ok { + if ret, err := ParseDisabledEvents(env); err == nil { + return ret + } + } + // fallback if env variable is not set, or if it failed to parse. + return DefaultDisabledEvents +} diff --git a/pkg/messagepool/journal/fs.go b/pkg/messagepool/journal/fs.go new file mode 100644 index 0000000000..d2e34bdb12 --- /dev/null +++ b/pkg/messagepool/journal/fs.go @@ -0,0 +1,140 @@ +package journal + +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/repo" +) + +const RFC3339nocolon = "2006-01-02T150405Z0700" + +// fsJournal is a basic journal backed by files on a filesystem. +type fsJournal struct { + EventTypeRegistry + + dir string + sizeLimit int64 + + fi *os.File + fSize int64 + + incoming chan *Event + + closing chan struct{} + closed chan struct{} +} + +// OpenFSJournal constructs a rolling filesystem journal, with a default +// per-file size limit of 1GiB. +func OpenFSJournal(lr repo.Repo, disabled DisabledEvents) (Journal, error) { + path, err := lr.Path() + if err != nil { + return nil, err + } + dir := filepath.Join(path, "journal") + if err := os.MkdirAll(dir, 0755); err != nil { + return nil, fmt.Errorf("failed to mk directory %s for file journal: %w", dir, err) + } + + f := &fsJournal{ + EventTypeRegistry: NewEventTypeRegistry(disabled), + dir: dir, + sizeLimit: 1 << 30, + incoming: make(chan *Event, 32), + closing: make(chan struct{}), + closed: make(chan struct{}), + } + + if err := f.rollJournalFile(); err != nil { + return nil, err + } + + go f.runLoop() + + return f, nil +} + +func (f *fsJournal) RecordEvent(evtType EventType, supplier func() interface{}) { + defer func() { + if r := recover(); r != nil { + log.Warnf("recovered from panic while recording journal event; type=%s, err=%v", evtType, r) + } + }() + + if !evtType.Enabled() { + return + } + + je := &Event{ + EventType: evtType, + Timestamp: constants.Clock.Now(), + Data: supplier(), + } + select { + case f.incoming <- je: + case <-f.closing: + log.Warnw("journal closed but tried to log event", "event", je) + } +} + +func (f *fsJournal) Close() error { + close(f.closing) + <-f.closed + return nil +} + +func (f *fsJournal) putEvent(evt *Event) error { + b, err := json.Marshal(evt) + if err != nil { + return err + } + n, err := f.fi.Write(append(b, '\n')) + if err != nil { + return err + } + + f.fSize += int64(n) + + if f.fSize >= f.sizeLimit { + _ = f.rollJournalFile() + } + + return nil +} + +func (f *fsJournal) rollJournalFile() error { + if f.fi != nil { + _ = f.fi.Close() + } + + nfi, err := os.Create(filepath.Join(f.dir, fmt.Sprintf("lotus-journal-%s.ndjson", constants.Clock.Now().Format(RFC3339nocolon)))) + if err != nil { + return xerrors.Errorf("failed to open journal file: %w", err) + } + + f.fi = nfi + f.fSize = 0 + return nil +} + +func (f *fsJournal) runLoop() { + defer close(f.closed) + + for { + select { + case je := <-f.incoming: + if err := f.putEvent(je); err != nil { + log.Errorw("failed to write out journal event", "event", je, "err", err) + } + case <-f.closing: + _ = f.fi.Close() + return + } + } +} diff --git a/pkg/messagepool/journal/nil.go b/pkg/messagepool/journal/nil.go new file mode 100644 index 0000000000..fa72fa373a --- /dev/null +++ b/pkg/messagepool/journal/nil.go @@ -0,0 +1,16 @@ +package journal + +type nilJournal struct{} + +// nilj is a singleton nil journal. +var nilj Journal = &nilJournal{} + +func NilJournal() Journal { + return nilj +} + +func (n *nilJournal) RegisterEventType(_, _ string) EventType { return EventType{} } + +func (n *nilJournal) RecordEvent(_ EventType, _ func() interface{}) {} + +func (n *nilJournal) Close() error { return nil } diff --git a/pkg/messagepool/journal/registry.go b/pkg/messagepool/journal/registry.go new file mode 100644 index 0000000000..6ab5b5fb16 --- /dev/null +++ b/pkg/messagepool/journal/registry.go @@ -0,0 +1,57 @@ +package journal + +import "sync" + +// EventTypeRegistry is a component that constructs tracked EventType tokens, +// for usage with a Journal. +type EventTypeRegistry interface { + + // RegisterEventType introduces a new event type to a journal, and + // returns an EventType token that components can later use to check whether + // journalling for that type is enabled/suppressed, and to tag journal + // entries appropriately. + RegisterEventType(system, event string) EventType +} + +// eventTypeRegistry is an embeddable mixin that takes care of tracking disabled +// event types, and returning initialized/safe EventTypes when requested. +type eventTypeRegistry struct { + sync.Mutex + + m map[string]EventType +} + +var _ EventTypeRegistry = (*eventTypeRegistry)(nil) + +func NewEventTypeRegistry(disabled DisabledEvents) EventTypeRegistry { + ret := &eventTypeRegistry{ + m: make(map[string]EventType, len(disabled)+32), // + extra capacity. + } + + for _, et := range disabled { + et.enabled, et.safe = false, true + ret.m[et.System+":"+et.Event] = et + } + + return ret +} + +func (d *eventTypeRegistry) RegisterEventType(system, event string) EventType { + d.Lock() + defer d.Unlock() + + key := system + ":" + event + if et, ok := d.m[key]; ok { + return et + } + + et := EventType{ + System: system, + Event: event, + enabled: true, + safe: true, + } + + d.m[key] = et + return et +} diff --git a/pkg/messagepool/journal/registry_test.go b/pkg/messagepool/journal/registry_test.go new file mode 100644 index 0000000000..27eca14f3b --- /dev/null +++ b/pkg/messagepool/journal/registry_test.go @@ -0,0 +1,55 @@ +package journal + +import ( + "testing" + + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestDisabledEvents(t *testing.T) { + tf.UnitTest(t) + + req := require.New(t) + + test := func(dis DisabledEvents) func(*testing.T) { + return func(t *testing.T) { + registry := NewEventTypeRegistry(dis) + + reg1 := registry.RegisterEventType("system1", "disabled1") + reg2 := registry.RegisterEventType("system1", "disabled2") + + req.False(reg1.Enabled()) + req.False(reg2.Enabled()) + req.True(reg1.safe) + req.True(reg2.safe) + + reg3 := registry.RegisterEventType("system3", "enabled3") + req.True(reg3.Enabled()) + req.True(reg3.safe) + } + } + + t.Run("direct", test(DisabledEvents{ + EventType{System: "system1", Event: "disabled1"}, + EventType{System: "system1", Event: "disabled2"}, + })) + + dis, err := ParseDisabledEvents("system1:disabled1,system1:disabled2") + req.NoError(err) + + t.Run("parsed", test(dis)) + + dis, err = ParseDisabledEvents(" system1:disabled1 , system1:disabled2 ") + req.NoError(err) + + t.Run("parsed_spaces", test(dis)) +} + +func TestParseDisableEvents(t *testing.T) { + tf.UnitTest(t) + + _, err := ParseDisabledEvents("system1:disabled1:failed,system1:disabled2") + require.Error(t, err) +} diff --git a/pkg/messagepool/journal/types.go b/pkg/messagepool/journal/types.go new file mode 100644 index 0000000000..5b51ed4c8c --- /dev/null +++ b/pkg/messagepool/journal/types.go @@ -0,0 +1,102 @@ +package journal + +import ( + "fmt" + "strings" + "time" + + logging "github.com/ipfs/go-log" +) + +var log = logging.Logger("journal") + +var ( + // DefaultDisabledEvents lists the journal events disabled by + // default, usually because they are considered noisy. + DefaultDisabledEvents = DisabledEvents{ + EventType{System: "mpool", Event: "add"}, + EventType{System: "mpool", Event: "remove"}, + } +) + +// DisabledEvents is the set of event types whose journaling is suppressed. +type DisabledEvents []EventType + +// ParseDisabledEvents parses a string of the form: "system1:event1,system1:event2[,...]" +// into a DisabledEvents object, returning an error if the string failed to parse. +// +// It sanitizes strings via strings.TrimSpace. +func ParseDisabledEvents(s string) (DisabledEvents, error) { + s = strings.TrimSpace(s) // sanitize + evts := strings.Split(s, ",") + ret := make(DisabledEvents, 0, len(evts)) + for _, evt := range evts { + evt = strings.TrimSpace(evt) // sanitize + s := strings.Split(evt, ":") + if len(s) != 2 { + return nil, fmt.Errorf("invalid event type: %s", s) + } + ret = append(ret, EventType{System: s[0], Event: s[1]}) + } + return ret, nil +} + +// EventType represents the signature of an event. +type EventType struct { + System string + Event string + + // enabled stores whether this event type is enabled. + enabled bool + + // safe is a sentinel marker that's set to true if this EventType was + // constructed correctly (via Journal#RegisterEventType). + safe bool +} + +func (et EventType) String() string { + return et.System + ":" + et.Event +} + +// Enabled returns whether this event type is enabled in the journaling +// subsystem. Users are advised to check this before actually attempting to +// add a journal entry, as it helps bypass object construction for events that +// would be discarded anyway. +// +// All event types are enabled by default, and specific event types can only +// be disabled at Journal construction time. +func (et EventType) Enabled() bool { + return et.safe && et.enabled +} + +// Journal represents an audit trail of system actions. +// +// Every entry is tagged with a timestamp, a system name, and an event name. +// The supplied data can be any type, as long as it is JSON serializable, +// including structs, map[string]interface{}, or primitive types. +// +// For cleanliness and type safety, we recommend to use typed events. See the +// *Evt struct types in this package for more info. +type Journal interface { + EventTypeRegistry + + // RecordEvent records this event to the journal, if and only if the + // EventType is enabled. If so, it calls the supplier function to obtain + // the payload to record. + // + // Implementations MUST recover from panics raised by the supplier function. + RecordEvent(evtType EventType, supplier func() interface{}) + + // Close closes this journal for further writing. + Close() error +} + +// Event represents a journal entry. +// +// See godocs on Journal for more information. +type Event struct { + EventType + + Timestamp time.Time + Data interface{} +} diff --git a/pkg/messagepool/locker.go b/pkg/messagepool/locker.go new file mode 100644 index 0000000000..b8b49e802b --- /dev/null +++ b/pkg/messagepool/locker.go @@ -0,0 +1,44 @@ +package messagepool + +import ( + "context" + "sync" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" +) + +type MpoolLocker struct { + m map[address.Address]chan struct{} + lk sync.Mutex +} + +func NewMpoolLocker() *MpoolLocker { + return &MpoolLocker{ + lk: sync.Mutex{}, + } +} + +func (ml *MpoolLocker) TakeLock(ctx context.Context, a address.Address) (func(), error) { + ml.lk.Lock() + if ml.m == nil { + ml.m = make(map[address.Address]chan struct{}) + } + lk, ok := ml.m[a] + if !ok { + lk = make(chan struct{}, 1) + ml.m[a] = lk + } + ml.lk.Unlock() + + select { + case lk <- struct{}{}: + case <-ctx.Done(): + return nil, ctx.Err() + } + return func() { + <-lk + }, nil +} + +type DefaultMaxFeeFunc func() (abi.TokenAmount, error) diff --git a/pkg/messagepool/messagepool.go b/pkg/messagepool/messagepool.go new file mode 100644 index 0000000000..d0ab1081b9 --- /dev/null +++ b/pkg/messagepool/messagepool.go @@ -0,0 +1,1632 @@ +package messagepool + +import ( + "bytes" + "context" + "errors" + "fmt" + "math" + stdbig "math/big" + "os" + "sort" + "sync" + "time" + + "github.com/hashicorp/go-multierror" + lru "github.com/hashicorp/golang-lru" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + "github.com/ipfs/go-datastore/namespace" + "github.com/ipfs/go-datastore/query" + logging "github.com/ipfs/go-log/v2" + pubsub "github.com/libp2p/go-libp2p-pubsub" + "github.com/minio/blake2b-simd" + "github.com/raulk/clock" + lps "github.com/whyrusleeping/pubsub" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + crypto2 "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/messagepool/journal" + "github.com/filecoin-project/venus/pkg/net/msgsub" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/statemanger" + "github.com/filecoin-project/venus/pkg/vm/gas" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + mptypes "github.com/filecoin-project/venus/venus-shared/messagepool" +) + +var log = logging.Logger("messagepool") + +var futureDebug = false + +var rbfNumBig = big.NewInt(int64((ReplaceByFeeRatioDefault - 1) * RbfDenom)) +var rbfDenomBig = big.NewInt(RbfDenom) + +const RbfDenom = 256 + +var RepublishInterval = time.Duration(10*constants.MainNetBlockDelaySecs+constants.PropagationDelaySecs) * time.Second + +var minimumBaseFee = big.NewInt(int64(constants.MinimumBaseFee)) +var baseFeeLowerBoundFactor = big.NewInt(10) +var baseFeeLowerBoundFactorConservative = big.NewInt(100) + +var MaxActorPendingMessages = 1000 +var MaxUntrustedActorPendingMessages = 10 + +var MaxNonceGap = uint64(4) + +const MaxMessageSize = 64 << 10 // 64KiB + +var ( + ErrMessageTooBig = errors.New("message too big") + + ErrMessageValueTooHigh = errors.New("cannot send more filecoin than will ever exist") + + ErrNonceTooLow = errors.New("message nonce too low") + + ErrGasFeeCapTooLow = errors.New("gas fee cap too low") + + ErrNotEnoughFunds = errors.New("not enough funds to execute transaction") + + ErrInvalidToAddr = errors.New("message had invalid to address") + + ErrSoftValidationFailure = errors.New("validation failure") + ErrRBFTooLowPremium = errors.New("replace by fee has too low GasPremium") + ErrTooManyPendingMessages = errors.New("too many pending messages for actor") + ErrNonceGap = errors.New("unfulfilled nonce gap") +) + +const ( + localMsgsDs = "/mpool/local" + + localUpdates = "update" +) + +// Journal event types. +const ( + evtTypeMpoolAdd = iota + evtTypeMpoolRemove + evtTypeMpoolRepub +) + +// MessagePoolEvt is the journal entry for message pool events. +type MessagePoolEvt struct { // nolint + Action string + Messages []MessagePoolEvtMessage + Error error `json:",omitempty"` +} + +type MessagePoolEvtMessage struct { // nolint + types.Message + + CID cid.Cid +} + +func init() { + // if the republish interval is too short compared to the pubsub timecache, adjust it + minInterval := pubsub.TimeCacheDuration + time.Duration(constants.PropagationDelaySecs) + if RepublishInterval < minInterval { + RepublishInterval = minInterval + } +} + +type MessagePool struct { + lk sync.Mutex + + sm *statemanger.Stmgr + ds repo.Datastore + + addSema chan struct{} + + closer chan struct{} + + repubTk *clock.Ticker + repubTrigger chan struct{} + + republished map[cid.Cid]struct{} + + // do NOT access this map directly, use isLocal, setLocal, and forEachLocal respectively + localAddrs map[address.Address]struct{} + + // do NOT access this map directly, use getPendingMset, setPendingMset, deletePendingMset, forEachPending, and clearPending respectively + pending map[address.Address]*msgSet + + keyCache map[address.Address]address.Address + + curTSLk sync.Mutex // DO NOT LOCK INSIDE lk + curTS *types.TipSet + + cfgLk sync.Mutex + cfg *MpoolConfig + + api Provider + + minGasPrice big.Int + + currentSize int + + // pruneTrigger is a channel used to trigger a mempool pruning + pruneTrigger chan struct{} + + // pruneCooldown is a channel used to allow a cooldown time between prunes + pruneCooldown chan struct{} + + blsSigCache *lru.TwoQueueCache + + changes *lps.PubSub + + localMsgs datastore.Datastore + + netName string + + sigValCache *lru.TwoQueueCache + + evtTypes [3]journal.EventType + journal journal.Journal + + forkParams *config.ForkUpgradeConfig + gasPriceSchedule *gas.PricesSchedule + + GetMaxFee DefaultMaxFeeFunc + PriceCache *GasPriceCache +} + +func newDefaultMaxFeeFunc(maxFee types.FIL) DefaultMaxFeeFunc { + return func() (out abi.TokenAmount, err error) { + out = abi.TokenAmount{Int: maxFee.Int} + return + } +} + +type msgSet struct { + msgs map[uint64]*types.SignedMessage + nextNonce uint64 + requiredFunds *stdbig.Int +} + +func newMsgSet(nonce uint64) *msgSet { + return &msgSet{ + msgs: make(map[uint64]*types.SignedMessage), + nextNonce: nonce, + requiredFunds: stdbig.NewInt(0), + } +} + +func ComputeMinRBF(curPrem abi.TokenAmount) abi.TokenAmount { + minPrice := big.Add(curPrem, big.Div(big.Mul(curPrem, rbfNumBig), rbfDenomBig)) + return big.Add(minPrice, big.NewInt(1)) +} + +func CapGasFee(mff DefaultMaxFeeFunc, msg *types.Message, sendSepc *apitypes.MessageSendSpec) { + var maxFee abi.TokenAmount + if sendSepc != nil { + maxFee = sendSepc.MaxFee + } + if maxFee.Int == nil || maxFee.Equals(big.Zero()) { + mf, err := mff() + if err != nil { + log.Errorf("failed to get default max gas fee: %+v", err) + mf = big.Zero() + } + maxFee = mf + } + + gl := types.NewInt(uint64(msg.GasLimit)) + totalFee := types.BigMul(msg.GasFeeCap, gl) + + if totalFee.LessThanEqual(maxFee) { + return + } + + msg.GasFeeCap = big.Div(maxFee, gl) + msg.GasPremium = big.Min(msg.GasFeeCap, msg.GasPremium) // cap premium at FeeCap +} + +func (ms *msgSet) add(m *types.SignedMessage, mp *MessagePool, strict, untrusted bool) (bool, error) { + nextNonce := ms.nextNonce + nonceGap := false + + maxNonceGap := MaxNonceGap + maxActorPendingMessages := MaxActorPendingMessages + if untrusted { + maxNonceGap = 0 + maxActorPendingMessages = MaxUntrustedActorPendingMessages + } + + switch { + case m.Message.Nonce == nextNonce: + nextNonce++ + // advance if we are filling a gap + for _, fillGap := ms.msgs[nextNonce]; fillGap; _, fillGap = ms.msgs[nextNonce] { + nextNonce++ + } + + case strict && m.Message.Nonce > nextNonce+maxNonceGap: + return false, xerrors.Errorf("message nonce has too big a gap from expected nonce (Nonce: %d, nextNonce: %d): %v", m.Message.Nonce, nextNonce, ErrNonceGap) + + case m.Message.Nonce > nextNonce: + nonceGap = true + } + + exms, has := ms.msgs[m.Message.Nonce] + if has { + // refuse RBF if we have a gap + if strict && nonceGap { + return false, xerrors.Errorf("rejecting replace by fee because of nonce gap (Nonce: %d, nextNonce: %d): %v", m.Message.Nonce, nextNonce, ErrNonceGap) + } + + mc := m.Cid() + exmsc := exms.Cid() + if mc != exmsc { + // check if RBF passes + minPrice := ComputeMinRBF(exms.Message.GasPremium) + if big.Cmp(m.Message.GasPremium, minPrice) >= 0 { + log.Debugw("add with RBF", "oldpremium", exms.Message.GasPremium, + "newpremium", m.Message.GasPremium, "addr", m.Message.From, "nonce", m.Message.Nonce) + } else { + log.Debugf("add with duplicate nonce. message from %s with nonce %d already in mpool,"+ + " increase GasPremium to %s from %s to trigger replace by fee: %s", + m.Message.From, m.Message.Nonce, minPrice, m.Message.GasPremium, + ErrRBFTooLowPremium) + return false, xerrors.Errorf("message from %s with nonce %d already in mpool,"+ + " increase GasPremium to %s from %s to trigger replace by fee: %v", + m.Message.From, m.Message.Nonce, minPrice, m.Message.GasPremium, + ErrRBFTooLowPremium) + } + } else { + return false, xerrors.Errorf("message from %s with nonce %d already in mpool: %v", + m.Message.From, m.Message.Nonce, ErrSoftValidationFailure) + } + + ms.requiredFunds.Sub(ms.requiredFunds, exms.Message.RequiredFunds().Int) + //ms.requiredFunds.Sub(ms.requiredFunds, exms.Message.Value.Int) + } + + if !has && strict && len(ms.msgs) >= maxActorPendingMessages { + log.Errorf("too many pending messages from actor %s", m.Message.From) + return false, ErrTooManyPendingMessages + } + + if strict && nonceGap { + log.Debugf("adding nonce-gapped message from %s (nonce: %d, nextNonce: %d)", + m.Message.From, m.Message.Nonce, nextNonce) + } + + ms.nextNonce = nextNonce + ms.msgs[m.Message.Nonce] = m + ms.requiredFunds.Add(ms.requiredFunds, m.Message.RequiredFunds().Int) + //ms.requiredFunds.Add(ms.requiredFunds, m.Message.Value.Int) + + return !has, nil +} + +func (ms *msgSet) rm(nonce uint64, applied bool) { + m, has := ms.msgs[nonce] + if !has { + if applied && nonce >= ms.nextNonce { + // we removed a message we did not know about because it was applied + // we need to adjust the nonce and check if we filled a gap + ms.nextNonce = nonce + 1 + for _, fillGap := ms.msgs[ms.nextNonce]; fillGap; _, fillGap = ms.msgs[ms.nextNonce] { + ms.nextNonce++ + } + } + return + } + + ms.requiredFunds.Sub(ms.requiredFunds, m.Message.RequiredFunds().Int) + //ms.requiredFunds.Sub(ms.requiredFunds, m.Message.Value.Int) + delete(ms.msgs, nonce) + + // adjust next nonce + if applied { + // we removed a (known) message because it was applied in a tipset + // we can't possibly have filled a gap in this case + if nonce >= ms.nextNonce { + ms.nextNonce = nonce + 1 + } + return + } + + // we removed a message because it was pruned + // we have to adjust the nonce if it creates a gap or rewinds state + if nonce < ms.nextNonce { + ms.nextNonce = nonce + } +} + +func (ms *msgSet) getRequiredFunds(nonce uint64) big.Int { + requiredFunds := new(stdbig.Int).Set(ms.requiredFunds) + + m, has := ms.msgs[nonce] + if has { + requiredFunds.Sub(requiredFunds, m.Message.RequiredFunds().Int) + //requiredFunds.Sub(requiredFunds, m.Message.Value.Int) + } + + return big.Int{Int: requiredFunds} +} + +func (ms *msgSet) toSlice() []*types.SignedMessage { + set := make([]*types.SignedMessage, 0, len(ms.msgs)) + + for _, m := range ms.msgs { + set = append(set, m) + } + + sort.Slice(set, func(i, j int) bool { + return set[i].Message.Nonce < set[j].Message.Nonce + }) + + return set +} + +func New(ctx context.Context, + api Provider, + sm *statemanger.Stmgr, + ds repo.Datastore, + forkParams *config.ForkUpgradeConfig, + mpoolCfg *config.MessagePoolConfig, + netName string, + j journal.Journal, +) (*MessagePool, error) { + cache, _ := lru.New2Q(constants.BlsSignatureCacheSize) + verifcache, _ := lru.New2Q(constants.VerifSigCacheSize) + + cfg, err := loadConfig(ctx, ds) + if err != nil { + return nil, xerrors.Errorf("error loading mpool config: %v", err) + } + + if j == nil { + j = journal.NilJournal() + } + + mp := &MessagePool{ + ds: ds, + addSema: make(chan struct{}, 1), + closer: make(chan struct{}), + repubTk: constants.Clock.Ticker(RepublishInterval), + repubTrigger: make(chan struct{}, 1), + localAddrs: make(map[address.Address]struct{}), + pending: make(map[address.Address]*msgSet), + keyCache: make(map[address.Address]address.Address), + minGasPrice: big.NewInt(0), + pruneTrigger: make(chan struct{}, 1), + pruneCooldown: make(chan struct{}, 1), + blsSigCache: cache, + sigValCache: verifcache, + changes: lps.New(50), + localMsgs: namespace.Wrap(ds, datastore.NewKey(localMsgsDs)), + api: api, + sm: sm, + netName: netName, + cfg: cfg, + evtTypes: [...]journal.EventType{ + evtTypeMpoolAdd: j.RegisterEventType("mpool", "add"), + evtTypeMpoolRemove: j.RegisterEventType("mpool", "remove"), + evtTypeMpoolRepub: j.RegisterEventType("mpool", "repub"), + }, + journal: j, + forkParams: forkParams, + gasPriceSchedule: gas.NewPricesSchedule(forkParams), + GetMaxFee: newDefaultMaxFeeFunc(mpoolCfg.MaxFee), + PriceCache: NewGasPriceCache(), + } + + // enable initial prunes + mp.pruneCooldown <- struct{}{} + + ctx, cancel := context.WithCancel(context.TODO()) + + // load the current tipset and subscribe to head changes _before_ loading local messages + mp.curTS = api.SubscribeHeadChanges(ctx, func(rev, app []*types.TipSet) error { + err := mp.HeadChange(ctx, rev, app) + if err != nil { + log.Errorf("mpool head notif handler error: %+v", err) + } + return err + }) + + mp.curTSLk.Lock() + mp.lk.Lock() + + go func() { + defer cancel() + err := mp.loadLocal(ctx) + + mp.lk.Unlock() + mp.curTSLk.Unlock() + + if err != nil { + log.Errorf("loading local messages: %+v", err) + } + + log.Info("mpool ready") + + mp.runLoop(ctx) + }() + + return mp, nil +} + +func (mp *MessagePool) resolveToKey(ctx context.Context, addr address.Address) (address.Address, error) { + // check the cache + a, f := mp.keyCache[addr] + if f { + return a, nil + } + + // resolve the address + ka, err := mp.api.StateAccountKeyAtFinality(ctx, addr, mp.curTS) + if err != nil { + return address.Undef, err + } + + // place both entries in the cache (may both be key addresses, which is fine) + mp.keyCache[addr] = ka + mp.keyCache[ka] = ka + + return ka, nil +} + +func (mp *MessagePool) getPendingMset(ctx context.Context, addr address.Address) (*msgSet, bool, error) { + ra, err := mp.resolveToKey(ctx, addr) + if err != nil { + return nil, false, err + } + + ms, f := mp.pending[ra] + + return ms, f, nil +} + +func (mp *MessagePool) setPendingMset(ctx context.Context, addr address.Address, ms *msgSet) error { + ra, err := mp.resolveToKey(ctx, addr) + if err != nil { + return err + } + + mp.pending[ra] = ms + + return nil +} + +// This method isn't strictly necessary, since it doesn't resolve any addresses, but it's safer to have +func (mp *MessagePool) forEachPending(f func(address.Address, *msgSet)) { + for la, ms := range mp.pending { + f(la, ms) + } +} + +func (mp *MessagePool) deletePendingMset(ctx context.Context, addr address.Address) error { + ra, err := mp.resolveToKey(ctx, addr) + if err != nil { + return err + } + + delete(mp.pending, ra) + + return nil +} + +// This method isn't strictly necessary, since it doesn't resolve any addresses, but it's safer to have +func (mp *MessagePool) clearPending() { + mp.pending = make(map[address.Address]*msgSet) +} + +func (mp *MessagePool) isLocal(ctx context.Context, addr address.Address) (bool, error) { + ra, err := mp.resolveToKey(ctx, addr) + if err != nil { + return false, err + } + + _, f := mp.localAddrs[ra] + + return f, nil +} + +func (mp *MessagePool) setLocal(ctx context.Context, addr address.Address) error { + ra, err := mp.resolveToKey(ctx, addr) + if err != nil { + return err + } + + mp.localAddrs[ra] = struct{}{} + + return nil +} + +// This method isn't strictly necessary, since it doesn't resolve any addresses, but it's safer to have +func (mp *MessagePool) forEachLocal(ctx context.Context, f func(context.Context, address.Address)) { + for la := range mp.localAddrs { + f(ctx, la) + } +} + +func (mp *MessagePool) DeleteByAdress(address address.Address) error { + mp.lk.Lock() + defer mp.lk.Unlock() + + if mp.pending != nil { + mp.pending[address] = nil + } + return nil +} + +func (mp *MessagePool) PublishMsgForWallet(ctx context.Context, addr address.Address) error { + now := time.Now() + defer func() { + diff := time.Since(now).Seconds() + if diff > 1 { + log.Infof("publish msg wallet spent time:%f", diff) + } + }() + mp.curTSLk.Lock() + defer mp.curTSLk.Unlock() + + mp.lk.Lock() + defer mp.lk.Unlock() + + out := make([]*types.SignedMessage, 0) + for a := range mp.pending { + if a.String() == addr.String() { + out = append(out, mp.pendingFor(ctx, a)...) + break + } + } + + log.Infof("mpool has [%v] msg for [%s], will republish ...", len(out), addr.String()) + + // start to broadcast message through libp2p + for _, msg := range out { + msgb, err := msg.Serialize() + if err != nil { + log.Errorf("could not serialize: %s", err) + continue + } + + err = mp.api.PubSubPublish(ctx, msgsub.Topic(mp.netName), msgb) + if err != nil { + log.Errorf("could not publish: %s", err) + continue + } + } + + return nil +} + +func (mp *MessagePool) PublishMsg(ctx context.Context, smsg *types.SignedMessage) error { + msgb, err := smsg.Serialize() + if err != nil { + return xerrors.Errorf("could not serialize: %s", err) + } + + err = mp.api.PubSubPublish(ctx, msgsub.Topic(mp.netName), msgb) + if err != nil { + return xerrors.Errorf("could not publish: %s", err) + } + return nil +} + +func (mp *MessagePool) Close() error { + close(mp.closer) + return mp.journal.Close() +} + +func (mp *MessagePool) Prune() { + // this magic incantation of triggering prune thrice is here to make the Prune method + // synchronous: + // so, its a single slot buffered channel. The first send fills the channel, + // the second send goes through when the pruning starts, + // and the third send goes through (and noops) after the pruning finishes + // and goes through the loop again + mp.pruneTrigger <- struct{}{} + mp.pruneTrigger <- struct{}{} + mp.pruneTrigger <- struct{}{} +} + +func (mp *MessagePool) runLoop(ctx context.Context) { + for { + select { + case <-mp.repubTk.C: + if err := mp.republishPendingMessages(ctx); err != nil { + log.Errorf("error while republishing messages: %s", err) + } + case <-mp.repubTrigger: + if err := mp.republishPendingMessages(ctx); err != nil { + log.Errorf("error while republishing messages: %s", err) + } + + case <-mp.pruneTrigger: + if err := mp.pruneExcessMessages(); err != nil { + log.Errorf("failed to prune excess messages from mempool: %s", err) + } + + case <-mp.closer: + mp.repubTk.Stop() + return + } + } +} + +func (mp *MessagePool) addLocal(ctx context.Context, m *types.SignedMessage) error { + if err := mp.setLocal(ctx, m.Message.From); err != nil { + return err + } + + buf := new(bytes.Buffer) + err := m.MarshalCBOR(buf) + if err != nil { + return xerrors.Errorf("error serializing message: %v", err) + } + msgb := buf.Bytes() + + c := m.Cid() + if err := mp.localMsgs.Put(ctx, datastore.NewKey(string(c.Bytes())), msgb); err != nil { + return xerrors.Errorf("persisting local message: %v", err) + } + + return nil +} + +// verifyMsgBeforeAdd verifies that the message meets the minimum criteria for block inclusion +// and whether the message has enough funds to be included in the next 20 blocks. +// If the message is not valid for block inclusion, it returns an error. +// For local messages, if the message can be included in the next 20 blocks, it returns true to +// signal that it should be immediately published. If the message cannot be included in the next 20 +// blocks, it returns false so that the message doesn't immediately get published (and ignored by our +// peers); instead it will be published through the republish loop, once the base fee has fallen +// sufficiently. +// For non local messages, if the message cannot be included in the next 20 blocks it returns +// a (soft) validation error. +func (mp *MessagePool) verifyMsgBeforeAdd(m *types.SignedMessage, curTS *types.TipSet, local bool) (bool, error) { + epoch := curTS.Height() + minGas := mp.gasPriceSchedule.PricelistByEpoch(epoch).OnChainMessage(m.ChainLength()) + + if err := m.VMMessage().ValidForBlockInclusion(minGas.Total(), constants.NewestNetworkVersion); err != nil { + return false, xerrors.Errorf("message will not be included in a block: %v", err) + } + + // this checks if the GasFeeCap is sufficiently high for inclusion in the next 20 blocks + // if the GasFeeCap is too low, we soft reject the message (Ignore in pubsub) and rely + // on republish to push it through later, if the baseFee has fallen. + // this is a defensive check that stops minimum baseFee spam attacks from overloading validation + // queues. + // Note that for local messages, we always add them so that they can be accepted and republished + // automatically. + publish := local + + var baseFee big.Int + if len(curTS.Blocks()) > 0 { + baseFee = curTS.Blocks()[0].ParentBaseFee + } else { + var err error + baseFee, err = mp.api.ChainComputeBaseFee(context.TODO(), curTS) + if err != nil { + return false, xerrors.Errorf("computing basefee: %v", err) + } + } + + baseFeeLowerBound := getBaseFeeLowerBound(baseFee, baseFeeLowerBoundFactorConservative) + if m.Message.GasFeeCap.LessThan(baseFeeLowerBound) { + if local { + log.Warnf("local message will not be immediately published because GasFeeCap doesn't meet the lower bound for inclusion in the next 20 blocks (GasFeeCap: %s, baseFeeLowerBound: %s)", + m.Message.GasFeeCap, baseFeeLowerBound) + publish = false + } else { + return false, xerrors.Errorf("GasFeeCap doesn't meet base fee lower bound for inclusion in the next 20 blocks (GasFeeCap: %s, baseFeeLowerBound: %s): %v", + m.Message.GasFeeCap, baseFeeLowerBound, ErrSoftValidationFailure) + } + } + + return publish, nil +} + +func (mp *MessagePool) Push(ctx context.Context, m *types.SignedMessage) (cid.Cid, error) { + err := mp.checkMessage(m) + if err != nil { + return cid.Undef, err + } + + // serialize push access to reduce lock contention + mp.addSema <- struct{}{} + defer func() { + <-mp.addSema + }() + + mp.curTSLk.Lock() + publish, err := mp.addTS(ctx, m, mp.curTS, true, false) + if err != nil { + mp.curTSLk.Unlock() + return cid.Undef, err + } + mp.curTSLk.Unlock() + + if publish { + buf := new(bytes.Buffer) + err := m.MarshalCBOR(buf) + if err != nil { + return cid.Undef, xerrors.Errorf("error serializing message: %v", err) + } + + err = mp.api.PubSubPublish(ctx, msgsub.Topic(mp.netName), buf.Bytes()) + if err != nil { + return cid.Undef, xerrors.Errorf("error publishing message: %v", err) + } + } + + return m.Cid(), nil +} + +func (mp *MessagePool) checkMessage(m *types.SignedMessage) error { + // big messages are bad, anti DOS + if m.ChainLength() > MaxMessageSize { + return xerrors.Errorf("mpool message too large (%dB): %w", m.ChainLength(), ErrMessageTooBig) + } + + // Perform syntactic validation, minGas=0 as we check the actual mingas before we add it + if err := m.Message.ValidForBlockInclusion(0, constants.NewestNetworkVersion); err != nil { + return xerrors.Errorf("message not valid for block inclusion: %v", err) + } + + if m.Message.To == address.Undef { + return ErrInvalidToAddr + } + + if !m.Message.Value.LessThan(types.TotalFilecoinInt) { + return ErrMessageValueTooHigh + } + + if m.Message.GasFeeCap.LessThan(minimumBaseFee) { + return ErrGasFeeCapTooLow + } + + if err := mp.VerifyMsgSig(m); err != nil { + log.Warnf("signature verification failed: %s", err) + return err + } + + return nil +} + +func (mp *MessagePool) Add(ctx context.Context, m *types.SignedMessage) error { + err := mp.checkMessage(m) + if err != nil { + return err + } + + // serialize push access to reduce lock contention + mp.addSema <- struct{}{} + defer func() { + <-mp.addSema + }() + + mp.curTSLk.Lock() + defer mp.curTSLk.Unlock() + + _, err = mp.addTS(ctx, m, mp.curTS, false, false) + return err +} + +func sigCacheKey(m *types.SignedMessage) (string, error) { + switch m.Signature.Type { + case crypto.SigTypeBLS: + if len(m.Signature.Data) != crypto2.BLSSignatureBytes { + return "", fmt.Errorf("bls signature incorrectly sized") + } + + hashCache := blake2b.Sum256(append(m.Cid().Bytes(), m.Signature.Data...)) + return string(hashCache[:]), nil + case crypto.SigTypeSecp256k1: + return string(m.Cid().Bytes()), nil + default: + return "", xerrors.Errorf("unrecognized signature type: %d", m.Signature.Type) + } +} + +func (mp *MessagePool) VerifyMsgSig(m *types.SignedMessage) error { + sck, err := sigCacheKey(m) + if err != nil { + return err + } + + _, ok := mp.sigValCache.Get(sck) + if ok { + // already validated, great + return nil + } + + c := m.Message.Cid() + if err := crypto2.Verify(&m.Signature, m.Message.From, c.Bytes()); err != nil { + return err + } + + mp.sigValCache.Add(sck, struct{}{}) + + return nil +} + +func (mp *MessagePool) checkBalance(ctx context.Context, m *types.SignedMessage, curTS *types.TipSet) error { + balance, err := mp.getStateBalance(ctx, m.Message.From, curTS) + if err != nil { + return xerrors.Errorf("failed to check sender balance: %s: %v", err, ErrSoftValidationFailure) + } + + requiredFunds := m.Message.RequiredFunds() + if big.Cmp(balance, requiredFunds) < 0 { + return xerrors.Errorf("not enough funds (required: %s, balance: %s): %v", types.FIL(requiredFunds), types.FIL(balance), ErrNotEnoughFunds) + } + + // add Value for soft failure check + //requiredFunds = types.BigAdd(requiredFunds, m.Message.Value) + + mset, ok, err := mp.getPendingMset(ctx, m.Message.From) + if err != nil { + log.Debugf("mpoolcheckbalance failed to get pending mset: %s", err) + return err + } + + if ok { + requiredFunds = types.BigAdd(requiredFunds, mset.getRequiredFunds(m.Message.Nonce)) + } + + if big.Cmp(balance, requiredFunds) < 0 { + // Note: we fail here for ErrSoftValidationFailure to signal a soft failure because we might + // be out of sync. + return xerrors.Errorf("not enough funds including pending messages (required: %s, balance: %s): %v", types.FIL(requiredFunds), types.FIL(balance), ErrSoftValidationFailure) + } + + return nil +} + +func (mp *MessagePool) addTS(ctx context.Context, m *types.SignedMessage, curTS *types.TipSet, local, untrusted bool) (bool, error) { + snonce, err := mp.getStateNonce(ctx, m.Message.From, curTS) + if err != nil { + return false, xerrors.Errorf("failed to look up actor state nonce: %s: %v", err, ErrSoftValidationFailure) + } + + if snonce > m.Message.Nonce { + return false, xerrors.Errorf("minimum expected nonce is %d: %v", snonce, ErrNonceTooLow) + } + + mp.lk.Lock() + defer mp.lk.Unlock() + + publish, err := mp.verifyMsgBeforeAdd(m, curTS, local) + if err != nil { + return false, err + } + + if err := mp.checkBalance(ctx, m, curTS); err != nil { + return false, err + } + + err = mp.addLocked(ctx, m, !local, untrusted) + if err != nil { + return false, err + } + + if local { + err = mp.addLocal(ctx, m) + if err != nil { + return false, xerrors.Errorf("error persisting local message: %v", err) + } + } + + return publish, nil +} + +func (mp *MessagePool) addLoaded(ctx context.Context, m *types.SignedMessage) error { + err := mp.checkMessage(m) + if err != nil { + return err + } + + curTS := mp.curTS + + if curTS == nil { + return xerrors.Errorf("current tipset not loaded") + } + + snonce, err := mp.getStateNonce(ctx, m.Message.From, curTS) + if err != nil { + return xerrors.Errorf("failed to look up actor state nonce: %s: %v", err, ErrSoftValidationFailure) + } + + if snonce > m.Message.Nonce { + return xerrors.Errorf("minimum expected nonce is %d: %w", snonce, ErrNonceTooLow) + } + + _, err = mp.verifyMsgBeforeAdd(m, curTS, true) + if err != nil { + return err + } + + if err := mp.checkBalance(ctx, m, curTS); err != nil { + return err + } + + return mp.addLocked(ctx, m, false, false) +} + +func (mp *MessagePool) addSkipChecks(ctx context.Context, m *types.SignedMessage) error { + mp.lk.Lock() + defer mp.lk.Unlock() + + return mp.addLocked(ctx, m, false, false) +} + +func (mp *MessagePool) addLocked(ctx context.Context, m *types.SignedMessage, strict, untrusted bool) error { + log.Debugf("mpooladd: %s %d", m.Message.From, m.Message.Nonce) + if m.Signature.Type == crypto.SigTypeBLS { + mp.blsSigCache.Add(m.Cid(), m.Signature) + } + + if _, err := mp.api.PutMessage(ctx, m); err != nil { + log.Warnf("mpooladd sm.PutMessage failed: %s", err) + return err + } + + if _, err := mp.api.PutMessage(ctx, &m.Message); err != nil { + log.Warnf("mpooladd sm.PutMessage failed: %s", err) + return err + } + + // Note: If performance becomes an issue, making this getOrCreatePendingMset will save some work + mset, ok, err := mp.getPendingMset(ctx, m.Message.From) + if err != nil { + log.Debug(err) + return err + } + + if !ok { + nonce, err := mp.getStateNonce(ctx, m.Message.From, mp.curTS) + if err != nil { + return xerrors.Errorf("failed to get initial actor nonce: %w", err) + } + + mset = newMsgSet(nonce) + if err = mp.setPendingMset(ctx, m.Message.From, mset); err != nil { + return xerrors.Errorf("failed to set pending mset: %w", err) + } + } + + incr, err := mset.add(m, mp, strict, untrusted) + if err != nil { + log.Debug(err) + return err + } + + if incr { + mp.currentSize++ + if mp.currentSize > mp.cfg.SizeLimitHigh { + // send signal to prune messages if it hasnt already been sent + select { + case mp.pruneTrigger <- struct{}{}: + default: + } + } + } + + mp.changes.Pub(mptypes.MpoolUpdate{ + Type: mptypes.MpoolAdd, + Message: m, + }, localUpdates) + + mp.journal.RecordEvent(mp.evtTypes[evtTypeMpoolAdd], func() interface{} { + mc := m.Cid() + return MessagePoolEvt{ + Action: "add", + Messages: []MessagePoolEvtMessage{{Message: m.Message, CID: mc}}, + } + }) + + return nil +} + +func (mp *MessagePool) GetNonce(ctx context.Context, addr address.Address, _ types.TipSetKey) (uint64, error) { + mp.curTSLk.Lock() + defer mp.curTSLk.Unlock() + + mp.lk.Lock() + defer mp.lk.Unlock() + + return mp.getNonceLocked(ctx, addr, mp.curTS) +} + +// GetActor should not be used. It is only here to satisfy interface mess caused by lite node handling +func (mp *MessagePool) GetActor(ctx context.Context, addr address.Address, _ types.TipSetKey) (*types.Actor, error) { + mp.curTSLk.Lock() + defer mp.curTSLk.Unlock() + return mp.api.GetActorAfter(ctx, addr, mp.curTS) +} + +func (mp *MessagePool) getNonceLocked(ctx context.Context, addr address.Address, curTS *types.TipSet) (uint64, error) { + stateNonce, err := mp.getStateNonce(ctx, addr, curTS) // sanity check + if err != nil { + return 0, err + } + + mset, ok, err := mp.getPendingMset(ctx, addr) + if err != nil { + log.Debugf("mpoolgetnonce failed to get mset: %s", err) + return 0, err + } + + if ok { + if stateNonce > mset.nextNonce { + log.Errorf("state nonce was larger than mset.nextNonce (%d > %d)", stateNonce, mset.nextNonce) + + return stateNonce, nil + } + + return mset.nextNonce, nil + } + + return stateNonce, nil +} + +func (mp *MessagePool) getStateNonce(ctx context.Context, addr address.Address, curTS *types.TipSet) (uint64, error) { + act, err := mp.api.GetActorAfter(ctx, addr, curTS) + if err != nil { + return 0, err + } + + return act.Nonce, nil +} + +func (mp *MessagePool) getStateBalance(ctx context.Context, addr address.Address, ts *types.TipSet) (big.Int, error) { + act, err := mp.api.GetActorAfter(ctx, addr, ts) + if err != nil { + return big.Zero(), err + } + + return act.Balance, nil +} + +// this method is provided for the gateway to push messages. +// differences from Push: +// - strict checks are enabled +// - extra strict add checks are used when adding the messages to the msgSet +// that means: no nonce gaps, at most 10 pending messages for the actor +func (mp *MessagePool) PushUntrusted(ctx context.Context, m *types.SignedMessage) (cid.Cid, error) { + err := mp.checkMessage(m) + if err != nil { + return cid.Undef, err + } + + // serialize push access to reduce lock contention + mp.addSema <- struct{}{} + defer func() { + <-mp.addSema + }() + + mp.curTSLk.Lock() + publish, err := mp.addTS(ctx, m, mp.curTS, false, true) + if err != nil { + mp.curTSLk.Unlock() + return cid.Undef, err + } + mp.curTSLk.Unlock() + + if publish { + buf := new(bytes.Buffer) + err := m.MarshalCBOR(buf) + if err != nil { + return cid.Undef, xerrors.Errorf("error serializing message: %v", err) + } + + err = mp.api.PubSubPublish(ctx, msgsub.Topic(mp.netName), buf.Bytes()) + if err != nil { + return cid.Undef, xerrors.Errorf("error publishing message: %v", err) + } + } + + return m.Cid(), nil +} + +func (mp *MessagePool) Remove(ctx context.Context, from address.Address, nonce uint64, applied bool) { + mp.lk.Lock() + defer mp.lk.Unlock() + + mp.remove(ctx, from, nonce, applied) +} + +func (mp *MessagePool) remove(ctx context.Context, from address.Address, nonce uint64, applied bool) { + mset, ok, err := mp.getPendingMset(ctx, from) + if err != nil { + log.Debugf("mpoolremove failed to get mset: %s", err) + return + } + + if !ok { + return + } + + if m, ok := mset.msgs[nonce]; ok { + mp.changes.Pub(mptypes.MpoolUpdate{ + Type: mptypes.MpoolRemove, + Message: m, + }, localUpdates) + + mp.journal.RecordEvent(mp.evtTypes[evtTypeMpoolRemove], func() interface{} { + return MessagePoolEvt{ + Action: "remove", + Messages: []MessagePoolEvtMessage{{Message: m.Message, CID: m.Cid()}}} + }) + + mp.currentSize-- + } + + // NB: This deletes any message with the given nonce. This makes sense + // as two messages with the same sender cannot have the same nonce + mset.rm(nonce, applied) + + if len(mset.msgs) == 0 { + if err = mp.deletePendingMset(ctx, from); err != nil { + log.Debugf("mpoolremove failed to delete mset: %s", err) + return + } + } +} + +func (mp *MessagePool) Pending(ctx context.Context) ([]*types.SignedMessage, *types.TipSet) { + mp.curTSLk.Lock() + defer mp.curTSLk.Unlock() + + mp.lk.Lock() + defer mp.lk.Unlock() + + return mp.allPending(ctx) +} + +func (mp *MessagePool) allPending(ctx context.Context) ([]*types.SignedMessage, *types.TipSet) { + out := make([]*types.SignedMessage, 0) + mp.forEachPending(func(a address.Address, mset *msgSet) { + out = append(out, mset.toSlice()...) + }) + + return out, mp.curTS +} + +func (mp *MessagePool) PendingFor(ctx context.Context, a address.Address) ([]*types.SignedMessage, *types.TipSet) { + mp.curTSLk.Lock() + defer mp.curTSLk.Unlock() + + mp.lk.Lock() + defer mp.lk.Unlock() + return mp.pendingFor(ctx, a), mp.curTS +} + +func (mp *MessagePool) pendingFor(ctx context.Context, a address.Address) []*types.SignedMessage { + mset, ok, err := mp.getPendingMset(ctx, a) + if err != nil { + log.Debugf("mpoolpendingfor failed to get mset: %s", err) + return nil + } + + if mset == nil || !ok || len(mset.msgs) == 0 { + return nil + } + + return mset.toSlice() +} + +func (mp *MessagePool) HeadChange(ctx context.Context, revert []*types.TipSet, apply []*types.TipSet) error { + mp.curTSLk.Lock() + defer mp.curTSLk.Unlock() + + repubTrigger := false + rmsgs := make(map[address.Address]map[uint64]*types.SignedMessage) + add := func(m *types.SignedMessage) { + s, ok := rmsgs[m.Message.From] + if !ok { + s = make(map[uint64]*types.SignedMessage) + rmsgs[m.Message.From] = s + } + s[m.Message.Nonce] = m + } + rm := func(from address.Address, nonce uint64) { + s, ok := rmsgs[from] + if !ok { + mp.Remove(ctx, from, nonce, true) + return + } + + if _, ok := s[nonce]; ok { + delete(s, nonce) + return + } + + mp.Remove(ctx, from, nonce, true) + } + + maybeRepub := func(cid cid.Cid) { + if !repubTrigger { + mp.lk.Lock() + _, republished := mp.republished[cid] + mp.lk.Unlock() + if republished { + repubTrigger = true + } + } + } + + var merr error + + for _, ts := range revert { + tsKey := ts.Parents() + pts, err := mp.api.LoadTipSet(ctx, tsKey) + if err != nil { + log.Errorf("error loading reverted tipset parent: %s", err) + merr = multierror.Append(merr, err) + continue + } + + mp.curTS = pts + + msgs, err := mp.MessagesForBlocks(ctx, ts.Blocks()) + if err != nil { + log.Errorf("error retrieving messages for reverted block: %s", err) + merr = multierror.Append(merr, err) + continue + } + + for _, msg := range msgs { + add(msg) + } + } + + for _, ts := range apply { + mp.curTS = ts + + for _, b := range ts.Blocks() { + bmsgs, smsgs, err := mp.api.MessagesForBlock(ctx, b) + if err != nil { + xerr := xerrors.Errorf("failed to get messages for apply block %s(height %d) (msgroot = %s): %v", b.Cid(), b.Height, b.Messages, err) + log.Errorf("error retrieving messages for block: %s", xerr) + merr = multierror.Append(merr, xerr) + continue + } + + for _, msg := range smsgs { + rm(msg.Message.From, msg.Message.Nonce) + maybeRepub(msg.Cid()) + } + + for _, msg := range bmsgs { + rm(msg.From, msg.Nonce) + maybeRepub(msg.Cid()) + } + } + } + + if repubTrigger { + select { + case mp.repubTrigger <- struct{}{}: + default: + } + } + + for _, s := range rmsgs { + for _, msg := range s { + if err := mp.addSkipChecks(ctx, msg); err != nil { + log.Errorf("Failed to readd message from reorg to mpool: %s", err) + } + } + } + + if len(revert) > 0 && futureDebug { + mp.lk.Lock() + msgs, ts := mp.allPending(ctx) + mp.lk.Unlock() + + buckets := map[address.Address]*statBucket{} + + for _, v := range msgs { + bkt, ok := buckets[v.Message.From] + if !ok { + bkt = &statBucket{ + msgs: map[uint64]*types.SignedMessage{}, + } + buckets[v.Message.From] = bkt + } + + bkt.msgs[v.Message.Nonce] = v + } + + for a, bkt := range buckets { + // TODO that might not be correct with GatActorAfter but it is only debug code + act, err := mp.api.GetActorAfter(ctx, a, ts) + if err != nil { + log.Debugf("%s, err: %s\n", a, err) + continue + } + + var cmsg *types.SignedMessage + var ok bool + + cur := act.Nonce + for { + cmsg, ok = bkt.msgs[cur] + if !ok { + break + } + cur++ + } + + ff := uint64(math.MaxUint64) + for k := range bkt.msgs { + if k > cur && k < ff { + ff = k + } + } + + if ff != math.MaxUint64 { + m := bkt.msgs[ff] + mc := m.Cid() + + // cmsg can be nil if no messages from the current nonce are in the mpool + ccid := "nil" + if cmsg != nil { + ccid = cmsg.Cid().String() + } + + log.Debugw("Nonce gap", + "actor", a, + "future_cid", mc, + "future_nonce", ff, + "current_cid", ccid, + "current_nonce", cur, + "revert_tipset", revert[0].Key(), + "new_head", ts.Key(), + ) + } + } + } + + return merr +} + +func (mp *MessagePool) runHeadChange(ctx context.Context, from *types.TipSet, to *types.TipSet, rmsgs map[address.Address]map[uint64]*types.SignedMessage) error { + add := func(m *types.SignedMessage) { + s, ok := rmsgs[m.Message.From] + if !ok { + s = make(map[uint64]*types.SignedMessage) + rmsgs[m.Message.From] = s + } + s[m.Message.Nonce] = m + } + rm := func(from address.Address, nonce uint64) { + s, ok := rmsgs[from] + if !ok { + return + } + + if _, ok := s[nonce]; ok { + delete(s, nonce) + return + } + + } + + revert, apply, err := chain.ReorgOps(mp.api.LoadTipSet, from, to) + if err != nil { + return xerrors.Errorf("failed to compute reorg ops for mpool pending messages: %v", err) + } + + var merr error + + for _, ts := range revert { + msgs, err := mp.MessagesForBlocks(ctx, ts.Blocks()) + if err != nil { + log.Errorf("error retrieving messages for reverted block: %s", err) + merr = multierror.Append(merr, err) + continue + } + + for _, msg := range msgs { + add(msg) + } + } + + for _, ts := range apply { + for _, b := range ts.Blocks() { + bmsgs, smsgs, err := mp.api.MessagesForBlock(context.TODO(), b) + if err != nil { + xerr := xerrors.Errorf("failed to get messages for apply block %s(height %d) (msgroot = %s): %v", b.Cid(), b.Height, b.Messages, err) + log.Errorf("error retrieving messages for block: %s", xerr) + merr = multierror.Append(merr, xerr) + continue + } + + for _, msg := range smsgs { + rm(msg.Message.From, msg.Message.Nonce) + } + + for _, msg := range bmsgs { + rm(msg.From, msg.Nonce) + } + } + } + + return merr +} + +type statBucket struct { + msgs map[uint64]*types.SignedMessage +} + +func (mp *MessagePool) MessagesForBlocks(ctx context.Context, blks []*types.BlockHeader) ([]*types.SignedMessage, error) { + out := make([]*types.SignedMessage, 0) + + for _, b := range blks { + bmsgs, smsgs, err := mp.api.MessagesForBlock(ctx, b) + if err != nil { + return nil, xerrors.Errorf("failed to get messages for apply block %s(height %d) (msgroot = %s): %v", b.Cid(), b.Height, b.Messages, err) + } + out = append(out, smsgs...) + + for _, msg := range bmsgs { + smsg := mp.RecoverSig(msg) + if smsg != nil { + out = append(out, smsg) + } else { + log.Debugf("could not recover signature for bls message %s", msg.Cid()) + } + } + } + + return out, nil +} + +func (mp *MessagePool) RecoverSig(msg *types.Message) *types.SignedMessage { + val, ok := mp.blsSigCache.Get(msg.Cid()) + if !ok { + return nil + } + sig, ok := val.(crypto.Signature) + if !ok { + log.Errorf("value in signature cache was not a signature (got %T)", val) + return nil + } + + return &types.SignedMessage{ + Message: *msg, + Signature: sig, + } +} + +func (mp *MessagePool) Updates(ctx context.Context) (<-chan mptypes.MpoolUpdate, error) { + out := make(chan mptypes.MpoolUpdate, 20) + sub := mp.changes.Sub(localUpdates) + + go func() { + defer mp.changes.Unsub(sub, localUpdates) + defer close(out) + + for { + select { + case u := <-sub: + select { + case out <- u.(mptypes.MpoolUpdate): + case <-ctx.Done(): + return + case <-mp.closer: + return + } + case <-ctx.Done(): + return + case <-mp.closer: + return + } + } + }() + + return out, nil +} + +func (mp *MessagePool) loadLocal(ctx context.Context) error { + if val := os.Getenv("VENUS_DISABLE_LOCAL_MESSAGE"); val != "" { + log.Warnf("receive environment to disable local local message") + return nil + } + + res, err := mp.localMsgs.Query(ctx, query.Query{}) + if err != nil { + return xerrors.Errorf("query local messages: %v", err) + } + + for r := range res.Next() { + if r.Error != nil { + return xerrors.Errorf("r.Error: %v", r.Error) + } + + var sm types.SignedMessage + if err := sm.UnmarshalCBOR(bytes.NewReader(r.Value)); err != nil { + return xerrors.Errorf("unmarshaling local message: %v", err) + } + + if err := mp.addLoaded(ctx, &sm); err != nil { + if xerrors.Is(err, ErrNonceTooLow) { + continue // todo: drop the message from local cache (if above certain confidence threshold) + } + + log.Errorf("adding local message: %+v", err) + } + + if err = mp.setLocal(ctx, sm.Message.From); err != nil { + log.Debugf("mpoolloadLocal errored: %s", err) + return err + } + } + + return nil +} + +func (mp *MessagePool) Clear(ctx context.Context, local bool) { + mp.lk.Lock() + defer mp.lk.Unlock() + + // remove everything if local is true, including removing local messages from + // the datastore + if local { + mp.forEachLocal(ctx, func(ctx context.Context, la address.Address) { + mset, ok, err := mp.getPendingMset(ctx, la) + if err != nil { + log.Warnf("errored while getting pending mset: %w", err) + return + } + + if ok { + for _, m := range mset.msgs { + err := mp.localMsgs.Delete(ctx, datastore.NewKey(string(m.Cid().Bytes()))) + if err != nil { + log.Warnf("error deleting local message: %s", err) + } + } + } + }) + + mp.clearPending() + mp.republished = nil + + return + } + + mp.forEachPending(func(a address.Address, ms *msgSet) { + isLocal, err := mp.isLocal(ctx, a) + if err != nil { + log.Warnf("errored while determining isLocal: %w", err) + return + } + + if isLocal { + return + } + + if err = mp.deletePendingMset(ctx, a); err != nil { + log.Warnf("errored while deleting mset: %w", err) + return + } + }) +} + +func getBaseFeeLowerBound(baseFee, factor big.Int) big.Int { + baseFeeLowerBound := big.Div(baseFee, factor) + if big.Cmp(baseFeeLowerBound, minimumBaseFee) < 0 { + baseFeeLowerBound = minimumBaseFee + } + + return baseFeeLowerBound +} diff --git a/pkg/messagepool/messagepool_test.go b/pkg/messagepool/messagepool_test.go new file mode 100644 index 0000000000..f95e2ff30d --- /dev/null +++ b/pkg/messagepool/messagepool_test.go @@ -0,0 +1,811 @@ +package messagepool + +import ( + "context" + "fmt" + "sort" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + tbig "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + logging "github.com/ipfs/go-log/v2" + "github.com/stretchr/testify/assert" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/crypto" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" + "github.com/filecoin-project/venus/pkg/messagepool/gasguess" + "github.com/filecoin-project/venus/pkg/repo" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/wallet" + types "github.com/filecoin-project/venus/venus-shared/chain" + wtypes "github.com/filecoin-project/venus/venus-shared/wallet" +) + +func init() { + _ = logging.SetLogLevel("*", "INFO") +} + +type testMpoolAPI struct { + cb func(rev, app []*types.TipSet) error + + bmsgs map[cid.Cid][]*types.SignedMessage + statenonce map[address.Address]uint64 + balance map[address.Address]tbig.Int + + tipsets []*types.TipSet + + published int + + baseFee tbig.Int +} + +func mkAddress(i uint64) address.Address { + a, err := address.NewIDAddress(i) + if err != nil { + panic(err) + } + return a +} + +func mkMessage(from, to address.Address, nonce uint64, w *wallet.Wallet) *types.SignedMessage { + msg := &types.Message{ + To: to, + From: from, + Value: tbig.NewInt(1), + Nonce: nonce, + GasLimit: 1000000, + GasFeeCap: tbig.NewInt(100), + GasPremium: tbig.NewInt(1), + } + + c := msg.Cid() + sig, err := w.WalletSign(context.Background(), from, c.Bytes(), wtypes.MsgMeta{}) + if err != nil { + panic(err) + } + return &types.SignedMessage{ + Message: *msg, + Signature: *sig, + } +} + +func mkBlock(parents *types.TipSet, weightInc int64, ticketNonce uint64) *types.BlockHeader { + addr := mkAddress(123561) + + c, err := cid.Decode("bafyreicmaj5hhoy5mgqvamfhgexxyergw7hdeshizghodwkjg6qmpoco7i") + if err != nil { + panic(err) + } + + pstateRoot := c + if parents != nil { + pstateRoot = parents.Blocks()[0].ParentStateRoot + } + + var height abi.ChainEpoch + var tsKey types.TipSetKey + weight := tbig.NewInt(weightInc) + var timestamp uint64 + if parents != nil { + height = parents.Height() + height = height + 1 + timestamp = parents.MinTimestamp() + constants.MainNetBlockDelaySecs + weight = tbig.Add(parents.Blocks()[0].ParentWeight, weight) + tsKey = parents.Key() + } + + return &types.BlockHeader{ + Miner: addr, + ElectionProof: &types.ElectionProof{ + VRFProof: []byte(fmt.Sprintf("====%d=====", ticketNonce)), + }, + Ticket: &types.Ticket{ + VRFProof: []byte(fmt.Sprintf("====%d=====", ticketNonce)), + }, + Parents: tsKey.Cids(), + ParentMessageReceipts: c, + BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte("boo! im a signature")}, + ParentWeight: weight, + Messages: c, + Height: height, + Timestamp: timestamp, + ParentStateRoot: pstateRoot, + BlockSig: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte("boo! im a signature")}, + ParentBaseFee: tbig.NewInt(int64(constants.MinimumBaseFee)), + } +} + +func mkTipSet(blks ...*types.BlockHeader) *types.TipSet { + ts, err := types.NewTipSet(blks) + if err != nil { + panic(err) + } + return ts +} + +func newTestMpoolAPI() *testMpoolAPI { + tma := &testMpoolAPI{ + bmsgs: make(map[cid.Cid][]*types.SignedMessage), + statenonce: make(map[address.Address]uint64), + balance: make(map[address.Address]tbig.Int), + baseFee: tbig.NewInt(100), + } + genesis := mkBlock(nil, 1, 1) + tma.tipsets = append(tma.tipsets, mkTipSet(genesis)) + return tma +} + +func (tma *testMpoolAPI) nextBlock() *types.BlockHeader { + newBlk := mkBlock(tma.tipsets[len(tma.tipsets)-1], 1, 1) + tma.tipsets = append(tma.tipsets, mkTipSet(newBlk)) + return newBlk +} + +func (tma *testMpoolAPI) nextBlockWithHeight(height uint64) *types.BlockHeader { + newBlk := mkBlock(tma.tipsets[len(tma.tipsets)-1], 1, 1) + newBlk.Height = abi.ChainEpoch(height) + tma.tipsets = append(tma.tipsets, mkTipSet(newBlk)) + return newBlk +} + +func (tma *testMpoolAPI) applyBlock(t *testing.T, b *types.BlockHeader) { + t.Helper() + if err := tma.cb(nil, []*types.TipSet{mkTipSet(b)}); err != nil { + t.Fatal(err) + } +} + +func (tma *testMpoolAPI) revertBlock(t *testing.T, b *types.BlockHeader) { + t.Helper() + if err := tma.cb([]*types.TipSet{mkTipSet(b)}, nil); err != nil { + t.Fatal(err) + } +} + +func (tma *testMpoolAPI) setStateNonce(addr address.Address, v uint64) { + tma.statenonce[addr] = v +} + +func (tma *testMpoolAPI) setBalance(addr address.Address, v uint64) { + tma.balance[addr] = types.FromFil(v) +} + +func (tma *testMpoolAPI) setBalanceRaw(addr address.Address, v tbig.Int) { + tma.balance[addr] = v +} + +func (tma *testMpoolAPI) setBlockMessages(h *types.BlockHeader, msgs ...*types.SignedMessage) { + tma.bmsgs[h.Cid()] = msgs +} + +func (tma *testMpoolAPI) ChainHead(ctx context.Context) (*types.TipSet, error) { + return &types.TipSet{}, nil +} + +func (tma *testMpoolAPI) ChainTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) { + return &types.TipSet{}, nil +} + +func (tma *testMpoolAPI) SubscribeHeadChanges(ctx context.Context, cb func(rev, app []*types.TipSet) error) *types.TipSet { + tma.cb = cb + return tma.tipsets[0] +} + +func (tma *testMpoolAPI) PutMessage(ctx context.Context, m types.ChainMsg) (cid.Cid, error) { + return cid.Undef, nil +} + +func (tma *testMpoolAPI) IsLite() bool { + return false +} + +func (tma *testMpoolAPI) PubSubPublish(context.Context, string, []byte) error { + tma.published++ + return nil +} + +func (tma *testMpoolAPI) GetActorAfter(ctx context.Context, addr address.Address, ts *types.TipSet) (*types.Actor, error) { + // regression check for load bug + if ts == nil { + panic("GetActorAfter called with nil tipset") + } + + balance, ok := tma.balance[addr] + if !ok { + balance = tbig.NewInt(1000e6) + tma.balance[addr] = balance + } + + msgs := make([]*types.SignedMessage, 0) + for _, b := range ts.Blocks() { + for _, m := range tma.bmsgs[b.Cid()] { + if m.Message.From == addr { + msgs = append(msgs, m) + } + } + } + + sort.Slice(msgs, func(i, j int) bool { + return msgs[i].Message.Nonce < msgs[j].Message.Nonce + }) + + nonce := tma.statenonce[addr] + + for _, m := range msgs { + if m.Message.Nonce != nonce { + break + } + nonce++ + } + + return &types.Actor{ + Code: builtin2.StorageMarketActorCodeID, + Nonce: nonce, + Balance: balance, + }, nil +} + +func (tma *testMpoolAPI) StateAccountKeyAtFinality(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) { + if addr.Protocol() != address.BLS && addr.Protocol() != address.SECP256K1 { + return address.Undef, fmt.Errorf("given address was not a key addr") + } + return addr, nil +} + +func (tma *testMpoolAPI) StateAccountKey(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) { + if addr.Protocol() != address.BLS && addr.Protocol() != address.SECP256K1 { + return address.Undef, fmt.Errorf("given address was not a key addr") + } + return addr, nil +} + +func (tma *testMpoolAPI) MessagesForBlock(ctx context.Context, h *types.BlockHeader) ([]*types.Message, []*types.SignedMessage, error) { + return nil, tma.bmsgs[h.Cid()], nil +} + +func (tma *testMpoolAPI) MessagesForTipset(ctx context.Context, ts *types.TipSet) ([]types.ChainMsg, error) { + if len(ts.Blocks()) != 1 { + panic("cant deal with multiblock tipsets in this test") + } + + bm, sm, err := tma.MessagesForBlock(ctx, ts.Blocks()[0]) + if err != nil { + return nil, err + } + + var out []types.ChainMsg + for _, m := range bm { + out = append(out, m) + } + + for _, m := range sm { + out = append(out, m) + } + + return out, nil +} + +func (tma *testMpoolAPI) LoadTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error) { + for _, ts := range tma.tipsets { + if tsk.Equals(ts.Key()) { + return ts, nil + } + } + + return nil, fmt.Errorf("tipset not found") +} + +func (tma *testMpoolAPI) ChainComputeBaseFee(ctx context.Context, ts *types.TipSet) (tbig.Int, error) { + return tma.baseFee, nil +} + +func assertNonce(t *testing.T, mp *MessagePool, addr address.Address, val uint64) { + tf.UnitTest(t) + + t.Helper() + n, err := mp.GetNonce(context.Background(), addr, types.EmptyTSK) + if err != nil { + t.Fatal(err) + } + + if n != val { + t.Fatalf("expected nonce of %d, got %d", val, n) + } +} + +func mustAdd(t *testing.T, mp *MessagePool, msg *types.SignedMessage) { + tf.UnitTest(t) + + t.Helper() + if err := mp.Add(context.TODO(), msg); err != nil { + t.Fatal(err) + } +} + +func newWalletAndMpool(t *testing.T, tma *testMpoolAPI) (*wallet.Wallet, *MessagePool) { + ds := datastore.NewMapDatastore() + + mp, err := New(context.Background(), tma, nil, ds, config.DefaultForkUpgradeParam, config.DefaultMessagePoolParam, "mptest", nil) + if err != nil { + t.Fatal(err) + } + + return newWallet(t), mp +} + +func newWallet(t *testing.T) *wallet.Wallet { + r := repo.NewInMemoryRepo() + backend, err := wallet.NewDSBackend(context.Background(), r.WalletDatastore(), r.Config().Wallet.PassphraseConfig, wallet.TestPassword) + assert.NoError(t, err) + + return wallet.New(backend) +} + +func TestMessagePool(t *testing.T) { + tf.UnitTest(t) + + tma := newTestMpoolAPI() + + w, mp := newWalletAndMpool(t, tma) + + a := tma.nextBlock() + + sender, err := w.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + target := mkAddress(1001) + + var msgs []*types.SignedMessage + for i := 0; i < 5; i++ { + msgs = append(msgs, mkMessage(sender, target, uint64(i), w)) + } + + tma.setStateNonce(sender, 0) + assertNonce(t, mp, sender, 0) + mustAdd(t, mp, msgs[0]) + assertNonce(t, mp, sender, 1) + mustAdd(t, mp, msgs[1]) + assertNonce(t, mp, sender, 2) + + tma.setBlockMessages(a, msgs[0], msgs[1]) + tma.applyBlock(t, a) + + assertNonce(t, mp, sender, 2) +} + +func TestCheckMessageBig(t *testing.T) { + + tma := newTestMpoolAPI() + + w, mp := newWalletAndMpool(t, tma) + from, err := w.NewAddress(context.Background(), address.SECP256K1) + assert.NoError(t, err) + + tma.setBalance(from, 1000e9) + + to := mkAddress(1001) + + { + msg := &types.Message{ + To: to, + From: from, + Value: types.NewInt(1), + Nonce: 0, + GasLimit: 50000000, + GasFeeCap: types.NewInt(100), + GasPremium: types.NewInt(1), + Params: make([]byte, 41<<10), // 41KiB payload + } + + sig, err := w.WalletSign(context.Background(), from, msg.Cid().Bytes(), wtypes.MsgMeta{}) + if err != nil { + panic(err) + } + sm := &types.SignedMessage{ + Message: *msg, + Signature: *sig, + } + mustAdd(t, mp, sm) + } + + { + msg := &types.Message{ + To: to, + From: from, + Value: types.NewInt(1), + Nonce: 0, + GasLimit: 50000000, + GasFeeCap: types.NewInt(100), + GasPremium: types.NewInt(1), + Params: make([]byte, 64<<10), // 64KiB payload + } + + sig, err := w.WalletSign(context.Background(), from, msg.Cid().Bytes(), wtypes.MsgMeta{}) + if err != nil { + panic(err) + } + sm := &types.SignedMessage{ + Message: *msg, + Signature: *sig, + } + err = mp.Add(context.TODO(), sm) + assert.ErrorIs(t, err, ErrMessageTooBig) + } +} + +func TestMessagePoolMessagesInEachBlock(t *testing.T) { + tf.UnitTest(t) + + tma := newTestMpoolAPI() + + w, mp := newWalletAndMpool(t, tma) + + a := tma.nextBlock() + + sender, err := w.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + target := mkAddress(1001) + + var msgs []*types.SignedMessage + for i := 0; i < 5; i++ { + m := mkMessage(sender, target, uint64(i), w) + msgs = append(msgs, m) + mustAdd(t, mp, m) + } + + tma.setStateNonce(sender, 0) + + tma.setBlockMessages(a, msgs[0], msgs[1]) + tma.applyBlock(t, a) + tsa := mkTipSet(a) + + _, _ = mp.Pending(context.TODO()) + + selm, _ := mp.SelectMessages(context.Background(), tsa, 1) + if len(selm) == 0 { + t.Fatal("should have returned the rest of the messages") + } +} + +func TestRevertMessages(t *testing.T) { + tf.UnitTest(t) + + futureDebug = true + defer func() { + futureDebug = false + }() + + tma := newTestMpoolAPI() + + w, mp := newWalletAndMpool(t, tma) + + a := tma.nextBlock() + b := tma.nextBlock() + + sender, err := w.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + target := mkAddress(1001) + + var msgs []*types.SignedMessage + for i := 0; i < 5; i++ { + msgs = append(msgs, mkMessage(sender, target, uint64(i), w)) + } + + tma.setBlockMessages(a, msgs[0]) + tma.setBlockMessages(b, msgs[1], msgs[2], msgs[3]) + + mustAdd(t, mp, msgs[0]) + mustAdd(t, mp, msgs[1]) + mustAdd(t, mp, msgs[2]) + mustAdd(t, mp, msgs[3]) + + tma.setStateNonce(sender, 0) + tma.applyBlock(t, a) + assertNonce(t, mp, sender, 4) + + tma.setStateNonce(sender, 1) + tma.applyBlock(t, b) + assertNonce(t, mp, sender, 4) + tma.setStateNonce(sender, 0) + tma.revertBlock(t, b) + + assertNonce(t, mp, sender, 4) + + p, _ := mp.Pending(context.TODO()) + fmt.Printf("%+v\n", p) + if len(p) != 3 { + t.Fatal("expected three messages in mempool") + } + +} + +func TestPruningSimple(t *testing.T) { + tf.UnitTest(t) + + oldMaxNonceGap := MaxNonceGap + MaxNonceGap = 1000 + defer func() { + MaxNonceGap = oldMaxNonceGap + }() + + tma := newTestMpoolAPI() + + w, mp := newWalletAndMpool(t, tma) + + a := tma.nextBlock() + tma.applyBlock(t, a) + + sender, err := w.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + tma.setBalance(sender, 1) // in FIL + target := mkAddress(1001) + + for i := 0; i < 5; i++ { + smsg := mkMessage(sender, target, uint64(i), w) + if err := mp.Add(context.TODO(), smsg); err != nil { + t.Fatal(err) + } + } + + for i := 10; i < 50; i++ { + smsg := mkMessage(sender, target, uint64(i), w) + if err := mp.Add(context.TODO(), smsg); err != nil { + t.Fatal(err) + } + } + + mp.cfg.SizeLimitHigh = 40 + mp.cfg.SizeLimitLow = 10 + + mp.Prune() + + msgs, _ := mp.Pending(context.TODO()) + if len(msgs) != 5 { + t.Fatal("expected only 5 messages in pool, got: ", len(msgs)) + } +} + +func TestLoadLocal(t *testing.T) { + tf.UnitTest(t) + + tma := newTestMpoolAPI() + ds := datastore.NewMapDatastore() + + mp, err := New(context.Background(), tma, nil, ds, config.DefaultForkUpgradeParam, config.DefaultMessagePoolParam, "mptest", nil) + if err != nil { + t.Fatal(err) + } + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + msgs := make(map[cid.Cid]struct{}) + for i := 0; i < 10; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1)) + c, err := mp.Push(context.TODO(), m) + if err != nil { + t.Fatal(err) + } + msgs[c] = struct{}{} + } + err = mp.Close() + if err != nil { + t.Fatal(err) + } + + mp, err = New(context.Background(), tma, nil, ds, config.DefaultForkUpgradeParam, config.DefaultMessagePoolParam, "mptest", nil) + if err != nil { + t.Fatal(err) + } + + pmsgs, _ := mp.Pending(context.TODO()) + if len(msgs) != len(pmsgs) { + t.Fatalf("expected %d messages, but got %d", len(msgs), len(pmsgs)) + } + + for _, m := range pmsgs { + c := m.Cid() + _, ok := msgs[c] + if !ok { + t.Fatal("unknown message") + } + + delete(msgs, c) + } + + if len(msgs) > 0 { + t.Fatalf("not all messages were laoded; missing %d messages", len(msgs)) + } +} + +func TestClearAll(t *testing.T) { + tf.UnitTest(t) + + tma := newTestMpoolAPI() + ds := datastore.NewMapDatastore() + + mp, err := New(context.Background(), tma, nil, ds, config.DefaultForkUpgradeParam, config.DefaultMessagePoolParam, "mptest", nil) + if err != nil { + t.Fatal(err) + } + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + for i := 0; i < 10; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1)) + _, err := mp.Push(context.TODO(), m) + if err != nil { + t.Fatal(err) + } + } + + for i := 0; i < 10; i++ { + m := makeTestMessage(w2, a2, a1, uint64(i), gasLimit, uint64(i+1)) + mustAdd(t, mp, m) + } + + mp.Clear(context.Background(), true) + + pending, _ := mp.Pending(context.TODO()) + if len(pending) > 0 { + t.Fatalf("cleared the mpool, but got %d pending messages", len(pending)) + } +} + +func TestClearNonLocal(t *testing.T) { + tf.UnitTest(t) + + tma := newTestMpoolAPI() + ds := datastore.NewMapDatastore() + + mp, err := New(context.Background(), tma, nil, ds, config.DefaultForkUpgradeParam, config.DefaultMessagePoolParam, "mptest", nil) + if err != nil { + t.Fatal(err) + } + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + for i := 0; i < 10; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1)) + _, err := mp.Push(context.TODO(), m) + if err != nil { + t.Fatal(err) + } + } + + for i := 0; i < 10; i++ { + m := makeTestMessage(w2, a2, a1, uint64(i), gasLimit, uint64(i+1)) + mustAdd(t, mp, m) + } + + mp.Clear(context.Background(), false) + + pending, _ := mp.Pending(context.TODO()) + if len(pending) != 10 { + t.Fatalf("expected 10 pending messages, but got %d instead", len(pending)) + } + + for _, m := range pending { + if m.Message.From != a1 { + t.Fatalf("expected message from %s but got one from %s instead", a1, m.Message.From) + } + } +} + +func TestUpdates(t *testing.T) { + tf.UnitTest(t) + + tma := newTestMpoolAPI() + ds := datastore.NewMapDatastore() + + mp, err := New(context.Background(), tma, nil, ds, config.DefaultForkUpgradeParam, config.DefaultMessagePoolParam, "mptest", nil) + if err != nil { + t.Fatal(err) + } + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + ctx, cancel := context.WithCancel(context.TODO()) + defer cancel() + + ch, err := mp.Updates(ctx) + if err != nil { + t.Fatal(err) + } + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + + for i := 0; i < 10; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1)) + _, err := mp.Push(context.TODO(), m) + if err != nil { + t.Fatal(err) + } + + _, ok := <-ch + if !ok { + t.Fatal("expected update, but got a closed channel instead") + } + } + + err = mp.Close() + if err != nil { + t.Fatal(err) + } + + _, ok := <-ch + if ok { + t.Fatal("expected closed channel, but got an update instead") + } +} diff --git a/pkg/messagepool/messagesigner.go b/pkg/messagepool/messagesigner.go new file mode 100644 index 0000000000..87953c873b --- /dev/null +++ b/pkg/messagepool/messagesigner.go @@ -0,0 +1,159 @@ +package messagepool + +import ( + "bytes" + "context" + "sync" + + "github.com/filecoin-project/venus/pkg/wallet" + types "github.com/filecoin-project/venus/venus-shared/chain" + mptypes "github.com/filecoin-project/venus/venus-shared/wallet" + + "github.com/ipfs/go-datastore" + "github.com/ipfs/go-datastore/namespace" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" +) + +const dsKeyActorNonce = "ActorNextNonce" + +type MpoolNonceAPI interface { + GetNonce(context.Context, address.Address, types.TipSetKey) (uint64, error) + GetActor(context.Context, address.Address, types.TipSetKey) (*types.Actor, error) +} + +// MessageSigner keeps track of nonces per address, and increments the nonce +// when signing a message +type MessageSigner struct { + wallet wallet.WalletIntersection + lk sync.Mutex + mpool MpoolNonceAPI + ds datastore.Batching +} + +func NewMessageSigner(wallet wallet.WalletIntersection, mpool MpoolNonceAPI, ds datastore.Batching) *MessageSigner { + ds = namespace.Wrap(ds, datastore.NewKey("/message-signer/")) + return &MessageSigner{ + wallet: wallet, + mpool: mpool, + ds: ds, + } +} + +// SignMessage increments the nonce for the message From address, and signs +// the message +func (ms *MessageSigner) SignMessage(ctx context.Context, msg *types.Message, cb func(*types.SignedMessage) error) (*types.SignedMessage, error) { + ms.lk.Lock() + defer ms.lk.Unlock() + + // Get the next message nonce + nonce, err := ms.nextNonce(ctx, msg.From) + if err != nil { + return nil, xerrors.Errorf("failed to create nonce: %w", err) + } + + // Sign the message with the nonce + msg.Nonce = nonce + + mb, err := msg.ToStorageBlock() + if err != nil { + return nil, xerrors.Errorf("serializing message: %w", err) + } + + sig, err := ms.wallet.WalletSign(ctx, msg.From, mb.Cid().Bytes(), mptypes.MsgMeta{ + Type: mptypes.MTChainMsg, + Extra: mb.RawData(), + }) + if err != nil { + return nil, xerrors.Errorf("failed to sign message: %w", err) + } + + // Callback with the signed message + smsg := &types.SignedMessage{ + Message: *msg, + Signature: *sig, + } + err = cb(smsg) + if err != nil { + return nil, err + } + + // If the callback executed successfully, write the nonce to the datastore + if err := ms.saveNonce(ctx, msg.From, nonce); err != nil { + return nil, xerrors.Errorf("failed to save nonce: %w", err) + } + + return smsg, nil +} + +// nextNonce gets the next nonce for the given address. +// If there is no nonce in the datastore, gets the nonce from the message pool. +func (ms *MessageSigner) nextNonce(ctx context.Context, addr address.Address) (uint64, error) { + // Nonces used to be created by the mempool and we need to support nodes + // that have mempool nonces, so first check the mempool for a nonce for + // this address. Note that the mempool returns the actor state's nonce + // by default. + nonce, err := ms.mpool.GetNonce(ctx, addr, types.EmptyTSK) + if err != nil { + return 0, xerrors.Errorf("failed to get nonce from mempool: %w", err) + } + + // Get the next nonce for this address from the datastore + addrNonceKey := ms.dstoreKey(addr) + dsNonceBytes, err := ms.ds.Get(ctx, addrNonceKey) + + switch { + case xerrors.Is(err, datastore.ErrNotFound): + // If a nonce for this address hasn't yet been created in the + // datastore, just use the nonce from the mempool + return nonce, nil + + case err != nil: + return 0, xerrors.Errorf("failed to get nonce from datastore: %w", err) + + default: + // There is a nonce in the datastore, so unmarshall it + maj, dsNonce, err := cbg.CborReadHeader(bytes.NewReader(dsNonceBytes)) + if err != nil { + return 0, xerrors.Errorf("failed to parse nonce from datastore: %w", err) + } + if maj != cbg.MajUnsignedInt { + return 0, xerrors.Errorf("bad cbor type parsing nonce from datastore") + } + + // The message pool nonce should be <= than the datastore nonce + if nonce <= dsNonce { + nonce = dsNonce + } else { + log.Warnf("mempool nonce was larger than datastore nonce (%d > %d)", nonce, dsNonce) + } + + return nonce, nil + } +} + +// saveNonce increments the nonce for this address and writes it to the +// datastore +func (ms *MessageSigner) saveNonce(ctx context.Context, addr address.Address, nonce uint64) error { + // Increment the nonce + nonce++ + + // Write the nonce to the datastore + addrNonceKey := ms.dstoreKey(addr) + buf := bytes.Buffer{} + _, err := buf.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, nonce)) + if err != nil { + return xerrors.Errorf("failed to marshall nonce: %w", err) + } + err = ms.ds.Put(ctx, addrNonceKey, buf.Bytes()) + if err != nil { + return xerrors.Errorf("failed to write nonce to datastore: %w", err) + } + return nil +} + +func (ms *MessageSigner) dstoreKey(addr address.Address) datastore.Key { + return datastore.KeyWithNamespaces([]string{dsKeyActorNonce, addr.String()}) +} diff --git a/pkg/messagepool/messagesigner_test.go b/pkg/messagepool/messagesigner_test.go new file mode 100644 index 0000000000..15bd2db492 --- /dev/null +++ b/pkg/messagepool/messagesigner_test.go @@ -0,0 +1,212 @@ +package messagepool + +import ( + "context" + "sync" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/pkg/wallet" + "github.com/ipfs/go-datastore" + ds_sync "github.com/ipfs/go-datastore/sync" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "golang.org/x/xerrors" + + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" + "github.com/filecoin-project/venus/pkg/repo" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type mockMpool struct { + lk sync.RWMutex + nonces map[address.Address]uint64 +} + +var _ MpoolNonceAPI = (*mockMpool)(nil) + +func newMockMpool() *mockMpool { + return &mockMpool{nonces: make(map[address.Address]uint64)} +} + +func (mp *mockMpool) setNonce(addr address.Address, nonce uint64) { + mp.lk.Lock() + defer mp.lk.Unlock() + + mp.nonces[addr] = nonce +} + +func (mp *mockMpool) GetNonce(_ context.Context, addr address.Address, _ types.TipSetKey) (uint64, error) { + mp.lk.RLock() + defer mp.lk.RUnlock() + + return mp.nonces[addr], nil +} +func (mp *mockMpool) GetActor(_ context.Context, addr address.Address, _ types.TipSetKey) (*types.Actor, error) { + panic("don't use it") +} + +func TestMessageSignerSignMessage(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + r := repo.NewInMemoryRepo() + backend, err := wallet.NewDSBackend(ctx, r.WalletDatastore(), r.Config().Wallet.PassphraseConfig, wallet.TestPassword) + assert.NoError(t, err) + + w := wallet.New(backend) + + from1, err := w.NewAddress(ctx, address.SECP256K1) + require.NoError(t, err) + from2, err := w.NewAddress(ctx, address.SECP256K1) + require.NoError(t, err) + to1, err := w.NewAddress(ctx, address.SECP256K1) + require.NoError(t, err) + to2, err := w.NewAddress(ctx, address.SECP256K1) + require.NoError(t, err) + + type msgSpec struct { + msg *types.Message + mpoolNonce [1]uint64 + expNonce uint64 + cbErr error + } + tests := []struct { + name string + msgs []msgSpec + }{{ + // No nonce yet in datastore + name: "no nonce yet", + msgs: []msgSpec{{ + msg: &types.Message{ + To: to1, + From: from1, + }, + expNonce: 0, + }}, + }, { + // Get nonce value of zero from mpool + name: "mpool nonce zero", + msgs: []msgSpec{{ + msg: &types.Message{ + To: to1, + From: from1, + }, + mpoolNonce: [1]uint64{0}, + expNonce: 0, + }}, + }, { + // Get non-zero nonce value from mpool + name: "mpool nonce set", + msgs: []msgSpec{{ + msg: &types.Message{ + To: to1, + From: from1, + }, + mpoolNonce: [1]uint64{5}, + expNonce: 5, + }, { + msg: &types.Message{ + To: to1, + From: from1, + }, + // Should adjust datastore nonce because mpool nonce is higher + mpoolNonce: [1]uint64{10}, + expNonce: 10, + }}, + }, { + // Nonce should increment independently for each address + name: "nonce increments per address", + msgs: []msgSpec{{ + msg: &types.Message{ + To: to1, + From: from1, + }, + expNonce: 0, + }, { + msg: &types.Message{ + To: to1, + From: from1, + }, + expNonce: 1, + }, { + msg: &types.Message{ + To: to2, + From: from2, + }, + mpoolNonce: [1]uint64{5}, + expNonce: 5, + }, { + msg: &types.Message{ + To: to2, + From: from2, + }, + expNonce: 6, + }, { + msg: &types.Message{ + To: to1, + From: from1, + }, + expNonce: 2, + }}, + }, { + name: "recover from callback error", + msgs: []msgSpec{{ + // No nonce yet in datastore + msg: &types.Message{ + To: to1, + From: from1, + }, + expNonce: 0, + }, { + // Increment nonce + msg: &types.Message{ + To: to1, + From: from1, + }, + expNonce: 1, + }, { + // Callback returns error + msg: &types.Message{ + To: to1, + From: from1, + }, + cbErr: xerrors.Errorf("err"), + }, { + // Callback successful, should increment nonce in datastore + msg: &types.Message{ + To: to1, + From: from1, + }, + expNonce: 2, + }}, + }} + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + mpool := newMockMpool() + ds := ds_sync.MutexWrap(datastore.NewMapDatastore()) + ms := NewMessageSigner(w, mpool, ds) + + for _, m := range tt.msgs { + if len(m.mpoolNonce) == 1 { + mpool.setNonce(m.msg.From, m.mpoolNonce[0]) + } + merr := m.cbErr + smsg, err := ms.SignMessage(ctx, m.msg, func(message *types.SignedMessage) error { + return merr + }) + + if m.cbErr != nil { + require.Error(t, err) + require.Nil(t, smsg) + } else { + require.NoError(t, err) + require.Equal(t, m.expNonce, smsg.Message.Nonce) + } + } + }) + } +} diff --git a/pkg/messagepool/provider.go b/pkg/messagepool/provider.go new file mode 100644 index 0000000000..d6ba9ae8a4 --- /dev/null +++ b/pkg/messagepool/provider.go @@ -0,0 +1,159 @@ +package messagepool + +import ( + "context" + "time" + + "github.com/filecoin-project/go-address" + tbig "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/statemanger" + "github.com/filecoin-project/venus/venus-shared/actors/policy" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + pubsub "github.com/libp2p/go-libp2p-pubsub" + "golang.org/x/xerrors" +) + +var ( + HeadChangeCoalesceMinDelay = 2 * time.Second + HeadChangeCoalesceMaxDelay = 6 * time.Second + HeadChangeCoalesceMergeInterval = time.Second +) + +type Provider interface { + ChainHead(ctx context.Context) (*types.TipSet, error) + ChainTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) + SubscribeHeadChanges(context.Context, func(rev, app []*types.TipSet) error) *types.TipSet + PutMessage(context.Context, types.ChainMsg) (cid.Cid, error) + PubSubPublish(context.Context, string, []byte) error + GetActorAfter(context.Context, address.Address, *types.TipSet) (*types.Actor, error) + StateAccountKeyAtFinality(context.Context, address.Address, *types.TipSet) (address.Address, error) + StateAccountKey(context.Context, address.Address, *types.TipSet) (address.Address, error) + MessagesForBlock(context.Context, *types.BlockHeader) ([]*types.Message, []*types.SignedMessage, error) + MessagesForTipset(context.Context, *types.TipSet) ([]types.ChainMsg, error) + LoadTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) + ChainComputeBaseFee(ctx context.Context, ts *types.TipSet) (tbig.Int, error) + IsLite() bool +} + +type mpoolProvider struct { + stmgr *statemanger.Stmgr + sm *chain.Store + cms *chain.MessageStore + config *config.NetworkParamsConfig + ps *pubsub.PubSub + + lite MpoolNonceAPI +} + +var _ Provider = (*mpoolProvider)(nil) + +func NewProvider(sm *statemanger.Stmgr, cs *chain.Store, cms *chain.MessageStore, cfg *config.NetworkParamsConfig, ps *pubsub.PubSub) Provider { + return &mpoolProvider{ + stmgr: sm, + sm: cs, + cms: cms, + config: cfg, + ps: ps, + } +} + +func NewProviderLite(sm *chain.Store, ps *pubsub.PubSub, noncer MpoolNonceAPI) Provider { + return &mpoolProvider{sm: sm, ps: ps, lite: noncer} +} + +func (mpp *mpoolProvider) IsLite() bool { + return mpp.lite != nil +} + +func (mpp *mpoolProvider) SubscribeHeadChanges(ctx context.Context, cb func(rev, app []*types.TipSet) error) *types.TipSet { + mpp.sm.SubscribeHeadChanges( + chain.WrapHeadChangeCoalescer( + cb, + HeadChangeCoalesceMinDelay, + HeadChangeCoalesceMaxDelay, + HeadChangeCoalesceMergeInterval, + )) + return mpp.sm.GetHead() +} + +func (mpp *mpoolProvider) ChainHead(context.Context) (*types.TipSet, error) { + return mpp.sm.GetHead(), nil +} + +func (mpp *mpoolProvider) ChainTipSet(ctx context.Context, key types.TipSetKey) (*types.TipSet, error) { + return mpp.sm.GetTipSet(ctx, key) +} + +func (mpp *mpoolProvider) PutMessage(ctx context.Context, m types.ChainMsg) (cid.Cid, error) { + return mpp.sm.PutMessage(ctx, m) +} + +func (mpp *mpoolProvider) PubSubPublish(ctx context.Context, k string, v []byte) error { + return mpp.ps.Publish(k, v) // nolint +} + +func (mpp *mpoolProvider) GetActorAfter(ctx context.Context, addr address.Address, ts *types.TipSet) (*types.Actor, error) { + if mpp.IsLite() { + n, err := mpp.lite.GetNonce(context.TODO(), addr, ts.Key()) + if err != nil { + return nil, xerrors.Errorf("getting nonce over lite: %w", err) + } + a, err := mpp.lite.GetActor(context.TODO(), addr, ts.Key()) + if err != nil { + return nil, xerrors.Errorf("getting actor over lite: %w", err) + } + a.Nonce = n + return a, nil + } + + st, err := mpp.sm.GetTipSetState(context.TODO(), ts) + if err != nil { + return nil, xerrors.Errorf("computing tipset state for GetActor: %v", err) + } + + act, found, err := st.GetActor(context.TODO(), addr) + if !found { + err = xerrors.New("actor not found") + } + + return act, err +} + +func (mpp *mpoolProvider) StateAccountKeyAtFinality(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) { + var err error + if ts.Height() > policy.ChainFinality { + ts, err = mpp.sm.GetTipSetByHeight(ctx, ts, ts.Height()-policy.ChainFinality, true) + if err != nil { + return address.Undef, xerrors.Errorf("failed to load lookback tipset: %w", err) + } + } + return mpp.stmgr.ResolveToKeyAddress(ctx, addr, ts) +} + +func (mpp *mpoolProvider) StateAccountKey(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) { + return mpp.stmgr.ResolveToKeyAddress(ctx, addr, ts) +} + +func (mpp *mpoolProvider) MessagesForBlock(ctx context.Context, h *types.BlockHeader) ([]*types.Message, []*types.SignedMessage, error) { + secpMsgs, blsMsgs, err := mpp.cms.LoadMetaMessages(context.TODO(), h.Messages) + return blsMsgs, secpMsgs, err +} + +func (mpp *mpoolProvider) MessagesForTipset(ctx context.Context, ts *types.TipSet) ([]types.ChainMsg, error) { + return mpp.cms.MessagesForTipset(ts) +} + +func (mpp *mpoolProvider) LoadTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error) { + return mpp.sm.GetTipSet(ctx, tsk) +} + +func (mpp *mpoolProvider) ChainComputeBaseFee(ctx context.Context, ts *types.TipSet) (tbig.Int, error) { + baseFee, err := mpp.cms.ComputeBaseFee(ctx, ts, mpp.config.ForkUpgradeParam) + if err != nil { + return tbig.NewInt(0), xerrors.Errorf("computing base fee at %s: %v", ts, err) + } + return baseFee, nil +} diff --git a/pkg/messagepool/pruning.go b/pkg/messagepool/pruning.go new file mode 100644 index 0000000000..373f715584 --- /dev/null +++ b/pkg/messagepool/pruning.go @@ -0,0 +1,118 @@ +package messagepool + +import ( + "context" + "sort" + "time" + + "github.com/filecoin-project/go-address" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" +) + +func (mp *MessagePool) pruneExcessMessages() error { + mp.curTSLk.Lock() + ts := mp.curTS + mp.curTSLk.Unlock() + + mp.lk.Lock() + defer mp.lk.Unlock() + + if mp.currentSize < mp.cfg.SizeLimitHigh { + return nil + } + + select { + case <-mp.pruneCooldown: + err := mp.pruneMessages(context.TODO(), ts) + go func() { + time.Sleep(mp.cfg.PruneCooldown) + mp.pruneCooldown <- struct{}{} + }() + return err + default: + return xerrors.New("cannot prune before cooldown") + } +} + +func (mp *MessagePool) pruneMessages(ctx context.Context, ts *types.TipSet) error { + start := time.Now() + defer func() { + log.Infof("message pruning took %s", time.Since(start)) + }() + + baseFee, err := mp.api.ChainComputeBaseFee(ctx, ts) + if err != nil { + return xerrors.Errorf("computing basefee: %v", err) + } + baseFeeLowerBound := getBaseFeeLowerBound(baseFee, baseFeeLowerBoundFactor) + + pending, _ := mp.getPendingMessages(ctx, ts, ts) + + // protected actors -- not pruned + protected := make(map[address.Address]struct{}) + + // we never prune priority addresses + for _, actor := range mp.cfg.PriorityAddrs { + pk, err := mp.resolveToKey(ctx, actor) + if err != nil { + log.Debugf("pruneMessages failed to resolve priority address: %s", err) + } + + protected[pk] = struct{}{} + } + + // we also never prune locally published messages + mp.forEachLocal(ctx, func(ctx context.Context, actor address.Address) { + protected[actor] = struct{}{} + }) + + // Collect all messages to track which ones to remove and create chains for block inclusion + pruneMsgs := make(map[cid.Cid]*types.SignedMessage, mp.currentSize) + keepCount := 0 + + var chains []*msgChain + for actor, mset := range pending { + // we never prune protected actors + _, keep := protected[actor] + if keep { + keepCount += len(mset) + continue + } + + // not a protected actor, track the messages and create chains + for _, m := range mset { + pruneMsgs[m.Message.Cid()] = m + } + actorChains := mp.createMessageChains(ctx, actor, mset, baseFeeLowerBound, ts) + chains = append(chains, actorChains...) + } + + // Sort the chains + sort.Slice(chains, func(i, j int) bool { + return chains[i].Before(chains[j]) + }) + + // Keep messages (remove them from pruneMsgs) from chains while we are under the low water mark + loWaterMark := mp.cfg.SizeLimitLow +keepLoop: + for _, chain := range chains { + for _, m := range chain.msgs { + if keepCount < loWaterMark { + delete(pruneMsgs, m.Message.Cid()) + keepCount++ + } else { + break keepLoop + } + } + } + + // and remove all messages that are still in pruneMsgs after processing the chains + log.Infof("Pruning %d messages", len(pruneMsgs)) + for _, m := range pruneMsgs { + mp.remove(ctx, m.Message.From, m.Message.Nonce, false) + } + + return nil +} diff --git a/pkg/messagepool/repub.go b/pkg/messagepool/repub.go new file mode 100644 index 0000000000..2d577bcd8e --- /dev/null +++ b/pkg/messagepool/repub.go @@ -0,0 +1,182 @@ +package messagepool + +import ( + "bytes" + "context" + "sort" + "time" + + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/messagepool/gasguess" + "github.com/filecoin-project/venus/pkg/net/msgsub" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +const repubMsgLimit = 30 + +var RepublishBatchDelay = 100 * time.Millisecond + +func (mp *MessagePool) republishPendingMessages(ctx context.Context) error { + mp.curTSLk.Lock() + ts := mp.curTS + + baseFee, err := mp.api.ChainComputeBaseFee(context.TODO(), ts) + if err != nil { + mp.curTSLk.Unlock() + return xerrors.Errorf("computing basefee: %v", err) + } + baseFeeLowerBound := getBaseFeeLowerBound(baseFee, baseFeeLowerBoundFactor) + + pending := make(map[address.Address]map[uint64]*types.SignedMessage) + mp.lk.Lock() + mp.republished = nil // clear this to avoid races triggering an early republish + for actor := range mp.localAddrs { + mset, ok := mp.pending[actor] + if !ok { + continue + } + if len(mset.msgs) == 0 { + continue + } + // we need to copy this while holding the lock to avoid races with concurrent modification + pend := make(map[uint64]*types.SignedMessage, len(mset.msgs)) + for nonce, m := range mset.msgs { + pend[nonce] = m + } + pending[actor] = pend + } + mp.lk.Unlock() + mp.curTSLk.Unlock() + + if len(pending) == 0 { + return nil + } + + var chains []*msgChain + for actor, mset := range pending { + // We use the baseFee lower bound for createChange so that we optimistically include + // chains that might become profitable in the next 20 blocks. + // We still check the lowerBound condition for individual messages so that we don't send + // messages that will be rejected by the mpool spam protector, so this is safe to do. + next := mp.createMessageChains(ctx, actor, mset, baseFeeLowerBound, ts) + chains = append(chains, next...) + } + + if len(chains) == 0 { + return nil + } + + sort.Slice(chains, func(i, j int) bool { + return chains[i].Before(chains[j]) + }) + + gasLimit := int64(constants.BlockGasLimit) + minGas := int64(gasguess.MinGas) + var msgs []*types.SignedMessage + +LOOP: + for i := 0; i < len(chains); { + chain := chains[i] + + // we can exceed this if we have picked (some) longer chain already + if len(msgs) > repubMsgLimit { + break + } + + // there is not enough gas for any message + if gasLimit <= minGas { + break + } + + // has the chain been invalidated? + if !chain.valid { + i++ + continue + } + + // does it fit in a block? + if chain.gasLimit <= gasLimit { + // check the baseFee lower bound -- only republish messages that can be included in the chain + // within the next 20 blocks. + for _, m := range chain.msgs { + if m.Message.GasFeeCap.LessThan(baseFeeLowerBound) { + chain.Invalidate() + continue LOOP + } + gasLimit -= m.Message.GasLimit + msgs = append(msgs, m) + } + + // we processed the whole chain, advance + i++ + continue + } + + // we can't fit the current chain but there is gas to spare + // trim it and push it down + chain.Trim(gasLimit, repubMsgLimit, mp, baseFee) + for j := i; j < len(chains)-1; j++ { + if chains[j].Before(chains[j+1]) { + break + } + chains[j], chains[j+1] = chains[j+1], chains[j] + } + } + + count := 0 + if len(msgs) > repubMsgLimit { + msgs = msgs[:repubMsgLimit] + } + + log.Infof("republishing %d messages", len(msgs)) + for _, m := range msgs { + buf := new(bytes.Buffer) + err := m.MarshalCBOR(buf) + if err != nil { + return xerrors.Errorf("cannot serialize message: %v", err) + } + + err = mp.api.PubSubPublish(ctx, msgsub.Topic(mp.netName), buf.Bytes()) + if err != nil { + return xerrors.Errorf("cannot publish: %v", err) + } + + count++ + + if count < len(msgs) { + // this delay is here to encourage the pubsub subsystem to process the messages serially + // and avoid creating nonce gaps because of concurrent validation. + time.Sleep(RepublishBatchDelay) + } + } + + if len(msgs) > 0 { + mp.journal.RecordEvent(mp.evtTypes[evtTypeMpoolRepub], func() interface{} { + msgsEv := make([]MessagePoolEvtMessage, 0, len(msgs)) + for _, m := range msgs { + msgsEv = append(msgsEv, MessagePoolEvtMessage{Message: m.Message, CID: m.Cid()}) + } + return MessagePoolEvt{ + Action: "repub", + Messages: msgsEv, + } + }) + } + + // track most recently republished messages + republished := make(map[cid.Cid]struct{}) + for _, m := range msgs[:count] { + republished[m.Cid()] = struct{}{} + } + + mp.lk.Lock() + // update the republished set so that we can trigger early republish from head changes + mp.republished = republished + mp.lk.Unlock() + + return nil +} diff --git a/pkg/messagepool/repub_test.go b/pkg/messagepool/repub_test.go new file mode 100644 index 0000000000..b8312565a1 --- /dev/null +++ b/pkg/messagepool/repub_test.go @@ -0,0 +1,70 @@ +package messagepool + +import ( + "context" + "testing" + "time" + + "github.com/filecoin-project/go-address" + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + "github.com/ipfs/go-datastore" + + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/messagepool/gasguess" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestRepubMessages(t *testing.T) { + tf.UnitTest(t) + + oldRepublishBatchDelay := RepublishBatchDelay + RepublishBatchDelay = time.Microsecond + defer func() { + RepublishBatchDelay = oldRepublishBatchDelay + }() + + tma := newTestMpoolAPI() + ds := datastore.NewMapDatastore() + + mp, err := New(context.Background(), tma, nil, ds, config.DefaultForkUpgradeParam, config.DefaultMessagePoolParam, "mptest", nil) + if err != nil { + t.Fatal(err) + } + + // the actors + ctx := context.Background() + w1 := newWallet(t) + a1, err := w1.NewAddress(ctx, address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(ctx, address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + + tma.setBalance(a1, 1) // in FIL + + for i := 0; i < 10; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1)) + _, err := mp.Push(context.TODO(), m) + if err != nil { + t.Fatal(err) + } + } + + if tma.published != 10 { + t.Fatalf("expected to have published 10 messages, but got %d instead", tma.published) + } + + mp.repubTrigger <- struct{}{} + time.Sleep(100 * time.Millisecond) + + if tma.published != 20 { + t.Fatalf("expected to have published 20 messages, but got %d instead", tma.published) + } +} diff --git a/pkg/messagepool/selection.go b/pkg/messagepool/selection.go new file mode 100644 index 0000000000..52ea248eed --- /dev/null +++ b/pkg/messagepool/selection.go @@ -0,0 +1,1071 @@ +package messagepool + +import ( + "context" + "math/big" + "math/rand" + "sort" + "time" + + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + tbig "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/messagepool/gasguess" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var bigBlockGasLimit = big.NewInt(constants.BlockGasLimit) + +const MaxBlocks = 15 + +type msgChain struct { + msgs []*types.SignedMessage + gasReward *big.Int + gasLimit int64 + gasPerf float64 + effPerf float64 + bp float64 + parentOffset float64 + valid bool + merged bool + next *msgChain + prev *msgChain + sigType crypto.SigType +} + +func (mp *MessagePool) SelectMessages(ctx context.Context, ts *types.TipSet, tq float64) ([]*types.SignedMessage, error) { + mp.curTSLk.Lock() + defer mp.curTSLk.Unlock() + + mp.lk.Lock() + defer mp.lk.Unlock() + + // Load messages for the target tipset; if it is the same as the current tipset in the mpool + // then this is just the pending messages + pending, err := mp.getPendingMessages(ctx, mp.curTS, ts) + if err != nil { + return nil, err + } + // if the ticket quality is high enough that the first block has higher probability + // than any other block, then we don't bother with optimal selection because the + // first block will always have higher effective performance + var sm *selectedMessages + if tq > 0.84 { + sm, err = mp.selectMessagesGreedy(ctx, mp.curTS, ts, pending) + } else { + sm, err = mp.selectMessagesOptimal(ctx, mp.curTS, ts, tq, pending) + } + + if err != nil { + return nil, err + } + + if sm == nil { + return nil, nil + } + + // one last sanity check + if len(sm.msgs) > constants.BlockMessageLimit { + log.Errorf("message selection chose too many messages %d > %d", len(sm.msgs), constants.BlockMessageLimit) + sm.msgs = sm.msgs[:constants.BlockMessageLimit] + } + + return sm.msgs, nil +} + +type selectedMessages struct { + msgs []*types.SignedMessage + gasLimit int64 + secpLimit int + blsLimit int +} + +// returns false if chain can't be added due to block constraints +func (sm *selectedMessages) tryToAdd(mc *msgChain) bool { + l := len(mc.msgs) + + if constants.BlockMessageLimit < l+len(sm.msgs) || sm.gasLimit < mc.gasLimit { + return false + } + + if mc.sigType == crypto.SigTypeBLS { + if sm.blsLimit < l { + return false + } + + sm.msgs = append(sm.msgs, mc.msgs...) + sm.blsLimit -= l + sm.gasLimit -= mc.gasLimit + } else if mc.sigType == crypto.SigTypeSecp256k1 { + if sm.secpLimit < l { + return false + } + + sm.msgs = append(sm.msgs, mc.msgs...) + sm.secpLimit -= l + sm.gasLimit -= mc.gasLimit + } + + // don't add the weird sigType msg, but otherwise proceed + return true +} + +// returns false if messages can't be added due to block constraints +// will trim / invalidate chain as appropriate +func (sm *selectedMessages) tryToAddWithDeps(mc *msgChain, mp *MessagePool, baseFee types.BigInt) bool { + // compute the dependencies that must be merged and the gas limit including deps + chainGasLimit := mc.gasLimit + chainMsgLimit := len(mc.msgs) + depGasLimit := int64(0) + depMsgLimit := 0 + smMsgLimit := 0 + + if mc.sigType == crypto.SigTypeBLS { + smMsgLimit = sm.blsLimit + } else if mc.sigType == crypto.SigTypeSecp256k1 { + smMsgLimit = sm.secpLimit + } else { + return false + } + + if smMsgLimit > constants.BlockMessageLimit-len(sm.msgs) { + smMsgLimit = constants.BlockMessageLimit - len(sm.msgs) + } + + var chainDeps []*msgChain + for curChain := mc.prev; curChain != nil && !curChain.merged; curChain = curChain.prev { + chainDeps = append(chainDeps, curChain) + chainGasLimit += curChain.gasLimit + chainMsgLimit += len(curChain.msgs) + depGasLimit += curChain.gasLimit + depMsgLimit += len(curChain.msgs) + } + + // the chain doesn't fit as-is, so trim / invalidate it and return false + if chainGasLimit > sm.gasLimit || chainMsgLimit > smMsgLimit { + + // it doesn't all fit; now we have to take into account the dependent chains before + // making a decision about trimming or invalidating. + // if the dependencies exceed the block limits, then we must invalidate the chain + // as it can never be included. + // Otherwise we can just trim and continue + if depGasLimit > sm.gasLimit || depMsgLimit >= smMsgLimit { + mc.Invalidate() + } else { + // dependencies fit, just trim it + mc.Trim(sm.gasLimit-depGasLimit, smMsgLimit-depMsgLimit, mp, baseFee) + } + + return false + } + + // the chain fits! include it together with all dependencies + for i := len(chainDeps) - 1; i >= 0; i-- { + curChain := chainDeps[i] + curChain.merged = true + sm.msgs = append(sm.msgs, curChain.msgs...) + } + + mc.merged = true + + sm.msgs = append(sm.msgs, mc.msgs...) + sm.gasLimit -= chainGasLimit + + if mc.sigType == crypto.SigTypeBLS { + sm.blsLimit -= chainMsgLimit + } else if mc.sigType == crypto.SigTypeSecp256k1 { + sm.secpLimit -= chainMsgLimit + } + + return true +} + +func (sm *selectedMessages) trimChain(mc *msgChain, mp *MessagePool, baseFee types.BigInt) { + msgLimit := constants.BlockMessageLimit - len(sm.msgs) + if mc.sigType == crypto.SigTypeBLS { + if msgLimit > sm.blsLimit { + msgLimit = sm.blsLimit + } + } else if mc.sigType == crypto.SigTypeSecp256k1 { + if msgLimit > sm.secpLimit { + msgLimit = sm.secpLimit + } + } + + if mc.gasLimit > sm.gasLimit || len(mc.msgs) > msgLimit { + mc.Trim(sm.gasLimit, msgLimit, mp, baseFee) + } +} + +func (mp *MessagePool) selectMessagesOptimal(ctx context.Context, curTS, ts *types.TipSet, tq float64, pending map[address.Address]map[uint64]*types.SignedMessage) (*selectedMessages, error) { + start := time.Now() + + baseFee, err := mp.api.ChainComputeBaseFee(context.TODO(), ts) + if err != nil { + return nil, xerrors.Errorf("computing basefee: %w", err) + } + + if len(pending) == 0 { + return nil, nil + } + + // defer only here so if we have no pending messages we don't spam + defer func() { + log.Infow("message selection done", "took", time.Since(start)) + }() + + // 0b. Select all priority messages that fit in the block + minGas := int64(gasguess.MinGas) + result := mp.selectPriorityMessages(ctx, pending, baseFee, ts) + + // have we filled the block? + if result.gasLimit < minGas || len(result.msgs) >= constants.BlockMessageLimit { + return result, nil + } + + // 1. Create a list of dependent message chains with maximal gas reward per limit consumed + startChains := time.Now() + var chains []*msgChain + for actor, mset := range pending { + next := mp.createMessageChains(ctx, actor, mset, baseFee, ts) + chains = append(chains, next...) + } + if dt := time.Since(startChains); dt > time.Millisecond { + log.Infow("create message chains done", "took", dt) + } + + // 2. Sort the chains + sort.Slice(chains, func(i, j int) bool { + return chains[i].Before(chains[j]) + }) + + if len(chains) != 0 && chains[0].gasPerf < 0 { + log.Warnw("all messages in mpool have non-positive gas performance", "bestGasPerf", chains[0].gasPerf) + return result, nil + } + + // 3. Partition chains into blocks (without trimming) + // we use the full blockGasLimit (as opposed to the residual gas limit from the + // priority message selection) as we have to account for what other block providers are doing + nextChain := 0 + partitions := make([][]*msgChain, MaxBlocks) + for i := 0; i < MaxBlocks && nextChain < len(chains); i++ { + gasLimit := int64(constants.BlockGasLimit) + msgLimit := constants.BlockMessageLimit + for nextChain < len(chains) { + chain := chains[nextChain] + nextChain++ + partitions[i] = append(partitions[i], chain) + gasLimit -= chain.gasLimit + msgLimit -= len(chain.msgs) + if gasLimit < minGas || msgLimit <= 0 { + break + } + } + + } + + // 4. Compute effective performance for each chain, based on the partition they fall into + // The effective performance is the gasPerf of the chain * block probability + blockProb := mp.blockProbabilities(tq) + effChains := 0 + for i := 0; i < MaxBlocks; i++ { + for _, chain := range partitions[i] { + chain.SetEffectivePerf(blockProb[i]) + } + effChains += len(partitions[i]) + } + + // nullify the effective performance of chains that don't fit in any partition + for _, chain := range chains[effChains:] { + chain.SetNullEffectivePerf() + } + + // 5. Resort the chains based on effective performance + sort.Slice(chains, func(i, j int) bool { + return chains[i].BeforeEffective(chains[j]) + }) + + // 6. Merge the head chains to produce the list of messages selected for inclusion + // subject to the residual block limits + // When a chain is merged in, all its previous dependent chains *must* also be + // merged in or we'll have a broken block + startMerge := time.Now() + last := len(chains) + for i, chain := range chains { + // did we run out of performing chains? + if chain.gasPerf < 0 { + break + } + + // has it already been merged? + if chain.merged { + continue + } + + if result.tryToAddWithDeps(chain, mp, baseFee) { + // adjust the effective performance for all subsequent chains + if next := chain.next; next != nil && next.effPerf > 0 { + next.effPerf += next.parentOffset + for next = next.next; next != nil && next.effPerf > 0; next = next.next { + next.setEffPerf() + } + } + + // re-sort to account for already merged chains and effective performance adjustments + // the sort *must* be stable or we end up getting negative gasPerfs pushed up. + sort.SliceStable(chains[i+1:], func(i, j int) bool { + return chains[i].BeforeEffective(chains[j]) + }) + + continue + } + + // we can't fit this chain and its dependencies because of block limits -- we are + // at the edge + last = i + break + } + if dt := time.Since(startMerge); dt > time.Millisecond { + log.Infow("merge message chains done", "took", dt) + } + + // 7. We have reached the edge of what can fit wholesale; if we still hae available + // gasLimit to pack some more chains, then trim the last chain and push it down. + // Trimming invalidates subsequent dependent chains so that they can't be selected + // as their dependency cannot be (fully) included. + // We do this in a loop because the blocker might have been inordinately large and + // we might have to do it multiple times to satisfy tail packing + startTail := time.Now() +tailLoop: + for result.gasLimit >= minGas && last < len(chains) { + + if !chains[last].valid { + last++ + continue tailLoop + } + + // trim if necessary + result.trimChain(chains[last], mp, baseFee) + + // push down if it hasn't been invalidated + if chains[last].valid { + for i := last; i < len(chains)-1; i++ { + if chains[i].BeforeEffective(chains[i+1]) { + break + } + chains[i], chains[i+1] = chains[i+1], chains[i] + } + } + + // select the next (valid and fitting) chain and its dependencies for inclusion + for _, chain := range chains[last:] { + // has the chain been invalidated? + if !chain.valid { + continue + } + + // has it already been merged? + if chain.merged { + continue + } + + // if gasPerf < 0 we have no more profitable chains + if chain.gasPerf < 0 { + break tailLoop + } + + if result.tryToAddWithDeps(chain, mp, baseFee) { + continue + } + + continue tailLoop + } + + // the merge loop ended after processing all the chains and we we probably have still + // gas to spare; end the loop. + break + } + if dt := time.Since(startTail); dt > time.Millisecond { + log.Infow("pack tail chains done", "took", dt) + } + + // if we have room to spare, pick some random (non-negative) chains to fill the block + // we pick randomly so that we minimize the probability of duplication among all block producers + if result.gasLimit >= minGas && len(result.msgs) <= constants.BlockMessageLimit { + preRandomLength := len(result.msgs) + + startRandom := time.Now() + shuffleChains(chains) + + for _, chain := range chains { + // have we filled the block + if result.gasLimit < minGas || len(result.msgs) >= constants.BlockMessageLimit { + break + } + + // has it been merged or invalidated? + if chain.merged || !chain.valid { + continue + } + + // is it negative? + if chain.gasPerf < 0 { + continue + } + + if result.tryToAddWithDeps(chain, mp, baseFee) { + continue + } + + if chain.valid { + // chain got trimmed on the previous call to tryToAddWithDeps, can now be included + result.tryToAddWithDeps(chain, mp, baseFee) + continue + } + } + + if dt := time.Since(startRandom); dt > time.Millisecond { + log.Infow("pack random tail chains done", "took", dt) + } + + if len(result.msgs) != preRandomLength { + log.Warnf("optimal selection failed to pack a block; picked %d messages with random selection", + len(result.msgs)-preRandomLength) + } + } + + return result, nil +} + +func (mp *MessagePool) selectMessagesGreedy(ctx context.Context, curTS, ts *types.TipSet, pending map[address.Address]map[uint64]*types.SignedMessage) (*selectedMessages, error) { + start := time.Now() + + baseFee, err := mp.api.ChainComputeBaseFee(context.TODO(), ts) + if err != nil { + return nil, xerrors.Errorf("computing basefee: %w", err) + } + + if len(pending) == 0 { + return nil, nil + } + + // defer only here so if we have no pending messages we don't spam + defer func() { + log.Infow("message selection done", "took", time.Since(start)) + }() + + // 0b. Select all priority messages that fit in the block + minGas := int64(gasguess.MinGas) + result := mp.selectPriorityMessages(ctx, pending, baseFee, ts) + + // have we filled the block? + if result.gasLimit < minGas || len(result.msgs) > constants.BlockMessageLimit { + return result, nil + } + + // 1. Create a list of dependent message chains with maximal gas reward per limit consumed + startChains := time.Now() + var chains []*msgChain + for actor, mset := range pending { + next := mp.createMessageChains(ctx, actor, mset, baseFee, ts) + chains = append(chains, next...) + } + if dt := time.Since(startChains); dt > time.Millisecond { + log.Infow("create message chains done", "took", dt) + } + + // 2. Sort the chains + sort.Slice(chains, func(i, j int) bool { + return chains[i].Before(chains[j]) + }) + + if len(chains) != 0 && chains[0].gasPerf < 0 { + log.Warnw("all messages in mpool have non-positive gas performance", "bestGasPerf", chains[0].gasPerf) + return result, nil + } + + // 3. Merge the head chains to produce the list of messages selected for inclusion, subject to + // the block gas and message limits. + startMerge := time.Now() + last := len(chains) + for i, chain := range chains { + // did we run out of performing chains? + if chain.gasPerf < 0 { + break + } + + // does it fit in the block? + if result.tryToAdd(chain) { + // there was room, we added the chain, keep going + continue + } + + // we can't fit this chain because of block limits -- we are at the edge + last = i + break + } + if dt := time.Since(startMerge); dt > time.Millisecond { + log.Infow("merge message chains done", "took", dt) + } + + // 4. We have reached the edge of what we can fit wholesale; if we still have available gasLimit + // to pack some more chains, then trim the last chain and push it down. + // Trimming invalidates subsequent dependent chains so that they can't be selected as their + // dependency cannot be (fully) included. + // We do this in a loop because the blocker might have been inordinately large and we might + // have to do it multiple times to satisfy tail packing. + startTail := time.Now() +tailLoop: + for result.gasLimit >= minGas && last < len(chains) { + // trim + result.trimChain(chains[last], mp, baseFee) + + // push down if it hasn't been invalidated + if chains[last].valid { + for i := last; i < len(chains)-1; i++ { + if chains[i].Before(chains[i+1]) { + break + } + chains[i], chains[i+1] = chains[i+1], chains[i] + } + } + + // select the next (valid and fitting) chain for inclusion + for i, chain := range chains[last:] { + // has the chain been invalidated? + if !chain.valid { + continue + } + + // if gasPerf < 0 we have no more profitable chains + if chain.gasPerf < 0 { + break tailLoop + } + + // does it fit in the bock? + if result.tryToAdd(chain) { + // there was room, we added the chain, keep going + continue + } + + // this chain needs to be trimmed + last += i + continue tailLoop + } + + // the merge loop ended after processing all the chains and we probably still have + // gas to spare; end the loop + break + } + if dt := time.Since(startTail); dt > time.Millisecond { + log.Infow("pack tail chains done", "took", dt) + } + + return result, nil +} + +func (mp *MessagePool) selectPriorityMessages(ctx context.Context, pending map[address.Address]map[uint64]*types.SignedMessage, baseFee types.BigInt, ts *types.TipSet) *selectedMessages { + start := time.Now() + defer func() { + if dt := time.Since(start); dt > time.Millisecond { + log.Infow("select priority messages done", "took", dt) + } + }() + mpCfg := mp.cfg + result := &selectedMessages{ + msgs: make([]*types.SignedMessage, 0, mpCfg.SizeLimitLow), + gasLimit: int64(constants.BlockGasLimit), + blsLimit: cbg.MaxLength, + secpLimit: cbg.MaxLength, + } + minGas := int64(gasguess.MinGas) + + // 1. Get priority actor chains + var chains []*msgChain + priority := mpCfg.PriorityAddrs + for _, actor := range priority { + pk, err := mp.resolveToKey(ctx, actor) + if err != nil { + log.Debugf("mpooladdlocal failed to resolve sender: %s", err) + return result + } + + mset, ok := pending[pk] + if ok { + // remove actor from pending set as we are already processed these messages + delete(pending, pk) + // create chains for the priority actor + next := mp.createMessageChains(ctx, actor, mset, baseFee, ts) + chains = append(chains, next...) + } + } + if len(chains) == 0 { + return result + } + + // 2. Sort the chains + sort.Slice(chains, func(i, j int) bool { + return chains[i].Before(chains[j]) + }) + + if len(chains) != 0 && chains[0].gasPerf < 0 { + log.Warnw("all priority messages in mpool have negative gas performance", "bestGasPerf", chains[0].gasPerf) + return result + } + + // 3. Merge chains until the block limit, as long as they have non-negative gas performance + last := len(chains) + for i, chain := range chains { + if chain.gasPerf < 0 { + break + } + + if result.tryToAdd(chain) { + // there was room, we added the chain, keep going + continue + } + + // we can't fit this chain because of block gasLimit -- we are at the edge + last = i + break + } + +tailLoop: + for result.gasLimit >= minGas && last < len(chains) { + // trim, discarding negative performing messages + + result.trimChain(chains[last], mp, baseFee) + + // push down if it hasn't been invalidated + if chains[last].valid { + for i := last; i < len(chains)-1; i++ { + if chains[i].Before(chains[i+1]) { + break + } + chains[i], chains[i+1] = chains[i+1], chains[i] + } + } + + // select the next (valid and fitting) chain for inclusion + for i, chain := range chains[last:] { + // has the chain been invalidated + if !chain.valid { + continue + } + + // if gasPerf < 0 we have no more profitable chains + if chain.gasPerf < 0 { + break tailLoop + } + + // does it fit in the bock? + if result.tryToAdd(chain) { + // there was room, we added the chain, keep going + continue + } + + // this chain needs to be trimmed + last += i + continue tailLoop + } + + // the merge loop ended after processing all the chains and we probably still have gas to spare; + // end the loop + break + } + + return result +} + +func (mp *MessagePool) getPendingMessages(ctx context.Context, curTS, ts *types.TipSet) (map[address.Address]map[uint64]*types.SignedMessage, error) { + start := time.Now() + + result := make(map[address.Address]map[uint64]*types.SignedMessage) + defer func() { + if dt := time.Since(start); dt > time.Millisecond { + log.Infow("get pending messages done", "took", dt) + } + }() + + // are we in sync? + inSync := false + if curTS.Height() == ts.Height() && curTS.Equals(ts) { + inSync = true + } + + mp.forEachPending(func(a address.Address, mset *msgSet) { + if inSync { + // no need to copy the map + result[a] = mset.msgs + } else { + // we need to copy the map to avoid clobbering it as we load more messages + msetCopy := make(map[uint64]*types.SignedMessage, len(mset.msgs)) + for nonce, m := range mset.msgs { + msetCopy[nonce] = m + } + result[a] = msetCopy + + } + }) + + // we are in sync, that's the happy path + if inSync { + return result, nil + } + + if err := mp.runHeadChange(ctx, curTS, ts, result); err != nil { + return nil, xerrors.Errorf("failed to process difference between mpool head and given head: %w", err) + } + + return result, nil +} + +func (*MessagePool) getGasReward(msg *types.SignedMessage, baseFee types.BigInt) *big.Int { + maxPremium := types.BigSub(msg.Message.GasFeeCap, baseFee) + + if types.BigCmp(maxPremium, msg.Message.GasPremium) > 0 { + maxPremium = msg.Message.GasPremium + } + + gasReward := tbig.Mul(maxPremium, types.NewInt(uint64(msg.Message.GasLimit))) + if gasReward.Sign() == -1 { + // penalty multiplier + gasReward = tbig.Mul(gasReward, types.NewInt(3)) + } + return gasReward.Int +} + +func (*MessagePool) getGasPerf(gasReward *big.Int, gasLimit int64) float64 { + // gasPerf = gasReward * constants.BlockGasLimit / gasLimit + a := new(big.Rat).SetInt(new(big.Int).Mul(gasReward, bigBlockGasLimit)) + b := big.NewRat(1, gasLimit) + c := new(big.Rat).Mul(a, b) + r, _ := c.Float64() + return r +} + +func (mp *MessagePool) createMessageChains(ctx context.Context, actor address.Address, mset map[uint64]*types.SignedMessage, baseFee types.BigInt, ts *types.TipSet) []*msgChain { + // collect all messages + msgs := make([]*types.SignedMessage, 0, len(mset)) + for _, m := range mset { + msgs = append(msgs, m) + } + + // sort by nonce + sort.Slice(msgs, func(i, j int) bool { + return msgs[i].Message.Nonce < msgs[j].Message.Nonce + }) + + // sanity checks: + // - there can be no gaps in nonces, starting from the current actor nonce + // if there is a gap, drop messages after the gap, we can't include them + // - all messages must have minimum gas and the total gas for the candidate messages + // cannot exceed the block limit; drop all messages that exceed the limit + // - the total gasReward cannot exceed the actor's balance; drop all messages that exceed + // the balance + a, err := mp.api.GetActorAfter(ctx, actor, ts) + if err != nil { + log.Errorf("failed to load actor state, not building chain for %s: %v", actor, err) + return nil + } + + curNonce := a.Nonce + balance := a.Balance.Int + gasLimit := int64(0) + skip := 0 + i := 0 + rewards := make([]*big.Int, 0, len(msgs)) + for i = 0; i < len(msgs); i++ { + m := msgs[i] + + if m.Message.Nonce < curNonce { + log.Warnf("encountered message from actor %s with nonce (%d) less than the current nonce (%d)", + actor, m.Message.Nonce, curNonce) + skip++ + continue + } + + if m.Message.Nonce != curNonce { + break + } + curNonce++ + + minGas := mp.gasPriceSchedule.PricelistByEpoch(ts.Height()).OnChainMessage(m.ChainLength()).Total() + if m.Message.GasLimit < minGas { + break + } + + gasLimit += m.Message.GasLimit + if gasLimit > constants.BlockGasLimit { + break + } + + required := m.Message.RequiredFunds().Int + if balance.Cmp(required) < 0 { + break + } + + balance = new(big.Int).Sub(balance, required) + + value := m.Message.Value.Int + balance = new(big.Int).Sub(balance, value) + + gasReward := mp.getGasReward(m, baseFee) + rewards = append(rewards, gasReward) + } + + // check we have a sane set of messages to construct the chains + if i > skip { + msgs = msgs[skip:i] + } else { + return nil + } + + // if we have more messages from this sender than can fit in a block, drop the extra ones + if len(msgs) > constants.BlockMessageLimit { + msgs = msgs[:constants.BlockMessageLimit] + } + + // ok, now we can construct the chains using the messages we have + // invariant: each chain has a bigger gasPerf than the next -- otherwise they can be merged + // and increase the gasPerf of the first chain + // We do this in two passes: + // - in the first pass we create chains that aggregate messages with non-decreasing gasPerf + // - in the second pass we merge chains to maintain the invariant. + var chains []*msgChain + var curChain *msgChain + + newChain := func(m *types.SignedMessage, i int) *msgChain { + chain := new(msgChain) + chain.msgs = []*types.SignedMessage{m} + chain.gasReward = rewards[i] + chain.gasLimit = m.Message.GasLimit + chain.gasPerf = mp.getGasPerf(chain.gasReward, chain.gasLimit) + chain.valid = true + chain.sigType = m.Signature.Type + return chain + } + + // create the individual chains + for i, m := range msgs { + if curChain == nil { + curChain = newChain(m, i) + continue + } + + gasReward := new(big.Int).Add(curChain.gasReward, rewards[i]) + gasLimit := curChain.gasLimit + m.Message.GasLimit + gasPerf := mp.getGasPerf(gasReward, gasLimit) + + // try to add the message to the current chain -- if it decreases the gasPerf, or then make a + // new chain + if gasPerf < curChain.gasPerf { + chains = append(chains, curChain) + curChain = newChain(m, i) + } else { + curChain.msgs = append(curChain.msgs, m) + curChain.gasReward = gasReward + curChain.gasLimit = gasLimit + curChain.gasPerf = gasPerf + } + } + chains = append(chains, curChain) + + // merge chains to maintain the invariant + for { + merged := 0 + + for i := len(chains) - 1; i > 0; i-- { + if chains[i].gasPerf >= chains[i-1].gasPerf { + chains[i-1].msgs = append(chains[i-1].msgs, chains[i].msgs...) + chains[i-1].gasReward = new(big.Int).Add(chains[i-1].gasReward, chains[i].gasReward) + chains[i-1].gasLimit += chains[i].gasLimit + chains[i-1].gasPerf = mp.getGasPerf(chains[i-1].gasReward, chains[i-1].gasLimit) + chains[i].valid = false + merged++ + } + } + + if merged == 0 { + break + } + + // drop invalidated chains + newChains := make([]*msgChain, 0, len(chains)-merged) + for _, c := range chains { + if c.valid { + newChains = append(newChains, c) + } + } + chains = newChains + } + + // link dependent chains + for i := 0; i < len(chains)-1; i++ { + chains[i].next = chains[i+1] + } + + for i := len(chains) - 1; i > 0; i-- { + chains[i].prev = chains[i-1] + } + + return chains +} + +func (mc *msgChain) Before(other *msgChain) bool { + return mc.gasPerf > other.gasPerf || + (mc.gasPerf == other.gasPerf && mc.gasReward.Cmp(other.gasReward) > 0) +} + +func (mc *msgChain) Trim(gasLimit int64, msgLimit int, mp *MessagePool, baseFee types.BigInt) { + i := len(mc.msgs) - 1 + for i >= 0 && (mc.gasLimit > gasLimit || mc.gasPerf < 0 || i >= msgLimit) { + gasReward := mp.getGasReward(mc.msgs[i], baseFee) + mc.gasReward = new(big.Int).Sub(mc.gasReward, gasReward) + mc.gasLimit -= mc.msgs[i].Message.GasLimit + if mc.gasLimit > 0 { + mc.gasPerf = mp.getGasPerf(mc.gasReward, mc.gasLimit) + if mc.bp != 0 { + mc.setEffPerf() + } + } else { + mc.gasPerf = 0 + mc.effPerf = 0 + } + i-- + } + + if i < 0 { + mc.msgs = nil + mc.valid = false + } else { + mc.msgs = mc.msgs[:i+1] + } + + // TODO: if the trim above is a no-op, this (may) needlessly invalidates the next chain + if mc.next != nil { + mc.next.Invalidate() + mc.next = nil + } +} + +func (mc *msgChain) Invalidate() { + mc.valid = false + mc.msgs = nil + if mc.next != nil { + mc.next.Invalidate() + mc.next = nil + } +} + +func (mc *msgChain) SetEffectivePerf(bp float64) { + mc.bp = bp + mc.setEffPerf() +} + +func (mc *msgChain) setEffPerf() { + effPerf := mc.gasPerf * mc.bp + if effPerf > 0 && mc.prev != nil { + effPerfWithParent := (effPerf*float64(mc.gasLimit) + mc.prev.effPerf*float64(mc.prev.gasLimit)) / float64(mc.gasLimit+mc.prev.gasLimit) + mc.parentOffset = effPerf - effPerfWithParent + effPerf = effPerfWithParent + } + mc.effPerf = effPerf + +} + +func (mc *msgChain) SetNullEffectivePerf() { + if mc.gasPerf < 0 { + mc.effPerf = mc.gasPerf + } else { + mc.effPerf = 0 + } +} + +func (mc *msgChain) BeforeEffective(other *msgChain) bool { + // move merged chains to the front so we can discard them earlier + return (mc.merged && !other.merged) || + (mc.gasPerf >= 0 && other.gasPerf < 0) || + mc.effPerf > other.effPerf || + (mc.effPerf == other.effPerf && mc.gasPerf > other.gasPerf) || + (mc.effPerf == other.effPerf && mc.gasPerf == other.gasPerf && mc.gasReward.Cmp(other.gasReward) > 0) +} + +func shuffleChains(lst []*msgChain) { + for i := range lst { + j := rand.Intn(i + 1) + lst[i], lst[j] = lst[j], lst[i] + } +} + +func deleteSelectedMessages(pending map[address.Address]map[uint64]*types.SignedMessage, msgs []*types.SignedMessage) map[address.Address]map[uint64]*types.SignedMessage { + // messages from the same wallet cannot be scattered in multiple blocks in a cycle, eg b1{nonce: 20~30}, b2{nonce: 31~40} + for _, msg := range msgs { + delete(pending, msg.Message.From) + } + + return pending +} + +// select the message multiple times and try not to repeat it each time +func (mp *MessagePool) MultipleSelectMessages(ctx context.Context, ts *types.TipSet, tqs []float64) (msgss [][]*types.SignedMessage, err error) { + mp.curTSLk.Lock() + defer mp.curTSLk.Unlock() + + mp.lk.Lock() + defer mp.lk.Unlock() + + // Load messages for the target tipset; if it is the same as the current tipset in the mpool + // then this is just the pending messages + pending, err := mp.getPendingMessages(ctx, mp.curTS, ts) + if err != nil { + return nil, err + } + + msgss = make([][]*types.SignedMessage, len(tqs)) + + for idx, tq := range tqs { + if len(pending) == 0 { + break + } + + var selMsg *selectedMessages + if tq > 0.84 { + selMsg, err = mp.multiSelectMessagesGreedy(ctx, mp.curTS, ts, tq, pending) + } else { + selMsg, err = mp.multiSelectMessagesOptimal(ctx, mp.curTS, ts, tq, pending) + } + + if err != nil { + return nil, err + } + + msgss[idx] = selMsg.msgs + + // delete the selected message from pending + pending = deleteSelectedMessages(pending, selMsg.msgs) + } + + // if no message is selected for a block, msgss[0] is filled by default + for i := 1; i < len(msgss); i++ { + if len(msgss[i]) == 0 { + msgss[i] = msgss[0] + } + } + + return msgss, nil +} + +func (mp *MessagePool) multiSelectMessagesGreedy(ctx context.Context, curTS, ts *types.TipSet, tq float64, pending map[address.Address]map[uint64]*types.SignedMessage) (*selectedMessages, error) { + return mp.selectMessagesGreedy(ctx, curTS, ts, pending) +} + +func (mp *MessagePool) multiSelectMessagesOptimal(ctx context.Context, curTS, ts *types.TipSet, tq float64, pending map[address.Address]map[uint64]*types.SignedMessage) (*selectedMessages, error) { + return mp.selectMessagesOptimal(ctx, curTS, ts, tq, pending) +} diff --git a/pkg/messagepool/selection_test.go b/pkg/messagepool/selection_test.go new file mode 100644 index 0000000000..dccda26322 --- /dev/null +++ b/pkg/messagepool/selection_test.go @@ -0,0 +1,1614 @@ +package messagepool + +import ( + "compress/gzip" + "context" + "encoding/json" + "fmt" + "io" + "math" + "math/big" + "math/rand" + "os" + "sort" + "testing" + + "github.com/stretchr/testify/require" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/go-address" + tbig "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + logging "github.com/ipfs/go-log" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/messagepool/gasguess" + "github.com/filecoin-project/venus/pkg/wallet" + types "github.com/filecoin-project/venus/venus-shared/chain" + mtypes "github.com/filecoin-project/venus/venus-shared/wallet" + + _ "github.com/filecoin-project/venus/pkg/crypto/secp" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func init() { + // bump this for the selection tests + MaxActorPendingMessages = 1000000 +} + +const UpgradeBreezeHeight = 41280 + +func makeTestMessage(w *wallet.Wallet, from, to address.Address, nonce uint64, gasLimit int64, gasPrice uint64) *types.SignedMessage { + msg := &types.Message{ + From: from, + To: to, + Method: 2, + Value: types.FromFil(0), + Nonce: nonce, + GasLimit: gasLimit, + GasFeeCap: tbig.NewInt(int64(100) + int64(gasPrice)), + GasPremium: tbig.NewInt(int64(gasPrice)), + } + + c := msg.Cid() + sig, err := w.WalletSign(context.Background(), from, c.Bytes(), mtypes.MsgMeta{}) + if err != nil { + panic(err) + } + return &types.SignedMessage{ + Message: *msg, + Signature: *sig, + } +} + +func makeTestMpool() (*MessagePool, *testMpoolAPI) { + tma := newTestMpoolAPI() + ds := datastore.NewMapDatastore() + mp, err := New(context.Background(), tma, nil, ds, config.DefaultForkUpgradeParam, config.DefaultMessagePoolParam, "test", nil) + if err != nil { + panic(err) + } + + return mp, tma +} + +func TestMessageChains(t *testing.T) { + tf.UnitTest(t) + + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + + tma.setBalance(a1, 1) // in FIL + + // test chain aggregations + + // test1: 10 messages from a1 to a2, with increasing gasPerf; it should + // make a single chain with 10 messages given enough balance + mset := make(map[uint64]*types.SignedMessage) + for i := 0; i < 10; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1)) + mset[uint64(i)] = m + } + baseFee := tbig.NewInt(0) + + chains := mp.createMessageChains(context.Background(), a1, mset, baseFee, ts) + if len(chains) != 1 { + t.Fatal("expected a single chain") + } + if len(chains[0].msgs) != 10 { + t.Fatalf("expected 10 messages in the chain but got %d", len(chains[0].msgs)) + } + for i, m := range chains[0].msgs { + if m.Message.Nonce != uint64(i) { + t.Fatalf("expected nonce %d but got %d", i, m.Message.Nonce) + } + } + + // test2 : 10 messages from a1 to a2, with decreasing gasPerf; it should + // make 10 chains with 1 message each + mset = make(map[uint64]*types.SignedMessage) + for i := 0; i < 10; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(10-i)) + mset[uint64(i)] = m + } + + chains = mp.createMessageChains(context.Background(), a1, mset, baseFee, ts) + if len(chains) != 10 { + t.Fatal("expected 10 chains") + } + for i, chain := range chains { + if len(chain.msgs) != 1 { + t.Fatalf("expected 1 message in chain %d but got %d", i, len(chain.msgs)) + } + } + for i, chain := range chains { + m := chain.msgs[0] + if m.Message.Nonce != uint64(i) { + t.Fatalf("expected nonce %d but got %d", i, m.Message.Nonce) + } + } + + // test3a: 10 messages from a1 to a2, with gasPerf increasing in groups of 3; it should + // merge them in two chains, one with 9 messages and one with the last message + mset = make(map[uint64]*types.SignedMessage) + for i := 0; i < 10; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(1+i%3)) + mset[uint64(i)] = m + } + + chains = mp.createMessageChains(context.Background(), a1, mset, baseFee, ts) + if len(chains) != 2 { + t.Fatal("expected 1 chain") + } + + if len(chains[0].msgs) != 9 { + t.Fatalf("expected 9 messages in the chain but got %d", len(chains[0].msgs)) + } + if len(chains[1].msgs) != 1 { + t.Fatalf("expected 1 messages in the chain but got %d", len(chains[1].msgs)) + } + nextNonce := 0 + for _, chain := range chains { + for _, m := range chain.msgs { + if m.Message.Nonce != uint64(nextNonce) { + t.Fatalf("expected nonce %d but got %d", nextNonce, m.Message.Nonce) + } + nextNonce++ + } + } + + // test3b: 10 messages from a1 to a2, with gasPerf decreasing in groups of 3 with a bias for the + // earlier chains; it should make 4 chains, the first 3 with 3 messages and the last with + // a single message + mset = make(map[uint64]*types.SignedMessage) + for i := 0; i < 10; i++ { + bias := (12 - i) / 3 + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(1+i%3+bias)) + mset[uint64(i)] = m + } + + chains = mp.createMessageChains(context.Background(), a1, mset, baseFee, ts) + if len(chains) != 4 { + t.Fatal("expected 4 chains") + } + for i, chain := range chains { + expectedLen := 3 + if i > 2 { + expectedLen = 1 + } + if len(chain.msgs) != expectedLen { + t.Fatalf("expected %d message in chain %d but got %d", expectedLen, i, len(chain.msgs)) + } + } + nextNonce = 0 + for _, chain := range chains { + for _, m := range chain.msgs { + if m.Message.Nonce != uint64(nextNonce) { + t.Fatalf("expected nonce %d but got %d", nextNonce, m.Message.Nonce) + } + nextNonce++ + } + } + + // test chain breaks + + // test4: 10 messages with non-consecutive nonces; it should make a single chain with just + // the first message + mset = make(map[uint64]*types.SignedMessage) + for i := 0; i < 10; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i*2), gasLimit, uint64(i+1)) + mset[uint64(i)] = m + } + + chains = mp.createMessageChains(context.Background(), a1, mset, baseFee, ts) + if len(chains) != 1 { + t.Fatal("expected a single chain") + } + if len(chains[0].msgs) != 1 { + t.Fatalf("expected 1 message in the chain but got %d", len(chains[0].msgs)) + } + for i, m := range chains[0].msgs { + if m.Message.Nonce != uint64(i) { + t.Fatalf("expected nonce %d but got %d", i, m.Message.Nonce) + } + } + + // test5: 10 messages with increasing gasLimit, except for the 6th message which has less than + // the epoch gasLimit; it should create a single chain with the first 5 messages + mset = make(map[uint64]*types.SignedMessage) + for i := 0; i < 10; i++ { + var m *types.SignedMessage + if i != 5 { + m = makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1)) + } else { + m = makeTestMessage(w1, a1, a2, uint64(i), 1, uint64(i+1)) + } + mset[uint64(i)] = m + } + + chains = mp.createMessageChains(context.Background(), a1, mset, baseFee, ts) + if len(chains) != 1 { + t.Fatal("expected a single chain") + } + if len(chains[0].msgs) != 5 { + t.Fatalf("expected 5 message in the chain but got %d", len(chains[0].msgs)) + } + for i, m := range chains[0].msgs { + if m.Message.Nonce != uint64(i) { + t.Fatalf("expected nonce %d but got %d", i, m.Message.Nonce) + } + } + + // test6: one more message than what can fit in a block according to gas limit, with increasing + // gasPerf; it should create a single chain with the max messages + maxMessages := int(constants.BlockGasLimit / gasLimit) + nMessages := maxMessages + 1 + + mset = make(map[uint64]*types.SignedMessage) + for i := 0; i < nMessages; i++ { + mset[uint64(i)] = makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1)) + } + + chains = mp.createMessageChains(context.Background(), a1, mset, baseFee, ts) + if len(chains) != 1 { + t.Fatal("expected a single chain") + } + if len(chains[0].msgs) != maxMessages { + t.Fatalf("expected %d message in the chain but got %d", maxMessages, len(chains[0].msgs)) + } + for i, m := range chains[0].msgs { + if m.Message.Nonce != uint64(i) { + t.Fatalf("expected nonce %d but got %d", i, m.Message.Nonce) + } + } + + // test5: insufficient balance for all messages + tma.setBalanceRaw(a1, tbig.NewInt(300*gasLimit+1)) + + mset = make(map[uint64]*types.SignedMessage) + for i := 0; i < 10; i++ { + mset[uint64(i)] = makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(i+1)) + } + + chains = mp.createMessageChains(context.Background(), a1, mset, baseFee, ts) + if len(chains) != 1 { + t.Fatalf("expected a single chain: got %d", len(chains)) + } + if len(chains[0].msgs) != 2 { + t.Fatalf("expected %d message in the chain but got %d", 2, len(chains[0].msgs)) + } + for i, m := range chains[0].msgs { + if m.Message.Nonce != uint64(i) { + t.Fatalf("expected nonce %d but got %d", i, m.Message.Nonce) + } + } + +} + +func TestMessageChainSkipping(t *testing.T) { + tf.UnitTest(t) + + // regression test for chain skip bug + + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + baseFee := tbig.NewInt(0) + + tma.setBalance(a1, 1) // in FIL + tma.setStateNonce(a1, 10) + + mset := make(map[uint64]*types.SignedMessage) + for i := 0; i < 20; i++ { + bias := (20 - i) / 3 + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(1+i%3+bias)) + mset[uint64(i)] = m + } + + chains := mp.createMessageChains(context.Background(), a1, mset, baseFee, ts) + if len(chains) != 4 { + t.Fatalf("expected 4 chains, got %d", len(chains)) + } + for i, chain := range chains { + var expectedLen int + switch { + case i == 0: + expectedLen = 2 + case i > 2: + expectedLen = 2 + default: + expectedLen = 3 + } + if len(chain.msgs) != expectedLen { + t.Fatalf("expected %d message in chain %d but got %d", expectedLen, i, len(chain.msgs)) + } + } + nextNonce := 10 + for _, chain := range chains { + for _, m := range chain.msgs { + if m.Message.Nonce != uint64(nextNonce) { + t.Fatalf("expected nonce %d but got %d", nextNonce, m.Message.Nonce) + } + nextNonce++ + } + } + +} + +func TestBasicMessageSelection(t *testing.T) { + tf.UnitTest(t) + + oldMaxNonceGap := MaxNonceGap + MaxNonceGap = 1000 + defer func() { + MaxNonceGap = oldMaxNonceGap + }() + + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + + // we create 10 messages from each actor to another, with the first actor paying higher + // gas prices than the second; we expect message selection to order his messages first + for i := 0; i < 10; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(2*i+1)) + mustAdd(t, mp, m) + } + + for i := 0; i < 10; i++ { + m := makeTestMessage(w2, a2, a1, uint64(i), gasLimit, uint64(i+1)) + mustAdd(t, mp, m) + } + + msgs, err := mp.SelectMessages(context.Background(), ts, 1.0) + if err != nil { + t.Fatal(err) + } + + if len(msgs) != 20 { + t.Fatalf("exptected 20 messages, got %d", len(msgs)) + } + + nextNonce := 0 + for i := 0; i < 10; i++ { + if msgs[i].Message.From != a1 { + t.Fatalf("expected message from actor a1") + } + if msgs[i].Message.Nonce != uint64(nextNonce) { + t.Fatalf("expected nonce %d, got %d", msgs[i].Message.Nonce, nextNonce) + } + nextNonce++ + } + + nextNonce = 0 + for i := 10; i < 20; i++ { + if msgs[i].Message.From != a2 { + t.Fatalf("expected message from actor a2") + } + if msgs[i].Message.Nonce != uint64(nextNonce) { + t.Fatalf("expected nonce %d, got %d", msgs[i].Message.Nonce, nextNonce) + } + nextNonce++ + } + + // now we make a block with all the messages and advance the chain + block2 := tma.nextBlock() + tma.setBlockMessages(block2, msgs...) + tma.applyBlock(t, block2) + + // we should have no pending messages in the mpool + pend, _ := mp.Pending(context.TODO()) + if len(pend) != 0 { + t.Fatalf("expected no pending messages, but got %d", len(pend)) + } + + // create a block and advance the chain without applying to the mpool + msgs = nil + for i := 10; i < 20; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(2*i+1)) + msgs = append(msgs, m) + m = makeTestMessage(w2, a2, a1, uint64(i), gasLimit, uint64(i+1)) + msgs = append(msgs, m) + } + block3 := tma.nextBlock() + tma.setBlockMessages(block3, msgs...) + ts3 := mkTipSet(block3) + + // now create another set of messages and add them to the mpool + for i := 20; i < 30; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(2*i+200)) + mustAdd(t, mp, m) + m = makeTestMessage(w2, a2, a1, uint64(i), gasLimit, uint64(i+1)) + mustAdd(t, mp, m) + } + + // select messages in the last tipset; this should include the missed messages as well as + // the last messages we added, with the first actor's messages first + // first we need to update the nonce on the tma + tma.setStateNonce(a1, 10) + tma.setStateNonce(a2, 10) + + msgs, err = mp.SelectMessages(context.Background(), ts3, 1.0) + if err != nil { + t.Fatal(err) + } + if len(msgs) != 20 { + t.Fatalf("expected 20 messages, got %d", len(msgs)) + } + + nextNonce = 20 + for i := 0; i < 10; i++ { + if msgs[i].Message.From != a1 { + t.Fatalf("expected message from actor a1") + } + if msgs[i].Message.Nonce != uint64(nextNonce) { + t.Fatalf("expected nonce %d, got %d", msgs[i].Message.Nonce, nextNonce) + } + nextNonce++ + } + + nextNonce = 20 + for i := 10; i < 20; i++ { + if msgs[i].Message.From != a2 { + t.Fatalf("expected message from actor a2") + } + if msgs[i].Message.Nonce != uint64(nextNonce) { + t.Fatalf("expected nonce %d, got %d", msgs[i].Message.Nonce, nextNonce) + } + nextNonce++ + } +} + +func TestMessageSelectionTrimmingGas(t *testing.T) { + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + + // make many small chains for the two actors + nMessages := int((constants.BlockGasLimit / gasLimit) + 1) + for i := 0; i < nMessages; i++ { + bias := (nMessages - i) / 3 + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(1+i%3+bias)) + mustAdd(t, mp, m) + m = makeTestMessage(w2, a2, a1, uint64(i), gasLimit, uint64(1+i%3+bias)) + mustAdd(t, mp, m) + } + + msgs, err := mp.SelectMessages(context.Background(), ts, 1.0) + if err != nil { + t.Fatal(err) + } + + expected := int(constants.BlockGasLimit / gasLimit) + if len(msgs) != expected { + t.Fatalf("expected %d messages, but got %d", expected, len(msgs)) + } + + mGasLimit := int64(0) + for _, m := range msgs { + mGasLimit += m.Message.GasLimit + } + if mGasLimit > constants.BlockGasLimit { + t.Fatal("selected messages gas limit exceeds block gas limit!") + } + +} + +func TestMessageSelectionTrimmingMsgsBasic(t *testing.T) { + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + tma.setBalance(a1, 1) // in FIL + + // create a larger than selectable chain + for i := 0; i < constants.BlockMessageLimit; i++ { + m := makeTestMessage(w1, a1, a1, uint64(i), 300000, 100) + mustAdd(t, mp, m) + } + + msgs, err := mp.SelectMessages(context.Background(), ts, 1.0) + if err != nil { + t.Fatal(err) + } + + expected := cbg.MaxLength + if len(msgs) != expected { + t.Fatalf("expected %d messages, but got %d", expected, len(msgs)) + } + + mGasLimit := int64(0) + for _, m := range msgs { + mGasLimit += m.Message.GasLimit + } + if mGasLimit > constants.BlockGasLimit { + t.Fatal("selected messages gas limit exceeds block gas limit!") + } + +} + +func TestMessageSelectionTrimmingMsgsTwoSendersBasic(t *testing.T) { + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.BLS) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + + // create 2 larger than selectable chains + for i := 0; i < constants.BlockMessageLimit; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), 300000, 100) + mustAdd(t, mp, m) + // a2's messages are preferred + m = makeTestMessage(w2, a2, a1, uint64(i), 300000, 1000) + mustAdd(t, mp, m) + } + + msgs, err := mp.SelectMessages(context.Background(), ts, 1.0) + if err != nil { + t.Fatal(err) + } + + mGasLimit := int64(0) + counts := make(map[crypto.SigType]uint) + for _, m := range msgs { + mGasLimit += m.Message.GasLimit + counts[m.Signature.Type]++ + } + + if mGasLimit > constants.BlockGasLimit { + t.Fatal("selected messages gas limit exceeds block gas limit!") + } + + expected := constants.BlockMessageLimit + if len(msgs) != expected { + t.Fatalf("expected %d messages, but got %d", expected, len(msgs)) + } + + if counts[crypto.SigTypeBLS] != cbg.MaxLength { + t.Fatalf("expected %d bls messages, but got %d", cbg.MaxLength, len(msgs)) + } +} + +func TestMessageSelectionTrimmingMsgsTwoSendersAdvanced(t *testing.T) { + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.BLS) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + + // create 2 almost max-length chains of equal value + i := 0 + for i = 0; i < cbg.MaxLength-1; i++ { + m := makeTestMessage(w1, a1, a2, uint64(i), 300000, 100) + mustAdd(t, mp, m) + // a2's messages are preferred + m = makeTestMessage(w2, a2, a1, uint64(i), 300000, 100) + mustAdd(t, mp, m) + } + + // a1's 8192th message is worth more than a2's + m := makeTestMessage(w1, a1, a2, uint64(i), 300000, 1000) + mustAdd(t, mp, m) + + m = makeTestMessage(w2, a2, a1, uint64(i), 300000, 100) + mustAdd(t, mp, m) + + i++ + + // a2's (unselectable) 8193rd message is worth SO MUCH + m = makeTestMessage(w2, a2, a1, uint64(i), 300000, 1000000) + mustAdd(t, mp, m) + + msgs, err := mp.SelectMessages(context.Background(), ts, 1.0) + if err != nil { + t.Fatal(err) + } + + mGasLimit := int64(0) + counts := make(map[crypto.SigType]uint) + for _, m := range msgs { + mGasLimit += m.Message.GasLimit + counts[m.Signature.Type]++ + } + + if mGasLimit > constants.BlockGasLimit { + t.Fatal("selected messages gas limit exceeds block gas limit!") + } + + expected := constants.BlockMessageLimit + if len(msgs) != expected { + t.Fatalf("expected %d messages, but got %d", expected, len(msgs)) + } + + // we should have taken the secp chain + if counts[crypto.SigTypeSecp256k1] != cbg.MaxLength { + t.Fatalf("expected %d bls messages, but got %d", cbg.MaxLength, len(msgs)) + } +} + +func TestPriorityMessageSelection(t *testing.T) { + tf.UnitTest(t) + + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + + mp.cfg.PriorityAddrs = []address.Address{a1} + + nMessages := 10 + for i := 0; i < nMessages; i++ { + bias := (nMessages - i) / 3 + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(1+i%3+bias)) + mustAdd(t, mp, m) + m = makeTestMessage(w2, a2, a1, uint64(i), gasLimit, uint64(1+i%3+bias)) + mustAdd(t, mp, m) + } + + msgs, err := mp.SelectMessages(context.Background(), ts, 1.0) + if err != nil { + t.Fatal(err) + } + + if len(msgs) != 20 { + t.Fatalf("expected 20 messages but got %d", len(msgs)) + } + + // messages from a1 must be first + nextNonce := uint64(0) + for i := 0; i < 10; i++ { + m := msgs[i] + if m.Message.From != a1 { + t.Fatal("expected messages from a1 before messages from a2") + } + if m.Message.Nonce != nextNonce { + t.Fatalf("expected nonce %d but got %d", nextNonce, m.Message.Nonce) + } + nextNonce++ + } + + nextNonce = 0 + for i := 10; i < 20; i++ { + m := msgs[i] + if m.Message.From != a2 { + t.Fatal("expected messages from a2 after messages from a1") + } + if m.Message.Nonce != nextNonce { + t.Fatalf("expected nonce %d but got %d", nextNonce, m.Message.Nonce) + } + nextNonce++ + } +} + +func TestPriorityMessageSelection2(t *testing.T) { + tf.UnitTest(t) + + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + + mp.cfg.PriorityAddrs = []address.Address{a1} + + nMessages := int(2 * constants.BlockGasLimit / gasLimit) + for i := 0; i < nMessages; i++ { + bias := (nMessages - i) / 3 + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(1+i%3+bias)) + mustAdd(t, mp, m) + m = makeTestMessage(w2, a2, a1, uint64(i), gasLimit, uint64(1+i%3+bias)) + mustAdd(t, mp, m) + } + + msgs, err := mp.SelectMessages(context.Background(), ts, 1.0) + if err != nil { + t.Fatal(err) + } + + expectedMsgs := int(constants.BlockGasLimit / gasLimit) + if len(msgs) != expectedMsgs { + t.Fatalf("expected %d messages but got %d", expectedMsgs, len(msgs)) + } + + // all messages must be from a1 + nextNonce := uint64(0) + for _, m := range msgs { + if m.Message.From != a1 { + t.Fatal("expected messages from a1 before messages from a2") + } + if m.Message.Nonce != nextNonce { + t.Fatalf("expected nonce %d but got %d", nextNonce, m.Message.Nonce) + } + nextNonce++ + } +} + +func TestPriorityMessageSelection3(t *testing.T) { + tf.UnitTest(t) + + t.Skip("reenable after removing allow negative") + + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + + mp.cfg.PriorityAddrs = []address.Address{a1} + + tma.baseFee = tbig.NewInt(1000) + nMessages := 10 + for i := 0; i < nMessages; i++ { + bias := (nMessages - i) / 3 + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(1000+i%3+bias)) + mustAdd(t, mp, m) + // messages from a2 have negative performance + m = makeTestMessage(w2, a2, a1, uint64(i), gasLimit, 100) + mustAdd(t, mp, m) + } + + // test greedy selection + msgs, err := mp.SelectMessages(context.Background(), ts, 1.0) + if err != nil { + t.Fatal(err) + } + + expectedMsgs := 10 + if len(msgs) != expectedMsgs { + t.Fatalf("expected %d messages but got %d", expectedMsgs, len(msgs)) + } + + // all messages must be from a1 + nextNonce := uint64(0) + for _, m := range msgs { + if m.Message.From != a1 { + t.Fatal("expected messages from a1 before messages from a2") + } + if m.Message.Nonce != nextNonce { + t.Fatalf("expected nonce %d but got %d", nextNonce, m.Message.Nonce) + } + nextNonce++ + } + + // test optimal selection + msgs, err = mp.SelectMessages(context.Background(), ts, 0.1) + if err != nil { + t.Fatal(err) + } + + expectedMsgs = 10 + if len(msgs) != expectedMsgs { + t.Fatalf("expected %d messages but got %d", expectedMsgs, len(msgs)) + } + + // all messages must be from a1 + nextNonce = uint64(0) + for _, m := range msgs { + if m.Message.From != a1 { + t.Fatal("expected messages from a1 before messages from a2") + } + if m.Message.Nonce != nextNonce { + t.Fatalf("expected nonce %d but got %d", nextNonce, m.Message.Nonce) + } + nextNonce++ + } + +} + +func TestOptimalMessageSelection1(t *testing.T) { + tf.UnitTest(t) + + // this test uses just a single actor sending messages with a low tq + // the chain depenent merging algorithm should pick messages from the actor + // from the start + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + + nMessages := int(10 * constants.BlockGasLimit / gasLimit) + for i := 0; i < nMessages; i++ { + bias := (nMessages - i) / 3 + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(1+i%3+bias)) + mustAdd(t, mp, m) + } + + msgs, err := mp.SelectMessages(context.Background(), ts, 0.25) + if err != nil { + t.Fatal(err) + } + + expectedMsgs := int(constants.BlockGasLimit / gasLimit) + if len(msgs) != expectedMsgs { + t.Fatalf("expected %d messages, but got %d", expectedMsgs, len(msgs)) + } + + nextNonce := uint64(0) + for _, m := range msgs { + if m.Message.From != a1 { + t.Fatal("expected message from a1") + } + + if m.Message.Nonce != nextNonce { + t.Fatalf("expected nonce %d but got %d", nextNonce, m.Message.Nonce) + } + nextNonce++ + } +} + +func TestOptimalMessageSelection2(t *testing.T) { + tf.UnitTest(t) + + // this test uses two actors sending messages to each other, with the first + // actor paying (much) higher gas premium than the second. + // We select with a low ticket quality; the chain depenent merging algorithm should pick + // messages from the second actor from the start + mp, tma := makeTestMpool() + + // the actors + w1 := newWallet(t) + a1, err := w1.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + w2 := newWallet(t) + a2, err := w2.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + + tma.setBalance(a1, 1) // in FIL + tma.setBalance(a2, 1) // in FIL + + nMessages := int(5 * constants.BlockGasLimit / gasLimit) + for i := 0; i < nMessages; i++ { + bias := (nMessages - i) / 3 + m := makeTestMessage(w1, a1, a2, uint64(i), gasLimit, uint64(200000+i%3+bias)) + mustAdd(t, mp, m) + m = makeTestMessage(w2, a2, a1, uint64(i), gasLimit, uint64(190000+i%3+bias)) + mustAdd(t, mp, m) + } + + msgs, err := mp.SelectMessages(context.Background(), ts, 0.1) + if err != nil { + t.Fatal(err) + } + + expectedMsgs := int(constants.BlockGasLimit / gasLimit) + if len(msgs) != expectedMsgs { + t.Fatalf("expected %d messages, but got %d", expectedMsgs, len(msgs)) + } + + var nFrom1, nFrom2 int + var nextNonce1, nextNonce2 uint64 + for _, m := range msgs { + if m.Message.From == a1 { + if m.Message.Nonce != nextNonce1 { + t.Fatalf("expected nonce %d but got %d", nextNonce1, m.Message.Nonce) + } + nextNonce1++ + nFrom1++ + } else { + if m.Message.Nonce != nextNonce2 { + t.Fatalf("expected nonce %d but got %d", nextNonce2, m.Message.Nonce) + } + nextNonce2++ + nFrom2++ + } + } + + if nFrom1 > nFrom2 { + t.Fatalf("expected more messages from a2 than a1; nFrom1=%d nFrom2=%d", nFrom1, nFrom2) + } +} + +func TestOptimalMessageSelection3(t *testing.T) { + tf.UnitTest(t) + + // this test uses 10 actors sending a block of messages to each other, with the the first + // actors paying higher gas premium than the subsequent actors. + // We select with a low ticket quality; the chain depenent merging algorithm should pick + // messages from the median actor from the start + mp, tma := makeTestMpool() + + nActors := 10 + // the actors + var actors []address.Address + var wallets []*wallet.Wallet + + for i := 0; i < nActors; i++ { + w := newWallet(t) + + a, err := w.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + actors = append(actors, a) + wallets = append(wallets, w) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + + for _, a := range actors { + tma.setBalance(a, 1) // in FIL + } + + nMessages := int(constants.BlockGasLimit/gasLimit) + 1 + for i := 0; i < nMessages; i++ { + for j := 0; j < nActors; j++ { + premium := 500000 + 10000*(nActors-j) + (nMessages+2-i)/(30*nActors) + i%3 + m := makeTestMessage(wallets[j], actors[j], actors[j%nActors], uint64(i), gasLimit, uint64(premium)) + mustAdd(t, mp, m) + } + } + + msgs, err := mp.SelectMessages(context.Background(), ts, 0.1) + if err != nil { + t.Fatal(err) + } + + expectedMsgs := int(constants.BlockGasLimit / gasLimit) + if len(msgs) != expectedMsgs { + t.Fatalf("expected %d messages, but got %d", expectedMsgs, len(msgs)) + } + + whoIs := func(a address.Address) int { + for i, aa := range actors { + if a == aa { + return i + } + } + return -1 + } + + nonces := make([]uint64, nActors) + for _, m := range msgs { + who := whoIs(m.Message.From) + if who < 3 { + t.Fatalf("got message from %dth actor", who) + } + + nextNonce := nonces[who] + if m.Message.Nonce != nextNonce { + t.Fatalf("expected nonce %d but got %d", nextNonce, m.Message.Nonce) + } + nonces[who]++ + } +} + +func testCompetitiveMessageSelection(t *testing.T, rng *rand.Rand, getPremium func() uint64) (float64, float64, float64) { + // in this test we use 300 actors and send 10 blocks of messages. + // actors send with an randomly distributed premium dictated by the getPremium function. + // a number of miners select with varying ticket quality and we compare the + // capacity and rewards of greedy selection -vs- optimal selection + mp, tma := makeTestMpool() + + nActors := 300 + // the actors + var actors []address.Address + var wallets []*wallet.Wallet + + for i := 0; i < nActors; i++ { + w := newWallet(t) + + a, err := w.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + actors = append(actors, a) + wallets = append(wallets, w) + } + + block := tma.nextBlock() + ts := mkTipSet(block) + tma.applyBlock(t, block) + + gasLimit := gasguess.Costs[gasguess.CostKey{Code: builtin2.StorageMarketActorCodeID, M: 2}] + baseFee := tbig.NewInt(0) + + for _, a := range actors { + tma.setBalance(a, 1) // in FIL + } + + nMessages := int(10 * constants.BlockGasLimit / gasLimit) + t.Log("nMessages", nMessages) + nonces := make([]uint64, nActors) + for i := 0; i < nMessages; i++ { + from := rng.Intn(nActors) + to := rng.Intn(nActors) + nonce := nonces[from] + nonces[from]++ + premium := getPremium() + m := makeTestMessage(wallets[from], actors[from], actors[to], nonce, gasLimit, premium) + mustAdd(t, mp, m) + } + + logging.SetLogLevel("messagepool", "error") // nolint: errcheck + + pending, err := mp.getPendingMessages(context.TODO(), mp.curTS, ts) + require.NoError(t, err) + // 1. greedy selection + gm, err := mp.selectMessagesGreedy(context.Background(), ts, ts, pending) + if err != nil { + t.Fatal(err) + } + + greedyMsgs := gm.msgs + + totalGreedyCapacity := 0.0 + totalGreedyReward := 0.0 + totalOptimalCapacity := 0.0 + totalOptimalReward := 0.0 + totalBestTQReward := 0.0 + const runs = 1 + for i := 0; i < runs; i++ { + // 2. optimal selection + minersRand := rng.Float64() + winerProba := noWinnersProb() + i := 0 + for ; i < MaxBlocks && minersRand > 0; i++ { + minersRand -= winerProba[i] + } + nMiners := i - 1 + if nMiners < 1 { + nMiners = 1 + } + + optMsgs := make(map[cid.Cid]*types.SignedMessage) + bestTq := 0.0 + var bestMsgs []*types.SignedMessage + for j := 0; j < nMiners; j++ { + tq := rng.Float64() + msgs, err := mp.SelectMessages(context.Background(), ts, tq) + if err != nil { + t.Fatal(err) + } + if tq > bestTq { + bestMsgs = msgs + } + + for _, m := range msgs { + c := m.Cid() + optMsgs[c] = m + } + } + + totalGreedyCapacity += float64(len(greedyMsgs)) + totalOptimalCapacity += float64(len(optMsgs)) + boost := float64(len(optMsgs)) / float64(len(greedyMsgs)) + + t.Logf("nMiners: %d", nMiners) + t.Logf("greedy capacity %d, optimal capacity %d (x %.1f )", len(greedyMsgs), + len(optMsgs), boost) + if len(greedyMsgs) > len(optMsgs) { + t.Errorf("greedy capacity higher than optimal capacity; wtf") + } + + greedyReward := big.NewInt(0) + for _, m := range greedyMsgs { + greedyReward.Add(greedyReward, mp.getGasReward(m, baseFee)) + } + + optReward := big.NewInt(0) + for _, m := range optMsgs { + optReward.Add(optReward, mp.getGasReward(m, baseFee)) + } + + bestTqReward := big.NewInt(0) + for _, m := range bestMsgs { + bestTqReward.Add(bestTqReward, mp.getGasReward(m, baseFee)) + } + + totalBestTQReward += float64(bestTqReward.Uint64()) + + nMinersBig := big.NewInt(int64(nMiners)) + greedyAvgReward, _ := new(big.Rat).SetFrac(greedyReward, nMinersBig).Float64() + totalGreedyReward += greedyAvgReward + optimalAvgReward, _ := new(big.Rat).SetFrac(optReward, nMinersBig).Float64() + totalOptimalReward += optimalAvgReward + + boost = optimalAvgReward / greedyAvgReward + t.Logf("greedy reward: %.0f, optimal reward: %.0f (x %.1f )", greedyAvgReward, + optimalAvgReward, boost) + + } + + capacityBoost := totalOptimalCapacity / totalGreedyCapacity + rewardBoost := totalOptimalReward / totalGreedyReward + t.Logf("Average capacity boost: %f", capacityBoost) + t.Logf("Average reward boost: %f", rewardBoost) + t.Logf("Average best tq reward: %f", totalBestTQReward/runs/1e12) + + logging.SetLogLevel("messagepool", "info") // nolint: errcheck + + return capacityBoost, rewardBoost, totalBestTQReward / runs / 1e12 +} + +func makeExpPremiumDistribution(rng *rand.Rand) func() uint64 { + return func() uint64 { + premium := 20000*math.Exp(-3.*rng.Float64()) + 5000 + return uint64(premium) + } +} + +// nolint +func makeZipfPremiumDistribution(rng *rand.Rand) func() uint64 { + zipf := rand.NewZipf(rng, 1.001, 1, 40000) + return func() uint64 { + return zipf.Uint64() + 10000 + } +} + +func TestCompetitiveMessageSelectionExp(t *testing.T) { + tf.UnitTest(t) + + if testing.Short() { + t.Skip("skipping in short mode") + } + var capacityBoost, rewardBoost, tqReward float64 + seeds := []int64{1947, 1976, 2020, 2100, 10000, 143324, 432432, 131, 32, 45} + for _, seed := range seeds { + t.Log("running competitive message selection with Exponential premium distribution and seed", seed) + rng := rand.New(rand.NewSource(seed)) + cb, rb, tqR := testCompetitiveMessageSelection(t, rng, makeExpPremiumDistribution(rng)) + capacityBoost += cb + rewardBoost += rb + tqReward += tqR + } + + capacityBoost /= float64(len(seeds)) + rewardBoost /= float64(len(seeds)) + tqReward /= float64(len(seeds)) + t.Logf("Average capacity boost across all seeds: %f", capacityBoost) + t.Logf("Average reward boost across all seeds: %f", rewardBoost) + t.Logf("Average reward of best ticket across all seeds: %f", tqReward) +} + +func TestCompetitiveMessageSelectionZipf(t *testing.T) { + tf.UnitTest(t) + t.Skipf("'TestCompetitiveMessageSelectionZipf' cost such a long time, we have done enough tests for this module") + + var capacityBoost, rewardBoost, tqReward float64 + seeds := []int64{1947, 1976, 2020, 2100, 10000, 143324, 432432, 131, 32, 45} + for _, seed := range seeds { + t.Log("running competitive message selection with Zipf premium distribution and seed", seed) + rng := rand.New(rand.NewSource(seed)) + cb, rb, tqR := testCompetitiveMessageSelection(t, rng, makeZipfPremiumDistribution(rng)) + capacityBoost += cb + rewardBoost += rb + tqReward += tqR + } + + tqReward /= float64(len(seeds)) + capacityBoost /= float64(len(seeds)) + rewardBoost /= float64(len(seeds)) + t.Logf("Average capacity boost across all seeds: %f", capacityBoost) + t.Logf("Average reward boost across all seeds: %f", rewardBoost) + t.Logf("Average reward of best ticket across all seeds: %f", tqReward) +} + +func TestGasReward(t *testing.T) { + tf.UnitTest(t) + + tests := []struct { + Premium uint64 + FeeCap uint64 + BaseFee uint64 + GasReward int64 + }{ + {Premium: 100, FeeCap: 200, BaseFee: 100, GasReward: 100}, + {Premium: 100, FeeCap: 200, BaseFee: 210, GasReward: -10 * 3}, + {Premium: 200, FeeCap: 250, BaseFee: 210, GasReward: 40}, + {Premium: 200, FeeCap: 250, BaseFee: 2000, GasReward: -1750 * 3}, + } + + mp := new(MessagePool) + for _, test := range tests { + test := test + t.Run(fmt.Sprintf("%v", test), func(t *testing.T) { + msg := &types.SignedMessage{ + Message: types.Message{ + GasLimit: 10, + GasFeeCap: tbig.NewInt(int64(test.FeeCap)), + GasPremium: tbig.NewInt(int64(test.Premium)), + }, + } + rew := mp.getGasReward(msg, tbig.NewInt(int64(test.BaseFee))) + if rew.Cmp(big.NewInt(test.GasReward*10)) != 0 { + t.Errorf("bad reward: expected %d, got %s", test.GasReward*10, rew) + } + }) + } +} + +type SignedMessage struct { + Message types.Message + Signature crypto.Signature +} + +func TestRealWorldSelection(t *testing.T) { + tf.UnitTest(t) + + // load test-messages.json.gz and rewrite the messages so that + // 1) we map each real actor to a test actor so that we can sign the messages + // 2) adjust the nonces so that they start from 0 + file, err := os.Open("test-messages.json.gz") + if err != nil { + t.Fatal(err) + } + + gzr, err := gzip.NewReader(file) + if err != nil { + t.Fatal(err) + } + + dec := json.NewDecoder(gzr) + + var msgs []*types.SignedMessage + baseNonces := make(map[address.Address]uint64) + +readLoop: + for { + m := new(SignedMessage) + err := dec.Decode(m) + switch err { + case nil: + sm := types.SignedMessage{ + Message: m.Message, + Signature: m.Signature, + } + msgs = append(msgs, &sm) + + nonce, ok := baseNonces[m.Message.From] + if !ok || m.Message.Nonce < nonce { + baseNonces[m.Message.From] = m.Message.Nonce + } + + case io.EOF: + break readLoop + + default: + t.Fatal(err) + } + } + + actorMap := make(map[address.Address]address.Address) + actorWallets := make(map[address.Address]*wallet.Wallet) + ctx := context.Background() + + for _, m := range msgs { + baseNonce := baseNonces[m.Message.From] + + localActor, ok := actorMap[m.Message.From] + if !ok { + w := newWallet(t) + + a, err := w.NewAddress(context.Background(), address.SECP256K1) + if err != nil { + t.Fatal(err) + } + + actorMap[m.Message.From] = a + actorWallets[a] = w + localActor = a + } + + w, ok := actorWallets[localActor] + if !ok { + t.Fatalf("failed to lookup wallet for actor %s", localActor) + } + + m.Message.From = localActor + m.Message.Nonce -= baseNonce + + c := m.Message.Cid() + sig, err := w.WalletSign(context.Background(), localActor, c.Bytes(), mtypes.MsgMeta{}) + if err != nil { + t.Fatal(err) + } + + m.Signature = *sig + } + + mp, tma := makeTestMpool() + + block := tma.nextBlockWithHeight(UpgradeBreezeHeight + 10) + ts := mkTipSet(block) + tma.applyBlock(t, block) + + for _, a := range actorMap { + tma.setBalance(a, 1000000) + } + + tma.baseFee = tbig.NewInt(800_000_000) + + sort.Slice(msgs, func(i, j int) bool { + return msgs[i].Message.Nonce < msgs[j].Message.Nonce + }) + + // add the messages + for _, m := range msgs { + mustAdd(t, mp, m) + } + + // do message selection and check block packing + minGasLimit := int64(0.9 * float64(constants.BlockGasLimit)) + + // greedy first + selected, err := mp.SelectMessages(ctx, ts, 1.0) + if err != nil { + t.Fatal(err) + } + + gasLimit := int64(0) + for _, m := range selected { + gasLimit += m.Message.GasLimit + } + if gasLimit < minGasLimit { + t.Fatalf("failed to pack with tq=1.0; packed %d, minimum packing: %d", gasLimit, minGasLimit) + } + + // high quality ticket + selected, err = mp.SelectMessages(ctx, ts, .8) + if err != nil { + t.Fatal(err) + } + + gasLimit = int64(0) + for _, m := range selected { + gasLimit += m.Message.GasLimit + } + if gasLimit < minGasLimit { + t.Fatalf("failed to pack with tq=0.8; packed %d, minimum packing: %d", gasLimit, minGasLimit) + } + + // mid quality ticket + selected, err = mp.SelectMessages(context.Background(), ts, .4) + if err != nil { + t.Fatal(err) + } + + gasLimit = int64(0) + for _, m := range selected { + gasLimit += m.Message.GasLimit + } + if gasLimit < minGasLimit { + t.Fatalf("failed to pack with tq=0.4; packed %d, minimum packing: %d", gasLimit, minGasLimit) + } + + // low quality ticket + selected, err = mp.SelectMessages(context.Background(), ts, .1) + if err != nil { + t.Fatal(err) + } + + gasLimit = int64(0) + for _, m := range selected { + gasLimit += m.Message.GasLimit + } + if gasLimit < minGasLimit { + t.Fatalf("failed to pack with tq=0.1; packed %d, minimum packing: %d", gasLimit, minGasLimit) + } + + // very low quality ticket + selected, err = mp.SelectMessages(context.Background(), ts, .01) + if err != nil { + t.Fatal(err) + } + + gasLimit = int64(0) + for _, m := range selected { + gasLimit += m.Message.GasLimit + } + if gasLimit < minGasLimit { + t.Fatalf("failed to pack with tq=0.01; packed %d, minimum packing: %d", gasLimit, minGasLimit) + } + +} diff --git a/pkg/messagepool/test-messages.json.gz b/pkg/messagepool/test-messages.json.gz new file mode 100644 index 0000000000..09481e1f88 Binary files /dev/null and b/pkg/messagepool/test-messages.json.gz differ diff --git a/internal/pkg/metrics/counter.go b/pkg/metrics/counter.go similarity index 100% rename from internal/pkg/metrics/counter.go rename to pkg/metrics/counter.go diff --git a/pkg/metrics/export.go b/pkg/metrics/export.go new file mode 100644 index 0000000000..cedf6fe0e9 --- /dev/null +++ b/pkg/metrics/export.go @@ -0,0 +1,93 @@ +package metrics + +import ( + "net/http" + "time" + + "contrib.go.opencensus.io/exporter/jaeger" + "contrib.go.opencensus.io/exporter/prometheus" + ma "github.com/multiformats/go-multiaddr" + manet "github.com/multiformats/go-multiaddr/net" + prom "github.com/prometheus/client_golang/prometheus" + "go.opencensus.io/stats/view" + "go.opencensus.io/trace" + + "github.com/filecoin-project/venus/pkg/config" +) + +// RegisterPrometheusEndpoint registers and serves prometheus metrics +func RegisterPrometheusEndpoint(cfg *config.MetricsConfig) error { + if !cfg.PrometheusEnabled { + return nil + } + + // validate config values and marshal to types + interval, err := time.ParseDuration(cfg.ReportInterval) + if err != nil { + log.Errorf("invalid metrics interval: %s", err) + return err + } + + promma, err := ma.NewMultiaddr(cfg.PrometheusEndpoint) + if err != nil { + return err + } + + _, promAddr, err := manet.DialArgs(promma) // nolint + if err != nil { + return err + } + + // setup prometheus + registry := prom.NewRegistry() + pe, err := prometheus.NewExporter(prometheus.Options{ + Namespace: "filecoin", + Registry: registry, + }) + if err != nil { + return err + } + + view.RegisterExporter(pe) + view.SetReportingPeriod(interval) + + go func() { + mux := http.NewServeMux() + mux.Handle("/metrics", pe) + if err := http.ListenAndServe(promAddr, mux); err != nil { + log.Errorf("failed to serve /metrics endpoint on %v", err) + } + }() + + return nil +} + +// RegisterJaeger registers the jaeger endpoint with opencensus and names the +// tracer `name`. +func RegisterJaeger(name string, cfg *config.TraceConfig) (*jaeger.Exporter, error) { + if !cfg.JaegerTracingEnabled { + return nil, nil + } + + if len(cfg.ServerName) != 0 { + name = cfg.ServerName + } + + je, err := jaeger.NewExporter(jaeger.Options{ + AgentEndpoint: cfg.JaegerEndpoint, + Process: jaeger.Process{ + ServiceName: name, + }, + }) + if err != nil { + return nil, err + } + + trace.RegisterExporter(je) + // trace.ApplyConfig(trace.Config{DefaultSampler: trace.AlwaysSample()}) + trace.ApplyConfig(trace.Config{DefaultSampler: trace.ProbabilitySampler(cfg.ProbabilitySampler)}) + + log.Infof("register tracing exporter:%s, service name:%s", cfg.JaegerEndpoint, name) + + return je, err +} diff --git a/internal/pkg/metrics/gauge.go b/pkg/metrics/gauge.go similarity index 100% rename from internal/pkg/metrics/gauge.go rename to pkg/metrics/gauge.go diff --git a/internal/pkg/metrics/heartbeat.go b/pkg/metrics/heartbeat.go similarity index 93% rename from internal/pkg/metrics/heartbeat.go rename to pkg/metrics/heartbeat.go index f200f2d98d..96425943ec 100644 --- a/internal/pkg/metrics/heartbeat.go +++ b/pkg/metrics/heartbeat.go @@ -8,7 +8,7 @@ import ( "time" "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" + "github.com/filecoin-project/go-state-types/abi" logging "github.com/ipfs/go-log/v2" "github.com/libp2p/go-libp2p-core/host" net "github.com/libp2p/go-libp2p-core/network" @@ -16,11 +16,10 @@ import ( "github.com/libp2p/go-libp2p-core/peerstore" ma "github.com/multiformats/go-multiaddr" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/ipfs/go-cid" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" + "github.com/filecoin-project/venus/pkg/config" + types "github.com/filecoin-project/venus/venus-shared/chain" ) // HeartbeatProtocol is the libp2p protocol used for the heartbeat service @@ -46,7 +45,7 @@ type Heartbeat struct { // Syncing is `true` iff the node is currently syncing its chain with the network. // Syncing bool - // Address of this node's active miner. Can be empty - will return the zero address + // MinerAddress of this node's active miner. Can be empty - will return the zero address MinerAddress address.Address // CID of this chain's genesis block. @@ -60,7 +59,7 @@ type HeartbeatService struct { Config *config.HeartbeatConfig // A function that returns the heaviest tipset - HeadGetter func() (block.TipSet, error) + HeadGetter func() (types.TipSet, error) // A function that returns the miner's address MinerAddressGetter func() address.Address @@ -84,7 +83,7 @@ func defaultMinerAddressGetter() address.Address { } // NewHeartbeatService returns a HeartbeatService -func NewHeartbeatService(h host.Host, genesisCID cid.Cid, hbc *config.HeartbeatConfig, hg func() (block.TipSet, error), options ...HeartbeatServiceOption) *HeartbeatService { +func NewHeartbeatService(h host.Host, genesisCID cid.Cid, hbc *config.HeartbeatConfig, hg func() (types.TipSet, error), options ...HeartbeatServiceOption) *HeartbeatService { srv := &HeartbeatService{ Host: h, GenesisCID: genesisCID, @@ -207,10 +206,8 @@ func (hbs *HeartbeatService) Beat(ctx context.Context) Heartbeat { log.Errorf("unable to fetch chain head: %s", err) } tipset := ts.Key().String() - height, err := ts.Height() - if err != nil { - log.Warnf("heartbeat service failed to get chain height: %s", err) - } + height := ts.Height() + addr := hbs.MinerAddressGetter() return Heartbeat{ Head: tipset, diff --git a/pkg/metrics/heartbeat_test.go b/pkg/metrics/heartbeat_test.go new file mode 100644 index 0000000000..091b72a781 --- /dev/null +++ b/pkg/metrics/heartbeat_test.go @@ -0,0 +1,206 @@ +package metrics_test + +import ( + "context" + "crypto/rand" + "encoding/json" + "fmt" + "testing" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + fbig "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p-core/crypto" + "github.com/libp2p/go-libp2p-core/host" + net "github.com/libp2p/go-libp2p-core/network" + ma "github.com/multiformats/go-multiaddr" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/metrics" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +var testCid cid.Cid + +func init() { + c, err := cid.Decode("Qmd52WKRSwrBK5gUaJKawryZQ5by6UbNB8KVW2Zy6JtbyW") + if err != nil { + panic(err) + } + testCid = c +} + +type endpoint struct { + Host host.Host + Address string +} + +func newEndpoint(t *testing.T, port int) endpoint { + priv, _, err := crypto.GenerateKeyPairWithReader(crypto.RSA, 2048, rand.Reader) + if err != nil { + t.Fatal(err) + } + opts := []libp2p.Option{ + libp2p.DisableRelay(), + libp2p.ListenAddrStrings(fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", port)), + libp2p.Identity(priv), + } + + basicHost, err := libp2p.New(opts...) + if err != nil { + t.Fatal(err) + } + + // Build host multiaddress + hostAddr, _ := ma.NewMultiaddr(fmt.Sprintf("/ipfs/%s", basicHost.ID().Pretty())) + + // Now we can build a full multiaddress to reach this host + // by encapsulating both addresses: + addr := basicHost.Addrs()[0] + fullAddr := addr.Encapsulate(hostAddr) + + return endpoint{ + Host: basicHost, + Address: fullAddr.String(), + } +} + +func TestHeartbeatConnectSuccess(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + aggregator := newEndpoint(t, 0) + filecoin := newEndpoint(t, 0) + aggregator.Host.SetStreamHandler(metrics.HeartbeatProtocol, func(c net.Stream) { + }) + + hbs := metrics.NewHeartbeatService( + filecoin.Host, + testCid, + &config.HeartbeatConfig{ + BeatTarget: aggregator.Address, + BeatPeriod: "3s", + ReconnectPeriod: "10s", + Nickname: "BobHoblaw", + }, + func() (types.TipSet, error) { + tipSet := chain.NewBuilder(t, address.Undef).Genesis() + return *tipSet, nil + }, + ) + + assert.Equal(t, 1, len(aggregator.Host.Peerstore().Peers())) + assert.Contains(t, aggregator.Host.Peerstore().Peers(), aggregator.Host.ID()) + assert.NoError(t, hbs.Connect(ctx)) + assert.Equal(t, 2, len(aggregator.Host.Peerstore().Peers())) + assert.Contains(t, aggregator.Host.Peerstore().Peers(), aggregator.Host.ID()) + assert.Contains(t, aggregator.Host.Peerstore().Peers(), filecoin.Host.ID()) +} + +func TestHeartbeatConnectFailure(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + filecoin := newEndpoint(t, 60001) + + hbs := metrics.NewHeartbeatService( + filecoin.Host, + testCid, + &config.HeartbeatConfig{ + BeatTarget: "", + BeatPeriod: "3s", + ReconnectPeriod: "10s", + Nickname: "BobHoblaw", + }, + func() (types.TipSet, error) { + tipSet := chain.NewBuilder(t, address.Undef).Genesis() + return *tipSet, nil + }, + ) + assert.Error(t, hbs.Connect(ctx)) +} + +func TestHeartbeatRunSuccess(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + // we will use this to stop the run method after making assertions + runCtx, cancel := context.WithCancel(ctx) + + // port 0 to avoid conflicts + aggregator := newEndpoint(t, 0) + filecoin := newEndpoint(t, 0) + + // create a tipset, we will assert on it in the SetStreamHandler method + expHeight := abi.ChainEpoch(444) + expTS := mustMakeTipset(t, expHeight) + + addr, err := address.NewSecp256k1Address([]byte("miner address")) + require.NoError(t, err) + + // The handle method will run the assertions for the test + aggregator.Host.SetStreamHandler(metrics.HeartbeatProtocol, func(s net.Stream) { + defer func() { + require.NoError(t, s.Close()) + }() + + dec := json.NewDecoder(s) + var hb metrics.Heartbeat + require.NoError(t, dec.Decode(&hb)) + + assert.Equal(t, expTS.String(), hb.Head) + assert.Equal(t, abi.ChainEpoch(444), hb.Height) + assert.Equal(t, "BobHoblaw", hb.Nickname) + assert.Equal(t, addr, hb.MinerAddress) + cancel() + }) + + hbs := metrics.NewHeartbeatService( + filecoin.Host, + testCid, + &config.HeartbeatConfig{ + BeatTarget: aggregator.Address, + BeatPeriod: "1s", + ReconnectPeriod: "1s", + Nickname: "BobHoblaw", + }, + func() (types.TipSet, error) { + return *expTS, nil + }, + metrics.WithMinerAddressGetter(func() address.Address { + return addr + }), + ) + + require.NoError(t, hbs.Connect(ctx)) + + assert.NoError(t, hbs.Run(runCtx)) + assert.Error(t, runCtx.Err(), context.Canceled.Error()) +} + +func mustMakeTipset(t *testing.T, height abi.ChainEpoch) *types.TipSet { + ts, err := types.NewTipSet([]*types.BlockHeader{{ + Miner: testhelpers.NewForTestGetter()(), + Ticket: &types.Ticket{VRFProof: []byte{0}}, + Parents: types.TipSetKey{}.Cids(), + ParentWeight: fbig.Zero(), + Height: height, + ParentMessageReceipts: testhelpers.EmptyMessagesCID, + Messages: testhelpers.EmptyTxMetaCID, + ParentStateRoot: testhelpers.EmptyTxMetaCID, + }}) + if err != nil { + t.Fatal(err) + } + return ts +} diff --git a/internal/pkg/metrics/log_json_formatter.go b/pkg/metrics/log_json_formatter.go similarity index 100% rename from internal/pkg/metrics/log_json_formatter.go rename to pkg/metrics/log_json_formatter.go diff --git a/internal/pkg/metrics/timer.go b/pkg/metrics/timer.go similarity index 100% rename from internal/pkg/metrics/timer.go rename to pkg/metrics/timer.go diff --git a/internal/pkg/metrics/timer_test.go b/pkg/metrics/timer_test.go similarity index 94% rename from internal/pkg/metrics/timer_test.go rename to pkg/metrics/timer_test.go index 122f179bbd..d0cffcd937 100644 --- a/internal/pkg/metrics/timer_test.go +++ b/pkg/metrics/timer_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" "github.com/stretchr/testify/assert" "go.opencensus.io/stats/view" ) diff --git a/internal/pkg/metrics/tracing/util.go b/pkg/metrics/tracing/util.go similarity index 100% rename from internal/pkg/metrics/tracing/util.go rename to pkg/metrics/tracing/util.go diff --git a/pkg/migration/migrate.go b/pkg/migration/migrate.go new file mode 100644 index 0000000000..c3246bb55e --- /dev/null +++ b/pkg/migration/migrate.go @@ -0,0 +1,188 @@ +package migration + +import ( + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/fixtures/networks" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/repo" + logging "github.com/ipfs/go-log/v2" + + "math" +) + +var migrateLog = logging.Logger("data_migrate") + +type UpgradeFunc func(string) error + +type versionInfo struct { + version uint + upgrade UpgradeFunc +} + +var versionMap = []versionInfo{ + {version: 3, upgrade: Version3Upgrade}, + {version: 4, upgrade: Version4Upgrade}, + {version: 5, upgrade: Version5Upgrade}, + {version: 6, upgrade: Version6Upgrade}, +} + +// TryToMigrate used to migrate data(db,config,file,etc) in local repo +func TryToMigrate(repoPath string) error { + localVersion, err := repo.ReadVersion(repoPath) + if err != nil { + return err + } + + for _, up := range versionMap { + if up.version > localVersion { + err = up.upgrade(repoPath) + if err != nil { + return err + } + migrateLog.Infof("success to upgrade version %d to version %d", localVersion, up.version) + localVersion = up.version + } + } + + return nil +} + +// Version3Upgrade 3 for a config filed named apiAuthUrl +func Version3Upgrade(repoPath string) error { + fsrRepo, err := repo.OpenFSRepo(repoPath, 2) + if err != nil { + return err + } + + cfg := fsrRepo.Config() + + switch cfg.NetworkParams.NetworkType { + case constants.NetworkMainnet: + fallthrough + case constants.Network2k: + fallthrough + case constants.NetworkCalibnet: + fallthrough + case constants.NetworkNerpa: + fallthrough + case constants.NetworkInterop: + cfg.API.VenusAuthURL = "" + } + + err = fsrRepo.ReplaceConfig(cfg) + if err != nil { + return err + } + err = fsrRepo.Close() + if err != nil { + return err + } + return repo.WriteVersion(repoPath, 3) +} + +func Version4Upgrade(repoPath string) (err error) { + var fsrRepo repo.Repo + if fsrRepo, err = repo.OpenFSRepo(repoPath, 3); err != nil { + return + } + cfg := fsrRepo.Config() + switch cfg.NetworkParams.NetworkType { + case constants.NetworkMainnet: + cfg.NetworkParams.ForkUpgradeParam = config.DefaultForkUpgradeParam + case constants.Network2k: + cfg.NetworkParams.ForkUpgradeParam = networks.Net2k().Network.ForkUpgradeParam + case constants.NetworkCalibnet: + cfg.NetworkParams.ForkUpgradeParam = networks.Calibration().Network.ForkUpgradeParam + case constants.NetworkForce: + cfg.NetworkParams.ForkUpgradeParam = networks.ForceNet().Network.ForkUpgradeParam + default: + return fsrRepo.Close() + } + + if err = fsrRepo.ReplaceConfig(cfg); err != nil { + return + } + + if err = fsrRepo.Close(); err != nil { + return + } + + return repo.WriteVersion(repoPath, 4) +} + +//Version5Upgrade +func Version5Upgrade(repoPath string) (err error) { + var fsrRepo repo.Repo + if fsrRepo, err = repo.OpenFSRepo(repoPath, 4); err != nil { + return + } + cfg := fsrRepo.Config() + switch cfg.NetworkParams.NetworkType { + case constants.NetworkMainnet: + cfg.NetworkParams.GenesisNetworkVersion = network.Version0 + cfg.NetworkParams.ForkUpgradeParam.UpgradeChocolateHeight = 1231620 + case constants.Network2k: + cfg.NetworkParams.GenesisNetworkVersion = network.Version0 + cfg.NetworkParams.ForkUpgradeParam.UpgradeChocolateHeight = -17 + case constants.NetworkCalibnet: + cfg.NetworkParams.GenesisNetworkVersion = network.Version0 + cfg.NetworkParams.ForkUpgradeParam.UpgradeChocolateHeight = 312746 + case constants.NetworkForce: + cfg.NetworkParams.GenesisNetworkVersion = network.Version0 + cfg.NetworkParams.ForkUpgradeParam.UpgradeChocolateHeight = math.MaxInt32 + case constants.NetworkInterop: + cfg.NetworkParams.GenesisNetworkVersion = network.Version0 + cfg.NetworkParams.ForkUpgradeParam.UpgradeChocolateHeight = -17 + default: + return fsrRepo.Close() + } + + if err = fsrRepo.ReplaceConfig(cfg); err != nil { + return + } + + if err = fsrRepo.Close(); err != nil { + return + } + + return repo.WriteVersion(repoPath, 5) +} + +//Version6Upgrade +func Version6Upgrade(repoPath string) (err error) { + var fsrRepo repo.Repo + if fsrRepo, err = repo.OpenFSRepo(repoPath, 5); err != nil { + return + } + cfg := fsrRepo.Config() + switch cfg.NetworkParams.NetworkType { + case constants.NetworkMainnet: + cfg.NetworkParams.GenesisNetworkVersion = network.Version0 + cfg.NetworkParams.ForkUpgradeParam.UpgradeChocolateHeight = 1231620 + case constants.Network2k: + cfg.NetworkParams.GenesisNetworkVersion = network.Version0 + cfg.NetworkParams.ForkUpgradeParam.UpgradeChocolateHeight = -17 + case constants.NetworkCalibnet: + cfg.NetworkParams.GenesisNetworkVersion = network.Version0 + cfg.NetworkParams.ForkUpgradeParam.UpgradeChocolateHeight = 312746 + case constants.NetworkForce: + cfg.NetworkParams.GenesisNetworkVersion = network.Version0 + cfg.NetworkParams.ForkUpgradeParam.UpgradeChocolateHeight = -17 + case constants.NetworkInterop: + cfg.NetworkParams.GenesisNetworkVersion = network.Version14 + cfg.NetworkParams.ForkUpgradeParam.UpgradeChocolateHeight = -17 + default: + return fsrRepo.Close() + } + + if err = fsrRepo.ReplaceConfig(cfg); err != nil { + return + } + + if err = fsrRepo.Close(); err != nil { + return + } + + return repo.WriteVersion(repoPath, 6) +} diff --git a/internal/pkg/net/address.go b/pkg/net/address.go similarity index 100% rename from internal/pkg/net/address.go rename to pkg/net/address.go diff --git a/internal/pkg/net/address_test.go b/pkg/net/address_test.go similarity index 90% rename from internal/pkg/net/address_test.go rename to pkg/net/address_test.go index 8da8004d01..1cc87824b3 100644 --- a/internal/pkg/net/address_test.go +++ b/pkg/net/address_test.go @@ -3,7 +3,7 @@ package net import ( "testing" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" "github.com/stretchr/testify/assert" ) diff --git a/pkg/net/blocksub/topic.go b/pkg/net/blocksub/topic.go new file mode 100644 index 0000000000..abb8e19edb --- /dev/null +++ b/pkg/net/blocksub/topic.go @@ -0,0 +1,10 @@ +package blocksub + +import ( + "fmt" +) + +// BlockTopic returns the network pubsub topic identifier on which new blocks are announced. +func Topic(networkName string) string { + return fmt.Sprintf("/fil/blocks/%s", networkName) +} diff --git a/pkg/net/blocksub/validator.go b/pkg/net/blocksub/validator.go new file mode 100644 index 0000000000..0107b06c40 --- /dev/null +++ b/pkg/net/blocksub/validator.go @@ -0,0 +1,60 @@ +package blocksub + +import ( + "bytes" + "context" + + "github.com/ipfs/go-log/v2" + "github.com/libp2p/go-libp2p-core/peer" + pubsub "github.com/libp2p/go-libp2p-pubsub" + + "github.com/filecoin-project/venus/pkg/metrics" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var blockTopicLogger = log.Logger("net/block_validator") +var mDecodeBlkFail = metrics.NewInt64Counter("net/pubsub_block_decode_failure", "Number of blocks that fail to decode seen on block pubsub channel") + +// BlockTopicValidator may be registered on go-libp2p-pubsub to validate blocksub messages. +type BlockTopicValidator struct { + validator pubsub.ValidatorEx + opts []pubsub.ValidatorOpt +} + +type BlockHeaderValidator interface { + ValidateBlockMsg(context.Context, *types.BlockMsg) pubsub.ValidationResult +} + +// NewBlockTopicValidator retruns a BlockTopicValidator using `bv` for message validation +func NewBlockTopicValidator(bv BlockHeaderValidator, opts ...pubsub.ValidatorOpt) *BlockTopicValidator { + return &BlockTopicValidator{ + opts: opts, + validator: func(ctx context.Context, p peer.ID, msg *pubsub.Message) pubsub.ValidationResult { + var bm types.BlockMsg + err := bm.UnmarshalCBOR(bytes.NewReader(msg.GetData())) + if err != nil { + blockTopicLogger.Warnf("failed to decode blocksub payload from peer %s: %s", p.String(), err.Error()) + mDecodeBlkFail.Inc(ctx, 1) + return pubsub.ValidationIgnore + } + + validateResult := bv.ValidateBlockMsg(ctx, &bm) + if validateResult == pubsub.ValidationAccept { + msg.ValidatorData = bm + } + return validateResult + }, + } +} + +func (btv *BlockTopicValidator) Topic(network string) string { + return Topic(network) +} + +func (btv *BlockTopicValidator) Validator() pubsub.ValidatorEx { + return btv.validator +} + +func (btv *BlockTopicValidator) Opts() []pubsub.ValidatorOpt { + return btv.opts +} diff --git a/pkg/net/blocksub/validator_test.go b/pkg/net/blocksub/validator_test.go new file mode 100644 index 0000000000..8d898972ad --- /dev/null +++ b/pkg/net/blocksub/validator_test.go @@ -0,0 +1,73 @@ +package blocksub_test + +import ( + "bytes" + "context" + "fmt" + "testing" + + "github.com/filecoin-project/go-address" + pubsub "github.com/libp2p/go-libp2p-pubsub" + pubsubpb "github.com/libp2p/go-libp2p-pubsub/pb" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/net/blocksub" + th "github.com/filecoin-project/venus/pkg/testhelpers" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func TestBlockTopicValidator(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + mbv := th.NewStubBlockValidator() + tv := blocksub.NewBlockTopicValidator(mbv, nil) + builder := chain.NewBuilder(t, address.Undef) + pid1 := th.RequireIntPeerID(t, 1) + + goodBlk := builder.BuildOnBlock(ctx, nil, func(b *chain.BlockBuilder) {}) + badBlk := builder.BuildOnBlock(ctx, nil, func(b *chain.BlockBuilder) { + b.IncHeight(1) + }) + + mbv.StubSyntaxValidationForBlock(badBlk, fmt.Errorf("invalid block")) + + validator := tv.Validator() + + network := "gfctest" + assert.Equal(t, blocksub.Topic(network), tv.Topic(network)) + assert.True(t, validator(ctx, pid1, blkToPubSub(t, goodBlk)) == pubsub.ValidationAccept) + assert.False(t, validator(ctx, pid1, blkToPubSub(t, badBlk)) == pubsub.ValidationAccept) + assert.False(t, validator(ctx, pid1, nonBlkPubSubMsg()) == pubsub.ValidationAccept) +} + +// convert a types.BlockHeader to a pubsub message +func blkToPubSub(t *testing.T, blk *types.BlockHeader) *pubsub.Message { + bm := types.BlockMsg{ + Header: blk, + BlsMessages: nil, + SecpkMessages: nil, + } + buf := new(bytes.Buffer) + err := bm.MarshalCBOR(buf) + require.NoError(t, err) + + return &pubsub.Message{ + Message: &pubsubpb.Message{ + Data: buf.Bytes(), + }, + } +} + +// returns a pubsub message that will not decode to a types.BlockHeader +func nonBlkPubSubMsg() *pubsub.Message { + pbm := &pubsubpb.Message{ + Data: []byte("meow"), + } + return &pubsub.Message{ + Message: pbm, + } +} diff --git a/internal/pkg/net/msgsub/topic.go b/pkg/net/msgsub/topic.go similarity index 100% rename from internal/pkg/net/msgsub/topic.go rename to pkg/net/msgsub/topic.go diff --git a/pkg/net/msgsub/validator.go b/pkg/net/msgsub/validator.go new file mode 100644 index 0000000000..f8e42f8d44 --- /dev/null +++ b/pkg/net/msgsub/validator.go @@ -0,0 +1,65 @@ +package msgsub + +import ( + "bytes" + "context" + + logging "github.com/ipfs/go-log" + "github.com/libp2p/go-libp2p-core/peer" + pubsub "github.com/libp2p/go-libp2p-pubsub" + + "github.com/filecoin-project/venus/pkg/consensus" + "github.com/filecoin-project/venus/pkg/metrics" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var messageTopicLogger = logging.Logger("net/message_validator") +var mDecodeMsgFail = metrics.NewInt64Counter("net/pubsub_message_decode_failure", "Number of messages that fail to decode seen on message pubsub channel") +var mInvalidMsg = metrics.NewInt64Counter("net/pubsub_invalid_message", "Number of messages that fail syntax validation seen on message pubsub channel") + +// MessageTopicValidator may be registered on go-libp3p-pubsub to validate msgsub payloads. +type MessageTopicValidator struct { + validator pubsub.Validator + opts []pubsub.ValidatorOpt +} + +// NewMessageTopicValidator returns a MessageTopicValidator using the input +// signature and syntax validators. +func NewMessageTopicValidator(syntaxVal *consensus.DefaultMessageSyntaxValidator, sigVal *consensus.MessageSignatureValidator, opts ...pubsub.ValidatorOpt) *MessageTopicValidator { + return &MessageTopicValidator{ + opts: opts, + validator: func(ctx context.Context, p peer.ID, msg *pubsub.Message) bool { + unmarshaled := &types.SignedMessage{} + if err := unmarshaled.UnmarshalCBOR(bytes.NewReader(msg.GetData())); err != nil { + messageTopicLogger.Debugf("message from peer: %s failed to decode: %s", p.String(), err.Error()) + mDecodeMsgFail.Inc(ctx, 1) + return false + } + if err := syntaxVal.ValidateSignedMessageSyntax(ctx, unmarshaled); err != nil { + mCid := unmarshaled.Cid() + messageTopicLogger.Debugf("message %s from peer: %s failed to syntax validate: %s", mCid.String(), p.String(), err.Error()) + mInvalidMsg.Inc(ctx, 1) + return false + } + if err := sigVal.Validate(ctx, unmarshaled); err != nil { + mCid := unmarshaled.Cid() + messageTopicLogger.Debugf("message %s from peer: %s failed to signature validate: %s", mCid.String(), p.String(), err.Error()) + mInvalidMsg.Inc(ctx, 1) + return false + } + return true + }, + } +} + +func (mtv *MessageTopicValidator) Topic(network string) string { + return Topic(network) +} + +func (mtv *MessageTopicValidator) Validator() pubsub.Validator { + return mtv.validator +} + +func (mtv *MessageTopicValidator) Opts() []pubsub.ValidatorOpt { + return mtv.opts +} diff --git a/pkg/net/network.go b/pkg/net/network.go new file mode 100644 index 0000000000..38d1cc3486 --- /dev/null +++ b/pkg/net/network.go @@ -0,0 +1,132 @@ +package net + +import ( + "context" + "fmt" + "sort" + "sync" + + "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/peer" + swarm "github.com/libp2p/go-libp2p-swarm" + ma "github.com/multiformats/go-multiaddr" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/venus-shared/libp2p/net" +) + +// Network is a unified interface for dealing with libp2p +type Network struct { + host host.Host + metrics.Reporter + *Router +} + +// New returns a new Network +func New( + host host.Host, + router *Router, + reporter metrics.Reporter, +) *Network { + return &Network{ + host: host, + Reporter: reporter, + Router: router, + } +} + +// GetPeerAddresses gets the current addresses of the node +func (network *Network) GetPeerAddresses() []ma.Multiaddr { + return network.host.Addrs() +} + +// GetPeerID gets the current peer id from libp2p-host +func (network *Network) GetPeerID() peer.ID { + return network.host.ID() +} + +// GetBandwidthStats gets stats on the current bandwidth usage of the network +func (network *Network) GetBandwidthStats() metrics.Stats { + return network.Reporter.GetBandwidthTotals() +} + +// Connect connects to peers at the given addresses. Does not retry. +func (network *Network) Connect(ctx context.Context, addrs []string) (<-chan net.ConnectionResult, error) { + outCh := make(chan net.ConnectionResult) + + swrm, ok := network.host.Network().(*swarm.Swarm) + if !ok { + return nil, fmt.Errorf("peerhost network was not a swarm") + } + + pis, err := PeerAddrsToAddrInfo(addrs) + if err != nil { + return nil, err + } + + go func() { + var wg sync.WaitGroup + wg.Add(len(pis)) + + for _, pi := range pis { + go func(pi peer.AddrInfo) { + swrm.Backoff().Clear(pi.ID) + err := network.host.Connect(ctx, pi) + outCh <- net.ConnectionResult{ + PeerID: pi.ID, + Err: err, + } + wg.Done() + }(pi) + } + + wg.Wait() + close(outCh) + }() + + return outCh, nil +} + +// Peers lists peers currently available on the network +func (network *Network) Peers(ctx context.Context, verbose, latency, streams bool) (*net.SwarmConnInfos, error) { + if network.host == nil { + return nil, errors.New("node must be online") + } + + conns := network.host.Network().Conns() + + out := net.SwarmConnInfos{ + Peers: []net.SwarmConnInfo{}, + } + for _, c := range conns { + pid := c.RemotePeer() + addr := c.RemoteMultiaddr() + + ci := net.SwarmConnInfo{ + Addr: addr.String(), + Peer: pid.Pretty(), + } + + if verbose || latency { + lat := network.host.Peerstore().LatencyEWMA(pid) + if lat == 0 { + ci.Latency = "n/a" + } else { + ci.Latency = lat.String() + } + } + if verbose || streams { + strs := c.GetStreams() + + for _, s := range strs { + ci.Streams = append(ci.Streams, net.SwarmStreamInfo{Protocol: string(s.Protocol())}) + } + } + sort.Sort(&ci) + out.Peers = append(out.Peers, ci) + } + + sort.Sort(&out) + return &out, nil +} diff --git a/pkg/net/parse.go b/pkg/net/parse.go new file mode 100644 index 0000000000..201e4969d0 --- /dev/null +++ b/pkg/net/parse.go @@ -0,0 +1,89 @@ +package net + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" + madns "github.com/multiformats/go-multiaddr-dns" +) + +// ParseAddresses is a function that takes in a slice of string peer addresses +// (multiaddr + peerid) and returns a slice of properly constructed peers +func ParseAddresses(ctx context.Context, addrs []string) ([]peer.AddrInfo, error) { + // resolve addresses + maddrs, err := resolveAddresses(ctx, addrs) + if err != nil { + return nil, err + } + + return peer.AddrInfosFromP2pAddrs(maddrs...) +} + +const ( + dnsResolveTimeout = 10 * time.Second +) + +// resolveAddresses resolves addresses parallelly +func resolveAddresses(ctx context.Context, addrs []string) ([]ma.Multiaddr, error) { + ctx, cancel := context.WithTimeout(ctx, dnsResolveTimeout) + defer cancel() + + var maddrs []ma.Multiaddr + var wg sync.WaitGroup + resolveErrC := make(chan error, len(addrs)) + + maddrC := make(chan ma.Multiaddr) + + for _, addr := range addrs { + maddr, err := ma.NewMultiaddr(addr) + if err != nil { + return nil, err + } + + // check whether address ends in `ipfs/Qm...` + if _, last := ma.SplitLast(maddr); last.Protocol().Code == ma.P_IPFS { + maddrs = append(maddrs, maddr) + continue + } + wg.Add(1) + go func(maddr ma.Multiaddr) { + defer wg.Done() + raddrs, err := madns.Resolve(ctx, maddr) + if err != nil { + resolveErrC <- err + return + } + // filter out addresses that still doesn't end in `ipfs/Qm...` + found := 0 + for _, raddr := range raddrs { + if _, last := ma.SplitLast(raddr); last != nil && last.Protocol().Code == ma.P_IPFS { + maddrC <- raddr + found++ + } + } + if found == 0 { + resolveErrC <- fmt.Errorf("found no ipfs peers at %s", maddr) + } + }(maddr) + } + go func() { + wg.Wait() + close(maddrC) + }() + + for maddr := range maddrC { + maddrs = append(maddrs, maddr) + } + + select { + case err := <-resolveErrC: + return nil, err + default: + } + + return maddrs, nil +} diff --git a/pkg/net/peermgr.go b/pkg/net/peermgr.go new file mode 100644 index 0000000000..6d0e609fb3 --- /dev/null +++ b/pkg/net/peermgr.go @@ -0,0 +1,218 @@ +package net + +import ( + "context" + "sync" + "time" + + "golang.org/x/xerrors" + + "github.com/libp2p/go-libp2p-core/event" + host "github.com/libp2p/go-libp2p-core/host" + net "github.com/libp2p/go-libp2p-core/network" + peer "github.com/libp2p/go-libp2p-core/peer" + dht "github.com/libp2p/go-libp2p-kad-dht" + + logging "github.com/ipfs/go-log/v2" +) + +var log = logging.Logger("peermgr") + +const ( + MaxFilPeers = 320 + MinFilPeers = 128 +) + +type IPeerMgr interface { + AddFilecoinPeer(p peer.ID) + GetPeerLatency(p peer.ID) (time.Duration, bool) + SetPeerLatency(p peer.ID, latency time.Duration) + Disconnect(p peer.ID) + Stop(ctx context.Context) error + Run(ctx context.Context) +} + +var _ IPeerMgr = &PeerMgr{} +var _ IPeerMgr = &MockPeerMgr{} + +type PeerMgr struct { + bootstrappers []peer.AddrInfo + + // peerLeads is a set of peers we hear about through the network + // and who may be good peers to connect to for expanding our peer set + //peerLeads map[peer.ID]time.Time // TODO: unused + + peersLk sync.Mutex + peers map[peer.ID]time.Duration + + maxFilPeers int + minFilPeers int + + expanding chan struct{} + + h host.Host + dht *dht.IpfsDHT + + notifee *net.NotifyBundle + filPeerEmitter event.Emitter + + period time.Duration + done chan struct{} +} + +type NewFilPeer struct { + Id peer.ID //nolint +} + +func NewPeerMgr(h host.Host, dht *dht.IpfsDHT, period time.Duration, bootstrap []peer.AddrInfo) (*PeerMgr, error) { + pm := &PeerMgr{ + h: h, + dht: dht, + bootstrappers: bootstrap, + + peers: make(map[peer.ID]time.Duration), + expanding: make(chan struct{}, 1), + + maxFilPeers: MaxFilPeers, + minFilPeers: MinFilPeers, + + done: make(chan struct{}), + period: period, + } + emitter, err := h.EventBus().Emitter(new(NewFilPeer)) + if err != nil { + return nil, xerrors.Errorf("creating NewFilPeer emitter: %w", err) + } + pm.filPeerEmitter = emitter + + pm.notifee = &net.NotifyBundle{ + DisconnectedF: func(_ net.Network, c net.Conn) { + pm.Disconnect(c.RemotePeer()) + }, + } + + h.Network().Notify(pm.notifee) + + return pm, nil +} + +func (pmgr *PeerMgr) AddFilecoinPeer(p peer.ID) { + _ = pmgr.filPeerEmitter.Emit(NewFilPeer{Id: p}) //nolint:errcheck + pmgr.peersLk.Lock() + defer pmgr.peersLk.Unlock() + pmgr.peers[p] = time.Duration(0) +} + +func (pmgr *PeerMgr) GetPeerLatency(p peer.ID) (time.Duration, bool) { + pmgr.peersLk.Lock() + defer pmgr.peersLk.Unlock() + dur, ok := pmgr.peers[p] + return dur, ok +} + +func (pmgr *PeerMgr) SetPeerLatency(p peer.ID, latency time.Duration) { + pmgr.peersLk.Lock() + defer pmgr.peersLk.Unlock() + if _, ok := pmgr.peers[p]; ok { + pmgr.peers[p] = latency + } + +} + +func (pmgr *PeerMgr) Disconnect(p peer.ID) { + if pmgr.h.Network().Connectedness(p) == net.NotConnected { + pmgr.peersLk.Lock() + defer pmgr.peersLk.Unlock() + delete(pmgr.peers, p) + } +} + +func (pmgr *PeerMgr) Stop(ctx context.Context) error { + log.Warn("closing peermgr done") + _ = pmgr.filPeerEmitter.Close() + close(pmgr.done) + return nil +} + +func (pmgr *PeerMgr) Run(ctx context.Context) { + tick := time.NewTicker(pmgr.period) + for { + select { + case <-tick.C: + pcount := pmgr.getPeerCount() + if pcount < pmgr.minFilPeers { + pmgr.expandPeers() + } else if pcount > pmgr.maxFilPeers { + log.Debugf("peer count about threshold: %d > %d", pcount, pmgr.maxFilPeers) + } + case <-pmgr.done: + log.Warn("exiting peermgr run") + return + } + } +} + +func (pmgr *PeerMgr) getPeerCount() int { + pmgr.peersLk.Lock() + defer pmgr.peersLk.Unlock() + return len(pmgr.peers) +} + +func (pmgr *PeerMgr) expandPeers() { + select { + case pmgr.expanding <- struct{}{}: + default: + return + } + + go func() { + ctx, cancel := context.WithTimeout(context.TODO(), time.Second*30) + defer cancel() + + pmgr.doExpand(ctx) + + <-pmgr.expanding + }() +} + +func (pmgr *PeerMgr) doExpand(ctx context.Context) { + pcount := pmgr.getPeerCount() + if pcount == 0 { + if len(pmgr.bootstrappers) == 0 { + log.Warn("no peers connected, and no bootstrappers configured") + return + } + + log.Info("connecting to bootstrap peers") + for _, bsp := range pmgr.bootstrappers { + if err := pmgr.h.Connect(ctx, bsp); err != nil { + log.Warnf("failed to connect to bootstrap peer: %s", err) + } + } + return + } + + // if we already have some peers and need more, the dht is really good at connecting to most peers. Use that for now until something better comes along. + if err := pmgr.dht.Bootstrap(ctx); err != nil { + log.Warnf("dht bootstrapping failed: %s", err) + } +} + +type MockPeerMgr struct { +} + +func (m MockPeerMgr) AddFilecoinPeer(p peer.ID) {} + +func (m MockPeerMgr) GetPeerLatency(p peer.ID) (time.Duration, bool) { + return time.Duration(0), true +} + +func (m MockPeerMgr) SetPeerLatency(p peer.ID, latency time.Duration) {} + +func (m MockPeerMgr) Disconnect(p peer.ID) {} + +func (m MockPeerMgr) Stop(ctx context.Context) error { + return nil +} + +func (m MockPeerMgr) Run(ctx context.Context) {} diff --git a/internal/pkg/net/protocols.go b/pkg/net/protocols.go similarity index 100% rename from internal/pkg/net/protocols.go rename to pkg/net/protocols.go diff --git a/internal/pkg/net/pubsub/testing.go b/pkg/net/pubsub/testing.go similarity index 100% rename from internal/pkg/net/pubsub/testing.go rename to pkg/net/pubsub/testing.go diff --git a/pkg/net/pubsub/topic.go b/pkg/net/pubsub/topic.go new file mode 100644 index 0000000000..56b03dfc5e --- /dev/null +++ b/pkg/net/pubsub/topic.go @@ -0,0 +1,82 @@ +package pubsub + +import ( + "context" + + "github.com/libp2p/go-libp2p-core/peer" + libp2p "github.com/libp2p/go-libp2p-pubsub" +) + +// Topic publishes and subscribes to a libp2p pubsub topic +type Topic struct { + pubsubTopic *libp2p.Topic +} + +// Message defines the common interface for venus message consumers. +// It's a subset of the go-libp2p-pubsub/pubsub.go Message type. +type Message interface { + GetSource() peer.ID + GetSender() peer.ID + GetData() []byte +} + +type message struct { + inner *libp2p.Message +} + +// Subscription is a handle to a pubsub subscription. +// This matches part of the interface to a libp2p.pubsub.Subscription. +type Subscription interface { + // Topic returns this subscription's topic name + Topic() string + // Next returns the next message from this subscription + Next(ctx context.Context) (Message, error) + // Cancel cancels this subscription + Cancel() +} + +// NewTopic builds a new topic. +func NewTopic(topic *libp2p.Topic) *Topic { + return &Topic{pubsubTopic: topic} +} + +// Subscribe subscribes to a pubsub topic +func (t *Topic) Subscribe() (Subscription, error) { + sub, err := t.pubsubTopic.Subscribe() + return &subscriptionWrapper{sub}, err +} + +// Publish publishes to a pubsub topic. It blocks until there is at least one +// peer on the mesh that can receive the publish. +func (t *Topic) Publish(ctx context.Context, data []byte) error { + // return t.pubsubTopic.Publish(ctx, data) + return t.pubsubTopic.Publish(ctx, data, libp2p.WithReadiness(libp2p.MinTopicSize(1))) +} + +// subscriptionWrapper extends a pubsub.Subscription in order to wrap the Message type. +type subscriptionWrapper struct { + *libp2p.Subscription +} + +// Next wraps pubsub.Subscription.Next, implicitly adapting *pubsub.Message to the Message interface. +func (w subscriptionWrapper) Next(ctx context.Context) (Message, error) { + msg, err := w.Subscription.Next(ctx) + if err != nil { + return nil, err + } + return message{ + inner: msg, + }, nil +} + +func (m message) GetSender() peer.ID { + return m.inner.ReceivedFrom +} + +func (m message) GetSource() peer.ID { + return m.inner.GetFrom() +} + +func (m message) GetData() []byte { + return m.inner.GetData() +} diff --git a/internal/pkg/net/router.go b/pkg/net/router.go similarity index 98% rename from internal/pkg/net/router.go rename to pkg/net/router.go index 8c4574ad48..c208d23c5a 100644 --- a/internal/pkg/net/router.go +++ b/pkg/net/router.go @@ -49,7 +49,7 @@ func (r *Router) FindPeer(ctx context.Context, peerID peer.ID) (peer.AddrInfo, e // GetClosestPeers returns a channel of the K closest peers to the given key, // K is the 'K Bucket' parameter of the Kademlia DHT protocol. -func (r *Router) GetClosestPeers(ctx context.Context, key string) (<-chan peer.ID, error) { +func (r *Router) GetClosestPeers(ctx context.Context, key string) ([]peer.ID, error) { ipfsDHT, ok := r.routing.(*dht.IpfsDHT) if !ok { return nil, errors.New("underlying routing should be pointer of IpfsDHT") diff --git a/pkg/paychmgr/accessorcache.go b/pkg/paychmgr/accessorcache.go new file mode 100644 index 0000000000..ee6e4b57ab --- /dev/null +++ b/pkg/paychmgr/accessorcache.go @@ -0,0 +1,70 @@ +package paychmgr + +import ( + "context" + "github.com/filecoin-project/go-address" +) + +// accessorByFromTo gets a channel accessor for a given from / to pair. +// The channel accessor facilitates locking a channel so that operations +// must be performed sequentially on a channel (but can be performed at +// the same time on different channels). +func (pm *Manager) accessorByFromTo(from address.Address, to address.Address) (*channelAccessor, error) { + key := pm.accessorCacheKey(from, to) + + // First take a read lock and check the cache + pm.lk.RLock() + ca, ok := pm.channels[key] + pm.lk.RUnlock() + if ok { + return ca, nil + } + + // Not in cache, so take a write lock + pm.lk.Lock() + defer pm.lk.Unlock() + + // Need to check cache again in case it was updated between releasing read + // lock and taking write lock + ca, ok = pm.channels[key] + if !ok { + // Not in cache, so create a new one and store in cache + ca = pm.addAccessorToCache(from, to) + } + + return ca, nil +} + +// accessorByAddress gets a channel accessor for a given channel address. +// The channel accessor facilitates locking a channel so that operations +// must be performed sequentially on a channel (but can be performed at +// the same time on different channels). +func (pm *Manager) accessorByAddress(ctx context.Context, ch address.Address) (*channelAccessor, error) { + // Get the channel from / to + pm.lk.RLock() + channelInfo, err := pm.store.ByAddress(ctx, ch) + pm.lk.RUnlock() + if err != nil { + return nil, err + } + + // TODO: cache by channel address so we can get by address instead of using from / to + return pm.accessorByFromTo(channelInfo.Control, channelInfo.Target) +} + +// accessorCacheKey returns the cache key use to reference a channel accessor +func (pm *Manager) accessorCacheKey(from address.Address, to address.Address) string { + return from.String() + "->" + to.String() +} + +// addAccessorToCache adds a channel accessor to the cache. Note that the +// channel may not have been created yet, but we still want to reference +// the same channel accessor for a given from/to, so that all attempts to +// access a channel use the same lock (the lock on the accessor) +func (pm *Manager) addAccessorToCache(from address.Address, to address.Address) *channelAccessor { + key := pm.accessorCacheKey(from, to) + ca := newChannelAccessor(pm, from, to) + // TODO: Use LRU + pm.channels[key] = ca + return ca +} diff --git a/pkg/paychmgr/cbor_gen.go b/pkg/paychmgr/cbor_gen.go new file mode 100644 index 0000000000..cf6fd5a917 --- /dev/null +++ b/pkg/paychmgr/cbor_gen.go @@ -0,0 +1,566 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package paychmgr + +import ( + "fmt" + "io" + "sort" + + address "github.com/filecoin-project/go-address" + paych "github.com/filecoin-project/specs-actors/actors/builtin/paych" + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = sort.Sort + +var lengthBufVoucherInfo = []byte{131} + +func (t *VoucherInfo) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufVoucherInfo); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Voucher (paych.SignedVoucher) (struct) + if err := t.Voucher.MarshalCBOR(w); err != nil { + return err + } + + // t.Proof ([]uint8) (slice) + if len(t.Proof) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.Proof was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.Proof))); err != nil { + return err + } + + if _, err := w.Write(t.Proof[:]); err != nil { + return err + } + + // t.Submitted (bool) (bool) + if err := cbg.WriteBool(w, t.Submitted); err != nil { + return err + } + return nil +} + +func (t *VoucherInfo) UnmarshalCBOR(r io.Reader) error { + *t = VoucherInfo{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Voucher (paych.SignedVoucher) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.Voucher = new(paych.SignedVoucher) + if err := t.Voucher.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Voucher pointer: %w", err) + } + } + + } + // t.Proof ([]uint8) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.Proof: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.Proof = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.Proof[:]); err != nil { + return err + } + // t.Submitted (bool) (bool) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajOther { + return fmt.Errorf("booleans must be major type 7") + } + switch extra { + case 20: + t.Submitted = false + case 21: + t.Submitted = true + default: + return fmt.Errorf("booleans are either major type 7, value 20 or 21 (got %d)", extra) + } + return nil +} + +var lengthBufChannelInfo = []byte{140} + +func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufChannelInfo); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.ChannelID (string) (string) + if len(t.ChannelID) > cbg.MaxLength { + return xerrors.Errorf("Value in field t.ChannelID was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len(t.ChannelID))); err != nil { + return err + } + if _, err := io.WriteString(w, string(t.ChannelID)); err != nil { + return err + } + + // t.Channel (address.Address) (struct) + if err := t.Channel.MarshalCBOR(w); err != nil { + return err + } + + // t.Control (address.Address) (struct) + if err := t.Control.MarshalCBOR(w); err != nil { + return err + } + + // t.Target (address.Address) (struct) + if err := t.Target.MarshalCBOR(w); err != nil { + return err + } + + // t.Direction (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Direction)); err != nil { + return err + } + + // t.Vouchers ([]*paychmgr.VoucherInfo) (slice) + if len(t.Vouchers) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Vouchers was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Vouchers))); err != nil { + return err + } + for _, v := range t.Vouchers { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.NextLane (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.NextLane)); err != nil { + return err + } + + // t.Amount (big.Int) (struct) + if err := t.Amount.MarshalCBOR(w); err != nil { + return err + } + + // t.PendingAmount (big.Int) (struct) + if err := t.PendingAmount.MarshalCBOR(w); err != nil { + return err + } + + // t.CreateMsg (cid.Cid) (struct) + + if t.CreateMsg == nil { + if _, err := w.Write(cbg.CborNull); err != nil { + return err + } + } else { + if err := cbg.WriteCidBuf(scratch, w, *t.CreateMsg); err != nil { + return xerrors.Errorf("failed to write cid field t.CreateMsg: %w", err) + } + } + + // t.AddFundsMsg (cid.Cid) (struct) + + if t.AddFundsMsg == nil { + if _, err := w.Write(cbg.CborNull); err != nil { + return err + } + } else { + if err := cbg.WriteCidBuf(scratch, w, *t.AddFundsMsg); err != nil { + return xerrors.Errorf("failed to write cid field t.AddFundsMsg: %w", err) + } + } + + // t.Settling (bool) (bool) + if err := cbg.WriteBool(w, t.Settling); err != nil { + return err + } + return nil +} + +func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) error { + *t = ChannelInfo{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 12 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.ChannelID (string) (string) + + { + sval, err := cbg.ReadStringBuf(br, scratch) + if err != nil { + return err + } + + t.ChannelID = string(sval) + } + // t.Channel (address.Address) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.Channel = new(address.Address) + if err := t.Channel.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Channel pointer: %w", err) + } + } + + } + // t.Control (address.Address) (struct) + + { + + if err := t.Control.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Control: %w", err) + } + + } + // t.Target (address.Address) (struct) + + { + + if err := t.Target.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Target: %w", err) + } + + } + // t.Direction (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Direction = uint64(extra) + + } + // t.Vouchers ([]*paychmgr.VoucherInfo) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Vouchers: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Vouchers = make([]*VoucherInfo, extra) + } + + for i := 0; i < int(extra); i++ { + + var v VoucherInfo + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Vouchers[i] = &v + } + + // t.NextLane (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.NextLane = uint64(extra) + + } + // t.Amount (big.Int) (struct) + + { + + if err := t.Amount.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Amount: %w", err) + } + + } + // t.PendingAmount (big.Int) (struct) + + { + + if err := t.PendingAmount.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.PendingAmount: %w", err) + } + + } + // t.CreateMsg (cid.Cid) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.CreateMsg: %w", err) + } + + t.CreateMsg = &c + } + + } + // t.AddFundsMsg (cid.Cid) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.AddFundsMsg: %w", err) + } + + t.AddFundsMsg = &c + } + + } + // t.Settling (bool) (bool) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajOther { + return fmt.Errorf("booleans must be major type 7") + } + switch extra { + case 20: + t.Settling = false + case 21: + t.Settling = true + default: + return fmt.Errorf("booleans are either major type 7, value 20 or 21 (got %d)", extra) + } + return nil +} + +var lengthBufMsgInfo = []byte{132} + +func (t *MsgInfo) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufMsgInfo); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.ChannelID (string) (string) + if len(t.ChannelID) > cbg.MaxLength { + return xerrors.Errorf("Value in field t.ChannelID was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len(t.ChannelID))); err != nil { + return err + } + if _, err := io.WriteString(w, string(t.ChannelID)); err != nil { + return err + } + + // t.MsgCid (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.MsgCid); err != nil { + return xerrors.Errorf("failed to write cid field t.MsgCid: %w", err) + } + + // t.Received (bool) (bool) + if err := cbg.WriteBool(w, t.Received); err != nil { + return err + } + + // t.Err (string) (string) + if len(t.Err) > cbg.MaxLength { + return xerrors.Errorf("Value in field t.Err was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len(t.Err))); err != nil { + return err + } + if _, err := io.WriteString(w, string(t.Err)); err != nil { + return err + } + return nil +} + +func (t *MsgInfo) UnmarshalCBOR(r io.Reader) error { + *t = MsgInfo{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 4 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.ChannelID (string) (string) + + { + sval, err := cbg.ReadStringBuf(br, scratch) + if err != nil { + return err + } + + t.ChannelID = string(sval) + } + // t.MsgCid (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.MsgCid: %w", err) + } + + t.MsgCid = c + + } + // t.Received (bool) (bool) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajOther { + return fmt.Errorf("booleans must be major type 7") + } + switch extra { + case 20: + t.Received = false + case 21: + t.Received = true + default: + return fmt.Errorf("booleans are either major type 7, value 20 or 21 (got %d)", extra) + } + // t.Err (string) (string) + + { + sval, err := cbg.ReadStringBuf(br, scratch) + if err != nil { + return err + } + + t.Err = string(sval) + } + return nil +} diff --git a/pkg/paychmgr/channellock.go b/pkg/paychmgr/channellock.go new file mode 100644 index 0000000000..0dc785ec0f --- /dev/null +++ b/pkg/paychmgr/channellock.go @@ -0,0 +1,33 @@ +package paychmgr + +import "sync" + +type rwlock interface { + RLock() + RUnlock() +} + +// channelLock manages locking for a specific channel. +// Some operations update the state of a single channel, and need to block +// other operations only on the same channel's state. +// Some operations update state that affects all channels, and need to block +// any operation against any channel. +type channelLock struct { + globalLock rwlock + chanLock sync.Mutex +} + +func (l *channelLock) Lock() { + // Wait for other operations by this channel to finish. + // Exclusive per-channel (no other ops by this channel allowed). + l.chanLock.Lock() + // Wait for operations affecting all channels to finish. + // Allows ops by other channels in parallel, but blocks all operations + // if global lock is taken exclusively (eg when adding a channel) + l.globalLock.RLock() +} + +func (l *channelLock) Unlock() { + l.globalLock.RUnlock() + l.chanLock.Unlock() +} diff --git a/pkg/paychmgr/manager.go b/pkg/paychmgr/manager.go new file mode 100644 index 0000000000..64dcd620f1 --- /dev/null +++ b/pkg/paychmgr/manager.go @@ -0,0 +1,355 @@ +package paychmgr + +import ( + "context" + "errors" + "sync" + + "github.com/filecoin-project/venus/pkg/statemanger" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + paychtypes "github.com/filecoin-project/venus/venus-shared/paych" + + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + logging "github.com/ipfs/go-log/v2" + xerrors "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" +) + +var log = logging.Logger("paych") + +var errProofNotSupported = errors.New("payment channel proof parameter is not supported") + +// managerAPI defines all methods needed by the manager +type managerAPI interface { + statemanger.IStateManager + paychDependencyAPI +} + +// managerAPIImpl is used to create a composite that implements managerAPI +type managerAPIImpl struct { + statemanger.IStateManager + paychDependencyAPI +} + +type Manager struct { + // The Manager context is used to terminate wait operations on shutdown + ctx context.Context + shutdown context.CancelFunc + + store *Store + sa *stateAccessor + pchapi managerAPI + + lk sync.RWMutex + channels map[string]*channelAccessor +} +type ManagerParams struct { + MPoolAPI IMessagePush + ChainInfoAPI IChainInfo + WalletAPI IWalletAPI + SM statemanger.IStateManager +} + +func NewManager(ctx context.Context, ds datastore.Batching, params *ManagerParams) (*Manager, error) { + ctx, shutdown := context.WithCancel(ctx) + impl := &managerAPIImpl{ + IStateManager: params.SM, + paychDependencyAPI: newPaychDependencyAPI(params.MPoolAPI, params.ChainInfoAPI, params.WalletAPI), + } + pm := &Manager{ + ctx: ctx, + shutdown: shutdown, + store: &Store{ds}, + sa: &stateAccessor{sm: impl}, + channels: make(map[string]*channelAccessor), + pchapi: impl, + } + return pm, pm.Start(ctx) +} + +// newManager is used by the tests to supply mocks +func newManager(ctx context.Context, pchStore *Store, pchapi managerAPI) (*Manager, error) { + pm := &Manager{ + store: pchStore, + sa: &stateAccessor{sm: pchapi}, + channels: make(map[string]*channelAccessor), + pchapi: pchapi, + } + return pm, pm.Start(ctx) +} + +// Start restarts tracking of any messages that were sent to chain. +func (pm *Manager) Start(ctx context.Context) error { + return pm.restartPending(ctx) +} + +// Stop shuts down any processes used by the manager +func (pm *Manager) Stop() { + pm.shutdown() +} + +func (pm *Manager) GetPaych(ctx context.Context, from, to address.Address, amt big.Int) (address.Address, cid.Cid, error) { + chanAccessor, err := pm.accessorByFromTo(from, to) + if err != nil { + return address.Undef, cid.Undef, err + } + + return chanAccessor.getPaych(ctx, amt) +} + +func (pm *Manager) AvailableFunds(ctx context.Context, ch address.Address) (*apitypes.ChannelAvailableFunds, error) { + ca, err := pm.accessorByAddress(ctx, ch) + if err != nil { + return nil, err + } + + ci, err := ca.getChannelInfo(ctx, ch) + if err != nil { + return nil, err + } + + return ca.availableFunds(ctx, ci.ChannelID) +} + +func (pm *Manager) AvailableFundsByFromTo(ctx context.Context, from address.Address, to address.Address) (*apitypes.ChannelAvailableFunds, error) { + ca, err := pm.accessorByFromTo(from, to) + if err != nil { + return nil, err + } + + ci, err := ca.outboundActiveByFromTo(ctx, from, to) + if err == ErrChannelNotTracked { + // If there is no active channel between from / to we still want to + // return an empty ChannelAvailableFunds, so that clients can check + // for the existence of a channel between from / to without getting + // an error. + return &apitypes.ChannelAvailableFunds{ + Channel: nil, + From: from, + To: to, + ConfirmedAmt: big.NewInt(0), + PendingAmt: big.NewInt(0), + PendingWaitSentinel: nil, + QueuedAmt: big.NewInt(0), + VoucherReedeemedAmt: big.NewInt(0), + }, nil + } + if err != nil { + return nil, err + } + + return ca.availableFunds(ctx, ci.ChannelID) +} + +// GetPaychWaitReady waits until the create channel / add funds message with the +// given message CID arrives. +// The returned channel address can safely be used against the Manager methods. +func (pm *Manager) GetPaychWaitReady(ctx context.Context, mcid cid.Cid) (address.Address, error) { + // Find the channel associated with the message CID + pm.lk.Lock() + ci, err := pm.store.ByMessageCid(ctx, mcid) + pm.lk.Unlock() + + if err != nil { + if err == datastore.ErrNotFound { + return address.Undef, xerrors.Errorf("Could not find wait msg cid %s", mcid) + } + return address.Undef, err + } + + chanAccessor, err := pm.accessorByFromTo(ci.Control, ci.Target) + if err != nil { + return address.Undef, err + } + + return chanAccessor.getPaychWaitReady(ctx, mcid) +} + +func (pm *Manager) ListChannels(ctx context.Context) ([]address.Address, error) { + // Need to take an exclusive lock here so that channel operations can't run + // in parallel (see channelLock) + pm.lk.Lock() + defer pm.lk.Unlock() + + return pm.store.ListChannels(ctx) +} + +func (pm *Manager) GetChannelInfo(ctx context.Context, addr address.Address) (*ChannelInfo, error) { + ca, err := pm.accessorByAddress(ctx, addr) + if err != nil { + return nil, err + } + return ca.getChannelInfo(ctx, addr) +} + +func (pm *Manager) CreateVoucher(ctx context.Context, ch address.Address, voucher paych.SignedVoucher) (*paychtypes.VoucherCreateResult, error) { + ca, err := pm.accessorByAddress(ctx, ch) + if err != nil { + return nil, err + } + return ca.createVoucher(ctx, ch, voucher) +} + +// CheckVoucherValid checks if the given voucher is valid (is or could become spendable at some point). +// If the channel is not in the store, fetches the channel from state (and checks that +// the channel To address is owned by the wallet). +func (pm *Manager) CheckVoucherValid(ctx context.Context, ch address.Address, sv *paych.SignedVoucher) error { + // Get an accessor for the channel, creating it from state if necessary + ca, err := pm.inboundChannelAccessor(ctx, ch) + if err != nil { + return err + } + + _, err = ca.checkVoucherValid(ctx, ch, sv) + return err +} + +// CheckVoucherSpendable checks if the given voucher is currently spendable +func (pm *Manager) CheckVoucherSpendable(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (bool, error) { + if len(proof) > 0 { + return false, errProofNotSupported + } + ca, err := pm.accessorByAddress(ctx, ch) + if err != nil { + return false, err + } + + return ca.checkVoucherSpendable(ctx, ch, sv, secret) +} + +// AddVoucherOutbound adds a voucher for an outbound channel. +// Returns an error if the channel is not already in the store. +func (pm *Manager) AddVoucherOutbound(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, proof []byte, minDelta big.Int) (big.Int, error) { + if len(proof) > 0 { + return big.NewInt(0), errProofNotSupported + } + ca, err := pm.accessorByAddress(ctx, ch) + if err != nil { + return big.NewInt(0), err + } + return ca.addVoucher(ctx, ch, sv, minDelta) +} + +// AddVoucherInbound adds a voucher for an inbound channel. +// If the channel is not in the store, fetches the channel from state (and checks that +// the channel To address is owned by the wallet). +func (pm *Manager) AddVoucherInbound(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, proof []byte, minDelta big.Int) (big.Int, error) { + if len(proof) > 0 { + return big.NewInt(0), errProofNotSupported + } + // Get an accessor for the channel, creating it from state if necessary + ca, err := pm.inboundChannelAccessor(ctx, ch) + if err != nil { + return big.Int{}, err + } + return ca.addVoucher(ctx, ch, sv, minDelta) +} + +// inboundChannelAccessor gets an accessor for the given channel. The channel +// must either exist in the store, or be an inbound channel that can be created +// from state. +func (pm *Manager) inboundChannelAccessor(ctx context.Context, ch address.Address) (*channelAccessor, error) { + // Make sure channel is in store, or can be fetched from state, and that + // the channel To address is owned by the wallet + ci, err := pm.trackInboundChannel(ctx, ch) + if err != nil { + return nil, err + } + + // This is an inbound channel, so To is the Control address (this node) + from := ci.Target + to := ci.Control + return pm.accessorByFromTo(from, to) +} + +func (pm *Manager) trackInboundChannel(ctx context.Context, ch address.Address) (*ChannelInfo, error) { + // Need to take an exclusive lock here so that channel operations can't run + // in parallel (see channelLock) + pm.lk.Lock() + defer pm.lk.Unlock() + + // Check if channel is in store + ci, err := pm.store.ByAddress(ctx, ch) + if err == nil { + // Channel is in store, so it's already being tracked + return ci, nil + } + + // If there's an error (besides channel not in store) return err + if err != ErrChannelNotTracked { + return nil, err + } + + // Channel is not in store, so get channel from state + stateCi, err := pm.sa.loadStateChannelInfo(ctx, ch, DirInbound) + if err != nil { + return nil, err + } + + // Check that channel To address is in wallet + to := stateCi.Control // Inbound channel so To addr is Control (this node) + toKey, err := pm.pchapi.StateAccountKey(ctx, to, types.EmptyTSK) + if err != nil { + return nil, err + } + has, err := pm.pchapi.WalletHas(ctx, toKey) + if err != nil { + return nil, err + } + if !has { + msg := "cannot add voucher for channel %s: wallet does not have key for address %s" + return nil, xerrors.Errorf(msg, ch, to) + } + + // Save channel to store + return pm.store.TrackChannel(ctx, stateCi) +} + +// TODO: secret vs proof doesn't make sense, there is only one, not two +func (pm *Manager) SubmitVoucher(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (cid.Cid, error) { + if len(proof) > 0 { + return cid.Undef, errProofNotSupported + } + ca, err := pm.accessorByAddress(ctx, ch) + if err != nil { + return cid.Undef, err + } + return ca.submitVoucher(ctx, ch, sv, secret) +} + +func (pm *Manager) AllocateLane(ctx context.Context, ch address.Address) (uint64, error) { + ca, err := pm.accessorByAddress(ctx, ch) + if err != nil { + return 0, err + } + return ca.allocateLane(ctx, ch) +} + +func (pm *Manager) ListVouchers(ctx context.Context, ch address.Address) ([]*VoucherInfo, error) { + ca, err := pm.accessorByAddress(ctx, ch) + if err != nil { + return nil, err + } + return ca.listVouchers(ctx, ch) +} + +func (pm *Manager) Settle(ctx context.Context, addr address.Address) (cid.Cid, error) { + ca, err := pm.accessorByAddress(ctx, addr) + if err != nil { + return cid.Undef, err + } + return ca.settle(ctx, addr) +} + +func (pm *Manager) Collect(ctx context.Context, addr address.Address) (cid.Cid, error) { + ca, err := pm.accessorByAddress(ctx, addr) + if err != nil { + return cid.Undef, err + } + return ca.collect(ctx, addr) +} diff --git a/pkg/paychmgr/mock_test.go b/pkg/paychmgr/mock_test.go new file mode 100644 index 0000000000..0c765f252d --- /dev/null +++ b/pkg/paychmgr/mock_test.go @@ -0,0 +1,257 @@ +package paychmgr + +import ( + "context" + "errors" + "sync" + + crypto2 "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/vm" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/network" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" +) + +type mockManagerAPI struct { + *mockStateManager + *mockPaychAPI +} + +func (m mockManagerAPI) GetMarketState(ctx context.Context, ts *types.TipSet) (market.State, error) { + return nil, nil +} + +func newMockManagerAPI() *mockManagerAPI { + return &mockManagerAPI{ + mockStateManager: newMockStateManager(), + mockPaychAPI: newMockPaychAPI(), + } +} + +type mockPchState struct { + actor *types.Actor + state paych.State +} + +type mockStateManager struct { + lk sync.Mutex + accountState map[address.Address]address.Address + paychState map[address.Address]mockPchState + response *vm.Ret + lastCall *types.Message +} + +func newMockStateManager() *mockStateManager { + return &mockStateManager{ + accountState: make(map[address.Address]address.Address), + paychState: make(map[address.Address]mockPchState), + } +} + +func (sm *mockStateManager) setAccountAddress(a address.Address, lookup address.Address) { + sm.lk.Lock() + defer sm.lk.Unlock() + sm.accountState[a] = lookup +} + +func (sm *mockStateManager) setPaychState(a address.Address, actor *types.Actor, state paych.State) { + sm.lk.Lock() + defer sm.lk.Unlock() + sm.paychState[a] = mockPchState{actor, state} +} + +func (sm *mockStateManager) ResolveToKeyAddress(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) { + sm.lk.Lock() + defer sm.lk.Unlock() + keyAddr, ok := sm.accountState[addr] + if !ok { + return address.Undef, errors.New("not found") + } + return keyAddr, nil +} + +func (sm *mockStateManager) GetPaychState(ctx context.Context, addr address.Address, ts *types.TipSet) (*types.Actor, paych.State, error) { + sm.lk.Lock() + defer sm.lk.Unlock() + info, ok := sm.paychState[addr] + if !ok { + return nil, nil, errors.New("not found") + } + return info.actor, info.state, nil +} + +func (sm *mockStateManager) setCallResponse(response *vm.Ret) { + sm.lk.Lock() + defer sm.lk.Unlock() + + sm.response = response +} + +func (sm *mockStateManager) getLastCall() *types.Message { + sm.lk.Lock() + defer sm.lk.Unlock() + + return sm.lastCall +} + +func (sm *mockStateManager) Call(ctx context.Context, msg *types.Message, ts *types.TipSet) (*vm.Ret, error) { + sm.lk.Lock() + defer sm.lk.Unlock() + + sm.lastCall = msg + + return sm.response, nil +} + +type waitingCall struct { + response chan types.MessageReceipt +} + +type waitingResponse struct { + receipt types.MessageReceipt + done chan struct{} +} + +type mockPaychAPI struct { + lk sync.Mutex + messages map[cid.Cid]*types.SignedMessage + waitingCalls map[cid.Cid]*waitingCall + waitingResponses map[cid.Cid]*waitingResponse + wallet map[address.Address]struct{} + signingKey []byte +} + +func newMockPaychAPI() *mockPaychAPI { + return &mockPaychAPI{ + messages: make(map[cid.Cid]*types.SignedMessage), + waitingCalls: make(map[cid.Cid]*waitingCall), + waitingResponses: make(map[cid.Cid]*waitingResponse), + wallet: make(map[address.Address]struct{}), + } +} + +func (pchapi *mockPaychAPI) StateWaitMsg(ctx context.Context, mcid cid.Cid, confidence uint64) (*apitypes.MsgLookup, error) { + pchapi.lk.Lock() + response := make(chan types.MessageReceipt) + + if response, ok := pchapi.waitingResponses[mcid]; ok { + defer pchapi.lk.Unlock() + defer func() { + go close(response.done) + }() + + delete(pchapi.waitingResponses, mcid) + return &apitypes.MsgLookup{Receipt: response.receipt}, nil + } + + pchapi.waitingCalls[mcid] = &waitingCall{response: response} + pchapi.lk.Unlock() + + receipt := <-response + return &apitypes.MsgLookup{Receipt: receipt}, nil +} + +func (pchapi *mockPaychAPI) receiveMsgResponse(mcid cid.Cid, receipt types.MessageReceipt) { + pchapi.lk.Lock() + + if call, ok := pchapi.waitingCalls[mcid]; ok { + defer pchapi.lk.Unlock() + + delete(pchapi.waitingCalls, mcid) + call.response <- receipt + return + } + + done := make(chan struct{}) + pchapi.waitingResponses[mcid] = &waitingResponse{receipt: receipt, done: done} + + pchapi.lk.Unlock() + + <-done +} + +// Send success response for any waiting calls +func (pchapi *mockPaychAPI) close() { + pchapi.lk.Lock() + defer pchapi.lk.Unlock() + + success := types.MessageReceipt{ + ExitCode: 0, + Return: []byte{}, + } + for mcid, call := range pchapi.waitingCalls { + delete(pchapi.waitingCalls, mcid) + call.response <- success + } +} + +func (pchapi *mockPaychAPI) MpoolPushMessage(ctx context.Context, msg *types.Message, spec *apitypes.MessageSendSpec) (*types.SignedMessage, error) { + pchapi.lk.Lock() + defer pchapi.lk.Unlock() + + smsg := &types.SignedMessage{Message: *msg} + smsgCid := smsg.Cid() + pchapi.messages[smsgCid] = smsg + return smsg, nil +} + +func (pchapi *mockPaychAPI) pushedMessages(c cid.Cid) *types.SignedMessage { + pchapi.lk.Lock() + defer pchapi.lk.Unlock() + + return pchapi.messages[c] +} + +func (pchapi *mockPaychAPI) pushedMessageCount() int { + pchapi.lk.Lock() + defer pchapi.lk.Unlock() + + return len(pchapi.messages) +} + +func (pchapi *mockPaychAPI) StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) { + return addr, nil +} + +func (pchapi *mockPaychAPI) WalletHas(ctx context.Context, addr address.Address) (bool, error) { + pchapi.lk.Lock() + defer pchapi.lk.Unlock() + + _, ok := pchapi.wallet[addr] + return ok, nil +} + +func (pchapi *mockPaychAPI) addWalletAddress(addr address.Address) { + pchapi.lk.Lock() + defer pchapi.lk.Unlock() + + pchapi.wallet[addr] = struct{}{} +} + +func (pchapi *mockPaychAPI) WalletSign(ctx context.Context, k address.Address, msg []byte) (*crypto.Signature, error) { + pchapi.lk.Lock() + defer pchapi.lk.Unlock() + + return crypto2.Sign(msg, pchapi.signingKey, crypto.SigTypeSecp256k1) +} + +func (pchapi *mockPaychAPI) addSigningKey(key []byte) { + pchapi.lk.Lock() + defer pchapi.lk.Unlock() + + pchapi.signingKey = key +} + +func (pchapi *mockPaychAPI) StateNetworkVersion(ctx context.Context, tsk types.TipSetKey) (network.Version, error) { + return constants.NewestNetworkVersion, nil +} diff --git a/pkg/paychmgr/msglistener.go b/pkg/paychmgr/msglistener.go new file mode 100644 index 0000000000..d1204e4866 --- /dev/null +++ b/pkg/paychmgr/msglistener.go @@ -0,0 +1,56 @@ +package paychmgr + +import ( + "golang.org/x/xerrors" + + "github.com/hannahhoward/go-pubsub" + + "github.com/ipfs/go-cid" +) + +type msgListeners struct { + ps *pubsub.PubSub +} + +type msgCompleteEvt struct { + mcid cid.Cid + err error +} + +type subscriberFn func(msgCompleteEvt) + +func newMsgListeners() msgListeners { + ps := pubsub.New(func(event pubsub.Event, subFn pubsub.SubscriberFn) error { + evt, ok := event.(msgCompleteEvt) + if !ok { + return xerrors.Errorf("wrong type of event") + } + sub, ok := subFn.(subscriberFn) + if !ok { + return xerrors.Errorf("wrong type of subscriber") + } + sub(evt) + return nil + }) + return msgListeners{ps: ps} +} + +// onMsgComplete registers a callback for when the message with the given cid +// completes +func (ml *msgListeners) onMsgComplete(mcid cid.Cid, cb func(error)) pubsub.Unsubscribe { + var fn subscriberFn = func(evt msgCompleteEvt) { + if mcid.Equals(evt.mcid) { + cb(evt.err) + } + } + return ml.ps.Subscribe(fn) +} + +// fireMsgComplete is called when a message completes +func (ml *msgListeners) fireMsgComplete(mcid cid.Cid, err error) { + e := ml.ps.Publish(msgCompleteEvt{mcid: mcid, err: err}) + if e != nil { + // In theory we shouldn't ever get an error here + log.Errorf("unexpected error publishing message complete: %s", e) + } +} diff --git a/pkg/paychmgr/msglistener_test.go b/pkg/paychmgr/msglistener_test.go new file mode 100644 index 0000000000..63cd97d766 --- /dev/null +++ b/pkg/paychmgr/msglistener_test.go @@ -0,0 +1,99 @@ +package paychmgr + +import ( + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "testing" + + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" + "golang.org/x/xerrors" +) + +func testCids() []cid.Cid { + c1, _ := cid.Decode("QmdmGQmRgRjazArukTbsXuuxmSHsMCcRYPAZoGhd6e3MuS") + c2, _ := cid.Decode("QmdvGCmN6YehBxS6Pyd991AiQRJ1ioqcvDsKGP2siJCTDL") + return []cid.Cid{c1, c2} +} + +func TestMsgListener(t *testing.T) { + tf.UnitTest(t) + ml := newMsgListeners() + + done := false + experr := xerrors.Errorf("some err") + cids := testCids() + ml.onMsgComplete(cids[0], func(err error) { + require.Equal(t, experr, err) + done = true + }) + + ml.fireMsgComplete(cids[0], experr) + + if !done { + t.Fatal("failed to fire event") + } +} + +func TestMsgListenerNilErr(t *testing.T) { + tf.UnitTest(t) + ml := newMsgListeners() + + done := false + cids := testCids() + ml.onMsgComplete(cids[0], func(err error) { + require.Nil(t, err) + done = true + }) + + ml.fireMsgComplete(cids[0], nil) + + if !done { + t.Fatal("failed to fire event") + } +} + +func TestMsgListenerUnsub(t *testing.T) { + tf.UnitTest(t) + ml := newMsgListeners() + + done := false + experr := xerrors.Errorf("some err") + cids := testCids() + unsub := ml.onMsgComplete(cids[0], func(err error) { + t.Fatal("should not call unsubscribed listener") + }) + ml.onMsgComplete(cids[0], func(err error) { + require.Equal(t, experr, err) + done = true + }) + + unsub() + ml.fireMsgComplete(cids[0], experr) + + if !done { + t.Fatal("failed to fire event") + } +} + +func TestMsgListenerMulti(t *testing.T) { + tf.UnitTest(t) + ml := newMsgListeners() + + count := 0 + cids := testCids() + ml.onMsgComplete(cids[0], func(err error) { + count++ + }) + ml.onMsgComplete(cids[0], func(err error) { + count++ + }) + ml.onMsgComplete(cids[1], func(err error) { + count++ + }) + + ml.fireMsgComplete(cids[0], nil) + require.Equal(t, 2, count) + + ml.fireMsgComplete(cids[1], nil) + require.Equal(t, 3, count) +} diff --git a/pkg/paychmgr/paych.go b/pkg/paychmgr/paych.go new file mode 100644 index 0000000000..74430ca3f8 --- /dev/null +++ b/pkg/paychmgr/paych.go @@ -0,0 +1,635 @@ +package paychmgr + +import ( + "context" + "fmt" + + "github.com/filecoin-project/venus/pkg/crypto" + types "github.com/filecoin-project/venus/venus-shared/chain" + paychtypes "github.com/filecoin-project/venus/venus-shared/paych" + + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + cborutil "github.com/filecoin-project/go-cbor-util" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" +) + +// insufficientFundsErr indicates that there are not enough funds in the +// channel to create a voucher +type insufficientFundsErr interface { + Shortfall() big.Int +} + +type ErrInsufficientFunds struct { + shortfall big.Int +} + +func newErrInsufficientFunds(shortfall big.Int) *ErrInsufficientFunds { + return &ErrInsufficientFunds{shortfall: shortfall} +} + +func (e *ErrInsufficientFunds) Error() string { + return fmt.Sprintf("not enough funds in channel to cover voucher - shortfall: %d", e.shortfall) +} + +func (e *ErrInsufficientFunds) Shortfall() big.Int { + return e.shortfall +} + +type laneState struct { + redeemed big.Int + nonce uint64 +} + +func (ls laneState) Redeemed() (big.Int, error) { + return ls.redeemed, nil +} + +func (ls laneState) Nonce() (uint64, error) { + return ls.nonce, nil +} + +// channelAccessor is used to simplify locking when accessing a channel +type channelAccessor struct { + from address.Address + to address.Address + + // chctx is used by background processes (eg when waiting for things to be + // confirmed on chain) + chctx context.Context + sa *stateAccessor + api managerAPI + store *Store + lk *channelLock + fundsReqQueue []*fundsReq + msgListeners msgListeners +} + +func newChannelAccessor(pm *Manager, from address.Address, to address.Address) *channelAccessor { + return &channelAccessor{ + from: from, + to: to, + chctx: pm.ctx, + sa: pm.sa, + api: pm.pchapi, + store: pm.store, + lk: &channelLock{globalLock: &pm.lk}, + msgListeners: newMsgListeners(), + } +} + +func (ca *channelAccessor) messageBuilder(ctx context.Context, from address.Address) (paych.MessageBuilder, error) { + nwVersion, err := ca.api.StateNetworkVersion(ctx, types.EmptyTSK) + if err != nil { + return nil, err + } + + ver, err := actors.VersionForNetwork(nwVersion) + if err != nil { + return nil, err + } + return paych.Message(ver, from), nil +} + +func (ca *channelAccessor) getChannelInfo(ctx context.Context, addr address.Address) (*ChannelInfo, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + return ca.store.ByAddress(ctx, addr) +} + +func (ca *channelAccessor) outboundActiveByFromTo(ctx context.Context, from, to address.Address) (*ChannelInfo, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + return ca.store.OutboundActiveByFromTo(ctx, from, to) +} + +// createVoucher creates a voucher with the given specification, setting its +// nonce, signing the voucher and storing it in the local datastore. +// If there are not enough funds in the channel to create the voucher, returns +// the shortfall in funds. +func (ca *channelAccessor) createVoucher(ctx context.Context, ch address.Address, voucher paych.SignedVoucher) (*paychtypes.VoucherCreateResult, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + // Find the channel for the voucher + ci, err := ca.store.ByAddress(ctx, ch) + if err != nil { + return nil, xerrors.Errorf("failed to get channel info by address: %w", err) + } + + // Set the voucher channel + sv := &voucher + sv.ChannelAddr = ch + + // Get the next nonce on the given lane + sv.Nonce = ca.nextNonceForLane(ci, voucher.Lane) + + // Sign the voucher + vb, err := sv.SigningBytes() + if err != nil { + return nil, xerrors.Errorf("failed to get voucher signing bytes: %w", err) + } + + sig, err := ca.api.WalletSign(ctx, ci.Control, vb) + if err != nil { + return nil, xerrors.Errorf("failed to sign voucher: %w", err) + } + sv.Signature = sig + + // Store the voucher + if _, err := ca.addVoucherUnlocked(ctx, ch, sv, big.NewInt(0)); err != nil { + // If there are not enough funds in the channel to cover the voucher, + // return a voucher create result with the shortfall + var ife insufficientFundsErr + if xerrors.As(err, &ife) { + return &paychtypes.VoucherCreateResult{ + Shortfall: ife.Shortfall(), + }, nil + } + + return nil, xerrors.Errorf("failed to persist voucher: %w", err) + } + + return &paychtypes.VoucherCreateResult{Voucher: sv, Shortfall: big.NewInt(0)}, nil +} + +func (ca *channelAccessor) nextNonceForLane(ci *ChannelInfo, lane uint64) uint64 { + var maxnonce uint64 + for _, v := range ci.Vouchers { + if v.Voucher.Lane == lane { + if v.Voucher.Nonce > maxnonce { + maxnonce = v.Voucher.Nonce + } + } + } + + return maxnonce + 1 +} + +func (ca *channelAccessor) checkVoucherValid(ctx context.Context, ch address.Address, sv *paych.SignedVoucher) (map[uint64]paych.LaneState, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + return ca.checkVoucherValidUnlocked(ctx, ch, sv) +} + +func (ca *channelAccessor) checkVoucherValidUnlocked(ctx context.Context, ch address.Address, sv *paych.SignedVoucher) (map[uint64]paych.LaneState, error) { + if sv.ChannelAddr != ch { + return nil, xerrors.Errorf("voucher ChannelAddr doesn't match channel address, got %s, expected %s", sv.ChannelAddr, ch) + } + + // check voucher is unlocked + if sv.Extra != nil { + return nil, xerrors.Errorf("voucher is Message Locked") + } + if sv.TimeLockMax != 0 { + return nil, xerrors.Errorf("voucher is Max Time Locked") + } + if sv.TimeLockMin != 0 { + return nil, xerrors.Errorf("voucher is Min Time Locked") + } + if len(sv.SecretPreimage) != 0 { + return nil, xerrors.Errorf("voucher is Hash Locked") + } + + // Load payment channel actor state + act, pchState, err := ca.sa.loadPaychActorState(ctx, ch) + if err != nil { + return nil, err + } + + // Load channel "From" account actor state + f, err := pchState.From() + if err != nil { + return nil, err + } + + from, err := ca.api.ResolveToKeyAddress(ctx, f, nil) + if err != nil { + return nil, err + } + // verify voucher signature + vb, err := sv.SigningBytes() + if err != nil { + return nil, err + } + + // TODO: technically, either party may create and sign a voucher. + // However, for now, we only accept them from the channel creator. + // More complex handling logic can be added later + if err := crypto.Verify(sv.Signature, from, vb); err != nil { + return nil, err + } + + // Check the voucher against the highest known voucher nonce / value + laneStates, err := ca.laneState(ctx, pchState, ch) + if err != nil { + return nil, err + } + + // If the new voucher nonce value is less than the highest known + // nonce for the lane + ls, lsExists := laneStates[sv.Lane] + if lsExists { + n, err := ls.Nonce() + if err != nil { + return nil, err + } + + if sv.Nonce <= n { + return nil, fmt.Errorf("nonce too low") + } + + // If the voucher amount is less than the highest known voucher amount + r, err := ls.Redeemed() + if err != nil { + return nil, err + } + if sv.Amount.LessThanEqual(r) { + return nil, fmt.Errorf("voucher amount is lower than amount for voucher with lower nonce") + } + } + + // Total redeemed is the total redeemed amount for all lanes, including + // the new voucher + // eg + // + // lane 1 redeemed: 3 + // lane 2 redeemed: 2 + // voucher for lane 1: 5 + // + // Voucher supersedes lane 1 redeemed, therefore + // effective lane 1 redeemed: 5 + // + // lane 1: 5 + // lane 2: 2 + // - + // total: 7 + totalRedeemed, err := ca.totalRedeemedWithVoucher(laneStates, sv) + if err != nil { + return nil, err + } + + // Total required balance must not exceed actor balance + if act.Balance.LessThan(totalRedeemed) { + return nil, newErrInsufficientFunds(big.Sub(totalRedeemed, act.Balance)) + } + + if len(sv.Merges) != 0 { + return nil, fmt.Errorf("dont currently support paych lane merges") + } + + return laneStates, nil +} + +func (ca *channelAccessor) checkVoucherSpendable(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte) (bool, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + recipient, err := ca.getPaychRecipient(ctx, ch) + if err != nil { + return false, err + } + + ci, err := ca.store.ByAddress(ctx, ch) + if err != nil { + return false, err + } + + // Check if voucher has already been submitted + submitted, err := ci.wasVoucherSubmitted(sv) + if err != nil { + return false, err + } + if submitted { + return false, nil + } + + mb, err := ca.messageBuilder(ctx, recipient) + if err != nil { + return false, err + } + + mes, err := mb.Update(ch, sv, secret) + if err != nil { + return false, err + } + + ret, err := ca.api.Call(ctx, mes, nil) + if err != nil { + return false, err + } + + if ret.Receipt.ExitCode != 0 { + return false, nil + } + + return true, nil +} + +func (ca *channelAccessor) getPaychRecipient(ctx context.Context, ch address.Address) (address.Address, error) { + _, state, err := ca.api.GetPaychState(ctx, ch, nil) + if err != nil { + return address.Address{}, err + } + + return state.To() +} + +func (ca *channelAccessor) addVoucher(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, minDelta big.Int) (big.Int, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + return ca.addVoucherUnlocked(ctx, ch, sv, minDelta) +} + +func (ca *channelAccessor) addVoucherUnlocked(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, minDelta big.Int) (big.Int, error) { + ci, err := ca.store.ByAddress(ctx, ch) + if err != nil { + return big.Int{}, err + } + + // Check if the voucher has already been added + for _, v := range ci.Vouchers { + eq, err := cborutil.Equals(sv, v.Voucher) + if err != nil { + return big.Int{}, err + } + if eq { + // Ignore the duplicate voucher. + log.Warnf("AddVoucher: voucher re-added") + return big.NewInt(0), nil + } + + } + + // Check voucher validity + laneStates, err := ca.checkVoucherValidUnlocked(ctx, ch, sv) + if err != nil { + return big.NewInt(0), err + } + + // The change in value is the delta between the voucher amount and + // the highest previous voucher amount for the lane + laneState, exists := laneStates[sv.Lane] + redeemed := big.NewInt(0) + if exists { + redeemed, err = laneState.Redeemed() + if err != nil { + return big.NewInt(0), err + } + } + + delta := big.Sub(sv.Amount, redeemed) + if minDelta.GreaterThan(delta) { + return delta, xerrors.Errorf("addVoucher: supplied token amount too low; minD=%s, D=%s; laneAmt=%s; v.Amt=%s", minDelta, delta, redeemed, sv.Amount) + } + + ci.Vouchers = append(ci.Vouchers, &VoucherInfo{ + Voucher: sv, + }) + + if ci.NextLane <= sv.Lane { + ci.NextLane = sv.Lane + 1 + } + + return delta, ca.store.putChannelInfo(ctx, ci) +} + +func (ca *channelAccessor) submitVoucher(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte) (cid.Cid, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + ci, err := ca.store.ByAddress(ctx, ch) + if err != nil { + return cid.Undef, err + } + + has, err := ci.hasVoucher(sv) + if err != nil { + return cid.Undef, err + } + + // If the channel has the voucher + if has { + // Check that the voucher hasn't already been submitted + submitted, err := ci.wasVoucherSubmitted(sv) + if err != nil { + return cid.Undef, err + } + if submitted { + return cid.Undef, xerrors.Errorf("cannot submit voucher that has already been submitted") + } + } + + mb, err := ca.messageBuilder(ctx, ci.Control) + if err != nil { + return cid.Undef, err + } + + msg, err := mb.Update(ch, sv, secret) + if err != nil { + return cid.Undef, err + } + + smsg, err := ca.api.MpoolPushMessage(ctx, msg, nil) + if err != nil { + return cid.Undef, err + } + + // If the channel didn't already have the voucher + if !has { + // Add the voucher to the channel + ci.Vouchers = append(ci.Vouchers, &VoucherInfo{ + Voucher: sv, + }) + } + + // Mark the voucher and any lower-nonce vouchers as having been submitted + err = ca.store.MarkVoucherSubmitted(ctx, ci, sv) + if err != nil { + return cid.Undef, err + } + return smsg.Cid(), nil +} + +func (ca *channelAccessor) allocateLane(ctx context.Context, ch address.Address) (uint64, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + return ca.store.AllocateLane(ctx, ch) +} + +func (ca *channelAccessor) listVouchers(ctx context.Context, ch address.Address) ([]*VoucherInfo, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + // TODO: just having a passthrough method like this feels odd. Seems like + // there should be some filtering we're doing here + return ca.store.VouchersForPaych(ctx, ch) +} + +// laneState gets the LaneStates from chain, then applies all vouchers in +// the data store over the chain state +func (ca *channelAccessor) laneState(ctx context.Context, state paych.State, ch address.Address) (map[uint64]paych.LaneState, error) { + // TODO: we probably want to call UpdateChannelState with all vouchers to be fully correct + // (but technically dont't need to) + + laneCount, err := state.LaneCount() + if err != nil { + return nil, err + } + + // Note: we use a map instead of an array to store laneStates because the + // api sets the lane ID (the index) and potentially they could use a + // very large index. + laneStates := make(map[uint64]paych.LaneState, laneCount) + err = state.ForEachLaneState(func(idx uint64, ls paych.LaneState) error { + laneStates[idx] = ls + return nil + }) + if err != nil { + return nil, err + } + + // Apply locally stored vouchers + vouchers, err := ca.store.VouchersForPaych(ctx, ch) + if err != nil && err != ErrChannelNotTracked { + return nil, err + } + + for _, v := range vouchers { + for range v.Voucher.Merges { + return nil, xerrors.Errorf("paych merges not handled yet") + } + + // Check if there is an existing laneState in the payment channel + // for this voucher's lane + ls, ok := laneStates[v.Voucher.Lane] + + // If the voucher does not have a higher nonce than the existing + // laneState for this lane, ignore it + if ok { + n, err := ls.Nonce() + if err != nil { + return nil, err + } + if v.Voucher.Nonce < n { + continue + } + } + + // Voucher has a higher nonce, so replace laneState with this voucher + laneStates[v.Voucher.Lane] = laneState{v.Voucher.Amount, v.Voucher.Nonce} + } + + return laneStates, nil +} + +// Get the total redeemed amount across all lanes, after applying the voucher +func (ca *channelAccessor) totalRedeemedWithVoucher(laneStates map[uint64]paych.LaneState, sv *paych.SignedVoucher) (big.Int, error) { + // TODO: merges + if len(sv.Merges) != 0 { + return big.Int{}, xerrors.Errorf("dont currently support paych lane merges") + } + + total := big.NewInt(0) + for _, ls := range laneStates { + r, err := ls.Redeemed() + if err != nil { + return big.Int{}, err + } + total = big.Add(total, r) + } + + lane, ok := laneStates[sv.Lane] + if ok { + // If the voucher is for an existing lane, and the voucher nonce + // is higher than the lane nonce + n, err := lane.Nonce() + if err != nil { + return big.Int{}, err + } + + if sv.Nonce > n { + // Add the delta between the redeemed amount and the voucher + // amount to the total + r, err := lane.Redeemed() + if err != nil { + return big.Int{}, err + } + + delta := big.Sub(sv.Amount, r) + total = big.Add(total, delta) + } + } else { + // If the voucher is *not* for an existing lane, just add its + // value (implicitly a new lane will be created for the voucher) + total = big.Add(total, sv.Amount) + } + + return total, nil +} + +func (ca *channelAccessor) settle(ctx context.Context, ch address.Address) (cid.Cid, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + ci, err := ca.store.ByAddress(ctx, ch) + if err != nil { + return cid.Undef, err + } + + mb, err := ca.messageBuilder(ctx, ci.Control) + if err != nil { + return cid.Undef, err + } + msg, err := mb.Settle(ch) + if err != nil { + return cid.Undef, err + } + smgs, err := ca.api.MpoolPushMessage(ctx, msg, nil) + if err != nil { + return cid.Undef, err + } + + ci.Settling = true + err = ca.store.putChannelInfo(ctx, ci) + if err != nil { + log.Errorf("Error marking channel as settled: %s", err) + } + return smgs.Cid(), nil +} + +func (ca *channelAccessor) collect(ctx context.Context, ch address.Address) (cid.Cid, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + ci, err := ca.store.ByAddress(ctx, ch) + if err != nil { + return cid.Undef, err + } + + mb, err := ca.messageBuilder(ctx, ci.Control) + if err != nil { + return cid.Undef, err + } + + msg, err := mb.Collect(ch) + if err != nil { + return cid.Undef, err + } + + smsg, err := ca.api.MpoolPushMessage(ctx, msg, nil) + if err != nil { + return cid.Undef, err + } + return smsg.Cid(), nil +} diff --git a/pkg/paychmgr/paych_test.go b/pkg/paychmgr/paych_test.go new file mode 100644 index 0000000000..fb690ab891 --- /dev/null +++ b/pkg/paychmgr/paych_test.go @@ -0,0 +1,830 @@ +package paychmgr + +import ( + "bytes" + "context" + "testing" + + crypto2 "github.com/filecoin-project/venus/pkg/crypto" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/vm" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/ipfs/go-cid" + ds "github.com/ipfs/go-datastore" + ds_sync "github.com/ipfs/go-datastore/sync" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/specs-actors/v2/actors/builtin" + paych2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/paych" + tutils "github.com/filecoin-project/specs-actors/v6/support/testing" + + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + paychmock "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych/mock" +) + +func TestCheckVoucherValid(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + fromKeyPrivate, fromKeyPublic := testGenerateKeyPair(t) + toKeyPrivate, toKeyPublic := testGenerateKeyPair(t) + randKeyPrivate, _ := testGenerateKeyPair(t) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewSECP256K1Addr(t, string(fromKeyPublic)) + to := tutils.NewSECP256K1Addr(t, string(toKeyPublic)) + fromAcct := tutils.NewActorAddr(t, "fromAct") + toAcct := tutils.NewActorAddr(t, "toAct") + + mock := newMockManagerAPI() + mock.setAccountAddress(fromAcct, from) + mock.setAccountAddress(toAcct, to) + + tcases := []struct { + name string + expectError bool + key []byte + actorBalance big.Int + voucherAmount big.Int + voucherLane uint64 + voucherNonce uint64 + laneStates map[uint64]paych.LaneState + }{{ + name: "passes when voucher amount < balance", + key: fromKeyPrivate, + actorBalance: big.NewInt(10), + voucherAmount: big.NewInt(5), + }, { + name: "fails when funds too low", + expectError: true, + key: fromKeyPrivate, + actorBalance: big.NewInt(5), + voucherAmount: big.NewInt(10), + }, { + name: "fails when invalid signature", + expectError: true, + key: randKeyPrivate, + actorBalance: big.NewInt(10), + voucherAmount: big.NewInt(5), + }, { + name: "fails when signed by channel To account (instead of From account)", + expectError: true, + key: toKeyPrivate, + actorBalance: big.NewInt(10), + voucherAmount: big.NewInt(5), + }, { + name: "fails when nonce too low", + expectError: true, + key: fromKeyPrivate, + actorBalance: big.NewInt(10), + voucherAmount: big.NewInt(5), + voucherLane: 1, + voucherNonce: 2, + laneStates: map[uint64]paych.LaneState{ + 1: paychmock.NewMockLaneState(big.NewInt(2), 3), + }, + }, { + name: "passes when nonce higher", + key: fromKeyPrivate, + actorBalance: big.NewInt(10), + voucherAmount: big.NewInt(5), + voucherLane: 1, + voucherNonce: 3, + laneStates: map[uint64]paych.LaneState{ + 1: paychmock.NewMockLaneState(big.NewInt(2), 2), + }, + }, { + name: "passes when nonce for different lane", + key: fromKeyPrivate, + actorBalance: big.NewInt(10), + voucherAmount: big.NewInt(5), + voucherLane: 2, + voucherNonce: 2, + laneStates: map[uint64]paych.LaneState{ + 1: paychmock.NewMockLaneState(big.NewInt(2), 3), + }, + }, { + name: "fails when voucher has higher nonce but lower value than lane state", + expectError: true, + key: fromKeyPrivate, + actorBalance: big.NewInt(10), + voucherAmount: big.NewInt(5), + voucherLane: 1, + voucherNonce: 3, + laneStates: map[uint64]paych.LaneState{ + 1: paychmock.NewMockLaneState(big.NewInt(6), 2), + }, + }, { + // voucher supersedes lane 1 redeemed so + // lane 1 effective redeemed = voucher amount + // + // required balance = voucher amt + // = 7 + // So required balance: 7 < actor balance: 10 + name: "passes when voucher total redeemed <= balance", + key: fromKeyPrivate, + actorBalance: big.NewInt(10), + voucherAmount: big.NewInt(6), + voucherLane: 1, + voucherNonce: 2, + laneStates: map[uint64]paych.LaneState{ + // Lane 1 (same as voucher lane 1) + 1: paychmock.NewMockLaneState(big.NewInt(4), 1), + }, + }, { + // required balance = total redeemed + // = 6 (voucher lane 1) + 5 (lane 2) + // = 11 + // So required balance: 11 > actor balance: 10 + name: "fails when voucher total redeemed > balance", + expectError: true, + key: fromKeyPrivate, + actorBalance: big.NewInt(10), + voucherAmount: big.NewInt(6), + voucherLane: 1, + voucherNonce: 1, + laneStates: map[uint64]paych.LaneState{ + // Lane 2 (different from voucher lane 1) + 2: paychmock.NewMockLaneState(big.NewInt(5), 1), + }, + }, { + // voucher supersedes lane 1 redeemed so + // lane 1 effective redeemed = voucher amount + // + // required balance = total redeemed + // = 6 (new voucher lane 1) + 5 (lane 2) + // = 11 + // So required balance: 11 > actor balance: 10 + name: "fails when voucher total redeemed > balance", + expectError: true, + key: fromKeyPrivate, + actorBalance: big.NewInt(10), + voucherAmount: big.NewInt(6), + voucherLane: 1, + voucherNonce: 2, + laneStates: map[uint64]paych.LaneState{ + // Lane 1 (superseded by new voucher in voucher lane 1) + 1: paychmock.NewMockLaneState(big.NewInt(5), 1), + // Lane 2 (different from voucher lane 1) + 2: paychmock.NewMockLaneState(big.NewInt(5), 1), + }, + }, { + // voucher supersedes lane 1 redeemed so + // lane 1 effective redeemed = voucher amount + // + // required balance = total redeemed + // = 5 (new voucher lane 1) + 5 (lane 2) + // = 10 + // So required balance: 10 <= actor balance: 10 + name: "passes when voucher total redeemed <= balance", + expectError: false, + key: fromKeyPrivate, + actorBalance: big.NewInt(10), + voucherAmount: big.NewInt(5), + voucherLane: 1, + voucherNonce: 2, + laneStates: map[uint64]paych.LaneState{ + // Lane 1 (superseded by new voucher in voucher lane 1) + 1: paychmock.NewMockLaneState(big.NewInt(4), 1), + // Lane 2 (different from voucher lane 1) + 2: paychmock.NewMockLaneState(big.NewInt(5), 1), + }, + }} + + for _, tcase := range tcases { + tcase := tcase + t.Run(tcase.name, func(t *testing.T) { + // Create an actor for the channel with the test case balance + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: tcase.actorBalance, + } + + mock.setPaychState(ch, act, paychmock.NewMockPayChState( + fromAcct, toAcct, abi.ChainEpoch(0), tcase.laneStates)) + + // Create a manager + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Add channel To address to wallet + mock.addWalletAddress(to) + + // Create the test case signed voucher + sv := createTestVoucher(t, ch, tcase.voucherLane, tcase.voucherNonce, tcase.voucherAmount, tcase.key) + + // Check the voucher's validity + err = mgr.CheckVoucherValid(ctx, ch, sv) + if tcase.expectError { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} + +func TestCreateVoucher(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + // Set up a manager with a single payment channel + s := testSetupMgrWithChannel(t) + + // Create a voucher in lane 1 + voucherLane1Amt := big.NewInt(5) + voucher := paych.SignedVoucher{ + Lane: 1, + Amount: voucherLane1Amt, + } + res, err := s.mgr.CreateVoucher(ctx, s.ch, voucher) + require.NoError(t, err) + require.NotNil(t, res.Voucher) + require.Equal(t, s.ch, res.Voucher.ChannelAddr) + require.Equal(t, voucherLane1Amt, res.Voucher.Amount) + require.EqualValues(t, 0, res.Shortfall.Int64()) + + nonce := res.Voucher.Nonce + + // Create a voucher in lane 1 again, with a higher amount + voucherLane1Amt = big.NewInt(8) + voucher = paych.SignedVoucher{ + Lane: 1, + Amount: voucherLane1Amt, + } + res, err = s.mgr.CreateVoucher(ctx, s.ch, voucher) + require.NoError(t, err) + require.NotNil(t, res.Voucher) + require.Equal(t, s.ch, res.Voucher.ChannelAddr) + require.Equal(t, voucherLane1Amt, res.Voucher.Amount) + require.EqualValues(t, 0, res.Shortfall.Int64()) + require.Equal(t, nonce+1, res.Voucher.Nonce) + + // Create a voucher in lane 2 that covers all the remaining funds + // in the channel + voucherLane2Amt := big.Sub(s.amt, voucherLane1Amt) + voucher = paych.SignedVoucher{ + Lane: 2, + Amount: voucherLane2Amt, + } + res, err = s.mgr.CreateVoucher(ctx, s.ch, voucher) + require.NoError(t, err) + require.NotNil(t, res.Voucher) + require.Equal(t, s.ch, res.Voucher.ChannelAddr) + require.Equal(t, voucherLane2Amt, res.Voucher.Amount) + require.EqualValues(t, 0, res.Shortfall.Int64()) + + // Create a voucher in lane 2 that exceeds the remaining funds in the + // channel + voucherLane2Amt = big.Add(voucherLane2Amt, big.NewInt(1)) + voucher = paych.SignedVoucher{ + Lane: 2, + Amount: voucherLane2Amt, + } + res, err = s.mgr.CreateVoucher(ctx, s.ch, voucher) + require.NoError(t, err) + + // Expect a shortfall value equal to the amount required to add the voucher + // to the channel + require.Nil(t, res.Voucher) + require.EqualValues(t, 1, res.Shortfall.Int64()) +} + +func TestAddVoucherDelta(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + // Set up a manager with a single payment channel + s := testSetupMgrWithChannel(t) + + voucherLane := uint64(1) + + // Expect error when adding a voucher whose amount is less than minDelta + minDelta := big.NewInt(2) + nonce := uint64(1) + voucherAmount := big.NewInt(1) + sv := createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + _, err := s.mgr.AddVoucherOutbound(ctx, s.ch, sv, nil, minDelta) + require.Error(t, err) + + // Expect success when adding a voucher whose amount is equal to minDelta + nonce++ + voucherAmount = big.NewInt(2) + sv = createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + delta, err := s.mgr.AddVoucherOutbound(ctx, s.ch, sv, nil, minDelta) + require.NoError(t, err) + require.EqualValues(t, delta.Int64(), 2) + + // Check that delta is correct when there's an existing voucher + nonce++ + voucherAmount = big.NewInt(5) + sv = createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + delta, err = s.mgr.AddVoucherOutbound(ctx, s.ch, sv, nil, minDelta) + require.NoError(t, err) + require.EqualValues(t, delta.Int64(), 3) + + // Check that delta is correct when voucher added to a different lane + nonce = uint64(1) + voucherAmount = big.NewInt(6) + voucherLane = uint64(2) + sv = createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + delta, err = s.mgr.AddVoucherOutbound(ctx, s.ch, sv, nil, minDelta) + require.NoError(t, err) + require.EqualValues(t, delta.Int64(), 6) +} + +func TestAddVoucherNextLane(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + // Set up a manager with a single payment channel + s := testSetupMgrWithChannel(t) + + minDelta := big.NewInt(0) + voucherAmount := big.NewInt(2) + + // Add a voucher in lane 2 + nonce := uint64(1) + voucherLane := uint64(2) + sv := createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + _, err := s.mgr.AddVoucherOutbound(ctx, s.ch, sv, nil, minDelta) + require.NoError(t, err) + + ci, err := s.mgr.GetChannelInfo(ctx, s.ch) + require.NoError(t, err) + require.EqualValues(t, ci.NextLane, 3) + + // Allocate a lane (should be lane 3) + lane, err := s.mgr.AllocateLane(ctx, s.ch) + require.NoError(t, err) + require.EqualValues(t, lane, 3) + + ci, err = s.mgr.GetChannelInfo(ctx, s.ch) + require.NoError(t, err) + require.EqualValues(t, ci.NextLane, 4) + + // Add a voucher in lane 1 + voucherLane = uint64(1) + sv = createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + _, err = s.mgr.AddVoucherOutbound(ctx, s.ch, sv, nil, minDelta) + require.NoError(t, err) + + ci, err = s.mgr.GetChannelInfo(ctx, s.ch) + require.NoError(t, err) + require.EqualValues(t, ci.NextLane, 4) + + // Add a voucher in lane 7 + voucherLane = uint64(7) + sv = createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + _, err = s.mgr.AddVoucherOutbound(ctx, s.ch, sv, nil, minDelta) + require.NoError(t, err) + + ci, err = s.mgr.GetChannelInfo(ctx, s.ch) + require.NoError(t, err) + require.EqualValues(t, ci.NextLane, 8) +} + +func TestAllocateLane(t *testing.T) { + tf.UnitTest(t) + // Set up a manager with a single payment channel + s := testSetupMgrWithChannel(t) + + ctx := context.Background() + + // First lane should be 0 + lane, err := s.mgr.AllocateLane(ctx, s.ch) + require.NoError(t, err) + require.EqualValues(t, lane, 0) + + // Next lane should be 1 + lane, err = s.mgr.AllocateLane(ctx, s.ch) + require.NoError(t, err) + require.EqualValues(t, lane, 1) +} + +func TestAllocateLaneWithExistingLaneState(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + fromKeyPrivate, fromKeyPublic := testGenerateKeyPair(t) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewSECP256K1Addr(t, string(fromKeyPublic)) + to := tutils.NewSECP256K1Addr(t, "secpTo") + fromAcct := tutils.NewActorAddr(t, "fromAct") + toAcct := tutils.NewActorAddr(t, "toAct") + + mock := newMockManagerAPI() + mock.setAccountAddress(fromAcct, from) + mock.setAccountAddress(toAcct, to) + mock.addWalletAddress(to) + + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + // Create a channel that will be retrieved from state + actorBalance := big.NewInt(10) + + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: actorBalance, + } + + mock.setPaychState(ch, act, paychmock.NewMockPayChState(fromAcct, toAcct, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Create a voucher on lane 2 + // (also reads the channel from state and puts it in the store) + voucherLane := uint64(2) + minDelta := big.NewInt(0) + nonce := uint64(2) + voucherAmount := big.NewInt(5) + sv := createTestVoucher(t, ch, voucherLane, nonce, voucherAmount, fromKeyPrivate) + _, err = mgr.AddVoucherInbound(ctx, ch, sv, nil, minDelta) + require.NoError(t, err) + + // Allocate lane should return the next lane (lane 3) + lane, err := mgr.AllocateLane(ctx, ch) + require.NoError(t, err) + require.EqualValues(t, 3, lane) +} + +func TestAddVoucherInboundWalletKey(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + fromKeyPrivate, fromKeyPublic := testGenerateKeyPair(t) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewSECP256K1Addr(t, string(fromKeyPublic)) + to := tutils.NewSECP256K1Addr(t, "secpTo") + fromAcct := tutils.NewActorAddr(t, "fromAct") + toAcct := tutils.NewActorAddr(t, "toAct") + + // Create an actor for the channel in state + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: big.NewInt(20), + } + + mock := newMockManagerAPI() + + mock.setAccountAddress(fromAcct, from) + mock.setAccountAddress(toAcct, to) + + mock.setPaychState(ch, act, paychmock.NewMockPayChState(fromAcct, toAcct, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + + // Create a manager + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Add a voucher + nonce := uint64(1) + voucherLane := uint64(1) + minDelta := big.NewInt(0) + voucherAmount := big.NewInt(2) + sv := createTestVoucher(t, ch, voucherLane, nonce, voucherAmount, fromKeyPrivate) + _, err = mgr.AddVoucherInbound(ctx, ch, sv, nil, minDelta) + + // Should fail because there is no wallet key matching the channel To + // address (ie, the channel is not "owned" by this node) + require.Error(t, err) + + // Add wallet key for To address + mock.addWalletAddress(to) + + // Add voucher again + sv = createTestVoucher(t, ch, voucherLane, nonce, voucherAmount, fromKeyPrivate) + _, err = mgr.AddVoucherInbound(ctx, ch, sv, nil, minDelta) + + // Should now pass because there is a wallet key matching the channel To + // address + require.NoError(t, err) +} + +func TestBestSpendable(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + // Set up a manager with a single payment channel + s := testSetupMgrWithChannel(t) + + // Add vouchers to lane 1 with amounts: [1, 2, 3] + voucherLane := uint64(1) + minDelta := big.NewInt(0) + nonce := uint64(1) + voucherAmount := big.NewInt(1) + svL1V1 := createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + _, err := s.mgr.AddVoucherInbound(ctx, s.ch, svL1V1, nil, minDelta) + require.NoError(t, err) + + nonce++ + voucherAmount = big.NewInt(2) + svL1V2 := createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + _, err = s.mgr.AddVoucherInbound(ctx, s.ch, svL1V2, nil, minDelta) + require.NoError(t, err) + + nonce++ + voucherAmount = big.NewInt(3) + svL1V3 := createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + _, err = s.mgr.AddVoucherInbound(ctx, s.ch, svL1V3, nil, minDelta) + require.NoError(t, err) + + // Add voucher to lane 2 with amounts: [2] + voucherLane = uint64(2) + nonce = uint64(1) + voucherAmount = big.NewInt(2) + svL2V1 := createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + _, err = s.mgr.AddVoucherInbound(ctx, s.ch, svL2V1, nil, minDelta) + require.NoError(t, err) + + // Return success exit code from calls to check if voucher is spendable + bsapi := newMockBestSpendableAPI(s.mgr) + s.mock.setCallResponse(&vm.Ret{ + Receipt: types.MessageReceipt{ + ExitCode: 0, + }, + }) + + // Verify best spendable vouchers on each lane + vouchers, err := BestSpendableByLane(ctx, bsapi, s.ch) + require.NoError(t, err) + require.Len(t, vouchers, 2) + + vchr, ok := vouchers[1] + require.True(t, ok) + require.EqualValues(t, 3, vchr.Amount.Int64()) + + vchr, ok = vouchers[2] + require.True(t, ok) + require.EqualValues(t, 2, vchr.Amount.Int64()) + + // Submit voucher from lane 2 + _, err = s.mgr.SubmitVoucher(ctx, s.ch, svL2V1, nil, nil) + require.NoError(t, err) + + // Best spendable voucher should no longer include lane 2 + // (because voucher has not been submitted) + vouchers, err = BestSpendableByLane(ctx, bsapi, s.ch) + require.NoError(t, err) + require.Len(t, vouchers, 1) + + // Submit first voucher from lane 1 + _, err = s.mgr.SubmitVoucher(ctx, s.ch, svL1V1, nil, nil) + require.NoError(t, err) + + // Best spendable voucher for lane 1 should still be highest value voucher + vouchers, err = BestSpendableByLane(ctx, bsapi, s.ch) + require.NoError(t, err) + require.Len(t, vouchers, 1) + + vchr, ok = vouchers[1] + require.True(t, ok) + require.EqualValues(t, 3, vchr.Amount.Int64()) +} + +func TestCheckSpendable(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + // Set up a manager with a single payment channel + s := testSetupMgrWithChannel(t) + + // Create voucher with Extra + voucherLane := uint64(1) + nonce := uint64(1) + voucherAmount := big.NewInt(1) + voucher := createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + + // Add voucher + minDelta := big.NewInt(0) + _, err := s.mgr.AddVoucherInbound(ctx, s.ch, voucher, nil, minDelta) + require.NoError(t, err) + + // Return success exit code from VM call, which indicates that voucher is + // spendable + successResponse := &vm.Ret{ + Receipt: types.MessageReceipt{ + ExitCode: 0, + }, + } + s.mock.setCallResponse(successResponse) + + // Check that spendable is true + secret := []byte("secret") + spendable, err := s.mgr.CheckVoucherSpendable(ctx, s.ch, voucher, secret, nil) + require.NoError(t, err) + require.True(t, spendable) + + // Check that the secret was passed through correctly + lastCall := s.mock.getLastCall() + var p paych2.UpdateChannelStateParams + err = p.UnmarshalCBOR(bytes.NewReader(lastCall.Params)) + require.NoError(t, err) + require.Equal(t, secret, p.Secret) + + // Check that if VM call returns non-success exit code, spendable is false + s.mock.setCallResponse(&vm.Ret{ + Receipt: types.MessageReceipt{ + ExitCode: 1, + }, + }) + spendable, err = s.mgr.CheckVoucherSpendable(ctx, s.ch, voucher, secret, nil) + require.NoError(t, err) + require.False(t, spendable) + + // Return success exit code (indicating voucher is spendable) + s.mock.setCallResponse(successResponse) + spendable, err = s.mgr.CheckVoucherSpendable(ctx, s.ch, voucher, secret, nil) + require.NoError(t, err) + require.True(t, spendable) + + // Check that voucher is no longer spendable once it has been submitted + _, err = s.mgr.SubmitVoucher(ctx, s.ch, voucher, nil, nil) + require.NoError(t, err) + + spendable, err = s.mgr.CheckVoucherSpendable(ctx, s.ch, voucher, secret, nil) + require.NoError(t, err) + require.False(t, spendable) +} + +func TestSubmitVoucher(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + // Set up a manager with a single payment channel + s := testSetupMgrWithChannel(t) + + // Create voucher with Extra + voucherLane := uint64(1) + nonce := uint64(1) + voucherAmount := big.NewInt(1) + voucher := createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + + // Add voucher + minDelta := big.NewInt(0) + _, err := s.mgr.AddVoucherInbound(ctx, s.ch, voucher, nil, minDelta) + require.NoError(t, err) + + // Submit voucher + secret := []byte("secret") + submitCid, err := s.mgr.SubmitVoucher(ctx, s.ch, voucher, secret, nil) + require.NoError(t, err) + + // Check that the secret was passed through correctly + msg := s.mock.pushedMessages(submitCid) + var p paych2.UpdateChannelStateParams + err = p.UnmarshalCBOR(bytes.NewReader(msg.Message.Params)) + require.NoError(t, err) + + // Submit a voucher without first adding it + nonce++ + voucherAmount = big.NewInt(3) + voucher = createTestVoucher(t, s.ch, voucherLane, nonce, voucherAmount, s.fromKeyPrivate) + submitCid, err = s.mgr.SubmitVoucher(ctx, s.ch, voucher, nil, nil) + require.NoError(t, err) + + msg = s.mock.pushedMessages(submitCid) + var p3 paych2.UpdateChannelStateParams + err = p3.UnmarshalCBOR(bytes.NewReader(msg.Message.Params)) + require.NoError(t, err) + + // Verify that vouchers are marked as submitted + vis, err := s.mgr.ListVouchers(ctx, s.ch) + require.NoError(t, err) + require.Len(t, vis, 2) + + for _, vi := range vis { + require.True(t, vi.Submitted) + } + + // Attempting to submit the same voucher again should fail + _, err = s.mgr.SubmitVoucher(ctx, s.ch, voucher, nil, nil) + require.Error(t, err) +} + +type testScaffold struct { + mgr *Manager + mock *mockManagerAPI + ch address.Address + amt big.Int + fromAcct address.Address + fromKeyPrivate []byte +} + +func testSetupMgrWithChannel(t *testing.T) *testScaffold { + ctx := context.Background() + fromKeyPrivate, fromKeyPublic := testGenerateKeyPair(t) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewSECP256K1Addr(t, string(fromKeyPublic)) + to := tutils.NewSECP256K1Addr(t, "secpTo") + fromAcct := tutils.NewActorAddr(t, "fromAct") + toAcct := tutils.NewActorAddr(t, "toAct") + + mock := newMockManagerAPI() + mock.setAccountAddress(fromAcct, from) + mock.setAccountAddress(toAcct, to) + + // Create channel in state + balance := big.NewInt(20) + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: balance, + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(fromAcct, toAcct, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Create the channel in the manager's store + ci := &ChannelInfo{ + Channel: &ch, + Control: fromAcct, + Target: toAcct, + Direction: DirOutbound, + } + err = mgr.store.putChannelInfo(ctx, ci) + require.NoError(t, err) + + // Add the from signing key to the wallet + mock.addSigningKey(fromKeyPrivate) + + return &testScaffold{ + mgr: mgr, + mock: mock, + ch: ch, + amt: balance, + fromAcct: fromAcct, + fromKeyPrivate: fromKeyPrivate, + } +} + +func testGenerateKeyPair(t *testing.T) ([]byte, []byte) { + priv, err := crypto2.Generate(crypto.SigTypeSecp256k1) + require.NoError(t, err) + pub, err := crypto2.ToPublic(crypto.SigTypeSecp256k1, priv) + require.NoError(t, err) + return priv, pub +} + +func createTestVoucher(t *testing.T, ch address.Address, voucherLane uint64, nonce uint64, voucherAmount big.Int, key []byte) *paych2.SignedVoucher { + sv := &paych2.SignedVoucher{ + ChannelAddr: ch, + Lane: voucherLane, + Nonce: nonce, + Amount: voucherAmount, + } + + signingBytes, err := sv.SigningBytes() + require.NoError(t, err) + sig, err := crypto2.Sign(signingBytes, key, crypto.SigTypeSecp256k1) + require.NoError(t, err) + sv.Signature = sig + return sv +} + +type mockBestSpendableAPI struct { + mgr *Manager +} + +func (m *mockBestSpendableAPI) PaychVoucherList(ctx context.Context, ch address.Address) ([]*paych2.SignedVoucher, error) { + vi, err := m.mgr.ListVouchers(ctx, ch) + if err != nil { + return nil, err + } + + out := make([]*paych2.SignedVoucher, len(vi)) + for k, v := range vi { + out[k] = v.Voucher + } + + return out, nil +} + +func (m *mockBestSpendableAPI) PaychVoucherCheckSpendable(ctx context.Context, ch address.Address, voucher *paych2.SignedVoucher, secret []byte, proof []byte) (bool, error) { + return m.mgr.CheckVoucherSpendable(ctx, ch, voucher, secret, proof) +} + +func newMockBestSpendableAPI(mgr *Manager) BestSpendableAPI { + return &mockBestSpendableAPI{mgr: mgr} +} diff --git a/pkg/paychmgr/paychget_test.go b/pkg/paychmgr/paychget_test.go new file mode 100644 index 0000000000..51ecdab7c1 --- /dev/null +++ b/pkg/paychmgr/paychget_test.go @@ -0,0 +1,1083 @@ +package paychmgr + +import ( + "context" + "sync" + "testing" + "time" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + types "github.com/filecoin-project/venus/venus-shared/chain" + + cborrpc "github.com/filecoin-project/go-cbor-util" + "github.com/ipfs/go-cid" + ds "github.com/ipfs/go-datastore" + ds_sync "github.com/ipfs/go-datastore/sync" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/specs-actors/v2/actors/builtin" + init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" + tutils "github.com/filecoin-project/specs-actors/v6/support/testing" + + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" + lotusinit "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + paychmock "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych/mock" +) + +func testChannelResponse(t *testing.T, ch address.Address) types.MessageReceipt { + createChannelRet := init2.ExecReturn{ + IDAddress: ch, + RobustAddress: ch, + } + createChannelRetBytes, err := cborrpc.Dump(&createChannelRet) + require.NoError(t, err) + createChannelResponse := types.MessageReceipt{ + ExitCode: 0, + Return: createChannelRetBytes, + } + return createChannelResponse +} + +// TestPaychGetCreateChannelMsg tests that GetPaych sends a message to create +// a new channel with the correct funds +func TestPaychGetCreateChannelMsg(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + amt := big.NewInt(10) + ch, mcid, err := mgr.GetPaych(ctx, from, to, amt) + require.NoError(t, err) + require.Equal(t, address.Undef, ch) + + pushedMsg := mock.pushedMessages(mcid) + require.Equal(t, from, pushedMsg.Message.From) + require.Equal(t, lotusinit.Address, pushedMsg.Message.To) + require.Equal(t, amt, pushedMsg.Message.Value) +} + +// TestPaychGetCreateChannelThenAddFunds tests creating a channel and then +// adding funds to it +func TestPaychGetCreateChannelThenAddFunds(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Send create message for a channel with value 10 + amt := big.NewInt(10) + _, createMsgCid, err := mgr.GetPaych(ctx, from, to, amt) + require.NoError(t, err) + + // Should have no channels yet (message sent but channel not created) + cis, err := mgr.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, cis, 0) + + // 1. Set up create channel response (sent in response to WaitForMsg()) + response := testChannelResponse(t, ch) + + done := make(chan struct{}) + go func() { + defer close(done) + + // 2. Request add funds - should block until create channel has completed + amt2 := big.NewInt(5) + ch2, addFundsMsgCid, err := mgr.GetPaych(ctx, from, to, amt2) + + // 4. This GetPaych should return after create channel from first + // GetPaych completes + require.NoError(t, err) + + // Expect the channel to be the same + require.Equal(t, ch, ch2) + // Expect add funds message CID to be different to create message cid + require.NotEqual(t, createMsgCid, addFundsMsgCid) + + // Should have one channel, whose address is the channel that was created + cis, err := mgr.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, cis, 1) + require.Equal(t, ch, cis[0]) + + // Amount should be amount sent to first GetPaych (to create + // channel). + // PendingAmount should be amount sent in second GetPaych + // (second GetPaych triggered add funds, which has not yet been confirmed) + ci, err := mgr.GetChannelInfo(ctx, ch) + require.NoError(t, err) + require.EqualValues(t, 10, ci.Amount.Int64()) + require.EqualValues(t, 5, ci.PendingAmount.Int64()) + require.Nil(t, ci.CreateMsg) + + // Trigger add funds confirmation + mock.receiveMsgResponse(addFundsMsgCid, types.MessageReceipt{ExitCode: 0}) + + // Wait for add funds confirmation to be processed by manager + _, err = mgr.GetPaychWaitReady(ctx, addFundsMsgCid) + require.NoError(t, err) + + // Should still have one channel + cis, err = mgr.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, cis, 1) + require.Equal(t, ch, cis[0]) + + // Channel amount should include last amount sent to GetPaych + ci, err = mgr.GetChannelInfo(ctx, ch) + require.NoError(t, err) + require.EqualValues(t, 15, ci.Amount.Int64()) + require.EqualValues(t, 0, ci.PendingAmount.Int64()) + require.Nil(t, ci.AddFundsMsg) + }() + + // 3. Send create channel response + mock.receiveMsgResponse(createMsgCid, response) + + <-done +} + +// TestPaychGetCreateChannelWithErrorThenCreateAgain tests that if an +// operation is queued up behind a create channel operation, and the create +// channel fails, then the waiting operation can succeed. +func TestPaychGetCreateChannelWithErrorThenCreateAgain(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Send create message for a channel + amt := big.NewInt(10) + _, mcid1, err := mgr.GetPaych(ctx, from, to, amt) + require.NoError(t, err) + + // 1. Set up create channel response (sent in response to WaitForMsg()) + // This response indicates an error. + errResponse := types.MessageReceipt{ + ExitCode: 1, // error + Return: []byte{}, + } + + done := make(chan struct{}) + go func() { + defer close(done) + + // 2. Should block until create channel has completed. + // Because first channel create fails, this request + // should be for channel create again. + amt2 := big.NewInt(5) + ch2, mcid2, err := mgr.GetPaych(ctx, from, to, amt2) + require.NoError(t, err) + require.Equal(t, address.Undef, ch2) + + // 4. Send a success response + ch := tutils.NewIDAddr(t, 100) + successResponse := testChannelResponse(t, ch) + mock.receiveMsgResponse(mcid2, successResponse) + + _, err = mgr.GetPaychWaitReady(ctx, mcid2) + require.NoError(t, err) + + // Should have one channel, whose address is the channel that was created + cis, err := mgr.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, cis, 1) + require.Equal(t, ch, cis[0]) + + ci, err := mgr.GetChannelInfo(ctx, ch) + require.NoError(t, err) + require.Equal(t, amt2, ci.Amount) + }() + + // 3. Send error response to first channel create + mock.receiveMsgResponse(mcid1, errResponse) + + <-done +} + +// TestPaychGetRecoverAfterError tests that after a create channel fails, the +// next attempt to create channel can succeed. +func TestPaychGetRecoverAfterError(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Send create message for a channel + amt := big.NewInt(10) + _, mcid, err := mgr.GetPaych(ctx, from, to, amt) + require.NoError(t, err) + + // Send error create channel response + mock.receiveMsgResponse(mcid, types.MessageReceipt{ + ExitCode: 1, // error + Return: []byte{}, + }) + + // Send create message for a channel again + amt2 := big.NewInt(7) + _, mcid2, err := mgr.GetPaych(ctx, from, to, amt2) + require.NoError(t, err) + + // Send success create channel response + response := testChannelResponse(t, ch) + mock.receiveMsgResponse(mcid2, response) + + _, err = mgr.GetPaychWaitReady(ctx, mcid2) + require.NoError(t, err) + + // Should have one channel, whose address is the channel that was created + cis, err := mgr.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, cis, 1) + require.Equal(t, ch, cis[0]) + + ci, err := mgr.GetChannelInfo(ctx, ch) + require.NoError(t, err) + require.Equal(t, amt2, ci.Amount) + require.EqualValues(t, 0, ci.PendingAmount.Int64()) + require.Nil(t, ci.CreateMsg) +} + +// TestPaychGetRecoverAfterAddFundsError tests that after an add funds fails, the +// next attempt to add funds can succeed. +func TestPaychGetRecoverAfterAddFundsError(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Send create message for a channel + amt := big.NewInt(10) + _, mcid1, err := mgr.GetPaych(ctx, from, to, amt) + require.NoError(t, err) + + // Send success create channel response + response := testChannelResponse(t, ch) + mock.receiveMsgResponse(mcid1, response) + + // Send add funds message for channel + amt2 := big.NewInt(5) + _, mcid2, err := mgr.GetPaych(ctx, from, to, amt2) + require.NoError(t, err) + + // Send error add funds response + mock.receiveMsgResponse(mcid2, types.MessageReceipt{ + ExitCode: 1, // error + Return: []byte{}, + }) + + _, err = mgr.GetPaychWaitReady(ctx, mcid2) + require.Error(t, err) + + // Should have one channel, whose address is the channel that was created + cis, err := mgr.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, cis, 1) + require.Equal(t, ch, cis[0]) + + ci, err := mgr.GetChannelInfo(ctx, ch) + require.NoError(t, err) + require.Equal(t, amt, ci.Amount) + require.EqualValues(t, 0, ci.PendingAmount.Int64()) + require.Nil(t, ci.CreateMsg) + require.Nil(t, ci.AddFundsMsg) + + // Send add funds message for channel again + amt3 := big.NewInt(2) + _, mcid3, err := mgr.GetPaych(ctx, from, to, amt3) + require.NoError(t, err) + + // Send success add funds response + mock.receiveMsgResponse(mcid3, types.MessageReceipt{ + ExitCode: 0, + Return: []byte{}, + }) + + _, err = mgr.GetPaychWaitReady(ctx, mcid3) + require.NoError(t, err) + + // Should have one channel, whose address is the channel that was created + cis, err = mgr.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, cis, 1) + require.Equal(t, ch, cis[0]) + + // Amount should include amount for successful add funds msg + ci, err = mgr.GetChannelInfo(ctx, ch) + require.NoError(t, err) + require.Equal(t, amt.Int64()+amt3.Int64(), ci.Amount.Int64()) + require.EqualValues(t, 0, ci.PendingAmount.Int64()) + require.Nil(t, ci.CreateMsg) + require.Nil(t, ci.AddFundsMsg) +} + +// TestPaychGetRestartAfterCreateChannelMsg tests that if the system stops +// right after the create channel message is sent, the channel will be +// created when the system restarts. +func TestPaychGetRestartAfterCreateChannelMsg(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Send create message for a channel with value 10 + amt := big.NewInt(10) + _, createMsgCid, err := mgr.GetPaych(ctx, from, to, amt) + require.NoError(t, err) + + // Simulate shutting down system + mock.close() + + // Create a new manager with the same datastore + mock2 := newMockManagerAPI() + defer mock2.close() + + mgr2, err := newManager(ctx, store, mock2) + require.NoError(t, err) + + // Should have no channels yet (message sent but channel not created) + cis, err := mgr2.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, cis, 0) + + // 1. Set up create channel response (sent in response to WaitForMsg()) + response := testChannelResponse(t, ch) + + done := make(chan struct{}) + go func() { + defer close(done) + + // 2. Request add funds - should block until create channel has completed + amt2 := big.NewInt(5) + ch2, addFundsMsgCid, err := mgr2.GetPaych(ctx, from, to, amt2) + + // 4. This GetPaych should return after create channel from first + // GetPaych completes + require.NoError(t, err) + + // Expect the channel to have been created + require.Equal(t, ch, ch2) + // Expect add funds message CID to be different to create message cid + require.NotEqual(t, createMsgCid, addFundsMsgCid) + + // Should have one channel, whose address is the channel that was created + cis, err := mgr2.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, cis, 1) + require.Equal(t, ch, cis[0]) + + // Amount should be amount sent to first GetPaych (to create + // channel). + // PendingAmount should be amount sent in second GetPaych + // (second GetPaych triggered add funds, which has not yet been confirmed) + ci, err := mgr2.GetChannelInfo(ctx, ch) + require.NoError(t, err) + require.EqualValues(t, 10, ci.Amount.Int64()) + require.EqualValues(t, 5, ci.PendingAmount.Int64()) + require.Nil(t, ci.CreateMsg) + }() + + // 3. Send create channel response + mock2.receiveMsgResponse(createMsgCid, response) + + <-done +} + +// TestPaychGetRestartAfterAddFundsMsg tests that if the system stops +// right after the add funds message is sent, the add funds will be +// processed when the system restarts. +func TestPaychGetRestartAfterAddFundsMsg(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Send create message for a channel + amt := big.NewInt(10) + _, mcid1, err := mgr.GetPaych(ctx, from, to, amt) + require.NoError(t, err) + + // Send success create channel response + response := testChannelResponse(t, ch) + mock.receiveMsgResponse(mcid1, response) + + // Send add funds message for channel + amt2 := big.NewInt(5) + _, mcid2, err := mgr.GetPaych(ctx, from, to, amt2) + require.NoError(t, err) + + // Simulate shutting down system + mock.close() + + // Create a new manager with the same datastore + mock2 := newMockManagerAPI() + defer mock2.close() + + mgr2, err := newManager(ctx, store, mock2) + require.NoError(t, err) + + // Send success add funds response + mock2.receiveMsgResponse(mcid2, types.MessageReceipt{ + ExitCode: 0, + Return: []byte{}, + }) + + _, err = mgr2.GetPaychWaitReady(ctx, mcid2) + require.NoError(t, err) + + // Should have one channel, whose address is the channel that was created + cis, err := mgr2.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, cis, 1) + require.Equal(t, ch, cis[0]) + + // Amount should include amount for successful add funds msg + ci, err := mgr2.GetChannelInfo(ctx, ch) + require.NoError(t, err) + require.Equal(t, amt.Int64()+amt2.Int64(), ci.Amount.Int64()) + require.EqualValues(t, 0, ci.PendingAmount.Int64()) + require.Nil(t, ci.CreateMsg) + require.Nil(t, ci.AddFundsMsg) +} + +// TestPaychGetWait tests that GetPaychWaitReady correctly waits for the +// channel to be created or funds to be added +func TestPaychGetWait(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // 1. Get + amt := big.NewInt(10) + _, createMsgCid, err := mgr.GetPaych(ctx, from, to, amt) + require.NoError(t, err) + + expch := tutils.NewIDAddr(t, 100) + go func() { + // 3. Send response + response := testChannelResponse(t, expch) + mock.receiveMsgResponse(createMsgCid, response) + }() + + // 2. Wait till ready + ch, err := mgr.GetPaychWaitReady(ctx, createMsgCid) + require.NoError(t, err) + require.Equal(t, expch, ch) + + // 4. Wait again - message has already been received so should + // return immediately + ch, err = mgr.GetPaychWaitReady(ctx, createMsgCid) + require.NoError(t, err) + require.Equal(t, expch, ch) + + // Request add funds + amt2 := big.NewInt(15) + _, addFundsMsgCid, err := mgr.GetPaych(ctx, from, to, amt2) + require.NoError(t, err) + + go func() { + // 6. Send add funds response + addFundsResponse := types.MessageReceipt{ + ExitCode: 0, + Return: []byte{}, + } + mock.receiveMsgResponse(addFundsMsgCid, addFundsResponse) + }() + + // 5. Wait for add funds + ch, err = mgr.GetPaychWaitReady(ctx, addFundsMsgCid) + require.NoError(t, err) + require.Equal(t, expch, ch) +} + +// TestPaychGetWaitErr tests that GetPaychWaitReady correctly handles errors +func TestPaychGetWaitErr(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // 1. Create channel + amt := big.NewInt(10) + _, mcid, err := mgr.GetPaych(ctx, from, to, amt) + require.NoError(t, err) + + done := make(chan address.Address) + go func() { + defer close(done) + + // 2. Wait for channel to be created + _, err := mgr.GetPaychWaitReady(ctx, mcid) + + // 4. Channel creation should have failed + require.NotNil(t, err) + + // 5. Call wait again with the same message CID + _, err = mgr.GetPaychWaitReady(ctx, mcid) + + // 6. Should return immediately with the same error + require.NotNil(t, err) + }() + + // 3. Send error response to create channel + response := types.MessageReceipt{ + ExitCode: 1, // error + Return: []byte{}, + } + mock.receiveMsgResponse(mcid, response) + + <-done +} + +// TestPaychGetWaitCtx tests that GetPaychWaitReady returns early if the context +// is cancelled +func TestPaychGetWaitCtx(t *testing.T) { + tf.UnitTest(t) + ctx, cancel := context.WithCancel(context.Background()) + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + amt := big.NewInt(10) + _, mcid, err := mgr.GetPaych(ctx, from, to, amt) + require.NoError(t, err) + + // When the context is cancelled, should unblock wait + go func() { + cancel() + }() + + _, err = mgr.GetPaychWaitReady(ctx, mcid) + require.Error(t, ctx.Err(), err) +} + +// TestPaychGetMergeAddFunds tests that if a create channel is in +// progress and two add funds are queued up behind it, the two add funds +// will be merged +func TestPaychGetMergeAddFunds(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Send create message for a channel with value 10 + createAmt := big.NewInt(10) + _, createMsgCid, err := mgr.GetPaych(ctx, from, to, createAmt) + require.NoError(t, err) + + // Queue up two add funds requests behind create channel + var addFundsSent sync.WaitGroup + addFundsSent.Add(2) + + addFundsAmt1 := big.NewInt(5) + addFundsAmt2 := big.NewInt(3) + var addFundsCh1 address.Address + var addFundsCh2 address.Address + var addFundsMcid1 cid.Cid + var addFundsMcid2 cid.Cid + go func() { + defer addFundsSent.Done() + + // Request add funds - should block until create channel has completed + var err error + addFundsCh1, addFundsMcid1, err = mgr.GetPaych(ctx, from, to, addFundsAmt1) + require.NoError(t, err) + }() + + go func() { + defer addFundsSent.Done() + + // Request add funds again - should merge with waiting add funds request + var err error + addFundsCh2, addFundsMcid2, err = mgr.GetPaych(ctx, from, to, addFundsAmt2) + require.NoError(t, err) + }() + // Wait for add funds requests to be queued up + waitForQueueSize(t, mgr, from, to, 2) + + // Send create channel response + response := testChannelResponse(t, ch) + mock.receiveMsgResponse(createMsgCid, response) + + // Wait for create channel response + chres, err := mgr.GetPaychWaitReady(ctx, createMsgCid) + require.NoError(t, err) + require.Equal(t, ch, chres) + + // Wait for add funds requests to be sent + addFundsSent.Wait() + + // Expect add funds requests to have same channel as create channel and + // same message cid as each other (because they should have been merged) + require.Equal(t, ch, addFundsCh1) + require.Equal(t, ch, addFundsCh2) + require.Equal(t, addFundsMcid1, addFundsMcid2) + + // Send success add funds response + mock.receiveMsgResponse(addFundsMcid1, types.MessageReceipt{ + ExitCode: 0, + Return: []byte{}, + }) + + // Wait for add funds response + addFundsCh, err := mgr.GetPaychWaitReady(ctx, addFundsMcid1) + require.NoError(t, err) + require.Equal(t, ch, addFundsCh) + + // Make sure that one create channel message and one add funds message was + // sent + require.Equal(t, 2, mock.pushedMessageCount()) + + // Check create message amount is correct + createMsg := mock.pushedMessages(createMsgCid) + require.Equal(t, from, createMsg.Message.From) + require.Equal(t, lotusinit.Address, createMsg.Message.To) + require.Equal(t, createAmt, createMsg.Message.Value) + + // Check merged add funds amount is the sum of the individual + // amounts + addFundsMsg := mock.pushedMessages(addFundsMcid1) + require.Equal(t, from, addFundsMsg.Message.From) + require.Equal(t, ch, addFundsMsg.Message.To) + require.Equal(t, big.Add(addFundsAmt1, addFundsAmt2), addFundsMsg.Message.Value) +} + +// TestPaychGetMergeAddFundsCtxCancelOne tests that when a queued add funds +// request is cancelled, its amount is removed from the total merged add funds +func TestPaychGetMergeAddFundsCtxCancelOne(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Send create message for a channel with value 10 + createAmt := big.NewInt(10) + _, createMsgCid, err := mgr.GetPaych(ctx, from, to, createAmt) + require.NoError(t, err) + + // Queue up two add funds requests behind create channel + var addFundsSent sync.WaitGroup + addFundsSent.Add(2) + + addFundsAmt1 := big.NewInt(5) + addFundsAmt2 := big.NewInt(3) + var addFundsCh2 address.Address + var addFundsMcid2 cid.Cid + var addFundsErr1 error + addFundsCtx1, cancelAddFundsCtx1 := context.WithCancel(ctx) + go func() { + defer addFundsSent.Done() + + // Request add funds - should block until create channel has completed + _, _, addFundsErr1 = mgr.GetPaych(addFundsCtx1, from, to, addFundsAmt1) + }() + + go func() { + defer addFundsSent.Done() + + // Request add funds again - should merge with waiting add funds request + var err error + addFundsCh2, addFundsMcid2, err = mgr.GetPaych(ctx, from, to, addFundsAmt2) + require.NoError(t, err) + }() + // Wait for add funds requests to be queued up + waitForQueueSize(t, mgr, from, to, 2) + + // Cancel the first add funds request + cancelAddFundsCtx1() + + // Send create channel response + response := testChannelResponse(t, ch) + mock.receiveMsgResponse(createMsgCid, response) + + // Wait for create channel response + chres, err := mgr.GetPaychWaitReady(ctx, createMsgCid) + require.NoError(t, err) + require.Equal(t, ch, chres) + + // Wait for add funds requests to be sent + addFundsSent.Wait() + + // Expect first add funds request to have been cancelled + require.NotNil(t, addFundsErr1) + require.Equal(t, ch, addFundsCh2) + + // Send success add funds response + mock.receiveMsgResponse(addFundsMcid2, types.MessageReceipt{ + ExitCode: 0, + Return: []byte{}, + }) + + // Wait for add funds response + addFundsCh, err := mgr.GetPaychWaitReady(ctx, addFundsMcid2) + require.NoError(t, err) + require.Equal(t, ch, addFundsCh) + + // Make sure that one create channel message and one add funds message was + // sent + require.Equal(t, 2, mock.pushedMessageCount()) + + // Check create message amount is correct + createMsg := mock.pushedMessages(createMsgCid) + require.Equal(t, from, createMsg.Message.From) + require.Equal(t, lotusinit.Address, createMsg.Message.To) + require.Equal(t, createAmt, createMsg.Message.Value) + + // Check merged add funds amount only includes the second add funds amount + // (because first was cancelled) + addFundsMsg := mock.pushedMessages(addFundsMcid2) + require.Equal(t, from, addFundsMsg.Message.From) + require.Equal(t, ch, addFundsMsg.Message.To) + require.Equal(t, addFundsAmt2, addFundsMsg.Message.Value) +} + +// TestPaychGetMergeAddFundsCtxCancelAll tests that when all queued add funds +// requests are cancelled, no add funds message is sent +func TestPaychGetMergeAddFundsCtxCancelAll(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Send create message for a channel with value 10 + createAmt := big.NewInt(10) + _, createMsgCid, err := mgr.GetPaych(ctx, from, to, createAmt) + require.NoError(t, err) + + // Queue up two add funds requests behind create channel + var addFundsSent sync.WaitGroup + addFundsSent.Add(2) + + var addFundsErr1 error + var addFundsErr2 error + addFundsCtx1, cancelAddFundsCtx1 := context.WithCancel(ctx) + addFundsCtx2, cancelAddFundsCtx2 := context.WithCancel(ctx) + go func() { + defer addFundsSent.Done() + + // Request add funds - should block until create channel has completed + _, _, addFundsErr1 = mgr.GetPaych(addFundsCtx1, from, to, big.NewInt(5)) + }() + + go func() { + defer addFundsSent.Done() + + // Request add funds again - should merge with waiting add funds request + _, _, addFundsErr2 = mgr.GetPaych(addFundsCtx2, from, to, big.NewInt(3)) + }() + // Wait for add funds requests to be queued up + waitForQueueSize(t, mgr, from, to, 2) + + // Cancel all add funds requests + cancelAddFundsCtx1() + cancelAddFundsCtx2() + + // Send create channel response + response := testChannelResponse(t, ch) + mock.receiveMsgResponse(createMsgCid, response) + + // Wait for create channel response + chres, err := mgr.GetPaychWaitReady(ctx, createMsgCid) + require.NoError(t, err) + require.Equal(t, ch, chres) + + // Wait for add funds requests to error out + addFundsSent.Wait() + + require.NotNil(t, addFundsErr1) + require.NotNil(t, addFundsErr2) + + // Make sure that just the create channel message was sent + require.Equal(t, 1, mock.pushedMessageCount()) + + // Check create message amount is correct + createMsg := mock.pushedMessages(createMsgCid) + require.Equal(t, from, createMsg.Message.From) + require.Equal(t, lotusinit.Address, createMsg.Message.To) + require.Equal(t, createAmt, createMsg.Message.Value) +} + +// TestPaychAvailableFunds tests that PaychAvailableFunds returns the correct +// channel state +func TestPaychAvailableFunds(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + fromKeyPrivate, fromKeyPublic := testGenerateKeyPair(t) + ch := tutils.NewIDAddr(t, 100) + from := tutils.NewSECP256K1Addr(t, string(fromKeyPublic)) + to := tutils.NewIDAddr(t, 102) + fromAcct := tutils.NewActorAddr(t, "fromAct") + toAcct := tutils.NewActorAddr(t, "toAct") + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // No channel created yet so available funds should be all zeroes + av, err := mgr.AvailableFundsByFromTo(ctx, from, to) + require.NoError(t, err) + require.Nil(t, av.Channel) + require.Nil(t, av.PendingWaitSentinel) + require.EqualValues(t, 0, av.ConfirmedAmt.Int64()) + require.EqualValues(t, 0, av.PendingAmt.Int64()) + require.EqualValues(t, 0, av.QueuedAmt.Int64()) + require.EqualValues(t, 0, av.VoucherReedeemedAmt.Int64()) + + // Send create message for a channel with value 10 + createAmt := big.NewInt(10) + _, createMsgCid, err := mgr.GetPaych(ctx, from, to, createAmt) + require.NoError(t, err) + + // Available funds should reflect create channel message sent + av, err = mgr.AvailableFundsByFromTo(ctx, from, to) + require.NoError(t, err) + require.Nil(t, av.Channel) + require.EqualValues(t, 0, av.ConfirmedAmt.Int64()) + require.EqualValues(t, createAmt, av.PendingAmt) + require.EqualValues(t, 0, av.QueuedAmt.Int64()) + require.EqualValues(t, 0, av.VoucherReedeemedAmt.Int64()) + // Should now have a pending wait sentinel + require.NotNil(t, av.PendingWaitSentinel) + + // Queue up an add funds request behind create channel + var addFundsSent sync.WaitGroup + addFundsSent.Add(1) + + addFundsAmt := big.NewInt(5) + var addFundsMcid cid.Cid + go func() { + defer addFundsSent.Done() + + // Request add funds - should block until create channel has completed + var err error + _, addFundsMcid, err = mgr.GetPaych(ctx, from, to, addFundsAmt) + require.NoError(t, err) + }() + + // Wait for add funds request to be queued up + waitForQueueSize(t, mgr, from, to, 1) + + // Available funds should now include queued funds + av, err = mgr.AvailableFundsByFromTo(ctx, from, to) + require.NoError(t, err) + require.Nil(t, av.Channel) + require.NotNil(t, av.PendingWaitSentinel) + require.EqualValues(t, 0, av.ConfirmedAmt.Int64()) + // create amount is still pending + require.EqualValues(t, createAmt, av.PendingAmt) + // queued amount now includes add funds amount + require.EqualValues(t, addFundsAmt, av.QueuedAmt) + require.EqualValues(t, 0, av.VoucherReedeemedAmt.Int64()) + + // Create channel in state + mock.setAccountAddress(fromAcct, from) + mock.setAccountAddress(toAcct, to) + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: createAmt, + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(fromAcct, toAcct, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + // Send create channel response + response := testChannelResponse(t, ch) + mock.receiveMsgResponse(createMsgCid, response) + + // Wait for create channel response + chres, err := mgr.GetPaychWaitReady(ctx, *av.PendingWaitSentinel) + require.NoError(t, err) + require.Equal(t, ch, chres) + + // Wait for add funds request to be sent + addFundsSent.Wait() + + // Available funds should now include the channel and also a wait sentinel + // for the add funds message + av, err = mgr.AvailableFunds(ctx, ch) + require.NoError(t, err) + require.NotNil(t, av.Channel) + require.NotNil(t, av.PendingWaitSentinel) + // create amount is now confirmed + require.EqualValues(t, createAmt, av.ConfirmedAmt) + // add funds amount it now pending + require.EqualValues(t, addFundsAmt, av.PendingAmt) + require.EqualValues(t, 0, av.QueuedAmt.Int64()) + require.EqualValues(t, 0, av.VoucherReedeemedAmt.Int64()) + + // Send success add funds response + mock.receiveMsgResponse(addFundsMcid, types.MessageReceipt{ + ExitCode: 0, + Return: []byte{}, + }) + + // Wait for add funds response + _, err = mgr.GetPaychWaitReady(ctx, *av.PendingWaitSentinel) + require.NoError(t, err) + + // Available funds should no longer have a wait sentinel + av, err = mgr.AvailableFunds(ctx, ch) + require.NoError(t, err) + require.NotNil(t, av.Channel) + require.Nil(t, av.PendingWaitSentinel) + // confirmed amount now includes create and add funds amounts + require.EqualValues(t, big.Add(createAmt, addFundsAmt), av.ConfirmedAmt) + require.EqualValues(t, 0, av.PendingAmt.Int64()) + require.EqualValues(t, 0, av.QueuedAmt.Int64()) + require.EqualValues(t, 0, av.VoucherReedeemedAmt.Int64()) + + // Add some vouchers + voucherAmt1 := big.NewInt(3) + voucher := createTestVoucher(t, ch, 1, 1, voucherAmt1, fromKeyPrivate) + _, err = mgr.AddVoucherOutbound(ctx, ch, voucher, nil, big.NewInt(0)) + require.NoError(t, err) + + voucherAmt2 := big.NewInt(2) + voucher = createTestVoucher(t, ch, 2, 1, voucherAmt2, fromKeyPrivate) + _, err = mgr.AddVoucherOutbound(ctx, ch, voucher, nil, big.NewInt(0)) + require.NoError(t, err) + + av, err = mgr.AvailableFunds(ctx, ch) + require.NoError(t, err) + require.NotNil(t, av.Channel) + require.Nil(t, av.PendingWaitSentinel) + require.EqualValues(t, big.Add(createAmt, addFundsAmt), av.ConfirmedAmt) + require.EqualValues(t, 0, av.PendingAmt.Int64()) + require.EqualValues(t, 0, av.QueuedAmt.Int64()) + // voucher redeemed amount now includes vouchers + require.EqualValues(t, big.Add(voucherAmt1, voucherAmt2), av.VoucherReedeemedAmt) +} + +// waitForQueueSize waits for the funds request queue to be of the given size +func waitForQueueSize(t *testing.T, mgr *Manager, from address.Address, to address.Address, size int) { + ca, err := mgr.accessorByFromTo(from, to) + require.NoError(t, err) + + for { + if ca.queueSize() == size { + return + } + + time.Sleep(time.Millisecond) + } +} diff --git a/pkg/paychmgr/paychvoucherfunds_test.go b/pkg/paychmgr/paychvoucherfunds_test.go new file mode 100644 index 0000000000..1dbcb9478d --- /dev/null +++ b/pkg/paychmgr/paychvoucherfunds_test.go @@ -0,0 +1,106 @@ +package paychmgr + +import ( + "context" + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + ds "github.com/ipfs/go-datastore" + ds_sync "github.com/ipfs/go-datastore/sync" + "github.com/stretchr/testify/require" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + tutils2 "github.com/filecoin-project/specs-actors/v6/support/testing" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + paychmock "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych/mock" +) + +// TestPaychAddVoucherAfterAddFunds tests adding a voucher to a channel with +// insufficient funds, then adding funds to the channel, then adding the +// voucher again +func TestPaychAddVoucherAfterAddFunds(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + fromKeyPrivate, fromKeyPublic := testGenerateKeyPair(t) + ch := tutils2.NewIDAddr(t, 100) + from := tutils2.NewSECP256K1Addr(t, string(fromKeyPublic)) + to := tutils2.NewSECP256K1Addr(t, "secpTo") + fromAcct := tutils2.NewActorAddr(t, "fromAct") + toAcct := tutils2.NewActorAddr(t, "toAct") + + mock := newMockManagerAPI() + defer mock.close() + + // Add the from signing key to the wallet + mock.setAccountAddress(fromAcct, from) + mock.setAccountAddress(toAcct, to) + mock.addSigningKey(fromKeyPrivate) + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + // Send create message for a channel with value 10 + createAmt := big.NewInt(10) + _, createMsgCid, err := mgr.GetPaych(ctx, from, to, createAmt) + require.NoError(t, err) + + // Send create channel response + response := testChannelResponse(t, ch) + mock.receiveMsgResponse(createMsgCid, response) + + // Create an actor in state for the channel with the initial channel balance + act := &types.Actor{ + Code: builtin2.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: createAmt, + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(fromAcct, toAcct, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + + // Wait for create response to be processed by manager + _, err = mgr.GetPaychWaitReady(ctx, createMsgCid) + require.NoError(t, err) + + // Create a voucher with a value equal to the channel balance + voucher := paych.SignedVoucher{Amount: createAmt, Lane: 1} + res, err := mgr.CreateVoucher(ctx, ch, voucher) + require.NoError(t, err) + require.NotNil(t, res.Voucher) + + // Create a voucher in a different lane with an amount that exceeds the + // channel balance + excessAmt := big.NewInt(5) + voucher = paych.SignedVoucher{Amount: excessAmt, Lane: 2} + res, err = mgr.CreateVoucher(ctx, ch, voucher) + require.NoError(t, err) + require.Nil(t, res.Voucher) + require.Equal(t, res.Shortfall, excessAmt) + + // Add funds so as to cover the voucher shortfall + _, addFundsMsgCid, err := mgr.GetPaych(ctx, from, to, excessAmt) + require.NoError(t, err) + + // Trigger add funds confirmation + mock.receiveMsgResponse(addFundsMsgCid, types.MessageReceipt{ExitCode: 0}) + + // Update actor test case balance to reflect added funds + act.Balance = big.Add(createAmt, excessAmt) + + // Wait for add funds confirmation to be processed by manager + _, err = mgr.GetPaychWaitReady(ctx, addFundsMsgCid) + require.NoError(t, err) + + // Adding same voucher that previously exceeded channel balance + // should succeed now that the channel balance has been increased + res, err = mgr.CreateVoucher(ctx, ch, voucher) + require.NoError(t, err) + require.NotNil(t, res.Voucher) +} diff --git a/pkg/paychmgr/pcapi.go b/pkg/paychmgr/pcapi.go new file mode 100644 index 0000000000..96bad8a6a7 --- /dev/null +++ b/pkg/paychmgr/pcapi.go @@ -0,0 +1,69 @@ +package paychmgr + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/crypto" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + wallettypes "github.com/filecoin-project/venus/venus-shared/wallet" +) + +// paychDependencyAPI defines the API methods needed by the payment channel manager +type paychDependencyAPI interface { + StateAccountKey(context.Context, address.Address, types.TipSetKey) (address.Address, error) + StateWaitMsg(ctx context.Context, msg cid.Cid, confidence uint64) (*apitypes.MsgLookup, error) + WalletHas(ctx context.Context, addr address.Address) (bool, error) + WalletSign(ctx context.Context, k address.Address, msg []byte) (*crypto.Signature, error) + StateNetworkVersion(context.Context, types.TipSetKey) (network.Version, error) + MpoolPushMessage(ctx context.Context, msg *types.Message, maxFee *apitypes.MessageSendSpec) (*types.SignedMessage, error) +} + +type IMessagePush interface { + MpoolPushMessage(ctx context.Context, msg *types.Message, spec *apitypes.MessageSendSpec) (*types.SignedMessage, error) +} + +type IChainInfo interface { + StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) + StateNetworkVersion(ctx context.Context, tsk types.TipSetKey) (network.Version, error) + StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64, limit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) +} + +type IWalletAPI interface { + WalletHas(ctx context.Context, addr address.Address) (bool, error) + WalletSign(ctx context.Context, k address.Address, msg []byte, meta wallettypes.MsgMeta) (*crypto.Signature, error) +} +type pcAPI struct { + mpAPI IMessagePush + chainInfoAPI IChainInfo + walletAPI IWalletAPI +} + +func newPaychDependencyAPI(mpAPI IMessagePush, c IChainInfo, w IWalletAPI) paychDependencyAPI { + return &pcAPI{mpAPI: mpAPI, chainInfoAPI: c, walletAPI: w} +} + +func (o *pcAPI) StateAccountKey(ctx context.Context, address address.Address, tsk types.TipSetKey) (address.Address, error) { + return o.chainInfoAPI.StateAccountKey(ctx, address, tsk) +} +func (o *pcAPI) StateWaitMsg(ctx context.Context, msg cid.Cid, confidence uint64) (*apitypes.MsgLookup, error) { + return o.chainInfoAPI.StateWaitMsg(ctx, msg, confidence, constants.LookbackNoLimit, true) +} +func (o *pcAPI) MpoolPushMessage(ctx context.Context, msg *types.Message, maxFee *apitypes.MessageSendSpec) (*types.SignedMessage, error) { + return o.mpAPI.MpoolPushMessage(ctx, msg, maxFee) +} +func (o *pcAPI) WalletHas(ctx context.Context, addr address.Address) (bool, error) { + return o.walletAPI.WalletHas(ctx, addr) +} +func (o *pcAPI) WalletSign(ctx context.Context, k address.Address, msg []byte) (*crypto.Signature, error) { + return o.walletAPI.WalletSign(ctx, k, msg, wallettypes.MsgMeta{Type: wallettypes.MTSignedVoucher}) +} +func (o *pcAPI) StateNetworkVersion(ctx context.Context, ts types.TipSetKey) (network.Version, error) { + return o.chainInfoAPI.StateNetworkVersion(ctx, ts) +} diff --git a/pkg/paychmgr/settle_test.go b/pkg/paychmgr/settle_test.go new file mode 100644 index 0000000000..dfc14f579e --- /dev/null +++ b/pkg/paychmgr/settle_test.go @@ -0,0 +1,71 @@ +package paychmgr + +import ( + "context" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "testing" + + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-state-types/big" + tutils "github.com/filecoin-project/specs-actors/support/testing" + ds "github.com/ipfs/go-datastore" + ds_sync "github.com/ipfs/go-datastore/sync" + "github.com/stretchr/testify/require" +) + +func TestPaychSettle(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + + expch := tutils.NewIDAddr(t, 100) + expch2 := tutils.NewIDAddr(t, 101) + from := tutils.NewIDAddr(t, 101) + to := tutils.NewIDAddr(t, 102) + + mock := newMockManagerAPI() + defer mock.close() + + mgr, err := newManager(ctx, store, mock) + require.NoError(t, err) + + amt := big.NewInt(10) + _, mcid, err := mgr.GetPaych(ctx, from, to, amt) + require.NoError(t, err) + + // Send channel create response + response := testChannelResponse(t, expch) + mock.receiveMsgResponse(mcid, response) + + // Get the channel address + ch, err := mgr.GetPaychWaitReady(ctx, mcid) + require.NoError(t, err) + require.Equal(t, expch, ch) + + // Settle the channel + _, err = mgr.Settle(ctx, ch) + require.NoError(t, err) + + // Send another request for funds to the same from/to + // (should create a new channel because the previous channel + // is settling) + amt2 := big.NewInt(5) + _, mcid2, err := mgr.GetPaych(ctx, from, to, amt2) + require.NoError(t, err) + require.NotEqual(t, cid.Undef, mcid2) + + // Send new channel create response + response2 := testChannelResponse(t, expch2) + mock.receiveMsgResponse(mcid2, response2) + + // Make sure the new channel is different from the old channel + ch2, err := mgr.GetPaychWaitReady(ctx, mcid2) + require.NoError(t, err) + require.NotEqual(t, ch, ch2) + + // There should now be two channels + cis, err := mgr.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, cis, 2) +} diff --git a/pkg/paychmgr/settler/settler.go b/pkg/paychmgr/settler/settler.go new file mode 100644 index 0000000000..8e0eb74064 --- /dev/null +++ b/pkg/paychmgr/settler/settler.go @@ -0,0 +1,107 @@ +package settler + +import ( + "context" + "sync" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/events" + types "github.com/filecoin-project/venus/venus-shared/chain" + paychtypes "github.com/filecoin-project/venus/venus-shared/paych" + + "github.com/filecoin-project/venus/pkg/paychmgr" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + "github.com/ipfs/go-cid" + logging "github.com/ipfs/go-log/v2" +) + +var log = logging.Logger("payment-channel-settler") + +type API struct { + events.IEvent + Settler +} +type PaymentChannelSettler interface { + check(ts *types.TipSet) (done bool, more bool, err error) + messageHandler(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (more bool, err error) + revertHandler(ctx context.Context, ts *types.TipSet) error + matcher(msg *types.Message) (matched bool, err error) +} +type paymentChannelSettler struct { + ctx context.Context + api Settler +} + +func NewPaymentChannelSettler(ctx context.Context, api Settler) PaymentChannelSettler { + return &paymentChannelSettler{ + ctx: ctx, + api: api, + } +} + +func (pcs *paymentChannelSettler) check(ts *types.TipSet) (done bool, more bool, err error) { + return false, true, nil +} + +func (pcs *paymentChannelSettler) messageHandler(msg *types.Message, rec *types.MessageReceipt, ts *types.TipSet, curH abi.ChainEpoch) (more bool, err error) { + // Ignore unsuccessful settle messages + if rec.ExitCode != 0 { + return true, nil + } + + bestByLane, err := paychmgr.BestSpendableByLane(pcs.ctx, pcs.api, msg.To) + if err != nil { + return true, err + } + var wg sync.WaitGroup + wg.Add(len(bestByLane)) + for _, voucher := range bestByLane { + submitMessageCID, err := pcs.api.PaychVoucherSubmit(pcs.ctx, msg.To, voucher, nil, nil) + if err != nil { + return true, err + } + go func(voucher *paych.SignedVoucher, submitMessageCID cid.Cid) { + defer wg.Done() + msgLookup, err := pcs.api.StateWaitMsg(pcs.ctx, submitMessageCID, constants.MessageConfidence, constants.LookbackNoLimit, true) + if err != nil { + log.Errorf("submitting voucher: %s", err.Error()) + } + if msgLookup.Receipt.ExitCode != 0 { + log.Errorf("failed submitting voucher: %+v", voucher) + } + }(voucher, submitMessageCID) + } + wg.Wait() + return true, nil +} + +func (pcs *paymentChannelSettler) revertHandler(ctx context.Context, ts *types.TipSet) error { + return nil +} + +func (pcs *paymentChannelSettler) matcher(msg *types.Message) (matched bool, err error) { + // Check if this is a settle payment channel message + if msg.Method != paych.Methods.Settle { + return false, nil + } + // Check if this payment channel is of concern to this node (i.e. tracked in payment channel store), + // and its inbound (i.e. we're getting vouchers that we may need to redeem) + trackedAddresses, err := pcs.api.PaychList(pcs.ctx) + if err != nil { + return false, err + } + for _, addr := range trackedAddresses { + if msg.To == addr { + status, err := pcs.api.PaychStatus(pcs.ctx, addr) + if err != nil { + return false, err + } + if status.Direction == paychtypes.PCHInbound { + return true, nil + } + } + } + return false, nil +} diff --git a/pkg/paychmgr/settler/stl.go b/pkg/paychmgr/settler/stl.go new file mode 100644 index 0000000000..ce37d4e547 --- /dev/null +++ b/pkg/paychmgr/settler/stl.go @@ -0,0 +1,68 @@ +package settler + +import ( + "context" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + paychtypes "github.com/filecoin-project/venus/venus-shared/paych" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/paychmgr" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + "github.com/ipfs/go-cid" +) + +type Settler interface { + PaychList(context.Context) ([]address.Address, error) + PaychStatus(ctx context.Context, pch address.Address) (*paychtypes.Status, error) + PaychVoucherCheckSpendable(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (bool, error) + PaychVoucherList(context.Context, address.Address) ([]*paych.SignedVoucher, error) + PaychVoucherSubmit(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (cid.Cid, error) + StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64, limit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) +} + +type settler struct { + mgr *paychmgr.Manager + ciAPI paychmgr.IChainInfo +} + +func NewSetter(mgr *paychmgr.Manager, chainInfoAPI paychmgr.IChainInfo) Settler { + return &settler{mgr, chainInfoAPI} +} + +func (o *settler) PaychList(ctx context.Context) ([]address.Address, error) { + return o.mgr.ListChannels(ctx) +} + +func (o *settler) PaychStatus(ctx context.Context, pch address.Address) (*paychtypes.Status, error) { + ci, err := o.mgr.GetChannelInfo(ctx, pch) + if err != nil { + return nil, err + } + return &paychtypes.Status{ + ControlAddr: ci.Control, + Direction: paychtypes.PCHDir(ci.Direction), + }, nil +} +func (o *settler) PaychVoucherCheckSpendable(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (bool, error) { + return o.mgr.CheckVoucherSpendable(ctx, ch, sv, secret, proof) +} +func (o *settler) PaychVoucherList(ctx context.Context, pch address.Address) ([]*paych.SignedVoucher, error) { + vi, err := o.mgr.ListVouchers(ctx, pch) + if err != nil { + return nil, err + } + + out := make([]*paych.SignedVoucher, len(vi)) + for k, v := range vi { + out[k] = v.Voucher + } + return out, nil +} +func (o *settler) PaychVoucherSubmit(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (cid.Cid, error) { + return o.mgr.SubmitVoucher(ctx, ch, sv, secret, proof) +} +func (o *settler) StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64, lookbackLimit abi.ChainEpoch, allowReplaced bool) (*apitypes.MsgLookup, error) { + return o.ciAPI.StateWaitMsg(ctx, cid, confidence, lookbackLimit, allowReplaced) +} diff --git a/pkg/paychmgr/simple.go b/pkg/paychmgr/simple.go new file mode 100644 index 0000000000..ef1e9433c1 --- /dev/null +++ b/pkg/paychmgr/simple.go @@ -0,0 +1,692 @@ +package paychmgr + +import ( + "bytes" + "context" + "fmt" + "sync" + + "github.com/ipfs/go-cid" + "golang.org/x/sync/errgroup" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + + init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" + + "github.com/filecoin-project/venus/pkg/constants" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// paychFundsRes is the response to a create channel or add funds request +type paychFundsRes struct { + channel address.Address + mcid cid.Cid + err error +} + +// fundsReq is a request to create a channel or add funds to a channel +type fundsReq struct { + ctx context.Context + promise chan *paychFundsRes + amt big.Int + + lk sync.Mutex + // merge parent, if this req is part of a merge + merge *mergedFundsReq +} + +func newFundsReq(ctx context.Context, amt big.Int) *fundsReq { + promise := make(chan *paychFundsRes) + return &fundsReq{ + ctx: ctx, + promise: promise, + amt: amt, + } +} + +// onComplete is called when the funds request has been executed +func (r *fundsReq) onComplete(res *paychFundsRes) { + select { + case <-r.ctx.Done(): + case r.promise <- res: + } +} + +// cancel is called when the req's context is cancelled +func (r *fundsReq) cancel() { + r.lk.Lock() + defer r.lk.Unlock() + + // If there's a merge parent, tell the merge parent to check if it has any + // active reqs left + if r.merge != nil { + r.merge.checkActive() + } +} + +// isActive indicates whether the req's context has been cancelled +func (r *fundsReq) isActive() bool { + return r.ctx.Err() == nil +} + +// setMergeParent sets the merge that this req is part of +func (r *fundsReq) setMergeParent(m *mergedFundsReq) { + r.lk.Lock() + defer r.lk.Unlock() + + r.merge = m +} + +// mergedFundsReq merges together multiple add funds requests that are queued +// up, so that only one message is sent for all the requests (instead of one +// message for each request) +type mergedFundsReq struct { + ctx context.Context + cancel context.CancelFunc + reqs []*fundsReq +} + +func newMergedFundsReq(reqs []*fundsReq) *mergedFundsReq { + ctx, cancel := context.WithCancel(context.Background()) + + rqs := make([]*fundsReq, len(reqs)) + copy(rqs, reqs) + m := &mergedFundsReq{ + ctx: ctx, + cancel: cancel, + reqs: rqs, + } + + for _, r := range m.reqs { + r.setMergeParent(m) + } + + // If the requests were all cancelled while being added, cancel the context + // immediately + m.checkActive() + + return m +} + +// Called when a fundsReq is cancelled +func (m *mergedFundsReq) checkActive() { + // Check if there are any active fundsReqs + for _, r := range m.reqs { + if r.isActive() { + return + } + } + + // If all fundsReqs have been cancelled, cancel the context + m.cancel() +} + +// onComplete is called when the queue has executed the mergeFundsReq. +// Calls onComplete on each fundsReq in the mergeFundsReq. +func (m *mergedFundsReq) onComplete(res *paychFundsRes) { + for _, r := range m.reqs { + if r.isActive() { + r.onComplete(res) + } + } +} + +// sum is the sum of the amounts in all requests in the merge +func (m *mergedFundsReq) sum() big.Int { + sum := big.NewInt(0) + for _, r := range m.reqs { + if r.isActive() { + sum = big.Add(sum, r.amt) + + } + } + return sum +} + +// getPaych ensures that a channel exists between the from and to addresses, +// and adds the given amount of funds. +// If the channel does not exist a create channel message is sent and the +// message CID is returned. +// If the channel does exist an add funds message is sent and both the channel +// address and message CID are returned. +// If there is an in progress operation (create channel / add funds), getPaych +// blocks until the previous operation completes, then returns both the channel +// address and the CID of the new add funds message. +// If an operation returns an error, subsequent waiting operations will still +// be attempted. +func (ca *channelAccessor) getPaych(ctx context.Context, amt big.Int) (address.Address, cid.Cid, error) { + // Add the request to add funds to a queue and wait for the result + freq := newFundsReq(ctx, amt) + ca.enqueue(ctx, freq) + select { + case res := <-freq.promise: + return res.channel, res.mcid, res.err + case <-ctx.Done(): + freq.cancel() + return address.Undef, cid.Undef, ctx.Err() + } +} + +// Queue up an add funds operation +func (ca *channelAccessor) enqueue(ctx context.Context, task *fundsReq) { + ca.lk.Lock() + defer ca.lk.Unlock() + + ca.fundsReqQueue = append(ca.fundsReqQueue, task) + go ca.processQueue(ctx, "") // nolint: errcheck +} + +// Run the operations in the queue +func (ca *channelAccessor) processQueue(ctx context.Context, channelID string) (*apitypes.ChannelAvailableFunds, error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + // Remove cancelled requests + ca.filterQueue() + + // If there's nothing in the queue, bail out + if len(ca.fundsReqQueue) == 0 { + return ca.currentAvailableFunds(ctx, channelID, big.NewInt(0)) + } + + // Merge all pending requests into one. + // For example if there are pending requests for 3, 2, 4 then + // amt = 3 + 2 + 4 = 9 + merged := newMergedFundsReq(ca.fundsReqQueue) + amt := merged.sum() + if amt.IsZero() { + // Note: The amount can be zero if requests are cancelled as we're + // building the mergedFundsReq + return ca.currentAvailableFunds(ctx, channelID, amt) + } + + res := ca.processTask(merged.ctx, amt) + + // If the task is waiting on an external event (eg something to appear on + // chain) it will return nil + if res == nil { + // Stop processing the fundsReqQueue and wait. When the event occurs it will + // call processQueue() again + return ca.currentAvailableFunds(ctx, channelID, amt) + } + + // Finished processing so clear the queue + ca.fundsReqQueue = nil + + // Call the task callback with its results + merged.onComplete(res) + + return ca.currentAvailableFunds(ctx, channelID, big.NewInt(0)) +} + +// filterQueue filters cancelled requests out of the queue +func (ca *channelAccessor) filterQueue() { + if len(ca.fundsReqQueue) == 0 { + return + } + + // Remove cancelled requests + i := 0 + for _, r := range ca.fundsReqQueue { + if r.isActive() { + ca.fundsReqQueue[i] = r + i++ + } + } + + // Allow GC of remaining slice elements + for rem := i; rem < len(ca.fundsReqQueue); rem++ { + ca.fundsReqQueue[i] = nil + } + + // Resize slice + ca.fundsReqQueue = ca.fundsReqQueue[:i] +} + +// queueSize is the size of the funds request queue (used by tests) +func (ca *channelAccessor) queueSize() int { + ca.lk.Lock() + defer ca.lk.Unlock() + + return len(ca.fundsReqQueue) +} + +// msgWaitComplete is called when the message for a previous task is confirmed +// or there is an error. +func (ca *channelAccessor) msgWaitComplete(ctx context.Context, mcid cid.Cid, err error) { + ca.lk.Lock() + defer ca.lk.Unlock() + + // Save the message result to the store + dserr := ca.store.SaveMessageResult(ctx, mcid, err) + if dserr != nil { + log.Errorf("saving message result: %s", dserr) + } + + // Inform listeners that the message has completed + ca.msgListeners.fireMsgComplete(mcid, err) + + // The queue may have been waiting for msg completion to proceed, so + // process the next queue item + if len(ca.fundsReqQueue) > 0 { + go ca.processQueue(ctx, "") // nolint: errcheck + } +} + +func (ca *channelAccessor) currentAvailableFunds(ctx context.Context, channelID string, queuedAmt big.Int) (*apitypes.ChannelAvailableFunds, error) { + if len(channelID) == 0 { + return nil, nil + } + + channelInfo, err := ca.store.ByChannelID(ctx, channelID) + if err != nil { + return nil, err + } + + // The channel may have a pending create or add funds message + waitSentinel := channelInfo.CreateMsg + if waitSentinel == nil { + waitSentinel = channelInfo.AddFundsMsg + } + + // Get the total amount redeemed by vouchers. + // This includes vouchers that have been submitted, and vouchers that are + // in the datastore but haven't yet been submitted. + totalRedeemed := big.NewInt(0) + if channelInfo.Channel != nil { + ch := *channelInfo.Channel + _, pchState, err := ca.sa.loadPaychActorState(ca.chctx, ch) + if err != nil { + return nil, err + } + + laneStates, err := ca.laneState(ctx, pchState, ch) + if err != nil { + return nil, err + } + + for _, ls := range laneStates { + r, err := ls.Redeemed() + if err != nil { + return nil, err + } + totalRedeemed = big.Add(totalRedeemed, r) + } + } + + return &apitypes.ChannelAvailableFunds{ + Channel: channelInfo.Channel, + From: channelInfo.from(), + To: channelInfo.to(), + ConfirmedAmt: channelInfo.Amount, + PendingAmt: channelInfo.PendingAmount, + PendingWaitSentinel: waitSentinel, + QueuedAmt: queuedAmt, + VoucherReedeemedAmt: totalRedeemed, + }, nil +} + +// processTask checks the state of the channel and takes appropriate action +// (see description of getPaych). +// Note that processTask may be called repeatedly in the same state, and should +// return nil if there is no state change to be made (eg when waiting for a +// message to be confirmed on chain) +func (ca *channelAccessor) processTask(ctx context.Context, amt big.Int) *paychFundsRes { + // Get the payment channel for the from/to addresses. + // Note: It's ok if we get ErrChannelNotTracked. It just means we need to + // create a channel. + channelInfo, err := ca.store.OutboundActiveByFromTo(ctx, ca.from, ca.to) + if err != nil && err != ErrChannelNotTracked { + return &paychFundsRes{err: err} + } + + // If a channel has not yet been created, create one. + if channelInfo == nil { + mcid, err := ca.createPaych(ctx, amt) + if err != nil { + return &paychFundsRes{err: err} + } + + return &paychFundsRes{mcid: mcid} + } + + // If the create channel message has been sent but the channel hasn't + // been created on chain yet + if channelInfo.CreateMsg != nil { + // Wait for the channel to be created before trying again + return nil + } + + // If an add funds message was sent to the chain but hasn't been confirmed + // on chain yet + if channelInfo.AddFundsMsg != nil { + // Wait for the add funds message to be confirmed before trying again + return nil + } + + // We need to add more funds, so send an add funds message to + // cover the amount for this request + mcid, err := ca.addFunds(ctx, channelInfo, amt) + if err != nil { + return &paychFundsRes{err: err} + } + return &paychFundsRes{channel: *channelInfo.Channel, mcid: *mcid} +} + +// createPaych sends a message to create the channel and returns the message cid +func (ca *channelAccessor) createPaych(ctx context.Context, amt big.Int) (cid.Cid, error) { + mb, err := ca.messageBuilder(ctx, ca.from) + if err != nil { + return cid.Undef, err + } + msg, err := mb.Create(ca.to, amt) + if err != nil { + return cid.Undef, err + } + + smsg, err := ca.api.MpoolPushMessage(ctx, msg, nil) + if err != nil { + return cid.Undef, xerrors.Errorf("initializing paych actor: %w", err) + } + mcid := smsg.Cid() + // Create a new channel in the store + ci, err := ca.store.CreateChannel(ctx, ca.from, ca.to, mcid, amt) + if err != nil { + log.Errorf("creating channel: %s", err) + return cid.Undef, err + } + + // Wait for the channel to be created on chain + go ca.waitForPaychCreateMsg(ctx, ci.ChannelID, mcid) + + return mcid, nil +} + +// waitForPaychCreateMsg waits for mcid to appear on chain and stores the robust address of the +// created payment channel +func (ca *channelAccessor) waitForPaychCreateMsg(ctx context.Context, channelID string, mcid cid.Cid) { + err := ca.waitPaychCreateMsg(ctx, channelID, mcid) + ca.msgWaitComplete(ctx, mcid, err) +} + +func (ca *channelAccessor) waitPaychCreateMsg(ctx context.Context, channelID string, mcid cid.Cid) error { + mwait, err := ca.api.StateWaitMsg(ca.chctx, mcid, constants.MessageConfidence) + if err != nil { + log.Errorf("wait msg: %w", err) + return err + } + // If channel creation failed + if mwait.Receipt.ExitCode != 0 { + ca.lk.Lock() + defer ca.lk.Unlock() + + // Channel creation failed, so remove the channel from the datastore + dserr := ca.store.RemoveChannel(ctx, channelID) + if dserr != nil { + log.Errorf("failed to remove channel %s: %s", channelID, dserr) + } + + err := xerrors.Errorf("payment channel creation failed (exit code %d)", mwait.Receipt.ExitCode) + log.Error(err) + return err + } + + // TODO: ActorUpgrade abstract over this. + // This "works" because it hasn't changed from v0 to v2, but we still + // need an abstraction here. + var decodedReturn init2.ExecReturn + err = decodedReturn.UnmarshalCBOR(bytes.NewReader(mwait.Receipt.Return)) + if err != nil { + log.Error(err) + return err + } + + ca.lk.Lock() + defer ca.lk.Unlock() + + // Store robust address of channel + ca.mutateChannelInfo(ctx, channelID, func(channelInfo *ChannelInfo) { + channelInfo.Channel = &decodedReturn.RobustAddress + channelInfo.Amount = channelInfo.PendingAmount + channelInfo.PendingAmount = big.NewInt(0) + channelInfo.CreateMsg = nil + }) + + return nil +} + +// addFunds sends a message to add funds to the channel and returns the message cid +func (ca *channelAccessor) addFunds(ctx context.Context, channelInfo *ChannelInfo, amt big.Int) (*cid.Cid, error) { + msg := &types.Message{ + To: *channelInfo.Channel, + From: channelInfo.Control, + Value: amt, + Method: 0, + } + + smsg, err := ca.api.MpoolPushMessage(ctx, msg, nil) + if err != nil { + return nil, err + } + mcid := smsg.Cid() + // Store the add funds message CID on the channel + ca.mutateChannelInfo(ctx, channelInfo.ChannelID, func(ci *ChannelInfo) { + ci.PendingAmount = amt + ci.AddFundsMsg = &mcid + }) + + // Store a reference from the message CID to the channel, so that we can + // look up the channel from the message CID + err = ca.store.SaveNewMessage(ctx, channelInfo.ChannelID, mcid) + if err != nil { + log.Errorf("saving add funds message CID %s: %s", mcid, err) + } + + go ca.waitForAddFundsMsg(ctx, channelInfo.ChannelID, mcid) + + return &mcid, nil +} + +// waitForAddFundsMsg waits for mcid to appear on chain and returns error, if any +func (ca *channelAccessor) waitForAddFundsMsg(ctx context.Context, channelID string, mcid cid.Cid) { + err := ca.waitAddFundsMsg(ctx, channelID, mcid) + ca.msgWaitComplete(ctx, mcid, err) +} + +func (ca *channelAccessor) waitAddFundsMsg(ctx context.Context, channelID string, mcid cid.Cid) error { + mwait, err := ca.api.StateWaitMsg(ca.chctx, mcid, constants.MessageConfidence) + if err != nil { + log.Error(err) + return err + } + + if mwait.Receipt.ExitCode != 0 { + err := xerrors.Errorf("voucher channel creation failed: adding funds (exit code %d)", mwait.Receipt.ExitCode) + log.Error(err) + + ca.lk.Lock() + defer ca.lk.Unlock() + + ca.mutateChannelInfo(ctx, channelID, func(channelInfo *ChannelInfo) { + channelInfo.PendingAmount = big.NewInt(0) + channelInfo.AddFundsMsg = nil + }) + + return err + } + + ca.lk.Lock() + defer ca.lk.Unlock() + + // Store updated amount + ca.mutateChannelInfo(ctx, channelID, func(channelInfo *ChannelInfo) { + channelInfo.Amount = big.Add(channelInfo.Amount, channelInfo.PendingAmount) + channelInfo.PendingAmount = big.NewInt(0) + channelInfo.AddFundsMsg = nil + }) + + return nil +} + +// Change the state of the channel in the store +func (ca *channelAccessor) mutateChannelInfo(ctx context.Context, channelID string, mutate func(*ChannelInfo)) { + channelInfo, err := ca.store.ByChannelID(ctx, channelID) + + // If there's an error reading or writing to the store just log an error. + // For now we're assuming it's unlikely to happen in practice. + // Later we may want to implement a transactional approach, whereby + // we record to the store that we're going to send a message, send + // the message, and then record that the message was sent. + if err != nil { + log.Errorf("Error reading channel info from store: %s", err) + return + } + + mutate(channelInfo) + + err = ca.store.putChannelInfo(ctx, channelInfo) + if err != nil { + log.Errorf("Error writing channel info to store: %s", err) + } +} + +// restartPending checks the datastore to see if there are any channels that +// have outstanding create / add funds messages, and if so, waits on the +// messages. +// Outstanding messages can occur if a create / add funds message was sent and +// then the system was shut down or crashed before the result was received. +func (pm *Manager) restartPending(ctx context.Context) error { + cis, err := pm.store.WithPendingAddFunds(ctx) + if err != nil { + return err + } + + group := errgroup.Group{} + for _, chanInfo := range cis { + ci := chanInfo + if ci.CreateMsg != nil { + group.Go(func() error { + ca, err := pm.accessorByFromTo(ci.Control, ci.Target) + if err != nil { + return xerrors.Errorf("error initializing payment channel manager %s -> %s: %s", ci.Control, ci.Target, err) + } + go ca.waitForPaychCreateMsg(ctx, ci.ChannelID, *ci.CreateMsg) + return nil + }) + } else if ci.AddFundsMsg != nil { + group.Go(func() error { + ca, err := pm.accessorByAddress(ctx, *ci.Channel) + if err != nil { + return xerrors.Errorf("error initializing payment channel manager %s: %s", ci.Channel, err) + } + go ca.waitForAddFundsMsg(ctx, ci.ChannelID, *ci.AddFundsMsg) + return nil + }) + } + } + + return group.Wait() +} + +// getPaychWaitReady waits for a the response to the message with the given cid +func (ca *channelAccessor) getPaychWaitReady(ctx context.Context, mcid cid.Cid) (address.Address, error) { + ca.lk.Lock() + + // First check if the message has completed + msgInfo, err := ca.store.GetMessage(ctx, mcid) + if err != nil { + ca.lk.Unlock() + + return address.Undef, err + } + + // If the create channel / add funds message failed, return an error + if len(msgInfo.Err) > 0 { + ca.lk.Unlock() + + return address.Undef, xerrors.New(msgInfo.Err) + } + + // If the message has completed successfully + if msgInfo.Received { + ca.lk.Unlock() + + // Get the channel address + ci, err := ca.store.ByMessageCid(ctx, mcid) + if err != nil { + return address.Undef, err + } + + if ci.Channel == nil { + panic(fmt.Sprintf("create / add funds message %s succeeded but channelInfo.Channel is nil", mcid)) + } + return *ci.Channel, nil + } + + // The message hasn't completed yet so wait for it to complete + promise := ca.msgPromise(ctx, mcid) + + // Unlock while waiting + ca.lk.Unlock() + + select { + case res := <-promise: + return res.channel, res.err + case <-ctx.Done(): + return address.Undef, ctx.Err() + } +} + +type onMsgRes struct { + channel address.Address + err error +} + +// msgPromise returns a channel that receives the result of the message with +// the given CID +func (ca *channelAccessor) msgPromise(ctx context.Context, mcid cid.Cid) chan onMsgRes { + promise := make(chan onMsgRes) + triggerUnsub := make(chan struct{}) + unsub := ca.msgListeners.onMsgComplete(mcid, func(err error) { + close(triggerUnsub) + + // Use a go-routine so as not to block the event handler loop + go func() { + res := onMsgRes{err: err} + if res.err == nil { + // Get the channel associated with the message cid + ci, err := ca.store.ByMessageCid(ctx, mcid) + if err != nil { + res.err = err + } else { + res.channel = *ci.Channel + } + } + + // Pass the result to the caller + select { + case promise <- res: + case <-ctx.Done(): + } + }() + }) + + // Unsubscribe when the message is received or the context is done + go func() { + select { + case <-ctx.Done(): + case <-triggerUnsub: + } + + unsub() + }() + + return promise +} + +func (ca *channelAccessor) availableFunds(ctx context.Context, channelID string) (*apitypes.ChannelAvailableFunds, error) { + return ca.processQueue(ctx, channelID) +} diff --git a/pkg/paychmgr/state.go b/pkg/paychmgr/state.go new file mode 100644 index 0000000000..e770595259 --- /dev/null +++ b/pkg/paychmgr/state.go @@ -0,0 +1,88 @@ +package paychmgr + +import ( + "context" + + "github.com/filecoin-project/venus/pkg/statemanger" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-address" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" +) + +type stateAccessor struct { + sm statemanger.IStateManager +} + +func (ca *stateAccessor) loadPaychActorState(ctx context.Context, ch address.Address) (*types.Actor, paych.State, error) { + return ca.sm.GetPaychState(ctx, ch, nil) +} + +func (ca *stateAccessor) loadStateChannelInfo(ctx context.Context, ch address.Address, dir uint64) (*ChannelInfo, error) { + _, st, err := ca.loadPaychActorState(ctx, ch) + if err != nil { + return nil, err + } + + // Load channel "From" account actor state + f, err := st.From() + if err != nil { + return nil, err + } + from, err := ca.sm.ResolveToKeyAddress(ctx, f, nil) + if err != nil { + return nil, err + } + t, err := st.To() + if err != nil { + return nil, err + } + to, err := ca.sm.ResolveToKeyAddress(ctx, t, nil) + if err != nil { + return nil, err + } + + nextLane, err := ca.nextLaneFromState(ctx, st) + if err != nil { + return nil, err + } + + ci := &ChannelInfo{ + Channel: &ch, + Direction: dir, + NextLane: nextLane, + } + + if dir == DirOutbound { + ci.Control = from + ci.Target = to + } else { + ci.Control = to + ci.Target = from + } + + return ci, nil +} + +func (ca *stateAccessor) nextLaneFromState(ctx context.Context, st paych.State) (uint64, error) { + laneCount, err := st.LaneCount() + if err != nil { + return 0, err + } + if laneCount == 0 { + return 0, nil + } + + maxID := uint64(0) + if err := st.ForEachLaneState(func(idx uint64, _ paych.LaneState) error { + if idx > maxID { + maxID = idx + } + return nil + }); err != nil { + return 0, err + } + + return maxID + 1, nil +} diff --git a/pkg/paychmgr/store.go b/pkg/paychmgr/store.go new file mode 100644 index 0000000000..67d941cbf6 --- /dev/null +++ b/pkg/paychmgr/store.go @@ -0,0 +1,502 @@ +package paychmgr + +import ( + "bytes" + "context" + "errors" + "fmt" + + "github.com/filecoin-project/venus/pkg/repo" + "golang.org/x/xerrors" + + "github.com/google/uuid" + + cborutil "github.com/filecoin-project/go-cbor-util" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + "github.com/ipfs/go-datastore/namespace" + dsq "github.com/ipfs/go-datastore/query" + + "github.com/filecoin-project/go-address" + fbig "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" +) + +var ErrChannelNotTracked = errors.New("channel not tracked") + +type Store struct { + ds datastore.Datastore +} + +// for test +func NewStore(ds repo.Datastore) *Store { + dsTmp := namespace.Wrap(ds, datastore.NewKey("/paych/")) + return &Store{ + ds: dsTmp, + } +} + +const ( + DirInbound = 1 + DirOutbound = 2 +) + +const ( + dsKeyChannelInfo = "ChannelInfo" + dsKeyMsgCid = "MsgCid" +) + +type VoucherInfo struct { + Voucher *paych.SignedVoucher + Proof []byte // ignored + Submitted bool +} + +// ChannelInfo keeps track of information about a channel +type ChannelInfo struct { + // ChannelID is a uuid set at channel creation + ChannelID string + // Channel address - may be nil if the channel hasn't been created yet + Channel *address.Address + // Control is the address of the local node + Control address.Address + // Target is the address of the remote node (on the other end of the channel) + Target address.Address + // Direction indicates if the channel is inbound (Control is the "to" address) + // or outbound (Control is the "from" address) + Direction uint64 + // Vouchers is a list of all vouchers sent on the channel + Vouchers []*VoucherInfo + // NextLane is the number of the next lane that should be used when the + // client requests a new lane (eg to create a voucher for a new deal) + NextLane uint64 + // Amount added to the channel. + // Note: This amount is only used by GetPaych to keep track of how much + // has locally been added to the channel. It should reflect the channel's + // Balance on chain as long as all operations occur on the same datastore. + Amount fbig.Int + // PendingAmount is the amount that we're awaiting confirmation of + PendingAmount fbig.Int + // CreateMsg is the CID of a pending create message (while waiting for confirmation) + CreateMsg *cid.Cid + // AddFundsMsg is the CID of a pending add funds message (while waiting for confirmation) + AddFundsMsg *cid.Cid + // Settling indicates whether the channel has entered into the settling state + Settling bool +} + +func (ci *ChannelInfo) from() address.Address { + if ci.Direction == DirOutbound { + return ci.Control + } + return ci.Target +} + +func (ci *ChannelInfo) to() address.Address { + if ci.Direction == DirOutbound { + return ci.Target + } + return ci.Control +} + +// infoForVoucher gets the VoucherInfo for the given voucher. +// returns nil if the channel doesn't have the voucher. +func (ci *ChannelInfo) infoForVoucher(sv *paych.SignedVoucher) (*VoucherInfo, error) { + for _, v := range ci.Vouchers { + eq, err := cborutil.Equals(sv, v.Voucher) + if err != nil { + return nil, err + } + if eq { + return v, nil + } + } + return nil, nil +} + +func (ci *ChannelInfo) hasVoucher(sv *paych.SignedVoucher) (bool, error) { + vi, err := ci.infoForVoucher(sv) + return vi != nil, err +} + +// markVoucherSubmitted marks the voucher, and any vouchers of lower nonce +// in the same lane, as being submitted. +// Note: This method doesn't write anything to the store. +func (ci *ChannelInfo) markVoucherSubmitted(sv *paych.SignedVoucher) error { + vi, err := ci.infoForVoucher(sv) + if err != nil { + return err + } + if vi == nil { + return xerrors.Errorf("cannot submit voucher that has not been added to channel") + } + + // Mark the voucher as submitted + vi.Submitted = true + + // Mark lower-nonce vouchers in the same lane as submitted (lower-nonce + // vouchers are superseded by the submitted voucher) + for _, vi := range ci.Vouchers { + if vi.Voucher.Lane == sv.Lane && vi.Voucher.Nonce < sv.Nonce { + vi.Submitted = true + } + } + + return nil +} + +// wasVoucherSubmitted returns true if the voucher has been submitted +func (ci *ChannelInfo) wasVoucherSubmitted(sv *paych.SignedVoucher) (bool, error) { + vi, err := ci.infoForVoucher(sv) + if err != nil { + return false, err + } + if vi == nil { + return false, xerrors.Errorf("cannot submit voucher that has not been added to channel") + } + return vi.Submitted, nil +} + +// TrackChannel stores a channel, returning an error if the channel was already +// being tracked +func (ps *Store) TrackChannel(ctx context.Context, ci *ChannelInfo) (*ChannelInfo, error) { + _, err := ps.ByAddress(ctx, *ci.Channel) + switch err { + default: + return nil, err + case nil: + return nil, fmt.Errorf("already tracking channel: %s", ci.Channel) + case ErrChannelNotTracked: + err = ps.putChannelInfo(ctx, ci) + if err != nil { + return nil, err + } + + return ps.ByAddress(ctx, *ci.Channel) + } +} + +// ListChannels returns the addresses of all channels that have been created +func (ps *Store) ListChannels(ctx context.Context) ([]address.Address, error) { + cis, err := ps.findChans(ctx, func(ci *ChannelInfo) bool { + return ci.Channel != nil + }, 0) + if err != nil { + return nil, err + } + + addrs := make([]address.Address, 0, len(cis)) + for _, ci := range cis { + addrs = append(addrs, *ci.Channel) + } + + return addrs, nil +} + +// findChan finds a single channel using the given filter. +// If there isn't a channel that matches the filter, returns ErrChannelNotTracked +func (ps *Store) findChan(ctx context.Context, filter func(ci *ChannelInfo) bool) (*ChannelInfo, error) { + cis, err := ps.findChans(ctx, filter, 1) + if err != nil { + return nil, err + } + + if len(cis) == 0 { + return nil, ErrChannelNotTracked + } + + return &cis[0], err +} + +// findChans loops over all channels, only including those that pass the filter. +// max is the maximum number of channels to return. Set to zero to return unlimited channels. +func (ps *Store) findChans(ctx context.Context, filter func(*ChannelInfo) bool, max int) ([]ChannelInfo, error) { + res, err := ps.ds.Query(ctx, dsq.Query{Prefix: dsKeyChannelInfo}) + if err != nil { + return nil, err + } + defer res.Close() //nolint:errcheck + + var stored ChannelInfo + var matches []ChannelInfo + + for { + res, ok := res.NextSync() + if !ok { + break + } + + if res.Error != nil { + return nil, err + } + + ci, err := unmarshallChannelInfo(&stored, res.Value) + if err != nil { + return nil, err + } + + if !filter(ci) { + continue + } + + matches = append(matches, *ci) + + // If we've reached the maximum number of matches, return. + // Note that if max is zero we return an unlimited number of matches + // because len(matches) will always be at least 1. + if len(matches) == max { + return matches, nil + } + } + + return matches, nil +} + +// AllocateLane allocates a new lane for the given channel +func (ps *Store) AllocateLane(ctx context.Context, ch address.Address) (uint64, error) { + ci, err := ps.ByAddress(ctx, ch) + if err != nil { + return 0, err + } + + out := ci.NextLane + ci.NextLane++ + + return out, ps.putChannelInfo(ctx, ci) +} + +// VouchersForPaych gets the vouchers for the given channel +func (ps *Store) VouchersForPaych(ctx context.Context, ch address.Address) ([]*VoucherInfo, error) { + ci, err := ps.ByAddress(ctx, ch) + if err != nil { + return nil, err + } + + return ci.Vouchers, nil +} + +func (ps *Store) MarkVoucherSubmitted(ctx context.Context, ci *ChannelInfo, sv *paych.SignedVoucher) error { + err := ci.markVoucherSubmitted(sv) + if err != nil { + return err + } + return ps.putChannelInfo(ctx, ci) +} + +// ByAddress gets the channel that matches the given address +func (ps *Store) ByAddress(ctx context.Context, addr address.Address) (*ChannelInfo, error) { + return ps.findChan(ctx, func(ci *ChannelInfo) bool { + return ci.Channel != nil && *ci.Channel == addr + }) +} + +// MsgInfo stores information about a create channel / add funds message +// that has been sent +type MsgInfo struct { + // ChannelID links the message to a channel + ChannelID string + // MsgCid is the CID of the message + MsgCid cid.Cid + // Received indicates whether a response has been received + Received bool + // Err is the error received in the response + Err string +} + +// The datastore key used to identify the message +func dskeyForMsg(mcid cid.Cid) datastore.Key { + return datastore.KeyWithNamespaces([]string{dsKeyMsgCid, mcid.String()}) +} + +// SaveNewMessage is called when a message is sent +func (ps *Store) SaveNewMessage(ctx context.Context, channelID string, mcid cid.Cid) error { + k := dskeyForMsg(mcid) + + b, err := cborutil.Dump(&MsgInfo{ChannelID: channelID, MsgCid: mcid}) + if err != nil { + return err + } + + return ps.ds.Put(ctx, k, b) +} + +// SaveMessageResult is called when the result of a message is received +func (ps *Store) SaveMessageResult(ctx context.Context, mcid cid.Cid, msgErr error) error { + minfo, err := ps.GetMessage(ctx, mcid) + if err != nil { + return err + } + + k := dskeyForMsg(mcid) + minfo.Received = true + if msgErr != nil { + minfo.Err = msgErr.Error() + } + + b, err := cborutil.Dump(minfo) + if err != nil { + return err + } + + return ps.ds.Put(ctx, k, b) +} + +// ByMessageCid gets the channel associated with a message +func (ps *Store) ByMessageCid(ctx context.Context, mcid cid.Cid) (*ChannelInfo, error) { + minfo, err := ps.GetMessage(ctx, mcid) + if err != nil { + return nil, err + } + + ci, err := ps.findChan(ctx, func(ci *ChannelInfo) bool { + return ci.ChannelID == minfo.ChannelID + }) + if err != nil { + return nil, err + } + + return ci, err +} + +// GetMessage gets the message info for a given message CID +func (ps *Store) GetMessage(ctx context.Context, mcid cid.Cid) (*MsgInfo, error) { + k := dskeyForMsg(mcid) + + val, err := ps.ds.Get(ctx, k) + if err != nil { + return nil, err + } + + var minfo MsgInfo + if err := minfo.UnmarshalCBOR(bytes.NewReader(val)); err != nil { + return nil, err + } + + return &minfo, nil +} + +// OutboundActiveByFromTo looks for outbound channels that have not been +// settled, with the given from / to addresses +func (ps *Store) OutboundActiveByFromTo(ctx context.Context, from address.Address, to address.Address) (*ChannelInfo, error) { + return ps.findChan(ctx, func(ci *ChannelInfo) bool { + if ci.Direction != DirOutbound { + return false + } + if ci.Settling { + return false + } + return ci.Control == from && ci.Target == to + }) +} + +// WithPendingAddFunds is used on startup to find channels for which a +// create channel or add funds message has been sent, but lotus shut down +// before the response was received. +func (ps *Store) WithPendingAddFunds(ctx context.Context) ([]ChannelInfo, error) { + return ps.findChans(ctx, func(ci *ChannelInfo) bool { + if ci.Direction != DirOutbound { + return false + } + return ci.CreateMsg != nil || ci.AddFundsMsg != nil + }, 0) +} + +// ByChannelID gets channel info by channel ID +func (ps *Store) ByChannelID(ctx context.Context, channelID string) (*ChannelInfo, error) { + var stored ChannelInfo + + res, err := ps.ds.Get(ctx, dskeyForChannel(channelID)) + if err != nil { + if err == datastore.ErrNotFound { + return nil, ErrChannelNotTracked + } + return nil, err + } + + return unmarshallChannelInfo(&stored, res) +} + +// CreateChannel creates an outbound channel for the given from / to +func (ps *Store) CreateChannel(ctx context.Context, from address.Address, to address.Address, createMsgCid cid.Cid, amt fbig.Int) (*ChannelInfo, error) { + ci := &ChannelInfo{ + Direction: DirOutbound, + NextLane: 0, + Control: from, + Target: to, + CreateMsg: &createMsgCid, + PendingAmount: amt, + } + + // Save the new channel + err := ps.putChannelInfo(ctx, ci) + if err != nil { + return nil, err + } + + // Save a reference to the create message + err = ps.SaveNewMessage(ctx, ci.ChannelID, createMsgCid) + if err != nil { + return nil, err + } + + return ci, err +} + +// RemoveChannel removes the channel with the given channel ID +func (ps *Store) RemoveChannel(ctx context.Context, channelID string) error { + return ps.ds.Delete(ctx, dskeyForChannel(channelID)) +} + +// The datastore key used to identify the channel info +func dskeyForChannel(channelID string) datastore.Key { + return datastore.KeyWithNamespaces([]string{dsKeyChannelInfo, channelID}) +} + +// putChannelInfo stores the channel info in the datastore +func (ps *Store) putChannelInfo(ctx context.Context, ci *ChannelInfo) error { + if len(ci.ChannelID) == 0 { + ci.ChannelID = uuid.New().String() + } + k := dskeyForChannel(ci.ChannelID) + + b, err := marshallChannelInfo(ci) + if err != nil { + return err + } + + return ps.ds.Put(ctx, k, b) +} + +// TODO: This is a hack to get around not being able to CBOR marshall a nil +// address.Address. It's been fixed in address.Address but we need to wait +// for the change to propagate to specs-actors before we can remove this hack. +var emptyAddr address.Address + +func init() { + addr, err := address.NewActorAddress([]byte("empty")) + if err != nil { + panic(err) + } + emptyAddr = addr +} + +func marshallChannelInfo(ci *ChannelInfo) ([]byte, error) { + // See note above about CBOR marshalling address.Address + if ci.Channel == nil { + ci.Channel = &emptyAddr + } + return cborutil.Dump(ci) +} + +func unmarshallChannelInfo(stored *ChannelInfo, value []byte) (*ChannelInfo, error) { + if err := stored.UnmarshalCBOR(bytes.NewReader(value)); err != nil { + return nil, err + } + + // See note above about CBOR marshalling address.Address + if stored.Channel != nil && *stored.Channel == emptyAddr { + stored.Channel = nil + } + + return stored, nil +} diff --git a/pkg/paychmgr/store_test.go b/pkg/paychmgr/store_test.go new file mode 100644 index 0000000000..1ab640be34 --- /dev/null +++ b/pkg/paychmgr/store_test.go @@ -0,0 +1,89 @@ +package paychmgr + +import ( + "context" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "testing" + + "github.com/filecoin-project/go-address" + + tutils "github.com/filecoin-project/specs-actors/support/testing" + ds "github.com/ipfs/go-datastore" + ds_sync "github.com/ipfs/go-datastore/sync" + "github.com/stretchr/testify/require" +) + +func TestStore(t *testing.T) { + tf.UnitTest(t) + store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore())) + ctx := context.Background() + addrs, err := store.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, addrs, 0) + + ch := tutils.NewIDAddr(t, 100) + ci := &ChannelInfo{ + Channel: &ch, + Control: tutils.NewIDAddr(t, 101), + Target: tutils.NewIDAddr(t, 102), + + Direction: DirOutbound, + Vouchers: []*VoucherInfo{{Voucher: nil, Proof: []byte{}}}, + } + + ch2 := tutils.NewIDAddr(t, 200) + ci2 := &ChannelInfo{ + Channel: &ch2, + Control: tutils.NewIDAddr(t, 201), + Target: tutils.NewIDAddr(t, 202), + + Direction: DirOutbound, + Vouchers: []*VoucherInfo{{Voucher: nil, Proof: []byte{}}}, + } + + // Track the channel + _, err = store.TrackChannel(ctx, ci) + require.NoError(t, err) + + // Tracking same channel again should error + _, err = store.TrackChannel(ctx, ci) + require.Error(t, err) + + // Track another channel + _, err = store.TrackChannel(ctx, ci2) + require.NoError(t, err) + + // List channels should include all channels + addrs, err = store.ListChannels(ctx) + require.NoError(t, err) + require.Len(t, addrs, 2) + t0100, err := address.NewIDAddress(100) + require.NoError(t, err) + t0200, err := address.NewIDAddress(200) + require.NoError(t, err) + require.Contains(t, addrs, t0100) + require.Contains(t, addrs, t0200) + + // Request vouchers for channel + vouchers, err := store.VouchersForPaych(ctx, *ci.Channel) + require.NoError(t, err) + require.Len(t, vouchers, 1) + + // Requesting voucher for non-existent channel should error + _, err = store.VouchersForPaych(ctx, tutils.NewIDAddr(t, 300)) + require.Equal(t, err, ErrChannelNotTracked) + + // Allocate lane for channel + lane, err := store.AllocateLane(ctx, *ci.Channel) + require.NoError(t, err) + require.Equal(t, lane, uint64(0)) + + // Allocate next lane for channel + lane, err = store.AllocateLane(ctx, *ci.Channel) + require.NoError(t, err) + require.Equal(t, lane, uint64(1)) + + // Allocate next lane for non-existent channel should error + _, err = store.AllocateLane(ctx, tutils.NewIDAddr(t, 300)) + require.Equal(t, err, ErrChannelNotTracked) +} diff --git a/pkg/paychmgr/util.go b/pkg/paychmgr/util.go new file mode 100644 index 0000000000..7b0175c7d4 --- /dev/null +++ b/pkg/paychmgr/util.go @@ -0,0 +1,36 @@ +package paychmgr + +import ( + "context" + + "github.com/filecoin-project/go-address" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" +) + +type BestSpendableAPI interface { + PaychVoucherList(context.Context, address.Address) ([]*paych.SignedVoucher, error) + PaychVoucherCheckSpendable(context.Context, address.Address, *paych.SignedVoucher, []byte, []byte) (bool, error) +} + +//BestSpendableByLane return spendable voucher in channel address +func BestSpendableByLane(ctx context.Context, api BestSpendableAPI, ch address.Address) (map[uint64]*paych.SignedVoucher, error) { + vouchers, err := api.PaychVoucherList(ctx, ch) + if err != nil { + return nil, err + } + + bestByLane := make(map[uint64]*paych.SignedVoucher) + for _, voucher := range vouchers { + spendable, err := api.PaychVoucherCheckSpendable(ctx, ch, voucher, nil, nil) + if err != nil { + return nil, err + } + if spendable { + if bestByLane[voucher.Lane] == nil || voucher.Amount.GreaterThan(bestByLane[voucher.Lane].Amount) { + bestByLane[voucher.Lane] = voucher + } + } + } + return bestByLane, nil +} diff --git a/pkg/repo/fskeystore/fskeystore.go b/pkg/repo/fskeystore/fskeystore.go new file mode 100644 index 0000000000..fcc01c54d3 --- /dev/null +++ b/pkg/repo/fskeystore/fskeystore.go @@ -0,0 +1,164 @@ +package fskeystore + +import ( + "io/ioutil" + "os" + "path/filepath" + "strings" + + logging "github.com/ipfs/go-log/v2" + "golang.org/x/xerrors" +) + +var log = logging.Logger("fskeystore") + +// ErrNoSuchKey is returned if a key of the given name is not found in the store +var ErrNoSuchKey = xerrors.Errorf("no key by the given name was found") + +// ErrKeyExists is returned when writing a key would overwrite an existing key +var ErrKeyExists = xerrors.Errorf("key by that name already exists, refusing to overwrite") + +// ErrKeyFmt is returned when the key's format is invalid +var ErrKeyFmt = xerrors.Errorf("key has invalid format") + +// FSKeystore is a keystore backed by files in a given directory stored on disk. +type FSKeystore struct { + dir string +} + +// NewFSKeystore returns a new filesystem keystore at directory `dir` +func NewFSKeystore(dir string) (*FSKeystore, error) { + _, err := os.Stat(dir) + if err != nil { + if !os.IsNotExist(err) { + return nil, err + } + if err := os.Mkdir(dir, 0700); err != nil { + return nil, err + } + } + + return &FSKeystore{dir}, nil +} + +// Has returns whether or not a key exists in the Keystore +func (ks *FSKeystore) Has(name string) (bool, error) { + kp := filepath.Join(ks.dir, name) + + _, err := os.Stat(kp) + + if os.IsNotExist(err) { + return false, nil + } + + if err != nil { + return false, err + } + + if err := validateName(name); err != nil { + return false, err + } + + return true, nil +} + +// Put stores a key in the Keystore, if a key with the same name already exists, returns ErrKeyExists +func (ks *FSKeystore) Put(name string, data []byte) error { + if err := validateName(name); err != nil { + return err + } + + kp := filepath.Join(ks.dir, name) + + _, err := os.Stat(kp) + if err == nil { + return ErrKeyExists + } else if !os.IsNotExist(err) { + return err + } + + fi, err := os.Create(kp) + if err != nil { + return err + } + defer func() { + _ = fi.Close() + }() + + _, err = fi.Write(data) + + return err +} + +// Get retrieves a key from the Keystore if it exists, and returns ErrNoSuchKey +// otherwise. +func (ks *FSKeystore) Get(name string) ([]byte, error) { + if err := validateName(name); err != nil { + return nil, err + } + + kp := filepath.Join(ks.dir, name) + + data, err := ioutil.ReadFile(kp) + if err != nil { + if os.IsNotExist(err) { + return nil, ErrNoSuchKey + } + return nil, err + } + + return data, nil +} + +// Delete removes a key from the Keystore +func (ks *FSKeystore) Delete(name string) error { + if err := validateName(name); err != nil { + return err + } + + kp := filepath.Join(ks.dir, name) + + return os.Remove(kp) +} + +// List returns a list of key identifiers +func (ks *FSKeystore) List() ([]string, error) { + dir, err := os.Open(ks.dir) + if err != nil { + return nil, err + } + + dirs, err := dir.Readdirnames(0) + if err != nil { + return nil, err + } + + list := make([]string, 0, len(dirs)) + + for _, name := range dirs { + err := validateName(name) + if err == nil { + list = append(list, name) + } else { + log.Warnf("Ignoring the invalid keyfile: %s", name) + } + } + + return list, nil +} + +func validateName(name string) error { + if name == "" { + return xerrors.Errorf("key names must be at least one character: %v", ErrKeyFmt) + } + + if strings.Contains(name, "/") { + return xerrors.Errorf("key names may not contain slashes: %v", ErrKeyFmt) + } + + if strings.HasPrefix(name, ".") { + return xerrors.Errorf("key names may not begin with a period: %v", ErrKeyFmt) + } + + return nil +} diff --git a/pkg/repo/fskeystore/fskeystore_test.go b/pkg/repo/fskeystore/fskeystore_test.go new file mode 100644 index 0000000000..ff705f57fb --- /dev/null +++ b/pkg/repo/fskeystore/fskeystore_test.go @@ -0,0 +1,285 @@ +package fskeystore + +import ( + "bytes" + "fmt" + "io/ioutil" + "math/rand" + "os" + "path/filepath" + "sort" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/libp2p/go-libp2p-core/crypto" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func assertDirContents(dir string, exp []string) error { + finfos, err := ioutil.ReadDir(dir) + if err != nil { + return err + } + + if len(finfos) != len(exp) { + return fmt.Errorf("expected %d directory entries", len(exp)) + } + + var names []string + for _, fi := range finfos { + names = append(names, fi.Name()) + } + + sort.Strings(names) + sort.Strings(exp) + if len(names) != len(exp) { + return fmt.Errorf("directory had wrong number of entries in it") + } + + for i, v := range names { + if v != exp[i] { + return fmt.Errorf("had wrong entry in directory") + } + } + return nil +} + +func TestKeystoreBasics(t *testing.T) { + tf.UnitTest(t) + tdir, err := ioutil.TempDir("", "keystore-test") + if err != nil { + t.Fatal(err) + } + + ks, err := NewFSKeystore(tdir) + if err != nil { + t.Fatal(err) + } + + l, err := ks.List() + if err != nil { + t.Fatal(err) + } + + if len(l) != 0 { + t.Fatal("expected no keys") + } + + k1 := privKeyOrFatal(t) + k2 := privKeyOrFatal(t) + k3 := privKeyOrFatal(t) + k4 := privKeyOrFatal(t) + + err = ks.Put("foo", k1) + if err != nil { + t.Fatal(err) + } + + err = ks.Put("bar", k2) + if err != nil { + t.Fatal(err) + } + + l, err = ks.List() + if err != nil { + t.Fatal(err) + } + + sort.Strings(l) + if l[0] != "bar" || l[1] != "foo" { + t.Fatal("wrong entries listed") + } + + if err := assertDirContents(tdir, []string{"foo", "bar"}); err != nil { + t.Fatal(err) + } + + err = ks.Put("foo", k3) + if err == nil { + t.Fatal("should not be able to overwrite key") + } + + if err := assertDirContents(tdir, []string{"foo", "bar"}); err != nil { + t.Fatal(err) + } + + exist, err := ks.Has("foo") + if !exist { + t.Fatal("should know it has a key named foo") + } + if err != nil { + t.Fatal(err) + } + + exist, err = ks.Has("nonexistingkey") + if exist { + t.Fatal("should know it doesn't have a key named nonexistingkey") + } + if err != nil { + t.Fatal(err) + } + + if err := ks.Delete("bar"); err != nil { + t.Fatal(err) + } + + if err := assertDirContents(tdir, []string{"foo"}); err != nil { + t.Fatal(err) + } + + if err := ks.Put("beep", k3); err != nil { + t.Fatal(err) + } + + if err := ks.Put("boop", k4); err != nil { + t.Fatal(err) + } + + if err := assertDirContents(tdir, []string{"foo", "beep", "boop"}); err != nil { + t.Fatal(err) + } + + if err := assertGetKey(ks, "foo", k1); err != nil { + t.Fatal(err) + } + + if err := assertGetKey(ks, "beep", k3); err != nil { + t.Fatal(err) + } + + if err := assertGetKey(ks, "boop", k4); err != nil { + t.Fatal(err) + } + + if err := ks.Put("..///foo/", k1); err == nil { + t.Fatal("shouldnt be able to put a poorly named key") + } + + if err := ks.Put("", k1); err == nil { + t.Fatal("shouldnt be able to put a key with no name") + } + + if err := ks.Put(".foo", k1); err == nil { + t.Fatal("shouldnt be able to put a key with a 'hidden' name") + } +} + +func TestInvalidKeyFiles(t *testing.T) { + tf.UnitTest(t) + + tdir, err := ioutil.TempDir("", "keystore-test") + + if err != nil { + t.Fatal(err) + } + defer assert.NoError(t, os.RemoveAll(tdir)) + + ks, err := NewFSKeystore(tdir) + if err != nil { + t.Fatal(err) + } + + bytes := privKeyOrFatal(t) + + err = ioutil.WriteFile(filepath.Join(ks.dir, "valid"), bytes, 0644) + if err != nil { + t.Fatal(err) + } + + err = ioutil.WriteFile(filepath.Join(ks.dir, ".invalid"), bytes, 0644) + if err != nil { + t.Fatal(err) + } + + l, err := ks.List() + if err != nil { + t.Fatal(err) + } + + sort.Strings(l) + if len(l) != 1 { + t.Fatal("wrong entry count") + } + + if l[0] != "valid" { + t.Fatal("wrong entries listed") + } + + exist, err := ks.Has("valid") + if err != nil { + t.Fatal(err) + } + if !exist { + t.Fatal("should know it has a key named valid") + } + + if _, err = ks.Has(".invalid"); err == nil { + t.Fatal("shouldnt be able to put a key with a 'hidden' name") + } +} + +func TestNonExistingKey(t *testing.T) { + tf.UnitTest(t) + + tdir, err := ioutil.TempDir("", "keystore-test") + if err != nil { + t.Fatal(err) + } + + ks, err := NewFSKeystore(tdir) + if err != nil { + t.Fatal(err) + } + + k, err := ks.Get("does-it-exist") + if err != ErrNoSuchKey { + t.Fatalf("expected: %s, got %s", ErrNoSuchKey, err) + } + if k != nil { + t.Fatalf("Get on nonexistant key should give nil") + } +} + +func TestMakeKeystoreNoDir(t *testing.T) { + tf.UnitTest(t) + + _, err := NewFSKeystore("/this/is/not/a/real/dir") + if err == nil { + t.Fatal("shouldnt be able to make a keystore in a nonexistant directory") + } +} + +type rr struct{} + +func (rr rr) Read(b []byte) (int, error) { + return rand.Read(b) +} + +func privKeyOrFatal(t *testing.T) []byte { + priv, _, err := crypto.GenerateEd25519Key(rr{}) + if err != nil { + t.Fatal(err) + } + + kbytes, err := crypto.MarshalPrivateKey(priv) + if err != nil { + t.Fatal(err) + } + + return kbytes +} + +func assertGetKey(ks Keystore, name string, exp []byte) error { + outK, err := ks.Get(name) + if err != nil { + return err + } + + if !bytes.Equal(outK, exp) { + return fmt.Errorf("key we got out didnt match expectation") + } + + return nil +} diff --git a/pkg/repo/fskeystore/keystore.go b/pkg/repo/fskeystore/keystore.go new file mode 100644 index 0000000000..0404bacbc1 --- /dev/null +++ b/pkg/repo/fskeystore/keystore.go @@ -0,0 +1,16 @@ +package fskeystore + +// Keystore provides a key management interface +type Keystore interface { + // Has returns whether or not a key exist in the Keystore + Has(string) (bool, error) + // Put stores a key in the Keystore, if a key with the same name already exists, returns ErrKeyExists + Put(string, []byte) error + // Get retrieves a key from the Keystore if it exists, and returns ErrNoSuchKey + // otherwise. + Get(string) ([]byte, error) + // Delete removes a key from the Keystore + Delete(string) error + // List returns a list of key identifier + List() ([]string, error) +} diff --git a/pkg/repo/fskeystore/memkeystore.go b/pkg/repo/fskeystore/memkeystore.go new file mode 100644 index 0000000000..ca342fce50 --- /dev/null +++ b/pkg/repo/fskeystore/memkeystore.go @@ -0,0 +1,81 @@ +package fskeystore + +type keyMap map[string][]byte + +// MemKeystore is a keystore backed by an in-memory map +type MemKeystore struct { + values keyMap +} + +// NewMemKeystore returns a new map-based keystore +func NewMemKeystore() *MemKeystore { + return &MemKeystore{ + values: keyMap{}, + } +} + +// Has returns whether or not a key exists in the keystore map +func (mk *MemKeystore) Has(k string) (bool, error) { + if err := validateName(k); err != nil { + return false, err + } + _, found := mk.values[k] + return found, nil +} + +// Put stores a key in the map, if a key with the same name already exists, +// returns ErrKeyExists +func (mk *MemKeystore) Put(k string, b []byte) error { + if err := validateName(k); err != nil { + return err + } + + _, found := mk.values[k] + if found { + return ErrKeyExists + } + + mk.values[k] = b + return nil +} + +// Get retrieves a key from the map if it exists, else it returns ErrNoSuchKey +func (mk *MemKeystore) Get(k string) ([]byte, error) { + if err := validateName(k); err != nil { + return nil, err + } + + v, found := mk.values[k] + if !found { + return nil, ErrNoSuchKey + } + + return v, nil +} + +// Delete removes a key from the map +func (mk *MemKeystore) Delete(k string) error { + if err := validateName(k); err != nil { + return err + } + if _, found := mk.values[k]; !found { + return ErrNoSuchKey + } + + delete(mk.values, k) + return nil +} + +// List returns a list of key identifiers in random order +func (mk *MemKeystore) List() ([]string, error) { + out := make([]string, 0, len(mk.values)) + for k := range mk.values { + err := validateName(k) + if err == nil { + out = append(out, k) + } else { + log.Warningf("ignoring the invalid keyfile: %s", k) + } + } + return out, nil +} diff --git a/pkg/repo/fskeystore/memkeystore_test.go b/pkg/repo/fskeystore/memkeystore_test.go new file mode 100644 index 0000000000..f3b989dd07 --- /dev/null +++ b/pkg/repo/fskeystore/memkeystore_test.go @@ -0,0 +1,103 @@ +package fskeystore + +import ( + "sort" + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestMemKeyStoreBasics(t *testing.T) { + tf.UnitTest(t) + + ks := NewMemKeystore() + + l, err := ks.List() + if err != nil { + t.Fatal(err) + } + + if len(l) != 0 { + t.Fatal("expected no keys") + } + + k1 := privKeyOrFatal(t) + k2 := privKeyOrFatal(t) + k3 := privKeyOrFatal(t) + k4 := privKeyOrFatal(t) + + err = ks.Put("foo", k1) + if err != nil { + t.Fatal(err) + } + + err = ks.Put("bar", k2) + if err != nil { + t.Fatal(err) + } + + l, err = ks.List() + if err != nil { + t.Fatal(err) + } + + sort.Strings(l) + if l[0] != "bar" || l[1] != "foo" { + t.Fatal("wrong entries listed") + } + + err = ks.Put("foo", k3) + if err == nil { + t.Fatal("should not be able to overwrite key") + } + + exist, err := ks.Has("foo") + if !exist { + t.Fatal("should know it has a key named foo") + } + if err != nil { + t.Fatal(err) + } + + exist, err = ks.Has("nonexistingkey") + if exist { + t.Fatal("should know it doesn't have a key named nonexistingkey") + } + if err != nil { + t.Fatal(err) + } + + if err := ks.Delete("bar"); err != nil { + t.Fatal(err) + } + if err := ks.Put("beep", k3); err != nil { + t.Fatal(err) + } + + if err := ks.Put("boop", k4); err != nil { + t.Fatal(err) + } + if err := assertGetKey(ks, "foo", k1); err != nil { + t.Fatal(err) + } + + if err := assertGetKey(ks, "beep", k3); err != nil { + t.Fatal(err) + } + + if err := assertGetKey(ks, "boop", k4); err != nil { + t.Fatal(err) + } + + if err := ks.Put("..///foo/", k1); err == nil { + t.Fatal("shouldnt be able to put a poorly named key") + } + + if err := ks.Put("", k1); err == nil { + t.Fatal("shouldnt be able to put a key with no name") + } + + if err := ks.Put(".foo", k1); err == nil { + t.Fatal("shouldnt be able to put a key with a 'hidden' name") + } +} diff --git a/pkg/repo/fskeystore/sync.go b/pkg/repo/fskeystore/sync.go new file mode 100644 index 0000000000..ccbbd53a59 --- /dev/null +++ b/pkg/repo/fskeystore/sync.go @@ -0,0 +1,59 @@ +package fskeystore + +import ( + "sync" +) + +// MutexKeystore contains a child keystore and a mutex. +// used for coarse sync +type MutexKeystore struct { + sync.RWMutex + + child Keystore +} + +// MutexWrap constructs a keystore with a coarse lock around +// the entire keystore, for every single operation +func MutexWrap(k Keystore) *MutexKeystore { + return &MutexKeystore{child: k} +} + +// Children implements Shim +func (mk *MutexKeystore) Children() []Keystore { + return []Keystore{mk.child} +} + +// Put implements Keystore.Put +func (mk *MutexKeystore) Put(k string, data []byte) error { + mk.Lock() + defer mk.Unlock() + return mk.child.Put(k, data) +} + +// Get implements Keystore.Get +func (mk *MutexKeystore) Get(k string) ([]byte, error) { + mk.RLock() + defer mk.RUnlock() + return mk.child.Get(k) +} + +// Has implements Keystore.Has +func (mk *MutexKeystore) Has(k string) (bool, error) { + mk.RLock() + defer mk.RUnlock() + return mk.child.Has(k) +} + +// Delete implements Keystore.Delete +func (mk *MutexKeystore) Delete(k string) error { + mk.Lock() + defer mk.Unlock() + return mk.child.Delete(k) +} + +// List implements Keystore.List +func (mk *MutexKeystore) List() ([]string, error) { + mk.RLock() + defer mk.RUnlock() + return mk.child.List() +} diff --git a/pkg/repo/fsrepo.go b/pkg/repo/fsrepo.go new file mode 100644 index 0000000000..d1759a6a19 --- /dev/null +++ b/pkg/repo/fsrepo.go @@ -0,0 +1,710 @@ +package repo + +import ( + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "strconv" + "strings" + "sync" + "time" + + "github.com/filecoin-project/venus/pkg/repo/fskeystore" + + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + bstore "github.com/ipfs/go-ipfs-blockstore" + + badgerds "github.com/ipfs/go-ds-badger2" + lockfile "github.com/ipfs/go-fs-lock" + logging "github.com/ipfs/go-log/v2" + "github.com/mitchellh/go-homedir" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/config" +) + +// Version is the version of repo schema that this code understands. +const LatestVersion uint = 6 + +const ( + // apiFile is the filename containing the filecoin node's api address. + apiToken = "token" + apiFile = "api" + configFilename = "config.json" + tempConfigFilename = ".config.json.temp" + lockFile = "repo.lock" + versionFilename = "version" + walletDatastorePrefix = "wallet" + chainDatastorePrefix = "chain" + metaDatastorePrefix = "metadata" + paychDatastorePrefix = "paych" + snapshotStorePrefix = "snapshots" + snapshotFilenamePrefix = "snapshot" + dataTransfer = "data-transfer" +) + +var log = logging.Logger("repo") + +// FSRepo is a repo implementation backed by a filesystem. +type FSRepo struct { + // Path to the repo root directory. + path string + version uint + + // lk protects the config file + lk sync.RWMutex + cfg *config.Config + + ds *blockstoreutil.BadgerBlockstore + keystore fskeystore.Keystore + walletDs Datastore + chainDs Datastore + metaDs Datastore + //marketDs Datastore + paychDs Datastore + // lockfile is the file system lock to prevent others from opening the same repo. + lockfile io.Closer +} + +var _ Repo = (*FSRepo)(nil) + +// InitFSRepo initializes a new repo at the target path with the provided configuration. +// The successful result creates a symlink at targetPath pointing to a sibling directory +// named with a timestamp and repo version number. +// The link path must be empty prior. If the computed actual directory exists, it must be empty. +func InitFSRepo(targetPath string, version uint, cfg *config.Config) error { + repoPath, err := homedir.Expand(targetPath) + if err != nil { + return err + } + + if repoPath == "" { // path contained no separator + repoPath = "./" + } + + exists, err := fileExists(repoPath) + if err != nil { + return errors.Wrapf(err, "error inspecting repo path %s", repoPath) + } else if exists { + return errors.Errorf("repo at %s, file exists", repoPath) + } + + // Create the actual directory and then the link to it. + if err = InitFSRepoDirect(repoPath, version, cfg); err != nil { + return err + } + + return nil +} + +// InitFSRepoDirect initializes a new repo at a target path, establishing a provided configuration. +// The target path must not exist, or must reference an empty, read/writable directory. +func InitFSRepoDirect(targetPath string, version uint, cfg *config.Config) error { + repoPath, err := homedir.Expand(targetPath) + if err != nil { + return err + } + + if err := ensureWritableDirectory(repoPath); err != nil { + return errors.Wrap(err, "no writable directory") + } + + empty, err := isEmptyDir(repoPath) + if err != nil { + return errors.Wrapf(err, "failed to list repo directory %s", repoPath) + } + if !empty { + return fmt.Errorf("refusing to initialize repo in non-empty directory %s", repoPath) + } + + if err := WriteVersion(repoPath, version); err != nil { + return errors.Wrap(err, "initializing repo version failed") + } + + if err := initConfig(repoPath, cfg); err != nil { + return errors.Wrap(err, "initializing config file failed") + } + if err := initDataTransfer(repoPath); err != nil { + return errors.Wrap(err, "initializing data-transfer directory failed") + } + return nil +} + +func Exists(repoPath string) (bool, error) { + _, err := os.Stat(filepath.Join(repoPath, walletDatastorePrefix)) + notExist := os.IsNotExist(err) + if notExist { + err = nil + + _, err = os.Stat(filepath.Join(repoPath, configFilename)) + notExist = os.IsNotExist(err) + if notExist { + err = nil + } + } + return !notExist, err +} + +// OpenFSRepo opens an initialized fsrepo, expecting a specific version. +// The provided path may be to a directory, or a symbolic link pointing at a directory, which +// will be resolved just once at open. +func OpenFSRepo(repoPath string, version uint) (*FSRepo, error) { + repoPath, err := homedir.Expand(repoPath) + if err != nil { + return nil, err + } + + hasConfig, err := hasConfig(repoPath) + if err != nil { + return nil, errors.Wrap(err, "failed to check for repo config") + } + + if !hasConfig { + return nil, errors.Errorf("no config found at %s", repoPath) + } + + info, err := os.Stat(repoPath) + if err != nil { + return nil, errors.Wrapf(err, "failed to stat repo link %s", repoPath) + } + + // Resolve path if it's a symlink. + var actualPath string + if info.IsDir() { + actualPath = repoPath + } else { + actualPath, err = os.Readlink(repoPath) + if err != nil { + return nil, errors.Wrapf(err, "failed to follow repo symlink %s", repoPath) + } + } + + r := &FSRepo{path: actualPath, version: version} + + r.lockfile, err = lockfile.Lock(r.path, lockFile) + if err != nil { + return nil, errors.Wrap(err, "failed to take repo lock") + } + + if err := r.loadFromDisk(); err != nil { + _ = r.lockfile.Close() + return nil, err + } + + return r, nil +} + +// MakeRepoDirName constructs a name for a concrete repo directory, which includes its +// version number and a timestamp. The name will begin with prefix and, if uniqueifier is +// non-zero, end with that (intended as an ordinal for finding a free name). +// E.g. ".filecoin-20190102-140425-012-1 +// This is exported for use by migrations. +func MakeRepoDirName(prefix string, ts time.Time, version uint, uniqueifier uint) string { + name := strings.Join([]string{ + prefix, + ts.Format("20060102-150405"), + fmt.Sprintf("v%03d", version), + }, "-") + if uniqueifier != 0 { + name = name + fmt.Sprintf("-%d", uniqueifier) + } + return name +} + +func (r *FSRepo) loadFromDisk() error { + localVersion, err := r.readVersion() + if err != nil { + return errors.Wrap(err, "failed to read version") + } + + if localVersion > r.version { + return fmt.Errorf("binary needs update to handle repo version, got %d expected %d. Update binary to latest release", localVersion, LatestVersion) + } + + if err := r.loadConfig(); err != nil { + return errors.Wrap(err, "failed to load config file") + } + + if err := r.openDatastore(); err != nil { + return errors.Wrap(err, "failed to open datastore") + } + + if err := r.openKeystore(); err != nil { + return errors.Wrap(err, "failed to open keystore") + } + + if err := r.openWalletDatastore(); err != nil { + return errors.Wrap(err, "failed to open wallet datastore") + } + + if err := r.openChainDatastore(); err != nil { + return errors.Wrap(err, "failed to open chain datastore") + } + + if err := r.openMetaDatastore(); err != nil { + return errors.Wrap(err, "failed to open metadata datastore") + } + + if err := r.openPaychDataStore(); err != nil { + return errors.Wrap(err, "failed to open paych datastore") + } + + /*if err := r.openMarketDataStore(); err != nil { + return errors.Wrap(err, "failed to open market datastore") + }*/ + return nil +} + +// configModule returns the configuration object. +func (r *FSRepo) Config() *config.Config { + r.lk.RLock() + defer r.lk.RUnlock() + + return r.cfg +} + +// ReplaceConfig replaces the current config with the newly passed in one. +func (r *FSRepo) ReplaceConfig(cfg *config.Config) error { + if err := r.SnapshotConfig(r.Config()); err != nil { + log.Warnf("failed to create snapshot: %s", err.Error()) + } + r.lk.Lock() + defer r.lk.Unlock() + + r.cfg = cfg + tmp := filepath.Join(r.path, tempConfigFilename) + err := os.RemoveAll(tmp) + if err != nil { + return err + } + err = r.cfg.WriteFile(tmp) + if err != nil { + return err + } + return os.Rename(tmp, filepath.Join(r.path, configFilename)) +} + +// SnapshotConfig stores a copy `cfg` in /snapshots/ appending the +// time of snapshot to the filename. +func (r *FSRepo) SnapshotConfig(cfg *config.Config) error { + snapshotFile := filepath.Join(r.path, snapshotStorePrefix, genSnapshotFileName()) + exists, err := fileExists(snapshotFile) + if err != nil { + return errors.Wrap(err, "error checking snapshot file") + } else if exists { + // this should never happen + return fmt.Errorf("file already exists: %s", snapshotFile) + } + return cfg.WriteFile(snapshotFile) +} + +// Datastore returns the datastore. +func (r *FSRepo) Datastore() blockstoreutil.Blockstore { + return r.ds +} + +// WalletDatastore returns the wallet datastore. +func (r *FSRepo) WalletDatastore() Datastore { + return r.walletDs +} + +// ChainDatastore returns the chain datastore. +func (r *FSRepo) ChainDatastore() Datastore { + return r.chainDs +} + +func (r *FSRepo) MetaDatastore() Datastore { + return r.metaDs +} + +/*func (r *FSRepo) MarketDatastore() Datastore { + return r.marketDs +}*/ + +func (r *FSRepo) PaychDatastore() Datastore { + return r.paychDs +} + +// Version returns the version of the repo +func (r *FSRepo) Version() uint { + return r.version +} + +// Keystore returns the keystore +func (r *FSRepo) Keystore() fskeystore.Keystore { + return r.keystore +} + +// Close closes the repo. +func (r *FSRepo) Close() error { + if err := r.ds.Close(); err != nil { + return errors.Wrap(err, "failed to close datastore") + } + + if err := r.walletDs.Close(); err != nil { + return errors.Wrap(err, "failed to close wallet datastore") + } + + if err := r.chainDs.Close(); err != nil { + return errors.Wrap(err, "failed to close chain datastore") + } + + if err := r.metaDs.Close(); err != nil { + return errors.Wrap(err, "failed to close meta datastore") + } + + if err := r.paychDs.Close(); err != nil { + return errors.Wrap(err, "failed to close paych datastore") + } + + /*if err := r.marketDs.Close(); err != nil { + return errors.Wrap(err, "failed to close market datastore") + }*/ + + if err := r.removeAPIFile(); err != nil { + return errors.Wrap(err, "error removing API file") + } + + return r.lockfile.Close() +} + +func (r *FSRepo) removeFile(path string) error { + if err := os.Remove(path); err != nil && !os.IsNotExist(err) { + return err + } + + return nil +} + +func (r *FSRepo) removeAPIFile() error { + return r.removeFile(filepath.Join(r.path, apiFile)) +} + +// Tests whether a repo directory contains the expected config file. +func hasConfig(p string) (bool, error) { + configPath := filepath.Join(p, configFilename) + + _, err := os.Lstat(configPath) + switch { + case err == nil: + return true, nil + case os.IsNotExist(err): + return false, nil + default: + return false, err + } +} + +func (r *FSRepo) loadConfig() error { + configFile := filepath.Join(r.path, configFilename) + + cfg, err := config.ReadFile(configFile) + if err != nil { + return errors.Wrapf(err, "failed to read config file at %q", configFile) + } + + r.cfg = cfg + return nil +} + +// readVersion reads the repo's version file (but does not change r.version). +func (r *FSRepo) readVersion() (uint, error) { + return ReadVersion(r.path) +} + +func (r *FSRepo) openDatastore() error { + switch r.cfg.Datastore.Type { + case "badgerds": + path := filepath.Join(r.path, r.cfg.Datastore.Path) + opts, err := blockstoreutil.BadgerBlockstoreOptions(path, false) + if err != nil { + return err + } + opts.Prefix = bstore.BlockPrefix.String() + ds, err := blockstoreutil.Open(opts) + if err != nil { + return err + } + r.ds = ds + default: + return fmt.Errorf("unknown datastore type in config: %s", r.cfg.Datastore.Type) + } + + return nil +} + +func (r *FSRepo) openKeystore() error { + ksp := filepath.Join(r.path, "keystore") + + ks, err := fskeystore.NewFSKeystore(ksp) + if err != nil { + return err + } + + r.keystore = ks + + return nil +} + +func (r *FSRepo) openChainDatastore() error { + ds, err := badgerds.NewDatastore(filepath.Join(r.path, chainDatastorePrefix), badgerOptions()) + if err != nil { + return err + } + + r.chainDs = ds + + return nil +} + +func (r *FSRepo) openMetaDatastore() error { + ds, err := badgerds.NewDatastore(filepath.Join(r.path, metaDatastorePrefix), badgerOptions()) + if err != nil { + return err + } + + r.metaDs = ds + + return nil +} +func (r *FSRepo) openPaychDataStore() error { + var err error + r.paychDs, err = badgerds.NewDatastore(filepath.Join(r.path, paychDatastorePrefix), badgerOptions()) + if err != nil { + return err + } + return nil +} + +/*func (r *FSRepo) openMarketDataStore() error { + var err error + r.marketDs, err = badgerds.NewDatastore(filepath.Join(r.path, marketDatastoreProfix), badgerOptions()) + if err != nil { + return err + } + return nil +}*/ +func (r *FSRepo) openWalletDatastore() error { + // TODO: read wallet datastore info from config, use that to open it up + ds, err := badgerds.NewDatastore(filepath.Join(r.path, walletDatastorePrefix), badgerOptions()) + if err != nil { + return err + } + + r.walletDs = ds + + return nil +} + +// WriteVersion writes the given version to the repo version file. +func WriteVersion(p string, version uint) error { + return ioutil.WriteFile(filepath.Join(p, versionFilename), []byte(strconv.Itoa(int(version))), 0644) +} + +// ReadVersion returns the unparsed (string) version +// from the version file in the specified repo. +func ReadVersion(repoPath string) (uint, error) { + file, err := ioutil.ReadFile(filepath.Join(repoPath, versionFilename)) + if err != nil { + return 0, err + } + verStr := strings.Trim(string(file), "\n") + version, err := strconv.ParseUint(verStr, 10, 32) + if err != nil { + return 0, err + } + return uint(version), nil +} + +func initConfig(p string, cfg *config.Config) error { + configFile := filepath.Join(p, configFilename) + exists, err := fileExists(configFile) + if err != nil { + return errors.Wrap(err, "error inspecting config file") + } else if exists { + return fmt.Errorf("config file already exists: %s", configFile) + } + + if err := cfg.WriteFile(configFile); err != nil { + return err + } + + // make the snapshot dir + snapshotDir := filepath.Join(p, snapshotStorePrefix) + return ensureWritableDirectory(snapshotDir) +} + +func initDataTransfer(p string) error { + dataTransferDir := filepath.Join(p, dataTransfer) + state, err := os.Stat(dataTransferDir) + if err == nil { + if state.IsDir() { + return nil + } + return errors.New("error must be a directory") + } + if !os.IsNotExist(err) { + return err + } + //create data-transfer state + return os.MkdirAll(dataTransferDir, 0777) +} + +func genSnapshotFileName() string { + return fmt.Sprintf("%s-%d.json", snapshotFilenamePrefix, time.Now().UTC().UnixNano()) +} + +// Ensures that path points to a read/writable directory, creating it if necessary. +func ensureWritableDirectory(path string) error { + // Attempt to create the requested directory, accepting that something might already be there. + err := os.Mkdir(path, 0775) + + if err == nil { + return nil // Skip the checks below, we just created it. + } else if !os.IsExist(err) { + return errors.Wrapf(err, "failed to create directory %s", path) + } + + // Inspect existing directory. + stat, err := os.Stat(path) + if err != nil { + return errors.Wrapf(err, "failed to stat path \"%s\"", path) + } + if !stat.IsDir() { + return errors.Errorf("%s is not a directory", path) + } + if (stat.Mode() & 0600) != 0600 { + return errors.Errorf("insufficient permissions for path %s, got %04o need %04o", path, stat.Mode(), 0600) + } + return nil +} + +// Tests whether the directory at path is empty +func isEmptyDir(path string) (bool, error) { + infos, err := ioutil.ReadDir(path) + if err != nil { + return false, err + } + return len(infos) == 0, nil +} + +func fileExists(file string) (bool, error) { + _, err := os.Stat(file) + if err == nil { + return true, nil + } + if os.IsNotExist(err) { + return false, nil + } + return false, err +} + +// SetAPIAddr writes the address to the API file. SetAPIAddr expects parameter +// `port` to be of the form `:`. +func (r *FSRepo) SetAPIAddr(maddr string) error { + f, err := os.Create(filepath.Join(r.path, apiFile)) + if err != nil { + return errors.Wrap(err, "could not create API file") + } + + defer f.Close() // nolint: errcheck + + _, err = f.WriteString(maddr) + if err != nil { + // If we encounter an error writing to the API file, + // delete the API file. The error encountered while + // deleting the API file will be returned (if one + // exists) instead of the write-error. + if err := r.removeAPIFile(); err != nil { + return errors.Wrap(err, "failed to remove API file") + } + + return errors.Wrap(err, "failed to write to API file") + } + + return nil +} + +// Path returns the path the fsrepo is at +func (r *FSRepo) Path() (string, error) { + return r.path, nil +} + +// JournalPath returns the path the journal is at. +func (r *FSRepo) JournalPath() string { + return fmt.Sprintf("%s/journal.json", r.path) +} + +// APIAddrFromRepoPath returns the api addr from the filecoin repo +func APIAddrFromRepoPath(repoPath string) (string, error) { + repoPath, err := homedir.Expand(repoPath) + if err != nil { + return "", errors.Wrap(err, fmt.Sprintf("can't resolve local repo path %s", repoPath)) + } + return apiAddrFromFile(repoPath) +} + +// APIAddrFromRepoPath returns the token from the filecoin repo +func APITokenFromRepoPath(repoPath string) (string, error) { + repoPath, err := homedir.Expand(repoPath) + if err != nil { + return "", errors.Wrap(err, fmt.Sprintf("can't resolve local repo path %s", repoPath)) + } + return apiTokenFromFile(repoPath) +} + +// APIAddrFromFile reads the address from the API file at the given path. +// A relevant comment from a similar function at go-ipfs/repo/fsrepo/fsrepo.go: +// This is a concurrent operation, meaning that any process may read this file. +// Modifying this file, therefore, should use "mv" to replace the whole file +// and avoid interleaved read/writes +func apiAddrFromFile(repoPath string) (string, error) { + jsonrpcFile := filepath.Join(repoPath, apiFile) + jsonrpcAPI, err := ioutil.ReadFile(jsonrpcFile) + if err != nil { + return "", errors.Wrap(err, "failed to read API file") + } + + return string(jsonrpcAPI), nil +} + +// apiTokenFromFile reads the token from the token file at the given path. +func apiTokenFromFile(repoPath string) (string, error) { + tokenFile := filepath.Join(repoPath, apiToken) + token, err := ioutil.ReadFile(tokenFile) + if err != nil { + return "", errors.Wrap(err, "failed to read API file") + } + + return strings.TrimSpace(string(token)), nil +} + +// APIAddr reads the FSRepo's api file and returns the api address +func (r *FSRepo) APIAddr() (string, error) { + return apiAddrFromFile(filepath.Clean(r.path)) +} + +func (r *FSRepo) SetAPIToken(token []byte) error { + return ioutil.WriteFile(filepath.Join(r.path, apiToken), token, 0600) +} + +func (r *FSRepo) APIToken() (string, error) { + tkBuff, err := ioutil.ReadFile(filepath.Join(r.path, apiToken)) + if err != nil { + return "", err + } + return strings.TrimSpace(string(tkBuff)), nil +} + +func badgerOptions() *badgerds.Options { + result := &badgerds.DefaultOptions + result.Truncate = true + result.MaxTableSize = 64 << 21 + return result +} + +func (r *FSRepo) Repo() Repo { + return r +} diff --git a/internal/pkg/repo/fsrepo_test.go b/pkg/repo/fsrepo_test.go similarity index 84% rename from internal/pkg/repo/fsrepo_test.go rename to pkg/repo/fsrepo_test.go index d3341a0114..fa50024001 100644 --- a/internal/pkg/repo/fsrepo_test.go +++ b/pkg/repo/fsrepo_test.go @@ -1,6 +1,7 @@ package repo import ( + "context" "fmt" "io/ioutil" "os" @@ -14,8 +15,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/config" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" ) func TestInitRepoDirect(t *testing.T) { @@ -96,24 +97,10 @@ func TestFSRepoOpen(t *testing.T) { assert.NoError(t, WriteVersion(repoPath, 99)) _, err = OpenFSRepo(repoPath, 1) - expected := fmt.Sprintf("binary needs update to handle repo version, got 99 expected %d. Update binary to latest release", Version) + expected := fmt.Sprintf("binary needs update to handle repo version, got 99 expected %d. Update binary to latest release", LatestVersion) assert.EqualError(t, err, expected) }) - t.Run("[fail] binary version newer than repo", func(t *testing.T) { - container, err := ioutil.TempDir("", "") - require.NoError(t, err) - defer RequireRemoveAll(t, container) - repoPath := path.Join(container, "repo") - - assert.NoError(t, InitFSRepo(repoPath, 1, config.NewDefaultConfig())) - // set wrong version - assert.NoError(t, WriteVersion(repoPath, 0)) - _, err = OpenFSRepo(repoPath, 1) - expected := fmt.Sprintf("out of date repo version, got 0 expected %d. Migrate with tools/migration/go-filecoin-migrate", Version) - - assert.EqualError(t, err, expected) - }) t.Run("[fail] version corrupt", func(t *testing.T) { container, err := ioutil.TempDir("", "") require.NoError(t, err) @@ -125,7 +112,7 @@ func TestFSRepoOpen(t *testing.T) { assert.NoError(t, ioutil.WriteFile(filepath.Join(repoPath, versionFilename), []byte("v.8"), 0644)) _, err = OpenFSRepo(repoPath, 1) - assert.EqualError(t, err, "failed to read version: corrupt version file: version is not an integer") + assert.EqualError(t, err, "failed to read version: strconv.ParseUint: parsing \"v.8\": invalid syntax") }) } @@ -137,7 +124,7 @@ func TestFSRepoRoundtrip(t *testing.T) { defer RequireRemoveAll(t, container) cfg := config.NewDefaultConfig() - cfg.API.Address = "foo" // testing that what we get back isnt just the default + cfg.API.APIAddress = "foo" // testing that what we get back isnt just the default repoPath := path.Join(container, "repo") assert.NoError(t, err, InitFSRepo(repoPath, 42, cfg)) @@ -146,13 +133,13 @@ func TestFSRepoRoundtrip(t *testing.T) { assert.NoError(t, err) assert.Equal(t, cfg, r.Config()) - assert.NoError(t, r.Datastore().Put(ds.NewKey("beep"), []byte("boop"))) + assert.NoError(t, r.ChainDatastore().Put(context.Background(), ds.NewKey("beep"), []byte("boop"))) assert.NoError(t, r.Close()) r2, err := OpenFSRepo(repoPath, 42) assert.NoError(t, err) - val, err := r2.Datastore().Get(ds.NewKey("beep")) + val, err := r2.ChainDatastore().Get(context.Background(), ds.NewKey("beep")) assert.NoError(t, err) assert.Equal(t, []byte("boop"), val) @@ -168,7 +155,7 @@ func TestFSRepoReplaceAndSnapshotConfig(t *testing.T) { repoPath := path.Join(container, "repo") cfg := config.NewDefaultConfig() - cfg.API.Address = "foo" + cfg.API.APIAddress = "foo" assert.NoError(t, err, InitFSRepo(repoPath, 42, cfg)) expSnpsht, err := ioutil.ReadFile(filepath.Join(repoPath, configFilename)) @@ -178,15 +165,15 @@ func TestFSRepoReplaceAndSnapshotConfig(t *testing.T) { assert.NoError(t, err) newCfg := config.NewDefaultConfig() - newCfg.API.Address = "bar" + newCfg.API.APIAddress = "bar" assert.NoError(t, r1.ReplaceConfig(newCfg)) - assert.Equal(t, "bar", r1.Config().API.Address) + assert.Equal(t, "bar", r1.Config().API.APIAddress) assert.NoError(t, r1.Close()) r2, err := OpenFSRepo(repoPath, 42) assert.NoError(t, err) - assert.Equal(t, "bar", r2.Config().API.Address) + assert.Equal(t, "bar", r2.Config().API.APIAddress) assert.NoError(t, r2.Close()) // assert that a single snapshot was created when replacing the config @@ -252,13 +239,13 @@ func TestRepoAPIFile(t *testing.T) { withFSRepo(t, func(r *FSRepo) { mustSetAPIAddr(t, r, "/ip4/127.0.0.1/tcp/1234") - addr := mustGetAPIAddr(t, r) - assert.Equal(t, "/ip4/127.0.0.1/tcp/1234", addr) + rpcAPI := mustGetAPIAddr(t, r) + assert.Equal(t, "/ip4/127.0.0.1/tcp/1234", rpcAPI) mustSetAPIAddr(t, r, "/ip4/127.0.0.1/tcp/4567") - addr = mustGetAPIAddr(t, r) - assert.Equal(t, "/ip4/127.0.0.1/tcp/4567", addr) + rpcAPI = mustGetAPIAddr(t, r) + assert.Equal(t, "/ip4/127.0.0.1/tcp/4567", rpcAPI) }) }) @@ -266,16 +253,13 @@ func TestRepoAPIFile(t *testing.T) { withFSRepo(t, func(r *FSRepo) { mustSetAPIAddr(t, r, "/ip4/127.0.0.1/tcp/1234") - addr := mustGetAPIAddr(t, r) - assert.Equal(t, "/ip4/127.0.0.1/tcp/1234", addr) + rpcAPI := mustGetAPIAddr(t, r) + assert.Equal(t, "/ip4/127.0.0.1/tcp/1234", rpcAPI) - mustSetAPIAddr(t, r, "/ip4/127.0.0.1/tcp/1234") - mustSetAPIAddr(t, r, "/ip4/127.0.0.1/tcp/1234") - mustSetAPIAddr(t, r, "/ip4/127.0.0.1/tcp/1234") mustSetAPIAddr(t, r, "/ip4/127.0.0.1/tcp/1234") - addr = mustGetAPIAddr(t, r) - assert.Equal(t, "/ip4/127.0.0.1/tcp/1234", addr) + rpcAPI = mustGetAPIAddr(t, r) + assert.Equal(t, "/ip4/127.0.0.1/tcp/1234", rpcAPI) }) }) @@ -372,10 +356,10 @@ func withFSRepo(t *testing.T, f func(*FSRepo)) { } func mustGetAPIAddr(t *testing.T, r *FSRepo) string { - addr, err := r.APIAddr() + rpcAddr, err := r.APIAddr() require.NoError(t, err) - return addr + return rpcAddr } func mustSetAPIAddr(t *testing.T, r *FSRepo, addr string) { diff --git a/pkg/repo/mem.go b/pkg/repo/mem.go new file mode 100644 index 0000000000..65cae7fb77 --- /dev/null +++ b/pkg/repo/mem.go @@ -0,0 +1,157 @@ +package repo + +import ( + "errors" + "sync" + + "github.com/filecoin-project/venus/pkg/repo/fskeystore" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + + "github.com/ipfs/go-datastore" + dss "github.com/ipfs/go-datastore/sync" + + "github.com/filecoin-project/venus/app/paths" + "github.com/filecoin-project/venus/pkg/config" +) + +// MemRepo is an in-memory implementation of the repo interface. +type MemRepo struct { + // lk guards the config + lk sync.RWMutex + C *config.Config + D blockstoreutil.Blockstore + Ks fskeystore.Keystore + W Datastore + Chain Datastore + Meta Datastore + Paych Datastore + //Market Datastore + version uint + apiAddress string + token []byte +} + +var _ Repo = (*MemRepo)(nil) + +// NewInMemoryRepo makes a new instance of MemRepo +func NewInMemoryRepo() *MemRepo { + defConfig := config.NewDefaultConfig() + // Reduce the time it takes to encrypt wallet password, default ScryptN is 1 << 21 + // for test + defConfig.Wallet.PassphraseConfig = config.TestPassphraseConfig() + return &MemRepo{ + C: defConfig, + D: blockstoreutil.NewBlockstore(dss.MutexWrap(datastore.NewMapDatastore())), + Ks: fskeystore.MutexWrap(fskeystore.NewMemKeystore()), + W: dss.MutexWrap(datastore.NewMapDatastore()), + Chain: dss.MutexWrap(datastore.NewMapDatastore()), + Meta: dss.MutexWrap(datastore.NewMapDatastore()), + Paych: dss.MutexWrap(datastore.NewMapDatastore()), + //Market: dss.MutexWrap(datastore.NewMapDatastore()), + version: LatestVersion, + } +} + +// configModule returns the configuration object. +func (mr *MemRepo) Config() *config.Config { + mr.lk.RLock() + defer mr.lk.RUnlock() + + return mr.C +} + +// ReplaceConfig replaces the current config with the newly passed in one. +func (mr *MemRepo) ReplaceConfig(cfg *config.Config) error { + mr.lk.Lock() + defer mr.lk.Unlock() + + mr.C = cfg + + return nil +} + +// Datastore returns the datastore. +func (mr *MemRepo) Datastore() blockstoreutil.Blockstore { + return mr.D +} + +// Keystore returns the keystore. +func (mr *MemRepo) Keystore() fskeystore.Keystore { + return mr.Ks +} + +// WalletDatastore returns the wallet datastore. +func (mr *MemRepo) WalletDatastore() Datastore { + return mr.W +} + +// ChainDatastore returns the chain datastore. +func (mr *MemRepo) ChainDatastore() Datastore { + return mr.Chain +} + +// ChainDatastore returns the chain datastore. +func (mr *MemRepo) PaychDatastore() Datastore { + return mr.Paych +} + +/*// ChainDatastore returns the chain datastore. +func (mr *MemRepo) MarketDatastore() Datastore { + return mr.Market +} +*/ +// ChainDatastore returns the chain datastore. +func (mr *MemRepo) MetaDatastore() Datastore { + return mr.Meta +} + +// Version returns the version of the repo. +func (mr *MemRepo) Version() uint { + return mr.version +} + +// Close deletes the temporary directories which hold staged piece data and +// sealed sectors. +func (mr *MemRepo) Close() error { + return nil +} + +// SetAPIAddr writes the address of the running API to memory. +func (mr *MemRepo) SetAPIAddr(addr string) error { + mr.apiAddress = addr + return nil +} + +// APIAddr reads the address of the running API from memory. +func (mr *MemRepo) APIAddr() (string, error) { + return mr.apiAddress, nil +} + +func (mr *MemRepo) SetAPIToken(token []byte) error { + if len(mr.token) == 0 { + mr.token = token + } + return nil +} + +func (mr *MemRepo) APIToken() (string, error) { + if len(mr.token) == 0 { + return "", errors.New("token not exists") + } + return string(mr.token), nil +} + +// Path returns the default path. +func (mr *MemRepo) Path() (string, error) { + return paths.GetRepoPath("") +} + +// JournalPath returns a string to satisfy the repo interface. +func (mr *MemRepo) JournalPath() string { + return "in_memory_filecoin_journal_path" +} + +// repo return the repo +func (mr *MemRepo) Repo() Repo { + return mr +} diff --git a/pkg/repo/repo.go b/pkg/repo/repo.go new file mode 100644 index 0000000000..b9005437e7 --- /dev/null +++ b/pkg/repo/repo.go @@ -0,0 +1,62 @@ +package repo + +import ( + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/repo/fskeystore" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/ipfs/go-datastore" +) + +// Datastore is the datastore interface provided by the repo +type Datastore datastore.Batching + +// repo is a representation of all persistent data in a filecoin node. +type Repo interface { + Config() *config.Config + // ReplaceConfig replaces the current config, with the newly passed in one. + ReplaceConfig(cfg *config.Config) error + + // Datastore is a general storage solution for things like blocks. + Datastore() blockstoreutil.Blockstore + + Keystore() fskeystore.Keystore + + // WalletDatastore is a specific storage solution, only used to store sensitive wallet information. + WalletDatastore() Datastore + + // ChainDatastore is a specific storage solution, only used to store already validated chain data. + ChainDatastore() Datastore + + // MetaDatastore is a specific storage solution, only used to store mpool data. + MetaDatastore() Datastore + + //MarketDatastore() Datastore + + PaychDatastore() Datastore + // SetJsonrpcAPIAddr sets the address of the running jsonrpc API. + SetAPIAddr(maddr string) error + + // APIAddr returns the address of the running API. + APIAddr() (string, error) + + // SetAPIToken set api token + SetAPIToken(token []byte) error + + // APIToken get api token + APIToken() (string, error) + + // Version returns the current repo version. + Version() uint + + // Path returns the repo path. + Path() (string, error) + + // JournalPath returns the journal path. + JournalPath() string + + // Close shuts down the repo. + Close() error + + // repo return the repo + Repo() Repo +} diff --git a/internal/pkg/repo/testing.go b/pkg/repo/testing.go similarity index 100% rename from internal/pkg/repo/testing.go rename to pkg/repo/testing.go diff --git a/pkg/state/power_table_view.go b/pkg/state/power_table_view.go new file mode 100644 index 0000000000..fc26648f99 --- /dev/null +++ b/pkg/state/power_table_view.go @@ -0,0 +1,90 @@ +package state + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" +) + +// PowerStateView is a view of chain state for election computations, typically at some lookback from the +// immediate parent state. +// This type isn't doing much that the state view doesn't already do, consider removing it. +type PowerStateView interface { + ResolveToKeyAddr(ctx context.Context, maddr address.Address) (address.Address, error) + GetMinerWorkerRaw(ctx context.Context, maddr address.Address) (address.Address, error) + MinerInfo(ctx context.Context, maddr address.Address, nv network.Version) (*miner.MinerInfo, error) + MinerSectorInfo(ctx context.Context, maddr address.Address, sectorNum abi.SectorNumber) (*miner.SectorOnChainInfo, error) + PowerNetworkTotal(ctx context.Context) (*NetworkPower, error) + MinerClaimedPower(ctx context.Context, miner address.Address) (raw, qa abi.StoragePower, err error) + GetSectorsForWinningPoSt(ctx context.Context, nv network.Version, pv ffiwrapper.Verifier, maddr address.Address, rand abi.PoStRandomness) ([]builtin.SectorInfo, error) +} + +type NetworkPower struct { + RawBytePower abi.StoragePower + QualityAdjustedPower abi.StoragePower + MinerCount int64 + MinPowerMinerCount int64 +} + +// FaultStateView is a view of chain state for adjustment of miner power claims based on changes since the +// power state's lookback (primarily, the miner ceasing to be registered). +type FaultStateView interface { + MinerExists(ctx context.Context, maddr address.Address) (bool, error) +} + +// An interface to the network power table for elections. +// Elections use the quality-adjusted power, rather than raw byte power. +type PowerTableView struct { + state PowerStateView + faultState FaultStateView +} + +func NewPowerTableView(state PowerStateView, faultState FaultStateView) PowerTableView { + return PowerTableView{ + state: state, + faultState: faultState, + } +} + +// Returns the network's total quality-adjusted power. +func (v PowerTableView) NetworkTotalPower(ctx context.Context) (abi.StoragePower, error) { + total, err := v.state.PowerNetworkTotal(ctx) + if err != nil { + return big.Zero(), err + } + return total.QualityAdjustedPower, nil +} + +// Returns a miner's claimed quality-adjusted power. +func (v PowerTableView) MinerClaimedPower(ctx context.Context, mAddr address.Address) (abi.StoragePower, error) { + _, qa, err := v.state.MinerClaimedPower(ctx, mAddr) + if err != nil { + return big.Zero(), err + } + // Only return claim if fault state still tracks miner + exists, err := v.faultState.MinerExists(ctx, mAddr) + if err != nil { + return big.Zero(), err + } + if !exists { // miner was slashed + return big.Zero(), nil + } + return qa, nil +} + +// WorkerAddr returns the worker address for a miner actor. +func (v PowerTableView) WorkerAddr(ctx context.Context, mAddr address.Address, nv network.Version) (address.Address, error) { + minerInfo, err := v.state.MinerInfo(ctx, mAddr, nv) + return minerInfo.Worker, err +} + +// SignerAddress returns the public key address associated with the given address. +func (v PowerTableView) SignerAddress(ctx context.Context, addr address.Address) (address.Address, error) { + return v.state.ResolveToKeyAddr(ctx, addr) +} diff --git a/pkg/state/power_table_view_test.go b/pkg/state/power_table_view_test.go new file mode 100644 index 0000000000..2be1b96bc8 --- /dev/null +++ b/pkg/state/power_table_view_test.go @@ -0,0 +1,146 @@ +package state_test + +import ( + "context" + "testing" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + cbor "github.com/ipfs/go-ipld-cbor" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/repo" + "github.com/filecoin-project/venus/pkg/state" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + gengen "github.com/filecoin-project/venus/tools/gengen/util" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func TestTotal(t *testing.T) { + //todo think a way to mock power directly + t.Skipf("skip it due to cant mock power directly ") + tf.UnitTest(t) + + ctx := context.Background() + numCommittedSectors := uint64(19) + numMiners := 3 + kis := testhelpers.MustGenerateBLSKeyInfo(numMiners, 0) + + cst, _, root := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis) + + table := state.NewPowerTableView(state.NewView(cst, root), state.NewView(cst, root)) + networkPower, err := table.NetworkTotalPower(ctx) + require.NoError(t, err) + + // TODO: test that the QA power is used when it differs from raw byte power after gengen computes it properly + // https://github.com/filecoin-project/venus/issues/4011 + expected := big.NewIntUnsigned(uint64(constants.DevSectorSize) * numCommittedSectors * uint64(numMiners)) + assert.True(t, expected.Equals(networkPower)) +} + +func TestMiner(t *testing.T) { + //todo think a way to mock power directly + t.Skipf("skip it due to cant mock power directly ") + tf.UnitTest(t) + + ctx := context.Background() + kis := testhelpers.MustGenerateBLSKeyInfo(1, 0) + + numCommittedSectors := uint64(10) + cst, addrs, root := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis) + addr := addrs[0] + + table := state.NewPowerTableView(state.NewView(cst, root), state.NewView(cst, root)) + actual, err := table.MinerClaimedPower(ctx, addr) + require.NoError(t, err) + + expected := abi.NewStoragePower(int64(uint64(constants.DevSectorSize) * numCommittedSectors)) + assert.True(t, expected.Equals(actual)) + assert.Equal(t, expected, actual) +} + +func TestNoPowerAfterSlash(t *testing.T) { + //todo think a way to mock power directly + t.Skipf("skip it due to cant mock power directly ") + tf.UnitTest(t) + // setup lookback state with 3 miners + ctx := context.Background() + numCommittedSectors := uint64(19) + numMiners := 3 + kis := testhelpers.MustGenerateBLSKeyInfo(numMiners, 0) + cstPower, addrsPower, rootPower := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis) + cstFaults, _, rootFaults := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis[0:2]) // drop the third key + table := state.NewPowerTableView(state.NewView(cstPower, rootPower), state.NewView(cstFaults, rootFaults)) + + // verify that faulted miner claim is 0 power + claim, err := table.MinerClaimedPower(ctx, addrsPower[2]) + require.NoError(t, err) + assert.Equal(t, abi.NewStoragePower(0), claim) +} + +func TestTotalPowerUnaffectedBySlash(t *testing.T) { + //todo think a way to mock power directly + t.Skipf("skip it due to cant mock power directly ") + tf.UnitTest(t) + ctx := context.Background() + numCommittedSectors := uint64(19) + numMiners := 3 + kis := testhelpers.MustGenerateBLSKeyInfo(numMiners, 0) + cstPower, _, rootPower := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis) + cstFaults, _, rootFaults := requireMinerWithNumCommittedSectors(ctx, t, numCommittedSectors, kis[0:2]) // drop the third key + table := state.NewPowerTableView(state.NewView(cstPower, rootPower), state.NewView(cstFaults, rootFaults)) + + // verify that faulted miner claim is 0 power + total, err := table.NetworkTotalPower(ctx) + require.NoError(t, err) + expected := abi.NewStoragePower(int64(uint64(constants.DevSectorSize) * numCommittedSectors * uint64(numMiners))) + + assert.Equal(t, expected, total) +} + +// nolint +func requireMinerWithNumCommittedSectors(ctx context.Context, t *testing.T, numCommittedSectors uint64, ownerKeys []crypto.KeyInfo) (cbor.IpldStore, []address.Address, cid.Cid) { + //todo think a way to mock power directly + t.Skipf("skip it due to cant mock power directly ") + r := repo.NewInMemoryRepo() + bs := r.Datastore() + cst := cbor.NewCborStore(bs) + + numMiners := len(ownerKeys) + minerConfigs := make([]*gengen.CreateStorageMinerConfig, numMiners) + for i := 0; i < numMiners; i++ { + commCfgs, err := gengen.MakeCommitCfgs(int(numCommittedSectors)) + require.NoError(t, err) + minerConfigs[i] = &gengen.CreateStorageMinerConfig{ + Owner: i, + CommittedSectors: commCfgs, + SealProofType: constants.DevSealProofType, + MarketBalance: abi.NewTokenAmount(0), + } + } + + // set up genesis block containing some miners with non-zero power + genCfg := &gengen.GenesisCfg{} + require.NoError(t, gengen.MinerConfigs(minerConfigs)(genCfg)) + require.NoError(t, gengen.NetworkName("ptvtest")(genCfg)) + require.NoError(t, gengen.ImportKeys(ownerKeys, "1000000")(genCfg)) + + info, err := gengen.GenGen(ctx, genCfg, bs) + require.NoError(t, err) + + var genesis types.BlockHeader + require.NoError(t, cst.Get(ctx, info.GenesisCid, &genesis)) + retAddrs := make([]address.Address, numMiners) + for i := 0; i < numMiners; i++ { + retAddrs[i] = info.Miners[i].Address + } + return cst, retAddrs, genesis.ParentStateRoot +} diff --git a/pkg/state/signer.go b/pkg/state/signer.go new file mode 100644 index 0000000000..882e65b728 --- /dev/null +++ b/pkg/state/signer.go @@ -0,0 +1,65 @@ +package state + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/wallet" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +//todo remove Account view a nd headsignerview +type AccountView interface { + ResolveToKeyAddr(ctx context.Context, address address.Address) (address.Address, error) +} + +type tipSignerView interface { + GetHead() *types.TipSet + ResolveToKeyAddr(ctx context.Context, ts *types.TipSet, address address.Address) (address.Address, error) +} + +// Signer looks up non-signing addresses before signing +type Signer struct { + wallet *wallet.Wallet + signerView AccountView +} + +// NewSigner creates a new signer +func NewSigner(signerView AccountView, wallet *wallet.Wallet) *Signer { + return &Signer{ + signerView: signerView, + wallet: wallet, + } +} + +// SignBytes creates a signature for the given data using either the given addr or its associated signing address +func (s *Signer) SignBytes(ctx context.Context, data []byte, addr address.Address) (*crypto.Signature, error) { + signingAddr, err := s.signerView.ResolveToKeyAddr(ctx, addr) + if err != nil { + return nil, err + } + return s.wallet.SignBytes(ctx, data, signingAddr) +} + +// HasAddress returns whether this signer can sign with the given address +func (s *Signer) HasAddress(ctx context.Context, addr address.Address) (bool, error) { + signingAddr, err := s.signerView.ResolveToKeyAddr(ctx, addr) + if err != nil { + return false, err + } + return s.wallet.HasAddress(ctx, signingAddr), nil +} + +type HeadSignView struct { + tipSignerView +} + +func NewHeadSignView(tipSignerView tipSignerView) *HeadSignView { + return &HeadSignView{tipSignerView: tipSignerView} +} + +func (headSignView *HeadSignView) ResolveToKeyAddr(ctx context.Context, addr address.Address) (address.Address, error) { + head := headSignView.GetHead() + return headSignView.tipSignerView.ResolveToKeyAddr(ctx, head, addr) //nil will use latest +} diff --git a/pkg/state/sigval.go b/pkg/state/sigval.go new file mode 100644 index 0000000000..dc2e32b5cc --- /dev/null +++ b/pkg/state/sigval.go @@ -0,0 +1,68 @@ +package state + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/crypto" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// +// SignatureValidator resolves account actor addresses to their pubkey-style address for signature validation. +// +type SignatureValidator struct { + signerView AccountView +} + +func NewSignatureValidator(signerView AccountView) *SignatureValidator { + return &SignatureValidator{signerView: signerView} +} + +//ValidateSignature check the signature is valid or not +func (v *SignatureValidator) ValidateSignature(ctx context.Context, data []byte, signer address.Address, sig crypto.Signature) error { + signerAddress, err := v.signerView.ResolveToKeyAddr(ctx, signer) + if err != nil { + return errors.Wrapf(err, "failed to load signer address for %v", signer) + } + return crypto.Verify(&sig, signerAddress, data) +} + +//ValidateSignature check the signature of message is valid or not. first get the cid of message and than checkout signature of messager cid and address +func (v *SignatureValidator) ValidateMessageSignature(ctx context.Context, msg *types.SignedMessage) error { + mCid := msg.Message.Cid() + return v.ValidateSignature(ctx, mCid.Bytes(), msg.Message.From, msg.Signature) +} + +//ValidateBLSMessageAggregate validate bls aggregate message +func (v *SignatureValidator) ValidateBLSMessageAggregate(ctx context.Context, msgs []*types.Message, sig *crypto.Signature) error { + if sig == nil { + if len(msgs) > 0 { + return errors.New("Invalid empty BLS sig over messages") + } + return nil + } + + if len(msgs) == 0 { + return nil + } + + var pubKeys [][]byte + var encodedMsgCids [][]byte + for _, msg := range msgs { + signerAddress, err := v.signerView.ResolveToKeyAddr(ctx, msg.From) + if err != nil { + return errors.Wrapf(err, "failed to load signer address for %v", msg.From) + } + pubKeys = append(pubKeys, signerAddress.Payload()) + mCid := msg.Cid() + encodedMsgCids = append(encodedMsgCids, mCid.Bytes()) + } + + if crypto.VerifyAggregate(pubKeys, encodedMsgCids, sig.Data) != nil { + return errors.New("BLS signature invalid") + } + return nil +} diff --git a/pkg/state/sigval_test.go b/pkg/state/sigval_test.go new file mode 100644 index 0000000000..e3ad14158b --- /dev/null +++ b/pkg/state/sigval_test.go @@ -0,0 +1,163 @@ +package state_test + +import ( + "bytes" + "context" + "fmt" + "testing" + + "github.com/filecoin-project/venus/pkg/testhelpers" + + "github.com/filecoin-project/venus/pkg/state" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/specs-actors/actors/builtin" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" +) + +type fakeStateView struct { + keys map[address.Address]address.Address +} + +func (f *fakeStateView) ResolveToKeyAddr(_ context.Context, a address.Address) (address.Address, error) { + if a.Protocol() == address.SECP256K1 || a.Protocol() == address.BLS { + return a, nil + } + resolved, ok := f.keys[a] + if !ok { + return address.Undef, fmt.Errorf("not found") + } + return resolved, nil + +} + +func TestSignMessageOk(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + ms, kis := testhelpers.NewMockSignersAndKeyInfo(1) + keyAddr, err := kis[0].Address() + require.NoError(t, err) + + t.Run("no resolution", func(t *testing.T) { + v := state.NewSignatureValidator(&fakeStateView{}) // No resolution needed. + msg := testhelpers.NewMeteredMessage(keyAddr, keyAddr, 1, types.ZeroFIL, builtin.MethodSend, nil, types.FromFil(0), types.FromFil(0), 1) + smsg, err := testhelpers.NewSignedMessage(ctx, *msg, ms) + require.NoError(t, err) + assert.NoError(t, v.ValidateMessageSignature(ctx, smsg)) + }) + t.Run("resolution required", func(t *testing.T) { + idAddress := testhelpers.RequireIDAddress(t, 1) + // Use ID address in message but sign with corresponding key address. + stateView := &fakeStateView{keys: map[address.Address]address.Address{ + idAddress: keyAddr, + }} + v := state.NewSignatureValidator(stateView) + msg := testhelpers.NewMeteredMessage(idAddress, idAddress, 1, types.ZeroFIL, builtin.MethodSend, nil, types.FromFil(0), types.FromFil(0), 1) + msgCid := msg.Cid() + sig, err := ms.SignBytes(ctx, msgCid.Bytes(), keyAddr) + require.NoError(t, err) + smsg := &types.SignedMessage{ + Message: *msg, + Signature: *sig, + } + + assert.NoError(t, v.ValidateMessageSignature(ctx, smsg)) + }) +} + +// Signature is valid but signer does not match From address. +func TestBadFrom(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + signer, kis := testhelpers.NewMockSignersAndKeyInfo(2) + keyAddr, err := kis[0].Address() + require.NoError(t, err) + otherAddr, err := kis[1].Address() + require.NoError(t, err) + + t.Run("no resolution", func(t *testing.T) { + v := state.NewSignatureValidator(&fakeStateView{}) + + // Can't use NewSignedMessage constructor as it always signs with msg.From. + msg := testhelpers.NewMeteredMessage(keyAddr, keyAddr, 1, types.ZeroFIL, builtin.MethodSend, nil, types.FromFil(0), types.FromFil(0), 1) + buf := new(bytes.Buffer) + err = msg.MarshalCBOR(buf) + require.NoError(t, err) + sig, err := signer.SignBytes(ctx, buf.Bytes(), otherAddr) // sign with addr != msg.From + require.NoError(t, err) + smsg := &types.SignedMessage{ + Message: *msg, + Signature: *sig, + } + assert.Error(t, v.ValidateMessageSignature(ctx, smsg)) + }) + t.Run("resolution required", func(t *testing.T) { + idAddress := testhelpers.RequireIDAddress(t, 1) + // Use ID address in message but sign with corresponding key address. + stateView := &fakeStateView{keys: map[address.Address]address.Address{ + idAddress: keyAddr, + }} + v := state.NewSignatureValidator(stateView) + + // Can't use NewSignedMessage constructor as it always signs with msg.From. + msg := testhelpers.NewMeteredMessage(idAddress, idAddress, 1, types.ZeroFIL, builtin.MethodSend, nil, types.FromFil(0), types.FromFil(0), 1) + buf := new(bytes.Buffer) + err = msg.MarshalCBOR(buf) + require.NoError(t, err) + sig, err := signer.SignBytes(ctx, buf.Bytes(), otherAddr) // sign with addr != msg.From (resolved) + require.NoError(t, err) + smsg := &types.SignedMessage{ + Message: *msg, + Signature: *sig, + } + assert.Error(t, v.ValidateMessageSignature(ctx, smsg)) + }) +} + +// Signature corrupted. +func TestSignedMessageBadSignature(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + + signer, kis := testhelpers.NewMockSignersAndKeyInfo(1) + keyAddr, err := kis[0].Address() + require.NoError(t, err) + + v := state.NewSignatureValidator(&fakeStateView{}) // no resolution needed + msg := testhelpers.NewMeteredMessage(keyAddr, keyAddr, 1, types.ZeroFIL, builtin.MethodSend, nil, types.FromFil(0), types.FromFil(0), 1) + smsg, err := testhelpers.NewSignedMessage(ctx, *msg, signer) + require.NoError(t, err) + + assert.NoError(t, v.ValidateMessageSignature(ctx, smsg)) + smsg.Signature.Data[0] = smsg.Signature.Data[0] ^ 0xFF + assert.Error(t, v.ValidateMessageSignature(ctx, smsg)) +} + +// Message corrupted. +func TestSignedMessageCorrupted(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + + signer, kis := testhelpers.NewMockSignersAndKeyInfo(1) + keyAddr, err := kis[0].Address() + require.NoError(t, err) + + v := state.NewSignatureValidator(&fakeStateView{}) // no resolution needed + msg := testhelpers.NewMeteredMessage(keyAddr, keyAddr, 1, types.ZeroFIL, builtin.MethodSend, nil, types.FromFil(0), types.FromFil(0), 1) + smsg, err := testhelpers.NewSignedMessage(ctx, *msg, signer) + require.NoError(t, err) + + assert.NoError(t, v.ValidateMessageSignature(ctx, smsg)) + smsg.Message.Nonce = uint64(42) + assert.Error(t, v.ValidateMessageSignature(ctx, smsg)) +} diff --git a/pkg/state/testing.go b/pkg/state/testing.go new file mode 100644 index 0000000000..dabda1c15d --- /dev/null +++ b/pkg/state/testing.go @@ -0,0 +1,151 @@ +package state + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" +) + +// FakeStateView is a fake state view. +type FakeStateView struct { + NetworkName string + Power *NetworkPower + Miners map[address.Address]*FakeMinerState +} + +// NewFakeStateView creates a new fake state view. +func NewFakeStateView(rawBytePower, qaPower abi.StoragePower, minerCount, minPowerMinerCount int64) *FakeStateView { + return &FakeStateView{ + Power: &NetworkPower{ + RawBytePower: rawBytePower, + QualityAdjustedPower: qaPower, + MinerCount: minerCount, + MinPowerMinerCount: minPowerMinerCount, + }, + Miners: make(map[address.Address]*FakeMinerState), + } +} + +// FakeMinerState is fake state for a single miner. +type FakeMinerState struct { + Owner address.Address + Worker address.Address + PeerID peer.ID + ProvingPeriodStart abi.ChainEpoch + ProvingPeriodEnd abi.ChainEpoch + PoStFailures int + Sectors []miner.SectorOnChainInfo + Deadlines []*bitfield.BitField + ClaimedRawPower abi.StoragePower + ClaimedQAPower abi.StoragePower + PledgeRequirement abi.TokenAmount + PledgeBalance abi.TokenAmount +} + +// FakeSectorInfo fakes a subset of sector onchain info +type FakeSectorInfo struct { + ID abi.SectorNumber + SealedCID cid.Cid +} + +func (v *FakeStateView) InitNetworkName(_ context.Context) (string, error) { + return v.NetworkName, nil +} + +// MinerSectorCount reports the number of sectors a miner has pledged +func (v *FakeStateView) MinerSectorCount(ctx context.Context, maddr address.Address) (uint64, error) { + m, ok := v.Miners[maddr] + if !ok { + return 0, errors.Errorf("no miner %s", maddr) + } + + return uint64(len(m.Sectors)), nil +} + +func (v *FakeStateView) MinerSectorInfo(_ context.Context, maddr address.Address, sectorNum abi.SectorNumber) (*miner.SectorOnChainInfo, error) { + m, ok := v.Miners[maddr] + if !ok { + return nil, errors.Errorf("no miner %s", maddr) + } + for _, s := range m.Sectors { + if s.SectorNumber == sectorNum { + return &s, nil + } + } + return nil, nil +} + +func (v *FakeStateView) MinerExists(_ context.Context, _ address.Address) (bool, error) { + return true, nil +} + +func (v *FakeStateView) MinerProvingPeriod(ctx context.Context, maddr address.Address) (start abi.ChainEpoch, end abi.ChainEpoch, failureCount int, err error) { + m, ok := v.Miners[maddr] + if !ok { + return 0, 0, 0, errors.Errorf("no miner %s", maddr) + } + return m.ProvingPeriodStart, m.ProvingPeriodEnd, m.PoStFailures, nil +} + +func (v *FakeStateView) PowerNetworkTotal(_ context.Context) (*NetworkPower, error) { + return v.Power, nil +} + +func (v *FakeStateView) MinerClaimedPower(ctx context.Context, miner address.Address) (abi.StoragePower, abi.StoragePower, error) { + m, ok := v.Miners[miner] + if !ok { + return big.Zero(), big.Zero(), errors.Errorf("no miner %s", miner) + } + return m.ClaimedRawPower, m.ClaimedQAPower, nil +} + +func (v *FakeStateView) GetSectorsForWinningPoSt(ctx context.Context, nv network.Version, pv ffiwrapper.Verifier, maddr address.Address, rand abi.PoStRandomness) ([]builtin.SectorInfo, error) { + _, ok := v.Miners[maddr] + if !ok { + return nil, errors.Errorf("no miner %s", maddr) + } + return []builtin.SectorInfo{}, nil +} + +func (v *FakeStateView) MinerPledgeCollateral(_ context.Context, maddr address.Address) (locked abi.TokenAmount, total abi.TokenAmount, err error) { + m, ok := v.Miners[maddr] + if !ok { + return big.Zero(), big.Zero(), errors.Errorf("no miner %s", maddr) + } + return m.PledgeRequirement, m.PledgeBalance, nil +} + +func (v *FakeStateView) MinerInfo(ctx context.Context, maddr address.Address, nv network.Version) (*miner.MinerInfo, error) { + m, ok := v.Miners[maddr] + if !ok { + return nil, errors.Errorf("no miner %s", maddr) + } + return &miner.MinerInfo{ + Owner: m.Owner, + Worker: m.Worker, + PeerId: &m.PeerID, + }, nil +} + +func (v *FakeStateView) GetMinerWorkerRaw(ctx context.Context, maddr address.Address) (address.Address, error) { + m, ok := v.Miners[maddr] + if !ok { + return address.Undef, errors.Errorf("no miner %s", maddr) + } + return m.Worker, nil +} + +func (v *FakeStateView) ResolveToKeyAddr(ctx context.Context, addr address.Address) (address.Address, error) { + return addr, nil +} diff --git a/pkg/state/tree/cbor_gen.go b/pkg/state/tree/cbor_gen.go new file mode 100644 index 0000000000..d6930be6e2 --- /dev/null +++ b/pkg/state/tree/cbor_gen.go @@ -0,0 +1,110 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package tree + +import ( + "fmt" + "io" + "sort" + + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = sort.Sort + +var lengthBufStateRoot = []byte{131} + +func (t *StateRoot) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufStateRoot); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Version (tree.StateTreeVersion) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Version)); err != nil { + return err + } + + // t.Actors (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.Actors); err != nil { + return xerrors.Errorf("failed to write cid field t.Actors: %w", err) + } + + // t.Info (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.Info); err != nil { + return xerrors.Errorf("failed to write cid field t.Info: %w", err) + } + + return nil +} + +func (t *StateRoot) UnmarshalCBOR(r io.Reader) error { + *t = StateRoot{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Version (tree.StateTreeVersion) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Version = StateTreeVersion(extra) + + } + // t.Actors (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.Actors: %w", err) + } + + t.Actors = c + + } + // t.Info (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.Info: %w", err) + } + + t.Info = c + + } + return nil +} diff --git a/pkg/state/tree/snapshot.go b/pkg/state/tree/snapshot.go new file mode 100644 index 0000000000..152c2c9c5c --- /dev/null +++ b/pkg/state/tree/snapshot.go @@ -0,0 +1,106 @@ +package tree + +import ( + "github.com/filecoin-project/go-address" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type stateSnaps struct { + layers []*stateSnapLayer + lastMaybeNonEmptyResolveCache int +} + +type stateSnapLayer struct { + actors map[address.Address]streeOp + resolveCache map[address.Address]address.Address +} + +func newStateSnapLayer() *stateSnapLayer { + return &stateSnapLayer{ + actors: make(map[address.Address]streeOp), + resolveCache: make(map[address.Address]address.Address), + } +} + +type streeOp struct { + Act types.Actor + Delete bool +} + +func newStateSnaps() *stateSnaps { + ss := &stateSnaps{} + ss.addLayer() + return ss +} + +func (ss *stateSnaps) addLayer() { + ss.layers = append(ss.layers, newStateSnapLayer()) +} + +func (ss *stateSnaps) dropLayer() { + ss.layers[len(ss.layers)-1] = nil // allow it to be GCed + + ss.layers = ss.layers[:len(ss.layers)-1] + + if ss.lastMaybeNonEmptyResolveCache == len(ss.layers) { + ss.lastMaybeNonEmptyResolveCache = len(ss.layers) - 1 + } +} + +func (ss *stateSnaps) mergeLastLayer() { + last := ss.layers[len(ss.layers)-1] + nextLast := ss.layers[len(ss.layers)-2] + + for k, v := range last.actors { + nextLast.actors[k] = v + } + + for k, v := range last.resolveCache { + nextLast.resolveCache[k] = v + } + + ss.dropLayer() +} + +func (ss *stateSnaps) resolveAddress(addr address.Address) (address.Address, bool) { + for i := ss.lastMaybeNonEmptyResolveCache; i >= 0; i-- { + if len(ss.layers[i].resolveCache) == 0 { + if ss.lastMaybeNonEmptyResolveCache == i { + ss.lastMaybeNonEmptyResolveCache = i - 1 + } + continue + } + resa, ok := ss.layers[i].resolveCache[addr] + if ok { + return resa, true + } + } + return address.Undef, false +} + +func (ss *stateSnaps) cacheResolveAddress(addr, resa address.Address) { + ss.layers[len(ss.layers)-1].resolveCache[addr] = resa + ss.lastMaybeNonEmptyResolveCache = len(ss.layers) - 1 +} + +func (ss *stateSnaps) getActor(addr address.Address) (*types.Actor, error) { + for i := len(ss.layers) - 1; i >= 0; i-- { + act, ok := ss.layers[i].actors[addr] + if ok { + if act.Delete { + return nil, types.ErrActorNotFound + } + + return &act.Act, nil + } + } + return nil, nil +} + +func (ss *stateSnaps) setActor(addr address.Address, act *types.Actor) { + ss.layers[len(ss.layers)-1].actors[addr] = streeOp{Act: *act} +} + +func (ss *stateSnaps) deleteActor(addr address.Address) { + ss.layers[len(ss.layers)-1].actors[addr] = streeOp{Delete: true} +} diff --git a/pkg/state/tree/state.go b/pkg/state/tree/state.go new file mode 100644 index 0000000000..3e324b48d6 --- /dev/null +++ b/pkg/state/tree/state.go @@ -0,0 +1,600 @@ +package tree + +import ( + "bytes" + "context" + "fmt" + "io" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + logging "github.com/ipfs/go-log/v2" + cbg "github.com/whyrusleeping/cbor-gen" + "go.opencensus.io/trace" + "golang.org/x/xerrors" + + states0 "github.com/filecoin-project/specs-actors/actors/states" + states2 "github.com/filecoin-project/specs-actors/v2/actors/states" + states3 "github.com/filecoin-project/specs-actors/v3/actors/states" + states4 "github.com/filecoin-project/specs-actors/v4/actors/states" + states5 "github.com/filecoin-project/specs-actors/v5/actors/states" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type StateTreeVersion uint64 //nolint + +type ActorKey = address.Address + +type Root = cid.Cid + +// Review: can we get rid of this? +type Tree interface { + GetActor(ctx context.Context, addr ActorKey) (*types.Actor, bool, error) + SetActor(ctx context.Context, addr ActorKey, act *types.Actor) error + DeleteActor(ctx context.Context, addr ActorKey) error + LookupID(addr ActorKey) (address.Address, error) + + Flush(ctx context.Context) (cid.Cid, error) + Snapshot(ctx context.Context) error + ClearSnapshot() + Revert() error + At(Root) error + RegisterNewAddress(addr ActorKey) (address.Address, error) + + MutateActor(addr ActorKey, f func(*types.Actor) error) error + ForEach(f func(ActorKey, *types.Actor) error) error + GetStore() cbor.IpldStore +} + +var stateLog = logging.Logger("vm.statetree") + +const ( + // StateTreeVersion0 corresponds to actors < v2. + StateTreeVersion0 StateTreeVersion = iota + // StateTreeVersion1 corresponds to actors v2 + StateTreeVersion1 + // StateTreeVersion2 corresponds to actors v3. + StateTreeVersion2 + // StateTreeVersion3 corresponds to actors v4. + StateTreeVersion3 + // StateTreeVersion4 corresponds to actors v5. + StateTreeVersion4 +) + +type StateRoot struct { //nolint + // State tree version. + Version StateTreeVersion + // Actors tree. The structure depends on the state root version. + Actors cid.Cid + // Info. The structure depends on the state root version. + Info cid.Cid +} + +// TODO: version this. +type StateInfo0 struct{} //nolint + +var lengthBufStateInfo0 = []byte{128} + +func (t *StateInfo0) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufStateInfo0); err != nil { + return err + } + + return nil +} + +func (t *StateInfo0) UnmarshalCBOR(r io.Reader) error { + *t = StateInfo0{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 0 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + return nil +} + +// state stores actors state by their ID. +type State struct { + root adt.Map + version StateTreeVersion + info cid.Cid + Store cbor.IpldStore + lookupIDFun func(address.Address) (address.Address, error) + + snaps *stateSnaps +} + +// VersionForNetwork returns the state tree version for the given network +// version. +func VersionForNetwork(ver network.Version) (StateTreeVersion, error) { + switch ver { + case network.Version0, network.Version1, network.Version2, network.Version3: + return StateTreeVersion0, nil + case network.Version4, network.Version5, network.Version6, network.Version7, network.Version8, network.Version9: + return StateTreeVersion1, nil + case network.Version10, network.Version11: + return StateTreeVersion2, nil + case network.Version12: + return StateTreeVersion3, nil + + /* inline-gen template + {{$lastNv := .latestNetworkVersion}} + case{{range .networkVersions}} {{if (ge . 13.)}} network.Version{{.}}{{if (lt . $lastNv)}},{{end}}{{end}}{{end}}: + /* inline-gen start */ + + case network.Version13, network.Version14, network.Version15: + /* inline-gen end */ + + return StateTreeVersion4, nil + default: + panic(fmt.Sprintf("unsupported network version %d", ver)) + } +} + +func NewState(cst cbor.IpldStore, ver StateTreeVersion) (*State, error) { + var info cid.Cid + switch ver { + case StateTreeVersion0: + // info is undefined + case StateTreeVersion1, StateTreeVersion2, StateTreeVersion3, StateTreeVersion4: + var err error + info, err = cst.Put(context.TODO(), new(StateInfo0)) + if err != nil { + return nil, err + } + default: + return nil, xerrors.Errorf("unsupported state tree version: %d", ver) + } + + store := adt.WrapStore(context.TODO(), cst) + var hamt adt.Map + switch ver { + case StateTreeVersion0: + tree, err := states0.NewTree(store) + if err != nil { + return nil, xerrors.Errorf("failed to create state tree: %v", err) + } + hamt = tree.Map + case StateTreeVersion1: + tree, err := states2.NewTree(store) + if err != nil { + return nil, xerrors.Errorf("failed to create state tree: %v", err) + } + hamt = tree.Map + case StateTreeVersion2: + tree, err := states3.NewTree(store) + if err != nil { + return nil, xerrors.Errorf("failed to create state tree: %v", err) + } + hamt = tree.Map + case StateTreeVersion3: + tree, err := states4.NewTree(store) + if err != nil { + return nil, xerrors.Errorf("failed to create state tree: %w", err) + } + hamt = tree.Map + case StateTreeVersion4: + tree, err := states5.NewTree(store) + if err != nil { + return nil, xerrors.Errorf("failed to create state tree: %w", err) + } + hamt = tree.Map + default: + return nil, xerrors.Errorf("unsupported state tree version: %d", ver) + } + + s := &State{ + root: hamt, + info: info, + version: ver, + Store: cst, + snaps: newStateSnaps(), + } + s.lookupIDFun = s.lookupIDinternal + return s, nil +} + +func LoadState(ctx context.Context, cst cbor.IpldStore, c cid.Cid) (*State, error) { + var root StateRoot + // Try loading as a new-style state-tree (version/actors tuple). + if err := cst.Get(context.TODO(), c, &root); err != nil { + // We failed to decode as the new version, must be an old version. + root.Actors = c + root.Version = StateTreeVersion0 + } + + store := adt.WrapStore(context.TODO(), cst) + + var ( + hamt adt.Map + err error + ) + switch root.Version { + case StateTreeVersion0: + var tree *states0.Tree + tree, err = states0.LoadTree(store, root.Actors) + if tree != nil { + hamt = tree.Map + } + case StateTreeVersion1: + var tree *states2.Tree + tree, err = states2.LoadTree(store, root.Actors) + if tree != nil { + hamt = tree.Map + } + case StateTreeVersion2: + var tree *states3.Tree + tree, err = states3.LoadTree(store, root.Actors) + if tree != nil { + hamt = tree.Map + } + case StateTreeVersion3: + var tree *states4.Tree + tree, err = states4.LoadTree(store, root.Actors) + if tree != nil { + hamt = tree.Map + } + case StateTreeVersion4: + var tree *states5.Tree + tree, err = states5.LoadTree(store, root.Actors) + if tree != nil { + hamt = tree.Map + } + default: + return nil, xerrors.Errorf("unsupported state tree version: %d", root.Version) + } + if err != nil { + stateLog.Errorf("failed to load state tree: %s", err) + return nil, xerrors.Errorf("failed to load state tree: %v", err) + } + + s := &State{ + root: hamt, + info: root.Info, + version: root.Version, + Store: cst, + snaps: newStateSnaps(), + } + s.lookupIDFun = s.lookupIDinternal + + return s, nil +} + +func (st *State) SetActor(ctx context.Context, addr ActorKey, act *types.Actor) error { + stateLog.Debugf("set actor addr:", addr.String(), " Balance:", act.Balance.String(), " Head:", act.Head, " Nonce:", act.Nonce) + iaddr, err := st.LookupID(addr) + if err != nil { + return xerrors.Errorf("ID lookup failed: %v", err) + } + addr = iaddr + + st.snaps.setActor(addr, act) + return nil +} + +func (st *State) lookupIDinternal(addr address.Address) (address.Address, error) { + act, found, err := st.GetActor(context.Background(), init_.Address) + if !found || err != nil { + return address.Undef, xerrors.Errorf("getting init actor: %v", err) + } + + ias, err := init_.Load(&AdtStore{st.Store}, act) + if err != nil { + return address.Undef, xerrors.Errorf("loading init actor state: %v", err) + } + + a, found, err := ias.ResolveAddress(addr) + if err == nil && !found { + err = types.ErrActorNotFound + } + if err != nil { + return address.Undef, xerrors.Errorf("resolve address %s: %w", addr, err) // ends with %w implements an Unwrap method + } + return a, err +} + +// LookupID gets the ID address of this actor's `addr` stored in the `InitActor`. +func (st *State) LookupID(addr ActorKey) (address.Address, error) { + if addr.Protocol() == address.ID { + return addr, nil + } + resa, ok := st.snaps.resolveAddress(addr) + if ok { + return resa, nil + } + a, err := st.lookupIDFun(addr) + if err != nil { + return a, err + } + st.snaps.cacheResolveAddress(addr, a) + + return a, nil +} + +// ToDo Return nil if it is actor not found[ErrActorNotFound],Because the basis for judgment is: err != nil ==> panic ??? +// GetActor returns the actor from any type of `addr` provided. +func (st *State) GetActor(ctx context.Context, addr ActorKey) (*types.Actor, bool, error) { + var err error + if addr.Protocol() != address.ID { + if addr, err = st.LookupID(addr); err != nil { + if xerrors.Is(err, types.ErrActorNotFound) { + return nil, false, nil + } + return nil, false, xerrors.Errorf("address resolution: %v", err) + } + } + + snapAct, err := st.snaps.getActor(addr) + if err != nil { + if xerrors.Is(err, types.ErrActorNotFound) { + return nil, false, nil + } + return nil, false, err + } + + if snapAct != nil { + return snapAct, true, nil + } + + var act types.Actor + if found, err := st.root.Get(abi.AddrKey(addr), &act); err != nil { + return nil, false, xerrors.Errorf("hamt find failed: %v", err) + } else if !found { + return nil, false, nil + } + + st.snaps.setActor(addr, &act) + + return &act, true, nil +} + +func (st *State) DeleteActor(ctx context.Context, addr ActorKey) error { + stateLog.Debugf("Delete Actor ", addr) + if addr == address.Undef { + return xerrors.Errorf("DeleteActor called on undefined address") + } + + iaddr, err := st.LookupID(addr) + if err != nil { + if xerrors.Is(err, types.ErrActorNotFound) { + return xerrors.Errorf("resolution lookup failed (%s): %v", addr, err) + } + return xerrors.Errorf("address resolution: %v", err) + } + + addr = iaddr + + _, found, err := st.GetActor(ctx, addr) + if err != nil { + return err + } + if !found { + return xerrors.Errorf("resolution lookup failed (%s): %v", addr, err) + } + + st.snaps.deleteActor(addr) + + return nil +} + +func (st *State) Flush(ctx context.Context) (cid.Cid, error) { + ctx, span := trace.StartSpan(ctx, "stateTree.Flush") //nolint:staticcheck + defer span.End() + if len(st.snaps.layers) != 1 { + return cid.Undef, xerrors.Errorf("tried to flush state tree with snapshots on the stack") + } + + for addr, sto := range st.snaps.layers[0].actors { + if sto.Delete { + if err := st.root.Delete(abi.AddrKey(addr)); err != nil { + return cid.Undef, err + } + } else { + if err := st.root.Put(abi.AddrKey(addr), &sto.Act); err != nil { + return cid.Undef, err + } + } + } + + root, err := st.root.Root() + if err != nil { + return cid.Undef, xerrors.Errorf("failed to flush state-tree hamt: %v", err) + } + // If we're version 0, return a raw tree. + if st.version == StateTreeVersion0 { + return root, nil + } + // Otherwise, return a versioned tree. + return st.Store.Put(ctx, &StateRoot{Version: st.version, Actors: root, Info: st.info}) +} + +func (st *State) Snapshot(ctx context.Context) error { + ctx, span := trace.StartSpan(ctx, "stateTree.SnapShot") //nolint:staticcheck + defer span.End() + + st.snaps.addLayer() + + return nil +} + +func (st *State) ClearSnapshot() { + st.snaps.mergeLastLayer() +} + +func (st *State) RegisterNewAddress(addr ActorKey) (address.Address, error) { + var out address.Address + err := st.MutateActor(init_.Address, func(initact *types.Actor) error { + ias, err := init_.Load(&AdtStore{st.Store}, initact) + if err != nil { + return err + } + + oaddr, err := ias.MapAddressToNewID(addr) + if err != nil { + return err + } + out = oaddr + + ncid, err := st.Store.Put(context.TODO(), ias) + if err != nil { + return err + } + + initact.Head = ncid + return nil + }) + if err != nil { + return address.Undef, err + } + + return out, nil +} + +type AdtStore struct{ cbor.IpldStore } + +func (a *AdtStore) Context() context.Context { + return context.TODO() +} + +var _ adt.Store = (*AdtStore)(nil) + +func (st *State) Revert() error { + st.snaps.dropLayer() + st.snaps.addLayer() + + return nil +} + +func (st *State) MutateActor(addr ActorKey, f func(*types.Actor) error) error { + act, found, err := st.GetActor(context.Background(), addr) + if !found || err != nil { + return err + } + + if err := f(act); err != nil { + return err + } + + return st.SetActor(context.Background(), addr, act) +} + +func (st *State) ForEach(f func(ActorKey, *types.Actor) error) error { + // Walk through layers, if any. + seen := make(map[address.Address]struct{}) + for i := len(st.snaps.layers) - 1; i >= 0; i-- { + for addr, op := range st.snaps.layers[i].actors { + if _, ok := seen[addr]; ok { + continue + } + seen[addr] = struct{}{} + if op.Delete { + continue + } + act := op.Act // copy + if err := f(addr, &act); err != nil { + return err + } + } + + } + + // Now walk through the saved actors. + var act types.Actor + return st.root.ForEach(&act, func(k string) error { + act := act // copy + addr, err := address.NewFromBytes([]byte(k)) + if err != nil { + return xerrors.Errorf("invalid address (%x) found in state tree key: %w", []byte(k), err) + } + + // no need to record anything here, there are no duplicates in the actors HAMT + // iself. + if _, ok := seen[addr]; ok { + return nil + } + + return f(addr, &act) + }) +} + +// Version returns the version of the StateTree data structure in use. +func (st *State) Version() StateTreeVersion { + return st.version +} + +func (st *State) GetStore() cbor.IpldStore { + return st.Store +} + +func (st *State) At(root Root) error { + newState, err := LoadState(context.Background(), st.Store, root) + if err != nil { + return err + } + + st.root = newState.root + st.version = newState.version + st.info = newState.info + return nil +} +func Diff(oldTree, newTree *State) (map[string]types.Actor, error) { + out := map[string]types.Actor{} + + var ( + ncval, ocval cbg.Deferred + buf = bytes.NewReader(nil) + ) + if err := newTree.root.ForEach(&ncval, func(k string) error { + var act types.Actor + + addr, err := address.NewFromBytes([]byte(k)) + if err != nil { + return xerrors.Errorf("address in state tree was not valid: %v", err) + } + + found, err := oldTree.root.Get(abi.AddrKey(addr), &ocval) + if err != nil { + return err + } + + if found && bytes.Equal(ocval.Raw, ncval.Raw) { + return nil // not changed + } + + buf.Reset(ncval.Raw) + err = act.UnmarshalCBOR(buf) + buf.Reset(nil) + + if err != nil { + return err + } + + out[addr.String()] = act + + return nil + }); err != nil { + return nil, err + } + return out, nil +} diff --git a/pkg/state/tree/state_test.go b/pkg/state/tree/state_test.go new file mode 100644 index 0000000000..936822a81e --- /dev/null +++ b/pkg/state/tree/state_test.go @@ -0,0 +1,172 @@ +package tree + +import ( + "context" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + "github.com/filecoin-project/venus/pkg/testhelpers" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/repo" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func TestStatePutGet(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + + bs := repo.NewInMemoryRepo().Datastore() + cst := cbor.NewCborStore(bs) + tree, err := NewStateWithBuiltinActor(t, cst, StateTreeVersion1) + if err != nil { + t.Fatal(err) + } + + addrGetter := testhelpers.NewForTestGetter() + addr1 := addrGetter() + addr2 := addrGetter() + AddAccount(t, tree, cst, addr1) + AddAccount(t, tree, cst, addr2) + + UpdateAccount(t, tree, addr1, func(act1 *types.Actor) { + act1.IncrementSeqNum() + }) + + UpdateAccount(t, tree, addr2, func(act2 *types.Actor) { + act2.IncrementSeqNum() + act2.IncrementSeqNum() + }) + + act1out, found, err := tree.GetActor(ctx, addr1) + assert.NoError(t, err) + assert.True(t, found) + assert.Equal(t, uint64(1), act1out.Nonce) + act2out, found, err := tree.GetActor(ctx, addr2) + assert.NoError(t, err) + assert.True(t, found) + assert.Equal(t, uint64(2), act2out.Nonce) + + // now test it persists across recreation of tree + tcid, err := tree.Flush(ctx) + assert.NoError(t, err) + + tree2, err := LoadState(context.Background(), cst, tcid) + assert.NoError(t, err) + + act1out2, found, err := tree2.GetActor(ctx, addr1) + assert.NoError(t, err) + assert.True(t, found) + assert.Equal(t, uint64(1), act1out2.Nonce) + act2out2, found, err := tree2.GetActor(ctx, addr2) + assert.NoError(t, err) + assert.True(t, found) + assert.Equal(t, uint64(2), act2out2.Nonce) +} + +func TestStateErrors(t *testing.T) { + tf.UnitTest(t) + ctx := context.Background() + bs := repo.NewInMemoryRepo().Datastore() + cst := cbor.NewCborStore(bs) + tree, err := NewStateWithBuiltinActor(t, cst, StateTreeVersion1) + if err != nil { + t.Fatal(err) + } + + AddAccount(t, tree, cst, testhelpers.NewForTestGetter()()) + + c, err := constants.DefaultCidBuilder.Sum([]byte("cats")) + assert.NoError(t, err) + + tr2, err := LoadState(ctx, cst, c) + assert.Error(t, err) + assert.Nil(t, tr2) +} + +func TestGetAllActors(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + bs := repo.NewInMemoryRepo().Datastore() + cst := cbor.NewCborStore(bs) + tree, err := NewStateWithBuiltinActor(t, cst, StateTreeVersion1) + if err != nil { + t.Fatal(err) + } + addr := testhelpers.NewForTestGetter()() + + newActor := types.Actor{Code: builtin2.AccountActorCodeID, Nonce: 1234, Balance: abi.NewTokenAmount(123)} + AddAccount(t, tree, cst, addr) + _, err = tree.Flush(ctx) + require.NoError(t, err) + + err = tree.ForEach(func(key ActorKey, result *types.Actor) error { + if addr != key { + return nil + } + assert.Equal(t, addr, key) + assert.Equal(t, newActor.Code, result.Code) + assert.Equal(t, newActor.Nonce, result.Nonce) + assert.Equal(t, newActor.Balance, result.Balance) + return nil + }) + if err != nil { + t.Error(err) + } +} + +func TestStateTreeConsistency(t *testing.T) { + tf.UnitTest(t) + + ctx := context.Background() + bs := repo.NewInMemoryRepo().Datastore() + cst := cbor.NewCborStore(bs) + tree, err := NewState(cst, StateTreeVersion1) + if err != nil { + t.Fatal(err) + } + + var addrs []address.Address + for i := 100; i < 150; i++ { + a, err := address.NewIDAddress(uint64(i)) + if err != nil { + t.Fatal(err) + } + + addrs = append(addrs, a) + } + + randomCid, err := cid.Decode("bafy2bzacecu7n7wbtogznrtuuvf73dsz7wasgyneqasksdblxupnyovmtwxxu") + if err != nil { + t.Fatal(err) + } + + for i, a := range addrs { + if err := tree.SetActor(ctx, a, &types.Actor{ + Code: randomCid, + Head: randomCid, + Balance: abi.NewTokenAmount(int64(10000 + i)), + Nonce: uint64(1000 - i), + }); err != nil { + t.Fatal(err) + } + } + + root, err := tree.Flush(ctx) + if err != nil { + t.Fatal(err) + } + if root.String() != "bafy2bzaceamis23jp44ofm4fh6jwc4gkxlzhnvxrdw4zsn3v2fj6at6pf2m4y" { + t.Fatalf("state state Mismatch. Expected: bafy2bzaceamis23jp44ofm4fh6jwc4gkxlzhnvxrdw4zsn3v2fj6at6pf2m4y Actual: %s", root.String()) + } + +} diff --git a/pkg/state/tree/testing.go b/pkg/state/tree/testing.go new file mode 100644 index 0000000000..84d4826955 --- /dev/null +++ b/pkg/state/tree/testing.go @@ -0,0 +1,147 @@ +package tree + +import ( + "context" + "testing" + + "github.com/filecoin-project/go-state-types/abi" + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + "github.com/filecoin-project/specs-actors/actors/builtin/account" + init0 "github.com/filecoin-project/specs-actors/actors/builtin/init" + "github.com/filecoin-project/specs-actors/actors/util/adt" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + "github.com/stretchr/testify/require" +) + +// NewFromString sets a state tree based on an int. +// +// TODO: we could avoid this if write a test cborStore that can map test cids to test states. +func NewFromString(t *testing.T, s string, store cbor.IpldStore) *State { + tree, err := NewStateWithBuiltinActor(t, store, StateTreeVersion0) + require.NoError(t, err) + + //create account + strAddr, err := address.NewSecp256k1Address([]byte(s)) + require.NoError(t, err) + + //add a account for t3 + AddAccount(t, tree, store, strAddr) + require.NoError(t, err) + return tree +} + +func NewStateWithBuiltinActor(t *testing.T, store cbor.IpldStore, ver StateTreeVersion) (*State, error) { + ctx := context.TODO() + tree, err := NewState(store, StateTreeVersion0) + require.NoError(t, err) + adtStore := &AdtStore{store} + + //create builtin init account + emptyMap := adt.MakeEmptyMap(adtStore) + emptyMapRoot, err := emptyMap.Root() + require.NoError(t, err) + initState := &init0.State{ + AddressMap: emptyMapRoot, + NextID: 20, + NetworkName: "test-net", + } + + initCodeID, err := store.Put(ctx, initState) + require.NoError(t, err) + initActor := &types.Actor{ + Code: builtin0.InitActorCodeID, + Head: initCodeID, + Nonce: 0, + Balance: abi.TokenAmount{}, + } + err = tree.SetActor(ctx, builtin0.InitActorAddr, initActor) + require.NoError(t, err) + return tree, nil +} + +func AddAccount(t *testing.T, tree *State, store cbor.IpldStore, addr address.Address) { + ctx := context.TODO() + adtStore := &AdtStore{store} + + initActor, _, err := tree.GetActor(ctx, builtin0.InitActorAddr) + require.NoError(t, err) + initState := &init0.State{} + err = adtStore.Get(ctx, initActor.Head, initState) + require.NoError(t, err) + //add a account for t3 + idAddr, err := initState.MapAddressToNewID(adtStore, addr) + require.NoError(t, err) + newInitStateId, err := store.Put(ctx, initState) //nolint + require.NoError(t, err) + initActor.Head = newInitStateId + err = tree.SetActor(ctx, builtin0.InitActorAddr, initActor) + require.NoError(t, err) + + emptyObject, err := store.Put(context.TODO(), []struct{}{}) + if err != nil { + panic(err) + } + accountActor := &types.Actor{ + Code: builtin0.AccountActorCodeID, + Head: emptyObject, + Nonce: 0, + Balance: abi.TokenAmount{}, + } + err = tree.SetActor(ctx, idAddr, accountActor) + require.NoError(t, err) + + //save t3 address + accountState := &account.State{Address: addr} + accountRoot, err := store.Put(context.TODO(), accountState) + if err != nil { + panic(err) + } + addrActor := &types.Actor{ + Code: builtin0.AccountActorCodeID, + Head: accountRoot, + Nonce: 0, + Balance: abi.TokenAmount{}, + } + err = tree.SetActor(context.Background(), addr, addrActor) + require.NoError(t, err) +} + +func UpdateAccount(t *testing.T, tree *State, addr address.Address, fn func(*types.Actor)) { + ctx := context.TODO() + actor, _, err := tree.GetActor(ctx, addr) + require.NoError(t, err) + fn(actor) + err = tree.SetActor(context.Background(), addr, actor) + require.NoError(t, err) +} + +// MustCommit flushes the state or panics if it can't. +func MustCommit(st State) cid.Cid { + cid, err := st.Flush(context.Background()) + if err != nil { + panic(err) + } + return cid +} + +// MustGetActor gets the actor or panics if it can't. +func MustGetActor(st State, a address.Address) (*types.Actor, bool) { + actor, found, err := st.GetActor(context.Background(), a) + if err != nil { + panic(err) + } + return actor, found +} + +// MustSetActor sets the actor or panics if it can't. +func MustSetActor(st State, address address.Address, actor *types.Actor) cid.Cid { + err := st.SetActor(context.Background(), address, actor) + if err != nil { + panic(err) + } + return MustCommit(st) +} diff --git a/pkg/state/view.go b/pkg/state/view.go new file mode 100644 index 0000000000..8947f59800 --- /dev/null +++ b/pkg/state/view.go @@ -0,0 +1,846 @@ +package state + +import ( + "context" + "strconv" + + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/dline" + "github.com/filecoin-project/go-state-types/network" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + xerrors "github.com/pkg/errors" + + addr "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + vmstate "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/account" + notinit "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + paychActor "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/reward" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/verifreg" +) + +// Viewer builds state views from state root CIDs. +// remove tipset argument in many function of viewer +type Viewer struct { + ipldStore cbor.IpldStore +} + +// NewViewer creates a new state +func NewViewer(store cbor.IpldStore) *Viewer { + return &Viewer{store} +} + +// StateView returns a new state view. +func (c *Viewer) StateView(root cid.Cid) *View { + return NewView(c.ipldStore, root) +} + +// View is a read-only interface to a snapshot of application-level actor state. +// This object interprets the actor state, abstracting the concrete on-chain structures so as to +// hide the complications of protocol versions. +// Exported methods on this type avoid exposing concrete state structures (which may be subject to versioning) +// where possible. +type View struct { + ipldStore cbor.IpldStore + root cid.Cid +} + +// NewView creates a new state view +func NewView(store cbor.IpldStore, root cid.Cid) *View { + return &View{ + ipldStore: store, + root: root, + } +} + +// InitNetworkName Returns the network name from the init actor state. +func (v *View) InitNetworkName(ctx context.Context) (string, error) { + initState, err := v.LoadInitState(ctx) + if err != nil { + return "", err + } + return initState.NetworkName() +} + +// InitResolveAddress Returns ID address if public key address is given. +func (v *View) InitResolveAddress(ctx context.Context, a addr.Address) (addr.Address, error) { + if a.Protocol() == addr.ID { + return a, nil + } + + initState, err := v.LoadInitState(ctx) + if err != nil { + return addr.Undef, err + } + rAddr, found, err := initState.ResolveAddress(a) + if err != nil { + return addr.Undef, err + } + + if !found { + return addr.Undef, xerrors.Errorf("not found resolve address") + } + + return rAddr, nil +} + +// ResolveToKeyAddr returns the public key type of address (`BLS`/`SECP256K1`) of an account actor identified by `addr`. +func (v *View) GetMinerWorkerRaw(ctx context.Context, maddr addr.Address) (addr.Address, error) { + minerState, err := v.LoadMinerState(ctx, maddr) + if err != nil { + return addr.Undef, err + } + + minerInfo, err := minerState.Info() + if err != nil { + return addr.Undef, err + } + return v.ResolveToKeyAddr(ctx, minerInfo.Worker) +} + +// MinerInfo returns info about the indicated miner +func (v *View) MinerInfo(ctx context.Context, maddr addr.Address, nv network.Version) (*miner.MinerInfo, error) { + minerState, err := v.LoadMinerState(ctx, maddr) + if err != nil { + return nil, err + } + + info, err := minerState.Info() + if err != nil { + return nil, err + } + + return &info, nil +} + +// Loads sector info from miner state. +func (v *View) MinerSectorInfo(ctx context.Context, maddr addr.Address, sectorNum abi.SectorNumber) (*miner.SectorOnChainInfo, error) { + minerState, err := v.LoadMinerState(ctx, maddr) + if err != nil { + return nil, err + } + + info, err := minerState.GetSector(sectorNum) + if err != nil { + return nil, err + } + + return info, nil +} + +//GetSectorsForWinningPoSt return sector of winning post challenge result +func (v *View) GetSectorsForWinningPoSt(ctx context.Context, nv network.Version, pv ffiwrapper.Verifier, maddr addr.Address, rand abi.PoStRandomness) ([]builtin.SectorInfo, error) { + mas, err := v.LoadMinerState(ctx, maddr) + if err != nil { + return nil, xerrors.Errorf("failed to load miner actor state: %s", err) + } + + var provingSectors bitfield.BitField + if nv < network.Version7 { + allSectors, err := miner.AllPartSectors(mas, miner.Partition.AllSectors) + if err != nil { + return nil, xerrors.Errorf("get all sectors: %v", err) + } + + faultySectors, err := miner.AllPartSectors(mas, miner.Partition.FaultySectors) + if err != nil { + return nil, xerrors.Errorf("get faulty sectors: %v", err) + } + + provingSectors, err = bitfield.SubtractBitField(allSectors, faultySectors) + if err != nil { + return nil, xerrors.Errorf("calc proving sectors: %v", err) + } + } else { + provingSectors, err = miner.AllPartSectors(mas, miner.Partition.ActiveSectors) + if err != nil { + return nil, xerrors.Errorf("get active sectors sectors: %v", err) + } + } + + numProvSect, err := provingSectors.Count() + if err != nil { + return nil, xerrors.Errorf("failed to count bits: %s", err) + } + + // TODO(review): is this right? feels fishy to me + if numProvSect == 0 { + return nil, nil + } + + info, err := mas.Info() + if err != nil { + return nil, xerrors.Errorf("getting miner info: %s", err) + } + + mid, err := addr.IDFromAddress(maddr) + if err != nil { + return nil, xerrors.Errorf("getting miner ID: %s", err) + } + + proofType, err := miner.WinningPoStProofTypeFromWindowPoStProofType(nv, info.WindowPoStProofType) + if err != nil { + return nil, xerrors.Errorf("determining winning post proof type: %v", err) + } + + ids, err := pv.GenerateWinningPoStSectorChallenge(ctx, proofType, abi.ActorID(mid), rand, numProvSect) + if err != nil { + return nil, xerrors.Errorf("generating winning post challenges: %s", err) + } + + iter, err := provingSectors.BitIterator() + if err != nil { + return nil, xerrors.Errorf("iterating over proving sectors: %s", err) + } + + // Select winning sectors by _index_ in the all-sectors bitfield. + selectedSectors := bitfield.New() + prev := uint64(0) + for _, n := range ids { + sno, err := iter.Nth(n - prev) + if err != nil { + return nil, xerrors.Errorf("iterating over proving sectors: %s", err) + } + selectedSectors.Set(sno) + prev = n + } + + sectors, err := mas.LoadSectors(&selectedSectors) + if err != nil { + return nil, xerrors.Errorf("loading proving sectors: %s", err) + } + + out := make([]builtin.SectorInfo, len(sectors)) + for i, sinfo := range sectors { + out[i] = builtin.SectorInfo{ + SealProof: sinfo.SealProof, + SectorNumber: sinfo.SectorNumber, + SealedCID: sinfo.SealedCID, + } + } + + return out, nil +} + +// StateSectorPreCommitInfo returns the PreCommit info for the specified miner's sector +func (v *View) SectorPreCommitInfo(ctx context.Context, maddr addr.Address, sid abi.SectorNumber) (*miner.SectorPreCommitOnChainInfo, error) { + mas, err := v.LoadMinerState(ctx, maddr) + if err != nil { + return nil, xerrors.Errorf("(get sset) failed to load miner actor: %v", err) + } + + return mas.GetPrecommittedSector(sid) +} + +// StateSectorPartition finds deadline/partition with the specified sector +func (v *View) StateSectorPartition(ctx context.Context, maddr addr.Address, sectorNumber abi.SectorNumber) (*miner.SectorLocation, error) { + mas, err := v.LoadMinerState(ctx, maddr) + if err != nil { + return nil, xerrors.Errorf("(get sset) failed to load miner actor: %v", err) + } + + return mas.FindSector(sectorNumber) +} + +// MinerDeadlineInfo returns information relevant to the current proving deadline +func (v *View) MinerDeadlineInfo(ctx context.Context, maddr addr.Address, epoch abi.ChainEpoch) (index uint64, open, close, challenge abi.ChainEpoch, _ error) { + minerState, err := v.LoadMinerState(ctx, maddr) + if err != nil { + return 0, 0, 0, 0, err + } + + deadlineInfo, err := minerState.DeadlineInfo(epoch) + if err != nil { + return 0, 0, 0, 0, err + } + + return deadlineInfo.Index, deadlineInfo.Open, deadlineInfo.Close, deadlineInfo.Challenge, nil +} + +// MinerExists Returns true iff the miner exists. +func (v *View) MinerExists(ctx context.Context, maddr addr.Address) (bool, error) { + _, err := v.LoadMinerState(ctx, maddr) + if err == nil { + return true, nil + } + if err == types.ErrActorNotFound { + return false, nil + } + return false, err +} + +// MinerGetPrecommittedSector Looks up info for a miners precommitted sector. +// NOTE: exposes on-chain structures directly for storage FSM API. +func (v *View) MinerGetPrecommittedSector(ctx context.Context, maddr addr.Address, sectorNum abi.SectorNumber) (*miner.SectorPreCommitOnChainInfo, bool, error) { + minerState, err := v.LoadMinerState(ctx, maddr) + if err != nil { + return nil, false, err + } + + info, err := minerState.GetPrecommittedSector(sectorNum) + if err != nil { + return nil, false, err + } + return info, true, nil +} + +// MarketEscrowBalance looks up a token amount in the escrow table for the given address +func (v *View) MarketEscrowBalance(ctx context.Context, addr addr.Address) (found bool, amount abi.TokenAmount, err error) { + marketState, err := v.LoadMarketState(ctx) + if err != nil { + return false, abi.NewTokenAmount(0), err + } + + state, err := marketState.EscrowTable() + if err != nil { + return false, abi.NewTokenAmount(0), err + } + + amount, err = state.Get(addr) + if err != nil { + return false, abi.NewTokenAmount(0), err + } + + return true, amount, nil +} + +// NOTE: exposes on-chain structures directly for storage FSM interface. +func (v *View) MarketDealProposal(ctx context.Context, dealID abi.DealID) (market.DealProposal, error) { + marketState, err := v.LoadMarketState(ctx) + if err != nil { + return market.DealProposal{}, err + } + + proposals, err := marketState.Proposals() + if err != nil { + return market.DealProposal{}, err + } + + // map deals to pieceInfo + proposal, bFound, err := proposals.Get(dealID) + if err != nil { + return market.DealProposal{}, err + } + + if !bFound { + return market.DealProposal{}, xerrors.Errorf("deal %d not found", dealID) + } + return *proposal, nil +} + +// NOTE: exposes on-chain structures directly for storage FSM and market module interfaces. +func (v *View) MarketDealState(ctx context.Context, dealID abi.DealID) (*market.DealState, bool, error) { + marketState, err := v.LoadMarketState(ctx) + if err != nil { + return nil, false, err + } + + deals, err := marketState.States() + if err != nil { + return nil, false, err + } + + return deals.Get(dealID) +} + +// NOTE: exposes on-chain structures directly for market interface. +// The callback receives a pointer to a transient object; take a copy or drop the reference outside the callback. +func (v *View) MarketDealStatesForEach(ctx context.Context, f func(id abi.DealID, state *market.DealState) error) error { + marketState, err := v.LoadMarketState(ctx) + if err != nil { + return err + } + + deals, err := marketState.States() + if err != nil { + return err + } + + ff := func(id abi.DealID, ds market.DealState) error { + return f(id, &ds) + } + if err := deals.ForEach(ff); err != nil { + return err + } + return nil +} + +// StateVerifiedClientStatus returns the data cap for the given address. +// Returns nil if there is no entry in the data cap table for the +// address. +func (v *View) StateVerifiedClientStatus(ctx context.Context, addr addr.Address) (abi.StoragePower, error) { + act, err := v.loadActor(ctx, verifreg.Address) + if err != nil { + return abi.NewStoragePower(0), err + } + + state, err := verifreg.Load(adt.WrapStore(ctx, v.ipldStore), act) + if err != nil { + return abi.NewStoragePower(0), err + } + + found, storagePower, err := state.VerifiedClientDataCap(addr) + if err != nil { + return abi.NewStoragePower(0), err + } + + if !found { + return abi.NewStoragePower(0), xerrors.New("address not found") + } + + return storagePower, nil +} + +// StateMarketStorageDeal returns information about the indicated deal +func (v *View) StateMarketStorageDeal(ctx context.Context, dealID abi.DealID) (*apitypes.MarketDeal, error) { + state, err := v.LoadMarketState(ctx) + if err != nil { + return nil, err + } + + dealProposals, err := state.Proposals() + if err != nil { + return nil, err + } + + dealProposal, found, err := dealProposals.Get(dealID) + if err != nil { + return nil, err + } + + if !found { + return nil, xerrors.New("deal proposal not found") + } + + dealStates, err := state.States() + if err != nil { + return nil, err + } + + dealState, found, err := dealStates.Get(dealID) + if err != nil { + return nil, err + } + + if !found { + return nil, xerrors.New("deal state not found") + } + + return &apitypes.MarketDeal{ + Proposal: *dealProposal, + State: *dealState, + }, nil +} + +// Returns the storage power actor's values for network total power. +func (v *View) PowerNetworkTotal(ctx context.Context) (*NetworkPower, error) { + st, err := v.LoadPowerActor(ctx) + if err != nil { + return nil, err + } + + tp, err := st.TotalPower() + if err != nil { + return nil, err + } + + minPowerMinerCount, minerCount, err := st.MinerCounts() + if err != nil { + return nil, err + } + + return &NetworkPower{ + RawBytePower: tp.RawBytePower, + QualityAdjustedPower: tp.QualityAdjPower, + MinerCount: int64(minerCount), + MinPowerMinerCount: int64(minPowerMinerCount), + }, nil +} + +// Returns the power of a miner's committed sectors. +func (v *View) MinerClaimedPower(ctx context.Context, miner addr.Address) (raw, qa abi.StoragePower, err error) { + st, err := v.LoadPowerActor(ctx) + if err != nil { + return big.Zero(), big.Zero(), err + } + + p, found, err := st.MinerPower(miner) + if err != nil { + return big.Zero(), big.Zero(), err + } + + if !found { + return big.Zero(), big.Zero(), xerrors.New("miner not found") + } + + return p.RawBytePower, p.QualityAdjPower, nil +} + +//MinerNominalPowerMeetsConsensusMinimum return whether miner meet consensus minmum power +func (v *View) MinerNominalPowerMeetsConsensusMinimum(ctx context.Context, addr addr.Address) (bool, error) { + st, err := v.LoadPowerActor(ctx) + if err != nil { + return false, err + } + + return st.MinerNominalPowerMeetsConsensusMinimum(addr) +} + +// PaychActorParties returns the From and To addresses for the given payment channel +func (v *View) PaychActorParties(ctx context.Context, paychAddr addr.Address) (from, to addr.Address, err error) { + a, err := v.loadActor(ctx, paychAddr) + if err != nil { + return addr.Undef, addr.Undef, err + } + + state, err := paychActor.Load(adt.WrapStore(ctx, v.ipldStore), a) + if err != nil { + return addr.Undef, addr.Undef, err + } + + from, err = state.From() + if err != nil { + return addr.Undef, addr.Undef, err + } + + to, err = state.To() + if err != nil { + return addr.Undef, addr.Undef, err + } + + return from, to, nil +} + +// StateMinerProvingDeadline calculates the deadline at some epoch for a proving period +// and returns the deadline-related calculations. +func (v *View) StateMinerProvingDeadline(ctx context.Context, addr addr.Address, ts *types.TipSet) (*dline.Info, error) { + mas, err := v.LoadMinerState(ctx, addr) + if err != nil { + return nil, xerrors.WithMessage(err, "failed to get proving dealline") + } + + height := ts.Height() + di, err := mas.DeadlineInfo(height) + if err != nil { + return nil, xerrors.Errorf("failed to get deadline info: %v", err) + } + + return di.NextNotElapsed(), nil +} + +// StateSectorExpiration returns epoch at which given sector will expire +func (v *View) StateSectorExpiration(ctx context.Context, maddr addr.Address, sectorNumber abi.SectorNumber, key types.TipSetKey) (*miner.SectorExpiration, error) { + mas, err := v.LoadMinerState(ctx, maddr) + if err != nil { + return nil, err + } + return mas.GetSectorExpiration(sectorNumber) +} + +// StateMinerAvailableBalance returns the portion of a miner's balance that can be withdrawn or spent +func (v *View) StateMinerAvailableBalance(ctx context.Context, maddr addr.Address, ts *types.TipSet) (big.Int, error) { + resolvedAddr, err := v.InitResolveAddress(ctx, maddr) + if err != nil { + return big.Int{}, err + } + actor, err := v.loadActor(ctx, resolvedAddr) + if err != nil { + return big.Int{}, err + } + + mas, err := miner.Load(adt.WrapStore(context.TODO(), v.ipldStore), actor) + if err != nil { + return big.Int{}, xerrors.Errorf("failed to load miner actor state: %v", err) + } + + height := ts.Height() + vested, err := mas.VestedFunds(height) + if err != nil { + return big.Int{}, err + } + + abal, err := mas.AvailableBalance(actor.Balance) + if err != nil { + return big.Int{}, err + } + + return big.Add(abal, vested), nil +} + +// StateListMiners returns the addresses of every miner that has claimed power in the Power Actor +func (v *View) StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]addr.Address, error) { + powState, err := v.LoadPowerActor(ctx) + if err != nil { + return nil, xerrors.Errorf("failed to load power actor state: %v", err) + } + + return powState.ListAllMiners() +} + +// StateMinerPower returns the power of the indicated miner +func (v *View) StateMinerPower(ctx context.Context, maddr addr.Address, tsk types.TipSetKey) (power.Claim, power.Claim, bool, error) { + pas, err := v.LoadPowerActor(ctx) + if err != nil { + return power.Claim{}, power.Claim{}, false, xerrors.Errorf("(get sset) failed to load power actor state: %v", err) + } + + tpow, err := pas.TotalPower() + if err != nil { + return power.Claim{}, power.Claim{}, false, err + } + + var mpow power.Claim + var minpow bool + if maddr != addr.Undef { + var found bool + mpow, found, err = pas.MinerPower(maddr) + if err != nil || !found { + // TODO: return an error when not found? + return power.Claim{}, tpow, false, err + } + + minpow, err = pas.MinerNominalPowerMeetsConsensusMinimum(maddr) + if err != nil { + return power.Claim{}, power.Claim{}, false, err + } + } + + return mpow, tpow, minpow, nil +} + +// StateMarketDeals returns information about every deal in the Storage Market +func (v *View) StateMarketDeals(ctx context.Context, tsk types.TipSetKey) (map[string]apitypes.MarketDeal, error) { + out := map[string]apitypes.MarketDeal{} + + state, err := v.LoadMarketState(ctx) + if err != nil { + return nil, err + } + + da, err := state.Proposals() + if err != nil { + return nil, err + } + + sa, err := state.States() + if err != nil { + return nil, err + } + + if err := da.ForEach(func(dealID abi.DealID, d market.DealProposal) error { + s, found, err := sa.Get(dealID) + if err != nil { + return xerrors.Errorf("failed to get state for deal in proposals array: %v", err) + } else if !found { + s = market.EmptyDealState() + } + out[strconv.FormatInt(int64(dealID), 10)] = apitypes.MarketDeal{ + Proposal: d, + State: *s, + } + return nil + }); err != nil { + return nil, err + } + return out, nil +} + +// StateMinerActiveSectors returns info about sectors that a given miner is actively proving. +func (v *View) StateMinerActiveSectors(ctx context.Context, maddr addr.Address, tsk types.TipSetKey) ([]*miner.SectorOnChainInfo, error) { + mas, err := v.LoadMinerState(ctx, maddr) + if err != nil { + return nil, xerrors.Errorf("failed to load miner actor state: %v", err) + } + activeSectors, err := miner.AllPartSectors(mas, miner.Partition.ActiveSectors) + if err != nil { + return nil, xerrors.Errorf("merge partition active sets: %v", err) + } + return mas.LoadSectors(&activeSectors) +} + +//GetFilLocked return all locked fil amount +func (v *View) GetFilLocked(ctx context.Context, st vmstate.Tree) (abi.TokenAmount, error) { + filMarketLocked, err := getFilMarketLocked(ctx, v.ipldStore, st) + if err != nil { + return big.Zero(), xerrors.Errorf("failed to get filMarketLocked: %v", err) + } + + powerState, err := v.LoadPowerActor(ctx) + if err != nil { + return big.Zero(), xerrors.Errorf("failed to get filPowerLocked: %v", err) + } + + filPowerLocked, err := powerState.TotalLocked() + if err != nil { + return big.Zero(), xerrors.Errorf("failed to get filPowerLocked: %v", err) + } + + return big.Add(filMarketLocked, filPowerLocked), nil +} + +//LoadActor load actor from tree +func (v *View) LoadActor(ctx context.Context, address addr.Address) (*types.Actor, error) { + return v.loadActor(ctx, address) +} + +// ResolveToKeyAddress is similar to `vm.ResolveToKeyAddr` but does not allow `Actor` type of addresses. +// Uses the `TipSet` `ts` to generate the VM state. +func (v *View) ResolveToKeyAddr(ctx context.Context, address addr.Address) (addr.Address, error) { + if address.Protocol() == addr.BLS || address.Protocol() == addr.SECP256K1 { + return address, nil + } + + act, err := v.LoadActor(context.TODO(), address) + if err != nil { + return addr.Undef, xerrors.Errorf("failed to find actor: %s", address) + } + + aast, err := account.Load(adt.WrapStore(context.TODO(), v.ipldStore), act) + if err != nil { + return addr.Undef, xerrors.Errorf("failed to get account actor state for %s: %v", address, err) + } + + return aast.PubkeyAddress() +} + +func (v *View) LoadInitState(ctx context.Context) (notinit.State, error) { + actr, err := v.loadActor(ctx, notinit.Address) + if err != nil { + return nil, err + } + + return notinit.Load(adt.WrapStore(ctx, v.ipldStore), actr) +} + +//LoadPaychState get pay channel state for actor +func (v *View) LoadPaychState(ctx context.Context, actor *types.Actor) (paychActor.State, error) { + return paychActor.Load(adt.WrapStore(context.TODO(), v.ipldStore), actor) +} + +//LoadMinerState return miner state +func (v *View) LoadMinerState(ctx context.Context, maddr addr.Address) (miner.State, error) { + resolvedAddr, err := v.InitResolveAddress(ctx, maddr) + if err != nil { + return nil, err + } + actr, err := v.loadActor(ctx, resolvedAddr) + if err != nil { + return nil, err + } + + return miner.Load(adt.WrapStore(context.TODO(), v.ipldStore), actr) +} + +func (v *View) LoadPowerActor(ctx context.Context) (power.State, error) { + actr, err := v.loadActor(ctx, power.Address) + if err != nil { + return nil, err + } + + return power.Load(adt.WrapStore(ctx, v.ipldStore), actr) +} + +func (v *View) LoadVerifregActor(ctx context.Context) (verifreg.State, error) { + actr, err := v.loadActor(ctx, verifreg.Address) + if err != nil { + return nil, err + } + + return verifreg.Load(adt.WrapStore(ctx, v.ipldStore), actr) +} + +// nolint +func (v *View) LoadRewardState(ctx context.Context) (reward.State, error) { + actr, err := v.loadActor(ctx, reward.Address) + if err != nil { + return nil, err + } + + return reward.Load(adt.WrapStore(ctx, v.ipldStore), actr) +} + +// nolint +func (v *View) LoadPowerState(ctx context.Context) (power.State, error) { + actr, err := v.loadActor(ctx, power.Address) + if err != nil { + return nil, err + } + + return power.Load(adt.WrapStore(ctx, v.ipldStore), actr) +} + +func (v *View) LoadMarketState(ctx context.Context) (market.State, error) { + actr, err := v.loadActor(ctx, market.Address) + if err != nil { + return nil, err + } + + return market.Load(adt.WrapStore(ctx, v.ipldStore), actr) +} + +// nolint +func (v *View) LoadAccountState(ctx context.Context, a addr.Address) (account.State, error) { + resolvedAddr, err := v.InitResolveAddress(ctx, a) + if err != nil { + return nil, err + } + actr, err := v.loadActor(ctx, resolvedAddr) + if err != nil { + return nil, err + } + + return account.Load(adt.WrapStore(context.TODO(), v.ipldStore), actr) +} + +//loadActor load actor of address in db +func (v *View) loadActor(ctx context.Context, address addr.Address) (*types.Actor, error) { + tree, err := vmstate.LoadState(ctx, v.ipldStore, v.root) + if err != nil { + return nil, err + } + actor, found, err := tree.GetActor(ctx, address) + if err != nil { + return nil, err + } + if !found { + return nil, xerrors.Wrapf(types.ErrActorNotFound, "address is :%s", address) + } + + return actor, err +} + +func getFilMarketLocked(ctx context.Context, ipldStore cbor.IpldStore, st vmstate.Tree) (abi.TokenAmount, error) { + mactor, found, err := st.GetActor(ctx, market.Address) + if !found || err != nil { + return big.Zero(), xerrors.Errorf("failed to load market actor: %v", err) + } + + mst, err := market.Load(adt.WrapStore(ctx, ipldStore), mactor) + if err != nil { + return big.Zero(), xerrors.Errorf("failed to load market state: %v", err) + } + + return mst.TotalLocked() +} + +// LookupID retrieves the ID address of the given address +func (v *View) LookupID(ctx context.Context, address addr.Address) (addr.Address, error) { + sTree, err := vmstate.LoadState(ctx, v.ipldStore, v.root) + if err != nil { + return addr.Address{}, err + } + + return sTree.LookupID(address) +} diff --git a/pkg/statemanger/call.go b/pkg/statemanger/call.go new file mode 100644 index 0000000000..24851d44d5 --- /dev/null +++ b/pkg/statemanger/call.go @@ -0,0 +1,216 @@ +package statemanger + +import ( + "context" + "fmt" + + "github.com/filecoin-project/venus/pkg/consensus" + "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + acrypto "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + xerrors "github.com/pkg/errors" + "go.opencensus.io/trace" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/fork" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/vm" +) + +// CallWithGas used to estimate message gaslimit, for each incoming message ,should execute after priorMsg in mpool +func (s *Stmgr) CallWithGas(ctx context.Context, msg *types.Message, priorMsgs []types.ChainMsg, ts *types.TipSet) (*vm.Ret, error) { + var ( + err error + stateRoot cid.Cid + view *state.View + ) + + if ts == nil { + ts = s.cs.GetHead() + // Search back till we find a height with no fork, or we reach the beginning. + // We need the _previous_ height to have no fork, because we'll + // run the fork logic in `sm.TipSetState`. We need the _current_ + // height to have no fork, because we'll run it inside this + // function before executing the given message. + for ts.Height() > 0 && (s.fork.HasExpensiveFork(ctx, ts.Height()) || s.fork.HasExpensiveFork(ctx, ts.Height()-1)) { + ts, err = s.cs.GetTipSet(ctx, ts.Parents()) + if err != nil { + return nil, xerrors.Errorf("failed to find a non-forking epoch: %v", err) + } + } + } + + // When we're not at the genesis block, make sure we don't have an expensive migration. + if ts.Height() > 0 && (s.fork.HasExpensiveFork(ctx, ts.Height()) || s.fork.HasExpensiveFork(ctx, ts.Height()-1)) { + return nil, fork.ErrExpensiveFork + } + + if stateRoot, view, err = s.StateView(ctx, ts); err != nil { + return nil, err + } + + vmOption := vm.VmOption{ + CircSupplyCalculator: func(ctx context.Context, epoch abi.ChainEpoch, tree tree.Tree) (abi.TokenAmount, error) { + cs, err := s.cs.GetCirculatingSupplyDetailed(ctx, epoch, tree) + if err != nil { + return abi.TokenAmount{}, err + } + return cs.FilCirculating, nil + }, + LookbackStateGetter: vmcontext.LookbackStateGetterForTipset(ctx, s.cs, s.fork, ts), + NtwkVersionGetter: s.fork.GetNtwkVersion, + Rnd: consensus.NewHeadRandomness(s.rnd, ts.Key()), + BaseFee: ts.At(0).ParentBaseFee, + Epoch: ts.Height(), + GasPriceSchedule: s.gasSchedule, + PRoot: stateRoot, + Bsstore: s.cs.Blockstore(), + SysCallsImpl: s.syscallsImpl, + Fork: s.fork, + } + + vmi, err := vm.NewVM(ctx, vmOption) + if err != nil { + return nil, err + } + + for i, m := range priorMsgs { + _, err := vmi.ApplyMessage(m) + if err != nil { + return nil, xerrors.Errorf("applying prior message (%d): %v", i, err) + } + } + + fromActor, found, err := vmi.StateTree().GetActor(ctx, msg.VMMessage().From) + if err != nil { + return nil, xerrors.Errorf("get actor failed: %s", err) + } + if !found { + return nil, xerrors.New("actor not found") + } + msg.Nonce = fromActor.Nonce + + fromKey, err := view.ResolveToKeyAddr(ctx, msg.VMMessage().From) + if err != nil { + return nil, xerrors.Errorf("could not resolve key: %v", err) + } + + var msgApply types.ChainMsg + switch fromKey.Protocol() { + case address.BLS: + msgApply = msg + case address.SECP256K1: + msgApply = &types.SignedMessage{ + Message: *msg, + Signature: acrypto.Signature{ + Type: crypto.SigTypeSecp256k1, + Data: make([]byte, 65), + }, + } + } + return vmi.ApplyMessage(msgApply) +} + +// Call used for api invoke to compute a msg base on specify tipset, if the tipset is null, use latest tipset in db +func (s *Stmgr) Call(ctx context.Context, msg *types.Message, ts *types.TipSet) (*vm.Ret, error) { + ctx, span := trace.StartSpan(ctx, "statemanager.Call") + defer span.End() + + // If no tipset is provided, try to find one without a fork. + var err error + if ts == nil { + ts = s.cs.GetHead() + + // Search back till we find a height with no fork, or we reach the beginning. + for ts.Height() > 0 && s.fork.HasExpensiveFork(ctx, ts.Height()-1) { + var err error + ts, err = s.cs.GetTipSet(ctx, ts.Parents()) + if err != nil { + return nil, xerrors.Errorf("failed to find a non-forking epoch: %v", err) + } + } + } + + pts, err := s.cs.GetTipSet(ctx, ts.Parents()) + if err != nil { + return nil, xerrors.Errorf("failed to load parent tipset: %v", err) + } + + bstate := ts.At(0).ParentStateRoot + pheight := pts.Height() + + // If we have to run an expensive migration, and we're not at genesis, + // return an error because the migration will take too long. + // + // We allow this at height 0 for at-genesis migrations (for testing). + if pheight > 0 && s.fork.HasExpensiveFork(ctx, pheight) { + return nil, consensus.ErrExpensiveFork + } + + // Run the (not expensive) migration. + bstate, err = s.fork.HandleStateForks(ctx, bstate, pheight, ts) + if err != nil { + return nil, fmt.Errorf("failed to handle fork: %v", err) + } + + if msg.GasLimit == 0 { + msg.GasLimit = constants.BlockGasLimit + } + + if msg.GasFeeCap == types.EmptyTokenAmount { + msg.GasFeeCap = abi.NewTokenAmount(0) + } + + if msg.GasPremium == types.EmptyTokenAmount { + msg.GasPremium = abi.NewTokenAmount(0) + } + + if msg.Value == types.EmptyTokenAmount { + msg.Value = abi.NewTokenAmount(0) + } + + st, err := tree.LoadState(ctx, cbor.NewCborStore(s.cs.Blockstore()), bstate) + if err != nil { + return nil, xerrors.Errorf("loading state: %v", err) + } + + fromActor, found, err := st.GetActor(ctx, msg.From) + if err != nil || !found { + return nil, xerrors.Errorf("call raw get actor: %s", err) + } + + msg.Nonce = fromActor.Nonce + + vmOption := vm.VmOption{ + CircSupplyCalculator: func(ctx context.Context, epoch abi.ChainEpoch, tree tree.Tree) (abi.TokenAmount, error) { + dertail, err := s.cs.GetCirculatingSupplyDetailed(ctx, epoch, tree) + if err != nil { + return abi.TokenAmount{}, err + } + return dertail.FilCirculating, nil + }, + LookbackStateGetter: vmcontext.LookbackStateGetterForTipset(ctx, s.cs, s.fork, ts), + NtwkVersionGetter: s.fork.GetNtwkVersion, + Rnd: consensus.NewHeadRandomness(s.rnd, ts.Key()), + BaseFee: ts.At(0).ParentBaseFee, + Epoch: pheight + 1, + GasPriceSchedule: s.gasSchedule, + Fork: s.fork, + PRoot: ts.At(0).ParentStateRoot, + Bsstore: s.cs.Blockstore(), + SysCallsImpl: s.syscallsImpl, + } + + v, err := vm.NewVM(ctx, vmOption) + if err != nil { + return nil, err + } + return v.ApplyImplicitMessage(msg) +} diff --git a/pkg/statemanger/state_manger.go b/pkg/statemanger/state_manger.go new file mode 100644 index 0000000000..c8e7b2f0bc --- /dev/null +++ b/pkg/statemanger/state_manger.go @@ -0,0 +1,444 @@ +package statemanger + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/consensus" + "github.com/filecoin-project/venus/pkg/fork" + appstate "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/pkg/vm/gas" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + logging "github.com/ipfs/go-log/v2" + "go.opencensus.io/trace" + "golang.org/x/xerrors" +) + +// stateManagerAPI defines the methods needed from StateManager +// todo remove this code and add private interface in market and paychanel package +type IStateManager interface { + ResolveToKeyAddress(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) + GetPaychState(ctx context.Context, addr address.Address, ts *types.TipSet) (*types.Actor, paych.State, error) + Call(ctx context.Context, msg *types.Message, ts *types.TipSet) (*vm.Ret, error) + GetMarketState(ctx context.Context, ts *types.TipSet) (market.State, error) +} + +type stateComputeResult struct { + stateRoot, receipt cid.Cid +} + +var _ IStateManager = &Stmgr{} + +type Stmgr struct { + cs *chain.Store + cp consensus.StateTransformer + rnd consensus.ChainRandomness + + fork fork.IFork + gasSchedule *gas.PricesSchedule + syscallsImpl vm.SyscallsImpl + + // Compute StateRoot parallel safe + stCache map[types.TipSetKey]stateComputeResult + chsWorkingOn map[types.TipSetKey]chan struct{} + stLk sync.Mutex + + fStop chan struct{} + fStopLk sync.Mutex + + log *logging.ZapEventLogger +} + +func NewStateManger(cs *chain.Store, cp consensus.StateTransformer, + rnd consensus.ChainRandomness, fork fork.IFork, gasSchedule *gas.PricesSchedule, + syscallsImpl vm.SyscallsImpl) *Stmgr { + logName := "statemanager" + + defer func() { + _ = logging.SetLogLevel(logName, "info") + }() + + return &Stmgr{cs: cs, fork: fork, cp: cp, rnd: rnd, + gasSchedule: gasSchedule, + syscallsImpl: syscallsImpl, + log: logging.Logger(logName), + stCache: make(map[types.TipSetKey]stateComputeResult), + chsWorkingOn: make(map[types.TipSetKey]chan struct{}, 1), + } +} + +func (s *Stmgr) ResolveToKeyAddress(ctx context.Context, addr address.Address, ts *types.TipSet) (address.Address, error) { + switch addr.Protocol() { + case address.BLS, address.SECP256K1: + return addr, nil + case address.Actor: + return address.Undef, xerrors.New("cannot resolve actor address to key address") + default: + } + if ts == nil { + ts = s.cs.GetHead() + } + _, view, err := s.ParentStateView(ctx, ts) + if err != nil { + return address.Undef, err + } + return view.ResolveToKeyAddr(ctx, addr) +} + +func (s *Stmgr) GetPaychState(ctx context.Context, addr address.Address, ts *types.TipSet) (*types.Actor, paych.State, error) { + _, view, err := s.ParentStateView(ctx, ts) + if err != nil { + return nil, nil, err + } + act, err := view.LoadActor(ctx, addr) + if err != nil { + return nil, nil, err + } + actState, err := view.LoadPaychState(ctx, act) + if err != nil { + return nil, nil, err + } + return act, actState, nil +} + +func (s *Stmgr) GetMarketState(ctx context.Context, ts *types.TipSet) (market.State, error) { + _, view, err := s.ParentStateView(ctx, ts) + if err != nil { + return nil, err + } + actState, err := view.LoadMarketState(ctx) + if err != nil { + return nil, err + } + return actState, nil +} + +func (s *Stmgr) ParentStateTsk(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, *tree.State, error) { + ts, err := s.cs.GetTipSet(ctx, tsk) + if err != nil { + return nil, nil, xerrors.Errorf("loading tipset %s: %w", tsk, err) + } + return s.ParentState(ctx, ts) +} + +func (s *Stmgr) ParentState(ctx context.Context, ts *types.TipSet) (*types.TipSet, *tree.State, error) { + if ts == nil { + ts = s.cs.GetHead() + } + parent, err := s.cs.GetTipSet(ctx, ts.Parents()) + if err != nil { + return nil, nil, xerrors.Errorf("find tipset(%s) parent failed:%w", + ts.Key().String(), err) + } + + if stateRoot, _, err := s.RunStateTransition(ctx, parent); err != nil { + return nil, nil, xerrors.Errorf("runstateTransition failed:%w", err) + } else if !stateRoot.Equals(ts.At(0).ParentStateRoot) { + return nil, nil, xerrors.Errorf("runstateTransition error, %w", consensus.ErrStateRootMismatch) + } + + state, err := tree.LoadState(ctx, s.cs.Store(ctx), ts.At(0).ParentStateRoot) + return parent, state, err +} + +func (s *Stmgr) TipsetStateTsk(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, *tree.State, error) { + ts, err := s.cs.GetTipSet(ctx, tsk) + if err != nil { + return nil, nil, xerrors.Errorf("load tipset(%s) failed:%v", + tsk.String(), err) + } + stat, err := s.TipsetState(ctx, ts) + if err != nil { + return nil, nil, xerrors.Errorf("load tipset(%s, %d) state failed:%v", + ts.String(), ts.Height(), err) + } + return ts, stat, nil +} + +func (s *Stmgr) TipsetState(ctx context.Context, ts *types.TipSet) (*tree.State, error) { + root, _, err := s.RunStateTransition(ctx, ts) + if err != nil { + return nil, err + } + return tree.LoadState(ctx, s.cs.Store(ctx), root) +} + +// deprecated: this implementation needs more considerations +func (s *Stmgr) Rollback(ctx context.Context, pts, cts *types.TipSet) error { + s.log.Infof("rollback chain head from(%d) to a valid tipset", pts.Height()) +redo: + s.stLk.Lock() + if err := s.cs.DeleteTipSetMetadata(ctx, pts); err != nil { + s.stLk.Unlock() + return err + } + if err := s.cs.SetHead(ctx, pts); err != nil { + s.stLk.Unlock() + return err + } + s.stLk.Unlock() + + if root, _, err := s.RunStateTransition(ctx, pts); err != nil { + return err + } else if !root.Equals(cts.At(0).ParentStateRoot) { + cts = pts + if pts, err = s.cs.GetTipSet(ctx, cts.Parents()); err != nil { + return err + } + goto redo + } + return nil +} + +func (s *Stmgr) RunStateTransition(ctx context.Context, ts *types.TipSet) (root cid.Cid, receipts cid.Cid, err error) { + if nil != s.stopFlag(false) { + return cid.Undef, cid.Undef, fmt.Errorf("state manager is stopping") + } + ctx, span := trace.StartSpan(ctx, "Exected.RunStateTransition") + defer span.End() + + key := ts.Key() + s.stLk.Lock() + + workingCh, exist := s.chsWorkingOn[key] + + if exist { + s.stLk.Unlock() + waitDur := time.Second * 10 + i := 0 + longTimeWait: + select { + case <-workingCh: + s.stLk.Lock() + case <-ctx.Done(): + return cid.Undef, cid.Undef, ctx.Err() + case <-time.After(waitDur): + i++ + s.log.Warnf("waiting runstatetransition(%d, %s) for %s", ts.Height(), ts.Key().String(), (waitDur * time.Duration(i)).String()) + goto longTimeWait + } + } + + if meta, _ := s.cs.GetTipsetMetadata(ctx, ts); meta != nil { + s.stLk.Unlock() + return meta.TipSetStateRoot, meta.TipSetReceipts, nil + } + + workingCh = make(chan struct{}) + s.chsWorkingOn[key] = workingCh + s.stLk.Unlock() + + defer func() { + s.stLk.Lock() + delete(s.chsWorkingOn, key) + if f := s.stopFlag(false); f != nil && len(s.chsWorkingOn) == 0 { + f <- struct{}{} + } + if err == nil { + err = s.cs.PutTipSetMetadata(ctx, &chain.TipSetMetadata{ + TipSetStateRoot: root, TipSet: ts, TipSetReceipts: receipts}) + } + s.stLk.Unlock() + close(workingCh) + }() + + if ts.Height() == 0 { + return ts.Blocks()[0].ParentStateRoot, ts.Blocks()[0].ParentMessageReceipts, nil + } + + if root, receipts, err = s.cp.RunStateTransition(ctx, ts); err != nil { + return cid.Undef, cid.Undef, err + } + + return root, receipts, nil +} + +// ctx context.Context, ts *types.TipSet, addr address.Address +func (s *Stmgr) GetActorAtTsk(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*types.Actor, error) { + ts, err := s.cs.GetTipSet(ctx, tsk) + if err != nil { + return nil, err + } + return s.GetActorAt(ctx, addr, ts) +} + +func (s *Stmgr) GetActorAt(ctx context.Context, addr address.Address, ts *types.TipSet) (*types.Actor, error) { + if addr.Empty() { + return nil, types.ErrActorNotFound + } + + _, state, err := s.ParentState(ctx, ts) + if err != nil { + return nil, err + } + + actor, find, err := state.GetActor(ctx, addr) + if err != nil { + return nil, err + } + + if !find { + return nil, types.ErrActorNotFound + } + return actor, nil +} + +// deprecated: in future use. +func (s *Stmgr) RunStateTransitionV2(ctx context.Context, ts *types.TipSet) (cid.Cid, cid.Cid, error) { + ctx, span := trace.StartSpan(ctx, "Exected.RunStateTransition") + defer span.End() + + var state stateComputeResult + var err error + key := ts.Key() + s.stLk.Lock() + + cmptCh, exist := s.chsWorkingOn[key] + + if exist { + s.stLk.Unlock() + select { + case <-cmptCh: + s.stLk.Lock() + case <-ctx.Done(): + return cid.Undef, cid.Undef, ctx.Err() + } + } + + if state, exist = s.stCache[key]; exist { + s.stLk.Unlock() + return state.stateRoot, state.receipt, nil + } + + if meta, _ := s.cs.GetTipsetMetadata(ctx, ts); meta != nil { + s.stLk.Unlock() + return meta.TipSetStateRoot, meta.TipSetReceipts, nil + } + + cmptCh = make(chan struct{}) + s.chsWorkingOn[key] = cmptCh + s.stLk.Unlock() + + defer func() { + s.stLk.Lock() + delete(s.chsWorkingOn, key) + if !state.stateRoot.Equals(cid.Undef) { + s.stCache[key] = state + } + s.stLk.Unlock() + close(cmptCh) + }() + + if ts.Height() == 0 { + return ts.Blocks()[0].ParentStateRoot, ts.Blocks()[0].ParentMessageReceipts, nil + } + + if state.stateRoot, state.receipt, err = s.cp.RunStateTransition(ctx, ts); err != nil { + return cid.Undef, cid.Undef, err + } else if err = s.cs.PutTipSetMetadata(ctx, &chain.TipSetMetadata{ + TipSet: ts, + TipSetStateRoot: state.stateRoot, + TipSetReceipts: state.receipt, + }); err != nil { + return cid.Undef, cid.Undef, err + } + + return state.stateRoot, state.receipt, nil +} + +func (s *Stmgr) ParentStateViewTsk(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, *appstate.View, error) { + ts, err := s.cs.GetTipSet(ctx, tsk) + if err != nil { + return nil, nil, err + } + return s.ParentStateView(ctx, ts) +} + +func (s *Stmgr) ParentStateView(ctx context.Context, ts *types.TipSet) (*types.TipSet, *appstate.View, error) { + if ts == nil { + ts = s.cs.GetHead() + } + parent, err := s.cs.GetTipSet(ctx, ts.Parents()) + if err != nil { + return nil, nil, err + } + + _, view, err := s.StateView(ctx, parent) + if err != nil { + return nil, nil, xerrors.Errorf("StateView failed:%w", err) + } + return parent, view, nil +} + +func (s *Stmgr) StateViewTsk(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, cid.Cid, *appstate.View, error) { + ts, err := s.cs.GetTipSet(ctx, tsk) + if err != nil { + return nil, cid.Undef, nil, err + } + root, view, err := s.StateView(ctx, ts) + return ts, root, view, err +} + +func (s *Stmgr) StateView(ctx context.Context, ts *types.TipSet) (cid.Cid, *appstate.View, error) { + stateCid, _, err := s.RunStateTransition(ctx, ts) + if err != nil { + return cid.Undef, nil, err + } + + view, err := s.cs.StateView(ctx, ts) + if err != nil { + return cid.Undef, nil, err + } + return stateCid, view, nil +} + +func (s *Stmgr) FlushChainHead() (*types.TipSet, error) { + head := s.cs.GetHead() + _, _, err := s.RunStateTransition(context.TODO(), head) + return head, err +} + +func (s *Stmgr) Close(ctx context.Context) { + s.log.Info("waiting state manager stop...") + + if _, err := s.FlushChainHead(); err != nil { + s.log.Errorf("state manager flush chain head failed:%s", err.Error()) + } else { + s.log.Infof("state manager flush chain head successfully...") + } + + s.log.Info("waiting state manager stopping...") + f := s.stopFlag(true) + select { + case <-f: + s.log.Info("state manager stopped...") + case <-time.After(time.Minute): + s.log.Info("waiting state manager stop timeout...") + } +} + +func (s *Stmgr) stopFlag(setFlag bool) chan struct{} { + s.fStopLk.Lock() + defer s.fStopLk.Unlock() + + if s.fStop == nil && setFlag { + s.fStop = make(chan struct{}, 1) + + s.stLk.Lock() + if len(s.chsWorkingOn) == 0 { + s.fStop <- struct{}{} + } + s.stLk.Unlock() + } + + return s.fStop +} diff --git a/pkg/testhelpers/address.go b/pkg/testhelpers/address.go new file mode 100644 index 0000000000..0045415733 --- /dev/null +++ b/pkg/testhelpers/address.go @@ -0,0 +1,31 @@ +package testhelpers + +import ( + "fmt" + "testing" + + "github.com/filecoin-project/go-address" +) + +func RequireIDAddress(t *testing.T, i int) address.Address { + a, err := address.NewIDAddress(uint64(i)) + if err != nil { + t.Fatalf("failed to make address: %v", err) + } + return a +} + +// NewForTestGetter returns a closure that returns an address unique to that invocation. +// The address is unique wrt the closure returned, not globally. +func NewForTestGetter() func() address.Address { + i := 0 + return func() address.Address { + s := fmt.Sprintf("address%d", i) + i++ + newAddr, err := address.NewSecp256k1Address([]byte(s)) + if err != nil { + panic(err) + } + return newAddr + } +} diff --git a/pkg/testhelpers/cid.go b/pkg/testhelpers/cid.go new file mode 100644 index 0000000000..5af7ca0203 --- /dev/null +++ b/pkg/testhelpers/cid.go @@ -0,0 +1,68 @@ +package testhelpers + +import ( + "context" + "testing" + + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + cbor "github.com/ipfs/go-ipld-cbor" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/specs-actors/actors/util/adt" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// EmptyMessagesCID is the cid of an empty collection of messages. +var EmptyMessagesCID cid.Cid + +// EmptyReceiptsCID is the cid of an empty collection of receipts. +var EmptyReceiptsCID cid.Cid + +// EmptyTxMetaCID is the cid of a TxMeta wrapping empty cids +var EmptyTxMetaCID cid.Cid + +func init() { + tmpCst := cbor.NewCborStore(blockstoreutil.NewBlockstore(datastore.NewMapDatastore())) + emptyAmt := adt.MakeEmptyArray(adt.WrapStore(context.Background(), tmpCst)) + emptyAMTCid, err := emptyAmt.Root() + if err != nil { + panic("could not create CID for empty AMT") + } + + EmptyMessagesCID = emptyAMTCid + EmptyReceiptsCID = emptyAMTCid + EmptyTxMetaCID, err = tmpCst.Put(context.Background(), &types.MessageRoot{SecpkRoot: EmptyMessagesCID, BlsRoot: EmptyMessagesCID}) + if err != nil { + panic("could not create CID for empty TxMeta") + } +} + +// CidFromString generates Cid from string input +func CidFromString(t *testing.T, input string) cid.Cid { + c, err := constants.DefaultCidBuilder.Sum([]byte(input)) + require.NoError(t, err) + return c +} + +// HasCid allows two values with CIDs to be compared. +type HasCid interface { + Cid() cid.Cid +} + +// AssertHaveSameCid asserts that two values have identical CIDs. +func AssertHaveSameCid(t *testing.T, m HasCid, n HasCid) { + if !m.Cid().Equals(n.Cid()) { + assert.Fail(t, "CIDs don't match", "not equal %v %v", m.Cid(), n.Cid()) + } +} + +// AssertCidsEqual asserts that two CIDS are identical. +func AssertCidsEqual(t *testing.T, m cid.Cid, n cid.Cid) { + if !m.Equals(n) { + assert.Fail(t, "CIDs don't match", "not equal %v %v", m, n) + } +} diff --git a/pkg/testhelpers/consensus.go b/pkg/testhelpers/consensus.go new file mode 100644 index 0000000000..243ca54f17 --- /dev/null +++ b/pkg/testhelpers/consensus.go @@ -0,0 +1,70 @@ +package testhelpers + +import ( + "context" + + pubsub "github.com/libp2p/go-libp2p-pubsub" + + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" +) + +// FakeBlockValidator passes everything as valid +type FakeBlockValidator struct{} + +// NewFakeBlockValidator createas a FakeBlockValidator that passes everything as valid. +func NewFakeBlockValidator() *FakeBlockValidator { + return &FakeBlockValidator{} +} + +// ValidateHeaderSemantic does nothing. +func (fbv *FakeBlockValidator) ValidateHeaderSemantic(ctx context.Context, child *types.BlockHeader, parents types.TipSet) error { + return nil +} + +// ValidateSyntax does nothing. +func (fbv *FakeBlockValidator) ValidateSyntax(ctx context.Context, blk *types.BlockHeader) error { + return nil +} + +// ValidateMessagesSyntax does nothing +func (fbv *FakeBlockValidator) ValidateMessagesSyntax(ctx context.Context, messages []*types.SignedMessage) error { + return nil +} + +// ValidateUnsignedMessagesSyntax does nothing +func (fbv *FakeBlockValidator) ValidateUnsignedMessagesSyntax(ctx context.Context, messages []*types.Message) error { + return nil +} + +// ValidateReceiptsSyntax does nothing +func (fbv *FakeBlockValidator) ValidateReceiptsSyntax(ctx context.Context, receipts []types.MessageReceipt) error { + return nil +} + +// StubBlockValidator is a mockable block validator. +type StubBlockValidator struct { + syntaxStubs map[cid.Cid]error +} + +// NewStubBlockValidator creates a StubBlockValidator that allows errors to configured +// for blocks passed to the Validate* methods. +func NewStubBlockValidator() *StubBlockValidator { + return &StubBlockValidator{ + syntaxStubs: make(map[cid.Cid]error), + } +} + +// ValidateSyntax return nil or error for stubbed block `blk`. +func (mbv *StubBlockValidator) ValidateBlockMsg(ctx context.Context, blk *types.BlockMsg) pubsub.ValidationResult { + if mbv.syntaxStubs[blk.Header.Cid()] == nil { + return pubsub.ValidationAccept + } + return pubsub.ValidationReject +} + +// StubSyntaxValidationForBlock stubs an error when the ValidateSyntax is called +// on the with the given block. +func (mbv *StubBlockValidator) StubSyntaxValidationForBlock(blk *types.BlockHeader, err error) { + mbv.syntaxStubs[blk.Cid()] = err +} diff --git a/pkg/testhelpers/core.go b/pkg/testhelpers/core.go new file mode 100644 index 0000000000..4811048d78 --- /dev/null +++ b/pkg/testhelpers/core.go @@ -0,0 +1,98 @@ +package testhelpers + +import ( + "context" + "errors" + "math/rand" + "testing" + + "github.com/filecoin-project/go-state-types/abi" + fbig "github.com/filecoin-project/go-state-types/big" + acrypto "github.com/filecoin-project/go-state-types/crypto" + + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/stretchr/testify/require" + + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +// RequireMakeStateTree takes a map of addresses to actors and stores them on +// the state tree, requiring that all its steps succeed. +//func RequireMakeStateTree(t *testing.T, cst cbor.IpldStore, acts map[address.Address]*types.Actor) (cid.Cid, *tree.State) { +// ctx := context.Background() +// tree, err := tree.NewState(cst, tree.StateTreeVersion0) +// if err != nil { +// t.Fatal(err) +// } +// +// for addr, act := range acts { +// err := tree.SetActor(ctx, addr, act) +// require.NoError(t, err) +// } +// +// c, err := tree.Flush(ctx) +// require.NoError(t, err) +// +// return c, tree +//} + +// RequireRandomPeerID returns a new libp2p peer ID or panics. +func RequireRandomPeerID(t *testing.T) peer.ID { + pid, err := RandPeerID() + require.NoError(t, err) + return pid +} + +// MockMessagePoolValidator is a mock validator +type MockMessagePoolValidator struct { + Valid bool +} + +// NewMockMessagePoolValidator creates a MockMessagePoolValidator +func NewMockMessagePoolValidator() *MockMessagePoolValidator { + return &MockMessagePoolValidator{Valid: true} +} + +// Validate returns true if the mock validator is set to validate the message +func (v *MockMessagePoolValidator) ValidateSignedMessageSyntax(ctx context.Context, msg *types.SignedMessage) error { + if v.Valid { + return nil + } + return errors.New("mock validation error") +} + +// RequireTipset is a helper that constructs a tipset +func RequireTipset(t *testing.T) *types.TipSet { + return RequireTipsetWithHeight(t, abi.ChainEpoch(rand.Int())) +} + +func RequireTipsetWithHeight(t *testing.T, height abi.ChainEpoch) *types.TipSet { + newAddress := NewForTestGetter() + blk := &types.BlockHeader{ + Miner: newAddress(), + Ticket: &types.Ticket{VRFProof: []byte{0x03, 0x01, 0x02}}, + ElectionProof: &types.ElectionProof{VRFProof: []byte{0x0c, 0x0d}}, + BeaconEntries: []types.BeaconEntry{ + { + Round: 44, + Data: []byte{0xc0}, + }, + }, + Height: height, + Messages: CidFromString(t, "someothercid"), + ParentMessageReceipts: CidFromString(t, "someothercid"), + Parents: []cid.Cid{CidFromString(t, "someothercid")}, + ParentWeight: fbig.NewInt(1), + ForkSignaling: 2, + ParentStateRoot: CidFromString(t, "someothercid"), + Timestamp: 4, + ParentBaseFee: abi.NewTokenAmount(20), + BlockSig: &acrypto.Signature{ + Type: acrypto.SigTypeBLS, + Data: []byte{0x4}, + }, + } + b, _ := types.NewTipSet([]*types.BlockHeader{blk}) + return b +} diff --git a/pkg/testhelpers/iptbtester/genesis.go b/pkg/testhelpers/iptbtester/genesis.go new file mode 100644 index 0000000000..15be5506cb --- /dev/null +++ b/pkg/testhelpers/iptbtester/genesis.go @@ -0,0 +1,172 @@ +package iptbtester + +import ( + "context" + "encoding/json" + "fmt" + "io/ioutil" + "os" + "strconv" + "testing" + "time" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/cmd" + + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/constants" + gengen "github.com/filecoin-project/venus/tools/gengen/util" +) + +// GenesisInfo chains require information to start a single node with funds +type GenesisInfo struct { + GenesisFile string + KeyFile string + WalletAddress string + MinerAddress string + SectorsDir string + PresealedSectorDir string +} + +type idResult struct { + ID string +} + +// RequireGenesisFromSetup constructs the required information and files to build a single +// filecoin node from a genesis configuration file. The GenesisInfo can be used with MustImportGenesisMiner +func RequireGenesisFromSetup(t *testing.T, dir string, setupPath string) *GenesisInfo { + cfg := ReadSetup(t, setupPath) + return RequireGenesis(t, dir, cfg) +} + +// RequireGenerateGenesis constructs the required information and files to build a single +// filecoin node with the provided funds. The GenesisInfo can be used with MustImportGenesisMiner +func RequireGenerateGenesis(t *testing.T, funds int64, dir string, genesisTime time.Time) *GenesisInfo { + // Setup, generate a genesis and key file + commCfgs, err := gengen.MakeCommitCfgs(1) + require.NoError(t, err) + cfg := &gengen.GenesisCfg{ + Seed: 0, + KeysToGen: 1, + PreallocatedFunds: []string{ + strconv.FormatInt(funds, 10), + }, + Miners: []*gengen.CreateStorageMinerConfig{ + { + Owner: 0, + CommittedSectors: commCfgs, + SealProofType: constants.DevSealProofType, + MarketBalance: abi.NewTokenAmount(0), + }, + }, + Network: "gfctest", + Time: uint64(genesisTime.Unix()), + } + + return RequireGenesis(t, dir, cfg) +} + +// ReadSetup reads genesis config from a setup file +func ReadSetup(t *testing.T, setupPath string) *gengen.GenesisCfg { + configFile, err := os.Open(setupPath) + if err != nil { + t.Errorf("failed to open config file %s: %s", setupPath, err) + } + defer configFile.Close() // nolint: errcheck + + var cfg gengen.GenesisCfg + if err := json.NewDecoder(configFile).Decode(&cfg); err != nil { + t.Errorf("failed to parse config: %s", err) + } + return &cfg +} + +// RequireGenesis generates a genesis block and metadata from config +func RequireGenesis(t *testing.T, dir string, cfg *gengen.GenesisCfg) *GenesisInfo { + genfile, err := ioutil.TempFile(dir, "genesis.*.car") + if err != nil { + t.Fatal(err) + } + + keyfile, err := ioutil.TempFile(dir, "wallet.*.key") + if err != nil { + t.Fatal(err) + } + + info, err := gengen.GenGenesisCar(cfg, genfile) + if err != nil { + t.Fatal(err) + } + + minerCfg := info.Miners[0] + minerKeyIndex := minerCfg.Owner + + var wsr cmd.WalletSerializeResult + wsr.KeyInfo = append(wsr.KeyInfo, info.Keys[minerKeyIndex]) + if err := json.NewEncoder(keyfile).Encode(wsr); err != nil { + t.Fatal(err) + } + + walletAddr, err := info.Keys[minerKeyIndex].Address() + if err != nil { + t.Fatal(err) + } + + minerAddr := minerCfg.Address + + return &GenesisInfo{ + GenesisFile: genfile.Name(), + KeyFile: keyfile.Name(), + WalletAddress: walletAddr.String(), + MinerAddress: minerAddr.String(), + } +} + +// MustImportGenesisMiner configures a node from the GenesisInfo and starts it mining. +// The node should already be initialized with the GenesisFile, and be should started. +func MustImportGenesisMiner(tn *TestNode, gi *GenesisInfo) { + ctx := context.Background() + + tn.MustRunCmd(ctx, "venus", "config", "mining.minerAddress", fmt.Sprintf("\"%s\"", gi.MinerAddress)) + + tn.MustRunCmd(ctx, "venus", "wallet", "import", gi.KeyFile) + + tn.MustRunCmd(ctx, "venus", "config", "walletModule.defaultAddress", fmt.Sprintf("\"%s\"", gi.WalletAddress)) + + // Get node id + id := idResult{} + tn.MustRunCmdJSON(ctx, &id, "venus", "id") + + // Update miner + tn.MustRunCmd(ctx, "venus", "miner", "update-peerid", "--from="+gi.WalletAddress, "--gas-price=1", "--gas-limit=300", gi.MinerAddress, id.ID) +} + +// MustInitWithGenesis init TestNode, passing in the `--genesisfile` flag, by calling MustInit +func (tn *TestNode) MustInitWithGenesis(ctx context.Context, genesisinfo *GenesisInfo, args ...string) *TestNode { + genesisfileFlag := fmt.Sprintf("--genesisfile=%s", genesisinfo.GenesisFile) + args = append(args, genesisfileFlag) + + if genesisinfo.KeyFile != "" { + keyfileFlag := fmt.Sprintf("--wallet-keyfile=%s", genesisinfo.KeyFile) + args = append(args, keyfileFlag) + } + + if genesisinfo.MinerAddress != "" { + minerActorAddressFlag := fmt.Sprintf("--miner-actor-address=%s", genesisinfo.MinerAddress) + args = append(args, minerActorAddressFlag) + } + + if genesisinfo.PresealedSectorDir != "" { + presealedSectorDirFlag := fmt.Sprintf("--presealed-sectordir=%s", genesisinfo.PresealedSectorDir) + args = append(args, presealedSectorDirFlag) + } + + if genesisinfo.SectorsDir != "" { + sectorDirFlag := fmt.Sprintf("--sectordir=%s", genesisinfo.SectorsDir) + args = append(args, sectorDirFlag) + } + + tn.MustInit(ctx, args...) + return tn +} diff --git a/internal/pkg/testhelpers/iptbtester/wrapper.go b/pkg/testhelpers/iptbtester/wrapper.go similarity index 97% rename from internal/pkg/testhelpers/iptbtester/wrapper.go rename to pkg/testhelpers/iptbtester/wrapper.go index b4654067ae..e6090db46b 100644 --- a/internal/pkg/testhelpers/iptbtester/wrapper.go +++ b/pkg/testhelpers/iptbtester/wrapper.go @@ -15,9 +15,9 @@ import ( iptb "github.com/ipfs/iptb/testbed" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" + th "github.com/filecoin-project/venus/pkg/testhelpers" - localplugin "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/local" + localplugin "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin/local" ) var log = logging.Logger("iptbtester") diff --git a/pkg/testhelpers/message.go b/pkg/testhelpers/message.go new file mode 100644 index 0000000000..f11fc860c1 --- /dev/null +++ b/pkg/testhelpers/message.go @@ -0,0 +1,295 @@ +package testhelpers + +import ( + "context" + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/crypto" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/constants" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" +) + +// NewMessage creates a new message. +func NewMessage(from, to address.Address, nonce uint64, value abi.TokenAmount, method abi.MethodNum, params []byte) *types.Message { + return &types.Message{ + Version: 0, + To: to, + From: from, + Nonce: nonce, + Value: value, + Method: method, + Params: params, + } +} + +// NewMeteredMessage adds gas price and gas limit to the message +func NewMeteredMessage(from, to address.Address, nonce uint64, value abi.TokenAmount, method abi.MethodNum, params []byte, gasFeeCap, gasPremium abi.TokenAmount, limit int64) *types.Message { + return &types.Message{ + Version: 0, + To: to, + From: from, + Nonce: nonce, + Value: value, + GasFeeCap: gasFeeCap, + GasPremium: gasPremium, + GasLimit: limit, + Method: method, + Params: params, + } +} + +// NewSignedMessage accepts a message `msg` and a signer `s`. NewSignedMessage returns a `SignedMessage` containing +// a signature derived from the serialized `msg` and `msg.From` +// NOTE: this method can only sign message with From being a public-key type address, not an ID address. +// We should deprecate this and move to more explicit signing via an address resolver. +func NewSignedMessage(ctx context.Context, msg types.Message, s types.Signer) (*types.SignedMessage, error) { + msgCid := msg.Cid() + + sig, err := s.SignBytes(ctx, msgCid.Bytes(), msg.From) + if err != nil { + return nil, err + } + + return &types.SignedMessage{ + Message: msg, + Signature: *sig, + }, nil +} + +// NewSignedMessageForTestGetter returns a closure that returns a SignedMessage unique to that invocation. +// The message is unique wrt the closure returned, not globally. You can use this function +// in tests instead of manually creating messages -- it both reduces duplication and gives us +// exactly one place to create valid messages for tests if messages require validation in the +// future. +// TODO support chosing from address +func NewSignedMessageForTestGetter(ms MockSigner) func(uint64) *types.SignedMessage { + i := 0 + return func(nonce uint64) *types.SignedMessage { + s := fmt.Sprintf("smsg%d", i) + i++ + newAddr, err := address.NewSecp256k1Address([]byte(s + "-to")) + if err != nil { + panic(err) + } + msg := NewMeteredMessage( + ms.Addresses[0], // from needs to be an address from the signer + newAddr, + nonce, + types.ZeroFIL, + 0, + []byte("params"), + types.ZeroFIL, + types.ZeroFIL, + 0, + ) + smsg, err := NewSignedMessage(context.TODO(), *msg, &ms) + if err != nil { + panic(err) + } + return smsg + } +} + +// NewCidForTestGetter returns a closure that returns a Cid unique to that invocation. +// The Cid is unique wrt the closure returned, not globally. You can use this function +// in tests. +func NewCidForTestGetter() func() cid.Cid { + i := 31337 + return func() cid.Cid { + obj, err := cbor.WrapObject([]int{i}, constants.DefaultHashFunction, -1) + if err != nil { + panic(err) + } + i++ + return obj.Cid() + } +} + +// NewMessageForTestGetter returns a closure that returns a message unique to that invocation. +// The message is unique wrt the closure returned, not globally. You can use this function +// in tests instead of manually creating messages -- it both reduces duplication and gives us +// exactly one place to create valid messages for tests if messages require validation in the +// future. +func NewMessageForTestGetter() func() *types.Message { + i := 0 + return func() *types.Message { + s := fmt.Sprintf("msg%d", i) + i++ + from, err := address.NewSecp256k1Address([]byte(s + "-from")) + if err != nil { + panic(err) + } + to, err := address.NewSecp256k1Address([]byte(s + "-to")) + if err != nil { + panic(err) + } + return NewMessage( + from, + to, + 0, + types.ZeroFIL, + abi.MethodNum(10000+i), + nil) + } +} + +// NewMsgs returns n messages. The messages returned are unique to this invocation +// but are not unique globally (ie, a second call to NewMsgs will return the same +// set of messages). +func NewMsgs(n int) []*types.Message { + newMsg := NewMessageForTestGetter() + msgs := make([]*types.Message, n) + for i := 0; i < n; i++ { + msgs[i] = newMsg() + msgs[i].Nonce = uint64(i) + } + return msgs +} + +// NewSignedMsgs returns n signed messages. The messages returned are unique to this invocation +// but are not unique globally (ie, a second call to NewSignedMsgs will return the same +// set of messages). +func NewSignedMsgs(n uint, ms MockSigner) []*types.SignedMessage { + var err error + newMsg := NewMessageForTestGetter() + smsgs := make([]*types.SignedMessage, n) + for i := uint(0); i < n; i++ { + msg := newMsg() + msg.From = ms.Addresses[0] + msg.Nonce = uint64(i) + msg.GasFeeCap = types.ZeroFIL + msg.GasPremium = types.ZeroFIL + msg.GasLimit = 0 + smsgs[i], err = NewSignedMessage(context.TODO(), *msg, ms) + if err != nil { + panic(err) + } + } + return smsgs +} + +// SignMsgs returns a slice of signed messages where the original messages +// are `msgs`, if signing one of the `msgs` fails an error is returned +func SignMsgs(ms MockSigner, msgs []*types.Message) ([]*types.SignedMessage, error) { + var smsgs []*types.SignedMessage + for _, m := range msgs { + s, err := NewSignedMessage(context.TODO(), *m, ms) + if err != nil { + return nil, err + } + smsgs = append(smsgs, s) + } + return smsgs, nil +} + +// NewMsgsWithAddrs returns a slice of `n` messages who's `From` field's are pulled +// from `a`. This method should be used when the addresses returned are to be signed +// at a later point. +func NewMsgsWithAddrs(n int, a []address.Address) []*types.Message { + if n > len(a) { + panic("cannot create more messages than there are addresess for") + } + newMsg := NewMessageForTestGetter() + msgs := make([]*types.Message, n) + for i := 0; i < n; i++ { + msgs[i] = newMsg() + msgs[i].From = a[i] + } + return msgs +} + +// MessageMaker creates unique, signed messages for use in tests. +type MessageMaker struct { + DefaultGasFeeCap types.BigInt + DefaultGasPremium types.BigInt + DefaultGasUnits int64 + + signer *MockSigner + seq uint + t *testing.T +} + +// NewMessageMaker creates a new message maker with a set of signing keys. +func NewMessageMaker(t *testing.T, keys []crypto.KeyInfo) *MessageMaker { + addresses := make([]address.Address, len(keys)) + signer := NewMockSigner(keys) + + for i, key := range keys { + addr, _ := key.Address() + addresses[i] = addr + } + + return &MessageMaker{types.ZeroFIL, types.ZeroFIL, 0, &signer, 0, t} +} + +// Addresses returns the addresses for which this maker can sign messages. +func (mm *MessageMaker) Addresses() []address.Address { + return mm.signer.Addresses +} + +// Signer returns the signer with which this maker signs messages. +func (mm *MessageMaker) Signer() *MockSigner { + return mm.signer +} + +// NewUnsignedMessage creates a new message. +func (mm *MessageMaker) NewUnsignedMessage(from address.Address, nonce uint64) *types.Message { + seq := mm.seq + mm.seq++ + to, err := address.NewSecp256k1Address([]byte("destination")) + require.NoError(mm.t, err) + return NewMeteredMessage( + from, + to, + nonce, + types.ZeroFIL, + abi.MethodNum(9000+seq), + []byte("params"), + mm.DefaultGasFeeCap, + mm.DefaultGasPremium, + mm.DefaultGasUnits) +} + +// NewSignedMessage creates a new signed message. +func (mm *MessageMaker) NewSignedMessage(from address.Address, nonce uint64) *types.SignedMessage { + msg := mm.NewUnsignedMessage(from, nonce) + signed, err := NewSignedMessage(context.TODO(), *msg, mm.signer) + require.NoError(mm.t, err) + return signed +} + +// EmptyReceipts returns a slice of n empty receipts. +func EmptyReceipts(n int) []*types.MessageReceipt { + out := make([]*types.MessageReceipt, n) + for i := 0; i < n; i++ { + out[i] = &types.MessageReceipt{} + } + return out +} + +// ReceiptMaker generates unique receipts +type ReceiptMaker struct { + seq uint +} + +// NewReceiptMaker creates a new receipt maker +func NewReceiptMaker() *ReceiptMaker { + return &ReceiptMaker{0} +} + +// NewReceipt creates a new distinct receipt. +func (rm *ReceiptMaker) NewReceipt() types.MessageReceipt { + seq := rm.seq + rm.seq++ + return types.MessageReceipt{ + Return: []byte(fmt.Sprintf("%d", seq)), + } +} diff --git a/pkg/testhelpers/net.go b/pkg/testhelpers/net.go new file mode 100644 index 0000000000..df376d124f --- /dev/null +++ b/pkg/testhelpers/net.go @@ -0,0 +1,284 @@ +package testhelpers + +import ( + "context" + "crypto/rand" + "encoding/binary" + "fmt" + "testing" + "time" + + "github.com/filecoin-project/venus/pkg/chainsync/exchange" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/connmgr" + "github.com/libp2p/go-libp2p-core/event" + "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p-core/mux" + inet "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p-core/peerstore" + "github.com/libp2p/go-libp2p-core/protocol" + ma "github.com/multiformats/go-multiaddr" + mh "github.com/multiformats/go-multihash" + "github.com/pkg/errors" + "github.com/stretchr/testify/require" +) + +var _ host.Host = &FakeHost{} +var _ connmgr.ConnManager = &FakeCMgr{} + +// FakeHost is a test host.Host +type FakeHost struct { + ConnectImpl func(context.Context, peer.AddrInfo) error +} + +// NewFakeHost constructs a FakeHost with no other parameters needed +func NewFakeHost() host.Host { + nopfunc := func(_ context.Context, _ peer.AddrInfo) error { return nil } + return &FakeHost{ + ConnectImpl: nopfunc, + } +} + +// minimal implementation of host.Host interface + +func (fh *FakeHost) Addrs() []ma.Multiaddr { panic("not implemented") } // nolint: golint +func (fh *FakeHost) Close() error { panic("not implemented") } // nolint: golint +func (fh *FakeHost) ConnManager() connmgr.ConnManager { + return &FakeCMgr{} +} // nolint: golint +func (fh *FakeHost) Connect(ctx context.Context, pi peer.AddrInfo) error { // nolint: golint + return fh.ConnectImpl(ctx, pi) +} +func (fh *FakeHost) EventBus() event.Bus { panic("not implemented") } //nolint: golint +func (fh *FakeHost) ID() peer.ID { panic("not implemented") } // nolint: golint +func (fh *FakeHost) Network() inet.Network { panic("not implemented") } // nolint: golint +func (fh *FakeHost) Mux() protocol.Switch { panic("not implemented") } // nolint: golint +func (fh *FakeHost) Peerstore() peerstore.Peerstore { panic("not implemented") } // nolint: golint +func (fh *FakeHost) RemoveStreamHandler(protocol.ID) { panic("not implemented") } // nolint: golint +func (fh *FakeHost) SetStreamHandler(protocol.ID, inet.StreamHandler) { panic("not implemented") } // nolint: golint +func (fh *FakeHost) SetStreamHandlerMatch(protocol.ID, func(string) bool, inet.StreamHandler) { // nolint: golint + panic("not implemented") +} + +type FakeCMgr struct { +} + +func (f FakeCMgr) TagPeer(id peer.ID, s string, i int) {} + +func (f FakeCMgr) UntagPeer(p peer.ID, tag string) {} + +func (f FakeCMgr) UpsertTag(p peer.ID, tag string, upsert func(int) int) {} + +func (f FakeCMgr) GetTagInfo(p peer.ID) *connmgr.TagInfo { + panic("implement me") +} + +func (f FakeCMgr) TrimOpenConns(ctx context.Context) { + panic("implement me") +} + +func (f FakeCMgr) Notifee() inet.Notifiee { + panic("implement me") +} + +func (f FakeCMgr) Protect(id peer.ID, tag string) { + panic("implement me") +} + +func (f FakeCMgr) Unprotect(id peer.ID, tag string) (protected bool) { + panic("implement me") +} + +func (f FakeCMgr) IsProtected(id peer.ID, tag string) (protected bool) { + panic("implement me") +} + +func (f FakeCMgr) Close() error { + panic("implement me") +} + +// NewStream is required for the host.Host interface; returns a new FakeStream. +func (fh *FakeHost) NewStream(context.Context, peer.ID, ...protocol.ID) (inet.Stream, error) { // nolint: golint + return newFakeStream(), nil +} + +var _ inet.Dialer = &FakeDialer{} + +// FakeDialer is a test inet.Dialer +type FakeDialer struct { + PeersImpl func() []peer.ID +} + +// Minimal implementation of the inet.Dialer interface + +// Peers returns a fake inet.Dialer PeersImpl +func (fd *FakeDialer) Peers() []peer.ID { + return fd.PeersImpl() +} +func (fd *FakeDialer) Peerstore() peerstore.Peerstore { panic("not implemented") } // nolint: golint +func (fd *FakeDialer) LocalPeer() peer.ID { panic("not implemented") } // nolint: golint +func (fd *FakeDialer) DialPeer(context.Context, peer.ID) (inet.Conn, error) { panic("not implemented") } // nolint: golint +func (fd *FakeDialer) ClosePeer(peer.ID) error { panic("not implemented") } // nolint: golint +func (fd *FakeDialer) Connectedness(peer.ID) inet.Connectedness { panic("not implemented") } // nolint: golint +func (fd *FakeDialer) Conns() []inet.Conn { panic("not implemented") } // nolint: golint +func (fd *FakeDialer) ConnsToPeer(peer.ID) []inet.Conn { panic("not implemented") } // nolint: golint +func (fd *FakeDialer) Notify(inet.Notifiee) { panic("not implemented") } // nolint: golint +func (fd *FakeDialer) StopNotify(inet.Notifiee) { panic("not implemented") } // nolint: golint + +// fakeStream is a test inet.Stream +type fakeStream struct { + _ mux.MuxedStream + pid protocol.ID +} + +var _ inet.Stream = &fakeStream{} + +func newFakeStream() fakeStream { return fakeStream{} } + +// Minimal implementation of the inet.Stream interface + +func (fs fakeStream) ID() string { return "" } +func (fs fakeStream) Protocol() protocol.ID { return fs.pid } // nolint: golint +func (fs fakeStream) SetProtocol(id protocol.ID) { fs.pid = id } // nolint: golint +func (fs fakeStream) Stat() inet.Stats { panic("not implemented") } // nolint: golint +func (fs fakeStream) Conn() inet.Conn { panic("not implemented") } // nolint: golint +func (fs fakeStream) Write(_ []byte) (int, error) { return 1, nil } // nolint: golint +func (fs fakeStream) Read(_ []byte) (int, error) { return 1, nil } // nolint: golint +func (fs fakeStream) Close() error { return nil } // nolint: golint +func (fs fakeStream) Reset() error { return nil } // nolint: golint +func (fs fakeStream) SetDeadline(_ time.Time) error { return nil } // nolint: golint +func (fs fakeStream) SetReadDeadline(_ time.Time) error { return nil } // nolint: golint +func (fs fakeStream) SetWriteDeadline(_ time.Time) error { return nil } // nolint: golint +func (fs fakeStream) CloseWrite() error { panic("implement me") } +func (fs fakeStream) CloseRead() error { panic("implement me") } + +// RandPeerID is a libp2p random peer ID generator. +// These peer.ID generators were copied from libp2p/go-testutil. We didn't bring in the +// whole repo as a dependency because we only need this small bit. However if we find +// ourselves using more and more pieces we should just take a dependency on it. +func RandPeerID() (peer.ID, error) { + buf := make([]byte, 16) + if n, err := rand.Read(buf); n != 16 || err != nil { + if n != 16 && err == nil { + err = errors.New("couldnt read 16 random bytes") + } + panic(err) + } + h, _ := mh.Sum(buf, mh.SHA2_256, -1) + return peer.ID(h), nil +} + +// RequireIntPeerID takes in an integer and creates a unique peer id for it. +func RequireIntPeerID(t *testing.T, i int64) peer.ID { + buf := make([]byte, 16) + n := binary.PutVarint(buf, i) + h, err := mh.Sum(buf[:n], mh.IDENTITY, -1) + require.NoError(t, err) + pid, err := peer.IDFromBytes(h) + require.NoError(t, err) + return pid +} + +// TestFetcher is an object with the same method set as Fetcher plus a method +// for adding blocks to the source. It is used to implement an object that +// behaves like Fetcher but does not go to the network for use in tests. +type TestFetcher struct { + sourceBlocks map[string]*types.BlockHeader // sourceBlocks maps block cid strings to blocks. +} + +// NewTestFetcher returns a TestFetcher with no source blocks. +func NewTestFetcher() *TestFetcher { + return &TestFetcher{ + sourceBlocks: make(map[string]*types.BlockHeader), + } +} + +// AddSourceBlocks adds the input blocks to the fetcher source. +func (f *TestFetcher) AddSourceBlocks(blocks ...*types.BlockHeader) { + for _, block := range blocks { + f.sourceBlocks[block.Cid().String()] = block + } +} + +// FetchTipSets fetchs the tipset at `tsKey` from the network using the fetchers `sourceBlocks`. +func (f *TestFetcher) FetchTipSets(ctx context.Context, tsKey types.TipSetKey, from peer.ID, done func(t *types.TipSet) (bool, error)) ([]*types.TipSet, error) { + var out []*types.TipSet + cur := tsKey + for { + res, err := f.GetBlocks(ctx, cur.Cids()) + if err != nil { + return nil, err + } + + ts, err := types.NewTipSet(res) + if err != nil { + return nil, err + } + + out = append(out, ts) + ok, err := done(ts) + if err != nil { + return nil, err + } + if ok { + break + } + + cur = ts.Parents() + } + + return out, nil +} + +// FetchTipSetHeaders fetches the tipset at `tsKey` but not messages +func (f *TestFetcher) FetchTipSetHeaders(ctx context.Context, tsKey types.TipSetKey, from peer.ID, done func(t *types.TipSet) (bool, error)) ([]*types.TipSet, error) { + return f.FetchTipSets(ctx, tsKey, from, done) +} + +// GetBlocks returns any blocks in the source with matching cids. +func (f *TestFetcher) GetBlocks(ctx context.Context, cids []cid.Cid) ([]*types.BlockHeader, error) { + var ret []*types.BlockHeader + for _, c := range cids { + if block, ok := f.sourceBlocks[c.String()]; ok { + ret = append(ret, block) + } else { + return nil, fmt.Errorf("failed to fetch block: %s", c.String()) + } + } + return ret, nil +} + +func NewTestExchange() *TestExchange { + return &TestExchange{ + sourceBlocks: make(map[string]*types.BlockHeader), + } +} + +// AddSourceBlocks adds the input blocks to the fetcher source. +func (f *TestExchange) AddSourceBlocks(blocks ...*types.BlockHeader) { + for _, block := range blocks { + f.sourceBlocks[block.Cid().String()] = block + } +} + +type TestExchange struct { + sourceBlocks map[string]*types.BlockHeader // s +} + +func (f *TestExchange) GetBlocks(ctx context.Context, tsk types.TipSetKey, count int) ([]*types.TipSet, error) { + panic("implement me") +} + +func (f *TestExchange) GetChainMessages(ctx context.Context, tipsets []*types.TipSet) ([]*exchange.CompactedMessages, error) { + panic("implement me") +} + +func (f *TestExchange) GetFullTipSet(ctx context.Context, peer []peer.ID, tsk types.TipSetKey) (*types.FullTipSet, error) { + panic("implement me") +} + +func (f *TestExchange) AddPeer(peer peer.ID) {} + +func (f *TestExchange) RemovePeer(peer peer.ID) {} diff --git a/internal/pkg/testhelpers/output.go b/pkg/testhelpers/output.go similarity index 100% rename from internal/pkg/testhelpers/output.go rename to pkg/testhelpers/output.go diff --git a/pkg/testhelpers/singer.go b/pkg/testhelpers/singer.go new file mode 100644 index 0000000000..135e033c20 --- /dev/null +++ b/pkg/testhelpers/singer.go @@ -0,0 +1,153 @@ +package testhelpers + +import ( + "bytes" + "context" + "crypto/rand" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/pkg/crypto" +) + +// MockSigner implements the Signer interface +type MockSigner struct { + AddrKeyInfo map[address.Address]crypto.KeyInfo + Addresses []address.Address + PubKeys [][]byte +} + +// NewMockSigner returns a new mock signer, capable of signing data with +// keys (addresses derived from) in keyinfo +func NewMockSigner(kis []crypto.KeyInfo) MockSigner { + var ms MockSigner + ms.AddrKeyInfo = make(map[address.Address]crypto.KeyInfo) + for _, k := range kis { + // extract public key + pub, err := k.PublicKey() + if err != nil { + panic(err) + } + + var newAddr address.Address + if k.SigType == crypto.SigTypeSecp256k1 { + newAddr, err = address.NewSecp256k1Address(pub) + } else if k.SigType == crypto.SigTypeBLS { + newAddr, err = address.NewBLSAddress(pub) + } + if err != nil { + panic(err) + } + ms.Addresses = append(ms.Addresses, newAddr) + ms.AddrKeyInfo[newAddr] = k + ms.PubKeys = append(ms.PubKeys, pub) + } + return ms +} + +// NewMockSignersAndKeyInfo is a convenience function to generate a mock +// signers with some keys. +func NewMockSignersAndKeyInfo(numSigners int) (MockSigner, []crypto.KeyInfo) { + ki := MustGenerateKeyInfo(numSigners, 42) + signer := NewMockSigner(ki) + return signer, ki +} + +// MustGenerateMixedKeyInfo produces m bls keys and n secp keys. +// BLS and Secp will be interleaved. The keys will be valid, but not deterministic. +func MustGenerateMixedKeyInfo(m int, n int) []crypto.KeyInfo { + info := []crypto.KeyInfo{} + for m > 0 && n > 0 { + if m > 0 { + ki, err := crypto.NewBLSKeyFromSeed(rand.Reader) + if err != nil { + panic(err) + } + info = append(info, ki) + m-- + } + + if n > 0 { + ki, err := crypto.NewSecpKeyFromSeed(rand.Reader) + if err != nil { + panic(err) + } + info = append(info, ki) + n-- + } + } + return info +} + +// MustGenerateBLSKeyInfo produces n distinct BLS keyinfos. +func MustGenerateBLSKeyInfo(n int, seed byte) []crypto.KeyInfo { + token := bytes.Repeat([]byte{seed}, 512) + var keyinfos []crypto.KeyInfo + for i := 0; i < n; i++ { + token[0] = byte(i) + ki, err := crypto.NewBLSKeyFromSeed(bytes.NewReader(token)) + if err != nil { + panic(err) + } + keyinfos = append(keyinfos, ki) + } + return keyinfos +} + +// MustGenerateKeyInfo generates `n` distinct keyinfos using seed `seed`. +// The result is deterministic (for stable tests), don't use this for real keys! +func MustGenerateKeyInfo(n int, seed byte) []crypto.KeyInfo { + token := bytes.Repeat([]byte{seed}, 512) + var keyinfos []crypto.KeyInfo + for i := 0; i < n; i++ { + token[0] = byte(i) + ki, err := crypto.NewSecpKeyFromSeed(bytes.NewReader(token)) + if err != nil { + panic(err) + } + keyinfos = append(keyinfos, ki) + } + return keyinfos +} + +// SignBytes cryptographically signs `data` using the `addr`. +func (ms MockSigner) SignBytes(_ context.Context, data []byte, addr address.Address) (*crypto.Signature, error) { + ki, ok := ms.AddrKeyInfo[addr] + if !ok { + return nil, errors.New("unknown address") + } + var sig *crypto.Signature + err := ki.UsePrivateKey(func(privateKey []byte) error { + var err error + sig, err = crypto.Sign(data, privateKey, ki.SigType) + + return err + }) + return sig, err +} + +// HasAddress returns whether the signer can sign with this address +func (ms MockSigner) HasAddress(_ context.Context, addr address.Address) (bool, error) { + return true, nil +} + +// GetAddressForPubKey looks up a KeyInfo address associated with a given PublicKeyForSecpSecretKey for a MockSigner +func (ms MockSigner) GetAddressForPubKey(pk []byte) (address.Address, error) { + var addr address.Address + + for _, ki := range ms.AddrKeyInfo { + testPk, err := ki.PublicKey() + if err != nil { + return address.Undef, err + } + + if bytes.Equal(testPk, pk) { + addr, err := ki.Address() + if err != nil { + return addr, errors.New("could not fetch address") + } + return addr, nil + } + } + return addr, errors.New("public key not found in wallet") +} diff --git a/internal/pkg/testhelpers/test_daemon.go b/pkg/testhelpers/test_daemon.go similarity index 87% rename from internal/pkg/testhelpers/test_daemon.go rename to pkg/testhelpers/test_daemon.go index 2390da9285..d741e01c36 100644 --- a/internal/pkg/testhelpers/test_daemon.go +++ b/pkg/testhelpers/test_daemon.go @@ -22,23 +22,21 @@ import ( "github.com/filecoin-project/go-address" "github.com/ipfs/go-cid" ma "github.com/multiformats/go-multiaddr" - manet "github.com/multiformats/go-multiaddr-net" + manet "github.com/multiformats/go-multiaddr/net" "github.com/pkg/errors" - "github.com/filecoin-project/go-filecoin/build/project" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/build/project" + "github.com/filecoin-project/venus/pkg/config" + types "github.com/filecoin-project/venus/venus-shared/chain" ) const ( // DefaultDaemonCmdTimeout is the default timeout for executing commands. DefaultDaemonCmdTimeout = 1 * time.Minute repoName = "repo" - sectorsName = "sectors" ) // RunSuccessFirstLine executes the given command, asserts success and returns @@ -60,9 +58,10 @@ type TestDaemon struct { containerDir string // Path to directory containing repo and sectors genesisFile string keyFiles []string - withMiner address.Address autoSealInterval string + networkName string isRelay bool + offline bool initArgs []string firstRun bool @@ -85,11 +84,6 @@ func (td *TestDaemon) RepoDir() string { return path.Join(td.containerDir, repoName) } -// SectorDir returns the sector root directory of the test daemon. -func (td *TestDaemon) SectorDir() string { - return path.Join(td.containerDir, sectorsName) -} - // CmdAddr returns the command address of the test daemon (if it is running). func (td *TestDaemon) CmdAddr() (ma.Multiaddr, error) { str, err := ioutil.ReadFile(filepath.Join(td.RepoDir(), "api")) @@ -100,6 +94,15 @@ func (td *TestDaemon) CmdAddr() (ma.Multiaddr, error) { return ma.NewMultiaddr(strings.TrimSpace(string(str))) } +// CmdToken returns the command token of the test daemon (if it is running). +func (td *TestDaemon) CmdToken() (string, error) { + str, err := ioutil.ReadFile(filepath.Join(td.RepoDir(), "token")) + if err != nil { + return "", err + } + return strings.TrimSpace(string(str)), nil +} + // Config is a helper to read out the config of the daemon. func (td *TestDaemon) Config() *config.Config { cfg, err := config.ReadFile(filepath.Join(td.RepoDir(), "config.json")) @@ -109,7 +112,8 @@ func (td *TestDaemon) Config() *config.Config { // GetMinerAddress returns the miner address for this daemon. func (td *TestDaemon) GetMinerAddress() address.Address { - return td.Config().Mining.MinerAddress + return td.Config().Wallet.DefaultAddress + //return td.Config().Mining.MinerAddress } // Run executes the given command against the test daemon. @@ -191,7 +195,7 @@ func (td *TestDaemon) RunFail(err string, args ...string) *CmdOutput { // GetID returns the id of the daemon. func (td *TestDaemon) GetID() string { - out := td.RunSuccess("id") + out := td.RunSuccess("swarm", "id") var parsed map[string]interface{} require.NoError(td.test, json.Unmarshal([]byte(out.ReadStdout()), &parsed)) @@ -200,7 +204,7 @@ func (td *TestDaemon) GetID() string { // GetAddresses returns all of the addresses of the daemon. func (td *TestDaemon) GetAddresses() []string { - out := td.RunSuccess("id") + out := td.RunSuccess("swarm", "id") var parsed map[string]interface{} require.NoError(td.test, json.Unmarshal([]byte(out.ReadStdout()), &parsed)) adders := parsed["Addresses"].([]interface{}) @@ -407,7 +411,7 @@ func (td *TestDaemon) WaitForAPI() error { // CreateStorageMinerAddr issues a new message to the network, mines the message // and returns the address of the new miner // equivalent to: -// `go-filecoin miner create --from $TEST_ACCOUNT 20` +// `venus miner create --from $TEST_ACCOUNT 20` func (td *TestDaemon) CreateStorageMinerAddr(peer *TestDaemon, fromAddr address.Address) address.Address { var wg sync.WaitGroup var minerAddr address.Address @@ -464,10 +468,10 @@ func (td *TestDaemon) UpdatePeerID() { // WaitForMessageRequireSuccess accepts a message cid and blocks until a message with matching cid is included in a // block. The receipt is then inspected to ensure that the corresponding message receipt had a 0 exit code. -func (td *TestDaemon) WaitForMessageRequireSuccess(msgCid cid.Cid) *vm.MessageReceipt { +func (td *TestDaemon) WaitForMessageRequireSuccess(msgCid cid.Cid) *types.MessageReceipt { args := []string{"message", "wait", msgCid.String(), "--receipt=true", "--message=false"} trim := strings.Trim(td.RunSuccess(args...).ReadStdout(), "\n") - rcpt := &vm.MessageReceipt{} + rcpt := &types.MessageReceipt{} require.NoError(td.test, json.Unmarshal([]byte(trim), rcpt)) require.Equal(td.test, 0, int(rcpt.ExitCode)) return rcpt @@ -476,10 +480,10 @@ func (td *TestDaemon) WaitForMessageRequireSuccess(msgCid cid.Cid) *vm.MessageRe // CreateAddress adds a new address to the daemons wallet and // returns it. // equivalent to: -// `go-filecoin address new` +// `venus address new` func (td *TestDaemon) CreateAddress() string { td.test.Helper() - outNew := td.RunSuccess("address", "new") + outNew := td.RunSuccess("wallet", "new") addr := strings.Trim(outNew.ReadStdout(), "\n") require.NotEmpty(td.test, addr) return addr @@ -509,7 +513,7 @@ func (td *TestDaemon) MustHaveChainHeadBy(wait time.Duration, peers []*TestDaemo for _, blk := range expHeadBlks { expHeadCids = append(expHeadCids, blk.Cid()) } - expHeadKey := block.NewTipSetKey(expHeadCids...) + expHeadKey := types.NewTipSetKey(expHeadCids...) for _, p := range peers { wg.Add(1) @@ -520,7 +524,7 @@ func (td *TestDaemon) MustHaveChainHeadBy(wait time.Duration, peers []*TestDaemo for _, blk := range actHeadBlks { actHeadCids = append(actHeadCids, blk.Cid()) } - actHeadKey := block.NewTipSetKey(actHeadCids...) + actHeadKey := types.NewTipSetKey(actHeadCids...) if expHeadKey.Equals(actHeadKey) { wg.Done() return @@ -544,19 +548,19 @@ func (td *TestDaemon) MustHaveChainHeadBy(wait time.Duration, peers []*TestDaemo } // GetChainHead returns the blocks in the head tipset from `td` -func (td *TestDaemon) GetChainHead() []block.Block { +func (td *TestDaemon) GetChainHead() []types.BlockHeader { out := td.RunSuccess("chain", "ls", "--enc=json") bc := td.MustUnmarshalChain(out.ReadStdout()) return bc[0] } // MustUnmarshalChain unmarshals the chain from `input` into a slice of blocks -func (td *TestDaemon) MustUnmarshalChain(input string) [][]block.Block { +func (td *TestDaemon) MustUnmarshalChain(input string) [][]types.BlockHeader { chain := strings.Trim(input, "\n") - var bs [][]block.Block + var bs [][]types.BlockHeader for _, line := range bytes.Split([]byte(chain), []byte{'\n'}) { - var b []block.Block + var b []types.BlockHeader if err := json.Unmarshal(line, &b); err != nil { td.test.Fatal(err) } @@ -575,7 +579,7 @@ func (td *TestDaemon) MakeMoney(rewards int, peers ...*TestDaemon) { // GetDefaultAddress returns the default sender address for this daemon. func (td *TestDaemon) GetDefaultAddress() string { - addrs := td.RunSuccess("address", "default") + addrs := td.RunSuccess("wallet", "default") return addrs.ReadStdout() } @@ -585,13 +589,24 @@ func tryAPICheck(td *TestDaemon) error { return err } - _, host, err := manet.DialArgs(maddr) + _, host, err := manet.DialArgs(maddr) //nolint + if err != nil { + return err + } + token, err := td.CmdToken() + if err != nil { + return err + } + + url := fmt.Sprintf("http://%s/api/swarm/id", host) + req, err := http.NewRequest("POST", url, strings.NewReader("{}")) if err != nil { return err } + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Authorization", "Bearer "+token) - url := fmt.Sprintf("http://%s/api/id", host) - resp, err := http.Get(url) + resp, err := (&http.Client{}).Do(req) if err != nil { return err } @@ -617,14 +632,6 @@ func ContainerDir(dir string) func(*TestDaemon) { } } -// ShouldInit allows setting the `init` config option on the daemon. If -// set, `go-filecoin init` is run before starting up the daemon. -func ShouldInit(i bool) func(*TestDaemon) { - return func(td *TestDaemon) { - td.init = i - } -} - // CmdTimeout allows setting the `cmdTimeout` config option on the daemon. func CmdTimeout(t time.Duration) func(*TestDaemon) { return func(td *TestDaemon) { @@ -667,13 +674,6 @@ func InitArgs(a ...string) func(*TestDaemon) { } } -// WithMiner allows setting the --with-miner flag on init. -func WithMiner(m address.Address) func(*TestDaemon) { - return func(td *TestDaemon) { - td.withMiner = m - } -} - // IsRelay starts the daemon with the --is-relay option. func IsRelay(td *TestDaemon) { td.isRelay = true @@ -689,6 +689,8 @@ func NewDaemon(t *testing.T, options ...func(*TestDaemon)) *TestDaemon { test: t, init: true, // we want to init unless told otherwise firstRun: true, + offline: false, + networkName: "integrationnet", cmdTimeout: DefaultDaemonCmdTimeout, genesisFile: GenesisFilePath(), // default file includes all test addresses, } @@ -708,35 +710,6 @@ func NewDaemon(t *testing.T, options ...func(*TestDaemon)) *TestDaemon { } repoDirFlag := fmt.Sprintf("--repodir=%s", td.RepoDir()) - sectorDirFlag := fmt.Sprintf("--sectordir=%s", td.SectorDir()) - - // build command options - initopts := []string{repoDirFlag, sectorDirFlag} - - if td.genesisFile != "" { - initopts = append(initopts, fmt.Sprintf("--genesisfile=%s", td.genesisFile)) - } - - if td.withMiner != address.Undef { - initopts = append(initopts, fmt.Sprintf("--with-miner=%s", td.withMiner)) - } - - if td.autoSealInterval != "" { - initopts = append(initopts, fmt.Sprintf("--auto-seal-interval-seconds=%s", td.autoSealInterval)) - } - - for _, arg := range td.initArgs { - initopts = append(initopts, arg) - } - - if td.init { - t.Logf("run: go-filecoin init %s", initopts) - out, err := RunInit(td, initopts...) - if err != nil { - t.Log(string(out)) - t.Fatal(err) - } - } // Defer allocation of a command API port until listening. The node will write the // listening address to the "api" file in the repo, from where we can read it when issuing commands. @@ -746,26 +719,25 @@ func NewDaemon(t *testing.T, options ...func(*TestDaemon)) *TestDaemon { swarmAddr := "/ip4/127.0.0.1/tcp/0" swarmListenFlag := fmt.Sprintf("--swarmlisten=%s", swarmAddr) - blockTimeFlag := fmt.Sprintf("--block-time=%s", BlockTimeTest) + td.daemonArgs = []string{filecoinBin, "daemon", repoDirFlag, cmdAPIAddrFlag, swarmListenFlag} + + if len(td.genesisFile) != 0 { + td.daemonArgs = append(td.daemonArgs, fmt.Sprintf("--genesisfile=%s", td.genesisFile)) + } - td.daemonArgs = []string{filecoinBin, "daemon", repoDirFlag, cmdAPIAddrFlag, swarmListenFlag, blockTimeFlag} + if len(td.networkName) != 0 { + td.daemonArgs = append(td.daemonArgs, fmt.Sprintf("--network=%s", td.networkName)) + } if td.isRelay { td.daemonArgs = append(td.daemonArgs, "--is-relay") } - return td -} - -// RunInit is the equivalent of executing `go-filecoin init`. -func RunInit(td *TestDaemon, opts ...string) ([]byte, error) { - filecoinBin := MustGetFilecoinBinary() - - finalArgs := append([]string{"init"}, opts...) - td.logRun(finalArgs...) + if td.offline { + td.daemonArgs = append(td.daemonArgs, "--offline") + } - process := exec.Command(filecoinBin, finalArgs...) - return process.CombinedOutput() + return td } // GenesisFilePath returns the path to the test genesis @@ -778,7 +750,7 @@ func (td *TestDaemon) createNewProcess() { td.process = exec.Command(td.daemonArgs[0], td.daemonArgs[1:]...) // disable REUSEPORT, it creates problems in tests - td.process.Env = append(os.Environ(), "IPFS_REUSEPORT=false") + td.process.Env = append(os.Environ(), "LIBP2P_TCP_REUSEPORT=false") // setup process pipes var err error diff --git a/internal/pkg/testhelpers/testflags/flags.go b/pkg/testhelpers/testflags/flags.go similarity index 91% rename from internal/pkg/testhelpers/testflags/flags.go rename to pkg/testhelpers/testflags/flags.go index d0d067530c..f076782d55 100644 --- a/internal/pkg/testhelpers/testflags/flags.go +++ b/pkg/testhelpers/testflags/flags.go @@ -10,7 +10,6 @@ import ( var integrationTest = flag.Bool("integration", true, "Run the integration go tests") var unitTest = flag.Bool("unit", true, "Run the unit go tests") var functionalTest = flag.Bool("functional", false, "Run the functional go tests") -var sectorBuilderTest = flag.Bool("sectorbuilder", false, "Run the sector builder tests") var deploymentTest = flag.String("deployment", "", "Run the deployment tests against a network") var binaryPath = flag.String("binary-path", "", "Run forked processes tests using provided binary") @@ -68,6 +67,16 @@ func UnitTest(t *testing.T) { // t.Parallel() } +// BenchUnitTest will run the test its called from iff the `-unit` or `-short` flag +// is passed when calling `go test`. Otherwise the test will be skipped. UnitTest +// will run the test its called from in parallel. +func BenchUnitTest(t *testing.B) { + if !*unitTest && !testing.Short() { + t.SkipNow() + } + // t.Parallel() +} + // BadUnitTestWithSideEffects will run the test its called from iff the // `-unit` or `-short` flag is passed when calling `go test`. Otherwise the test // will be skipped. BadUnitTestWithSideEffects will run the test its called @@ -77,11 +86,3 @@ func BadUnitTestWithSideEffects(t *testing.T) { t.SkipNow() } } - -// SectorBuilderTest will run the test its called from iff the `-sectorbuilder` flag -// is passed when calling `go test`. Otherwise the test will be skipped. -func SectorBuilderTest(t *testing.T) { - if !*sectorBuilderTest { - t.SkipNow() - } -} diff --git a/pkg/testhelpers/tipset.go b/pkg/testhelpers/tipset.go new file mode 100644 index 0000000000..7518420d18 --- /dev/null +++ b/pkg/testhelpers/tipset.go @@ -0,0 +1,16 @@ +package testhelpers + +import ( + "testing" + + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/stretchr/testify/require" +) + +// RequireNewTipSet instantiates and returns a new tipset of the given blocks +// and requires that the setup validation succeed. +func RequireNewTipSet(t *testing.T, blks ...*types.BlockHeader) *types.TipSet { + ts, err := types.NewTipSet(blks) + require.NoError(t, err) + return ts +} diff --git a/pkg/testhelpers/util.go b/pkg/testhelpers/util.go new file mode 100644 index 0000000000..60213762a8 --- /dev/null +++ b/pkg/testhelpers/util.go @@ -0,0 +1,95 @@ +package testhelpers + +import ( + "fmt" + "net" + "os" + "sync" + "time" + + "github.com/filecoin-project/venus/build/project" + "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +// GetFreePort gets a free port from the kernel +// Credit: https://github.com/phayes/freeport +func GetFreePort() (int, error) { + addr, err := net.ResolveTCPAddr("tcp", "0.0.0.0:0") + if err != nil { + return 0, err + } + + l, err := net.ListenTCP("tcp", addr) + if err != nil { + return 0, err + } + defer l.Close() // nolint: errcheck + return l.Addr().(*net.TCPAddr).Port, nil +} + +// MustGetFilecoinBinary returns the path where the filecoin binary will be if it has been built and panics otherwise. +func MustGetFilecoinBinary() string { + path, err := GetFilecoinBinary() + if err != nil { + panic(err) + } + + return path +} + +// GetFilecoinBinary returns the path where the filecoin binary will be if it has been built +func GetFilecoinBinary() (string, error) { + bin, provided := testflags.BinaryPath() + if !provided { + bin = project.Root("venus") + } + + _, err := os.Stat(bin) + if err != nil { + return "", err + } + + if os.IsNotExist(err) { + return "", err + } + + return bin, nil +} + +// WaitForIt waits until the given callback returns true. +func WaitForIt(count int, delay time.Duration, cb func() (bool, error)) error { + var done bool + var err error + for i := 0; i < count; i++ { + done, err = cb() + if err != nil { + return err + } + if done { + break + } + time.Sleep(delay) + } + + if !done { + return fmt.Errorf("timeout waiting for it") + } + + return nil +} + +// WaitTimeout waits for the waitgroup for the specified max timeout. +// Returns true if waiting timed out. +func WaitTimeout(wg *sync.WaitGroup, timeout time.Duration) bool { + c := make(chan struct{}) + go func() { + defer close(c) + wg.Wait() + }() + select { + case <-c: + return false // completed normally + case <-time.After(timeout): + return true // timed out + } +} diff --git a/pkg/types/chain_info.go b/pkg/types/chain_info.go new file mode 100644 index 0000000000..c5c95b30c9 --- /dev/null +++ b/pkg/types/chain_info.go @@ -0,0 +1,32 @@ +package types + +import ( + "fmt" + "github.com/filecoin-project/venus/pkg/types/internal" + + "github.com/libp2p/go-libp2p-core/peer" +) + +// ChainInfo is used to track metadata about a peer and its chain. +type ChainInfo struct { + // The originator of the TipSetKey propagation wave. + Source peer.ID + // The peer that sent us the TipSetKey message. + Sender peer.ID + Head *internal.TipSet +} + +// NewChainInfo creates a chain info from a peer id a head tipset key and a +// chain height. +func NewChainInfo(source peer.ID, sender peer.ID, head *internal.TipSet) *ChainInfo { + return &ChainInfo{ + Source: source, + Sender: sender, + Head: head, + } +} + +// String returns a human-readable string representation of a chain info +func (i *ChainInfo) String() string { + return fmt.Sprintf("{source=%s sender:%s height=%d head=%s}", i.Source, i.Sender, i.Head.Height(), i.Head.Key()) +} diff --git a/pkg/types/gas_trace.go b/pkg/types/gas_trace.go new file mode 100644 index 0000000000..60aff167c6 --- /dev/null +++ b/pkg/types/gas_trace.go @@ -0,0 +1,102 @@ +package types + +import ( + "encoding/json" + "fmt" + "github.com/filecoin-project/venus/pkg/types/internal" + "runtime" + "strings" + "time" +) + +type ExecutionTrace struct { + Msg *internal.UnsignedMessage + MsgRct *internal.MessageReceipt + Error string + Duration time.Duration + GasCharges []*GasTrace + + Subcalls []ExecutionTrace +} + +type GasTrace struct { + Name string + + Location []Loc `json:"loc"` + TotalGas int64 `json:"tg"` + ComputeGas int64 `json:"cg"` + StorageGas int64 `json:"sg"` + TotalVirtualGas int64 `json:"vtg"` + VirtualComputeGas int64 `json:"vcg"` + VirtualStorageGas int64 `json:"vsg"` + + TimeTaken time.Duration `json:"tt"` + Extra interface{} `json:"ex,omitempty"` + + Callers []uintptr `json:"-"` +} + +type Loc struct { + File string + Line int + Function string +} + +func (l Loc) Show() bool { + ignorePrefix := []string{ + "reflect.", + "github.com/filecoin-project/lotus/chain/vm.(*Invoker).transform", + "github.com/filecoin-project/go-amt-ipld/", + "github.com/filecoin-project/go-amt-ipld/v2", + } + for _, pre := range ignorePrefix { + if strings.HasPrefix(l.Function, pre) { + return false + } + } + return true +} +func (l Loc) String() string { + file := strings.Split(l.File, "/") + + fn := strings.Split(l.Function, "/") + var fnpkg string + if len(fn) > 2 { + fnpkg = strings.Join(fn[len(fn)-2:], "/") + } else { + fnpkg = l.Function + } + + return fmt.Sprintf("%s@%s:%d", fnpkg, file[len(file)-1], l.Line) +} + +func (l Loc) Important() bool { + return strings.HasPrefix(l.Function, "github.com/filecoin-project/specs-actors/actors/builtin") +} + +func (gt *GasTrace) MarshalJSON() ([]byte, error) { + type gasTraceCopy GasTrace + if len(gt.Location) == 0 { + if len(gt.Callers) != 0 { + frames := runtime.CallersFrames(gt.Callers) + for { + frame, more := frames.Next() + if frame.Function == "github.com/filecoin-project/lotus/chain/vm.(*VM).ApplyMessage" { + break + } + l := Loc{ + File: frame.File, + Line: frame.Line, + Function: frame.Function, + } + gt.Location = append(gt.Location, l) + if !more { + break + } + } + } + } + + cpy := (*gasTraceCopy)(gt) + return json.Marshal(cpy) +} diff --git a/pkg/types/gen/main.go b/pkg/types/gen/main.go new file mode 100644 index 0000000000..3d07513f5a --- /dev/null +++ b/pkg/types/gen/main.go @@ -0,0 +1,105 @@ +package main + +import ( + "bytes" + "fmt" + "github.com/golangci/gofmt/gofmt" + "go/ast" + "go/parser" + "go/token" + "io" + "io/fs" + "io/ioutil" + "log" + "strings" + "text/template" +) + +func main() { + if err := gen("./pkg/types/internal", "./pkg/types/types_gen.go"); err != nil { + log.Fatal(err) + } +} + +func gen(from, out string) error { + fset := token.NewFileSet() + pkgs, err := parser.ParseDir(fset, from, func(info fs.FileInfo) bool { + return !strings.HasSuffix(info.Name(), "_test.go") + }, parser.AllErrors|parser.ParseComments) + if err != nil { + return err + } + visitor := &Visitor{} + for _, pkg := range pkgs { + for _, f := range pkg.Files { + ast.Walk(visitor, f) + } + + } + + buff := bytes.NewBufferString("") + err = doTemplate(buff, visitor, `// Code generated by github.com/filecoin-project/tools/gen/api. DO NOT EDIT. + +package types +import "github.com/filecoin-project/venus/pkg/types/internal" + +//type redefine +{{range .Types}}type {{.}} = internal.{{.}} +{{end}} +//func redefine +{{range .Funcs}}var {{.}} = internal.{{.}} +{{end}} +//value redefine +{{range .Values}}var {{.}} = internal.{{.}} +{{end}} +`) + if err != nil { + return err + } + err = ioutil.WriteFile(out, buff.Bytes(), 0777) + if err != nil { + return err + } + + dff, err := gofmt.Run(out, true) + if err != nil { + return err + } + fmt.Println(string(dff)) + return nil +} + +type Visitor struct { + Types []string + Funcs []string + Values []string +} + +func (v *Visitor) Visit(node ast.Node) ast.Visitor { + switch t := node.(type) { + case *ast.TypeSpec: + if t.Name.IsExported() { + v.Types = append(v.Types, t.Name.String()) + } + + case *ast.FuncDecl: + if t.Name.IsExported() && t.Recv == nil && !isTest(t.Name.String()) { + v.Funcs = append(v.Funcs, t.Name.String()) + } + case *ast.ValueSpec: + if t.Names[0].IsExported() { + v.Values = append(v.Values, t.Names[0].String()) + } + } + + return v +} + +func isTest(str string) bool { + return strings.HasPrefix(str, "Test") +} +func doTemplate(w io.Writer, info interface{}, templ string) error { + t := template.Must(template.New(""). + Funcs(template.FuncMap{}).Parse(templ)) + return t.Execute(w, info) +} diff --git a/pkg/types/internal/actor.go b/pkg/types/internal/actor.go new file mode 100644 index 0000000000..3d34c754df --- /dev/null +++ b/pkg/types/internal/actor.go @@ -0,0 +1,59 @@ +package internal + +import ( + "github.com/ipfs/go-cid" + "github.com/pkg/errors" + + "github.com/filecoin-project/go-state-types/abi" +) + +var ErrActorNotFound = errors.New("actor not found") + +// Actor is the central abstraction of entities in the system. +// +// Both individual accounts, as well as contracts (user & system level) are +// represented as actors. An actor has the following core functionality implemented on a system level: +// - track a Filecoin balance, using the `Balance` field +// - execute code stored in the `Code` field +// - read & write memory +// - replay protection, using the `Nonce` field +// +// Value sent to a non-existent address will be tracked as an empty actor that has a Balance but +// nil Code and Memory. You must nil check Code cids before comparing them. +// +// More specific capabilities for individual accounts or contract specific must be implemented +// inside the code. +// +// Not safe for concurrent access. +type Actor struct { + // Code is a CID of the VM code for this actor's implementation (or a constant for actors implemented in Go code). + // Code may be nil for an uninitialized actor (which exists because it has received a balance). + Code cid.Cid + // Head is the CID of the root of the actor's state tree. + Head cid.Cid + // Nonce is the number expected on the next message from this actor. + // Messages are processed in strict, contiguous order. + Nonce uint64 + // Balance is the amount of attoFIL in the actor's account. + Balance abi.TokenAmount +} + +// NewActor constructs a new actor. +func NewActor(code cid.Cid, balance abi.TokenAmount, head cid.Cid) *Actor { + return &Actor{ + Code: code, + Nonce: 0, + Balance: balance, + Head: head, + } +} + +// Empty tests whether the actor's code is defined. +func (t *Actor) Empty() bool { + return !t.Code.Defined() +} + +// IncrementSeqNum increments the seq number. +func (t *Actor) IncrementSeqNum() { + t.Nonce = t.Nonce + 1 +} diff --git a/pkg/types/internal/actor_test.go b/pkg/types/internal/actor_test.go new file mode 100644 index 0000000000..928f642924 --- /dev/null +++ b/pkg/types/internal/actor_test.go @@ -0,0 +1,71 @@ +package internal + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" + "testing" +) + +func TestActor_Empty(t *testing.T) { + nCid, err := cid.Decode("bafy2bzaceakzxxsce5w6vnv77kkcon4lcotvbcym5dfz2jwxxsy5wva3u2kzc") + require.NoError(t, err) + type fields struct { + Code cid.Cid + Head cid.Cid + Nonce uint64 + Balance abi.TokenAmount + } + tests := []struct { + name string + fields fields + want bool + }{ + { + "empty", + fields{ + Code: cid.Undef, + Head: cid.Undef, + Nonce: 0, + Balance: abi.TokenAmount{}, + }, + true, + }, + { + "not empry", + fields{ + Code: nCid, + Head: nCid, + Nonce: 0, + Balance: abi.TokenAmount{}, + }, + false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + a := &Actor{ + Code: tt.fields.Code, + Head: tt.fields.Head, + Nonce: tt.fields.Nonce, + Balance: tt.fields.Balance, + } + if got := a.Empty(); got != tt.want { + t.Errorf("Empty() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestActor_IncrementSeqNum(t *testing.T) { + actor := Actor{ + Code: cid.Undef, + Head: cid.Undef, + Nonce: 0, + Balance: abi.TokenAmount{}, + } + for i := 0; i < 10; i++ { + actor.IncrementSeqNum() + } + require.Equal(t, int(actor.Nonce), 10) +} diff --git a/pkg/types/internal/address.go b/pkg/types/internal/address.go new file mode 100644 index 0000000000..c9bf5040e0 --- /dev/null +++ b/pkg/types/internal/address.go @@ -0,0 +1,15 @@ +package internal + +import "github.com/filecoin-project/go-address" + +// ZeroAddress the 'f' prefix doesn't matter +var ZeroAddress = mustParseAddress("f3yaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaby2smx7a") + +func mustParseAddress(addr string) address.Address { + ret, err := address.NewFromString(addr) + if err != nil { + panic(err) + } + + return ret +} diff --git a/pkg/types/internal/atto_fil.go b/pkg/types/internal/atto_fil.go new file mode 100644 index 0000000000..4684c9e25e --- /dev/null +++ b/pkg/types/internal/atto_fil.go @@ -0,0 +1,53 @@ +package internal + +import ( + "math/big" + "strings" + + specsbig "github.com/filecoin-project/go-state-types/big" +) + +var attoPower = 18 +var tenToTheEighteen = specsbig.Exp(specsbig.NewInt(10), specsbig.NewInt(18)) + +// NewAttoFIL allocates and returns a new AttoFIL set to x. +func NewAttoFIL(x *big.Int) specsbig.Int { + return specsbig.Int{Int: x} +} + +// NewAttoFILFromFIL returns a new AttoFIL representing a quantity +// of attofilecoin equal to x filecoin. +func NewAttoFILFromFIL(x uint64) specsbig.Int { + xAsBigInt := specsbig.NewIntUnsigned(x) + return specsbig.Mul(xAsBigInt, tenToTheEighteen) +} + +// NewAttoFILFromFILString allocates a new AttoFIL set to the value of s filecoin, +// interpreted as a decimal in base 10, and returns it and a boolean indicating success. +func NewAttoFILFromFILString(s string) (specsbig.Int, bool) { + splitNumber := strings.Split(s, ".") + // If '.' is absent from string, add an empty string to become the decimal part + if len(splitNumber) == 1 { + splitNumber = append(splitNumber, "") + } + intPart := splitNumber[0] + decPart := splitNumber[1] + // A decimal part longer than 18 digits should be an error + if len(decPart) > attoPower || len(splitNumber) > 2 { + return ZeroFIL, false + } + // The decimal is right padded with 0's if it less than 18 digits long + for len(decPart) < attoPower { + decPart += "0" + } + + return NewAttoFILFromString(intPart+decPart, 10) +} + +// NewAttoFILFromString allocates a new AttoFIL set to the value of s attofilecoin, +// interpreted in the given base, and returns it and a boolean indicating success. +func NewAttoFILFromString(s string, base int) (specsbig.Int, bool) { + out := specsbig.NewInt(0) + _, isErr := out.Int.SetString(s, base) + return out, isErr +} diff --git a/pkg/types/internal/atto_fil_test.go b/pkg/types/internal/atto_fil_test.go new file mode 100644 index 0000000000..f4f6eec969 --- /dev/null +++ b/pkg/types/internal/atto_fil_test.go @@ -0,0 +1,206 @@ +package internal + +import ( + "math/big" + "testing" + + specsbig "github.com/filecoin-project/go-state-types/big" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/stretchr/testify/assert" +) + +func mustParseBigInt(s string) big.Int { + bigInt, _ := new(big.Int).SetString(s, 10) + return *bigInt +} + +func TestFILToAttoFIL(t *testing.T) { + tf.UnitTest(t) + + x := NewAttoFILFromFIL(2) + v := big.NewInt(10) + v = v.Exp(v, big.NewInt(18), nil) + v = v.Mul(v, big.NewInt(2)) + assert.True(t, NewAttoFIL(v).Equals(x)) +} + +func TestZeroAttoFIL(t *testing.T) { + tf.UnitTest(t) + + z := NewAttoFILFromFIL(0) + assert.True(t, ZeroFIL.Equals(z)) +} + +func TestAttoFILComparison(t *testing.T) { + tf.UnitTest(t) + + a := NewAttoFILFromFIL(123) + b := NewAttoFILFromFIL(123) + c := NewAttoFILFromFIL(456) + + t.Run("handles comparison", func(t *testing.T) { + assert.True(t, a.Equals(b)) + assert.True(t, b.Equals(a)) + + assert.False(t, a.Equals(c)) + assert.False(t, c.Equals(a)) + + assert.True(t, a.LessThan(c)) + assert.True(t, a.LessThanEqual(c)) + assert.True(t, c.GreaterThan(a)) + assert.True(t, c.GreaterThanEqual(a)) + assert.True(t, a.GreaterThanEqual(b)) + assert.True(t, a.LessThanEqual(b)) + }) + + t.Run("treats ZeroFIL as zero", func(t *testing.T) { + d := specsbig.Sub(ZeroFIL, a) + zeroValue := NewAttoFILFromFIL(0) + + assert.True(t, zeroValue.Equals(ZeroFIL)) + assert.True(t, ZeroFIL.Equals(zeroValue)) + assert.True(t, d.LessThan(zeroValue)) + assert.True(t, zeroValue.GreaterThan(d)) + assert.True(t, c.GreaterThan(zeroValue)) + assert.True(t, zeroValue.LessThan(c)) + }) +} + +func TestAttoFILAddition(t *testing.T) { + tf.UnitTest(t) + + a := NewAttoFILFromFIL(123) + b := NewAttoFILFromFIL(456) + + t.Run("handles addition", func(t *testing.T) { + aStr := a.String() + bStr := b.String() + sum := specsbig.Add(a, b) + + assert.Equal(t, NewAttoFILFromFIL(579), sum) + + // Storage is not reused + assert.NotEqual(t, &a, &sum) + assert.NotEqual(t, &b, &sum) + + // Values have not changed. + assert.Equal(t, aStr, a.String()) + assert.Equal(t, bStr, b.String()) + }) + + t.Run("treats ZeroFIL as zero", func(t *testing.T) { + assert.True(t, specsbig.Add(ZeroFIL, a).Equals(a)) + assert.True(t, specsbig.Add(a, ZeroFIL).Equals(a)) + }) +} + +func TestAttoFILSubtraction(t *testing.T) { + tf.UnitTest(t) + + a := NewAttoFILFromFIL(456) + b := NewAttoFILFromFIL(123) + + t.Run("handles subtraction", func(t *testing.T) { + aStr := a.String() + bStr := b.String() + delta := specsbig.Sub(a, b) + + assert.Equal(t, delta, NewAttoFILFromFIL(333)) + + // Storage is not reused + assert.NotEqual(t, &a, &delta) + assert.NotEqual(t, &b, &delta) + + // Values have not changed. + assert.Equal(t, aStr, a.String()) + assert.Equal(t, bStr, b.String()) + }) + + t.Run("treats ZeroFIL as zero", func(t *testing.T) { + assert.True(t, specsbig.Sub(a, ZeroFIL).Equals(a)) + assert.True(t, specsbig.Sub(ZeroFIL, ZeroFIL).Equals(ZeroFIL)) + }) +} + +func TestAttoFILIsZero(t *testing.T) { + tf.UnitTest(t) + + p := NewAttoFILFromFIL(100) // positive + z := NewAttoFILFromFIL(0) // zero + n := specsbig.Sub(NewAttoFILFromFIL(0), p) // negative + + t.Run("returns true if zero token", func(t *testing.T) { + assert.True(t, z.IsZero()) + assert.True(t, ZeroFIL.IsZero()) + }) + + t.Run("returns false if greater than zero token", func(t *testing.T) { + assert.False(t, p.IsZero()) + }) + + t.Run("returns false if less than zero token", func(t *testing.T) { + assert.False(t, n.IsZero()) + }) +} + +func TestString(t *testing.T) { + tf.UnitTest(t) + + // A very large number of attoFIL + attoFIL, _ := new(big.Int).SetString("912129289198393123456789012345678", 10) + assert.Equal(t, "912129289198393123456789012345678", NewAttoFIL(attoFIL).String()) + + // A multiple of 1000 attoFIL + attoFIL, _ = new(big.Int).SetString("9123372036854775000", 10) + assert.Equal(t, "9123372036854775000", NewAttoFIL(attoFIL).String()) + + // Less than 10^18 attoFIL + attoFIL, _ = new(big.Int).SetString("36854775878", 10) + assert.Equal(t, "36854775878", NewAttoFIL(attoFIL).String()) + + // A multiple of 100 attFIL that is less than 10^18 + attoFIL, _ = new(big.Int).SetString("36854775800", 10) + assert.Equal(t, "36854775800", NewAttoFIL(attoFIL).String()) + + // A number of attFIL that is an integer number of FIL + attoFIL, _ = new(big.Int).SetString("123000000000000000000", 10) + assert.Equal(t, "123000000000000000000", NewAttoFIL(attoFIL).String()) +} + +func TestNewAttoFILFromFILString(t *testing.T) { + tf.UnitTest(t) + + t.Run("parses legitimate values correctly", func(t *testing.T) { + attoFIL, _ := NewAttoFILFromFILString(".12345") + assert.Equal(t, mustParseBigInt("123450000000000000"), *attoFIL.Int) + + attoFIL, _ = NewAttoFILFromFILString("000000.000000") + assert.Equal(t, mustParseBigInt("0"), *attoFIL.Int) + + attoFIL, _ = NewAttoFILFromFILString("0000.12345") + assert.Equal(t, mustParseBigInt("123450000000000000"), *attoFIL.Int) + + attoFIL, _ = NewAttoFILFromFILString("12345.0") + assert.Equal(t, mustParseBigInt("12345000000000000000000"), *attoFIL.Int) + + attoFIL, _ = NewAttoFILFromFILString("12345") + assert.Equal(t, mustParseBigInt("12345000000000000000000"), *attoFIL.Int) + }) + + t.Run("rejects nonsense values", func(t *testing.T) { + _, ok := NewAttoFILFromFILString("notanumber") + assert.False(t, ok) + + _, ok = NewAttoFILFromFILString("384042.wat") + assert.False(t, ok) + + _, ok = NewAttoFILFromFILString("78wat") + assert.False(t, ok) + + _, ok = NewAttoFILFromFILString("1234567890abcde") + assert.False(t, ok) + + _, ok = NewAttoFILFromFILString("127.0.0.1") + assert.False(t, ok) + }) +} diff --git a/pkg/types/internal/beacon.go b/pkg/types/internal/beacon.go new file mode 100644 index 0000000000..9ac02d6a8d --- /dev/null +++ b/pkg/types/internal/beacon.go @@ -0,0 +1,6 @@ +package internal + +type BeaconEntry struct { + Round uint64 + Data []byte +} diff --git a/pkg/types/internal/bigint.go b/pkg/types/internal/bigint.go new file mode 100644 index 0000000000..88d6fbb772 --- /dev/null +++ b/pkg/types/internal/bigint.go @@ -0,0 +1,99 @@ +package internal + +import ( + "fmt" + "math/big" + + big2 "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/pkg/constants" +) + +var TotalFilecoinInt = FromFil(constants.FilBase) + +var EmptyInt = BigInt{} + +type BigInt = big2.Int + +func NewInt(i uint64) BigInt { + return BigInt{Int: big.NewInt(0).SetUint64(i)} +} + +func FromFil(i uint64) BigInt { + return BigMul(NewInt(i), NewInt(constants.FilecoinPrecision)) +} + +func BigFromBytes(b []byte) BigInt { + i := big.NewInt(0).SetBytes(b) + return BigInt{Int: i} +} + +func BigFromString(s string) (BigInt, error) { + v, ok := big.NewInt(0).SetString(s, 10) + if !ok { + return BigInt{}, fmt.Errorf("failed to parse string as a big int") + } + + return BigInt{Int: v}, nil +} + +func BigMul(a, b BigInt) BigInt { + return BigInt{Int: big.NewInt(0).Mul(a.Int, b.Int)} +} + +func BigDiv(a, b BigInt) BigInt { + return BigInt{Int: big.NewInt(0).Div(a.Int, b.Int)} +} + +func BigDivFloat(num, den BigInt) float64 { + res, _ := new(big.Rat).SetFrac(num.Int, den.Int).Float64() + return res +} + +func BigMod(a, b BigInt) BigInt { + return BigInt{Int: big.NewInt(0).Mod(a.Int, b.Int)} +} + +func BigAdd(a, b BigInt) BigInt { + return BigInt{Int: big.NewInt(0).Add(a.Int, b.Int)} +} + +func BigSub(a, b BigInt) BigInt { + return BigInt{Int: big.NewInt(0).Sub(a.Int, b.Int)} +} + +func BigCmp(a, b BigInt) int { + return a.Int.Cmp(b.Int) +} + +var byteSizeUnits = []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB"} + +func SizeStr(bi BigInt) string { + r := new(big.Rat).SetInt(bi.Int) + den := big.NewRat(1, 1024) + + var i int + for f, _ := r.Float64(); f >= 1024 && i+1 < len(byteSizeUnits); f, _ = r.Float64() { + i++ + r = r.Mul(r, den) + } + + f, _ := r.Float64() + return fmt.Sprintf("%.4g %s", f, byteSizeUnits[i]) +} + +var deciUnits = []string{"", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"} + +func DeciStr(bi BigInt) string { + r := new(big.Rat).SetInt(bi.Int) + den := big.NewRat(1, 1024) + + var i int + for f, _ := r.Float64(); f >= 1024 && i+1 < len(deciUnits); f, _ = r.Float64() { + i++ + r = r.Mul(r, den) + } + + f, _ := r.Float64() + return fmt.Sprintf("%.3g %s", f, deciUnits[i]) +} diff --git a/pkg/types/internal/bigint_test.go b/pkg/types/internal/bigint_test.go new file mode 100644 index 0000000000..7ca8acb27a --- /dev/null +++ b/pkg/types/internal/bigint_test.go @@ -0,0 +1,103 @@ +package internal + +import ( + "bytes" + "math/big" + "math/rand" + "strings" + "testing" + "time" + + "github.com/docker/go-units" + + "github.com/stretchr/testify/assert" +) + +func TestBigIntSerializationRoundTrip(t *testing.T) { + testValues := []string{ + "0", "1", "10", "-10", "9999", "12345678901234567891234567890123456789012345678901234567890", + } + + for _, v := range testValues { + bi, err := BigFromString(v) + if err != nil { + t.Fatal(err) + } + + buf := new(bytes.Buffer) + if err := bi.MarshalCBOR(buf); err != nil { + t.Fatal(err) + } + + var out BigInt + if err := out.UnmarshalCBOR(buf); err != nil { + t.Fatal(err) + } + + if BigCmp(out, bi) != 0 { + t.Fatal("failed to round trip BigInt through cbor") + } + + } +} + +func TestFilRoundTrip(t *testing.T) { + testValues := []string{ + "0 FIL", "1 FIL", "1.001 FIL", "100.10001 FIL", "101100 FIL", "5000.01 FIL", "5000 FIL", + } + + for _, v := range testValues { + fval, err := ParseFIL(v) + if err != nil { + t.Fatal(err) + } + + if fval.String() != v { + t.Fatal("mismatch in values!", v, fval.String()) + } + } +} + +func TestSizeStr(t *testing.T) { + cases := []struct { + in uint64 + out string + }{ + {0, "0 B"}, + {1, "1 B"}, + {1016, "1016 B"}, + {1024, "1 KiB"}, + {1000 * 1024, "1000 KiB"}, + {2000, "1.953 KiB"}, + {5 << 20, "5 MiB"}, + {11 << 60, "11 EiB"}, + } + + for _, c := range cases { + assert.Equal(t, c.out, SizeStr(NewInt(c.in)), "input %+v, produced wrong result", c) + } +} + +func TestSizeStrUnitsSymmetry(t *testing.T) { + s := rand.NewSource(time.Now().UnixNano()) + r := rand.New(s) + + for i := 0; i < 10000; i++ { + n := r.Uint64() + l := strings.ReplaceAll(units.BytesSize(float64(n)), " ", "") + r := strings.ReplaceAll(SizeStr(NewInt(n)), " ", "") + + assert.NotContains(t, l, "e+") + assert.NotContains(t, r, "e+") + + assert.Equal(t, l, r, "wrong formatting for %d", n) + } +} + +func TestSizeStrBig(t *testing.T) { + ZiB := big.NewInt(50000) + ZiB = ZiB.Lsh(ZiB, 70) + + assert.Equal(t, "5e+04 ZiB", SizeStr(BigInt{Int: ZiB}), "inout %+v, produced wrong result", ZiB) + +} diff --git a/pkg/types/internal/block.go b/pkg/types/internal/block.go new file mode 100644 index 0000000000..10cb154831 --- /dev/null +++ b/pkg/types/internal/block.go @@ -0,0 +1,218 @@ +package internal + +import ( + "bytes" + "encoding/json" + "fmt" + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + fbig "github.com/filecoin-project/go-state-types/big" + proof2 "github.com/filecoin-project/specs-actors/v2/actors/runtime/proof" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + node "github.com/ipfs/go-ipld-format" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/crypto" +) + +// BlockHeader is a newBlock in the blockchain. +type BlockHeader struct { + // Miner is the address of the miner actor that mined this newBlock. + Miner address.Address `json:"miner"` + + // Ticket is the ticket submitted with this newBlock. + Ticket Ticket `json:"ticket"` + + // ElectionProof is the vrf proof giving this newBlock's miner authoring rights + ElectionProof *ElectionProof `json:"electionProof"` + + // BeaconEntries contain the verifiable oracle randomness used to elect + // this newBlock's author leader + BeaconEntries []*BeaconEntry `json:"beaconEntries"` + + // WinPoStProof are the winning post proofs + WinPoStProof []proof2.PoStProof `json:"winPoStProof"` + + // Parents is the set of parents this newBlock was based on. Typically one, + // but can be several in the case where there were multiple winning ticket- + // holders for an epoch. + Parents TipSetKey `json:"parents"` + + // ParentWeight is the aggregate chain weight of the parent set. + ParentWeight fbig.Int `json:"parentWeight"` + + // Height is the chain height of this newBlock. + Height abi.ChainEpoch `json:"height"` + + // ParentStateRoot is the CID of the root of the state tree after application of the messages in the parent tipset + // to the parent tipset's state root. + ParentStateRoot cid.Cid `json:"parentStateRoot,omitempty"` + + // ParentMessageReceipts is a list of receipts corresponding to the application of the messages in the parent tipset + // to the parent tipset's state root (corresponding to this newBlock's ParentStateRoot). + ParentMessageReceipts cid.Cid `json:"parentMessageReceipts,omitempty"` + + // Messages is the set of messages included in this newBlock + Messages cid.Cid `json:"messages,omitempty"` + + // The aggregate signature of all BLS signed messages in the newBlock + BLSAggregate *crypto.Signature `json:"BLSAggregate"` + + // The timestamp, in seconds since the Unix epoch, at which this newBlock was created. + Timestamp uint64 `json:"timestamp"` + + // The signature of the miner's worker key over the newBlock + BlockSig *crypto.Signature `json:"blocksig"` + + // ForkSignaling is extra data used by miners to communicate + ForkSignaling uint64 `json:"forkSignaling"` + + //identical for all blocks in same tipset: the base fee after executing parent tipset + ParentBaseFee abi.TokenAmount `json:"parentBaseFee"` + + cachedCid cid.Cid + + cachedBytes []byte + + validated bool // internal, true if the signature has been validated +} + +// Cid returns the content id of this newBlock. +func (b *BlockHeader) Cid() cid.Cid { + if b.cachedCid == cid.Undef { + if b.cachedBytes == nil { + buf := new(bytes.Buffer) + err := b.MarshalCBOR(buf) + if err != nil { + panic(err) + } + b.cachedBytes = buf.Bytes() + } + c, err := constants.DefaultCidBuilder.Sum(b.cachedBytes) + if err != nil { + panic(err) + } + + b.cachedCid = c + } + + return b.cachedCid +} + +// ToNode converts the BlockHeader to an IPLD node. +func (b *BlockHeader) ToNode() node.Node { + buf := new(bytes.Buffer) + err := b.MarshalCBOR(buf) + if err != nil { + panic(err) + } + data := buf.Bytes() + c, err := constants.DefaultCidBuilder.Sum(data) + if err != nil { + panic(err) + } + + blk, err := blocks.NewBlockWithCid(data, c) + if err != nil { + panic(err) + } + n, err := cbor.DecodeBlock(blk) + if err != nil { + panic(err) + } + return n +} + +func (b *BlockHeader) String() string { + errStr := "(error encoding BlockHeader)" + c := b.Cid() + js, err := json.MarshalIndent(b, "", " ") + if err != nil { + return errStr + } + return fmt.Sprintf("BlockHeader cid=[%v]: %s", c, string(js)) +} + +// DecodeBlock decodes raw cbor bytes into a BlockHeader. +func DecodeBlock(b []byte) (*BlockHeader, error) { + var out BlockHeader + if err := out.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, err + } + + out.cachedBytes = b + + return &out, nil +} + +// Equals returns true if the BlockHeader is equal to other. +func (b *BlockHeader) Equals(other *BlockHeader) bool { + return b.Cid().Equals(other.Cid()) +} + +// SignatureData returns the newBlock's bytes with a null signature field for +// signature creation and verification +func (b *BlockHeader) SignatureData() []byte { + tmp := &BlockHeader{ + Miner: b.Miner, + Ticket: b.Ticket, + ElectionProof: b.ElectionProof, + Parents: b.Parents, + ParentWeight: b.ParentWeight, + Height: b.Height, + Messages: b.Messages, + ParentStateRoot: b.ParentStateRoot, + ParentMessageReceipts: b.ParentMessageReceipts, + WinPoStProof: b.WinPoStProof, + BeaconEntries: b.BeaconEntries, + Timestamp: b.Timestamp, + BLSAggregate: b.BLSAggregate, + ForkSignaling: b.ForkSignaling, + ParentBaseFee: b.ParentBaseFee, + // BlockSig omitted + } + + return tmp.ToNode().RawData() +} + +// Serialize serialize blockheader to binary +func (b *BlockHeader) Serialize() ([]byte, error) { + buf := new(bytes.Buffer) + if err := b.MarshalCBOR(buf); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +// ToStorageBlock convert blockheader to data block with cid +func (b *BlockHeader) ToStorageBlock() (blocks.Block, error) { + data, err := b.Serialize() + if err != nil { + return nil, err + } + + c, err := abi.CidBuilder.Sum(data) + if err != nil { + return nil, err + } + + return blocks.NewBlockWithCid(data, c) +} + +// LastTicket get ticket in block +func (b *BlockHeader) LastTicket() *Ticket { + return &b.Ticket +} + +// SetValidated set block signature is valid after checkout blocksig +func (b *BlockHeader) SetValidated() { + b.validated = true +} + +// IsValidated check whether block signature is valid from memory +func (b *BlockHeader) IsValidated() bool { + return b.validated +} diff --git a/pkg/types/internal/block_message.go b/pkg/types/internal/block_message.go new file mode 100644 index 0000000000..e097d18f30 --- /dev/null +++ b/pkg/types/internal/block_message.go @@ -0,0 +1,9 @@ +package internal + +// BlockMessagesInfo contains messages for one newBlock in a tipset. +type BlockMessagesInfo struct { //nolint + BlsMessages []ChainMsg + SecpkMessages []ChainMsg + + Block *BlockHeader +} diff --git a/pkg/types/internal/block_test.go b/pkg/types/internal/block_test.go new file mode 100644 index 0000000000..b86fbcd6bc --- /dev/null +++ b/pkg/types/internal/block_test.go @@ -0,0 +1,471 @@ +package internal + +import ( + "bytes" + "encoding/json" + proof2 "github.com/filecoin-project/specs-actors/v2/actors/runtime/proof" + "reflect" + "testing" + + "github.com/filecoin-project/go-state-types/abi" + fbig "github.com/filecoin-project/go-state-types/big" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/crypto" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestTriangleEncoding(t *testing.T) { + tf.UnitTest(t) + + // We want to be sure that: + // BlockHeader => json => BlockHeader + // yields exactly the same thing as: + // BlockHeader => IPLD node => CBOR => IPLD node => json => IPLD node => BlockHeader (!) + // because we want the output encoding of a BlockHeader directly from memory + // (first case) to be exactly the same as the output encoding of a BlockHeader from + // storage (second case). WTF you might say, and you would not be wrong. The + // use case is machine-parsing command output. For example dag_daemon_test + // dumps the newBlock from memory as json (first case). It then dag gets + // the newBlock by cid which yeilds a json-encoded ipld node (first half of + // the second case). It json decodes this ipld node and then decodes the node + // into a newBlock (second half of the second case). I don't claim this is ideal, + // see: https://github.com/filecoin-project/venus/issues/599 + + newAddress := NewForTestGetter() + + testRoundTrip := func(t *testing.T, exp *BlockHeader) { + jb, err := json.Marshal(exp) + require.NoError(t, err) + var jsonRoundTrip BlockHeader + err = json.Unmarshal(jb, &jsonRoundTrip) + require.NoError(t, err) + AssertHaveSameCid(t, exp, &jsonRoundTrip) + + buf := new(bytes.Buffer) + err = jsonRoundTrip.MarshalCBOR(buf) + assert.NoError(t, err) + var cborJSONRoundTrip BlockHeader + err = cborJSONRoundTrip.UnmarshalCBOR(buf) + assert.NoError(t, err) + AssertHaveSameCid(t, exp, &cborJSONRoundTrip) + } + + // // TODO: to make this test pass. + // // This will fail with output: "varints malformed, could not reach the end" + // // which is from go-varint package, need to check. + // t.Run("encoding newBlock with zero fields works", func(t *testing.T) { + // testRoundTrip(t, &blk.BlockHeader{}) + // }) + + t.Run("encoding newBlock with nonzero fields works", func(t *testing.T) { + // We should ensure that every field is set -- zero values might + // pass when non-zero values do not due to nil/null encoding. + // posts := []blk.PoStProof{blk.NewPoStProof(constants.DevRegisteredWinningPoStProof, []byte{0x07})} + b := &BlockHeader{ + Miner: newAddress(), + Ticket: Ticket{VRFProof: []byte{0x01, 0x02, 0x03}}, + ElectionProof: &ElectionProof{VRFProof: []byte{0x0a, 0x0b}}, + Height: 2, + BeaconEntries: []*BeaconEntry{ + { + Round: 1, + Data: []byte{0x3}, + }, + }, + Messages: CidFromString(t, "somecid"), + ParentMessageReceipts: CidFromString(t, "somecid"), + Parents: NewTipSetKey(CidFromString(t, "somecid")), + ParentWeight: fbig.NewInt(1000), + ParentStateRoot: CidFromString(t, "somecid"), + Timestamp: 1, + BlockSig: &crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: []byte{0x3}, + }, + BLSAggregate: &crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: []byte{0x3}, + }, + // PoStProofs: posts, + ForkSignaling: 6, + } + s := reflect.TypeOf(*b) + // This check is here to request that you add a non-zero value for new fields + // to the above (and update the field count below). + // Also please add non zero fields to "b" and "diff" in TestSignatureData + // and add a new check that different values of the new field result in + // different output data. + require.Equal(t, 19, s.NumField()) // Note: this also counts private fields + testRoundTrip(t, b) + }) +} + +func TestBlockString(t *testing.T) { + tf.UnitTest(t) + + addrGetter := NewForTestGetter() + c1 := CidFromString(t, "a") + c2 := CidFromString(t, "b") + cM := CidFromString(t, "messages") + cR := CidFromString(t, "receipts") + + b := &BlockHeader{ + Miner: addrGetter(), + Ticket: Ticket{VRFProof: []uint8{}}, + Parents: NewTipSetKey(c1), + Height: 2, + ParentWeight: fbig.Zero(), + Messages: cM, + ParentStateRoot: c2, + ParentMessageReceipts: cR, + BlockSig: &crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: []byte{}}, + BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte{}}, + ParentBaseFee: abi.NewTokenAmount(1), + } + + cid := b.Cid() + + got := b.String() + assert.Contains(t, got, cid.String()) +} + +func TestDecodeBlock(t *testing.T) { + tf.UnitTest(t) + + t.Run("successfully decodes raw bytes to a Filecoin newBlock", func(t *testing.T) { + addrGetter := NewForTestGetter() + + c1 := CidFromString(t, "a") + c2 := CidFromString(t, "b") + cM := CidFromString(t, "messages") + cR := CidFromString(t, "receipts") + + before := &BlockHeader{ + Miner: addrGetter(), + Ticket: Ticket{VRFProof: nil}, + Parents: NewTipSetKey(c1), + Height: 2, + ParentWeight: fbig.Zero(), + Messages: cM, + ParentStateRoot: c2, + ParentMessageReceipts: cR, + BlockSig: &crypto.Signature{Type: crypto.SigTypeSecp256k1, Data: []byte{}}, + BLSAggregate: &crypto.Signature{Type: crypto.SigTypeBLS, Data: []byte{}}, + ParentBaseFee: abi.NewTokenAmount(1), + } + + after, err := DecodeBlock(before.ToNode().RawData()) + require.NoError(t, err) + assert.Equal(t, after.Cid(), before.Cid()) + assert.Equal(t, before, after) + }) + + t.Run("decode failure results in an error", func(t *testing.T) { + _, err := DecodeBlock([]byte{1, 2, 3}) + assert.Error(t, err) + assert.Contains(t, err.Error(), "cbor input should be of type array") + }) +} + +func TestEquals(t *testing.T) { + tf.UnitTest(t) + addrGetter := NewForTestGetter() + minerAddr := addrGetter() + mockCid := CidFromString(t, "mock") + c1 := CidFromString(t, "a") + c2 := CidFromString(t, "b") + + s1 := CidFromString(t, "state1") + s2 := CidFromString(t, "state2") + + var h1 abi.ChainEpoch = 1 + var h2 abi.ChainEpoch = 2 + + b1 := &BlockHeader{Miner: minerAddr, Messages: mockCid, ParentMessageReceipts: mockCid, Parents: NewTipSetKey(c1), ParentStateRoot: s1, Height: h1} + b2 := &BlockHeader{Miner: minerAddr, Messages: mockCid, ParentMessageReceipts: mockCid, Parents: NewTipSetKey(c1), ParentStateRoot: s1, Height: h1} + b3 := &BlockHeader{Miner: minerAddr, Messages: mockCid, ParentMessageReceipts: mockCid, Parents: NewTipSetKey(c1), ParentStateRoot: s2, Height: h1} + b4 := &BlockHeader{Miner: minerAddr, Messages: mockCid, ParentMessageReceipts: mockCid, Parents: NewTipSetKey(c2), ParentStateRoot: s1, Height: h1} + b5 := &BlockHeader{Miner: minerAddr, Messages: mockCid, ParentMessageReceipts: mockCid, Parents: NewTipSetKey(c1), ParentStateRoot: s1, Height: h2} + b6 := &BlockHeader{Miner: minerAddr, Messages: mockCid, ParentMessageReceipts: mockCid, Parents: NewTipSetKey(c2), ParentStateRoot: s1, Height: h2} + b7 := &BlockHeader{Miner: minerAddr, Messages: mockCid, ParentMessageReceipts: mockCid, Parents: NewTipSetKey(c1), ParentStateRoot: s2, Height: h2} + b8 := &BlockHeader{Miner: minerAddr, Messages: mockCid, ParentMessageReceipts: mockCid, Parents: NewTipSetKey(c2), ParentStateRoot: s2, Height: h1} + b9 := &BlockHeader{Miner: minerAddr, Messages: mockCid, ParentMessageReceipts: mockCid, Parents: NewTipSetKey(c2), ParentStateRoot: s2, Height: h2} + assert.True(t, b1.Equals(b1)) + assert.True(t, b1.Equals(b2)) + assert.False(t, b1.Equals(b3)) + assert.False(t, b1.Equals(b4)) + assert.False(t, b1.Equals(b5)) + assert.False(t, b1.Equals(b6)) + assert.False(t, b1.Equals(b7)) + assert.False(t, b1.Equals(b8)) + assert.False(t, b1.Equals(b9)) + assert.True(t, b3.Equals(b3)) + assert.False(t, b3.Equals(b4)) + assert.False(t, b3.Equals(b6)) + assert.False(t, b3.Equals(b9)) + assert.False(t, b4.Equals(b5)) + assert.False(t, b5.Equals(b6)) + assert.False(t, b6.Equals(b7)) + assert.False(t, b7.Equals(b8)) + assert.False(t, b8.Equals(b9)) + assert.True(t, b9.Equals(b9)) +} + +func TestBlockJsonMarshal(t *testing.T) { + tf.UnitTest(t) + + proot := CidFromString(t, "mock") + var child BlockHeader + child.Miner = NewForTestGetter()() + child.Height = 1 + child.ParentWeight = fbig.Zero() + child.Parents = NewTipSetKey(proot) + child.ParentStateRoot = proot + + child.Messages = CidFromString(t, "somecid") + child.ParentMessageReceipts = CidFromString(t, "somecid") + + child.ParentBaseFee = abi.NewTokenAmount(1) + + marshalled, e1 := json.Marshal(&child) + assert.NoError(t, e1) + str := string(marshalled) + + assert.Contains(t, str, child.Miner.String()) + assert.Contains(t, str, proot.String()) + assert.Contains(t, str, child.Messages.String()) + assert.Contains(t, str, child.ParentMessageReceipts.String()) + + // marshal/unmarshal symmetry + var unmarshalled BlockHeader + e2 := json.Unmarshal(marshalled, &unmarshalled) + assert.NoError(t, e2) + + assert.Equal(t, child, unmarshalled) + AssertHaveSameCid(t, &child, &unmarshalled) + assert.True(t, child.Equals(&unmarshalled)) +} + +func TestSignatureData(t *testing.T) { + tf.UnitTest(t) + newAddress := NewForTestGetter() + posts := []proof2.PoStProof{{PoStProof: abi.RegisteredPoStProof_StackedDrgWinning32GiBV1, ProofBytes: []byte{0x07}}} + + b := &BlockHeader{ + Miner: newAddress(), + Ticket: Ticket{VRFProof: []byte{0x01, 0x02, 0x03}}, + ElectionProof: &ElectionProof{VRFProof: []byte{0x0a, 0x0b}}, + BeaconEntries: []*BeaconEntry{ + { + Round: 5, + Data: []byte{0x0c}, + }, + }, + Height: 2, + Messages: CidFromString(t, "somecid"), + ParentMessageReceipts: CidFromString(t, "somecid"), + Parents: NewTipSetKey(CidFromString(t, "somecid")), + ParentWeight: fbig.NewInt(1000), + ForkSignaling: 3, + ParentStateRoot: CidFromString(t, "somecid"), + Timestamp: 1, + ParentBaseFee: abi.NewTokenAmount(10), + WinPoStProof: posts, + BlockSig: &crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: []byte{0x3}, + }, + } + + diffposts := []proof2.PoStProof{{PoStProof: abi.RegisteredPoStProof_StackedDrgWinning32GiBV1, ProofBytes: []byte{0x07, 0x08}}} + + diff := &BlockHeader{ + Miner: newAddress(), + Ticket: Ticket{VRFProof: []byte{0x03, 0x01, 0x02}}, + ElectionProof: &ElectionProof{VRFProof: []byte{0x0c, 0x0d}}, + BeaconEntries: []*BeaconEntry{ + { + Round: 44, + Data: []byte{0xc0}, + }, + }, + Height: 3, + Messages: CidFromString(t, "someothercid"), + ParentMessageReceipts: CidFromString(t, "someothercid"), + Parents: NewTipSetKey(CidFromString(t, "someothercid")), + ParentWeight: fbig.NewInt(1001), + ForkSignaling: 2, + ParentStateRoot: CidFromString(t, "someothercid"), + Timestamp: 4, + ParentBaseFee: abi.NewTokenAmount(20), + WinPoStProof: diffposts, + BlockSig: &crypto.Signature{ + Type: crypto.SigTypeBLS, + Data: []byte{0x4}, + }, + } + + // Changing BlockSig does not affect output + func() { + before := b.SignatureData() + + cpy := b.BlockSig + defer func() { b.BlockSig = cpy }() + + b.BlockSig = diff.BlockSig + after := b.SignatureData() + assert.True(t, bytes.Equal(before, after)) + }() + + // Changing all other fields does affect output + // Note: using reflectors doesn't seem to make this much less tedious + // because it appears that there is no generic field setting function. + func() { + before := b.SignatureData() + + cpy := b.Miner + defer func() { b.Miner = cpy }() + + b.Miner = diff.Miner + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + + cpy := b.Ticket + defer func() { b.Ticket = cpy }() + + b.Ticket = diff.Ticket + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + + cpy := b.ElectionProof + defer func() { b.ElectionProof = cpy }() + + b.ElectionProof = diff.ElectionProof + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + + cpy := b.Height + defer func() { b.Height = cpy }() + + b.Height = diff.Height + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + + cpy := b.Messages + defer func() { b.Messages = cpy }() + + b.Messages = diff.Messages + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + + cpy := b.ParentMessageReceipts + defer func() { b.ParentMessageReceipts = cpy }() + + b.ParentMessageReceipts = diff.ParentMessageReceipts + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + + cpy := b.Parents + defer func() { b.Parents = cpy }() + + b.Parents = diff.Parents + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + + cpy := b.ParentWeight + defer func() { b.ParentWeight = cpy }() + + b.ParentWeight = diff.ParentWeight + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + + cpy := b.ForkSignaling + defer func() { b.ForkSignaling = cpy }() + + b.ForkSignaling = diff.ForkSignaling + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + + cpy := b.ParentStateRoot + defer func() { b.ParentStateRoot = cpy }() + + b.ParentStateRoot = diff.ParentStateRoot + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + + cpy := b.Timestamp + defer func() { b.Timestamp = cpy }() + + b.Timestamp = diff.Timestamp + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + + cpy := b.WinPoStProof + defer func() { b.WinPoStProof = cpy }() + + b.WinPoStProof = diff.WinPoStProof + after := b.SignatureData() + assert.False(t, bytes.Equal(before, after)) + }() + + func() { + before := b.SignatureData() + cpy := b.BeaconEntries + defer func() { + b.BeaconEntries = cpy + }() + + b.BeaconEntries = diff.BeaconEntries + after := b.SignatureData() + + assert.False(t, bytes.Equal(before, after)) + }() + +} diff --git a/pkg/types/internal/blockmsg.go b/pkg/types/internal/blockmsg.go new file mode 100644 index 0000000000..8bc24b0b73 --- /dev/null +++ b/pkg/types/internal/blockmsg.go @@ -0,0 +1,28 @@ +package internal + +import ( + "bytes" + + "github.com/ipfs/go-cid" +) + +type BlockMsg struct { // nolint: golint + Header *BlockHeader + BlsMessages []cid.Cid + SecpkMessages []cid.Cid +} + +// Cid return block cid +func (bm *BlockMsg) Cid() cid.Cid { + return bm.Header.Cid() +} + +// Serialize return blockmsg binary +func (bm *BlockMsg) Serialize() ([]byte, error) { + buf := new(bytes.Buffer) + if err := bm.MarshalCBOR(buf); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} diff --git a/pkg/types/internal/cbor_gen.go b/pkg/types/internal/cbor_gen.go new file mode 100644 index 0000000000..c2cb312b5d --- /dev/null +++ b/pkg/types/internal/cbor_gen.go @@ -0,0 +1,1444 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package internal + +import ( + "fmt" + "io" + "sort" + + abi "github.com/filecoin-project/go-state-types/abi" + crypto "github.com/filecoin-project/go-state-types/crypto" + exitcode "github.com/filecoin-project/go-state-types/exitcode" + proof "github.com/filecoin-project/specs-actors/actors/runtime/proof" + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = sort.Sort + +var lengthBufMessageReceipt = []byte{131} + +func (t *MessageReceipt) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufMessageReceipt); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.ExitCode (exitcode.ExitCode) (int64) + if t.ExitCode >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.ExitCode)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.ExitCode-1)); err != nil { + return err + } + } + + // t.Return ([]uint8) (slice) + if len(t.Return) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.Return was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.Return))); err != nil { + return err + } + + if _, err := w.Write(t.Return[:]); err != nil { + return err + } + + // t.GasUsed (int64) (int64) + if t.GasUsed >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.GasUsed)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.GasUsed-1)); err != nil { + return err + } + } + return nil +} + +func (t *MessageReceipt) UnmarshalCBOR(r io.Reader) error { + *t = MessageReceipt{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.ExitCode (exitcode.ExitCode) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.ExitCode = exitcode.ExitCode(extraI) + } + // t.Return ([]uint8) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.Return: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.Return = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.Return[:]); err != nil { + return err + } + // t.GasUsed (int64) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.GasUsed = int64(extraI) + } + return nil +} + +var lengthBufSignedMessage = []byte{130} + +func (t *SignedMessage) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufSignedMessage); err != nil { + return err + } + + // t.Message (internal.UnsignedMessage) (struct) + if err := t.Message.MarshalCBOR(w); err != nil { + return err + } + + // t.Signature (crypto.Signature) (struct) + if err := t.Signature.MarshalCBOR(w); err != nil { + return err + } + return nil +} + +func (t *SignedMessage) UnmarshalCBOR(r io.Reader) error { + *t = SignedMessage{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Message (internal.UnsignedMessage) (struct) + + { + + if err := t.Message.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Message: %w", err) + } + + } + // t.Signature (crypto.Signature) (struct) + + { + + if err := t.Signature.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Signature: %w", err) + } + + } + return nil +} + +var lengthBufUnsignedMessage = []byte{138} + +func (t *UnsignedMessage) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufUnsignedMessage); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Version (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Version)); err != nil { + return err + } + + // t.To (address.Address) (struct) + if err := t.To.MarshalCBOR(w); err != nil { + return err + } + + // t.From (address.Address) (struct) + if err := t.From.MarshalCBOR(w); err != nil { + return err + } + + // t.Nonce (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Nonce)); err != nil { + return err + } + + // t.Value (big.Int) (struct) + if err := t.Value.MarshalCBOR(w); err != nil { + return err + } + + // t.GasLimit (int64) (int64) + if t.GasLimit >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.GasLimit)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.GasLimit-1)); err != nil { + return err + } + } + + // t.GasFeeCap (big.Int) (struct) + if err := t.GasFeeCap.MarshalCBOR(w); err != nil { + return err + } + + // t.GasPremium (big.Int) (struct) + if err := t.GasPremium.MarshalCBOR(w); err != nil { + return err + } + + // t.Method (abi.MethodNum) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Method)); err != nil { + return err + } + + // t.Params ([]uint8) (slice) + if len(t.Params) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.Params was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.Params))); err != nil { + return err + } + + if _, err := w.Write(t.Params[:]); err != nil { + return err + } + return nil +} + +func (t *UnsignedMessage) UnmarshalCBOR(r io.Reader) error { + *t = UnsignedMessage{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 10 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Version (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Version = uint64(extra) + + } + // t.To (address.Address) (struct) + + { + + if err := t.To.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.To: %w", err) + } + + } + // t.From (address.Address) (struct) + + { + + if err := t.From.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.From: %w", err) + } + + } + // t.Nonce (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Nonce = uint64(extra) + + } + // t.Value (big.Int) (struct) + + { + + if err := t.Value.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Value: %w", err) + } + + } + // t.GasLimit (int64) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.GasLimit = int64(extraI) + } + // t.GasFeeCap (big.Int) (struct) + + { + + if err := t.GasFeeCap.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.GasFeeCap: %w", err) + } + + } + // t.GasPremium (big.Int) (struct) + + { + + if err := t.GasPremium.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.GasPremium: %w", err) + } + + } + // t.Method (abi.MethodNum) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Method = abi.MethodNum(extra) + + } + // t.Params ([]uint8) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.Params: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.Params = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.Params[:]); err != nil { + return err + } + return nil +} + +var lengthBufTxMeta = []byte{130} + +func (t *TxMeta) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufTxMeta); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.BLSRoot (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.BLSRoot); err != nil { + return xerrors.Errorf("failed to write cid field t.BLSRoot: %w", err) + } + + // t.SecpRoot (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.SecpRoot); err != nil { + return xerrors.Errorf("failed to write cid field t.SecpRoot: %w", err) + } + + return nil +} + +func (t *TxMeta) UnmarshalCBOR(r io.Reader) error { + *t = TxMeta{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.BLSRoot (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.BLSRoot: %w", err) + } + + t.BLSRoot = c + + } + // t.SecpRoot (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.SecpRoot: %w", err) + } + + t.SecpRoot = c + + } + return nil +} + +var lengthBufActor = []byte{132} + +func (t *Actor) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufActor); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Code (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.Code); err != nil { + return xerrors.Errorf("failed to write cid field t.Code: %w", err) + } + + // t.Head (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.Head); err != nil { + return xerrors.Errorf("failed to write cid field t.Head: %w", err) + } + + // t.Nonce (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Nonce)); err != nil { + return err + } + + // t.Balance (big.Int) (struct) + if err := t.Balance.MarshalCBOR(w); err != nil { + return err + } + return nil +} + +func (t *Actor) UnmarshalCBOR(r io.Reader) error { + *t = Actor{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 4 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Code (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.Code: %w", err) + } + + t.Code = c + + } + // t.Head (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.Head: %w", err) + } + + t.Head = c + + } + // t.Nonce (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Nonce = uint64(extra) + + } + // t.Balance (big.Int) (struct) + + { + + if err := t.Balance.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Balance: %w", err) + } + + } + return nil +} + +var lengthBufBeaconEntry = []byte{130} + +func (t *BeaconEntry) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufBeaconEntry); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Round (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Round)); err != nil { + return err + } + + // t.Data ([]uint8) (slice) + if len(t.Data) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.Data was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.Data))); err != nil { + return err + } + + if _, err := w.Write(t.Data[:]); err != nil { + return err + } + return nil +} + +func (t *BeaconEntry) UnmarshalCBOR(r io.Reader) error { + *t = BeaconEntry{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Round (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Round = uint64(extra) + + } + // t.Data ([]uint8) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.Data: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.Data = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.Data[:]); err != nil { + return err + } + return nil +} + +var lengthBufBlockHeader = []byte{144} + +func (t *BlockHeader) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufBlockHeader); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Miner (address.Address) (struct) + if err := t.Miner.MarshalCBOR(w); err != nil { + return err + } + + // t.Ticket (internal.Ticket) (struct) + if err := t.Ticket.MarshalCBOR(w); err != nil { + return err + } + + // t.ElectionProof (internal.ElectionProof) (struct) + if err := t.ElectionProof.MarshalCBOR(w); err != nil { + return err + } + + // t.BeaconEntries ([]*internal.BeaconEntry) (slice) + if len(t.BeaconEntries) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.BeaconEntries was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.BeaconEntries))); err != nil { + return err + } + for _, v := range t.BeaconEntries { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.WinPoStProof ([]proof.PoStProof) (slice) + if len(t.WinPoStProof) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.WinPoStProof was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.WinPoStProof))); err != nil { + return err + } + for _, v := range t.WinPoStProof { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.Parents (internal.TipSetKey) (struct) + if err := t.Parents.MarshalCBOR(w); err != nil { + return err + } + + // t.ParentWeight (big.Int) (struct) + if err := t.ParentWeight.MarshalCBOR(w); err != nil { + return err + } + + // t.Height (abi.ChainEpoch) (int64) + if t.Height >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Height)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.Height-1)); err != nil { + return err + } + } + + // t.ParentStateRoot (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.ParentStateRoot); err != nil { + return xerrors.Errorf("failed to write cid field t.ParentStateRoot: %w", err) + } + + // t.ParentMessageReceipts (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.ParentMessageReceipts); err != nil { + return xerrors.Errorf("failed to write cid field t.ParentMessageReceipts: %w", err) + } + + // t.Messages (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.Messages); err != nil { + return xerrors.Errorf("failed to write cid field t.Messages: %w", err) + } + + // t.BLSAggregate (crypto.Signature) (struct) + if err := t.BLSAggregate.MarshalCBOR(w); err != nil { + return err + } + + // t.Timestamp (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Timestamp)); err != nil { + return err + } + + // t.BlockSig (crypto.Signature) (struct) + if err := t.BlockSig.MarshalCBOR(w); err != nil { + return err + } + + // t.ForkSignaling (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.ForkSignaling)); err != nil { + return err + } + + // t.ParentBaseFee (big.Int) (struct) + if err := t.ParentBaseFee.MarshalCBOR(w); err != nil { + return err + } + return nil +} + +func (t *BlockHeader) UnmarshalCBOR(r io.Reader) error { + *t = BlockHeader{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 16 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Miner (address.Address) (struct) + + { + + if err := t.Miner.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Miner: %w", err) + } + + } + // t.Ticket (internal.Ticket) (struct) + + { + + if err := t.Ticket.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Ticket: %w", err) + } + + } + // t.ElectionProof (internal.ElectionProof) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.ElectionProof = new(ElectionProof) + if err := t.ElectionProof.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.ElectionProof pointer: %w", err) + } + } + + } + // t.BeaconEntries ([]*internal.BeaconEntry) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.BeaconEntries: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.BeaconEntries = make([]*BeaconEntry, extra) + } + + for i := 0; i < int(extra); i++ { + + var v BeaconEntry + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.BeaconEntries[i] = &v + } + + // t.WinPoStProof ([]proof.PoStProof) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.WinPoStProof: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.WinPoStProof = make([]proof.PoStProof, extra) + } + + for i := 0; i < int(extra); i++ { + + var v proof.PoStProof + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.WinPoStProof[i] = v + } + + // t.Parents (internal.TipSetKey) (struct) + + { + + if err := t.Parents.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Parents: %w", err) + } + + } + // t.ParentWeight (big.Int) (struct) + + { + + if err := t.ParentWeight.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.ParentWeight: %w", err) + } + + } + // t.Height (abi.ChainEpoch) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.Height = abi.ChainEpoch(extraI) + } + // t.ParentStateRoot (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.ParentStateRoot: %w", err) + } + + t.ParentStateRoot = c + + } + // t.ParentMessageReceipts (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.ParentMessageReceipts: %w", err) + } + + t.ParentMessageReceipts = c + + } + // t.Messages (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.Messages: %w", err) + } + + t.Messages = c + + } + // t.BLSAggregate (crypto.Signature) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.BLSAggregate = new(crypto.Signature) + if err := t.BLSAggregate.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.BLSAggregate pointer: %w", err) + } + } + + } + // t.Timestamp (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Timestamp = uint64(extra) + + } + // t.BlockSig (crypto.Signature) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.BlockSig = new(crypto.Signature) + if err := t.BlockSig.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.BlockSig pointer: %w", err) + } + } + + } + // t.ForkSignaling (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.ForkSignaling = uint64(extra) + + } + // t.ParentBaseFee (big.Int) (struct) + + { + + if err := t.ParentBaseFee.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.ParentBaseFee: %w", err) + } + + } + return nil +} + +var lengthBufTicket = []byte{129} + +func (t *Ticket) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufTicket); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.VRFProof (internal.VRFPi) (slice) + if len(t.VRFProof) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.VRFProof was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.VRFProof))); err != nil { + return err + } + + if _, err := w.Write(t.VRFProof[:]); err != nil { + return err + } + return nil +} + +func (t *Ticket) UnmarshalCBOR(r io.Reader) error { + *t = Ticket{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 1 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.VRFProof (internal.VRFPi) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.VRFProof: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.VRFProof = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.VRFProof[:]); err != nil { + return err + } + return nil +} + +var lengthBufElectionProof = []byte{130} + +func (t *ElectionProof) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufElectionProof); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.WinCount (int64) (int64) + if t.WinCount >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.WinCount)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.WinCount-1)); err != nil { + return err + } + } + + // t.VRFProof (internal.VRFPi) (slice) + if len(t.VRFProof) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.VRFProof was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.VRFProof))); err != nil { + return err + } + + if _, err := w.Write(t.VRFProof[:]); err != nil { + return err + } + return nil +} + +func (t *ElectionProof) UnmarshalCBOR(r io.Reader) error { + *t = ElectionProof{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.WinCount (int64) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.WinCount = int64(extraI) + } + // t.VRFProof (internal.VRFPi) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.VRFProof: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.VRFProof = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.VRFProof[:]); err != nil { + return err + } + return nil +} + +var lengthBufBlockMsg = []byte{131} + +func (t *BlockMsg) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufBlockMsg); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Header (internal.BlockHeader) (struct) + if err := t.Header.MarshalCBOR(w); err != nil { + return err + } + + // t.BlsMessages ([]cid.Cid) (slice) + if len(t.BlsMessages) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.BlsMessages was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.BlsMessages))); err != nil { + return err + } + for _, v := range t.BlsMessages { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.BlsMessages: %w", err) + } + } + + // t.SecpkMessages ([]cid.Cid) (slice) + if len(t.SecpkMessages) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.SecpkMessages was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.SecpkMessages))); err != nil { + return err + } + for _, v := range t.SecpkMessages { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.SecpkMessages: %w", err) + } + } + return nil +} + +func (t *BlockMsg) UnmarshalCBOR(r io.Reader) error { + *t = BlockMsg{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Header (internal.BlockHeader) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.Header = new(BlockHeader) + if err := t.Header.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Header pointer: %w", err) + } + } + + } + // t.BlsMessages ([]cid.Cid) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.BlsMessages: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.BlsMessages = make([]cid.Cid, extra) + } + + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.BlsMessages failed: %w", err) + } + t.BlsMessages[i] = c + } + + // t.SecpkMessages ([]cid.Cid) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.SecpkMessages: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.SecpkMessages = make([]cid.Cid, extra) + } + + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.SecpkMessages failed: %w", err) + } + t.SecpkMessages[i] = c + } + + return nil +} diff --git a/pkg/types/internal/fil.go b/pkg/types/internal/fil.go new file mode 100644 index 0000000000..3270a30eef --- /dev/null +++ b/pkg/types/internal/fil.go @@ -0,0 +1,137 @@ +package internal + +import ( + "encoding" + "fmt" + fbig "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/pkg/constants" + "math/big" + "strings" +) + +var ZeroFIL = fbig.NewInt(0) + +type FIL BigInt + +func (f FIL) String() string { + return f.Unitless() + " FIL" +} + +var AttoFil = NewInt(1) +var FemtoFil = BigMul(AttoFil, NewInt(1000)) +var PicoFil = BigMul(FemtoFil, NewInt(1000)) +var NanoFil = BigMul(PicoFil, NewInt(1000)) + +func (f FIL) Unitless() string { + r := new(big.Rat).SetFrac(f.Int, big.NewInt(int64(constants.FilecoinPrecision))) + if r.Sign() == 0 { + return "0" + } + return strings.TrimRight(strings.TrimRight(r.FloatString(18), "0"), ".") +} + +var unitPrefixes = []string{"a", "f", "p", "n", "ฮผ", "m"} + +func (f FIL) Short() string { + n := BigInt(f).Abs() + + dn := uint64(1) + var prefix string + for _, p := range unitPrefixes { + if n.LessThan(NewInt(dn * 1000)) { + prefix = p + break + } + dn *= 1000 + } + + r := new(big.Rat).SetFrac(f.Int, big.NewInt(int64(dn))) + if r.Sign() == 0 { + return "0" + } + + return strings.TrimRight(strings.TrimRight(r.FloatString(3), "0"), ".") + " " + prefix + "FIL" +} + +func (f FIL) Nano() string { + r := new(big.Rat).SetFrac(f.Int, big.NewInt(int64(1e9))) + if r.Sign() == 0 { + return "0" + } + + return strings.TrimRight(strings.TrimRight(r.FloatString(9), "0"), ".") + " nFIL" +} + +func (f FIL) Format(s fmt.State, ch rune) { + switch ch { + case 's', 'v': + fmt.Fprint(s, f.String()) + default: + f.Int.Format(s, ch) + } +} + +func (f FIL) MarshalText() (text []byte, err error) { + return []byte(f.String()), nil +} + +func (f FIL) UnmarshalText(text []byte) error { + p, err := ParseFIL(string(text)) + if err != nil { + return err + } + + f.Int.Set(p.Int) + return nil +} + +func ParseFIL(s string) (FIL, error) { + suffix := strings.TrimLeft(s, "-.1234567890") + s = s[:len(s)-len(suffix)] + var attofil bool + if suffix != "" { + norm := strings.ToLower(strings.TrimSpace(suffix)) + switch norm { + case "", "fil": + case "attofil", "afil": + attofil = true + default: + return FIL{}, fmt.Errorf("unrecognized suffix: %q", suffix) + } + } + + if len(s) > 50 { + return FIL{}, fmt.Errorf("string length too large: %d", len(s)) + } + + r, ok := new(big.Rat).SetString(s) + if !ok { + return FIL{}, fmt.Errorf("failed to parse %q as a decimal number", s) + } + + if !attofil { + r = r.Mul(r, big.NewRat(int64(constants.FilecoinPrecision), 1)) + } + + if !r.IsInt() { + var pref string + if attofil { + pref = "atto" + } + return FIL{}, fmt.Errorf("invalid %sFIL value: %q", pref, s) + } + + return FIL{r.Num()}, nil +} + +func MustParseFIL(s string) FIL { + n, err := ParseFIL(s) + if err != nil { + panic(err) + } + + return n +} + +var _ encoding.TextMarshaler = (*FIL)(nil) +var _ encoding.TextUnmarshaler = (*FIL)(nil) diff --git a/pkg/types/internal/fil_test.go b/pkg/types/internal/fil_test.go new file mode 100644 index 0000000000..95630a8a64 --- /dev/null +++ b/pkg/types/internal/fil_test.go @@ -0,0 +1,114 @@ +package internal + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestFilShort(t *testing.T) { + for _, s := range []struct { + fil string + expect string + }{ + + {fil: "1", expect: "1 FIL"}, + {fil: "1.1", expect: "1.1 FIL"}, + {fil: "12", expect: "12 FIL"}, + {fil: "123", expect: "123 FIL"}, + {fil: "123456", expect: "123456 FIL"}, + {fil: "123.23", expect: "123.23 FIL"}, + {fil: "123456.234", expect: "123456.234 FIL"}, + {fil: "123456.2341234", expect: "123456.234 FIL"}, + {fil: "123456.234123445", expect: "123456.234 FIL"}, + + {fil: "0.1", expect: "100 mFIL"}, + {fil: "0.01", expect: "10 mFIL"}, + {fil: "0.001", expect: "1 mFIL"}, + + {fil: "0.0001", expect: "100 ฮผFIL"}, + {fil: "0.00001", expect: "10 ฮผFIL"}, + {fil: "0.000001", expect: "1 ฮผFIL"}, + + {fil: "0.0000001", expect: "100 nFIL"}, + {fil: "0.00000001", expect: "10 nFIL"}, + {fil: "0.000000001", expect: "1 nFIL"}, + + {fil: "0.0000000001", expect: "100 pFIL"}, + {fil: "0.00000000001", expect: "10 pFIL"}, + {fil: "0.000000000001", expect: "1 pFIL"}, + + {fil: "0.0000000000001", expect: "100 fFIL"}, + {fil: "0.00000000000001", expect: "10 fFIL"}, + {fil: "0.000000000000001", expect: "1 fFIL"}, + + {fil: "0.0000000000000001", expect: "100 aFIL"}, + {fil: "0.00000000000000001", expect: "10 aFIL"}, + {fil: "0.000000000000000001", expect: "1 aFIL"}, + + {fil: "0.0000012", expect: "1.2 ฮผFIL"}, + {fil: "0.00000123", expect: "1.23 ฮผFIL"}, + {fil: "0.000001234", expect: "1.234 ฮผFIL"}, + {fil: "0.0000012344", expect: "1.234 ฮผFIL"}, + {fil: "0.00000123444", expect: "1.234 ฮผFIL"}, + + {fil: "0.0002212", expect: "221.2 ฮผFIL"}, + {fil: "0.00022123", expect: "221.23 ฮผFIL"}, + {fil: "0.000221234", expect: "221.234 ฮผFIL"}, + {fil: "0.0002212344", expect: "221.234 ฮผFIL"}, + {fil: "0.00022123444", expect: "221.234 ฮผFIL"}, + + {fil: "-1", expect: "-1 FIL"}, + {fil: "-1.1", expect: "-1.1 FIL"}, + {fil: "-12", expect: "-12 FIL"}, + {fil: "-123", expect: "-123 FIL"}, + {fil: "-123456", expect: "-123456 FIL"}, + {fil: "-123.23", expect: "-123.23 FIL"}, + {fil: "-123456.234", expect: "-123456.234 FIL"}, + {fil: "-123456.2341234", expect: "-123456.234 FIL"}, + {fil: "-123456.234123445", expect: "-123456.234 FIL"}, + + {fil: "-0.1", expect: "-100 mFIL"}, + {fil: "-0.01", expect: "-10 mFIL"}, + {fil: "-0.001", expect: "-1 mFIL"}, + + {fil: "-0.0001", expect: "-100 ฮผFIL"}, + {fil: "-0.00001", expect: "-10 ฮผFIL"}, + {fil: "-0.000001", expect: "-1 ฮผFIL"}, + + {fil: "-0.0000001", expect: "-100 nFIL"}, + {fil: "-0.00000001", expect: "-10 nFIL"}, + {fil: "-0.000000001", expect: "-1 nFIL"}, + + {fil: "-0.0000000001", expect: "-100 pFIL"}, + {fil: "-0.00000000001", expect: "-10 pFIL"}, + {fil: "-0.000000000001", expect: "-1 pFIL"}, + + {fil: "-0.0000000000001", expect: "-100 fFIL"}, + {fil: "-0.00000000000001", expect: "-10 fFIL"}, + {fil: "-0.000000000000001", expect: "-1 fFIL"}, + + {fil: "-0.0000000000000001", expect: "-100 aFIL"}, + {fil: "-0.00000000000000001", expect: "-10 aFIL"}, + {fil: "-0.000000000000000001", expect: "-1 aFIL"}, + + {fil: "-0.0000012", expect: "-1.2 ฮผFIL"}, + {fil: "-0.00000123", expect: "-1.23 ฮผFIL"}, + {fil: "-0.000001234", expect: "-1.234 ฮผFIL"}, + {fil: "-0.0000012344", expect: "-1.234 ฮผFIL"}, + {fil: "-0.00000123444", expect: "-1.234 ฮผFIL"}, + + {fil: "-0.0002212", expect: "-221.2 ฮผFIL"}, + {fil: "-0.00022123", expect: "-221.23 ฮผFIL"}, + {fil: "-0.000221234", expect: "-221.234 ฮผFIL"}, + {fil: "-0.0002212344", expect: "-221.234 ฮผFIL"}, + {fil: "-0.00022123444", expect: "-221.234 ฮผFIL"}, + } { + s := s + t.Run(s.fil, func(t *testing.T) { + f, err := ParseFIL(s.fil) + require.NoError(t, err) + require.Equal(t, s.expect, f.Short()) + }) + } +} diff --git a/pkg/types/internal/full_block.go b/pkg/types/internal/full_block.go new file mode 100644 index 0000000000..1277e94cb9 --- /dev/null +++ b/pkg/types/internal/full_block.go @@ -0,0 +1,18 @@ +package internal + +import ( + "github.com/ipfs/go-cid" +) + +// FullBlock carries a newBlock header and the message and receipt collections +// referenced from the header. +type FullBlock struct { + Header *BlockHeader + BLSMessages []*UnsignedMessage + SECPMessages []*SignedMessage +} + +// Cid returns the FullBlock's header's Cid +func (fb *FullBlock) Cid() cid.Cid { + return fb.Header.Cid() +} diff --git a/pkg/types/internal/fulltipset.go b/pkg/types/internal/fulltipset.go new file mode 100644 index 0000000000..b2b274a6a9 --- /dev/null +++ b/pkg/types/internal/fulltipset.go @@ -0,0 +1,71 @@ +package internal + +import ( + "github.com/ipfs/go-cid" +) + +// FullTipSet is an expanded version of the TipSet that contains all the blocks and messages +type FullTipSet struct { + Blocks []*FullBlock + tipset *TipSet + cids []cid.Cid +} + +func NewFullTipSet(blks []*FullBlock) *FullTipSet { + return &FullTipSet{ + Blocks: blks, + } +} + +func (fts *FullTipSet) Cids() []cid.Cid { + if fts.cids != nil { + return fts.cids + } + + var cids []cid.Cid + for _, b := range fts.Blocks { + cids = append(cids, b.Cid()) + } + fts.cids = cids + + return cids +} + +// TipSet returns a narrower view of this FullTipSet elliding the newBlock +// messages. +func (fts *FullTipSet) TipSet() *TipSet { + if fts.tipset != nil { + // FIXME: fts.tipset is actually never set. Should it memoize? + return fts.tipset + } + + var headers []*BlockHeader + for _, b := range fts.Blocks { + headers = append(headers, b.Header) + } + + ts, err := NewTipSet(headers...) + if err != nil { + panic(err) + } + + return ts +} + +// Reverse reverses the order of the slice `chain`. +func ReverseFullBlock(chain []*FullTipSet) { + // https://github.com/golang/go/wiki/SliceTricks#reversing + for i := len(chain)/2 - 1; i >= 0; i-- { + opp := len(chain) - 1 - i + chain[i], chain[opp] = chain[opp], chain[i] + } +} + +// Reverse reverses the order of the slice `chain`. +func ReverseTipSet(chain []*TipSet) { + // https://github.com/golang/go/wiki/SliceTricks#reversing + for i := len(chain)/2 - 1; i >= 0; i-- { + opp := len(chain) - 1 - i + chain[i], chain[opp] = chain[opp], chain[i] + } +} diff --git a/pkg/types/internal/message.go b/pkg/types/internal/message.go new file mode 100644 index 0000000000..4a047d7b4f --- /dev/null +++ b/pkg/types/internal/message.go @@ -0,0 +1,366 @@ +package internal + +import ( + "bytes" + "encoding/json" + "fmt" + "math/big" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + specsbig "github.com/filecoin-project/go-state-types/big" + cbor2 "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/go-state-types/exitcode" + "github.com/filecoin-project/go-state-types/network" + block "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + ipld "github.com/ipfs/go-ipld-format" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/constants" +) + +type EstimateMessage struct { + Msg *Message + Spec *MessageSendSpec +} + +type EstimateResult struct { + Msg *Message + Err string +} + +const DefaultGasOverEstimation = 1.25 +const MinGasOverEsitimation = 1.0 + +type MessageSendSpec struct { + MaxFee abi.TokenAmount + GasOverEstimation float64 +} + +var DefaultMessageSendSpec = MessageSendSpec{ + // MaxFee of 0.1FIL + MaxFee: abi.NewTokenAmount(int64(constants.FilecoinPrecision) / 10), +} + +func (ms *MessageSendSpec) Get() MessageSendSpec { + if ms == nil { + return DefaultMessageSendSpec + } + + return *ms +} + +const MessageVersion = uint64(0) + +var EmptyTokenAmount = abi.TokenAmount{} + +type ChainMsg interface { + Cid() cid.Cid + VMMessage() *UnsignedMessage + ToStorageBlock() (block.Block, error) + // FIXME: This is the *message* length, this name is misleading. + ChainLength() int + cbor2.Marshaler + cbor2.Unmarshaler +} + +var _ ChainMsg = &UnsignedMessage{} + +type Message = UnsignedMessage + +// UnsignedMessage is an exchange of information between two actors modeled +// as a function call. +type UnsignedMessage struct { + Version uint64 `json:"version"` + + To address.Address `json:"to"` + From address.Address `json:"from"` + // When receiving a message from a user account the nonce in + // the message must match the expected nonce in the from actor. + // This prevents replay attacks. + Nonce uint64 `json:"nonce"` + + Value abi.TokenAmount `json:"value"` + + GasLimit int64 `json:"gasLimit"` + GasFeeCap abi.TokenAmount `json:"gasFeeCap"` + GasPremium abi.TokenAmount `json:"gasPremium"` + + Method abi.MethodNum `json:"method"` + Params []byte `json:"params"` +} + +// NewUnsignedMessage creates a new message. +func NewUnsignedMessage(from, to address.Address, nonce uint64, value abi.TokenAmount, method abi.MethodNum, params []byte) *UnsignedMessage { + return &UnsignedMessage{ + Version: MessageVersion, + To: to, + From: from, + Nonce: nonce, + Value: value, + Method: method, + Params: params, + } +} + +// NewMeteredMessage adds gas price and gas limit to the message +func NewMeteredMessage(from, to address.Address, nonce uint64, value abi.TokenAmount, method abi.MethodNum, params []byte, gasFeeCap, gasPremium abi.TokenAmount, limit int64) *UnsignedMessage { + return &UnsignedMessage{ + Version: MessageVersion, + To: to, + From: from, + Nonce: nonce, + Value: value, + GasFeeCap: gasFeeCap, + GasPremium: gasPremium, + GasLimit: limit, + Method: method, + Params: params, + } +} + +func (msg *UnsignedMessage) RequiredFunds() abi.TokenAmount { + return specsbig.Mul(msg.GasFeeCap, specsbig.NewInt(msg.GasLimit)) +} + +// ToNode converts the Message to an IPLD node. +func (msg *UnsignedMessage) ToNode() (ipld.Node, error) { + buf := new(bytes.Buffer) + err := msg.MarshalCBOR(buf) + if err != nil { + return nil, err + } + data := buf.Bytes() + c, err := constants.DefaultCidBuilder.Sum(data) + if err != nil { + return nil, err + } + + blk, err := block.NewBlockWithCid(data, c) + if err != nil { + return nil, err + } + obj, err := cbor.DecodeBlock(blk) + if err != nil { + return nil, err + } + + return obj, nil +} + +// Cid returns the canonical CID for the message. +// TODO: can we avoid returning an error? +func (msg *UnsignedMessage) Cid() cid.Cid { + obj, err := msg.ToNode() + if err != nil { + panic(fmt.Sprintf("failed to marshal to marshal unsigned message:%s", err)) + } + + return obj.Cid() +} + +func (msg *UnsignedMessage) String() string { + errStr := "(error encoding Message)" + cid := msg.Cid() + js, err := json.MarshalIndent(msg, "", " ") + if err != nil { + return errStr + } + return fmt.Sprintf("Message cid=[%v]: %s", cid, string(js)) +} + +// Equals tests whether two messages are equal +func (msg *UnsignedMessage) Equals(other *UnsignedMessage) bool { + return msg.To == other.To && + msg.From == other.From && + msg.Nonce == other.Nonce && + msg.Value.Equals(other.Value) && + msg.GasPremium.Equals(other.GasPremium) && + msg.GasFeeCap.Equals(other.GasFeeCap) && + msg.GasLimit == other.GasLimit && + msg.Method == other.Method && + bytes.Equal(msg.Params, other.Params) +} + +func (msg *UnsignedMessage) EqualCall(o *Message) bool { + m1 := *msg + m2 := *o + + m1.GasLimit, m2.GasLimit = 0, 0 + m1.GasFeeCap, m2.GasFeeCap = specsbig.Zero(), specsbig.Zero() + m1.GasPremium, m2.GasPremium = specsbig.Zero(), specsbig.Zero() + + return (&m1).Equals(&m2) +} + +func (msg *UnsignedMessage) Serialize() ([]byte, error) { + buf := new(bytes.Buffer) + if err := msg.MarshalCBOR(buf); err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +func (msg *UnsignedMessage) ChainLength() int { + buf := new(bytes.Buffer) + err := msg.MarshalCBOR(buf) + if err != nil { + panic(err) + } + + return buf.Len() +} + +func (msg *UnsignedMessage) VMMessage() *UnsignedMessage { + return msg +} + +func (msg *UnsignedMessage) ToStorageBlock() (block.Block, error) { + buf := new(bytes.Buffer) + err := msg.MarshalCBOR(buf) + if err != nil { + return nil, err + } + data := buf.Bytes() + c, err := abi.CidBuilder.Sum(data) + if err != nil { + return nil, err + } + + return block.NewBlockWithCid(data, c) +} + +func (msg *UnsignedMessage) ValidForBlockInclusion(minGas int64, version network.Version) error { + if msg.Version != 0 { + return xerrors.New("'Version' unsupported") + } + + if msg.To == address.Undef { + return xerrors.New("'To' address cannot be empty") + } + + if msg.To == ZeroAddress && version >= network.Version7 { + return xerrors.New("invalid 'To' address") + } + + if msg.From == address.Undef { + return xerrors.New("'From' address cannot be empty") + } + + if msg.Value.Int == nil { + return xerrors.New("'Value' cannot be nil") + } + + if msg.Value.LessThan(ZeroFIL) { + return xerrors.New("'Value' field cannot be negative") + } + + if msg.Value.GreaterThan(TotalFilecoinInt) { + return xerrors.New("'Value' field cannot be greater than total filecoin supply") + } + + if msg.GasFeeCap.Int == nil { + return xerrors.New("'GasFeeCap' cannot be nil") + } + + if msg.GasFeeCap.LessThan(specsbig.Zero()) { + return xerrors.New("'GasFeeCap' field cannot be negative") + } + + if msg.GasPremium.Int == nil { + return xerrors.New("'GasPremium' cannot be nil") + } + + if msg.GasPremium.LessThan(specsbig.Zero()) { + return xerrors.New("'GasPremium' field cannot be negative") + } + + if msg.GasPremium.GreaterThan(msg.GasFeeCap) { + return xerrors.New("'GasFeeCap' less than 'GasPremium'") + } + + if msg.GasLimit > constants.BlockGasLimit { + return xerrors.New("'GasLimit' field cannot be greater than a newBlock's gas limit") + } + + // since prices might vary with time, this is technically semantic validation + if msg.GasLimit < minGas { + return xerrors.New("'GasLimit' field cannot be less than the cost of storing a message on chain") + } + + return nil +} + +func DecodeMessage(b []byte) (*UnsignedMessage, error) { + var msg UnsignedMessage + + if err := msg.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, err + } + + if msg.Version != MessageVersion { + return nil, fmt.Errorf("decoded message had incorrect version (%d)", msg.Version) + } + + return &msg, nil +} + +func NewGasFeeCap(price int64) abi.TokenAmount { + return NewAttoFIL(big.NewInt(price)) +} + +func NewGasPremium(price int64) abi.TokenAmount { + return NewAttoFIL(big.NewInt(price)) +} + +// TxMeta tracks the merkleroots of both secp and bls messages separately +type TxMeta struct { + BLSRoot cid.Cid `json:"blsRoot"` + SecpRoot cid.Cid `json:"secpRoot"` +} + +// String returns a readable printing string of TxMeta +func (m TxMeta) String() string { + return fmt.Sprintf("secp: %s, bls: %s", m.SecpRoot.String(), m.BLSRoot.String()) +} + +func (m *TxMeta) Cid() cid.Cid { + b, err := m.ToStorageBlock() + if err != nil { + panic(err) // also maybe sketchy + } + return b.Cid() +} + +func (m *TxMeta) ToStorageBlock() (block.Block, error) { + var buf bytes.Buffer + if err := m.MarshalCBOR(&buf); err != nil { + return nil, xerrors.Errorf("failed to marshal MsgMeta: %w", err) + } + + c, err := abi.CidBuilder.Sum(buf.Bytes()) + if err != nil { + return nil, err + } + + return block.NewBlockWithCid(buf.Bytes(), c) +} + +// MessageReceipt is what is returned by executing a message on the vm. +type MessageReceipt struct { + ExitCode exitcode.ExitCode `json:"exitCode"` + Return []byte `json:"return"` + GasUsed int64 `json:"gasUsed"` +} + +func (r *MessageReceipt) String() string { + errStr := "(error encoding MessageReceipt)" + + js, err := json.MarshalIndent(r, "", " ") + if err != nil { + return errStr + } + return fmt.Sprintf("MessageReceipt: %s", string(js)) +} diff --git a/pkg/types/internal/message_test.go b/pkg/types/internal/message_test.go new file mode 100644 index 0000000000..03ad1f9c52 --- /dev/null +++ b/pkg/types/internal/message_test.go @@ -0,0 +1,102 @@ +package internal + +import ( + "bytes" + "reflect" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestMessageMarshal(t *testing.T) { + tf.UnitTest(t) + + addrGetter := NewForTestGetter() + msg := NewMeteredMessage( + addrGetter(), + addrGetter(), + 42, + NewAttoFILFromFIL(17777), + 0, + []byte("foobar"), + NewAttoFILFromFIL(3), + NewAttoFILFromFIL(3), + 4, + ) + + // This check requests that you add a non-zero value for new fields above, + // then update the field count below. + require.Equal(t, 10, reflect.TypeOf(*msg).NumField()) + + buf := new(bytes.Buffer) + err := msg.MarshalCBOR(buf) + assert.NoError(t, err) + + msgBack := UnsignedMessage{} + assert.False(t, msg.Equals(&msgBack)) + + err = msgBack.UnmarshalCBOR(buf) + assert.NoError(t, err) + + assert.Equal(t, msg.Version, msgBack.Version) + assert.Equal(t, msg.To, msgBack.To) + assert.Equal(t, msg.From, msgBack.From) + assert.Equal(t, msg.Value, msgBack.Value) + assert.Equal(t, msg.Method, msgBack.Method) + assert.Equal(t, msg.Params, msgBack.Params) + assert.Equal(t, msg.GasLimit, msgBack.GasLimit) + assert.Equal(t, msg.GasFeeCap, msgBack.GasFeeCap) + assert.Equal(t, msg.GasPremium, msgBack.GasPremium) + assert.True(t, msg.Equals(&msgBack)) +} + +func TestMessageCid(t *testing.T) { + tf.UnitTest(t) + + addrGetter := NewForTestGetter() + + msg1 := NewUnsignedMessage( + addrGetter(), + addrGetter(), + 0, + NewAttoFILFromFIL(999), + 0, + nil, + ) + + msg2 := NewUnsignedMessage( + addrGetter(), + addrGetter(), + 0, + NewAttoFILFromFIL(4004), + 0, + nil, + ) + + c1 := msg1.Cid() + c2 := msg2.Cid() + + assert.NotEqual(t, c1.String(), c2.String()) +} + +func TestMessageString(t *testing.T) { + tf.UnitTest(t) + + addrGetter := NewForTestGetter() + + msg := NewUnsignedMessage( + addrGetter(), + addrGetter(), + 0, + NewAttoFILFromFIL(999), + 0, + nil, + ) + + cid := msg.Cid() + got := msg.String() + assert.Contains(t, got, cid.String()) +} diff --git a/pkg/types/internal/not_found.go b/pkg/types/internal/not_found.go new file mode 100644 index 0000000000..1d12e91e99 --- /dev/null +++ b/pkg/types/internal/not_found.go @@ -0,0 +1,6 @@ +package internal + +import "fmt" + +// ErrNotFound is not the error you are looking for. +var ErrNotFound = fmt.Errorf("not found") diff --git a/pkg/types/internal/signed_message.go b/pkg/types/internal/signed_message.go new file mode 100644 index 0000000000..2b263f176b --- /dev/null +++ b/pkg/types/internal/signed_message.go @@ -0,0 +1,155 @@ +package internal + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + + "github.com/filecoin-project/go-state-types/abi" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + ipld "github.com/ipfs/go-ipld-format" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/crypto" +) + +// SignedMessage contains a message and its signature +type SignedMessage struct { + Message UnsignedMessage `json:"message"` + Signature crypto.Signature `json:"signature"` +} + +// NewSignedMessage accepts a message `msg` and a signer `s`. NewSignedMessage returns a `SignedMessage` containing +// a signature derived from the serialized `msg` and `msg.From` +// NOTE: this method can only sign message with From being a public-key type address, not an ID address. +// We should deprecate this and move to more explicit signing via an address resolver. +func NewSignedMessage(ctx context.Context, msg UnsignedMessage, s Signer) (*SignedMessage, error) { + msgCid := msg.Cid() + + sig, err := s.SignBytes(ctx, msgCid.Bytes(), msg.From) + if err != nil { + return nil, err + } + + return &SignedMessage{ + Message: msg, + Signature: *sig, + }, nil +} + +// Cid returns the canonical CID for the SignedMessage. +func (smsg *SignedMessage) Cid() cid.Cid { + if smsg.Signature.Type == crypto.SigTypeBLS { + return smsg.Message.Cid() + } + + obj, err := smsg.ToNode() + if err != nil { + panic(fmt.Sprintf("failed to marshal to marshal message:%s", err)) + } + + return obj.Cid() +} + +// ToNode converts the SignedMessage to an IPLD node. +func (smsg *SignedMessage) ToNode() (ipld.Node, error) { + if smsg.Signature.Type == crypto.SigTypeBLS { + return smsg.Message.ToNode() + } + + buf := new(bytes.Buffer) + err := smsg.MarshalCBOR(buf) + if err != nil { + return nil, err + } + data := buf.Bytes() + c, err := constants.DefaultCidBuilder.Sum(data) + if err != nil { + return nil, err + } + + blk, err := blocks.NewBlockWithCid(data, c) + if err != nil { + return nil, err + } + obj, err := cbor.DecodeBlock(blk) + if err != nil { + return nil, err + } + + return obj, nil + +} + +// String return message json string +func (smsg *SignedMessage) String() string { + errStr := "(error encoding SignedMessage)" + cid := smsg.Cid() + js, err := json.MarshalIndent(smsg, "", " ") + if err != nil { + return errStr + } + return fmt.Sprintf("SignedMessage cid=[%v]: %s", cid, string(js)) +} + +// Equals tests whether two signed messages are equal. +func (smsg *SignedMessage) Equals(other *SignedMessage) bool { + return smsg.Message.Equals(&other.Message) && + smsg.Signature.Equals(&other.Signature) +} + +//ChainLength return length of message binary +func (smsg *SignedMessage) ChainLength() int { + var err error + buf := new(bytes.Buffer) + + if smsg.Signature.Type == crypto.SigTypeBLS { + // BLS chain message length doesn't include signature + err = smsg.Message.MarshalCBOR(buf) + } else { + err = smsg.MarshalCBOR(buf) + } + if err != nil { + panic(err) + } + return buf.Len() +} + +// ToStorageBlock return db block of message binary +func (smsg *SignedMessage) ToStorageBlock() (blocks.Block, error) { + if smsg.Signature.Type == crypto.SigTypeBLS { + return smsg.Message.ToStorageBlock() + } + + buf := new(bytes.Buffer) + err := smsg.MarshalCBOR(buf) + if err != nil { + return nil, err + } + data := buf.Bytes() + + c, err := abi.CidBuilder.Sum(data) + if err != nil { + return nil, err + } + + return blocks.NewBlockWithCid(data, c) +} + +// Serialize return message binary +func (smsg *SignedMessage) Serialize() ([]byte, error) { + buf := new(bytes.Buffer) + if err := smsg.MarshalCBOR(buf); err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +func (smsg *SignedMessage) VMMessage() *UnsignedMessage { + return &smsg.Message +} + +var _ ChainMsg = &SignedMessage{} diff --git a/pkg/types/internal/signed_message_test.go b/pkg/types/internal/signed_message_test.go new file mode 100644 index 0000000000..7ced27ae45 --- /dev/null +++ b/pkg/types/internal/signed_message_test.go @@ -0,0 +1,99 @@ +package internal + +import ( + "bytes" + "context" + "reflect" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" +) + +var mockSigner = NewMockSigner(MustGenerateKeyInfo(1, 42)) + +func TestSignedMessageString(t *testing.T) { + tf.UnitTest(t) + + smsg := makeMessage(t, mockSigner, 42) + cid := smsg.Cid() + got := smsg.String() + assert.Contains(t, got, cid.String()) +} + +func TestSignedMessageMarshal(t *testing.T) { + tf.UnitTest(t) + + smsg := makeMessage(t, mockSigner, 42) + + marshalled := new(bytes.Buffer) + err := smsg.MarshalCBOR(marshalled) + assert.NoError(t, err) + + smsgBack := SignedMessage{} + assert.False(t, smsg.Equals(&smsgBack)) + + err = smsgBack.UnmarshalCBOR(marshalled) + assert.NoError(t, err) + + assert.Equal(t, smsg.Message, smsgBack.Message) + assert.Equal(t, smsg.Signature, smsgBack.Signature) + assert.True(t, smsg.Equals(&smsgBack)) +} + +func TestSignedMessageCid(t *testing.T) { + tf.UnitTest(t) + + smsg1 := makeMessage(t, mockSigner, 41) + smsg2 := makeMessage(t, mockSigner, 42) + + c1 := smsg1.Cid() + c2 := smsg2.Cid() + + assert.NotEqual(t, c1.String(), c2.String()) + +} + +func TestSignedMessageCidToNode(t *testing.T) { + tf.UnitTest(t) + + smsg := makeMessage(t, mockSigner, 41) + + c := smsg.Cid() + n, err := smsg.ToNode() + require.NoError(t, err) + + assert.Equal(t, c, n.Cid()) + +} + +func makeMessage(t *testing.T, signer MockSigner, nonce uint64) *SignedMessage { + newAddr, err := address.NewSecp256k1Address([]byte("receiver")) + require.NoError(t, err) + + msg := NewMeteredMessage( + signer.Addresses[0], + newAddr, + nonce, + NewAttoFILFromFIL(2), + abi.MethodNum(2352), + []byte("params"), + NewGasFeeCap(1000), + NewGasPremium(100), + 100) + smsg, err := NewSignedMessage(context.TODO(), *msg, &signer) + require.NoError(t, err) + + // This check requests that you add a non-zero value for new fields above, + // then update the field count below. + require.Equal(t, 2, reflect.TypeOf(*smsg).NumField()) + + return smsg +} diff --git a/pkg/types/internal/signer.go b/pkg/types/internal/signer.go new file mode 100644 index 0000000000..407d1b64ae --- /dev/null +++ b/pkg/types/internal/signer.go @@ -0,0 +1,14 @@ +package internal + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/crypto" +) + +// Signer signs data with a private key obtained internally from a provided address. +type Signer interface { + SignBytes(ctx context.Context, data []byte, addr address.Address) (*crypto.Signature, error) + HasAddress(ctx context.Context, addr address.Address) (bool, error) +} diff --git a/pkg/types/internal/testing.go b/pkg/types/internal/testing.go new file mode 100644 index 0000000000..2b9a293197 --- /dev/null +++ b/pkg/types/internal/testing.go @@ -0,0 +1,363 @@ +package internal + +import ( + "bytes" + "context" + "crypto/rand" + "fmt" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + "github.com/pkg/errors" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/pkg/crypto" +) + +// MockSigner implements the Signer interface +type MockSigner struct { + AddrKeyInfo map[address.Address]crypto.KeyInfo + Addresses []address.Address + PubKeys [][]byte +} + +// NewMockSigner returns a new mock signer, capable of signing data with +// keys (addresses derived from) in keyinfo +func NewMockSigner(kis []crypto.KeyInfo) MockSigner { + var ms MockSigner + ms.AddrKeyInfo = make(map[address.Address]crypto.KeyInfo) + for _, k := range kis { + // extract public key + pub, err := k.PublicKey() + if err != nil { + panic(err) + } + + var newAddr address.Address + if k.SigType == crypto.SigTypeSecp256k1 { + newAddr, err = address.NewSecp256k1Address(pub) + } else if k.SigType == crypto.SigTypeBLS { + newAddr, err = address.NewBLSAddress(pub) + } + if err != nil { + panic(err) + } + ms.Addresses = append(ms.Addresses, newAddr) + ms.AddrKeyInfo[newAddr] = k + ms.PubKeys = append(ms.PubKeys, pub) + } + return ms +} + +// NewMockSignersAndKeyInfo is a convenience function to generate a mock +// signers with some keys. +func NewMockSignersAndKeyInfo(numSigners int) (MockSigner, []crypto.KeyInfo) { + ki := MustGenerateKeyInfo(numSigners, 42) + signer := NewMockSigner(ki) + return signer, ki +} + +// MustGenerateMixedKeyInfo produces m bls keys and n secp keys. +// BLS and Secp will be interleaved. The keys will be valid, but not deterministic. +func MustGenerateMixedKeyInfo(m int, n int) []crypto.KeyInfo { + info := []crypto.KeyInfo{} + for m > 0 && n > 0 { + if m > 0 { + ki, err := crypto.NewBLSKeyFromSeed(rand.Reader) + if err != nil { + panic(err) + } + info = append(info, ki) + m-- + } + + if n > 0 { + ki, err := crypto.NewSecpKeyFromSeed(rand.Reader) + if err != nil { + panic(err) + } + info = append(info, ki) + n-- + } + } + return info +} + +// MustGenerateBLSKeyInfo produces n distinct BLS keyinfos. +func MustGenerateBLSKeyInfo(n int, seed byte) []crypto.KeyInfo { + token := bytes.Repeat([]byte{seed}, 512) + var keyinfos []crypto.KeyInfo + for i := 0; i < n; i++ { + token[0] = byte(i) + ki, err := crypto.NewBLSKeyFromSeed(bytes.NewReader(token)) + if err != nil { + panic(err) + } + keyinfos = append(keyinfos, ki) + } + return keyinfos +} + +// MustGenerateKeyInfo generates `n` distinct keyinfos using seed `seed`. +// The result is deterministic (for stable tests), don't use this for real keys! +func MustGenerateKeyInfo(n int, seed byte) []crypto.KeyInfo { + token := bytes.Repeat([]byte{seed}, 512) + var keyinfos []crypto.KeyInfo + for i := 0; i < n; i++ { + token[0] = byte(i) + ki, err := crypto.NewSecpKeyFromSeed(bytes.NewReader(token)) + if err != nil { + panic(err) + } + keyinfos = append(keyinfos, ki) + } + return keyinfos +} + +// SignBytes cryptographically signs `data` using the `addr`. +func (ms MockSigner) SignBytes(_ context.Context, data []byte, addr address.Address) (*crypto.Signature, error) { + ki, ok := ms.AddrKeyInfo[addr] + if !ok { + return nil, errors.New("unknown address") + } + var sig *crypto.Signature + err := ki.UsePrivateKey(func(privateKey []byte) error { + var err error + sig, err = crypto.Sign(data, privateKey, ki.SigType) + + return err + }) + return sig, err +} + +// HasAddress returns whether the signer can sign with this address +func (ms MockSigner) HasAddress(_ context.Context, addr address.Address) (bool, error) { + return true, nil +} + +// GetAddressForPubKey looks up a KeyInfo address associated with a given PublicKeyForSecpSecretKey for a MockSigner +func (ms MockSigner) GetAddressForPubKey(pk []byte) (address.Address, error) { + var addr address.Address + + for _, ki := range ms.AddrKeyInfo { + testPk, err := ki.PublicKey() + if err != nil { + return address.Undef, err + } + + if bytes.Equal(testPk, pk) { + addr, err := ki.Address() + if err != nil { + return addr, errors.New("could not fetch address") + } + return addr, nil + } + } + return addr, errors.New("public key not found in wallet") +} + +// NewSignedMessageForTestGetter returns a closure that returns a SignedMessage unique to that invocation. +// The message is unique wrt the closure returned, not globally. You can use this function +// in tests instead of manually creating messages -- it both reduces duplication and gives us +// exactly one place to create valid messages for tests if messages require validation in the +// future. +// TODO support chosing from address +func NewSignedMessageForTestGetter(ms MockSigner) func(uint64) *SignedMessage { + i := 0 + return func(nonce uint64) *SignedMessage { + s := fmt.Sprintf("smsg%d", i) + i++ + newAddr, err := address.NewSecp256k1Address([]byte(s + "-to")) + if err != nil { + panic(err) + } + msg := NewMeteredMessage( + ms.Addresses[0], // from needs to be an address from the signer + newAddr, + nonce, + ZeroFIL, + 0, + []byte("params"), + ZeroFIL, + ZeroFIL, + 0, + ) + smsg, err := NewSignedMessage(context.TODO(), *msg, &ms) + if err != nil { + panic(err) + } + return smsg + } +} + +// Type-related test helpers. + +// CidFromString generates Cid from string input +func CidFromString(t *testing.T, input string) cid.Cid { + c, err := constants.DefaultCidBuilder.Sum([]byte(input)) + require.NoError(t, err) + return c +} + +// NewCidForTestGetter returns a closure that returns a Cid unique to that invocation. +// The Cid is unique wrt the closure returned, not globally. You can use this function +// in tests. +func NewCidForTestGetter() func() cid.Cid { + i := 31337 + return func() cid.Cid { + obj, err := cbor.WrapObject([]int{i}, constants.DefaultHashFunction, -1) + if err != nil { + panic(err) + } + i++ + return obj.Cid() + } +} + +// NewMessageForTestGetter returns a closure that returns a message unique to that invocation. +// The message is unique wrt the closure returned, not globally. You can use this function +// in tests instead of manually creating messages -- it both reduces duplication and gives us +// exactly one place to create valid messages for tests if messages require validation in the +// future. +func NewMessageForTestGetter() func() *UnsignedMessage { + i := 0 + return func() *UnsignedMessage { + s := fmt.Sprintf("msg%d", i) + i++ + from, err := address.NewSecp256k1Address([]byte(s + "-from")) + if err != nil { + panic(err) + } + to, err := address.NewSecp256k1Address([]byte(s + "-to")) + if err != nil { + panic(err) + } + return NewUnsignedMessage( + from, + to, + 0, + ZeroFIL, + abi.MethodNum(10000+i), + nil) + } +} + +// NewMsgs returns n messages. The messages returned are unique to this invocation +// but are not unique globally (ie, a second call to NewMsgs will return the same +// set of messages). +func NewMsgs(n int) []*UnsignedMessage { + newMsg := NewMessageForTestGetter() + msgs := make([]*UnsignedMessage, n) + for i := 0; i < n; i++ { + msgs[i] = newMsg() + msgs[i].Nonce = uint64(i) + } + return msgs +} + +// NewSignedMsgs returns n signed messages. The messages returned are unique to this invocation +// but are not unique globally (ie, a second call to NewSignedMsgs will return the same +// set of messages). +func NewSignedMsgs(n uint, ms MockSigner) []*SignedMessage { + var err error + newMsg := NewMessageForTestGetter() + smsgs := make([]*SignedMessage, n) + for i := uint(0); i < n; i++ { + msg := newMsg() + msg.From = ms.Addresses[0] + msg.Nonce = uint64(i) + msg.GasFeeCap = ZeroFIL + msg.GasPremium = ZeroFIL + msg.GasLimit = 0 + smsgs[i], err = NewSignedMessage(context.TODO(), *msg, ms) + if err != nil { + panic(err) + } + } + return smsgs +} + +// SignMsgs returns a slice of signed messages where the original messages +// are `msgs`, if signing one of the `msgs` fails an error is returned +func SignMsgs(ms MockSigner, msgs []*UnsignedMessage) ([]*SignedMessage, error) { + var smsgs []*SignedMessage + for _, m := range msgs { + s, err := NewSignedMessage(context.TODO(), *m, ms) + if err != nil { + return nil, err + } + smsgs = append(smsgs, s) + } + return smsgs, nil +} + +// NewMsgsWithAddrs returns a slice of `n` messages who's `From` field's are pulled +// from `a`. This method should be used when the addresses returned are to be signed +// at a later point. +func NewMsgsWithAddrs(n int, a []address.Address) []*UnsignedMessage { + if n > len(a) { + panic("cannot create more messages than there are addresess for") + } + newMsg := NewMessageForTestGetter() + msgs := make([]*UnsignedMessage, n) + for i := 0; i < n; i++ { + msgs[i] = newMsg() + msgs[i].From = a[i] + } + return msgs +} + +// HasCid allows two values with CIDs to be compared. +type HasCid interface { + Cid() cid.Cid +} + +// AssertHaveSameCid asserts that two values have identical CIDs. +func AssertHaveSameCid(t *testing.T, m HasCid, n HasCid) { + if !m.Cid().Equals(n.Cid()) { + assert.Fail(t, "CIDs don't match", "not equal %v %v", m.Cid(), n.Cid()) + } +} + +// AssertCidsEqual asserts that two CIDS are identical. +func AssertCidsEqual(t *testing.T, m cid.Cid, n cid.Cid) { + if !m.Equals(n) { + assert.Fail(t, "CIDs don't match", "not equal %v %v", m, n) + } +} + +func RequireIDAddress(t *testing.T, i int) address.Address { + a, err := address.NewIDAddress(uint64(i)) + if err != nil { + t.Fatalf("failed to make address: %v", err) + } + return a +} + +// NewForTestGetter returns a closure that returns an address unique to that invocation. +// The address is unique wrt the closure returned, not globally. +func NewForTestGetter() func() address.Address { + i := 0 + return func() address.Address { + s := fmt.Sprintf("address%d", i) + i++ + newAddr, err := address.NewSecp256k1Address([]byte(s)) + if err != nil { + panic(err) + } + return newAddr + } +} + +// RequireNewTipSet instantiates and returns a new tipset of the given blocks +// and requires that the setup validation succeed. +func RequireNewTipSet(t *testing.T, blks ...*BlockHeader) *TipSet { + ts, err := NewTipSet(blks...) + require.NoError(t, err) + return ts +} diff --git a/pkg/types/internal/testing_messages.go b/pkg/types/internal/testing_messages.go new file mode 100644 index 0000000000..57f470a57e --- /dev/null +++ b/pkg/types/internal/testing_messages.go @@ -0,0 +1,102 @@ +package internal + +import ( + "context" + "fmt" + specsbig "github.com/filecoin-project/go-state-types/big" + "testing" + + address "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/crypto" +) + +// MessageMaker creates unique, signed messages for use in tests. +type MessageMaker struct { + DefaultGasFeeCap specsbig.Int + DefaultGasPremium specsbig.Int + DefaultGasUnits int64 + + signer *MockSigner + seq uint + t *testing.T +} + +// NewMessageMaker creates a new message maker with a set of signing keys. +func NewMessageMaker(t *testing.T, keys []crypto.KeyInfo) *MessageMaker { + addresses := make([]address.Address, len(keys)) + signer := NewMockSigner(keys) + + for i, key := range keys { + addr, _ := key.Address() + addresses[i] = addr + } + + return &MessageMaker{ZeroFIL, ZeroFIL, 0, &signer, 0, t} +} + +// Addresses returns the addresses for which this maker can sign messages. +func (mm *MessageMaker) Addresses() []address.Address { + return mm.signer.Addresses +} + +// Signer returns the signer with which this maker signs messages. +func (mm *MessageMaker) Signer() *MockSigner { + return mm.signer +} + +// NewUnsignedMessage creates a new message. +func (mm *MessageMaker) NewUnsignedMessage(from address.Address, nonce uint64) *UnsignedMessage { + seq := mm.seq + mm.seq++ + to, err := address.NewSecp256k1Address([]byte("destination")) + require.NoError(mm.t, err) + return NewMeteredMessage( + from, + to, + nonce, + ZeroFIL, + abi.MethodNum(9000+seq), + []byte("params"), + mm.DefaultGasFeeCap, + mm.DefaultGasPremium, + mm.DefaultGasUnits) +} + +// NewSignedMessage creates a new signed message. +func (mm *MessageMaker) NewSignedMessage(from address.Address, nonce uint64) *SignedMessage { + msg := mm.NewUnsignedMessage(from, nonce) + signed, err := NewSignedMessage(context.TODO(), *msg, mm.signer) + require.NoError(mm.t, err) + return signed +} + +// EmptyReceipts returns a slice of n empty receipts. +func EmptyReceipts(n int) []*MessageReceipt { + out := make([]*MessageReceipt, n) + for i := 0; i < n; i++ { + out[i] = &MessageReceipt{} + } + return out +} + +// ReceiptMaker generates unique receipts +type ReceiptMaker struct { + seq uint +} + +// NewReceiptMaker creates a new receipt maker +func NewReceiptMaker() *ReceiptMaker { + return &ReceiptMaker{0} +} + +// NewReceipt creates a new distinct receipt. +func (rm *ReceiptMaker) NewReceipt() MessageReceipt { + seq := rm.seq + rm.seq++ + return MessageReceipt{ + Return: []byte(fmt.Sprintf("%d", seq)), + } +} diff --git a/pkg/types/internal/testing_test.go b/pkg/types/internal/testing_test.go new file mode 100644 index 0000000000..4c8914e86a --- /dev/null +++ b/pkg/types/internal/testing_test.go @@ -0,0 +1,30 @@ +package internal + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestCidForTestGetter(t *testing.T) { + tf.UnitTest(t) + + newCid := NewCidForTestGetter() + c1 := newCid() + c2 := newCid() + assert.False(t, c1.Equals(c2)) + assert.False(t, c1.Equals(CidFromString(t, "somecid"))) // Just in case. +} + +func TestNewMessageForTestGetter(t *testing.T) { + tf.UnitTest(t) + + newMsg := NewMessageForTestGetter() + m1 := newMsg() + c1 := m1.Cid() + m2 := newMsg() + c2 := m2.Cid() + assert.False(t, c1.Equals(c2)) +} diff --git a/pkg/types/internal/ticket.go b/pkg/types/internal/ticket.go new file mode 100644 index 0000000000..eda9af33e9 --- /dev/null +++ b/pkg/types/internal/ticket.go @@ -0,0 +1,42 @@ +package internal + +import ( + "bytes" + "fmt" + "math/big" + + "github.com/minio/blake2b-simd" +) + +// A Ticket is a marker of a tick of the blockchain's clock. It is the source +// of randomness for proofs of storage and leader election. It is generated +// by the miner of a newBlock using a VRF. +type Ticket struct { + // A proof output by running a VRF on the VRFProof of the parent ticket + VRFProof VRFPi +} + +// String returns the string representation of the VRFProof of the ticket +func (t Ticket) String() string { + return fmt.Sprintf("%x", t.VRFProof) +} + +func (t *Ticket) Compare(o *Ticket) int { + tDigest := t.VRFProof.Digest() + oDigest := o.VRFProof.Digest() + return bytes.Compare(tDigest[:], oDigest[:]) +} + +func (t *Ticket) Less(o *Ticket) bool { + return t.Compare(o) < 0 +} + +func (t *Ticket) Quality() float64 { + ticketHash := blake2b.Sum256(t.VRFProof) + ticketNum := BigFromBytes(ticketHash[:]).Int + ticketDenu := big.NewInt(1) + ticketDenu.Lsh(ticketDenu, 256) + tv, _ := new(big.Rat).SetFrac(ticketNum, ticketDenu).Float64() + tq := 1 - tv + return tq +} diff --git a/pkg/types/internal/tipset.go b/pkg/types/internal/tipset.go new file mode 100644 index 0000000000..9783cbaada --- /dev/null +++ b/pkg/types/internal/tipset.go @@ -0,0 +1,289 @@ +package internal + +import ( + "bytes" + "encoding/json" + "sort" + + "github.com/filecoin-project/go-state-types/abi" + fbig "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + "github.com/pkg/errors" +) + +// TipSet is a non-empty, immutable set of blocks at the same height with the same parent set. +// Blocks in a tipset are canonically ordered by ticket. Blocks may be iterated either via +// ToSlice() (which involves a shallow copy) or efficiently by index with At(). +// TipSet is a lightweight value type; passing by pointer is usually unnecessary. +// +// Canonical tipset newBlock ordering does not match the order of CIDs in a TipSetKey used as +// a tipset "key". +type TipSet struct { + // This slice is wrapped in a struct to enforce immutability. + blocks []*BlockHeader + // Key is computed at construction and cached. + key TipSetKey +} + +var ( + // errNoBlocks is returned from the tipset constructor when given no blocks. + errNoBlocks = errors.New("no blocks for tipset") +) + +// UndefTipSet is a singleton representing a nil or undefined tipset. +var UndefTipSet = &TipSet{} + +// NewTipSet builds a new TipSet from a collection of blocks. +// The blocks must be distinct (different CIDs), have the same height, and same parent set. +func NewTipSet(blocks ...*BlockHeader) (*TipSet, error) { + if len(blocks) == 0 { + return nil, errNoBlocks + } + + first := blocks[0] + height := first.Height + parents := first.Parents + weight := first.ParentWeight + cids := make([]cid.Cid, len(blocks)) + + sorted := make([]*BlockHeader, len(blocks)) + seen := make(map[cid.Cid]struct{}) + for i, blk := range blocks { + if i > 0 { // Skip redundant checks for first newBlock + if blk.Height != height { + return nil, errors.Errorf("Inconsistent newBlock heights %d and %d", height, blk.Height) + } + if !blk.Parents.Equals(parents) { + return nil, errors.Errorf("Inconsistent newBlock parents %s and %s", parents.String(), blk.Parents.String()) + } + if !blk.ParentWeight.Equals(weight) { + return nil, errors.Errorf("Inconsistent newBlock parent weights %d and %d", weight, blk.ParentWeight) + } + } + if _, ok := seen[blk.Cid()]; ok { + return nil, errors.New("duplicate newBlock") + } + seen[blk.Cid()] = struct{}{} + sorted[i] = blk + } + + // Sort blocks by ticket + sort.Slice(sorted, func(i, j int) bool { + cmp := sorted[i].Ticket.Compare(&sorted[j].Ticket) + if cmp == 0 { + // Break ticket ties with the newBlock CIDs, which are distinct. + cmp = bytes.Compare(sorted[i].Cid().Bytes(), sorted[j].Cid().Bytes()) + } + return cmp < 0 + }) + for i, blk := range sorted { + cids[i] = blk.Cid() + } + // Duplicate blocks (CIDs) are rejected here, pass that error through. + key := NewTipSetKey(cids...) + return &TipSet{sorted, key}, nil +} + +// Defined checks whether the tipset is defined. +// Invoking any other methods on an undefined tipset will result in undefined behaviour (c.f. cid.Undef) +func (ts *TipSet) Defined() bool { + if ts == nil { + return false + } + return len(ts.blocks) > 0 +} + +// Len returns the number of blocks in the tipset. +func (ts *TipSet) Len() int { + if ts == nil { + return 0 + } + return len(ts.blocks) +} + +// At returns the i'th newBlock in the tipset. +// An index outside the half-open range [0, Len()) will panic. +func (ts *TipSet) At(i int) *BlockHeader { + return ts.blocks[i] +} + +// Key returns a key for the tipset. +func (ts *TipSet) Key() TipSetKey { + if ts == nil { + return EmptyTSK + } + return ts.key +} + +// ToSlice returns an ordered slice of pointers to the tipset's blocks. +func (ts *TipSet) ToSlice() []*BlockHeader { + slice := make([]*BlockHeader, len(ts.blocks)) + copy(slice, ts.blocks) + return slice +} + +// MinTicket returns the smallest ticket of all blocks in the tipset. +func (ts *TipSet) MinTicket() Ticket { + blks := ts.Blocks() + + min := blks[0] + + for _, b := range blks[1:] { + if b.Ticket.Less(&min.Ticket) { + min = b + } + } + return min.Ticket +} + +func (ts *TipSet) Cids() []cid.Cid { + var cids []cid.Cid + if ts.Defined() { + for _, b := range ts.blocks { + cids = append(cids, b.Cid()) + } + return cids + } + return []cid.Cid{} +} + +// Height returns the height of a tipset. +func (ts *TipSet) Height() abi.ChainEpoch { + if ts.Defined() { + return ts.blocks[0].Height + } + return 0 +} + +// Parents returns the CIDs of the parents of the blocks in the tipset. +func (ts *TipSet) Parents() TipSetKey { + if ts.Defined() { + return ts.blocks[0].Parents + } + return TipSetKey{} +} + +// Parents returns the CIDs of the parents of the blocks in the tipset. +func (ts *TipSet) ParentState() cid.Cid { + if ts.Defined() { + return ts.blocks[0].ParentStateRoot + } + return cid.Undef +} + +// ParentWeight returns the tipset's ParentWeight in fixed point form. +func (ts *TipSet) ParentWeight() fbig.Int { + if ts.Defined() { + return ts.blocks[0].ParentWeight + } + return fbig.Zero() +} + +// Equals tests whether the tipset contains the same blocks as another. +// Equality is not tested deeply: two tipsets are considered equal if their keys (ordered newBlock CIDs) are equal. +func (ts *TipSet) Equals(ts2 *TipSet) bool { + if ts == nil && ts2 == nil { + return true + } + if ts == nil || ts2 == nil { + return false + } + + return ts.Key().Equals(ts2.Key()) +} + +// String returns a formatted string of the CIDs in the TipSet. +// "{ }" +// Note: existing callers use this as a unique key for the tipset. We should change them +// to use the TipSetKey explicitly +func (ts TipSet) String() string { + return ts.Key().String() +} + +func (ts *TipSet) Blocks() []*BlockHeader { + return ts.blocks +} + +func (ts *TipSet) MinTimestamp() uint64 { + minTS := ts.blocks[0].Timestamp + for _, bh := range ts.Blocks()[1:] { + if bh.Timestamp < minTS { + minTS = bh.Timestamp + } + } + return minTS +} + +func (ts *TipSet) IsChildOf(parent *TipSet) bool { + return CidArrsEqual(ts.Parents().Cids(), parent.key.Cids()) && + // FIXME: The height check might go beyond what is meant by + // "parent", but many parts of the code rely on the tipset's + // height for their processing logic at the moment to obviate it. + ts.Height() > parent.Height() +} + +//this types just for marshal +type expTipSet struct { + // This slice is wrapped in a struct to enforce immutability. + Blocks []*BlockHeader + // Key is computed at construction and cached. + Key TipSetKey +} + +func (ts *TipSet) MarshalJSON() ([]byte, error) { + // why didnt i just export the fields? Because the struct has methods with the + // same names already + return json.Marshal(expTipSet{ + Blocks: ts.blocks, + Key: ts.key, + }) +} + +func (ts *TipSet) UnmarshalJSON(b []byte) error { + var ets expTipSet + if err := json.Unmarshal(b, &ets); err != nil { + return err + } + + ots, err := NewTipSet(ets.Blocks...) + if err != nil { + return err + } + + *ts = *ots + + return nil +} + +func (ts *TipSet) MinTicketBlock() *BlockHeader { + blks := ts.Blocks() + + min := blks[0] + + for _, b := range blks[1:] { + if b.LastTicket().Less(min.LastTicket()) { + min = b + } + } + + return min +} + +func CidArrsEqual(a, b []cid.Cid) bool { + if len(a) != len(b) { + return false + } + + // order ignoring compare... + s := make(map[cid.Cid]bool) + for _, c := range a { + s[c] = true + } + + for _, c := range b { + if !s[c] { + return false + } + } + return true +} diff --git a/pkg/types/internal/tipset_key.go b/pkg/types/internal/tipset_key.go new file mode 100644 index 0000000000..96c1ac4402 --- /dev/null +++ b/pkg/types/internal/tipset_key.go @@ -0,0 +1,218 @@ +package internal + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "strings" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + xerrors "github.com/pkg/errors" + cbg "github.com/whyrusleeping/cbor-gen" +) + +// TipSetKey is an immutable set of CIDs forming a unique key for a TipSet. +// Equal keys will have equivalent iteration order. CIDs are maintained in +// the same order as the canonical iteration order of blocks in a tipset (which is by ticket). +// This convention is maintained by the caller. The order of input cids to the constructor +// must be the same as this canonical order. It is the caller's responsibility to not +// construct a key with duplicate ids +// TipSetKey is a lightweight value type; passing by pointer is usually unnecessary. + +var EmptyTSK = TipSetKey{} + +// The length of a newBlock header CID in bytes. +var blockHeaderCIDLen int + +func init() { + // hash a large string of zeros so we don't estimate based on inlined CIDs. + var buf [256]byte + c, err := abi.CidBuilder.Sum(buf[:]) + if err != nil { + panic(err) + } + blockHeaderCIDLen = len(c.Bytes()) +} + +// A TipSetKey is an immutable collection of CIDs forming a unique key for a tipset. +// The CIDs are assumed to be distinct and in canonical order. Two keys with the same +// CIDs in a different order are not considered equal. +// TipSetKey is a lightweight value type, and may be compared for equality with ==. +type TipSetKey struct { + // The internal representation is a concatenation of the bytes of the CIDs, which are + // self-describing, wrapped as a string. + // These gymnastics make the a TipSetKey usable as a map key. + // The empty key has value "". + value string +} + +// NewTipSetKey builds a new key from a slice of CIDs. +// The CIDs are assumed to be ordered correctly. +func NewTipSetKey(cids ...cid.Cid) TipSetKey { + encoded := encodeKey(cids) + return TipSetKey{string(encoded)} +} + +// TipSetKeyFromBytes wraps an encoded key, validating correct decoding. +func TipSetKeyFromBytes(encoded []byte) (TipSetKey, error) { + _, err := decodeKey(encoded) + if err != nil { + return TipSetKey{}, err + } + return TipSetKey{string(encoded)}, nil +} + +// Cids returns a slice of the CIDs comprising this key. +func (tipsetKey TipSetKey) Cids() []cid.Cid { + cids, err := decodeKey([]byte(tipsetKey.value)) + if err != nil { + panic("invalid tipset key: " + err.Error()) + } + return cids +} + +// String returns a human-readable representation of the key. +func (tipsetKey TipSetKey) String() string { + b := strings.Builder{} + b.WriteString("{") + for _, c := range tipsetKey.Cids() { + b.Write([]byte(fmt.Sprintf(" %s", c.String()))) + } + b.WriteString(" }") + return b.String() +} + +// Bytes returns a binary representation of the key. +func (tipsetKey TipSetKey) Bytes() []byte { + return []byte(tipsetKey.value) +} + +func (tipsetKey TipSetKey) MarshalJSON() ([]byte, error) { + return json.Marshal(tipsetKey.Cids()) +} + +func (tipsetKey *TipSetKey) UnmarshalJSON(b []byte) error { + var cids []cid.Cid + if err := json.Unmarshal(b, &cids); err != nil { + return err + } + tipsetKey.value = string(encodeKey(cids)) + return nil +} + +func (tipsetKey TipSetKey) IsEmpty() bool { + return len(tipsetKey.value) == 0 +} + +// Equals checks whether the set contains exactly the same CIDs as another. +func (tipsetKey TipSetKey) Equals(other TipSetKey) bool { + return tipsetKey.value == other.value +} + +func (tipsetKey *TipSetKey) UnmarshalCBOR(r io.Reader) error { + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Parents: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + cids := make([]cid.Cid, extra) + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.Parents failed: %v", err) + } + cids[i] = c + } + tipsetKey.value = string(encodeKey(cids)) + } + return nil +} + +func (tipsetKey TipSetKey) MarshalCBOR(w io.Writer) error { + cids := tipsetKey.Cids() + if len(cids) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Parents was too long") + } + scratch := make([]byte, 9) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(cids))); err != nil { + return err + } + for _, v := range cids { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.Parents: %v", err) + } + } + return nil +} + +// ContainsAll checks if another set is a subset of this one. +// We can assume that the relative order of members of one key is +// maintained in the other since we assume that all ids are sorted +// by corresponding newBlock ticket value. +func (tipsetKey TipSetKey) ContainsAll(other TipSetKey) bool { + // Since we assume the ids must have the same relative sorting we can + // perform one pass over this set, advancing the other index whenever the + // values match. + cids := tipsetKey.Cids() + otherCids := other.Cids() + otherIdx := 0 + for i := 0; i < len(cids) && otherIdx < len(otherCids); i++ { + if cids[i].Equals(otherCids[otherIdx]) { + otherIdx++ + } + } + // otherIdx is advanced the full length only if every element was found in this set. + return otherIdx == len(otherCids) +} + +// Has checks whether the set contains `id`. +func (tipsetKey TipSetKey) Has(id cid.Cid) bool { + // Find index of the first CID not less than id. + for _, cid := range tipsetKey.Cids() { + if cid == id { + return true + } + } + return false +} + +func encodeKey(cids []cid.Cid) []byte { + buffer := new(bytes.Buffer) + for _, c := range cids { + // bytes.Buffer.Write() err is documented to be always nil. + _, _ = buffer.Write(c.Bytes()) + } + return buffer.Bytes() +} + +func decodeKey(encoded []byte) ([]cid.Cid, error) { + // To avoid reallocation of the underlying array, estimate the number of CIDs to be extracted + // by dividing the encoded length by the expected CID length. + estimatedCount := len(encoded) / blockHeaderCIDLen + cids := make([]cid.Cid, 0, estimatedCount) + nextIdx := 0 + for nextIdx < len(encoded) { + nr, c, err := cid.CidFromBytes(encoded[nextIdx:]) + if err != nil { + return nil, err + } + cids = append(cids, c) + nextIdx += nr + } + return cids, nil +} diff --git a/pkg/types/internal/tipset_key_test.go b/pkg/types/internal/tipset_key_test.go new file mode 100644 index 0000000000..b536883637 --- /dev/null +++ b/pkg/types/internal/tipset_key_test.go @@ -0,0 +1,74 @@ +package internal + +import ( + "bytes" + "encoding/json" + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/assert" +) + +func TestTipSetKey(t *testing.T) { + tf.UnitTest(t) + + c1, _ := cid.Parse("zDPWYqFD4b5HLFuPfhkjJJkfvm4r8KLi1V9e2ahJX6Ab16Ay24pJ") + c2, _ := cid.Parse("zDPWYqFD4b5HLFuPfhkjJJkfvm4r8KLi1V9e2ahJX6Ab16Ay24pK") + c3, _ := cid.Parse("zDPWYqFD4b5HLFuPfhkjJJkfvm4r8KLi1V9e2ahJX6Ab16Ay24pL") + c4, _ := cid.Parse("zDPWYqFD4b5HLFuPfhkjJJkfvm4r8KLi1V9e2ahJX6Ab16Ay24pM") + + t.Run("contains", func(t *testing.T) { + empty := NewTipSetKey() + s := NewTipSetKey(c1, c2, c3) + + assert.False(t, empty.Has(c1)) + assert.True(t, s.Has(c1)) + assert.True(t, s.Has(c2)) + assert.True(t, s.Has(c3)) + assert.False(t, s.Has(c4)) + + assert.True(t, s.ContainsAll(empty)) + assert.True(t, s.ContainsAll(NewTipSetKey(c1))) + assert.True(t, s.ContainsAll(s)) + assert.False(t, s.ContainsAll(NewTipSetKey(c4))) + assert.False(t, s.ContainsAll(NewTipSetKey(c1, c4))) + + assert.True(t, empty.ContainsAll(empty)) + assert.False(t, empty.ContainsAll(s)) + }) +} + +func TestTipSetKeyCborRoundtrip(t *testing.T) { + tf.UnitTest(t) + + makeCid := NewCidForTestGetter() + exp := NewTipSetKey(makeCid(), makeCid(), makeCid()) + buf := new(bytes.Buffer) + err := exp.MarshalCBOR(buf) + assert.NoError(t, err) + + var act TipSetKey + err = act.UnmarshalCBOR(buf) + assert.NoError(t, err) + + assert.Equal(t, 3, len(act.Cids())) + assert.True(t, act.Equals(exp)) +} + +func TestTipSetKeyJSONRoundtrip(t *testing.T) { + tf.UnitTest(t) + + makeCid := NewCidForTestGetter() + exp := NewTipSetKey(makeCid(), makeCid(), makeCid()) + + buf, err := json.Marshal(exp) + assert.NoError(t, err) + + var act TipSetKey + err = json.Unmarshal(buf, &act) + assert.NoError(t, err) + + assert.Equal(t, 3, len(act.Cids())) + assert.True(t, act.Equals(exp)) +} diff --git a/pkg/types/internal/tipset_test.go b/pkg/types/internal/tipset_test.go new file mode 100644 index 0000000000..61223ca97c --- /dev/null +++ b/pkg/types/internal/tipset_test.go @@ -0,0 +1,221 @@ +package internal + +import ( + "bytes" + "encoding/json" + "testing" + + "github.com/filecoin-project/venus/pkg/util/test" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" + + "github.com/stretchr/testify/assert" + + fbig "github.com/filecoin-project/go-state-types/big" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +const parentWeight = uint64(1337000) + +var ( + cid1, cid2 cid.Cid + mockSignerForTest MockSigner + cidGetter func() cid.Cid +) + +func init() { + cidGetter = NewCidForTestGetter() + cid1 = cidGetter() + cid2 = cidGetter() + + mockSignerForTest, _ = NewMockSignersAndKeyInfo(2) +} + +func newBlock(t *testing.T, ticket []byte, height int, parentCid cid.Cid, parentWeight, timestamp uint64, msg string) *BlockHeader { + cidGetter := NewCidForTestGetter() + addrGetter := NewForTestGetter() + return &BlockHeader{ + Miner: addrGetter(), + Ticket: Ticket{VRFProof: ticket}, + Parents: NewTipSetKey(parentCid), + ParentWeight: fbig.NewInt(int64(parentWeight)), + Height: 42 + abi.ChainEpoch(height), + Messages: cidGetter(), + ParentStateRoot: cidGetter(), + ParentMessageReceipts: cidGetter(), + Timestamp: timestamp, + } +} + +func TestTipsetJson(t *testing.T) { + tf.UnitTest(t) + b1, b2, b3 := makeTestBlocks(t) + ts := RequireNewTipSet(t, b3, b2, b1) + jsonBytes, err := json.Marshal(ts) + require.NoError(t, err) + + unmarshalTS := &TipSet{} + err = json.Unmarshal(jsonBytes, unmarshalTS) + require.NoError(t, err) + assert.Equal(t, unmarshalTS.Len(), ts.Len()) + for i := 0; i < ts.Len(); i++ { + test.Equal(t, unmarshalTS.At(i), ts.At(i)) + } +} + +func TestTipSet(t *testing.T) { + tf.UnitTest(t) + + b1, b2, b3 := makeTestBlocks(t) + + t.Run("ordered by ticket digest", func(t *testing.T) { + ts := RequireNewTipSet(t, b3, b2, b1) // Presented in reverse order + assert.True(t, ts.Defined()) + assert.Equal(t, b1, ts.At(0)) + assert.Equal(t, b2, ts.At(1)) + assert.Equal(t, b3, ts.At(2)) + assert.Equal(t, []*BlockHeader{b1, b2, b3}, ts.ToSlice()) + }) + + t.Run("order breaks ties with CID", func(t *testing.T) { + b1 := newBlock(t, []byte{1}, 1, cid1, parentWeight, 1, "1") + b2 := newBlock(t, []byte{1}, 1, cid1, parentWeight, 2, "2") + + ts := RequireNewTipSet(t, b1, b2) + if bytes.Compare(b1.Cid().Bytes(), b2.Cid().Bytes()) < 0 { + assert.Equal(t, []*BlockHeader{b1, b2}, ts.ToSlice()) + } else { + assert.Equal(t, []*BlockHeader{b2, b1}, ts.ToSlice()) + } + }) + + t.Run("len", func(t *testing.T) { + t1 := RequireNewTipSet(t, b1) + assert.True(t, t1.Defined()) + assert.Equal(t, 1, t1.Len()) + + t3 := RequireNewTipSet(t, b1, b2, b3) + assert.True(t, t3.Defined()) + assert.Equal(t, 3, t3.Len()) + }) + + t.Run("key", func(t *testing.T) { + assert.Equal(t, NewTipSetKey(b1.Cid()), RequireNewTipSet(t, b1).Key()) + // sorted ticket order is b1, b2, b3 + assert.Equal(t, NewTipSetKey(b1.Cid(), b2.Cid(), b3.Cid()), + RequireNewTipSet(t, b2, b3, b1).Key()) + }) + + t.Run("height", func(t *testing.T) { + tsHeight := RequireNewTipSet(t, b1).Height() + assert.Equal(t, b1.Height, tsHeight) + }) + + t.Run("parents", func(t *testing.T) { + tsParents := RequireNewTipSet(t, b1).Parents() + assert.Equal(t, b1.Parents, tsParents) + }) + + t.Run("parent weight", func(t *testing.T) { + tsParentWeight := RequireNewTipSet(t, b1).ParentWeight() + assert.Equal(t, fbig.NewInt(int64(parentWeight)), tsParentWeight) + }) + + t.Run("min ticket", func(t *testing.T) { + tsTicket := RequireNewTipSet(t, b1).MinTicket() + assert.Equal(t, b1.Ticket, tsTicket) + + tsTicket = RequireNewTipSet(t, b2).MinTicket() + assert.Equal(t, b2.Ticket, tsTicket) + + tsTicket = RequireNewTipSet(t, b3, b2, b1).MinTicket() + assert.Equal(t, b1.Ticket, tsTicket) + }) + + t.Run("equality", func(t *testing.T) { + ts1a := RequireNewTipSet(t, b3, b2, b1) + ts1b := RequireNewTipSet(t, b1, b2, b3) + ts2 := RequireNewTipSet(t, b1, b2) + ts3 := RequireNewTipSet(t, b2) + + assert.Equal(t, ts1a, ts1a) + assert.Equal(t, ts1a, ts1b) + assert.NotEqual(t, ts1a, ts2) + assert.NotEqual(t, ts1a, ts3) + assert.NotEqual(t, ts1a, nil) + assert.NotEqual(t, ts2, nil) + assert.NotEqual(t, ts3, nil) + }) + + t.Run("slice", func(t *testing.T) { + assert.Equal(t, []*BlockHeader{b1}, RequireNewTipSet(t, b1).ToSlice()) + + ts := RequireNewTipSet(t, b3, b2, b1) // Presented in reverse order + slice := ts.ToSlice() + assert.Equal(t, []*BlockHeader{b1, b2, b3}, slice) + + slice[1] = b1 + slice[2] = b2 + assert.NotEqual(t, slice, ts.ToSlice()) + assert.Equal(t, []*BlockHeader{b1, b2, b3}, ts.ToSlice()) // tipset is immutable + }) + + t.Run("string", func(t *testing.T) { + // String shouldn't really need testing, but some existing code uses the string as a + // datastore key and depends on the format exactly. + assert.Equal(t, "{ "+b1.Cid().String()+" }", RequireNewTipSet(t, b1).String()) + + expected := NewTipSetKey(b1.Cid(), b2.Cid(), b3.Cid()).String() + assert.Equal(t, expected, RequireNewTipSet(t, b3, b2, b1).String()) + }) + + t.Run("empty new tipset fails", func(t *testing.T) { + _, err := NewTipSet() + require.Error(t, err) + assert.Contains(t, err.Error(), "no blocks for tipset") + }) + + t.Run("duplicate newBlock fails new tipset", func(t *testing.T) { + b1, b2, b3 = makeTestBlocks(t) + ts, err := NewTipSet(b1, b2, b1) + assert.Error(t, err) + assert.False(t, ts.Defined()) + }) + + t.Run("mismatched height fails new tipset", func(t *testing.T) { + b1, b2, b3 = makeTestBlocks(t) + b1.Height = 3 + ts, err := NewTipSet(b1, b2, b3) + assert.Error(t, err) + assert.False(t, ts.Defined()) + }) + + t.Run("mismatched parents fails new tipset", func(t *testing.T) { + b1, b2, b3 = makeTestBlocks(t) + b1.Parents = NewTipSetKey(cid1, cid2) + ts, err := NewTipSet(b1, b2, b3) + assert.Error(t, err) + assert.False(t, ts.Defined()) + }) + + t.Run("mismatched parent weight fails new tipset", func(t *testing.T) { + b1, b2, b3 = makeTestBlocks(t) + b1.ParentWeight = fbig.NewInt(3000) + ts, err := NewTipSet(b1, b2, b3) + assert.Error(t, err) + assert.False(t, ts.Defined()) + }) +} + +func makeTestBlocks(t *testing.T) (*BlockHeader, *BlockHeader, *BlockHeader) { + b1 := newBlock(t, []byte{2}, 1, cid1, parentWeight, 1, "1") + b2 := newBlock(t, []byte{3}, 1, cid1, parentWeight, 2, "2") + b3 := newBlock(t, []byte{1}, 1, cid1, parentWeight, 3, "3") + + // The tickets are constructed such that their digests are ordered. + require.True(t, b1.Ticket.Compare(&b2.Ticket) < 0) + require.True(t, b2.Ticket.Compare(&b3.Ticket) < 0) + return b1, b2, b3 +} diff --git a/pkg/types/internal/vrf.go b/pkg/types/internal/vrf.go new file mode 100644 index 0000000000..dc8dc2b45c --- /dev/null +++ b/pkg/types/internal/vrf.go @@ -0,0 +1,223 @@ +package internal + +import ( + "github.com/filecoin-project/go-state-types/abi" + "math/big" + + "github.com/minio/blake2b-simd" + + "github.com/filecoin-project/venus/pkg/constants" +) + +// VRFPi is the proof output from running a VRF. +type VRFPi []byte + +// Digest returns the digest (hash) of a proof, for use generating challenges etc. +func (p VRFPi) Digest() [32]byte { + proofDigest := blake2b.Sum256(p) + return proofDigest +} + +type ElectionProof struct { + WinCount int64 + + // A proof output by running a VRF on the VRFProof of the parent ticket + VRFProof VRFPi +} + +const precision = 256 + +// Blocks (e) +var BlocksPerEpoch = uint64(constants.ExpectedLeadersPerEpoch) + +var blocksPerEpoch = big.NewInt(0).SetUint64(BlocksPerEpoch) + +var ( + expNumCoef []*big.Int + expDenoCoef []*big.Int +) + +func init() { + parse := func(coefs []string) []*big.Int { + out := make([]*big.Int, len(coefs)) + for i, coef := range coefs { + c, ok := new(big.Int).SetString(coef, 10) + if !ok { + panic("could not parse exp paramemter") + } + // << 256 (Q.0 to Q.256), >> 128 to transform integer params to coefficients + c = c.Lsh(c, precision-128) + out[i] = c + } + return out + } + + // parameters are in integer format, + // coefficients are *2^-128 of that + num := []string{ + "-648770010757830093818553637600", + "67469480939593786226847644286976", + "-3197587544499098424029388939001856", + "89244641121992890118377641805348864", + "-1579656163641440567800982336819953664", + "17685496037279256458459817590917169152", + "-115682590513835356866803355398940131328", + "340282366920938463463374607431768211456", + } + expNumCoef = parse(num) + + deno := []string{ + "1225524182432722209606361", + "114095592300906098243859450", + "5665570424063336070530214243", + "194450132448609991765137938448", + "5068267641632683791026134915072", + "104716890604972796896895427629056", + "1748338658439454459487681798864896", + "23704654329841312470660182937960448", + "259380097567996910282699886670381056", + "2250336698853390384720606936038375424", + "14978272436876548034486263159246028800", + "72144088983913131323343765784380833792", + "224599776407103106596571252037123047424", + "340282366920938463463374607431768211456", + } + expDenoCoef = parse(deno) +} + +// expneg accepts x in Q.256 format and computes e^-x. +// It is most precise within [0, 1.725) range, where error is less than 3.4e-30. +// Over the [0, 5) range its error is less than 4.6e-15. +// Output is in Q.256 format. +func expneg(x *big.Int) *big.Int { + // exp is approximated by rational function + // polynomials of the rational function are evaluated using Horner's method + num := polyval(expNumCoef, x) // Q.256 + deno := polyval(expDenoCoef, x) // Q.256 + + num = num.Lsh(num, precision) // Q.512 + return num.Div(num, deno) // Q.512 / Q.256 => Q.256 +} + +// polyval evaluates a polynomial given by coefficients `p` in Q.256 format +// at point `x` in Q.256 format. Output is in Q.256. +// Coefficients should be ordered from the highest order coefficient to the lowest. +func polyval(p []*big.Int, x *big.Int) *big.Int { + // evaluation using Horner's method + res := new(big.Int).Set(p[0]) // Q.256 + tmp := new(big.Int) // big.Int.Mul doesn't like when input is reused as output + for _, c := range p[1:] { + tmp = tmp.Mul(res, x) // Q.256 * Q.256 => Q.512 + res = res.Rsh(tmp, precision) // Q.512 >> 256 => Q.256 + res = res.Add(res, c) + } + + return res +} + +// computes lambda in Q.256 +func lambda(power, totalPower *big.Int) *big.Int { + lam := new(big.Int).Mul(power, blocksPerEpoch) // Q.0 + lam = lam.Lsh(lam, precision) // Q.256 + lam = lam.Div(lam /* Q.256 */, totalPower /* Q.0 */) // Q.256 + return lam +} + +var MaxWinCount = 3 * int64(BlocksPerEpoch) + +type poiss struct { + lam *big.Int + pmf *big.Int + icdf *big.Int + + tmp *big.Int // temporary variable for optimization + + k uint64 +} + +// newPoiss starts poisson inverted CDF +// lambda is in Q.256 format +// returns (instance, `1-poisscdf(0, lambda)`) +// CDF value returend is reused when calling `next` +func newPoiss(lambda *big.Int) (*poiss, *big.Int) { + + // pmf(k) = (lambda^k)*(e^lambda) / k! + // k = 0 here, so it simplifies to just e^-lambda + elam := expneg(lambda) // Q.256 + pmf := new(big.Int).Set(elam) + + // icdf(k) = 1 - โˆ‘แตแตขโ‚Œโ‚€ pmf(i) + // icdf(0) = 1 - pmf(0) + icdf := big.NewInt(1) + icdf = icdf.Lsh(icdf, precision) // Q.256 + icdf = icdf.Sub(icdf, pmf) // Q.256 + + k := uint64(0) + + p := &poiss{ + lam: lambda, + pmf: pmf, + + tmp: elam, + icdf: icdf, + + k: k, + } + + return p, icdf +} + +// next computes `k++, 1-poisscdf(k, lam)` +// return is in Q.256 format +func (p *poiss) next() *big.Int { + // incrementally compute next pmf and icdf + + // pmf(k) = (lambda^k)*(e^lambda) / k! + // so pmf(k) = pmf(k-1) * lambda / k + p.k++ + p.tmp.SetUint64(p.k) // Q.0 + + // calculate pmf for k + p.pmf = p.pmf.Div(p.pmf, p.tmp) // Q.256 / Q.0 => Q.256 + // we are using `tmp` as target for multiplication as using an input as output + // for Int.Mul causes allocations + p.tmp = p.tmp.Mul(p.pmf, p.lam) // Q.256 * Q.256 => Q.512 + p.pmf = p.pmf.Rsh(p.tmp, precision) // Q.512 >> 256 => Q.256 + + // calculate output + // icdf(k) = icdf(k-1) - pmf(k) + p.icdf = p.icdf.Sub(p.icdf, p.pmf) // Q.256 + return p.icdf +} + +// ComputeWinCount uses VRFProof to compute number of wins +// The algorithm is based on Algorand's Sortition with Binomial distribution +// replaced by Poisson distribution. +func (ep *ElectionProof) ComputeWinCount(power abi.StoragePower, totalPower abi.StoragePower) int64 { + h := blake2b.Sum256(ep.VRFProof) + + lhs := big.NewInt(0).SetBytes(h[:]) // 256bits, assume Q.256 so [0, 1) + + // We are calculating upside-down CDF of Poisson distribution with + // rate ฮป=power*E/totalPower + // Steps: + // 1. calculate ฮป=power*E/totalPower + // 2. calculate elam = exp(-ฮป) + // 3. Check how many times we win: + // j = 0 + // pmf = elam + // rhs = 1 - pmf + // for h(vrf) < rhs: j++; pmf = pmf * lam / j; rhs = rhs - pmf + + lam := lambda(power.Int, totalPower.Int) // Q.256 + + p, rhs := newPoiss(lam) + + var j int64 + for lhs.Cmp(rhs) < 0 && j < MaxWinCount { + rhs = p.next() + j++ + } + + return j +} diff --git a/pkg/types/keystore.go b/pkg/types/keystore.go new file mode 100644 index 0000000000..181a7513f3 --- /dev/null +++ b/pkg/types/keystore.go @@ -0,0 +1,58 @@ +package types + +import ( + "encoding/json" + "fmt" + + logging "github.com/ipfs/go-log/v2" + + "github.com/filecoin-project/venus/pkg/crypto" +) + +var log = logging.Logger("types") + +var ( + ErrKeyInfoNotFound = fmt.Errorf("key info not found") + ErrKeyExists = fmt.Errorf("key already exists") +) + +// KeyType defines a type of a key +type KeyType string + +func (kt *KeyType) UnmarshalJSON(bb []byte) error { + { + // first option, try unmarshaling as string + var s string + err := json.Unmarshal(bb, &s) + if err == nil { + *kt = KeyType(s) + return nil + } + } + + { + var b byte + err := json.Unmarshal(bb, &b) + if err != nil { + return fmt.Errorf("could not unmarshal KeyType either as string nor integer: %w", err) + } + bst := crypto.SigType(b) + + switch bst { + case crypto.SigTypeBLS: + *kt = KTBLS + case crypto.SigTypeSecp256k1: + *kt = KTSecp256k1 + default: + return fmt.Errorf("unknown sigtype: %d", bst) + } + log.Warnf("deprecation: integer style 'KeyType' is deprecated, switch to string style") + return nil + } +} + +const ( + KTBLS KeyType = "bls" + KTSecp256k1 KeyType = "secp256k1" + KTSecp256k1Ledger KeyType = "secp256k1-ledger" +) diff --git a/pkg/types/paych.go b/pkg/types/paych.go new file mode 100644 index 0000000000..39b49383ee --- /dev/null +++ b/pkg/types/paych.go @@ -0,0 +1,42 @@ +package types + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/types/internal" + "github.com/ipfs/go-cid" + "time" +) + +type PaychStatus struct { + ControlAddr address.Address + Direction PCHDir +} +type PCHDir int + +const ( + PCHUndef PCHDir = iota + PCHInbound + PCHOutbound +) + +type InvocResult struct { + MsgCid cid.Cid + Msg *internal.UnsignedMessage + MsgRct *internal.MessageReceipt + GasCost *MsgGasCost + ExecutionTrace *ExecutionTrace + Error string + Duration time.Duration +} + +type MsgGasCost struct { + Message cid.Cid // Can be different than requested, in case it was replaced, but only gas values changed + GasUsed abi.TokenAmount + BaseFeeBurn abi.TokenAmount + OverEstimationBurn abi.TokenAmount + MinerPenalty abi.TokenAmount + MinerTip abi.TokenAmount + Refund abi.TokenAmount + TotalCost abi.TokenAmount +} diff --git a/pkg/types/specactors/adt/adt.go b/pkg/types/specactors/adt/adt.go new file mode 100644 index 0000000000..084471bb8f --- /dev/null +++ b/pkg/types/specactors/adt/adt.go @@ -0,0 +1,29 @@ +package adt + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" +) + +type Map interface { + Root() (cid.Cid, error) + + Put(k abi.Keyer, v cbor.Marshaler) error + Get(k abi.Keyer, v cbor.Unmarshaler) (bool, error) + Delete(k abi.Keyer) error + + ForEach(v cbor.Unmarshaler, fn func(key string) error) error +} + +type Array interface { + Root() (cid.Cid, error) + + Set(idx uint64, v cbor.Marshaler) error + Get(idx uint64, v cbor.Unmarshaler) (bool, error) + Delete(idx uint64) error + Length() uint64 + + ForEach(v cbor.Unmarshaler, fn func(idx int64) error) error +} diff --git a/pkg/types/specactors/adt/diff_adt.go b/pkg/types/specactors/adt/diff_adt.go new file mode 100644 index 0000000000..76a881a95e --- /dev/null +++ b/pkg/types/specactors/adt/diff_adt.go @@ -0,0 +1,122 @@ +package adt + +import ( + "bytes" + + "github.com/filecoin-project/go-state-types/abi" + typegen "github.com/whyrusleeping/cbor-gen" +) + +// AdtArrayDiff generalizes adt.Array diffing by accepting a Deferred type that can unmarshalled to its corresponding struct +// in an interface implantation. +// Add should be called when a new k,v is added to the array +// Modify should be called when a value is modified in the array +// Remove should be called when a value is removed from the array +type AdtArrayDiff interface { //nolint + Add(key uint64, val *typegen.Deferred) error + Modify(key uint64, from, to *typegen.Deferred) error + Remove(key uint64, val *typegen.Deferred) error +} + +// TODO Performance can be improved by diffing the underlying IPLD graph, e.g. https://github.com/ipfs/go-merkledag/blob/749fd8717d46b4f34c9ce08253070079c89bc56d/dagutils/diff.go#L104 +// CBOR Marshaling will likely be the largest performance bottleneck here. + +// DiffAdtArray accepts two *adt.Array's and an AdtArrayDiff implementation. It does the following: +// - All values that exist in preArr and not in curArr are passed to AdtArrayDiff.Remove() +// - All values that exist in curArr nnd not in prevArr are passed to adtArrayDiff.Add() +// - All values that exist in preArr and in curArr are passed to AdtArrayDiff.Modify() +// - It is the responsibility of AdtArrayDiff.Modify() to determine if the values it was passed have been modified. +func DiffAdtArray(preArr, curArr Array, out AdtArrayDiff) error { + notNew := make(map[int64]struct{}, curArr.Length()) + prevVal := new(typegen.Deferred) + if err := preArr.ForEach(prevVal, func(i int64) error { + curVal := new(typegen.Deferred) + found, err := curArr.Get(uint64(i), curVal) + if err != nil { + return err + } + if !found { + if err := out.Remove(uint64(i), prevVal); err != nil { + return err + } + return nil + } + + // no modification + if !bytes.Equal(prevVal.Raw, curVal.Raw) { + if err := out.Modify(uint64(i), prevVal, curVal); err != nil { + return err + } + } + notNew[i] = struct{}{} + return nil + }); err != nil { + return err + } + + curVal := new(typegen.Deferred) + return curArr.ForEach(curVal, func(i int64) error { + if _, ok := notNew[i]; ok { + return nil + } + return out.Add(uint64(i), curVal) + }) +} + +// TODO Performance can be improved by diffing the underlying IPLD graph, e.g. https://github.com/ipfs/go-merkledag/blob/749fd8717d46b4f34c9ce08253070079c89bc56d/dagutils/diff.go#L104 +// CBOR Marshaling will likely be the largest performance bottleneck here. + +// AdtMapDiff generalizes adt.Map diffing by accepting a Deferred type that can unmarshalled to its corresponding struct +// in an interface implantation. +// AsKey should return the Keyer implementation specific to the map +// Add should be called when a new k,v is added to the map +// Modify should be called when a value is modified in the map +// Remove should be called when a value is removed from the map +type AdtMapDiff interface { //nolint + AsKey(key string) (abi.Keyer, error) + Add(key string, val *typegen.Deferred) error + Modify(key string, from, to *typegen.Deferred) error + Remove(key string, val *typegen.Deferred) error +} + +func DiffAdtMap(preMap, curMap Map, out AdtMapDiff) error { + notNew := make(map[string]struct{}) + prevVal := new(typegen.Deferred) + if err := preMap.ForEach(prevVal, func(key string) error { + curVal := new(typegen.Deferred) + k, err := out.AsKey(key) + if err != nil { + return err + } + + found, err := curMap.Get(k, curVal) + if err != nil { + return err + } + if !found { + if err := out.Remove(key, prevVal); err != nil { + return err + } + return nil + } + + // no modification + if !bytes.Equal(prevVal.Raw, curVal.Raw) { + if err := out.Modify(key, prevVal, curVal); err != nil { + return err + } + } + notNew[key] = struct{}{} + return nil + }); err != nil { + return err + } + + curVal := new(typegen.Deferred) + return curMap.ForEach(curVal, func(key string) error { + if _, ok := notNew[key]; ok { + return nil + } + return out.Add(key, curVal) + }) +} diff --git a/pkg/types/specactors/adt/diff_adt_test.go b/pkg/types/specactors/adt/diff_adt_test.go new file mode 100644 index 0000000000..09b2301dbd --- /dev/null +++ b/pkg/types/specactors/adt/diff_adt_test.go @@ -0,0 +1,304 @@ +package adt + +import ( + "bytes" + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + cbornode "github.com/ipfs/go-ipld-cbor" + typegen "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/go-state-types/abi" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" +) + +func TestDiffAdtArray(t *testing.T) { + tf.UnitTest(t) + ctxstoreA := newContextStore() + ctxstoreB := newContextStore() + + arrA := adt2.MakeEmptyArray(ctxstoreA) + arrB := adt2.MakeEmptyArray(ctxstoreB) + + require.NoError(t, arrA.Set(0, builtin2.CBORBytes([]byte{0}))) // delete + + require.NoError(t, arrA.Set(1, builtin2.CBORBytes([]byte{0}))) // modify + require.NoError(t, arrB.Set(1, builtin2.CBORBytes([]byte{1}))) + + require.NoError(t, arrA.Set(2, builtin2.CBORBytes([]byte{1}))) // delete + + require.NoError(t, arrA.Set(3, builtin2.CBORBytes([]byte{0}))) // noop + require.NoError(t, arrB.Set(3, builtin2.CBORBytes([]byte{0}))) + + require.NoError(t, arrA.Set(4, builtin2.CBORBytes([]byte{0}))) // modify + require.NoError(t, arrB.Set(4, builtin2.CBORBytes([]byte{6}))) + + require.NoError(t, arrB.Set(5, builtin2.CBORBytes{8})) // add + require.NoError(t, arrB.Set(6, builtin2.CBORBytes{9})) // add + + changes := new(TestDiffArray) + + assert.NoError(t, DiffAdtArray(arrA, arrB, changes)) + assert.NotNil(t, changes) + + assert.Equal(t, 2, len(changes.Added)) + // keys 5 and 6 were added + assert.EqualValues(t, uint64(5), changes.Added[0].key) + assert.EqualValues(t, []byte{8}, changes.Added[0].val) + assert.EqualValues(t, uint64(6), changes.Added[1].key) + assert.EqualValues(t, []byte{9}, changes.Added[1].val) + + assert.Equal(t, 2, len(changes.Modified)) + // keys 1 and 4 were modified + assert.EqualValues(t, uint64(1), changes.Modified[0].From.key) + assert.EqualValues(t, []byte{0}, changes.Modified[0].From.val) + assert.EqualValues(t, uint64(1), changes.Modified[0].To.key) + assert.EqualValues(t, []byte{1}, changes.Modified[0].To.val) + assert.EqualValues(t, uint64(4), changes.Modified[1].From.key) + assert.EqualValues(t, []byte{0}, changes.Modified[1].From.val) + assert.EqualValues(t, uint64(4), changes.Modified[1].To.key) + assert.EqualValues(t, []byte{6}, changes.Modified[1].To.val) + + assert.Equal(t, 2, len(changes.Removed)) + // keys 0 and 2 were deleted + assert.EqualValues(t, uint64(0), changes.Removed[0].key) + assert.EqualValues(t, []byte{0}, changes.Removed[0].val) + assert.EqualValues(t, uint64(2), changes.Removed[1].key) + assert.EqualValues(t, []byte{1}, changes.Removed[1].val) +} + +func TestDiffAdtMap(t *testing.T) { + tf.UnitTest(t) + ctxstoreA := newContextStore() + ctxstoreB := newContextStore() + + mapA := adt2.MakeEmptyMap(ctxstoreA) + mapB := adt2.MakeEmptyMap(ctxstoreB) + + require.NoError(t, mapA.Put(abi.UIntKey(0), builtin2.CBORBytes([]byte{0}))) // delete + + require.NoError(t, mapA.Put(abi.UIntKey(1), builtin2.CBORBytes([]byte{0}))) // modify + require.NoError(t, mapB.Put(abi.UIntKey(1), builtin2.CBORBytes([]byte{1}))) + + require.NoError(t, mapA.Put(abi.UIntKey(2), builtin2.CBORBytes([]byte{1}))) // delete + + require.NoError(t, mapA.Put(abi.UIntKey(3), builtin2.CBORBytes([]byte{0}))) // noop + require.NoError(t, mapB.Put(abi.UIntKey(3), builtin2.CBORBytes([]byte{0}))) + + require.NoError(t, mapA.Put(abi.UIntKey(4), builtin2.CBORBytes([]byte{0}))) // modify + require.NoError(t, mapB.Put(abi.UIntKey(4), builtin2.CBORBytes([]byte{6}))) + + require.NoError(t, mapB.Put(abi.UIntKey(5), builtin2.CBORBytes{8})) // add + require.NoError(t, mapB.Put(abi.UIntKey(6), builtin2.CBORBytes{9})) // add + + changes := new(TestDiffMap) + + assert.NoError(t, DiffAdtMap(mapA, mapB, changes)) + assert.NotNil(t, changes) + + assert.Equal(t, 2, len(changes.Added)) + // keys 5 and 6 were added + assert.EqualValues(t, uint64(6), changes.Added[0].key) + assert.EqualValues(t, []byte{9}, changes.Added[0].val) + assert.EqualValues(t, uint64(5), changes.Added[1].key) + assert.EqualValues(t, []byte{8}, changes.Added[1].val) + + assert.Equal(t, 2, len(changes.Modified)) + // keys 1 and 4 were modified + assert.EqualValues(t, uint64(1), changes.Modified[0].From.key) + assert.EqualValues(t, []byte{0}, changes.Modified[0].From.val) + assert.EqualValues(t, uint64(1), changes.Modified[0].To.key) + assert.EqualValues(t, []byte{1}, changes.Modified[0].To.val) + assert.EqualValues(t, uint64(4), changes.Modified[1].From.key) + assert.EqualValues(t, []byte{0}, changes.Modified[1].From.val) + assert.EqualValues(t, uint64(4), changes.Modified[1].To.key) + assert.EqualValues(t, []byte{6}, changes.Modified[1].To.val) + + assert.Equal(t, 2, len(changes.Removed)) + // keys 0 and 2 were deleted + assert.EqualValues(t, uint64(0), changes.Removed[0].key) + assert.EqualValues(t, []byte{0}, changes.Removed[0].val) + assert.EqualValues(t, uint64(2), changes.Removed[1].key) + assert.EqualValues(t, []byte{1}, changes.Removed[1].val) + +} + +type TestDiffMap struct { + Added []adtMapDiffResult + Modified []TestAdtMapDiffModified + Removed []adtMapDiffResult +} + +var _ AdtMapDiff = &TestDiffMap{} + +func (t *TestDiffMap) AsKey(key string) (abi.Keyer, error) { + k, err := abi.ParseUIntKey(key) + if err != nil { + return nil, err + } + return abi.UIntKey(k), nil +} + +func (t *TestDiffMap) Add(key string, val *typegen.Deferred) error { + v := new(builtin2.CBORBytes) + err := v.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return err + } + k, err := abi.ParseUIntKey(key) + if err != nil { + return err + } + t.Added = append(t.Added, adtMapDiffResult{ + key: k, + val: *v, + }) + return nil +} + +func (t *TestDiffMap) Modify(key string, from, to *typegen.Deferred) error { + vFrom := new(builtin2.CBORBytes) + err := vFrom.UnmarshalCBOR(bytes.NewReader(from.Raw)) + if err != nil { + return err + } + + vTo := new(builtin2.CBORBytes) + err = vTo.UnmarshalCBOR(bytes.NewReader(to.Raw)) + if err != nil { + return err + } + + k, err := abi.ParseUIntKey(key) + if err != nil { + return err + } + + if !bytes.Equal(*vFrom, *vTo) { + t.Modified = append(t.Modified, TestAdtMapDiffModified{ + From: adtMapDiffResult{ + key: k, + val: *vFrom, + }, + To: adtMapDiffResult{ + key: k, + val: *vTo, + }, + }) + } + return nil +} + +func (t *TestDiffMap) Remove(key string, val *typegen.Deferred) error { + v := new(builtin2.CBORBytes) + err := v.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return err + } + k, err := abi.ParseUIntKey(key) + if err != nil { + return err + } + t.Removed = append(t.Removed, adtMapDiffResult{ + key: k, + val: *v, + }) + return nil +} + +type adtMapDiffResult struct { + key uint64 + val builtin2.CBORBytes +} + +type TestAdtMapDiffModified struct { + From adtMapDiffResult + To adtMapDiffResult +} + +type adtArrayDiffResult struct { + key uint64 + val builtin2.CBORBytes +} + +type TestDiffArray struct { + Added []adtArrayDiffResult + Modified []TestAdtArrayDiffModified + Removed []adtArrayDiffResult +} + +var _ AdtArrayDiff = &TestDiffArray{} + +type TestAdtArrayDiffModified struct { + From adtArrayDiffResult + To adtArrayDiffResult +} + +func (t *TestDiffArray) Add(key uint64, val *typegen.Deferred) error { + v := new(builtin2.CBORBytes) + err := v.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return err + } + t.Added = append(t.Added, adtArrayDiffResult{ + key: key, + val: *v, + }) + return nil +} + +func (t *TestDiffArray) Modify(key uint64, from, to *typegen.Deferred) error { + vFrom := new(builtin2.CBORBytes) + err := vFrom.UnmarshalCBOR(bytes.NewReader(from.Raw)) + if err != nil { + return err + } + + vTo := new(builtin2.CBORBytes) + err = vTo.UnmarshalCBOR(bytes.NewReader(to.Raw)) + if err != nil { + return err + } + + if !bytes.Equal(*vFrom, *vTo) { + t.Modified = append(t.Modified, TestAdtArrayDiffModified{ + From: adtArrayDiffResult{ + key: key, + val: *vFrom, + }, + To: adtArrayDiffResult{ + key: key, + val: *vTo, + }, + }) + } + return nil +} + +func (t *TestDiffArray) Remove(key uint64, val *typegen.Deferred) error { + v := new(builtin2.CBORBytes) + err := v.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return err + } + t.Removed = append(t.Removed, adtArrayDiffResult{ + key: key, + val: *v, + }) + return nil +} + +func newContextStore() Store { + ctx := context.Background() + bs := blockstoreutil.NewTemporarySync() + store := cbornode.NewCborStore(bs) + return WrapStore(ctx, store) +} diff --git a/pkg/types/specactors/adt/store.go b/pkg/types/specactors/adt/store.go new file mode 100644 index 0000000000..8dd9841a15 --- /dev/null +++ b/pkg/types/specactors/adt/store.go @@ -0,0 +1,17 @@ +package adt + +import ( + "context" + + adt "github.com/filecoin-project/specs-actors/actors/util/adt" + cbor "github.com/ipfs/go-ipld-cbor" +) + +type Store interface { + Context() context.Context + cbor.IpldStore +} + +func WrapStore(ctx context.Context, store cbor.IpldStore) Store { + return adt.WrapStore(ctx, store) +} diff --git a/pkg/types/specactors/aerrors/error.go b/pkg/types/specactors/aerrors/error.go new file mode 100644 index 0000000000..12f802c8fc --- /dev/null +++ b/pkg/types/specactors/aerrors/error.go @@ -0,0 +1,69 @@ +package aerrors + +import ( + "fmt" + + "github.com/filecoin-project/go-state-types/exitcode" + "golang.org/x/xerrors" +) + +func IsFatal(err ActorError) bool { + return err != nil && err.IsFatal() +} +func RetCode(err ActorError) exitcode.ExitCode { + if err == nil { + return 0 + } + return err.RetCode() +} + +type internalActorError interface { + ActorError + FormatError(p xerrors.Printer) (next error) + Unwrap() error +} + +type ActorError interface { + error + IsFatal() bool + RetCode() exitcode.ExitCode +} + +type actorError struct { + fatal bool + retCode exitcode.ExitCode + + msg string + frame xerrors.Frame + err error +} + +func (e *actorError) IsFatal() bool { + return e.fatal +} + +func (e *actorError) RetCode() exitcode.ExitCode { + return e.retCode +} + +func (e *actorError) Error() string { + return fmt.Sprint(e) +} +func (e *actorError) Format(s fmt.State, v rune) { xerrors.FormatError(e, s, v) } +func (e *actorError) FormatError(p xerrors.Printer) (next error) { + p.Print(e.msg) + if e.fatal { + p.Print(" (FATAL)") + } else { + p.Printf(" (RetCode=%d)", e.retCode) + } + + e.frame.Format(p) + return e.err +} + +func (e *actorError) Unwrap() error { + return e.err +} + +var _ internalActorError = (*actorError)(nil) diff --git a/pkg/types/specactors/aerrors/error_test.go b/pkg/types/specactors/aerrors/error_test.go new file mode 100644 index 0000000000..4fcca59834 --- /dev/null +++ b/pkg/types/specactors/aerrors/error_test.go @@ -0,0 +1,39 @@ +package aerrors_test + +import ( + "testing" + + "github.com/filecoin-project/go-state-types/exitcode" + "github.com/stretchr/testify/assert" + "golang.org/x/xerrors" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + . "github.com/filecoin-project/venus/pkg/types/specactors/aerrors" +) + +func TestFatalError(t *testing.T) { + tf.UnitTest(t) + e1 := xerrors.New("out of disk space") + e2 := xerrors.Errorf("could not put node: %w", e1) + e3 := xerrors.Errorf("could not save head: %w", e2) + ae := Escalate(e3, "failed to save the head") + aw1 := Wrap(ae, "saving head of new miner actor") + aw2 := Absorb(aw1, 1, "try to absorb fatal error") + aw3 := Wrap(aw2, "initializing actor") + aw4 := Wrap(aw3, "creating miner in storage market") + t.Logf("Verbose error: %+v", aw4) + t.Logf("Normal error: %v", aw4) + assert.True(t, IsFatal(aw4), "should be fatal") +} +func TestAbsorbeError(t *testing.T) { + tf.UnitTest(t) + e1 := xerrors.New("EOF") + e2 := xerrors.Errorf("could not decode: %w", e1) + ae := Absorb(e2, 35, "failed to decode CBOR") + aw1 := Wrap(ae, "saving head of new miner actor") + aw2 := Wrap(aw1, "initializing actor") + aw3 := Wrap(aw2, "creating miner in storage market") + t.Logf("Verbose error: %+v", aw3) + t.Logf("Normal error: %v", aw3) + assert.Equal(t, exitcode.ExitCode(35), RetCode(aw3)) +} diff --git a/pkg/types/specactors/aerrors/wrap.go b/pkg/types/specactors/aerrors/wrap.go new file mode 100644 index 0000000000..0552829f91 --- /dev/null +++ b/pkg/types/specactors/aerrors/wrap.go @@ -0,0 +1,203 @@ +package aerrors + +import ( + "errors" + "fmt" + + "github.com/filecoin-project/go-state-types/exitcode" + cbor "github.com/ipfs/go-ipld-cbor" + "golang.org/x/xerrors" +) + +// New creates a new non-fatal error +func New(retCode exitcode.ExitCode, message string) ActorError { + if retCode == 0 { + return &actorError{ + fatal: true, + retCode: 0, + + msg: "tried creating an error and setting RetCode to 0", + frame: xerrors.Caller(1), + err: errors.New(message), + } + } + return &actorError{ + retCode: retCode, + + msg: message, + frame: xerrors.Caller(1), + } +} + +// Newf creates a new non-fatal error +func Newf(retCode exitcode.ExitCode, format string, args ...interface{}) ActorError { + if retCode == 0 { + return &actorError{ + fatal: true, + retCode: 0, + + msg: "tried creating an error and setting RetCode to 0", + frame: xerrors.Caller(1), + err: fmt.Errorf(format, args...), + } + } + return &actorError{ + retCode: retCode, + + msg: fmt.Sprintf(format, args...), + frame: xerrors.Caller(1), + } +} + +// todo: bit hacky + +func NewfSkip(skip int, retCode exitcode.ExitCode, format string, args ...interface{}) ActorError { + if retCode == 0 { + return &actorError{ + fatal: true, + retCode: 0, + + msg: "tried creating an error and setting RetCode to 0", + frame: xerrors.Caller(skip), + err: fmt.Errorf(format, args...), + } + } + return &actorError{ + retCode: retCode, + + msg: fmt.Sprintf(format, args...), + frame: xerrors.Caller(skip), + } +} + +func Fatal(message string, args ...interface{}) ActorError { + return &actorError{ + fatal: true, + msg: message, + frame: xerrors.Caller(1), + } +} + +func Fatalf(format string, args ...interface{}) ActorError { + return &actorError{ + fatal: true, + msg: fmt.Sprintf(format, args...), + frame: xerrors.Caller(1), + } +} + +// Wrap extens chain of errors with a message +func Wrap(err ActorError, message string) ActorError { + if err == nil { + return nil + } + return &actorError{ + fatal: IsFatal(err), + retCode: RetCode(err), + + msg: message, + frame: xerrors.Caller(1), + err: err, + } +} + +// Wrapf extens chain of errors with a message +func Wrapf(err ActorError, format string, args ...interface{}) ActorError { + if err == nil { + return nil + } + return &actorError{ + fatal: IsFatal(err), + retCode: RetCode(err), + + msg: fmt.Sprintf(format, args...), + frame: xerrors.Caller(1), + err: err, + } +} + +// Absorb takes and error and makes in not fatal ActorError +func Absorb(err error, retCode exitcode.ExitCode, msg string) ActorError { + if err == nil { + return nil + } + if aerr, ok := err.(ActorError); ok && IsFatal(aerr) { + return &actorError{ + fatal: true, + retCode: 0, + + msg: "tried absorbing an error that is already a fatal error", + frame: xerrors.Caller(1), + err: err, + } + } + if retCode == 0 { + return &actorError{ + fatal: true, + retCode: 0, + + msg: "tried absorbing an error and setting RetCode to 0", + frame: xerrors.Caller(1), + err: err, + } + } + + return &actorError{ + fatal: false, + retCode: retCode, + + msg: msg, + frame: xerrors.Caller(1), + err: err, + } +} + +// Escalate takes and error and escalates it into a fatal error +func Escalate(err error, msg string) ActorError { + if err == nil { + return nil + } + return &actorError{ + fatal: true, + + msg: msg, + frame: xerrors.Caller(1), + err: err, + } +} + +func HandleExternalError(err error, msg string) ActorError { + if err == nil { + return nil + } + + if aerr, ok := err.(ActorError); ok { + return &actorError{ + fatal: IsFatal(aerr), + retCode: RetCode(aerr), + + msg: msg, + frame: xerrors.Caller(1), + err: aerr, + } + } + + if xerrors.Is(err, &cbor.SerializationError{}) { + return &actorError{ + fatal: false, + retCode: 253, + msg: msg, + frame: xerrors.Caller(1), + err: err, + } + } + + return &actorError{ + fatal: false, + retCode: 219, + + msg: msg, + frame: xerrors.Caller(1), + err: err, + } +} diff --git a/pkg/types/specactors/agen/main.go b/pkg/types/specactors/agen/main.go new file mode 100644 index 0000000000..fc553a19f9 --- /dev/null +++ b/pkg/types/specactors/agen/main.go @@ -0,0 +1,223 @@ +package main + +import ( + "bytes" + "fmt" + "github.com/filecoin-project/venus/pkg/types/specactors" + "io/ioutil" + "os" + "path/filepath" + "strconv" + "text/template" + + "golang.org/x/xerrors" +) + +var actors = map[string][]int{ + "account": specactors.Versions, + "cron": specactors.Versions, + "init": specactors.Versions, + "market": specactors.Versions, + "miner": specactors.Versions, + "multisig": specactors.Versions, + "paych": specactors.Versions, + "power": specactors.Versions, + "system": specactors.Versions, + "reward": specactors.Versions, + "verifreg": specactors.Versions, +} + +func main() { + if err := generateAdapters(); err != nil { + fmt.Println(err) + return + } + + if err := generatePolicy("pkg/types/specactors/policy/policy.go"); err != nil { + fmt.Println(err) + return + } + + if err := generateBuiltin("pkg/types/specactors/builtin/builtin.go"); err != nil { + fmt.Println(err) + return + } +} + +func generateAdapters() error { + for act, versions := range actors { + actDir := filepath.Join("pkg/types/specactors/builtin", act) + + if err := generateState(actDir); err != nil { + return err + } + + if err := generateMessages(actDir); err != nil { + return err + } + + { + af, err := ioutil.ReadFile(filepath.Join(actDir, "actor.go.template")) + if err != nil { + return xerrors.Errorf("loading actor template: %w", err) + } + + tpl := template.Must(template.New("").Funcs(template.FuncMap{ + "import": func(v int) string { return getVersionImports()[v] }, + }).Parse(string(af))) + + var b bytes.Buffer + + err = tpl.Execute(&b, map[string]interface{}{ + "versions": versions, + "latestVersion": specactors.LatestVersion, + }) + if err != nil { + return err + } + + if err := ioutil.WriteFile(filepath.Join(actDir, fmt.Sprintf("%s.go", act)), b.Bytes(), 0666); err != nil { + return err + } + } + } + + return nil +} + +func generateState(actDir string) error { + af, err := ioutil.ReadFile(filepath.Join(actDir, "state.go.template")) + if err != nil { + if os.IsNotExist(err) { + return nil // skip + } + + return xerrors.Errorf("loading state adapter template: %w", err) + } + + for _, version := range specactors.Versions { + tpl := template.Must(template.New("").Funcs(template.FuncMap{}).Parse(string(af))) + + var b bytes.Buffer + + err := tpl.Execute(&b, map[string]interface{}{ + "v": version, + "import": getVersionImports()[version], + }) + if err != nil { + return err + } + + if err := ioutil.WriteFile(filepath.Join(actDir, fmt.Sprintf("v%d.go", version)), b.Bytes(), 0666); err != nil { + return err + } + } + + return nil +} + +func generateMessages(actDir string) error { + af, err := ioutil.ReadFile(filepath.Join(actDir, "message.go.template")) + if err != nil { + if os.IsNotExist(err) { + return nil // skip + } + + return xerrors.Errorf("loading message adapter template: %w", err) + } + + for _, version := range specactors.Versions { + tpl := template.Must(template.New("").Funcs(template.FuncMap{}).Parse(string(af))) + + var b bytes.Buffer + + err := tpl.Execute(&b, map[string]interface{}{ + "v": version, + "import": getVersionImports()[version], + }) + if err != nil { + return err + } + + if err := ioutil.WriteFile(filepath.Join(actDir, fmt.Sprintf("message%d.go", version)), b.Bytes(), 0666); err != nil { + return err + } + } + + return nil +} + +func generatePolicy(policyPath string) error { + + pf, err := ioutil.ReadFile(policyPath + ".template") + if err != nil { + if os.IsNotExist(err) { + return nil // skip + } + + return xerrors.Errorf("loading policy template file: %w", err) + } + + tpl := template.Must(template.New("").Funcs(template.FuncMap{ + "import": func(v int) string { return getVersionImports()[v] }, + }).Parse(string(pf))) + var b bytes.Buffer + + err = tpl.Execute(&b, map[string]interface{}{ + "versions": specactors.Versions, + "latestVersion": specactors.LatestVersion, + }) + if err != nil { + return err + } + + if err := ioutil.WriteFile(policyPath, b.Bytes(), 0666); err != nil { + return err + } + + return nil +} + +func generateBuiltin(builtinPath string) error { + + bf, err := ioutil.ReadFile(builtinPath + ".template") + if err != nil { + if os.IsNotExist(err) { + return nil // skip + } + + return xerrors.Errorf("loading builtin template file: %w", err) + } + + tpl := template.Must(template.New("").Funcs(template.FuncMap{ + "import": func(v int) string { return getVersionImports()[v] }, + }).Parse(string(bf))) + var b bytes.Buffer + + err = tpl.Execute(&b, map[string]interface{}{ + "versions": specactors.Versions, + "latestVersion": specactors.LatestVersion, + }) + if err != nil { + return err + } + + if err := ioutil.WriteFile(builtinPath, b.Bytes(), 0666); err != nil { + return err + } + + return nil +} + +func getVersionImports() map[int]string { + versionImports := make(map[int]string, specactors.LatestVersion) + for _, v := range specactors.Versions { + if v == 0 { + versionImports[v] = "/" + } else { + versionImports[v] = "/v" + strconv.Itoa(v) + "/" + } + } + + return versionImports +} diff --git a/pkg/types/specactors/builtin/README.md b/pkg/types/specactors/builtin/README.md new file mode 100644 index 0000000000..21b3fd38f1 --- /dev/null +++ b/pkg/types/specactors/builtin/README.md @@ -0,0 +1,29 @@ +# Actors + +This package contains shims for abstracting over different actor versions. + +## Design + +Shims in this package follow a few common design principles. + +### Structure Agnostic + +Shims interfaces defined in this package should (ideally) not change even if the +structure of the underlying data changes. For example: + +* All shims store an internal "store" object. That way, state can be moved into + a separate object without needing to add a store to the function signature. +* All functions must return an error, even if unused for now. + +### Minimal + +These interfaces should be expanded only as necessary to reduce maintenance burden. + +### Queries, not field assessors. + +When possible, functions should query the state instead of simply acting as +field assessors. These queries are more likely to remain stable across +specs-actor upgrades than specific state fields. + +Note: there is a trade-off here. Avoid implementing _complicated_ query logic +inside these shims, as it will need to be replicated in every shim. diff --git a/pkg/types/specactors/builtin/account/account.go b/pkg/types/specactors/builtin/account/account.go new file mode 100644 index 0000000000..1f42a62721 --- /dev/null +++ b/pkg/types/specactors/builtin/account/account.go @@ -0,0 +1,156 @@ +// FETCHED FROM LOTUS: builtin/account/actor.go.template + +package account + +import ( + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + +) + +func init() { + + builtin.RegisterActorState(builtin0.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +var Methods = builtin4.MethodsAccount + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.AccountActorCodeID: + return load0(store, act.Head) + + case builtin2.AccountActorCodeID: + return load2(store, act.Head) + + case builtin3.AccountActorCodeID: + return load3(store, act.Head) + + case builtin4.AccountActorCodeID: + return load4(store, act.Head) + + case builtin5.AccountActorCodeID: + return load5(store, act.Head) + + case builtin6.AccountActorCodeID: + return load6(store, act.Head) + + case builtin7.AccountActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, addr address.Address) (State, error) { + switch av { + + case actors.Version0: + return make0(store, addr) + + case actors.Version2: + return make2(store, addr) + + case actors.Version3: + return make3(store, addr) + + case actors.Version4: + return make4(store, addr) + + case actors.Version5: + return make5(store, addr) + + case actors.Version6: + return make6(store, addr) + + case actors.Version7: + return make7(store, addr) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.AccountActorCodeID, nil + + case actors.Version2: + return builtin2.AccountActorCodeID, nil + + case actors.Version3: + return builtin3.AccountActorCodeID, nil + + case actors.Version4: + return builtin4.AccountActorCodeID, nil + + case actors.Version5: + return builtin5.AccountActorCodeID, nil + + case actors.Version6: + return builtin6.AccountActorCodeID, nil + + case actors.Version7: + return builtin7.AccountActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + PubkeyAddress() (address.Address, error) + GetState() interface{} +} diff --git a/pkg/types/specactors/builtin/account/actor.go.template b/pkg/types/specactors/builtin/account/actor.go.template new file mode 100644 index 0000000000..5797647df6 --- /dev/null +++ b/pkg/types/specactors/builtin/account/actor.go.template @@ -0,0 +1,66 @@ +// FETCHED FROM LOTUS: builtin/account/actor.go.template + +package account + +import ( + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +var Methods = builtin4.MethodsAccount + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.AccountActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, addr address.Address) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store, addr) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.AccountActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + PubkeyAddress() (address.Address, error) + GetState() interface{} +} diff --git a/pkg/types/specactors/builtin/account/state.go.template b/pkg/types/specactors/builtin/account/state.go.template new file mode 100644 index 0000000000..24ccf80682 --- /dev/null +++ b/pkg/types/specactors/builtin/account/state.go.template @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + account{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/account" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store, addr address.Address) (State, error) { + out := state{{.v}}{store: store} + out.State = account{{.v}}.State{Address:addr} + return &out, nil +} + +type state{{.v}} struct { + account{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/account/v0.go b/pkg/types/specactors/builtin/account/v0.go new file mode 100644 index 0000000000..aef9d0a802 --- /dev/null +++ b/pkg/types/specactors/builtin/account/v0.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + account0 "github.com/filecoin-project/specs-actors/actors/builtin/account" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store, addr address.Address) (State, error) { + out := state0{store: store} + out.State = account0.State{Address:addr} + return &out, nil +} + +type state0 struct { + account0.State + store adt.Store +} + +func (s *state0) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state0) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/account/v2.go b/pkg/types/specactors/builtin/account/v2.go new file mode 100644 index 0000000000..1ac1633fb0 --- /dev/null +++ b/pkg/types/specactors/builtin/account/v2.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + account2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/account" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store, addr address.Address) (State, error) { + out := state2{store: store} + out.State = account2.State{Address:addr} + return &out, nil +} + +type state2 struct { + account2.State + store adt.Store +} + +func (s *state2) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state2) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/account/v3.go b/pkg/types/specactors/builtin/account/v3.go new file mode 100644 index 0000000000..557c9a3b4b --- /dev/null +++ b/pkg/types/specactors/builtin/account/v3.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + account3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/account" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store, addr address.Address) (State, error) { + out := state3{store: store} + out.State = account3.State{Address:addr} + return &out, nil +} + +type state3 struct { + account3.State + store adt.Store +} + +func (s *state3) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state3) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/account/v4.go b/pkg/types/specactors/builtin/account/v4.go new file mode 100644 index 0000000000..d52cb5dbad --- /dev/null +++ b/pkg/types/specactors/builtin/account/v4.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + account4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/account" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store, addr address.Address) (State, error) { + out := state4{store: store} + out.State = account4.State{Address:addr} + return &out, nil +} + +type state4 struct { + account4.State + store adt.Store +} + +func (s *state4) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state4) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/account/v5.go b/pkg/types/specactors/builtin/account/v5.go new file mode 100644 index 0000000000..4af3320550 --- /dev/null +++ b/pkg/types/specactors/builtin/account/v5.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + account5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/account" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store, addr address.Address) (State, error) { + out := state5{store: store} + out.State = account5.State{Address:addr} + return &out, nil +} + +type state5 struct { + account5.State + store adt.Store +} + +func (s *state5) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state5) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/account/v6.go b/pkg/types/specactors/builtin/account/v6.go new file mode 100644 index 0000000000..8a103d3b9e --- /dev/null +++ b/pkg/types/specactors/builtin/account/v6.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + account6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/account" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store, addr address.Address) (State, error) { + out := state6{store: store} + out.State = account6.State{Address:addr} + return &out, nil +} + +type state6 struct { + account6.State + store adt.Store +} + +func (s *state6) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state6) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/account/v7.go b/pkg/types/specactors/builtin/account/v7.go new file mode 100644 index 0000000000..57b0aa7c57 --- /dev/null +++ b/pkg/types/specactors/builtin/account/v7.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + account7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/account" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store, addr address.Address) (State, error) { + out := state7{store: store} + out.State = account7.State{Address:addr} + return &out, nil +} + +type state7 struct { + account7.State + store adt.Store +} + +func (s *state7) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state7) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/builtin.go b/pkg/types/specactors/builtin/builtin.go new file mode 100644 index 0000000000..91f888de05 --- /dev/null +++ b/pkg/types/specactors/builtin/builtin.go @@ -0,0 +1,365 @@ +// FETCHED FROM LOTUS: builtin/builtin.go.template + +package builtin + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + smoothing0 "github.com/filecoin-project/specs-actors/actors/util/smoothing" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + smoothing2 "github.com/filecoin-project/specs-actors/v2/actors/util/smoothing" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + smoothing3 "github.com/filecoin-project/specs-actors/v3/actors/util/smoothing" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + smoothing4 "github.com/filecoin-project/specs-actors/v4/actors/util/smoothing" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + smoothing5 "github.com/filecoin-project/specs-actors/v5/actors/util/smoothing" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + smoothing6 "github.com/filecoin-project/specs-actors/v6/actors/util/smoothing" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + smoothing7 "github.com/filecoin-project/specs-actors/v7/actors/util/smoothing" + + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + types "github.com/filecoin-project/venus/pkg/types/internal" + + miner7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/miner" + proof7 "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" +) + +var SystemActorAddr = builtin7.SystemActorAddr +var BurntFundsActorAddr = builtin7.BurntFundsActorAddr +var CronActorAddr = builtin7.CronActorAddr +var SaftAddress = makeAddress("t0122") +var ReserveAddress = makeAddress("t090") +var RootVerifierAddress = makeAddress("t080") + +var ( + ExpectedLeadersPerEpoch = builtin7.ExpectedLeadersPerEpoch +) + +const ( + EpochDurationSeconds = builtin7.EpochDurationSeconds + EpochsInDay = builtin7.EpochsInDay + SecondsInDay = builtin7.SecondsInDay +) + +const ( + MethodSend = builtin7.MethodSend + MethodConstructor = builtin7.MethodConstructor +) + +// These are all just type aliases across actor versions. In the future, that might change +// and we might need to do something fancier. +type SectorInfo = proof7.SectorInfo +type PoStProof = proof7.PoStProof +type FilterEstimate = smoothing0.FilterEstimate + +func QAPowerForWeight(size abi.SectorSize, duration abi.ChainEpoch, dealWeight, verifiedWeight abi.DealWeight) abi.StoragePower { + return miner7.QAPowerForWeight(size, duration, dealWeight, verifiedWeight) +} + + + func FromV0FilterEstimate(v0 smoothing0.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v0) //nolint:unconvert + + } + + func FromV2FilterEstimate(v2 smoothing2.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v2) + + } + + func FromV3FilterEstimate(v3 smoothing3.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v3) + + } + + func FromV4FilterEstimate(v4 smoothing4.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v4) + + } + + func FromV5FilterEstimate(v5 smoothing5.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v5) + + } + + func FromV6FilterEstimate(v6 smoothing6.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v6) + + } + + func FromV7FilterEstimate(v7 smoothing7.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v7) + + } + + +type ActorStateLoader func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) + +var ActorStateLoaders = make(map[cid.Cid]ActorStateLoader) + +func RegisterActorState(code cid.Cid, loader ActorStateLoader) { + ActorStateLoaders[code] = loader +} + +func Load(store adt.Store, act *types.Actor) (cbor.Marshaler, error) { + loader, found := ActorStateLoaders[act.Code] + if !found { + return nil, xerrors.Errorf("unknown actor code %s", act.Code) + } + return loader(store, act.Head) +} + +func ActorNameByCode(c cid.Cid) string { + switch { + + case builtin0.IsBuiltinActor(c): + return builtin0.ActorNameByCode(c) + + case builtin2.IsBuiltinActor(c): + return builtin2.ActorNameByCode(c) + + case builtin3.IsBuiltinActor(c): + return builtin3.ActorNameByCode(c) + + case builtin4.IsBuiltinActor(c): + return builtin4.ActorNameByCode(c) + + case builtin5.IsBuiltinActor(c): + return builtin5.ActorNameByCode(c) + + case builtin6.IsBuiltinActor(c): + return builtin6.ActorNameByCode(c) + + case builtin7.IsBuiltinActor(c): + return builtin7.ActorNameByCode(c) + + default: + return "" + } +} + +func IsBuiltinActor(c cid.Cid) bool { + + if builtin0.IsBuiltinActor(c) { + return true + } + + if builtin2.IsBuiltinActor(c) { + return true + } + + if builtin3.IsBuiltinActor(c) { + return true + } + + if builtin4.IsBuiltinActor(c) { + return true + } + + if builtin5.IsBuiltinActor(c) { + return true + } + + if builtin6.IsBuiltinActor(c) { + return true + } + + if builtin7.IsBuiltinActor(c) { + return true + } + + return false +} + +func IsAccountActor(c cid.Cid) bool { + + if c == builtin0.AccountActorCodeID { + return true + } + + if c == builtin2.AccountActorCodeID { + return true + } + + if c == builtin3.AccountActorCodeID { + return true + } + + if c == builtin4.AccountActorCodeID { + return true + } + + if c == builtin5.AccountActorCodeID { + return true + } + + if c == builtin6.AccountActorCodeID { + return true + } + + if c == builtin7.AccountActorCodeID { + return true + } + + return false +} + +func IsStorageMinerActor(c cid.Cid) bool { + + if c == builtin0.StorageMinerActorCodeID { + return true + } + + if c == builtin2.StorageMinerActorCodeID { + return true + } + + if c == builtin3.StorageMinerActorCodeID { + return true + } + + if c == builtin4.StorageMinerActorCodeID { + return true + } + + if c == builtin5.StorageMinerActorCodeID { + return true + } + + if c == builtin6.StorageMinerActorCodeID { + return true + } + + if c == builtin7.StorageMinerActorCodeID { + return true + } + + return false +} + +func IsMultisigActor(c cid.Cid) bool { + + if c == builtin0.MultisigActorCodeID { + return true + } + + if c == builtin2.MultisigActorCodeID { + return true + } + + if c == builtin3.MultisigActorCodeID { + return true + } + + if c == builtin4.MultisigActorCodeID { + return true + } + + if c == builtin5.MultisigActorCodeID { + return true + } + + if c == builtin6.MultisigActorCodeID { + return true + } + + if c == builtin7.MultisigActorCodeID { + return true + } + + return false +} + +func IsPaymentChannelActor(c cid.Cid) bool { + + if c == builtin0.PaymentChannelActorCodeID { + return true + } + + if c == builtin2.PaymentChannelActorCodeID { + return true + } + + if c == builtin3.PaymentChannelActorCodeID { + return true + } + + if c == builtin4.PaymentChannelActorCodeID { + return true + } + + if c == builtin5.PaymentChannelActorCodeID { + return true + } + + if c == builtin6.PaymentChannelActorCodeID { + return true + } + + if c == builtin7.PaymentChannelActorCodeID { + return true + } + + return false +} + +func IsInitActor(c cid.Cid) bool { + + if c == builtin0.InitActorCodeID { + return true + } + + if c == builtin2.InitActorCodeID { + return true + } + + if c == builtin3.InitActorCodeID { + return true + } + + if c == builtin4.InitActorCodeID { + return true + } + + if c == builtin5.InitActorCodeID { + return true + } + + if c == builtin6.InitActorCodeID { + return true + } + + return false +} + +func makeAddress(addr string) address.Address { + ret, err := address.NewFromString(addr) + if err != nil { + panic(err) + } + + return ret +} diff --git a/pkg/types/specactors/builtin/builtin.go.template b/pkg/types/specactors/builtin/builtin.go.template new file mode 100644 index 0000000000..3a6eb5f890 --- /dev/null +++ b/pkg/types/specactors/builtin/builtin.go.template @@ -0,0 +1,146 @@ +// FETCHED FROM LOTUS: builtin/builtin.go.template + +package builtin + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + {{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" + smoothing{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/util/smoothing" + {{end}} + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + types "github.com/filecoin-project/venus/pkg/types/internal" + + miner{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/builtin/miner" + proof{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/runtime/proof" +) + +var SystemActorAddr = builtin{{.latestVersion}}.SystemActorAddr +var BurntFundsActorAddr = builtin{{.latestVersion}}.BurntFundsActorAddr +var CronActorAddr = builtin{{.latestVersion}}.CronActorAddr +var SaftAddress = makeAddress("t0122") +var ReserveAddress = makeAddress("t090") +var RootVerifierAddress = makeAddress("t080") + +var ( + ExpectedLeadersPerEpoch = builtin{{.latestVersion}}.ExpectedLeadersPerEpoch +) + +const ( + EpochDurationSeconds = builtin{{.latestVersion}}.EpochDurationSeconds + EpochsInDay = builtin{{.latestVersion}}.EpochsInDay + SecondsInDay = builtin{{.latestVersion}}.SecondsInDay +) + +const ( + MethodSend = builtin{{.latestVersion}}.MethodSend + MethodConstructor = builtin{{.latestVersion}}.MethodConstructor +) + +// These are all just type aliases across actor versions. In the future, that might change +// and we might need to do something fancier. +type SectorInfo = proof{{.latestVersion}}.SectorInfo +type PoStProof = proof{{.latestVersion}}.PoStProof +type FilterEstimate = smoothing0.FilterEstimate + +func QAPowerForWeight(size abi.SectorSize, duration abi.ChainEpoch, dealWeight, verifiedWeight abi.DealWeight) abi.StoragePower { + return miner{{.latestVersion}}.QAPowerForWeight(size, duration, dealWeight, verifiedWeight) +} + +{{range .versions}} + func FromV{{.}}FilterEstimate(v{{.}} smoothing{{.}}.FilterEstimate) FilterEstimate { + {{if (eq . 0)}} + return (FilterEstimate)(v{{.}}) //nolint:unconvert + {{else}} + return (FilterEstimate)(v{{.}}) + {{end}} + } +{{end}} + +type ActorStateLoader func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) + +var ActorStateLoaders = make(map[cid.Cid]ActorStateLoader) + +func RegisterActorState(code cid.Cid, loader ActorStateLoader) { + ActorStateLoaders[code] = loader +} + +func Load(store adt.Store, act *types.Actor) (cbor.Marshaler, error) { + loader, found := ActorStateLoaders[act.Code] + if !found { + return nil, xerrors.Errorf("unknown actor code %s", act.Code) + } + return loader(store, act.Head) +} + +func ActorNameByCode(c cid.Cid) string { + switch { + {{range .versions}} + case builtin{{.}}.IsBuiltinActor(c): + return builtin{{.}}.ActorNameByCode(c) + {{end}} + default: + return "" + } +} + +func IsBuiltinActor(c cid.Cid) bool { + {{range .versions}} + if builtin{{.}}.IsBuiltinActor(c) { + return true + } + {{end}} + return false +} + +func IsAccountActor(c cid.Cid) bool { + {{range .versions}} + if c == builtin{{.}}.AccountActorCodeID { + return true + } + {{end}} + return false +} + +func IsStorageMinerActor(c cid.Cid) bool { + {{range .versions}} + if c == builtin{{.}}.StorageMinerActorCodeID { + return true + } + {{end}} + return false +} + +func IsMultisigActor(c cid.Cid) bool { + {{range .versions}} + if c == builtin{{.}}.MultisigActorCodeID { + return true + } + {{end}} + return false +} + +func IsPaymentChannelActor(c cid.Cid) bool { + {{range .versions}} + if c == builtin{{.}}.PaymentChannelActorCodeID { + return true + } + {{end}} + return false +} + +func makeAddress(addr string) address.Address { + ret, err := address.NewFromString(addr) + if err != nil { + panic(err) + } + + return ret +} diff --git a/pkg/types/specactors/builtin/cron/actor.go.template b/pkg/types/specactors/builtin/cron/actor.go.template new file mode 100644 index 0000000000..c8a8759821 --- /dev/null +++ b/pkg/types/specactors/builtin/cron/actor.go.template @@ -0,0 +1,44 @@ +// FETCHED FROM LOTUS: builtin/cron/actor.go.template + +package cron + +import ( + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "golang.org/x/xerrors" + "github.com/ipfs/go-cid" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.CronActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +var ( + Address = builtin{{.latestVersion}}.CronActorAddr + Methods = builtin{{.latestVersion}}.MethodsCron +) + + +type State interface { + GetState() interface{} +} diff --git a/pkg/types/specactors/builtin/cron/cron.go b/pkg/types/specactors/builtin/cron/cron.go new file mode 100644 index 0000000000..277152dd69 --- /dev/null +++ b/pkg/types/specactors/builtin/cron/cron.go @@ -0,0 +1,92 @@ +// FETCHED FROM LOTUS: builtin/cron/actor.go.template + +package cron + +import ( + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "golang.org/x/xerrors" + "github.com/ipfs/go-cid" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + +) + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.CronActorCodeID, nil + + case actors.Version2: + return builtin2.CronActorCodeID, nil + + case actors.Version3: + return builtin3.CronActorCodeID, nil + + case actors.Version4: + return builtin4.CronActorCodeID, nil + + case actors.Version5: + return builtin5.CronActorCodeID, nil + + case actors.Version6: + return builtin6.CronActorCodeID, nil + + case actors.Version7: + return builtin7.CronActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +var ( + Address = builtin7.CronActorAddr + Methods = builtin7.MethodsCron +) + + +type State interface { + GetState() interface{} +} diff --git a/pkg/types/specactors/builtin/cron/state.go.template b/pkg/types/specactors/builtin/cron/state.go.template new file mode 100644 index 0000000000..a06a777b27 --- /dev/null +++ b/pkg/types/specactors/builtin/cron/state.go.template @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + cron{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/cron" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + out.State = *cron{{.v}}.ConstructState(cron{{.v}}.BuiltInEntries()) + return &out, nil +} + +type state{{.v}} struct { + cron{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/cron/v0.go b/pkg/types/specactors/builtin/cron/v0.go new file mode 100644 index 0000000000..4029ab15da --- /dev/null +++ b/pkg/types/specactors/builtin/cron/v0.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + cron0 "github.com/filecoin-project/specs-actors/actors/builtin/cron" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + out.State = *cron0.ConstructState(cron0.BuiltInEntries()) + return &out, nil +} + +type state0 struct { + cron0.State + store adt.Store +} + +func (s *state0) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/cron/v2.go b/pkg/types/specactors/builtin/cron/v2.go new file mode 100644 index 0000000000..4a54b18506 --- /dev/null +++ b/pkg/types/specactors/builtin/cron/v2.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + cron2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/cron" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + out.State = *cron2.ConstructState(cron2.BuiltInEntries()) + return &out, nil +} + +type state2 struct { + cron2.State + store adt.Store +} + +func (s *state2) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/cron/v3.go b/pkg/types/specactors/builtin/cron/v3.go new file mode 100644 index 0000000000..799dec7e5f --- /dev/null +++ b/pkg/types/specactors/builtin/cron/v3.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + cron3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/cron" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + out.State = *cron3.ConstructState(cron3.BuiltInEntries()) + return &out, nil +} + +type state3 struct { + cron3.State + store adt.Store +} + +func (s *state3) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/cron/v4.go b/pkg/types/specactors/builtin/cron/v4.go new file mode 100644 index 0000000000..3e58e275d9 --- /dev/null +++ b/pkg/types/specactors/builtin/cron/v4.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + cron4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/cron" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + out.State = *cron4.ConstructState(cron4.BuiltInEntries()) + return &out, nil +} + +type state4 struct { + cron4.State + store adt.Store +} + +func (s *state4) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/cron/v5.go b/pkg/types/specactors/builtin/cron/v5.go new file mode 100644 index 0000000000..0ba27a6e7a --- /dev/null +++ b/pkg/types/specactors/builtin/cron/v5.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + cron5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/cron" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + out.State = *cron5.ConstructState(cron5.BuiltInEntries()) + return &out, nil +} + +type state5 struct { + cron5.State + store adt.Store +} + +func (s *state5) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/cron/v6.go b/pkg/types/specactors/builtin/cron/v6.go new file mode 100644 index 0000000000..87c7e59195 --- /dev/null +++ b/pkg/types/specactors/builtin/cron/v6.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + cron6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/cron" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + out.State = *cron6.ConstructState(cron6.BuiltInEntries()) + return &out, nil +} + +type state6 struct { + cron6.State + store adt.Store +} + +func (s *state6) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/cron/v7.go b/pkg/types/specactors/builtin/cron/v7.go new file mode 100644 index 0000000000..35bbab5a96 --- /dev/null +++ b/pkg/types/specactors/builtin/cron/v7.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + cron7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/cron" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + out.State = *cron7.ConstructState(cron7.BuiltInEntries()) + return &out, nil +} + +type state7 struct { + cron7.State + store adt.Store +} + +func (s *state7) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/init/actor.go.template b/pkg/types/specactors/builtin/init/actor.go.template new file mode 100644 index 0000000000..8a257f85d4 --- /dev/null +++ b/pkg/types/specactors/builtin/init/actor.go.template @@ -0,0 +1,91 @@ +// FETCHED FROM LOTUS: builtin/init/actor.go.template + +package init + +import ( + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" + +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +var ( + Address = builtin{{.latestVersion}}.InitActorAddr + Methods = builtin{{.latestVersion}}.MethodsInit +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.InitActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, networkName string) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store, networkName) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.InitActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + ResolveAddress(address address.Address) (address.Address, bool, error) + MapAddressToNewID(address address.Address) (address.Address, error) + NetworkName() (string, error) + + ForEachActor(func(id abi.ActorID, address address.Address) error) error + + // Remove exists to support tooling that manipulates state for testing. + // It should not be used in production code, as init actor entries are + // immutable. + Remove(addrs ...address.Address) error + + // Sets the network's name. This should only be used on upgrade/fork. + SetNetworkName(name string) error + + // Sets the next ID for the init actor. This should only be used for testing. + SetNextID(id abi.ActorID) error + + // Sets the address map for the init actor. This should only be used for testing. + SetAddressMap(mcid cid.Cid) error + + AddressMap() (adt.Map, error) + GetState() interface{} +} diff --git a/pkg/types/specactors/builtin/init/diff.go b/pkg/types/specactors/builtin/init/diff.go new file mode 100644 index 0000000000..37a6979098 --- /dev/null +++ b/pkg/types/specactors/builtin/init/diff.go @@ -0,0 +1,152 @@ +package init + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + typegen "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" +) + +func DiffAddressMap(pre, cur State) (*AddressMapChanges, error) { + prem, err := pre.AddressMap() + if err != nil { + return nil, err + } + + curm, err := cur.AddressMap() + if err != nil { + return nil, err + } + + preRoot, err := prem.Root() + if err != nil { + return nil, err + } + + curRoot, err := curm.Root() + if err != nil { + return nil, err + } + + results := new(AddressMapChanges) + // no change. + if curRoot.Equals(preRoot) { + return results, nil + } + + err = adt.DiffAdtMap(prem, curm, &addressMapDiffer{results, pre, cur}) + if err != nil { + return nil, err + } + + return results, nil +} + +type addressMapDiffer struct { + Results *AddressMapChanges + pre, adter State +} + +type AddressMapChanges struct { + Added []AddressPair + Modified []AddressChange + Removed []AddressPair +} + +func (i *addressMapDiffer) AsKey(key string) (abi.Keyer, error) { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return nil, err + } + return abi.AddrKey(addr), nil +} + +func (i *addressMapDiffer) Add(key string, val *typegen.Deferred) error { + pkAddr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + id := new(typegen.CborInt) + if err := id.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return err + } + idAddr, err := address.NewIDAddress(uint64(*id)) + if err != nil { + return err + } + i.Results.Added = append(i.Results.Added, AddressPair{ + ID: idAddr, + PK: pkAddr, + }) + return nil +} + +func (i *addressMapDiffer) Modify(key string, from, to *typegen.Deferred) error { + pkAddr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + + fromID := new(typegen.CborInt) + if err := fromID.UnmarshalCBOR(bytes.NewReader(from.Raw)); err != nil { + return err + } + fromIDAddr, err := address.NewIDAddress(uint64(*fromID)) + if err != nil { + return err + } + + toID := new(typegen.CborInt) + if err := toID.UnmarshalCBOR(bytes.NewReader(to.Raw)); err != nil { + return err + } + toIDAddr, err := address.NewIDAddress(uint64(*toID)) + if err != nil { + return err + } + + i.Results.Modified = append(i.Results.Modified, AddressChange{ + From: AddressPair{ + ID: fromIDAddr, + PK: pkAddr, + }, + To: AddressPair{ + ID: toIDAddr, + PK: pkAddr, + }, + }) + return nil +} + +func (i *addressMapDiffer) Remove(key string, val *typegen.Deferred) error { + pkAddr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + id := new(typegen.CborInt) + if err := id.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return err + } + idAddr, err := address.NewIDAddress(uint64(*id)) + if err != nil { + return err + } + i.Results.Removed = append(i.Results.Removed, AddressPair{ + ID: idAddr, + PK: pkAddr, + }) + return nil +} + +type AddressChange struct { + From AddressPair + To AddressPair +} + +type AddressPair struct { + ID address.Address + PK address.Address +} diff --git a/pkg/types/specactors/builtin/init/init.go b/pkg/types/specactors/builtin/init/init.go new file mode 100644 index 0000000000..f59355f5a9 --- /dev/null +++ b/pkg/types/specactors/builtin/init/init.go @@ -0,0 +1,181 @@ +// FETCHED FROM LOTUS: builtin/init/actor.go.template + +package init + +import ( + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" + + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + +) + +func init() { + + builtin.RegisterActorState(builtin0.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +var ( + Address = builtin7.InitActorAddr + Methods = builtin7.MethodsInit +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.InitActorCodeID: + return load0(store, act.Head) + + case builtin2.InitActorCodeID: + return load2(store, act.Head) + + case builtin3.InitActorCodeID: + return load3(store, act.Head) + + case builtin4.InitActorCodeID: + return load4(store, act.Head) + + case builtin5.InitActorCodeID: + return load5(store, act.Head) + + case builtin6.InitActorCodeID: + return load6(store, act.Head) + + case builtin7.InitActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, networkName string) (State, error) { + switch av { + + case actors.Version0: + return make0(store, networkName) + + case actors.Version2: + return make2(store, networkName) + + case actors.Version3: + return make3(store, networkName) + + case actors.Version4: + return make4(store, networkName) + + case actors.Version5: + return make5(store, networkName) + + case actors.Version6: + return make6(store, networkName) + + case actors.Version7: + return make7(store, networkName) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.InitActorCodeID, nil + + case actors.Version2: + return builtin2.InitActorCodeID, nil + + case actors.Version3: + return builtin3.InitActorCodeID, nil + + case actors.Version4: + return builtin4.InitActorCodeID, nil + + case actors.Version5: + return builtin5.InitActorCodeID, nil + + case actors.Version6: + return builtin6.InitActorCodeID, nil + + case actors.Version7: + return builtin7.InitActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + ResolveAddress(address address.Address) (address.Address, bool, error) + MapAddressToNewID(address address.Address) (address.Address, error) + NetworkName() (string, error) + + ForEachActor(func(id abi.ActorID, address address.Address) error) error + + // Remove exists to support tooling that manipulates state for testing. + // It should not be used in production code, as init actor entries are + // immutable. + Remove(addrs ...address.Address) error + + // Sets the network's name. This should only be used on upgrade/fork. + SetNetworkName(name string) error + + // Sets the next ID for the init actor. This should only be used for testing. + SetNextID(id abi.ActorID) error + + // Sets the address map for the init actor. This should only be used for testing. + SetAddressMap(mcid cid.Cid) error + + AddressMap() (adt.Map, error) + GetState() interface{} +} diff --git a/pkg/types/specactors/builtin/init/state.go.template b/pkg/types/specactors/builtin/init/state.go.template new file mode 100644 index 0000000000..6a2e33452e --- /dev/null +++ b/pkg/types/specactors/builtin/init/state.go.template @@ -0,0 +1,125 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + +{{if (ge .v 3)}} + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" +{{end}} + + init{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/init" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store, networkName string) (State, error) { + out := state{{.v}}{store: store} + {{if (le .v 2)}} + mr, err := adt{{.v}}.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *init{{.v}}.ConstructState(mr, networkName) + {{else}} + s, err := init{{.v}}.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + {{end}} + return &out, nil +} + +type state{{.v}} struct { + init{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state{{.v}}) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state{{.v}}) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt{{.v}}.AsMap(s.store, s.State.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state{{.v}}) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state{{.v}}) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state{{.v}}) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state{{.v}}) Remove(addrs ...address.Address) (err error) { + m, err := adt{{.v}}.AsMap(s.store, s.State.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state{{.v}}) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state{{.v}}) AddressMap() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.State.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/init/v0.go b/pkg/types/specactors/builtin/init/v0.go new file mode 100644 index 0000000000..6bc0b3f132 --- /dev/null +++ b/pkg/types/specactors/builtin/init/v0.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + + + init0 "github.com/filecoin-project/specs-actors/actors/builtin/init" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store, networkName string) (State, error) { + out := state0{store: store} + + mr, err := adt0.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *init0.ConstructState(mr, networkName) + + return &out, nil +} + +type state0 struct { + init0.State + store adt.Store +} + +func (s *state0) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state0) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state0) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt0.AsMap(s.store, s.State.AddressMap) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state0) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state0) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state0) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state0) Remove(addrs ...address.Address) (err error) { + m, err := adt0.AsMap(s.store, s.State.AddressMap) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state0) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state0) AddressMap() (adt.Map, error) { + return adt0.AsMap(s.store, s.State.AddressMap) +} + +func (s *state0) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/init/v2.go b/pkg/types/specactors/builtin/init/v2.go new file mode 100644 index 0000000000..6c7b143d1b --- /dev/null +++ b/pkg/types/specactors/builtin/init/v2.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + + + init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store, networkName string) (State, error) { + out := state2{store: store} + + mr, err := adt2.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *init2.ConstructState(mr, networkName) + + return &out, nil +} + +type state2 struct { + init2.State + store adt.Store +} + +func (s *state2) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state2) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state2) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt2.AsMap(s.store, s.State.AddressMap) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state2) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state2) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state2) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state2) Remove(addrs ...address.Address) (err error) { + m, err := adt2.AsMap(s.store, s.State.AddressMap) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state2) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state2) AddressMap() (adt.Map, error) { + return adt2.AsMap(s.store, s.State.AddressMap) +} + +func (s *state2) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/init/v3.go b/pkg/types/specactors/builtin/init/v3.go new file mode 100644 index 0000000000..3fee0b227c --- /dev/null +++ b/pkg/types/specactors/builtin/init/v3.go @@ -0,0 +1,118 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + + init3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/init" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store, networkName string) (State, error) { + out := state3{store: store} + + s, err := init3.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state3 struct { + init3.State + store adt.Store +} + +func (s *state3) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state3) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state3) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt3.AsMap(s.store, s.State.AddressMap, builtin3.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state3) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state3) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state3) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state3) Remove(addrs ...address.Address) (err error) { + m, err := adt3.AsMap(s.store, s.State.AddressMap, builtin3.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state3) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state3) AddressMap() (adt.Map, error) { + return adt3.AsMap(s.store, s.State.AddressMap, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/init/v4.go b/pkg/types/specactors/builtin/init/v4.go new file mode 100644 index 0000000000..6897447ed2 --- /dev/null +++ b/pkg/types/specactors/builtin/init/v4.go @@ -0,0 +1,118 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + + init4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/init" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store, networkName string) (State, error) { + out := state4{store: store} + + s, err := init4.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state4 struct { + init4.State + store adt.Store +} + +func (s *state4) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state4) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state4) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt4.AsMap(s.store, s.State.AddressMap, builtin4.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state4) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state4) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state4) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state4) Remove(addrs ...address.Address) (err error) { + m, err := adt4.AsMap(s.store, s.State.AddressMap, builtin4.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state4) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state4) AddressMap() (adt.Map, error) { + return adt4.AsMap(s.store, s.State.AddressMap, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/init/v5.go b/pkg/types/specactors/builtin/init/v5.go new file mode 100644 index 0000000000..2804256ddf --- /dev/null +++ b/pkg/types/specactors/builtin/init/v5.go @@ -0,0 +1,118 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + + init5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/init" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store, networkName string) (State, error) { + out := state5{store: store} + + s, err := init5.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state5 struct { + init5.State + store adt.Store +} + +func (s *state5) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state5) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state5) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt5.AsMap(s.store, s.State.AddressMap, builtin5.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state5) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state5) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state5) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state5) Remove(addrs ...address.Address) (err error) { + m, err := adt5.AsMap(s.store, s.State.AddressMap, builtin5.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state5) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state5) AddressMap() (adt.Map, error) { + return adt5.AsMap(s.store, s.State.AddressMap, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/init/v6.go b/pkg/types/specactors/builtin/init/v6.go new file mode 100644 index 0000000000..816d548210 --- /dev/null +++ b/pkg/types/specactors/builtin/init/v6.go @@ -0,0 +1,118 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + + init6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/init" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store, networkName string) (State, error) { + out := state6{store: store} + + s, err := init6.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state6 struct { + init6.State + store adt.Store +} + +func (s *state6) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state6) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state6) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt6.AsMap(s.store, s.State.AddressMap, builtin6.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state6) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state6) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state6) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state6) Remove(addrs ...address.Address) (err error) { + m, err := adt6.AsMap(s.store, s.State.AddressMap, builtin6.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state6) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state6) AddressMap() (adt.Map, error) { + return adt6.AsMap(s.store, s.State.AddressMap, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/init/v7.go b/pkg/types/specactors/builtin/init/v7.go new file mode 100644 index 0000000000..51ac746de4 --- /dev/null +++ b/pkg/types/specactors/builtin/init/v7.go @@ -0,0 +1,118 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + + init7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/init" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store, networkName string) (State, error) { + out := state7{store: store} + + s, err := init7.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state7 struct { + init7.State + store adt.Store +} + +func (s *state7) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state7) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state7) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt7.AsMap(s.store, s.State.AddressMap, builtin7.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state7) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state7) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state7) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state7) Remove(addrs ...address.Address) (err error) { + m, err := adt7.AsMap(s.store, s.State.AddressMap, builtin7.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state7) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state7) AddressMap() (adt.Map, error) { + return adt7.AsMap(s.store, s.State.AddressMap, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/market/actor.go.template b/pkg/types/specactors/builtin/market/actor.go.template new file mode 100644 index 0000000000..a7d31d43e1 --- /dev/null +++ b/pkg/types/specactors/builtin/market/actor.go.template @@ -0,0 +1,206 @@ +// FETCHED FROM LOTUS: builtin/market/actor.go.template + +package market + +import ( + "github.com/filecoin-project/go-state-types/network" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +var ( + Address = builtin{{.latestVersion}}.StorageMarketActorAddr + Methods = builtin{{.latestVersion}}.MethodsMarket +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.StorageMarketActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.StorageMarketActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + BalancesChanged(State) (bool, error) + EscrowTable() (BalanceTable, error) + LockedTable() (BalanceTable, error) + TotalLocked() (abi.TokenAmount, error) + StatesChanged(State) (bool, error) + States() (DealStates, error) + ProposalsChanged(State) (bool, error) + Proposals() (DealProposals, error) + VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, + ) (weight, verifiedWeight abi.DealWeight, err error) + NextID() (abi.DealID, error) + GetState() interface{} +} + +type BalanceTable interface { + ForEach(cb func(address.Address, abi.TokenAmount) error) error + Get(key address.Address) (abi.TokenAmount, error) +} + +type DealStates interface { + ForEach(cb func(id abi.DealID, ds DealState) error) error + Get(id abi.DealID) (*DealState, bool, error) + + array() adt.Array + decode(*cbg.Deferred) (*DealState, error) +} + +type DealProposals interface { + ForEach(cb func(id abi.DealID, dp DealProposal) error) error + Get(id abi.DealID) (*DealProposal, bool, error) + + array() adt.Array + decode(*cbg.Deferred) (*DealProposal, error) +} + +type PublishStorageDealsParams = market0.PublishStorageDealsParams + +type PublishStorageDealsReturn interface { + DealIDs() ([]abi.DealID, error) + // Note that this index is based on the batch of deals that were published, NOT the DealID + IsDealValid(index uint64) (bool, error) +} + +func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStorageDealsReturn, error) { + av, err := actors.VersionForNetwork(nv) + if err != nil { + return nil, err + } + + switch av { +{{range .versions}} + case actors.Version{{.}}: + return decodePublishStorageDealsReturn{{.}}(b) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +type VerifyDealsForActivationParams = market0.VerifyDealsForActivationParams +type WithdrawBalanceParams = market0.WithdrawBalanceParams + +type ClientDealProposal = market0.ClientDealProposal + +type DealState struct { + SectorStartEpoch abi.ChainEpoch // -1 if not yet included in proven sector + LastUpdatedEpoch abi.ChainEpoch // -1 if deal state never updated + SlashEpoch abi.ChainEpoch // -1 if deal never slashed +} + +type DealProposal struct { + PieceCID cid.Cid + PieceSize abi.PaddedPieceSize + VerifiedDeal bool + Client address.Address + Provider address.Address + Label string + StartEpoch abi.ChainEpoch + EndEpoch abi.ChainEpoch + StoragePricePerEpoch abi.TokenAmount + ProviderCollateral abi.TokenAmount + ClientCollateral abi.TokenAmount +} + +type DealStateChanges struct { + Added []DealIDState + Modified []DealStateChange + Removed []DealIDState +} + +type DealIDState struct { + ID abi.DealID + Deal DealState +} + +// DealStateChange is a change in deal state from -> to +type DealStateChange struct { + ID abi.DealID + From *DealState + To *DealState +} + +type DealProposalChanges struct { + Added []ProposalIDState + Removed []ProposalIDState +} + +type ProposalIDState struct { + ID abi.DealID + Proposal DealProposal +} + +func EmptyDealState() *DealState { + return &DealState{ + SectorStartEpoch: -1, + SlashEpoch: -1, + LastUpdatedEpoch: -1, + } +} + +// returns the earned fees and pending fees for a given deal +func (deal DealProposal) GetDealFees(height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { + tf := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(deal.EndEpoch-deal.StartEpoch))) + + ef := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(height-deal.StartEpoch))) + if ef.LessThan(big.Zero()) { + ef = big.Zero() + } + + if ef.GreaterThan(tf) { + ef = tf + } + + return ef, big.Sub(tf, ef) +} diff --git a/pkg/types/specactors/builtin/market/diff.go b/pkg/types/specactors/builtin/market/diff.go new file mode 100644 index 0000000000..90c4e75cad --- /dev/null +++ b/pkg/types/specactors/builtin/market/diff.go @@ -0,0 +1,91 @@ +package market + +import ( + "fmt" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + cbg "github.com/whyrusleeping/cbor-gen" +) + +func DiffDealProposals(pre, cur DealProposals) (*DealProposalChanges, error) { + results := new(DealProposalChanges) + if err := adt.DiffAdtArray(pre.array(), cur.array(), &marketProposalsDiffer{results, pre, cur}); err != nil { + return nil, fmt.Errorf("diffing deal states: %w", err) + } + return results, nil +} + +type marketProposalsDiffer struct { + Results *DealProposalChanges + pre, cur DealProposals +} + +func (d *marketProposalsDiffer) Add(key uint64, val *cbg.Deferred) error { + dp, err := d.cur.decode(val) + if err != nil { + return err + } + d.Results.Added = append(d.Results.Added, ProposalIDState{abi.DealID(key), *dp}) + return nil +} + +func (d *marketProposalsDiffer) Modify(key uint64, from, to *cbg.Deferred) error { + // short circuit, DealProposals are static + return nil +} + +func (d *marketProposalsDiffer) Remove(key uint64, val *cbg.Deferred) error { + dp, err := d.pre.decode(val) + if err != nil { + return err + } + d.Results.Removed = append(d.Results.Removed, ProposalIDState{abi.DealID(key), *dp}) + return nil +} + +func DiffDealStates(pre, cur DealStates) (*DealStateChanges, error) { + results := new(DealStateChanges) + if err := adt.DiffAdtArray(pre.array(), cur.array(), &marketStatesDiffer{results, pre, cur}); err != nil { + return nil, fmt.Errorf("diffing deal states: %w", err) + } + return results, nil +} + +type marketStatesDiffer struct { + Results *DealStateChanges + pre, cur DealStates +} + +func (d *marketStatesDiffer) Add(key uint64, val *cbg.Deferred) error { + ds, err := d.cur.decode(val) + if err != nil { + return err + } + d.Results.Added = append(d.Results.Added, DealIDState{abi.DealID(key), *ds}) + return nil +} + +func (d *marketStatesDiffer) Modify(key uint64, from, to *cbg.Deferred) error { + dsFrom, err := d.pre.decode(from) + if err != nil { + return err + } + dsTo, err := d.cur.decode(to) + if err != nil { + return err + } + if *dsFrom != *dsTo { + d.Results.Modified = append(d.Results.Modified, DealStateChange{abi.DealID(key), dsFrom, dsTo}) + } + return nil +} + +func (d *marketStatesDiffer) Remove(key uint64, val *cbg.Deferred) error { + ds, err := d.pre.decode(val) + if err != nil { + return err + } + d.Results.Removed = append(d.Results.Removed, DealIDState{abi.DealID(key), *ds}) + return nil +} diff --git a/pkg/types/specactors/builtin/market/market.go b/pkg/types/specactors/builtin/market/market.go new file mode 100644 index 0000000000..77383ba8c8 --- /dev/null +++ b/pkg/types/specactors/builtin/market/market.go @@ -0,0 +1,314 @@ +// FETCHED FROM LOTUS: builtin/market/actor.go.template + +package market + +import ( + "github.com/filecoin-project/go-state-types/network" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +func init() { + + builtin.RegisterActorState(builtin0.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +var ( + Address = builtin7.StorageMarketActorAddr + Methods = builtin7.MethodsMarket +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.StorageMarketActorCodeID: + return load0(store, act.Head) + + case builtin2.StorageMarketActorCodeID: + return load2(store, act.Head) + + case builtin3.StorageMarketActorCodeID: + return load3(store, act.Head) + + case builtin4.StorageMarketActorCodeID: + return load4(store, act.Head) + + case builtin5.StorageMarketActorCodeID: + return load5(store, act.Head) + + case builtin6.StorageMarketActorCodeID: + return load6(store, act.Head) + + case builtin7.StorageMarketActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.StorageMarketActorCodeID, nil + + case actors.Version2: + return builtin2.StorageMarketActorCodeID, nil + + case actors.Version3: + return builtin3.StorageMarketActorCodeID, nil + + case actors.Version4: + return builtin4.StorageMarketActorCodeID, nil + + case actors.Version5: + return builtin5.StorageMarketActorCodeID, nil + + case actors.Version6: + return builtin6.StorageMarketActorCodeID, nil + + case actors.Version7: + return builtin7.StorageMarketActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + BalancesChanged(State) (bool, error) + EscrowTable() (BalanceTable, error) + LockedTable() (BalanceTable, error) + TotalLocked() (abi.TokenAmount, error) + StatesChanged(State) (bool, error) + States() (DealStates, error) + ProposalsChanged(State) (bool, error) + Proposals() (DealProposals, error) + VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, + ) (weight, verifiedWeight abi.DealWeight, err error) + NextID() (abi.DealID, error) + GetState() interface{} +} + +type BalanceTable interface { + ForEach(cb func(address.Address, abi.TokenAmount) error) error + Get(key address.Address) (abi.TokenAmount, error) +} + +type DealStates interface { + ForEach(cb func(id abi.DealID, ds DealState) error) error + Get(id abi.DealID) (*DealState, bool, error) + + array() adt.Array + decode(*cbg.Deferred) (*DealState, error) +} + +type DealProposals interface { + ForEach(cb func(id abi.DealID, dp DealProposal) error) error + Get(id abi.DealID) (*DealProposal, bool, error) + + array() adt.Array + decode(*cbg.Deferred) (*DealProposal, error) +} + +type PublishStorageDealsParams = market0.PublishStorageDealsParams + +type PublishStorageDealsReturn interface { + DealIDs() ([]abi.DealID, error) + // Note that this index is based on the batch of deals that were published, NOT the DealID + IsDealValid(index uint64) (bool, error) +} + +func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStorageDealsReturn, error) { + av, err := actors.VersionForNetwork(nv) + if err != nil { + return nil, err + } + + switch av { + + case actors.Version0: + return decodePublishStorageDealsReturn0(b) + + case actors.Version2: + return decodePublishStorageDealsReturn2(b) + + case actors.Version3: + return decodePublishStorageDealsReturn3(b) + + case actors.Version4: + return decodePublishStorageDealsReturn4(b) + + case actors.Version5: + return decodePublishStorageDealsReturn5(b) + + case actors.Version6: + return decodePublishStorageDealsReturn6(b) + + case actors.Version7: + return decodePublishStorageDealsReturn7(b) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +type VerifyDealsForActivationParams = market0.VerifyDealsForActivationParams +type WithdrawBalanceParams = market0.WithdrawBalanceParams + +type ClientDealProposal = market0.ClientDealProposal + +type DealState struct { + SectorStartEpoch abi.ChainEpoch // -1 if not yet included in proven sector + LastUpdatedEpoch abi.ChainEpoch // -1 if deal state never updated + SlashEpoch abi.ChainEpoch // -1 if deal never slashed +} + +type DealProposal struct { + PieceCID cid.Cid + PieceSize abi.PaddedPieceSize + VerifiedDeal bool + Client address.Address + Provider address.Address + Label string + StartEpoch abi.ChainEpoch + EndEpoch abi.ChainEpoch + StoragePricePerEpoch abi.TokenAmount + ProviderCollateral abi.TokenAmount + ClientCollateral abi.TokenAmount +} + +type DealStateChanges struct { + Added []DealIDState + Modified []DealStateChange + Removed []DealIDState +} + +type DealIDState struct { + ID abi.DealID + Deal DealState +} + +// DealStateChange is a change in deal state from -> to +type DealStateChange struct { + ID abi.DealID + From *DealState + To *DealState +} + +type DealProposalChanges struct { + Added []ProposalIDState + Removed []ProposalIDState +} + +type ProposalIDState struct { + ID abi.DealID + Proposal DealProposal +} + +func EmptyDealState() *DealState { + return &DealState{ + SectorStartEpoch: -1, + SlashEpoch: -1, + LastUpdatedEpoch: -1, + } +} + +// returns the earned fees and pending fees for a given deal +func (deal DealProposal) GetDealFees(height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { + tf := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(deal.EndEpoch-deal.StartEpoch))) + + ef := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(height-deal.StartEpoch))) + if ef.LessThan(big.Zero()) { + ef = big.Zero() + } + + if ef.GreaterThan(tf) { + ef = tf + } + + return ef, big.Sub(tf, ef) +} diff --git a/pkg/types/specactors/builtin/market/state.go.template b/pkg/types/specactors/builtin/market/state.go.template new file mode 100644 index 0000000000..291fa4f631 --- /dev/null +++ b/pkg/types/specactors/builtin/market/state.go.template @@ -0,0 +1,269 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + types "github.com/filecoin-project/venus/pkg/types/internal" + + market{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/market" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + {{if (le .v 2)}} + ea, err := adt{{.v}}.MakeEmptyArray(store).Root() + if err != nil { + return nil, err + } + + em, err := adt{{.v}}.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *market{{.v}}.ConstructState(ea, em, em) + {{else}} + s, err := market{{.v}}.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + {{end}} + return &out, nil +} + +type state{{.v}} struct { + market{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state{{.v}}) BalancesChanged(otherState State) (bool, error) { + otherState{{.v}}, ok := otherState.(*state{{.v}}) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState{{.v}}.State.EscrowTable) || !s.State.LockedTable.Equals(otherState{{.v}}.State.LockedTable), nil +} + +func (s *state{{.v}}) StatesChanged(otherState State) (bool, error) { + otherState{{.v}}, ok := otherState.(*state{{.v}}) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState{{.v}}.State.States), nil +} + +func (s *state{{.v}}) States() (DealStates, error) { + stateArray, err := adt{{.v}}.AsArray(s.store, s.State.States{{if (ge .v 3)}}, market{{.v}}.StatesAmtBitwidth{{end}}) + if err != nil { + return nil, err + } + return &dealStates{{.v}}{stateArray}, nil +} + +func (s *state{{.v}}) ProposalsChanged(otherState State) (bool, error) { + otherState{{.v}}, ok := otherState.(*state{{.v}}) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState{{.v}}.State.Proposals), nil +} + +func (s *state{{.v}}) Proposals() (DealProposals, error) { + proposalArray, err := adt{{.v}}.AsArray(s.store, s.State.Proposals{{if (ge .v 3)}}, market{{.v}}.ProposalsAmtBitwidth{{end}}) + if err != nil { + return nil, err + } + return &dealProposals{{.v}}{proposalArray}, nil +} + +func (s *state{{.v}}) EscrowTable() (BalanceTable, error) { + bt, err := adt{{.v}}.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable{{.v}}{bt}, nil +} + +func (s *state{{.v}}) LockedTable() (BalanceTable, error) { + bt, err := adt{{.v}}.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable{{.v}}{bt}, nil +} + +func (s *state{{.v}}) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw{{if (ge .v 2)}}, _{{end}}, err := market{{.v}}.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state{{.v}}) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable{{.v}} struct { + *adt{{.v}}.BalanceTable +} + +func (bt *balanceTable{{.v}}) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt{{.v}}.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates{{.v}} struct { + adt.Array +} + +func (s *dealStates{{.v}}) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal{{.v}} market{{.v}}.DealState + found, err := s.Array.Get(uint64(dealID), &deal{{.v}}) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV{{.v}}DealState(deal{{.v}}) + return &deal, true, nil +} + +func (s *dealStates{{.v}}) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds{{.v}} market{{.v}}.DealState + return s.Array.ForEach(&ds{{.v}}, func(idx int64) error { + return cb(abi.DealID(idx), fromV{{.v}}DealState(ds{{.v}})) + }) +} + +func (s *dealStates{{.v}}) decode(val *cbg.Deferred) (*DealState, error) { + var ds{{.v}} market{{.v}}.DealState + if err := ds{{.v}}.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV{{.v}}DealState(ds{{.v}}) + return &ds, nil +} + +func (s *dealStates{{.v}}) array() adt.Array { + return s.Array +} + +func fromV{{.v}}DealState(v{{.v}} market{{.v}}.DealState) DealState { + return (DealState)(v{{.v}}) +} + +type dealProposals{{.v}} struct { + adt.Array +} + +func (s *dealProposals{{.v}}) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal{{.v}} market{{.v}}.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal{{.v}}) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV{{.v}}DealProposal(proposal{{.v}}) + return &proposal, true, nil +} + +func (s *dealProposals{{.v}}) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp{{.v}} market{{.v}}.DealProposal + return s.Array.ForEach(&dp{{.v}}, func(idx int64) error { + return cb(abi.DealID(idx), fromV{{.v}}DealProposal(dp{{.v}})) + }) +} + +func (s *dealProposals{{.v}}) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp{{.v}} market{{.v}}.DealProposal + if err := dp{{.v}}.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV{{.v}}DealProposal(dp{{.v}}) + return &dp, nil +} + +func (s *dealProposals{{.v}}) array() adt.Array { + return s.Array +} + +func fromV{{.v}}DealProposal(v{{.v}} market{{.v}}.DealProposal) DealProposal { + return (DealProposal)(v{{.v}}) +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn{{.v}})(nil) + +func decodePublishStorageDealsReturn{{.v}}(b []byte) (PublishStorageDealsReturn, error) { + var retval market{{.v}}.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn{{.v}}{retval}, nil +} + +type publishStorageDealsReturn{{.v}} struct { + market{{.v}}.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn{{.v}}) IsDealValid(index uint64) (bool, error) { + {{if (ge .v 6)}} + return r.ValidDeals.IsSet(index) + {{else}} + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + {{end}} +} + +func (r *publishStorageDealsReturn{{.v}}) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/pkg/types/specactors/builtin/market/v0.go b/pkg/types/specactors/builtin/market/v0.go new file mode 100644 index 0000000000..25319e5790 --- /dev/null +++ b/pkg/types/specactors/builtin/market/v0.go @@ -0,0 +1,260 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + types "github.com/filecoin-project/venus/pkg/types/internal" + + market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + + ea, err := adt0.MakeEmptyArray(store).Root() + if err != nil { + return nil, err + } + + em, err := adt0.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *market0.ConstructState(ea, em, em) + + return &out, nil +} + +type state0 struct { + market0.State + store adt.Store +} + +func (s *state0) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state0) BalancesChanged(otherState State) (bool, error) { + otherState0, ok := otherState.(*state0) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState0.State.EscrowTable) || !s.State.LockedTable.Equals(otherState0.State.LockedTable), nil +} + +func (s *state0) StatesChanged(otherState State) (bool, error) { + otherState0, ok := otherState.(*state0) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState0.State.States), nil +} + +func (s *state0) States() (DealStates, error) { + stateArray, err := adt0.AsArray(s.store, s.State.States) + if err != nil { + return nil, err + } + return &dealStates0{stateArray}, nil +} + +func (s *state0) ProposalsChanged(otherState State) (bool, error) { + otherState0, ok := otherState.(*state0) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState0.State.Proposals), nil +} + +func (s *state0) Proposals() (DealProposals, error) { + proposalArray, err := adt0.AsArray(s.store, s.State.Proposals) + if err != nil { + return nil, err + } + return &dealProposals0{proposalArray}, nil +} + +func (s *state0) EscrowTable() (BalanceTable, error) { + bt, err := adt0.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable0{bt}, nil +} + +func (s *state0) LockedTable() (BalanceTable, error) { + bt, err := adt0.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable0{bt}, nil +} + +func (s *state0) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, err := market0.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state0) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable0 struct { + *adt0.BalanceTable +} + +func (bt *balanceTable0) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt0.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates0 struct { + adt.Array +} + +func (s *dealStates0) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal0 market0.DealState + found, err := s.Array.Get(uint64(dealID), &deal0) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV0DealState(deal0) + return &deal, true, nil +} + +func (s *dealStates0) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds0 market0.DealState + return s.Array.ForEach(&ds0, func(idx int64) error { + return cb(abi.DealID(idx), fromV0DealState(ds0)) + }) +} + +func (s *dealStates0) decode(val *cbg.Deferred) (*DealState, error) { + var ds0 market0.DealState + if err := ds0.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV0DealState(ds0) + return &ds, nil +} + +func (s *dealStates0) array() adt.Array { + return s.Array +} + +func fromV0DealState(v0 market0.DealState) DealState { + return (DealState)(v0) +} + +type dealProposals0 struct { + adt.Array +} + +func (s *dealProposals0) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal0 market0.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal0) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV0DealProposal(proposal0) + return &proposal, true, nil +} + +func (s *dealProposals0) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp0 market0.DealProposal + return s.Array.ForEach(&dp0, func(idx int64) error { + return cb(abi.DealID(idx), fromV0DealProposal(dp0)) + }) +} + +func (s *dealProposals0) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp0 market0.DealProposal + if err := dp0.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV0DealProposal(dp0) + return &dp, nil +} + +func (s *dealProposals0) array() adt.Array { + return s.Array +} + +func fromV0DealProposal(v0 market0.DealProposal) DealProposal { + return (DealProposal)(v0) +} + +func (s *state0) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn0)(nil) + +func decodePublishStorageDealsReturn0(b []byte) (PublishStorageDealsReturn, error) { + var retval market0.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn0{retval}, nil +} + +type publishStorageDealsReturn0 struct { + market0.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn0) IsDealValid(index uint64) (bool, error) { + + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + +} + +func (r *publishStorageDealsReturn0) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/pkg/types/specactors/builtin/market/v2.go b/pkg/types/specactors/builtin/market/v2.go new file mode 100644 index 0000000000..39b4cb8d77 --- /dev/null +++ b/pkg/types/specactors/builtin/market/v2.go @@ -0,0 +1,260 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + types "github.com/filecoin-project/venus/pkg/types/internal" + + market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + + ea, err := adt2.MakeEmptyArray(store).Root() + if err != nil { + return nil, err + } + + em, err := adt2.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *market2.ConstructState(ea, em, em) + + return &out, nil +} + +type state2 struct { + market2.State + store adt.Store +} + +func (s *state2) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state2) BalancesChanged(otherState State) (bool, error) { + otherState2, ok := otherState.(*state2) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState2.State.EscrowTable) || !s.State.LockedTable.Equals(otherState2.State.LockedTable), nil +} + +func (s *state2) StatesChanged(otherState State) (bool, error) { + otherState2, ok := otherState.(*state2) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState2.State.States), nil +} + +func (s *state2) States() (DealStates, error) { + stateArray, err := adt2.AsArray(s.store, s.State.States) + if err != nil { + return nil, err + } + return &dealStates2{stateArray}, nil +} + +func (s *state2) ProposalsChanged(otherState State) (bool, error) { + otherState2, ok := otherState.(*state2) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState2.State.Proposals), nil +} + +func (s *state2) Proposals() (DealProposals, error) { + proposalArray, err := adt2.AsArray(s.store, s.State.Proposals) + if err != nil { + return nil, err + } + return &dealProposals2{proposalArray}, nil +} + +func (s *state2) EscrowTable() (BalanceTable, error) { + bt, err := adt2.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable2{bt}, nil +} + +func (s *state2) LockedTable() (BalanceTable, error) { + bt, err := adt2.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable2{bt}, nil +} + +func (s *state2) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market2.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state2) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable2 struct { + *adt2.BalanceTable +} + +func (bt *balanceTable2) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt2.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates2 struct { + adt.Array +} + +func (s *dealStates2) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal2 market2.DealState + found, err := s.Array.Get(uint64(dealID), &deal2) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV2DealState(deal2) + return &deal, true, nil +} + +func (s *dealStates2) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds2 market2.DealState + return s.Array.ForEach(&ds2, func(idx int64) error { + return cb(abi.DealID(idx), fromV2DealState(ds2)) + }) +} + +func (s *dealStates2) decode(val *cbg.Deferred) (*DealState, error) { + var ds2 market2.DealState + if err := ds2.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV2DealState(ds2) + return &ds, nil +} + +func (s *dealStates2) array() adt.Array { + return s.Array +} + +func fromV2DealState(v2 market2.DealState) DealState { + return (DealState)(v2) +} + +type dealProposals2 struct { + adt.Array +} + +func (s *dealProposals2) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal2 market2.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal2) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV2DealProposal(proposal2) + return &proposal, true, nil +} + +func (s *dealProposals2) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp2 market2.DealProposal + return s.Array.ForEach(&dp2, func(idx int64) error { + return cb(abi.DealID(idx), fromV2DealProposal(dp2)) + }) +} + +func (s *dealProposals2) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp2 market2.DealProposal + if err := dp2.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV2DealProposal(dp2) + return &dp, nil +} + +func (s *dealProposals2) array() adt.Array { + return s.Array +} + +func fromV2DealProposal(v2 market2.DealProposal) DealProposal { + return (DealProposal)(v2) +} + +func (s *state2) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn2)(nil) + +func decodePublishStorageDealsReturn2(b []byte) (PublishStorageDealsReturn, error) { + var retval market2.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn2{retval}, nil +} + +type publishStorageDealsReturn2 struct { + market2.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn2) IsDealValid(index uint64) (bool, error) { + + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + +} + +func (r *publishStorageDealsReturn2) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/pkg/types/specactors/builtin/market/v3.go b/pkg/types/specactors/builtin/market/v3.go new file mode 100644 index 0000000000..7aa0916583 --- /dev/null +++ b/pkg/types/specactors/builtin/market/v3.go @@ -0,0 +1,255 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + types "github.com/filecoin-project/venus/pkg/types/internal" + + market3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/market" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + + s, err := market3.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state3 struct { + market3.State + store adt.Store +} + +func (s *state3) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state3) BalancesChanged(otherState State) (bool, error) { + otherState3, ok := otherState.(*state3) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState3.State.EscrowTable) || !s.State.LockedTable.Equals(otherState3.State.LockedTable), nil +} + +func (s *state3) StatesChanged(otherState State) (bool, error) { + otherState3, ok := otherState.(*state3) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState3.State.States), nil +} + +func (s *state3) States() (DealStates, error) { + stateArray, err := adt3.AsArray(s.store, s.State.States, market3.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates3{stateArray}, nil +} + +func (s *state3) ProposalsChanged(otherState State) (bool, error) { + otherState3, ok := otherState.(*state3) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState3.State.Proposals), nil +} + +func (s *state3) Proposals() (DealProposals, error) { + proposalArray, err := adt3.AsArray(s.store, s.State.Proposals, market3.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals3{proposalArray}, nil +} + +func (s *state3) EscrowTable() (BalanceTable, error) { + bt, err := adt3.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable3{bt}, nil +} + +func (s *state3) LockedTable() (BalanceTable, error) { + bt, err := adt3.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable3{bt}, nil +} + +func (s *state3) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market3.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state3) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable3 struct { + *adt3.BalanceTable +} + +func (bt *balanceTable3) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt3.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates3 struct { + adt.Array +} + +func (s *dealStates3) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal3 market3.DealState + found, err := s.Array.Get(uint64(dealID), &deal3) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV3DealState(deal3) + return &deal, true, nil +} + +func (s *dealStates3) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds3 market3.DealState + return s.Array.ForEach(&ds3, func(idx int64) error { + return cb(abi.DealID(idx), fromV3DealState(ds3)) + }) +} + +func (s *dealStates3) decode(val *cbg.Deferred) (*DealState, error) { + var ds3 market3.DealState + if err := ds3.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV3DealState(ds3) + return &ds, nil +} + +func (s *dealStates3) array() adt.Array { + return s.Array +} + +func fromV3DealState(v3 market3.DealState) DealState { + return (DealState)(v3) +} + +type dealProposals3 struct { + adt.Array +} + +func (s *dealProposals3) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal3 market3.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal3) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV3DealProposal(proposal3) + return &proposal, true, nil +} + +func (s *dealProposals3) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp3 market3.DealProposal + return s.Array.ForEach(&dp3, func(idx int64) error { + return cb(abi.DealID(idx), fromV3DealProposal(dp3)) + }) +} + +func (s *dealProposals3) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp3 market3.DealProposal + if err := dp3.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV3DealProposal(dp3) + return &dp, nil +} + +func (s *dealProposals3) array() adt.Array { + return s.Array +} + +func fromV3DealProposal(v3 market3.DealProposal) DealProposal { + return (DealProposal)(v3) +} + +func (s *state3) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn3)(nil) + +func decodePublishStorageDealsReturn3(b []byte) (PublishStorageDealsReturn, error) { + var retval market3.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn3{retval}, nil +} + +type publishStorageDealsReturn3 struct { + market3.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn3) IsDealValid(index uint64) (bool, error) { + + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + +} + +func (r *publishStorageDealsReturn3) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/pkg/types/specactors/builtin/market/v4.go b/pkg/types/specactors/builtin/market/v4.go new file mode 100644 index 0000000000..8256396d53 --- /dev/null +++ b/pkg/types/specactors/builtin/market/v4.go @@ -0,0 +1,255 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + types "github.com/filecoin-project/venus/pkg/types/internal" + + market4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/market" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + + s, err := market4.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state4 struct { + market4.State + store adt.Store +} + +func (s *state4) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state4) BalancesChanged(otherState State) (bool, error) { + otherState4, ok := otherState.(*state4) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState4.State.EscrowTable) || !s.State.LockedTable.Equals(otherState4.State.LockedTable), nil +} + +func (s *state4) StatesChanged(otherState State) (bool, error) { + otherState4, ok := otherState.(*state4) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState4.State.States), nil +} + +func (s *state4) States() (DealStates, error) { + stateArray, err := adt4.AsArray(s.store, s.State.States, market4.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates4{stateArray}, nil +} + +func (s *state4) ProposalsChanged(otherState State) (bool, error) { + otherState4, ok := otherState.(*state4) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState4.State.Proposals), nil +} + +func (s *state4) Proposals() (DealProposals, error) { + proposalArray, err := adt4.AsArray(s.store, s.State.Proposals, market4.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals4{proposalArray}, nil +} + +func (s *state4) EscrowTable() (BalanceTable, error) { + bt, err := adt4.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable4{bt}, nil +} + +func (s *state4) LockedTable() (BalanceTable, error) { + bt, err := adt4.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable4{bt}, nil +} + +func (s *state4) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market4.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state4) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable4 struct { + *adt4.BalanceTable +} + +func (bt *balanceTable4) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt4.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates4 struct { + adt.Array +} + +func (s *dealStates4) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal4 market4.DealState + found, err := s.Array.Get(uint64(dealID), &deal4) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV4DealState(deal4) + return &deal, true, nil +} + +func (s *dealStates4) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds4 market4.DealState + return s.Array.ForEach(&ds4, func(idx int64) error { + return cb(abi.DealID(idx), fromV4DealState(ds4)) + }) +} + +func (s *dealStates4) decode(val *cbg.Deferred) (*DealState, error) { + var ds4 market4.DealState + if err := ds4.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV4DealState(ds4) + return &ds, nil +} + +func (s *dealStates4) array() adt.Array { + return s.Array +} + +func fromV4DealState(v4 market4.DealState) DealState { + return (DealState)(v4) +} + +type dealProposals4 struct { + adt.Array +} + +func (s *dealProposals4) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal4 market4.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal4) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV4DealProposal(proposal4) + return &proposal, true, nil +} + +func (s *dealProposals4) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp4 market4.DealProposal + return s.Array.ForEach(&dp4, func(idx int64) error { + return cb(abi.DealID(idx), fromV4DealProposal(dp4)) + }) +} + +func (s *dealProposals4) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp4 market4.DealProposal + if err := dp4.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV4DealProposal(dp4) + return &dp, nil +} + +func (s *dealProposals4) array() adt.Array { + return s.Array +} + +func fromV4DealProposal(v4 market4.DealProposal) DealProposal { + return (DealProposal)(v4) +} + +func (s *state4) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn4)(nil) + +func decodePublishStorageDealsReturn4(b []byte) (PublishStorageDealsReturn, error) { + var retval market4.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn4{retval}, nil +} + +type publishStorageDealsReturn4 struct { + market4.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn4) IsDealValid(index uint64) (bool, error) { + + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + +} + +func (r *publishStorageDealsReturn4) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/pkg/types/specactors/builtin/market/v5.go b/pkg/types/specactors/builtin/market/v5.go new file mode 100644 index 0000000000..d1440322a6 --- /dev/null +++ b/pkg/types/specactors/builtin/market/v5.go @@ -0,0 +1,255 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + types "github.com/filecoin-project/venus/pkg/types/internal" + + market5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/market" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + + s, err := market5.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state5 struct { + market5.State + store adt.Store +} + +func (s *state5) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state5) BalancesChanged(otherState State) (bool, error) { + otherState5, ok := otherState.(*state5) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState5.State.EscrowTable) || !s.State.LockedTable.Equals(otherState5.State.LockedTable), nil +} + +func (s *state5) StatesChanged(otherState State) (bool, error) { + otherState5, ok := otherState.(*state5) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState5.State.States), nil +} + +func (s *state5) States() (DealStates, error) { + stateArray, err := adt5.AsArray(s.store, s.State.States, market5.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates5{stateArray}, nil +} + +func (s *state5) ProposalsChanged(otherState State) (bool, error) { + otherState5, ok := otherState.(*state5) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState5.State.Proposals), nil +} + +func (s *state5) Proposals() (DealProposals, error) { + proposalArray, err := adt5.AsArray(s.store, s.State.Proposals, market5.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals5{proposalArray}, nil +} + +func (s *state5) EscrowTable() (BalanceTable, error) { + bt, err := adt5.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable5{bt}, nil +} + +func (s *state5) LockedTable() (BalanceTable, error) { + bt, err := adt5.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable5{bt}, nil +} + +func (s *state5) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market5.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state5) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable5 struct { + *adt5.BalanceTable +} + +func (bt *balanceTable5) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt5.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates5 struct { + adt.Array +} + +func (s *dealStates5) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal5 market5.DealState + found, err := s.Array.Get(uint64(dealID), &deal5) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV5DealState(deal5) + return &deal, true, nil +} + +func (s *dealStates5) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds5 market5.DealState + return s.Array.ForEach(&ds5, func(idx int64) error { + return cb(abi.DealID(idx), fromV5DealState(ds5)) + }) +} + +func (s *dealStates5) decode(val *cbg.Deferred) (*DealState, error) { + var ds5 market5.DealState + if err := ds5.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV5DealState(ds5) + return &ds, nil +} + +func (s *dealStates5) array() adt.Array { + return s.Array +} + +func fromV5DealState(v5 market5.DealState) DealState { + return (DealState)(v5) +} + +type dealProposals5 struct { + adt.Array +} + +func (s *dealProposals5) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal5 market5.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal5) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV5DealProposal(proposal5) + return &proposal, true, nil +} + +func (s *dealProposals5) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp5 market5.DealProposal + return s.Array.ForEach(&dp5, func(idx int64) error { + return cb(abi.DealID(idx), fromV5DealProposal(dp5)) + }) +} + +func (s *dealProposals5) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp5 market5.DealProposal + if err := dp5.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV5DealProposal(dp5) + return &dp, nil +} + +func (s *dealProposals5) array() adt.Array { + return s.Array +} + +func fromV5DealProposal(v5 market5.DealProposal) DealProposal { + return (DealProposal)(v5) +} + +func (s *state5) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn5)(nil) + +func decodePublishStorageDealsReturn5(b []byte) (PublishStorageDealsReturn, error) { + var retval market5.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn5{retval}, nil +} + +type publishStorageDealsReturn5 struct { + market5.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn5) IsDealValid(index uint64) (bool, error) { + + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + +} + +func (r *publishStorageDealsReturn5) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/pkg/types/specactors/builtin/market/v6.go b/pkg/types/specactors/builtin/market/v6.go new file mode 100644 index 0000000000..4bb5ff9fe8 --- /dev/null +++ b/pkg/types/specactors/builtin/market/v6.go @@ -0,0 +1,254 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + types "github.com/filecoin-project/venus/pkg/types/internal" + + market6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/market" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + + s, err := market6.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state6 struct { + market6.State + store adt.Store +} + +func (s *state6) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state6) BalancesChanged(otherState State) (bool, error) { + otherState6, ok := otherState.(*state6) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState6.State.EscrowTable) || !s.State.LockedTable.Equals(otherState6.State.LockedTable), nil +} + +func (s *state6) StatesChanged(otherState State) (bool, error) { + otherState6, ok := otherState.(*state6) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState6.State.States), nil +} + +func (s *state6) States() (DealStates, error) { + stateArray, err := adt6.AsArray(s.store, s.State.States, market6.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates6{stateArray}, nil +} + +func (s *state6) ProposalsChanged(otherState State) (bool, error) { + otherState6, ok := otherState.(*state6) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState6.State.Proposals), nil +} + +func (s *state6) Proposals() (DealProposals, error) { + proposalArray, err := adt6.AsArray(s.store, s.State.Proposals, market6.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals6{proposalArray}, nil +} + +func (s *state6) EscrowTable() (BalanceTable, error) { + bt, err := adt6.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable6{bt}, nil +} + +func (s *state6) LockedTable() (BalanceTable, error) { + bt, err := adt6.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable6{bt}, nil +} + +func (s *state6) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market6.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state6) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable6 struct { + *adt6.BalanceTable +} + +func (bt *balanceTable6) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt6.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates6 struct { + adt.Array +} + +func (s *dealStates6) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal6 market6.DealState + found, err := s.Array.Get(uint64(dealID), &deal6) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV6DealState(deal6) + return &deal, true, nil +} + +func (s *dealStates6) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds6 market6.DealState + return s.Array.ForEach(&ds6, func(idx int64) error { + return cb(abi.DealID(idx), fromV6DealState(ds6)) + }) +} + +func (s *dealStates6) decode(val *cbg.Deferred) (*DealState, error) { + var ds6 market6.DealState + if err := ds6.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV6DealState(ds6) + return &ds, nil +} + +func (s *dealStates6) array() adt.Array { + return s.Array +} + +func fromV6DealState(v6 market6.DealState) DealState { + return (DealState)(v6) +} + +type dealProposals6 struct { + adt.Array +} + +func (s *dealProposals6) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal6 market6.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal6) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV6DealProposal(proposal6) + return &proposal, true, nil +} + +func (s *dealProposals6) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp6 market6.DealProposal + return s.Array.ForEach(&dp6, func(idx int64) error { + return cb(abi.DealID(idx), fromV6DealProposal(dp6)) + }) +} + +func (s *dealProposals6) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp6 market6.DealProposal + if err := dp6.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV6DealProposal(dp6) + return &dp, nil +} + +func (s *dealProposals6) array() adt.Array { + return s.Array +} + +func fromV6DealProposal(v6 market6.DealProposal) DealProposal { + return (DealProposal)(v6) +} + +func (s *state6) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn6)(nil) + +func decodePublishStorageDealsReturn6(b []byte) (PublishStorageDealsReturn, error) { + var retval market6.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn6{retval}, nil +} + +type publishStorageDealsReturn6 struct { + market6.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn6) IsDealValid(index uint64) (bool, error) { + + return r.ValidDeals.IsSet(index) + +} + +func (r *publishStorageDealsReturn6) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/pkg/types/specactors/builtin/market/v7.go b/pkg/types/specactors/builtin/market/v7.go new file mode 100644 index 0000000000..a9d32383be --- /dev/null +++ b/pkg/types/specactors/builtin/market/v7.go @@ -0,0 +1,254 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + types "github.com/filecoin-project/venus/pkg/types/internal" + + market7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/market" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + + s, err := market7.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state7 struct { + market7.State + store adt.Store +} + +func (s *state7) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state7) BalancesChanged(otherState State) (bool, error) { + otherState7, ok := otherState.(*state7) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState7.State.EscrowTable) || !s.State.LockedTable.Equals(otherState7.State.LockedTable), nil +} + +func (s *state7) StatesChanged(otherState State) (bool, error) { + otherState7, ok := otherState.(*state7) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState7.State.States), nil +} + +func (s *state7) States() (DealStates, error) { + stateArray, err := adt7.AsArray(s.store, s.State.States, market7.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates7{stateArray}, nil +} + +func (s *state7) ProposalsChanged(otherState State) (bool, error) { + otherState7, ok := otherState.(*state7) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState7.State.Proposals), nil +} + +func (s *state7) Proposals() (DealProposals, error) { + proposalArray, err := adt7.AsArray(s.store, s.State.Proposals, market7.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals7{proposalArray}, nil +} + +func (s *state7) EscrowTable() (BalanceTable, error) { + bt, err := adt7.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable7{bt}, nil +} + +func (s *state7) LockedTable() (BalanceTable, error) { + bt, err := adt7.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable7{bt}, nil +} + +func (s *state7) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market7.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state7) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable7 struct { + *adt7.BalanceTable +} + +func (bt *balanceTable7) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt7.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates7 struct { + adt.Array +} + +func (s *dealStates7) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal7 market7.DealState + found, err := s.Array.Get(uint64(dealID), &deal7) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV7DealState(deal7) + return &deal, true, nil +} + +func (s *dealStates7) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds7 market7.DealState + return s.Array.ForEach(&ds7, func(idx int64) error { + return cb(abi.DealID(idx), fromV7DealState(ds7)) + }) +} + +func (s *dealStates7) decode(val *cbg.Deferred) (*DealState, error) { + var ds7 market7.DealState + if err := ds7.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV7DealState(ds7) + return &ds, nil +} + +func (s *dealStates7) array() adt.Array { + return s.Array +} + +func fromV7DealState(v7 market7.DealState) DealState { + return (DealState)(v7) +} + +type dealProposals7 struct { + adt.Array +} + +func (s *dealProposals7) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal7 market7.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal7) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV7DealProposal(proposal7) + return &proposal, true, nil +} + +func (s *dealProposals7) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp7 market7.DealProposal + return s.Array.ForEach(&dp7, func(idx int64) error { + return cb(abi.DealID(idx), fromV7DealProposal(dp7)) + }) +} + +func (s *dealProposals7) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp7 market7.DealProposal + if err := dp7.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV7DealProposal(dp7) + return &dp, nil +} + +func (s *dealProposals7) array() adt.Array { + return s.Array +} + +func fromV7DealProposal(v7 market7.DealProposal) DealProposal { + return (DealProposal)(v7) +} + +func (s *state7) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn7)(nil) + +func decodePublishStorageDealsReturn7(b []byte) (PublishStorageDealsReturn, error) { + var retval market7.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn7{retval}, nil +} + +type publishStorageDealsReturn7 struct { + market7.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn7) IsDealValid(index uint64) (bool, error) { + + return r.ValidDeals.IsSet(index) + +} + +func (r *publishStorageDealsReturn7) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/pkg/types/specactors/builtin/miner/actor.go.template b/pkg/types/specactors/builtin/miner/actor.go.template new file mode 100644 index 0000000000..b58e5d82d3 --- /dev/null +++ b/pkg/types/specactors/builtin/miner/actor.go.template @@ -0,0 +1,325 @@ +// FETCHED FROM LOTUS: builtin/miner/actor.go.template + +package miner + +import ( + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/go-state-types/dline" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" + + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" + miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}} +} + +var Methods = builtin{{.latestVersion}}.MethodsMiner + +// Unchanged between v0, v2, v3, v4, and v5 actors +var WPoStProvingPeriod = miner0.WPoStProvingPeriod +var WPoStPeriodDeadlines = miner0.WPoStPeriodDeadlines +var WPoStChallengeWindow = miner0.WPoStChallengeWindow +var WPoStChallengeLookback = miner0.WPoStChallengeLookback +var FaultDeclarationCutoff = miner0.FaultDeclarationCutoff + +const MinSectorExpiration = miner0.MinSectorExpiration + +// Not used / checked in v0 +// TODO: Abstract over network versions +var DeclarationsMax = miner2.DeclarationsMax +var AddressedSectorsMax = miner2.AddressedSectorsMax + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.StorageMinerActorCodeID: + return load{{.}}(store, act.Head) +{{end}} +} + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.StorageMinerActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + // Total available balance to spend. + AvailableBalance(abi.TokenAmount) (abi.TokenAmount, error) + // Funds that will vest by the given epoch. + VestedFunds(abi.ChainEpoch) (abi.TokenAmount, error) + // Funds locked for various reasons. + LockedFunds() (LockedFunds, error) + FeeDebt() (abi.TokenAmount, error) + + GetSector(abi.SectorNumber) (*SectorOnChainInfo, error) + FindSector(abi.SectorNumber) (*SectorLocation, error) + GetSectorExpiration(abi.SectorNumber) (*SectorExpiration, error) + GetPrecommittedSector(abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) + ForEachPrecommittedSector(func(SectorPreCommitOnChainInfo) error) error + LoadSectors(sectorNos *bitfield.BitField) ([]*SectorOnChainInfo, error) + NumLiveSectors() (uint64, error) + IsAllocated(abi.SectorNumber) (bool, error) + // UnallocatedSectorNumbers returns up to count unallocated sector numbers (or less than + // count if there aren't enough). + UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) + GetAllocatedSectors() (*bitfield.BitField, error) + + // Note that ProvingPeriodStart is deprecated and will be renamed / removed in a future version of actors + GetProvingPeriodStart() (abi.ChainEpoch, error) + // Testing only + EraseAllUnproven() error + + LoadDeadline(idx uint64) (Deadline, error) + ForEachDeadline(cb func(idx uint64, dl Deadline) error) error + NumDeadlines() (uint64, error) + DeadlinesChanged(State) (bool, error) + + Info() (MinerInfo, error) + MinerInfoChanged(State) (bool, error) + + DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) + DeadlineCronActive() (bool, error) + + // Diff helpers. Used by Diff* functions internally. + sectors() (adt.Array, error) + decodeSectorOnChainInfo(*cbg.Deferred) (SectorOnChainInfo, error) + precommits() (adt.Map, error) + decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (SectorPreCommitOnChainInfo, error) + GetState() interface{} +} + +type Deadline interface { + LoadPartition(idx uint64) (Partition, error) + ForEachPartition(cb func(idx uint64, part Partition) error) error + PartitionsPoSted() (bitfield.BitField, error) + + PartitionsChanged(Deadline) (bool, error) + DisputableProofCount() (uint64, error) +} + +type Partition interface { + // AllSectors returns all sector numbers in this partition, including faulty, unproven, and terminated sectors + AllSectors() (bitfield.BitField, error) + + // Subset of sectors detected/declared faulty and not yet recovered (excl. from PoSt). + // Faults โˆฉ Terminated = โˆ… + FaultySectors() (bitfield.BitField, error) + + // Subset of faulty sectors expected to recover on next PoSt + // Recoveries โˆฉ Terminated = โˆ… + RecoveringSectors() (bitfield.BitField, error) + + // Live sectors are those that are not terminated (but may be faulty). + LiveSectors() (bitfield.BitField, error) + + // Active sectors are those that are neither terminated nor faulty nor unproven, i.e. actively contributing power. + ActiveSectors() (bitfield.BitField, error) + + // Unproven sectors in this partition. This bitfield will be cleared on + // a successful window post (or at the end of the partition's next + // deadline). At that time, any still unproven sectors will be added to + // the faulty sector bitfield. + UnprovenSectors() (bitfield.BitField, error) +} + +type SectorOnChainInfo struct { + SectorNumber abi.SectorNumber + SealProof abi.RegisteredSealProof + SealedCID cid.Cid + DealIDs []abi.DealID + Activation abi.ChainEpoch + Expiration abi.ChainEpoch + DealWeight abi.DealWeight + VerifiedDealWeight abi.DealWeight + InitialPledge abi.TokenAmount + ExpectedDayReward abi.TokenAmount + ExpectedStoragePledge abi.TokenAmount + SectorKeyCID *cid.Cid +} + +type SectorPreCommitInfo = miner0.SectorPreCommitInfo + +type SectorPreCommitOnChainInfo struct { + Info SectorPreCommitInfo + PreCommitDeposit abi.TokenAmount + PreCommitEpoch abi.ChainEpoch + DealWeight abi.DealWeight + VerifiedDealWeight abi.DealWeight +} + +type PoStPartition = miner0.PoStPartition +type RecoveryDeclaration = miner0.RecoveryDeclaration +type FaultDeclaration = miner0.FaultDeclaration + +// Params +type DeclareFaultsParams = miner0.DeclareFaultsParams +type DeclareFaultsRecoveredParams = miner0.DeclareFaultsRecoveredParams +type SubmitWindowedPoStParams = miner0.SubmitWindowedPoStParams +type ProveCommitSectorParams = miner0.ProveCommitSectorParams +type DisputeWindowedPoStParams = miner3.DisputeWindowedPoStParams +type ProveCommitAggregateParams = miner5.ProveCommitAggregateParams + +func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.RegisteredPoStProof) (abi.RegisteredSealProof, error) { + // We added support for the new proofs in network version 7, and removed support for the old + // ones in network version 8. + if nver < network.Version7 { + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredSealProof_StackedDrg2KiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredSealProof_StackedDrg8MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredSealProof_StackedDrg512MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredSealProof_StackedDrg32GiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredSealProof_StackedDrg64GiBV1, nil + default: + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + } + } + + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredSealProof_StackedDrg2KiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredSealProof_StackedDrg8MiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredSealProof_StackedDrg512MiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredSealProof_StackedDrg32GiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil + default: + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + } +} + +func WinningPoStProofTypeFromWindowPoStProofType(nver network.Version, proof abi.RegisteredPoStProof) (abi.RegisteredPoStProof, error) { + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning2KiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning8MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning512MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning32GiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning64GiBV1, nil + default: + return -1, xerrors.Errorf("unknown proof type %d", proof) + } +} + +type MinerInfo struct { + Owner address.Address // Must be an ID-address. + Worker address.Address // Must be an ID-address. + NewWorker address.Address // Must be an ID-address. + ControlAddresses []address.Address // Must be an ID-addresses. + WorkerChangeEpoch abi.ChainEpoch + PeerId *peer.ID + Multiaddrs []abi.Multiaddrs + WindowPoStProofType abi.RegisteredPoStProof + SectorSize abi.SectorSize + WindowPoStPartitionSectors uint64 + ConsensusFaultElapsed abi.ChainEpoch +} + +func (mi MinerInfo) IsController(addr address.Address) bool { + if addr == mi.Owner || addr == mi.Worker { + return true + } + + for _, ca := range mi.ControlAddresses { + if addr == ca { + return true + } + } + + return false +} + +type SectorExpiration struct { + OnTime abi.ChainEpoch + + // non-zero if sector is faulty, epoch at which it will be permanently + // removed if it doesn't recover + Early abi.ChainEpoch +} + +type SectorLocation struct { + Deadline uint64 + Partition uint64 +} + +type SectorChanges struct { + Added []SectorOnChainInfo + Extended []SectorExtensions + Removed []SectorOnChainInfo +} + +type SectorExtensions struct { + From SectorOnChainInfo + To SectorOnChainInfo +} + +type PreCommitChanges struct { + Added []SectorPreCommitOnChainInfo + Removed []SectorPreCommitOnChainInfo +} + +type LockedFunds struct { + VestingFunds abi.TokenAmount + InitialPledgeRequirement abi.TokenAmount + PreCommitDeposits abi.TokenAmount +} + +func (lf LockedFunds) TotalLockedFunds() abi.TokenAmount { + return big.Add(lf.VestingFunds, big.Add(lf.InitialPledgeRequirement, lf.PreCommitDeposits)) +} diff --git a/pkg/types/specactors/builtin/miner/diff.go b/pkg/types/specactors/builtin/miner/diff.go new file mode 100644 index 0000000000..617090976a --- /dev/null +++ b/pkg/types/specactors/builtin/miner/diff.go @@ -0,0 +1,127 @@ +package miner + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + cbg "github.com/whyrusleeping/cbor-gen" +) + +func DiffPreCommits(pre, cur State) (*PreCommitChanges, error) { + results := new(PreCommitChanges) + + prep, err := pre.precommits() + if err != nil { + return nil, err + } + + curp, err := cur.precommits() + if err != nil { + return nil, err + } + + err = adt.DiffAdtMap(prep, curp, &preCommitDiffer{results, pre, cur}) + if err != nil { + return nil, err + } + + return results, nil +} + +type preCommitDiffer struct { + Results *PreCommitChanges + pre, after State +} + +func (m *preCommitDiffer) AsKey(key string) (abi.Keyer, error) { + sector, err := abi.ParseUIntKey(key) + if err != nil { + return nil, err + } + return abi.UIntKey(sector), nil +} + +func (m *preCommitDiffer) Add(key string, val *cbg.Deferred) error { + sp, err := m.after.decodeSectorPreCommitOnChainInfo(val) + if err != nil { + return err + } + m.Results.Added = append(m.Results.Added, sp) + return nil +} + +func (m *preCommitDiffer) Modify(key string, from, to *cbg.Deferred) error { + return nil +} + +func (m *preCommitDiffer) Remove(key string, val *cbg.Deferred) error { + sp, err := m.pre.decodeSectorPreCommitOnChainInfo(val) + if err != nil { + return err + } + m.Results.Removed = append(m.Results.Removed, sp) + return nil +} + +func DiffSectors(pre, cur State) (*SectorChanges, error) { + results := new(SectorChanges) + + pres, err := pre.sectors() + if err != nil { + return nil, err + } + + curs, err := cur.sectors() + if err != nil { + return nil, err + } + + err = adt.DiffAdtArray(pres, curs, §orDiffer{results, pre, cur}) + if err != nil { + return nil, err + } + + return results, nil +} + +type sectorDiffer struct { + Results *SectorChanges + pre, after State +} + +func (m *sectorDiffer) Add(key uint64, val *cbg.Deferred) error { + si, err := m.after.decodeSectorOnChainInfo(val) + if err != nil { + return err + } + m.Results.Added = append(m.Results.Added, si) + return nil +} + +func (m *sectorDiffer) Modify(key uint64, from, to *cbg.Deferred) error { + siFrom, err := m.pre.decodeSectorOnChainInfo(from) + if err != nil { + return err + } + + siTo, err := m.after.decodeSectorOnChainInfo(to) + if err != nil { + return err + } + + if siFrom.Expiration != siTo.Expiration { + m.Results.Extended = append(m.Results.Extended, SectorExtensions{ + From: siFrom, + To: siTo, + }) + } + return nil +} + +func (m *sectorDiffer) Remove(key uint64, val *cbg.Deferred) error { + si, err := m.pre.decodeSectorOnChainInfo(val) + if err != nil { + return err + } + m.Results.Removed = append(m.Results.Removed, si) + return nil +} diff --git a/pkg/types/specactors/builtin/miner/diff_deadlines.go b/pkg/types/specactors/builtin/miner/diff_deadlines.go new file mode 100644 index 0000000000..7d686ece5b --- /dev/null +++ b/pkg/types/specactors/builtin/miner/diff_deadlines.go @@ -0,0 +1,176 @@ +package miner + +import ( + "errors" + + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/exitcode" +) + +type DeadlinesDiff map[uint64]DeadlineDiff + +func DiffDeadlines(pre, cur State) (DeadlinesDiff, error) { + changed, err := pre.DeadlinesChanged(cur) + if err != nil { + return nil, err + } + if !changed { + return nil, nil + } + + dlDiff := make(DeadlinesDiff) + if err := pre.ForEachDeadline(func(idx uint64, preDl Deadline) error { + curDl, err := cur.LoadDeadline(idx) + if err != nil { + return err + } + + diff, err := DiffDeadline(preDl, curDl) + if err != nil { + return err + } + + dlDiff[idx] = diff + return nil + }); err != nil { + return nil, err + } + return dlDiff, nil +} + +type DeadlineDiff map[uint64]*PartitionDiff + +func DiffDeadline(pre, cur Deadline) (DeadlineDiff, error) { + changed, err := pre.PartitionsChanged(cur) + if err != nil { + return nil, err + } + if !changed { + return nil, nil + } + + partDiff := make(DeadlineDiff) + if err := pre.ForEachPartition(func(idx uint64, prePart Partition) error { + // try loading current partition at this index + curPart, err := cur.LoadPartition(idx) + if err != nil { + if errors.Is(err, exitcode.ErrNotFound) { + // TODO correctness? + return nil // the partition was removed. + } + return err + } + + // compare it with the previous partition + diff, err := DiffPartition(prePart, curPart) + if err != nil { + return err + } + + partDiff[idx] = diff + return nil + }); err != nil { + return nil, err + } + + // all previous partitions have been walked. + // all partitions in cur and not in prev are new... can they be faulty already? + // TODO is this correct? + if err := cur.ForEachPartition(func(idx uint64, curPart Partition) error { + if _, found := partDiff[idx]; found { + return nil + } + faults, err := curPart.FaultySectors() + if err != nil { + return err + } + recovering, err := curPart.RecoveringSectors() + if err != nil { + return err + } + partDiff[idx] = &PartitionDiff{ + Removed: bitfield.New(), + Recovered: bitfield.New(), + Faulted: faults, + Recovering: recovering, + } + + return nil + }); err != nil { + return nil, err + } + + return partDiff, nil +} + +type PartitionDiff struct { + Removed bitfield.BitField + Recovered bitfield.BitField + Faulted bitfield.BitField + Recovering bitfield.BitField +} + +func DiffPartition(pre, cur Partition) (*PartitionDiff, error) { + prevLiveSectors, err := pre.LiveSectors() + if err != nil { + return nil, err + } + curLiveSectors, err := cur.LiveSectors() + if err != nil { + return nil, err + } + + removed, err := bitfield.SubtractBitField(prevLiveSectors, curLiveSectors) + if err != nil { + return nil, err + } + + prevRecoveries, err := pre.RecoveringSectors() + if err != nil { + return nil, err + } + + curRecoveries, err := cur.RecoveringSectors() + if err != nil { + return nil, err + } + + recovering, err := bitfield.SubtractBitField(curRecoveries, prevRecoveries) + if err != nil { + return nil, err + } + + prevFaults, err := pre.FaultySectors() + if err != nil { + return nil, err + } + + curFaults, err := cur.FaultySectors() + if err != nil { + return nil, err + } + + faulted, err := bitfield.SubtractBitField(curFaults, prevFaults) + if err != nil { + return nil, err + } + + // all current good sectors + curActiveSectors, err := cur.ActiveSectors() + if err != nil { + return nil, err + } + + // sectors that were previously fault and are now currently active are considered recovered. + recovered, err := bitfield.IntersectBitField(prevFaults, curActiveSectors) + if err != nil { + return nil, err + } + + return &PartitionDiff{ + Removed: removed, + Recovered: recovered, + Faulted: faulted, + Recovering: recovering, + }, nil +} diff --git a/pkg/types/specactors/builtin/miner/miner.go b/pkg/types/specactors/builtin/miner/miner.go new file mode 100644 index 0000000000..8233c8669a --- /dev/null +++ b/pkg/types/specactors/builtin/miner/miner.go @@ -0,0 +1,415 @@ +// FETCHED FROM LOTUS: builtin/miner/actor.go.template + +package miner + +import ( + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/go-state-types/dline" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" + + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" + miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + +) + +func init() { + + builtin.RegisterActorState(builtin0.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) + +} + +var Methods = builtin7.MethodsMiner + +// Unchanged between v0, v2, v3, v4, and v5 actors +var WPoStProvingPeriod = miner0.WPoStProvingPeriod +var WPoStPeriodDeadlines = miner0.WPoStPeriodDeadlines +var WPoStChallengeWindow = miner0.WPoStChallengeWindow +var WPoStChallengeLookback = miner0.WPoStChallengeLookback +var FaultDeclarationCutoff = miner0.FaultDeclarationCutoff + +const MinSectorExpiration = miner0.MinSectorExpiration + +// Not used / checked in v0 +// TODO: Abstract over network versions +var DeclarationsMax = miner2.DeclarationsMax +var AddressedSectorsMax = miner2.AddressedSectorsMax + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.StorageMinerActorCodeID: + return load0(store, act.Head) + + case builtin2.StorageMinerActorCodeID: + return load2(store, act.Head) + + case builtin3.StorageMinerActorCodeID: + return load3(store, act.Head) + + case builtin4.StorageMinerActorCodeID: + return load4(store, act.Head) + + case builtin5.StorageMinerActorCodeID: + return load5(store, act.Head) + + case builtin6.StorageMinerActorCodeID: + return load6(store, act.Head) + + case builtin7.StorageMinerActorCodeID: + return load7(store, act.Head) + +} + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.StorageMinerActorCodeID, nil + + case actors.Version2: + return builtin2.StorageMinerActorCodeID, nil + + case actors.Version3: + return builtin3.StorageMinerActorCodeID, nil + + case actors.Version4: + return builtin4.StorageMinerActorCodeID, nil + + case actors.Version5: + return builtin5.StorageMinerActorCodeID, nil + + case actors.Version6: + return builtin6.StorageMinerActorCodeID, nil + + case actors.Version7: + return builtin7.StorageMinerActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + // Total available balance to spend. + AvailableBalance(abi.TokenAmount) (abi.TokenAmount, error) + // Funds that will vest by the given epoch. + VestedFunds(abi.ChainEpoch) (abi.TokenAmount, error) + // Funds locked for various reasons. + LockedFunds() (LockedFunds, error) + FeeDebt() (abi.TokenAmount, error) + + GetSector(abi.SectorNumber) (*SectorOnChainInfo, error) + FindSector(abi.SectorNumber) (*SectorLocation, error) + GetSectorExpiration(abi.SectorNumber) (*SectorExpiration, error) + GetPrecommittedSector(abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) + ForEachPrecommittedSector(func(SectorPreCommitOnChainInfo) error) error + LoadSectors(sectorNos *bitfield.BitField) ([]*SectorOnChainInfo, error) + NumLiveSectors() (uint64, error) + IsAllocated(abi.SectorNumber) (bool, error) + // UnallocatedSectorNumbers returns up to count unallocated sector numbers (or less than + // count if there aren't enough). + UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) + GetAllocatedSectors() (*bitfield.BitField, error) + + // Note that ProvingPeriodStart is deprecated and will be renamed / removed in a future version of actors + GetProvingPeriodStart() (abi.ChainEpoch, error) + // Testing only + EraseAllUnproven() error + + LoadDeadline(idx uint64) (Deadline, error) + ForEachDeadline(cb func(idx uint64, dl Deadline) error) error + NumDeadlines() (uint64, error) + DeadlinesChanged(State) (bool, error) + + Info() (MinerInfo, error) + MinerInfoChanged(State) (bool, error) + + DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) + DeadlineCronActive() (bool, error) + + // Diff helpers. Used by Diff* functions internally. + sectors() (adt.Array, error) + decodeSectorOnChainInfo(*cbg.Deferred) (SectorOnChainInfo, error) + precommits() (adt.Map, error) + decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (SectorPreCommitOnChainInfo, error) + GetState() interface{} +} + +type Deadline interface { + LoadPartition(idx uint64) (Partition, error) + ForEachPartition(cb func(idx uint64, part Partition) error) error + PartitionsPoSted() (bitfield.BitField, error) + + PartitionsChanged(Deadline) (bool, error) + DisputableProofCount() (uint64, error) +} + +type Partition interface { + // AllSectors returns all sector numbers in this partition, including faulty, unproven, and terminated sectors + AllSectors() (bitfield.BitField, error) + + // Subset of sectors detected/declared faulty and not yet recovered (excl. from PoSt). + // Faults โˆฉ Terminated = โˆ… + FaultySectors() (bitfield.BitField, error) + + // Subset of faulty sectors expected to recover on next PoSt + // Recoveries โˆฉ Terminated = โˆ… + RecoveringSectors() (bitfield.BitField, error) + + // Live sectors are those that are not terminated (but may be faulty). + LiveSectors() (bitfield.BitField, error) + + // Active sectors are those that are neither terminated nor faulty nor unproven, i.e. actively contributing power. + ActiveSectors() (bitfield.BitField, error) + + // Unproven sectors in this partition. This bitfield will be cleared on + // a successful window post (or at the end of the partition's next + // deadline). At that time, any still unproven sectors will be added to + // the faulty sector bitfield. + UnprovenSectors() (bitfield.BitField, error) +} + +type SectorOnChainInfo struct { + SectorNumber abi.SectorNumber + SealProof abi.RegisteredSealProof + SealedCID cid.Cid + DealIDs []abi.DealID + Activation abi.ChainEpoch + Expiration abi.ChainEpoch + DealWeight abi.DealWeight + VerifiedDealWeight abi.DealWeight + InitialPledge abi.TokenAmount + ExpectedDayReward abi.TokenAmount + ExpectedStoragePledge abi.TokenAmount + SectorKeyCID *cid.Cid +} + +type SectorPreCommitInfo = miner0.SectorPreCommitInfo + +type SectorPreCommitOnChainInfo struct { + Info SectorPreCommitInfo + PreCommitDeposit abi.TokenAmount + PreCommitEpoch abi.ChainEpoch + DealWeight abi.DealWeight + VerifiedDealWeight abi.DealWeight +} + +type PoStPartition = miner0.PoStPartition +type RecoveryDeclaration = miner0.RecoveryDeclaration +type FaultDeclaration = miner0.FaultDeclaration + +// Params +type DeclareFaultsParams = miner0.DeclareFaultsParams +type DeclareFaultsRecoveredParams = miner0.DeclareFaultsRecoveredParams +type SubmitWindowedPoStParams = miner0.SubmitWindowedPoStParams +type ProveCommitSectorParams = miner0.ProveCommitSectorParams +type DisputeWindowedPoStParams = miner3.DisputeWindowedPoStParams +type ProveCommitAggregateParams = miner5.ProveCommitAggregateParams + +func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.RegisteredPoStProof) (abi.RegisteredSealProof, error) { + // We added support for the new proofs in network version 7, and removed support for the old + // ones in network version 8. + if nver < network.Version7 { + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredSealProof_StackedDrg2KiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredSealProof_StackedDrg8MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredSealProof_StackedDrg512MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredSealProof_StackedDrg32GiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredSealProof_StackedDrg64GiBV1, nil + default: + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + } + } + + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredSealProof_StackedDrg2KiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredSealProof_StackedDrg8MiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredSealProof_StackedDrg512MiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredSealProof_StackedDrg32GiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil + default: + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + } +} + +func WinningPoStProofTypeFromWindowPoStProofType(nver network.Version, proof abi.RegisteredPoStProof) (abi.RegisteredPoStProof, error) { + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning2KiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning8MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning512MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning32GiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning64GiBV1, nil + default: + return -1, xerrors.Errorf("unknown proof type %d", proof) + } +} + +type MinerInfo struct { + Owner address.Address // Must be an ID-address. + Worker address.Address // Must be an ID-address. + NewWorker address.Address // Must be an ID-address. + ControlAddresses []address.Address // Must be an ID-addresses. + WorkerChangeEpoch abi.ChainEpoch + PeerId *peer.ID + Multiaddrs []abi.Multiaddrs + WindowPoStProofType abi.RegisteredPoStProof + SectorSize abi.SectorSize + WindowPoStPartitionSectors uint64 + ConsensusFaultElapsed abi.ChainEpoch +} + +func (mi MinerInfo) IsController(addr address.Address) bool { + if addr == mi.Owner || addr == mi.Worker { + return true + } + + for _, ca := range mi.ControlAddresses { + if addr == ca { + return true + } + } + + return false +} + +type SectorExpiration struct { + OnTime abi.ChainEpoch + + // non-zero if sector is faulty, epoch at which it will be permanently + // removed if it doesn't recover + Early abi.ChainEpoch +} + +type SectorLocation struct { + Deadline uint64 + Partition uint64 +} + +type SectorChanges struct { + Added []SectorOnChainInfo + Extended []SectorExtensions + Removed []SectorOnChainInfo +} + +type SectorExtensions struct { + From SectorOnChainInfo + To SectorOnChainInfo +} + +type PreCommitChanges struct { + Added []SectorPreCommitOnChainInfo + Removed []SectorPreCommitOnChainInfo +} + +type LockedFunds struct { + VestingFunds abi.TokenAmount + InitialPledgeRequirement abi.TokenAmount + PreCommitDeposits abi.TokenAmount +} + +func (lf LockedFunds) TotalLockedFunds() abi.TokenAmount { + return big.Add(lf.VestingFunds, big.Add(lf.InitialPledgeRequirement, lf.PreCommitDeposits)) +} diff --git a/pkg/types/specactors/builtin/miner/state.go.template b/pkg/types/specactors/builtin/miner/state.go.template new file mode 100644 index 0000000000..76e96fc345 --- /dev/null +++ b/pkg/types/specactors/builtin/miner/state.go.template @@ -0,0 +1,605 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" +{{if (le .v 1)}} + "github.com/filecoin-project/go-state-types/big" +{{end}} + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + +{{if (ge .v 3)}} + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" +{{end}} + miner{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/miner" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + out.State = miner{{.v}}.State{} + return &out, nil +} + +type state{{.v}} struct { + miner{{.v}}.State + store adt.Store +} + +type deadline{{.v}} struct { + miner{{.v}}.Deadline + store adt.Store +} + +type partition{{.v}} struct { + miner{{.v}}.Partition + store adt.Store +} + +func (s *state{{.v}}) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available{{if (ge .v 2)}}, err{{end}} = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state{{.v}}) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state{{.v}}) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge{{if (le .v 1)}}Requirement{{end}}, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state{{.v}}) FeeDebt() (abi.TokenAmount, error) { + return {{if (ge .v 2)}}s.State.FeeDebt{{else}}big.Zero(){{end}}, nil +} + +func (s *state{{.v}}) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge{{if (le .v 1)}}Requirement{{end}}, nil +} + +func (s *state{{.v}}) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state{{.v}}) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV{{.v}}SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state{{.v}}) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state{{.v}}) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner{{.v}}.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state{{.v}}) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. +{{if (ge .v 7) -}} + // 1. If the sector is non-faulty, it will expire on-time (can be + // learned from the sector info). +{{- else -}} + // 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. +{{- end}} +{{if (ge .v 6) -}} + // 2. If it's faulty, it will expire early within the first 42 entries + // of the expiration queue. +{{- else -}} + // 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. +{{- end}} + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner{{.v}}.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner{{.v}}.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner{{.v}}.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant{{if (ge .v 3)}}, miner{{.v}}.PartitionExpirationAmtBitwidth{{end}}) + if err != nil { + return err + } + var exp miner{{.v}}.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state{{.v}}) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV{{.v}}SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state{{.v}}) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { +{{if (ge .v 3) -}} + precommitted, err := adt{{.v}}.AsMap(s.store, s.State.PreCommittedSectors, builtin{{.v}}.DefaultHamtBitwidth) +{{- else -}} + precommitted, err := adt{{.v}}.AsMap(s.store, s.State.PreCommittedSectors) +{{- end}} + if err != nil { + return err + } + + var info miner{{.v}}.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV{{.v}}SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state{{.v}}) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner{{.v}}.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info{{.v}} miner{{.v}}.SectorOnChainInfo + if err := sectors.ForEach(&info{{.v}}, func(_ int64) error { + info := fromV{{.v}}SectorOnChainInfo(info{{.v}}) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos{{.v}}, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos{{.v}})) + for i, info{{.v}} := range infos{{.v}} { + info := fromV{{.v}}SectorOnChainInfo(*info{{.v}}) + infos[i] = &info + } + return infos, nil +} + +func (s *state{{.v}}) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state{{.v}}) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state{{.v}}) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state{{.v}}) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{ {Val: true, Len: abi.MaxSectorNumber} }}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state{{.v}}) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state{{.v}}) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline{{.v}}{*dl, s.store}, nil +} + +func (s *state{{.v}}) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner{{.v}}.Deadline) error { + return cb(i, &deadline{{.v}}{*dl, s.store}) + }) +} + +func (s *state{{.v}}) NumDeadlines() (uint64, error) { + return miner{{.v}}.WPoStPeriodDeadlines, nil +} + +func (s *state{{.v}}) DeadlinesChanged(other State) (bool, error) { + other{{.v}}, ok := other.(*state{{.v}}) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other{{.v}}.Deadlines), nil +} + +func (s *state{{.v}}) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state{{.v}}) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state{{.v}}) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } +{{if (le .v 2)}} + wpp, err := info.SealProofType.RegisteredWindowPoStProof() + if err != nil { + return MinerInfo{}, err + } +{{end}} + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: {{if (ge .v 3)}}info.WindowPoStProofType{{else}}wpp{{end}}, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: {{if (ge .v 2)}}info.ConsensusFaultElapsed{{else}}-1{{end}}, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state{{.v}}) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.{{if (ge .v 4)}}Recorded{{end}}DeadlineInfo(epoch), nil +} + +func (s *state{{.v}}) DeadlineCronActive() (bool, error) { + return {{if (ge .v 4)}}s.State.DeadlineCronActive{{else}}true{{end}}, nil{{if (lt .v 4)}} // always active in this version{{end}} +} + +func (s *state{{.v}}) sectors() (adt.Array, error) { + return adt{{.v}}.AsArray(s.store, s.Sectors{{if (ge .v 3)}}, miner{{.v}}.SectorsAmtBitwidth{{end}}) +} + +func (s *state{{.v}}) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner{{.v}}.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV{{.v}}SectorOnChainInfo(si), nil +} + +func (s *state{{.v}}) precommits() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.PreCommittedSectors{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner{{.v}}.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV{{.v}}SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state{{.v}}) EraseAllUnproven() error { + {{if (ge .v 2)}} + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner{{.v}}.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner{{.v}}.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + {{else}} + // field doesn't exist until v2 + return nil + {{end}} +} + +func (d *deadline{{.v}}) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition{{.v}}{*p, d.store}, nil +} + +func (d *deadline{{.v}}) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner{{.v}}.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition{{.v}}{part, d.store}) + }) +} + +func (d *deadline{{.v}}) PartitionsChanged(other Deadline) (bool, error) { + other{{.v}}, ok := other.(*deadline{{.v}}) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other{{.v}}.Deadline.Partitions), nil +} + +func (d *deadline{{.v}}) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.{{if (ge .v 3)}}PartitionsPoSted{{else}}PostSubmissions{{end}}, nil +} + +func (d *deadline{{.v}}) DisputableProofCount() (uint64, error) { +{{if (ge .v 3)}} + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil +{{else}} + // field doesn't exist until v3 + return 0, nil +{{end}} +} + +func (p *partition{{.v}}) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition{{.v}}) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition{{.v}}) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition{{.v}}) UnprovenSectors() (bitfield.BitField, error) { + return {{if (ge .v 2)}}p.Partition.Unproven{{else}}bitfield.New(){{end}}, nil +} + +func fromV{{.v}}SectorOnChainInfo(v{{.v}} miner{{.v}}.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v{{.v}}.SectorNumber, + SealProof: v{{.v}}.SealProof, + SealedCID: v{{.v}}.SealedCID, + DealIDs: v{{.v}}.DealIDs, + Activation: v{{.v}}.Activation, + Expiration: v{{.v}}.Expiration, + DealWeight: v{{.v}}.DealWeight, + VerifiedDealWeight: v{{.v}}.VerifiedDealWeight, + InitialPledge: v{{.v}}.InitialPledge, + ExpectedDayReward: v{{.v}}.ExpectedDayReward, + ExpectedStoragePledge: v{{.v}}.ExpectedStoragePledge, + {{if (ge .v 7)}} + SectorKeyCID: v{{.v}}.SectorKeyCID, + {{end}} + } + return info +} + +func fromV{{.v}}SectorPreCommitOnChainInfo(v{{.v}} miner{{.v}}.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { +{{if (ge .v 2)}} + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v{{.v}}.Info), + PreCommitDeposit: v{{.v}}.PreCommitDeposit, + PreCommitEpoch: v{{.v}}.PreCommitEpoch, + DealWeight: v{{.v}}.DealWeight, + VerifiedDealWeight: v{{.v}}.VerifiedDealWeight, + } +{{else}} + return (SectorPreCommitOnChainInfo)(v0) +{{end}} +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/miner/util.go b/pkg/types/specactors/builtin/miner/util.go new file mode 100644 index 0000000000..5fafc31ef7 --- /dev/null +++ b/pkg/types/specactors/builtin/miner/util.go @@ -0,0 +1,88 @@ +package miner + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" +) + +func AllPartSectors(mas State, sget func(Partition) (bitfield.BitField, error)) (bitfield.BitField, error) { + var parts []bitfield.BitField + + err := mas.ForEachDeadline(func(dlidx uint64, dl Deadline) error { + return dl.ForEachPartition(func(partidx uint64, part Partition) error { + s, err := sget(part) + if err != nil { + return xerrors.Errorf("getting sector list (dl: %d, part %d): %w", dlidx, partidx, err) + } + + parts = append(parts, s) + return nil + }) + }) + if err != nil { + return bitfield.BitField{}, err + } + + return bitfield.MultiMerge(parts...) +} + +// SealProofTypeFromSectorSize returns preferred seal proof type for creating +// new miner actors and new sectors +func SealProofTypeFromSectorSize(ssize abi.SectorSize, nv network.Version) (abi.RegisteredSealProof, error) { + switch { + case nv < network.Version7: + switch ssize { + case 2 << 10: + return abi.RegisteredSealProof_StackedDrg2KiBV1, nil + case 8 << 20: + return abi.RegisteredSealProof_StackedDrg8MiBV1, nil + case 512 << 20: + return abi.RegisteredSealProof_StackedDrg512MiBV1, nil + case 32 << 30: + return abi.RegisteredSealProof_StackedDrg32GiBV1, nil + case 64 << 30: + return abi.RegisteredSealProof_StackedDrg64GiBV1, nil + default: + return 0, xerrors.Errorf("unsupported sector size for miner: %v", ssize) + } + case nv >= network.Version7: + switch ssize { + case 2 << 10: + return abi.RegisteredSealProof_StackedDrg2KiBV1_1, nil + case 8 << 20: + return abi.RegisteredSealProof_StackedDrg8MiBV1_1, nil + case 512 << 20: + return abi.RegisteredSealProof_StackedDrg512MiBV1_1, nil + case 32 << 30: + return abi.RegisteredSealProof_StackedDrg32GiBV1_1, nil + case 64 << 30: + return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil + default: + return 0, xerrors.Errorf("unsupported sector size for miner: %v", ssize) + } + } + + return 0, xerrors.Errorf("unsupported network version") +} + +// WindowPoStProofTypeFromSectorSize returns preferred post proof type for creating +// new miner actors and new sectors +func WindowPoStProofTypeFromSectorSize(ssize abi.SectorSize) (abi.RegisteredPoStProof, error) { + switch ssize { + case 2 << 10: + return abi.RegisteredPoStProof_StackedDrgWindow2KiBV1, nil + case 8 << 20: + return abi.RegisteredPoStProof_StackedDrgWindow8MiBV1, nil + case 512 << 20: + return abi.RegisteredPoStProof_StackedDrgWindow512MiBV1, nil + case 32 << 30: + return abi.RegisteredPoStProof_StackedDrgWindow32GiBV1, nil + case 64 << 30: + return abi.RegisteredPoStProof_StackedDrgWindow64GiBV1, nil + default: + return 0, xerrors.Errorf("unsupported sector size for miner: %v", ssize) + } +} diff --git a/pkg/types/specactors/builtin/miner/v0.go b/pkg/types/specactors/builtin/miner/v0.go new file mode 100644 index 0000000000..1d68b5a2d0 --- /dev/null +++ b/pkg/types/specactors/builtin/miner/v0.go @@ -0,0 +1,537 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + out.State = miner0.State{} + return &out, nil +} + +type state0 struct { + miner0.State + store adt.Store +} + +type deadline0 struct { + miner0.Deadline + store adt.Store +} + +type partition0 struct { + miner0.Partition + store adt.Store +} + +func (s *state0) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state0) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state0) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledgeRequirement, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state0) FeeDebt() (abi.TokenAmount, error) { + return big.Zero(), nil +} + +func (s *state0) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledgeRequirement, nil +} + +func (s *state0) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state0) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV0SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state0) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state0) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner0.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state0) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. +// 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. +// 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner0.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner0.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner0.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant) + if err != nil { + return err + } + var exp miner0.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state0) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV0SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state0) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { +precommitted, err := adt0.AsMap(s.store, s.State.PreCommittedSectors) + if err != nil { + return err + } + + var info miner0.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV0SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state0) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner0.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info0 miner0.SectorOnChainInfo + if err := sectors.ForEach(&info0, func(_ int64) error { + info := fromV0SectorOnChainInfo(info0) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos0, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos0)) + for i, info0 := range infos0 { + info := fromV0SectorOnChainInfo(*info0) + infos[i] = &info + } + return infos, nil +} + +func (s *state0) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state0) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state0) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state0) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{ {Val: true, Len: abi.MaxSectorNumber} }}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state0) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state0) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline0{*dl, s.store}, nil +} + +func (s *state0) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner0.Deadline) error { + return cb(i, &deadline0{*dl, s.store}) + }) +} + +func (s *state0) NumDeadlines() (uint64, error) { + return miner0.WPoStPeriodDeadlines, nil +} + +func (s *state0) DeadlinesChanged(other State) (bool, error) { + other0, ok := other.(*state0) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other0.Deadlines), nil +} + +func (s *state0) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state0) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state0) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + wpp, err := info.SealProofType.RegisteredWindowPoStProof() + if err != nil { + return MinerInfo{}, err + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: wpp, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: -1, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state0) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.DeadlineInfo(epoch), nil +} + +func (s *state0) DeadlineCronActive() (bool, error) { + return true, nil // always active in this version +} + +func (s *state0) sectors() (adt.Array, error) { + return adt0.AsArray(s.store, s.Sectors) +} + +func (s *state0) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner0.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV0SectorOnChainInfo(si), nil +} + +func (s *state0) precommits() (adt.Map, error) { + return adt0.AsMap(s.store, s.PreCommittedSectors) +} + +func (s *state0) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner0.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV0SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state0) EraseAllUnproven() error { + + // field doesn't exist until v2 + return nil + +} + +func (d *deadline0) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition0{*p, d.store}, nil +} + +func (d *deadline0) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner0.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition0{part, d.store}) + }) +} + +func (d *deadline0) PartitionsChanged(other Deadline) (bool, error) { + other0, ok := other.(*deadline0) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other0.Deadline.Partitions), nil +} + +func (d *deadline0) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PostSubmissions, nil +} + +func (d *deadline0) DisputableProofCount() (uint64, error) { + + // field doesn't exist until v3 + return 0, nil + +} + +func (p *partition0) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition0) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition0) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition0) UnprovenSectors() (bitfield.BitField, error) { + return bitfield.New(), nil +} + +func fromV0SectorOnChainInfo(v0 miner0.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v0.SectorNumber, + SealProof: v0.SealProof, + SealedCID: v0.SealedCID, + DealIDs: v0.DealIDs, + Activation: v0.Activation, + Expiration: v0.Expiration, + DealWeight: v0.DealWeight, + VerifiedDealWeight: v0.VerifiedDealWeight, + InitialPledge: v0.InitialPledge, + ExpectedDayReward: v0.ExpectedDayReward, + ExpectedStoragePledge: v0.ExpectedStoragePledge, + + } + return info +} + +func fromV0SectorPreCommitOnChainInfo(v0 miner0.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return (SectorPreCommitOnChainInfo)(v0) + +} + +func (s *state0) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/miner/v2.go b/pkg/types/specactors/builtin/miner/v2.go new file mode 100644 index 0000000000..1903441f29 --- /dev/null +++ b/pkg/types/specactors/builtin/miner/v2.go @@ -0,0 +1,573 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + out.State = miner2.State{} + return &out, nil +} + +type state2 struct { + miner2.State + store adt.Store +} + +type deadline2 struct { + miner2.Deadline + store adt.Store +} + +type partition2 struct { + miner2.Partition + store adt.Store +} + +func (s *state2) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state2) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state2) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state2) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state2) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state2) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state2) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV2SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state2) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state2) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner2.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state2) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. +// 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. +// 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner2.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner2.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner2.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant) + if err != nil { + return err + } + var exp miner2.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state2) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV2SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state2) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { +precommitted, err := adt2.AsMap(s.store, s.State.PreCommittedSectors) + if err != nil { + return err + } + + var info miner2.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV2SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state2) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner2.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info2 miner2.SectorOnChainInfo + if err := sectors.ForEach(&info2, func(_ int64) error { + info := fromV2SectorOnChainInfo(info2) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos2, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos2)) + for i, info2 := range infos2 { + info := fromV2SectorOnChainInfo(*info2) + infos[i] = &info + } + return infos, nil +} + +func (s *state2) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state2) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state2) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state2) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{ {Val: true, Len: abi.MaxSectorNumber} }}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state2) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state2) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline2{*dl, s.store}, nil +} + +func (s *state2) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner2.Deadline) error { + return cb(i, &deadline2{*dl, s.store}) + }) +} + +func (s *state2) NumDeadlines() (uint64, error) { + return miner2.WPoStPeriodDeadlines, nil +} + +func (s *state2) DeadlinesChanged(other State) (bool, error) { + other2, ok := other.(*state2) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other2.Deadlines), nil +} + +func (s *state2) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state2) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state2) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + wpp, err := info.SealProofType.RegisteredWindowPoStProof() + if err != nil { + return MinerInfo{}, err + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: wpp, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state2) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.DeadlineInfo(epoch), nil +} + +func (s *state2) DeadlineCronActive() (bool, error) { + return true, nil // always active in this version +} + +func (s *state2) sectors() (adt.Array, error) { + return adt2.AsArray(s.store, s.Sectors) +} + +func (s *state2) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner2.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV2SectorOnChainInfo(si), nil +} + +func (s *state2) precommits() (adt.Map, error) { + return adt2.AsMap(s.store, s.PreCommittedSectors) +} + +func (s *state2) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner2.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV2SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state2) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner2.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner2.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline2) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition2{*p, d.store}, nil +} + +func (d *deadline2) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner2.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition2{part, d.store}) + }) +} + +func (d *deadline2) PartitionsChanged(other Deadline) (bool, error) { + other2, ok := other.(*deadline2) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other2.Deadline.Partitions), nil +} + +func (d *deadline2) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PostSubmissions, nil +} + +func (d *deadline2) DisputableProofCount() (uint64, error) { + + // field doesn't exist until v3 + return 0, nil + +} + +func (p *partition2) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition2) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition2) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition2) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV2SectorOnChainInfo(v2 miner2.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v2.SectorNumber, + SealProof: v2.SealProof, + SealedCID: v2.SealedCID, + DealIDs: v2.DealIDs, + Activation: v2.Activation, + Expiration: v2.Expiration, + DealWeight: v2.DealWeight, + VerifiedDealWeight: v2.VerifiedDealWeight, + InitialPledge: v2.InitialPledge, + ExpectedDayReward: v2.ExpectedDayReward, + ExpectedStoragePledge: v2.ExpectedStoragePledge, + + } + return info +} + +func fromV2SectorPreCommitOnChainInfo(v2 miner2.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v2.Info), + PreCommitDeposit: v2.PreCommitDeposit, + PreCommitEpoch: v2.PreCommitEpoch, + DealWeight: v2.DealWeight, + VerifiedDealWeight: v2.VerifiedDealWeight, + } + +} + +func (s *state2) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/miner/v3.go b/pkg/types/specactors/builtin/miner/v3.go new file mode 100644 index 0000000000..4353b7206f --- /dev/null +++ b/pkg/types/specactors/builtin/miner/v3.go @@ -0,0 +1,574 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + out.State = miner3.State{} + return &out, nil +} + +type state3 struct { + miner3.State + store adt.Store +} + +type deadline3 struct { + miner3.Deadline + store adt.Store +} + +type partition3 struct { + miner3.Partition + store adt.Store +} + +func (s *state3) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state3) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state3) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state3) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state3) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state3) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state3) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV3SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state3) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state3) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner3.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state3) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. +// 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. +// 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner3.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner3.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner3.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner3.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner3.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state3) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV3SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state3) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { +precommitted, err := adt3.AsMap(s.store, s.State.PreCommittedSectors, builtin3.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner3.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV3SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state3) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner3.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info3 miner3.SectorOnChainInfo + if err := sectors.ForEach(&info3, func(_ int64) error { + info := fromV3SectorOnChainInfo(info3) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos3, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos3)) + for i, info3 := range infos3 { + info := fromV3SectorOnChainInfo(*info3) + infos[i] = &info + } + return infos, nil +} + +func (s *state3) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state3) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state3) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state3) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{ {Val: true, Len: abi.MaxSectorNumber} }}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state3) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state3) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline3{*dl, s.store}, nil +} + +func (s *state3) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner3.Deadline) error { + return cb(i, &deadline3{*dl, s.store}) + }) +} + +func (s *state3) NumDeadlines() (uint64, error) { + return miner3.WPoStPeriodDeadlines, nil +} + +func (s *state3) DeadlinesChanged(other State) (bool, error) { + other3, ok := other.(*state3) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other3.Deadlines), nil +} + +func (s *state3) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state3) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state3) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state3) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.DeadlineInfo(epoch), nil +} + +func (s *state3) DeadlineCronActive() (bool, error) { + return true, nil // always active in this version +} + +func (s *state3) sectors() (adt.Array, error) { + return adt3.AsArray(s.store, s.Sectors, miner3.SectorsAmtBitwidth) +} + +func (s *state3) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner3.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV3SectorOnChainInfo(si), nil +} + +func (s *state3) precommits() (adt.Map, error) { + return adt3.AsMap(s.store, s.PreCommittedSectors, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner3.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV3SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state3) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner3.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner3.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline3) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition3{*p, d.store}, nil +} + +func (d *deadline3) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner3.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition3{part, d.store}) + }) +} + +func (d *deadline3) PartitionsChanged(other Deadline) (bool, error) { + other3, ok := other.(*deadline3) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other3.Deadline.Partitions), nil +} + +func (d *deadline3) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline3) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition3) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition3) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition3) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition3) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV3SectorOnChainInfo(v3 miner3.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v3.SectorNumber, + SealProof: v3.SealProof, + SealedCID: v3.SealedCID, + DealIDs: v3.DealIDs, + Activation: v3.Activation, + Expiration: v3.Expiration, + DealWeight: v3.DealWeight, + VerifiedDealWeight: v3.VerifiedDealWeight, + InitialPledge: v3.InitialPledge, + ExpectedDayReward: v3.ExpectedDayReward, + ExpectedStoragePledge: v3.ExpectedStoragePledge, + + } + return info +} + +func fromV3SectorPreCommitOnChainInfo(v3 miner3.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v3.Info), + PreCommitDeposit: v3.PreCommitDeposit, + PreCommitEpoch: v3.PreCommitEpoch, + DealWeight: v3.DealWeight, + VerifiedDealWeight: v3.VerifiedDealWeight, + } + +} + +func (s *state3) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/miner/v4.go b/pkg/types/specactors/builtin/miner/v4.go new file mode 100644 index 0000000000..67a3a5e55b --- /dev/null +++ b/pkg/types/specactors/builtin/miner/v4.go @@ -0,0 +1,574 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + miner4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/miner" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + out.State = miner4.State{} + return &out, nil +} + +type state4 struct { + miner4.State + store adt.Store +} + +type deadline4 struct { + miner4.Deadline + store adt.Store +} + +type partition4 struct { + miner4.Partition + store adt.Store +} + +func (s *state4) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state4) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state4) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state4) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state4) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state4) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state4) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV4SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state4) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state4) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner4.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state4) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. +// 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. +// 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner4.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner4.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner4.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner4.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner4.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state4) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV4SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state4) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { +precommitted, err := adt4.AsMap(s.store, s.State.PreCommittedSectors, builtin4.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner4.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV4SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state4) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner4.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info4 miner4.SectorOnChainInfo + if err := sectors.ForEach(&info4, func(_ int64) error { + info := fromV4SectorOnChainInfo(info4) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos4, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos4)) + for i, info4 := range infos4 { + info := fromV4SectorOnChainInfo(*info4) + infos[i] = &info + } + return infos, nil +} + +func (s *state4) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state4) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state4) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state4) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{ {Val: true, Len: abi.MaxSectorNumber} }}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state4) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state4) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline4{*dl, s.store}, nil +} + +func (s *state4) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner4.Deadline) error { + return cb(i, &deadline4{*dl, s.store}) + }) +} + +func (s *state4) NumDeadlines() (uint64, error) { + return miner4.WPoStPeriodDeadlines, nil +} + +func (s *state4) DeadlinesChanged(other State) (bool, error) { + other4, ok := other.(*state4) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other4.Deadlines), nil +} + +func (s *state4) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state4) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state4) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state4) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.RecordedDeadlineInfo(epoch), nil +} + +func (s *state4) DeadlineCronActive() (bool, error) { + return s.State.DeadlineCronActive, nil +} + +func (s *state4) sectors() (adt.Array, error) { + return adt4.AsArray(s.store, s.Sectors, miner4.SectorsAmtBitwidth) +} + +func (s *state4) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner4.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV4SectorOnChainInfo(si), nil +} + +func (s *state4) precommits() (adt.Map, error) { + return adt4.AsMap(s.store, s.PreCommittedSectors, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner4.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV4SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state4) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner4.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner4.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline4) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition4{*p, d.store}, nil +} + +func (d *deadline4) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner4.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition4{part, d.store}) + }) +} + +func (d *deadline4) PartitionsChanged(other Deadline) (bool, error) { + other4, ok := other.(*deadline4) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other4.Deadline.Partitions), nil +} + +func (d *deadline4) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline4) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition4) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition4) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition4) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition4) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV4SectorOnChainInfo(v4 miner4.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v4.SectorNumber, + SealProof: v4.SealProof, + SealedCID: v4.SealedCID, + DealIDs: v4.DealIDs, + Activation: v4.Activation, + Expiration: v4.Expiration, + DealWeight: v4.DealWeight, + VerifiedDealWeight: v4.VerifiedDealWeight, + InitialPledge: v4.InitialPledge, + ExpectedDayReward: v4.ExpectedDayReward, + ExpectedStoragePledge: v4.ExpectedStoragePledge, + + } + return info +} + +func fromV4SectorPreCommitOnChainInfo(v4 miner4.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v4.Info), + PreCommitDeposit: v4.PreCommitDeposit, + PreCommitEpoch: v4.PreCommitEpoch, + DealWeight: v4.DealWeight, + VerifiedDealWeight: v4.VerifiedDealWeight, + } + +} + +func (s *state4) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/miner/v5.go b/pkg/types/specactors/builtin/miner/v5.go new file mode 100644 index 0000000000..4a5ccd28c6 --- /dev/null +++ b/pkg/types/specactors/builtin/miner/v5.go @@ -0,0 +1,574 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + out.State = miner5.State{} + return &out, nil +} + +type state5 struct { + miner5.State + store adt.Store +} + +type deadline5 struct { + miner5.Deadline + store adt.Store +} + +type partition5 struct { + miner5.Partition + store adt.Store +} + +func (s *state5) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state5) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state5) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state5) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state5) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state5) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state5) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV5SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state5) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state5) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner5.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state5) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. +// 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. +// 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner5.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner5.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner5.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner5.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner5.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state5) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV5SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state5) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { +precommitted, err := adt5.AsMap(s.store, s.State.PreCommittedSectors, builtin5.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner5.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV5SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state5) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner5.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info5 miner5.SectorOnChainInfo + if err := sectors.ForEach(&info5, func(_ int64) error { + info := fromV5SectorOnChainInfo(info5) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos5, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos5)) + for i, info5 := range infos5 { + info := fromV5SectorOnChainInfo(*info5) + infos[i] = &info + } + return infos, nil +} + +func (s *state5) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state5) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state5) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state5) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{ {Val: true, Len: abi.MaxSectorNumber} }}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state5) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state5) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline5{*dl, s.store}, nil +} + +func (s *state5) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner5.Deadline) error { + return cb(i, &deadline5{*dl, s.store}) + }) +} + +func (s *state5) NumDeadlines() (uint64, error) { + return miner5.WPoStPeriodDeadlines, nil +} + +func (s *state5) DeadlinesChanged(other State) (bool, error) { + other5, ok := other.(*state5) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other5.Deadlines), nil +} + +func (s *state5) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state5) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state5) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state5) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.RecordedDeadlineInfo(epoch), nil +} + +func (s *state5) DeadlineCronActive() (bool, error) { + return s.State.DeadlineCronActive, nil +} + +func (s *state5) sectors() (adt.Array, error) { + return adt5.AsArray(s.store, s.Sectors, miner5.SectorsAmtBitwidth) +} + +func (s *state5) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner5.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV5SectorOnChainInfo(si), nil +} + +func (s *state5) precommits() (adt.Map, error) { + return adt5.AsMap(s.store, s.PreCommittedSectors, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner5.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV5SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state5) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner5.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner5.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline5) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition5{*p, d.store}, nil +} + +func (d *deadline5) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner5.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition5{part, d.store}) + }) +} + +func (d *deadline5) PartitionsChanged(other Deadline) (bool, error) { + other5, ok := other.(*deadline5) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other5.Deadline.Partitions), nil +} + +func (d *deadline5) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline5) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition5) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition5) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition5) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition5) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV5SectorOnChainInfo(v5 miner5.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v5.SectorNumber, + SealProof: v5.SealProof, + SealedCID: v5.SealedCID, + DealIDs: v5.DealIDs, + Activation: v5.Activation, + Expiration: v5.Expiration, + DealWeight: v5.DealWeight, + VerifiedDealWeight: v5.VerifiedDealWeight, + InitialPledge: v5.InitialPledge, + ExpectedDayReward: v5.ExpectedDayReward, + ExpectedStoragePledge: v5.ExpectedStoragePledge, + + } + return info +} + +func fromV5SectorPreCommitOnChainInfo(v5 miner5.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v5.Info), + PreCommitDeposit: v5.PreCommitDeposit, + PreCommitEpoch: v5.PreCommitEpoch, + DealWeight: v5.DealWeight, + VerifiedDealWeight: v5.VerifiedDealWeight, + } + +} + +func (s *state5) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/miner/v6.go b/pkg/types/specactors/builtin/miner/v6.go new file mode 100644 index 0000000000..f33d42cdba --- /dev/null +++ b/pkg/types/specactors/builtin/miner/v6.go @@ -0,0 +1,574 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + miner6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/miner" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + out.State = miner6.State{} + return &out, nil +} + +type state6 struct { + miner6.State + store adt.Store +} + +type deadline6 struct { + miner6.Deadline + store adt.Store +} + +type partition6 struct { + miner6.Partition + store adt.Store +} + +func (s *state6) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state6) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state6) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state6) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state6) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state6) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state6) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV6SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state6) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state6) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner6.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state6) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. +// 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. +// 2. If it's faulty, it will expire early within the first 42 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner6.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner6.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner6.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner6.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner6.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state6) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV6SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state6) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { +precommitted, err := adt6.AsMap(s.store, s.State.PreCommittedSectors, builtin6.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner6.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV6SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state6) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner6.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info6 miner6.SectorOnChainInfo + if err := sectors.ForEach(&info6, func(_ int64) error { + info := fromV6SectorOnChainInfo(info6) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos6, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos6)) + for i, info6 := range infos6 { + info := fromV6SectorOnChainInfo(*info6) + infos[i] = &info + } + return infos, nil +} + +func (s *state6) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state6) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state6) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state6) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{ {Val: true, Len: abi.MaxSectorNumber} }}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state6) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state6) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline6{*dl, s.store}, nil +} + +func (s *state6) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner6.Deadline) error { + return cb(i, &deadline6{*dl, s.store}) + }) +} + +func (s *state6) NumDeadlines() (uint64, error) { + return miner6.WPoStPeriodDeadlines, nil +} + +func (s *state6) DeadlinesChanged(other State) (bool, error) { + other6, ok := other.(*state6) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other6.Deadlines), nil +} + +func (s *state6) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state6) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state6) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state6) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.RecordedDeadlineInfo(epoch), nil +} + +func (s *state6) DeadlineCronActive() (bool, error) { + return s.State.DeadlineCronActive, nil +} + +func (s *state6) sectors() (adt.Array, error) { + return adt6.AsArray(s.store, s.Sectors, miner6.SectorsAmtBitwidth) +} + +func (s *state6) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner6.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV6SectorOnChainInfo(si), nil +} + +func (s *state6) precommits() (adt.Map, error) { + return adt6.AsMap(s.store, s.PreCommittedSectors, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner6.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV6SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state6) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner6.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner6.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline6) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition6{*p, d.store}, nil +} + +func (d *deadline6) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner6.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition6{part, d.store}) + }) +} + +func (d *deadline6) PartitionsChanged(other Deadline) (bool, error) { + other6, ok := other.(*deadline6) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other6.Deadline.Partitions), nil +} + +func (d *deadline6) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline6) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition6) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition6) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition6) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition6) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV6SectorOnChainInfo(v6 miner6.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v6.SectorNumber, + SealProof: v6.SealProof, + SealedCID: v6.SealedCID, + DealIDs: v6.DealIDs, + Activation: v6.Activation, + Expiration: v6.Expiration, + DealWeight: v6.DealWeight, + VerifiedDealWeight: v6.VerifiedDealWeight, + InitialPledge: v6.InitialPledge, + ExpectedDayReward: v6.ExpectedDayReward, + ExpectedStoragePledge: v6.ExpectedStoragePledge, + + } + return info +} + +func fromV6SectorPreCommitOnChainInfo(v6 miner6.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v6.Info), + PreCommitDeposit: v6.PreCommitDeposit, + PreCommitEpoch: v6.PreCommitEpoch, + DealWeight: v6.DealWeight, + VerifiedDealWeight: v6.VerifiedDealWeight, + } + +} + +func (s *state6) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/miner/v7.go b/pkg/types/specactors/builtin/miner/v7.go new file mode 100644 index 0000000000..7902229e6c --- /dev/null +++ b/pkg/types/specactors/builtin/miner/v7.go @@ -0,0 +1,575 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + miner7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/miner" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + out.State = miner7.State{} + return &out, nil +} + +type state7 struct { + miner7.State + store adt.Store +} + +type deadline7 struct { + miner7.Deadline + store adt.Store +} + +type partition7 struct { + miner7.Partition + store adt.Store +} + +func (s *state7) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state7) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state7) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state7) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state7) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state7) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state7) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV7SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state7) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state7) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner7.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state7) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. +// 1. If the sector is non-faulty, it will expire on-time (can be + // learned from the sector info). +// 2. If it's faulty, it will expire early within the first 42 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner7.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner7.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner7.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner7.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner7.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state7) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV7SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state7) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { +precommitted, err := adt7.AsMap(s.store, s.State.PreCommittedSectors, builtin7.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner7.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV7SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state7) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner7.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info7 miner7.SectorOnChainInfo + if err := sectors.ForEach(&info7, func(_ int64) error { + info := fromV7SectorOnChainInfo(info7) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos7, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos7)) + for i, info7 := range infos7 { + info := fromV7SectorOnChainInfo(*info7) + infos[i] = &info + } + return infos, nil +} + +func (s *state7) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state7) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state7) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state7) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{ {Val: true, Len: abi.MaxSectorNumber} }}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state7) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state7) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline7{*dl, s.store}, nil +} + +func (s *state7) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner7.Deadline) error { + return cb(i, &deadline7{*dl, s.store}) + }) +} + +func (s *state7) NumDeadlines() (uint64, error) { + return miner7.WPoStPeriodDeadlines, nil +} + +func (s *state7) DeadlinesChanged(other State) (bool, error) { + other7, ok := other.(*state7) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other7.Deadlines), nil +} + +func (s *state7) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state7) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state7) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state7) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.RecordedDeadlineInfo(epoch), nil +} + +func (s *state7) DeadlineCronActive() (bool, error) { + return s.State.DeadlineCronActive, nil +} + +func (s *state7) sectors() (adt.Array, error) { + return adt7.AsArray(s.store, s.Sectors, miner7.SectorsAmtBitwidth) +} + +func (s *state7) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner7.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV7SectorOnChainInfo(si), nil +} + +func (s *state7) precommits() (adt.Map, error) { + return adt7.AsMap(s.store, s.PreCommittedSectors, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner7.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV7SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state7) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner7.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner7.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline7) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition7{*p, d.store}, nil +} + +func (d *deadline7) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner7.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition7{part, d.store}) + }) +} + +func (d *deadline7) PartitionsChanged(other Deadline) (bool, error) { + other7, ok := other.(*deadline7) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other7.Deadline.Partitions), nil +} + +func (d *deadline7) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline7) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition7) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition7) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition7) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition7) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV7SectorOnChainInfo(v7 miner7.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v7.SectorNumber, + SealProof: v7.SealProof, + SealedCID: v7.SealedCID, + DealIDs: v7.DealIDs, + Activation: v7.Activation, + Expiration: v7.Expiration, + DealWeight: v7.DealWeight, + VerifiedDealWeight: v7.VerifiedDealWeight, + InitialPledge: v7.InitialPledge, + ExpectedDayReward: v7.ExpectedDayReward, + ExpectedStoragePledge: v7.ExpectedStoragePledge, + + SectorKeyCID: v7.SectorKeyCID, + + } + return info +} + +func fromV7SectorPreCommitOnChainInfo(v7 miner7.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v7.Info), + PreCommitDeposit: v7.PreCommitDeposit, + PreCommitEpoch: v7.PreCommitEpoch, + DealWeight: v7.DealWeight, + VerifiedDealWeight: v7.VerifiedDealWeight, + } + +} + +func (s *state7) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/multisig/actor.go.template b/pkg/types/specactors/builtin/multisig/actor.go.template new file mode 100644 index 0000000000..411afa16ee --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/actor.go.template @@ -0,0 +1,143 @@ +// FETCHED FROM LOTUS: builtin/multisig/actor.go.template + +package multisig + +import ( + "fmt" + + "github.com/minio/blake2b-simd" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + msig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" + msig{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/builtin/multisig" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.MultisigActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store, signers, threshold, startEpoch, unlockDuration, initialBalance) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.MultisigActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + LockedBalance(epoch abi.ChainEpoch) (abi.TokenAmount, error) + StartEpoch() (abi.ChainEpoch, error) + UnlockDuration() (abi.ChainEpoch, error) + InitialBalance() (abi.TokenAmount, error) + Threshold() (uint64, error) + Signers() ([]address.Address, error) + + ForEachPendingTxn(func(id int64, txn Transaction) error) error + PendingTxnChanged(State) (bool, error) + + transactions() (adt.Map, error) + decodeTransaction(val *cbg.Deferred) (Transaction, error) + GetState() interface{} +} + +type Transaction = msig0.Transaction + +var Methods = builtin{{.latestVersion}}.MethodsMultisig + +func Message(version actors.Version, from address.Address) MessageBuilder { + switch version { +{{range .versions}} + case actors.Version{{.}}: + return message{{.}}{{"{"}}{{if (ge . 2)}}message0{from}{{else}}from{{end}}} +{{end}} default: + panic(fmt.Sprintf("unsupported actors version: %d", version)) + } +} + +type MessageBuilder interface { + // Create a new multisig with the specified parameters. + Create(signers []address.Address, threshold uint64, + vestingStart, vestingDuration abi.ChainEpoch, + initialAmount abi.TokenAmount) (*types.Message, error) + + // Propose a transaction to the given multisig. + Propose(msig, target address.Address, amt abi.TokenAmount, + method abi.MethodNum, params []byte) (*types.Message, error) + + // Approve a multisig transaction. The "hash" is optional. + Approve(msig address.Address, txID uint64, hash *ProposalHashData) (*types.Message, error) + + // Cancel a multisig transaction. The "hash" is optional. + Cancel(msig address.Address, txID uint64, hash *ProposalHashData) (*types.Message, error) +} + +// this type is the same between v0 and v2 +type ProposalHashData = msig{{.latestVersion}}.ProposalHashData +type ProposeReturn = msig{{.latestVersion}}.ProposeReturn +type ProposeParams = msig{{.latestVersion}}.ProposeParams +type ApproveReturn = msig{{.latestVersion}}.ApproveReturn + +func txnParams(id uint64, data *ProposalHashData) ([]byte, error) { + params := msig{{.latestVersion}}.TxnIDParams{ID: msig{{.latestVersion}}.TxnID(id)} + if data != nil { + if data.Requester.Protocol() != address.ID { + return nil, xerrors.Errorf("proposer address must be an ID address, was %s", data.Requester) + } + if data.Value.Sign() == -1 { + return nil, xerrors.Errorf("proposal value must be non-negative, was %s", data.Value) + } + if data.To == address.Undef { + return nil, xerrors.Errorf("proposed destination address must be set") + } + pser, err := data.Serialize() + if err != nil { + return nil, err + } + hash := blake2b.Sum256(pser) + params.ProposalHash = hash[:] + } + + return actors.SerializeParams(¶ms) +} diff --git a/pkg/types/specactors/builtin/multisig/diff.go b/pkg/types/specactors/builtin/multisig/diff.go new file mode 100644 index 0000000000..4d0c4639a4 --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/diff.go @@ -0,0 +1,134 @@ +package multisig + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" +) + +type PendingTransactionChanges struct { + Added []TransactionChange + Modified []TransactionModification + Removed []TransactionChange +} + +type TransactionChange struct { + TxID int64 + Tx Transaction +} + +type TransactionModification struct { + TxID int64 + From Transaction + To Transaction +} + +func DiffPendingTransactions(pre, cur State) (*PendingTransactionChanges, error) { + results := new(PendingTransactionChanges) + if changed, err := pre.PendingTxnChanged(cur); err != nil { + return nil, err + } else if !changed { // if nothing has changed then return an empty result and bail. + return results, nil + } + + pret, err := pre.transactions() + if err != nil { + return nil, err + } + + curt, err := cur.transactions() + if err != nil { + return nil, err + } + + if err := adt.DiffAdtMap(pret, curt, &transactionDiffer{results, pre, cur}); err != nil { + return nil, err + } + return results, nil +} + +type transactionDiffer struct { + Results *PendingTransactionChanges + pre, after State +} + +func (t *transactionDiffer) AsKey(key string) (abi.Keyer, error) { + txID, err := abi.ParseIntKey(key) + if err != nil { + return nil, err + } + return abi.IntKey(txID), nil +} + +func (t *transactionDiffer) Add(key string, val *cbg.Deferred) error { + txID, err := abi.ParseIntKey(key) + if err != nil { + return err + } + tx, err := t.after.decodeTransaction(val) + if err != nil { + return err + } + t.Results.Added = append(t.Results.Added, TransactionChange{ + TxID: txID, + Tx: tx, + }) + return nil +} + +func (t *transactionDiffer) Modify(key string, from, to *cbg.Deferred) error { + txID, err := abi.ParseIntKey(key) + if err != nil { + return err + } + + txFrom, err := t.pre.decodeTransaction(from) + if err != nil { + return err + } + + txTo, err := t.after.decodeTransaction(to) + if err != nil { + return err + } + + if approvalsChanged(txFrom.Approved, txTo.Approved) { + t.Results.Modified = append(t.Results.Modified, TransactionModification{ + TxID: txID, + From: txFrom, + To: txTo, + }) + } + + return nil +} + +func approvalsChanged(from, to []address.Address) bool { + if len(from) != len(to) { + return true + } + for idx := range from { + if from[idx] != to[idx] { + return true + } + } + return false +} + +func (t *transactionDiffer) Remove(key string, val *cbg.Deferred) error { + txID, err := abi.ParseIntKey(key) + if err != nil { + return err + } + tx, err := t.pre.decodeTransaction(val) + if err != nil { + return err + } + t.Results.Removed = append(t.Results.Removed, TransactionChange{ + TxID: txID, + Tx: tx, + }) + return nil +} diff --git a/pkg/types/specactors/builtin/multisig/message.go.template b/pkg/types/specactors/builtin/multisig/message.go.template new file mode 100644 index 0000000000..2aab87e4d1 --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/message.go.template @@ -0,0 +1,148 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" + init{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/init" + multisig{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/multisig" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message{{.v}} struct{ {{if (ge .v 2)}}message0{{else}}from address.Address{{end}} } + +func (m message{{.v}}) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } +{{if (le .v 1)}} + if unlockStart != 0 { + return nil, xerrors.Errorf("actors v0 does not support a non-zero vesting start time") + } +{{end}} + // Set up constructor parameters for multisig + msigParams := &multisig{{.v}}.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration,{{if (ge .v 2)}} + StartEpoch: unlockStart,{{end}} + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init{{.v}}.ExecParams{ + CodeCID: builtin{{.v}}.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin{{.v}}.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} + +{{if (le .v 1)}} + +func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, + method abi.MethodNum, params []byte) (*types.Message, error) { + + if msig == address.Undef { + return nil, xerrors.Errorf("must provide a multisig address for proposal") + } + + if to == address.Undef { + return nil, xerrors.Errorf("must provide a target address for proposal") + } + + if amt.Sign() == -1 { + return nil, xerrors.Errorf("must provide a non-negative amount for proposed send") + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + enc, actErr := actors.SerializeParams(&multisig0.ProposeParams{ + To: to, + Value: amt, + Method: method, + Params: params, + }) + if actErr != nil { + return nil, xerrors.Errorf("failed to serialize parameters: %w", actErr) + } + + return &types.Message{ + To: msig, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin0.MethodsMultisig.Propose, + Params: enc, + }, nil +} + +func (m message0) Approve(msig address.Address, txID uint64, hashData *ProposalHashData) (*types.Message, error) { + enc, err := txnParams(txID, hashData) + if err != nil { + return nil, err + } + + return &types.Message{ + To: msig, + From: m.from, + Value: types.NewInt(0), + Method: builtin0.MethodsMultisig.Approve, + Params: enc, + }, nil +} + +func (m message0) Cancel(msig address.Address, txID uint64, hashData *ProposalHashData) (*types.Message, error) { + enc, err := txnParams(txID, hashData) + if err != nil { + return nil, err + } + + return &types.Message{ + To: msig, + From: m.from, + Value: types.NewInt(0), + Method: builtin0.MethodsMultisig.Cancel, + Params: enc, + }, nil +} +{{end}} diff --git a/pkg/types/specactors/builtin/multisig/message0.go b/pkg/types/specactors/builtin/multisig/message0.go new file mode 100644 index 0000000000..cf032a58c6 --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/message0.go @@ -0,0 +1,147 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + init0 "github.com/filecoin-project/specs-actors/actors/builtin/init" + multisig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message0 struct{ from address.Address } + +func (m message0) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + if unlockStart != 0 { + return nil, xerrors.Errorf("actors v0 does not support a non-zero vesting start time") + } + + // Set up constructor parameters for multisig + msigParams := &multisig0.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init0.ExecParams{ + CodeCID: builtin0.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin0.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} + + + +func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, + method abi.MethodNum, params []byte) (*types.Message, error) { + + if msig == address.Undef { + return nil, xerrors.Errorf("must provide a multisig address for proposal") + } + + if to == address.Undef { + return nil, xerrors.Errorf("must provide a target address for proposal") + } + + if amt.Sign() == -1 { + return nil, xerrors.Errorf("must provide a non-negative amount for proposed send") + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + enc, actErr := actors.SerializeParams(&multisig0.ProposeParams{ + To: to, + Value: amt, + Method: method, + Params: params, + }) + if actErr != nil { + return nil, xerrors.Errorf("failed to serialize parameters: %w", actErr) + } + + return &types.Message{ + To: msig, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin0.MethodsMultisig.Propose, + Params: enc, + }, nil +} + +func (m message0) Approve(msig address.Address, txID uint64, hashData *ProposalHashData) (*types.Message, error) { + enc, err := txnParams(txID, hashData) + if err != nil { + return nil, err + } + + return &types.Message{ + To: msig, + From: m.from, + Value: types.NewInt(0), + Method: builtin0.MethodsMultisig.Approve, + Params: enc, + }, nil +} + +func (m message0) Cancel(msig address.Address, txID uint64, hashData *ProposalHashData) (*types.Message, error) { + enc, err := txnParams(txID, hashData) + if err != nil { + return nil, err + } + + return &types.Message{ + To: msig, + From: m.from, + Value: types.NewInt(0), + Method: builtin0.MethodsMultisig.Cancel, + Params: enc, + }, nil +} + diff --git a/pkg/types/specactors/builtin/multisig/message2.go b/pkg/types/specactors/builtin/multisig/message2.go new file mode 100644 index 0000000000..3eb6f616ad --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/message2.go @@ -0,0 +1,75 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" + multisig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message2 struct{ message0 } + +func (m message2) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig2.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init2.ExecParams{ + CodeCID: builtin2.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin2.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} + + diff --git a/pkg/types/specactors/builtin/multisig/message3.go b/pkg/types/specactors/builtin/multisig/message3.go new file mode 100644 index 0000000000..8c18faf7bd --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/message3.go @@ -0,0 +1,75 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + init3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/init" + multisig3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/multisig" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message3 struct{ message0 } + +func (m message3) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig3.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init3.ExecParams{ + CodeCID: builtin3.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin3.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} + + diff --git a/pkg/types/specactors/builtin/multisig/message4.go b/pkg/types/specactors/builtin/multisig/message4.go new file mode 100644 index 0000000000..d1f69214b1 --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/message4.go @@ -0,0 +1,75 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + init4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/init" + multisig4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/multisig" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message4 struct{ message0 } + +func (m message4) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig4.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init4.ExecParams{ + CodeCID: builtin4.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin4.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} + + diff --git a/pkg/types/specactors/builtin/multisig/message5.go b/pkg/types/specactors/builtin/multisig/message5.go new file mode 100644 index 0000000000..a83021a2ec --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/message5.go @@ -0,0 +1,75 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + init5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/init" + multisig5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/multisig" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message5 struct{ message0 } + +func (m message5) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig5.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init5.ExecParams{ + CodeCID: builtin5.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin5.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} + + diff --git a/pkg/types/specactors/builtin/multisig/message6.go b/pkg/types/specactors/builtin/multisig/message6.go new file mode 100644 index 0000000000..79d0afc500 --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/message6.go @@ -0,0 +1,75 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + init6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/init" + multisig6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/multisig" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message6 struct{ message0 } + +func (m message6) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig6.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init6.ExecParams{ + CodeCID: builtin6.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin6.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} + + diff --git a/pkg/types/specactors/builtin/multisig/message7.go b/pkg/types/specactors/builtin/multisig/message7.go new file mode 100644 index 0000000000..409754d1d8 --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/message7.go @@ -0,0 +1,75 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + init7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/init" + multisig7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/multisig" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message7 struct{ message0 } + +func (m message7) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig7.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init7.ExecParams{ + CodeCID: builtin7.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin7.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} + + diff --git a/pkg/types/specactors/builtin/multisig/multisig.go b/pkg/types/specactors/builtin/multisig/multisig.go new file mode 100644 index 0000000000..5c3740482f --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/multisig.go @@ -0,0 +1,251 @@ +// FETCHED FROM LOTUS: builtin/multisig/actor.go.template + +package multisig + +import ( + "fmt" + + "github.com/minio/blake2b-simd" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + msig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" + msig7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/multisig" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +func init() { + + builtin.RegisterActorState(builtin0.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.MultisigActorCodeID: + return load0(store, act.Head) + + case builtin2.MultisigActorCodeID: + return load2(store, act.Head) + + case builtin3.MultisigActorCodeID: + return load3(store, act.Head) + + case builtin4.MultisigActorCodeID: + return load4(store, act.Head) + + case builtin5.MultisigActorCodeID: + return load5(store, act.Head) + + case builtin6.MultisigActorCodeID: + return load6(store, act.Head) + + case builtin7.MultisigActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + switch av { + + case actors.Version0: + return make0(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version2: + return make2(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version3: + return make3(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version4: + return make4(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version5: + return make5(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version6: + return make6(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version7: + return make7(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.MultisigActorCodeID, nil + + case actors.Version2: + return builtin2.MultisigActorCodeID, nil + + case actors.Version3: + return builtin3.MultisigActorCodeID, nil + + case actors.Version4: + return builtin4.MultisigActorCodeID, nil + + case actors.Version5: + return builtin5.MultisigActorCodeID, nil + + case actors.Version6: + return builtin6.MultisigActorCodeID, nil + + case actors.Version7: + return builtin7.MultisigActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + LockedBalance(epoch abi.ChainEpoch) (abi.TokenAmount, error) + StartEpoch() (abi.ChainEpoch, error) + UnlockDuration() (abi.ChainEpoch, error) + InitialBalance() (abi.TokenAmount, error) + Threshold() (uint64, error) + Signers() ([]address.Address, error) + + ForEachPendingTxn(func(id int64, txn Transaction) error) error + PendingTxnChanged(State) (bool, error) + + transactions() (adt.Map, error) + decodeTransaction(val *cbg.Deferred) (Transaction, error) + GetState() interface{} +} + +type Transaction = msig0.Transaction + +var Methods = builtin7.MethodsMultisig + +func Message(version actors.Version, from address.Address) MessageBuilder { + switch version { + + case actors.Version0: + return message0{from} + + case actors.Version2: + return message2{message0{from}} + + case actors.Version3: + return message3{message0{from}} + + case actors.Version4: + return message4{message0{from}} + + case actors.Version5: + return message5{message0{from}} + + case actors.Version6: + return message6{message0{from}} + + case actors.Version7: + return message7{message0{from}} + default: + panic(fmt.Sprintf("unsupported actors version: %d", version)) + } +} + +type MessageBuilder interface { + // Create a new multisig with the specified parameters. + Create(signers []address.Address, threshold uint64, + vestingStart, vestingDuration abi.ChainEpoch, + initialAmount abi.TokenAmount) (*types.Message, error) + + // Propose a transaction to the given multisig. + Propose(msig, target address.Address, amt abi.TokenAmount, + method abi.MethodNum, params []byte) (*types.Message, error) + + // Approve a multisig transaction. The "hash" is optional. + Approve(msig address.Address, txID uint64, hash *ProposalHashData) (*types.Message, error) + + // Cancel a multisig transaction. The "hash" is optional. + Cancel(msig address.Address, txID uint64, hash *ProposalHashData) (*types.Message, error) +} + +// this type is the same between v0 and v2 +type ProposalHashData = msig7.ProposalHashData +type ProposeReturn = msig7.ProposeReturn +type ProposeParams = msig7.ProposeParams +type ApproveReturn = msig7.ApproveReturn + +func txnParams(id uint64, data *ProposalHashData) ([]byte, error) { + params := msig7.TxnIDParams{ID: msig7.TxnID(id)} + if data != nil { + if data.Requester.Protocol() != address.ID { + return nil, xerrors.Errorf("proposer address must be an ID address, was %s", data.Requester) + } + if data.Value.Sign() == -1 { + return nil, xerrors.Errorf("proposal value must be non-negative, was %s", data.Value) + } + if data.To == address.Undef { + return nil, xerrors.Errorf("proposed destination address must be set") + } + pser, err := data.Serialize() + if err != nil { + return nil, err + } + hash := blake2b.Sum256(pser) + params.ProposalHash = hash[:] + } + + return actors.SerializeParams(¶ms) +} diff --git a/pkg/types/specactors/builtin/multisig/state.go.template b/pkg/types/specactors/builtin/multisig/state.go.template new file mode 100644 index 0000000000..b3d6122fc3 --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/state.go.template @@ -0,0 +1,129 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + +{{if (ge .v 3)}} + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" +{{end}} + msig{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/multisig" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state{{.v}}{store: store} + out.State = msig{{.v}}.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + {{if (le .v 2)}} + em, err := adt{{.v}}.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + {{else}} + em, err := adt{{.v}}.StoreEmptyMap(store, builtin{{.v}}.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + {{end}} + return &out, nil +} + +type state{{.v}} struct { + msig{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state{{.v}}) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state{{.v}}) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state{{.v}}) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state{{.v}}) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state{{.v}}) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state{{.v}}) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt{{.v}}.AsMap(s.store, s.State.PendingTxns{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) + if err != nil { + return err + } + var out msig{{.v}}.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state{{.v}}) PendingTxnChanged(other State) (bool, error) { + other{{.v}}, ok := other.(*state{{.v}}) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other{{.v}}.PendingTxns), nil +} + +func (s *state{{.v}}) transactions() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.PendingTxns{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig{{.v}}.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/multisig/v0.go b/pkg/types/specactors/builtin/multisig/v0.go new file mode 100644 index 0000000000..4fce5992e8 --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/v0.go @@ -0,0 +1,120 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + msig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state0{store: store} + out.State = msig0.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt0.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state0 struct { + msig0.State + store adt.Store +} + +func (s *state0) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state0) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state0) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state0) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state0) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state0) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state0) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt0.AsMap(s.store, s.State.PendingTxns) + if err != nil { + return err + } + var out msig0.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state0) PendingTxnChanged(other State) (bool, error) { + other0, ok := other.(*state0) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other0.PendingTxns), nil +} + +func (s *state0) transactions() (adt.Map, error) { + return adt0.AsMap(s.store, s.PendingTxns) +} + +func (s *state0) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig0.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state0) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/multisig/v2.go b/pkg/types/specactors/builtin/multisig/v2.go new file mode 100644 index 0000000000..f091bf872f --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/v2.go @@ -0,0 +1,120 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + msig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state2{store: store} + out.State = msig2.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt2.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state2 struct { + msig2.State + store adt.Store +} + +func (s *state2) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state2) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state2) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state2) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state2) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state2) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state2) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt2.AsMap(s.store, s.State.PendingTxns) + if err != nil { + return err + } + var out msig2.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state2) PendingTxnChanged(other State) (bool, error) { + other2, ok := other.(*state2) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other2.PendingTxns), nil +} + +func (s *state2) transactions() (adt.Map, error) { + return adt2.AsMap(s.store, s.PendingTxns) +} + +func (s *state2) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig2.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state2) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/multisig/v3.go b/pkg/types/specactors/builtin/multisig/v3.go new file mode 100644 index 0000000000..60d95149fd --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/v3.go @@ -0,0 +1,122 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + msig3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/multisig" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state3{store: store} + out.State = msig3.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt3.StoreEmptyMap(store, builtin3.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state3 struct { + msig3.State + store adt.Store +} + +func (s *state3) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state3) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state3) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state3) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state3) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state3) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state3) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt3.AsMap(s.store, s.State.PendingTxns, builtin3.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig3.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state3) PendingTxnChanged(other State) (bool, error) { + other3, ok := other.(*state3) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other3.PendingTxns), nil +} + +func (s *state3) transactions() (adt.Map, error) { + return adt3.AsMap(s.store, s.PendingTxns, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig3.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state3) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/multisig/v4.go b/pkg/types/specactors/builtin/multisig/v4.go new file mode 100644 index 0000000000..31840e1a01 --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/v4.go @@ -0,0 +1,122 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + msig4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/multisig" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state4{store: store} + out.State = msig4.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt4.StoreEmptyMap(store, builtin4.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state4 struct { + msig4.State + store adt.Store +} + +func (s *state4) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state4) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state4) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state4) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state4) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state4) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state4) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt4.AsMap(s.store, s.State.PendingTxns, builtin4.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig4.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state4) PendingTxnChanged(other State) (bool, error) { + other4, ok := other.(*state4) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other4.PendingTxns), nil +} + +func (s *state4) transactions() (adt.Map, error) { + return adt4.AsMap(s.store, s.PendingTxns, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig4.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state4) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/multisig/v5.go b/pkg/types/specactors/builtin/multisig/v5.go new file mode 100644 index 0000000000..6d461c3949 --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/v5.go @@ -0,0 +1,122 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + msig5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/multisig" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state5{store: store} + out.State = msig5.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt5.StoreEmptyMap(store, builtin5.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state5 struct { + msig5.State + store adt.Store +} + +func (s *state5) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state5) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state5) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state5) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state5) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state5) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state5) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt5.AsMap(s.store, s.State.PendingTxns, builtin5.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig5.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state5) PendingTxnChanged(other State) (bool, error) { + other5, ok := other.(*state5) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other5.PendingTxns), nil +} + +func (s *state5) transactions() (adt.Map, error) { + return adt5.AsMap(s.store, s.PendingTxns, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig5.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state5) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/multisig/v6.go b/pkg/types/specactors/builtin/multisig/v6.go new file mode 100644 index 0000000000..3df27e97d3 --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/v6.go @@ -0,0 +1,122 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + msig6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/multisig" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state6{store: store} + out.State = msig6.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt6.StoreEmptyMap(store, builtin6.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state6 struct { + msig6.State + store adt.Store +} + +func (s *state6) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state6) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state6) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state6) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state6) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state6) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state6) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt6.AsMap(s.store, s.State.PendingTxns, builtin6.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig6.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state6) PendingTxnChanged(other State) (bool, error) { + other6, ok := other.(*state6) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other6.PendingTxns), nil +} + +func (s *state6) transactions() (adt.Map, error) { + return adt6.AsMap(s.store, s.PendingTxns, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig6.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state6) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/multisig/v7.go b/pkg/types/specactors/builtin/multisig/v7.go new file mode 100644 index 0000000000..c5dd025fba --- /dev/null +++ b/pkg/types/specactors/builtin/multisig/v7.go @@ -0,0 +1,122 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + msig7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/multisig" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state7{store: store} + out.State = msig7.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt7.StoreEmptyMap(store, builtin7.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state7 struct { + msig7.State + store adt.Store +} + +func (s *state7) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state7) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state7) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state7) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state7) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state7) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state7) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt7.AsMap(s.store, s.State.PendingTxns, builtin7.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig7.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state7) PendingTxnChanged(other State) (bool, error) { + other7, ok := other.(*state7) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other7.PendingTxns), nil +} + +func (s *state7) transactions() (adt.Map, error) { + return adt7.AsMap(s.store, s.PendingTxns, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig7.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state7) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/paych/actor.go.template b/pkg/types/specactors/builtin/paych/actor.go.template new file mode 100644 index 0000000000..0c84ec4c59 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/actor.go.template @@ -0,0 +1,134 @@ +// FETCHED FROM LOTUS: builtin/paych/actor.go.template + +package paych + +import ( + "encoding/base64" + "fmt" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + big "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + ipldcbor "github.com/ipfs/go-ipld-cbor" + + paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +// Load returns an abstract copy of payment channel state, irregardless of actor version +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.PaymentChannelActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.PaymentChannelActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +// State is an abstract version of payment channel state that works across +// versions +type State interface { + cbor.Marshaler + // Channel owner, who has funded the actor + From() (address.Address, error) + // Recipient of payouts from channel + To() (address.Address, error) + + // Height at which the channel can be `Collected` + SettlingAt() (abi.ChainEpoch, error) + + // Amount successfully redeemed through the payment channel, paid out on `Collect()` + ToSend() (abi.TokenAmount, error) + + // Get total number of lanes + LaneCount() (uint64, error) + + // Iterate lane states + ForEachLaneState(cb func(idx uint64, dl LaneState) error) error + + GetState() interface{} +} + +// LaneState is an abstract copy of the state of a single lane +type LaneState interface { + Redeemed() (big.Int, error) + Nonce() (uint64, error) +} + +type SignedVoucher = paych0.SignedVoucher +type ModVerifyParams = paych0.ModVerifyParams + +// DecodeSignedVoucher decodes base64 encoded signed voucher. +func DecodeSignedVoucher(s string) (*SignedVoucher, error) { + data, err := base64.RawURLEncoding.DecodeString(s) + if err != nil { + return nil, err + } + + var sv SignedVoucher + if err := ipldcbor.DecodeInto(data, &sv); err != nil { + return nil, err + } + + return &sv, nil +} + +var Methods = builtin{{.latestVersion}}.MethodsPaych + +func Message(version actors.Version, from address.Address) MessageBuilder { + switch version { +{{range .versions}} + case actors.Version{{.}}: + return message{{.}}{from} +{{end}} + default: + panic(fmt.Sprintf("unsupported actors version: %d", version)) + } +} + +type MessageBuilder interface { + Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) + Update(paych address.Address, voucher *SignedVoucher, secret []byte) (*types.Message, error) + Settle(paych address.Address) (*types.Message, error) + Collect(paych address.Address) (*types.Message, error) +} diff --git a/pkg/types/specactors/builtin/paych/message.go.template b/pkg/types/specactors/builtin/paych/message.go.template new file mode 100644 index 0000000000..23091d71fc --- /dev/null +++ b/pkg/types/specactors/builtin/paych/message.go.template @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" + init{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/init" + paych{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/paych" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message{{.v}} struct{ from address.Address } + +func (m message{{.v}}) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych{{.v}}.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init{{.v}}.ExecParams{ + CodeCID: builtin{{.v}}.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin{{.v}}.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message{{.v}}) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych{{.v}}.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin{{.v}}.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message{{.v}}) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin{{.v}}.MethodsPaych.Settle, + }, nil +} + +func (m message{{.v}}) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin{{.v}}.MethodsPaych.Collect, + }, nil +} diff --git a/pkg/types/specactors/builtin/paych/message0.go b/pkg/types/specactors/builtin/paych/message0.go new file mode 100644 index 0000000000..2979d6870f --- /dev/null +++ b/pkg/types/specactors/builtin/paych/message0.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + init0 "github.com/filecoin-project/specs-actors/actors/builtin/init" + paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message0 struct{ from address.Address } + +func (m message0) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych0.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init0.ExecParams{ + CodeCID: builtin0.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin0.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message0) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych0.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin0.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message0) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin0.MethodsPaych.Settle, + }, nil +} + +func (m message0) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin0.MethodsPaych.Collect, + }, nil +} diff --git a/pkg/types/specactors/builtin/paych/message2.go b/pkg/types/specactors/builtin/paych/message2.go new file mode 100644 index 0000000000..bbedf81c81 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/message2.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" + paych2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/paych" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message2 struct{ from address.Address } + +func (m message2) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych2.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init2.ExecParams{ + CodeCID: builtin2.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin2.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message2) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych2.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin2.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message2) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin2.MethodsPaych.Settle, + }, nil +} + +func (m message2) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin2.MethodsPaych.Collect, + }, nil +} diff --git a/pkg/types/specactors/builtin/paych/message3.go b/pkg/types/specactors/builtin/paych/message3.go new file mode 100644 index 0000000000..5179766423 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/message3.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + init3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/init" + paych3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/paych" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message3 struct{ from address.Address } + +func (m message3) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych3.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init3.ExecParams{ + CodeCID: builtin3.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin3.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message3) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych3.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin3.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message3) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin3.MethodsPaych.Settle, + }, nil +} + +func (m message3) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin3.MethodsPaych.Collect, + }, nil +} diff --git a/pkg/types/specactors/builtin/paych/message4.go b/pkg/types/specactors/builtin/paych/message4.go new file mode 100644 index 0000000000..d6478fecb9 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/message4.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + init4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/init" + paych4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/paych" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message4 struct{ from address.Address } + +func (m message4) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych4.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init4.ExecParams{ + CodeCID: builtin4.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin4.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message4) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych4.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin4.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message4) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin4.MethodsPaych.Settle, + }, nil +} + +func (m message4) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin4.MethodsPaych.Collect, + }, nil +} diff --git a/pkg/types/specactors/builtin/paych/message5.go b/pkg/types/specactors/builtin/paych/message5.go new file mode 100644 index 0000000000..c7364383e7 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/message5.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + init5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/init" + paych5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/paych" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message5 struct{ from address.Address } + +func (m message5) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych5.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init5.ExecParams{ + CodeCID: builtin5.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin5.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message5) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych5.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin5.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message5) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin5.MethodsPaych.Settle, + }, nil +} + +func (m message5) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin5.MethodsPaych.Collect, + }, nil +} diff --git a/pkg/types/specactors/builtin/paych/message6.go b/pkg/types/specactors/builtin/paych/message6.go new file mode 100644 index 0000000000..f561103ec2 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/message6.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + init6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/init" + paych6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/paych" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message6 struct{ from address.Address } + +func (m message6) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych6.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init6.ExecParams{ + CodeCID: builtin6.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin6.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message6) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych6.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin6.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message6) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin6.MethodsPaych.Settle, + }, nil +} + +func (m message6) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin6.MethodsPaych.Collect, + }, nil +} diff --git a/pkg/types/specactors/builtin/paych/message7.go b/pkg/types/specactors/builtin/paych/message7.go new file mode 100644 index 0000000000..59ae295c77 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/message7.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + init7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/init" + paych7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/paych" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + init_ "github.com/filecoin-project/venus/pkg/types/specactors/builtin/init" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +type message7 struct{ from address.Address } + +func (m message7) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych7.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init7.ExecParams{ + CodeCID: builtin7.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin7.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message7) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych7.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin7.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message7) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin7.MethodsPaych.Settle, + }, nil +} + +func (m message7) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin7.MethodsPaych.Collect, + }, nil +} diff --git a/pkg/types/specactors/builtin/paych/mock/mock.go b/pkg/types/specactors/builtin/paych/mock/mock.go new file mode 100644 index 0000000000..2b4d4898d7 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/mock/mock.go @@ -0,0 +1,93 @@ +package mock + +import ( + "io" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/pkg/types/specactors/builtin/paych" +) + +type mockState struct { + from address.Address + to address.Address + settlingAt abi.ChainEpoch + toSend abi.TokenAmount + lanes map[uint64]paych.LaneState +} + +func (ms *mockState) GetState() interface{} { + panic("implement me") +} + +type mockLaneState struct { + redeemed big.Int + nonce uint64 +} + +// NewMockPayChState constructs a state for a payment channel with the set fixed values +// that satisfies the paych.State interface. +func NewMockPayChState(from address.Address, + to address.Address, + settlingAt abi.ChainEpoch, + lanes map[uint64]paych.LaneState, +) paych.State { + return &mockState{from: from, to: to, settlingAt: settlingAt, toSend: big.NewInt(0), lanes: lanes} +} + +// NewMockLaneState constructs a state for a payment channel lane with the set fixed values +// that satisfies the paych.LaneState interface. Useful for populating lanes when +// calling NewMockPayChState +func NewMockLaneState(redeemed big.Int, nonce uint64) paych.LaneState { + return &mockLaneState{redeemed, nonce} +} + +func (ms *mockState) MarshalCBOR(io.Writer) error { + panic("not implemented") +} + +// Channel owner, who has funded the actor +func (ms *mockState) From() (address.Address, error) { + return ms.from, nil +} + +// Recipient of payouts from channel +func (ms *mockState) To() (address.Address, error) { + return ms.to, nil +} + +// Height at which the channel can be `Collected` +func (ms *mockState) SettlingAt() (abi.ChainEpoch, error) { + return ms.settlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (ms *mockState) ToSend() (abi.TokenAmount, error) { + return ms.toSend, nil +} + +// Get total number of lanes +func (ms *mockState) LaneCount() (uint64, error) { + return uint64(len(ms.lanes)), nil +} + +// Iterate lane states +func (ms *mockState) ForEachLaneState(cb func(idx uint64, dl paych.LaneState) error) error { + var lastErr error + for lane, state := range ms.lanes { + if err := cb(lane, state); err != nil { + lastErr = err + } + } + return lastErr +} + +func (mls *mockLaneState) Redeemed() (big.Int, error) { + return mls.redeemed, nil +} + +func (mls *mockLaneState) Nonce() (uint64, error) { + return mls.nonce, nil +} diff --git a/pkg/types/specactors/builtin/paych/paych.go b/pkg/types/specactors/builtin/paych/paych.go new file mode 100644 index 0000000000..e2db314594 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/paych.go @@ -0,0 +1,242 @@ +// FETCHED FROM LOTUS: builtin/paych/actor.go.template + +package paych + +import ( + "encoding/base64" + "fmt" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + big "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + ipldcbor "github.com/ipfs/go-ipld-cbor" + + paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +func init() { + + builtin.RegisterActorState(builtin0.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +// Load returns an abstract copy of payment channel state, irregardless of actor version +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.PaymentChannelActorCodeID: + return load0(store, act.Head) + + case builtin2.PaymentChannelActorCodeID: + return load2(store, act.Head) + + case builtin3.PaymentChannelActorCodeID: + return load3(store, act.Head) + + case builtin4.PaymentChannelActorCodeID: + return load4(store, act.Head) + + case builtin5.PaymentChannelActorCodeID: + return load5(store, act.Head) + + case builtin6.PaymentChannelActorCodeID: + return load6(store, act.Head) + + case builtin7.PaymentChannelActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.PaymentChannelActorCodeID, nil + + case actors.Version2: + return builtin2.PaymentChannelActorCodeID, nil + + case actors.Version3: + return builtin3.PaymentChannelActorCodeID, nil + + case actors.Version4: + return builtin4.PaymentChannelActorCodeID, nil + + case actors.Version5: + return builtin5.PaymentChannelActorCodeID, nil + + case actors.Version6: + return builtin6.PaymentChannelActorCodeID, nil + + case actors.Version7: + return builtin7.PaymentChannelActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +// State is an abstract version of payment channel state that works across +// versions +type State interface { + cbor.Marshaler + // Channel owner, who has funded the actor + From() (address.Address, error) + // Recipient of payouts from channel + To() (address.Address, error) + + // Height at which the channel can be `Collected` + SettlingAt() (abi.ChainEpoch, error) + + // Amount successfully redeemed through the payment channel, paid out on `Collect()` + ToSend() (abi.TokenAmount, error) + + // Get total number of lanes + LaneCount() (uint64, error) + + // Iterate lane states + ForEachLaneState(cb func(idx uint64, dl LaneState) error) error + + GetState() interface{} +} + +// LaneState is an abstract copy of the state of a single lane +type LaneState interface { + Redeemed() (big.Int, error) + Nonce() (uint64, error) +} + +type SignedVoucher = paych0.SignedVoucher +type ModVerifyParams = paych0.ModVerifyParams + +// DecodeSignedVoucher decodes base64 encoded signed voucher. +func DecodeSignedVoucher(s string) (*SignedVoucher, error) { + data, err := base64.RawURLEncoding.DecodeString(s) + if err != nil { + return nil, err + } + + var sv SignedVoucher + if err := ipldcbor.DecodeInto(data, &sv); err != nil { + return nil, err + } + + return &sv, nil +} + +var Methods = builtin7.MethodsPaych + +func Message(version actors.Version, from address.Address) MessageBuilder { + switch version { + + case actors.Version0: + return message0{from} + + case actors.Version2: + return message2{from} + + case actors.Version3: + return message3{from} + + case actors.Version4: + return message4{from} + + case actors.Version5: + return message5{from} + + case actors.Version6: + return message6{from} + + case actors.Version7: + return message7{from} + + default: + panic(fmt.Sprintf("unsupported actors version: %d", version)) + } +} + +type MessageBuilder interface { + Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) + Update(paych address.Address, voucher *SignedVoucher, secret []byte) (*types.Message, error) + Settle(paych address.Address) (*types.Message, error) + Collect(paych address.Address) (*types.Message, error) +} diff --git a/pkg/types/specactors/builtin/paych/state.go.template b/pkg/types/specactors/builtin/paych/state.go.template new file mode 100644 index 0000000000..75dde50bdf --- /dev/null +++ b/pkg/types/specactors/builtin/paych/state.go.template @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + paych{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/paych" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + out.State = paych{{.v}}.State{} + return &out, nil +} + +type state{{.v}} struct { + paych{{.v}}.State + store adt.Store + lsAmt *adt{{.v}}.Array +} + +// Channel owner, who has funded the actor +func (s *state{{.v}}) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state{{.v}}) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state{{.v}}) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state{{.v}}) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state{{.v}}) getOrLoadLsAmt() (*adt{{.v}}.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt{{.v}}.AsArray(s.store, s.State.LaneStates{{if (ge .v 3)}}, paych{{.v}}.LaneStatesAmtBitwidth{{end}}) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state{{.v}}) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state{{.v}}) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych{{.v}}.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState{{.v}}{ls}) + }) +} + +type laneState{{.v}} struct { + paych{{.v}}.LaneState +} + +func (ls *laneState{{.v}}) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState{{.v}}) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/pkg/types/specactors/builtin/paych/v0.go b/pkg/types/specactors/builtin/paych/v0.go new file mode 100644 index 0000000000..09a9dd7adc --- /dev/null +++ b/pkg/types/specactors/builtin/paych/v0.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + out.State = paych0.State{} + return &out, nil +} + +type state0 struct { + paych0.State + store adt.Store + lsAmt *adt0.Array +} + +// Channel owner, who has funded the actor +func (s *state0) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state0) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state0) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state0) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state0) getOrLoadLsAmt() (*adt0.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt0.AsArray(s.store, s.State.LaneStates) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state0) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state0) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state0) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych0.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState0{ls}) + }) +} + +type laneState0 struct { + paych0.LaneState +} + +func (ls *laneState0) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState0) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/pkg/types/specactors/builtin/paych/v2.go b/pkg/types/specactors/builtin/paych/v2.go new file mode 100644 index 0000000000..07fafb1e97 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/v2.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + paych2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/paych" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + out.State = paych2.State{} + return &out, nil +} + +type state2 struct { + paych2.State + store adt.Store + lsAmt *adt2.Array +} + +// Channel owner, who has funded the actor +func (s *state2) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state2) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state2) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state2) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state2) getOrLoadLsAmt() (*adt2.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt2.AsArray(s.store, s.State.LaneStates) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state2) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state2) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state2) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych2.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState2{ls}) + }) +} + +type laneState2 struct { + paych2.LaneState +} + +func (ls *laneState2) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState2) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/pkg/types/specactors/builtin/paych/v3.go b/pkg/types/specactors/builtin/paych/v3.go new file mode 100644 index 0000000000..7145277826 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/v3.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + paych3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/paych" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + out.State = paych3.State{} + return &out, nil +} + +type state3 struct { + paych3.State + store adt.Store + lsAmt *adt3.Array +} + +// Channel owner, who has funded the actor +func (s *state3) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state3) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state3) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state3) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state3) getOrLoadLsAmt() (*adt3.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt3.AsArray(s.store, s.State.LaneStates, paych3.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state3) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state3) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state3) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych3.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState3{ls}) + }) +} + +type laneState3 struct { + paych3.LaneState +} + +func (ls *laneState3) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState3) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/pkg/types/specactors/builtin/paych/v4.go b/pkg/types/specactors/builtin/paych/v4.go new file mode 100644 index 0000000000..901a714c2d --- /dev/null +++ b/pkg/types/specactors/builtin/paych/v4.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + paych4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/paych" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + out.State = paych4.State{} + return &out, nil +} + +type state4 struct { + paych4.State + store adt.Store + lsAmt *adt4.Array +} + +// Channel owner, who has funded the actor +func (s *state4) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state4) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state4) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state4) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state4) getOrLoadLsAmt() (*adt4.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt4.AsArray(s.store, s.State.LaneStates, paych4.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state4) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state4) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state4) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych4.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState4{ls}) + }) +} + +type laneState4 struct { + paych4.LaneState +} + +func (ls *laneState4) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState4) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/pkg/types/specactors/builtin/paych/v5.go b/pkg/types/specactors/builtin/paych/v5.go new file mode 100644 index 0000000000..7bab8e2407 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/v5.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + paych5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/paych" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + out.State = paych5.State{} + return &out, nil +} + +type state5 struct { + paych5.State + store adt.Store + lsAmt *adt5.Array +} + +// Channel owner, who has funded the actor +func (s *state5) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state5) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state5) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state5) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state5) getOrLoadLsAmt() (*adt5.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt5.AsArray(s.store, s.State.LaneStates, paych5.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state5) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state5) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state5) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych5.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState5{ls}) + }) +} + +type laneState5 struct { + paych5.LaneState +} + +func (ls *laneState5) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState5) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/pkg/types/specactors/builtin/paych/v6.go b/pkg/types/specactors/builtin/paych/v6.go new file mode 100644 index 0000000000..322e0478e9 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/v6.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + paych6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/paych" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + out.State = paych6.State{} + return &out, nil +} + +type state6 struct { + paych6.State + store adt.Store + lsAmt *adt6.Array +} + +// Channel owner, who has funded the actor +func (s *state6) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state6) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state6) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state6) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state6) getOrLoadLsAmt() (*adt6.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt6.AsArray(s.store, s.State.LaneStates, paych6.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state6) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state6) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state6) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych6.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState6{ls}) + }) +} + +type laneState6 struct { + paych6.LaneState +} + +func (ls *laneState6) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState6) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/pkg/types/specactors/builtin/paych/v7.go b/pkg/types/specactors/builtin/paych/v7.go new file mode 100644 index 0000000000..bbad7a4e32 --- /dev/null +++ b/pkg/types/specactors/builtin/paych/v7.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + paych7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/paych" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + out.State = paych7.State{} + return &out, nil +} + +type state7 struct { + paych7.State + store adt.Store + lsAmt *adt7.Array +} + +// Channel owner, who has funded the actor +func (s *state7) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state7) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state7) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state7) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state7) getOrLoadLsAmt() (*adt7.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt7.AsArray(s.store, s.State.LaneStates, paych7.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state7) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state7) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state7) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych7.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState7{ls}) + }) +} + +type laneState7 struct { + paych7.LaneState +} + +func (ls *laneState7) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState7) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/pkg/types/specactors/builtin/power/actor.go.template b/pkg/types/specactors/builtin/power/actor.go.template new file mode 100644 index 0000000000..7d1ffd2693 --- /dev/null +++ b/pkg/types/specactors/builtin/power/actor.go.template @@ -0,0 +1,109 @@ +// FETCHED FROM LOTUS: builtin/power/actor.go.template + +package power + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +var ( + Address = builtin{{.latestVersion}}.StoragePowerActorAddr + Methods = builtin{{.latestVersion}}.MethodsPower +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.StoragePowerActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.StoragePowerActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + TotalLocked() (abi.TokenAmount, error) + TotalPower() (Claim, error) + TotalCommitted() (Claim, error) + TotalPowerSmoothed() (builtin.FilterEstimate, error) + GetState() interface{} + + // MinerCounts returns the number of miners. Participating is the number + // with power above the minimum miner threshold. + MinerCounts() (participating, total uint64, err error) + MinerPower(address.Address) (Claim, bool, error) + MinerNominalPowerMeetsConsensusMinimum(address.Address) (bool, error) + ListAllMiners() ([]address.Address, error) + ForEachClaim(func(miner address.Address, claim Claim) error) error + ClaimsChanged(State) (bool, error) + + // Testing or genesis setup only + SetTotalQualityAdjPower(abi.StoragePower) error + SetTotalRawBytePower(abi.StoragePower) error + SetThisEpochQualityAdjPower(abi.StoragePower) error + SetThisEpochRawBytePower(abi.StoragePower) error + + // Diff helpers. Used by Diff* functions internally. + claims() (adt.Map, error) + decodeClaim(*cbg.Deferred) (Claim, error) +} + +type Claim struct { + // Sum of raw byte power for a miner's sectors. + RawBytePower abi.StoragePower + + // Sum of quality adjusted power for a miner's sectors. + QualityAdjPower abi.StoragePower +} + +func AddClaims(a Claim, b Claim) Claim { + return Claim{ + RawBytePower: big.Add(a.RawBytePower, b.RawBytePower), + QualityAdjPower: big.Add(a.QualityAdjPower, b.QualityAdjPower), + } +} diff --git a/pkg/types/specactors/builtin/power/diff.go b/pkg/types/specactors/builtin/power/diff.go new file mode 100644 index 0000000000..07d8768390 --- /dev/null +++ b/pkg/types/specactors/builtin/power/diff.go @@ -0,0 +1,117 @@ +package power + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" +) + +type ClaimChanges struct { + Added []ClaimInfo + Modified []ClaimModification + Removed []ClaimInfo +} + +type ClaimModification struct { + Miner address.Address + From Claim + To Claim +} + +type ClaimInfo struct { + Miner address.Address + Claim Claim +} + +func DiffClaims(pre, cur State) (*ClaimChanges, error) { + results := new(ClaimChanges) + + prec, err := pre.claims() + if err != nil { + return nil, err + } + + curc, err := cur.claims() + if err != nil { + return nil, err + } + + if err := adt.DiffAdtMap(prec, curc, &claimDiffer{results, pre, cur}); err != nil { + return nil, err + } + + return results, nil +} + +type claimDiffer struct { + Results *ClaimChanges + pre, after State +} + +func (c *claimDiffer) AsKey(key string) (abi.Keyer, error) { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return nil, err + } + return abi.AddrKey(addr), nil +} + +func (c *claimDiffer) Add(key string, val *cbg.Deferred) error { + ci, err := c.after.decodeClaim(val) + if err != nil { + return err + } + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + c.Results.Added = append(c.Results.Added, ClaimInfo{ + Miner: addr, + Claim: ci, + }) + return nil +} + +func (c *claimDiffer) Modify(key string, from, to *cbg.Deferred) error { + ciFrom, err := c.pre.decodeClaim(from) + if err != nil { + return err + } + + ciTo, err := c.after.decodeClaim(to) + if err != nil { + return err + } + + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + + if ciFrom != ciTo { + c.Results.Modified = append(c.Results.Modified, ClaimModification{ + Miner: addr, + From: ciFrom, + To: ciTo, + }) + } + return nil +} + +func (c *claimDiffer) Remove(key string, val *cbg.Deferred) error { + ci, err := c.after.decodeClaim(val) + if err != nil { + return err + } + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + c.Results.Removed = append(c.Results.Removed, ClaimInfo{ + Miner: addr, + Claim: ci, + }) + return nil +} diff --git a/pkg/types/specactors/builtin/power/power.go b/pkg/types/specactors/builtin/power/power.go new file mode 100644 index 0000000000..ac161d59d9 --- /dev/null +++ b/pkg/types/specactors/builtin/power/power.go @@ -0,0 +1,199 @@ +// FETCHED FROM LOTUS: builtin/power/actor.go.template + +package power + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + +) + +func init() { + + builtin.RegisterActorState(builtin0.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +var ( + Address = builtin7.StoragePowerActorAddr + Methods = builtin7.MethodsPower +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.StoragePowerActorCodeID: + return load0(store, act.Head) + + case builtin2.StoragePowerActorCodeID: + return load2(store, act.Head) + + case builtin3.StoragePowerActorCodeID: + return load3(store, act.Head) + + case builtin4.StoragePowerActorCodeID: + return load4(store, act.Head) + + case builtin5.StoragePowerActorCodeID: + return load5(store, act.Head) + + case builtin6.StoragePowerActorCodeID: + return load6(store, act.Head) + + case builtin7.StoragePowerActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.StoragePowerActorCodeID, nil + + case actors.Version2: + return builtin2.StoragePowerActorCodeID, nil + + case actors.Version3: + return builtin3.StoragePowerActorCodeID, nil + + case actors.Version4: + return builtin4.StoragePowerActorCodeID, nil + + case actors.Version5: + return builtin5.StoragePowerActorCodeID, nil + + case actors.Version6: + return builtin6.StoragePowerActorCodeID, nil + + case actors.Version7: + return builtin7.StoragePowerActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + TotalLocked() (abi.TokenAmount, error) + TotalPower() (Claim, error) + TotalCommitted() (Claim, error) + TotalPowerSmoothed() (builtin.FilterEstimate, error) + GetState() interface{} + + // MinerCounts returns the number of miners. Participating is the number + // with power above the minimum miner threshold. + MinerCounts() (participating, total uint64, err error) + MinerPower(address.Address) (Claim, bool, error) + MinerNominalPowerMeetsConsensusMinimum(address.Address) (bool, error) + ListAllMiners() ([]address.Address, error) + ForEachClaim(func(miner address.Address, claim Claim) error) error + ClaimsChanged(State) (bool, error) + + // Testing or genesis setup only + SetTotalQualityAdjPower(abi.StoragePower) error + SetTotalRawBytePower(abi.StoragePower) error + SetThisEpochQualityAdjPower(abi.StoragePower) error + SetThisEpochRawBytePower(abi.StoragePower) error + + // Diff helpers. Used by Diff* functions internally. + claims() (adt.Map, error) + decodeClaim(*cbg.Deferred) (Claim, error) +} + +type Claim struct { + // Sum of raw byte power for a miner's sectors. + RawBytePower abi.StoragePower + + // Sum of quality adjusted power for a miner's sectors. + QualityAdjPower abi.StoragePower +} + +func AddClaims(a Claim, b Claim) Claim { + return Claim{ + RawBytePower: big.Add(a.RawBytePower, b.RawBytePower), + QualityAdjPower: big.Add(a.QualityAdjPower, b.QualityAdjPower), + } +} diff --git a/pkg/types/specactors/builtin/power/state.go.template b/pkg/types/specactors/builtin/power/state.go.template new file mode 100644 index 0000000000..e8a5a5f5cc --- /dev/null +++ b/pkg/types/specactors/builtin/power/state.go.template @@ -0,0 +1,203 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + +{{if (ge .v 3)}} + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" +{{end}} + power{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/power" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + {{if (le .v 2)}} + em, err := adt{{.v}}.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + emm, err := adt{{.v}}.MakeEmptyMultimap(store).Root() + if err != nil { + return nil, err + } + + out.State = *power{{.v}}.ConstructState(em, emm) + {{else}} + s, err := power{{.v}}.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + {{end}} + + return &out, nil +} + +type state{{.v}} struct { + power{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state{{.v}}) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state{{.v}}) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state{{.v}}) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power{{.v}}.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state{{.v}}) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state{{.v}}) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV{{.v}}FilterEstimate({{if (le .v 1)}}*{{end}}s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state{{.v}}) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state{{.v}}) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state{{.v}}) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power{{.v}}.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state{{.v}}) ClaimsChanged(other State) (bool, error) { + other{{.v}}, ok := other.(*state{{.v}}) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other{{.v}}.State.Claims), nil +} + +func (s *state{{.v}}) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state{{.v}}) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state{{.v}}) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state{{.v}}) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} + +func (s *state{{.v}}) claims() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.Claims{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power{{.v}}.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV{{.v}}Claim(ci), nil +} + +func fromV{{.v}}Claim(v{{.v}} power{{.v}}.Claim) Claim { + return Claim{ + RawBytePower: v{{.v}}.RawBytePower, + QualityAdjPower: v{{.v}}.QualityAdjPower, + } +} diff --git a/pkg/types/specactors/builtin/power/v0.go b/pkg/types/specactors/builtin/power/v0.go new file mode 100644 index 0000000000..36d80e5c79 --- /dev/null +++ b/pkg/types/specactors/builtin/power/v0.go @@ -0,0 +1,194 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + + power0 "github.com/filecoin-project/specs-actors/actors/builtin/power" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + + em, err := adt0.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + emm, err := adt0.MakeEmptyMultimap(store).Root() + if err != nil { + return nil, err + } + + out.State = *power0.ConstructState(em, emm) + + + return &out, nil +} + +type state0 struct { + power0.State + store adt.Store +} + +func (s *state0) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state0) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state0) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state0) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power0.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state0) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state0) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV0FilterEstimate(*s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state0) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state0) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state0) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power0.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state0) ClaimsChanged(other State) (bool, error) { + other0, ok := other.(*state0) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other0.State.Claims), nil +} + +func (s *state0) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state0) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state0) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state0) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state0) GetState() interface{} { + return &s.State +} + +func (s *state0) claims() (adt.Map, error) { + return adt0.AsMap(s.store, s.Claims) +} + +func (s *state0) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power0.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV0Claim(ci), nil +} + +func fromV0Claim(v0 power0.Claim) Claim { + return Claim{ + RawBytePower: v0.RawBytePower, + QualityAdjPower: v0.QualityAdjPower, + } +} diff --git a/pkg/types/specactors/builtin/power/v2.go b/pkg/types/specactors/builtin/power/v2.go new file mode 100644 index 0000000000..81e2cb9d56 --- /dev/null +++ b/pkg/types/specactors/builtin/power/v2.go @@ -0,0 +1,194 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + + power2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/power" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + + em, err := adt2.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + emm, err := adt2.MakeEmptyMultimap(store).Root() + if err != nil { + return nil, err + } + + out.State = *power2.ConstructState(em, emm) + + + return &out, nil +} + +type state2 struct { + power2.State + store adt.Store +} + +func (s *state2) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state2) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state2) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state2) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power2.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state2) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state2) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV2FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state2) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state2) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state2) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power2.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state2) ClaimsChanged(other State) (bool, error) { + other2, ok := other.(*state2) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other2.State.Claims), nil +} + +func (s *state2) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state2) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state2) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state2) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state2) GetState() interface{} { + return &s.State +} + +func (s *state2) claims() (adt.Map, error) { + return adt2.AsMap(s.store, s.Claims) +} + +func (s *state2) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power2.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV2Claim(ci), nil +} + +func fromV2Claim(v2 power2.Claim) Claim { + return Claim{ + RawBytePower: v2.RawBytePower, + QualityAdjPower: v2.QualityAdjPower, + } +} diff --git a/pkg/types/specactors/builtin/power/v3.go b/pkg/types/specactors/builtin/power/v3.go new file mode 100644 index 0000000000..c8ce1b7fe2 --- /dev/null +++ b/pkg/types/specactors/builtin/power/v3.go @@ -0,0 +1,191 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + power3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/power" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + + s, err := power3.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + + return &out, nil +} + +type state3 struct { + power3.State + store adt.Store +} + +func (s *state3) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state3) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state3) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state3) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power3.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state3) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state3) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV3FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state3) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state3) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state3) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power3.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state3) ClaimsChanged(other State) (bool, error) { + other3, ok := other.(*state3) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other3.State.Claims), nil +} + +func (s *state3) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state3) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state3) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state3) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state3) GetState() interface{} { + return &s.State +} + +func (s *state3) claims() (adt.Map, error) { + return adt3.AsMap(s.store, s.Claims, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power3.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV3Claim(ci), nil +} + +func fromV3Claim(v3 power3.Claim) Claim { + return Claim{ + RawBytePower: v3.RawBytePower, + QualityAdjPower: v3.QualityAdjPower, + } +} diff --git a/pkg/types/specactors/builtin/power/v4.go b/pkg/types/specactors/builtin/power/v4.go new file mode 100644 index 0000000000..c1ba984186 --- /dev/null +++ b/pkg/types/specactors/builtin/power/v4.go @@ -0,0 +1,191 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + power4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/power" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + + s, err := power4.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + + return &out, nil +} + +type state4 struct { + power4.State + store adt.Store +} + +func (s *state4) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state4) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state4) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state4) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power4.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state4) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state4) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV4FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state4) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state4) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state4) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power4.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state4) ClaimsChanged(other State) (bool, error) { + other4, ok := other.(*state4) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other4.State.Claims), nil +} + +func (s *state4) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state4) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state4) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state4) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state4) GetState() interface{} { + return &s.State +} + +func (s *state4) claims() (adt.Map, error) { + return adt4.AsMap(s.store, s.Claims, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power4.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV4Claim(ci), nil +} + +func fromV4Claim(v4 power4.Claim) Claim { + return Claim{ + RawBytePower: v4.RawBytePower, + QualityAdjPower: v4.QualityAdjPower, + } +} diff --git a/pkg/types/specactors/builtin/power/v5.go b/pkg/types/specactors/builtin/power/v5.go new file mode 100644 index 0000000000..20bb9b6f4d --- /dev/null +++ b/pkg/types/specactors/builtin/power/v5.go @@ -0,0 +1,191 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + power5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/power" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + + s, err := power5.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + + return &out, nil +} + +type state5 struct { + power5.State + store adt.Store +} + +func (s *state5) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state5) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state5) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state5) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power5.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state5) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state5) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV5FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state5) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state5) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state5) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power5.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state5) ClaimsChanged(other State) (bool, error) { + other5, ok := other.(*state5) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other5.State.Claims), nil +} + +func (s *state5) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state5) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state5) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state5) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state5) GetState() interface{} { + return &s.State +} + +func (s *state5) claims() (adt.Map, error) { + return adt5.AsMap(s.store, s.Claims, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power5.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV5Claim(ci), nil +} + +func fromV5Claim(v5 power5.Claim) Claim { + return Claim{ + RawBytePower: v5.RawBytePower, + QualityAdjPower: v5.QualityAdjPower, + } +} diff --git a/pkg/types/specactors/builtin/power/v6.go b/pkg/types/specactors/builtin/power/v6.go new file mode 100644 index 0000000000..d52353e5f3 --- /dev/null +++ b/pkg/types/specactors/builtin/power/v6.go @@ -0,0 +1,191 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + power6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/power" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + + s, err := power6.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + + return &out, nil +} + +type state6 struct { + power6.State + store adt.Store +} + +func (s *state6) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state6) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state6) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state6) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power6.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state6) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state6) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV6FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state6) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state6) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state6) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power6.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state6) ClaimsChanged(other State) (bool, error) { + other6, ok := other.(*state6) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other6.State.Claims), nil +} + +func (s *state6) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state6) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state6) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state6) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state6) GetState() interface{} { + return &s.State +} + +func (s *state6) claims() (adt.Map, error) { + return adt6.AsMap(s.store, s.Claims, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power6.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV6Claim(ci), nil +} + +func fromV6Claim(v6 power6.Claim) Claim { + return Claim{ + RawBytePower: v6.RawBytePower, + QualityAdjPower: v6.QualityAdjPower, + } +} diff --git a/pkg/types/specactors/builtin/power/v7.go b/pkg/types/specactors/builtin/power/v7.go new file mode 100644 index 0000000000..106e780da7 --- /dev/null +++ b/pkg/types/specactors/builtin/power/v7.go @@ -0,0 +1,191 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + power7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/power" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + + s, err := power7.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + + return &out, nil +} + +type state7 struct { + power7.State + store adt.Store +} + +func (s *state7) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state7) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state7) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state7) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power7.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state7) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state7) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV7FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state7) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state7) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state7) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power7.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state7) ClaimsChanged(other State) (bool, error) { + other7, ok := other.(*state7) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other7.State.Claims), nil +} + +func (s *state7) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state7) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state7) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state7) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state7) GetState() interface{} { + return &s.State +} + +func (s *state7) claims() (adt.Map, error) { + return adt7.AsMap(s.store, s.Claims, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power7.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV7Claim(ci), nil +} + +func fromV7Claim(v7 power7.Claim) Claim { + return Claim{ + RawBytePower: v7.RawBytePower, + QualityAdjPower: v7.QualityAdjPower, + } +} diff --git a/pkg/types/specactors/builtin/reward/actor.go.template b/pkg/types/specactors/builtin/reward/actor.go.template new file mode 100644 index 0000000000..27d969b11e --- /dev/null +++ b/pkg/types/specactors/builtin/reward/actor.go.template @@ -0,0 +1,85 @@ +// FETCHED FROM LOTUS: builtin/reward/actor.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" + "github.com/ipfs/go-cid" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/cbor" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +var ( + Address = builtin{{.latestVersion}}.RewardActorAddr + Methods = builtin{{.latestVersion}}.MethodsReward +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.RewardActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, currRealizedPower abi.StoragePower) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store, currRealizedPower) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.RewardActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + ThisEpochBaselinePower() (abi.StoragePower, error) + ThisEpochReward() (abi.StoragePower, error) + ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) + + EffectiveBaselinePower() (abi.StoragePower, error) + EffectiveNetworkTime() (abi.ChainEpoch, error) + + TotalStoragePowerReward() (abi.TokenAmount, error) + + CumsumBaseline() (abi.StoragePower, error) + CumsumRealized() (abi.StoragePower, error) + + InitialPledgeForPower(abi.StoragePower, abi.TokenAmount, *builtin.FilterEstimate, abi.TokenAmount) (abi.TokenAmount, error) + PreCommitDepositForPower(builtin.FilterEstimate, abi.StoragePower) (abi.TokenAmount, error) + GetState() interface{} +} + +type AwardBlockRewardParams = reward0.AwardBlockRewardParams diff --git a/pkg/types/specactors/builtin/reward/reward.go b/pkg/types/specactors/builtin/reward/reward.go new file mode 100644 index 0000000000..1607ad587c --- /dev/null +++ b/pkg/types/specactors/builtin/reward/reward.go @@ -0,0 +1,175 @@ +// FETCHED FROM LOTUS: builtin/reward/actor.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" + "github.com/ipfs/go-cid" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/cbor" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +func init() { + + builtin.RegisterActorState(builtin0.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +var ( + Address = builtin7.RewardActorAddr + Methods = builtin7.MethodsReward +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.RewardActorCodeID: + return load0(store, act.Head) + + case builtin2.RewardActorCodeID: + return load2(store, act.Head) + + case builtin3.RewardActorCodeID: + return load3(store, act.Head) + + case builtin4.RewardActorCodeID: + return load4(store, act.Head) + + case builtin5.RewardActorCodeID: + return load5(store, act.Head) + + case builtin6.RewardActorCodeID: + return load6(store, act.Head) + + case builtin7.RewardActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, currRealizedPower abi.StoragePower) (State, error) { + switch av { + + case actors.Version0: + return make0(store, currRealizedPower) + + case actors.Version2: + return make2(store, currRealizedPower) + + case actors.Version3: + return make3(store, currRealizedPower) + + case actors.Version4: + return make4(store, currRealizedPower) + + case actors.Version5: + return make5(store, currRealizedPower) + + case actors.Version6: + return make6(store, currRealizedPower) + + case actors.Version7: + return make7(store, currRealizedPower) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.RewardActorCodeID, nil + + case actors.Version2: + return builtin2.RewardActorCodeID, nil + + case actors.Version3: + return builtin3.RewardActorCodeID, nil + + case actors.Version4: + return builtin4.RewardActorCodeID, nil + + case actors.Version5: + return builtin5.RewardActorCodeID, nil + + case actors.Version6: + return builtin6.RewardActorCodeID, nil + + case actors.Version7: + return builtin7.RewardActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + ThisEpochBaselinePower() (abi.StoragePower, error) + ThisEpochReward() (abi.StoragePower, error) + ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) + + EffectiveBaselinePower() (abi.StoragePower, error) + EffectiveNetworkTime() (abi.ChainEpoch, error) + + TotalStoragePowerReward() (abi.TokenAmount, error) + + CumsumBaseline() (abi.StoragePower, error) + CumsumRealized() (abi.StoragePower, error) + + InitialPledgeForPower(abi.StoragePower, abi.TokenAmount, *builtin.FilterEstimate, abi.TokenAmount) (abi.TokenAmount, error) + PreCommitDepositForPower(builtin.FilterEstimate, abi.StoragePower) (abi.TokenAmount, error) + GetState() interface{} +} + +type AwardBlockRewardParams = reward0.AwardBlockRewardParams diff --git a/pkg/types/specactors/builtin/reward/state.go.template b/pkg/types/specactors/builtin/reward/state.go.template new file mode 100644 index 0000000000..397a861c77 --- /dev/null +++ b/pkg/types/specactors/builtin/reward/state.go.template @@ -0,0 +1,115 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + miner{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/miner" + reward{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/reward" + smoothing{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/smoothing" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state{{.v}}{store: store} + out.State = *reward{{.v}}.ConstructState(currRealizedPower) + return &out, nil +} + +type state{{.v}} struct { + reward{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state{{.v}}) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { +{{if (ge .v 2)}} + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil +{{else}} + return builtin.FromV0FilterEstimate(*s.State.ThisEpochRewardSmoothed), nil +{{end}} +} + +func (s *state{{.v}}) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state{{.v}}) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.{{if (ge .v 2)}}TotalStoragePowerReward{{else}}TotalMined{{end}}, nil +} + +func (s *state{{.v}}) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state{{.v}}) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state{{.v}}) CumsumBaseline() (reward{{.v}}.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state{{.v}}) CumsumRealized() (reward{{.v}}.Spacetime, error) { + return s.State.CumsumRealized, nil +} +{{if (ge .v 2)}} +func (s *state{{.v}}) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner{{.v}}.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing{{.v}}.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} +{{else}} +func (s *state0) InitialPledgeForPower(sectorWeight abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner0.InitialPledgeForPower( + sectorWeight, + s.State.ThisEpochBaselinePower, + networkTotalPledge, + s.State.ThisEpochRewardSmoothed, + &smoothing0.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply), nil +} +{{end}} +func (s *state{{.v}}) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner{{.v}}.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + {{if (le .v 0)}}&{{end}}smoothing{{.v}}.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/reward/v0.go b/pkg/types/specactors/builtin/reward/v0.go new file mode 100644 index 0000000000..dd83b4dee4 --- /dev/null +++ b/pkg/types/specactors/builtin/reward/v0.go @@ -0,0 +1,97 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" + smoothing0 "github.com/filecoin-project/specs-actors/actors/util/smoothing" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state0{store: store} + out.State = *reward0.ConstructState(currRealizedPower) + return &out, nil +} + +type state0 struct { + reward0.State + store adt.Store +} + +func (s *state0) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state0) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FromV0FilterEstimate(*s.State.ThisEpochRewardSmoothed), nil + +} + +func (s *state0) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state0) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalMined, nil +} + +func (s *state0) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state0) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state0) CumsumBaseline() (reward0.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state0) CumsumRealized() (reward0.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state0) InitialPledgeForPower(sectorWeight abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner0.InitialPledgeForPower( + sectorWeight, + s.State.ThisEpochBaselinePower, + networkTotalPledge, + s.State.ThisEpochRewardSmoothed, + &smoothing0.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply), nil +} + +func (s *state0) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner0.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + &smoothing0.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state0) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/reward/v2.go b/pkg/types/specactors/builtin/reward/v2.go new file mode 100644 index 0000000000..8c7a5cbb3d --- /dev/null +++ b/pkg/types/specactors/builtin/reward/v2.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + reward2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/reward" + smoothing2 "github.com/filecoin-project/specs-actors/v2/actors/util/smoothing" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state2{store: store} + out.State = *reward2.ConstructState(currRealizedPower) + return &out, nil +} + +type state2 struct { + reward2.State + store adt.Store +} + +func (s *state2) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state2) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state2) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state2) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state2) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state2) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state2) CumsumBaseline() (reward2.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state2) CumsumRealized() (reward2.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state2) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner2.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing2.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state2) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner2.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing2.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state2) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/reward/v3.go b/pkg/types/specactors/builtin/reward/v3.go new file mode 100644 index 0000000000..5c05a5f320 --- /dev/null +++ b/pkg/types/specactors/builtin/reward/v3.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" + reward3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/reward" + smoothing3 "github.com/filecoin-project/specs-actors/v3/actors/util/smoothing" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state3{store: store} + out.State = *reward3.ConstructState(currRealizedPower) + return &out, nil +} + +type state3 struct { + reward3.State + store adt.Store +} + +func (s *state3) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state3) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state3) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state3) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state3) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state3) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state3) CumsumBaseline() (reward3.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state3) CumsumRealized() (reward3.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state3) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner3.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing3.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state3) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner3.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing3.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state3) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/reward/v4.go b/pkg/types/specactors/builtin/reward/v4.go new file mode 100644 index 0000000000..c617676b89 --- /dev/null +++ b/pkg/types/specactors/builtin/reward/v4.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + miner4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/miner" + reward4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/reward" + smoothing4 "github.com/filecoin-project/specs-actors/v4/actors/util/smoothing" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state4{store: store} + out.State = *reward4.ConstructState(currRealizedPower) + return &out, nil +} + +type state4 struct { + reward4.State + store adt.Store +} + +func (s *state4) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state4) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state4) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state4) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state4) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state4) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state4) CumsumBaseline() (reward4.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state4) CumsumRealized() (reward4.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state4) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner4.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing4.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state4) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner4.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing4.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state4) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/reward/v5.go b/pkg/types/specactors/builtin/reward/v5.go new file mode 100644 index 0000000000..da362a571d --- /dev/null +++ b/pkg/types/specactors/builtin/reward/v5.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" + reward5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/reward" + smoothing5 "github.com/filecoin-project/specs-actors/v5/actors/util/smoothing" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state5{store: store} + out.State = *reward5.ConstructState(currRealizedPower) + return &out, nil +} + +type state5 struct { + reward5.State + store adt.Store +} + +func (s *state5) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state5) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state5) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state5) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state5) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state5) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state5) CumsumBaseline() (reward5.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state5) CumsumRealized() (reward5.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state5) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner5.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing5.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state5) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner5.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing5.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state5) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/reward/v6.go b/pkg/types/specactors/builtin/reward/v6.go new file mode 100644 index 0000000000..a088e0fd6d --- /dev/null +++ b/pkg/types/specactors/builtin/reward/v6.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + miner6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/miner" + reward6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/reward" + smoothing6 "github.com/filecoin-project/specs-actors/v6/actors/util/smoothing" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state6{store: store} + out.State = *reward6.ConstructState(currRealizedPower) + return &out, nil +} + +type state6 struct { + reward6.State + store adt.Store +} + +func (s *state6) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state6) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state6) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state6) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state6) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state6) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state6) CumsumBaseline() (reward6.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state6) CumsumRealized() (reward6.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state6) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner6.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing6.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state6) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner6.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing6.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state6) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/reward/v7.go b/pkg/types/specactors/builtin/reward/v7.go new file mode 100644 index 0000000000..aa381e9e18 --- /dev/null +++ b/pkg/types/specactors/builtin/reward/v7.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + + miner7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/miner" + reward7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/reward" + smoothing7 "github.com/filecoin-project/specs-actors/v7/actors/util/smoothing" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state7{store: store} + out.State = *reward7.ConstructState(currRealizedPower) + return &out, nil +} + +type state7 struct { + reward7.State + store adt.Store +} + +func (s *state7) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state7) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state7) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state7) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state7) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state7) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state7) CumsumBaseline() (reward7.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state7) CumsumRealized() (reward7.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state7) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner7.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing7.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state7) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner7.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing7.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state7) GetState() interface{} { + return &s.State +} diff --git a/pkg/types/specactors/builtin/system/actor.go.template b/pkg/types/specactors/builtin/system/actor.go.template new file mode 100644 index 0000000000..14c30b0075 --- /dev/null +++ b/pkg/types/specactors/builtin/system/actor.go.template @@ -0,0 +1,43 @@ +// FETCHED FROM LOTUS: builtin/system/actor.go.template + +package system + +import ( + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "golang.org/x/xerrors" + "github.com/ipfs/go-cid" + +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +var ( + Address = builtin{{.latestVersion}}.SystemActorAddr +) + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.SystemActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + GetState() interface{} +} diff --git a/pkg/types/specactors/builtin/system/state.go.template b/pkg/types/specactors/builtin/system/state.go.template new file mode 100644 index 0000000000..a02a7e939b --- /dev/null +++ b/pkg/types/specactors/builtin/system/state.go.template @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + system{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/system" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + out.State = system{{.v}}.State{} + return &out, nil +} + +type state{{.v}} struct { + system{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/system/system.go b/pkg/types/specactors/builtin/system/system.go new file mode 100644 index 0000000000..4196ef59a6 --- /dev/null +++ b/pkg/types/specactors/builtin/system/system.go @@ -0,0 +1,91 @@ +// FETCHED FROM LOTUS: builtin/system/actor.go.template + +package system + +import ( + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "golang.org/x/xerrors" + "github.com/ipfs/go-cid" + + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + +) + +var ( + Address = builtin7.SystemActorAddr +) + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.SystemActorCodeID, nil + + case actors.Version2: + return builtin2.SystemActorCodeID, nil + + case actors.Version3: + return builtin3.SystemActorCodeID, nil + + case actors.Version4: + return builtin4.SystemActorCodeID, nil + + case actors.Version5: + return builtin5.SystemActorCodeID, nil + + case actors.Version6: + return builtin6.SystemActorCodeID, nil + + case actors.Version7: + return builtin7.SystemActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + GetState() interface{} +} diff --git a/pkg/types/specactors/builtin/system/v0.go b/pkg/types/specactors/builtin/system/v0.go new file mode 100644 index 0000000000..b690c9d0a4 --- /dev/null +++ b/pkg/types/specactors/builtin/system/v0.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + system0 "github.com/filecoin-project/specs-actors/actors/builtin/system" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + out.State = system0.State{} + return &out, nil +} + +type state0 struct { + system0.State + store adt.Store +} + +func (s *state0) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/system/v2.go b/pkg/types/specactors/builtin/system/v2.go new file mode 100644 index 0000000000..d2b244fcaf --- /dev/null +++ b/pkg/types/specactors/builtin/system/v2.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + system2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/system" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + out.State = system2.State{} + return &out, nil +} + +type state2 struct { + system2.State + store adt.Store +} + +func (s *state2) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/system/v3.go b/pkg/types/specactors/builtin/system/v3.go new file mode 100644 index 0000000000..13ad0716f7 --- /dev/null +++ b/pkg/types/specactors/builtin/system/v3.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + system3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/system" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + out.State = system3.State{} + return &out, nil +} + +type state3 struct { + system3.State + store adt.Store +} + +func (s *state3) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/system/v4.go b/pkg/types/specactors/builtin/system/v4.go new file mode 100644 index 0000000000..2266d9ccf0 --- /dev/null +++ b/pkg/types/specactors/builtin/system/v4.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + system4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/system" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + out.State = system4.State{} + return &out, nil +} + +type state4 struct { + system4.State + store adt.Store +} + +func (s *state4) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/system/v5.go b/pkg/types/specactors/builtin/system/v5.go new file mode 100644 index 0000000000..eb1fdafecc --- /dev/null +++ b/pkg/types/specactors/builtin/system/v5.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + system5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/system" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + out.State = system5.State{} + return &out, nil +} + +type state5 struct { + system5.State + store adt.Store +} + +func (s *state5) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/system/v6.go b/pkg/types/specactors/builtin/system/v6.go new file mode 100644 index 0000000000..0cc38d8c0a --- /dev/null +++ b/pkg/types/specactors/builtin/system/v6.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + system6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/system" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + out.State = system6.State{} + return &out, nil +} + +type state6 struct { + system6.State + store adt.Store +} + +func (s *state6) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/system/v7.go b/pkg/types/specactors/builtin/system/v7.go new file mode 100644 index 0000000000..a528763a8d --- /dev/null +++ b/pkg/types/specactors/builtin/system/v7.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + system7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/system" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + out.State = system7.State{} + return &out, nil +} + +type state7 struct { + system7.State + store adt.Store +} + +func (s *state7) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/verifreg/actor.go.template b/pkg/types/specactors/builtin/verifreg/actor.go.template new file mode 100644 index 0000000000..2112fad3ee --- /dev/null +++ b/pkg/types/specactors/builtin/verifreg/actor.go.template @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/actor.go.template + +package verifreg + +import ( + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/go-state-types/cbor" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}} +} + +var ( + Address = builtin{{.latestVersion}}.VerifiedRegistryActorAddr + Methods = builtin{{.latestVersion}}.MethodsVerifiedRegistry +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.VerifiedRegistryActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, rootKeyAddress address.Address) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store, rootKeyAddress) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.VerifiedRegistryActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + + +type State interface { + cbor.Marshaler + + RootKey() (address.Address, error) + VerifiedClientDataCap(address.Address) (bool, abi.StoragePower, error) + VerifierDataCap(address.Address) (bool, abi.StoragePower, error) + ForEachVerifier(func(addr address.Address, dcap abi.StoragePower) error) error + ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error + GetState() interface{} +} diff --git a/pkg/types/specactors/builtin/verifreg/state.go.template b/pkg/types/specactors/builtin/verifreg/state.go.template new file mode 100644 index 0000000000..507b8530bc --- /dev/null +++ b/pkg/types/specactors/builtin/verifreg/state.go.template @@ -0,0 +1,84 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + +{{if (ge .v 3)}} builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" +{{end}} verifreg{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/verifreg" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state{{.v}}{store: store} + {{if (le .v 2)}} + em, err := adt{{.v}}.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *verifreg{{.v}}.ConstructState(em, rootKeyAddress) + {{else}} + s, err := verifreg{{.v}}.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + {{end}} + return &out, nil +} + +type state{{.v}} struct { + verifreg{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state{{.v}}) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version{{.v}}, s.verifiedClients, addr) +} + +func (s *state{{.v}}) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version{{.v}}, s.verifiers, addr) +} + +func (s *state{{.v}}) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version{{.v}}, s.verifiers, cb) +} + +func (s *state{{.v}}) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version{{.v}}, s.verifiedClients, cb) +} + +func (s *state{{.v}}) verifiedClients() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.VerifiedClients{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) verifiers() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.Verifiers{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/verifreg/util.go b/pkg/types/specactors/builtin/verifreg/util.go new file mode 100644 index 0000000000..6cd78fac24 --- /dev/null +++ b/pkg/types/specactors/builtin/verifreg/util.go @@ -0,0 +1,54 @@ +package verifreg + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" +) + +// taking this as a function instead of asking the caller to call it helps reduce some of the error +// checking boilerplate. +// +// "go made me do it" +type rootFunc func() (adt.Map, error) + +// Assumes that the bitwidth for v3 HAMTs is the DefaultHamtBitwidth +func getDataCap(store adt.Store, ver actors.Version, root rootFunc, addr address.Address) (bool, abi.StoragePower, error) { + if addr.Protocol() != address.ID { + return false, big.Zero(), xerrors.Errorf("can only look up ID addresses") + } + vh, err := root() + if err != nil { + return false, big.Zero(), xerrors.Errorf("loading verifreg: %w", err) + } + + var dcap abi.StoragePower + if found, err := vh.Get(abi.AddrKey(addr), &dcap); err != nil { + return false, big.Zero(), xerrors.Errorf("looking up addr: %w", err) + } else if !found { + return false, big.Zero(), nil + } + + return true, dcap, nil +} + +// Assumes that the bitwidth for v3 HAMTs is the DefaultHamtBitwidth +func forEachCap(store adt.Store, ver actors.Version, root rootFunc, cb func(addr address.Address, dcap abi.StoragePower) error) error { + vh, err := root() + if err != nil { + return xerrors.Errorf("loading verified clients: %w", err) + } + var dcap abi.StoragePower + return vh.ForEach(&dcap, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, dcap) + }) +} diff --git a/pkg/types/specactors/builtin/verifreg/v0.go b/pkg/types/specactors/builtin/verifreg/v0.go new file mode 100644 index 0000000000..e7a51a72d8 --- /dev/null +++ b/pkg/types/specactors/builtin/verifreg/v0.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + verifreg0 "github.com/filecoin-project/specs-actors/actors/builtin/verifreg" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state0{store: store} + + em, err := adt0.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *verifreg0.ConstructState(em, rootKeyAddress) + + return &out, nil +} + +type state0 struct { + verifreg0.State + store adt.Store +} + +func (s *state0) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state0) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version0, s.verifiedClients, addr) +} + +func (s *state0) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version0, s.verifiers, addr) +} + +func (s *state0) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version0, s.verifiers, cb) +} + +func (s *state0) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version0, s.verifiedClients, cb) +} + +func (s *state0) verifiedClients() (adt.Map, error) { + return adt0.AsMap(s.store, s.VerifiedClients) +} + +func (s *state0) verifiers() (adt.Map, error) { + return adt0.AsMap(s.store, s.Verifiers) +} + +func (s *state0) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/verifreg/v2.go b/pkg/types/specactors/builtin/verifreg/v2.go new file mode 100644 index 0000000000..721493a2e3 --- /dev/null +++ b/pkg/types/specactors/builtin/verifreg/v2.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + verifreg2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/verifreg" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state2{store: store} + + em, err := adt2.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *verifreg2.ConstructState(em, rootKeyAddress) + + return &out, nil +} + +type state2 struct { + verifreg2.State + store adt.Store +} + +func (s *state2) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state2) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version2, s.verifiedClients, addr) +} + +func (s *state2) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version2, s.verifiers, addr) +} + +func (s *state2) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version2, s.verifiers, cb) +} + +func (s *state2) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version2, s.verifiedClients, cb) +} + +func (s *state2) verifiedClients() (adt.Map, error) { + return adt2.AsMap(s.store, s.VerifiedClients) +} + +func (s *state2) verifiers() (adt.Map, error) { + return adt2.AsMap(s.store, s.Verifiers) +} + +func (s *state2) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/verifreg/v3.go b/pkg/types/specactors/builtin/verifreg/v3.go new file mode 100644 index 0000000000..819d809928 --- /dev/null +++ b/pkg/types/specactors/builtin/verifreg/v3.go @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + verifreg3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/verifreg" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state3{store: store} + + s, err := verifreg3.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state3 struct { + verifreg3.State + store adt.Store +} + +func (s *state3) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state3) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version3, s.verifiedClients, addr) +} + +func (s *state3) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version3, s.verifiers, addr) +} + +func (s *state3) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version3, s.verifiers, cb) +} + +func (s *state3) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version3, s.verifiedClients, cb) +} + +func (s *state3) verifiedClients() (adt.Map, error) { + return adt3.AsMap(s.store, s.VerifiedClients, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) verifiers() (adt.Map, error) { + return adt3.AsMap(s.store, s.Verifiers, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/verifreg/v4.go b/pkg/types/specactors/builtin/verifreg/v4.go new file mode 100644 index 0000000000..cc25d31954 --- /dev/null +++ b/pkg/types/specactors/builtin/verifreg/v4.go @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + verifreg4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/verifreg" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state4{store: store} + + s, err := verifreg4.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state4 struct { + verifreg4.State + store adt.Store +} + +func (s *state4) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state4) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version4, s.verifiedClients, addr) +} + +func (s *state4) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version4, s.verifiers, addr) +} + +func (s *state4) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version4, s.verifiers, cb) +} + +func (s *state4) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version4, s.verifiedClients, cb) +} + +func (s *state4) verifiedClients() (adt.Map, error) { + return adt4.AsMap(s.store, s.VerifiedClients, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) verifiers() (adt.Map, error) { + return adt4.AsMap(s.store, s.Verifiers, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/verifreg/v5.go b/pkg/types/specactors/builtin/verifreg/v5.go new file mode 100644 index 0000000000..870dd17a3d --- /dev/null +++ b/pkg/types/specactors/builtin/verifreg/v5.go @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + verifreg5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/verifreg" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state5{store: store} + + s, err := verifreg5.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state5 struct { + verifreg5.State + store adt.Store +} + +func (s *state5) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state5) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version5, s.verifiedClients, addr) +} + +func (s *state5) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version5, s.verifiers, addr) +} + +func (s *state5) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version5, s.verifiers, cb) +} + +func (s *state5) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version5, s.verifiedClients, cb) +} + +func (s *state5) verifiedClients() (adt.Map, error) { + return adt5.AsMap(s.store, s.VerifiedClients, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) verifiers() (adt.Map, error) { + return adt5.AsMap(s.store, s.Verifiers, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/verifreg/v6.go b/pkg/types/specactors/builtin/verifreg/v6.go new file mode 100644 index 0000000000..917b6eed3c --- /dev/null +++ b/pkg/types/specactors/builtin/verifreg/v6.go @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + verifreg6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/verifreg" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state6{store: store} + + s, err := verifreg6.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state6 struct { + verifreg6.State + store adt.Store +} + +func (s *state6) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state6) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version6, s.verifiedClients, addr) +} + +func (s *state6) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version6, s.verifiers, addr) +} + +func (s *state6) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version6, s.verifiers, cb) +} + +func (s *state6) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version6, s.verifiedClients, cb) +} + +func (s *state6) verifiedClients() (adt.Map, error) { + return adt6.AsMap(s.store, s.VerifiedClients, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) verifiers() (adt.Map, error) { + return adt6.AsMap(s.store, s.Verifiers, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/verifreg/v7.go b/pkg/types/specactors/builtin/verifreg/v7.go new file mode 100644 index 0000000000..88f284f28f --- /dev/null +++ b/pkg/types/specactors/builtin/verifreg/v7.go @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + actors "github.com/filecoin-project/venus/pkg/types/specactors" + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + verifreg7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/verifreg" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state7{store: store} + + s, err := verifreg7.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state7 struct { + verifreg7.State + store adt.Store +} + +func (s *state7) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state7) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version7, s.verifiedClients, addr) +} + +func (s *state7) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version7, s.verifiers, addr) +} + +func (s *state7) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version7, s.verifiers, cb) +} + +func (s *state7) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version7, s.verifiedClients, cb) +} + +func (s *state7) verifiedClients() (adt.Map, error) { + return adt7.AsMap(s.store, s.VerifiedClients, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) verifiers() (adt.Map, error) { + return adt7.AsMap(s.store, s.Verifiers, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/pkg/types/specactors/builtin/verifreg/verifreg.go b/pkg/types/specactors/builtin/verifreg/verifreg.go new file mode 100644 index 0000000000..35de089433 --- /dev/null +++ b/pkg/types/specactors/builtin/verifreg/verifreg.go @@ -0,0 +1,167 @@ +// FETCHED FROM LOTUS: builtin/verifreg/actor.go.template + +package verifreg + +import ( + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/go-state-types/cbor" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + + "github.com/filecoin-project/venus/pkg/types/specactors/adt" + "github.com/filecoin-project/venus/pkg/types/specactors/builtin" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + types "github.com/filecoin-project/venus/pkg/types/internal" +) + +func init() { + + builtin.RegisterActorState(builtin0.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) + +} + +var ( + Address = builtin7.VerifiedRegistryActorAddr + Methods = builtin7.MethodsVerifiedRegistry +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.VerifiedRegistryActorCodeID: + return load0(store, act.Head) + + case builtin2.VerifiedRegistryActorCodeID: + return load2(store, act.Head) + + case builtin3.VerifiedRegistryActorCodeID: + return load3(store, act.Head) + + case builtin4.VerifiedRegistryActorCodeID: + return load4(store, act.Head) + + case builtin5.VerifiedRegistryActorCodeID: + return load5(store, act.Head) + + case builtin6.VerifiedRegistryActorCodeID: + return load6(store, act.Head) + + case builtin7.VerifiedRegistryActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, rootKeyAddress address.Address) (State, error) { + switch av { + + case actors.Version0: + return make0(store, rootKeyAddress) + + case actors.Version2: + return make2(store, rootKeyAddress) + + case actors.Version3: + return make3(store, rootKeyAddress) + + case actors.Version4: + return make4(store, rootKeyAddress) + + case actors.Version5: + return make5(store, rootKeyAddress) + + case actors.Version6: + return make6(store, rootKeyAddress) + + case actors.Version7: + return make7(store, rootKeyAddress) + +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.VerifiedRegistryActorCodeID, nil + + case actors.Version2: + return builtin2.VerifiedRegistryActorCodeID, nil + + case actors.Version3: + return builtin3.VerifiedRegistryActorCodeID, nil + + case actors.Version4: + return builtin4.VerifiedRegistryActorCodeID, nil + + case actors.Version5: + return builtin5.VerifiedRegistryActorCodeID, nil + + case actors.Version6: + return builtin6.VerifiedRegistryActorCodeID, nil + + case actors.Version7: + return builtin7.VerifiedRegistryActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + + +type State interface { + cbor.Marshaler + + RootKey() (address.Address, error) + VerifiedClientDataCap(address.Address) (bool, abi.StoragePower, error) + VerifierDataCap(address.Address) (bool, abi.StoragePower, error) + ForEachVerifier(func(addr address.Address, dcap abi.StoragePower) error) error + ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error + GetState() interface{} +} diff --git a/pkg/types/specactors/params.go b/pkg/types/specactors/params.go new file mode 100644 index 0000000000..f933ce33de --- /dev/null +++ b/pkg/types/specactors/params.go @@ -0,0 +1,19 @@ +package specactors + +import ( + "bytes" + + "github.com/filecoin-project/go-state-types/exitcode" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/pkg/types/specactors/aerrors" +) + +func SerializeParams(i cbg.CBORMarshaler) ([]byte, aerrors.ActorError) { + buf := new(bytes.Buffer) + if err := i.MarshalCBOR(buf); err != nil { + // TODO: shouldnt this be a fatal error? + return nil, aerrors.Absorb(err, exitcode.ErrSerialization, "failed to encode parameter") + } + return buf.Bytes(), nil +} diff --git a/pkg/types/specactors/policy/policy.go b/pkg/types/specactors/policy/policy.go new file mode 100644 index 0000000000..ecc0e004a8 --- /dev/null +++ b/pkg/types/specactors/policy/policy.go @@ -0,0 +1,609 @@ +// FETCHED FROM LOTUS: policy/policy.go.template + +package policy + +import ( + "sort" + + "github.com/filecoin-project/go-state-types/big" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + + market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + power0 "github.com/filecoin-project/specs-actors/actors/builtin/power" + verifreg0 "github.com/filecoin-project/specs-actors/actors/builtin/verifreg" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + verifreg2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/verifreg" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + market3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/market" + miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" + verifreg3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/verifreg" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + market4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/market" + miner4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/miner" + verifreg4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/verifreg" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + market5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/market" + miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" + verifreg5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/verifreg" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + market6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/market" + miner6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/miner" + verifreg6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/verifreg" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + market7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/market" + miner7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/miner" + verifreg7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/verifreg" + + paych7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/paych" +) + +const ( + ChainFinality = miner7.ChainFinality + SealRandomnessLookback = ChainFinality + PaychSettleDelay = paych7.SettleDelay + MaxPreCommitRandomnessLookback = builtin7.EpochsInDay + SealRandomnessLookback +) + +// SetSupportedProofTypes sets supported proof types, across all actor versions. +// This should only be used for testing. +func SetSupportedProofTypes(types ...abi.RegisteredSealProof) { + + miner0.SupportedProofTypes = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner2.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + miner2.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2) + miner2.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner3.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + miner3.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2) + miner3.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner4.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + miner4.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2) + miner4.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner5.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner6.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner7.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + AddSupportedProofTypes(types...) +} + +// AddSupportedProofTypes sets supported proof types, across all actor versions. +// This should only be used for testing. +func AddSupportedProofTypes(types ...abi.RegisteredSealProof) { + for _, t := range types { + if t >= abi.RegisteredSealProof_StackedDrg2KiBV1_1 { + panic("must specify v1 proof types only") + } + // Set for all miner versions. + + miner0.SupportedProofTypes[t] = struct{}{} + + miner2.PreCommitSealProofTypesV0[t] = struct{}{} + miner2.PreCommitSealProofTypesV7[t] = struct{}{} + miner2.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + miner2.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + + miner3.PreCommitSealProofTypesV0[t] = struct{}{} + miner3.PreCommitSealProofTypesV7[t] = struct{}{} + miner3.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + miner3.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + + miner4.PreCommitSealProofTypesV0[t] = struct{}{} + miner4.PreCommitSealProofTypesV7[t] = struct{}{} + miner4.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + miner4.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + + miner5.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + wpp, err := t.RegisteredWindowPoStProof() + if err != nil { + // Fine to panic, this is a test-only method + panic(err) + } + + miner5.WindowPoStProofTypes[wpp] = struct{}{} + + miner6.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + wpp, err = t.RegisteredWindowPoStProof() + if err != nil { + // Fine to panic, this is a test-only method + panic(err) + } + + miner6.WindowPoStProofTypes[wpp] = struct{}{} + + miner7.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + wpp, err = t.RegisteredWindowPoStProof() + if err != nil { + // Fine to panic, this is a test-only method + panic(err) + } + + miner7.WindowPoStProofTypes[wpp] = struct{}{} + + } +} + +// SetPreCommitChallengeDelay sets the pre-commit challenge delay across all +// actors versions. Use for testing. +func SetPreCommitChallengeDelay(delay abi.ChainEpoch) { + // Set for all miner versions. + + miner0.PreCommitChallengeDelay = delay + + miner2.PreCommitChallengeDelay = delay + + miner3.PreCommitChallengeDelay = delay + + miner4.PreCommitChallengeDelay = delay + + miner5.PreCommitChallengeDelay = delay + + miner6.PreCommitChallengeDelay = delay + + miner7.PreCommitChallengeDelay = delay + +} + +// TODO: this function shouldn't really exist. Instead, the API should expose the precommit delay. +func GetPreCommitChallengeDelay() abi.ChainEpoch { + return miner7.PreCommitChallengeDelay +} + +// SetConsensusMinerMinPower sets the minimum power of an individual miner must +// meet for leader election, across all actor versions. This should only be used +// for testing. +func SetConsensusMinerMinPower(p abi.StoragePower) { + + power0.ConsensusMinerMinPower = p + + for _, policy := range builtin2.SealProofPolicies { + policy.ConsensusMinerMinPower = p + } + + for _, policy := range builtin3.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + + for _, policy := range builtin4.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + + for _, policy := range builtin5.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + + for _, policy := range builtin6.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + + for _, policy := range builtin7.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + +} + +// SetMinVerifiedDealSize sets the minimum size of a verified deal. This should +// only be used for testing. +func SetMinVerifiedDealSize(size abi.StoragePower) { + + verifreg0.MinVerifiedDealSize = size + + verifreg2.MinVerifiedDealSize = size + + verifreg3.MinVerifiedDealSize = size + + verifreg4.MinVerifiedDealSize = size + + verifreg5.MinVerifiedDealSize = size + + verifreg6.MinVerifiedDealSize = size + + verifreg7.MinVerifiedDealSize = size + +} + +func GetMaxProveCommitDuration(ver actors.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { + switch ver { + + case actors.Version0: + + return miner0.MaxSealDuration[t], nil + + case actors.Version2: + + return miner2.MaxProveCommitDuration[t], nil + + case actors.Version3: + + return miner3.MaxProveCommitDuration[t], nil + + case actors.Version4: + + return miner4.MaxProveCommitDuration[t], nil + + case actors.Version5: + + return miner5.MaxProveCommitDuration[t], nil + + case actors.Version6: + + return miner6.MaxProveCommitDuration[t], nil + + case actors.Version7: + + return miner7.MaxProveCommitDuration[t], nil + + default: + return 0, xerrors.Errorf("unsupported actors version") + } +} + +// SetProviderCollateralSupplyTarget sets the percentage of normalized circulating +// supply that must be covered by provider collateral in a deal. This should +// only be used for testing. +func SetProviderCollateralSupplyTarget(num, denom big.Int) { + + market2.ProviderCollateralSupplyTarget = builtin2.BigFrac{ + Numerator: num, + Denominator: denom, + } + + market3.ProviderCollateralSupplyTarget = builtin3.BigFrac{ + Numerator: num, + Denominator: denom, + } + + market4.ProviderCollateralSupplyTarget = builtin4.BigFrac{ + Numerator: num, + Denominator: denom, + } + + market5.ProviderCollateralSupplyTarget = builtin5.BigFrac{ + Numerator: num, + Denominator: denom, + } + + market6.ProviderCollateralSupplyTarget = builtin6.BigFrac{ + Numerator: num, + Denominator: denom, + } + + market7.ProviderCollateralSupplyTarget = builtin7.BigFrac{ + Numerator: num, + Denominator: denom, + } + +} + +func DealProviderCollateralBounds( + size abi.PaddedPieceSize, verified bool, + rawBytePower, qaPower, baselinePower abi.StoragePower, + circulatingFil abi.TokenAmount, nwVer network.Version, +) (min, max abi.TokenAmount, err error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), big.Zero(), err + } + switch v { + + case actors.Version0: + + min, max := market0.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil, nwVer) + return min, max, nil + + case actors.Version2: + + min, max := market2.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + case actors.Version3: + + min, max := market3.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + case actors.Version4: + + min, max := market4.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + case actors.Version5: + + min, max := market5.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + case actors.Version6: + + min, max := market6.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + case actors.Version7: + + min, max := market7.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + default: + return big.Zero(), big.Zero(), xerrors.Errorf("unsupported actors version") + } +} + +func DealDurationBounds(pieceSize abi.PaddedPieceSize) (min, max abi.ChainEpoch) { + return market7.DealDurationBounds(pieceSize) +} + +// Sets the challenge window and scales the proving period to match (such that +// there are always 48 challenge windows in a proving period). +func SetWPoStChallengeWindow(period abi.ChainEpoch) { + + miner0.WPoStChallengeWindow = period + miner0.WPoStProvingPeriod = period * abi.ChainEpoch(miner0.WPoStPeriodDeadlines) + + miner2.WPoStChallengeWindow = period + miner2.WPoStProvingPeriod = period * abi.ChainEpoch(miner2.WPoStPeriodDeadlines) + + miner3.WPoStChallengeWindow = period + miner3.WPoStProvingPeriod = period * abi.ChainEpoch(miner3.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner3.WPoStDisputeWindow = period * 30 + + miner4.WPoStChallengeWindow = period + miner4.WPoStProvingPeriod = period * abi.ChainEpoch(miner4.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner4.WPoStDisputeWindow = period * 30 + + miner5.WPoStChallengeWindow = period + miner5.WPoStProvingPeriod = period * abi.ChainEpoch(miner5.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner5.WPoStDisputeWindow = period * 30 + + miner6.WPoStChallengeWindow = period + miner6.WPoStProvingPeriod = period * abi.ChainEpoch(miner6.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner6.WPoStDisputeWindow = period * 30 + + miner7.WPoStChallengeWindow = period + miner7.WPoStProvingPeriod = period * abi.ChainEpoch(miner7.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner7.WPoStDisputeWindow = period * 30 + +} + +func GetWinningPoStSectorSetLookback(nwVer network.Version) abi.ChainEpoch { + if nwVer <= network.Version3 { + return 10 + } + + // NOTE: if this ever changes, adjust it in a (*Miner).mineOne() logline as well + return ChainFinality +} + +func GetMaxSectorExpirationExtension() abi.ChainEpoch { + return miner7.MaxSectorExpirationExtension +} + +func GetMinSectorExpiration() abi.ChainEpoch { + return miner7.MinSectorExpiration +} + +func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, error) { + sectorsPerPart, err := builtin7.PoStProofWindowPoStPartitionSectors(p) + if err != nil { + return 0, err + } + maxSectors, err := GetAddressedSectorsMax(nv) + if err != nil { + return 0, err + } + return int(uint64(maxSectors) / sectorsPerPart), nil +} + +func GetDefaultSectorSize() abi.SectorSize { + // supported sector sizes are the same across versions. + szs := make([]abi.SectorSize, 0, len(miner7.PreCommitSealProofTypesV8)) + for spt := range miner7.PreCommitSealProofTypesV8 { + ss, err := spt.SectorSize() + if err != nil { + panic(err) + } + + szs = append(szs, ss) + } + + sort.Slice(szs, func(i, j int) bool { + return szs[i] < szs[j] + }) + + return szs[0] +} + +func GetDefaultAggregationProof() abi.RegisteredAggregationProof { + return abi.RegisteredAggregationProof_SnarkPackV1 +} + +func GetSectorMaxLifetime(proof abi.RegisteredSealProof, nwVer network.Version) abi.ChainEpoch { + if nwVer <= network.Version10 { + return builtin4.SealProofPoliciesV0[proof].SectorMaxLifetime + } + + return builtin7.SealProofPoliciesV11[proof].SectorMaxLifetime +} + +func GetAddressedSectorsMax(nwVer network.Version) (int, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return 0, err + } + switch v { + + case actors.Version0: + return miner0.AddressedSectorsMax, nil + + case actors.Version2: + return miner2.AddressedSectorsMax, nil + + case actors.Version3: + return miner3.AddressedSectorsMax, nil + + case actors.Version4: + return miner4.AddressedSectorsMax, nil + + case actors.Version5: + return miner5.AddressedSectorsMax, nil + + case actors.Version6: + return miner6.AddressedSectorsMax, nil + + case actors.Version7: + return miner7.AddressedSectorsMax, nil + + default: + return 0, xerrors.Errorf("unsupported network version") + } +} + +func GetDeclarationsMax(nwVer network.Version) (int, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return 0, err + } + switch v { + + case actors.Version0: + + // TODO: Should we instead error here since the concept doesn't exist yet? + return miner0.AddressedPartitionsMax, nil + + case actors.Version2: + + return miner2.DeclarationsMax, nil + + case actors.Version3: + + return miner3.DeclarationsMax, nil + + case actors.Version4: + + return miner4.DeclarationsMax, nil + + case actors.Version5: + + return miner5.DeclarationsMax, nil + + case actors.Version6: + + return miner6.DeclarationsMax, nil + + case actors.Version7: + + return miner7.DeclarationsMax, nil + + default: + return 0, xerrors.Errorf("unsupported network version") + } +} + +func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), err + } + switch v { + + case actors.Version0: + + return big.Zero(), nil + + case actors.Version2: + + return big.Zero(), nil + + case actors.Version3: + + return big.Zero(), nil + + case actors.Version4: + + return big.Zero(), nil + + case actors.Version5: + + return miner5.AggregateNetworkFee(aggregateSize, baseFee), nil + + case actors.Version6: + + return miner6.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + + case actors.Version7: + + return miner7.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + + default: + return big.Zero(), xerrors.Errorf("unsupported network version") + } +} + +func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), err + } + switch v { + + case actors.Version0: + + return big.Zero(), nil + + case actors.Version2: + + return big.Zero(), nil + + case actors.Version3: + + return big.Zero(), nil + + case actors.Version4: + + return big.Zero(), nil + + case actors.Version5: + + return big.Zero(), nil + + case actors.Version6: + + return miner6.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + + case actors.Version7: + + return miner7.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + + default: + return big.Zero(), xerrors.Errorf("unsupported network version") + } +} diff --git a/pkg/types/specactors/policy/policy.go.template b/pkg/types/specactors/policy/policy.go.template new file mode 100644 index 0000000000..1654671e61 --- /dev/null +++ b/pkg/types/specactors/policy/policy.go.template @@ -0,0 +1,337 @@ +// FETCHED FROM LOTUS: policy/policy.go.template + +package policy + +import ( + "sort" + + "github.com/filecoin-project/go-state-types/big" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + actors "github.com/filecoin-project/venus/pkg/types/specactors" + + {{range .versions}} + {{if (ge . 2)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" {{end}} + market{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/market" + miner{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/miner" + verifreg{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/verifreg" + {{if (eq . 0)}} power{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/power" {{end}} + {{end}} + + paych{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/builtin/paych" +) + +const ( + ChainFinality = miner{{.latestVersion}}.ChainFinality + SealRandomnessLookback = ChainFinality + PaychSettleDelay = paych{{.latestVersion}}.SettleDelay + MaxPreCommitRandomnessLookback = builtin{{.latestVersion}}.EpochsInDay + SealRandomnessLookback +) + +// SetSupportedProofTypes sets supported proof types, across all actor versions. +// This should only be used for testing. +func SetSupportedProofTypes(types ...abi.RegisteredSealProof) { + {{range .versions}} + {{if (eq . 0)}} + miner{{.}}.SupportedProofTypes = make(map[abi.RegisteredSealProof]struct{}, len(types)) + {{else if (le . 4)}} + miner{{.}}.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + miner{{.}}.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2) + miner{{.}}.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + {{else}} + miner{{.}}.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + {{end}} + {{end}} + + AddSupportedProofTypes(types...) +} + +// AddSupportedProofTypes sets supported proof types, across all actor versions. +// This should only be used for testing. +func AddSupportedProofTypes(types ...abi.RegisteredSealProof) { + for _, t := range types { + if t >= abi.RegisteredSealProof_StackedDrg2KiBV1_1 { + panic("must specify v1 proof types only") + } + // Set for all miner versions. + + {{range .versions}} + {{if (eq . 0)}} + miner{{.}}.SupportedProofTypes[t] = struct{}{} + {{else if (le . 4)}} + miner{{.}}.PreCommitSealProofTypesV0[t] = struct{}{} + miner{{.}}.PreCommitSealProofTypesV7[t] = struct{}{} + miner{{.}}.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + miner{{.}}.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + {{else if (eq . 5)}} + miner{{.}}.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + wpp, err := t.RegisteredWindowPoStProof() + if err != nil { + // Fine to panic, this is a test-only method + panic(err) + } + + miner{{.}}.WindowPoStProofTypes[wpp] = struct{}{} + {{else}} + miner{{.}}.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + wpp, err = t.RegisteredWindowPoStProof() + if err != nil { + // Fine to panic, this is a test-only method + panic(err) + } + + miner{{.}}.WindowPoStProofTypes[wpp] = struct{}{} + {{end}} + {{end}} + } +} + +// SetPreCommitChallengeDelay sets the pre-commit challenge delay across all +// actors versions. Use for testing. +func SetPreCommitChallengeDelay(delay abi.ChainEpoch) { + // Set for all miner versions. + {{range .versions}} + miner{{.}}.PreCommitChallengeDelay = delay + {{end}} +} + +// TODO: this function shouldn't really exist. Instead, the API should expose the precommit delay. +func GetPreCommitChallengeDelay() abi.ChainEpoch { + return miner{{.latestVersion}}.PreCommitChallengeDelay +} + +// SetConsensusMinerMinPower sets the minimum power of an individual miner must +// meet for leader election, across all actor versions. This should only be used +// for testing. +func SetConsensusMinerMinPower(p abi.StoragePower) { + {{range .versions}} + {{if (eq . 0)}} + power{{.}}.ConsensusMinerMinPower = p + {{else if (eq . 2)}} + for _, policy := range builtin{{.}}.SealProofPolicies { + policy.ConsensusMinerMinPower = p + } + {{else}} + for _, policy := range builtin{{.}}.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + {{end}} + {{end}} +} + +// SetMinVerifiedDealSize sets the minimum size of a verified deal. This should +// only be used for testing. +func SetMinVerifiedDealSize(size abi.StoragePower) { + {{range .versions}} + verifreg{{.}}.MinVerifiedDealSize = size + {{end}} +} + +func GetMaxProveCommitDuration(ver actors.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { + switch ver { + {{range .versions}} + case actors.Version{{.}}: + {{if (eq . 0)}} + return miner{{.}}.MaxSealDuration[t], nil + {{else}} + return miner{{.}}.MaxProveCommitDuration[t], nil + {{end}} + {{end}} + default: + return 0, xerrors.Errorf("unsupported actors version") + } +} + +// SetProviderCollateralSupplyTarget sets the percentage of normalized circulating +// supply that must be covered by provider collateral in a deal. This should +// only be used for testing. +func SetProviderCollateralSupplyTarget(num, denom big.Int) { +{{range .versions}} + {{if (ge . 2)}} + market{{.}}.ProviderCollateralSupplyTarget = builtin{{.}}.BigFrac{ + Numerator: num, + Denominator: denom, + } + {{end}} +{{end}} +} + +func DealProviderCollateralBounds( + size abi.PaddedPieceSize, verified bool, + rawBytePower, qaPower, baselinePower abi.StoragePower, + circulatingFil abi.TokenAmount, nwVer network.Version, +) (min, max abi.TokenAmount, err error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), big.Zero(), err + } + switch v { + {{range .versions}} + case actors.Version{{.}}: + {{if (eq . 0)}} + min, max := market{{.}}.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil, nwVer) + return min, max, nil + {{else}} + min, max := market{{.}}.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + {{end}} + {{end}} + default: + return big.Zero(), big.Zero(), xerrors.Errorf("unsupported actors version") + } +} + +func DealDurationBounds(pieceSize abi.PaddedPieceSize) (min, max abi.ChainEpoch) { + return market{{.latestVersion}}.DealDurationBounds(pieceSize) +} + +// Sets the challenge window and scales the proving period to match (such that +// there are always 48 challenge windows in a proving period). +func SetWPoStChallengeWindow(period abi.ChainEpoch) { + {{range .versions}} + miner{{.}}.WPoStChallengeWindow = period + miner{{.}}.WPoStProvingPeriod = period * abi.ChainEpoch(miner{{.}}.WPoStPeriodDeadlines) + {{if (ge . 3)}} + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner{{.}}.WPoStDisputeWindow = period * 30 + {{end}} + {{end}} +} + +func GetWinningPoStSectorSetLookback(nwVer network.Version) abi.ChainEpoch { + if nwVer <= network.Version3 { + return 10 + } + + // NOTE: if this ever changes, adjust it in a (*Miner).mineOne() logline as well + return ChainFinality +} + +func GetMaxSectorExpirationExtension() abi.ChainEpoch { + return miner{{.latestVersion}}.MaxSectorExpirationExtension +} + +func GetMinSectorExpiration() abi.ChainEpoch { + return miner{{.latestVersion}}.MinSectorExpiration +} + +func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, error) { + sectorsPerPart, err := builtin{{.latestVersion}}.PoStProofWindowPoStPartitionSectors(p) + if err != nil { + return 0, err + } + maxSectors, err := GetAddressedSectorsMax(nv) + if err != nil { + return 0, err + } + return int(uint64(maxSectors) / sectorsPerPart), nil +} + +func GetDefaultSectorSize() abi.SectorSize { + // supported sector sizes are the same across versions. + szs := make([]abi.SectorSize, 0, len(miner{{.latestVersion}}.PreCommitSealProofTypesV8)) + for spt := range miner{{.latestVersion}}.PreCommitSealProofTypesV8 { + ss, err := spt.SectorSize() + if err != nil { + panic(err) + } + + szs = append(szs, ss) + } + + sort.Slice(szs, func(i, j int) bool { + return szs[i] < szs[j] + }) + + return szs[0] +} + +func GetDefaultAggregationProof() abi.RegisteredAggregationProof { + return abi.RegisteredAggregationProof_SnarkPackV1 +} + +func GetSectorMaxLifetime(proof abi.RegisteredSealProof, nwVer network.Version) abi.ChainEpoch { + if nwVer <= network.Version10 { + return builtin4.SealProofPoliciesV0[proof].SectorMaxLifetime + } + + return builtin{{.latestVersion}}.SealProofPoliciesV11[proof].SectorMaxLifetime +} + +func GetAddressedSectorsMax(nwVer network.Version) (int, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return 0, err + } + switch v { + {{range .versions}} + case actors.Version{{.}}: + return miner{{.}}.AddressedSectorsMax, nil + {{end}} + default: + return 0, xerrors.Errorf("unsupported network version") + } +} + +func GetDeclarationsMax(nwVer network.Version) (int, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return 0, err + } + switch v { + {{range .versions}} + case actors.Version{{.}}: + {{if (eq . 0)}} + // TODO: Should we instead error here since the concept doesn't exist yet? + return miner{{.}}.AddressedPartitionsMax, nil + {{else}} + return miner{{.}}.DeclarationsMax, nil + {{end}} + {{end}} + default: + return 0, xerrors.Errorf("unsupported network version") + } +} + +func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), err + } + switch v { + {{range .versions}} + case actors.Version{{.}}: + {{if (ge . 6)}} + return miner{{.}}.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + {{else if (eq . 5)}} + return miner{{.}}.AggregateNetworkFee(aggregateSize, baseFee), nil + {{else}} + return big.Zero(), nil + {{end}} + {{end}} + default: + return big.Zero(), xerrors.Errorf("unsupported network version") + } +} + +func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), err + } + switch v { + {{range .versions}} + case actors.Version{{.}}: + {{if (ge . 6)}} + return miner{{.}}.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + {{else}} + return big.Zero(), nil + {{end}} + {{end}} + default: + return big.Zero(), xerrors.Errorf("unsupported network version") + } +} diff --git a/pkg/types/specactors/policy/policy_test.go b/pkg/types/specactors/policy/policy_test.go new file mode 100644 index 0000000000..fd644f1e07 --- /dev/null +++ b/pkg/types/specactors/policy/policy_test.go @@ -0,0 +1,86 @@ +package policy + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych" + verifreg0 "github.com/filecoin-project/specs-actors/actors/builtin/verifreg" + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + paych2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/paych" + verifreg2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/verifreg" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestSupportedProofTypes(t *testing.T) { + tf.UnitTest(t) + var oldTypes []abi.RegisteredSealProof + for t := range miner0.SupportedProofTypes { + oldTypes = append(oldTypes, t) + } + t.Cleanup(func() { + SetSupportedProofTypes(oldTypes...) + }) + + SetSupportedProofTypes(abi.RegisteredSealProof_StackedDrg2KiBV1) + require.EqualValues(t, + miner0.SupportedProofTypes, + map[abi.RegisteredSealProof]struct{}{ + abi.RegisteredSealProof_StackedDrg2KiBV1: {}, + }, + ) + AddSupportedProofTypes(abi.RegisteredSealProof_StackedDrg8MiBV1) + require.EqualValues(t, + miner0.SupportedProofTypes, + map[abi.RegisteredSealProof]struct{}{ + abi.RegisteredSealProof_StackedDrg2KiBV1: {}, + abi.RegisteredSealProof_StackedDrg8MiBV1: {}, + }, + ) +} + +// Tests assumptions about policies being the same between actor versions. +func TestAssumptions(t *testing.T) { + tf.UnitTest(t) + require.EqualValues(t, miner0.SupportedProofTypes, miner2.PreCommitSealProofTypesV0) + require.Equal(t, miner0.PreCommitChallengeDelay, miner2.PreCommitChallengeDelay) + require.Equal(t, miner0.MaxSectorExpirationExtension, miner2.MaxSectorExpirationExtension) + require.Equal(t, miner0.ChainFinality, miner2.ChainFinality) + require.Equal(t, miner0.WPoStChallengeWindow, miner2.WPoStChallengeWindow) + require.Equal(t, miner0.WPoStProvingPeriod, miner2.WPoStProvingPeriod) + require.Equal(t, miner0.WPoStPeriodDeadlines, miner2.WPoStPeriodDeadlines) + require.Equal(t, miner0.AddressedSectorsMax, miner2.AddressedSectorsMax) + require.Equal(t, paych0.SettleDelay, paych2.SettleDelay) + require.True(t, verifreg0.MinVerifiedDealSize.Equals(verifreg2.MinVerifiedDealSize)) +} + +func TestPartitionSizes(t *testing.T) { + tf.UnitTest(t) + for _, p := range abi.SealProofInfos { + sizeNew, err := builtin2.PoStProofWindowPoStPartitionSectors(p.WindowPoStProof) + require.NoError(t, err) + sizeOld, err := builtin0.PoStProofWindowPoStPartitionSectors(p.WindowPoStProof) + if err != nil { + // new proof type. + continue + } + require.Equal(t, sizeOld, sizeNew) + } +} + +func TestPoStSize(t *testing.T) { + tf.UnitTest(t) + v12PoStSize, err := GetMaxPoStPartitions(network.Version12, abi.RegisteredPoStProof_StackedDrgWindow64GiBV1) + require.Equal(t, 4, v12PoStSize) + require.NoError(t, err) + v13PoStSize, err := GetMaxPoStPartitions(network.Version13, abi.RegisteredPoStProof_StackedDrgWindow64GiBV1) + require.NoError(t, err) + require.Equal(t, 10, v13PoStSize) +} diff --git a/pkg/types/specactors/version.go b/pkg/types/specactors/version.go new file mode 100644 index 0000000000..3db0af5841 --- /dev/null +++ b/pkg/types/specactors/version.go @@ -0,0 +1,59 @@ +package specactors + +import ( + "fmt" + + "github.com/filecoin-project/go-state-types/network" +) + +type Version int + +/* inline-gen template + +var LatestVersion = {{.latestActorsVersion}} + +var Versions = []int{ {{range .actorVersions}} {{.}}, {{end}} } + +const ({{range .actorVersions}} + Version{{.}} Version = {{.}}{{end}} +) + +/* inline-gen start */ + +var LatestVersion = 7 + +var Versions = []int{0, 2, 3, 4, 5, 6, 7} + +const ( + Version0 Version = 0 + Version2 Version = 2 + Version3 Version = 3 + Version4 Version = 4 + Version5 Version = 5 + Version6 Version = 6 + Version7 Version = 7 +) + +/* inline-gen end */ + +// Converts a network version into an actors adt version. +func VersionForNetwork(version network.Version) (Version, error) { + switch version { + case network.Version0, network.Version1, network.Version2, network.Version3: + return Version0, nil + case network.Version4, network.Version5, network.Version6, network.Version7, network.Version8, network.Version9: + return Version2, nil + case network.Version10, network.Version11: + return Version3, nil + case network.Version12: + return Version4, nil + case network.Version13: + return Version5, nil + case network.Version14: + return Version6, nil + case network.Version15: + return Version7, nil + default: + return -1, fmt.Errorf("unsupported network version %d", version) + } +} diff --git a/pkg/types/testing.go b/pkg/types/testing.go new file mode 100644 index 0000000000..ab1254f4c2 --- /dev/null +++ b/pkg/types/testing.go @@ -0,0 +1 @@ +package types diff --git a/pkg/types/types.go b/pkg/types/types.go new file mode 100644 index 0000000000..5bc4080394 --- /dev/null +++ b/pkg/types/types.go @@ -0,0 +1,67 @@ +package types + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/constants" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" +) + +type EstimateMessage struct { + Msg *Message + Spec *MessageSendSpec +} + +type EstimateResult struct { + Msg *Message + Err string +} + +type MessageSendSpec struct { + MaxFee abi.TokenAmount + GasOverEstimation float64 +} + +var DefaultMessageSendSpec = MessageSendSpec{ + // MaxFee of 0.1FIL + MaxFee: abi.NewTokenAmount(int64(constants.FilecoinPrecision) / 10), +} + +func (ms *MessageSendSpec) Get() MessageSendSpec { + if ms == nil { + return DefaultMessageSendSpec + } + + return *ms +} + +type ChainSectorInfo struct { + Info miner.SectorOnChainInfo + ID abi.SectorNumber +} + +type DealCollateralBounds struct { + Min abi.TokenAmount + Max abi.TokenAmount +} + +type MarketDeal struct { + Proposal market.DealProposal + State market.DealState +} + +type CirculatingSupply struct { + FilVested abi.TokenAmount + FilMined abi.TokenAmount + FilBurnt abi.TokenAmount + FilLocked abi.TokenAmount + FilCirculating abi.TokenAmount +} + +type NetworkPower struct { + RawBytePower abi.StoragePower + QualityAdjustedPower abi.StoragePower + MinerCount int64 + MinPowerMinerCount int64 +} diff --git a/pkg/types/types_gen.go b/pkg/types/types_gen.go new file mode 100755 index 0000000000..b263950a03 --- /dev/null +++ b/pkg/types/types_gen.go @@ -0,0 +1,107 @@ +// Code generated by github.com/filecoin-project/tools/gen/api. DO NOT EDIT. + +package types + +import "github.com/filecoin-project/venus/pkg/types/internal" + +//type redefine +type BlockMessagesInfo = internal.BlockMessagesInfo +type FIL = internal.FIL +type Ticket = internal.Ticket +type TipSetKey = internal.TipSetKey +type BlockHeader = internal.BlockHeader +type MessageMaker = internal.MessageMaker +type ReceiptMaker = internal.ReceiptMaker +type Actor = internal.Actor +type VRFPi = internal.VRFPi +type ElectionProof = internal.ElectionProof +type BigInt = internal.BigInt +type BlockMsg = internal.BlockMsg +type Signer = internal.Signer +type BeaconEntry = internal.BeaconEntry +type MockSigner = internal.MockSigner +type HasCid = internal.HasCid +type TipSet = internal.TipSet +type FullBlock = internal.FullBlock +type FullTipSet = internal.FullTipSet +type SignedMessage = internal.SignedMessage +type ChainMsg = internal.ChainMsg +type Message = internal.Message +type UnsignedMessage = internal.UnsignedMessage +type TxMeta = internal.TxMeta +type MessageReceipt = internal.MessageReceipt + +//func redefine +var ParseFIL = internal.ParseFIL +var MustParseFIL = internal.MustParseFIL +var NewTipSetKey = internal.NewTipSetKey +var TipSetKeyFromBytes = internal.TipSetKeyFromBytes +var DecodeBlock = internal.DecodeBlock +var NewMessageMaker = internal.NewMessageMaker +var EmptyReceipts = internal.EmptyReceipts +var NewReceiptMaker = internal.NewReceiptMaker +var NewActor = internal.NewActor +var NewInt = internal.NewInt +var FromFil = internal.FromFil +var BigFromBytes = internal.BigFromBytes +var BigFromString = internal.BigFromString +var BigMul = internal.BigMul +var BigDiv = internal.BigDiv +var BigDivFloat = internal.BigDivFloat +var BigMod = internal.BigMod +var BigAdd = internal.BigAdd +var BigSub = internal.BigSub +var BigCmp = internal.BigCmp +var SizeStr = internal.SizeStr +var DeciStr = internal.DeciStr +var NewMockSigner = internal.NewMockSigner +var NewMockSignersAndKeyInfo = internal.NewMockSignersAndKeyInfo +var MustGenerateMixedKeyInfo = internal.MustGenerateMixedKeyInfo +var MustGenerateBLSKeyInfo = internal.MustGenerateBLSKeyInfo +var MustGenerateKeyInfo = internal.MustGenerateKeyInfo +var NewSignedMessageForTestGetter = internal.NewSignedMessageForTestGetter +var CidFromString = internal.CidFromString +var NewCidForTestGetter = internal.NewCidForTestGetter +var NewMessageForTestGetter = internal.NewMessageForTestGetter +var NewMsgs = internal.NewMsgs +var NewSignedMsgs = internal.NewSignedMsgs +var SignMsgs = internal.SignMsgs +var NewMsgsWithAddrs = internal.NewMsgsWithAddrs +var AssertHaveSameCid = internal.AssertHaveSameCid +var AssertCidsEqual = internal.AssertCidsEqual +var RequireIDAddress = internal.RequireIDAddress +var NewForTestGetter = internal.NewForTestGetter +var RequireNewTipSet = internal.RequireNewTipSet +var NewTipSet = internal.NewTipSet +var CidArrsEqual = internal.CidArrsEqual +var NewFullTipSet = internal.NewFullTipSet +var ReverseFullBlock = internal.ReverseFullBlock +var ReverseTipSet = internal.ReverseTipSet +var NewSignedMessage = internal.NewSignedMessage +var NewAttoFIL = internal.NewAttoFIL +var NewAttoFILFromFIL = internal.NewAttoFILFromFIL +var NewAttoFILFromFILString = internal.NewAttoFILFromFILString +var NewAttoFILFromString = internal.NewAttoFILFromString +var NewUnsignedMessage = internal.NewUnsignedMessage +var NewMeteredMessage = internal.NewMeteredMessage +var DecodeMessage = internal.DecodeMessage +var NewGasFeeCap = internal.NewGasFeeCap +var NewGasPremium = internal.NewGasPremium + +//value redefine +var ZeroFIL = internal.ZeroFIL +var AttoFil = internal.AttoFil +var FemtoFil = internal.FemtoFil +var PicoFil = internal.PicoFil +var NanoFil = internal.NanoFil +var ErrNotFound = internal.ErrNotFound +var EmptyTSK = internal.EmptyTSK +var ErrActorNotFound = internal.ErrActorNotFound +var BlocksPerEpoch = internal.BlocksPerEpoch +var MaxWinCount = internal.MaxWinCount +var ZeroAddress = internal.ZeroAddress +var TotalFilecoinInt = internal.TotalFilecoinInt +var EmptyInt = internal.EmptyInt +var UndefTipSet = internal.UndefTipSet +var MessageVersion = internal.MessageVersion +var EmptyTokenAmount = internal.EmptyTokenAmount diff --git a/pkg/util/blockstoreutil/badger.go b/pkg/util/blockstoreutil/badger.go new file mode 100644 index 0000000000..f536e40fa8 --- /dev/null +++ b/pkg/util/blockstoreutil/badger.go @@ -0,0 +1,428 @@ +package blockstoreutil + +import ( + "context" + "fmt" + "io" + "sync/atomic" + + "github.com/dgraph-io/badger/v2" + "github.com/dgraph-io/badger/v2/options" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + "github.com/ipfs/go-datastore/keytransform" + blockstore "github.com/ipfs/go-ipfs-blockstore" + dshelp "github.com/ipfs/go-ipfs-ds-help" + "go.uber.org/zap" +) + +var ( + // ErrBlockstoreClosed is returned from blockstore operations after + // the blockstore has been closed. + ErrBlockstoreClosed = fmt.Errorf("badger blockstore closed") +) + +// aliases to mask badger dependencies. +const ( + // FileIO is equivalent to badger/options.FileIO. + FileIO = options.FileIO + // MemoryMap is equivalent to badger/options.MemoryMap. + MemoryMap = options.MemoryMap + // LoadToRAM is equivalent to badger/options.LoadToRAM. + LoadToRAM = options.LoadToRAM +) + +// Options embeds the badger options themselves, and augments them with +// blockstore-specific options. +type Options struct { + badger.Options + + // Prefix is an optional prefix to prepend to keys. Default: "". + Prefix string +} + +func DefaultOptions(path string) Options { + return Options{ + Options: badger.DefaultOptions(path), + Prefix: "", + } +} + +// BadgerBlockstoreOptions returns the badger options to apply for the provided +// domain. +func BadgerBlockstoreOptions(path string, readonly bool) (Options, error) { + + opts := DefaultOptions(path) + + // Due to legacy usage of blockstore.blockstore, over a datastore, all + // blocks are prefixed with this namespace. In the future, this can go away, + // in order to shorten keys, but it'll require a migration. + opts.Prefix = "" + + // blockstore values are immutable; therefore we do not expect any + // conflicts to emerge. + opts.DetectConflicts = false + + // This is to optimize the database on close so it can be opened + // read-only and efficiently queried. We don't do that and hanging on + // stop isn't nice. + opts.CompactL0OnClose = false + + // The alternative is "crash on start and tell the user to fix it". This + // will truncate corrupt and unsynced data, which we don't guarantee to + // persist anyways. + opts.Truncate = true + + // We mmap the index and the value logs; this is important to enable + // zero-copy value access. + opts.ValueLogLoadingMode = FileIO + opts.TableLoadingMode = FileIO + + // Embed only values < 128 bytes in the LSM tree; larger values are stored + // in value logs. + opts.ValueThreshold = 128 + + // Default table size is already 64MiB. This is here to make it explicit. + opts.MaxTableSize = 64 << 20 + + // NOTE: The chain blockstore doesn't require any GC (blocks are never + // deleted). This will change if we move to a tiered blockstore. + + opts.ReadOnly = readonly + + return opts, nil +} + +// badgerLogger is a local wrapper for go-log to make the interface +// compatible with badger.Logger (namely, aliasing Warnf to Warningf) +type badgerLogger struct { + *zap.SugaredLogger // skips 1 caller to get useful line info, skipping over badger.Options. + + skip2 *zap.SugaredLogger // skips 2 callers, just like above + this logger. +} + +// Warningf is required by the badger logger APIs. +func (b *badgerLogger) Warningf(format string, args ...interface{}) { + b.skip2.Warnf(format, args...) +} + +const ( + stateOpen int64 = iota + stateClosing + stateClosed +) + +// blockstore is a badger-backed IPLD blockstore. +// +// NOTE: once Close() is called, methods will try their best to return +// ErrBlockstoreClosed. This will guaranteed to happen for all subsequent +// operation calls after Close() has returned, but it may not happen for +// operations in progress. Those are likely to fail with a different error. +type BadgerBlockstore struct { + DB *badger.DB + + // state is guarded by atomic. + state int64 + + keyTransform *keytransform.PrefixTransform + + cache IBlockCache +} + +var _ blockstore.Blockstore = (*BadgerBlockstore)(nil) +var _ blockstore.Viewer = (*BadgerBlockstore)(nil) +var _ io.Closer = (*BadgerBlockstore)(nil) + +// Open creates a new badger-backed blockstore, with the supplied options. +func Open(opts Options) (*BadgerBlockstore, error) { + opts.Logger = &badgerLogger{ + SugaredLogger: log.Desugar().WithOptions(zap.AddCallerSkip(1)).Sugar(), + skip2: log.Desugar().WithOptions(zap.AddCallerSkip(2)).Sugar(), + } + keyTransform := &keytransform.PrefixTransform{ + Prefix: datastore.NewKey(opts.Prefix), + } + db, err := badger.Open(opts.Options) + if err != nil { + return nil, fmt.Errorf("failed to open badger blockstore: %w", err) + } + + cache := NewLruCache(10 * 10000) + bs := &BadgerBlockstore{ + DB: db, + keyTransform: keyTransform, + cache: cache, + } + return bs, nil +} + +// Close closes the store. If the store has already been closed, this noops and +// returns an error, even if the first closure resulted in error. +func (b *BadgerBlockstore) Close() error { + if !atomic.CompareAndSwapInt64(&b.state, stateOpen, stateClosing) { + return nil + } + + defer atomic.StoreInt64(&b.state, stateClosed) + return b.DB.Close() +} + +func (b *BadgerBlockstore) ReadonlyDatastore() *TxBlockstore { + return &TxBlockstore{ + cache: b.cache, + tx: b.DB.NewTransaction(false), + keyTransform: b.keyTransform, + } +} + +// View implements blockstore.Viewer, which leverages zero-copy read-only +// access to values. +func (b *BadgerBlockstore) View(ctx context.Context, cid cid.Cid, fn func([]byte) error) error { + if atomic.LoadInt64(&b.state) != stateOpen { + return ErrBlockstoreClosed + } + + key := b.ConvertKey(cid) + return b.DB.View(func(txn *badger.Txn) error { + switch item, err := txn.Get(key.Bytes()); err { + case nil: + return item.Value(fn) + case badger.ErrKeyNotFound: + return blockstore.ErrNotFound + default: + return fmt.Errorf("failed to view block from badger blockstore: %w", err) + } + }) +} + +// Has implements blockstore.Has. +func (b *BadgerBlockstore) Has(ctx context.Context, cid cid.Cid) (bool, error) { + if atomic.LoadInt64(&b.state) != stateOpen { + return false, ErrBlockstoreClosed + } + + key := b.ConvertKey(cid) + if b.cache != nil { + if _, has := b.cache.Get(key.String()); has { + return true, nil + } + } + + err := b.DB.View(func(txn *badger.Txn) error { + _, err := txn.Get(key.Bytes()) + return err + }) + + switch err { + case badger.ErrKeyNotFound: + return false, nil + case nil: + return true, nil + default: + return false, fmt.Errorf("failed to check if block exists in badger blockstore: %w", err) + } +} + +// Get implements blockstore.Get. +func (b *BadgerBlockstore) Get(ctx context.Context, cid cid.Cid) (blocks.Block, error) { + if !cid.Defined() { + return nil, blockstore.ErrNotFound + } + + if atomic.LoadInt64(&b.state) != stateOpen { + return nil, ErrBlockstoreClosed + } + + key := b.ConvertKey(cid) + if b.cache != nil { + if val, has := b.cache.Get(key.String()); has { + return val.(blocks.Block), nil + } + } + + //migrate + //todo just for test + var val []byte + err := b.DB.View(func(txn *badger.Txn) error { + switch item, err := txn.Get(key.Bytes()); err { + case nil: + val, err = item.ValueCopy(nil) + return err + case badger.ErrKeyNotFound: + return blockstore.ErrNotFound + default: + return fmt.Errorf("failed to get block from badger blockstore: %w", err) + } + }) + if err != nil { + return nil, err + } + blk, err := blocks.NewBlockWithCid(val, cid) + if err != nil { + return nil, err + } + + b.cache.Add(key.String(), blk) + return blk, nil +} + +// GetSize implements blockstore.GetSize. +func (b *BadgerBlockstore) GetSize(ctx context.Context, cid cid.Cid) (int, error) { + if atomic.LoadInt64(&b.state) != stateOpen { + return -1, ErrBlockstoreClosed + } + + key := b.ConvertKey(cid) + if b.cache != nil { + if val, has := b.cache.Get(key.String()); has { + return len(val.(blocks.Block).RawData()), nil + } + } + + var size int + err := b.DB.View(func(txn *badger.Txn) error { + switch item, err := txn.Get(key.Bytes()); err { + case nil: + size = int(item.ValueSize()) + case badger.ErrKeyNotFound: + return blockstore.ErrNotFound + default: + return fmt.Errorf("failed to get block size from badger blockstore: %w", err) + } + return nil + }) + if err != nil { + size = -1 + } + return size, err +} + +// Put implements blockstore.Put. +func (b *BadgerBlockstore) Put(ctx context.Context, block blocks.Block) error { + if atomic.LoadInt64(&b.state) != stateOpen { + return ErrBlockstoreClosed + } + + key := b.ConvertKey(block.Cid()) + if _, ok := b.cache.Get(key.String()); ok { + return nil + } + + err := b.DB.Update(func(txn *badger.Txn) error { + err := txn.Set(key.Bytes(), block.RawData()) + if err == nil { + b.cache.Add(key.String(), block) + } + return err + }) + if err != nil { + err = fmt.Errorf("failed to put block in badger blockstore: %w", err) + } + return err +} + +// PutMany implements blockstore.PutMany. +func (b *BadgerBlockstore) PutMany(ctx context.Context, blks []blocks.Block) error { + if atomic.LoadInt64(&b.state) != stateOpen { + return ErrBlockstoreClosed + } + + batch := b.DB.NewWriteBatch() + defer batch.Cancel() + + flushToCache := map[string]blocks.Block{} + for _, block := range blks { + key := b.ConvertKey(block.Cid()) + if _, ok := b.cache.Get(key.String()); ok { + continue + } + + if err := batch.Set(key.Bytes(), block.RawData()); err != nil { + return err + } + + flushToCache[key.String()] = block + } + + err := batch.Flush() + if err != nil { + err = fmt.Errorf("failed to put blocks in badger blockstore: %w", err) + } + //flush to cache + for k, v := range flushToCache { + b.cache.Add(k, v) + } + return err +} + +// DeleteBlock implements blockstore.DeleteBlock. +func (b *BadgerBlockstore) DeleteBlock(ctx context.Context, cid cid.Cid) error { + if atomic.LoadInt64(&b.state) != stateOpen { + return ErrBlockstoreClosed + } + + key := b.ConvertKey(cid) + return b.DB.Update(func(txn *badger.Txn) error { + err := txn.Delete(key.Bytes()) + if err == nil { + b.cache.Remove(key.String()) + } + return err + }) +} + +// AllKeysChan implements blockstore.AllKeysChan. +func (b *BadgerBlockstore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) { + if atomic.LoadInt64(&b.state) != stateOpen { + return nil, ErrBlockstoreClosed + } + + txn := b.DB.NewTransaction(false) + opts := badger.IteratorOptions{PrefetchSize: 100} + iter := txn.NewIterator(opts) + + ch := make(chan cid.Cid) + go func() { + defer close(ch) + defer iter.Close() + + // NewCidV1 makes a copy of the multihash buffer, so we can reuse it to + // contain allocs. + for iter.Rewind(); iter.Valid(); iter.Next() { + if ctx.Err() != nil { + return // context has fired. + } + if atomic.LoadInt64(&b.state) != stateOpen { + // open iterators will run even after the database is closed... + return // closing, yield. + } + k := iter.Item().Key() + // need to convert to key.Key using key.KeyFromDsKey. + bk, err := dshelp.BinaryFromDsKey(datastore.RawKey(string(k))) + if err != nil { + log.Warnf("error parsing key from binary: %s", err) + continue + } + cidKey := cid.NewCidV1(cid.Raw, bk) + select { + case <-ctx.Done(): + return + case ch <- cidKey: + } + } + }() + + return ch, nil +} + +// HashOnRead implements blockstore.HashOnRead. It is not supported by this +// blockstore. +func (b *BadgerBlockstore) HashOnRead(_ bool) { + log.Warnf("called HashOnRead on badger blockstore; function not supported; ignoring") +} + +func (b *BadgerBlockstore) ConvertKey(cid cid.Cid) datastore.Key { + key := dshelp.MultihashToDsKey(cid.Hash()) + return b.keyTransform.ConvertKey(key) +} diff --git a/pkg/util/blockstoreutil/blockstore.go b/pkg/util/blockstoreutil/blockstore.go new file mode 100644 index 0000000000..f50a96768d --- /dev/null +++ b/pkg/util/blockstoreutil/blockstore.go @@ -0,0 +1,72 @@ +// blockstoreutil contains all the basic blockstore constructors used by lotus. Any +// blockstoreutil not ultimately constructed out of the building blocks in this +// package may not work properly. +// +// * This package correctly wraps blockstores with the IdBlockstore. This blockstore: +// * Filters out all puts for blocks with CIDs using the "identity" hash function. +// * Extracts inlined blocks from CIDs using the identity hash function and +// returns them on get/has, ignoring the contents of the blockstore. +// * In the future, this package may enforce additional restrictions on block +// sizes, CID validity, etc. +// +// To make auditing for misuse of blockstores tractable, this package re-exports +// parts of the go-ipfs-blockstore package such that no other package needs to +// import it directly. +package blockstoreutil + +import ( + "context" + + ds "github.com/ipfs/go-datastore" + + blockstore "github.com/ipfs/go-ipfs-blockstore" +) + +// NewTemporary returns a temporary blockstore. +func NewTemporary() MemStore { + return make(MemStore) +} + +// NewTemporarySync returns a thread-safe temporary blockstore. +func NewTemporarySync() *SyncStore { + return &SyncStore{bs: make(MemStore)} +} + +// WrapIDStore wraps the underlying blockstore in an "identity" blockstore. +func WrapIDStore(bstore blockstore.Blockstore) blockstore.Blockstore { + return blockstore.NewIdStore(bstore) +} + +// NewBlockstore creates a new blockstore wrapped by the given datastore. +func NewBlockstore(dstore ds.Batching) blockstore.Blockstore { + return WrapIDStore(blockstore.NewBlockstore(dstore)) +} + +// Alias so other packages don't have to import go-ipfs-blockstore +type Blockstore = blockstore.Blockstore +type Viewer = blockstore.Viewer +type GCBlockstore = blockstore.GCBlockstore +type CacheOpts = blockstore.CacheOpts +type GCLocker = blockstore.GCLocker + +var NewGCLocker = blockstore.NewGCLocker +var NewGCBlockstore = blockstore.NewGCBlockstore + +// ErrNotFound is an error returned when a block is not found +var ErrNotFound = blockstore.ErrNotFound + +func DefaultCacheOpts() CacheOpts { + return CacheOpts{ + HasBloomFilterSize: 0, + HasBloomFilterHashes: 0, + HasARCCacheSize: 512 << 10, + } +} + +func CachedBlockstore(ctx context.Context, bs Blockstore, opts CacheOpts) (Blockstore, error) { + bs, err := blockstore.CachedBlockstore(ctx, bs, opts) + if err != nil { + return nil, err + } + return WrapIDStore(bs), nil +} diff --git a/pkg/util/blockstoreutil/buf_bstore.go b/pkg/util/blockstoreutil/buf_bstore.go new file mode 100644 index 0000000000..f6e05d2fcf --- /dev/null +++ b/pkg/util/blockstoreutil/buf_bstore.go @@ -0,0 +1,188 @@ +package blockstoreutil + +import ( + "context" + "os" + + block "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + logging "github.com/ipfs/go-log/v2" +) + +var log = logging.Logger("bufbs") + +type BufferedBS struct { + read Blockstore + write Blockstore + + readviewer Viewer + writeviewer Viewer +} + +func NewBufferedBstore(base Blockstore) *BufferedBS { + var buf Blockstore + if os.Getenv("LOTUS_DISABLE_VM_BUF") == "iknowitsabadidea" { + log.Warn("VM BLOCKSTORE BUFFERING IS DISABLED") + buf = base + } else { + buf = NewTemporary() + } + + bs := &BufferedBS{ + read: base, + write: buf, + } + if v, ok := base.(Viewer); ok { + bs.readviewer = v + } + if v, ok := buf.(Viewer); ok { + bs.writeviewer = v + } + if (bs.writeviewer == nil) != (bs.readviewer == nil) { + log.Warnf("one of the stores is not viewable; running less efficiently") + } + return bs +} + +func NewTieredBstore(r Blockstore, w Blockstore) *BufferedBS { + return &BufferedBS{ + read: r, + write: w, + } +} + +var _ Blockstore = (*BufferedBS)(nil) +var _ Viewer = (*BufferedBS)(nil) + +func (bs *BufferedBS) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) { + a, err := bs.read.AllKeysChan(ctx) + if err != nil { + return nil, err + } + + b, err := bs.write.AllKeysChan(ctx) + if err != nil { + return nil, err + } + + out := make(chan cid.Cid) + go func() { + defer close(out) + for a != nil || b != nil { + select { + case val, ok := <-a: + if !ok { + a = nil + } else { + select { + case out <- val: + case <-ctx.Done(): + return + } + } + case val, ok := <-b: + if !ok { + b = nil + } else { + select { + case out <- val: + case <-ctx.Done(): + return + } + } + } + } + }() + + return out, nil +} + +func (bs *BufferedBS) DeleteBlock(ctx context.Context, c cid.Cid) error { + if err := bs.read.DeleteBlock(ctx, c); err != nil { + return err + } + + return bs.write.DeleteBlock(ctx, c) +} + +func (bs *BufferedBS) View(ctx context.Context, c cid.Cid, callback func([]byte) error) error { + if bs.writeviewer == nil || bs.readviewer == nil { + // one of the stores isn't Viewer; fall back to pure Get behaviour. + blk, err := bs.Get(ctx, c) + if err != nil { + return err + } + return callback(blk.RawData()) + } + + // both stores are viewable. + if err := bs.writeviewer.View(ctx, c, callback); err == ErrNotFound { + // not found in write blockstore; fall through. + } else { + return err // propagate errors, or nil, i.e. found. + } + return bs.readviewer.View(ctx, c, callback) +} + +func (bs *BufferedBS) Get(ctx context.Context, c cid.Cid) (block.Block, error) { + if out, err := bs.write.Get(ctx, c); err != nil { + if err != ErrNotFound { + return nil, err + } + } else { + return out, nil + } + + return bs.read.Get(ctx, c) +} + +func (bs *BufferedBS) GetSize(ctx context.Context, c cid.Cid) (int, error) { + s, err := bs.read.GetSize(ctx, c) + if err == ErrNotFound || s == 0 { + return bs.write.GetSize(ctx, c) + } + + return s, err +} + +func (bs *BufferedBS) Put(ctx context.Context, blk block.Block) error { + has, err := bs.read.Has(ctx, blk.Cid()) // TODO: consider dropping this check + if err != nil { + return err + } + + if has { + return nil + } + + return bs.write.Put(ctx, blk) +} + +func (bs *BufferedBS) Has(ctx context.Context, c cid.Cid) (bool, error) { + has, err := bs.write.Has(ctx, c) + if err != nil { + return false, err + } + if has { + return true, nil + } + + return bs.read.Has(ctx, c) +} + +func (bs *BufferedBS) HashOnRead(hor bool) { + bs.read.HashOnRead(hor) + bs.write.HashOnRead(hor) +} + +func (bs *BufferedBS) PutMany(ctx context.Context, blks []block.Block) error { + return bs.write.PutMany(ctx, blks) +} + +func (bs *BufferedBS) Read() Blockstore { + return bs.read +} + +func (bs *BufferedBS) Write() Blockstore { + return bs.write +} diff --git a/pkg/util/blockstoreutil/cache_store.go b/pkg/util/blockstoreutil/cache_store.go new file mode 100644 index 0000000000..2b9bfc23d7 --- /dev/null +++ b/pkg/util/blockstoreutil/cache_store.go @@ -0,0 +1,77 @@ +package blockstoreutil + +import ( + "github.com/bluele/gcache" + tcache "github.com/patrickmn/go-cache" + "time" +) + +type IBlockCache interface { + Get(key string) (value interface{}, ok bool) + Remove(key string) + Add(key string, value interface{}) + AddWithExpire(key string, value interface{}, dur time.Duration) +} + +var _ IBlockCache = (*TimeCache)(nil) + +type TimeCache struct { + cache *tcache.Cache +} + +func NewTimeCache(expireTime, cleanTime time.Duration) *TimeCache { + tCache := tcache.New(expireTime, cleanTime) + return &TimeCache{cache: tCache} +} + +func (timeCache TimeCache) Get(key string) (interface{}, bool) { + return timeCache.cache.Get(key) +} + +func (timeCache TimeCache) Remove(key string) { + timeCache.cache.Delete(key) +} + +func (timeCache TimeCache) Add(key string, value interface{}) { + timeCache.cache.Set(key, value, 0) +} + +func (timeCache TimeCache) AddWithExpire(key string, value interface{}, dur time.Duration) { + timeCache.cache.Set(key, value, dur) +} + +var _ IBlockCache = (*LruCache)(nil) + +type LruCache struct { + cache gcache.Cache +} + +func NewLruCache(size int) *LruCache { + cache := gcache.New(size).LRU().Build() + go printRate(cache) + return &LruCache{cache: cache} +} + +func (l LruCache) Get(key string) (interface{}, bool) { + val, err := l.cache.Get(key) + return val, err == nil +} + +func (l LruCache) Remove(key string) { + l.cache.Remove(key) +} + +func (l LruCache) Add(key string, value interface{}) { + _ = l.cache.Set(key, value) +} + +func (l LruCache) AddWithExpire(key string, value interface{}, dur time.Duration) { + _ = l.cache.SetWithExpire(key, value, dur) +} + +func printRate(cache gcache.Cache) { + tm := time.NewTicker(time.Minute) + for range tm.C { + log.Infof("lru database cache hitrate:%f", cache.HitRate()) + } +} diff --git a/pkg/util/blockstoreutil/copy.go b/pkg/util/blockstoreutil/copy.go new file mode 100644 index 0000000000..cbbc6211c7 --- /dev/null +++ b/pkg/util/blockstoreutil/copy.go @@ -0,0 +1,181 @@ +package blockstoreutil + +import ( + "bytes" + "context" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + mh "github.com/multiformats/go-multihash" + xerrors "github.com/pkg/errors" + cbg "github.com/whyrusleeping/cbor-gen" + "go.opencensus.io/trace" +) + +func CopyBlockstore(ctx context.Context, from, to Blockstore) error { + ctx, span := trace.StartSpan(ctx, "copyBlockstore") + defer span.End() + cids, err := from.AllKeysChan(ctx) + if err != nil { + return err + } + + // TODO: should probably expose better methods on the blockstore for this operation + var blks []blocks.Block + for c := range cids { + b, err := from.Get(ctx, c) + if err != nil { + return err + } + + blks = append(blks, b) + } + + if err := to.PutMany(ctx, blks); err != nil { + return err + } + + return nil +} + +func linksForObj(blk blocks.Block, cb func(cid.Cid)) error { + switch blk.Cid().Prefix().Codec { + case cid.DagCBOR: + err := cbg.ScanForLinks(bytes.NewReader(blk.RawData()), cb) + if err != nil { + return xerrors.Errorf("cbg.ScanForLinks: %v", err) + } + return nil + case cid.Raw: + // We implicitly have all children of raw blocks. + return nil + default: + return xerrors.Errorf("vm flush copy method only supports dag cbor") + } +} + +func CopyParticial(ctx context.Context, from, to Blockstore, root cid.Cid) error { + ctx, span := trace.StartSpan(ctx, "vm.Copy") // nolint + defer span.End() + + var numBlocks int + var totalCopySize int + + const batchSize = 128 + const bufCount = 3 + freeBufs := make(chan []blocks.Block, bufCount) + toFlush := make(chan []blocks.Block, bufCount) + for i := 0; i < bufCount; i++ { + freeBufs <- make([]blocks.Block, 0, batchSize) + } + + errFlushChan := make(chan error) + + go func() { + for b := range toFlush { + if err := to.PutMany(ctx, b); err != nil { + close(freeBufs) + errFlushChan <- xerrors.Errorf("batch put in copy: %v", err) + return + } + freeBufs <- b[:0] + } + close(errFlushChan) + close(freeBufs) + }() + + var batch = <-freeBufs + batchCp := func(blk blocks.Block) error { + numBlocks++ + totalCopySize += len(blk.RawData()) + + batch = append(batch, blk) + + if len(batch) >= batchSize { + toFlush <- batch + var ok bool + batch, ok = <-freeBufs + if !ok { + return <-errFlushChan + } + } + return nil + } + + if err := copyRec(ctx, from, to, root, batchCp); err != nil { + return xerrors.Errorf("copyRec: %v", err) + } + + if len(batch) > 0 { + toFlush <- batch + } + close(toFlush) // close the toFlush triggering the loop to end + err := <-errFlushChan // get error out or get nil if it was closed + if err != nil { + return err + } + + span.AddAttributes( + trace.Int64Attribute("numBlocks", int64(numBlocks)), + trace.Int64Attribute("copySize", int64(totalCopySize)), + ) + return nil +} + +func copyRec(ctx context.Context, from, to Blockstore, root cid.Cid, cp func(blocks.Block) error) error { + if root.Prefix().MhType == 0 { + // identity cid, skip + return nil + } + + blk, err := from.Get(ctx, root) + if err != nil { + return xerrors.Errorf("get %s failed: %v", root, err) + } + + var lerr error + err = linksForObj(blk, func(link cid.Cid) { + if lerr != nil { + // Theres no erorr return on linksForObj callback :( + return + } + + prefix := link.Prefix() + if prefix.Codec == cid.FilCommitmentSealed || prefix.Codec == cid.FilCommitmentUnsealed { + return + } + + // We always have blocks inlined into CIDs, but we may not have their children. + if prefix.MhType == mh.IDENTITY { + // Unless the inlined block has no children. + if prefix.Codec == cid.Raw { + return + } + } else { + // If we have an object, we already have its children, skip the object. + has, err := to.Has(ctx, link) + if err != nil { + lerr = xerrors.Errorf("has: %v", err) + return + } + if has { + return + } + } + + if err := copyRec(ctx, from, to, link, cp); err != nil { + lerr = err + return + } + }) + if err != nil { + return xerrors.Errorf("linksForObj (%x): %v", blk.RawData(), err) + } + if lerr != nil { + return lerr + } + + if err := cp(blk); err != nil { + return xerrors.Errorf("copy: %v", err) + } + return nil +} diff --git a/pkg/util/blockstoreutil/memstore.go b/pkg/util/blockstoreutil/memstore.go new file mode 100644 index 0000000000..d53520e645 --- /dev/null +++ b/pkg/util/blockstoreutil/memstore.go @@ -0,0 +1,90 @@ +package blockstoreutil + +import ( + "context" + + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" +) + +// MemStore is a terminal blockstore that keeps blocks in memory. +type MemStore map[cid.Cid]blocks.Block + +func (m MemStore) DeleteBlock(ctx context.Context, k cid.Cid) error { + delete(m, k) + return nil +} + +func (m MemStore) Has(ctx context.Context, k cid.Cid) (bool, error) { + _, ok := m[k] + return ok, nil +} + +func (m MemStore) View(ctx context.Context, k cid.Cid, callback func([]byte) error) error { + b, ok := m[k] + if !ok { + return ErrNotFound + } + return callback(b.RawData()) +} + +func (m MemStore) Get(ctx context.Context, k cid.Cid) (blocks.Block, error) { + b, ok := m[k] + if !ok { + return nil, ErrNotFound + } + return b, nil +} + +// GetSize returns the CIDs mapped BlockSize +func (m MemStore) GetSize(ctx context.Context, k cid.Cid) (int, error) { + b, ok := m[k] + if !ok { + return 0, ErrNotFound + } + return len(b.RawData()), nil +} + +// Put puts a given block to the underlying datastore +func (m MemStore) Put(ctx context.Context, b blocks.Block) error { + // Convert to a basic block for safety, but try to reuse the existing + // block if it's already a basic block. + k := b.Cid() + if _, ok := b.(*blocks.BasicBlock); !ok { + // If we already have the block, abort. + if _, ok := m[k]; ok { + return nil + } + // the error is only for debugging. + b, _ = blocks.NewBlockWithCid(b.RawData(), b.Cid()) + } + m[b.Cid()] = b + return nil +} + +// PutMany puts a slice of blocks at the same time using batching +// capabilities of the underlying datastore whenever possible. +func (m MemStore) PutMany(ctx context.Context, bs []blocks.Block) error { + for _, b := range bs { + _ = m.Put(ctx, b) // can't fail + } + return nil +} + +// AllKeysChan returns a channel from which +// the CIDs in the Blockstore can be read. It should respect +// the given context, closing the channel if it becomes Done. +func (m MemStore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) { + ch := make(chan cid.Cid, len(m)) + for k := range m { + ch <- k + } + close(ch) + return ch, nil +} + +// HashOnRead specifies if every read block should be +// rehashed to make sure it matches its CID. +func (m MemStore) HashOnRead(enabled bool) { + // no-op +} diff --git a/pkg/util/blockstoreutil/safe_cid_set.go b/pkg/util/blockstoreutil/safe_cid_set.go new file mode 100644 index 0000000000..c9135d8cb7 --- /dev/null +++ b/pkg/util/blockstoreutil/safe_cid_set.go @@ -0,0 +1,96 @@ +package blockstoreutil + +import ( + "github.com/ipfs/go-cid" + "sync" +) + +// Set is a implementation of a set of Cids, that is, a structure +// to which holds a single copy of every Cids that is added to it. +type Set struct { + set map[cid.Cid]struct{} + lk sync.Mutex +} + +// NewSet initializes and returns a new Set. +func NewSet() *Set { + return &Set{set: make(map[cid.Cid]struct{}), lk: sync.Mutex{}} +} + +// Add puts a Cid in the Set. +func (s *Set) Add(c cid.Cid) { + s.lk.Lock() + defer s.lk.Unlock() + s.set[c] = struct{}{} +} + +// Add puts a Cid in the Set. +func (s *Set) add(c cid.Cid) { + s.set[c] = struct{}{} +} + +// Has returns if the Set contains a given Cid. +func (s *Set) Has(c cid.Cid) bool { + s.lk.Lock() + defer s.lk.Unlock() + _, ok := s.set[c] + return ok +} + +// Has returns if the Set contains a given Cid. +func (s *Set) has(c cid.Cid) bool { + _, ok := s.set[c] + return ok +} + +// Remove deletes a Cid from the Set. +func (s *Set) Remove(c cid.Cid) { + s.lk.Lock() + defer s.lk.Unlock() + delete(s.set, c) +} + +// Len returns how many elements the Set has. +func (s *Set) Len() int { + s.lk.Lock() + defer s.lk.Unlock() + return len(s.set) +} + +// Keys returns the Cids in the set. +func (s *Set) Keys() []cid.Cid { + s.lk.Lock() + defer s.lk.Unlock() + out := make([]cid.Cid, 0, len(s.set)) + for k := range s.set { + out = append(out, k) + } + return out +} + +// Visit adds a Cid to the set only if it is +// not in it already. +func (s *Set) Visit(c cid.Cid) bool { + s.lk.Lock() + defer s.lk.Unlock() + if !s.has(c) { + s.add(c) + return true + } + + return false +} + +// ForEach allows to run a custom function on each +// Cid in the set. +func (s *Set) ForEach(f func(c cid.Cid) error) error { + s.lk.Lock() + defer s.lk.Unlock() + for c := range s.set { + err := f(c) + if err != nil { + return err + } + } + return nil +} diff --git a/pkg/util/blockstoreutil/syncstore.go b/pkg/util/blockstoreutil/syncstore.go new file mode 100644 index 0000000000..bdfb216f0f --- /dev/null +++ b/pkg/util/blockstoreutil/syncstore.go @@ -0,0 +1,68 @@ +package blockstoreutil + +import ( + "context" + "sync" + + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" +) + +type SyncStore struct { + mu sync.RWMutex + bs MemStore // specifically use a memStore to save indirection overhead. +} + +func (m *SyncStore) DeleteBlock(ctx context.Context, k cid.Cid) error { + m.mu.Lock() + defer m.mu.Unlock() + return m.bs.DeleteBlock(ctx, k) +} +func (m *SyncStore) Has(ctx context.Context, k cid.Cid) (bool, error) { + m.mu.RLock() + defer m.mu.RUnlock() + return m.bs.Has(ctx, k) +} +func (m *SyncStore) Get(ctx context.Context, k cid.Cid) (blocks.Block, error) { + m.mu.RLock() + defer m.mu.RUnlock() + return m.bs.Get(ctx, k) +} + +// GetSize returns the CIDs mapped BlockSize +func (m *SyncStore) GetSize(ctx context.Context, k cid.Cid) (int, error) { + m.mu.RLock() + defer m.mu.RUnlock() + return m.bs.GetSize(ctx, k) +} + +// Put puts a given block to the underlying datastore +func (m *SyncStore) Put(ctx context.Context, b blocks.Block) error { + m.mu.Lock() + defer m.mu.Unlock() + return m.bs.Put(ctx, b) +} + +// PutMany puts a slice of blocks at the same time using batching +// capabilities of the underlying datastore whenever possible. +func (m *SyncStore) PutMany(ctx context.Context, bs []blocks.Block) error { + m.mu.Lock() + defer m.mu.Unlock() + return m.bs.PutMany(ctx, bs) +} + +// AllKeysChan returns a channel from which +// the CIDs in the blockstore can be read. It should respect +// the given context, closing the channel if it becomes Done. +func (m *SyncStore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) { + m.mu.RLock() + defer m.mu.RUnlock() + // this blockstore implementation doesn't do any async work. + return m.bs.AllKeysChan(ctx) +} + +// HashOnRead specifies if every read block should be +// rehashed to make sure it matches its CID. +func (m *SyncStore) HashOnRead(enabled bool) { + // noop +} diff --git a/pkg/util/blockstoreutil/view_blockstore.go b/pkg/util/blockstoreutil/view_blockstore.go new file mode 100644 index 0000000000..050f0e39f0 --- /dev/null +++ b/pkg/util/blockstoreutil/view_blockstore.go @@ -0,0 +1,156 @@ +package blockstoreutil + +import ( + "context" + "fmt" + + "github.com/dgraph-io/badger/v2" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + "github.com/ipfs/go-datastore/keytransform" + dshelp "github.com/ipfs/go-ipfs-ds-help" + xerrors "github.com/pkg/errors" +) + +var _ Blockstore = (*TxBlockstore)(nil) + +type TxBlockstore struct { + tx *badger.Txn + cache IBlockCache + keyTransform *keytransform.PrefixTransform +} + +func (txBlockstore *TxBlockstore) DeleteBlock(ctx context.Context, cid cid.Cid) error { + return xerrors.New("readonly blocksgtore") +} + +func (txBlockstore *TxBlockstore) Has(ctx context.Context, cid cid.Cid) (bool, error) { + key := txBlockstore.ConvertKey(cid) + if txBlockstore.cache != nil { + if _, has := txBlockstore.cache.Get(key.String()); has { + return true, nil + } + } + + _, err := txBlockstore.tx.Get(key.Bytes()) + switch err { + case badger.ErrKeyNotFound: + return false, nil + case nil: + return true, nil + default: + return false, fmt.Errorf("failed to check if block exists in badger blockstore: %w", err) + } +} + +func (txBlockstore *TxBlockstore) Get(ctx context.Context, cid cid.Cid) (blocks.Block, error) { + if !cid.Defined() { + return nil, ErrNotFound + } + + key := txBlockstore.ConvertKey(cid) + if txBlockstore.cache != nil { + if val, has := txBlockstore.cache.Get(key.String()); has { + return val.(blocks.Block), nil + } + } + + var val []byte + var err error + var item *badger.Item + switch item, err = txBlockstore.tx.Get(key.Bytes()); err { + case nil: + val, err = item.ValueCopy(nil) + case badger.ErrKeyNotFound: + return nil, ErrNotFound + default: + return nil, fmt.Errorf("failed to get block from badger blockstore: %w", err) + } + if err != nil { + return nil, err + } + + blk, err := blocks.NewBlockWithCid(val, cid) + if err != nil { + return nil, err + } + + txBlockstore.cache.Add(key.String(), blk) + return blk, nil +} + +func (txBlockstore *TxBlockstore) GetSize(ctx context.Context, cid cid.Cid) (int, error) { + key := txBlockstore.ConvertKey(cid) + if txBlockstore.cache != nil { + if val, has := txBlockstore.cache.Get(key.String()); has { + return len(val.(blocks.Block).RawData()), nil + } + } + + var size int + var err error + var item *badger.Item + switch item, err = txBlockstore.tx.Get(key.Bytes()); err { + case nil: + size = int(item.ValueSize()) + case badger.ErrKeyNotFound: + return -1, ErrNotFound + default: + return -1, fmt.Errorf("failed to get block size from badger blockstore: %w", err) + } + return size, err +} + +func (txBlockstore *TxBlockstore) Put(ctx context.Context, block blocks.Block) error { + return xerrors.New("readonly blocksgtore") +} + +func (txBlockstore *TxBlockstore) PutMany(ctx context.Context, blocks []blocks.Block) error { + return xerrors.New("readonly blocksgtore") +} + +func (txBlockstore *TxBlockstore) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) { + opts := badger.IteratorOptions{PrefetchSize: 100} + iter := txBlockstore.tx.NewIterator(opts) + + ch := make(chan cid.Cid) + go func() { + defer close(ch) + defer iter.Close() + + // NewCidV1 makes a copy of the multihash buffer, so we can reuse it to + // contain allocs. + for iter.Rewind(); iter.Valid(); iter.Next() { + if ctx.Err() != nil { + return // context has fired. + } + + k := iter.Item().Key() + // need to convert to key.Key using key.KeyFromDsKey. + + dsKey := txBlockstore.keyTransform.InvertKey(datastore.RawKey(string(k))) + bk, err := dshelp.BinaryFromDsKey(dsKey) + if err != nil { + log.Warnf("error parsing key from binary: %s", err) + continue + } + cidKey := cid.NewCidV1(cid.Raw, bk) + select { + case <-ctx.Done(): + return + case ch <- cidKey: + } + } + }() + return ch, nil +} + +func (txBlockstore *TxBlockstore) ConvertKey(cid cid.Cid) datastore.Key { + key := dshelp.MultihashToDsKey(cid.Hash()) + return txBlockstore.keyTransform.ConvertKey(key) +} + +func (txBlockstore *TxBlockstore) HashOnRead(enabled bool) { + log.Warnf("called HashOnRead on badger blockstore; function not supported; ignoring") +} diff --git a/internal/pkg/util/convert/convert.go b/pkg/util/convert/convert.go similarity index 90% rename from internal/pkg/util/convert/convert.go rename to pkg/util/convert/convert.go index fd60fc5e61..2b2db3a397 100644 --- a/internal/pkg/util/convert/convert.go +++ b/pkg/util/convert/convert.go @@ -5,7 +5,7 @@ import ( cbor "github.com/ipfs/go-ipld-cbor" "github.com/pkg/errors" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" + "github.com/filecoin-project/venus/pkg/constants" ) // ToCid gets the Cid for the argument passed in diff --git a/pkg/util/dag/dag.go b/pkg/util/dag/dag.go new file mode 100644 index 0000000000..a63c35ce67 --- /dev/null +++ b/pkg/util/dag/dag.go @@ -0,0 +1,154 @@ +package dag + +import ( + "context" + "fmt" + "io" + + "github.com/ipfs/go-cid" + chunk "github.com/ipfs/go-ipfs-chunker" + ipld "github.com/ipfs/go-ipld-format" + "github.com/ipfs/go-merkledag" + "github.com/ipfs/go-path" + "github.com/ipfs/go-path/resolver" + "github.com/ipfs/go-unixfs" + imp "github.com/ipfs/go-unixfs/importer" + uio "github.com/ipfs/go-unixfs/io" + "github.com/pkg/errors" +) + +// DAG is a service for accessing the merkledag +type DAG struct { + dserv ipld.DAGService // Provides access to state tree. +} + +// NewDAG creates a DAG with a given DAGService +func NewDAG(dserv ipld.DAGService) *DAG { + return &DAG{ + dserv: dserv, + } +} + +// GetNode returns the associated DAG node for the passed in CID. +func (dag *DAG) GetNode(ctx context.Context, ref string) (interface{}, error) { + parsedRef, err := path.ParsePath(ref) + if err != nil { + return nil, err + } + + resolver := resolver.NewBasicResolver(dag.dserv) + + objc, rem, err := resolver.ResolveToLastNode(ctx, parsedRef) + if err != nil { + return nil, err + } + + obj, err := dag.dserv.Get(ctx, objc) + if err != nil { + return nil, err + } + + var out interface{} = obj + if len(rem) > 0 { + final, _, err := obj.Resolve(rem) + if err != nil { + return nil, err + } + out = final + } + + return out, nil +} + +// GetFileSize returns the file size for a given Cid +func (dag *DAG) GetFileSize(ctx context.Context, c cid.Cid) (uint64, error) { + fnode, err := dag.dserv.Get(ctx, c) + if err != nil { + return 0, err + } + switch n := fnode.(type) { + case *merkledag.ProtoNode: + return unixfs.DataSize(n.Data()) + case *merkledag.RawNode: + return n.Size() + default: + return 0, fmt.Errorf("unrecognized node type: %T", fnode) + } +} + +// Cat returns an iostream with a piece of data stored on the merkeldag with +// the given cid. +// +// TODO: this goes back to 'how is data stored and referenced' +// For now, lets just do things the ipfs way. +// https://github.com/filecoin-project/specs/issues/136 +func (dag *DAG) Cat(ctx context.Context, c cid.Cid) (uio.DagReader, error) { + data, err := dag.dserv.Get(ctx, c) + if err != nil { + return nil, err + } + return uio.NewDagReader(ctx, data, dag.dserv) +} + +// ImportData adds data from an io stream to the merkledag and returns the Cid +// of the given data +func (dag *DAG) ImportData(ctx context.Context, data io.Reader) (ipld.Node, error) { + bufds := ipld.NewBufferedDAG(ctx, dag.dserv) + + spl := chunk.DefaultSplitter(data) + + nd, err := imp.BuildDagFromReader(bufds, spl) + if err != nil { + return nil, err + } + return nd, bufds.Commit() +} + +// RecursiveGet will walk the dag in order (depth first) starting at the given root `c`. +func (dag *DAG) RecursiveGet(ctx context.Context, c cid.Cid) ([]ipld.Node, error) { + collector := dagCollector{ + dagserv: dag.dserv, + } + return collector.collectState(ctx, c) +} + +// +// Helpers for recursive dag get. +// + +type dagCollector struct { + dagserv ipld.DAGService + state []ipld.Node +} + +// collectState recursively walks the state tree starting with `stateRoot` and returns it as a slice of IPLD nodes. +// Calling this method does not have any side effects. +func (dc *dagCollector) collectState(ctx context.Context, stateRoot cid.Cid) ([]ipld.Node, error) { + dagNd, err := dc.dagserv.Get(ctx, stateRoot) + if err != nil { + return nil, errors.Wrapf(err, "failed to load stateroot from dagservice %s", stateRoot) + } + dc.addState(dagNd) + seen := cid.NewSet() + for _, l := range dagNd.Links() { + if err := merkledag.Walk(ctx, dc.getLinks, l.Cid, seen.Visit); err != nil { + return nil, errors.Wrapf(err, "dag service failed walking stateroot %s", stateRoot) + } + } + return dc.state, nil + +} + +func (dc *dagCollector) getLinks(ctx context.Context, c cid.Cid) ([]*ipld.Link, error) { + nd, err := dc.dagserv.Get(ctx, c) + if err != nil { + return nil, errors.Wrapf(err, "failed to load link from dagservice %s", c) + } + dc.addState(nd) + return nd.Links(), nil + +} + +func (dc *dagCollector) addState(nd ipld.Node) { + dc.state = append(dc.state, nd) +} diff --git a/internal/app/go-filecoin/plumbing/dag/dag_test.go b/pkg/util/dag/dag_test.go similarity index 81% rename from internal/app/go-filecoin/plumbing/dag/dag_test.go rename to pkg/util/dag/dag_test.go index af13bbd6ee..e013a0bcc7 100644 --- a/internal/app/go-filecoin/plumbing/dag/dag_test.go +++ b/pkg/util/dag/dag_test.go @@ -5,6 +5,8 @@ import ( "testing" "time" + "github.com/filecoin-project/venus/pkg/testhelpers" + "github.com/filecoin-project/go-address" "github.com/ipfs/go-blockservice" "github.com/ipfs/go-datastore" @@ -14,9 +16,8 @@ import ( "github.com/ipfs/go-merkledag" "github.com/stretchr/testify/assert" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" + "github.com/filecoin-project/venus/pkg/chain" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" ) func TestDAGGet(t *testing.T) { @@ -47,7 +48,7 @@ func TestDAGGet(t *testing.T) { dserv := merkledag.NewDAGService(blkserv) dag := NewDAG(dserv) - someCid := types.CidFromString(t, "somecid") + someCid := testhelpers.CidFromString(t, "somecid") _, err := dag.GetNode(ctx, someCid.String()) assert.EqualError(t, err, "merkledag: not found") @@ -63,10 +64,10 @@ func TestDAGGet(t *testing.T) { dserv := merkledag.NewDAGService(blkserv) dag := NewDAG(dserv) - ipldnode := chain.NewBuilder(t, address.Undef).NewGenesis().At(0).ToNode() + ipldnode := chain.NewBuilder(t, address.Undef).Genesis().At(0).ToNode() - // put into out blockservice - assert.NoError(t, blkserv.AddBlock(ipldnode)) + // put into out dagservice + assert.NoError(t, blkserv.AddBlock(ctx, ipldnode)) res, err := dag.GetNode(ctx, ipldnode.Cid().String()) assert.NoError(t, err) diff --git a/pkg/util/ffiwrapper/basicfs/fs.go b/pkg/util/ffiwrapper/basicfs/fs.go new file mode 100644 index 0000000000..3ce5e529cb --- /dev/null +++ b/pkg/util/ffiwrapper/basicfs/fs.go @@ -0,0 +1,86 @@ +package basicfs + +import ( + "context" + "os" + "path/filepath" + "sync" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/specs-storage/storage" + + "github.com/filecoin-project/venus/pkg/util/storiface" +) + +type sectorFile struct { + abi.SectorID + storiface.SectorFileType +} + +type Provider struct { + Root string + + lk sync.Mutex + waitSector map[sectorFile]chan struct{} +} + +func (b *Provider) AcquireSector(ctx context.Context, id storage.SectorRef, existing storiface.SectorFileType, allocate storiface.SectorFileType, ptype storiface.PathType) (storiface.SectorPaths, func(), error) { + if err := os.Mkdir(filepath.Join(b.Root, storiface.FTUnsealed.String()), 0755); err != nil && !os.IsExist(err) { // nolint + return storiface.SectorPaths{}, nil, err + } + if err := os.Mkdir(filepath.Join(b.Root, storiface.FTSealed.String()), 0755); err != nil && !os.IsExist(err) { // nolint + return storiface.SectorPaths{}, nil, err + } + if err := os.Mkdir(filepath.Join(b.Root, storiface.FTCache.String()), 0755); err != nil && !os.IsExist(err) { // nolint + return storiface.SectorPaths{}, nil, err + } + + done := func() {} + + out := storiface.SectorPaths{ + ID: id.ID, + } + + for _, fileType := range storiface.PathTypes { + if !existing.Has(fileType) && !allocate.Has(fileType) { + continue + } + + b.lk.Lock() + if b.waitSector == nil { + b.waitSector = map[sectorFile]chan struct{}{} + } + ch, found := b.waitSector[sectorFile{id.ID, fileType}] + if !found { + ch = make(chan struct{}, 1) + b.waitSector[sectorFile{id.ID, fileType}] = ch + } + b.lk.Unlock() + + select { + case ch <- struct{}{}: + case <-ctx.Done(): + done() + return storiface.SectorPaths{}, nil, ctx.Err() + } + + path := filepath.Join(b.Root, fileType.String(), storiface.SectorName(id.ID)) + + prevDone := done + done = func() { + prevDone() + <-ch + } + + if !allocate.Has(fileType) { + if _, err := os.Stat(path); os.IsNotExist(err) { + done() + return storiface.SectorPaths{}, nil, storiface.ErrSectorNotFound + } + } + + storiface.SetPathByType(&out, fileType, path) + } + + return out, done, nil +} diff --git a/pkg/util/ffiwrapper/impl/config.go b/pkg/util/ffiwrapper/impl/config.go new file mode 100644 index 0000000000..a31bb40f5a --- /dev/null +++ b/pkg/util/ffiwrapper/impl/config.go @@ -0,0 +1,58 @@ +package impl + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + logging "github.com/ipfs/go-log/v2" + "golang.org/x/xerrors" +) + +var log = logging.Logger("ffiwrapper") + +type Config struct { + SealProofType abi.RegisteredSealProof + + _ struct{} // guard against nameless init +} + +//nolint +func sizeFromConfig(cfg Config) (abi.SectorSize, error) { + return cfg.SealProofType.SectorSize() +} + +func SealProofTypeFromSectorSize(ssize abi.SectorSize, nv network.Version) (abi.RegisteredSealProof, error) { + switch { + case nv < network.Version7: + switch ssize { + case 2 << 10: + return abi.RegisteredSealProof_StackedDrg2KiBV1, nil + case 8 << 20: + return abi.RegisteredSealProof_StackedDrg8MiBV1, nil + case 512 << 20: + return abi.RegisteredSealProof_StackedDrg512MiBV1, nil + case 32 << 30: + return abi.RegisteredSealProof_StackedDrg32GiBV1, nil + case 64 << 30: + return abi.RegisteredSealProof_StackedDrg64GiBV1, nil + default: + return 0, xerrors.Errorf("unsupported sector size for miner: %v", ssize) + } + case nv >= network.Version7: + switch ssize { + case 2 << 10: + return abi.RegisteredSealProof_StackedDrg2KiBV1_1, nil + case 8 << 20: + return abi.RegisteredSealProof_StackedDrg8MiBV1_1, nil + case 512 << 20: + return abi.RegisteredSealProof_StackedDrg512MiBV1_1, nil + case 32 << 30: + return abi.RegisteredSealProof_StackedDrg32GiBV1_1, nil + case 64 << 30: + return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil + default: + return 0, xerrors.Errorf("unsupported sector size for miner: %v", ssize) + } + } + + return 0, xerrors.Errorf("unsupported network version") +} diff --git a/pkg/util/ffiwrapper/impl/partialfile.go b/pkg/util/ffiwrapper/impl/partialfile.go new file mode 100644 index 0000000000..6b89817802 --- /dev/null +++ b/pkg/util/ffiwrapper/impl/partialfile.go @@ -0,0 +1,316 @@ +package impl + +import ( + "encoding/binary" + "io" + "os" + "syscall" + + "github.com/detailyang/go-fallocate" + "golang.org/x/xerrors" + + rlepluslazy "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/venus/pkg/util/fsutil" + "github.com/filecoin-project/venus/pkg/util/storiface" +) + +const veryLargeRle = 1 << 20 + +// Sectors can be partially unsealed. We support this by appending a small +// trailer to each unsealed sector file containing an RLE+ marking which bytes +// in a sector are unsealed, and which are not (holes) + +// unsealed sector files internally have this structure +// [unpadded (raw) data][rle+][4B LE length fo the rle+ field] + +type partialFile struct { + maxPiece abi.PaddedPieceSize + + path string + allocated rlepluslazy.RLE + + file *os.File +} + +func writeTrailer(maxPieceSize int64, w *os.File, r rlepluslazy.RunIterator) error { + trailer, err := rlepluslazy.EncodeRuns(r, nil) + if err != nil { + return xerrors.Errorf("encoding trailer: %w", err) + } + + // maxPieceSize == unpadded(sectorSize) == trailer start + if _, err := w.Seek(maxPieceSize, io.SeekStart); err != nil { + return xerrors.Errorf("seek to trailer start: %w", err) + } + + rb, err := w.Write(trailer) + if err != nil { + return xerrors.Errorf("writing trailer data: %w", err) + } + + if err := binary.Write(w, binary.LittleEndian, uint32(len(trailer))); err != nil { + return xerrors.Errorf("writing trailer length: %w", err) + } + + return w.Truncate(maxPieceSize + int64(rb) + 4) +} + +func createPartialFile(maxPieceSize abi.PaddedPieceSize, path string) (*partialFile, error) { + f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0644) // nolint + if err != nil { + return nil, xerrors.Errorf("openning partial file '%s': %w", path, err) + } + + err = func() error { + err := fallocate.Fallocate(f, 0, int64(maxPieceSize)) + if errno, ok := err.(syscall.Errno); ok { + if errno == syscall.EOPNOTSUPP || errno == syscall.ENOSYS { + log.Warnf("could not allocated space, ignoring: %v", errno) + err = nil // log and ignore + } + } + if err != nil { + return xerrors.Errorf("fallocate '%s': %w", path, err) + } + + if err := writeTrailer(int64(maxPieceSize), f, &rlepluslazy.RunSliceIterator{}); err != nil { + return xerrors.Errorf("writing trailer: %w", err) + } + + return nil + }() + if err != nil { + _ = f.Close() + return nil, err + } + if err := f.Close(); err != nil { + return nil, xerrors.Errorf("close empty partial file: %w", err) + } + + return openPartialFile(maxPieceSize, path) +} + +func openPartialFile(maxPieceSize abi.PaddedPieceSize, path string) (*partialFile, error) { + f, err := os.OpenFile(path, os.O_RDWR, 0644) // nolint + if err != nil { + return nil, xerrors.Errorf("openning partial file '%s': %w", path, err) + } + + var rle rlepluslazy.RLE + err = func() error { + st, err := f.Stat() + if err != nil { + return xerrors.Errorf("stat '%s': %w", path, err) + } + if st.Size() < int64(maxPieceSize) { + return xerrors.Errorf("sector file '%s' was smaller than the sector size %d < %d", path, st.Size(), maxPieceSize) + } + // read trailer + var tlen [4]byte + _, err = f.ReadAt(tlen[:], st.Size()-int64(len(tlen))) + if err != nil { + return xerrors.Errorf("reading trailer length: %w", err) + } + + // sanity-check the length + trailerLen := binary.LittleEndian.Uint32(tlen[:]) + expectLen := int64(trailerLen) + int64(len(tlen)) + int64(maxPieceSize) + if expectLen != st.Size() { + return xerrors.Errorf("file '%s' has inconsistent length; has %d bytes; expected %d (%d trailer, %d sector data)", path, st.Size(), expectLen, int64(trailerLen)+int64(len(tlen)), maxPieceSize) + } + if trailerLen > veryLargeRle { + log.Warnf("Partial file '%s' has a VERY large trailer with %d bytes", path, trailerLen) + } + + trailerStart := st.Size() - int64(len(tlen)) - int64(trailerLen) + if trailerStart != int64(maxPieceSize) { + return xerrors.Errorf("expected sector size to equal trailer start index") + } + + trailerBytes := make([]byte, trailerLen) + _, err = f.ReadAt(trailerBytes, trailerStart) + if err != nil { + return xerrors.Errorf("reading trailer: %w", err) + } + + rle, err = rlepluslazy.FromBuf(trailerBytes) + if err != nil { + return xerrors.Errorf("decoding trailer: %w", err) + } + + it, err := rle.RunIterator() + if err != nil { + return xerrors.Errorf("getting trailer run iterator: %w", err) + } + + f, err := rlepluslazy.Fill(it) + if err != nil { + return xerrors.Errorf("filling bitfield: %w", err) + } + lastSet, err := rlepluslazy.Count(f) + if err != nil { + return xerrors.Errorf("finding last set byte index: %w", err) + } + + if lastSet > uint64(maxPieceSize) { + return xerrors.Errorf("last set byte at index higher than sector size: %d > %d", lastSet, maxPieceSize) + } + + return nil + }() + if err != nil { + _ = f.Close() + return nil, err + } + + return &partialFile{ + maxPiece: maxPieceSize, + path: path, + allocated: rle, + file: f, + }, nil +} + +func (pf *partialFile) Close() error { + return pf.file.Close() +} + +func (pf *partialFile) Writer(offset storiface.PaddedByteIndex, size abi.PaddedPieceSize) (io.Writer, error) { + if _, err := pf.file.Seek(int64(offset), io.SeekStart); err != nil { + return nil, xerrors.Errorf("seek piece start: %w", err) + } + + { + have, err := pf.allocated.RunIterator() + if err != nil { + return nil, err + } + + and, err := rlepluslazy.And(have, pieceRun(offset, size)) + if err != nil { + return nil, err + } + + c, err := rlepluslazy.Count(and) + if err != nil { + return nil, err + } + + if c > 0 { + log.Warnf("getting partial file writer overwriting %d allocated bytes", c) + } + } + + return pf.file, nil +} + +func (pf *partialFile) MarkAllocated(offset storiface.PaddedByteIndex, size abi.PaddedPieceSize) error { + have, err := pf.allocated.RunIterator() + if err != nil { + return err + } + + ored, err := rlepluslazy.Or(have, pieceRun(offset, size)) + if err != nil { + return err + } + + if err := writeTrailer(int64(pf.maxPiece), pf.file, ored); err != nil { + return xerrors.Errorf("writing trailer: %w", err) + } + + return nil +} + +func (pf *partialFile) Free(offset storiface.PaddedByteIndex, size abi.PaddedPieceSize) error { + have, err := pf.allocated.RunIterator() + if err != nil { + return err + } + + if err := fsutil.Deallocate(pf.file, int64(offset), int64(size)); err != nil { + return xerrors.Errorf("deallocating: %w", err) + } + + s, err := rlepluslazy.Subtract(have, pieceRun(offset, size)) + if err != nil { + return err + } + + if err := writeTrailer(int64(pf.maxPiece), pf.file, s); err != nil { + return xerrors.Errorf("writing trailer: %w", err) + } + + return nil +} + +func (pf *partialFile) Reader(offset storiface.PaddedByteIndex, size abi.PaddedPieceSize) (*os.File, error) { + if _, err := pf.file.Seek(int64(offset), io.SeekStart); err != nil { + return nil, xerrors.Errorf("seek piece start: %w", err) + } + + { + have, err := pf.allocated.RunIterator() + if err != nil { + return nil, err + } + + and, err := rlepluslazy.And(have, pieceRun(offset, size)) + if err != nil { + return nil, err + } + + c, err := rlepluslazy.Count(and) + if err != nil { + return nil, err + } + + if c != uint64(size) { + log.Warnf("getting partial file reader reading %d unallocated bytes", uint64(size)-c) + } + } + + return pf.file, nil +} + +func (pf *partialFile) Allocated() (rlepluslazy.RunIterator, error) { + return pf.allocated.RunIterator() +} + +func (pf *partialFile) HasAllocated(offset storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize) (bool, error) { + have, err := pf.Allocated() + if err != nil { + return false, err + } + + u, err := rlepluslazy.And(have, pieceRun(offset.Padded(), size.Padded())) + if err != nil { + return false, err + } + + uc, err := rlepluslazy.Count(u) + if err != nil { + return false, err + } + + return abi.PaddedPieceSize(uc) == size.Padded(), nil +} + +func pieceRun(offset storiface.PaddedByteIndex, size abi.PaddedPieceSize) rlepluslazy.RunIterator { + var runs []rlepluslazy.Run + if offset > 0 { + runs = append(runs, rlepluslazy.Run{ + Val: false, + Len: uint64(offset), + }) + } + + runs = append(runs, rlepluslazy.Run{ + Val: true, + Len: uint64(size), + }) + + return &rlepluslazy.RunSliceIterator{Runs: runs} +} diff --git a/pkg/util/ffiwrapper/impl/sealer.go b/pkg/util/ffiwrapper/impl/sealer.go new file mode 100644 index 0000000000..83309d8de0 --- /dev/null +++ b/pkg/util/ffiwrapper/impl/sealer.go @@ -0,0 +1,10 @@ +package impl + +type Sealer struct { + sectors SectorProvider + stopping chan struct{} +} + +func (sb *Sealer) Stop() { + close(sb.stopping) +} diff --git a/pkg/util/ffiwrapper/impl/sealer_cgo.go b/pkg/util/ffiwrapper/impl/sealer_cgo.go new file mode 100644 index 0000000000..beb572a7ac --- /dev/null +++ b/pkg/util/ffiwrapper/impl/sealer_cgo.go @@ -0,0 +1,719 @@ +//+build cgo + +package impl + +import ( + "bufio" + "bytes" + "context" + "io" + "math/bits" + "os" + "runtime" + + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + ffi "github.com/filecoin-project/filecoin-ffi" + rlepluslazy "github.com/filecoin-project/go-bitfield/rle" + commpffi "github.com/filecoin-project/go-commp-utils/ffiwrapper" + "github.com/filecoin-project/go-commp-utils/zerocomm" + commcid "github.com/filecoin-project/go-fil-commcid" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/specs-storage/storage" + + "github.com/filecoin-project/venus/pkg/util/fr32" + "github.com/filecoin-project/venus/pkg/util/storiface" +) + +var _ Storage = &Sealer{} + +func New(sectors SectorProvider) (*Sealer, error) { + sb := &Sealer{ + sectors: sectors, + + stopping: make(chan struct{}), + } + + return sb, nil +} + +func (sb *Sealer) NewSector(ctx context.Context, sector storage.SectorRef) error { + // TODO: Allocate the sector here instead of in addpiece + + return nil +} + +func (sb *Sealer) AddPiece(ctx context.Context, sector storage.SectorRef, existingPieceSizes []abi.UnpaddedPieceSize, pieceSize abi.UnpaddedPieceSize, file storage.Data) (abi.PieceInfo, error) { + // TODO: allow tuning those: + chunk := abi.PaddedPieceSize(4 << 20) + parallel := runtime.NumCPU() + + var offset abi.UnpaddedPieceSize + for _, size := range existingPieceSizes { + offset += size + } + + ssize, err := sector.ProofType.SectorSize() + if err != nil { + return abi.PieceInfo{}, err + } + + maxPieceSize := abi.PaddedPieceSize(ssize) + + if offset.Padded()+pieceSize.Padded() > maxPieceSize { + return abi.PieceInfo{}, xerrors.Errorf("can't add %d byte piece to sector %v with %d bytes of existing pieces", pieceSize, sector, offset) + } + + var done func() + var stagedFile *partialFile + + defer func() { + if done != nil { + done() + } + + if stagedFile != nil { + if err := stagedFile.Close(); err != nil { + log.Errorf("closing staged file: %+v", err) + } + } + }() + + var stagedPath storiface.SectorPaths + if len(existingPieceSizes) == 0 { + stagedPath, done, err = sb.sectors.AcquireSector(ctx, sector, 0, storiface.FTUnsealed, storiface.PathSealing) + if err != nil { + return abi.PieceInfo{}, xerrors.Errorf("acquire unsealed sector: %w", err) + } + + stagedFile, err = createPartialFile(maxPieceSize, stagedPath.Unsealed) + if err != nil { + return abi.PieceInfo{}, xerrors.Errorf("creating unsealed sector file: %w", err) + } + } else { + stagedPath, done, err = sb.sectors.AcquireSector(ctx, sector, storiface.FTUnsealed, 0, storiface.PathSealing) + if err != nil { + return abi.PieceInfo{}, xerrors.Errorf("acquire unsealed sector: %w", err) + } + + stagedFile, err = openPartialFile(maxPieceSize, stagedPath.Unsealed) + if err != nil { + return abi.PieceInfo{}, xerrors.Errorf("opening unsealed sector file: %w", err) + } + } + + w, err := stagedFile.Writer(storiface.UnpaddedByteIndex(offset).Padded(), pieceSize.Padded()) + if err != nil { + return abi.PieceInfo{}, xerrors.Errorf("getting partial file writer: %w", err) + } + + pw := fr32.NewPadWriter(w) + + pr := io.TeeReader(io.LimitReader(file, int64(pieceSize)), pw) + + throttle := make(chan []byte, parallel) + piecePromises := make([]func() (abi.PieceInfo, error), 0) + + buf := make([]byte, chunk.Unpadded()) + for i := 0; i < parallel; i++ { + if abi.UnpaddedPieceSize(i)*chunk.Unpadded() >= pieceSize { + break // won't use this many buffers + } + throttle <- make([]byte, chunk.Unpadded()) + } + + for { + var read int + for rbuf := buf; len(rbuf) > 0; { + n, err := pr.Read(rbuf) + if err != nil && err != io.EOF { + return abi.PieceInfo{}, xerrors.Errorf("pr read error: %w", err) + } + + rbuf = rbuf[n:] + read += n + + if err == io.EOF { + break + } + } + if read == 0 { + break + } + + done := make(chan struct { + cid.Cid + error + }, 1) + pbuf := <-throttle + copy(pbuf, buf[:read]) + + go func(read int) { + defer func() { + throttle <- pbuf + }() + + c, err := sb.pieceCid(sector.ProofType, pbuf[:read]) + done <- struct { + cid.Cid + error + }{c, err} + }(read) + + piecePromises = append(piecePromises, func() (abi.PieceInfo, error) { + select { + case e := <-done: + if e.error != nil { + return abi.PieceInfo{}, e.error + } + + return abi.PieceInfo{ + Size: abi.UnpaddedPieceSize(len(buf[:read])).Padded(), + PieceCID: e.Cid, + }, nil + case <-ctx.Done(): + return abi.PieceInfo{}, ctx.Err() + } + }) + } + + if err := pw.Close(); err != nil { + return abi.PieceInfo{}, xerrors.Errorf("closing padded writer: %w", err) + } + + if err := stagedFile.MarkAllocated(storiface.UnpaddedByteIndex(offset).Padded(), pieceSize.Padded()); err != nil { + return abi.PieceInfo{}, xerrors.Errorf("marking data range as allocated: %w", err) + } + + if err := stagedFile.Close(); err != nil { + return abi.PieceInfo{}, err + } + stagedFile = nil + + if len(piecePromises) == 1 { + return piecePromises[0]() + } + + pieceCids := make([]abi.PieceInfo, len(piecePromises)) + for i, promise := range piecePromises { + pieceCids[i], err = promise() + if err != nil { + return abi.PieceInfo{}, err + } + } + + pieceCID, err := ffi.GenerateUnsealedCID(sector.ProofType, pieceCids) + if err != nil { + return abi.PieceInfo{}, xerrors.Errorf("generate unsealed CID: %w", err) + } + + // validate that the pieceCID was properly formed + if _, err := commcid.CIDToPieceCommitmentV1(pieceCID); err != nil { + return abi.PieceInfo{}, err + } + + return abi.PieceInfo{ + Size: pieceSize.Padded(), + PieceCID: pieceCID, + }, nil +} + +func (sb *Sealer) pieceCid(spt abi.RegisteredSealProof, in []byte) (cid.Cid, error) { + prf, werr, err := commpffi.ToReadableFile(bytes.NewReader(in), int64(len(in))) + if err != nil { + return cid.Undef, xerrors.Errorf("getting tee reader pipe: %w", err) + } + + pieceCID, err := ffi.GeneratePieceCIDFromFile(spt, prf, abi.UnpaddedPieceSize(len(in))) + if err != nil { + return cid.Undef, xerrors.Errorf("generating piece commitment: %w", err) + } + + _ = prf.Close() + + return pieceCID, werr() +} + +func (sb *Sealer) UnsealPiece(ctx context.Context, sector storage.SectorRef, offset storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize, randomness abi.SealRandomness, commd cid.Cid) error { + ssize, err := sector.ProofType.SectorSize() + if err != nil { + return err + } + maxPieceSize := abi.PaddedPieceSize(ssize) + + // try finding existing + unsealedPath, done, err := sb.sectors.AcquireSector(ctx, sector, storiface.FTUnsealed, storiface.FTNone, storiface.PathStorage) + var pf *partialFile + + switch { + case xerrors.Is(err, storiface.ErrSectorNotFound): + unsealedPath, done, err = sb.sectors.AcquireSector(ctx, sector, storiface.FTNone, storiface.FTUnsealed, storiface.PathStorage) + if err != nil { + return xerrors.Errorf("acquire unsealed sector path (allocate): %w", err) + } + defer done() + + pf, err = createPartialFile(maxPieceSize, unsealedPath.Unsealed) + if err != nil { + return xerrors.Errorf("create unsealed file: %w", err) + } + + case err == nil: + defer done() + + pf, err = openPartialFile(maxPieceSize, unsealedPath.Unsealed) + if err != nil { + return xerrors.Errorf("opening partial file: %w", err) + } + default: + return xerrors.Errorf("acquire unsealed sector path (existing): %w", err) + } + defer pf.Close() // nolint + + allocated, err := pf.Allocated() + if err != nil { + return xerrors.Errorf("getting bitruns of allocated data: %w", err) + } + + toUnseal, err := computeUnsealRanges(allocated, offset, size) + if err != nil { + return xerrors.Errorf("computing unseal ranges: %w", err) + } + + if !toUnseal.HasNext() { + return nil + } + + srcPaths, srcDone, err := sb.sectors.AcquireSector(ctx, sector, storiface.FTCache|storiface.FTSealed, storiface.FTNone, storiface.PathStorage) + if err != nil { + return xerrors.Errorf("acquire sealed sector paths: %w", err) + } + defer srcDone() + + sealed, err := os.OpenFile(srcPaths.Sealed, os.O_RDONLY, 0644) // nolint:gosec + if err != nil { + return xerrors.Errorf("opening sealed file: %w", err) + } + defer sealed.Close() // nolint + + var at, nextat abi.PaddedPieceSize + first := true + for first || toUnseal.HasNext() { + first = false + + piece, err := toUnseal.NextRun() + if err != nil { + return xerrors.Errorf("getting next range to unseal: %w", err) + } + + at = nextat + nextat += abi.PaddedPieceSize(piece.Len) + + if !piece.Val { + continue + } + + out, err := pf.Writer(offset.Padded(), size.Padded()) + if err != nil { + return xerrors.Errorf("getting partial file writer: %w", err) + } + + // + opr, opw, err := os.Pipe() + if err != nil { + return xerrors.Errorf("creating out pipe: %w", err) + } + + var perr error + outWait := make(chan struct{}) + + { + go func() { + defer close(outWait) + defer opr.Close() // nolint + + padwriter := fr32.NewPadWriter(out) + + bsize := uint64(size.Padded()) + if bsize > uint64(runtime.NumCPU())*fr32.MTTresh { + bsize = uint64(runtime.NumCPU()) * fr32.MTTresh + } + + bw := bufio.NewWriterSize(padwriter, int(abi.PaddedPieceSize(bsize).Unpadded())) + + _, err := io.CopyN(bw, opr, int64(size)) + if err != nil { + perr = xerrors.Errorf("copying data: %w", err) + return + } + + if err := bw.Flush(); err != nil { + perr = xerrors.Errorf("flushing unpadded data: %w", err) + return + } + + if err := padwriter.Close(); err != nil { + perr = xerrors.Errorf("closing padwriter: %w", err) + return + } + }() + } + // + + // TODO: This may be possible to do in parallel + err = ffi.UnsealRange(sector.ProofType, + srcPaths.Cache, + sealed, + opw, + sector.ID.Number, + sector.ID.Miner, + randomness, + commd, + uint64(at.Unpadded()), + uint64(abi.PaddedPieceSize(piece.Len).Unpadded())) + + _ = opw.Close() + + if err != nil { + return xerrors.Errorf("unseal range: %w", err) + } + + select { + case <-outWait: + case <-ctx.Done(): + return ctx.Err() + } + + if perr != nil { + return xerrors.Errorf("piping output to unsealed file: %w", perr) + } + + if err := pf.MarkAllocated(storiface.PaddedByteIndex(at), abi.PaddedPieceSize(piece.Len)); err != nil { + return xerrors.Errorf("marking unsealed range as allocated: %w", err) + } + + if !toUnseal.HasNext() { + break + } + } + + return nil +} + +func (sb *Sealer) ReadPiece(ctx context.Context, writer io.Writer, sector storage.SectorRef, offset storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize) (bool, error) { + path, done, err := sb.sectors.AcquireSector(ctx, sector, storiface.FTUnsealed, storiface.FTNone, storiface.PathStorage) + if err != nil { + return false, xerrors.Errorf("acquire unsealed sector path: %w", err) + } + defer done() + + ssize, err := sector.ProofType.SectorSize() + if err != nil { + return false, err + } + maxPieceSize := abi.PaddedPieceSize(ssize) + + pf, err := openPartialFile(maxPieceSize, path.Unsealed) + if err != nil { + if xerrors.Is(err, os.ErrNotExist) { + return false, nil + } + + return false, xerrors.Errorf("opening partial file: %w", err) + } + + ok, err := pf.HasAllocated(offset, size) + if err != nil { + _ = pf.Close() + return false, err + } + + if !ok { + _ = pf.Close() + return false, nil + } + + f, err := pf.Reader(offset.Padded(), size.Padded()) + if err != nil { + _ = pf.Close() + return false, xerrors.Errorf("getting partial file reader: %w", err) + } + + upr, err := fr32.NewUnpadReader(f, size.Padded()) + if err != nil { + return false, xerrors.Errorf("creating unpadded reader: %w", err) + } + + if _, err := io.CopyN(writer, upr, int64(size)); err != nil { + _ = pf.Close() + return false, xerrors.Errorf("reading unsealed file: %w", err) + } + + if err := pf.Close(); err != nil { + return false, xerrors.Errorf("closing partial file: %w", err) + } + + return true, nil +} + +func (sb *Sealer) SealPreCommit1(ctx context.Context, sector storage.SectorRef, ticket abi.SealRandomness, pieces []abi.PieceInfo) (out storage.PreCommit1Out, err error) { + paths, done, err := sb.sectors.AcquireSector(ctx, sector, storiface.FTUnsealed, storiface.FTSealed|storiface.FTCache, storiface.PathSealing) + if err != nil { + return nil, xerrors.Errorf("acquiring sector paths: %w", err) + } + defer done() + + e, err := os.OpenFile(paths.Sealed, os.O_RDWR|os.O_CREATE, 0644) // nolint:gosec + if err != nil { + return nil, xerrors.Errorf("ensuring sealed file exists: %w", err) + } + if err := e.Close(); err != nil { + return nil, err + } + + if err := os.Mkdir(paths.Cache, 0755); err != nil { // nolint + if os.IsExist(err) { + log.Warnf("existing cache in %s; removing", paths.Cache) + + if err := os.RemoveAll(paths.Cache); err != nil { + return nil, xerrors.Errorf("remove existing sector cache from %s (sector %d): %w", paths.Cache, sector, err) + } + + if err := os.Mkdir(paths.Cache, 0755); err != nil { // nolint:gosec + return nil, xerrors.Errorf("mkdir cache path after cleanup: %w", err) + } + } else { + return nil, err + } + } + + var sum abi.UnpaddedPieceSize + for _, piece := range pieces { + sum += piece.Size.Unpadded() + } + ssize, err := sector.ProofType.SectorSize() + if err != nil { + return nil, err + } + ussize := abi.PaddedPieceSize(ssize).Unpadded() + if sum != ussize { + return nil, xerrors.Errorf("aggregated piece sizes don't match sector size: %d != %d (%d)", sum, ussize, int64(ussize-sum)) + } + + // TODO: context cancellation respect + p1o, err := ffi.SealPreCommitPhase1( + sector.ProofType, + paths.Cache, + paths.Unsealed, + paths.Sealed, + sector.ID.Number, + sector.ID.Miner, + ticket, + pieces, + ) + if err != nil { + return nil, xerrors.Errorf("presealing sector %d (%s): %w", sector.ID.Number, paths.Unsealed, err) + } + return p1o, nil +} + +func (sb *Sealer) SealPreCommit2(ctx context.Context, sector storage.SectorRef, phase1Out storage.PreCommit1Out) (storage.SectorCids, error) { + paths, done, err := sb.sectors.AcquireSector(ctx, sector, storiface.FTSealed|storiface.FTCache, 0, storiface.PathSealing) + if err != nil { + return storage.SectorCids{}, xerrors.Errorf("acquiring sector paths: %w", err) + } + defer done() + + sealedCID, unsealedCID, err := ffi.SealPreCommitPhase2(phase1Out, paths.Cache, paths.Sealed) + if err != nil { + return storage.SectorCids{}, xerrors.Errorf("presealing sector %d (%s): %w", sector.ID.Number, paths.Unsealed, err) + } + + return storage.SectorCids{ + Unsealed: unsealedCID, + Sealed: sealedCID, + }, nil +} + +func (sb *Sealer) SealCommit1(ctx context.Context, sector storage.SectorRef, ticket abi.SealRandomness, seed abi.InteractiveSealRandomness, pieces []abi.PieceInfo, cids storage.SectorCids) (storage.Commit1Out, error) { + paths, done, err := sb.sectors.AcquireSector(ctx, sector, storiface.FTSealed|storiface.FTCache, 0, storiface.PathSealing) + if err != nil { + return nil, xerrors.Errorf("acquire sector paths: %w", err) + } + defer done() + output, err := ffi.SealCommitPhase1( + sector.ProofType, + cids.Sealed, + cids.Unsealed, + paths.Cache, + paths.Sealed, + sector.ID.Number, + sector.ID.Miner, + ticket, + seed, + pieces, + ) + if err != nil { + log.Warn("StandaloneSealCommit error: ", err) + log.Warnf("num:%d tkt:%v seed:%v, pi:%v sealedCID:%v, unsealedCID:%v", sector.ID.Number, ticket, seed, pieces, cids.Sealed, cids.Unsealed) + + return nil, xerrors.Errorf("StandaloneSealCommit: %w", err) + } + return output, nil +} + +func (sb *Sealer) SealCommit2(ctx context.Context, sector storage.SectorRef, phase1Out storage.Commit1Out) (storage.Proof, error) { + return ffi.SealCommitPhase2(phase1Out, sector.ID.Number, sector.ID.Miner) +} + +func (sb *Sealer) FinalizeSector(ctx context.Context, sector storage.SectorRef, keepUnsealed []storage.Range) error { + ssize, err := sector.ProofType.SectorSize() + if err != nil { + return err + } + maxPieceSize := abi.PaddedPieceSize(ssize) + + if len(keepUnsealed) > 0 { + + sr := pieceRun(0, maxPieceSize) + + for _, s := range keepUnsealed { + si := &rlepluslazy.RunSliceIterator{} + if s.Offset != 0 { + si.Runs = append(si.Runs, rlepluslazy.Run{Val: false, Len: uint64(s.Offset)}) + } + si.Runs = append(si.Runs, rlepluslazy.Run{Val: true, Len: uint64(s.Size)}) + + var err error + sr, err = rlepluslazy.Subtract(sr, si) + if err != nil { + return err + } + } + + paths, done, err := sb.sectors.AcquireSector(ctx, sector, storiface.FTUnsealed, 0, storiface.PathStorage) + if err != nil { + return xerrors.Errorf("acquiring sector cache path: %w", err) + } + defer done() + + pf, err := openPartialFile(maxPieceSize, paths.Unsealed) + if err == nil { + var at uint64 + for sr.HasNext() { + r, err := sr.NextRun() + if err != nil { + _ = pf.Close() + return err + } + + offset := at + at += r.Len + if !r.Val { + continue + } + + err = pf.Free(storiface.PaddedByteIndex(abi.UnpaddedPieceSize(offset).Padded()), abi.UnpaddedPieceSize(r.Len).Padded()) + if err != nil { + _ = pf.Close() + return xerrors.Errorf("free partial file range: %w", err) + } + } + + if err := pf.Close(); err != nil { + return err + } + } else { + if !xerrors.Is(err, os.ErrNotExist) { + return xerrors.Errorf("opening partial file: %w", err) + } + } + + } + + paths, done, err := sb.sectors.AcquireSector(ctx, sector, storiface.FTCache, 0, storiface.PathStorage) + if err != nil { + return xerrors.Errorf("acquiring sector cache path: %w", err) + } + defer done() + + return ffi.ClearCache(uint64(ssize), paths.Cache) +} + +func (sb *Sealer) ReleaseUnsealed(ctx context.Context, sector storage.SectorRef, safeToFree []storage.Range) error { + // This call is meant to mark storage as 'freeable'. Given that unsealing is + // very expensive, we don't remove data as soon as we can - instead we only + // do that when we don't have free space for data that really needs it + + // This function should not be called at this layer, everything should be + // handled in localworker + return xerrors.Errorf("not supported at this layer") +} + +func (sb *Sealer) Remove(ctx context.Context, sector storage.SectorRef) error { + return xerrors.Errorf("not supported at this layer") // happens in localworker +} + +func GetRequiredPadding(oldLength abi.PaddedPieceSize, newPieceLength abi.PaddedPieceSize) ([]abi.PaddedPieceSize, abi.PaddedPieceSize) { + + padPieces := make([]abi.PaddedPieceSize, 0) + + toFill := uint64(-oldLength % newPieceLength) + + n := bits.OnesCount64(toFill) + var sum abi.PaddedPieceSize + for i := 0; i < n; i++ { + next := bits.TrailingZeros64(toFill) + psize := uint64(1) << uint(next) + toFill ^= psize + + padded := abi.PaddedPieceSize(psize) + padPieces = append(padPieces, padded) + sum += padded + } + + return padPieces, sum +} + +func GenerateUnsealedCID(proofType abi.RegisteredSealProof, pieces []abi.PieceInfo) (cid.Cid, error) { + ssize, err := proofType.SectorSize() + if err != nil { + return cid.Undef, err + } + + pssize := abi.PaddedPieceSize(ssize) + allPieces := make([]abi.PieceInfo, 0, len(pieces)) + if len(pieces) == 0 { + allPieces = append(allPieces, abi.PieceInfo{ + Size: pssize, + PieceCID: zerocomm.ZeroPieceCommitment(pssize.Unpadded()), + }) + } else { + var sum abi.PaddedPieceSize + + padTo := func(pads []abi.PaddedPieceSize) { + for _, p := range pads { + allPieces = append(allPieces, abi.PieceInfo{ + Size: p, + PieceCID: zerocomm.ZeroPieceCommitment(p.Unpadded()), + }) + + sum += p + } + } + + for _, p := range pieces { + ps, _ := GetRequiredPadding(sum, p.Size) + padTo(ps) + + allPieces = append(allPieces, p) + sum += p.Size + } + + ps, _ := GetRequiredPadding(sum, pssize) + padTo(ps) + } + + return ffi.GenerateUnsealedCID(proofType, allPieces) +} diff --git a/pkg/util/ffiwrapper/impl/testing.go b/pkg/util/ffiwrapper/impl/testing.go new file mode 100644 index 0000000000..e0be647b69 --- /dev/null +++ b/pkg/util/ffiwrapper/impl/testing.go @@ -0,0 +1,42 @@ +package impl + +import ( + "context" + + "github.com/filecoin-project/go-state-types/abi" + + proof5 "github.com/filecoin-project/specs-actors/v5/actors/runtime/proof" + proof7 "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" + + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" +) + +// FakeVerifier is a simple mock Verifier for testing. +type FakeVerifier struct { +} + +var _ ffiwrapper.Verifier = (*FakeVerifier)(nil) + +func (f *FakeVerifier) VerifySeal(proof5.SealVerifyInfo) (bool, error) { + return true, nil +} + +func (f *FakeVerifier) VerifyAggregateSeals(aggregate proof5.AggregateSealVerifyProofAndInfos) (bool, error) { + return true, nil +} + +func (f *FakeVerifier) VerifyReplicaUpdate(update proof7.ReplicaUpdateInfo) (bool, error) { + return true, nil +} + +func (f *FakeVerifier) VerifyWinningPoSt(context.Context, proof5.WinningPoStVerifyInfo) (bool, error) { + return true, nil +} + +func (f *FakeVerifier) VerifyWindowPoSt(context.Context, proof5.WindowPoStVerifyInfo) (bool, error) { + return true, nil +} + +func (f *FakeVerifier) GenerateWinningPoStSectorChallenge(context.Context, abi.RegisteredPoStProof, abi.ActorID, abi.PoStRandomness, uint64) ([]uint64, error) { + return []uint64{}, nil +} diff --git a/pkg/util/ffiwrapper/impl/types.go b/pkg/util/ffiwrapper/impl/types.go new file mode 100644 index 0000000000..4a93a5312e --- /dev/null +++ b/pkg/util/ffiwrapper/impl/types.go @@ -0,0 +1,34 @@ +package impl + +import ( + "context" + "io" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/specs-storage/storage" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/util/ffiwrapper/basicfs" + "github.com/filecoin-project/venus/pkg/util/storiface" +) + +type StorageSealer interface { + storage.Sealer + storage.Storage +} + +type Storage interface { + storage.Prover + StorageSealer + + UnsealPiece(ctx context.Context, sector storage.SectorRef, offset storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize, randomness abi.SealRandomness, commd cid.Cid) error + ReadPiece(ctx context.Context, writer io.Writer, sector storage.SectorRef, offset storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize) (bool, error) +} + +type SectorProvider interface { + // * returns storiface.ErrSectorNotFound if a requested existing sector doesn't exist + // * returns an error when allocate is set, and existing isn't, and the sector exists + AcquireSector(ctx context.Context, id storage.SectorRef, existing storiface.SectorFileType, allocate storiface.SectorFileType, ptype storiface.PathType) (storiface.SectorPaths, func(), error) +} + +var _ SectorProvider = &basicfs.Provider{} diff --git a/pkg/util/ffiwrapper/impl/unseal_ranges.go b/pkg/util/ffiwrapper/impl/unseal_ranges.go new file mode 100644 index 0000000000..10fd071df0 --- /dev/null +++ b/pkg/util/ffiwrapper/impl/unseal_ranges.go @@ -0,0 +1,26 @@ +package impl + +import ( + "golang.org/x/xerrors" + + rlepluslazy "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/venus/pkg/util/storiface" +) + +// merge gaps between ranges which are close to each other +// TODO: more benchmarking to come up with more optimal number +const mergeGaps = 32 << 20 + +// TODO const expandRuns = 16 << 20 // unseal more than requested for future requests + +func computeUnsealRanges(unsealed rlepluslazy.RunIterator, offset storiface.UnpaddedByteIndex, size abi.UnpaddedPieceSize) (rlepluslazy.RunIterator, error) { + todo := pieceRun(offset.Padded(), size.Padded()) + todo, err := rlepluslazy.Subtract(todo, unsealed) + if err != nil { + return nil, xerrors.Errorf("compute todo-unsealed: %w", err) + } + + return rlepluslazy.JoinClose(todo, mergeGaps) +} diff --git a/pkg/util/ffiwrapper/impl/verifier_cgo.go b/pkg/util/ffiwrapper/impl/verifier_cgo.go new file mode 100644 index 0000000000..c7b19d2cee --- /dev/null +++ b/pkg/util/ffiwrapper/impl/verifier_cgo.go @@ -0,0 +1,146 @@ +//+build cgo + +package impl + +import ( + "context" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" + + ffi "github.com/filecoin-project/filecoin-ffi" + "github.com/filecoin-project/go-state-types/abi" + proof5 "github.com/filecoin-project/specs-actors/v5/actors/runtime/proof" + proof7 "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" + "github.com/filecoin-project/specs-storage/storage" + "go.opencensus.io/trace" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/util/storiface" +) + +func (sb *Sealer) GenerateWinningPoSt(ctx context.Context, minerID abi.ActorID, sectorInfo []proof5.SectorInfo, randomness abi.PoStRandomness) ([]proof5.PoStProof, error) { + randomness[31] &= 0x3f + privsectors, skipped, done, err := sb.pubSectorToPriv(ctx, minerID, sectorInfo, nil, abi.RegisteredSealProof.RegisteredWinningPoStProof) // TODO: FAULTS? + if err != nil { + return nil, err + } + defer done() + if len(skipped) > 0 { + return nil, xerrors.Errorf("pubSectorToPriv skipped sectors: %+v", skipped) + } + + return ffi.GenerateWinningPoSt(minerID, privsectors, randomness) +} + +func (sb *Sealer) GenerateWindowPoSt(ctx context.Context, minerID abi.ActorID, sectorInfo []proof5.SectorInfo, randomness abi.PoStRandomness) ([]proof5.PoStProof, []abi.SectorID, error) { + randomness[31] &= 0x3f + privsectors, skipped, done, err := sb.pubSectorToPriv(ctx, minerID, sectorInfo, nil, abi.RegisteredSealProof.RegisteredWindowPoStProof) + if err != nil { + return nil, nil, xerrors.Errorf("gathering sector info: %w", err) + } + defer done() + + if len(skipped) > 0 { + return nil, skipped, xerrors.Errorf("pubSectorToPriv skipped some sectors") + } + + proof, faulty, err := ffi.GenerateWindowPoSt(minerID, privsectors, randomness) + + var faultyIDs []abi.SectorID + for _, f := range faulty { + faultyIDs = append(faultyIDs, abi.SectorID{ + Miner: minerID, + Number: f, + }) + } + + return proof, faultyIDs, err +} + +func (sb *Sealer) pubSectorToPriv(ctx context.Context, mid abi.ActorID, sectorInfo []proof5.SectorInfo, faults []abi.SectorNumber, rpt func(abi.RegisteredSealProof) (abi.RegisteredPoStProof, error)) (ffi.SortedPrivateSectorInfo, []abi.SectorID, func(), error) { + fmap := map[abi.SectorNumber]struct{}{} + for _, fault := range faults { + fmap[fault] = struct{}{} + } + + var doneFuncs []func() + done := func() { + for _, df := range doneFuncs { + df() + } + } + + var skipped []abi.SectorID + var out []ffi.PrivateSectorInfo + for _, s := range sectorInfo { + if _, faulty := fmap[s.SectorNumber]; faulty { + continue + } + + sid := storage.SectorRef{ + ID: abi.SectorID{Miner: mid, Number: s.SectorNumber}, + ProofType: s.SealProof, + } + + paths, d, err := sb.sectors.AcquireSector(ctx, sid, storiface.FTCache|storiface.FTSealed, 0, storiface.PathStorage) + if err != nil { + log.Warnw("failed to acquire sector, skipping", "sector", sid.ID, "error", err) + skipped = append(skipped, sid.ID) + continue + } + doneFuncs = append(doneFuncs, d) + + postProofType, err := rpt(s.SealProof) + if err != nil { + done() + return ffi.SortedPrivateSectorInfo{}, nil, nil, xerrors.Errorf("acquiring registered PoSt proof from sector info %+v: %w", s, err) + } + + out = append(out, ffi.PrivateSectorInfo{ + CacheDirPath: paths.Cache, + PoStProofType: postProofType, + SealedSectorPath: paths.Sealed, + SectorInfo: s, + }) + } + + return ffi.NewSortedPrivateSectorInfo(out...), skipped, done, nil +} + +var _ ffiwrapper.Verifier = ProofVerifier + +type proofVerifier struct{} + +var ProofVerifier = proofVerifier{} + +func (proofVerifier) VerifySeal(info proof5.SealVerifyInfo) (bool, error) { + return ffi.VerifySeal(info) +} + +func (verifier proofVerifier) VerifyAggregateSeals(aggregate proof5.AggregateSealVerifyProofAndInfos) (bool, error) { + return ffi.VerifyAggregateSeals(aggregate) +} + +func (proofVerifier) VerifyReplicaUpdate(update proof7.ReplicaUpdateInfo) (bool, error) { + return ffi.SectorUpdate.VerifyUpdateProof(update) +} + +func (proofVerifier) VerifyWinningPoSt(ctx context.Context, info proof5.WinningPoStVerifyInfo) (bool, error) { + info.Randomness[31] &= 0x3f + _, span := trace.StartSpan(ctx, "VerifyWinningPoSt") + defer span.End() + + return ffi.VerifyWinningPoSt(info) +} + +func (proofVerifier) VerifyWindowPoSt(ctx context.Context, info proof5.WindowPoStVerifyInfo) (bool, error) { + info.Randomness[31] &= 0x3f + _, span := trace.StartSpan(ctx, "VerifyWindowPoSt") + defer span.End() + + return ffi.VerifyWindowPoSt(info) +} + +func (proofVerifier) GenerateWinningPoStSectorChallenge(ctx context.Context, proofType abi.RegisteredPoStProof, minerID abi.ActorID, randomness abi.PoStRandomness, eligibleSectorCount uint64) ([]uint64, error) { + randomness[31] &= 0x3f + return ffi.GenerateWinningPoStSectorChallenge(proofType, minerID, randomness, eligibleSectorCount) +} diff --git a/pkg/util/ffiwrapper/verifier.go b/pkg/util/ffiwrapper/verifier.go new file mode 100644 index 0000000000..6633b5eea9 --- /dev/null +++ b/pkg/util/ffiwrapper/verifier.go @@ -0,0 +1,20 @@ +package ffiwrapper + +import ( + "context" + + "github.com/filecoin-project/go-state-types/abi" + + proof5 "github.com/filecoin-project/specs-actors/v5/actors/runtime/proof" + proof7 "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" +) + +type Verifier interface { + VerifySeal(proof5.SealVerifyInfo) (bool, error) + VerifyAggregateSeals(aggregate proof5.AggregateSealVerifyProofAndInfos) (bool, error) + VerifyReplicaUpdate(update proof7.ReplicaUpdateInfo) (bool, error) + VerifyWinningPoSt(ctx context.Context, info proof5.WinningPoStVerifyInfo) (bool, error) + VerifyWindowPoSt(ctx context.Context, info proof5.WindowPoStVerifyInfo) (bool, error) + + GenerateWinningPoStSectorChallenge(context.Context, abi.RegisteredPoStProof, abi.ActorID, abi.PoStRandomness, uint64) ([]uint64, error) +} diff --git a/pkg/util/fr32/fr32.go b/pkg/util/fr32/fr32.go new file mode 100644 index 0000000000..17e6a11429 --- /dev/null +++ b/pkg/util/fr32/fr32.go @@ -0,0 +1,157 @@ +package fr32 + +import ( + "math/bits" + "runtime" + "sync" + + "github.com/filecoin-project/go-state-types/abi" +) + +var MTTresh = uint64(32 << 20) + +func mtChunkCount(usz abi.PaddedPieceSize) uint64 { + threads := (uint64(usz)) / MTTresh + if threads > uint64(runtime.NumCPU()) { + threads = 1 << (bits.Len32(uint32(runtime.NumCPU()))) + } + if threads == 0 { + return 1 + } + if threads > 32 { + return 32 // avoid too large buffers + } + return threads +} + +func mt(in, out []byte, padLen int, op func(unpadded, padded []byte)) { + threads := mtChunkCount(abi.PaddedPieceSize(padLen)) + threadBytes := abi.PaddedPieceSize(padLen / int(threads)) + + var wg sync.WaitGroup + wg.Add(int(threads)) + + for i := 0; i < int(threads); i++ { + go func(thread int) { + defer wg.Done() + + start := threadBytes * abi.PaddedPieceSize(thread) + end := start + threadBytes + + op(in[start.Unpadded():end.Unpadded()], out[start:end]) + }(i) + } + wg.Wait() +} + +func Pad(in, out []byte) { + // Assumes len(in)%127==0 and len(out)%128==0 + if len(out) > int(MTTresh) { + mt(in, out, len(out), pad) + return + } + + pad(in, out) +} + +func pad(in, out []byte) { + chunks := len(out) / 128 + for chunk := 0; chunk < chunks; chunk++ { + inOff := chunk * 127 + outOff := chunk * 128 + + copy(out[outOff:outOff+31], in[inOff:inOff+31]) + + t := in[inOff+31] >> 6 + out[outOff+31] = in[inOff+31] & 0x3f + var v byte + + for i := 32; i < 64; i++ { + v = in[inOff+i] + out[outOff+i] = (v << 2) | t + t = v >> 6 + } + + t = v >> 4 + out[outOff+63] &= 0x3f + + for i := 64; i < 96; i++ { + v = in[inOff+i] + out[outOff+i] = (v << 4) | t + t = v >> 4 + } + + t = v >> 2 + out[outOff+95] &= 0x3f + + for i := 96; i < 127; i++ { + v = in[inOff+i] + out[outOff+i] = (v << 6) | t + t = v >> 2 + } + + out[outOff+127] = t & 0x3f + } +} + +func Unpad(in []byte, out []byte) { + // Assumes len(in)%128==0 and len(out)%127==0 + if len(in) > int(MTTresh) { + mt(out, in, len(in), unpad) + return + } + + unpad(out, in) +} + +func unpad(out, in []byte) { + chunks := len(in) / 128 + for chunk := 0; chunk < chunks; chunk++ { + inOffNext := chunk*128 + 1 + outOff := chunk * 127 + + at := in[chunk*128] + + for i := 0; i < 32; i++ { + next := in[i+inOffNext] + + out[outOff+i] = at + //out[i] |= next << 8 + + at = next + } + + out[outOff+31] |= at << 6 + + for i := 32; i < 64; i++ { + next := in[i+inOffNext] + + out[outOff+i] = at >> 2 + out[outOff+i] |= next << 6 + + at = next + } + + out[outOff+63] ^= (at << 6) ^ (at << 4) + + for i := 64; i < 96; i++ { + next := in[i+inOffNext] + + out[outOff+i] = at >> 4 + out[outOff+i] |= next << 4 + + at = next + } + + out[outOff+95] ^= (at << 4) ^ (at << 2) + + for i := 96; i < 127; i++ { + next := in[i+inOffNext] + + out[outOff+i] = at >> 6 + out[outOff+i] |= next << 2 + + at = next + } + } +} diff --git a/pkg/util/fr32/fr32_ffi_cmp_test.go b/pkg/util/fr32/fr32_ffi_cmp_test.go new file mode 100644 index 0000000000..f7d3b9ce3a --- /dev/null +++ b/pkg/util/fr32/fr32_ffi_cmp_test.go @@ -0,0 +1,67 @@ +package fr32_test + +import ( + "bytes" + "io" + "io/ioutil" + "os" + "testing" + + ffi "github.com/filecoin-project/filecoin-ffi" + commpffi "github.com/filecoin-project/go-commp-utils/ffiwrapper" + "github.com/filecoin-project/go-state-types/abi" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/util/fr32" +) + +func TestWriteTwoPcs(t *testing.T) { + tf.UnitTest(t) + tf, _ := ioutil.TempFile("/tmp/", "scrb-") + + paddedSize := abi.PaddedPieceSize(16 << 20) + n := 2 + + var rawBytes []byte + + for i := 0; i < n; i++ { + buf := bytes.Repeat([]byte{0xab * byte(i)}, int(paddedSize.Unpadded())) + rawBytes = append(rawBytes, buf...) + + rf, w, _ := commpffi.ToReadableFile(bytes.NewReader(buf), int64(len(buf))) + + _, _, _, err := ffi.WriteWithAlignment(abi.RegisteredSealProof_StackedDrg32GiBV1, rf, abi.UnpaddedPieceSize(len(buf)), tf, nil) + if err != nil { + panic(err) + } + if err := w(); err != nil { + panic(err) + } + } + + if _, err := tf.Seek(io.SeekStart, 0); err != nil { // nolint:staticcheck + panic(err) + } + + ffiBytes, err := ioutil.ReadAll(tf) + if err != nil { + panic(err) + } + + if err := tf.Close(); err != nil { + panic(err) + } + + if err := os.Remove(tf.Name()); err != nil { + panic(err) + } + + outBytes := make([]byte, int(paddedSize)*n) + fr32.Pad(rawBytes, outBytes) + require.Equal(t, ffiBytes, outBytes) + + unpadBytes := make([]byte, int(paddedSize.Unpadded())*n) + fr32.Unpad(ffiBytes, unpadBytes) + require.Equal(t, rawBytes, unpadBytes) +} diff --git a/pkg/util/fr32/fr32_test.go b/pkg/util/fr32/fr32_test.go new file mode 100644 index 0000000000..7a4d28ddf2 --- /dev/null +++ b/pkg/util/fr32/fr32_test.go @@ -0,0 +1,263 @@ +package fr32_test + +import ( + "bytes" + "io" + "io/ioutil" + "math/rand" + "os" + "testing" + + ffi "github.com/filecoin-project/filecoin-ffi" + commpffi "github.com/filecoin-project/go-commp-utils/ffiwrapper" + "github.com/filecoin-project/go-state-types/abi" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/util/fr32" +) + +func padFFI(buf []byte) []byte { + rf, w, _ := commpffi.ToReadableFile(bytes.NewReader(buf), int64(len(buf))) + tf, _ := ioutil.TempFile("/tmp/", "scrb-") + + _, _, _, err := ffi.WriteWithAlignment(abi.RegisteredSealProof_StackedDrg32GiBV1, rf, abi.UnpaddedPieceSize(len(buf)), tf, nil) + if err != nil { + panic(err) + } + if err := w(); err != nil { + panic(err) + } + + if _, err := tf.Seek(io.SeekStart, 0); err != nil { // nolint:staticcheck + panic(err) + } + + padded, err := ioutil.ReadAll(tf) + if err != nil { + panic(err) + } + + if err := tf.Close(); err != nil { + panic(err) + } + + if err := os.Remove(tf.Name()); err != nil { + panic(err) + } + + return padded +} + +func TestPadChunkFFI(t *testing.T) { + tf.UnitTest(t) + testByteChunk := func(b byte) func(*testing.T) { + return func(t *testing.T) { + var buf [128]byte + copy(buf[:], bytes.Repeat([]byte{b}, 127)) + + fr32.Pad(buf[:], buf[:]) + + expect := padFFI(bytes.Repeat([]byte{b}, 127)) + + require.Equal(t, expect, buf[:]) + } + } + + t.Run("ones", testByteChunk(0xff)) + t.Run("lsb1", testByteChunk(0x01)) + t.Run("msb1", testByteChunk(0x80)) + t.Run("zero", testByteChunk(0x0)) + t.Run("mid", testByteChunk(0x3c)) +} + +func TestPadChunkRandEqFFI(t *testing.T) { + tf.UnitTest(t) + for i := 0; i < 200; i++ { + var input [127]byte + rand.Read(input[:]) + + var buf [128]byte + + fr32.Pad(input[:], buf[:]) + + expect := padFFI(input[:]) + + require.Equal(t, expect, buf[:]) + } +} + +func TestRoundtrip(t *testing.T) { + tf.UnitTest(t) + testByteChunk := func(b byte) func(*testing.T) { + return func(t *testing.T) { + var buf [128]byte + input := bytes.Repeat([]byte{0x01}, 127) + + fr32.Pad(input, buf[:]) + + var out [127]byte + fr32.Unpad(buf[:], out[:]) + + require.Equal(t, input, out[:]) + } + } + + t.Run("ones", testByteChunk(0xff)) + t.Run("lsb1", testByteChunk(0x01)) + t.Run("msb1", testByteChunk(0x80)) + t.Run("zero", testByteChunk(0x0)) + t.Run("mid", testByteChunk(0x3c)) +} + +func TestRoundtripChunkRand(t *testing.T) { + tf.UnitTest(t) + for i := 0; i < 200; i++ { + var input [127]byte + rand.Read(input[:]) + + var buf [128]byte + copy(buf[:], input[:]) + + fr32.Pad(buf[:], buf[:]) + + var out [127]byte + fr32.Unpad(buf[:], out[:]) + + require.Equal(t, input[:], out[:]) + } +} + +func TestRoundtrip16MRand(t *testing.T) { + tf.UnitTest(t) + up := abi.PaddedPieceSize(16 << 20).Unpadded() + + input := make([]byte, up) + rand.Read(input[:]) + + buf := make([]byte, 16<<20) + + fr32.Pad(input, buf) + + out := make([]byte, up) + fr32.Unpad(buf, out) + + require.Equal(t, input, out) + + ffi := padFFI(input) + require.Equal(t, ffi, buf) +} + +func BenchmarkPadChunk(b *testing.B) { + tf.BenchUnitTest(b) + var buf [128]byte + in := bytes.Repeat([]byte{0xff}, 127) + + b.SetBytes(127) + + for i := 0; i < b.N; i++ { + fr32.Pad(in, buf[:]) + } +} + +func BenchmarkChunkRoundtrip(b *testing.B) { + tf.BenchUnitTest(b) + var buf [128]byte + copy(buf[:], bytes.Repeat([]byte{0xff}, 127)) + var out [127]byte + + b.SetBytes(127) + + for i := 0; i < b.N; i++ { + fr32.Pad(buf[:], buf[:]) + fr32.Unpad(buf[:], out[:]) + } +} + +func BenchmarkUnpadChunk(b *testing.B) { + tf.BenchUnitTest(b) + var buf [128]byte + copy(buf[:], bytes.Repeat([]byte{0xff}, 127)) + + fr32.Pad(buf[:], buf[:]) + var out [127]byte + + b.SetBytes(127) + b.ReportAllocs() + + bs := buf[:] + + for i := 0; i < b.N; i++ { + fr32.Unpad(bs, out[:]) + } +} + +func BenchmarkUnpad16MChunk(b *testing.B) { + tf.BenchUnitTest(b) + up := abi.PaddedPieceSize(16 << 20).Unpadded() + + var buf [16 << 20]byte + + fr32.Pad(bytes.Repeat([]byte{0xff}, int(up)), buf[:]) + var out [16 << 20]byte + + b.SetBytes(16 << 20) + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + fr32.Unpad(buf[:], out[:]) + } +} + +func BenchmarkPad16MChunk(b *testing.B) { + tf.BenchUnitTest(b) + up := abi.PaddedPieceSize(16 << 20).Unpadded() + + var buf [16 << 20]byte + + in := bytes.Repeat([]byte{0xff}, int(up)) + + b.SetBytes(16 << 20) + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + fr32.Pad(in, buf[:]) + } +} + +func BenchmarkPad1GChunk(b *testing.B) { + tf.BenchUnitTest(b) + up := abi.PaddedPieceSize(1 << 30).Unpadded() + + var buf [1 << 30]byte + + in := bytes.Repeat([]byte{0xff}, int(up)) + + b.SetBytes(1 << 30) + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + fr32.Pad(in, buf[:]) + } +} + +func BenchmarkUnpad1GChunk(b *testing.B) { + tf.BenchUnitTest(b) + up := abi.PaddedPieceSize(1 << 30).Unpadded() + + var buf [1 << 30]byte + + fr32.Pad(bytes.Repeat([]byte{0xff}, int(up)), buf[:]) + var out [1 << 30]byte + + b.SetBytes(1 << 30) + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + fr32.Unpad(buf[:], out[:]) + } +} diff --git a/pkg/util/fr32/readers.go b/pkg/util/fr32/readers.go new file mode 100644 index 0000000000..20f3e9b318 --- /dev/null +++ b/pkg/util/fr32/readers.go @@ -0,0 +1,133 @@ +package fr32 + +import ( + "io" + "math/bits" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" +) + +type unpadReader struct { + src io.Reader + + left uint64 + work []byte +} + +func NewUnpadReader(src io.Reader, sz abi.PaddedPieceSize) (io.Reader, error) { + if err := sz.Validate(); err != nil { + return nil, xerrors.Errorf("bad piece size: %w", err) + } + + buf := make([]byte, MTTresh*mtChunkCount(sz)) + + return &unpadReader{ + src: src, + + left: uint64(sz), + work: buf, + }, nil +} + +func (r *unpadReader) Read(out []byte) (int, error) { + if r.left == 0 { + return 0, io.EOF + } + + chunks := len(out) / 127 + + outTwoPow := 1 << (63 - bits.LeadingZeros64(uint64(chunks*128))) + + if err := abi.PaddedPieceSize(outTwoPow).Validate(); err != nil { + return 0, xerrors.Errorf("output must be of valid padded piece size: %w", err) + } + + todo := abi.PaddedPieceSize(outTwoPow) + if r.left < uint64(todo) { + todo = abi.PaddedPieceSize(1 << (63 - bits.LeadingZeros64(r.left))) + } + + r.left -= uint64(todo) + + n, err := r.src.Read(r.work[:todo]) + if err != nil && err != io.EOF { + return n, err + } + + if n != int(todo) { + return 0, xerrors.Errorf("didn't read enough: %w", err) + } + + Unpad(r.work[:todo], out[:todo.Unpadded()]) + + return int(todo.Unpadded()), err +} + +type padWriter struct { + dst io.Writer + + stash []byte + work []byte +} + +func NewPadWriter(dst io.Writer) io.WriteCloser { + return &padWriter{ + dst: dst, + } +} + +func (w *padWriter) Write(p []byte) (int, error) { + in := p + + if len(p)+len(w.stash) < 127 { + w.stash = append(w.stash, p...) + return len(p), nil + } + + if len(w.stash) != 0 { + in = append(w.stash, in...) + } + + for { + pieces := subPieces(abi.UnpaddedPieceSize(len(in))) + biggest := pieces[len(pieces)-1] + + if abi.PaddedPieceSize(cap(w.work)) < biggest.Padded() { + w.work = make([]byte, 0, biggest.Padded()) + } + + Pad(in[:int(biggest)], w.work[:int(biggest.Padded())]) + + n, err := w.dst.Write(w.work[:int(biggest.Padded())]) + if err != nil { + return int(abi.PaddedPieceSize(n).Unpadded()), err + } + + in = in[biggest:] + + if len(in) < 127 { + if cap(w.stash) < len(in) { + w.stash = make([]byte, 0, len(in)) + } + w.stash = w.stash[:len(in)] + copy(w.stash, in) + + return len(p), nil + } + } +} + +func (w *padWriter) Close() error { + if len(w.stash) > 0 { + return xerrors.Errorf("still have %d unprocessed bytes", len(w.stash)) + } + + // allow gc + w.stash = nil + w.work = nil + w.dst = nil + + return nil +} diff --git a/pkg/util/fr32/readers_test.go b/pkg/util/fr32/readers_test.go new file mode 100644 index 0000000000..bca84c05b6 --- /dev/null +++ b/pkg/util/fr32/readers_test.go @@ -0,0 +1,37 @@ +package fr32_test + +import ( + "bufio" + "bytes" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "io/ioutil" + "testing" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/util/fr32" +) + +func TestUnpadReader(t *testing.T) { + tf.UnitTest(t) + ps := abi.PaddedPieceSize(64 << 20).Unpadded() + + raw := bytes.Repeat([]byte{0x77}, int(ps)) + + padOut := make([]byte, ps.Padded()) + fr32.Pad(raw, padOut) + + r, err := fr32.NewUnpadReader(bytes.NewReader(padOut), ps.Padded()) + if err != nil { + t.Fatal(err) + } + + // using bufio reader to make sure reads are big enough for the padreader - it can't handle small reads right now + readered, err := ioutil.ReadAll(bufio.NewReaderSize(r, 512)) + if err != nil { + t.Fatal(err) + } + + require.Equal(t, raw, readered) +} diff --git a/pkg/util/fr32/utils.go b/pkg/util/fr32/utils.go new file mode 100644 index 0000000000..26c348f4f9 --- /dev/null +++ b/pkg/util/fr32/utils.go @@ -0,0 +1,31 @@ +package fr32 + +import ( + "math/bits" + + "github.com/filecoin-project/go-state-types/abi" +) + +func subPieces(in abi.UnpaddedPieceSize) []abi.UnpaddedPieceSize { + // Convert to in-sector bytes for easier math: + // + // (we convert to sector bytes as they are nice round binary numbers) + + w := uint64(in.Padded()) + + out := make([]abi.UnpaddedPieceSize, bits.OnesCount64(w)) + for i := range out { + // Extract the next lowest non-zero bit + next := bits.TrailingZeros64(w) + psize := uint64(1) << next + // e.g: if the number is 0b010100, psize will be 0b000100 + + // set that bit to 0 by XORing it, so the next iteration looks at the + // next bit + w ^= psize + + // Add the piece size to the list of pieces we need to create + out[i] = abi.PaddedPieceSize(psize).Unpadded() + } + return out +} diff --git a/pkg/util/fsm/events.go b/pkg/util/fsm/events.go new file mode 100644 index 0000000000..b10e99db31 --- /dev/null +++ b/pkg/util/fsm/events.go @@ -0,0 +1,22 @@ +package fsm + +import ( + "context" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" +) + +// Chain a interface used to get chain head and net version +type Chain interface { + ChainHead(ctx context.Context) (TipSetToken, abi.ChainEpoch, error) + StateNetworkVersion(ctx context.Context, tok TipSetToken) (network.Version, error) +} + +// `curH`-`ts.Height` = `confidence` +type HeightHandler func(ctx context.Context, tok TipSetToken, curH abi.ChainEpoch) error +type RevertHandler func(ctx context.Context, tok TipSetToken) error + +type Events interface { + ChainAt(hnd HeightHandler, rev RevertHandler, confidence int, h abi.ChainEpoch) error +} diff --git a/pkg/util/fsm/types.go b/pkg/util/fsm/types.go new file mode 100644 index 0000000000..f0fc06f24e --- /dev/null +++ b/pkg/util/fsm/types.go @@ -0,0 +1,67 @@ +package fsm + +import ( + "bytes" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/exitcode" +) + +// Piece is a tuple of piece and deal info +type PieceWithDealInfo struct { + Piece abi.PieceInfo + DealInfo DealInfo +} + +// Piece is a tuple of piece info and optional deal +type Piece struct { + Piece abi.PieceInfo + DealInfo *DealInfo // nil for pieces which do not appear in deals (e.g. filler pieces) +} + +// DealInfo is a tuple of deal identity and its schedule +type DealInfo struct { + PublishCid *cid.Cid + DealID abi.DealID + DealSchedule DealSchedule + KeepUnsealed bool +} + +// DealSchedule communicates the time interval of a storage deal. The deal must +// appear in a sealed (proven) sector no later than StartEpoch, otherwise it +// is invalid. +type DealSchedule struct { + StartEpoch abi.ChainEpoch + EndEpoch abi.ChainEpoch +} + +type Log struct { + Timestamp uint64 + Trace string // for errors + + Message string + + // additional data (Event info) + Kind string +} + +type ReturnState string + +type TipSetToken []byte + +type MsgLookup struct { + Receipt MessageReceipt + TipSetTok TipSetToken + Height abi.ChainEpoch +} + +type MessageReceipt struct { + ExitCode exitcode.ExitCode + Return []byte + GasUsed int64 +} + +func (mr *MessageReceipt) Equals(o *MessageReceipt) bool { + return mr.ExitCode == o.ExitCode && bytes.Equal(mr.Return, o.Return) && mr.GasUsed == o.GasUsed +} diff --git a/pkg/util/fsutil/dealloc_linux.go b/pkg/util/fsutil/dealloc_linux.go new file mode 100644 index 0000000000..0b20c568db --- /dev/null +++ b/pkg/util/fsutil/dealloc_linux.go @@ -0,0 +1,28 @@ +package fsutil + +import ( + "os" + "syscall" + + logging "github.com/ipfs/go-log/v2" +) + +var log = logging.Logger("fsutil") + +const FallocFlPunchHole = 0x02 // linux/falloc.h + +func Deallocate(file *os.File, offset int64, length int64) error { + if length == 0 { + return nil + } + + err := syscall.Fallocate(int(file.Fd()), FallocFlPunchHole, offset, length) + if errno, ok := err.(syscall.Errno); ok { + if errno == syscall.EOPNOTSUPP || errno == syscall.ENOSYS { + log.Warnf("could not deallocate space, ignoring: %v", errno) + err = nil // log and ignore + } + } + + return err +} diff --git a/pkg/util/fsutil/dealloc_other.go b/pkg/util/fsutil/dealloc_other.go new file mode 100644 index 0000000000..4f83479510 --- /dev/null +++ b/pkg/util/fsutil/dealloc_other.go @@ -0,0 +1,17 @@ +// +build !linux + +package fsutil + +import ( + "os" + + logging "github.com/ipfs/go-log/v2" +) + +var log = logging.Logger("fsutil") + +func Deallocate(file *os.File, offset int64, length int64) error { + log.Warnf("deallocating space not supported") + + return nil +} diff --git a/pkg/util/fsutil/filesize_unix.go b/pkg/util/fsutil/filesize_unix.go new file mode 100644 index 0000000000..500e54386c --- /dev/null +++ b/pkg/util/fsutil/filesize_unix.go @@ -0,0 +1,29 @@ +package fsutil + +import ( + "os" + "syscall" + + "golang.org/x/xerrors" +) + +type SizeInfo struct { + OnDisk int64 +} + +// FileSize returns bytes used by a file on disk +func FileSize(path string) (SizeInfo, error) { + var stat syscall.Stat_t + if err := syscall.Stat(path, &stat); err != nil { + if err == syscall.ENOENT { + return SizeInfo{}, os.ErrNotExist + } + return SizeInfo{}, xerrors.Errorf("stat: %w", err) + } + + // NOTE: stat.Blocks is in 512B blocks, NOT in stat.Blksize + // See https://www.gnu.org/software/libc/manual/html_node/Attribute-Meanings.html + return SizeInfo{ + int64(stat.Blocks) * 512, // nolint NOTE: int64 cast is needed on osx + }, nil +} diff --git a/pkg/util/fsutil/statfs.go b/pkg/util/fsutil/statfs.go new file mode 100644 index 0000000000..2a00ccb9ab --- /dev/null +++ b/pkg/util/fsutil/statfs.go @@ -0,0 +1,7 @@ +package fsutil + +type FsStat struct { + Capacity int64 + Available int64 // Available to use for sector storage + Reserved int64 +} diff --git a/pkg/util/fsutil/statfs_unix.go b/pkg/util/fsutil/statfs_unix.go new file mode 100644 index 0000000000..831fd8b4f1 --- /dev/null +++ b/pkg/util/fsutil/statfs_unix.go @@ -0,0 +1,21 @@ +package fsutil + +import ( + "syscall" + + "golang.org/x/xerrors" +) + +func Statfs(path string) (FsStat, error) { + var stat syscall.Statfs_t + if err := syscall.Statfs(path, &stat); err != nil { + return FsStat{}, xerrors.Errorf("statfs: %w", err) + } + + // force int64 to handle platform specific differences + //nolint:unconvert + return FsStat{ + Capacity: int64(stat.Blocks) * int64(stat.Bsize), + Available: int64(stat.Bavail) * int64(stat.Bsize), + }, nil +} diff --git a/pkg/util/fsutil/statfs_windows.go b/pkg/util/fsutil/statfs_windows.go new file mode 100644 index 0000000000..d785651826 --- /dev/null +++ b/pkg/util/fsutil/statfs_windows.go @@ -0,0 +1,28 @@ +package fsutil + +import ( + "syscall" + "unsafe" +) + +func Statfs(volumePath string) (FsStat, error) { + // From https://github.com/ricochet2200/go-disk-usage/blob/master/du/diskusage_windows.go + + h := syscall.MustLoadDLL("kernel32.dll") + c := h.MustFindProc("GetDiskFreeSpaceExW") + + var freeBytes int64 + var totalBytes int64 + var availBytes int64 + + c.Call( + uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(volumePath))), + uintptr(unsafe.Pointer(&freeBytes)), + uintptr(unsafe.Pointer(&totalBytes)), + uintptr(unsafe.Pointer(&availBytes))) + + return FsStat{ + Capacity: totalBytes, + Available: availBytes, + }, nil +} diff --git a/internal/pkg/util/hasher/hasher.go b/pkg/util/hasher/hasher.go similarity index 100% rename from internal/pkg/util/hasher/hasher.go rename to pkg/util/hasher/hasher.go diff --git a/internal/pkg/cborutil/ipld.go b/pkg/util/ipld.go similarity index 95% rename from internal/pkg/cborutil/ipld.go rename to pkg/util/ipld.go index 61506ee1af..450136e1ef 100644 --- a/internal/pkg/cborutil/ipld.go +++ b/pkg/util/ipld.go @@ -1,4 +1,4 @@ -package cborutil +package util import ( "context" diff --git a/pkg/util/makecid.go b/pkg/util/makecid.go new file mode 100644 index 0000000000..a5d984fe7f --- /dev/null +++ b/pkg/util/makecid.go @@ -0,0 +1,15 @@ +package util + +import ( + "github.com/filecoin-project/venus/pkg/constants" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" +) + +func MakeCid(i interface{}) (cid.Cid, error) { + node, err := cbor.WrapObject(i, constants.DefaultHashFunction, -1) + if err != nil { + return cid.Undef, err + } + return constants.DefaultCidBuilder.Sum(node.RawData()) +} diff --git a/internal/pkg/util/moresync/latch.go b/pkg/util/moresync/latch.go similarity index 100% rename from internal/pkg/util/moresync/latch.go rename to pkg/util/moresync/latch.go diff --git a/internal/pkg/util/moresync/latch_test.go b/pkg/util/moresync/latch_test.go similarity index 86% rename from internal/pkg/util/moresync/latch_test.go rename to pkg/util/moresync/latch_test.go index 824f597150..bd60e8af2f 100644 --- a/internal/pkg/util/moresync/latch_test.go +++ b/pkg/util/moresync/latch_test.go @@ -6,8 +6,8 @@ import ( "github.com/stretchr/testify/assert" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/internal/pkg/util/moresync" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/util/moresync" ) func TestLatch(t *testing.T) { diff --git a/pkg/util/paralle/paralle.go b/pkg/util/paralle/paralle.go new file mode 100644 index 0000000000..82524f5d9e --- /dev/null +++ b/pkg/util/paralle/paralle.go @@ -0,0 +1,31 @@ +package paralle + +import "sync" + +type DoWorkPieceFunc func(piece int) + +// Parallelize is a very simple framework that allow for parallelizing +// N independent pieces of work. +func Parallelize(workers, pieces int, doWorkPiece DoWorkPieceFunc) { + toProcess := make(chan int, pieces) + for i := 0; i < pieces; i++ { + toProcess <- i + } + close(toProcess) + + if pieces < workers { + workers = pieces + } + + wg := sync.WaitGroup{} + wg.Add(workers) + for i := 0; i < workers; i++ { + go func() { + defer wg.Done() + for piece := range toProcess { + doWorkPiece(piece) + } + }() + } + wg.Wait() +} diff --git a/pkg/util/proxy/proxy_util.go b/pkg/util/proxy/proxy_util.go new file mode 100644 index 0000000000..1a0a2b3caa --- /dev/null +++ b/pkg/util/proxy/proxy_util.go @@ -0,0 +1,30 @@ +package proxy + +import "reflect" + +var _internalField = "Internal" + +// GetInternalStructs extracts all pointers to 'Internal' sub-structs from the provided pointer to a proxy struct +func GetInternalStructs(in interface{}) []interface{} { + return getInternalStructs(reflect.ValueOf(in).Elem()) +} + +func getInternalStructs(rv reflect.Value) []interface{} { + var out []interface{} + + for i := 0; i < rv.NumField(); i++ { + filedValue := rv.Field(i) + filedType := rv.Type().Field(i) + if filedType.Name == _internalField { + ii := filedValue.Addr().Interface() + out = append(out, ii) + continue + } + + sub := getInternalStructs(rv.Field(i)) + + out = append(out, sub...) + } + + return out +} diff --git a/pkg/util/proxy/proxy_util_test.go b/pkg/util/proxy/proxy_util_test.go new file mode 100644 index 0000000000..a187ba299b --- /dev/null +++ b/pkg/util/proxy/proxy_util_test.go @@ -0,0 +1,65 @@ +package proxy + +import ( + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "testing" + + "github.com/stretchr/testify/require" +) + +type StrA struct { + StrB + + Internal struct { + A int + } +} + +type StrB struct { + Internal struct { + B int + } +} + +type StrC struct { + Internal struct { + Internal struct { + C int + } + } +} + +func TestGetInternalStructs(t *testing.T) { + tf.UnitTest(t) + var proxy StrA + + sts := GetInternalStructs(&proxy) + require.Len(t, sts, 2) + + sa := sts[1].(*struct{ A int }) + sa.A = 3 + sb := sts[0].(*struct{ B int }) + sb.B = 4 + + require.Equal(t, 3, proxy.Internal.A) + require.Equal(t, 4, proxy.StrB.Internal.B) +} + +func TestNestedInternalStructs(t *testing.T) { + tf.UnitTest(t) + var proxy StrC + + // check that only the top-level internal struct gets picked up + + sts := GetInternalStructs(&proxy) + require.Len(t, sts, 1) + + sa := sts[0].(*struct { + Internal struct { + C int + } + }) + sa.Internal.C = 5 + + require.Equal(t, 5, proxy.Internal.Internal.C) +} diff --git a/pkg/util/storiface/ffi.go b/pkg/util/storiface/ffi.go new file mode 100644 index 0000000000..c7813053ef --- /dev/null +++ b/pkg/util/storiface/ffi.go @@ -0,0 +1,18 @@ +package storiface + +import ( + "errors" + + "github.com/filecoin-project/go-state-types/abi" +) + +// ErrSectorNotFound sector not found error +var ErrSectorNotFound = errors.New("sector not found") + +type UnpaddedByteIndex uint64 + +func (i UnpaddedByteIndex) Padded() PaddedByteIndex { + return PaddedByteIndex(abi.UnpaddedPieceSize(i).Padded()) +} + +type PaddedByteIndex uint64 diff --git a/pkg/util/storiface/filetype.go b/pkg/util/storiface/filetype.go new file mode 100644 index 0000000000..3661a5488b --- /dev/null +++ b/pkg/util/storiface/filetype.go @@ -0,0 +1,107 @@ +package storiface + +import ( + "fmt" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" +) + +const ( + FTUnsealed SectorFileType = 1 << iota + FTSealed + FTCache + + FileTypes = iota +) + +var PathTypes = []SectorFileType{FTUnsealed, FTSealed, FTCache} + +const ( + FTNone SectorFileType = 0 +) + +const FSOverheadDen = 10 + +var FSOverheadSeal = map[SectorFileType]int{ // 10x overheads + FTUnsealed: FSOverheadDen, + FTSealed: FSOverheadDen, + FTCache: 141, // 11 layers + D(2x ssize) + C + R +} + +var FsOverheadFinalized = map[SectorFileType]int{ + FTUnsealed: FSOverheadDen, + FTSealed: FSOverheadDen, + FTCache: 2, +} + +type SectorFileType int + +func (t SectorFileType) String() string { + switch t { + case FTUnsealed: + return "unsealed" + case FTSealed: + return "sealed" + case FTCache: + return "cache" + default: + return fmt.Sprintf("", t) + } +} + +func (t SectorFileType) Has(singleType SectorFileType) bool { + return t&singleType == singleType +} + +func (t SectorFileType) SealSpaceUse(ssize abi.SectorSize) (uint64, error) { + var need uint64 + for _, pathType := range PathTypes { + if !t.Has(pathType) { + continue + } + + oh, ok := FSOverheadSeal[pathType] + if !ok { + return 0, xerrors.Errorf("no seal overhead info for %s", pathType) + } + + need += uint64(oh) * uint64(ssize) / FSOverheadDen + } + + return need, nil +} + +func (t SectorFileType) All() [FileTypes]bool { + var out [FileTypes]bool + + for i := range out { + out[i] = t&(1< 0 + } + + return out +} + +type SectorPaths struct { + ID abi.SectorID + + Unsealed string + Sealed string + Cache string +} + +func SectorName(sid abi.SectorID) string { + return fmt.Sprintf("s-t0%d-%d", sid.Miner, sid.Number) +} + +func SetPathByType(sps *SectorPaths, fileType SectorFileType, p string) { + switch fileType { + case FTUnsealed: + sps.Unsealed = p + case FTSealed: + sps.Sealed = p + case FTCache: + sps.Cache = p + } +} diff --git a/pkg/util/storiface/storage.go b/pkg/util/storiface/storage.go new file mode 100644 index 0000000000..e1324bb977 --- /dev/null +++ b/pkg/util/storiface/storage.go @@ -0,0 +1,10 @@ +package storiface + +type PathType string + +const ( + PathStorage PathType = "storage" + PathSealing PathType = "sealing" +) + +type AcquireMode string diff --git a/pkg/util/test/equal.go b/pkg/util/test/equal.go new file mode 100644 index 0000000000..2019c15fd9 --- /dev/null +++ b/pkg/util/test/equal.go @@ -0,0 +1,34 @@ +package test + +import ( + "bytes" + "encoding/json" + "fmt" + "github.com/stretchr/testify/assert" + "testing" +) + +// Equal asserts that two objects are equal. +// +// assert.Equal(t, 123, 123) +// +// Pointer variable equality is determined based on the equality of the +// referenced values (as opposed to the memory addresses). Function equality +// cannot be determined and will always fail. +func Equal(t *testing.T, expected, actual interface{}, msgAndArgs ...interface{}) bool { + expectRaw, err := json.Marshal(expected) + if err != nil { + return false + } + actualRaw, err := json.Marshal(actual) + if err != nil { + return false + } + + if !bytes.Equal(expectRaw, actualRaw) { + return assert.Fail(t, fmt.Sprintf("Not equal: \n"+ + "expected: %s\n"+ + "actual : %s", string(expectRaw), string(actualRaw)), msgAndArgs...) + } + return true +} diff --git a/pkg/util/ulimit/ulimit.go b/pkg/util/ulimit/ulimit.go new file mode 100644 index 0000000000..6206eb2ced --- /dev/null +++ b/pkg/util/ulimit/ulimit.go @@ -0,0 +1,123 @@ +package ulimit + +// from go-ipfs + +import ( + "fmt" + "os" + "strconv" + "syscall" + + logging "github.com/ipfs/go-log/v2" +) + +var log = logging.Logger("ulimit") + +var ( + supportsFDManagement = false + + // getlimit returns the soft and hard limits of file descriptors counts + getLimit func() (uint64, uint64, error) + // set limit sets the soft and hard limits of file descriptors counts + setLimit func(uint64, uint64) error +) + +// minimum file descriptor limit before we complain +const minFds = 2048 + +// default max file descriptor limit. +const maxFds = 16 << 10 + +// userMaxFDs returns the value of LOTUS_FD_MAX +func userMaxFDs() uint64 { + // check if the LOTUS_FD_MAX is set up and if it does + // not have a valid fds number notify the user + val := os.Getenv("LOTUS_FD_MAX") + if val == "" { + val = os.Getenv("IPFS_FD_MAX") + } + if val == "" { + val = os.Getenv("VENUS_FD_MAX") + } + if val != "" { + fds, err := strconv.ParseUint(val, 10, 64) + if err != nil { + log.Errorf("bad value for LOTUS_FD_MAX: %s", err) + return 0 + } + return fds + } + return 0 +} + +// ManageFdLimit raise the current max file descriptor count +// of the process based on the LOTUS_FD_MAX value +func ManageFdLimit() (changed bool, newLimit uint64, err error) { + if !supportsFDManagement { + return false, 0, nil + } + + targetLimit := uint64(maxFds) + userLimit := userMaxFDs() + if userLimit > 0 { + targetLimit = userLimit + } + + soft, hard, err := getLimit() + if err != nil { + return false, 0, err + } + + if targetLimit <= soft { + return false, 0, nil + } + + // the soft limit is the value that the kernel enforces for the + // corresponding resource + // the hard limit acts as a ceiling for the soft limit + // an unprivileged process may only set it's soft limit to a + // alue in the range from 0 up to the hard limit + err = setLimit(targetLimit, targetLimit) + switch err { + case nil: + newLimit = targetLimit + case syscall.EPERM: + // lower limit if necessary. + if targetLimit > hard { + targetLimit = hard + } + + // the process does not have permission so we should only + // set the soft value + err = setLimit(targetLimit, hard) + if err != nil { + err = fmt.Errorf("error setting ulimit wihout hard limit: %s", err) + break + } + newLimit = targetLimit + + // Warn on lowered limit. + + if newLimit < userLimit { + err = fmt.Errorf( + "failed to raise ulimit to LOTUS_FD_MAX (%d): set to %d", + userLimit, + newLimit, + ) + break + } + + if userLimit == 0 && newLimit < minFds { + err = fmt.Errorf( + "failed to raise ulimit to minimum %d: set to %d", + minFds, + newLimit, + ) + break + } + default: + err = fmt.Errorf("error setting: ulimit: %s", err) + } + + return newLimit > 0, newLimit, err +} diff --git a/pkg/util/ulimit/ulimit_freebsd.go b/pkg/util/ulimit/ulimit_freebsd.go new file mode 100644 index 0000000000..7e50436f3d --- /dev/null +++ b/pkg/util/ulimit/ulimit_freebsd.go @@ -0,0 +1,36 @@ +// +build freebsd + +package ulimit + +import ( + "errors" + "math" + + unix "golang.org/x/sys/unix" +) + +func init() { + supportsFDManagement = true + getLimit = freebsdGetLimit + setLimit = freebsdSetLimit +} + +func freebsdGetLimit() (uint64, uint64, error) { + rlimit := unix.Rlimit{} + err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit) + if (rlimit.Cur < 0) || (rlimit.Max < 0) { + return 0, 0, errors.New("invalid rlimits") + } + return uint64(rlimit.Cur), uint64(rlimit.Max), err +} + +func freebsdSetLimit(soft uint64, max uint64) error { + if (soft > math.MaxInt64) || (max > math.MaxInt64) { + return errors.New("invalid rlimits") + } + rlimit := unix.Rlimit{ + Cur: int64(soft), + Max: int64(max), + } + return unix.Setrlimit(unix.RLIMIT_NOFILE, &rlimit) +} diff --git a/pkg/util/ulimit/ulimit_test.go b/pkg/util/ulimit/ulimit_test.go new file mode 100644 index 0000000000..ae203729f2 --- /dev/null +++ b/pkg/util/ulimit/ulimit_test.go @@ -0,0 +1,88 @@ +// +build !windows + +package ulimit + +import ( + "fmt" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "os" + "strings" + "syscall" + "testing" +) + +func TestManageFdLimit(t *testing.T) { + tf.UnitTest(t) + t.Log("Testing file descriptor count") + if _, _, err := ManageFdLimit(); err != nil { + t.Errorf("Cannot manage file descriptors") + } + + if maxFds != uint64(16<<10) { + t.Errorf("Maximum file descriptors default value changed") + } +} + +func TestManageInvalidNFds(t *testing.T) { + tf.UnitTest(t) + t.Logf("Testing file descriptor invalidity") + var err error + if err = os.Unsetenv("IPFS_FD_MAX"); err != nil { + t.Fatal("Cannot unset the IPFS_FD_MAX env variable") + } + + rlimit := syscall.Rlimit{} + if err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlimit); err != nil { + t.Fatal("Cannot get the file descriptor count") + } + + value := rlimit.Max + rlimit.Cur + if err = os.Setenv("IPFS_FD_MAX", fmt.Sprintf("%d", value)); err != nil { + t.Fatal("Cannot set the IPFS_FD_MAX env variable") + } + + t.Logf("setting ulimit to %d, max %d, cur %d", value, rlimit.Max, rlimit.Cur) + + if changed, new, err := ManageFdLimit(); err == nil { + t.Errorf("ManageFdLimit should return an error: changed %t, new: %d", changed, new) + } else if err != nil { + flag := strings.Contains(err.Error(), + "failed to raise ulimit to LOTUS_FD_MAX") + if !flag { + t.Error("ManageFdLimit returned unexpected error", err) + } + } + + // unset all previous operations + if err = os.Unsetenv("IPFS_FD_MAX"); err != nil { + t.Fatal("Cannot unset the IPFS_FD_MAX env variable") + } +} + +func TestManageFdLimitWithEnvSet(t *testing.T) { + tf.UnitTest(t) + t.Logf("Testing file descriptor manager with IPFS_FD_MAX set") + var err error + if err = os.Unsetenv("IPFS_FD_MAX"); err != nil { + t.Fatal("Cannot unset the IPFS_FD_MAX env variable") + } + + rlimit := syscall.Rlimit{} + if err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlimit); err != nil { + t.Fatal("Cannot get the file descriptor count") + } + + value := rlimit.Max - rlimit.Cur + 1 + if err = os.Setenv("IPFS_FD_MAX", fmt.Sprintf("%d", value)); err != nil { + t.Fatal("Cannot set the IPFS_FD_MAX env variable") + } + + if _, _, err = ManageFdLimit(); err != nil { + t.Errorf("Cannot manage file descriptor count") + } + + // unset all previous operations + if err = os.Unsetenv("IPFS_FD_MAX"); err != nil { + t.Fatal("Cannot unset the IPFS_FD_MAX env variable") + } +} diff --git a/pkg/util/ulimit/ulimit_unix.go b/pkg/util/ulimit/ulimit_unix.go new file mode 100644 index 0000000000..a351236dcb --- /dev/null +++ b/pkg/util/ulimit/ulimit_unix.go @@ -0,0 +1,27 @@ +// +build darwin linux netbsd openbsd + +package ulimit + +import ( + unix "golang.org/x/sys/unix" +) + +func init() { + supportsFDManagement = true + getLimit = unixGetLimit + setLimit = unixSetLimit +} + +func unixGetLimit() (uint64, uint64, error) { + rlimit := unix.Rlimit{} + err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit) + return rlimit.Cur, rlimit.Max, err +} + +func unixSetLimit(soft uint64, max uint64) error { + rlimit := unix.Rlimit{ + Cur: soft, + Max: max, + } + return unix.Setrlimit(unix.RLIMIT_NOFILE, &rlimit) +} diff --git a/pkg/vm/dispatch/cbor_gen.go b/pkg/vm/dispatch/cbor_gen.go new file mode 100644 index 0000000000..9cf6fae285 --- /dev/null +++ b/pkg/vm/dispatch/cbor_gen.go @@ -0,0 +1,75 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package dispatch + +import ( + "fmt" + "io" + "sort" + + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = sort.Sort + +var lengthBufSimpleParams = []byte{129} + +func (t *SimpleParams) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufSimpleParams); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Name (string) (string) + if len(t.Name) > cbg.MaxLength { + return xerrors.Errorf("Value in field t.Name was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len(t.Name))); err != nil { + return err + } + if _, err := io.WriteString(w, string(t.Name)); err != nil { + return err + } + return nil +} + +func (t *SimpleParams) UnmarshalCBOR(r io.Reader) error { + *t = SimpleParams{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 1 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Name (string) (string) + + { + sval, err := cbg.ReadStringBuf(br, scratch) + if err != nil { + return err + } + + t.Name = string(sval) + } + return nil +} diff --git a/pkg/vm/dispatch/dispatch.go b/pkg/vm/dispatch/dispatch.go new file mode 100644 index 0000000000..d9a6a6f627 --- /dev/null +++ b/pkg/vm/dispatch/dispatch.go @@ -0,0 +1,172 @@ +package dispatch + +import ( + "bytes" + "fmt" + "reflect" + + "github.com/filecoin-project/go-state-types/exitcode" + "github.com/filecoin-project/go-state-types/network" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" +) + +type SimpleParams struct { + Name string +} + +// Actor is the interface all actors have to implement. +type Actor interface { + // Exports has a list of method available on the actor. + Exports() []interface{} + // Code returns the code ID for this actor. + Code() cid.Cid + + // State returns a new State object for this actor. This can be used to + // decode the actor's state. + State() cbor.Er +} + +// Dispatcher allows for dynamic method dispatching on an actor. +type Dispatcher interface { + // Dispatch will call the given method on the actor and pass the arguments. + // + // - The `ctx` argument will be coerced to the type the method expects in its first argument. + // - If arg1 is `[]byte`, it will attempt to decode the value based on second argument in the target method. + Dispatch(method abi.MethodNum, nvk network.Version, ctx interface{}, arg1 interface{}) ([]byte, *ExcuteError) + // Signature is a helper function that returns the signature for a given method. + // + // Note: This is intended to be used by tests and tools. + Signature(method abi.MethodNum) (MethodSignature, *ExcuteError) +} + +type actorDispatcher struct { + code cid.Cid + actor Actor +} + +type method interface { + Call(in []reflect.Value) []reflect.Value + Type() reflect.Type +} + +var _ Dispatcher = (*actorDispatcher)(nil) + +// Dispatch implements `Dispatcher`. +func (d *actorDispatcher) Dispatch(methodNum abi.MethodNum, nvk network.Version, ctx interface{}, arg1 interface{}) ([]byte, *ExcuteError) { + // get method signature + m, err := d.signature(methodNum) + if err != nil { + return []byte{}, err + } + + // build args to pass to the method + args := []reflect.Value{ + // the ctx will be automatically coerced + reflect.ValueOf(ctx), + } + //err code + ec := exitcode.ErrSerialization + if nvk < network.Version7 { + ec = 1 + } + + parserByte := func(raw []byte) *ExcuteError { + obj, err := m.ArgInterface(raw) + if err != nil { + return NewExcuteError(ec, "fail to decode params") + } + args = append(args, reflect.ValueOf(obj)) + return nil + } + + switch t := arg1.(type) { + case nil: + args = append(args, m.ArgNil()) + case []byte: + err := parserByte(t) + if err != nil { + return []byte{}, err + } + case cbor.Marshaler: + buf := new(bytes.Buffer) + if err := t.MarshalCBOR(buf); err != nil { + return []byte{}, NewExcuteError(ec, fmt.Sprintf("fail to marshal argument %v", err)) + } + err := parserByte(buf.Bytes()) + if err != nil { + return []byte{}, err + } + default: + args = append(args, reflect.ValueOf(arg1)) + } + + // invoke the method + out := m.method.Call(args) + + // method returns unit + // Note: we need to check for `IsNill()` here because Go doesnt work if you do `== nil` on the interface + if len(out) == 0 || (out[0].Kind() != reflect.Struct && out[0].IsNil()) { + return nil, nil + } + + switch ret := out[0].Interface().(type) { + case []byte: + return ret, nil + case *abi.EmptyValue: //todo remove this code abi.EmptyValue is cbor.Marshaler + return []byte{}, nil + case cbor.Marshaler: + buf := new(bytes.Buffer) + if err := ret.MarshalCBOR(buf); err != nil { + return []byte{}, NewExcuteError(exitcode.SysErrSenderStateInvalid, "failed to marshal response to cbor err:%v", err) + } + return buf.Bytes(), nil + case nil: + return []byte{}, nil + default: + return []byte{}, NewExcuteError(exitcode.SysErrInvalidMethod, "could not determine type for response from call") + } +} + +func (d *actorDispatcher) signature(methodID abi.MethodNum) (*methodSignature, *ExcuteError) { + exports := d.actor.Exports() + + // get method entry + methodIdx := (uint64)(methodID) + if len(exports) <= (int)(methodIdx) { + return nil, NewExcuteError(exitcode.SysErrInvalidMethod, "Method undefined. method: %d, code: %s", methodID, d.code) + } + entry := exports[methodIdx] + if entry == nil { + return nil, NewExcuteError(exitcode.SysErrInvalidMethod, "Method undefined. method: %d, code: %s", methodID, d.code) + } + + ventry := reflect.ValueOf(entry) + return &methodSignature{method: ventry}, nil +} + +// Signature implements `Dispatcher`. +func (d *actorDispatcher) Signature(methodNum abi.MethodNum) (MethodSignature, *ExcuteError) { + return d.signature(methodNum) +} + +//ExcuteError error in vm excute +type ExcuteError struct { + code exitcode.ExitCode + msg string +} + +func NewExcuteError(code exitcode.ExitCode, msg string, args ...interface{}) *ExcuteError { + return &ExcuteError{code: code, msg: fmt.Sprint(msg, args)} +} + +func (err *ExcuteError) ExitCode() exitcode.ExitCode { + return err.code +} + +func (err *ExcuteError) Error() string { + return err.msg + +} diff --git a/pkg/vm/dispatch/loader.go b/pkg/vm/dispatch/loader.go new file mode 100644 index 0000000000..5014f2e517 --- /dev/null +++ b/pkg/vm/dispatch/loader.go @@ -0,0 +1,101 @@ +package dispatch + +import ( + "github.com/filecoin-project/go-state-types/exitcode" + rtt "github.com/filecoin-project/go-state-types/rt" + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + vmr "github.com/filecoin-project/venus/pkg/vm/runtime" + "github.com/filecoin-project/venus/venus-shared/actors" +) + +// CodeLoader allows you to load an actor's code based on its id an epoch. +type CodeLoader struct { + actors map[cid.Cid]ActorInfo +} + +//ActorInfo vm contract actor +type ActorInfo struct { + vmActor rtt.VMActor + // TODO: consider making this a network version range? + predicate ActorPredicate +} + +// GetActorImpl returns executable code for an actor by code cid at a specific network version +func (cl CodeLoader) GetActorImpl(code cid.Cid, rt vmr.Runtime) (Dispatcher, *ExcuteError) { + //todo version check + actor, ok := cl.actors[code] + if !ok { + return nil, NewExcuteError(exitcode.SysErrorIllegalActor, "Actor code not found. code: %s", code) + } + if err := actor.predicate(rt, actor.vmActor); err != nil { + return nil, NewExcuteError(exitcode.SysErrorIllegalActor, "unsupport actor. code: %s", code) + } + + return &actorDispatcher{code: code, actor: actor.vmActor}, nil +} + +// GetActorImpl returns executable code for an actor by code cid at a specific protocol version +func (cl CodeLoader) GetUnsafeActorImpl(code cid.Cid) (Dispatcher, error) { + //todo version check + actor, ok := cl.actors[code] + if !ok { + return nil, xerrors.Errorf("unable to get actorv for code %s", code) + } + return &actorDispatcher{code: code, actor: actor.vmActor}, nil +} + +// CodeLoaderBuilder helps you build a CodeLoader. +type CodeLoaderBuilder struct { + actors map[cid.Cid]ActorInfo +} + +// NewBuilder creates a builder to generate a builtin.Actor data structure +func NewBuilder() *CodeLoaderBuilder { + return &CodeLoaderBuilder{actors: map[cid.Cid]ActorInfo{}} +} + +// Add lets you add an actor dispatch table for a given version. +func (b *CodeLoaderBuilder) Add(predict ActorPredicate, actor Actor) *CodeLoaderBuilder { + if predict == nil { + predict = func(vmr.Runtime, rtt.VMActor) error { return nil } + } + + b.actors[actor.Code()] = ActorInfo{ + vmActor: actor, + predicate: predict, + } + return b +} + +// Add lets you add an actor dispatch table for a given version. +func (b *CodeLoaderBuilder) AddMany(predict ActorPredicate, actors ...rt5.VMActor) *CodeLoaderBuilder { + for _, actor := range actors { + b.Add(predict, actor) + } + return b +} + +// Build builds the code loader. +func (b *CodeLoaderBuilder) Build() CodeLoader { + return CodeLoader{actors: b.actors} +} + +// An ActorPredicate returns an error if the given actor is not valid for the given runtime environment (e.g., chain height, version, etc.). +type ActorPredicate func(vmr.Runtime, rtt.VMActor) error + +//ActorsVersionPredicate get actor predicate base on actor version and network version +func ActorsVersionPredicate(ver actors.Version) ActorPredicate { + return func(rt vmr.Runtime, v rtt.VMActor) error { + nver, err := actors.VersionForNetwork(rt.NtwkVersion()) + if err != nil { + return xerrors.Errorf("version for network %w", err) + } + if nver != ver { + return xerrors.Errorf("actor %s is a version %d actor; chain only supports actor version %d at height %d", v.Code(), ver, nver, rt.CurrentEpoch()) + } + return nil + } +} diff --git a/pkg/vm/dispatch/signature.go b/pkg/vm/dispatch/signature.go new file mode 100644 index 0000000000..252e0bdf6b --- /dev/null +++ b/pkg/vm/dispatch/signature.go @@ -0,0 +1,45 @@ +package dispatch + +import ( + "bytes" + "fmt" + cbg "github.com/whyrusleeping/cbor-gen" + "reflect" +) + +// MethodSignature wraps a specific method and allows you to encode/decodes input/output bytes into concrete types. +type MethodSignature interface { + // ArgNil returns a nil interface for the typed argument expected by the actor method. + ArgNil() reflect.Value + // ArgInterface returns the typed argument expected by the actor method. + ArgInterface(argBytes []byte) (interface{}, error) +} + +type methodSignature struct { + method method +} + +var _ MethodSignature = (*methodSignature)(nil) + +func (ms *methodSignature) ArgNil() reflect.Value { + t := ms.method.Type().In(1) + v := reflect.New(t) + return v.Elem() +} + +func (ms *methodSignature) ArgInterface(argBytes []byte) (interface{}, error) { + // decode arg1 (this is the payload for the actor method) + t := ms.method.Type().In(1) + v := reflect.New(t.Elem()) + obj := v.Interface() + + if val, ok := obj.(cbg.CBORUnmarshaler); ok { + buf := bytes.NewReader(argBytes) + if err := val.UnmarshalCBOR(buf); err != nil { + return nil, err + } + return val, nil + } + return nil, fmt.Errorf("type %T does not implement UnmarshalCBOR", obj) + +} diff --git a/pkg/vm/dispatch/signature_test.go b/pkg/vm/dispatch/signature_test.go new file mode 100644 index 0000000000..df1185ca34 --- /dev/null +++ b/pkg/vm/dispatch/signature_test.go @@ -0,0 +1,58 @@ +package dispatch + +import ( + "bytes" + "reflect" + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/stretchr/testify/assert" +) + +type fakeActor struct{} + +type SimpleReturn struct { + someValue uint64 +} + +func (*fakeActor) pointerParam(ctx interface{}, params *SimpleParams) SimpleReturn { + return SimpleReturn{someValue: 3} +} + +func TestArgInterface(t *testing.T) { + tf.UnitTest(t) + + fa := fakeActor{} + + params := SimpleParams{Name: "tester"} + setup := func(method interface{}) (methodSignature, []byte) { + s := methodSignature{method: reflect.ValueOf(method)} + + buf := new(bytes.Buffer) + err := params.MarshalCBOR(buf) + assert.NoError(t, err) + + return s, buf.Bytes() + } + + assertArgInterface := func(s methodSignature, encodedParams []byte) interface{} { + ret, err := s.ArgInterface(encodedParams) + assert.NoError(t, err) + assert.NotNil(t, ret) + return ret + } + + t.Run("pointerParam", func(t *testing.T) { + s, encodedParams := setup(fa.pointerParam) + + ret := assertArgInterface(s, encodedParams) + + v, ok := ret.(*SimpleParams) + assert.True(t, ok) + assert.Equal(t, params.Name, v.Name) + }) + + t.Run("noParams", func(t *testing.T) { + // Dragons: not supported, must panic + }) +} diff --git a/pkg/vm/gas/burn.go b/pkg/vm/gas/burn.go new file mode 100644 index 0000000000..321481c4c5 --- /dev/null +++ b/pkg/vm/gas/burn.go @@ -0,0 +1,109 @@ +package gas + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" +) + +const ( + gasOveruseNum = 11 + gasOveruseDenom = 10 +) + +//GasOutputs detail of gas after message executed +type GasOutputs struct { //nolint + BaseFeeBurn abi.TokenAmount + OverEstimationBurn abi.TokenAmount + + MinerPenalty abi.TokenAmount + MinerTip abi.TokenAmount + Refund abi.TokenAmount + + GasRefund int64 + GasBurned int64 +} + +// ZeroGasOutputs returns a logically zeroed GasOutputs. +func ZeroGasOutputs() GasOutputs { + return GasOutputs{ + BaseFeeBurn: big.Zero(), + OverEstimationBurn: big.Zero(), + MinerPenalty: big.Zero(), + MinerTip: big.Zero(), + Refund: big.Zero(), + } +} + +// ComputeGasOverestimationBurn computes amount of gas to be refunded and amount of gas to be burned +// Result is (refund, burn) +func ComputeGasOverestimationBurn(gasUsed, gasLimit int64) (int64, int64) { + if gasUsed == 0 { + return 0, gasLimit + } + + // over = gasLimit/GasUsed - 1 - 0.1 + // over = min(over, 1) + // gasToBurn = (gasLimit - GasUsed) * over + + // so to factor out division from `over` + // over*GasUsed = min(gasLimit - (11*GasUsed)/10, GasUsed) + // gasToBurn = ((gasLimit - GasUsed)*over*GasUsed) / GasUsed + over := gasLimit - (gasOveruseNum*gasUsed)/gasOveruseDenom + if over < 0 { + return gasLimit - gasUsed, 0 + } + + // if we want sharper scaling it goes here: + // over *= 2 + + if over > gasUsed { + over = gasUsed + } + + // needs bigint, as it overflows in pathological case gasLimit > 2^32 GasUsed = gasLimit / 2 + gasToBurn := big.NewInt(gasLimit - gasUsed) + gasToBurn = big.Mul(gasToBurn, big.NewInt(over)) + gasToBurn = big.Div(gasToBurn, big.NewInt(gasUsed)) + + return gasLimit - gasUsed - gasToBurn.Int64(), gasToBurn.Int64() +} + +//ComputeGasOutputs compute gas outputs base on message gas parameters and gasUsed after executed +func ComputeGasOutputs(gasUsed, gasLimit int64, baseFee, feeCap, gasPremium abi.TokenAmount, chargeNetworkFee bool) GasOutputs { + gasUsedBig := big.NewInt(gasUsed) + out := ZeroGasOutputs() + + baseFeeToPay := baseFee + if baseFee.Cmp(feeCap.Int) > 0 { + baseFeeToPay = feeCap + out.MinerPenalty = big.Mul(big.Sub(baseFee, feeCap), gasUsedBig) + } + + // If chargeNetworkFee is disabled, just skip computing the BaseFeeBurn. However, + // we charge all the other fees regardless. + if chargeNetworkFee { + out.BaseFeeBurn = big.Mul(baseFeeToPay, gasUsedBig) + } + + minerTip := gasPremium + if big.Cmp(big.Add(baseFeeToPay, minerTip), feeCap) > 0 { + minerTip = big.Sub(feeCap, baseFeeToPay) + } + out.MinerTip = big.Mul(minerTip, big.NewInt(gasLimit)) + + out.GasRefund, out.GasBurned = ComputeGasOverestimationBurn(gasUsed, gasLimit) + + if out.GasBurned != 0 { + gasBurnedBig := big.NewInt(out.GasBurned) + out.OverEstimationBurn = big.Mul(baseFeeToPay, gasBurnedBig) + minerPenalty := big.Mul(big.Sub(baseFee, baseFeeToPay), gasBurnedBig) + out.MinerPenalty = big.Add(out.MinerPenalty, minerPenalty) + } + + requiredFunds := big.Mul(big.NewInt(gasLimit), feeCap) + refund := big.Sub(requiredFunds, out.BaseFeeBurn) + refund = big.Sub(refund, out.MinerTip) + refund = big.Sub(refund, out.OverEstimationBurn) + out.Refund = refund + return out +} diff --git a/pkg/vm/gas/gas_tracker.go b/pkg/vm/gas/gas_tracker.go new file mode 100644 index 0000000000..155848d383 --- /dev/null +++ b/pkg/vm/gas/gas_tracker.go @@ -0,0 +1,99 @@ +package gas + +import ( + "fmt" + "os" + "time" + + "github.com/filecoin-project/go-state-types/exitcode" + + "github.com/filecoin-project/venus/pkg/vm/runtime" + types "github.com/filecoin-project/venus/venus-shared/stmgr" +) + +// GasTracker maintains the stateView of gas usage throughout the execution of a message. +type GasTracker struct { //nolint + GasAvailable int64 + GasUsed int64 + + ExecutionTrace types.ExecutionTrace + NumActorsCreated uint64 //nolint + AllowInternal bool //nolint + CallerValidated bool //nolint + LastGasChargeTime time.Time //nolint + LastGasCharge *types.GasTrace +} + +// NewGasTracker initializes a new empty gas tracker +func NewGasTracker(limit int64) *GasTracker { + return &GasTracker{ + GasUsed: 0, + GasAvailable: limit, + } +} + +// Charge will add the gas charge To the current Method gas context. +// +// WARNING: this Method will panic if there is no sufficient gas left. +func (t *GasTracker) Charge(gas GasCharge, msg string, args ...interface{}) { + if ok := t.TryCharge(gas); !ok { + fmsg := fmt.Sprintf(msg, args...) + runtime.Abortf(exitcode.SysErrOutOfGas, "gas limit %d exceeded with charge of %d: %s", t.GasAvailable, gas.Total(), fmsg) + } +} + +// EnableGasTracing, if true, outputs gas tracing in execution traces. +var EnableGasTracing = os.Getenv("VENUS_VM_ENABLE_GAS_TRACING_VERY_SLOW") == "1" + +// TryCharge charges `amount` or `RemainingGas()``, whichever is smaller. +// +// Returns `True` if the there was enough gas To pay for `amount`. +func (t *GasTracker) TryCharge(gasCharge GasCharge) bool { + toUse := gasCharge.Total() + //code for https://github.com/filecoin-project/venus/issues/4610 + if EnableGasTracing { + var callers [10]uintptr + cout := 0 //gruntime.Callers(2+skip, callers[:]) + + now := time.Now() + if t.LastGasCharge != nil { + t.LastGasCharge.TimeTaken = now.Sub(t.LastGasChargeTime) + } + + gasTrace := types.GasTrace{ + Name: gasCharge.Name, + Extra: gasCharge.Extra, + + TotalGas: toUse, + ComputeGas: gasCharge.ComputeGas, + StorageGas: gasCharge.StorageGas, + + //TotalVirtualGas: gasCharge.VirtualCompute*GasComputeMulti + gasCharge.VirtualStorage*GasStorageMulti, + TotalVirtualGas: gasCharge.VirtualCompute + gasCharge.VirtualStorage, + VirtualComputeGas: gasCharge.VirtualCompute, + VirtualStorageGas: gasCharge.VirtualStorage, + + Callers: callers[:cout], + } + + if gasTrace.VirtualStorageGas == 0 { + gasTrace.VirtualStorageGas = gasTrace.StorageGas + } + if gasTrace.VirtualComputeGas == 0 { + gasTrace.VirtualComputeGas = gasTrace.ComputeGas + } + + t.ExecutionTrace.GasCharges = append(t.ExecutionTrace.GasCharges, &gasTrace) + t.LastGasChargeTime = now + t.LastGasCharge = &gasTrace + } + + // overflow safe + if t.GasUsed > t.GasAvailable-toUse { + t.GasUsed = t.GasAvailable + //return aerrors.Newf(exitcode.SysErrOutOfGas, "not enough gasCharge: used=%d, available=%d", t.GasUsed, t.GasAvailable) + return false + } + t.GasUsed += toUse + return true +} diff --git a/pkg/vm/gas/gascost.go b/pkg/vm/gas/gascost.go new file mode 100644 index 0000000000..b8f85f3ba9 --- /dev/null +++ b/pkg/vm/gas/gascost.go @@ -0,0 +1,238 @@ +package gas + +import ( + "fmt" + + "github.com/filecoin-project/go-state-types/abi" + + proof7 "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" + + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/crypto" +) + +//GasCharge amount of gas consumed at one time +type GasCharge struct { //nolint + Name string + Extra interface{} + + ComputeGas int64 + StorageGas int64 + + VirtualCompute int64 + VirtualStorage int64 +} + +//Total return all gas in one time +func (g GasCharge) Total() int64 { + return g.ComputeGas + g.StorageGas +} + +func (g GasCharge) WithVirtual(compute, storage int64) GasCharge { + out := g + out.VirtualCompute = compute + out.VirtualStorage = storage + return out +} + +func (g GasCharge) WithExtra(extra interface{}) GasCharge { + out := g + out.Extra = extra + return out +} + +func NewGasCharge(name string, computeGas int64, storageGas int64) GasCharge { + return GasCharge{ + Name: name, + ComputeGas: computeGas, + StorageGas: storageGas, + } +} + +// Pricelist provides prices for operations in the VM. +// +// Note: this interface should be APPEND ONLY since last chain checkpoint +type Pricelist interface { + // OnChainMessage returns the gas used for storing a message of a given size in the chain. + OnChainMessage(msgSize int) GasCharge + // OnChainReturnValue returns the gas used for storing the response of a message in the chain. + OnChainReturnValue(dataSize int) GasCharge + + // OnMethodInvocation returns the gas used when invoking a method. + OnMethodInvocation(value abi.TokenAmount, methodNum abi.MethodNum) GasCharge + + // OnIpldGet returns the gas used for storing an object + OnIpldGet() GasCharge + // OnIpldPut returns the gas used for storing an object + OnIpldPut(dataSize int) GasCharge + + // OnCreateActor returns the gas used for creating an actor + OnCreateActor() GasCharge + // OnDeleteActor returns the gas used for deleting an actor + OnDeleteActor() GasCharge + + OnVerifySignature(sigType crypto.SigType, planTextSize int) (GasCharge, error) + OnHashing(dataSize int) GasCharge + OnComputeUnsealedSectorCid(proofType abi.RegisteredSealProof, pieces []abi.PieceInfo) GasCharge + OnVerifySeal(info proof7.SealVerifyInfo) GasCharge + OnVerifyAggregateSeals(aggregate proof7.AggregateSealVerifyProofAndInfos) GasCharge + OnVerifyReplicaUpdate(update proof7.ReplicaUpdateInfo) GasCharge + OnVerifyPost(info proof7.WindowPoStVerifyInfo) GasCharge + OnVerifyConsensusFault() GasCharge +} + +//PricesSchedule schedule gas prices for different network version +type PricesSchedule struct { + prices map[abi.ChainEpoch]Pricelist +} + +//NewPricesSchedule new gasprice schedule from forkParams parameters +func NewPricesSchedule(forkParams *config.ForkUpgradeConfig) *PricesSchedule { + var prices = map[abi.ChainEpoch]Pricelist{ + abi.ChainEpoch(0): &pricelistV0{ + computeGasMulti: 1, + storageGasMulti: 1000, + + onChainMessageComputeBase: 38863, + onChainMessageStorageBase: 36, + onChainMessageStoragePerByte: 1, + + onChainReturnValuePerByte: 1, + + sendBase: 29233, + sendTransferFunds: 27500, + sendTransferOnlyPremium: 159672, + sendInvokeMethod: -5377, + + ipldGetBase: 75242, + ipldPutBase: 84070, + ipldPutPerByte: 1, + + createActorCompute: 1108454, + createActorStorage: 36 + 40, + deleteActor: -(36 + 40), // -createActorStorage + + verifySignature: map[crypto.SigType]int64{ + crypto.SigTypeBLS: 16598605, + crypto.SigTypeSecp256k1: 1637292, + }, + + hashingBase: 31355, + computeUnsealedSectorCidBase: 98647, + verifySealBase: 2000, // TODO gas , it VerifySeal syscall is not used + verifyAggregateSealBase: 0, + verifyPostLookup: map[abi.RegisteredPoStProof]scalingCost{ + abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: { + flat: 123861062, + scale: 9226981, + }, + abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: { + flat: 748593537, + scale: 85639, + }, + abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: { + flat: 748593537, + scale: 85639, + }, + }, + verifyPostDiscount: true, + verifyConsensusFault: 495422, + }, + forkParams.UpgradeCalicoHeight: &pricelistV0{ + computeGasMulti: 1, + storageGasMulti: 1300, + + onChainMessageComputeBase: 38863, + onChainMessageStorageBase: 36, + onChainMessageStoragePerByte: 1, + + onChainReturnValuePerByte: 1, + + sendBase: 29233, + sendTransferFunds: 27500, + sendTransferOnlyPremium: 159672, + sendInvokeMethod: -5377, + + ipldGetBase: 114617, + ipldPutBase: 353640, + ipldPutPerByte: 1, + + createActorCompute: 1108454, + createActorStorage: 36 + 40, + deleteActor: -(36 + 40), // -createActorStorage + + verifySignature: map[crypto.SigType]int64{ + crypto.SigTypeBLS: 16598605, + crypto.SigTypeSecp256k1: 1637292, + }, + + hashingBase: 31355, + computeUnsealedSectorCidBase: 98647, + verifySealBase: 2000, // TODO gas, it VerifySeal syscall is not used + + verifyAggregateSealPer: map[abi.RegisteredSealProof]int64{ + abi.RegisteredSealProof_StackedDrg32GiBV1_1: 449900, + abi.RegisteredSealProof_StackedDrg64GiBV1_1: 359272, + }, + verifyAggregateSealSteps: map[abi.RegisteredSealProof]stepCost{ + abi.RegisteredSealProof_StackedDrg32GiBV1_1: { + {4, 103994170}, + {7, 112356810}, + {13, 122912610}, + {26, 137559930}, + {52, 162039100}, + {103, 210960780}, + {205, 318351180}, + {410, 528274980}, + }, + abi.RegisteredSealProof_StackedDrg64GiBV1_1: { + {4, 102581240}, + {7, 110803030}, + {13, 120803700}, + {26, 134642130}, + {52, 157357890}, + {103, 203017690}, + {205, 304253590}, + {410, 509880640}, + }, + }, + + verifyPostLookup: map[abi.RegisteredPoStProof]scalingCost{ + abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: { + flat: 117680921, + scale: 43780, + }, + abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: { + flat: 117680921, + scale: 43780, + }, + abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: { + flat: 117680921, + scale: 43780, + }, + }, + verifyPostDiscount: false, + verifyConsensusFault: 495422, + }, + } + return &PricesSchedule{prices: prices} +} + +// PricelistByEpoch finds the latest prices for the given epoch +func (schedule *PricesSchedule) PricelistByEpoch(epoch abi.ChainEpoch) Pricelist { + // since we are storing the prices as map or epoch to price + // we need to get the price with the highest epoch that is lower or equal to the `epoch` arg + bestEpoch := abi.ChainEpoch(0) + bestPrice := schedule.prices[bestEpoch] + for e, pl := range schedule.prices { + // if `e` happened after `bestEpoch` and `e` is earlier or equal to the target `epoch` + if e > bestEpoch && e <= epoch { + bestEpoch = e + bestPrice = pl + } + } + if bestPrice == nil { + panic(fmt.Sprintf("bad setup: no gas prices available for epoch %d", epoch)) + } + return bestPrice +} diff --git a/pkg/vm/gas/pricelistV0.go b/pkg/vm/gas/pricelistV0.go new file mode 100644 index 0000000000..a8acbb1cf9 --- /dev/null +++ b/pkg/vm/gas/pricelistV0.go @@ -0,0 +1,270 @@ +package gas + +import ( + "fmt" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + + proof7 "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin" +) + +type scalingCost struct { + flat int64 + scale int64 +} + +type stepCost []step + +type step struct { + start int64 + cost int64 +} + +func (sc stepCost) Lookup(x int64) int64 { + i := 0 + for ; i < len(sc); i++ { + if sc[i].start > x { + break + } + } + i-- // look at previous item + if i < 0 { + return 0 + } + + return sc[i].cost +} + +type pricelistV0 struct { + computeGasMulti int64 + storageGasMulti int64 + /////////////////////////////////////////////////////////////////////////// + // System operations + /////////////////////////////////////////////////////////////////////////// + + // Gas cost charged to the originator of an on-chain message (regardless of + // whether it succeeds or fails in application) is given by: + // OnChainMessageBase + len(serialized message)*OnChainMessagePerByte + // Together, these account for the cost of message propagation and validation, + // up to but excluding any actual processing by the VM. + // This is the cost a block producer burns when including an invalid message. + onChainMessageComputeBase int64 + onChainMessageStorageBase int64 + onChainMessageStoragePerByte int64 + + // Gas cost charged to the originator of a non-nil return value produced + // by an on-chain message is given by: + // len(return value)*OnChainReturnValuePerByte + onChainReturnValuePerByte int64 + + // Gas cost for any message send execution(including the top-level one + // initiated by an on-chain message). + // This accounts for the cost of loading sender and receiver actors and + // (for top-level messages) incrementing the sender's sequence number. + // Load and store of actor sub-state is charged separately. + sendBase int64 + + // Gas cost charged, in addition to SendBase, if a message send + // is accompanied by any nonzero currency amount. + // Accounts for writing receiver's new balance (the sender's state is + // already accounted for). + sendTransferFunds int64 + + // Gsa cost charged, in addition to SendBase, if message only transfers funds. + sendTransferOnlyPremium int64 + + // Gas cost charged, in addition to SendBase, if a message invokes + // a method on the receiver. + // Accounts for the cost of loading receiver code and method dispatch. + sendInvokeMethod int64 + + // Gas cost for any Get operation to the IPLD store + // in the runtime VM context. + ipldGetBase int64 + + // Gas cost (Base + len*PerByte) for any Put operation to the IPLD store + // in the runtime VM context. + // + // Note: these costs should be significantly higher than the costs for Get + // operations, since they reflect not only serialization/deserialization + // but also persistent storage of chain data. + ipldPutBase int64 + ipldPutPerByte int64 + + // Gas cost for creating a new actor (via InitActor's Exec method). + // + // Note: this costs assume that the extra will be partially or totally refunded while + // the base is covering for the put. + createActorCompute int64 + createActorStorage int64 + + // Gas cost for deleting an actor. + // + // Note: this partially refunds the create cost to incentivise the deletion of the actors. + deleteActor int64 + + verifySignature map[crypto.SigType]int64 + + hashingBase int64 + + computeUnsealedSectorCidBase int64 + verifySealBase int64 + verifyAggregateSealBase int64 + verifyAggregateSealPer map[abi.RegisteredSealProof]int64 + verifyAggregateSealSteps map[abi.RegisteredSealProof]stepCost + + verifyPostLookup map[abi.RegisteredPoStProof]scalingCost + verifyPostDiscount bool + verifyConsensusFault int64 +} + +var _ Pricelist = (*pricelistV0)(nil) + +// OnChainMessage returns the gas used for storing a message of a given size in the chain. +func (pl *pricelistV0) OnChainMessage(msgSize int) GasCharge { + return NewGasCharge("OnChainMessage", pl.onChainMessageComputeBase, + (pl.onChainMessageStorageBase+pl.onChainMessageStoragePerByte*int64(msgSize))*pl.storageGasMulti) +} + +// OnChainReturnValue returns the gas used for storing the response of a message in the chain. +func (pl *pricelistV0) OnChainReturnValue(dataSize int) GasCharge { + return NewGasCharge("OnChainReturnValue", 0, int64(dataSize)*pl.onChainReturnValuePerByte*pl.storageGasMulti) +} + +// OnMethodInvocation returns the gas used when invoking a method. +func (pl *pricelistV0) OnMethodInvocation(value abi.TokenAmount, methodNum abi.MethodNum) GasCharge { + ret := pl.sendBase + extra := "" + + if big.Cmp(value, abi.NewTokenAmount(0)) != 0 { + ret += pl.sendTransferFunds + if methodNum == builtin.MethodSend { + // transfer only + ret += pl.sendTransferOnlyPremium + } + extra += "t" + } + + if methodNum != builtin.MethodSend { + extra += "i" + // running actors is cheaper becase we hand over to actors + ret += pl.sendInvokeMethod + } + return NewGasCharge("OnMethodInvocation", ret, 0).WithExtra(extra) +} + +// OnIpldGet returns the gas used for storing an object +func (pl *pricelistV0) OnIpldGet() GasCharge { + return NewGasCharge("OnIpldGet", pl.ipldGetBase, 0).WithVirtual(114617, 0) +} + +// OnIpldPut returns the gas used for storing an object +func (pl *pricelistV0) OnIpldPut(dataSize int) GasCharge { + return NewGasCharge("OnIpldPut", pl.ipldPutBase, int64(dataSize)*pl.ipldPutPerByte*pl.storageGasMulti). + WithExtra(dataSize).WithVirtual(400000, int64(dataSize)*1300) +} + +// OnCreateActor returns the gas used for creating an actor +func (pl *pricelistV0) OnCreateActor() GasCharge { + return NewGasCharge("OnCreateActor", pl.createActorCompute, pl.createActorStorage*pl.storageGasMulti) +} + +// OnDeleteActor returns the gas used for deleting an actor +func (pl *pricelistV0) OnDeleteActor() GasCharge { + return NewGasCharge("OnDeleteActor", 0, pl.deleteActor*pl.storageGasMulti) +} + +// OnVerifySignature + +func (pl *pricelistV0) OnVerifySignature(sigType crypto.SigType, planTextSize int) (GasCharge, error) { + cost, ok := pl.verifySignature[sigType] + if !ok { + return GasCharge{}, fmt.Errorf("cost function for signature type %d not supported", sigType) + } + + sigName, _ := sigType.Name() + return NewGasCharge("OnVerifySignature", cost, 0). + WithExtra(map[string]interface{}{ + "type": sigName, + "size": planTextSize, + }), nil +} + +// OnHashing +func (pl *pricelistV0) OnHashing(dataSize int) GasCharge { + return NewGasCharge("OnHashing", pl.hashingBase, 0).WithExtra(dataSize) +} + +// OnComputeUnsealedSectorCid +func (pl *pricelistV0) OnComputeUnsealedSectorCid(proofType abi.RegisteredSealProof, pieces []abi.PieceInfo) GasCharge { + return NewGasCharge("OnComputeUnsealedSectorCid", pl.computeUnsealedSectorCidBase, 0) +} + +// OnVerifySeal +func (pl *pricelistV0) OnVerifySeal(info proof7.SealVerifyInfo) GasCharge { + // TODO: this needs more cost tunning, check with @lotus + // this is not used + return NewGasCharge("OnVerifySeal", pl.verifySealBase, 0) +} + +// OnVerifyAggregateSeals +func (pl *pricelistV0) OnVerifyAggregateSeals(aggregate proof7.AggregateSealVerifyProofAndInfos) GasCharge { + proofType := aggregate.SealProof + perProof, ok := pl.verifyAggregateSealPer[proofType] + if !ok { + perProof = pl.verifyAggregateSealPer[abi.RegisteredSealProof_StackedDrg32GiBV1_1] + } + + step, ok := pl.verifyAggregateSealSteps[proofType] + if !ok { + step = pl.verifyAggregateSealSteps[abi.RegisteredSealProof_StackedDrg32GiBV1_1] + } + num := int64(len(aggregate.Infos)) + return NewGasCharge("OnVerifyAggregateSeals", perProof*num+step.Lookup(num), 0) +} + +// OnVerifyReplicaUpdate +func (pl *pricelistV0) OnVerifyReplicaUpdate(update proof7.ReplicaUpdateInfo) GasCharge { + // TODO: do the thing + return GasCharge{} +} + +// OnVerifyPost +func (pl *pricelistV0) OnVerifyPost(info proof7.WindowPoStVerifyInfo) GasCharge { + sectorSize := "unknown" + var proofType abi.RegisteredPoStProof + + if len(info.Proofs) != 0 { + proofType = info.Proofs[0].PoStProof + ss, err := info.Proofs[0].PoStProof.SectorSize() + if err == nil { + sectorSize = ss.ShortString() + } + } + + cost, ok := pl.verifyPostLookup[proofType] + if !ok { + cost = pl.verifyPostLookup[abi.RegisteredPoStProof_StackedDrgWindow512MiBV1] + } + + gasUsed := cost.flat + int64(len(info.ChallengedSectors))*cost.scale + if pl.verifyPostDiscount { + gasUsed /= 2 // XXX: this is an artificial discount + } + + return NewGasCharge("OnVerifyPost", gasUsed, 0). + WithVirtual(117680921+43780*int64(len(info.ChallengedSectors)), 0). + WithExtra(map[string]interface{}{ + "type": sectorSize, + "size": len(info.ChallengedSectors), + }) +} + +// OnVerifyConsensusFault +func (pl *pricelistV0) OnVerifyConsensusFault() GasCharge { + return NewGasCharge("OnVerifyConsensusFault", pl.verifyConsensusFault, 0) +} diff --git a/pkg/vm/register/default.go b/pkg/vm/register/default.go new file mode 100644 index 0000000000..ed593f41bc --- /dev/null +++ b/pkg/vm/register/default.go @@ -0,0 +1,44 @@ +package register + +import ( + /* inline-gen template + {{range .actorVersions}} + exported{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/exported"{{end}} + /* inline-gen start */ + + exported0 "github.com/filecoin-project/specs-actors/actors/builtin/exported" + exported2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/exported" + exported3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/exported" + exported4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/exported" + exported5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/exported" + exported6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/exported" + exported7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/exported" + /* inline-gen end */ + + "github.com/filecoin-project/venus/pkg/vm/dispatch" + "github.com/filecoin-project/venus/venus-shared/actors" +) + +// DefaultActors is list of all actors that ship with Filecoin. +// They are indexed by their CID. +// Dragons: add the rest of the actors +var DefaultActorBuilder = dispatch.NewBuilder() +var DefaultActors dispatch.CodeLoader + +func init() { + /* inline-gen template + {{range .actorVersions}} + DefaultActorBuilder.AddMany(dispatch.ActorsVersionPredicate(actors.Version{{.}}), exported{{.}}.BuiltinActors()...){{end}} + /* inline-gen start */ + + DefaultActorBuilder.AddMany(dispatch.ActorsVersionPredicate(actors.Version0), exported0.BuiltinActors()...) + DefaultActorBuilder.AddMany(dispatch.ActorsVersionPredicate(actors.Version2), exported2.BuiltinActors()...) + DefaultActorBuilder.AddMany(dispatch.ActorsVersionPredicate(actors.Version3), exported3.BuiltinActors()...) + DefaultActorBuilder.AddMany(dispatch.ActorsVersionPredicate(actors.Version4), exported4.BuiltinActors()...) + DefaultActorBuilder.AddMany(dispatch.ActorsVersionPredicate(actors.Version5), exported5.BuiltinActors()...) + DefaultActorBuilder.AddMany(dispatch.ActorsVersionPredicate(actors.Version6), exported6.BuiltinActors()...) + DefaultActorBuilder.AddMany(dispatch.ActorsVersionPredicate(actors.Version7), exported7.BuiltinActors()...) + /* inline-gen end */ + + DefaultActors = DefaultActorBuilder.Build() +} diff --git a/internal/pkg/vm/internal/runtime/runtime.go b/pkg/vm/runtime/runtime.go similarity index 85% rename from internal/pkg/vm/internal/runtime/runtime.go rename to pkg/vm/runtime/runtime.go index 27cb3ecefc..de68bf48f7 100644 --- a/internal/pkg/vm/internal/runtime/runtime.go +++ b/pkg/vm/runtime/runtime.go @@ -4,17 +4,21 @@ import ( "fmt" "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/go-state-types/network" "github.com/ipfs/go-cid" - "github.com/filecoin-project/specs-actors/actors/abi" - specsruntime "github.com/filecoin-project/specs-actors/actors/runtime" - "github.com/filecoin-project/specs-actors/actors/runtime/exitcode" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/exitcode" + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" ) // Runtime has operations in the VM that are exposed to all actors. type Runtime interface { // CurrentEpoch is the current chain epoch. CurrentEpoch() abi.ChainEpoch + + NtwkVersion() network.Version } // InvocationContext is passed to the actors on each method call. @@ -24,17 +28,17 @@ type InvocationContext interface { // Store is the raw store for IPLD objects. // // Note: this is required for custom data structures. - Store() specsruntime.Store + Store() rt5.Store // Message contains information available to the actor about the executing message. - Message() specsruntime.Message + Message() rt5.Message // ValidateCaller validates the caller against a patter. // // All actor methods MUST call this method before returning. ValidateCaller(CallerPattern) // StateHandle handles access to the actor state. - State() specsruntime.StateHandle + State() rt5.StateHandle // Send allows actors to invoke methods on other actors - Send(toAddr address.Address, methodNum abi.MethodNum, params specsruntime.CBORMarshaler, value abi.TokenAmount) (specsruntime.SendReturn, exitcode.ExitCode) + Send(toAddr address.Address, methodNum abi.MethodNum, params cbor.Marshaler, value abi.TokenAmount, out cbor.Er) exitcode.ExitCode // Balance is the current balance on the current actors account. // // Note: the value received for this invocation is already reflected on the balance. diff --git a/pkg/vm/vm.go b/pkg/vm/vm.go new file mode 100644 index 0000000000..2de5c62a99 --- /dev/null +++ b/pkg/vm/vm.go @@ -0,0 +1,49 @@ +package vm + +import ( + "context" + + "github.com/filecoin-project/venus/pkg/vm/dispatch" + "github.com/filecoin-project/venus/pkg/vm/register" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" +) + +// Re-exports + +type VmOption = vmcontext.VmOption //nolint + +type Ret = vmcontext.Ret + +// Interpreter is the VM. +type Interpreter = vmcontext.VMInterpreter + +type SyscallsImpl = vmcontext.SyscallsImpl +type SyscallsStateView = vmcontext.SyscallsStateView + +type ExecCallBack = vmcontext.ExecCallBack +type VmMessage = vmcontext.VmMessage //nolint +type FakeSyscalls = vmcontext.FakeSyscalls +type ChainRandomness = vmcontext.HeadChainRandomness + +// NewVM creates a new VM interpreter. +func NewVM(ctx context.Context, option VmOption) (Interpreter, error) { + if option.ActorCodeLoader == nil { + option.ActorCodeLoader = &DefaultActors + } + + return vmcontext.NewVM(ctx, option.ActorCodeLoader, option) +} + +// DefaultActors is a code loader with the built-in actors that come with the system. +var DefaultActors = register.DefaultActors + +// ActorCodeLoader allows yo to load an actor's code based on its id an epoch. +type ActorCodeLoader = dispatch.CodeLoader + +// ActorMethodSignature wraps a specific method and allows you to encode/decodes input/output bytes into concrete types. +type ActorMethodSignature = dispatch.MethodSignature + +type ILookBack = vmcontext.ILookBack +type LookbackStateGetter = vmcontext.LookbackStateGetter + +//type LookbackStateGetterForTipset = vmcontext.LookbackStateGetterForTipset diff --git a/pkg/vm/vmcontext/actor_state_handle.go b/pkg/vm/vmcontext/actor_state_handle.go new file mode 100644 index 0000000000..997bb3a65f --- /dev/null +++ b/pkg/vm/vmcontext/actor_state_handle.go @@ -0,0 +1,83 @@ +package vmcontext + +import ( + "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/go-state-types/exitcode" + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" + "github.com/filecoin-project/venus/pkg/vm/runtime" + "github.com/ipfs/go-cid" +) + +type actorStateHandle struct { + ctx actorStateHandleContext + // validations is a list of validations that the vm will execute after the actor code finishes. + // + // Any validation failure will result in the execution getting aborted. + validations []validateFn + // used_objs holds the pointers To objs that have been used with this handle and their expected stateView cid. + usedObjs map[interface{}]cid.Cid +} + +// validateFn returns True if it's valid. +type validateFn = func() bool + +type actorStateHandleContext interface { + AllowSideEffects(bool) + Create(obj cbor.Marshaler) cid.Cid + Load(obj cbor.Unmarshaler) cid.Cid + Replace(expected cid.Cid, obj cbor.Marshaler) cid.Cid +} + +// NewActorStateHandle returns a new `ActorStateHandle` +// +// Note: just visible for testing. +func NewActorStateHandle(ctx actorStateHandleContext) rt5.StateHandle { + aux := newActorStateHandle(ctx) + return &aux +} + +func newActorStateHandle(ctx actorStateHandleContext) actorStateHandle { + return actorStateHandle{ + ctx: ctx, + validations: []validateFn{}, + usedObjs: map[interface{}]cid.Cid{}, + } +} + +var _ rt5.StateHandle = (*actorStateHandle)(nil) + +func (h *actorStateHandle) StateCreate(obj cbor.Marshaler) { + // Store the new stateView. + c := h.ctx.Create(obj) + // Store the expected CID of obj. + h.usedObjs[obj] = c +} + +// Readonly is the implementation of the ActorStateHandle interface. +func (h *actorStateHandle) StateReadonly(obj cbor.Unmarshaler) { + // Load stateView To obj. + c := h.ctx.Load(obj) + // Track the stateView and expected CID used by the caller. + h.usedObjs[obj] = c +} + +// Transaction is the implementation of the ActorStateHandle interface. +func (h *actorStateHandle) StateTransaction(obj cbor.Er, f func()) { + if obj == nil { + runtime.Abortf(exitcode.SysErrorIllegalActor, "Must not pass nil To Transaction()") + } + + // Load stateView To obj. + prior := h.ctx.Load(obj) + + // Call user code allowing mutation but not side-effects + h.ctx.AllowSideEffects(false) + f() + h.ctx.AllowSideEffects(true) + + // Store the new stateView + newCid := h.ctx.Replace(prior, obj) + + // Record the expected stateView of obj + h.usedObjs[obj] = newCid +} diff --git a/pkg/vm/vmcontext/actor_state_handle_test.go b/pkg/vm/vmcontext/actor_state_handle_test.go new file mode 100644 index 0000000000..0d8e6c469c --- /dev/null +++ b/pkg/vm/vmcontext/actor_state_handle_test.go @@ -0,0 +1,274 @@ +package vmcontext_test + +import ( + "fmt" + "io" + "testing" + + "github.com/filecoin-project/venus/pkg/util" + + "github.com/filecoin-project/go-state-types/cbor" + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/assert" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" +) + +type testActorStateHandleState struct { + FieldA string +} + +func (t *testActorStateHandleState) Clone(b interface{}) error { //nolint + newBoj := &testActorStateHandleState{} + newBoj.FieldA = t.FieldA + b = newBoj //nolint:staticcheck + return nil +} + +func (t *testActorStateHandleState) MarshalCBOR(w io.Writer) error { + if _, err := w.Write([]byte(t.FieldA)); err != nil { + return err + } + return nil +} + +func (t *testActorStateHandleState) UnmarshalCBOR(r io.Reader) error { + bs := make([]byte, 1024) + n, err := r.Read(bs) + if err != nil { + return err + } + t.FieldA = string(bs[:n]) + return nil +} + +func setup() testSetup { + initialstate := testActorStateHandleState{FieldA: "fakestate"} + + store := vmcontext.NewTestStorage(&initialstate) + initialhead, _ := util.MakeCid(&initialstate) + ctx := fakeActorStateHandleContext{ + head: initialhead, + store: store, + allowSideEffects: true, + } + h := vmcontext.NewActorStateHandle(&ctx) + + cleanup := func() {} + + return testSetup{ + initialstate: initialstate, + h: h, + cleanup: cleanup, + } +} + +func TestActorStateHandle(t *testing.T) { + tf.UnitTest(t) + + // this test case verifies that the `Validate` works when nothing was done with the stateView + t.Run("noop", func(t *testing.T) { + ts := setup() + defer ts.cleanup() + }) + + t.Run("readonly", func(t *testing.T) { + ts := setup() + defer ts.cleanup() + + var out testActorStateHandleState + ts.h.StateReadonly(&out) + + assert.Equal(t, out, ts.initialstate) + }) + + t.Run("readonly multiple times", func(t *testing.T) { + ts := setup() + defer ts.cleanup() + + var out testActorStateHandleState + ts.h.StateReadonly(&out) + ts.h.StateReadonly(&out) + + assert.Equal(t, out, ts.initialstate) + }) + + t.Run("readonly promotion", func(t *testing.T) { + ts := setup() + defer ts.cleanup() + + var out testActorStateHandleState + ts.h.StateReadonly(&out) + + ts.h.StateTransaction(&out, func() { + out.FieldA = "changed!" + }) + }) + + t.Run("transaction", func(t *testing.T) { + ts := setup() + defer ts.cleanup() + + var out testActorStateHandleState + expected := "new stateView" + + ts.h.StateTransaction(&out, func() { + // check stateView is not what we are going To use + assert.NotEqual(t, out.FieldA, expected) + out.FieldA = expected + }) + // check that it changed + assert.Equal(t, out.FieldA, expected) + + ts.h.StateReadonly(&out) + // really check by loading it again + assert.Equal(t, out.FieldA, expected) + }) + + t.Run("transaction but no mutation", func(t *testing.T) { + ts := setup() + defer ts.cleanup() + + var out testActorStateHandleState + + // should work, mutating is not compulsory + ts.h.StateTransaction(&out, func() {}) + + assert.Equal(t, out, ts.initialstate) + }) + + t.Run("transaction returning Value", func(t *testing.T) { + ts := setup() + defer ts.cleanup() + + var out testActorStateHandleState + + lastResult := "" + ts.h.StateTransaction(&out, func() { + lastResult = out.FieldA + }) + + assert.Equal(t, lastResult, ts.initialstate.FieldA) + }) + + t.Run("transaction double whammy", func(t *testing.T) { + ts := setup() + defer ts.cleanup() + + var out testActorStateHandleState + + lastResult := "" + ts.h.StateTransaction(&out, func() { + lastResult = "changed!" + out.FieldA = lastResult + }) + + ts.h.StateTransaction(&out, func() { + lastResult = "again!" + out.FieldA = lastResult + }) + + ts.h.StateReadonly(&out) + // really check by loading it again + assert.Equal(t, out.FieldA, lastResult) + }) +} + +func TestActorStateHandleNilState(t *testing.T) { + tf.UnitTest(t) + + setup := func() (rt5.StateHandle, func()) { + store := vmcontext.NewTestStorage(nil) + ctx := fakeActorStateHandleContext{ + store: store, + allowSideEffects: true, + } + + h := vmcontext.NewActorStateHandle(&ctx) + + cleanup := func() {} + + return h, cleanup + } + + t.Run("transaction on nil stateView", func(t *testing.T) { + h, cleanup := setup() + defer cleanup() + + var out testActorStateHandleState + h.StateTransaction(&out, func() {}) + }) + + t.Run("stateView initialized after transaction", func(t *testing.T) { + h, cleanup := setup() + defer cleanup() + + var out testActorStateHandleState + h.StateTransaction(&out, func() {}) + + h.StateReadonly(&out) // should not fail + }) + + t.Run("readonly nil pointer To stateView", func(t *testing.T) { + defer mustPanic(t) + + h, cleanup := setup() + defer cleanup() + + h.StateReadonly(nil) + }) + + t.Run("transaction nil pointer To stateView", func(t *testing.T) { + defer mustPanic(t) + + h, cleanup := setup() + defer cleanup() + + h.StateTransaction(nil, func() {}) + }) +} + +type fakeActorStateHandleContext struct { + store rt5.Store + head cid.Cid + allowSideEffects bool +} + +func (ctx *fakeActorStateHandleContext) AllowSideEffects(allow bool) { + ctx.allowSideEffects = allow +} + +func (ctx *fakeActorStateHandleContext) Create(obj cbor.Marshaler) cid.Cid { + ctx.head = ctx.store.StorePut(obj) + return ctx.head +} + +func (ctx *fakeActorStateHandleContext) Load(obj cbor.Unmarshaler) cid.Cid { + found := ctx.store.StoreGet(ctx.head, obj) + if !found { + panic("inconsistent stateView") + } + return ctx.head +} + +func (ctx *fakeActorStateHandleContext) Replace(expected cid.Cid, obj cbor.Marshaler) cid.Cid { + if !ctx.head.Equals(expected) { + panic(fmt.Errorf("unexpected prior stateView %s expected %s", ctx.head, expected)) + } + ctx.head = ctx.store.StorePut(obj) + return ctx.head +} + +type testSetup struct { + initialstate testActorStateHandleState + h rt5.StateHandle + cleanup func() +} + +func mustPanic(t *testing.T) { + if r := recover(); r == nil { + t.Fail() + } +} diff --git a/pkg/vm/vmcontext/actor_store.go b/pkg/vm/vmcontext/actor_store.go new file mode 100644 index 0000000000..9677f37aff --- /dev/null +++ b/pkg/vm/vmcontext/actor_store.go @@ -0,0 +1,80 @@ +package vmcontext + +import ( + "context" + "fmt" + "reflect" + + "github.com/filecoin-project/go-state-types/exitcode" + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" + "github.com/ipfs/go-cid" + cbornode "github.com/ipfs/go-ipld-cbor" + xerrors "github.com/pkg/errors" + + "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/venus/pkg/vm/gas" + "github.com/filecoin-project/venus/pkg/vm/runtime" +) + +// ActorStorage hides the storage methods From the actors and turns the errors into runtime panics. +type ActorStorage struct { + context context.Context + inner cbornode.IpldStore + pricelist gas.Pricelist + gasTank *gas.GasTracker +} + +func NewActorStorage(ctx context.Context, inner cbornode.IpldStore, gasTank *gas.GasTracker, pricelist gas.Pricelist) *ActorStorage { + return &ActorStorage{ + context: ctx, + inner: inner, + pricelist: pricelist, + gasTank: gasTank, + } +} + +// +// implement runtime.Store for ActorStorage +// + +var _ rt5.Store = (*ActorStorage)(nil) + +// Serialization technically belongs in the actor code, rather than inside the VM. +// The true VM storage interface is in terms of raw bytes and, when we have user-defined, +// serialization code will be directly in those contracts. +// Our present runtime interface is at a slightly higher level for convenience, but the exit code here is the +// actor, rather than system-level, error code. +const serializationErr = exitcode.ErrSerialization + +func (s *ActorStorage) StorePut(obj cbor.Marshaler) cid.Cid { + cid, err := s.inner.Put(s.context, obj) + if err != nil { + msg := fmt.Sprintf("failed To put object %s in store: %s", reflect.TypeOf(obj), err) + if xerrors.As(err, new(cbornode.SerializationError)) { + runtime.Abortf(serializationErr, msg) + } else { + panic(msg) + } + } + return cid +} + +type notFoundErr interface { + IsNotFound() bool +} + +func (s *ActorStorage) StoreGet(cid cid.Cid, obj cbor.Unmarshaler) bool { + //gas charge must check first + if err := s.inner.Get(s.context, cid, obj); err != nil { + msg := fmt.Sprintf("failed To get object %s %s From store: %s", reflect.TypeOf(obj), cid, err) + var nfe notFoundErr + if xerrors.As(err, &nfe) && nfe.IsNotFound() { + if xerrors.As(err, new(cbornode.SerializationError)) { + runtime.Abortf(serializationErr, msg) + } + return false + } + panic(msg) + } + return true +} diff --git a/pkg/vm/vmcontext/actor_store_test.go b/pkg/vm/vmcontext/actor_store_test.go new file mode 100644 index 0000000000..a3b4359520 --- /dev/null +++ b/pkg/vm/vmcontext/actor_store_test.go @@ -0,0 +1,101 @@ +package vmcontext_test + +import ( + "context" + "fmt" + "github.com/filecoin-project/venus/pkg/config" + cbor "github.com/ipfs/go-ipld-cbor" + "io" + "testing" + + cbor2 "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/go-state-types/exitcode" + "github.com/filecoin-project/venus/pkg/vm/gas" + vmr "github.com/filecoin-project/venus/pkg/vm/runtime" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + blockstore "github.com/ipfs/go-ipfs-blockstore" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + typegen "github.com/whyrusleeping/cbor-gen" +) + +func TestActorStore(t *testing.T) { + ctx := context.Background() + raw := cbor.NewCborStore(blockstore.NewBlockstore(datastore.NewMapDatastore())) + gasTank := gas.NewGasTracker(1e6) + priceSchedule := gas.NewPricesSchedule(config.DefaultForkUpgradeParam) + t.Run("abort on put serialization failure", func(t *testing.T) { + store := vmcontext.NewActorStorage(ctx, raw, gasTank, priceSchedule.PricelistByEpoch(0)) + _, thrown := tryPut(store, cannotCBOR{}) + abort, ok := thrown.(vmr.ExecutionPanic) + assert.NotNil(t, thrown) + assert.True(t, ok, "expected abort") + assert.Equal(t, exitcode.ErrSerialization, abort.Code()) + }) + + t.Run("abort on get serialization failure", func(t *testing.T) { + store := vmcontext.NewActorStorage(ctx, raw, gasTank, priceSchedule.PricelistByEpoch(0)) + v := typegen.CborInt(0) + + c, thrown := tryPut(store, &v) + assert.True(t, c.Defined()) + require.Nil(t, thrown) + + var v2 typegen.CborCid + thrown = tryGet(store, c, &v2) // Attempt decode into wrong type + assert.Contains(t, thrown.(string), "failed To get object *typegen.CborCid ") + }) + + t.Run("panic on put storage failure", func(t *testing.T) { + store := vmcontext.NewActorStorage(ctx, &brokenStorage{}, gasTank, priceSchedule.PricelistByEpoch(0)) + v := typegen.CborInt(0) + _, thrown := tryPut(store, &v) + _, ok := thrown.(vmr.ExecutionPanic) + assert.NotNil(t, thrown) + assert.False(t, ok, "expected non-abort panic") + }) + + t.Run("panic on get storage failure", func(t *testing.T) { + store := vmcontext.NewActorStorage(ctx, &brokenStorage{}, gasTank, priceSchedule.PricelistByEpoch(0)) + var v typegen.CborInt + thrown := tryGet(store, cid.Undef, &v) + _, ok := thrown.(vmr.ExecutionPanic) + assert.NotNil(t, thrown) + assert.False(t, ok, "expected non-abort panic") + }) +} + +func tryPut(s *vmcontext.ActorStorage, v cbor2.Marshaler) (c cid.Cid, thrown interface{}) { + defer func() { + thrown = recover() + }() + c = s.StorePut(v) + return +} + +func tryGet(s *vmcontext.ActorStorage, c cid.Cid, v cbor2.Unmarshaler) (thrown interface{}) { + defer func() { + thrown = recover() + }() + s.StoreGet(c, v) + return +} + +type cannotCBOR struct { +} + +func (c cannotCBOR) MarshalCBOR(w io.Writer) error { + return fmt.Errorf("no") +} + +type brokenStorage struct{} + +func (brokenStorage) Get(_ context.Context, _ cid.Cid, _ interface{}) error { + return fmt.Errorf("no") +} + +func (brokenStorage) Put(_ context.Context, _ interface{}) (cid.Cid, error) { + return cid.Undef, fmt.Errorf("no") +} diff --git a/pkg/vm/vmcontext/gas_charge_ipld.go b/pkg/vm/vmcontext/gas_charge_ipld.go new file mode 100644 index 0000000000..649f87ad3f --- /dev/null +++ b/pkg/vm/vmcontext/gas_charge_ipld.go @@ -0,0 +1,40 @@ +package vmcontext + +import ( + "context" + "github.com/filecoin-project/venus/pkg/vm/gas" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + xerrors "github.com/pkg/errors" +) + +var _ cbor.IpldBlockstore = (*GasChargeBlockStore)(nil) + +//GasChargeBlockStore in addition to the basic blockstore read and write capabilities, a certain amount of gas consumption will be deducted for each operation +type GasChargeBlockStore struct { + gasTank *gas.GasTracker + pricelist gas.Pricelist + inner cbor.IpldBlockstore +} + +//Get charge gas and than get the value of cid +func (bs *GasChargeBlockStore) Get(ctx context.Context, c cid.Cid) (blocks.Block, error) { + bs.gasTank.Charge(bs.pricelist.OnIpldGet(), "storage get %s", c) + + blk, err := bs.inner.Get(ctx, c) + if err != nil { + panic(xerrors.WithMessage(err, "failed to get block from blockstore")) + } + return blk, nil +} + +//Put first charge gas and than save block +func (bs *GasChargeBlockStore) Put(ctx context.Context, blk blocks.Block) error { + bs.gasTank.Charge(bs.pricelist.OnIpldPut(len(blk.RawData())), "%s storage put %d bytes", blk.Cid(), len(blk.RawData())) + + if err := bs.inner.Put(ctx, blk); err != nil { + panic(xerrors.WithMessage(err, "failed to write data to disk")) + } + return nil +} diff --git a/pkg/vm/vmcontext/interpreter.go b/pkg/vm/vmcontext/interpreter.go new file mode 100644 index 0000000000..3a802fda80 --- /dev/null +++ b/pkg/vm/vmcontext/interpreter.go @@ -0,0 +1,23 @@ +package vmcontext + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/state/tree" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" +) + +// VMInterpreter orchestrates the execution of messages from a tipset on that tipsetโ€™s parent State. +type VMInterpreter interface { + // ApplyTipSetMessages applies all the messages in a tipset. + // + // Note: any message processing error will be present as an `ExitCode` in the `MessageReceipt`. + ApplyTipSetMessages(blocks []types.BlockMessagesInfo, ts *types.TipSet, parentEpoch abi.ChainEpoch, epoch abi.ChainEpoch, cb ExecCallBack) (cid.Cid, []types.MessageReceipt, error) + ApplyGenesisMessage(from address.Address, to address.Address, method abi.MethodNum, value abi.TokenAmount, params interface{}) (*Ret, error) + ApplyMessage(msg types.ChainMsg) (*Ret, error) + ApplyImplicitMessage(msg types.ChainMsg) (*Ret, error) + + StateTree() tree.Tree + Flush() (tree.Root, error) +} diff --git a/pkg/vm/vmcontext/invocation_context.go b/pkg/vm/vmcontext/invocation_context.go new file mode 100644 index 0000000000..da7d6c3330 --- /dev/null +++ b/pkg/vm/vmcontext/invocation_context.go @@ -0,0 +1,623 @@ +package vmcontext + +import ( + "bytes" + "encoding/binary" + "fmt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/go-state-types/exitcode" + "github.com/filecoin-project/go-state-types/network" + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" + "github.com/ipfs/go-cid" + ipfscbor "github.com/ipfs/go-ipld-cbor" + xerrors "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/vm/dispatch" + "github.com/filecoin-project/venus/pkg/vm/gas" + "github.com/filecoin-project/venus/pkg/vm/runtime" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/aerrors" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/account" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var gasOnActorExec = gas.NewGasCharge("OnActorExec", 0, 0) + +// Context for a top-level invocation sequence. +type topLevelContext struct { + originatorStableAddress address.Address // Stable (public key) address of the top-level message sender. + originatorCallSeq uint64 // Call sequence number of the top-level message. + newActorAddressCount uint64 // Count of calls To NewActorAddress (mutable). +} + +// Context for an individual message invocation, including inter-actor sends. +type invocationContext struct { + vm *VM + topLevel *topLevelContext + originMsg VmMessage //msg not trasfer from and to address + msg VmMessage // The message being processed + gasTank *gas.GasTracker + randSource HeadChainRandomness + isCallerValidated bool + depth uint64 + allowSideEffects bool + stateHandle internalActorStateHandle + gasIpld ipfscbor.IpldStore +} + +type internalActorStateHandle interface { + rt5.StateHandle +} + +func newInvocationContext(rt *VM, gasIpld ipfscbor.IpldStore, topLevel *topLevelContext, msg VmMessage, + gasTank *gas.GasTracker, randSource HeadChainRandomness, parent *invocationContext) invocationContext { + orginMsg := msg + ctx := invocationContext{ + vm: rt, + topLevel: topLevel, + originMsg: orginMsg, + gasTank: gasTank, + randSource: randSource, + isCallerValidated: false, + depth: 0, + allowSideEffects: true, + stateHandle: nil, + gasIpld: gasIpld, + } + + if parent != nil { + // TODO: The version check here should be unnecessary, but we can wait to take it out + if !parent.allowSideEffects && rt.NtwkVersion() >= network.Version7 { + runtime.Abortf(exitcode.SysErrForbidden, "internal calls currently disabled") + } + //ctx.gasUsed = parent.gasUsed + //ctx.origin = parent.origin + //ctx.originNonce = parent.originNonce + //ctx.numActorsCreated = parent.numActorsCreated + ctx.depth = parent.depth + 1 + } + + if ctx.depth > MaxCallDepth && rt.NtwkVersion() >= network.Version6 { + runtime.Abortf(exitcode.SysErrForbidden, "message execution exceeds call depth") + } + + //Note: the toActor and stateHandle are loaded during the `invoke()` + resF, ok := rt.normalizeAddress(msg.From) + if !ok { + runtime.Abortf(exitcode.SysErrInvalidReceiver, "resolve msg.From [%s] address failed", msg.From) + } + msg.From = resF + + if rt.NtwkVersion() > network.Version3 { + resT, _ := rt.normalizeAddress(msg.To) + // may be set to undef if recipient doesn't exist yet + msg.To = resT + } + ctx.msg = msg + + return ctx +} + +type stateHandleContext invocationContext + +func (shc *stateHandleContext) AllowSideEffects(allow bool) { + shc.allowSideEffects = allow +} + +func (shc *stateHandleContext) Create(obj cbor.Marshaler) cid.Cid { + actr := shc.loadActor() + if actr.Head.Defined() { + runtime.Abortf(exitcode.SysErrorIllegalActor, "failed To construct actor stateView: already initialized") + } + c := shc.store().StorePut(obj) + actr.Head = c + shc.storeActor(actr) + return c +} + +func (shc *stateHandleContext) Load(obj cbor.Unmarshaler) cid.Cid { + // The actor must be loaded From store every time since the stateView may have changed via a different stateView handle + // (e.g. in a recursive call). + actr := shc.loadActor() + c := actr.Head + if !c.Defined() { + runtime.Abortf(exitcode.SysErrorIllegalActor, "failed To load undefined stateView, must construct first") + } + found := shc.store().StoreGet(c, obj) + if !found { + panic(fmt.Errorf("failed To load stateView for actor %s, CID %s", shc.msg.To, c)) + } + return c +} + +func (shc *stateHandleContext) Replace(expected cid.Cid, obj cbor.Marshaler) cid.Cid { + actr := shc.loadActor() + if !actr.Head.Equals(expected) { + panic(fmt.Errorf("unexpected prior stateView %s for actor %s, expected %s", actr.Head, shc.msg.To, expected)) + } + c := shc.store().StorePut(obj) + actr.Head = c + shc.storeActor(actr) + return c +} + +func (shc *stateHandleContext) store() rt5.Store { + return ((*invocationContext)(shc)).Store() +} + +func (shc *stateHandleContext) loadActor() *types.Actor { + entry, found, err := shc.vm.State.GetActor(shc.vm.context, shc.originMsg.To) + if err != nil { + panic(err) + } + if !found { + panic(fmt.Errorf("failed To find actor %s for stateView", shc.originMsg.To)) + } + return entry +} + +func (shc *stateHandleContext) storeActor(actr *types.Actor) { + err := shc.vm.State.SetActor(shc.vm.context, shc.originMsg.To, actr) + if err != nil { + panic(err) + } +} + +// runtime aborts are trapped by invoke, it will always return an exit code. +func (ctx *invocationContext) invoke() (ret []byte, errcode exitcode.ExitCode) { + // Checkpoint stateView, for restoration on revert + // Note that changes prior To invocation (sequence number bump and gas prepayment) persist even if invocation fails. + err := ctx.vm.snapshot() + + if err != nil { + panic(err) + } + defer ctx.vm.clearSnapshot() + + // Install handler for abort, which rolls back all stateView changes From this and any nested invocations. + // This is the only path by which a non-OK exit code may be returned. + defer func() { + if r := recover(); r != nil { + + if err := ctx.vm.revert(); err != nil { + panic(err) + } + switch e := r.(type) { + case runtime.ExecutionPanic: + p := e + + vmlog.Warnw("Abort during actor execution.", + "errorMessage", p, + "exitCode", p.Code(), + "sender", ctx.originMsg.From, + "receiver", ctx.originMsg.To, + "methodNum", ctx.originMsg.Method, + "Value", ctx.originMsg.Value, + "gasLimit", ctx.gasTank.GasAvailable) + ret = []byte{} // The Empty here should never be used, but slightly safer than zero Value. + errcode = p.Code() + default: + errcode = 1 + ret = []byte{} + // do not trap unknown panics + vmlog.Errorf("spec actors failure: %s", r) + //debug.PrintStack() + } + } + }() + + // pre-dispatch + // 1. charge gas for message invocation + // 2. load target actor + // 3. transfer optional funds + // 4. short-circuit _Send_ Method + // 5. load target actor code + // 6. create target stateView handle + // assert From address is an ID address. + if ctx.msg.From.Protocol() != address.ID { + panic("bad code: sender address MUST be an ID address at invocation time") + } + + // 1. load target actor + // Note: we replace the "To" address with the normalized version + _, toIDAddr := ctx.resolveTarget(ctx.originMsg.To) + if ctx.vm.NtwkVersion() > network.Version3 { + ctx.msg.To = toIDAddr + } + + // 2. charge gas for msg + ctx.gasTank.Charge(ctx.vm.pricelist.OnMethodInvocation(ctx.originMsg.Value, ctx.originMsg.Method), "Method invocation") + + // 3. transfer funds carried by the msg + if !ctx.originMsg.Value.Nil() && !ctx.originMsg.Value.IsZero() { + if ctx.msg.From != toIDAddr { + ctx.vm.transfer(ctx.msg.From, toIDAddr, ctx.originMsg.Value) + } + } + + // 4. if we are just sending funds, there is nothing else To do. + if ctx.originMsg.Method == builtin.MethodSend { + return nil, exitcode.Ok + } + + // 5. load target actor code + toActor, found, err := ctx.vm.State.GetActor(ctx.vm.context, ctx.originMsg.To) + if err != nil || !found { + panic(xerrors.Errorf("cannt find to actor %v", err)) + } + actorImpl := ctx.vm.getActorImpl(toActor.Code, ctx.Runtime()) + + // 6. create target stateView handle + stateHandle := newActorStateHandle((*stateHandleContext)(ctx)) + ctx.stateHandle = &stateHandle + + // dispatch + adapter := newRuntimeAdapter(ctx) //runtimeAdapter{ctx: ctx} + var extErr *dispatch.ExcuteError + ret, extErr = actorImpl.Dispatch(ctx.originMsg.Method, ctx.vm.NtwkVersion(), adapter, ctx.originMsg.Params) + if extErr != nil { + runtime.Abortf(extErr.ExitCode(), extErr.Error()) + } + + // post-dispatch + // 1. check caller was validated + // 2. check stateView manipulation was valid + // 4. success! + + // 1. check caller was validated + if !ctx.isCallerValidated { + runtime.Abortf(exitcode.SysErrorIllegalActor, "Caller MUST be validated during Method execution") + } + + // Reset To pre-invocation stateView + ctx.stateHandle = nil + + // 3. success! + return ret, exitcode.Ok +} + +// resolveTarget loads and actor and returns its ActorID address. +// +// If the target actor does not exist, and the target address is a pub-key address, +// a new account actor will be created. +// Otherwise, this Method will abort execution. +func (ctx *invocationContext) resolveTarget(target address.Address) (*types.Actor, address.Address) { + // resolve the target address via the InitActor, and attempt To load stateView. + initActorEntry, found, err := ctx.vm.State.GetActor(ctx.vm.context, init_.Address) + if err != nil { + panic(err) + } + if !found { + runtime.Abort(exitcode.SysErrSenderInvalid) + } + + if target == init_.Address { + return initActorEntry, target + } + + // get init State + state, err := init_.Load(ctx.vm.ContextStore(), initActorEntry) + if err != nil { + panic(err) + } + + // lookup the ActorID based on the address + + _, found, err = ctx.vm.State.GetActor(ctx.vm.context, target) + if err != nil { + panic(err) + } + //nolint + if !found { + // Charge gas now that easy checks are done + + ctx.gasTank.Charge(ctx.vm.pricelist.OnCreateActor(), "CreateActor address %s", target) + // actor does not exist, create an account actor + // - precond: address must be a pub-key + // - sent init actor a msg To create the new account + targetIDAddr, err := ctx.vm.State.RegisterNewAddress(target) + if err != nil { + panic(err) + } + + if target.Protocol() != address.SECP256K1 && target.Protocol() != address.BLS { + // Don't implicitly create an account actor for an address without an associated key. + runtime.Abort(exitcode.SysErrInvalidReceiver) + } + ver, err := actors.VersionForNetwork(ctx.vm.NtwkVersion()) + if err != nil { + panic(err) + } + actorCode, err := account.GetActorCodeID(ver) + if err != nil { + panic(err) + } + ctx.CreateActor(actorCode, targetIDAddr) + + // call constructor on account + newMsg := VmMessage{ + From: builtin.SystemActorAddr, + To: targetIDAddr, + Value: big.Zero(), + Method: account.Methods.Constructor, + // use original address as constructor Params + // Note: constructor takes a pointer + Params: &target, + } + + newCtx := newInvocationContext(ctx.vm, ctx.gasIpld, ctx.topLevel, newMsg, ctx.gasTank, ctx.randSource, ctx) + _, code := newCtx.invoke() + if code.IsError() { + // we failed To construct an account actor.. + runtime.Abort(code) + } + + // load actor + targetActor, _, err := ctx.vm.State.GetActor(ctx.vm.context, target) + if err != nil { + panic(err) + } + return targetActor, targetIDAddr + } else { + //load id address + targetIDAddr, found, err := state.ResolveAddress(target) + if err != nil { + panic(err) + } + + if !found { + panic(fmt.Errorf("unreachable: actor is supposed To exist but it does not. addr: %s, idAddr: %s", target, targetIDAddr)) + } + + // load actor + targetActor, found, err := ctx.vm.State.GetActor(ctx.vm.context, targetIDAddr) + if err != nil { + panic(err) + } + + if !found { + runtime.Abort(exitcode.SysErrInvalidReceiver) + } + + return targetActor, targetIDAddr + } +} + +func (ctx *invocationContext) resolveToKeyAddr(addr address.Address) (address.Address, error) { + if addr.Protocol() == address.BLS || addr.Protocol() == address.SECP256K1 { + return addr, nil + } + + act, found, err := ctx.vm.State.GetActor(ctx.vm.context, addr) + if !found || err != nil { + return address.Undef, xerrors.Errorf("failed to find actor: %s", addr) + } + + aast, err := account.Load(adt.WrapStore(ctx.vm.context, ctx.vm.store), act) + if err != nil { + return address.Undef, xerrors.Errorf("failed to get account actor State for %s: %v", addr, err) + } + + return aast.PubkeyAddress() +} + +// +// implement runtime.InvocationContext for invocationContext +// +var _ runtime.InvocationContext = (*invocationContext)(nil) + +// Runtime implements runtime.InvocationContext. +func (ctx *invocationContext) Runtime() runtime.Runtime { + return ctx.vm +} + +// Store implements runtime.Runtime. +func (ctx *invocationContext) Store() rt5.Store { + return NewActorStorage(ctx.vm.context, ctx.gasIpld, ctx.gasTank, ctx.vm.pricelist) +} + +// Message implements runtime.InvocationContext. +func (ctx *invocationContext) Message() rt5.Message { + return ctx.msg +} + +// ValidateCaller implements runtime.InvocationContext. +func (ctx *invocationContext) ValidateCaller(pattern runtime.CallerPattern) { + if ctx.isCallerValidated { + runtime.Abortf(exitcode.SysErrorIllegalActor, "Method must validate caller identity exactly once") + } + if !pattern.IsMatch((*patternContext2)(ctx)) { + runtime.Abortf(exitcode.SysErrForbidden, "Method invoked by incorrect caller") + } + ctx.isCallerValidated = true +} + +// State implements runtime.InvocationContext. +func (ctx *invocationContext) State() rt5.StateHandle { + return ctx.stateHandle +} + +// Send implements runtime.InvocationContext. +func (ctx *invocationContext) Send(toAddr address.Address, methodNum abi.MethodNum, params cbor.Marshaler, value abi.TokenAmount, out cbor.Er) exitcode.ExitCode { + // check if side-effects are allowed + if !ctx.allowSideEffects { + runtime.Abortf(exitcode.SysErrorIllegalActor, "Calling Send() is not allowed during side-effect lock") + } + // prepare + // 1. alias fromActor + from := ctx.msg.To + + // 2. build internal message + newMsg := VmMessage{ + From: from, + To: toAddr, + Value: value, + Method: methodNum, + Params: params, + } + + // 3. build new context + newCtx := newInvocationContext(ctx.vm, ctx.gasIpld, ctx.topLevel, newMsg, ctx.gasTank, ctx.randSource, ctx) + // 4. invoke + ret, code := newCtx.invoke() + if code == 0 { + _ = ctx.gasTank.TryCharge(gasOnActorExec) + if err := out.UnmarshalCBOR(bytes.NewReader(ret)); err != nil { + runtime.Abortf(exitcode.ErrSerialization, "failed To unmarshal return Value: %s", err) + } + } + return code +} + +/// Balance implements runtime.InvocationContext. +func (ctx *invocationContext) Balance() abi.TokenAmount { + toActor, found, err := ctx.vm.State.GetActor(ctx.vm.context, ctx.originMsg.To) + if err != nil { + panic(xerrors.Errorf("cannot find to actor %v", err)) + } + if !found { + return abi.NewTokenAmount(0) + } + return toActor.Balance +} + +// +// implement runtime.InvocationContext for invocationContext +// +var _ runtime.ExtendedInvocationContext = (*invocationContext)(nil) + +// NextActorAddress predicts the address of the next actor created by this address. +// +// Code is adapted from vm.Runtime#NewActorAddress() +func (ctx *invocationContext) NewActorAddress() address.Address { + buf := new(bytes.Buffer) + origin, err := ctx.resolveToKeyAddr(ctx.topLevel.originatorStableAddress) + if err != nil { + panic(err) + } + + err = origin.MarshalCBOR(buf) + if err != nil { + panic(err) + } + + err = binary.Write(buf, binary.BigEndian, ctx.topLevel.originatorCallSeq) + if err != nil { + panic(err) + } + + err = binary.Write(buf, binary.BigEndian, ctx.topLevel.newActorAddressCount) + if err != nil { + panic(err) + } + + actorAddress, err := address.NewActorAddress(buf.Bytes()) + if err != nil { + panic(err) + } + return actorAddress +} + +// CreateActor implements runtime.ExtendedInvocationContext. +func (ctx *invocationContext) CreateActor(codeID cid.Cid, addr address.Address) { + if addr == address.Undef && ctx.vm.NtwkVersion() >= network.Version7 { + runtime.Abortf(exitcode.SysErrorIllegalArgument, "CreateActor with Undef address") + } + + vmlog.Debugf("creating actor, friendly-name: %s, code: %s, addr: %s\n", builtin.ActorNameByCode(codeID), codeID, addr) + + // Check existing address. If nothing there, create empty actor. + // Note: we are storing the actors by ActorID *address* + _, found, err := ctx.vm.State.GetActor(ctx.vm.context, addr) + if err != nil { + panic(err) + } + if found { + runtime.Abortf(exitcode.SysErrorIllegalArgument, "Actor address already exists") + } + + newActor := &types.Actor{ + // make this the right 'type' of actor + Code: codeID, + Balance: abi.NewTokenAmount(0), + Head: EmptyObjectCid, + Nonce: 0, + } + if err := ctx.vm.State.SetActor(ctx.vm.context, addr, newActor); err != nil { + panic(err) + } + + _ = ctx.gasTank.TryCharge(gasOnActorExec) +} + +// DeleteActor implements runtime.ExtendedInvocationContext. +func (ctx *invocationContext) DeleteActor(beneficiary address.Address) { + receiver := ctx.originMsg.To + ctx.gasTank.Charge(ctx.vm.pricelist.OnDeleteActor(), "DeleteActor %s", receiver) + receiverActor, found, err := ctx.vm.State.GetActor(ctx.vm.context, receiver) + if err != nil { + if xerrors.Is(err, types.ErrActorNotFound) { + runtime.Abortf(exitcode.SysErrorIllegalActor, "failed to load actor in delete actor: %s", err) + } + panic(aerrors.Fatalf("failed to get actor: %s", err)) + } + + if !found { + runtime.Abortf(exitcode.SysErrorIllegalActor, "delete non-existent actor %v", receiverActor) + } + + if !receiverActor.Balance.IsZero() { + // TODO: Should be safe to drop the version-check, + // since only the paych actor called this pre-version 7, but let's leave it for now + if ctx.vm.NtwkVersion() >= network.Version7 { + beneficiaryID, found := ctx.vm.normalizeAddress(beneficiary) + if !found { + runtime.Abortf(exitcode.SysErrorIllegalArgument, "beneficiary doesn't exist") + } + + if beneficiaryID == receiver { + runtime.Abortf(exitcode.SysErrorIllegalArgument, "benefactor cannot be beneficiary") + } + } + + // Transfer the executing actor's balance to the beneficiary + ctx.vm.transfer(receiver, beneficiary, receiverActor.Balance) + } + + if err := ctx.vm.State.DeleteActor(ctx.vm.context, receiver); err != nil { + panic(aerrors.Fatalf("failed to delete actor: %s", err)) + } + + _ = ctx.gasTank.TryCharge(gasOnActorExec) +} + +func (ctx *invocationContext) stateView() SyscallsStateView { + // The stateView tree's root is not committed until the end of a tipset, so we can't use the external stateView view + // type for this implementation. + // Maybe we could re-work it To use a root HAMT node rather than root CID. + return newSyscallsStateView(ctx, ctx.vm) +} + +// patternContext implements the PatternContext +type patternContext2 invocationContext + +var _ runtime.PatternContext = (*patternContext2)(nil) + +func (ctx *patternContext2) CallerCode() cid.Cid { + toActor, found, err := ctx.vm.State.GetActor(ctx.vm.context, ctx.originMsg.From) + if err != nil || !found { + panic(xerrors.Errorf("cannt find to actor %v", err)) + } + return toActor.Code +} + +func (ctx *patternContext2) CallerAddr() address.Address { + return ctx.msg.From +} diff --git a/internal/pkg/vm/internal/pattern/pattern.go b/pkg/vm/vmcontext/pattern.go similarity index 79% rename from internal/pkg/vm/internal/pattern/pattern.go rename to pkg/vm/vmcontext/pattern.go index 9016c572fe..b68d20c092 100644 --- a/internal/pkg/vm/internal/pattern/pattern.go +++ b/pkg/vm/vmcontext/pattern.go @@ -1,10 +1,11 @@ -package pattern +package vmcontext import ( "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/internal/runtime" - "github.com/filecoin-project/specs-actors/actors/builtin" "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/vm/runtime" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" ) // IsAccountActor pattern checks if the caller is an account actor. @@ -13,17 +14,17 @@ type IsAccountActor struct{} // IsMatch returns "True" if the patterns matches func (IsAccountActor) IsMatch(ctx runtime.PatternContext) bool { - return builtin.AccountActorCodeID.Equals(ctx.CallerCode()) + return builtin.IsAccountActor(ctx.CallerCode()) } // IsAInitActor pattern checks if the caller is the init actor. // Dragons: delete after switching to new actors -type IsAInitActor struct{} +//type IsAInitActor struct{} // IsMatch returns "True" if the patterns matches -func (IsAInitActor) IsMatch(ctx runtime.PatternContext) bool { - return builtin.InitActorCodeID.Equals(ctx.CallerCode()) -} +//func (IsAInitActor) IsMatch(ctx runtime.PatternContext) bool { +// return builtin.IsInitActor(ctx.CallerCode()) +//} // Any patterns always passses. type Any struct{} diff --git a/pkg/vm/vmcontext/runtime_adapter.go b/pkg/vm/vmcontext/runtime_adapter.go new file mode 100644 index 0000000000..a398a9e781 --- /dev/null +++ b/pkg/vm/vmcontext/runtime_adapter.go @@ -0,0 +1,326 @@ +package vmcontext + +import ( + "context" + "fmt" + + "github.com/filecoin-project/venus/venus-shared/actors/aerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + "github.com/ipfs/go-cid" + cbor2 "github.com/ipfs/go-ipld-cbor" + logging "github.com/ipfs/go-log/v2" + xerrors "github.com/pkg/errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/exitcode" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/go-state-types/rt" + rt0 "github.com/filecoin-project/specs-actors/actors/runtime" + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" + "github.com/filecoin-project/venus/pkg/vm/gas" + "github.com/filecoin-project/venus/pkg/vm/runtime" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +var EmptyObjectCid cid.Cid + +func init() { + cst := cbor2.NewMemCborStore() + emptyobject, err := cst.Put(context.TODO(), []struct{}{}) + if err != nil { + panic(err) + } + + EmptyObjectCid = emptyobject +} + +var actorLog = logging.Logger("vm.actors") + +var _ rt5.Runtime = (*runtimeAdapter)(nil) +var _ rt0.Runtime = (*runtimeAdapter)(nil) + +type runtimeAdapter struct { + ctx *invocationContext + syscalls +} + +func newRuntimeAdapter(ctx *invocationContext) *runtimeAdapter { + return &runtimeAdapter{ctx: ctx, syscalls: syscalls{ + impl: ctx.vm.vmOption.SysCallsImpl, + vm: ctx.vm, + gasBlockStore: ctx.gasIpld, + vmMsg: ctx.msg, + gasTank: ctx.gasTank, + pricelist: ctx.vm.pricelist, + stateView: ctx.stateView(), + }} +} + +func (a *runtimeAdapter) Caller() address.Address { + /* if a.ctx.Message().Caller().Protocol() != address.ID { + panic("runtime message has a non-ID caller") + }*/ + return a.ctx.Message().Caller() +} + +func (a *runtimeAdapter) Receiver() address.Address { + //todo refer lotus imple + /* if a.ctx.Message().Receiver() != address.Undef && a.ctx.Message().Receiver().Protocol() != address.ID { + panic("runtime message has a non-ID receiver") + }*/ + return a.ctx.Message().Receiver() +} + +func (a *runtimeAdapter) ValueReceived() abi.TokenAmount { + return a.ctx.Message().ValueReceived() +} + +func (a *runtimeAdapter) StateCreate(obj cbor.Marshaler) { + c := a.StorePut(obj) + err := a.stateCommit(EmptyObjectCid, c) + if err != nil { + panic(fmt.Errorf("failed To commit stateView after creating object: %w", err)) + } +} + +func (a *runtimeAdapter) stateCommit(oldh, newh cid.Cid) error { + + // TODO: we can make this more efficient in the future... + act, found, err := a.ctx.vm.State.GetActor(a.Context(), a.Receiver()) + if !found || err != nil { + return xerrors.Errorf("failed To get actor To commit stateView, %s", err) + } + + if act.Head != oldh { + return xerrors.Errorf("failed To update, inconsistent base reference, %s", err) + } + + act.Head = newh + if err := a.ctx.vm.State.SetActor(a.Context(), a.Receiver(), act); err != nil { + return xerrors.Errorf("failed To set actor in commit stateView, %s", err) + } + + return nil +} + +func (a *runtimeAdapter) StateReadonly(obj cbor.Unmarshaler) { + act, found, err := a.ctx.vm.State.GetActor(a.Context(), a.Receiver()) + if !found || err != nil { + a.Abortf(exitcode.SysErrorIllegalArgument, "failed To get actor for Readonly stateView: %s", err) + } + a.StoreGet(act.Head, obj) +} + +func (a *runtimeAdapter) StateTransaction(obj cbor.Er, f func()) { + if obj == nil { + a.Abortf(exitcode.SysErrorIllegalActor, "Must not pass nil To Transaction()") + } + + act, found, err := a.ctx.vm.State.GetActor(a.Context(), a.Receiver()) + if !found || err != nil { + a.Abortf(exitcode.SysErrorIllegalActor, "failed To get actor for Transaction: %s", err) + } + baseState := act.Head + a.StoreGet(baseState, obj) + + a.ctx.allowSideEffects = false + f() + a.ctx.allowSideEffects = true + + c := a.StorePut(obj) + + err = a.stateCommit(baseState, c) + if err != nil { + panic(fmt.Errorf("failed To commit stateView after transaction: %w", err)) + } +} + +func (a *runtimeAdapter) StoreGet(c cid.Cid, o cbor.Unmarshaler) bool { + return a.ctx.Store().StoreGet(c, o) +} + +func (a *runtimeAdapter) StorePut(x cbor.Marshaler) cid.Cid { + return a.ctx.Store().StorePut(x) +} + +func (a *runtimeAdapter) NetworkVersion() network.Version { + return a.stateView.GetNtwkVersion(a.Context(), a.CurrEpoch()) +} + +func (a *runtimeAdapter) GetRandomnessFromBeacon(personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) abi.Randomness { + opt := a.ctx.vm.vmOption + res, err := opt.Rnd.ChainGetRandomnessFromBeacon(a.Context(), personalization, randEpoch, entropy) + if err != nil { + panic(aerrors.Fatalf("could not get beacon randomness: %s", err)) + } + return res +} + +func (a *runtimeAdapter) GetRandomnessFromTickets(personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) abi.Randomness { + opt := a.ctx.vm.vmOption + res, err := opt.Rnd.ChainGetRandomnessFromTickets(a.Context(), personalization, randEpoch, entropy) + if err != nil { + panic(aerrors.Fatalf("could not get ticket randomness: %s", err)) + } + return res +} + +func (a *runtimeAdapter) Send(toAddr address.Address, methodNum abi.MethodNum, params cbor.Marshaler, value abi.TokenAmount, out cbor.Er) exitcode.ExitCode { + return a.ctx.Send(toAddr, methodNum, params, value, out) +} + +func (a *runtimeAdapter) ChargeGas(name string, compute int64, virtual int64) { + a.gasTank.Charge(gas.NewGasCharge(name, compute, 0).WithVirtual(virtual, 0), "runtimeAdapter charge gas") +} + +func (a *runtimeAdapter) Log(level rt.LogLevel, msg string, args ...interface{}) { + switch level { + case rt.DEBUG: + actorLog.Debugf(msg, args...) + case rt.INFO: + actorLog.Infof(msg, args...) + case rt.WARN: + actorLog.Warnf(msg, args...) + case rt.ERROR: + actorLog.Errorf(msg, args...) + } +} + +// Message implements Runtime. +func (a *runtimeAdapter) Message() rt5.Message { + return a.ctx.Message() +} + +// CurrEpoch implements Runtime. +func (a *runtimeAdapter) CurrEpoch() abi.ChainEpoch { + return a.ctx.Runtime().CurrentEpoch() +} + +// ImmediateCaller implements Runtime. +func (a *runtimeAdapter) ImmediateCaller() address.Address { + return a.ctx.Message().Caller() +} + +// ValidateImmediateCallerAcceptAny implements Runtime. +func (a *runtimeAdapter) ValidateImmediateCallerAcceptAny() { + a.ctx.ValidateCaller(Any{}) +} + +// ValidateImmediateCallerIs implements Runtime. +func (a *runtimeAdapter) ValidateImmediateCallerIs(addrs ...address.Address) { + a.ctx.ValidateCaller(AddressIn{Addresses: addrs}) +} + +// ValidateImmediateCallerType implements Runtime. +func (a *runtimeAdapter) ValidateImmediateCallerType(codes ...cid.Cid) { + a.ctx.ValidateCaller(CodeIn{Codes: codes}) +} + +// CurrentBalance implements Runtime. +func (a *runtimeAdapter) CurrentBalance() abi.TokenAmount { + return a.ctx.Balance() +} + +// ResolveAddress implements Runtime. +func (a *runtimeAdapter) ResolveAddress(addr address.Address) (address.Address, bool) { + return a.ctx.vm.normalizeAddress(addr) +} + +// GetActorCodeCID implements Runtime. +func (a *runtimeAdapter) GetActorCodeCID(addr address.Address) (ret cid.Cid, ok bool) { + entry, found, err := a.ctx.vm.State.GetActor(a.Context(), addr) + if !found { + return cid.Undef, false + } + if err != nil { + panic(err) + } + return entry.Code, true +} + +// Abortf implements Runtime. +func (a *runtimeAdapter) Abortf(errExitCode exitcode.ExitCode, msg string, args ...interface{}) { + runtime.Abortf(errExitCode, msg, args...) +} + +// NewActorAddress implements Runtime. +func (a *runtimeAdapter) NewActorAddress() address.Address { + return a.ctx.NewActorAddress() +} + +// CreateActor implements Runtime. +func (a *runtimeAdapter) CreateActor(codeID cid.Cid, addr address.Address) { + if !builtin.IsBuiltinActor(codeID) { + runtime.Abortf(exitcode.SysErrorIllegalArgument, "Can only create built-in actors.") + } + + vmlog.Debugf("creating actor, friendly-name: %s, code: %s, addr: %s\n", builtin.ActorNameByCode(codeID), codeID, addr) + + // Check existing address. If nothing there, create empty actor. + // + // Note: we are storing the actors by ActorID *address* + _, found, err := a.ctx.vm.State.GetActor(a.ctx.vm.context, addr) + if err != nil { + panic(err) + } + if found { + runtime.Abortf(exitcode.SysErrorIllegalArgument, "Actor address already exists") + } + + // Charge gas now that easy checks are done + + a.ctx.gasTank.Charge(a.ctx.vm.pricelist.OnCreateActor(), "CreateActor code %s, address %s", codeID, addr) + + newActor := &types.Actor{ + // make this the right 'type' of actor + Code: codeID, + Balance: abi.NewTokenAmount(0), + Head: EmptyObjectCid, + Nonce: 0, + } + if err := a.ctx.vm.State.SetActor(a.ctx.vm.context, addr, newActor); err != nil { + panic(err) + } + + _ = a.ctx.gasTank.TryCharge(gasOnActorExec) +} + +// DeleteActor implements Runtime. +func (a *runtimeAdapter) DeleteActor(beneficiary address.Address) { + a.ctx.DeleteActor(beneficiary) +} + +func (a *runtimeAdapter) TotalFilCircSupply() abi.TokenAmount { + circSupply, err := a.stateView.TotalFilCircSupply(a.CurrEpoch(), a.ctx.vm.State) + if err != nil { + runtime.Abortf(exitcode.ErrIllegalState, "failed To get total circ supply: %s", err) + } + return circSupply +} + +// Context implements Runtime. +// Dragons: this can disappear once we have the storage abstraction +func (a *runtimeAdapter) Context() context.Context { + return a.ctx.vm.context +} + +var nullTraceSpan = func() {} + +// StartSpan implements Runtime. +func (a *runtimeAdapter) StartSpan(name string) func() { + // Dragons: leeave empty for now, add TODO To add this into gfc + return nullTraceSpan +} + +func (a *runtimeAdapter) AbortStateMsg(msg string) { + runtime.Abortf(101, msg) +} + +func (a *runtimeAdapter) BaseFee() abi.TokenAmount { + return a.ctx.vm.vmOption.BaseFee +} diff --git a/pkg/vm/vmcontext/syscalls.go b/pkg/vm/vmcontext/syscalls.go new file mode 100644 index 0000000000..b710783fa8 --- /dev/null +++ b/pkg/vm/vmcontext/syscalls.go @@ -0,0 +1,126 @@ +package vmcontext + +import ( + "context" + goruntime "runtime" + "sync" + + cbornode "github.com/ipfs/go-ipld-cbor" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" + proof5 "github.com/filecoin-project/specs-actors/v5/actors/runtime/proof" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/crypto" + vmState "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/vm/gas" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" +) + +type SyscallsStateView interface { + ResolveToKeyAddr(ctx context.Context, address address.Address) (address.Address, error) + MinerInfo(ctx context.Context, maddr address.Address, nv network.Version) (*miner.MinerInfo, error) + TotalFilCircSupply(height abi.ChainEpoch, st vmState.Tree) (abi.TokenAmount, error) + GetNtwkVersion(ctx context.Context, ce abi.ChainEpoch) network.Version +} + +// Syscall implementation interface. +// These methods take the chain epoch and other context that is implicit in the runtime as explicit parameters. +type SyscallsImpl interface { + VerifySignature(ctx context.Context, view SyscallsStateView, signature crypto.Signature, signer address.Address, plaintext []byte) error + HashBlake2b(data []byte) [32]byte + ComputeUnsealedSectorCID(ctx context.Context, proof5 abi.RegisteredSealProof, pieces []abi.PieceInfo) (cid.Cid, error) + VerifySeal(ctx context.Context, info proof5.SealVerifyInfo) error + BatchVerifySeals(ctx context.Context, vis map[address.Address][]proof5.SealVerifyInfo) (map[address.Address][]bool, error) + VerifyAggregateSeals(aggregate proof5.AggregateSealVerifyProofAndInfos) error + VerifyPoSt(ctx context.Context, info proof5.WindowPoStVerifyInfo) error + VerifyConsensusFault(ctx context.Context, h1, h2, extra []byte, curEpoch abi.ChainEpoch, msg VmMessage, gasIpld cbornode.IpldStore, view SyscallsStateView, getter LookbackStateGetter) (*rt5.ConsensusFault, error) +} + +type syscalls struct { + impl SyscallsImpl + vm *VM + gasBlockStore cbornode.IpldStore + vmMsg VmMessage + gasTank *gas.GasTracker + pricelist gas.Pricelist + stateView SyscallsStateView +} + +var _ rt5.Syscalls = (*syscalls)(nil) + +func (sys syscalls) VerifySignature(signature crypto.Signature, signer address.Address, plaintext []byte) error { + charge, err := sys.pricelist.OnVerifySignature(signature.Type, len(plaintext)) + if err != nil { + return err + } + sys.gasTank.Charge(charge, "VerifySignature") + return sys.impl.VerifySignature(sys.vm.context, sys.stateView, signature, signer, plaintext) +} + +func (sys syscalls) HashBlake2b(data []byte) [32]byte { + sys.gasTank.Charge(sys.pricelist.OnHashing(len(data)), "HashBlake2b") + return sys.impl.HashBlake2b(data) +} + +func (sys syscalls) ComputeUnsealedSectorCID(proof abi.RegisteredSealProof, pieces []abi.PieceInfo) (cid.Cid, error) { + sys.gasTank.Charge(sys.pricelist.OnComputeUnsealedSectorCid(proof, pieces), "ComputeUnsealedSectorCID") + return sys.impl.ComputeUnsealedSectorCID(sys.vm.context, proof, pieces) +} + +func (sys syscalls) VerifySeal(info proof5.SealVerifyInfo) error { + sys.gasTank.Charge(sys.pricelist.OnVerifySeal(info), "VerifySeal") + return sys.impl.VerifySeal(sys.vm.context, info) +} + +func (sys syscalls) VerifyPoSt(info proof5.WindowPoStVerifyInfo) error { + sys.gasTank.Charge(sys.pricelist.OnVerifyPost(info), "VerifyWindowPoSt") + return sys.impl.VerifyPoSt(sys.vm.context, info) +} + +func (sys syscalls) VerifyConsensusFault(h1, h2, extra []byte) (*rt5.ConsensusFault, error) { + sys.gasTank.Charge(sys.pricelist.OnVerifyConsensusFault(), "VerifyConsensusFault") + return sys.impl.VerifyConsensusFault(sys.vm.context, h1, h2, extra, sys.vm.currentEpoch, sys.vmMsg, sys.gasBlockStore, sys.stateView, sys.vm.vmOption.LookbackStateGetter) +} + +var BatchSealVerifyParallelism = 2 * goruntime.NumCPU() + +func (sys syscalls) BatchVerifySeals(vis map[address.Address][]proof5.SealVerifyInfo) (map[address.Address][]bool, error) { + out := make(map[address.Address][]bool) + + sema := make(chan struct{}, BatchSealVerifyParallelism) + vmlog.Info("BatchVerifySeals miners:", len(vis)) + var wg sync.WaitGroup + for addr, seals := range vis { + results := make([]bool, len(seals)) + out[addr] = results + + for i, s := range seals { + wg.Add(1) + go func(ma address.Address, ix int, svi proof5.SealVerifyInfo, res []bool) { + defer wg.Done() + sema <- struct{}{} + + if err := sys.VerifySeal(svi); err != nil { + vmlog.Warnw("seal verify in batch failed", "miner", ma, "index", ix, "err", err) + res[ix] = false + } else { + res[ix] = true + } + + <-sema + }(addr, i, s, results) + } + } + wg.Wait() + vmlog.Info("BatchVerifySeals Result miners:", len(out)) + return out, nil +} + +func (sys *syscalls) VerifyAggregateSeals(aggregate proof5.AggregateSealVerifyProofAndInfos) error { + sys.gasTank.Charge(sys.pricelist.OnVerifyAggregateSeals(aggregate), "VerifyAggregateSeals") + return sys.impl.VerifyAggregateSeals(aggregate) +} diff --git a/pkg/vm/vmcontext/syscallsStateView.go b/pkg/vm/vmcontext/syscallsStateView.go new file mode 100644 index 0000000000..bff43c698d --- /dev/null +++ b/pkg/vm/vmcontext/syscallsStateView.go @@ -0,0 +1,82 @@ +package vmcontext + +import ( + "context" + "fmt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/account" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + "github.com/pkg/errors" +) + +// +// implement syscalls stateView view +// +type syscallsStateView struct { + ctx *invocationContext + *VM +} + +func newSyscallsStateView(ctx *invocationContext, VM *VM) *syscallsStateView { + return &syscallsStateView{ctx: ctx, VM: VM} +} + +// ResolveToKeyAddr returns the public key type of address (`BLS`/`SECP256K1`) of an account actor identified by `addr`. +func (vm *syscallsStateView) ResolveToKeyAddr(ctx context.Context, accountAddr address.Address) (address.Address, error) { + // Short-circuit when given a pubkey address. + if accountAddr.Protocol() == address.SECP256K1 || accountAddr.Protocol() == address.BLS { + return accountAddr, nil + } + accountActor, found, err := vm.State.GetActor(vm.context, accountAddr) + if err != nil { + return address.Undef, errors.Wrapf(err, "signer resolution failed To find actor %s", accountAddr) + } + if !found { + return address.Undef, fmt.Errorf("signer resolution found no such actor %s", accountAddr) + } + accountState, err := account.Load(adt.WrapStore(vm.context, vm.ctx.gasIpld), accountActor) + if err != nil { + // This error is internal, shouldn't propagate as on-chain failure + panic(fmt.Errorf("signer resolution failed To lost stateView for %s ", accountAddr)) + } + + return accountState.PubkeyAddress() +} + +//MinerInfo get miner info +func (vm *syscallsStateView) MinerInfo(ctx context.Context, maddr address.Address, nv network.Version) (*miner.MinerInfo, error) { + accountActor, found, err := vm.State.GetActor(vm.context, maddr) + if err != nil { + return nil, errors.Wrapf(err, "miner resolution failed To find actor %s", maddr) + } + if !found { + return nil, fmt.Errorf("miner resolution found no such actor %s", maddr) + } + + accountState, err := miner.Load(adt.WrapStore(vm.context, vm.ctx.gasIpld), accountActor) + if err != nil { + panic(fmt.Errorf("signer resolution failed To lost stateView for %s ", maddr)) + } + + minerInfo, err := accountState.Info() + if err != nil { + panic(fmt.Errorf("failed To get miner info %s ", maddr)) + } + + return &minerInfo, nil +} + +//GetNtwkVersion get network version +func (vm *syscallsStateView) GetNtwkVersion(ctx context.Context, ce abi.ChainEpoch) network.Version { + return vm.vmOption.NtwkVersionGetter(ctx, ce) +} + +//GetNtwkVersion get network version +func (vm *syscallsStateView) TotalFilCircSupply(height abi.ChainEpoch, st tree.Tree) (abi.TokenAmount, error) { + return vm.GetCircSupply(context.TODO()) +} diff --git a/pkg/vm/vmcontext/testing_syscalls.go b/pkg/vm/vmcontext/testing_syscalls.go new file mode 100644 index 0000000000..00c2bc6002 --- /dev/null +++ b/pkg/vm/vmcontext/testing_syscalls.go @@ -0,0 +1,50 @@ +package vmcontext + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" + proof5 "github.com/filecoin-project/specs-actors/v5/actors/runtime/proof" + "github.com/ipfs/go-cid" + "github.com/minio/blake2b-simd" + + "github.com/filecoin-project/venus/pkg/crypto" +) + +type FakeSyscalls struct { +} + +func (f FakeSyscalls) VerifySignature(ctx context.Context, view SyscallsStateView, signature crypto.Signature, signer address.Address, plaintext []byte) error { + // The signer is assumed To be already resolved To a pubkey address. + return crypto.Verify(&signature, signer, plaintext) +} + +func (f FakeSyscalls) HashBlake2b(data []byte) [32]byte { + return blake2b.Sum256(data) +} + +func (f FakeSyscalls) ComputeUnsealedSectorCID(ctx context.Context, proof5 abi.RegisteredSealProof, pieces []abi.PieceInfo) (cid.Cid, error) { + panic("implement me") +} + +func (f FakeSyscalls) VerifySeal(ctx context.Context, info proof5.SealVerifyInfo) error { + panic("implement me") +} + +func (f FakeSyscalls) BatchVerifySeals(ctx context.Context, vis map[address.Address][]proof5.SealVerifyInfo) (map[address.Address][]bool, error) { + panic("implement me") +} + +func (f FakeSyscalls) VerifyWinningPoSt(ctx context.Context, info proof5.WinningPoStVerifyInfo) error { + panic("implement me") +} + +func (f FakeSyscalls) VerifyPoSt(ctx context.Context, info proof5.WindowPoStVerifyInfo) error { + panic("implement me") +} + +func (f FakeSyscalls) VerifyConsensusFault(ctx context.Context, h1, h2, extra []byte, view SyscallsStateView) (*rt5.ConsensusFault, error) { + panic("implement me") +} diff --git a/pkg/vm/vmcontext/teststoreage.go b/pkg/vm/vmcontext/teststoreage.go new file mode 100644 index 0000000000..e78767d094 --- /dev/null +++ b/pkg/vm/vmcontext/teststoreage.go @@ -0,0 +1,48 @@ +package vmcontext + +import ( + "bytes" + + "github.com/filecoin-project/go-state-types/cbor" + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/ipfs/go-cid" + cborUtil "github.com/ipfs/go-ipld-cbor" +) + +// TestStorage is a fake storage used for testing. +type TestStorage struct { + state interface{} +} + +// NewTestStorage returns a new "TestStorage" +func NewTestStorage(state interface{}) *TestStorage { + return &TestStorage{ + state: state, + } +} + +var _ rt5.Store = (*TestStorage)(nil) + +// Put implements runtime.Store. +func (ts *TestStorage) StorePut(v cbor.Marshaler) cid.Cid { + ts.state = v + buf := new(bytes.Buffer) + err := v.MarshalCBOR(buf) + if err == nil { + return cid.NewCidV1(cid.Raw, buf.Bytes()) + } + panic("failed to encode") +} + +// Get implements runtime.Store. +func (ts *TestStorage) StoreGet(cid cid.Cid, obj cbor.Unmarshaler) bool { + node, err := cborUtil.WrapObject(ts.state, constants.DefaultHashFunction, -1) + if err != nil { + return false + } + + err = obj.UnmarshalCBOR(bytes.NewReader(node.RawData())) + + return err == nil +} diff --git a/pkg/vm/vmcontext/types.go b/pkg/vm/vmcontext/types.go new file mode 100644 index 0000000000..6207519baf --- /dev/null +++ b/pkg/vm/vmcontext/types.go @@ -0,0 +1,78 @@ +package vmcontext + +import ( + "context" + + acrypto "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/exitcode" + "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/pkg/fork" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/vm/dispatch" + "github.com/filecoin-project/venus/pkg/vm/gas" +) + +type ExecCallBack func(cid.Cid, VmMessage, *Ret) error +type CircSupplyCalculator func(context.Context, abi.ChainEpoch, tree.Tree) (abi.TokenAmount, error) +type NtwkVersionGetter func(context.Context, abi.ChainEpoch) network.Version +type LookbackStateGetter func(context.Context, abi.ChainEpoch) (*state.View, error) + +type VmOption struct { //nolint + CircSupplyCalculator CircSupplyCalculator + LookbackStateGetter LookbackStateGetter + NtwkVersionGetter NtwkVersionGetter + Rnd HeadChainRandomness + BaseFee abi.TokenAmount + Fork fork.IFork + ActorCodeLoader *dispatch.CodeLoader + Epoch abi.ChainEpoch + GasPriceSchedule *gas.PricesSchedule + PRoot cid.Cid + Bsstore blockstoreutil.Blockstore + SysCallsImpl SyscallsImpl +} + +//ChainRandomness define randomness method in filecoin +type ILookBack interface { + StateView(ctx context.Context, ts *types.TipSet) (*state.View, error) + GetLookbackTipSetForRound(ctx context.Context, ts *types.TipSet, round abi.ChainEpoch, version network.Version) (*types.TipSet, cid.Cid, error) +} + +func LookbackStateGetterForTipset(ctx context.Context, backer ILookBack, fork fork.IFork, ts *types.TipSet) LookbackStateGetter { + return func(ctx context.Context, round abi.ChainEpoch) (*state.View, error) { + ver := fork.GetNtwkVersion(ctx, round) + ts, _, err := backer.GetLookbackTipSetForRound(ctx, ts, round, ver) + if err != nil { + return nil, err + } + return backer.StateView(ctx, ts) + } +} + +//ChainRandomness define randomness method in filecoin +type HeadChainRandomness interface { + ChainGetRandomnessFromBeacon(ctx context.Context, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) + ChainGetRandomnessFromTickets(ctx context.Context, personalization acrypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) +} + +type Ret struct { + GasTracker *gas.GasTracker + OutPuts gas.GasOutputs + Receipt types.MessageReceipt +} + +// Failure returns with a non-zero exit code. +func Failure(exitCode exitcode.ExitCode, gasAmount int64) types.MessageReceipt { + return types.MessageReceipt{ + ExitCode: exitCode, + Return: []byte{}, + GasUsed: gasAmount, + } +} diff --git a/pkg/vm/vmcontext/vmcontext.go b/pkg/vm/vmcontext/vmcontext.go new file mode 100644 index 0000000000..7749650a06 --- /dev/null +++ b/pkg/vm/vmcontext/vmcontext.go @@ -0,0 +1,888 @@ +package vmcontext + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "time" + + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + cbor "github.com/ipfs/go-ipld-cbor" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/exitcode" + "github.com/filecoin-project/go-state-types/network" + "github.com/ipfs/go-cid" + logging "github.com/ipfs/go-log/v2" + "github.com/pkg/errors" + "golang.org/x/xerrors" + + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/pkg/vm/dispatch" + "github.com/filecoin-project/venus/pkg/vm/gas" + "github.com/filecoin-project/venus/pkg/vm/runtime" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/cron" + initActor "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/reward" + types "github.com/filecoin-project/venus/venus-shared/chain" + types2 "github.com/filecoin-project/venus/venus-shared/stmgr" +) + +const MaxCallDepth = 4096 + +var vmlog = logging.Logger("vm.context") + +// VM holds the stateView and executes messages over the stateView. +type VM struct { + context context.Context + actorImpls ActorImplLookup + bsstore *blockstoreutil.BufferedBS + store cbor.IpldStore + + currentEpoch abi.ChainEpoch + pricelist gas.Pricelist + + vmDebug bool // open debug or not + debugger *VMDebugMsg + vmOption VmOption + + baseCircSupply abi.TokenAmount + + State tree.Tree +} + +func (vm *VM) ApplyImplicitMessage(msg types.ChainMsg) (*Ret, error) { + unsignedMsg := msg.VMMessage() + + imsg := VmMessage{ + From: unsignedMsg.From, + To: unsignedMsg.To, + Value: unsignedMsg.Value, + Method: unsignedMsg.Method, + Params: unsignedMsg.Params, + } + vm.SetCurrentEpoch(vm.vmOption.Epoch) + return vm.applyImplicitMessage(imsg) +} + +// ActorImplLookup provides access To upgradeable actor code. +type ActorImplLookup interface { + GetActorImpl(code cid.Cid, rt runtime.Runtime) (dispatch.Dispatcher, *dispatch.ExcuteError) +} + +func VmMessageFromUnsignedMessage(msg *types.Message) VmMessage { //nolint + return VmMessage{ + From: msg.From, + To: msg.To, + Value: msg.Value, + Method: msg.Method, + Params: msg.Params, + } +} + +// implement VMInterpreter for VM +var _ VMInterpreter = (*VM)(nil) + +// NewVM creates a new runtime for executing messages. +// Dragons: change To take a root and the store, build the tree internally +func NewVM(ctx context.Context, actorImpls ActorImplLookup, vmOption VmOption) (*VM, error) { + buf := blockstoreutil.NewBufferedBstore(vmOption.Bsstore) + cst := cbor.NewCborStore(buf) + var st tree.Tree + var err error + if vmOption.PRoot == cid.Undef { + //just for chain gen + st, err = tree.NewState(cst, tree.StateTreeVersion1) + if err != nil { + panic(xerrors.Errorf("create state error, should never come here")) + } + } else { + st, err = tree.LoadState(context.Background(), cst, vmOption.PRoot) + if err != nil { + return nil, err + } + } + + baseCirc, err := vmOption.CircSupplyCalculator(ctx, vmOption.Epoch, st) + if err != nil { + return nil, err + } + + return &VM{ + context: context.Background(), + actorImpls: actorImpls, + bsstore: buf, + store: cst, + State: st, + vmOption: vmOption, + baseCircSupply: baseCirc, + // loaded during execution + // currentEpoch: .., + }, nil +} + +// nolint +func (vm *VM) setDebugger() { + vm.debugger = NewVMDebugMsg() + vm.vmDebug = true +} + +// ApplyGenesisMessage forces the execution of a message in the vm actor. +// +// This Method is intended To be used in the generation of the genesis block only. +func (vm *VM) ApplyGenesisMessage(from address.Address, to address.Address, method abi.MethodNum, value abi.TokenAmount, params interface{}) (*Ret, error) { + // normalize From addr + var ok bool + if from, ok = vm.normalizeAddress(from); !ok { + runtime.Abort(exitcode.SysErrSenderInvalid) + } + + // build internal message + imsg := VmMessage{ + From: from, + To: to, + Value: value, + Method: method, + Params: params, + } + + vm.SetCurrentEpoch(0) + ret, err := vm.applyImplicitMessage(imsg) + if err != nil { + return ret, err + } + + // commit + if _, err := vm.Flush(); err != nil { + return nil, err + } + + return ret, nil +} + +// ContextStore provides access To specs-actors adt library. +// +// This type of store is used To access some internal actor stateView. +func (vm *VM) ContextStore() adt.Store { + return adt.WrapStore(vm.context, vm.store) +} + +func (vm *VM) normalizeAddress(addr address.Address) (address.Address, bool) { + // short-circuit if the address is already an ID address + if addr.Protocol() == address.ID { + return addr, true + } + + // resolve the target address via the InitActor, and attempt To load stateView. + initActorEntry, found, err := vm.State.GetActor(vm.context, initActor.Address) + if err != nil { + panic(errors.Wrapf(err, "failed To load init actor")) + } + if !found { + panic(errors.Wrapf(err, "no init actor")) + } + + // get a view into the actor stateView + initActorState, err := initActor.Load(adt.WrapStore(vm.context, vm.store), initActorEntry) + if err != nil { + panic(err) + } + + idAddr, found, err := initActorState.ResolveAddress(addr) + if !found { + return address.Undef, false + } + if err != nil { + panic(err) + } + return idAddr, true +} + +// ApplyTipSetMessages implements interpreter.VMInterpreter +func (vm *VM) ApplyTipSetMessages(blocks []types.BlockMessagesInfo, ts *types.TipSet, parentEpoch, epoch abi.ChainEpoch, cb ExecCallBack) (cid.Cid, []types.MessageReceipt, error) { + toProcessTipset := time.Now() + var receipts []types.MessageReceipt + pstate, _ := vm.State.Flush(vm.context) + for i := parentEpoch; i < epoch; i++ { + if i > parentEpoch { + // run cron for null rounds if any + cronMessage := makeCronTickMessage() + ret, err := vm.applyImplicitMessage(cronMessage) + if err != nil { + return cid.Undef, nil, err + } + pstate, err = vm.Flush() + if err != nil { + return cid.Undef, nil, xerrors.Errorf("can not Flush vm State To db %vs", err) + } + if cb != nil { + if err := cb(cid.Undef, cronMessage, ret); err != nil { + return cid.Undef, nil, xerrors.Errorf("callback failed on cron message: %w", err) + } + } + } + // handle State forks + // XXX: The State tree + forkedCid, err := vm.vmOption.Fork.HandleStateForks(vm.context, pstate, i, ts) + if err != nil { + return cid.Undef, nil, xerrors.Errorf("hand fork error: %v", err) + } + vmlog.Debugf("after fork root: %s\n", forkedCid) + if pstate != forkedCid { + err = vm.State.At(forkedCid) + if err != nil { + return cid.Undef, nil, xerrors.Errorf("load fork cid error: %v", err) + } + } + vm.SetCurrentEpoch(i + 1) + } + vmlog.Debugf("process tipset fork: %v\n", time.Since(toProcessTipset).Milliseconds()) + // create message tracker + // Note: the same message could have been included by more than one miner + seenMsgs := make(map[cid.Cid]struct{}) + + // process messages on each block + for index, blkInfo := range blocks { + toProcessBlock := time.Now() + if blkInfo.Block.Miner.Protocol() != address.ID { + panic("precond failure: block miner address must be an IDAddress") + } + + // initial miner penalty and gas rewards + // Note: certain msg execution failures can cause the miner To pay for the gas + minerPenaltyTotal := big.Zero() + minerGasRewardTotal := big.Zero() + + // Process BLS messages From the block + for _, m := range append(blkInfo.BlsMessages, blkInfo.SecpkMessages...) { + // do not recompute already seen messages + mcid := m.VMMessage().Cid() + if _, found := seenMsgs[mcid]; found { + continue + } + + // apply message + ret, err := vm.applyMessage(m.VMMessage(), m.ChainLength()) + if err != nil { + return cid.Undef, nil, xerrors.Errorf("execute message error %s : %v", mcid, err) + } + // accumulate result + minerPenaltyTotal = big.Add(minerPenaltyTotal, ret.OutPuts.MinerPenalty) + minerGasRewardTotal = big.Add(minerGasRewardTotal, ret.OutPuts.MinerTip) + receipts = append(receipts, ret.Receipt) + if cb != nil { + if err := cb(mcid, VmMessageFromUnsignedMessage(m.VMMessage()), ret); err != nil { + return cid.Undef, nil, err + } + } + // flag msg as seen + seenMsgs[mcid] = struct{}{} + + //write debug messager + if vm.vmDebug { + rootCid, _ := vm.Flush() + + vm.debugger.Println("message:", mcid, " root:", rootCid) + msgGasOutput, _ := json.MarshalIndent(ret.OutPuts, "", "\t") + vm.debugger.Println(string(msgGasOutput)) + + var valuedTraces []*types2.GasTrace + for _, trace := range ret.GasTracker.ExecutionTrace.GasCharges { + if trace.TotalGas > 0 { + valuedTraces = append(valuedTraces, trace) + } + } + tracesBytes, _ := json.MarshalIndent(valuedTraces, "", "\t") + vm.debugger.Println(string(tracesBytes)) + } + } + + // Pay block reward. + // Dragons: missing final protocol design on if/how To determine the nominal power + rewardMessage := makeBlockRewardMessage(blkInfo.Block.Miner, minerPenaltyTotal, minerGasRewardTotal, blkInfo.Block.ElectionProof.WinCount) + ret, err := vm.applyImplicitMessage(rewardMessage) + if err != nil { + return cid.Undef, nil, err + } + if cb != nil { + if err := cb(cid.Undef, rewardMessage, ret); err != nil { + return cid.Undef, nil, xerrors.Errorf("callback failed on reward message: %w", err) + } + } + + if vm.vmDebug { + root, _ := vm.State.Flush(context.TODO()) + vm.debugger.Println("reward: ", index, " root: ", root) + } + vmlog.Infof("process block %v time %v", index, time.Since(toProcessBlock).Milliseconds()) + } + + // cron tick + toProcessCron := time.Now() + cronMessage := makeCronTickMessage() + + ret, err := vm.applyImplicitMessage(cronMessage) + if err != nil { + return cid.Undef, nil, err + } + if cb != nil { + if err := cb(cid.Undef, cronMessage, ret); err != nil { + return cid.Undef, nil, xerrors.Errorf("callback failed on cron message: %w", err) + } + } + + vmlog.Infof("process cron: %v", time.Since(toProcessCron).Milliseconds()) + if vm.vmDebug { + root, _ := vm.State.Flush(context.TODO()) + vm.debugger.Printfln("after cron root: %s", root) + + receipt, _ := json.MarshalIndent(receipts, "", "\t") + vm.debugger.Println(string(receipt)) + vm.debugger.WriteToTerminal() + } + // commit stateView + root, err := vm.Flush() + if err != nil { + return cid.Undef, nil, err + } + //copy to db + return root, receipts, nil +} + +// applyImplicitMessage applies messages automatically generated by the vm itself. +// +// This messages do not consume client gas and must not fail. +func (vm *VM) applyImplicitMessage(imsg VmMessage) (*Ret, error) { + // implicit messages gas is tracked separatly and not paid by the miner + gasTank := gas.NewGasTracker(constants.BlockGasLimit * 10000) + + // the execution of the implicit messages is simpler than full external/actor-actor messages + // execution: + // 1. load From actor + // 2. build new context + // 3. invoke message + + // 1. load From actor + fromActor, found, err := vm.State.GetActor(vm.context, imsg.From) + if err != nil { + return nil, err + } + if !found { + return nil, fmt.Errorf("implicit message `From` field actor not found, addr: %s", imsg.From) + } + // 2. build context + topLevel := topLevelContext{ + originatorStableAddress: imsg.From, + originatorCallSeq: fromActor.Nonce, // Implied Nonce is that of the actor before incrementing. + newActorAddressCount: 0, + } + + gasBsstore := &GasChargeBlockStore{ + inner: vm.bsstore, + pricelist: vm.pricelist, + gasTank: gasTank, + } + cst := cbor.NewCborStore(gasBsstore) + ctx := newInvocationContext(vm, cst, &topLevel, imsg, gasTank, vm.vmOption.Rnd, nil) + + // 3. invoke message + ret, code := ctx.invoke() + if code.IsError() { + return nil, fmt.Errorf("invalid exit code %d during implicit message execution: From %s, To %s, Method %d, Value %s, Params %v", + code, imsg.From, imsg.To, imsg.Method, imsg.Value, imsg.Params) + } + return &Ret{ + GasTracker: gasTank, + OutPuts: gas.GasOutputs{}, + Receipt: types.MessageReceipt{ + ExitCode: code, + Return: ret, + GasUsed: 0, + }, + }, nil +} + +// Get the buffered blockstore associated with the VM. This includes any temporary blocks produced +// during this VM's execution. +func (vm *VM) ActorStore(ctx context.Context) adt.Store { + return adt.WrapStore(ctx, vm.store) +} + +// todo estimate gasLimit +func (vm *VM) ApplyMessage(msg types.ChainMsg) (*Ret, error) { + return vm.applyMessage(msg.VMMessage(), msg.ChainLength()) +} + +// applyMessage applies the message To the current stateView. +func (vm *VM) applyMessage(msg *types.Message, onChainMsgSize int) (*Ret, error) { + vm.SetCurrentEpoch(vm.vmOption.Epoch) + // This Method does not actually execute the message itself, + // but rather deals with the pre/post processing of a message. + // (see: `invocationContext.invoke()` for the dispatch and execution) + // initiate gas tracking + gasTank := gas.NewGasTracker(msg.GasLimit) + // pre-send + // 1. charge for message existence + // 2. load sender actor + // 3. check message seq number + // 4. check sender gas fee is enough + // 5. increment message seq number + // 6. withheld maximum gas From _sender_ + // 7. snapshot stateView + + // 1. charge for bytes used in chain + msgGasCost := vm.pricelist.OnChainMessage(onChainMsgSize) //todo get price list by height + ok := gasTank.TryCharge(msgGasCost) + if !ok { + gasOutputs := gas.ZeroGasOutputs() + gasOutputs.MinerPenalty = big.Mul(vm.vmOption.BaseFee, big.NewInt(msgGasCost.Total())) + // Invalid message; insufficient gas limit To pay for the on-chain message size. + // Note: the miner needs To pay the full msg cost, not what might have been partially consumed + return &Ret{ + GasTracker: gasTank, + OutPuts: gasOutputs, + Receipt: Failure(exitcode.SysErrOutOfGas, 0), + }, nil + } + + minerPenaltyAmount := big.Mul(vm.vmOption.BaseFee, big.NewInt(msg.GasLimit)) + + //2. load sender actor and check send whether to be an account + fromActor, found, err := vm.State.GetActor(vm.context, msg.From) + if err != nil { + return nil, err + } + if !found { + // Execution error; sender does not exist at time of message execution. + gasOutputs := gas.ZeroGasOutputs() + gasOutputs.MinerPenalty = minerPenaltyAmount + return &Ret{ + GasTracker: gasTank, + OutPuts: gasOutputs, + Receipt: Failure(exitcode.SysErrSenderInvalid, 0), + }, nil + } + + if !builtin.IsAccountActor(fromActor.Code) /*!fromActor.Code.Equals(builtin.AccountActorCodeID)*/ { + // Execution error; sender is not an account. + gasOutputs := gas.ZeroGasOutputs() + gasOutputs.MinerPenalty = minerPenaltyAmount + return &Ret{ + GasTracker: gasTank, + OutPuts: gasOutputs, + Receipt: Failure(exitcode.SysErrSenderInvalid, 0), + }, nil + } + + // 3. make sure this is the right message order for fromActor + if msg.Nonce != fromActor.Nonce { + // Execution error; invalid seq number. + gasOutputs := gas.ZeroGasOutputs() + gasOutputs.MinerPenalty = minerPenaltyAmount + return &Ret{ + GasTracker: gasTank, + OutPuts: gasOutputs, + Receipt: Failure(exitcode.SysErrSenderStateInvalid, 0), + }, nil + } + + // 4. Check sender gas fee is enough + gasLimitCost := big.Mul(big.NewIntUnsigned(uint64(msg.GasLimit)), msg.GasFeeCap) + if fromActor.Balance.LessThan(gasLimitCost) { + // Execution error; sender does not have sufficient funds To pay for the gas limit. + gasOutputs := gas.ZeroGasOutputs() + gasOutputs.MinerPenalty = minerPenaltyAmount + return &Ret{ + GasTracker: gasTank, + OutPuts: gasOutputs, + Receipt: Failure(exitcode.SysErrSenderStateInvalid, 0), + }, nil + } + + gasHolder := &types.Actor{Balance: big.NewInt(0)} + if err := vm.transferToGasHolder(msg.From, gasHolder, gasLimitCost); err != nil { + return nil, xerrors.Errorf("failed To withdraw gas funds: %w", err) + } + + // 5. increment sender Nonce + if err = vm.State.MutateActor(msg.From, func(msgFromActor *types.Actor) error { + msgFromActor.IncrementSeqNum() + return nil + }); err != nil { + return nil, err + } + + // 7. snapshot stateView + // Even if the message fails, the following accumulated changes will be applied: + // - CallSeqNumber increment + // - sender balance withheld + err = vm.snapshot() + if err != nil { + return nil, err + } + defer vm.clearSnapshot() + + // send + // 1. build internal message + // 2. build invocation context + // 3. process the msg + topLevel := topLevelContext{ + originatorStableAddress: msg.From, + originatorCallSeq: msg.Nonce, + newActorAddressCount: 0, + } + + // 1. build internal msg + imsg := VmMessage{ + From: msg.From, + To: msg.To, + Value: msg.Value, + Method: msg.Method, + Params: msg.Params, + } + + // 2. build invocation context + gasBsstore := &GasChargeBlockStore{ + inner: vm.bsstore, + pricelist: vm.pricelist, + gasTank: gasTank, + } + cst := cbor.NewCborStore(gasBsstore) + // cst.Atlas = vm.store.Atlas // associate the atlas. //todo + + //Note replace from and to address here + ctx := newInvocationContext(vm, cst, &topLevel, imsg, gasTank, vm.vmOption.Rnd, nil) + + // 3. invoke + ret, code := ctx.invoke() + // post-send + // 1. charge gas for putting the return Value on the chain + // 2. settle gas money around (unused_gas -> sender) + // 3. success! + + // 1. charge for the space used by the return Value + // Note: the GasUsed in the message receipt does not + ok = gasTank.TryCharge(vm.pricelist.OnChainReturnValue(len(ret))) + if !ok { + // Insufficient gas remaining To cover the on-chain return Value; proceed as in the case + // of Method execution failure. + code = exitcode.SysErrOutOfGas + ret = []byte{} + } + + // Roll back all stateView if the receipt's exit code is not ok. + // This is required in addition To revert within the invocation context since top level messages can fail for + // more reasons than internal ones. Invocation context still needs its own revert so actors can recover and + // proceed From a nested call failure. + if code != exitcode.Ok { + if err := vm.revert(); err != nil { + return nil, err + } + } + + // 2. settle gas money around (unused_gas -> sender) + gasUsed := gasTank.GasUsed + if gasUsed < 0 { + gasUsed = 0 + } + + burn, err := vm.shouldBurn(vm.context, msg, code) + if err != nil { + return nil, xerrors.Errorf("deciding whether should burn failed: %w", err) + } + + gasOutputs := gas.ComputeGasOutputs(gasUsed, msg.GasLimit, vm.vmOption.BaseFee, msg.GasFeeCap, msg.GasPremium, burn) + + if err := vm.transferFromGasHolder(builtin.BurntFundsActorAddr, gasHolder, gasOutputs.BaseFeeBurn); err != nil { + return nil, xerrors.Errorf("failed To burn base fee: %w", err) + } + + if err := vm.transferFromGasHolder(reward.Address, gasHolder, gasOutputs.MinerTip); err != nil { + return nil, xerrors.Errorf("failed To give miner gas reward: %w", err) + } + + if err := vm.transferFromGasHolder(builtin.BurntFundsActorAddr, gasHolder, gasOutputs.OverEstimationBurn); err != nil { + return nil, xerrors.Errorf("failed To burn overestimation fee: %w", err) + } + + // refund unused gas + if err := vm.transferFromGasHolder(msg.From, gasHolder, gasOutputs.Refund); err != nil { + return nil, xerrors.Errorf("failed To refund gas: %w", err) + } + + if big.Cmp(big.NewInt(0), gasHolder.Balance) != 0 { + return nil, xerrors.Errorf("gas handling math is wrong") + } + + // 3. Success! + return &Ret{ + GasTracker: gasTank, + OutPuts: gasOutputs, + Receipt: types.MessageReceipt{ + ExitCode: code, + Return: ret, + GasUsed: gasUsed, + }, + }, nil +} + +func (vm *VM) shouldBurn(ctx context.Context, msg *types.Message, errcode exitcode.ExitCode) (bool, error) { + if vm.NtwkVersion() <= network.Version12 { + // Check to see if we should burn funds. We avoid burning on successful + // window post. This won't catch _indirect_ window post calls, but this + // is the best we can get for now. + if vm.currentEpoch > vm.vmOption.Fork.GetForkUpgrade().UpgradeClausHeight && errcode == exitcode.Ok && msg.Method == miner.Methods.SubmitWindowedPoSt { + // Ok, we've checked the _method_, but we still need to check + // the target actor. It would be nice if we could just look at + // the trace, but I'm not sure if that's safe? + if toActor, _, err := vm.State.GetActor(vm.context, msg.To); err != nil { + // If the actor wasn't found, we probably deleted it or something. Move on. + if !xerrors.Is(err, types.ErrActorNotFound) { + // Otherwise, this should never fail and something is very wrong. + return false, xerrors.Errorf("failed to lookup target actor: %w", err) + } + } else if builtin.IsStorageMinerActor(toActor.Code) { + // Ok, this is a storage miner and we've processed a window post. Remove the burn. + return false, nil + } + } + + return true, nil + } + + // Any "don't burn" rules from Network v13 onwards go here, for now we always return true + return true, nil +} + +// transfer debits money From one account and credits it To another. +// avoid calling this Method with a zero amount else it will perform unnecessary actor loading. +// +// WARNING: this Method will panic if the the amount is negative, accounts dont exist, or have inssuficient funds. +// +// Note: this is not idiomatic, it follows the Spec expectations for this Method. +func (vm *VM) transfer(debitFrom address.Address, creditTo address.Address, amount abi.TokenAmount) { + if amount.LessThan(big.Zero()) { + runtime.Abortf(exitcode.SysErrForbidden, "attempt To transfer negative Value %s From %s To %s", amount, debitFrom, creditTo) + } + + // retrieve debit account + fromActor, found, err := vm.State.GetActor(vm.context, debitFrom) + if err != nil { + panic(err) + } + if !found { + panic(fmt.Errorf("unreachable: debit account not found. %s", err)) + } + + // retrieve credit account + toActor, found, err := vm.State.GetActor(vm.context, creditTo) + if err != nil { + panic(err) + } + if !found { + panic(fmt.Errorf("unreachable: credit account not found. %s", err)) + } + + // check that account has enough balance for transfer + if fromActor.Balance.LessThan(amount) { + runtime.Abortf(exitcode.SysErrInsufficientFunds, "sender %s insufficient balance %s To transfer %s To %s", amount, fromActor.Balance, debitFrom, creditTo) + } + + // debit funds + fromActor.Balance = big.Sub(fromActor.Balance, amount) + if err := vm.State.SetActor(vm.context, debitFrom, fromActor); err != nil { + panic(err) + } + + // credit funds + toActor.Balance = big.Add(toActor.Balance, amount) + if err := vm.State.SetActor(vm.context, creditTo, toActor); err != nil { + panic(err) + } +} + +func (vm *VM) getActorImpl(code cid.Cid, runtime2 runtime.Runtime) dispatch.Dispatcher { + actorImpl, err := vm.actorImpls.GetActorImpl(code, runtime2) + if err != nil { + runtime.Abort(exitcode.SysErrInvalidReceiver) + } + return actorImpl +} + +// +// implement runtime.Runtime for VM +// + +var _ runtime.Runtime = (*VM)(nil) + +// CurrentEpoch implements runtime.Runtime. +func (vm *VM) CurrentEpoch() abi.ChainEpoch { + return vm.currentEpoch +} + +func (vm *VM) SetCurrentEpoch(current abi.ChainEpoch) { + vm.currentEpoch = current + vm.pricelist = vm.vmOption.GasPriceSchedule.PricelistByEpoch(current) +} + +func (vm *VM) NtwkVersion() network.Version { + return vm.vmOption.NtwkVersionGetter(context.TODO(), vm.currentEpoch) +} + +func (vm *VM) transferToGasHolder(addr address.Address, gasHolder *types.Actor, amt abi.TokenAmount) error { + if amt.LessThan(big.NewInt(0)) { + return xerrors.Errorf("attempted To transfer negative Value To gas holder") + } + return vm.State.MutateActor(addr, func(a *types.Actor) error { + if err := deductFunds(a, amt); err != nil { + return err + } + depositFunds(gasHolder, amt) + return nil + }) +} + +func (vm *VM) transferFromGasHolder(addr address.Address, gasHolder *types.Actor, amt abi.TokenAmount) error { + if amt.LessThan(big.NewInt(0)) { + return xerrors.Errorf("attempted To transfer negative Value From gas holder") + } + + if amt.Equals(big.NewInt(0)) { + return nil + } + + return vm.State.MutateActor(addr, func(a *types.Actor) error { + if err := deductFunds(gasHolder, amt); err != nil { + return err + } + depositFunds(a, amt) + return nil + }) +} + +func (vm *VM) StateTree() tree.Tree { + return vm.State +} + +func (vm *VM) GetCircSupply(ctx context.Context) (abi.TokenAmount, error) { + // Before v15, this was recalculated on each invocation as the state tree was mutated + if vm.vmOption.NtwkVersionGetter(ctx, vm.vmOption.Epoch) <= network.Version14 { + return vm.vmOption.CircSupplyCalculator(ctx, vm.vmOption.Epoch, vm.State) + } + + return vm.baseCircSupply, nil +} + +func deductFunds(act *types.Actor, amt abi.TokenAmount) error { + if act.Balance.LessThan(amt) { + return fmt.Errorf("not enough funds") + } + + act.Balance = big.Sub(act.Balance, amt) + return nil +} + +func depositFunds(act *types.Actor, amt abi.TokenAmount) { + act.Balance = big.Add(act.Balance, amt) +} + +// +// implement runtime.MessageInfo for VmMessage +// + +var _ rt5.Message = (*VmMessage)(nil) + +type VmMessage struct { //nolint + From address.Address + To address.Address + Value abi.TokenAmount + Method abi.MethodNum + Params interface{} +} + +// ValueReceived implements runtime.MessageInfo. +func (msg VmMessage) ValueReceived() abi.TokenAmount { + return msg.Value +} + +// Caller implements runtime.MessageInfo. +func (msg VmMessage) Caller() address.Address { + return msg.From +} + +// Receiver implements runtime.MessageInfo. +func (msg VmMessage) Receiver() address.Address { + return msg.To +} + +func (vm *VM) revert() error { + return vm.State.Revert() +} + +func (vm *VM) snapshot() error { + err := vm.State.Snapshot(vm.context) + if err != nil { + return err + } + return nil +} + +func (vm *VM) clearSnapshot() { + vm.State.ClearSnapshot() +} + +//nolint +func (vm *VM) Flush() (tree.Root, error) { + // Flush all blocks out of the store + if root, err := vm.State.Flush(vm.context); err != nil { + return cid.Undef, err + } else { + if err := blockstoreutil.CopyBlockstore(context.TODO(), vm.bsstore.Write(), vm.bsstore.Read()); err != nil { + return cid.Undef, xerrors.Errorf("copying tree: %w", err) + } + return root, nil + } +} + +// +// utils +// + +func makeBlockRewardMessage(blockMiner address.Address, penalty abi.TokenAmount, gasReward abi.TokenAmount, winCount int64) VmMessage { + params := &reward.AwardBlockRewardParams{ + Miner: blockMiner, + Penalty: penalty, + GasReward: gasReward, + WinCount: winCount, + } + buf := new(bytes.Buffer) + err := params.MarshalCBOR(buf) + if err != nil { + panic(fmt.Errorf("failed To encode built-in block reward. %s", err)) + } + return VmMessage{ + From: builtin.SystemActorAddr, + To: reward.Address, + Value: big.Zero(), + Method: reward.Methods.AwardBlockReward, + Params: buf.Bytes(), + } +} + +func makeCronTickMessage() VmMessage { + return VmMessage{ + From: builtin.SystemActorAddr, + To: cron.Address, + Value: big.Zero(), + Method: cron.Methods.EpochTick, + Params: []byte{}, + } +} diff --git a/pkg/vm/vmcontext/vmdebugger.go b/pkg/vm/vmcontext/vmdebugger.go new file mode 100644 index 0000000000..ac29df3ea9 --- /dev/null +++ b/pkg/vm/vmcontext/vmdebugger.go @@ -0,0 +1,36 @@ +package vmcontext + +import ( + "fmt" + "io/ioutil" + "strings" +) + +//VMDebugMsg for vm debug +type VMDebugMsg struct { + buf *strings.Builder +} + +func NewVMDebugMsg() *VMDebugMsg { + return &VMDebugMsg{buf: &strings.Builder{}} +} + +func (debug *VMDebugMsg) Printfln(msg string, args ...interface{}) { + debug.buf.WriteString(fmt.Sprintf(msg, args...)) + debug.buf.WriteString("\n") +} + +func (debug *VMDebugMsg) Println(args ...interface{}) { + debug.buf.WriteString(fmt.Sprint(args...)) + debug.buf.WriteString("\n") +} + +//WriteToTerminal write debug message to terminal +func (debug *VMDebugMsg) WriteToTerminal() { + fmt.Println(debug.buf.String()) +} + +//WriteToFile write debug message to file +func (debug *VMDebugMsg) WriteToFile(fileName string) error { + return ioutil.WriteFile(fileName, []byte(debug.buf.String()), 0777) +} diff --git a/pkg/vmsupport/syscalls.go b/pkg/vmsupport/syscalls.go new file mode 100644 index 0000000000..b4e75c0c51 --- /dev/null +++ b/pkg/vmsupport/syscalls.go @@ -0,0 +1,168 @@ +package vmsupport + +import ( + "context" + "errors" + "fmt" + goruntime "runtime" + "sync" + + "github.com/ipfs/go-cid" + cbornode "github.com/ipfs/go-ipld-cbor" + logging "github.com/ipfs/go-log/v2" + "github.com/minio/blake2b-simd" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + proof5 "github.com/filecoin-project/specs-actors/v5/actors/runtime/proof" + + vmr "github.com/filecoin-project/specs-actors/v7/actors/runtime" + proof7 "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" + + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper/impl" + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" +) + +var log = logging.Logger("vmsupport") + +type faultChecker interface { + VerifyConsensusFault(ctx context.Context, h1, h2, extra []byte, curEpoch abi.ChainEpoch, msg vm.VmMessage, gasIpld cbornode.IpldStore, view vm.SyscallsStateView, getter vmcontext.LookbackStateGetter) (*vmr.ConsensusFault, error) +} + +// Syscalls contains the concrete implementation of VM system calls, including connection to +// proof verification and blockchain inspection. +// Errors returned by these methods are intended to be returned to the actor code to respond to: they must be +// entirely deterministic and repeatable by other implementations. +// Any non-deterministic error will instead trigger a panic. +// TODO: determine a more robust mechanism for distinguishing transient runtime failures from deterministic errors +// in VM and supporting code. https://github.com/filecoin-project/venus/issues/3844 +type Syscalls struct { + faultChecker faultChecker + verifier ffiwrapper.Verifier +} + +func NewSyscalls(faultChecker faultChecker, verifier ffiwrapper.Verifier) *Syscalls { + return &Syscalls{ + faultChecker: faultChecker, + verifier: verifier, + } +} + +func (s *Syscalls) VerifyReplicaUpdate(update proof7.ReplicaUpdateInfo) error { + ok, err := s.verifier.VerifyReplicaUpdate(update) + if err != nil { + return xerrors.Errorf("failed to verify replica update: %w", err) + } + + if !ok { + return fmt.Errorf("invalid replica update") + } + + return nil +} + +// VerifySignature Verifies that a signature is valid for an address and plaintext. +func (s *Syscalls) VerifySignature(ctx context.Context, view vm.SyscallsStateView, signature crypto.Signature, signer address.Address, plaintext []byte) error { + return state.NewSignatureValidator(view).ValidateSignature(ctx, plaintext, signer, signature) +} + +// HashBlake2b Hashes input data using blake2b with 256 bit output. +func (s *Syscalls) HashBlake2b(data []byte) [32]byte { + return blake2b.Sum256(data) +} + +//ComputeUnsealedSectorCID Computes an unsealed sector CID (CommD) from its constituent piece CIDs (CommPs) and sizes. +func (s *Syscalls) ComputeUnsealedSectorCID(_ context.Context, proof abi.RegisteredSealProof, pieces []abi.PieceInfo) (cid.Cid, error) { + return impl.GenerateUnsealedCID(proof, pieces) +} + +// VerifySeal returns true if the sealing operation from which its inputs were +// derived was valid, and false if not. +func (s *Syscalls) VerifySeal(_ context.Context, info proof5.SealVerifyInfo) error { + ok, err := s.verifier.VerifySeal(info) + if err != nil { + return err + } else if !ok { + return fmt.Errorf("seal invalid") + } + return nil +} + +var BatchSealVerifyParallelism = 2 * goruntime.NumCPU() + +//BatchVerifySeals batch verify windows post +func (s *Syscalls) BatchVerifySeals(ctx context.Context, vis map[address.Address][]proof5.SealVerifyInfo) (map[address.Address][]bool, error) { + out := make(map[address.Address][]bool) + + sema := make(chan struct{}, BatchSealVerifyParallelism) + + var wg sync.WaitGroup + for addr, seals := range vis { + results := make([]bool, len(seals)) + out[addr] = results + + for i, seal := range seals { + wg.Add(1) + go func(ma address.Address, ix int, svi proof5.SealVerifyInfo, res []bool) { + defer wg.Done() + sema <- struct{}{} + + if err := s.VerifySeal(ctx, svi); err != nil { + log.Warnw("seal verify in batch failed", "miner", ma, "index", ix, "err", err) + res[ix] = false + } else { + res[ix] = true + } + + <-sema + }(addr, i, seal, results) + } + } + wg.Wait() + + return out, nil +} + +func (s *Syscalls) VerifyAggregateSeals(aggregate proof5.AggregateSealVerifyProofAndInfos) error { + ok, err := s.verifier.VerifyAggregateSeals(aggregate) + if err != nil { + return xerrors.Errorf("failed to verify aggregated PoRep: %w", err) + } + if !ok { + return fmt.Errorf("invalid aggregate proof") + } + + return nil +} + +//VerifyPoSt verify windows post +func (s *Syscalls) VerifyPoSt(ctx context.Context, info proof5.WindowPoStVerifyInfo) error { + ok, err := s.verifier.VerifyWindowPoSt(ctx, info) + if err != nil { + return err + } + if !ok { + return errors.New("window PoSt verification failed") + } + return nil +} + +// Verifies that two block headers provide proof of a consensus fault: +// - both headers mined by the same actor +// - headers are different +// - first header is of the same or lower epoch as the second +// - at least one of the headers appears in the current chain at or after epoch `earliest` +// - the headers provide evidence of a fault (see the spec for the different fault types). +// The parameters are all serialized block headers. The third "extra" parameter is consulted only for +// the "parent grinding fault", in which case it must be the sibling of h1 (same parent tipset) and one of the +// blocks in the parent of h2 (i.e. h2's grandparent). +// Returns nil and an error if the headers don't prove a fault. +func (s *Syscalls) VerifyConsensusFault(ctx context.Context, h1, h2, extra []byte, curEpoch abi.ChainEpoch, msg vm.VmMessage, gasIpld cbornode.IpldStore, view vm.SyscallsStateView, getter vmcontext.LookbackStateGetter) (*vmr.ConsensusFault, error) { + return s.faultChecker.VerifyConsensusFault(ctx, h1, h2, extra, curEpoch, msg, gasIpld, view, getter) +} diff --git a/pkg/vmsupport/util.go b/pkg/vmsupport/util.go new file mode 100644 index 0000000000..d96dbab7b6 --- /dev/null +++ b/pkg/vmsupport/util.go @@ -0,0 +1,19 @@ +package vmsupport + +import ( + "context" + "fmt" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + cbornode "github.com/ipfs/go-ipld-cbor" + + rt5 "github.com/filecoin-project/specs-actors/v5/actors/runtime" +) + +type NilFaultChecker struct { +} + +func (n *NilFaultChecker) VerifyConsensusFault(_ context.Context, _, _, _ []byte, _ abi.ChainEpoch, _ vm.VmMessage, _ cbornode.IpldStore, _ vm.SyscallsStateView, _ vmcontext.LookbackStateGetter) (*rt5.ConsensusFault, error) { + return nil, fmt.Errorf("empty chain cannot have consensus fault") +} diff --git a/pkg/wallet/backend.go b/pkg/wallet/backend.go new file mode 100644 index 0000000000..971224a176 --- /dev/null +++ b/pkg/wallet/backend.go @@ -0,0 +1,40 @@ +package wallet + +import ( + "context" + "github.com/filecoin-project/go-address" + + "github.com/filecoin-project/venus/pkg/crypto" +) + +// Backend is the interface to represent different storage backends +// that can contain many addresses. +type Backend interface { + // Addresses returns a list of all accounts currently stored in this backend. + Addresses(ctx context.Context) []address.Address + + // Contains returns true if this backend stores the passed in address. + HasAddress(context.Context, address.Address) bool + + // Sign cryptographically signs data with the private key associated with an address. + SignBytes(context.Context, []byte, address.Address) (*crypto.Signature, error) + + // GetKeyInfo will return the keyinfo associated with address `addr` + // iff backend contains the addr. + GetKeyInfo(context.Context, address.Address) (*crypto.KeyInfo, error) + + GetKeyInfoPassphrase(context.Context, address.Address, []byte) (*crypto.KeyInfo, error) + + LockWallet(context.Context) error + UnLockWallet(context.Context, []byte) error + WalletState(context.Context) int +} + +// Importer is a specialization of a wallet backend that can import +// new keys into its permanent storage. Disk backed wallets can do this, +// hardware wallets generally cannot. +type Importer interface { + // ImportKey imports the key described by the given keyinfo + // into the backend + ImportKey(context.Context, *crypto.KeyInfo) error +} diff --git a/pkg/wallet/dsbackend.go b/pkg/wallet/dsbackend.go new file mode 100644 index 0000000000..a36a672178 --- /dev/null +++ b/pkg/wallet/dsbackend.go @@ -0,0 +1,366 @@ +package wallet + +import ( + "context" + "crypto/rand" + "reflect" + "strings" + "sync" + + "github.com/awnumar/memguard" + "github.com/filecoin-project/go-address" + ds "github.com/ipfs/go-datastore" + dsq "github.com/ipfs/go-datastore/query" + "github.com/pborman/uuid" + "github.com/pkg/errors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/repo" +) + +const ( + undetermined = iota + + Lock + Unlock +) + +var ErrInvalidPassword = errors.New("password matching failed") +var ErrRepeatPassword = errors.New("set password more than once") + +// DSBackendType is the reflect type of the DSBackend. +var DSBackendType = reflect.TypeOf(&DSBackend{}) + +// DSBackend is a wallet backend implementation for storing addresses in a datastore. +type DSBackend struct { + lk sync.RWMutex + + // TODO: use a better interface that supports time locks, encryption, etc. + ds repo.Datastore + + cache map[address.Address]struct{} + + PassphraseConf config.PassphraseConfig + + password *memguard.Enclave + unLocked map[address.Address]*crypto.KeyInfo + + state int +} + +var _ Backend = (*DSBackend)(nil) + +// NewDSBackend constructs a new backend using the passed in datastore. +func NewDSBackend(ctx context.Context, ds repo.Datastore, passphraseCfg config.PassphraseConfig, password []byte) (*DSBackend, error) { + result, err := ds.Query(ctx, dsq.Query{ + KeysOnly: true, + }) + if err != nil { + return nil, errors.Wrap(err, "failed to query datastore") + } + + list, err := result.Rest() + if err != nil { + return nil, errors.Wrap(err, "failed to read query results") + } + + addrCache := make(map[address.Address]struct{}, len(list)) + for _, el := range list { + parsedAddr, err := address.NewFromString(strings.Trim(el.Key, "/")) + if err != nil { + return nil, errors.Wrapf(err, "trying to restore invalid address: %s", el.Key) + } + addrCache[parsedAddr] = struct{}{} + } + + backend := &DSBackend{ + ds: ds, + cache: addrCache, + PassphraseConf: passphraseCfg, + unLocked: make(map[address.Address]*crypto.KeyInfo, len(addrCache)), + } + + if len(password) != 0 { + if err := backend.SetPassword(ctx, password); err != nil { + return nil, err + } + } + + return backend, nil +} + +// ImportKey loads the address in `ai` and KeyInfo `ki` into the backend +func (backend *DSBackend) ImportKey(ctx context.Context, ki *crypto.KeyInfo) error { + return backend.putKeyInfo(ctx, ki) +} + +// Addresses returns a list of all addresses that are stored in this backend. +func (backend *DSBackend) Addresses(ctx context.Context) []address.Address { + backend.lk.RLock() + defer backend.lk.RUnlock() + + var cpy []address.Address + for addr := range backend.cache { + cpy = append(cpy, addr) + } + return cpy +} + +// HasAddress checks if the passed in address is stored in this backend. +// Safe for concurrent access. +func (backend *DSBackend) HasAddress(ctx context.Context, addr address.Address) bool { + backend.lk.RLock() + defer backend.lk.RUnlock() + + _, ok := backend.cache[addr] + return ok +} + +// NewAddress creates a new address and stores it. +// Safe for concurrent access. +func (backend *DSBackend) NewAddress(ctx context.Context, protocol address.Protocol) (address.Address, error) { + backend.lk.Lock() + defer backend.lk.Unlock() + + switch protocol { + case address.BLS: + return backend.newBLSAddress(ctx) + case address.SECP256K1: + return backend.newSecpAddress(ctx) + default: + return address.Undef, errors.Errorf("Unknown address protocol %d", protocol) + } +} + +func (backend *DSBackend) newSecpAddress(ctx context.Context) (address.Address, error) { + ki, err := crypto.NewSecpKeyFromSeed(rand.Reader) + if err != nil { + return address.Undef, err + } + + if err := backend.putKeyInfo(ctx, &ki); err != nil { + return address.Undef, err + } + return ki.Address() +} + +func (backend *DSBackend) newBLSAddress(ctx context.Context) (address.Address, error) { + ki, err := crypto.NewBLSKeyFromSeed(rand.Reader) + if err != nil { + return address.Undef, err + } + + if err := backend.putKeyInfo(ctx, &ki); err != nil { + return address.Undef, err + } + return ki.Address() +} + +func (backend *DSBackend) putKeyInfo(ctx context.Context, ki *crypto.KeyInfo) error { + addr, err := ki.Address() + if err != nil { + return err + } + + key := &Key{ + ID: uuid.NewRandom(), + Address: addr, + KeyInfo: ki, + } + + var keyJSON []byte + err = backend.UsePassword(func(password []byte) error { + var err error + keyJSON, err = encryptKey(key, password, backend.PassphraseConf.ScryptN, backend.PassphraseConf.ScryptP) + return err + }) + if err != nil { + return err + } + + if err := backend.ds.Put(ctx, ds.NewKey(key.Address.String()), keyJSON); err != nil { + return errors.Wrapf(err, "failed to store new address: %s", key.Address.String()) + } + backend.cache[addr] = struct{}{} + backend.unLocked[addr] = ki + return nil +} + +// SignBytes cryptographically signs `data` using the private key `priv`. +func (backend *DSBackend) SignBytes(ctx context.Context, data []byte, addr address.Address) (*crypto.Signature, error) { + backend.lk.Lock() + ki, found := backend.unLocked[addr] + backend.lk.Unlock() + if !found { + return nil, errors.Errorf("%s is locked", addr.String()) + } + + var signature *crypto.Signature + err := ki.UsePrivateKey(func(privateKey []byte) error { + var err error + signature, err = crypto.Sign(data, privateKey, ki.SigType) + return err + }) + return signature, err +} + +// GetKeyInfo will return the private & public keys associated with address `addr` +// iff backend contains the addr. +func (backend *DSBackend) GetKeyInfo(ctx context.Context, addr address.Address) (*crypto.KeyInfo, error) { + if !backend.HasAddress(ctx, addr) { + return nil, errors.New("backend does not contain address") + } + + var key *Key + err := backend.UsePassword(func(password []byte) error { + var err error + key, err = backend.getKey(ctx, addr, password) + + return err + }) + if err != nil { + return nil, err + } + + return key.KeyInfo, nil +} + +//GetKeyInfoPassphrase get private private key from wallet, get encrypt byte from db and decrypto it with password +func (backend *DSBackend) GetKeyInfoPassphrase(ctx context.Context, addr address.Address, password []byte) (*crypto.KeyInfo, error) { + defer func() { + for i := range password { + password[i] = 0 + } + }() + if !backend.HasAddress(ctx, addr) { + return nil, errors.New("backend does not contain address") + } + + key, err := backend.getKey(ctx, addr, password) + if err != nil { + return nil, err + } + + return key.KeyInfo, nil +} + +func (backend *DSBackend) getKey(ctx context.Context, addr address.Address, password []byte) (*Key, error) { + b, err := backend.ds.Get(ctx, ds.NewKey(addr.String())) + if err != nil { + return nil, errors.Wrap(err, "failed to fetch private key from backend") + } + + return decryptKey(b, password) +} + +func (backend *DSBackend) LockWallet(ctx context.Context) error { + if backend.state == Lock { + return xerrors.Errorf("already locked") + } + + if len(backend.Addresses(ctx)) == 0 { + return xerrors.Errorf("no address need lock") + } + + for _, addr := range backend.Addresses(ctx) { + backend.lk.Lock() + delete(backend.unLocked, addr) + backend.lk.Unlock() + } + backend.cleanPassword() + backend.state = Lock + + return nil +} + +//UnLockWallet unlock wallet with password, decrypt local key in db and save to protected memory +func (backend *DSBackend) UnLockWallet(ctx context.Context, password []byte) error { + defer func() { + for i := range password { + password[i] = 0 + } + }() + if backend.state == Unlock { + return xerrors.Errorf("already unlocked") + } + + if len(backend.Addresses(ctx)) == 0 { + return xerrors.Errorf("no address need unlock") + } + + for _, addr := range backend.Addresses(ctx) { + ki, err := backend.GetKeyInfoPassphrase(ctx, addr, password) + if err != nil { + return err + } + + backend.lk.Lock() + backend.unLocked[addr] = ki + backend.lk.Unlock() + } + backend.state = Unlock + + return nil +} + +//SetPassword set password for wallet , and wallet used this password to encrypt private key +func (backend *DSBackend) SetPassword(ctx context.Context, password []byte) error { + if backend.password != nil { + return ErrRepeatPassword + } + + for _, addr := range backend.Addresses(ctx) { + ki, err := backend.GetKeyInfoPassphrase(ctx, addr, password) + if err != nil { + return err + } + backend.lk.Lock() + backend.unLocked[addr] = ki + backend.lk.Unlock() + } + if backend.state == undetermined { + backend.state = Unlock + } + + backend.setPassword(password) + + return nil +} + +//HasPassword return whether the password has been set in the wallet +func (backend *DSBackend) HasPassword() bool { + return backend.password != nil +} + +//WalletState return wallet state(lock/unlock) +func (backend *DSBackend) WalletState(ctx context.Context) int { + return backend.state +} + +func (backend *DSBackend) setPassword(password []byte) { + backend.lk.Lock() + defer backend.lk.Unlock() + + backend.password = memguard.NewEnclave(password) +} + +func (backend *DSBackend) UsePassword(f func(password []byte) error) error { + if backend.password == nil { + return f([]byte{}) + } + buf, err := backend.password.Open() + if err != nil { + return err + } + defer buf.Destroy() + + return f(buf.Bytes()) +} + +func (backend *DSBackend) cleanPassword() { + backend.lk.Lock() + defer backend.lk.Unlock() + backend.password = nil +} diff --git a/pkg/wallet/dsbackend_test.go b/pkg/wallet/dsbackend_test.go new file mode 100644 index 0000000000..9c3f6f492d --- /dev/null +++ b/pkg/wallet/dsbackend_test.go @@ -0,0 +1,178 @@ +package wallet + +import ( + "context" + "crypto/rand" + "io" + "sync" + "testing" + + "github.com/filecoin-project/venus/pkg/crypto" + + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-datastore" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/venus/pkg/config" + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestDSBackendSimple(t *testing.T) { + tf.UnitTest(t) + + ds := datastore.NewMapDatastore() + defer func() { + require.NoError(t, ds.Close()) + }() + + ctx := context.Background() + fs, err := NewDSBackend(ctx, ds, config.TestPassphraseConfig(), TestPassword) + assert.NoError(t, err) + + t.Log("empty address list on empty datastore") + assert.Len(t, fs.Addresses(ctx), 0) + + t.Log("can create new address") + addr, err := fs.NewAddress(ctx, address.SECP256K1) + assert.NoError(t, err) + + t.Log("address is stored") + assert.True(t, fs.HasAddress(ctx, addr)) + + t.Log("address is stored in repo, and back when loading fresh in a new backend") + fs2, err := NewDSBackend(ctx, ds, config.TestPassphraseConfig(), []byte("test-password")) + assert.NoError(t, err) + + assert.True(t, fs2.HasAddress(ctx, addr)) +} + +func TestDSBackendKeyPairMatchAddress(t *testing.T) { + tf.UnitTest(t) + + ds := datastore.NewMapDatastore() + defer func() { + require.NoError(t, ds.Close()) + }() + + ctx := context.Background() + fs, err := NewDSBackend(ctx, ds, config.TestPassphraseConfig(), TestPassword) + assert.NoError(t, err) + + t.Log("can create new address") + addr, err := fs.NewAddress(ctx, address.SECP256K1) + assert.NoError(t, err) + + t.Log("address is stored") + assert.True(t, fs.HasAddress(ctx, addr)) + + t.Log("address references to a secret key") + ki, err := fs.GetKeyInfo(ctx, addr) + assert.NoError(t, err) + + dAddr, err := ki.Address() + assert.NoError(t, err) + + t.Log("generated address and stored address should match") + assert.Equal(t, addr, dAddr) +} + +func TestDSBackendErrorsForUnknownAddress(t *testing.T) { + tf.UnitTest(t) + + // create 2 backends + ds1 := datastore.NewMapDatastore() + defer func() { + require.NoError(t, ds1.Close()) + }() + + ctx := context.Background() + fs1, err := NewDSBackend(ctx, ds1, config.TestPassphraseConfig(), TestPassword) + assert.NoError(t, err) + + ds2 := datastore.NewMapDatastore() + defer func() { + require.NoError(t, ds2.Close()) + }() + fs2, err := NewDSBackend(ctx, ds2, config.TestPassphraseConfig(), TestPassword) + assert.NoError(t, err) + + t.Log("can create new address in fs1") + addr, err := fs1.NewAddress(ctx, address.SECP256K1) + assert.NoError(t, err) + + t.Log("address is stored fs1") + assert.True(t, fs1.HasAddress(ctx, addr)) + + t.Log("address is not stored fs2") + assert.False(t, fs2.HasAddress(ctx, addr)) + + t.Log("address references to a secret key in fs1") + _, err = fs1.GetKeyInfo(ctx, addr) + assert.NoError(t, err) + + t.Log("address does not references to a secret key in fs2") + _, err = fs2.GetKeyInfo(ctx, addr) + assert.Error(t, err) + assert.Contains(t, "backend does not contain address", err.Error()) + +} + +func TestDSBackendParallel(t *testing.T) { + tf.UnitTest(t) + + ds := datastore.NewMapDatastore() + defer func() { + require.NoError(t, ds.Close()) + }() + + ctx := context.Background() + fs, err := NewDSBackend(ctx, ds, config.TestPassphraseConfig(), TestPassword) + assert.NoError(t, err) + + var wg sync.WaitGroup + count := 10 + wg.Add(count) + for i := 0; i < count; i++ { + go func() { + _, err := fs.NewAddress(ctx, address.SECP256K1) + assert.NoError(t, err) + wg.Done() + }() + } + + wg.Wait() + assert.Len(t, fs.Addresses(ctx), 10) +} + +func BenchmarkDSBackendSimple(b *testing.B) { + ds := datastore.NewMapDatastore() + defer func() { + require.NoError(b, ds.Close()) + }() + + ctx := context.Background() + fs, err := NewDSBackend(ctx, ds, config.TestPassphraseConfig(), TestPassword) + assert.NoError(b, err) + + corruptData := make([]byte, 32) + for i := 0; i < b.N; i++ { + addr, err := fs.NewAddress(ctx, address.SECP256K1) + assert.NoError(b, err) + + data := make([]byte, 32) + _, err = io.ReadFull(rand.Reader, data) + assert.NoError(b, err) + copy(corruptData, data) + + signature, err := fs.SignBytes(ctx, data, addr) + if err != nil { + b.Log(len(signature.Data), signature) + } + assert.NoError(b, err) + + assert.NoError(b, crypto.Verify(signature, addr, corruptData)) + } +} diff --git a/pkg/wallet/key.go b/pkg/wallet/key.go new file mode 100644 index 0000000000..610138fbfd --- /dev/null +++ b/pkg/wallet/key.go @@ -0,0 +1,99 @@ +package wallet + +import ( + "encoding/hex" + "encoding/json" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/venus/pkg/crypto" + + "github.com/pborman/uuid" +) + +const ( + version = 3 +) + +//Key private key info +type Key struct { + ID uuid.UUID // Version 4 "random" for unique id not derived from key data + // to simplify lookups we also store the address + Address address.Address + KeyInfo *crypto.KeyInfo +} + +type plainKey struct { + Address string `json:"address"` + KeyInfo string `json:"privatekey"` + ID string `json:"id"` + Version int `json:"version"` +} + +type encryptedKey struct { + Address string `json:"address"` + Crypto CryptoJSON `json:"crypto"` + ID string `json:"id"` + Version int `json:"version"` +} + +type CryptoJSON struct { + Cipher string `json:"cipher"` + CipherText string `json:"ciphertext"` + CipherParams cipherParams `json:"cipherparams"` + KDF string `json:"kdf"` + KDFParams map[string]interface{} `json:"kdfparams"` + MAC string `json:"mac"` +} + +type cipherParams struct { + IV string `json:"iv"` +} + +func (k *Key) MarshalJSON() (j []byte, err error) { + kiBytes, err := json.Marshal(k.KeyInfo) + if err != nil { + return nil, err + } + + jStruct := plainKey{ + hex.EncodeToString([]byte(k.Address.String())), + hex.EncodeToString(kiBytes), + k.ID.String(), + version, + } + j, err = json.Marshal(jStruct) + return j, err +} + +func (k *Key) UnmarshalJSON(j []byte) (err error) { + plainKey := new(plainKey) + err = json.Unmarshal(j, &plainKey) + if err != nil { + return err + } + + u := new(uuid.UUID) + *u = uuid.Parse(plainKey.ID) + k.ID = *u + + addr, err := hex.DecodeString(plainKey.Address) + if err != nil { + return err + } + k.Address, err = address.NewFromString(string(addr)) + if err != nil { + return err + } + + k.KeyInfo = new(crypto.KeyInfo) + kiBytes, err := hex.DecodeString(plainKey.KeyInfo) + if err != nil { + return err + } + err = json.Unmarshal(kiBytes, k.KeyInfo) + if err != nil { + return err + } + + return nil +} diff --git a/pkg/wallet/msgtypes.go b/pkg/wallet/msgtypes.go new file mode 100644 index 0000000000..4b5ee8e54c --- /dev/null +++ b/pkg/wallet/msgtypes.go @@ -0,0 +1,31 @@ +// Code from github.com/filecoin-project/venus-wallet/core/msgtypes.go. DO NOT EDIT. + +package wallet + +const ( + MTUnknown = MsgType("unknown") + + // Signing message CID. MsgMeta.Extra contains raw cbor message bytes + MTChainMsg = MsgType("message") + + // Signing a blockheader. signing raw cbor block bytes (MsgMeta.Extra is empty) + MTBlock = MsgType("block") + + // Signing a deal proposal. signing raw cbor proposal bytes (MsgMeta.Extra is empty) + MTDealProposal = MsgType("dealproposal") + // extra is nil, 'toSign' is cbor raw bytes of 'DrawRandomParams' + // following types follow above rule + MTDrawRandomParam = MsgType("drawrandomparam") + MTSignedVoucher = MsgType("signedvoucher") + MTStorageAsk = MsgType("storageask") + MTAskResponse = MsgType("askresponse") + MTNetWorkResponse = MsgType("networkresposne") + + // reference : storagemarket/impl/remotecli.go:330 + // sign storagemarket.ClientDeal.ProposalCid, + // MsgMeta.Extra is nil, 'toSign' is market.ClientDealProposal + // storagemarket.ClientDeal.ProposalCid equals cborutil.AsIpld(market.ClientDealProposal).Cid() + MTClientDeal = MsgType("clientdeal") + + MTProviderDealState = MsgType("providerdealstate") +) diff --git a/pkg/wallet/passphrase.go b/pkg/wallet/passphrase.go new file mode 100644 index 0000000000..7f0a7c96f4 --- /dev/null +++ b/pkg/wallet/passphrase.go @@ -0,0 +1,221 @@ +package wallet + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/rand" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "hash" + "io" + + "golang.org/x/crypto/pbkdf2" + "golang.org/x/crypto/scrypt" + "golang.org/x/crypto/sha3" + "golang.org/x/xerrors" +) + +const ( + keyHeaderKDF = "scrypt" + + scryptR = 8 + scryptDKLen = 32 +) + +var ErrDecrypt = errors.New("could not decrypt key with given password") + +// EncryptKey encrypts a key using the specified scrypt parameters into a json +// blob that can be decrypted later on. +func encryptKey(key *Key, password []byte, scryptN, scryptP int) ([]byte, error) { + kBytes, err := json.Marshal(key) + if err != nil { + return nil, err + } + cryptoStruct, err := encryptData(kBytes, password, scryptN, scryptP) + if err != nil { + return nil, err + } + encryptedKey := encryptedKey{ + hex.EncodeToString([]byte(key.Address.String())), + cryptoStruct, + key.ID.String(), + version, + } + return json.Marshal(encryptedKey) +} + +// encryptData encrypts the data given as 'data' with the password 'venusauth'. +func encryptData(data, password []byte, scryptN, scryptP int) (CryptoJSON, error) { + salt := make([]byte, 32) + if _, err := io.ReadFull(rand.Reader, salt); err != nil { + return CryptoJSON{}, xerrors.Errorf("reading from crypto/rand failed: " + err.Error()) + } + derivedKey, err := scrypt.Key(password, salt, scryptN, scryptR, scryptP, scryptDKLen) + if err != nil { + return CryptoJSON{}, err + } + encryptKey := derivedKey[:16] + + iv := make([]byte, aes.BlockSize) // 16 + if _, err := io.ReadFull(rand.Reader, iv); err != nil { + return CryptoJSON{}, xerrors.Errorf("reading from crypto/rand failed: " + err.Error()) + } + cipherText, err := aesCTRXOR(encryptKey, data, iv) + if err != nil { + return CryptoJSON{}, err + } + mac := keccak256(derivedKey[16:32], cipherText) + + scryptParamsJSON := make(map[string]interface{}, 5) + scryptParamsJSON["n"] = scryptN + scryptParamsJSON["r"] = scryptR + scryptParamsJSON["p"] = scryptP + scryptParamsJSON["dklen"] = scryptDKLen + scryptParamsJSON["salt"] = hex.EncodeToString(salt) + cipherParams := cipherParams{ + IV: hex.EncodeToString(iv), + } + + cryptoStruct := CryptoJSON{ + Cipher: "aes-128-ctr", + CipherText: hex.EncodeToString(cipherText), + CipherParams: cipherParams, + KDF: keyHeaderKDF, + KDFParams: scryptParamsJSON, + MAC: hex.EncodeToString(mac), + } + return cryptoStruct, nil +} + +func aesCTRXOR(key, inText, iv []byte) ([]byte, error) { + // AES-128 is selected due to size of encryptKey. + aesBlock, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + stream := cipher.NewCTR(aesBlock, iv) + outText := make([]byte, len(inText)) + stream.XORKeyStream(outText, inText) + return outText, err +} + +// decryptKey decrypts a key from a json blob, returning the Key. +func decryptKey(keyjson, password []byte) (*Key, error) { + var ( + keyBytes []byte + err error + ) + + k := new(encryptedKey) + if err := json.Unmarshal(keyjson, k); err != nil { + return nil, err + } + if k.Version != version { + return nil, fmt.Errorf("version not supported: %v", k.Version) + } + + keyBytes, err = decryptData(k.Crypto, password) + if err != nil { + return nil, err + } + + key := &Key{} + if err = json.Unmarshal(keyBytes, key); err != nil { + return nil, err + } + return key, nil +} + +func decryptData(cryptoJSON CryptoJSON, password []byte) ([]byte, error) { + if cryptoJSON.Cipher != "aes-128-ctr" { + return nil, fmt.Errorf("cipher not supported: %v", cryptoJSON.Cipher) + } + mac, err := hex.DecodeString(cryptoJSON.MAC) + if err != nil { + return nil, err + } + + iv, err := hex.DecodeString(cryptoJSON.CipherParams.IV) + if err != nil { + return nil, err + } + + cipherText, err := hex.DecodeString(cryptoJSON.CipherText) + if err != nil { + return nil, err + } + + derivedKey, err := getKDFKey(cryptoJSON, password) + if err != nil { + return nil, err + } + + calculatedMAC := keccak256(derivedKey[16:32], cipherText) + if !bytes.Equal(calculatedMAC, mac) { + return nil, ErrDecrypt + } + + plainText, err := aesCTRXOR(derivedKey[:16], cipherText, iv) + if err != nil { + return nil, err + } + + return plainText, err +} + +func getKDFKey(cryptoJSON CryptoJSON, password []byte) ([]byte, error) { + salt, err := hex.DecodeString(cryptoJSON.KDFParams["salt"].(string)) + if err != nil { + return nil, err + } + dkLen := ensureInt(cryptoJSON.KDFParams["dklen"]) + + if cryptoJSON.KDF == keyHeaderKDF { + n := ensureInt(cryptoJSON.KDFParams["n"]) + r := ensureInt(cryptoJSON.KDFParams["r"]) + p := ensureInt(cryptoJSON.KDFParams["p"]) + return scrypt.Key(password, salt, n, r, p, dkLen) + + } else if cryptoJSON.KDF == "pbkdf2" { + c := ensureInt(cryptoJSON.KDFParams["c"]) + prf := cryptoJSON.KDFParams["prf"].(string) + if prf != "hmac-sha256" { + return nil, fmt.Errorf("unsupported PBKDF2 PRF: %s", prf) + } + key := pbkdf2.Key(password, salt, c, dkLen, sha256.New) + return key, nil + } + + return nil, fmt.Errorf("unsupported KDF: %s", cryptoJSON.KDF) +} + +// KeccakState wraps sha3.state. In addition to the usual hash methods, it also supports +// Read to get a variable amount of data from the hash state. Read is faster than Sum +// because it doesn't copy the internal state, but also modifies the internal state. +type KeccakState interface { + hash.Hash + Read([]byte) (int, error) +} + +// keccak256 calculates and returns the Keccak256 hash of the input data. +func keccak256(data ...[]byte) []byte { + b := make([]byte, 32) + d := sha3.NewLegacyKeccak256().(KeccakState) + for _, b := range data { + _, _ = d.Write(b) + } + _, _ = d.Read(b) + return b +} + +func ensureInt(x interface{}) int { + res, ok := x.(int) + if !ok { + res = int(x.(float64)) + } + return res +} diff --git a/pkg/wallet/passphrase_test.go b/pkg/wallet/passphrase_test.go new file mode 100644 index 0000000000..48e8dae507 --- /dev/null +++ b/pkg/wallet/passphrase_test.go @@ -0,0 +1,65 @@ +package wallet + +import ( + "context" + "testing" + "time" + + "github.com/ipfs/go-datastore" + "github.com/pborman/uuid" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "golang.org/x/crypto/scrypt" + + "github.com/filecoin-project/venus/pkg/config" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestEncrypKeyAndDecryptKey(t *testing.T) { + tf.UnitTest(t) + + ds := datastore.NewMapDatastore() + defer func() { + require.NoError(t, ds.Close()) + }() + + fs, err := NewDSBackend(context.Background(), ds, config.TestPassphraseConfig(), TestPassword) + assert.NoError(t, err) + + w := New(fs) + ctx := context.Background() + ki, err := w.NewKeyInfo(ctx) + assert.NoError(t, err) + + addr, err := ki.Address() + assert.NoError(t, err) + + key := &Key{ + ID: uuid.NewRandom(), + Address: addr, + KeyInfo: ki, + } + + b, err := encryptKey(key, TestPassword, config.TestPassphraseConfig().ScryptN, config.TestPassphraseConfig().ScryptP) + assert.NoError(t, err) + + key2, err := decryptKey(b, TestPassword) + assert.NoError(t, err) + + assert.Equal(t, key.ID, key2.ID) + assert.Equal(t, key.Address, key2.Address) + assert.Equal(t, key.KeyInfo.Key(), key2.KeyInfo.Key()) +} + +func TestScrypt(t *testing.T) { + t.Skipf("had test this too much, ignore this time!") + for n := uint8(14); n < 24; n++ { + b := testing.Benchmark(func(b *testing.B) { + for i := 0; i < b.N; i++ { + _, _ = scrypt.Key([]byte("password"), []byte("salt"), 1< cbg.MaxLength { + return xerrors.Errorf("Value in field t.Value was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len(t.Value))); err != nil { + return err + } + if _, err := io.WriteString(w, string(t.Value)); err != nil { + return err + } + + // t.Unmarshallable ([]*chaos.UnmarshallableCBOR) (slice) + if len(t.Unmarshallable) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Unmarshallable was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Unmarshallable))); err != nil { + return err + } + for _, v := range t.Unmarshallable { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + return nil +} + +func (t *State) UnmarshalCBOR(r io.Reader) error { + *t = State{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Value (string) (string) + + { + sval, err := cbg.ReadStringBuf(br, scratch) + if err != nil { + return err + } + + t.Value = string(sval) + } + // t.Unmarshallable ([]*chaos.UnmarshallableCBOR) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Unmarshallable: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Unmarshallable = make([]*UnmarshallableCBOR, extra) + } + + for i := 0; i < int(extra); i++ { + + var v UnmarshallableCBOR + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Unmarshallable[i] = &v + } + + return nil +} + +var lengthBufCallerValidationArgs = []byte{131} + +func (t *CallerValidationArgs) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufCallerValidationArgs); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Branch (chaos.CallerValidationBranch) (int64) + if t.Branch >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Branch)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.Branch-1)); err != nil { + return err + } + } + + // t.Addrs ([]address.Address) (slice) + if len(t.Addrs) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Addrs was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Addrs))); err != nil { + return err + } + for _, v := range t.Addrs { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.Types ([]cid.Cid) (slice) + if len(t.Types) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Types was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Types))); err != nil { + return err + } + for _, v := range t.Types { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.Types: %w", err) + } + } + return nil +} + +func (t *CallerValidationArgs) UnmarshalCBOR(r io.Reader) error { + *t = CallerValidationArgs{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Branch (chaos.CallerValidationBranch) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.Branch = CallerValidationBranch(extraI) + } + // t.Addrs ([]address.APIAddress) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Addrs: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Addrs = make([]address.Address, extra) + } + + for i := 0; i < int(extra); i++ { + + var v address.Address + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Addrs[i] = v + } + + // t.Types ([]cid.Cid) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Types: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Types = make([]cid.Cid, extra) + } + + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.Types failed: %w", err) + } + t.Types[i] = c + } + + return nil +} + +var lengthBufCreateActorArgs = []byte{132} + +func (t *CreateActorArgs) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufCreateActorArgs); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.UndefActorCID (bool) (bool) + if err := cbg.WriteBool(w, t.UndefActorCID); err != nil { + return err + } + + // t.ActorCID (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.ActorCID); err != nil { + return xerrors.Errorf("failed to write cid field t.ActorCID: %w", err) + } + + // t.UndefAddress (bool) (bool) + if err := cbg.WriteBool(w, t.UndefAddress); err != nil { + return err + } + + // t.APIAddress (address.APIAddress) (struct) + if err := t.Address.MarshalCBOR(w); err != nil { + return err + } + return nil +} + +func (t *CreateActorArgs) UnmarshalCBOR(r io.Reader) error { + *t = CreateActorArgs{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 4 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.UndefActorCID (bool) (bool) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajOther { + return fmt.Errorf("booleans must be major type 7") + } + switch extra { + case 20: + t.UndefActorCID = false + case 21: + t.UndefActorCID = true + default: + return fmt.Errorf("booleans are either major type 7, value 20 or 21 (got %d)", extra) + } + // t.ActorCID (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.ActorCID: %w", err) + } + + t.ActorCID = c + + } + // t.UndefAddress (bool) (bool) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajOther { + return fmt.Errorf("booleans must be major type 7") + } + switch extra { + case 20: + t.UndefAddress = false + case 21: + t.UndefAddress = true + default: + return fmt.Errorf("booleans are either major type 7, value 20 or 21 (got %d)", extra) + } + // t.APIAddress (address.APIAddress) (struct) + + { + + if err := t.Address.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.APIAddress: %w", err) + } + + } + return nil +} + +var lengthBufResolveAddressResponse = []byte{130} + +func (t *ResolveAddressResponse) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufResolveAddressResponse); err != nil { + return err + } + + // t.APIAddress (address.APIAddress) (struct) + if err := t.Address.MarshalCBOR(w); err != nil { + return err + } + + // t.Success (bool) (bool) + if err := cbg.WriteBool(w, t.Success); err != nil { + return err + } + return nil +} + +func (t *ResolveAddressResponse) UnmarshalCBOR(r io.Reader) error { + *t = ResolveAddressResponse{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.APIAddress (address.APIAddress) (struct) + + { + + if err := t.Address.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.APIAddress: %w", err) + } + + } + // t.Success (bool) (bool) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajOther { + return fmt.Errorf("booleans must be major type 7") + } + switch extra { + case 20: + t.Success = false + case 21: + t.Success = true + default: + return fmt.Errorf("booleans are either major type 7, value 20 or 21 (got %d)", extra) + } + return nil +} + +var lengthBufSendArgs = []byte{132} + +func (t *SendArgs) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufSendArgs); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.To (address.APIAddress) (struct) + if err := t.To.MarshalCBOR(w); err != nil { + return err + } + + // t.Value (big.Int) (struct) + if err := t.Value.MarshalCBOR(w); err != nil { + return err + } + + // t.Method (abi.MethodNum) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Method)); err != nil { + return err + } + + // t.Params ([]uint8) (slice) + if len(t.Params) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.Params was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.Params))); err != nil { + return err + } + + if _, err := w.Write(t.Params[:]); err != nil { + return err + } + return nil +} + +func (t *SendArgs) UnmarshalCBOR(r io.Reader) error { + *t = SendArgs{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 4 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.To (address.APIAddress) (struct) + + { + + if err := t.To.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.To: %w", err) + } + + } + // t.Value (big.Int) (struct) + + { + + if err := t.Value.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Value: %w", err) + } + + } + // t.Method (abi.MethodNum) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Method = abi.MethodNum(extra) + + } + // t.Params ([]uint8) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.Params: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.Params = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.Params[:]); err != nil { + return err + } + return nil +} + +var lengthBufSendReturn = []byte{130} + +func (t *SendReturn) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufSendReturn); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Return (builtin.CBORBytes) (slice) + if len(t.Return) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.Return was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.Return))); err != nil { + return err + } + + if _, err := w.Write(t.Return[:]); err != nil { + return err + } + + // t.Code (exitcode.ExitCode) (int64) + if t.Code >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Code)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.Code-1)); err != nil { + return err + } + } + return nil +} + +func (t *SendReturn) UnmarshalCBOR(r io.Reader) error { + *t = SendReturn{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Return (builtin.CBORBytes) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.Return: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.Return = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.Return[:]); err != nil { + return err + } + // t.Code (exitcode.ExitCode) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.Code = exitcode.ExitCode(extraI) + } + return nil +} + +var lengthBufMutateStateArgs = []byte{130} + +func (t *MutateStateArgs) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufMutateStateArgs); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Value (string) (string) + if len(t.Value) > cbg.MaxLength { + return xerrors.Errorf("Value in field t.Value was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len(t.Value))); err != nil { + return err + } + if _, err := io.WriteString(w, string(t.Value)); err != nil { + return err + } + + // t.Branch (chaos.MutateStateBranch) (int64) + if t.Branch >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Branch)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.Branch-1)); err != nil { + return err + } + } + return nil +} + +func (t *MutateStateArgs) UnmarshalCBOR(r io.Reader) error { + *t = MutateStateArgs{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Value (string) (string) + + { + sval, err := cbg.ReadStringBuf(br, scratch) + if err != nil { + return err + } + + t.Value = string(sval) + } + // t.Branch (chaos.MutateStateBranch) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.Branch = MutateStateBranch(extraI) + } + return nil +} + +var lengthBufAbortWithArgs = []byte{131} + +func (t *AbortWithArgs) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufAbortWithArgs); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Code (exitcode.ExitCode) (int64) + if t.Code >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Code)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.Code-1)); err != nil { + return err + } + } + + // t.Message (string) (string) + if len(t.Message) > cbg.MaxLength { + return xerrors.Errorf("Value in field t.Message was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len(t.Message))); err != nil { + return err + } + if _, err := io.WriteString(w, string(t.Message)); err != nil { + return err + } + + // t.Uncontrolled (bool) (bool) + if err := cbg.WriteBool(w, t.Uncontrolled); err != nil { + return err + } + return nil +} + +func (t *AbortWithArgs) UnmarshalCBOR(r io.Reader) error { + *t = AbortWithArgs{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Code (exitcode.ExitCode) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.Code = exitcode.ExitCode(extraI) + } + // t.Message (string) (string) + + { + sval, err := cbg.ReadStringBuf(br, scratch) + if err != nil { + return err + } + + t.Message = string(sval) + } + // t.Uncontrolled (bool) (bool) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajOther { + return fmt.Errorf("booleans must be major type 7") + } + switch extra { + case 20: + t.Uncontrolled = false + case 21: + t.Uncontrolled = true + default: + return fmt.Errorf("booleans are either major type 7, value 20 or 21 (got %d)", extra) + } + return nil +} + +var lengthBufInspectRuntimeReturn = []byte{134} + +func (t *InspectRuntimeReturn) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufInspectRuntimeReturn); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Caller (address.APIAddress) (struct) + if err := t.Caller.MarshalCBOR(w); err != nil { + return err + } + + // t.Receiver (address.APIAddress) (struct) + if err := t.Receiver.MarshalCBOR(w); err != nil { + return err + } + + // t.ValueReceived (big.Int) (struct) + if err := t.ValueReceived.MarshalCBOR(w); err != nil { + return err + } + + // t.CurrEpoch (abi.ChainEpoch) (int64) + if t.CurrEpoch >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.CurrEpoch)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.CurrEpoch-1)); err != nil { + return err + } + } + + // t.CurrentBalance (big.Int) (struct) + if err := t.CurrentBalance.MarshalCBOR(w); err != nil { + return err + } + + // t.State (chaos.State) (struct) + if err := t.State.MarshalCBOR(w); err != nil { + return err + } + return nil +} + +func (t *InspectRuntimeReturn) UnmarshalCBOR(r io.Reader) error { + *t = InspectRuntimeReturn{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 6 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Caller (address.APIAddress) (struct) + + { + + if err := t.Caller.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Caller: %w", err) + } + + } + // t.Receiver (address.APIAddress) (struct) + + { + + if err := t.Receiver.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Receiver: %w", err) + } + + } + // t.ValueReceived (big.Int) (struct) + + { + + if err := t.ValueReceived.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.ValueReceived: %w", err) + } + + } + // t.CurrEpoch (abi.ChainEpoch) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.CurrEpoch = abi.ChainEpoch(extraI) + } + // t.CurrentBalance (big.Int) (struct) + + { + + if err := t.CurrentBalance.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.CurrentBalance: %w", err) + } + + } + // t.State (chaos.State) (struct) + + { + + if err := t.State.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.State: %w", err) + } + + } + return nil +} diff --git a/tools/conformance/chaos/gen/gen.go b/tools/conformance/chaos/gen/gen.go new file mode 100644 index 0000000000..c5b49c8ec6 --- /dev/null +++ b/tools/conformance/chaos/gen/gen.go @@ -0,0 +1,23 @@ +package main + +import ( + "github.com/filecoin-project/venus/tools/conformance/chaos" + + gen "github.com/whyrusleeping/cbor-gen" +) + +func main() { + if err := gen.WriteTupleEncodersToFile("./cbor_gen.go", "chaos", + chaos.State{}, + chaos.CallerValidationArgs{}, + chaos.CreateActorArgs{}, + chaos.ResolveAddressResponse{}, + chaos.SendArgs{}, + chaos.SendReturn{}, + chaos.MutateStateArgs{}, + chaos.AbortWithArgs{}, + chaos.InspectRuntimeReturn{}, + ); err != nil { + panic(err) + } +} diff --git a/tools/conformance/chaos/ids.go b/tools/conformance/chaos/ids.go new file mode 100644 index 0000000000..6b0ad86a74 --- /dev/null +++ b/tools/conformance/chaos/ids.go @@ -0,0 +1,29 @@ +package chaos + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + "github.com/multiformats/go-multihash" +) + +// ChaosActorCodeCID is the CID by which this kind of actor will be identified. +var ChaosActorCodeCID = func() cid.Cid { + builder := cid.V1Builder{Codec: cid.Raw, MhType: multihash.IDENTITY} + c, err := builder.Sum([]byte("fil/1/chaos")) + if err != nil { + panic(err) + } + return c +}() + +// Address is the singleton address of this actor. Its value is 98 +// (builtin.FirstNonSingletonActorId - 2), as 99 is reserved for the burnt funds +// singleton. +var Address = func() address.Address { + // the address before the burnt funds address (99) + addr, err := address.NewIDAddress(98) + if err != nil { + panic(err) + } + return addr +}() diff --git a/tools/conformance/chaos/state.go b/tools/conformance/chaos/state.go new file mode 100644 index 0000000000..b036a08fde --- /dev/null +++ b/tools/conformance/chaos/state.go @@ -0,0 +1,32 @@ +package chaos + +import ( + "fmt" + "io" +) + +// State is the state for the chaos actor used by some methods to invoke +// behaviours in the vm or runtime. +type State struct { + // Value can be updated by chaos actor methods to test illegal state + // mutations when the state is in readonly mode for example. + Value string + // Unmarshallable is a sentinel value. If the slice contains no values, the + // State struct will encode as CBOR without issue. If the slice is non-nil, + // CBOR encoding will fail. + Unmarshallable []*UnmarshallableCBOR +} + +// UnmarshallableCBOR is a type that cannot be marshalled or unmarshalled to +// CBOR despite implementing the CBORMarshaler and CBORUnmarshaler interface. +type UnmarshallableCBOR struct{} + +// UnmarshalCBOR will fail to unmarshal the value from CBOR. +func (t *UnmarshallableCBOR) UnmarshalCBOR(io.Reader) error { //nolint:staticcheck + return fmt.Errorf("failed to unmarshal cbor") +} + +// MarshalCBOR will fail to marshal the value to CBOR. +func (t *UnmarshallableCBOR) MarshalCBOR(io.Writer) error { //nolint:staticcheck + return fmt.Errorf("failed to marshal cbor") +} diff --git a/tools/conformance/corpus_test.go b/tools/conformance/corpus_test.go new file mode 100644 index 0000000000..71a7ab2c64 --- /dev/null +++ b/tools/conformance/corpus_test.go @@ -0,0 +1,144 @@ +package conformance + +import ( + "encoding/json" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "io/ioutil" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/filecoin-project/test-vectors/schema" +) + +var invokees = map[schema.Class]func(Reporter, string, *schema.TestVector, *schema.Variant){ + schema.ClassMessage: ExecuteMessageVector, + schema.ClassTipset: ExecuteTipsetVector, +} + +const ( + // EnvSkipConformance, if 1, skips the conformance test suite. + EnvSkipConformance = "SKIP_CONFORMANCE" + + // EnvCorpusRootDir is the name of the environment variable where the path + // to an alternative corpus location can be provided. + // + // The default is defaultCorpusRoot. + EnvCorpusRootDir = "CORPUS_DIR" + + // defaultCorpusRoot is the directory where the test vector corpus is hosted. + // It is mounted on the Lotus repo as a git submodule. + // + // When running this test, the corpus root can be overridden through the + // -conformance.corpus CLI flag to run an alternate corpus. + defaultCorpusRoot = "../../extern/test-vectors/corpus" +) + +// ignore is a set of paths relative to root to skip. +var ignore = map[string]struct{}{ + ".git": {}, + "schema.json": {}, +} + +// TestConformance is the entrypoint test that runs all test vectors found +// in the corpus root directory. +// +// It locates all json files via a recursive walk, skipping over the ignore set, +// as well as files beginning with _. It parses each file as a test vector, and +// runs it via the Driver. +func TestConformance(t *testing.T) { + tf.UnitTest(t) + if skip := strings.TrimSpace(os.Getenv(EnvSkipConformance)); skip == "1" { + t.SkipNow() + } + // corpusRoot is the effective corpus root path, taken from the `-conformance.corpus` CLI flag, + // falling back to defaultCorpusRoot if not provided. + corpusRoot := defaultCorpusRoot + if dir := strings.TrimSpace(os.Getenv(EnvCorpusRootDir)); dir != "" { + corpusRoot = dir + } + + var vectors []string + err := filepath.Walk(corpusRoot+"/", func(path string, info os.FileInfo, err error) error { + if err != nil { + t.Fatal(err) + } + + filename := filepath.Base(path) + rel, err := filepath.Rel(corpusRoot, path) + if err != nil { + t.Fatal(err) + } + + if _, ok := ignore[rel]; ok { + // skip over using the right error. + if info.IsDir() { + return filepath.SkipDir + } + return nil + } + if info.IsDir() { + // dive into directories. + return nil + } + if filepath.Ext(path) != ".json" { + // skip if not .json. + return nil + } + if ignored := strings.HasPrefix(filename, "_"); ignored { + // ignore files starting with _. + t.Logf("ignoring: %s", rel) + return nil + } + vectors = append(vectors, rel) + return nil + }) + + if err != nil { + t.Fatal(err) + } + + if len(vectors) == 0 { + t.Fatalf("no test vectors found") + } + + // Run a test for each vector. + for _, v := range vectors { + path := filepath.Join(corpusRoot, v) + raw, err := ioutil.ReadFile(path) + if err != nil { + t.Fatalf("failed to read test raw file: %s", path) + } + + var vector schema.TestVector + err = json.Unmarshal(raw, &vector) + if err != nil { + t.Errorf("failed to parse test vector %s: %s; skipping", path, err) + continue + } + + t.Run(v, func(t *testing.T) { + for _, h := range vector.Hints { + if h == schema.HintIncorrect { + t.Logf("skipping vector marked as incorrect: %s", vector.Meta.ID) + t.SkipNow() + } + } + + // dispatch the execution depending on the vector class. + invokee, ok := invokees[vector.Class] + if !ok { + return + //t.Fatalf("unsupported test vector class: %s", vector.Class) + } + + for _, variant := range vector.Pre.Variants { + variant := variant + t.Run(variant.ID, func(t *testing.T) { + invokee(t, v, &vector, &variant) + }) + } + }) + } +} diff --git a/tools/conformance/driver.go b/tools/conformance/driver.go new file mode 100644 index 0000000000..10491946ce --- /dev/null +++ b/tools/conformance/driver.go @@ -0,0 +1,343 @@ +package conformance + +import ( + "context" + gobig "math/big" + "os" + + "github.com/filecoin-project/venus/pkg/util/ffiwrapper/impl" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + + "github.com/filecoin-project/venus/pkg/vm/gas" + cbor "github.com/ipfs/go-ipld-cbor" + + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/fixtures/networks" + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/consensusfault" + _ "github.com/filecoin-project/venus/pkg/crypto/bls" // enable bls signatures + _ "github.com/filecoin-project/venus/pkg/crypto/secp" // enable secp signatures + "github.com/filecoin-project/venus/pkg/fork" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/pkg/vm/register" + "github.com/filecoin-project/venus/pkg/vmsupport" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/test-vectors/schema" + "github.com/filecoin-project/venus/tools/conformance/chaos" + types "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" + ds "github.com/ipfs/go-datastore" + blockstore "github.com/ipfs/go-ipfs-blockstore" +) + +var ( + // DefaultCirculatingSupply is the fallback circulating supply returned by + // the driver's CircSupplyCalculator function, used if the vector specifies + // no circulating supply. + DefaultCirculatingSupply = types.TotalFilecoinInt + + // DefaultBaseFee to use in the VM, if one is not supplied in the vector. + DefaultBaseFee = abi.NewTokenAmount(100) +) + +type Driver struct { + ctx context.Context + selector schema.Selector + vmFlush bool +} + +type DriverOpts struct { + // DisableVMFlush, when true, avoids calling VM.Flush(), forces a blockstore + // recursive copy, from the temporary buffer blockstore, to the real + // system's blockstore. Disabling VM flushing is useful when extracting test + // vectors and trimming state, as we don't want to force an accidental + // deep copy of the state tree. + // + // Disabling VM flushing almost always should go hand-in-hand with + // LOTUS_DISABLE_VM_BUF=iknowitsabadidea. That way, state tree writes are + // immediately committed to the blockstore. + DisableVMFlush bool +} + +func NewDriver(ctx context.Context, selector schema.Selector, opts DriverOpts) *Driver { + return &Driver{ctx: ctx, selector: selector, vmFlush: !opts.DisableVMFlush} +} + +type ExecuteTipsetResult struct { + ReceiptsRoot cid.Cid + PostStateRoot cid.Cid + + // AppliedMessages stores the messages that were applied, in the order they + // were applied. It includes implicit messages (cron, rewards). + AppliedMessages []*vm.VmMessage + // AppliedResults stores the results of AppliedMessages, in the same order. + AppliedResults []*vm.Ret +} + +// ExecuteTipset executes the supplied tipset on top of the state represented +// by the preroot CID. +// +// parentEpoch is the last epoch in which an actual tipset was processed. This +// is used by Lotus for null block counting and cron firing. +// +// This method returns the the receipts root, the poststate root, and the VM +// message results. The latter _include_ implicit messages, such as cron ticks +// and reward withdrawal per miner. +func (d *Driver) ExecuteTipset(bs blockstore.Blockstore, chainDs ds.Batching, preroot cid.Cid, parentEpoch abi.ChainEpoch, tipset *schema.Tipset, execEpoch abi.ChainEpoch) (*ExecuteTipsetResult, error) { + ipldStore := cbor.NewCborStore(bs) + mainNetParams := networks.Mainnet() + node.SetNetParams(&mainNetParams.Network) + //chainstore + chainStore := chain.NewStore(chainDs, bs, cid.Undef, chain.NewMockCirculatingSupplyCalculator()) //load genesis from car + + //drand + /*genBlk, err := chainStore.GetGenesisBlock(context.TODO()) + if err != nil { + return nil, err + } + + drand, err := beacon.DefaultDrandIfaceFromConfig(genBlk.Timestamp) + if err != nil { + return nil, err + }*/ + + //chain fork + chainFork, err := fork.NewChainFork(context.TODO(), chainStore, ipldStore, bs, &mainNetParams.Network) + faultChecker := consensusfault.NewFaultChecker(chainStore, chainFork) + syscalls := vmsupport.NewSyscalls(faultChecker, impl.ProofVerifier) + if err != nil { + return nil, err + } + var ( + vmOption = vm.VmOption{ + CircSupplyCalculator: func(context.Context, abi.ChainEpoch, tree.Tree) (abi.TokenAmount, error) { + return big.Zero(), nil + }, + LookbackStateGetter: vmcontext.LookbackStateGetterForTipset(context.TODO(), chainStore, chainFork, nil), + NtwkVersionGetter: chainFork.GetNtwkVersion, + Rnd: NewFixedRand(), + BaseFee: big.NewFromGo(&tipset.BaseFee), + Fork: chainFork, + Epoch: execEpoch, + GasPriceSchedule: gas.NewPricesSchedule(mainNetParams.Network.ForkUpgradeParam), + PRoot: preroot, + Bsstore: bs, + SysCallsImpl: syscalls, + } + ) + + lvm, err := vm.NewVM(context.Background(), vmOption) + if err != nil { + return nil, err + } + //flush data to blockstore + defer lvm.Flush() //nolint + + blocks := make([]types.BlockMessagesInfo, 0, len(tipset.Blocks)) + for _, b := range tipset.Blocks { + sb := types.BlockMessagesInfo{ + Block: &types.BlockHeader{ + Miner: b.MinerAddr, + ElectionProof: &types.ElectionProof{ + WinCount: b.WinCount, + }, + }, + } + for _, m := range b.Messages { + msg, err := types.DecodeMessage(m) + if err != nil { + return nil, err + } + switch msg.From.Protocol() { + case address.SECP256K1: + sb.SecpkMessages = append(sb.SecpkMessages, &types.SignedMessage{ + Message: *msg, + Signature: crypto.Signature{ + Type: crypto.SigTypeSecp256k1, + Data: make([]byte, 65), + }, + }) + case address.BLS: + sb.BlsMessages = append(sb.BlsMessages, msg) + default: + // sneak in messages originating from other addresses as both kinds. + // these should fail, as they are actually invalid senders. + /*sb.SECPMessages = append(sb.SECPMessages, &types.SignedMessage{ + Message: *msg, + Signature: crypto.Signature{ + Type: crypto.SigTypeSecp256k1, + Data: make([]byte, 65), + }, + })*/ + sb.BlsMessages = append(sb.BlsMessages, msg) //todo use interface for message + sb.BlsMessages = append(sb.BlsMessages, msg) + } + } + blocks = append(blocks, sb) + } + + var ( + messages []*vm.VmMessage + results []*vm.Ret + ) + + postcid, receipt, err := lvm.ApplyTipSetMessages(blocks, nil, parentEpoch, execEpoch, func(_ cid.Cid, msg vm.VmMessage, ret *vm.Ret) error { + messages = append(messages, &msg) + results = append(results, ret) + return nil + }) + if err != nil { + return nil, err + } + receiptsroot, err := chain.GetReceiptRoot(receipt) + if err != nil { + return nil, err + } + + /* postcid, receiptsroot, err := sm.ApplyBlocks(context.Background(), parentEpoch, preroot, blocks, execEpoch, vmRand, func(_ cid.Cid, msg *types.ChainMsg, ret *vm.Ret) error { + messages = append(messages, msg) + results = append(results, ret) + return nil + }, basefee, nil)*/ + + ret := &ExecuteTipsetResult{ + ReceiptsRoot: receiptsroot, + PostStateRoot: postcid, + AppliedMessages: messages, + AppliedResults: results, + } + return ret, nil +} + +type ExecuteMessageParams struct { + Preroot cid.Cid + Epoch abi.ChainEpoch + Message *types.Message + CircSupply abi.TokenAmount + BaseFee abi.TokenAmount + + Rand vmcontext.HeadChainRandomness +} + +// ExecuteMessage executes a conformance test vector message in a temporary VM. +func (d *Driver) ExecuteMessage(bs blockstore.Blockstore, params ExecuteMessageParams) (*vm.Ret, cid.Cid, error) { + if !d.vmFlush { + // do not flush the VM, just the state tree; this should be used with + // LOTUS_DISABLE_VM_BUF enabled, so writes will anyway be visible. + _ = os.Setenv("LOTUS_DISABLE_VM_BUF", "iknowitsabadidea") + } + actorBuilder := register.DefaultActorBuilder + // register the chaos actor if required by the vector. + if chaosOn, ok := d.selector["chaos_actor"]; ok && chaosOn == "true" { + chaosActor := chaos.Actor{} + actorBuilder.Add(nil, chaosActor) + } + + coderLoader := actorBuilder.Build() + + if params.Rand == nil { + params.Rand = NewFixedRand() + } + mainNetParams := networks.Mainnet() + node.SetNetParams(&mainNetParams.Network) + ipldStore := cbor.NewCborStore(bs) + chainDs := ds.NewMapDatastore() //just mock one + //chainstore + chainStore := chain.NewStore(chainDs, bs, cid.Undef, chain.NewMockCirculatingSupplyCalculator()) //load genesis from car + + //chain fork + chainFork, err := fork.NewChainFork(context.TODO(), chainStore, ipldStore, bs, &mainNetParams.Network) + faultChecker := consensusfault.NewFaultChecker(chainStore, chainFork) + syscalls := vmsupport.NewSyscalls(faultChecker, impl.ProofVerifier) + if err != nil { + return nil, cid.Undef, err + } + var ( + vmOption = vm.VmOption{ + CircSupplyCalculator: func(ctx context.Context, epoch abi.ChainEpoch, tree tree.Tree) (abi.TokenAmount, error) { + return params.CircSupply, nil + }, + LookbackStateGetter: vmcontext.LookbackStateGetterForTipset(context.TODO(), chainStore, chainFork, nil), + NtwkVersionGetter: chainFork.GetNtwkVersion, + Rnd: params.Rand, + BaseFee: params.BaseFee, + Fork: chainFork, + ActorCodeLoader: &coderLoader, + Epoch: params.Epoch, + GasPriceSchedule: gas.NewPricesSchedule(mainNetParams.Network.ForkUpgradeParam), + PRoot: params.Preroot, + Bsstore: bs, + SysCallsImpl: syscalls, + } + ) + + lvm, err := vm.NewVM(context.TODO(), vmOption) + if err != nil { + return nil, cid.Undef, err + } + + ret, err := lvm.ApplyMessage(toChainMsg(params.Message)) + if err != nil { + return nil, cid.Undef, err + } + + var root cid.Cid + if d.vmFlush { + // flush the VM, committing the state tree changes and forcing a + // recursive copy from the temporary blcokstore to the real blockstore. + root, err = lvm.Flush() + if err != nil { + return nil, cid.Undef, err + } + } else { + root, err = lvm.StateTree().Flush(d.ctx) + if err != nil { + return nil, cid.Undef, err + } + } + + return ret, root, err +} + +// toChainMsg injects a synthetic 0-filled signature of the right length to +// messages that originate from secp256k senders, leaving all +// others untouched. +// TODO: generate a signature in the DSL so that it's encoded in +// the test vector. +func toChainMsg(msg *types.Message) (ret types.ChainMsg) { + ret = msg + if msg.From.Protocol() == address.SECP256K1 { + ret = &types.SignedMessage{ + Message: *msg, + Signature: crypto.Signature{ + Type: crypto.SigTypeSecp256k1, + Data: make([]byte, 65), + }, + } + } + return ret +} + +// BaseFeeOrDefault converts a basefee as passed in a test vector (go *big.Int +// type) to an abi.TokenAmount, or if nil it returns the DefaultBaseFee. +func BaseFeeOrDefault(basefee *gobig.Int) abi.TokenAmount { + if basefee == nil { + return DefaultBaseFee + } + return big.NewFromGo(basefee) +} + +// CircSupplyOrDefault converts a circulating supply as passed in a test vector +// (go *big.Int type) to an abi.TokenAmount, or if nil it returns the +// DefaultCirculatingSupply. +func CircSupplyOrDefault(circSupply *gobig.Int) abi.TokenAmount { + if circSupply == nil { + return DefaultCirculatingSupply + } + return big.NewFromGo(circSupply) +} diff --git a/tools/conformance/rand_fixed.go b/tools/conformance/rand_fixed.go new file mode 100644 index 0000000000..3a674ae320 --- /dev/null +++ b/tools/conformance/rand_fixed.go @@ -0,0 +1,27 @@ +package conformance + +import ( + "context" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" +) + +type fixedRand struct{} + +var _ vmcontext.HeadChainRandomness = (*fixedRand)(nil) + +// NewFixedRand creates a test vm.Rand that always returns fixed bytes value +// of utf-8 string 'i_am_random_____i_am_random_____'. +func NewFixedRand() vmcontext.HeadChainRandomness { + return &fixedRand{} +} + +func (r *fixedRand) ChainGetRandomnessFromBeacon(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + return []byte("i_am_random_____i_am_random_____"), nil // 32 bytes. +} + +func (r *fixedRand) ChainGetRandomnessFromTickets(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + return []byte("i_am_random_____i_am_random_____"), nil // 32 bytes. +} diff --git a/tools/conformance/rand_record.go b/tools/conformance/rand_record.go new file mode 100644 index 0000000000..bd0ebf00c1 --- /dev/null +++ b/tools/conformance/rand_record.go @@ -0,0 +1,131 @@ +package conformance + +import ( + "context" + "fmt" + "sync" + + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + v1api "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" + + "github.com/filecoin-project/test-vectors/schema" +) + +type RecordingRand struct { + reporter Reporter + api v1api.FullNode + // once guards the loading of the head tipset. + // can be removed when https://github.com/filecoin-project/lotus/issues/4223 + // is fixed. + once sync.Once + head types.TipSetKey + lk sync.Mutex + recorded schema.Randomness +} + +func (r *RecordingRand) ChainGetRandomnessFromBeacon(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + return r.getChainRandomness(ctx, pers, round, entropy) +} + +func (r *RecordingRand) ChainGetRandomnessFromTickets(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + return r.getChainRandomness(ctx, pers, round, entropy) +} + +var _ vmcontext.HeadChainRandomness = (*RecordingRand)(nil) + +// NewRecordingRand returns a vm.Rand implementation that proxies calls to a +// full Lotus node via JSON-RPC, and records matching rules and responses so +// they can later be embedded in test vectors. +func NewRecordingRand(reporter Reporter, api v1api.FullNode) *RecordingRand { + return &RecordingRand{reporter: reporter, api: api} +} + +func (r *RecordingRand) loadHead() { + head, err := r.api.ChainHead(context.TODO()) + if err != nil { + panic(fmt.Sprintf("could not fetch chain head while fetching randomness: %s", err)) + } + r.head = head.Key() +} + +func (r *RecordingRand) GetChainRandomnessV2(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + return r.getChainRandomness(ctx, pers, round, entropy) +} + +func (r *RecordingRand) GetChainRandomnessV1(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + return r.getChainRandomness(ctx, pers, round, entropy) +} + +func (r *RecordingRand) getChainRandomness(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + r.once.Do(r.loadHead) + // FullNode's ChainGetRandomnessFromTickets handles whether we should be looking forward or back + ret, err := r.api.ChainGetRandomnessFromTickets(ctx, r.head, pers, round, entropy) + if err != nil { + return ret, err + } + + r.reporter.Logf("fetched and recorded chain randomness for: dst=%d, epoch=%d, entropy=%x, result=%x", pers, round, entropy, ret) + + match := schema.RandomnessMatch{ + On: schema.RandomnessRule{ + Kind: schema.RandomnessChain, + DomainSeparationTag: int64(pers), + Epoch: int64(round), + Entropy: entropy, + }, + Return: []byte(ret), + } + r.lk.Lock() + r.recorded = append(r.recorded, match) + r.lk.Unlock() + + return ret, err +} + +func (r *RecordingRand) GetBeaconRandomnessV3(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + return r.getBeaconRandomness(ctx, pers, round, entropy) +} + +func (r *RecordingRand) GetBeaconRandomnessV1(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + return r.getBeaconRandomness(ctx, pers, round, entropy) +} + +func (r *RecordingRand) GetBeaconRandomnessV2(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + return r.getBeaconRandomness(ctx, pers, round, entropy) +} + +func (r *RecordingRand) getBeaconRandomness(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) ([]byte, error) { + r.once.Do(r.loadHead) + ret, err := r.api.ChainGetRandomnessFromBeacon(ctx, r.head, pers, round, entropy) + if err != nil { + return ret, err + } + + r.reporter.Logf("fetched and recorded beacon randomness for: dst=%d, epoch=%d, entropy=%x, result=%x", pers, round, entropy, ret) + + match := schema.RandomnessMatch{ + On: schema.RandomnessRule{ + Kind: schema.RandomnessBeacon, + DomainSeparationTag: int64(pers), + Epoch: int64(round), + Entropy: entropy, + }, + Return: []byte(ret), + } + r.lk.Lock() + r.recorded = append(r.recorded, match) + r.lk.Unlock() + + return ret, err +} + +func (r *RecordingRand) Recorded() schema.Randomness { + r.lk.Lock() + defer r.lk.Unlock() + + return r.recorded +} diff --git a/tools/conformance/rand_replay.go b/tools/conformance/rand_replay.go new file mode 100644 index 0000000000..b9b5634868 --- /dev/null +++ b/tools/conformance/rand_replay.go @@ -0,0 +1,87 @@ +package conformance + +import ( + "bytes" + "context" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" + + "github.com/filecoin-project/test-vectors/schema" +) + +type ReplayingRand struct { + reporter Reporter + recorded schema.Randomness + fallback vmcontext.HeadChainRandomness +} + +var _ vmcontext.HeadChainRandomness = (*ReplayingRand)(nil) + +// NewReplayingRand replays recorded randomness when requested, falling back to +// fixed randomness if the value cannot be found; hence this is a safe +// backwards-compatible replacement for fixedRand. +func NewReplayingRand(reporter Reporter, recorded schema.Randomness) *ReplayingRand { + return &ReplayingRand{ + reporter: reporter, + recorded: recorded, + fallback: NewFixedRand(), + } +} + +func (r *ReplayingRand) match(requested schema.RandomnessRule) ([]byte, bool) { + for _, other := range r.recorded { + if other.On.Kind == requested.Kind && + other.On.Epoch == requested.Epoch && + other.On.DomainSeparationTag == requested.DomainSeparationTag && + bytes.Equal(other.On.Entropy, requested.Entropy) { + return other.Return, true + } + } + return nil, false +} + +func (r *ReplayingRand) ChainGetRandomnessFromBeacon(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + return r.getBeaconRandomness(ctx, pers, round, entropy, false) +} + +func (r *ReplayingRand) ChainGetRandomnessFromTickets(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte) (abi.Randomness, error) { + return r.getChainRandomness(ctx, pers, round, entropy, false) +} + +func (r *ReplayingRand) getChainRandomness(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte, lookback bool) ([]byte, error) { + rule := schema.RandomnessRule{ + Kind: schema.RandomnessChain, + DomainSeparationTag: int64(pers), + Epoch: int64(round), + Entropy: entropy, + } + + if ret, ok := r.match(rule); ok { + r.reporter.Logf("returning saved chain randomness: dst=%d, epoch=%d, entropy=%x, result=%x", pers, round, entropy, ret) + return ret, nil + } + + r.reporter.Logf("returning fallback chain randomness: dst=%d, epoch=%d, entropy=%x", pers, round, entropy) + + return r.fallback.ChainGetRandomnessFromTickets(ctx, pers, round, entropy) +} + +func (r *ReplayingRand) getBeaconRandomness(ctx context.Context, pers crypto.DomainSeparationTag, round abi.ChainEpoch, entropy []byte, lookback bool) ([]byte, error) { + rule := schema.RandomnessRule{ + Kind: schema.RandomnessBeacon, + DomainSeparationTag: int64(pers), + Epoch: int64(round), + Entropy: entropy, + } + + if ret, ok := r.match(rule); ok { + r.reporter.Logf("returning saved beacon randomness: dst=%d, epoch=%d, entropy=%x, result=%x", pers, round, entropy, ret) + return ret, nil + } + + r.reporter.Logf("returning fallback beacon randomness: dst=%d, epoch=%d, entropy=%x", pers, round, entropy) + + return r.fallback.ChainGetRandomnessFromBeacon(ctx, pers, round, entropy) +} diff --git a/tools/conformance/reporter.go b/tools/conformance/reporter.go new file mode 100644 index 0000000000..1cd2d389db --- /dev/null +++ b/tools/conformance/reporter.go @@ -0,0 +1,62 @@ +package conformance + +import ( + "log" + "os" + "sync/atomic" + "testing" + + "github.com/fatih/color" +) + +// Reporter is a contains a subset of the testing.T methods, so that the +// Execute* functions in this package can be used inside or outside of +// go test runs. +type Reporter interface { + Helper() + + Log(args ...interface{}) + Errorf(format string, args ...interface{}) + Fatalf(format string, args ...interface{}) + Logf(format string, args ...interface{}) + FailNow() + Failed() bool +} + +var _ Reporter = (*testing.T)(nil) + +// LogReporter wires the Reporter methods to the log package. It is appropriate +// to use when calling the Execute* functions from a standalone CLI program. +type LogReporter struct { + failed int32 +} + +var _ Reporter = (*LogReporter)(nil) + +func (*LogReporter) Helper() {} + +func (*LogReporter) Log(args ...interface{}) { + log.Println(args...) +} + +func (*LogReporter) Logf(format string, args ...interface{}) { + log.Printf(format, args...) +} + +func (*LogReporter) FailNow() { + os.Exit(1) +} + +func (l *LogReporter) Failed() bool { + return atomic.LoadInt32(&l.failed) == 1 +} + +func (l *LogReporter) Errorf(format string, args ...interface{}) { + atomic.StoreInt32(&l.failed, 1) + log.Println(color.HiRedString("โŒ "+format, args...)) +} + +func (l *LogReporter) Fatalf(format string, args ...interface{}) { + atomic.StoreInt32(&l.failed, 1) + log.Fatal(color.HiRedString("โŒ "+format, args...)) +} diff --git a/tools/conformance/runner.go b/tools/conformance/runner.go new file mode 100644 index 0000000000..b8b824ad3f --- /dev/null +++ b/tools/conformance/runner.go @@ -0,0 +1,268 @@ +package conformance + +import ( + "bytes" + "compress/gzip" + "context" + "encoding/base64" + "fmt" + "io/ioutil" + "os" + "os/exec" + "strconv" + + "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + types "github.com/filecoin-project/venus/venus-shared/chain" + + "github.com/fatih/color" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/exitcode" + "github.com/filecoin-project/test-vectors/schema" + "github.com/ipfs/go-blockservice" + "github.com/ipfs/go-cid" + ds "github.com/ipfs/go-datastore" + offline "github.com/ipfs/go-ipfs-exchange-offline" + format "github.com/ipfs/go-ipld-format" + "github.com/ipfs/go-merkledag" + "github.com/ipld/go-car" + + "github.com/filecoin-project/venus/pkg/vm" +) + +// ExecuteMessageVector executes a message-class test vector. +func ExecuteMessageVector(r Reporter, v string, vector *schema.TestVector, variant *schema.Variant) { + var ( + ctx = context.Background() + baseEpoch = variant.Epoch + root = vector.Pre.StateTree.RootCID + ) + + // Load the CAR into a new temporary blockstore. + bs, err := LoadVectorCAR(vector.CAR) + if err != nil { + r.Fatalf("failed to load the vector CAR: %w", err) + } + // Create a new Driver. + driver := NewDriver(ctx, vector.Selector, DriverOpts{DisableVMFlush: true}) + + // Apply every message. + for i, m := range vector.ApplyMessages { + msg, err := types.DecodeMessage(m.Bytes) + if err != nil { + r.Fatalf("failed to deserialize message: %s", err) + } + + // add the epoch offset if one is set. + if m.EpochOffset != nil { + baseEpoch += *m.EpochOffset + } + + // Execute the message. + var ret *vm.Ret + ret, root, err = driver.ExecuteMessage(bs, ExecuteMessageParams{ + Preroot: root, + Epoch: abi.ChainEpoch(baseEpoch), + Message: msg, + BaseFee: BaseFeeOrDefault(vector.Pre.BaseFee), + CircSupply: CircSupplyOrDefault(vector.Pre.CircSupply), + Rand: NewReplayingRand(r, vector.Randomness), + }) + if err != nil { + r.Fatalf("fatal failure when executing message: %s", err) + } + + // Assert that the receipt matches what the test vector expects. + AssertMsgResult(r, vector.Post.Receipts[i], ret, strconv.Itoa(i)) + } + + // Once all messages are applied, assert that the final state root matches + // the expected postcondition root. + if expected, actual := vector.Post.StateTree.RootCID, root; expected != actual { + r.Errorf("wrong post root cid; expected %v, but got %v", expected, actual) + dumpThreeWayStateDiff(r, vector, bs, root) + r.FailNow() + } +} + +// ExecuteTipsetVector executes a tipset-class test vector. +func ExecuteTipsetVector(r Reporter, v string, vector *schema.TestVector, variant *schema.Variant) { + var ( + ctx = context.Background() + baseEpoch = abi.ChainEpoch(variant.Epoch) + root = vector.Pre.StateTree.RootCID + tmpds = ds.NewMapDatastore() + ) + + // Load the vector CAR into a new temporary blockstore. + bs, err := LoadVectorCAR(vector.CAR) + if err != nil { + r.Fatalf("failed to load the vector CAR: %w", err) + } + + // Create a new Driver. + driver := NewDriver(ctx, vector.Selector, DriverOpts{}) + + // Apply every tipset. + var receiptsIdx int + var prevEpoch = baseEpoch + for i, ts := range vector.ApplyTipsets { + ts := ts // capture + execEpoch := baseEpoch + abi.ChainEpoch(ts.EpochOffset) + ret, err := driver.ExecuteTipset(bs, tmpds, root, prevEpoch, &ts, execEpoch) + if err != nil { + r.Fatalf("failed to apply tipset %d message: %s", i, err) + } + + for j, v := range ret.AppliedResults { + AssertMsgResult(r, vector.Post.Receipts[receiptsIdx], v, fmt.Sprintf("%d of tipset %d", j, i)) + receiptsIdx++ + } + + // Compare the receipts root. + if expected, actual := vector.Post.ReceiptsRoots[i], ret.ReceiptsRoot; expected != actual { + r.Errorf("post receipts root doesn't match; expected: %s, was: %s", expected, actual) + } + + prevEpoch = execEpoch + root = ret.PostStateRoot + } + + // Once all messages are applied, assert that the final state root matches + // the expected postcondition root. + if expected, actual := vector.Post.StateTree.RootCID, root; expected != actual { + r.Errorf("wrong post root cid; expected %v, but got %v", expected, actual) + dumpThreeWayStateDiff(r, vector, bs, root) + r.FailNow() + } +} + +// AssertMsgResult compares a message result. It takes the expected receipt +// encoded in the vector, the actual receipt returned by Lotus, and a message +// label to log in the assertion failure message to facilitate debugging. +func AssertMsgResult(r Reporter, expected *schema.Receipt, actual *vm.Ret, label string) { + r.Helper() + + if expected, actual := exitcode.ExitCode(expected.ExitCode), actual.Receipt.ExitCode; expected != actual { + r.Errorf("exit code of msg %s did not match; expected: %s, got: %s", label, expected, actual) + } + if expected, actual := expected.GasUsed, actual.Receipt.GasUsed; expected != actual { + r.Errorf("gas used of msg %s did not match; expected: %d, got: %d", label, expected, actual) + } + if expected, actual := []byte(expected.ReturnValue), actual.Receipt.Return; !bytes.Equal(expected, actual) { + r.Errorf("return value of msg %s did not match; expected: %s, got: %s", label, base64.StdEncoding.EncodeToString(expected), base64.StdEncoding.EncodeToString(actual)) + } +} + +func dumpThreeWayStateDiff(r Reporter, vector *schema.TestVector, bs blockstoreutil.Blockstore, actual cid.Cid) { + // check if statediff exists; if not, skip. + if err := exec.Command("statediff", "--help").Run(); err != nil { + r.Log("could not dump 3-way state tree diff upon test failure: statediff command not found") + r.Log("install statediff with:") + r.Log("$ git clone https://github.com/filecoin-project/statediff.git") + r.Log("$ cd statediff") + r.Log("$ go generate ./...") + r.Log("$ go install ./cmd/statediff") + return + } + + tmpCar, err := writeStateToTempCAR(bs, + vector.Pre.StateTree.RootCID, + vector.Post.StateTree.RootCID, + actual, + ) + if err != nil { + r.Fatalf("failed to write temporary state CAR: %s", err) + } + defer os.RemoveAll(tmpCar) //nolint:errcheck + + color.NoColor = false // enable colouring. + + var ( + a = color.New(color.FgMagenta, color.Bold).Sprint("(A) expected final state") + b = color.New(color.FgYellow, color.Bold).Sprint("(B) actual final state") + c = color.New(color.FgCyan, color.Bold).Sprint("(C) initial state") + d1 = color.New(color.FgGreen, color.Bold).Sprint("[ฮ”1]") + d2 = color.New(color.FgGreen, color.Bold).Sprint("[ฮ”2]") + d3 = color.New(color.FgGreen, color.Bold).Sprint("[ฮ”3]") + ) + + printDiff := func(left, right cid.Cid) { + cmd := exec.Command("statediff", "car", "--file", tmpCar, left.String(), right.String()) + b, err := cmd.CombinedOutput() + if err != nil { + r.Fatalf("statediff failed: %s", err) + } + r.Log(string(b)) + } + + bold := color.New(color.Bold).SprintfFunc() + + // run state diffs. + r.Log(bold("=== dumping 3-way diffs between %s, %s, %s ===", a, b, c)) + + r.Log(bold("--- %s left: %s; right: %s ---", d1, a, b)) + printDiff(vector.Post.StateTree.RootCID, actual) + + r.Log(bold("--- %s left: %s; right: %s ---", d2, c, b)) + printDiff(vector.Pre.StateTree.RootCID, actual) + + r.Log(bold("--- %s left: %s; right: %s ---", d3, c, a)) + printDiff(vector.Pre.StateTree.RootCID, vector.Post.StateTree.RootCID) +} + +// writeStateToTempCAR writes the provided roots to a temporary CAR that'll be +// cleaned up via t.Cleanup(). It returns the full path of the temp file. +func writeStateToTempCAR(bs blockstoreutil.Blockstore, roots ...cid.Cid) (string, error) { + tmp, err := ioutil.TempFile("", "lotus-tests-*.car") + if err != nil { + return "", fmt.Errorf("failed to create temp file to dump CAR for diffing: %w", err) + } + + carWalkFn := func(nd format.Node) (out []*format.Link, err error) { + for _, link := range nd.Links() { + if link.Cid.Prefix().Codec == cid.FilCommitmentSealed || link.Cid.Prefix().Codec == cid.FilCommitmentUnsealed { + continue + } + // ignore things we don't have, the state tree is incomplete. + if has, err := bs.Has(context.TODO(), link.Cid); err != nil { + return nil, err + } else if has { + out = append(out, link) + } + } + return out, nil + } + + var ( + offl = offline.Exchange(bs) + blkserv = blockservice.New(bs, offl) + dserv = merkledag.NewDAGService(blkserv) + ) + + err = car.WriteCarWithWalker(context.Background(), dserv, roots, tmp, carWalkFn) + if err != nil { + return "", fmt.Errorf("failed to dump CAR for diffing: %w", err) + } + _ = tmp.Close() + return tmp.Name(), nil +} + +func LoadVectorCAR(vectorCAR schema.Base64EncodedBytes) (blockstoreutil.Blockstore, error) { + ds := ds.NewMapDatastore() + bs := blockstoreutil.NewBlockstore(ds) + + // Read the base64-encoded CAR from the vector, and inflate the gzip. + buf := bytes.NewReader(vectorCAR) + r, err := gzip.NewReader(buf) + if err != nil { + return nil, fmt.Errorf("failed to inflate gzipped CAR: %s", err) + } + defer r.Close() // nolint + + // Load the CAR embedded in the test vector into the blockstore. + _, err = car.LoadCar(context.TODO(), bs, r) + if err != nil { + return nil, fmt.Errorf("failed to load state tree car from test vector: %s", err) + } + return bs, nil +} diff --git a/tools/fast/action_actor.go b/tools/fast/action_actor.go index a3b1fad73e..604d7abe91 100644 --- a/tools/fast/action_actor.go +++ b/tools/fast/action_actor.go @@ -2,23 +2,22 @@ package fast import ( "context" + "github.com/filecoin-project/venus/cmd" "io" - - "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" ) // ActorLs runs the `actor ls` command against the filecoin process. -func (f *Filecoin) ActorLs(ctx context.Context) ([]commands.ActorView, error) { - args := []string{"go-filecoin", "actor", "ls"} +func (f *Filecoin) ActorLs(ctx context.Context) ([]cmd.ActorView, error) { + args := []string{"venus", "state", "list-actor"} dec, err := f.RunCmdLDJSONWithStdin(ctx, nil, args...) if err != nil { return nil, err } - views := []commands.ActorView{} + views := []cmd.ActorView{} for dec.More() { - var view commands.ActorView + var view cmd.ActorView err := dec.Decode(&view) if err != nil { if err == io.EOF { diff --git a/tools/fast/action_address.go b/tools/fast/action_address.go deleted file mode 100644 index fa45468ebe..0000000000 --- a/tools/fast/action_address.go +++ /dev/null @@ -1,38 +0,0 @@ -package fast - -import ( - "context" - - "github.com/filecoin-project/go-address" - "github.com/libp2p/go-libp2p-core/peer" - - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" -) - -// AddressNew runs the address new command against the filecoin process. -func (f *Filecoin) AddressNew(ctx context.Context) (address.Address, error) { - var newAddress address.Address - if err := f.RunCmdJSONWithStdin(ctx, nil, &newAddress, "go-filecoin", "address", "new"); err != nil { - return address.Undef, err - } - return newAddress, nil -} - -// AddressLs runs the address ls command against the filecoin process. -func (f *Filecoin) AddressLs(ctx context.Context) ([]address.Address, error) { - // the command returns an AddressListResult - var alr commands.AddressLsResult - if err := f.RunCmdJSONWithStdin(ctx, nil, &alr, "go-filecoin", "address", "ls"); err != nil { - return nil, err - } - return alr.Addresses, nil -} - -// AddressLookup runs the address lookup command against the filecoin process. -func (f *Filecoin) AddressLookup(ctx context.Context, addr address.Address) (peer.ID, error) { - var ownerPeer peer.ID - if err := f.RunCmdJSONWithStdin(ctx, nil, &ownerPeer, "go-filecoin", "address", "lookup", addr.String()); err != nil { - return "", err - } - return ownerPeer, nil -} diff --git a/tools/fast/action_bootstrap.go b/tools/fast/action_bootstrap.go deleted file mode 100644 index d431dcbd4f..0000000000 --- a/tools/fast/action_bootstrap.go +++ /dev/null @@ -1,20 +0,0 @@ -package fast - -import ( - "context" - - "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" -) - -// BootstrapLs runs the `bootstrap ls` command against the filecoin process. -func (f *Filecoin) BootstrapLs(ctx context.Context) (*commands.BootstrapLsResult, error) { - var out commands.BootstrapLsResult - args := []string{"go-filecoin", "bootstrap", "ls"} - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, args...); err != nil { - return nil, err - } - - return &out, nil - -} diff --git a/tools/fast/action_chain.go b/tools/fast/action_chain.go index ec31b54fea..d474583523 100644 --- a/tools/fast/action_chain.go +++ b/tools/fast/action_chain.go @@ -5,14 +5,12 @@ import ( "encoding/json" "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" ) // ChainHead runs the chain head command against the filecoin process. func (f *Filecoin) ChainHead(ctx context.Context) ([]cid.Cid, error) { var out []cid.Cid - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "chain", "head"); err != nil { + if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "venus", "chain", "head"); err != nil { return nil, err } return out, nil @@ -21,14 +19,5 @@ func (f *Filecoin) ChainHead(ctx context.Context) ([]cid.Cid, error) { // ChainLs runs the chain ls command against the filecoin process. func (f *Filecoin) ChainLs(ctx context.Context) (*json.Decoder, error) { - return f.RunCmdLDJSONWithStdin(ctx, nil, "go-filecoin", "chain", "ls") -} - -// ChainStatus runs the chain status command against the filecoin process. -func (f *Filecoin) ChainStatus(ctx context.Context) (*chain.Status, error) { - var out *chain.Status - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "chain", "status"); err != nil { - return nil, err - } - return out, nil + return f.RunCmdLDJSONWithStdin(ctx, nil, "venus", "chain", "ls") } diff --git a/tools/fast/action_client.go b/tools/fast/action_client.go deleted file mode 100644 index 360ff41be0..0000000000 --- a/tools/fast/action_client.go +++ /dev/null @@ -1,85 +0,0 @@ -package fast - -import ( - "context" - "encoding/json" - "fmt" - "io" - - "github.com/filecoin-project/go-fil-markets/storagemarket/network" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-cid" - files "github.com/ipfs/go-ipfs-files" - - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" -) - -// ClientCat runs the client cat command against the filecoin process. -// A ReadCloser is returned representing the data. -// TODO(frrist): address buffering in filecoin plugins to exert appropriate backpressure on the -// reader IPTB returns. -func (f *Filecoin) ClientCat(ctx context.Context, cid cid.Cid) (io.ReadCloser, error) { - out, err := f.RunCmdWithStdin(ctx, nil, "go-filecoin", "client", "cat", cid.String()) - if err != nil { - return nil, err - } - return out.Stdout(), err -} - -// ClientImport runs the client import data command against the filecoin process. -func (f *Filecoin) ClientImport(ctx context.Context, data files.File) (cid.Cid, error) { - var out cid.Cid - if err := f.RunCmdJSONWithStdin(ctx, data, &out, "go-filecoin", "client", "import"); err != nil { - return cid.Undef, err - } - return out, nil -} - -// ClientProposeStorageDeal runs the client propose-storage-deal command against the filecoin process. -func (f *Filecoin) ClientProposeStorageDeal(ctx context.Context, data cid.Cid, - miner address.Address, ask uint64, duration uint64, options ...ActionOption) (*network.Response, error) { - - var out network.Response - sData := data.String() - sMiner := miner.String() - sAsk := fmt.Sprintf("%d", ask) - sDuration := fmt.Sprintf("%d", duration) - - args := []string{"go-filecoin", "client", "propose-storage-deal", sMiner, sData, sAsk, sDuration} - for _, opt := range options { - args = append(args, opt()...) - } - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, args...); err != nil { - return nil, err - } - return &out, nil -} - -// ClientQueryStorageDeal runs the client query-storage-deal command against the filecoin process. -func (f *Filecoin) ClientQueryStorageDeal(ctx context.Context, prop cid.Cid) (*network.Response, error) { - var out network.Response - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "client", "query-storage-deal", prop.String()); err != nil { - return nil, err - } - return &out, nil -} - -// ClientVerifyStorageDeal runs the client verify-storage-deal command against the filecoin process. -func (f *Filecoin) ClientVerifyStorageDeal(ctx context.Context, prop cid.Cid) (*commands.VerifyStorageDealResult, error) { - var out commands.VerifyStorageDealResult - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "client", "verify-storage-deal", prop.String()); err != nil { - return nil, err - } - - return &out, nil -} - -// ClientListAsks runs the client list-asks command against the filecoin process. -// A json decoer is returned that asks may be decoded from. -func (f *Filecoin) ClientListAsks(ctx context.Context) (*json.Decoder, error) { - return f.RunCmdLDJSONWithStdin(ctx, nil, "go-filecoin", "client", "list-asks") -} diff --git a/tools/fast/action_config.go b/tools/fast/action_config.go index eb3df93fab..abe023b735 100644 --- a/tools/fast/action_config.go +++ b/tools/fast/action_config.go @@ -9,7 +9,7 @@ import ( // ConfigGet runs the `config` command against the filecoin process, and decodes the // output into `v`. func (f *Filecoin) ConfigGet(ctx context.Context, key string, v interface{}) error { - args := []string{"go-filecoin", "config", key} + args := []string{"venus", "config", key} if err := f.RunCmdJSONWithStdin(ctx, nil, v, args...); err != nil { return err @@ -26,7 +26,7 @@ func (f *Filecoin) ConfigSet(ctx context.Context, key string, v interface{}) err return err } - args := []string{"go-filecoin", "config", key, string(value)} + args := []string{"venus", "config", key, string(value)} out, err := f.RunCmdWithStdin(ctx, nil, args...) if err != nil { diff --git a/tools/fast/action_dag.go b/tools/fast/action_dag.go index 0942dff559..1a827245e4 100644 --- a/tools/fast/action_dag.go +++ b/tools/fast/action_dag.go @@ -12,7 +12,7 @@ func (f *Filecoin) DagGet(ctx context.Context, ref cid.Cid) (map[string]interfac sRef := ref.String() - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "dag", "get", sRef); err != nil { + if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "venus", "dag", "get", sRef); err != nil { return nil, err } diff --git a/tools/fast/action_deals.go b/tools/fast/action_deals.go deleted file mode 100644 index e105a5686a..0000000000 --- a/tools/fast/action_deals.go +++ /dev/null @@ -1,17 +0,0 @@ -package fast - -import ( - "context" - "encoding/json" -) - -// DealsList runs the `deals list` command against the filecoin process -func (f *Filecoin) DealsList(ctx context.Context, options ...ActionOption) (*json.Decoder, error) { - args := []string{"go-filecoin", "deals", "list"} - - for _, option := range options { - args = append(args, option()...) - } - - return f.RunCmdLDJSONWithStdin(ctx, nil, args...) -} diff --git a/tools/fast/action_dht.go b/tools/fast/action_dht.go deleted file mode 100644 index 2a0fc89616..0000000000 --- a/tools/fast/action_dht.go +++ /dev/null @@ -1,46 +0,0 @@ -package fast - -import ( - "context" - "encoding/json" - "io" - - "github.com/ipfs/go-cid" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/multiformats/go-multiaddr" -) - -// DHTFindPeer runs the `dht findpeer` command against the filecoin process -func (f *Filecoin) DHTFindPeer(ctx context.Context, pid peer.ID) ([]multiaddr.Multiaddr, error) { - decoder, err := f.RunCmdLDJSONWithStdin(ctx, nil, "go-filecoin", "dht", "findpeer", pid.String()) - if err != nil { - return nil, err - } - - var out []multiaddr.Multiaddr - for { - var addr string - if err := decoder.Decode(&addr); err != nil { - if err == io.EOF { - break - } - - return []multiaddr.Multiaddr{}, err - } - - ma, err := multiaddr.NewMultiaddr(addr) - if err != nil { - return []multiaddr.Multiaddr{}, err - } - - out = append(out, ma) - } - - return out, nil -} - -// DHTFindProvs runs the `dht findprovs` command against the filecoin process -func (f *Filecoin) DHTFindProvs(ctx context.Context, key cid.Cid) (*json.Decoder, error) { - args := []string{"go-filecoin", "dht", "findprovs", key.String()} - return f.RunCmdLDJSONWithStdin(ctx, nil, args...) -} diff --git a/tools/fast/action_id.go b/tools/fast/action_id.go deleted file mode 100644 index 64de7dda9f..0000000000 --- a/tools/fast/action_id.go +++ /dev/null @@ -1,23 +0,0 @@ -package fast - -import ( - "context" - - "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" -) - -// ID runs the `id` command against the filecoin process -func (f *Filecoin) ID(ctx context.Context, options ...ActionOption) (*commands.IDDetails, error) { - var out commands.IDDetails - args := []string{"go-filecoin", "id"} - - for _, option := range options { - args = append(args, option()...) - } - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, args...); err != nil { - return nil, err - } - - return &out, nil -} diff --git a/tools/fast/action_inspector.go b/tools/fast/action_inspector.go index af31484dbd..81d9682352 100644 --- a/tools/fast/action_inspector.go +++ b/tools/fast/action_inspector.go @@ -2,16 +2,15 @@ package fast import ( "context" - - "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" + "github.com/filecoin-project/venus/app/node" + "github.com/filecoin-project/venus/pkg/config" ) // InspectAll runs the `inspect all` command against the filecoin process -func (f *Filecoin) InspectAll(ctx context.Context, options ...ActionOption) (*commands.AllInspectorInfo, error) { - var out commands.AllInspectorInfo +func (f *Filecoin) InspectAll(ctx context.Context, options ...ActionOption) (*node.AllInspectorInfo, error) { + var out node.AllInspectorInfo - args := []string{"go-filecoin", "inspect", "all"} + args := []string{"venus", "inspect", "all"} for _, option := range options { args = append(args, option()...) @@ -25,10 +24,10 @@ func (f *Filecoin) InspectAll(ctx context.Context, options ...ActionOption) (*co } // InspectRuntime runs the `inspect runtime` command against the filecoin process -func (f *Filecoin) InspectRuntime(ctx context.Context, options ...ActionOption) (*commands.RuntimeInfo, error) { - var out commands.RuntimeInfo +func (f *Filecoin) InspectRuntime(ctx context.Context, options ...ActionOption) (*node.RuntimeInfo, error) { + var out node.RuntimeInfo - args := []string{"go-filecoin", "inspect", "runtime"} + args := []string{"venus", "inspect", "runtime"} for _, option := range options { args = append(args, option()...) @@ -42,10 +41,10 @@ func (f *Filecoin) InspectRuntime(ctx context.Context, options ...ActionOption) } // InspectDisk runs the `inspect disk` command against the filecoin process -func (f *Filecoin) InspectDisk(ctx context.Context, options ...ActionOption) (*commands.DiskInfo, error) { - var out commands.DiskInfo +func (f *Filecoin) InspectDisk(ctx context.Context, options ...ActionOption) (*node.DiskInfo, error) { + var out node.DiskInfo - args := []string{"go-filecoin", "inspect", "disk"} + args := []string{"venus", "inspect", "disk"} for _, option := range options { args = append(args, option()...) @@ -59,10 +58,10 @@ func (f *Filecoin) InspectDisk(ctx context.Context, options ...ActionOption) (*c } // InspectMemory runs the `inspect memory` command against the filecoin process -func (f *Filecoin) InspectMemory(ctx context.Context, options ...ActionOption) (*commands.MemoryInfo, error) { - var out commands.MemoryInfo +func (f *Filecoin) InspectMemory(ctx context.Context, options ...ActionOption) (*node.MemoryInfo, error) { + var out node.MemoryInfo - args := []string{"go-filecoin", "inspect", "memory"} + args := []string{"venus", "inspect", "memory"} for _, option := range options { args = append(args, option()...) @@ -79,7 +78,7 @@ func (f *Filecoin) InspectMemory(ctx context.Context, options ...ActionOption) ( func (f *Filecoin) InspectConfig(ctx context.Context, options ...ActionOption) (*config.Config, error) { var out config.Config - args := []string{"go-filecoin", "inspect", "config"} + args := []string{"venus", "inspect", "config"} for _, option := range options { args = append(args, option()...) diff --git a/tools/fast/action_message.go b/tools/fast/action_message.go index c448a73f0b..8152b3d41a 100644 --- a/tools/fast/action_message.go +++ b/tools/fast/action_message.go @@ -4,19 +4,20 @@ import ( "context" "strconv" + "github.com/filecoin-project/venus/cmd" + "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/builtin" + "github.com/filecoin-project/go-state-types/abi" cid "github.com/ipfs/go-cid" - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" ) // MessageSend runs the `message send` command against the filecoin process. func (f *Filecoin) MessageSend(ctx context.Context, target address.Address, method abi.MethodNum, options ...ActionOption) (cid.Cid, error) { - var out commands.MessageSendResult + var out cmd.MessageSendResult - args := []string{"go-filecoin", "message", "send"} + args := []string{"venus", "send"} for _, option := range options { args = append(args, option()...) @@ -36,10 +37,10 @@ func (f *Filecoin) MessageSend(ctx context.Context, target address.Address, meth } // MessageWait runs the `message wait` command against the filecoin process. -func (f *Filecoin) MessageWait(ctx context.Context, mcid cid.Cid, options ...ActionOption) (commands.WaitResult, error) { - var out commands.WaitResult +func (f *Filecoin) MessageWait(ctx context.Context, mcid cid.Cid, options ...ActionOption) (cmd.WaitResult, error) { + var out cmd.WaitResult - args := []string{"go-filecoin", "message", "wait"} + args := []string{"venus", "message", "wait"} for _, option := range options { args = append(args, option()...) @@ -48,7 +49,7 @@ func (f *Filecoin) MessageWait(ctx context.Context, mcid cid.Cid, options ...Act args = append(args, mcid.String()) if err := f.RunCmdJSONWithStdin(ctx, nil, &out, args...); err != nil { - return commands.WaitResult{}, err + return cmd.WaitResult{}, err } return out, nil diff --git a/tools/fast/action_miner.go b/tools/fast/action_miner.go deleted file mode 100644 index 9e2634f8de..0000000000 --- a/tools/fast/action_miner.go +++ /dev/null @@ -1,102 +0,0 @@ -package fast - -import ( - "context" - "math/big" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-cid" - "github.com/libp2p/go-libp2p-core/peer" - - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" -) - -// MinerCreate runs the `miner create` command against the filecoin process -func (f *Filecoin) MinerCreate(ctx context.Context, collateral *big.Int, options ...ActionOption) (address.Address, error) { - var out commands.MinerCreateResult - - args := []string{"go-filecoin", "miner", "create"} - - for _, option := range options { - args = append(args, option()...) - } - - args = append(args, collateral.String()) - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, args...); err != nil { - return address.Undef, err - } - - return out.Address, nil -} - -// MinerUpdatePeerid runs the `miner update-peerid` command against the filecoin process -func (f *Filecoin) MinerUpdatePeerid(ctx context.Context, minerAddr address.Address, pid peer.ID, options ...ActionOption) (cid.Cid, error) { - var out commands.MinerUpdatePeerIDResult - - args := []string{"go-filecoin", "miner", "update-peerid"} - - for _, option := range options { - args = append(args, option()...) - } - - args = append(args, minerAddr.String(), pid.Pretty()) - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, args...); err != nil { - return cid.Undef, err - } - - return out.Cid, nil -} - -// MinerStatus runs the `miner power` command against the filecoin process -func (f *Filecoin) MinerStatus(ctx context.Context, minerAddr address.Address) (porcelain.MinerStatus, error) { - var out porcelain.MinerStatus - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "miner", "status", minerAddr.String()); err != nil { - return porcelain.MinerStatus{}, err - } - - return out, nil -} - -// MinerSetPrice runs the `miner set-price` command against the filecoin process -func (f *Filecoin) MinerSetPrice(ctx context.Context, fil *big.Float, expiry *big.Int, options ...ActionOption) (*porcelain.MinerSetPriceResponse, error) { - var out commands.MinerSetPriceResult - - sFil := fil.Text('f', -1) - - args := []string{"go-filecoin", "miner", "set-price"} - - for _, option := range options { - args = append(args, option()...) - } - - args = append(args, sFil, expiry.String()) - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, args...); err != nil { - return nil, err - } - - return &porcelain.MinerSetPriceResponse{ - MinerAddr: out.MinerAddress, - Price: out.Price, - }, nil -} - -// MinerSetWorker runs the `miner set-worker` command against the filecoin process -func (f *Filecoin) MinerSetWorker(ctx context.Context, newAddr address.Address, options ...ActionOption) (cid.Cid, error) { - var out cid.Cid - - args := []string{"go-filecoin", "miner", "set-worker", newAddr.String()} - - for _, option := range options { - args = append(args, option()...) - } - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, args...); err != nil { - return out, err - } - return out, nil -} diff --git a/tools/fast/action_miner_test.go b/tools/fast/action_miner_test.go deleted file mode 100644 index f55b9a2bd9..0000000000 --- a/tools/fast/action_miner_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package fast_test - -import ( - "context" - "testing" - - "github.com/filecoin-project/go-address" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/fastesting" -) - -func TestFilecoin_MinerPower(t *testing.T) { - tf.IntegrationTest(t) - t.Skip("not working") - - ctx, env := fastesting.NewTestEnvironment(context.Background(), t, fast.FilecoinOpts{}) - defer func() { - require.NoError(t, env.Teardown(ctx)) - }() - - expectedGenesisPower := uint64(131072) - assertPowerOutput(ctx, t, env.GenesisMiner, expectedGenesisPower, expectedGenesisPower) - - // TODO 3642 this test should check that miner's created with miner create have power -} - -func requireGetMinerAddress(ctx context.Context, t *testing.T, daemon *fast.Filecoin) address.Address { - var minerAddress address.Address - err := daemon.ConfigGet(ctx, "mining.minerAddress", &minerAddress) - require.NoError(t, err) - return minerAddress -} - -func assertPowerOutput(ctx context.Context, t *testing.T, d *fast.Filecoin, expMinerPwr, expTotalPwr uint64) { - minerAddr := requireGetMinerAddress(ctx, t, d) - status, err := d.MinerStatus(ctx, minerAddr) - require.NoError(t, err) - assert.Equal(t, expMinerPwr, status.QualityAdjustedPower.Uint64(), "for miner power") - assert.Equal(t, expTotalPwr, status.NetworkQualityAdjustedPower.Uint64(), "for total power") -} diff --git a/tools/fast/action_mining.go b/tools/fast/action_mining.go deleted file mode 100644 index 681d11fa14..0000000000 --- a/tools/fast/action_mining.go +++ /dev/null @@ -1,99 +0,0 @@ -package fast - -import ( - "context" - "fmt" - - "github.com/filecoin-project/go-address" - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" -) - -// MiningOnce runs the `mining once` command against the filecoin process -func (f *Filecoin) MiningOnce(ctx context.Context) (*block.Block, error) { - var out block.Block - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "mining", "once"); err != nil { - return nil, err - } - - return &out, nil -} - -// MiningSetup prepares the node to receive storage deals -func (f *Filecoin) MiningSetup(ctx context.Context) error { - out, err := f.RunCmdWithStdin(ctx, nil, "go-filecoin", "mining", "setup") - if err != nil { - return err - } - - if out.ExitCode() > 0 { - return fmt.Errorf("filecoin command: %s, exited with non-zero exitcode: %d", out.Args(), out.ExitCode()) - } - - return nil -} - -// MiningStart runs the `mining Start` command against the filecoin process -func (f *Filecoin) MiningStart(ctx context.Context) error { - out, err := f.RunCmdWithStdin(ctx, nil, "go-filecoin", "mining", "start") - if err != nil { - return err - } - - if out.ExitCode() > 0 { - return fmt.Errorf("filecoin command: %s, exited with non-zero exitcode: %d", out.Args(), out.ExitCode()) - } - - return nil -} - -// MiningStop runs the `mining stop` command against the filecoin process -func (f *Filecoin) MiningStop(ctx context.Context) error { - out, err := f.RunCmdWithStdin(ctx, nil, "go-filecoin", "mining", "stop") - if err != nil { - return err - } - - if out.ExitCode() > 0 { - return fmt.Errorf("filecoin command: %s, exited with non-zero exitcode: %d", out.Args(), out.ExitCode()) - } - - return nil -} - -// MiningAddress runs the `mining address` command against the filecoin process -func (f *Filecoin) MiningAddress(ctx context.Context) (address.Address, error) { - var out address.Address - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "mining", "address"); err != nil { - return address.Undef, err - } - - return out, nil -} - -// MiningStatus runs the `mining status` command against the filecoin process -func (f *Filecoin) MiningStatus(ctx context.Context) (commands.MiningStatusResult, error) { - var out commands.MiningStatusResult - - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "mining", "status"); err != nil { - return commands.MiningStatusResult{}, err - } - - return out, nil -} - -// SealNow seals any staged sectors -func (f *Filecoin) SealNow(ctx context.Context) error { - out, err := f.RunCmdWithStdin(ctx, nil, "go-filecoin", "mining", "seal-now") - if err != nil { - return err - } - - if out.ExitCode() > 0 { - return fmt.Errorf("filecoin command: %s, exited with non-zero exitcode: %d", out.Args(), out.ExitCode()) - } - - return nil -} diff --git a/tools/fast/action_mpool.go b/tools/fast/action_mpool.go index 0f9924c759..ce7fc3af53 100644 --- a/tools/fast/action_mpool.go +++ b/tools/fast/action_mpool.go @@ -3,14 +3,14 @@ package fast import ( "context" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" + types "github.com/filecoin-project/venus/venus-shared/chain" ) // MpoolLs runs the `mpool ls` command against the filecoin process. func (f *Filecoin) MpoolLs(ctx context.Context, options ...ActionOption) ([]*types.SignedMessage, error) { var out []*types.SignedMessage - args := []string{"go-filecoin", "mpool", "ls"} + args := []string{"venus", "mpool", "ls"} for _, option := range options { args = append(args, option()...) diff --git a/tools/fast/action_ping.go b/tools/fast/action_ping.go deleted file mode 100644 index 9870ecb311..0000000000 --- a/tools/fast/action_ping.go +++ /dev/null @@ -1,45 +0,0 @@ -package fast - -import ( - "context" - "io" - - "github.com/libp2p/go-libp2p-core/peer" - - "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" -) - -// Ping runs the `ping` command against the filecoin process -func (f *Filecoin) Ping(ctx context.Context, pid peer.ID, options ...ActionOption) ([]commands.PingResult, error) { - sPid := pid.Pretty() - - args := []string{"go-filecoin", "ping"} - - for _, option := range options { - args = append(args, option()...) - } - - args = append(args, sPid) - - decoder, err := f.RunCmdLDJSONWithStdin(ctx, nil, args...) - if err != nil { - return nil, err - } - - var out []commands.PingResult - - for { - var result commands.PingResult - if err := decoder.Decode(&result); err != nil { - if err == io.EOF { - break - } - - return []commands.PingResult{}, err - } - - out = append(out, result) - } - - return out, nil -} diff --git a/tools/fast/action_protocol.go b/tools/fast/action_protocol.go index 060e93555d..0278f7c6f8 100644 --- a/tools/fast/action_protocol.go +++ b/tools/fast/action_protocol.go @@ -3,14 +3,14 @@ package fast import ( "context" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" + apitypes "github.com/filecoin-project/venus/venus-shared/api/chain" ) // Protocol runs the `protocol` command against the filecoin process -func (f *Filecoin) Protocol(ctx context.Context) (*porcelain.ProtocolParams, error) { - var out porcelain.ProtocolParams +func (f *Filecoin) Protocol(ctx context.Context) (*apitypes.ProtocolParams, error) { + var out apitypes.ProtocolParams - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "protocol"); err != nil { + if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "venus", "protocol"); err != nil { return nil, err } diff --git a/tools/fast/action_retrieval_client.go b/tools/fast/action_retrieval_client.go deleted file mode 100644 index 5eb4c29523..0000000000 --- a/tools/fast/action_retrieval_client.go +++ /dev/null @@ -1,22 +0,0 @@ -package fast - -import ( - "context" - "fmt" - "io" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-cid" -) - -// RetrievalClientRetrievePiece runs the retrieval-client retrieve-piece commands against the filecoin process. -func (f *Filecoin) RetrievalClientRetrievePiece(ctx context.Context, pieceCID cid.Cid, minerAddr address.Address) (io.ReadCloser, error) { - out, err := f.RunCmdWithStdin(ctx, nil, "go-filecoin", "retrieval-client", "retrieve-piece", minerAddr.String(), pieceCID.String()) - if err != nil { - return nil, err - } - if out.ExitCode() > 0 { - return nil, fmt.Errorf("filecoin command: %s, exited with non-zero exitcode: %d", out.Args(), out.ExitCode()) - } - return out.Stdout(), nil -} diff --git a/tools/fast/action_show.go b/tools/fast/action_show.go index 4d722def50..207c6a956d 100644 --- a/tools/fast/action_show.go +++ b/tools/fast/action_show.go @@ -3,20 +3,17 @@ package fast import ( "context" + types "github.com/filecoin-project/venus/venus-shared/chain" "github.com/ipfs/go-cid" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" ) // ShowHeader runs the `show header` command against the filecoin process -func (f *Filecoin) ShowHeader(ctx context.Context, ref cid.Cid) (*block.Block, error) { - var out block.Block +func (f *Filecoin) ShowHeader(ctx context.Context, ref cid.Cid) (*types.BlockHeader, error) { + var out types.BlockHeader sRef := ref.String() - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "show", "header", sRef); err != nil { + if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "venus", "show", "header", sRef); err != nil { return nil, err } @@ -29,7 +26,7 @@ func (f *Filecoin) ShowMessages(ctx context.Context, ref cid.Cid) ([]*types.Sign sRef := ref.String() - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "show", "messages", sRef); err != nil { + if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "venus", "show", "messages", sRef); err != nil { return nil, err } @@ -37,12 +34,12 @@ func (f *Filecoin) ShowMessages(ctx context.Context, ref cid.Cid) ([]*types.Sign } // ShowReceipts runs the `show receipts` command against the filecoin process -func (f *Filecoin) ShowReceipts(ctx context.Context, ref cid.Cid) ([]vm.MessageReceipt, error) { - var out []vm.MessageReceipt +func (f *Filecoin) ShowReceipts(ctx context.Context, ref cid.Cid) ([]types.MessageReceipt, error) { + var out []types.MessageReceipt sRef := ref.String() - if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "go-filecoin", "show", "receipts", sRef); err != nil { + if err := f.RunCmdJSONWithStdin(ctx, nil, &out, "venus", "show", "receipts", sRef); err != nil { return nil, err } diff --git a/tools/fast/action_swarm.go b/tools/fast/action_swarm.go index 44880df128..c8d22a65b3 100644 --- a/tools/fast/action_swarm.go +++ b/tools/fast/action_swarm.go @@ -2,18 +2,38 @@ package fast import ( "context" + "encoding/json" + "io" + + "github.com/filecoin-project/venus/cmd" + "github.com/filecoin-project/venus/venus-shared/libp2p/net" + "github.com/ipfs/go-cid" "github.com/libp2p/go-libp2p-core/peer" "github.com/multiformats/go-multiaddr" - - "github.com/filecoin-project/go-filecoin/internal/pkg/net" ) +// ID runs the `id` command against the filecoin process +func (f *Filecoin) ID(ctx context.Context, options ...ActionOption) (*cmd.IDDetails, error) { + var out cmd.IDDetails + args := []string{"venus", "id"} + + for _, option := range options { + args = append(args, option()...) + } + + if err := f.RunCmdJSONWithStdin(ctx, nil, &out, args...); err != nil { + return nil, err + } + + return &out, nil +} + // SwarmConnect runs the `swarm connect` command against the filecoin process func (f *Filecoin) SwarmConnect(ctx context.Context, addrs ...multiaddr.Multiaddr) (peer.ID, error) { var out peer.ID - args := []string{"go-filecoin", "swarm", "connect"} + args := []string{"venus", "swarm", "connect"} for _, addr := range addrs { args = append(args, addr.String()) @@ -30,7 +50,7 @@ func (f *Filecoin) SwarmConnect(ctx context.Context, addrs ...multiaddr.Multiadd func (f *Filecoin) SwarmPeers(ctx context.Context, options ...ActionOption) ([]net.SwarmConnInfo, error) { var out net.SwarmConnInfos - args := []string{"go-filecoin", "swarm", "peers"} + args := []string{"venus", "swarm", "peers"} for _, option := range options { args = append(args, option()...) @@ -42,3 +62,39 @@ func (f *Filecoin) SwarmPeers(ctx context.Context, options ...ActionOption) ([]n return out.Peers, nil } + +// DHTFindPeer runs the `dht findpeer` command against the filecoin process +func (f *Filecoin) DHTFindPeer(ctx context.Context, pid peer.ID) ([]multiaddr.Multiaddr, error) { + decoder, err := f.RunCmdLDJSONWithStdin(ctx, nil, "venus", "swarm", "findpeer", pid.String()) + if err != nil { + return nil, err + } + + var out []multiaddr.Multiaddr + for { + var addr string + if err := decoder.Decode(&addr); err != nil { + if err == io.EOF { + break + } + + return []multiaddr.Multiaddr{}, err + } + + ma, err := multiaddr.NewMultiaddr(addr) + if err != nil { + return []multiaddr.Multiaddr{}, err + } + + out = append(out, ma) + } + + return out, nil +} + +// DHTFindProvs runs the `dht findprovs` command against the filecoin process +func (f *Filecoin) DHTFindProvs(ctx context.Context, key cid.Cid) (*json.Decoder, error) { + args := []string{"venus", "dht", "findprovs", key.String()} + return f.RunCmdLDJSONWithStdin(ctx, nil, args...) + +} diff --git a/tools/fast/action_wallet.go b/tools/fast/action_wallet.go index 8f7b374ec4..2eb64f2dee 100644 --- a/tools/fast/action_wallet.go +++ b/tools/fast/action_wallet.go @@ -4,19 +4,50 @@ import ( "context" "strings" + fbig "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/cmd" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/filecoin-project/go-address" files "github.com/ipfs/go-ipfs-files" - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" + "github.com/filecoin-project/venus/pkg/crypto" + types "github.com/filecoin-project/venus/venus-shared/chain" ) +// AddressNew runs the address new command against the filecoin process. +func (f *Filecoin) AddressNew(ctx context.Context) (address.Address, error) { + var newAddress address.Address + if err := f.RunCmdJSONWithStdin(ctx, nil, &newAddress, "venus", "wallet", "new"); err != nil { + return address.Undef, err + } + return newAddress, nil +} + +// AddressLs runs the address ls command against the filecoin process. +func (f *Filecoin) AddressLs(ctx context.Context) ([]address.Address, error) { + // the command returns an AddressListResult + var alr cmd.AddressLsResult + if err := f.RunCmdJSONWithStdin(ctx, nil, &alr, "venus", "wallet", "ls"); err != nil { + return nil, err + } + return alr.Addresses, nil +} + +// AddressLookup runs the address lookup command against the filecoin process. +func (f *Filecoin) AddressLookup(ctx context.Context, addr address.Address) (peer.ID, error) { + var ownerPeer peer.ID + if err := f.RunCmdJSONWithStdin(ctx, nil, &ownerPeer, "venus", "state", "lookup", addr.String()); err != nil { + return "", err + } + return ownerPeer, nil +} + // WalletBalance run the wallet balance command against the filecoin process. -func (f *Filecoin) WalletBalance(ctx context.Context, addr address.Address) (types.AttoFIL, error) { - var balance types.AttoFIL - if err := f.RunCmdJSONWithStdin(ctx, nil, &balance, "go-filecoin", "wallet", "balance", addr.String()); err != nil { - return types.ZeroAttoFIL, err +func (f *Filecoin) WalletBalance(ctx context.Context, addr address.Address) (fbig.Int, error) { + var balance fbig.Int + if err := f.RunCmdJSONWithStdin(ctx, nil, &balance, "venus", "wallet", "balance", addr.String()); err != nil { + return types.ZeroFIL, err } return balance, nil } @@ -24,8 +55,8 @@ func (f *Filecoin) WalletBalance(ctx context.Context, addr address.Address) (typ // WalletImport run the wallet import command against the filecoin process. func (f *Filecoin) WalletImport(ctx context.Context, file files.File) ([]address.Address, error) { // the command returns an AddressListResult - var alr commands.AddressLsResult - if err := f.RunCmdJSONWithStdin(ctx, file, &alr, "go-filecoin", "wallet", "import"); err != nil { + var alr cmd.AddressLsResult + if err := f.RunCmdJSONWithStdin(ctx, file, &alr, "venus", "wallet", "import"); err != nil { return nil, err } return alr.Addresses, nil @@ -34,7 +65,7 @@ func (f *Filecoin) WalletImport(ctx context.Context, file files.File) ([]address // WalletExport run the wallet export command against the filecoin process. func (f *Filecoin) WalletExport(ctx context.Context, addrs []address.Address) ([]*crypto.KeyInfo, error) { // the command returns an KeyInfoListResult - var klr commands.WalletSerializeResult + var klr cmd.WalletSerializeResult // we expect to interact with an array of KeyInfo(s) var out []*crypto.KeyInfo var sAddrs []string @@ -42,7 +73,7 @@ func (f *Filecoin) WalletExport(ctx context.Context, addrs []address.Address) ([ sAddrs = append(sAddrs, a.String()) } - if err := f.RunCmdJSONWithStdin(ctx, nil, &klr, "go-filecoin", "wallet", "export", strings.Join(sAddrs, " ")); err != nil { + if err := f.RunCmdJSONWithStdin(ctx, nil, &klr, "venus", "wallet", "export", strings.Join(sAddrs, " ")); err != nil { return nil, err } diff --git a/tools/fast/bin/localnet/README.md b/tools/fast/bin/localnet/README.md index 99a50cc444..4bdb834409 100644 --- a/tools/fast/bin/localnet/README.md +++ b/tools/fast/bin/localnet/README.md @@ -11,10 +11,10 @@ localnet -shell ### Building -The localnet tool expects that you can already build `go-filecoin`. Please refer +The localnet tool expects that you can already build `venus`. Please refer to the README in the root of this project for details. -localnet is only compatible with `go-filecoin` binaries built from the same git ref. +localnet is only compatible with `venus` binaries built from the same git ref. ``` go build -o localnet main.go @@ -24,8 +24,8 @@ go build -o localnet main.go ``` Usage of ./localnet: - -binpath go-filecoin - set the binary used when executing go-filecoin commands + -binpath venus + set the binary used when executing venus commands -blocktime duration duration for blocktime (default 5s) -miner-collateral string @@ -49,8 +49,8 @@ Usage of ./localnet: The default settings are pretty close to what the devnets run. The tool defaults to small sectors, but that can be changed by passing `-small-sectors=false`. To make it a bit easier to use, there is also a `-shell` flag that can be passed -which will drop the user into a shell with a go-filecoin daemon already running -and ready to be used with `go-filecoin`. +which will drop the user into a shell with a venus daemon already running +and ready to be used with `venus`. _Note: Using regular sized sectors with localnet can be incredibly taxing on a system and should probably be avoided on laptops due to the number of miners @@ -74,10 +74,10 @@ A few helpful things to note when working with localnet 3. The stdout and stderr are written to disk under the repository directory - **stderr** `/tmp/localnet417209521/0/daemon.stderr` - **stdout** `/tmp/localnet417209521/0/daemon.stdout` -4. The localnet tool will copy the `go-filecoin` binary specifed by `binpath` and +4. The localnet tool will copy the `venus` binary specifed by `binpath` and place it in a `bin` directory under each nodes repository which is used to execute all commands. To ensure binary compatibility, it's best to execute this same binary 5. You can run commands against any of the nodes by using the `-repodir` flag with - the go-filecoin binary + the venus binary - `/tmp/localnet417209521/0/bin/go-filecoin -repodir=/tmp/localnet417209521/0 id` diff --git a/tools/fast/bin/localnet/main.go b/tools/fast/bin/localnet/main.go index f0e33b07af..a440650c1b 100644 --- a/tools/fast/bin/localnet/main.go +++ b/tools/fast/bin/localnet/main.go @@ -6,11 +6,10 @@ package main // on the users computer. The network will stay standing till the program is closed. import ( - "bytes" "context" - "crypto/rand" flg "flag" "fmt" + "github.com/filecoin-project/venus/cmd" "io" "io/ioutil" "math/big" @@ -22,17 +21,14 @@ import ( "syscall" "time" - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/filecoin-project/go-fil-markets/storagemarket/network" files "github.com/ipfs/go-ipfs-files" logging "github.com/ipfs/go-log/v2" "github.com/mitchellh/go-homedir" - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/environment" - "github.com/filecoin-project/go-filecoin/tools/fast/series" - lpfc "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/local" + "github.com/filecoin-project/venus/tools/fast" + "github.com/filecoin-project/venus/tools/fast/environment" + "github.com/filecoin-project/venus/tools/fast/series" + lpfc "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin/local" ) var ( @@ -69,12 +65,12 @@ func init() { // to searching path. binpath, err = getFilecoinBinary() if err != nil { - // Look for `go-filecoin` in the path to set `binpath` default + // Look for `venus` in the path to set `binpath` default // If the binary is not found, an error will be returned. If the // error is ErrNotFound we ignore it. // Error is handled after flag parsing so help can be shown without // erroring first - binpath, err = exec.LookPath("go-filecoin") + binpath, err = exec.LookPath("venus") if err != nil { xerr, ok := err.(*exec.Error) if ok && xerr.Err == exec.ErrNotFound { @@ -84,7 +80,7 @@ func init() { } flag.StringVar(&workdir, "workdir", workdir, "set the working directory used to store filecoin repos") - flag.StringVar(&binpath, "binpath", binpath, "set the binary used when executing `go-filecoin` commands") + flag.StringVar(&binpath, "binpath", binpath, "set the binary used when executing `venus` commands") flag.BoolVar(&shell, "shell", shell, "setup a filecoin client node and enter into a shell ready to use") flag.BoolVar(&smallSectors, "small-sectors", smallSectors, "enables small sectors") flag.DurationVar(&blocktime, "blocktime", blocktime, "duration for blocktime") @@ -96,12 +92,12 @@ func init() { // ExitOnError is set flag.Parse(os.Args[1:]) // nolint: errcheck - // If we failed to find `go-filecoin` and it was not set, handle the error + // If we failed to find `venus` and it was not set, handle the error if len(binpath) == 0 { - msg := "failed when checking for `go-filecoin` binary;" + msg := "failed when checking for `venus` binary;" if err == nil { err = fmt.Errorf("no binary provided or found") - msg = "please install or build `go-filecoin`;" + msg = "please install or build `venus`;" } handleError(err, msg) @@ -194,7 +190,7 @@ func main() { fastenvOpts := fast.FilecoinOpts{ InitOpts: []fast.ProcessInitOption{fast.POGenesisFile(genesisURI)}, - DaemonOpts: []fast.ProcessDaemonOption{fast.POBlockTime(blocktime)}, + DaemonOpts: []fast.ProcessDaemonOption{}, } ctx = series.SetCtxSleepDelay(ctx, blocktime) @@ -213,11 +209,11 @@ func main() { return } - if err := genesis.MiningStart(ctx); err != nil { - exitcode = handleError(err, "failed to start mining on genesis node;") - return - } - + /* if err := genesis.MiningStart(ctx); err != nil { + exitcode = handleError(err, "failed to start mining on genesis node;") + return + } + */ // Create the processes that we will use to become miners var miners []*fast.Filecoin for i := 0; i < minerCount; i++ { @@ -252,8 +248,6 @@ func main() { // WaitForDealState // 9. Query deal till complete - var deals []*network.Response - for _, miner := range miners { err = series.InitAndStart(ctx, miner) if err != nil { @@ -273,43 +267,10 @@ func main() { return } - pparams, err := miner.Protocol(ctx) - if err != nil { - exitcode = handleError(err, "failed to get protocol;") - return - } - - sinfo := pparams.SupportedSectors[0] - - ask, err := series.CreateStorageMinerWithAsk(ctx, miner, minerCollateral, minerPrice, minerExpiry, sinfo.Size) - if err != nil { - exitcode = handleError(err, "failed series.CreateStorageMinerWithAsk;") - return - } - - if err := miner.MiningStart(ctx); err != nil { + /* if err := miner.MiningStart(ctx); err != nil { exitcode = handleError(err, "failed miner.MiningStart;") return - } - - var data bytes.Buffer - dataReader := io.LimitReader(rand.Reader, int64(sinfo.MaxPieceSize)) - dataReader = io.TeeReader(dataReader, &data) - _, deal, err := series.ImportAndStore(ctx, genesis, ask, files.NewReaderFile(dataReader)) - if err != nil { - exitcode = handleError(err, "failed series.ImportAndStore;") - return - } - - deals = append(deals, deal) - } - - for _, deal := range deals { - _, err = series.WaitForDealState(ctx, genesis, deal, storagemarket.StorageDealActive) - if err != nil { - exitcode = handleError(err, "failed series.WaitForDealState;") - return - } + }*/ } if shell { @@ -357,7 +318,7 @@ func main() { } fmt.Println("Finished!") - var nodeDetails []*commands.IDDetails + var nodeDetails []*cmd.IDDetails nodes := env.Processes() for _, node := range nodes { details, err := node.ID(ctx) @@ -416,7 +377,7 @@ func getFilecoinBinary() (string, error) { return "", err } - bin := filepath.Join(gopath, "/src/github.com/filecoin-project/go-filecoin/go-filecoin") + bin := filepath.Join(gopath, "/src/github.com/filecoin-project/venus/venus") _, err = os.Stat(bin) if err != nil { return "", err diff --git a/tools/fast/docs/SHELL.md b/tools/fast/docs/SHELL.md index 1a87ccaba9..315e13aed5 100644 --- a/tools/fast/docs/SHELL.md +++ b/tools/fast/docs/SHELL.md @@ -1,6 +1,6 @@ ### The FAST Shell -FAST has a [`Shell`](https://godoc.org/github.com/filecoin-project/go-filecoin/tools/fast#Filecoin.Shell) which can be used to start the users shell with the environment setup to run `go-filecoin` commands against the process it is called on. +FAST has a [`Shell`](https://godoc.org/github.com/filecoin-project/venus/tools/fast#Filecoin.Shell) which can be used to start the users shell with the environment setup to run `venus` commands against the process it is called on. The exact environment the shell will have is largely dependent on the plugin use are using. Generally, this will be the Filecoin localplugin when writing tests using FAST. @@ -9,17 +9,17 @@ The Filecoin localplugin shell environment will have the following variables set | Name | Description | |:---|:---| -| `FIL_PATH` | The value is set to the repository directory for the Filecoin node. Any `go-filecoin` commands ran in the shell will be executed against the Filecoin process for which the Shell method was invoked on in FAST. | +| `VENUS_PATH` | The value is set to the repository directory for the Filecoin node. Any `venus` commands ran in the shell will be executed against the Filecoin process for which the Shell method was invoked on in FAST. | | `FIL_PID` | The value is set to the PID for the Filecoin daemon. | | `FIL_BINARY` | The value is set to the binary running the Filecoin daemon. Please refer to the section below on `PATH` for more details. | -| `PATH` | The users `PATH` will be updated to include a location that contains the binary used for executing all `go-filecoin` commands. The `go-filecoin` binary included in this location itself is defined by either the value of the `localplugin.AttrFilecoinBinary`, or the first `go-filecoin` binary found in the users `PATH`.

_Note: The value of `FIL_BINARY` will not be the exact value. During node setup, the binary is copied to ensure it does not change during execution. `FIL_BINARY` will be this new path._ | +| `PATH` | The users `PATH` will be updated to include a location that contains the binary used for executing all `venus` commands. The `venus` binary included in this location itself is defined by either the value of the `localplugin.AttrFilecoinBinary`, or the first `venus` binary found in the users `PATH`.

_Note: The value of `FIL_BINARY` will not be the exact value. During node setup, the binary is copied to ensure it does not change during execution. `FIL_BINARY` will be this new path._ | The information around the `PATH` seems a little complex, but it's to ensure that there are no issues as a result of mixing binaries. -This has the advantage that while using FAST, users can re-compile `go-filecoin` without affecting constructed nodes. +This has the advantage that while using FAST, users can re-compile `venus` without affecting constructed nodes. It should be noted that the copying of the binary occurs during the call to `NewProcess`. It should also be noted that users shell configuration will be ran when the shell opens. -If shell configuration updates the `PATH` by appending to the front, if any of those directories contain `go-filecoin`, then the `go-filecoin` command inside of the FAST Shell will **not** point to the correct binary, because of this, it is best to actually execute commands using the `$FIL_BINARY` variable (eg: `$FIL_BINARY id`). +If shell configuration updates the `PATH` by appending to the front, if any of those directories contain `venus`, then the `venus` command inside of the FAST Shell will **not** point to the correct binary, because of this, it is best to actually execute commands using the `$FIL_BINARY` variable (eg: `$FIL_BINARY id`). ### Using a FAST Shell in _go test_ @@ -71,7 +71,7 @@ Tests can be used to get nodes into certain state. You may want to then use a shell to execute additional commands to debug an issue. You may have added additional logging you want to look at, or look at existing logging that will be produced by commands you run. -FAST Provides a [`StartLogCapture`](https://godoc.org/github.com/filecoin-project/go-filecoin/tools/fast#Filecoin.StartLogCapture) which will capture all output written to the daemons `stderr` until `Stop` is called. +FAST Provides a [`StartLogCapture`](https://godoc.org/github.com/filecoin-project/venus/tools/fast#Filecoin.StartLogCapture) which will capture all output written to the daemons `stderr` until `Stop` is called. The captured logs are stored in the return value of `StartLogCapture`, which can be copied to any `io.Writer`. ```go diff --git a/tools/fast/environment/environment.go b/tools/fast/environment/environment.go index db7a15c54a..f140f0ddbb 100644 --- a/tools/fast/environment/environment.go +++ b/tools/fast/environment/environment.go @@ -8,7 +8,7 @@ import ( "github.com/filecoin-project/go-address" logging "github.com/ipfs/go-log/v2" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" ) // ErrNoGenesisMiner is returned by GenesisMiner if the environment does not diff --git a/tools/fast/environment/environment_devnet.go b/tools/fast/environment/environment_devnet.go index fdca661c3d..3ef00208df 100644 --- a/tools/fast/environment/environment_devnet.go +++ b/tools/fast/environment/environment_devnet.go @@ -14,11 +14,10 @@ import ( "sync" "github.com/filecoin-project/go-address" - cid "github.com/ipfs/go-cid" logging "github.com/ipfs/go-log/v2" iptb "github.com/ipfs/iptb/testbed" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" ) // Devnet is a FAST lib environment that is meant to be used @@ -180,7 +179,7 @@ func (e *Devnet) GetFunds(ctx context.Context, p *fast.Filecoin) error { e.log.Infof("GetFunds for process: %s", p.String()) var toAddr address.Address - if err := p.ConfigGet(ctx, "wallet.defaultAddress", &toAddr); err != nil { + if err := p.ConfigGet(ctx, "walletModule.defaultAddress", &toAddr); err != nil { return err } @@ -199,21 +198,21 @@ func (e *Devnet) GetFunds(ctx context.Context, p *fast.Filecoin) error { switch resp.StatusCode { case 200: - msgcid := resp.Header.Get("Message-Cid") - mcid, err := cid.Decode(msgcid) - if err != nil { - return err - } - - if _, err := p.MessageWait(ctx, mcid); err != nil { - return err - } + //msgcid := resp.Header.Get("Message-Cid") + //mcid, err := cid.Decode(msgcid) + //if err != nil { + // return err + //} + // + //if _, err := p.MessageWait(ctx, mcid); err != nil { + // return err + //} return nil case 400: - return fmt.Errorf("Bad Request: %s", string(b)) + return fmt.Errorf("bad Request: %s", string(b)) case 429: - return fmt.Errorf("Rate Limit: %s", string(b)) + return fmt.Errorf("rate Limit: %s", string(b)) default: - return fmt.Errorf("Unhandled Status: %s", resp.Status) + return fmt.Errorf("unhandled Status: %s", resp.Status) } } diff --git a/tools/fast/environment/environment_memory_genesis.go b/tools/fast/environment/environment_memory_genesis.go index dea10a1a72..e5ab81381e 100644 --- a/tools/fast/environment/environment_memory_genesis.go +++ b/tools/fast/environment/environment_memory_genesis.go @@ -5,6 +5,8 @@ import ( "context" "encoding/json" "fmt" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/cmd" "io" "math/big" "net" @@ -16,11 +18,10 @@ import ( "github.com/filecoin-project/go-address" logging "github.com/ipfs/go-log/v2" - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/series" - gengen "github.com/filecoin-project/go-filecoin/tools/gengen/util" + "github.com/filecoin-project/venus/pkg/constants" + "github.com/filecoin-project/venus/tools/fast" + "github.com/filecoin-project/venus/tools/fast/series" + gengen "github.com/filecoin-project/venus/tools/gengen/util" iptb "github.com/ipfs/iptb/testbed" ) @@ -30,7 +31,7 @@ import ( // functional tests! type MemoryGenesis struct { genesisCar []byte - genesisMinerOwner commands.WalletSerializeResult + genesisMinerOwner cmd.WalletSerializeResult genesisMinerAddr address.Address location string @@ -240,6 +241,7 @@ func (e *MemoryGenesis) buildGenesis(funds *big.Int) error { Owner: 0, SealProofType: constants.DevSealProofType, CommittedSectors: commCfgs, + MarketBalance: abi.NewTokenAmount(0), }, }, Network: "gfctest", @@ -260,7 +262,7 @@ func (e *MemoryGenesis) buildGenesis(funds *big.Int) error { } e.genesisCar = genbuffer.Bytes() - e.genesisMinerOwner = commands.WalletSerializeResult{KeyInfo: info.Keys} + e.genesisMinerOwner = cmd.WalletSerializeResult{KeyInfo: info.Keys} e.genesisMinerAddr = info.Miners[0].Address return nil diff --git a/tools/fast/environment/environment_memory_genesis_test.go b/tools/fast/environment/environment_memory_genesis_test.go index 0daa2de104..57c4858d57 100644 --- a/tools/fast/environment/environment_memory_genesis_test.go +++ b/tools/fast/environment/environment_memory_genesis_test.go @@ -11,9 +11,9 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/tools/fast" - mockplugin "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/mock" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/tools/fast" + mockplugin "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin/mock" ) // must register all filecoin iptb plugins diff --git a/tools/fast/fastesting/assertions.go b/tools/fast/fastesting/assertions.go index 044bbd74fc..eeb2750055 100644 --- a/tools/fast/fastesting/assertions.go +++ b/tools/fast/fastesting/assertions.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" ) // AssertStdErrContains verifies that the last command stderr of 'fast' contains the @@ -19,5 +19,5 @@ func AssertStdErrContains(t *testing.T, fast *fast.Filecoin, expected string) { written, err := io.Copy(w, fast.LastCmdStdErr()) require.NoError(t, err) require.True(t, written > 0) - assert.Contains(t, string(w.Bytes()), expected) + assert.Contains(t, w.String(), expected) } diff --git a/tools/fast/fastesting/basic.go b/tools/fast/fastesting/basic.go index 42247ccbc6..3ce5a4dddc 100644 --- a/tools/fast/fastesting/basic.go +++ b/tools/fast/fastesting/basic.go @@ -11,11 +11,11 @@ import ( "github.com/ipfs/go-ipfs-files" "github.com/stretchr/testify/require" - "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/environment" - "github.com/filecoin-project/go-filecoin/tools/fast/series" - localplugin "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/local" + "github.com/filecoin-project/venus/pkg/testhelpers" + "github.com/filecoin-project/venus/tools/fast" + "github.com/filecoin-project/venus/tools/fast/environment" + "github.com/filecoin-project/venus/tools/fast/series" + localplugin "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin/local" ) // TestEnvironment provides common setup for writing tests using FAST @@ -61,10 +61,6 @@ func NewTestEnvironment(ctx context.Context, t *testing.T, fastenvOpts fast.File fastenvOpts.InitOpts = append([]fast.ProcessInitOption{fast.POGenesisFile(genesisURI)}, fastenvOpts.InitOpts...) - if isMissingBlockTimeOpt(fastenvOpts) { - fastenvOpts.DaemonOpts = append([]fast.ProcessDaemonOption{fast.POBlockTime(time.Millisecond)}, fastenvOpts.DaemonOpts...) - } - // Setup the first node which is used to help coordinate the other nodes by providing // funds, mining for the network, etc genesis, err := env.NewProcess(ctx, localplugin.PluginName, options, fastenvOpts) @@ -73,22 +69,14 @@ func NewTestEnvironment(ctx context.Context, t *testing.T, fastenvOpts fast.File err = series.SetupGenesisNode(ctx, genesis, genesisMiner.Address, files.NewReaderFile(genesisMiner.Owner)) require.NoError(t, err) - // Define a MiningOnce function which will bet set on the context to provide - // a way to mine blocks in the series used during testing - var miningOnce series.MiningOnceFunc = func() { - _, err := genesis.MiningOnce(ctx) - require.NoError(t, err) - } - // Define a MessageWait function which will bet set on the context to provide // a way to wait for a message to appear on the mining queue - var waitForMpool series.MpoolWaitFunc = func() { - _, err := genesis.MpoolLs(ctx, fast.AOWaitForCount(1)) - require.NoError(t, err) - } + //var waitForMpool series.MpoolWaitFunc = func() { + // _, err := genesis.MpoolLs(ctx, fast.AOWaitForCount(1)) + // require.NoError(t, err) + //} - ctx = series.SetCtxMiningOnce(ctx, miningOnce) - ctx = series.SetCtxWaitForMpool(ctx, waitForMpool) + //ctx = series.SetCtxWaitForMpool(ctx, waitForMpool) ctx = series.SetCtxSleepDelay(ctx, time.Second) return ctx, &TestEnvironment{ @@ -175,13 +163,3 @@ func dumpEnvOutputOnFail(t *testing.T, procs []*fast.Filecoin) { require.NoError(t, w.Close()) } } - -func isMissingBlockTimeOpt(opts fast.FilecoinOpts) bool { - for _, fn := range opts.DaemonOpts { - s := fn() - if len(s) > 0 && s[0] == "--block-time" { - return false - } - } - return true -} diff --git a/tools/fast/fastesting/basic_test.go b/tools/fast/fastesting/basic_test.go deleted file mode 100644 index f23769be9d..0000000000 --- a/tools/fast/fastesting/basic_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package fastesting_test - -import ( - "context" - "testing" - "time" - - "github.com/ipfs/go-log/v2" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/fastesting" -) - -func TestSetFilecoinOpts(t *testing.T) { - tf.IntegrationTest(t) - t.Skip("not working") - log.SetDebugLogging() - - fastOpts := fast.FilecoinOpts{ - DaemonOpts: []fast.ProcessDaemonOption{fast.POBlockTime(10 * time.Millisecond)}, - } - - ctx, env := fastesting.NewTestEnvironment(context.Background(), t, fastOpts) - clientNode := env.GenesisMiner - require.NoError(t, clientNode.MiningStart(ctx)) - defer func() { - err := env.Teardown(ctx) - require.NoError(t, err) - }() -} - -func TestNoFilecoinOpts(t *testing.T) { - tf.IntegrationTest(t) - t.Skip("not working") - log.SetDebugLogging() - - ctx, env := fastesting.NewTestEnvironment(context.Background(), t, fast.FilecoinOpts{}) - - clientNode := env.GenesisMiner - require.NoError(t, clientNode.MiningStart(ctx)) - defer func() { - err := env.Teardown(ctx) - require.NoError(t, err) - }() -} diff --git a/tools/fast/fastesting/deployment.go b/tools/fast/fastesting/deployment.go index 808bb26246..60803284db 100644 --- a/tools/fast/fastesting/deployment.go +++ b/tools/fast/fastesting/deployment.go @@ -8,14 +8,14 @@ import ( "testing" "time" - "github.com/ipfs/go-ipfs-files" + files "github.com/ipfs/go-ipfs-files" "github.com/stretchr/testify/require" - "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/environment" - "github.com/filecoin-project/go-filecoin/tools/fast/series" - localplugin "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/local" + "github.com/filecoin-project/venus/pkg/testhelpers" + "github.com/filecoin-project/venus/tools/fast" + "github.com/filecoin-project/venus/tools/fast/environment" + "github.com/filecoin-project/venus/tools/fast/series" + localplugin "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin/local" ) // DeploymentEnvironment provides common setup for writing tests which will run against @@ -72,7 +72,7 @@ func makeLocal(ctx context.Context, t *testing.T, dir string, fastenvOpts fast.F require.NoError(t, err) fastenvOpts.InitOpts = append([]fast.ProcessInitOption{fast.POGenesisFile(genesisURI)}, fastenvOpts.InitOpts...) - fastenvOpts.DaemonOpts = append([]fast.ProcessDaemonOption{fast.POBlockTime(time.Second * 5)}, fastenvOpts.DaemonOpts...) + fastenvOpts.DaemonOpts = append([]fast.ProcessDaemonOption{}, fastenvOpts.DaemonOpts...) ctx = series.SetCtxSleepDelay(ctx, time.Second*5) @@ -84,9 +84,6 @@ func makeLocal(ctx context.Context, t *testing.T, dir string, fastenvOpts fast.F err = series.SetupGenesisNode(ctx, genesis, genesisMiner.Address, files.NewReaderFile(genesisMiner.Owner)) require.NoError(t, err) - err = genesis.MiningStart(ctx) - require.NoError(t, err) - details, err := genesis.ID(ctx) require.NoError(t, err) @@ -130,9 +127,7 @@ func makeDevnet(ctx context.Context, t *testing.T, network string, dir string, f options[localplugin.AttrLogLevel] = "5" // Set log level to Debug options[localplugin.AttrFilecoinBinary] = testhelpers.MustGetFilecoinBinary() // Get the filecoin binary - genesisURI := env.GenesisCar() - - fastenvOpts.InitOpts = append(fastenvOpts.InitOpts, fast.POGenesisFile(genesisURI), fast.PODevnet(networkConfig.Name)) + fastenvOpts.InitOpts = append(fastenvOpts.InitOpts, fast.POGenesisFile(env.GenesisCar()), fast.PODevnet(networkConfig.Name)) ctx = series.SetCtxSleepDelay(ctx, time.Second*30) diff --git a/tools/fast/fastesting/log_writer_test.go b/tools/fast/fastesting/log_writer_test.go index ae76615784..46f65ab0ec 100644 --- a/tools/fast/fastesting/log_writer_test.go +++ b/tools/fast/fastesting/log_writer_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/require" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" ) type tlogWriter struct { @@ -34,7 +34,7 @@ func TestLogWriter(t *testing.T) { lw := newLogWriter(out) for _, line := range input { - _, err := lw.Write([]byte(fmt.Sprintf("%s", line))) + _, err := lw.Write([]byte(line)) require.NoError(t, err) } diff --git a/tools/fast/fastutil/line_puller_test.go b/tools/fast/fastutil/line_puller_test.go index f857e29fcd..9d455005ae 100644 --- a/tools/fast/fastutil/line_puller_test.go +++ b/tools/fast/fastutil/line_puller_test.go @@ -6,7 +6,7 @@ import ( "io" "testing" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" "github.com/stretchr/testify/require" ) diff --git a/tools/fast/fastutil/stream_recorder_test.go b/tools/fast/fastutil/stream_recorder_test.go index 20e6b756af..ab6d898d9b 100644 --- a/tools/fast/fastutil/stream_recorder_test.go +++ b/tools/fast/fastutil/stream_recorder_test.go @@ -5,7 +5,7 @@ import ( "io/ioutil" "testing" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" "github.com/stretchr/testify/require" ) diff --git a/tools/fast/process.go b/tools/fast/process.go index c75727520a..387853fe38 100644 --- a/tools/fast/process.go +++ b/tools/fast/process.go @@ -13,10 +13,10 @@ import ( "github.com/ipfs/iptb/testbed/interfaces" "github.com/libp2p/go-libp2p-core/peer" - fcconfig "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/tools/fast/fastutil" - dockerplugin "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/docker" - localplugin "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/local" + fcconfig "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/tools/fast/fastutil" + dockerplugin "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin/docker" + localplugin "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin/local" ) var ( @@ -62,7 +62,6 @@ func init() { // IPTBCoreExt is an extended interface of the iptb.Core. It defines additional requirement. type IPTBCoreExt interface { - testbedi.Core testbedi.Config // StderrReader is require to gather daemon logs during action execution diff --git a/tools/fast/process_action_options.go b/tools/fast/process_action_options.go index ec6ea95553..7f19b72f29 100644 --- a/tools/fast/process_action_options.go +++ b/tools/fast/process_action_options.go @@ -6,7 +6,7 @@ import ( "strconv" "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" + "github.com/filecoin-project/go-state-types/abi" "github.com/libp2p/go-libp2p-core/peer" ) diff --git a/tools/fast/process_options.go b/tools/fast/process_options.go index d19407c745..96257a31c1 100644 --- a/tools/fast/process_options.go +++ b/tools/fast/process_options.go @@ -2,8 +2,6 @@ package fast import ( "fmt" - "time" - "github.com/multiformats/go-multiaddr" ) @@ -62,13 +60,6 @@ func PODevnetUser() ProcessInitOption { // ProcessDaemonOption are options passed to process when starting. type ProcessDaemonOption func() []string -// POBlockTime provides the `--block-time=` to process when starting. -func POBlockTime(d time.Duration) ProcessDaemonOption { - return func() []string { - return []string{"--block-time", d.String()} - } -} - // POIsRelay provides the `--is-relay` to process when starting. func POIsRelay() ProcessDaemonOption { return func() []string { diff --git a/tools/fast/process_stderr_recorder.go b/tools/fast/process_stderr_recorder.go index 9344c46e9c..6e300ad380 100644 --- a/tools/fast/process_stderr_recorder.go +++ b/tools/fast/process_stderr_recorder.go @@ -4,7 +4,7 @@ import ( "context" "time" - "github.com/filecoin-project/go-filecoin/tools/fast/fastutil" + "github.com/filecoin-project/venus/tools/fast/fastutil" ) // setupStderrCpaturing opens a reader to the filcoin process to read the stderr diff --git a/tools/fast/process_stderr_recorder_test.go b/tools/fast/process_stderr_recorder_test.go index 83a9c45767..a03b1a1ce9 100644 --- a/tools/fast/process_stderr_recorder_test.go +++ b/tools/fast/process_stderr_recorder_test.go @@ -9,8 +9,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - mockplugin "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/mock" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + mockplugin "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin/mock" ) func TestStartLogCapture(t *testing.T) { diff --git a/tools/fast/process_test.go b/tools/fast/process_test.go index 288a239692..a4d736ca5b 100644 --- a/tools/fast/process_test.go +++ b/tools/fast/process_test.go @@ -2,17 +2,15 @@ package fast import ( "context" - "io" - "io/ioutil" - "testing" - "time" - iptb "github.com/ipfs/iptb/testbed" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "io" + "io/ioutil" + "testing" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - mockplugin "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/mock" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + mockplugin "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin/mock" ) // must register all filecoin iptb plugins @@ -136,7 +134,7 @@ func TestStartDaemon(t *testing.T) { t.Run("providing both InitDaemon options and environment options", func(t *testing.T) { fastenvOpts := FilecoinOpts{ - DaemonOpts: []ProcessDaemonOption{POBlockTime(time.Second)}, + DaemonOpts: []ProcessDaemonOption{POIsRelay()}, } mfc := NewFilecoinProcess(ctx, fc, fastenvOpts) diff --git a/tools/fast/series/connect.go b/tools/fast/series/connect.go index 6252fb38fc..cc533e74ed 100644 --- a/tools/fast/series/connect.go +++ b/tools/fast/series/connect.go @@ -3,7 +3,7 @@ package series import ( "context" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" ) // Connect issues a `swarm connect` to the `from` node, using the addresses of the `to` node diff --git a/tools/fast/series/create_miner_with_ask.go b/tools/fast/series/create_miner_with_ask.go deleted file mode 100644 index c75f36ae55..0000000000 --- a/tools/fast/series/create_miner_with_ask.go +++ /dev/null @@ -1,23 +0,0 @@ -package series - -import ( - "context" - "math/big" - - "github.com/filecoin-project/specs-actors/actors/abi" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - "github.com/filecoin-project/go-filecoin/tools/fast" -) - -// CreateStorageMinerWithAsk setups a miner and sets an ask price. The created ask is -// returned. -func CreateStorageMinerWithAsk(ctx context.Context, miner *fast.Filecoin, collateral *big.Int, price *big.Float, expiry *big.Int, sectorSize abi.SectorSize) (porcelain.Ask, error) { - // Create miner - _, err := miner.MinerCreate(ctx, collateral, fast.AOSectorSize(sectorSize), fast.AOPrice(big.NewFloat(1.0)), fast.AOLimit(300)) - if err != nil { - return porcelain.Ask{}, err - } - - return SetPriceGetAsk(ctx, miner, price, expiry) -} diff --git a/tools/fast/series/ctx_sleep_delay.go b/tools/fast/series/ctx_sleep_delay.go index c65c970a40..ac1ada5e43 100644 --- a/tools/fast/series/ctx_sleep_delay.go +++ b/tools/fast/series/ctx_sleep_delay.go @@ -4,7 +4,7 @@ import ( "context" "time" - "github.com/filecoin-project/go-filecoin/internal/pkg/clock" + "github.com/filecoin-project/venus/pkg/clock" ) type ctxSleepDelayKey struct{} @@ -25,7 +25,7 @@ func SetCtxSleepDelay(ctx context.Context, d time.Duration) context.Context { // CtxSleepDelay is a helper method to make sure people don't call `time.Sleep` // or `time.After` themselves in series. It will use the time.Duration in the -// context, or default to `clock.epochDuration` from the go-filecoin/mining package. +// context, or default to `clock.epochDuration` from the venus/mining package. // A channel is return which will receive a time.Time value after the delay. func CtxSleepDelay(ctx context.Context) <-chan time.Time { d, ok := ctx.Value(sleepDelayKey).(time.Duration) diff --git a/tools/fast/series/find_deal_by_id.go b/tools/fast/series/find_deal_by_id.go deleted file mode 100644 index d6c23e83b3..0000000000 --- a/tools/fast/series/find_deal_by_id.go +++ /dev/null @@ -1,33 +0,0 @@ -package series - -import ( - "context" - "fmt" - - "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/ipfs/go-cid" -) - -// FindDealByID looks for a deal using `DealsList` and returns the result where id matches the ProposalCid of -// the deal. -func FindDealByID(ctx context.Context, client *fast.Filecoin, id cid.Cid) (commands.DealsListResult, error) { - dec, err := client.DealsList(ctx) - if err != nil { - return commands.DealsListResult{}, err - } - - var dl commands.DealsListResult - - for dec.More() { - if err := dec.Decode(&dl); err != nil { - return commands.DealsListResult{}, err - } - - if dl.ProposalCid == id { - return dl, nil - } - } - - return commands.DealsListResult{}, fmt.Errorf("No deal found") -} diff --git a/tools/fast/series/get_head_block_height.go b/tools/fast/series/get_head_block_height.go index e262ef41b0..9898c8d914 100644 --- a/tools/fast/series/get_head_block_height.go +++ b/tools/fast/series/get_head_block_height.go @@ -3,9 +3,9 @@ package series import ( "context" - "github.com/filecoin-project/specs-actors/actors/abi" + "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" ) // GetHeadBlockHeight will inspect the chain head and return the height diff --git a/tools/fast/series/import_and_store.go b/tools/fast/series/import_and_store.go deleted file mode 100644 index 6e02f4c50e..0000000000 --- a/tools/fast/series/import_and_store.go +++ /dev/null @@ -1,38 +0,0 @@ -package series - -import ( - "context" - - "github.com/ipfs/go-cid" - files "github.com/ipfs/go-ipfs-files" - - "github.com/filecoin-project/go-fil-markets/storagemarket/network" - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - "github.com/filecoin-project/go-filecoin/tools/fast" -) - -// ImportAndStore imports the `data` to the `client`, and proposes a storage -// deal using the provided `ask`, returning the cid of the import and the -// created deal. It uses a duration of 10 blocks -func ImportAndStore(ctx context.Context, client *fast.Filecoin, ask porcelain.Ask, data files.File) (cid.Cid, *network.Response, error) { - return ImportAndStoreWithDuration(ctx, client, ask, 10, data) -} - -// ImportAndStoreWithDuration imports the `data` to the `client`, and proposes a storage -// deal using the provided `ask`, returning the cid of the import and the -// created deal, using the provided duration.: -func ImportAndStoreWithDuration(ctx context.Context, client *fast.Filecoin, ask porcelain.Ask, duration uint64, data files.File) (cid.Cid, *network.Response, error) { - // Client neeeds to import the data - dcid, err := client.ClientImport(ctx, data) - if err != nil { - return cid.Undef, nil, err - } - - // Client makes a deal - deal, err := client.ClientProposeStorageDeal(ctx, dcid, ask.Miner, ask.ID, duration) - if err != nil { - return cid.Undef, nil, err - } - - return dcid, deal, nil -} diff --git a/tools/fast/series/init_and_start.go b/tools/fast/series/init_and_start.go index fed3bb7331..3b469d245b 100644 --- a/tools/fast/series/init_and_start.go +++ b/tools/fast/series/init_and_start.go @@ -3,7 +3,7 @@ package series import ( "context" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" ) // InitAndStart is a quick way to run Init and Start for a filecoin process. A variadic set of functions diff --git a/tools/fast/series/send_filecoin_defaults.go b/tools/fast/series/send_filecoin_defaults.go index 4e7be9d7aa..3ea8effc7c 100644 --- a/tools/fast/series/send_filecoin_defaults.go +++ b/tools/fast/series/send_filecoin_defaults.go @@ -5,7 +5,7 @@ import ( "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" ) // SendFilecoinDefaults sends the `value` amount of fil from the default wallet @@ -13,7 +13,7 @@ import ( // message to be received by the `to` node. func SendFilecoinDefaults(ctx context.Context, from, to *fast.Filecoin, value int) error { var toAddr address.Address - if err := to.ConfigGet(ctx, "wallet.defaultAddress", &toAddr); err != nil { + if err := to.ConfigGet(ctx, "walletModule.defaultAddress", &toAddr); err != nil { return err } diff --git a/tools/fast/series/send_filecoin_from_default.go b/tools/fast/series/send_filecoin_from_default.go index 2d77d57bbf..18a6a271ba 100644 --- a/tools/fast/series/send_filecoin_from_default.go +++ b/tools/fast/series/send_filecoin_from_default.go @@ -5,10 +5,10 @@ import ( "math/big" "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/builtin" "github.com/ipfs/go-cid" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" ) // SendFilecoinFromDefault will send the `value` of FIL from the default wallet @@ -18,7 +18,7 @@ import ( // been received by the targeted node of addr. func SendFilecoinFromDefault(ctx context.Context, node *fast.Filecoin, addr address.Address, value int) (cid.Cid, error) { var walletAddr address.Address - if err := node.ConfigGet(ctx, "wallet.defaultAddress", &walletAddr); err != nil { + if err := node.ConfigGet(ctx, "walletModule.defaultAddress", &walletAddr); err != nil { return cid.Undef, err } diff --git a/tools/fast/series/set_price_ask.go b/tools/fast/series/set_price_ask.go deleted file mode 100644 index 04cbd191ea..0000000000 --- a/tools/fast/series/set_price_ask.go +++ /dev/null @@ -1,24 +0,0 @@ -package series - -import ( - "context" - "fmt" - "math/big" - - "github.com/filecoin-project/go-filecoin/internal/app/go-filecoin/porcelain" - "github.com/filecoin-project/go-filecoin/tools/fast" -) - -// SetPriceGetAsk issues a `set-price` and tries, to the best it can, return the -// created ask. This series will run until it finds an ask, or the context is -// canceled. -func SetPriceGetAsk(ctx context.Context, miner *fast.Filecoin, price *big.Float, expiry *big.Int) (porcelain.Ask, error) { - // Set a price - _, err := miner.MinerSetPrice(ctx, price, expiry, fast.AOPrice(big.NewFloat(1.0)), fast.AOLimit(300)) - if err != nil { - return porcelain.Ask{}, err - } - - // Dragons: must be re-integrated with storage market module - return porcelain.Ask{}, fmt.Errorf("could not find ask") -} diff --git a/tools/fast/series/setup_genesis_node.go b/tools/fast/series/setup_genesis_node.go index 32a6f42b9a..7b4e322e2f 100644 --- a/tools/fast/series/setup_genesis_node.go +++ b/tools/fast/series/setup_genesis_node.go @@ -2,12 +2,11 @@ package series import ( "context" - "math/big" "github.com/filecoin-project/go-address" files "github.com/ipfs/go-ipfs-files" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" ) // SetupGenesisNode will initialize, start, configure, and issue the @@ -31,10 +30,9 @@ func SetupGenesisNode(ctx context.Context, node *fast.Filecoin, minerAddress add if err != nil { return err } - if err := node.ConfigSet(ctx, "wallet.defaultAddress", wallet[0].String()); err != nil { + if err := node.ConfigSet(ctx, "walletModule.defaultAddress", wallet[0].String()); err != nil { return err } - _, err = node.MinerUpdatePeerid(ctx, minerAddress, node.PeerID, fast.AOFromAddr(wallet[0]), fast.AOPrice(big.NewFloat(.0000001)), fast.AOLimit(1)) - return err + return nil } diff --git a/tools/fast/series/wait_for_block_height.go b/tools/fast/series/wait_for_block_height.go index 5a0b24ea8c..24ea943ed1 100644 --- a/tools/fast/series/wait_for_block_height.go +++ b/tools/fast/series/wait_for_block_height.go @@ -3,9 +3,9 @@ package series import ( "context" - "github.com/filecoin-project/specs-actors/actors/abi" + "github.com/filecoin-project/go-state-types/abi" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" ) // WaitForBlockHeight will inspect the chain head and wait till the height is equal to or diff --git a/tools/fast/series/wait_for_chain_message.go b/tools/fast/series/wait_for_chain_message.go index 2b86ff1b96..482d1d1886 100644 --- a/tools/fast/series/wait_for_chain_message.go +++ b/tools/fast/series/wait_for_chain_message.go @@ -5,9 +5,8 @@ import ( "fmt" "io" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" + types "github.com/filecoin-project/venus/venus-shared/chain" "github.com/ipfs/go-cid" ) @@ -33,7 +32,7 @@ func WaitForChainMessage(ctx context.Context, node *fast.Filecoin, fn MsgSearchF } for dec.More() { - var blks []block.Block + var blks []types.BlockHeader err := dec.Decode(&blks) if err != nil { if err == io.EOF { @@ -51,9 +50,9 @@ func WaitForChainMessage(ctx context.Context, node *fast.Filecoin, fn MsgSearchF } } -func findMessageInBlockSlice(ctx context.Context, node *fast.Filecoin, blks []block.Block, fn MsgSearchFn) (*MsgInfo, error) { +func findMessageInBlockSlice(ctx context.Context, node *fast.Filecoin, blks []types.BlockHeader, fn MsgSearchFn) (*MsgInfo, error) { for _, blk := range blks { - msgs, err := node.ShowMessages(ctx, blk.Messages.Cid) + msgs, err := node.ShowMessages(ctx, blk.Messages) if err != nil { return nil, err } @@ -66,7 +65,7 @@ func findMessageInBlockSlice(ctx context.Context, node *fast.Filecoin, blks []bl if found { blockCid := blk.Cid() - msgCid, _ := msg.Cid() + msgCid := msg.Cid() return &MsgInfo{ BlockCid: blockCid, @@ -76,5 +75,5 @@ func findMessageInBlockSlice(ctx context.Context, node *fast.Filecoin, blks []bl } } - return nil, fmt.Errorf("Message not found") + return nil, fmt.Errorf("message not found") } diff --git a/tools/fast/series/wait_for_deal_state.go b/tools/fast/series/wait_for_deal_state.go deleted file mode 100644 index de5a0310d5..0000000000 --- a/tools/fast/series/wait_for_deal_state.go +++ /dev/null @@ -1,28 +0,0 @@ -package series - -import ( - "context" - - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/filecoin-project/go-fil-markets/storagemarket/network" - - "github.com/filecoin-project/go-filecoin/tools/fast" -) - -// WaitForDealState will query the storage deal until its state matches the -// passed in `state`, or the context is canceled. -func WaitForDealState(ctx context.Context, client *fast.Filecoin, deal *network.Response, state storagemarket.StorageDealStatus) (*network.Response, error) { - for { - // Client waits around for the deal to be sealed - dr, err := client.ClientQueryStorageDeal(ctx, deal.Proposal) - if err != nil { - return nil, err - } - - if dr.State == state { - return dr, nil - } - - <-CtxSleepDelay(ctx) - } -} diff --git a/tools/fast/series/with_wallet.go b/tools/fast/series/with_wallet.go index caecd78abd..d131ed6d55 100644 --- a/tools/fast/series/with_wallet.go +++ b/tools/fast/series/with_wallet.go @@ -6,7 +6,7 @@ import ( "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-filecoin/tools/fast" + "github.com/filecoin-project/venus/tools/fast" ) // ErrWithWalletRestoreFailed is returned if the original address could not be restored. @@ -22,16 +22,16 @@ var ErrWithWalletRestoreFailed = errors.New("failed to restore default wallet af // could not be restored. func WithWallet(ctx context.Context, fc *fast.Filecoin, sessionWallet address.Address, sessionFn func(*fast.Filecoin) error) (err error) { var beforeAddress address.Address - if err = fc.ConfigGet(ctx, "wallet.defaultAddress", &beforeAddress); err != nil { + if err = fc.ConfigGet(ctx, "walletModule.defaultAddress", &beforeAddress); err != nil { return } - if err = fc.ConfigSet(ctx, "wallet.defaultAddress", sessionWallet); err != nil { + if err = fc.ConfigSet(ctx, "walletModule.defaultAddress", sessionWallet); err != nil { return } defer func() { - err = fc.ConfigSet(ctx, "wallet.defaultAddress", beforeAddress) + err = fc.ConfigSet(ctx, "walletModule.defaultAddress", beforeAddress) if err != nil { err = ErrWithWalletRestoreFailed } diff --git a/tools/fast/tests/retrieval_test.go b/tools/fast/tests/retrieval_test.go deleted file mode 100644 index 6601527b55..0000000000 --- a/tools/fast/tests/retrieval_test.go +++ /dev/null @@ -1,239 +0,0 @@ -package tests - -import ( - "bytes" - "context" - "crypto/rand" - "io" - "io/ioutil" - "math/big" - "testing" - "time" - - "github.com/filecoin-project/go-fil-markets/storagemarket" - files "github.com/ipfs/go-ipfs-files" - logging "github.com/ipfs/go-log/v2" - - "github.com/stretchr/testify/require" - - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/tools/fast" - "github.com/filecoin-project/go-filecoin/tools/fast/environment" - "github.com/filecoin-project/go-filecoin/tools/fast/series" - localplugin "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/local" -) - -func init() { - // Enabling debug logging provides a lot of insight into what commands are - // being executed - logging.SetDebugLogging() -} - -// TestRetrieval exercises storing and retrieving with the filecoin protocols using a locally running -// temporary network. -func TestRetrievalLocalNetwork(t *testing.T) { - tf.FunctionalTest(t) - t.Skip("Long term solution: #3642") - - blocktime := time.Second * 5 - - // This test should run in 20 block times, with 120 seconds for sealing, and no longer - ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(20*blocktime).Add(120*time.Second)) - defer cancel() - - // Create a directory for the test using the test name (mostly for FAST) - dir, err := ioutil.TempDir("", t.Name()) - require.NoError(t, err) - - // Create an environment that includes a genesis block with 1MM FIL - env, err := environment.NewMemoryGenesis(big.NewInt(1000000), dir) - require.NoError(t, err) - - // Teardown will shutdown all running processes the environment knows about - // and cleanup anything the evironment setup. This includes the directory - // the environment was created to use. - defer func() { - require.NoError(t, env.Teardown(ctx)) - }() - - // Setup options for nodes. - options := make(map[string]string) - options[localplugin.AttrLogJSON] = "0" // Disable JSON logs - options[localplugin.AttrLogLevel] = "4" // Set log level to Info - options[localplugin.AttrFilecoinBinary] = th.MustGetFilecoinBinary() // Set binary - - ctx = series.SetCtxSleepDelay(ctx, blocktime) - - genesisURI := env.GenesisCar() - genesisMiner, err := env.GenesisMiner() - require.NoError(t, err) - - fastenvOpts := fast.FilecoinOpts{ - InitOpts: []fast.ProcessInitOption{fast.POGenesisFile(genesisURI)}, - DaemonOpts: []fast.ProcessDaemonOption{fast.POBlockTime(blocktime)}, - } - - // Setup nodes used for the test - genesis, err := env.NewProcess(ctx, localplugin.PluginName, options, fastenvOpts) - require.NoError(t, err) - - miner, err := env.NewProcess(ctx, localplugin.PluginName, options, fastenvOpts) - require.NoError(t, err) - - client, err := env.NewProcess(ctx, localplugin.PluginName, options, fastenvOpts) - require.NoError(t, err) - - // Start setting up the nodes - // Setup Genesis - err = series.SetupGenesisNode(ctx, genesis, genesisMiner.Address, files.NewReaderFile(genesisMiner.Owner)) - require.NoError(t, err) - - err = genesis.MiningStart(ctx) - require.NoError(t, err) - - // Start Miner - err = series.InitAndStart(ctx, miner) - require.NoError(t, err) - - // Start Client - err = series.InitAndStart(ctx, client) - require.NoError(t, err) - - // Connect everything to the genesis node so it can issue filecoin when needed - err = series.Connect(ctx, genesis, miner) - require.NoError(t, err) - - err = series.Connect(ctx, genesis, client) - require.NoError(t, err) - - // Everyone needs FIL to deal with gas costs and make sure their wallets - // exists (sending FIL to a wallet addr creates it) - err = series.SendFilecoinDefaults(ctx, genesis, miner, 1000) - require.NoError(t, err) - - err = series.SendFilecoinDefaults(ctx, genesis, client, 1000) - require.NoError(t, err) - - RunRetrievalTest(ctx, t, miner, client) -} - -// TestRetrieval exercises storing and retreiving with the filecoin protocols on a kittyhawk deployed -// devnet. -func TestRetrievalDevnet(t *testing.T) { - tf.FunctionalTest(t) - - // Skip the test so it doesn't run - t.SkipNow() - - blocktime := time.Second * 30 - networkConfig, err := environment.FindDevnetConfigByName("nightly") - require.NoError(t, err) - - // This test should run in and hour and no longer - ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(blocktime*120)) - defer cancel() - - // Create a directory for the test using the test name (mostly for FAST) - dir, err := ioutil.TempDir("", t.Name()) - require.NoError(t, err) - - // Create an environment that includes a genesis block with 1MM FIL - env, err := environment.NewDevnet(networkConfig, dir) - require.NoError(t, err) - - // Teardown will shutdown all running processes the environment knows about - // and cleanup anything the evironment setup. This includes the directory - // the environment was created to use. - defer func() { - require.NoError(t, env.Teardown(ctx)) - }() - - // Setup options for nodes. - options := make(map[string]string) - options[localplugin.AttrLogJSON] = "0" // Disable JSON logs - options[localplugin.AttrLogLevel] = "4" // Set log level to Info - options[localplugin.AttrFilecoinBinary] = th.MustGetFilecoinBinary() // Set binary - - ctx = series.SetCtxSleepDelay(ctx, blocktime) - - genesisURI := env.GenesisCar() - - fastenvOpts := fast.FilecoinOpts{ - InitOpts: []fast.ProcessInitOption{fast.POGenesisFile(genesisURI), fast.PODevnet(networkConfig.Name)}, - DaemonOpts: []fast.ProcessDaemonOption{}, - } - - miner, err := env.NewProcess(ctx, localplugin.PluginName, options, fastenvOpts) - require.NoError(t, err) - - client, err := env.NewProcess(ctx, localplugin.PluginName, options, fastenvOpts) - require.NoError(t, err) - - // Start Miner - err = series.InitAndStart(ctx, miner) - require.NoError(t, err) - - // Start Client - err = series.InitAndStart(ctx, client) - require.NoError(t, err) - - // Everyone needs FIL to deal with gas costs and make sure their wallets - // exists (sending FIL to a wallet addr creates it) - err = env.GetFunds(ctx, miner) - require.NoError(t, err) - - err = env.GetFunds(ctx, client) - require.NoError(t, err) - - RunRetrievalTest(ctx, t, miner, client) -} - -func RunRetrievalTest(ctx context.Context, t *testing.T, miner, client *fast.Filecoin) { - collateral := big.NewInt(10) // FIL - price := big.NewFloat(0.000000001) // price per byte/block - expiry := big.NewInt(24 * 60 * 60 / 30) // ~24 hours - - pparams, err := miner.Protocol(ctx) - require.NoError(t, err) - - sinfo := pparams.SupportedSectors[0] - - // Create a miner on the miner node - ask, err := series.CreateStorageMinerWithAsk(ctx, miner, collateral, price, expiry, sinfo.Size) - require.NoError(t, err) - - // Connect the client and the miner - require.NoError(t, series.Connect(ctx, client, miner)) - - // Start the miner - require.NoError(t, miner.MiningStart(ctx)) - - // Store some data with the miner with the given ask, returns the cid for - // the imported data, and the deal which was created - var data bytes.Buffer - dataReader := io.LimitReader(rand.Reader, int64(sinfo.MaxPieceSize)) - dataReader = io.TeeReader(dataReader, &data) - dcid, deal, err := series.ImportAndStore(ctx, client, ask, files.NewReaderFile(dataReader)) - require.NoError(t, err) - - // Wait for the deal to be complete - proposalResponse, err := series.WaitForDealState(ctx, client, deal, storagemarket.StorageDealActive) - require.NoError(t, err) - - _, err = client.MessageWait(ctx, *proposalResponse.PublishMessage) - require.NoError(t, err) - - // Verify PIP - _, err = client.ClientVerifyStorageDeal(ctx, deal.Proposal) - require.NoError(t, err) - - // Retrieve the stored piece of data - reader, err := client.RetrievalClientRetrievePiece(ctx, dcid, ask.Miner) - require.NoError(t, err) - - // Verify that it's all the same - retrievedData, err := ioutil.ReadAll(reader) - require.NoError(t, err) - require.Equal(t, data.Bytes(), retrievedData) -} diff --git a/tools/faucet/limiter/limiter.go b/tools/faucet/limiter/limiter.go deleted file mode 100644 index 9a9af63797..0000000000 --- a/tools/faucet/limiter/limiter.go +++ /dev/null @@ -1,79 +0,0 @@ -package limiter - -import ( - "sync" - "time" -) - -// Time interface defines required time methods for the Limiter struct. -// Primarily used for testing -type Time interface { - Until(time.Time) time.Duration -} - -// Limiter is used to restrict access to a resources till a future time -type Limiter struct { - addrsMu sync.Mutex - // addrs maps an address to the time when it is allowed to make additional requests - addrs map[string]time.Time - // time - time Time -} - -// NewLimiter returns a new limiter -func NewLimiter(tm Time) *Limiter { - l := &Limiter{} - - l.addrs = make(map[string]time.Time) - l.time = tm - - return l -} - -// Add limits value till a given time -func (l *Limiter) Add(addr string, t time.Time) { - l.addrsMu.Lock() - defer l.addrsMu.Unlock() - l.addrs[addr] = t -} - -// Ready checks to see if the time has expired. Returns a time.Duration -// for the time remaining till a true value will be returned -func (l *Limiter) Ready(addr string) (time.Duration, bool) { - l.addrsMu.Lock() - defer l.addrsMu.Unlock() - - return l.ready(addr) -} - -func (l *Limiter) ready(addr string) (time.Duration, bool) { - if t, ok := l.addrs[addr]; ok && l.time.Until(t) > 0 { - return l.time.Until(t), false - } - - return 0, true -} - -// Clear removes value from the limiter. Any calls to Ready for the value -// will return true after a call to Clear for it. -func (l *Limiter) Clear(addr string) { - l.addrsMu.Lock() - defer l.addrsMu.Unlock() - l.clear(addr) -} - -func (l *Limiter) clear(addr string) { - delete(l.addrs, addr) -} - -// Clean removes all values which a call to Ready would return true -func (l *Limiter) Clean() { - l.addrsMu.Lock() - defer l.addrsMu.Unlock() - - for addr := range l.addrs { - if _, ok := l.ready(addr); ok { - l.clear(addr) - } - } -} diff --git a/tools/faucet/limiter/limiter_test.go b/tools/faucet/limiter/limiter_test.go deleted file mode 100644 index 000cc6628e..0000000000 --- a/tools/faucet/limiter/limiter_test.go +++ /dev/null @@ -1,128 +0,0 @@ -package limiter - -import ( - "testing" - "time" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/stretchr/testify/assert" -) - -type MockTime struct { - UntilReturn time.Duration -} - -func (mt *MockTime) Until(t time.Time) time.Duration { - return mt.UntilReturn -} - -func TestReady(t *testing.T) { - tf.UnitTest(t) - - addr := "Qmaddr" - - t.Run("Not ready before time elapses", func(t *testing.T) { - lockedFor := time.Microsecond * 50 - mt := &MockTime{} - mt.UntilReturn = lockedFor - - l := NewLimiter(mt) - - l.Add(addr, time.Now().Add(lockedFor)) - t0, ok := l.Ready(addr) - assert.False(t, ok) - assert.Equal(t, lockedFor, t0) - }) - - t.Run("Ready after time elapses", func(t *testing.T) { - lockedFor := time.Microsecond * 50 - - mt := &MockTime{} - mt.UntilReturn = time.Duration(0) - - l := NewLimiter(mt) - - l.Add(addr, time.Now().Add(lockedFor)) - t0, ok := l.Ready(addr) - assert.True(t, ok) - assert.Equal(t, time.Duration(0), t0) - }) - - t.Run("Ready if not added", func(t *testing.T) { - mt := &MockTime{} - mt.UntilReturn = time.Duration(0) - - l := NewLimiter(mt) - - t0, ok := l.Ready(addr) - assert.True(t, ok) - assert.Equal(t, time.Duration(0), t0) - }) - - t.Run("Ready after waiting returned duration", func(t *testing.T) { - lockedFor := time.Microsecond * 50 - mt := &MockTime{} - mt.UntilReturn = lockedFor - - l := NewLimiter(mt) - - l.Add(addr, time.Now().Add(lockedFor)) - - d0, ok := l.Ready(addr) - assert.False(t, ok) - assert.Equal(t, lockedFor, d0) - - mt.UntilReturn = time.Duration(0) - - d0, ok = l.Ready(addr) - assert.True(t, ok) - assert.Equal(t, time.Duration(0), d0) - }) -} - -func TestClear(t *testing.T) { - tf.UnitTest(t) - - addr := "Qmaddr" - - t.Run("Ready after clear", func(t *testing.T) { - lockedFor := time.Microsecond * 50 - mt := &MockTime{} - mt.UntilReturn = lockedFor - - l := NewLimiter(mt) - - l.Add(addr, time.Now().Add(lockedFor)) - _, ok := l.Ready(addr) - assert.False(t, ok) - - l.Clear(addr) - - _, ok = l.Ready(addr) - assert.True(t, ok) - }) -} - -func TestClean(t *testing.T) { - tf.UnitTest(t) - - addr := "Qmaddr" - - t.Run("Removes expired values", func(t *testing.T) { - lockedFor := time.Microsecond * 50 - mt := &MockTime{} - mt.UntilReturn = time.Duration(0) - - l := NewLimiter(mt) - - l.Add(addr, time.Now().Add(lockedFor)) - assert.Len(t, l.addrs, 1) - - l.Clean() - - assert.Len(t, l.addrs, 0) - - _, ok := l.Ready(addr) - assert.True(t, ok) - }) -} diff --git a/tools/faucet/main.go b/tools/faucet/main.go deleted file mode 100644 index 2a5b198010..0000000000 --- a/tools/faucet/main.go +++ /dev/null @@ -1,146 +0,0 @@ -package main - -import ( - "encoding/json" - "flag" - "fmt" - "io/ioutil" - "net/http" - "time" - - "github.com/filecoin-project/go-address" - "github.com/ipfs/go-cid" - logging "github.com/ipfs/go-log/v2" - - "github.com/filecoin-project/go-filecoin/tools/faucet/limiter" -) - -var log = logging.Logger("faucet") - -// Tick interval to cleanup wallet addrs that have passed the expiry time -var limiterCleanTick = time.Minute * 15 - -// Default timeout between wallet fund requests -var defaultLimiterExpiry = time.Hour * 1 - -func init() { - // Info level - logging.SetAllLoggers(4) -} - -type timeImpl struct{} - -// Until returns the time.Duration until time.Time t -func (mt *timeImpl) Until(t time.Time) time.Duration { - return time.Until(t) -} - -func main() { - filapi := flag.String("fil-api", "localhost:3453", "set the api address of the filecoin node to use") - filwal := flag.String("fil-wallet", "", "(required) set the wallet address for the controlled filecoin node to send funds from") - expiry := flag.Duration("limiter-expiry", defaultLimiterExpiry, "minimum time duration between faucet request to the same wallet addr") - faucetval := flag.Int64("faucet-val", 500, "set the amount of fil to pay to each requester") - flag.Parse() - - if *filwal == "" { - fmt.Println("ERROR: must provide wallet address to send funds from") - flag.Usage() - return - } - - addrLimiter := limiter.NewLimiter(&timeImpl{}) - - // Clean the limiter every limiterCleanTick - go func() { - c := time.Tick(limiterCleanTick) - for range c { - addrLimiter.Clean() - } - }() - - http.HandleFunc("/", displayForm) - http.HandleFunc("/tap", func(w http.ResponseWriter, r *http.Request) { - target := r.FormValue("target") - if target == "" { - http.Error(w, "must specify a target address to send FIL to", 400) - return - } - log.Infof("Request to send funds to: %s", target) - - addr, err := address.NewFromString(target) - if err != nil { - log.Errorf("failed to parse target address: %s %s", target, err) - http.Error(w, fmt.Sprintf("Failed to parse target address %s %s", target, err.Error()), 400) - return - } - - if readyIn, ok := addrLimiter.Ready(target); !ok { - log.Errorf("limit hit for target address %s", target) - w.Header().Add("Retry-After", fmt.Sprintf("%d", int64(readyIn/time.Second))) - http.Error(w, fmt.Sprintf("Too Many Requests, please wait %s", readyIn), http.StatusTooManyRequests) - return - } - - reqStr := fmt.Sprintf("http://%s/api/message/send?arg=%s&value=%d&from=%s&gas-price=0.0001&gas-limit=1000", *filapi, addr, *faucetval, *filwal) - log.Infof("Request URL: %s", reqStr) - - resp, err := http.Post(reqStr, "application/json", nil) - if err != nil { - log.Errorf("failed to Post request: %s", err) - http.Error(w, err.Error(), 500) - return - } - - out, err := ioutil.ReadAll(resp.Body) - if err != nil { - log.Errorf("failed to read response body: %s", err) - http.Error(w, "failed to read response", 500) - return - } - if resp.StatusCode != 200 { - log.Errorf("status: %s body: %s", resp.Status, string(out)) - http.Error(w, "failed to send funds", 500) - return - } - - msgResp := struct{ Cid cid.Cid }{} - - // result should be a message cid - if err := json.Unmarshal(out, &msgResp); err != nil { - log.Errorf("json unmarshal from response failed: %s", err) - log.Errorf("response data was: %s", out) - http.Error(w, "faucet unmarshal failed", 500) - return - } - msgcid := msgResp.Cid - - addrLimiter.Add(target, time.Now().Add(*expiry)) - - log.Info("Request successful. Message CID: %s", msgcid.String()) - w.Header().Add("Message-Cid", msgcid.String()) - w.WriteHeader(200) - fmt.Fprint(w, "Success! Message CID: ") // nolint: errcheck - fmt.Fprintln(w, msgcid.String()) // nolint: errcheck - }) - - panic(http.ListenAndServe(":9797", nil)) -} - -const form = ` - - -

What is your wallet address

-

You can find this by running:

- go-filecoin address ls -

Address:

-
- - -
- - -` - -func displayForm(w http.ResponseWriter, r *http.Request) { - fmt.Fprint(w, form) // nolint: errcheck -} diff --git a/tools/gen/api/proxygen.go b/tools/gen/api/proxygen.go new file mode 100644 index 0000000000..2042e87cd4 --- /dev/null +++ b/tools/gen/api/proxygen.go @@ -0,0 +1,537 @@ +package main + +import ( + "encoding/json" + "fmt" + "go/ast" + "go/parser" + "go/token" + "io/ioutil" + "os" + "path" + "path/filepath" + "regexp" + "strconv" + "strings" + "text/template" + "unicode" + + "github.com/filecoin-project/venus/app/client/funcrule" + "golang.org/x/xerrors" +) + +// Rule[perm:read,ignore:true] +var rulePattern = `Rule\[(?P.*)\]` + +type ruleKey = string + +const ( + rkPerm ruleKey = "perm" + rkIgnore ruleKey = "ignore" +) + +var defaultPerm = []string{"perm", "read"} + +var regRule, _ = regexp.Compile(rulePattern) + +func parseRule(comment string) (*funcrule.Rule, map[string][]string) { + rule := new(funcrule.Rule) + match := regRule.FindStringSubmatch(comment) + tags := map[string][]string{} + if len(match) == 2 { + pairs := strings.Split(match[1], ",") + for _, v := range pairs { + pair := strings.Split(v, ":") + if len(pair) != 2 { + continue + } + switch pair[0] { + case rkPerm: + tags[rkPerm] = pair + rule.Perm = pair[1] + case rkIgnore: + ig, err := strconv.ParseBool(pair[1]) + if err != nil { + panic("the rule tag is invalid format") + } + rule.Ignore = ig + } + } + } else { + rule.Perm = "read" + tags[rkPerm] = defaultPerm + } + return rule, tags +} + +type methodMeta struct { + node ast.Node + ftype *ast.FuncType +} + +type Visitor struct { + Methods map[string]map[string]*methodMeta + Include map[string][]string +} + +func (v *Visitor) Visit(node ast.Node) ast.Visitor { + st, ok := node.(*ast.TypeSpec) + if !ok { + return v + } + + iface, ok := st.Type.(*ast.InterfaceType) + if !ok { + return v + } + if v.Methods[st.Name.Name] == nil { + v.Methods[st.Name.Name] = map[string]*methodMeta{} + } + for _, m := range iface.Methods.List { + switch ft := m.Type.(type) { + case *ast.Ident: + v.Include[st.Name.Name] = append(v.Include[st.Name.Name], ft.Name) + case *ast.FuncType: + v.Methods[st.Name.Name][m.Names[0].Name] = &methodMeta{ + node: m, + ftype: ft, + } + } + } + + return v +} + +func main() { + var arg string + if len(os.Args) > 1 { + arg = os.Args[1] + } + + onlyCompare := arg == "compare" + lpath := lotusPath() + + infos := struct { + V0 *stableMethodInfo + V1 *stableMethodInfo + }{ + V0: v0API(lpath, onlyCompare), + V1: v1API(lpath, onlyCompare), + } + + data, err := json.MarshalIndent(infos, "", "\t") + checkError(err) + err = ioutil.WriteFile("./tools/gen/api/stable_method_info.json", data, 0666) + checkError(err) +} + +func v0API(lpath string, onlyCompare bool) *stableMethodInfo { + apiFilePaths := []string{ + path.Join(lpath, "api/v0api/full.go"), + path.Join(lpath, "api/api_common.go"), + path.Join(lpath, "api/api_net.go"), + } + fmt.Println("v0 lotus api file: ", apiFilePaths) + + bmp, err := benchmarkMethodPerm(apiFilePaths) + checkError(err) + //outputWithJSON(bmp, "v0 benchmarkMethodPerm: ") + + mm, err := methodMetaFromInterface("./app/client/apiface", "v0api", "v0api") + checkError(err) + + smi := check(bmp, mm) + outputWithJSON(smi, "v0 api StableMethodInfo: ") + + if !onlyCompare { + outfile := "./app/client/v0api/full.go" + checkError(doTemplate(outfile, mm, templ)) + } + + return smi +} + +func v1API(lpath string, onlyCompare bool) *stableMethodInfo { + apiFilePaths := []string{ + path.Join(lpath, "api/api_full.go"), + path.Join(lpath, "api/api_common.go"), + path.Join(lpath, "api/api_net.go"), + } + fmt.Println("v1 lotus api file: ", apiFilePaths) + + bmp, err := benchmarkMethodPerm(apiFilePaths) + checkError(err) + //outputWithJSON(bmp, "v1 benchmarkMethodPerm: ") + + mm, err := methodMetaFromInterface("./app/client", "apiface", "client") + checkError(err) + + smi := check(bmp, mm) + outputWithJSON(smi, "v1 api StableMethodInfo: ") + + if !onlyCompare { + outfile := "./app/client/full.go" + checkError(doTemplate(outfile, mm, templ)) + } + + return smi +} + +func lotusPath() string { + currPath := "../lotus" + rootPath := path.Join(os.Getenv("GOPATH"), "pkg/mod/github.com/filecoin-project") + dirs, err := os.ReadDir(rootPath) + if err == nil { + // Select the latest version of Lotus + for _, dir := range dirs { + if strings.Contains(dir.Name(), "lotus") { + fmt.Println(dir.Name()) + currPath = path.Join(rootPath, dir.Name()) + } + } + } + fmt.Println("lotus path:", currPath) + + return currPath +} + +func benchmarkMethodPerm(apiFilePaths []string) (map[string]string, error) { + fset := token.NewFileSet() + files := make([]*ast.File, 0, len(apiFilePaths)) + visitor := &Visitor{make(map[string]map[string]*methodMeta), map[string][]string{}} + + for _, fpath := range apiFilePaths { + f, err := parser.ParseFile(fset, fpath, nil, parser.AllErrors|parser.ParseComments) + if err != nil { + return nil, err + } + files = append(files, f) + ast.Walk(visitor, f) + } + + perms := make(map[string]string) + for _, f := range files { + cmap := ast.NewCommentMap(fset, f, f.Comments) + for _, methods := range visitor.Methods { + for mname, node := range methods { + filteredComments := cmap.Filter(node.node).Comments() + if len(filteredComments) > 0 { + cmt := filteredComments[len(filteredComments)-1].List[0].Text + if !strings.Contains(cmt, "perm:") { + fmt.Println("lotus method not found perm: ", mname) + continue + } + pairs := strings.Split(cmt, ":") + if len(pairs) != 2 { + continue + } + perms[mname] = pairs[1] + } + } + } + } + + return perms, nil +} + +type methodInfo struct { + Name string + node ast.Node + Tags map[string][]string + NamedParams, ParamNames, Results, DefRes string +} +type strinfo struct { + Name string + Methods map[string]*methodInfo + Include []string +} +type meta struct { + Infos map[string]*strinfo + Imports map[string]string + OutPkg string +} + +func methodMetaFromInterface(rootPath string, pkg, outpkg string) (*meta, error) { + fset := token.NewFileSet() + apiDir, err := filepath.Abs(rootPath) + if err != nil { + return nil, err + } + + visitor := &Visitor{make(map[string]map[string]*methodMeta), map[string][]string{}} + m := &meta{ + OutPkg: outpkg, + Infos: map[string]*strinfo{}, + Imports: map[string]string{}, + } + //filter := isGoFile + pkgs, err := parser.ParseDir(fset, path.Join(apiDir, pkg), nil, parser.AllErrors|parser.ParseComments) + if err != nil { + return nil, err + } + ap := pkgs[pkg] + + ast.Walk(visitor, ap) + ignoreMethods := map[string][]string{} + for _, f := range ap.Files { + cmap := ast.NewCommentMap(fset, f, f.Comments) + for _, im := range f.Imports { + m.Imports[im.Path.Value] = im.Path.Value + if im.Name != nil { + m.Imports[im.Path.Value] = im.Name.Name + " " + m.Imports[im.Path.Value] + } + } + + for ifname, methods := range visitor.Methods { + if _, ok := m.Infos[ifname]; !ok { + m.Infos[ifname] = &strinfo{ + Name: ifname, + Methods: map[string]*methodInfo{}, + Include: visitor.Include[ifname], + } + } + info := m.Infos[ifname] + for mname, node := range methods { + filteredComments := cmap.Filter(node.node).Comments() + if _, ok := info.Methods[mname]; !ok { + var params, pnames []string + for _, param := range node.ftype.Params.List { + pstr, err := typeName(param.Type, outpkg) + if err != nil { + return nil, err + } + + c := len(param.Names) + if c == 0 { + c = 1 + } + + for i := 0; i < c; i++ { + pname := fmt.Sprintf("p%d", len(params)) + pnames = append(pnames, pname) + params = append(params, pname+" "+pstr) + } + } + + var results []string + for _, result := range node.ftype.Results.List { + rs, err := typeName(result.Type, outpkg) + if err != nil { + return nil, err + } + results = append(results, rs) + } + + defRes := "" + if len(results) > 1 { + defRes = results[0] + switch { + case defRes[0] == '*' || defRes[0] == '<', defRes == "interface{}": + defRes = "nil" + case defRes == "bool": + defRes = "false" + case defRes == "string": + defRes = `""` + case defRes == "int", defRes == "int64", defRes == "uint64", defRes == "uint": + defRes = "0" + default: + defRes = "*new(" + defRes + ")" + } + defRes += ", " + } + + info.Methods[mname] = &methodInfo{ + Name: mname, + node: node.node, + Tags: map[string][]string{}, + NamedParams: strings.Join(params, ", "), + ParamNames: strings.Join(pnames, ", "), + Results: strings.Join(results, ", "), + DefRes: defRes, + } + } + + // try to parse tag info + if len(filteredComments) > 0 { + cmt := filteredComments[0].List[len(filteredComments[0].List)-1].Text + rule, tags := parseRule(cmt) + info.Methods[mname].Tags[rkPerm] = tags[rkPerm] + // remove ignore method + if rule.Ignore { + ignoreMethods[ifname] = append(ignoreMethods[ifname], mname) + } + } + } + } + } + for ifname, mnames := range ignoreMethods { + for _, mname := range mnames { + delete(m.Infos[ifname].Methods, mname) + } + } + + return m, nil +} + +func typeName(e ast.Expr, pkg string) (string, error) { + switch t := e.(type) { + case *ast.SelectorExpr: + return t.X.(*ast.Ident).Name + "." + t.Sel.Name, nil + case *ast.Ident: + pstr := t.Name + if !unicode.IsLower(rune(pstr[0])) && pkg != "client" { + pstr = "client." + pstr // todo src pkg name + } + return pstr, nil + case *ast.ArrayType: + subt, err := typeName(t.Elt, pkg) + if err != nil { + return "", err + } + return "[]" + subt, nil + case *ast.StarExpr: + subt, err := typeName(t.X, pkg) + if err != nil { + return "", err + } + return "*" + subt, nil + case *ast.MapType: + k, err := typeName(t.Key, pkg) + if err != nil { + return "", err + } + v, err := typeName(t.Value, pkg) + if err != nil { + return "", err + } + return "map[" + k + "]" + v, nil + case *ast.StructType: + if len(t.Fields.List) != 0 { + return "", xerrors.Errorf("can't struct") + } + return "struct{}", nil + case *ast.InterfaceType: + if len(t.Methods.List) != 0 { + return "", xerrors.Errorf("can't interface") + } + return "interface{}", nil + case *ast.ChanType: + subt, err := typeName(t.Value, pkg) + if err != nil { + return "", err + } + if t.Dir == ast.SEND { + subt = "->chan " + subt + } else { + subt = "<-chan " + subt + } + return subt, nil + default: + return "", xerrors.Errorf("unknown type") + } +} + +type stableMethodInfo struct { + // Lotus and Venus both have functions and the same permissions + Common map[string]string + // Venus has functions that Lotus does not + Extend map[string]string + // Lotus has functions that Venus does not + Loss map[string]string + // Both Lotus and venus has functions but the permissions are different + Gap map[string]string +} + +func newStableMethodInfo() *stableMethodInfo { + return &stableMethodInfo{ + Common: make(map[string]string), + Extend: make(map[string]string), + Loss: make(map[string]string), + Gap: make(map[string]string), + } +} + +func check(bmp map[string]string, m *meta) *stableMethodInfo { + smi := newStableMethodInfo() + vMethodPerms := make(map[string]string) + for _, info := range m.Infos { + for _, one := range info.Methods { + mperm := one.Tags[rkPerm][1] + vMethodPerms[one.Name] = mperm + if perm, ok := bmp[one.Name]; ok { + if mperm != perm { + smi.Gap[one.Name] = fmt.Sprintf("venus:%s lotus:%s", mperm, perm) + continue + } + smi.Common[one.Name] = mperm + } else { + smi.Extend[one.Name] = mperm + } + } + } + for m, p := range bmp { + if _, ok := vMethodPerms[m]; !ok { + smi.Loss[m] = p + } + } + + return smi +} + +func doTemplate(outfile string, info interface{}, templ string) error { + w, err := os.OpenFile(outfile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) + if err != nil { + return err + } + t := template.Must(template.New(""). + Funcs(template.FuncMap{}).Parse(templ)) + + return t.Execute(w, info) +} + +var templ = `// Code generated by github.com/filecoin-project/tools/gen/api. DO NOT EDIT. + +package {{.OutPkg}} + +import ( +{{range .Imports}} {{.}} +{{end}} +) + +{{range .Infos}} + +{{$name := .Name}} +type {{.Name}}Struct struct { +{{range .Include}} {{.}}Struct +{{end}} + +{{ if gt (len .Methods) 0 }} + Internal struct { + {{range .Methods}} {{.Name}} func({{.NamedParams}}) ({{.Results}}) ` + "`" + `{{range .Tags}}{{index . 0}}:"{{index . 1}}"{{end}}` + "`" + ` + {{end}} + } +{{ end }} +} + +{{range .Methods}} func(s *{{$name}}Struct) {{.Name}} ({{.NamedParams}}) ({{.Results}}){ + return s.Internal.{{.Name}}({{.ParamNames}}) +} + +{{end}} + +{{end}} +` + +func checkError(err error) { + if err != nil { + panic(err) + } +} + +func outputWithJSON(obj interface{}, comment string) { + b, err := json.MarshalIndent(obj, "", "\t") + if err != nil { + fmt.Println("json marshal error: ", err) + } + fmt.Println(comment, "\n", string(b)) +} diff --git a/tools/gen/api/stable_method_info.json b/tools/gen/api/stable_method_info.json new file mode 100644 index 0000000000..de50e4bd25 --- /dev/null +++ b/tools/gen/api/stable_method_info.json @@ -0,0 +1,529 @@ +{ + "V0": { + "Common": { + "AuthNew": "admin", + "BeaconGetEntry": "read", + "ChainDeleteObj": "admin", + "ChainExport": "read", + "ChainGetBlock": "read", + "ChainGetBlockMessages": "read", + "ChainGetMessage": "read", + "ChainGetMessagesInTipset": "read", + "ChainGetParentMessages": "read", + "ChainGetParentReceipts": "read", + "ChainGetPath": "read", + "ChainGetRandomnessFromBeacon": "read", + "ChainGetRandomnessFromTickets": "read", + "ChainGetTipSet": "read", + "ChainGetTipSetByHeight": "read", + "ChainHasObj": "read", + "ChainHead": "read", + "ChainNotify": "read", + "ChainReadObj": "read", + "ChainSetHead": "admin", + "ChainStatObj": "read", + "ChainTipSetWeight": "read", + "GasEstimateFeeCap": "read", + "GasEstimateGasLimit": "read", + "GasEstimateGasPremium": "read", + "GasEstimateMessageGas": "read", + "MinerCreateBlock": "write", + "MinerGetBaseInfo": "read", + "MpoolBatchPush": "write", + "MpoolBatchPushMessage": "sign", + "MpoolBatchPushUntrusted": "write", + "MpoolClear": "write", + "MpoolGetConfig": "read", + "MpoolGetNonce": "read", + "MpoolPending": "read", + "MpoolPush": "write", + "MpoolPushMessage": "sign", + "MpoolPushUntrusted": "write", + "MpoolSelect": "read", + "MpoolSetConfig": "admin", + "MpoolSub": "read", + "MsigAddApprove": "sign", + "MsigAddCancel": "sign", + "MsigAddPropose": "sign", + "MsigApprove": "sign", + "MsigApproveTxnHash": "sign", + "MsigCancel": "sign", + "MsigCreate": "sign", + "MsigGetVested": "read", + "MsigPropose": "sign", + "MsigRemoveSigner": "sign", + "MsigSwapApprove": "sign", + "MsigSwapCancel": "sign", + "MsigSwapPropose": "sign", + "NetAddrsListen": "read", + "PaychAllocateLane": "sign", + "PaychAvailableFunds": "sign", + "PaychAvailableFundsByFromTo": "sign", + "PaychCollect": "sign", + "PaychGet": "sign", + "PaychGetWaitReady": "sign", + "PaychList": "read", + "PaychNewPayment": "sign", + "PaychSettle": "sign", + "PaychStatus": "read", + "PaychVoucherAdd": "write", + "PaychVoucherCheckSpendable": "read", + "PaychVoucherCheckValid": "read", + "PaychVoucherCreate": "sign", + "PaychVoucherList": "write", + "PaychVoucherSubmit": "sign", + "StateAccountKey": "read", + "StateCall": "read", + "StateCirculatingSupply": "read", + "StateDealProviderCollateralBounds": "read", + "StateGetActor": "read", + "StateGetReceipt": "read", + "StateListActors": "read", + "StateListMiners": "read", + "StateLookupID": "read", + "StateMarketBalance": "read", + "StateMarketDeals": "read", + "StateMarketParticipants": "read", + "StateMarketStorageDeal": "read", + "StateMinerActiveSectors": "read", + "StateMinerAvailableBalance": "read", + "StateMinerDeadlines": "read", + "StateMinerFaults": "read", + "StateMinerInfo": "read", + "StateMinerInitialPledgeCollateral": "read", + "StateMinerPartitions": "read", + "StateMinerPower": "read", + "StateMinerPreCommitDepositForPower": "read", + "StateMinerProvingDeadline": "read", + "StateMinerRecoveries": "read", + "StateMinerSectorAllocated": "read", + "StateMinerSectorCount": "read", + "StateMinerSectors": "read", + "StateNetworkName": "read", + "StateNetworkVersion": "read", + "StateSearchMsg": "read", + "StateSearchMsgLimited": "read", + "StateSectorExpiration": "read", + "StateSectorGetInfo": "read", + "StateSectorPartition": "read", + "StateSectorPreCommitInfo": "read", + "StateVMCirculatingSupplyInternal": "read", + "StateVerifiedClientStatus": "read", + "StateVerifiedRegistryRootKey": "read", + "StateVerifierStatus": "read", + "StateWaitMsg": "read", + "StateWaitMsgLimited": "read", + "SyncState": "read", + "SyncSubmitBlock": "write", + "Version": "read", + "WalletBalance": "read", + "WalletDefaultAddress": "write", + "WalletExport": "admin", + "WalletHas": "write", + "WalletImport": "admin", + "WalletSetDefault": "write", + "WalletSign": "sign", + "WalletSignMessage": "sign" + }, + "Extend": { + "BlockTime": "read", + "ChainGetReceipts": "read", + "ChainList": "read", + "ChainSyncHandleNewTipSet": "write", + "Concurrent": "read", + "ConfigGet": "read", + "ConfigSet": "admin", + "DAGCat": "read", + "DAGGetFileSize": "read", + "DAGGetNode": "read", + "DAGImportData": "write", + "GasBatchEstimateMessageGas": "read", + "GetActor": "read", + "GetEntry": "read", + "GetFullBlock": "read", + "GetParentStateRootActor": "read", + "HasPassword": "admin", + "ListActor": "read", + "LockWallet": "admin", + "MessageWait": "read", + "MpoolDeleteByAdress": "admin", + "MpoolPublishByAddr": "write", + "MpoolPublishMessage": "write", + "MpoolSelects": "read", + "NetworkConnect": "read", + "NetworkFindPeer": "read", + "NetworkFindProvidersAsync": "read", + "NetworkGetBandwidthStats": "admin", + "NetworkGetClosestPeers": "admin", + "NetworkGetPeerAddresses": "admin", + "NetworkGetPeerID": "admin", + "NetworkPeers": "read", + "ProtocolParameters": "read", + "ResolveToKeyAddr": "read", + "SetConcurrent": "admin", + "SetPassword": "admin", + "StateMinerSectorSize": "read", + "StateMinerWorkerAddress": "read", + "SyncerTracker": "read", + "UnLockWallet": "admin", + "Verify": "read", + "VerifyEntry": "read", + "WalletAddresses": "admin", + "WalletNewAddress": "write", + "WalletState": "admin" + }, + "Loss": { + "AuthVerify": "read", + "ChainGetGenesis": "read", + "ChainGetNode": "read", + "ClientCalcCommP": "write", + "ClientCancelDataTransfer": "write", + "ClientCancelRetrievalDeal": "write", + "ClientDataTransferUpdates": "write", + "ClientDealPieceCID": "read", + "ClientDealSize": "read", + "ClientFindData": "read", + "ClientGenCar": "write", + "ClientGetDealInfo": "read", + "ClientGetDealStatus": "read", + "ClientGetDealUpdates": "write", + "ClientGetRetrievalUpdates": "write", + "ClientHasLocal": "write", + "ClientImport": "admin", + "ClientListDataTransfers": "write", + "ClientListDeals": "write", + "ClientListImports": "write", + "ClientListRetrievals": "write", + "ClientMinerQueryOffer": "read", + "ClientQueryAsk": "read", + "ClientRemoveImport": "admin", + "ClientRestartDataTransfer": "write", + "ClientRetrieve": "admin", + "ClientRetrieveTryRestartInsufficientFunds": "write", + "ClientRetrieveWithEvents": "admin", + "ClientStartDeal": "admin", + "ClientStatelessDeal": "write", + "Closing": "read", + "CreateBackup": "admin", + "Discover": "read", + "ID": "read", + "LogAlerts": "admin", + "LogList": "write", + "LogSetLevel": "write", + "MarketAddBalance": "sign", + "MarketGetReserved": "sign", + "MarketReleaseFunds": "sign", + "MarketReserveFunds": "sign", + "MarketWithdraw": "sign", + "MsigGetAvailableBalance": "read", + "MsigGetPending": "read", + "MsigGetVestingSchedule": "read", + "NetAgentVersion": "read", + "NetAutoNatStatus": "read", + "NetBandwidthStats": "read", + "NetBandwidthStatsByPeer": "read", + "NetBandwidthStatsByProtocol": "read", + "NetBlockAdd": "admin", + "NetBlockList": "read", + "NetBlockRemove": "admin", + "NetConnect": "write", + "NetConnectedness": "read", + "NetDisconnect": "write", + "NetFindPeer": "read", + "NetPeerInfo": "read", + "NetPeers": "read", + "NetPubsubScores": "read", + "Session": "read", + "Shutdown": "admin", + "StateAllMinerFaults": "read", + "StateChangedActors": "read", + "StateCompute": "read", + "StateDecodeParams": "read", + "StateGetRandomnessFromBeacon": "read", + "StateGetRandomnessFromTickets": "read", + "StateListMessages": "read", + "StateReadState": "read", + "StateReplay": "read", + "SyncCheckBad": "read", + "SyncCheckpoint": "admin", + "SyncIncomingBlocks": "read", + "SyncMarkBad": "admin", + "SyncUnmarkAllBad": "admin", + "SyncUnmarkBad": "admin", + "SyncValidateTipset": "read", + "WalletDelete": "admin", + "WalletList": "write", + "WalletNew": "write", + "WalletValidateAddress": "read", + "WalletVerify": "read" + }, + "Gap": {} + }, + "V1": { + "Common": { + "AuthNew": "admin", + "BeaconGetEntry": "read", + "ChainDeleteObj": "admin", + "ChainExport": "read", + "ChainGetBlock": "read", + "ChainGetBlockMessages": "read", + "ChainGetMessage": "read", + "ChainGetMessagesInTipset": "read", + "ChainGetParentMessages": "read", + "ChainGetParentReceipts": "read", + "ChainGetPath": "read", + "ChainGetTipSet": "read", + "ChainGetTipSetAfterHeight": "read", + "ChainGetTipSetByHeight": "read", + "ChainHasObj": "read", + "ChainHead": "read", + "ChainNotify": "read", + "ChainReadObj": "read", + "ChainSetHead": "admin", + "ChainStatObj": "read", + "ChainTipSetWeight": "read", + "GasEstimateFeeCap": "read", + "GasEstimateGasLimit": "read", + "GasEstimateGasPremium": "read", + "GasEstimateMessageGas": "read", + "MinerCreateBlock": "write", + "MinerGetBaseInfo": "read", + "MpoolBatchPush": "write", + "MpoolBatchPushMessage": "sign", + "MpoolBatchPushUntrusted": "write", + "MpoolCheckMessages": "read", + "MpoolCheckPendingMessages": "read", + "MpoolCheckReplaceMessages": "read", + "MpoolClear": "write", + "MpoolGetConfig": "read", + "MpoolGetNonce": "read", + "MpoolPending": "read", + "MpoolPush": "write", + "MpoolPushMessage": "sign", + "MpoolPushUntrusted": "write", + "MpoolSelect": "read", + "MpoolSetConfig": "admin", + "MpoolSub": "read", + "MsigAddApprove": "sign", + "MsigAddCancel": "sign", + "MsigAddPropose": "sign", + "MsigApprove": "sign", + "MsigApproveTxnHash": "sign", + "MsigCancel": "sign", + "MsigCreate": "sign", + "MsigGetVested": "read", + "MsigPropose": "sign", + "MsigRemoveSigner": "sign", + "MsigSwapApprove": "sign", + "MsigSwapCancel": "sign", + "MsigSwapPropose": "sign", + "NetAddrsListen": "read", + "PaychAllocateLane": "sign", + "PaychAvailableFunds": "sign", + "PaychAvailableFundsByFromTo": "sign", + "PaychCollect": "sign", + "PaychGet": "sign", + "PaychGetWaitReady": "sign", + "PaychList": "read", + "PaychNewPayment": "sign", + "PaychSettle": "sign", + "PaychStatus": "read", + "PaychVoucherAdd": "write", + "PaychVoucherCheckSpendable": "read", + "PaychVoucherCheckValid": "read", + "PaychVoucherCreate": "sign", + "PaychVoucherList": "write", + "PaychVoucherSubmit": "sign", + "StateAccountKey": "read", + "StateCall": "read", + "StateCirculatingSupply": "read", + "StateDealProviderCollateralBounds": "read", + "StateGetActor": "read", + "StateGetRandomnessFromBeacon": "read", + "StateGetRandomnessFromTickets": "read", + "StateListActors": "read", + "StateListMiners": "read", + "StateLookupID": "read", + "StateMarketBalance": "read", + "StateMarketDeals": "read", + "StateMarketParticipants": "read", + "StateMarketStorageDeal": "read", + "StateMinerActiveSectors": "read", + "StateMinerAvailableBalance": "read", + "StateMinerDeadlines": "read", + "StateMinerFaults": "read", + "StateMinerInfo": "read", + "StateMinerInitialPledgeCollateral": "read", + "StateMinerPartitions": "read", + "StateMinerPower": "read", + "StateMinerPreCommitDepositForPower": "read", + "StateMinerProvingDeadline": "read", + "StateMinerRecoveries": "read", + "StateMinerSectorAllocated": "read", + "StateMinerSectorCount": "read", + "StateMinerSectors": "read", + "StateNetworkName": "read", + "StateNetworkVersion": "read", + "StateSearchMsg": "read", + "StateSectorExpiration": "read", + "StateSectorGetInfo": "read", + "StateSectorPartition": "read", + "StateSectorPreCommitInfo": "read", + "StateVMCirculatingSupplyInternal": "read", + "StateVerifiedClientStatus": "read", + "StateVerifiedRegistryRootKey": "read", + "StateVerifierStatus": "read", + "StateWaitMsg": "read", + "SyncState": "read", + "SyncSubmitBlock": "write", + "Version": "read", + "WalletBalance": "read", + "WalletDefaultAddress": "write", + "WalletExport": "admin", + "WalletHas": "write", + "WalletImport": "admin", + "WalletSetDefault": "write", + "WalletSign": "sign", + "WalletSignMessage": "sign" + }, + "Extend": { + "BlockTime": "read", + "ChainGetRandomnessFromBeacon": "read", + "ChainGetRandomnessFromTickets": "read", + "ChainGetReceipts": "read", + "ChainList": "read", + "ChainSyncHandleNewTipSet": "write", + "Concurrent": "read", + "ConfigGet": "read", + "ConfigSet": "admin", + "DAGCat": "read", + "DAGGetFileSize": "read", + "DAGGetNode": "read", + "DAGImportData": "write", + "GasBatchEstimateMessageGas": "read", + "GetActor": "read", + "GetEntry": "read", + "GetFullBlock": "read", + "GetParentStateRootActor": "read", + "HasPassword": "admin", + "ListActor": "read", + "LockWallet": "admin", + "MessageWait": "read", + "MpoolDeleteByAdress": "admin", + "MpoolPublishByAddr": "write", + "MpoolPublishMessage": "write", + "MpoolSelects": "read", + "NetworkConnect": "read", + "NetworkFindPeer": "read", + "NetworkFindProvidersAsync": "read", + "NetworkGetBandwidthStats": "admin", + "NetworkGetClosestPeers": "read", + "NetworkGetPeerAddresses": "admin", + "NetworkGetPeerID": "admin", + "NetworkPeers": "read", + "ProtocolParameters": "read", + "ResolveToKeyAddr": "read", + "SetConcurrent": "admin", + "SetPassword": "admin", + "StateMinerSectorSize": "read", + "StateMinerWorkerAddress": "read", + "SyncerTracker": "read", + "UnLockWallet": "admin", + "Verify": "read", + "VerifyEntry": "read", + "WalletAddresses": "admin", + "WalletNewAddress": "write", + "WalletState": "admin" + }, + "Loss": { + "AuthVerify": "read", + "ChainBlockstoreInfo": "read", + "ChainCheckBlockstore": "admin", + "ChainGetGenesis": "read", + "ChainGetNode": "read", + "ClientCalcCommP": "write", + "ClientCancelDataTransfer": "write", + "ClientCancelRetrievalDeal": "write", + "ClientDataTransferUpdates": "write", + "ClientDealPieceCID": "read", + "ClientDealSize": "read", + "ClientExport": "admin", + "ClientFindData": "read", + "ClientGenCar": "write", + "ClientGetDealInfo": "read", + "ClientGetDealStatus": "read", + "ClientGetDealUpdates": "write", + "ClientGetRetrievalUpdates": "write", + "ClientHasLocal": "write", + "ClientImport": "admin", + "ClientListDataTransfers": "write", + "ClientListDeals": "write", + "ClientListImports": "write", + "ClientListRetrievals": "write", + "ClientMinerQueryOffer": "read", + "ClientQueryAsk": "read", + "ClientRemoveImport": "admin", + "ClientRestartDataTransfer": "write", + "ClientRetrieve": "admin", + "ClientRetrieveTryRestartInsufficientFunds": "write", + "ClientRetrieveWait": "admin", + "ClientStartDeal": "admin", + "ClientStatelessDeal": "write", + "Closing": "read", + "CreateBackup": "admin", + "Discover": "read", + "ID": "read", + "LogAlerts": "admin", + "LogList": "write", + "LogSetLevel": "write", + "MarketAddBalance": "sign", + "MarketGetReserved": "sign", + "MarketReleaseFunds": "sign", + "MarketReserveFunds": "sign", + "MarketWithdraw": "sign", + "MsigCancelTxnHash": "sign", + "MsigGetAvailableBalance": "read", + "MsigGetPending": "read", + "MsigGetVestingSchedule": "read", + "NetAgentVersion": "read", + "NetAutoNatStatus": "read", + "NetBandwidthStats": "read", + "NetBandwidthStatsByPeer": "read", + "NetBandwidthStatsByProtocol": "read", + "NetBlockAdd": "admin", + "NetBlockList": "read", + "NetBlockRemove": "admin", + "NetConnect": "write", + "NetConnectedness": "read", + "NetDisconnect": "write", + "NetFindPeer": "read", + "NetPeerInfo": "read", + "NetPeers": "read", + "NetPubsubScores": "read", + "NodeStatus": "read", + "Session": "read", + "Shutdown": "admin", + "StateAllMinerFaults": "read", + "StateChangedActors": "read", + "StateCompute": "read", + "StateDecodeParams": "read", + "StateEncodeParams": "read", + "StateListMessages": "read", + "StateReadState": "read", + "StateReplay": "read", + "SyncCheckBad": "read", + "SyncCheckpoint": "admin", + "SyncIncomingBlocks": "read", + "SyncMarkBad": "admin", + "SyncUnmarkAllBad": "admin", + "SyncUnmarkBad": "admin", + "SyncValidateTipset": "read", + "WalletDelete": "admin", + "WalletList": "write", + "WalletNew": "write", + "WalletValidateAddress": "read", + "WalletVerify": "read" + }, + "Gap": {} + } +} \ No newline at end of file diff --git a/tools/gen_cbor/main.go b/tools/gen_cbor/main.go new file mode 100644 index 0000000000..66c4de6828 --- /dev/null +++ b/tools/gen_cbor/main.go @@ -0,0 +1,83 @@ +package main + +import ( + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/chainsync/exchange" + "github.com/filecoin-project/venus/pkg/discovery" + "github.com/filecoin-project/venus/pkg/market" + "github.com/filecoin-project/venus/pkg/paychmgr" + "github.com/filecoin-project/venus/pkg/state/tree" + "github.com/filecoin-project/venus/pkg/vm/dispatch" + gen "github.com/whyrusleeping/cbor-gen" +) + +func main() { + if err := gen.WriteTupleEncodersToFile("./pkg/paychmgr/cbor_gen.go", "paychmgr", + paychmgr.VoucherInfo{}, + paychmgr.ChannelInfo{}, + paychmgr.MsgInfo{}, + ); err != nil { + panic(err) + } + + if err := gen.WriteTupleEncodersToFile("./pkg/market/cbor_gen.go", "market", + market.FundedAddressState{}, + ); err != nil { + panic(err) + } + + //if err := gen.WriteTupleEncodersToFile("./pkg/types/internal/cbor_gen.go", "internal", + // types.MessageReceipt{}, + // types.SignedMessage{}, + // types.TxMeta{}, + // types.UnsignedMessage{}, + // types.Actor{}, + // types.BeaconEntry{}, + // types.BlockHeader{}, + // types.Ticket{}, + // types.ElectionProof{}, + // types.BlockMsg{}, + //); err != nil { + // panic(err) + //} + + if err := gen.WriteTupleEncodersToFile("./pkg/discovery/cbor_gen.go", "discovery", + discovery.HelloMessage{}, + discovery.LatencyMessage{}, + ); err != nil { + panic(err) + } + + //if err := gen.WriteTupleEncodersToFile("./pkg/crypto/cbor_gen.go", "crypto", + // crypto.KeyInfo{}, + //); err != nil { + // panic(err) + //} + + if err := gen.WriteTupleEncodersToFile("./pkg/vm/dispatch/cbor_gen.go", "dispatch", + dispatch.SimpleParams{}, + ); err != nil { + panic(err) + } + + if err := gen.WriteTupleEncodersToFile("./pkg/state/tree/cbor_gen.go", "tree", + tree.StateRoot{}, + ); err != nil { + panic(err) + } + + if err := gen.WriteTupleEncodersToFile("./pkg/chainsync/exchange/cbor_gen.go", "exchange", + exchange.Request{}, + exchange.Response{}, + exchange.CompactedMessages{}, + exchange.BSTipSet{}, + ); err != nil { + panic(err) + } + + if err := gen.WriteTupleEncodersToFile("./pkg/chain/cbor_gen.go", "chain", + chain.TSState{}, + ); err != nil { + panic(err) + } +} diff --git a/tools/gengen/README.md b/tools/gengen/README.md index 307d8320b5..bc31acedc9 100644 --- a/tools/gengen/README.md +++ b/tools/gengen/README.md @@ -11,7 +11,7 @@ go-filecon $ ./tools/gengen/gengen --keypath fixtures --out-car fixtures/genesis ### Building -The gengen tool expects that you can already build `go-filecoin`. Please refer +The gengen tool expects that you can already build `venus`. Please refer to the README in the root of this project for details. ``` diff --git a/tools/gengen/gencfg/main.go b/tools/gengen/gencfg/main.go index e301a91138..e6f43b8f94 100644 --- a/tools/gengen/gencfg/main.go +++ b/tools/gengen/gencfg/main.go @@ -20,6 +20,6 @@ func main() { panic(err) } - cid := commcid.DataCommitmentV1ToCID(bytes) + cid, _ := commcid.DataCommitmentV1ToCID(bytes) fmt.Printf("%s\n", cid) } diff --git a/tools/gengen/main.go b/tools/gengen/main.go index 65411c3ad7..f38ce37eca 100644 --- a/tools/gengen/main.go +++ b/tools/gengen/main.go @@ -1,14 +1,16 @@ package main import ( + "encoding/hex" "encoding/json" flg "flag" "fmt" "os" - "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/tools/gengen/util" + "github.com/filecoin-project/venus/pkg/crypto" + _ "github.com/filecoin-project/venus/pkg/crypto/bls" // enable bls signatures + _ "github.com/filecoin-project/venus/pkg/crypto/secp" // enable secp signatures + gengen "github.com/filecoin-project/venus/tools/gengen/util" ) func writeKey(ki *crypto.KeyInfo, name string, jsonout bool) error { @@ -17,8 +19,8 @@ func writeKey(ki *crypto.KeyInfo, name string, jsonout bool) error { return err } if !jsonout { - fmt.Fprintf(os.Stderr, "key: %s - %s\n", name, addr) // nolint: errcheck - fmt.Fprintf(os.Stderr, "run 'go-filecoin wallet import ./%s.key' to add private key for %[1]s to your wallet\n", name) // nolint: errcheck + fmt.Fprintf(os.Stderr, "key: %s - %s\n", name, addr) // nolint: errcheck + fmt.Fprintf(os.Stderr, "run 'venus wallet import ./%s.key' to add private key for %[1]s to your wallet\n", name) // nolint: errcheck } fi, err := os.Create(name + ".key") if err != nil { @@ -26,10 +28,10 @@ func writeKey(ki *crypto.KeyInfo, name string, jsonout bool) error { } defer fi.Close() // nolint: errcheck - var wir commands.WalletSerializeResult - wir.KeyInfo = append(wir.KeyInfo, ki) + //var wir cmd.WalletSerializeResult + //wir.KeyInfo = append(wir.KeyInfo, ki) - return json.NewEncoder(fi).Encode(wir) + return json.NewEncoder(hex.NewEncoder(fi)).Encode(ki) } /* gengen takes as input a json encoded 'Genesis Config' @@ -56,9 +58,9 @@ $ cat setup.json } $ cat setup.json | gengen > genesis.car -The outputted file can be used by go-filecoin during init to +The outputted file can be used by venus during init to set the initial genesis block: -$ go-filecoin init --genesisfile=genesis.car +$ venus daemon --genesisfile=genesis.car */ var ( diff --git a/tools/gengen/util/generator.go b/tools/gengen/util/generator.go index e56e4e2981..ee1bf5128b 100644 --- a/tools/gengen/util/generator.go +++ b/tools/gengen/util/generator.go @@ -1,97 +1,124 @@ package gengen import ( + "bytes" "context" "fmt" "io" mrand "math/rand" - address "github.com/filecoin-project/go-address" - amt "github.com/filecoin-project/go-amt-ipld/v2" - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/filecoin-project/specs-actors/actors/abi/big" - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/account" - "github.com/filecoin-project/specs-actors/actors/builtin/cron" - init_ "github.com/filecoin-project/specs-actors/actors/builtin/init" - "github.com/filecoin-project/specs-actors/actors/builtin/market" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - "github.com/filecoin-project/specs-actors/actors/builtin/power" - "github.com/filecoin-project/specs-actors/actors/builtin/reward" - "github.com/filecoin-project/specs-actors/actors/builtin/system" - "github.com/filecoin-project/specs-actors/actors/builtin/verifreg" - "github.com/filecoin-project/specs-actors/actors/util/adt" + "github.com/filecoin-project/venus/pkg/fork" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper/impl" + "github.com/filecoin-project/venus/pkg/vm/vmcontext" + + "github.com/filecoin-project/go-address" + ds "github.com/ipfs/go-datastore" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + "github.com/filecoin-project/specs-actors/v2/actors/builtin" + "github.com/filecoin-project/specs-actors/v2/actors/builtin/account" + "github.com/filecoin-project/specs-actors/v2/actors/builtin/cron" + init_ "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" + "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" + "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + "github.com/filecoin-project/specs-actors/v2/actors/builtin/power" + "github.com/filecoin-project/specs-actors/v2/actors/builtin/reward" + "github.com/filecoin-project/specs-actors/v2/actors/builtin/system" + "github.com/filecoin-project/specs-actors/v2/actors/builtin/verifreg" + "github.com/filecoin-project/specs-actors/v2/actors/util/adt" cid "github.com/ipfs/go-cid" - blockstore "github.com/ipfs/go-ipfs-blockstore" cbor "github.com/ipfs/go-ipld-cbor" "github.com/libp2p/go-libp2p-core/peer" mh "github.com/multiformats/go-multihash" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/cborutil" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/drand" - e "github.com/filecoin-project/go-filecoin/internal/pkg/enccid" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/genesis" - "github.com/filecoin-project/go-filecoin/internal/pkg/proofs" - gfcstate "github.com/filecoin-project/go-filecoin/internal/pkg/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/actor" - "github.com/filecoin-project/go-filecoin/internal/pkg/vm/state" - "github.com/filecoin-project/go-filecoin/internal/pkg/vmsupport" + xerrors "github.com/pkg/errors" + + "github.com/filecoin-project/venus/pkg/chain" + "github.com/filecoin-project/venus/pkg/config" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/genesis" + gfcstate "github.com/filecoin-project/venus/pkg/state" + "github.com/filecoin-project/venus/pkg/state/tree" + blockstore "github.com/filecoin-project/venus/pkg/util/blockstoreutil" + "github.com/filecoin-project/venus/pkg/vm" + "github.com/filecoin-project/venus/pkg/vm/gas" + "github.com/filecoin-project/venus/pkg/vmsupport" + types "github.com/filecoin-project/venus/venus-shared/chain" ) -type cstore struct { - ctx context.Context - cbor.IpldStore -} - -func (s *cstore) Context() context.Context { - return s.ctx -} +const InitialBaseFee = 100e6 var ( - rewardActorInitialBalance = types.NewAttoFILFromFIL(1.4e9) + rewardActorInitialBalance = types.FromFil(1.4e9) ) type GenesisGenerator struct { // actor state - stateTree state.Tree - store vm.Storage + stateTree tree.Tree + store blockstore.Blockstore cst cbor.IpldStore vm genesis.VM - + vmOption vm.VmOption keys []*crypto.KeyInfo // Keys for pre-alloc accounts vrkey *crypto.KeyInfo // Key for verified registry root pnrg *mrand.Rand - chainRand crypto.ChainRandomnessSource cfg *GenesisCfg } func NewGenesisGenerator(bs blockstore.Blockstore) *GenesisGenerator { - cst := cborutil.NewIpldStore(bs) - g := GenesisGenerator{} - g.stateTree = state.NewState(cst) - g.store = vm.NewStorage(bs) - g.vm = vm.NewVM(g.stateTree, &g.store, vmsupport.NewSyscalls(&vmsupport.NilFaultChecker{}, &proofs.FakeVerifier{})).(genesis.VM) - g.cst = cst - - g.chainRand = crypto.ChainRandomnessSource{Sampler: &crypto.GenesisSampler{VRFProof: genesis.Ticket.VRFProof}} - return &g + csc := func(context.Context, abi.ChainEpoch, tree.Tree) (abi.TokenAmount, error) { + return big.Zero(), nil + } + cst := cbor.NewCborStore(bs) + syscallImpl := vmsupport.NewSyscalls(&vmsupport.NilFaultChecker{}, &impl.FakeVerifier{}) + chainRand := chain.NewGenesisRandomnessSource(genesis.Ticket.VRFProof) + chainDs := ds.NewMapDatastore() //just mock one + //chainstore + chainStore := chain.NewStore(chainDs, bs, cid.Undef, chain.NewMockCirculatingSupplyCalculator()) //load genesis from car + chainFork, err := fork.NewChainFork(context.TODO(), chainStore, cst, bs, config.NewDefaultConfig().NetworkParams) + if err != nil { + panic(xerrors.Errorf("create chain fork error %v", err)) + } + + vmOption := vm.VmOption{ + CircSupplyCalculator: csc, + NtwkVersionGetter: func(ctx context.Context, epoch abi.ChainEpoch) network.Version { + return network.Version6 + }, + LookbackStateGetter: vmcontext.LookbackStateGetterForTipset(context.TODO(), chainStore, chainFork, nil), + Rnd: chainRand, + BaseFee: abi.NewTokenAmount(InitialBaseFee), + Epoch: 0, + GasPriceSchedule: gas.NewPricesSchedule(config.DefaultForkUpgradeParam), + Bsstore: bs, + PRoot: cid.Undef, + SysCallsImpl: syscallImpl, + Fork: chainFork, + } + vm, err := vm.NewVM(context.Background(), vmOption) + if err != nil { + panic(xerrors.Errorf("create state error, should never come here")) + } + + return &GenesisGenerator{ + stateTree: vm.StateTree(), + store: bs, + cst: cst, + vm: vm, + vmOption: vmOption, + } } func (g *GenesisGenerator) Init(cfg *GenesisCfg) error { g.pnrg = mrand.New(mrand.NewSource(cfg.Seed)) - keys, err := genKeys(cfg.KeysToGen, g.pnrg) if err != nil { return err } keys = append(keys, cfg.ImportKeys...) g.keys = keys - vrKey, err := crypto.NewSecpKeyFromSeed(g.pnrg) if err != nil { return err @@ -99,43 +126,66 @@ func (g *GenesisGenerator) Init(cfg *GenesisCfg) error { g.vrkey = &vrKey // Monkey patch all proof types into the specs-actors package variable - newSupportedTypes := make(map[abi.RegisteredProof]struct{}) + newSupportedTypes := make(map[abi.RegisteredSealProof]struct{}) for _, mCfg := range cfg.Miners { newSupportedTypes[mCfg.SealProofType] = struct{}{} } // Switch reference rather than mutate in place to avoid concurrent map mutation (in tests). - miner.SupportedProofTypes = newSupportedTypes + miner.PreCommitSealProofTypesV0 = newSupportedTypes g.cfg = cfg return nil } -func (g *GenesisGenerator) flush(ctx context.Context) (cid.Cid, error) { - err := g.store.Flush() +func (g *GenesisGenerator) createSingletonActor(ctx context.Context, addr address.Address, codeCid cid.Cid, balance abi.TokenAmount, stateFn func() (interface{}, error)) (*types.Actor, error) { + if addr.Protocol() != address.ID { + return nil, fmt.Errorf("non-singleton actor would be missing from Init actor's address table") + } + state, err := stateFn() if err != nil { - return cid.Undef, err + return nil, fmt.Errorf("failed to create state") + } + headCid, err := g.cst.Put(context.Background(), state) + if err != nil { + return nil, fmt.Errorf("failed to store state") + } + + a := types.Actor{ + Code: codeCid, + Nonce: 0, + Balance: balance, + Head: headCid, + } + if err := g.stateTree.SetActor(ctx, addr, &a); err != nil { + return nil, fmt.Errorf("failed to create actor during genesis block creation") } - return g.stateTree.Commit(ctx) + + return &a, nil } -func (g *GenesisGenerator) createSingletonActor(ctx context.Context, addr address.Address, codeCid cid.Cid, balance abi.TokenAmount, stateFn func() (interface{}, error)) (*actor.Actor, error) { +func (g *GenesisGenerator) updateSingletonActor(ctx context.Context, addr address.Address, stateFn func(actor2 *types.Actor) (interface{}, error)) (*types.Actor, error) { if addr.Protocol() != address.ID { return nil, fmt.Errorf("non-singleton actor would be missing from Init actor's address table") } - state, err := stateFn() + oldActor, found, err := g.stateTree.GetActor(ctx, addr) + if !found || err != nil { + return nil, fmt.Errorf("failed to create state") + } + + state, err := stateFn(oldActor) if err != nil { return nil, fmt.Errorf("failed to create state") } - headCid, _, err := g.store.Put(context.Background(), state) + headCid, err := g.cst.Put(context.Background(), state) if err != nil { return nil, fmt.Errorf("failed to store state") } - a := actor.Actor{ - Code: e.NewCid(codeCid), - CallSeqNum: 0, - Balance: balance, - Head: e.NewCid(headCid), + a := types.Actor{ + Code: oldActor.Code, + Nonce: 0, + Balance: oldActor.Balance, + Head: headCid, } if err := g.stateTree.SetActor(ctx, addr, &a); err != nil { return nil, fmt.Errorf("failed to create actor during genesis block creation") @@ -145,11 +195,11 @@ func (g *GenesisGenerator) createSingletonActor(ctx context.Context, addr addres } func (g *GenesisGenerator) setupBuiltInActors(ctx context.Context) error { - emptyMap, err := adt.MakeEmptyMap(g.vm.ContextStore()).Root() + emptyMap, err := adt.MakeEmptyMap(adt.WrapStore(ctx, g.cst)).Root() if err != nil { return err } - emptyArray, err := adt.MakeEmptyArray(g.vm.ContextStore()).Root() + emptyArray, err := adt.MakeEmptyArray(adt.WrapStore(ctx, g.cst)).Root() if err != nil { return err } @@ -169,7 +219,7 @@ func (g *GenesisGenerator) setupBuiltInActors(ctx context.Context) error { } _, err = g.createSingletonActor(ctx, builtin.InitActorAddr, builtin.InitActorCodeID, big.Zero(), func() (interface{}, error) { - emptyMap, err := adt.MakeEmptyMap(g.vm.ContextStore()).Root() + emptyMap, err := adt.MakeEmptyMap(adt.WrapStore(ctx, g.cst)).Root() if err != nil { return nil, err } @@ -180,25 +230,35 @@ func (g *GenesisGenerator) setupBuiltInActors(ctx context.Context) error { } _, err = g.createSingletonActor(ctx, builtin.RewardActorAddr, builtin.RewardActorCodeID, rewardActorInitialBalance, func() (interface{}, error) { - return reward.ConstructState(), nil + return reward.ConstructState(big.Zero()), nil }) if err != nil { return err } _, err = g.createSingletonActor(ctx, builtin.StoragePowerActorAddr, builtin.StoragePowerActorCodeID, big.Zero(), func() (interface{}, error) { - emptyMap, err := adt.MakeEmptyMap(g.vm.ContextStore()).Root() + emptyMap, err := adt.MakeEmptyMap(adt.WrapStore(ctx, g.cst)).Root() if err != nil { return nil, err } - return power.ConstructState(emptyMap), nil + + multiMap, err := adt.AsMultimap(adt.WrapStore(ctx, g.cst), emptyMap) + if err != nil { + return nil, err + } + + emptyMultiMap, err := multiMap.Root() + if err != nil { + return nil, err + } + return power.ConstructState(emptyMap, emptyMultiMap), nil }) if err != nil { return err } _, err = g.createSingletonActor(ctx, builtin.StorageMarketActorAddr, builtin.StorageMarketActorCodeID, big.Zero(), func() (interface{}, error) { - emptyMSet, err := market.MakeEmptySetMultimap(g.vm.ContextStore()).Root() + emptyMSet, err := market.MakeEmptySetMultimap(adt.WrapStore(ctx, g.cst)).Root() if err != nil { return nil, err } @@ -244,12 +304,12 @@ func (g *GenesisGenerator) setupPrealloc() error { return err } - value, ok := types.NewAttoFILFromFILString(v) - if !ok { + value, err := types.ParseFIL(v) + if err != nil { return fmt.Errorf("failed to parse FIL value '%s'", v) } - _, err = g.vm.ApplyGenesisMessage(builtin.RewardActorAddr, addr, builtin.MethodSend, value, nil, &g.chainRand) + _, err = g.vm.ApplyGenesisMessage(builtin.RewardActorAddr, addr, builtin.MethodSend, abi.TokenAmount{Int: value.Int}, nil) if err != nil { return err } @@ -258,35 +318,36 @@ func (g *GenesisGenerator) setupPrealloc() error { } func (g *GenesisGenerator) genBlock(ctx context.Context) (cid.Cid, error) { - stateRoot, err := g.flush(ctx) + stateRoot, err := g.vm.Flush() if err != nil { return cid.Undef, err } // define empty cid and ensure empty components exist in blockstore - emptyAMTCid, err := amt.FromArray(ctx, g.cst, nil) + emptyAMT := adt.MakeEmptyArray(adt.WrapStore(ctx, g.cst)) + emptyAMTCid, err := emptyAMT.Root() if err != nil { return cid.Undef, err } - meta := types.TxMeta{SecpRoot: e.NewCid(emptyAMTCid), BLSRoot: e.NewCid(emptyAMTCid)} + meta := &types.MessageRoot{SecpkRoot: emptyAMTCid, BlsRoot: emptyAMTCid} metaCid, err := g.cst.Put(ctx, meta) if err != nil { return cid.Undef, err } - geneblk := &block.Block{ - Miner: builtin.SystemActorAddr, - Ticket: genesis.Ticket, - BeaconEntries: []*drand.Entry{{Data: []byte{0xca, 0xfe, 0xfa, 0xce}}}, - PoStProofs: []block.PoStProof{}, - Parents: block.NewTipSetKey(), - ParentWeight: big.Zero(), - Height: 0, - StateRoot: e.NewCid(stateRoot), - MessageReceipts: e.NewCid(emptyAMTCid), - Messages: e.NewCid(metaCid), - Timestamp: g.cfg.Time, - ForkSignaling: 0, + geneblk := &types.BlockHeader{ + Miner: builtin.SystemActorAddr, + Ticket: &genesis.Ticket, + BeaconEntries: []types.BeaconEntry{{Data: []byte{0xca, 0xfe, 0xfa, 0xce}}}, + ElectionProof: new(types.ElectionProof), + Parents: types.NewTipSetKey().Cids(), + ParentWeight: big.Zero(), + Height: 0, + ParentStateRoot: stateRoot, + ParentMessageReceipts: emptyAMTCid, + Messages: metaCid, + Timestamp: g.cfg.Time, + ForkSignaling: 0, } return g.cst.Put(ctx, geneblk) @@ -322,18 +383,12 @@ func (g *GenesisGenerator) setupMiners(ctx context.Context) ([]*RenderedMinerInf var sectorsToCommit []*sectorCommitInfo networkQAPower := big.Zero() - // Estimate the first epoch's block reward as a linear release over 6 years. - // The actual release will be initially faster, with exponential decay. - // Replace this code with calls to the reward actor when it's fixed. - // See https://github.com/filecoin-project/specs-actors/issues/317 - sixYearEpochs := 6 * 365 * 86400 / builtin.EpochDurationSeconds - initialBlockReward := big.Div(rewardActorInitialBalance, big.NewInt(int64(sixYearEpochs))) - // First iterate all miners and sectors to compute sector info, and accumulate the total network power that // will be present (which determines the necessary pledge amounts). // One reason that this state can't be computed purely by applying messages is that we wish to compute the // initial pledge for the sectors based on the total genesis power, regardless of the order in which // sectors are inserted here. + totalRawPow, totalQaPow := big.NewInt(0), big.NewInt(0) for _, m := range g.cfg.Miners { // Create miner actor ownerAddr, actorAddr, err := g.createMiner(ctx, m) @@ -341,16 +396,11 @@ func (g *GenesisGenerator) setupMiners(ctx context.Context) ([]*RenderedMinerInf return nil, err } - mState, err := g.loadMinerState(ctx, actorAddr) - if err != nil { - return nil, err - } - // Add configured deals to the market actor with miner as provider and worker as client dealIDs := []abi.DealID{} if len(m.CommittedSectors) > 0 { ownerKey := g.keys[m.Owner] - dealIDs, err = g.publishDeals(actorAddr, ownerAddr, ownerKey, m.CommittedSectors) + dealIDs, err = g.publishDeals(actorAddr, ownerAddr, ownerKey, m.CommittedSectors, m.MarketBalance) if err != nil { return nil, err } @@ -360,10 +410,9 @@ func (g *GenesisGenerator) setupMiners(ctx context.Context) ([]*RenderedMinerInf minerRawPower := big.Zero() for i, comm := range m.CommittedSectors { // Adjust sector expiration up to the epoch before the subsequent proving period starts. - periodOffset := mState.ProvingPeriodStart % miner.WPoStProvingPeriod - expiryOffset := abi.ChainEpoch(comm.DealCfg.EndEpoch+1) % miner.WPoStProvingPeriod - sectorExpiration := abi.ChainEpoch(comm.DealCfg.EndEpoch) + miner.WPoStProvingPeriod + (periodOffset - expiryOffset) - + //todo pick a better sector exp + maxPeriods := miner0.MaxSectorExpirationExtension / miner0.WPoStProvingPeriod + sectorExpiration := (maxPeriods-1)*miner0.WPoStProvingPeriod - 1 // Acquire deal weight value // call deal verify market actor to do calculation dealWeight, verifiedWeight, err := g.getDealWeight(dealIDs[i], sectorExpiration, actorAddr) @@ -400,45 +449,117 @@ func (g *GenesisGenerator) setupMiners(ctx context.Context) ([]*RenderedMinerInf QAPower: minerQAPower, } minfos = append(minfos, minfo) + totalRawPow = big.Add(totalRawPow, minerRawPower) + totalQaPow = big.Add(totalQaPow, minerQAPower) + } + + _, err := g.updateSingletonActor(ctx, builtin.StoragePowerActorAddr, func(actor *types.Actor) (interface{}, error) { + var mState power.State + err := g.cst.Get(ctx, actor.Head, &mState) + if err != nil { + return nil, err + } + mState.TotalQualityAdjPower = totalQaPow + mState.TotalRawBytePower = totalRawPow + + mState.ThisEpochQualityAdjPower = totalQaPow + mState.ThisEpochRawBytePower = totalRawPow + return &mState, nil + }) + if err != nil { + return nil, err + } + + _, err = g.updateSingletonActor(ctx, builtin.RewardActorAddr, func(actor *types.Actor) (interface{}, error) { + return reward.ConstructState(networkQAPower), nil + }) + if err != nil { + return nil, err } // Now commit the sectors and power updates. for _, sector := range sectorsToCommit { - // Update power, setting state directly - sectorPledge, err := g.updatePower(ctx, sector.miner, sector.rawPower, sector.qaPower, networkQAPower, initialBlockReward) + params := &miner.SectorPreCommitInfo{ + SealProof: sector.comm.ProofType, + SectorNumber: sector.comm.SectorNum, + SealedCID: sector.comm.CommR, + SealRandEpoch: -1, + DealIDs: sector.dealIDs, + Expiration: sector.expiration, // TODO: Allow setting externally! + } + + dweight, err := g.dealWeight(ctx, sector.miner, params.DealIDs, 0, sector.expiration) if err != nil { - return nil, err + return nil, xerrors.Errorf("getting deal weight: %v", err) } - // Put sector info in miner sector set. - err = g.putSector(ctx, sector, sectorPledge) + size, err := sector.comm.ProofType.SectorSize() if err != nil { - return nil, err + return nil, xerrors.Errorf("failed to get sector size: %v", err) } + sectorWeight := miner.QAPowerForWeight(size, sector.expiration, dweight.DealWeight, dweight.VerifiedDealWeight) + + // we've added fake power for this sector above, remove it now + _, err = g.updateSingletonActor(ctx, builtin.StoragePowerActorAddr, func(actor *types.Actor) (interface{}, error) { + var mState power.State + err = g.cst.Get(ctx, actor.Head, &mState) + if err != nil { + return nil, err + } + + mState.TotalQualityAdjPower = big.Sub(mState.TotalQualityAdjPower, sectorWeight) //nolint:scopelint + size, _ := sector.comm.ProofType.SectorSize() + if err != nil { + return nil, err + } + mState.TotalRawBytePower = big.Sub(mState.TotalRawBytePower, big.NewIntUnsigned(uint64(size))) + return &mState, nil + }) - // Transfer the pledge amount from the owner to the miner actor - _, err = g.vm.ApplyGenesisMessage(sector.owner, sector.miner, builtin.MethodSend, sectorPledge, nil, &g.chainRand) if err != nil { - return nil, err + return nil, xerrors.Errorf("removing fake power: %v", err) } - } - return minfos, nil -} -func (g *GenesisGenerator) loadMinerState(ctx context.Context, actorAddr address.Address) (*miner.State, error) { - mAct, found, err := g.stateTree.GetActor(ctx, actorAddr) - if err != nil { - return nil, err - } - if !found { - return nil, fmt.Errorf("no such miner actor %s", actorAddr) - } - var mState miner.State - _, err = g.store.Get(ctx, mAct.Head.Cid, &mState) - if err != nil { - return nil, err + epochReward, err := g.currentEpochBlockReward(ctx, sector.miner) + if err != nil { + return nil, xerrors.Errorf("getting current epoch reward: %v", err) + } + + tpow, err := g.currentTotalPower(ctx, sector.miner) + if err != nil { + return nil, xerrors.Errorf("getting current total power: %v", err) + } + + pcd := miner.PreCommitDepositForPower(epochReward.ThisEpochRewardSmoothed, tpow.QualityAdjPowerSmoothed, sectorWeight) + pledge := miner.InitialPledgeForPower( + sectorWeight, + epochReward.ThisEpochBaselinePower, + epochReward.ThisEpochRewardSmoothed, + tpow.QualityAdjPowerSmoothed, + g.circSupply(ctx, sector.miner), + ) + + pledge = big.Add(pcd, pledge) + + buf := new(bytes.Buffer) + _ = params.MarshalCBOR(buf) + _, err = g.doExecValue(ctx, sector.miner, sector.owner, pledge, builtin.MethodsMiner.PreCommitSector, buf.Bytes()) + if err != nil { + return nil, xerrors.Errorf("failed to confirm presealed sectors: %v", err) + } + + // Commit one-by-one, otherwise pledge math tends to explode + confirmParams := &builtin.ConfirmSectorProofsParams{ + Sectors: []abi.SectorNumber{sector.comm.SectorNum}, + } + buf = new(bytes.Buffer) + _ = confirmParams.MarshalCBOR(buf) + _, err = g.doExecValue(ctx, sector.miner, builtin.StoragePowerActorAddr, big.Zero(), builtin.MethodsMiner.ConfirmSectorProofsValid, buf.Bytes()) + if err != nil { + return nil, xerrors.Errorf("failed to confirm presealed sectors: %v", err) + } } - return &mState, nil + return minfos, nil } func (g *GenesisGenerator) createMiner(ctx context.Context, m *CreateStorageMinerConfig) (address.Address, address.Address, error) { @@ -448,7 +569,7 @@ func (g *GenesisGenerator) createMiner(ctx context.Context, m *CreateStorageMine } // Resolve worker account's ID address. - stateRoot, err := g.flush(ctx) + stateRoot, err := g.vm.Flush() if err != nil { return address.Undef, address.Undef, err } @@ -477,27 +598,37 @@ func (g *GenesisGenerator) createMiner(ctx context.Context, m *CreateStorageMine out, err := g.vm.ApplyGenesisMessage(ownerAddr, builtin.StoragePowerActorAddr, builtin.MethodsPower.CreateMiner, big.Zero(), &power.CreateMinerParams{ Owner: ownerAddr, Worker: ownerAddr, - Peer: pid, + Peer: abi.PeerID(pid), SealProofType: m.SealProofType, - }, &g.chainRand) + }) if err != nil { return address.Undef, address.Undef, err } + if out.Receipt.ExitCode != 0 { + return address.Undef, address.Undef, xerrors.Errorf("execute genesis msg error") + } // get miner ID address - ret := out.(*power.CreateMinerReturn) - return ownerAddr, ret.IDAddress, nil + createMinerReturn := power.CreateMinerReturn{} + err = createMinerReturn.UnmarshalCBOR(bytes.NewReader(out.Receipt.Return)) + if err != nil { + return address.Undef, address.Undef, err + } + return ownerAddr, createMinerReturn.IDAddress, nil } -func (g *GenesisGenerator) publishDeals(actorAddr, clientAddr address.Address, clientkey *crypto.KeyInfo, comms []*CommitConfig) ([]abi.DealID, error) { +func (g *GenesisGenerator) publishDeals(actorAddr, clientAddr address.Address, clientkey *crypto.KeyInfo, comms []*CommitConfig, marketBalance abi.TokenAmount) ([]abi.DealID, error) { // Add 0 balance to escrow and locked table - _, err := g.vm.ApplyGenesisMessage(clientAddr, builtin.StorageMarketActorAddr, builtin.MethodsMarket.AddBalance, big.Zero(), &clientAddr, &g.chainRand) - if err != nil { - return nil, err - } - _, err = g.vm.ApplyGenesisMessage(clientAddr, builtin.StorageMarketActorAddr, builtin.MethodsMarket.AddBalance, big.Zero(), &actorAddr, &g.chainRand) - if err != nil { - return nil, err + if marketBalance.GreaterThan(big.Zero()) { + _, err := g.vm.ApplyGenesisMessage(clientAddr, builtin.StorageMarketActorAddr, builtin.MethodsMarket.AddBalance, marketBalance, &clientAddr) + if err != nil { + return nil, err + } + + _, err = g.vm.ApplyGenesisMessage(clientAddr, builtin.StorageMarketActorAddr, builtin.MethodsMarket.AddBalance, marketBalance, &actorAddr) + if err != nil { + return nil, err + } } // Add all deals to chain in one message @@ -515,142 +646,143 @@ func (g *GenesisGenerator) publishDeals(actorAddr, clientAddr address.Address, c ProviderCollateral: big.Zero(), // collateral should actually be good ClientCollateral: big.Zero(), } - proposalBytes, err := encoding.Encode(&proposal) + buf := new(bytes.Buffer) + err := proposal.MarshalCBOR(buf) if err != nil { return nil, err } - sig, err := crypto.Sign(proposalBytes, clientkey.PrivateKey, crypto.SigTypeBLS) + var sig *crypto.Signature + err = clientkey.UsePrivateKey(func(privateKey []byte) error { + sig, err = crypto.Sign(buf.Bytes(), privateKey, crypto.SigTypeBLS) + return err + }) if err != nil { return nil, err } params.Deals = append(params.Deals, market.ClientDealProposal{ Proposal: proposal, - ClientSignature: sig, + ClientSignature: *sig, }) } // apply deal builtin.MethodsMarket.PublishStorageDeals - out, err := g.vm.ApplyGenesisMessage(clientAddr, builtin.StorageMarketActorAddr, builtin.MethodsMarket.PublishStorageDeals, big.Zero(), params, &g.chainRand) + out, err := g.vm.ApplyGenesisMessage(clientAddr, builtin.StorageMarketActorAddr, builtin.MethodsMarket.PublishStorageDeals, big.Zero(), params) if err != nil { return nil, err } - - ret := out.(*market.PublishStorageDealsReturn) - return ret.IDs, nil + if out.Receipt.ExitCode != 0 { + return nil, xerrors.Errorf("execute genesis msg error") + } + publishStoreageDealsReturn := market.PublishStorageDealsReturn{} + err = publishStoreageDealsReturn.UnmarshalCBOR(bytes.NewReader(out.Receipt.Return)) + if err != nil { + return nil, err + } + return publishStoreageDealsReturn.IDs, nil } func (g *GenesisGenerator) getDealWeight(dealID abi.DealID, sectorExpiry abi.ChainEpoch, minerIDAddr address.Address) (dealWeight, verifiedWeight abi.DealWeight, err error) { - weightParams := &market.VerifyDealsOnSectorProveCommitParams{ + weightParams := &market.VerifyDealsForActivationParams{ DealIDs: []abi.DealID{dealID}, SectorExpiry: sectorExpiry, } - weightOut, err := g.vm.ApplyGenesisMessage(minerIDAddr, builtin.StorageMarketActorAddr, builtin.MethodsMarket.VerifyDealsOnSectorProveCommit, big.Zero(), weightParams, &g.chainRand) + weightOut, err := g.vm.ApplyGenesisMessage(minerIDAddr, builtin.StorageMarketActorAddr, builtin.MethodsMarket.VerifyDealsForActivation, big.Zero(), weightParams) if err != nil { return big.Zero(), big.Zero(), err } - ret := weightOut.(*market.VerifyDealsOnSectorProveCommitReturn) - return ret.DealWeight, ret.VerifiedDealWeight, nil -} - -func (g *GenesisGenerator) updatePower(ctx context.Context, miner address.Address, rawPower, qaPower, networkPower abi.StoragePower, epochBlockReward big.Int) (abi.TokenAmount, error) { - // NOTE: it would be much better to use OnSectorProveCommit, which would then calculate the initial pledge amount. - powAct, found, err := g.stateTree.GetActor(ctx, builtin.StoragePowerActorAddr) - if err != nil { - return big.Zero(), err + if weightOut.Receipt.ExitCode != 0 { + return big.Zero(), big.Zero(), xerrors.Errorf("execute genesis msg error") } - if !found { - return big.Zero(), fmt.Errorf("state tree could not find power actor") - } - var powerState power.State - _, err = g.store.Get(ctx, powAct.Head.Cid, &powerState) + verifyDealsReturn := market.VerifyDealsForActivationReturn{} + err = verifyDealsReturn.UnmarshalCBOR(bytes.NewReader(weightOut.Receipt.Return)) if err != nil { - return big.Zero(), err + return big.Zero(), big.Zero(), err + } + return verifyDealsReturn.DealWeight, verifyDealsReturn.VerifiedDealWeight, nil +} + +func (g *GenesisGenerator) doExecValue(ctx context.Context, to, from address.Address, value big.Int, method abi.MethodNum, params []byte) ([]byte, error) { + _, found, err := g.stateTree.GetActor(ctx, from) + if !found || err != nil { + return nil, xerrors.Errorf("doExec failed to get from actor (%s): %v", from, err) } - err = powerState.AddToClaim(&cstore{ctx, g.cst}, miner, rawPower, qaPower) + ret, err := g.vm.ApplyGenesisMessage(from, to, method, value, params) if err != nil { - return big.Zero(), err + return nil, xerrors.Errorf("doExec apply message failed: %v", err) } - // Adjusting the total power here is technically wrong and unnecessary (it happens in AddToClaim), - // but needed due to gain non-zero power in small networks when no miner meets the consensus minimum. - // At present, both impls ignore the consensus minimum and rely on this incorrect value. - // See https://github.com/filecoin-project/specs-actors/issues/266 - // https://github.com/filecoin-project/go-filecoin/issues/3958 - powerState.TotalRawBytePower = big.Add(powerState.TotalRawBytePower, rawPower) - powerState.TotalQualityAdjPower = big.Add(powerState.TotalQualityAdjPower, qaPower) + if ret.Receipt.ExitCode != 0 { + return nil, xerrors.Errorf("execute genesis msg error") + } + return ret.Receipt.Return, nil +} - // Persist new state. - newPowCid, _, err := g.store.Put(ctx, &powerState) +func (g *GenesisGenerator) currentTotalPower(ctx context.Context, maddr address.Address) (*power.CurrentTotalPowerReturn, error) { + pwret, err := g.doExecValue(ctx, builtin.StoragePowerActorAddr, maddr, big.Zero(), builtin.MethodsPower.CurrentTotalPower, nil) if err != nil { - return big.Zero(), err + return nil, err } - powAct.Head = e.NewCid(newPowCid) - err = g.stateTree.SetActor(ctx, builtin.StoragePowerActorAddr, powAct) + currentTotalReturn := &power.CurrentTotalPowerReturn{} + err = currentTotalReturn.UnmarshalCBOR(bytes.NewReader(pwret)) if err != nil { - return big.Zero(), err + return nil, err } - - initialPledge := big.Div(big.Mul(qaPower, epochBlockReward), networkPower) - return initialPledge, nil + return currentTotalReturn, nil } -func (g *GenesisGenerator) putSector(ctx context.Context, sector *sectorCommitInfo, pledge abi.TokenAmount) error { - mAct, found, err := g.stateTree.GetActor(ctx, sector.miner) - if err != nil { - return err +func (g *GenesisGenerator) dealWeight(ctx context.Context, maddr address.Address, dealIDs []abi.DealID, sectorStart, sectorExpiry abi.ChainEpoch) (market.VerifyDealsForActivationReturn, error) { + params := &market.VerifyDealsForActivationParams{ + DealIDs: dealIDs, + SectorStart: sectorStart, + SectorExpiry: sectorExpiry, } - if !found { - return fmt.Errorf("mState tree could not find miner actor %s", sector.miner) + buf := new(bytes.Buffer) + err := params.MarshalCBOR(buf) + if err != nil { + return market.VerifyDealsForActivationReturn{}, err } - var mState miner.State - _, err = g.store.Get(ctx, mAct.Head.Cid, &mState) + ret, err := g.doExecValue(ctx, + builtin.StorageMarketActorAddr, + maddr, + abi.NewTokenAmount(0), + builtin.MethodsMarket.VerifyDealsForActivation, + buf.Bytes(), + ) if err != nil { - return err + return market.VerifyDealsForActivationReturn{}, err } - newSectorInfo := &miner.SectorOnChainInfo{ - Info: miner.SectorPreCommitInfo{ - RegisteredProof: sector.comm.ProofType, - SectorNumber: sector.comm.SectorNum, - SealedCID: sector.comm.CommR, - SealRandEpoch: 0, - DealIDs: sector.dealIDs, - Expiration: sector.expiration, - }, - ActivationEpoch: 0, - DealWeight: sector.dealWeight, - VerifiedDealWeight: sector.verifiedWeight, - } - err = mState.PutSector(&cstore{ctx, g.cst}, newSectorInfo) + vdaReturn := market.VerifyDealsForActivationReturn{} + err = vdaReturn.UnmarshalCBOR(bytes.NewReader(ret)) if err != nil { - return err + return market.VerifyDealsForActivationReturn{}, err } + return vdaReturn, nil +} - err = mState.AddNewSectors(sector.comm.SectorNum) +func (g *GenesisGenerator) currentEpochBlockReward(ctx context.Context, maddr address.Address) (*reward.ThisEpochRewardReturn, error) { + rwret, err := g.doExecValue(ctx, builtin.RewardActorAddr, maddr, big.Zero(), builtin.MethodsReward.ThisEpochReward, nil) if err != nil { - return err + return nil, err } - // Persist new state. - newMinerCid, _, err := g.store.Put(ctx, &mState) + epochRewardReturn := &reward.ThisEpochRewardReturn{} + err = epochRewardReturn.UnmarshalCBOR(bytes.NewReader(rwret)) if err != nil { - return err + return nil, err } - mAct.Head = e.NewCid(newMinerCid) - err = g.stateTree.SetActor(ctx, sector.miner, mAct) - return err + return epochRewardReturn, nil +} + +func (g *GenesisGenerator) circSupply(ctx context.Context, maddr address.Address) abi.TokenAmount { + supply, _ := g.vmOption.CircSupplyCalculator(ctx, 0, g.stateTree) + return supply } func computeSectorPower(size abi.SectorSize, duration abi.ChainEpoch, dealWeight, verifiedDealWeight abi.DealWeight) (abi.StoragePower, abi.StoragePower) { - weight := &power.SectorStorageWeightDesc{ - SectorSize: size, - Duration: duration, - DealWeight: dealWeight, - VerifiedDealWeight: verifiedDealWeight, - } spower := big.NewIntUnsigned(uint64(size)) - qapower := power.QAPowerForWeight(weight) + qapower := miner.QAPowerForWeight(size, duration, dealWeight, verifiedDealWeight) return spower, qapower } diff --git a/tools/gengen/util/gengen.go b/tools/gengen/util/gengen.go index 15834e3b5e..f32a02d405 100644 --- a/tools/gengen/util/gengen.go +++ b/tools/gengen/util/gengen.go @@ -6,7 +6,7 @@ import ( "io" address "github.com/filecoin-project/go-address" - "github.com/filecoin-project/specs-actors/actors/abi" + "github.com/filecoin-project/go-state-types/abi" bserv "github.com/ipfs/go-blockservice" cid "github.com/ipfs/go-cid" ds "github.com/ipfs/go-datastore" @@ -17,10 +17,9 @@ import ( dag "github.com/ipfs/go-merkledag" car "github.com/ipld/go-car" - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/crypto" - "github.com/filecoin-project/go-filecoin/internal/pkg/genesis" - "github.com/filecoin-project/go-filecoin/internal/pkg/types" + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/genesis" + types "github.com/filecoin-project/venus/venus-shared/chain" ) // CreateStorageMinerConfig holds configuration options used to create a storage @@ -38,13 +37,15 @@ type CreateStorageMinerConfig struct { // CommittedSectors is the list of sector commitments in this miner's proving set CommittedSectors []*CommitConfig - // SealProofType is the proof configuration used by this miner + // RegisteredSealProof is the proof configuration used by this miner // (which implies sector size and window post partition size) - SealProofType abi.RegisteredProof + SealProofType abi.RegisteredSealProof // ProvingPeriodStart is next chain epoch at which a miner will need to submit a windowed post // If unset, it will be set to the proving period. ProvingPeriodStart *abi.ChainEpoch + + MarketBalance abi.TokenAmount } // CommitConfig carries all information needed to get a sector commitment in the @@ -54,7 +55,7 @@ type CommitConfig struct { CommD cid.Cid SectorNum abi.SectorNumber DealCfg *DealConfig - ProofType abi.RegisteredProof + ProofType abi.RegisteredSealProof } // DealConfig carries the information needed to specify a self-deal committing @@ -190,7 +191,7 @@ var defaultGenTimeOpt = GenTime(123456789) func MakeGenesisFunc(opts ...GenOption) genesis.InitFunc { // Dragons: GenesisInitFunc should take in only a blockstore to remove the hidden // assumption that cst and bs are backed by the same storage. - return func(cst cbor.IpldStore, bs blockstore.Blockstore) (*block.Block, error) { + return func(cst cbor.IpldStore, bs blockstore.Blockstore) (*types.BlockHeader, error) { ctx := context.Background() genCfg := &GenesisCfg{} err := defaultGenTimeOpt(genCfg) @@ -207,7 +208,7 @@ func MakeGenesisFunc(opts ...GenOption) genesis.InitFunc { return nil, err } - var b block.Block + var b types.BlockHeader err = cst.Get(ctx, ri.GenesisCid, &b) if err != nil { return nil, err @@ -259,7 +260,6 @@ func GenGenesisCar(cfg *GenesisCfg, out io.Writer) (*RenderedGenInfo, error) { bstore := blockstore.NewBlockstore(ds.NewMapDatastore()) bstore = blockstore.NewIdStore(bstore) dserv := dag.NewDAGService(bserv.New(bstore, offline.Exchange(bstore))) - info, err := GenGen(ctx, cfg, bstore) if err != nil { return nil, err @@ -296,8 +296,8 @@ type signer struct{} var _ types.Signer = (*signer)(nil) -func (ggs *signer) SignBytes(_ context.Context, data []byte, addr address.Address) (crypto.Signature, error) { - return crypto.Signature{}, nil +func (ggs *signer) SignBytes(_ context.Context, data []byte, addr address.Address) (*crypto.Signature, error) { + return nil, nil } func (ggs *signer) HasAddress(_ context.Context, addr address.Address) (bool, error) { diff --git a/tools/gengen/util/gengen_test.go b/tools/gengen/util/gengen_test.go index ac1fa6ca57..b9780835d1 100644 --- a/tools/gengen/util/gengen_test.go +++ b/tools/gengen/util/gengen_test.go @@ -5,38 +5,43 @@ import ( "io/ioutil" "testing" - "github.com/filecoin-project/specs-actors/actors/builtin" + "github.com/filecoin-project/go-state-types/abi" + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" ds "github.com/ipfs/go-datastore" blockstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - th "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - . "github.com/filecoin-project/go-filecoin/tools/gengen/util" + "github.com/filecoin-project/venus/pkg/constants" + th "github.com/filecoin-project/venus/pkg/testhelpers" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + genutil "github.com/filecoin-project/venus/tools/gengen/util" + _ "github.com/filecoin-project/venus/pkg/crypto/bls" + _ "github.com/filecoin-project/venus/pkg/crypto/secp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) -func testConfig(t *testing.T) *GenesisCfg { - fiftyCommCfgs, err := MakeCommitCfgs(50) +func testConfig(t *testing.T) *genutil.GenesisCfg { + fiftyCommCfgs, err := genutil.MakeCommitCfgs(50) require.NoError(t, err) - tenCommCfgs, err := MakeCommitCfgs(10) + tenCommCfgs, err := genutil.MakeCommitCfgs(10) require.NoError(t, err) - return &GenesisCfg{ + return &genutil.GenesisCfg{ KeysToGen: 4, PreallocatedFunds: []string{"1000000", "500000"}, - Miners: []*CreateStorageMinerConfig{ + Miners: []*genutil.CreateStorageMinerConfig{ { Owner: 0, CommittedSectors: fiftyCommCfgs, SealProofType: constants.DevSealProofType, + MarketBalance: abi.NewTokenAmount(0), }, { Owner: 1, CommittedSectors: tenCommCfgs, SealProofType: constants.DevSealProofType, + MarketBalance: abi.NewTokenAmount(0), }, }, Network: "gfctest", @@ -54,34 +59,39 @@ func TestGenGenLoading(t *testing.T) { fi, err := ioutil.TempFile("", "gengentest") assert.NoError(t, err) - _, err = GenGenesisCar(testConfig(t), fi) + _, err = genutil.GenGenesisCar(testConfig(t), fi) assert.NoError(t, err) assert.NoError(t, fi.Close()) td := th.NewDaemon(t, th.GenesisFile(fi.Name())).Start() defer td.ShutdownSuccess() - o := td.Run("actor", "ls").AssertSuccess() + o := td.Run("state", "list-actor").AssertSuccess() stdout := o.ReadStdout() - assert.Contains(t, stdout, builtin.StoragePowerActorCodeID.String()) - assert.Contains(t, stdout, builtin.StorageMarketActorCodeID.String()) - assert.Contains(t, stdout, builtin.InitActorCodeID.String()) + assert.Contains(t, stdout, builtin2.StoragePowerActorCodeID.String()) + assert.Contains(t, stdout, builtin2.StorageMarketActorCodeID.String()) + assert.Contains(t, stdout, builtin2.InitActorCodeID.String()) } func TestGenGenDeterministic(t *testing.T) { tf.IntegrationTest(t) ctx := context.Background() - var info *RenderedGenInfo + var info *genutil.RenderedGenInfo for i := 0; i < 5; i++ { bstore := blockstore.NewBlockstore(ds.NewMapDatastore()) - inf, err := GenGen(ctx, testConfig(t), bstore) + inf, err := genutil.GenGen(ctx, testConfig(t), bstore) assert.NoError(t, err) if info == nil { info = inf } else { - assert.Equal(t, info, inf) + assert.Equal(t, info.GenesisCid, inf.GenesisCid) + assert.Equal(t, info.Miners, inf.Miners) + assert.Equal(t, len(info.Keys), len(inf.Keys)) + for i, key := range inf.Keys { + assert.Equal(t, info.Keys[i].Key(), key.Key()) + } } } } diff --git a/tools/gengen/util/testing.go b/tools/gengen/util/testing.go index 21ba37484d..069bb40135 100644 --- a/tools/gengen/util/testing.go +++ b/tools/gengen/util/testing.go @@ -2,38 +2,26 @@ package gengen import ( "fmt" - - "github.com/filecoin-project/specs-actors/actors/abi" - blockstore "github.com/ipfs/go-ipfs-blockstore" - cbornode "github.com/ipfs/go-ipld-cbor" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/constants" - "github.com/filecoin-project/go-filecoin/internal/pkg/version" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/specs-actors/v6/actors/builtin/market" + "github.com/filecoin-project/specs-actors/v6/actors/builtin/miner" + tutil "github.com/filecoin-project/specs-actors/v6/support/testing" + "github.com/filecoin-project/venus/pkg/constants" ) // MakeCommitCfgs creates n gengen commit configs, casting strings to cids. func MakeCommitCfgs(n int) ([]*CommitConfig, error) { cfgs := make([]*CommitConfig, n) for i := 0; i < n; i++ { - commP, err := constants.DefaultCidBuilder.Sum([]byte(fmt.Sprintf("commP: %d", i))) - if err != nil { - return nil, err - } - commR, err := constants.DefaultCidBuilder.Sum([]byte(fmt.Sprintf("commR: %d", i))) - if err != nil { - return nil, err - } - commD, err := constants.DefaultCidBuilder.Sum([]byte(fmt.Sprintf("commD: %d", i))) - if err != nil { - return nil, err - } + commP := tutil.MakeCID(fmt.Sprintf("commP: %d", i), &market.PieceCIDPrefix) + commR := tutil.MakeCID(fmt.Sprintf("commR: %d", i), &miner.SealedCIDPrefix) + commD := tutil.MakeCID(fmt.Sprintf("commD: %d", i), &market.PieceCIDPrefix) dealCfg := &DealConfig{ CommP: commP, - PieceSize: uint64(1), + PieceSize: uint64(2048), Verified: false, - EndEpoch: int64(1024), + EndEpoch: int64(538000), } cfgs[i] = &CommitConfig{ @@ -46,8 +34,3 @@ func MakeCommitCfgs(n int) ([]*CommitConfig, error) { } return cfgs, nil } - -// DefaultGenesis creates a test network genesis block with default accounts and actors installed. -func DefaultGenesis(cst cbornode.IpldStore, bs blockstore.Blockstore) (*block.Block, error) { - return MakeGenesisFunc(NetworkName(version.TEST))(cst, bs) -} diff --git a/tools/iptb-plugins/README.md b/tools/iptb-plugins/README.md index 45f7114f31..e67ea5ff5e 100644 --- a/tools/iptb-plugins/README.md +++ b/tools/iptb-plugins/README.md @@ -1,4 +1,4 @@ -# How to use IPTB with go-filecoin +# How to use IPTB with venus These scripts allow one to: @@ -14,9 +14,9 @@ First, ensure you have the latest version of IPTB installed: $> go get -u github.com/ipfs/iptb ``` -Next, ensure you have go-filecoin **installed**, IPTB requires that the go-filecoin bin be in your path: +Next, ensure you have venus **installed**, IPTB requires that the venus bin be in your path: ```shell -$> cd $GOPATH/src/github.com/filecoin-project/go-filecoin +$> cd $GOPATH/src/github.com/filecoin-project/venus $> go run build/main.go deps $> go run build/main.go install ``` @@ -116,7 +116,7 @@ $> iptb connect Verify the connections were made: ```shell -$> iptb run -- go-filecoin swarm peers +$> iptb run -- venus swarm peers node[0] exit 0 /ip4/127.0.0.1/tcp/33427/ipfs/QmVihFTmJDpWc8iAQXcbp4mavc6dWDuHqktm9EfFyTvBiC @@ -134,7 +134,7 @@ node[0] exit 0 Run a command on all the nodes: ``` -$> iptb run -- go-filecoin wallet addrs ls +$> iptb run -- venus wallet addrs ls node[0] exit 0 fcqd8399qra4a94tspmplcrh68x7vkhqzxaxtk6nw @@ -148,7 +148,7 @@ fcqn9054lff4s9v6rlt76h08k4ra0gt9xmpymcl9w Or just the even number nodes: ```shell -$> iptb run [0,2,4,6,8] -- go-filecoin id +$> iptb run [0,2,4,6,8] -- venus id node[0] exit 0 { @@ -167,7 +167,7 @@ node[0] exit 0 ``` Or nodes 3-5: ```shell -$> iptb run [3-5] -- go-filecoin swarm peers +$> iptb run [3-5] -- venus swarm peers node[3] exit 0 node[4] exit 0 @@ -178,7 +178,7 @@ node[5] exit 0 Jump into a shell for a node: ```shell $> iptb shell 0 -$> go-filecoin id +$> venus id { "Addresses": [ "/ip4/127.0.0.1/tcp/44311/ipfs/Qmbb5hawLiz1md6hcAiW98p1SLSE4u1cV5BNZB5VnhKQQ8", @@ -193,7 +193,7 @@ $> go-filecoin id } $> exit $> iptb shell 1 -$> go-filecoin id +$> venus id { "Addresses": [ "/ip4/127.0.0.1/tcp/39583/ipfs/QmaTJHZeSTorvtCSstk1LJs5HvHUt7vmbpaJuaYJFWtWiu", diff --git a/tools/iptb-plugins/filecoin/docker/dockerfilecoin.go b/tools/iptb-plugins/filecoin/docker/dockerfilecoin.go index 93dc97f4b9..6283ff28d9 100644 --- a/tools/iptb-plugins/filecoin/docker/dockerfilecoin.go +++ b/tools/iptb-plugins/filecoin/docker/dockerfilecoin.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin" + "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin" "github.com/ipfs/go-cid" logging "github.com/ipfs/go-log/v2" @@ -36,13 +36,13 @@ var log = logging.Logger(PluginName) var DefaultDockerHost = client.DefaultDockerHost // DefaultDockerImage is the image name the plugin will use when deploying a container> -var DefaultDockerImage = "go-filecoin" +var DefaultDockerImage = "venus" // DefaultDockerUser is the user that will run the command(s) inside the container. var DefaultDockerUser = "filecoin" // DefaultDockerEntryPoint is the entrypoint to run when starting the container. -var DefaultDockerEntryPoint = []string{"/usr/local/bin/go-filecoin"} +var DefaultDockerEntryPoint = []string{"/usr/local/bin/venus"} // DefaultDockerVolumePrefix is a prefix added when using docker volumes // e.g. when running against a remote docker daemon a prefix like `/var/iptb/` @@ -105,7 +105,7 @@ func init() { return nil, err } - swarmaddr, err := multiaddr.NewMultiaddr("/ip4/0.0.0.0/tcp/6000") + swarmaddr, err := multiaddr.NewMultiaddr("/ip4/0.0.0.0/tcp/0") if err != nil { return nil, err } @@ -369,7 +369,7 @@ func (l *Dockerfilecoin) Connect(ctx context.Context, n testbedi.Core) error { for _, a := range swarmaddrs { // we should try all addresses // TODO(frrist) libp2p has a better way to do this built in iirc - output, err := l.RunCmd(ctx, nil, "go-filecoin", "swarm", "connect", a) + output, err := l.RunCmd(ctx, nil, "venus", "swarm", "connect", a) if err != nil { return err } @@ -388,7 +388,7 @@ func (l *Dockerfilecoin) Connect(ctx context.Context, n testbedi.Core) error { func (l *Dockerfilecoin) env() ([]string, error) { envs := os.Environ() - envs = filecoin.UpdateOrAppendEnv(envs, "FIL_PATH", "/data/filecoin") + envs = filecoin.UpdateOrAppendEnv(envs, "VENUS_PATH", "/data/filecoin") envs = filecoin.UpdateOrAppendEnv(envs, "GO_FILECOIN_LOG_LEVEL", l.logLevel) envs = filecoin.UpdateOrAppendEnv(envs, "GO_FILECOIN_LOG_JSON", l.logJSON) @@ -445,7 +445,7 @@ func (l *Dockerfilecoin) APIAddr() (string, error) { // SwarmAddrs returns the addresses a node is listening on for swarm connections. func (l *Dockerfilecoin) SwarmAddrs() ([]string, error) { - out, err := l.RunCmd(context.Background(), nil, "go-filecoin", "id", "--format=''") + out, err := l.RunCmd(context.Background(), nil, "venus", "id", "--format=''") if err != nil { return nil, err } diff --git a/tools/iptb-plugins/filecoin/docker/dockerfilecoin/plugin.go b/tools/iptb-plugins/filecoin/docker/dockerfilecoin/plugin.go index ceb19b1ddd..020b309734 100644 --- a/tools/iptb-plugins/filecoin/docker/dockerfilecoin/plugin.go +++ b/tools/iptb-plugins/filecoin/docker/dockerfilecoin/plugin.go @@ -1,7 +1,7 @@ package main import ( - plugin "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/docker" + plugin "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin/docker" ) var PluginName = plugin.PluginName // nolint: golint, staticcheck, deadcode, unused diff --git a/tools/iptb-plugins/filecoin/docker/scripts/prepMining.sh b/tools/iptb-plugins/filecoin/docker/scripts/prepMining.sh index 22b5a54769..0214692e64 100755 --- a/tools/iptb-plugins/filecoin/docker/scripts/prepMining.sh +++ b/tools/iptb-plugins/filecoin/docker/scripts/prepMining.sh @@ -24,11 +24,11 @@ fi if [ "$1" -gt "$MAX_NODES" ]; then - printf "If you wish to run with a value larger that 25, you must edit the Dockerfile in the go-filecoin repo\n + printf "If you wish to run with a value larger that 25, you must edit the Dockerfile in the venus repo\n Where to edit:\n ENV GENSETUP_COUNT 25 #<--SET THIS VALUE\n After edit you must rebuild the docker file:\n - $ docker build -t go-filecoin . + $ docker build -t venus . " exit 1 fi @@ -40,14 +40,14 @@ printf "Initializing %d nodes\n" "$1" iptb init -- --genesisfile=/data/genesis.car printf "Starting %d nodes\n" "$1" -iptb start -- --block-time=5s +iptb start printf "Configuring %d nodes\n" "$1" for i in $(eval echo {0..$1}) do minerAddr=$(iptb run "$i" cat /data/minerAddr$i | tail -n 2 | head -n 1) - iptb run "$i" -- go-filecoin config mining.minerAddress \"\\\"$minerAddr\\\"\" - iptb run "$i" -- go-filecoin wallet import /data/walletKey$i + iptb run "$i" -- venus config mining.minerAddress \"\\\"$minerAddr\\\"\" + iptb run "$i" -- venus wallet import /data/walletKey$i done printf "Connecting %d nodes\n" "$1" diff --git a/tools/iptb-plugins/filecoin/docker/util.go b/tools/iptb-plugins/filecoin/docker/util.go index f57a3075ae..40bc845338 100644 --- a/tools/iptb-plugins/filecoin/docker/util.go +++ b/tools/iptb-plugins/filecoin/docker/util.go @@ -53,7 +53,7 @@ func Exec(ctx context.Context, cli client.APIClient, containerID string, detach User: "filecoin", AttachStdout: true, AttachStderr: true, - Env: []string{fmt.Sprintf("FIL_PATH=%s", repoDir)}, + Env: []string{fmt.Sprintf("VENUS_PATH=%s", repoDir)}, Cmd: cmd, Detach: detach, } diff --git a/tools/iptb-plugins/filecoin/local/filecoinutil.go b/tools/iptb-plugins/filecoin/local/filecoinutil.go index edf0e71182..d02ca24946 100644 --- a/tools/iptb-plugins/filecoin/local/filecoinutil.go +++ b/tools/iptb-plugins/filecoin/local/filecoinutil.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "fmt" + "github.com/filecoin-project/venus/cmd" "io" "io/ioutil" "os" @@ -16,8 +17,7 @@ import ( "github.com/ipfs/go-cid" "github.com/pkg/errors" - commands "github.com/filecoin-project/go-filecoin/cmd/go-filecoin" - "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin" + "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin" ) func (l *Localfilecoin) isAlive() (bool, error) { @@ -57,7 +57,7 @@ func (l *Localfilecoin) env() ([]string, error) { pathList := filepath.SplitList(currPath) pathList = append([]string{filepath.Dir(l.binPath)}, pathList...) newPath := strings.Join(pathList, string(filepath.ListSeparator)) - envs = filecoin.UpdateOrAppendEnv(envs, "FIL_PATH", l.repoPath) + envs = filecoin.UpdateOrAppendEnv(envs, "VENUS_PATH", l.repoPath) envs = filecoin.UpdateOrAppendEnv(envs, "GO_FILECOIN_LOG_LEVEL", l.logLevel) envs = filecoin.UpdateOrAppendEnv(envs, "GO_FILECOIN_LOG_JSON", l.logJSON) envs = filecoin.UpdateOrAppendEnv(envs, "RUST_LOG", "info") @@ -108,7 +108,7 @@ func (l *Localfilecoin) GetPeerID() (cid.Cid, error) { return cid.Undef, err } - var details commands.IDDetails + var details cmd.IDDetails err = details.UnmarshalJSON(buf.Bytes()) if err != nil { return cid.Undef, err diff --git a/tools/iptb-plugins/filecoin/local/localfilecoin.go b/tools/iptb-plugins/filecoin/local/localfilecoin.go index 8a5fb1baf2..0b32e14140 100644 --- a/tools/iptb-plugins/filecoin/local/localfilecoin.go +++ b/tools/iptb-plugins/filecoin/local/localfilecoin.go @@ -17,13 +17,13 @@ import ( "github.com/multiformats/go-multiaddr" "github.com/pkg/errors" - "github.com/filecoin-project/go-filecoin/internal/pkg/config" + "github.com/filecoin-project/venus/pkg/config" "github.com/ipfs/iptb/testbed/interfaces" "github.com/ipfs/iptb/util" "golang.org/x/sync/errgroup" - "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin" + "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin" ) // PluginName is the name of the plugin @@ -36,7 +36,7 @@ var errIsAlive = errors.New("node is already running") var errTimeout = errors.New("timeout") // defaultFilecoinBinary is the name or full path of the binary that will be used -const defaultFilecoinBinary = "go-filecoin" +const defaultFilecoinBinary = "venus" // defaultRepoPath is the name of the repo path relative to the plugin root directory const defaultRepoPath = "repo" @@ -324,7 +324,7 @@ func (l *Localfilecoin) RunCmd(ctx context.Context, stdin io.Reader, args ...str } firstArg := args[0] - if firstArg == "go-filecoin" { + if firstArg == "venus" { firstArg = l.binPath } @@ -410,21 +410,21 @@ func (l *Localfilecoin) Connect(ctx context.Context, n testbedi.Core) error { return err } -// Shell starts a user shell in the context of a node setting FIL_PATH to ensure calls to -// go-filecoin will be ran agasint the target node. Stderr, stdout will be set to os.Stderr +// Shell starts a user shell in the context of a node setting VENUS_PATH to ensure calls to +// venus will be ran agasint the target node. Stderr, stdout will be set to os.Stderr // and os.Stdout. If env TTY is set, it will be used for stdin, otherwise os.Stdin will be used. // -// If FIL_PATH is already set, an error will be returned. +// If VENUS_PATH is already set, an error will be returned. // // The shell environment will have the follow variables set in the shell for the user. // // NODE0-NODE# - set to the PeerID for each value in ns passed. -// FIL_PATH - The value is set to the directory for the Filecoin node. +// VENUS_PATH - The value is set to the directory for the Filecoin node. // FIL_PID - The value is set to the pid for the Filecoin daemon // FIL_BINARY - The value is set to the path of the binary used for running the Filecoin daemon. // PATH - The users PATH will be updated to include a location that contains the FIL_BINARY. // -// Note: user shell configuration may lead to the `go-filecoin` command not pointing to FIL_BINARY, +// Note: user shell configuration may lead to the `venus` command not pointing to FIL_BINARY, // due to PATH ordering. func (l *Localfilecoin) Shell(ctx context.Context, ns []testbedi.Core) error { shell := os.Getenv("SHELL") @@ -432,9 +432,9 @@ func (l *Localfilecoin) Shell(ctx context.Context, ns []testbedi.Core) error { return fmt.Errorf("no shell found") } - if len(os.Getenv("FIL_PATH")) != 0 { - // If the users shell sets FIL_PATH, it will just be overridden by the shell again - return fmt.Errorf("shell has FIL_PATH set, please unset before trying to use iptb shell") + if len(os.Getenv("VENUS_PATH")) != 0 { + // If the users shell sets VENUS_PATH, it will just be overridden by the shell again + return fmt.Errorf("shell has VENUS_PATH set, please unset before trying to use iptb shell") } nenvs, err := l.env() diff --git a/tools/iptb-plugins/filecoin/local/localfilecoin/plugin.go b/tools/iptb-plugins/filecoin/local/localfilecoin/plugin.go index 124b66ddf9..1d65468612 100644 --- a/tools/iptb-plugins/filecoin/local/localfilecoin/plugin.go +++ b/tools/iptb-plugins/filecoin/local/localfilecoin/plugin.go @@ -1,7 +1,7 @@ package main import ( - plugin "github.com/filecoin-project/go-filecoin/tools/iptb-plugins/filecoin/local" + plugin "github.com/filecoin-project/venus/tools/iptb-plugins/filecoin/local" ) var PluginName = plugin.PluginName // nolint: golint, staticcheck, deadcode, unused diff --git a/tools/iptb-plugins/filecoin/local/scripts/prepMining.sh b/tools/iptb-plugins/filecoin/local/scripts/prepMining.sh index 82f254a0dc..32e6be127b 100755 --- a/tools/iptb-plugins/filecoin/local/scripts/prepMining.sh +++ b/tools/iptb-plugins/filecoin/local/scripts/prepMining.sh @@ -31,26 +31,26 @@ fi iptb testbed create --count "$1" --type localfilecoin --force # set common paths to find bins and config files -GENDIR=$GOPATH/src/github.com/filecoin-project/go-filecoin/tools/gengen -FIXDIR=$GOPATH/src/github.com/filecoin-project/go-filecoin/fixtures +GENDIR=$GOPATH/src/github.com/filecoin-project/venus/tools/gengen +FIXDIR=$GOPATH/src/github.com/filecoin-project/venus/fixtures printf "Setting up initial boostrap node (0)\n" # configure mining on node 0 minerAddr=$(cat $FIXDIR/gen.json | jq ".Miners[0].Address" -r) iptb init 0 -- --genesisfile=$FIXDIR/genesis.car -iptb start 0 -- --block-time=5s -iptb run 0 -- go-filecoin config mining.minerAddress "\"$minerAddr\"" +iptb start 0 +iptb run 0 -- venus config mining.minerAddress "\"$minerAddr\"" # import miner owner -ownerRaw=$(iptb run 0 -- go-filecoin wallet import "$FIXDIR/0.key") +ownerRaw=$(iptb run 0 -- venus wallet import "$FIXDIR/0.key") # sad face, iptb makes me do all the jumps minerOwner=$(echo $ownerRaw | sed -e 's/^node\[0\] exit 0 //' | jq -r ".") # update the peerID to the correct value -peerID=$(iptb run 0 -- go-filecoin id | tail -n +3 | jq ".ID" -r) -iptb run 0 -- go-filecoin miner update-peerid --from="$minerOwner" --gas-price=0 --gas-limit=300 "$minerAddr" "$peerID" +peerID=$(iptb run 0 -- venus id | tail -n +3 | jq ".ID" -r) +iptb run 0 -- venus miner update-peerid --from="$minerOwner" --gas-price=0 --gas-limit=300 "$minerAddr" "$peerID" # start mining -iptb run 0 -- go-filecoin mining start +iptb run 0 -- venus mining start # ranges are inclusive in bash, so subtract one J=$(($1 - 1)) @@ -72,32 +72,32 @@ printf "Creating miners\n" for i in `seq 1 $J` do # send some tokens - nodeAddr=$(iptb run "$i" -- go-filecoin wallet addrs ls | tail -n +3) - msgCidRaw=$(iptb run 0 -- go-filecoin message send --from "$minerOwner" --value 100 "$nodeAddr") + nodeAddr=$(iptb run "$i" -- venus wallet addrs ls | tail -n +3) + msgCidRaw=$(iptb run 0 -- venus message send --from "$minerOwner" --value 100 "$nodeAddr") msgCid=$(echo $msgCidRaw | sed -e 's/^node\[0\] exit 0 //') echo "Waiting for $msgCid" - iptb run "$i" -- go-filecoin message wait "$msgCid" + iptb run "$i" -- venus message wait "$msgCid" # create the actual miner - newMinerAddr=$(iptb run "$i" -- go-filecoin miner create 10 | tail -n +3) + newMinerAddr=$(iptb run "$i" -- venus miner create 10 | tail -n +3) # start mining - iptb run "$i" -- go-filecoin mining start # I don't think these guys need to mine yet, wait until the deal is processed + iptb run "$i" -- venus mining start # I don't think these guys need to mine yet, wait until the deal is processed # add an ask printf "adding ask" - iptb run "$i" -- go-filecoin miner set-price --miner="$newMinerAddr" 1 100000 --gas-price=0 --gas-limit=300 # price of one FIL/whatever, ask is valid for 100000 blocks + iptb run "$i" -- venus miner set-price --miner="$newMinerAddr" 1 100000 --gas-price=0 --gas-limit=300 # price of one FIL/whatever, ask is valid for 100000 blocks # make a deal dd if=/dev/random of="$FIXDIR/fake.dat" bs="$DD_FILE_SIZE" count=1 # small data file will be autosealed - dataCidRaw=$(iptb run 0 -- go-filecoin client import "$FIXDIR/fake.dat") + dataCidRaw=$(iptb run 0 -- venus client import "$FIXDIR/fake.dat") rm "$FIXDIR/fake.dat" dataCid=$(echo $dataCidRaw | sed -e 's/^node\[0\] exit 0 //') printf "making deal" echo $newMinerAddr echo $dataCid - iptb run 0 -- go-filecoin client propose-storage-deal "$newMinerAddr" "$dataCid" 1 10000 # I think this is where stuff fails right now?? + iptb run 0 -- venus client propose-storage-deal "$newMinerAddr" "$dataCid" 1 10000 # I think this is where stuff fails right now?? done printf "Complete! %d nodes connected and ready to mine >.>" "$1" diff --git a/tools/iptb-plugins/filecoin/mock/mockfilecoin.go b/tools/iptb-plugins/filecoin/mock/mockfilecoin.go index dce57b46f8..58001279d3 100644 --- a/tools/iptb-plugins/filecoin/mock/mockfilecoin.go +++ b/tools/iptb-plugins/filecoin/mock/mockfilecoin.go @@ -13,7 +13,7 @@ import ( // PluginName is the name of the plugin var PluginName = "mockfilecoin" -// Mockfilecoin is a mock structure used for testing things that use go-filecoin iptb plugins +// Mockfilecoin is a mock structure used for testing things that use venus iptb plugins type Mockfilecoin struct { dir string diff --git a/tools/migration/README.md b/tools/migration/README.md deleted file mode 100644 index 1c8b2c4bc6..0000000000 --- a/tools/migration/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# IMPORTANT - -**DO NOT REGENERATE** test fixtures associated with a migration, using go-filecoin code that is later than the intended "oldVersion" associated with the migration. - -This will not only invalidate the tests, but users will be unable to run migrations on -their repo, because the migration code becomes polluted with behaviors past its original -intended versions. The migration will likely become completely unable to read their repo. - -If your changes have broken migration tests, then one of the following scenarios may apply: - -1. A migration has already been created and merged for the upcoming release, and you are are making more breaking changes to the repo. In this case, you will need to: - - * write your own migration for your changes and backport the old code to the other one, -
OR - * include your changes in the other migration. -2. The migration is recent but applies to a previous release. In this case you need to write a new migration and backport the old code. -3. The previous migration version is enough versions behind that no nodes should even be running it by now. Consider invalidating the broken migration. \ No newline at end of file diff --git a/tools/migration/internal/default_migrations_provider.go b/tools/migration/internal/default_migrations_provider.go deleted file mode 100644 index e1c9f233ae..0000000000 --- a/tools/migration/internal/default_migrations_provider.go +++ /dev/null @@ -1,23 +0,0 @@ -package internal - -// DefaultMigrationsProvider provides a list of migrations available for migrating -// in production. -// To add a migration: -// 1. add a migration folder in tools/migration/migrations like repo-- -// 2. put the migration code in the folder in its own package -// 2. add the new migration package to the imports above -// 3. instantiate and append it to the list of migrations returned by DefaultMigrationsProvider -// -// See runner_test for examples. - -import ( - migration12 "github.com/filecoin-project/go-filecoin/tools/migration/migrations/repo-1-2" -) - -// DefaultMigrationsProvider is the migrations provider dependency used in production. -// You may provide a test version when needed. Please see runner_test.go for more information. -func DefaultMigrationsProvider() []Migration { - return []Migration{ - &migration12.MetadataFormatJSONtoCBOR{}, - } -} diff --git a/tools/migration/internal/logger.go b/tools/migration/internal/logger.go deleted file mode 100644 index ed57c1db87..0000000000 --- a/tools/migration/internal/logger.go +++ /dev/null @@ -1,52 +0,0 @@ -package internal - -import ( - "io" - "log" - "os" -) - -// Logger logs migration events to disk and, if initialized with verbose, -// stdout too. -type Logger struct { - closer io.WriteCloser - logger *log.Logger -} - -// NewLogger creates a new Logger. All log writes go to f, the logging file. -// If the verbose flag is true all log writes also go to stdout. -func NewLogger(wc io.WriteCloser, verbose bool) *Logger { - // by default just write to file - var w io.Writer - w = wc - if verbose { - w = io.MultiWriter(wc, os.Stdout) - } - return &Logger{ - closer: wc, - logger: log.New(w, "[Filecoin Migration] ", log.LstdFlags), - } -} - -// Error logs an error to the logging output. -func (l *Logger) Error(err error) { - if err == nil { - return - } - l.logger.Printf("ERROR: %s", err.Error()) -} - -// Print logs a string to the logging output. -func (l *Logger) Print(msg string) { - l.logger.Print(msg) -} - -// Printf logs and formats a string to the logging output. -func (l *Logger) Printf(format string, v ...interface{}) { - l.logger.Printf(format, v...) -} - -// Close closes the logfile backing the Logger. -func (l *Logger) Close() error { - return l.closer.Close() -} diff --git a/tools/migration/internal/logger_test.go b/tools/migration/internal/logger_test.go deleted file mode 100644 index a008858a91..0000000000 --- a/tools/migration/internal/logger_test.go +++ /dev/null @@ -1,75 +0,0 @@ -package internal_test - -import ( - "errors" - "fmt" - "io/ioutil" - "os" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - . "github.com/filecoin-project/go-filecoin/tools/migration/internal" -) - -func TestLoggerWritesToFile(t *testing.T) { - f, err := ioutil.TempFile("", "logfile") - require.NoError(t, err) - defer func() { - require.NoError(t, os.Remove(f.Name())) - }() - - logger := NewLogger(f, false) - logger.Print("testing print 1") - errTest := errors.New("testing error 2") - logger.Error(errTest) - - // Reopen file so we can read new writes - out, err := ioutil.ReadFile(f.Name()) - require.NoError(t, err) - outStr := string(out) - assert.Contains(t, outStr, "testing print 1") - expectedErrStr := fmt.Sprintf("ERROR: %s", errTest.Error()) - assert.Contains(t, outStr, expectedErrStr) -} - -func TestLoggerWritesToBothVerbose(t *testing.T) { - // Point os.Stdout to a temp file - fStdout, err := ioutil.TempFile("", "stdout") - require.NoError(t, err) - defer func() { - require.NoError(t, os.Remove(fStdout.Name())) - }() - old := os.Stdout - os.Stdout = fStdout - defer func() { os.Stdout = old }() - - // Create log file - fLogFile, err := ioutil.TempFile("", "logfile") - require.NoError(t, err) - defer func() { - require.NoError(t, os.Remove(fLogFile.Name())) - }() - - // Log verbosely - logger := NewLogger(fLogFile, true) - logger.Print("test line") - errTest := errors.New("test err") - logger.Error(errTest) - expectedErrStr := fmt.Sprintf("ERROR: %s", errTest.Error()) - - // Check logfile - outLogFile, err := ioutil.ReadFile(fLogFile.Name()) - require.NoError(t, err) - outLogFileStr := string(outLogFile) - assert.Contains(t, outLogFileStr, "test line") - assert.Contains(t, outLogFileStr, expectedErrStr) - - // Check stdout alias file - outStdout, err := ioutil.ReadFile(fStdout.Name()) - require.NoError(t, err) - outStdoutStr := string(outStdout) - assert.Contains(t, outStdoutStr, "test line") - assert.Contains(t, outStdoutStr, expectedErrStr) -} diff --git a/tools/migration/internal/repo_fs_helpers.go b/tools/migration/internal/repo_fs_helpers.go deleted file mode 100644 index 80de442bab..0000000000 --- a/tools/migration/internal/repo_fs_helpers.go +++ /dev/null @@ -1,88 +0,0 @@ -package internal - -import ( - "errors" - "fmt" - "os" - "time" - - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - rcopy "github.com/otiai10/copy" -) - -// This is a set of file system helpers for repo migration. -// -// CloneRepo and InstallRepo expect a symlink that points to the filecoin repo -// directory, typically ~/.filecoin or whatever FIL_PATH is set to. -// -// This does not touch sector data. - -// CloneRepo copies a linked repo directory to a new, writable repo directory. -// The directory created will be named with a timestamp, version number, and -// uniqueifyig tag if necessary. -// -// Params: -// linkPath: path to a symlink, which links to an actual repo directory to be cloned. -func CloneRepo(linkPath string, newVersion uint) (string, error) { - repoDirPath, err := os.Readlink(linkPath) - if err != nil { - return "", fmt.Errorf("repo path must be a symbolic link: %s", err) - } - - newDirPath, err := makeNewRepoPath(linkPath, newVersion) - if err != nil { - return "", err - } - - if err := rcopy.Copy(repoDirPath, newDirPath); err != nil { - return "", err - } - if err := os.Chmod(newDirPath, os.ModeDir|0744); err != nil { - return "", err - } - return newDirPath, nil -} - -// InstallNewRepo updates a symlink to point to a new repo directory. -func InstallNewRepo(linkPath, newRepoPath string) error { - // Check that linkPath is a symlink. - if _, err := os.Readlink(linkPath); err != nil { - return err - } - - // Check the repo exists. - if _, err := os.Stat(newRepoPath); err != nil { - return err - } - - // Replace the symlink. - if err := os.Remove(linkPath); err != nil { - return err - } - if err := os.Symlink(newRepoPath, linkPath); err != nil { - return err - } - return nil -} - -// makeNewRepoPath generates a new repo path for a migration. -// Params: -// linkPath: the actual old repo path -// version: the prospective version for the new repo -// Returns: -// a vacant path for a new repo directory -// Example output: -// /Users/davonte/.filecoin-20190806-150455-v002 -func makeNewRepoPath(linkPath string, version uint) (string, error) { - // Search for a free name - now := time.Now() - var newpath string - for i := uint(0); i < 1000; i++ { - newpath = repo.MakeRepoDirName(linkPath, now, version, i) - if _, err := os.Stat(newpath); os.IsNotExist(err) { - return newpath, nil - } - } - // this should never happen, but just in case. - return "", errors.New("couldn't find a free dirname for cloning") -} diff --git a/tools/migration/internal/repo_fs_helpers_test.go b/tools/migration/internal/repo_fs_helpers_test.go deleted file mode 100644 index 15eede533e..0000000000 --- a/tools/migration/internal/repo_fs_helpers_test.go +++ /dev/null @@ -1,114 +0,0 @@ -package internal_test - -import ( - "os" - "regexp" - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - . "github.com/filecoin-project/go-filecoin/tools/migration/internal" -) - -func TestRepoMigrationHelper_CloneRepo(t *testing.T) { - tf.UnitTest(t) - - t.Run("Creates the dir with the right permissions", func(t *testing.T) { - oldRepo := repo.RequireMakeTempDir(t, "") - defer repo.RequireRemoveAll(t, oldRepo) - - linkedRepoPath := oldRepo + "something" - require.NoError(t, os.Symlink(oldRepo, oldRepo+"something")) - defer repo.RequireRemoveAll(t, linkedRepoPath) - - newRepoPath, err := CloneRepo(linkedRepoPath, 42) - require.NoError(t, err) - defer repo.RequireRemoveAll(t, newRepoPath) - - stat, err := os.Stat(newRepoPath) - require.NoError(t, err) - expectedPerms := "drwxr--r--" - assert.Equal(t, expectedPerms, stat.Mode().String()) - }) - - t.Run("fails if the old repo does not point to a symbolic link", func(t *testing.T) { - oldRepo := repo.RequireMakeTempDir(t, "") - defer repo.RequireRemoveAll(t, oldRepo) - - result, err := CloneRepo(oldRepo, 42) - assert.Error(t, err, "old-repo must be a symbolic link.") - assert.Equal(t, "", result) - - linkedRepoPath := oldRepo + "something" - require.NoError(t, os.Symlink(oldRepo, oldRepo+"something")) - defer repo.RequireRemoveAll(t, linkedRepoPath) - - result, err = CloneRepo(linkedRepoPath, 42) - assert.NoError(t, err) - assert.NotEqual(t, "", result) - }) - - t.Run("Increments the int on the end until a free filename is found", func(t *testing.T) { - oldRepo := repo.RequireMakeTempDir(t, "") - defer repo.RequireRemoveAll(t, oldRepo) - - linkedRepoPath := oldRepo + "something" - require.NoError(t, os.Symlink(oldRepo, oldRepo+"something")) - defer repo.RequireRemoveAll(t, linkedRepoPath) - - // Call CloneRepo several times and ensure that the filename end - // is incremented, since these calls will happen in <1s. - var paths []string - var endRegex string - for i := 0; i < 10; i++ { - result, err := CloneRepo(linkedRepoPath, 42) - require.NoError(t, err) - - // Presence of the trailing uniqueifier depends on whether the timestamp ticks over - // a 1-second boundary. - endRegex = "[0-9]{8}-[0-9]{6}-v042(-\\d+)?$" - regx, err := regexp.Compile(endRegex) - assert.NoError(t, err) - assert.Regexp(t, regx, result) - - if len(paths) > 0 { - assert.NotEqual(t, paths[len(paths)-1], result) - } - paths = append(paths, result) - } - for _, dir := range paths { - repo.RequireRemoveAll(t, dir) - } - }) -} - -func TestRepoFSHelpers_InstallNewRepo(t *testing.T) { - tf.UnitTest(t) - - t.Run("swaps out the symlink", func(t *testing.T) { - container, repoLink := RequireInitRepo(t, 0) - defer repo.RequireRemoveAll(t, container) - - oldRepoPath := repo.RequireReadLink(t, repoLink) - newRepoPath, err := CloneRepo(repoLink, 42) - require.NoError(t, err) - - require.NoError(t, InstallNewRepo(repoLink, newRepoPath)) - AssertNewRepoInstalled(t, newRepoPath, oldRepoPath, repoLink) - }) - - t.Run("returns error and leaves symlink if new repo does not exist", func(t *testing.T) { - container, repoLink := RequireInitRepo(t, 0) - defer repo.RequireRemoveAll(t, container) - - oldRepoPath := repo.RequireReadLink(t, repoLink) - err := InstallNewRepo(repoLink, "/tmp/nonexistentfile") - assert.EqualError(t, err, "stat /tmp/nonexistentfile: no such file or directory") - - assert.NotEqual(t, "/tmp/nonexistentfile", repo.RequireReadLink(t, repoLink)) - assert.Equal(t, oldRepoPath, repo.RequireReadLink(t, repoLink)) - }) -} diff --git a/tools/migration/internal/runner.go b/tools/migration/internal/runner.go deleted file mode 100644 index a8620dafb3..0000000000 --- a/tools/migration/internal/runner.go +++ /dev/null @@ -1,262 +0,0 @@ -package internal - -import ( - "fmt" - "strconv" - - "github.com/mitchellh/go-homedir" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" -) - -// Migration is the interface to all repo migration versions. -type Migration interface { - // Describe returns a list of steps, as a formatted string, that a given Migration will take. - // These should correspond to named functions in the given Migration. - Describe() string - - // Migrate performs all migration steps for the Migration that implements the interface. - // Migrate expects newRepo to be: - // a directory - // read/writeable by this process, - // contain a copy of the old repo. - Migrate(newRepoPath string) error - - // Versions returns valid from and to migration versions for this migration. - Versions() (from, to uint) - - // Validate performs validation operations, using oldRepo for comparison. - // Validation requirements will be different for every migration. - // Validate expects newRepo to be - // a directory - // readable by this process - // already migrated - // It expects oldRepo to be - // a directory - // read-only by this process - // A successful validation returns nil. - Validate(oldRepoPath, newRepoPath string) error -} - -// MigrationRunner represents a migration command -type MigrationRunner struct { - // logger logs to stdout/err and a logfile. - logger *Logger - - // command is the migration command to run, passed from the CLI - command string - - // oldRepoOpt is the value of --old-repo passed from the CLI, - // expanded homedir where needed - oldRepoOpt string - - // newRepoPath is where the to-be-migrated/migrated repo is located, - // expanded homedir where needed - newRepoPath string - - // MigrationsProvider is a dependency for fetching available migrations - // to allow unit tests to supply test migrations without creating test fixtures. - MigrationsProvider func() []Migration -} - -// NewMigrationRunner builds a MigrationRunner for the given command and repo options -// Returns an error if homepath expansion fails for oldRepoOpt or newRepoOpt -func NewMigrationRunner(logger *Logger, command, oldRepoOpt, newRepoOpt string) (*MigrationRunner, error) { - oldPath, err := homedir.Expand(oldRepoOpt) - if err != nil { - return nil, err - } - newPath, err := homedir.Expand(newRepoOpt) - if err != nil { - return nil, err - } - return &MigrationRunner{ - logger: logger, - command: command, - oldRepoOpt: oldPath, - newRepoPath: newPath, - MigrationsProvider: DefaultMigrationsProvider, - }, nil -} - -// RunResult stores the needed results of calling Run() -type RunResult struct { - // full path to new repo (migrated or not). - // This is blank unless repo was cloned -- if it errors out too early or for "describe" - NewRepoPath string - - // Old version and new version. If no applicable migration is found, these will be equal, - // and if errors early they will = 0. - OldVersion, NewVersion uint - - // Any errors encountered by Run - Err error -} - -// Run executes the MigrationRunner -func (m *MigrationRunner) Run() RunResult { - repoVersion, err := m.repoVersion(m.oldRepoOpt) - if err != nil { - return RunResult{Err: err} - } - - targetVersion := m.getTargetMigrationVersion() - if repoVersion == targetVersion { - m.logger.Printf("Repo up-to-date: binary version %d = repo version %d", repoVersion, m.getTargetMigrationVersion()) - return RunResult{OldVersion: repoVersion, NewVersion: repoVersion} - } - - var mig Migration - if mig, err = m.findMigration(repoVersion); err != nil { - return RunResult{ - Err: errors.Wrapf(err, "migration check failed"), - OldVersion: repoVersion, - NewVersion: repoVersion, - } - } - // We just didn't find a migration that applies. This is fine. - if mig == nil { - return RunResult{ - OldVersion: repoVersion, - NewVersion: repoVersion, - } - } - err = m.runCommand(mig) - return RunResult{ - Err: err, - OldVersion: repoVersion, - NewVersion: targetVersion, - NewRepoPath: m.newRepoPath, - } -} - -// runCommand runs the migration command set in the Migration runner. -func (m *MigrationRunner) runCommand(mig Migration) error { - var err error - - from, to := mig.Versions() - - switch m.command { - case "describe": - // Describe is not expected to be run by a script, but by a human, so - // ignore the logger & print to stdout. - fmt.Printf("\n Migration from %d to %d:", from, to) - fmt.Println(mig.Describe()) - case "migrate": - if m.newRepoPath, err = CloneRepo(m.oldRepoOpt, to); err != nil { - return errors.Wrap(err, "clone repo failed") - } - m.logger.Printf("new repo will be at %s", m.newRepoPath) - - if err = mig.Migrate(m.newRepoPath); err != nil { - return errors.Wrap(err, "migration failed") - } - if err = m.validateAndUpdateVersion(to, m.newRepoPath, mig); err != nil { - return errors.Wrap(err, "validation failed") - } - if err = InstallNewRepo(m.oldRepoOpt, m.newRepoPath); err != nil { - return errors.Wrap(err, "installation failed") - } - case "buildonly": - if m.newRepoPath, err = CloneRepo(m.oldRepoOpt, to); err != nil { - return err - } - m.logger.Printf("new repo will be at %s", m.newRepoPath) - - if err = mig.Migrate(m.newRepoPath); err != nil { - return errors.Wrap(err, "migration failed") - } - if err = m.validateAndUpdateVersion(to, m.newRepoPath, mig); err != nil { - return errors.Wrap(err, "validation failed") - } - case "install": - if m.newRepoPath == "" { - return errors.New("installation failed: new repo path not specified") - } - - repoVer, err := repo.ReadVersion(m.newRepoPath) - if err != nil { - return errors.Wrap(err, "installation failed") - } - // quick check of version to help prevent install after a failed migration - newVer := strconv.FormatUint(uint64(to), 10) // to forestall parsing errors of version - if repoVer != newVer { - return fmt.Errorf("installation failed: repo has version %s, expected version %s", repoVer, newVer) - } - - if err = InstallNewRepo(m.oldRepoOpt, m.newRepoPath); err != nil { - return errors.Wrap(err, "installation failed") - } - } - return nil -} - -// repoVersion opens the version file for the given version, -// gets the version and validates it -func (m *MigrationRunner) repoVersion(repoPath string) (uint, error) { - strVersion, err := repo.ReadVersion(repoPath) - if err != nil { - return 0, err - } - - version, err := strconv.Atoi(strVersion) - if err != nil { - return 0, errors.Wrap(err, "repo version is corrupt") - } - - if version < 0 || version > 10000 { - return 0, errors.Errorf("repo version out of range: %s", strVersion) - } - - return uint(version), nil -} - -// validateAndUpdateVersion calls the migration's validate function and then bumps -// the version number in the new repo. -func (m *MigrationRunner) validateAndUpdateVersion(toVersion uint, newRepoPath string, mig Migration) error { - if err := mig.Validate(m.oldRepoOpt, newRepoPath); err != nil { - return err - } - return repo.WriteVersion(newRepoPath, toVersion) -} - -// getTargetMigrationVersion returns the maximum resulting version of any migration available from the provider. -func (m *MigrationRunner) getTargetMigrationVersion() uint { - targetVersion := uint(0) - migrations := m.MigrationsProvider() - for _, mig := range migrations { - _, to := mig.Versions() - if to > targetVersion { - targetVersion = to - } - } - return targetVersion -} - -// findMigration finds the list of migrations in the MigrationsProvder that is valid for -// upgrading current repoVersion -// returns: -// nil + error if >1 valid migration is found, or -// the migration to run + nil error -func (m *MigrationRunner) findMigration(repoVersion uint) (mig Migration, err error) { - var applicableMigs []Migration - for _, mig := range m.MigrationsProvider() { - from, to := mig.Versions() - if to != from+1 { - m.logger.Printf("refusing multi-version migration from %d to %d", from, to) - } else if from == repoVersion { - applicableMigs = append(applicableMigs, mig) - } else { - m.logger.Printf("skipping migration from %d to %d", from, to) - } - } - if len(applicableMigs) == 0 { - m.logger.Printf("did not find valid repo migration for version %d", repoVersion) - return nil, nil - } - if len(applicableMigs) > 1 { - return nil, fmt.Errorf("found >1 migration for version %d; cannot proceed", repoVersion) - } - return applicableMigs[0], nil -} diff --git a/tools/migration/internal/runner_buildonly_test.go b/tools/migration/internal/runner_buildonly_test.go deleted file mode 100644 index 157178d003..0000000000 --- a/tools/migration/internal/runner_buildonly_test.go +++ /dev/null @@ -1,41 +0,0 @@ -package internal_test - -import ( - "os" - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - . "github.com/filecoin-project/go-filecoin/tools/migration/internal" -) - -func TestMigrationRunner_RunBuildonly(t *testing.T) { - tf.UnitTest(t) - - container, repoSymLink := RequireInitRepo(t, 0) - oldRepoPath := repo.RequireReadLink(t, repoSymLink) - defer repo.RequireRemoveAll(t, container) - - t.Run("clones repo, updates version, does not install", func(t *testing.T) { - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "buildonly", repoSymLink, "") - require.NoError(t, err) - runner.MigrationsProvider = testProviderPasses - - runResult := runner.Run() - assert.NoError(t, runResult.Err) - - stat, err := os.Stat(runResult.NewRepoPath) - require.NoError(t, err) - assert.True(t, stat.IsDir()) - - AssertBumpedVersion(t, runResult.NewRepoPath, repoSymLink, 0) - assert.Equal(t, uint(1), runResult.NewVersion) - AssertLinked(t, oldRepoPath, repoSymLink) - }) -} diff --git a/tools/migration/internal/runner_install_test.go b/tools/migration/internal/runner_install_test.go deleted file mode 100644 index c84bcb918e..0000000000 --- a/tools/migration/internal/runner_install_test.go +++ /dev/null @@ -1,94 +0,0 @@ -package internal_test - -import ( - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - . "github.com/filecoin-project/go-filecoin/tools/migration/internal" -) - -func TestMigrationRunner_RunInstall(t *testing.T) { - tf.IntegrationTest(t) - - t.Run("swaps out symlink", func(t *testing.T) { - container, repoSymlink := RequireInitRepo(t, 0) - defer repo.RequireRemoveAll(t, container) - - oldPath := repo.RequireReadLink(t, repoSymlink) - newPath, err := CloneRepo(repoSymlink, 1) - require.NoError(t, err) - require.NoError(t, repo.WriteVersion(newPath, 1)) // Fake migration - - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - - runner, err := NewMigrationRunner(logger, "install", repoSymlink, newPath) - require.NoError(t, err) - runner.MigrationsProvider = testProviderPasses - - runResult := runner.Run() - assert.NoError(t, runResult.Err) - AssertNewRepoInstalled(t, runResult.NewRepoPath, oldPath, repoSymlink) - }) - - t.Run("returns error if new-repo option is not given", func(t *testing.T) { - container, repoSymlink := RequireInitRepo(t, 0) - defer repo.RequireRemoveAll(t, container) - - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - - runner, err := NewMigrationRunner(logger, "install", repoSymlink, "") - require.NoError(t, err) - runner.MigrationsProvider = testProviderPasses - - runResult := runner.Run() - assert.EqualError(t, runResult.Err, "installation failed: new repo path not specified") - }) - - t.Run("returns error if new-repo is not found, and does not remove symlink", func(t *testing.T) { - container, repoSymlink := RequireInitRepo(t, 0) - defer repo.RequireRemoveAll(t, container) - oldPath := repo.RequireReadLink(t, repoSymlink) - - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "install", repoSymlink, "/tmp/nonexistent") - require.NoError(t, err) - runner.MigrationsProvider = testProviderPasses - - runResult := runner.Run() - - assert.EqualError(t, runResult.Err, "installation failed: open /tmp/nonexistent/version: no such file or directory") - AssertLinked(t, oldPath, repoSymlink) - }) - - t.Run("returns error if new repo does not have expected version", func(t *testing.T) { - container, repoSymlink := RequireInitRepo(t, 0) - defer repo.RequireRemoveAll(t, container) - oldPath := repo.RequireReadLink(t, repoSymlink) - - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - - newPath, err := CloneRepo(repoSymlink, 1) - require.NoError(t, err) - // Fail to actually update the version file - - runner, err := NewMigrationRunner(logger, "install", repoSymlink, newPath) - require.NoError(t, err) - runner.MigrationsProvider = testProviderPasses - - runResult := runner.Run() - assert.EqualError(t, runResult.Err, "installation failed: repo has version 0, expected version 1") - AssertLinked(t, oldPath, repoSymlink) - }) -} diff --git a/tools/migration/internal/runner_migrate_test.go b/tools/migration/internal/runner_migrate_test.go deleted file mode 100644 index d95ceba68a..0000000000 --- a/tools/migration/internal/runner_migrate_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package internal_test - -import ( - "testing" - - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - . "github.com/filecoin-project/go-filecoin/tools/migration/internal" -) - -func TestMigrationRunner_RunMigrate(t *testing.T) { - tf.UnitTest(t) - - container, repoSymLink := RequireInitRepo(t, 0) - oldRepoPath := repo.RequireReadLink(t, repoSymLink) - defer repo.RequireRemoveAll(t, container) - - t.Run("returns error when migration step fails", func(t *testing.T) { - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "migrate", repoSymLink, "") - require.NoError(t, err) - runner.MigrationsProvider = testProviderMigrationFails - runResult := runner.Run() - - assert.EqualError(t, runResult.Err, "migration failed: migration has failed") - }) - - t.Run("returns error when validation step fails", func(t *testing.T) { - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "migrate", repoSymLink, "") - require.NoError(t, err) - runner.MigrationsProvider = testProviderValidationFails - runResult := runner.Run() - assert.EqualError(t, runResult.Err, "validation failed: validation has failed") - }) - - t.Run("on success bumps version and installs new repo at symlink", func(t *testing.T) { - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "migrate", repoSymLink, "") - require.NoError(t, err) - runner.MigrationsProvider = testProviderPasses - - runResult := runner.Run() - assert.NoError(t, runResult.Err) - AssertBumpedVersion(t, runResult.NewRepoPath, oldRepoPath, 0) - AssertNewRepoInstalled(t, runResult.NewRepoPath, oldRepoPath, repoSymLink) - }) -} diff --git a/tools/migration/internal/runner_test.go b/tools/migration/internal/runner_test.go deleted file mode 100644 index 9ae5fab8ef..0000000000 --- a/tools/migration/internal/runner_test.go +++ /dev/null @@ -1,219 +0,0 @@ -package internal_test - -import ( - "errors" - "io/ioutil" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - . "github.com/filecoin-project/go-filecoin/tools/migration/internal" -) - -func TestMigrationRunner_Run(t *testing.T) { - tf.UnitTest(t) - - container, repoLink := RequireInitRepo(t, 0) - oldRepoPath := repo.RequireReadLink(t, repoLink) - defer repo.RequireRemoveAll(t, container) - - t.Run("valid command returns error if repo not found", func(t *testing.T) { - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "describe", "/home/filecoin-symlink", "doesnt/matter") - require.NoError(t, err) - assert.Error(t, runner.Run().Err, "no filecoin repo found in /home/filecoin-symlink.") - }) - - t.Run("can set MigrationsProvider", func(t *testing.T) { - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "describe", repoLink, "") - require.NoError(t, err) - runner.MigrationsProvider = testProviderPasses - - migrations := runner.MigrationsProvider() - assert.NotEmpty(t, migrations) - assert.NoError(t, runner.Run().Err) - }) - - t.Run("Does not run the migration if the repo is already up to date", func(t *testing.T) { - require.NoError(t, repo.WriteVersion(oldRepoPath, 1)) - - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "describe", repoLink, "") - require.NoError(t, err) - runner.MigrationsProvider = testProviderPasses - assert.NoError(t, runner.Run().Err) - AssertLogged(t, dummyLogFile, "Repo up-to-date: binary version 1 = repo version 1") - }) - - t.Run("Returns error when a valid migration is not found", func(t *testing.T) { - require.NoError(t, repo.WriteVersion(oldRepoPath, 199)) - - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "describe", repoLink, "") - require.NoError(t, err) - runner.MigrationsProvider = testProviderPasses - - assert.NoError(t, runner.Run().Err) - - out, err := ioutil.ReadFile(dummyLogPath) - require.NoError(t, err) - assert.Contains(t, string(out), "skipping migration from 0 to 1") - assert.Contains(t, string(out), "did not find valid repo migration for version 199") - }) - - t.Run("Returns error when repo version is invalid", func(t *testing.T) { - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "describe", repoLink, "") - require.NoError(t, err) - runner.MigrationsProvider = testProviderPasses - - require.NoError(t, ioutil.WriteFile(filepath.Join(oldRepoPath, "version"), []byte("-1"), 0644)) - assert.EqualError(t, runner.Run().Err, "repo version out of range: -1") - - require.NoError(t, repo.WriteVersion(oldRepoPath, 32767)) - assert.EqualError(t, runner.Run().Err, "repo version out of range: 32767") - }) - - t.Run("Returns error if version file does not contain an integer string", func(t *testing.T) { - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "describe", repoLink, "") - require.NoError(t, err) - runner.MigrationsProvider = testProviderPasses - - require.NoError(t, ioutil.WriteFile(filepath.Join(oldRepoPath, "version"), []byte("foo"), 0644)) - assert.EqualError(t, runner.Run().Err, "repo version is corrupt: strconv.Atoi: parsing \"foo\": invalid syntax") - }) - - t.Run("describe does not clone repo", func(t *testing.T) { - require.NoError(t, repo.WriteVersion(repoLink, 0)) - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "describe", repoLink, "") - require.NoError(t, err) - - runner.MigrationsProvider = testProviderPasses - - runResult := runner.Run() - require.NoError(t, runResult.Err) - assert.Equal(t, "", runResult.NewRepoPath) - }) - - t.Run("run fails if there is more than 1 applicable migration", func(t *testing.T) { - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "describe", repoLink, "") - require.NoError(t, err) - - runner.MigrationsProvider = func() []Migration { - return []Migration{ - &TestMigDoesNothing, - &TestMigDoesNothing, - } - } - assert.EqualError(t, runner.Run().Err, "migration check failed: found >1 migration for version 0; cannot proceed") - }) - - t.Run("run skips multiversion", func(t *testing.T) { - dummyLogFile, dummyLogPath := repo.RequireOpenTempFile(t, "logfile") - defer repo.RequireRemoveAll(t, dummyLogPath) - logger := NewLogger(dummyLogFile, false) - runner, err := NewMigrationRunner(logger, "describe", repoLink, "") - require.NoError(t, err) - - runner.MigrationsProvider = func() []Migration { - return []Migration{ - &TestMigDoesNothing, - &TestMigMultiversion, - } - } - assert.NoError(t, runner.Run().Err) - - out, err := ioutil.ReadFile(dummyLogPath) - require.NoError(t, err) - assert.Contains(t, string(out), "refusing multi-version migration from 1 to 3") - }) - - t.Run("newRepoOpt is ignored for commands other than install", func(t *testing.T) { - }) -} - -func testProviderPasses() []Migration { - return []Migration{&TestMigDoesNothing} -} - -func testProviderValidationFails() []Migration { - return []Migration{&TestMigFailsValidation} -} - -func testProviderMigrationFails() []Migration { - return []Migration{&TestMigFailsMigration} -} - -type TestMigration struct { - describeFunc func() string - migrateFunc func(string) error - versionsFunc func() (uint, uint) - validateFunc func(string, string) error -} - -func (m *TestMigration) Describe() string { - return m.describeFunc() -} - -func (m *TestMigration) Migrate(newRepoPath string) error { - return m.migrateFunc(newRepoPath) -} -func (m *TestMigration) Versions() (from, to uint) { - return m.versionsFunc() -} - -func (m *TestMigration) Validate(oldRepoPath, newRepoPath string) error { - return m.validateFunc(oldRepoPath, newRepoPath) -} - -var TestMigFailsValidation = TestMigration{ - describeFunc: func() string { return "migration fails validation step" }, - versionsFunc: func() (uint, uint) { return 0, 1 }, - migrateFunc: func(string) error { return nil }, - validateFunc: func(string, string) error { return errors.New("validation has failed") }, -} - -var TestMigDoesNothing = TestMigration{ - describeFunc: func() string { return "the migration that doesn't do anything" }, - versionsFunc: func() (uint, uint) { return 0, 1 }, - migrateFunc: func(string) error { return nil }, - validateFunc: func(string, string) error { return nil }, -} - -var TestMigFailsMigration = TestMigration{ - describeFunc: func() string { return "migration fails migration step" }, - versionsFunc: func() (uint, uint) { return 0, 1 }, - migrateFunc: func(string) error { return errors.New("migration has failed") }, - validateFunc: func(string, string) error { return nil }, -} - -var TestMigMultiversion = TestMigration{ - describeFunc: func() string { return "the migration that skips a version" }, - versionsFunc: func() (uint, uint) { return 1, 3 }, - migrateFunc: func(string) error { return nil }, - validateFunc: func(string, string) error { return nil }, -} diff --git a/tools/migration/internal/test_helpers.go b/tools/migration/internal/test_helpers.go deleted file mode 100644 index 095ac6653b..0000000000 --- a/tools/migration/internal/test_helpers.go +++ /dev/null @@ -1,69 +0,0 @@ -package internal - -import ( - "io/ioutil" - "os" - "path" - "strconv" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/filecoin-project/go-filecoin/internal/pkg/config" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" -) - -// AssertLogged asserts that a given string is contained in the given log file. -func AssertLogged(t *testing.T, logFile *os.File, subStr string) { - out, err := ioutil.ReadFile(logFile.Name()) - require.NoError(t, err) - outStr := string(out) - assert.Contains(t, outStr, subStr) -} - -// RequireInitRepo establishes a new repo symlink and directory inside a temporary container -// directory. Migrations of the repo are expected to be placed within the same container, such -// that a test can clean up arbitrary migrations by removing the container. -// Returns the path to the container directory, and the repo symlink inside it. -func RequireInitRepo(t *testing.T, version uint) (container, repoLink string) { - container = repo.RequireMakeTempDir(t, "migration-test") - repoLink = path.Join(container, "repo") - err := repo.InitFSRepo(repoLink, version, config.NewDefaultConfig()) - require.NoError(t, err) - return -} - -// AssertLinked verifies that repoLink points to oldRepoDir -func AssertLinked(t *testing.T, repoDir, repoLink string) { - newRepoTarget, err := os.Readlink(repoLink) - require.NoError(t, err) - assert.Equal(t, newRepoTarget, repoDir) -} - -// AssertNewRepoInstalled verifies that the repoLink points to newRepoDir, and that -// oldRepoDir is still there -func AssertNewRepoInstalled(t *testing.T, newRepoDir, oldRepoDir, repoLink string) { - linkTarget, err := os.Readlink(repoLink) - require.NoError(t, err) - assert.Equal(t, newRepoDir, linkTarget) - oldRepoStat, err := os.Stat(oldRepoDir) - require.NoError(t, err) - assert.True(t, oldRepoStat.IsDir()) -} - -// AssertRepoVersion verifies that the version in repoPath is equal to versionStr -func AssertRepoVersion(t *testing.T, versionStr, repoPath string) { - repoVersion, err := repo.ReadVersion(repoPath) - require.NoError(t, err) - assert.Equal(t, repoVersion, versionStr) -} - -// AssertBumpedVersion checks that the version oldRepoDir is as expected, -// that the version in newRepoDir is updated by 1 -func AssertBumpedVersion(t *testing.T, newRepoDir, oldRepoDir string, oldVersion uint64) { - oldVersionStr := strconv.FormatUint(oldVersion, 10) - AssertRepoVersion(t, oldVersionStr, oldRepoDir) - newVersionStr := strconv.FormatUint(oldVersion+1, 10) - AssertRepoVersion(t, newVersionStr, newRepoDir) -} diff --git a/tools/migration/main.go b/tools/migration/main.go deleted file mode 100644 index 8bd2d134a4..0000000000 --- a/tools/migration/main.go +++ /dev/null @@ -1,209 +0,0 @@ -package main - -import ( - "fmt" - "log" - "os" - "strings" - - "github.com/mitchellh/go-homedir" - - "github.com/filecoin-project/go-filecoin/tools/migration/internal" -) - -const defaultLogFilePath = "~/.filecoin-migration-logs" - -// USAGE is the usage documentation for the migration tool -const USAGE = ` -USAGE - go-filecoin-migrate -h|--help - go-filecoin-migrate (describe|buildonly|migrate) --old-repo= [-h|--help] [-v|--verbose] - go-filecoin-migrate install --old-repo= --new-repo= [-v|--verbose] - -COMMANDS - describe prints a description of what the current migration will do - - buildonly runs the migration and validations, but does not install the newly migrated - repo at the --old-repo symlink - - migrate runs migration, validations, and installs newly migrated repo at - --old-repo symlink - - install installs a newly migrated repo - -REQUIRED ARGUMENTS - --old-repo the symlink location of this node's filecoin home directory. This is required - even for the 'describe' command, as its repo version helps determine which migration - to run. This must be a symbolic link or migration will not proceed. - - --new-repo the location of a newly migrated repo. This is required only for the - install command and otherwise ignored. - -OPTIONS - -h, --help This message - -v --verbose Print diagnostic messages to stdout - --log-file The path of the file for writing detailed log output - -EXAMPLES - for a migration from version 1 to 2: - go-filecoin-migrate migrate --old-repo=~/.filecoin - Migrates then installs the repo. Migrated repo will be in ~/.filecoin_1_2_ - and symlinked to ~/.filecoin - - go-filecoin-migrate migrate --old-repo=/opt/filecoin - Migrates then installs the repo. Migrated repo will be in /opt/filecoin_1_2_ - and symlinked to /opt/filecoin - - go-filecoin-migrate build-only --old-repo=/opt/filecoin - Runs migration steps only. Migrated repo will be in /opt/filecoin_1_2_ - and symlinked to /opt/filecoin - - go-filecoin-migrate install --old-repo=/opt/filecoin --new-repo=/opt/filecoin-123445566860 --verbose - swaps out the link at /opt/filecoin to point to /opt/filecoin-123445566860, as long as - /opt/filecoin is a symlink and /opt/filecoin-123445566860 has an up-to-date version. -` - -func main() { // nolint: deadcode - if len(os.Args) < 2 { - showUsageAndExit(1) - } - - command := os.Args[1] - - switch command { - case "-h", "--help": - showUsageAndExit(0) - case "describe": - logger, err := newLoggerWithVerbose(true) - if err != nil { - exitErr(err.Error()) - } - - oldRepoOpt := findOldRepoOrExit(logger) - - // Errors are handled inside runRunner - _ = runRunner(logger, command, oldRepoOpt, "") - - case "buildonly", "migrate", "install": - logger, err := newLoggerWithVerbose(getVerbose()) - if err != nil { - exitErr(err.Error()) - } - - oldRepoOpt := findOldRepoOrExit(logger) - - var newRepoOpt string - var found bool - - if command == "install" { - newRepoOpt, found = findOpt("new-repo", os.Args) - if !found { - exitErrCloseLogger(fmt.Sprintf("--new-repo is required for 'install'\n%s\n", USAGE), logger) - } - } - - runResult := runRunner(logger, command, oldRepoOpt, newRepoOpt) - if runResult.NewRepoPath != "" { - logger.Printf("New repo location: %s", runResult.NewRepoPath) - } - if runResult.NewVersion != runResult.OldVersion { - logger.Printf("Repo has been migrated to version %d", runResult.NewVersion) - } - err = logger.Close() - if err != nil { - exitErr(err.Error()) - } - default: - exitErr(fmt.Sprintf("invalid command: %s\n%s\n", command, USAGE)) - } -} - -func runRunner(logger *internal.Logger, command string, oldRepoOpt string, newRepoOpt string) internal.RunResult { - runner, err := internal.NewMigrationRunner(logger, command, oldRepoOpt, newRepoOpt) - if err != nil { - exitErrCloseLogger(err.Error(), logger) - } - runResult := runner.Run() - if runResult.Err != nil { - exitErrCloseLogger(runResult.Err.Error(), logger) - } - return runResult -} - -func findOldRepoOrExit(logger *internal.Logger) string { - oldRepoOpt, found := findOpt("old-repo", os.Args) - if !found { - exitErrCloseLogger(fmt.Sprintf("--old-repo is required\n%s\n", USAGE), logger) - } - return oldRepoOpt -} - -// exitError exit(1)s the executable with the given error String -func exitErr(errstr string) { - log.New(os.Stderr, "", 0).Println("Error: " + errstr) - os.Exit(1) -} - -// exitErrorCloseLogger closes the logger and calls exitError -func exitErrCloseLogger(errstr string, logger *internal.Logger) { - err := logger.Close() - if err != nil { - errstr = fmt.Sprintf("%s. Error closing logfile when reporting this error %s", errstr, err.Error()) - } - exitErr(errstr) -} - -// showUsageAndExit prints out USAGE and exits with the given code. -func showUsageAndExit(code int) { - fmt.Print(USAGE) - os.Exit(code) -} - -// getVerbose parses os.Args looking for -v or --verbose. -// returns whether it was found. -func getVerbose() bool { - if _, found := findOpt("-v", os.Args); found { - return true - } - _, res := findOpt("--verbose", os.Args) - return res -} - -// newLoggerWithVerbose opens a new logger & logfile with verboseness set to `verb` -func newLoggerWithVerbose(verb bool) (*internal.Logger, error) { - path, err := getLogFilePath() - if err != nil { - return nil, err - } - - logFile, err := os.OpenFile(path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { - return nil, err - } - return internal.NewLogger(logFile, verb), nil -} - -// getLogFilePath returns the path of the logfile. -func getLogFilePath() (string, error) { - if logPath, found := findOpt("--log-file", os.Args); found { - return logPath, nil - } - - return homedir.Expand(defaultLogFilePath) -} - -// findOpt fetches option values. -// returns: string: value of option set with "=". If not set, returns "" -// bool: true if option was found, false if not -func findOpt(str string, args []string) (string, bool) { - for _, elem := range args { - if strings.Contains(elem, str) { - opt := strings.Split(elem, "=") - if len(opt) > 1 { - return opt[1], true - } - return "", true - } - } - return "", false -} diff --git a/tools/migration/main_test.go b/tools/migration/main_test.go deleted file mode 100644 index 1db7040de9..0000000000 --- a/tools/migration/main_test.go +++ /dev/null @@ -1,87 +0,0 @@ -package main_test - -import ( - "os" - "os/exec" - "path/filepath" - "testing" - - "github.com/filecoin-project/go-filecoin/build/project" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - "github.com/filecoin-project/go-filecoin/tools/migration/internal" -) - -func TestUsage(t *testing.T) { - tf.IntegrationTest(t) // because we're using exec.Command - command := requireGetMigrationBinary(t) - usage := `go-filecoin-migrate (describe|buildonly|migrate) --old-repo= [-h|--help] [-v|--verbose]` - - t.Run("bare invocation prints usage but exits with 1", func(t *testing.T) { - out, err := exec.Command(command).CombinedOutput() - assert.Contains(t, string(out), usage) - assert.Error(t, err) - }) - - t.Run("-h prints usage", func(t *testing.T) { - out, err := exec.Command(command, "-h").CombinedOutput() - assert.Contains(t, string(out), usage) - assert.NoError(t, err) - }) - - t.Run("--help prints usage", func(t *testing.T) { - out, err := exec.Command(command, "--help").CombinedOutput() - assert.Contains(t, string(out), usage) - assert.NoError(t, err) - }) -} - -func TestOptions(t *testing.T) { - tf.IntegrationTest(t) // because we're using exec.Command - command := requireGetMigrationBinary(t) - usage := `go-filecoin-migrate (describe|buildonly|migrate) --old-repo= [-h|--help] [-v|--verbose]` - - t.Run("error when calling with invalid command", func(t *testing.T) { - out, err := exec.Command(command, "foo", "--old-repo=something").CombinedOutput() - assert.Contains(t, string(out), "Error: invalid command: foo") - assert.Contains(t, string(out), usage) - assert.Error(t, err) - }) - - t.Run("accepts --verbose or -v with valid command", func(t *testing.T) { - repoDir, symlink := internal.RequireInitRepo(t, 1) - defer repo.RequireRemoveAll(t, repoDir) - defer repo.RequireRemoveAll(t, symlink) - - expected := "MetadataFormatJSONtoCBOR migrates the storage repo from version 1 to 2." - - out, err := exec.Command(command, "describe", "--old-repo="+symlink, "--verbose").CombinedOutput() - assert.NoError(t, err) - assert.Contains(t, string(out), expected) - - _, err = exec.Command(command, "describe", "--old-repo="+symlink, "-v").CombinedOutput() - assert.NoError(t, err) - assert.Contains(t, string(out), expected) - }) - - t.Run("requires --old-repo argument", func(t *testing.T) { - out, err := exec.Command(command, "describe").CombinedOutput() - expected := "Error: --old-repo is required" - assert.Error(t, err) - assert.Contains(t, string(out), expected) // should include describe output when implemented - assert.Contains(t, string(out), usage) - }) -} - -func requireGetMigrationBinary(t *testing.T) string { - root := project.Root() - - bin := filepath.Join(root, "tools/migration/go-filecoin-migrate") - _, err := os.Stat(bin) - require.NoError(t, err) - - return bin -} diff --git a/tools/migration/main_whitebox_test.go b/tools/migration/main_whitebox_test.go deleted file mode 100644 index 3ac23e431f..0000000000 --- a/tools/migration/main_whitebox_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package main - -import ( - "testing" - - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" - ast "github.com/stretchr/testify/assert" -) - -func TestMigrationRunner_findOpt(t *testing.T) { - tf.UnitTest(t) - assert := ast.New(t) - args := []string{"newRepo=/tmp/somedir", "verbose"} - - t.Run("returns the value+true for an option, if given", func(t *testing.T) { - val, found := findOpt("newRepo", args) - assert.True(found) - assert.Equal("/tmp/somedir", val) - }) - - t.Run("returns empty string + true for option with no value set", func(t *testing.T) { - val, found := findOpt("verbose", args) - assert.True(found) - assert.Equal("", val) - }) - - t.Run("returns empty string + false if option is not found", func(t *testing.T) { - val, found := findOpt("nuffin", args) - assert.False(found) - assert.Equal("", val) - }) -} diff --git a/tools/migration/migrations/repo-1-2/fixtures/repo-1.tgz b/tools/migration/migrations/repo-1-2/fixtures/repo-1.tgz deleted file mode 100644 index 336dad6a10..0000000000 Binary files a/tools/migration/migrations/repo-1-2/fixtures/repo-1.tgz and /dev/null differ diff --git a/tools/migration/migrations/repo-1-2/migration.go b/tools/migration/migrations/repo-1-2/migration.go deleted file mode 100644 index 20d8824cb3..0000000000 --- a/tools/migration/migrations/repo-1-2/migration.go +++ /dev/null @@ -1,385 +0,0 @@ -package migration12 - -import ( - "context" - "encoding/json" - "fmt" - - "github.com/filecoin-project/specs-actors/actors/abi" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-datastore" - bstore "github.com/ipfs/go-ipfs-blockstore" - "github.com/pkg/errors" - - "github.com/filecoin-project/go-filecoin/internal/pkg/block" - "github.com/filecoin-project/go-filecoin/internal/pkg/chain" - "github.com/filecoin-project/go-filecoin/internal/pkg/encoding" - "github.com/filecoin-project/go-filecoin/internal/pkg/repo" -) - -// This migration was written for a prior development state in order to demonstrate migration -// functionality and workflow. It's not expected to run against a current repo and the tests have -// since been removed. This code remains for the next migration author to use as a reference, -// after which we can probably remove it. - -// duplicate head key here to protect against future changes -var headKey = datastore.NewKey("/chain/heaviestTipSet") - -// migrationChainStore is a stripped down implementation of the Store interface -// based on Store, containing only the fields and functions needed for the migration. -// -// the extraction line is drawn at package level where the migration occurs, i.e. chain, -// and no further. -type migrationChainStore struct { - // BsPriv is the on disk storage for blocks. - BsPriv bstore.Blockstore - - // Ds is the datastore backing bsPriv. It is also accessed directly - // to set and get chain meta-data, specifically the tipset cidset to - // state root mapping, and the heaviest tipset cids. - Ds repo.Datastore - - // head is the tipset at the head of the best known chain. - Head block.TipSet -} - -// GetBlock retrieves a block by cid. -func (store *migrationChainStore) GetBlock(ctx context.Context, c cid.Cid) (*block.Block, error) { - data, err := store.BsPriv.Get(c) - if err != nil { - return nil, errors.Wrapf(err, "failed to get block %s", c.String()) - } - return block.DecodeBlock(data.RawData()) -} - -// MetadataFormatJSONtoCBOR is the migration from version 1 to 2. -type MetadataFormatJSONtoCBOR struct { - store *migrationChainStore -} - -// Describe describes the steps this migration will take. -func (m *MetadataFormatJSONtoCBOR) Describe() string { - return `MetadataFormatJSONtoCBOR migrates the storage repo from version 1 to 2. - - This migration changes chain store metadata serialization from JSON to CBOR. - The chain store metadata will be read in as JSON and rewritten as CBOR. - Chain store metadata consists of associations between tipset keys and state - root cids and the tipset key of the head of the chain. No other repo data is changed. -` -} - -// Migrate performs the migration steps -func (m *MetadataFormatJSONtoCBOR) Migrate(newRepoPath string) error { - // open the repo path - oldVer, _ := m.Versions() - - // This call performs some checks on the repo before we start. - fsrepo, err := repo.OpenFSRepo(newRepoPath, oldVer) - if err != nil { - return err - } - defer mustCloseRepo(fsrepo) - - // construct the chainstore to be migrated from FSRepo - m.store = &migrationChainStore{ - BsPriv: bstore.NewBlockstore(fsrepo.ChainDatastore()), - Ds: fsrepo.ChainDatastore(), - } - - if err = m.convertJSONtoCBOR(context.Background()); err != nil { - return err - } - return nil -} - -// Versions returns the old and new versions that are valid for this migration -func (m *MetadataFormatJSONtoCBOR) Versions() (from, to uint) { - return 1, 2 -} - -// Validate performs validation tests for the migration steps: -// Reads in the old chainstore and the new chainstore, -// Compares the two and returns error if they are not completely equal once loaded. -func (m *MetadataFormatJSONtoCBOR) Validate(oldRepoPath, newRepoPath string) error { - // open the repo path - oldVer, _ := m.Versions() - - // This call performs some checks on the repo before we start. - oldFsRepo, err := repo.OpenFSRepo(oldRepoPath, oldVer) - if err != nil { - return err - } - defer mustCloseRepo(oldFsRepo) - - // construct the chainstore from FSRepo - oldStore := &migrationChainStore{ - BsPriv: bstore.NewBlockstore(oldFsRepo.ChainDatastore()), - Ds: oldFsRepo.ChainDatastore(), - } - - // Version hasn't been updated yet. - newFsRepo, err := repo.OpenFSRepo(newRepoPath, oldVer) - if err != nil { - return err - } - defer mustCloseRepo(newFsRepo) - - newStore := &migrationChainStore{ - BsPriv: bstore.NewBlockstore(newFsRepo.ChainDatastore()), - Ds: newFsRepo.ChainDatastore(), - } - - ctx := context.Background() - - // compare entire chainstores - if err = compareChainStores(ctx, oldStore, newStore); err != nil { - return errors.Wrap(err, "old and new chainStores are not equal") - } - - return nil -} - -// convertJSONtoCBOR is adapted from chain Store.Load: -// 1. stripped out logging -// 2. instead of calling Store.PutTipSetMetadata it just calls -// writeTipSetAndStateAsCBOR, because block format is unchanged. -// 3. then calls writeHeadAsCBOR, instead of store.SetHead which also publishes an event -// and does some logging -// -// This migration will leave some fork metadata in JSON format in the repo, but it won't matter: -// for consensus purposes we don't care about uncle blocks, and if we see the block again, -// it will be over the network, then DataStore.Put will look for it as CBOR, won't find it and write it out as CBOR anyway. If it's never seen again we don't care about it. -func (m *MetadataFormatJSONtoCBOR) convertJSONtoCBOR(ctx context.Context) error { - tipCids, err := loadChainHeadAsJSON(m.store) - if err != nil { - return err - } - var blocks []*block.Block - // traverse starting from head to begin loading the chain - for it := tipCids.Iter(); !it.Complete(); it.Next() { - blk, err := m.store.GetBlock(ctx, it.Value()) - if err != nil { - return errors.Wrap(err, "failed to load block in head TipSet") - } - blocks = append(blocks, blk) - } - - headTs, err := block.NewTipSet(blocks...) - if err != nil { - return errors.Wrap(err, "failed to add validated block to TipSet") - } - - tipsetProvider := chain.TipSetProviderFromBlocks(ctx, m.store) - for iter := chain.IterAncestors(ctx, tipsetProvider, headTs); !iter.Complete(); err = iter.Next() { - if err != nil { - return err - } - - stateRoot, err := loadStateRootAsJSON(iter.Value(), m.store) - if err != nil { - return err - } - tipSetAndState := &chain.TipSetMetadata{ - TipSet: iter.Value(), - TipSetStateRoot: stateRoot, - } - // only write TipSet and State; Block and tipIndex formats are not changed. - if err = m.writeTipSetAndStateAsCBOR(tipSetAndState); err != nil { - return err - } - } - - // write head back out as CBOR - err = m.writeHeadAsCBOR(ctx, headTs.Key()) - if err != nil { - return err - } - return nil -} - -// writeHeadAsCBOR writes the head. Taken from Store.writeHead, which was called by -// setHeadPersistent. We don't need mutexes for this -func (m *MetadataFormatJSONtoCBOR) writeHeadAsCBOR(ctx context.Context, cids block.TipSetKey) error { - val, err := encoding.Encode(cids) - if err != nil { - return err - } - - // this writes the value to the FSRepo - return m.store.Ds.Put(headKey, val) -} - -// writeTipSetAndStateAsCBOR writes the tipset key and the state root id to the -// datastore. (taken from Store.writeTipSetAndState) -func (m *MetadataFormatJSONtoCBOR) writeTipSetAndStateAsCBOR(tsas *chain.TipSetMetadata) error { - if tsas.TipSetStateRoot == cid.Undef { - return errors.New("attempting to write state root cid.Undef") - } - val, err := encoding.Encode(tsas.TipSetStateRoot) - if err != nil { - return err - } - - // datastore keeps tsKey:stateRoot (k,v) pairs. - h, err := tsas.TipSet.Height() - if err != nil { - return err - } - keyStr := makeKey(tsas.TipSet.String(), h) - key := datastore.NewKey(keyStr) - - // this writes the value to the FSRepo - return m.store.Ds.Put(key, val) -} - -// loadChainHeadAsJSON loads the latest known head from disk assuming JSON format -func loadChainHeadAsJSON(chainStore *migrationChainStore) (block.TipSetKey, error) { - return loadChainHead(false, chainStore) -} - -// loadChainHeadAsCBOR loads the latest known head from disk assuming CBOR format -func loadChainHeadAsCBOR(store *migrationChainStore) (block.TipSetKey, error) { - return loadChainHead(true, store) -} - -// loadChainHead loads the chain head CIDs as either CBOR or JSON -func loadChainHead(asCBOR bool, store *migrationChainStore) (block.TipSetKey, error) { - var emptyCidSet block.TipSetKey - - bb, err := store.Ds.Get(headKey) - if err != nil { - return emptyCidSet, errors.Wrap(err, "failed to read headKey") - } - - var cids block.TipSetKey - if asCBOR { - err = encoding.Decode(bb, &cids) - - } else { - err = json.Unmarshal(bb, &cids) - } - if err != nil { - return emptyCidSet, errors.Wrap(err, "failed to cast headCids") - } - - return cids, nil -} - -// function wrapper for loading state root as JSON -func loadStateRootAsJSON(ts block.TipSet, store *migrationChainStore) (cid.Cid, error) { - return loadStateRoot(ts, false, store) -} - -// loadStateRoot loads the chain store metadata into store, updating its -// state root and then returning the state root + any error -// pass true to load as CBOR (new format) or false to load as JSON (old format) -func loadStateRoot(ts block.TipSet, asCBOR bool, store *migrationChainStore) (cid.Cid, error) { - h, err := ts.Height() - if err != nil { - return cid.Undef, err - } - key := datastore.NewKey(makeKey(ts.String(), h)) - bb, err := store.Ds.Get(key) - if err != nil { - return cid.Undef, errors.Wrapf(err, "failed to read tipset key %s", ts.String()) - } - - var stateRoot cid.Cid - if asCBOR { - err = encoding.Decode(bb, &stateRoot) - } else { - err = json.Unmarshal(bb, &stateRoot) - } - if err != nil { - return cid.Undef, errors.Wrapf(err, "failed to cast state root of tipset %s", ts.String()) - } - return stateRoot, nil -} - -// compareChainStores loads each chain store and iterates through each, comparing heads -// then state root at each iteration, returning error if: -// * at any point state roots are not equal -// * the old and new chain store iterators are not complete at the same time -// * at the end the two heads are not equal -func compareChainStores(ctx context.Context, oldStore *migrationChainStore, newStore *migrationChainStore) error { - oldTipCids, err := loadChainHeadAsJSON(oldStore) - if err != nil { - return err - } - - newTipCids, err := loadChainHeadAsCBOR(newStore) - if err != nil { - return err - } - - oldHeadTs, err := loadTipSet(ctx, oldTipCids, oldStore) - if err != nil { - return err - } - - newHeadTs, err := loadTipSet(ctx, newTipCids, newStore) - if err != nil { - return err - } - - if !newHeadTs.Equals(oldHeadTs) { - return errors.New("new and old head tipsets not equal") - } - - oldIt := chain.IterAncestors(ctx, chain.TipSetProviderFromBlocks(ctx, oldStore), oldHeadTs) - for newIt := chain.IterAncestors(ctx, chain.TipSetProviderFromBlocks(ctx, newStore), newHeadTs); !newIt.Complete(); err = newIt.Next() { - if err != nil { - return err - } - if oldIt.Complete() { - return errors.New("old chain store is shorter than new chain store") - } - - newSr, err := loadStateRoot(newIt.Value(), true, newStore) - if err != nil { - return err - } - - oldSr, err := loadStateRootAsJSON(oldIt.Value(), oldStore) - if err != nil { - return err - } - if !newSr.Equals(oldSr) { - return errors.New("current state root not equal for block") - } - if err = oldIt.Next(); err != nil { - return errors.Wrap(err, "old chain store Next failed") - } - } - if !oldIt.Complete() { - return errors.New("old chain store is longer than new chain store") - } - return nil -} - -func loadTipSet(ctx context.Context, cidSet block.TipSetKey, chainStore *migrationChainStore) (headTs block.TipSet, err error) { - var blocks []*block.Block - for iter := cidSet.Iter(); !iter.Complete(); iter.Next() { - blk, err := chainStore.GetBlock(ctx, iter.Value()) - if err != nil { - return headTs, errors.Wrap(err, "failed to load block in head TipSet") - } - blocks = append(blocks, blk) - } - headTs, err = block.NewTipSet(blocks...) - if err != nil { - return headTs, err - } - return headTs, nil -} - -func makeKey(pKey string, h abi.ChainEpoch) string { - return fmt.Sprintf("p-%s h-%d", pKey, h) -} - -func mustCloseRepo(fsRepo *repo.FSRepo) { - err := fsRepo.Close() - if err != nil { - panic(err) - } -} diff --git a/tools/prerelease-tool/main.go b/tools/prerelease-tool/main.go index 45d4e0b21a..cc0d2922af 100644 --- a/tools/prerelease-tool/main.go +++ b/tools/prerelease-tool/main.go @@ -29,7 +29,7 @@ func main() { dryRun := flag.Bool("dry-run", false, "perform a dry run instead of executing create/delete/update actions") limit := flag.Int("limit", 7, "limit of prereleases to keep") owner := flag.String("owner", "filecoin-project", "github owner or organization") - repo := flag.String("repo", "go-filecoin", "github project repository") + repo := flag.String("repo", "venus", "github project repository") token, ok := os.LookupEnv("GITHUB_TOKEN") if !ok { log.Fatal("Github token must be provided through GITHUB_TOKEN environment variable") @@ -40,10 +40,8 @@ func main() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) defer cancel() go func() { - select { - case <-ctx.Done(): - log.Print(ctx.Err()) - } + <-ctx.Done() + log.Print(ctx.Err()) }() tc := oauth2.NewClient(ctx, ts) client := github.NewClient(tc) @@ -127,7 +125,7 @@ func (r *prereleaseTool) deleteReleases(ctx context.Context, m releaseToDelete) return handleDeleteReleasesReturn(ok, err, deleteCount) } if resp.StatusCode != 204 { - return handleDeleteReleasesReturn(ok, fmt.Errorf(`Unexpected HTTP status code from release delete request. + return handleDeleteReleasesReturn(ok, fmt.Errorf(`unexpected HTTP status code from release delete request. Expected: 204 Got: %d`, resp.StatusCode), deleteCount) } resp, err = r.client.Git.DeleteRef(ctx, r.Owner, r.Repo, "tags/"+tag) @@ -135,7 +133,7 @@ func (r *prereleaseTool) deleteReleases(ctx context.Context, m releaseToDelete) return handleDeleteReleasesReturn(ok, err, deleteCount) } if resp.StatusCode != 204 { - return handleDeleteReleasesReturn(ok, fmt.Errorf(`Unexpected HTTP status code from release delete request. + return handleDeleteReleasesReturn(ok, fmt.Errorf(`unexpected HTTP status code from release delete request. Expected: 204 Got: %d`, resp.StatusCode), deleteCount) } deleteCount++ diff --git a/tools/prerelease-tool/main_test.go b/tools/prerelease-tool/main_test.go index 12c81bf419..4d712c7b30 100644 --- a/tools/prerelease-tool/main_test.go +++ b/tools/prerelease-tool/main_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - tf "github.com/filecoin-project/go-filecoin/internal/pkg/testhelpers/testflags" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" "github.com/google/go-github/github" "github.com/stretchr/testify/assert" ) diff --git a/tools/seed/index.go b/tools/seed/index.go new file mode 100644 index 0000000000..d03e9f3962 --- /dev/null +++ b/tools/seed/index.go @@ -0,0 +1,5 @@ +package seed + +// ID identifies sector storage by UUID. One sector storage should map to one +// filesystem, local or networked / shared by multiple machines +type ID string diff --git a/tools/seed/local.go b/tools/seed/local.go new file mode 100644 index 0000000000..aeda6d3396 --- /dev/null +++ b/tools/seed/local.go @@ -0,0 +1,15 @@ +package seed + +// LocalStorageMeta [path]/sectorstore.json +type LocalStorageMeta struct { + ID ID + + // A high weight means data is more likely to be stored in this path + Weight uint64 // 0 = readonly + + // Intermediate data for the sealing process will be stored here + CanSeal bool + + // Finalized sectors that will be proved over time will be stored here + CanStore bool +} diff --git a/tools/seed/seed.go b/tools/seed/seed.go new file mode 100644 index 0000000000..b9cd5b1605 --- /dev/null +++ b/tools/seed/seed.go @@ -0,0 +1,363 @@ +package seed + +import ( + "context" + "crypto/rand" + "encoding/csv" + "encoding/hex" + "encoding/json" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strconv" + "strings" + + "github.com/filecoin-project/venus/pkg/util/ffiwrapper/impl" + types "github.com/filecoin-project/venus/venus-shared/chain" + + ffi "github.com/filecoin-project/filecoin-ffi" + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-commp-utils/zerocomm" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" + "github.com/filecoin-project/specs-storage/storage" + + "github.com/google/uuid" + logging "github.com/ipfs/go-log/v2" + ic "github.com/libp2p/go-libp2p-core/crypto" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/minio/blake2b-simd" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/pkg/crypto" + "github.com/filecoin-project/venus/pkg/gen/genesis" + "github.com/filecoin-project/venus/pkg/util/ffiwrapper/basicfs" + "github.com/filecoin-project/venus/pkg/util/storiface" +) + +var log = logging.Logger("preseal") + +func PreSeal(maddr address.Address, spt abi.RegisteredSealProof, offset abi.SectorNumber, sectors int, sbroot string, preimage []byte, ki *crypto.KeyInfo, fakeSectors bool) (*genesis.Miner, *crypto.KeyInfo, error) { + mid, err := address.IDFromAddress(maddr) + if err != nil { + return nil, nil, err + } + + if err := os.MkdirAll(sbroot, 0775); err != nil { //nolint:gosec + return nil, nil, err + } + + next := offset + + sbfs := &basicfs.Provider{ + Root: sbroot, + } + + sb, err := impl.New(sbfs) + if err != nil { + return nil, nil, err + } + + ssize, err := spt.SectorSize() + if err != nil { + return nil, nil, err + } + + var sealedSectors []*genesis.PreSeal + for i := 0; i < sectors; i++ { + sid := abi.SectorID{Miner: abi.ActorID(mid), Number: next} + ref := storage.SectorRef{ID: sid, ProofType: spt} + next++ + + var preseal *genesis.PreSeal + if !fakeSectors { + preseal, err = presealSector(sb, sbfs, ref, ssize, preimage) + if err != nil { + return nil, nil, err + } + } else { + preseal, err = presealSectorFake(sbfs, ref, ssize) + if err != nil { + return nil, nil, err + } + } + + sealedSectors = append(sealedSectors, preseal) + } + + var minerAddr address.Address + if ki != nil { + minerAddr, err = ki.Address() + if err != nil { + return nil, nil, err + } + } else { + newKeyInfo, err := crypto.NewBLSKeyFromSeed(rand.Reader) + if err != nil { + return nil, nil, err + } + ki = &newKeyInfo + minerAddr, err = ki.Address() + if err != nil { + return nil, nil, err + } + } + + var pid peer.ID + { + log.Warn("PeerID not specified, generating dummy") + p, _, err := ic.GenerateEd25519Key(rand.Reader) + if err != nil { + return nil, nil, err + } + + pid, err = peer.IDFromPrivateKey(p) + if err != nil { + return nil, nil, err + } + } + + miner := &genesis.Miner{ + ID: maddr, + Owner: minerAddr, + Worker: minerAddr, + MarketBalance: big.Zero(), + PowerBalance: big.Zero(), + SectorSize: ssize, + Sectors: sealedSectors, + PeerID: pid, + } + + if err := createDeals(miner, ki, maddr, ssize); err != nil { + return nil, nil, xerrors.Errorf("creating deals: %w", err) + } + + { + b, err := json.MarshalIndent(&LocalStorageMeta{ + ID: ID(uuid.New().String()), + Weight: 0, // read-only + CanSeal: false, + CanStore: false, + }, "", " ") + if err != nil { + return nil, nil, xerrors.Errorf("marshaling storage config: %w", err) + } + + if err := ioutil.WriteFile(filepath.Join(sbroot, "sectorstore.json"), b, 0644); err != nil { + return nil, nil, xerrors.Errorf("persisting storage metadata (%s): %w", filepath.Join(sbroot, "storage.json"), err) + } + } + + return miner, ki, nil +} + +func presealSector(sb *impl.Sealer, sbfs *basicfs.Provider, sid storage.SectorRef, ssize abi.SectorSize, preimage []byte) (*genesis.PreSeal, error) { + pi, err := sb.AddPiece(context.TODO(), sid, nil, abi.PaddedPieceSize(ssize).Unpadded(), rand.Reader) + if err != nil { + return nil, err + } + + trand := blake2b.Sum256(preimage) + ticket := abi.SealRandomness(trand[:]) + + fmt.Printf("sector-id: %d, piece info: %v\n", sid, pi) + + in2, err := sb.SealPreCommit1(context.TODO(), sid, ticket, []abi.PieceInfo{pi}) + if err != nil { + return nil, xerrors.Errorf("commit: %w", err) + } + + cids, err := sb.SealPreCommit2(context.TODO(), sid, in2) + if err != nil { + return nil, xerrors.Errorf("commit: %w", err) + } + + if err := sb.FinalizeSector(context.TODO(), sid, nil); err != nil { + return nil, xerrors.Errorf("trim cache: %w", err) + } + + if err := cleanupUnsealed(sbfs, sid); err != nil { + return nil, xerrors.Errorf("remove unsealed file: %w", err) + } + + log.Warn("PreCommitOutput: ", sid, cids.Sealed, cids.Unsealed) + + return &genesis.PreSeal{ + CommR: cids.Sealed, + CommD: cids.Unsealed, + SectorID: sid.ID.Number, + ProofType: sid.ProofType, + }, nil +} + +func presealSectorFake(sbfs *basicfs.Provider, sid storage.SectorRef, ssize abi.SectorSize) (*genesis.PreSeal, error) { + paths, done, err := sbfs.AcquireSector(context.TODO(), sid, 0, storiface.FTSealed|storiface.FTCache, storiface.PathSealing) + if err != nil { + return nil, xerrors.Errorf("acquire unsealed sector: %w", err) + } + defer done() + + if err := os.Mkdir(paths.Cache, 0755); err != nil { + return nil, xerrors.Errorf("mkdir cache: %w", err) + } + + commr, err := ffi.FauxRep(sid.ProofType, paths.Cache, paths.Sealed) + if err != nil { + return nil, xerrors.Errorf("fauxrep: %w", err) + } + + return &genesis.PreSeal{ + CommR: commr, + CommD: zerocomm.ZeroPieceCommitment(abi.PaddedPieceSize(ssize).Unpadded()), + SectorID: sid.ID.Number, + ProofType: sid.ProofType, + }, nil +} + +func cleanupUnsealed(sbfs *basicfs.Provider, ref storage.SectorRef) error { + paths, done, err := sbfs.AcquireSector(context.TODO(), ref, storiface.FTUnsealed, storiface.FTNone, storiface.PathSealing) + if err != nil { + return err + } + defer done() + + return os.Remove(paths.Unsealed) +} + +func WriteGenesisMiner(maddr address.Address, sbroot string, gm *genesis.Miner, key *crypto.KeyInfo) error { + output := map[string]genesis.Miner{ + maddr.String(): *gm, + } + + out, err := json.MarshalIndent(output, "", " ") + if err != nil { + return err + } + + log.Infof("Writing preseal manifest to %s", filepath.Join(sbroot, "pre-seal-"+maddr.String()+".json")) + + if err := ioutil.WriteFile(filepath.Join(sbroot, "pre-seal-"+maddr.String()+".json"), out, 0664); err != nil { + return err + } + + if key != nil { + b, err := json.Marshal(key) + if err != nil { + return err + } + + // TODO: allow providing key + if err := ioutil.WriteFile(filepath.Join(sbroot, "pre-seal-"+maddr.String()+".key"), []byte(hex.EncodeToString(b)), 0664); err != nil { + return err + } + } + + return nil +} + +func createDeals(m *genesis.Miner, ki *crypto.KeyInfo, maddr address.Address, ssize abi.SectorSize) error { + addr, err := ki.Address() + if err != nil { + return err + } + for i, sector := range m.Sectors { + proposal := &market2.DealProposal{ + PieceCID: sector.CommD, + PieceSize: abi.PaddedPieceSize(ssize), + Client: addr, + Provider: maddr, + Label: fmt.Sprintf("%d", i), + StartEpoch: 0, + EndEpoch: 9001, + StoragePricePerEpoch: big.Zero(), + ProviderCollateral: big.Zero(), + ClientCollateral: big.Zero(), + } + + sector.Deal = *proposal + } + + return nil +} + +type GenAccountEntry struct { + Version int + ID string + Amount types.FIL + VestingMonths int + CustodianID int + M int + N int + Addresses []address.Address + Type string + Sig1 string + Sig2 string +} + +func ParseMultisigCsv(csvf string) ([]GenAccountEntry, error) { + fileReader, err := os.Open(csvf) + if err != nil { + return nil, xerrors.Errorf("read multisig csv: %w", err) + } + defer fileReader.Close() //nolint:errcheck + r := csv.NewReader(fileReader) + records, err := r.ReadAll() + if err != nil { + return nil, xerrors.Errorf("read multisig csv: %w", err) + } + var entries []GenAccountEntry + for i, e := range records[1:] { + var addrs []address.Address + addrStrs := strings.Split(strings.TrimSpace(e[7]), ":") + for j, a := range addrStrs { + addr, err := address.NewFromString(a) + if err != nil { + return nil, xerrors.Errorf("failed to parse address %d in row %d (%q): %w", j, i, a, err) + } + addrs = append(addrs, addr) + } + + balance, err := types.ParseFIL(strings.TrimSpace(e[2])) + if err != nil { + return nil, xerrors.Errorf("failed to parse account balance: %w", err) + } + + vesting, err := strconv.Atoi(strings.TrimSpace(e[3])) + if err != nil { + return nil, xerrors.Errorf("failed to parse vesting duration for record %d: %w", i, err) + } + + custodianID, err := strconv.Atoi(strings.TrimSpace(e[4])) + if err != nil { + return nil, xerrors.Errorf("failed to parse custodianID in record %d: %w", i, err) + } + threshold, err := strconv.Atoi(strings.TrimSpace(e[5])) + if err != nil { + return nil, xerrors.Errorf("failed to parse multisigM in record %d: %w", i, err) + } + num, err := strconv.Atoi(strings.TrimSpace(e[6])) + if err != nil { + return nil, xerrors.Errorf("Number of addresses be integer: %w", err) + } + if e[0] != "1" { + return nil, xerrors.Errorf("record version must be 1") + } + entries = append(entries, GenAccountEntry{ + Version: 1, + ID: e[1], + Amount: balance, + CustodianID: custodianID, + VestingMonths: vesting, + M: threshold, + N: num, + Type: e[8], + Sig1: e[9], + Sig2: e[10], + Addresses: addrs, + }) + } + + return entries, nil +} diff --git a/vendors/filecoin-ffi b/vendors/filecoin-ffi deleted file mode 160000 index e297d672ba..0000000000 --- a/vendors/filecoin-ffi +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e297d672bab07d5a2c87d2e0cc8d5d98177ec8b9 diff --git a/venus-component/go.mod b/venus-component/go.mod new file mode 100644 index 0000000000..306c467904 --- /dev/null +++ b/venus-component/go.mod @@ -0,0 +1,15 @@ +module github.com/filecoin-project/venus/venus-component + +go 1.16 + +require ( + github.com/filecoin-project/go-cbor-util v0.0.1 + github.com/filecoin-project/venus/venus-shared v0.0.0 + github.com/ipfs/go-cid v0.1.0 + github.com/ipfs/go-log v1.0.5 // indirect + github.com/libp2p/go-libp2p-core v0.11.0 + go.opencensus.io v0.23.0 + go.uber.org/fx v1.15.0 +) + +replace github.com/filecoin-project/venus/venus-shared => github.com/dtynn/venus/venus-shared v0.0.0-20211123072147-edbf49c4507e diff --git a/venus-component/go.sum b/venus-component/go.sum new file mode 100644 index 0000000000..851e51e95b --- /dev/null +++ b/venus-component/go.sum @@ -0,0 +1,538 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y= +github.com/Stebalien/go-bitfield v0.0.1/go.mod h1:GNjFpasyUVkHMsfEOk8EFLJ9syQ6SI+XWrX9Wf2XH0s= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= +github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btcd v0.0.0-20190605094302-a0d1e3e36d50/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= +github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dtynn/venus/venus-shared v0.0.0-20211123072147-edbf49c4507e h1:gv9YiO71L/FIQSjW0OhHLr1g8ipO/R0/9hgqzqPBEf8= +github.com/dtynn/venus/venus-shared v0.0.0-20211123072147-edbf49c4507e/go.mod h1:goyPoyE7NO1pTxRgBKb9dzUyx/vQngs3pYWNsPrPf3Q= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/filecoin-project/go-address v0.0.3/go.mod h1:jr8JxKsYx+lQlQZmF5i2U0Z+cGQ59wMIps/8YW/lDj8= +github.com/filecoin-project/go-address v0.0.5/go.mod h1:jr8JxKsYx+lQlQZmF5i2U0Z+cGQ59wMIps/8YW/lDj8= +github.com/filecoin-project/go-address v0.0.6 h1:DWQtj38ax+ogHwyH3VULRIoT8E6loyXqsk/p81xoY7M= +github.com/filecoin-project/go-address v0.0.6/go.mod h1:7B0/5DA13n6nHkB8bbGx1gWzG/dbTsZ0fgOJVGsM3TE= +github.com/filecoin-project/go-amt-ipld/v2 v2.1.0 h1:t6qDiuGYYngDqaLc2ZUvdtAg4UNxPeOYaXhBWSNsVaM= +github.com/filecoin-project/go-amt-ipld/v2 v2.1.0/go.mod h1:nfFPoGyX0CU9SkXX8EoCcSuHN1XcbN0c6KBh7yvP5fs= +github.com/filecoin-project/go-amt-ipld/v3 v3.0.0/go.mod h1:Qa95YNAbtoVCTSVtX38aAC1ptBnJfPma1R/zZsKmx4o= +github.com/filecoin-project/go-amt-ipld/v3 v3.1.0 h1:ZNJ9tEG5bE72vBWYiuh5bkxJVM3ViHNOmQ7qew9n6RE= +github.com/filecoin-project/go-amt-ipld/v3 v3.1.0/go.mod h1:UjM2QhDFrrjD5s1CdnkJkat4ga+LqZBZgTMniypABRo= +github.com/filecoin-project/go-bitfield v0.2.0/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= +github.com/filecoin-project/go-bitfield v0.2.3/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= +github.com/filecoin-project/go-bitfield v0.2.4 h1:uZ7MeE+XfM5lqrHJZ93OnhQKc/rveW8p9au0C68JPgk= +github.com/filecoin-project/go-bitfield v0.2.4/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= +github.com/filecoin-project/go-cbor-util v0.0.1 h1:E1LYZYTtjfAQwCReho0VXvbu8t3CYAVPiMx8EiV/VAs= +github.com/filecoin-project/go-cbor-util v0.0.1/go.mod h1:pqTiPHobNkOVM5thSRsHYjyQfq7O5QSCMhvuu9JoDlg= +github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 h1:2pMXdBnCiXjfCYx/hLqFxccPoqsSveQFxVLvNxy9bus= +github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= +github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= +github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= +github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= +github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0/go.mod h1:7aWZdaQ1b16BVoQUYR+eEvrDCGJoPLxFpDynFjYfBjI= +github.com/filecoin-project/go-hamt-ipld/v3 v3.0.1/go.mod h1:gXpNmr3oQx8l3o7qkGyDjJjYSRX7hp/FGOStdqrWyDI= +github.com/filecoin-project/go-hamt-ipld/v3 v3.1.0 h1:rVVNq0x6RGQIzCo1iiJlGFm9AGIZzeifggxtKMU7zmI= +github.com/filecoin-project/go-hamt-ipld/v3 v3.1.0/go.mod h1:bxmzgT8tmeVQA1/gvBwFmYdT8SOFUwB3ovSUfG1Ux0g= +github.com/filecoin-project/go-state-types v0.0.0-20200928172055-2df22083d8ab/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.0.0-20201102161440-c8033295a1fc/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.1.0/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.1.1-0.20210810190654-139e0e79e69e/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.1.1 h1:LR260vya4p++atgf256W6yV3Lxl5mKrBFcEZePWQrdg= +github.com/filecoin-project/go-state-types v0.1.1/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/specs-actors v0.9.13 h1:rUEOQouefi9fuVY/2HOroROJlZbOzWYXXeIh41KF2M4= +github.com/filecoin-project/specs-actors v0.9.13/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= +github.com/filecoin-project/specs-actors/v2 v2.3.5-0.20210114162132-5b58b773f4fb/go.mod h1:LljnY2Mn2homxZsmokJZCpRuhOPxfXhvcek5gWkmqAc= +github.com/filecoin-project/specs-actors/v2 v2.3.5 h1:PbT4tPlSXZ8sRgajhb4D8AOEmiaaZ+jg6tc6BBv8VQc= +github.com/filecoin-project/specs-actors/v2 v2.3.5/go.mod h1:LljnY2Mn2homxZsmokJZCpRuhOPxfXhvcek5gWkmqAc= +github.com/filecoin-project/specs-actors/v3 v3.1.0/go.mod h1:mpynccOLlIRy0QnR008BwYBwT9fen+sPR13MA1VmMww= +github.com/filecoin-project/specs-actors/v3 v3.1.1 h1:BE8fsns1GnEOxt1DTE5LxBK2FThXtWmCChgcJoHTg0E= +github.com/filecoin-project/specs-actors/v3 v3.1.1/go.mod h1:mpynccOLlIRy0QnR008BwYBwT9fen+sPR13MA1VmMww= +github.com/filecoin-project/specs-actors/v4 v4.0.0/go.mod h1:TkHXf/l7Wyw4ZejyXIPS2rK8bBO0rdwhTZyQQgaglng= +github.com/filecoin-project/specs-actors/v4 v4.0.1 h1:AiWrtvJZ63MHGe6rn7tPu4nSUY8bA1KDNszqJaD5+Fg= +github.com/filecoin-project/specs-actors/v4 v4.0.1/go.mod h1:TkHXf/l7Wyw4ZejyXIPS2rK8bBO0rdwhTZyQQgaglng= +github.com/filecoin-project/specs-actors/v5 v5.0.4 h1:OY7BdxJWlUfUFXWV/kpNBYGXNPasDIedf42T3sGx08s= +github.com/filecoin-project/specs-actors/v5 v5.0.4/go.mod h1:5BAKRAMsOOlD8+qCw4UvT/lTLInCJ3JwOWZbX8Ipwq4= +github.com/filecoin-project/specs-actors/v6 v6.0.1 h1:laxvHNsvrq83Y9n+W7znVCePi3oLyRf0Rkl4jFO8Wew= +github.com/filecoin-project/specs-actors/v6 v6.0.1/go.mod h1:V1AYfi5GkHXipx1mnVivoICZh3wtwPxDVuds+fbfQtk= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f h1:KMlcu9X58lhTA/KrfX8Bi1LQSO4pzoVjTiL3h4Jk+Zk= +github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= +github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= +github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/ipfs/bbloom v0.0.1/go.mod h1:oqo8CVWsJFMOZqTglBG4wydCE4IQA/G2/SEofB0rjUI= +github.com/ipfs/go-bitswap v0.1.0/go.mod h1:FFJEf18E9izuCqUtHxbWEvq+reg7o4CW5wSAE1wsxj0= +github.com/ipfs/go-bitswap v0.1.2/go.mod h1:qxSWS4NXGs7jQ6zQvoPY3+NmOfHHG47mhkiLzBpJQIs= +github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc= +github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= +github.com/ipfs/go-block-format v0.0.3 h1:r8t66QstRp/pd/or4dpnbVfXT5Gt7lOqRvC+/dDTpMc= +github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk= +github.com/ipfs/go-blockservice v0.1.0/go.mod h1:hzmMScl1kXHg3M2BjTymbVPjv627N7sYcvYaKbop39M= +github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= +github.com/ipfs/go-cid v0.0.6-0.20200501230655-7c82f3b81c00/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= +github.com/ipfs/go-cid v0.0.6/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-cid v0.1.0 h1:YN33LQulcRHjfom/i25yoOZR4Telp1Hr/2RU3d0PnC0= +github.com/ipfs/go-cid v0.1.0/go.mod h1:rH5/Xv83Rfy8Rw6xG+id3DYAMUVmem1MowoKwdXmN2o= +github.com/ipfs/go-datastore v0.0.1/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= +github.com/ipfs/go-datastore v0.0.5/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= +github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= +github.com/ipfs/go-ds-badger v0.0.2/go.mod h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjvRcKeSGij8= +github.com/ipfs/go-ds-leveldb v0.0.1/go.mod h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc= +github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08= +github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk= +github.com/ipfs/go-ipfs-chunker v0.0.1/go.mod h1:tWewYK0we3+rMbOh7pPFGDyypCtvGcBFymgY4rSDLAw= +github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= +github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= +github.com/ipfs/go-ipfs-ds-help v0.0.1/go.mod h1:gtP9xRaZXqIQRh1HRpp595KbBEdgqWFxefeVKOV8sxo= +github.com/ipfs/go-ipfs-exchange-interface v0.0.1/go.mod h1:c8MwfHjtQjPoDyiy9cFquVtVHkO9b9Ob3FG91qJnWCM= +github.com/ipfs/go-ipfs-exchange-offline v0.0.1/go.mod h1:WhHSFCVYX36H/anEKQboAzpUws3x7UeEGkzQc3iNkM0= +github.com/ipfs/go-ipfs-files v0.0.3/go.mod h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4= +github.com/ipfs/go-ipfs-files v0.0.4/go.mod h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4= +github.com/ipfs/go-ipfs-posinfo v0.0.1/go.mod h1:SwyeVP+jCwiDu0C313l/8jg6ZxM0qqtlt2a0vILTc1A= +github.com/ipfs/go-ipfs-pq v0.0.1/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY= +github.com/ipfs/go-ipfs-routing v0.1.0/go.mod h1:hYoUkJLyAUKhF58tysKpids8RNDPO42BVMgK5dNsoqY= +github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc= +github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= +github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= +github.com/ipfs/go-ipld-cbor v0.0.2/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= +github.com/ipfs/go-ipld-cbor v0.0.3/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= +github.com/ipfs/go-ipld-cbor v0.0.4/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= +github.com/ipfs/go-ipld-cbor v0.0.5 h1:ovz4CHKogtG2KB/h1zUp5U0c/IzZrL435rCh5+K/5G8= +github.com/ipfs/go-ipld-cbor v0.0.5/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= +github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms= +github.com/ipfs/go-ipld-format v0.0.2 h1:OVAGlyYT6JPZ0pEfGntFPS40lfrDmaDbQwNHEY2G9Zs= +github.com/ipfs/go-ipld-format v0.0.2/go.mod h1:4B6+FM2u9OJ9zCV+kSbgFAZlOrv1Hqbf0INGQgiKf9k= +github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= +github.com/ipfs/go-log v1.0.0/go.mod h1:JO7RzlMK6rA+CIxFMLOuB6Wf5b81GDiKElL7UPSIKjA= +github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= +github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= +github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= +github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= +github.com/ipfs/go-log/v2 v2.1.3 h1:1iS3IU7aXRlbgUpN8yTTpJ53NXYjAe37vcI5+5nYrzk= +github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= +github.com/ipfs/go-merkledag v0.2.3/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= +github.com/ipfs/go-merkledag v0.2.4/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= +github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY= +github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U= +github.com/ipfs/go-unixfs v0.2.2-0.20190827150610-868af2e9e5cb/go.mod h1:IwAAgul1UQIcNZzKPYZWOCijryFBeCV79cNubPzol+k= +github.com/ipfs/go-verifcid v0.0.1/go.mod h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZc0g37pY0= +github.com/ipld/go-car v0.1.0/go.mod h1:RCWzaUh2i4mOEkB3W45Vc+9jnS/M6Qay5ooytiBHl3g= +github.com/ipld/go-ipld-prime v0.0.2-0.20191108012745-28a82f04c785/go.mod h1:bDDSvVz7vaK12FNvMeRYnpRFkSUPNQOiCYQezMD/P3w= +github.com/ipld/go-ipld-prime-proto v0.0.0-20191113031812-e32bd156a1e5/go.mod h1:gcvzoEDBjwycpXt3LBE061wT9f46szXGHAmj9uoP6fU= +github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52 h1:QG4CGBqCeuBo6aZlGAamSkxWdgWfZGeE49eUOWJPA4c= +github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52/go.mod h1:fdg+/X9Gg4AsAIzWpEHwnqd+QY3b7lajxyjE1m4hkq4= +github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= +github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4uRSZMmzKNLoXvTu1sfx+1kv/DojUlPrSZGs= +github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= +github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c/go.mod h1:sdx1xVM9UuLw1tXnhJWN3piypTUO3vCIHYmG15KE/dU= +github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= +github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= +github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= +github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= +github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= +github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= +github.com/libp2p/go-conn-security-multistream v0.1.0/go.mod h1:aw6eD7LOsHEX7+2hJkDxw1MteijaVcI+/eP2/x3J1xc= +github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= +github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= +github.com/libp2p/go-libp2p v0.1.0/go.mod h1:6D/2OBauqLUoqcADOJpn9WbKqvaM07tDw68qHM0BxUM= +github.com/libp2p/go-libp2p v0.1.1/go.mod h1:I00BRo1UuUSdpuc8Q2mN7yDF/oTUTRAX6JWpTiK9Rp8= +github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= +github.com/libp2p/go-libp2p-blankhost v0.1.1/go.mod h1:pf2fvdLJPsC1FsVrNP3DUUvMzUts2dsLLBEpo1vW1ro= +github.com/libp2p/go-libp2p-circuit v0.1.0/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFkZeIRmfunbA7pmFh8= +github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= +github.com/libp2p/go-libp2p-core v0.0.2/go.mod h1:9dAcntw/n46XycV4RnlBq3BpgrmyUi9LuoTNdPrbUco= +github.com/libp2p/go-libp2p-core v0.0.3/go.mod h1:j+YQMNz9WNSkNezXOsahp9kwZBKBvxLpKD316QWSJXE= +github.com/libp2p/go-libp2p-core v0.11.0 h1:75jAgdA+IChNa+/mZXogfmrGkgwxkVvxmIC7pV+F6sI= +github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= +github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI= +github.com/libp2p/go-libp2p-discovery v0.1.0/go.mod h1:4F/x+aldVHjHDHuX85x1zWoFTGElt8HnoDzwkFZm29g= +github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= +github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo= +github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE= +github.com/libp2p/go-libp2p-nat v0.0.4/go.mod h1:N9Js/zVtAXqaeT99cXgTV9e75KpnWCvVOiGzlcHmBbY= +github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= +github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY= +github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY= +github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= +github.com/libp2p/go-libp2p-secio v0.1.0/go.mod h1:tMJo2w7h3+wN4pgU2LSYeiKPrfqBgkOsdiKK77hE7c8= +github.com/libp2p/go-libp2p-swarm v0.1.0/go.mod h1:wQVsCdjsuZoc730CgOvh5ox6K8evllckjebkdiY5ta4= +github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-testing v0.0.4/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-transport-upgrader v0.1.1/go.mod h1:IEtA6or8JUbsV07qPW4r01GnTenLW4oi3lOPbUMGJJA= +github.com/libp2p/go-libp2p-yamux v0.2.0/go.mod h1:Db2gU+XfLpm6E4rG5uGCFX6uXA8MEXOxFcRoXUODaK8= +github.com/libp2p/go-libp2p-yamux v0.2.1/go.mod h1:1FBXiHDk1VyRM1C0aez2bCfHQ4vMZKkAQzZbkSQt5fI= +github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= +github.com/libp2p/go-mplex v0.0.3/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0= +github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU= +github.com/libp2p/go-msgio v0.0.2/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= +github.com/libp2p/go-msgio v0.0.3/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= +github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= +github.com/libp2p/go-nat v0.0.3/go.mod h1:88nUEt0k0JD45Bk93NIwDqjlhiOwOoV36GchpcVc1yI= +github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= +github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA= +github.com/libp2p/go-reuseport-transport v0.0.2/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs= +github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14= +github.com/libp2p/go-stream-muxer-multistream v0.2.0/go.mod h1:j9eyPol/LLRqT+GPLSxvimPhNph4sfYfMoDPd7HkzIc= +github.com/libp2p/go-tcp-transport v0.1.0/go.mod h1:oJ8I5VXryj493DEJ7OsBieu8fcg2nHGctwtInJVpipc= +github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc= +github.com/libp2p/go-ws-transport v0.1.0/go.mod h1:rjw1MG1LU9YDC6gzmwObkPd/Sqwhw7yT74kj3raBFuo= +github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= +github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= +github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= +github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= +github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= +github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= +github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= +github.com/multiformats/go-multiaddr v0.0.1/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-multiaddr v0.0.2/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-multiaddr v0.2.2 h1:XZLDTszBIJe6m0zF6ITBrEcZR73OPUhCBBS9rYAuUzI= +github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= +github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= +github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= +github.com/multiformats/go-multiaddr-fmt v0.0.1/go.mod h1:aBYjqL4T/7j4Qx+R73XSv/8JsgnRFlf0w2KGLCmXl3Q= +github.com/multiformats/go-multiaddr-net v0.0.1/go.mod h1:nw6HSxNmCIQH27XPGBuX+d1tnvM7ihcFwHMSstNAVUU= +github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= +github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= +github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= +github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= +github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= +github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= +github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= +github.com/multiformats/go-multihash v0.0.15 h1:hWOPdrNqDjwHDx82vsYGSDZNyktOJJ2dzZJzFkOV1jM= +github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= +github.com/multiformats/go-multistream v0.1.0/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= +github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= +github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polydawn/refmt v0.0.0-20190408063855-01bf1e26dd14/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a h1:hjZfReYVLbqFkAtr2us7vdy04YWz3LVAirzP7reh8+M= +github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w= +github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod h1:2RVY1rIf+2J2o/IM9+vPq9RzmHDSseB7FoXiSNIUsoU= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 h1:WN9BUFbdyOsSH/XohnWpXOlq9NBD5sGAB2FciQMUEe8= +github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= +github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830 h1:8kxMKmKzXXL4Ru1nyhvdms/JjWt+3YLpvRb/bAjO/y0= +github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= +github.com/whyrusleeping/cbor-gen v0.0.0-20191216205031-b047b6acb3c0/go.mod h1:xdlJQaiqipF0HW+Mzpg7XRM3fWbGvfgFlcppuvlkIvY= +github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= +github.com/whyrusleeping/cbor-gen v0.0.0-20200414195334-429a0b5e922e/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= +github.com/whyrusleeping/cbor-gen v0.0.0-20200504204219-64967432584d/go.mod h1:W5MvapuoHRP8rz4vxjwCK1pDqF1aQcWsV5PZ+AHbqdg= +github.com/whyrusleeping/cbor-gen v0.0.0-20200715143311-227fab5a2377/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200723185710-6a3894a6352b/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200806213330-63aa96ca5488/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200810223238-211df3b9e24c/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200812213548-958ddffe352c/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20210118024343-169e9d70c0c2/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20210303213153-67a261a1d291/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20211110122933-f57984553008 h1:7WtW9D9VGpmRLuQmrPy2JobUNdka95z3MKEVpELtOjo= +github.com/whyrusleeping/cbor-gen v0.0.0-20211110122933-f57984553008/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8= +github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= +github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= +github.com/whyrusleeping/go-notifier v0.0.0-20170827234753-097c5d47330f/go.mod h1:cZNvX9cFybI01GriPRMXDtczuvUhgbcYr9iCGaNlRv8= +github.com/whyrusleeping/mafmt v1.2.8/go.mod h1:faQJFPbLSxzD9xpA02ttW/tS9vZykNvXwGvqIpk20FA= +github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= +github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= +github.com/xorcare/golden v0.6.0 h1:E8emU8bhyMIEpYmgekkTUaw4vtcrRE+Wa0c5wYIcgXc= +github.com/xorcare/golden v0.6.0/go.mod h1:7T39/ZMvaSEZlBPoYfVFmsBLmUl3uz9IuzWj/U6FtvQ= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/dig v1.12.0 h1:l1GQeZpEbss0/M4l/ZotuBndCrkMdjnygzgcuOjAdaY= +go.uber.org/dig v1.12.0/go.mod h1:X34SnWGr8Fyla9zQNO2GSO2D+TIuqB14OS8JhYocIyw= +go.uber.org/fx v1.15.0 h1:kcfBpAm98n0ksanyyZLFE/Q3T7yPi13Ge2liu3TxR+A= +go.uber.org/fx v1.15.0/go.mod h1:jI3RazQUhGv5KkpZIRv+kuP4CcgX3fnc0qX8bLnzbx8= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= +go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= +go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf h1:B2n+Zi5QeYRDAEodEu72OS36gmTWjgpXr2+cWcBW90o= +golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190302025703-b6889370fb10/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190524122548-abf6ff778158/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210903071746-97244b99971b h1:3Dq0eVHn0uaQJmPO+/aYPI/fRMqdrVDbu7MQcku54gg= +golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/venus-component/libp2p/exchange/client/client.go b/venus-component/libp2p/exchange/client/client.go new file mode 100644 index 0000000000..0607e4f42d --- /dev/null +++ b/venus-component/libp2p/exchange/client/client.go @@ -0,0 +1,493 @@ +package client + +import ( + "bufio" + "context" + "errors" + "fmt" + "math/rand" + "time" + + cborutil "github.com/filecoin-project/go-cbor-util" + "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + "go.opencensus.io/trace" + "go.uber.org/fx" + + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p" + "github.com/filecoin-project/venus/venus-shared/libp2p/exchange" + "github.com/filecoin-project/venus/venus-shared/logging" +) + +var log = logging.New("exchange.client") + +// client implements exchange.Client, using the libp2p ChainExchange protocol +// as the fetching mechanism. +type client struct { + // Connection manager used to contact the server. + // FIXME: We should have a reduced interface here, initialized + // just with our protocol ID, we shouldn't be able to open *any* + // connection. + host host.Host + + peerTracker *bsPeerTracker +} + +var _ exchange.Client = (*client)(nil) + +// NewClient creates a new libp2p-based exchange.Client that uses the libp2p +// ChainExhange protocol as the fetching mechanism. +func NewClient(lc fx.Lifecycle, host host.Host, pmgr libp2p.PeerManager) exchange.Client { + return &client{ + host: host, + peerTracker: newPeerTracker(lc, host, pmgr), + } +} + +// Main logic of the client request service. The provided `Request` +// is sent to the `singlePeer` if one is indicated or to all available +// ones otherwise. The response is processed and validated according +// to the `Request` options. Either a `validatedResponse` is returned +// (which can be safely accessed), or an `error` that may represent +// either a response error status, a failed validation or an internal +// error. +// +// This is the internal single point of entry for all external-facing +// APIs, currently we have 3 very heterogeneous services exposed: +// * GetBlocks: Headers +// * GetFullTipSet: Headers | Messages +// * GetChainMessages: Messages +// This function handles all the different combinations of the available +// request options without disrupting external calls. In the future the +// consumers should be forced to use a more standardized service and +// adhere to a single API derived from this function. +func (c *client) doRequest( + ctx context.Context, + req *exchange.Request, + singlePeer *peer.ID, + // In the `GetChainMessages` case, we won't request the headers but we still + // need them to check the integrity of the `CompactedMessages` in the response + // so the tipset blocks need to be provided by the caller. + tipsets []*chain.TipSet, +) (*validatedResponse, error) { + // Validate request. + if req.Length == 0 { + return nil, fmt.Errorf("invalid request of length 0") + } + if req.Length > exchange.MaxRequestLength { + return nil, fmt.Errorf("request length (%d) above maximum (%d)", + req.Length, exchange.MaxRequestLength) + } + if req.Options == 0 { + return nil, fmt.Errorf("request with no options set") + } + + // Generate the list of peers to be queried, either the + // `singlePeer` indicated or all peers available (sorted + // by an internal peer tracker with some randomness injected). + var peers []peer.ID + if singlePeer != nil { + peers = []peer.ID{*singlePeer} + } else { + peers = c.getShuffledPeers() + if len(peers) == 0 { + return nil, fmt.Errorf("no peers available") + } + } + + // Try the request for each peer in the list, + // return on the first successful response. + // FIXME: Doing this serially isn't great, but fetching in parallel + // may not be a good idea either. Think about this more. + globalTime := time.Now() + // Global time used to track what is the expected time we will need to get + // a response if a client fails us. + for _, peer := range peers { + select { + case <-ctx.Done(): + return nil, fmt.Errorf("context cancelled: %w", ctx.Err()) + default: + } + + plog := log.With("peer", peer.String()) + + // Send request, read response. + res, err := c.sendRequestToPeer(ctx, peer, req) + if err != nil { + if !errors.Is(err, network.ErrNoConn) { + plog.Warnf("could not send request to peer: %s", err) + } + continue + } + + // Process and validate response. + validRes, err := c.processResponse(req, res, tipsets) + if err != nil { + plog.Warnf("processing peer response failed: %s", err) + continue + } + + c.peerTracker.logGlobalSuccess(time.Since(globalTime)) + c.host.ConnManager().TagPeer(peer, "bsync", SuccessPeerTagValue) + return validRes, nil + } + + errString := "doRequest failed for all peers" + if singlePeer != nil { + errString = fmt.Sprintf("doRequest failed for single peer %s", *singlePeer) + } + return nil, fmt.Errorf(errString) +} + +// Process and validate response. Check the status, the integrity of the +// information returned, and that it matches the request. Extract the information +// into a `validatedResponse` for the external-facing APIs to select what they +// need. +// +// We are conflating in the single error returned both status and validation +// errors. Peer penalization should happen here then, before returning, so +// we can apply the correct penalties depending on the cause of the error. +// FIXME: Add the `peer` as argument once we implement penalties. +func (c *client) processResponse(req *exchange.Request, res *exchange.Response, tipsets []*chain.TipSet) (r *validatedResponse, err error) { + err = res.StatusToError() + if err != nil { + return nil, fmt.Errorf("status error: %w", err) + } + + defer func() { + if rerr := recover(); rerr != nil { + log.Errorf("process response error: %s", rerr) + err = fmt.Errorf("process response error: %s", rerr) + return + } + }() + + options := exchange.ParseOptions(req.Options) + if options.IsEmpty() { + // Safety check: this shouldn't have been sent, and even if it did + // it should have been caught by the peer in its error status. + return nil, fmt.Errorf("nothing was requested") + } + + // Verify that the chain segment returned is in the valid range. + // Note that the returned length might be less than requested. + resLength := len(res.Chain) + if resLength == 0 { + return nil, fmt.Errorf("got no chain in successful response") + } + if resLength > int(req.Length) { + return nil, fmt.Errorf("got longer response (%d) than requested (%d)", + resLength, req.Length) + } + if resLength < int(req.Length) && res.Status != exchange.Partial { + return nil, fmt.Errorf("got less than requested without a proper status: %d", res.Status) + } + + validRes := &validatedResponse{} + if options.IncludeHeaders { + // Check for valid block sets and extract them into `TipSet`s. + validRes.tipsets = make([]*chain.TipSet, resLength) + for i := 0; i < resLength; i++ { + if res.Chain[i] == nil { + return nil, fmt.Errorf("response with nil tipset in pos %d", i) + } + for blockIdx, block := range res.Chain[i].Blocks { + if block == nil { + return nil, fmt.Errorf("tipset with nil block in pos %d", blockIdx) + // FIXME: Maybe we should move this check to `NewTipSet`. + } + } + + validRes.tipsets[i], err = chain.NewTipSet(res.Chain[i].Blocks) + if err != nil { + return nil, fmt.Errorf("invalid tipset blocks at height (head - %d): %w", i, err) + } + } + + // Check that the returned head matches the one requested. + if !chain.CidArrsEqual(validRes.tipsets[0].Cids(), req.Head) { + return nil, fmt.Errorf("returned chain head does not match request") + } + + // Check `TipSet`s are connected (valid chain). + for i := 0; i < len(validRes.tipsets)-1; i++ { + if !validRes.tipsets[i].IsChildOf(validRes.tipsets[i+1]) { + return nil, fmt.Errorf("tipsets are not connected at height (head - %d)/(head - %d)", + i, i+1) + // FIXME: Maybe give more information here, like CIDs. + } + } + } + + if options.IncludeMessages { + validRes.messages = make([]*exchange.CompactedMessages, resLength) + for i := 0; i < resLength; i++ { + if res.Chain[i].Messages == nil { + return nil, fmt.Errorf("no messages included for tipset at height (head - %d)", i) + } + validRes.messages[i] = res.Chain[i].Messages + } + + if options.IncludeHeaders { + // If the headers were also returned check that the compression + // indexes are valid before `toFullTipSets()` is called by the + // consumer. + err := c.validateCompressedIndices(res.Chain) + if err != nil { + return nil, err + } + } else { + // If we didn't request the headers they should have been provided + // by the caller. + if len(tipsets) < len(res.Chain) { + return nil, fmt.Errorf("not enought tipsets provided for message response validation, needed %d, have %d", len(res.Chain), len(tipsets)) + } + chain := make([]*exchange.BSTipSet, 0, resLength) + for i, resChain := range res.Chain { + next := &exchange.BSTipSet{ + Blocks: tipsets[i].Blocks(), + Messages: resChain.Messages, + } + chain = append(chain, next) + } + + err := c.validateCompressedIndices(chain) + if err != nil { + return nil, err + } + } + } + + return validRes, nil +} + +func (c *client) validateCompressedIndices(chain []*exchange.BSTipSet) error { + resLength := len(chain) + for tipsetIdx := 0; tipsetIdx < resLength; tipsetIdx++ { + msgs := chain[tipsetIdx].Messages + blocksNum := len(chain[tipsetIdx].Blocks) + + if len(msgs.BlsIncludes) != blocksNum { + return fmt.Errorf("BlsIncludes (%d) does not match number of blocks (%d)", + len(msgs.BlsIncludes), blocksNum) + } + + if len(msgs.SecpkIncludes) != blocksNum { + return fmt.Errorf("SecpkIncludes (%d) does not match number of blocks (%d)", + len(msgs.SecpkIncludes), blocksNum) + } + + for blockIdx := 0; blockIdx < blocksNum; blockIdx++ { + for _, mi := range msgs.BlsIncludes[blockIdx] { + if int(mi) >= len(msgs.Bls) { + return fmt.Errorf("index in BlsIncludes (%d) exceeds number of messages (%d)", + mi, len(msgs.Bls)) + } + } + + for _, mi := range msgs.SecpkIncludes[blockIdx] { + if int(mi) >= len(msgs.Secpk) { + return fmt.Errorf("index in SecpkIncludes (%d) exceeds number of messages (%d)", + mi, len(msgs.Secpk)) + } + } + } + } + + return nil +} + +// GetBlocks implements Client.GetBlocks(). Refer to the godocs there. +func (c *client) GetBlocks(ctx context.Context, tsk chain.TipSetKey, count int) ([]*chain.TipSet, error) { + ctx, span := trace.StartSpan(ctx, "bsync.GetBlocks") + defer span.End() + if span.IsRecordingEvents() { + span.AddAttributes( + trace.StringAttribute("tipset", fmt.Sprint(tsk.Cids())), + trace.Int64Attribute("count", int64(count)), + ) + } + + req := &exchange.Request{ + Head: tsk.Cids(), + Length: uint64(count), + Options: exchange.Headers, + } + + validRes, err := c.doRequest(ctx, req, nil, nil) + if err != nil { + return nil, err + } + + return validRes.tipsets, nil +} + +// GetFullTipSet implements Client.GetFullTipSet(). Refer to the godocs there. +func (c *client) GetFullTipSet(ctx context.Context, peer peer.ID, tsk chain.TipSetKey) (*chain.FullTipSet, error) { + // TODO: round robin through these peers on error + + req := &exchange.Request{ + Head: tsk.Cids(), + Length: 1, + Options: exchange.Headers | exchange.Messages, + } + + validRes, err := c.doRequest(ctx, req, &peer, nil) + if err != nil { + return nil, err + } + + return validRes.toFullTipSets()[0], nil + // If `doRequest` didn't fail we are guaranteed to have at least + // *one* tipset here, so it's safe to index directly. +} + +// GetChainMessages implements Client.GetChainMessages(). Refer to the godocs there. +func (c *client) GetChainMessages(ctx context.Context, tipsets []*chain.TipSet) ([]*exchange.CompactedMessages, error) { + head := tipsets[0] + length := uint64(len(tipsets)) + + ctx, span := trace.StartSpan(ctx, "GetChainMessages") + if span.IsRecordingEvents() { + span.AddAttributes( + trace.StringAttribute("tipset", fmt.Sprint(head.Cids())), + trace.Int64Attribute("count", int64(length)), + ) + } + defer span.End() + + req := &exchange.Request{ + Head: head.Cids(), + Length: length, + Options: exchange.Messages, + } + + validRes, err := c.doRequest(ctx, req, nil, tipsets) + if err != nil { + return nil, err + } + + return validRes.messages, nil +} + +// Send a request to a peer. Write request in the stream and read the +// response back. We do not do any processing of the request/response +// here. +func (c *client) sendRequestToPeer(ctx context.Context, peer peer.ID, req *exchange.Request) (_ *exchange.Response, err error) { + // Trace code. + ctx, span := trace.StartSpan(ctx, "sendRequestToPeer") + defer span.End() + if span.IsRecordingEvents() { + span.AddAttributes( + trace.StringAttribute("peer", peer.Pretty()), + ) + } + defer func() { + if err != nil { + if span.IsRecordingEvents() { + span.SetStatus(trace.Status{ + Code: 5, + Message: err.Error(), + }) + } + } + }() + // -- TRACE -- + + supported, err := c.host.Peerstore().SupportsProtocols(peer, exchange.BlockSyncProtocolID, exchange.ChainExchangeProtocolID) + if err != nil { + c.RemovePeer(ctx, peer) + return nil, fmt.Errorf("failed to get protocols for peer: %w", err) + } + if len(supported) == 0 || (supported[0] != exchange.BlockSyncProtocolID && supported[0] != exchange.ChainExchangeProtocolID) { + return nil, fmt.Errorf("peer %s does not support protocols %s", + peer, []string{exchange.BlockSyncProtocolID, exchange.ChainExchangeProtocolID}) + } + + connectionStart := time.Now() + + // Open stream to peer. + stream, err := c.host.NewStream( + network.WithNoDial(ctx, "should already have connection"), + peer, + exchange.ChainExchangeProtocolID, exchange.BlockSyncProtocolID) + if err != nil { + c.RemovePeer(ctx, peer) + return nil, fmt.Errorf("failed to open stream to peer: %w", err) + } + + defer stream.Close() //nolint:errcheck + + // Write request. + _ = stream.SetWriteDeadline(time.Now().Add(WriteReqDeadline)) + if err := cborutil.WriteCborRPC(stream, req); err != nil { + _ = stream.SetWriteDeadline(time.Time{}) + c.peerTracker.logFailure(peer, time.Since(connectionStart), req.Length) + // FIXME: Should we also remove peer here? + return nil, err + } + _ = stream.SetWriteDeadline(time.Time{}) // clear deadline // FIXME: Needs + // its own API (https://github.com/libp2p/go-libp2p-core/issues/162). + + // Read response. + var res exchange.Response + err = cborutil.ReadCborRPC( + bufio.NewReader(NewInct(stream, ReadResMinSpeed, ReadResDeadline)), + &res) + if err != nil { + c.peerTracker.logFailure(peer, time.Since(connectionStart), req.Length) + return nil, fmt.Errorf("failed to read chainxchg response: %w", err) + } + + // FIXME: Move all this together at the top using a defer as done elsewhere. + // Maybe we need to declare `res` in the signature. + if span.IsRecordingEvents() { + span.AddAttributes( + trace.Int64Attribute("resp_status", int64(res.Status)), + trace.StringAttribute("msg", res.ErrorMessage), + trace.Int64Attribute("chain_len", int64(len(res.Chain))), + ) + } + + c.peerTracker.logSuccess(peer, time.Since(connectionStart), uint64(len(res.Chain))) + // FIXME: We should really log a success only after we validate the response. + // It might be a bit hard to do. + return &res, nil +} + +// AddPeer implements Client.AddPeer(). Refer to the godocs there. +func (c *client) AddPeer(ctx context.Context, p peer.ID) { + c.peerTracker.addPeer(p) +} + +// RemovePeer implements Client.RemovePeer(). Refer to the godocs there. +func (c *client) RemovePeer(ctx context.Context, p peer.ID) { + c.peerTracker.removePeer(p) +} + +// getShuffledPeers returns a preference-sorted set of peers (by latency +// and failure counting), shuffling the first few peers so we don't always +// pick the same peer. +// FIXME: Consider merging with `shufflePrefix()s`. +func (c *client) getShuffledPeers() []peer.ID { + peers := c.peerTracker.prefSortedPeers() + shufflePrefix(peers) + return peers +} + +func shufflePrefix(peers []peer.ID) { + prefix := ShufflePeersPrefix + if len(peers) < prefix { + prefix = len(peers) + } + + buf := make([]peer.ID, prefix) + perm := rand.Perm(prefix) + for i, v := range perm { + buf[i] = peers[v] + } + + copy(peers, buf) +} diff --git a/venus-component/libp2p/exchange/client/inct.go b/venus-component/libp2p/exchange/client/inct.go new file mode 100644 index 0000000000..d1121a2647 --- /dev/null +++ b/venus-component/libp2p/exchange/client/inct.go @@ -0,0 +1,67 @@ +package client + +import ( + "io" + "time" +) + +type ReaderDeadline interface { + Read([]byte) (int, error) + SetReadDeadline(time.Time) error +} + +type incrt struct { + rd ReaderDeadline + + waitPerByte time.Duration + wait time.Duration + maxWait time.Duration +} + +// New creates an Incremental Reader Timeout, with minimum sustained speed of +// minSpeed bytes per second and with maximum wait of maxWait +func NewInct(rd ReaderDeadline, minSpeed int64, maxWait time.Duration) io.Reader { + return &incrt{ + rd: rd, + waitPerByte: time.Second / time.Duration(minSpeed), + wait: maxWait, + maxWait: maxWait, + } +} + +type errNoWait struct{} + +func (err errNoWait) Error() string { + return "wait time exceeded" +} +func (err errNoWait) Timeout() bool { + return true +} + +func (crt *incrt) Read(buf []byte) (int, error) { + start := time.Now() + if crt.wait == 0 { + return 0, errNoWait{} + } + + err := crt.rd.SetReadDeadline(start.Add(crt.wait)) + if err != nil { + log.Debugf("unable to set deadline: %+v", err) + } + + n, err := crt.rd.Read(buf) + + _ = crt.rd.SetReadDeadline(time.Time{}) + if err == nil { + dur := time.Since(start) + crt.wait -= dur + crt.wait += time.Duration(n) * crt.waitPerByte + if crt.wait < 0 { + crt.wait = 0 + } + if crt.wait > crt.maxWait { + crt.wait = crt.maxWait + } + } + return n, err +} diff --git a/venus-component/libp2p/exchange/client/peer_tracker.go b/venus-component/libp2p/exchange/client/peer_tracker.go new file mode 100644 index 0000000000..1af5808fd1 --- /dev/null +++ b/venus-component/libp2p/exchange/client/peer_tracker.go @@ -0,0 +1,194 @@ +package client + +// FIXME: This needs to be reviewed. + +import ( + "context" + "sort" + "sync" + "time" + + host "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p-core/peer" + "go.uber.org/fx" + + "github.com/filecoin-project/venus/venus-shared/libp2p" +) + +type peerStats struct { + successes int + failures int + firstSeen time.Time + averageTime time.Duration +} + +type bsPeerTracker struct { + lk sync.Mutex + + peers map[peer.ID]*peerStats + avgGlobalTime time.Duration + + pmgr libp2p.PeerManager +} + +func newPeerTracker(lc fx.Lifecycle, h host.Host, pmgr libp2p.PeerManager) *bsPeerTracker { + bsPt := &bsPeerTracker{ + peers: make(map[peer.ID]*peerStats), + pmgr: pmgr, + } + + sub, err := h.EventBus().Subscribe(new(libp2p.FilPeerEvent)) + if err != nil { + panic(err) + } + + go func() { + for evt := range sub.Out() { + pEvt := evt.(libp2p.FilPeerEvent) + switch pEvt.Type { + case libp2p.AddFilPeerEvt: + bsPt.addPeer(pEvt.ID) + case libp2p.RemoveFilPeerEvt: + bsPt.removePeer(pEvt.ID) + } + } + }() + + lc.Append(fx.Hook{ + OnStop: func(ctx context.Context) error { + return sub.Close() + }, + }) + + return bsPt +} + +func (bpt *bsPeerTracker) addPeer(p peer.ID) { + bpt.lk.Lock() + defer bpt.lk.Unlock() + if _, ok := bpt.peers[p]; ok { + return + } + bpt.peers[p] = &peerStats{ + firstSeen: time.Now(), + } + +} + +const ( + // newPeerMul is how much better than average is the new peer assumed to be + // less than one to encourouge trying new peers + newPeerMul = 0.9 +) + +func (bpt *bsPeerTracker) prefSortedPeers() []peer.ID { + // TODO: this could probably be cached, but as long as its not too many peers, fine for now + bpt.lk.Lock() + defer bpt.lk.Unlock() + out := make([]peer.ID, 0, len(bpt.peers)) + for p := range bpt.peers { + out = append(out, p) + } + + // sort by 'expected cost' of requesting data from that peer + // additionally handle edge cases where not enough data is available + sort.Slice(out, func(i, j int) bool { + pi := bpt.peers[out[i]] + pj := bpt.peers[out[j]] + + var costI, costJ float64 + + getPeerInitLat := func(p peer.ID) float64 { + return float64(bpt.avgGlobalTime) * newPeerMul + } + + if pi.successes+pi.failures > 0 { + failRateI := float64(pi.failures) / float64(pi.failures+pi.successes) + costI = float64(pi.averageTime) + failRateI*float64(bpt.avgGlobalTime) + } else { + costI = getPeerInitLat(out[i]) + } + + if pj.successes+pj.failures > 0 { + failRateJ := float64(pj.failures) / float64(pj.failures+pj.successes) + costJ = float64(pj.averageTime) + failRateJ*float64(bpt.avgGlobalTime) + } else { + costJ = getPeerInitLat(out[j]) + } + + return costI < costJ + }) + + return out +} + +const ( + // xInvAlpha = (N+1)/2 + + localInvAlpha = 10 // 86% of the value is the last 19 + globalInvAlpha = 25 // 86% of the value is the last 49 +) + +func (bpt *bsPeerTracker) logGlobalSuccess(dur time.Duration) { + bpt.lk.Lock() + defer bpt.lk.Unlock() + + if bpt.avgGlobalTime == 0 { + bpt.avgGlobalTime = dur + return + } + delta := (dur - bpt.avgGlobalTime) / globalInvAlpha + bpt.avgGlobalTime += delta +} + +func logTime(pi *peerStats, dur time.Duration) { + if pi.averageTime == 0 { + pi.averageTime = dur + return + } + delta := (dur - pi.averageTime) / localInvAlpha + pi.averageTime += delta + +} + +func (bpt *bsPeerTracker) logSuccess(p peer.ID, dur time.Duration, reqSize uint64) { + bpt.lk.Lock() + defer bpt.lk.Unlock() + + var pi *peerStats + var ok bool + if pi, ok = bpt.peers[p]; !ok { + log.Warnw("log success called on peer not in tracker", "peerid", p.String()) + return + } + + pi.successes++ + if reqSize == 0 { + reqSize = 1 + } + logTime(pi, dur/time.Duration(reqSize)) +} + +func (bpt *bsPeerTracker) logFailure(p peer.ID, dur time.Duration, reqSize uint64) { + bpt.lk.Lock() + defer bpt.lk.Unlock() + + var pi *peerStats + var ok bool + if pi, ok = bpt.peers[p]; !ok { + log.Warnw("log failure called on peer not in tracker", "peerid", p.String()) + return + } + + pi.failures++ + if reqSize == 0 { + reqSize = 1 + } + logTime(pi, dur/time.Duration(reqSize)) +} + +func (bpt *bsPeerTracker) removePeer(p peer.ID) { + bpt.lk.Lock() + defer bpt.lk.Unlock() + delete(bpt.peers, p) +} diff --git a/venus-component/libp2p/exchange/client/response.go b/venus-component/libp2p/exchange/client/response.go new file mode 100644 index 0000000000..73d01d0ce4 --- /dev/null +++ b/venus-component/libp2p/exchange/client/response.go @@ -0,0 +1,67 @@ +package client + +import ( + "time" + + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p/exchange" +) + +const ( + // Extracted constants from the code. + // FIXME: Should be reviewed and confirmed. + SuccessPeerTagValue = 25 + WriteReqDeadline = 5 * time.Second + ReadResDeadline = WriteReqDeadline + ReadResMinSpeed = 50 << 10 + ShufflePeersPrefix = 16 +) + +// Response that has been validated according to the protocol +// and can be safely accessed. +type validatedResponse struct { + tipsets []*chain.TipSet + // List of all messages per tipset (grouped by tipset, + // not by block, hence a single index like `tipsets`). + messages []*exchange.CompactedMessages +} + +// Decompress messages and form full tipsets with them. The headers +// need to have been requested as well. +func (res *validatedResponse) toFullTipSets() []*chain.FullTipSet { + if len(res.tipsets) == 0 || len(res.tipsets) != len(res.messages) { + // This decompression can only be done if both headers and + // messages are returned in the response. (The second check + // is already implied by the guarantees of `validatedResponse`, + // added here just for completeness.) + return nil + } + + ftsList := make([]*chain.FullTipSet, len(res.tipsets)) + for tipsetIdx := range res.tipsets { + blksInTipset := res.tipsets[tipsetIdx].Blocks() + msgs := res.messages[tipsetIdx] + + fblks := make([]*chain.FullBlock, 0, len(blksInTipset)) + for blockIdx, b := range res.tipsets[tipsetIdx].Blocks() { + fb := &chain.FullBlock{ + Header: b, + BLSMessages: make([]*chain.Message, 0, len(msgs.Bls)), + SECPMessages: make([]*chain.SignedMessage, 0, len(msgs.Secpk)), + } + + for _, mi := range msgs.BlsIncludes[blockIdx] { + fb.BLSMessages = append(fb.BLSMessages, msgs.Bls[mi]) + } + for _, mi := range msgs.SecpkIncludes[blockIdx] { + fb.SECPMessages = append(fb.SECPMessages, msgs.Secpk[mi]) + } + + fblks = append(fblks, fb) + } + + ftsList[tipsetIdx] = chain.NewFullTipSet(fblks) + } + + return ftsList +} diff --git a/venus-component/libp2p/exchange/doc.go b/venus-component/libp2p/exchange/doc.go new file mode 100644 index 0000000000..b20ee0c1fe --- /dev/null +++ b/venus-component/libp2p/exchange/doc.go @@ -0,0 +1,19 @@ +// Package exchange contains the ChainExchange server and client components. +// +// ChainExchange is the basic chain synchronization protocol of Filecoin. +// ChainExchange is an RPC-oriented protocol, with a single operation to +// request blocks for now. +// +// A request contains a start anchor block (referred to with a CID), and a +// amount of blocks requested beyond the anchor (including the anchor itself). +// +// A client can also pass options, encoded as a 64-bit bitfield. Lotus supports +// two options at the moment: +// +// - include block contents +// - include block messages +// +// The response will include a status code, an optional message, and the +// response payload in case of success. The payload is a slice of serialized +// tipsets. +package exchange diff --git a/venus-component/libp2p/exchange/server.go b/venus-component/libp2p/exchange/server.go new file mode 100644 index 0000000000..b8e6988708 --- /dev/null +++ b/venus-component/libp2p/exchange/server.go @@ -0,0 +1,261 @@ +package exchange + +import ( + "bufio" + "context" + "fmt" + "time" + + cborutil "github.com/filecoin-project/go-cbor-util" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/host" + inet "github.com/libp2p/go-libp2p-core/network" + "go.opencensus.io/trace" + + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p/exchange" + "github.com/filecoin-project/venus/venus-shared/localstore" + "github.com/filecoin-project/venus/venus-shared/logging" +) + +var log = logging.New("exchange") + +const ( + WriteResDeadline = 60 * time.Second +) + +// `Request` processed and validated to query the tipsets needed. +type validatedRequest struct { + head chain.TipSetKey + length uint64 + options *exchange.Options +} + +func validateRequest(ctx context.Context, req *exchange.Request) (*validatedRequest, *exchange.Response) { + _, span := trace.StartSpan(ctx, "chainxchg.ValidateRequest") + defer span.End() + + if len(req.Head) == 0 { + return nil, &exchange.Response{ + Status: exchange.BadRequest, + ErrorMessage: "no cids in request", + } + } + + if req.Length == 0 { + return nil, &exchange.Response{ + Status: exchange.BadRequest, + ErrorMessage: "invalid request length of zero", + } + } + + if req.Length > exchange.MaxRequestLength { + return nil, &exchange.Response{ + Status: exchange.BadRequest, + ErrorMessage: fmt.Sprintf("request length over maximum allowed (%d)", + exchange.MaxRequestLength), + } + } + + opts := exchange.ParseOptions(req.Options) + if opts.IsEmpty() { + return nil, &exchange.Response{ + Status: exchange.BadRequest, + ErrorMessage: "no options set", + } + } + + // FIXME: Add as a defer at the start. + span.AddAttributes( + trace.BoolAttribute("blocks", opts.IncludeHeaders), + trace.BoolAttribute("messages", opts.IncludeMessages), + trace.Int64Attribute("reqlen", int64(req.Length)), + ) + + return &validatedRequest{ + head: chain.NewTipSetKey(req.Head...), + length: req.Length, + options: opts, + }, nil +} + +// Server implements exchange.Server. It services requests for the +// libp2p ChainExchange protocol. +type Server struct { + loader localstore.ChainLoader + h host.Host +} + +// NewServer creates a new libp2p-based exchange.Server. It services requests +// for the libp2p ChainExchange protocol. +func NewServer(loader localstore.ChainLoader, h host.Host) *Server { + return &Server{ + loader: loader, + h: h, + } +} + +// HandleStream implements Server.HandleStream. Refer to the godocs there. +func (s *Server) HandleStream(stream inet.Stream) { + ctx, span := trace.StartSpan(context.Background(), "chainxchg.HandleStream") + defer span.End() + + // Note: this will become just stream.Close once we've completed the go-libp2p migration to + // go-libp2p-core 0.7.0 + defer stream.Close() //nolint:errcheck + + slog := log.With("peer", stream.Conn().RemotePeer()) + ctx = logging.ContextWithLogger(ctx, slog) + + var req exchange.Request + if err := cborutil.ReadCborRPC(bufio.NewReader(stream), &req); err != nil { + slog.Warnf("failed to read block sync request: %s", err) + return + } + + slog.Infow("block sync request", "start", req.Head, "len", req.Length) + + resp, err := s.processRequest(ctx, &req) + if err != nil { + slog.Warnf("failed to process request: %s", err) + return + } + + _ = stream.SetDeadline(time.Now().Add(WriteResDeadline)) + if err := cborutil.WriteCborRPC(stream, resp); err != nil { + _ = stream.SetDeadline(time.Time{}) + slog.Warnw("failed to write back response for handle stream", + "err", err) + return + } + _ = stream.SetDeadline(time.Time{}) +} + +// Validate and service the request. We return either a protocol +// response or an internal error. +func (s *Server) processRequest(ctx context.Context, req *exchange.Request) (*exchange.Response, error) { + validReq, errResponse := validateRequest(ctx, req) + if errResponse != nil { + // The request did not pass validation, return the response + // indicating it. + return errResponse, nil + } + + return s.serviceRequest(ctx, validReq) +} + +func (s *Server) serviceRequest(ctx context.Context, req *validatedRequest) (*exchange.Response, error) { + _, span := trace.StartSpan(ctx, "chainxchg.ServiceRequest") + defer span.End() + + chain, err := collectChainSegment(ctx, s.loader, req) + if err != nil { + logging.LoggerFromContext(ctx, log).Warnf("block sync request: collectChainSegment failed: %s", err) + return &exchange.Response{ + Status: exchange.InternalError, + ErrorMessage: err.Error(), + }, nil + } + + status := exchange.Ok + if len(chain) < int(req.length) { + status = exchange.Partial + } + + return &exchange.Response{ + Chain: chain, + Status: status, + }, nil +} + +func collectChainSegment(ctx context.Context, loader localstore.ChainLoader, req *validatedRequest) ([]*exchange.BSTipSet, error) { + var bstips []*exchange.BSTipSet + + cur := req.head + for { + var bst exchange.BSTipSet + ts, err := loader.GetTipSet(ctx, cur) + if err != nil { + return nil, fmt.Errorf("failed loading tipset %s: %w", cur, err) + } + + if req.options.IncludeHeaders { + bst.Blocks = ts.Blocks() + } + + if req.options.IncludeMessages { + bst.Messages, err = gatherMessages(ctx, loader, ts) + if err != nil { + return nil, fmt.Errorf("gather messages failed: %w", err) + } + } + + bstips = append(bstips, &bst) + + // If we collected the length requested or if we reached the + // start (genesis), then stop. + if uint64(len(bstips)) >= req.length || ts.Height() == 0 { + return bstips, nil + } + + cur = ts.Parents() + } +} + +func gatherMessages(ctx context.Context, loader localstore.ChainLoader, ts *chain.TipSet) (*exchange.CompactedMessages, error) { + blsmsgmap := make(map[cid.Cid]uint64) + secpkmsgmap := make(map[cid.Cid]uint64) + var secpkincl, blsincl [][]uint64 + + var blscids, secpkcids []cid.Cid + for _, block := range ts.Blocks() { + bc, sc, err := loader.ReadMsgMetaCids(ctx, block.Messages) + if err != nil { + return nil, err + } + + // FIXME: DRY. Use `chain.Message` interface. + bmi := make([]uint64, 0, len(bc)) + for _, m := range bc { + i, ok := blsmsgmap[m] + if !ok { + i = uint64(len(blscids)) + blscids = append(blscids, m) + blsmsgmap[m] = i + } + + bmi = append(bmi, i) + } + blsincl = append(blsincl, bmi) + + smi := make([]uint64, 0, len(sc)) + for _, m := range sc { + i, ok := secpkmsgmap[m] + if !ok { + i = uint64(len(secpkcids)) + secpkcids = append(secpkcids, m) + secpkmsgmap[m] = i + } + + smi = append(smi, i) + } + secpkincl = append(secpkincl, smi) + } + + blsmsgs, err := loader.LoadMessagesFromCids(ctx, blscids) + if err != nil { + return nil, err + } + + secpkmsgs, err := loader.LoadSignedMessagesFromCids(ctx, secpkcids) + if err != nil { + return nil, err + } + + return &exchange.CompactedMessages{ + Bls: blsmsgs, + BlsIncludes: blsincl, + Secpk: secpkmsgs, + SecpkIncludes: secpkincl, + }, nil +} diff --git a/venus-devtool/api-docs-gen/cmd/docgen.go b/venus-devtool/api-docs-gen/cmd/docgen.go new file mode 100644 index 0000000000..370007de3e --- /dev/null +++ b/venus-devtool/api-docs-gen/cmd/docgen.go @@ -0,0 +1,124 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" + "reflect" + "sort" + "strings" + + "github.com/filecoin-project/venus/venus-devtool/api-docs-gen" +) + +func main() { + comments, groupComments := docgen.ParseApiASTInfo(os.Args[1], os.Args[2], os.Args[3], os.Args[4]) + + groups := make(map[string]*docgen.MethodGroup) + + _, t, permStruct := docgen.GetAPIType(os.Args[2], os.Args[3]) + + for i := 0; i < t.NumMethod(); i++ { + m := t.Method(i) + + groupName := docgen.MethodGroupFromName(m.Name) + + g, ok := groups[groupName] + if !ok { + g = new(docgen.MethodGroup) + g.Header = groupComments[groupName] + g.GroupName = groupName + groups[groupName] = g + } + var args []interface{} + ft := m.Func.Type() + for j := 2; j < ft.NumIn(); j++ { + inp := ft.In(j) + args = append(args, docgen.ExampleValue(m.Name, inp, nil)) + } + + v, err := json.MarshalIndent(args, "", " ") + if err != nil { + panic(err) + } + + outv := docgen.ExampleValue(m.Name, ft.Out(0), nil) + if outv == nil { + _, _ = fmt.Fprintf(os.Stderr, "ExampleValue for %s get nil\n", ft.Out(0).String()) + continue + } + + ov, err := json.MarshalIndent(outv, "", " ") + if err != nil { + panic(err) + } + + g.Methods = append(g.Methods, &docgen.Method{ + Name: m.Name, + Comment: comments[m.Name], + InputExample: string(v), + ResponseExample: string(ov), + }) + } + + var groupslice []*docgen.MethodGroup + for _, g := range groups { + groupslice = append(groupslice, g) + } + + sort.Slice(groupslice, func(i, j int) bool { + return groupslice[i].GroupName < groupslice[j].GroupName + }) + + fmt.Printf("# Groups\n") + + for _, g := range groupslice { + fmt.Printf("* [%s](#%s)\n", g.GroupName, g.GroupName) + for _, method := range g.Methods { + fmt.Printf(" * [%s](#%s)\n", method.Name, method.Name) + } + } + + for _, g := range groupslice { + g := g + fmt.Printf("## %s\n", g.GroupName) + fmt.Printf("%s\n\n", g.Header) + + sort.Slice(g.Methods, func(i, j int) bool { + return g.Methods[i].Name < g.Methods[j].Name + }) + + for _, m := range g.Methods { + fmt.Printf("### %s\n", m.Name) + fmt.Printf("%s\n\n", m.Comment) + + var meth reflect.StructField + var ok bool + for _, ps := range permStruct { + meth, ok = ps.FieldByName(m.Name) + if ok { + break + } + } + if !ok { + panic("no perms for method: " + m.Name) + } + + perms := meth.Tag.Get("perm") + + fmt.Printf("Perms: %s\n\n", perms) + + if strings.Count(m.InputExample, "\n") > 0 { + fmt.Printf("Inputs:\n```json\n%s\n```\n\n", m.InputExample) + } else { + fmt.Printf("Inputs: `%s`\n\n", m.InputExample) + } + + if strings.Count(m.ResponseExample, "\n") > 0 { + fmt.Printf("Response:\n```json\n%s\n```\n\n", m.ResponseExample) + } else { + fmt.Printf("Response: `%s`\n\n", m.ResponseExample) + } + } + } +} diff --git a/venus-devtool/api-docs-gen/docgen.go b/venus-devtool/api-docs-gen/docgen.go new file mode 100644 index 0000000000..6aaaee5372 --- /dev/null +++ b/venus-devtool/api-docs-gen/docgen.go @@ -0,0 +1,420 @@ +package docgen + +import ( + "fmt" + network2 "github.com/filecoin-project/go-state-types/network" + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + v0 "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1 "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/messagepool" + "github.com/filecoin-project/venus/venus-shared/paych" + "github.com/filecoin-project/venus/venus-shared/stmgr" + "github.com/filecoin-project/venus/venus-shared/wallet" + "os" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + datatransfer "github.com/filecoin-project/go-data-transfer" + "github.com/filecoin-project/go-fil-markets/retrievalmarket" + "github.com/filecoin-project/go-jsonrpc/auth" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/exitcode" + "github.com/filecoin-project/venus/venus-shared/api" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-graphsync" + textselector "github.com/ipld/go-ipld-selector-text-lite" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p-core/protocol" + pubsub "github.com/libp2p/go-libp2p-pubsub" + "github.com/multiformats/go-multiaddr" + "go/ast" + "go/parser" + "go/token" + "path/filepath" + "reflect" + "strings" + "time" + "unicode" +) + +var ExampleValues = map[reflect.Type]interface{}{ + reflect.TypeOf(auth.Permission("")): auth.Permission("write"), + reflect.TypeOf(""): "string value", + reflect.TypeOf(uint64(42)): uint64(42), + reflect.TypeOf(byte(7)): byte(7), + reflect.TypeOf([]byte{}): []byte("byte array"), +} + +func addExample(v interface{}) { + ExampleValues[reflect.TypeOf(v)] = v +} + +func init() { + c, err := cid.Decode("bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4") + if err != nil { + panic(err) + } + + ExampleValues[reflect.TypeOf(c)] = c + + c2, err := cid.Decode("bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve") + if err != nil { + panic(err) + } + + tsk := chain.NewTipSetKey(c, c2) + + ExampleValues[reflect.TypeOf(tsk)] = tsk + + addr, err := address.NewIDAddress(1234) + if err != nil { + panic(err) + } + + ExampleValues[reflect.TypeOf(addr)] = addr + + pid, err := peer.Decode("12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf") + if err != nil { + panic(err) + } + addExample(pid) + addExample(&pid) + addExample(network2.Version14) + textSelExample := textselector.Expression("Links/21/Hash/Links/42/Hash") + clientEvent := retrievalmarket.ClientEventDealAccepted + addExample(bitfield.NewFromSet([]uint64{5})) + addExample(abi.RegisteredSealProof_StackedDrg32GiBV1_1) + addExample(abi.RegisteredPoStProof_StackedDrgWindow32GiBV1) + addExample(abi.ChainEpoch(10101)) + addExample(crypto.SigTypeBLS) + addExample(wallet.KTBLS) + addExample(wallet.MTChainMsg) + addExample(int64(9)) + addExample(12.3) + addExample(123) + addExample(uintptr(0)) + addExample(abi.MethodNum(1)) + addExample(exitcode.ExitCode(0)) + addExample(crypto.DomainSeparationTag_ElectionProofProduction) + addExample(true) + addExample(abi.UnpaddedPieceSize(1024)) + addExample(abi.UnpaddedPieceSize(1024).Padded()) + addExample(abi.DealID(5432)) + addExample(abi.SectorNumber(9)) + addExample(abi.SectorSize(32 * 1024 * 1024 * 1024)) + addExample(messagepool.MpoolChange(0)) + addExample(network.Connected) + addExample(chain2.NetworkName("mainnet")) + addExample(chain2.SyncStateStage(1)) + addExample(api.FullAPIVersion1) + addExample(paych.PCHInbound) + addExample(time.Minute) + addExample(graphsync.RequestID(4)) + addExample(datatransfer.TransferID(3)) + addExample(datatransfer.Ongoing) + addExample(clientEvent) + addExample(&clientEvent) + addExample(retrievalmarket.ClientEventDealAccepted) + addExample(retrievalmarket.DealStatusNew) + addExample(&textSelExample) + addExample(network.ReachabilityPublic) + addExample(map[string]int{"name": 42}) + addExample(map[string]time.Time{"name": time.Unix(1615243938, 0).UTC()}) + addExample(&stmgr.ExecutionTrace{ + Msg: ExampleValue("init", reflect.TypeOf(&chain.Message{}), nil).(*chain.Message), + MsgRct: ExampleValue("init", reflect.TypeOf(&chain.MessageReceipt{}), nil).(*chain.MessageReceipt), + }) + addExample(map[string]chain.Actor{ + "t01236": ExampleValue("init", reflect.TypeOf(chain.Actor{}), nil).(chain.Actor), + }) + addExample(map[string]chain.Actor{ + "t01236": ExampleValue("init", reflect.TypeOf(chain.Actor{}), nil).(chain.Actor), + }) + // todo: get an error on MarshalJSON ? + // addExample(map[address.Address]*chain.Actor{ + // "t01236": ExampleValue("init", reflect.TypeOf(*chain.Actor{}), nil).(*chain.Actor), + // }) + addExample(map[string]chain2.MarketDeal{ + "t026363": ExampleValue("init", reflect.TypeOf(chain2.MarketDeal{}), nil).(chain2.MarketDeal), + }) + addExample(map[string]chain2.MarketBalance{ + "t026363": ExampleValue("init", reflect.TypeOf(chain2.MarketBalance{}), nil).(chain2.MarketBalance), + }) + addExample([]*chain2.EstimateMessage{ + {Msg: ExampleValue("init", reflect.TypeOf(&chain.Message{}), nil).(*chain.Message), + Spec: ExampleValue("init", reflect.TypeOf(&chain2.MessageSendSpec{}), nil).(*chain2.MessageSendSpec), + }}) + addExample(map[string]*pubsub.TopicScoreSnapshot{ + "/blocks": { + TimeInMesh: time.Minute, + FirstMessageDeliveries: 122, + MeshMessageDeliveries: 1234, + InvalidMessageDeliveries: 3, + }, + }) + addExample(map[string]metrics.Stats{ + "12D3KooWSXmXLJmBR1M7i9RW9GQPNUhZSzXKzxDHWtAgNuJAbyEJ": { + RateIn: 100, + RateOut: 50, + TotalIn: 174000, + TotalOut: 12500, + }, + }) + addExample(map[protocol.ID]metrics.Stats{ + "/fil/hello/1.0.0": { + RateIn: 100, + RateOut: 50, + TotalIn: 174000, + TotalOut: 12500, + }, + }) + maddr, err := multiaddr.NewMultiaddr("/ip4/52.36.61.156/tcp/1347/p2p/12D3KooWFETiESTf1v4PGUvtnxMAcEFMzLZbJGg4tjWfGEimYior") + if err != nil { + panic(err) + } + // because reflect.TypeOf(maddr) returns the concrete type... + ExampleValues[reflect.TypeOf(struct{ A multiaddr.Multiaddr }{}).Field(0).Type] = maddr + si := uint64(12) + addExample(&si) + addExample(retrievalmarket.DealID(5)) + addExample(abi.ActorID(1000)) + addExample(map[abi.SectorNumber]string{ + 123: "can't acquire read lock", + }) + addExample([]abi.SectorNumber{123, 124}) + // addExample(apitypes.OpenRPCDocument{ + // "openrpc": "1.2.6", + // "info": map[string]interface{}{ + // "title": "Lotus RPC API", + // "version": "1.2.1/generated=2020-11-22T08:22:42-06:00", + // }, + // "methods": []interface{}{}}, + // ) + addExample(messagepool.CheckStatusCode(0)) + addExample(map[string]interface{}{"abc": 123}) +} + +func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) { + + switch pkg { + case "v1": // latest + switch name { + case "FullNode": + i = &v1.FullNodeStruct{} + t = reflect.TypeOf(new(struct{ v1.FullNode })).Elem() + permStruct = append(permStruct, reflect.TypeOf(v1.IBlockStoreStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IBeaconStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IChainStruct{}.IAccountStruct.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IChainStruct{}.IActorStruct.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IChainStruct{}.IBeaconStruct.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IChainStruct{}.IMinerStateStruct.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IChainStruct{}.IChainInfoStruct.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IMarketStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IMiningStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IMessagePoolStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IMultiSigStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.INetworkStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IPaychanStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.ISyncerStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IWalletStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v1.IJwtAuthAPIStruct{}.Internal)) + default: + panic("unknown type") + } + case "v0": + switch name { + case "FullNode": + i = &v0.FullNodeStruct{} + t = reflect.TypeOf(new(struct{ v0.FullNode })).Elem() + permStruct = append(permStruct, reflect.TypeOf(v0.IBlockStoreStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IBeaconStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IChainStruct{}.IAccountStruct.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IChainStruct{}.IActorStruct.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IChainStruct{}.IBeaconStruct.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IChainStruct{}.IMinerStateStruct.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IChainStruct{}.IChainInfoStruct.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IMarketStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IMiningStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IMessagePoolStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IMultiSigStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.INetworkStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IPaychanStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.ISyncerStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IWalletStruct{}.Internal)) + permStruct = append(permStruct, reflect.TypeOf(v0.IJwtAuthAPIStruct{}.Internal)) + default: + panic("unknown type") + } + } + return +} + +func ExampleValue(method string, t, parent reflect.Type) interface{} { + v, ok := ExampleValues[t] + if ok { + return v + } + + switch t.Kind() { + case reflect.Slice: + out := reflect.New(t).Elem() + out = reflect.Append(out, reflect.ValueOf(ExampleValue(method, t.Elem(), t))) + return out.Interface() + case reflect.Chan: + return ExampleValue(method, t.Elem(), nil) + case reflect.Struct: + es := exampleStruct(method, t, parent) + v := reflect.ValueOf(es).Elem().Interface() + ExampleValues[t] = v + return v + case reflect.Array: + out := reflect.New(t).Elem() + for i := 0; i < t.Len(); i++ { + out.Index(i).Set(reflect.ValueOf(ExampleValue(method, t.Elem(), t))) + } + return out.Interface() + case reflect.Ptr: + if t.Elem().Kind() == reflect.Struct { + es := exampleStruct(method, t.Elem(), t) + // ExampleValues[t] = es + return es + } + case reflect.Interface: + if t.Implements(reflect.TypeOf((*error)(nil)).Elem()) { + return fmt.Errorf("empty error") + } + return struct{}{} + } + + _, _ = fmt.Fprintf(os.Stderr, "Warnning: No example value for type: %s (method '%s')\n", t, method) + return nil +} + +func exampleStruct(method string, t, parent reflect.Type) interface{} { + ns := reflect.New(t) + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if f.Type == parent { + continue + } + if strings.Title(f.Name) == f.Name { + ns.Elem().Field(i).Set(reflect.ValueOf(ExampleValue(method, f.Type, t))) + } + } + + return ns.Interface() +} + +type Visitor struct { + Root string + Methods map[string]ast.Node +} + +func (v *Visitor) Visit(node ast.Node) ast.Visitor { + st, ok := node.(*ast.TypeSpec) + if !ok { + return v + } + + if st.Name.Name != v.Root { + return nil + } + + iface := st.Type.(*ast.InterfaceType) + for _, m := range iface.Methods.List { + if len(m.Names) > 0 { + v.Methods[m.Names[0].Name] = m + } + } + + return v +} + +const NoComment = "There are not yet any comments for this method." + +func ParseApiASTInfo(apiFile, iface, pkg, dir string) (comments map[string]string, groupDocs map[string]string) { //nolint:golint + fset := token.NewFileSet() + apiDir, err := filepath.Abs(dir) + if err != nil { + fmt.Println("./api filepath absolute error: ", err) + return + } + apiFile, err = filepath.Abs(apiFile) + if err != nil { + fmt.Println("filepath absolute error: ", err, "file:", apiFile) + return + } + pkgs, err := parser.ParseDir(fset, apiDir, nil, parser.AllErrors|parser.ParseComments) + if err != nil { + fmt.Println("parse error: ", err) + return + } + + ap := pkgs[pkg] + + f := ap.Files[apiFile] + + cmap := ast.NewCommentMap(fset, f, f.Comments) + + v := &Visitor{iface, make(map[string]ast.Node)} + ast.Walk(v, ap) + + comments = make(map[string]string) + groupDocs = make(map[string]string) + for mn, node := range v.Methods { + filteredComments := cmap.Filter(node).Comments() + if len(filteredComments) == 0 { + comments[mn] = NoComment + } else { + for _, c := range filteredComments { + if strings.HasPrefix(c.Text(), "MethodGroup:") { + parts := strings.Split(c.Text(), "\n") + groupName := strings.TrimSpace(parts[0][12:]) + comment := strings.Join(parts[1:], "\n") + groupDocs[groupName] = comment + + break + } + } + + l := len(filteredComments) - 1 + if len(filteredComments) > 1 { + l = len(filteredComments) - 2 + } + last := filteredComments[l].Text() + if !strings.HasPrefix(last, "MethodGroup:") { + comments[mn] = last + } else { + comments[mn] = NoComment + } + } + } + return comments, groupDocs +} + +type MethodGroup struct { + GroupName string + Header string + Methods []*Method +} + +type Method struct { + Comment string + Name string + InputExample string + ResponseExample string +} + +func MethodGroupFromName(mn string) string { + i := strings.IndexFunc(mn[1:], func(r rune) bool { + return unicode.IsUpper(r) + }) + if i < 0 { + return "" + } + return mn[:i+1] +} diff --git a/venus-devtool/api-gen/proxygen.go b/venus-devtool/api-gen/proxygen.go new file mode 100644 index 0000000000..a5d05e3b00 --- /dev/null +++ b/venus-devtool/api-gen/proxygen.go @@ -0,0 +1,502 @@ +package main + +import ( + "encoding/json" + "fmt" + "go/ast" + "go/build" + "go/parser" + "go/token" + "io/fs" + "io/ioutil" + "os" + "path" + "path/filepath" + "strings" + "text/template" + "unicode" + + _ "github.com/filecoin-project/lotus/api" + "golang.org/x/xerrors" +) + +const ( + VenusSharedPath = "../venus-shared" + GenAPIFileName = "proxy_gen.go" +) + +var ( + VenusAPIPath = path.Join("../venus-shared", "api") + VenusCompatibleCheckFile = path.Join(VenusSharedPath, "compatible-checks/api-permission.json") + VenusV0APiFile = path.Join(VenusAPIPath, "chain/v0", GenAPIFileName) + VenusV1ApiFile = path.Join(VenusAPIPath, "chain/v1", GenAPIFileName) +) + +type ruleKey = string + +const ( + rkPerm ruleKey = "perm" +) + +type methodMeta struct { + node ast.Node + ftype *ast.FuncType +} + +type Visitor struct { + Methods map[string]map[string]*methodMeta + Include map[string][]string +} + +func (v *Visitor) Visit(node ast.Node) ast.Visitor { + st, ok := node.(*ast.TypeSpec) + if !ok { + return v + } + + iface, ok := st.Type.(*ast.InterfaceType) + if !ok { + return v + } + if v.Methods[st.Name.Name] == nil { + v.Methods[st.Name.Name] = map[string]*methodMeta{} + } + for _, m := range iface.Methods.List { + switch ft := m.Type.(type) { + case *ast.Ident: + v.Include[st.Name.Name] = append(v.Include[st.Name.Name], ft.Name) + case *ast.FuncType: + v.Methods[st.Name.Name][m.Names[0].Name] = &methodMeta{ + node: m, + ftype: ft, + } + } + } + + return v +} + +func main() { + var arg string + if len(os.Args) > 1 { + arg = os.Args[1] + } + + onlyCompare := arg == "compare" + lpath := lotusAPIPath() + + infos := struct { + V0 *stableMethodInfo + V1 *stableMethodInfo + }{ + V0: v0API(lpath, onlyCompare), + V1: v1API(lpath, onlyCompare), + } + + data, err := json.MarshalIndent(infos, "", "\t") + checkError(err) + err = ioutil.WriteFile(VenusCompatibleCheckFile, data, 0666) + checkError(err) +} + +func v0API(lpath string, onlyCompare bool) *stableMethodInfo { + apiFilePaths := []string{ + path.Join(lpath, "v0api/full.go"), + path.Join(lpath, "api_common.go"), + path.Join(lpath, "api_net.go"), + } + fmt.Println("v0 lotus api file: ", apiFilePaths) + + bmp, err := benchmarkMethodPerm(apiFilePaths) + checkError(err) + // outputWithJSON(bmp, "v0 benchmarkMethodPerm: ") + + mm, err := methodMetaFromInterface(path.Join(VenusAPIPath, "chain/v0"), "v0", "v0") + checkError(err) + + smi := check(bmp, mm) + outputWithJSON(smi, "v0 api StableMethodInfo: ") + + if !onlyCompare { + checkError(doTemplate(VenusV0APiFile, mm, templ)) + } + + return smi +} + +func v1API(lpath string, onlyCompare bool) *stableMethodInfo { + apiFilePaths := []string{ + path.Join(lpath, "api_full.go"), + path.Join(lpath, "api_common.go"), + path.Join(lpath, "api_net.go"), + } + fmt.Println("v1 lotus api file: ", apiFilePaths) + + bmp, err := benchmarkMethodPerm(apiFilePaths) + checkError(err) + // outputWithJSON(bmp, "v1 benchmarkMethodPerm: ") + + mm, err := methodMetaFromInterface(path.Join(VenusAPIPath, "/chain/v1"), "v1", "v1") + checkError(err) + + smi := check(bmp, mm) + outputWithJSON(smi, "v1 api StableMethodInfo: ") + + if !onlyCompare { + checkError(doTemplate(VenusV1ApiFile, mm, templ)) + } + + return smi +} + +func lotusAPIPath() string { + lAPIPath := "../lotus/api" + pkg, err := build.Import("github.com/filecoin-project/lotus/api", ".", build.FindOnly) + if err == nil { + lAPIPath = pkg.Dir + } + return lAPIPath +} + +func benchmarkMethodPerm(apiFilePaths []string) (map[string]string, error) { + fset := token.NewFileSet() + files := make([]*ast.File, 0, len(apiFilePaths)) + visitor := &Visitor{make(map[string]map[string]*methodMeta), map[string][]string{}} + + for _, fpath := range apiFilePaths { + f, err := parser.ParseFile(fset, fpath, nil, parser.AllErrors|parser.ParseComments) + if err != nil { + return nil, err + } + files = append(files, f) + ast.Walk(visitor, f) + } + + perms := make(map[string]string) + for _, f := range files { + cmap := ast.NewCommentMap(fset, f, f.Comments) + for _, methods := range visitor.Methods { + for mname, node := range methods { + filteredComments := cmap.Filter(node.node).Comments() + if len(filteredComments) > 0 { + cmt := filteredComments[len(filteredComments)-1].List[0].Text + if !strings.Contains(cmt, "perm:") { + fmt.Println("lotus method not found perm: ", mname) + continue + } + pairs := strings.Split(cmt, ":") + if len(pairs) != 2 { + continue + } + perms[mname] = pairs[1] + } + } + } + } + + return perms, nil +} + +type methodInfo struct { + Name string + node ast.Node + Tags map[string][]string + NamedParams, ParamNames, Results, DefRes string +} +type strinfo struct { + Name string + Methods map[string]*methodInfo + Include []string +} +type meta struct { + Infos map[string]*strinfo + Imports map[string]string + OutPkg string +} + +func filter(f fs.FileInfo) bool { + return f.Name() != GenAPIFileName +} + +func methodMetaFromInterface(rootPath string, pkg, outpkg string) (*meta, error) { + fset := token.NewFileSet() + apiDir, err := filepath.Abs(rootPath) + if err != nil { + return nil, err + } + + visitor := &Visitor{make(map[string]map[string]*methodMeta), map[string][]string{}} + m := &meta{ + OutPkg: outpkg, + Infos: map[string]*strinfo{}, + Imports: map[string]string{}, + } + // filter := isGoFile + pkgs, err := parser.ParseDir(fset, apiDir, filter, parser.AllErrors|parser.ParseComments) + if err != nil { + return nil, err + } + ap := pkgs[pkg] + + ast.Walk(visitor, ap) + ignoreMethods := map[string][]string{} + for k, f := range ap.Files { + if strings.HasSuffix(k, "blockstore.go") { + fmt.Println(k) + } + + var replacedPkgName = make(map[string]string) + + cmap := ast.NewCommentMap(fset, f, f.Comments) + for _, im := range f.Imports { + m.Imports[im.Path.Value] = im.Path.Value + if im.Name != nil { + replacedPkgName[im.Name.Name] = "x" + m.Imports[im.Path.Value] = im.Name.Name + " " + m.Imports[im.Path.Value] + } + } + + for ifname, methods := range visitor.Methods { + if _, ok := m.Infos[ifname]; !ok { + m.Infos[ifname] = &strinfo{ + Name: ifname, + Methods: map[string]*methodInfo{}, + Include: visitor.Include[ifname], + } + } + info := m.Infos[ifname] + for mname, node := range methods { + filteredComments := cmap.Filter(node.node).Comments() + if _, ok := info.Methods[mname]; !ok { + var params, pnames []string + for _, param := range node.ftype.Params.List { + pstr, err := typeName(param.Type, outpkg) + if err != nil { + return nil, err + } + + c := len(param.Names) + if c == 0 { + c = 1 + } + + for i := 0; i < c; i++ { + pname := fmt.Sprintf("p%d", len(params)) + pnames = append(pnames, pname) + params = append(params, pname+" "+pstr) + } + } + + var results []string + for _, result := range node.ftype.Results.List { + if exp, isok := result.Type.(*ast.SelectorExpr); isok && mname == "ChainStatObj" { + x, _ := json.MarshalIndent(exp, "", " ") + fmt.Printf("%s\n", string(x)) + } + rs, err := typeName(result.Type, outpkg) + if err != nil { + return nil, err + } + results = append(results, rs) + } + + defRes := "" + if len(results) > 1 { + defRes = results[0] + switch { + case defRes[0] == '*' || defRes[0] == '<', defRes == "interface{}": + defRes = "nil" + case defRes == "bool": + defRes = "false" + case defRes == "string": + defRes = `""` + case defRes == "int", defRes == "int64", defRes == "uint64", defRes == "uint": + defRes = "0" + default: + defRes = "*new(" + defRes + ")" + } + defRes += ", " + } + + info.Methods[mname] = &methodInfo{ + Name: mname, + node: node.node, + Tags: map[string][]string{}, + NamedParams: strings.Join(params, ", "), + ParamNames: strings.Join(pnames, ", "), + Results: strings.Join(results, ", "), + DefRes: defRes, + } + } + + // try to parse tag info + if len(filteredComments) > 0 { + lastComment := filteredComments[len(filteredComments)-1] + // eg. cmt = `//perm:read` + cmt := lastComment.List[len(lastComment.List)-1].Text + cmt = strings.Replace(cmt, "//", "", 1) + info.Methods[mname].Tags[rkPerm] = strings.Split(cmt, ":") + } + } + } + } + for ifname, mnames := range ignoreMethods { + for _, mname := range mnames { + delete(m.Infos[ifname].Methods, mname) + } + } + + return m, nil +} + +func typeName(e ast.Expr, pkg string) (string, error) { + switch t := e.(type) { + case *ast.SelectorExpr: + return t.X.(*ast.Ident).Name + "." + t.Sel.Name, nil + case *ast.Ident: + pstr := t.Name + if !unicode.IsLower(rune(pstr[0])) && pkg != "client" { + pstr = "client." + pstr // todo src pkg name + } + return pstr, nil + case *ast.ArrayType: + subt, err := typeName(t.Elt, pkg) + if err != nil { + return "", err + } + return "[]" + subt, nil + case *ast.StarExpr: + subt, err := typeName(t.X, pkg) + if err != nil { + return "", err + } + return "*" + subt, nil + case *ast.MapType: + k, err := typeName(t.Key, pkg) + if err != nil { + return "", err + } + v, err := typeName(t.Value, pkg) + if err != nil { + return "", err + } + return "map[" + k + "]" + v, nil + case *ast.StructType: + if len(t.Fields.List) != 0 { + return "", xerrors.Errorf("can't struct") + } + return "struct{}", nil + case *ast.InterfaceType: + if len(t.Methods.List) != 0 { + return "", xerrors.Errorf("can't interface") + } + return "interface{}", nil + case *ast.ChanType: + subt, err := typeName(t.Value, pkg) + if err != nil { + return "", err + } + if t.Dir == ast.SEND { + subt = "->chan " + subt + } else { + subt = "<-chan " + subt + } + return subt, nil + default: + return "", xerrors.Errorf("unknown type") + } +} + +type stableMethodInfo struct { + // Lotus and Venus both have functions and the same permissions + Common map[string]string + // Venus has functions that Lotus does not + Extend map[string]string + // Lotus has functions that Venus does not + Loss map[string]string + // Both Lotus and venus has functions but the permissions are different + Gap map[string]string +} + +func newStableMethodInfo() *stableMethodInfo { + return &stableMethodInfo{ + Common: make(map[string]string), + Extend: make(map[string]string), + Loss: make(map[string]string), + Gap: make(map[string]string), + } +} + +func check(bmp map[string]string, m *meta) *stableMethodInfo { + smi := newStableMethodInfo() + vMethodPerms := make(map[string]string) + for _, info := range m.Infos { + for _, one := range info.Methods { + mperm := one.Tags[rkPerm][1] + vMethodPerms[one.Name] = mperm + if perm, ok := bmp[one.Name]; ok { + if mperm != perm { + smi.Gap[one.Name] = fmt.Sprintf("venus:%s lotus:%s", mperm, perm) + continue + } + smi.Common[one.Name] = mperm + } else { + smi.Extend[one.Name] = mperm + } + } + } + for m, p := range bmp { + if _, ok := vMethodPerms[m]; !ok { + smi.Loss[m] = p + } + } + + return smi +} + +func doTemplate(outfile string, info interface{}, templ string) error { + w, err := os.OpenFile(outfile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) + if err != nil { + return err + } + t := template.Must(template.New(""). + Funcs(template.FuncMap{}).Parse(templ)) + + return t.Execute(w, info) +} + +var templ = `// Code generated by github.com/filecoin-project/tools/gen/api. DO NOT EDIT. + +package {{.OutPkg}} + +import ( +{{range .Imports}} {{.}} +{{end}}) +{{range .Infos}} {{$name := .Name}} +type {{.Name}}Struct struct { +{{range .Include}} {{.}}Struct +{{end}}{{ if gt (len .Methods) 0 }} Internal struct { {{range .Methods}} + {{.Name}} func({{.NamedParams}}) ({{.Results}}) ` + "`" + `{{range .Tags}}{{index . 0}}:"{{index . 1}}"{{end}}` + "`" + ` +{{end}} } +{{end}}} + +{{range .Methods}}func(s *{{$name}}Struct) {{.Name}} ({{.NamedParams}}) ({{.Results}}){ + return s.Internal.{{.Name}}({{.ParamNames}}) +} + +{{end}} {{end}} +` + +func checkError(err error) { + if err != nil { + panic(err) + } +} + +func outputWithJSON(obj interface{}, comment string) { + b, err := json.MarshalIndent(obj, "", "\t") + if err != nil { + fmt.Println("json marshal error: ", err) + } + fmt.Println(comment, "\n", string(b)) +} diff --git a/venus-devtool/cborgen/main.go b/venus-devtool/cborgen/main.go new file mode 100644 index 0000000000..b6e07b4ccd --- /dev/null +++ b/venus-devtool/cborgen/main.go @@ -0,0 +1,73 @@ +package main + +import ( + "log" + "path/filepath" + + gen "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p/exchange" + "github.com/filecoin-project/venus/venus-shared/libp2p/hello" + "github.com/filecoin-project/venus/venus-shared/paych" +) + +type genTarget struct { + dir string + pkg string + types []interface{} +} + +func main() { + targets := []genTarget{ + { + dir: "../venus-shared/libp2p/hello/", + types: []interface{}{ + hello.GreetingMessage{}, + hello.LatencyMessage{}, + }, + }, + { + dir: "../venus-shared/libp2p/exchange/", + types: []interface{}{ + exchange.Request{}, + exchange.Response{}, + exchange.CompactedMessages{}, + exchange.BSTipSet{}, + }, + }, + { + dir: "../venus-shared/paych/", + types: []interface{}{ + paych.PaymentInfo{}, + }, + }, + { + dir: "../venus-shared/chain/", + types: []interface{}{ + chain.BlockHeader{}, + chain.Ticket{}, + chain.ElectionProof{}, + chain.BeaconEntry{}, + chain.Message{}, + chain.SignedMessage{}, + chain.Actor{}, + chain.MessageRoot{}, + chain.MessageReceipt{}, + chain.BlockMsg{}, + chain.ExpTipSet{}, + }, + }, + } + + for _, target := range targets { + pkg := target.pkg + if pkg == "" { + pkg = filepath.Base(target.dir) + } + + if err := gen.WriteTupleEncodersToFile(filepath.Join(target.dir, "cbor_gen.go"), pkg, target.types...); err != nil { + log.Fatalf("gen for %s: %s", target.dir, err) + } + } +} diff --git a/venus-devtool/compatible/TODO.md b/venus-devtool/compatible/TODO.md new file mode 100644 index 0000000000..2ddf930307 --- /dev/null +++ b/venus-devtool/compatible/TODO.md @@ -0,0 +1,3 @@ +# TODO Items for Compatible Checks Between Lotus & Venus +- [ ] venus-shared/actors/version.go +- [ ] upgrade schedules diff --git a/venus-devtool/compatible/actors/list.go b/venus-devtool/compatible/actors/list.go new file mode 100644 index 0000000000..a8bfae0c24 --- /dev/null +++ b/venus-devtool/compatible/actors/list.go @@ -0,0 +1,47 @@ +package main + +import ( + "fmt" + "io/fs" + "os" + "sort" + "strings" +) + +var filterWithSuffix = func(suffix string) func(path string, d fs.DirEntry) bool { + return func(path string, d fs.DirEntry) bool { + if d.IsDir() { + return true + } + + if !strings.HasSuffix(path, suffix) { + return true + } + + return false + } +} + +func listFilesInDir(dir string, filter func(string, fs.DirEntry) bool) ([]string, error) { + var paths []string + + err := fs.WalkDir(os.DirFS(dir), ".", func(path string, d fs.DirEntry, err error) error { + if err != nil { + return fmt.Errorf("walking %s: %w", path, err) + } + + if filter(path, d) { + return nil + } + + paths = append(paths, path) + return nil + }) + + if err != nil { + return nil, fmt.Errorf("walk through the chain/actors subdir: %w", err) + } + + sort.Strings(paths) + return paths, nil +} diff --git a/venus-devtool/compatible/actors/main.go b/venus-devtool/compatible/actors/main.go new file mode 100644 index 0000000000..8ae1746842 --- /dev/null +++ b/venus-devtool/compatible/actors/main.go @@ -0,0 +1,206 @@ +package main + +import ( + "fmt" + "io/fs" + "log" + "os" + "path/filepath" + "regexp" + "strings" + + "github.com/urfave/cli/v2" +) + +func main() { + app := &cli.App{ + Name: "actors", + Usage: "devtool for template compatible checks between lotus & venus", + EnableBashCompletion: true, + Flags: []cli.Flag{}, + Commands: []*cli.Command{ + sourcesCmd, + templatesCmd, + renderCmd, + replicaCmd, + }, + } + + app.Setup() + + if err := app.Run(os.Args); err != nil { + fmt.Fprintf(os.Stderr, "ERR: %v\n", err) // nolint: errcheck + } +} + +var templatesCmd = &cli.Command{ + Name: "templates", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "dst", + Value: "", + }, + }, + Action: func(c *cli.Context) error { + srcDir, err := findActorsPkgDir() + if err != nil { + return fmt.Errorf("find chain/actors: %w", err) + } + + log.Println("listing") + paths, err := listFilesInDir(srcDir, filterWithSuffix(goTemplateExt)) + if err != nil { + return fmt.Errorf("list template files: %w", err) + } + + fmt.Println("TEMPLATES IN chain/actors:") + + for _, p := range paths { + fmt.Printf("\t%s\n", p) + } + + dstDir := c.String("dst") + if dstDir == "" { + return nil + } + + log.Println("fetching") + + dstAbs, err := filepath.Abs(dstDir) + if err != nil { + return fmt.Errorf("get absolute dst path for %s: %w", dstDir, err) + } + + return fetch(srcDir, dstAbs, paths) + }, +} + +var renderCmd = &cli.Command{ + Name: "render", + ArgsUsage: "[dir]", + Action: func(cctx *cli.Context) error { + dir := cctx.Args().First() + if dir == "" { + return fmt.Errorf("dir is required") + } + + abs, err := filepath.Abs(dir) + if err != nil { + return fmt.Errorf("get abs path for %s: %w", dir, err) + } + + templates, err := listFilesInDir(dir, filterWithSuffix(goTemplateExt)) + if err != nil { + return fmt.Errorf("list templates in %s: %w", abs, err) + } + + log.Print("rendering") + for _, tpath := range templates { + err = render(filepath.Join(abs, tpath)) + if err != nil { + return fmt.Errorf("for %s: %w", tpath, err) + } + + log.Printf("%s done", tpath) + } + + return nil + }, +} + +var sourcesCmd = &cli.Command{ + Name: "sources", + Action: func(cctx *cli.Context) error { + srcDir, err := findActorsPkgDir() + if err != nil { + return fmt.Errorf("find chain/actors: %w", err) + } + + files, err := listFilesInDir(srcDir, filterWithSuffix(goSourceCodeExt)) + if err != nil { + return fmt.Errorf("list source code files: %w", err) + } + + fmt.Println("SOURCES IN chain/actors:") + + for _, p := range files { + fmt.Printf("\t%s\n", p) + } + return nil + }, +} + +// todo: move to the appropriate +var replicaCmd = &cli.Command{ + Name: "replica", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "dst", + Value: "", + Required: true, + }, + }, + Action: func(cctx *cli.Context) error { + srcDir, err := findActorsPkgDir() + if err != nil { + return fmt.Errorf("find chain/actors: %w", err) + } + + reg := regexp.MustCompile(`v[0-9]+.go`) + + files, err := listFilesInDir(srcDir, func(path string, d fs.DirEntry) bool { + if d.IsDir() { + return true + } + + // need adt.go diff_adt.go + if strings.Contains(path, "adt.go") { + return false + } + + // skip test file + if strings.HasSuffix(path, "test.go") { + return true + } + + if strings.HasSuffix(path, "main.go") || strings.Contains(path, "template") || + strings.Contains(path, "message") { + return true + } + + dir := filepath.Dir(path) + arr := strings.Split(dir, "/") + if strings.HasSuffix(path, fmt.Sprintf("%s.go", arr[len(arr)-1])) { + return true + } + + if reg.MatchString(d.Name()) { + return true + } + + return false + }) + if err != nil { + return fmt.Errorf("list replica files failed: %w", err) + } + + fmt.Println("replica files IN chain/actors:") + + for _, p := range files { + fmt.Printf("\t%s\n", p) + } + + replacers := [][2]string{ + {"github.com/filecoin-project/lotus/chain/actors", "github.com/filecoin-project/venus/venus-shared/actors"}, + {"github.com/filecoin-project/lotus/chain/actors/adt", "github.com/filecoin-project/venus/venus-shared/actors/adt"}, + {"github.com/filecoin-project/lotus/chain/actors/aerrors", "github.com/filecoin-project/venus/venus-shared/actors/aerrors"}, + } + + for _, file := range files { + if err := fetchOne(srcDir, cctx.String("dst"), file, replacers); err != nil { + return fmt.Errorf("fetch for %s: %w", file, err) + } + } + return nil + }, +} diff --git a/venus-devtool/compatible/actors/render.go b/venus-devtool/compatible/actors/render.go new file mode 100644 index 0000000000..60976629d8 --- /dev/null +++ b/venus-devtool/compatible/actors/render.go @@ -0,0 +1,114 @@ +package main + +import ( + "bytes" + "fmt" + "go/format" + "os" + "path/filepath" + "strings" + "text/template" + + "github.com/filecoin-project/lotus/chain/actors" +) + +func importPath(v int) string { + if v == 0 { + return "/" + } + + return fmt.Sprintf("/v%d/", v) +} + +func render(tpath string) error { + dir := filepath.Dir(tpath) + fname := filepath.Base(tpath) + + data, err := os.ReadFile(tpath) + if err != nil { + return fmt.Errorf("read file content: %w", err) + } + + var tname string + separated := false + if strings.HasSuffix(fname, separatedGoTemplateExt) { + tname = fname[:len(fname)-separatedGoTemplateExtLen] + separated = true + } else { + tname = fname[:len(fname)-goTemplateExtLen] + } + + funcMap := template.FuncMap{} + if !separated { + funcMap["import"] = importPath + } + + t, err := template.New(tname).Funcs(funcMap).Parse(string(data)) + if err != nil { + return fmt.Errorf("parse template: %w", err) + } + + if separated { + err = renderSeparated(t, dir) + } else { + err = renderSingle(t, dir) + } + + if err != nil { + return err + } + + return nil +} + +func renderSingle(t *template.Template, dir string) error { + var buf bytes.Buffer + err := t.Execute(&buf, map[string]interface{}{ + "versions": actors.Versions, + "latestVersion": actors.LatestVersion, + }) + + if err != nil { + return fmt.Errorf("render single template: %w", err) + } + + formatted, err := format.Source(buf.Bytes()) + if err != nil { + return fmt.Errorf("format go source file: %w", err) + } + + err = os.WriteFile(filepath.Join(dir, t.Name()+".go"), formatted, 0644) + if err != nil { + return fmt.Errorf("write to file: %w", err) + } + + return nil +} + +func renderSeparated(t *template.Template, dir string) error { + var buf bytes.Buffer + for _, v := range actors.Versions { + buf.Reset() + + err := t.Execute(&buf, map[string]interface{}{ + "v": v, + "import": importPath(v), + }) + + if err != nil { + return fmt.Errorf("render separated template for ver %d: %w", v, err) + } + + formatted, err := format.Source(buf.Bytes()) + if err != nil { + return fmt.Errorf("format go source file for ver %d: %w", v, err) + } + + err = os.WriteFile(filepath.Join(dir, fmt.Sprintf("%s.v%d.go", t.Name(), v)), formatted, 0644) + if err != nil { + return fmt.Errorf("write to file for ver %d: %w", v, err) + } + } + + return nil +} diff --git a/venus-devtool/compatible/actors/source.go b/venus-devtool/compatible/actors/source.go new file mode 100644 index 0000000000..06ab7d0f9a --- /dev/null +++ b/venus-devtool/compatible/actors/source.go @@ -0,0 +1 @@ +package main diff --git a/venus-devtool/compatible/actors/templates.go b/venus-devtool/compatible/actors/templates.go new file mode 100644 index 0000000000..b1a297bdee --- /dev/null +++ b/venus-devtool/compatible/actors/templates.go @@ -0,0 +1,130 @@ +package main + +import ( + "bytes" + "fmt" + "go/build" + "io" + "log" + "os" + "path/filepath" + "strings" +) + +const ( + goSourceCodeExt = ".go" + + goTemplateExt = ".go.template" + goTemplateExtLen = len(goTemplateExt) + + separatedGoTemplateExt = ".sep.go.template" + separatedGoTemplateExtLen = len(separatedGoTemplateExt) +) + +var separatedSuffixes = []string{ + "state.go.template", + "message.go.template", +} + +var replacers = [][2]string{ + { + "\"github.com/filecoin-project/lotus/chain/types\"", + "types \"github.com/filecoin-project/venus/venus-shared/chain\"", + }, + { + "github.com/filecoin-project/lotus/chain/actors", + "github.com/filecoin-project/venus/venus-shared/actors", + }, + { + "\"github.com/filecoin-project/lotus/node/modules/dtypes\"", + "", + }, + { + "dtypes.NetworkName", + "string", + }, +} + +func findActorsPkgDir() (string, error) { + pkg, err := build.Import("github.com/filecoin-project/lotus/chain/actors", ".", build.FindOnly) + if err != nil { + return "", fmt.Errorf("find local build path for louts: %w", err) + } + + return pkg.Dir, nil +} + +func fetch(src, dst string, paths []string) error { + err := os.MkdirAll(dst, 0755) + if err != nil { + return fmt.Errorf("mkdir-all for %s: %w", dst, err) + } + + for _, rel := range paths { + if err := fetchOne(src, dst, rel, replacers); err != nil { + return fmt.Errorf("fetch template for %s: %w", rel, err) + } + + log.Printf("\t%s done", rel) + } + + return nil +} + +func fetchOne(srcDir, dstDir string, rel string, replacers [][2]string) error { + dstRel := rel + for _, suffix := range separatedSuffixes { + if strings.HasSuffix(rel, suffix) { + dstRel = strings.ReplaceAll(rel, goTemplateExt, separatedGoTemplateExt) + break + } + } + + fsrc, err := os.Open(filepath.Join(srcDir, rel)) + if err != nil { + return fmt.Errorf("open source file: %w", err) + } + + defer fsrc.Close() // nolint: errcheck + + dstPath := filepath.Join(dstDir, dstRel) + err = os.MkdirAll(filepath.Dir(dstPath), 0755) + if err != nil { + return fmt.Errorf("mkdir for %s: %w", dstPath, err) + } + + fdst, err := os.OpenFile(dstPath, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0644) + if err != nil { + return fmt.Errorf("open dst file: %w", err) + } + + defer fdst.Close() // nolint: errcheck + + var buf bytes.Buffer + + if _, err := buf.WriteString(fmt.Sprintf("// FETCHED FROM LOTUS: %s\n\n", rel)); err != nil { + return fmt.Errorf("write file header: %w", err) + } + + _, err = io.Copy(&buf, fsrc) + if err != nil { + return fmt.Errorf("copy to buffer: %w", err) + } + + data := buf.Bytes() + for _, replacer := range replacers { + data = bytes.ReplaceAll(data, []byte(replacer[0]), []byte(replacer[1])) + } + + _, err = io.Copy(fdst, bytes.NewReader(data)) + if err != nil { + return fmt.Errorf("copy to dst file: %w", err) + } + + err = fdst.Sync() + if err != nil { + return fmt.Errorf("dst file sync: %w", err) + } + + return nil +} diff --git a/venus-devtool/compatible/apis/checksum.go b/venus-devtool/compatible/apis/checksum.go new file mode 100644 index 0000000000..40c1051e0a --- /dev/null +++ b/venus-devtool/compatible/apis/checksum.go @@ -0,0 +1,87 @@ +package main + +import ( + "bytes" + "crypto/md5" + "fmt" + "reflect" + "strings" + + "github.com/filecoin-project/lotus/api/v0api" + "github.com/filecoin-project/lotus/api/v1api" + "github.com/urfave/cli/v2" +) + +var checksumCmd = &cli.Command{ + Name: "checksum", + Flags: []cli.Flag{}, + Action: func(cctx *cli.Context) error { + wants := []reflect.Type{ + reflect.TypeOf((*v0api.FullNode)(nil)).Elem(), + reflect.TypeOf((*v1api.FullNode)(nil)).Elem(), + } + + var buf bytes.Buffer + for _, rt := range wants { + fmt.Printf("%s:\n", rt) + for mi := 0; mi < rt.NumMethod(); mi++ { + buf.Reset() + meth := rt.Method(mi) + numIn := meth.Type.NumIn() + numOut := meth.Type.NumOut() + + for ii := 0; ii < numIn; ii++ { + inTyp := meth.Type.In(ii) + fmt.Fprintf(&buf, "\tIn: %s\n", formatType(inTyp)) // nolint + } + + for oi := 0; oi < numOut; oi++ { + outTyp := meth.Type.Out(oi) + fmt.Fprintf(&buf, "\tOut: %s\n", formatType(outTyp)) // nolint + } + + fmt.Printf("\t%s:\tIn=%d,\tOut=%d,\tCheckSum=%x\n", meth.Name, numIn, numOut, md5.Sum(buf.Bytes())) + } + fmt.Println() + } + return nil + }, +} + +func formatType(rt reflect.Type) string { + switch rt.Kind() { + case reflect.Array: + return fmt.Sprintf("[%d]%s", rt.Len(), formatType(rt.Elem())) + + case reflect.Chan: + return fmt.Sprintf("%s %s", rt.ChanDir(), formatType(rt.Elem())) + + case reflect.Func: + ins := make([]string, rt.NumIn()) + outs := make([]string, rt.NumOut()) + for i := range ins { + ins[i] = formatType(rt.In(i)) + } + + for i := range outs { + outs[i] = formatType(rt.Out(i)) + } + + return fmt.Sprintf("func(%s) (%s)", strings.Join(ins, ", "), strings.Join(outs, ", ")) + + case reflect.Map: + return fmt.Sprintf("map[%s]%s", formatType(rt.Key()), formatType(rt.Elem())) + + case reflect.Ptr: + return fmt.Sprintf("*%s", formatType(rt.Elem())) + + case reflect.Slice: + return fmt.Sprintf("[]%s", formatType(rt.Elem())) + + default: + if p := rt.PkgPath(); p != "" { + return p + "." + rt.Name() + } + return rt.Name() + } +} diff --git a/venus-devtool/compatible/apis/diff.go b/venus-devtool/compatible/apis/diff.go new file mode 100644 index 0000000000..5fd2782c30 --- /dev/null +++ b/venus-devtool/compatible/apis/diff.go @@ -0,0 +1,102 @@ +package main + +import ( + "fmt" + "reflect" + "sort" + + "github.com/filecoin-project/lotus/api/v1api" + "github.com/urfave/cli/v2" + + "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + "github.com/filecoin-project/venus/venus-shared/typeutil" +) + +var diffCmd = &cli.Command{ + Name: "diff", + Flags: []cli.Flag{}, + Action: func(cctx *cli.Context) error { + pairs := [][2]reflect.Type{ + { + reflect.TypeOf((*v1.FullNode)(nil)).Elem(), + reflect.TypeOf((*v1api.FullNode)(nil)).Elem(), + }, + } + + for _, pair := range pairs { + showDiff(pair[0], pair[1]) + } + return nil + }, +} + +type methDiff struct { + typ string + name string + desc string +} + +func showDiff(impl, origin reflect.Type) { + fmt.Printf("%s <> %s:\n", formatType(impl), formatType(origin)) + implMethods := typeutil.ExportedMethods(impl) + originMethods := typeutil.ExportedMethods(origin) + + implMap := map[string]int{} + originMap := map[string]int{} + diffs := make([]methDiff, 0, len(implMethods)+len(originMethods)) + + for ii := range implMethods { + implMap[implMethods[ii].Name] = ii + } + + for oi := range originMethods { + methName := originMethods[oi].Name + originMap[methName] = oi + + ii, has := implMap[methName] + if !has { + // + diffs = append(diffs, methDiff{ + name: methName, + typ: "-", + }) + continue + } + + similar, reason := typeutil.Similar(implMethods[ii].Type, originMethods[oi].Type, typeutil.CodecJSON|typeutil.CodecCbor, typeutil.StructFieldsOrdered|typeutil.StructFieldTagsMatch) + if similar { + continue + } + + diffs = append(diffs, methDiff{ + typ: ">", + name: methName, + desc: reason.Error(), + }) + } + + for ii := range implMethods { + methName := implMethods[ii].Name + if _, has := originMap[methName]; !has { + diffs = append(diffs, methDiff{ + name: methName, + typ: "+", + }) + } + } + + sort.Slice(diffs, func(i, j int) bool { + return diffs[i].name < diffs[j].name + }) + + for _, d := range diffs { + if d.desc == "" { + fmt.Printf("\t%s %s\n", d.typ, d.name) + continue + } + + fmt.Printf("\t%s %s %s\n", d.typ, d.name, d.desc) + } + + fmt.Println() +} diff --git a/venus-devtool/compatible/apis/main.go b/venus-devtool/compatible/apis/main.go new file mode 100644 index 0000000000..df23ef34c8 --- /dev/null +++ b/venus-devtool/compatible/apis/main.go @@ -0,0 +1,27 @@ +package main + +import ( + "fmt" + "os" + + "github.com/urfave/cli/v2" +) + +func main() { + app := &cli.App{ + Name: "apis", + Usage: "devtool for api compatible checks between lotus & venus", + EnableBashCompletion: true, + Flags: []cli.Flag{}, + Commands: []*cli.Command{ + checksumCmd, + diffCmd, + }, + } + + app.Setup() + + if err := app.Run(os.Args); err != nil { + fmt.Fprintf(os.Stderr, "ERR: %v\n", err) // nolint: errcheck + } +} diff --git a/venus-devtool/compatible/main.go b/venus-devtool/compatible/main.go new file mode 100644 index 0000000000..c7ba71a5b7 --- /dev/null +++ b/venus-devtool/compatible/main.go @@ -0,0 +1,92 @@ +package main + +import ( + "fmt" + "go/ast" + "go/build" + "go/parser" + "go/token" + "log" + "path/filepath" + + _ "github.com/filecoin-project/lotus/build" +) + +func main() { + pkg, err := build.Import("github.com/filecoin-project/lotus/gen", ".", build.FindOnly) + if err != nil { + log.Fatalln("find pkg", err) + } + + targetFile := filepath.Join(pkg.Dir, "main.go") + fset := token.NewFileSet() + f, err := parser.ParseFile(fset, targetFile, nil, 0) + if err != nil { + log.Fatalln("parse file", err) + } + + ast.Inspect(f, func(n ast.Node) bool { + if expr, ok := n.(*ast.CallExpr); ok { + if fn, ok := expr.Fun.(*ast.SelectorExpr); ok { + if fn.Sel != nil && fn.Sel.Name == "WriteMapEncodersToFile" { + ci, err := parseGenCallExpr(expr) + if err != nil { + log.Fatalln(err) + } + + fmt.Printf("%s: %s\n", ci.pkgName, filepath.Dir(filepath.Join("github.com/filecoin-project/lotus", ci.path))) + for ti := range ci.typeNames { + fmt.Printf("\t%s\n", ci.typeNames[ti]) + } + + fmt.Println("") + } + } + } + return true + }) +} + +type callInfo struct { + path string + pkgName string + typeNames []string +} + +func parseGenCallExpr(expr *ast.CallExpr) (*callInfo, error) { + if numIn := len(expr.Args); numIn < 3 { + return nil, fmt.Errorf("not enough args, got %d", numIn) + } + + first, ok := expr.Args[0].(*ast.BasicLit) + if !ok || first.Kind != token.STRING { + return nil, fmt.Errorf("1st arg should be a string, got %T", first) + } + + second, ok := expr.Args[1].(*ast.BasicLit) + if !ok || second.Kind != token.STRING { + return nil, fmt.Errorf("2nd arg should be a string, got %T", second) + } + + typeNames := make([]string, 0, len(expr.Args)-2) + + for _, typArg := range expr.Args[2:] { + lit, ok := typArg.(*ast.CompositeLit) + if !ok { + return nil, fmt.Errorf("should be CompositeLit, got %T", typArg) + } + + sel, ok := lit.Type.(*ast.SelectorExpr) + if !ok || sel.Sel == nil { + return nil, fmt.Errorf("unexpected literal type: %T", sel) + } + + typeNames = append(typeNames, sel.Sel.Name) + } + + return &callInfo{ + path: first.Value[1 : len(first.Value)-1], + pkgName: second.Value[1 : len(second.Value)-1], + typeNames: typeNames, + }, nil +} diff --git a/venus-devtool/go.mod b/venus-devtool/go.mod new file mode 100644 index 0000000000..835c3e7f7c --- /dev/null +++ b/venus-devtool/go.mod @@ -0,0 +1,32 @@ +module github.com/filecoin-project/venus/venus-devtool + +go 1.16 + +require ( + github.com/filecoin-project/go-address v0.0.6 + github.com/filecoin-project/go-bitfield v0.2.4 + github.com/filecoin-project/go-data-transfer v1.12.1 + github.com/filecoin-project/go-ds-versioning v0.1.0 // indirect + github.com/filecoin-project/go-fil-markets v1.14.1 + github.com/filecoin-project/go-jsonrpc v0.1.5 + github.com/filecoin-project/go-state-types v0.1.1 + github.com/filecoin-project/lotus v1.13.2-0.20220103185743-9b11c4b31932 + github.com/filecoin-project/venus v0.0.0-00010101000000-000000000000 + github.com/ipfs/go-cid v0.1.0 + github.com/ipfs/go-graphsync v0.11.5 + github.com/ipfs/go-ipfs-http-client v0.1.0 // indirect + github.com/ipld/go-ipld-selector-text-lite v0.0.1 + github.com/libp2p/go-libp2p-core v0.13.0 + github.com/libp2p/go-libp2p-pubsub v0.6.0 + github.com/multiformats/go-multiaddr v0.4.1 + github.com/urfave/cli/v2 v2.3.0 + github.com/whyrusleeping/cbor-gen v0.0.0-20211110122933-f57984553008 + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 +) + +replace ( + github.com/filecoin-project/go-jsonrpc => github.com/ipfs-force-community/go-jsonrpc v0.1.4-0.20210731021807-68e5207079bc + github.com/filecoin-project/venus => ../ + github.com/ipfs/go-ipfs-cmds => github.com/ipfs-force-community/go-ipfs-cmds v0.6.1-0.20210521090123-4587df7fa0ab + github.com/multiformats/go-multiaddr => github.com/multiformats/go-multiaddr v0.3.0 +) diff --git a/venus-devtool/go.sum b/venus-devtool/go.sum new file mode 100644 index 0000000000..cfe5b03408 --- /dev/null +++ b/venus-devtool/go.sum @@ -0,0 +1,2798 @@ +4d63.com/gochecknoglobals v0.0.0-20201008074935-acfc0b28355a/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= +cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +contrib.go.opencensus.io/exporter/jaeger v0.2.1/go.mod h1:Y8IsLgdxqh1QxYxPC5IgXVmBaeLUeQFfBeBi9PbeZd0= +contrib.go.opencensus.io/exporter/prometheus v0.3.0/go.mod h1:rpCPVQKhiyH8oomWgm34ZmgIdZa8OVYO5WAIygPbBBE= +contrib.go.opencensus.io/exporter/prometheus v0.4.0 h1:0QfIkj9z/iVZgK31D9H9ohjjIDApI2GOPScCKwxedbs= +contrib.go.opencensus.io/exporter/prometheus v0.4.0/go.mod h1:o7cosnyfuPVK0tB8q0QmaQNhGnptITnPQB+z1+qeFB0= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= +dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= +dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= +dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= +git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM= +github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GeertJohan/go.incremental v1.0.0 h1:7AH+pY1XUgQE4Y1HcXYaMqAI0m9yrFqo/jt0CW30vsg= +github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= +github.com/GeertJohan/go.rice v1.0.2 h1:PtRw+Tg3oa3HYwiDBZyvOJ8LdIyf6lAovJJtr7YOAYk= +github.com/GeertJohan/go.rice v1.0.2/go.mod h1:af5vUNlDNkCjOZeSGFgIJxDje9qdjsO6hshx0gTmZt4= +github.com/Gurpartap/async v0.0.0-20180927173644-4f7f499dd9ee/go.mod h1:W0GbEAA4uFNYOGG2cJpmFJ04E6SD1NLELPYZB57/7AY= +github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y= +github.com/Kubuxu/imtui v0.0.0-20210401140320-41663d68d0fa/go.mod h1:WUmMvh9wMtqj1Xhf1hf3kp9RvL+y6odtdYxpyZjb90U= +github.com/Masterminds/glide v0.13.2/go.mod h1:STyF5vcenH/rUqTEv+/hBXlSTo7KYwg2oc2f4tzPWic= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/vcs v1.13.0/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= +github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= +github.com/Stebalien/go-bitfield v0.0.1 h1:X3kbSSPUaJK60wV2hjOPZwmpljr6VGCqdq4cBLhbQBo= +github.com/Stebalien/go-bitfield v0.0.1/go.mod h1:GNjFpasyUVkHMsfEOk8EFLJ9syQ6SI+XWrX9Wf2XH0s= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/akavel/rsrc v0.8.0 h1:zjWn7ukO9Kc5Q62DOJCcxGpXC18RawVtYAGdz2aLlfw= +github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= +github.com/alecthomas/jsonschema v0.0.0-20200530073317-71f438968921/go.mod h1:/n6+1/DWPltRLWL/VKyUxg6tzsl5kHUCcraimt4vr60= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/ashanbrown/forbidigo v1.1.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v0.0.0-20210308000810-4155955488a0/go.mod h1:oG9Dnez7/ESBqc4EdrdNlryeo7d0KcW1ftXHm7nU/UU= +github.com/awnumar/memcall v0.0.0-20191004114545-73db50fd9f80/go.mod h1:S911igBPR9CThzd/hYQQmTc9SWNu3ZHIlCGaWsWsoJo= +github.com/awnumar/memguard v0.22.2/go.mod h1:33OwJBHC+T4eEfFcDrQb78TMlBMBvcOPCXWU9xE34gM= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.32.11/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= +github.com/benbjohnson/clock v1.0.1/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.0.2/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.2.0 h1:9Re3G2TWxkE06LdMWMpcY6KV81GLXMGiYpPYUPkFAws= +github.com/benbjohnson/clock v1.2.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bep/debounce v1.2.0 h1:wXds8Kq8qRfwAOpAxHrJDbCXgC5aHSzgQb/0gKsHQqo= +github.com/bep/debounce v1.2.0/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/bluele/gcache v0.0.0-20190518031135-bc40bd653833/go.mod h1:8c4/i2VlovMO2gBnHGQPN5EJw+H0lx1u/5p+cgsXtCk= +github.com/bombsimon/wsl/v3 v3.2.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= +github.com/briandowns/spinner v1.11.1/go.mod h1:QOuQk7x+EaDASo80FEXwlwiA+j/PPIcX3FScO+3/ZPQ= +github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= +github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btcd v0.0.0-20190605094302-a0d1e3e36d50/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= +github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= +github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/buger/goterm v1.0.3/go.mod h1:HiFWV3xnkolgrBV3mY8m0X0Pumt4zg4QhbdOzQtB8tE= +github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.6/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= +github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.2.0 h1:Fv93L3KKckEcEHR3oApXVzyBTDA8WAm6VXhPE00N3f8= +github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/codegangsta/cli v1.20.0/go.mod h1:/qJNoX69yVSKu5o4jLyXAENLRyk1uhi7zkbQ3slBdOA= +github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327 h1:7grrpcfCtbZLsjtB0DgMuzs1umsJmpzaHMZ6cO6iAWw= +github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.2.1-0.20180108230905-e214231b295a/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pqaw19uhpSCzhj44qo35pNgKFGqzDKkU= +github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/corpix/uarand v0.1.1/go.mod h1:SFKZvkcRoLqVRFZ4u25xPmp6m9ktANfbpXZ7SJ0/FNU= +github.com/cosiner/argv v0.1.0/go.mod h1:EusR6TucWKX+zFgtdUsKT2Cvg45K5rtpCcWz4hK06d8= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 h1:HVTnpeuvF6Owjd5mniCL8DEXo7uYXdQEmOP4FJbV5tg= +github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3/go.mod h1:p1d6YEZWvFzEh4KLyvBcVSnrfNDDvK2zfK/4x2v/4pE= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= +github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= +github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +github.com/daaku/go.zipexe v1.0.0 h1:VSOgZtH418pH9L16hC/JrgSNJbbAL26pj7lmD1+CGdY= +github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= +github.com/daixiang0/gci v0.2.8/go.mod h1:+4dZ7TISfSmqfAGv59ePaHfNzgGtIkHAhhdKggP1JAc= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= +github.com/davidlazar/go-crypto v0.0.0-20190912175916-7055855a373f/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/deepmap/oapi-codegen v1.3.13/go.mod h1:WAmG5dWY8/PYHt4vKxlt90NsbHMAOCiteYKZMiIRfOo= +github.com/denis-tingajkin/go-header v0.4.2/go.mod h1:eLRHAVXzE5atsKAnNRDB90WHCFFnBUn4RN0nRcs1LJA= +github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e h1:lj77EKYUpYXTd8CD/+QMIf8b6OIOTsfEBSXiAzuEHTU= +github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e/go.mod h1:3ZQK6DMPSz/QZ73jlWxBtUhNA8xZx7LzUFSq/OfP8vk= +github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= +github.com/dgraph-io/badger v1.6.0-rc1/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= +github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= +github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= +github.com/dgraph-io/badger/v2 v2.0.3/go.mod h1:3KY8+bsP8wI0OEnQJAKpd4wIJW/Mm32yw2j/9FUVnIM= +github.com/dgraph-io/badger/v2 v2.2007.3 h1:Sl9tQWz92WCbVSe8pj04Tkqlm2boW+KAxd+XSs58SQI= +github.com/dgraph-io/badger/v2 v2.2007.3/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= +github.com/dgraph-io/badger/v3 v3.2011.1/go.mod h1:0rLLrQpKVQAL0or/lBLMQznhr6dWWX7h5AKnmnqx268= +github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.0.4-0.20210122082011-bb5d392ed82d/go.mod h1:tv2ec8nA7vRpSYX7/MbP52ihrUMXIHit54CQMq8npXQ= +github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= +github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.7.3-0.20190315170154-87d593639c77/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/drand/bls12-381 v0.3.2/go.mod h1:dtcLgPtYT38L3NO6mPDYH0nbpc5tjPassDqiniuAt4Y= +github.com/drand/drand v1.2.1/go.mod h1:j0P7RGmVaY7E/OuO2yQOcQj7OgeZCuhgu2gdv0JAm+g= +github.com/drand/drand v1.3.0/go.mod h1:D6kAVlxufq1gi71YCGfzN455JrXF4Q272ZJEG975fzo= +github.com/drand/kyber v1.0.1-0.20200110225416-8de27ed8c0e2/go.mod h1:UpXoA0Upd1N9l4TvRPHr1qAUBBERj6JQ/mnKI3BPEmw= +github.com/drand/kyber v1.0.2/go.mod h1:x6KOpK7avKj0GJ4emhXFP5n7M7W7ChAPmnQh/OL6vRw= +github.com/drand/kyber v1.1.4/go.mod h1:9+IgTq7kadePhZg7eRwSD7+bA+bmvqRK+8DtmoV5a3U= +github.com/drand/kyber v1.1.7/go.mod h1:UkHLsI4W6+jT5PvNxmc0cvQAgppjTUpX+XCsN9TXmRo= +github.com/drand/kyber-bls12381 v0.2.0/go.mod h1:zQip/bHdeEB6HFZSU3v+d3cQE0GaBVQw9aR2E7AdoeI= +github.com/drand/kyber-bls12381 v0.2.1/go.mod h1:JwWn4nHO9Mp4F5qCie5sVIPQZ0X6cw8XAeMRvc/GXBE= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/elastic/go-sysinfo v1.7.0 h1:4vVvcfi255+8+TyQ7TYUTEK3A+G8v5FLE+ZKYL1z1Dg= +github.com/elastic/go-sysinfo v1.7.0/go.mod h1:i1ZYdU10oLNfRzq4vq62BEwD2fH8KaWh6eh0ikPT9F0= +github.com/elastic/go-windows v1.0.0 h1:qLURgZFkkrYyTTkvYpsZIgf83AUsdIHfvlJaqaZ7aSY= +github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= +github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= +github.com/elastic/gosigar v0.14.1 h1:T0aQ7n/n2ZA9W7DmAnj60v+qzqKERdBgJBO1CG2W6rc= +github.com/elastic/gosigar v0.14.1/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= +github.com/ema/qdisc v0.0.0-20190904071900-b82c76788043/go.mod h1:ix4kG2zvdUd8kEKSW0ZTr1XLks0epFpI4j745DXxlNE= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/esimonov/ifshort v1.0.2/go.mod h1:yZqNJUrNn20K8Q9n2CrjTKYyVEmX209Hgu+M1LBpeZE= +github.com/etclabscore/go-jsonschema-walk v0.0.6/go.mod h1:VdfDY72AFAiUhy0ZXEaWSpveGjMT5JcDIm903NGqFwQ= +github.com/etclabscore/go-openrpc-reflect v0.0.36/go.mod h1:0404Ky3igAasAOpyj1eESjstTyneBAIk5PgJFbK4s5E= +github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 h1:BBso6MBKW8ncyZLv37o+KNyy0HrrHgfnOaGQC2qvN+A= +github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5/go.mod h1:JpoxHjuQauoxiFMl1ie8Xc/7TfLuMZ5eOCONd1sUBHg= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.8.0/go.mod h1:3l45GVGkyrnYNl9HoIjnp2NnNWvh6hLAqD8yTfGjnw8= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= +github.com/filecoin-project/dagstore v0.4.3-0.20211211192320-72b849e131d2/go.mod h1:tlV8C11UljvFq3WWlMh2oMViEaVaPb6uT8eL/YQgDfk= +github.com/filecoin-project/dagstore v0.4.4 h1:luolWahhzp3ulRsapGKE7raoLE3n2cFkQUJjPyqUmF4= +github.com/filecoin-project/dagstore v0.4.4/go.mod h1:7BlOvaTJrFJ1Qemt5jHlLJ4VhDIuSIzGS0IwO/0AXPA= +github.com/filecoin-project/filecoin-ffi v0.30.4-0.20200910194244-f640612a1a1f h1:vg/6KEAOBjICMaWj+xofJCp09HYRfpO3ZbJsnJo22pA= +github.com/filecoin-project/filecoin-ffi v0.30.4-0.20200910194244-f640612a1a1f/go.mod h1:+If3s2VxyjZn+KGGZIoRXBDSFQ9xL404JBJGf4WhEj0= +github.com/filecoin-project/go-address v0.0.3/go.mod h1:jr8JxKsYx+lQlQZmF5i2U0Z+cGQ59wMIps/8YW/lDj8= +github.com/filecoin-project/go-address v0.0.5/go.mod h1:jr8JxKsYx+lQlQZmF5i2U0Z+cGQ59wMIps/8YW/lDj8= +github.com/filecoin-project/go-address v0.0.6 h1:DWQtj38ax+ogHwyH3VULRIoT8E6loyXqsk/p81xoY7M= +github.com/filecoin-project/go-address v0.0.6/go.mod h1:7B0/5DA13n6nHkB8bbGx1gWzG/dbTsZ0fgOJVGsM3TE= +github.com/filecoin-project/go-amt-ipld/v2 v2.1.0/go.mod h1:nfFPoGyX0CU9SkXX8EoCcSuHN1XcbN0c6KBh7yvP5fs= +github.com/filecoin-project/go-amt-ipld/v2 v2.1.1-0.20201006184820-924ee87a1349 h1:pIuR0dnMD0i+as8wNnjjHyQrnhP5O5bmba/lmgQeRgU= +github.com/filecoin-project/go-amt-ipld/v2 v2.1.1-0.20201006184820-924ee87a1349/go.mod h1:vgmwKBkx+ca5OIeEvstiQgzAZnb7R6QaqE1oEDSqa6g= +github.com/filecoin-project/go-amt-ipld/v3 v3.0.0/go.mod h1:Qa95YNAbtoVCTSVtX38aAC1ptBnJfPma1R/zZsKmx4o= +github.com/filecoin-project/go-amt-ipld/v3 v3.1.0 h1:ZNJ9tEG5bE72vBWYiuh5bkxJVM3ViHNOmQ7qew9n6RE= +github.com/filecoin-project/go-amt-ipld/v3 v3.1.0/go.mod h1:UjM2QhDFrrjD5s1CdnkJkat4ga+LqZBZgTMniypABRo= +github.com/filecoin-project/go-bitfield v0.2.0/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= +github.com/filecoin-project/go-bitfield v0.2.3/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= +github.com/filecoin-project/go-bitfield v0.2.4 h1:uZ7MeE+XfM5lqrHJZ93OnhQKc/rveW8p9au0C68JPgk= +github.com/filecoin-project/go-bitfield v0.2.4/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= +github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2/go.mod h1:pqTiPHobNkOVM5thSRsHYjyQfq7O5QSCMhvuu9JoDlg= +github.com/filecoin-project/go-cbor-util v0.0.0-20201016124514-d0bbec7bfcc4/go.mod h1:pqTiPHobNkOVM5thSRsHYjyQfq7O5QSCMhvuu9JoDlg= +github.com/filecoin-project/go-cbor-util v0.0.1 h1:E1LYZYTtjfAQwCReho0VXvbu8t3CYAVPiMx8EiV/VAs= +github.com/filecoin-project/go-cbor-util v0.0.1/go.mod h1:pqTiPHobNkOVM5thSRsHYjyQfq7O5QSCMhvuu9JoDlg= +github.com/filecoin-project/go-commp-utils v0.1.3 h1:rTxbkNXZU7FLgdkBk8RsQIEOuPONHykEoX3xGk41Fkw= +github.com/filecoin-project/go-commp-utils v0.1.3/go.mod h1:3ENlD1pZySaUout0p9ANQrY3fDFoXdqyX04J+dWpK30= +github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= +github.com/filecoin-project/go-crypto v0.0.1 h1:AcvpSGGCgjaY8y1az6AMfKQWreF/pWO2JJGLl6gCq6o= +github.com/filecoin-project/go-crypto v0.0.1/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= +github.com/filecoin-project/go-data-transfer v1.12.0/go.mod h1:tDrD2jLU2TpVhd+5B8iqBp0fQRV4lP80WZccKXugjYc= +github.com/filecoin-project/go-data-transfer v1.12.1 h1:gAznAZKySVs2FS6T/vDq7R3f0DewLnxeROe0oOE6bZU= +github.com/filecoin-project/go-data-transfer v1.12.1/go.mod h1:j3HL645YiQFxcM+q7uPlGApILSqeweDABNgZQP7pDYU= +github.com/filecoin-project/go-ds-versioning v0.0.0-20211206185234-508abd7c2aff/go.mod h1:C9/l9PnB1+mwPa26BBVpCjG/XQCB0yj/q5CK2J8X1I4= +github.com/filecoin-project/go-ds-versioning v0.1.0 h1:y/X6UksYTsK8TLCI7rttCKEvl8btmWxyFMEeeWGUxIQ= +github.com/filecoin-project/go-ds-versioning v0.1.0/go.mod h1:mp16rb4i2QPmxBnmanUx8i/XANp+PFCCJWiAb+VW4/s= +github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= +github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= +github.com/filecoin-project/go-fil-commcid v0.1.0 h1:3R4ds1A9r6cr8mvZBfMYxTS88OqLYEo6roi+GiIeOh8= +github.com/filecoin-project/go-fil-commcid v0.1.0/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= +github.com/filecoin-project/go-fil-commp-hashhash v0.1.0 h1:imrrpZWEHRnNqqv0tN7LXep5bFEVOVmQWHJvl2mgsGo= +github.com/filecoin-project/go-fil-commp-hashhash v0.1.0/go.mod h1:73S8WSEWh9vr0fDJVnKADhfIv/d6dCbAGaAGWbdJEI8= +github.com/filecoin-project/go-fil-markets v1.14.1 h1:Bx+TSbkAN8K97Hpjgu+MpeRFbXIKH/fNpNp1ZGAEH3I= +github.com/filecoin-project/go-fil-markets v1.14.1/go.mod h1:vXOHH3q2+zLk929W+lIq3etuDFTyJJ8nG2DwGHG2R1E= +github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= +github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= +github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= +github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0/go.mod h1:7aWZdaQ1b16BVoQUYR+eEvrDCGJoPLxFpDynFjYfBjI= +github.com/filecoin-project/go-hamt-ipld/v3 v3.0.1/go.mod h1:gXpNmr3oQx8l3o7qkGyDjJjYSRX7hp/FGOStdqrWyDI= +github.com/filecoin-project/go-hamt-ipld/v3 v3.1.0 h1:rVVNq0x6RGQIzCo1iiJlGFm9AGIZzeifggxtKMU7zmI= +github.com/filecoin-project/go-hamt-ipld/v3 v3.1.0/go.mod h1:bxmzgT8tmeVQA1/gvBwFmYdT8SOFUwB3ovSUfG1Ux0g= +github.com/filecoin-project/go-leb128 v0.0.0-20190212224330-8d79a5489543/go.mod h1:mjrHv1cDGJWDlGmC0eDc1E5VJr8DmL9XMUcaFwiuKg8= +github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20/go.mod h1:mPn+LRRd5gEKNAtc+r3ScpW2JRU/pj4NBKdADYWHiak= +github.com/filecoin-project/go-padreader v0.0.0-20210723183308-812a16dc01b1/go.mod h1:VYVPJqwpsfmtoHnAmPx6MUwmrK6HIcDqZJiuZhtmfLQ= +github.com/filecoin-project/go-padreader v0.0.1 h1:8h2tVy5HpoNbr2gBRr+WD6zV6VD6XHig+ynSGJg8ZOs= +github.com/filecoin-project/go-padreader v0.0.1/go.mod h1:VYVPJqwpsfmtoHnAmPx6MUwmrK6HIcDqZJiuZhtmfLQ= +github.com/filecoin-project/go-paramfetch v0.0.2/go.mod h1:1FH85P8U+DUEmWk1Jkw3Bw7FrwTVUNHk/95PSPG+dts= +github.com/filecoin-project/go-state-types v0.0.0-20200903145444-247639ffa6ad/go.mod h1:IQ0MBPnonv35CJHtWSN3YY1Hz2gkPru1Q9qoaYLxx9I= +github.com/filecoin-project/go-state-types v0.0.0-20200904021452-1883f36ca2f4/go.mod h1:IQ0MBPnonv35CJHtWSN3YY1Hz2gkPru1Q9qoaYLxx9I= +github.com/filecoin-project/go-state-types v0.0.0-20200928172055-2df22083d8ab/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.0.0-20201102161440-c8033295a1fc/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.1.0/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.1.1-0.20210506134452-99b279731c48/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.1.1-0.20210810190654-139e0e79e69e/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.1.1 h1:LR260vya4p++atgf256W6yV3Lxl5mKrBFcEZePWQrdg= +github.com/filecoin-project/go-state-types v0.1.1/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe/go.mod h1:FGwQgZAt2Gh5mjlwJUlVB62JeYdo+if0xWxSEfBD9ig= +github.com/filecoin-project/go-statemachine v1.0.1 h1:LQ60+JDVjMdLxXmVFM2jjontzOYnfVE7u02CXV3WKSw= +github.com/filecoin-project/go-statemachine v1.0.1/go.mod h1:jZdXXiHa61n4NmgWFG4w8tnqgvZVHYbJ3yW7+y8bF54= +github.com/filecoin-project/go-statestore v0.1.0/go.mod h1:LFc9hD+fRxPqiHiaqUEZOinUJB4WARkRfNl10O7kTnI= +github.com/filecoin-project/go-statestore v0.2.0 h1:cRRO0aPLrxKQCZ2UOQbzFGn4WDNdofHZoGPjfNaAo5Q= +github.com/filecoin-project/go-statestore v0.2.0/go.mod h1:8sjBYbS35HwPzct7iT4lIXjLlYyPor80aU7t7a/Kspo= +github.com/filecoin-project/go-storedcounter v0.1.0/go.mod h1:4ceukaXi4vFURIoxYMfKzaRF5Xv/Pinh2oTnoxpv+z8= +github.com/filecoin-project/lotus v1.13.2-0.20220103185743-9b11c4b31932 h1:TR3RU+f3pAILoV9p3qjsZqDiwKLgB3ED+MkYznJot1Y= +github.com/filecoin-project/lotus v1.13.2-0.20220103185743-9b11c4b31932/go.mod h1:3rpFD76CLqowX/0mmreiT3CohlmHsU4+CXFk9v9MrYM= +github.com/filecoin-project/specs-actors v0.9.4/go.mod h1:BStZQzx5x7TmCkLv0Bpa07U6cPKol6fd3w9KjMPZ6Z4= +github.com/filecoin-project/specs-actors v0.9.13/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= +github.com/filecoin-project/specs-actors v0.9.14 h1:68PVstg2UB3ZsMLF+DKFTAs/YKsqhKWynkr0IqmVRQY= +github.com/filecoin-project/specs-actors v0.9.14/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= +github.com/filecoin-project/specs-actors/v2 v2.3.5-0.20210114162132-5b58b773f4fb/go.mod h1:LljnY2Mn2homxZsmokJZCpRuhOPxfXhvcek5gWkmqAc= +github.com/filecoin-project/specs-actors/v2 v2.3.6 h1:UxnWTfQd7JsOae39/aHCK0m1IBjdcyymCJfqxuSkn+g= +github.com/filecoin-project/specs-actors/v2 v2.3.6/go.mod h1:DJMpxVRXvev9t8P0XWA26RmTzN+MHiL9IlItVLT0zUc= +github.com/filecoin-project/specs-actors/v3 v3.1.0/go.mod h1:mpynccOLlIRy0QnR008BwYBwT9fen+sPR13MA1VmMww= +github.com/filecoin-project/specs-actors/v3 v3.1.1 h1:BE8fsns1GnEOxt1DTE5LxBK2FThXtWmCChgcJoHTg0E= +github.com/filecoin-project/specs-actors/v3 v3.1.1/go.mod h1:mpynccOLlIRy0QnR008BwYBwT9fen+sPR13MA1VmMww= +github.com/filecoin-project/specs-actors/v4 v4.0.0/go.mod h1:TkHXf/l7Wyw4ZejyXIPS2rK8bBO0rdwhTZyQQgaglng= +github.com/filecoin-project/specs-actors/v4 v4.0.1 h1:AiWrtvJZ63MHGe6rn7tPu4nSUY8bA1KDNszqJaD5+Fg= +github.com/filecoin-project/specs-actors/v4 v4.0.1/go.mod h1:TkHXf/l7Wyw4ZejyXIPS2rK8bBO0rdwhTZyQQgaglng= +github.com/filecoin-project/specs-actors/v5 v5.0.4 h1:OY7BdxJWlUfUFXWV/kpNBYGXNPasDIedf42T3sGx08s= +github.com/filecoin-project/specs-actors/v5 v5.0.4/go.mod h1:5BAKRAMsOOlD8+qCw4UvT/lTLInCJ3JwOWZbX8Ipwq4= +github.com/filecoin-project/specs-actors/v6 v6.0.0/go.mod h1:V1AYfi5GkHXipx1mnVivoICZh3wtwPxDVuds+fbfQtk= +github.com/filecoin-project/specs-actors/v6 v6.0.1 h1:laxvHNsvrq83Y9n+W7znVCePi3oLyRf0Rkl4jFO8Wew= +github.com/filecoin-project/specs-actors/v6 v6.0.1/go.mod h1:V1AYfi5GkHXipx1mnVivoICZh3wtwPxDVuds+fbfQtk= +github.com/filecoin-project/specs-actors/v7 v7.0.0-20211118013026-3dce48197cec h1:KV9vE+Sl2Y3qKsrpba4HcE7wHwK7v6O5U/S0xHbje6A= +github.com/filecoin-project/specs-actors/v7 v7.0.0-20211118013026-3dce48197cec/go.mod h1:p6LIOFezA1rgRLMewbvdi3Pp6SAu+q9FtJ9CAleSjrE= +github.com/filecoin-project/specs-storage v0.1.1-0.20201105051918-5188d9774506/go.mod h1:nJRRM7Aa9XVvygr3W9k6xGF46RWzr2zxF/iGoAIfA/g= +github.com/filecoin-project/specs-storage v0.1.1-0.20211213202648-f14267c929ff h1:JO62nquOGhjoDf9+JkAcV+wsD5yhoyIKOMj70ZNdD3Q= +github.com/filecoin-project/specs-storage v0.1.1-0.20211213202648-f14267c929ff/go.mod h1:nJRRM7Aa9XVvygr3W9k6xGF46RWzr2zxF/iGoAIfA/g= +github.com/filecoin-project/test-vectors/schema v0.0.5/go.mod h1:iQ9QXLpYWL3m7warwvK1JC/pTri8mnfEmKygNDqqY6E= +github.com/filecoin-project/venus-auth v1.3.1-0.20210809053831-012d55d5f578/go.mod h1:/cbLZYvQhinVFUG4TP2Uy1o7LtF+guT21qZIMTmKk0g= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:1i71OnUq3iUe1ma7Lr6yG6/rjvM3emb6yoL7xLFzcVQ= +github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= +github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzPPUss= +github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= +github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= +github.com/gbrlsnchs/jwt/v3 v3.0.0/go.mod h1:AncDcjXz18xetI3A6STfXq2w+LuTx8pQ8bGEwRN8zVM= +github.com/gbrlsnchs/jwt/v3 v3.0.1 h1:lbUmgAKpxnClrKloyIwpxm4OuWeDl5wLk52G91ODPw4= +github.com/gbrlsnchs/jwt/v3 v3.0.1/go.mod h1:AncDcjXz18xetI3A6STfXq2w+LuTx8pQ8bGEwRN8zVM= +github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= +github.com/gdamore/tcell/v2 v2.2.0/go.mod h1:cTTuF84Dlj/RqmaCIV5p4w8uG1zWdk0SF6oBpwHp4fU= +github.com/getkin/kin-openapi v0.13.0/go.mod h1:WGRs2ZMM1Q8LR1QBEwUxC6RJEfaBcD0s+pcEVXFuAjw= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= +github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= +github.com/go-critic/go-critic v0.5.5/go.mod h1:eMs1Oc/oIP+CYNVN09M+XZYffIPuRHawxzlggAPN9Kk= +github.com/go-delve/delve v1.5.0/go.mod h1:c6b3a1Gry6x8a4LGCe/CWzrocrfaHvkUxCj3k4bvSUQ= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.1 h1:DX7uPQ4WgAWfoh+NGGlbJQswnYIVvz0SRlLS3rPZQDA= +github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.0 h1:j4LrlVXgrbIWO83mmQUnK0Hi+YnbD+vzrE1z/EphbFE= +github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= +github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/jsonreference v0.19.4/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/spec v0.19.7/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= +github.com/go-openapi/spec v0.19.11/go.mod h1:vqK/dIdLGCosfvYsQV3WfC7N3TiZSnGY2RZKoFK7X28= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.8/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY= +github.com/go-openapi/swag v0.19.11/go.mod h1:Uc0gKkdR+ojzsEpjh39QChyu92vPgIr72POcgHMAgSY= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-redis/redis/v7 v7.0.0-beta/go.mod h1:dohSoK1cSNPaisjbZhSk7RYyPhVx2k+4sAbJdPK5KPs= +github.com/go-redis/redis_rate/v7 v7.0.1/go.mod h1:IWxoSa694TQvppZ53Y5yZtqSfHKflOx+xtSw1TsSoT4= +github.com/go-resty/resty/v2 v2.4.0/go.mod h1:B88+xCTEwvfD94NOuE6GS1wMlnoKNY8eEiNizfNwOwA= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/godbus/dbus v0.0.0-20190402143921-271e53dc4968 h1:s+PDl6lozQ+dEUtUtQnO7+A2iPG3sK1pI4liU+jxn90= +github.com/godbus/dbus v0.0.0-20190402143921-271e53dc4968/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/gogo/status v1.0.3/go.mod h1:SavQ51ycCLnc7dGyJxp8YAmudx8xqiVrRf+6IXRsugc= +github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.2-0.20190904063534-ff6b7dc882cf/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.39.0/go.mod h1:mzMK3FGyk8LKTOxpRDcDqxwHVudnYemESTt5rpUxqCM= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20210208091834-cd28932614b5/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= +github.com/google/flatbuffers v1.12.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v2.0.0+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-dap v0.2.0/go.mod h1:5q8aYQFnHOAZEMP+6vmq25HKYAEwE+LF5yh7JKrrhSQ= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= +github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= +github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= +github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gookit/color v1.3.8/go.mod h1:R3ogXq2B9rTbXoSHJ1HyUVAZ3poOJHpd9nQmyGZsfvQ= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f h1:KMlcu9X58lhTA/KrfX8Bi1LQSO4pzoVjTiL3h4Jk+Zk= +github.com/gopherjs/gopherjs v0.0.0-20190812055157-5d271430af9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gordonklaus/ineffassign v0.0.0-20210225214923-2e10b2664254/go.mod h1:M9mZEtGIsR1oDaZagNPNG9iq9n2HrhZ17dsXk73V3Lw= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/forcetypeassert v0.0.0-20200621232751-01d4955beaa5/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= +github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/gxed/go-shellwords v1.0.3/go.mod h1:N7paucT91ByIjmVJHhvoarjoQnmsi3Jd3vH7VqgtMxQ= +github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= +github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= +github.com/hako/durafmt v0.0.0-20200710122514-c0fb7b4da026/go.mod h1:5Scbynm8dF1XAPwIwkGPqzkM/shndPm79Jd1003hTjE= +github.com/hannahhoward/cbor-gen-for v0.0.0-20200817222906-ea96cece81f1 h1:F9k+7wv5OIk1zcq23QpdiL0hfDuXPjuOmMNaC6fgQ0Q= +github.com/hannahhoward/cbor-gen-for v0.0.0-20200817222906-ea96cece81f1/go.mod h1:jvfsLIxk0fY/2BKSQ1xf2406AKA5dwMmKKv0ADcOfN8= +github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e h1:3YKHER4nmd7b5qy5t0GWDTwSn4OyRgfAXSmo6VnryBY= +github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e/go.mod h1:I8h3MITA53gN9OnWGCgaMa0JWVRdXthWw4M3CPM54OY= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= +github.com/hodgesds/perf-utils v0.0.8/go.mod h1:F6TfvsbtrF88i++hou29dTXlI2sfsJv+gRZDtmTJkAs= +github.com/howeyc/gopass v0.0.0-20190910152052-7cb4b85ec19c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= +github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= +github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= +github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= +github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= +github.com/iancoleman/orderedmap v0.1.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428/go.mod h1:uhpZMVGznybq1itEKXj6RYw9I71qK4kH+OGMjRC4KEo= +github.com/icza/backscanner v0.0.0-20210726202459-ac2ffc679f94 h1:9tcYMdi+7Rb1y0E9Del1DRHui7Ne3za5lLw6CjMJv/M= +github.com/icza/backscanner v0.0.0-20210726202459-ac2ffc679f94/go.mod h1:GYeBD1CF7AqnKZK+UCytLcY3G+UKo0ByXX/3xfdNyqQ= +github.com/icza/mighty v0.0.0-20180919140131-cfd07d671de6 h1:8UsGZ2rr2ksmEru6lToqnXgA8Mz1DP11X4zSJ159C3k= +github.com/icza/mighty v0.0.0-20180919140131-cfd07d671de6/go.mod h1:xQig96I1VNBDIWGCdTt54nHt6EeI639SmHycLYL7FkA= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb-client-go/v2 v2.2.2/go.mod h1:fa/d1lAdUHxuc1jedx30ZfNG573oQTQmUni3N6pcW+0= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/ipfs-force-community/go-ipfs-cmds v0.6.1-0.20210521090123-4587df7fa0ab h1:+Jov61TTljdzTKBecQizmUWJ6IIoVgzjukKppVr5TgI= +github.com/ipfs-force-community/go-ipfs-cmds v0.6.1-0.20210521090123-4587df7fa0ab/go.mod h1:ZgYiWVnCk43ChwoH8hAmI1IRbuVtq3GSTHwtRB/Kqhk= +github.com/ipfs-force-community/go-jsonrpc v0.1.4-0.20210731021807-68e5207079bc h1:L4JH2Ltl/Embq4qYezs3RsIYW1BB/fB9TfUkk42FOzU= +github.com/ipfs-force-community/go-jsonrpc v0.1.4-0.20210731021807-68e5207079bc/go.mod h1:XBBpuKIMaXIIzeqzO1iucq4GvbF8CxmXRFoezRh+Cx4= +github.com/ipfs-force-community/metrics v1.0.0/go.mod h1:mn40SioMuKtjmRumHFy/fJ26Pn028XuDjUJE9dorjyw= +github.com/ipfs-force-community/metrics v1.0.1-0.20211022060227-11142a08b729/go.mod h1:mn40SioMuKtjmRumHFy/fJ26Pn028XuDjUJE9dorjyw= +github.com/ipfs-force-community/venus-common-utils v0.0.0-20210714054928-2042a9040759/go.mod h1:AWIt7L1UiUeIzqQdjQ/quZcVcCdnr6GXabGLBgEIMzU= +github.com/ipfs/bbloom v0.0.1/go.mod h1:oqo8CVWsJFMOZqTglBG4wydCE4IQA/G2/SEofB0rjUI= +github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= +github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0= +github.com/ipfs/go-bitswap v0.0.9/go.mod h1:kAPf5qgn2W2DrgAcscZ3HrM9qh4pH+X8Fkk3UPrwvis= +github.com/ipfs/go-bitswap v0.1.0/go.mod h1:FFJEf18E9izuCqUtHxbWEvq+reg7o4CW5wSAE1wsxj0= +github.com/ipfs/go-bitswap v0.1.2/go.mod h1:qxSWS4NXGs7jQ6zQvoPY3+NmOfHHG47mhkiLzBpJQIs= +github.com/ipfs/go-bitswap v0.5.1 h1:721YAEDBnLIrvcIMkCHCdqp34hA8jwL9yKMkyJpSpco= +github.com/ipfs/go-bitswap v0.5.1/go.mod h1:P+ckC87ri1xFLvk74NlXdP0Kj9RmWAh4+H78sC6Qopo= +github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc= +github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= +github.com/ipfs/go-block-format v0.0.3 h1:r8t66QstRp/pd/or4dpnbVfXT5Gt7lOqRvC+/dDTpMc= +github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk= +github.com/ipfs/go-blockservice v0.0.7/go.mod h1:EOfb9k/Y878ZTRY/CH0x5+ATtaipfbRhbvNSdgc/7So= +github.com/ipfs/go-blockservice v0.1.0/go.mod h1:hzmMScl1kXHg3M2BjTymbVPjv627N7sYcvYaKbop39M= +github.com/ipfs/go-blockservice v0.2.1 h1:NJ4j/cwEfIg60rzAWcCIxRtOwbf6ZPK49MewNxObCPQ= +github.com/ipfs/go-blockservice v0.2.1/go.mod h1:k6SiwmgyYgs4M/qt+ww6amPeUH9EISLRBnvUurKJhi8= +github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.4-0.20191112011718-79e75dffeb10/go.mod h1:/BYOuUoxkE+0f6tGzlzMvycuN+5l35VOR4Bpg2sCmds= +github.com/ipfs/go-cid v0.0.4/go.mod h1:4LLaPOQwmk5z9LBgQnpkivrx8BJjUyGwTXCd5Xfj6+M= +github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= +github.com/ipfs/go-cid v0.0.6-0.20200501230655-7c82f3b81c00/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= +github.com/ipfs/go-cid v0.0.6/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-cid v0.1.0 h1:YN33LQulcRHjfom/i25yoOZR4Telp1Hr/2RU3d0PnC0= +github.com/ipfs/go-cid v0.1.0/go.mod h1:rH5/Xv83Rfy8Rw6xG+id3DYAMUVmem1MowoKwdXmN2o= +github.com/ipfs/go-cidutil v0.0.2 h1:CNOboQf1t7Qp0nuNh8QMmhJs0+Q//bRL1axtCnIB1Yo= +github.com/ipfs/go-cidutil v0.0.2/go.mod h1:ewllrvrxG6AMYStla3GD7Cqn+XYSLqjK0vc+086tB6s= +github.com/ipfs/go-datastore v0.0.1/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= +github.com/ipfs/go-datastore v0.0.5/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= +github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= +github.com/ipfs/go-datastore v0.1.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw= +github.com/ipfs/go-datastore v0.3.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw= +github.com/ipfs/go-datastore v0.4.0/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= +github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= +github.com/ipfs/go-datastore v0.4.4/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= +github.com/ipfs/go-datastore v0.4.5/go.mod h1:eXTcaaiN6uOlVCLS9GjJUJtlvJfM3xk23w3fyfrmmJs= +github.com/ipfs/go-datastore v0.4.7-0.20211013204805-28a3721c2e66/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= +github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= +github.com/ipfs/go-datastore v0.5.1 h1:WkRhLuISI+XPD0uk3OskB0fYFSyqK8Ob5ZYew9Qa1nQ= +github.com/ipfs/go-datastore v0.5.1/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= +github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= +github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= +github.com/ipfs/go-ds-badger v0.0.2/go.mod h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjvRcKeSGij8= +github.com/ipfs/go-ds-badger v0.0.5/go.mod h1:g5AuuCGmr7efyzQhLL8MzwqcauPojGPUaHzfGTzuE3s= +github.com/ipfs/go-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9YlmAvpQBk= +github.com/ipfs/go-ds-badger v0.2.1/go.mod h1:Tx7l3aTph3FMFrRS838dcSJh+jjA7cX9DrGVwx/NOwE= +github.com/ipfs/go-ds-badger v0.2.3/go.mod h1:pEYw0rgg3FIrywKKnL+Snr+w/LjJZVMTBRn4FS6UHUk= +github.com/ipfs/go-ds-badger v0.2.7/go.mod h1:02rnztVKA4aZwDuaRPTf8mpqcKmXP7mLl6JPxd14JHA= +github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= +github.com/ipfs/go-ds-badger2 v0.1.0/go.mod h1:pbR1p817OZbdId9EvLOhKBgUVTM3BMCSTan78lDDVaw= +github.com/ipfs/go-ds-badger2 v0.1.2 h1:sQc2q1gaXrv8YFNeUtxil0neuyDf9hnVHfLsi7lpXfE= +github.com/ipfs/go-ds-badger2 v0.1.2/go.mod h1:3FtQmDv6fMubygEfU43bsFelYpIiXX/XEYA54l9eCwg= +github.com/ipfs/go-ds-leveldb v0.0.1/go.mod h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc= +github.com/ipfs/go-ds-leveldb v0.1.0/go.mod h1:hqAW8y4bwX5LWcCtku2rFNX3vjDZCy5LZCg+cSZvYb8= +github.com/ipfs/go-ds-leveldb v0.4.1/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= +github.com/ipfs/go-ds-leveldb v0.4.2/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= +github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= +github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= +github.com/ipfs/go-ds-measure v0.2.0 h1:sG4goQe0KDTccHMyT45CY1XyUbxe5VwTKpg2LjApYyQ= +github.com/ipfs/go-ds-measure v0.2.0/go.mod h1:SEUD/rE2PwRa4IQEC5FuNAmjJCyYObZr9UvVh8V3JxE= +github.com/ipfs/go-filestore v1.1.0 h1:Pu4tLBi1bucu6/HU9llaOmb9yLFk/sgP+pW764zNDoE= +github.com/ipfs/go-filestore v1.1.0/go.mod h1:6e1/5Y6NvLuCRdmda/KA4GUhXJQ3Uat6vcWm2DJfxc8= +github.com/ipfs/go-fs-lock v0.0.6 h1:sn3TWwNVQqSeNjlWy6zQ1uUGAZrV3hPOyEA6y1/N2a0= +github.com/ipfs/go-fs-lock v0.0.6/go.mod h1:OTR+Rj9sHiRubJh3dRhD15Juhd/+w6VPOY28L7zESmM= +github.com/ipfs/go-graphsync v0.11.0/go.mod h1:wC+c8vGVjAHthsVIl8LKr37cUra2GOaMYcQNNmMxDqE= +github.com/ipfs/go-graphsync v0.11.5 h1:WA5hVxGBtcal6L6nqubKiqRolaZxbexOK3GumGFJRR4= +github.com/ipfs/go-graphsync v0.11.5/go.mod h1:+/sZqRwRCQRrV7NCzgBtufmr5QGpUE98XSa7NlsztmM= +github.com/ipfs/go-hamt-ipld v0.1.1/go.mod h1:1EZCr2v0jlCnhpa+aZ0JZYp8Tt2w16+JJOAVz17YcDk= +github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08= +github.com/ipfs/go-ipfs-blockstore v0.1.0/go.mod h1:5aD0AvHPi7mZc6Ci1WCAhiBQu2IsfTduLl+422H6Rqw= +github.com/ipfs/go-ipfs-blockstore v0.2.1/go.mod h1:jGesd8EtCM3/zPgx+qr0/feTXGUeRai6adgwC+Q+JvE= +github.com/ipfs/go-ipfs-blockstore v1.1.0/go.mod h1:5QDUApRqpgPcfGstCxYeMnjt/DYQtXXdJVCvxHHuWVk= +github.com/ipfs/go-ipfs-blockstore v1.1.1/go.mod h1:w51tNR9y5+QXB0wkNcHt4O2aSZjTdqaEWaQdSxEyUOY= +github.com/ipfs/go-ipfs-blockstore v1.1.2 h1:WCXoZcMYnvOTmlpX+RSSnhVN0uCmbWTeepTGX5lgiXw= +github.com/ipfs/go-ipfs-blockstore v1.1.2/go.mod h1:w51tNR9y5+QXB0wkNcHt4O2aSZjTdqaEWaQdSxEyUOY= +github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ= +github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk= +github.com/ipfs/go-ipfs-chunker v0.0.1/go.mod h1:tWewYK0we3+rMbOh7pPFGDyypCtvGcBFymgY4rSDLAw= +github.com/ipfs/go-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7NapWLY8= +github.com/ipfs/go-ipfs-chunker v0.0.5/go.mod h1:jhgdF8vxRHycr00k13FM8Y0E+6BoalYeobXmUyTreP8= +github.com/ipfs/go-ipfs-cmdkit v0.0.1/go.mod h1:9FtbMdUabcSqv/G4/8WCxSLxkZxn/aZEFrxxqnVcRbg= +github.com/ipfs/go-ipfs-config v0.5.3 h1:3GpI/xR9FoJNTjU6YvCMRbYyEi0dBVY5UtlUTcNRlSA= +github.com/ipfs/go-ipfs-config v0.5.3/go.mod h1:nSLCFtlaL+2rbl3F+9D4gQZQbT1LjRKx7TJg/IHz6oM= +github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= +github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ= +github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= +github.com/ipfs/go-ipfs-ds-help v0.0.1/go.mod h1:gtP9xRaZXqIQRh1HRpp595KbBEdgqWFxefeVKOV8sxo= +github.com/ipfs/go-ipfs-ds-help v0.1.1/go.mod h1:SbBafGJuGsPI/QL3j9Fc5YPLeAu+SzOkI0gFwAg+mOs= +github.com/ipfs/go-ipfs-ds-help v1.0.0/go.mod h1:ujAbkeIgkKAWtxxNkoZHWLCyk5JpPoKnGyCcsoF6ueE= +github.com/ipfs/go-ipfs-ds-help v1.1.0 h1:yLE2w9RAsl31LtfMt91tRZcrx+e61O5mDxFRR994w4Q= +github.com/ipfs/go-ipfs-ds-help v1.1.0/go.mod h1:YR5+6EaebOhfcqVCyqemItCLthrpVNot+rsOU/5IatU= +github.com/ipfs/go-ipfs-exchange-interface v0.0.1/go.mod h1:c8MwfHjtQjPoDyiy9cFquVtVHkO9b9Ob3FG91qJnWCM= +github.com/ipfs/go-ipfs-exchange-interface v0.1.0 h1:TiMekCrOGQuWYtZO3mf4YJXDIdNgnKWZ9IE3fGlnWfo= +github.com/ipfs/go-ipfs-exchange-interface v0.1.0/go.mod h1:ych7WPlyHqFvCi/uQI48zLZuAWVP5iTQPXEfVaw5WEI= +github.com/ipfs/go-ipfs-exchange-offline v0.0.1/go.mod h1:WhHSFCVYX36H/anEKQboAzpUws3x7UeEGkzQc3iNkM0= +github.com/ipfs/go-ipfs-exchange-offline v0.1.1 h1:mEiXWdbMN6C7vtDG21Fphx8TGCbZPpQnz/496w/PL4g= +github.com/ipfs/go-ipfs-exchange-offline v0.1.1/go.mod h1:vTiBRIbzSwDD0OWm+i3xeT0mO7jG2cbJYatp3HPk5XY= +github.com/ipfs/go-ipfs-files v0.0.3/go.mod h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4= +github.com/ipfs/go-ipfs-files v0.0.4/go.mod h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4= +github.com/ipfs/go-ipfs-files v0.0.8/go.mod h1:wiN/jSG8FKyk7N0WyctKSvq3ljIa2NNTiZB55kpTdOs= +github.com/ipfs/go-ipfs-files v0.0.9 h1:OFyOfmuVDu9c5YtjSDORmwXzE6fmZikzZpzsnNkgFEg= +github.com/ipfs/go-ipfs-files v0.0.9/go.mod h1:aFv2uQ/qxWpL/6lidWvnSQmaVqCrf0TBGoUr+C1Fo84= +github.com/ipfs/go-ipfs-http-client v0.0.6/go.mod h1:8e2dQbntMZKxLfny+tyXJ7bJHZFERp/2vyzZdvkeLMc= +github.com/ipfs/go-ipfs-http-client v0.1.0 h1:YrJ+/vqmZF1ignpxfHUaJEax7e4tgbaFCTLfIS5yFZY= +github.com/ipfs/go-ipfs-http-client v0.1.0/go.mod h1:8e2dQbntMZKxLfny+tyXJ7bJHZFERp/2vyzZdvkeLMc= +github.com/ipfs/go-ipfs-posinfo v0.0.1 h1:Esoxj+1JgSjX0+ylc0hUmJCOv6V2vFoZiETLR6OtpRs= +github.com/ipfs/go-ipfs-posinfo v0.0.1/go.mod h1:SwyeVP+jCwiDu0C313l/8jg6ZxM0qqtlt2a0vILTc1A= +github.com/ipfs/go-ipfs-pq v0.0.1/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY= +github.com/ipfs/go-ipfs-pq v0.0.2 h1:e1vOOW6MuOwG2lqxcLA+wEn93i/9laCY8sXAw76jFOY= +github.com/ipfs/go-ipfs-pq v0.0.2/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY= +github.com/ipfs/go-ipfs-routing v0.0.1/go.mod h1:k76lf20iKFxQTjcJokbPM9iBXVXVZhcOwc360N4nuKs= +github.com/ipfs/go-ipfs-routing v0.1.0/go.mod h1:hYoUkJLyAUKhF58tysKpids8RNDPO42BVMgK5dNsoqY= +github.com/ipfs/go-ipfs-routing v0.2.1 h1:E+whHWhJkdN9YeoHZNj5itzc+OR292AJ2uE9FFiW0BY= +github.com/ipfs/go-ipfs-routing v0.2.1/go.mod h1:xiNNiwgjmLqPS1cimvAw6EyB9rkVDbiocA4yY+wRNLM= +github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc= +github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= +github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= +github.com/ipfs/go-ipld-cbor v0.0.2/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= +github.com/ipfs/go-ipld-cbor v0.0.3/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= +github.com/ipfs/go-ipld-cbor v0.0.4/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= +github.com/ipfs/go-ipld-cbor v0.0.5/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= +github.com/ipfs/go-ipld-cbor v0.0.6-0.20211211231443-5d9b9e1f6fa8/go.mod h1:ssdxxaLJPXH7OjF5V4NSjBbcfh+evoR4ukuru0oPXMA= +github.com/ipfs/go-ipld-cbor v0.0.6 h1:pYuWHyvSpIsOOLw4Jy7NbBkCyzLDcl64Bf/LZW7eBQ0= +github.com/ipfs/go-ipld-cbor v0.0.6/go.mod h1:ssdxxaLJPXH7OjF5V4NSjBbcfh+evoR4ukuru0oPXMA= +github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms= +github.com/ipfs/go-ipld-format v0.0.2/go.mod h1:4B6+FM2u9OJ9zCV+kSbgFAZlOrv1Hqbf0INGQgiKf9k= +github.com/ipfs/go-ipld-format v0.2.0 h1:xGlJKkArkmBvowr+GMCX0FEZtkro71K1AwiKnL37mwA= +github.com/ipfs/go-ipld-format v0.2.0/go.mod h1:3l3C1uKoadTPbeNfrDi+xMInYKlx2Cvg1BuydPSdzQs= +github.com/ipfs/go-ipld-legacy v0.1.0/go.mod h1:86f5P/srAmh9GcIcWQR9lfFLZPrIyyXQeVlOWeeWEuI= +github.com/ipfs/go-ipld-legacy v0.1.1 h1:BvD8PEuqwBHLTKqlGFTHSwrwFOMkVESEvwIYwR2cdcc= +github.com/ipfs/go-ipld-legacy v0.1.1/go.mod h1:8AyKFCjgRPsQFf15ZQgDB8Din4DML/fOmKZkkFkrIEg= +github.com/ipfs/go-ipns v0.1.2/go.mod h1:ioQ0j02o6jdIVW+bmi18f4k2gRf0AV3kZ9KeHYHICnQ= +github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= +github.com/ipfs/go-log v1.0.0/go.mod h1:JO7RzlMK6rA+CIxFMLOuB6Wf5b81GDiKElL7UPSIKjA= +github.com/ipfs/go-log v1.0.1/go.mod h1:HuWlQttfN6FWNHRhlY5yMk/lW7evQC0HHGOxEwMRR8I= +github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk= +github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A= +github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= +github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= +github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= +github.com/ipfs/go-log/v2 v2.0.1/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= +github.com/ipfs/go-log/v2 v2.0.2/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= +github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= +github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= +github.com/ipfs/go-log/v2 v2.0.8/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= +github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= +github.com/ipfs/go-log/v2 v2.1.2-0.20200626104915-0016c0b4b3e4/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= +github.com/ipfs/go-log/v2 v2.1.2/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= +github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= +github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= +github.com/ipfs/go-log/v2 v2.4.0 h1:iR/2o9PGWanVJrBgIH5Ff8mPGOwpqLaPIAFqSnsdlzk= +github.com/ipfs/go-log/v2 v2.4.0/go.mod h1:nPZnh7Cj7lwS3LpRU5Mwr2ol1c2gXIEXuF6aywqrtmo= +github.com/ipfs/go-merkledag v0.0.6/go.mod h1:QYPdnlvkOg7GnQRofu9XZimC5ZW5Wi3bKys/4GQQfto= +github.com/ipfs/go-merkledag v0.2.3/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= +github.com/ipfs/go-merkledag v0.2.4/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= +github.com/ipfs/go-merkledag v0.3.2/go.mod h1:fvkZNNZixVW6cKSZ/JfLlON5OlgTXNdRLz0p6QG/I2M= +github.com/ipfs/go-merkledag v0.5.1 h1:tr17GPP5XtPhvPPiWtu20tSGZiZDuTaJRXBLcr79Umk= +github.com/ipfs/go-merkledag v0.5.1/go.mod h1:cLMZXx8J08idkp5+id62iVftUQV+HlYJ3PIhDfZsjA4= +github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg= +github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY= +github.com/ipfs/go-metrics-prometheus v0.0.2/go.mod h1:ELLU99AQQNi+zX6GCGm2lAgnzdSH3u5UVlCdqSXnEks= +github.com/ipfs/go-path v0.0.7 h1:H06hKMquQ0aYtHiHryOMLpQC1qC3QwXwkahcEVD51Ho= +github.com/ipfs/go-path v0.0.7/go.mod h1:6KTKmeRnBXgqrTvzFrPV3CamxcgvXX/4z79tfAd2Sno= +github.com/ipfs/go-peertaskqueue v0.0.4/go.mod h1:03H8fhyeMfKNFWqzYEVyMbcPUeYrqP1MX6Kd+aN+rMQ= +github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U= +github.com/ipfs/go-peertaskqueue v0.7.0/go.mod h1:M/akTIE/z1jGNXMU7kFB4TeSEFvj68ow0Rrb04donIU= +github.com/ipfs/go-peertaskqueue v0.7.1 h1:7PLjon3RZwRQMgOTvYccZ+mjzkmds/7YzSWKFlBAypE= +github.com/ipfs/go-peertaskqueue v0.7.1/go.mod h1:M/akTIE/z1jGNXMU7kFB4TeSEFvj68ow0Rrb04donIU= +github.com/ipfs/go-todocounter v0.0.1/go.mod h1:l5aErvQc8qKE2r7NDMjmq5UNAvuZy0rC8BHOplkWvZ4= +github.com/ipfs/go-unixfs v0.2.2-0.20190827150610-868af2e9e5cb/go.mod h1:IwAAgul1UQIcNZzKPYZWOCijryFBeCV79cNubPzol+k= +github.com/ipfs/go-unixfs v0.2.4/go.mod h1:SUdisfUjNoSDzzhGVxvCL9QO/nKdwXdr+gbMUdqcbYw= +github.com/ipfs/go-unixfs v0.2.6 h1:gq3U3T2vh8x6tXhfo3uSO3n+2z4yW0tYtNgVP/3sIyA= +github.com/ipfs/go-unixfs v0.2.6/go.mod h1:GTTzQvaZsTZARdNkkdjDKFFnBhmO3e5mIM1PkH/x4p0= +github.com/ipfs/go-verifcid v0.0.1 h1:m2HI7zIuR5TFyQ1b79Da5N9dnnCP1vcu2QqawmWlK2E= +github.com/ipfs/go-verifcid v0.0.1/go.mod h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZc0g37pY0= +github.com/ipfs/interface-go-ipfs-core v0.4.0 h1:+mUiamyHIwedqP8ZgbCIwpy40oX7QcXUbo4CZOeJVJg= +github.com/ipfs/interface-go-ipfs-core v0.4.0/go.mod h1:UJBcU6iNennuI05amq3FQ7g0JHUkibHFAfhfUIy927o= +github.com/ipfs/iptb v1.4.0 h1:YFYTrCkLMRwk/35IMyC6+yjoQSHTEcNcefBStLJzgvo= +github.com/ipfs/iptb v1.4.0/go.mod h1:1rzHpCYtNp87/+hTxG5TfCVn/yMY3dKnLn8tBiMfdmg= +github.com/ipfs/iptb-plugins v0.3.0 h1:C1rpq1o5lUZtaAOkLIox5akh6ba4uk/3RwWc6ttVxw0= +github.com/ipfs/iptb-plugins v0.3.0/go.mod h1:5QtOvckeIw4bY86gSH4fgh3p3gCSMn3FmIKr4gaBncA= +github.com/ipld/go-car v0.1.0/go.mod h1:RCWzaUh2i4mOEkB3W45Vc+9jnS/M6Qay5ooytiBHl3g= +github.com/ipld/go-car v0.3.3-0.20211210032800-e6f244225a16/go.mod h1:/wkKF4908ULT4dFIFIUZYcfjAnj+KFnJvlh8Hsz1FbQ= +github.com/ipld/go-car v0.3.3 h1:D6y+jvg9h2ZSv7GLUMWUwg5VTLy1E7Ak+uQw5orOg3I= +github.com/ipld/go-car v0.3.3/go.mod h1:/wkKF4908ULT4dFIFIUZYcfjAnj+KFnJvlh8Hsz1FbQ= +github.com/ipld/go-car/v2 v2.1.1-0.20211211000942-be2525f6bf2d/go.mod h1:+2Yvf0Z3wzkv7NeI69i8tuZ+ft7jyjPYIWZzeVNeFcI= +github.com/ipld/go-car/v2 v2.1.1 h1:saaKz4nC0AdfCGHLYKeXLGn8ivoPC54fyS55uyOLKwA= +github.com/ipld/go-car/v2 v2.1.1/go.mod h1:+2Yvf0Z3wzkv7NeI69i8tuZ+ft7jyjPYIWZzeVNeFcI= +github.com/ipld/go-codec-dagpb v1.2.0/go.mod h1:6nBN7X7h8EOsEejZGqC7tej5drsdBAXbMHyBT+Fne5s= +github.com/ipld/go-codec-dagpb v1.3.0 h1:czTcaoAuNNyIYWs6Qe01DJ+sEX7B+1Z0LcXjSatMGe8= +github.com/ipld/go-codec-dagpb v1.3.0/go.mod h1:ga4JTU3abYApDC3pZ00BC2RSvC3qfBb9MSJkMLSwnhA= +github.com/ipld/go-ipld-prime v0.0.2-0.20191108012745-28a82f04c785/go.mod h1:bDDSvVz7vaK12FNvMeRYnpRFkSUPNQOiCYQezMD/P3w= +github.com/ipld/go-ipld-prime v0.9.0/go.mod h1:KvBLMr4PX1gWptgkzRjVZCrLmSGcZCb/jioOQwCqZN8= +github.com/ipld/go-ipld-prime v0.9.1-0.20210324083106-dc342a9917db/go.mod h1:KvBLMr4PX1gWptgkzRjVZCrLmSGcZCb/jioOQwCqZN8= +github.com/ipld/go-ipld-prime v0.10.0/go.mod h1:KvBLMr4PX1gWptgkzRjVZCrLmSGcZCb/jioOQwCqZN8= +github.com/ipld/go-ipld-prime v0.11.0/go.mod h1:+WIAkokurHmZ/KwzDOMUuoeJgaRQktHtEaLglS3ZeV8= +github.com/ipld/go-ipld-prime v0.12.3/go.mod h1:PaeLYq8k6dJLmDUSLrzkEpoGV4PEfe/1OtFN/eALOc8= +github.com/ipld/go-ipld-prime v0.14.0/go.mod h1:9ASQLwUFLptCov6lIYc70GRB4V7UTyLD0IJtrDJe6ZM= +github.com/ipld/go-ipld-prime v0.14.3-0.20211207234443-319145880958/go.mod h1:QcE4Y9n/ZZr8Ijg5bGPT0GqYWgZ1704nH0RDcQtgTP0= +github.com/ipld/go-ipld-prime v0.14.3 h1:cGUmxSws2IHurn00/iLMDapeXsnf9+FyAtYVy8G/JsQ= +github.com/ipld/go-ipld-prime v0.14.3/go.mod h1:QcE4Y9n/ZZr8Ijg5bGPT0GqYWgZ1704nH0RDcQtgTP0= +github.com/ipld/go-ipld-prime-proto v0.0.0-20191113031812-e32bd156a1e5/go.mod h1:gcvzoEDBjwycpXt3LBE061wT9f46szXGHAmj9uoP6fU= +github.com/ipld/go-ipld-prime/storage/bsadapter v0.0.0-20211210234204-ce2a1c70cd73/go.mod h1:2PJ0JgxyB08t0b2WKrcuqI3di0V+5n6RS/LTUJhkoxY= +github.com/ipld/go-ipld-selector-text-lite v0.0.1 h1:lNqFsQpBHc3p5xHob2KvEg/iM5dIFn6iw4L/Hh+kS1Y= +github.com/ipld/go-ipld-selector-text-lite v0.0.1/go.mod h1:U2CQmFb+uWzfIEF3I1arrDa5rwtj00PrpiwwCO+k1RM= +github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52 h1:QG4CGBqCeuBo6aZlGAamSkxWdgWfZGeE49eUOWJPA4c= +github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52/go.mod h1:fdg+/X9Gg4AsAIzWpEHwnqd+QY3b7lajxyjE1m4hkq4= +github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= +github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4uRSZMmzKNLoXvTu1sfx+1kv/DojUlPrSZGs= +github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= +github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c h1:uUx61FiAa1GI6ZmVd2wf2vULeQZIKG66eybjNXKYCz4= +github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c/go.mod h1:sdx1xVM9UuLw1tXnhJWN3piypTUO3vCIHYmG15KE/dU= +github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= +github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= +github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= +github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= +github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= +github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= +github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jgautheron/goconst v1.4.0/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= +github.com/jingyugao/rowserrcheck v0.0.0-20210315055705-d907ca737bb1/go.mod h1:TOQpc2SLx6huPfoFGK3UOnEG+u02D3C1GeosjupAKCA= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 h1:rp+c0RAYOWj8l6qbCUTSiRLG/iKnW3K3/QfPPuSsBt4= +github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.1.1-0.20190114141812-62fb9bc030d1/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw= +github.com/jsimonetti/rtnetlink v0.0.0-20190830100107-3784a6c7c552/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw= +github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4/go.mod h1:WGuG/smIU4J/54PblvSbh+xvCZmpJnFgr3ds6Z55XMQ= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/julz/importas v0.0.0-20210228071311-d0bf5cb4e1db/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= +github.com/kabukky/httpscerts v0.0.0-20150320125433-617593d7dcb3/go.mod h1:BYpt4ufZiIGv2nXn4gMxnfKV306n3mWXgNu/d2TqdTU= +github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= +github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= +github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= +github.com/kilic/bls12-381 v0.0.0-20200607163746-32e1441c8a9f/go.mod h1:XXfR6YFCRSrkEXbNlIyDsgXVNJWVUV30m/ebkVy9n6s= +github.com/kilic/bls12-381 v0.0.0-20200731194930-64c428e1bff5/go.mod h1:XXfR6YFCRSrkEXbNlIyDsgXVNJWVUV30m/ebkVy9n6s= +github.com/kilic/bls12-381 v0.0.0-20200820230200-6b2c19996391/go.mod h1:XXfR6YFCRSrkEXbNlIyDsgXVNJWVUV30m/ebkVy9n6s= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/klauspost/compress v1.10.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.6/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= +github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= +github.com/koron/go-ssdp v0.0.2 h1:fL3wAoyT6hXHQlORyXUW4Q23kkQpJRgEAYcZB5BR71o= +github.com/koron/go-ssdp v0.0.2/go.mod h1:XoLfkAiA2KeZsYh4DbHxD7h3nR2AZNqVQOa+LJuqPYs= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.4.0/go.mod h1:vMu2Cizjy/grP+jmsvOFDx1kYP6+PD1lqg4Yu5exl2U= +github.com/kunwardeep/paralleltest v1.0.2/go.mod h1:ZPqNm1fVHPllh5LPVujzbVz1JN2GhLxSfY+oqUsvG30= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/ldez/gomoddirectives v0.2.1/go.mod h1:sGicqkRgBOg//JfpXwkB9Hj0X5RyJ7mlACM5B9f6Me4= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= +github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= +github.com/libp2p/go-addr-util v0.1.0 h1:acKsntI33w2bTU7tC9a0SaPimJGfSI0bFKC18ChxeVI= +github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw= +github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= +github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= +github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= +github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= +github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= +github.com/libp2p/go-conn-security v0.0.1/go.mod h1:bGmu51N0KU9IEjX7kl2PQjgZa40JQWnayTvNMgD/vyk= +github.com/libp2p/go-conn-security-multistream v0.0.2/go.mod h1:nc9vud7inQ+d6SO0I/6dSWrdMnHnzZNHeyUQqrAJulE= +github.com/libp2p/go-conn-security-multistream v0.1.0/go.mod h1:aw6eD7LOsHEX7+2hJkDxw1MteijaVcI+/eP2/x3J1xc= +github.com/libp2p/go-conn-security-multistream v0.2.0/go.mod h1:hZN4MjlNetKD3Rq5Jb/P5ohUnFLNzEAR4DLSzpn2QLU= +github.com/libp2p/go-conn-security-multistream v0.2.1/go.mod h1:cR1d8gA0Hr59Fj6NhaTpFhJZrjSYuNmhpT2r25zYR70= +github.com/libp2p/go-conn-security-multistream v0.3.0 h1:9UCIKlBL1hC9u7nkMXpD1nkc/T53PKMAn3/k9ivBAVc= +github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= +github.com/libp2p/go-eventbus v0.0.2/go.mod h1:Hr/yGlwxA/stuLnpMiu82lpNKpvRy3EaJxPu40XYOwk= +github.com/libp2p/go-eventbus v0.1.0/go.mod h1:vROgu5cs5T7cv7POWlWxBaVLxfSegC5UGQf8A2eEmx4= +github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc= +github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= +github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= +github.com/libp2p/go-flow-metrics v0.0.2/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= +github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= +github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= +github.com/libp2p/go-libp2p v0.0.30/go.mod h1:XWT8FGHlhptAv1+3V/+J5mEpzyui/5bvFsNuWYs611A= +github.com/libp2p/go-libp2p v0.1.0/go.mod h1:6D/2OBauqLUoqcADOJpn9WbKqvaM07tDw68qHM0BxUM= +github.com/libp2p/go-libp2p v0.1.1/go.mod h1:I00BRo1UuUSdpuc8Q2mN7yDF/oTUTRAX6JWpTiK9Rp8= +github.com/libp2p/go-libp2p v0.3.1/go.mod h1:e6bwxbdYH1HqWTz8faTChKGR0BjPc8p+6SyP8GTTR7Y= +github.com/libp2p/go-libp2p v0.4.0/go.mod h1:9EsEIf9p2UDuwtPd0DwJsAl0qXVxgAnuDGRvHbfATfI= +github.com/libp2p/go-libp2p v0.6.1/go.mod h1:CTFnWXogryAHjXAKEbOf1OWY+VeAP3lDMZkfEI5sT54= +github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xSU1ivxn0k= +github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniVO7zIHGMw= +github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= +github.com/libp2p/go-libp2p v0.8.3/go.mod h1:EsH1A+8yoWK+L4iKcbPYu6MPluZ+CHWI9El8cTaefiM= +github.com/libp2p/go-libp2p v0.9.2/go.mod h1:cunHNLDVus66Ct9iXXcjKRLdmHdFdHVe1TAnbubJQqQ= +github.com/libp2p/go-libp2p v0.14.3/go.mod h1:d12V4PdKbpL0T1/gsUNN8DfgMuRPDX8bS2QxCZlwRH0= +github.com/libp2p/go-libp2p v0.14.4/go.mod h1:EIRU0Of4J5S8rkockZM7eJp2S0UrCyi55m2kJVru3rM= +github.com/libp2p/go-libp2p v0.16.0/go.mod h1:ump42BsirwAWxKzsCiFnTtN1Yc+DuPu76fyMX364/O4= +github.com/libp2p/go-libp2p v0.17.0 h1:8l4GV401OSd4dFRyHDtIT/mEzdh/aQGoFC8xshYgm5M= +github.com/libp2p/go-libp2p v0.17.0/go.mod h1:Fkin50rsGdv5mm5BshBUtPRZknt9esfmYXBOYcwOTgw= +github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= +github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= +github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= +github.com/libp2p/go-libp2p-autonat v0.0.6/go.mod h1:uZneLdOkZHro35xIhpbtTzLlgYturpu4J5+0cZK3MqE= +github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= +github.com/libp2p/go-libp2p-autonat v0.1.1/go.mod h1:OXqkeGOY2xJVWKAGV2inNF5aKN/djNA3fdpCWloIudE= +github.com/libp2p/go-libp2p-autonat v0.2.0/go.mod h1:DX+9teU4pEEoZUqR1PiMlqliONQdNbfzE1C718tcViI= +github.com/libp2p/go-libp2p-autonat v0.2.1/go.mod h1:MWtAhV5Ko1l6QBsHQNSuM6b1sRkXrpk0/LqCr+vCVxI= +github.com/libp2p/go-libp2p-autonat v0.2.2/go.mod h1:HsM62HkqZmHR2k1xgX34WuWDzk/nBwNHoeyyT4IWV6A= +github.com/libp2p/go-libp2p-autonat v0.2.3/go.mod h1:2U6bNWCNsAG9LEbwccBDQbjzQ8Krdjge1jLTE9rdoMM= +github.com/libp2p/go-libp2p-autonat v0.4.2/go.mod h1:YxaJlpr81FhdOv3W3BTconZPfhaYivRdf53g+S2wobk= +github.com/libp2p/go-libp2p-autonat v0.6.0/go.mod h1:bFC6kY8jwzNNWoqc8iGE57vsfwyJ/lP4O4DOV1e0B2o= +github.com/libp2p/go-libp2p-autonat v0.7.0 h1:rCP5s+A2dlhM1Xd66wurE0k7S7pPmM0D+FlqqSBXxks= +github.com/libp2p/go-libp2p-autonat v0.7.0/go.mod h1:uPvPn6J7cN+LCfFwW5tpOYvAz5NvPTc4iBamTV/WDMg= +github.com/libp2p/go-libp2p-autonat-svc v0.1.0/go.mod h1:fqi8Obl/z3R4PFVLm8xFtZ6PBL9MlV/xumymRFkKq5A= +github.com/libp2p/go-libp2p-blankhost v0.0.1/go.mod h1:Ibpbw/7cPPYwFb7PACIWdvxxv0t0XCCI10t7czjAjTc= +github.com/libp2p/go-libp2p-blankhost v0.1.1/go.mod h1:pf2fvdLJPsC1FsVrNP3DUUvMzUts2dsLLBEpo1vW1ro= +github.com/libp2p/go-libp2p-blankhost v0.1.3/go.mod h1:KML1//wiKR8vuuJO0y3LUd1uLv+tlkGTAr3jC0S5cLg= +github.com/libp2p/go-libp2p-blankhost v0.1.4/go.mod h1:oJF0saYsAXQCSfDq254GMNmLNz6ZTHTOvtF4ZydUvwU= +github.com/libp2p/go-libp2p-blankhost v0.1.6/go.mod h1:jONCAJqEP+Z8T6EQviGL4JsQcLx1LgTGtVqFNY8EMfQ= +github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= +github.com/libp2p/go-libp2p-blankhost v0.3.0 h1:kTnLArltMabZlzY63pgGDA4kkUcLkBFSM98zBssn/IY= +github.com/libp2p/go-libp2p-blankhost v0.3.0/go.mod h1:urPC+7U01nCGgJ3ZsV8jdwTp6Ji9ID0dMTvq+aJ+nZU= +github.com/libp2p/go-libp2p-circuit v0.0.9/go.mod h1:uU+IBvEQzCu953/ps7bYzC/D/R0Ho2A9LfKVVCatlqU= +github.com/libp2p/go-libp2p-circuit v0.1.0/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFkZeIRmfunbA7pmFh8= +github.com/libp2p/go-libp2p-circuit v0.1.1/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFkZeIRmfunbA7pmFh8= +github.com/libp2p/go-libp2p-circuit v0.1.3/go.mod h1:Xqh2TjSy8DD5iV2cCOMzdynd6h8OTBGoV1AWbWor3qM= +github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU= +github.com/libp2p/go-libp2p-circuit v0.2.1/go.mod h1:BXPwYDN5A8z4OEY9sOfr2DUQMLQvKt/6oku45YUmjIo= +github.com/libp2p/go-libp2p-circuit v0.2.2/go.mod h1:nkG3iE01tR3FoQ2nMm06IUrCpCyJp1Eo4A1xYdpjfs4= +github.com/libp2p/go-libp2p-circuit v0.4.0/go.mod h1:t/ktoFIUzM6uLQ+o1G6NuBl2ANhBKN9Bc8jRIk31MoA= +github.com/libp2p/go-libp2p-connmgr v0.1.1/go.mod h1:wZxh8veAmU5qdrfJ0ZBLcU8oJe9L82ciVP/fl1VHjXk= +github.com/libp2p/go-libp2p-connmgr v0.2.3/go.mod h1:Gqjg29zI8CwXX21zRxy6gOg8VYu3zVerJRt2KyktzH4= +github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0= +github.com/libp2p/go-libp2p-connmgr v0.3.0 h1:yerFXrYa0oxpuVsLlndwm/bLulouHYDcvFrY/4H4fx8= +github.com/libp2p/go-libp2p-connmgr v0.3.0/go.mod h1:RVoyPjJm0J9Vd1m6qUN2Tn7kJm4rL1Ml20pFsFgPGik= +github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= +github.com/libp2p/go-libp2p-core v0.0.2/go.mod h1:9dAcntw/n46XycV4RnlBq3BpgrmyUi9LuoTNdPrbUco= +github.com/libp2p/go-libp2p-core v0.0.3/go.mod h1:j+YQMNz9WNSkNezXOsahp9kwZBKBvxLpKD316QWSJXE= +github.com/libp2p/go-libp2p-core v0.0.4/go.mod h1:jyuCQP356gzfCFtRKyvAbNkyeuxb7OlyhWZ3nls5d2I= +github.com/libp2p/go-libp2p-core v0.0.6/go.mod h1:0d9xmaYAVY5qmbp/fcgxHT3ZJsLjYeYPMJAUKpaCHrE= +github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= +github.com/libp2p/go-libp2p-core v0.2.2/go.mod h1:8fcwTbsG2B+lTgRJ1ICZtiM5GWCWZVoVrLaDRvIRng0= +github.com/libp2p/go-libp2p-core v0.2.3/go.mod h1:GqhyQqyIAPsxFYXHMjfXgMv03lxsvM0mFzuYA9Ib42A= +github.com/libp2p/go-libp2p-core v0.2.4/go.mod h1:STh4fdfa5vDYr0/SzYYeqnt+E6KfEV5VxfIrm0bcI0g= +github.com/libp2p/go-libp2p-core v0.2.5/go.mod h1:6+5zJmKhsf7yHn1RbmYDu08qDUpIUxGdqHuEZckmZOA= +github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= +github.com/libp2p/go-libp2p-core v0.3.1/go.mod h1:thvWy0hvaSBhnVBaW37BvzgVV68OUhgJJLAa6almrII= +github.com/libp2p/go-libp2p-core v0.4.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= +github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= +github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.2/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.3/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.4/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.5/go.mod h1:vj3awlOr9+GMZJFH9s4mpt9RHHgGqeHCopzbYKZdRjM= +github.com/libp2p/go-libp2p-core v0.5.6/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.6.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.7.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.8.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.8.2/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.8.5/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-core v0.8.6/go.mod h1:dgHr0l0hIKfWpGpqAMbpo19pen9wJfdCGv51mTmdpmM= +github.com/libp2p/go-libp2p-core v0.9.0/go.mod h1:ESsbz31oC3C1AvMJoGx26RTuCkNhmkSRCqZ0kQtJ2/8= +github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= +github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= +github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= +github.com/libp2p/go-libp2p-core v0.13.0 h1:IFG/s8dN6JN2OTrXX9eq2wNU/Zlz2KLdwZUp5FplgXI= +github.com/libp2p/go-libp2p-core v0.13.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= +github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE= +github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I= +github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI= +github.com/libp2p/go-libp2p-daemon v0.2.2/go.mod h1:kyrpsLB2JeNYR2rvXSVWyY0iZuRIMhqzWR3im9BV6NQ= +github.com/libp2p/go-libp2p-discovery v0.0.5/go.mod h1:YtF20GUxjgoKZ4zmXj8j3Nb2TUSBHFlOCetzYdbZL5I= +github.com/libp2p/go-libp2p-discovery v0.1.0/go.mod h1:4F/x+aldVHjHDHuX85x1zWoFTGElt8HnoDzwkFZm29g= +github.com/libp2p/go-libp2p-discovery v0.2.0/go.mod h1:s4VGaxYMbw4+4+tsoQTqh7wfxg97AEdo4GYBt6BadWg= +github.com/libp2p/go-libp2p-discovery v0.3.0/go.mod h1:o03drFnz9BVAZdzC/QUQ+NeQOu38Fu7LJGEOK2gQltw= +github.com/libp2p/go-libp2p-discovery v0.4.0/go.mod h1:bZ0aJSrFc/eX2llP0ryhb1kpgkPyTo23SJ5b7UQCMh4= +github.com/libp2p/go-libp2p-discovery v0.5.0/go.mod h1:+srtPIU9gDaBNu//UHvcdliKBIcr4SfDcm0/PfPJLug= +github.com/libp2p/go-libp2p-discovery v0.6.0 h1:1XdPmhMJr8Tmj/yUfkJMIi8mgwWrLUsCB3bMxdT+DSo= +github.com/libp2p/go-libp2p-discovery v0.6.0/go.mod h1:/u1voHt0tKIe5oIA1RHBKQLVCWPna2dXmPNHc2zR9S8= +github.com/libp2p/go-libp2p-host v0.0.1/go.mod h1:qWd+H1yuU0m5CwzAkvbSjqKairayEHdR5MMl7Cwa7Go= +github.com/libp2p/go-libp2p-host v0.0.3/go.mod h1:Y/qPyA6C8j2coYyos1dfRm0I8+nvd4TGrDGt4tA7JR8= +github.com/libp2p/go-libp2p-interface-connmgr v0.0.1/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= +github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= +github.com/libp2p/go-libp2p-interface-connmgr v0.0.5/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= +github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k= +github.com/libp2p/go-libp2p-kad-dht v0.2.1/go.mod h1:k7ONOlup7HKzQ68dE6lSnp07cdxdkmnRa+6B4Fh9/w0= +github.com/libp2p/go-libp2p-kad-dht v0.15.0/go.mod h1:rZtPxYu1TnHHz6n1RggdGrxUX/tA1C2/Wiw3ZMUDrU0= +github.com/libp2p/go-libp2p-kbucket v0.2.1/go.mod h1:/Rtu8tqbJ4WQ2KTCOMJhggMukOLNLNPY1EtEWWLxUvc= +github.com/libp2p/go-libp2p-kbucket v0.3.1/go.mod h1:oyjT5O7tS9CQurok++ERgc46YLwEpuGoFq9ubvoUOio= +github.com/libp2p/go-libp2p-kbucket v0.4.7/go.mod h1:XyVo99AfQH0foSf176k4jY1xUJ2+jUJIZCSDm7r2YKk= +github.com/libp2p/go-libp2p-loggables v0.0.1/go.mod h1:lDipDlBNYbpyqyPX/KcoO+eq0sJYEVR2JgOexcivchg= +github.com/libp2p/go-libp2p-loggables v0.1.0 h1:h3w8QFfCt2UJl/0/NW4K829HX/0S4KD31PQ7m8UXXO8= +github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= +github.com/libp2p/go-libp2p-metrics v0.0.1/go.mod h1:jQJ95SXXA/K1VZi13h52WZMa9ja78zjyy5rspMsC/08= +github.com/libp2p/go-libp2p-mplex v0.1.1/go.mod h1:KUQWpGkCzfV7UIpi8SKsAVxyBgz1c9R5EvxgnwLsb/I= +github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo= +github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE= +github.com/libp2p/go-libp2p-mplex v0.2.2/go.mod h1:74S9eum0tVQdAfFiKxAyKzNdSuLqw5oadDq7+L/FELo= +github.com/libp2p/go-libp2p-mplex v0.2.3/go.mod h1:CK3p2+9qH9x+7ER/gWWDYJ3QW5ZxWDkm+dVvjfuG3ek= +github.com/libp2p/go-libp2p-mplex v0.4.0/go.mod h1:yCyWJE2sc6TBTnFpjvLuEJgTSw/u+MamvzILKdX7asw= +github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= +github.com/libp2p/go-libp2p-nat v0.0.4/go.mod h1:N9Js/zVtAXqaeT99cXgTV9e75KpnWCvVOiGzlcHmBbY= +github.com/libp2p/go-libp2p-nat v0.0.5/go.mod h1:1qubaE5bTZMJE+E/uu2URroMbzdubFz1ChgiN79yKPE= +github.com/libp2p/go-libp2p-nat v0.0.6/go.mod h1:iV59LVhB3IkFvS6S6sauVTSOrNEANnINbI/fkaLimiw= +github.com/libp2p/go-libp2p-nat v0.1.0 h1:vigUi2MEN+fwghe5ijpScxtbbDz+L/6y8XwlzYOJgSY= +github.com/libp2p/go-libp2p-nat v0.1.0/go.mod h1:DQzAG+QbDYjN1/C3B6vXucLtz3u9rEonLVPtZVzQqks= +github.com/libp2p/go-libp2p-net v0.0.1/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c= +github.com/libp2p/go-libp2p-net v0.0.2/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c= +github.com/libp2p/go-libp2p-netutil v0.0.1/go.mod h1:GdusFvujWZI9Vt0X5BKqwWWmZFxecf9Gt03cKxm2f/Q= +github.com/libp2p/go-libp2p-netutil v0.1.0 h1:zscYDNVEcGxyUpMd0JReUZTrpMfia8PmLKcKF72EAMQ= +github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= +github.com/libp2p/go-libp2p-noise v0.1.1/go.mod h1:QDFLdKX7nluB7DEnlVPbz7xlLHdwHFA9HiohJRr3vwM= +github.com/libp2p/go-libp2p-noise v0.2.0/go.mod h1:IEbYhBBzGyvdLBoxxULL/SGbJARhUeqlO8lVSREYu2Q= +github.com/libp2p/go-libp2p-noise v0.3.0/go.mod h1:JNjHbociDJKHD64KTkzGnzqJ0FEV5gHJa6AB00kbCNQ= +github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo= +github.com/libp2p/go-libp2p-peer v0.1.1/go.mod h1:jkF12jGB4Gk/IOo+yomm+7oLWxF278F7UnrYUQ1Q8es= +github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY= +github.com/libp2p/go-libp2p-peerstore v0.0.1/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20= +github.com/libp2p/go-libp2p-peerstore v0.0.6/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20= +github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY= +github.com/libp2p/go-libp2p-peerstore v0.1.3/go.mod h1:BJ9sHlm59/80oSkpWgr1MyY1ciXAXV397W6h1GH/uKI= +github.com/libp2p/go-libp2p-peerstore v0.1.4/go.mod h1:+4BDbDiiKf4PzpANZDAT+knVdLxvqh7hXOujessqdzs= +github.com/libp2p/go-libp2p-peerstore v0.2.0/go.mod h1:N2l3eVIeAitSg3Pi2ipSrJYnqhVnMNQZo9nkSCuAbnQ= +github.com/libp2p/go-libp2p-peerstore v0.2.1/go.mod h1:NQxhNjWxf1d4w6PihR8btWIRjwRLBr4TYKfNgrUkOPA= +github.com/libp2p/go-libp2p-peerstore v0.2.2/go.mod h1:NQxhNjWxf1d4w6PihR8btWIRjwRLBr4TYKfNgrUkOPA= +github.com/libp2p/go-libp2p-peerstore v0.2.3/go.mod h1:K8ljLdFn590GMttg/luh4caB/3g0vKuY01psze0upRw= +github.com/libp2p/go-libp2p-peerstore v0.2.4/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= +github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= +github.com/libp2p/go-libp2p-peerstore v0.2.7/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= +github.com/libp2p/go-libp2p-peerstore v0.2.8/go.mod h1:gGiPlXdz7mIHd2vfAsHzBNAMqSDkt2UBFwgcITgw1lA= +github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0= +github.com/libp2p/go-libp2p-peerstore v0.6.0 h1:HJminhQSGISBIRb93N6WK3t6Fa8OOTnHd/VBjL4mY5A= +github.com/libp2p/go-libp2p-peerstore v0.6.0/go.mod h1:DGEmKdXrcYpK9Jha3sS7MhqYdInxJy84bIPtSu65bKc= +github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= +github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= +github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s= +github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk= +github.com/libp2p/go-libp2p-pubsub v0.1.1/go.mod h1:ZwlKzRSe1eGvSIdU5bD7+8RZN/Uzw0t1Bp9R1znpR/Q= +github.com/libp2p/go-libp2p-pubsub v0.3.2-0.20200527132641-c0712c6e92cf/go.mod h1:TxPOBuo1FPdsTjFnv+FGZbNbWYsp74Culx+4ViQpato= +github.com/libp2p/go-libp2p-pubsub v0.6.0 h1:98+RXuEWW17U6cAijK1yaTf6mw/B+n5yPA421z+dlo0= +github.com/libp2p/go-libp2p-pubsub v0.6.0/go.mod h1:nJv87QM2cU0w45KPR1rZicq+FmFIOD16zmT+ep1nOmg= +github.com/libp2p/go-libp2p-quic-transport v0.1.1/go.mod h1:wqG/jzhF3Pu2NrhJEvE+IE0NTHNXslOPn9JQzyCAxzU= +github.com/libp2p/go-libp2p-quic-transport v0.10.0/go.mod h1:RfJbZ8IqXIhxBRm5hqUEJqjiiY8xmEuq3HUDS993MkA= +github.com/libp2p/go-libp2p-quic-transport v0.11.2/go.mod h1:wlanzKtIh6pHrq+0U3p3DY9PJfGqxMgPaGKaK5LifwQ= +github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= +github.com/libp2p/go-libp2p-quic-transport v0.15.0/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= +github.com/libp2p/go-libp2p-quic-transport v0.15.2 h1:wHBEceRy+1/8Ec8dAIyr+/P7L2YefIGprPVy5LrMM+k= +github.com/libp2p/go-libp2p-quic-transport v0.15.2/go.mod h1:wv4uGwjcqe8Mhjj7N/Ic0aKjA+/10UnMlSzLO0yRpYQ= +github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= +github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= +github.com/libp2p/go-libp2p-record v0.1.1/go.mod h1:VRgKajOyMVgP/F0L5g3kH7SVskp17vFi2xheb5uMJtg= +github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGdsU/9W//C8dqjQDk= +github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= +github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= +github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= +github.com/libp2p/go-libp2p-routing v0.1.0/go.mod h1:zfLhI1RI8RLEzmEaaPwzonRvXeeSHddONWkcTcB54nE= +github.com/libp2p/go-libp2p-routing-helpers v0.2.3/go.mod h1:795bh+9YeoFl99rMASoiVgHdi5bjack0N1+AFAdbvBw= +github.com/libp2p/go-libp2p-secio v0.0.3/go.mod h1:hS7HQ00MgLhRO/Wyu1bTX6ctJKhVpm+j2/S2A5UqYb0= +github.com/libp2p/go-libp2p-secio v0.1.0/go.mod h1:tMJo2w7h3+wN4pgU2LSYeiKPrfqBgkOsdiKK77hE7c8= +github.com/libp2p/go-libp2p-secio v0.2.0/go.mod h1:2JdZepB8J5V9mBp79BmwsaPQhRPNN2NrnB2lKQcdy6g= +github.com/libp2p/go-libp2p-secio v0.2.1/go.mod h1:cWtZpILJqkqrSkiYcDBh5lA3wbT2Q+hz3rJQq3iftD8= +github.com/libp2p/go-libp2p-secio v0.2.2/go.mod h1:wP3bS+m5AUnFA+OFO7Er03uO1mncHG0uVwGrwvjYlNY= +github.com/libp2p/go-libp2p-swarm v0.0.6/go.mod h1:s5GZvzg9xXe8sbeESuFpjt8CJPTCa8mhEusweJqyFy8= +github.com/libp2p/go-libp2p-swarm v0.1.0/go.mod h1:wQVsCdjsuZoc730CgOvh5ox6K8evllckjebkdiY5ta4= +github.com/libp2p/go-libp2p-swarm v0.2.1/go.mod h1:x07b4zkMFo2EvgPV2bMTlNmdQc8i+74Jjio7xGvsTgU= +github.com/libp2p/go-libp2p-swarm v0.2.2/go.mod h1:fvmtQ0T1nErXym1/aa1uJEyN7JzaTNyBcHImCxRpPKU= +github.com/libp2p/go-libp2p-swarm v0.2.3/go.mod h1:P2VO/EpxRyDxtChXz/VPVXyTnszHvokHKRhfkEgFKNM= +github.com/libp2p/go-libp2p-swarm v0.2.4/go.mod h1:/xIpHFPPh3wmSthtxdGbkHZ0OET1h/GGZes8Wku/M5Y= +github.com/libp2p/go-libp2p-swarm v0.2.8/go.mod h1:JQKMGSth4SMqonruY0a8yjlPVIkb0mdNSwckW7OYziM= +github.com/libp2p/go-libp2p-swarm v0.3.0/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJegb7H57B5hWQR5Kk= +github.com/libp2p/go-libp2p-swarm v0.5.0/go.mod h1:sU9i6BoHE0Ve5SKz3y9WfKrh8dUat6JknzUehFx8xW4= +github.com/libp2p/go-libp2p-swarm v0.5.3/go.mod h1:NBn7eNW2lu568L7Ns9wdFrOhgRlkRnIDg0FLKbuu3i8= +github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= +github.com/libp2p/go-libp2p-swarm v0.9.0 h1:LdWjHDVjPMYt3NCG2EHcQiIP8XzA8BHhHz8ZLAYol2Y= +github.com/libp2p/go-libp2p-swarm v0.9.0/go.mod h1:2f8d8uxTJmpeqHF/1ujjdXZp+98nNIbujVOMEZxCbZ8= +github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-testing v0.0.4/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-testing v0.1.0/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= +github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= +github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= +github.com/libp2p/go-libp2p-testing v0.3.0/go.mod h1:efZkql4UZ7OVsEfaxNHZPzIehtsBXMrXnCfJIgDti5g= +github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= +github.com/libp2p/go-libp2p-testing v0.4.2/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= +github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= +github.com/libp2p/go-libp2p-testing v0.6.0 h1:tV/wz6mS1VoAYA/5DGTiyzw9TJ+eXMCMvzU5VPLJSgg= +github.com/libp2p/go-libp2p-testing v0.6.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= +github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= +github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= +github.com/libp2p/go-libp2p-tls v0.3.1 h1:lsE2zYte+rZCEOHF72J1Fg3XK3dGQyKvI6i5ehJfEp0= +github.com/libp2p/go-libp2p-tls v0.3.1/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= +github.com/libp2p/go-libp2p-transport v0.0.1/go.mod h1:UzbUs9X+PHOSw7S3ZmeOxfnwaQY5vGDzZmKPod3N3tk= +github.com/libp2p/go-libp2p-transport v0.0.5/go.mod h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A= +github.com/libp2p/go-libp2p-transport-upgrader v0.0.4/go.mod h1:RGq+tupk+oj7PzL2kn/m1w6YXxcIAYJYeI90h6BGgUc= +github.com/libp2p/go-libp2p-transport-upgrader v0.1.1/go.mod h1:IEtA6or8JUbsV07qPW4r01GnTenLW4oi3lOPbUMGJJA= +github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns= +github.com/libp2p/go-libp2p-transport-upgrader v0.3.0/go.mod h1:i+SKzbRnvXdVbU3D1dwydnTmKRPXiAR/fyvi1dXuL4o= +github.com/libp2p/go-libp2p-transport-upgrader v0.4.2/go.mod h1:NR8ne1VwfreD5VIWIU62Agt/J18ekORFU/j1i2y8zvk= +github.com/libp2p/go-libp2p-transport-upgrader v0.4.3/go.mod h1:bpkldbOWXMrXhpZbSV1mQxTrefOg2Fi+k1ClDSA4ppw= +github.com/libp2p/go-libp2p-transport-upgrader v0.4.6/go.mod h1:JE0WQuQdy+uLZ5zOaI3Nw9dWGYJIA7mywEtP2lMvnyk= +github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= +github.com/libp2p/go-libp2p-transport-upgrader v0.6.0 h1:GfMCU+2aGGEm1zW3UcOz6wYSn8tXQalFfVfcww99i5A= +github.com/libp2p/go-libp2p-transport-upgrader v0.6.0/go.mod h1:1e07y1ZSZdHo9HPbuU8IztM1Cj+DR5twgycb4pnRzRo= +github.com/libp2p/go-libp2p-xor v0.0.0-20210714161855-5c005aca55db/go.mod h1:LSTM5yRnjGZbWNTA/hRwq2gGFrvRIbQJscoIL/u6InY= +github.com/libp2p/go-libp2p-yamux v0.1.2/go.mod h1:xUoV/RmYkg6BW/qGxA9XJyg+HzXFYkeXbnhjmnYzKp8= +github.com/libp2p/go-libp2p-yamux v0.1.3/go.mod h1:VGSQVrqkh6y4nm0189qqxMtvyBft44MOYYPpYKXiVt4= +github.com/libp2p/go-libp2p-yamux v0.2.0/go.mod h1:Db2gU+XfLpm6E4rG5uGCFX6uXA8MEXOxFcRoXUODaK8= +github.com/libp2p/go-libp2p-yamux v0.2.1/go.mod h1:1FBXiHDk1VyRM1C0aez2bCfHQ4vMZKkAQzZbkSQt5fI= +github.com/libp2p/go-libp2p-yamux v0.2.2/go.mod h1:lIohaR0pT6mOt0AZ0L2dFze9hds9Req3OfS+B+dv4qw= +github.com/libp2p/go-libp2p-yamux v0.2.5/go.mod h1:Zpgj6arbyQrmZ3wxSZxfBmbdnWtbZ48OpsfmQVTErwA= +github.com/libp2p/go-libp2p-yamux v0.2.7/go.mod h1:X28ENrBMU/nm4I3Nx4sZ4dgjZ6VhLEn0XhIoZ5viCwU= +github.com/libp2p/go-libp2p-yamux v0.2.8/go.mod h1:/t6tDqeuZf0INZMTgd0WxIRbtK2EzI2h7HbFm9eAKI4= +github.com/libp2p/go-libp2p-yamux v0.4.0/go.mod h1:+DWDjtFMzoAwYLVkNZftoucn7PelNoy5nm3tZ3/Zw30= +github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= +github.com/libp2p/go-libp2p-yamux v0.5.4/go.mod h1:tfrXbyaTqqSU654GTvK3ocnSZL3BuHoeTSqhcel1wsE= +github.com/libp2p/go-libp2p-yamux v0.6.0/go.mod h1:MRhd6mAYnFRnSISp4M8i0ClV/j+mWHo2mYLifWGw33k= +github.com/libp2p/go-libp2p-yamux v0.7.0 h1:bVXHbTj/XH4uBBsPrg26BlDABk5WYRlssY73P0SjhPc= +github.com/libp2p/go-libp2p-yamux v0.7.0/go.mod h1:fMyA0CsPfHkIuBU0wjRGrCjTBFiXTXxG0k5M4ETv+08= +github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= +github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= +github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= +github.com/libp2p/go-maddr-filter v0.1.0 h1:4ACqZKw8AqiuJfwFGq1CYDFugfXTOos+qQ3DETkhtCE= +github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= +github.com/libp2p/go-mplex v0.0.3/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0= +github.com/libp2p/go-mplex v0.0.4/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0= +github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU= +github.com/libp2p/go-mplex v0.1.1/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= +github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= +github.com/libp2p/go-mplex v0.2.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= +github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= +github.com/libp2p/go-msgio v0.0.2/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= +github.com/libp2p/go-msgio v0.0.3/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= +github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= +github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= +github.com/libp2p/go-msgio v0.1.0 h1:8Q7g/528ivAlfXTFWvWhVjTE8XG8sDTkRUKPYh9+5Q8= +github.com/libp2p/go-msgio v0.1.0/go.mod h1:eNlv2vy9V2X/kNldcZ+SShFE++o2Yjxwx6RAYsmgJnE= +github.com/libp2p/go-nat v0.0.3/go.mod h1:88nUEt0k0JD45Bk93NIwDqjlhiOwOoV36GchpcVc1yI= +github.com/libp2p/go-nat v0.0.4/go.mod h1:Nmw50VAvKuk38jUBcmNh6p9lUJLoODbJRvYAa/+KSDo= +github.com/libp2p/go-nat v0.0.5/go.mod h1:B7NxsVNPZmRLvMOwiEO1scOSyjA56zxYAGv1yQgRkEU= +github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= +github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= +github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= +github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= +github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= +github.com/libp2p/go-netroute v0.1.6 h1:ruPJStbYyXVYGQ81uzEDzuvbYRLKRrLvTYd33yomC38= +github.com/libp2p/go-netroute v0.1.6/go.mod h1:AqhkMh0VuWmfgtxKPp3Oc1LdU5QSWS7wl0QLhSZqXxQ= +github.com/libp2p/go-openssl v0.0.2/go.mod h1:v8Zw2ijCSWBQi8Pq5GAixw6DbFfa9u6VIYDXnvOXkc0= +github.com/libp2p/go-openssl v0.0.3/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= +github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA= +github.com/libp2p/go-reuseport v0.0.2/go.mod h1:SPD+5RwGC7rcnzngoYC86GjPzjSywuQyMVAheVBD9nQ= +github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= +github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= +github.com/libp2p/go-reuseport-transport v0.0.2/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs= +github.com/libp2p/go-reuseport-transport v0.0.3/go.mod h1:Spv+MPft1exxARzP2Sruj2Wb5JSyHNncjf1Oi2dEbzM= +github.com/libp2p/go-reuseport-transport v0.0.4/go.mod h1:trPa7r/7TJK/d+0hdBLOCGvpQQVOU74OXbNCIMkufGw= +github.com/libp2p/go-reuseport-transport v0.0.5/go.mod h1:TC62hhPc8qs5c/RoXDZG6YmjK+/YWUPC0yYmeUecbjc= +github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7CyD1zuN7xQT8gc= +github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= +github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= +github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= +github.com/libp2p/go-sockaddr v0.1.1 h1:yD80l2ZOdGksnOyHrhxDdTDFrf7Oy+v3FMVArIRgZxQ= +github.com/libp2p/go-sockaddr v0.1.1/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= +github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14= +github.com/libp2p/go-stream-muxer v0.1.0/go.mod h1:8JAVsjeRBCWwPoZeH0W1imLOcriqXJyFvB0mR4A04sQ= +github.com/libp2p/go-stream-muxer-multistream v0.1.1/go.mod h1:zmGdfkQ1AzOECIAcccoL8L//laqawOsO03zX8Sa+eGw= +github.com/libp2p/go-stream-muxer-multistream v0.2.0/go.mod h1:j9eyPol/LLRqT+GPLSxvimPhNph4sfYfMoDPd7HkzIc= +github.com/libp2p/go-stream-muxer-multistream v0.3.0 h1:TqnSHPJEIqDEO7h1wZZ0p3DXdvDSiLHQidKKUGZtiOY= +github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= +github.com/libp2p/go-tcp-transport v0.0.4/go.mod h1:+E8HvC8ezEVOxIo3V5vCK9l1y/19K427vCzQ+xHKH/o= +github.com/libp2p/go-tcp-transport v0.1.0/go.mod h1:oJ8I5VXryj493DEJ7OsBieu8fcg2nHGctwtInJVpipc= +github.com/libp2p/go-tcp-transport v0.1.1/go.mod h1:3HzGvLbx6etZjnFlERyakbaYPdfjg2pWP97dFZworkY= +github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcroCGYw28kh94oLe0= +github.com/libp2p/go-tcp-transport v0.2.3/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU= +github.com/libp2p/go-tcp-transport v0.2.4/go.mod h1:9dvr03yqrPyYGIEN6Dy5UvdJZjyPFvl1S/igQ5QD1SU= +github.com/libp2p/go-tcp-transport v0.2.7/go.mod h1:lue9p1b3VmZj1MhhEGB/etmvF/nBQ0X9CW2DutBT3MM= +github.com/libp2p/go-tcp-transport v0.4.0 h1:VDyg4j6en3OuXf90gfDQh5Sy9KowO9udnd0OU8PP6zg= +github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= +github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I= +github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc= +github.com/libp2p/go-ws-transport v0.0.5/go.mod h1:Qbl4BxPfXXhhd/o0wcrgoaItHqA9tnZjoFZnxykuaXU= +github.com/libp2p/go-ws-transport v0.1.0/go.mod h1:rjw1MG1LU9YDC6gzmwObkPd/Sqwhw7yT74kj3raBFuo= +github.com/libp2p/go-ws-transport v0.1.2/go.mod h1:dsh2Ld8F+XNmzpkaAijmg5Is+e9l6/1tK/6VFOdN69Y= +github.com/libp2p/go-ws-transport v0.2.0/go.mod h1:9BHJz/4Q5A9ludYWKoGCFC5gUElzlHoKzu0yY9p/klM= +github.com/libp2p/go-ws-transport v0.3.0/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= +github.com/libp2p/go-ws-transport v0.3.1/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= +github.com/libp2p/go-ws-transport v0.4.0/go.mod h1:EcIEKqf/7GDjth6ksuS/6p7R49V4CBY6/E7R/iyhYUA= +github.com/libp2p/go-ws-transport v0.5.0/go.mod h1:I2juo1dNTbl8BKSBYo98XY85kU2xds1iamArLvl8kNg= +github.com/libp2p/go-yamux v1.2.1/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.3.0/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.3.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.3.5/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.3.6/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.3.7/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= +github.com/libp2p/go-yamux v1.4.0/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= +github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI= +github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= +github.com/libp2p/go-yamux/v2 v2.2.0/go.mod h1:3So6P6TV6r75R9jiBpiIKgU/66lOarCZjqROGxzPpPQ= +github.com/libp2p/go-yamux/v2 v2.3.0 h1:luRV68GS1vqqr6EFUjtu1kr51d+IbW0gSowu8emYWAI= +github.com/libp2p/go-yamux/v2 v2.3.0/go.mod h1:iTU+lOIn/2h0AgKcL49clNTwfEw+WSfDYrXe05EyKIs= +github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/lucas-clemente/quic-go v0.11.2/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw= +github.com/lucas-clemente/quic-go v0.19.3/go.mod h1:ADXpNbTQjq1hIzCpB+y/k5iz4n4z4IwqoLb94Kh5Hu8= +github.com/lucas-clemente/quic-go v0.21.2/go.mod h1:vF5M1XqhBAHgbjKcJOXY3JZz3GP0T3FQhz/uyOUS38Q= +github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= +github.com/lucas-clemente/quic-go v0.24.0 h1:ToR7SIIEdrgOhgVTHvPgdVRJfgVy+N0wQAagH7L4d5g= +github.com/lucas-clemente/quic-go v0.24.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= +github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lufia/iostat v1.1.0/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/AQ+Pg= +github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magefile/mage v1.9.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= +github.com/magefile/mage v1.11.0 h1:C/55Ywp9BpgVVclD3lRnSYCwXTYxmSppIgLeDYlNuls= +github.com/magefile/mage v1.11.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= +github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= +github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= +github.com/marten-seemann/qtls v0.10.0/go.mod h1:UvMd1oaYDACI99/oZUYLzMCkBXQVT0aGm99sJhbT8hs= +github.com/marten-seemann/qtls-go1-15 v0.1.1/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= +github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= +github.com/marten-seemann/qtls-go1-15 v0.1.5/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= +github.com/marten-seemann/qtls-go1-16 v0.1.4 h1:xbHbOGGhrenVtII6Co8akhLEdrawwB2iHl5yhJRpnco= +github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= +github.com/marten-seemann/qtls-go1-17 v0.1.0-rc.1/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= +github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= +github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +github.com/mattn/go-colorable v0.0.0-20170327083344-ded68f7a9561/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-xmlrpc v0.0.3/go.mod h1:mqc2dz7tP5x5BKlCahN/n+hs7OSZKJkS9JsHNBRlrxA= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mdlayher/genetlink v1.0.0/go.mod h1:0rJ0h4itni50A86M2kHcgS85ttZazNt7a8H2a2cw0Gc= +github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA= +github.com/mdlayher/netlink v0.0.0-20190828143259-340058475d09/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M= +github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M= +github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY= +github.com/mdlayher/wifi v0.0.0-20190303161829-b1436901ddee/go.mod h1:Evt/EIne46u9PtQbeTx2NTcqURpr5K4SvKtGmBuDPN8= +github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.0.5/go.mod h1:tSw34BaGZ0iF+oVKDOjq1/LuxGifgW7shaJ6+dBYFXg= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= +github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mmcloughlin/avo v0.0.0-20201105074841-5d2f697d268f/go.mod h1:6aKT4zZIrpGqB3RpFU14ByCSSyKY6LfJz4J/JJChHfI= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= +github.com/mozilla/tls-observatory v0.0.0-20210209181001-cf43108d6880/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= +github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= +github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= +github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= +github.com/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= +github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= +github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= +github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= +github.com/multiformats/go-multiaddr v0.3.0 h1:z1Old9IYcUyMEtSbvwCOJ1jcrmJdU0LYH8aFBvZKzcQ= +github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= +github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= +github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= +github.com/multiformats/go-multiaddr-dns v0.0.3/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= +github.com/multiformats/go-multiaddr-dns v0.1.0/go.mod h1:01k2RAqtoXIuPa3DCavAE9/6jc6nM0H3EgZyfUhN2oY= +github.com/multiformats/go-multiaddr-dns v0.2.0/go.mod h1:TJ5pr5bBO7Y1B18djPuRsVkduhQH2YqYSbxWJzYGdK0= +github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= +github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= +github.com/multiformats/go-multiaddr-fmt v0.0.1/go.mod h1:aBYjqL4T/7j4Qx+R73XSv/8JsgnRFlf0w2KGLCmXl3Q= +github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= +github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= +github.com/multiformats/go-multiaddr-net v0.0.1/go.mod h1:nw6HSxNmCIQH27XPGBuX+d1tnvM7ihcFwHMSstNAVUU= +github.com/multiformats/go-multiaddr-net v0.1.0/go.mod h1:5JNbcfBOP4dnhoZOv10JJVkJO0pCCEf8mTnipAo2UZQ= +github.com/multiformats/go-multiaddr-net v0.1.1/go.mod h1:5JNbcfBOP4dnhoZOv10JJVkJO0pCCEf8mTnipAo2UZQ= +github.com/multiformats/go-multiaddr-net v0.1.2/go.mod h1:QsWt3XK/3hwvNxZJp92iMQKME1qHfpYmyIjFVsSOY6Y= +github.com/multiformats/go-multiaddr-net v0.1.3/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= +github.com/multiformats/go-multiaddr-net v0.1.4/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= +github.com/multiformats/go-multiaddr-net v0.1.5/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= +github.com/multiformats/go-multiaddr-net v0.2.0 h1:MSXRGN0mFymt6B1yo/6BPnIRpLPEnKgQNvVfCX5VDJk= +github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= +github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= +github.com/multiformats/go-multibase v0.0.2/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= +github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= +github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= +github.com/multiformats/go-multicodec v0.2.0/go.mod h1:/y4YVwkfMyry5kFbMTbLJKErhycTIftytRV+llXdyS4= +github.com/multiformats/go-multicodec v0.3.0/go.mod h1:qGGaQmioCDh+TeFOnxrbU0DaIPw8yFgAZgFG0V7p1qQ= +github.com/multiformats/go-multicodec v0.3.1-0.20210902112759-1539a079fd61 h1:ZrUuMKNgJ52qHPoQ+bx0h0uBfcWmN7Px+4uKSZeesiI= +github.com/multiformats/go-multicodec v0.3.1-0.20210902112759-1539a079fd61/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ= +github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= +github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= +github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.0.9/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= +github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= +github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= +github.com/multiformats/go-multihash v0.1.0 h1:CgAgwqk3//SVEw3T+6DqI4mWMyRuDwZtOWcJT0q9+EA= +github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84= +github.com/multiformats/go-multistream v0.0.1/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= +github.com/multiformats/go-multistream v0.0.4/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= +github.com/multiformats/go-multistream v0.1.0/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= +github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= +github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= +github.com/multiformats/go-multistream v0.2.2 h1:TCYu1BHTDr1F/Qm75qwYISQdzGcRdC21nFgQW7l7GBo= +github.com/multiformats/go-multistream v0.2.2/go.mod h1:UIcnm7Zuo8HKG+HkWgfQsGL+/MIEhyTqbODbIUwSXKs= +github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= +github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= +github.com/nakabonne/nestif v0.3.0/go.mod h1:dI314BppzXjJ4HsCnbo7XzrJHPszZsjnk5wEBSYHI2c= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= +github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= +github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/ngdinhtoan/glide-cleanup v0.2.0/go.mod h1:UQzsmiDOb8YV3nOsCxK/c9zPpCZVNoHScRE3EO9pVMM= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c/go.mod h1:7qN3Y0BvzRUf4LofcoJplQL10lsFDb4PYlePTVwrP28= +github.com/nishanths/exhaustive v0.1.0/go.mod h1:S1j9110vxV1ECdCudXRkeMnFQ/DQk9ajLT0Uf2MYZQQ= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= +github.com/nishanths/predeclared v0.2.1/go.mod h1:HvkGJcA3naj4lOwnFXFDkFxVtSqQMB9sbB1usJ+xjQE= +github.com/nkovacs/streamquote v1.0.0 h1:PmVIV08Zlx2lZK5fFZlMZ04eHcDTIFJCv/5/0twVUow= +github.com/nkovacs/streamquote v1.0.0/go.mod h1:BN+NaZ2CmdKqUuTUXUEm9j95B2TRbpOWpxbJYzzgUsc= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= +github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= +github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/open-rpc/meta-schema v0.0.0-20201029221707-1b72ef2ea333/go.mod h1:Ag6rSXkHIckQmjFBCweJEEt1mrTPBv8b9W4aU/NQWfI= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opentracing-contrib/go-grpc v0.0.0-20180928155321-4b5a12d3ff02/go.mod h1:JNdpVEzCpXBgIiv4ds+TzhN1hrtxq6ClLrTlT9OQRSc= +github.com/opentracing-contrib/go-grpc v0.0.0-20191001143057-db30781987df/go.mod h1:DYR5Eij8rJl8h7gblRrOZ8g0kW1umSpKqYIBTgeDtLo= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= +github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= +github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9 h1:1/WtZae0yGtPq+TI6+Tv1WTxkukpXeMlviSxvL7SRgk= +github.com/petar/GoLLRB v0.0.0-20210522233825-ae3b015fd3e9/go.mod h1:x3N5drFsm2uilKKuuYo6LdyD8vZAW55sH/9w+pbo1sw= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/peterh/liner v0.0.0-20170317030525-88609521dc4b/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polydawn/refmt v0.0.0-20190408063855-01bf1e26dd14/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e h1:ZOcivgkkFRnjfoTcGsDq3UQYiBmekwLA+qg0OjyB/ls= +github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= +github.com/polyfloyd/go-errorlint v0.0.0-20201127212506-19bd8db6546f/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= +github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= +github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.30.0 h1:JEkYlQnpzrzQFxi6gnukFPdQ+ac82oRhzMcIduJu/Ug= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/node_exporter v1.0.0-rc.0.0.20200428091818-01054558c289/go.mod h1:FGbBv5OPKjch+jNUJmEQpMZytIdyW0NdBtWFcfSKusc= +github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.1.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/statsd_exporter v0.20.0/go.mod h1:YL3FWCG8JBBtaUSxAg4Gz2ZYu22bS84XM89ZQXXTWmQ= +github.com/prometheus/statsd_exporter v0.21.0 h1:hA05Q5RFeIjgwKIYEdFd59xu5Wwaznf33yKI+pyX6T8= +github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= +github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.1/go.mod h1:s41wdpioTcgelE3dlTUgK57UaUxjihg/DBGUccoN5IU= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.1/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20210203162857-b223e0831f88/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20210221215616-dfcc94e3dffd/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/raulk/clock v1.1.0 h1:dpb29+UKMbLqiU/jqIJptgLR1nn23HLgMY0sTCDza5Y= +github.com/raulk/clock v1.1.0/go.mod h1:3MpVxdZ/ODBQDxbN+kzshf5OSZwPjtMDx6BBXBmOeY0= +github.com/raulk/go-watchdog v1.2.0 h1:konN75pw2BMmZ+AfuAm5rtFsWcJpKF3m02rKituuXNo= +github.com/raulk/go-watchdog v1.2.0/go.mod h1:lzSbAl5sh4rtI8tYHU01BWIDzgzqaQLj6RcA1i4mlqI= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.6.2 h1:aIihoIOHCiLZHxyoNQ+ABL4NKhFTgKLBdMLyEAh98m0= +github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.21.0/go.mod h1:ZPhntP/xmq1nnND05hhpAh2QMhSsA4UN3MGZ6O2J3hM= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd/go.mod h1:hPqNNc0+uJM6H+SuU8sEs5K5IQeKccPqeSjfgcKGgPk= +github.com/ryancurrah/gomodguard v1.2.0/go.mod h1:rNqbC4TOIdUDcVMSIpNNAzTbzXAZa6W5lnUepvuMMgQ= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanposhiho/wastedassign v0.2.0/go.mod h1:LGpq5Hsv74QaqM47WtIsRSF/ik9kqk07kchgv66tLVE= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/securego/gosec/v2 v2.7.0/go.mod h1:xNbGArrGUspJLuz3LS5XCY1EBW/0vABAl/LWfSklmiM= +github.com/sercand/kuberesolver v2.1.0+incompatible/go.mod h1:lWF3GL0xptCB/vCiJPl/ZshwPsX/n4Y7u0CW9E7aQIQ= +github.com/sercand/kuberesolver v2.4.0+incompatible/go.mod h1:lWF3GL0xptCB/vCiJPl/ZshwPsX/n4Y7u0CW9E7aQIQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/shirou/gopsutil v2.18.12+incompatible h1:1eaJvGomDnH74/5cF4CTmTbLHAriGFsTZppLXDX93OM= +github.com/shirou/gopsutil v2.18.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.21.2/go.mod h1:ghfMypLDrFSWN2c9cDYFLHyynQ+QUht0cv/18ZqVczw= +github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= +github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= +github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= +github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= +github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= +github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= +github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= +github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= +github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= +github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= +github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= +github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= +github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= +github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= +github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= +github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= +github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= +github.com/siebenmann/go-kstat v0.0.0-20160321171754-d34789b79745/go.mod h1:G81aIFAMS9ECrwBYR9YxhlPjWgrItd+Kje78O6+uqm8= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w= +github.com/smartystreets/assertions v1.0.1/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod h1:2RVY1rIf+2J2o/IM9+vPq9RzmHDSseB7FoXiSNIUsoU= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/soundcloud/go-runit v0.0.0-20150630195641-06ad41a06c4a/go.mod h1:LeFCbQYJ3KJlPs/FvPz2dy1tkpxyeNESVyCNNzRXFR0= +github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= +github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= +github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.0-20170417170307-b6cb39589372/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v0.0.0-20170417173400-9e4c21054fa1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= +github.com/ssgreg/nlreturn/v2 v2.1.0/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/quantile v0.0.0-20150917103942-b0c588724d25/go.mod h1:lbP8tGiBjZ5YWIc2fzuRpTaz0b/53vT6PEs3QuAWzuU= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.3.1-0.20190311161405-34c6fa2dc709/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tetafro/godot v1.4.4/go.mod h1:FVDd4JuKliW3UgjswZfJfHq4vAx0bD/Jd5brJjGeaz4= +github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= +github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= +github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/tj/go-spin v1.1.0 h1:lhdWZsvImxvZ3q1C5OIB7d72DuOwP4O2NdBg9PyzNds= +github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= +github.com/tklauser/go-sysconf v0.3.4/go.mod h1:Cl2c8ZRWfHD5IrfHo9VN+FX9kCFjIOyVklgXycLB6ek= +github.com/tklauser/numcpus v0.2.1/go.mod h1:9aU+wOc6WjUIZEwWMP62PL/41d65P+iks1gBkr4QyP8= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck v1.0.0/go.mod h1:Bd3i1FaEKe3XmcPoHhNQ+HM0S8P6eIXoQIoGj/ndJkU= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/tommy-muehle/go-mnd/v2 v2.3.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.0/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.23.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v1.5.1-0.20181102163054-1fc5c315e03c/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go v1.2.4/go.mod h1:EuaSCk8iZMdIspsu6HXH7X2UGKw1ezO4wCfGszGmmo4= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.4/go.mod h1:bWBu1+kIRWcF8uMklKaJrR6fTWQOwAlrIzX22pHwryA= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.0.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= +github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= +github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.16.0/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl6TwOBhHCA= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.1.0 h1:RZqt0yGBsps8NGvLSGW804QQqCUYYLsaOjTVHy1Ocw4= +github.com/valyala/fasttemplate v1.1.0/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/quicktemplate v1.6.3/go.mod h1:fwPzK2fHuYEODzJ9pkw0ipCPNHZ2tD5KW4lOuSdPKzY= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= +github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= +github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= +github.com/wangjia184/sortedset v0.0.0-20160527075905-f5d03557ba30/go.mod h1:YkocrP2K2tcw938x9gCOmT5G5eCD6jsTz0SZuyAqwIE= +github.com/warpfork/go-testmark v0.3.0 h1:Q81c4u7hT+BR5kNfNQhEF0VT2pmL7+Kk0wD+ORYl7iA= +github.com/warpfork/go-testmark v0.3.0/go.mod h1:jhEf8FVxd+F17juRubpmut64NEG6I2rgkUhlcqqXwE0= +github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= +github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= +github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a h1:G++j5e0OC488te356JvdhaM8YS6nMsjLAYF7JxCv07w= +github.com/warpfork/go-wish v0.0.0-20200122115046-b9ea61034e4a/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= +github.com/weaveworks/common v0.0.0-20200512154658-384f10054ec5/go.mod h1:c98fKi5B9u8OsKGiWHLRKus6ToQ1Tubeow44ECO1uxY= +github.com/weaveworks/promrus v1.2.0/go.mod h1:SaE82+OJ91yqjrE1rsvBWVzNZKcHYFtMUyS1+Ogs/KA= +github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc/go.mod h1:r45hJU7yEoA81k6MWNhpMj/kms0n14dkzkxYHoB96UM= +github.com/whyrusleeping/bencher v0.0.0-20190829221104-bb6607aa8bba h1:X4n8JG2e2biEZZXdBKt9HX7DN3bYGFUqljqqy0DqgnY= +github.com/whyrusleeping/bencher v0.0.0-20190829221104-bb6607aa8bba/go.mod h1:CHQnYnQUEPydYCwuy8lmTHfGmdw9TKrhWV0xLx8l0oM= +github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11 h1:5HZfQkwe0mIfyDmc1Em5GqlNRzcdtlv4HTNmdpt7XH0= +github.com/whyrusleeping/cbor v0.0.0-20171005072247-63513f603b11/go.mod h1:Wlo/SzPmxVp6vXpGt/zaXhHH0fn4IxgqZc82aKg6bpQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20191216205031-b047b6acb3c0/go.mod h1:xdlJQaiqipF0HW+Mzpg7XRM3fWbGvfgFlcppuvlkIvY= +github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= +github.com/whyrusleeping/cbor-gen v0.0.0-20200414195334-429a0b5e922e/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= +github.com/whyrusleeping/cbor-gen v0.0.0-20200504204219-64967432584d/go.mod h1:W5MvapuoHRP8rz4vxjwCK1pDqF1aQcWsV5PZ+AHbqdg= +github.com/whyrusleeping/cbor-gen v0.0.0-20200710004633-5379fc63235d/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200715143311-227fab5a2377/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200723185710-6a3894a6352b/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200806213330-63aa96ca5488/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200810223238-211df3b9e24c/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200812213548-958ddffe352c/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20200826160007-0b9f6c5fb163/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20210118024343-169e9d70c0c2/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20210303213153-67a261a1d291/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20210713220151-be142a5ae1a8/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20211110122933-f57984553008 h1:7WtW9D9VGpmRLuQmrPy2JobUNdka95z3MKEVpELtOjo= +github.com/whyrusleeping/cbor-gen v0.0.0-20211110122933-f57984553008/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E= +github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8= +github.com/whyrusleeping/go-ctrlnet v0.0.0-20180313164037-f564fbbdaa95/go.mod h1:SJqKCCPXRfBFCwXjfNT/skfsceF7+MBFLI2OrvuRA7g= +github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= +github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= +github.com/whyrusleeping/go-logging v0.0.1/go.mod h1:lDPYj54zutzG1XYfHAhcc7oNXEburHQBn+Iqd4yS4vE= +github.com/whyrusleeping/go-notifier v0.0.0-20170827234753-097c5d47330f/go.mod h1:cZNvX9cFybI01GriPRMXDtczuvUhgbcYr9iCGaNlRv8= +github.com/whyrusleeping/go-sysinfo v0.0.0-20190219211824-4a357d4b90b1/go.mod h1:tKH72zYNt/exx6/5IQO6L9LoQ0rEjd5SbbWaDTs9Zso= +github.com/whyrusleeping/ledger-filecoin-go v0.9.1-0.20201010031517-c3dcc1bddce4/go.mod h1:K+EVq8d5QcQ2At5VECsA+SNZvWefyBXh8TnIsxo1OvQ= +github.com/whyrusleeping/mafmt v1.2.8/go.mod h1:faQJFPbLSxzD9xpA02ttW/tS9vZykNvXwGvqIpk20FA= +github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= +github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= +github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= +github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= +github.com/whyrusleeping/pubsub v0.0.0-20190708150250-92bcb0691325/go.mod h1:g7ckxrjiFh8mi1AY7ox23PZD0g6QU/TxW3U3unX7I3A= +github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee h1:lYbXeSvJi5zk5GLKVuid9TVjS9a0OmLIDKTfoZBL6Ow= +github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg= +github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/c-for-go v0.0.0-20200718154222-87b0065af829 h1:wb7xrDzfkLgPHsSEBm+VSx6aDdi64VtV0xvP0E6j8bk= +github.com/xlab/c-for-go v0.0.0-20200718154222-87b0065af829/go.mod h1:h/1PEBwj7Ym/8kOuMWvO2ujZ6Lt+TMbySEXNhjjR87I= +github.com/xlab/pkgconfig v0.0.0-20170226114623-cea12a0fd245 h1:Sw125DKxZhPUI4JLlWugkzsrlB50jR9v2khiD9FxuSo= +github.com/xlab/pkgconfig v0.0.0-20170226114623-cea12a0fd245/go.mod h1:C+diUUz7pxhNY6KAoLgrTYARGWnt82zWTylZlxT92vk= +github.com/xorcare/golden v0.6.0/go.mod h1:7T39/ZMvaSEZlBPoYfVFmsBLmUl3uz9IuzWj/U6FtvQ= +github.com/xorcare/golden v0.6.1-0.20191112154924-b87f686d7542 h1:oWgZJmC1DorFZDpfMfWg7xk29yEOZiXmo/wZl+utTI8= +github.com/xorcare/golden v0.6.1-0.20191112154924-b87f686d7542/go.mod h1:7T39/ZMvaSEZlBPoYfVFmsBLmUl3uz9IuzWj/U6FtvQ= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.12.1/go.mod h1:KatxXrVDzgWwbssUWsF5+cOJHXPvzQ09YSlzGNuhOEo= +go.dedis.ch/fixbuf v1.0.3/go.mod h1:yzJMt34Wa5xD37V5RTdmp38cz3QhMagdGoem9anUalw= +go.dedis.ch/kyber/v3 v3.0.4/go.mod h1:OzvaEnPvKlyrWyp3kGXlFdp7ap1VC6RkZDTaPikqhsQ= +go.dedis.ch/kyber/v3 v3.0.9/go.mod h1:rhNjUUg6ahf8HEg5HUvVBYoWY4boAafX8tYxX+PS+qg= +go.dedis.ch/protobuf v1.0.5/go.mod h1:eIV4wicvi6JK0q/QnfIEGeSFNG0ZeB24kzut5+HaRLo= +go.dedis.ch/protobuf v1.0.7/go.mod h1:pv5ysfkDX/EawiPqcW3ikOxsL5t+BqnV6xHSmE79KI4= +go.dedis.ch/protobuf v1.0.11/go.mod h1:97QR256dnkimeNdfmURz0wAMNVbd1VmLXhG1CrTYrJ4= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= +go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.22.6-0.20201102222123-380f4078db9f/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel v1.2.0/go.mod h1:aT17Fk0Z1Nor9e0uisf98LrntPGMnk4frBO9+dkf69I= +go.opentelemetry.io/otel v1.3.0 h1:APxLf0eiBwLl+SOXiJJCVYzA1OOJNyAoV8C5RNRyy7Y= +go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= +go.opentelemetry.io/otel/bridge/opencensus v0.25.0/go.mod h1:dkZDdaNwLlIutxK2Kc2m3jwW2M1ISaNf8/rOYVwuVHs= +go.opentelemetry.io/otel/exporters/jaeger v1.2.0/go.mod h1:KJLFbEMKTNPIfOxcg/WikIozEoKcPgJRz3Ce1vLlM8E= +go.opentelemetry.io/otel/internal/metric v0.25.0/go.mod h1:Nhuw26QSX7d6n4duoqAFi5KOQR4AuzyMcl5eXOgwxtc= +go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= +go.opentelemetry.io/otel/metric v0.25.0/go.mod h1:E884FSpQfnJOMMUaq+05IWlJ4rjZpk2s/F1Ju+TEEm8= +go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= +go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= +go.opentelemetry.io/otel/sdk v1.2.0 h1:wKN260u4DesJYhyjxDa7LRFkuhH7ncEVKU37LWcyNIo= +go.opentelemetry.io/otel/sdk v1.2.0/go.mod h1:jNN8QtpvbsKhgaC6V5lHiejMoKD+V8uadoSafgHPx1U= +go.opentelemetry.io/otel/sdk/export/metric v0.25.0/go.mod h1:Ej7NOa+WpN49EIcr1HMUYRvxXXCCnQCg2+ovdt2z8Pk= +go.opentelemetry.io/otel/sdk/metric v0.25.0/go.mod h1:G4xzj4LvC6xDDSsVXpvRVclQCbofGGg4ZU2VKKtDRfg= +go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= +go.opentelemetry.io/otel/trace v1.2.0/go.mod h1:N5FLswTubnxKxOJHM7XZC074qpeEdLy3CgAVsdMucK0= +go.opentelemetry.io/otel/trace v1.3.0 h1:doy8Hzb1RJ+I3yFhtDmwNc7tIyw1tNMOIsyPzp1NOGY= +go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.starlark.net v0.0.0-20190702223751-32f345186213/go.mod h1:c1/X6cHgvdXj6pUlmWKMkuqRnW4K8x2vwt6JAaaircg= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/dig v1.10.0/go.mod h1:X34SnWGr8Fyla9zQNO2GSO2D+TIuqB14OS8JhYocIyw= +go.uber.org/fx v1.9.0/go.mod h1:mFdUyAUuJ3w4jAckiKSKbldsxy1ojpAMJ+dVZg5Y0Aw= +go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= +go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= +go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +go4.org v0.0.0-20200411211856-f5505b9728dd h1:BNJlw5kRTzdmyfh5U8F93HA2OwkP7ZGwA51eJ/0wKOU= +go4.org v0.0.0-20200411211856-f5505b9728dd/go.mod h1:CIiUVy99QCPfoE13bO4EZaz5GZMZXMSBGhxRdsvzbkg= +golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= +golang.org/x/arch v0.0.0-20201008161808-52c3e6f60cff/go.mod h1:flIaEI6LNU6xOCD5PaJvn9wGP0agmIOqjrtsKGRguv4= +golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200128174031-69ecbb4d6d5d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200311171314-f7b00557c8c4/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b h1:QAqMVf3pSa6eeTsuklijukjXBlj7Es2QQplab+/RbQ4= +golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20210615023648-acb5c1269671/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc= +golang.org/x/exp v0.0.0-20210714144626-1041f73d31d8/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc= +golang.org/x/exp v0.0.0-20210715201039-d37aa40e8013 h1:Jp57DBw4K7mimZNA3F9f7CndVcUt4kJjmyJf2rzJHoI= +golang.org/x/exp v0.0.0-20210715201039-d37aa40e8013/go.mod h1:DVyR6MI7P4kEQgvZJSj1fQGrWIi2RzIrfYWycwheUAc= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190921015927-1a5e07d1ff72/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200519113804-d87ec0cfa476/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201022231255-08b38378de70/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180202135801-37707fdb30a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190302025703-b6889370fb10/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190411185658-b44545bcd369/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190524122548-abf6ff778158/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190524152521-dbbf3f1254d4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190526052359-791d8a0f4d09/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190902133755-9109b7679e13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191025090151-53bf42e6b339/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200812155832-6a926be9bd1d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200926100807-9d91bd62050c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210217105451-b926d437f341/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210228012217-479acdf4ea46/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211209171907-798191bca915 h1:P+8mCzuEpyszAT6T42q0sxU+eveBAF/cJ2Kp0x6/8+0= +golang.org/x/sys v0.0.0-20211209171907-798191bca915/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200216192241-b320d3a0f5a2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200711155855-7342f9734a7d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201011145850-ed2f50202694/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201105001634-bc3cf281b174/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201114224030-61ea331ec02b/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201118003311-bd56c0adb394/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210101214203-2dba1e4ea05c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210104081019-d8d6ddbec6ee/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.7 h1:6j8CgantCy3yc8JGBqkDLMKWqZ0RDU2g1HVgacojGWQ= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= +google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= +gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/mysql v1.1.1/go.mod h1:KdrTanmfLPPyAOeYGyG+UpDys7/7eeWT1zCq+oekYnU= +gorm.io/gorm v1.21.9/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= +gorm.io/gorm v1.21.12/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +howett.net/plist v0.0.0-20181124034731-591f970eefbb h1:jhnBjNi9UFpfpl8YZhA9CrOqpnJdvzuiHsl/dnxl11M= +howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= +lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= +lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= +lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= +modernc.org/cc v1.0.0 h1:nPibNuDEx6tvYrUAtvDTTw98rx5juGsa5zuDnKwEEQQ= +modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0 h1:wWpDlbK8ejRfSyi0frMyhilD3JBvtcx2AdGDnU+JtsE= +modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.1.1 h1:FeylZSVX8S+58VsyJlkEj2bcpdytmp9MmDKZkKx8OIE= +modernc.org/mathutil v1.1.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/strutil v1.1.0 h1:+1/yCzZxY2pZwwrsbH+4T7BQMoLQ9QiBshRC9eicYsc= +modernc.org/strutil v1.1.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0 h1:7ccXrupWZIS3twbUGrtKmHS2DXY6xegFua+6O3xgAFU= +modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20210104141923-aac4ce9116a7/go.mod h1:hBpJkZE8H/sb+VRFvw2+rBpHNsTBcvSpk61hr8mzXZE= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/venus-devtool/inline-gen/inlinegen-data.json b/venus-devtool/inline-gen/inlinegen-data.json new file mode 100644 index 0000000000..dcabba3484 --- /dev/null +++ b/venus-devtool/inline-gen/inlinegen-data.json @@ -0,0 +1,7 @@ +{ + "actorVersions": [0, 2, 3, 4, 5, 6, 7], + "latestActorsVersion": 7, + + "networkVersions": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], + "latestNetworkVersion": 15 +} \ No newline at end of file diff --git a/venus-devtool/inline-gen/main.go b/venus-devtool/inline-gen/main.go new file mode 100644 index 0000000000..e8a652209f --- /dev/null +++ b/venus-devtool/inline-gen/main.go @@ -0,0 +1,130 @@ +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "io/fs" + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "strings" + "text/template" +) + +const ( + stateGlobal = iota + stateTemplate + stateGen +) + +func main() { + db, err := ioutil.ReadFile(os.Args[2]) + if err != nil { + panic(err) + } + var data map[string]interface{} + if err := json.Unmarshal(db, &data); err != nil { + panic(err) + } + + err = filepath.WalkDir(os.Args[1], func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() { + return nil + } + if filepath.Ext(path) != ".go" { + return nil + } + fb, err := ioutil.ReadFile(path) + if err != nil { + return err + } + + lines := strings.Split(string(fb), "\n") + + outLines := make([]string, 0, len(lines)) + var templateLines []string + + state := stateGlobal + + rewrite := false + + for i, line := range lines { + ln := i + 1 + switch state { + case stateGlobal: + outLines = append(outLines, line) + if strings.TrimSpace(line) == `/* inline-gen template` { + state = stateTemplate + fmt.Printf("template section start %s:%d\n", path, ln) + } + case stateTemplate: + outLines = append(outLines, line) // output all template lines + + if strings.TrimSpace(line) == `/* inline-gen start */` { + state = stateGen + fmt.Printf("generated section start %s:%d\n", path, ln) + continue + } + templateLines = append(templateLines, line) + case stateGen: + if strings.TrimSpace(line) != `/* inline-gen end */` { + continue + } + fmt.Printf("generated section end %s:%d\n", path, ln) + + state = stateGlobal + rewrite = true + + tpl, err := template.New("").Funcs(template.FuncMap{ + "import": func(v float64) string { + if v == 0 { + return "/" + } + return fmt.Sprintf("/v%d/", int(v)) + }, + "add": func(a, b float64) float64 { + return a + b + }, + }).Parse(strings.Join(templateLines, "\n")) + if err != nil { + fmt.Printf("%s:%d: parsing template: %s\n", path, ln, err) + os.Exit(1) + } + + var b bytes.Buffer + err = tpl.Execute(&b, data) + if err != nil { + fmt.Printf("%s:%d: executing template: %s\n", path, ln, err) + os.Exit(1) + } + + outLines = append(outLines, strings.Split(b.String(), "\n")...) + outLines = append(outLines, line) + templateLines = nil + } + } + + if rewrite { + fmt.Printf("write %s\n", path) + if err := ioutil.WriteFile(path, []byte(strings.Join(outLines, "\n")), 0664); err != nil { + return err + } + + fmtFile(path) + } + + return nil + }) + if err != nil { + panic(err) + } +} + +func fmtFile(path string) { + exec.Command("gofmt", "-s", "-l", "-w", path).Run() +} diff --git a/venus-shared/TODO.md b/venus-shared/TODO.md new file mode 100644 index 0000000000..932bed20ba --- /dev/null +++ b/venus-shared/TODO.md @@ -0,0 +1 @@ +- [ ] tests in actors diff --git a/venus-shared/actors/adt/adt.go b/venus-shared/actors/adt/adt.go new file mode 100644 index 0000000000..6cebb1e0e6 --- /dev/null +++ b/venus-shared/actors/adt/adt.go @@ -0,0 +1,31 @@ +// FETCHED FROM LOTUS: adt/adt.go + +package adt + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" +) + +type Map interface { + Root() (cid.Cid, error) + + Put(k abi.Keyer, v cbor.Marshaler) error + Get(k abi.Keyer, v cbor.Unmarshaler) (bool, error) + Delete(k abi.Keyer) error + + ForEach(v cbor.Unmarshaler, fn func(key string) error) error +} + +type Array interface { + Root() (cid.Cid, error) + + Set(idx uint64, v cbor.Marshaler) error + Get(idx uint64, v cbor.Unmarshaler) (bool, error) + Delete(idx uint64) error + Length() uint64 + + ForEach(v cbor.Unmarshaler, fn func(idx int64) error) error +} diff --git a/venus-shared/actors/adt/diff_adt.go b/venus-shared/actors/adt/diff_adt.go new file mode 100644 index 0000000000..c4bfbd85a9 --- /dev/null +++ b/venus-shared/actors/adt/diff_adt.go @@ -0,0 +1,124 @@ +// FETCHED FROM LOTUS: adt/diff_adt.go + +package adt + +import ( + "bytes" + + "github.com/filecoin-project/go-state-types/abi" + typegen "github.com/whyrusleeping/cbor-gen" +) + +// AdtArrayDiff generalizes adt.Array diffing by accepting a Deferred type that can unmarshalled to its corresponding struct +// in an interface implantation. +// Add should be called when a new k,v is added to the array +// Modify should be called when a value is modified in the array +// Remove should be called when a value is removed from the array +type AdtArrayDiff interface { + Add(key uint64, val *typegen.Deferred) error + Modify(key uint64, from, to *typegen.Deferred) error + Remove(key uint64, val *typegen.Deferred) error +} + +// TODO Performance can be improved by diffing the underlying IPLD graph, e.g. https://github.com/ipfs/go-merkledag/blob/749fd8717d46b4f34c9ce08253070079c89bc56d/dagutils/diff.go#L104 +// CBOR Marshaling will likely be the largest performance bottleneck here. + +// DiffAdtArray accepts two *adt.Array's and an AdtArrayDiff implementation. It does the following: +// - All values that exist in preArr and not in curArr are passed to AdtArrayDiff.Remove() +// - All values that exist in curArr nnd not in prevArr are passed to adtArrayDiff.Add() +// - All values that exist in preArr and in curArr are passed to AdtArrayDiff.Modify() +// - It is the responsibility of AdtArrayDiff.Modify() to determine if the values it was passed have been modified. +func DiffAdtArray(preArr, curArr Array, out AdtArrayDiff) error { + notNew := make(map[int64]struct{}, curArr.Length()) + prevVal := new(typegen.Deferred) + if err := preArr.ForEach(prevVal, func(i int64) error { + curVal := new(typegen.Deferred) + found, err := curArr.Get(uint64(i), curVal) + if err != nil { + return err + } + if !found { + if err := out.Remove(uint64(i), prevVal); err != nil { + return err + } + return nil + } + + // no modification + if !bytes.Equal(prevVal.Raw, curVal.Raw) { + if err := out.Modify(uint64(i), prevVal, curVal); err != nil { + return err + } + } + notNew[i] = struct{}{} + return nil + }); err != nil { + return err + } + + curVal := new(typegen.Deferred) + return curArr.ForEach(curVal, func(i int64) error { + if _, ok := notNew[i]; ok { + return nil + } + return out.Add(uint64(i), curVal) + }) +} + +// TODO Performance can be improved by diffing the underlying IPLD graph, e.g. https://github.com/ipfs/go-merkledag/blob/749fd8717d46b4f34c9ce08253070079c89bc56d/dagutils/diff.go#L104 +// CBOR Marshaling will likely be the largest performance bottleneck here. + +// AdtMapDiff generalizes adt.Map diffing by accepting a Deferred type that can unmarshalled to its corresponding struct +// in an interface implantation. +// AsKey should return the Keyer implementation specific to the map +// Add should be called when a new k,v is added to the map +// Modify should be called when a value is modified in the map +// Remove should be called when a value is removed from the map +type AdtMapDiff interface { + AsKey(key string) (abi.Keyer, error) + Add(key string, val *typegen.Deferred) error + Modify(key string, from, to *typegen.Deferred) error + Remove(key string, val *typegen.Deferred) error +} + +func DiffAdtMap(preMap, curMap Map, out AdtMapDiff) error { + notNew := make(map[string]struct{}) + prevVal := new(typegen.Deferred) + if err := preMap.ForEach(prevVal, func(key string) error { + curVal := new(typegen.Deferred) + k, err := out.AsKey(key) + if err != nil { + return err + } + + found, err := curMap.Get(k, curVal) + if err != nil { + return err + } + if !found { + if err := out.Remove(key, prevVal); err != nil { + return err + } + return nil + } + + // no modification + if !bytes.Equal(prevVal.Raw, curVal.Raw) { + if err := out.Modify(key, prevVal, curVal); err != nil { + return err + } + } + notNew[key] = struct{}{} + return nil + }); err != nil { + return err + } + + curVal := new(typegen.Deferred) + return curMap.ForEach(curVal, func(key string) error { + if _, ok := notNew[key]; ok { + return nil + } + return out.Add(key, curVal) + }) +} diff --git a/venus-shared/actors/adt/store.go b/venus-shared/actors/adt/store.go new file mode 100644 index 0000000000..04b71797da --- /dev/null +++ b/venus-shared/actors/adt/store.go @@ -0,0 +1,19 @@ +// FETCHED FROM LOTUS: adt/store.go + +package adt + +import ( + "context" + + adt "github.com/filecoin-project/specs-actors/actors/util/adt" + cbor "github.com/ipfs/go-ipld-cbor" +) + +type Store interface { + Context() context.Context + cbor.IpldStore +} + +func WrapStore(ctx context.Context, store cbor.IpldStore) Store { + return adt.WrapStore(ctx, store) +} diff --git a/venus-shared/actors/aerrors/error.go b/venus-shared/actors/aerrors/error.go new file mode 100644 index 0000000000..df5f23a817 --- /dev/null +++ b/venus-shared/actors/aerrors/error.go @@ -0,0 +1,71 @@ +// FETCHED FROM LOTUS: aerrors/error.go + +package aerrors + +import ( + "fmt" + + "github.com/filecoin-project/go-state-types/exitcode" + "golang.org/x/xerrors" +) + +func IsFatal(err ActorError) bool { + return err != nil && err.IsFatal() +} +func RetCode(err ActorError) exitcode.ExitCode { + if err == nil { + return 0 + } + return err.RetCode() +} + +type internalActorError interface { + ActorError + FormatError(p xerrors.Printer) (next error) + Unwrap() error +} + +type ActorError interface { + error + IsFatal() bool + RetCode() exitcode.ExitCode +} + +type actorError struct { + fatal bool + retCode exitcode.ExitCode + + msg string + frame xerrors.Frame + err error +} + +func (e *actorError) IsFatal() bool { + return e.fatal +} + +func (e *actorError) RetCode() exitcode.ExitCode { + return e.retCode +} + +func (e *actorError) Error() string { + return fmt.Sprint(e) +} +func (e *actorError) Format(s fmt.State, v rune) { xerrors.FormatError(e, s, v) } +func (e *actorError) FormatError(p xerrors.Printer) (next error) { + p.Print(e.msg) + if e.fatal { + p.Print(" (FATAL)") + } else { + p.Printf(" (RetCode=%d)", e.retCode) + } + + e.frame.Format(p) + return e.err +} + +func (e *actorError) Unwrap() error { + return e.err +} + +var _ internalActorError = (*actorError)(nil) diff --git a/venus-shared/actors/aerrors/wrap.go b/venus-shared/actors/aerrors/wrap.go new file mode 100644 index 0000000000..4193628428 --- /dev/null +++ b/venus-shared/actors/aerrors/wrap.go @@ -0,0 +1,205 @@ +// FETCHED FROM LOTUS: aerrors/wrap.go + +package aerrors + +import ( + "errors" + "fmt" + + "github.com/filecoin-project/go-state-types/exitcode" + cbor "github.com/ipfs/go-ipld-cbor" + "golang.org/x/xerrors" +) + +// New creates a new non-fatal error +func New(retCode exitcode.ExitCode, message string) ActorError { + if retCode == 0 { + return &actorError{ + fatal: true, + retCode: 0, + + msg: "tried creating an error and setting RetCode to 0", + frame: xerrors.Caller(1), + err: errors.New(message), + } + } + return &actorError{ + retCode: retCode, + + msg: message, + frame: xerrors.Caller(1), + } +} + +// Newf creates a new non-fatal error +func Newf(retCode exitcode.ExitCode, format string, args ...interface{}) ActorError { + if retCode == 0 { + return &actorError{ + fatal: true, + retCode: 0, + + msg: "tried creating an error and setting RetCode to 0", + frame: xerrors.Caller(1), + err: fmt.Errorf(format, args...), + } + } + return &actorError{ + retCode: retCode, + + msg: fmt.Sprintf(format, args...), + frame: xerrors.Caller(1), + } +} + +// todo: bit hacky + +func NewfSkip(skip int, retCode exitcode.ExitCode, format string, args ...interface{}) ActorError { + if retCode == 0 { + return &actorError{ + fatal: true, + retCode: 0, + + msg: "tried creating an error and setting RetCode to 0", + frame: xerrors.Caller(skip), + err: fmt.Errorf(format, args...), + } + } + return &actorError{ + retCode: retCode, + + msg: fmt.Sprintf(format, args...), + frame: xerrors.Caller(skip), + } +} + +func Fatal(message string, args ...interface{}) ActorError { + return &actorError{ + fatal: true, + msg: message, + frame: xerrors.Caller(1), + } +} + +func Fatalf(format string, args ...interface{}) ActorError { + return &actorError{ + fatal: true, + msg: fmt.Sprintf(format, args...), + frame: xerrors.Caller(1), + } +} + +// Wrap extens chain of errors with a message +func Wrap(err ActorError, message string) ActorError { + if err == nil { + return nil + } + return &actorError{ + fatal: IsFatal(err), + retCode: RetCode(err), + + msg: message, + frame: xerrors.Caller(1), + err: err, + } +} + +// Wrapf extens chain of errors with a message +func Wrapf(err ActorError, format string, args ...interface{}) ActorError { + if err == nil { + return nil + } + return &actorError{ + fatal: IsFatal(err), + retCode: RetCode(err), + + msg: fmt.Sprintf(format, args...), + frame: xerrors.Caller(1), + err: err, + } +} + +// Absorb takes and error and makes in not fatal ActorError +func Absorb(err error, retCode exitcode.ExitCode, msg string) ActorError { + if err == nil { + return nil + } + if aerr, ok := err.(ActorError); ok && IsFatal(aerr) { + return &actorError{ + fatal: true, + retCode: 0, + + msg: "tried absorbing an error that is already a fatal error", + frame: xerrors.Caller(1), + err: err, + } + } + if retCode == 0 { + return &actorError{ + fatal: true, + retCode: 0, + + msg: "tried absorbing an error and setting RetCode to 0", + frame: xerrors.Caller(1), + err: err, + } + } + + return &actorError{ + fatal: false, + retCode: retCode, + + msg: msg, + frame: xerrors.Caller(1), + err: err, + } +} + +// Escalate takes and error and escalates it into a fatal error +func Escalate(err error, msg string) ActorError { + if err == nil { + return nil + } + return &actorError{ + fatal: true, + + msg: msg, + frame: xerrors.Caller(1), + err: err, + } +} + +func HandleExternalError(err error, msg string) ActorError { + if err == nil { + return nil + } + + if aerr, ok := err.(ActorError); ok { + return &actorError{ + fatal: IsFatal(aerr), + retCode: RetCode(aerr), + + msg: msg, + frame: xerrors.Caller(1), + err: aerr, + } + } + + if xerrors.Is(err, &cbor.SerializationError{}) { + return &actorError{ + fatal: false, + retCode: 253, + msg: msg, + frame: xerrors.Caller(1), + err: err, + } + } + + return &actorError{ + fatal: false, + retCode: 219, + + msg: msg, + frame: xerrors.Caller(1), + err: err, + } +} diff --git a/venus-shared/actors/builtin/README.md b/venus-shared/actors/builtin/README.md new file mode 100644 index 0000000000..b47dd68fed --- /dev/null +++ b/venus-shared/actors/builtin/README.md @@ -0,0 +1,31 @@ +// FETCHED FROM LOTUS: builtin/README.md + +# Actors + +This package contains shims for abstracting over different actor versions. + +## Design + +Shims in this package follow a few common design principles. + +### Structure Agnostic + +Shims interfaces defined in this package should (ideally) not change even if the +structure of the underlying data changes. For example: + +* All shims store an internal "store" object. That way, state can be moved into + a separate object without needing to add a store to the function signature. +* All functions must return an error, even if unused for now. + +### Minimal + +These interfaces should be expanded only as necessary to reduce maintenance burden. + +### Queries, not field assessors. + +When possible, functions should query the state instead of simply acting as +field assessors. These queries are more likely to remain stable across +specs-actor upgrades than specific state fields. + +Note: there is a trade-off here. Avoid implementing _complicated_ query logic +inside these shims, as it will need to be replicated in every shim. diff --git a/venus-shared/actors/builtin/account/actor.go b/venus-shared/actors/builtin/account/actor.go new file mode 100644 index 0000000000..1e1ecce9b8 --- /dev/null +++ b/venus-shared/actors/builtin/account/actor.go @@ -0,0 +1,155 @@ +// FETCHED FROM LOTUS: builtin/account/actor.go.template + +package account + +import ( + "github.com/filecoin-project/venus/venus-shared/actors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" +) + +func init() { + + builtin.RegisterActorState(builtin0.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +var Methods = builtin4.MethodsAccount + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.AccountActorCodeID: + return load0(store, act.Head) + + case builtin2.AccountActorCodeID: + return load2(store, act.Head) + + case builtin3.AccountActorCodeID: + return load3(store, act.Head) + + case builtin4.AccountActorCodeID: + return load4(store, act.Head) + + case builtin5.AccountActorCodeID: + return load5(store, act.Head) + + case builtin6.AccountActorCodeID: + return load6(store, act.Head) + + case builtin7.AccountActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, addr address.Address) (State, error) { + switch av { + + case actors.Version0: + return make0(store, addr) + + case actors.Version2: + return make2(store, addr) + + case actors.Version3: + return make3(store, addr) + + case actors.Version4: + return make4(store, addr) + + case actors.Version5: + return make5(store, addr) + + case actors.Version6: + return make6(store, addr) + + case actors.Version7: + return make7(store, addr) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.AccountActorCodeID, nil + + case actors.Version2: + return builtin2.AccountActorCodeID, nil + + case actors.Version3: + return builtin3.AccountActorCodeID, nil + + case actors.Version4: + return builtin4.AccountActorCodeID, nil + + case actors.Version5: + return builtin5.AccountActorCodeID, nil + + case actors.Version6: + return builtin6.AccountActorCodeID, nil + + case actors.Version7: + return builtin7.AccountActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + PubkeyAddress() (address.Address, error) + GetState() interface{} +} diff --git a/venus-shared/actors/builtin/account/actor.go.template b/venus-shared/actors/builtin/account/actor.go.template new file mode 100644 index 0000000000..baf5e19a4b --- /dev/null +++ b/venus-shared/actors/builtin/account/actor.go.template @@ -0,0 +1,66 @@ +// FETCHED FROM LOTUS: builtin/account/actor.go.template + +package account + +import ( + "github.com/filecoin-project/venus/venus-shared/actors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.AccountActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +var Methods = builtin4.MethodsAccount + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.AccountActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, addr address.Address) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store, addr) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.AccountActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + PubkeyAddress() (address.Address, error) + GetState() interface{} +} diff --git a/venus-shared/actors/builtin/account/state.sep.go.template b/venus-shared/actors/builtin/account/state.sep.go.template new file mode 100644 index 0000000000..b678fe3f2a --- /dev/null +++ b/venus-shared/actors/builtin/account/state.sep.go.template @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + account{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/account" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store, addr address.Address) (State, error) { + out := state{{.v}}{store: store} + out.State = account{{.v}}.State{Address:addr} + return &out, nil +} + +type state{{.v}} struct { + account{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/venus-shared/actors/builtin/account/state.v0.go b/venus-shared/actors/builtin/account/state.v0.go new file mode 100644 index 0000000000..e3f442b83f --- /dev/null +++ b/venus-shared/actors/builtin/account/state.v0.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + account0 "github.com/filecoin-project/specs-actors/actors/builtin/account" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store, addr address.Address) (State, error) { + out := state0{store: store} + out.State = account0.State{Address: addr} + return &out, nil +} + +type state0 struct { + account0.State + store adt.Store +} + +func (s *state0) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state0) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/account/state.v2.go b/venus-shared/actors/builtin/account/state.v2.go new file mode 100644 index 0000000000..27e3082740 --- /dev/null +++ b/venus-shared/actors/builtin/account/state.v2.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + account2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/account" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store, addr address.Address) (State, error) { + out := state2{store: store} + out.State = account2.State{Address: addr} + return &out, nil +} + +type state2 struct { + account2.State + store adt.Store +} + +func (s *state2) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state2) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/account/state.v3.go b/venus-shared/actors/builtin/account/state.v3.go new file mode 100644 index 0000000000..0d51da82b6 --- /dev/null +++ b/venus-shared/actors/builtin/account/state.v3.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + account3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/account" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store, addr address.Address) (State, error) { + out := state3{store: store} + out.State = account3.State{Address: addr} + return &out, nil +} + +type state3 struct { + account3.State + store adt.Store +} + +func (s *state3) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state3) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/account/state.v4.go b/venus-shared/actors/builtin/account/state.v4.go new file mode 100644 index 0000000000..20c752440f --- /dev/null +++ b/venus-shared/actors/builtin/account/state.v4.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + account4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/account" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store, addr address.Address) (State, error) { + out := state4{store: store} + out.State = account4.State{Address: addr} + return &out, nil +} + +type state4 struct { + account4.State + store adt.Store +} + +func (s *state4) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state4) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/account/state.v5.go b/venus-shared/actors/builtin/account/state.v5.go new file mode 100644 index 0000000000..a70c10aba0 --- /dev/null +++ b/venus-shared/actors/builtin/account/state.v5.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + account5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/account" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store, addr address.Address) (State, error) { + out := state5{store: store} + out.State = account5.State{Address: addr} + return &out, nil +} + +type state5 struct { + account5.State + store adt.Store +} + +func (s *state5) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state5) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/account/state.v6.go b/venus-shared/actors/builtin/account/state.v6.go new file mode 100644 index 0000000000..6dff2bc031 --- /dev/null +++ b/venus-shared/actors/builtin/account/state.v6.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + account6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/account" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store, addr address.Address) (State, error) { + out := state6{store: store} + out.State = account6.State{Address: addr} + return &out, nil +} + +type state6 struct { + account6.State + store adt.Store +} + +func (s *state6) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state6) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/account/state.v7.go b/venus-shared/actors/builtin/account/state.v7.go new file mode 100644 index 0000000000..00141f18f5 --- /dev/null +++ b/venus-shared/actors/builtin/account/state.v7.go @@ -0,0 +1,42 @@ +// FETCHED FROM LOTUS: builtin/account/state.go.template + +package account + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + account7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/account" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store, addr address.Address) (State, error) { + out := state7{store: store} + out.State = account7.State{Address: addr} + return &out, nil +} + +type state7 struct { + account7.State + store adt.Store +} + +func (s *state7) PubkeyAddress() (address.Address, error) { + return s.Address, nil +} + +func (s *state7) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/builtin.go b/venus-shared/actors/builtin/builtin.go new file mode 100644 index 0000000000..07d256662b --- /dev/null +++ b/venus-shared/actors/builtin/builtin.go @@ -0,0 +1,332 @@ +// FETCHED FROM LOTUS: builtin/builtin.go.template + +package builtin + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + smoothing0 "github.com/filecoin-project/specs-actors/actors/util/smoothing" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + smoothing2 "github.com/filecoin-project/specs-actors/v2/actors/util/smoothing" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + smoothing3 "github.com/filecoin-project/specs-actors/v3/actors/util/smoothing" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + smoothing4 "github.com/filecoin-project/specs-actors/v4/actors/util/smoothing" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + smoothing5 "github.com/filecoin-project/specs-actors/v5/actors/util/smoothing" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + smoothing6 "github.com/filecoin-project/specs-actors/v6/actors/util/smoothing" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + smoothing7 "github.com/filecoin-project/specs-actors/v7/actors/util/smoothing" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + types "github.com/filecoin-project/venus/venus-shared/chain" + + miner7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/miner" + proof7 "github.com/filecoin-project/specs-actors/v7/actors/runtime/proof" +) + +var SystemActorAddr = builtin7.SystemActorAddr +var BurntFundsActorAddr = builtin7.BurntFundsActorAddr +var CronActorAddr = builtin7.CronActorAddr +var SaftAddress = makeAddress("t0122") +var ReserveAddress = makeAddress("t090") +var RootVerifierAddress = makeAddress("t080") + +var ( + ExpectedLeadersPerEpoch = builtin7.ExpectedLeadersPerEpoch +) + +const ( + EpochDurationSeconds = builtin7.EpochDurationSeconds + EpochsInDay = builtin7.EpochsInDay + SecondsInDay = builtin7.SecondsInDay +) + +const ( + MethodSend = builtin7.MethodSend + MethodConstructor = builtin7.MethodConstructor +) + +// These are all just type aliases across actor versions. In the future, that might change +// and we might need to do something fancier. +type SectorInfo = proof7.SectorInfo +type PoStProof = proof7.PoStProof +type FilterEstimate = smoothing0.FilterEstimate + +func QAPowerForWeight(size abi.SectorSize, duration abi.ChainEpoch, dealWeight, verifiedWeight abi.DealWeight) abi.StoragePower { + return miner7.QAPowerForWeight(size, duration, dealWeight, verifiedWeight) +} + +func FromV0FilterEstimate(v0 smoothing0.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v0) //nolint:unconvert + +} + +func FromV2FilterEstimate(v2 smoothing2.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v2) + +} + +func FromV3FilterEstimate(v3 smoothing3.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v3) + +} + +func FromV4FilterEstimate(v4 smoothing4.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v4) + +} + +func FromV5FilterEstimate(v5 smoothing5.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v5) + +} + +func FromV6FilterEstimate(v6 smoothing6.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v6) + +} + +func FromV7FilterEstimate(v7 smoothing7.FilterEstimate) FilterEstimate { + + return (FilterEstimate)(v7) + +} + +type ActorStateLoader func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) + +var ActorStateLoaders = make(map[cid.Cid]ActorStateLoader) + +func RegisterActorState(code cid.Cid, loader ActorStateLoader) { + ActorStateLoaders[code] = loader +} + +func Load(store adt.Store, act *types.Actor) (cbor.Marshaler, error) { + loader, found := ActorStateLoaders[act.Code] + if !found { + return nil, xerrors.Errorf("unknown actor code %s", act.Code) + } + return loader(store, act.Head) +} + +func ActorNameByCode(c cid.Cid) string { + switch { + + case builtin0.IsBuiltinActor(c): + return builtin0.ActorNameByCode(c) + + case builtin2.IsBuiltinActor(c): + return builtin2.ActorNameByCode(c) + + case builtin3.IsBuiltinActor(c): + return builtin3.ActorNameByCode(c) + + case builtin4.IsBuiltinActor(c): + return builtin4.ActorNameByCode(c) + + case builtin5.IsBuiltinActor(c): + return builtin5.ActorNameByCode(c) + + case builtin6.IsBuiltinActor(c): + return builtin6.ActorNameByCode(c) + + case builtin7.IsBuiltinActor(c): + return builtin7.ActorNameByCode(c) + + default: + return "" + } +} + +func IsBuiltinActor(c cid.Cid) bool { + + if builtin0.IsBuiltinActor(c) { + return true + } + + if builtin2.IsBuiltinActor(c) { + return true + } + + if builtin3.IsBuiltinActor(c) { + return true + } + + if builtin4.IsBuiltinActor(c) { + return true + } + + if builtin5.IsBuiltinActor(c) { + return true + } + + if builtin6.IsBuiltinActor(c) { + return true + } + + if builtin7.IsBuiltinActor(c) { + return true + } + + return false +} + +func IsAccountActor(c cid.Cid) bool { + + if c == builtin0.AccountActorCodeID { + return true + } + + if c == builtin2.AccountActorCodeID { + return true + } + + if c == builtin3.AccountActorCodeID { + return true + } + + if c == builtin4.AccountActorCodeID { + return true + } + + if c == builtin5.AccountActorCodeID { + return true + } + + if c == builtin6.AccountActorCodeID { + return true + } + + if c == builtin7.AccountActorCodeID { + return true + } + + return false +} + +func IsStorageMinerActor(c cid.Cid) bool { + + if c == builtin0.StorageMinerActorCodeID { + return true + } + + if c == builtin2.StorageMinerActorCodeID { + return true + } + + if c == builtin3.StorageMinerActorCodeID { + return true + } + + if c == builtin4.StorageMinerActorCodeID { + return true + } + + if c == builtin5.StorageMinerActorCodeID { + return true + } + + if c == builtin6.StorageMinerActorCodeID { + return true + } + + if c == builtin7.StorageMinerActorCodeID { + return true + } + + return false +} + +func IsMultisigActor(c cid.Cid) bool { + + if c == builtin0.MultisigActorCodeID { + return true + } + + if c == builtin2.MultisigActorCodeID { + return true + } + + if c == builtin3.MultisigActorCodeID { + return true + } + + if c == builtin4.MultisigActorCodeID { + return true + } + + if c == builtin5.MultisigActorCodeID { + return true + } + + if c == builtin6.MultisigActorCodeID { + return true + } + + if c == builtin7.MultisigActorCodeID { + return true + } + + return false +} + +func IsPaymentChannelActor(c cid.Cid) bool { + + if c == builtin0.PaymentChannelActorCodeID { + return true + } + + if c == builtin2.PaymentChannelActorCodeID { + return true + } + + if c == builtin3.PaymentChannelActorCodeID { + return true + } + + if c == builtin4.PaymentChannelActorCodeID { + return true + } + + if c == builtin5.PaymentChannelActorCodeID { + return true + } + + if c == builtin6.PaymentChannelActorCodeID { + return true + } + + if c == builtin7.PaymentChannelActorCodeID { + return true + } + + return false +} + +func makeAddress(addr string) address.Address { + ret, err := address.NewFromString(addr) + if err != nil { + panic(err) + } + + return ret +} diff --git a/venus-shared/actors/builtin/builtin.go.template b/venus-shared/actors/builtin/builtin.go.template new file mode 100644 index 0000000000..95a7a22426 --- /dev/null +++ b/venus-shared/actors/builtin/builtin.go.template @@ -0,0 +1,146 @@ +// FETCHED FROM LOTUS: builtin/builtin.go.template + +package builtin + +import ( + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + {{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" + smoothing{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/util/smoothing" + {{end}} + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + types "github.com/filecoin-project/venus/venus-shared/chain" + + miner{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/builtin/miner" + proof{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/runtime/proof" +) + +var SystemActorAddr = builtin{{.latestVersion}}.SystemActorAddr +var BurntFundsActorAddr = builtin{{.latestVersion}}.BurntFundsActorAddr +var CronActorAddr = builtin{{.latestVersion}}.CronActorAddr +var SaftAddress = makeAddress("t0122") +var ReserveAddress = makeAddress("t090") +var RootVerifierAddress = makeAddress("t080") + +var ( + ExpectedLeadersPerEpoch = builtin{{.latestVersion}}.ExpectedLeadersPerEpoch +) + +const ( + EpochDurationSeconds = builtin{{.latestVersion}}.EpochDurationSeconds + EpochsInDay = builtin{{.latestVersion}}.EpochsInDay + SecondsInDay = builtin{{.latestVersion}}.SecondsInDay +) + +const ( + MethodSend = builtin{{.latestVersion}}.MethodSend + MethodConstructor = builtin{{.latestVersion}}.MethodConstructor +) + +// These are all just type aliases across actor versions. In the future, that might change +// and we might need to do something fancier. +type SectorInfo = proof{{.latestVersion}}.SectorInfo +type PoStProof = proof{{.latestVersion}}.PoStProof +type FilterEstimate = smoothing0.FilterEstimate + +func QAPowerForWeight(size abi.SectorSize, duration abi.ChainEpoch, dealWeight, verifiedWeight abi.DealWeight) abi.StoragePower { + return miner{{.latestVersion}}.QAPowerForWeight(size, duration, dealWeight, verifiedWeight) +} + +{{range .versions}} + func FromV{{.}}FilterEstimate(v{{.}} smoothing{{.}}.FilterEstimate) FilterEstimate { + {{if (eq . 0)}} + return (FilterEstimate)(v{{.}}) //nolint:unconvert + {{else}} + return (FilterEstimate)(v{{.}}) + {{end}} + } +{{end}} + +type ActorStateLoader func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) + +var ActorStateLoaders = make(map[cid.Cid]ActorStateLoader) + +func RegisterActorState(code cid.Cid, loader ActorStateLoader) { + ActorStateLoaders[code] = loader +} + +func Load(store adt.Store, act *types.Actor) (cbor.Marshaler, error) { + loader, found := ActorStateLoaders[act.Code] + if !found { + return nil, xerrors.Errorf("unknown actor code %s", act.Code) + } + return loader(store, act.Head) +} + +func ActorNameByCode(c cid.Cid) string { + switch { + {{range .versions}} + case builtin{{.}}.IsBuiltinActor(c): + return builtin{{.}}.ActorNameByCode(c) + {{end}} + default: + return "" + } +} + +func IsBuiltinActor(c cid.Cid) bool { + {{range .versions}} + if builtin{{.}}.IsBuiltinActor(c) { + return true + } + {{end}} + return false +} + +func IsAccountActor(c cid.Cid) bool { + {{range .versions}} + if c == builtin{{.}}.AccountActorCodeID { + return true + } + {{end}} + return false +} + +func IsStorageMinerActor(c cid.Cid) bool { + {{range .versions}} + if c == builtin{{.}}.StorageMinerActorCodeID { + return true + } + {{end}} + return false +} + +func IsMultisigActor(c cid.Cid) bool { + {{range .versions}} + if c == builtin{{.}}.MultisigActorCodeID { + return true + } + {{end}} + return false +} + +func IsPaymentChannelActor(c cid.Cid) bool { + {{range .versions}} + if c == builtin{{.}}.PaymentChannelActorCodeID { + return true + } + {{end}} + return false +} + +func makeAddress(addr string) address.Address { + ret, err := address.NewFromString(addr) + if err != nil { + panic(err) + } + + return ret +} diff --git a/venus-shared/actors/builtin/cron/actor.go b/venus-shared/actors/builtin/cron/actor.go new file mode 100644 index 0000000000..cd8c92e309 --- /dev/null +++ b/venus-shared/actors/builtin/cron/actor.go @@ -0,0 +1,90 @@ +// FETCHED FROM LOTUS: builtin/cron/actor.go.template + +package cron + +import ( + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" +) + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.CronActorCodeID, nil + + case actors.Version2: + return builtin2.CronActorCodeID, nil + + case actors.Version3: + return builtin3.CronActorCodeID, nil + + case actors.Version4: + return builtin4.CronActorCodeID, nil + + case actors.Version5: + return builtin5.CronActorCodeID, nil + + case actors.Version6: + return builtin6.CronActorCodeID, nil + + case actors.Version7: + return builtin7.CronActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +var ( + Address = builtin7.CronActorAddr + Methods = builtin7.MethodsCron +) + +type State interface { + GetState() interface{} +} diff --git a/venus-shared/actors/builtin/cron/actor.go.template b/venus-shared/actors/builtin/cron/actor.go.template new file mode 100644 index 0000000000..974a0fa561 --- /dev/null +++ b/venus-shared/actors/builtin/cron/actor.go.template @@ -0,0 +1,44 @@ +// FETCHED FROM LOTUS: builtin/cron/actor.go.template + +package cron + +import ( + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "golang.org/x/xerrors" + "github.com/ipfs/go-cid" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.CronActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +var ( + Address = builtin{{.latestVersion}}.CronActorAddr + Methods = builtin{{.latestVersion}}.MethodsCron +) + + +type State interface { + GetState() interface{} +} diff --git a/venus-shared/actors/builtin/cron/state.sep.go.template b/venus-shared/actors/builtin/cron/state.sep.go.template new file mode 100644 index 0000000000..b1e14ce7bf --- /dev/null +++ b/venus-shared/actors/builtin/cron/state.sep.go.template @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + cron{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/cron" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + out.State = *cron{{.v}}.ConstructState(cron{{.v}}.BuiltInEntries()) + return &out, nil +} + +type state{{.v}} struct { + cron{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/venus-shared/actors/builtin/cron/state.v0.go b/venus-shared/actors/builtin/cron/state.v0.go new file mode 100644 index 0000000000..ba0f37d5b6 --- /dev/null +++ b/venus-shared/actors/builtin/cron/state.v0.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + cron0 "github.com/filecoin-project/specs-actors/actors/builtin/cron" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + out.State = *cron0.ConstructState(cron0.BuiltInEntries()) + return &out, nil +} + +type state0 struct { + cron0.State + store adt.Store +} + +func (s *state0) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/cron/state.v2.go b/venus-shared/actors/builtin/cron/state.v2.go new file mode 100644 index 0000000000..aff1f50282 --- /dev/null +++ b/venus-shared/actors/builtin/cron/state.v2.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + cron2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/cron" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + out.State = *cron2.ConstructState(cron2.BuiltInEntries()) + return &out, nil +} + +type state2 struct { + cron2.State + store adt.Store +} + +func (s *state2) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/cron/state.v3.go b/venus-shared/actors/builtin/cron/state.v3.go new file mode 100644 index 0000000000..b6a4a96121 --- /dev/null +++ b/venus-shared/actors/builtin/cron/state.v3.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + cron3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/cron" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + out.State = *cron3.ConstructState(cron3.BuiltInEntries()) + return &out, nil +} + +type state3 struct { + cron3.State + store adt.Store +} + +func (s *state3) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/cron/state.v4.go b/venus-shared/actors/builtin/cron/state.v4.go new file mode 100644 index 0000000000..0cd6d2c75e --- /dev/null +++ b/venus-shared/actors/builtin/cron/state.v4.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + cron4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/cron" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + out.State = *cron4.ConstructState(cron4.BuiltInEntries()) + return &out, nil +} + +type state4 struct { + cron4.State + store adt.Store +} + +func (s *state4) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/cron/state.v5.go b/venus-shared/actors/builtin/cron/state.v5.go new file mode 100644 index 0000000000..12cf83a649 --- /dev/null +++ b/venus-shared/actors/builtin/cron/state.v5.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + cron5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/cron" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + out.State = *cron5.ConstructState(cron5.BuiltInEntries()) + return &out, nil +} + +type state5 struct { + cron5.State + store adt.Store +} + +func (s *state5) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/cron/state.v6.go b/venus-shared/actors/builtin/cron/state.v6.go new file mode 100644 index 0000000000..7fe9cf8a2a --- /dev/null +++ b/venus-shared/actors/builtin/cron/state.v6.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + cron6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/cron" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + out.State = *cron6.ConstructState(cron6.BuiltInEntries()) + return &out, nil +} + +type state6 struct { + cron6.State + store adt.Store +} + +func (s *state6) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/cron/state.v7.go b/venus-shared/actors/builtin/cron/state.v7.go new file mode 100644 index 0000000000..a1352ab5c9 --- /dev/null +++ b/venus-shared/actors/builtin/cron/state.v7.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/cron/state.go.template + +package cron + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + cron7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/cron" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + out.State = *cron7.ConstructState(cron7.BuiltInEntries()) + return &out, nil +} + +type state7 struct { + cron7.State + store adt.Store +} + +func (s *state7) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/init/actor.go b/venus-shared/actors/builtin/init/actor.go new file mode 100644 index 0000000000..0e28713421 --- /dev/null +++ b/venus-shared/actors/builtin/init/actor.go @@ -0,0 +1,179 @@ +// FETCHED FROM LOTUS: builtin/init/actor.go.template + +package init + +import ( + "github.com/filecoin-project/venus/venus-shared/actors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" +) + +func init() { + + builtin.RegisterActorState(builtin0.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +var ( + Address = builtin7.InitActorAddr + Methods = builtin7.MethodsInit +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.InitActorCodeID: + return load0(store, act.Head) + + case builtin2.InitActorCodeID: + return load2(store, act.Head) + + case builtin3.InitActorCodeID: + return load3(store, act.Head) + + case builtin4.InitActorCodeID: + return load4(store, act.Head) + + case builtin5.InitActorCodeID: + return load5(store, act.Head) + + case builtin6.InitActorCodeID: + return load6(store, act.Head) + + case builtin7.InitActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, networkName string) (State, error) { + switch av { + + case actors.Version0: + return make0(store, networkName) + + case actors.Version2: + return make2(store, networkName) + + case actors.Version3: + return make3(store, networkName) + + case actors.Version4: + return make4(store, networkName) + + case actors.Version5: + return make5(store, networkName) + + case actors.Version6: + return make6(store, networkName) + + case actors.Version7: + return make7(store, networkName) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.InitActorCodeID, nil + + case actors.Version2: + return builtin2.InitActorCodeID, nil + + case actors.Version3: + return builtin3.InitActorCodeID, nil + + case actors.Version4: + return builtin4.InitActorCodeID, nil + + case actors.Version5: + return builtin5.InitActorCodeID, nil + + case actors.Version6: + return builtin6.InitActorCodeID, nil + + case actors.Version7: + return builtin7.InitActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + ResolveAddress(address address.Address) (address.Address, bool, error) + MapAddressToNewID(address address.Address) (address.Address, error) + NetworkName() (string, error) + + ForEachActor(func(id abi.ActorID, address address.Address) error) error + + // Remove exists to support tooling that manipulates state for testing. + // It should not be used in production code, as init actor entries are + // immutable. + Remove(addrs ...address.Address) error + + // Sets the network's name. This should only be used on upgrade/fork. + SetNetworkName(name string) error + + // Sets the next ID for the init actor. This should only be used for testing. + SetNextID(id abi.ActorID) error + + // Sets the address map for the init actor. This should only be used for testing. + SetAddressMap(mcid cid.Cid) error + + AddressMap() (adt.Map, error) + GetState() interface{} +} diff --git a/venus-shared/actors/builtin/init/actor.go.template b/venus-shared/actors/builtin/init/actor.go.template new file mode 100644 index 0000000000..1e77072aef --- /dev/null +++ b/venus-shared/actors/builtin/init/actor.go.template @@ -0,0 +1,91 @@ +// FETCHED FROM LOTUS: builtin/init/actor.go.template + +package init + +import ( + "github.com/filecoin-project/venus/venus-shared/actors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" + +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.InitActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +var ( + Address = builtin{{.latestVersion}}.InitActorAddr + Methods = builtin{{.latestVersion}}.MethodsInit +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.InitActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, networkName string) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store, networkName) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.InitActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + ResolveAddress(address address.Address) (address.Address, bool, error) + MapAddressToNewID(address address.Address) (address.Address, error) + NetworkName() (string, error) + + ForEachActor(func(id abi.ActorID, address address.Address) error) error + + // Remove exists to support tooling that manipulates state for testing. + // It should not be used in production code, as init actor entries are + // immutable. + Remove(addrs ...address.Address) error + + // Sets the network's name. This should only be used on upgrade/fork. + SetNetworkName(name string) error + + // Sets the next ID for the init actor. This should only be used for testing. + SetNextID(id abi.ActorID) error + + // Sets the address map for the init actor. This should only be used for testing. + SetAddressMap(mcid cid.Cid) error + + AddressMap() (adt.Map, error) + GetState() interface{} +} diff --git a/venus-shared/actors/builtin/init/diff.go b/venus-shared/actors/builtin/init/diff.go new file mode 100644 index 0000000000..a11dbef2d9 --- /dev/null +++ b/venus-shared/actors/builtin/init/diff.go @@ -0,0 +1,154 @@ +// FETCHED FROM LOTUS: builtin/init/diff.go + +package init + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + typegen "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" +) + +func DiffAddressMap(pre, cur State) (*AddressMapChanges, error) { + prem, err := pre.AddressMap() + if err != nil { + return nil, err + } + + curm, err := cur.AddressMap() + if err != nil { + return nil, err + } + + preRoot, err := prem.Root() + if err != nil { + return nil, err + } + + curRoot, err := curm.Root() + if err != nil { + return nil, err + } + + results := new(AddressMapChanges) + // no change. + if curRoot.Equals(preRoot) { + return results, nil + } + + err = adt.DiffAdtMap(prem, curm, &addressMapDiffer{results, pre, cur}) + if err != nil { + return nil, err + } + + return results, nil +} + +type addressMapDiffer struct { + Results *AddressMapChanges + pre, adter State +} + +type AddressMapChanges struct { + Added []AddressPair + Modified []AddressChange + Removed []AddressPair +} + +func (i *addressMapDiffer) AsKey(key string) (abi.Keyer, error) { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return nil, err + } + return abi.AddrKey(addr), nil +} + +func (i *addressMapDiffer) Add(key string, val *typegen.Deferred) error { + pkAddr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + id := new(typegen.CborInt) + if err := id.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return err + } + idAddr, err := address.NewIDAddress(uint64(*id)) + if err != nil { + return err + } + i.Results.Added = append(i.Results.Added, AddressPair{ + ID: idAddr, + PK: pkAddr, + }) + return nil +} + +func (i *addressMapDiffer) Modify(key string, from, to *typegen.Deferred) error { + pkAddr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + + fromID := new(typegen.CborInt) + if err := fromID.UnmarshalCBOR(bytes.NewReader(from.Raw)); err != nil { + return err + } + fromIDAddr, err := address.NewIDAddress(uint64(*fromID)) + if err != nil { + return err + } + + toID := new(typegen.CborInt) + if err := toID.UnmarshalCBOR(bytes.NewReader(to.Raw)); err != nil { + return err + } + toIDAddr, err := address.NewIDAddress(uint64(*toID)) + if err != nil { + return err + } + + i.Results.Modified = append(i.Results.Modified, AddressChange{ + From: AddressPair{ + ID: fromIDAddr, + PK: pkAddr, + }, + To: AddressPair{ + ID: toIDAddr, + PK: pkAddr, + }, + }) + return nil +} + +func (i *addressMapDiffer) Remove(key string, val *typegen.Deferred) error { + pkAddr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + id := new(typegen.CborInt) + if err := id.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return err + } + idAddr, err := address.NewIDAddress(uint64(*id)) + if err != nil { + return err + } + i.Results.Removed = append(i.Results.Removed, AddressPair{ + ID: idAddr, + PK: pkAddr, + }) + return nil +} + +type AddressChange struct { + From AddressPair + To AddressPair +} + +type AddressPair struct { + ID address.Address + PK address.Address +} diff --git a/venus-shared/actors/builtin/init/state.sep.go.template b/venus-shared/actors/builtin/init/state.sep.go.template new file mode 100644 index 0000000000..b36e67639e --- /dev/null +++ b/venus-shared/actors/builtin/init/state.sep.go.template @@ -0,0 +1,125 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + +{{if (ge .v 3)}} + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" +{{end}} + + init{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/init" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store, networkName string) (State, error) { + out := state{{.v}}{store: store} + {{if (le .v 2)}} + mr, err := adt{{.v}}.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *init{{.v}}.ConstructState(mr, networkName) + {{else}} + s, err := init{{.v}}.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + {{end}} + return &out, nil +} + +type state{{.v}} struct { + init{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state{{.v}}) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state{{.v}}) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt{{.v}}.AsMap(s.store, s.State.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state{{.v}}) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state{{.v}}) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state{{.v}}) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state{{.v}}) Remove(addrs ...address.Address) (err error) { + m, err := adt{{.v}}.AsMap(s.store, s.State.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state{{.v}}) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state{{.v}}) AddressMap() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.State.AddressMap{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/venus-shared/actors/builtin/init/state.v0.go b/venus-shared/actors/builtin/init/state.v0.go new file mode 100644 index 0000000000..185b572199 --- /dev/null +++ b/venus-shared/actors/builtin/init/state.v0.go @@ -0,0 +1,113 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + init0 "github.com/filecoin-project/specs-actors/actors/builtin/init" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store, networkName string) (State, error) { + out := state0{store: store} + + mr, err := adt0.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *init0.ConstructState(mr, networkName) + + return &out, nil +} + +type state0 struct { + init0.State + store adt.Store +} + +func (s *state0) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state0) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state0) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt0.AsMap(s.store, s.State.AddressMap) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state0) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state0) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state0) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state0) Remove(addrs ...address.Address) (err error) { + m, err := adt0.AsMap(s.store, s.State.AddressMap) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state0) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state0) AddressMap() (adt.Map, error) { + return adt0.AsMap(s.store, s.State.AddressMap) +} + +func (s *state0) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/init/state.v2.go b/venus-shared/actors/builtin/init/state.v2.go new file mode 100644 index 0000000000..d2052f395c --- /dev/null +++ b/venus-shared/actors/builtin/init/state.v2.go @@ -0,0 +1,113 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store, networkName string) (State, error) { + out := state2{store: store} + + mr, err := adt2.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *init2.ConstructState(mr, networkName) + + return &out, nil +} + +type state2 struct { + init2.State + store adt.Store +} + +func (s *state2) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state2) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state2) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt2.AsMap(s.store, s.State.AddressMap) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state2) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state2) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state2) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state2) Remove(addrs ...address.Address) (err error) { + m, err := adt2.AsMap(s.store, s.State.AddressMap) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state2) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state2) AddressMap() (adt.Map, error) { + return adt2.AsMap(s.store, s.State.AddressMap) +} + +func (s *state2) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/init/state.v3.go b/venus-shared/actors/builtin/init/state.v3.go new file mode 100644 index 0000000000..709875249e --- /dev/null +++ b/venus-shared/actors/builtin/init/state.v3.go @@ -0,0 +1,115 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + init3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/init" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store, networkName string) (State, error) { + out := state3{store: store} + + s, err := init3.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state3 struct { + init3.State + store adt.Store +} + +func (s *state3) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state3) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state3) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt3.AsMap(s.store, s.State.AddressMap, builtin3.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state3) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state3) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state3) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state3) Remove(addrs ...address.Address) (err error) { + m, err := adt3.AsMap(s.store, s.State.AddressMap, builtin3.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state3) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state3) AddressMap() (adt.Map, error) { + return adt3.AsMap(s.store, s.State.AddressMap, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/init/state.v4.go b/venus-shared/actors/builtin/init/state.v4.go new file mode 100644 index 0000000000..fdb333cfdd --- /dev/null +++ b/venus-shared/actors/builtin/init/state.v4.go @@ -0,0 +1,115 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + init4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/init" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store, networkName string) (State, error) { + out := state4{store: store} + + s, err := init4.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state4 struct { + init4.State + store adt.Store +} + +func (s *state4) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state4) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state4) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt4.AsMap(s.store, s.State.AddressMap, builtin4.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state4) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state4) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state4) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state4) Remove(addrs ...address.Address) (err error) { + m, err := adt4.AsMap(s.store, s.State.AddressMap, builtin4.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state4) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state4) AddressMap() (adt.Map, error) { + return adt4.AsMap(s.store, s.State.AddressMap, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/init/state.v5.go b/venus-shared/actors/builtin/init/state.v5.go new file mode 100644 index 0000000000..0251b64c2f --- /dev/null +++ b/venus-shared/actors/builtin/init/state.v5.go @@ -0,0 +1,115 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + init5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/init" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store, networkName string) (State, error) { + out := state5{store: store} + + s, err := init5.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state5 struct { + init5.State + store adt.Store +} + +func (s *state5) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state5) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state5) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt5.AsMap(s.store, s.State.AddressMap, builtin5.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state5) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state5) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state5) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state5) Remove(addrs ...address.Address) (err error) { + m, err := adt5.AsMap(s.store, s.State.AddressMap, builtin5.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state5) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state5) AddressMap() (adt.Map, error) { + return adt5.AsMap(s.store, s.State.AddressMap, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/init/state.v6.go b/venus-shared/actors/builtin/init/state.v6.go new file mode 100644 index 0000000000..293ef84e39 --- /dev/null +++ b/venus-shared/actors/builtin/init/state.v6.go @@ -0,0 +1,115 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + init6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/init" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store, networkName string) (State, error) { + out := state6{store: store} + + s, err := init6.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state6 struct { + init6.State + store adt.Store +} + +func (s *state6) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state6) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state6) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt6.AsMap(s.store, s.State.AddressMap, builtin6.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state6) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state6) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state6) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state6) Remove(addrs ...address.Address) (err error) { + m, err := adt6.AsMap(s.store, s.State.AddressMap, builtin6.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state6) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state6) AddressMap() (adt.Map, error) { + return adt6.AsMap(s.store, s.State.AddressMap, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/init/state.v7.go b/venus-shared/actors/builtin/init/state.v7.go new file mode 100644 index 0000000000..d5d465bffd --- /dev/null +++ b/venus-shared/actors/builtin/init/state.v7.go @@ -0,0 +1,115 @@ +// FETCHED FROM LOTUS: builtin/init/state.go.template + +package init + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + init7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/init" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store, networkName string) (State, error) { + out := state7{store: store} + + s, err := init7.ConstructState(store, networkName) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state7 struct { + init7.State + store adt.Store +} + +func (s *state7) ResolveAddress(address address.Address) (address.Address, bool, error) { + return s.State.ResolveAddress(s.store, address) +} + +func (s *state7) MapAddressToNewID(address address.Address) (address.Address, error) { + return s.State.MapAddressToNewID(s.store, address) +} + +func (s *state7) ForEachActor(cb func(id abi.ActorID, address address.Address) error) error { + addrs, err := adt7.AsMap(s.store, s.State.AddressMap, builtin7.DefaultHamtBitwidth) + if err != nil { + return err + } + var actorID cbg.CborInt + return addrs.ForEach(&actorID, func(key string) error { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(abi.ActorID(actorID), addr) + }) +} + +func (s *state7) NetworkName() (string, error) { + return string(s.State.NetworkName), nil +} + +func (s *state7) SetNetworkName(name string) error { + s.State.NetworkName = name + return nil +} + +func (s *state7) SetNextID(id abi.ActorID) error { + s.State.NextID = id + return nil +} + +func (s *state7) Remove(addrs ...address.Address) (err error) { + m, err := adt7.AsMap(s.store, s.State.AddressMap, builtin7.DefaultHamtBitwidth) + if err != nil { + return err + } + for _, addr := range addrs { + if err = m.Delete(abi.AddrKey(addr)); err != nil { + return xerrors.Errorf("failed to delete entry for address: %s; err: %w", addr, err) + } + } + amr, err := m.Root() + if err != nil { + return xerrors.Errorf("failed to get address map root: %w", err) + } + s.State.AddressMap = amr + return nil +} + +func (s *state7) SetAddressMap(mcid cid.Cid) error { + s.State.AddressMap = mcid + return nil +} + +func (s *state7) AddressMap() (adt.Map, error) { + return adt7.AsMap(s.store, s.State.AddressMap, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/market/actor.go b/venus-shared/actors/builtin/market/actor.go new file mode 100644 index 0000000000..a7aa665b48 --- /dev/null +++ b/venus-shared/actors/builtin/market/actor.go @@ -0,0 +1,313 @@ +// FETCHED FROM LOTUS: builtin/market/actor.go.template + +package market + +import ( + "github.com/filecoin-project/go-state-types/network" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func init() { + + builtin.RegisterActorState(builtin0.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +var ( + Address = builtin7.StorageMarketActorAddr + Methods = builtin7.MethodsMarket +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.StorageMarketActorCodeID: + return load0(store, act.Head) + + case builtin2.StorageMarketActorCodeID: + return load2(store, act.Head) + + case builtin3.StorageMarketActorCodeID: + return load3(store, act.Head) + + case builtin4.StorageMarketActorCodeID: + return load4(store, act.Head) + + case builtin5.StorageMarketActorCodeID: + return load5(store, act.Head) + + case builtin6.StorageMarketActorCodeID: + return load6(store, act.Head) + + case builtin7.StorageMarketActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.StorageMarketActorCodeID, nil + + case actors.Version2: + return builtin2.StorageMarketActorCodeID, nil + + case actors.Version3: + return builtin3.StorageMarketActorCodeID, nil + + case actors.Version4: + return builtin4.StorageMarketActorCodeID, nil + + case actors.Version5: + return builtin5.StorageMarketActorCodeID, nil + + case actors.Version6: + return builtin6.StorageMarketActorCodeID, nil + + case actors.Version7: + return builtin7.StorageMarketActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + BalancesChanged(State) (bool, error) + EscrowTable() (BalanceTable, error) + LockedTable() (BalanceTable, error) + TotalLocked() (abi.TokenAmount, error) + StatesChanged(State) (bool, error) + States() (DealStates, error) + ProposalsChanged(State) (bool, error) + Proposals() (DealProposals, error) + VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, + ) (weight, verifiedWeight abi.DealWeight, err error) + NextID() (abi.DealID, error) + GetState() interface{} +} + +type BalanceTable interface { + ForEach(cb func(address.Address, abi.TokenAmount) error) error + Get(key address.Address) (abi.TokenAmount, error) +} + +type DealStates interface { + ForEach(cb func(id abi.DealID, ds DealState) error) error + Get(id abi.DealID) (*DealState, bool, error) + + array() adt.Array + decode(*cbg.Deferred) (*DealState, error) +} + +type DealProposals interface { + ForEach(cb func(id abi.DealID, dp DealProposal) error) error + Get(id abi.DealID) (*DealProposal, bool, error) + + array() adt.Array + decode(*cbg.Deferred) (*DealProposal, error) +} + +type PublishStorageDealsParams = market0.PublishStorageDealsParams + +type PublishStorageDealsReturn interface { + DealIDs() ([]abi.DealID, error) + // Note that this index is based on the batch of deals that were published, NOT the DealID + IsDealValid(index uint64) (bool, error) +} + +func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStorageDealsReturn, error) { + av, err := actors.VersionForNetwork(nv) + if err != nil { + return nil, err + } + + switch av { + + case actors.Version0: + return decodePublishStorageDealsReturn0(b) + + case actors.Version2: + return decodePublishStorageDealsReturn2(b) + + case actors.Version3: + return decodePublishStorageDealsReturn3(b) + + case actors.Version4: + return decodePublishStorageDealsReturn4(b) + + case actors.Version5: + return decodePublishStorageDealsReturn5(b) + + case actors.Version6: + return decodePublishStorageDealsReturn6(b) + + case actors.Version7: + return decodePublishStorageDealsReturn7(b) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +type VerifyDealsForActivationParams = market0.VerifyDealsForActivationParams +type WithdrawBalanceParams = market0.WithdrawBalanceParams + +type ClientDealProposal = market0.ClientDealProposal + +type DealState struct { + SectorStartEpoch abi.ChainEpoch // -1 if not yet included in proven sector + LastUpdatedEpoch abi.ChainEpoch // -1 if deal state never updated + SlashEpoch abi.ChainEpoch // -1 if deal never slashed +} + +type DealProposal struct { + PieceCID cid.Cid + PieceSize abi.PaddedPieceSize + VerifiedDeal bool + Client address.Address + Provider address.Address + Label string + StartEpoch abi.ChainEpoch + EndEpoch abi.ChainEpoch + StoragePricePerEpoch abi.TokenAmount + ProviderCollateral abi.TokenAmount + ClientCollateral abi.TokenAmount +} + +type DealStateChanges struct { + Added []DealIDState + Modified []DealStateChange + Removed []DealIDState +} + +type DealIDState struct { + ID abi.DealID + Deal DealState +} + +// DealStateChange is a change in deal state from -> to +type DealStateChange struct { + ID abi.DealID + From *DealState + To *DealState +} + +type DealProposalChanges struct { + Added []ProposalIDState + Removed []ProposalIDState +} + +type ProposalIDState struct { + ID abi.DealID + Proposal DealProposal +} + +func EmptyDealState() *DealState { + return &DealState{ + SectorStartEpoch: -1, + SlashEpoch: -1, + LastUpdatedEpoch: -1, + } +} + +// returns the earned fees and pending fees for a given deal +func (deal DealProposal) GetDealFees(height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { + tf := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(deal.EndEpoch-deal.StartEpoch))) + + ef := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(height-deal.StartEpoch))) + if ef.LessThan(big.Zero()) { + ef = big.Zero() + } + + if ef.GreaterThan(tf) { + ef = tf + } + + return ef, big.Sub(tf, ef) +} diff --git a/venus-shared/actors/builtin/market/actor.go.template b/venus-shared/actors/builtin/market/actor.go.template new file mode 100644 index 0000000000..06db86f169 --- /dev/null +++ b/venus-shared/actors/builtin/market/actor.go.template @@ -0,0 +1,206 @@ +// FETCHED FROM LOTUS: builtin/market/actor.go.template + +package market + +import ( + "github.com/filecoin-project/go-state-types/network" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.StorageMarketActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +var ( + Address = builtin{{.latestVersion}}.StorageMarketActorAddr + Methods = builtin{{.latestVersion}}.MethodsMarket +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.StorageMarketActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.StorageMarketActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + BalancesChanged(State) (bool, error) + EscrowTable() (BalanceTable, error) + LockedTable() (BalanceTable, error) + TotalLocked() (abi.TokenAmount, error) + StatesChanged(State) (bool, error) + States() (DealStates, error) + ProposalsChanged(State) (bool, error) + Proposals() (DealProposals, error) + VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, + ) (weight, verifiedWeight abi.DealWeight, err error) + NextID() (abi.DealID, error) + GetState() interface{} +} + +type BalanceTable interface { + ForEach(cb func(address.Address, abi.TokenAmount) error) error + Get(key address.Address) (abi.TokenAmount, error) +} + +type DealStates interface { + ForEach(cb func(id abi.DealID, ds DealState) error) error + Get(id abi.DealID) (*DealState, bool, error) + + array() adt.Array + decode(*cbg.Deferred) (*DealState, error) +} + +type DealProposals interface { + ForEach(cb func(id abi.DealID, dp DealProposal) error) error + Get(id abi.DealID) (*DealProposal, bool, error) + + array() adt.Array + decode(*cbg.Deferred) (*DealProposal, error) +} + +type PublishStorageDealsParams = market0.PublishStorageDealsParams + +type PublishStorageDealsReturn interface { + DealIDs() ([]abi.DealID, error) + // Note that this index is based on the batch of deals that were published, NOT the DealID + IsDealValid(index uint64) (bool, error) +} + +func DecodePublishStorageDealsReturn(b []byte, nv network.Version) (PublishStorageDealsReturn, error) { + av, err := actors.VersionForNetwork(nv) + if err != nil { + return nil, err + } + + switch av { +{{range .versions}} + case actors.Version{{.}}: + return decodePublishStorageDealsReturn{{.}}(b) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +type VerifyDealsForActivationParams = market0.VerifyDealsForActivationParams +type WithdrawBalanceParams = market0.WithdrawBalanceParams + +type ClientDealProposal = market0.ClientDealProposal + +type DealState struct { + SectorStartEpoch abi.ChainEpoch // -1 if not yet included in proven sector + LastUpdatedEpoch abi.ChainEpoch // -1 if deal state never updated + SlashEpoch abi.ChainEpoch // -1 if deal never slashed +} + +type DealProposal struct { + PieceCID cid.Cid + PieceSize abi.PaddedPieceSize + VerifiedDeal bool + Client address.Address + Provider address.Address + Label string + StartEpoch abi.ChainEpoch + EndEpoch abi.ChainEpoch + StoragePricePerEpoch abi.TokenAmount + ProviderCollateral abi.TokenAmount + ClientCollateral abi.TokenAmount +} + +type DealStateChanges struct { + Added []DealIDState + Modified []DealStateChange + Removed []DealIDState +} + +type DealIDState struct { + ID abi.DealID + Deal DealState +} + +// DealStateChange is a change in deal state from -> to +type DealStateChange struct { + ID abi.DealID + From *DealState + To *DealState +} + +type DealProposalChanges struct { + Added []ProposalIDState + Removed []ProposalIDState +} + +type ProposalIDState struct { + ID abi.DealID + Proposal DealProposal +} + +func EmptyDealState() *DealState { + return &DealState{ + SectorStartEpoch: -1, + SlashEpoch: -1, + LastUpdatedEpoch: -1, + } +} + +// returns the earned fees and pending fees for a given deal +func (deal DealProposal) GetDealFees(height abi.ChainEpoch) (abi.TokenAmount, abi.TokenAmount) { + tf := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(deal.EndEpoch-deal.StartEpoch))) + + ef := big.Mul(deal.StoragePricePerEpoch, big.NewInt(int64(height-deal.StartEpoch))) + if ef.LessThan(big.Zero()) { + ef = big.Zero() + } + + if ef.GreaterThan(tf) { + ef = tf + } + + return ef, big.Sub(tf, ef) +} diff --git a/venus-shared/actors/builtin/market/diff.go b/venus-shared/actors/builtin/market/diff.go new file mode 100644 index 0000000000..9a946c9152 --- /dev/null +++ b/venus-shared/actors/builtin/market/diff.go @@ -0,0 +1,93 @@ +// FETCHED FROM LOTUS: builtin/market/diff.go + +package market + +import ( + "fmt" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + cbg "github.com/whyrusleeping/cbor-gen" +) + +func DiffDealProposals(pre, cur DealProposals) (*DealProposalChanges, error) { + results := new(DealProposalChanges) + if err := adt.DiffAdtArray(pre.array(), cur.array(), &marketProposalsDiffer{results, pre, cur}); err != nil { + return nil, fmt.Errorf("diffing deal states: %w", err) + } + return results, nil +} + +type marketProposalsDiffer struct { + Results *DealProposalChanges + pre, cur DealProposals +} + +func (d *marketProposalsDiffer) Add(key uint64, val *cbg.Deferred) error { + dp, err := d.cur.decode(val) + if err != nil { + return err + } + d.Results.Added = append(d.Results.Added, ProposalIDState{abi.DealID(key), *dp}) + return nil +} + +func (d *marketProposalsDiffer) Modify(key uint64, from, to *cbg.Deferred) error { + // short circuit, DealProposals are static + return nil +} + +func (d *marketProposalsDiffer) Remove(key uint64, val *cbg.Deferred) error { + dp, err := d.pre.decode(val) + if err != nil { + return err + } + d.Results.Removed = append(d.Results.Removed, ProposalIDState{abi.DealID(key), *dp}) + return nil +} + +func DiffDealStates(pre, cur DealStates) (*DealStateChanges, error) { + results := new(DealStateChanges) + if err := adt.DiffAdtArray(pre.array(), cur.array(), &marketStatesDiffer{results, pre, cur}); err != nil { + return nil, fmt.Errorf("diffing deal states: %w", err) + } + return results, nil +} + +type marketStatesDiffer struct { + Results *DealStateChanges + pre, cur DealStates +} + +func (d *marketStatesDiffer) Add(key uint64, val *cbg.Deferred) error { + ds, err := d.cur.decode(val) + if err != nil { + return err + } + d.Results.Added = append(d.Results.Added, DealIDState{abi.DealID(key), *ds}) + return nil +} + +func (d *marketStatesDiffer) Modify(key uint64, from, to *cbg.Deferred) error { + dsFrom, err := d.pre.decode(from) + if err != nil { + return err + } + dsTo, err := d.cur.decode(to) + if err != nil { + return err + } + if *dsFrom != *dsTo { + d.Results.Modified = append(d.Results.Modified, DealStateChange{abi.DealID(key), dsFrom, dsTo}) + } + return nil +} + +func (d *marketStatesDiffer) Remove(key uint64, val *cbg.Deferred) error { + ds, err := d.pre.decode(val) + if err != nil { + return err + } + d.Results.Removed = append(d.Results.Removed, DealIDState{abi.DealID(key), *ds}) + return nil +} diff --git a/venus-shared/actors/builtin/market/state.sep.go.template b/venus-shared/actors/builtin/market/state.sep.go.template new file mode 100644 index 0000000000..cb4dabb5d5 --- /dev/null +++ b/venus-shared/actors/builtin/market/state.sep.go.template @@ -0,0 +1,269 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + types "github.com/filecoin-project/venus/venus-shared/chain" + + market{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/market" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + {{if (le .v 2)}} + ea, err := adt{{.v}}.MakeEmptyArray(store).Root() + if err != nil { + return nil, err + } + + em, err := adt{{.v}}.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *market{{.v}}.ConstructState(ea, em, em) + {{else}} + s, err := market{{.v}}.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + {{end}} + return &out, nil +} + +type state{{.v}} struct { + market{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state{{.v}}) BalancesChanged(otherState State) (bool, error) { + otherState{{.v}}, ok := otherState.(*state{{.v}}) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState{{.v}}.State.EscrowTable) || !s.State.LockedTable.Equals(otherState{{.v}}.State.LockedTable), nil +} + +func (s *state{{.v}}) StatesChanged(otherState State) (bool, error) { + otherState{{.v}}, ok := otherState.(*state{{.v}}) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState{{.v}}.State.States), nil +} + +func (s *state{{.v}}) States() (DealStates, error) { + stateArray, err := adt{{.v}}.AsArray(s.store, s.State.States{{if (ge .v 3)}}, market{{.v}}.StatesAmtBitwidth{{end}}) + if err != nil { + return nil, err + } + return &dealStates{{.v}}{stateArray}, nil +} + +func (s *state{{.v}}) ProposalsChanged(otherState State) (bool, error) { + otherState{{.v}}, ok := otherState.(*state{{.v}}) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState{{.v}}.State.Proposals), nil +} + +func (s *state{{.v}}) Proposals() (DealProposals, error) { + proposalArray, err := adt{{.v}}.AsArray(s.store, s.State.Proposals{{if (ge .v 3)}}, market{{.v}}.ProposalsAmtBitwidth{{end}}) + if err != nil { + return nil, err + } + return &dealProposals{{.v}}{proposalArray}, nil +} + +func (s *state{{.v}}) EscrowTable() (BalanceTable, error) { + bt, err := adt{{.v}}.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable{{.v}}{bt}, nil +} + +func (s *state{{.v}}) LockedTable() (BalanceTable, error) { + bt, err := adt{{.v}}.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable{{.v}}{bt}, nil +} + +func (s *state{{.v}}) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw{{if (ge .v 2)}}, _{{end}}, err := market{{.v}}.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state{{.v}}) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable{{.v}} struct { + *adt{{.v}}.BalanceTable +} + +func (bt *balanceTable{{.v}}) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt{{.v}}.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates{{.v}} struct { + adt.Array +} + +func (s *dealStates{{.v}}) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal{{.v}} market{{.v}}.DealState + found, err := s.Array.Get(uint64(dealID), &deal{{.v}}) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV{{.v}}DealState(deal{{.v}}) + return &deal, true, nil +} + +func (s *dealStates{{.v}}) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds{{.v}} market{{.v}}.DealState + return s.Array.ForEach(&ds{{.v}}, func(idx int64) error { + return cb(abi.DealID(idx), fromV{{.v}}DealState(ds{{.v}})) + }) +} + +func (s *dealStates{{.v}}) decode(val *cbg.Deferred) (*DealState, error) { + var ds{{.v}} market{{.v}}.DealState + if err := ds{{.v}}.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV{{.v}}DealState(ds{{.v}}) + return &ds, nil +} + +func (s *dealStates{{.v}}) array() adt.Array { + return s.Array +} + +func fromV{{.v}}DealState(v{{.v}} market{{.v}}.DealState) DealState { + return (DealState)(v{{.v}}) +} + +type dealProposals{{.v}} struct { + adt.Array +} + +func (s *dealProposals{{.v}}) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal{{.v}} market{{.v}}.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal{{.v}}) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV{{.v}}DealProposal(proposal{{.v}}) + return &proposal, true, nil +} + +func (s *dealProposals{{.v}}) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp{{.v}} market{{.v}}.DealProposal + return s.Array.ForEach(&dp{{.v}}, func(idx int64) error { + return cb(abi.DealID(idx), fromV{{.v}}DealProposal(dp{{.v}})) + }) +} + +func (s *dealProposals{{.v}}) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp{{.v}} market{{.v}}.DealProposal + if err := dp{{.v}}.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV{{.v}}DealProposal(dp{{.v}}) + return &dp, nil +} + +func (s *dealProposals{{.v}}) array() adt.Array { + return s.Array +} + +func fromV{{.v}}DealProposal(v{{.v}} market{{.v}}.DealProposal) DealProposal { + return (DealProposal)(v{{.v}}) +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn{{.v}})(nil) + +func decodePublishStorageDealsReturn{{.v}}(b []byte) (PublishStorageDealsReturn, error) { + var retval market{{.v}}.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn{{.v}}{retval}, nil +} + +type publishStorageDealsReturn{{.v}} struct { + market{{.v}}.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn{{.v}}) IsDealValid(index uint64) (bool, error) { + {{if (ge .v 6)}} + return r.ValidDeals.IsSet(index) + {{else}} + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + {{end}} +} + +func (r *publishStorageDealsReturn{{.v}}) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/venus-shared/actors/builtin/market/state.v0.go b/venus-shared/actors/builtin/market/state.v0.go new file mode 100644 index 0000000000..3cdb209b1f --- /dev/null +++ b/venus-shared/actors/builtin/market/state.v0.go @@ -0,0 +1,260 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + types "github.com/filecoin-project/venus/venus-shared/chain" + + market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + + ea, err := adt0.MakeEmptyArray(store).Root() + if err != nil { + return nil, err + } + + em, err := adt0.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *market0.ConstructState(ea, em, em) + + return &out, nil +} + +type state0 struct { + market0.State + store adt.Store +} + +func (s *state0) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state0) BalancesChanged(otherState State) (bool, error) { + otherState0, ok := otherState.(*state0) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState0.State.EscrowTable) || !s.State.LockedTable.Equals(otherState0.State.LockedTable), nil +} + +func (s *state0) StatesChanged(otherState State) (bool, error) { + otherState0, ok := otherState.(*state0) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState0.State.States), nil +} + +func (s *state0) States() (DealStates, error) { + stateArray, err := adt0.AsArray(s.store, s.State.States) + if err != nil { + return nil, err + } + return &dealStates0{stateArray}, nil +} + +func (s *state0) ProposalsChanged(otherState State) (bool, error) { + otherState0, ok := otherState.(*state0) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState0.State.Proposals), nil +} + +func (s *state0) Proposals() (DealProposals, error) { + proposalArray, err := adt0.AsArray(s.store, s.State.Proposals) + if err != nil { + return nil, err + } + return &dealProposals0{proposalArray}, nil +} + +func (s *state0) EscrowTable() (BalanceTable, error) { + bt, err := adt0.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable0{bt}, nil +} + +func (s *state0) LockedTable() (BalanceTable, error) { + bt, err := adt0.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable0{bt}, nil +} + +func (s *state0) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, err := market0.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state0) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable0 struct { + *adt0.BalanceTable +} + +func (bt *balanceTable0) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt0.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates0 struct { + adt.Array +} + +func (s *dealStates0) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal0 market0.DealState + found, err := s.Array.Get(uint64(dealID), &deal0) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV0DealState(deal0) + return &deal, true, nil +} + +func (s *dealStates0) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds0 market0.DealState + return s.Array.ForEach(&ds0, func(idx int64) error { + return cb(abi.DealID(idx), fromV0DealState(ds0)) + }) +} + +func (s *dealStates0) decode(val *cbg.Deferred) (*DealState, error) { + var ds0 market0.DealState + if err := ds0.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV0DealState(ds0) + return &ds, nil +} + +func (s *dealStates0) array() adt.Array { + return s.Array +} + +func fromV0DealState(v0 market0.DealState) DealState { + return (DealState)(v0) +} + +type dealProposals0 struct { + adt.Array +} + +func (s *dealProposals0) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal0 market0.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal0) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV0DealProposal(proposal0) + return &proposal, true, nil +} + +func (s *dealProposals0) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp0 market0.DealProposal + return s.Array.ForEach(&dp0, func(idx int64) error { + return cb(abi.DealID(idx), fromV0DealProposal(dp0)) + }) +} + +func (s *dealProposals0) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp0 market0.DealProposal + if err := dp0.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV0DealProposal(dp0) + return &dp, nil +} + +func (s *dealProposals0) array() adt.Array { + return s.Array +} + +func fromV0DealProposal(v0 market0.DealProposal) DealProposal { + return (DealProposal)(v0) +} + +func (s *state0) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn0)(nil) + +func decodePublishStorageDealsReturn0(b []byte) (PublishStorageDealsReturn, error) { + var retval market0.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn0{retval}, nil +} + +type publishStorageDealsReturn0 struct { + market0.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn0) IsDealValid(index uint64) (bool, error) { + + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + +} + +func (r *publishStorageDealsReturn0) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/venus-shared/actors/builtin/market/state.v2.go b/venus-shared/actors/builtin/market/state.v2.go new file mode 100644 index 0000000000..2f1d4b4a25 --- /dev/null +++ b/venus-shared/actors/builtin/market/state.v2.go @@ -0,0 +1,260 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + types "github.com/filecoin-project/venus/venus-shared/chain" + + market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + + ea, err := adt2.MakeEmptyArray(store).Root() + if err != nil { + return nil, err + } + + em, err := adt2.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *market2.ConstructState(ea, em, em) + + return &out, nil +} + +type state2 struct { + market2.State + store adt.Store +} + +func (s *state2) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state2) BalancesChanged(otherState State) (bool, error) { + otherState2, ok := otherState.(*state2) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState2.State.EscrowTable) || !s.State.LockedTable.Equals(otherState2.State.LockedTable), nil +} + +func (s *state2) StatesChanged(otherState State) (bool, error) { + otherState2, ok := otherState.(*state2) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState2.State.States), nil +} + +func (s *state2) States() (DealStates, error) { + stateArray, err := adt2.AsArray(s.store, s.State.States) + if err != nil { + return nil, err + } + return &dealStates2{stateArray}, nil +} + +func (s *state2) ProposalsChanged(otherState State) (bool, error) { + otherState2, ok := otherState.(*state2) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState2.State.Proposals), nil +} + +func (s *state2) Proposals() (DealProposals, error) { + proposalArray, err := adt2.AsArray(s.store, s.State.Proposals) + if err != nil { + return nil, err + } + return &dealProposals2{proposalArray}, nil +} + +func (s *state2) EscrowTable() (BalanceTable, error) { + bt, err := adt2.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable2{bt}, nil +} + +func (s *state2) LockedTable() (BalanceTable, error) { + bt, err := adt2.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable2{bt}, nil +} + +func (s *state2) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market2.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state2) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable2 struct { + *adt2.BalanceTable +} + +func (bt *balanceTable2) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt2.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates2 struct { + adt.Array +} + +func (s *dealStates2) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal2 market2.DealState + found, err := s.Array.Get(uint64(dealID), &deal2) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV2DealState(deal2) + return &deal, true, nil +} + +func (s *dealStates2) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds2 market2.DealState + return s.Array.ForEach(&ds2, func(idx int64) error { + return cb(abi.DealID(idx), fromV2DealState(ds2)) + }) +} + +func (s *dealStates2) decode(val *cbg.Deferred) (*DealState, error) { + var ds2 market2.DealState + if err := ds2.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV2DealState(ds2) + return &ds, nil +} + +func (s *dealStates2) array() adt.Array { + return s.Array +} + +func fromV2DealState(v2 market2.DealState) DealState { + return (DealState)(v2) +} + +type dealProposals2 struct { + adt.Array +} + +func (s *dealProposals2) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal2 market2.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal2) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV2DealProposal(proposal2) + return &proposal, true, nil +} + +func (s *dealProposals2) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp2 market2.DealProposal + return s.Array.ForEach(&dp2, func(idx int64) error { + return cb(abi.DealID(idx), fromV2DealProposal(dp2)) + }) +} + +func (s *dealProposals2) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp2 market2.DealProposal + if err := dp2.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV2DealProposal(dp2) + return &dp, nil +} + +func (s *dealProposals2) array() adt.Array { + return s.Array +} + +func fromV2DealProposal(v2 market2.DealProposal) DealProposal { + return (DealProposal)(v2) +} + +func (s *state2) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn2)(nil) + +func decodePublishStorageDealsReturn2(b []byte) (PublishStorageDealsReturn, error) { + var retval market2.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn2{retval}, nil +} + +type publishStorageDealsReturn2 struct { + market2.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn2) IsDealValid(index uint64) (bool, error) { + + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + +} + +func (r *publishStorageDealsReturn2) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/venus-shared/actors/builtin/market/state.v3.go b/venus-shared/actors/builtin/market/state.v3.go new file mode 100644 index 0000000000..3c9c32a776 --- /dev/null +++ b/venus-shared/actors/builtin/market/state.v3.go @@ -0,0 +1,255 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + types "github.com/filecoin-project/venus/venus-shared/chain" + + market3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/market" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + + s, err := market3.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state3 struct { + market3.State + store adt.Store +} + +func (s *state3) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state3) BalancesChanged(otherState State) (bool, error) { + otherState3, ok := otherState.(*state3) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState3.State.EscrowTable) || !s.State.LockedTable.Equals(otherState3.State.LockedTable), nil +} + +func (s *state3) StatesChanged(otherState State) (bool, error) { + otherState3, ok := otherState.(*state3) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState3.State.States), nil +} + +func (s *state3) States() (DealStates, error) { + stateArray, err := adt3.AsArray(s.store, s.State.States, market3.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates3{stateArray}, nil +} + +func (s *state3) ProposalsChanged(otherState State) (bool, error) { + otherState3, ok := otherState.(*state3) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState3.State.Proposals), nil +} + +func (s *state3) Proposals() (DealProposals, error) { + proposalArray, err := adt3.AsArray(s.store, s.State.Proposals, market3.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals3{proposalArray}, nil +} + +func (s *state3) EscrowTable() (BalanceTable, error) { + bt, err := adt3.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable3{bt}, nil +} + +func (s *state3) LockedTable() (BalanceTable, error) { + bt, err := adt3.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable3{bt}, nil +} + +func (s *state3) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market3.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state3) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable3 struct { + *adt3.BalanceTable +} + +func (bt *balanceTable3) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt3.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates3 struct { + adt.Array +} + +func (s *dealStates3) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal3 market3.DealState + found, err := s.Array.Get(uint64(dealID), &deal3) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV3DealState(deal3) + return &deal, true, nil +} + +func (s *dealStates3) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds3 market3.DealState + return s.Array.ForEach(&ds3, func(idx int64) error { + return cb(abi.DealID(idx), fromV3DealState(ds3)) + }) +} + +func (s *dealStates3) decode(val *cbg.Deferred) (*DealState, error) { + var ds3 market3.DealState + if err := ds3.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV3DealState(ds3) + return &ds, nil +} + +func (s *dealStates3) array() adt.Array { + return s.Array +} + +func fromV3DealState(v3 market3.DealState) DealState { + return (DealState)(v3) +} + +type dealProposals3 struct { + adt.Array +} + +func (s *dealProposals3) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal3 market3.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal3) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV3DealProposal(proposal3) + return &proposal, true, nil +} + +func (s *dealProposals3) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp3 market3.DealProposal + return s.Array.ForEach(&dp3, func(idx int64) error { + return cb(abi.DealID(idx), fromV3DealProposal(dp3)) + }) +} + +func (s *dealProposals3) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp3 market3.DealProposal + if err := dp3.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV3DealProposal(dp3) + return &dp, nil +} + +func (s *dealProposals3) array() adt.Array { + return s.Array +} + +func fromV3DealProposal(v3 market3.DealProposal) DealProposal { + return (DealProposal)(v3) +} + +func (s *state3) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn3)(nil) + +func decodePublishStorageDealsReturn3(b []byte) (PublishStorageDealsReturn, error) { + var retval market3.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn3{retval}, nil +} + +type publishStorageDealsReturn3 struct { + market3.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn3) IsDealValid(index uint64) (bool, error) { + + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + +} + +func (r *publishStorageDealsReturn3) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/venus-shared/actors/builtin/market/state.v4.go b/venus-shared/actors/builtin/market/state.v4.go new file mode 100644 index 0000000000..8dcad1a918 --- /dev/null +++ b/venus-shared/actors/builtin/market/state.v4.go @@ -0,0 +1,255 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + types "github.com/filecoin-project/venus/venus-shared/chain" + + market4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/market" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + + s, err := market4.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state4 struct { + market4.State + store adt.Store +} + +func (s *state4) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state4) BalancesChanged(otherState State) (bool, error) { + otherState4, ok := otherState.(*state4) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState4.State.EscrowTable) || !s.State.LockedTable.Equals(otherState4.State.LockedTable), nil +} + +func (s *state4) StatesChanged(otherState State) (bool, error) { + otherState4, ok := otherState.(*state4) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState4.State.States), nil +} + +func (s *state4) States() (DealStates, error) { + stateArray, err := adt4.AsArray(s.store, s.State.States, market4.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates4{stateArray}, nil +} + +func (s *state4) ProposalsChanged(otherState State) (bool, error) { + otherState4, ok := otherState.(*state4) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState4.State.Proposals), nil +} + +func (s *state4) Proposals() (DealProposals, error) { + proposalArray, err := adt4.AsArray(s.store, s.State.Proposals, market4.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals4{proposalArray}, nil +} + +func (s *state4) EscrowTable() (BalanceTable, error) { + bt, err := adt4.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable4{bt}, nil +} + +func (s *state4) LockedTable() (BalanceTable, error) { + bt, err := adt4.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable4{bt}, nil +} + +func (s *state4) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market4.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state4) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable4 struct { + *adt4.BalanceTable +} + +func (bt *balanceTable4) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt4.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates4 struct { + adt.Array +} + +func (s *dealStates4) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal4 market4.DealState + found, err := s.Array.Get(uint64(dealID), &deal4) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV4DealState(deal4) + return &deal, true, nil +} + +func (s *dealStates4) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds4 market4.DealState + return s.Array.ForEach(&ds4, func(idx int64) error { + return cb(abi.DealID(idx), fromV4DealState(ds4)) + }) +} + +func (s *dealStates4) decode(val *cbg.Deferred) (*DealState, error) { + var ds4 market4.DealState + if err := ds4.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV4DealState(ds4) + return &ds, nil +} + +func (s *dealStates4) array() adt.Array { + return s.Array +} + +func fromV4DealState(v4 market4.DealState) DealState { + return (DealState)(v4) +} + +type dealProposals4 struct { + adt.Array +} + +func (s *dealProposals4) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal4 market4.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal4) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV4DealProposal(proposal4) + return &proposal, true, nil +} + +func (s *dealProposals4) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp4 market4.DealProposal + return s.Array.ForEach(&dp4, func(idx int64) error { + return cb(abi.DealID(idx), fromV4DealProposal(dp4)) + }) +} + +func (s *dealProposals4) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp4 market4.DealProposal + if err := dp4.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV4DealProposal(dp4) + return &dp, nil +} + +func (s *dealProposals4) array() adt.Array { + return s.Array +} + +func fromV4DealProposal(v4 market4.DealProposal) DealProposal { + return (DealProposal)(v4) +} + +func (s *state4) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn4)(nil) + +func decodePublishStorageDealsReturn4(b []byte) (PublishStorageDealsReturn, error) { + var retval market4.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn4{retval}, nil +} + +type publishStorageDealsReturn4 struct { + market4.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn4) IsDealValid(index uint64) (bool, error) { + + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + +} + +func (r *publishStorageDealsReturn4) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/venus-shared/actors/builtin/market/state.v5.go b/venus-shared/actors/builtin/market/state.v5.go new file mode 100644 index 0000000000..d5081e8ec4 --- /dev/null +++ b/venus-shared/actors/builtin/market/state.v5.go @@ -0,0 +1,255 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + types "github.com/filecoin-project/venus/venus-shared/chain" + + market5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/market" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + + s, err := market5.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state5 struct { + market5.State + store adt.Store +} + +func (s *state5) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state5) BalancesChanged(otherState State) (bool, error) { + otherState5, ok := otherState.(*state5) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState5.State.EscrowTable) || !s.State.LockedTable.Equals(otherState5.State.LockedTable), nil +} + +func (s *state5) StatesChanged(otherState State) (bool, error) { + otherState5, ok := otherState.(*state5) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState5.State.States), nil +} + +func (s *state5) States() (DealStates, error) { + stateArray, err := adt5.AsArray(s.store, s.State.States, market5.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates5{stateArray}, nil +} + +func (s *state5) ProposalsChanged(otherState State) (bool, error) { + otherState5, ok := otherState.(*state5) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState5.State.Proposals), nil +} + +func (s *state5) Proposals() (DealProposals, error) { + proposalArray, err := adt5.AsArray(s.store, s.State.Proposals, market5.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals5{proposalArray}, nil +} + +func (s *state5) EscrowTable() (BalanceTable, error) { + bt, err := adt5.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable5{bt}, nil +} + +func (s *state5) LockedTable() (BalanceTable, error) { + bt, err := adt5.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable5{bt}, nil +} + +func (s *state5) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market5.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state5) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable5 struct { + *adt5.BalanceTable +} + +func (bt *balanceTable5) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt5.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates5 struct { + adt.Array +} + +func (s *dealStates5) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal5 market5.DealState + found, err := s.Array.Get(uint64(dealID), &deal5) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV5DealState(deal5) + return &deal, true, nil +} + +func (s *dealStates5) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds5 market5.DealState + return s.Array.ForEach(&ds5, func(idx int64) error { + return cb(abi.DealID(idx), fromV5DealState(ds5)) + }) +} + +func (s *dealStates5) decode(val *cbg.Deferred) (*DealState, error) { + var ds5 market5.DealState + if err := ds5.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV5DealState(ds5) + return &ds, nil +} + +func (s *dealStates5) array() adt.Array { + return s.Array +} + +func fromV5DealState(v5 market5.DealState) DealState { + return (DealState)(v5) +} + +type dealProposals5 struct { + adt.Array +} + +func (s *dealProposals5) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal5 market5.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal5) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV5DealProposal(proposal5) + return &proposal, true, nil +} + +func (s *dealProposals5) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp5 market5.DealProposal + return s.Array.ForEach(&dp5, func(idx int64) error { + return cb(abi.DealID(idx), fromV5DealProposal(dp5)) + }) +} + +func (s *dealProposals5) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp5 market5.DealProposal + if err := dp5.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV5DealProposal(dp5) + return &dp, nil +} + +func (s *dealProposals5) array() adt.Array { + return s.Array +} + +func fromV5DealProposal(v5 market5.DealProposal) DealProposal { + return (DealProposal)(v5) +} + +func (s *state5) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn5)(nil) + +func decodePublishStorageDealsReturn5(b []byte) (PublishStorageDealsReturn, error) { + var retval market5.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn5{retval}, nil +} + +type publishStorageDealsReturn5 struct { + market5.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn5) IsDealValid(index uint64) (bool, error) { + + // PublishStorageDeals only succeeded if all deals were valid in this version of actors + return true, nil + +} + +func (r *publishStorageDealsReturn5) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/venus-shared/actors/builtin/market/state.v6.go b/venus-shared/actors/builtin/market/state.v6.go new file mode 100644 index 0000000000..da5bec9b91 --- /dev/null +++ b/venus-shared/actors/builtin/market/state.v6.go @@ -0,0 +1,254 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + types "github.com/filecoin-project/venus/venus-shared/chain" + + market6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/market" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + + s, err := market6.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state6 struct { + market6.State + store adt.Store +} + +func (s *state6) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state6) BalancesChanged(otherState State) (bool, error) { + otherState6, ok := otherState.(*state6) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState6.State.EscrowTable) || !s.State.LockedTable.Equals(otherState6.State.LockedTable), nil +} + +func (s *state6) StatesChanged(otherState State) (bool, error) { + otherState6, ok := otherState.(*state6) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState6.State.States), nil +} + +func (s *state6) States() (DealStates, error) { + stateArray, err := adt6.AsArray(s.store, s.State.States, market6.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates6{stateArray}, nil +} + +func (s *state6) ProposalsChanged(otherState State) (bool, error) { + otherState6, ok := otherState.(*state6) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState6.State.Proposals), nil +} + +func (s *state6) Proposals() (DealProposals, error) { + proposalArray, err := adt6.AsArray(s.store, s.State.Proposals, market6.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals6{proposalArray}, nil +} + +func (s *state6) EscrowTable() (BalanceTable, error) { + bt, err := adt6.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable6{bt}, nil +} + +func (s *state6) LockedTable() (BalanceTable, error) { + bt, err := adt6.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable6{bt}, nil +} + +func (s *state6) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market6.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state6) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable6 struct { + *adt6.BalanceTable +} + +func (bt *balanceTable6) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt6.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates6 struct { + adt.Array +} + +func (s *dealStates6) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal6 market6.DealState + found, err := s.Array.Get(uint64(dealID), &deal6) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV6DealState(deal6) + return &deal, true, nil +} + +func (s *dealStates6) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds6 market6.DealState + return s.Array.ForEach(&ds6, func(idx int64) error { + return cb(abi.DealID(idx), fromV6DealState(ds6)) + }) +} + +func (s *dealStates6) decode(val *cbg.Deferred) (*DealState, error) { + var ds6 market6.DealState + if err := ds6.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV6DealState(ds6) + return &ds, nil +} + +func (s *dealStates6) array() adt.Array { + return s.Array +} + +func fromV6DealState(v6 market6.DealState) DealState { + return (DealState)(v6) +} + +type dealProposals6 struct { + adt.Array +} + +func (s *dealProposals6) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal6 market6.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal6) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV6DealProposal(proposal6) + return &proposal, true, nil +} + +func (s *dealProposals6) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp6 market6.DealProposal + return s.Array.ForEach(&dp6, func(idx int64) error { + return cb(abi.DealID(idx), fromV6DealProposal(dp6)) + }) +} + +func (s *dealProposals6) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp6 market6.DealProposal + if err := dp6.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV6DealProposal(dp6) + return &dp, nil +} + +func (s *dealProposals6) array() adt.Array { + return s.Array +} + +func fromV6DealProposal(v6 market6.DealProposal) DealProposal { + return (DealProposal)(v6) +} + +func (s *state6) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn6)(nil) + +func decodePublishStorageDealsReturn6(b []byte) (PublishStorageDealsReturn, error) { + var retval market6.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn6{retval}, nil +} + +type publishStorageDealsReturn6 struct { + market6.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn6) IsDealValid(index uint64) (bool, error) { + + return r.ValidDeals.IsSet(index) + +} + +func (r *publishStorageDealsReturn6) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/venus-shared/actors/builtin/market/state.v7.go b/venus-shared/actors/builtin/market/state.v7.go new file mode 100644 index 0000000000..d45c48c810 --- /dev/null +++ b/venus-shared/actors/builtin/market/state.v7.go @@ -0,0 +1,254 @@ +// FETCHED FROM LOTUS: builtin/market/state.go.template + +package market + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + types "github.com/filecoin-project/venus/venus-shared/chain" + + market7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/market" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + + s, err := market7.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state7 struct { + market7.State + store adt.Store +} + +func (s *state7) TotalLocked() (abi.TokenAmount, error) { + fml := types.BigAdd(s.TotalClientLockedCollateral, s.TotalProviderLockedCollateral) + fml = types.BigAdd(fml, s.TotalClientStorageFee) + return fml, nil +} + +func (s *state7) BalancesChanged(otherState State) (bool, error) { + otherState7, ok := otherState.(*state7) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.EscrowTable.Equals(otherState7.State.EscrowTable) || !s.State.LockedTable.Equals(otherState7.State.LockedTable), nil +} + +func (s *state7) StatesChanged(otherState State) (bool, error) { + otherState7, ok := otherState.(*state7) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.States.Equals(otherState7.State.States), nil +} + +func (s *state7) States() (DealStates, error) { + stateArray, err := adt7.AsArray(s.store, s.State.States, market7.StatesAmtBitwidth) + if err != nil { + return nil, err + } + return &dealStates7{stateArray}, nil +} + +func (s *state7) ProposalsChanged(otherState State) (bool, error) { + otherState7, ok := otherState.(*state7) + if !ok { + // there's no way to compare different versions of the state, so let's + // just say that means the state of balances has changed + return true, nil + } + return !s.State.Proposals.Equals(otherState7.State.Proposals), nil +} + +func (s *state7) Proposals() (DealProposals, error) { + proposalArray, err := adt7.AsArray(s.store, s.State.Proposals, market7.ProposalsAmtBitwidth) + if err != nil { + return nil, err + } + return &dealProposals7{proposalArray}, nil +} + +func (s *state7) EscrowTable() (BalanceTable, error) { + bt, err := adt7.AsBalanceTable(s.store, s.State.EscrowTable) + if err != nil { + return nil, err + } + return &balanceTable7{bt}, nil +} + +func (s *state7) LockedTable() (BalanceTable, error) { + bt, err := adt7.AsBalanceTable(s.store, s.State.LockedTable) + if err != nil { + return nil, err + } + return &balanceTable7{bt}, nil +} + +func (s *state7) VerifyDealsForActivation( + minerAddr address.Address, deals []abi.DealID, currEpoch, sectorExpiry abi.ChainEpoch, +) (weight, verifiedWeight abi.DealWeight, err error) { + w, vw, _, err := market7.ValidateDealsForActivation(&s.State, s.store, deals, minerAddr, sectorExpiry, currEpoch) + return w, vw, err +} + +func (s *state7) NextID() (abi.DealID, error) { + return s.State.NextID, nil +} + +type balanceTable7 struct { + *adt7.BalanceTable +} + +func (bt *balanceTable7) ForEach(cb func(address.Address, abi.TokenAmount) error) error { + asMap := (*adt7.Map)(bt.BalanceTable) + var ta abi.TokenAmount + return asMap.ForEach(&ta, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, ta) + }) +} + +type dealStates7 struct { + adt.Array +} + +func (s *dealStates7) Get(dealID abi.DealID) (*DealState, bool, error) { + var deal7 market7.DealState + found, err := s.Array.Get(uint64(dealID), &deal7) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + deal := fromV7DealState(deal7) + return &deal, true, nil +} + +func (s *dealStates7) ForEach(cb func(dealID abi.DealID, ds DealState) error) error { + var ds7 market7.DealState + return s.Array.ForEach(&ds7, func(idx int64) error { + return cb(abi.DealID(idx), fromV7DealState(ds7)) + }) +} + +func (s *dealStates7) decode(val *cbg.Deferred) (*DealState, error) { + var ds7 market7.DealState + if err := ds7.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + ds := fromV7DealState(ds7) + return &ds, nil +} + +func (s *dealStates7) array() adt.Array { + return s.Array +} + +func fromV7DealState(v7 market7.DealState) DealState { + return (DealState)(v7) +} + +type dealProposals7 struct { + adt.Array +} + +func (s *dealProposals7) Get(dealID abi.DealID) (*DealProposal, bool, error) { + var proposal7 market7.DealProposal + found, err := s.Array.Get(uint64(dealID), &proposal7) + if err != nil { + return nil, false, err + } + if !found { + return nil, false, nil + } + proposal := fromV7DealProposal(proposal7) + return &proposal, true, nil +} + +func (s *dealProposals7) ForEach(cb func(dealID abi.DealID, dp DealProposal) error) error { + var dp7 market7.DealProposal + return s.Array.ForEach(&dp7, func(idx int64) error { + return cb(abi.DealID(idx), fromV7DealProposal(dp7)) + }) +} + +func (s *dealProposals7) decode(val *cbg.Deferred) (*DealProposal, error) { + var dp7 market7.DealProposal + if err := dp7.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return nil, err + } + dp := fromV7DealProposal(dp7) + return &dp, nil +} + +func (s *dealProposals7) array() adt.Array { + return s.Array +} + +func fromV7DealProposal(v7 market7.DealProposal) DealProposal { + return (DealProposal)(v7) +} + +func (s *state7) GetState() interface{} { + return &s.State +} + +var _ PublishStorageDealsReturn = (*publishStorageDealsReturn7)(nil) + +func decodePublishStorageDealsReturn7(b []byte) (PublishStorageDealsReturn, error) { + var retval market7.PublishStorageDealsReturn + if err := retval.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, xerrors.Errorf("failed to unmarshal PublishStorageDealsReturn: %w", err) + } + + return &publishStorageDealsReturn7{retval}, nil +} + +type publishStorageDealsReturn7 struct { + market7.PublishStorageDealsReturn +} + +func (r *publishStorageDealsReturn7) IsDealValid(index uint64) (bool, error) { + + return r.ValidDeals.IsSet(index) + +} + +func (r *publishStorageDealsReturn7) DealIDs() ([]abi.DealID, error) { + return r.IDs, nil +} diff --git a/venus-shared/actors/builtin/miner/actor.go b/venus-shared/actors/builtin/miner/actor.go new file mode 100644 index 0000000000..2938c896c7 --- /dev/null +++ b/venus-shared/actors/builtin/miner/actor.go @@ -0,0 +1,414 @@ +// FETCHED FROM LOTUS: builtin/miner/actor.go.template + +package miner + +import ( + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/go-state-types/dline" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" + + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" + miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" +) + +func init() { + + builtin.RegisterActorState(builtin0.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) + +} + +var Methods = builtin7.MethodsMiner + +// Unchanged between v0, v2, v3, v4, and v5 actors +var WPoStProvingPeriod = miner0.WPoStProvingPeriod +var WPoStPeriodDeadlines = miner0.WPoStPeriodDeadlines +var WPoStChallengeWindow = miner0.WPoStChallengeWindow +var WPoStChallengeLookback = miner0.WPoStChallengeLookback +var FaultDeclarationCutoff = miner0.FaultDeclarationCutoff + +const MinSectorExpiration = miner0.MinSectorExpiration + +// Not used / checked in v0 +// TODO: Abstract over network versions +var DeclarationsMax = miner2.DeclarationsMax +var AddressedSectorsMax = miner2.AddressedSectorsMax + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.StorageMinerActorCodeID: + return load0(store, act.Head) + + case builtin2.StorageMinerActorCodeID: + return load2(store, act.Head) + + case builtin3.StorageMinerActorCodeID: + return load3(store, act.Head) + + case builtin4.StorageMinerActorCodeID: + return load4(store, act.Head) + + case builtin5.StorageMinerActorCodeID: + return load5(store, act.Head) + + case builtin6.StorageMinerActorCodeID: + return load6(store, act.Head) + + case builtin7.StorageMinerActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.StorageMinerActorCodeID, nil + + case actors.Version2: + return builtin2.StorageMinerActorCodeID, nil + + case actors.Version3: + return builtin3.StorageMinerActorCodeID, nil + + case actors.Version4: + return builtin4.StorageMinerActorCodeID, nil + + case actors.Version5: + return builtin5.StorageMinerActorCodeID, nil + + case actors.Version6: + return builtin6.StorageMinerActorCodeID, nil + + case actors.Version7: + return builtin7.StorageMinerActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + // Total available balance to spend. + AvailableBalance(abi.TokenAmount) (abi.TokenAmount, error) + // Funds that will vest by the given epoch. + VestedFunds(abi.ChainEpoch) (abi.TokenAmount, error) + // Funds locked for various reasons. + LockedFunds() (LockedFunds, error) + FeeDebt() (abi.TokenAmount, error) + + GetSector(abi.SectorNumber) (*SectorOnChainInfo, error) + FindSector(abi.SectorNumber) (*SectorLocation, error) + GetSectorExpiration(abi.SectorNumber) (*SectorExpiration, error) + GetPrecommittedSector(abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) + ForEachPrecommittedSector(func(SectorPreCommitOnChainInfo) error) error + LoadSectors(sectorNos *bitfield.BitField) ([]*SectorOnChainInfo, error) + NumLiveSectors() (uint64, error) + IsAllocated(abi.SectorNumber) (bool, error) + // UnallocatedSectorNumbers returns up to count unallocated sector numbers (or less than + // count if there aren't enough). + UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) + GetAllocatedSectors() (*bitfield.BitField, error) + + // Note that ProvingPeriodStart is deprecated and will be renamed / removed in a future version of actors + GetProvingPeriodStart() (abi.ChainEpoch, error) + // Testing only + EraseAllUnproven() error + + LoadDeadline(idx uint64) (Deadline, error) + ForEachDeadline(cb func(idx uint64, dl Deadline) error) error + NumDeadlines() (uint64, error) + DeadlinesChanged(State) (bool, error) + + Info() (MinerInfo, error) + MinerInfoChanged(State) (bool, error) + + DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) + DeadlineCronActive() (bool, error) + + // Diff helpers. Used by Diff* functions internally. + sectors() (adt.Array, error) + decodeSectorOnChainInfo(*cbg.Deferred) (SectorOnChainInfo, error) + precommits() (adt.Map, error) + decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (SectorPreCommitOnChainInfo, error) + GetState() interface{} +} + +type Deadline interface { + LoadPartition(idx uint64) (Partition, error) + ForEachPartition(cb func(idx uint64, part Partition) error) error + PartitionsPoSted() (bitfield.BitField, error) + + PartitionsChanged(Deadline) (bool, error) + DisputableProofCount() (uint64, error) +} + +type Partition interface { + // AllSectors returns all sector numbers in this partition, including faulty, unproven, and terminated sectors + AllSectors() (bitfield.BitField, error) + + // Subset of sectors detected/declared faulty and not yet recovered (excl. from PoSt). + // Faults โˆฉ Terminated = โˆ… + FaultySectors() (bitfield.BitField, error) + + // Subset of faulty sectors expected to recover on next PoSt + // Recoveries โˆฉ Terminated = โˆ… + RecoveringSectors() (bitfield.BitField, error) + + // Live sectors are those that are not terminated (but may be faulty). + LiveSectors() (bitfield.BitField, error) + + // Active sectors are those that are neither terminated nor faulty nor unproven, i.e. actively contributing power. + ActiveSectors() (bitfield.BitField, error) + + // Unproven sectors in this partition. This bitfield will be cleared on + // a successful window post (or at the end of the partition's next + // deadline). At that time, any still unproven sectors will be added to + // the faulty sector bitfield. + UnprovenSectors() (bitfield.BitField, error) +} + +type SectorOnChainInfo struct { + SectorNumber abi.SectorNumber + SealProof abi.RegisteredSealProof + SealedCID cid.Cid + DealIDs []abi.DealID + Activation abi.ChainEpoch + Expiration abi.ChainEpoch + DealWeight abi.DealWeight + VerifiedDealWeight abi.DealWeight + InitialPledge abi.TokenAmount + ExpectedDayReward abi.TokenAmount + ExpectedStoragePledge abi.TokenAmount + SectorKeyCID *cid.Cid +} + +type SectorPreCommitInfo = miner0.SectorPreCommitInfo + +type SectorPreCommitOnChainInfo struct { + Info SectorPreCommitInfo + PreCommitDeposit abi.TokenAmount + PreCommitEpoch abi.ChainEpoch + DealWeight abi.DealWeight + VerifiedDealWeight abi.DealWeight +} + +type PoStPartition = miner0.PoStPartition +type RecoveryDeclaration = miner0.RecoveryDeclaration +type FaultDeclaration = miner0.FaultDeclaration + +// Params +type DeclareFaultsParams = miner0.DeclareFaultsParams +type DeclareFaultsRecoveredParams = miner0.DeclareFaultsRecoveredParams +type SubmitWindowedPoStParams = miner0.SubmitWindowedPoStParams +type ProveCommitSectorParams = miner0.ProveCommitSectorParams +type DisputeWindowedPoStParams = miner3.DisputeWindowedPoStParams +type ProveCommitAggregateParams = miner5.ProveCommitAggregateParams + +func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.RegisteredPoStProof) (abi.RegisteredSealProof, error) { + // We added support for the new proofs in network version 7, and removed support for the old + // ones in network version 8. + if nver < network.Version7 { + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredSealProof_StackedDrg2KiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredSealProof_StackedDrg8MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredSealProof_StackedDrg512MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredSealProof_StackedDrg32GiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredSealProof_StackedDrg64GiBV1, nil + default: + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + } + } + + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredSealProof_StackedDrg2KiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredSealProof_StackedDrg8MiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredSealProof_StackedDrg512MiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredSealProof_StackedDrg32GiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil + default: + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + } +} + +func WinningPoStProofTypeFromWindowPoStProofType(nver network.Version, proof abi.RegisteredPoStProof) (abi.RegisteredPoStProof, error) { + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning2KiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning8MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning512MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning32GiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning64GiBV1, nil + default: + return -1, xerrors.Errorf("unknown proof type %d", proof) + } +} + +type MinerInfo struct { + Owner address.Address // Must be an ID-address. + Worker address.Address // Must be an ID-address. + NewWorker address.Address // Must be an ID-address. + ControlAddresses []address.Address // Must be an ID-addresses. + WorkerChangeEpoch abi.ChainEpoch + PeerId *peer.ID + Multiaddrs []abi.Multiaddrs + WindowPoStProofType abi.RegisteredPoStProof + SectorSize abi.SectorSize + WindowPoStPartitionSectors uint64 + ConsensusFaultElapsed abi.ChainEpoch +} + +func (mi MinerInfo) IsController(addr address.Address) bool { + if addr == mi.Owner || addr == mi.Worker { + return true + } + + for _, ca := range mi.ControlAddresses { + if addr == ca { + return true + } + } + + return false +} + +type SectorExpiration struct { + OnTime abi.ChainEpoch + + // non-zero if sector is faulty, epoch at which it will be permanently + // removed if it doesn't recover + Early abi.ChainEpoch +} + +type SectorLocation struct { + Deadline uint64 + Partition uint64 +} + +type SectorChanges struct { + Added []SectorOnChainInfo + Extended []SectorExtensions + Removed []SectorOnChainInfo +} + +type SectorExtensions struct { + From SectorOnChainInfo + To SectorOnChainInfo +} + +type PreCommitChanges struct { + Added []SectorPreCommitOnChainInfo + Removed []SectorPreCommitOnChainInfo +} + +type LockedFunds struct { + VestingFunds abi.TokenAmount + InitialPledgeRequirement abi.TokenAmount + PreCommitDeposits abi.TokenAmount +} + +func (lf LockedFunds) TotalLockedFunds() abi.TokenAmount { + return big.Add(lf.VestingFunds, big.Add(lf.InitialPledgeRequirement, lf.PreCommitDeposits)) +} diff --git a/venus-shared/actors/builtin/miner/actor.go.template b/venus-shared/actors/builtin/miner/actor.go.template new file mode 100644 index 0000000000..1a8b1ce91f --- /dev/null +++ b/venus-shared/actors/builtin/miner/actor.go.template @@ -0,0 +1,325 @@ +// FETCHED FROM LOTUS: builtin/miner/actor.go.template + +package miner + +import ( + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/go-state-types/dline" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" + + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" + miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.StorageMinerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}} +} + +var Methods = builtin{{.latestVersion}}.MethodsMiner + +// Unchanged between v0, v2, v3, v4, and v5 actors +var WPoStProvingPeriod = miner0.WPoStProvingPeriod +var WPoStPeriodDeadlines = miner0.WPoStPeriodDeadlines +var WPoStChallengeWindow = miner0.WPoStChallengeWindow +var WPoStChallengeLookback = miner0.WPoStChallengeLookback +var FaultDeclarationCutoff = miner0.FaultDeclarationCutoff + +const MinSectorExpiration = miner0.MinSectorExpiration + +// Not used / checked in v0 +// TODO: Abstract over network versions +var DeclarationsMax = miner2.DeclarationsMax +var AddressedSectorsMax = miner2.AddressedSectorsMax + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.StorageMinerActorCodeID: + return load{{.}}(store, act.Head) +{{end}} +} + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.StorageMinerActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + // Total available balance to spend. + AvailableBalance(abi.TokenAmount) (abi.TokenAmount, error) + // Funds that will vest by the given epoch. + VestedFunds(abi.ChainEpoch) (abi.TokenAmount, error) + // Funds locked for various reasons. + LockedFunds() (LockedFunds, error) + FeeDebt() (abi.TokenAmount, error) + + GetSector(abi.SectorNumber) (*SectorOnChainInfo, error) + FindSector(abi.SectorNumber) (*SectorLocation, error) + GetSectorExpiration(abi.SectorNumber) (*SectorExpiration, error) + GetPrecommittedSector(abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) + ForEachPrecommittedSector(func(SectorPreCommitOnChainInfo) error) error + LoadSectors(sectorNos *bitfield.BitField) ([]*SectorOnChainInfo, error) + NumLiveSectors() (uint64, error) + IsAllocated(abi.SectorNumber) (bool, error) + // UnallocatedSectorNumbers returns up to count unallocated sector numbers (or less than + // count if there aren't enough). + UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) + GetAllocatedSectors() (*bitfield.BitField, error) + + // Note that ProvingPeriodStart is deprecated and will be renamed / removed in a future version of actors + GetProvingPeriodStart() (abi.ChainEpoch, error) + // Testing only + EraseAllUnproven() error + + LoadDeadline(idx uint64) (Deadline, error) + ForEachDeadline(cb func(idx uint64, dl Deadline) error) error + NumDeadlines() (uint64, error) + DeadlinesChanged(State) (bool, error) + + Info() (MinerInfo, error) + MinerInfoChanged(State) (bool, error) + + DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) + DeadlineCronActive() (bool, error) + + // Diff helpers. Used by Diff* functions internally. + sectors() (adt.Array, error) + decodeSectorOnChainInfo(*cbg.Deferred) (SectorOnChainInfo, error) + precommits() (adt.Map, error) + decodeSectorPreCommitOnChainInfo(*cbg.Deferred) (SectorPreCommitOnChainInfo, error) + GetState() interface{} +} + +type Deadline interface { + LoadPartition(idx uint64) (Partition, error) + ForEachPartition(cb func(idx uint64, part Partition) error) error + PartitionsPoSted() (bitfield.BitField, error) + + PartitionsChanged(Deadline) (bool, error) + DisputableProofCount() (uint64, error) +} + +type Partition interface { + // AllSectors returns all sector numbers in this partition, including faulty, unproven, and terminated sectors + AllSectors() (bitfield.BitField, error) + + // Subset of sectors detected/declared faulty and not yet recovered (excl. from PoSt). + // Faults โˆฉ Terminated = โˆ… + FaultySectors() (bitfield.BitField, error) + + // Subset of faulty sectors expected to recover on next PoSt + // Recoveries โˆฉ Terminated = โˆ… + RecoveringSectors() (bitfield.BitField, error) + + // Live sectors are those that are not terminated (but may be faulty). + LiveSectors() (bitfield.BitField, error) + + // Active sectors are those that are neither terminated nor faulty nor unproven, i.e. actively contributing power. + ActiveSectors() (bitfield.BitField, error) + + // Unproven sectors in this partition. This bitfield will be cleared on + // a successful window post (or at the end of the partition's next + // deadline). At that time, any still unproven sectors will be added to + // the faulty sector bitfield. + UnprovenSectors() (bitfield.BitField, error) +} + +type SectorOnChainInfo struct { + SectorNumber abi.SectorNumber + SealProof abi.RegisteredSealProof + SealedCID cid.Cid + DealIDs []abi.DealID + Activation abi.ChainEpoch + Expiration abi.ChainEpoch + DealWeight abi.DealWeight + VerifiedDealWeight abi.DealWeight + InitialPledge abi.TokenAmount + ExpectedDayReward abi.TokenAmount + ExpectedStoragePledge abi.TokenAmount + SectorKeyCID *cid.Cid +} + +type SectorPreCommitInfo = miner0.SectorPreCommitInfo + +type SectorPreCommitOnChainInfo struct { + Info SectorPreCommitInfo + PreCommitDeposit abi.TokenAmount + PreCommitEpoch abi.ChainEpoch + DealWeight abi.DealWeight + VerifiedDealWeight abi.DealWeight +} + +type PoStPartition = miner0.PoStPartition +type RecoveryDeclaration = miner0.RecoveryDeclaration +type FaultDeclaration = miner0.FaultDeclaration + +// Params +type DeclareFaultsParams = miner0.DeclareFaultsParams +type DeclareFaultsRecoveredParams = miner0.DeclareFaultsRecoveredParams +type SubmitWindowedPoStParams = miner0.SubmitWindowedPoStParams +type ProveCommitSectorParams = miner0.ProveCommitSectorParams +type DisputeWindowedPoStParams = miner3.DisputeWindowedPoStParams +type ProveCommitAggregateParams = miner5.ProveCommitAggregateParams + +func PreferredSealProofTypeFromWindowPoStType(nver network.Version, proof abi.RegisteredPoStProof) (abi.RegisteredSealProof, error) { + // We added support for the new proofs in network version 7, and removed support for the old + // ones in network version 8. + if nver < network.Version7 { + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredSealProof_StackedDrg2KiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredSealProof_StackedDrg8MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredSealProof_StackedDrg512MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredSealProof_StackedDrg32GiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredSealProof_StackedDrg64GiBV1, nil + default: + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + } + } + + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredSealProof_StackedDrg2KiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredSealProof_StackedDrg8MiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredSealProof_StackedDrg512MiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredSealProof_StackedDrg32GiBV1_1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil + default: + return -1, xerrors.Errorf("unrecognized window post type: %d", proof) + } +} + +func WinningPoStProofTypeFromWindowPoStProofType(nver network.Version, proof abi.RegisteredPoStProof) (abi.RegisteredPoStProof, error) { + switch proof { + case abi.RegisteredPoStProof_StackedDrgWindow2KiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning2KiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow8MiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning8MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow512MiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning512MiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow32GiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning32GiBV1, nil + case abi.RegisteredPoStProof_StackedDrgWindow64GiBV1: + return abi.RegisteredPoStProof_StackedDrgWinning64GiBV1, nil + default: + return -1, xerrors.Errorf("unknown proof type %d", proof) + } +} + +type MinerInfo struct { + Owner address.Address // Must be an ID-address. + Worker address.Address // Must be an ID-address. + NewWorker address.Address // Must be an ID-address. + ControlAddresses []address.Address // Must be an ID-addresses. + WorkerChangeEpoch abi.ChainEpoch + PeerId *peer.ID + Multiaddrs []abi.Multiaddrs + WindowPoStProofType abi.RegisteredPoStProof + SectorSize abi.SectorSize + WindowPoStPartitionSectors uint64 + ConsensusFaultElapsed abi.ChainEpoch +} + +func (mi MinerInfo) IsController(addr address.Address) bool { + if addr == mi.Owner || addr == mi.Worker { + return true + } + + for _, ca := range mi.ControlAddresses { + if addr == ca { + return true + } + } + + return false +} + +type SectorExpiration struct { + OnTime abi.ChainEpoch + + // non-zero if sector is faulty, epoch at which it will be permanently + // removed if it doesn't recover + Early abi.ChainEpoch +} + +type SectorLocation struct { + Deadline uint64 + Partition uint64 +} + +type SectorChanges struct { + Added []SectorOnChainInfo + Extended []SectorExtensions + Removed []SectorOnChainInfo +} + +type SectorExtensions struct { + From SectorOnChainInfo + To SectorOnChainInfo +} + +type PreCommitChanges struct { + Added []SectorPreCommitOnChainInfo + Removed []SectorPreCommitOnChainInfo +} + +type LockedFunds struct { + VestingFunds abi.TokenAmount + InitialPledgeRequirement abi.TokenAmount + PreCommitDeposits abi.TokenAmount +} + +func (lf LockedFunds) TotalLockedFunds() abi.TokenAmount { + return big.Add(lf.VestingFunds, big.Add(lf.InitialPledgeRequirement, lf.PreCommitDeposits)) +} diff --git a/venus-shared/actors/builtin/miner/diff.go b/venus-shared/actors/builtin/miner/diff.go new file mode 100644 index 0000000000..f40fd163f8 --- /dev/null +++ b/venus-shared/actors/builtin/miner/diff.go @@ -0,0 +1,129 @@ +// FETCHED FROM LOTUS: builtin/miner/diff.go + +package miner + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + cbg "github.com/whyrusleeping/cbor-gen" +) + +func DiffPreCommits(pre, cur State) (*PreCommitChanges, error) { + results := new(PreCommitChanges) + + prep, err := pre.precommits() + if err != nil { + return nil, err + } + + curp, err := cur.precommits() + if err != nil { + return nil, err + } + + err = adt.DiffAdtMap(prep, curp, &preCommitDiffer{results, pre, cur}) + if err != nil { + return nil, err + } + + return results, nil +} + +type preCommitDiffer struct { + Results *PreCommitChanges + pre, after State +} + +func (m *preCommitDiffer) AsKey(key string) (abi.Keyer, error) { + sector, err := abi.ParseUIntKey(key) + if err != nil { + return nil, err + } + return abi.UIntKey(sector), nil +} + +func (m *preCommitDiffer) Add(key string, val *cbg.Deferred) error { + sp, err := m.after.decodeSectorPreCommitOnChainInfo(val) + if err != nil { + return err + } + m.Results.Added = append(m.Results.Added, sp) + return nil +} + +func (m *preCommitDiffer) Modify(key string, from, to *cbg.Deferred) error { + return nil +} + +func (m *preCommitDiffer) Remove(key string, val *cbg.Deferred) error { + sp, err := m.pre.decodeSectorPreCommitOnChainInfo(val) + if err != nil { + return err + } + m.Results.Removed = append(m.Results.Removed, sp) + return nil +} + +func DiffSectors(pre, cur State) (*SectorChanges, error) { + results := new(SectorChanges) + + pres, err := pre.sectors() + if err != nil { + return nil, err + } + + curs, err := cur.sectors() + if err != nil { + return nil, err + } + + err = adt.DiffAdtArray(pres, curs, §orDiffer{results, pre, cur}) + if err != nil { + return nil, err + } + + return results, nil +} + +type sectorDiffer struct { + Results *SectorChanges + pre, after State +} + +func (m *sectorDiffer) Add(key uint64, val *cbg.Deferred) error { + si, err := m.after.decodeSectorOnChainInfo(val) + if err != nil { + return err + } + m.Results.Added = append(m.Results.Added, si) + return nil +} + +func (m *sectorDiffer) Modify(key uint64, from, to *cbg.Deferred) error { + siFrom, err := m.pre.decodeSectorOnChainInfo(from) + if err != nil { + return err + } + + siTo, err := m.after.decodeSectorOnChainInfo(to) + if err != nil { + return err + } + + if siFrom.Expiration != siTo.Expiration { + m.Results.Extended = append(m.Results.Extended, SectorExtensions{ + From: siFrom, + To: siTo, + }) + } + return nil +} + +func (m *sectorDiffer) Remove(key uint64, val *cbg.Deferred) error { + si, err := m.pre.decodeSectorOnChainInfo(val) + if err != nil { + return err + } + m.Results.Removed = append(m.Results.Removed, si) + return nil +} diff --git a/venus-shared/actors/builtin/miner/diff_deadlines.go b/venus-shared/actors/builtin/miner/diff_deadlines.go new file mode 100644 index 0000000000..af39d81cc0 --- /dev/null +++ b/venus-shared/actors/builtin/miner/diff_deadlines.go @@ -0,0 +1,178 @@ +// FETCHED FROM LOTUS: builtin/miner/diff_deadlines.go + +package miner + +import ( + "errors" + + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/exitcode" +) + +type DeadlinesDiff map[uint64]DeadlineDiff + +func DiffDeadlines(pre, cur State) (DeadlinesDiff, error) { + changed, err := pre.DeadlinesChanged(cur) + if err != nil { + return nil, err + } + if !changed { + return nil, nil + } + + dlDiff := make(DeadlinesDiff) + if err := pre.ForEachDeadline(func(idx uint64, preDl Deadline) error { + curDl, err := cur.LoadDeadline(idx) + if err != nil { + return err + } + + diff, err := DiffDeadline(preDl, curDl) + if err != nil { + return err + } + + dlDiff[idx] = diff + return nil + }); err != nil { + return nil, err + } + return dlDiff, nil +} + +type DeadlineDiff map[uint64]*PartitionDiff + +func DiffDeadline(pre, cur Deadline) (DeadlineDiff, error) { + changed, err := pre.PartitionsChanged(cur) + if err != nil { + return nil, err + } + if !changed { + return nil, nil + } + + partDiff := make(DeadlineDiff) + if err := pre.ForEachPartition(func(idx uint64, prePart Partition) error { + // try loading current partition at this index + curPart, err := cur.LoadPartition(idx) + if err != nil { + if errors.Is(err, exitcode.ErrNotFound) { + // TODO correctness? + return nil // the partition was removed. + } + return err + } + + // compare it with the previous partition + diff, err := DiffPartition(prePart, curPart) + if err != nil { + return err + } + + partDiff[idx] = diff + return nil + }); err != nil { + return nil, err + } + + // all previous partitions have been walked. + // all partitions in cur and not in prev are new... can they be faulty already? + // TODO is this correct? + if err := cur.ForEachPartition(func(idx uint64, curPart Partition) error { + if _, found := partDiff[idx]; found { + return nil + } + faults, err := curPart.FaultySectors() + if err != nil { + return err + } + recovering, err := curPart.RecoveringSectors() + if err != nil { + return err + } + partDiff[idx] = &PartitionDiff{ + Removed: bitfield.New(), + Recovered: bitfield.New(), + Faulted: faults, + Recovering: recovering, + } + + return nil + }); err != nil { + return nil, err + } + + return partDiff, nil +} + +type PartitionDiff struct { + Removed bitfield.BitField + Recovered bitfield.BitField + Faulted bitfield.BitField + Recovering bitfield.BitField +} + +func DiffPartition(pre, cur Partition) (*PartitionDiff, error) { + prevLiveSectors, err := pre.LiveSectors() + if err != nil { + return nil, err + } + curLiveSectors, err := cur.LiveSectors() + if err != nil { + return nil, err + } + + removed, err := bitfield.SubtractBitField(prevLiveSectors, curLiveSectors) + if err != nil { + return nil, err + } + + prevRecoveries, err := pre.RecoveringSectors() + if err != nil { + return nil, err + } + + curRecoveries, err := cur.RecoveringSectors() + if err != nil { + return nil, err + } + + recovering, err := bitfield.SubtractBitField(curRecoveries, prevRecoveries) + if err != nil { + return nil, err + } + + prevFaults, err := pre.FaultySectors() + if err != nil { + return nil, err + } + + curFaults, err := cur.FaultySectors() + if err != nil { + return nil, err + } + + faulted, err := bitfield.SubtractBitField(curFaults, prevFaults) + if err != nil { + return nil, err + } + + // all current good sectors + curActiveSectors, err := cur.ActiveSectors() + if err != nil { + return nil, err + } + + // sectors that were previously fault and are now currently active are considered recovered. + recovered, err := bitfield.IntersectBitField(prevFaults, curActiveSectors) + if err != nil { + return nil, err + } + + return &PartitionDiff{ + Removed: removed, + Recovered: recovered, + Faulted: faulted, + Recovering: recovering, + }, nil +} diff --git a/venus-shared/actors/builtin/miner/state.sep.go.template b/venus-shared/actors/builtin/miner/state.sep.go.template new file mode 100644 index 0000000000..920bd974d0 --- /dev/null +++ b/venus-shared/actors/builtin/miner/state.sep.go.template @@ -0,0 +1,605 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" +{{if (le .v 1)}} + "github.com/filecoin-project/go-state-types/big" +{{end}} + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + +{{if (ge .v 3)}} + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" +{{end}} + miner{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/miner" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + out.State = miner{{.v}}.State{} + return &out, nil +} + +type state{{.v}} struct { + miner{{.v}}.State + store adt.Store +} + +type deadline{{.v}} struct { + miner{{.v}}.Deadline + store adt.Store +} + +type partition{{.v}} struct { + miner{{.v}}.Partition + store adt.Store +} + +func (s *state{{.v}}) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available{{if (ge .v 2)}}, err{{end}} = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state{{.v}}) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state{{.v}}) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge{{if (le .v 1)}}Requirement{{end}}, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state{{.v}}) FeeDebt() (abi.TokenAmount, error) { + return {{if (ge .v 2)}}s.State.FeeDebt{{else}}big.Zero(){{end}}, nil +} + +func (s *state{{.v}}) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge{{if (le .v 1)}}Requirement{{end}}, nil +} + +func (s *state{{.v}}) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state{{.v}}) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV{{.v}}SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state{{.v}}) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state{{.v}}) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner{{.v}}.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state{{.v}}) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. +{{if (ge .v 7) -}} + // 1. If the sector is non-faulty, it will expire on-time (can be + // learned from the sector info). +{{- else -}} + // 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. +{{- end}} +{{if (ge .v 6) -}} + // 2. If it's faulty, it will expire early within the first 42 entries + // of the expiration queue. +{{- else -}} + // 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. +{{- end}} + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner{{.v}}.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner{{.v}}.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner{{.v}}.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant{{if (ge .v 3)}}, miner{{.v}}.PartitionExpirationAmtBitwidth{{end}}) + if err != nil { + return err + } + var exp miner{{.v}}.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state{{.v}}) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV{{.v}}SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state{{.v}}) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { +{{if (ge .v 3) -}} + precommitted, err := adt{{.v}}.AsMap(s.store, s.State.PreCommittedSectors, builtin{{.v}}.DefaultHamtBitwidth) +{{- else -}} + precommitted, err := adt{{.v}}.AsMap(s.store, s.State.PreCommittedSectors) +{{- end}} + if err != nil { + return err + } + + var info miner{{.v}}.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV{{.v}}SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state{{.v}}) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner{{.v}}.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info{{.v}} miner{{.v}}.SectorOnChainInfo + if err := sectors.ForEach(&info{{.v}}, func(_ int64) error { + info := fromV{{.v}}SectorOnChainInfo(info{{.v}}) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos{{.v}}, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos{{.v}})) + for i, info{{.v}} := range infos{{.v}} { + info := fromV{{.v}}SectorOnChainInfo(*info{{.v}}) + infos[i] = &info + } + return infos, nil +} + +func (s *state{{.v}}) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state{{.v}}) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state{{.v}}) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state{{.v}}) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{ {Val: true, Len: abi.MaxSectorNumber} }}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state{{.v}}) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state{{.v}}) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline{{.v}}{*dl, s.store}, nil +} + +func (s *state{{.v}}) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner{{.v}}.Deadline) error { + return cb(i, &deadline{{.v}}{*dl, s.store}) + }) +} + +func (s *state{{.v}}) NumDeadlines() (uint64, error) { + return miner{{.v}}.WPoStPeriodDeadlines, nil +} + +func (s *state{{.v}}) DeadlinesChanged(other State) (bool, error) { + other{{.v}}, ok := other.(*state{{.v}}) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other{{.v}}.Deadlines), nil +} + +func (s *state{{.v}}) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state{{.v}}) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state{{.v}}) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } +{{if (le .v 2)}} + wpp, err := info.SealProofType.RegisteredWindowPoStProof() + if err != nil { + return MinerInfo{}, err + } +{{end}} + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: {{if (ge .v 3)}}info.WindowPoStProofType{{else}}wpp{{end}}, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: {{if (ge .v 2)}}info.ConsensusFaultElapsed{{else}}-1{{end}}, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state{{.v}}) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.{{if (ge .v 4)}}Recorded{{end}}DeadlineInfo(epoch), nil +} + +func (s *state{{.v}}) DeadlineCronActive() (bool, error) { + return {{if (ge .v 4)}}s.State.DeadlineCronActive{{else}}true{{end}}, nil{{if (lt .v 4)}} // always active in this version{{end}} +} + +func (s *state{{.v}}) sectors() (adt.Array, error) { + return adt{{.v}}.AsArray(s.store, s.Sectors{{if (ge .v 3)}}, miner{{.v}}.SectorsAmtBitwidth{{end}}) +} + +func (s *state{{.v}}) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner{{.v}}.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV{{.v}}SectorOnChainInfo(si), nil +} + +func (s *state{{.v}}) precommits() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.PreCommittedSectors{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner{{.v}}.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV{{.v}}SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state{{.v}}) EraseAllUnproven() error { + {{if (ge .v 2)}} + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner{{.v}}.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner{{.v}}.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + {{else}} + // field doesn't exist until v2 + return nil + {{end}} +} + +func (d *deadline{{.v}}) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition{{.v}}{*p, d.store}, nil +} + +func (d *deadline{{.v}}) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner{{.v}}.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition{{.v}}{part, d.store}) + }) +} + +func (d *deadline{{.v}}) PartitionsChanged(other Deadline) (bool, error) { + other{{.v}}, ok := other.(*deadline{{.v}}) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other{{.v}}.Deadline.Partitions), nil +} + +func (d *deadline{{.v}}) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.{{if (ge .v 3)}}PartitionsPoSted{{else}}PostSubmissions{{end}}, nil +} + +func (d *deadline{{.v}}) DisputableProofCount() (uint64, error) { +{{if (ge .v 3)}} + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil +{{else}} + // field doesn't exist until v3 + return 0, nil +{{end}} +} + +func (p *partition{{.v}}) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition{{.v}}) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition{{.v}}) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition{{.v}}) UnprovenSectors() (bitfield.BitField, error) { + return {{if (ge .v 2)}}p.Partition.Unproven{{else}}bitfield.New(){{end}}, nil +} + +func fromV{{.v}}SectorOnChainInfo(v{{.v}} miner{{.v}}.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v{{.v}}.SectorNumber, + SealProof: v{{.v}}.SealProof, + SealedCID: v{{.v}}.SealedCID, + DealIDs: v{{.v}}.DealIDs, + Activation: v{{.v}}.Activation, + Expiration: v{{.v}}.Expiration, + DealWeight: v{{.v}}.DealWeight, + VerifiedDealWeight: v{{.v}}.VerifiedDealWeight, + InitialPledge: v{{.v}}.InitialPledge, + ExpectedDayReward: v{{.v}}.ExpectedDayReward, + ExpectedStoragePledge: v{{.v}}.ExpectedStoragePledge, + {{if (ge .v 7)}} + SectorKeyCID: v{{.v}}.SectorKeyCID, + {{end}} + } + return info +} + +func fromV{{.v}}SectorPreCommitOnChainInfo(v{{.v}} miner{{.v}}.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { +{{if (ge .v 2)}} + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v{{.v}}.Info), + PreCommitDeposit: v{{.v}}.PreCommitDeposit, + PreCommitEpoch: v{{.v}}.PreCommitEpoch, + DealWeight: v{{.v}}.DealWeight, + VerifiedDealWeight: v{{.v}}.VerifiedDealWeight, + } +{{else}} + return (SectorPreCommitOnChainInfo)(v0) +{{end}} +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/miner/state.v0.go b/venus-shared/actors/builtin/miner/state.v0.go new file mode 100644 index 0000000000..360028e939 --- /dev/null +++ b/venus-shared/actors/builtin/miner/state.v0.go @@ -0,0 +1,535 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + out.State = miner0.State{} + return &out, nil +} + +type state0 struct { + miner0.State + store adt.Store +} + +type deadline0 struct { + miner0.Deadline + store adt.Store +} + +type partition0 struct { + miner0.Partition + store adt.Store +} + +func (s *state0) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state0) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state0) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledgeRequirement, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state0) FeeDebt() (abi.TokenAmount, error) { + return big.Zero(), nil +} + +func (s *state0) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledgeRequirement, nil +} + +func (s *state0) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state0) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV0SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state0) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state0) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner0.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state0) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. + // 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. + // 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner0.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner0.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner0.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant) + if err != nil { + return err + } + var exp miner0.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state0) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV0SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state0) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { + precommitted, err := adt0.AsMap(s.store, s.State.PreCommittedSectors) + if err != nil { + return err + } + + var info miner0.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV0SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state0) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner0.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info0 miner0.SectorOnChainInfo + if err := sectors.ForEach(&info0, func(_ int64) error { + info := fromV0SectorOnChainInfo(info0) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos0, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos0)) + for i, info0 := range infos0 { + info := fromV0SectorOnChainInfo(*info0) + infos[i] = &info + } + return infos, nil +} + +func (s *state0) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state0) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state0) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state0) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{{Val: true, Len: abi.MaxSectorNumber}}}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state0) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state0) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline0{*dl, s.store}, nil +} + +func (s *state0) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner0.Deadline) error { + return cb(i, &deadline0{*dl, s.store}) + }) +} + +func (s *state0) NumDeadlines() (uint64, error) { + return miner0.WPoStPeriodDeadlines, nil +} + +func (s *state0) DeadlinesChanged(other State) (bool, error) { + other0, ok := other.(*state0) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other0.Deadlines), nil +} + +func (s *state0) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state0) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state0) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + wpp, err := info.SealProofType.RegisteredWindowPoStProof() + if err != nil { + return MinerInfo{}, err + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: wpp, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: -1, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state0) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.DeadlineInfo(epoch), nil +} + +func (s *state0) DeadlineCronActive() (bool, error) { + return true, nil // always active in this version +} + +func (s *state0) sectors() (adt.Array, error) { + return adt0.AsArray(s.store, s.Sectors) +} + +func (s *state0) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner0.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV0SectorOnChainInfo(si), nil +} + +func (s *state0) precommits() (adt.Map, error) { + return adt0.AsMap(s.store, s.PreCommittedSectors) +} + +func (s *state0) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner0.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV0SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state0) EraseAllUnproven() error { + + // field doesn't exist until v2 + return nil + +} + +func (d *deadline0) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition0{*p, d.store}, nil +} + +func (d *deadline0) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner0.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition0{part, d.store}) + }) +} + +func (d *deadline0) PartitionsChanged(other Deadline) (bool, error) { + other0, ok := other.(*deadline0) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other0.Deadline.Partitions), nil +} + +func (d *deadline0) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PostSubmissions, nil +} + +func (d *deadline0) DisputableProofCount() (uint64, error) { + + // field doesn't exist until v3 + return 0, nil + +} + +func (p *partition0) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition0) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition0) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition0) UnprovenSectors() (bitfield.BitField, error) { + return bitfield.New(), nil +} + +func fromV0SectorOnChainInfo(v0 miner0.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v0.SectorNumber, + SealProof: v0.SealProof, + SealedCID: v0.SealedCID, + DealIDs: v0.DealIDs, + Activation: v0.Activation, + Expiration: v0.Expiration, + DealWeight: v0.DealWeight, + VerifiedDealWeight: v0.VerifiedDealWeight, + InitialPledge: v0.InitialPledge, + ExpectedDayReward: v0.ExpectedDayReward, + ExpectedStoragePledge: v0.ExpectedStoragePledge, + } + return info +} + +func fromV0SectorPreCommitOnChainInfo(v0 miner0.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return (SectorPreCommitOnChainInfo)(v0) + +} + +func (s *state0) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/miner/state.v2.go b/venus-shared/actors/builtin/miner/state.v2.go new file mode 100644 index 0000000000..7bfadf2bfe --- /dev/null +++ b/venus-shared/actors/builtin/miner/state.v2.go @@ -0,0 +1,571 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + out.State = miner2.State{} + return &out, nil +} + +type state2 struct { + miner2.State + store adt.Store +} + +type deadline2 struct { + miner2.Deadline + store adt.Store +} + +type partition2 struct { + miner2.Partition + store adt.Store +} + +func (s *state2) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state2) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state2) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state2) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state2) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state2) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state2) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV2SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state2) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state2) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner2.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state2) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. + // 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. + // 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner2.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner2.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner2.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant) + if err != nil { + return err + } + var exp miner2.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state2) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV2SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state2) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { + precommitted, err := adt2.AsMap(s.store, s.State.PreCommittedSectors) + if err != nil { + return err + } + + var info miner2.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV2SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state2) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner2.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info2 miner2.SectorOnChainInfo + if err := sectors.ForEach(&info2, func(_ int64) error { + info := fromV2SectorOnChainInfo(info2) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos2, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos2)) + for i, info2 := range infos2 { + info := fromV2SectorOnChainInfo(*info2) + infos[i] = &info + } + return infos, nil +} + +func (s *state2) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state2) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state2) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state2) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{{Val: true, Len: abi.MaxSectorNumber}}}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state2) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state2) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline2{*dl, s.store}, nil +} + +func (s *state2) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner2.Deadline) error { + return cb(i, &deadline2{*dl, s.store}) + }) +} + +func (s *state2) NumDeadlines() (uint64, error) { + return miner2.WPoStPeriodDeadlines, nil +} + +func (s *state2) DeadlinesChanged(other State) (bool, error) { + other2, ok := other.(*state2) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other2.Deadlines), nil +} + +func (s *state2) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state2) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state2) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + wpp, err := info.SealProofType.RegisteredWindowPoStProof() + if err != nil { + return MinerInfo{}, err + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: wpp, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state2) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.DeadlineInfo(epoch), nil +} + +func (s *state2) DeadlineCronActive() (bool, error) { + return true, nil // always active in this version +} + +func (s *state2) sectors() (adt.Array, error) { + return adt2.AsArray(s.store, s.Sectors) +} + +func (s *state2) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner2.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV2SectorOnChainInfo(si), nil +} + +func (s *state2) precommits() (adt.Map, error) { + return adt2.AsMap(s.store, s.PreCommittedSectors) +} + +func (s *state2) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner2.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV2SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state2) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner2.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner2.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline2) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition2{*p, d.store}, nil +} + +func (d *deadline2) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner2.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition2{part, d.store}) + }) +} + +func (d *deadline2) PartitionsChanged(other Deadline) (bool, error) { + other2, ok := other.(*deadline2) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other2.Deadline.Partitions), nil +} + +func (d *deadline2) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PostSubmissions, nil +} + +func (d *deadline2) DisputableProofCount() (uint64, error) { + + // field doesn't exist until v3 + return 0, nil + +} + +func (p *partition2) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition2) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition2) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition2) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV2SectorOnChainInfo(v2 miner2.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v2.SectorNumber, + SealProof: v2.SealProof, + SealedCID: v2.SealedCID, + DealIDs: v2.DealIDs, + Activation: v2.Activation, + Expiration: v2.Expiration, + DealWeight: v2.DealWeight, + VerifiedDealWeight: v2.VerifiedDealWeight, + InitialPledge: v2.InitialPledge, + ExpectedDayReward: v2.ExpectedDayReward, + ExpectedStoragePledge: v2.ExpectedStoragePledge, + } + return info +} + +func fromV2SectorPreCommitOnChainInfo(v2 miner2.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v2.Info), + PreCommitDeposit: v2.PreCommitDeposit, + PreCommitEpoch: v2.PreCommitEpoch, + DealWeight: v2.DealWeight, + VerifiedDealWeight: v2.VerifiedDealWeight, + } + +} + +func (s *state2) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/miner/state.v3.go b/venus-shared/actors/builtin/miner/state.v3.go new file mode 100644 index 0000000000..bb44fe25b0 --- /dev/null +++ b/venus-shared/actors/builtin/miner/state.v3.go @@ -0,0 +1,572 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + out.State = miner3.State{} + return &out, nil +} + +type state3 struct { + miner3.State + store adt.Store +} + +type deadline3 struct { + miner3.Deadline + store adt.Store +} + +type partition3 struct { + miner3.Partition + store adt.Store +} + +func (s *state3) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state3) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state3) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state3) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state3) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state3) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state3) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV3SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state3) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state3) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner3.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state3) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. + // 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. + // 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner3.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner3.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner3.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner3.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner3.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state3) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV3SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state3) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { + precommitted, err := adt3.AsMap(s.store, s.State.PreCommittedSectors, builtin3.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner3.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV3SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state3) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner3.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info3 miner3.SectorOnChainInfo + if err := sectors.ForEach(&info3, func(_ int64) error { + info := fromV3SectorOnChainInfo(info3) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos3, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos3)) + for i, info3 := range infos3 { + info := fromV3SectorOnChainInfo(*info3) + infos[i] = &info + } + return infos, nil +} + +func (s *state3) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state3) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state3) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state3) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{{Val: true, Len: abi.MaxSectorNumber}}}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state3) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state3) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline3{*dl, s.store}, nil +} + +func (s *state3) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner3.Deadline) error { + return cb(i, &deadline3{*dl, s.store}) + }) +} + +func (s *state3) NumDeadlines() (uint64, error) { + return miner3.WPoStPeriodDeadlines, nil +} + +func (s *state3) DeadlinesChanged(other State) (bool, error) { + other3, ok := other.(*state3) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other3.Deadlines), nil +} + +func (s *state3) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state3) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state3) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state3) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.DeadlineInfo(epoch), nil +} + +func (s *state3) DeadlineCronActive() (bool, error) { + return true, nil // always active in this version +} + +func (s *state3) sectors() (adt.Array, error) { + return adt3.AsArray(s.store, s.Sectors, miner3.SectorsAmtBitwidth) +} + +func (s *state3) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner3.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV3SectorOnChainInfo(si), nil +} + +func (s *state3) precommits() (adt.Map, error) { + return adt3.AsMap(s.store, s.PreCommittedSectors, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner3.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV3SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state3) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner3.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner3.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline3) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition3{*p, d.store}, nil +} + +func (d *deadline3) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner3.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition3{part, d.store}) + }) +} + +func (d *deadline3) PartitionsChanged(other Deadline) (bool, error) { + other3, ok := other.(*deadline3) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other3.Deadline.Partitions), nil +} + +func (d *deadline3) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline3) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition3) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition3) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition3) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition3) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV3SectorOnChainInfo(v3 miner3.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v3.SectorNumber, + SealProof: v3.SealProof, + SealedCID: v3.SealedCID, + DealIDs: v3.DealIDs, + Activation: v3.Activation, + Expiration: v3.Expiration, + DealWeight: v3.DealWeight, + VerifiedDealWeight: v3.VerifiedDealWeight, + InitialPledge: v3.InitialPledge, + ExpectedDayReward: v3.ExpectedDayReward, + ExpectedStoragePledge: v3.ExpectedStoragePledge, + } + return info +} + +func fromV3SectorPreCommitOnChainInfo(v3 miner3.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v3.Info), + PreCommitDeposit: v3.PreCommitDeposit, + PreCommitEpoch: v3.PreCommitEpoch, + DealWeight: v3.DealWeight, + VerifiedDealWeight: v3.VerifiedDealWeight, + } + +} + +func (s *state3) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/miner/state.v4.go b/venus-shared/actors/builtin/miner/state.v4.go new file mode 100644 index 0000000000..4a52967c9a --- /dev/null +++ b/venus-shared/actors/builtin/miner/state.v4.go @@ -0,0 +1,572 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + miner4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/miner" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + out.State = miner4.State{} + return &out, nil +} + +type state4 struct { + miner4.State + store adt.Store +} + +type deadline4 struct { + miner4.Deadline + store adt.Store +} + +type partition4 struct { + miner4.Partition + store adt.Store +} + +func (s *state4) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state4) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state4) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state4) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state4) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state4) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state4) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV4SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state4) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state4) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner4.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state4) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. + // 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. + // 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner4.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner4.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner4.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner4.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner4.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state4) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV4SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state4) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { + precommitted, err := adt4.AsMap(s.store, s.State.PreCommittedSectors, builtin4.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner4.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV4SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state4) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner4.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info4 miner4.SectorOnChainInfo + if err := sectors.ForEach(&info4, func(_ int64) error { + info := fromV4SectorOnChainInfo(info4) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos4, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos4)) + for i, info4 := range infos4 { + info := fromV4SectorOnChainInfo(*info4) + infos[i] = &info + } + return infos, nil +} + +func (s *state4) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state4) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state4) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state4) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{{Val: true, Len: abi.MaxSectorNumber}}}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state4) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state4) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline4{*dl, s.store}, nil +} + +func (s *state4) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner4.Deadline) error { + return cb(i, &deadline4{*dl, s.store}) + }) +} + +func (s *state4) NumDeadlines() (uint64, error) { + return miner4.WPoStPeriodDeadlines, nil +} + +func (s *state4) DeadlinesChanged(other State) (bool, error) { + other4, ok := other.(*state4) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other4.Deadlines), nil +} + +func (s *state4) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state4) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state4) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state4) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.RecordedDeadlineInfo(epoch), nil +} + +func (s *state4) DeadlineCronActive() (bool, error) { + return s.State.DeadlineCronActive, nil +} + +func (s *state4) sectors() (adt.Array, error) { + return adt4.AsArray(s.store, s.Sectors, miner4.SectorsAmtBitwidth) +} + +func (s *state4) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner4.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV4SectorOnChainInfo(si), nil +} + +func (s *state4) precommits() (adt.Map, error) { + return adt4.AsMap(s.store, s.PreCommittedSectors, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner4.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV4SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state4) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner4.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner4.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline4) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition4{*p, d.store}, nil +} + +func (d *deadline4) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner4.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition4{part, d.store}) + }) +} + +func (d *deadline4) PartitionsChanged(other Deadline) (bool, error) { + other4, ok := other.(*deadline4) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other4.Deadline.Partitions), nil +} + +func (d *deadline4) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline4) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition4) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition4) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition4) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition4) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV4SectorOnChainInfo(v4 miner4.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v4.SectorNumber, + SealProof: v4.SealProof, + SealedCID: v4.SealedCID, + DealIDs: v4.DealIDs, + Activation: v4.Activation, + Expiration: v4.Expiration, + DealWeight: v4.DealWeight, + VerifiedDealWeight: v4.VerifiedDealWeight, + InitialPledge: v4.InitialPledge, + ExpectedDayReward: v4.ExpectedDayReward, + ExpectedStoragePledge: v4.ExpectedStoragePledge, + } + return info +} + +func fromV4SectorPreCommitOnChainInfo(v4 miner4.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v4.Info), + PreCommitDeposit: v4.PreCommitDeposit, + PreCommitEpoch: v4.PreCommitEpoch, + DealWeight: v4.DealWeight, + VerifiedDealWeight: v4.VerifiedDealWeight, + } + +} + +func (s *state4) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/miner/state.v5.go b/venus-shared/actors/builtin/miner/state.v5.go new file mode 100644 index 0000000000..2127787e19 --- /dev/null +++ b/venus-shared/actors/builtin/miner/state.v5.go @@ -0,0 +1,572 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + out.State = miner5.State{} + return &out, nil +} + +type state5 struct { + miner5.State + store adt.Store +} + +type deadline5 struct { + miner5.Deadline + store adt.Store +} + +type partition5 struct { + miner5.Partition + store adt.Store +} + +func (s *state5) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state5) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state5) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state5) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state5) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state5) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state5) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV5SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state5) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state5) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner5.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state5) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. + // 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. + // 2. If it's faulty, it will expire early within the first 14 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner5.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner5.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner5.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner5.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner5.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state5) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV5SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state5) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { + precommitted, err := adt5.AsMap(s.store, s.State.PreCommittedSectors, builtin5.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner5.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV5SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state5) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner5.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info5 miner5.SectorOnChainInfo + if err := sectors.ForEach(&info5, func(_ int64) error { + info := fromV5SectorOnChainInfo(info5) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos5, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos5)) + for i, info5 := range infos5 { + info := fromV5SectorOnChainInfo(*info5) + infos[i] = &info + } + return infos, nil +} + +func (s *state5) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state5) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state5) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state5) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{{Val: true, Len: abi.MaxSectorNumber}}}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state5) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state5) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline5{*dl, s.store}, nil +} + +func (s *state5) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner5.Deadline) error { + return cb(i, &deadline5{*dl, s.store}) + }) +} + +func (s *state5) NumDeadlines() (uint64, error) { + return miner5.WPoStPeriodDeadlines, nil +} + +func (s *state5) DeadlinesChanged(other State) (bool, error) { + other5, ok := other.(*state5) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other5.Deadlines), nil +} + +func (s *state5) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state5) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state5) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state5) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.RecordedDeadlineInfo(epoch), nil +} + +func (s *state5) DeadlineCronActive() (bool, error) { + return s.State.DeadlineCronActive, nil +} + +func (s *state5) sectors() (adt.Array, error) { + return adt5.AsArray(s.store, s.Sectors, miner5.SectorsAmtBitwidth) +} + +func (s *state5) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner5.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV5SectorOnChainInfo(si), nil +} + +func (s *state5) precommits() (adt.Map, error) { + return adt5.AsMap(s.store, s.PreCommittedSectors, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner5.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV5SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state5) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner5.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner5.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline5) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition5{*p, d.store}, nil +} + +func (d *deadline5) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner5.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition5{part, d.store}) + }) +} + +func (d *deadline5) PartitionsChanged(other Deadline) (bool, error) { + other5, ok := other.(*deadline5) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other5.Deadline.Partitions), nil +} + +func (d *deadline5) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline5) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition5) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition5) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition5) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition5) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV5SectorOnChainInfo(v5 miner5.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v5.SectorNumber, + SealProof: v5.SealProof, + SealedCID: v5.SealedCID, + DealIDs: v5.DealIDs, + Activation: v5.Activation, + Expiration: v5.Expiration, + DealWeight: v5.DealWeight, + VerifiedDealWeight: v5.VerifiedDealWeight, + InitialPledge: v5.InitialPledge, + ExpectedDayReward: v5.ExpectedDayReward, + ExpectedStoragePledge: v5.ExpectedStoragePledge, + } + return info +} + +func fromV5SectorPreCommitOnChainInfo(v5 miner5.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v5.Info), + PreCommitDeposit: v5.PreCommitDeposit, + PreCommitEpoch: v5.PreCommitEpoch, + DealWeight: v5.DealWeight, + VerifiedDealWeight: v5.VerifiedDealWeight, + } + +} + +func (s *state5) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/miner/state.v6.go b/venus-shared/actors/builtin/miner/state.v6.go new file mode 100644 index 0000000000..a766adb5c7 --- /dev/null +++ b/venus-shared/actors/builtin/miner/state.v6.go @@ -0,0 +1,572 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + miner6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/miner" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + out.State = miner6.State{} + return &out, nil +} + +type state6 struct { + miner6.State + store adt.Store +} + +type deadline6 struct { + miner6.Deadline + store adt.Store +} + +type partition6 struct { + miner6.Partition + store adt.Store +} + +func (s *state6) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state6) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state6) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state6) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state6) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state6) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state6) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV6SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state6) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state6) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner6.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state6) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. + // 1. If the sector is non-faulty, it will either expire on-time (can be + // learned from the sector info), or in the next quantized expiration + // epoch (i.e., the first element in the partition's expiration queue. + // 2. If it's faulty, it will expire early within the first 42 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner6.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner6.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner6.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner6.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner6.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state6) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV6SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state6) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { + precommitted, err := adt6.AsMap(s.store, s.State.PreCommittedSectors, builtin6.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner6.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV6SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state6) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner6.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info6 miner6.SectorOnChainInfo + if err := sectors.ForEach(&info6, func(_ int64) error { + info := fromV6SectorOnChainInfo(info6) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos6, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos6)) + for i, info6 := range infos6 { + info := fromV6SectorOnChainInfo(*info6) + infos[i] = &info + } + return infos, nil +} + +func (s *state6) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state6) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state6) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state6) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{{Val: true, Len: abi.MaxSectorNumber}}}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state6) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state6) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline6{*dl, s.store}, nil +} + +func (s *state6) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner6.Deadline) error { + return cb(i, &deadline6{*dl, s.store}) + }) +} + +func (s *state6) NumDeadlines() (uint64, error) { + return miner6.WPoStPeriodDeadlines, nil +} + +func (s *state6) DeadlinesChanged(other State) (bool, error) { + other6, ok := other.(*state6) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other6.Deadlines), nil +} + +func (s *state6) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state6) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state6) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state6) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.RecordedDeadlineInfo(epoch), nil +} + +func (s *state6) DeadlineCronActive() (bool, error) { + return s.State.DeadlineCronActive, nil +} + +func (s *state6) sectors() (adt.Array, error) { + return adt6.AsArray(s.store, s.Sectors, miner6.SectorsAmtBitwidth) +} + +func (s *state6) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner6.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV6SectorOnChainInfo(si), nil +} + +func (s *state6) precommits() (adt.Map, error) { + return adt6.AsMap(s.store, s.PreCommittedSectors, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner6.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV6SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state6) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner6.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner6.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline6) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition6{*p, d.store}, nil +} + +func (d *deadline6) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner6.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition6{part, d.store}) + }) +} + +func (d *deadline6) PartitionsChanged(other Deadline) (bool, error) { + other6, ok := other.(*deadline6) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other6.Deadline.Partitions), nil +} + +func (d *deadline6) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline6) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition6) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition6) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition6) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition6) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV6SectorOnChainInfo(v6 miner6.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v6.SectorNumber, + SealProof: v6.SealProof, + SealedCID: v6.SealedCID, + DealIDs: v6.DealIDs, + Activation: v6.Activation, + Expiration: v6.Expiration, + DealWeight: v6.DealWeight, + VerifiedDealWeight: v6.VerifiedDealWeight, + InitialPledge: v6.InitialPledge, + ExpectedDayReward: v6.ExpectedDayReward, + ExpectedStoragePledge: v6.ExpectedStoragePledge, + } + return info +} + +func fromV6SectorPreCommitOnChainInfo(v6 miner6.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v6.Info), + PreCommitDeposit: v6.PreCommitDeposit, + PreCommitEpoch: v6.PreCommitEpoch, + DealWeight: v6.DealWeight, + VerifiedDealWeight: v6.VerifiedDealWeight, + } + +} + +func (s *state6) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/miner/state.v7.go b/venus-shared/actors/builtin/miner/state.v7.go new file mode 100644 index 0000000000..ee0207214e --- /dev/null +++ b/venus-shared/actors/builtin/miner/state.v7.go @@ -0,0 +1,573 @@ +// FETCHED FROM LOTUS: builtin/miner/state.go.template + +package miner + +import ( + "bytes" + "errors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + rle "github.com/filecoin-project/go-bitfield/rle" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/dline" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/peer" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + miner7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/miner" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + out.State = miner7.State{} + return &out, nil +} + +type state7 struct { + miner7.State + store adt.Store +} + +type deadline7 struct { + miner7.Deadline + store adt.Store +} + +type partition7 struct { + miner7.Partition + store adt.Store +} + +func (s *state7) AvailableBalance(bal abi.TokenAmount) (available abi.TokenAmount, err error) { + defer func() { + if r := recover(); r != nil { + err = xerrors.Errorf("failed to get available balance: %w", r) + available = abi.NewTokenAmount(0) + } + }() + // this panics if the miner doesnt have enough funds to cover their locked pledge + available, err = s.GetAvailableBalance(bal) + return available, err +} + +func (s *state7) VestedFunds(epoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.CheckVestedFunds(s.store, epoch) +} + +func (s *state7) LockedFunds() (LockedFunds, error) { + return LockedFunds{ + VestingFunds: s.State.LockedFunds, + InitialPledgeRequirement: s.State.InitialPledge, + PreCommitDeposits: s.State.PreCommitDeposits, + }, nil +} + +func (s *state7) FeeDebt() (abi.TokenAmount, error) { + return s.State.FeeDebt, nil +} + +func (s *state7) InitialPledge() (abi.TokenAmount, error) { + return s.State.InitialPledge, nil +} + +func (s *state7) PreCommitDeposits() (abi.TokenAmount, error) { + return s.State.PreCommitDeposits, nil +} + +func (s *state7) GetSector(num abi.SectorNumber) (*SectorOnChainInfo, error) { + info, ok, err := s.State.GetSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV7SectorOnChainInfo(*info) + return &ret, nil +} + +func (s *state7) FindSector(num abi.SectorNumber) (*SectorLocation, error) { + dlIdx, partIdx, err := s.State.FindSector(s.store, num) + if err != nil { + return nil, err + } + return &SectorLocation{ + Deadline: dlIdx, + Partition: partIdx, + }, nil +} + +func (s *state7) NumLiveSectors() (uint64, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return 0, err + } + var total uint64 + if err := dls.ForEach(s.store, func(dlIdx uint64, dl *miner7.Deadline) error { + total += dl.LiveSectors + return nil + }); err != nil { + return 0, err + } + return total, nil +} + +// GetSectorExpiration returns the effective expiration of the given sector. +// +// If the sector does not expire early, the Early expiration field is 0. +func (s *state7) GetSectorExpiration(num abi.SectorNumber) (*SectorExpiration, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + // NOTE: this can be optimized significantly. + // 1. If the sector is non-faulty, it will expire on-time (can be + // learned from the sector info). + // 2. If it's faulty, it will expire early within the first 42 entries + // of the expiration queue. + + stopErr := errors.New("stop") + out := SectorExpiration{} + err = dls.ForEach(s.store, func(dlIdx uint64, dl *miner7.Deadline) error { + partitions, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + quant := s.State.QuantSpecForDeadline(dlIdx) + var part miner7.Partition + return partitions.ForEach(&part, func(partIdx int64) error { + if found, err := part.Sectors.IsSet(uint64(num)); err != nil { + return err + } else if !found { + return nil + } + if found, err := part.Terminated.IsSet(uint64(num)); err != nil { + return err + } else if found { + // already terminated + return stopErr + } + + q, err := miner7.LoadExpirationQueue(s.store, part.ExpirationsEpochs, quant, miner7.PartitionExpirationAmtBitwidth) + if err != nil { + return err + } + var exp miner7.ExpirationSet + return q.ForEach(&exp, func(epoch int64) error { + if early, err := exp.EarlySectors.IsSet(uint64(num)); err != nil { + return err + } else if early { + out.Early = abi.ChainEpoch(epoch) + return nil + } + if onTime, err := exp.OnTimeSectors.IsSet(uint64(num)); err != nil { + return err + } else if onTime { + out.OnTime = abi.ChainEpoch(epoch) + return stopErr + } + return nil + }) + }) + }) + if err == stopErr { + err = nil + } + if err != nil { + return nil, err + } + if out.Early == 0 && out.OnTime == 0 { + return nil, xerrors.Errorf("failed to find sector %d", num) + } + return &out, nil +} + +func (s *state7) GetPrecommittedSector(num abi.SectorNumber) (*SectorPreCommitOnChainInfo, error) { + info, ok, err := s.State.GetPrecommittedSector(s.store, num) + if !ok || err != nil { + return nil, err + } + + ret := fromV7SectorPreCommitOnChainInfo(*info) + + return &ret, nil +} + +func (s *state7) ForEachPrecommittedSector(cb func(SectorPreCommitOnChainInfo) error) error { + precommitted, err := adt7.AsMap(s.store, s.State.PreCommittedSectors, builtin7.DefaultHamtBitwidth) + if err != nil { + return err + } + + var info miner7.SectorPreCommitOnChainInfo + if err := precommitted.ForEach(&info, func(_ string) error { + return cb(fromV7SectorPreCommitOnChainInfo(info)) + }); err != nil { + return err + } + + return nil +} + +func (s *state7) LoadSectors(snos *bitfield.BitField) ([]*SectorOnChainInfo, error) { + sectors, err := miner7.LoadSectors(s.store, s.State.Sectors) + if err != nil { + return nil, err + } + + // If no sector numbers are specified, load all. + if snos == nil { + infos := make([]*SectorOnChainInfo, 0, sectors.Length()) + var info7 miner7.SectorOnChainInfo + if err := sectors.ForEach(&info7, func(_ int64) error { + info := fromV7SectorOnChainInfo(info7) + infos = append(infos, &info) + return nil + }); err != nil { + return nil, err + } + return infos, nil + } + + // Otherwise, load selected. + infos7, err := sectors.Load(*snos) + if err != nil { + return nil, err + } + infos := make([]*SectorOnChainInfo, len(infos7)) + for i, info7 := range infos7 { + info := fromV7SectorOnChainInfo(*info7) + infos[i] = &info + } + return infos, nil +} + +func (s *state7) loadAllocatedSectorNumbers() (bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors) + return allocatedSectors, err +} + +func (s *state7) IsAllocated(num abi.SectorNumber) (bool, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return false, err + } + + return allocatedSectors.IsSet(uint64(num)) +} + +func (s *state7) GetProvingPeriodStart() (abi.ChainEpoch, error) { + return s.State.ProvingPeriodStart, nil +} + +func (s *state7) UnallocatedSectorNumbers(count int) ([]abi.SectorNumber, error) { + allocatedSectors, err := s.loadAllocatedSectorNumbers() + if err != nil { + return nil, err + } + + allocatedRuns, err := allocatedSectors.RunIterator() + if err != nil { + return nil, err + } + + unallocatedRuns, err := rle.Subtract( + &rle.RunSliceIterator{Runs: []rle.Run{{Val: true, Len: abi.MaxSectorNumber}}}, + allocatedRuns, + ) + if err != nil { + return nil, err + } + + iter, err := rle.BitsFromRuns(unallocatedRuns) + if err != nil { + return nil, err + } + + sectors := make([]abi.SectorNumber, 0, count) + for iter.HasNext() && len(sectors) < count { + nextNo, err := iter.Next() + if err != nil { + return nil, err + } + sectors = append(sectors, abi.SectorNumber(nextNo)) + } + + return sectors, nil +} + +func (s *state7) GetAllocatedSectors() (*bitfield.BitField, error) { + var allocatedSectors bitfield.BitField + if err := s.store.Get(s.store.Context(), s.State.AllocatedSectors, &allocatedSectors); err != nil { + return nil, err + } + + return &allocatedSectors, nil +} + +func (s *state7) LoadDeadline(idx uint64) (Deadline, error) { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return nil, err + } + dl, err := dls.LoadDeadline(s.store, idx) + if err != nil { + return nil, err + } + return &deadline7{*dl, s.store}, nil +} + +func (s *state7) ForEachDeadline(cb func(uint64, Deadline) error) error { + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + return dls.ForEach(s.store, func(i uint64, dl *miner7.Deadline) error { + return cb(i, &deadline7{*dl, s.store}) + }) +} + +func (s *state7) NumDeadlines() (uint64, error) { + return miner7.WPoStPeriodDeadlines, nil +} + +func (s *state7) DeadlinesChanged(other State) (bool, error) { + other7, ok := other.(*state7) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !s.State.Deadlines.Equals(other7.Deadlines), nil +} + +func (s *state7) MinerInfoChanged(other State) (bool, error) { + other0, ok := other.(*state7) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Info.Equals(other0.State.Info), nil +} + +func (s *state7) Info() (MinerInfo, error) { + info, err := s.State.GetInfo(s.store) + if err != nil { + return MinerInfo{}, err + } + + var pid *peer.ID + if peerID, err := peer.IDFromBytes(info.PeerId); err == nil { + pid = &peerID + } + + mi := MinerInfo{ + Owner: info.Owner, + Worker: info.Worker, + ControlAddresses: info.ControlAddresses, + + NewWorker: address.Undef, + WorkerChangeEpoch: -1, + + PeerId: pid, + Multiaddrs: info.Multiaddrs, + WindowPoStProofType: info.WindowPoStProofType, + SectorSize: info.SectorSize, + WindowPoStPartitionSectors: info.WindowPoStPartitionSectors, + ConsensusFaultElapsed: info.ConsensusFaultElapsed, + } + + if info.PendingWorkerKey != nil { + mi.NewWorker = info.PendingWorkerKey.NewWorker + mi.WorkerChangeEpoch = info.PendingWorkerKey.EffectiveAt + } + + return mi, nil +} + +func (s *state7) DeadlineInfo(epoch abi.ChainEpoch) (*dline.Info, error) { + return s.State.RecordedDeadlineInfo(epoch), nil +} + +func (s *state7) DeadlineCronActive() (bool, error) { + return s.State.DeadlineCronActive, nil +} + +func (s *state7) sectors() (adt.Array, error) { + return adt7.AsArray(s.store, s.Sectors, miner7.SectorsAmtBitwidth) +} + +func (s *state7) decodeSectorOnChainInfo(val *cbg.Deferred) (SectorOnChainInfo, error) { + var si miner7.SectorOnChainInfo + err := si.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorOnChainInfo{}, err + } + + return fromV7SectorOnChainInfo(si), nil +} + +func (s *state7) precommits() (adt.Map, error) { + return adt7.AsMap(s.store, s.PreCommittedSectors, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) decodeSectorPreCommitOnChainInfo(val *cbg.Deferred) (SectorPreCommitOnChainInfo, error) { + var sp miner7.SectorPreCommitOnChainInfo + err := sp.UnmarshalCBOR(bytes.NewReader(val.Raw)) + if err != nil { + return SectorPreCommitOnChainInfo{}, err + } + + return fromV7SectorPreCommitOnChainInfo(sp), nil +} + +func (s *state7) EraseAllUnproven() error { + + dls, err := s.State.LoadDeadlines(s.store) + if err != nil { + return err + } + + err = dls.ForEach(s.store, func(dindx uint64, dl *miner7.Deadline) error { + ps, err := dl.PartitionsArray(s.store) + if err != nil { + return err + } + + var part miner7.Partition + err = ps.ForEach(&part, func(pindx int64) error { + _ = part.ActivateUnproven() + err = ps.Set(uint64(pindx), &part) + return nil + }) + + if err != nil { + return err + } + + dl.Partitions, err = ps.Root() + if err != nil { + return err + } + + return dls.UpdateDeadline(s.store, dindx, dl) + }) + if err != nil { + return err + } + + return s.State.SaveDeadlines(s.store, dls) + +} + +func (d *deadline7) LoadPartition(idx uint64) (Partition, error) { + p, err := d.Deadline.LoadPartition(d.store, idx) + if err != nil { + return nil, err + } + return &partition7{*p, d.store}, nil +} + +func (d *deadline7) ForEachPartition(cb func(uint64, Partition) error) error { + ps, err := d.Deadline.PartitionsArray(d.store) + if err != nil { + return err + } + var part miner7.Partition + return ps.ForEach(&part, func(i int64) error { + return cb(uint64(i), &partition7{part, d.store}) + }) +} + +func (d *deadline7) PartitionsChanged(other Deadline) (bool, error) { + other7, ok := other.(*deadline7) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + + return !d.Deadline.Partitions.Equals(other7.Deadline.Partitions), nil +} + +func (d *deadline7) PartitionsPoSted() (bitfield.BitField, error) { + return d.Deadline.PartitionsPoSted, nil +} + +func (d *deadline7) DisputableProofCount() (uint64, error) { + + ops, err := d.OptimisticProofsSnapshotArray(d.store) + if err != nil { + return 0, err + } + + return ops.Length(), nil + +} + +func (p *partition7) AllSectors() (bitfield.BitField, error) { + return p.Partition.Sectors, nil +} + +func (p *partition7) FaultySectors() (bitfield.BitField, error) { + return p.Partition.Faults, nil +} + +func (p *partition7) RecoveringSectors() (bitfield.BitField, error) { + return p.Partition.Recoveries, nil +} + +func (p *partition7) UnprovenSectors() (bitfield.BitField, error) { + return p.Partition.Unproven, nil +} + +func fromV7SectorOnChainInfo(v7 miner7.SectorOnChainInfo) SectorOnChainInfo { + info := SectorOnChainInfo{ + SectorNumber: v7.SectorNumber, + SealProof: v7.SealProof, + SealedCID: v7.SealedCID, + DealIDs: v7.DealIDs, + Activation: v7.Activation, + Expiration: v7.Expiration, + DealWeight: v7.DealWeight, + VerifiedDealWeight: v7.VerifiedDealWeight, + InitialPledge: v7.InitialPledge, + ExpectedDayReward: v7.ExpectedDayReward, + ExpectedStoragePledge: v7.ExpectedStoragePledge, + + SectorKeyCID: v7.SectorKeyCID, + } + return info +} + +func fromV7SectorPreCommitOnChainInfo(v7 miner7.SectorPreCommitOnChainInfo) SectorPreCommitOnChainInfo { + + return SectorPreCommitOnChainInfo{ + Info: (SectorPreCommitInfo)(v7.Info), + PreCommitDeposit: v7.PreCommitDeposit, + PreCommitEpoch: v7.PreCommitEpoch, + DealWeight: v7.DealWeight, + VerifiedDealWeight: v7.VerifiedDealWeight, + } + +} + +func (s *state7) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/miner/utils.go b/venus-shared/actors/builtin/miner/utils.go new file mode 100644 index 0000000000..a4aaaf9721 --- /dev/null +++ b/venus-shared/actors/builtin/miner/utils.go @@ -0,0 +1,90 @@ +// FETCHED FROM LOTUS: builtin/miner/utils.go + +package miner + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" +) + +func AllPartSectors(mas State, sget func(Partition) (bitfield.BitField, error)) (bitfield.BitField, error) { + var parts []bitfield.BitField + + err := mas.ForEachDeadline(func(dlidx uint64, dl Deadline) error { + return dl.ForEachPartition(func(partidx uint64, part Partition) error { + s, err := sget(part) + if err != nil { + return xerrors.Errorf("getting sector list (dl: %d, part %d): %w", dlidx, partidx, err) + } + + parts = append(parts, s) + return nil + }) + }) + if err != nil { + return bitfield.BitField{}, err + } + + return bitfield.MultiMerge(parts...) +} + +// SealProofTypeFromSectorSize returns preferred seal proof type for creating +// new miner actors and new sectors +func SealProofTypeFromSectorSize(ssize abi.SectorSize, nv network.Version) (abi.RegisteredSealProof, error) { + switch { + case nv < network.Version7: + switch ssize { + case 2 << 10: + return abi.RegisteredSealProof_StackedDrg2KiBV1, nil + case 8 << 20: + return abi.RegisteredSealProof_StackedDrg8MiBV1, nil + case 512 << 20: + return abi.RegisteredSealProof_StackedDrg512MiBV1, nil + case 32 << 30: + return abi.RegisteredSealProof_StackedDrg32GiBV1, nil + case 64 << 30: + return abi.RegisteredSealProof_StackedDrg64GiBV1, nil + default: + return 0, xerrors.Errorf("unsupported sector size for miner: %v", ssize) + } + case nv >= network.Version7: + switch ssize { + case 2 << 10: + return abi.RegisteredSealProof_StackedDrg2KiBV1_1, nil + case 8 << 20: + return abi.RegisteredSealProof_StackedDrg8MiBV1_1, nil + case 512 << 20: + return abi.RegisteredSealProof_StackedDrg512MiBV1_1, nil + case 32 << 30: + return abi.RegisteredSealProof_StackedDrg32GiBV1_1, nil + case 64 << 30: + return abi.RegisteredSealProof_StackedDrg64GiBV1_1, nil + default: + return 0, xerrors.Errorf("unsupported sector size for miner: %v", ssize) + } + } + + return 0, xerrors.Errorf("unsupported network version") +} + +// WindowPoStProofTypeFromSectorSize returns preferred post proof type for creating +// new miner actors and new sectors +func WindowPoStProofTypeFromSectorSize(ssize abi.SectorSize) (abi.RegisteredPoStProof, error) { + switch ssize { + case 2 << 10: + return abi.RegisteredPoStProof_StackedDrgWindow2KiBV1, nil + case 8 << 20: + return abi.RegisteredPoStProof_StackedDrgWindow8MiBV1, nil + case 512 << 20: + return abi.RegisteredPoStProof_StackedDrgWindow512MiBV1, nil + case 32 << 30: + return abi.RegisteredPoStProof_StackedDrgWindow32GiBV1, nil + case 64 << 30: + return abi.RegisteredPoStProof_StackedDrgWindow64GiBV1, nil + default: + return 0, xerrors.Errorf("unsupported sector size for miner: %v", ssize) + } +} diff --git a/venus-shared/actors/builtin/multisig/actor.go b/venus-shared/actors/builtin/multisig/actor.go new file mode 100644 index 0000000000..bb1d463043 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/actor.go @@ -0,0 +1,250 @@ +// FETCHED FROM LOTUS: builtin/multisig/actor.go.template + +package multisig + +import ( + "fmt" + + "github.com/minio/blake2b-simd" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + msig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" + msig7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/multisig" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func init() { + + builtin.RegisterActorState(builtin0.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.MultisigActorCodeID: + return load0(store, act.Head) + + case builtin2.MultisigActorCodeID: + return load2(store, act.Head) + + case builtin3.MultisigActorCodeID: + return load3(store, act.Head) + + case builtin4.MultisigActorCodeID: + return load4(store, act.Head) + + case builtin5.MultisigActorCodeID: + return load5(store, act.Head) + + case builtin6.MultisigActorCodeID: + return load6(store, act.Head) + + case builtin7.MultisigActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + switch av { + + case actors.Version0: + return make0(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version2: + return make2(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version3: + return make3(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version4: + return make4(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version5: + return make5(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version6: + return make6(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + case actors.Version7: + return make7(store, signers, threshold, startEpoch, unlockDuration, initialBalance) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.MultisigActorCodeID, nil + + case actors.Version2: + return builtin2.MultisigActorCodeID, nil + + case actors.Version3: + return builtin3.MultisigActorCodeID, nil + + case actors.Version4: + return builtin4.MultisigActorCodeID, nil + + case actors.Version5: + return builtin5.MultisigActorCodeID, nil + + case actors.Version6: + return builtin6.MultisigActorCodeID, nil + + case actors.Version7: + return builtin7.MultisigActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + LockedBalance(epoch abi.ChainEpoch) (abi.TokenAmount, error) + StartEpoch() (abi.ChainEpoch, error) + UnlockDuration() (abi.ChainEpoch, error) + InitialBalance() (abi.TokenAmount, error) + Threshold() (uint64, error) + Signers() ([]address.Address, error) + + ForEachPendingTxn(func(id int64, txn Transaction) error) error + PendingTxnChanged(State) (bool, error) + + transactions() (adt.Map, error) + decodeTransaction(val *cbg.Deferred) (Transaction, error) + GetState() interface{} +} + +type Transaction = msig0.Transaction + +var Methods = builtin7.MethodsMultisig + +func Message(version actors.Version, from address.Address) MessageBuilder { + switch version { + + case actors.Version0: + return message0{from} + + case actors.Version2: + return message2{message0{from}} + + case actors.Version3: + return message3{message0{from}} + + case actors.Version4: + return message4{message0{from}} + + case actors.Version5: + return message5{message0{from}} + + case actors.Version6: + return message6{message0{from}} + + case actors.Version7: + return message7{message0{from}} + default: + panic(fmt.Sprintf("unsupported actors version: %d", version)) + } +} + +type MessageBuilder interface { + // Create a new multisig with the specified parameters. + Create(signers []address.Address, threshold uint64, + vestingStart, vestingDuration abi.ChainEpoch, + initialAmount abi.TokenAmount) (*types.Message, error) + + // Propose a transaction to the given multisig. + Propose(msig, target address.Address, amt abi.TokenAmount, + method abi.MethodNum, params []byte) (*types.Message, error) + + // Approve a multisig transaction. The "hash" is optional. + Approve(msig address.Address, txID uint64, hash *ProposalHashData) (*types.Message, error) + + // Cancel a multisig transaction. The "hash" is optional. + Cancel(msig address.Address, txID uint64, hash *ProposalHashData) (*types.Message, error) +} + +// this type is the same between v0 and v2 +type ProposalHashData = msig7.ProposalHashData +type ProposeReturn = msig7.ProposeReturn +type ProposeParams = msig7.ProposeParams +type ApproveReturn = msig7.ApproveReturn + +func txnParams(id uint64, data *ProposalHashData) ([]byte, error) { + params := msig7.TxnIDParams{ID: msig7.TxnID(id)} + if data != nil { + if data.Requester.Protocol() != address.ID { + return nil, xerrors.Errorf("proposer address must be an ID address, was %s", data.Requester) + } + if data.Value.Sign() == -1 { + return nil, xerrors.Errorf("proposal value must be non-negative, was %s", data.Value) + } + if data.To == address.Undef { + return nil, xerrors.Errorf("proposed destination address must be set") + } + pser, err := data.Serialize() + if err != nil { + return nil, err + } + hash := blake2b.Sum256(pser) + params.ProposalHash = hash[:] + } + + return actors.SerializeParams(¶ms) +} diff --git a/venus-shared/actors/builtin/multisig/actor.go.template b/venus-shared/actors/builtin/multisig/actor.go.template new file mode 100644 index 0000000000..04c9bfaecb --- /dev/null +++ b/venus-shared/actors/builtin/multisig/actor.go.template @@ -0,0 +1,143 @@ +// FETCHED FROM LOTUS: builtin/multisig/actor.go.template + +package multisig + +import ( + "fmt" + + "github.com/minio/blake2b-simd" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + + msig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" + msig{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/builtin/multisig" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.MultisigActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.MultisigActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store, signers, threshold, startEpoch, unlockDuration, initialBalance) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.MultisigActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + LockedBalance(epoch abi.ChainEpoch) (abi.TokenAmount, error) + StartEpoch() (abi.ChainEpoch, error) + UnlockDuration() (abi.ChainEpoch, error) + InitialBalance() (abi.TokenAmount, error) + Threshold() (uint64, error) + Signers() ([]address.Address, error) + + ForEachPendingTxn(func(id int64, txn Transaction) error) error + PendingTxnChanged(State) (bool, error) + + transactions() (adt.Map, error) + decodeTransaction(val *cbg.Deferred) (Transaction, error) + GetState() interface{} +} + +type Transaction = msig0.Transaction + +var Methods = builtin{{.latestVersion}}.MethodsMultisig + +func Message(version actors.Version, from address.Address) MessageBuilder { + switch version { +{{range .versions}} + case actors.Version{{.}}: + return message{{.}}{{"{"}}{{if (ge . 2)}}message0{from}{{else}}from{{end}}} +{{end}} default: + panic(fmt.Sprintf("unsupported actors version: %d", version)) + } +} + +type MessageBuilder interface { + // Create a new multisig with the specified parameters. + Create(signers []address.Address, threshold uint64, + vestingStart, vestingDuration abi.ChainEpoch, + initialAmount abi.TokenAmount) (*types.Message, error) + + // Propose a transaction to the given multisig. + Propose(msig, target address.Address, amt abi.TokenAmount, + method abi.MethodNum, params []byte) (*types.Message, error) + + // Approve a multisig transaction. The "hash" is optional. + Approve(msig address.Address, txID uint64, hash *ProposalHashData) (*types.Message, error) + + // Cancel a multisig transaction. The "hash" is optional. + Cancel(msig address.Address, txID uint64, hash *ProposalHashData) (*types.Message, error) +} + +// this type is the same between v0 and v2 +type ProposalHashData = msig{{.latestVersion}}.ProposalHashData +type ProposeReturn = msig{{.latestVersion}}.ProposeReturn +type ProposeParams = msig{{.latestVersion}}.ProposeParams +type ApproveReturn = msig{{.latestVersion}}.ApproveReturn + +func txnParams(id uint64, data *ProposalHashData) ([]byte, error) { + params := msig{{.latestVersion}}.TxnIDParams{ID: msig{{.latestVersion}}.TxnID(id)} + if data != nil { + if data.Requester.Protocol() != address.ID { + return nil, xerrors.Errorf("proposer address must be an ID address, was %s", data.Requester) + } + if data.Value.Sign() == -1 { + return nil, xerrors.Errorf("proposal value must be non-negative, was %s", data.Value) + } + if data.To == address.Undef { + return nil, xerrors.Errorf("proposed destination address must be set") + } + pser, err := data.Serialize() + if err != nil { + return nil, err + } + hash := blake2b.Sum256(pser) + params.ProposalHash = hash[:] + } + + return actors.SerializeParams(¶ms) +} diff --git a/venus-shared/actors/builtin/multisig/diff.go b/venus-shared/actors/builtin/multisig/diff.go new file mode 100644 index 0000000000..5cd8edd5d9 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/diff.go @@ -0,0 +1,136 @@ +// FETCHED FROM LOTUS: builtin/multisig/diff.go + +package multisig + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" +) + +type PendingTransactionChanges struct { + Added []TransactionChange + Modified []TransactionModification + Removed []TransactionChange +} + +type TransactionChange struct { + TxID int64 + Tx Transaction +} + +type TransactionModification struct { + TxID int64 + From Transaction + To Transaction +} + +func DiffPendingTransactions(pre, cur State) (*PendingTransactionChanges, error) { + results := new(PendingTransactionChanges) + if changed, err := pre.PendingTxnChanged(cur); err != nil { + return nil, err + } else if !changed { // if nothing has changed then return an empty result and bail. + return results, nil + } + + pret, err := pre.transactions() + if err != nil { + return nil, err + } + + curt, err := cur.transactions() + if err != nil { + return nil, err + } + + if err := adt.DiffAdtMap(pret, curt, &transactionDiffer{results, pre, cur}); err != nil { + return nil, err + } + return results, nil +} + +type transactionDiffer struct { + Results *PendingTransactionChanges + pre, after State +} + +func (t *transactionDiffer) AsKey(key string) (abi.Keyer, error) { + txID, err := abi.ParseIntKey(key) + if err != nil { + return nil, err + } + return abi.IntKey(txID), nil +} + +func (t *transactionDiffer) Add(key string, val *cbg.Deferred) error { + txID, err := abi.ParseIntKey(key) + if err != nil { + return err + } + tx, err := t.after.decodeTransaction(val) + if err != nil { + return err + } + t.Results.Added = append(t.Results.Added, TransactionChange{ + TxID: txID, + Tx: tx, + }) + return nil +} + +func (t *transactionDiffer) Modify(key string, from, to *cbg.Deferred) error { + txID, err := abi.ParseIntKey(key) + if err != nil { + return err + } + + txFrom, err := t.pre.decodeTransaction(from) + if err != nil { + return err + } + + txTo, err := t.after.decodeTransaction(to) + if err != nil { + return err + } + + if approvalsChanged(txFrom.Approved, txTo.Approved) { + t.Results.Modified = append(t.Results.Modified, TransactionModification{ + TxID: txID, + From: txFrom, + To: txTo, + }) + } + + return nil +} + +func approvalsChanged(from, to []address.Address) bool { + if len(from) != len(to) { + return true + } + for idx := range from { + if from[idx] != to[idx] { + return true + } + } + return false +} + +func (t *transactionDiffer) Remove(key string, val *cbg.Deferred) error { + txID, err := abi.ParseIntKey(key) + if err != nil { + return err + } + tx, err := t.pre.decodeTransaction(val) + if err != nil { + return err + } + t.Results.Removed = append(t.Results.Removed, TransactionChange{ + TxID: txID, + Tx: tx, + }) + return nil +} diff --git a/venus-shared/actors/builtin/multisig/message.sep.go.template b/venus-shared/actors/builtin/multisig/message.sep.go.template new file mode 100644 index 0000000000..8ccbe91a25 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/message.sep.go.template @@ -0,0 +1,148 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" + init{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/init" + multisig{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/multisig" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message{{.v}} struct{ {{if (ge .v 2)}}message0{{else}}from address.Address{{end}} } + +func (m message{{.v}}) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } +{{if (le .v 1)}} + if unlockStart != 0 { + return nil, xerrors.Errorf("actors v0 does not support a non-zero vesting start time") + } +{{end}} + // Set up constructor parameters for multisig + msigParams := &multisig{{.v}}.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration,{{if (ge .v 2)}} + StartEpoch: unlockStart,{{end}} + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init{{.v}}.ExecParams{ + CodeCID: builtin{{.v}}.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin{{.v}}.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} + +{{if (le .v 1)}} + +func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, + method abi.MethodNum, params []byte) (*types.Message, error) { + + if msig == address.Undef { + return nil, xerrors.Errorf("must provide a multisig address for proposal") + } + + if to == address.Undef { + return nil, xerrors.Errorf("must provide a target address for proposal") + } + + if amt.Sign() == -1 { + return nil, xerrors.Errorf("must provide a non-negative amount for proposed send") + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + enc, actErr := actors.SerializeParams(&multisig0.ProposeParams{ + To: to, + Value: amt, + Method: method, + Params: params, + }) + if actErr != nil { + return nil, xerrors.Errorf("failed to serialize parameters: %w", actErr) + } + + return &types.Message{ + To: msig, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin0.MethodsMultisig.Propose, + Params: enc, + }, nil +} + +func (m message0) Approve(msig address.Address, txID uint64, hashData *ProposalHashData) (*types.Message, error) { + enc, err := txnParams(txID, hashData) + if err != nil { + return nil, err + } + + return &types.Message{ + To: msig, + From: m.from, + Value: types.NewInt(0), + Method: builtin0.MethodsMultisig.Approve, + Params: enc, + }, nil +} + +func (m message0) Cancel(msig address.Address, txID uint64, hashData *ProposalHashData) (*types.Message, error) { + enc, err := txnParams(txID, hashData) + if err != nil { + return nil, err + } + + return &types.Message{ + To: msig, + From: m.from, + Value: types.NewInt(0), + Method: builtin0.MethodsMultisig.Cancel, + Params: enc, + }, nil +} +{{end}} diff --git a/venus-shared/actors/builtin/multisig/message.v0.go b/venus-shared/actors/builtin/multisig/message.v0.go new file mode 100644 index 0000000000..5bdb018027 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/message.v0.go @@ -0,0 +1,144 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + init0 "github.com/filecoin-project/specs-actors/actors/builtin/init" + multisig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message0 struct{ from address.Address } + +func (m message0) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + if unlockStart != 0 { + return nil, xerrors.Errorf("actors v0 does not support a non-zero vesting start time") + } + + // Set up constructor parameters for multisig + msigParams := &multisig0.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init0.ExecParams{ + CodeCID: builtin0.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin0.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} + +func (m message0) Propose(msig, to address.Address, amt abi.TokenAmount, + method abi.MethodNum, params []byte) (*types.Message, error) { + + if msig == address.Undef { + return nil, xerrors.Errorf("must provide a multisig address for proposal") + } + + if to == address.Undef { + return nil, xerrors.Errorf("must provide a target address for proposal") + } + + if amt.Sign() == -1 { + return nil, xerrors.Errorf("must provide a non-negative amount for proposed send") + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + enc, actErr := actors.SerializeParams(&multisig0.ProposeParams{ + To: to, + Value: amt, + Method: method, + Params: params, + }) + if actErr != nil { + return nil, xerrors.Errorf("failed to serialize parameters: %w", actErr) + } + + return &types.Message{ + To: msig, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin0.MethodsMultisig.Propose, + Params: enc, + }, nil +} + +func (m message0) Approve(msig address.Address, txID uint64, hashData *ProposalHashData) (*types.Message, error) { + enc, err := txnParams(txID, hashData) + if err != nil { + return nil, err + } + + return &types.Message{ + To: msig, + From: m.from, + Value: types.NewInt(0), + Method: builtin0.MethodsMultisig.Approve, + Params: enc, + }, nil +} + +func (m message0) Cancel(msig address.Address, txID uint64, hashData *ProposalHashData) (*types.Message, error) { + enc, err := txnParams(txID, hashData) + if err != nil { + return nil, err + } + + return &types.Message{ + To: msig, + From: m.from, + Value: types.NewInt(0), + Method: builtin0.MethodsMultisig.Cancel, + Params: enc, + }, nil +} diff --git a/venus-shared/actors/builtin/multisig/message.v2.go b/venus-shared/actors/builtin/multisig/message.v2.go new file mode 100644 index 0000000000..43b781eb12 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/message.v2.go @@ -0,0 +1,73 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" + multisig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message2 struct{ message0 } + +func (m message2) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig2.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init2.ExecParams{ + CodeCID: builtin2.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin2.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} diff --git a/venus-shared/actors/builtin/multisig/message.v3.go b/venus-shared/actors/builtin/multisig/message.v3.go new file mode 100644 index 0000000000..b65de2c3e2 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/message.v3.go @@ -0,0 +1,73 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + init3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/init" + multisig3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/multisig" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message3 struct{ message0 } + +func (m message3) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig3.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init3.ExecParams{ + CodeCID: builtin3.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin3.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} diff --git a/venus-shared/actors/builtin/multisig/message.v4.go b/venus-shared/actors/builtin/multisig/message.v4.go new file mode 100644 index 0000000000..c0421bad64 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/message.v4.go @@ -0,0 +1,73 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + init4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/init" + multisig4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/multisig" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message4 struct{ message0 } + +func (m message4) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig4.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init4.ExecParams{ + CodeCID: builtin4.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin4.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} diff --git a/venus-shared/actors/builtin/multisig/message.v5.go b/venus-shared/actors/builtin/multisig/message.v5.go new file mode 100644 index 0000000000..f4b0315a72 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/message.v5.go @@ -0,0 +1,73 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + init5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/init" + multisig5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/multisig" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message5 struct{ message0 } + +func (m message5) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig5.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init5.ExecParams{ + CodeCID: builtin5.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin5.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} diff --git a/venus-shared/actors/builtin/multisig/message.v6.go b/venus-shared/actors/builtin/multisig/message.v6.go new file mode 100644 index 0000000000..f298cf742b --- /dev/null +++ b/venus-shared/actors/builtin/multisig/message.v6.go @@ -0,0 +1,73 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + init6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/init" + multisig6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/multisig" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message6 struct{ message0 } + +func (m message6) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig6.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init6.ExecParams{ + CodeCID: builtin6.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin6.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} diff --git a/venus-shared/actors/builtin/multisig/message.v7.go b/venus-shared/actors/builtin/multisig/message.v7.go new file mode 100644 index 0000000000..770001d4cc --- /dev/null +++ b/venus-shared/actors/builtin/multisig/message.v7.go @@ -0,0 +1,73 @@ +// FETCHED FROM LOTUS: builtin/multisig/message.go.template + +package multisig + +import ( + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + init7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/init" + multisig7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/multisig" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message7 struct{ message0 } + +func (m message7) Create( + signers []address.Address, threshold uint64, + unlockStart, unlockDuration abi.ChainEpoch, + initialAmount abi.TokenAmount, +) (*types.Message, error) { + + lenAddrs := uint64(len(signers)) + + if lenAddrs < threshold { + return nil, xerrors.Errorf("cannot require signing of more addresses than provided for multisig") + } + + if threshold == 0 { + threshold = lenAddrs + } + + if m.from == address.Undef { + return nil, xerrors.Errorf("must provide source address") + } + + // Set up constructor parameters for multisig + msigParams := &multisig7.ConstructorParams{ + Signers: signers, + NumApprovalsThreshold: threshold, + UnlockDuration: unlockDuration, + StartEpoch: unlockStart, + } + + enc, actErr := actors.SerializeParams(msigParams) + if actErr != nil { + return nil, actErr + } + + // new actors are created by invoking 'exec' on the init actor with the constructor params + execParams := &init7.ExecParams{ + CodeCID: builtin7.MultisigActorCodeID, + ConstructorParams: enc, + } + + enc, actErr = actors.SerializeParams(execParams) + if actErr != nil { + return nil, actErr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Method: builtin7.MethodsInit.Exec, + Params: enc, + Value: initialAmount, + }, nil +} diff --git a/venus-shared/actors/builtin/multisig/state.sep.go.template b/venus-shared/actors/builtin/multisig/state.sep.go.template new file mode 100644 index 0000000000..9823c41b78 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/state.sep.go.template @@ -0,0 +1,129 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + +{{if (ge .v 3)}} + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" +{{end}} + msig{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/multisig" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state{{.v}}{store: store} + out.State = msig{{.v}}.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + {{if (le .v 2)}} + em, err := adt{{.v}}.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + {{else}} + em, err := adt{{.v}}.StoreEmptyMap(store, builtin{{.v}}.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + {{end}} + return &out, nil +} + +type state{{.v}} struct { + msig{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state{{.v}}) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state{{.v}}) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state{{.v}}) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state{{.v}}) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state{{.v}}) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state{{.v}}) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt{{.v}}.AsMap(s.store, s.State.PendingTxns{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) + if err != nil { + return err + } + var out msig{{.v}}.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state{{.v}}) PendingTxnChanged(other State) (bool, error) { + other{{.v}}, ok := other.(*state{{.v}}) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other{{.v}}.PendingTxns), nil +} + +func (s *state{{.v}}) transactions() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.PendingTxns{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig{{.v}}.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/multisig/state.v0.go b/venus-shared/actors/builtin/multisig/state.v0.go new file mode 100644 index 0000000000..e8379632fb --- /dev/null +++ b/venus-shared/actors/builtin/multisig/state.v0.go @@ -0,0 +1,119 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + msig0 "github.com/filecoin-project/specs-actors/actors/builtin/multisig" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state0{store: store} + out.State = msig0.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt0.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state0 struct { + msig0.State + store adt.Store +} + +func (s *state0) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state0) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state0) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state0) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state0) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state0) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state0) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt0.AsMap(s.store, s.State.PendingTxns) + if err != nil { + return err + } + var out msig0.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state0) PendingTxnChanged(other State) (bool, error) { + other0, ok := other.(*state0) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other0.PendingTxns), nil +} + +func (s *state0) transactions() (adt.Map, error) { + return adt0.AsMap(s.store, s.PendingTxns) +} + +func (s *state0) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig0.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state0) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/multisig/state.v2.go b/venus-shared/actors/builtin/multisig/state.v2.go new file mode 100644 index 0000000000..564f3b3e39 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/state.v2.go @@ -0,0 +1,119 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + msig2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/multisig" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state2{store: store} + out.State = msig2.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt2.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state2 struct { + msig2.State + store adt.Store +} + +func (s *state2) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state2) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state2) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state2) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state2) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state2) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state2) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt2.AsMap(s.store, s.State.PendingTxns) + if err != nil { + return err + } + var out msig2.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state2) PendingTxnChanged(other State) (bool, error) { + other2, ok := other.(*state2) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other2.PendingTxns), nil +} + +func (s *state2) transactions() (adt.Map, error) { + return adt2.AsMap(s.store, s.PendingTxns) +} + +func (s *state2) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig2.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state2) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/multisig/state.v3.go b/venus-shared/actors/builtin/multisig/state.v3.go new file mode 100644 index 0000000000..35c9cc3db6 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/state.v3.go @@ -0,0 +1,121 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + msig3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/multisig" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state3{store: store} + out.State = msig3.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt3.StoreEmptyMap(store, builtin3.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state3 struct { + msig3.State + store adt.Store +} + +func (s *state3) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state3) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state3) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state3) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state3) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state3) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state3) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt3.AsMap(s.store, s.State.PendingTxns, builtin3.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig3.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state3) PendingTxnChanged(other State) (bool, error) { + other3, ok := other.(*state3) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other3.PendingTxns), nil +} + +func (s *state3) transactions() (adt.Map, error) { + return adt3.AsMap(s.store, s.PendingTxns, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig3.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state3) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/multisig/state.v4.go b/venus-shared/actors/builtin/multisig/state.v4.go new file mode 100644 index 0000000000..68b69a8885 --- /dev/null +++ b/venus-shared/actors/builtin/multisig/state.v4.go @@ -0,0 +1,121 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + msig4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/multisig" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state4{store: store} + out.State = msig4.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt4.StoreEmptyMap(store, builtin4.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state4 struct { + msig4.State + store adt.Store +} + +func (s *state4) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state4) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state4) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state4) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state4) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state4) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state4) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt4.AsMap(s.store, s.State.PendingTxns, builtin4.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig4.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state4) PendingTxnChanged(other State) (bool, error) { + other4, ok := other.(*state4) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other4.PendingTxns), nil +} + +func (s *state4) transactions() (adt.Map, error) { + return adt4.AsMap(s.store, s.PendingTxns, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig4.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state4) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/multisig/state.v5.go b/venus-shared/actors/builtin/multisig/state.v5.go new file mode 100644 index 0000000000..8db9b15dfb --- /dev/null +++ b/venus-shared/actors/builtin/multisig/state.v5.go @@ -0,0 +1,121 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + msig5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/multisig" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state5{store: store} + out.State = msig5.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt5.StoreEmptyMap(store, builtin5.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state5 struct { + msig5.State + store adt.Store +} + +func (s *state5) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state5) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state5) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state5) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state5) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state5) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state5) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt5.AsMap(s.store, s.State.PendingTxns, builtin5.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig5.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state5) PendingTxnChanged(other State) (bool, error) { + other5, ok := other.(*state5) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other5.PendingTxns), nil +} + +func (s *state5) transactions() (adt.Map, error) { + return adt5.AsMap(s.store, s.PendingTxns, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig5.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state5) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/multisig/state.v6.go b/venus-shared/actors/builtin/multisig/state.v6.go new file mode 100644 index 0000000000..81679baa5e --- /dev/null +++ b/venus-shared/actors/builtin/multisig/state.v6.go @@ -0,0 +1,121 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + msig6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/multisig" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state6{store: store} + out.State = msig6.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt6.StoreEmptyMap(store, builtin6.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state6 struct { + msig6.State + store adt.Store +} + +func (s *state6) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state6) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state6) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state6) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state6) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state6) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state6) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt6.AsMap(s.store, s.State.PendingTxns, builtin6.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig6.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state6) PendingTxnChanged(other State) (bool, error) { + other6, ok := other.(*state6) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other6.PendingTxns), nil +} + +func (s *state6) transactions() (adt.Map, error) { + return adt6.AsMap(s.store, s.PendingTxns, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig6.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state6) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/multisig/state.v7.go b/venus-shared/actors/builtin/multisig/state.v7.go new file mode 100644 index 0000000000..6fd8e10bae --- /dev/null +++ b/venus-shared/actors/builtin/multisig/state.v7.go @@ -0,0 +1,121 @@ +// FETCHED FROM LOTUS: builtin/multisig/state.go.template + +package multisig + +import ( + "bytes" + "encoding/binary" + + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + msig7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/multisig" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store, signers []address.Address, threshold uint64, startEpoch abi.ChainEpoch, unlockDuration abi.ChainEpoch, initialBalance abi.TokenAmount) (State, error) { + out := state7{store: store} + out.State = msig7.State{} + out.State.Signers = signers + out.State.NumApprovalsThreshold = threshold + out.State.StartEpoch = startEpoch + out.State.UnlockDuration = unlockDuration + out.State.InitialBalance = initialBalance + + em, err := adt7.StoreEmptyMap(store, builtin7.DefaultHamtBitwidth) + if err != nil { + return nil, err + } + + out.State.PendingTxns = em + + return &out, nil +} + +type state7 struct { + msig7.State + store adt.Store +} + +func (s *state7) LockedBalance(currEpoch abi.ChainEpoch) (abi.TokenAmount, error) { + return s.State.AmountLocked(currEpoch - s.State.StartEpoch), nil +} + +func (s *state7) StartEpoch() (abi.ChainEpoch, error) { + return s.State.StartEpoch, nil +} + +func (s *state7) UnlockDuration() (abi.ChainEpoch, error) { + return s.State.UnlockDuration, nil +} + +func (s *state7) InitialBalance() (abi.TokenAmount, error) { + return s.State.InitialBalance, nil +} + +func (s *state7) Threshold() (uint64, error) { + return s.State.NumApprovalsThreshold, nil +} + +func (s *state7) Signers() ([]address.Address, error) { + return s.State.Signers, nil +} + +func (s *state7) ForEachPendingTxn(cb func(id int64, txn Transaction) error) error { + arr, err := adt7.AsMap(s.store, s.State.PendingTxns, builtin7.DefaultHamtBitwidth) + if err != nil { + return err + } + var out msig7.Transaction + return arr.ForEach(&out, func(key string) error { + txid, n := binary.Varint([]byte(key)) + if n <= 0 { + return xerrors.Errorf("invalid pending transaction key: %v", key) + } + return cb(txid, (Transaction)(out)) //nolint:unconvert + }) +} + +func (s *state7) PendingTxnChanged(other State) (bool, error) { + other7, ok := other.(*state7) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.PendingTxns.Equals(other7.PendingTxns), nil +} + +func (s *state7) transactions() (adt.Map, error) { + return adt7.AsMap(s.store, s.PendingTxns, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) decodeTransaction(val *cbg.Deferred) (Transaction, error) { + var tx msig7.Transaction + if err := tx.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Transaction{}, err + } + return tx, nil +} + +func (s *state7) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/paych/actor.go b/venus-shared/actors/builtin/paych/actor.go new file mode 100644 index 0000000000..af65881ddc --- /dev/null +++ b/venus-shared/actors/builtin/paych/actor.go @@ -0,0 +1,241 @@ +// FETCHED FROM LOTUS: builtin/paych/actor.go.template + +package paych + +import ( + "encoding/base64" + "fmt" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + big "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + ipldcbor "github.com/ipfs/go-ipld-cbor" + + paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func init() { + + builtin.RegisterActorState(builtin0.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +// Load returns an abstract copy of payment channel state, irregardless of actor version +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.PaymentChannelActorCodeID: + return load0(store, act.Head) + + case builtin2.PaymentChannelActorCodeID: + return load2(store, act.Head) + + case builtin3.PaymentChannelActorCodeID: + return load3(store, act.Head) + + case builtin4.PaymentChannelActorCodeID: + return load4(store, act.Head) + + case builtin5.PaymentChannelActorCodeID: + return load5(store, act.Head) + + case builtin6.PaymentChannelActorCodeID: + return load6(store, act.Head) + + case builtin7.PaymentChannelActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.PaymentChannelActorCodeID, nil + + case actors.Version2: + return builtin2.PaymentChannelActorCodeID, nil + + case actors.Version3: + return builtin3.PaymentChannelActorCodeID, nil + + case actors.Version4: + return builtin4.PaymentChannelActorCodeID, nil + + case actors.Version5: + return builtin5.PaymentChannelActorCodeID, nil + + case actors.Version6: + return builtin6.PaymentChannelActorCodeID, nil + + case actors.Version7: + return builtin7.PaymentChannelActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +// State is an abstract version of payment channel state that works across +// versions +type State interface { + cbor.Marshaler + // Channel owner, who has funded the actor + From() (address.Address, error) + // Recipient of payouts from channel + To() (address.Address, error) + + // Height at which the channel can be `Collected` + SettlingAt() (abi.ChainEpoch, error) + + // Amount successfully redeemed through the payment channel, paid out on `Collect()` + ToSend() (abi.TokenAmount, error) + + // Get total number of lanes + LaneCount() (uint64, error) + + // Iterate lane states + ForEachLaneState(cb func(idx uint64, dl LaneState) error) error + + GetState() interface{} +} + +// LaneState is an abstract copy of the state of a single lane +type LaneState interface { + Redeemed() (big.Int, error) + Nonce() (uint64, error) +} + +type SignedVoucher = paych0.SignedVoucher +type ModVerifyParams = paych0.ModVerifyParams + +// DecodeSignedVoucher decodes base64 encoded signed voucher. +func DecodeSignedVoucher(s string) (*SignedVoucher, error) { + data, err := base64.RawURLEncoding.DecodeString(s) + if err != nil { + return nil, err + } + + var sv SignedVoucher + if err := ipldcbor.DecodeInto(data, &sv); err != nil { + return nil, err + } + + return &sv, nil +} + +var Methods = builtin7.MethodsPaych + +func Message(version actors.Version, from address.Address) MessageBuilder { + switch version { + + case actors.Version0: + return message0{from} + + case actors.Version2: + return message2{from} + + case actors.Version3: + return message3{from} + + case actors.Version4: + return message4{from} + + case actors.Version5: + return message5{from} + + case actors.Version6: + return message6{from} + + case actors.Version7: + return message7{from} + + default: + panic(fmt.Sprintf("unsupported actors version: %d", version)) + } +} + +type MessageBuilder interface { + Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) + Update(paych address.Address, voucher *SignedVoucher, secret []byte) (*types.Message, error) + Settle(paych address.Address) (*types.Message, error) + Collect(paych address.Address) (*types.Message, error) +} diff --git a/venus-shared/actors/builtin/paych/actor.go.template b/venus-shared/actors/builtin/paych/actor.go.template new file mode 100644 index 0000000000..f15c72919d --- /dev/null +++ b/venus-shared/actors/builtin/paych/actor.go.template @@ -0,0 +1,134 @@ +// FETCHED FROM LOTUS: builtin/paych/actor.go.template + +package paych + +import ( + "encoding/base64" + "fmt" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + big "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/ipfs/go-cid" + ipldcbor "github.com/ipfs/go-ipld-cbor" + + paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.PaymentChannelActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +// Load returns an abstract copy of payment channel state, irregardless of actor version +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.PaymentChannelActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.PaymentChannelActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +// State is an abstract version of payment channel state that works across +// versions +type State interface { + cbor.Marshaler + // Channel owner, who has funded the actor + From() (address.Address, error) + // Recipient of payouts from channel + To() (address.Address, error) + + // Height at which the channel can be `Collected` + SettlingAt() (abi.ChainEpoch, error) + + // Amount successfully redeemed through the payment channel, paid out on `Collect()` + ToSend() (abi.TokenAmount, error) + + // Get total number of lanes + LaneCount() (uint64, error) + + // Iterate lane states + ForEachLaneState(cb func(idx uint64, dl LaneState) error) error + + GetState() interface{} +} + +// LaneState is an abstract copy of the state of a single lane +type LaneState interface { + Redeemed() (big.Int, error) + Nonce() (uint64, error) +} + +type SignedVoucher = paych0.SignedVoucher +type ModVerifyParams = paych0.ModVerifyParams + +// DecodeSignedVoucher decodes base64 encoded signed voucher. +func DecodeSignedVoucher(s string) (*SignedVoucher, error) { + data, err := base64.RawURLEncoding.DecodeString(s) + if err != nil { + return nil, err + } + + var sv SignedVoucher + if err := ipldcbor.DecodeInto(data, &sv); err != nil { + return nil, err + } + + return &sv, nil +} + +var Methods = builtin{{.latestVersion}}.MethodsPaych + +func Message(version actors.Version, from address.Address) MessageBuilder { + switch version { +{{range .versions}} + case actors.Version{{.}}: + return message{{.}}{from} +{{end}} + default: + panic(fmt.Sprintf("unsupported actors version: %d", version)) + } +} + +type MessageBuilder interface { + Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) + Update(paych address.Address, voucher *SignedVoucher, secret []byte) (*types.Message, error) + Settle(paych address.Address) (*types.Message, error) + Collect(paych address.Address) (*types.Message, error) +} diff --git a/venus-shared/actors/builtin/paych/message.sep.go.template b/venus-shared/actors/builtin/paych/message.sep.go.template new file mode 100644 index 0000000000..563e3ef712 --- /dev/null +++ b/venus-shared/actors/builtin/paych/message.sep.go.template @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" + init{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/init" + paych{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/paych" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message{{.v}} struct{ from address.Address } + +func (m message{{.v}}) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych{{.v}}.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init{{.v}}.ExecParams{ + CodeCID: builtin{{.v}}.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin{{.v}}.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message{{.v}}) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych{{.v}}.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin{{.v}}.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message{{.v}}) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin{{.v}}.MethodsPaych.Settle, + }, nil +} + +func (m message{{.v}}) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin{{.v}}.MethodsPaych.Collect, + }, nil +} diff --git a/venus-shared/actors/builtin/paych/message.v0.go b/venus-shared/actors/builtin/paych/message.v0.go new file mode 100644 index 0000000000..ddf035d5b6 --- /dev/null +++ b/venus-shared/actors/builtin/paych/message.v0.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + init0 "github.com/filecoin-project/specs-actors/actors/builtin/init" + paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message0 struct{ from address.Address } + +func (m message0) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych0.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init0.ExecParams{ + CodeCID: builtin0.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin0.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message0) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych0.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin0.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message0) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin0.MethodsPaych.Settle, + }, nil +} + +func (m message0) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin0.MethodsPaych.Collect, + }, nil +} diff --git a/venus-shared/actors/builtin/paych/message.v2.go b/venus-shared/actors/builtin/paych/message.v2.go new file mode 100644 index 0000000000..ea168b9d63 --- /dev/null +++ b/venus-shared/actors/builtin/paych/message.v2.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + init2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/init" + paych2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/paych" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message2 struct{ from address.Address } + +func (m message2) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych2.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init2.ExecParams{ + CodeCID: builtin2.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin2.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message2) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych2.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin2.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message2) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin2.MethodsPaych.Settle, + }, nil +} + +func (m message2) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin2.MethodsPaych.Collect, + }, nil +} diff --git a/venus-shared/actors/builtin/paych/message.v3.go b/venus-shared/actors/builtin/paych/message.v3.go new file mode 100644 index 0000000000..6f7c5db2d8 --- /dev/null +++ b/venus-shared/actors/builtin/paych/message.v3.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + init3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/init" + paych3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/paych" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message3 struct{ from address.Address } + +func (m message3) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych3.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init3.ExecParams{ + CodeCID: builtin3.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin3.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message3) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych3.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin3.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message3) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin3.MethodsPaych.Settle, + }, nil +} + +func (m message3) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin3.MethodsPaych.Collect, + }, nil +} diff --git a/venus-shared/actors/builtin/paych/message.v4.go b/venus-shared/actors/builtin/paych/message.v4.go new file mode 100644 index 0000000000..d89ecda6b0 --- /dev/null +++ b/venus-shared/actors/builtin/paych/message.v4.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + init4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/init" + paych4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/paych" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message4 struct{ from address.Address } + +func (m message4) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych4.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init4.ExecParams{ + CodeCID: builtin4.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin4.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message4) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych4.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin4.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message4) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin4.MethodsPaych.Settle, + }, nil +} + +func (m message4) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin4.MethodsPaych.Collect, + }, nil +} diff --git a/venus-shared/actors/builtin/paych/message.v5.go b/venus-shared/actors/builtin/paych/message.v5.go new file mode 100644 index 0000000000..95046ffa0b --- /dev/null +++ b/venus-shared/actors/builtin/paych/message.v5.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + init5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/init" + paych5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/paych" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message5 struct{ from address.Address } + +func (m message5) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych5.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init5.ExecParams{ + CodeCID: builtin5.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin5.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message5) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych5.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin5.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message5) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin5.MethodsPaych.Settle, + }, nil +} + +func (m message5) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin5.MethodsPaych.Collect, + }, nil +} diff --git a/venus-shared/actors/builtin/paych/message.v6.go b/venus-shared/actors/builtin/paych/message.v6.go new file mode 100644 index 0000000000..cfbcdf6cfe --- /dev/null +++ b/venus-shared/actors/builtin/paych/message.v6.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + init6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/init" + paych6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/paych" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message6 struct{ from address.Address } + +func (m message6) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych6.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init6.ExecParams{ + CodeCID: builtin6.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin6.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message6) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych6.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin6.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message6) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin6.MethodsPaych.Settle, + }, nil +} + +func (m message6) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin6.MethodsPaych.Collect, + }, nil +} diff --git a/venus-shared/actors/builtin/paych/message.v7.go b/venus-shared/actors/builtin/paych/message.v7.go new file mode 100644 index 0000000000..5d2f98f9cb --- /dev/null +++ b/venus-shared/actors/builtin/paych/message.v7.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/paych/message.go.template + +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + init7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/init" + paych7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/paych" + + "github.com/filecoin-project/venus/venus-shared/actors" + init_ "github.com/filecoin-project/venus/venus-shared/actors/builtin/init" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +type message7 struct{ from address.Address } + +func (m message7) Create(to address.Address, initialAmount abi.TokenAmount) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych7.ConstructorParams{From: m.from, To: to}) + if aerr != nil { + return nil, aerr + } + enc, aerr := actors.SerializeParams(&init7.ExecParams{ + CodeCID: builtin7.PaymentChannelActorCodeID, + ConstructorParams: params, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: init_.Address, + From: m.from, + Value: initialAmount, + Method: builtin7.MethodsInit.Exec, + Params: enc, + }, nil +} + +func (m message7) Update(paych address.Address, sv *SignedVoucher, secret []byte) (*types.Message, error) { + params, aerr := actors.SerializeParams(&paych7.UpdateChannelStateParams{ + Sv: *sv, + Secret: secret, + }) + if aerr != nil { + return nil, aerr + } + + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin7.MethodsPaych.UpdateChannelState, + Params: params, + }, nil +} + +func (m message7) Settle(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin7.MethodsPaych.Settle, + }, nil +} + +func (m message7) Collect(paych address.Address) (*types.Message, error) { + return &types.Message{ + To: paych, + From: m.from, + Value: abi.NewTokenAmount(0), + Method: builtin7.MethodsPaych.Collect, + }, nil +} diff --git a/venus-shared/actors/builtin/paych/mock/mock.go b/venus-shared/actors/builtin/paych/mock/mock.go new file mode 100644 index 0000000000..0f4d744180 --- /dev/null +++ b/venus-shared/actors/builtin/paych/mock/mock.go @@ -0,0 +1,93 @@ +package mock + +import ( + "io" + + paych2 "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" +) + +type mockState struct { + from address.Address + to address.Address + settlingAt abi.ChainEpoch + toSend abi.TokenAmount + lanes map[uint64]paych2.LaneState +} + +func (ms *mockState) GetState() interface{} { + panic("implement me") +} + +type mockLaneState struct { + redeemed big.Int + nonce uint64 +} + +// NewMockPayChState constructs a state for a payment channel with the set fixed values +// that satisfies the paych.State interface. +func NewMockPayChState(from address.Address, + to address.Address, + settlingAt abi.ChainEpoch, + lanes map[uint64]paych2.LaneState, +) paych2.State { + return &mockState{from: from, to: to, settlingAt: settlingAt, toSend: big.NewInt(0), lanes: lanes} +} + +// NewMockLaneState constructs a state for a payment channel lane with the set fixed values +// that satisfies the paych.LaneState interface. Useful for populating lanes when +// calling NewMockPayChState +func NewMockLaneState(redeemed big.Int, nonce uint64) paych2.LaneState { + return &mockLaneState{redeemed, nonce} +} + +func (ms *mockState) MarshalCBOR(io.Writer) error { + panic("not implemented") +} + +// Channel owner, who has funded the actor +func (ms *mockState) From() (address.Address, error) { + return ms.from, nil +} + +// Recipient of payouts from channel +func (ms *mockState) To() (address.Address, error) { + return ms.to, nil +} + +// Height at which the channel can be `Collected` +func (ms *mockState) SettlingAt() (abi.ChainEpoch, error) { + return ms.settlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (ms *mockState) ToSend() (abi.TokenAmount, error) { + return ms.toSend, nil +} + +// Get total number of lanes +func (ms *mockState) LaneCount() (uint64, error) { + return uint64(len(ms.lanes)), nil +} + +// Iterate lane states +func (ms *mockState) ForEachLaneState(cb func(idx uint64, dl paych2.LaneState) error) error { + var lastErr error + for lane, state := range ms.lanes { + if err := cb(lane, state); err != nil { + lastErr = err + } + } + return lastErr +} + +func (mls *mockLaneState) Redeemed() (big.Int, error) { + return mls.redeemed, nil +} + +func (mls *mockLaneState) Nonce() (uint64, error) { + return mls.nonce, nil +} diff --git a/venus-shared/actors/builtin/paych/state.sep.go.template b/venus-shared/actors/builtin/paych/state.sep.go.template new file mode 100644 index 0000000000..08e4e36b2f --- /dev/null +++ b/venus-shared/actors/builtin/paych/state.sep.go.template @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + paych{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/paych" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + out.State = paych{{.v}}.State{} + return &out, nil +} + +type state{{.v}} struct { + paych{{.v}}.State + store adt.Store + lsAmt *adt{{.v}}.Array +} + +// Channel owner, who has funded the actor +func (s *state{{.v}}) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state{{.v}}) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state{{.v}}) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state{{.v}}) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state{{.v}}) getOrLoadLsAmt() (*adt{{.v}}.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt{{.v}}.AsArray(s.store, s.State.LaneStates{{if (ge .v 3)}}, paych{{.v}}.LaneStatesAmtBitwidth{{end}}) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state{{.v}}) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state{{.v}}) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych{{.v}}.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState{{.v}}{ls}) + }) +} + +type laneState{{.v}} struct { + paych{{.v}}.LaneState +} + +func (ls *laneState{{.v}}) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState{{.v}}) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/venus-shared/actors/builtin/paych/state.v0.go b/venus-shared/actors/builtin/paych/state.v0.go new file mode 100644 index 0000000000..0ce32fa29f --- /dev/null +++ b/venus-shared/actors/builtin/paych/state.v0.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + paych0 "github.com/filecoin-project/specs-actors/actors/builtin/paych" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + out.State = paych0.State{} + return &out, nil +} + +type state0 struct { + paych0.State + store adt.Store + lsAmt *adt0.Array +} + +// Channel owner, who has funded the actor +func (s *state0) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state0) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state0) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state0) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state0) getOrLoadLsAmt() (*adt0.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt0.AsArray(s.store, s.State.LaneStates) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state0) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state0) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state0) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych0.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState0{ls}) + }) +} + +type laneState0 struct { + paych0.LaneState +} + +func (ls *laneState0) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState0) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/venus-shared/actors/builtin/paych/state.v2.go b/venus-shared/actors/builtin/paych/state.v2.go new file mode 100644 index 0000000000..5591b1bf24 --- /dev/null +++ b/venus-shared/actors/builtin/paych/state.v2.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + paych2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/paych" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + out.State = paych2.State{} + return &out, nil +} + +type state2 struct { + paych2.State + store adt.Store + lsAmt *adt2.Array +} + +// Channel owner, who has funded the actor +func (s *state2) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state2) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state2) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state2) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state2) getOrLoadLsAmt() (*adt2.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt2.AsArray(s.store, s.State.LaneStates) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state2) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state2) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state2) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych2.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState2{ls}) + }) +} + +type laneState2 struct { + paych2.LaneState +} + +func (ls *laneState2) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState2) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/venus-shared/actors/builtin/paych/state.v3.go b/venus-shared/actors/builtin/paych/state.v3.go new file mode 100644 index 0000000000..6bf17f1d10 --- /dev/null +++ b/venus-shared/actors/builtin/paych/state.v3.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + paych3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/paych" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + out.State = paych3.State{} + return &out, nil +} + +type state3 struct { + paych3.State + store adt.Store + lsAmt *adt3.Array +} + +// Channel owner, who has funded the actor +func (s *state3) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state3) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state3) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state3) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state3) getOrLoadLsAmt() (*adt3.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt3.AsArray(s.store, s.State.LaneStates, paych3.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state3) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state3) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state3) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych3.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState3{ls}) + }) +} + +type laneState3 struct { + paych3.LaneState +} + +func (ls *laneState3) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState3) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/venus-shared/actors/builtin/paych/state.v4.go b/venus-shared/actors/builtin/paych/state.v4.go new file mode 100644 index 0000000000..915ca202ef --- /dev/null +++ b/venus-shared/actors/builtin/paych/state.v4.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + paych4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/paych" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + out.State = paych4.State{} + return &out, nil +} + +type state4 struct { + paych4.State + store adt.Store + lsAmt *adt4.Array +} + +// Channel owner, who has funded the actor +func (s *state4) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state4) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state4) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state4) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state4) getOrLoadLsAmt() (*adt4.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt4.AsArray(s.store, s.State.LaneStates, paych4.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state4) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state4) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state4) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych4.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState4{ls}) + }) +} + +type laneState4 struct { + paych4.LaneState +} + +func (ls *laneState4) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState4) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/venus-shared/actors/builtin/paych/state.v5.go b/venus-shared/actors/builtin/paych/state.v5.go new file mode 100644 index 0000000000..9448fde2da --- /dev/null +++ b/venus-shared/actors/builtin/paych/state.v5.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + paych5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/paych" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + out.State = paych5.State{} + return &out, nil +} + +type state5 struct { + paych5.State + store adt.Store + lsAmt *adt5.Array +} + +// Channel owner, who has funded the actor +func (s *state5) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state5) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state5) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state5) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state5) getOrLoadLsAmt() (*adt5.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt5.AsArray(s.store, s.State.LaneStates, paych5.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state5) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state5) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state5) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych5.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState5{ls}) + }) +} + +type laneState5 struct { + paych5.LaneState +} + +func (ls *laneState5) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState5) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/venus-shared/actors/builtin/paych/state.v6.go b/venus-shared/actors/builtin/paych/state.v6.go new file mode 100644 index 0000000000..fb9448a3af --- /dev/null +++ b/venus-shared/actors/builtin/paych/state.v6.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + paych6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/paych" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + out.State = paych6.State{} + return &out, nil +} + +type state6 struct { + paych6.State + store adt.Store + lsAmt *adt6.Array +} + +// Channel owner, who has funded the actor +func (s *state6) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state6) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state6) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state6) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state6) getOrLoadLsAmt() (*adt6.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt6.AsArray(s.store, s.State.LaneStates, paych6.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state6) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state6) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state6) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych6.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState6{ls}) + }) +} + +type laneState6 struct { + paych6.LaneState +} + +func (ls *laneState6) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState6) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/venus-shared/actors/builtin/paych/state.v7.go b/venus-shared/actors/builtin/paych/state.v7.go new file mode 100644 index 0000000000..eca0c46fb6 --- /dev/null +++ b/venus-shared/actors/builtin/paych/state.v7.go @@ -0,0 +1,116 @@ +// FETCHED FROM LOTUS: builtin/paych/state.go.template + +package paych + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + paych7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/paych" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + out.State = paych7.State{} + return &out, nil +} + +type state7 struct { + paych7.State + store adt.Store + lsAmt *adt7.Array +} + +// Channel owner, who has funded the actor +func (s *state7) From() (address.Address, error) { + return s.State.From, nil +} + +// Recipient of payouts from channel +func (s *state7) To() (address.Address, error) { + return s.State.To, nil +} + +// Height at which the channel can be `Collected` +func (s *state7) SettlingAt() (abi.ChainEpoch, error) { + return s.State.SettlingAt, nil +} + +// Amount successfully redeemed through the payment channel, paid out on `Collect()` +func (s *state7) ToSend() (abi.TokenAmount, error) { + return s.State.ToSend, nil +} + +func (s *state7) getOrLoadLsAmt() (*adt7.Array, error) { + if s.lsAmt != nil { + return s.lsAmt, nil + } + + // Get the lane state from the chain + lsamt, err := adt7.AsArray(s.store, s.State.LaneStates, paych7.LaneStatesAmtBitwidth) + if err != nil { + return nil, err + } + + s.lsAmt = lsamt + return lsamt, nil +} + +// Get total number of lanes +func (s *state7) LaneCount() (uint64, error) { + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return 0, err + } + return lsamt.Length(), nil +} + +func (s *state7) GetState() interface{} { + return &s.State +} + +// Iterate lane states +func (s *state7) ForEachLaneState(cb func(idx uint64, dl LaneState) error) error { + // Get the lane state from the chain + lsamt, err := s.getOrLoadLsAmt() + if err != nil { + return err + } + + // Note: we use a map instead of an array to store laneStates because the + // client sets the lane ID (the index) and potentially they could use a + // very large index. + var ls paych7.LaneState + return lsamt.ForEach(&ls, func(i int64) error { + return cb(uint64(i), &laneState7{ls}) + }) +} + +type laneState7 struct { + paych7.LaneState +} + +func (ls *laneState7) Redeemed() (big.Int, error) { + return ls.LaneState.Redeemed, nil +} + +func (ls *laneState7) Nonce() (uint64, error) { + return ls.LaneState.Nonce, nil +} diff --git a/venus-shared/actors/builtin/power/actor.go b/venus-shared/actors/builtin/power/actor.go new file mode 100644 index 0000000000..65b351b038 --- /dev/null +++ b/venus-shared/actors/builtin/power/actor.go @@ -0,0 +1,198 @@ +// FETCHED FROM LOTUS: builtin/power/actor.go.template + +package power + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" +) + +func init() { + + builtin.RegisterActorState(builtin0.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +var ( + Address = builtin7.StoragePowerActorAddr + Methods = builtin7.MethodsPower +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.StoragePowerActorCodeID: + return load0(store, act.Head) + + case builtin2.StoragePowerActorCodeID: + return load2(store, act.Head) + + case builtin3.StoragePowerActorCodeID: + return load3(store, act.Head) + + case builtin4.StoragePowerActorCodeID: + return load4(store, act.Head) + + case builtin5.StoragePowerActorCodeID: + return load5(store, act.Head) + + case builtin6.StoragePowerActorCodeID: + return load6(store, act.Head) + + case builtin7.StoragePowerActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.StoragePowerActorCodeID, nil + + case actors.Version2: + return builtin2.StoragePowerActorCodeID, nil + + case actors.Version3: + return builtin3.StoragePowerActorCodeID, nil + + case actors.Version4: + return builtin4.StoragePowerActorCodeID, nil + + case actors.Version5: + return builtin5.StoragePowerActorCodeID, nil + + case actors.Version6: + return builtin6.StoragePowerActorCodeID, nil + + case actors.Version7: + return builtin7.StoragePowerActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + TotalLocked() (abi.TokenAmount, error) + TotalPower() (Claim, error) + TotalCommitted() (Claim, error) + TotalPowerSmoothed() (builtin.FilterEstimate, error) + GetState() interface{} + + // MinerCounts returns the number of miners. Participating is the number + // with power above the minimum miner threshold. + MinerCounts() (participating, total uint64, err error) + MinerPower(address.Address) (Claim, bool, error) + MinerNominalPowerMeetsConsensusMinimum(address.Address) (bool, error) + ListAllMiners() ([]address.Address, error) + ForEachClaim(func(miner address.Address, claim Claim) error) error + ClaimsChanged(State) (bool, error) + + // Testing or genesis setup only + SetTotalQualityAdjPower(abi.StoragePower) error + SetTotalRawBytePower(abi.StoragePower) error + SetThisEpochQualityAdjPower(abi.StoragePower) error + SetThisEpochRawBytePower(abi.StoragePower) error + + // Diff helpers. Used by Diff* functions internally. + claims() (adt.Map, error) + decodeClaim(*cbg.Deferred) (Claim, error) +} + +type Claim struct { + // Sum of raw byte power for a miner's sectors. + RawBytePower abi.StoragePower + + // Sum of quality adjusted power for a miner's sectors. + QualityAdjPower abi.StoragePower +} + +func AddClaims(a Claim, b Claim) Claim { + return Claim{ + RawBytePower: big.Add(a.RawBytePower, b.RawBytePower), + QualityAdjPower: big.Add(a.QualityAdjPower, b.QualityAdjPower), + } +} diff --git a/venus-shared/actors/builtin/power/actor.go.template b/venus-shared/actors/builtin/power/actor.go.template new file mode 100644 index 0000000000..a35cd67d07 --- /dev/null +++ b/venus-shared/actors/builtin/power/actor.go.template @@ -0,0 +1,109 @@ +// FETCHED FROM LOTUS: builtin/power/actor.go.template + +package power + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.StoragePowerActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +var ( + Address = builtin{{.latestVersion}}.StoragePowerActorAddr + Methods = builtin{{.latestVersion}}.MethodsPower +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.StoragePowerActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.StoragePowerActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + TotalLocked() (abi.TokenAmount, error) + TotalPower() (Claim, error) + TotalCommitted() (Claim, error) + TotalPowerSmoothed() (builtin.FilterEstimate, error) + GetState() interface{} + + // MinerCounts returns the number of miners. Participating is the number + // with power above the minimum miner threshold. + MinerCounts() (participating, total uint64, err error) + MinerPower(address.Address) (Claim, bool, error) + MinerNominalPowerMeetsConsensusMinimum(address.Address) (bool, error) + ListAllMiners() ([]address.Address, error) + ForEachClaim(func(miner address.Address, claim Claim) error) error + ClaimsChanged(State) (bool, error) + + // Testing or genesis setup only + SetTotalQualityAdjPower(abi.StoragePower) error + SetTotalRawBytePower(abi.StoragePower) error + SetThisEpochQualityAdjPower(abi.StoragePower) error + SetThisEpochRawBytePower(abi.StoragePower) error + + // Diff helpers. Used by Diff* functions internally. + claims() (adt.Map, error) + decodeClaim(*cbg.Deferred) (Claim, error) +} + +type Claim struct { + // Sum of raw byte power for a miner's sectors. + RawBytePower abi.StoragePower + + // Sum of quality adjusted power for a miner's sectors. + QualityAdjPower abi.StoragePower +} + +func AddClaims(a Claim, b Claim) Claim { + return Claim{ + RawBytePower: big.Add(a.RawBytePower, b.RawBytePower), + QualityAdjPower: big.Add(a.QualityAdjPower, b.QualityAdjPower), + } +} diff --git a/venus-shared/actors/builtin/power/diff.go b/venus-shared/actors/builtin/power/diff.go new file mode 100644 index 0000000000..f5d8b7f593 --- /dev/null +++ b/venus-shared/actors/builtin/power/diff.go @@ -0,0 +1,119 @@ +// FETCHED FROM LOTUS: builtin/power/diff.go + +package power + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" +) + +type ClaimChanges struct { + Added []ClaimInfo + Modified []ClaimModification + Removed []ClaimInfo +} + +type ClaimModification struct { + Miner address.Address + From Claim + To Claim +} + +type ClaimInfo struct { + Miner address.Address + Claim Claim +} + +func DiffClaims(pre, cur State) (*ClaimChanges, error) { + results := new(ClaimChanges) + + prec, err := pre.claims() + if err != nil { + return nil, err + } + + curc, err := cur.claims() + if err != nil { + return nil, err + } + + if err := adt.DiffAdtMap(prec, curc, &claimDiffer{results, pre, cur}); err != nil { + return nil, err + } + + return results, nil +} + +type claimDiffer struct { + Results *ClaimChanges + pre, after State +} + +func (c *claimDiffer) AsKey(key string) (abi.Keyer, error) { + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return nil, err + } + return abi.AddrKey(addr), nil +} + +func (c *claimDiffer) Add(key string, val *cbg.Deferred) error { + ci, err := c.after.decodeClaim(val) + if err != nil { + return err + } + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + c.Results.Added = append(c.Results.Added, ClaimInfo{ + Miner: addr, + Claim: ci, + }) + return nil +} + +func (c *claimDiffer) Modify(key string, from, to *cbg.Deferred) error { + ciFrom, err := c.pre.decodeClaim(from) + if err != nil { + return err + } + + ciTo, err := c.after.decodeClaim(to) + if err != nil { + return err + } + + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + + if ciFrom != ciTo { + c.Results.Modified = append(c.Results.Modified, ClaimModification{ + Miner: addr, + From: ciFrom, + To: ciTo, + }) + } + return nil +} + +func (c *claimDiffer) Remove(key string, val *cbg.Deferred) error { + ci, err := c.after.decodeClaim(val) + if err != nil { + return err + } + addr, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + c.Results.Removed = append(c.Results.Removed, ClaimInfo{ + Miner: addr, + Claim: ci, + }) + return nil +} diff --git a/venus-shared/actors/builtin/power/state.sep.go.template b/venus-shared/actors/builtin/power/state.sep.go.template new file mode 100644 index 0000000000..4ec1a8fa83 --- /dev/null +++ b/venus-shared/actors/builtin/power/state.sep.go.template @@ -0,0 +1,203 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + +{{if (ge .v 3)}} + builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" +{{end}} + power{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/power" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + {{if (le .v 2)}} + em, err := adt{{.v}}.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + emm, err := adt{{.v}}.MakeEmptyMultimap(store).Root() + if err != nil { + return nil, err + } + + out.State = *power{{.v}}.ConstructState(em, emm) + {{else}} + s, err := power{{.v}}.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + {{end}} + + return &out, nil +} + +type state{{.v}} struct { + power{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state{{.v}}) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state{{.v}}) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state{{.v}}) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power{{.v}}.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state{{.v}}) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state{{.v}}) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV{{.v}}FilterEstimate({{if (le .v 1)}}*{{end}}s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state{{.v}}) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state{{.v}}) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state{{.v}}) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power{{.v}}.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state{{.v}}) ClaimsChanged(other State) (bool, error) { + other{{.v}}, ok := other.(*state{{.v}}) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other{{.v}}.State.Claims), nil +} + +func (s *state{{.v}}) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state{{.v}}) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state{{.v}}) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state{{.v}}) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} + +func (s *state{{.v}}) claims() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.Claims{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power{{.v}}.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV{{.v}}Claim(ci), nil +} + +func fromV{{.v}}Claim(v{{.v}} power{{.v}}.Claim) Claim { + return Claim{ + RawBytePower: v{{.v}}.RawBytePower, + QualityAdjPower: v{{.v}}.QualityAdjPower, + } +} diff --git a/venus-shared/actors/builtin/power/state.v0.go b/venus-shared/actors/builtin/power/state.v0.go new file mode 100644 index 0000000000..85a81bbdaf --- /dev/null +++ b/venus-shared/actors/builtin/power/state.v0.go @@ -0,0 +1,192 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + power0 "github.com/filecoin-project/specs-actors/actors/builtin/power" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + + em, err := adt0.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + emm, err := adt0.MakeEmptyMultimap(store).Root() + if err != nil { + return nil, err + } + + out.State = *power0.ConstructState(em, emm) + + return &out, nil +} + +type state0 struct { + power0.State + store adt.Store +} + +func (s *state0) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state0) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state0) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state0) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power0.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state0) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state0) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV0FilterEstimate(*s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state0) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state0) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state0) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power0.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state0) ClaimsChanged(other State) (bool, error) { + other0, ok := other.(*state0) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other0.State.Claims), nil +} + +func (s *state0) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state0) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state0) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state0) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state0) GetState() interface{} { + return &s.State +} + +func (s *state0) claims() (adt.Map, error) { + return adt0.AsMap(s.store, s.Claims) +} + +func (s *state0) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power0.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV0Claim(ci), nil +} + +func fromV0Claim(v0 power0.Claim) Claim { + return Claim{ + RawBytePower: v0.RawBytePower, + QualityAdjPower: v0.QualityAdjPower, + } +} diff --git a/venus-shared/actors/builtin/power/state.v2.go b/venus-shared/actors/builtin/power/state.v2.go new file mode 100644 index 0000000000..885e1f29fc --- /dev/null +++ b/venus-shared/actors/builtin/power/state.v2.go @@ -0,0 +1,192 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + power2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/power" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + + em, err := adt2.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + emm, err := adt2.MakeEmptyMultimap(store).Root() + if err != nil { + return nil, err + } + + out.State = *power2.ConstructState(em, emm) + + return &out, nil +} + +type state2 struct { + power2.State + store adt.Store +} + +func (s *state2) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state2) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state2) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state2) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power2.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state2) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state2) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV2FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state2) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state2) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state2) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power2.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state2) ClaimsChanged(other State) (bool, error) { + other2, ok := other.(*state2) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other2.State.Claims), nil +} + +func (s *state2) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state2) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state2) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state2) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state2) GetState() interface{} { + return &s.State +} + +func (s *state2) claims() (adt.Map, error) { + return adt2.AsMap(s.store, s.Claims) +} + +func (s *state2) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power2.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV2Claim(ci), nil +} + +func fromV2Claim(v2 power2.Claim) Claim { + return Claim{ + RawBytePower: v2.RawBytePower, + QualityAdjPower: v2.QualityAdjPower, + } +} diff --git a/venus-shared/actors/builtin/power/state.v3.go b/venus-shared/actors/builtin/power/state.v3.go new file mode 100644 index 0000000000..db47e469f6 --- /dev/null +++ b/venus-shared/actors/builtin/power/state.v3.go @@ -0,0 +1,189 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + power3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/power" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + + s, err := power3.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state3 struct { + power3.State + store adt.Store +} + +func (s *state3) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state3) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state3) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state3) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power3.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state3) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state3) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV3FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state3) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state3) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state3) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power3.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state3) ClaimsChanged(other State) (bool, error) { + other3, ok := other.(*state3) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other3.State.Claims), nil +} + +func (s *state3) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state3) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state3) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state3) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state3) GetState() interface{} { + return &s.State +} + +func (s *state3) claims() (adt.Map, error) { + return adt3.AsMap(s.store, s.Claims, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power3.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV3Claim(ci), nil +} + +func fromV3Claim(v3 power3.Claim) Claim { + return Claim{ + RawBytePower: v3.RawBytePower, + QualityAdjPower: v3.QualityAdjPower, + } +} diff --git a/venus-shared/actors/builtin/power/state.v4.go b/venus-shared/actors/builtin/power/state.v4.go new file mode 100644 index 0000000000..c268d07af5 --- /dev/null +++ b/venus-shared/actors/builtin/power/state.v4.go @@ -0,0 +1,189 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + power4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/power" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + + s, err := power4.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state4 struct { + power4.State + store adt.Store +} + +func (s *state4) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state4) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state4) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state4) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power4.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state4) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state4) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV4FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state4) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state4) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state4) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power4.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state4) ClaimsChanged(other State) (bool, error) { + other4, ok := other.(*state4) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other4.State.Claims), nil +} + +func (s *state4) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state4) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state4) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state4) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state4) GetState() interface{} { + return &s.State +} + +func (s *state4) claims() (adt.Map, error) { + return adt4.AsMap(s.store, s.Claims, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power4.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV4Claim(ci), nil +} + +func fromV4Claim(v4 power4.Claim) Claim { + return Claim{ + RawBytePower: v4.RawBytePower, + QualityAdjPower: v4.QualityAdjPower, + } +} diff --git a/venus-shared/actors/builtin/power/state.v5.go b/venus-shared/actors/builtin/power/state.v5.go new file mode 100644 index 0000000000..6a99231e65 --- /dev/null +++ b/venus-shared/actors/builtin/power/state.v5.go @@ -0,0 +1,189 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + power5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/power" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + + s, err := power5.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state5 struct { + power5.State + store adt.Store +} + +func (s *state5) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state5) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state5) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state5) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power5.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state5) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state5) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV5FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state5) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state5) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state5) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power5.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state5) ClaimsChanged(other State) (bool, error) { + other5, ok := other.(*state5) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other5.State.Claims), nil +} + +func (s *state5) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state5) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state5) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state5) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state5) GetState() interface{} { + return &s.State +} + +func (s *state5) claims() (adt.Map, error) { + return adt5.AsMap(s.store, s.Claims, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power5.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV5Claim(ci), nil +} + +func fromV5Claim(v5 power5.Claim) Claim { + return Claim{ + RawBytePower: v5.RawBytePower, + QualityAdjPower: v5.QualityAdjPower, + } +} diff --git a/venus-shared/actors/builtin/power/state.v6.go b/venus-shared/actors/builtin/power/state.v6.go new file mode 100644 index 0000000000..9e212a3331 --- /dev/null +++ b/venus-shared/actors/builtin/power/state.v6.go @@ -0,0 +1,189 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + power6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/power" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + + s, err := power6.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state6 struct { + power6.State + store adt.Store +} + +func (s *state6) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state6) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state6) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state6) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power6.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state6) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state6) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV6FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state6) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state6) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state6) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power6.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state6) ClaimsChanged(other State) (bool, error) { + other6, ok := other.(*state6) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other6.State.Claims), nil +} + +func (s *state6) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state6) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state6) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state6) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state6) GetState() interface{} { + return &s.State +} + +func (s *state6) claims() (adt.Map, error) { + return adt6.AsMap(s.store, s.Claims, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power6.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV6Claim(ci), nil +} + +func fromV6Claim(v6 power6.Claim) Claim { + return Claim{ + RawBytePower: v6.RawBytePower, + QualityAdjPower: v6.QualityAdjPower, + } +} diff --git a/venus-shared/actors/builtin/power/state.v7.go b/venus-shared/actors/builtin/power/state.v7.go new file mode 100644 index 0000000000..605a3be8f5 --- /dev/null +++ b/venus-shared/actors/builtin/power/state.v7.go @@ -0,0 +1,189 @@ +// FETCHED FROM LOTUS: builtin/power/state.go.template + +package power + +import ( + "bytes" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + power7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/power" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + + s, err := power7.ConstructState(store) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state7 struct { + power7.State + store adt.Store +} + +func (s *state7) TotalLocked() (abi.TokenAmount, error) { + return s.TotalPledgeCollateral, nil +} + +func (s *state7) TotalPower() (Claim, error) { + return Claim{ + RawBytePower: s.TotalRawBytePower, + QualityAdjPower: s.TotalQualityAdjPower, + }, nil +} + +// Committed power to the network. Includes miners below the minimum threshold. +func (s *state7) TotalCommitted() (Claim, error) { + return Claim{ + RawBytePower: s.TotalBytesCommitted, + QualityAdjPower: s.TotalQABytesCommitted, + }, nil +} + +func (s *state7) MinerPower(addr address.Address) (Claim, bool, error) { + claims, err := s.claims() + if err != nil { + return Claim{}, false, err + } + var claim power7.Claim + ok, err := claims.Get(abi.AddrKey(addr), &claim) + if err != nil { + return Claim{}, false, err + } + return Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }, ok, nil +} + +func (s *state7) MinerNominalPowerMeetsConsensusMinimum(a address.Address) (bool, error) { + return s.State.MinerNominalPowerMeetsConsensusMinimum(s.store, a) +} + +func (s *state7) TotalPowerSmoothed() (builtin.FilterEstimate, error) { + return builtin.FromV7FilterEstimate(s.State.ThisEpochQAPowerSmoothed), nil +} + +func (s *state7) MinerCounts() (uint64, uint64, error) { + return uint64(s.State.MinerAboveMinPowerCount), uint64(s.State.MinerCount), nil +} + +func (s *state7) ListAllMiners() ([]address.Address, error) { + claims, err := s.claims() + if err != nil { + return nil, err + } + + var miners []address.Address + err = claims.ForEach(nil, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + miners = append(miners, a) + return nil + }) + if err != nil { + return nil, err + } + + return miners, nil +} + +func (s *state7) ForEachClaim(cb func(miner address.Address, claim Claim) error) error { + claims, err := s.claims() + if err != nil { + return err + } + + var claim power7.Claim + return claims.ForEach(&claim, func(k string) error { + a, err := address.NewFromBytes([]byte(k)) + if err != nil { + return err + } + return cb(a, Claim{ + RawBytePower: claim.RawBytePower, + QualityAdjPower: claim.QualityAdjPower, + }) + }) +} + +func (s *state7) ClaimsChanged(other State) (bool, error) { + other7, ok := other.(*state7) + if !ok { + // treat an upgrade as a change, always + return true, nil + } + return !s.State.Claims.Equals(other7.State.Claims), nil +} + +func (s *state7) SetTotalQualityAdjPower(p abi.StoragePower) error { + s.State.TotalQualityAdjPower = p + return nil +} + +func (s *state7) SetTotalRawBytePower(p abi.StoragePower) error { + s.State.TotalRawBytePower = p + return nil +} + +func (s *state7) SetThisEpochQualityAdjPower(p abi.StoragePower) error { + s.State.ThisEpochQualityAdjPower = p + return nil +} + +func (s *state7) SetThisEpochRawBytePower(p abi.StoragePower) error { + s.State.ThisEpochRawBytePower = p + return nil +} + +func (s *state7) GetState() interface{} { + return &s.State +} + +func (s *state7) claims() (adt.Map, error) { + return adt7.AsMap(s.store, s.Claims, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) decodeClaim(val *cbg.Deferred) (Claim, error) { + var ci power7.Claim + if err := ci.UnmarshalCBOR(bytes.NewReader(val.Raw)); err != nil { + return Claim{}, err + } + return fromV7Claim(ci), nil +} + +func fromV7Claim(v7 power7.Claim) Claim { + return Claim{ + RawBytePower: v7.RawBytePower, + QualityAdjPower: v7.QualityAdjPower, + } +} diff --git a/venus-shared/actors/builtin/reward/actor.go b/venus-shared/actors/builtin/reward/actor.go new file mode 100644 index 0000000000..528ca7a18d --- /dev/null +++ b/venus-shared/actors/builtin/reward/actor.go @@ -0,0 +1,174 @@ +// FETCHED FROM LOTUS: builtin/reward/actor.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/cbor" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func init() { + + builtin.RegisterActorState(builtin0.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) +} + +var ( + Address = builtin7.RewardActorAddr + Methods = builtin7.MethodsReward +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.RewardActorCodeID: + return load0(store, act.Head) + + case builtin2.RewardActorCodeID: + return load2(store, act.Head) + + case builtin3.RewardActorCodeID: + return load3(store, act.Head) + + case builtin4.RewardActorCodeID: + return load4(store, act.Head) + + case builtin5.RewardActorCodeID: + return load5(store, act.Head) + + case builtin6.RewardActorCodeID: + return load6(store, act.Head) + + case builtin7.RewardActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, currRealizedPower abi.StoragePower) (State, error) { + switch av { + + case actors.Version0: + return make0(store, currRealizedPower) + + case actors.Version2: + return make2(store, currRealizedPower) + + case actors.Version3: + return make3(store, currRealizedPower) + + case actors.Version4: + return make4(store, currRealizedPower) + + case actors.Version5: + return make5(store, currRealizedPower) + + case actors.Version6: + return make6(store, currRealizedPower) + + case actors.Version7: + return make7(store, currRealizedPower) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.RewardActorCodeID, nil + + case actors.Version2: + return builtin2.RewardActorCodeID, nil + + case actors.Version3: + return builtin3.RewardActorCodeID, nil + + case actors.Version4: + return builtin4.RewardActorCodeID, nil + + case actors.Version5: + return builtin5.RewardActorCodeID, nil + + case actors.Version6: + return builtin6.RewardActorCodeID, nil + + case actors.Version7: + return builtin7.RewardActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + ThisEpochBaselinePower() (abi.StoragePower, error) + ThisEpochReward() (abi.StoragePower, error) + ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) + + EffectiveBaselinePower() (abi.StoragePower, error) + EffectiveNetworkTime() (abi.ChainEpoch, error) + + TotalStoragePowerReward() (abi.TokenAmount, error) + + CumsumBaseline() (abi.StoragePower, error) + CumsumRealized() (abi.StoragePower, error) + + InitialPledgeForPower(abi.StoragePower, abi.TokenAmount, *builtin.FilterEstimate, abi.TokenAmount) (abi.TokenAmount, error) + PreCommitDepositForPower(builtin.FilterEstimate, abi.StoragePower) (abi.TokenAmount, error) + GetState() interface{} +} + +type AwardBlockRewardParams = reward0.AwardBlockRewardParams diff --git a/venus-shared/actors/builtin/reward/actor.go.template b/venus-shared/actors/builtin/reward/actor.go.template new file mode 100644 index 0000000000..547814511c --- /dev/null +++ b/venus-shared/actors/builtin/reward/actor.go.template @@ -0,0 +1,85 @@ +// FETCHED FROM LOTUS: builtin/reward/actor.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" + "github.com/ipfs/go-cid" + "github.com/filecoin-project/venus/venus-shared/actors" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/cbor" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.RewardActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}}} + +var ( + Address = builtin{{.latestVersion}}.RewardActorAddr + Methods = builtin{{.latestVersion}}.MethodsReward +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.RewardActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, currRealizedPower abi.StoragePower) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store, currRealizedPower) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.RewardActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + ThisEpochBaselinePower() (abi.StoragePower, error) + ThisEpochReward() (abi.StoragePower, error) + ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) + + EffectiveBaselinePower() (abi.StoragePower, error) + EffectiveNetworkTime() (abi.ChainEpoch, error) + + TotalStoragePowerReward() (abi.TokenAmount, error) + + CumsumBaseline() (abi.StoragePower, error) + CumsumRealized() (abi.StoragePower, error) + + InitialPledgeForPower(abi.StoragePower, abi.TokenAmount, *builtin.FilterEstimate, abi.TokenAmount) (abi.TokenAmount, error) + PreCommitDepositForPower(builtin.FilterEstimate, abi.StoragePower) (abi.TokenAmount, error) + GetState() interface{} +} + +type AwardBlockRewardParams = reward0.AwardBlockRewardParams diff --git a/venus-shared/actors/builtin/reward/state.sep.go.template b/venus-shared/actors/builtin/reward/state.sep.go.template new file mode 100644 index 0000000000..3891b7b1b9 --- /dev/null +++ b/venus-shared/actors/builtin/reward/state.sep.go.template @@ -0,0 +1,115 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + miner{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/miner" + reward{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/reward" + smoothing{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/smoothing" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state{{.v}}{store: store} + out.State = *reward{{.v}}.ConstructState(currRealizedPower) + return &out, nil +} + +type state{{.v}} struct { + reward{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state{{.v}}) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { +{{if (ge .v 2)}} + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil +{{else}} + return builtin.FromV0FilterEstimate(*s.State.ThisEpochRewardSmoothed), nil +{{end}} +} + +func (s *state{{.v}}) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state{{.v}}) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.{{if (ge .v 2)}}TotalStoragePowerReward{{else}}TotalMined{{end}}, nil +} + +func (s *state{{.v}}) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state{{.v}}) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state{{.v}}) CumsumBaseline() (reward{{.v}}.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state{{.v}}) CumsumRealized() (reward{{.v}}.Spacetime, error) { + return s.State.CumsumRealized, nil +} +{{if (ge .v 2)}} +func (s *state{{.v}}) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner{{.v}}.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing{{.v}}.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} +{{else}} +func (s *state0) InitialPledgeForPower(sectorWeight abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner0.InitialPledgeForPower( + sectorWeight, + s.State.ThisEpochBaselinePower, + networkTotalPledge, + s.State.ThisEpochRewardSmoothed, + &smoothing0.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply), nil +} +{{end}} +func (s *state{{.v}}) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner{{.v}}.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + {{if (le .v 0)}}&{{end}}smoothing{{.v}}.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/reward/state.v0.go b/venus-shared/actors/builtin/reward/state.v0.go new file mode 100644 index 0000000000..bac009a809 --- /dev/null +++ b/venus-shared/actors/builtin/reward/state.v0.go @@ -0,0 +1,97 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + reward0 "github.com/filecoin-project/specs-actors/actors/builtin/reward" + smoothing0 "github.com/filecoin-project/specs-actors/actors/util/smoothing" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state0{store: store} + out.State = *reward0.ConstructState(currRealizedPower) + return &out, nil +} + +type state0 struct { + reward0.State + store adt.Store +} + +func (s *state0) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state0) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FromV0FilterEstimate(*s.State.ThisEpochRewardSmoothed), nil + +} + +func (s *state0) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state0) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalMined, nil +} + +func (s *state0) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state0) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state0) CumsumBaseline() (reward0.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state0) CumsumRealized() (reward0.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state0) InitialPledgeForPower(sectorWeight abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner0.InitialPledgeForPower( + sectorWeight, + s.State.ThisEpochBaselinePower, + networkTotalPledge, + s.State.ThisEpochRewardSmoothed, + &smoothing0.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply), nil +} + +func (s *state0) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner0.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + &smoothing0.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state0) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/reward/state.v2.go b/venus-shared/actors/builtin/reward/state.v2.go new file mode 100644 index 0000000000..9445e2c0d9 --- /dev/null +++ b/venus-shared/actors/builtin/reward/state.v2.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + reward2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/reward" + smoothing2 "github.com/filecoin-project/specs-actors/v2/actors/util/smoothing" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state2{store: store} + out.State = *reward2.ConstructState(currRealizedPower) + return &out, nil +} + +type state2 struct { + reward2.State + store adt.Store +} + +func (s *state2) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state2) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state2) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state2) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state2) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state2) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state2) CumsumBaseline() (reward2.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state2) CumsumRealized() (reward2.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state2) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner2.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing2.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state2) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner2.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing2.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state2) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/reward/state.v3.go b/venus-shared/actors/builtin/reward/state.v3.go new file mode 100644 index 0000000000..95f3585b58 --- /dev/null +++ b/venus-shared/actors/builtin/reward/state.v3.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" + reward3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/reward" + smoothing3 "github.com/filecoin-project/specs-actors/v3/actors/util/smoothing" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state3{store: store} + out.State = *reward3.ConstructState(currRealizedPower) + return &out, nil +} + +type state3 struct { + reward3.State + store adt.Store +} + +func (s *state3) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state3) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state3) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state3) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state3) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state3) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state3) CumsumBaseline() (reward3.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state3) CumsumRealized() (reward3.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state3) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner3.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing3.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state3) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner3.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing3.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state3) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/reward/state.v4.go b/venus-shared/actors/builtin/reward/state.v4.go new file mode 100644 index 0000000000..05755641f7 --- /dev/null +++ b/venus-shared/actors/builtin/reward/state.v4.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + miner4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/miner" + reward4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/reward" + smoothing4 "github.com/filecoin-project/specs-actors/v4/actors/util/smoothing" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state4{store: store} + out.State = *reward4.ConstructState(currRealizedPower) + return &out, nil +} + +type state4 struct { + reward4.State + store adt.Store +} + +func (s *state4) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state4) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state4) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state4) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state4) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state4) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state4) CumsumBaseline() (reward4.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state4) CumsumRealized() (reward4.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state4) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner4.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing4.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state4) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner4.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing4.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state4) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/reward/state.v5.go b/venus-shared/actors/builtin/reward/state.v5.go new file mode 100644 index 0000000000..0360320aab --- /dev/null +++ b/venus-shared/actors/builtin/reward/state.v5.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" + reward5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/reward" + smoothing5 "github.com/filecoin-project/specs-actors/v5/actors/util/smoothing" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state5{store: store} + out.State = *reward5.ConstructState(currRealizedPower) + return &out, nil +} + +type state5 struct { + reward5.State + store adt.Store +} + +func (s *state5) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state5) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state5) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state5) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state5) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state5) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state5) CumsumBaseline() (reward5.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state5) CumsumRealized() (reward5.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state5) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner5.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing5.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state5) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner5.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing5.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state5) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/reward/state.v6.go b/venus-shared/actors/builtin/reward/state.v6.go new file mode 100644 index 0000000000..799bb9193b --- /dev/null +++ b/venus-shared/actors/builtin/reward/state.v6.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + miner6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/miner" + reward6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/reward" + smoothing6 "github.com/filecoin-project/specs-actors/v6/actors/util/smoothing" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state6{store: store} + out.State = *reward6.ConstructState(currRealizedPower) + return &out, nil +} + +type state6 struct { + reward6.State + store adt.Store +} + +func (s *state6) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state6) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state6) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state6) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state6) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state6) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state6) CumsumBaseline() (reward6.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state6) CumsumRealized() (reward6.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state6) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner6.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing6.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state6) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner6.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing6.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state6) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/reward/state.v7.go b/venus-shared/actors/builtin/reward/state.v7.go new file mode 100644 index 0000000000..72d3cc18ce --- /dev/null +++ b/venus-shared/actors/builtin/reward/state.v7.go @@ -0,0 +1,100 @@ +// FETCHED FROM LOTUS: builtin/reward/state.go.template + +package reward + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + + miner7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/miner" + reward7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/reward" + smoothing7 "github.com/filecoin-project/specs-actors/v7/actors/util/smoothing" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store, currRealizedPower abi.StoragePower) (State, error) { + out := state7{store: store} + out.State = *reward7.ConstructState(currRealizedPower) + return &out, nil +} + +type state7 struct { + reward7.State + store adt.Store +} + +func (s *state7) ThisEpochReward() (abi.TokenAmount, error) { + return s.State.ThisEpochReward, nil +} + +func (s *state7) ThisEpochRewardSmoothed() (builtin.FilterEstimate, error) { + + return builtin.FilterEstimate{ + PositionEstimate: s.State.ThisEpochRewardSmoothed.PositionEstimate, + VelocityEstimate: s.State.ThisEpochRewardSmoothed.VelocityEstimate, + }, nil + +} + +func (s *state7) ThisEpochBaselinePower() (abi.StoragePower, error) { + return s.State.ThisEpochBaselinePower, nil +} + +func (s *state7) TotalStoragePowerReward() (abi.TokenAmount, error) { + return s.State.TotalStoragePowerReward, nil +} + +func (s *state7) EffectiveBaselinePower() (abi.StoragePower, error) { + return s.State.EffectiveBaselinePower, nil +} + +func (s *state7) EffectiveNetworkTime() (abi.ChainEpoch, error) { + return s.State.EffectiveNetworkTime, nil +} + +func (s *state7) CumsumBaseline() (reward7.Spacetime, error) { + return s.State.CumsumBaseline, nil +} + +func (s *state7) CumsumRealized() (reward7.Spacetime, error) { + return s.State.CumsumRealized, nil +} + +func (s *state7) InitialPledgeForPower(qaPower abi.StoragePower, networkTotalPledge abi.TokenAmount, networkQAPower *builtin.FilterEstimate, circSupply abi.TokenAmount) (abi.TokenAmount, error) { + return miner7.InitialPledgeForPower( + qaPower, + s.State.ThisEpochBaselinePower, + s.State.ThisEpochRewardSmoothed, + smoothing7.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + circSupply, + ), nil +} + +func (s *state7) PreCommitDepositForPower(networkQAPower builtin.FilterEstimate, sectorWeight abi.StoragePower) (abi.TokenAmount, error) { + return miner7.PreCommitDepositForPower(s.State.ThisEpochRewardSmoothed, + smoothing7.FilterEstimate{ + PositionEstimate: networkQAPower.PositionEstimate, + VelocityEstimate: networkQAPower.VelocityEstimate, + }, + sectorWeight), nil +} + +func (s *state7) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/system/actor.go b/venus-shared/actors/builtin/system/actor.go new file mode 100644 index 0000000000..30f3a39958 --- /dev/null +++ b/venus-shared/actors/builtin/system/actor.go @@ -0,0 +1,89 @@ +// FETCHED FROM LOTUS: builtin/system/actor.go.template + +package system + +import ( + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" +) + +var ( + Address = builtin7.SystemActorAddr +) + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { + + case actors.Version0: + return make0(store) + + case actors.Version2: + return make2(store) + + case actors.Version3: + return make3(store) + + case actors.Version4: + return make4(store) + + case actors.Version5: + return make5(store) + + case actors.Version6: + return make6(store) + + case actors.Version7: + return make7(store) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.SystemActorCodeID, nil + + case actors.Version2: + return builtin2.SystemActorCodeID, nil + + case actors.Version3: + return builtin3.SystemActorCodeID, nil + + case actors.Version4: + return builtin4.SystemActorCodeID, nil + + case actors.Version5: + return builtin5.SystemActorCodeID, nil + + case actors.Version6: + return builtin6.SystemActorCodeID, nil + + case actors.Version7: + return builtin7.SystemActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + GetState() interface{} +} diff --git a/venus-shared/actors/builtin/system/actor.go.template b/venus-shared/actors/builtin/system/actor.go.template new file mode 100644 index 0000000000..f16f20910b --- /dev/null +++ b/venus-shared/actors/builtin/system/actor.go.template @@ -0,0 +1,43 @@ +// FETCHED FROM LOTUS: builtin/system/actor.go.template + +package system + +import ( + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors" + "golang.org/x/xerrors" + "github.com/ipfs/go-cid" + +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} +) + +var ( + Address = builtin{{.latestVersion}}.SystemActorAddr +) + +func MakeState(store adt.Store, av actors.Version) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.SystemActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + GetState() interface{} +} diff --git a/venus-shared/actors/builtin/system/state.sep.go.template b/venus-shared/actors/builtin/system/state.sep.go.template new file mode 100644 index 0000000000..c2544d5bca --- /dev/null +++ b/venus-shared/actors/builtin/system/state.sep.go.template @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + system{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/system" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store) (State, error) { + out := state{{.v}}{store: store} + out.State = system{{.v}}.State{} + return &out, nil +} + +type state{{.v}} struct { + system{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/venus-shared/actors/builtin/system/state.v0.go b/venus-shared/actors/builtin/system/state.v0.go new file mode 100644 index 0000000000..9204cd8382 --- /dev/null +++ b/venus-shared/actors/builtin/system/state.v0.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + system0 "github.com/filecoin-project/specs-actors/actors/builtin/system" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store) (State, error) { + out := state0{store: store} + out.State = system0.State{} + return &out, nil +} + +type state0 struct { + system0.State + store adt.Store +} + +func (s *state0) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/system/state.v2.go b/venus-shared/actors/builtin/system/state.v2.go new file mode 100644 index 0000000000..d0c35d89c9 --- /dev/null +++ b/venus-shared/actors/builtin/system/state.v2.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + system2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/system" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store) (State, error) { + out := state2{store: store} + out.State = system2.State{} + return &out, nil +} + +type state2 struct { + system2.State + store adt.Store +} + +func (s *state2) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/system/state.v3.go b/venus-shared/actors/builtin/system/state.v3.go new file mode 100644 index 0000000000..c6382434c1 --- /dev/null +++ b/venus-shared/actors/builtin/system/state.v3.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + system3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/system" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store) (State, error) { + out := state3{store: store} + out.State = system3.State{} + return &out, nil +} + +type state3 struct { + system3.State + store adt.Store +} + +func (s *state3) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/system/state.v4.go b/venus-shared/actors/builtin/system/state.v4.go new file mode 100644 index 0000000000..63d360a24b --- /dev/null +++ b/venus-shared/actors/builtin/system/state.v4.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + system4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/system" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store) (State, error) { + out := state4{store: store} + out.State = system4.State{} + return &out, nil +} + +type state4 struct { + system4.State + store adt.Store +} + +func (s *state4) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/system/state.v5.go b/venus-shared/actors/builtin/system/state.v5.go new file mode 100644 index 0000000000..2ac0c71ae6 --- /dev/null +++ b/venus-shared/actors/builtin/system/state.v5.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + system5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/system" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store) (State, error) { + out := state5{store: store} + out.State = system5.State{} + return &out, nil +} + +type state5 struct { + system5.State + store adt.Store +} + +func (s *state5) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/system/state.v6.go b/venus-shared/actors/builtin/system/state.v6.go new file mode 100644 index 0000000000..219dd9619a --- /dev/null +++ b/venus-shared/actors/builtin/system/state.v6.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + system6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/system" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store) (State, error) { + out := state6{store: store} + out.State = system6.State{} + return &out, nil +} + +type state6 struct { + system6.State + store adt.Store +} + +func (s *state6) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/system/state.v7.go b/venus-shared/actors/builtin/system/state.v7.go new file mode 100644 index 0000000000..f4f68fcc78 --- /dev/null +++ b/venus-shared/actors/builtin/system/state.v7.go @@ -0,0 +1,37 @@ +// FETCHED FROM LOTUS: builtin/system/state.go.template + +package system + +import ( + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + system7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/system" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store) (State, error) { + out := state7{store: store} + out.State = system7.State{} + return &out, nil +} + +type state7 struct { + system7.State + store adt.Store +} + +func (s *state7) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/verifreg/actor.go b/venus-shared/actors/builtin/verifreg/actor.go new file mode 100644 index 0000000000..190dd4d0ab --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/actor.go @@ -0,0 +1,165 @@ +// FETCHED FROM LOTUS: builtin/verifreg/actor.go.template + +package verifreg + +import ( + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/go-state-types/cbor" + + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func init() { + + builtin.RegisterActorState(builtin0.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load0(store, root) + }) + + builtin.RegisterActorState(builtin2.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load2(store, root) + }) + + builtin.RegisterActorState(builtin3.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load3(store, root) + }) + + builtin.RegisterActorState(builtin4.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load4(store, root) + }) + + builtin.RegisterActorState(builtin5.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load5(store, root) + }) + + builtin.RegisterActorState(builtin6.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load6(store, root) + }) + + builtin.RegisterActorState(builtin7.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load7(store, root) + }) + +} + +var ( + Address = builtin7.VerifiedRegistryActorAddr + Methods = builtin7.MethodsVerifiedRegistry +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { + + case builtin0.VerifiedRegistryActorCodeID: + return load0(store, act.Head) + + case builtin2.VerifiedRegistryActorCodeID: + return load2(store, act.Head) + + case builtin3.VerifiedRegistryActorCodeID: + return load3(store, act.Head) + + case builtin4.VerifiedRegistryActorCodeID: + return load4(store, act.Head) + + case builtin5.VerifiedRegistryActorCodeID: + return load5(store, act.Head) + + case builtin6.VerifiedRegistryActorCodeID: + return load6(store, act.Head) + + case builtin7.VerifiedRegistryActorCodeID: + return load7(store, act.Head) + + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, rootKeyAddress address.Address) (State, error) { + switch av { + + case actors.Version0: + return make0(store, rootKeyAddress) + + case actors.Version2: + return make2(store, rootKeyAddress) + + case actors.Version3: + return make3(store, rootKeyAddress) + + case actors.Version4: + return make4(store, rootKeyAddress) + + case actors.Version5: + return make5(store, rootKeyAddress) + + case actors.Version6: + return make6(store, rootKeyAddress) + + case actors.Version7: + return make7(store, rootKeyAddress) + + } + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { + + case actors.Version0: + return builtin0.VerifiedRegistryActorCodeID, nil + + case actors.Version2: + return builtin2.VerifiedRegistryActorCodeID, nil + + case actors.Version3: + return builtin3.VerifiedRegistryActorCodeID, nil + + case actors.Version4: + return builtin4.VerifiedRegistryActorCodeID, nil + + case actors.Version5: + return builtin5.VerifiedRegistryActorCodeID, nil + + case actors.Version6: + return builtin6.VerifiedRegistryActorCodeID, nil + + case actors.Version7: + return builtin7.VerifiedRegistryActorCodeID, nil + + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + +type State interface { + cbor.Marshaler + + RootKey() (address.Address, error) + VerifiedClientDataCap(address.Address) (bool, abi.StoragePower, error) + VerifierDataCap(address.Address) (bool, abi.StoragePower, error) + ForEachVerifier(func(addr address.Address, dcap abi.StoragePower) error) error + ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error + GetState() interface{} +} diff --git a/venus-shared/actors/builtin/verifreg/actor.go.template b/venus-shared/actors/builtin/verifreg/actor.go.template new file mode 100644 index 0000000000..422ada1838 --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/actor.go.template @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/actor.go.template + +package verifreg + +import ( + "github.com/ipfs/go-cid" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/go-state-types/cbor" +{{range .versions}} + builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" +{{end}} + + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors" + types "github.com/filecoin-project/venus/venus-shared/chain" +) + +func init() { +{{range .versions}} + builtin.RegisterActorState(builtin{{.}}.VerifiedRegistryActorCodeID, func(store adt.Store, root cid.Cid) (cbor.Marshaler, error) { + return load{{.}}(store, root) + }) +{{end}} +} + +var ( + Address = builtin{{.latestVersion}}.VerifiedRegistryActorAddr + Methods = builtin{{.latestVersion}}.MethodsVerifiedRegistry +) + +func Load(store adt.Store, act *types.Actor) (State, error) { + switch act.Code { +{{range .versions}} + case builtin{{.}}.VerifiedRegistryActorCodeID: + return load{{.}}(store, act.Head) +{{end}} + } + return nil, xerrors.Errorf("unknown actor code %s", act.Code) +} + +func MakeState(store adt.Store, av actors.Version, rootKeyAddress address.Address) (State, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return make{{.}}(store, rootKeyAddress) +{{end}} +} + return nil, xerrors.Errorf("unknown actor version %d", av) +} + +func GetActorCodeID(av actors.Version) (cid.Cid, error) { + switch av { +{{range .versions}} + case actors.Version{{.}}: + return builtin{{.}}.VerifiedRegistryActorCodeID, nil +{{end}} + } + + return cid.Undef, xerrors.Errorf("unknown actor version %d", av) +} + + +type State interface { + cbor.Marshaler + + RootKey() (address.Address, error) + VerifiedClientDataCap(address.Address) (bool, abi.StoragePower, error) + VerifierDataCap(address.Address) (bool, abi.StoragePower, error) + ForEachVerifier(func(addr address.Address, dcap abi.StoragePower) error) error + ForEachClient(func(addr address.Address, dcap abi.StoragePower) error) error + GetState() interface{} +} diff --git a/venus-shared/actors/builtin/verifreg/state.sep.go.template b/venus-shared/actors/builtin/verifreg/state.sep.go.template new file mode 100644 index 0000000000..57b8c4a38a --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/state.sep.go.template @@ -0,0 +1,84 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + +{{if (ge .v 3)}} builtin{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin" +{{end}} verifreg{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/builtin/verifreg" + adt{{.v}} "github.com/filecoin-project/specs-actors{{.import}}actors/util/adt" +) + +var _ State = (*state{{.v}})(nil) + +func load{{.v}}(store adt.Store, root cid.Cid) (State, error) { + out := state{{.v}}{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make{{.v}}(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state{{.v}}{store: store} + {{if (le .v 2)}} + em, err := adt{{.v}}.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *verifreg{{.v}}.ConstructState(em, rootKeyAddress) + {{else}} + s, err := verifreg{{.v}}.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + {{end}} + return &out, nil +} + +type state{{.v}} struct { + verifreg{{.v}}.State + store adt.Store +} + +func (s *state{{.v}}) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state{{.v}}) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version{{.v}}, s.verifiedClients, addr) +} + +func (s *state{{.v}}) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version{{.v}}, s.verifiers, addr) +} + +func (s *state{{.v}}) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version{{.v}}, s.verifiers, cb) +} + +func (s *state{{.v}}) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version{{.v}}, s.verifiedClients, cb) +} + +func (s *state{{.v}}) verifiedClients() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.VerifiedClients{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) verifiers() (adt.Map, error) { + return adt{{.v}}.AsMap(s.store, s.Verifiers{{if (ge .v 3)}}, builtin{{.v}}.DefaultHamtBitwidth{{end}}) +} + +func (s *state{{.v}}) GetState() interface{} { + return &s.State +} \ No newline at end of file diff --git a/venus-shared/actors/builtin/verifreg/state.v0.go b/venus-shared/actors/builtin/verifreg/state.v0.go new file mode 100644 index 0000000000..676dc218c3 --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/state.v0.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + verifreg0 "github.com/filecoin-project/specs-actors/actors/builtin/verifreg" + adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" +) + +var _ State = (*state0)(nil) + +func load0(store adt.Store, root cid.Cid) (State, error) { + out := state0{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make0(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state0{store: store} + + em, err := adt0.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *verifreg0.ConstructState(em, rootKeyAddress) + + return &out, nil +} + +type state0 struct { + verifreg0.State + store adt.Store +} + +func (s *state0) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state0) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version0, s.verifiedClients, addr) +} + +func (s *state0) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version0, s.verifiers, addr) +} + +func (s *state0) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version0, s.verifiers, cb) +} + +func (s *state0) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version0, s.verifiedClients, cb) +} + +func (s *state0) verifiedClients() (adt.Map, error) { + return adt0.AsMap(s.store, s.VerifiedClients) +} + +func (s *state0) verifiers() (adt.Map, error) { + return adt0.AsMap(s.store, s.Verifiers) +} + +func (s *state0) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/verifreg/state.v2.go b/venus-shared/actors/builtin/verifreg/state.v2.go new file mode 100644 index 0000000000..3fe4ad24c1 --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/state.v2.go @@ -0,0 +1,76 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + verifreg2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/verifreg" + adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" +) + +var _ State = (*state2)(nil) + +func load2(store adt.Store, root cid.Cid) (State, error) { + out := state2{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make2(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state2{store: store} + + em, err := adt2.MakeEmptyMap(store).Root() + if err != nil { + return nil, err + } + + out.State = *verifreg2.ConstructState(em, rootKeyAddress) + + return &out, nil +} + +type state2 struct { + verifreg2.State + store adt.Store +} + +func (s *state2) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state2) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version2, s.verifiedClients, addr) +} + +func (s *state2) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version2, s.verifiers, addr) +} + +func (s *state2) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version2, s.verifiers, cb) +} + +func (s *state2) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version2, s.verifiedClients, cb) +} + +func (s *state2) verifiedClients() (adt.Map, error) { + return adt2.AsMap(s.store, s.VerifiedClients) +} + +func (s *state2) verifiers() (adt.Map, error) { + return adt2.AsMap(s.store, s.Verifiers) +} + +func (s *state2) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/verifreg/state.v3.go b/venus-shared/actors/builtin/verifreg/state.v3.go new file mode 100644 index 0000000000..71b7dab582 --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/state.v3.go @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + verifreg3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/verifreg" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" +) + +var _ State = (*state3)(nil) + +func load3(store adt.Store, root cid.Cid) (State, error) { + out := state3{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make3(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state3{store: store} + + s, err := verifreg3.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state3 struct { + verifreg3.State + store adt.Store +} + +func (s *state3) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state3) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version3, s.verifiedClients, addr) +} + +func (s *state3) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version3, s.verifiers, addr) +} + +func (s *state3) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version3, s.verifiers, cb) +} + +func (s *state3) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version3, s.verifiedClients, cb) +} + +func (s *state3) verifiedClients() (adt.Map, error) { + return adt3.AsMap(s.store, s.VerifiedClients, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) verifiers() (adt.Map, error) { + return adt3.AsMap(s.store, s.Verifiers, builtin3.DefaultHamtBitwidth) +} + +func (s *state3) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/verifreg/state.v4.go b/venus-shared/actors/builtin/verifreg/state.v4.go new file mode 100644 index 0000000000..3fe92b7efc --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/state.v4.go @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + verifreg4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/verifreg" + adt4 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" +) + +var _ State = (*state4)(nil) + +func load4(store adt.Store, root cid.Cid) (State, error) { + out := state4{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make4(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state4{store: store} + + s, err := verifreg4.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state4 struct { + verifreg4.State + store adt.Store +} + +func (s *state4) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state4) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version4, s.verifiedClients, addr) +} + +func (s *state4) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version4, s.verifiers, addr) +} + +func (s *state4) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version4, s.verifiers, cb) +} + +func (s *state4) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version4, s.verifiedClients, cb) +} + +func (s *state4) verifiedClients() (adt.Map, error) { + return adt4.AsMap(s.store, s.VerifiedClients, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) verifiers() (adt.Map, error) { + return adt4.AsMap(s.store, s.Verifiers, builtin4.DefaultHamtBitwidth) +} + +func (s *state4) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/verifreg/state.v5.go b/venus-shared/actors/builtin/verifreg/state.v5.go new file mode 100644 index 0000000000..eb246b5542 --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/state.v5.go @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + verifreg5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/verifreg" + adt5 "github.com/filecoin-project/specs-actors/v5/actors/util/adt" +) + +var _ State = (*state5)(nil) + +func load5(store adt.Store, root cid.Cid) (State, error) { + out := state5{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make5(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state5{store: store} + + s, err := verifreg5.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state5 struct { + verifreg5.State + store adt.Store +} + +func (s *state5) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state5) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version5, s.verifiedClients, addr) +} + +func (s *state5) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version5, s.verifiers, addr) +} + +func (s *state5) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version5, s.verifiers, cb) +} + +func (s *state5) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version5, s.verifiedClients, cb) +} + +func (s *state5) verifiedClients() (adt.Map, error) { + return adt5.AsMap(s.store, s.VerifiedClients, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) verifiers() (adt.Map, error) { + return adt5.AsMap(s.store, s.Verifiers, builtin5.DefaultHamtBitwidth) +} + +func (s *state5) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/verifreg/state.v6.go b/venus-shared/actors/builtin/verifreg/state.v6.go new file mode 100644 index 0000000000..e2fe162186 --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/state.v6.go @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + verifreg6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/verifreg" + adt6 "github.com/filecoin-project/specs-actors/v6/actors/util/adt" +) + +var _ State = (*state6)(nil) + +func load6(store adt.Store, root cid.Cid) (State, error) { + out := state6{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make6(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state6{store: store} + + s, err := verifreg6.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state6 struct { + verifreg6.State + store adt.Store +} + +func (s *state6) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state6) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version6, s.verifiedClients, addr) +} + +func (s *state6) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version6, s.verifiers, addr) +} + +func (s *state6) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version6, s.verifiers, cb) +} + +func (s *state6) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version6, s.verifiedClients, cb) +} + +func (s *state6) verifiedClients() (adt.Map, error) { + return adt6.AsMap(s.store, s.VerifiedClients, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) verifiers() (adt.Map, error) { + return adt6.AsMap(s.store, s.Verifiers, builtin6.DefaultHamtBitwidth) +} + +func (s *state6) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/verifreg/state.v7.go b/venus-shared/actors/builtin/verifreg/state.v7.go new file mode 100644 index 0000000000..077e3ddc06 --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/state.v7.go @@ -0,0 +1,77 @@ +// FETCHED FROM LOTUS: builtin/verifreg/state.go.template + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + verifreg7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/verifreg" + adt7 "github.com/filecoin-project/specs-actors/v7/actors/util/adt" +) + +var _ State = (*state7)(nil) + +func load7(store adt.Store, root cid.Cid) (State, error) { + out := state7{store: store} + err := store.Get(store.Context(), root, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func make7(store adt.Store, rootKeyAddress address.Address) (State, error) { + out := state7{store: store} + + s, err := verifreg7.ConstructState(store, rootKeyAddress) + if err != nil { + return nil, err + } + + out.State = *s + + return &out, nil +} + +type state7 struct { + verifreg7.State + store adt.Store +} + +func (s *state7) RootKey() (address.Address, error) { + return s.State.RootKey, nil +} + +func (s *state7) VerifiedClientDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version7, s.verifiedClients, addr) +} + +func (s *state7) VerifierDataCap(addr address.Address) (bool, abi.StoragePower, error) { + return getDataCap(s.store, actors.Version7, s.verifiers, addr) +} + +func (s *state7) ForEachVerifier(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version7, s.verifiers, cb) +} + +func (s *state7) ForEachClient(cb func(addr address.Address, dcap abi.StoragePower) error) error { + return forEachCap(s.store, actors.Version7, s.verifiedClients, cb) +} + +func (s *state7) verifiedClients() (adt.Map, error) { + return adt7.AsMap(s.store, s.VerifiedClients, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) verifiers() (adt.Map, error) { + return adt7.AsMap(s.store, s.Verifiers, builtin7.DefaultHamtBitwidth) +} + +func (s *state7) GetState() interface{} { + return &s.State +} diff --git a/venus-shared/actors/builtin/verifreg/util.go b/venus-shared/actors/builtin/verifreg/util.go new file mode 100644 index 0000000000..1a97582d82 --- /dev/null +++ b/venus-shared/actors/builtin/verifreg/util.go @@ -0,0 +1,54 @@ +// FETCHED FROM LOTUS: builtin/verifreg/util.go + +package verifreg + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/venus-shared/actors" + "github.com/filecoin-project/venus/venus-shared/actors/adt" + "golang.org/x/xerrors" +) + +// taking this as a function instead of asking the caller to call it helps reduce some of the error +// checking boilerplate. +// +// "go made me do it" +type rootFunc func() (adt.Map, error) + +// Assumes that the bitwidth for v3 HAMTs is the DefaultHamtBitwidth +func getDataCap(store adt.Store, ver actors.Version, root rootFunc, addr address.Address) (bool, abi.StoragePower, error) { + if addr.Protocol() != address.ID { + return false, big.Zero(), xerrors.Errorf("can only look up ID addresses") + } + vh, err := root() + if err != nil { + return false, big.Zero(), xerrors.Errorf("loading verifreg: %w", err) + } + + var dcap abi.StoragePower + if found, err := vh.Get(abi.AddrKey(addr), &dcap); err != nil { + return false, big.Zero(), xerrors.Errorf("looking up addr: %w", err) + } else if !found { + return false, big.Zero(), nil + } + + return true, dcap, nil +} + +// Assumes that the bitwidth for v3 HAMTs is the DefaultHamtBitwidth +func forEachCap(store adt.Store, ver actors.Version, root rootFunc, cb func(addr address.Address, dcap abi.StoragePower) error) error { + vh, err := root() + if err != nil { + return xerrors.Errorf("loading verified clients: %w", err) + } + var dcap abi.StoragePower + return vh.ForEach(&dcap, func(key string) error { + a, err := address.NewFromBytes([]byte(key)) + if err != nil { + return err + } + return cb(a, dcap) + }) +} diff --git a/venus-shared/actors/params.go b/venus-shared/actors/params.go new file mode 100644 index 0000000000..f61f05eeaf --- /dev/null +++ b/venus-shared/actors/params.go @@ -0,0 +1,21 @@ +// FETCHED FROM LOTUS: params.go + +package actors + +import ( + "bytes" + + "github.com/filecoin-project/go-state-types/exitcode" + + "github.com/filecoin-project/venus/venus-shared/actors/aerrors" + cbg "github.com/whyrusleeping/cbor-gen" +) + +func SerializeParams(i cbg.CBORMarshaler) ([]byte, aerrors.ActorError) { + buf := new(bytes.Buffer) + if err := i.MarshalCBOR(buf); err != nil { + // TODO: shouldnt this be a fatal error? + return nil, aerrors.Absorb(err, exitcode.ErrSerialization, "failed to encode parameter") + } + return buf.Bytes(), nil +} diff --git a/venus-shared/actors/policy/policy.go b/venus-shared/actors/policy/policy.go new file mode 100644 index 0000000000..0dd81ef088 --- /dev/null +++ b/venus-shared/actors/policy/policy.go @@ -0,0 +1,609 @@ +// FETCHED FROM LOTUS: policy/policy.go.template + +package policy + +import ( + "sort" + + "github.com/filecoin-project/go-state-types/big" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/venus-shared/actors" + + market0 "github.com/filecoin-project/specs-actors/actors/builtin/market" + miner0 "github.com/filecoin-project/specs-actors/actors/builtin/miner" + power0 "github.com/filecoin-project/specs-actors/actors/builtin/power" + verifreg0 "github.com/filecoin-project/specs-actors/actors/builtin/verifreg" + + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" + market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" + miner2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/miner" + verifreg2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/verifreg" + + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + market3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/market" + miner3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/miner" + verifreg3 "github.com/filecoin-project/specs-actors/v3/actors/builtin/verifreg" + + builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin" + market4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/market" + miner4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/miner" + verifreg4 "github.com/filecoin-project/specs-actors/v4/actors/builtin/verifreg" + + builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin" + market5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/market" + miner5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/miner" + verifreg5 "github.com/filecoin-project/specs-actors/v5/actors/builtin/verifreg" + + builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin" + market6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/market" + miner6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/miner" + verifreg6 "github.com/filecoin-project/specs-actors/v6/actors/builtin/verifreg" + + builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin" + market7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/market" + miner7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/miner" + verifreg7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/verifreg" + + paych7 "github.com/filecoin-project/specs-actors/v7/actors/builtin/paych" +) + +const ( + ChainFinality = miner7.ChainFinality + SealRandomnessLookback = ChainFinality + PaychSettleDelay = paych7.SettleDelay + MaxPreCommitRandomnessLookback = builtin7.EpochsInDay + SealRandomnessLookback +) + +// SetSupportedProofTypes sets supported proof types, across all actor versions. +// This should only be used for testing. +func SetSupportedProofTypes(types ...abi.RegisteredSealProof) { + + miner0.SupportedProofTypes = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner2.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + miner2.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2) + miner2.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner3.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + miner3.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2) + miner3.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner4.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + miner4.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2) + miner4.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner5.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner6.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + miner7.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + + AddSupportedProofTypes(types...) +} + +// AddSupportedProofTypes sets supported proof types, across all actor versions. +// This should only be used for testing. +func AddSupportedProofTypes(types ...abi.RegisteredSealProof) { + for _, t := range types { + if t >= abi.RegisteredSealProof_StackedDrg2KiBV1_1 { + panic("must specify v1 proof types only") + } + // Set for all miner versions. + + miner0.SupportedProofTypes[t] = struct{}{} + + miner2.PreCommitSealProofTypesV0[t] = struct{}{} + miner2.PreCommitSealProofTypesV7[t] = struct{}{} + miner2.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + miner2.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + + miner3.PreCommitSealProofTypesV0[t] = struct{}{} + miner3.PreCommitSealProofTypesV7[t] = struct{}{} + miner3.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + miner3.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + + miner4.PreCommitSealProofTypesV0[t] = struct{}{} + miner4.PreCommitSealProofTypesV7[t] = struct{}{} + miner4.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + miner4.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + + miner5.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + wpp, err := t.RegisteredWindowPoStProof() + if err != nil { + // Fine to panic, this is a test-only method + panic(err) + } + + miner5.WindowPoStProofTypes[wpp] = struct{}{} + + miner6.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + wpp, err = t.RegisteredWindowPoStProof() + if err != nil { + // Fine to panic, this is a test-only method + panic(err) + } + + miner6.WindowPoStProofTypes[wpp] = struct{}{} + + miner7.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + wpp, err = t.RegisteredWindowPoStProof() + if err != nil { + // Fine to panic, this is a test-only method + panic(err) + } + + miner7.WindowPoStProofTypes[wpp] = struct{}{} + + } +} + +// SetPreCommitChallengeDelay sets the pre-commit challenge delay across all +// actors versions. Use for testing. +func SetPreCommitChallengeDelay(delay abi.ChainEpoch) { + // Set for all miner versions. + + miner0.PreCommitChallengeDelay = delay + + miner2.PreCommitChallengeDelay = delay + + miner3.PreCommitChallengeDelay = delay + + miner4.PreCommitChallengeDelay = delay + + miner5.PreCommitChallengeDelay = delay + + miner6.PreCommitChallengeDelay = delay + + miner7.PreCommitChallengeDelay = delay + +} + +// TODO: this function shouldn't really exist. Instead, the API should expose the precommit delay. +func GetPreCommitChallengeDelay() abi.ChainEpoch { + return miner7.PreCommitChallengeDelay +} + +// SetConsensusMinerMinPower sets the minimum power of an individual miner must +// meet for leader election, across all actor versions. This should only be used +// for testing. +func SetConsensusMinerMinPower(p abi.StoragePower) { + + power0.ConsensusMinerMinPower = p + + for _, policy := range builtin2.SealProofPolicies { + policy.ConsensusMinerMinPower = p + } + + for _, policy := range builtin3.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + + for _, policy := range builtin4.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + + for _, policy := range builtin5.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + + for _, policy := range builtin6.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + + for _, policy := range builtin7.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + +} + +// SetMinVerifiedDealSize sets the minimum size of a verified deal. This should +// only be used for testing. +func SetMinVerifiedDealSize(size abi.StoragePower) { + + verifreg0.MinVerifiedDealSize = size + + verifreg2.MinVerifiedDealSize = size + + verifreg3.MinVerifiedDealSize = size + + verifreg4.MinVerifiedDealSize = size + + verifreg5.MinVerifiedDealSize = size + + verifreg6.MinVerifiedDealSize = size + + verifreg7.MinVerifiedDealSize = size + +} + +func GetMaxProveCommitDuration(ver actors.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { + switch ver { + + case actors.Version0: + + return miner0.MaxSealDuration[t], nil + + case actors.Version2: + + return miner2.MaxProveCommitDuration[t], nil + + case actors.Version3: + + return miner3.MaxProveCommitDuration[t], nil + + case actors.Version4: + + return miner4.MaxProveCommitDuration[t], nil + + case actors.Version5: + + return miner5.MaxProveCommitDuration[t], nil + + case actors.Version6: + + return miner6.MaxProveCommitDuration[t], nil + + case actors.Version7: + + return miner7.MaxProveCommitDuration[t], nil + + default: + return 0, xerrors.Errorf("unsupported actors version") + } +} + +// SetProviderCollateralSupplyTarget sets the percentage of normalized circulating +// supply that must be covered by provider collateral in a deal. This should +// only be used for testing. +func SetProviderCollateralSupplyTarget(num, denom big.Int) { + + market2.ProviderCollateralSupplyTarget = builtin2.BigFrac{ + Numerator: num, + Denominator: denom, + } + + market3.ProviderCollateralSupplyTarget = builtin3.BigFrac{ + Numerator: num, + Denominator: denom, + } + + market4.ProviderCollateralSupplyTarget = builtin4.BigFrac{ + Numerator: num, + Denominator: denom, + } + + market5.ProviderCollateralSupplyTarget = builtin5.BigFrac{ + Numerator: num, + Denominator: denom, + } + + market6.ProviderCollateralSupplyTarget = builtin6.BigFrac{ + Numerator: num, + Denominator: denom, + } + + market7.ProviderCollateralSupplyTarget = builtin7.BigFrac{ + Numerator: num, + Denominator: denom, + } + +} + +func DealProviderCollateralBounds( + size abi.PaddedPieceSize, verified bool, + rawBytePower, qaPower, baselinePower abi.StoragePower, + circulatingFil abi.TokenAmount, nwVer network.Version, +) (min, max abi.TokenAmount, err error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), big.Zero(), err + } + switch v { + + case actors.Version0: + + min, max := market0.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil, nwVer) + return min, max, nil + + case actors.Version2: + + min, max := market2.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + case actors.Version3: + + min, max := market3.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + case actors.Version4: + + min, max := market4.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + case actors.Version5: + + min, max := market5.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + case actors.Version6: + + min, max := market6.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + case actors.Version7: + + min, max := market7.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + + default: + return big.Zero(), big.Zero(), xerrors.Errorf("unsupported actors version") + } +} + +func DealDurationBounds(pieceSize abi.PaddedPieceSize) (min, max abi.ChainEpoch) { + return market7.DealDurationBounds(pieceSize) +} + +// Sets the challenge window and scales the proving period to match (such that +// there are always 48 challenge windows in a proving period). +func SetWPoStChallengeWindow(period abi.ChainEpoch) { + + miner0.WPoStChallengeWindow = period + miner0.WPoStProvingPeriod = period * abi.ChainEpoch(miner0.WPoStPeriodDeadlines) + + miner2.WPoStChallengeWindow = period + miner2.WPoStProvingPeriod = period * abi.ChainEpoch(miner2.WPoStPeriodDeadlines) + + miner3.WPoStChallengeWindow = period + miner3.WPoStProvingPeriod = period * abi.ChainEpoch(miner3.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner3.WPoStDisputeWindow = period * 30 + + miner4.WPoStChallengeWindow = period + miner4.WPoStProvingPeriod = period * abi.ChainEpoch(miner4.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner4.WPoStDisputeWindow = period * 30 + + miner5.WPoStChallengeWindow = period + miner5.WPoStProvingPeriod = period * abi.ChainEpoch(miner5.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner5.WPoStDisputeWindow = period * 30 + + miner6.WPoStChallengeWindow = period + miner6.WPoStProvingPeriod = period * abi.ChainEpoch(miner6.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner6.WPoStDisputeWindow = period * 30 + + miner7.WPoStChallengeWindow = period + miner7.WPoStProvingPeriod = period * abi.ChainEpoch(miner7.WPoStPeriodDeadlines) + + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner7.WPoStDisputeWindow = period * 30 + +} + +func GetWinningPoStSectorSetLookback(nwVer network.Version) abi.ChainEpoch { + if nwVer <= network.Version3 { + return 10 + } + + // NOTE: if this ever changes, adjust it in a (*Miner).mineOne() logline as well + return ChainFinality +} + +func GetMaxSectorExpirationExtension() abi.ChainEpoch { + return miner7.MaxSectorExpirationExtension +} + +func GetMinSectorExpiration() abi.ChainEpoch { + return miner7.MinSectorExpiration +} + +func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, error) { + sectorsPerPart, err := builtin7.PoStProofWindowPoStPartitionSectors(p) + if err != nil { + return 0, err + } + maxSectors, err := GetAddressedSectorsMax(nv) + if err != nil { + return 0, err + } + return int(uint64(maxSectors) / sectorsPerPart), nil +} + +func GetDefaultSectorSize() abi.SectorSize { + // supported sector sizes are the same across versions. + szs := make([]abi.SectorSize, 0, len(miner7.PreCommitSealProofTypesV8)) + for spt := range miner7.PreCommitSealProofTypesV8 { + ss, err := spt.SectorSize() + if err != nil { + panic(err) + } + + szs = append(szs, ss) + } + + sort.Slice(szs, func(i, j int) bool { + return szs[i] < szs[j] + }) + + return szs[0] +} + +func GetDefaultAggregationProof() abi.RegisteredAggregationProof { + return abi.RegisteredAggregationProof_SnarkPackV1 +} + +func GetSectorMaxLifetime(proof abi.RegisteredSealProof, nwVer network.Version) abi.ChainEpoch { + if nwVer <= network.Version10 { + return builtin4.SealProofPoliciesV0[proof].SectorMaxLifetime + } + + return builtin7.SealProofPoliciesV11[proof].SectorMaxLifetime +} + +func GetAddressedSectorsMax(nwVer network.Version) (int, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return 0, err + } + switch v { + + case actors.Version0: + return miner0.AddressedSectorsMax, nil + + case actors.Version2: + return miner2.AddressedSectorsMax, nil + + case actors.Version3: + return miner3.AddressedSectorsMax, nil + + case actors.Version4: + return miner4.AddressedSectorsMax, nil + + case actors.Version5: + return miner5.AddressedSectorsMax, nil + + case actors.Version6: + return miner6.AddressedSectorsMax, nil + + case actors.Version7: + return miner7.AddressedSectorsMax, nil + + default: + return 0, xerrors.Errorf("unsupported network version") + } +} + +func GetDeclarationsMax(nwVer network.Version) (int, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return 0, err + } + switch v { + + case actors.Version0: + + // TODO: Should we instead error here since the concept doesn't exist yet? + return miner0.AddressedPartitionsMax, nil + + case actors.Version2: + + return miner2.DeclarationsMax, nil + + case actors.Version3: + + return miner3.DeclarationsMax, nil + + case actors.Version4: + + return miner4.DeclarationsMax, nil + + case actors.Version5: + + return miner5.DeclarationsMax, nil + + case actors.Version6: + + return miner6.DeclarationsMax, nil + + case actors.Version7: + + return miner7.DeclarationsMax, nil + + default: + return 0, xerrors.Errorf("unsupported network version") + } +} + +func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), err + } + switch v { + + case actors.Version0: + + return big.Zero(), nil + + case actors.Version2: + + return big.Zero(), nil + + case actors.Version3: + + return big.Zero(), nil + + case actors.Version4: + + return big.Zero(), nil + + case actors.Version5: + + return miner5.AggregateNetworkFee(aggregateSize, baseFee), nil + + case actors.Version6: + + return miner6.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + + case actors.Version7: + + return miner7.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + + default: + return big.Zero(), xerrors.Errorf("unsupported network version") + } +} + +func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), err + } + switch v { + + case actors.Version0: + + return big.Zero(), nil + + case actors.Version2: + + return big.Zero(), nil + + case actors.Version3: + + return big.Zero(), nil + + case actors.Version4: + + return big.Zero(), nil + + case actors.Version5: + + return big.Zero(), nil + + case actors.Version6: + + return miner6.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + + case actors.Version7: + + return miner7.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + + default: + return big.Zero(), xerrors.Errorf("unsupported network version") + } +} diff --git a/venus-shared/actors/policy/policy.go.template b/venus-shared/actors/policy/policy.go.template new file mode 100644 index 0000000000..39661a381c --- /dev/null +++ b/venus-shared/actors/policy/policy.go.template @@ -0,0 +1,337 @@ +// FETCHED FROM LOTUS: policy/policy.go.template + +package policy + +import ( + "sort" + + "github.com/filecoin-project/go-state-types/big" + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/venus-shared/actors" + + {{range .versions}} + {{if (ge . 2)}} builtin{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin" {{end}} + market{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/market" + miner{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/miner" + verifreg{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/verifreg" + {{if (eq . 0)}} power{{.}} "github.com/filecoin-project/specs-actors{{import .}}actors/builtin/power" {{end}} + {{end}} + + paych{{.latestVersion}} "github.com/filecoin-project/specs-actors{{import .latestVersion}}actors/builtin/paych" +) + +const ( + ChainFinality = miner{{.latestVersion}}.ChainFinality + SealRandomnessLookback = ChainFinality + PaychSettleDelay = paych{{.latestVersion}}.SettleDelay + MaxPreCommitRandomnessLookback = builtin{{.latestVersion}}.EpochsInDay + SealRandomnessLookback +) + +// SetSupportedProofTypes sets supported proof types, across all actor versions. +// This should only be used for testing. +func SetSupportedProofTypes(types ...abi.RegisteredSealProof) { + {{range .versions}} + {{if (eq . 0)}} + miner{{.}}.SupportedProofTypes = make(map[abi.RegisteredSealProof]struct{}, len(types)) + {{else if (le . 4)}} + miner{{.}}.PreCommitSealProofTypesV0 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + miner{{.}}.PreCommitSealProofTypesV7 = make(map[abi.RegisteredSealProof]struct{}, len(types)*2) + miner{{.}}.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + {{else}} + miner{{.}}.PreCommitSealProofTypesV8 = make(map[abi.RegisteredSealProof]struct{}, len(types)) + {{end}} + {{end}} + + AddSupportedProofTypes(types...) +} + +// AddSupportedProofTypes sets supported proof types, across all actor versions. +// This should only be used for testing. +func AddSupportedProofTypes(types ...abi.RegisteredSealProof) { + for _, t := range types { + if t >= abi.RegisteredSealProof_StackedDrg2KiBV1_1 { + panic("must specify v1 proof types only") + } + // Set for all miner versions. + + {{range .versions}} + {{if (eq . 0)}} + miner{{.}}.SupportedProofTypes[t] = struct{}{} + {{else if (le . 4)}} + miner{{.}}.PreCommitSealProofTypesV0[t] = struct{}{} + miner{{.}}.PreCommitSealProofTypesV7[t] = struct{}{} + miner{{.}}.PreCommitSealProofTypesV7[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + miner{{.}}.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + {{else if (eq . 5)}} + miner{{.}}.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + wpp, err := t.RegisteredWindowPoStProof() + if err != nil { + // Fine to panic, this is a test-only method + panic(err) + } + + miner{{.}}.WindowPoStProofTypes[wpp] = struct{}{} + {{else}} + miner{{.}}.PreCommitSealProofTypesV8[t+abi.RegisteredSealProof_StackedDrg2KiBV1_1] = struct{}{} + wpp, err = t.RegisteredWindowPoStProof() + if err != nil { + // Fine to panic, this is a test-only method + panic(err) + } + + miner{{.}}.WindowPoStProofTypes[wpp] = struct{}{} + {{end}} + {{end}} + } +} + +// SetPreCommitChallengeDelay sets the pre-commit challenge delay across all +// actors versions. Use for testing. +func SetPreCommitChallengeDelay(delay abi.ChainEpoch) { + // Set for all miner versions. + {{range .versions}} + miner{{.}}.PreCommitChallengeDelay = delay + {{end}} +} + +// TODO: this function shouldn't really exist. Instead, the API should expose the precommit delay. +func GetPreCommitChallengeDelay() abi.ChainEpoch { + return miner{{.latestVersion}}.PreCommitChallengeDelay +} + +// SetConsensusMinerMinPower sets the minimum power of an individual miner must +// meet for leader election, across all actor versions. This should only be used +// for testing. +func SetConsensusMinerMinPower(p abi.StoragePower) { + {{range .versions}} + {{if (eq . 0)}} + power{{.}}.ConsensusMinerMinPower = p + {{else if (eq . 2)}} + for _, policy := range builtin{{.}}.SealProofPolicies { + policy.ConsensusMinerMinPower = p + } + {{else}} + for _, policy := range builtin{{.}}.PoStProofPolicies { + policy.ConsensusMinerMinPower = p + } + {{end}} + {{end}} +} + +// SetMinVerifiedDealSize sets the minimum size of a verified deal. This should +// only be used for testing. +func SetMinVerifiedDealSize(size abi.StoragePower) { + {{range .versions}} + verifreg{{.}}.MinVerifiedDealSize = size + {{end}} +} + +func GetMaxProveCommitDuration(ver actors.Version, t abi.RegisteredSealProof) (abi.ChainEpoch, error) { + switch ver { + {{range .versions}} + case actors.Version{{.}}: + {{if (eq . 0)}} + return miner{{.}}.MaxSealDuration[t], nil + {{else}} + return miner{{.}}.MaxProveCommitDuration[t], nil + {{end}} + {{end}} + default: + return 0, xerrors.Errorf("unsupported actors version") + } +} + +// SetProviderCollateralSupplyTarget sets the percentage of normalized circulating +// supply that must be covered by provider collateral in a deal. This should +// only be used for testing. +func SetProviderCollateralSupplyTarget(num, denom big.Int) { +{{range .versions}} + {{if (ge . 2)}} + market{{.}}.ProviderCollateralSupplyTarget = builtin{{.}}.BigFrac{ + Numerator: num, + Denominator: denom, + } + {{end}} +{{end}} +} + +func DealProviderCollateralBounds( + size abi.PaddedPieceSize, verified bool, + rawBytePower, qaPower, baselinePower abi.StoragePower, + circulatingFil abi.TokenAmount, nwVer network.Version, +) (min, max abi.TokenAmount, err error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), big.Zero(), err + } + switch v { + {{range .versions}} + case actors.Version{{.}}: + {{if (eq . 0)}} + min, max := market{{.}}.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil, nwVer) + return min, max, nil + {{else}} + min, max := market{{.}}.DealProviderCollateralBounds(size, verified, rawBytePower, qaPower, baselinePower, circulatingFil) + return min, max, nil + {{end}} + {{end}} + default: + return big.Zero(), big.Zero(), xerrors.Errorf("unsupported actors version") + } +} + +func DealDurationBounds(pieceSize abi.PaddedPieceSize) (min, max abi.ChainEpoch) { + return market{{.latestVersion}}.DealDurationBounds(pieceSize) +} + +// Sets the challenge window and scales the proving period to match (such that +// there are always 48 challenge windows in a proving period). +func SetWPoStChallengeWindow(period abi.ChainEpoch) { + {{range .versions}} + miner{{.}}.WPoStChallengeWindow = period + miner{{.}}.WPoStProvingPeriod = period * abi.ChainEpoch(miner{{.}}.WPoStPeriodDeadlines) + {{if (ge . 3)}} + // by default, this is 2x finality which is 30 periods. + // scale it if we're scaling the challenge period. + miner{{.}}.WPoStDisputeWindow = period * 30 + {{end}} + {{end}} +} + +func GetWinningPoStSectorSetLookback(nwVer network.Version) abi.ChainEpoch { + if nwVer <= network.Version3 { + return 10 + } + + // NOTE: if this ever changes, adjust it in a (*Miner).mineOne() logline as well + return ChainFinality +} + +func GetMaxSectorExpirationExtension() abi.ChainEpoch { + return miner{{.latestVersion}}.MaxSectorExpirationExtension +} + +func GetMinSectorExpiration() abi.ChainEpoch { + return miner{{.latestVersion}}.MinSectorExpiration +} + +func GetMaxPoStPartitions(nv network.Version, p abi.RegisteredPoStProof) (int, error) { + sectorsPerPart, err := builtin{{.latestVersion}}.PoStProofWindowPoStPartitionSectors(p) + if err != nil { + return 0, err + } + maxSectors, err := GetAddressedSectorsMax(nv) + if err != nil { + return 0, err + } + return int(uint64(maxSectors) / sectorsPerPart), nil +} + +func GetDefaultSectorSize() abi.SectorSize { + // supported sector sizes are the same across versions. + szs := make([]abi.SectorSize, 0, len(miner{{.latestVersion}}.PreCommitSealProofTypesV8)) + for spt := range miner{{.latestVersion}}.PreCommitSealProofTypesV8 { + ss, err := spt.SectorSize() + if err != nil { + panic(err) + } + + szs = append(szs, ss) + } + + sort.Slice(szs, func(i, j int) bool { + return szs[i] < szs[j] + }) + + return szs[0] +} + +func GetDefaultAggregationProof() abi.RegisteredAggregationProof { + return abi.RegisteredAggregationProof_SnarkPackV1 +} + +func GetSectorMaxLifetime(proof abi.RegisteredSealProof, nwVer network.Version) abi.ChainEpoch { + if nwVer <= network.Version10 { + return builtin4.SealProofPoliciesV0[proof].SectorMaxLifetime + } + + return builtin{{.latestVersion}}.SealProofPoliciesV11[proof].SectorMaxLifetime +} + +func GetAddressedSectorsMax(nwVer network.Version) (int, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return 0, err + } + switch v { + {{range .versions}} + case actors.Version{{.}}: + return miner{{.}}.AddressedSectorsMax, nil + {{end}} + default: + return 0, xerrors.Errorf("unsupported network version") + } +} + +func GetDeclarationsMax(nwVer network.Version) (int, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return 0, err + } + switch v { + {{range .versions}} + case actors.Version{{.}}: + {{if (eq . 0)}} + // TODO: Should we instead error here since the concept doesn't exist yet? + return miner{{.}}.AddressedPartitionsMax, nil + {{else}} + return miner{{.}}.DeclarationsMax, nil + {{end}} + {{end}} + default: + return 0, xerrors.Errorf("unsupported network version") + } +} + +func AggregateProveCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), err + } + switch v { + {{range .versions}} + case actors.Version{{.}}: + {{if (ge . 6)}} + return miner{{.}}.AggregateProveCommitNetworkFee(aggregateSize, baseFee), nil + {{else if (eq . 5)}} + return miner{{.}}.AggregateNetworkFee(aggregateSize, baseFee), nil + {{else}} + return big.Zero(), nil + {{end}} + {{end}} + default: + return big.Zero(), xerrors.Errorf("unsupported network version") + } +} + +func AggregatePreCommitNetworkFee(nwVer network.Version, aggregateSize int, baseFee abi.TokenAmount) (abi.TokenAmount, error) { + v, err := actors.VersionForNetwork(nwVer) + if err != nil { + return big.Zero(), err + } + switch v { + {{range .versions}} + case actors.Version{{.}}: + {{if (ge . 6)}} + return miner{{.}}.AggregatePreCommitNetworkFee(aggregateSize, baseFee), nil + {{else}} + return big.Zero(), nil + {{end}} + {{end}} + default: + return big.Zero(), xerrors.Errorf("unsupported network version") + } +} diff --git a/venus-shared/actors/version.go b/venus-shared/actors/version.go new file mode 100644 index 0000000000..338cc75700 --- /dev/null +++ b/venus-shared/actors/version.go @@ -0,0 +1,61 @@ +// FETCHED FROM LOTUS: version.go + +package actors + +import ( + "fmt" + + "github.com/filecoin-project/go-state-types/network" +) + +type Version int + +/* inline-gen template + +var LatestVersion = {{.latestActorsVersion}} + +var Versions = []int{ {{range .actorVersions}} {{.}}, {{end}} } + +const ({{range .actorVersions}} + Version{{.}} Version = {{.}}{{end}} +) + +/* inline-gen start */ + +var LatestVersion = 7 + +var Versions = []int{0, 2, 3, 4, 5, 6, 7} + +const ( + Version0 Version = 0 + Version2 Version = 2 + Version3 Version = 3 + Version4 Version = 4 + Version5 Version = 5 + Version6 Version = 6 + Version7 Version = 7 +) + +/* inline-gen end */ + +// Converts a network version into an actors adt version. +func VersionForNetwork(version network.Version) (Version, error) { + switch version { + case network.Version0, network.Version1, network.Version2, network.Version3: + return Version0, nil + case network.Version4, network.Version5, network.Version6, network.Version7, network.Version8, network.Version9: + return Version2, nil + case network.Version10, network.Version11: + return Version3, nil + case network.Version12: + return Version4, nil + case network.Version13: + return Version5, nil + case network.Version14: + return Version6, nil + case network.Version15: + return Version7, nil + default: + return -1, fmt.Errorf("unsupported network version %d", version) + } +} diff --git a/venus-shared/api/api-document.md b/venus-shared/api/api-document.md new file mode 100644 index 0000000000..e33a55c10f --- /dev/null +++ b/venus-shared/api/api-document.md @@ -0,0 +1,5620 @@ +# Groups +* [](#) + * [Concurrent](#Concurrent) + * [Verify](#Verify) + * [Version](#Version) +* [Auth](#Auth) + * [AuthNew](#AuthNew) +* [Beacon](#Beacon) + * [BeaconGetEntry](#BeaconGetEntry) +* [Block](#Block) + * [BlockTime](#BlockTime) +* [Chain](#Chain) + * [ChainDeleteObj](#ChainDeleteObj) + * [ChainExport](#ChainExport) + * [ChainGetBlock](#ChainGetBlock) + * [ChainGetBlockMessages](#ChainGetBlockMessages) + * [ChainGetMessage](#ChainGetMessage) + * [ChainGetMessagesInTipset](#ChainGetMessagesInTipset) + * [ChainGetParentMessages](#ChainGetParentMessages) + * [ChainGetParentReceipts](#ChainGetParentReceipts) + * [ChainGetPath](#ChainGetPath) + * [ChainGetRandomnessFromBeacon](#ChainGetRandomnessFromBeacon) + * [ChainGetRandomnessFromTickets](#ChainGetRandomnessFromTickets) + * [ChainGetReceipts](#ChainGetReceipts) + * [ChainGetTipSet](#ChainGetTipSet) + * [ChainGetTipSetAfterHeight](#ChainGetTipSetAfterHeight) + * [ChainGetTipSetByHeight](#ChainGetTipSetByHeight) + * [ChainHasObj](#ChainHasObj) + * [ChainHead](#ChainHead) + * [ChainList](#ChainList) + * [ChainNotify](#ChainNotify) + * [ChainReadObj](#ChainReadObj) + * [ChainSetHead](#ChainSetHead) + * [ChainStatObj](#ChainStatObj) + * [ChainSyncHandleNewTipSet](#ChainSyncHandleNewTipSet) + * [ChainTipSetWeight](#ChainTipSetWeight) +* [Gas](#Gas) + * [GasBatchEstimateMessageGas](#GasBatchEstimateMessageGas) + * [GasEstimateFeeCap](#GasEstimateFeeCap) + * [GasEstimateGasLimit](#GasEstimateGasLimit) + * [GasEstimateGasPremium](#GasEstimateGasPremium) + * [GasEstimateMessageGas](#GasEstimateMessageGas) +* [Get](#Get) + * [GetActor](#GetActor) + * [GetEntry](#GetEntry) + * [GetFullBlock](#GetFullBlock) + * [GetParentStateRootActor](#GetParentStateRootActor) +* [Has](#Has) + * [HasPassword](#HasPassword) +* [List](#List) +* [Lock](#Lock) + * [LockWallet](#LockWallet) +* [Message](#Message) + * [MessageWait](#MessageWait) +* [Miner](#Miner) + * [MinerCreateBlock](#MinerCreateBlock) + * [MinerGetBaseInfo](#MinerGetBaseInfo) +* [Mpool](#Mpool) + * [MpoolBatchPush](#MpoolBatchPush) + * [MpoolBatchPushMessage](#MpoolBatchPushMessage) + * [MpoolBatchPushUntrusted](#MpoolBatchPushUntrusted) + * [MpoolCheckMessages](#MpoolCheckMessages) + * [MpoolCheckPendingMessages](#MpoolCheckPendingMessages) + * [MpoolCheckReplaceMessages](#MpoolCheckReplaceMessages) + * [MpoolClear](#MpoolClear) + * [MpoolDeleteByAdress](#MpoolDeleteByAdress) + * [MpoolGetConfig](#MpoolGetConfig) + * [MpoolGetNonce](#MpoolGetNonce) + * [MpoolPending](#MpoolPending) + * [MpoolPublishByAddr](#MpoolPublishByAddr) + * [MpoolPublishMessage](#MpoolPublishMessage) + * [MpoolPush](#MpoolPush) + * [MpoolPushMessage](#MpoolPushMessage) + * [MpoolPushUntrusted](#MpoolPushUntrusted) + * [MpoolSelect](#MpoolSelect) + * [MpoolSelects](#MpoolSelects) + * [MpoolSetConfig](#MpoolSetConfig) + * [MpoolSub](#MpoolSub) +* [Msig](#Msig) + * [MsigAddApprove](#MsigAddApprove) + * [MsigAddCancel](#MsigAddCancel) + * [MsigAddPropose](#MsigAddPropose) + * [MsigApprove](#MsigApprove) + * [MsigApproveTxnHash](#MsigApproveTxnHash) + * [MsigCancel](#MsigCancel) + * [MsigCreate](#MsigCreate) + * [MsigGetVested](#MsigGetVested) + * [MsigPropose](#MsigPropose) + * [MsigRemoveSigner](#MsigRemoveSigner) + * [MsigSwapApprove](#MsigSwapApprove) + * [MsigSwapCancel](#MsigSwapCancel) + * [MsigSwapPropose](#MsigSwapPropose) +* [Net](#Net) + * [NetAddrsListen](#NetAddrsListen) +* [Network](#Network) + * [NetworkConnect](#NetworkConnect) + * [NetworkFindPeer](#NetworkFindPeer) + * [NetworkFindProvidersAsync](#NetworkFindProvidersAsync) + * [NetworkGetBandwidthStats](#NetworkGetBandwidthStats) + * [NetworkGetClosestPeers](#NetworkGetClosestPeers) + * [NetworkGetPeerAddresses](#NetworkGetPeerAddresses) + * [NetworkGetPeerID](#NetworkGetPeerID) + * [NetworkPeers](#NetworkPeers) +* [Paych](#Paych) + * [PaychAllocateLane](#PaychAllocateLane) + * [PaychAvailableFunds](#PaychAvailableFunds) + * [PaychAvailableFundsByFromTo](#PaychAvailableFundsByFromTo) + * [PaychCollect](#PaychCollect) + * [PaychGet](#PaychGet) + * [PaychGetWaitReady](#PaychGetWaitReady) + * [PaychList](#PaychList) + * [PaychNewPayment](#PaychNewPayment) + * [PaychSettle](#PaychSettle) + * [PaychStatus](#PaychStatus) + * [PaychVoucherAdd](#PaychVoucherAdd) + * [PaychVoucherCheckSpendable](#PaychVoucherCheckSpendable) + * [PaychVoucherCheckValid](#PaychVoucherCheckValid) + * [PaychVoucherCreate](#PaychVoucherCreate) + * [PaychVoucherList](#PaychVoucherList) + * [PaychVoucherSubmit](#PaychVoucherSubmit) +* [Protocol](#Protocol) + * [ProtocolParameters](#ProtocolParameters) +* [Resolve](#Resolve) + * [ResolveToKeyAddr](#ResolveToKeyAddr) +* [Set](#Set) + * [SetConcurrent](#SetConcurrent) + * [SetPassword](#SetPassword) +* [State](#State) + * [StateAccountKey](#StateAccountKey) + * [StateCall](#StateCall) + * [StateCirculatingSupply](#StateCirculatingSupply) + * [StateDealProviderCollateralBounds](#StateDealProviderCollateralBounds) + * [StateGetActor](#StateGetActor) + * [StateGetRandomnessFromBeacon](#StateGetRandomnessFromBeacon) + * [StateGetRandomnessFromTickets](#StateGetRandomnessFromTickets) + * [StateListActors](#StateListActors) + * [StateListMiners](#StateListMiners) + * [StateLookupID](#StateLookupID) + * [StateMarketBalance](#StateMarketBalance) + * [StateMarketDeals](#StateMarketDeals) + * [StateMarketParticipants](#StateMarketParticipants) + * [StateMarketStorageDeal](#StateMarketStorageDeal) + * [StateMinerActiveSectors](#StateMinerActiveSectors) + * [StateMinerAvailableBalance](#StateMinerAvailableBalance) + * [StateMinerDeadlines](#StateMinerDeadlines) + * [StateMinerFaults](#StateMinerFaults) + * [StateMinerInfo](#StateMinerInfo) + * [StateMinerInitialPledgeCollateral](#StateMinerInitialPledgeCollateral) + * [StateMinerPartitions](#StateMinerPartitions) + * [StateMinerPower](#StateMinerPower) + * [StateMinerPreCommitDepositForPower](#StateMinerPreCommitDepositForPower) + * [StateMinerProvingDeadline](#StateMinerProvingDeadline) + * [StateMinerRecoveries](#StateMinerRecoveries) + * [StateMinerSectorAllocated](#StateMinerSectorAllocated) + * [StateMinerSectorCount](#StateMinerSectorCount) + * [StateMinerSectorSize](#StateMinerSectorSize) + * [StateMinerSectors](#StateMinerSectors) + * [StateMinerWorkerAddress](#StateMinerWorkerAddress) + * [StateNetworkName](#StateNetworkName) + * [StateNetworkVersion](#StateNetworkVersion) + * [StateSearchMsg](#StateSearchMsg) + * [StateSectorExpiration](#StateSectorExpiration) + * [StateSectorGetInfo](#StateSectorGetInfo) + * [StateSectorPartition](#StateSectorPartition) + * [StateSectorPreCommitInfo](#StateSectorPreCommitInfo) + * [StateVMCirculatingSupplyInternal](#StateVMCirculatingSupplyInternal) + * [StateVerifiedClientStatus](#StateVerifiedClientStatus) + * [StateVerifiedRegistryRootKey](#StateVerifiedRegistryRootKey) + * [StateVerifierStatus](#StateVerifierStatus) + * [StateWaitMsg](#StateWaitMsg) +* [Sync](#Sync) + * [SyncState](#SyncState) + * [SyncSubmitBlock](#SyncSubmitBlock) +* [Syncer](#Syncer) + * [SyncerTracker](#SyncerTracker) +* [Un](#Un) + * [UnLockWallet](#UnLockWallet) +* [Verify](#Verify) + * [VerifyEntry](#VerifyEntry) +* [Wallet](#Wallet) + * [WalletAddresses](#WalletAddresses) + * [WalletBalance](#WalletBalance) + * [WalletDefaultAddress](#WalletDefaultAddress) + * [WalletExport](#WalletExport) + * [WalletHas](#WalletHas) + * [WalletImport](#WalletImport) + * [WalletNewAddress](#WalletNewAddress) + * [WalletSetDefault](#WalletSetDefault) + * [WalletSign](#WalletSign) + * [WalletSignMessage](#WalletSignMessage) + * [WalletState](#WalletState) +## + + +### Concurrent + + +Perms: read + +Inputs: `null` + +Response: `9` + +### Verify + + +Perms: read + +Inputs: +```json +[ + "string value", + "string value" +] +``` + +Response: +```json +[ + "string value" +] +``` + +### Version + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "Version": "string value", + "APIVersion": 131328 +} +``` + +## Auth + + +### AuthNew + + +Perms: admin + +Inputs: +```json +[ + [ + "string value" + ] +] +``` + +Response: `"Ynl0ZSBhcnJheQ=="` + +## Beacon + + +### BeaconGetEntry + + +Perms: read + +Inputs: +```json +[ + 10101 +] +``` + +Response: +```json +{ + "Round": 42, + "Data": "Ynl0ZSBhcnJheQ==" +} +``` + +## Block + + +### BlockTime + + +Perms: read + +Inputs: `null` + +Response: `60000000000` + +## Chain + + +### ChainDeleteObj + + +Perms: admin + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: `{}` + +### ChainExport + + +Perms: read + +Inputs: +```json +[ + 10101, + true, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"Ynl0ZSBhcnJheQ=="` + +### ChainGetBlock + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: +```json +{ + "Miner": "t01234", + "Ticket": { + "VRFProof": "Bw==" + }, + "ElectionProof": { + "WinCount": 9, + "VRFProof": "Bw==" + }, + "BeaconEntries": [ + { + "Round": 42, + "Data": "Ynl0ZSBhcnJheQ==" + } + ], + "WinPoStProof": [ + { + "PoStProof": 8, + "ProofBytes": "Ynl0ZSBhcnJheQ==" + } + ], + "Parents": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + ], + "ParentWeight": "0", + "Height": 10101, + "ParentStateRoot": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "ParentMessageReceipts": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Messages": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "BLSAggregate": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Timestamp": 42, + "BlockSig": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "ForkSignaling": 42, + "ParentBaseFee": "0" +} +``` + +### ChainGetBlockMessages + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: +```json +{ + "BlsMessages": [ + { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + } + ], + "SecpkMessages": [ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } + ], + "Cids": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + ] +} +``` + +### ChainGetMessage + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: +```json +{ + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" +} +``` + +### ChainGetMessagesInTipset + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + { + "Cid": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + } + } +] +``` + +### ChainGetParentMessages + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: +```json +[ + { + "Cid": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + } + } +] +``` + +### ChainGetParentReceipts + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: +```json +[ + { + "ExitCode": 0, + "Return": "Ynl0ZSBhcnJheQ==", + "GasUsed": 9 + } +] +``` + +### ChainGetPath + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + { + "Type": "string value", + "Val": { + "Cids": null, + "Blocks": null, + "Height": 0 + } + } +] +``` + +### ChainGetRandomnessFromBeacon + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + 2, + 10101, + "Ynl0ZSBhcnJheQ==" +] +``` + +Response: `"Bw=="` + +### ChainGetRandomnessFromTickets + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + 2, + 10101, + "Ynl0ZSBhcnJheQ==" +] +``` + +Response: `"Bw=="` + +### ChainGetReceipts + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: +```json +[ + { + "ExitCode": 0, + "Return": "Ynl0ZSBhcnJheQ==", + "GasUsed": 9 + } +] +``` + +### ChainGetTipSet + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "Cids": null, + "Blocks": null, + "Height": 0 +} +``` + +### ChainGetTipSetAfterHeight + + +Perms: read + +Inputs: +```json +[ + 10101, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "Cids": null, + "Blocks": null, + "Height": 0 +} +``` + +### ChainGetTipSetByHeight + + +Perms: read + +Inputs: +```json +[ + 10101, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "Cids": null, + "Blocks": null, + "Height": 0 +} +``` + +### ChainHasObj + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: `true` + +### ChainHead + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "Cids": null, + "Blocks": null, + "Height": 0 +} +``` + +### ChainList + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + 123 +] +``` + +Response: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +### ChainNotify + + +Perms: read + +Inputs: `null` + +Response: +```json +[ + { + "Type": "string value", + "Val": { + "Cids": null, + "Blocks": null, + "Height": 0 + } + } +] +``` + +### ChainReadObj + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: `"Ynl0ZSBhcnJheQ=="` + +### ChainSetHead + + +Perms: admin + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `{}` + +### ChainStatObj + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: +```json +{ + "Size": 42, + "Links": 42 +} +``` + +### ChainSyncHandleNewTipSet + + +Perms: write + +Inputs: +```json +[ + { + "Source": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "Sender": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "Head": { + "Cids": null, + "Blocks": null, + "Height": 0 + } + } +] +``` + +Response: `{}` + +### ChainTipSetWeight + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +## Gas + + +### GasBatchEstimateMessageGas + + +Perms: read + +Inputs: +```json +[ + [ + { + "Msg": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Spec": { + "MaxFee": "0", + "GasOverEstimation": 12.3 + } + } + ], + 42, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + { + "Msg": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Err": "string value" + } +] +``` + +### GasEstimateFeeCap + + +Perms: read + +Inputs: +```json +[ + { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + 9, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +### GasEstimateGasLimit + + +Perms: read + +Inputs: +```json +[ + { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `9` + +### GasEstimateGasPremium + + +Perms: read + +Inputs: +```json +[ + 42, + "t01234", + 9, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +### GasEstimateMessageGas + + +Perms: read + +Inputs: +```json +[ + { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + { + "MaxFee": "0", + "GasOverEstimation": 12.3 + }, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" +} +``` + +## Get + + +### GetActor + + +Perms: read + +Inputs: +```json +[ + "t01234" +] +``` + +Response: +```json +{ + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0" +} +``` + +### GetEntry + + +Perms: read + +Inputs: +```json +[ + 10101, + 42 +] +``` + +Response: +```json +{ + "Round": 42, + "Data": "Ynl0ZSBhcnJheQ==" +} +``` + +### GetFullBlock + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: +```json +{ + "Header": { + "Miner": "t01234", + "Ticket": { + "VRFProof": "Bw==" + }, + "ElectionProof": { + "WinCount": 9, + "VRFProof": "Bw==" + }, + "BeaconEntries": [ + { + "Round": 42, + "Data": "Ynl0ZSBhcnJheQ==" + } + ], + "WinPoStProof": [ + { + "PoStProof": 8, + "ProofBytes": "Ynl0ZSBhcnJheQ==" + } + ], + "Parents": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + ], + "ParentWeight": "0", + "Height": 10101, + "ParentStateRoot": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "ParentMessageReceipts": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Messages": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "BLSAggregate": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Timestamp": 42, + "BlockSig": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "ForkSignaling": 42, + "ParentBaseFee": "0" + }, + "BLSMessages": [ + { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + } + ], + "SECPMessages": [ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } + ] +} +``` + +### GetParentStateRootActor + + +Perms: read + +Inputs: +```json +[ + { + "Cids": null, + "Blocks": null, + "Height": 0 + }, + "t01234" +] +``` + +Response: +```json +{ + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0" +} +``` + +## Has + + +### HasPassword + + +Perms: admin + +Inputs: `null` + +Response: `true` + +## List + + +## Lock + + +### LockWallet + + +Perms: admin + +Inputs: `null` + +Response: `{}` + +## Message + + +### MessageWait + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + 10101, + 10101 +] +``` + +Response: +```json +{ + "TS": { + "Cids": null, + "Blocks": null, + "Height": 0 + }, + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Block": { + "Miner": "t01234", + "Ticket": { + "VRFProof": "Bw==" + }, + "ElectionProof": { + "WinCount": 9, + "VRFProof": "Bw==" + }, + "BeaconEntries": [ + { + "Round": 42, + "Data": "Ynl0ZSBhcnJheQ==" + } + ], + "WinPoStProof": [ + { + "PoStProof": 8, + "ProofBytes": "Ynl0ZSBhcnJheQ==" + } + ], + "Parents": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + ], + "ParentWeight": "0", + "Height": 10101, + "ParentStateRoot": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "ParentMessageReceipts": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Messages": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "BLSAggregate": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Timestamp": 42, + "BlockSig": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "ForkSignaling": 42, + "ParentBaseFee": "0" + }, + "Receipt": { + "ExitCode": 0, + "Return": "Ynl0ZSBhcnJheQ==", + "GasUsed": 9 + } +} +``` + +## Miner + + +### MinerCreateBlock + + +Perms: write + +Inputs: +```json +[ + { + "Miner": "t01234", + "Parents": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + "Ticket": { + "VRFProof": "Bw==" + }, + "Eproof": { + "WinCount": 9, + "VRFProof": "Bw==" + }, + "BeaconValues": [ + { + "Round": 42, + "Data": "Ynl0ZSBhcnJheQ==" + } + ], + "Messages": [ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } + ], + "Epoch": 10101, + "Timestamp": 42, + "WinningPoStProof": [ + { + "PoStProof": 8, + "ProofBytes": "Ynl0ZSBhcnJheQ==" + } + ] + } +] +``` + +Response: +```json +{ + "Header": { + "Miner": "t01234", + "Ticket": { + "VRFProof": "Bw==" + }, + "ElectionProof": { + "WinCount": 9, + "VRFProof": "Bw==" + }, + "BeaconEntries": [ + { + "Round": 42, + "Data": "Ynl0ZSBhcnJheQ==" + } + ], + "WinPoStProof": [ + { + "PoStProof": 8, + "ProofBytes": "Ynl0ZSBhcnJheQ==" + } + ], + "Parents": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + ], + "ParentWeight": "0", + "Height": 10101, + "ParentStateRoot": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "ParentMessageReceipts": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Messages": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "BLSAggregate": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Timestamp": 42, + "BlockSig": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "ForkSignaling": 42, + "ParentBaseFee": "0" + }, + "BlsMessages": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + ], + "SecpkMessages": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + ] +} +``` + +### MinerGetBaseInfo + + +Perms: read + +Inputs: +```json +[ + "t01234", + 10101, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "MinerPower": "0", + "NetworkPower": "0", + "Sectors": [ + { + "SealProof": 8, + "SectorNumber": 9, + "SealedCID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + } + ], + "WorkerKey": "t01234", + "SectorSize": 34359738368, + "PrevBeaconEntry": { + "Round": 42, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "BeaconEntries": [ + { + "Round": 42, + "Data": "Ynl0ZSBhcnJheQ==" + } + ], + "EligibleForMining": true +} +``` + +## Mpool + + +### MpoolBatchPush + + +Perms: write + +Inputs: +```json +[ + [ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } + ] +] +``` + +Response: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +### MpoolBatchPushMessage + + +Perms: sign + +Inputs: +```json +[ + [ + { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + } + ], + { + "MaxFee": "0", + "GasOverEstimation": 12.3 + } +] +``` + +Response: +```json +[ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } +] +``` + +### MpoolBatchPushUntrusted + + +Perms: write + +Inputs: +```json +[ + [ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } + ] +] +``` + +Response: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +### MpoolCheckMessages + + +Perms: read + +Inputs: +```json +[ + [ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true + } + ] +] +``` + +Response: +```json +[ + [ + { + "Cid": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Code": 0, + "OK": true, + "Err": "string value", + "Hint": { + "abc": 123 + } + } + ] +] +``` + +### MpoolCheckPendingMessages + + +Perms: read + +Inputs: +```json +[ + "t01234" +] +``` + +Response: +```json +[ + [ + { + "Cid": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Code": 0, + "OK": true, + "Err": "string value", + "Hint": { + "abc": 123 + } + } + ] +] +``` + +### MpoolCheckReplaceMessages + + +Perms: read + +Inputs: +```json +[ + [ + { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + } + ] +] +``` + +Response: +```json +[ + [ + { + "Cid": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Code": 0, + "OK": true, + "Err": "string value", + "Hint": { + "abc": 123 + } + } + ] +] +``` + +### MpoolClear + + +Perms: write + +Inputs: +```json +[ + true +] +``` + +Response: `{}` + +### MpoolDeleteByAdress + + +Perms: admin + +Inputs: +```json +[ + "t01234" +] +``` + +Response: `{}` + +### MpoolGetConfig + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "PriorityAddrs": [ + "t01234" + ], + "SizeLimitHigh": 123, + "SizeLimitLow": 123, + "ReplaceByFeeRatio": 12.3, + "PruneCooldown": 60000000000, + "GasLimitOverestimation": 12.3 +} +``` + +### MpoolGetNonce + + +Perms: read + +Inputs: +```json +[ + "t01234" +] +``` + +Response: `42` + +### MpoolPending + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } +] +``` + +### MpoolPublishByAddr + + +Perms: write + +Inputs: +```json +[ + "t01234" +] +``` + +Response: `{}` + +### MpoolPublishMessage + + +Perms: write + +Inputs: +```json +[ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } +] +``` + +Response: `{}` + +### MpoolPush + + +Perms: write + +Inputs: +```json +[ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } +] +``` + +Response: +```json +{ + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" +} +``` + +### MpoolPushMessage + + +Perms: sign + +Inputs: +```json +[ + { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + { + "MaxFee": "0", + "GasOverEstimation": 12.3 + } +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } +} +``` + +### MpoolPushUntrusted + + +Perms: write + +Inputs: +```json +[ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } +] +``` + +Response: +```json +{ + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" +} +``` + +### MpoolSelect + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + 12.3 +] +``` + +Response: +```json +[ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } +] +``` + +### MpoolSelects + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + [ + 12.3 + ] +] +``` + +Response: +```json +[ + [ + { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } + ] +] +``` + +### MpoolSetConfig + + +Perms: admin + +Inputs: +```json +[ + { + "PriorityAddrs": [ + "t01234" + ], + "SizeLimitHigh": 123, + "SizeLimitLow": 123, + "ReplaceByFeeRatio": 12.3, + "PruneCooldown": 60000000000, + "GasLimitOverestimation": 12.3 + } +] +``` + +Response: `{}` + +### MpoolSub + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "Type": 0, + "Message": { + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } + } +} +``` + +## Msig + + +### MsigAddApprove + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "t01234", + 42, + "t01234", + "t01234", + true +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +### MsigAddCancel + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "t01234", + 42, + "t01234", + true +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +### MsigAddPropose + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "t01234", + "t01234", + true +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +### MsigApprove + + +Perms: sign + +Inputs: +```json +[ + "t01234", + 42, + "t01234" +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +### MsigApproveTxnHash + + +Perms: sign + +Inputs: +```json +[ + "t01234", + 42, + "t01234", + "t01234", + "0", + "t01234", + 42, + "Ynl0ZSBhcnJheQ==" +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +### MsigCancel + + +Perms: sign + +Inputs: +```json +[ + "t01234", + 42, + "t01234", + "0", + "t01234", + 42, + "Ynl0ZSBhcnJheQ==" +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +### MsigCreate + + +Perms: sign + +Inputs: +```json +[ + 42, + [ + "t01234" + ], + 10101, + "0", + "t01234", + "0" +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +### MsigGetVested + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +### MsigPropose + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "t01234", + "0", + "t01234", + 42, + "Ynl0ZSBhcnJheQ==" +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +### MsigRemoveSigner + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "t01234", + "t01234", + true +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +### MsigSwapApprove + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "t01234", + 42, + "t01234", + "t01234", + "t01234" +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +### MsigSwapCancel + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "t01234", + 42, + "t01234", + "t01234" +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +### MsigSwapPropose + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "t01234", + "t01234", + "t01234" +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "ValidNonce": true +} +``` + +## Net + + +### NetAddrsListen + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "ID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "Addrs": [ + "/ip4/52.36.61.156/tcp/1347/p2p/12D3KooWFETiESTf1v4PGUvtnxMAcEFMzLZbJGg4tjWfGEimYior" + ] +} +``` + +## Network + + +### NetworkConnect + + +Perms: read + +Inputs: +```json +[ + [ + "string value" + ] +] +``` + +Response: +```json +{ + "PeerID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "Err": {} +} +``` + +### NetworkFindPeer + + +Perms: read + +Inputs: +```json +[ + "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf" +] +``` + +Response: +```json +{ + "ID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "Addrs": [ + "/ip4/52.36.61.156/tcp/1347/p2p/12D3KooWFETiESTf1v4PGUvtnxMAcEFMzLZbJGg4tjWfGEimYior" + ] +} +``` + +### NetworkFindProvidersAsync + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + 123 +] +``` + +Response: +```json +{ + "ID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "Addrs": [ + "/ip4/52.36.61.156/tcp/1347/p2p/12D3KooWFETiESTf1v4PGUvtnxMAcEFMzLZbJGg4tjWfGEimYior" + ] +} +``` + +### NetworkGetBandwidthStats + + +Perms: admin + +Inputs: `null` + +Response: +```json +{ + "TotalIn": 9, + "TotalOut": 9, + "RateIn": 12.3, + "RateOut": 12.3 +} +``` + +### NetworkGetClosestPeers + + +Perms: read + +Inputs: +```json +[ + "string value" +] +``` + +Response: +```json +[ + "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf" +] +``` + +### NetworkGetPeerAddresses + + +Perms: admin + +Inputs: `null` + +Response: +```json +[ + "/ip4/52.36.61.156/tcp/1347/p2p/12D3KooWFETiESTf1v4PGUvtnxMAcEFMzLZbJGg4tjWfGEimYior" +] +``` + +### NetworkGetPeerID + + +Perms: admin + +Inputs: `null` + +Response: `"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"` + +### NetworkPeers + + +Perms: read + +Inputs: +```json +[ + true, + true, + true +] +``` + +Response: +```json +{ + "Peers": [ + { + "Addr": "string value", + "Peer": "string value", + "Latency": "string value", + "Muxer": "string value", + "Streams": [ + { + "Protocol": "string value" + } + ] + } + ] +} +``` + +## Paych + + +### PaychAllocateLane + + +Perms: sign + +Inputs: +```json +[ + "t01234" +] +``` + +Response: `42` + +### PaychAvailableFunds + + +Perms: sign + +Inputs: +```json +[ + "t01234" +] +``` + +Response: +```json +{ + "Channel": "\u003cempty\u003e", + "From": "t01234", + "To": "t01234", + "ConfirmedAmt": "0", + "PendingAmt": "0", + "PendingWaitSentinel": null, + "QueuedAmt": "0", + "VoucherReedeemedAmt": "0" +} +``` + +### PaychAvailableFundsByFromTo + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "t01234" +] +``` + +Response: +```json +{ + "Channel": "\u003cempty\u003e", + "From": "t01234", + "To": "t01234", + "ConfirmedAmt": "0", + "PendingAmt": "0", + "PendingWaitSentinel": null, + "QueuedAmt": "0", + "VoucherReedeemedAmt": "0" +} +``` + +### PaychCollect + + +Perms: sign + +Inputs: +```json +[ + "t01234" +] +``` + +Response: +```json +{ + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" +} +``` + +### PaychGet + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "t01234", + "0" +] +``` + +Response: +```json +{ + "Channel": "t01234", + "WaitSentinel": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +} +``` + +### PaychGetWaitReady + + +Perms: sign + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } +] +``` + +Response: `"t01234"` + +### PaychList + + +Perms: read + +Inputs: `null` + +Response: +```json +[ + "t01234" +] +``` + +### PaychNewPayment + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "t01234", + [ + { + "Amount": "0", + "TimeLockMin": 10101, + "TimeLockMax": 10101, + "MinSettle": 10101, + "Extra": { + "Actor": "t01234", + "Method": 1, + "Data": "Ynl0ZSBhcnJheQ==" + } + } + ] +] +``` + +Response: +```json +{ + "Channel": "t01234", + "WaitSentinel": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Vouchers": [ + { + "ChannelAddr": "t01234", + "TimeLockMin": 10101, + "TimeLockMax": 10101, + "SecretPreimage": "Ynl0ZSBhcnJheQ==", + "Extra": { + "Actor": "t01234", + "Method": 1, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Lane": 42, + "Nonce": 42, + "Amount": "0", + "MinSettleHeight": 10101, + "Merges": [ + { + "Lane": 42, + "Nonce": 42 + } + ], + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + } + } + ] +} +``` + +### PaychSettle + + +Perms: sign + +Inputs: +```json +[ + "t01234" +] +``` + +Response: +```json +{ + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" +} +``` + +### PaychStatus + + +Perms: read + +Inputs: +```json +[ + "t01234" +] +``` + +Response: +```json +{ + "ControlAddr": "t01234", + "Direction": 1 +} +``` + +### PaychVoucherAdd + + +Perms: write + +Inputs: +```json +[ + "t01234", + { + "ChannelAddr": "t01234", + "TimeLockMin": 10101, + "TimeLockMax": 10101, + "SecretPreimage": "Ynl0ZSBhcnJheQ==", + "Extra": { + "Actor": "t01234", + "Method": 1, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Lane": 42, + "Nonce": 42, + "Amount": "0", + "MinSettleHeight": 10101, + "Merges": [ + { + "Lane": 42, + "Nonce": 42 + } + ], + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + } + }, + "Ynl0ZSBhcnJheQ==", + "0" +] +``` + +Response: `"0"` + +### PaychVoucherCheckSpendable + + +Perms: read + +Inputs: +```json +[ + "t01234", + { + "ChannelAddr": "t01234", + "TimeLockMin": 10101, + "TimeLockMax": 10101, + "SecretPreimage": "Ynl0ZSBhcnJheQ==", + "Extra": { + "Actor": "t01234", + "Method": 1, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Lane": 42, + "Nonce": 42, + "Amount": "0", + "MinSettleHeight": 10101, + "Merges": [ + { + "Lane": 42, + "Nonce": 42 + } + ], + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + } + }, + "Ynl0ZSBhcnJheQ==", + "Ynl0ZSBhcnJheQ==" +] +``` + +Response: `true` + +### PaychVoucherCheckValid + + +Perms: read + +Inputs: +```json +[ + "t01234", + { + "ChannelAddr": "t01234", + "TimeLockMin": 10101, + "TimeLockMax": 10101, + "SecretPreimage": "Ynl0ZSBhcnJheQ==", + "Extra": { + "Actor": "t01234", + "Method": 1, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Lane": 42, + "Nonce": 42, + "Amount": "0", + "MinSettleHeight": 10101, + "Merges": [ + { + "Lane": 42, + "Nonce": 42 + } + ], + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + } + } +] +``` + +Response: `{}` + +### PaychVoucherCreate + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "0", + 42 +] +``` + +Response: +```json +{ + "Voucher": { + "ChannelAddr": "t01234", + "TimeLockMin": 10101, + "TimeLockMax": 10101, + "SecretPreimage": "Ynl0ZSBhcnJheQ==", + "Extra": { + "Actor": "t01234", + "Method": 1, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Lane": 42, + "Nonce": 42, + "Amount": "0", + "MinSettleHeight": 10101, + "Merges": [ + { + "Lane": 42, + "Nonce": 42 + } + ], + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + } + }, + "Shortfall": "0" +} +``` + +### PaychVoucherList + + +Perms: write + +Inputs: +```json +[ + "t01234" +] +``` + +Response: +```json +[ + { + "ChannelAddr": "t01234", + "TimeLockMin": 10101, + "TimeLockMax": 10101, + "SecretPreimage": "Ynl0ZSBhcnJheQ==", + "Extra": { + "Actor": "t01234", + "Method": 1, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Lane": 42, + "Nonce": 42, + "Amount": "0", + "MinSettleHeight": 10101, + "Merges": [ + { + "Lane": 42, + "Nonce": 42 + } + ], + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + } + } +] +``` + +### PaychVoucherSubmit + + +Perms: sign + +Inputs: +```json +[ + "t01234", + { + "ChannelAddr": "t01234", + "TimeLockMin": 10101, + "TimeLockMax": 10101, + "SecretPreimage": "Ynl0ZSBhcnJheQ==", + "Extra": { + "Actor": "t01234", + "Method": 1, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Lane": 42, + "Nonce": 42, + "Amount": "0", + "MinSettleHeight": 10101, + "Merges": [ + { + "Lane": 42, + "Nonce": 42 + } + ], + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + } + }, + "Ynl0ZSBhcnJheQ==", + "Ynl0ZSBhcnJheQ==" +] +``` + +Response: +```json +{ + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" +} +``` + +## Protocol + + +### ProtocolParameters + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "Network": "string value", + "BlockTime": 60000000000, + "SupportedSectors": [ + { + "Size": 34359738368, + "MaxPieceSize": 1024 + } + ] +} +``` + +## Resolve + + +### ResolveToKeyAddr + + +Perms: read + +Inputs: +```json +[ + "t01234", + { + "Cids": null, + "Blocks": null, + "Height": 0 + } +] +``` + +Response: `"t01234"` + +## Set + + +### SetConcurrent + + +Perms: admin + +Inputs: +```json +[ + 9 +] +``` + +Response: `{}` + +### SetPassword + + +Perms: admin + +Inputs: +```json +[ + "Ynl0ZSBhcnJheQ==" +] +``` + +Response: `{}` + +## State + + +### StateAccountKey + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"t01234"` + +### StateCall + + +Perms: read + +Inputs: +```json +[ + { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "MsgCid": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Msg": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "MsgRct": { + "ExitCode": 0, + "Return": "Ynl0ZSBhcnJheQ==", + "GasUsed": 9 + }, + "GasCost": { + "Message": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "GasUsed": "0", + "BaseFeeBurn": "0", + "OverEstimationBurn": "0", + "MinerPenalty": "0", + "MinerTip": "0", + "Refund": "0", + "TotalCost": "0" + }, + "ExecutionTrace": { + "Msg": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "MsgRct": { + "ExitCode": 0, + "Return": "Ynl0ZSBhcnJheQ==", + "GasUsed": 9 + }, + "Error": "string value", + "Duration": 60000000000, + "GasCharges": [ + { + "Name": "string value", + "loc": [ + { + "File": "string value", + "Line": 123, + "Function": "string value" + } + ], + "tg": 9, + "cg": 9, + "sg": 9, + "vtg": 9, + "vcg": 9, + "vsg": 9, + "tt": 60000000000, + "ex": {} + } + ], + "Subcalls": [ + { + "Msg": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "MsgRct": { + "ExitCode": 0, + "Return": "Ynl0ZSBhcnJheQ==", + "GasUsed": 9 + }, + "Error": "string value", + "Duration": 60000000000, + "GasCharges": [ + { + "Name": "string value", + "loc": [ + { + "File": "string value", + "Line": 123, + "Function": "string value" + } + ], + "tg": 9, + "cg": 9, + "sg": 9, + "vtg": 9, + "vcg": 9, + "vsg": 9, + "tt": 60000000000, + "ex": {} + } + ], + "Subcalls": null + } + ] + }, + "Error": "string value", + "Duration": 60000000000 +} +``` + +### StateCirculatingSupply + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +### StateDealProviderCollateralBounds + + +Perms: read + +Inputs: +```json +[ + 1032, + true, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "Min": "0", + "Max": "0" +} +``` + +### StateGetActor + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "Code": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Head": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Nonce": 42, + "Balance": "0" +} +``` + +### StateGetRandomnessFromBeacon + + +Perms: read + +Inputs: +```json +[ + 2, + 10101, + "Ynl0ZSBhcnJheQ==", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"Bw=="` + +### StateGetRandomnessFromTickets + + +Perms: read + +Inputs: +```json +[ + 2, + 10101, + "Ynl0ZSBhcnJheQ==", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"Bw=="` + +### StateListActors + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + "t01234" +] +``` + +### StateListMiners + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + "t01234" +] +``` + +### StateLookupID + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"t01234"` + +### StateMarketBalance + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "Escrow": "0", + "Locked": "0" +} +``` + +### StateMarketDeals + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "t026363": { + "Proposal": { + "PieceCID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "PieceSize": 1032, + "VerifiedDeal": true, + "Client": "t01234", + "Provider": "t01234", + "Label": "string value", + "StartEpoch": 10101, + "EndEpoch": 10101, + "StoragePricePerEpoch": "0", + "ProviderCollateral": "0", + "ClientCollateral": "0" + }, + "State": { + "SectorStartEpoch": 10101, + "LastUpdatedEpoch": 10101, + "SlashEpoch": 10101 + } + } +} +``` + +### StateMarketParticipants + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "t026363": { + "Escrow": "0", + "Locked": "0" + } +} +``` + +### StateMarketStorageDeal + + +Perms: read + +Inputs: +```json +[ + 5432, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "Proposal": { + "PieceCID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "PieceSize": 1032, + "VerifiedDeal": true, + "Client": "t01234", + "Provider": "t01234", + "Label": "string value", + "StartEpoch": 10101, + "EndEpoch": 10101, + "StoragePricePerEpoch": "0", + "ProviderCollateral": "0", + "ClientCollateral": "0" + }, + "State": { + "SectorStartEpoch": 10101, + "LastUpdatedEpoch": 10101, + "SlashEpoch": 10101 + } +} +``` + +### StateMinerActiveSectors + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + { + "SectorNumber": 9, + "SealProof": 8, + "SealedCID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "DealIDs": [ + 5432 + ], + "Activation": 10101, + "Expiration": 10101, + "DealWeight": "0", + "VerifiedDealWeight": "0", + "InitialPledge": "0", + "ExpectedDayReward": "0", + "ExpectedStoragePledge": "0", + "SectorKeyCID": null + } +] +``` + +### StateMinerAvailableBalance + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +### StateMinerDeadlines + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + { + "PostSubmissions": [ + 5, + 1 + ], + "DisputableProofCount": 42 + } +] +``` + +### StateMinerFaults + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + 5, + 1 +] +``` + +### StateMinerInfo + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "Owner": "t01234", + "Worker": "t01234", + "NewWorker": "t01234", + "ControlAddresses": [ + "t01234" + ], + "WorkerChangeEpoch": 10101, + "PeerId": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "Multiaddrs": [ + "Ynl0ZSBhcnJheQ==" + ], + "WindowPoStProofType": 8, + "SectorSize": 34359738368, + "WindowPoStPartitionSectors": 42, + "ConsensusFaultElapsed": 10101 +} +``` + +### StateMinerInitialPledgeCollateral + + +Perms: read + +Inputs: +```json +[ + "t01234", + { + "SealProof": 8, + "SectorNumber": 9, + "SealedCID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "SealRandEpoch": 10101, + "DealIDs": [ + 5432 + ], + "Expiration": 10101, + "ReplaceCapacity": true, + "ReplaceSectorDeadline": 42, + "ReplaceSectorPartition": 42, + "ReplaceSectorNumber": 9 + }, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +### StateMinerPartitions + + +Perms: read + +Inputs: +```json +[ + "t01234", + 42, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + { + "AllSectors": [ + 5, + 1 + ], + "FaultySectors": [ + 5, + 1 + ], + "RecoveringSectors": [ + 5, + 1 + ], + "LiveSectors": [ + 5, + 1 + ], + "ActiveSectors": [ + 5, + 1 + ] + } +] +``` + +### StateMinerPower + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "MinerPower": { + "RawBytePower": "0", + "QualityAdjPower": "0" + }, + "TotalPower": { + "RawBytePower": "0", + "QualityAdjPower": "0" + }, + "HasMinPower": true +} +``` + +### StateMinerPreCommitDepositForPower + + +Perms: read + +Inputs: +```json +[ + "t01234", + { + "SealProof": 8, + "SectorNumber": 9, + "SealedCID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "SealRandEpoch": 10101, + "DealIDs": [ + 5432 + ], + "Expiration": 10101, + "ReplaceCapacity": true, + "ReplaceSectorDeadline": 42, + "ReplaceSectorPartition": 42, + "ReplaceSectorNumber": 9 + }, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +### StateMinerProvingDeadline + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "CurrentEpoch": 10101, + "PeriodStart": 10101, + "Index": 42, + "Open": 10101, + "Close": 10101, + "Challenge": 10101, + "FaultCutoff": 10101, + "WPoStPeriodDeadlines": 42, + "WPoStProvingPeriod": 10101, + "WPoStChallengeWindow": 10101, + "WPoStChallengeLookback": 10101, + "FaultDeclarationCutoff": 10101 +} +``` + +### StateMinerRecoveries + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + 5, + 1 +] +``` + +### StateMinerSectorAllocated + + +Perms: read + +Inputs: +```json +[ + "t01234", + 9, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `true` + +### StateMinerSectorCount + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "Live": 42, + "Active": 42, + "Faulty": 42 +} +``` + +### StateMinerSectorSize + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `34359738368` + +### StateMinerSectors + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + 0 + ], + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +[ + { + "SectorNumber": 9, + "SealProof": 8, + "SealedCID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "DealIDs": [ + 5432 + ], + "Activation": 10101, + "Expiration": 10101, + "DealWeight": "0", + "VerifiedDealWeight": "0", + "InitialPledge": "0", + "ExpectedDayReward": "0", + "ExpectedStoragePledge": "0", + "SectorKeyCID": null + } +] +``` + +### StateMinerWorkerAddress + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"t01234"` + +### StateNetworkName + + +Perms: read + +Inputs: `null` + +Response: `"mainnet"` + +### StateNetworkVersion + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `14` + +### StateSearchMsg + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + 10101, + true +] +``` + +Response: +```json +{ + "Message": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Receipt": { + "ExitCode": 0, + "Return": "Ynl0ZSBhcnJheQ==", + "GasUsed": 9 + }, + "ReturnDec": {}, + "TipSet": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + "Height": 10101 +} +``` + +### StateSectorExpiration + + +Perms: read + +Inputs: +```json +[ + "t01234", + 9, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "OnTime": 10101, + "Early": 10101 +} +``` + +### StateSectorGetInfo + + +Perms: read + +Inputs: +```json +[ + "t01234", + 9, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "SectorNumber": 9, + "SealProof": 8, + "SealedCID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "DealIDs": [ + 5432 + ], + "Activation": 10101, + "Expiration": 10101, + "DealWeight": "0", + "VerifiedDealWeight": "0", + "InitialPledge": "0", + "ExpectedDayReward": "0", + "ExpectedStoragePledge": "0", + "SectorKeyCID": null +} +``` + +### StateSectorPartition + + +Perms: read + +Inputs: +```json +[ + "t01234", + 9, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "Deadline": 42, + "Partition": 42 +} +``` + +### StateSectorPreCommitInfo + + +Perms: read + +Inputs: +```json +[ + "t01234", + 9, + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "Info": { + "SealProof": 8, + "SectorNumber": 9, + "SealedCID": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "SealRandEpoch": 10101, + "DealIDs": [ + 5432 + ], + "Expiration": 10101, + "ReplaceCapacity": true, + "ReplaceSectorDeadline": 42, + "ReplaceSectorPartition": 42, + "ReplaceSectorNumber": 9 + }, + "PreCommitDeposit": "0", + "PreCommitEpoch": 10101, + "DealWeight": "0", + "VerifiedDealWeight": "0" +} +``` + +### StateVMCirculatingSupplyInternal + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: +```json +{ + "FilVested": "0", + "FilMined": "0", + "FilBurnt": "0", + "FilLocked": "0", + "FilCirculating": "0", + "FilReserveDisbursed": "0" +} +``` + +### StateVerifiedClientStatus + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +### StateVerifiedRegistryRootKey + + +Perms: read + +Inputs: +```json +[ + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"t01234"` + +### StateVerifierStatus + + +Perms: read + +Inputs: +```json +[ + "t01234", + [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ] +] +``` + +Response: `"0"` + +### StateWaitMsg + + +Perms: read + +Inputs: +```json +[ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + 42, + 10101, + true +] +``` + +Response: +```json +{ + "Message": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Receipt": { + "ExitCode": 0, + "Return": "Ynl0ZSBhcnJheQ==", + "GasUsed": 9 + }, + "ReturnDec": {}, + "TipSet": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + { + "/": "bafy2bzacebp3shtrn43k7g3unredz7fxn4gj533d3o43tqn2p2ipxxhrvchve" + } + ], + "Height": 10101 +} +``` + +## Sync + + +### SyncState + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "ActiveSyncs": [ + { + "WorkerID": 42, + "Base": { + "Cids": null, + "Blocks": null, + "Height": 0 + }, + "Target": { + "Cids": null, + "Blocks": null, + "Height": 0 + }, + "Stage": 1, + "Height": 10101, + "Start": "0001-01-01T00:00:00Z", + "End": "0001-01-01T00:00:00Z", + "Message": "string value" + } + ], + "VMApplied": 42 +} +``` + +### SyncSubmitBlock + + +Perms: write + +Inputs: +```json +[ + { + "Header": { + "Miner": "t01234", + "Ticket": { + "VRFProof": "Bw==" + }, + "ElectionProof": { + "WinCount": 9, + "VRFProof": "Bw==" + }, + "BeaconEntries": [ + { + "Round": 42, + "Data": "Ynl0ZSBhcnJheQ==" + } + ], + "WinPoStProof": [ + { + "PoStProof": 8, + "ProofBytes": "Ynl0ZSBhcnJheQ==" + } + ], + "Parents": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + ], + "ParentWeight": "0", + "Height": 10101, + "ParentStateRoot": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "ParentMessageReceipts": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "Messages": { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + }, + "BLSAggregate": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "Timestamp": 42, + "BlockSig": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "ForkSignaling": 42, + "ParentBaseFee": "0" + }, + "BlsMessages": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + ], + "SecpkMessages": [ + { + "/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4" + } + ] + } +] +``` + +Response: `{}` + +## Syncer + + +### SyncerTracker + + +Perms: read + +Inputs: `null` + +Response: +```json +{ + "History": [ + { + "State": 1, + "Base": { + "Cids": null, + "Blocks": null, + "Height": 0 + }, + "Current": { + "Cids": null, + "Blocks": null, + "Height": 0 + }, + "Start": "0001-01-01T00:00:00Z", + "End": "0001-01-01T00:00:00Z", + "Err": {}, + "Source": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "Sender": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "Head": { + "Cids": null, + "Blocks": null, + "Height": 0 + } + } + ], + "Buckets": [ + { + "State": 1, + "Base": { + "Cids": null, + "Blocks": null, + "Height": 0 + }, + "Current": { + "Cids": null, + "Blocks": null, + "Height": 0 + }, + "Start": "0001-01-01T00:00:00Z", + "End": "0001-01-01T00:00:00Z", + "Err": {}, + "Source": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "Sender": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf", + "Head": { + "Cids": null, + "Blocks": null, + "Height": 0 + } + } + ] +} +``` + +## Un + + +### UnLockWallet + + +Perms: admin + +Inputs: +```json +[ + "Ynl0ZSBhcnJheQ==" +] +``` + +Response: `{}` + +## Verify + + +### VerifyEntry + + +Perms: read + +Inputs: +```json +[ + { + "Round": 42, + "Data": "Ynl0ZSBhcnJheQ==" + }, + 10101 +] +``` + +Response: `true` + +## Wallet + + +### WalletAddresses + + +Perms: admin + +Inputs: `null` + +Response: +```json +[ + "t01234" +] +``` + +### WalletBalance + + +Perms: read + +Inputs: +```json +[ + "t01234" +] +``` + +Response: `"0"` + +### WalletDefaultAddress + + +Perms: write + +Inputs: `null` + +Response: `"t01234"` + +### WalletExport + + +Perms: admin + +Inputs: +```json +[ + "t01234", + "string value" +] +``` + +Response: +```json +{ + "Type": "bls", + "PrivateKey": "Ynl0ZSBhcnJheQ==" +} +``` + +### WalletHas + + +Perms: write + +Inputs: +```json +[ + "t01234" +] +``` + +Response: `true` + +### WalletImport + + +Perms: admin + +Inputs: +```json +[ + { + "Type": "bls", + "PrivateKey": "Ynl0ZSBhcnJheQ==" + } +] +``` + +Response: `"t01234"` + +### WalletNewAddress + + +Perms: write + +Inputs: +```json +[ + 7 +] +``` + +Response: `"t01234"` + +### WalletSetDefault + + +Perms: write + +Inputs: +```json +[ + "t01234" +] +``` + +Response: `{}` + +### WalletSign + + +Perms: sign + +Inputs: +```json +[ + "t01234", + "Ynl0ZSBhcnJheQ==", + { + "Type": "message", + "Extra": "Ynl0ZSBhcnJheQ==" + } +] +``` + +Response: +```json +{ + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" +} +``` + +### WalletSignMessage + + +Perms: sign + +Inputs: +```json +[ + "t01234", + { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + } +] +``` + +Response: +```json +{ + "Message": { + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + }, + "Version": 42, + "To": "t01234", + "From": "t01234", + "Nonce": 42, + "Value": "0", + "GasLimit": 9, + "GasFeeCap": "0", + "GasPremium": "0", + "Method": 1, + "Params": "Ynl0ZSBhcnJheQ==" + }, + "Signature": { + "Type": 2, + "Data": "Ynl0ZSBhcnJheQ==" + }, + "CID": { + "/": "bafy2bzacebbpdegvr3i4cosewthysg5xkxpqfn2wfcz6mv2hmoktwbdxkax4s" + } +} +``` + +### WalletState + + +Perms: admin + +Inputs: `null` + +Response: `123` + diff --git a/venus-shared/api/chain/types.go b/venus-shared/api/chain/types.go new file mode 100644 index 0000000000..e41006e500 --- /dev/null +++ b/venus-shared/api/chain/types.go @@ -0,0 +1,275 @@ +package chain + +import ( + "fmt" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/market" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/power" + "github.com/filecoin-project/venus/venus-shared/api" + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/stmgr" +) + +type ObjStat struct { + Size uint64 + Links uint64 +} + +type HeadChange struct { + Type string + Val *chain.TipSet +} + +// ChainMessage is an on-chain message with its block and receipt. +type ChainMessage struct { //nolint + TS *chain.TipSet + Message *chain.Message + Block *chain.BlockHeader + Receipt *chain.MessageReceipt +} + +// BlsMessages[x].cid = Cids[x] +// SecpkMessages[y].cid = Cids[BlsMessages.length + y] +type BlockMessages struct { + BlsMessages []*chain.Message + SecpkMessages []*chain.SignedMessage + Cids []cid.Cid +} + +type Message struct { + Cid cid.Cid + Message *chain.Message +} + +type NetworkName string + +type Partition struct { + AllSectors bitfield.BitField + FaultySectors bitfield.BitField + RecoveringSectors bitfield.BitField + LiveSectors bitfield.BitField + ActiveSectors bitfield.BitField +} + +// SectorInfo provides information about a sector construction +type SectorInfo struct { + Size abi.SectorSize + MaxPieceSize abi.UnpaddedPieceSize +} + +type ProtocolParams struct { + Network string + BlockTime time.Duration + SupportedSectors []SectorInfo +} + +type Deadline struct { + PostSubmissions bitfield.BitField + DisputableProofCount uint64 +} + +var MarketBalanceNil = MarketBalance{} + +type MarketDeal struct { + Proposal market.DealProposal + State market.DealState +} + +type MinerPower struct { + MinerPower power.Claim + TotalPower power.Claim + HasMinPower bool +} + +type MinerSectors struct { + // Live sectors that should be proven. + Live uint64 + // Sectors actively contributing to power. + Active uint64 + // Sectors with failed proofs. + Faulty uint64 +} + +type MarketBalance struct { + Escrow big.Int + Locked big.Int +} + +type DealCollateralBounds struct { + Min abi.TokenAmount + Max abi.TokenAmount +} + +type MsgLookup struct { + Message cid.Cid // Can be different than requested, in case it was replaced, but only gas values changed + Receipt chain.MessageReceipt + ReturnDec interface{} + TipSet chain.TipSetKey + Height abi.ChainEpoch +} + +type MiningBaseInfo struct { //nolint + MinerPower abi.StoragePower + NetworkPower abi.StoragePower + Sectors []builtin.SectorInfo + WorkerKey address.Address + SectorSize abi.SectorSize + PrevBeaconEntry chain.BeaconEntry + BeaconEntries []chain.BeaconEntry + EligibleForMining bool +} + +type BlockTemplate struct { + Miner address.Address + Parents chain.TipSetKey + Ticket *chain.Ticket + Eproof *chain.ElectionProof + BeaconValues []chain.BeaconEntry + Messages []*chain.SignedMessage + Epoch abi.ChainEpoch + Timestamp uint64 + WinningPoStProof []builtin.PoStProof +} + +type EstimateMessage struct { + Msg *chain.Message + Spec *MessageSendSpec +} + +type EstimateResult struct { + Msg *chain.Message + Err string +} + +type MessageSendSpec struct { + MaxFee abi.TokenAmount + GasOverEstimation float64 +} + +// Version provides various build-time information +type Version struct { + Version string + + // APIVersion is a binary encoded semver version of the remote implementing + // this api + // + APIVersion api.Version +} + +type ChannelAvailableFunds struct { + // Channel is the address of the channel + Channel *address.Address + // From is the from address of the channel (channel creator) + From address.Address + // To is the to address of the channel + To address.Address + // ConfirmedAmt is the amount of funds that have been confirmed on-chain + // for the channel + ConfirmedAmt chain.BigInt + // PendingAmt is the amount of funds that are pending confirmation on-chain + PendingAmt chain.BigInt + // PendingWaitSentinel can be used with PaychGetWaitReady to wait for + // confirmation of pending funds + PendingWaitSentinel *cid.Cid + // QueuedAmt is the amount that is queued up behind a pending request + QueuedAmt chain.BigInt + // VoucherRedeemedAmt is the amount that is redeemed by vouchers on-chain + // and in the local datastore + VoucherReedeemedAmt chain.BigInt +} + +type SyncState struct { + ActiveSyncs []ActiveSync + + VMApplied uint64 +} + +//just compatible code lotus +type SyncStateStage int + +const ( + StageIdle = SyncStateStage(iota) + StageHeaders + StagePersistHeaders + StageMessages + StageSyncComplete + StageSyncErrored + StageFetchingMessages +) + +func (v SyncStateStage) String() string { + switch v { + case StageHeaders: + return "header sync" + case StagePersistHeaders: + return "persisting headers" + case StageMessages: + return "message sync" + case StageSyncComplete: + return "complete" + case StageSyncErrored: + return "error" + case StageFetchingMessages: + return "fetching messages" + default: + return fmt.Sprintf("", v) + } +} + +type ActiveSync struct { + WorkerID uint64 + Base *chain.TipSet + Target *chain.TipSet + + Stage SyncStateStage + Height abi.ChainEpoch + + Start time.Time + End time.Time + Message string +} + +// sync +type Target struct { + State SyncStateStage + Base *chain.TipSet + Current *chain.TipSet + Start time.Time + End time.Time + Err error + chain.ChainInfo +} + +type TargetTracker struct { + History []*Target + Buckets []*Target +} + +type MsgGasCost struct { + Message cid.Cid // Can be different than requested, in case it was replaced, but only gas values changed + GasUsed abi.TokenAmount + BaseFeeBurn abi.TokenAmount + OverEstimationBurn abi.TokenAmount + MinerPenalty abi.TokenAmount + MinerTip abi.TokenAmount + Refund abi.TokenAmount + TotalCost abi.TokenAmount +} + +type InvocResult struct { + MsgCid cid.Cid + Msg *chain.Message + MsgRct *chain.MessageReceipt + GasCost MsgGasCost + ExecutionTrace stmgr.ExecutionTrace + Error string + Duration time.Duration +} diff --git a/venus-shared/api/chain/v0/blockstore.go b/venus-shared/api/chain/v0/blockstore.go new file mode 100644 index 0000000000..511e14852d --- /dev/null +++ b/venus-shared/api/chain/v0/blockstore.go @@ -0,0 +1,16 @@ +package v0 + +import ( + "context" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + + "github.com/ipfs/go-cid" +) + +type IBlockStore interface { + ChainReadObj(ctx context.Context, cid cid.Cid) ([]byte, error) //perm:read + ChainDeleteObj(ctx context.Context, obj cid.Cid) error //perm:admin + ChainHasObj(ctx context.Context, obj cid.Cid) (bool, error) //perm:read + ChainStatObj(ctx context.Context, obj cid.Cid, base cid.Cid) (chain2.ObjStat, error) //perm:read +} diff --git a/venus-shared/api/chain/v0/chain.go b/venus-shared/api/chain/v0/chain.go new file mode 100644 index 0000000000..25b0c16677 --- /dev/null +++ b/venus-shared/api/chain/v0/chain.go @@ -0,0 +1,111 @@ +package v0 + +import ( + "context" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/dline" + "github.com/filecoin-project/go-state-types/network" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IChain interface { + IAccount + IActor + IBeacon + IMinerState + IChainInfo +} + +type IAccount interface { + StateAccountKey(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (address.Address, error) //perm:read +} + +type IActor interface { + StateGetActor(ctx context.Context, actor address.Address, tsk chain.TipSetKey) (*chain.Actor, error) //perm:read + ListActor(ctx context.Context) (map[address.Address]*chain.Actor, error) //perm:read +} + +type IBeacon interface { + BeaconGetEntry(ctx context.Context, epoch abi.ChainEpoch) (*chain.BeaconEntry, error) //perm:read +} + +type IChainInfo interface { + BlockTime(ctx context.Context) time.Duration //perm:read + ChainList(ctx context.Context, tsKey chain.TipSetKey, count int) ([]chain.TipSetKey, error) //perm:read + ChainHead(ctx context.Context) (*chain.TipSet, error) //perm:read + ChainSetHead(ctx context.Context, key chain.TipSetKey) error //perm:admin + ChainGetTipSet(ctx context.Context, key chain.TipSetKey) (*chain.TipSet, error) //perm:read + ChainGetTipSetByHeight(ctx context.Context, height abi.ChainEpoch, tsk chain.TipSetKey) (*chain.TipSet, error) //perm:read + ChainGetRandomnessFromBeacon(ctx context.Context, key chain.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) //perm:read + ChainGetRandomnessFromTickets(ctx context.Context, tsk chain.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) //perm:read + ChainGetBlock(ctx context.Context, id cid.Cid) (*chain.BlockHeader, error) //perm:read + ChainGetMessage(ctx context.Context, msgID cid.Cid) (*chain.Message, error) //perm:read + ChainGetBlockMessages(ctx context.Context, bid cid.Cid) (*chain2.BlockMessages, error) //perm:read + ChainGetMessagesInTipset(ctx context.Context, key chain.TipSetKey) ([]chain2.Message, error) //perm:read + ChainGetReceipts(ctx context.Context, id cid.Cid) ([]chain.MessageReceipt, error) //perm:read + ChainGetParentMessages(ctx context.Context, bcid cid.Cid) ([]chain2.Message, error) //perm:read + ChainGetParentReceipts(ctx context.Context, bcid cid.Cid) ([]*chain.MessageReceipt, error) //perm:read + StateVerifiedRegistryRootKey(ctx context.Context, tsk chain.TipSetKey) (address.Address, error) //perm:read + StateVerifierStatus(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (*abi.StoragePower, error) //perm:read + ChainNotify(ctx context.Context) (<-chan []*chain2.HeadChange, error) //perm:read + GetFullBlock(ctx context.Context, id cid.Cid) (*chain.FullBlock, error) //perm:read + GetActor(ctx context.Context, addr address.Address) (*chain.Actor, error) //perm:read + GetParentStateRootActor(ctx context.Context, ts *chain.TipSet, addr address.Address) (*chain.Actor, error) //perm:read + GetEntry(ctx context.Context, height abi.ChainEpoch, round uint64) (*chain.BeaconEntry, error) //perm:read + MessageWait(ctx context.Context, msgCid cid.Cid, confidence, lookback abi.ChainEpoch) (*chain2.ChainMessage, error) //perm:read + ProtocolParameters(ctx context.Context) (*chain2.ProtocolParams, error) //perm:read + ResolveToKeyAddr(ctx context.Context, addr address.Address, ts *chain.TipSet) (address.Address, error) //perm:read + StateNetworkName(ctx context.Context) (chain2.NetworkName, error) //perm:read + StateGetReceipt(ctx context.Context, msg cid.Cid, from chain.TipSetKey) (*chain.MessageReceipt, error) //perm:read + StateSearchMsg(ctx context.Context, msg cid.Cid) (*chain2.MsgLookup, error) //perm:read + StateSearchMsgLimited(ctx context.Context, cid cid.Cid, limit abi.ChainEpoch) (*chain2.MsgLookup, error) //perm:read + StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64) (*chain2.MsgLookup, error) //perm:read + StateWaitMsgLimited(ctx context.Context, cid cid.Cid, confidence uint64, limit abi.ChainEpoch) (*chain2.MsgLookup, error) //perm:read + StateNetworkVersion(ctx context.Context, tsk chain.TipSetKey) (network.Version, error) //perm:read + VerifyEntry(parent, child *chain.BeaconEntry, height abi.ChainEpoch) bool //perm:read + ChainExport(context.Context, abi.ChainEpoch, bool, chain.TipSetKey) (<-chan []byte, error) //perm:read + ChainGetPath(ctx context.Context, from chain.TipSetKey, to chain.TipSetKey) ([]*chain2.HeadChange, error) //perm:read +} + +type IMinerState interface { + StateMinerSectorAllocated(ctx context.Context, maddr address.Address, s abi.SectorNumber, tsk chain.TipSetKey) (bool, error) //perm:read + StateSectorPreCommitInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk chain.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) //perm:read + StateSectorGetInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk chain.TipSetKey) (*miner.SectorOnChainInfo, error) //perm:read + StateSectorPartition(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk chain.TipSetKey) (*miner.SectorLocation, error) //perm:read + StateMinerSectorSize(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (abi.SectorSize, error) //perm:read + StateMinerInfo(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (miner.MinerInfo, error) //perm:read + StateMinerWorkerAddress(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (address.Address, error) //perm:read + StateMinerRecoveries(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (bitfield.BitField, error) //perm:read + StateMinerFaults(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (bitfield.BitField, error) //perm:read + StateMinerProvingDeadline(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (*dline.Info, error) //perm:read + StateMinerPartitions(ctx context.Context, maddr address.Address, dlIdx uint64, tsk chain.TipSetKey) ([]chain2.Partition, error) //perm:read + StateMinerDeadlines(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) ([]chain2.Deadline, error) //perm:read + StateMinerSectors(ctx context.Context, maddr address.Address, sectorNos *bitfield.BitField, tsk chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) //perm:read + StateMarketStorageDeal(ctx context.Context, dealID abi.DealID, tsk chain.TipSetKey) (*chain2.MarketDeal, error) //perm:read + StateMinerPreCommitDepositForPower(ctx context.Context, maddr address.Address, pci miner.SectorPreCommitInfo, tsk chain.TipSetKey) (big.Int, error) //perm:read + StateMinerInitialPledgeCollateral(ctx context.Context, maddr address.Address, pci miner.SectorPreCommitInfo, tsk chain.TipSetKey) (big.Int, error) //perm:read + StateVMCirculatingSupplyInternal(ctx context.Context, tsk chain.TipSetKey) (chain.CirculatingSupply, error) //perm:read + StateCirculatingSupply(ctx context.Context, tsk chain.TipSetKey) (abi.TokenAmount, error) //perm:read + StateMarketDeals(ctx context.Context, tsk chain.TipSetKey) (map[string]chain2.MarketDeal, error) //perm:read + StateMinerActiveSectors(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) //perm:read + StateLookupID(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (address.Address, error) //perm:read + StateListMiners(ctx context.Context, tsk chain.TipSetKey) ([]address.Address, error) //perm:read + StateListActors(ctx context.Context, tsk chain.TipSetKey) ([]address.Address, error) //perm:read + StateMinerPower(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (*chain2.MinerPower, error) //perm:read + StateMinerAvailableBalance(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (big.Int, error) //perm:read + StateSectorExpiration(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk chain.TipSetKey) (*miner.SectorExpiration, error) //perm:read + StateMinerSectorCount(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (chain2.MinerSectors, error) //perm:read + StateMarketBalance(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (chain2.MarketBalance, error) //perm:read + StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk chain.TipSetKey) (chain2.DealCollateralBounds, error) //perm:read + StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (*abi.StoragePower, error) //perm:read +} diff --git a/venus-shared/api/chain/v0/fullnode.go b/venus-shared/api/chain/v0/fullnode.go new file mode 100644 index 0000000000..bd4498132a --- /dev/null +++ b/venus-shared/api/chain/v0/fullnode.go @@ -0,0 +1,17 @@ +package v0 + +//go:generate go run github.com/golang/mock/mockgen@v1.6.0 -destination=./mock/full.go -package=mock . FullNode + +type FullNode interface { + IBlockStore + IChain + IMarket + IMining + IMessagePool + IMultiSig + INetwork + IPaychan + ISyncer + IWallet + IJwtAuthAPI +} diff --git a/venus-shared/api/chain/v0/jwtauth.go b/venus-shared/api/chain/v0/jwtauth.go new file mode 100644 index 0000000000..ef3f0c9bb8 --- /dev/null +++ b/venus-shared/api/chain/v0/jwtauth.go @@ -0,0 +1,12 @@ +package v0 + +import ( + "context" + + "github.com/filecoin-project/go-jsonrpc/auth" +) + +type IJwtAuthAPI interface { + Verify(ctx context.Context, host, token string) ([]auth.Permission, error) //perm:read + AuthNew(ctx context.Context, perms []auth.Permission) ([]byte, error) //perm:admin +} diff --git a/venus-shared/api/chain/v0/market.go b/venus-shared/api/chain/v0/market.go new file mode 100644 index 0000000000..81c6eb75fb --- /dev/null +++ b/venus-shared/api/chain/v0/market.go @@ -0,0 +1,12 @@ +package v0 + +import ( + "context" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IMarket interface { + StateMarketParticipants(ctx context.Context, tsk chain.TipSetKey) (map[string]chain2.MarketBalance, error) //perm:read +} diff --git a/venus-shared/api/chain/v0/mining.go b/venus-shared/api/chain/v0/mining.go new file mode 100644 index 0000000000..99da702aa6 --- /dev/null +++ b/venus-shared/api/chain/v0/mining.go @@ -0,0 +1,16 @@ +package v0 + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IMining interface { + MinerGetBaseInfo(ctx context.Context, maddr address.Address, round abi.ChainEpoch, tsk chain.TipSetKey) (*chain2.MiningBaseInfo, error) //perm:read + MinerCreateBlock(ctx context.Context, bt *chain2.BlockTemplate) (*chain.BlockMsg, error) //perm:write +} diff --git a/venus-shared/api/chain/v0/mock/full.go b/venus-shared/api/chain/v0/mock/full.go new file mode 100644 index 0000000000..051d499b14 --- /dev/null +++ b/venus-shared/api/chain/v0/mock/full.go @@ -0,0 +1,2460 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/filecoin-project/venus/venus-shared/api/chain/v0 (interfaces: FullNode) + +// Package mock is a generated GoMock package. +package mock + +import ( + context "context" + reflect "reflect" + time "time" + + address "github.com/filecoin-project/go-address" + bitfield "github.com/filecoin-project/go-bitfield" + abi "github.com/filecoin-project/go-state-types/abi" + big "github.com/filecoin-project/go-state-types/big" + crypto "github.com/filecoin-project/go-state-types/crypto" + dline "github.com/filecoin-project/go-state-types/dline" + network "github.com/filecoin-project/go-state-types/network" + miner "github.com/filecoin-project/specs-actors/actors/builtin/miner" + paych "github.com/filecoin-project/specs-actors/actors/builtin/paych" + miner0 "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + chain "github.com/filecoin-project/venus/venus-shared/api/chain" + chain0 "github.com/filecoin-project/venus/venus-shared/chain" + net "github.com/filecoin-project/venus/venus-shared/libp2p/net" + messagepool "github.com/filecoin-project/venus/venus-shared/messagepool" + paych0 "github.com/filecoin-project/venus/venus-shared/paych" + wallet "github.com/filecoin-project/venus/venus-shared/wallet" + gomock "github.com/golang/mock/gomock" + cid "github.com/ipfs/go-cid" + metrics "github.com/libp2p/go-libp2p-core/metrics" + peer "github.com/libp2p/go-libp2p-core/peer" + multiaddr "github.com/multiformats/go-multiaddr" +) + +// MockFullNode is a mock of FullNode interface. +type MockFullNode struct { + ctrl *gomock.Controller + recorder *MockFullNodeMockRecorder +} + +// MockFullNodeMockRecorder is the mock recorder for MockFullNode. +type MockFullNodeMockRecorder struct { + mock *MockFullNode +} + +// NewMockFullNode creates a new mock instance. +func NewMockFullNode(ctrl *gomock.Controller) *MockFullNode { + mock := &MockFullNode{ctrl: ctrl} + mock.recorder = &MockFullNodeMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockFullNode) EXPECT() *MockFullNodeMockRecorder { + return m.recorder +} + +// AuthNew mocks base method. +func (m *MockFullNode) AuthNew(arg0 context.Context, arg1 []string) ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AuthNew", arg0, arg1) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AuthNew indicates an expected call of AuthNew. +func (mr *MockFullNodeMockRecorder) AuthNew(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthNew", reflect.TypeOf((*MockFullNode)(nil).AuthNew), arg0, arg1) +} + +// BeaconGetEntry mocks base method. +func (m *MockFullNode) BeaconGetEntry(arg0 context.Context, arg1 abi.ChainEpoch) (*chain0.BeaconEntry, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BeaconGetEntry", arg0, arg1) + ret0, _ := ret[0].(*chain0.BeaconEntry) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BeaconGetEntry indicates an expected call of BeaconGetEntry. +func (mr *MockFullNodeMockRecorder) BeaconGetEntry(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BeaconGetEntry", reflect.TypeOf((*MockFullNode)(nil).BeaconGetEntry), arg0, arg1) +} + +// BlockTime mocks base method. +func (m *MockFullNode) BlockTime(arg0 context.Context) time.Duration { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BlockTime", arg0) + ret0, _ := ret[0].(time.Duration) + return ret0 +} + +// BlockTime indicates an expected call of BlockTime. +func (mr *MockFullNodeMockRecorder) BlockTime(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BlockTime", reflect.TypeOf((*MockFullNode)(nil).BlockTime), arg0) +} + +// ChainDeleteObj mocks base method. +func (m *MockFullNode) ChainDeleteObj(arg0 context.Context, arg1 cid.Cid) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainDeleteObj", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// ChainDeleteObj indicates an expected call of ChainDeleteObj. +func (mr *MockFullNodeMockRecorder) ChainDeleteObj(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainDeleteObj", reflect.TypeOf((*MockFullNode)(nil).ChainDeleteObj), arg0, arg1) +} + +// ChainExport mocks base method. +func (m *MockFullNode) ChainExport(arg0 context.Context, arg1 abi.ChainEpoch, arg2 bool, arg3 chain0.TipSetKey) (<-chan []byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainExport", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(<-chan []byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainExport indicates an expected call of ChainExport. +func (mr *MockFullNodeMockRecorder) ChainExport(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainExport", reflect.TypeOf((*MockFullNode)(nil).ChainExport), arg0, arg1, arg2, arg3) +} + +// ChainGetBlock mocks base method. +func (m *MockFullNode) ChainGetBlock(arg0 context.Context, arg1 cid.Cid) (*chain0.BlockHeader, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetBlock", arg0, arg1) + ret0, _ := ret[0].(*chain0.BlockHeader) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetBlock indicates an expected call of ChainGetBlock. +func (mr *MockFullNodeMockRecorder) ChainGetBlock(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetBlock", reflect.TypeOf((*MockFullNode)(nil).ChainGetBlock), arg0, arg1) +} + +// ChainGetBlockMessages mocks base method. +func (m *MockFullNode) ChainGetBlockMessages(arg0 context.Context, arg1 cid.Cid) (*chain.BlockMessages, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetBlockMessages", arg0, arg1) + ret0, _ := ret[0].(*chain.BlockMessages) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetBlockMessages indicates an expected call of ChainGetBlockMessages. +func (mr *MockFullNodeMockRecorder) ChainGetBlockMessages(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetBlockMessages", reflect.TypeOf((*MockFullNode)(nil).ChainGetBlockMessages), arg0, arg1) +} + +// ChainGetMessage mocks base method. +func (m *MockFullNode) ChainGetMessage(arg0 context.Context, arg1 cid.Cid) (*chain0.Message, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetMessage", arg0, arg1) + ret0, _ := ret[0].(*chain0.Message) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetMessage indicates an expected call of ChainGetMessage. +func (mr *MockFullNodeMockRecorder) ChainGetMessage(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetMessage", reflect.TypeOf((*MockFullNode)(nil).ChainGetMessage), arg0, arg1) +} + +// ChainGetMessagesInTipset mocks base method. +func (m *MockFullNode) ChainGetMessagesInTipset(arg0 context.Context, arg1 chain0.TipSetKey) ([]chain.Message, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetMessagesInTipset", arg0, arg1) + ret0, _ := ret[0].([]chain.Message) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetMessagesInTipset indicates an expected call of ChainGetMessagesInTipset. +func (mr *MockFullNodeMockRecorder) ChainGetMessagesInTipset(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetMessagesInTipset", reflect.TypeOf((*MockFullNode)(nil).ChainGetMessagesInTipset), arg0, arg1) +} + +// ChainGetParentMessages mocks base method. +func (m *MockFullNode) ChainGetParentMessages(arg0 context.Context, arg1 cid.Cid) ([]chain.Message, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetParentMessages", arg0, arg1) + ret0, _ := ret[0].([]chain.Message) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetParentMessages indicates an expected call of ChainGetParentMessages. +func (mr *MockFullNodeMockRecorder) ChainGetParentMessages(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetParentMessages", reflect.TypeOf((*MockFullNode)(nil).ChainGetParentMessages), arg0, arg1) +} + +// ChainGetParentReceipts mocks base method. +func (m *MockFullNode) ChainGetParentReceipts(arg0 context.Context, arg1 cid.Cid) ([]*chain0.MessageReceipt, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetParentReceipts", arg0, arg1) + ret0, _ := ret[0].([]*chain0.MessageReceipt) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetParentReceipts indicates an expected call of ChainGetParentReceipts. +func (mr *MockFullNodeMockRecorder) ChainGetParentReceipts(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetParentReceipts", reflect.TypeOf((*MockFullNode)(nil).ChainGetParentReceipts), arg0, arg1) +} + +// ChainGetPath mocks base method. +func (m *MockFullNode) ChainGetPath(arg0 context.Context, arg1, arg2 chain0.TipSetKey) ([]*chain.HeadChange, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetPath", arg0, arg1, arg2) + ret0, _ := ret[0].([]*chain.HeadChange) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetPath indicates an expected call of ChainGetPath. +func (mr *MockFullNodeMockRecorder) ChainGetPath(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetPath", reflect.TypeOf((*MockFullNode)(nil).ChainGetPath), arg0, arg1, arg2) +} + +// ChainGetRandomnessFromBeacon mocks base method. +func (m *MockFullNode) ChainGetRandomnessFromBeacon(arg0 context.Context, arg1 chain0.TipSetKey, arg2 crypto.DomainSeparationTag, arg3 abi.ChainEpoch, arg4 []byte) (abi.Randomness, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetRandomnessFromBeacon", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(abi.Randomness) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetRandomnessFromBeacon indicates an expected call of ChainGetRandomnessFromBeacon. +func (mr *MockFullNodeMockRecorder) ChainGetRandomnessFromBeacon(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetRandomnessFromBeacon", reflect.TypeOf((*MockFullNode)(nil).ChainGetRandomnessFromBeacon), arg0, arg1, arg2, arg3, arg4) +} + +// ChainGetRandomnessFromTickets mocks base method. +func (m *MockFullNode) ChainGetRandomnessFromTickets(arg0 context.Context, arg1 chain0.TipSetKey, arg2 crypto.DomainSeparationTag, arg3 abi.ChainEpoch, arg4 []byte) (abi.Randomness, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetRandomnessFromTickets", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(abi.Randomness) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetRandomnessFromTickets indicates an expected call of ChainGetRandomnessFromTickets. +func (mr *MockFullNodeMockRecorder) ChainGetRandomnessFromTickets(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetRandomnessFromTickets", reflect.TypeOf((*MockFullNode)(nil).ChainGetRandomnessFromTickets), arg0, arg1, arg2, arg3, arg4) +} + +// ChainGetReceipts mocks base method. +func (m *MockFullNode) ChainGetReceipts(arg0 context.Context, arg1 cid.Cid) ([]chain0.MessageReceipt, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetReceipts", arg0, arg1) + ret0, _ := ret[0].([]chain0.MessageReceipt) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetReceipts indicates an expected call of ChainGetReceipts. +func (mr *MockFullNodeMockRecorder) ChainGetReceipts(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetReceipts", reflect.TypeOf((*MockFullNode)(nil).ChainGetReceipts), arg0, arg1) +} + +// ChainGetTipSet mocks base method. +func (m *MockFullNode) ChainGetTipSet(arg0 context.Context, arg1 chain0.TipSetKey) (*chain0.TipSet, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetTipSet", arg0, arg1) + ret0, _ := ret[0].(*chain0.TipSet) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetTipSet indicates an expected call of ChainGetTipSet. +func (mr *MockFullNodeMockRecorder) ChainGetTipSet(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetTipSet", reflect.TypeOf((*MockFullNode)(nil).ChainGetTipSet), arg0, arg1) +} + +// ChainGetTipSetByHeight mocks base method. +func (m *MockFullNode) ChainGetTipSetByHeight(arg0 context.Context, arg1 abi.ChainEpoch, arg2 chain0.TipSetKey) (*chain0.TipSet, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetTipSetByHeight", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.TipSet) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetTipSetByHeight indicates an expected call of ChainGetTipSetByHeight. +func (mr *MockFullNodeMockRecorder) ChainGetTipSetByHeight(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetTipSetByHeight", reflect.TypeOf((*MockFullNode)(nil).ChainGetTipSetByHeight), arg0, arg1, arg2) +} + +// ChainHasObj mocks base method. +func (m *MockFullNode) ChainHasObj(arg0 context.Context, arg1 cid.Cid) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainHasObj", arg0, arg1) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainHasObj indicates an expected call of ChainHasObj. +func (mr *MockFullNodeMockRecorder) ChainHasObj(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainHasObj", reflect.TypeOf((*MockFullNode)(nil).ChainHasObj), arg0, arg1) +} + +// ChainHead mocks base method. +func (m *MockFullNode) ChainHead(arg0 context.Context) (*chain0.TipSet, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainHead", arg0) + ret0, _ := ret[0].(*chain0.TipSet) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainHead indicates an expected call of ChainHead. +func (mr *MockFullNodeMockRecorder) ChainHead(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainHead", reflect.TypeOf((*MockFullNode)(nil).ChainHead), arg0) +} + +// ChainList mocks base method. +func (m *MockFullNode) ChainList(arg0 context.Context, arg1 chain0.TipSetKey, arg2 int) ([]chain0.TipSetKey, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainList", arg0, arg1, arg2) + ret0, _ := ret[0].([]chain0.TipSetKey) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainList indicates an expected call of ChainList. +func (mr *MockFullNodeMockRecorder) ChainList(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainList", reflect.TypeOf((*MockFullNode)(nil).ChainList), arg0, arg1, arg2) +} + +// ChainNotify mocks base method. +func (m *MockFullNode) ChainNotify(arg0 context.Context) (<-chan []*chain.HeadChange, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainNotify", arg0) + ret0, _ := ret[0].(<-chan []*chain.HeadChange) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainNotify indicates an expected call of ChainNotify. +func (mr *MockFullNodeMockRecorder) ChainNotify(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainNotify", reflect.TypeOf((*MockFullNode)(nil).ChainNotify), arg0) +} + +// ChainReadObj mocks base method. +func (m *MockFullNode) ChainReadObj(arg0 context.Context, arg1 cid.Cid) ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainReadObj", arg0, arg1) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainReadObj indicates an expected call of ChainReadObj. +func (mr *MockFullNodeMockRecorder) ChainReadObj(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainReadObj", reflect.TypeOf((*MockFullNode)(nil).ChainReadObj), arg0, arg1) +} + +// ChainSetHead mocks base method. +func (m *MockFullNode) ChainSetHead(arg0 context.Context, arg1 chain0.TipSetKey) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainSetHead", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// ChainSetHead indicates an expected call of ChainSetHead. +func (mr *MockFullNodeMockRecorder) ChainSetHead(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainSetHead", reflect.TypeOf((*MockFullNode)(nil).ChainSetHead), arg0, arg1) +} + +// ChainStatObj mocks base method. +func (m *MockFullNode) ChainStatObj(arg0 context.Context, arg1, arg2 cid.Cid) (chain.ObjStat, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainStatObj", arg0, arg1, arg2) + ret0, _ := ret[0].(chain.ObjStat) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainStatObj indicates an expected call of ChainStatObj. +func (mr *MockFullNodeMockRecorder) ChainStatObj(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainStatObj", reflect.TypeOf((*MockFullNode)(nil).ChainStatObj), arg0, arg1, arg2) +} + +// ChainSyncHandleNewTipSet mocks base method. +func (m *MockFullNode) ChainSyncHandleNewTipSet(arg0 context.Context, arg1 *chain0.ChainInfo) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainSyncHandleNewTipSet", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// ChainSyncHandleNewTipSet indicates an expected call of ChainSyncHandleNewTipSet. +func (mr *MockFullNodeMockRecorder) ChainSyncHandleNewTipSet(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainSyncHandleNewTipSet", reflect.TypeOf((*MockFullNode)(nil).ChainSyncHandleNewTipSet), arg0, arg1) +} + +// ChainTipSetWeight mocks base method. +func (m *MockFullNode) ChainTipSetWeight(arg0 context.Context, arg1 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainTipSetWeight", arg0, arg1) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainTipSetWeight indicates an expected call of ChainTipSetWeight. +func (mr *MockFullNodeMockRecorder) ChainTipSetWeight(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainTipSetWeight", reflect.TypeOf((*MockFullNode)(nil).ChainTipSetWeight), arg0, arg1) +} + +// Concurrent mocks base method. +func (m *MockFullNode) Concurrent(arg0 context.Context) int64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Concurrent", arg0) + ret0, _ := ret[0].(int64) + return ret0 +} + +// Concurrent indicates an expected call of Concurrent. +func (mr *MockFullNodeMockRecorder) Concurrent(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Concurrent", reflect.TypeOf((*MockFullNode)(nil).Concurrent), arg0) +} + +// GasBatchEstimateMessageGas mocks base method. +func (m *MockFullNode) GasBatchEstimateMessageGas(arg0 context.Context, arg1 []*chain.EstimateMessage, arg2 uint64, arg3 chain0.TipSetKey) ([]*chain.EstimateResult, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GasBatchEstimateMessageGas", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].([]*chain.EstimateResult) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GasBatchEstimateMessageGas indicates an expected call of GasBatchEstimateMessageGas. +func (mr *MockFullNodeMockRecorder) GasBatchEstimateMessageGas(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GasBatchEstimateMessageGas", reflect.TypeOf((*MockFullNode)(nil).GasBatchEstimateMessageGas), arg0, arg1, arg2, arg3) +} + +// GasEstimateFeeCap mocks base method. +func (m *MockFullNode) GasEstimateFeeCap(arg0 context.Context, arg1 *chain0.Message, arg2 int64, arg3 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GasEstimateFeeCap", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GasEstimateFeeCap indicates an expected call of GasEstimateFeeCap. +func (mr *MockFullNodeMockRecorder) GasEstimateFeeCap(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GasEstimateFeeCap", reflect.TypeOf((*MockFullNode)(nil).GasEstimateFeeCap), arg0, arg1, arg2, arg3) +} + +// GasEstimateGasLimit mocks base method. +func (m *MockFullNode) GasEstimateGasLimit(arg0 context.Context, arg1 *chain0.Message, arg2 chain0.TipSetKey) (int64, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GasEstimateGasLimit", arg0, arg1, arg2) + ret0, _ := ret[0].(int64) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GasEstimateGasLimit indicates an expected call of GasEstimateGasLimit. +func (mr *MockFullNodeMockRecorder) GasEstimateGasLimit(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GasEstimateGasLimit", reflect.TypeOf((*MockFullNode)(nil).GasEstimateGasLimit), arg0, arg1, arg2) +} + +// GasEstimateGasPremium mocks base method. +func (m *MockFullNode) GasEstimateGasPremium(arg0 context.Context, arg1 uint64, arg2 address.Address, arg3 int64, arg4 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GasEstimateGasPremium", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GasEstimateGasPremium indicates an expected call of GasEstimateGasPremium. +func (mr *MockFullNodeMockRecorder) GasEstimateGasPremium(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GasEstimateGasPremium", reflect.TypeOf((*MockFullNode)(nil).GasEstimateGasPremium), arg0, arg1, arg2, arg3, arg4) +} + +// GasEstimateMessageGas mocks base method. +func (m *MockFullNode) GasEstimateMessageGas(arg0 context.Context, arg1 *chain0.Message, arg2 *chain.MessageSendSpec, arg3 chain0.TipSetKey) (*chain0.Message, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GasEstimateMessageGas", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*chain0.Message) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GasEstimateMessageGas indicates an expected call of GasEstimateMessageGas. +func (mr *MockFullNodeMockRecorder) GasEstimateMessageGas(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GasEstimateMessageGas", reflect.TypeOf((*MockFullNode)(nil).GasEstimateMessageGas), arg0, arg1, arg2, arg3) +} + +// GetActor mocks base method. +func (m *MockFullNode) GetActor(arg0 context.Context, arg1 address.Address) (*chain0.Actor, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetActor", arg0, arg1) + ret0, _ := ret[0].(*chain0.Actor) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetActor indicates an expected call of GetActor. +func (mr *MockFullNodeMockRecorder) GetActor(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetActor", reflect.TypeOf((*MockFullNode)(nil).GetActor), arg0, arg1) +} + +// GetEntry mocks base method. +func (m *MockFullNode) GetEntry(arg0 context.Context, arg1 abi.ChainEpoch, arg2 uint64) (*chain0.BeaconEntry, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetEntry", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.BeaconEntry) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetEntry indicates an expected call of GetEntry. +func (mr *MockFullNodeMockRecorder) GetEntry(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetEntry", reflect.TypeOf((*MockFullNode)(nil).GetEntry), arg0, arg1, arg2) +} + +// GetFullBlock mocks base method. +func (m *MockFullNode) GetFullBlock(arg0 context.Context, arg1 cid.Cid) (*chain0.FullBlock, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetFullBlock", arg0, arg1) + ret0, _ := ret[0].(*chain0.FullBlock) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetFullBlock indicates an expected call of GetFullBlock. +func (mr *MockFullNodeMockRecorder) GetFullBlock(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFullBlock", reflect.TypeOf((*MockFullNode)(nil).GetFullBlock), arg0, arg1) +} + +// GetParentStateRootActor mocks base method. +func (m *MockFullNode) GetParentStateRootActor(arg0 context.Context, arg1 *chain0.TipSet, arg2 address.Address) (*chain0.Actor, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetParentStateRootActor", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.Actor) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetParentStateRootActor indicates an expected call of GetParentStateRootActor. +func (mr *MockFullNodeMockRecorder) GetParentStateRootActor(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetParentStateRootActor", reflect.TypeOf((*MockFullNode)(nil).GetParentStateRootActor), arg0, arg1, arg2) +} + +// HasPassword mocks base method. +func (m *MockFullNode) HasPassword(arg0 context.Context) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HasPassword", arg0) + ret0, _ := ret[0].(bool) + return ret0 +} + +// HasPassword indicates an expected call of HasPassword. +func (mr *MockFullNodeMockRecorder) HasPassword(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HasPassword", reflect.TypeOf((*MockFullNode)(nil).HasPassword), arg0) +} + +// ListActor mocks base method. +func (m *MockFullNode) ListActor(arg0 context.Context) (map[address.Address]*chain0.Actor, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListActor", arg0) + ret0, _ := ret[0].(map[address.Address]*chain0.Actor) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListActor indicates an expected call of ListActor. +func (mr *MockFullNodeMockRecorder) ListActor(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListActor", reflect.TypeOf((*MockFullNode)(nil).ListActor), arg0) +} + +// LockWallet mocks base method. +func (m *MockFullNode) LockWallet(arg0 context.Context) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LockWallet", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// LockWallet indicates an expected call of LockWallet. +func (mr *MockFullNodeMockRecorder) LockWallet(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LockWallet", reflect.TypeOf((*MockFullNode)(nil).LockWallet), arg0) +} + +// MessageWait mocks base method. +func (m *MockFullNode) MessageWait(arg0 context.Context, arg1 cid.Cid, arg2, arg3 abi.ChainEpoch) (*chain.ChainMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MessageWait", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*chain.ChainMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MessageWait indicates an expected call of MessageWait. +func (mr *MockFullNodeMockRecorder) MessageWait(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MessageWait", reflect.TypeOf((*MockFullNode)(nil).MessageWait), arg0, arg1, arg2, arg3) +} + +// MinerCreateBlock mocks base method. +func (m *MockFullNode) MinerCreateBlock(arg0 context.Context, arg1 *chain.BlockTemplate) (*chain0.BlockMsg, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MinerCreateBlock", arg0, arg1) + ret0, _ := ret[0].(*chain0.BlockMsg) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MinerCreateBlock indicates an expected call of MinerCreateBlock. +func (mr *MockFullNodeMockRecorder) MinerCreateBlock(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MinerCreateBlock", reflect.TypeOf((*MockFullNode)(nil).MinerCreateBlock), arg0, arg1) +} + +// MinerGetBaseInfo mocks base method. +func (m *MockFullNode) MinerGetBaseInfo(arg0 context.Context, arg1 address.Address, arg2 abi.ChainEpoch, arg3 chain0.TipSetKey) (*chain.MiningBaseInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MinerGetBaseInfo", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*chain.MiningBaseInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MinerGetBaseInfo indicates an expected call of MinerGetBaseInfo. +func (mr *MockFullNodeMockRecorder) MinerGetBaseInfo(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MinerGetBaseInfo", reflect.TypeOf((*MockFullNode)(nil).MinerGetBaseInfo), arg0, arg1, arg2, arg3) +} + +// MpoolBatchPush mocks base method. +func (m *MockFullNode) MpoolBatchPush(arg0 context.Context, arg1 []*chain0.SignedMessage) ([]cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolBatchPush", arg0, arg1) + ret0, _ := ret[0].([]cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolBatchPush indicates an expected call of MpoolBatchPush. +func (mr *MockFullNodeMockRecorder) MpoolBatchPush(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolBatchPush", reflect.TypeOf((*MockFullNode)(nil).MpoolBatchPush), arg0, arg1) +} + +// MpoolBatchPushMessage mocks base method. +func (m *MockFullNode) MpoolBatchPushMessage(arg0 context.Context, arg1 []*chain0.Message, arg2 *chain.MessageSendSpec) ([]*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolBatchPushMessage", arg0, arg1, arg2) + ret0, _ := ret[0].([]*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolBatchPushMessage indicates an expected call of MpoolBatchPushMessage. +func (mr *MockFullNodeMockRecorder) MpoolBatchPushMessage(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolBatchPushMessage", reflect.TypeOf((*MockFullNode)(nil).MpoolBatchPushMessage), arg0, arg1, arg2) +} + +// MpoolBatchPushUntrusted mocks base method. +func (m *MockFullNode) MpoolBatchPushUntrusted(arg0 context.Context, arg1 []*chain0.SignedMessage) ([]cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolBatchPushUntrusted", arg0, arg1) + ret0, _ := ret[0].([]cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolBatchPushUntrusted indicates an expected call of MpoolBatchPushUntrusted. +func (mr *MockFullNodeMockRecorder) MpoolBatchPushUntrusted(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolBatchPushUntrusted", reflect.TypeOf((*MockFullNode)(nil).MpoolBatchPushUntrusted), arg0, arg1) +} + +// MpoolClear mocks base method. +func (m *MockFullNode) MpoolClear(arg0 context.Context, arg1 bool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolClear", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// MpoolClear indicates an expected call of MpoolClear. +func (mr *MockFullNodeMockRecorder) MpoolClear(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolClear", reflect.TypeOf((*MockFullNode)(nil).MpoolClear), arg0, arg1) +} + +// MpoolDeleteByAdress mocks base method. +func (m *MockFullNode) MpoolDeleteByAdress(arg0 context.Context, arg1 address.Address) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolDeleteByAdress", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// MpoolDeleteByAdress indicates an expected call of MpoolDeleteByAdress. +func (mr *MockFullNodeMockRecorder) MpoolDeleteByAdress(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolDeleteByAdress", reflect.TypeOf((*MockFullNode)(nil).MpoolDeleteByAdress), arg0, arg1) +} + +// MpoolGetConfig mocks base method. +func (m *MockFullNode) MpoolGetConfig(arg0 context.Context) (*messagepool.MpoolConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolGetConfig", arg0) + ret0, _ := ret[0].(*messagepool.MpoolConfig) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolGetConfig indicates an expected call of MpoolGetConfig. +func (mr *MockFullNodeMockRecorder) MpoolGetConfig(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolGetConfig", reflect.TypeOf((*MockFullNode)(nil).MpoolGetConfig), arg0) +} + +// MpoolGetNonce mocks base method. +func (m *MockFullNode) MpoolGetNonce(arg0 context.Context, arg1 address.Address) (uint64, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolGetNonce", arg0, arg1) + ret0, _ := ret[0].(uint64) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolGetNonce indicates an expected call of MpoolGetNonce. +func (mr *MockFullNodeMockRecorder) MpoolGetNonce(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolGetNonce", reflect.TypeOf((*MockFullNode)(nil).MpoolGetNonce), arg0, arg1) +} + +// MpoolPending mocks base method. +func (m *MockFullNode) MpoolPending(arg0 context.Context, arg1 chain0.TipSetKey) ([]*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPending", arg0, arg1) + ret0, _ := ret[0].([]*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolPending indicates an expected call of MpoolPending. +func (mr *MockFullNodeMockRecorder) MpoolPending(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPending", reflect.TypeOf((*MockFullNode)(nil).MpoolPending), arg0, arg1) +} + +// MpoolPublishByAddr mocks base method. +func (m *MockFullNode) MpoolPublishByAddr(arg0 context.Context, arg1 address.Address) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPublishByAddr", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// MpoolPublishByAddr indicates an expected call of MpoolPublishByAddr. +func (mr *MockFullNodeMockRecorder) MpoolPublishByAddr(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPublishByAddr", reflect.TypeOf((*MockFullNode)(nil).MpoolPublishByAddr), arg0, arg1) +} + +// MpoolPublishMessage mocks base method. +func (m *MockFullNode) MpoolPublishMessage(arg0 context.Context, arg1 *chain0.SignedMessage) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPublishMessage", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// MpoolPublishMessage indicates an expected call of MpoolPublishMessage. +func (mr *MockFullNodeMockRecorder) MpoolPublishMessage(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPublishMessage", reflect.TypeOf((*MockFullNode)(nil).MpoolPublishMessage), arg0, arg1) +} + +// MpoolPush mocks base method. +func (m *MockFullNode) MpoolPush(arg0 context.Context, arg1 *chain0.SignedMessage) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPush", arg0, arg1) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolPush indicates an expected call of MpoolPush. +func (mr *MockFullNodeMockRecorder) MpoolPush(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPush", reflect.TypeOf((*MockFullNode)(nil).MpoolPush), arg0, arg1) +} + +// MpoolPushMessage mocks base method. +func (m *MockFullNode) MpoolPushMessage(arg0 context.Context, arg1 *chain0.Message, arg2 *chain.MessageSendSpec) (*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPushMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolPushMessage indicates an expected call of MpoolPushMessage. +func (mr *MockFullNodeMockRecorder) MpoolPushMessage(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPushMessage", reflect.TypeOf((*MockFullNode)(nil).MpoolPushMessage), arg0, arg1, arg2) +} + +// MpoolPushUntrusted mocks base method. +func (m *MockFullNode) MpoolPushUntrusted(arg0 context.Context, arg1 *chain0.SignedMessage) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPushUntrusted", arg0, arg1) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolPushUntrusted indicates an expected call of MpoolPushUntrusted. +func (mr *MockFullNodeMockRecorder) MpoolPushUntrusted(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPushUntrusted", reflect.TypeOf((*MockFullNode)(nil).MpoolPushUntrusted), arg0, arg1) +} + +// MpoolSelect mocks base method. +func (m *MockFullNode) MpoolSelect(arg0 context.Context, arg1 chain0.TipSetKey, arg2 float64) ([]*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolSelect", arg0, arg1, arg2) + ret0, _ := ret[0].([]*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolSelect indicates an expected call of MpoolSelect. +func (mr *MockFullNodeMockRecorder) MpoolSelect(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolSelect", reflect.TypeOf((*MockFullNode)(nil).MpoolSelect), arg0, arg1, arg2) +} + +// MpoolSelects mocks base method. +func (m *MockFullNode) MpoolSelects(arg0 context.Context, arg1 chain0.TipSetKey, arg2 []float64) ([][]*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolSelects", arg0, arg1, arg2) + ret0, _ := ret[0].([][]*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolSelects indicates an expected call of MpoolSelects. +func (mr *MockFullNodeMockRecorder) MpoolSelects(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolSelects", reflect.TypeOf((*MockFullNode)(nil).MpoolSelects), arg0, arg1, arg2) +} + +// MpoolSetConfig mocks base method. +func (m *MockFullNode) MpoolSetConfig(arg0 context.Context, arg1 *messagepool.MpoolConfig) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolSetConfig", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// MpoolSetConfig indicates an expected call of MpoolSetConfig. +func (mr *MockFullNodeMockRecorder) MpoolSetConfig(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolSetConfig", reflect.TypeOf((*MockFullNode)(nil).MpoolSetConfig), arg0, arg1) +} + +// MpoolSub mocks base method. +func (m *MockFullNode) MpoolSub(arg0 context.Context) (<-chan messagepool.MpoolUpdate, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolSub", arg0) + ret0, _ := ret[0].(<-chan messagepool.MpoolUpdate) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolSub indicates an expected call of MpoolSub. +func (mr *MockFullNodeMockRecorder) MpoolSub(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolSub", reflect.TypeOf((*MockFullNode)(nil).MpoolSub), arg0) +} + +// MsigAddApprove mocks base method. +func (m *MockFullNode) MsigAddApprove(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5 address.Address, arg6 bool) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigAddApprove", arg0, arg1, arg2, arg3, arg4, arg5, arg6) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigAddApprove indicates an expected call of MsigAddApprove. +func (mr *MockFullNodeMockRecorder) MsigAddApprove(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddApprove", reflect.TypeOf((*MockFullNode)(nil).MsigAddApprove), arg0, arg1, arg2, arg3, arg4, arg5, arg6) +} + +// MsigAddCancel mocks base method. +func (m *MockFullNode) MsigAddCancel(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4 address.Address, arg5 bool) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigAddCancel", arg0, arg1, arg2, arg3, arg4, arg5) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigAddCancel indicates an expected call of MsigAddCancel. +func (mr *MockFullNodeMockRecorder) MsigAddCancel(arg0, arg1, arg2, arg3, arg4, arg5 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddCancel", reflect.TypeOf((*MockFullNode)(nil).MsigAddCancel), arg0, arg1, arg2, arg3, arg4, arg5) +} + +// MsigAddPropose mocks base method. +func (m *MockFullNode) MsigAddPropose(arg0 context.Context, arg1, arg2, arg3 address.Address, arg4 bool) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigAddPropose", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigAddPropose indicates an expected call of MsigAddPropose. +func (mr *MockFullNodeMockRecorder) MsigAddPropose(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddPropose", reflect.TypeOf((*MockFullNode)(nil).MsigAddPropose), arg0, arg1, arg2, arg3, arg4) +} + +// MsigApprove mocks base method. +func (m *MockFullNode) MsigApprove(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigApprove", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigApprove indicates an expected call of MsigApprove. +func (mr *MockFullNodeMockRecorder) MsigApprove(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigApprove", reflect.TypeOf((*MockFullNode)(nil).MsigApprove), arg0, arg1, arg2, arg3) +} + +// MsigApproveTxnHash mocks base method. +func (m *MockFullNode) MsigApproveTxnHash(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3, arg4 address.Address, arg5 big.Int, arg6 address.Address, arg7 uint64, arg8 []byte) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigApproveTxnHash", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigApproveTxnHash indicates an expected call of MsigApproveTxnHash. +func (mr *MockFullNodeMockRecorder) MsigApproveTxnHash(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigApproveTxnHash", reflect.TypeOf((*MockFullNode)(nil).MsigApproveTxnHash), arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) +} + +// MsigCancel mocks base method. +func (m *MockFullNode) MsigCancel(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address, arg4 big.Int, arg5 address.Address, arg6 uint64, arg7 []byte) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigCancel", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigCancel indicates an expected call of MsigCancel. +func (mr *MockFullNodeMockRecorder) MsigCancel(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCancel", reflect.TypeOf((*MockFullNode)(nil).MsigCancel), arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) +} + +// MsigCreate mocks base method. +func (m *MockFullNode) MsigCreate(arg0 context.Context, arg1 uint64, arg2 []address.Address, arg3 abi.ChainEpoch, arg4 big.Int, arg5 address.Address, arg6 big.Int) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigCreate", arg0, arg1, arg2, arg3, arg4, arg5, arg6) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigCreate indicates an expected call of MsigCreate. +func (mr *MockFullNodeMockRecorder) MsigCreate(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCreate", reflect.TypeOf((*MockFullNode)(nil).MsigCreate), arg0, arg1, arg2, arg3, arg4, arg5, arg6) +} + +// MsigGetVested mocks base method. +func (m *MockFullNode) MsigGetVested(arg0 context.Context, arg1 address.Address, arg2, arg3 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigGetVested", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigGetVested indicates an expected call of MsigGetVested. +func (mr *MockFullNodeMockRecorder) MsigGetVested(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetVested", reflect.TypeOf((*MockFullNode)(nil).MsigGetVested), arg0, arg1, arg2, arg3) +} + +// MsigPropose mocks base method. +func (m *MockFullNode) MsigPropose(arg0 context.Context, arg1, arg2 address.Address, arg3 big.Int, arg4 address.Address, arg5 uint64, arg6 []byte) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigPropose", arg0, arg1, arg2, arg3, arg4, arg5, arg6) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigPropose indicates an expected call of MsigPropose. +func (mr *MockFullNodeMockRecorder) MsigPropose(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigPropose", reflect.TypeOf((*MockFullNode)(nil).MsigPropose), arg0, arg1, arg2, arg3, arg4, arg5, arg6) +} + +// MsigRemoveSigner mocks base method. +func (m *MockFullNode) MsigRemoveSigner(arg0 context.Context, arg1, arg2, arg3 address.Address, arg4 bool) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigRemoveSigner", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigRemoveSigner indicates an expected call of MsigRemoveSigner. +func (mr *MockFullNodeMockRecorder) MsigRemoveSigner(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigRemoveSigner", reflect.TypeOf((*MockFullNode)(nil).MsigRemoveSigner), arg0, arg1, arg2, arg3, arg4) +} + +// MsigSwapApprove mocks base method. +func (m *MockFullNode) MsigSwapApprove(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5, arg6 address.Address) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigSwapApprove", arg0, arg1, arg2, arg3, arg4, arg5, arg6) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigSwapApprove indicates an expected call of MsigSwapApprove. +func (mr *MockFullNodeMockRecorder) MsigSwapApprove(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapApprove", reflect.TypeOf((*MockFullNode)(nil).MsigSwapApprove), arg0, arg1, arg2, arg3, arg4, arg5, arg6) +} + +// MsigSwapCancel mocks base method. +func (m *MockFullNode) MsigSwapCancel(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5 address.Address) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigSwapCancel", arg0, arg1, arg2, arg3, arg4, arg5) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigSwapCancel indicates an expected call of MsigSwapCancel. +func (mr *MockFullNodeMockRecorder) MsigSwapCancel(arg0, arg1, arg2, arg3, arg4, arg5 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapCancel", reflect.TypeOf((*MockFullNode)(nil).MsigSwapCancel), arg0, arg1, arg2, arg3, arg4, arg5) +} + +// MsigSwapPropose mocks base method. +func (m *MockFullNode) MsigSwapPropose(arg0 context.Context, arg1, arg2, arg3, arg4 address.Address) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigSwapPropose", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigSwapPropose indicates an expected call of MsigSwapPropose. +func (mr *MockFullNodeMockRecorder) MsigSwapPropose(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapPropose", reflect.TypeOf((*MockFullNode)(nil).MsigSwapPropose), arg0, arg1, arg2, arg3, arg4) +} + +// NetAddrsListen mocks base method. +func (m *MockFullNode) NetAddrsListen(arg0 context.Context) (peer.AddrInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetAddrsListen", arg0) + ret0, _ := ret[0].(peer.AddrInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetAddrsListen indicates an expected call of NetAddrsListen. +func (mr *MockFullNodeMockRecorder) NetAddrsListen(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetAddrsListen", reflect.TypeOf((*MockFullNode)(nil).NetAddrsListen), arg0) +} + +// NetworkConnect mocks base method. +func (m *MockFullNode) NetworkConnect(arg0 context.Context, arg1 []string) (<-chan net.ConnectionResult, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkConnect", arg0, arg1) + ret0, _ := ret[0].(<-chan net.ConnectionResult) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetworkConnect indicates an expected call of NetworkConnect. +func (mr *MockFullNodeMockRecorder) NetworkConnect(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkConnect", reflect.TypeOf((*MockFullNode)(nil).NetworkConnect), arg0, arg1) +} + +// NetworkFindPeer mocks base method. +func (m *MockFullNode) NetworkFindPeer(arg0 context.Context, arg1 peer.ID) (peer.AddrInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkFindPeer", arg0, arg1) + ret0, _ := ret[0].(peer.AddrInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetworkFindPeer indicates an expected call of NetworkFindPeer. +func (mr *MockFullNodeMockRecorder) NetworkFindPeer(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkFindPeer", reflect.TypeOf((*MockFullNode)(nil).NetworkFindPeer), arg0, arg1) +} + +// NetworkFindProvidersAsync mocks base method. +func (m *MockFullNode) NetworkFindProvidersAsync(arg0 context.Context, arg1 cid.Cid, arg2 int) <-chan peer.AddrInfo { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkFindProvidersAsync", arg0, arg1, arg2) + ret0, _ := ret[0].(<-chan peer.AddrInfo) + return ret0 +} + +// NetworkFindProvidersAsync indicates an expected call of NetworkFindProvidersAsync. +func (mr *MockFullNodeMockRecorder) NetworkFindProvidersAsync(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkFindProvidersAsync", reflect.TypeOf((*MockFullNode)(nil).NetworkFindProvidersAsync), arg0, arg1, arg2) +} + +// NetworkGetBandwidthStats mocks base method. +func (m *MockFullNode) NetworkGetBandwidthStats(arg0 context.Context) metrics.Stats { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkGetBandwidthStats", arg0) + ret0, _ := ret[0].(metrics.Stats) + return ret0 +} + +// NetworkGetBandwidthStats indicates an expected call of NetworkGetBandwidthStats. +func (mr *MockFullNodeMockRecorder) NetworkGetBandwidthStats(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkGetBandwidthStats", reflect.TypeOf((*MockFullNode)(nil).NetworkGetBandwidthStats), arg0) +} + +// NetworkGetClosestPeers mocks base method. +func (m *MockFullNode) NetworkGetClosestPeers(arg0 context.Context, arg1 string) ([]peer.ID, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkGetClosestPeers", arg0, arg1) + ret0, _ := ret[0].([]peer.ID) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetworkGetClosestPeers indicates an expected call of NetworkGetClosestPeers. +func (mr *MockFullNodeMockRecorder) NetworkGetClosestPeers(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkGetClosestPeers", reflect.TypeOf((*MockFullNode)(nil).NetworkGetClosestPeers), arg0, arg1) +} + +// NetworkGetPeerAddresses mocks base method. +func (m *MockFullNode) NetworkGetPeerAddresses(arg0 context.Context) []multiaddr.Multiaddr { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkGetPeerAddresses", arg0) + ret0, _ := ret[0].([]multiaddr.Multiaddr) + return ret0 +} + +// NetworkGetPeerAddresses indicates an expected call of NetworkGetPeerAddresses. +func (mr *MockFullNodeMockRecorder) NetworkGetPeerAddresses(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkGetPeerAddresses", reflect.TypeOf((*MockFullNode)(nil).NetworkGetPeerAddresses), arg0) +} + +// NetworkGetPeerID mocks base method. +func (m *MockFullNode) NetworkGetPeerID(arg0 context.Context) peer.ID { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkGetPeerID", arg0) + ret0, _ := ret[0].(peer.ID) + return ret0 +} + +// NetworkGetPeerID indicates an expected call of NetworkGetPeerID. +func (mr *MockFullNodeMockRecorder) NetworkGetPeerID(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkGetPeerID", reflect.TypeOf((*MockFullNode)(nil).NetworkGetPeerID), arg0) +} + +// NetworkPeers mocks base method. +func (m *MockFullNode) NetworkPeers(arg0 context.Context, arg1, arg2, arg3 bool) (*net.SwarmConnInfos, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkPeers", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*net.SwarmConnInfos) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetworkPeers indicates an expected call of NetworkPeers. +func (mr *MockFullNodeMockRecorder) NetworkPeers(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkPeers", reflect.TypeOf((*MockFullNode)(nil).NetworkPeers), arg0, arg1, arg2, arg3) +} + +// PaychAllocateLane mocks base method. +func (m *MockFullNode) PaychAllocateLane(arg0 context.Context, arg1 address.Address) (uint64, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychAllocateLane", arg0, arg1) + ret0, _ := ret[0].(uint64) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychAllocateLane indicates an expected call of PaychAllocateLane. +func (mr *MockFullNodeMockRecorder) PaychAllocateLane(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychAllocateLane", reflect.TypeOf((*MockFullNode)(nil).PaychAllocateLane), arg0, arg1) +} + +// PaychAvailableFunds mocks base method. +func (m *MockFullNode) PaychAvailableFunds(arg0 context.Context, arg1 address.Address) (*chain.ChannelAvailableFunds, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychAvailableFunds", arg0, arg1) + ret0, _ := ret[0].(*chain.ChannelAvailableFunds) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychAvailableFunds indicates an expected call of PaychAvailableFunds. +func (mr *MockFullNodeMockRecorder) PaychAvailableFunds(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychAvailableFunds", reflect.TypeOf((*MockFullNode)(nil).PaychAvailableFunds), arg0, arg1) +} + +// PaychAvailableFundsByFromTo mocks base method. +func (m *MockFullNode) PaychAvailableFundsByFromTo(arg0 context.Context, arg1, arg2 address.Address) (*chain.ChannelAvailableFunds, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychAvailableFundsByFromTo", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain.ChannelAvailableFunds) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychAvailableFundsByFromTo indicates an expected call of PaychAvailableFundsByFromTo. +func (mr *MockFullNodeMockRecorder) PaychAvailableFundsByFromTo(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychAvailableFundsByFromTo", reflect.TypeOf((*MockFullNode)(nil).PaychAvailableFundsByFromTo), arg0, arg1, arg2) +} + +// PaychCollect mocks base method. +func (m *MockFullNode) PaychCollect(arg0 context.Context, arg1 address.Address) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychCollect", arg0, arg1) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychCollect indicates an expected call of PaychCollect. +func (mr *MockFullNodeMockRecorder) PaychCollect(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychCollect", reflect.TypeOf((*MockFullNode)(nil).PaychCollect), arg0, arg1) +} + +// PaychGet mocks base method. +func (m *MockFullNode) PaychGet(arg0 context.Context, arg1, arg2 address.Address, arg3 big.Int) (*paych0.ChannelInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychGet", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*paych0.ChannelInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychGet indicates an expected call of PaychGet. +func (mr *MockFullNodeMockRecorder) PaychGet(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychGet", reflect.TypeOf((*MockFullNode)(nil).PaychGet), arg0, arg1, arg2, arg3) +} + +// PaychGetWaitReady mocks base method. +func (m *MockFullNode) PaychGetWaitReady(arg0 context.Context, arg1 cid.Cid) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychGetWaitReady", arg0, arg1) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychGetWaitReady indicates an expected call of PaychGetWaitReady. +func (mr *MockFullNodeMockRecorder) PaychGetWaitReady(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychGetWaitReady", reflect.TypeOf((*MockFullNode)(nil).PaychGetWaitReady), arg0, arg1) +} + +// PaychList mocks base method. +func (m *MockFullNode) PaychList(arg0 context.Context) ([]address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychList", arg0) + ret0, _ := ret[0].([]address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychList indicates an expected call of PaychList. +func (mr *MockFullNodeMockRecorder) PaychList(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychList", reflect.TypeOf((*MockFullNode)(nil).PaychList), arg0) +} + +// PaychNewPayment mocks base method. +func (m *MockFullNode) PaychNewPayment(arg0 context.Context, arg1, arg2 address.Address, arg3 []paych0.VoucherSpec) (*paych0.PaymentInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychNewPayment", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*paych0.PaymentInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychNewPayment indicates an expected call of PaychNewPayment. +func (mr *MockFullNodeMockRecorder) PaychNewPayment(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychNewPayment", reflect.TypeOf((*MockFullNode)(nil).PaychNewPayment), arg0, arg1, arg2, arg3) +} + +// PaychSettle mocks base method. +func (m *MockFullNode) PaychSettle(arg0 context.Context, arg1 address.Address) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychSettle", arg0, arg1) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychSettle indicates an expected call of PaychSettle. +func (mr *MockFullNodeMockRecorder) PaychSettle(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychSettle", reflect.TypeOf((*MockFullNode)(nil).PaychSettle), arg0, arg1) +} + +// PaychStatus mocks base method. +func (m *MockFullNode) PaychStatus(arg0 context.Context, arg1 address.Address) (*paych0.Status, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychStatus", arg0, arg1) + ret0, _ := ret[0].(*paych0.Status) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychStatus indicates an expected call of PaychStatus. +func (mr *MockFullNodeMockRecorder) PaychStatus(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychStatus", reflect.TypeOf((*MockFullNode)(nil).PaychStatus), arg0, arg1) +} + +// PaychVoucherAdd mocks base method. +func (m *MockFullNode) PaychVoucherAdd(arg0 context.Context, arg1 address.Address, arg2 *paych.SignedVoucher, arg3 []byte, arg4 big.Int) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherAdd", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychVoucherAdd indicates an expected call of PaychVoucherAdd. +func (mr *MockFullNodeMockRecorder) PaychVoucherAdd(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherAdd", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherAdd), arg0, arg1, arg2, arg3, arg4) +} + +// PaychVoucherCheckSpendable mocks base method. +func (m *MockFullNode) PaychVoucherCheckSpendable(arg0 context.Context, arg1 address.Address, arg2 *paych.SignedVoucher, arg3, arg4 []byte) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherCheckSpendable", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychVoucherCheckSpendable indicates an expected call of PaychVoucherCheckSpendable. +func (mr *MockFullNodeMockRecorder) PaychVoucherCheckSpendable(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherCheckSpendable", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherCheckSpendable), arg0, arg1, arg2, arg3, arg4) +} + +// PaychVoucherCheckValid mocks base method. +func (m *MockFullNode) PaychVoucherCheckValid(arg0 context.Context, arg1 address.Address, arg2 *paych.SignedVoucher) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherCheckValid", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// PaychVoucherCheckValid indicates an expected call of PaychVoucherCheckValid. +func (mr *MockFullNodeMockRecorder) PaychVoucherCheckValid(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherCheckValid", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherCheckValid), arg0, arg1, arg2) +} + +// PaychVoucherCreate mocks base method. +func (m *MockFullNode) PaychVoucherCreate(arg0 context.Context, arg1 address.Address, arg2 big.Int, arg3 uint64) (*paych0.VoucherCreateResult, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherCreate", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*paych0.VoucherCreateResult) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychVoucherCreate indicates an expected call of PaychVoucherCreate. +func (mr *MockFullNodeMockRecorder) PaychVoucherCreate(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherCreate", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherCreate), arg0, arg1, arg2, arg3) +} + +// PaychVoucherList mocks base method. +func (m *MockFullNode) PaychVoucherList(arg0 context.Context, arg1 address.Address) ([]*paych.SignedVoucher, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherList", arg0, arg1) + ret0, _ := ret[0].([]*paych.SignedVoucher) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychVoucherList indicates an expected call of PaychVoucherList. +func (mr *MockFullNodeMockRecorder) PaychVoucherList(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherList", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherList), arg0, arg1) +} + +// PaychVoucherSubmit mocks base method. +func (m *MockFullNode) PaychVoucherSubmit(arg0 context.Context, arg1 address.Address, arg2 *paych.SignedVoucher, arg3, arg4 []byte) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherSubmit", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychVoucherSubmit indicates an expected call of PaychVoucherSubmit. +func (mr *MockFullNodeMockRecorder) PaychVoucherSubmit(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherSubmit", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherSubmit), arg0, arg1, arg2, arg3, arg4) +} + +// ProtocolParameters mocks base method. +func (m *MockFullNode) ProtocolParameters(arg0 context.Context) (*chain.ProtocolParams, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProtocolParameters", arg0) + ret0, _ := ret[0].(*chain.ProtocolParams) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ProtocolParameters indicates an expected call of ProtocolParameters. +func (mr *MockFullNodeMockRecorder) ProtocolParameters(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProtocolParameters", reflect.TypeOf((*MockFullNode)(nil).ProtocolParameters), arg0) +} + +// ResolveToKeyAddr mocks base method. +func (m *MockFullNode) ResolveToKeyAddr(arg0 context.Context, arg1 address.Address, arg2 *chain0.TipSet) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ResolveToKeyAddr", arg0, arg1, arg2) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ResolveToKeyAddr indicates an expected call of ResolveToKeyAddr. +func (mr *MockFullNodeMockRecorder) ResolveToKeyAddr(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResolveToKeyAddr", reflect.TypeOf((*MockFullNode)(nil).ResolveToKeyAddr), arg0, arg1, arg2) +} + +// SetConcurrent mocks base method. +func (m *MockFullNode) SetConcurrent(arg0 context.Context, arg1 int64) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetConcurrent", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetConcurrent indicates an expected call of SetConcurrent. +func (mr *MockFullNodeMockRecorder) SetConcurrent(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetConcurrent", reflect.TypeOf((*MockFullNode)(nil).SetConcurrent), arg0, arg1) +} + +// SetPassword mocks base method. +func (m *MockFullNode) SetPassword(arg0 context.Context, arg1 []byte) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetPassword", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetPassword indicates an expected call of SetPassword. +func (mr *MockFullNodeMockRecorder) SetPassword(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetPassword", reflect.TypeOf((*MockFullNode)(nil).SetPassword), arg0, arg1) +} + +// StateAccountKey mocks base method. +func (m *MockFullNode) StateAccountKey(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateAccountKey", arg0, arg1, arg2) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateAccountKey indicates an expected call of StateAccountKey. +func (mr *MockFullNodeMockRecorder) StateAccountKey(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateAccountKey", reflect.TypeOf((*MockFullNode)(nil).StateAccountKey), arg0, arg1, arg2) +} + +// StateCall mocks base method. +func (m *MockFullNode) StateCall(arg0 context.Context, arg1 *chain0.Message, arg2 chain0.TipSetKey) (*chain.InvocResult, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateCall", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain.InvocResult) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateCall indicates an expected call of StateCall. +func (mr *MockFullNodeMockRecorder) StateCall(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateCall", reflect.TypeOf((*MockFullNode)(nil).StateCall), arg0, arg1, arg2) +} + +// StateCirculatingSupply mocks base method. +func (m *MockFullNode) StateCirculatingSupply(arg0 context.Context, arg1 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateCirculatingSupply", arg0, arg1) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateCirculatingSupply indicates an expected call of StateCirculatingSupply. +func (mr *MockFullNodeMockRecorder) StateCirculatingSupply(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateCirculatingSupply", reflect.TypeOf((*MockFullNode)(nil).StateCirculatingSupply), arg0, arg1) +} + +// StateDealProviderCollateralBounds mocks base method. +func (m *MockFullNode) StateDealProviderCollateralBounds(arg0 context.Context, arg1 abi.PaddedPieceSize, arg2 bool, arg3 chain0.TipSetKey) (chain.DealCollateralBounds, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateDealProviderCollateralBounds", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(chain.DealCollateralBounds) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateDealProviderCollateralBounds indicates an expected call of StateDealProviderCollateralBounds. +func (mr *MockFullNodeMockRecorder) StateDealProviderCollateralBounds(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateDealProviderCollateralBounds", reflect.TypeOf((*MockFullNode)(nil).StateDealProviderCollateralBounds), arg0, arg1, arg2, arg3) +} + +// StateGetActor mocks base method. +func (m *MockFullNode) StateGetActor(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (*chain0.Actor, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetActor", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.Actor) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetActor indicates an expected call of StateGetActor. +func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2) +} + +// StateGetReceipt mocks base method. +func (m *MockFullNode) StateGetReceipt(arg0 context.Context, arg1 cid.Cid, arg2 chain0.TipSetKey) (*chain0.MessageReceipt, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetReceipt", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.MessageReceipt) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetReceipt indicates an expected call of StateGetReceipt. +func (mr *MockFullNodeMockRecorder) StateGetReceipt(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetReceipt", reflect.TypeOf((*MockFullNode)(nil).StateGetReceipt), arg0, arg1, arg2) +} + +// StateListActors mocks base method. +func (m *MockFullNode) StateListActors(arg0 context.Context, arg1 chain0.TipSetKey) ([]address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateListActors", arg0, arg1) + ret0, _ := ret[0].([]address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateListActors indicates an expected call of StateListActors. +func (mr *MockFullNodeMockRecorder) StateListActors(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateListActors", reflect.TypeOf((*MockFullNode)(nil).StateListActors), arg0, arg1) +} + +// StateListMiners mocks base method. +func (m *MockFullNode) StateListMiners(arg0 context.Context, arg1 chain0.TipSetKey) ([]address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateListMiners", arg0, arg1) + ret0, _ := ret[0].([]address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateListMiners indicates an expected call of StateListMiners. +func (mr *MockFullNodeMockRecorder) StateListMiners(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateListMiners", reflect.TypeOf((*MockFullNode)(nil).StateListMiners), arg0, arg1) +} + +// StateLookupID mocks base method. +func (m *MockFullNode) StateLookupID(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateLookupID", arg0, arg1, arg2) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateLookupID indicates an expected call of StateLookupID. +func (mr *MockFullNodeMockRecorder) StateLookupID(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateLookupID", reflect.TypeOf((*MockFullNode)(nil).StateLookupID), arg0, arg1, arg2) +} + +// StateMarketBalance mocks base method. +func (m *MockFullNode) StateMarketBalance(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (chain.MarketBalance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMarketBalance", arg0, arg1, arg2) + ret0, _ := ret[0].(chain.MarketBalance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMarketBalance indicates an expected call of StateMarketBalance. +func (mr *MockFullNodeMockRecorder) StateMarketBalance(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMarketBalance", reflect.TypeOf((*MockFullNode)(nil).StateMarketBalance), arg0, arg1, arg2) +} + +// StateMarketDeals mocks base method. +func (m *MockFullNode) StateMarketDeals(arg0 context.Context, arg1 chain0.TipSetKey) (map[string]chain.MarketDeal, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMarketDeals", arg0, arg1) + ret0, _ := ret[0].(map[string]chain.MarketDeal) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMarketDeals indicates an expected call of StateMarketDeals. +func (mr *MockFullNodeMockRecorder) StateMarketDeals(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMarketDeals", reflect.TypeOf((*MockFullNode)(nil).StateMarketDeals), arg0, arg1) +} + +// StateMarketParticipants mocks base method. +func (m *MockFullNode) StateMarketParticipants(arg0 context.Context, arg1 chain0.TipSetKey) (map[string]chain.MarketBalance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMarketParticipants", arg0, arg1) + ret0, _ := ret[0].(map[string]chain.MarketBalance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMarketParticipants indicates an expected call of StateMarketParticipants. +func (mr *MockFullNodeMockRecorder) StateMarketParticipants(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMarketParticipants", reflect.TypeOf((*MockFullNode)(nil).StateMarketParticipants), arg0, arg1) +} + +// StateMarketStorageDeal mocks base method. +func (m *MockFullNode) StateMarketStorageDeal(arg0 context.Context, arg1 abi.DealID, arg2 chain0.TipSetKey) (*chain.MarketDeal, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMarketStorageDeal", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain.MarketDeal) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMarketStorageDeal indicates an expected call of StateMarketStorageDeal. +func (mr *MockFullNodeMockRecorder) StateMarketStorageDeal(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMarketStorageDeal", reflect.TypeOf((*MockFullNode)(nil).StateMarketStorageDeal), arg0, arg1, arg2) +} + +// StateMinerActiveSectors mocks base method. +func (m *MockFullNode) StateMinerActiveSectors(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) ([]*miner0.SectorOnChainInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerActiveSectors", arg0, arg1, arg2) + ret0, _ := ret[0].([]*miner0.SectorOnChainInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerActiveSectors indicates an expected call of StateMinerActiveSectors. +func (mr *MockFullNodeMockRecorder) StateMinerActiveSectors(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerActiveSectors", reflect.TypeOf((*MockFullNode)(nil).StateMinerActiveSectors), arg0, arg1, arg2) +} + +// StateMinerAvailableBalance mocks base method. +func (m *MockFullNode) StateMinerAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerAvailableBalance", arg0, arg1, arg2) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerAvailableBalance indicates an expected call of StateMinerAvailableBalance. +func (mr *MockFullNodeMockRecorder) StateMinerAvailableBalance(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerAvailableBalance", reflect.TypeOf((*MockFullNode)(nil).StateMinerAvailableBalance), arg0, arg1, arg2) +} + +// StateMinerDeadlines mocks base method. +func (m *MockFullNode) StateMinerDeadlines(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) ([]chain.Deadline, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerDeadlines", arg0, arg1, arg2) + ret0, _ := ret[0].([]chain.Deadline) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerDeadlines indicates an expected call of StateMinerDeadlines. +func (mr *MockFullNodeMockRecorder) StateMinerDeadlines(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerDeadlines", reflect.TypeOf((*MockFullNode)(nil).StateMinerDeadlines), arg0, arg1, arg2) +} + +// StateMinerFaults mocks base method. +func (m *MockFullNode) StateMinerFaults(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (bitfield.BitField, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerFaults", arg0, arg1, arg2) + ret0, _ := ret[0].(bitfield.BitField) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerFaults indicates an expected call of StateMinerFaults. +func (mr *MockFullNodeMockRecorder) StateMinerFaults(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerFaults", reflect.TypeOf((*MockFullNode)(nil).StateMinerFaults), arg0, arg1, arg2) +} + +// StateMinerInfo mocks base method. +func (m *MockFullNode) StateMinerInfo(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (miner0.MinerInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerInfo", arg0, arg1, arg2) + ret0, _ := ret[0].(miner0.MinerInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerInfo indicates an expected call of StateMinerInfo. +func (mr *MockFullNodeMockRecorder) StateMinerInfo(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerInfo", reflect.TypeOf((*MockFullNode)(nil).StateMinerInfo), arg0, arg1, arg2) +} + +// StateMinerInitialPledgeCollateral mocks base method. +func (m *MockFullNode) StateMinerInitialPledgeCollateral(arg0 context.Context, arg1 address.Address, arg2 miner.SectorPreCommitInfo, arg3 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerInitialPledgeCollateral", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerInitialPledgeCollateral indicates an expected call of StateMinerInitialPledgeCollateral. +func (mr *MockFullNodeMockRecorder) StateMinerInitialPledgeCollateral(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerInitialPledgeCollateral", reflect.TypeOf((*MockFullNode)(nil).StateMinerInitialPledgeCollateral), arg0, arg1, arg2, arg3) +} + +// StateMinerPartitions mocks base method. +func (m *MockFullNode) StateMinerPartitions(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 chain0.TipSetKey) ([]chain.Partition, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerPartitions", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].([]chain.Partition) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerPartitions indicates an expected call of StateMinerPartitions. +func (mr *MockFullNodeMockRecorder) StateMinerPartitions(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerPartitions", reflect.TypeOf((*MockFullNode)(nil).StateMinerPartitions), arg0, arg1, arg2, arg3) +} + +// StateMinerPower mocks base method. +func (m *MockFullNode) StateMinerPower(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (*chain.MinerPower, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerPower", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain.MinerPower) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerPower indicates an expected call of StateMinerPower. +func (mr *MockFullNodeMockRecorder) StateMinerPower(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerPower", reflect.TypeOf((*MockFullNode)(nil).StateMinerPower), arg0, arg1, arg2) +} + +// StateMinerPreCommitDepositForPower mocks base method. +func (m *MockFullNode) StateMinerPreCommitDepositForPower(arg0 context.Context, arg1 address.Address, arg2 miner.SectorPreCommitInfo, arg3 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerPreCommitDepositForPower", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerPreCommitDepositForPower indicates an expected call of StateMinerPreCommitDepositForPower. +func (mr *MockFullNodeMockRecorder) StateMinerPreCommitDepositForPower(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerPreCommitDepositForPower", reflect.TypeOf((*MockFullNode)(nil).StateMinerPreCommitDepositForPower), arg0, arg1, arg2, arg3) +} + +// StateMinerProvingDeadline mocks base method. +func (m *MockFullNode) StateMinerProvingDeadline(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (*dline.Info, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerProvingDeadline", arg0, arg1, arg2) + ret0, _ := ret[0].(*dline.Info) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerProvingDeadline indicates an expected call of StateMinerProvingDeadline. +func (mr *MockFullNodeMockRecorder) StateMinerProvingDeadline(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerProvingDeadline", reflect.TypeOf((*MockFullNode)(nil).StateMinerProvingDeadline), arg0, arg1, arg2) +} + +// StateMinerRecoveries mocks base method. +func (m *MockFullNode) StateMinerRecoveries(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (bitfield.BitField, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerRecoveries", arg0, arg1, arg2) + ret0, _ := ret[0].(bitfield.BitField) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerRecoveries indicates an expected call of StateMinerRecoveries. +func (mr *MockFullNodeMockRecorder) StateMinerRecoveries(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerRecoveries", reflect.TypeOf((*MockFullNode)(nil).StateMinerRecoveries), arg0, arg1, arg2) +} + +// StateMinerSectorAllocated mocks base method. +func (m *MockFullNode) StateMinerSectorAllocated(arg0 context.Context, arg1 address.Address, arg2 abi.SectorNumber, arg3 chain0.TipSetKey) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerSectorAllocated", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerSectorAllocated indicates an expected call of StateMinerSectorAllocated. +func (mr *MockFullNodeMockRecorder) StateMinerSectorAllocated(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerSectorAllocated", reflect.TypeOf((*MockFullNode)(nil).StateMinerSectorAllocated), arg0, arg1, arg2, arg3) +} + +// StateMinerSectorCount mocks base method. +func (m *MockFullNode) StateMinerSectorCount(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (chain.MinerSectors, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerSectorCount", arg0, arg1, arg2) + ret0, _ := ret[0].(chain.MinerSectors) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerSectorCount indicates an expected call of StateMinerSectorCount. +func (mr *MockFullNodeMockRecorder) StateMinerSectorCount(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerSectorCount", reflect.TypeOf((*MockFullNode)(nil).StateMinerSectorCount), arg0, arg1, arg2) +} + +// StateMinerSectorSize mocks base method. +func (m *MockFullNode) StateMinerSectorSize(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (abi.SectorSize, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerSectorSize", arg0, arg1, arg2) + ret0, _ := ret[0].(abi.SectorSize) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerSectorSize indicates an expected call of StateMinerSectorSize. +func (mr *MockFullNodeMockRecorder) StateMinerSectorSize(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerSectorSize", reflect.TypeOf((*MockFullNode)(nil).StateMinerSectorSize), arg0, arg1, arg2) +} + +// StateMinerSectors mocks base method. +func (m *MockFullNode) StateMinerSectors(arg0 context.Context, arg1 address.Address, arg2 *bitfield.BitField, arg3 chain0.TipSetKey) ([]*miner0.SectorOnChainInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerSectors", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].([]*miner0.SectorOnChainInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerSectors indicates an expected call of StateMinerSectors. +func (mr *MockFullNodeMockRecorder) StateMinerSectors(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerSectors", reflect.TypeOf((*MockFullNode)(nil).StateMinerSectors), arg0, arg1, arg2, arg3) +} + +// StateMinerWorkerAddress mocks base method. +func (m *MockFullNode) StateMinerWorkerAddress(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerWorkerAddress", arg0, arg1, arg2) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerWorkerAddress indicates an expected call of StateMinerWorkerAddress. +func (mr *MockFullNodeMockRecorder) StateMinerWorkerAddress(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerWorkerAddress", reflect.TypeOf((*MockFullNode)(nil).StateMinerWorkerAddress), arg0, arg1, arg2) +} + +// StateNetworkName mocks base method. +func (m *MockFullNode) StateNetworkName(arg0 context.Context) (chain.NetworkName, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateNetworkName", arg0) + ret0, _ := ret[0].(chain.NetworkName) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateNetworkName indicates an expected call of StateNetworkName. +func (mr *MockFullNodeMockRecorder) StateNetworkName(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateNetworkName", reflect.TypeOf((*MockFullNode)(nil).StateNetworkName), arg0) +} + +// StateNetworkVersion mocks base method. +func (m *MockFullNode) StateNetworkVersion(arg0 context.Context, arg1 chain0.TipSetKey) (network.Version, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateNetworkVersion", arg0, arg1) + ret0, _ := ret[0].(network.Version) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateNetworkVersion indicates an expected call of StateNetworkVersion. +func (mr *MockFullNodeMockRecorder) StateNetworkVersion(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateNetworkVersion", reflect.TypeOf((*MockFullNode)(nil).StateNetworkVersion), arg0, arg1) +} + +// StateSearchMsg mocks base method. +func (m *MockFullNode) StateSearchMsg(arg0 context.Context, arg1 cid.Cid) (*chain.MsgLookup, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateSearchMsg", arg0, arg1) + ret0, _ := ret[0].(*chain.MsgLookup) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateSearchMsg indicates an expected call of StateSearchMsg. +func (mr *MockFullNodeMockRecorder) StateSearchMsg(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSearchMsg", reflect.TypeOf((*MockFullNode)(nil).StateSearchMsg), arg0, arg1) +} + +// StateSearchMsgLimited mocks base method. +func (m *MockFullNode) StateSearchMsgLimited(arg0 context.Context, arg1 cid.Cid, arg2 abi.ChainEpoch) (*chain.MsgLookup, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateSearchMsgLimited", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain.MsgLookup) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateSearchMsgLimited indicates an expected call of StateSearchMsgLimited. +func (mr *MockFullNodeMockRecorder) StateSearchMsgLimited(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSearchMsgLimited", reflect.TypeOf((*MockFullNode)(nil).StateSearchMsgLimited), arg0, arg1, arg2) +} + +// StateSectorExpiration mocks base method. +func (m *MockFullNode) StateSectorExpiration(arg0 context.Context, arg1 address.Address, arg2 abi.SectorNumber, arg3 chain0.TipSetKey) (*miner0.SectorExpiration, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateSectorExpiration", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*miner0.SectorExpiration) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateSectorExpiration indicates an expected call of StateSectorExpiration. +func (mr *MockFullNodeMockRecorder) StateSectorExpiration(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSectorExpiration", reflect.TypeOf((*MockFullNode)(nil).StateSectorExpiration), arg0, arg1, arg2, arg3) +} + +// StateSectorGetInfo mocks base method. +func (m *MockFullNode) StateSectorGetInfo(arg0 context.Context, arg1 address.Address, arg2 abi.SectorNumber, arg3 chain0.TipSetKey) (*miner0.SectorOnChainInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateSectorGetInfo", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*miner0.SectorOnChainInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateSectorGetInfo indicates an expected call of StateSectorGetInfo. +func (mr *MockFullNodeMockRecorder) StateSectorGetInfo(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSectorGetInfo", reflect.TypeOf((*MockFullNode)(nil).StateSectorGetInfo), arg0, arg1, arg2, arg3) +} + +// StateSectorPartition mocks base method. +func (m *MockFullNode) StateSectorPartition(arg0 context.Context, arg1 address.Address, arg2 abi.SectorNumber, arg3 chain0.TipSetKey) (*miner0.SectorLocation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateSectorPartition", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*miner0.SectorLocation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateSectorPartition indicates an expected call of StateSectorPartition. +func (mr *MockFullNodeMockRecorder) StateSectorPartition(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSectorPartition", reflect.TypeOf((*MockFullNode)(nil).StateSectorPartition), arg0, arg1, arg2, arg3) +} + +// StateSectorPreCommitInfo mocks base method. +func (m *MockFullNode) StateSectorPreCommitInfo(arg0 context.Context, arg1 address.Address, arg2 abi.SectorNumber, arg3 chain0.TipSetKey) (miner0.SectorPreCommitOnChainInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateSectorPreCommitInfo", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(miner0.SectorPreCommitOnChainInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateSectorPreCommitInfo indicates an expected call of StateSectorPreCommitInfo. +func (mr *MockFullNodeMockRecorder) StateSectorPreCommitInfo(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSectorPreCommitInfo", reflect.TypeOf((*MockFullNode)(nil).StateSectorPreCommitInfo), arg0, arg1, arg2, arg3) +} + +// StateVMCirculatingSupplyInternal mocks base method. +func (m *MockFullNode) StateVMCirculatingSupplyInternal(arg0 context.Context, arg1 chain0.TipSetKey) (chain0.CirculatingSupply, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateVMCirculatingSupplyInternal", arg0, arg1) + ret0, _ := ret[0].(chain0.CirculatingSupply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateVMCirculatingSupplyInternal indicates an expected call of StateVMCirculatingSupplyInternal. +func (mr *MockFullNodeMockRecorder) StateVMCirculatingSupplyInternal(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateVMCirculatingSupplyInternal", reflect.TypeOf((*MockFullNode)(nil).StateVMCirculatingSupplyInternal), arg0, arg1) +} + +// StateVerifiedClientStatus mocks base method. +func (m *MockFullNode) StateVerifiedClientStatus(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (*big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateVerifiedClientStatus", arg0, arg1, arg2) + ret0, _ := ret[0].(*big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateVerifiedClientStatus indicates an expected call of StateVerifiedClientStatus. +func (mr *MockFullNodeMockRecorder) StateVerifiedClientStatus(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateVerifiedClientStatus", reflect.TypeOf((*MockFullNode)(nil).StateVerifiedClientStatus), arg0, arg1, arg2) +} + +// StateVerifiedRegistryRootKey mocks base method. +func (m *MockFullNode) StateVerifiedRegistryRootKey(arg0 context.Context, arg1 chain0.TipSetKey) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateVerifiedRegistryRootKey", arg0, arg1) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateVerifiedRegistryRootKey indicates an expected call of StateVerifiedRegistryRootKey. +func (mr *MockFullNodeMockRecorder) StateVerifiedRegistryRootKey(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateVerifiedRegistryRootKey", reflect.TypeOf((*MockFullNode)(nil).StateVerifiedRegistryRootKey), arg0, arg1) +} + +// StateVerifierStatus mocks base method. +func (m *MockFullNode) StateVerifierStatus(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (*big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateVerifierStatus", arg0, arg1, arg2) + ret0, _ := ret[0].(*big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateVerifierStatus indicates an expected call of StateVerifierStatus. +func (mr *MockFullNodeMockRecorder) StateVerifierStatus(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateVerifierStatus", reflect.TypeOf((*MockFullNode)(nil).StateVerifierStatus), arg0, arg1, arg2) +} + +// StateWaitMsg mocks base method. +func (m *MockFullNode) StateWaitMsg(arg0 context.Context, arg1 cid.Cid, arg2 uint64) (*chain.MsgLookup, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateWaitMsg", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain.MsgLookup) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateWaitMsg indicates an expected call of StateWaitMsg. +func (mr *MockFullNodeMockRecorder) StateWaitMsg(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateWaitMsg", reflect.TypeOf((*MockFullNode)(nil).StateWaitMsg), arg0, arg1, arg2) +} + +// StateWaitMsgLimited mocks base method. +func (m *MockFullNode) StateWaitMsgLimited(arg0 context.Context, arg1 cid.Cid, arg2 uint64, arg3 abi.ChainEpoch) (*chain.MsgLookup, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateWaitMsgLimited", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*chain.MsgLookup) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateWaitMsgLimited indicates an expected call of StateWaitMsgLimited. +func (mr *MockFullNodeMockRecorder) StateWaitMsgLimited(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateWaitMsgLimited", reflect.TypeOf((*MockFullNode)(nil).StateWaitMsgLimited), arg0, arg1, arg2, arg3) +} + +// SyncState mocks base method. +func (m *MockFullNode) SyncState(arg0 context.Context) (*chain.SyncState, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SyncState", arg0) + ret0, _ := ret[0].(*chain.SyncState) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SyncState indicates an expected call of SyncState. +func (mr *MockFullNodeMockRecorder) SyncState(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SyncState", reflect.TypeOf((*MockFullNode)(nil).SyncState), arg0) +} + +// SyncSubmitBlock mocks base method. +func (m *MockFullNode) SyncSubmitBlock(arg0 context.Context, arg1 *chain0.BlockMsg) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SyncSubmitBlock", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// SyncSubmitBlock indicates an expected call of SyncSubmitBlock. +func (mr *MockFullNodeMockRecorder) SyncSubmitBlock(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SyncSubmitBlock", reflect.TypeOf((*MockFullNode)(nil).SyncSubmitBlock), arg0, arg1) +} + +// SyncerTracker mocks base method. +func (m *MockFullNode) SyncerTracker(arg0 context.Context) *chain.TargetTracker { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SyncerTracker", arg0) + ret0, _ := ret[0].(*chain.TargetTracker) + return ret0 +} + +// SyncerTracker indicates an expected call of SyncerTracker. +func (mr *MockFullNodeMockRecorder) SyncerTracker(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SyncerTracker", reflect.TypeOf((*MockFullNode)(nil).SyncerTracker), arg0) +} + +// UnLockWallet mocks base method. +func (m *MockFullNode) UnLockWallet(arg0 context.Context, arg1 []byte) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UnLockWallet", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// UnLockWallet indicates an expected call of UnLockWallet. +func (mr *MockFullNodeMockRecorder) UnLockWallet(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnLockWallet", reflect.TypeOf((*MockFullNode)(nil).UnLockWallet), arg0, arg1) +} + +// Verify mocks base method. +func (m *MockFullNode) Verify(arg0 context.Context, arg1, arg2 string) ([]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Verify", arg0, arg1, arg2) + ret0, _ := ret[0].([]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Verify indicates an expected call of Verify. +func (mr *MockFullNodeMockRecorder) Verify(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Verify", reflect.TypeOf((*MockFullNode)(nil).Verify), arg0, arg1, arg2) +} + +// VerifyEntry mocks base method. +func (m *MockFullNode) VerifyEntry(arg0, arg1 *chain0.BeaconEntry, arg2 abi.ChainEpoch) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "VerifyEntry", arg0, arg1, arg2) + ret0, _ := ret[0].(bool) + return ret0 +} + +// VerifyEntry indicates an expected call of VerifyEntry. +func (mr *MockFullNodeMockRecorder) VerifyEntry(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyEntry", reflect.TypeOf((*MockFullNode)(nil).VerifyEntry), arg0, arg1, arg2) +} + +// Version mocks base method. +func (m *MockFullNode) Version(arg0 context.Context) (chain.Version, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Version", arg0) + ret0, _ := ret[0].(chain.Version) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Version indicates an expected call of Version. +func (mr *MockFullNodeMockRecorder) Version(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Version", reflect.TypeOf((*MockFullNode)(nil).Version), arg0) +} + +// WalletAddresses mocks base method. +func (m *MockFullNode) WalletAddresses(arg0 context.Context) []address.Address { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletAddresses", arg0) + ret0, _ := ret[0].([]address.Address) + return ret0 +} + +// WalletAddresses indicates an expected call of WalletAddresses. +func (mr *MockFullNodeMockRecorder) WalletAddresses(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletAddresses", reflect.TypeOf((*MockFullNode)(nil).WalletAddresses), arg0) +} + +// WalletBalance mocks base method. +func (m *MockFullNode) WalletBalance(arg0 context.Context, arg1 address.Address) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletBalance", arg0, arg1) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletBalance indicates an expected call of WalletBalance. +func (mr *MockFullNodeMockRecorder) WalletBalance(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletBalance", reflect.TypeOf((*MockFullNode)(nil).WalletBalance), arg0, arg1) +} + +// WalletDefaultAddress mocks base method. +func (m *MockFullNode) WalletDefaultAddress(arg0 context.Context) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletDefaultAddress", arg0) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletDefaultAddress indicates an expected call of WalletDefaultAddress. +func (mr *MockFullNodeMockRecorder) WalletDefaultAddress(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletDefaultAddress", reflect.TypeOf((*MockFullNode)(nil).WalletDefaultAddress), arg0) +} + +// WalletExport mocks base method. +func (m *MockFullNode) WalletExport(arg0 address.Address, arg1 string) (*wallet.KeyInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletExport", arg0, arg1) + ret0, _ := ret[0].(*wallet.KeyInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletExport indicates an expected call of WalletExport. +func (mr *MockFullNodeMockRecorder) WalletExport(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletExport", reflect.TypeOf((*MockFullNode)(nil).WalletExport), arg0, arg1) +} + +// WalletHas mocks base method. +func (m *MockFullNode) WalletHas(arg0 context.Context, arg1 address.Address) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletHas", arg0, arg1) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletHas indicates an expected call of WalletHas. +func (mr *MockFullNodeMockRecorder) WalletHas(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletHas", reflect.TypeOf((*MockFullNode)(nil).WalletHas), arg0, arg1) +} + +// WalletImport mocks base method. +func (m *MockFullNode) WalletImport(arg0 *wallet.KeyInfo) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletImport", arg0) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletImport indicates an expected call of WalletImport. +func (mr *MockFullNodeMockRecorder) WalletImport(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletImport", reflect.TypeOf((*MockFullNode)(nil).WalletImport), arg0) +} + +// WalletNewAddress mocks base method. +func (m *MockFullNode) WalletNewAddress(arg0 byte) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletNewAddress", arg0) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletNewAddress indicates an expected call of WalletNewAddress. +func (mr *MockFullNodeMockRecorder) WalletNewAddress(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletNewAddress", reflect.TypeOf((*MockFullNode)(nil).WalletNewAddress), arg0) +} + +// WalletSetDefault mocks base method. +func (m *MockFullNode) WalletSetDefault(arg0 context.Context, arg1 address.Address) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletSetDefault", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// WalletSetDefault indicates an expected call of WalletSetDefault. +func (mr *MockFullNodeMockRecorder) WalletSetDefault(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletSetDefault", reflect.TypeOf((*MockFullNode)(nil).WalletSetDefault), arg0, arg1) +} + +// WalletSign mocks base method. +func (m *MockFullNode) WalletSign(arg0 context.Context, arg1 address.Address, arg2 []byte, arg3 wallet.MsgMeta) (*crypto.Signature, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletSign", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*crypto.Signature) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletSign indicates an expected call of WalletSign. +func (mr *MockFullNodeMockRecorder) WalletSign(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletSign", reflect.TypeOf((*MockFullNode)(nil).WalletSign), arg0, arg1, arg2, arg3) +} + +// WalletSignMessage mocks base method. +func (m *MockFullNode) WalletSignMessage(arg0 context.Context, arg1 address.Address, arg2 *chain0.Message) (*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletSignMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletSignMessage indicates an expected call of WalletSignMessage. +func (mr *MockFullNodeMockRecorder) WalletSignMessage(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletSignMessage", reflect.TypeOf((*MockFullNode)(nil).WalletSignMessage), arg0, arg1, arg2) +} + +// WalletState mocks base method. +func (m *MockFullNode) WalletState(arg0 context.Context) int { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletState", arg0) + ret0, _ := ret[0].(int) + return ret0 +} + +// WalletState indicates an expected call of WalletState. +func (mr *MockFullNodeMockRecorder) WalletState(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletState", reflect.TypeOf((*MockFullNode)(nil).WalletState), arg0) +} diff --git a/venus-shared/api/chain/v0/mpool.go b/venus-shared/api/chain/v0/mpool.go new file mode 100644 index 0000000000..eb867dcc3f --- /dev/null +++ b/venus-shared/api/chain/v0/mpool.go @@ -0,0 +1,38 @@ +package v0 + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/messagepool" +) + +type IMessagePool interface { + MpoolDeleteByAdress(ctx context.Context, addr address.Address) error //perm:admin + MpoolPublishByAddr(context.Context, address.Address) error //perm:admin + MpoolPublishMessage(ctx context.Context, smsg *chain.SignedMessage) error //perm:admin + MpoolPush(ctx context.Context, smsg *chain.SignedMessage) (cid.Cid, error) //perm:write + MpoolGetConfig(context.Context) (*messagepool.MpoolConfig, error) //perm:read + MpoolSetConfig(ctx context.Context, cfg *messagepool.MpoolConfig) error //perm:admin + MpoolSelect(context.Context, chain.TipSetKey, float64) ([]*chain.SignedMessage, error) //perm:read + MpoolSelects(context.Context, chain.TipSetKey, []float64) ([][]*chain.SignedMessage, error) //perm:read + MpoolPending(ctx context.Context, tsk chain.TipSetKey) ([]*chain.SignedMessage, error) //perm:read + MpoolClear(ctx context.Context, local bool) error //perm:write + MpoolPushUntrusted(ctx context.Context, smsg *chain.SignedMessage) (cid.Cid, error) //perm:write + MpoolPushMessage(ctx context.Context, msg *chain.Message, spec *chain2.MessageSendSpec) (*chain.SignedMessage, error) //perm:sign + MpoolBatchPush(ctx context.Context, smsgs []*chain.SignedMessage) ([]cid.Cid, error) //perm:write + MpoolBatchPushUntrusted(ctx context.Context, smsgs []*chain.SignedMessage) ([]cid.Cid, error) //perm:write + MpoolBatchPushMessage(ctx context.Context, msgs []*chain.Message, spec *chain2.MessageSendSpec) ([]*chain.SignedMessage, error) //perm:sign + MpoolGetNonce(ctx context.Context, addr address.Address) (uint64, error) //perm:read + MpoolSub(ctx context.Context) (<-chan messagepool.MpoolUpdate, error) //perm:read + GasEstimateMessageGas(ctx context.Context, msg *chain.Message, spec *chain2.MessageSendSpec, tsk chain.TipSetKey) (*chain.Message, error) //perm:read + GasBatchEstimateMessageGas(ctx context.Context, estimateMessages []*chain2.EstimateMessage, fromNonce uint64, tsk chain.TipSetKey) ([]*chain2.EstimateResult, error) //perm:read + GasEstimateFeeCap(ctx context.Context, msg *chain.Message, maxqueueblks int64, tsk chain.TipSetKey) (big.Int, error) //perm:read + GasEstimateGasPremium(ctx context.Context, nblocksincl uint64, sender address.Address, gaslimit int64, tsk chain.TipSetKey) (big.Int, error) //perm:read + GasEstimateGasLimit(ctx context.Context, msgIn *chain.Message, tsk chain.TipSetKey) (int64, error) //perm:read +} diff --git a/venus-shared/api/chain/v0/multisig.go b/venus-shared/api/chain/v0/multisig.go new file mode 100644 index 0000000000..fbb98798a3 --- /dev/null +++ b/venus-shared/api/chain/v0/multisig.go @@ -0,0 +1,31 @@ +package v0 + +import ( + "context" + + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IMultiSig interface { + // MsigCreate creates a multisig wallet + // It takes the following params: , , + //, , + MsigCreate(context.Context, uint64, []address.Address, abi.ChainEpoch, chain.BigInt, address.Address, chain.BigInt) (cid.Cid, error) //perm:sign + MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt chain.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) //perm:sign + MsigAddPropose(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (cid.Cid, error) //perm:sign + MsigAddApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (cid.Cid, error) //perm:sign + MsigAddCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (cid.Cid, error) //perm:sign + MsigSwapPropose(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) //perm:sign + MsigSwapApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) //perm:sign + MsigSwapCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (cid.Cid, error) //perm:sign + MsigApprove(ctx context.Context, msig address.Address, txID uint64, src address.Address) (cid.Cid, error) //perm:sign + MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt chain.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) //perm:sign + MsigCancel(ctx context.Context, msig address.Address, txID uint64, to address.Address, amt chain.BigInt, src address.Address, method uint64, params []byte) (cid.Cid, error) //perm:sign + MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (cid.Cid, error) //perm:sign + MsigGetVested(ctx context.Context, addr address.Address, start chain.TipSetKey, end chain.TipSetKey) (chain.BigInt, error) //perm:read +} diff --git a/venus-shared/api/chain/v0/network.go b/venus-shared/api/chain/v0/network.go new file mode 100644 index 0000000000..64c166c942 --- /dev/null +++ b/venus-shared/api/chain/v0/network.go @@ -0,0 +1,26 @@ +package v0 + +import ( + "context" + + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p/net" +) + +type INetwork interface { + NetworkGetBandwidthStats(ctx context.Context) metrics.Stats //perm:admin + NetworkGetPeerAddresses(ctx context.Context) []ma.Multiaddr //perm:admin + NetworkGetPeerID(ctx context.Context) peer.ID //perm:admin + NetworkFindProvidersAsync(ctx context.Context, key cid.Cid, count int) <-chan peer.AddrInfo //perm:read + NetworkGetClosestPeers(ctx context.Context, key string) ([]peer.ID, error) //perm:read + NetworkFindPeer(ctx context.Context, peerID peer.ID) (peer.AddrInfo, error) //perm:read + NetworkConnect(ctx context.Context, addrs []string) (<-chan net.ConnectionResult, error) //perm:read + NetworkPeers(ctx context.Context, verbose, latency, streams bool) (*net.SwarmConnInfos, error) //perm:read + Version(context.Context) (chain2.Version, error) //perm:read + NetAddrsListen(context.Context) (peer.AddrInfo, error) //perm:read +} diff --git a/venus-shared/api/chain/v0/paych.go b/venus-shared/api/chain/v0/paych.go new file mode 100644 index 0000000000..062ca411c9 --- /dev/null +++ b/venus-shared/api/chain/v0/paych.go @@ -0,0 +1,83 @@ +package v0 + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/paych" +) + +type IPaychan interface { + // PaychGet creates a payment channel to a provider with a amount of FIL + // @from: the payment channel sender + // @to: the payment channel recipient + // @amt: the deposits funds in the payment channel + PaychGet(ctx context.Context, from, to address.Address, amt big.Int) (*paych.ChannelInfo, error) //perm:sign + // PaychAvailableFunds get the status of an outbound payment channel + // @pch: payment channel address + PaychAvailableFunds(ctx context.Context, ch address.Address) (*chain2.ChannelAvailableFunds, error) //perm:sign + // PaychAvailableFundsByFromTo get the status of an outbound payment channel + // @from: the payment channel sender + // @to: he payment channel recipient + PaychAvailableFundsByFromTo(ctx context.Context, from, to address.Address) (*chain2.ChannelAvailableFunds, error) //perm:sign + // PaychGetWaitReady waits until the create channel / add funds message with the sentinel + // @sentinel: given message CID arrives. + // @ch: the returned channel address can safely be used against the Manager methods. + PaychGetWaitReady(ctx context.Context, sentinel cid.Cid) (address.Address, error) //perm:sign + // PaychAllocateLane Allocate late creates a lane within a payment channel so that calls to + // CreatePaymentVoucher will automatically make vouchers only for the difference in total + PaychAllocateLane(ctx context.Context, ch address.Address) (uint64, error) //perm:sign + // PaychNewPayment aggregate vouchers into a new lane + // @from: the payment channel sender + // @to: the payment channel recipient + // @vouchers: the outstanding (non-redeemed) vouchers + PaychNewPayment(ctx context.Context, from, to address.Address, vouchers []paych.VoucherSpec) (*paych.PaymentInfo, error) //perm:sign + // PaychList list the addresses of all channels that have been created + PaychList(ctx context.Context) ([]address.Address, error) //perm:read + // PaychStatus get the payment channel status + // @pch: payment channel address + PaychStatus(ctx context.Context, pch address.Address) (*paych.Status, error) //perm:read + // PaychSettle update payment channel status to settle + // After a settlement period (currently 12 hours) either party to the payment channel can call collect on chain + // @pch: payment channel address + PaychSettle(ctx context.Context, addr address.Address) (cid.Cid, error) //perm:sign + // PaychCollect update payment channel status to collect + // Collect sends the value of submitted vouchers to the channel recipient (the provider), + // and refunds the remaining channel balance to the channel creator (the client). + // @pch: payment channel address + PaychCollect(ctx context.Context, addr address.Address) (cid.Cid, error) //perm:sign + + // PaychVoucherCheckValid checks if the given voucher is valid (is or could become spendable at some point). + // If the channel is not in the store, fetches the channel from state (and checks that + // the channel To address is owned by the wallet). + // @pch: payment channel address + // @sv: voucher + PaychVoucherCheckValid(ctx context.Context, ch address.Address, sv *paych.SignedVoucher) error //perm:read + // PaychVoucherCheckSpendable checks if the given voucher is currently spendable + // @pch: payment channel address + // @sv: voucher + PaychVoucherCheckSpendable(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (bool, error) //perm:read + // PaychVoucherAdd adds a voucher for an inbound channel. + // If the channel is not in the store, fetches the channel from state (and checks that + // the channel To address is owned by the wallet). + PaychVoucherAdd(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, proof []byte, minDelta big.Int) (big.Int, error) //perm:write + // PaychVoucherCreate creates a new signed voucher on the given payment channel + // with the given lane and amount. The value passed in is exactly the value + // that will be used to create the voucher, so if previous vouchers exist, the + // actual additional value of this voucher will only be the difference between + // the two. + // If there are insufficient funds in the channel to create the voucher, + // returns a nil voucher and the shortfall. + PaychVoucherCreate(ctx context.Context, pch address.Address, amt big.Int, lane uint64) (*paych.VoucherCreateResult, error) //perm:sign + // PaychVoucherList list vouchers in payment channel + // @pch: payment channel address + PaychVoucherList(ctx context.Context, pch address.Address) ([]*paych.SignedVoucher, error) //perm:write + // PaychVoucherSubmit Submit voucher to chain to update payment channel state + // @pch: payment channel address + // @sv: voucher in payment channel + PaychVoucherSubmit(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (cid.Cid, error) //perm:sign +} diff --git a/venus-shared/api/chain/v0/proxy_gen.go b/venus-shared/api/chain/v0/proxy_gen.go new file mode 100644 index 0000000000..a5f38e9d93 --- /dev/null +++ b/venus-shared/api/chain/v0/proxy_gen.go @@ -0,0 +1,1081 @@ +// Code generated by github.com/filecoin-project/tools/gen/api. DO NOT EDIT. + +package v0 + +import ( + "context" + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-jsonrpc/auth" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/dline" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p/net" + "github.com/filecoin-project/venus/venus-shared/messagepool" + "github.com/filecoin-project/venus/venus-shared/paych" + "github.com/filecoin-project/venus/venus-shared/wallet" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" + "time" +) + +type FullNodeStruct struct { + IBlockStoreStruct + IChainStruct + IMarketStruct + IMiningStruct + IMessagePoolStruct + IMultiSigStruct + INetworkStruct + IPaychanStruct + ISyncerStruct + IWalletStruct + IJwtAuthAPIStruct +} + +type IAccountStruct struct { + Internal struct { + StateAccountKey func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) `perm:"read"` + } +} + +func (s *IAccountStruct) StateAccountKey(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) { + return s.Internal.StateAccountKey(p0, p1, p2) +} + +type IActorStruct struct { + Internal struct { + ListActor func(p0 context.Context) (map[address.Address]*chain.Actor, error) `perm:"read"` + + StateGetActor func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*chain.Actor, error) `perm:"read"` + } +} + +func (s *IActorStruct) ListActor(p0 context.Context) (map[address.Address]*chain.Actor, error) { + return s.Internal.ListActor(p0) +} + +func (s *IActorStruct) StateGetActor(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*chain.Actor, error) { + return s.Internal.StateGetActor(p0, p1, p2) +} + +type IBeaconStruct struct { + Internal struct { + BeaconGetEntry func(p0 context.Context, p1 abi.ChainEpoch) (*chain.BeaconEntry, error) `perm:"read"` + } +} + +func (s *IBeaconStruct) BeaconGetEntry(p0 context.Context, p1 abi.ChainEpoch) (*chain.BeaconEntry, error) { + return s.Internal.BeaconGetEntry(p0, p1) +} + +type IBlockStoreStruct struct { + Internal struct { + ChainDeleteObj func(p0 context.Context, p1 cid.Cid) error `perm:"admin"` + + ChainHasObj func(p0 context.Context, p1 cid.Cid) (bool, error) `perm:"read"` + + ChainReadObj func(p0 context.Context, p1 cid.Cid) ([]byte, error) `perm:"read"` + + ChainStatObj func(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (chain2.ObjStat, error) `perm:"read"` + } +} + +func (s *IBlockStoreStruct) ChainDeleteObj(p0 context.Context, p1 cid.Cid) error { + return s.Internal.ChainDeleteObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainHasObj(p0 context.Context, p1 cid.Cid) (bool, error) { + return s.Internal.ChainHasObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainReadObj(p0 context.Context, p1 cid.Cid) ([]byte, error) { + return s.Internal.ChainReadObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainStatObj(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (chain2.ObjStat, error) { + return s.Internal.ChainStatObj(p0, p1, p2) +} + +type IChainStruct struct { + IAccountStruct + IActorStruct + IBeaconStruct + IMinerStateStruct + IChainInfoStruct +} + +type IChainInfoStruct struct { + Internal struct { + BlockTime func(p0 context.Context) time.Duration `perm:"read"` + + ChainExport func(p0 context.Context, p1 abi.ChainEpoch, p2 bool, p3 chain.TipSetKey) (<-chan []byte, error) `perm:"read"` + + ChainGetBlock func(p0 context.Context, p1 cid.Cid) (*chain.BlockHeader, error) `perm:"read"` + + ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*chain2.BlockMessages, error) `perm:"read"` + + ChainGetMessage func(p0 context.Context, p1 cid.Cid) (*chain.Message, error) `perm:"read"` + + ChainGetMessagesInTipset func(p0 context.Context, p1 chain.TipSetKey) ([]chain2.Message, error) `perm:"read"` + + ChainGetParentMessages func(p0 context.Context, p1 cid.Cid) ([]chain2.Message, error) `perm:"read"` + + ChainGetParentReceipts func(p0 context.Context, p1 cid.Cid) ([]*chain.MessageReceipt, error) `perm:"read"` + + ChainGetPath func(p0 context.Context, p1 chain.TipSetKey, p2 chain.TipSetKey) ([]*chain2.HeadChange, error) `perm:"read"` + + ChainGetRandomnessFromBeacon func(p0 context.Context, p1 chain.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"` + + ChainGetRandomnessFromTickets func(p0 context.Context, p1 chain.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"` + + ChainGetReceipts func(p0 context.Context, p1 cid.Cid) ([]chain.MessageReceipt, error) `perm:"read"` + + ChainGetTipSet func(p0 context.Context, p1 chain.TipSetKey) (*chain.TipSet, error) `perm:"read"` + + ChainGetTipSetByHeight func(p0 context.Context, p1 abi.ChainEpoch, p2 chain.TipSetKey) (*chain.TipSet, error) `perm:"read"` + + ChainHead func(p0 context.Context) (*chain.TipSet, error) `perm:"read"` + + ChainList func(p0 context.Context, p1 chain.TipSetKey, p2 int) ([]chain.TipSetKey, error) `perm:"read"` + + ChainNotify func(p0 context.Context) (<-chan []*chain2.HeadChange, error) `perm:"read"` + + ChainSetHead func(p0 context.Context, p1 chain.TipSetKey) error `perm:"admin"` + + GetActor func(p0 context.Context, p1 address.Address) (*chain.Actor, error) `perm:"read"` + + GetEntry func(p0 context.Context, p1 abi.ChainEpoch, p2 uint64) (*chain.BeaconEntry, error) `perm:"read"` + + GetFullBlock func(p0 context.Context, p1 cid.Cid) (*chain.FullBlock, error) `perm:"read"` + + GetParentStateRootActor func(p0 context.Context, p1 *chain.TipSet, p2 address.Address) (*chain.Actor, error) `perm:"read"` + + MessageWait func(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch, p3 abi.ChainEpoch) (*chain2.ChainMessage, error) `perm:"read"` + + ProtocolParameters func(p0 context.Context) (*chain2.ProtocolParams, error) `perm:"read"` + + ResolveToKeyAddr func(p0 context.Context, p1 address.Address, p2 *chain.TipSet) (address.Address, error) `perm:"read"` + + StateGetReceipt func(p0 context.Context, p1 cid.Cid, p2 chain.TipSetKey) (*chain.MessageReceipt, error) `perm:"read"` + + StateNetworkName func(p0 context.Context) (chain2.NetworkName, error) `perm:"read"` + + StateNetworkVersion func(p0 context.Context, p1 chain.TipSetKey) (network.Version, error) `perm:"read"` + + StateSearchMsg func(p0 context.Context, p1 cid.Cid) (*chain2.MsgLookup, error) `perm:"read"` + + StateSearchMsgLimited func(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch) (*chain2.MsgLookup, error) `perm:"read"` + + StateVerifiedRegistryRootKey func(p0 context.Context, p1 chain.TipSetKey) (address.Address, error) `perm:"read"` + + StateVerifierStatus func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*abi.StoragePower, error) `perm:"read"` + + StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64) (*chain2.MsgLookup, error) `perm:"read"` + + StateWaitMsgLimited func(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch) (*chain2.MsgLookup, error) `perm:"read"` + + VerifyEntry func(p0 *chain.BeaconEntry, p1 *chain.BeaconEntry, p2 abi.ChainEpoch) bool `perm:"read"` + } +} + +func (s *IChainInfoStruct) BlockTime(p0 context.Context) time.Duration { + return s.Internal.BlockTime(p0) +} + +func (s *IChainInfoStruct) ChainExport(p0 context.Context, p1 abi.ChainEpoch, p2 bool, p3 chain.TipSetKey) (<-chan []byte, error) { + return s.Internal.ChainExport(p0, p1, p2, p3) +} + +func (s *IChainInfoStruct) ChainGetBlock(p0 context.Context, p1 cid.Cid) (*chain.BlockHeader, error) { + return s.Internal.ChainGetBlock(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetBlockMessages(p0 context.Context, p1 cid.Cid) (*chain2.BlockMessages, error) { + return s.Internal.ChainGetBlockMessages(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetMessage(p0 context.Context, p1 cid.Cid) (*chain.Message, error) { + return s.Internal.ChainGetMessage(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetMessagesInTipset(p0 context.Context, p1 chain.TipSetKey) ([]chain2.Message, error) { + return s.Internal.ChainGetMessagesInTipset(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetParentMessages(p0 context.Context, p1 cid.Cid) ([]chain2.Message, error) { + return s.Internal.ChainGetParentMessages(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetParentReceipts(p0 context.Context, p1 cid.Cid) ([]*chain.MessageReceipt, error) { + return s.Internal.ChainGetParentReceipts(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetPath(p0 context.Context, p1 chain.TipSetKey, p2 chain.TipSetKey) ([]*chain2.HeadChange, error) { + return s.Internal.ChainGetPath(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainGetRandomnessFromBeacon(p0 context.Context, p1 chain.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) { + return s.Internal.ChainGetRandomnessFromBeacon(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) ChainGetRandomnessFromTickets(p0 context.Context, p1 chain.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) { + return s.Internal.ChainGetRandomnessFromTickets(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) ChainGetReceipts(p0 context.Context, p1 cid.Cid) ([]chain.MessageReceipt, error) { + return s.Internal.ChainGetReceipts(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetTipSet(p0 context.Context, p1 chain.TipSetKey) (*chain.TipSet, error) { + return s.Internal.ChainGetTipSet(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetTipSetByHeight(p0 context.Context, p1 abi.ChainEpoch, p2 chain.TipSetKey) (*chain.TipSet, error) { + return s.Internal.ChainGetTipSetByHeight(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainHead(p0 context.Context) (*chain.TipSet, error) { + return s.Internal.ChainHead(p0) +} + +func (s *IChainInfoStruct) ChainList(p0 context.Context, p1 chain.TipSetKey, p2 int) ([]chain.TipSetKey, error) { + return s.Internal.ChainList(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainNotify(p0 context.Context) (<-chan []*chain2.HeadChange, error) { + return s.Internal.ChainNotify(p0) +} + +func (s *IChainInfoStruct) ChainSetHead(p0 context.Context, p1 chain.TipSetKey) error { + return s.Internal.ChainSetHead(p0, p1) +} + +func (s *IChainInfoStruct) GetActor(p0 context.Context, p1 address.Address) (*chain.Actor, error) { + return s.Internal.GetActor(p0, p1) +} + +func (s *IChainInfoStruct) GetEntry(p0 context.Context, p1 abi.ChainEpoch, p2 uint64) (*chain.BeaconEntry, error) { + return s.Internal.GetEntry(p0, p1, p2) +} + +func (s *IChainInfoStruct) GetFullBlock(p0 context.Context, p1 cid.Cid) (*chain.FullBlock, error) { + return s.Internal.GetFullBlock(p0, p1) +} + +func (s *IChainInfoStruct) GetParentStateRootActor(p0 context.Context, p1 *chain.TipSet, p2 address.Address) (*chain.Actor, error) { + return s.Internal.GetParentStateRootActor(p0, p1, p2) +} + +func (s *IChainInfoStruct) MessageWait(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch, p3 abi.ChainEpoch) (*chain2.ChainMessage, error) { + return s.Internal.MessageWait(p0, p1, p2, p3) +} + +func (s *IChainInfoStruct) ProtocolParameters(p0 context.Context) (*chain2.ProtocolParams, error) { + return s.Internal.ProtocolParameters(p0) +} + +func (s *IChainInfoStruct) ResolveToKeyAddr(p0 context.Context, p1 address.Address, p2 *chain.TipSet) (address.Address, error) { + return s.Internal.ResolveToKeyAddr(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateGetReceipt(p0 context.Context, p1 cid.Cid, p2 chain.TipSetKey) (*chain.MessageReceipt, error) { + return s.Internal.StateGetReceipt(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateNetworkName(p0 context.Context) (chain2.NetworkName, error) { + return s.Internal.StateNetworkName(p0) +} + +func (s *IChainInfoStruct) StateNetworkVersion(p0 context.Context, p1 chain.TipSetKey) (network.Version, error) { + return s.Internal.StateNetworkVersion(p0, p1) +} + +func (s *IChainInfoStruct) StateSearchMsg(p0 context.Context, p1 cid.Cid) (*chain2.MsgLookup, error) { + return s.Internal.StateSearchMsg(p0, p1) +} + +func (s *IChainInfoStruct) StateSearchMsgLimited(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch) (*chain2.MsgLookup, error) { + return s.Internal.StateSearchMsgLimited(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateVerifiedRegistryRootKey(p0 context.Context, p1 chain.TipSetKey) (address.Address, error) { + return s.Internal.StateVerifiedRegistryRootKey(p0, p1) +} + +func (s *IChainInfoStruct) StateVerifierStatus(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*abi.StoragePower, error) { + return s.Internal.StateVerifierStatus(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateWaitMsg(p0 context.Context, p1 cid.Cid, p2 uint64) (*chain2.MsgLookup, error) { + return s.Internal.StateWaitMsg(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateWaitMsgLimited(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch) (*chain2.MsgLookup, error) { + return s.Internal.StateWaitMsgLimited(p0, p1, p2, p3) +} + +func (s *IChainInfoStruct) VerifyEntry(p0 *chain.BeaconEntry, p1 *chain.BeaconEntry, p2 abi.ChainEpoch) bool { + return s.Internal.VerifyEntry(p0, p1, p2) +} + +type IJwtAuthAPIStruct struct { + Internal struct { + AuthNew func(p0 context.Context, p1 []auth.Permission) ([]byte, error) `perm:"admin"` + + Verify func(p0 context.Context, p1 string, p2 string) ([]auth.Permission, error) `perm:"read"` + } +} + +func (s *IJwtAuthAPIStruct) AuthNew(p0 context.Context, p1 []auth.Permission) ([]byte, error) { + return s.Internal.AuthNew(p0, p1) +} + +func (s *IJwtAuthAPIStruct) Verify(p0 context.Context, p1 string, p2 string) ([]auth.Permission, error) { + return s.Internal.Verify(p0, p1, p2) +} + +type IMarketStruct struct { + Internal struct { + StateMarketParticipants func(p0 context.Context, p1 chain.TipSetKey) (map[string]chain2.MarketBalance, error) `perm:"read"` + } +} + +func (s *IMarketStruct) StateMarketParticipants(p0 context.Context, p1 chain.TipSetKey) (map[string]chain2.MarketBalance, error) { + return s.Internal.StateMarketParticipants(p0, p1) +} + +type IMessagePoolStruct struct { + Internal struct { + GasBatchEstimateMessageGas func(p0 context.Context, p1 []*chain2.EstimateMessage, p2 uint64, p3 chain.TipSetKey) ([]*chain2.EstimateResult, error) `perm:"read"` + + GasEstimateFeeCap func(p0 context.Context, p1 *chain.Message, p2 int64, p3 chain.TipSetKey) (big.Int, error) `perm:"read"` + + GasEstimateGasLimit func(p0 context.Context, p1 *chain.Message, p2 chain.TipSetKey) (int64, error) `perm:"read"` + + GasEstimateGasPremium func(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 chain.TipSetKey) (big.Int, error) `perm:"read"` + + GasEstimateMessageGas func(p0 context.Context, p1 *chain.Message, p2 *chain2.MessageSendSpec, p3 chain.TipSetKey) (*chain.Message, error) `perm:"read"` + + MpoolBatchPush func(p0 context.Context, p1 []*chain.SignedMessage) ([]cid.Cid, error) `perm:"write"` + + MpoolBatchPushMessage func(p0 context.Context, p1 []*chain.Message, p2 *chain2.MessageSendSpec) ([]*chain.SignedMessage, error) `perm:"sign"` + + MpoolBatchPushUntrusted func(p0 context.Context, p1 []*chain.SignedMessage) ([]cid.Cid, error) `perm:"write"` + + MpoolClear func(p0 context.Context, p1 bool) error `perm:"write"` + + MpoolDeleteByAdress func(p0 context.Context, p1 address.Address) error `perm:"admin"` + + MpoolGetConfig func(p0 context.Context) (*messagepool.MpoolConfig, error) `perm:"read"` + + MpoolGetNonce func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"read"` + + MpoolPending func(p0 context.Context, p1 chain.TipSetKey) ([]*chain.SignedMessage, error) `perm:"read"` + + MpoolPublishByAddr func(p0 context.Context, p1 address.Address) error `perm:"admin"` + + MpoolPublishMessage func(p0 context.Context, p1 *chain.SignedMessage) error `perm:"admin"` + + MpoolPush func(p0 context.Context, p1 *chain.SignedMessage) (cid.Cid, error) `perm:"write"` + + MpoolPushMessage func(p0 context.Context, p1 *chain.Message, p2 *chain2.MessageSendSpec) (*chain.SignedMessage, error) `perm:"sign"` + + MpoolPushUntrusted func(p0 context.Context, p1 *chain.SignedMessage) (cid.Cid, error) `perm:"write"` + + MpoolSelect func(p0 context.Context, p1 chain.TipSetKey, p2 float64) ([]*chain.SignedMessage, error) `perm:"read"` + + MpoolSelects func(p0 context.Context, p1 chain.TipSetKey, p2 []float64) ([][]*chain.SignedMessage, error) `perm:"read"` + + MpoolSetConfig func(p0 context.Context, p1 *messagepool.MpoolConfig) error `perm:"admin"` + + MpoolSub func(p0 context.Context) (<-chan messagepool.MpoolUpdate, error) `perm:"read"` + } +} + +func (s *IMessagePoolStruct) GasBatchEstimateMessageGas(p0 context.Context, p1 []*chain2.EstimateMessage, p2 uint64, p3 chain.TipSetKey) ([]*chain2.EstimateResult, error) { + return s.Internal.GasBatchEstimateMessageGas(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) GasEstimateFeeCap(p0 context.Context, p1 *chain.Message, p2 int64, p3 chain.TipSetKey) (big.Int, error) { + return s.Internal.GasEstimateFeeCap(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) GasEstimateGasLimit(p0 context.Context, p1 *chain.Message, p2 chain.TipSetKey) (int64, error) { + return s.Internal.GasEstimateGasLimit(p0, p1, p2) +} + +func (s *IMessagePoolStruct) GasEstimateGasPremium(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 chain.TipSetKey) (big.Int, error) { + return s.Internal.GasEstimateGasPremium(p0, p1, p2, p3, p4) +} + +func (s *IMessagePoolStruct) GasEstimateMessageGas(p0 context.Context, p1 *chain.Message, p2 *chain2.MessageSendSpec, p3 chain.TipSetKey) (*chain.Message, error) { + return s.Internal.GasEstimateMessageGas(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) MpoolBatchPush(p0 context.Context, p1 []*chain.SignedMessage) ([]cid.Cid, error) { + return s.Internal.MpoolBatchPush(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolBatchPushMessage(p0 context.Context, p1 []*chain.Message, p2 *chain2.MessageSendSpec) ([]*chain.SignedMessage, error) { + return s.Internal.MpoolBatchPushMessage(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolBatchPushUntrusted(p0 context.Context, p1 []*chain.SignedMessage) ([]cid.Cid, error) { + return s.Internal.MpoolBatchPushUntrusted(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolClear(p0 context.Context, p1 bool) error { + return s.Internal.MpoolClear(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolDeleteByAdress(p0 context.Context, p1 address.Address) error { + return s.Internal.MpoolDeleteByAdress(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolGetConfig(p0 context.Context) (*messagepool.MpoolConfig, error) { + return s.Internal.MpoolGetConfig(p0) +} + +func (s *IMessagePoolStruct) MpoolGetNonce(p0 context.Context, p1 address.Address) (uint64, error) { + return s.Internal.MpoolGetNonce(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPending(p0 context.Context, p1 chain.TipSetKey) ([]*chain.SignedMessage, error) { + return s.Internal.MpoolPending(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPublishByAddr(p0 context.Context, p1 address.Address) error { + return s.Internal.MpoolPublishByAddr(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPublishMessage(p0 context.Context, p1 *chain.SignedMessage) error { + return s.Internal.MpoolPublishMessage(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPush(p0 context.Context, p1 *chain.SignedMessage) (cid.Cid, error) { + return s.Internal.MpoolPush(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPushMessage(p0 context.Context, p1 *chain.Message, p2 *chain2.MessageSendSpec) (*chain.SignedMessage, error) { + return s.Internal.MpoolPushMessage(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolPushUntrusted(p0 context.Context, p1 *chain.SignedMessage) (cid.Cid, error) { + return s.Internal.MpoolPushUntrusted(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolSelect(p0 context.Context, p1 chain.TipSetKey, p2 float64) ([]*chain.SignedMessage, error) { + return s.Internal.MpoolSelect(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolSelects(p0 context.Context, p1 chain.TipSetKey, p2 []float64) ([][]*chain.SignedMessage, error) { + return s.Internal.MpoolSelects(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolSetConfig(p0 context.Context, p1 *messagepool.MpoolConfig) error { + return s.Internal.MpoolSetConfig(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolSub(p0 context.Context) (<-chan messagepool.MpoolUpdate, error) { + return s.Internal.MpoolSub(p0) +} + +type IMinerStateStruct struct { + Internal struct { + StateCirculatingSupply func(p0 context.Context, p1 chain.TipSetKey) (abi.TokenAmount, error) `perm:"read"` + + StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 chain.TipSetKey) (chain2.DealCollateralBounds, error) `perm:"read"` + + StateListActors func(p0 context.Context, p1 chain.TipSetKey) ([]address.Address, error) `perm:"read"` + + StateListMiners func(p0 context.Context, p1 chain.TipSetKey) ([]address.Address, error) `perm:"read"` + + StateLookupID func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) `perm:"read"` + + StateMarketBalance func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (chain2.MarketBalance, error) `perm:"read"` + + StateMarketDeals func(p0 context.Context, p1 chain.TipSetKey) (map[string]chain2.MarketDeal, error) `perm:"read"` + + StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 chain.TipSetKey) (*chain2.MarketDeal, error) `perm:"read"` + + StateMinerActiveSectors func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"` + + StateMinerAvailableBalance func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (big.Int, error) `perm:"read"` + + StateMinerDeadlines func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) ([]chain2.Deadline, error) `perm:"read"` + + StateMinerFaults func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (bitfield.BitField, error) `perm:"read"` + + StateMinerInfo func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (miner.MinerInfo, error) `perm:"read"` + + StateMinerInitialPledgeCollateral func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 chain.TipSetKey) (big.Int, error) `perm:"read"` + + StateMinerPartitions func(p0 context.Context, p1 address.Address, p2 uint64, p3 chain.TipSetKey) ([]chain2.Partition, error) `perm:"read"` + + StateMinerPower func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*chain2.MinerPower, error) `perm:"read"` + + StateMinerPreCommitDepositForPower func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 chain.TipSetKey) (big.Int, error) `perm:"read"` + + StateMinerProvingDeadline func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*dline.Info, error) `perm:"read"` + + StateMinerRecoveries func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (bitfield.BitField, error) `perm:"read"` + + StateMinerSectorAllocated func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (bool, error) `perm:"read"` + + StateMinerSectorCount func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (chain2.MinerSectors, error) `perm:"read"` + + StateMinerSectorSize func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (abi.SectorSize, error) `perm:"read"` + + StateMinerSectors func(p0 context.Context, p1 address.Address, p2 *bitfield.BitField, p3 chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"` + + StateMinerWorkerAddress func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) `perm:"read"` + + StateSectorExpiration func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorExpiration, error) `perm:"read"` + + StateSectorGetInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorOnChainInfo, error) `perm:"read"` + + StateSectorPartition func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorLocation, error) `perm:"read"` + + StateSectorPreCommitInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) `perm:"read"` + + StateVMCirculatingSupplyInternal func(p0 context.Context, p1 chain.TipSetKey) (chain.CirculatingSupply, error) `perm:"read"` + + StateVerifiedClientStatus func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*abi.StoragePower, error) `perm:"read"` + } +} + +func (s *IMinerStateStruct) StateCirculatingSupply(p0 context.Context, p1 chain.TipSetKey) (abi.TokenAmount, error) { + return s.Internal.StateCirculatingSupply(p0, p1) +} + +func (s *IMinerStateStruct) StateDealProviderCollateralBounds(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 chain.TipSetKey) (chain2.DealCollateralBounds, error) { + return s.Internal.StateDealProviderCollateralBounds(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateListActors(p0 context.Context, p1 chain.TipSetKey) ([]address.Address, error) { + return s.Internal.StateListActors(p0, p1) +} + +func (s *IMinerStateStruct) StateListMiners(p0 context.Context, p1 chain.TipSetKey) ([]address.Address, error) { + return s.Internal.StateListMiners(p0, p1) +} + +func (s *IMinerStateStruct) StateLookupID(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) { + return s.Internal.StateLookupID(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMarketBalance(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (chain2.MarketBalance, error) { + return s.Internal.StateMarketBalance(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMarketDeals(p0 context.Context, p1 chain.TipSetKey) (map[string]chain2.MarketDeal, error) { + return s.Internal.StateMarketDeals(p0, p1) +} + +func (s *IMinerStateStruct) StateMarketStorageDeal(p0 context.Context, p1 abi.DealID, p2 chain.TipSetKey) (*chain2.MarketDeal, error) { + return s.Internal.StateMarketStorageDeal(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerActiveSectors(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) { + return s.Internal.StateMinerActiveSectors(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerAvailableBalance(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerAvailableBalance(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerDeadlines(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) ([]chain2.Deadline, error) { + return s.Internal.StateMinerDeadlines(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerFaults(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (bitfield.BitField, error) { + return s.Internal.StateMinerFaults(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerInfo(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (miner.MinerInfo, error) { + return s.Internal.StateMinerInfo(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerInitialPledgeCollateral(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 chain.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerInitialPledgeCollateral(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerPartitions(p0 context.Context, p1 address.Address, p2 uint64, p3 chain.TipSetKey) ([]chain2.Partition, error) { + return s.Internal.StateMinerPartitions(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerPower(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*chain2.MinerPower, error) { + return s.Internal.StateMinerPower(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerPreCommitDepositForPower(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 chain.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerPreCommitDepositForPower(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerProvingDeadline(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*dline.Info, error) { + return s.Internal.StateMinerProvingDeadline(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerRecoveries(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (bitfield.BitField, error) { + return s.Internal.StateMinerRecoveries(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectorAllocated(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (bool, error) { + return s.Internal.StateMinerSectorAllocated(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerSectorCount(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (chain2.MinerSectors, error) { + return s.Internal.StateMinerSectorCount(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectorSize(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (abi.SectorSize, error) { + return s.Internal.StateMinerSectorSize(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectors(p0 context.Context, p1 address.Address, p2 *bitfield.BitField, p3 chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) { + return s.Internal.StateMinerSectors(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerWorkerAddress(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) { + return s.Internal.StateMinerWorkerAddress(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateSectorExpiration(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorExpiration, error) { + return s.Internal.StateSectorExpiration(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorGetInfo(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorOnChainInfo, error) { + return s.Internal.StateSectorGetInfo(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorPartition(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorLocation, error) { + return s.Internal.StateSectorPartition(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorPreCommitInfo(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) { + return s.Internal.StateSectorPreCommitInfo(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateVMCirculatingSupplyInternal(p0 context.Context, p1 chain.TipSetKey) (chain.CirculatingSupply, error) { + return s.Internal.StateVMCirculatingSupplyInternal(p0, p1) +} + +func (s *IMinerStateStruct) StateVerifiedClientStatus(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*abi.StoragePower, error) { + return s.Internal.StateVerifiedClientStatus(p0, p1, p2) +} + +type IMiningStruct struct { + Internal struct { + MinerCreateBlock func(p0 context.Context, p1 *chain2.BlockTemplate) (*chain.BlockMsg, error) `perm:"write"` + + MinerGetBaseInfo func(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 chain.TipSetKey) (*chain2.MiningBaseInfo, error) `perm:"read"` + } +} + +func (s *IMiningStruct) MinerCreateBlock(p0 context.Context, p1 *chain2.BlockTemplate) (*chain.BlockMsg, error) { + return s.Internal.MinerCreateBlock(p0, p1) +} + +func (s *IMiningStruct) MinerGetBaseInfo(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 chain.TipSetKey) (*chain2.MiningBaseInfo, error) { + return s.Internal.MinerGetBaseInfo(p0, p1, p2, p3) +} + +type IMultiSigStruct struct { + Internal struct { + MsigAddApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (cid.Cid, error) `perm:"sign"` + + MsigAddCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (cid.Cid, error) `perm:"sign"` + + MsigAddPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) `perm:"sign"` + + MsigApprove func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (cid.Cid, error) `perm:"sign"` + + MsigApproveTxnHash func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 chain.BigInt, p6 address.Address, p7 uint64, p8 []byte) (cid.Cid, error) `perm:"sign"` + + MsigCancel func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 chain.BigInt, p5 address.Address, p6 uint64, p7 []byte) (cid.Cid, error) `perm:"sign"` + + MsigCreate func(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 chain.BigInt, p5 address.Address, p6 chain.BigInt) (cid.Cid, error) `perm:"sign"` + + MsigGetVested func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey, p3 chain.TipSetKey) (chain.BigInt, error) `perm:"read"` + + MsigPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 chain.BigInt, p4 address.Address, p5 uint64, p6 []byte) (cid.Cid, error) `perm:"sign"` + + MsigRemoveSigner func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) `perm:"sign"` + + MsigSwapApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (cid.Cid, error) `perm:"sign"` + + MsigSwapCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (cid.Cid, error) `perm:"sign"` + + MsigSwapPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (cid.Cid, error) `perm:"sign"` + } +} + +func (s *IMultiSigStruct) MsigAddApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (cid.Cid, error) { + return s.Internal.MsigAddApprove(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigAddCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (cid.Cid, error) { + return s.Internal.MsigAddCancel(p0, p1, p2, p3, p4, p5) +} + +func (s *IMultiSigStruct) MsigAddPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) { + return s.Internal.MsigAddPropose(p0, p1, p2, p3, p4) +} + +func (s *IMultiSigStruct) MsigApprove(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (cid.Cid, error) { + return s.Internal.MsigApprove(p0, p1, p2, p3) +} + +func (s *IMultiSigStruct) MsigApproveTxnHash(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 chain.BigInt, p6 address.Address, p7 uint64, p8 []byte) (cid.Cid, error) { + return s.Internal.MsigApproveTxnHash(p0, p1, p2, p3, p4, p5, p6, p7, p8) +} + +func (s *IMultiSigStruct) MsigCancel(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 chain.BigInt, p5 address.Address, p6 uint64, p7 []byte) (cid.Cid, error) { + return s.Internal.MsigCancel(p0, p1, p2, p3, p4, p5, p6, p7) +} + +func (s *IMultiSigStruct) MsigCreate(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 chain.BigInt, p5 address.Address, p6 chain.BigInt) (cid.Cid, error) { + return s.Internal.MsigCreate(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigGetVested(p0 context.Context, p1 address.Address, p2 chain.TipSetKey, p3 chain.TipSetKey) (chain.BigInt, error) { + return s.Internal.MsigGetVested(p0, p1, p2, p3) +} + +func (s *IMultiSigStruct) MsigPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 chain.BigInt, p4 address.Address, p5 uint64, p6 []byte) (cid.Cid, error) { + return s.Internal.MsigPropose(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigRemoveSigner(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (cid.Cid, error) { + return s.Internal.MsigRemoveSigner(p0, p1, p2, p3, p4) +} + +func (s *IMultiSigStruct) MsigSwapApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (cid.Cid, error) { + return s.Internal.MsigSwapApprove(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigSwapCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (cid.Cid, error) { + return s.Internal.MsigSwapCancel(p0, p1, p2, p3, p4, p5) +} + +func (s *IMultiSigStruct) MsigSwapPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (cid.Cid, error) { + return s.Internal.MsigSwapPropose(p0, p1, p2, p3, p4) +} + +type INetworkStruct struct { + Internal struct { + NetAddrsListen func(p0 context.Context) (peer.AddrInfo, error) `perm:"read"` + + NetworkConnect func(p0 context.Context, p1 []string) (<-chan net.ConnectionResult, error) `perm:"read"` + + NetworkFindPeer func(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) `perm:"read"` + + NetworkFindProvidersAsync func(p0 context.Context, p1 cid.Cid, p2 int) <-chan peer.AddrInfo `perm:"read"` + + NetworkGetBandwidthStats func(p0 context.Context) metrics.Stats `perm:"admin"` + + NetworkGetClosestPeers func(p0 context.Context, p1 string) ([]peer.ID, error) `perm:"read"` + + NetworkGetPeerAddresses func(p0 context.Context) []ma.Multiaddr `perm:"admin"` + + NetworkGetPeerID func(p0 context.Context) peer.ID `perm:"admin"` + + NetworkPeers func(p0 context.Context, p1 bool, p2 bool, p3 bool) (*net.SwarmConnInfos, error) `perm:"read"` + + Version func(p0 context.Context) (chain2.Version, error) `perm:"read"` + } +} + +func (s *INetworkStruct) NetAddrsListen(p0 context.Context) (peer.AddrInfo, error) { + return s.Internal.NetAddrsListen(p0) +} + +func (s *INetworkStruct) NetworkConnect(p0 context.Context, p1 []string) (<-chan net.ConnectionResult, error) { + return s.Internal.NetworkConnect(p0, p1) +} + +func (s *INetworkStruct) NetworkFindPeer(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) { + return s.Internal.NetworkFindPeer(p0, p1) +} + +func (s *INetworkStruct) NetworkFindProvidersAsync(p0 context.Context, p1 cid.Cid, p2 int) <-chan peer.AddrInfo { + return s.Internal.NetworkFindProvidersAsync(p0, p1, p2) +} + +func (s *INetworkStruct) NetworkGetBandwidthStats(p0 context.Context) metrics.Stats { + return s.Internal.NetworkGetBandwidthStats(p0) +} + +func (s *INetworkStruct) NetworkGetClosestPeers(p0 context.Context, p1 string) ([]peer.ID, error) { + return s.Internal.NetworkGetClosestPeers(p0, p1) +} + +func (s *INetworkStruct) NetworkGetPeerAddresses(p0 context.Context) []ma.Multiaddr { + return s.Internal.NetworkGetPeerAddresses(p0) +} + +func (s *INetworkStruct) NetworkGetPeerID(p0 context.Context) peer.ID { + return s.Internal.NetworkGetPeerID(p0) +} + +func (s *INetworkStruct) NetworkPeers(p0 context.Context, p1 bool, p2 bool, p3 bool) (*net.SwarmConnInfos, error) { + return s.Internal.NetworkPeers(p0, p1, p2, p3) +} + +func (s *INetworkStruct) Version(p0 context.Context) (chain2.Version, error) { + return s.Internal.Version(p0) +} + +type IPaychanStruct struct { + Internal struct { + PaychAllocateLane func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"sign"` + + PaychAvailableFunds func(p0 context.Context, p1 address.Address) (*chain2.ChannelAvailableFunds, error) `perm:"sign"` + + PaychAvailableFundsByFromTo func(p0 context.Context, p1 address.Address, p2 address.Address) (*chain2.ChannelAvailableFunds, error) `perm:"sign"` + + PaychCollect func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"` + + PaychGet func(p0 context.Context, p1 address.Address, p2 address.Address, p3 big.Int) (*paych.ChannelInfo, error) `perm:"sign"` + + PaychGetWaitReady func(p0 context.Context, p1 cid.Cid) (address.Address, error) `perm:"sign"` + + PaychList func(p0 context.Context) ([]address.Address, error) `perm:"read"` + + PaychNewPayment func(p0 context.Context, p1 address.Address, p2 address.Address, p3 []paych.VoucherSpec) (*paych.PaymentInfo, error) `perm:"sign"` + + PaychSettle func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"` + + PaychStatus func(p0 context.Context, p1 address.Address) (*paych.Status, error) `perm:"read"` + + PaychVoucherAdd func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 big.Int) (big.Int, error) `perm:"write"` + + PaychVoucherCheckSpendable func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (bool, error) `perm:"read"` + + PaychVoucherCheckValid func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher) error `perm:"read"` + + PaychVoucherCreate func(p0 context.Context, p1 address.Address, p2 big.Int, p3 uint64) (*paych.VoucherCreateResult, error) `perm:"sign"` + + PaychVoucherList func(p0 context.Context, p1 address.Address) ([]*paych.SignedVoucher, error) `perm:"write"` + + PaychVoucherSubmit func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) `perm:"sign"` + } +} + +func (s *IPaychanStruct) PaychAllocateLane(p0 context.Context, p1 address.Address) (uint64, error) { + return s.Internal.PaychAllocateLane(p0, p1) +} + +func (s *IPaychanStruct) PaychAvailableFunds(p0 context.Context, p1 address.Address) (*chain2.ChannelAvailableFunds, error) { + return s.Internal.PaychAvailableFunds(p0, p1) +} + +func (s *IPaychanStruct) PaychAvailableFundsByFromTo(p0 context.Context, p1 address.Address, p2 address.Address) (*chain2.ChannelAvailableFunds, error) { + return s.Internal.PaychAvailableFundsByFromTo(p0, p1, p2) +} + +func (s *IPaychanStruct) PaychCollect(p0 context.Context, p1 address.Address) (cid.Cid, error) { + return s.Internal.PaychCollect(p0, p1) +} + +func (s *IPaychanStruct) PaychGet(p0 context.Context, p1 address.Address, p2 address.Address, p3 big.Int) (*paych.ChannelInfo, error) { + return s.Internal.PaychGet(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychGetWaitReady(p0 context.Context, p1 cid.Cid) (address.Address, error) { + return s.Internal.PaychGetWaitReady(p0, p1) +} + +func (s *IPaychanStruct) PaychList(p0 context.Context) ([]address.Address, error) { + return s.Internal.PaychList(p0) +} + +func (s *IPaychanStruct) PaychNewPayment(p0 context.Context, p1 address.Address, p2 address.Address, p3 []paych.VoucherSpec) (*paych.PaymentInfo, error) { + return s.Internal.PaychNewPayment(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychSettle(p0 context.Context, p1 address.Address) (cid.Cid, error) { + return s.Internal.PaychSettle(p0, p1) +} + +func (s *IPaychanStruct) PaychStatus(p0 context.Context, p1 address.Address) (*paych.Status, error) { + return s.Internal.PaychStatus(p0, p1) +} + +func (s *IPaychanStruct) PaychVoucherAdd(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 big.Int) (big.Int, error) { + return s.Internal.PaychVoucherAdd(p0, p1, p2, p3, p4) +} + +func (s *IPaychanStruct) PaychVoucherCheckSpendable(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (bool, error) { + return s.Internal.PaychVoucherCheckSpendable(p0, p1, p2, p3, p4) +} + +func (s *IPaychanStruct) PaychVoucherCheckValid(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher) error { + return s.Internal.PaychVoucherCheckValid(p0, p1, p2) +} + +func (s *IPaychanStruct) PaychVoucherCreate(p0 context.Context, p1 address.Address, p2 big.Int, p3 uint64) (*paych.VoucherCreateResult, error) { + return s.Internal.PaychVoucherCreate(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychVoucherList(p0 context.Context, p1 address.Address) ([]*paych.SignedVoucher, error) { + return s.Internal.PaychVoucherList(p0, p1) +} + +func (s *IPaychanStruct) PaychVoucherSubmit(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) { + return s.Internal.PaychVoucherSubmit(p0, p1, p2, p3, p4) +} + +type ISyncerStruct struct { + Internal struct { + ChainSyncHandleNewTipSet func(p0 context.Context, p1 *chain.ChainInfo) error `perm:"write"` + + ChainTipSetWeight func(p0 context.Context, p1 chain.TipSetKey) (big.Int, error) `perm:"read"` + + Concurrent func(p0 context.Context) int64 `perm:"read"` + + SetConcurrent func(p0 context.Context, p1 int64) error `perm:"admin"` + + StateCall func(p0 context.Context, p1 *chain.Message, p2 chain.TipSetKey) (*chain2.InvocResult, error) `perm:"read"` + + SyncState func(p0 context.Context) (*chain2.SyncState, error) `perm:"read"` + + SyncSubmitBlock func(p0 context.Context, p1 *chain.BlockMsg) error `perm:"write"` + + SyncerTracker func(p0 context.Context) *chain2.TargetTracker `perm:"read"` + } +} + +func (s *ISyncerStruct) ChainSyncHandleNewTipSet(p0 context.Context, p1 *chain.ChainInfo) error { + return s.Internal.ChainSyncHandleNewTipSet(p0, p1) +} + +func (s *ISyncerStruct) ChainTipSetWeight(p0 context.Context, p1 chain.TipSetKey) (big.Int, error) { + return s.Internal.ChainTipSetWeight(p0, p1) +} + +func (s *ISyncerStruct) Concurrent(p0 context.Context) int64 { + return s.Internal.Concurrent(p0) +} + +func (s *ISyncerStruct) SetConcurrent(p0 context.Context, p1 int64) error { + return s.Internal.SetConcurrent(p0, p1) +} + +func (s *ISyncerStruct) StateCall(p0 context.Context, p1 *chain.Message, p2 chain.TipSetKey) (*chain2.InvocResult, error) { + return s.Internal.StateCall(p0, p1, p2) +} + +func (s *ISyncerStruct) SyncState(p0 context.Context) (*chain2.SyncState, error) { + return s.Internal.SyncState(p0) +} + +func (s *ISyncerStruct) SyncSubmitBlock(p0 context.Context, p1 *chain.BlockMsg) error { + return s.Internal.SyncSubmitBlock(p0, p1) +} + +func (s *ISyncerStruct) SyncerTracker(p0 context.Context) *chain2.TargetTracker { + return s.Internal.SyncerTracker(p0) +} + +type IWalletStruct struct { + Internal struct { + HasPassword func(p0 context.Context) bool `perm:"admin"` + + LockWallet func(p0 context.Context) error `perm:"admin"` + + SetPassword func(p0 context.Context, p1 []byte) error `perm:"admin"` + + UnLockWallet func(p0 context.Context, p1 []byte) error `perm:"admin"` + + WalletAddresses func(p0 context.Context) []address.Address `perm:"admin"` + + WalletBalance func(p0 context.Context, p1 address.Address) (abi.TokenAmount, error) `perm:"read"` + + WalletDefaultAddress func(p0 context.Context) (address.Address, error) `perm:"write"` + + WalletExport func(p0 context.Context, p1 address.Address, p2 string) (*wallet.KeyInfo, error) `perm:"admin"` + + WalletHas func(p0 context.Context, p1 address.Address) (bool, error) `perm:"write"` + + WalletImport func(p0 context.Context, p1 *wallet.KeyInfo) (address.Address, error) `perm:"admin"` + + WalletNewAddress func(p0 context.Context, p1 address.Protocol) (address.Address, error) `perm:"write"` + + WalletSetDefault func(p0 context.Context, p1 address.Address) error `perm:"write"` + + WalletSign func(p0 context.Context, p1 address.Address, p2 []byte, p3 wallet.MsgMeta) (*crypto.Signature, error) `perm:"sign"` + + WalletSignMessage func(p0 context.Context, p1 address.Address, p2 *chain.Message) (*chain.SignedMessage, error) `perm:"sign"` + + WalletState func(p0 context.Context) int `perm:"admin"` + } +} + +func (s *IWalletStruct) HasPassword(p0 context.Context) bool { + return s.Internal.HasPassword(p0) +} + +func (s *IWalletStruct) LockWallet(p0 context.Context) error { + return s.Internal.LockWallet(p0) +} + +func (s *IWalletStruct) SetPassword(p0 context.Context, p1 []byte) error { + return s.Internal.SetPassword(p0, p1) +} + +func (s *IWalletStruct) UnLockWallet(p0 context.Context, p1 []byte) error { + return s.Internal.UnLockWallet(p0, p1) +} + +func (s *IWalletStruct) WalletAddresses(p0 context.Context) []address.Address { + return s.Internal.WalletAddresses(p0) +} + +func (s *IWalletStruct) WalletBalance(p0 context.Context, p1 address.Address) (abi.TokenAmount, error) { + return s.Internal.WalletBalance(p0, p1) +} + +func (s *IWalletStruct) WalletDefaultAddress(p0 context.Context) (address.Address, error) { + return s.Internal.WalletDefaultAddress(p0) +} + +func (s *IWalletStruct) WalletExport(p0 context.Context, p1 address.Address, p2 string) (*wallet.KeyInfo, error) { + return s.Internal.WalletExport(p0, p1, p2) +} + +func (s *IWalletStruct) WalletHas(p0 context.Context, p1 address.Address) (bool, error) { + return s.Internal.WalletHas(p0, p1) +} + +func (s *IWalletStruct) WalletImport(p0 context.Context, p1 *wallet.KeyInfo) (address.Address, error) { + return s.Internal.WalletImport(p0, p1) +} + +func (s *IWalletStruct) WalletNewAddress(p0 context.Context, p1 address.Protocol) (address.Address, error) { + return s.Internal.WalletNewAddress(p0, p1) +} + +func (s *IWalletStruct) WalletSetDefault(p0 context.Context, p1 address.Address) error { + return s.Internal.WalletSetDefault(p0, p1) +} + +func (s *IWalletStruct) WalletSign(p0 context.Context, p1 address.Address, p2 []byte, p3 wallet.MsgMeta) (*crypto.Signature, error) { + return s.Internal.WalletSign(p0, p1, p2, p3) +} + +func (s *IWalletStruct) WalletSignMessage(p0 context.Context, p1 address.Address, p2 *chain.Message) (*chain.SignedMessage, error) { + return s.Internal.WalletSignMessage(p0, p1, p2) +} + +func (s *IWalletStruct) WalletState(p0 context.Context) int { + return s.Internal.WalletState(p0) +} diff --git a/venus-shared/api/chain/v0/syncer.go b/venus-shared/api/chain/v0/syncer.go new file mode 100644 index 0000000000..439b7f043b --- /dev/null +++ b/venus-shared/api/chain/v0/syncer.go @@ -0,0 +1,21 @@ +package v0 + +import ( + "context" + + "github.com/filecoin-project/go-state-types/big" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" +) + +type ISyncer interface { + ChainSyncHandleNewTipSet(ctx context.Context, ci *chain.ChainInfo) error //perm:write + SetConcurrent(ctx context.Context, concurrent int64) error //perm:admin + SyncerTracker(ctx context.Context) *chain2.TargetTracker //perm:read + Concurrent(ctx context.Context) int64 //perm:read + ChainTipSetWeight(ctx context.Context, tsk chain.TipSetKey) (big.Int, error) //perm:read + SyncSubmitBlock(ctx context.Context, blk *chain.BlockMsg) error //perm:write + StateCall(ctx context.Context, msg *chain.Message, tsk chain.TipSetKey) (*chain2.InvocResult, error) //perm:read + SyncState(ctx context.Context) (*chain2.SyncState, error) //perm:read +} diff --git a/venus-shared/api/chain/v0/wallet.go b/venus-shared/api/chain/v0/wallet.go new file mode 100644 index 0000000000..0272b2d3bf --- /dev/null +++ b/venus-shared/api/chain/v0/wallet.go @@ -0,0 +1,30 @@ +package v0 + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" + + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/wallet" +) + +type IWallet interface { + WalletSign(ctx context.Context, k address.Address, msg []byte, meta wallet.MsgMeta) (*crypto.Signature, error) //perm:sign + WalletExport(ctx context.Context, addr address.Address, password string) (*wallet.KeyInfo, error) //perm:admin + WalletImport(ctx context.Context, key *wallet.KeyInfo) (address.Address, error) //perm:admin + WalletHas(ctx context.Context, addr address.Address) (bool, error) //perm:write + WalletNewAddress(ctx context.Context, protocol address.Protocol) (address.Address, error) //perm:write + WalletBalance(ctx context.Context, addr address.Address) (abi.TokenAmount, error) //perm:read + WalletDefaultAddress(ctx context.Context) (address.Address, error) //perm:write + WalletAddresses(ctx context.Context) []address.Address //perm:admin + WalletSetDefault(ctx context.Context, addr address.Address) error //perm:write + WalletSignMessage(ctx context.Context, k address.Address, msg *chain.Message) (*chain.SignedMessage, error) //perm:sign + LockWallet(ctx context.Context) error //perm:admin + UnLockWallet(ctx context.Context, password []byte) error //perm:admin + SetPassword(ctx context.Context, password []byte) error //perm:admin + HasPassword(ctx context.Context) bool //perm:admin + WalletState(ctx context.Context) int //perm:admin +} diff --git a/venus-shared/api/chain/v1/blockstore.go b/venus-shared/api/chain/v1/blockstore.go new file mode 100644 index 0000000000..c96e3d04b0 --- /dev/null +++ b/venus-shared/api/chain/v1/blockstore.go @@ -0,0 +1,16 @@ +package v1 + +import ( + "context" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + + "github.com/ipfs/go-cid" +) + +type IBlockStore interface { + ChainReadObj(ctx context.Context, cid cid.Cid) ([]byte, error) //perm:read + ChainDeleteObj(ctx context.Context, obj cid.Cid) error //perm:admin + ChainHasObj(ctx context.Context, obj cid.Cid) (bool, error) //perm:read + ChainStatObj(ctx context.Context, obj cid.Cid, base cid.Cid) (chain2.ObjStat, error) //perm:read +} diff --git a/venus-shared/api/chain/v1/chain.go b/venus-shared/api/chain/v1/chain.go new file mode 100644 index 0000000000..18629b99c7 --- /dev/null +++ b/venus-shared/api/chain/v1/chain.go @@ -0,0 +1,145 @@ +package v1 + +import ( + "context" + "time" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/dline" + "github.com/filecoin-project/go-state-types/network" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IChain interface { + IAccount + IActor + IBeacon + IMinerState + IChainInfo +} + +type IAccount interface { + StateAccountKey(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (address.Address, error) //perm:read +} + +type IActor interface { + StateGetActor(ctx context.Context, actor address.Address, tsk chain.TipSetKey) (*chain.Actor, error) //perm:read + ListActor(ctx context.Context) (map[address.Address]*chain.Actor, error) //perm:read +} + +type IBeacon interface { + BeaconGetEntry(ctx context.Context, epoch abi.ChainEpoch) (*chain.BeaconEntry, error) //perm:read +} + +type IChainInfo interface { + BlockTime(ctx context.Context) time.Duration //perm:read + ChainList(ctx context.Context, tsKey chain.TipSetKey, count int) ([]chain.TipSetKey, error) //perm:read + ChainHead(ctx context.Context) (*chain.TipSet, error) //perm:read + ChainSetHead(ctx context.Context, key chain.TipSetKey) error //perm:admin + ChainGetTipSet(ctx context.Context, key chain.TipSetKey) (*chain.TipSet, error) //perm:read + ChainGetTipSetByHeight(ctx context.Context, height abi.ChainEpoch, tsk chain.TipSetKey) (*chain.TipSet, error) //perm:read + ChainGetTipSetAfterHeight(ctx context.Context, height abi.ChainEpoch, tsk chain.TipSetKey) (*chain.TipSet, error) //perm:read + ChainGetRandomnessFromBeacon(ctx context.Context, key chain.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) //perm:read + ChainGetRandomnessFromTickets(ctx context.Context, tsk chain.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error) //perm:read + StateGetRandomnessFromTickets(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk chain.TipSetKey) (abi.Randomness, error) //perm:read + StateGetRandomnessFromBeacon(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk chain.TipSetKey) (abi.Randomness, error) //perm:read + ChainGetBlock(ctx context.Context, id cid.Cid) (*chain.BlockHeader, error) //perm:read + ChainGetMessage(ctx context.Context, msgID cid.Cid) (*chain.Message, error) //perm:read + ChainGetBlockMessages(ctx context.Context, bid cid.Cid) (*chain2.BlockMessages, error) //perm:read + ChainGetMessagesInTipset(ctx context.Context, key chain.TipSetKey) ([]chain2.Message, error) //perm:read + ChainGetReceipts(ctx context.Context, id cid.Cid) ([]chain.MessageReceipt, error) //perm:read + ChainGetParentMessages(ctx context.Context, bcid cid.Cid) ([]chain2.Message, error) //perm:read + ChainGetParentReceipts(ctx context.Context, bcid cid.Cid) ([]*chain.MessageReceipt, error) //perm:read + StateVerifiedRegistryRootKey(ctx context.Context, tsk chain.TipSetKey) (address.Address, error) //perm:read + StateVerifierStatus(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (*abi.StoragePower, error) //perm:read + ChainNotify(ctx context.Context) (<-chan []*chain2.HeadChange, error) //perm:read + GetFullBlock(ctx context.Context, id cid.Cid) (*chain.FullBlock, error) //perm:read + GetActor(ctx context.Context, addr address.Address) (*chain.Actor, error) //perm:read + GetParentStateRootActor(ctx context.Context, ts *chain.TipSet, addr address.Address) (*chain.Actor, error) //perm:read + GetEntry(ctx context.Context, height abi.ChainEpoch, round uint64) (*chain.BeaconEntry, error) //perm:read + MessageWait(ctx context.Context, msgCid cid.Cid, confidence, lookback abi.ChainEpoch) (*chain2.ChainMessage, error) //perm:read + ProtocolParameters(ctx context.Context) (*chain2.ProtocolParams, error) //perm:read + ResolveToKeyAddr(ctx context.Context, addr address.Address, ts *chain.TipSet) (address.Address, error) //perm:read + StateNetworkName(ctx context.Context) (chain2.NetworkName, error) //perm:read + // StateSearchMsg looks back up to limit epochs in the chain for a message, and returns its receipt and the tipset where it was executed + // + // NOTE: If a replacing message is found on chain, this method will return + // a MsgLookup for the replacing message - the MsgLookup.Message will be a different + // CID than the one provided in the 'cid' param, MsgLookup.Receipt will contain the + // result of the execution of the replacing message. + // + // If the caller wants to ensure that exactly the requested message was executed, + // they must check that MsgLookup.Message is equal to the provided 'cid', or set the + // `allowReplaced` parameter to false. Without this check, and with `allowReplaced` + // set to true, both the requested and original message may appear as + // successfully executed on-chain, which may look like a double-spend. + // + // A replacing message is a message with a different CID, any of Gas values, and + // different signature, but with all other parameters matching (source/destination, + // nonce, params, etc.) + StateSearchMsg(ctx context.Context, from chain.TipSetKey, msg cid.Cid, limit abi.ChainEpoch, allowReplaced bool) (*chain2.MsgLookup, error) //perm:read + // StateWaitMsg looks back up to limit epochs in the chain for a message. + // If not found, it blocks until the message arrives on chain, and gets to the + // indicated confidence depth. + // + // NOTE: If a replacing message is found on chain, this method will return + // a MsgLookup for the replacing message - the MsgLookup.Message will be a different + // CID than the one provided in the 'cid' param, MsgLookup.Receipt will contain the + // result of the execution of the replacing message. + // + // If the caller wants to ensure that exactly the requested message was executed, + // they must check that MsgLookup.Message is equal to the provided 'cid', or set the + // `allowReplaced` parameter to false. Without this check, and with `allowReplaced` + // set to true, both the requested and original message may appear as + // successfully executed on-chain, which may look like a double-spend. + // + // A replacing message is a message with a different CID, any of Gas values, and + // different signature, but with all other parameters matching (source/destination, + // nonce, params, etc.) + StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64, limit abi.ChainEpoch, allowReplaced bool) (*chain2.MsgLookup, error) //perm:read + StateNetworkVersion(ctx context.Context, tsk chain.TipSetKey) (network.Version, error) //perm:read + VerifyEntry(parent, child *chain.BeaconEntry, height abi.ChainEpoch) bool //perm:read + ChainExport(context.Context, abi.ChainEpoch, bool, chain.TipSetKey) (<-chan []byte, error) //perm:read + ChainGetPath(ctx context.Context, from chain.TipSetKey, to chain.TipSetKey) ([]*chain2.HeadChange, error) //perm:read +} + +type IMinerState interface { + StateMinerSectorAllocated(ctx context.Context, maddr address.Address, s abi.SectorNumber, tsk chain.TipSetKey) (bool, error) //perm:read + StateSectorPreCommitInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk chain.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) //perm:read + StateSectorGetInfo(ctx context.Context, maddr address.Address, n abi.SectorNumber, tsk chain.TipSetKey) (*miner.SectorOnChainInfo, error) //perm:read + StateSectorPartition(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk chain.TipSetKey) (*miner.SectorLocation, error) //perm:read + StateMinerSectorSize(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (abi.SectorSize, error) //perm:read + StateMinerInfo(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (miner.MinerInfo, error) //perm:read + StateMinerWorkerAddress(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (address.Address, error) //perm:read + StateMinerRecoveries(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (bitfield.BitField, error) //perm:read + StateMinerFaults(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (bitfield.BitField, error) //perm:read + StateMinerProvingDeadline(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (*dline.Info, error) //perm:read + StateMinerPartitions(ctx context.Context, maddr address.Address, dlIdx uint64, tsk chain.TipSetKey) ([]chain2.Partition, error) //perm:read + StateMinerDeadlines(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) ([]chain2.Deadline, error) //perm:read + StateMinerSectors(ctx context.Context, maddr address.Address, sectorNos *bitfield.BitField, tsk chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) //perm:read + StateMarketStorageDeal(ctx context.Context, dealID abi.DealID, tsk chain.TipSetKey) (*chain2.MarketDeal, error) //perm:read + StateMinerPreCommitDepositForPower(ctx context.Context, maddr address.Address, pci miner.SectorPreCommitInfo, tsk chain.TipSetKey) (big.Int, error) //perm:read + StateMinerInitialPledgeCollateral(ctx context.Context, maddr address.Address, pci miner.SectorPreCommitInfo, tsk chain.TipSetKey) (big.Int, error) //perm:read + StateVMCirculatingSupplyInternal(ctx context.Context, tsk chain.TipSetKey) (chain.CirculatingSupply, error) //perm:read + StateCirculatingSupply(ctx context.Context, tsk chain.TipSetKey) (abi.TokenAmount, error) //perm:read + StateMarketDeals(ctx context.Context, tsk chain.TipSetKey) (map[string]chain2.MarketDeal, error) //perm:read + StateMinerActiveSectors(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) //perm:read + StateLookupID(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (address.Address, error) //perm:read + StateListMiners(ctx context.Context, tsk chain.TipSetKey) ([]address.Address, error) //perm:read + StateListActors(ctx context.Context, tsk chain.TipSetKey) ([]address.Address, error) //perm:read + StateMinerPower(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (*chain2.MinerPower, error) //perm:read + StateMinerAvailableBalance(ctx context.Context, maddr address.Address, tsk chain.TipSetKey) (big.Int, error) //perm:read + StateSectorExpiration(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tsk chain.TipSetKey) (*miner.SectorExpiration, error) //perm:read + StateMinerSectorCount(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (chain2.MinerSectors, error) //perm:read + StateMarketBalance(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (chain2.MarketBalance, error) //perm:read + StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk chain.TipSetKey) (chain2.DealCollateralBounds, error) //perm:read + StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk chain.TipSetKey) (*abi.StoragePower, error) //perm:read +} diff --git a/venus-shared/api/chain/v1/fullnode.go b/venus-shared/api/chain/v1/fullnode.go new file mode 100644 index 0000000000..aad482dd0a --- /dev/null +++ b/venus-shared/api/chain/v1/fullnode.go @@ -0,0 +1,17 @@ +package v1 + +//go:generate go run github.com/golang/mock/mockgen@v1.6.0 -destination=./mock/full.go -package=mock . FullNode + +type FullNode interface { + IBlockStore + IChain + IMarket + IMining + IMessagePool + IMultiSig + INetwork + IPaychan + ISyncer + IWallet + IJwtAuthAPI +} diff --git a/venus-shared/api/chain/v1/jwtauth.go b/venus-shared/api/chain/v1/jwtauth.go new file mode 100644 index 0000000000..5b412252a1 --- /dev/null +++ b/venus-shared/api/chain/v1/jwtauth.go @@ -0,0 +1,12 @@ +package v1 + +import ( + "context" + + "github.com/filecoin-project/go-jsonrpc/auth" +) + +type IJwtAuthAPI interface { + Verify(ctx context.Context, host, token string) ([]auth.Permission, error) //perm:read + AuthNew(ctx context.Context, perms []auth.Permission) ([]byte, error) //perm:admin +} diff --git a/venus-shared/api/chain/v1/market.go b/venus-shared/api/chain/v1/market.go new file mode 100644 index 0000000000..c6c3e0cee3 --- /dev/null +++ b/venus-shared/api/chain/v1/market.go @@ -0,0 +1,12 @@ +package v1 + +import ( + "context" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IMarket interface { + StateMarketParticipants(ctx context.Context, tsk chain.TipSetKey) (map[string]chain2.MarketBalance, error) //perm:read +} diff --git a/venus-shared/api/chain/v1/mining.go b/venus-shared/api/chain/v1/mining.go new file mode 100644 index 0000000000..d881a2d4a2 --- /dev/null +++ b/venus-shared/api/chain/v1/mining.go @@ -0,0 +1,16 @@ +package v1 + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" +) + +type IMining interface { + MinerGetBaseInfo(ctx context.Context, maddr address.Address, round abi.ChainEpoch, tsk chain.TipSetKey) (*chain2.MiningBaseInfo, error) //perm:read + MinerCreateBlock(ctx context.Context, bt *chain2.BlockTemplate) (*chain.BlockMsg, error) //perm:write +} diff --git a/venus-shared/api/chain/v1/mock/full.go b/venus-shared/api/chain/v1/mock/full.go new file mode 100644 index 0000000000..d7ca9b2ac5 --- /dev/null +++ b/venus-shared/api/chain/v1/mock/full.go @@ -0,0 +1,2505 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/filecoin-project/venus/venus-shared/api/chain/v1 (interfaces: FullNode) + +// Package mock is a generated GoMock package. +package mock + +import ( + context "context" + reflect "reflect" + time "time" + + address "github.com/filecoin-project/go-address" + bitfield "github.com/filecoin-project/go-bitfield" + abi "github.com/filecoin-project/go-state-types/abi" + big "github.com/filecoin-project/go-state-types/big" + crypto "github.com/filecoin-project/go-state-types/crypto" + dline "github.com/filecoin-project/go-state-types/dline" + network "github.com/filecoin-project/go-state-types/network" + miner "github.com/filecoin-project/specs-actors/actors/builtin/miner" + paych "github.com/filecoin-project/specs-actors/actors/builtin/paych" + miner0 "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + chain "github.com/filecoin-project/venus/venus-shared/api/chain" + chain0 "github.com/filecoin-project/venus/venus-shared/chain" + net "github.com/filecoin-project/venus/venus-shared/libp2p/net" + messagepool "github.com/filecoin-project/venus/venus-shared/messagepool" + paych0 "github.com/filecoin-project/venus/venus-shared/paych" + wallet "github.com/filecoin-project/venus/venus-shared/wallet" + gomock "github.com/golang/mock/gomock" + cid "github.com/ipfs/go-cid" + metrics "github.com/libp2p/go-libp2p-core/metrics" + peer "github.com/libp2p/go-libp2p-core/peer" + multiaddr "github.com/multiformats/go-multiaddr" +) + +// MockFullNode is a mock of FullNode interface. +type MockFullNode struct { + ctrl *gomock.Controller + recorder *MockFullNodeMockRecorder +} + +// MockFullNodeMockRecorder is the mock recorder for MockFullNode. +type MockFullNodeMockRecorder struct { + mock *MockFullNode +} + +// NewMockFullNode creates a new mock instance. +func NewMockFullNode(ctrl *gomock.Controller) *MockFullNode { + mock := &MockFullNode{ctrl: ctrl} + mock.recorder = &MockFullNodeMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockFullNode) EXPECT() *MockFullNodeMockRecorder { + return m.recorder +} + +// AuthNew mocks base method. +func (m *MockFullNode) AuthNew(arg0 context.Context, arg1 []string) ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AuthNew", arg0, arg1) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AuthNew indicates an expected call of AuthNew. +func (mr *MockFullNodeMockRecorder) AuthNew(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AuthNew", reflect.TypeOf((*MockFullNode)(nil).AuthNew), arg0, arg1) +} + +// BeaconGetEntry mocks base method. +func (m *MockFullNode) BeaconGetEntry(arg0 context.Context, arg1 abi.ChainEpoch) (*chain0.BeaconEntry, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BeaconGetEntry", arg0, arg1) + ret0, _ := ret[0].(*chain0.BeaconEntry) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// BeaconGetEntry indicates an expected call of BeaconGetEntry. +func (mr *MockFullNodeMockRecorder) BeaconGetEntry(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BeaconGetEntry", reflect.TypeOf((*MockFullNode)(nil).BeaconGetEntry), arg0, arg1) +} + +// BlockTime mocks base method. +func (m *MockFullNode) BlockTime(arg0 context.Context) time.Duration { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BlockTime", arg0) + ret0, _ := ret[0].(time.Duration) + return ret0 +} + +// BlockTime indicates an expected call of BlockTime. +func (mr *MockFullNodeMockRecorder) BlockTime(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BlockTime", reflect.TypeOf((*MockFullNode)(nil).BlockTime), arg0) +} + +// ChainDeleteObj mocks base method. +func (m *MockFullNode) ChainDeleteObj(arg0 context.Context, arg1 cid.Cid) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainDeleteObj", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// ChainDeleteObj indicates an expected call of ChainDeleteObj. +func (mr *MockFullNodeMockRecorder) ChainDeleteObj(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainDeleteObj", reflect.TypeOf((*MockFullNode)(nil).ChainDeleteObj), arg0, arg1) +} + +// ChainExport mocks base method. +func (m *MockFullNode) ChainExport(arg0 context.Context, arg1 abi.ChainEpoch, arg2 bool, arg3 chain0.TipSetKey) (<-chan []byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainExport", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(<-chan []byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainExport indicates an expected call of ChainExport. +func (mr *MockFullNodeMockRecorder) ChainExport(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainExport", reflect.TypeOf((*MockFullNode)(nil).ChainExport), arg0, arg1, arg2, arg3) +} + +// ChainGetBlock mocks base method. +func (m *MockFullNode) ChainGetBlock(arg0 context.Context, arg1 cid.Cid) (*chain0.BlockHeader, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetBlock", arg0, arg1) + ret0, _ := ret[0].(*chain0.BlockHeader) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetBlock indicates an expected call of ChainGetBlock. +func (mr *MockFullNodeMockRecorder) ChainGetBlock(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetBlock", reflect.TypeOf((*MockFullNode)(nil).ChainGetBlock), arg0, arg1) +} + +// ChainGetBlockMessages mocks base method. +func (m *MockFullNode) ChainGetBlockMessages(arg0 context.Context, arg1 cid.Cid) (*chain.BlockMessages, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetBlockMessages", arg0, arg1) + ret0, _ := ret[0].(*chain.BlockMessages) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetBlockMessages indicates an expected call of ChainGetBlockMessages. +func (mr *MockFullNodeMockRecorder) ChainGetBlockMessages(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetBlockMessages", reflect.TypeOf((*MockFullNode)(nil).ChainGetBlockMessages), arg0, arg1) +} + +// ChainGetMessage mocks base method. +func (m *MockFullNode) ChainGetMessage(arg0 context.Context, arg1 cid.Cid) (*chain0.Message, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetMessage", arg0, arg1) + ret0, _ := ret[0].(*chain0.Message) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetMessage indicates an expected call of ChainGetMessage. +func (mr *MockFullNodeMockRecorder) ChainGetMessage(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetMessage", reflect.TypeOf((*MockFullNode)(nil).ChainGetMessage), arg0, arg1) +} + +// ChainGetMessagesInTipset mocks base method. +func (m *MockFullNode) ChainGetMessagesInTipset(arg0 context.Context, arg1 chain0.TipSetKey) ([]chain.Message, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetMessagesInTipset", arg0, arg1) + ret0, _ := ret[0].([]chain.Message) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetMessagesInTipset indicates an expected call of ChainGetMessagesInTipset. +func (mr *MockFullNodeMockRecorder) ChainGetMessagesInTipset(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetMessagesInTipset", reflect.TypeOf((*MockFullNode)(nil).ChainGetMessagesInTipset), arg0, arg1) +} + +// ChainGetParentMessages mocks base method. +func (m *MockFullNode) ChainGetParentMessages(arg0 context.Context, arg1 cid.Cid) ([]chain.Message, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetParentMessages", arg0, arg1) + ret0, _ := ret[0].([]chain.Message) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetParentMessages indicates an expected call of ChainGetParentMessages. +func (mr *MockFullNodeMockRecorder) ChainGetParentMessages(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetParentMessages", reflect.TypeOf((*MockFullNode)(nil).ChainGetParentMessages), arg0, arg1) +} + +// ChainGetParentReceipts mocks base method. +func (m *MockFullNode) ChainGetParentReceipts(arg0 context.Context, arg1 cid.Cid) ([]*chain0.MessageReceipt, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetParentReceipts", arg0, arg1) + ret0, _ := ret[0].([]*chain0.MessageReceipt) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetParentReceipts indicates an expected call of ChainGetParentReceipts. +func (mr *MockFullNodeMockRecorder) ChainGetParentReceipts(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetParentReceipts", reflect.TypeOf((*MockFullNode)(nil).ChainGetParentReceipts), arg0, arg1) +} + +// ChainGetPath mocks base method. +func (m *MockFullNode) ChainGetPath(arg0 context.Context, arg1, arg2 chain0.TipSetKey) ([]*chain.HeadChange, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetPath", arg0, arg1, arg2) + ret0, _ := ret[0].([]*chain.HeadChange) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetPath indicates an expected call of ChainGetPath. +func (mr *MockFullNodeMockRecorder) ChainGetPath(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetPath", reflect.TypeOf((*MockFullNode)(nil).ChainGetPath), arg0, arg1, arg2) +} + +// ChainGetRandomnessFromBeacon mocks base method. +func (m *MockFullNode) ChainGetRandomnessFromBeacon(arg0 context.Context, arg1 chain0.TipSetKey, arg2 crypto.DomainSeparationTag, arg3 abi.ChainEpoch, arg4 []byte) (abi.Randomness, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetRandomnessFromBeacon", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(abi.Randomness) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetRandomnessFromBeacon indicates an expected call of ChainGetRandomnessFromBeacon. +func (mr *MockFullNodeMockRecorder) ChainGetRandomnessFromBeacon(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetRandomnessFromBeacon", reflect.TypeOf((*MockFullNode)(nil).ChainGetRandomnessFromBeacon), arg0, arg1, arg2, arg3, arg4) +} + +// ChainGetRandomnessFromTickets mocks base method. +func (m *MockFullNode) ChainGetRandomnessFromTickets(arg0 context.Context, arg1 chain0.TipSetKey, arg2 crypto.DomainSeparationTag, arg3 abi.ChainEpoch, arg4 []byte) (abi.Randomness, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetRandomnessFromTickets", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(abi.Randomness) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetRandomnessFromTickets indicates an expected call of ChainGetRandomnessFromTickets. +func (mr *MockFullNodeMockRecorder) ChainGetRandomnessFromTickets(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetRandomnessFromTickets", reflect.TypeOf((*MockFullNode)(nil).ChainGetRandomnessFromTickets), arg0, arg1, arg2, arg3, arg4) +} + +// ChainGetReceipts mocks base method. +func (m *MockFullNode) ChainGetReceipts(arg0 context.Context, arg1 cid.Cid) ([]chain0.MessageReceipt, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetReceipts", arg0, arg1) + ret0, _ := ret[0].([]chain0.MessageReceipt) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetReceipts indicates an expected call of ChainGetReceipts. +func (mr *MockFullNodeMockRecorder) ChainGetReceipts(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetReceipts", reflect.TypeOf((*MockFullNode)(nil).ChainGetReceipts), arg0, arg1) +} + +// ChainGetTipSet mocks base method. +func (m *MockFullNode) ChainGetTipSet(arg0 context.Context, arg1 chain0.TipSetKey) (*chain0.TipSet, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetTipSet", arg0, arg1) + ret0, _ := ret[0].(*chain0.TipSet) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetTipSet indicates an expected call of ChainGetTipSet. +func (mr *MockFullNodeMockRecorder) ChainGetTipSet(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetTipSet", reflect.TypeOf((*MockFullNode)(nil).ChainGetTipSet), arg0, arg1) +} + +// ChainGetTipSetAfterHeight mocks base method. +func (m *MockFullNode) ChainGetTipSetAfterHeight(arg0 context.Context, arg1 abi.ChainEpoch, arg2 chain0.TipSetKey) (*chain0.TipSet, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetTipSetAfterHeight", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.TipSet) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetTipSetAfterHeight indicates an expected call of ChainGetTipSetAfterHeight. +func (mr *MockFullNodeMockRecorder) ChainGetTipSetAfterHeight(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetTipSetAfterHeight", reflect.TypeOf((*MockFullNode)(nil).ChainGetTipSetAfterHeight), arg0, arg1, arg2) +} + +// ChainGetTipSetByHeight mocks base method. +func (m *MockFullNode) ChainGetTipSetByHeight(arg0 context.Context, arg1 abi.ChainEpoch, arg2 chain0.TipSetKey) (*chain0.TipSet, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainGetTipSetByHeight", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.TipSet) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainGetTipSetByHeight indicates an expected call of ChainGetTipSetByHeight. +func (mr *MockFullNodeMockRecorder) ChainGetTipSetByHeight(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainGetTipSetByHeight", reflect.TypeOf((*MockFullNode)(nil).ChainGetTipSetByHeight), arg0, arg1, arg2) +} + +// ChainHasObj mocks base method. +func (m *MockFullNode) ChainHasObj(arg0 context.Context, arg1 cid.Cid) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainHasObj", arg0, arg1) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainHasObj indicates an expected call of ChainHasObj. +func (mr *MockFullNodeMockRecorder) ChainHasObj(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainHasObj", reflect.TypeOf((*MockFullNode)(nil).ChainHasObj), arg0, arg1) +} + +// ChainHead mocks base method. +func (m *MockFullNode) ChainHead(arg0 context.Context) (*chain0.TipSet, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainHead", arg0) + ret0, _ := ret[0].(*chain0.TipSet) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainHead indicates an expected call of ChainHead. +func (mr *MockFullNodeMockRecorder) ChainHead(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainHead", reflect.TypeOf((*MockFullNode)(nil).ChainHead), arg0) +} + +// ChainList mocks base method. +func (m *MockFullNode) ChainList(arg0 context.Context, arg1 chain0.TipSetKey, arg2 int) ([]chain0.TipSetKey, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainList", arg0, arg1, arg2) + ret0, _ := ret[0].([]chain0.TipSetKey) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainList indicates an expected call of ChainList. +func (mr *MockFullNodeMockRecorder) ChainList(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainList", reflect.TypeOf((*MockFullNode)(nil).ChainList), arg0, arg1, arg2) +} + +// ChainNotify mocks base method. +func (m *MockFullNode) ChainNotify(arg0 context.Context) (<-chan []*chain.HeadChange, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainNotify", arg0) + ret0, _ := ret[0].(<-chan []*chain.HeadChange) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainNotify indicates an expected call of ChainNotify. +func (mr *MockFullNodeMockRecorder) ChainNotify(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainNotify", reflect.TypeOf((*MockFullNode)(nil).ChainNotify), arg0) +} + +// ChainReadObj mocks base method. +func (m *MockFullNode) ChainReadObj(arg0 context.Context, arg1 cid.Cid) ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainReadObj", arg0, arg1) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainReadObj indicates an expected call of ChainReadObj. +func (mr *MockFullNodeMockRecorder) ChainReadObj(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainReadObj", reflect.TypeOf((*MockFullNode)(nil).ChainReadObj), arg0, arg1) +} + +// ChainSetHead mocks base method. +func (m *MockFullNode) ChainSetHead(arg0 context.Context, arg1 chain0.TipSetKey) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainSetHead", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// ChainSetHead indicates an expected call of ChainSetHead. +func (mr *MockFullNodeMockRecorder) ChainSetHead(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainSetHead", reflect.TypeOf((*MockFullNode)(nil).ChainSetHead), arg0, arg1) +} + +// ChainStatObj mocks base method. +func (m *MockFullNode) ChainStatObj(arg0 context.Context, arg1, arg2 cid.Cid) (chain.ObjStat, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainStatObj", arg0, arg1, arg2) + ret0, _ := ret[0].(chain.ObjStat) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainStatObj indicates an expected call of ChainStatObj. +func (mr *MockFullNodeMockRecorder) ChainStatObj(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainStatObj", reflect.TypeOf((*MockFullNode)(nil).ChainStatObj), arg0, arg1, arg2) +} + +// ChainSyncHandleNewTipSet mocks base method. +func (m *MockFullNode) ChainSyncHandleNewTipSet(arg0 context.Context, arg1 *chain0.ChainInfo) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainSyncHandleNewTipSet", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// ChainSyncHandleNewTipSet indicates an expected call of ChainSyncHandleNewTipSet. +func (mr *MockFullNodeMockRecorder) ChainSyncHandleNewTipSet(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainSyncHandleNewTipSet", reflect.TypeOf((*MockFullNode)(nil).ChainSyncHandleNewTipSet), arg0, arg1) +} + +// ChainTipSetWeight mocks base method. +func (m *MockFullNode) ChainTipSetWeight(arg0 context.Context, arg1 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ChainTipSetWeight", arg0, arg1) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ChainTipSetWeight indicates an expected call of ChainTipSetWeight. +func (mr *MockFullNodeMockRecorder) ChainTipSetWeight(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ChainTipSetWeight", reflect.TypeOf((*MockFullNode)(nil).ChainTipSetWeight), arg0, arg1) +} + +// Concurrent mocks base method. +func (m *MockFullNode) Concurrent(arg0 context.Context) int64 { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Concurrent", arg0) + ret0, _ := ret[0].(int64) + return ret0 +} + +// Concurrent indicates an expected call of Concurrent. +func (mr *MockFullNodeMockRecorder) Concurrent(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Concurrent", reflect.TypeOf((*MockFullNode)(nil).Concurrent), arg0) +} + +// GasBatchEstimateMessageGas mocks base method. +func (m *MockFullNode) GasBatchEstimateMessageGas(arg0 context.Context, arg1 []*chain.EstimateMessage, arg2 uint64, arg3 chain0.TipSetKey) ([]*chain.EstimateResult, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GasBatchEstimateMessageGas", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].([]*chain.EstimateResult) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GasBatchEstimateMessageGas indicates an expected call of GasBatchEstimateMessageGas. +func (mr *MockFullNodeMockRecorder) GasBatchEstimateMessageGas(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GasBatchEstimateMessageGas", reflect.TypeOf((*MockFullNode)(nil).GasBatchEstimateMessageGas), arg0, arg1, arg2, arg3) +} + +// GasEstimateFeeCap mocks base method. +func (m *MockFullNode) GasEstimateFeeCap(arg0 context.Context, arg1 *chain0.Message, arg2 int64, arg3 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GasEstimateFeeCap", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GasEstimateFeeCap indicates an expected call of GasEstimateFeeCap. +func (mr *MockFullNodeMockRecorder) GasEstimateFeeCap(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GasEstimateFeeCap", reflect.TypeOf((*MockFullNode)(nil).GasEstimateFeeCap), arg0, arg1, arg2, arg3) +} + +// GasEstimateGasLimit mocks base method. +func (m *MockFullNode) GasEstimateGasLimit(arg0 context.Context, arg1 *chain0.Message, arg2 chain0.TipSetKey) (int64, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GasEstimateGasLimit", arg0, arg1, arg2) + ret0, _ := ret[0].(int64) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GasEstimateGasLimit indicates an expected call of GasEstimateGasLimit. +func (mr *MockFullNodeMockRecorder) GasEstimateGasLimit(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GasEstimateGasLimit", reflect.TypeOf((*MockFullNode)(nil).GasEstimateGasLimit), arg0, arg1, arg2) +} + +// GasEstimateGasPremium mocks base method. +func (m *MockFullNode) GasEstimateGasPremium(arg0 context.Context, arg1 uint64, arg2 address.Address, arg3 int64, arg4 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GasEstimateGasPremium", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GasEstimateGasPremium indicates an expected call of GasEstimateGasPremium. +func (mr *MockFullNodeMockRecorder) GasEstimateGasPremium(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GasEstimateGasPremium", reflect.TypeOf((*MockFullNode)(nil).GasEstimateGasPremium), arg0, arg1, arg2, arg3, arg4) +} + +// GasEstimateMessageGas mocks base method. +func (m *MockFullNode) GasEstimateMessageGas(arg0 context.Context, arg1 *chain0.Message, arg2 *chain.MessageSendSpec, arg3 chain0.TipSetKey) (*chain0.Message, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GasEstimateMessageGas", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*chain0.Message) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GasEstimateMessageGas indicates an expected call of GasEstimateMessageGas. +func (mr *MockFullNodeMockRecorder) GasEstimateMessageGas(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GasEstimateMessageGas", reflect.TypeOf((*MockFullNode)(nil).GasEstimateMessageGas), arg0, arg1, arg2, arg3) +} + +// GetActor mocks base method. +func (m *MockFullNode) GetActor(arg0 context.Context, arg1 address.Address) (*chain0.Actor, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetActor", arg0, arg1) + ret0, _ := ret[0].(*chain0.Actor) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetActor indicates an expected call of GetActor. +func (mr *MockFullNodeMockRecorder) GetActor(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetActor", reflect.TypeOf((*MockFullNode)(nil).GetActor), arg0, arg1) +} + +// GetEntry mocks base method. +func (m *MockFullNode) GetEntry(arg0 context.Context, arg1 abi.ChainEpoch, arg2 uint64) (*chain0.BeaconEntry, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetEntry", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.BeaconEntry) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetEntry indicates an expected call of GetEntry. +func (mr *MockFullNodeMockRecorder) GetEntry(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetEntry", reflect.TypeOf((*MockFullNode)(nil).GetEntry), arg0, arg1, arg2) +} + +// GetFullBlock mocks base method. +func (m *MockFullNode) GetFullBlock(arg0 context.Context, arg1 cid.Cid) (*chain0.FullBlock, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetFullBlock", arg0, arg1) + ret0, _ := ret[0].(*chain0.FullBlock) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetFullBlock indicates an expected call of GetFullBlock. +func (mr *MockFullNodeMockRecorder) GetFullBlock(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFullBlock", reflect.TypeOf((*MockFullNode)(nil).GetFullBlock), arg0, arg1) +} + +// GetParentStateRootActor mocks base method. +func (m *MockFullNode) GetParentStateRootActor(arg0 context.Context, arg1 *chain0.TipSet, arg2 address.Address) (*chain0.Actor, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetParentStateRootActor", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.Actor) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetParentStateRootActor indicates an expected call of GetParentStateRootActor. +func (mr *MockFullNodeMockRecorder) GetParentStateRootActor(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetParentStateRootActor", reflect.TypeOf((*MockFullNode)(nil).GetParentStateRootActor), arg0, arg1, arg2) +} + +// HasPassword mocks base method. +func (m *MockFullNode) HasPassword(arg0 context.Context) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "HasPassword", arg0) + ret0, _ := ret[0].(bool) + return ret0 +} + +// HasPassword indicates an expected call of HasPassword. +func (mr *MockFullNodeMockRecorder) HasPassword(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "HasPassword", reflect.TypeOf((*MockFullNode)(nil).HasPassword), arg0) +} + +// ListActor mocks base method. +func (m *MockFullNode) ListActor(arg0 context.Context) (map[address.Address]*chain0.Actor, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ListActor", arg0) + ret0, _ := ret[0].(map[address.Address]*chain0.Actor) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ListActor indicates an expected call of ListActor. +func (mr *MockFullNodeMockRecorder) ListActor(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListActor", reflect.TypeOf((*MockFullNode)(nil).ListActor), arg0) +} + +// LockWallet mocks base method. +func (m *MockFullNode) LockWallet(arg0 context.Context) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "LockWallet", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// LockWallet indicates an expected call of LockWallet. +func (mr *MockFullNodeMockRecorder) LockWallet(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LockWallet", reflect.TypeOf((*MockFullNode)(nil).LockWallet), arg0) +} + +// MessageWait mocks base method. +func (m *MockFullNode) MessageWait(arg0 context.Context, arg1 cid.Cid, arg2, arg3 abi.ChainEpoch) (*chain.ChainMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MessageWait", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*chain.ChainMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MessageWait indicates an expected call of MessageWait. +func (mr *MockFullNodeMockRecorder) MessageWait(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MessageWait", reflect.TypeOf((*MockFullNode)(nil).MessageWait), arg0, arg1, arg2, arg3) +} + +// MinerCreateBlock mocks base method. +func (m *MockFullNode) MinerCreateBlock(arg0 context.Context, arg1 *chain.BlockTemplate) (*chain0.BlockMsg, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MinerCreateBlock", arg0, arg1) + ret0, _ := ret[0].(*chain0.BlockMsg) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MinerCreateBlock indicates an expected call of MinerCreateBlock. +func (mr *MockFullNodeMockRecorder) MinerCreateBlock(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MinerCreateBlock", reflect.TypeOf((*MockFullNode)(nil).MinerCreateBlock), arg0, arg1) +} + +// MinerGetBaseInfo mocks base method. +func (m *MockFullNode) MinerGetBaseInfo(arg0 context.Context, arg1 address.Address, arg2 abi.ChainEpoch, arg3 chain0.TipSetKey) (*chain.MiningBaseInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MinerGetBaseInfo", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*chain.MiningBaseInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MinerGetBaseInfo indicates an expected call of MinerGetBaseInfo. +func (mr *MockFullNodeMockRecorder) MinerGetBaseInfo(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MinerGetBaseInfo", reflect.TypeOf((*MockFullNode)(nil).MinerGetBaseInfo), arg0, arg1, arg2, arg3) +} + +// MpoolBatchPush mocks base method. +func (m *MockFullNode) MpoolBatchPush(arg0 context.Context, arg1 []*chain0.SignedMessage) ([]cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolBatchPush", arg0, arg1) + ret0, _ := ret[0].([]cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolBatchPush indicates an expected call of MpoolBatchPush. +func (mr *MockFullNodeMockRecorder) MpoolBatchPush(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolBatchPush", reflect.TypeOf((*MockFullNode)(nil).MpoolBatchPush), arg0, arg1) +} + +// MpoolBatchPushMessage mocks base method. +func (m *MockFullNode) MpoolBatchPushMessage(arg0 context.Context, arg1 []*chain0.Message, arg2 *chain.MessageSendSpec) ([]*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolBatchPushMessage", arg0, arg1, arg2) + ret0, _ := ret[0].([]*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolBatchPushMessage indicates an expected call of MpoolBatchPushMessage. +func (mr *MockFullNodeMockRecorder) MpoolBatchPushMessage(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolBatchPushMessage", reflect.TypeOf((*MockFullNode)(nil).MpoolBatchPushMessage), arg0, arg1, arg2) +} + +// MpoolBatchPushUntrusted mocks base method. +func (m *MockFullNode) MpoolBatchPushUntrusted(arg0 context.Context, arg1 []*chain0.SignedMessage) ([]cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolBatchPushUntrusted", arg0, arg1) + ret0, _ := ret[0].([]cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolBatchPushUntrusted indicates an expected call of MpoolBatchPushUntrusted. +func (mr *MockFullNodeMockRecorder) MpoolBatchPushUntrusted(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolBatchPushUntrusted", reflect.TypeOf((*MockFullNode)(nil).MpoolBatchPushUntrusted), arg0, arg1) +} + +// MpoolCheckMessages mocks base method. +func (m *MockFullNode) MpoolCheckMessages(arg0 context.Context, arg1 []*messagepool.MessagePrototype) ([][]messagepool.MessageCheckStatus, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolCheckMessages", arg0, arg1) + ret0, _ := ret[0].([][]messagepool.MessageCheckStatus) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolCheckMessages indicates an expected call of MpoolCheckMessages. +func (mr *MockFullNodeMockRecorder) MpoolCheckMessages(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolCheckMessages", reflect.TypeOf((*MockFullNode)(nil).MpoolCheckMessages), arg0, arg1) +} + +// MpoolCheckPendingMessages mocks base method. +func (m *MockFullNode) MpoolCheckPendingMessages(arg0 context.Context, arg1 address.Address) ([][]messagepool.MessageCheckStatus, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolCheckPendingMessages", arg0, arg1) + ret0, _ := ret[0].([][]messagepool.MessageCheckStatus) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolCheckPendingMessages indicates an expected call of MpoolCheckPendingMessages. +func (mr *MockFullNodeMockRecorder) MpoolCheckPendingMessages(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolCheckPendingMessages", reflect.TypeOf((*MockFullNode)(nil).MpoolCheckPendingMessages), arg0, arg1) +} + +// MpoolCheckReplaceMessages mocks base method. +func (m *MockFullNode) MpoolCheckReplaceMessages(arg0 context.Context, arg1 []*chain0.Message) ([][]messagepool.MessageCheckStatus, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolCheckReplaceMessages", arg0, arg1) + ret0, _ := ret[0].([][]messagepool.MessageCheckStatus) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolCheckReplaceMessages indicates an expected call of MpoolCheckReplaceMessages. +func (mr *MockFullNodeMockRecorder) MpoolCheckReplaceMessages(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolCheckReplaceMessages", reflect.TypeOf((*MockFullNode)(nil).MpoolCheckReplaceMessages), arg0, arg1) +} + +// MpoolClear mocks base method. +func (m *MockFullNode) MpoolClear(arg0 context.Context, arg1 bool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolClear", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// MpoolClear indicates an expected call of MpoolClear. +func (mr *MockFullNodeMockRecorder) MpoolClear(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolClear", reflect.TypeOf((*MockFullNode)(nil).MpoolClear), arg0, arg1) +} + +// MpoolDeleteByAdress mocks base method. +func (m *MockFullNode) MpoolDeleteByAdress(arg0 context.Context, arg1 address.Address) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolDeleteByAdress", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// MpoolDeleteByAdress indicates an expected call of MpoolDeleteByAdress. +func (mr *MockFullNodeMockRecorder) MpoolDeleteByAdress(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolDeleteByAdress", reflect.TypeOf((*MockFullNode)(nil).MpoolDeleteByAdress), arg0, arg1) +} + +// MpoolGetConfig mocks base method. +func (m *MockFullNode) MpoolGetConfig(arg0 context.Context) (*messagepool.MpoolConfig, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolGetConfig", arg0) + ret0, _ := ret[0].(*messagepool.MpoolConfig) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolGetConfig indicates an expected call of MpoolGetConfig. +func (mr *MockFullNodeMockRecorder) MpoolGetConfig(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolGetConfig", reflect.TypeOf((*MockFullNode)(nil).MpoolGetConfig), arg0) +} + +// MpoolGetNonce mocks base method. +func (m *MockFullNode) MpoolGetNonce(arg0 context.Context, arg1 address.Address) (uint64, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolGetNonce", arg0, arg1) + ret0, _ := ret[0].(uint64) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolGetNonce indicates an expected call of MpoolGetNonce. +func (mr *MockFullNodeMockRecorder) MpoolGetNonce(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolGetNonce", reflect.TypeOf((*MockFullNode)(nil).MpoolGetNonce), arg0, arg1) +} + +// MpoolPending mocks base method. +func (m *MockFullNode) MpoolPending(arg0 context.Context, arg1 chain0.TipSetKey) ([]*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPending", arg0, arg1) + ret0, _ := ret[0].([]*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolPending indicates an expected call of MpoolPending. +func (mr *MockFullNodeMockRecorder) MpoolPending(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPending", reflect.TypeOf((*MockFullNode)(nil).MpoolPending), arg0, arg1) +} + +// MpoolPublishByAddr mocks base method. +func (m *MockFullNode) MpoolPublishByAddr(arg0 context.Context, arg1 address.Address) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPublishByAddr", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// MpoolPublishByAddr indicates an expected call of MpoolPublishByAddr. +func (mr *MockFullNodeMockRecorder) MpoolPublishByAddr(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPublishByAddr", reflect.TypeOf((*MockFullNode)(nil).MpoolPublishByAddr), arg0, arg1) +} + +// MpoolPublishMessage mocks base method. +func (m *MockFullNode) MpoolPublishMessage(arg0 context.Context, arg1 *chain0.SignedMessage) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPublishMessage", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// MpoolPublishMessage indicates an expected call of MpoolPublishMessage. +func (mr *MockFullNodeMockRecorder) MpoolPublishMessage(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPublishMessage", reflect.TypeOf((*MockFullNode)(nil).MpoolPublishMessage), arg0, arg1) +} + +// MpoolPush mocks base method. +func (m *MockFullNode) MpoolPush(arg0 context.Context, arg1 *chain0.SignedMessage) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPush", arg0, arg1) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolPush indicates an expected call of MpoolPush. +func (mr *MockFullNodeMockRecorder) MpoolPush(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPush", reflect.TypeOf((*MockFullNode)(nil).MpoolPush), arg0, arg1) +} + +// MpoolPushMessage mocks base method. +func (m *MockFullNode) MpoolPushMessage(arg0 context.Context, arg1 *chain0.Message, arg2 *chain.MessageSendSpec) (*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPushMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolPushMessage indicates an expected call of MpoolPushMessage. +func (mr *MockFullNodeMockRecorder) MpoolPushMessage(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPushMessage", reflect.TypeOf((*MockFullNode)(nil).MpoolPushMessage), arg0, arg1, arg2) +} + +// MpoolPushUntrusted mocks base method. +func (m *MockFullNode) MpoolPushUntrusted(arg0 context.Context, arg1 *chain0.SignedMessage) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolPushUntrusted", arg0, arg1) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolPushUntrusted indicates an expected call of MpoolPushUntrusted. +func (mr *MockFullNodeMockRecorder) MpoolPushUntrusted(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolPushUntrusted", reflect.TypeOf((*MockFullNode)(nil).MpoolPushUntrusted), arg0, arg1) +} + +// MpoolSelect mocks base method. +func (m *MockFullNode) MpoolSelect(arg0 context.Context, arg1 chain0.TipSetKey, arg2 float64) ([]*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolSelect", arg0, arg1, arg2) + ret0, _ := ret[0].([]*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolSelect indicates an expected call of MpoolSelect. +func (mr *MockFullNodeMockRecorder) MpoolSelect(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolSelect", reflect.TypeOf((*MockFullNode)(nil).MpoolSelect), arg0, arg1, arg2) +} + +// MpoolSelects mocks base method. +func (m *MockFullNode) MpoolSelects(arg0 context.Context, arg1 chain0.TipSetKey, arg2 []float64) ([][]*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolSelects", arg0, arg1, arg2) + ret0, _ := ret[0].([][]*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolSelects indicates an expected call of MpoolSelects. +func (mr *MockFullNodeMockRecorder) MpoolSelects(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolSelects", reflect.TypeOf((*MockFullNode)(nil).MpoolSelects), arg0, arg1, arg2) +} + +// MpoolSetConfig mocks base method. +func (m *MockFullNode) MpoolSetConfig(arg0 context.Context, arg1 *messagepool.MpoolConfig) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolSetConfig", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// MpoolSetConfig indicates an expected call of MpoolSetConfig. +func (mr *MockFullNodeMockRecorder) MpoolSetConfig(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolSetConfig", reflect.TypeOf((*MockFullNode)(nil).MpoolSetConfig), arg0, arg1) +} + +// MpoolSub mocks base method. +func (m *MockFullNode) MpoolSub(arg0 context.Context) (<-chan messagepool.MpoolUpdate, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MpoolSub", arg0) + ret0, _ := ret[0].(<-chan messagepool.MpoolUpdate) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MpoolSub indicates an expected call of MpoolSub. +func (mr *MockFullNodeMockRecorder) MpoolSub(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MpoolSub", reflect.TypeOf((*MockFullNode)(nil).MpoolSub), arg0) +} + +// MsigAddApprove mocks base method. +func (m *MockFullNode) MsigAddApprove(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5 address.Address, arg6 bool) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigAddApprove", arg0, arg1, arg2, arg3, arg4, arg5, arg6) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigAddApprove indicates an expected call of MsigAddApprove. +func (mr *MockFullNodeMockRecorder) MsigAddApprove(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddApprove", reflect.TypeOf((*MockFullNode)(nil).MsigAddApprove), arg0, arg1, arg2, arg3, arg4, arg5, arg6) +} + +// MsigAddCancel mocks base method. +func (m *MockFullNode) MsigAddCancel(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4 address.Address, arg5 bool) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigAddCancel", arg0, arg1, arg2, arg3, arg4, arg5) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigAddCancel indicates an expected call of MsigAddCancel. +func (mr *MockFullNodeMockRecorder) MsigAddCancel(arg0, arg1, arg2, arg3, arg4, arg5 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddCancel", reflect.TypeOf((*MockFullNode)(nil).MsigAddCancel), arg0, arg1, arg2, arg3, arg4, arg5) +} + +// MsigAddPropose mocks base method. +func (m *MockFullNode) MsigAddPropose(arg0 context.Context, arg1, arg2, arg3 address.Address, arg4 bool) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigAddPropose", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigAddPropose indicates an expected call of MsigAddPropose. +func (mr *MockFullNodeMockRecorder) MsigAddPropose(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigAddPropose", reflect.TypeOf((*MockFullNode)(nil).MsigAddPropose), arg0, arg1, arg2, arg3, arg4) +} + +// MsigApprove mocks base method. +func (m *MockFullNode) MsigApprove(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigApprove", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigApprove indicates an expected call of MsigApprove. +func (mr *MockFullNodeMockRecorder) MsigApprove(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigApprove", reflect.TypeOf((*MockFullNode)(nil).MsigApprove), arg0, arg1, arg2, arg3) +} + +// MsigApproveTxnHash mocks base method. +func (m *MockFullNode) MsigApproveTxnHash(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3, arg4 address.Address, arg5 big.Int, arg6 address.Address, arg7 uint64, arg8 []byte) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigApproveTxnHash", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigApproveTxnHash indicates an expected call of MsigApproveTxnHash. +func (mr *MockFullNodeMockRecorder) MsigApproveTxnHash(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigApproveTxnHash", reflect.TypeOf((*MockFullNode)(nil).MsigApproveTxnHash), arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) +} + +// MsigCancel mocks base method. +func (m *MockFullNode) MsigCancel(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 address.Address, arg4 big.Int, arg5 address.Address, arg6 uint64, arg7 []byte) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigCancel", arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigCancel indicates an expected call of MsigCancel. +func (mr *MockFullNodeMockRecorder) MsigCancel(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCancel", reflect.TypeOf((*MockFullNode)(nil).MsigCancel), arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) +} + +// MsigCreate mocks base method. +func (m *MockFullNode) MsigCreate(arg0 context.Context, arg1 uint64, arg2 []address.Address, arg3 abi.ChainEpoch, arg4 big.Int, arg5 address.Address, arg6 big.Int) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigCreate", arg0, arg1, arg2, arg3, arg4, arg5, arg6) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigCreate indicates an expected call of MsigCreate. +func (mr *MockFullNodeMockRecorder) MsigCreate(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigCreate", reflect.TypeOf((*MockFullNode)(nil).MsigCreate), arg0, arg1, arg2, arg3, arg4, arg5, arg6) +} + +// MsigGetVested mocks base method. +func (m *MockFullNode) MsigGetVested(arg0 context.Context, arg1 address.Address, arg2, arg3 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigGetVested", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigGetVested indicates an expected call of MsigGetVested. +func (mr *MockFullNodeMockRecorder) MsigGetVested(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigGetVested", reflect.TypeOf((*MockFullNode)(nil).MsigGetVested), arg0, arg1, arg2, arg3) +} + +// MsigPropose mocks base method. +func (m *MockFullNode) MsigPropose(arg0 context.Context, arg1, arg2 address.Address, arg3 big.Int, arg4 address.Address, arg5 uint64, arg6 []byte) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigPropose", arg0, arg1, arg2, arg3, arg4, arg5, arg6) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigPropose indicates an expected call of MsigPropose. +func (mr *MockFullNodeMockRecorder) MsigPropose(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigPropose", reflect.TypeOf((*MockFullNode)(nil).MsigPropose), arg0, arg1, arg2, arg3, arg4, arg5, arg6) +} + +// MsigRemoveSigner mocks base method. +func (m *MockFullNode) MsigRemoveSigner(arg0 context.Context, arg1, arg2, arg3 address.Address, arg4 bool) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigRemoveSigner", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigRemoveSigner indicates an expected call of MsigRemoveSigner. +func (mr *MockFullNodeMockRecorder) MsigRemoveSigner(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigRemoveSigner", reflect.TypeOf((*MockFullNode)(nil).MsigRemoveSigner), arg0, arg1, arg2, arg3, arg4) +} + +// MsigSwapApprove mocks base method. +func (m *MockFullNode) MsigSwapApprove(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5, arg6 address.Address) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigSwapApprove", arg0, arg1, arg2, arg3, arg4, arg5, arg6) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigSwapApprove indicates an expected call of MsigSwapApprove. +func (mr *MockFullNodeMockRecorder) MsigSwapApprove(arg0, arg1, arg2, arg3, arg4, arg5, arg6 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapApprove", reflect.TypeOf((*MockFullNode)(nil).MsigSwapApprove), arg0, arg1, arg2, arg3, arg4, arg5, arg6) +} + +// MsigSwapCancel mocks base method. +func (m *MockFullNode) MsigSwapCancel(arg0 context.Context, arg1, arg2 address.Address, arg3 uint64, arg4, arg5 address.Address) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigSwapCancel", arg0, arg1, arg2, arg3, arg4, arg5) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigSwapCancel indicates an expected call of MsigSwapCancel. +func (mr *MockFullNodeMockRecorder) MsigSwapCancel(arg0, arg1, arg2, arg3, arg4, arg5 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapCancel", reflect.TypeOf((*MockFullNode)(nil).MsigSwapCancel), arg0, arg1, arg2, arg3, arg4, arg5) +} + +// MsigSwapPropose mocks base method. +func (m *MockFullNode) MsigSwapPropose(arg0 context.Context, arg1, arg2, arg3, arg4 address.Address) (*messagepool.MessagePrototype, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MsigSwapPropose", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(*messagepool.MessagePrototype) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// MsigSwapPropose indicates an expected call of MsigSwapPropose. +func (mr *MockFullNodeMockRecorder) MsigSwapPropose(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MsigSwapPropose", reflect.TypeOf((*MockFullNode)(nil).MsigSwapPropose), arg0, arg1, arg2, arg3, arg4) +} + +// NetAddrsListen mocks base method. +func (m *MockFullNode) NetAddrsListen(arg0 context.Context) (peer.AddrInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetAddrsListen", arg0) + ret0, _ := ret[0].(peer.AddrInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetAddrsListen indicates an expected call of NetAddrsListen. +func (mr *MockFullNodeMockRecorder) NetAddrsListen(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetAddrsListen", reflect.TypeOf((*MockFullNode)(nil).NetAddrsListen), arg0) +} + +// NetworkConnect mocks base method. +func (m *MockFullNode) NetworkConnect(arg0 context.Context, arg1 []string) (<-chan net.ConnectionResult, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkConnect", arg0, arg1) + ret0, _ := ret[0].(<-chan net.ConnectionResult) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetworkConnect indicates an expected call of NetworkConnect. +func (mr *MockFullNodeMockRecorder) NetworkConnect(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkConnect", reflect.TypeOf((*MockFullNode)(nil).NetworkConnect), arg0, arg1) +} + +// NetworkFindPeer mocks base method. +func (m *MockFullNode) NetworkFindPeer(arg0 context.Context, arg1 peer.ID) (peer.AddrInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkFindPeer", arg0, arg1) + ret0, _ := ret[0].(peer.AddrInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetworkFindPeer indicates an expected call of NetworkFindPeer. +func (mr *MockFullNodeMockRecorder) NetworkFindPeer(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkFindPeer", reflect.TypeOf((*MockFullNode)(nil).NetworkFindPeer), arg0, arg1) +} + +// NetworkFindProvidersAsync mocks base method. +func (m *MockFullNode) NetworkFindProvidersAsync(arg0 context.Context, arg1 cid.Cid, arg2 int) <-chan peer.AddrInfo { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkFindProvidersAsync", arg0, arg1, arg2) + ret0, _ := ret[0].(<-chan peer.AddrInfo) + return ret0 +} + +// NetworkFindProvidersAsync indicates an expected call of NetworkFindProvidersAsync. +func (mr *MockFullNodeMockRecorder) NetworkFindProvidersAsync(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkFindProvidersAsync", reflect.TypeOf((*MockFullNode)(nil).NetworkFindProvidersAsync), arg0, arg1, arg2) +} + +// NetworkGetBandwidthStats mocks base method. +func (m *MockFullNode) NetworkGetBandwidthStats(arg0 context.Context) metrics.Stats { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkGetBandwidthStats", arg0) + ret0, _ := ret[0].(metrics.Stats) + return ret0 +} + +// NetworkGetBandwidthStats indicates an expected call of NetworkGetBandwidthStats. +func (mr *MockFullNodeMockRecorder) NetworkGetBandwidthStats(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkGetBandwidthStats", reflect.TypeOf((*MockFullNode)(nil).NetworkGetBandwidthStats), arg0) +} + +// NetworkGetClosestPeers mocks base method. +func (m *MockFullNode) NetworkGetClosestPeers(arg0 context.Context, arg1 string) ([]peer.ID, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkGetClosestPeers", arg0, arg1) + ret0, _ := ret[0].([]peer.ID) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetworkGetClosestPeers indicates an expected call of NetworkGetClosestPeers. +func (mr *MockFullNodeMockRecorder) NetworkGetClosestPeers(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkGetClosestPeers", reflect.TypeOf((*MockFullNode)(nil).NetworkGetClosestPeers), arg0, arg1) +} + +// NetworkGetPeerAddresses mocks base method. +func (m *MockFullNode) NetworkGetPeerAddresses(arg0 context.Context) []multiaddr.Multiaddr { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkGetPeerAddresses", arg0) + ret0, _ := ret[0].([]multiaddr.Multiaddr) + return ret0 +} + +// NetworkGetPeerAddresses indicates an expected call of NetworkGetPeerAddresses. +func (mr *MockFullNodeMockRecorder) NetworkGetPeerAddresses(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkGetPeerAddresses", reflect.TypeOf((*MockFullNode)(nil).NetworkGetPeerAddresses), arg0) +} + +// NetworkGetPeerID mocks base method. +func (m *MockFullNode) NetworkGetPeerID(arg0 context.Context) peer.ID { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkGetPeerID", arg0) + ret0, _ := ret[0].(peer.ID) + return ret0 +} + +// NetworkGetPeerID indicates an expected call of NetworkGetPeerID. +func (mr *MockFullNodeMockRecorder) NetworkGetPeerID(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkGetPeerID", reflect.TypeOf((*MockFullNode)(nil).NetworkGetPeerID), arg0) +} + +// NetworkPeers mocks base method. +func (m *MockFullNode) NetworkPeers(arg0 context.Context, arg1, arg2, arg3 bool) (*net.SwarmConnInfos, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "NetworkPeers", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*net.SwarmConnInfos) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// NetworkPeers indicates an expected call of NetworkPeers. +func (mr *MockFullNodeMockRecorder) NetworkPeers(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NetworkPeers", reflect.TypeOf((*MockFullNode)(nil).NetworkPeers), arg0, arg1, arg2, arg3) +} + +// PaychAllocateLane mocks base method. +func (m *MockFullNode) PaychAllocateLane(arg0 context.Context, arg1 address.Address) (uint64, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychAllocateLane", arg0, arg1) + ret0, _ := ret[0].(uint64) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychAllocateLane indicates an expected call of PaychAllocateLane. +func (mr *MockFullNodeMockRecorder) PaychAllocateLane(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychAllocateLane", reflect.TypeOf((*MockFullNode)(nil).PaychAllocateLane), arg0, arg1) +} + +// PaychAvailableFunds mocks base method. +func (m *MockFullNode) PaychAvailableFunds(arg0 context.Context, arg1 address.Address) (*chain.ChannelAvailableFunds, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychAvailableFunds", arg0, arg1) + ret0, _ := ret[0].(*chain.ChannelAvailableFunds) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychAvailableFunds indicates an expected call of PaychAvailableFunds. +func (mr *MockFullNodeMockRecorder) PaychAvailableFunds(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychAvailableFunds", reflect.TypeOf((*MockFullNode)(nil).PaychAvailableFunds), arg0, arg1) +} + +// PaychAvailableFundsByFromTo mocks base method. +func (m *MockFullNode) PaychAvailableFundsByFromTo(arg0 context.Context, arg1, arg2 address.Address) (*chain.ChannelAvailableFunds, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychAvailableFundsByFromTo", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain.ChannelAvailableFunds) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychAvailableFundsByFromTo indicates an expected call of PaychAvailableFundsByFromTo. +func (mr *MockFullNodeMockRecorder) PaychAvailableFundsByFromTo(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychAvailableFundsByFromTo", reflect.TypeOf((*MockFullNode)(nil).PaychAvailableFundsByFromTo), arg0, arg1, arg2) +} + +// PaychCollect mocks base method. +func (m *MockFullNode) PaychCollect(arg0 context.Context, arg1 address.Address) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychCollect", arg0, arg1) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychCollect indicates an expected call of PaychCollect. +func (mr *MockFullNodeMockRecorder) PaychCollect(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychCollect", reflect.TypeOf((*MockFullNode)(nil).PaychCollect), arg0, arg1) +} + +// PaychGet mocks base method. +func (m *MockFullNode) PaychGet(arg0 context.Context, arg1, arg2 address.Address, arg3 big.Int) (*paych0.ChannelInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychGet", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*paych0.ChannelInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychGet indicates an expected call of PaychGet. +func (mr *MockFullNodeMockRecorder) PaychGet(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychGet", reflect.TypeOf((*MockFullNode)(nil).PaychGet), arg0, arg1, arg2, arg3) +} + +// PaychGetWaitReady mocks base method. +func (m *MockFullNode) PaychGetWaitReady(arg0 context.Context, arg1 cid.Cid) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychGetWaitReady", arg0, arg1) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychGetWaitReady indicates an expected call of PaychGetWaitReady. +func (mr *MockFullNodeMockRecorder) PaychGetWaitReady(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychGetWaitReady", reflect.TypeOf((*MockFullNode)(nil).PaychGetWaitReady), arg0, arg1) +} + +// PaychList mocks base method. +func (m *MockFullNode) PaychList(arg0 context.Context) ([]address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychList", arg0) + ret0, _ := ret[0].([]address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychList indicates an expected call of PaychList. +func (mr *MockFullNodeMockRecorder) PaychList(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychList", reflect.TypeOf((*MockFullNode)(nil).PaychList), arg0) +} + +// PaychNewPayment mocks base method. +func (m *MockFullNode) PaychNewPayment(arg0 context.Context, arg1, arg2 address.Address, arg3 []paych0.VoucherSpec) (*paych0.PaymentInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychNewPayment", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*paych0.PaymentInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychNewPayment indicates an expected call of PaychNewPayment. +func (mr *MockFullNodeMockRecorder) PaychNewPayment(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychNewPayment", reflect.TypeOf((*MockFullNode)(nil).PaychNewPayment), arg0, arg1, arg2, arg3) +} + +// PaychSettle mocks base method. +func (m *MockFullNode) PaychSettle(arg0 context.Context, arg1 address.Address) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychSettle", arg0, arg1) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychSettle indicates an expected call of PaychSettle. +func (mr *MockFullNodeMockRecorder) PaychSettle(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychSettle", reflect.TypeOf((*MockFullNode)(nil).PaychSettle), arg0, arg1) +} + +// PaychStatus mocks base method. +func (m *MockFullNode) PaychStatus(arg0 context.Context, arg1 address.Address) (*paych0.Status, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychStatus", arg0, arg1) + ret0, _ := ret[0].(*paych0.Status) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychStatus indicates an expected call of PaychStatus. +func (mr *MockFullNodeMockRecorder) PaychStatus(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychStatus", reflect.TypeOf((*MockFullNode)(nil).PaychStatus), arg0, arg1) +} + +// PaychVoucherAdd mocks base method. +func (m *MockFullNode) PaychVoucherAdd(arg0 context.Context, arg1 address.Address, arg2 *paych.SignedVoucher, arg3 []byte, arg4 big.Int) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherAdd", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychVoucherAdd indicates an expected call of PaychVoucherAdd. +func (mr *MockFullNodeMockRecorder) PaychVoucherAdd(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherAdd", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherAdd), arg0, arg1, arg2, arg3, arg4) +} + +// PaychVoucherCheckSpendable mocks base method. +func (m *MockFullNode) PaychVoucherCheckSpendable(arg0 context.Context, arg1 address.Address, arg2 *paych.SignedVoucher, arg3, arg4 []byte) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherCheckSpendable", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychVoucherCheckSpendable indicates an expected call of PaychVoucherCheckSpendable. +func (mr *MockFullNodeMockRecorder) PaychVoucherCheckSpendable(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherCheckSpendable", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherCheckSpendable), arg0, arg1, arg2, arg3, arg4) +} + +// PaychVoucherCheckValid mocks base method. +func (m *MockFullNode) PaychVoucherCheckValid(arg0 context.Context, arg1 address.Address, arg2 *paych.SignedVoucher) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherCheckValid", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// PaychVoucherCheckValid indicates an expected call of PaychVoucherCheckValid. +func (mr *MockFullNodeMockRecorder) PaychVoucherCheckValid(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherCheckValid", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherCheckValid), arg0, arg1, arg2) +} + +// PaychVoucherCreate mocks base method. +func (m *MockFullNode) PaychVoucherCreate(arg0 context.Context, arg1 address.Address, arg2 big.Int, arg3 uint64) (*paych0.VoucherCreateResult, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherCreate", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*paych0.VoucherCreateResult) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychVoucherCreate indicates an expected call of PaychVoucherCreate. +func (mr *MockFullNodeMockRecorder) PaychVoucherCreate(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherCreate", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherCreate), arg0, arg1, arg2, arg3) +} + +// PaychVoucherList mocks base method. +func (m *MockFullNode) PaychVoucherList(arg0 context.Context, arg1 address.Address) ([]*paych.SignedVoucher, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherList", arg0, arg1) + ret0, _ := ret[0].([]*paych.SignedVoucher) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychVoucherList indicates an expected call of PaychVoucherList. +func (mr *MockFullNodeMockRecorder) PaychVoucherList(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherList", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherList), arg0, arg1) +} + +// PaychVoucherSubmit mocks base method. +func (m *MockFullNode) PaychVoucherSubmit(arg0 context.Context, arg1 address.Address, arg2 *paych.SignedVoucher, arg3, arg4 []byte) (cid.Cid, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "PaychVoucherSubmit", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(cid.Cid) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// PaychVoucherSubmit indicates an expected call of PaychVoucherSubmit. +func (mr *MockFullNodeMockRecorder) PaychVoucherSubmit(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PaychVoucherSubmit", reflect.TypeOf((*MockFullNode)(nil).PaychVoucherSubmit), arg0, arg1, arg2, arg3, arg4) +} + +// ProtocolParameters mocks base method. +func (m *MockFullNode) ProtocolParameters(arg0 context.Context) (*chain.ProtocolParams, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProtocolParameters", arg0) + ret0, _ := ret[0].(*chain.ProtocolParams) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ProtocolParameters indicates an expected call of ProtocolParameters. +func (mr *MockFullNodeMockRecorder) ProtocolParameters(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProtocolParameters", reflect.TypeOf((*MockFullNode)(nil).ProtocolParameters), arg0) +} + +// ResolveToKeyAddr mocks base method. +func (m *MockFullNode) ResolveToKeyAddr(arg0 context.Context, arg1 address.Address, arg2 *chain0.TipSet) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ResolveToKeyAddr", arg0, arg1, arg2) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ResolveToKeyAddr indicates an expected call of ResolveToKeyAddr. +func (mr *MockFullNodeMockRecorder) ResolveToKeyAddr(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ResolveToKeyAddr", reflect.TypeOf((*MockFullNode)(nil).ResolveToKeyAddr), arg0, arg1, arg2) +} + +// SetConcurrent mocks base method. +func (m *MockFullNode) SetConcurrent(arg0 context.Context, arg1 int64) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetConcurrent", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetConcurrent indicates an expected call of SetConcurrent. +func (mr *MockFullNodeMockRecorder) SetConcurrent(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetConcurrent", reflect.TypeOf((*MockFullNode)(nil).SetConcurrent), arg0, arg1) +} + +// SetPassword mocks base method. +func (m *MockFullNode) SetPassword(arg0 context.Context, arg1 []byte) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetPassword", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// SetPassword indicates an expected call of SetPassword. +func (mr *MockFullNodeMockRecorder) SetPassword(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetPassword", reflect.TypeOf((*MockFullNode)(nil).SetPassword), arg0, arg1) +} + +// StateAccountKey mocks base method. +func (m *MockFullNode) StateAccountKey(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateAccountKey", arg0, arg1, arg2) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateAccountKey indicates an expected call of StateAccountKey. +func (mr *MockFullNodeMockRecorder) StateAccountKey(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateAccountKey", reflect.TypeOf((*MockFullNode)(nil).StateAccountKey), arg0, arg1, arg2) +} + +// StateCall mocks base method. +func (m *MockFullNode) StateCall(arg0 context.Context, arg1 *chain0.Message, arg2 chain0.TipSetKey) (*chain.InvocResult, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateCall", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain.InvocResult) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateCall indicates an expected call of StateCall. +func (mr *MockFullNodeMockRecorder) StateCall(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateCall", reflect.TypeOf((*MockFullNode)(nil).StateCall), arg0, arg1, arg2) +} + +// StateCirculatingSupply mocks base method. +func (m *MockFullNode) StateCirculatingSupply(arg0 context.Context, arg1 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateCirculatingSupply", arg0, arg1) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateCirculatingSupply indicates an expected call of StateCirculatingSupply. +func (mr *MockFullNodeMockRecorder) StateCirculatingSupply(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateCirculatingSupply", reflect.TypeOf((*MockFullNode)(nil).StateCirculatingSupply), arg0, arg1) +} + +// StateDealProviderCollateralBounds mocks base method. +func (m *MockFullNode) StateDealProviderCollateralBounds(arg0 context.Context, arg1 abi.PaddedPieceSize, arg2 bool, arg3 chain0.TipSetKey) (chain.DealCollateralBounds, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateDealProviderCollateralBounds", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(chain.DealCollateralBounds) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateDealProviderCollateralBounds indicates an expected call of StateDealProviderCollateralBounds. +func (mr *MockFullNodeMockRecorder) StateDealProviderCollateralBounds(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateDealProviderCollateralBounds", reflect.TypeOf((*MockFullNode)(nil).StateDealProviderCollateralBounds), arg0, arg1, arg2, arg3) +} + +// StateGetActor mocks base method. +func (m *MockFullNode) StateGetActor(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (*chain0.Actor, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetActor", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.Actor) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetActor indicates an expected call of StateGetActor. +func (mr *MockFullNodeMockRecorder) StateGetActor(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetActor", reflect.TypeOf((*MockFullNode)(nil).StateGetActor), arg0, arg1, arg2) +} + +// StateGetRandomnessFromBeacon mocks base method. +func (m *MockFullNode) StateGetRandomnessFromBeacon(arg0 context.Context, arg1 crypto.DomainSeparationTag, arg2 abi.ChainEpoch, arg3 []byte, arg4 chain0.TipSetKey) (abi.Randomness, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetRandomnessFromBeacon", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(abi.Randomness) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetRandomnessFromBeacon indicates an expected call of StateGetRandomnessFromBeacon. +func (mr *MockFullNodeMockRecorder) StateGetRandomnessFromBeacon(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetRandomnessFromBeacon", reflect.TypeOf((*MockFullNode)(nil).StateGetRandomnessFromBeacon), arg0, arg1, arg2, arg3, arg4) +} + +// StateGetRandomnessFromTickets mocks base method. +func (m *MockFullNode) StateGetRandomnessFromTickets(arg0 context.Context, arg1 crypto.DomainSeparationTag, arg2 abi.ChainEpoch, arg3 []byte, arg4 chain0.TipSetKey) (abi.Randomness, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateGetRandomnessFromTickets", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(abi.Randomness) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateGetRandomnessFromTickets indicates an expected call of StateGetRandomnessFromTickets. +func (mr *MockFullNodeMockRecorder) StateGetRandomnessFromTickets(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateGetRandomnessFromTickets", reflect.TypeOf((*MockFullNode)(nil).StateGetRandomnessFromTickets), arg0, arg1, arg2, arg3, arg4) +} + +// StateListActors mocks base method. +func (m *MockFullNode) StateListActors(arg0 context.Context, arg1 chain0.TipSetKey) ([]address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateListActors", arg0, arg1) + ret0, _ := ret[0].([]address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateListActors indicates an expected call of StateListActors. +func (mr *MockFullNodeMockRecorder) StateListActors(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateListActors", reflect.TypeOf((*MockFullNode)(nil).StateListActors), arg0, arg1) +} + +// StateListMiners mocks base method. +func (m *MockFullNode) StateListMiners(arg0 context.Context, arg1 chain0.TipSetKey) ([]address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateListMiners", arg0, arg1) + ret0, _ := ret[0].([]address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateListMiners indicates an expected call of StateListMiners. +func (mr *MockFullNodeMockRecorder) StateListMiners(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateListMiners", reflect.TypeOf((*MockFullNode)(nil).StateListMiners), arg0, arg1) +} + +// StateLookupID mocks base method. +func (m *MockFullNode) StateLookupID(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateLookupID", arg0, arg1, arg2) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateLookupID indicates an expected call of StateLookupID. +func (mr *MockFullNodeMockRecorder) StateLookupID(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateLookupID", reflect.TypeOf((*MockFullNode)(nil).StateLookupID), arg0, arg1, arg2) +} + +// StateMarketBalance mocks base method. +func (m *MockFullNode) StateMarketBalance(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (chain.MarketBalance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMarketBalance", arg0, arg1, arg2) + ret0, _ := ret[0].(chain.MarketBalance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMarketBalance indicates an expected call of StateMarketBalance. +func (mr *MockFullNodeMockRecorder) StateMarketBalance(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMarketBalance", reflect.TypeOf((*MockFullNode)(nil).StateMarketBalance), arg0, arg1, arg2) +} + +// StateMarketDeals mocks base method. +func (m *MockFullNode) StateMarketDeals(arg0 context.Context, arg1 chain0.TipSetKey) (map[string]chain.MarketDeal, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMarketDeals", arg0, arg1) + ret0, _ := ret[0].(map[string]chain.MarketDeal) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMarketDeals indicates an expected call of StateMarketDeals. +func (mr *MockFullNodeMockRecorder) StateMarketDeals(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMarketDeals", reflect.TypeOf((*MockFullNode)(nil).StateMarketDeals), arg0, arg1) +} + +// StateMarketParticipants mocks base method. +func (m *MockFullNode) StateMarketParticipants(arg0 context.Context, arg1 chain0.TipSetKey) (map[string]chain.MarketBalance, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMarketParticipants", arg0, arg1) + ret0, _ := ret[0].(map[string]chain.MarketBalance) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMarketParticipants indicates an expected call of StateMarketParticipants. +func (mr *MockFullNodeMockRecorder) StateMarketParticipants(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMarketParticipants", reflect.TypeOf((*MockFullNode)(nil).StateMarketParticipants), arg0, arg1) +} + +// StateMarketStorageDeal mocks base method. +func (m *MockFullNode) StateMarketStorageDeal(arg0 context.Context, arg1 abi.DealID, arg2 chain0.TipSetKey) (*chain.MarketDeal, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMarketStorageDeal", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain.MarketDeal) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMarketStorageDeal indicates an expected call of StateMarketStorageDeal. +func (mr *MockFullNodeMockRecorder) StateMarketStorageDeal(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMarketStorageDeal", reflect.TypeOf((*MockFullNode)(nil).StateMarketStorageDeal), arg0, arg1, arg2) +} + +// StateMinerActiveSectors mocks base method. +func (m *MockFullNode) StateMinerActiveSectors(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) ([]*miner0.SectorOnChainInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerActiveSectors", arg0, arg1, arg2) + ret0, _ := ret[0].([]*miner0.SectorOnChainInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerActiveSectors indicates an expected call of StateMinerActiveSectors. +func (mr *MockFullNodeMockRecorder) StateMinerActiveSectors(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerActiveSectors", reflect.TypeOf((*MockFullNode)(nil).StateMinerActiveSectors), arg0, arg1, arg2) +} + +// StateMinerAvailableBalance mocks base method. +func (m *MockFullNode) StateMinerAvailableBalance(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerAvailableBalance", arg0, arg1, arg2) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerAvailableBalance indicates an expected call of StateMinerAvailableBalance. +func (mr *MockFullNodeMockRecorder) StateMinerAvailableBalance(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerAvailableBalance", reflect.TypeOf((*MockFullNode)(nil).StateMinerAvailableBalance), arg0, arg1, arg2) +} + +// StateMinerDeadlines mocks base method. +func (m *MockFullNode) StateMinerDeadlines(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) ([]chain.Deadline, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerDeadlines", arg0, arg1, arg2) + ret0, _ := ret[0].([]chain.Deadline) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerDeadlines indicates an expected call of StateMinerDeadlines. +func (mr *MockFullNodeMockRecorder) StateMinerDeadlines(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerDeadlines", reflect.TypeOf((*MockFullNode)(nil).StateMinerDeadlines), arg0, arg1, arg2) +} + +// StateMinerFaults mocks base method. +func (m *MockFullNode) StateMinerFaults(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (bitfield.BitField, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerFaults", arg0, arg1, arg2) + ret0, _ := ret[0].(bitfield.BitField) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerFaults indicates an expected call of StateMinerFaults. +func (mr *MockFullNodeMockRecorder) StateMinerFaults(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerFaults", reflect.TypeOf((*MockFullNode)(nil).StateMinerFaults), arg0, arg1, arg2) +} + +// StateMinerInfo mocks base method. +func (m *MockFullNode) StateMinerInfo(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (miner0.MinerInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerInfo", arg0, arg1, arg2) + ret0, _ := ret[0].(miner0.MinerInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerInfo indicates an expected call of StateMinerInfo. +func (mr *MockFullNodeMockRecorder) StateMinerInfo(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerInfo", reflect.TypeOf((*MockFullNode)(nil).StateMinerInfo), arg0, arg1, arg2) +} + +// StateMinerInitialPledgeCollateral mocks base method. +func (m *MockFullNode) StateMinerInitialPledgeCollateral(arg0 context.Context, arg1 address.Address, arg2 miner.SectorPreCommitInfo, arg3 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerInitialPledgeCollateral", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerInitialPledgeCollateral indicates an expected call of StateMinerInitialPledgeCollateral. +func (mr *MockFullNodeMockRecorder) StateMinerInitialPledgeCollateral(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerInitialPledgeCollateral", reflect.TypeOf((*MockFullNode)(nil).StateMinerInitialPledgeCollateral), arg0, arg1, arg2, arg3) +} + +// StateMinerPartitions mocks base method. +func (m *MockFullNode) StateMinerPartitions(arg0 context.Context, arg1 address.Address, arg2 uint64, arg3 chain0.TipSetKey) ([]chain.Partition, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerPartitions", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].([]chain.Partition) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerPartitions indicates an expected call of StateMinerPartitions. +func (mr *MockFullNodeMockRecorder) StateMinerPartitions(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerPartitions", reflect.TypeOf((*MockFullNode)(nil).StateMinerPartitions), arg0, arg1, arg2, arg3) +} + +// StateMinerPower mocks base method. +func (m *MockFullNode) StateMinerPower(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (*chain.MinerPower, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerPower", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain.MinerPower) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerPower indicates an expected call of StateMinerPower. +func (mr *MockFullNodeMockRecorder) StateMinerPower(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerPower", reflect.TypeOf((*MockFullNode)(nil).StateMinerPower), arg0, arg1, arg2) +} + +// StateMinerPreCommitDepositForPower mocks base method. +func (m *MockFullNode) StateMinerPreCommitDepositForPower(arg0 context.Context, arg1 address.Address, arg2 miner.SectorPreCommitInfo, arg3 chain0.TipSetKey) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerPreCommitDepositForPower", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerPreCommitDepositForPower indicates an expected call of StateMinerPreCommitDepositForPower. +func (mr *MockFullNodeMockRecorder) StateMinerPreCommitDepositForPower(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerPreCommitDepositForPower", reflect.TypeOf((*MockFullNode)(nil).StateMinerPreCommitDepositForPower), arg0, arg1, arg2, arg3) +} + +// StateMinerProvingDeadline mocks base method. +func (m *MockFullNode) StateMinerProvingDeadline(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (*dline.Info, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerProvingDeadline", arg0, arg1, arg2) + ret0, _ := ret[0].(*dline.Info) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerProvingDeadline indicates an expected call of StateMinerProvingDeadline. +func (mr *MockFullNodeMockRecorder) StateMinerProvingDeadline(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerProvingDeadline", reflect.TypeOf((*MockFullNode)(nil).StateMinerProvingDeadline), arg0, arg1, arg2) +} + +// StateMinerRecoveries mocks base method. +func (m *MockFullNode) StateMinerRecoveries(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (bitfield.BitField, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerRecoveries", arg0, arg1, arg2) + ret0, _ := ret[0].(bitfield.BitField) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerRecoveries indicates an expected call of StateMinerRecoveries. +func (mr *MockFullNodeMockRecorder) StateMinerRecoveries(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerRecoveries", reflect.TypeOf((*MockFullNode)(nil).StateMinerRecoveries), arg0, arg1, arg2) +} + +// StateMinerSectorAllocated mocks base method. +func (m *MockFullNode) StateMinerSectorAllocated(arg0 context.Context, arg1 address.Address, arg2 abi.SectorNumber, arg3 chain0.TipSetKey) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerSectorAllocated", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerSectorAllocated indicates an expected call of StateMinerSectorAllocated. +func (mr *MockFullNodeMockRecorder) StateMinerSectorAllocated(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerSectorAllocated", reflect.TypeOf((*MockFullNode)(nil).StateMinerSectorAllocated), arg0, arg1, arg2, arg3) +} + +// StateMinerSectorCount mocks base method. +func (m *MockFullNode) StateMinerSectorCount(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (chain.MinerSectors, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerSectorCount", arg0, arg1, arg2) + ret0, _ := ret[0].(chain.MinerSectors) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerSectorCount indicates an expected call of StateMinerSectorCount. +func (mr *MockFullNodeMockRecorder) StateMinerSectorCount(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerSectorCount", reflect.TypeOf((*MockFullNode)(nil).StateMinerSectorCount), arg0, arg1, arg2) +} + +// StateMinerSectorSize mocks base method. +func (m *MockFullNode) StateMinerSectorSize(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (abi.SectorSize, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerSectorSize", arg0, arg1, arg2) + ret0, _ := ret[0].(abi.SectorSize) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerSectorSize indicates an expected call of StateMinerSectorSize. +func (mr *MockFullNodeMockRecorder) StateMinerSectorSize(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerSectorSize", reflect.TypeOf((*MockFullNode)(nil).StateMinerSectorSize), arg0, arg1, arg2) +} + +// StateMinerSectors mocks base method. +func (m *MockFullNode) StateMinerSectors(arg0 context.Context, arg1 address.Address, arg2 *bitfield.BitField, arg3 chain0.TipSetKey) ([]*miner0.SectorOnChainInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerSectors", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].([]*miner0.SectorOnChainInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerSectors indicates an expected call of StateMinerSectors. +func (mr *MockFullNodeMockRecorder) StateMinerSectors(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerSectors", reflect.TypeOf((*MockFullNode)(nil).StateMinerSectors), arg0, arg1, arg2, arg3) +} + +// StateMinerWorkerAddress mocks base method. +func (m *MockFullNode) StateMinerWorkerAddress(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateMinerWorkerAddress", arg0, arg1, arg2) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateMinerWorkerAddress indicates an expected call of StateMinerWorkerAddress. +func (mr *MockFullNodeMockRecorder) StateMinerWorkerAddress(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateMinerWorkerAddress", reflect.TypeOf((*MockFullNode)(nil).StateMinerWorkerAddress), arg0, arg1, arg2) +} + +// StateNetworkName mocks base method. +func (m *MockFullNode) StateNetworkName(arg0 context.Context) (chain.NetworkName, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateNetworkName", arg0) + ret0, _ := ret[0].(chain.NetworkName) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateNetworkName indicates an expected call of StateNetworkName. +func (mr *MockFullNodeMockRecorder) StateNetworkName(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateNetworkName", reflect.TypeOf((*MockFullNode)(nil).StateNetworkName), arg0) +} + +// StateNetworkVersion mocks base method. +func (m *MockFullNode) StateNetworkVersion(arg0 context.Context, arg1 chain0.TipSetKey) (network.Version, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateNetworkVersion", arg0, arg1) + ret0, _ := ret[0].(network.Version) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateNetworkVersion indicates an expected call of StateNetworkVersion. +func (mr *MockFullNodeMockRecorder) StateNetworkVersion(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateNetworkVersion", reflect.TypeOf((*MockFullNode)(nil).StateNetworkVersion), arg0, arg1) +} + +// StateSearchMsg mocks base method. +func (m *MockFullNode) StateSearchMsg(arg0 context.Context, arg1 chain0.TipSetKey, arg2 cid.Cid, arg3 abi.ChainEpoch, arg4 bool) (*chain.MsgLookup, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateSearchMsg", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(*chain.MsgLookup) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateSearchMsg indicates an expected call of StateSearchMsg. +func (mr *MockFullNodeMockRecorder) StateSearchMsg(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSearchMsg", reflect.TypeOf((*MockFullNode)(nil).StateSearchMsg), arg0, arg1, arg2, arg3, arg4) +} + +// StateSectorExpiration mocks base method. +func (m *MockFullNode) StateSectorExpiration(arg0 context.Context, arg1 address.Address, arg2 abi.SectorNumber, arg3 chain0.TipSetKey) (*miner0.SectorExpiration, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateSectorExpiration", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*miner0.SectorExpiration) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateSectorExpiration indicates an expected call of StateSectorExpiration. +func (mr *MockFullNodeMockRecorder) StateSectorExpiration(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSectorExpiration", reflect.TypeOf((*MockFullNode)(nil).StateSectorExpiration), arg0, arg1, arg2, arg3) +} + +// StateSectorGetInfo mocks base method. +func (m *MockFullNode) StateSectorGetInfo(arg0 context.Context, arg1 address.Address, arg2 abi.SectorNumber, arg3 chain0.TipSetKey) (*miner0.SectorOnChainInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateSectorGetInfo", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*miner0.SectorOnChainInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateSectorGetInfo indicates an expected call of StateSectorGetInfo. +func (mr *MockFullNodeMockRecorder) StateSectorGetInfo(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSectorGetInfo", reflect.TypeOf((*MockFullNode)(nil).StateSectorGetInfo), arg0, arg1, arg2, arg3) +} + +// StateSectorPartition mocks base method. +func (m *MockFullNode) StateSectorPartition(arg0 context.Context, arg1 address.Address, arg2 abi.SectorNumber, arg3 chain0.TipSetKey) (*miner0.SectorLocation, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateSectorPartition", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*miner0.SectorLocation) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateSectorPartition indicates an expected call of StateSectorPartition. +func (mr *MockFullNodeMockRecorder) StateSectorPartition(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSectorPartition", reflect.TypeOf((*MockFullNode)(nil).StateSectorPartition), arg0, arg1, arg2, arg3) +} + +// StateSectorPreCommitInfo mocks base method. +func (m *MockFullNode) StateSectorPreCommitInfo(arg0 context.Context, arg1 address.Address, arg2 abi.SectorNumber, arg3 chain0.TipSetKey) (miner0.SectorPreCommitOnChainInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateSectorPreCommitInfo", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(miner0.SectorPreCommitOnChainInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateSectorPreCommitInfo indicates an expected call of StateSectorPreCommitInfo. +func (mr *MockFullNodeMockRecorder) StateSectorPreCommitInfo(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateSectorPreCommitInfo", reflect.TypeOf((*MockFullNode)(nil).StateSectorPreCommitInfo), arg0, arg1, arg2, arg3) +} + +// StateVMCirculatingSupplyInternal mocks base method. +func (m *MockFullNode) StateVMCirculatingSupplyInternal(arg0 context.Context, arg1 chain0.TipSetKey) (chain0.CirculatingSupply, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateVMCirculatingSupplyInternal", arg0, arg1) + ret0, _ := ret[0].(chain0.CirculatingSupply) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateVMCirculatingSupplyInternal indicates an expected call of StateVMCirculatingSupplyInternal. +func (mr *MockFullNodeMockRecorder) StateVMCirculatingSupplyInternal(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateVMCirculatingSupplyInternal", reflect.TypeOf((*MockFullNode)(nil).StateVMCirculatingSupplyInternal), arg0, arg1) +} + +// StateVerifiedClientStatus mocks base method. +func (m *MockFullNode) StateVerifiedClientStatus(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (*big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateVerifiedClientStatus", arg0, arg1, arg2) + ret0, _ := ret[0].(*big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateVerifiedClientStatus indicates an expected call of StateVerifiedClientStatus. +func (mr *MockFullNodeMockRecorder) StateVerifiedClientStatus(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateVerifiedClientStatus", reflect.TypeOf((*MockFullNode)(nil).StateVerifiedClientStatus), arg0, arg1, arg2) +} + +// StateVerifiedRegistryRootKey mocks base method. +func (m *MockFullNode) StateVerifiedRegistryRootKey(arg0 context.Context, arg1 chain0.TipSetKey) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateVerifiedRegistryRootKey", arg0, arg1) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateVerifiedRegistryRootKey indicates an expected call of StateVerifiedRegistryRootKey. +func (mr *MockFullNodeMockRecorder) StateVerifiedRegistryRootKey(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateVerifiedRegistryRootKey", reflect.TypeOf((*MockFullNode)(nil).StateVerifiedRegistryRootKey), arg0, arg1) +} + +// StateVerifierStatus mocks base method. +func (m *MockFullNode) StateVerifierStatus(arg0 context.Context, arg1 address.Address, arg2 chain0.TipSetKey) (*big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateVerifierStatus", arg0, arg1, arg2) + ret0, _ := ret[0].(*big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateVerifierStatus indicates an expected call of StateVerifierStatus. +func (mr *MockFullNodeMockRecorder) StateVerifierStatus(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateVerifierStatus", reflect.TypeOf((*MockFullNode)(nil).StateVerifierStatus), arg0, arg1, arg2) +} + +// StateWaitMsg mocks base method. +func (m *MockFullNode) StateWaitMsg(arg0 context.Context, arg1 cid.Cid, arg2 uint64, arg3 abi.ChainEpoch, arg4 bool) (*chain.MsgLookup, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StateWaitMsg", arg0, arg1, arg2, arg3, arg4) + ret0, _ := ret[0].(*chain.MsgLookup) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// StateWaitMsg indicates an expected call of StateWaitMsg. +func (mr *MockFullNodeMockRecorder) StateWaitMsg(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StateWaitMsg", reflect.TypeOf((*MockFullNode)(nil).StateWaitMsg), arg0, arg1, arg2, arg3, arg4) +} + +// SyncState mocks base method. +func (m *MockFullNode) SyncState(arg0 context.Context) (*chain.SyncState, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SyncState", arg0) + ret0, _ := ret[0].(*chain.SyncState) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SyncState indicates an expected call of SyncState. +func (mr *MockFullNodeMockRecorder) SyncState(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SyncState", reflect.TypeOf((*MockFullNode)(nil).SyncState), arg0) +} + +// SyncSubmitBlock mocks base method. +func (m *MockFullNode) SyncSubmitBlock(arg0 context.Context, arg1 *chain0.BlockMsg) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SyncSubmitBlock", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// SyncSubmitBlock indicates an expected call of SyncSubmitBlock. +func (mr *MockFullNodeMockRecorder) SyncSubmitBlock(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SyncSubmitBlock", reflect.TypeOf((*MockFullNode)(nil).SyncSubmitBlock), arg0, arg1) +} + +// SyncerTracker mocks base method. +func (m *MockFullNode) SyncerTracker(arg0 context.Context) *chain.TargetTracker { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SyncerTracker", arg0) + ret0, _ := ret[0].(*chain.TargetTracker) + return ret0 +} + +// SyncerTracker indicates an expected call of SyncerTracker. +func (mr *MockFullNodeMockRecorder) SyncerTracker(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SyncerTracker", reflect.TypeOf((*MockFullNode)(nil).SyncerTracker), arg0) +} + +// UnLockWallet mocks base method. +func (m *MockFullNode) UnLockWallet(arg0 context.Context, arg1 []byte) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "UnLockWallet", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// UnLockWallet indicates an expected call of UnLockWallet. +func (mr *MockFullNodeMockRecorder) UnLockWallet(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UnLockWallet", reflect.TypeOf((*MockFullNode)(nil).UnLockWallet), arg0, arg1) +} + +// Verify mocks base method. +func (m *MockFullNode) Verify(arg0 context.Context, arg1, arg2 string) ([]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Verify", arg0, arg1, arg2) + ret0, _ := ret[0].([]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Verify indicates an expected call of Verify. +func (mr *MockFullNodeMockRecorder) Verify(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Verify", reflect.TypeOf((*MockFullNode)(nil).Verify), arg0, arg1, arg2) +} + +// VerifyEntry mocks base method. +func (m *MockFullNode) VerifyEntry(arg0, arg1 *chain0.BeaconEntry, arg2 abi.ChainEpoch) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "VerifyEntry", arg0, arg1, arg2) + ret0, _ := ret[0].(bool) + return ret0 +} + +// VerifyEntry indicates an expected call of VerifyEntry. +func (mr *MockFullNodeMockRecorder) VerifyEntry(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyEntry", reflect.TypeOf((*MockFullNode)(nil).VerifyEntry), arg0, arg1, arg2) +} + +// Version mocks base method. +func (m *MockFullNode) Version(arg0 context.Context) (chain.Version, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Version", arg0) + ret0, _ := ret[0].(chain.Version) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Version indicates an expected call of Version. +func (mr *MockFullNodeMockRecorder) Version(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Version", reflect.TypeOf((*MockFullNode)(nil).Version), arg0) +} + +// WalletAddresses mocks base method. +func (m *MockFullNode) WalletAddresses(arg0 context.Context) []address.Address { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletAddresses", arg0) + ret0, _ := ret[0].([]address.Address) + return ret0 +} + +// WalletAddresses indicates an expected call of WalletAddresses. +func (mr *MockFullNodeMockRecorder) WalletAddresses(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletAddresses", reflect.TypeOf((*MockFullNode)(nil).WalletAddresses), arg0) +} + +// WalletBalance mocks base method. +func (m *MockFullNode) WalletBalance(arg0 context.Context, arg1 address.Address) (big.Int, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletBalance", arg0, arg1) + ret0, _ := ret[0].(big.Int) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletBalance indicates an expected call of WalletBalance. +func (mr *MockFullNodeMockRecorder) WalletBalance(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletBalance", reflect.TypeOf((*MockFullNode)(nil).WalletBalance), arg0, arg1) +} + +// WalletDefaultAddress mocks base method. +func (m *MockFullNode) WalletDefaultAddress(arg0 context.Context) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletDefaultAddress", arg0) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletDefaultAddress indicates an expected call of WalletDefaultAddress. +func (mr *MockFullNodeMockRecorder) WalletDefaultAddress(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletDefaultAddress", reflect.TypeOf((*MockFullNode)(nil).WalletDefaultAddress), arg0) +} + +// WalletExport mocks base method. +func (m *MockFullNode) WalletExport(arg0 address.Address, arg1 string) (*wallet.KeyInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletExport", arg0, arg1) + ret0, _ := ret[0].(*wallet.KeyInfo) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletExport indicates an expected call of WalletExport. +func (mr *MockFullNodeMockRecorder) WalletExport(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletExport", reflect.TypeOf((*MockFullNode)(nil).WalletExport), arg0, arg1) +} + +// WalletHas mocks base method. +func (m *MockFullNode) WalletHas(arg0 context.Context, arg1 address.Address) (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletHas", arg0, arg1) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletHas indicates an expected call of WalletHas. +func (mr *MockFullNodeMockRecorder) WalletHas(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletHas", reflect.TypeOf((*MockFullNode)(nil).WalletHas), arg0, arg1) +} + +// WalletImport mocks base method. +func (m *MockFullNode) WalletImport(arg0 *wallet.KeyInfo) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletImport", arg0) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletImport indicates an expected call of WalletImport. +func (mr *MockFullNodeMockRecorder) WalletImport(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletImport", reflect.TypeOf((*MockFullNode)(nil).WalletImport), arg0) +} + +// WalletNewAddress mocks base method. +func (m *MockFullNode) WalletNewAddress(arg0 byte) (address.Address, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletNewAddress", arg0) + ret0, _ := ret[0].(address.Address) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletNewAddress indicates an expected call of WalletNewAddress. +func (mr *MockFullNodeMockRecorder) WalletNewAddress(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletNewAddress", reflect.TypeOf((*MockFullNode)(nil).WalletNewAddress), arg0) +} + +// WalletSetDefault mocks base method. +func (m *MockFullNode) WalletSetDefault(arg0 context.Context, arg1 address.Address) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletSetDefault", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// WalletSetDefault indicates an expected call of WalletSetDefault. +func (mr *MockFullNodeMockRecorder) WalletSetDefault(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletSetDefault", reflect.TypeOf((*MockFullNode)(nil).WalletSetDefault), arg0, arg1) +} + +// WalletSign mocks base method. +func (m *MockFullNode) WalletSign(arg0 context.Context, arg1 address.Address, arg2 []byte, arg3 wallet.MsgMeta) (*crypto.Signature, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletSign", arg0, arg1, arg2, arg3) + ret0, _ := ret[0].(*crypto.Signature) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletSign indicates an expected call of WalletSign. +func (mr *MockFullNodeMockRecorder) WalletSign(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletSign", reflect.TypeOf((*MockFullNode)(nil).WalletSign), arg0, arg1, arg2, arg3) +} + +// WalletSignMessage mocks base method. +func (m *MockFullNode) WalletSignMessage(arg0 context.Context, arg1 address.Address, arg2 *chain0.Message) (*chain0.SignedMessage, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletSignMessage", arg0, arg1, arg2) + ret0, _ := ret[0].(*chain0.SignedMessage) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// WalletSignMessage indicates an expected call of WalletSignMessage. +func (mr *MockFullNodeMockRecorder) WalletSignMessage(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletSignMessage", reflect.TypeOf((*MockFullNode)(nil).WalletSignMessage), arg0, arg1, arg2) +} + +// WalletState mocks base method. +func (m *MockFullNode) WalletState(arg0 context.Context) int { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "WalletState", arg0) + ret0, _ := ret[0].(int) + return ret0 +} + +// WalletState indicates an expected call of WalletState. +func (mr *MockFullNodeMockRecorder) WalletState(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WalletState", reflect.TypeOf((*MockFullNode)(nil).WalletState), arg0) +} diff --git a/venus-shared/api/chain/v1/mpool.go b/venus-shared/api/chain/v1/mpool.go new file mode 100644 index 0000000000..584239f18f --- /dev/null +++ b/venus-shared/api/chain/v1/mpool.go @@ -0,0 +1,44 @@ +package v1 + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/messagepool" +) + +type IMessagePool interface { + MpoolDeleteByAdress(ctx context.Context, addr address.Address) error //perm:admin + MpoolPublishByAddr(context.Context, address.Address) error //perm:write + MpoolPublishMessage(ctx context.Context, smsg *chain.SignedMessage) error //perm:write + MpoolPush(ctx context.Context, smsg *chain.SignedMessage) (cid.Cid, error) //perm:write + MpoolGetConfig(context.Context) (*messagepool.MpoolConfig, error) //perm:read + MpoolSetConfig(ctx context.Context, cfg *messagepool.MpoolConfig) error //perm:admin + MpoolSelect(context.Context, chain.TipSetKey, float64) ([]*chain.SignedMessage, error) //perm:read + MpoolSelects(context.Context, chain.TipSetKey, []float64) ([][]*chain.SignedMessage, error) //perm:read + MpoolPending(ctx context.Context, tsk chain.TipSetKey) ([]*chain.SignedMessage, error) //perm:read + MpoolClear(ctx context.Context, local bool) error //perm:write + MpoolPushUntrusted(ctx context.Context, smsg *chain.SignedMessage) (cid.Cid, error) //perm:write + MpoolPushMessage(ctx context.Context, msg *chain.Message, spec *chain2.MessageSendSpec) (*chain.SignedMessage, error) //perm:sign + MpoolBatchPush(ctx context.Context, smsgs []*chain.SignedMessage) ([]cid.Cid, error) //perm:write + MpoolBatchPushUntrusted(ctx context.Context, smsgs []*chain.SignedMessage) ([]cid.Cid, error) //perm:write + MpoolBatchPushMessage(ctx context.Context, msgs []*chain.Message, spec *chain2.MessageSendSpec) ([]*chain.SignedMessage, error) //perm:sign + MpoolGetNonce(ctx context.Context, addr address.Address) (uint64, error) //perm:read + MpoolSub(ctx context.Context) (<-chan messagepool.MpoolUpdate, error) //perm:read + GasEstimateMessageGas(ctx context.Context, msg *chain.Message, spec *chain2.MessageSendSpec, tsk chain.TipSetKey) (*chain.Message, error) //perm:read + GasBatchEstimateMessageGas(ctx context.Context, estimateMessages []*chain2.EstimateMessage, fromNonce uint64, tsk chain.TipSetKey) ([]*chain2.EstimateResult, error) //perm:read + GasEstimateFeeCap(ctx context.Context, msg *chain.Message, maxqueueblks int64, tsk chain.TipSetKey) (big.Int, error) //perm:read + GasEstimateGasPremium(ctx context.Context, nblocksincl uint64, sender address.Address, gaslimit int64, tsk chain.TipSetKey) (big.Int, error) //perm:read + GasEstimateGasLimit(ctx context.Context, msgIn *chain.Message, tsk chain.TipSetKey) (int64, error) //perm:read + // MpoolCheckMessages performs logical checks on a batch of messages + MpoolCheckMessages(ctx context.Context, protos []*messagepool.MessagePrototype) ([][]messagepool.MessageCheckStatus, error) //perm:read + // MpoolCheckPendingMessages performs logical checks for all pending messages from a given address + MpoolCheckPendingMessages(ctx context.Context, addr address.Address) ([][]messagepool.MessageCheckStatus, error) //perm:read + // MpoolCheckReplaceMessages performs logical checks on pending messages with replacement + MpoolCheckReplaceMessages(ctx context.Context, msg []*chain.Message) ([][]messagepool.MessageCheckStatus, error) //perm:read +} diff --git a/venus-shared/api/chain/v1/multisig.go b/venus-shared/api/chain/v1/multisig.go new file mode 100644 index 0000000000..e72eac71fb --- /dev/null +++ b/venus-shared/api/chain/v1/multisig.go @@ -0,0 +1,27 @@ +package v1 + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/messagepool" +) + +type IMultiSig interface { + MsigCreate(ctx context.Context, req uint64, addrs []address.Address, duration abi.ChainEpoch, val chain.BigInt, src address.Address, gp chain.BigInt) (*messagepool.MessagePrototype, error) //perm:sign + MsigPropose(ctx context.Context, msig address.Address, to address.Address, amt chain.BigInt, src address.Address, method uint64, params []byte) (*messagepool.MessagePrototype, error) //perm:sign + MsigAddPropose(ctx context.Context, msig address.Address, src address.Address, newAdd address.Address, inc bool) (*messagepool.MessagePrototype, error) //perm:sign + MsigAddApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, newAdd address.Address, inc bool) (*messagepool.MessagePrototype, error) //perm:sign + MsigAddCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, newAdd address.Address, inc bool) (*messagepool.MessagePrototype, error) //perm:sign + MsigSwapPropose(ctx context.Context, msig address.Address, src address.Address, oldAdd address.Address, newAdd address.Address) (*messagepool.MessagePrototype, error) //perm:sign + MsigSwapApprove(ctx context.Context, msig address.Address, src address.Address, txID uint64, proposer address.Address, oldAdd address.Address, newAdd address.Address) (*messagepool.MessagePrototype, error) //perm:sign + MsigSwapCancel(ctx context.Context, msig address.Address, src address.Address, txID uint64, oldAdd address.Address, newAdd address.Address) (*messagepool.MessagePrototype, error) //perm:sign + MsigApprove(ctx context.Context, msig address.Address, txID uint64, src address.Address) (*messagepool.MessagePrototype, error) //perm:sign + MsigApproveTxnHash(ctx context.Context, msig address.Address, txID uint64, proposer address.Address, to address.Address, amt chain.BigInt, src address.Address, method uint64, params []byte) (*messagepool.MessagePrototype, error) //perm:sign + MsigCancel(ctx context.Context, msig address.Address, txID uint64, to address.Address, amt chain.BigInt, src address.Address, method uint64, params []byte) (*messagepool.MessagePrototype, error) //perm:sign + MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (*messagepool.MessagePrototype, error) //perm:sign + MsigGetVested(ctx context.Context, addr address.Address, start chain.TipSetKey, end chain.TipSetKey) (chain.BigInt, error) //perm:read +} diff --git a/venus-shared/api/chain/v1/network.go b/venus-shared/api/chain/v1/network.go new file mode 100644 index 0000000000..27529b2470 --- /dev/null +++ b/venus-shared/api/chain/v1/network.go @@ -0,0 +1,26 @@ +package v1 + +import ( + "context" + + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p/net" +) + +type INetwork interface { + NetworkGetBandwidthStats(ctx context.Context) metrics.Stats //perm:admin + NetworkGetPeerAddresses(ctx context.Context) []ma.Multiaddr //perm:admin + NetworkGetPeerID(ctx context.Context) peer.ID //perm:admin + NetworkFindProvidersAsync(ctx context.Context, key cid.Cid, count int) <-chan peer.AddrInfo //perm:read + NetworkGetClosestPeers(ctx context.Context, key string) ([]peer.ID, error) //perm:read + NetworkFindPeer(ctx context.Context, peerID peer.ID) (peer.AddrInfo, error) //perm:read + NetworkConnect(ctx context.Context, addrs []string) (<-chan net.ConnectionResult, error) //perm:read + NetworkPeers(ctx context.Context, verbose, latency, streams bool) (*net.SwarmConnInfos, error) //perm:read + Version(context.Context) (chain2.Version, error) //perm:read + NetAddrsListen(context.Context) (peer.AddrInfo, error) //perm:read +} diff --git a/venus-shared/api/chain/v1/paych.go b/venus-shared/api/chain/v1/paych.go new file mode 100644 index 0000000000..f726bcc1b5 --- /dev/null +++ b/venus-shared/api/chain/v1/paych.go @@ -0,0 +1,83 @@ +package v1 + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/paych" +) + +type IPaychan interface { + // PaychGet creates a payment channel to a provider with a amount of FIL + // @from: the payment channel sender + // @to: the payment channel recipient + // @amt: the deposits funds in the payment channel + PaychGet(ctx context.Context, from, to address.Address, amt big.Int) (*paych.ChannelInfo, error) //perm:sign + // PaychAvailableFunds get the status of an outbound payment channel + // @pch: payment channel address + PaychAvailableFunds(ctx context.Context, ch address.Address) (*chain2.ChannelAvailableFunds, error) //perm:sign + // PaychAvailableFundsByFromTo get the status of an outbound payment channel + // @from: the payment channel sender + // @to: he payment channel recipient + PaychAvailableFundsByFromTo(ctx context.Context, from, to address.Address) (*chain2.ChannelAvailableFunds, error) //perm:sign + // PaychGetWaitReady waits until the create channel / add funds message with the sentinel + // @sentinel: given message CID arrives. + // @ch: the returned channel address can safely be used against the Manager methods. + PaychGetWaitReady(ctx context.Context, sentinel cid.Cid) (address.Address, error) //perm:sign + // PaychAllocateLane Allocate late creates a lane within a payment channel so that calls to + // CreatePaymentVoucher will automatically make vouchers only for the difference in total + PaychAllocateLane(ctx context.Context, ch address.Address) (uint64, error) //perm:sign + // PaychNewPayment aggregate vouchers into a new lane + // @from: the payment channel sender + // @to: the payment channel recipient + // @vouchers: the outstanding (non-redeemed) vouchers + PaychNewPayment(ctx context.Context, from, to address.Address, vouchers []paych.VoucherSpec) (*paych.PaymentInfo, error) //perm:sign + // PaychList list the addresses of all channels that have been created + PaychList(ctx context.Context) ([]address.Address, error) //perm:read + // PaychStatus get the payment channel status + // @pch: payment channel address + PaychStatus(ctx context.Context, pch address.Address) (*paych.Status, error) //perm:read + // PaychSettle update payment channel status to settle + // After a settlement period (currently 12 hours) either party to the payment channel can call collect on chain + // @pch: payment channel address + PaychSettle(ctx context.Context, addr address.Address) (cid.Cid, error) //perm:sign + // PaychCollect update payment channel status to collect + // Collect sends the value of submitted vouchers to the channel recipient (the provider), + // and refunds the remaining channel balance to the channel creator (the client). + // @pch: payment channel address + PaychCollect(ctx context.Context, addr address.Address) (cid.Cid, error) //perm:sign + + // PaychVoucherCheckValid checks if the given voucher is valid (is or could become spendable at some point). + // If the channel is not in the store, fetches the channel from state (and checks that + // the channel To address is owned by the wallet). + // @pch: payment channel address + // @sv: voucher + PaychVoucherCheckValid(ctx context.Context, ch address.Address, sv *paych.SignedVoucher) error //perm:read + // PaychVoucherCheckSpendable checks if the given voucher is currently spendable + // @pch: payment channel address + // @sv: voucher + PaychVoucherCheckSpendable(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (bool, error) //perm:read + // PaychVoucherAdd adds a voucher for an inbound channel. + // If the channel is not in the store, fetches the channel from state (and checks that + // the channel To address is owned by the wallet). + PaychVoucherAdd(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, proof []byte, minDelta big.Int) (big.Int, error) //perm:write + // PaychVoucherCreate creates a new signed voucher on the given payment channel + // with the given lane and amount. The value passed in is exactly the value + // that will be used to create the voucher, so if previous vouchers exist, the + // actual additional value of this voucher will only be the difference between + // the two. + // If there are insufficient funds in the channel to create the voucher, + // returns a nil voucher and the shortfall. + PaychVoucherCreate(ctx context.Context, pch address.Address, amt big.Int, lane uint64) (*paych.VoucherCreateResult, error) //perm:sign + // PaychVoucherList list vouchers in payment channel + // @pch: payment channel address + PaychVoucherList(ctx context.Context, pch address.Address) ([]*paych.SignedVoucher, error) //perm:write + // PaychVoucherSubmit Submit voucher to chain to update payment channel state + // @pch: payment channel address + // @sv: voucher in payment channel + PaychVoucherSubmit(ctx context.Context, ch address.Address, sv *paych.SignedVoucher, secret []byte, proof []byte) (cid.Cid, error) //perm:sign +} diff --git a/venus-shared/api/chain/v1/proxy_gen.go b/venus-shared/api/chain/v1/proxy_gen.go new file mode 100644 index 0000000000..f129eee8bd --- /dev/null +++ b/venus-shared/api/chain/v1/proxy_gen.go @@ -0,0 +1,1099 @@ +// Code generated by github.com/filecoin-project/tools/gen/api. DO NOT EDIT. + +package v1 + +import ( + "context" + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-bitfield" + "github.com/filecoin-project/go-jsonrpc/auth" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + "github.com/filecoin-project/go-state-types/dline" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/venus-shared/actors/builtin/miner" + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/libp2p/net" + "github.com/filecoin-project/venus/venus-shared/messagepool" + "github.com/filecoin-project/venus/venus-shared/paych" + "github.com/filecoin-project/venus/venus-shared/wallet" + "github.com/ipfs/go-cid" + "github.com/libp2p/go-libp2p-core/metrics" + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" + "time" +) + +type FullNodeStruct struct { + IBlockStoreStruct + IChainStruct + IMarketStruct + IMiningStruct + IMessagePoolStruct + IMultiSigStruct + INetworkStruct + IPaychanStruct + ISyncerStruct + IWalletStruct + IJwtAuthAPIStruct +} + +type IAccountStruct struct { + Internal struct { + StateAccountKey func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) `perm:"read"` + } +} + +func (s *IAccountStruct) StateAccountKey(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) { + return s.Internal.StateAccountKey(p0, p1, p2) +} + +type IActorStruct struct { + Internal struct { + ListActor func(p0 context.Context) (map[address.Address]*chain.Actor, error) `perm:"read"` + + StateGetActor func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*chain.Actor, error) `perm:"read"` + } +} + +func (s *IActorStruct) ListActor(p0 context.Context) (map[address.Address]*chain.Actor, error) { + return s.Internal.ListActor(p0) +} + +func (s *IActorStruct) StateGetActor(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*chain.Actor, error) { + return s.Internal.StateGetActor(p0, p1, p2) +} + +type IBeaconStruct struct { + Internal struct { + BeaconGetEntry func(p0 context.Context, p1 abi.ChainEpoch) (*chain.BeaconEntry, error) `perm:"read"` + } +} + +func (s *IBeaconStruct) BeaconGetEntry(p0 context.Context, p1 abi.ChainEpoch) (*chain.BeaconEntry, error) { + return s.Internal.BeaconGetEntry(p0, p1) +} + +type IBlockStoreStruct struct { + Internal struct { + ChainDeleteObj func(p0 context.Context, p1 cid.Cid) error `perm:"admin"` + + ChainHasObj func(p0 context.Context, p1 cid.Cid) (bool, error) `perm:"read"` + + ChainReadObj func(p0 context.Context, p1 cid.Cid) ([]byte, error) `perm:"read"` + + ChainStatObj func(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (chain2.ObjStat, error) `perm:"read"` + } +} + +func (s *IBlockStoreStruct) ChainDeleteObj(p0 context.Context, p1 cid.Cid) error { + return s.Internal.ChainDeleteObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainHasObj(p0 context.Context, p1 cid.Cid) (bool, error) { + return s.Internal.ChainHasObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainReadObj(p0 context.Context, p1 cid.Cid) ([]byte, error) { + return s.Internal.ChainReadObj(p0, p1) +} + +func (s *IBlockStoreStruct) ChainStatObj(p0 context.Context, p1 cid.Cid, p2 cid.Cid) (chain2.ObjStat, error) { + return s.Internal.ChainStatObj(p0, p1, p2) +} + +type IChainStruct struct { + IAccountStruct + IActorStruct + IBeaconStruct + IMinerStateStruct + IChainInfoStruct +} + +type IChainInfoStruct struct { + Internal struct { + BlockTime func(p0 context.Context) time.Duration `perm:"read"` + + ChainExport func(p0 context.Context, p1 abi.ChainEpoch, p2 bool, p3 chain.TipSetKey) (<-chan []byte, error) `perm:"read"` + + ChainGetBlock func(p0 context.Context, p1 cid.Cid) (*chain.BlockHeader, error) `perm:"read"` + + ChainGetBlockMessages func(p0 context.Context, p1 cid.Cid) (*chain2.BlockMessages, error) `perm:"read"` + + ChainGetMessage func(p0 context.Context, p1 cid.Cid) (*chain.Message, error) `perm:"read"` + + ChainGetMessagesInTipset func(p0 context.Context, p1 chain.TipSetKey) ([]chain2.Message, error) `perm:"read"` + + ChainGetParentMessages func(p0 context.Context, p1 cid.Cid) ([]chain2.Message, error) `perm:"read"` + + ChainGetParentReceipts func(p0 context.Context, p1 cid.Cid) ([]*chain.MessageReceipt, error) `perm:"read"` + + ChainGetPath func(p0 context.Context, p1 chain.TipSetKey, p2 chain.TipSetKey) ([]*chain2.HeadChange, error) `perm:"read"` + + ChainGetRandomnessFromBeacon func(p0 context.Context, p1 chain.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"` + + ChainGetRandomnessFromTickets func(p0 context.Context, p1 chain.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) `perm:"read"` + + ChainGetReceipts func(p0 context.Context, p1 cid.Cid) ([]chain.MessageReceipt, error) `perm:"read"` + + ChainGetTipSet func(p0 context.Context, p1 chain.TipSetKey) (*chain.TipSet, error) `perm:"read"` + + ChainGetTipSetAfterHeight func(p0 context.Context, p1 abi.ChainEpoch, p2 chain.TipSetKey) (*chain.TipSet, error) `perm:"read"` + + ChainGetTipSetByHeight func(p0 context.Context, p1 abi.ChainEpoch, p2 chain.TipSetKey) (*chain.TipSet, error) `perm:"read"` + + ChainHead func(p0 context.Context) (*chain.TipSet, error) `perm:"read"` + + ChainList func(p0 context.Context, p1 chain.TipSetKey, p2 int) ([]chain.TipSetKey, error) `perm:"read"` + + ChainNotify func(p0 context.Context) (<-chan []*chain2.HeadChange, error) `perm:"read"` + + ChainSetHead func(p0 context.Context, p1 chain.TipSetKey) error `perm:"admin"` + + GetActor func(p0 context.Context, p1 address.Address) (*chain.Actor, error) `perm:"read"` + + GetEntry func(p0 context.Context, p1 abi.ChainEpoch, p2 uint64) (*chain.BeaconEntry, error) `perm:"read"` + + GetFullBlock func(p0 context.Context, p1 cid.Cid) (*chain.FullBlock, error) `perm:"read"` + + GetParentStateRootActor func(p0 context.Context, p1 *chain.TipSet, p2 address.Address) (*chain.Actor, error) `perm:"read"` + + MessageWait func(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch, p3 abi.ChainEpoch) (*chain2.ChainMessage, error) `perm:"read"` + + ProtocolParameters func(p0 context.Context) (*chain2.ProtocolParams, error) `perm:"read"` + + ResolveToKeyAddr func(p0 context.Context, p1 address.Address, p2 *chain.TipSet) (address.Address, error) `perm:"read"` + + StateGetRandomnessFromBeacon func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 chain.TipSetKey) (abi.Randomness, error) `perm:"read"` + + StateGetRandomnessFromTickets func(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 chain.TipSetKey) (abi.Randomness, error) `perm:"read"` + + StateNetworkName func(p0 context.Context) (chain2.NetworkName, error) `perm:"read"` + + StateNetworkVersion func(p0 context.Context, p1 chain.TipSetKey) (network.Version, error) `perm:"read"` + + StateSearchMsg func(p0 context.Context, p1 chain.TipSetKey, p2 cid.Cid, p3 abi.ChainEpoch, p4 bool) (*chain2.MsgLookup, error) `perm:"read"` + + StateVerifiedRegistryRootKey func(p0 context.Context, p1 chain.TipSetKey) (address.Address, error) `perm:"read"` + + StateVerifierStatus func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*abi.StoragePower, error) `perm:"read"` + + StateWaitMsg func(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch, p4 bool) (*chain2.MsgLookup, error) `perm:"read"` + + VerifyEntry func(p0 *chain.BeaconEntry, p1 *chain.BeaconEntry, p2 abi.ChainEpoch) bool `perm:"read"` + } +} + +func (s *IChainInfoStruct) BlockTime(p0 context.Context) time.Duration { + return s.Internal.BlockTime(p0) +} + +func (s *IChainInfoStruct) ChainExport(p0 context.Context, p1 abi.ChainEpoch, p2 bool, p3 chain.TipSetKey) (<-chan []byte, error) { + return s.Internal.ChainExport(p0, p1, p2, p3) +} + +func (s *IChainInfoStruct) ChainGetBlock(p0 context.Context, p1 cid.Cid) (*chain.BlockHeader, error) { + return s.Internal.ChainGetBlock(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetBlockMessages(p0 context.Context, p1 cid.Cid) (*chain2.BlockMessages, error) { + return s.Internal.ChainGetBlockMessages(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetMessage(p0 context.Context, p1 cid.Cid) (*chain.Message, error) { + return s.Internal.ChainGetMessage(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetMessagesInTipset(p0 context.Context, p1 chain.TipSetKey) ([]chain2.Message, error) { + return s.Internal.ChainGetMessagesInTipset(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetParentMessages(p0 context.Context, p1 cid.Cid) ([]chain2.Message, error) { + return s.Internal.ChainGetParentMessages(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetParentReceipts(p0 context.Context, p1 cid.Cid) ([]*chain.MessageReceipt, error) { + return s.Internal.ChainGetParentReceipts(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetPath(p0 context.Context, p1 chain.TipSetKey, p2 chain.TipSetKey) ([]*chain2.HeadChange, error) { + return s.Internal.ChainGetPath(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainGetRandomnessFromBeacon(p0 context.Context, p1 chain.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) { + return s.Internal.ChainGetRandomnessFromBeacon(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) ChainGetRandomnessFromTickets(p0 context.Context, p1 chain.TipSetKey, p2 crypto.DomainSeparationTag, p3 abi.ChainEpoch, p4 []byte) (abi.Randomness, error) { + return s.Internal.ChainGetRandomnessFromTickets(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) ChainGetReceipts(p0 context.Context, p1 cid.Cid) ([]chain.MessageReceipt, error) { + return s.Internal.ChainGetReceipts(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetTipSet(p0 context.Context, p1 chain.TipSetKey) (*chain.TipSet, error) { + return s.Internal.ChainGetTipSet(p0, p1) +} + +func (s *IChainInfoStruct) ChainGetTipSetAfterHeight(p0 context.Context, p1 abi.ChainEpoch, p2 chain.TipSetKey) (*chain.TipSet, error) { + return s.Internal.ChainGetTipSetAfterHeight(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainGetTipSetByHeight(p0 context.Context, p1 abi.ChainEpoch, p2 chain.TipSetKey) (*chain.TipSet, error) { + return s.Internal.ChainGetTipSetByHeight(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainHead(p0 context.Context) (*chain.TipSet, error) { + return s.Internal.ChainHead(p0) +} + +func (s *IChainInfoStruct) ChainList(p0 context.Context, p1 chain.TipSetKey, p2 int) ([]chain.TipSetKey, error) { + return s.Internal.ChainList(p0, p1, p2) +} + +func (s *IChainInfoStruct) ChainNotify(p0 context.Context) (<-chan []*chain2.HeadChange, error) { + return s.Internal.ChainNotify(p0) +} + +func (s *IChainInfoStruct) ChainSetHead(p0 context.Context, p1 chain.TipSetKey) error { + return s.Internal.ChainSetHead(p0, p1) +} + +func (s *IChainInfoStruct) GetActor(p0 context.Context, p1 address.Address) (*chain.Actor, error) { + return s.Internal.GetActor(p0, p1) +} + +func (s *IChainInfoStruct) GetEntry(p0 context.Context, p1 abi.ChainEpoch, p2 uint64) (*chain.BeaconEntry, error) { + return s.Internal.GetEntry(p0, p1, p2) +} + +func (s *IChainInfoStruct) GetFullBlock(p0 context.Context, p1 cid.Cid) (*chain.FullBlock, error) { + return s.Internal.GetFullBlock(p0, p1) +} + +func (s *IChainInfoStruct) GetParentStateRootActor(p0 context.Context, p1 *chain.TipSet, p2 address.Address) (*chain.Actor, error) { + return s.Internal.GetParentStateRootActor(p0, p1, p2) +} + +func (s *IChainInfoStruct) MessageWait(p0 context.Context, p1 cid.Cid, p2 abi.ChainEpoch, p3 abi.ChainEpoch) (*chain2.ChainMessage, error) { + return s.Internal.MessageWait(p0, p1, p2, p3) +} + +func (s *IChainInfoStruct) ProtocolParameters(p0 context.Context) (*chain2.ProtocolParams, error) { + return s.Internal.ProtocolParameters(p0) +} + +func (s *IChainInfoStruct) ResolveToKeyAddr(p0 context.Context, p1 address.Address, p2 *chain.TipSet) (address.Address, error) { + return s.Internal.ResolveToKeyAddr(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateGetRandomnessFromBeacon(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 chain.TipSetKey) (abi.Randomness, error) { + return s.Internal.StateGetRandomnessFromBeacon(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) StateGetRandomnessFromTickets(p0 context.Context, p1 crypto.DomainSeparationTag, p2 abi.ChainEpoch, p3 []byte, p4 chain.TipSetKey) (abi.Randomness, error) { + return s.Internal.StateGetRandomnessFromTickets(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) StateNetworkName(p0 context.Context) (chain2.NetworkName, error) { + return s.Internal.StateNetworkName(p0) +} + +func (s *IChainInfoStruct) StateNetworkVersion(p0 context.Context, p1 chain.TipSetKey) (network.Version, error) { + return s.Internal.StateNetworkVersion(p0, p1) +} + +func (s *IChainInfoStruct) StateSearchMsg(p0 context.Context, p1 chain.TipSetKey, p2 cid.Cid, p3 abi.ChainEpoch, p4 bool) (*chain2.MsgLookup, error) { + return s.Internal.StateSearchMsg(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) StateVerifiedRegistryRootKey(p0 context.Context, p1 chain.TipSetKey) (address.Address, error) { + return s.Internal.StateVerifiedRegistryRootKey(p0, p1) +} + +func (s *IChainInfoStruct) StateVerifierStatus(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*abi.StoragePower, error) { + return s.Internal.StateVerifierStatus(p0, p1, p2) +} + +func (s *IChainInfoStruct) StateWaitMsg(p0 context.Context, p1 cid.Cid, p2 uint64, p3 abi.ChainEpoch, p4 bool) (*chain2.MsgLookup, error) { + return s.Internal.StateWaitMsg(p0, p1, p2, p3, p4) +} + +func (s *IChainInfoStruct) VerifyEntry(p0 *chain.BeaconEntry, p1 *chain.BeaconEntry, p2 abi.ChainEpoch) bool { + return s.Internal.VerifyEntry(p0, p1, p2) +} + +type IJwtAuthAPIStruct struct { + Internal struct { + AuthNew func(p0 context.Context, p1 []auth.Permission) ([]byte, error) `perm:"admin"` + + Verify func(p0 context.Context, p1 string, p2 string) ([]auth.Permission, error) `perm:"read"` + } +} + +func (s *IJwtAuthAPIStruct) AuthNew(p0 context.Context, p1 []auth.Permission) ([]byte, error) { + return s.Internal.AuthNew(p0, p1) +} + +func (s *IJwtAuthAPIStruct) Verify(p0 context.Context, p1 string, p2 string) ([]auth.Permission, error) { + return s.Internal.Verify(p0, p1, p2) +} + +type IMarketStruct struct { + Internal struct { + StateMarketParticipants func(p0 context.Context, p1 chain.TipSetKey) (map[string]chain2.MarketBalance, error) `perm:"read"` + } +} + +func (s *IMarketStruct) StateMarketParticipants(p0 context.Context, p1 chain.TipSetKey) (map[string]chain2.MarketBalance, error) { + return s.Internal.StateMarketParticipants(p0, p1) +} + +type IMessagePoolStruct struct { + Internal struct { + GasBatchEstimateMessageGas func(p0 context.Context, p1 []*chain2.EstimateMessage, p2 uint64, p3 chain.TipSetKey) ([]*chain2.EstimateResult, error) `perm:"read"` + + GasEstimateFeeCap func(p0 context.Context, p1 *chain.Message, p2 int64, p3 chain.TipSetKey) (big.Int, error) `perm:"read"` + + GasEstimateGasLimit func(p0 context.Context, p1 *chain.Message, p2 chain.TipSetKey) (int64, error) `perm:"read"` + + GasEstimateGasPremium func(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 chain.TipSetKey) (big.Int, error) `perm:"read"` + + GasEstimateMessageGas func(p0 context.Context, p1 *chain.Message, p2 *chain2.MessageSendSpec, p3 chain.TipSetKey) (*chain.Message, error) `perm:"read"` + + MpoolBatchPush func(p0 context.Context, p1 []*chain.SignedMessage) ([]cid.Cid, error) `perm:"write"` + + MpoolBatchPushMessage func(p0 context.Context, p1 []*chain.Message, p2 *chain2.MessageSendSpec) ([]*chain.SignedMessage, error) `perm:"sign"` + + MpoolBatchPushUntrusted func(p0 context.Context, p1 []*chain.SignedMessage) ([]cid.Cid, error) `perm:"write"` + + MpoolCheckMessages func(p0 context.Context, p1 []*messagepool.MessagePrototype) ([][]messagepool.MessageCheckStatus, error) `perm:"read"` + + MpoolCheckPendingMessages func(p0 context.Context, p1 address.Address) ([][]messagepool.MessageCheckStatus, error) `perm:"read"` + + MpoolCheckReplaceMessages func(p0 context.Context, p1 []*chain.Message) ([][]messagepool.MessageCheckStatus, error) `perm:"read"` + + MpoolClear func(p0 context.Context, p1 bool) error `perm:"write"` + + MpoolDeleteByAdress func(p0 context.Context, p1 address.Address) error `perm:"admin"` + + MpoolGetConfig func(p0 context.Context) (*messagepool.MpoolConfig, error) `perm:"read"` + + MpoolGetNonce func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"read"` + + MpoolPending func(p0 context.Context, p1 chain.TipSetKey) ([]*chain.SignedMessage, error) `perm:"read"` + + MpoolPublishByAddr func(p0 context.Context, p1 address.Address) error `perm:"write"` + + MpoolPublishMessage func(p0 context.Context, p1 *chain.SignedMessage) error `perm:"write"` + + MpoolPush func(p0 context.Context, p1 *chain.SignedMessage) (cid.Cid, error) `perm:"write"` + + MpoolPushMessage func(p0 context.Context, p1 *chain.Message, p2 *chain2.MessageSendSpec) (*chain.SignedMessage, error) `perm:"sign"` + + MpoolPushUntrusted func(p0 context.Context, p1 *chain.SignedMessage) (cid.Cid, error) `perm:"write"` + + MpoolSelect func(p0 context.Context, p1 chain.TipSetKey, p2 float64) ([]*chain.SignedMessage, error) `perm:"read"` + + MpoolSelects func(p0 context.Context, p1 chain.TipSetKey, p2 []float64) ([][]*chain.SignedMessage, error) `perm:"read"` + + MpoolSetConfig func(p0 context.Context, p1 *messagepool.MpoolConfig) error `perm:"admin"` + + MpoolSub func(p0 context.Context) (<-chan messagepool.MpoolUpdate, error) `perm:"read"` + } +} + +func (s *IMessagePoolStruct) GasBatchEstimateMessageGas(p0 context.Context, p1 []*chain2.EstimateMessage, p2 uint64, p3 chain.TipSetKey) ([]*chain2.EstimateResult, error) { + return s.Internal.GasBatchEstimateMessageGas(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) GasEstimateFeeCap(p0 context.Context, p1 *chain.Message, p2 int64, p3 chain.TipSetKey) (big.Int, error) { + return s.Internal.GasEstimateFeeCap(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) GasEstimateGasLimit(p0 context.Context, p1 *chain.Message, p2 chain.TipSetKey) (int64, error) { + return s.Internal.GasEstimateGasLimit(p0, p1, p2) +} + +func (s *IMessagePoolStruct) GasEstimateGasPremium(p0 context.Context, p1 uint64, p2 address.Address, p3 int64, p4 chain.TipSetKey) (big.Int, error) { + return s.Internal.GasEstimateGasPremium(p0, p1, p2, p3, p4) +} + +func (s *IMessagePoolStruct) GasEstimateMessageGas(p0 context.Context, p1 *chain.Message, p2 *chain2.MessageSendSpec, p3 chain.TipSetKey) (*chain.Message, error) { + return s.Internal.GasEstimateMessageGas(p0, p1, p2, p3) +} + +func (s *IMessagePoolStruct) MpoolBatchPush(p0 context.Context, p1 []*chain.SignedMessage) ([]cid.Cid, error) { + return s.Internal.MpoolBatchPush(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolBatchPushMessage(p0 context.Context, p1 []*chain.Message, p2 *chain2.MessageSendSpec) ([]*chain.SignedMessage, error) { + return s.Internal.MpoolBatchPushMessage(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolBatchPushUntrusted(p0 context.Context, p1 []*chain.SignedMessage) ([]cid.Cid, error) { + return s.Internal.MpoolBatchPushUntrusted(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolCheckMessages(p0 context.Context, p1 []*messagepool.MessagePrototype) ([][]messagepool.MessageCheckStatus, error) { + return s.Internal.MpoolCheckMessages(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolCheckPendingMessages(p0 context.Context, p1 address.Address) ([][]messagepool.MessageCheckStatus, error) { + return s.Internal.MpoolCheckPendingMessages(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolCheckReplaceMessages(p0 context.Context, p1 []*chain.Message) ([][]messagepool.MessageCheckStatus, error) { + return s.Internal.MpoolCheckReplaceMessages(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolClear(p0 context.Context, p1 bool) error { + return s.Internal.MpoolClear(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolDeleteByAdress(p0 context.Context, p1 address.Address) error { + return s.Internal.MpoolDeleteByAdress(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolGetConfig(p0 context.Context) (*messagepool.MpoolConfig, error) { + return s.Internal.MpoolGetConfig(p0) +} + +func (s *IMessagePoolStruct) MpoolGetNonce(p0 context.Context, p1 address.Address) (uint64, error) { + return s.Internal.MpoolGetNonce(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPending(p0 context.Context, p1 chain.TipSetKey) ([]*chain.SignedMessage, error) { + return s.Internal.MpoolPending(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPublishByAddr(p0 context.Context, p1 address.Address) error { + return s.Internal.MpoolPublishByAddr(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPublishMessage(p0 context.Context, p1 *chain.SignedMessage) error { + return s.Internal.MpoolPublishMessage(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPush(p0 context.Context, p1 *chain.SignedMessage) (cid.Cid, error) { + return s.Internal.MpoolPush(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolPushMessage(p0 context.Context, p1 *chain.Message, p2 *chain2.MessageSendSpec) (*chain.SignedMessage, error) { + return s.Internal.MpoolPushMessage(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolPushUntrusted(p0 context.Context, p1 *chain.SignedMessage) (cid.Cid, error) { + return s.Internal.MpoolPushUntrusted(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolSelect(p0 context.Context, p1 chain.TipSetKey, p2 float64) ([]*chain.SignedMessage, error) { + return s.Internal.MpoolSelect(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolSelects(p0 context.Context, p1 chain.TipSetKey, p2 []float64) ([][]*chain.SignedMessage, error) { + return s.Internal.MpoolSelects(p0, p1, p2) +} + +func (s *IMessagePoolStruct) MpoolSetConfig(p0 context.Context, p1 *messagepool.MpoolConfig) error { + return s.Internal.MpoolSetConfig(p0, p1) +} + +func (s *IMessagePoolStruct) MpoolSub(p0 context.Context) (<-chan messagepool.MpoolUpdate, error) { + return s.Internal.MpoolSub(p0) +} + +type IMinerStateStruct struct { + Internal struct { + StateCirculatingSupply func(p0 context.Context, p1 chain.TipSetKey) (abi.TokenAmount, error) `perm:"read"` + + StateDealProviderCollateralBounds func(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 chain.TipSetKey) (chain2.DealCollateralBounds, error) `perm:"read"` + + StateListActors func(p0 context.Context, p1 chain.TipSetKey) ([]address.Address, error) `perm:"read"` + + StateListMiners func(p0 context.Context, p1 chain.TipSetKey) ([]address.Address, error) `perm:"read"` + + StateLookupID func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) `perm:"read"` + + StateMarketBalance func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (chain2.MarketBalance, error) `perm:"read"` + + StateMarketDeals func(p0 context.Context, p1 chain.TipSetKey) (map[string]chain2.MarketDeal, error) `perm:"read"` + + StateMarketStorageDeal func(p0 context.Context, p1 abi.DealID, p2 chain.TipSetKey) (*chain2.MarketDeal, error) `perm:"read"` + + StateMinerActiveSectors func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"` + + StateMinerAvailableBalance func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (big.Int, error) `perm:"read"` + + StateMinerDeadlines func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) ([]chain2.Deadline, error) `perm:"read"` + + StateMinerFaults func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (bitfield.BitField, error) `perm:"read"` + + StateMinerInfo func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (miner.MinerInfo, error) `perm:"read"` + + StateMinerInitialPledgeCollateral func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 chain.TipSetKey) (big.Int, error) `perm:"read"` + + StateMinerPartitions func(p0 context.Context, p1 address.Address, p2 uint64, p3 chain.TipSetKey) ([]chain2.Partition, error) `perm:"read"` + + StateMinerPower func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*chain2.MinerPower, error) `perm:"read"` + + StateMinerPreCommitDepositForPower func(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 chain.TipSetKey) (big.Int, error) `perm:"read"` + + StateMinerProvingDeadline func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*dline.Info, error) `perm:"read"` + + StateMinerRecoveries func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (bitfield.BitField, error) `perm:"read"` + + StateMinerSectorAllocated func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (bool, error) `perm:"read"` + + StateMinerSectorCount func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (chain2.MinerSectors, error) `perm:"read"` + + StateMinerSectorSize func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (abi.SectorSize, error) `perm:"read"` + + StateMinerSectors func(p0 context.Context, p1 address.Address, p2 *bitfield.BitField, p3 chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) `perm:"read"` + + StateMinerWorkerAddress func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) `perm:"read"` + + StateSectorExpiration func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorExpiration, error) `perm:"read"` + + StateSectorGetInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorOnChainInfo, error) `perm:"read"` + + StateSectorPartition func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorLocation, error) `perm:"read"` + + StateSectorPreCommitInfo func(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) `perm:"read"` + + StateVMCirculatingSupplyInternal func(p0 context.Context, p1 chain.TipSetKey) (chain.CirculatingSupply, error) `perm:"read"` + + StateVerifiedClientStatus func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*abi.StoragePower, error) `perm:"read"` + } +} + +func (s *IMinerStateStruct) StateCirculatingSupply(p0 context.Context, p1 chain.TipSetKey) (abi.TokenAmount, error) { + return s.Internal.StateCirculatingSupply(p0, p1) +} + +func (s *IMinerStateStruct) StateDealProviderCollateralBounds(p0 context.Context, p1 abi.PaddedPieceSize, p2 bool, p3 chain.TipSetKey) (chain2.DealCollateralBounds, error) { + return s.Internal.StateDealProviderCollateralBounds(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateListActors(p0 context.Context, p1 chain.TipSetKey) ([]address.Address, error) { + return s.Internal.StateListActors(p0, p1) +} + +func (s *IMinerStateStruct) StateListMiners(p0 context.Context, p1 chain.TipSetKey) ([]address.Address, error) { + return s.Internal.StateListMiners(p0, p1) +} + +func (s *IMinerStateStruct) StateLookupID(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) { + return s.Internal.StateLookupID(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMarketBalance(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (chain2.MarketBalance, error) { + return s.Internal.StateMarketBalance(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMarketDeals(p0 context.Context, p1 chain.TipSetKey) (map[string]chain2.MarketDeal, error) { + return s.Internal.StateMarketDeals(p0, p1) +} + +func (s *IMinerStateStruct) StateMarketStorageDeal(p0 context.Context, p1 abi.DealID, p2 chain.TipSetKey) (*chain2.MarketDeal, error) { + return s.Internal.StateMarketStorageDeal(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerActiveSectors(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) { + return s.Internal.StateMinerActiveSectors(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerAvailableBalance(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerAvailableBalance(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerDeadlines(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) ([]chain2.Deadline, error) { + return s.Internal.StateMinerDeadlines(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerFaults(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (bitfield.BitField, error) { + return s.Internal.StateMinerFaults(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerInfo(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (miner.MinerInfo, error) { + return s.Internal.StateMinerInfo(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerInitialPledgeCollateral(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 chain.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerInitialPledgeCollateral(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerPartitions(p0 context.Context, p1 address.Address, p2 uint64, p3 chain.TipSetKey) ([]chain2.Partition, error) { + return s.Internal.StateMinerPartitions(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerPower(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*chain2.MinerPower, error) { + return s.Internal.StateMinerPower(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerPreCommitDepositForPower(p0 context.Context, p1 address.Address, p2 miner.SectorPreCommitInfo, p3 chain.TipSetKey) (big.Int, error) { + return s.Internal.StateMinerPreCommitDepositForPower(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerProvingDeadline(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*dline.Info, error) { + return s.Internal.StateMinerProvingDeadline(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerRecoveries(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (bitfield.BitField, error) { + return s.Internal.StateMinerRecoveries(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectorAllocated(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (bool, error) { + return s.Internal.StateMinerSectorAllocated(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerSectorCount(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (chain2.MinerSectors, error) { + return s.Internal.StateMinerSectorCount(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectorSize(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (abi.SectorSize, error) { + return s.Internal.StateMinerSectorSize(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateMinerSectors(p0 context.Context, p1 address.Address, p2 *bitfield.BitField, p3 chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) { + return s.Internal.StateMinerSectors(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateMinerWorkerAddress(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (address.Address, error) { + return s.Internal.StateMinerWorkerAddress(p0, p1, p2) +} + +func (s *IMinerStateStruct) StateSectorExpiration(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorExpiration, error) { + return s.Internal.StateSectorExpiration(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorGetInfo(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorOnChainInfo, error) { + return s.Internal.StateSectorGetInfo(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorPartition(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (*miner.SectorLocation, error) { + return s.Internal.StateSectorPartition(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateSectorPreCommitInfo(p0 context.Context, p1 address.Address, p2 abi.SectorNumber, p3 chain.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) { + return s.Internal.StateSectorPreCommitInfo(p0, p1, p2, p3) +} + +func (s *IMinerStateStruct) StateVMCirculatingSupplyInternal(p0 context.Context, p1 chain.TipSetKey) (chain.CirculatingSupply, error) { + return s.Internal.StateVMCirculatingSupplyInternal(p0, p1) +} + +func (s *IMinerStateStruct) StateVerifiedClientStatus(p0 context.Context, p1 address.Address, p2 chain.TipSetKey) (*abi.StoragePower, error) { + return s.Internal.StateVerifiedClientStatus(p0, p1, p2) +} + +type IMiningStruct struct { + Internal struct { + MinerCreateBlock func(p0 context.Context, p1 *chain2.BlockTemplate) (*chain.BlockMsg, error) `perm:"write"` + + MinerGetBaseInfo func(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 chain.TipSetKey) (*chain2.MiningBaseInfo, error) `perm:"read"` + } +} + +func (s *IMiningStruct) MinerCreateBlock(p0 context.Context, p1 *chain2.BlockTemplate) (*chain.BlockMsg, error) { + return s.Internal.MinerCreateBlock(p0, p1) +} + +func (s *IMiningStruct) MinerGetBaseInfo(p0 context.Context, p1 address.Address, p2 abi.ChainEpoch, p3 chain.TipSetKey) (*chain2.MiningBaseInfo, error) { + return s.Internal.MinerGetBaseInfo(p0, p1, p2, p3) +} + +type IMultiSigStruct struct { + Internal struct { + MsigAddApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (*messagepool.MessagePrototype, error) `perm:"sign"` + + MsigAddCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (*messagepool.MessagePrototype, error) `perm:"sign"` + + MsigAddPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (*messagepool.MessagePrototype, error) `perm:"sign"` + + MsigApprove func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (*messagepool.MessagePrototype, error) `perm:"sign"` + + MsigApproveTxnHash func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 chain.BigInt, p6 address.Address, p7 uint64, p8 []byte) (*messagepool.MessagePrototype, error) `perm:"sign"` + + MsigCancel func(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 chain.BigInt, p5 address.Address, p6 uint64, p7 []byte) (*messagepool.MessagePrototype, error) `perm:"sign"` + + MsigCreate func(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 chain.BigInt, p5 address.Address, p6 chain.BigInt) (*messagepool.MessagePrototype, error) `perm:"sign"` + + MsigGetVested func(p0 context.Context, p1 address.Address, p2 chain.TipSetKey, p3 chain.TipSetKey) (chain.BigInt, error) `perm:"read"` + + MsigPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 chain.BigInt, p4 address.Address, p5 uint64, p6 []byte) (*messagepool.MessagePrototype, error) `perm:"sign"` + + MsigRemoveSigner func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (*messagepool.MessagePrototype, error) `perm:"sign"` + + MsigSwapApprove func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (*messagepool.MessagePrototype, error) `perm:"sign"` + + MsigSwapCancel func(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (*messagepool.MessagePrototype, error) `perm:"sign"` + + MsigSwapPropose func(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (*messagepool.MessagePrototype, error) `perm:"sign"` + } +} + +func (s *IMultiSigStruct) MsigAddApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 bool) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigAddApprove(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigAddCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 bool) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigAddCancel(p0, p1, p2, p3, p4, p5) +} + +func (s *IMultiSigStruct) MsigAddPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigAddPropose(p0, p1, p2, p3, p4) +} + +func (s *IMultiSigStruct) MsigApprove(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigApprove(p0, p1, p2, p3) +} + +func (s *IMultiSigStruct) MsigApproveTxnHash(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 address.Address, p5 chain.BigInt, p6 address.Address, p7 uint64, p8 []byte) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigApproveTxnHash(p0, p1, p2, p3, p4, p5, p6, p7, p8) +} + +func (s *IMultiSigStruct) MsigCancel(p0 context.Context, p1 address.Address, p2 uint64, p3 address.Address, p4 chain.BigInt, p5 address.Address, p6 uint64, p7 []byte) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigCancel(p0, p1, p2, p3, p4, p5, p6, p7) +} + +func (s *IMultiSigStruct) MsigCreate(p0 context.Context, p1 uint64, p2 []address.Address, p3 abi.ChainEpoch, p4 chain.BigInt, p5 address.Address, p6 chain.BigInt) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigCreate(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigGetVested(p0 context.Context, p1 address.Address, p2 chain.TipSetKey, p3 chain.TipSetKey) (chain.BigInt, error) { + return s.Internal.MsigGetVested(p0, p1, p2, p3) +} + +func (s *IMultiSigStruct) MsigPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 chain.BigInt, p4 address.Address, p5 uint64, p6 []byte) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigPropose(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigRemoveSigner(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 bool) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigRemoveSigner(p0, p1, p2, p3, p4) +} + +func (s *IMultiSigStruct) MsigSwapApprove(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address, p6 address.Address) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigSwapApprove(p0, p1, p2, p3, p4, p5, p6) +} + +func (s *IMultiSigStruct) MsigSwapCancel(p0 context.Context, p1 address.Address, p2 address.Address, p3 uint64, p4 address.Address, p5 address.Address) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigSwapCancel(p0, p1, p2, p3, p4, p5) +} + +func (s *IMultiSigStruct) MsigSwapPropose(p0 context.Context, p1 address.Address, p2 address.Address, p3 address.Address, p4 address.Address) (*messagepool.MessagePrototype, error) { + return s.Internal.MsigSwapPropose(p0, p1, p2, p3, p4) +} + +type INetworkStruct struct { + Internal struct { + NetAddrsListen func(p0 context.Context) (peer.AddrInfo, error) `perm:"read"` + + NetworkConnect func(p0 context.Context, p1 []string) (<-chan net.ConnectionResult, error) `perm:"read"` + + NetworkFindPeer func(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) `perm:"read"` + + NetworkFindProvidersAsync func(p0 context.Context, p1 cid.Cid, p2 int) <-chan peer.AddrInfo `perm:"read"` + + NetworkGetBandwidthStats func(p0 context.Context) metrics.Stats `perm:"admin"` + + NetworkGetClosestPeers func(p0 context.Context, p1 string) ([]peer.ID, error) `perm:"read"` + + NetworkGetPeerAddresses func(p0 context.Context) []ma.Multiaddr `perm:"admin"` + + NetworkGetPeerID func(p0 context.Context) peer.ID `perm:"admin"` + + NetworkPeers func(p0 context.Context, p1 bool, p2 bool, p3 bool) (*net.SwarmConnInfos, error) `perm:"read"` + + Version func(p0 context.Context) (chain2.Version, error) `perm:"read"` + } +} + +func (s *INetworkStruct) NetAddrsListen(p0 context.Context) (peer.AddrInfo, error) { + return s.Internal.NetAddrsListen(p0) +} + +func (s *INetworkStruct) NetworkConnect(p0 context.Context, p1 []string) (<-chan net.ConnectionResult, error) { + return s.Internal.NetworkConnect(p0, p1) +} + +func (s *INetworkStruct) NetworkFindPeer(p0 context.Context, p1 peer.ID) (peer.AddrInfo, error) { + return s.Internal.NetworkFindPeer(p0, p1) +} + +func (s *INetworkStruct) NetworkFindProvidersAsync(p0 context.Context, p1 cid.Cid, p2 int) <-chan peer.AddrInfo { + return s.Internal.NetworkFindProvidersAsync(p0, p1, p2) +} + +func (s *INetworkStruct) NetworkGetBandwidthStats(p0 context.Context) metrics.Stats { + return s.Internal.NetworkGetBandwidthStats(p0) +} + +func (s *INetworkStruct) NetworkGetClosestPeers(p0 context.Context, p1 string) ([]peer.ID, error) { + return s.Internal.NetworkGetClosestPeers(p0, p1) +} + +func (s *INetworkStruct) NetworkGetPeerAddresses(p0 context.Context) []ma.Multiaddr { + return s.Internal.NetworkGetPeerAddresses(p0) +} + +func (s *INetworkStruct) NetworkGetPeerID(p0 context.Context) peer.ID { + return s.Internal.NetworkGetPeerID(p0) +} + +func (s *INetworkStruct) NetworkPeers(p0 context.Context, p1 bool, p2 bool, p3 bool) (*net.SwarmConnInfos, error) { + return s.Internal.NetworkPeers(p0, p1, p2, p3) +} + +func (s *INetworkStruct) Version(p0 context.Context) (chain2.Version, error) { + return s.Internal.Version(p0) +} + +type IPaychanStruct struct { + Internal struct { + PaychAllocateLane func(p0 context.Context, p1 address.Address) (uint64, error) `perm:"sign"` + + PaychAvailableFunds func(p0 context.Context, p1 address.Address) (*chain2.ChannelAvailableFunds, error) `perm:"sign"` + + PaychAvailableFundsByFromTo func(p0 context.Context, p1 address.Address, p2 address.Address) (*chain2.ChannelAvailableFunds, error) `perm:"sign"` + + PaychCollect func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"` + + PaychGet func(p0 context.Context, p1 address.Address, p2 address.Address, p3 big.Int) (*paych.ChannelInfo, error) `perm:"sign"` + + PaychGetWaitReady func(p0 context.Context, p1 cid.Cid) (address.Address, error) `perm:"sign"` + + PaychList func(p0 context.Context) ([]address.Address, error) `perm:"read"` + + PaychNewPayment func(p0 context.Context, p1 address.Address, p2 address.Address, p3 []paych.VoucherSpec) (*paych.PaymentInfo, error) `perm:"sign"` + + PaychSettle func(p0 context.Context, p1 address.Address) (cid.Cid, error) `perm:"sign"` + + PaychStatus func(p0 context.Context, p1 address.Address) (*paych.Status, error) `perm:"read"` + + PaychVoucherAdd func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 big.Int) (big.Int, error) `perm:"write"` + + PaychVoucherCheckSpendable func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (bool, error) `perm:"read"` + + PaychVoucherCheckValid func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher) error `perm:"read"` + + PaychVoucherCreate func(p0 context.Context, p1 address.Address, p2 big.Int, p3 uint64) (*paych.VoucherCreateResult, error) `perm:"sign"` + + PaychVoucherList func(p0 context.Context, p1 address.Address) ([]*paych.SignedVoucher, error) `perm:"write"` + + PaychVoucherSubmit func(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) `perm:"sign"` + } +} + +func (s *IPaychanStruct) PaychAllocateLane(p0 context.Context, p1 address.Address) (uint64, error) { + return s.Internal.PaychAllocateLane(p0, p1) +} + +func (s *IPaychanStruct) PaychAvailableFunds(p0 context.Context, p1 address.Address) (*chain2.ChannelAvailableFunds, error) { + return s.Internal.PaychAvailableFunds(p0, p1) +} + +func (s *IPaychanStruct) PaychAvailableFundsByFromTo(p0 context.Context, p1 address.Address, p2 address.Address) (*chain2.ChannelAvailableFunds, error) { + return s.Internal.PaychAvailableFundsByFromTo(p0, p1, p2) +} + +func (s *IPaychanStruct) PaychCollect(p0 context.Context, p1 address.Address) (cid.Cid, error) { + return s.Internal.PaychCollect(p0, p1) +} + +func (s *IPaychanStruct) PaychGet(p0 context.Context, p1 address.Address, p2 address.Address, p3 big.Int) (*paych.ChannelInfo, error) { + return s.Internal.PaychGet(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychGetWaitReady(p0 context.Context, p1 cid.Cid) (address.Address, error) { + return s.Internal.PaychGetWaitReady(p0, p1) +} + +func (s *IPaychanStruct) PaychList(p0 context.Context) ([]address.Address, error) { + return s.Internal.PaychList(p0) +} + +func (s *IPaychanStruct) PaychNewPayment(p0 context.Context, p1 address.Address, p2 address.Address, p3 []paych.VoucherSpec) (*paych.PaymentInfo, error) { + return s.Internal.PaychNewPayment(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychSettle(p0 context.Context, p1 address.Address) (cid.Cid, error) { + return s.Internal.PaychSettle(p0, p1) +} + +func (s *IPaychanStruct) PaychStatus(p0 context.Context, p1 address.Address) (*paych.Status, error) { + return s.Internal.PaychStatus(p0, p1) +} + +func (s *IPaychanStruct) PaychVoucherAdd(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 big.Int) (big.Int, error) { + return s.Internal.PaychVoucherAdd(p0, p1, p2, p3, p4) +} + +func (s *IPaychanStruct) PaychVoucherCheckSpendable(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (bool, error) { + return s.Internal.PaychVoucherCheckSpendable(p0, p1, p2, p3, p4) +} + +func (s *IPaychanStruct) PaychVoucherCheckValid(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher) error { + return s.Internal.PaychVoucherCheckValid(p0, p1, p2) +} + +func (s *IPaychanStruct) PaychVoucherCreate(p0 context.Context, p1 address.Address, p2 big.Int, p3 uint64) (*paych.VoucherCreateResult, error) { + return s.Internal.PaychVoucherCreate(p0, p1, p2, p3) +} + +func (s *IPaychanStruct) PaychVoucherList(p0 context.Context, p1 address.Address) ([]*paych.SignedVoucher, error) { + return s.Internal.PaychVoucherList(p0, p1) +} + +func (s *IPaychanStruct) PaychVoucherSubmit(p0 context.Context, p1 address.Address, p2 *paych.SignedVoucher, p3 []byte, p4 []byte) (cid.Cid, error) { + return s.Internal.PaychVoucherSubmit(p0, p1, p2, p3, p4) +} + +type ISyncerStruct struct { + Internal struct { + ChainSyncHandleNewTipSet func(p0 context.Context, p1 *chain.ChainInfo) error `perm:"write"` + + ChainTipSetWeight func(p0 context.Context, p1 chain.TipSetKey) (big.Int, error) `perm:"read"` + + Concurrent func(p0 context.Context) int64 `perm:"read"` + + SetConcurrent func(p0 context.Context, p1 int64) error `perm:"admin"` + + StateCall func(p0 context.Context, p1 *chain.Message, p2 chain.TipSetKey) (*chain2.InvocResult, error) `perm:"read"` + + SyncState func(p0 context.Context) (*chain2.SyncState, error) `perm:"read"` + + SyncSubmitBlock func(p0 context.Context, p1 *chain.BlockMsg) error `perm:"write"` + + SyncerTracker func(p0 context.Context) *chain2.TargetTracker `perm:"read"` + } +} + +func (s *ISyncerStruct) ChainSyncHandleNewTipSet(p0 context.Context, p1 *chain.ChainInfo) error { + return s.Internal.ChainSyncHandleNewTipSet(p0, p1) +} + +func (s *ISyncerStruct) ChainTipSetWeight(p0 context.Context, p1 chain.TipSetKey) (big.Int, error) { + return s.Internal.ChainTipSetWeight(p0, p1) +} + +func (s *ISyncerStruct) Concurrent(p0 context.Context) int64 { + return s.Internal.Concurrent(p0) +} + +func (s *ISyncerStruct) SetConcurrent(p0 context.Context, p1 int64) error { + return s.Internal.SetConcurrent(p0, p1) +} + +func (s *ISyncerStruct) StateCall(p0 context.Context, p1 *chain.Message, p2 chain.TipSetKey) (*chain2.InvocResult, error) { + return s.Internal.StateCall(p0, p1, p2) +} + +func (s *ISyncerStruct) SyncState(p0 context.Context) (*chain2.SyncState, error) { + return s.Internal.SyncState(p0) +} + +func (s *ISyncerStruct) SyncSubmitBlock(p0 context.Context, p1 *chain.BlockMsg) error { + return s.Internal.SyncSubmitBlock(p0, p1) +} + +func (s *ISyncerStruct) SyncerTracker(p0 context.Context) *chain2.TargetTracker { + return s.Internal.SyncerTracker(p0) +} + +type IWalletStruct struct { + Internal struct { + HasPassword func(p0 context.Context) bool `perm:"admin"` + + LockWallet func(p0 context.Context) error `perm:"admin"` + + SetPassword func(p0 context.Context, p1 []byte) error `perm:"admin"` + + UnLockWallet func(p0 context.Context, p1 []byte) error `perm:"admin"` + + WalletAddresses func(p0 context.Context) []address.Address `perm:"admin"` + + WalletBalance func(p0 context.Context, p1 address.Address) (abi.TokenAmount, error) `perm:"read"` + + WalletDefaultAddress func(p0 context.Context) (address.Address, error) `perm:"write"` + + WalletExport func(p0 context.Context, p1 address.Address, p2 string) (*wallet.KeyInfo, error) `perm:"admin"` + + WalletHas func(p0 context.Context, p1 address.Address) (bool, error) `perm:"write"` + + WalletImport func(p0 context.Context, p1 *wallet.KeyInfo) (address.Address, error) `perm:"admin"` + + WalletNewAddress func(p0 context.Context, p1 address.Protocol) (address.Address, error) `perm:"write"` + + WalletSetDefault func(p0 context.Context, p1 address.Address) error `perm:"write"` + + WalletSign func(p0 context.Context, p1 address.Address, p2 []byte, p3 wallet.MsgMeta) (*crypto.Signature, error) `perm:"sign"` + + WalletSignMessage func(p0 context.Context, p1 address.Address, p2 *chain.Message) (*chain.SignedMessage, error) `perm:"sign"` + + WalletState func(p0 context.Context) int `perm:"admin"` + } +} + +func (s *IWalletStruct) HasPassword(p0 context.Context) bool { + return s.Internal.HasPassword(p0) +} + +func (s *IWalletStruct) LockWallet(p0 context.Context) error { + return s.Internal.LockWallet(p0) +} + +func (s *IWalletStruct) SetPassword(p0 context.Context, p1 []byte) error { + return s.Internal.SetPassword(p0, p1) +} + +func (s *IWalletStruct) UnLockWallet(p0 context.Context, p1 []byte) error { + return s.Internal.UnLockWallet(p0, p1) +} + +func (s *IWalletStruct) WalletAddresses(p0 context.Context) []address.Address { + return s.Internal.WalletAddresses(p0) +} + +func (s *IWalletStruct) WalletBalance(p0 context.Context, p1 address.Address) (abi.TokenAmount, error) { + return s.Internal.WalletBalance(p0, p1) +} + +func (s *IWalletStruct) WalletDefaultAddress(p0 context.Context) (address.Address, error) { + return s.Internal.WalletDefaultAddress(p0) +} + +func (s *IWalletStruct) WalletExport(p0 context.Context, p1 address.Address, p2 string) (*wallet.KeyInfo, error) { + return s.Internal.WalletExport(p0, p1, p2) +} + +func (s *IWalletStruct) WalletHas(p0 context.Context, p1 address.Address) (bool, error) { + return s.Internal.WalletHas(p0, p1) +} + +func (s *IWalletStruct) WalletImport(p0 context.Context, p1 *wallet.KeyInfo) (address.Address, error) { + return s.Internal.WalletImport(p0, p1) +} + +func (s *IWalletStruct) WalletNewAddress(p0 context.Context, p1 address.Protocol) (address.Address, error) { + return s.Internal.WalletNewAddress(p0, p1) +} + +func (s *IWalletStruct) WalletSetDefault(p0 context.Context, p1 address.Address) error { + return s.Internal.WalletSetDefault(p0, p1) +} + +func (s *IWalletStruct) WalletSign(p0 context.Context, p1 address.Address, p2 []byte, p3 wallet.MsgMeta) (*crypto.Signature, error) { + return s.Internal.WalletSign(p0, p1, p2, p3) +} + +func (s *IWalletStruct) WalletSignMessage(p0 context.Context, p1 address.Address, p2 *chain.Message) (*chain.SignedMessage, error) { + return s.Internal.WalletSignMessage(p0, p1, p2) +} + +func (s *IWalletStruct) WalletState(p0 context.Context) int { + return s.Internal.WalletState(p0) +} diff --git a/venus-shared/api/chain/v1/syncer.go b/venus-shared/api/chain/v1/syncer.go new file mode 100644 index 0000000000..560e4ededa --- /dev/null +++ b/venus-shared/api/chain/v1/syncer.go @@ -0,0 +1,21 @@ +package v1 + +import ( + "context" + + "github.com/filecoin-project/go-state-types/big" + + chain2 "github.com/filecoin-project/venus/venus-shared/api/chain" + "github.com/filecoin-project/venus/venus-shared/chain" +) + +type ISyncer interface { + ChainSyncHandleNewTipSet(ctx context.Context, ci *chain.ChainInfo) error //perm:write + SetConcurrent(ctx context.Context, concurrent int64) error //perm:admin + SyncerTracker(ctx context.Context) *chain2.TargetTracker //perm:read + Concurrent(ctx context.Context) int64 //perm:read + ChainTipSetWeight(ctx context.Context, tsk chain.TipSetKey) (big.Int, error) //perm:read + SyncSubmitBlock(ctx context.Context, blk *chain.BlockMsg) error //perm:write + StateCall(ctx context.Context, msg *chain.Message, tsk chain.TipSetKey) (*chain2.InvocResult, error) //perm:read + SyncState(ctx context.Context) (*chain2.SyncState, error) //perm:read +} diff --git a/venus-shared/api/chain/v1/wallet.go b/venus-shared/api/chain/v1/wallet.go new file mode 100644 index 0000000000..20f47aad0e --- /dev/null +++ b/venus-shared/api/chain/v1/wallet.go @@ -0,0 +1,30 @@ +package v1 + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" + + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/filecoin-project/venus/venus-shared/wallet" +) + +type IWallet interface { + WalletSign(ctx context.Context, k address.Address, msg []byte, meta wallet.MsgMeta) (*crypto.Signature, error) //perm:sign + WalletExport(ctx context.Context, addr address.Address, password string) (*wallet.KeyInfo, error) //perm:admin + WalletImport(ctx context.Context, key *wallet.KeyInfo) (address.Address, error) //perm:admin + WalletHas(ctx context.Context, addr address.Address) (bool, error) //perm:write + WalletNewAddress(ctx context.Context, protocol address.Protocol) (address.Address, error) //perm:write + WalletBalance(ctx context.Context, addr address.Address) (abi.TokenAmount, error) //perm:read + WalletDefaultAddress(ctx context.Context) (address.Address, error) //perm:write + WalletAddresses(ctx context.Context) []address.Address //perm:admin + WalletSetDefault(ctx context.Context, addr address.Address) error //perm:write + WalletSignMessage(ctx context.Context, k address.Address, msg *chain.Message) (*chain.SignedMessage, error) //perm:sign + LockWallet(ctx context.Context) error //perm:admin + UnLockWallet(ctx context.Context, password []byte) error //perm:admin + SetPassword(ctx context.Context, password []byte) error //perm:admin + HasPassword(ctx context.Context) bool //perm:admin + WalletState(ctx context.Context) int //perm:admin +} diff --git a/venus-shared/api/client/client.go b/venus-shared/api/client/client.go new file mode 100644 index 0000000000..922013238f --- /dev/null +++ b/venus-shared/api/client/client.go @@ -0,0 +1,30 @@ +package client + +import ( + "context" + "github.com/filecoin-project/go-jsonrpc" + v0 "github.com/filecoin-project/venus/venus-shared/api/chain/v0" + v1 "github.com/filecoin-project/venus/venus-shared/api/chain/v1" + + "net/http" +) + +func NewFullRPCV0(ctx context.Context, addr string, header http.Header) (v0.FullNode, jsonrpc.ClientCloser, error) { + var full v0.FullNodeStruct + closer, err := jsonrpc.NewClient(ctx, addr, "Filecoin", &full, + header) + return &full, closer, err +} + +func NewFullRPCV1(ctx context.Context, addr string, header http.Header) (v1.FullNode, jsonrpc.ClientCloser, error) { + var full v1.FullNodeStruct + closer, err := jsonrpc.NewClient(ctx, addr, "Filecoin", &full, + header) + return &full, closer, err +} + +func NewWalletRPC(ctx context.Context, addr string, header http.Header) (v1.IWallet, jsonrpc.ClientCloser, error) { + var wallet v1.IWalletStruct + closer, err := jsonrpc.NewClient(ctx, addr, "Filecoin", &wallet, header) + return &wallet, closer, err +} diff --git a/venus-shared/api/proxy_util.go b/venus-shared/api/proxy_util.go new file mode 100644 index 0000000000..ba94a9e5dc --- /dev/null +++ b/venus-shared/api/proxy_util.go @@ -0,0 +1,30 @@ +package api + +import "reflect" + +var _internalField = "Internal" + +// GetInternalStructs extracts all pointers to 'Internal' sub-structs from the provided pointer to a proxy struct +func GetInternalStructs(in interface{}) []interface{} { + return getInternalStructs(reflect.ValueOf(in).Elem()) +} + +func getInternalStructs(rv reflect.Value) []interface{} { + var out []interface{} + + internal := rv.FieldByName(_internalField) + ii := internal.Addr().Interface() + out = append(out, ii) + + for i := 0; i < rv.NumField(); i++ { + if rv.Type().Field(i).Name == _internalField { + continue + } + + sub := getInternalStructs(rv.Field(i)) + + out = append(out, sub...) + } + + return out +} diff --git a/venus-shared/api/proxy_util_test.go b/venus-shared/api/proxy_util_test.go new file mode 100644 index 0000000000..bf9a4c0c06 --- /dev/null +++ b/venus-shared/api/proxy_util_test.go @@ -0,0 +1,65 @@ +package api + +import ( + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/stretchr/testify/require" +) + +type StrA struct { + StrB + + Internal struct { + A int + } +} + +type StrB struct { + Internal struct { + B int + } +} + +type StrC struct { + Internal struct { + Internal struct { + C int + } + } +} + +func TestGetInternalStructs(t *testing.T) { + tf.UnitTest(t) + var proxy StrA + + sts := GetInternalStructs(&proxy) + require.Len(t, sts, 2) + + sa := sts[0].(*struct{ A int }) + sa.A = 3 + sb := sts[1].(*struct{ B int }) + sb.B = 4 + + require.Equal(t, 3, proxy.Internal.A) + require.Equal(t, 4, proxy.StrB.Internal.B) +} + +func TestNestedInternalStructs(t *testing.T) { + tf.UnitTest(t) + var proxy StrC + + // check that only the top-level internal struct gets picked up + + sts := GetInternalStructs(&proxy) + require.Len(t, sts, 1) + + sa := sts[0].(*struct { + Internal struct { + C int + } + }) + sa.Internal.C = 5 + + require.Equal(t, 5, proxy.Internal.Internal.C) +} diff --git a/venus-shared/api/version.go b/venus-shared/api/version.go new file mode 100644 index 0000000000..b80a222e21 --- /dev/null +++ b/venus-shared/api/version.go @@ -0,0 +1,72 @@ +package api + +import ( + "fmt" + "golang.org/x/xerrors" +) + +type Version uint32 + +func NewVer(major, minor, patch uint8) Version { + return Version(uint32(major)<<16 | uint32(minor)<<8 | uint32(patch)) +} + +// Ints returns (major, minor, patch) versions +func (ve Version) Ints() (uint32, uint32, uint32) { + v := uint32(ve) + return (v & majorOnlyMask) >> 16, (v & minorOnlyMask) >> 8, v & patchOnlyMask +} + +func (ve Version) String() string { + vmj, vmi, vp := ve.Ints() + return fmt.Sprintf("%d.%d.%d", vmj, vmi, vp) +} + +func (ve Version) EqMajorMinor(v2 Version) bool { + return ve&minorMask == v2&minorMask +} + +type NodeType int + +const ( + NodeUnknown NodeType = iota + + NodeFull + NodeMiner + NodeWorker +) + +var RunningNodeType NodeType + +func VersionForType(nodeType NodeType) (Version, error) { + switch nodeType { + case NodeFull: + return FullAPIVersion1, nil + case NodeMiner: + return MinerAPIVersion0, nil + case NodeWorker: + return WorkerAPIVersion0, nil + default: + return Version(0), xerrors.Errorf("unknown node type %d", nodeType) + } +} + +// semver versions of the rpc api exposed +var ( + FullAPIVersion0 = NewVer(1, 4, 0) + FullAPIVersion1 = NewVer(2, 1, 0) + + MinerAPIVersion0 = NewVer(1, 2, 0) + WorkerAPIVersion0 = NewVer(1, 5, 0) +) + +//nolint:varcheck,deadcode +const ( + majorMask = 0xff0000 + minorMask = 0xffff00 + patchMask = 0xffffff + + majorOnlyMask = 0xff0000 + minorOnlyMask = 0x00ff00 + patchOnlyMask = 0x0000ff +) diff --git a/venus-shared/bazaar/bazaar.go b/venus-shared/bazaar/bazaar.go new file mode 100644 index 0000000000..79dcd35c8c --- /dev/null +++ b/venus-shared/bazaar/bazaar.go @@ -0,0 +1,12 @@ +package bazaar + +import ( + "context" + + "github.com/libp2p/go-libp2p-core/peer" +) + +type Host interface { + RegisterHandler(typ Event, hdl EventHandler) error + Emit(ctx context.Context, evt Event, to ...peer.ID) error +} diff --git a/venus-shared/bazaar/event.go b/venus-shared/bazaar/event.go new file mode 100644 index 0000000000..9fc4c328a0 --- /dev/null +++ b/venus-shared/bazaar/event.go @@ -0,0 +1,16 @@ +package bazaar + +import "github.com/libp2p/go-libp2p-core/peer" + +// developers can define the types except Ping +const EventPing EventType = 0 + +type EventType uint64 + +type Event struct { + Type EventType + Data []byte + Time int64 +} + +type EventHandler func(peer.ID, *Event) error diff --git a/venus-shared/chain/actor.go b/venus-shared/chain/actor.go new file mode 100644 index 0000000000..2d20c6cfc1 --- /dev/null +++ b/venus-shared/chain/actor.go @@ -0,0 +1,59 @@ +package chain + +import ( + "errors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" +) + +var ErrActorNotFound = errors.New("actor not found") + +// Actor is the central abstraction of entities in the system. +// +// Both individual accounts, as well as contracts (user & system level) are +// represented as actors. An actor has the following core functionality implemented on a system level: +// - track a Filecoin balance, using the `Balance` field +// - execute code stored in the `Code` field +// - read & write memory +// - replay protection, using the `Nonce` field +// +// Value sent to a non-existent address will be tracked as an empty actor that has a Balance but +// nil Code and Memory. You must nil check Code cids before comparing them. +// +// More specific capabilities for individual accounts or contract specific must be implemented +// inside the code. +// +// Not safe for concurrent access. +type Actor struct { + // Code is a CID of the VM code for this actor's implementation (or a constant for actors implemented in Go code). + // Code may be nil for an uninitialized actor (which exists because it has received a balance). + Code cid.Cid + // Head is the CID of the root of the actor's state tree. + Head cid.Cid + // Nonce is the number expected on the next message from this actor. + // Messages are processed in strict, contiguous order. + Nonce uint64 + // Balance is the amount of attoFIL in the actor's account. + Balance abi.TokenAmount +} + +// NewActor constructs a new actor. +func NewActor(code cid.Cid, balance abi.TokenAmount, head cid.Cid) *Actor { + return &Actor{ + Code: code, + Nonce: 0, + Balance: balance, + Head: head, + } +} + +// Empty tests whether the actor's code is defined. +func (t *Actor) Empty() bool { + return !t.Code.Defined() +} + +// IncrementSeqNum increments the seq number. +func (t *Actor) IncrementSeqNum() { + t.Nonce = t.Nonce + 1 +} diff --git a/venus-shared/chain/actor_test.go b/venus-shared/chain/actor_test.go new file mode 100644 index 0000000000..dbeb099f0c --- /dev/null +++ b/venus-shared/chain/actor_test.go @@ -0,0 +1,39 @@ +package chain + +import ( + "bytes" + "testing" + + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" +) + +func TestActorBasic(t *testing.T) { + tf.UnitTest(t) + var buf bytes.Buffer + for i := 0; i < 32; i++ { + var src, dst Actor + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst, "empty values") + }, + + Provided: func() { + require.NotEqual(t, src.Code, cid.Undef) + require.NotEqual(t, src.Head, cid.Undef) + }, + + Finished: func() { + require.Equal(t, src, dst, "from src to dst through cbor") + + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} diff --git a/venus-shared/chain/beacon.go b/venus-shared/chain/beacon.go new file mode 100644 index 0000000000..b7abe21233 --- /dev/null +++ b/venus-shared/chain/beacon.go @@ -0,0 +1,6 @@ +package chain + +type BeaconEntry struct { + Round uint64 + Data []byte +} diff --git a/venus-shared/chain/beacon_test.go b/venus-shared/chain/beacon_test.go new file mode 100644 index 0000000000..09be937ff2 --- /dev/null +++ b/venus-shared/chain/beacon_test.go @@ -0,0 +1,44 @@ +package chain + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" +) + +func TestBeaconEntryBasic(t *testing.T) { + tf.UnitTest(t) + dataLen := 32 + + var buf bytes.Buffer + for i := 0; i < 32; i++ { + var src, dst BeaconEntry + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst, "empty values") + require.Nil(t, src.Data) + }, + + ProvideOpts: []interface{}{ + testutil.BytesFixedProvider(dataLen), + }, + + Provided: func() { + require.Len(t, src.Data, dataLen) + }, + + Finished: func() { + require.Equal(t, src, dst, "from src to dst through cbor") + + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} diff --git a/venus-shared/chain/bigint.go b/venus-shared/chain/bigint.go new file mode 100644 index 0000000000..1baecc9d80 --- /dev/null +++ b/venus-shared/chain/bigint.go @@ -0,0 +1,59 @@ +package chain + +import ( + "fmt" + "math/big" + + big2 "github.com/filecoin-project/go-state-types/big" +) + +var EmptyInt = BigInt{} + +type BigInt = big2.Int + +func NewInt(i uint64) BigInt { + return BigInt{Int: big.NewInt(0).SetUint64(i)} +} + +func BigFromBytes(b []byte) BigInt { + i := big.NewInt(0).SetBytes(b) + return BigInt{Int: i} +} + +func BigFromString(s string) (BigInt, error) { + v, ok := big.NewInt(0).SetString(s, 10) + if !ok { + return BigInt{}, fmt.Errorf("failed to parse string as a big int") + } + + return BigInt{Int: v}, nil +} + +func BigMul(a, b BigInt) BigInt { + return BigInt{Int: big.NewInt(0).Mul(a.Int, b.Int)} +} + +func BigDiv(a, b BigInt) BigInt { + return BigInt{Int: big.NewInt(0).Div(a.Int, b.Int)} +} + +func BigDivFloat(num, den BigInt) float64 { + res, _ := new(big.Rat).SetFrac(num.Int, den.Int).Float64() + return res +} + +func BigMod(a, b BigInt) BigInt { + return BigInt{Int: big.NewInt(0).Mod(a.Int, b.Int)} +} + +func BigAdd(a, b BigInt) BigInt { + return BigInt{Int: big.NewInt(0).Add(a.Int, b.Int)} +} + +func BigSub(a, b BigInt) BigInt { + return BigInt{Int: big.NewInt(0).Sub(a.Int, b.Int)} +} + +func BigCmp(a, b BigInt) int { + return a.Int.Cmp(b.Int) +} diff --git a/venus-shared/chain/bigint_fil.go b/venus-shared/chain/bigint_fil.go new file mode 100644 index 0000000000..8831be37e5 --- /dev/null +++ b/venus-shared/chain/bigint_fil.go @@ -0,0 +1,147 @@ +package chain + +import ( + "encoding" + "fmt" + "math/big" + "strings" + + fbig "github.com/filecoin-project/go-state-types/big" + + "github.com/filecoin-project/venus/venus-shared/chain/params" +) + +var ZeroFIL = fbig.NewInt(0) + +type FIL BigInt + +func (f FIL) String() string { + return f.Unitless() + " FIL" +} + +var AttoFil = NewInt(1) +var FemtoFil = BigMul(AttoFil, NewInt(1000)) +var PicoFil = BigMul(FemtoFil, NewInt(1000)) +var NanoFil = BigMul(PicoFil, NewInt(1000)) + +func (f FIL) Unitless() string { + r := new(big.Rat).SetFrac(f.Int, big.NewInt(int64(params.FilecoinPrecision))) + if r.Sign() == 0 { + return "0" + } + return strings.TrimRight(strings.TrimRight(r.FloatString(18), "0"), ".") +} + +var unitPrefixes = []string{"a", "f", "p", "n", "ฮผ", "m"} + +func (f FIL) Short() string { + n := BigInt(f).Abs() + + dn := uint64(1) + var prefix string + for _, p := range unitPrefixes { + if n.LessThan(NewInt(dn * 1000)) { + prefix = p + break + } + dn *= 1000 + } + + r := new(big.Rat).SetFrac(f.Int, big.NewInt(int64(dn))) + if r.Sign() == 0 { + return "0" + } + + return strings.TrimRight(strings.TrimRight(r.FloatString(3), "0"), ".") + " " + prefix + "FIL" +} + +func (f FIL) Nano() string { + r := new(big.Rat).SetFrac(f.Int, big.NewInt(int64(1e9))) + if r.Sign() == 0 { + return "0" + } + + return strings.TrimRight(strings.TrimRight(r.FloatString(9), "0"), ".") + " nFIL" +} + +func (f FIL) Format(s fmt.State, ch rune) { + switch ch { + case 's', 'v': + fmt.Fprint(s, f.String()) + default: + f.Int.Format(s, ch) + } +} + +func (f FIL) MarshalText() (text []byte, err error) { + return []byte(f.String()), nil +} + +func (f FIL) UnmarshalText(text []byte) error { + p, err := ParseFIL(string(text)) + if err != nil { + return err + } + + if f.Int == nil { + f.Int = big.NewInt(0) + } + + f.Int.Set(p.Int) + return nil +} + +func ParseFIL(s string) (FIL, error) { + suffix := strings.TrimLeft(s, "-.1234567890") + s = s[:len(s)-len(suffix)] + var attofil bool + if suffix != "" { + norm := strings.ToLower(strings.TrimSpace(suffix)) + switch norm { + case "", "fil": + case "attofil", "afil": + attofil = true + default: + return FIL{}, fmt.Errorf("unrecognized suffix: %q", suffix) + } + } + + if len(s) > 50 { + return FIL{}, fmt.Errorf("string length too large: %d", len(s)) + } + + r, ok := new(big.Rat).SetString(s) + if !ok { + return FIL{}, fmt.Errorf("failed to parse %q as a decimal number", s) + } + + if !attofil { + r = r.Mul(r, big.NewRat(int64(params.FilecoinPrecision), 1)) + } + + if !r.IsInt() { + var pref string + if attofil { + pref = "atto" + } + return FIL{}, fmt.Errorf("invalid %sFIL value: %q", pref, s) + } + + return FIL{r.Num()}, nil +} + +func MustParseFIL(s string) FIL { + n, err := ParseFIL(s) + if err != nil { + panic(err) + } + + return n +} + +func FromFil(i uint64) BigInt { + return BigMul(NewInt(i), NewInt(params.FilecoinPrecision)) +} + +var _ encoding.TextMarshaler = (*FIL)(nil) +var _ encoding.TextUnmarshaler = (*FIL)(nil) diff --git a/venus-shared/chain/bigint_fil_test.go b/venus-shared/chain/bigint_fil_test.go new file mode 100644 index 0000000000..c9ef06902b --- /dev/null +++ b/venus-shared/chain/bigint_fil_test.go @@ -0,0 +1,191 @@ +package chain + +import ( + "strings" + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/chain/params" + "github.com/filecoin-project/venus/venus-shared/testutil" + "github.com/stretchr/testify/require" +) + +func TestFilRoundTrip(t *testing.T) { + tf.UnitTest(t) + testValues := []string{ + "0 FIL", "1 FIL", "1.001 FIL", "100.10001 FIL", "101100 FIL", "5000.01 FIL", "5000 FIL", + strings.Repeat("1", 50) + " FIL", + } + + for _, v := range testValues { + fval := MustParseFIL(v) + + if fval.String() != v { + t.Fatal("mismatch in values!", v, fval.String()) + } + + text, err := fval.MarshalText() + require.NoError(t, err, "marshal text for fval") + + fval2 := FIL(NewInt(0)) + err = fval2.UnmarshalText(text) + require.NoError(t, err, "unmarshal text for fval2") + require.True(t, BigInt{Int: fval.Int}.Equals(BigInt{Int: fval2.Int})) + } +} + +func TestParseAttoFils(t *testing.T) { + tf.UnitTest(t) + testValues := []string{ + "0 aFIL", "1 aFIL", "1 aFIL", "100 aFIL", "101100 aFIL", "5000 aFIL", + "0 attoFIL", "1 attoFIL", "1 attoFIL", "100 attoFIL", "101100 attoFIL", "5000 attoFIL", + } + + for _, v := range testValues { + fval := MustParseFIL(v) + + text, err := fval.MarshalText() + require.NoError(t, err, "marshal text for fval") + + fval2 := FIL(NewInt(0)) + err = fval2.UnmarshalText(text) + require.NoError(t, err, "unmarshal text for fval2") + require.True(t, BigInt{Int: fval.Int}.Equals(BigInt{Int: fval2.Int})) + } +} + +func TestInvalidFILString(t *testing.T) { + tf.UnitTest(t) + testValues := []string{ + "0 nFIL", "1 nFIL", "1.001 nFIL", "100.10001 nFIL", "101100 nFIL", "5000.01 nFIL", "5000 nFIL", + "1.001.1 FIL", + strings.Repeat("1", 51) + " FIL", + } + + for _, v := range testValues { + _, err := ParseFIL(v) + require.Errorf(t, err, "invalid fil string %s", v) + } +} + +func TestBigFromFIL(t *testing.T) { + tf.UnitTest(t) + ratio := NewInt(params.FilecoinPrecision) + + nums := make([]uint64, 32) + testutil.Provide(t, &nums, testutil.IntRangedProvider(10, 1000)) + + for i := range nums { + fval := FromFil(nums[i]) + require.True(t, fval.GreaterThan(ZeroFIL), "greater than zero") + require.True(t, ratio.Equals(BigDiv(fval, NewInt(nums[i]))), "fil precision") + } +} + +func TestFilShort(t *testing.T) { + tf.UnitTest(t) + for _, s := range []struct { + fil string + expect string + }{ + + {fil: "1", expect: "1 FIL"}, + {fil: "1.1", expect: "1.1 FIL"}, + {fil: "12", expect: "12 FIL"}, + {fil: "123", expect: "123 FIL"}, + {fil: "123456", expect: "123456 FIL"}, + {fil: "123.23", expect: "123.23 FIL"}, + {fil: "123456.234", expect: "123456.234 FIL"}, + {fil: "123456.2341234", expect: "123456.234 FIL"}, + {fil: "123456.234123445", expect: "123456.234 FIL"}, + + {fil: "0.1", expect: "100 mFIL"}, + {fil: "0.01", expect: "10 mFIL"}, + {fil: "0.001", expect: "1 mFIL"}, + + {fil: "0.0001", expect: "100 ฮผFIL"}, + {fil: "0.00001", expect: "10 ฮผFIL"}, + {fil: "0.000001", expect: "1 ฮผFIL"}, + + {fil: "0.0000001", expect: "100 nFIL"}, + {fil: "0.00000001", expect: "10 nFIL"}, + {fil: "0.000000001", expect: "1 nFIL"}, + + {fil: "0.0000000001", expect: "100 pFIL"}, + {fil: "0.00000000001", expect: "10 pFIL"}, + {fil: "0.000000000001", expect: "1 pFIL"}, + + {fil: "0.0000000000001", expect: "100 fFIL"}, + {fil: "0.00000000000001", expect: "10 fFIL"}, + {fil: "0.000000000000001", expect: "1 fFIL"}, + + {fil: "0.0000000000000001", expect: "100 aFIL"}, + {fil: "0.00000000000000001", expect: "10 aFIL"}, + {fil: "0.000000000000000001", expect: "1 aFIL"}, + + {fil: "0.0000012", expect: "1.2 ฮผFIL"}, + {fil: "0.00000123", expect: "1.23 ฮผFIL"}, + {fil: "0.000001234", expect: "1.234 ฮผFIL"}, + {fil: "0.0000012344", expect: "1.234 ฮผFIL"}, + {fil: "0.00000123444", expect: "1.234 ฮผFIL"}, + + {fil: "0.0002212", expect: "221.2 ฮผFIL"}, + {fil: "0.00022123", expect: "221.23 ฮผFIL"}, + {fil: "0.000221234", expect: "221.234 ฮผFIL"}, + {fil: "0.0002212344", expect: "221.234 ฮผFIL"}, + {fil: "0.00022123444", expect: "221.234 ฮผFIL"}, + + {fil: "-1", expect: "-1 FIL"}, + {fil: "-1.1", expect: "-1.1 FIL"}, + {fil: "-12", expect: "-12 FIL"}, + {fil: "-123", expect: "-123 FIL"}, + {fil: "-123456", expect: "-123456 FIL"}, + {fil: "-123.23", expect: "-123.23 FIL"}, + {fil: "-123456.234", expect: "-123456.234 FIL"}, + {fil: "-123456.2341234", expect: "-123456.234 FIL"}, + {fil: "-123456.234123445", expect: "-123456.234 FIL"}, + + {fil: "-0.1", expect: "-100 mFIL"}, + {fil: "-0.01", expect: "-10 mFIL"}, + {fil: "-0.001", expect: "-1 mFIL"}, + + {fil: "-0.0001", expect: "-100 ฮผFIL"}, + {fil: "-0.00001", expect: "-10 ฮผFIL"}, + {fil: "-0.000001", expect: "-1 ฮผFIL"}, + + {fil: "-0.0000001", expect: "-100 nFIL"}, + {fil: "-0.00000001", expect: "-10 nFIL"}, + {fil: "-0.000000001", expect: "-1 nFIL"}, + + {fil: "-0.0000000001", expect: "-100 pFIL"}, + {fil: "-0.00000000001", expect: "-10 pFIL"}, + {fil: "-0.000000000001", expect: "-1 pFIL"}, + + {fil: "-0.0000000000001", expect: "-100 fFIL"}, + {fil: "-0.00000000000001", expect: "-10 fFIL"}, + {fil: "-0.000000000000001", expect: "-1 fFIL"}, + + {fil: "-0.0000000000000001", expect: "-100 aFIL"}, + {fil: "-0.00000000000000001", expect: "-10 aFIL"}, + {fil: "-0.000000000000000001", expect: "-1 aFIL"}, + + {fil: "-0.0000012", expect: "-1.2 ฮผFIL"}, + {fil: "-0.00000123", expect: "-1.23 ฮผFIL"}, + {fil: "-0.000001234", expect: "-1.234 ฮผFIL"}, + {fil: "-0.0000012344", expect: "-1.234 ฮผFIL"}, + {fil: "-0.00000123444", expect: "-1.234 ฮผFIL"}, + + {fil: "-0.0002212", expect: "-221.2 ฮผFIL"}, + {fil: "-0.00022123", expect: "-221.23 ฮผFIL"}, + {fil: "-0.000221234", expect: "-221.234 ฮผFIL"}, + {fil: "-0.0002212344", expect: "-221.234 ฮผFIL"}, + {fil: "-0.00022123444", expect: "-221.234 ฮผFIL"}, + } { + s := s + t.Run(s.fil, func(t *testing.T) { + f, err := ParseFIL(s.fil) + require.NoError(t, err) + require.Equal(t, s.expect, f.Short()) + }) + } +} diff --git a/venus-shared/chain/bigint_test.go b/venus-shared/chain/bigint_test.go new file mode 100644 index 0000000000..5ae880d076 --- /dev/null +++ b/venus-shared/chain/bigint_test.go @@ -0,0 +1,94 @@ +package chain + +import ( + "bytes" + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" + "github.com/stretchr/testify/require" +) + +func TestBigIntSerializationRoundTrip(t *testing.T) { + tf.UnitTest(t) + testValues := []string{ + "0", "1", "10", "-10", "9999", "12345678901234567891234567890123456789012345678901234567890", + } + + for _, v := range testValues { + bi, err := BigFromString(v) + if err != nil { + t.Fatal(err) + } + + buf := new(bytes.Buffer) + if err := bi.MarshalCBOR(buf); err != nil { + t.Fatal(err) + } + + var out BigInt + if err := out.UnmarshalCBOR(buf); err != nil { + t.Fatal(err) + } + + if BigCmp(out, bi) != 0 { + t.Fatal("failed to round trip BigInt through cbor") + } + + } +} + +func TestBigIntParseErr(t *testing.T) { + tf.UnitTest(t) + testValues := []string{ + "a0", "1b", "10c", "-1d0", "9e999", "f12345678901234567891234567890123456789012345678901234567890", + } + + for _, v := range testValues { + _, err := BigFromString(v) + require.Error(t, err, "from invalid big int string") + } +} + +func TestBigIntCalculating(t *testing.T) { + tf.UnitTest(t) + zero := NewInt(0) + maxProvideAttempts := 8 + for i := 0; i < 32; i++ { + var a, b BigInt + for attempt := 0; ; i++ { + if attempt == maxProvideAttempts { + t.Fatal("unable to get required numbers") + } + + testutil.Provide(t, &a) + testutil.Provide(t, &b) + + if a == EmptyInt || b == EmptyInt { + t.Fatal("BigInt not provided") + } + + if !a.Equals(zero) || !b.Equals(zero) { + break + } + } + + sum := BigAdd(a, b) + product := BigMul(a, b) + + require.True(t, BigSub(sum, a).Equals(b)) + require.True(t, BigDiv(product, a).Equals(b)) + + base := a + if base.IsZero() { + base = b + } + + base4 := BigMul(base, NewInt(4)) + require.Equal(t, BigDivFloat(base4, base), 4.0) + require.Equal(t, BigDivFloat(base, base4), 0.25) + + abs := base.Abs() + require.True(t, BigMod(abs, BigAdd(abs, NewInt(1))).Equals(abs)) + } +} diff --git a/venus-shared/chain/bigint_unit.go b/venus-shared/chain/bigint_unit.go new file mode 100644 index 0000000000..fe364acba3 --- /dev/null +++ b/venus-shared/chain/bigint_unit.go @@ -0,0 +1,34 @@ +package chain + +import ( + "fmt" + "math/big" +) + +var byteSizeUnits = []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB"} + +func SizeStr(bi BigInt) string { + f, i := unitNumber(bi, byteSizeUnits) + return fmt.Sprintf("%.4g %s", f, byteSizeUnits[i]) +} + +var deciUnits = []string{"", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"} + +func DeciStr(bi BigInt) string { + f, i := unitNumber(bi, deciUnits) + return fmt.Sprintf("%.3g %s", f, deciUnits[i]) +} + +func unitNumber(n BigInt, units []string) (float64, int) { + r := new(big.Rat).SetInt(n.Int) + den := big.NewRat(1, 1024) + + var i int + for f, _ := r.Float64(); f >= 1024 && i+1 < len(units); f, _ = r.Float64() { + i++ + r = r.Mul(r, den) + } + + f, _ := r.Float64() + return f, i +} diff --git a/venus-shared/chain/bigint_unit_test.go b/venus-shared/chain/bigint_unit_test.go new file mode 100644 index 0000000000..3b86094797 --- /dev/null +++ b/venus-shared/chain/bigint_unit_test.go @@ -0,0 +1,63 @@ +package chain + +import ( + "math/big" + "math/rand" + "strings" + "testing" + "time" + + "github.com/docker/go-units" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/stretchr/testify/require" +) + +func TestUnitStrs(t *testing.T) { + tf.UnitTest(t) + cases := []struct { + in uint64 + size string + deci string + }{ + {0, "0 B", "0 "}, + {1, "1 B", "1 "}, + {1016, "1016 B", "1.02e+03 "}, + {1024, "1 KiB", "1 Ki"}, + {1000 * 1024, "1000 KiB", "1e+03 Ki"}, + {2000, "1.953 KiB", "1.95 Ki"}, + {5 << 20, "5 MiB", "5 Mi"}, + {11 << 60, "11 EiB", "11 Ei"}, + } + + for _, c := range cases { + require.Equal(t, c.size, SizeStr(NewInt(c.in)), "result of SizeStr") + require.Equal(t, c.deci, DeciStr(NewInt(c.in)), "result of DeciStr") + } +} + +func TestSizeStrUnitsSymmetry(t *testing.T) { + tf.UnitTest(t) + s := rand.NewSource(time.Now().UnixNano()) + r := rand.New(s) + + for i := 0; i < 10000; i++ { + n := r.Uint64() + l := strings.ReplaceAll(units.BytesSize(float64(n)), " ", "") + r := strings.ReplaceAll(SizeStr(NewInt(n)), " ", "") + + require.NotContains(t, l, "e+") + require.NotContains(t, r, "e+") + + require.Equal(t, l, r, "wrong formatting for %d", n) + } +} + +func TestSizeStrBig(t *testing.T) { + tf.UnitTest(t) + ZiB := big.NewInt(50000) + ZiB = ZiB.Lsh(ZiB, 70) + + require.Equal(t, "5e+04 ZiB", SizeStr(BigInt{Int: ZiB}), "inout %+v, produced wrong result", ZiB) + +} diff --git a/venus-shared/chain/block_header.go b/venus-shared/chain/block_header.go new file mode 100644 index 0000000000..cc17a3d4e4 --- /dev/null +++ b/venus-shared/chain/block_header.go @@ -0,0 +1,196 @@ +package chain + +import ( + "bytes" + "encoding/json" + "fmt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + proof2 "github.com/filecoin-project/specs-actors/v2/actors/runtime/proof" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" + cbor "github.com/ipfs/go-ipld-cbor" + node "github.com/ipfs/go-ipld-format" +) + +// DecodeBlock decodes raw cbor bytes into a BlockHeader. +func DecodeBlock(b []byte) (*BlockHeader, error) { + var out BlockHeader + if err := out.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, err + } + + return &out, nil +} + +// BlockHeader is a newBlock in the blockchain. +type BlockHeader struct { + // Miner is the address of the miner actor that mined this newBlock. + Miner address.Address + + // Ticket is the ticket submitted with this newBlock. + Ticket *Ticket + + // ElectionProof is the vrf proof giving this newBlock's miner authoring rights + ElectionProof *ElectionProof + + // BeaconEntries contain the verifiable oracle randomness used to elect + // this newBlock's author leader + BeaconEntries []BeaconEntry + + // WinPoStProof are the winning post proofs + WinPoStProof []proof2.PoStProof + + // Parents is the set of parents this newBlock was based on. Typically one, + // but can be several in the case where there were multiple winning ticket- + // holders for an epoch. + Parents []cid.Cid + + // ParentWeight is the aggregate chain weight of the parent set. + ParentWeight big.Int + + // Height is the chain height of this newBlock. + Height abi.ChainEpoch + + // ParentStateRoot is the CID of the root of the state tree after application of the messages in the parent tipset + // to the parent tipset's state root. + ParentStateRoot cid.Cid + + // ParentMessageReceipts is a list of receipts corresponding to the application of the messages in the parent tipset + // to the parent tipset's state root (corresponding to this newBlock's ParentStateRoot). + ParentMessageReceipts cid.Cid + + // Messages is the set of messages included in this newBlock + Messages cid.Cid + + // The aggregate signature of all BLS signed messages in the newBlock + BLSAggregate *crypto.Signature + + // The timestamp, in seconds since the Unix epoch, at which this newBlock was created. + Timestamp uint64 + + // The signature of the miner's worker key over the newBlock + BlockSig *crypto.Signature + + // ForkSignaling is extra data used by miners to communicate + ForkSignaling uint64 + + //identical for all blocks in same tipset: the base fee after executing parent tipset + ParentBaseFee abi.TokenAmount + + validated bool // internal, true if the signature has been validated +} + +// Cid returns the content id of this newBlock. +func (b *BlockHeader) Cid() cid.Cid { + c, _, err := b.SerializeWithCid() + if err != nil { + panic(err) + } + + return c +} + +func (b *BlockHeader) String() string { + errStr := "(error encoding BlockHeader)" + c, _, err := b.SerializeWithCid() + if err != nil { + return errStr + } + + js, err := json.MarshalIndent(b, "", " ") + if err != nil { + return errStr + } + + return fmt.Sprintf("BlockHeader cid=[%v]: %s", c, string(js)) +} + +// Equals returns true if the BlockHeader is equal to other. +func (b *BlockHeader) Equals(other *BlockHeader) bool { + return b.Cid().Equals(other.Cid()) +} + +// SignatureData returns the newBlock's bytes with a null signature field for +// signature creation and verification +func (b *BlockHeader) SignatureData() ([]byte, error) { + tmp := *b + tmp.BlockSig = nil + return tmp.Serialize() +} + +// Serialize serialize blockheader to binary +func (b *BlockHeader) Serialize() ([]byte, error) { + buf := new(bytes.Buffer) + if err := b.MarshalCBOR(buf); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +func (b *BlockHeader) SerializeWithCid() (cid.Cid, []byte, error) { + data, err := b.Serialize() + if err != nil { + return cid.Undef, nil, err + } + + c, err := abi.CidBuilder.Sum(data) + if err != nil { + return cid.Undef, nil, err + } + + return c, data, nil +} + +// ToStorageBlock convert blockheader to data block with cid +func (b *BlockHeader) ToStorageBlock() (blocks.Block, error) { + c, data, err := b.SerializeWithCid() + if err != nil { + return nil, err + } + + return blocks.NewBlockWithCid(data, c) +} + +// LastTicket get ticket in block +func (b *BlockHeader) LastTicket() *Ticket { + return b.Ticket +} + +// SetValidated set block signature is valid after checkout blocksig +func (b *BlockHeader) SetValidated() { + b.validated = true +} + +// IsValidated check whether block signature is valid from memory +func (b *BlockHeader) IsValidated() bool { + return b.validated +} + +// ToNode converts the BlockHeader to an IPLD node. +func (b *BlockHeader) ToNode() node.Node { + buf := new(bytes.Buffer) + err := b.MarshalCBOR(buf) + if err != nil { + panic(err) + } + data := buf.Bytes() + c, err := DefaultCidBuilder.Sum(data) + if err != nil { + panic(err) + } + + blk, err := blocks.NewBlockWithCid(data, c) + if err != nil { + panic(err) + } + n, err := cbor.DecodeBlock(blk) + if err != nil { + panic(err) + } + return n +} diff --git a/venus-shared/chain/block_header_test.go b/venus-shared/chain/block_header_test.go new file mode 100644 index 0000000000..7b5bf75175 --- /dev/null +++ b/venus-shared/chain/block_header_test.go @@ -0,0 +1,109 @@ +package chain + +import ( + "bytes" + "encoding/hex" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" +) + +func TestBlockHeaderMarshal(t *testing.T) { + tf.UnitTest(t) + const mdata = "f021344" + const cdata = "bafy2bzaced35aqx5wnwp4ohegreumsheigitrhcqlr3lmz4phyzwikmi44sww" + const bdata = "904400e0a601815860b48541b503b47535334553bf0d1fc702d395133e28b48bbae7550e955025ee09f642cb82c79de036099c657b7efb78e10b685aa99d817f6e560805787c5df894ac6758b0d68c72fb498113a5e763ef65d5bff576cd7fc3a847684a410b89c63c82025860a233b638f28312f9014728cf42e2c353bbf2031506488fa3192d137881e8b9666a2d131218e96b51b701f826940ef6630ae13b20c7bf115155e349c88363949fd7704f8026c3c3b1f872d9085e912856d2b56b8ce8a6fb8cf4e996aaa8476e2c81821a001506545860a699f4d93c54d66d46a46cab8da059fbf7ef82e40dd19a67fc1c5a402422304e7b8eec5c2dc6107e0cf1be676f12ce9b05675160e1c66f0ae5ebcf056e303ca39aa813acd5403844604b51f1e3dd5fcd271978346b85cdfa6d75cb46e2c6609581820358c09095232420f9caff389c0709ace12897ad0b5734b104011849e0f008febf39d8c64079236d3e75c24c08a613bcd946538a4b966b3c5a79cf61832c673f2ec90d22d02c16e28073c20995f5259567736d6e6f2fee588c7c23ca1946d753a783fe14404c3f4684a0a7cf5ceadc8a7a2cd9ad0387b96608eca6d3604ed7beb948f7fa2e235f1d611114f66752c6c36ac9aeb17c2f36d70accbd7554678034381486a1a95ea36db4dc549ee152a00c1b454da4f47b33327609be8b055f14681a2edf84d82a5827000171a0e4022084da38b952ab5644c5418c3305b3c22b5eca92eab9e23cdb675163773a964c53d82a5827000171a0e402201ef87dc542d008d961a30a36935a06d28ef05e4ed5e22f7779c4f3f8002c451dd82a5827000171a0e4022079bfefc62c740cda4b0463ceba68e9613c5c47ef7bbed968b179763ae7978bf4d82a5827000171a0e402202f9becc403d7228035f153d9cba42db472ed3c1cb3f22c7ae02eaaabca53e80f460001d7dbb8171a00067680d82a5827000171a0e402204f2120d6581f3d69a5d62e25dd993d1825ce6a446ffa801a4092e7e3a28d4b73d82a5827000171a0e402204bc482ae9a6a1afd1a252264a4bcae9fb2150faf9910b80703e9fbb91ab041e3d82a5827000171a0e4022017d2c80f5b157b61e96ea4ef3888762fa81a9a853bffa624f4bfb9c388859a88586102b3f7f6dc71591af0a61bbcad978178fc123a6edbec959716c028ec976b997df83af557a5ad1d05544d5ce82e5461c562196ea998b437bf0ceb7965871bd6d9e16a2df9cfaaf50b627f5a406d344f1ae0d8e0eaa5835f9c092fe24681cbc7761d1a618f1680586102920f0a831f86073b12641e6c880ddc2823a9c7b1b14b56f7995eaafc35df9c8f3066cd3ab9693c53b388e4c46d7680b50dcd242471d763a5114274c475eeb7d6561e35f51db3b6ac46c4fb8f4218ddc6d6fae3c1cd09fa70c21e6e87bd94e33100420064" + const sdata = "904400e0a601815860b48541b503b47535334553bf0d1fc702d395133e28b48bbae7550e955025ee09f642cb82c79de036099c657b7efb78e10b685aa99d817f6e560805787c5df894ac6758b0d68c72fb498113a5e763ef65d5bff576cd7fc3a847684a410b89c63c82025860a233b638f28312f9014728cf42e2c353bbf2031506488fa3192d137881e8b9666a2d131218e96b51b701f826940ef6630ae13b20c7bf115155e349c88363949fd7704f8026c3c3b1f872d9085e912856d2b56b8ce8a6fb8cf4e996aaa8476e2c81821a001506545860a699f4d93c54d66d46a46cab8da059fbf7ef82e40dd19a67fc1c5a402422304e7b8eec5c2dc6107e0cf1be676f12ce9b05675160e1c66f0ae5ebcf056e303ca39aa813acd5403844604b51f1e3dd5fcd271978346b85cdfa6d75cb46e2c6609581820358c09095232420f9caff389c0709ace12897ad0b5734b104011849e0f008febf39d8c64079236d3e75c24c08a613bcd946538a4b966b3c5a79cf61832c673f2ec90d22d02c16e28073c20995f5259567736d6e6f2fee588c7c23ca1946d753a783fe14404c3f4684a0a7cf5ceadc8a7a2cd9ad0387b96608eca6d3604ed7beb948f7fa2e235f1d611114f66752c6c36ac9aeb17c2f36d70accbd7554678034381486a1a95ea36db4dc549ee152a00c1b454da4f47b33327609be8b055f14681a2edf84d82a5827000171a0e4022084da38b952ab5644c5418c3305b3c22b5eca92eab9e23cdb675163773a964c53d82a5827000171a0e402201ef87dc542d008d961a30a36935a06d28ef05e4ed5e22f7779c4f3f8002c451dd82a5827000171a0e4022079bfefc62c740cda4b0463ceba68e9613c5c47ef7bbed968b179763ae7978bf4d82a5827000171a0e402202f9becc403d7228035f153d9cba42db472ed3c1cb3f22c7ae02eaaabca53e80f460001d7dbb8171a00067680d82a5827000171a0e402204f2120d6581f3d69a5d62e25dd993d1825ce6a446ffa801a4092e7e3a28d4b73d82a5827000171a0e402204bc482ae9a6a1afd1a252264a4bcae9fb2150faf9910b80703e9fbb91ab041e3d82a5827000171a0e4022017d2c80f5b157b61e96ea4ef3888762fa81a9a853bffa624f4bfb9c388859a88586102b3f7f6dc71591af0a61bbcad978178fc123a6edbec959716c028ec976b997df83af557a5ad1d05544d5ce82e5461c562196ea998b437bf0ceb7965871bd6d9e16a2df9cfaaf50b627f5a406d344f1ae0d8e0eaa5835f9c092fe24681cbc7761d1a618f1680f600420064" + + maddr, err := address.NewFromString(mdata) + require.NoErrorf(t, err, "parse miner address %s", mdata) + + c, err := cid.Decode(cdata) + require.NoErrorf(t, err, "decode cid %s", cdata) + + require.NotEqual(t, bdata, sdata, "check raw sign bytes") + + b, err := hex.DecodeString(bdata) + require.NoError(t, err, "decode block header binary") + + signb, err := hex.DecodeString(sdata) + require.NoError(t, err, "decode sign bytes") + + bh, err := DecodeBlock(b) + require.NoError(t, err, "decode block header") + + require.Equal(t, maddr, bh.Miner, "check for miner") + signdata, err := bh.SignatureData() + require.NoError(t, err, "call bh.SignatureData") + require.Equal(t, signb, signdata, "check for signature data") + + require.Equal(t, c, bh.Cid(), "check for bh.Cid()") + serialized, err := bh.Serialize() + require.NoError(t, err, "call bh.Serialize") + require.Equal(t, b, serialized, "check for bh.Serialize()") + + blk, err := bh.ToStorageBlock() + require.NoError(t, err, "call bh.ToStorageBlock") + + require.Equal(t, c, blk.Cid(), "check for blk.Cid()") + require.Equal(t, b, blk.RawData(), "check for blk.RawData()") +} + +func TestBlockHeaderBasic(t *testing.T) { + tf.UnitTest(t) + var buf bytes.Buffer + sliceLen := 5 + bytesLen := 32 + for i := 0; i < 64; i++ { + var src, dst BlockHeader + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst) + }, + + ProvideOpts: []interface{}{ + testutil.WithSliceLen(sliceLen), + testutil.BytesFixedProvider(bytesLen), + testutil.IDAddressProvider(), + }, + + Provided: func() { + require.Equal(t, src.Miner.Protocol(), address.ID, "miner addr proto") + require.Len(t, src.Parents, sliceLen, "parents length") + require.NotNil(t, src.ElectionProof, "ElectionProof") + require.Len(t, src.ElectionProof.VRFProof, bytesLen, "VRFProof len") + require.NotNil(t, src.BlockSig, "BlockSig") + require.Len(t, src.BlockSig.Data, bytesLen, "BlockSig.Data len") + require.NotNil(t, src.BLSAggregate, "BLSAggregate") + require.Len(t, src.BLSAggregate.Data, bytesLen, "BLSAggregate.Data len") + }, + + Marshaled: func(b []byte) { + decoded, err := DecodeBlock(b) + require.NoError(t, err, "DecodeBlock") + require.Equal(t, src, *decoded) + }, + + Finished: func() { + require.Equal(t, src.LastTicket(), dst.LastTicket()) + require.Equal(t, src, dst) + require.Equal(t, src.String(), dst.String()) + require.True(t, src.Equals(&dst)) + + require.False(t, src.IsValidated(), "check validated before set") + + src.SetValidated() + require.True(t, src.IsValidated(), "check validated before set") + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} diff --git a/venus-shared/chain/block_message.go b/venus-shared/chain/block_message.go new file mode 100644 index 0000000000..c631f35a81 --- /dev/null +++ b/venus-shared/chain/block_message.go @@ -0,0 +1,9 @@ +package chain + +// BlockMessagesInfo contains messages for one newBlock in a tipset. +type BlockMessagesInfo struct { //nolint + BlsMessages []ChainMsg + SecpkMessages []ChainMsg + + Block *BlockHeader +} diff --git a/venus-shared/chain/block_message_test.go b/venus-shared/chain/block_message_test.go new file mode 100644 index 0000000000..be92e26733 --- /dev/null +++ b/venus-shared/chain/block_message_test.go @@ -0,0 +1,11 @@ +package chain + +import ( + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestBlockMessageBasic(t *testing.T) { + tf.UnitTest(t) +} diff --git a/venus-shared/chain/block_msg.go b/venus-shared/chain/block_msg.go new file mode 100644 index 0000000000..078651998a --- /dev/null +++ b/venus-shared/chain/block_msg.go @@ -0,0 +1,28 @@ +package chain + +import ( + "bytes" + + "github.com/ipfs/go-cid" +) + +type BlockMsg struct { // nolint: golint + Header *BlockHeader + BlsMessages []cid.Cid + SecpkMessages []cid.Cid +} + +// Cid return block cid +func (bm *BlockMsg) Cid() cid.Cid { + return bm.Header.Cid() +} + +// Serialize return blockmsg binary +func (bm *BlockMsg) Serialize() ([]byte, error) { + buf := new(bytes.Buffer) + if err := bm.MarshalCBOR(buf); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} diff --git a/venus-shared/chain/block_msg_test.go b/venus-shared/chain/block_msg_test.go new file mode 100644 index 0000000000..b18e6f7d37 --- /dev/null +++ b/venus-shared/chain/block_msg_test.go @@ -0,0 +1,65 @@ +package chain + +import ( + "bytes" + "testing" + + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-state-types/abi" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" +) + +func TestBlockMsgBasic(t *testing.T) { + tf.UnitTest(t) + msgLen := 16 + emptyCids := make([]cid.Cid, msgLen) + + var buf bytes.Buffer + for i := 0; i < 32; i++ { + var src, dst BlockMsg + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst) + require.Nil(t, src.Header) + require.Nil(t, src.BlsMessages) + require.Nil(t, src.SecpkMessages) + }, + + ProvideOpts: []interface{}{ + testutil.WithSliceLen(msgLen), + }, + + Provided: func() { + require.NotEqual(t, src, dst, "value provided") + require.NotNil(t, src.Header) + require.NotEqual(t, emptyCids, src.BlsMessages) + require.NotEqual(t, emptyCids, src.SecpkMessages) + }, + + Marshaled: func(b []byte) { + bmCid := src.Cid() + require.Equal(t, bmCid, src.Header.Cid(), "Cid() result for BlockMsg") + + sumCid, err := abi.CidBuilder.Sum(b) + require.NoError(t, err, "CidBuilder.Sum") + + require.NotEqual(t, bmCid, sumCid) + + serialized, err := src.Serialize() + require.NoError(t, err, "Serialize") + require.Equal(t, b, serialized) + }, + + Finished: func() { + require.Equal(t, src, dst, "after unmarshaling") + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} diff --git a/venus-shared/chain/cbor_gen.go b/venus-shared/chain/cbor_gen.go new file mode 100644 index 0000000000..f64c7e78d5 --- /dev/null +++ b/venus-shared/chain/cbor_gen.go @@ -0,0 +1,1641 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package chain + +import ( + "fmt" + "io" + "math" + "sort" + + abi "github.com/filecoin-project/go-state-types/abi" + crypto "github.com/filecoin-project/go-state-types/crypto" + exitcode "github.com/filecoin-project/go-state-types/exitcode" + proof "github.com/filecoin-project/specs-actors/actors/runtime/proof" + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = math.E +var _ = sort.Sort + +var lengthBufBlockHeader = []byte{144} + +func (t *BlockHeader) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufBlockHeader); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Miner (address.Address) (struct) + if err := t.Miner.MarshalCBOR(w); err != nil { + return err + } + + // t.Ticket (chain.Ticket) (struct) + if err := t.Ticket.MarshalCBOR(w); err != nil { + return err + } + + // t.ElectionProof (chain.ElectionProof) (struct) + if err := t.ElectionProof.MarshalCBOR(w); err != nil { + return err + } + + // t.BeaconEntries ([]chain.BeaconEntry) (slice) + if len(t.BeaconEntries) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.BeaconEntries was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.BeaconEntries))); err != nil { + return err + } + for _, v := range t.BeaconEntries { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.WinPoStProof ([]proof.PoStProof) (slice) + if len(t.WinPoStProof) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.WinPoStProof was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.WinPoStProof))); err != nil { + return err + } + for _, v := range t.WinPoStProof { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.Parents ([]cid.Cid) (slice) + if len(t.Parents) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Parents was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Parents))); err != nil { + return err + } + for _, v := range t.Parents { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.Parents: %w", err) + } + } + + // t.ParentWeight (big.Int) (struct) + if err := t.ParentWeight.MarshalCBOR(w); err != nil { + return err + } + + // t.Height (abi.ChainEpoch) (int64) + if t.Height >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Height)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.Height-1)); err != nil { + return err + } + } + + // t.ParentStateRoot (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.ParentStateRoot); err != nil { + return xerrors.Errorf("failed to write cid field t.ParentStateRoot: %w", err) + } + + // t.ParentMessageReceipts (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.ParentMessageReceipts); err != nil { + return xerrors.Errorf("failed to write cid field t.ParentMessageReceipts: %w", err) + } + + // t.Messages (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.Messages); err != nil { + return xerrors.Errorf("failed to write cid field t.Messages: %w", err) + } + + // t.BLSAggregate (crypto.Signature) (struct) + if err := t.BLSAggregate.MarshalCBOR(w); err != nil { + return err + } + + // t.Timestamp (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Timestamp)); err != nil { + return err + } + + // t.BlockSig (crypto.Signature) (struct) + if err := t.BlockSig.MarshalCBOR(w); err != nil { + return err + } + + // t.ForkSignaling (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.ForkSignaling)); err != nil { + return err + } + + // t.ParentBaseFee (big.Int) (struct) + if err := t.ParentBaseFee.MarshalCBOR(w); err != nil { + return err + } + return nil +} + +func (t *BlockHeader) UnmarshalCBOR(r io.Reader) error { + *t = BlockHeader{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 16 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Miner (address.Address) (struct) + + { + + if err := t.Miner.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Miner: %w", err) + } + + } + // t.Ticket (chain.Ticket) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.Ticket = new(Ticket) + if err := t.Ticket.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Ticket pointer: %w", err) + } + } + + } + // t.ElectionProof (chain.ElectionProof) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.ElectionProof = new(ElectionProof) + if err := t.ElectionProof.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.ElectionProof pointer: %w", err) + } + } + + } + // t.BeaconEntries ([]chain.BeaconEntry) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.BeaconEntries: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.BeaconEntries = make([]BeaconEntry, extra) + } + + for i := 0; i < int(extra); i++ { + + var v BeaconEntry + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.BeaconEntries[i] = v + } + + // t.WinPoStProof ([]proof.PoStProof) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.WinPoStProof: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.WinPoStProof = make([]proof.PoStProof, extra) + } + + for i := 0; i < int(extra); i++ { + + var v proof.PoStProof + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.WinPoStProof[i] = v + } + + // t.Parents ([]cid.Cid) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Parents: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Parents = make([]cid.Cid, extra) + } + + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.Parents failed: %w", err) + } + t.Parents[i] = c + } + + // t.ParentWeight (big.Int) (struct) + + { + + if err := t.ParentWeight.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.ParentWeight: %w", err) + } + + } + // t.Height (abi.ChainEpoch) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.Height = abi.ChainEpoch(extraI) + } + // t.ParentStateRoot (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.ParentStateRoot: %w", err) + } + + t.ParentStateRoot = c + + } + // t.ParentMessageReceipts (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.ParentMessageReceipts: %w", err) + } + + t.ParentMessageReceipts = c + + } + // t.Messages (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.Messages: %w", err) + } + + t.Messages = c + + } + // t.BLSAggregate (crypto.Signature) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.BLSAggregate = new(crypto.Signature) + if err := t.BLSAggregate.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.BLSAggregate pointer: %w", err) + } + } + + } + // t.Timestamp (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Timestamp = uint64(extra) + + } + // t.BlockSig (crypto.Signature) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.BlockSig = new(crypto.Signature) + if err := t.BlockSig.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.BlockSig pointer: %w", err) + } + } + + } + // t.ForkSignaling (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.ForkSignaling = uint64(extra) + + } + // t.ParentBaseFee (big.Int) (struct) + + { + + if err := t.ParentBaseFee.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.ParentBaseFee: %w", err) + } + + } + return nil +} + +var lengthBufTicket = []byte{129} + +func (t *Ticket) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufTicket); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.VRFProof (chain.VRFPi) (slice) + if len(t.VRFProof) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.VRFProof was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.VRFProof))); err != nil { + return err + } + + if _, err := w.Write(t.VRFProof[:]); err != nil { + return err + } + return nil +} + +func (t *Ticket) UnmarshalCBOR(r io.Reader) error { + *t = Ticket{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 1 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.VRFProof (chain.VRFPi) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.VRFProof: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.VRFProof = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.VRFProof[:]); err != nil { + return err + } + return nil +} + +var lengthBufElectionProof = []byte{130} + +func (t *ElectionProof) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufElectionProof); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.WinCount (int64) (int64) + if t.WinCount >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.WinCount)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.WinCount-1)); err != nil { + return err + } + } + + // t.VRFProof (chain.VRFPi) (slice) + if len(t.VRFProof) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.VRFProof was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.VRFProof))); err != nil { + return err + } + + if _, err := w.Write(t.VRFProof[:]); err != nil { + return err + } + return nil +} + +func (t *ElectionProof) UnmarshalCBOR(r io.Reader) error { + *t = ElectionProof{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.WinCount (int64) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.WinCount = int64(extraI) + } + // t.VRFProof (chain.VRFPi) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.VRFProof: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.VRFProof = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.VRFProof[:]); err != nil { + return err + } + return nil +} + +var lengthBufBeaconEntry = []byte{130} + +func (t *BeaconEntry) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufBeaconEntry); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Round (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Round)); err != nil { + return err + } + + // t.Data ([]uint8) (slice) + if len(t.Data) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.Data was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.Data))); err != nil { + return err + } + + if _, err := w.Write(t.Data[:]); err != nil { + return err + } + return nil +} + +func (t *BeaconEntry) UnmarshalCBOR(r io.Reader) error { + *t = BeaconEntry{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Round (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Round = uint64(extra) + + } + // t.Data ([]uint8) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.Data: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.Data = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.Data[:]); err != nil { + return err + } + return nil +} + +var lengthBufMessage = []byte{138} + +func (t *Message) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufMessage); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Version (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Version)); err != nil { + return err + } + + // t.To (address.Address) (struct) + if err := t.To.MarshalCBOR(w); err != nil { + return err + } + + // t.From (address.Address) (struct) + if err := t.From.MarshalCBOR(w); err != nil { + return err + } + + // t.Nonce (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Nonce)); err != nil { + return err + } + + // t.Value (big.Int) (struct) + if err := t.Value.MarshalCBOR(w); err != nil { + return err + } + + // t.GasLimit (int64) (int64) + if t.GasLimit >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.GasLimit)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.GasLimit-1)); err != nil { + return err + } + } + + // t.GasFeeCap (big.Int) (struct) + if err := t.GasFeeCap.MarshalCBOR(w); err != nil { + return err + } + + // t.GasPremium (big.Int) (struct) + if err := t.GasPremium.MarshalCBOR(w); err != nil { + return err + } + + // t.Method (abi.MethodNum) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Method)); err != nil { + return err + } + + // t.Params ([]uint8) (slice) + if len(t.Params) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.Params was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.Params))); err != nil { + return err + } + + if _, err := w.Write(t.Params[:]); err != nil { + return err + } + return nil +} + +func (t *Message) UnmarshalCBOR(r io.Reader) error { + *t = Message{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 10 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Version (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Version = uint64(extra) + + } + // t.To (address.Address) (struct) + + { + + if err := t.To.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.To: %w", err) + } + + } + // t.From (address.Address) (struct) + + { + + if err := t.From.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.From: %w", err) + } + + } + // t.Nonce (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Nonce = uint64(extra) + + } + // t.Value (big.Int) (struct) + + { + + if err := t.Value.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Value: %w", err) + } + + } + // t.GasLimit (int64) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.GasLimit = int64(extraI) + } + // t.GasFeeCap (big.Int) (struct) + + { + + if err := t.GasFeeCap.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.GasFeeCap: %w", err) + } + + } + // t.GasPremium (big.Int) (struct) + + { + + if err := t.GasPremium.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.GasPremium: %w", err) + } + + } + // t.Method (abi.MethodNum) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Method = abi.MethodNum(extra) + + } + // t.Params ([]uint8) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.Params: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.Params = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.Params[:]); err != nil { + return err + } + return nil +} + +var lengthBufSignedMessage = []byte{130} + +func (t *SignedMessage) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufSignedMessage); err != nil { + return err + } + + // t.Message (chain.Message) (struct) + if err := t.Message.MarshalCBOR(w); err != nil { + return err + } + + // t.Signature (crypto.Signature) (struct) + if err := t.Signature.MarshalCBOR(w); err != nil { + return err + } + return nil +} + +func (t *SignedMessage) UnmarshalCBOR(r io.Reader) error { + *t = SignedMessage{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Message (chain.Message) (struct) + + { + + if err := t.Message.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Message: %w", err) + } + + } + // t.Signature (crypto.Signature) (struct) + + { + + if err := t.Signature.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Signature: %w", err) + } + + } + return nil +} + +var lengthBufActor = []byte{132} + +func (t *Actor) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufActor); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Code (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.Code); err != nil { + return xerrors.Errorf("failed to write cid field t.Code: %w", err) + } + + // t.Head (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.Head); err != nil { + return xerrors.Errorf("failed to write cid field t.Head: %w", err) + } + + // t.Nonce (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Nonce)); err != nil { + return err + } + + // t.Balance (big.Int) (struct) + if err := t.Balance.MarshalCBOR(w); err != nil { + return err + } + return nil +} + +func (t *Actor) UnmarshalCBOR(r io.Reader) error { + *t = Actor{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 4 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Code (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.Code: %w", err) + } + + t.Code = c + + } + // t.Head (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.Head: %w", err) + } + + t.Head = c + + } + // t.Nonce (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Nonce = uint64(extra) + + } + // t.Balance (big.Int) (struct) + + { + + if err := t.Balance.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Balance: %w", err) + } + + } + return nil +} + +var lengthBufMessageRoot = []byte{130} + +func (t *MessageRoot) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufMessageRoot); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.BlsRoot (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.BlsRoot); err != nil { + return xerrors.Errorf("failed to write cid field t.BlsRoot: %w", err) + } + + // t.SecpkRoot (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.SecpkRoot); err != nil { + return xerrors.Errorf("failed to write cid field t.SecpkRoot: %w", err) + } + + return nil +} + +func (t *MessageRoot) UnmarshalCBOR(r io.Reader) error { + *t = MessageRoot{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.BlsRoot (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.BlsRoot: %w", err) + } + + t.BlsRoot = c + + } + // t.SecpkRoot (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.SecpkRoot: %w", err) + } + + t.SecpkRoot = c + + } + return nil +} + +var lengthBufMessageReceipt = []byte{131} + +func (t *MessageReceipt) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufMessageReceipt); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.ExitCode (exitcode.ExitCode) (int64) + if t.ExitCode >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.ExitCode)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.ExitCode-1)); err != nil { + return err + } + } + + // t.Return ([]uint8) (slice) + if len(t.Return) > cbg.ByteArrayMaxLen { + return xerrors.Errorf("Byte array in field t.Return was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajByteString, uint64(len(t.Return))); err != nil { + return err + } + + if _, err := w.Write(t.Return[:]); err != nil { + return err + } + + // t.GasUsed (int64) (int64) + if t.GasUsed >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.GasUsed)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.GasUsed-1)); err != nil { + return err + } + } + return nil +} + +func (t *MessageReceipt) UnmarshalCBOR(r io.Reader) error { + *t = MessageReceipt{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.ExitCode (exitcode.ExitCode) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.ExitCode = exitcode.ExitCode(extraI) + } + // t.Return ([]uint8) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.ByteArrayMaxLen { + return fmt.Errorf("t.Return: byte array too large (%d)", extra) + } + if maj != cbg.MajByteString { + return fmt.Errorf("expected byte array") + } + + if extra > 0 { + t.Return = make([]uint8, extra) + } + + if _, err := io.ReadFull(br, t.Return[:]); err != nil { + return err + } + // t.GasUsed (int64) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.GasUsed = int64(extraI) + } + return nil +} + +var lengthBufBlockMsg = []byte{131} + +func (t *BlockMsg) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufBlockMsg); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Header (chain.BlockHeader) (struct) + if err := t.Header.MarshalCBOR(w); err != nil { + return err + } + + // t.BlsMessages ([]cid.Cid) (slice) + if len(t.BlsMessages) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.BlsMessages was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.BlsMessages))); err != nil { + return err + } + for _, v := range t.BlsMessages { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.BlsMessages: %w", err) + } + } + + // t.SecpkMessages ([]cid.Cid) (slice) + if len(t.SecpkMessages) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.SecpkMessages was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.SecpkMessages))); err != nil { + return err + } + for _, v := range t.SecpkMessages { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.SecpkMessages: %w", err) + } + } + return nil +} + +func (t *BlockMsg) UnmarshalCBOR(r io.Reader) error { + *t = BlockMsg{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Header (chain.BlockHeader) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.Header = new(BlockHeader) + if err := t.Header.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Header pointer: %w", err) + } + } + + } + // t.BlsMessages ([]cid.Cid) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.BlsMessages: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.BlsMessages = make([]cid.Cid, extra) + } + + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.BlsMessages failed: %w", err) + } + t.BlsMessages[i] = c + } + + // t.SecpkMessages ([]cid.Cid) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.SecpkMessages: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.SecpkMessages = make([]cid.Cid, extra) + } + + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.SecpkMessages failed: %w", err) + } + t.SecpkMessages[i] = c + } + + return nil +} + +var lengthBufExpTipSet = []byte{131} + +func (t *ExpTipSet) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufExpTipSet); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Cids ([]cid.Cid) (slice) + if len(t.Cids) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Cids was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Cids))); err != nil { + return err + } + for _, v := range t.Cids { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.Cids: %w", err) + } + } + + // t.Blocks ([]*chain.BlockHeader) (slice) + if len(t.Blocks) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Blocks was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Blocks))); err != nil { + return err + } + for _, v := range t.Blocks { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.Height (abi.ChainEpoch) (int64) + if t.Height >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Height)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.Height-1)); err != nil { + return err + } + } + return nil +} + +func (t *ExpTipSet) UnmarshalCBOR(r io.Reader) error { + *t = ExpTipSet{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Cids ([]cid.Cid) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Cids: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Cids = make([]cid.Cid, extra) + } + + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.Cids failed: %w", err) + } + t.Cids[i] = c + } + + // t.Blocks ([]*chain.BlockHeader) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Blocks: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Blocks = make([]*BlockHeader, extra) + } + + for i := 0; i < int(extra); i++ { + + var v BlockHeader + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Blocks[i] = &v + } + + // t.Height (abi.ChainEpoch) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.Height = abi.ChainEpoch(extraI) + } + return nil +} diff --git a/venus-shared/chain/chain_info.go b/venus-shared/chain/chain_info.go new file mode 100644 index 0000000000..e062c73e09 --- /dev/null +++ b/venus-shared/chain/chain_info.go @@ -0,0 +1,31 @@ +package chain + +import ( + "fmt" + + "github.com/libp2p/go-libp2p-core/peer" +) + +// ChainInfo is used to track metadata about a peer and its chain. +type ChainInfo struct { + // The originator of the TipSetKey propagation wave. + Source peer.ID + // The peer that sent us the TipSetKey message. + Sender peer.ID + Head *TipSet +} + +// NewChainInfo creates a chain info from a peer id a head tipset key and a +// chain height. +func NewChainInfo(source peer.ID, sender peer.ID, head *TipSet) *ChainInfo { + return &ChainInfo{ + Source: source, + Sender: sender, + Head: head, + } +} + +// String returns a human-readable string representation of a chain info +func (i *ChainInfo) String() string { + return fmt.Sprintf("{source=%s sender:%s height=%d head=%s}", i.Source, i.Sender, i.Head.Height(), i.Head.Key()) +} diff --git a/venus-shared/chain/complex_provider.go b/venus-shared/chain/complex_provider.go new file mode 100644 index 0000000000..771183aaf9 --- /dev/null +++ b/venus-shared/chain/complex_provider.go @@ -0,0 +1,77 @@ +package chain + +import ( + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/venus/venus-shared/chain/params" + "github.com/filecoin-project/venus/venus-shared/testutil" + "github.com/ipfs/go-cid" + "math" + "testing" +) + +func init() { + testutil.MustRegisterDefaultValueProvier(TipsetProvider()) + testutil.MustRegisterDefaultValueProvier(MessageProvider()) +} + +func TipsetProvider() func(*testing.T) *TipSet { + const ( + minBlkNumInTipset = 1 + maxBlkNumInTipset = 5 + ) + + return func(t *testing.T) *TipSet { + var ( + blkNum, parentNum int + parentWeight big.Int + epoch abi.ChainEpoch + blocks []*BlockHeader + parents []cid.Cid + ) + + testutil.Provide(t, &parentNum, testutil.IntRangedProvider(minBlkNumInTipset, maxBlkNumInTipset)) + testutil.Provide(t, &parents, testutil.WithSliceLen(parentNum)) + + testutil.Provide(t, &blkNum, testutil.IntRangedProvider(minBlkNumInTipset+1, maxBlkNumInTipset)) + testutil.Provide(t, &blocks, testutil.WithSliceLen(blkNum), + // blocks in one tipset must be with the same parents. + func(t *testing.T) []cid.Cid { + return parents + }) + + testutil.Provide(t, &epoch, testutil.IntRangedProvider(0, math.MaxUint32)) + testutil.Provide(t, &parentWeight, testutil.PositiveBigProvider()) + + // ensure that random assignments won't break the validation + for _, blk := range blocks { + blk.Height = epoch + blk.ParentWeight.Set(parentWeight.Int) + } + + tipset, err := NewTipSet(blocks) + + if err != nil { + t.Fatalf("create new tipset failed: %s", err.Error()) + } + + return tipset + } +} + +func MessageProvider() func(t *testing.T) *Message { + return func(t *testing.T) *Message { + var msg Message + testutil.Provide(t, &msg, + testutil.IntRangedProvider(0, params.BlockGasLimit), + func(t *testing.T) big.Int { + ip := testutil.IntRangedProvider(0, int(params.FilBase)) + return FromFil(uint64(ip(t))) + }, + ) + // ensure that random assignments won't break the validation + msg.Version = 0 + msg.GasPremium = msg.GasFeeCap + return &msg + } +} diff --git a/venus-shared/chain/complex_provider_test.go b/venus-shared/chain/complex_provider_test.go new file mode 100644 index 0000000000..7b645ec2ee --- /dev/null +++ b/venus-shared/chain/complex_provider_test.go @@ -0,0 +1,43 @@ +package chain + +import ( + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" + "github.com/stretchr/testify/require" +) + +func TestTipsetProvider(t *testing.T) { + tf.UnitTest(t) + var tipset = &TipSet{} + testutil.Provide(t, &tipset) + require.Greater(t, len(tipset.blocks), 0, "blocks in a tipset must greater than 0") +} + +func TestMessageProvider(t *testing.T) { + tf.UnitTest(t) + var message *Message + testutil.Provide(t, &message) + require.NotEqual(t, message.Cid().String(), "", "message cid can't be empty") +} + +func TestBlockProvider(t *testing.T) { + tf.UnitTest(t) + var block *BlockHeader + testutil.Provide(t, &block) + require.NotNil(t, block, "block must not be nil") +} + +func TestComplexProvider(t *testing.T) { + tf.UnitTest(t) + + tests := map[string]func(*testing.T){ + "Tipset": TestTipsetProvider, + "Message": TestMessageProvider, + "Block": TestBlockProvider, + } + for testName, f := range tests { + t.Run(testName, f) + } +} diff --git a/venus-shared/chain/election_proof.go b/venus-shared/chain/election_proof.go new file mode 100644 index 0000000000..ee8a50c691 --- /dev/null +++ b/venus-shared/chain/election_proof.go @@ -0,0 +1,251 @@ +package chain + +import ( + "bytes" + "fmt" + "math/big" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/minio/blake2b-simd" + + "github.com/filecoin-project/venus/venus-shared/chain/params" +) + +// A Ticket is a marker of a tick of the blockchain's clock. It is the source +// of randomness for proofs of storage and leader election. It is generated +// by the miner of a newBlock using a VRF. +type Ticket struct { + // A proof output by running a VRF on the VRFProof of the parent ticket + VRFProof VRFPi +} + +// String returns the string representation of the VRFProof of the ticket +func (t Ticket) String() string { + return fmt.Sprintf("%x", t.VRFProof) +} + +func (t *Ticket) Compare(o *Ticket) int { + tDigest := t.VRFProof.Digest() + oDigest := o.VRFProof.Digest() + return bytes.Compare(tDigest[:], oDigest[:]) +} + +func (t *Ticket) Less(o *Ticket) bool { + return t.Compare(o) < 0 +} + +func (t *Ticket) Quality() float64 { + ticketHash := blake2b.Sum256(t.VRFProof) + ticketNum := BigFromBytes(ticketHash[:]).Int + ticketDenu := big.NewInt(1) + ticketDenu.Lsh(ticketDenu, 256) + tv, _ := new(big.Rat).SetFrac(ticketNum, ticketDenu).Float64() + tq := 1 - tv + return tq +} + +// VRFPi is the proof output from running a VRF. +type VRFPi []byte + +// Digest returns the digest (hash) of a proof, for use generating challenges etc. +func (p VRFPi) Digest() [32]byte { + proofDigest := blake2b.Sum256(p) + return proofDigest +} + +type ElectionProof struct { + WinCount int64 + + // A proof output by running a VRF on the VRFProof of the parent ticket + VRFProof VRFPi +} + +const precision = 256 + +var ( + expNumCoef []*big.Int + expDenoCoef []*big.Int +) + +func init() { + parse := func(coefs []string) []*big.Int { + out := make([]*big.Int, len(coefs)) + for i, coef := range coefs { + c, ok := new(big.Int).SetString(coef, 10) + if !ok { + panic("could not parse exp paramemter") + } + // << 256 (Q.0 to Q.256), >> 128 to transform integer params to coefficients + c = c.Lsh(c, precision-128) + out[i] = c + } + return out + } + + // parameters are in integer format, + // coefficients are *2^-128 of that + num := []string{ + "-648770010757830093818553637600", + "67469480939593786226847644286976", + "-3197587544499098424029388939001856", + "89244641121992890118377641805348864", + "-1579656163641440567800982336819953664", + "17685496037279256458459817590917169152", + "-115682590513835356866803355398940131328", + "340282366920938463463374607431768211456", + } + expNumCoef = parse(num) + + deno := []string{ + "1225524182432722209606361", + "114095592300906098243859450", + "5665570424063336070530214243", + "194450132448609991765137938448", + "5068267641632683791026134915072", + "104716890604972796896895427629056", + "1748338658439454459487681798864896", + "23704654329841312470660182937960448", + "259380097567996910282699886670381056", + "2250336698853390384720606936038375424", + "14978272436876548034486263159246028800", + "72144088983913131323343765784380833792", + "224599776407103106596571252037123047424", + "340282366920938463463374607431768211456", + } + expDenoCoef = parse(deno) +} + +// expneg accepts x in Q.256 format and computes e^-x. +// It is most precise within [0, 1.725) range, where error is less than 3.4e-30. +// Over the [0, 5) range its error is less than 4.6e-15. +// Output is in Q.256 format. +func expneg(x *big.Int) *big.Int { + // exp is approximated by rational function + // polynomials of the rational function are evaluated using Horner's method + num := polyval(expNumCoef, x) // Q.256 + deno := polyval(expDenoCoef, x) // Q.256 + + num = num.Lsh(num, precision) // Q.512 + return num.Div(num, deno) // Q.512 / Q.256 => Q.256 +} + +// polyval evaluates a polynomial given by coefficients `p` in Q.256 format +// at point `x` in Q.256 format. Output is in Q.256. +// Coefficients should be ordered from the highest order coefficient to the lowest. +func polyval(p []*big.Int, x *big.Int) *big.Int { + // evaluation using Horner's method + res := new(big.Int).Set(p[0]) // Q.256 + tmp := new(big.Int) // big.Int.Mul doesn't like when input is reused as output + for _, c := range p[1:] { + tmp = tmp.Mul(res, x) // Q.256 * Q.256 => Q.512 + res = res.Rsh(tmp, precision) // Q.512 >> 256 => Q.256 + res = res.Add(res, c) + } + + return res +} + +// computes lambda in Q.256 +func lambda(power, totalPower *big.Int) *big.Int { + lam := new(big.Int).Mul(power, blocksPerEpochBig) // Q.0 + lam = lam.Lsh(lam, precision) // Q.256 + lam = lam.Div(lam /* Q.256 */, totalPower /* Q.0 */) // Q.256 + return lam +} + +type poiss struct { + lam *big.Int + pmf *big.Int + icdf *big.Int + + tmp *big.Int // temporary variable for optimization + + k uint64 +} + +// newPoiss starts poisson inverted CDF +// lambda is in Q.256 format +// returns (instance, `1-poisscdf(0, lambda)`) +// CDF value returend is reused when calling `next` +func newPoiss(lambda *big.Int) (*poiss, *big.Int) { + + // pmf(k) = (lambda^k)*(e^lambda) / k! + // k = 0 here, so it simplifies to just e^-lambda + elam := expneg(lambda) // Q.256 + pmf := new(big.Int).Set(elam) + + // icdf(k) = 1 - โˆ‘แตแตขโ‚Œโ‚€ pmf(i) + // icdf(0) = 1 - pmf(0) + icdf := big.NewInt(1) + icdf = icdf.Lsh(icdf, precision) // Q.256 + icdf = icdf.Sub(icdf, pmf) // Q.256 + + k := uint64(0) + + p := &poiss{ + lam: lambda, + pmf: pmf, + + tmp: elam, + icdf: icdf, + + k: k, + } + + return p, icdf +} + +// next computes `k++, 1-poisscdf(k, lam)` +// return is in Q.256 format +func (p *poiss) next() *big.Int { + // incrementally compute next pmf and icdf + + // pmf(k) = (lambda^k)*(e^lambda) / k! + // so pmf(k) = pmf(k-1) * lambda / k + p.k++ + p.tmp.SetUint64(p.k) // Q.0 + + // calculate pmf for k + p.pmf = p.pmf.Div(p.pmf, p.tmp) // Q.256 / Q.0 => Q.256 + // we are using `tmp` as target for multiplication as using an input as output + // for Int.Mul causes allocations + p.tmp = p.tmp.Mul(p.pmf, p.lam) // Q.256 * Q.256 => Q.512 + p.pmf = p.pmf.Rsh(p.tmp, precision) // Q.512 >> 256 => Q.256 + + // calculate output + // icdf(k) = icdf(k-1) - pmf(k) + p.icdf = p.icdf.Sub(p.icdf, p.pmf) // Q.256 + return p.icdf +} + +// ComputeWinCount uses VRFProof to compute number of wins +// The algorithm is based on Algorand's Sortition with Binomial distribution +// replaced by Poisson distribution. +func (ep *ElectionProof) ComputeWinCount(power abi.StoragePower, totalPower abi.StoragePower) int64 { + h := blake2b.Sum256(ep.VRFProof) + + lhs := big.NewInt(0).SetBytes(h[:]) // 256bits, assume Q.256 so [0, 1) + + // We are calculating upside-down CDF of Poisson distribution with + // rate ฮป=power*E/totalPower + // Steps: + // 1. calculate ฮป=power*E/totalPower + // 2. calculate elam = exp(-ฮป) + // 3. Check how many times we win: + // j = 0 + // pmf = elam + // rhs = 1 - pmf + // for h(vrf) < rhs: j++; pmf = pmf * lam / j; rhs = rhs - pmf + + lam := lambda(power.Int, totalPower.Int) // Q.256 + + p, rhs := newPoiss(lam) + + var j int64 + for lhs.Cmp(rhs) < 0 && j < params.MaxWinCount { + rhs = p.next() + j++ + } + + return j +} diff --git a/venus-shared/chain/election_proof_test.go b/venus-shared/chain/election_proof_test.go new file mode 100644 index 0000000000..ab30cfd0cc --- /dev/null +++ b/venus-shared/chain/election_proof_test.go @@ -0,0 +1,118 @@ +package chain + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/chain/params" + "github.com/filecoin-project/venus/venus-shared/testutil" +) + +func TestElectionProofBasic(t *testing.T) { + tf.UnitTest(t) + vrfLen := 32 + winCountMin := int64(3) + winCountMax := int64(10) + var buf bytes.Buffer + for i := 0; i < 32; i++ { + var src, dst ElectionProof + + var power abi.StoragePower + testutil.Provide(t, &power, testutil.PositiveBigProvider()) + require.True(t, power.GreaterThan(big.Zero()), "positive storage power") + totalPower := BigMul(power, NewInt(7)) + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst, "empty values") + }, + + ProvideOpts: []interface{}{ + testutil.BytesFixedProvider(vrfLen), + testutil.IntRangedProvider(int(winCountMin), int(winCountMax)), + }, + + Provided: func() { + require.NotEqual(t, src, dst, "src value provided") + require.Len(t, src.VRFProof, vrfLen, "vrf length") + require.GreaterOrEqual(t, src.WinCount, winCountMin, "win count min") + require.Less(t, src.WinCount, winCountMax, "win count max") + }, + + Finished: func() { + require.Equal(t, src, dst, "from src to dst through cbor") + winCount := src.ComputeWinCount(power, totalPower) + require.GreaterOrEqual(t, winCount, int64(0), "win count >=0") + require.LessOrEqual(t, winCount, params.MaxWinCount, "win count <= MaxWinCount") + require.Equal(t, winCount, dst.ComputeWinCount(power, totalPower)) + + t1, t2 := Ticket{ + VRFProof: src.VRFProof, + }, Ticket{ + VRFProof: dst.VRFProof, + } + + require.Equal(t, t1, t2, "ticket") + + require.True(t, t1.Compare(&t2) == 0, "ticket equal") + require.Equal(t, t1.Quality(), t2.Quality()) + + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} + +func TestTicketBasic(t *testing.T) { + tf.UnitTest(t) + vrfLen := 32 + var buf bytes.Buffer + for i := 0; i < 32; i++ { + var src, dst, another Ticket + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst, "empty values") + }, + + ProvideOpts: []interface{}{ + testutil.BytesFixedProvider(vrfLen), + }, + + Provided: func() { + require.NotEqual(t, src, dst, "src value provided") + require.Len(t, src.VRFProof, vrfLen, "vrf length") + }, + + Finished: func() { + require.Equal(t, src, dst, "from src to dst through cbor") + + t1, t2 := Ticket{ + VRFProof: src.VRFProof, + }, Ticket{ + VRFProof: dst.VRFProof, + } + + require.Equal(t, t1, t2, "ticket") + + require.True(t, t1.Compare(&t2) == 0, "ticket equal") + require.Equal(t, t1.Quality(), t2.Quality()) + require.Equal(t, t1.String(), t2.String(), "ticket string") + + testutil.Provide(t, &another, testutil.BytesFixedProvider(vrfLen)) + require.Len(t, another.VRFProof, vrfLen, "vrf length") + require.True(t, src.Less(&another) == (src.Compare(&another) < 0)) + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} diff --git a/venus-shared/chain/full_block.go b/venus-shared/chain/full_block.go new file mode 100644 index 0000000000..fa0d9f5248 --- /dev/null +++ b/venus-shared/chain/full_block.go @@ -0,0 +1,18 @@ +package chain + +import ( + "github.com/ipfs/go-cid" +) + +// FullBlock carries a newBlock header and the message and receipt collections +// referenced from the header. +type FullBlock struct { + Header *BlockHeader + BLSMessages []*Message + SECPMessages []*SignedMessage +} + +// Cid returns the FullBlock's header's Cid +func (fb *FullBlock) Cid() cid.Cid { + return fb.Header.Cid() +} diff --git a/venus-shared/chain/full_tipset.go b/venus-shared/chain/full_tipset.go new file mode 100644 index 0000000000..ab43a1aa7c --- /dev/null +++ b/venus-shared/chain/full_tipset.go @@ -0,0 +1,71 @@ +package chain + +import ( + "github.com/ipfs/go-cid" +) + +// FullTipSet is an expanded version of the TipSet that contains all the blocks and messages +type FullTipSet struct { + Blocks []*FullBlock + tipset *TipSet + cids []cid.Cid +} + +func NewFullTipSet(blks []*FullBlock) *FullTipSet { + return &FullTipSet{ + Blocks: blks, + } +} + +func (fts *FullTipSet) Cids() []cid.Cid { + if fts.cids != nil { + return fts.cids + } + + var cids []cid.Cid + for _, b := range fts.Blocks { + cids = append(cids, b.Cid()) + } + fts.cids = cids + + return cids +} + +// TipSet returns a narrower view of this FullTipSet elliding the newBlock +// messages. +func (fts *FullTipSet) TipSet() *TipSet { + if fts.tipset != nil { + // FIXME: fts.tipset is actually never set. Should it memoize? + return fts.tipset + } + + var headers []*BlockHeader + for _, b := range fts.Blocks { + headers = append(headers, b.Header) + } + + ts, err := NewTipSet(headers) + if err != nil { + panic(err) + } + + return ts +} + +// Reverse reverses the order of the slice `chain`. +func ReverseFullBlock(chain []*FullTipSet) { + // https://github.com/golang/go/wiki/SliceTricks#reversing + for i := len(chain)/2 - 1; i >= 0; i-- { + opp := len(chain) - 1 - i + chain[i], chain[opp] = chain[opp], chain[i] + } +} + +// Reverse reverses the order of the slice `chain`. +func ReverseTipSet(chain []*TipSet) { + // https://github.com/golang/go/wiki/SliceTricks#reversing + for i := len(chain)/2 - 1; i >= 0; i-- { + opp := len(chain) - 1 - i + chain[i], chain[opp] = chain[opp], chain[i] + } +} diff --git a/venus-shared/chain/message.go b/venus-shared/chain/message.go new file mode 100644 index 0000000000..6b072f350d --- /dev/null +++ b/venus-shared/chain/message.go @@ -0,0 +1,211 @@ +package chain + +import ( + "bytes" + "encoding/json" + "fmt" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/cbor" + "github.com/filecoin-project/go-state-types/network" + "github.com/filecoin-project/venus/venus-shared/chain/params" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" +) + +const MessageVersion = 0 + +type ChainMsg interface { + Cid() cid.Cid + VMMessage() *Message + ToStorageBlock() (blocks.Block, error) + // FIXME: This is the *message* length, this name is misleading. + ChainLength() int + cbor.Marshaler + cbor.Unmarshaler +} + +func DecodeMessage(b []byte) (*Message, error) { + var msg Message + if err := msg.UnmarshalCBOR(bytes.NewReader(b)); err != nil { + return nil, err + } + + if msg.Version != MessageVersion { + return nil, fmt.Errorf("decoded message had incorrect version (%d)", msg.Version) + } + + return &msg, nil +} + +type Message struct { + Version uint64 + + To address.Address + From address.Address + // When receiving a message from a user account the nonce in + // the message must match the expected nonce in the from actor. + // This prevents replay attacks. + Nonce uint64 + + Value abi.TokenAmount + + GasLimit int64 + GasFeeCap abi.TokenAmount + GasPremium abi.TokenAmount + + Method abi.MethodNum + Params []byte +} + +func (m *Message) Serialize() ([]byte, error) { + buf := new(bytes.Buffer) + if err := m.MarshalCBOR(buf); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +func (m *Message) SerializeWithCid() (cid.Cid, []byte, error) { + data, err := m.Serialize() + if err != nil { + return cid.Undef, nil, err + } + + c, err := abi.CidBuilder.Sum(data) + if err != nil { + return cid.Undef, nil, err + } + + return c, data, nil +} + +func (m *Message) ToStorageBlock() (blocks.Block, error) { + c, data, err := m.SerializeWithCid() + if err != nil { + return nil, err + } + + return blocks.NewBlockWithCid(data, c) +} + +func (m *Message) Cid() cid.Cid { + c, _, err := m.SerializeWithCid() + if err != nil { + panic(err) + } + + return c +} + +func (m *Message) String() string { + errStr := "(error encoding Message)" + c, _, err := m.SerializeWithCid() + if err != nil { + return errStr + } + + js, err := json.MarshalIndent(m, "", " ") + if err != nil { + return errStr + } + + return fmt.Sprintf("Message cid=[%v]: %s", c, string(js)) +} + +func (m *Message) ChainLength() int { + ser, err := m.Serialize() + if err != nil { + panic(err) + } + + return len(ser) +} + +func (m *Message) Equals(o *Message) bool { + return m.Cid() == o.Cid() +} + +func (m *Message) EqualCall(o *Message) bool { + m1 := *m + m2 := *o + + m1.GasLimit, m2.GasLimit = 0, 0 + m1.GasFeeCap, m2.GasFeeCap = bigZero, bigZero + m1.GasPremium, m2.GasPremium = bigZero, bigZero + + return (&m1).Equals(&m2) +} + +func (m *Message) ValidForBlockInclusion(minGas int64, version network.Version) error { + if m.Version != 0 { + return fmt.Errorf("'Version' unsupported") + } + + if m.To == address.Undef { + return fmt.Errorf("'To' address cannot be empty") + } + + if m.To == ZeroAddress && version >= network.Version7 { + return fmt.Errorf("invalid 'To' address") + } + + if m.From == address.Undef { + return fmt.Errorf("'From' address cannot be empty") + } + + if m.Value.Int == nil { + return fmt.Errorf("'Value' cannot be nil") + } + + if m.Value.LessThan(bigZero) { + return fmt.Errorf("'Value' field cannot be negative") + } + + if m.Value.GreaterThan(TotalFilecoinInt) { + return fmt.Errorf("'Value' field cannot be greater than total filecoin supply") + } + + if m.GasFeeCap.Int == nil { + return fmt.Errorf("'GasFeeCap' cannot be nil") + } + + if m.GasFeeCap.LessThan(bigZero) { + return fmt.Errorf("'GasFeeCap' field cannot be negative") + } + + if m.GasPremium.Int == nil { + return fmt.Errorf("'GasPremium' cannot be nil") + } + + if m.GasPremium.LessThan(bigZero) { + return fmt.Errorf("'GasPremium' field cannot be negative") + } + + if m.GasPremium.GreaterThan(m.GasFeeCap) { + return fmt.Errorf("'GasFeeCap' less than 'GasPremium'") + } + + if m.GasLimit > params.BlockGasLimit { + return fmt.Errorf("'GasLimit' field cannot be greater than a block's gas limit") + } + + // since prices might vary with time, this is technically semantic validation + if m.GasLimit < minGas { + return fmt.Errorf("'GasLimit' field cannot be less than the cost of storing a message on chain %d < %d", m.GasLimit, minGas) + } + + return nil +} + +func (m *Message) VMMessage() *Message { + return m +} + +func (m *Message) RequiredFunds() abi.TokenAmount { + return abi.TokenAmount{Int: BigMul(BigInt{Int: m.GasFeeCap.Int}, NewInt(uint64(m.GasLimit))).Int} +} + +var _ ChainMsg = (*Message)(nil) diff --git a/venus-shared/chain/message_marshal.go b/venus-shared/chain/message_marshal.go new file mode 100644 index 0000000000..50773b747d --- /dev/null +++ b/venus-shared/chain/message_marshal.go @@ -0,0 +1,21 @@ +package chain + +import ( + "encoding/json" + + "github.com/ipfs/go-cid" +) + +type RawMessage Message + +type mCid struct { + CID cid.Cid + *RawMessage +} + +func (m *Message) MarshalJSON() ([]byte, error) { + return json.Marshal(&mCid{ + RawMessage: (*RawMessage)(m), + CID: m.Cid(), + }) +} diff --git a/venus-shared/chain/message_receipt.go b/venus-shared/chain/message_receipt.go new file mode 100644 index 0000000000..3d7f9a5982 --- /dev/null +++ b/venus-shared/chain/message_receipt.go @@ -0,0 +1,26 @@ +package chain + +import ( + "encoding/json" + "fmt" + + "github.com/filecoin-project/go-state-types/exitcode" +) + +// MessageReceipt is what is returned by executing a message on the vm. +type MessageReceipt struct { + ExitCode exitcode.ExitCode + Return []byte + GasUsed int64 +} + +func (r *MessageReceipt) String() string { + errStr := "(error encoding MessageReceipt)" + + js, err := json.MarshalIndent(r, "", " ") + if err != nil { + return errStr + } + + return fmt.Sprintf("MessageReceipt: %s", string(js)) +} diff --git a/venus-shared/chain/message_receipt_test.go b/venus-shared/chain/message_receipt_test.go new file mode 100644 index 0000000000..da9c223edb --- /dev/null +++ b/venus-shared/chain/message_receipt_test.go @@ -0,0 +1,57 @@ +package chain + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-state-types/exitcode" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" +) + +func TestMessageReceiptBasic(t *testing.T) { + tf.UnitTest(t) + dataLen := 32 + + var buf bytes.Buffer + for i := 0; i < 32; i++ { + var src, dst MessageReceipt + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst, "empty values") + require.Nil(t, src.Return) + }, + + ProvideOpts: []interface{}{ + testutil.BytesFixedProvider(dataLen), + testutil.IntRangedProvider(10_000_000, 50_000_000), + func(t *testing.T) exitcode.ExitCode { + p := testutil.IntRangedProvider(0, 20) + next := p(t) + return exitcode.ExitCode(next) + }, + }, + + Provided: func() { + require.Len(t, src.Return, dataLen) + + require.GreaterOrEqual(t, src.ExitCode, exitcode.ExitCode(0)) + require.Less(t, src.ExitCode, exitcode.ExitCode(20)) + + require.GreaterOrEqual(t, src.GasUsed, int64(10_000_000)) + require.Less(t, src.GasUsed, int64(50_000_000)) + }, + + Finished: func() { + require.Equal(t, src, dst, "from src to dst through cbor") + require.Equal(t, src.String(), dst.String(), "string representation") + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} diff --git a/venus-shared/chain/message_root.go b/venus-shared/chain/message_root.go new file mode 100644 index 0000000000..39a0c30982 --- /dev/null +++ b/venus-shared/chain/message_root.go @@ -0,0 +1,55 @@ +package chain + +import ( + "bytes" + + "github.com/filecoin-project/go-state-types/abi" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" +) + +type MessageRoot struct { + BlsRoot cid.Cid + SecpkRoot cid.Cid +} + +func (mr *MessageRoot) Serialize() ([]byte, error) { + buf := new(bytes.Buffer) + if err := mr.MarshalCBOR(buf); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +func (mr *MessageRoot) SerializeWithCid() (cid.Cid, []byte, error) { + data, err := mr.Serialize() + if err != nil { + return cid.Undef, nil, err + } + + c, err := abi.CidBuilder.Sum(data) + if err != nil { + return cid.Undef, nil, err + } + + return c, data, nil +} + +func (mr *MessageRoot) ToStorageBlock() (blocks.Block, error) { + c, data, err := mr.SerializeWithCid() + if err != nil { + return nil, err + } + + return blocks.NewBlockWithCid(data, c) +} + +func (mr *MessageRoot) Cid() cid.Cid { + c, _, err := mr.SerializeWithCid() + if err != nil { + panic(err) + } + + return c +} diff --git a/venus-shared/chain/message_root_test.go b/venus-shared/chain/message_root_test.go new file mode 100644 index 0000000000..3b5fb06527 --- /dev/null +++ b/venus-shared/chain/message_root_test.go @@ -0,0 +1,47 @@ +package chain + +import ( + "bytes" + "testing" + + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" +) + +func TestMessageRootBasic(t *testing.T) { + tf.UnitTest(t) + var buf bytes.Buffer + for i := 0; i < 32; i++ { + var src, dst MessageRoot + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst, "empty values") + require.Equal(t, src.BlsRoot, cid.Undef) + require.Equal(t, src.SecpkRoot, cid.Undef) + }, + + Provided: func() { + require.NotEqual(t, src.BlsRoot, cid.Undef) + require.NotEqual(t, src.SecpkRoot, cid.Undef) + }, + + Finished: func() { + require.Equal(t, src, dst, "from src to dst through cbor") + + blk, err := src.ToStorageBlock() + require.NoError(t, err, "ToStorageBlock") + + srcCid := src.Cid() + require.Equal(t, srcCid, dst.Cid(), "cid compare to dst") + require.Equal(t, srcCid, blk.Cid(), "cid compare to sblk") + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} diff --git a/venus-shared/chain/message_test.go b/venus-shared/chain/message_test.go new file mode 100644 index 0000000000..94349972fd --- /dev/null +++ b/venus-shared/chain/message_test.go @@ -0,0 +1,210 @@ +package chain + +import ( + "bytes" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/network" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/chain/params" + "github.com/filecoin-project/venus/venus-shared/testutil" + blocks "github.com/ipfs/go-block-format" + "github.com/stretchr/testify/require" +) + +func TestMessageBasic(t *testing.T) { + tf.UnitTest(t) + paramsLen := 32 + var buf bytes.Buffer + for i := 0; i < 32; i++ { + var src, dst Message + var blk blocks.Block + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst, "empty values") + }, + + ProvideOpts: []interface{}{ + testutil.BytesFixedProvider(paramsLen), + testutil.BlsAddressProvider(), + }, + + Provided: func() { + require.NotEqual(t, src, dst, "value provided") + require.Equal(t, src.From.Protocol(), address.BLS, "from addr proto") + require.Equal(t, src.To.Protocol(), address.BLS, "to addr proto") + require.Len(t, src.Params, paramsLen, "params length") + + src.Version = MessageVersion + + sblk, err := src.ToStorageBlock() + require.NoError(t, err, "ToStorageBlock") + blk = sblk + }, + + Marshaled: func(b []byte) { + decoded, err := DecodeMessage(b) + require.NoError(t, err, "DecodeMessage") + require.True(t, src.Equals(decoded)) + }, + + Finished: func() { + require.Equal(t, src, dst) + require.True(t, src.Equals(&dst)) + require.True(t, src.EqualCall(&dst)) + require.Equal(t, src.Cid(), dst.Cid()) + require.Equal(t, src.Cid(), blk.Cid()) + require.Equal(t, src.String(), dst.String()) + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} + +func TestMessageValidForBlockInclusion(t *testing.T) { + tf.UnitTest(t) + var msg Message + testutil.Provide( + t, + &msg, + testutil.IntRangedProvider(0, params.BlockGasLimit), + func(t *testing.T) big.Int { + ip := testutil.IntRangedProvider(0, int(params.FilBase)) + return FromFil(uint64(ip(t))) + }, + ) + + // ensure that random assignments won't break the validation + msg.Version = 0 + msg.GasPremium = msg.GasFeeCap + + err := msg.ValidForBlockInclusion(0, network.Version7) + require.NoError(t, err, "ValidForBlockInclusion") + + neg := NewInt(1).Neg() + + valCases := []struct { + name string + sets []interface{} + minGas int64 + version network.Version + }{ + { + name: "Version != 0", + sets: []interface{}{ + &msg.Version, + uint64(MessageVersion + 1), + }, + }, + { + name: "To:Undef", + sets: []interface{}{ + &msg.To, + address.Undef, + }, + }, + { + name: "To:ZeroAddress", + sets: []interface{}{ + &msg.To, + ZeroAddress, + }, + version: network.Version7, + }, + { + name: "From:Undef", + sets: []interface{}{ + &msg.From, + address.Undef, + }, + }, + { + name: "Value:nil", + sets: []interface{}{ + &msg.Value, + EmptyInt, + }, + }, + { + name: "Value:neg", + sets: []interface{}{ + &msg.Value, + neg, + }, + }, + { + name: "Value:TooLarge", + sets: []interface{}{ + &msg.Value, + BigAdd(TotalFilecoinInt, NewInt(1)), + }, + }, + { + name: "GasFeeCap:nil", + sets: []interface{}{ + &msg.GasFeeCap, + EmptyInt, + }, + }, + { + name: "GasFeeCap:neg", + sets: []interface{}{ + &msg.GasFeeCap, + neg, + }, + }, + { + name: "GasPremium:nil", + sets: []interface{}{ + &msg.GasPremium, + EmptyInt, + }, + }, + { + name: "GasPremium:neg", + sets: []interface{}{ + &msg.GasPremium, + neg, + }, + }, + { + name: "GasPremium: > GasFeeCap", + sets: []interface{}{ + &msg.GasPremium, + BigAdd(msg.GasFeeCap, NewInt(1)), + }, + }, + { + name: "GasLimit: > BlockGasLimit", + sets: []interface{}{ + &msg.GasLimit, + int64(params.BlockGasLimit) + 1, + }, + }, + { + name: "GasLimit: < minGas", + sets: []interface{}{ + &msg.GasLimit, + int64(-1), + }, + }, + } + + for _, c := range valCases { + onSet := func() { + err := msg.ValidForBlockInclusion(c.minGas, c.version) + require.Errorf(t, err, "after invalid values set for %s", c.name) + } + + onReset := func() { + err := msg.ValidForBlockInclusion(c.minGas, c.version) + require.NoErrorf(t, err, "after values reset for %s", c.name) + } + + testutil.ValueSetNReset(t, c.name, onSet, onReset, c.sets...) + } +} diff --git a/venus-shared/chain/param.go b/venus-shared/chain/param.go new file mode 100644 index 0000000000..9a8e7f78f7 --- /dev/null +++ b/venus-shared/chain/param.go @@ -0,0 +1,31 @@ +package chain + +import ( + "math/big" + + "github.com/filecoin-project/go-state-types/abi" + + big2 "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" + mh "github.com/multiformats/go-multihash" + + "github.com/filecoin-project/venus/venus-shared/chain/params" +) + +var ( + bigZero = big2.Zero() + blocksPerEpochBig = big.NewInt(0).SetUint64(params.BlocksPerEpoch) +) + +var TotalFilecoinInt = FromFil(params.FilBase) + +var ZeroAddress = MustParseAddress("f3yaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaby2smx7a") + +var EmptyTokenAmount = abi.TokenAmount{} + +// The multihash function identifier to use for content addresses. +const DefaultHashFunction = uint64(mh.BLAKE2B_MIN + 31) + +// A builder for all blockchain CIDs. +// Note that sector commitments use a different scheme. +var DefaultCidBuilder = cid.V1Builder{Codec: cid.DagCBOR, MhType: DefaultHashFunction} diff --git a/venus-shared/chain/params/chain.go b/venus-shared/chain/params/chain.go new file mode 100644 index 0000000000..3b7848400b --- /dev/null +++ b/venus-shared/chain/params/chain.go @@ -0,0 +1,22 @@ +package params + +import ( + builtin0 "github.com/filecoin-project/specs-actors/actors/builtin" +) + +var BlocksPerEpoch = uint64(builtin0.ExpectedLeadersPerEpoch) +var MaxWinCount = 3 * int64(BlocksPerEpoch) + +// /////// +// Limits + +// TODO: If this is gonna stay, it should move to specs-actors +const BlockMessageLimit = 10000 + +const BlockGasLimit = 10_000_000_000 +const BlockGasTarget = BlockGasLimit / 2 +const BaseFeeMaxChangeDenom = 8 // 12.5% +const InitialBaseFee = 100e6 +const MinimumBaseFee = 100 +const PackingEfficiencyNum = 4 +const PackingEfficiencyDenom = 5 diff --git a/venus-shared/chain/params/circulating.go b/venus-shared/chain/params/circulating.go new file mode 100644 index 0000000000..5d774b3740 --- /dev/null +++ b/venus-shared/chain/params/circulating.go @@ -0,0 +1,7 @@ +package params + +const FilBase = uint64(2_000_000_000) +const FilAllocStorageMining = uint64(1_100_000_000) + +const FilecoinPrecision = uint64(1_000_000_000_000_000_000) +const FilReserved = uint64(300_000_000) diff --git a/venus-shared/chain/shared_func.go b/venus-shared/chain/shared_func.go new file mode 100644 index 0000000000..23d357e619 --- /dev/null +++ b/venus-shared/chain/shared_func.go @@ -0,0 +1,33 @@ +package chain + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" +) + +func MustParseAddress(addr string) address.Address { + ret, err := address.NewFromString(addr) + if err != nil { + panic(err) + } + + return ret +} + +func MustParseCid(c string) cid.Cid { + ret, err := cid.Decode(c) + if err != nil { + panic(err) + } + + return ret +} + +func NewGasFeeCap(price int64) abi.TokenAmount { + return abi.NewTokenAmount(price) +} + +func NewGasPremium(price int64) abi.TokenAmount { + return abi.NewTokenAmount(price) +} diff --git a/venus-shared/chain/signed_message.go b/venus-shared/chain/signed_message.go new file mode 100644 index 0000000000..c4e79e576f --- /dev/null +++ b/venus-shared/chain/signed_message.go @@ -0,0 +1,111 @@ +package chain + +import ( + "bytes" + "encoding/json" + "fmt" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/crypto" + blocks "github.com/ipfs/go-block-format" + "github.com/ipfs/go-cid" +) + +// SignedMessage contains a message and its signature +type SignedMessage struct { + Message Message + Signature crypto.Signature +} + +// nolint +func (smsg *SignedMessage) ChainLength() int { + var data []byte + var err error + if smsg.Signature.Type == crypto.SigTypeBLS { + data, err = smsg.Message.Serialize() + } else { + data, err = smsg.Serialize() + } + + if err != nil { + panic(err) + } + + return len(data) +} + +// Serialize return message binary +func (smsg *SignedMessage) Serialize() ([]byte, error) { + buf := new(bytes.Buffer) + if err := smsg.MarshalCBOR(buf); err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +// Serialize return message binary +func (smsg *SignedMessage) SerializeWithCid() (cid.Cid, []byte, error) { + data, err := smsg.Serialize() + if err != nil { + return cid.Undef, nil, err + } + + c, err := abi.CidBuilder.Sum(data) + if err != nil { + return cid.Undef, nil, err + } + + return c, data, nil +} + +func (smsg *SignedMessage) ToStorageBlock() (blocks.Block, error) { + var c cid.Cid + var data []byte + var err error + if smsg.Signature.Type == crypto.SigTypeBLS { + c, data, err = smsg.Message.SerializeWithCid() + } else { + c, data, err = smsg.SerializeWithCid() + } + + if err != nil { + return nil, err + } + + return blocks.NewBlockWithCid(data, c) +} + +func (smsg *SignedMessage) Cid() cid.Cid { + if smsg.Signature.Type == crypto.SigTypeBLS { + return smsg.Message.Cid() + } + + c, _, err := smsg.SerializeWithCid() + if err != nil { + panic(fmt.Errorf("failed to marshal signed-message: %w", err)) + } + + return c +} + +// String return message json string +func (smsg *SignedMessage) String() string { + errStr := "(error encoding SignedMessage)" + c, _, err := smsg.SerializeWithCid() + if err != nil { + return errStr + } + + js, err := json.MarshalIndent(smsg, "", " ") + if err != nil { + return errStr + } + + return fmt.Sprintf("SignedMessage cid=[%v]: %s", c, string(js)) +} + +func (smsg *SignedMessage) VMMessage() *Message { + return &smsg.Message +} + +var _ ChainMsg = (*SignedMessage)(nil) diff --git a/venus-shared/chain/signed_message_marshal.go b/venus-shared/chain/signed_message_marshal.go new file mode 100644 index 0000000000..059b1d03bb --- /dev/null +++ b/venus-shared/chain/signed_message_marshal.go @@ -0,0 +1,21 @@ +package chain + +import ( + "encoding/json" + + "github.com/ipfs/go-cid" +) + +type smCid struct { + *RawSignedMessage + CID cid.Cid +} + +type RawSignedMessage SignedMessage + +func (sm *SignedMessage) MarshalJSON() ([]byte, error) { + return json.Marshal(&smCid{ + RawSignedMessage: (*RawSignedMessage)(sm), + CID: sm.Cid(), + }) +} diff --git a/venus-shared/chain/signed_message_test.go b/venus-shared/chain/signed_message_test.go new file mode 100644 index 0000000000..49efb85e09 --- /dev/null +++ b/venus-shared/chain/signed_message_test.go @@ -0,0 +1,69 @@ +package chain + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-state-types/crypto" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" +) + +func TestSignedMessageBasic(t *testing.T) { + tf.UnitTest(t) + sliceLen := 16 + bytesLen := 32 + + var buf bytes.Buffer + for i := 0; i < 32; i++ { + var src, dst SignedMessage + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst) + require.Nil(t, src.Signature.Data) + }, + + ProvideOpts: []interface{}{ + testutil.WithSliceLen(sliceLen), + testutil.BytesFixedProvider(bytesLen), + }, + + Provided: func() { + require.NotEqual(t, src, dst, "value provided") + require.Len(t, src.Signature.Data, bytesLen) + }, + + Finished: func() { + require.Equal(t, src, dst, "after unmarshaling") + require.Equal(t, src.String(), dst.String()) + + c := src.Cid() + + blk, err := src.ToStorageBlock() + require.NoError(t, err, "ToStorageBlock") + + require.Equal(t, c, blk.Cid()) + require.Equal(t, c, dst.Cid()) + + switch src.Signature.Type { + case crypto.SigTypeBLS: + require.Equal(t, c, src.Message.Cid()) + require.Equal(t, src.ChainLength(), src.Message.ChainLength()) + + case crypto.SigTypeSecp256k1: + require.NotEqual(t, c, src.Message.Cid()) + require.Greater(t, src.ChainLength(), src.Message.ChainLength()) + + default: + t.Fatalf("unexpected sig type %d", src.Signature.Type) + } + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} diff --git a/venus-shared/chain/signer.go b/venus-shared/chain/signer.go new file mode 100644 index 0000000000..f50ad85457 --- /dev/null +++ b/venus-shared/chain/signer.go @@ -0,0 +1,14 @@ +package chain + +import ( + "context" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/crypto" +) + +// Signer signs data with a private key obtained internally from a provided address. +type Signer interface { + SignBytes(ctx context.Context, data []byte, addr address.Address) (*crypto.Signature, error) + HasAddress(ctx context.Context, addr address.Address) (bool, error) +} diff --git a/venus-shared/chain/supply.go b/venus-shared/chain/supply.go new file mode 100644 index 0000000000..32fd2c8cc6 --- /dev/null +++ b/venus-shared/chain/supply.go @@ -0,0 +1,12 @@ +package chain + +import "github.com/filecoin-project/go-state-types/abi" + +type CirculatingSupply struct { + FilVested abi.TokenAmount + FilMined abi.TokenAmount + FilBurnt abi.TokenAmount + FilLocked abi.TokenAmount + FilCirculating abi.TokenAmount + FilReserveDisbursed abi.TokenAmount +} diff --git a/venus-shared/chain/tipset.go b/venus-shared/chain/tipset.go new file mode 100644 index 0000000000..f186337c8b --- /dev/null +++ b/venus-shared/chain/tipset.go @@ -0,0 +1,294 @@ +package chain + +import ( + "bytes" + "fmt" + "sort" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" +) + +type blockHeaderWithCid struct { + c cid.Cid + b *BlockHeader +} + +// UndefTipSet is a singleton representing a nil or undefined tipset. +var UndefTipSet = &TipSet{} + +func NewTipSet(bhs []*BlockHeader) (*TipSet, error) { + if len(bhs) == 0 { + return nil, fmt.Errorf("no blocks for tipset") + } + + blks := make([]*blockHeaderWithCid, len(bhs)) + first := bhs[0] + blks[0] = &blockHeaderWithCid{ + c: first.Cid(), + b: first, + } + + seen := make(map[cid.Cid]struct{}) + seen[blks[0].c] = struct{}{} + + for i := 1; i < len(bhs); i++ { + blk := bhs[i] + if blk.Height != first.Height { + return nil, fmt.Errorf("inconsistent block heights %d and %d", first.Height, blk.Height) + } + + if !sortedCidArrsEqual(blk.Parents, first.Parents) { + return nil, fmt.Errorf("inconsistent block parents %s and %s", NewTipSetKey(first.Parents...), NewTipSetKey(blk.Parents...)) + } + + if !blk.ParentWeight.Equals(first.ParentWeight) { + return nil, fmt.Errorf("inconsistent block parent weights %d and %d", first.ParentWeight, blk.ParentWeight) + } + + bcid := blk.Cid() + if _, ok := seen[bcid]; ok { + return nil, fmt.Errorf("duplicate block %s", bcid) + } + + seen[bcid] = struct{}{} + blks[i] = &blockHeaderWithCid{ + c: bcid, + b: blk, + } + } + + sortBlockHeadersInTipSet(blks) + blocks := make([]*BlockHeader, len(blks)) + cids := make([]cid.Cid, len(blks)) + for i := range blks { + blocks[i] = blks[i].b + cids[i] = blks[i].c + } + + return &TipSet{ + blocks: blocks, + + key: NewTipSetKey(cids...), + cids: cids, + + height: first.Height, + + parentsKey: NewTipSetKey(first.Parents...), + }, nil +} + +// TipSet is a non-empty, immutable set of blocks at the same height with the same parent set. +// Blocks in a tipset are canonically ordered by ticket. Blocks may be iterated either via +// ToSlice() (which involves a shallow copy) or efficiently by index with At(). +// TipSet is a lightweight value type; passing by pointer is usually unnecessary. +// +// Canonical tipset newBlock ordering does not match the order of CIDs in a TipSetKey used as +// a tipset "key". +type TipSet struct { + // This slice is wrapped in a struct to enforce immutability. + blocks []*BlockHeader + // Key is computed at construction and cached. + key TipSetKey + cids []cid.Cid + + height abi.ChainEpoch + + parentsKey TipSetKey +} + +// Defined checks whether the tipset is defined. +// Invoking any other methods on an undefined tipset will result in undefined behaviour (c.f. cid.Undef) +func (ts *TipSet) Defined() bool { + return ts != nil && len(ts.blocks) > 0 +} + +func (ts *TipSet) Equals(ots *TipSet) bool { + if ts == nil && ots == nil { + return true + } + if ts == nil || ots == nil { + return false + } + + if ts.height != ots.height { + return false + } + + if len(ts.cids) != len(ots.cids) { + return false + } + + for i, cid := range ts.cids { + if cid != ots.cids[i] { + return false + } + } + + return true +} + +// Len returns the number of blocks in the tipset. +func (ts *TipSet) Len() int { + if ts == nil { + return 0 + } + return len(ts.blocks) +} + +// At returns the i'th newBlock in the tipset. +// An index outside the half-open range [0, Len()) will panic. +func (ts *TipSet) At(i int) *BlockHeader { + return ts.blocks[i] +} + +func (ts *TipSet) Blocks() []*BlockHeader { + return ts.blocks +} + +// Key returns a key for the tipset. +func (ts *TipSet) Key() TipSetKey { + if ts == nil { + return EmptyTSK + } + return ts.key +} + +func (ts *TipSet) Cids() []cid.Cid { + if !ts.Defined() { + return []cid.Cid{} + } + + dst := make([]cid.Cid, len(ts.cids)) + copy(dst, ts.cids) + return dst +} + +// Height returns the height of a tipset. +func (ts *TipSet) Height() abi.ChainEpoch { + if ts.Defined() { + return ts.height + } + + return 0 +} + +// Parents returns the CIDs of the parents of the blocks in the tipset. +func (ts *TipSet) Parents() TipSetKey { + if ts.Defined() { + return ts.parentsKey + } + + return EmptyTSK +} + +// Parents returns the CIDs of the parents of the blocks in the tipset. +func (ts *TipSet) ParentState() cid.Cid { + if ts.Defined() { + return ts.blocks[0].ParentStateRoot + } + return cid.Undef +} + +// ParentWeight returns the tipset's ParentWeight in fixed point form. +func (ts *TipSet) ParentWeight() big.Int { + if ts.Defined() { + return ts.blocks[0].ParentWeight + } + return big.Zero() +} + +// String returns a formatted string of the CIDs in the TipSet. +// "{ }" +// Note: existing callers use this as a unique key for the tipset. We should change them +// to use the TipSetKey explicitly +func (ts TipSet) String() string { + return ts.Key().String() +} + +func (ts *TipSet) IsChildOf(parent *TipSet) bool { + return CidArrsEqual(ts.Parents().Cids(), parent.key.Cids()) && + // FIXME: The height check might go beyond what is meant by + // "parent", but many parts of the code rely on the tipset's + // height for their processing logic at the moment to obviate it. + ts.Height() > parent.Height() +} + +func (ts *TipSet) MinTicketBlock() *BlockHeader { + min := ts.blocks[0] + + for _, b := range ts.blocks[1:] { + if b.LastTicket().Less(min.LastTicket()) { + min = b + } + } + + return min +} + +// MinTicket returns the smallest ticket of all blocks in the tipset. +func (ts *TipSet) MinTicket() *Ticket { + return ts.MinTicketBlock().Ticket +} + +func (ts *TipSet) MinTimestamp() uint64 { + minTS := ts.blocks[0].Timestamp + for _, bh := range ts.blocks[1:] { + if bh.Timestamp < minTS { + minTS = bh.Timestamp + } + } + return minTS +} + +// ToSlice returns an ordered slice of pointers to the tipset's blocks. +func (ts *TipSet) ToSlice() []*BlockHeader { + slice := make([]*BlockHeader, len(ts.blocks)) + copy(slice, ts.blocks) + return slice +} + +func sortedCidArrsEqual(a, b []cid.Cid) bool { + if len(a) != len(b) { + return false + } + + for i := range a { + if a[i] != b[i] { + return false + } + } + + return true +} + +func sortBlockHeadersInTipSet(blks []*blockHeaderWithCid) { + sort.Slice(blks, func(i, j int) bool { + cmp := blks[i].b.Ticket.Compare(blks[j].b.Ticket) + if cmp == 0 { + // Break ticket ties with the newBlock CIDs, which are distinct. + cmp = bytes.Compare(blks[i].c.Bytes(), blks[j].c.Bytes()) + } + return cmp < 0 + }) +} + +func CidArrsEqual(a, b []cid.Cid) bool { + if len(a) != len(b) { + return false + } + + // order ignoring compare... + s := make(map[cid.Cid]bool) + for _, c := range a { + s[c] = true + } + + for _, c := range b { + if !s[c] { + return false + } + } + return true +} diff --git a/venus-shared/chain/tipset_exp_tipset_test.go b/venus-shared/chain/tipset_exp_tipset_test.go new file mode 100644 index 0000000000..ebd4096db7 --- /dev/null +++ b/venus-shared/chain/tipset_exp_tipset_test.go @@ -0,0 +1,48 @@ +package chain + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" +) + +func TestExpTipSet(t *testing.T) { + tf.UnitTest(t) + sliceLen := 5 + bytesLen := 32 + + var buf bytes.Buffer + for i := 0; i < 32; i++ { + var src, dst ExpTipSet + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst, "empty values") + require.Nil(t, src.Cids, "empty cids") + require.Nil(t, src.Blocks, "empty blocks") + }, + + ProvideOpts: []interface{}{ + testutil.WithSliceLen(sliceLen), + testutil.BytesFixedProvider(bytesLen), + }, + + Provided: func() { + require.NotEqual(t, src, dst, "src value provided") + require.Len(t, src.Cids, sliceLen, "cids length") + require.Len(t, src.Blocks, sliceLen, "blocks length") + }, + + Finished: func() { + require.Equal(t, src, dst) + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} diff --git a/venus-shared/chain/tipset_key.go b/venus-shared/chain/tipset_key.go new file mode 100644 index 0000000000..70838aa215 --- /dev/null +++ b/venus-shared/chain/tipset_key.go @@ -0,0 +1,215 @@ +package chain + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "strings" + + "golang.org/x/xerrors" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" +) + +// TipSetKey is an immutable set of CIDs forming a unique key for a TipSet. +// Equal keys will have equivalent iteration order. CIDs are maintained in +// the same order as the canonical iteration order of blocks in a tipset (which is by ticket). +// This convention is maintained by the caller. The order of input cids to the constructor +// must be the same as this canonical order. It is the caller's responsibility to not +// construct a key with duplicate ids +// TipSetKey is a lightweight value type; passing by pointer is usually unnecessary. + +var ( + _ json.Marshaler = TipSetKey{} + _ json.Unmarshaler = (*TipSetKey)(nil) +) + +var EmptyTSK = TipSetKey{} + +// The length of a newBlock header CID in bytes. +var blockHeaderCIDLen int + +func init() { + // hash a large string of zeros so we don't estimate based on inlined CIDs. + var buf [256]byte + c, err := abi.CidBuilder.Sum(buf[:]) + if err != nil { + panic(err) + } + blockHeaderCIDLen = len(c.Bytes()) +} + +// NewTipSetKey builds a new key from a slice of CIDs. +// The CIDs are assumed to be ordered correctly. +func NewTipSetKey(cids ...cid.Cid) TipSetKey { + encoded := encodeKey(cids) + return TipSetKey{string(encoded)} +} + +// A TipSetKey is an immutable collection of CIDs forming a unique key for a tipset. +// The CIDs are assumed to be distinct and in canonical order. Two keys with the same +// CIDs in a different order are not considered equal. +// TipSetKey is a lightweight value type, and may be compared for equality with ==. +type TipSetKey struct { + // The internal representation is a concatenation of the bytes of the CIDs, which are + // self-describing, wrapped as a string. + // These gymnastics make the a TipSetKey usable as a map key. + // The empty key has value "". + value string +} + +// Cids returns a slice of the CIDs comprising this key. +func (tsk TipSetKey) Cids() []cid.Cid { + cids, err := decodeKey([]byte(tsk.value)) + if err != nil { + panic("invalid tipset key: " + err.Error()) + } + return cids +} + +// String returns a human-readable representation of the key. +func (tsk TipSetKey) String() string { + b := strings.Builder{} + b.WriteString("{") + for _, c := range tsk.Cids() { + b.Write([]byte(fmt.Sprintf(" %s", c.String()))) + } + b.WriteString(" }") + return b.String() +} + +// Bytes returns a binary representation of the key. +func (tsk TipSetKey) Bytes() []byte { + return []byte(tsk.value) +} + +func (tsk TipSetKey) MarshalJSON() ([]byte, error) { + return json.Marshal(tsk.Cids()) +} + +func (tsk *TipSetKey) UnmarshalJSON(b []byte) error { + var cids []cid.Cid + if err := json.Unmarshal(b, &cids); err != nil { + return err + } + tsk.value = string(encodeKey(cids)) + return nil +} + +func (tsk TipSetKey) IsEmpty() bool { + return len(tsk.value) == 0 +} + +// ContainsAll checks if another set is a subset of this one. +// We can assume that the relative order of members of one key is +// maintained in the other since we assume that all ids are sorted +// by corresponding newBlock ticket value. +func (tsk TipSetKey) ContainsAll(other TipSetKey) bool { + // Since we assume the ids must have the same relative sorting we can + // perform one pass over this set, advancing the other index whenever the + // values match. + cids := tsk.Cids() + otherCids := other.Cids() + otherIdx := 0 + for i := 0; i < len(cids) && otherIdx < len(otherCids); i++ { + if cids[i].Equals(otherCids[otherIdx]) { + otherIdx++ + } + } + // otherIdx is advanced the full length only if every element was found in this set. + return otherIdx == len(otherCids) +} + +// Has checks whether the set contains `id`. +func (tsk TipSetKey) Has(id cid.Cid) bool { + // Find index of the first CID not less than id. + for _, cid := range tsk.Cids() { + if cid == id { + return true + } + } + return false +} + +// Equals checks whether the set contains exactly the same CIDs as another. +func (tsk TipSetKey) Equals(other TipSetKey) bool { + return tsk.value == other.value +} + +func (tsk *TipSetKey) UnmarshalCBOR(r io.Reader) error { + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Parents: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + cids := make([]cid.Cid, extra) + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.Parents failed: %v", err) + } + cids[i] = c + } + tsk.value = string(encodeKey(cids)) + } + return nil +} + +func (tsk TipSetKey) MarshalCBOR(w io.Writer) error { + cids := tsk.Cids() + if len(cids) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Parents was too long") + } + scratch := make([]byte, 9) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(cids))); err != nil { + return err + } + for _, v := range cids { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.Parents: %v", err) + } + } + return nil +} + +func encodeKey(cids []cid.Cid) []byte { + buffer := new(bytes.Buffer) + for _, c := range cids { + // bytes.Buffer.Write() err is documented to be always nil. + _, _ = buffer.Write(c.Bytes()) + } + return buffer.Bytes() +} + +func decodeKey(encoded []byte) ([]cid.Cid, error) { + // To avoid reallocation of the underlying array, estimate the number of CIDs to be extracted + // by dividing the encoded length by the expected CID length. + estimatedCount := len(encoded) / blockHeaderCIDLen + cids := make([]cid.Cid, 0, estimatedCount) + nextIdx := 0 + for nextIdx < len(encoded) { + nr, c, err := cid.CidFromBytes(encoded[nextIdx:]) + if err != nil { + return nil, err + } + cids = append(cids, c) + nextIdx += nr + } + return cids, nil +} diff --git a/venus-shared/chain/tipset_key_test.go b/venus-shared/chain/tipset_key_test.go new file mode 100644 index 0000000000..00a8a3377d --- /dev/null +++ b/venus-shared/chain/tipset_key_test.go @@ -0,0 +1,45 @@ +package chain + +import ( + "testing" + + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" +) + +func TestTipSetKey(t *testing.T) { + tf.UnitTest(t) + var cids []cid.Cid + cidNum := 10 + + // value provided + testutil.Provide(t, &cids, testutil.WithSliceLen(cidNum)) + require.Len(t, cids, cidNum) + require.NotEqual(t, make([]cid.Cid, cidNum), cids) + + // construct + tsk := NewTipSetKey(cids...) + require.False(t, tsk.IsEmpty()) + + require.NotEqual(t, tsk, EmptyTSK) + + // content + require.Equal(t, tsk.Cids(), cids) + tskStr := tsk.String() + for i := range cids { + require.Contains(t, tskStr, cids[i].String()) + } + + // marshal json + data, err := tsk.MarshalJSON() + require.NoError(t, err, "marshal json") + + var decoded TipSetKey + err = decoded.UnmarshalJSON(data) + require.NoError(t, err) + + require.Equal(t, tsk, decoded) +} diff --git a/venus-shared/chain/tipset_marshal.go b/venus-shared/chain/tipset_marshal.go new file mode 100644 index 0000000000..5d1c6bf965 --- /dev/null +++ b/venus-shared/chain/tipset_marshal.go @@ -0,0 +1,70 @@ +package chain + +import ( + "encoding/json" + "io" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" +) + +type ExpTipSet struct { + Cids []cid.Cid + Blocks []*BlockHeader + Height abi.ChainEpoch +} + +func (ts *TipSet) MarshalJSON() ([]byte, error) { + // why didnt i just export the fields? Because the struct has methods with the + // same names already + return json.Marshal(ExpTipSet{ + Cids: ts.cids, + Blocks: ts.blocks, + Height: ts.height, + }) +} + +func (ts *TipSet) UnmarshalJSON(b []byte) error { + var ets ExpTipSet + if err := json.Unmarshal(b, &ets); err != nil { + return err + } + + ots, err := NewTipSet(ets.Blocks) + if err != nil { + return err + } + + *ts = *ots + + return nil +} + +func (ts *TipSet) MarshalCBOR(w io.Writer) error { + if ts == nil { + _, err := w.Write(cbg.CborNull) + return err + } + return (&ExpTipSet{ + Cids: ts.cids, + Blocks: ts.blocks, + Height: ts.height, + }).MarshalCBOR(w) +} + +func (ts *TipSet) UnmarshalCBOR(r io.Reader) error { + var ets ExpTipSet + if err := ets.UnmarshalCBOR(r); err != nil { + return err + } + + ots, err := NewTipSet(ets.Blocks) + if err != nil { + return err + } + + *ts = *ots + + return nil +} diff --git a/venus-shared/chain/tipset_marshal_test.go b/venus-shared/chain/tipset_marshal_test.go new file mode 100644 index 0000000000..71d5545ddb --- /dev/null +++ b/venus-shared/chain/tipset_marshal_test.go @@ -0,0 +1,79 @@ +package chain + +import ( + "bytes" + "encoding/json" + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func checkForTipSetEqual(t *testing.T, a, b *TipSet) { + require.True(t, a.Equals(b)) + require.Equal(t, a.Len(), b.Len(), "Len equals") + require.Equal(t, a.Cids(), b.Cids(), "Cids equals") + require.Equal(t, a.MinTimestamp(), b.MinTimestamp(), "MinTimestamp equals") + require.Equal(t, a.ParentState(), b.ParentState(), "ParentState equals") + require.Equal(t, a.String(), b.String(), "String equals") + require.Equal(t, a.MinTicketBlock(), b.MinTicketBlock(), "MinTicketBlock equals") + require.Equal(t, a.MinTicket(), b.MinTicket(), "MinTicket equals") +} + +func TestTipSetMarshalJSON(t *testing.T) { + tf.UnitTest(t) + height, paretns, weight := constructTipSetKeyInfos(t) + ts := constructTipSet(t, height, paretns, weight) + + data, err := json.Marshal(ts) + require.NoError(t, err, "json mahrshal for TipSet") + + var dst TipSet + err = json.Unmarshal(data, &dst) + require.NoError(t, err, "json unmarshal for TipSet") + + checkForTipSetEqual(t, ts, &dst) +} + +func TestTipSetEquals(t *testing.T) { + tf.UnitTest(t) + height, paretns, weight := constructTipSetKeyInfos(t) + ts := constructTipSet(t, height, paretns, weight) + + assert.True(t, (*TipSet)(nil).Equals(nil), "nil tipset equals") + assert.False(t, ts.Equals(nil), "non-nil is always != nil") +} + +func TestTipSetBasic(t *testing.T) { + tf.UnitTest(t) + var buf bytes.Buffer + + for i := 0; i < 32; i++ { + height, paretns, weight := constructTipSetKeyInfos(t) + ts := constructTipSet(t, height, paretns, weight) + + var src, dst TipSet + + opts := testutil.CborErBasicTestOptions{ + Buf: &buf, + + Provided: func() { + // all fields in TipSet are private, so we assign the value manually + src = *ts + require.NotEqual(t, src, dst, "src provided") + }, + + Finished: func() { + require.Equal(t, src, dst, "struct equals") + checkForTipSetEqual(t, &src, &dst) + + src.height++ + require.False(t, src.Equals(&dst), "height matters in TipSet.Equals") + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opts) + } +} diff --git a/venus-shared/chain/tipset_test.go b/venus-shared/chain/tipset_test.go new file mode 100644 index 0000000000..1231a1a9f3 --- /dev/null +++ b/venus-shared/chain/tipset_test.go @@ -0,0 +1,122 @@ +package chain + +import ( + "testing" + "time" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" +) + +const ( + minBlockHeaderNumForTest = 3 + maxBlockHeaderNumForTest = 10 +) + +func constructTipSetKeyInfos(t *testing.T) (abi.ChainEpoch, []cid.Cid, big.Int) { + now := time.Now().Unix() + height := abi.ChainEpoch(now) + + var parentNum int + testutil.Provide(t, &parentNum, testutil.IntRangedProvider(minBlockHeaderNumForTest, maxBlockHeaderNumForTest)) + + var parents []cid.Cid + testutil.Provide(t, &parents, testutil.WithSliceLen(parentNum)) + require.GreaterOrEqual(t, len(parents), minBlockHeaderNumForTest) + require.Less(t, len(parents), maxBlockHeaderNumForTest) + + var parentWeight big.Int + testutil.Provide(t, &parentWeight, testutil.PositiveBigProvider()) + require.True(t, parentWeight.GreaterThan(big.Zero())) + + return height, parents, parentWeight +} + +func constructTipSet(t *testing.T, height abi.ChainEpoch, parents []cid.Cid, parentWeight big.Int) *TipSet { + appliers := []struct { + fn func(*BlockHeader) + msg string + }{ + { + fn: func(bh *BlockHeader) { + bh.Height = height + }, + msg: "inconsistent block heights ", + }, + + { + fn: func(bh *BlockHeader) { + bh.Parents = make([]cid.Cid, len(parents)) + copy(bh.Parents, parents) + }, + msg: "inconsistent block parents ", + }, + + { + fn: func(bh *BlockHeader) { + bh.ParentWeight.Int.Set(parentWeight.Int) + }, + msg: "inconsistent block parent weights ", + }, + } + + var blkNum int + testutil.Provide(t, &blkNum, testutil.IntRangedProvider(minBlockHeaderNumForTest, maxBlockHeaderNumForTest)) + + var bhs []*BlockHeader + // use a max-int-limit of 1<<48 to prevent digit precision problem in json + testutil.Provide(t, &bhs, testutil.WithSliceLen(blkNum), testutil.IntRangedProvider(0, 1<<48)) + + require.GreaterOrEqual(t, len(bhs), minBlockHeaderNumForTest) + require.Less(t, len(bhs), maxBlockHeaderNumForTest) + + for ai := 0; ai < len(appliers); ai++ { + _, err := NewTipSet(bhs) + require.Errorf(t, err, "attempt to construct tipset before applier #%d", ai) + require.Containsf(t, err.Error(), appliers[ai].msg, "err msg content before applier #%d", ai) + + for bi := range bhs { + appliers[ai].fn(bhs[bi]) + } + } + + // duplicate bh + _, err := NewTipSet(append(bhs, bhs[0])) + require.Error(t, err, "attempt to construct tipset with duplicated bh") + require.Containsf(t, err.Error(), "duplicate block ", "err msg content for duplicate block") + + // construct + ts, err := NewTipSet(bhs) + require.NoError(t, err, "construct tipset") + + return ts +} + +func TestTipSetConstruct(t *testing.T) { + tf.UnitTest(t) + height, parents, parentWeight := constructTipSetKeyInfos(t) + constructTipSet(t, height, parents, parentWeight) +} + +func TestTipSetMethods(t *testing.T) { + tf.UnitTest(t) + height, parents, parentWeight := constructTipSetKeyInfos(t) + + ts := constructTipSet(t, height, parents, parentWeight) + require.True(t, ts.Defined()) + + tsk := ts.Key() + require.NotEqual(t, EmptyTSK, tsk, "tsk not empty") + + require.Equal(t, ts.Height(), height) + + require.True(t, ts.ParentWeight().Equals(parentWeight), "parent weight") + + child := constructTipSet(t, height+1, tsk.Cids(), BigMul(parentWeight, NewInt(2))) + require.True(t, child.IsChildOf(ts), "check if is child") + require.Equal(t, tsk.Cids(), child.Parents().Cids(), "child.Parents() == parent.Cids()") +} diff --git a/venus-shared/compatible-checks/actor-sources.txt b/venus-shared/compatible-checks/actor-sources.txt new file mode 100644 index 0000000000..6a6f4d2fa3 --- /dev/null +++ b/venus-shared/compatible-checks/actor-sources.txt @@ -0,0 +1,125 @@ +SOURCES IN chain/actors: + adt/adt.go + adt/diff_adt.go + adt/diff_adt_test.go + adt/store.go + aerrors/error.go + aerrors/error_test.go + aerrors/wrap.go + agen/main.go + builtin/account/account.go + builtin/account/v0.go + builtin/account/v2.go + builtin/account/v3.go + builtin/account/v4.go + builtin/account/v5.go + builtin/account/v6.go + builtin/account/v7.go + builtin/builtin.go + builtin/cron/cron.go + builtin/cron/v0.go + builtin/cron/v2.go + builtin/cron/v3.go + builtin/cron/v4.go + builtin/cron/v5.go + builtin/cron/v6.go + builtin/cron/v7.go + builtin/init/diff.go + builtin/init/init.go + builtin/init/v0.go + builtin/init/v2.go + builtin/init/v3.go + builtin/init/v4.go + builtin/init/v5.go + builtin/init/v6.go + builtin/init/v7.go + builtin/market/diff.go + builtin/market/market.go + builtin/market/v0.go + builtin/market/v2.go + builtin/market/v3.go + builtin/market/v4.go + builtin/market/v5.go + builtin/market/v6.go + builtin/market/v7.go + builtin/miner/diff.go + builtin/miner/diff_deadlines.go + builtin/miner/miner.go + builtin/miner/utils.go + builtin/miner/v0.go + builtin/miner/v2.go + builtin/miner/v3.go + builtin/miner/v4.go + builtin/miner/v5.go + builtin/miner/v6.go + builtin/miner/v7.go + builtin/multisig/diff.go + builtin/multisig/message0.go + builtin/multisig/message2.go + builtin/multisig/message3.go + builtin/multisig/message4.go + builtin/multisig/message5.go + builtin/multisig/message6.go + builtin/multisig/message7.go + builtin/multisig/multisig.go + builtin/multisig/v0.go + builtin/multisig/v2.go + builtin/multisig/v3.go + builtin/multisig/v4.go + builtin/multisig/v5.go + builtin/multisig/v6.go + builtin/multisig/v7.go + builtin/paych/message0.go + builtin/paych/message2.go + builtin/paych/message3.go + builtin/paych/message4.go + builtin/paych/message5.go + builtin/paych/message6.go + builtin/paych/message7.go + builtin/paych/mock/mock.go + builtin/paych/paych.go + builtin/paych/v0.go + builtin/paych/v2.go + builtin/paych/v3.go + builtin/paych/v4.go + builtin/paych/v5.go + builtin/paych/v6.go + builtin/paych/v7.go + builtin/power/diff.go + builtin/power/power.go + builtin/power/v0.go + builtin/power/v2.go + builtin/power/v3.go + builtin/power/v4.go + builtin/power/v5.go + builtin/power/v6.go + builtin/power/v7.go + builtin/reward/reward.go + builtin/reward/v0.go + builtin/reward/v2.go + builtin/reward/v3.go + builtin/reward/v4.go + builtin/reward/v5.go + builtin/reward/v6.go + builtin/reward/v7.go + builtin/system/system.go + builtin/system/v0.go + builtin/system/v2.go + builtin/system/v3.go + builtin/system/v4.go + builtin/system/v5.go + builtin/system/v6.go + builtin/system/v7.go + builtin/verifreg/util.go + builtin/verifreg/v0.go + builtin/verifreg/v2.go + builtin/verifreg/v3.go + builtin/verifreg/v4.go + builtin/verifreg/v5.go + builtin/verifreg/v6.go + builtin/verifreg/v7.go + builtin/verifreg/verifreg.go + params.go + policy/policy.go + policy/policy_test.go + version.go diff --git a/venus-shared/compatible-checks/actor-templates.txt b/venus-shared/compatible-checks/actor-templates.txt new file mode 100644 index 0000000000..bb2193324d --- /dev/null +++ b/venus-shared/compatible-checks/actor-templates.txt @@ -0,0 +1,27 @@ +TEMPLATES IN chain/actors: + builtin/account/actor.go.template + builtin/account/state.go.template + builtin/builtin.go.template + builtin/cron/actor.go.template + builtin/cron/state.go.template + builtin/init/actor.go.template + builtin/init/state.go.template + builtin/market/actor.go.template + builtin/market/state.go.template + builtin/miner/actor.go.template + builtin/miner/state.go.template + builtin/multisig/actor.go.template + builtin/multisig/message.go.template + builtin/multisig/state.go.template + builtin/paych/actor.go.template + builtin/paych/message.go.template + builtin/paych/state.go.template + builtin/power/actor.go.template + builtin/power/state.go.template + builtin/reward/actor.go.template + builtin/reward/state.go.template + builtin/system/actor.go.template + builtin/system/state.go.template + builtin/verifreg/actor.go.template + builtin/verifreg/state.go.template + policy/policy.go.template diff --git a/venus-shared/compatible-checks/api-checksum.txt b/venus-shared/compatible-checks/api-checksum.txt new file mode 100644 index 0000000000..4b076d1fcd --- /dev/null +++ b/venus-shared/compatible-checks/api-checksum.txt @@ -0,0 +1,419 @@ +v0api.FullNode: + AuthNew: In=2, Out=2, CheckSum=faeef9dc68d6f2533bdf7d8f22ef902d + AuthVerify: In=2, Out=2, CheckSum=3cb63db9d6f8869fd4e9da953cc9cdcb + BeaconGetEntry: In=2, Out=2, CheckSum=c74f5c0f4039207ea45c11bfe3319c38 + ChainDeleteObj: In=2, Out=1, CheckSum=50d40a0afa31dabb8a61693aabea61b7 + ChainExport: In=4, Out=2, CheckSum=aaf98926e0ba36ec808a96de76a3cd98 + ChainGetBlock: In=2, Out=2, CheckSum=0d2bba23d84a51413bbbebe218dcbcf9 + ChainGetBlockMessages: In=2, Out=2, CheckSum=944437b34bb952bf3d50aa6415c9e0d3 + ChainGetGenesis: In=1, Out=2, CheckSum=6d1e4c4d8184dc8d645a56278f14cfad + ChainGetMessage: In=2, Out=2, CheckSum=d1c0ae931458a2a7b07de152ca3de558 + ChainGetMessagesInTipset: In=2, Out=2, CheckSum=6c0bfa48ffcacdfa9dbed1b9e23ad88e + ChainGetNode: In=2, Out=2, CheckSum=66a718f5dbb8b0fcddcf761b58744e38 + ChainGetParentMessages: In=2, Out=2, CheckSum=e659caaae75cd643a7100b1c8cc3125a + ChainGetParentReceipts: In=2, Out=2, CheckSum=de820c5da3d8d036d854ce42ea9d85a3 + ChainGetPath: In=3, Out=2, CheckSum=a745af1a69b379493504c432b15839e7 + ChainGetRandomnessFromBeacon: In=5, Out=2, CheckSum=555559ae8c2c861ff4a73cd5f5955b25 + ChainGetRandomnessFromTickets: In=5, Out=2, CheckSum=555559ae8c2c861ff4a73cd5f5955b25 + ChainGetTipSet: In=2, Out=2, CheckSum=854d79b3a35822ab54e7459ad95816ad + ChainGetTipSetByHeight: In=3, Out=2, CheckSum=9831731a08357a0247d802268b57a497 + ChainHasObj: In=2, Out=2, CheckSum=7fe71bcffa1b110db106e0104e98a32f + ChainHead: In=1, Out=2, CheckSum=6d1e4c4d8184dc8d645a56278f14cfad + ChainNotify: In=1, Out=2, CheckSum=9525148e93a5b83600ebfbde4d24f3e9 + ChainReadObj: In=2, Out=2, CheckSum=6fd9244d87bf5d14fb5e79b0dbc0940d + ChainSetHead: In=2, Out=1, CheckSum=cdfe593ac791e823186abb77bfad49a0 + ChainStatObj: In=3, Out=2, CheckSum=9db2a0d97998daaf9c15e7c3d6ffe82d + ChainTipSetWeight: In=2, Out=2, CheckSum=22ac180fa0c583b4036666bfc155fd63 + ClientCalcCommP: In=2, Out=2, CheckSum=f83c6f3b9d823d22dfcd13e5aee9fb6b + ClientCancelDataTransfer: In=4, Out=1, CheckSum=074398536c75e25946c7f709574e0cdc + ClientCancelRetrievalDeal: In=2, Out=1, CheckSum=d289f4c3758ed7d6ab991b2cf569c969 + ClientDataTransferUpdates: In=1, Out=2, CheckSum=2d33b419e4b215c06ab0e8b66b5f8430 + ClientDealPieceCID: In=2, Out=2, CheckSum=93537a844ba6b74ec1ce82c887359a75 + ClientDealSize: In=2, Out=2, CheckSum=cca1dd5f58136af28546bdbdef2f948a + ClientFindData: In=3, Out=2, CheckSum=232da9eb987d92a76b37572c8f44bf53 + ClientGenCar: In=3, Out=1, CheckSum=b8a0c89fc2c7c16464ac968865e9c156 + ClientGetDealInfo: In=2, Out=2, CheckSum=e67f0e7b88aff099976b0f275b601c9c + ClientGetDealStatus: In=2, Out=2, CheckSum=1297eb9ae9a9ed209cfcb5899910f415 + ClientGetDealUpdates: In=1, Out=2, CheckSum=459cb2faa373d8dcf4cf8e33a2854366 + ClientGetRetrievalUpdates: In=1, Out=2, CheckSum=9390e4328ba9fe6c034341d574fd6f3d + ClientHasLocal: In=2, Out=2, CheckSum=7fe71bcffa1b110db106e0104e98a32f + ClientImport: In=2, Out=2, CheckSum=8c5886f6f2eb7b5db886d639c62e5808 + ClientListDataTransfers: In=1, Out=2, CheckSum=aa113d3aaf47f5b34fc947d26d58d001 + ClientListDeals: In=1, Out=2, CheckSum=fddf5a2bf3dd94a5aec97248ff7db918 + ClientListImports: In=1, Out=2, CheckSum=1966c3c721d57e0a728d3b51ba3a61d4 + ClientListRetrievals: In=1, Out=2, CheckSum=d5485e62b97cf31e1880d54808968895 + ClientMinerQueryOffer: In=4, Out=2, CheckSum=f57fabb5f04c1086302b43bd5087b9e2 + ClientQueryAsk: In=3, Out=2, CheckSum=2d06866277cf890ee42baa4bacffb2fc + ClientRemoveImport: In=2, Out=1, CheckSum=a3fcb78bf5bac553baac584941c1771f + ClientRestartDataTransfer: In=4, Out=1, CheckSum=074398536c75e25946c7f709574e0cdc + ClientRetrieve: In=3, Out=1, CheckSum=33b5ec01d4c4b4a635ab1e7ba1db7387 + ClientRetrieveTryRestartInsufficientFunds: In=2, Out=1, CheckSum=98613e8d41d3a2e52b37f97908560bd9 + ClientRetrieveWithEvents: In=3, Out=2, CheckSum=c98dd52dccd96ec2fa8be621fa35a8a8 + ClientStartDeal: In=2, Out=2, CheckSum=85256e9ef86dbb8ebeb76097c3eea078 + ClientStatelessDeal: In=2, Out=2, CheckSum=85256e9ef86dbb8ebeb76097c3eea078 + Closing: In=1, Out=2, CheckSum=3e0dae65a2378c12be14cee8a60a3bfe + CreateBackup: In=2, Out=1, CheckSum=7b0679c2c73ab9606a7da21c5251ad19 + Discover: In=1, Out=2, CheckSum=09640e20c6d71c3e96c7a56c8698acc9 + GasEstimateFeeCap: In=4, Out=2, CheckSum=0fcac02de1d21c9ac6e10696a6499eba + GasEstimateGasLimit: In=3, Out=2, CheckSum=4d1bd57eef0ee90d4c2e89f097d0604d + GasEstimateGasPremium: In=5, Out=2, CheckSum=550724ed37e2fdaa64e55147e82214b1 + GasEstimateMessageGas: In=4, Out=2, CheckSum=6ff6179b579feed33897d96429504624 + ID: In=1, Out=2, CheckSum=1695f00523f88afb55c5df6053bf9ee4 + LogAlerts: In=1, Out=2, CheckSum=c9262fa7c93e891ec80868e0b83a2222 + LogList: In=1, Out=2, CheckSum=c6d763b6ec7190283b7c648e735725c0 + LogSetLevel: In=3, Out=1, CheckSum=ffdc3b95db02b9026a12c29d899e0059 + MarketAddBalance: In=4, Out=2, CheckSum=a8810156a1b234f90924c1f966f44538 + MarketGetReserved: In=2, Out=2, CheckSum=f1426bf8d7a1afdeaae0cd561fbbfbb0 + MarketReleaseFunds: In=3, Out=1, CheckSum=c20c4060f72c1a1ab8176a4936292a1e + MarketReserveFunds: In=4, Out=2, CheckSum=a8810156a1b234f90924c1f966f44538 + MarketWithdraw: In=4, Out=2, CheckSum=a8810156a1b234f90924c1f966f44538 + MinerCreateBlock: In=2, Out=2, CheckSum=c8749e2acc2143226c34fdf3965fd4b9 + MinerGetBaseInfo: In=4, Out=2, CheckSum=a9ead3443999aba71e9444c0cd9730a2 + MpoolBatchPush: In=2, Out=2, CheckSum=4f34d25c5ddbe15922545c0c28c40830 + MpoolBatchPushMessage: In=3, Out=2, CheckSum=66b4628bc63c8ca4bc31db0393ade01b + MpoolBatchPushUntrusted: In=2, Out=2, CheckSum=4f34d25c5ddbe15922545c0c28c40830 + MpoolClear: In=2, Out=1, CheckSum=790632b52ba8d2fb863afad93556528c + MpoolGetConfig: In=1, Out=2, CheckSum=b28b0828ec4c43c705feb84536e66aa8 + MpoolGetNonce: In=2, Out=2, CheckSum=2f0992ed1f0be8ff9bee0c3f0a39e1e1 + MpoolPending: In=2, Out=2, CheckSum=867ae9cbeb080683492ec76cc0c1ea7f + MpoolPush: In=2, Out=2, CheckSum=3b29294f39a940d77be58a07e30e8d4b + MpoolPushMessage: In=3, Out=2, CheckSum=97e029b4d408862c42035318e3c21d05 + MpoolPushUntrusted: In=2, Out=2, CheckSum=3b29294f39a940d77be58a07e30e8d4b + MpoolSelect: In=3, Out=2, CheckSum=a524ad1b1c0d7d27b21c69c62e926f9c + MpoolSetConfig: In=2, Out=1, CheckSum=f1ed0cdb9842cfb5176188c281577fba + MpoolSub: In=1, Out=2, CheckSum=337ebc027637bda66141bad6af2f6cc4 + MsigAddApprove: In=7, Out=2, CheckSum=4dbd86148df51d0975f2f5c6adac7c00 + MsigAddCancel: In=6, Out=2, CheckSum=afb744caa58c307fffa99d052c97e9c7 + MsigAddPropose: In=5, Out=2, CheckSum=6d40bd8a8f2563f75402a23915a23000 + MsigApprove: In=4, Out=2, CheckSum=09bc2481f1717ddc5147c1e8eb76bbbc + MsigApproveTxnHash: In=9, Out=2, CheckSum=7715b69bd67ece799d3da978457a2915 + MsigCancel: In=8, Out=2, CheckSum=6a9360010be0849bd6c588dd6759af41 + MsigCreate: In=7, Out=2, CheckSum=ef93a3c107e73884b4073f01da738bce + MsigGetAvailableBalance: In=3, Out=2, CheckSum=a05010da3c73edfba49c3b5d28a216cd + MsigGetPending: In=3, Out=2, CheckSum=895d889866adf330c83b8dffdbd27fac + MsigGetVested: In=4, Out=2, CheckSum=33d14f7f35b833b5b9dd6b2188c84324 + MsigGetVestingSchedule: In=3, Out=2, CheckSum=b9caf183f11d2a8e611b1daea98ad69e + MsigPropose: In=7, Out=2, CheckSum=f297212379eac659948e303e5be88c0b + MsigRemoveSigner: In=5, Out=2, CheckSum=6d40bd8a8f2563f75402a23915a23000 + MsigSwapApprove: In=7, Out=2, CheckSum=17c75be766c59016bc4a4d583b297d2f + MsigSwapCancel: In=6, Out=2, CheckSum=e2222a10bb1cf80d1fdb56be22b07800 + MsigSwapPropose: In=5, Out=2, CheckSum=f207e1bd168bfd4258481aacf03b4ed4 + NetAddrsListen: In=1, Out=2, CheckSum=edb8238a53eb0480f852309ccee11c23 + NetAgentVersion: In=2, Out=2, CheckSum=21c48e39a45af1b545fa3612c5e8d20d + NetAutoNatStatus: In=1, Out=2, CheckSum=05d1ab4460587ed623f3ce1e1f193a83 + NetBandwidthStats: In=1, Out=2, CheckSum=8309e47349b264349eb41a1105c36f14 + NetBandwidthStatsByPeer: In=1, Out=2, CheckSum=c58b4378b7d5bd90ba6e1725b717fade + NetBandwidthStatsByProtocol: In=1, Out=2, CheckSum=53627d49fb1ca70ca88666f0c4764250 + NetBlockAdd: In=2, Out=1, CheckSum=bb826402a0a2406da30862a2c08af435 + NetBlockList: In=1, Out=2, CheckSum=174b57557c7d7487b5b204f961e33abc + NetBlockRemove: In=2, Out=1, CheckSum=bb826402a0a2406da30862a2c08af435 + NetConnect: In=2, Out=1, CheckSum=5258b1ca3f00aec9c2a0d53bb9e78ef7 + NetConnectedness: In=2, Out=2, CheckSum=e489a3544ead801c9121171bdf1f3971 + NetDisconnect: In=2, Out=1, CheckSum=814e6b52918db98c4883832a38cd222b + NetFindPeer: In=2, Out=2, CheckSum=2ffcd1ed349f87c3cc0e2bb1ee2d68c6 + NetPeerInfo: In=2, Out=2, CheckSum=1c030faf779524a321fe8cec305b9f25 + NetPeers: In=1, Out=2, CheckSum=487043eee4cf0ea002d7a6d0a7ff793b + NetPubsubScores: In=1, Out=2, CheckSum=66c7a1061de3d6e11d39ce90692aa885 + PaychAllocateLane: In=2, Out=2, CheckSum=2f0992ed1f0be8ff9bee0c3f0a39e1e1 + PaychAvailableFunds: In=2, Out=2, CheckSum=f40942f65ce181601e7bc49e6378a89c + PaychAvailableFundsByFromTo: In=3, Out=2, CheckSum=829ff29d78db755f3c13ab3259adb32b + PaychCollect: In=2, Out=2, CheckSum=fdb746bab5f269b63dc0256d50570d81 + PaychGet: In=4, Out=2, CheckSum=f7fb571ad0461c404a0789f6b8c38501 + PaychGetWaitReady: In=2, Out=2, CheckSum=59546a25118c9e0dbb3ad569d3ec0c6f + PaychList: In=1, Out=2, CheckSum=566d37a33889023f9f73c632fa4e8279 + PaychNewPayment: In=4, Out=2, CheckSum=8bb33e38d75917df1357fcf071335ba9 + PaychSettle: In=2, Out=2, CheckSum=fdb746bab5f269b63dc0256d50570d81 + PaychStatus: In=2, Out=2, CheckSum=ae911e02219f1412acb95e95a4065478 + PaychVoucherAdd: In=5, Out=2, CheckSum=8abddd426fa4de6362414384cdec101c + PaychVoucherCheckSpendable: In=5, Out=2, CheckSum=ab5f887200e92223e9adb9573f32e23f + PaychVoucherCheckValid: In=3, Out=1, CheckSum=52e8d077109b5410e1dead7e9bf696b0 + PaychVoucherCreate: In=4, Out=2, CheckSum=e5113a58d351abf5cadd77b46f690c2d + PaychVoucherList: In=2, Out=2, CheckSum=55450ef559b971b6894fb3865003b7b4 + PaychVoucherSubmit: In=5, Out=2, CheckSum=158150e9cb2e2d176ee9ba4674d382d9 + Session: In=1, Out=2, CheckSum=cdb04ef6a97114c8f24f456a2e70f1cd + Shutdown: In=1, Out=1, CheckSum=c39be30cc5a8826024fcf4d23e7017d6 + StateAccountKey: In=3, Out=2, CheckSum=9b6f9fdaea5bb22c60772266c418d98f + StateAllMinerFaults: In=3, Out=2, CheckSum=a17e05b21e1ecc8da867e2f76df6c46c + StateCall: In=3, Out=2, CheckSum=b33ab6c7df31d805c256c8ab6691b085 + StateChangedActors: In=3, Out=2, CheckSum=cbc0cd36e495552a6672caab9f839468 + StateCirculatingSupply: In=2, Out=2, CheckSum=22ac180fa0c583b4036666bfc155fd63 + StateCompute: In=4, Out=2, CheckSum=1d429c389354255c7f865f00a59e3888 + StateDealProviderCollateralBounds: In=4, Out=2, CheckSum=5231e44843c0b74a04371e1e7170d4b2 + StateDecodeParams: In=5, Out=2, CheckSum=8c6311be4dc064a657368516c33e1307 + StateGetActor: In=3, Out=2, CheckSum=adcd0bbd36e3ab94f777c7cb3df1fb34 + StateGetRandomnessFromBeacon: In=5, Out=2, CheckSum=b98225c36bf011979dbcad0fb938e659 + StateGetRandomnessFromTickets: In=5, Out=2, CheckSum=b98225c36bf011979dbcad0fb938e659 + StateGetReceipt: In=3, Out=2, CheckSum=03f4f567eaa55a6ccad8b4a4c95b590a + StateListActors: In=2, Out=2, CheckSum=57bcc4526adaf4b0582c0b117d39b042 + StateListMessages: In=4, Out=2, CheckSum=f12ce9e8a127bf320fb0b289a19b4ea6 + StateListMiners: In=2, Out=2, CheckSum=57bcc4526adaf4b0582c0b117d39b042 + StateLookupID: In=3, Out=2, CheckSum=9b6f9fdaea5bb22c60772266c418d98f + StateMarketBalance: In=3, Out=2, CheckSum=bbab976bd25166200f737c94fc970bc7 + StateMarketDeals: In=2, Out=2, CheckSum=38821c8f592f6f56eb985973ac1ffd36 + StateMarketParticipants: In=2, Out=2, CheckSum=acc9019d0b6e389743c6f992350f407c + StateMarketStorageDeal: In=3, Out=2, CheckSum=94af302d39beba9f0ce7648f4118b6aa + StateMinerActiveSectors: In=3, Out=2, CheckSum=bac211cd5a37bfadf156b636ad7b9381 + StateMinerAvailableBalance: In=3, Out=2, CheckSum=a05010da3c73edfba49c3b5d28a216cd + StateMinerDeadlines: In=3, Out=2, CheckSum=5b128c75ba4953740906520cca96b962 + StateMinerFaults: In=3, Out=2, CheckSum=9d26d848f93597964f751b43edd3d476 + StateMinerInfo: In=3, Out=2, CheckSum=0782a05b506c86bcfb47082a6f8e37fc + StateMinerInitialPledgeCollateral: In=4, Out=2, CheckSum=d87787cc5072c480ed580099fc926668 + StateMinerPartitions: In=4, Out=2, CheckSum=b3cba1da3bd87c433cb8f9df7f7edc09 + StateMinerPower: In=3, Out=2, CheckSum=0e70a6360616c25624118181f764d7df + StateMinerPreCommitDepositForPower: In=4, Out=2, CheckSum=d87787cc5072c480ed580099fc926668 + StateMinerProvingDeadline: In=3, Out=2, CheckSum=8c6037a054ad720ecfb3d0c3f4f90fe6 + StateMinerRecoveries: In=3, Out=2, CheckSum=9d26d848f93597964f751b43edd3d476 + StateMinerSectorAllocated: In=4, Out=2, CheckSum=2accd56a9e9196fa1ca85a1d60e19fc2 + StateMinerSectorCount: In=3, Out=2, CheckSum=573483cbcf3ccdd38063b9ce16453dc2 + StateMinerSectors: In=4, Out=2, CheckSum=c04491aa9e0e6e9a743046c60e13683d + StateNetworkName: In=1, Out=2, CheckSum=afb82130640a26dcd9d7010f31c69572 + StateNetworkVersion: In=2, Out=2, CheckSum=47de92e3b59793ade53abd96c347bace + StateReadState: In=3, Out=2, CheckSum=f53f39943eea93d5f3dd64f1389e4c64 + StateReplay: In=3, Out=2, CheckSum=ec89143eb01290212c3ce0032f62c5fc + StateSearchMsg: In=2, Out=2, CheckSum=e4186ab56a9d2e3c99174110e3f697dc + StateSearchMsgLimited: In=3, Out=2, CheckSum=8990ed018d033c44ebb38c0d077bc6d0 + StateSectorExpiration: In=4, Out=2, CheckSum=bb669c8b66b6f74c681b4345c9e4cc8f + StateSectorGetInfo: In=4, Out=2, CheckSum=27a4e36a319274aca9597f105bc438ff + StateSectorPartition: In=4, Out=2, CheckSum=e3743df55a360243a32ac64ce1282c53 + StateSectorPreCommitInfo: In=4, Out=2, CheckSum=40e05fc7142ce524b9a58e8655ce5a01 + StateVMCirculatingSupplyInternal: In=2, Out=2, CheckSum=05c2114e08be095cece55db19e214d2c + StateVerifiedClientStatus: In=3, Out=2, CheckSum=e33ae4cd2315832f2d6f2aa74b68c34e + StateVerifiedRegistryRootKey: In=2, Out=2, CheckSum=5ad3a497ee24e321c780a69b8d2f0936 + StateVerifierStatus: In=3, Out=2, CheckSum=e33ae4cd2315832f2d6f2aa74b68c34e + StateWaitMsg: In=3, Out=2, CheckSum=f997714e2214b7122462163c5e7bc9a2 + StateWaitMsgLimited: In=4, Out=2, CheckSum=0b59c44082d62b85343ca111441315a1 + SyncCheckBad: In=2, Out=2, CheckSum=ba06470da0ca1d6cc2f9ada7f0288a6c + SyncCheckpoint: In=2, Out=1, CheckSum=cdfe593ac791e823186abb77bfad49a0 + SyncIncomingBlocks: In=1, Out=2, CheckSum=f6ad051ba2ce73511f74f9c08032acc3 + SyncMarkBad: In=2, Out=1, CheckSum=50d40a0afa31dabb8a61693aabea61b7 + SyncState: In=1, Out=2, CheckSum=7004fd3e7bf60990cb1695fa5883d08f + SyncSubmitBlock: In=2, Out=1, CheckSum=04cdc7641df5628e2ef8c90584936142 + SyncUnmarkAllBad: In=1, Out=1, CheckSum=c39be30cc5a8826024fcf4d23e7017d6 + SyncUnmarkBad: In=2, Out=1, CheckSum=50d40a0afa31dabb8a61693aabea61b7 + SyncValidateTipset: In=2, Out=2, CheckSum=a244b60fe32e540879ec4eeded71136b + Version: In=1, Out=2, CheckSum=0e78a1023c652297e66079f521e11624 + WalletBalance: In=2, Out=2, CheckSum=f1426bf8d7a1afdeaae0cd561fbbfbb0 + WalletDefaultAddress: In=1, Out=2, CheckSum=5591bbacb9b8345a4a07a149c963df55 + WalletDelete: In=2, Out=1, CheckSum=98613e8d41d3a2e52b37f97908560bd9 + WalletExport: In=2, Out=2, CheckSum=5db217de8a3ec9ecbed4cc583e473991 + WalletHas: In=2, Out=2, CheckSum=9ad76c8c583af5b5a5d0202c0a3fe7f4 + WalletImport: In=2, Out=2, CheckSum=617245aaab0381dc634a2ad50dd440b3 + WalletList: In=1, Out=2, CheckSum=566d37a33889023f9f73c632fa4e8279 + WalletNew: In=2, Out=2, CheckSum=266c59d3ee6f0b3a66e8dbdec099ef06 + WalletSetDefault: In=2, Out=1, CheckSum=98613e8d41d3a2e52b37f97908560bd9 + WalletSign: In=3, Out=2, CheckSum=b5a8800f8b60b92c4d99e9cb0fcff086 + WalletSignMessage: In=3, Out=2, CheckSum=c9f0ea6123a189cfeab06ce6bdeda7b3 + WalletValidateAddress: In=2, Out=2, CheckSum=610b35f7aa87b32463e5c2a9b4bd3f55 + WalletVerify: In=4, Out=2, CheckSum=9b22231e95efdfb94d9d55038f500636 + +api.FullNode: + AuthNew: In=2, Out=2, CheckSum=faeef9dc68d6f2533bdf7d8f22ef902d + AuthVerify: In=2, Out=2, CheckSum=3cb63db9d6f8869fd4e9da953cc9cdcb + BeaconGetEntry: In=2, Out=2, CheckSum=c74f5c0f4039207ea45c11bfe3319c38 + ChainBlockstoreInfo: In=1, Out=2, CheckSum=09640e20c6d71c3e96c7a56c8698acc9 + ChainCheckBlockstore: In=1, Out=1, CheckSum=c39be30cc5a8826024fcf4d23e7017d6 + ChainDeleteObj: In=2, Out=1, CheckSum=50d40a0afa31dabb8a61693aabea61b7 + ChainExport: In=4, Out=2, CheckSum=aaf98926e0ba36ec808a96de76a3cd98 + ChainGetBlock: In=2, Out=2, CheckSum=0d2bba23d84a51413bbbebe218dcbcf9 + ChainGetBlockMessages: In=2, Out=2, CheckSum=944437b34bb952bf3d50aa6415c9e0d3 + ChainGetGenesis: In=1, Out=2, CheckSum=6d1e4c4d8184dc8d645a56278f14cfad + ChainGetMessage: In=2, Out=2, CheckSum=d1c0ae931458a2a7b07de152ca3de558 + ChainGetMessagesInTipset: In=2, Out=2, CheckSum=6c0bfa48ffcacdfa9dbed1b9e23ad88e + ChainGetNode: In=2, Out=2, CheckSum=66a718f5dbb8b0fcddcf761b58744e38 + ChainGetParentMessages: In=2, Out=2, CheckSum=e659caaae75cd643a7100b1c8cc3125a + ChainGetParentReceipts: In=2, Out=2, CheckSum=de820c5da3d8d036d854ce42ea9d85a3 + ChainGetPath: In=3, Out=2, CheckSum=a745af1a69b379493504c432b15839e7 + ChainGetTipSet: In=2, Out=2, CheckSum=854d79b3a35822ab54e7459ad95816ad + ChainGetTipSetAfterHeight: In=3, Out=2, CheckSum=9831731a08357a0247d802268b57a497 + ChainGetTipSetByHeight: In=3, Out=2, CheckSum=9831731a08357a0247d802268b57a497 + ChainHasObj: In=2, Out=2, CheckSum=7fe71bcffa1b110db106e0104e98a32f + ChainHead: In=1, Out=2, CheckSum=6d1e4c4d8184dc8d645a56278f14cfad + ChainNotify: In=1, Out=2, CheckSum=9525148e93a5b83600ebfbde4d24f3e9 + ChainReadObj: In=2, Out=2, CheckSum=6fd9244d87bf5d14fb5e79b0dbc0940d + ChainSetHead: In=2, Out=1, CheckSum=cdfe593ac791e823186abb77bfad49a0 + ChainStatObj: In=3, Out=2, CheckSum=9db2a0d97998daaf9c15e7c3d6ffe82d + ChainTipSetWeight: In=2, Out=2, CheckSum=22ac180fa0c583b4036666bfc155fd63 + ClientCalcCommP: In=2, Out=2, CheckSum=f83c6f3b9d823d22dfcd13e5aee9fb6b + ClientCancelDataTransfer: In=4, Out=1, CheckSum=074398536c75e25946c7f709574e0cdc + ClientCancelRetrievalDeal: In=2, Out=1, CheckSum=d289f4c3758ed7d6ab991b2cf569c969 + ClientDataTransferUpdates: In=1, Out=2, CheckSum=2d33b419e4b215c06ab0e8b66b5f8430 + ClientDealPieceCID: In=2, Out=2, CheckSum=93537a844ba6b74ec1ce82c887359a75 + ClientDealSize: In=2, Out=2, CheckSum=cca1dd5f58136af28546bdbdef2f948a + ClientFindData: In=3, Out=2, CheckSum=232da9eb987d92a76b37572c8f44bf53 + ClientGenCar: In=3, Out=1, CheckSum=b8a0c89fc2c7c16464ac968865e9c156 + ClientGetDealInfo: In=2, Out=2, CheckSum=e67f0e7b88aff099976b0f275b601c9c + ClientGetDealStatus: In=2, Out=2, CheckSum=1297eb9ae9a9ed209cfcb5899910f415 + ClientGetDealUpdates: In=1, Out=2, CheckSum=459cb2faa373d8dcf4cf8e33a2854366 + ClientGetRetrievalUpdates: In=1, Out=2, CheckSum=9390e4328ba9fe6c034341d574fd6f3d + ClientHasLocal: In=2, Out=2, CheckSum=7fe71bcffa1b110db106e0104e98a32f + ClientImport: In=2, Out=2, CheckSum=8c5886f6f2eb7b5db886d639c62e5808 + ClientListDataTransfers: In=1, Out=2, CheckSum=aa113d3aaf47f5b34fc947d26d58d001 + ClientListDeals: In=1, Out=2, CheckSum=fddf5a2bf3dd94a5aec97248ff7db918 + ClientListImports: In=1, Out=2, CheckSum=1966c3c721d57e0a728d3b51ba3a61d4 + ClientListRetrievals: In=1, Out=2, CheckSum=d5485e62b97cf31e1880d54808968895 + ClientMinerQueryOffer: In=4, Out=2, CheckSum=f57fabb5f04c1086302b43bd5087b9e2 + ClientQueryAsk: In=3, Out=2, CheckSum=2d06866277cf890ee42baa4bacffb2fc + ClientRemoveImport: In=2, Out=1, CheckSum=a3fcb78bf5bac553baac584941c1771f + ClientRestartDataTransfer: In=4, Out=1, CheckSum=074398536c75e25946c7f709574e0cdc + ClientRetrieve: In=3, Out=1, CheckSum=33b5ec01d4c4b4a635ab1e7ba1db7387 + ClientRetrieveTryRestartInsufficientFunds: In=2, Out=1, CheckSum=98613e8d41d3a2e52b37f97908560bd9 + ClientRetrieveWithEvents: In=3, Out=2, CheckSum=c98dd52dccd96ec2fa8be621fa35a8a8 + ClientStartDeal: In=2, Out=2, CheckSum=85256e9ef86dbb8ebeb76097c3eea078 + ClientStatelessDeal: In=2, Out=2, CheckSum=85256e9ef86dbb8ebeb76097c3eea078 + Closing: In=1, Out=2, CheckSum=3e0dae65a2378c12be14cee8a60a3bfe + CreateBackup: In=2, Out=1, CheckSum=7b0679c2c73ab9606a7da21c5251ad19 + Discover: In=1, Out=2, CheckSum=09640e20c6d71c3e96c7a56c8698acc9 + GasEstimateFeeCap: In=4, Out=2, CheckSum=0fcac02de1d21c9ac6e10696a6499eba + GasEstimateGasLimit: In=3, Out=2, CheckSum=4d1bd57eef0ee90d4c2e89f097d0604d + GasEstimateGasPremium: In=5, Out=2, CheckSum=550724ed37e2fdaa64e55147e82214b1 + GasEstimateMessageGas: In=4, Out=2, CheckSum=6ff6179b579feed33897d96429504624 + ID: In=1, Out=2, CheckSum=1695f00523f88afb55c5df6053bf9ee4 + LogAlerts: In=1, Out=2, CheckSum=c9262fa7c93e891ec80868e0b83a2222 + LogList: In=1, Out=2, CheckSum=c6d763b6ec7190283b7c648e735725c0 + LogSetLevel: In=3, Out=1, CheckSum=ffdc3b95db02b9026a12c29d899e0059 + MarketAddBalance: In=4, Out=2, CheckSum=a8810156a1b234f90924c1f966f44538 + MarketGetReserved: In=2, Out=2, CheckSum=f1426bf8d7a1afdeaae0cd561fbbfbb0 + MarketReleaseFunds: In=3, Out=1, CheckSum=c20c4060f72c1a1ab8176a4936292a1e + MarketReserveFunds: In=4, Out=2, CheckSum=a8810156a1b234f90924c1f966f44538 + MarketWithdraw: In=4, Out=2, CheckSum=a8810156a1b234f90924c1f966f44538 + MinerCreateBlock: In=2, Out=2, CheckSum=c8749e2acc2143226c34fdf3965fd4b9 + MinerGetBaseInfo: In=4, Out=2, CheckSum=a9ead3443999aba71e9444c0cd9730a2 + MpoolBatchPush: In=2, Out=2, CheckSum=4f34d25c5ddbe15922545c0c28c40830 + MpoolBatchPushMessage: In=3, Out=2, CheckSum=66b4628bc63c8ca4bc31db0393ade01b + MpoolBatchPushUntrusted: In=2, Out=2, CheckSum=4f34d25c5ddbe15922545c0c28c40830 + MpoolCheckMessages: In=2, Out=2, CheckSum=4bf8491c98028f49b05ff0f1d6e3eaf7 + MpoolCheckPendingMessages: In=2, Out=2, CheckSum=f4a139f9278ea6fb2158a05c24c769fb + MpoolCheckReplaceMessages: In=2, Out=2, CheckSum=d8312bb585f0696c77b4d02c84293cdd + MpoolClear: In=2, Out=1, CheckSum=790632b52ba8d2fb863afad93556528c + MpoolGetConfig: In=1, Out=2, CheckSum=b28b0828ec4c43c705feb84536e66aa8 + MpoolGetNonce: In=2, Out=2, CheckSum=2f0992ed1f0be8ff9bee0c3f0a39e1e1 + MpoolPending: In=2, Out=2, CheckSum=867ae9cbeb080683492ec76cc0c1ea7f + MpoolPush: In=2, Out=2, CheckSum=3b29294f39a940d77be58a07e30e8d4b + MpoolPushMessage: In=3, Out=2, CheckSum=97e029b4d408862c42035318e3c21d05 + MpoolPushUntrusted: In=2, Out=2, CheckSum=3b29294f39a940d77be58a07e30e8d4b + MpoolSelect: In=3, Out=2, CheckSum=a524ad1b1c0d7d27b21c69c62e926f9c + MpoolSetConfig: In=2, Out=1, CheckSum=f1ed0cdb9842cfb5176188c281577fba + MpoolSub: In=1, Out=2, CheckSum=337ebc027637bda66141bad6af2f6cc4 + MsigAddApprove: In=7, Out=2, CheckSum=f622ab6c302078342d7834f0c32ddbdb + MsigAddCancel: In=6, Out=2, CheckSum=31b5b364ddd3e12c9d310a9868c6fda2 + MsigAddPropose: In=5, Out=2, CheckSum=801a2539853f3e7206fd87fc4171c40b + MsigApprove: In=4, Out=2, CheckSum=3384d4133b5559461f919c3bdb1dac41 + MsigApproveTxnHash: In=9, Out=2, CheckSum=9a7460af699e6aa82452157078046018 + MsigCancel: In=8, Out=2, CheckSum=912010a9da971230c20e5503503e33e2 + MsigCreate: In=7, Out=2, CheckSum=3b8196718c58238e8579cd1e2b8368d9 + MsigGetAvailableBalance: In=3, Out=2, CheckSum=a05010da3c73edfba49c3b5d28a216cd + MsigGetPending: In=3, Out=2, CheckSum=895d889866adf330c83b8dffdbd27fac + MsigGetVested: In=4, Out=2, CheckSum=33d14f7f35b833b5b9dd6b2188c84324 + MsigGetVestingSchedule: In=3, Out=2, CheckSum=b9caf183f11d2a8e611b1daea98ad69e + MsigPropose: In=7, Out=2, CheckSum=22d693fea428a547510ddd48222c5f7a + MsigRemoveSigner: In=5, Out=2, CheckSum=801a2539853f3e7206fd87fc4171c40b + MsigSwapApprove: In=7, Out=2, CheckSum=15b73f7c86aa2009ab368b43d96b5485 + MsigSwapCancel: In=6, Out=2, CheckSum=47441127af7eaa6580d48b2daa13fd1d + MsigSwapPropose: In=5, Out=2, CheckSum=2766f47b61843d276e20ab487ac9849a + NetAddrsListen: In=1, Out=2, CheckSum=edb8238a53eb0480f852309ccee11c23 + NetAgentVersion: In=2, Out=2, CheckSum=21c48e39a45af1b545fa3612c5e8d20d + NetAutoNatStatus: In=1, Out=2, CheckSum=05d1ab4460587ed623f3ce1e1f193a83 + NetBandwidthStats: In=1, Out=2, CheckSum=8309e47349b264349eb41a1105c36f14 + NetBandwidthStatsByPeer: In=1, Out=2, CheckSum=c58b4378b7d5bd90ba6e1725b717fade + NetBandwidthStatsByProtocol: In=1, Out=2, CheckSum=53627d49fb1ca70ca88666f0c4764250 + NetBlockAdd: In=2, Out=1, CheckSum=bb826402a0a2406da30862a2c08af435 + NetBlockList: In=1, Out=2, CheckSum=174b57557c7d7487b5b204f961e33abc + NetBlockRemove: In=2, Out=1, CheckSum=bb826402a0a2406da30862a2c08af435 + NetConnect: In=2, Out=1, CheckSum=5258b1ca3f00aec9c2a0d53bb9e78ef7 + NetConnectedness: In=2, Out=2, CheckSum=e489a3544ead801c9121171bdf1f3971 + NetDisconnect: In=2, Out=1, CheckSum=814e6b52918db98c4883832a38cd222b + NetFindPeer: In=2, Out=2, CheckSum=2ffcd1ed349f87c3cc0e2bb1ee2d68c6 + NetPeerInfo: In=2, Out=2, CheckSum=1c030faf779524a321fe8cec305b9f25 + NetPeers: In=1, Out=2, CheckSum=487043eee4cf0ea002d7a6d0a7ff793b + NetPubsubScores: In=1, Out=2, CheckSum=66c7a1061de3d6e11d39ce90692aa885 + NodeStatus: In=2, Out=2, CheckSum=b46530b68171c85301db86c1b7c19824 + PaychAllocateLane: In=2, Out=2, CheckSum=2f0992ed1f0be8ff9bee0c3f0a39e1e1 + PaychAvailableFunds: In=2, Out=2, CheckSum=f40942f65ce181601e7bc49e6378a89c + PaychAvailableFundsByFromTo: In=3, Out=2, CheckSum=829ff29d78db755f3c13ab3259adb32b + PaychCollect: In=2, Out=2, CheckSum=fdb746bab5f269b63dc0256d50570d81 + PaychGet: In=4, Out=2, CheckSum=f7fb571ad0461c404a0789f6b8c38501 + PaychGetWaitReady: In=2, Out=2, CheckSum=59546a25118c9e0dbb3ad569d3ec0c6f + PaychList: In=1, Out=2, CheckSum=566d37a33889023f9f73c632fa4e8279 + PaychNewPayment: In=4, Out=2, CheckSum=8bb33e38d75917df1357fcf071335ba9 + PaychSettle: In=2, Out=2, CheckSum=fdb746bab5f269b63dc0256d50570d81 + PaychStatus: In=2, Out=2, CheckSum=ae911e02219f1412acb95e95a4065478 + PaychVoucherAdd: In=5, Out=2, CheckSum=8abddd426fa4de6362414384cdec101c + PaychVoucherCheckSpendable: In=5, Out=2, CheckSum=ab5f887200e92223e9adb9573f32e23f + PaychVoucherCheckValid: In=3, Out=1, CheckSum=52e8d077109b5410e1dead7e9bf696b0 + PaychVoucherCreate: In=4, Out=2, CheckSum=e5113a58d351abf5cadd77b46f690c2d + PaychVoucherList: In=2, Out=2, CheckSum=55450ef559b971b6894fb3865003b7b4 + PaychVoucherSubmit: In=5, Out=2, CheckSum=158150e9cb2e2d176ee9ba4674d382d9 + Session: In=1, Out=2, CheckSum=cdb04ef6a97114c8f24f456a2e70f1cd + Shutdown: In=1, Out=1, CheckSum=c39be30cc5a8826024fcf4d23e7017d6 + StateAccountKey: In=3, Out=2, CheckSum=9b6f9fdaea5bb22c60772266c418d98f + StateAllMinerFaults: In=3, Out=2, CheckSum=a17e05b21e1ecc8da867e2f76df6c46c + StateCall: In=3, Out=2, CheckSum=b33ab6c7df31d805c256c8ab6691b085 + StateChangedActors: In=3, Out=2, CheckSum=cbc0cd36e495552a6672caab9f839468 + StateCirculatingSupply: In=2, Out=2, CheckSum=22ac180fa0c583b4036666bfc155fd63 + StateCompute: In=4, Out=2, CheckSum=1d429c389354255c7f865f00a59e3888 + StateDealProviderCollateralBounds: In=4, Out=2, CheckSum=5231e44843c0b74a04371e1e7170d4b2 + StateDecodeParams: In=5, Out=2, CheckSum=8c6311be4dc064a657368516c33e1307 + StateEncodeParams: In=4, Out=2, CheckSum=3e1a5390b92b1b69f9be038cd7400e38 + StateGetActor: In=3, Out=2, CheckSum=adcd0bbd36e3ab94f777c7cb3df1fb34 + StateGetRandomnessFromBeacon: In=5, Out=2, CheckSum=b98225c36bf011979dbcad0fb938e659 + StateGetRandomnessFromTickets: In=5, Out=2, CheckSum=b98225c36bf011979dbcad0fb938e659 + StateListActors: In=2, Out=2, CheckSum=57bcc4526adaf4b0582c0b117d39b042 + StateListMessages: In=4, Out=2, CheckSum=f12ce9e8a127bf320fb0b289a19b4ea6 + StateListMiners: In=2, Out=2, CheckSum=57bcc4526adaf4b0582c0b117d39b042 + StateLookupID: In=3, Out=2, CheckSum=9b6f9fdaea5bb22c60772266c418d98f + StateMarketBalance: In=3, Out=2, CheckSum=bbab976bd25166200f737c94fc970bc7 + StateMarketDeals: In=2, Out=2, CheckSum=38821c8f592f6f56eb985973ac1ffd36 + StateMarketParticipants: In=2, Out=2, CheckSum=acc9019d0b6e389743c6f992350f407c + StateMarketStorageDeal: In=3, Out=2, CheckSum=94af302d39beba9f0ce7648f4118b6aa + StateMinerActiveSectors: In=3, Out=2, CheckSum=bac211cd5a37bfadf156b636ad7b9381 + StateMinerAvailableBalance: In=3, Out=2, CheckSum=a05010da3c73edfba49c3b5d28a216cd + StateMinerDeadlines: In=3, Out=2, CheckSum=5b128c75ba4953740906520cca96b962 + StateMinerFaults: In=3, Out=2, CheckSum=9d26d848f93597964f751b43edd3d476 + StateMinerInfo: In=3, Out=2, CheckSum=0782a05b506c86bcfb47082a6f8e37fc + StateMinerInitialPledgeCollateral: In=4, Out=2, CheckSum=d87787cc5072c480ed580099fc926668 + StateMinerPartitions: In=4, Out=2, CheckSum=b3cba1da3bd87c433cb8f9df7f7edc09 + StateMinerPower: In=3, Out=2, CheckSum=0e70a6360616c25624118181f764d7df + StateMinerPreCommitDepositForPower: In=4, Out=2, CheckSum=d87787cc5072c480ed580099fc926668 + StateMinerProvingDeadline: In=3, Out=2, CheckSum=8c6037a054ad720ecfb3d0c3f4f90fe6 + StateMinerRecoveries: In=3, Out=2, CheckSum=9d26d848f93597964f751b43edd3d476 + StateMinerSectorAllocated: In=4, Out=2, CheckSum=2accd56a9e9196fa1ca85a1d60e19fc2 + StateMinerSectorCount: In=3, Out=2, CheckSum=573483cbcf3ccdd38063b9ce16453dc2 + StateMinerSectors: In=4, Out=2, CheckSum=c04491aa9e0e6e9a743046c60e13683d + StateNetworkName: In=1, Out=2, CheckSum=afb82130640a26dcd9d7010f31c69572 + StateNetworkVersion: In=2, Out=2, CheckSum=47de92e3b59793ade53abd96c347bace + StateReadState: In=3, Out=2, CheckSum=f53f39943eea93d5f3dd64f1389e4c64 + StateReplay: In=3, Out=2, CheckSum=ec89143eb01290212c3ce0032f62c5fc + StateSearchMsg: In=5, Out=2, CheckSum=05ad20588933ea6ffa941f47b826708a + StateSectorExpiration: In=4, Out=2, CheckSum=bb669c8b66b6f74c681b4345c9e4cc8f + StateSectorGetInfo: In=4, Out=2, CheckSum=27a4e36a319274aca9597f105bc438ff + StateSectorPartition: In=4, Out=2, CheckSum=e3743df55a360243a32ac64ce1282c53 + StateSectorPreCommitInfo: In=4, Out=2, CheckSum=40e05fc7142ce524b9a58e8655ce5a01 + StateVMCirculatingSupplyInternal: In=2, Out=2, CheckSum=05c2114e08be095cece55db19e214d2c + StateVerifiedClientStatus: In=3, Out=2, CheckSum=e33ae4cd2315832f2d6f2aa74b68c34e + StateVerifiedRegistryRootKey: In=2, Out=2, CheckSum=5ad3a497ee24e321c780a69b8d2f0936 + StateVerifierStatus: In=3, Out=2, CheckSum=e33ae4cd2315832f2d6f2aa74b68c34e + StateWaitMsg: In=5, Out=2, CheckSum=561c18d1417310b5cd35cfffb0b75a00 + SyncCheckBad: In=2, Out=2, CheckSum=ba06470da0ca1d6cc2f9ada7f0288a6c + SyncCheckpoint: In=2, Out=1, CheckSum=cdfe593ac791e823186abb77bfad49a0 + SyncIncomingBlocks: In=1, Out=2, CheckSum=f6ad051ba2ce73511f74f9c08032acc3 + SyncMarkBad: In=2, Out=1, CheckSum=50d40a0afa31dabb8a61693aabea61b7 + SyncState: In=1, Out=2, CheckSum=7004fd3e7bf60990cb1695fa5883d08f + SyncSubmitBlock: In=2, Out=1, CheckSum=04cdc7641df5628e2ef8c90584936142 + SyncUnmarkAllBad: In=1, Out=1, CheckSum=c39be30cc5a8826024fcf4d23e7017d6 + SyncUnmarkBad: In=2, Out=1, CheckSum=50d40a0afa31dabb8a61693aabea61b7 + SyncValidateTipset: In=2, Out=2, CheckSum=a244b60fe32e540879ec4eeded71136b + Version: In=1, Out=2, CheckSum=0e78a1023c652297e66079f521e11624 + WalletBalance: In=2, Out=2, CheckSum=f1426bf8d7a1afdeaae0cd561fbbfbb0 + WalletDefaultAddress: In=1, Out=2, CheckSum=5591bbacb9b8345a4a07a149c963df55 + WalletDelete: In=2, Out=1, CheckSum=98613e8d41d3a2e52b37f97908560bd9 + WalletExport: In=2, Out=2, CheckSum=5db217de8a3ec9ecbed4cc583e473991 + WalletHas: In=2, Out=2, CheckSum=9ad76c8c583af5b5a5d0202c0a3fe7f4 + WalletImport: In=2, Out=2, CheckSum=617245aaab0381dc634a2ad50dd440b3 + WalletList: In=1, Out=2, CheckSum=566d37a33889023f9f73c632fa4e8279 + WalletNew: In=2, Out=2, CheckSum=266c59d3ee6f0b3a66e8dbdec099ef06 + WalletSetDefault: In=2, Out=1, CheckSum=98613e8d41d3a2e52b37f97908560bd9 + WalletSign: In=3, Out=2, CheckSum=b5a8800f8b60b92c4d99e9cb0fcff086 + WalletSignMessage: In=3, Out=2, CheckSum=c9f0ea6123a189cfeab06ce6bdeda7b3 + WalletValidateAddress: In=2, Out=2, CheckSum=610b35f7aa87b32463e5c2a9b4bd3f55 + WalletVerify: In=4, Out=2, CheckSum=9b22231e95efdfb94d9d55038f500636 + diff --git a/venus-shared/compatible-checks/api-diff.txt b/venus-shared/compatible-checks/api-diff.txt new file mode 100644 index 0000000000..1b0ed0315f --- /dev/null +++ b/venus-shared/compatible-checks/api-diff.txt @@ -0,0 +1,191 @@ +github.com/filecoin-project/venus/venus-shared/api/chain/v1.FullNode <> github.com/filecoin-project/lotus/api.FullNode: + - AuthVerify + + BlockTime + - ChainBlockstoreInfo + - ChainCheckBlockstore + > ChainExport {[func(context.Context, abi.ChainEpoch, bool, chain.TipSetKey) (<-chan []uint8, error) <> func(context.Context, abi.ChainEpoch, bool, types.TipSetKey) (<-chan []uint8, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + - ChainGetGenesis + > ChainGetMessagesInTipset {[func(context.Context, chain.TipSetKey) ([]chain.Message, error) <> func(context.Context, types.TipSetKey) ([]api.Message, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + - ChainGetNode + > ChainGetPath {[func(context.Context, chain.TipSetKey, chain.TipSetKey) ([]*chain.HeadChange, error) <> func(context.Context, types.TipSetKey, types.TipSetKey) ([]*api.HeadChange, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + + ChainGetRandomnessFromBeacon + + ChainGetRandomnessFromTickets + + ChainGetReceipts + > ChainGetTipSet {[func(context.Context, chain.TipSetKey) (*chain.TipSet, error) <> func(context.Context, types.TipSetKey) (*types.TipSet, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > ChainGetTipSetAfterHeight {[func(context.Context, abi.ChainEpoch, chain.TipSetKey) (*chain.TipSet, error) <> func(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > ChainGetTipSetByHeight {[func(context.Context, abi.ChainEpoch, chain.TipSetKey) (*chain.TipSet, error) <> func(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + + ChainList + > ChainSetHead {[func(context.Context, chain.TipSetKey) error <> func(context.Context, types.TipSetKey) error] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + + ChainSyncHandleNewTipSet + > ChainTipSetWeight {[func(context.Context, chain.TipSetKey) (big.Int, error) <> func(context.Context, types.TipSetKey) (big.Int, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + - ClientCalcCommP + - ClientCancelDataTransfer + - ClientCancelRetrievalDeal + - ClientDataTransferUpdates + - ClientDealPieceCID + - ClientDealSize + - ClientFindData + - ClientGenCar + - ClientGetDealInfo + - ClientGetDealStatus + - ClientGetDealUpdates + - ClientGetRetrievalUpdates + - ClientHasLocal + - ClientImport + - ClientListDataTransfers + - ClientListDeals + - ClientListImports + - ClientListRetrievals + - ClientMinerQueryOffer + - ClientQueryAsk + - ClientRemoveImport + - ClientRestartDataTransfer + - ClientRetrieve + - ClientRetrieveTryRestartInsufficientFunds + - ClientRetrieveWithEvents + - ClientStartDeal + - ClientStatelessDeal + - Closing + + Concurrent + - CreateBackup + - Discover + + GasBatchEstimateMessageGas + > GasEstimateFeeCap {[func(context.Context, *chain.Message, int64, chain.TipSetKey) (big.Int, error) <> func(context.Context, *types.Message, int64, types.TipSetKey) (big.Int, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > GasEstimateGasLimit {[func(context.Context, *chain.Message, chain.TipSetKey) (int64, error) <> func(context.Context, *types.Message, types.TipSetKey) (int64, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > GasEstimateGasPremium {[func(context.Context, uint64, address.Address, int64, chain.TipSetKey) (big.Int, error) <> func(context.Context, uint64, address.Address, int64, types.TipSetKey) (big.Int, error)] base=func in type: #4 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > GasEstimateMessageGas {[func(context.Context, *chain.Message, *chain.MessageSendSpec, chain.TipSetKey) (*chain.Message, error) <> func(context.Context, *types.Message, *api.MessageSendSpec, types.TipSetKey) (*types.Message, error)] base=func in type: #2 input; nested={[*chain.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[chain.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[chain.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 2 != 1; nested=nil}}}} + + GetActor + + GetEntry + + GetFullBlock + + GetParentStateRootActor + + HasPassword + - ID + + ListActor + + LockWallet + - LogAlerts + - LogList + - LogSetLevel + - MarketAddBalance + - MarketGetReserved + - MarketReleaseFunds + - MarketReserveFunds + - MarketWithdraw + + MessageWait + > MinerCreateBlock {[func(context.Context, *chain.BlockTemplate) (*chain.BlockMsg, error) <> func(context.Context, *api.BlockTemplate) (*types.BlockMsg, error)] base=func in type: #1 input; nested={[*chain.BlockTemplate <> *api.BlockTemplate] base=pointed type; nested={[chain.BlockTemplate <> api.BlockTemplate] base=struct field; nested={[chain.BlockTemplate <> api.BlockTemplate] base=exported field type: #1 field named Parents; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}}}}} + > MinerGetBaseInfo {[func(context.Context, address.Address, abi.ChainEpoch, chain.TipSetKey) (*chain.MiningBaseInfo, error) <> func(context.Context, address.Address, abi.ChainEpoch, types.TipSetKey) (*api.MiningBaseInfo, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > MpoolBatchPushMessage {[func(context.Context, []*chain.Message, *chain.MessageSendSpec) ([]*chain.SignedMessage, error) <> func(context.Context, []*types.Message, *api.MessageSendSpec) ([]*types.SignedMessage, error)] base=func in type: #2 input; nested={[*chain.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[chain.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[chain.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 2 != 1; nested=nil}}}} + + MpoolDeleteByAdress + > MpoolPending {[func(context.Context, chain.TipSetKey) ([]*chain.SignedMessage, error) <> func(context.Context, types.TipSetKey) ([]*types.SignedMessage, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + + MpoolPublishByAddr + + MpoolPublishMessage + > MpoolPushMessage {[func(context.Context, *chain.Message, *chain.MessageSendSpec) (*chain.SignedMessage, error) <> func(context.Context, *types.Message, *api.MessageSendSpec) (*types.SignedMessage, error)] base=func in type: #2 input; nested={[*chain.MessageSendSpec <> *api.MessageSendSpec] base=pointed type; nested={[chain.MessageSendSpec <> api.MessageSendSpec] base=struct field; nested={[chain.MessageSendSpec <> api.MessageSendSpec] base=exported fields count: 2 != 1; nested=nil}}}} + > MpoolSelect {[func(context.Context, chain.TipSetKey, float64) ([]*chain.SignedMessage, error) <> func(context.Context, types.TipSetKey, float64) ([]*types.SignedMessage, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + + MpoolSelects + - MsigGetAvailableBalance + - MsigGetPending + > MsigGetVested {[func(context.Context, address.Address, chain.TipSetKey, chain.TipSetKey) (big.Int, error) <> func(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (big.Int, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + - MsigGetVestingSchedule + - NetAgentVersion + - NetAutoNatStatus + - NetBandwidthStats + - NetBandwidthStatsByPeer + - NetBandwidthStatsByProtocol + - NetBlockAdd + - NetBlockList + - NetBlockRemove + - NetConnect + - NetConnectedness + - NetDisconnect + - NetFindPeer + - NetPeerInfo + - NetPeers + - NetPubsubScores + + NetworkConnect + + NetworkFindPeer + + NetworkFindProvidersAsync + + NetworkGetBandwidthStats + + NetworkGetClosestPeers + + NetworkGetPeerAddresses + + NetworkGetPeerID + + NetworkPeers + - NodeStatus + - PaychGetWaitReady + + PaychGetWaitsigny + + ProtocolParameters + + ResolveToKeyAddr + - Session + + SetConcurrent + + SetPassword + - Shutdown + > StateAccountKey {[func(context.Context, address.Address, chain.TipSetKey) (address.Address, error) <> func(context.Context, address.Address, types.TipSetKey) (address.Address, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + - StateAllMinerFaults + > StateCall {[func(context.Context, *chain.Message, chain.TipSetKey) (*chain.InvocResult, error) <> func(context.Context, *types.Message, types.TipSetKey) (*api.InvocResult, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + - StateChangedActors + > StateCirculatingSupply {[func(context.Context, chain.TipSetKey) (big.Int, error) <> func(context.Context, types.TipSetKey) (big.Int, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + - StateCompute + > StateDealProviderCollateralBounds {[func(context.Context, abi.PaddedPieceSize, bool, chain.TipSetKey) (chain.DealCollateralBounds, error) <> func(context.Context, abi.PaddedPieceSize, bool, types.TipSetKey) (api.DealCollateralBounds, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + - StateDecodeParams + - StateEncodeParams + > StateGetActor {[func(context.Context, address.Address, chain.TipSetKey) (*chain.Actor, error) <> func(context.Context, address.Address, types.TipSetKey) (*types.Actor, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateGetRandomnessFromBeacon {[func(context.Context, crypto.DomainSeparationTag, abi.ChainEpoch, []uint8, chain.TipSetKey) (abi.Randomness, error) <> func(context.Context, crypto.DomainSeparationTag, abi.ChainEpoch, []uint8, types.TipSetKey) (abi.Randomness, error)] base=func in type: #4 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateGetRandomnessFromTickets {[func(context.Context, crypto.DomainSeparationTag, abi.ChainEpoch, []uint8, chain.TipSetKey) (abi.Randomness, error) <> func(context.Context, crypto.DomainSeparationTag, abi.ChainEpoch, []uint8, types.TipSetKey) (abi.Randomness, error)] base=func in type: #4 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateListActors {[func(context.Context, chain.TipSetKey) ([]address.Address, error) <> func(context.Context, types.TipSetKey) ([]address.Address, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + - StateListMessages + > StateListMiners {[func(context.Context, chain.TipSetKey) ([]address.Address, error) <> func(context.Context, types.TipSetKey) ([]address.Address, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateLookupID {[func(context.Context, address.Address, chain.TipSetKey) (address.Address, error) <> func(context.Context, address.Address, types.TipSetKey) (address.Address, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMarketBalance {[func(context.Context, address.Address, chain.TipSetKey) (chain.MarketBalance, error) <> func(context.Context, address.Address, types.TipSetKey) (api.MarketBalance, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMarketDeals {[func(context.Context, chain.TipSetKey) (map[string]chain.MarketDeal, error) <> func(context.Context, types.TipSetKey) (map[string]api.MarketDeal, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMarketParticipants {[func(context.Context, chain.TipSetKey) (map[string]chain.MarketBalance, error) <> func(context.Context, types.TipSetKey) (map[string]api.MarketBalance, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMarketStorageDeal {[func(context.Context, abi.DealID, chain.TipSetKey) (*chain.MarketDeal, error) <> func(context.Context, abi.DealID, types.TipSetKey) (*api.MarketDeal, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerActiveSectors {[func(context.Context, address.Address, chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) <> func(context.Context, address.Address, types.TipSetKey) ([]*miner.SectorOnChainInfo, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerAvailableBalance {[func(context.Context, address.Address, chain.TipSetKey) (big.Int, error) <> func(context.Context, address.Address, types.TipSetKey) (big.Int, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerDeadlines {[func(context.Context, address.Address, chain.TipSetKey) ([]chain.Deadline, error) <> func(context.Context, address.Address, types.TipSetKey) ([]api.Deadline, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerFaults {[func(context.Context, address.Address, chain.TipSetKey) (bitfield.BitField, error) <> func(context.Context, address.Address, types.TipSetKey) (bitfield.BitField, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerInfo {[func(context.Context, address.Address, chain.TipSetKey) (miner.MinerInfo, error) <> func(context.Context, address.Address, types.TipSetKey) (miner.MinerInfo, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerInitialPledgeCollateral {[func(context.Context, address.Address, miner.SectorPreCommitInfo, chain.TipSetKey) (big.Int, error) <> func(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (big.Int, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerPartitions {[func(context.Context, address.Address, uint64, chain.TipSetKey) ([]chain.Partition, error) <> func(context.Context, address.Address, uint64, types.TipSetKey) ([]api.Partition, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerPower {[func(context.Context, address.Address, chain.TipSetKey) (*chain.MinerPower, error) <> func(context.Context, address.Address, types.TipSetKey) (*api.MinerPower, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerPreCommitDepositForPower {[func(context.Context, address.Address, miner.SectorPreCommitInfo, chain.TipSetKey) (big.Int, error) <> func(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (big.Int, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerProvingDeadline {[func(context.Context, address.Address, chain.TipSetKey) (*dline.Info, error) <> func(context.Context, address.Address, types.TipSetKey) (*dline.Info, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerRecoveries {[func(context.Context, address.Address, chain.TipSetKey) (bitfield.BitField, error) <> func(context.Context, address.Address, types.TipSetKey) (bitfield.BitField, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerSectorAllocated {[func(context.Context, address.Address, abi.SectorNumber, chain.TipSetKey) (bool, error) <> func(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (bool, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateMinerSectorCount {[func(context.Context, address.Address, chain.TipSetKey) (chain.MinerSectors, error) <> func(context.Context, address.Address, types.TipSetKey) (api.MinerSectors, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + + StateMinerSectorSize + > StateMinerSectors {[func(context.Context, address.Address, *bitfield.BitField, chain.TipSetKey) ([]*miner.SectorOnChainInfo, error) <> func(context.Context, address.Address, *bitfield.BitField, types.TipSetKey) ([]*miner.SectorOnChainInfo, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + + StateMinerWorkerAddress + > StateNetworkVersion {[func(context.Context, chain.TipSetKey) (network.Version, error) <> func(context.Context, types.TipSetKey) (network.Version, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + - StateReadState + - StateReplay + > StateSearchMsg {[func(context.Context, chain.TipSetKey, cid.Cid, abi.ChainEpoch, bool) (*chain.MsgLookup, error) <> func(context.Context, types.TipSetKey, cid.Cid, abi.ChainEpoch, bool) (*api.MsgLookup, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateSectorExpiration {[func(context.Context, address.Address, abi.SectorNumber, chain.TipSetKey) (*miner.SectorExpiration, error) <> func(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (*miner.SectorExpiration, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateSectorGetInfo {[func(context.Context, address.Address, abi.SectorNumber, chain.TipSetKey) (*miner.SectorOnChainInfo, error) <> func(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (*miner.SectorOnChainInfo, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateSectorPartition {[func(context.Context, address.Address, abi.SectorNumber, chain.TipSetKey) (*miner.SectorLocation, error) <> func(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (*miner.SectorLocation, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateSectorPreCommitInfo {[func(context.Context, address.Address, abi.SectorNumber, chain.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) <> func(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error)] base=func in type: #3 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateVMCirculatingSupplyInternal {[func(context.Context, chain.TipSetKey) (chain.CirculatingSupply, error) <> func(context.Context, types.TipSetKey) (api.CirculatingSupply, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateVerifiedClientStatus {[func(context.Context, address.Address, chain.TipSetKey) (*big.Int, error) <> func(context.Context, address.Address, types.TipSetKey) (*big.Int, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateVerifiedRegistryRootKey {[func(context.Context, chain.TipSetKey) (address.Address, error) <> func(context.Context, types.TipSetKey) (address.Address, error)] base=func in type: #1 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateVerifierStatus {[func(context.Context, address.Address, chain.TipSetKey) (*big.Int, error) <> func(context.Context, address.Address, types.TipSetKey) (*big.Int, error)] base=func in type: #2 input; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}} + > StateWaitMsg {[func(context.Context, cid.Cid, uint64, abi.ChainEpoch, bool) (*chain.MsgLookup, error) <> func(context.Context, cid.Cid, uint64, abi.ChainEpoch, bool) (*api.MsgLookup, error)] base=func out type: #0 input; nested={[*chain.MsgLookup <> *api.MsgLookup] base=pointed type; nested={[chain.MsgLookup <> api.MsgLookup] base=struct field; nested={[chain.MsgLookup <> api.MsgLookup] base=exported field type: #3 field named TipSet; nested={[chain.TipSetKey <> types.TipSetKey] base=codec marshaler implementations for codec Cbor: true != false; nested=nil}}}}} + - SyncCheckBad + - SyncCheckpoint + - SyncIncomingBlocks + - SyncMarkBad + - SyncUnmarkAllBad + - SyncUnmarkBad + - SyncValidateTipset + + UnLockWallet + + Verify + + VerifyEntry + > Version {[func(context.Context) (chain.Version, error) <> func(context.Context) (api.APIVersion, error)] base=func out type: #0 input; nested={[chain.Version <> api.APIVersion] base=struct field; nested={[chain.Version <> api.APIVersion] base=exported fields count: 2 != 3; nested=nil}}} + + WalletAddresses + - WalletDelete + > WalletExport {[func(address.Address, string) (*wallet.KeyInfo, error) <> func(context.Context, address.Address) (*types.KeyInfo, error)] base=func in type: #0 input; nested={[address.Address <> context.Context] base=type kinds: struct != interface; nested=nil}} + > WalletImport {[func(*wallet.KeyInfo) (address.Address, error) <> func(context.Context, *types.KeyInfo) (address.Address, error)] base=func in num: 1 != 2; nested=nil} + - WalletList + - WalletNew + + WalletNewAddress + > WalletSign {[func(context.Context, address.Address, []uint8, wallet.MsgMeta) (*crypto.Signature, error) <> func(context.Context, address.Address, []uint8) (*crypto.Signature, error)] base=func in num: 4 != 3; nested=nil} + + WalletState + - WalletValidateAddress + - WalletVerify + diff --git a/venus-shared/compatible-checks/api-permission.json b/venus-shared/compatible-checks/api-permission.json new file mode 100644 index 0000000000..5cfbc85f1a --- /dev/null +++ b/venus-shared/compatible-checks/api-permission.json @@ -0,0 +1,517 @@ +{ + "V0": { + "Common": { + "AuthNew": "admin", + "BeaconGetEntry": "read", + "ChainDeleteObj": "admin", + "ChainExport": "read", + "ChainGetBlock": "read", + "ChainGetBlockMessages": "read", + "ChainGetMessage": "read", + "ChainGetMessagesInTipset": "read", + "ChainGetParentMessages": "read", + "ChainGetParentReceipts": "read", + "ChainGetPath": "read", + "ChainGetRandomnessFromBeacon": "read", + "ChainGetRandomnessFromTickets": "read", + "ChainGetTipSet": "read", + "ChainGetTipSetByHeight": "read", + "ChainHasObj": "read", + "ChainHead": "read", + "ChainNotify": "read", + "ChainReadObj": "read", + "ChainSetHead": "admin", + "ChainStatObj": "read", + "ChainTipSetWeight": "read", + "GasEstimateFeeCap": "read", + "GasEstimateGasLimit": "read", + "GasEstimateGasPremium": "read", + "GasEstimateMessageGas": "read", + "MinerCreateBlock": "write", + "MinerGetBaseInfo": "read", + "MpoolBatchPush": "write", + "MpoolBatchPushMessage": "sign", + "MpoolBatchPushUntrusted": "write", + "MpoolClear": "write", + "MpoolGetConfig": "read", + "MpoolGetNonce": "read", + "MpoolPending": "read", + "MpoolPush": "write", + "MpoolPushMessage": "sign", + "MpoolPushUntrusted": "write", + "MpoolSelect": "read", + "MpoolSetConfig": "admin", + "MpoolSub": "read", + "MsigAddApprove": "sign", + "MsigAddCancel": "sign", + "MsigAddPropose": "sign", + "MsigApprove": "sign", + "MsigApproveTxnHash": "sign", + "MsigCancel": "sign", + "MsigCreate": "sign", + "MsigGetVested": "read", + "MsigPropose": "sign", + "MsigRemoveSigner": "sign", + "MsigSwapApprove": "sign", + "MsigSwapCancel": "sign", + "MsigSwapPropose": "sign", + "NetAddrsListen": "read", + "PaychAllocateLane": "sign", + "PaychAvailableFunds": "sign", + "PaychAvailableFundsByFromTo": "sign", + "PaychCollect": "sign", + "PaychGet": "sign", + "PaychGetWaitReady": "sign", + "PaychList": "read", + "PaychNewPayment": "sign", + "PaychSettle": "sign", + "PaychStatus": "read", + "PaychVoucherAdd": "write", + "PaychVoucherCheckSpendable": "read", + "PaychVoucherCheckValid": "read", + "PaychVoucherCreate": "sign", + "PaychVoucherList": "write", + "PaychVoucherSubmit": "sign", + "StateAccountKey": "read", + "StateCall": "read", + "StateCirculatingSupply": "read", + "StateDealProviderCollateralBounds": "read", + "StateGetActor": "read", + "StateGetReceipt": "read", + "StateListActors": "read", + "StateListMiners": "read", + "StateLookupID": "read", + "StateMarketBalance": "read", + "StateMarketDeals": "read", + "StateMarketParticipants": "read", + "StateMarketStorageDeal": "read", + "StateMinerActiveSectors": "read", + "StateMinerAvailableBalance": "read", + "StateMinerDeadlines": "read", + "StateMinerFaults": "read", + "StateMinerInfo": "read", + "StateMinerInitialPledgeCollateral": "read", + "StateMinerPartitions": "read", + "StateMinerPower": "read", + "StateMinerPreCommitDepositForPower": "read", + "StateMinerProvingDeadline": "read", + "StateMinerRecoveries": "read", + "StateMinerSectorAllocated": "read", + "StateMinerSectorCount": "read", + "StateMinerSectors": "read", + "StateNetworkName": "read", + "StateNetworkVersion": "read", + "StateSearchMsg": "read", + "StateSearchMsgLimited": "read", + "StateSectorExpiration": "read", + "StateSectorGetInfo": "read", + "StateSectorPartition": "read", + "StateSectorPreCommitInfo": "read", + "StateVMCirculatingSupplyInternal": "read", + "StateVerifiedClientStatus": "read", + "StateVerifiedRegistryRootKey": "read", + "StateVerifierStatus": "read", + "StateWaitMsg": "read", + "StateWaitMsgLimited": "read", + "SyncState": "read", + "SyncSubmitBlock": "write", + "Version": "read", + "WalletBalance": "read", + "WalletDefaultAddress": "write", + "WalletExport": "admin", + "WalletHas": "write", + "WalletImport": "admin", + "WalletSetDefault": "write", + "WalletSign": "sign", + "WalletSignMessage": "sign" + }, + "Extend": { + "BlockTime": "read", + "ChainGetReceipts": "read", + "ChainList": "read", + "ChainSyncHandleNewTipSet": "write", + "Concurrent": "read", + "GasBatchEstimateMessageGas": "read", + "GetActor": "read", + "GetEntry": "read", + "GetFullBlock": "read", + "GetParentStateRootActor": "read", + "HasPassword": "admin", + "ListActor": "read", + "LockWallet": "admin", + "MessageWait": "read", + "MpoolDeleteByAdress": "admin", + "MpoolPublishByAddr": "admin", + "MpoolPublishMessage": "admin", + "MpoolSelects": "read", + "NetworkConnect": "read", + "NetworkFindPeer": "read", + "NetworkFindProvidersAsync": "read", + "NetworkGetBandwidthStats": "admin", + "NetworkGetClosestPeers": "read", + "NetworkGetPeerAddresses": "admin", + "NetworkGetPeerID": "admin", + "NetworkPeers": "read", + "ProtocolParameters": "read", + "ResolveToKeyAddr": "read", + "SetConcurrent": "admin", + "SetPassword": "admin", + "StateMinerSectorSize": "read", + "StateMinerWorkerAddress": "read", + "SyncerTracker": "read", + "UnLockWallet": "admin", + "Verify": "read", + "VerifyEntry": "read", + "WalletAddresses": "admin", + "WalletNewAddress": "write", + "WalletState": "admin" + }, + "Loss": { + "AuthVerify": "read", + "ChainGetGenesis": "read", + "ChainGetNode": "read", + "ClientCalcCommP": "write", + "ClientCancelDataTransfer": "write", + "ClientCancelRetrievalDeal": "write", + "ClientDataTransferUpdates": "write", + "ClientDealPieceCID": "read", + "ClientDealSize": "read", + "ClientFindData": "read", + "ClientGenCar": "write", + "ClientGetDealInfo": "read", + "ClientGetDealStatus": "read", + "ClientGetDealUpdates": "write", + "ClientGetRetrievalUpdates": "write", + "ClientHasLocal": "write", + "ClientImport": "admin", + "ClientListDataTransfers": "write", + "ClientListDeals": "write", + "ClientListImports": "write", + "ClientListRetrievals": "write", + "ClientMinerQueryOffer": "read", + "ClientQueryAsk": "read", + "ClientRemoveImport": "admin", + "ClientRestartDataTransfer": "write", + "ClientRetrieve": "admin", + "ClientRetrieveTryRestartInsufficientFunds": "write", + "ClientRetrieveWithEvents": "admin", + "ClientStartDeal": "admin", + "ClientStatelessDeal": "write", + "Closing": "read", + "CreateBackup": "admin", + "Discover": "read", + "ID": "read", + "LogAlerts": "admin", + "LogList": "write", + "LogSetLevel": "write", + "MarketAddBalance": "sign", + "MarketGetReserved": "sign", + "MarketReleaseFunds": "sign", + "MarketReserveFunds": "sign", + "MarketWithdraw": "sign", + "MsigGetAvailableBalance": "read", + "MsigGetPending": "read", + "MsigGetVestingSchedule": "read", + "NetAgentVersion": "read", + "NetAutoNatStatus": "read", + "NetBandwidthStats": "read", + "NetBandwidthStatsByPeer": "read", + "NetBandwidthStatsByProtocol": "read", + "NetBlockAdd": "admin", + "NetBlockList": "read", + "NetBlockRemove": "admin", + "NetConnect": "write", + "NetConnectedness": "read", + "NetDisconnect": "write", + "NetFindPeer": "read", + "NetPeerInfo": "read", + "NetPeers": "read", + "NetPubsubScores": "read", + "Session": "read", + "Shutdown": "admin", + "StateAllMinerFaults": "read", + "StateChangedActors": "read", + "StateCompute": "read", + "StateDecodeParams": "read", + "StateGetRandomnessFromBeacon": "read", + "StateGetRandomnessFromTickets": "read", + "StateListMessages": "read", + "StateReadState": "read", + "StateReplay": "read", + "SyncCheckBad": "read", + "SyncCheckpoint": "admin", + "SyncIncomingBlocks": "read", + "SyncMarkBad": "admin", + "SyncUnmarkAllBad": "admin", + "SyncUnmarkBad": "admin", + "SyncValidateTipset": "read", + "WalletDelete": "admin", + "WalletList": "write", + "WalletNew": "write", + "WalletValidateAddress": "read", + "WalletVerify": "read" + }, + "Gap": {} + }, + "V1": { + "Common": { + "AuthNew": "admin", + "BeaconGetEntry": "read", + "ChainDeleteObj": "admin", + "ChainExport": "read", + "ChainGetBlock": "read", + "ChainGetBlockMessages": "read", + "ChainGetMessage": "read", + "ChainGetMessagesInTipset": "read", + "ChainGetParentMessages": "read", + "ChainGetParentReceipts": "read", + "ChainGetPath": "read", + "ChainGetTipSet": "read", + "ChainGetTipSetAfterHeight": "read", + "ChainGetTipSetByHeight": "read", + "ChainHasObj": "read", + "ChainHead": "read", + "ChainNotify": "read", + "ChainReadObj": "read", + "ChainSetHead": "admin", + "ChainStatObj": "read", + "ChainTipSetWeight": "read", + "GasEstimateFeeCap": "read", + "GasEstimateGasLimit": "read", + "GasEstimateGasPremium": "read", + "GasEstimateMessageGas": "read", + "MinerCreateBlock": "write", + "MinerGetBaseInfo": "read", + "MpoolBatchPush": "write", + "MpoolBatchPushMessage": "sign", + "MpoolBatchPushUntrusted": "write", + "MpoolCheckMessages": "read", + "MpoolCheckPendingMessages": "read", + "MpoolCheckReplaceMessages": "read", + "MpoolClear": "write", + "MpoolGetConfig": "read", + "MpoolGetNonce": "read", + "MpoolPending": "read", + "MpoolPush": "write", + "MpoolPushMessage": "sign", + "MpoolPushUntrusted": "write", + "MpoolSelect": "read", + "MpoolSetConfig": "admin", + "MpoolSub": "read", + "MsigAddApprove": "sign", + "MsigAddCancel": "sign", + "MsigAddPropose": "sign", + "MsigApprove": "sign", + "MsigApproveTxnHash": "sign", + "MsigCancel": "sign", + "MsigCreate": "sign", + "MsigGetVested": "read", + "MsigPropose": "sign", + "MsigRemoveSigner": "sign", + "MsigSwapApprove": "sign", + "MsigSwapCancel": "sign", + "MsigSwapPropose": "sign", + "NetAddrsListen": "read", + "PaychAllocateLane": "sign", + "PaychAvailableFunds": "sign", + "PaychAvailableFundsByFromTo": "sign", + "PaychCollect": "sign", + "PaychGet": "sign", + "PaychGetWaitReady": "sign", + "PaychList": "read", + "PaychNewPayment": "sign", + "PaychSettle": "sign", + "PaychStatus": "read", + "PaychVoucherAdd": "write", + "PaychVoucherCheckSpendable": "read", + "PaychVoucherCheckValid": "read", + "PaychVoucherCreate": "sign", + "PaychVoucherList": "write", + "PaychVoucherSubmit": "sign", + "StateAccountKey": "read", + "StateCall": "read", + "StateCirculatingSupply": "read", + "StateDealProviderCollateralBounds": "read", + "StateGetActor": "read", + "StateGetRandomnessFromBeacon": "read", + "StateGetRandomnessFromTickets": "read", + "StateListActors": "read", + "StateListMiners": "read", + "StateLookupID": "read", + "StateMarketBalance": "read", + "StateMarketDeals": "read", + "StateMarketParticipants": "read", + "StateMarketStorageDeal": "read", + "StateMinerActiveSectors": "read", + "StateMinerAvailableBalance": "read", + "StateMinerDeadlines": "read", + "StateMinerFaults": "read", + "StateMinerInfo": "read", + "StateMinerInitialPledgeCollateral": "read", + "StateMinerPartitions": "read", + "StateMinerPower": "read", + "StateMinerPreCommitDepositForPower": "read", + "StateMinerProvingDeadline": "read", + "StateMinerRecoveries": "read", + "StateMinerSectorAllocated": "read", + "StateMinerSectorCount": "read", + "StateMinerSectors": "read", + "StateNetworkName": "read", + "StateNetworkVersion": "read", + "StateSearchMsg": "read", + "StateSectorExpiration": "read", + "StateSectorGetInfo": "read", + "StateSectorPartition": "read", + "StateSectorPreCommitInfo": "read", + "StateVMCirculatingSupplyInternal": "read", + "StateVerifiedClientStatus": "read", + "StateVerifiedRegistryRootKey": "read", + "StateVerifierStatus": "read", + "StateWaitMsg": "read", + "SyncState": "read", + "SyncSubmitBlock": "write", + "Version": "read", + "WalletBalance": "read", + "WalletDefaultAddress": "write", + "WalletExport": "admin", + "WalletHas": "write", + "WalletImport": "admin", + "WalletSetDefault": "write", + "WalletSign": "sign", + "WalletSignMessage": "sign" + }, + "Extend": { + "BlockTime": "read", + "ChainGetRandomnessFromBeacon": "read", + "ChainGetRandomnessFromTickets": "read", + "ChainGetReceipts": "read", + "ChainList": "read", + "ChainSyncHandleNewTipSet": "write", + "Concurrent": "read", + "GasBatchEstimateMessageGas": "read", + "GetActor": "read", + "GetEntry": "read", + "GetFullBlock": "read", + "GetParentStateRootActor": "read", + "HasPassword": "admin", + "ListActor": "read", + "LockWallet": "admin", + "MessageWait": "read", + "MpoolDeleteByAdress": "admin", + "MpoolPublishByAddr": "write", + "MpoolPublishMessage": "write", + "MpoolSelects": "read", + "NetworkConnect": "read", + "NetworkFindPeer": "read", + "NetworkFindProvidersAsync": "read", + "NetworkGetBandwidthStats": "admin", + "NetworkGetClosestPeers": "read", + "NetworkGetPeerAddresses": "admin", + "NetworkGetPeerID": "admin", + "NetworkPeers": "read", + "ProtocolParameters": "read", + "ResolveToKeyAddr": "read", + "SetConcurrent": "admin", + "SetPassword": "admin", + "StateMinerSectorSize": "read", + "StateMinerWorkerAddress": "read", + "SyncerTracker": "read", + "UnLockWallet": "admin", + "Verify": "read", + "VerifyEntry": "read", + "WalletAddresses": "admin", + "WalletNewAddress": "write", + "WalletState": "admin" + }, + "Loss": { + "AuthVerify": "read", + "ChainBlockstoreInfo": "read", + "ChainCheckBlockstore": "admin", + "ChainGetGenesis": "read", + "ChainGetNode": "read", + "ClientCalcCommP": "write", + "ClientCancelDataTransfer": "write", + "ClientCancelRetrievalDeal": "write", + "ClientDataTransferUpdates": "write", + "ClientDealPieceCID": "read", + "ClientDealSize": "read", + "ClientExport": "admin", + "ClientFindData": "read", + "ClientGenCar": "write", + "ClientGetDealInfo": "read", + "ClientGetDealStatus": "read", + "ClientGetDealUpdates": "write", + "ClientGetRetrievalUpdates": "write", + "ClientHasLocal": "write", + "ClientImport": "admin", + "ClientListDataTransfers": "write", + "ClientListDeals": "write", + "ClientListImports": "write", + "ClientListRetrievals": "write", + "ClientMinerQueryOffer": "read", + "ClientQueryAsk": "read", + "ClientRemoveImport": "admin", + "ClientRestartDataTransfer": "write", + "ClientRetrieve": "admin", + "ClientRetrieveTryRestartInsufficientFunds": "write", + "ClientRetrieveWait": "admin", + "ClientStartDeal": "admin", + "ClientStatelessDeal": "write", + "Closing": "read", + "CreateBackup": "admin", + "Discover": "read", + "ID": "read", + "LogAlerts": "admin", + "LogList": "write", + "LogSetLevel": "write", + "MarketAddBalance": "sign", + "MarketGetReserved": "sign", + "MarketReleaseFunds": "sign", + "MarketReserveFunds": "sign", + "MarketWithdraw": "sign", + "MsigCancelTxnHash": "sign", + "MsigGetAvailableBalance": "read", + "MsigGetPending": "read", + "MsigGetVestingSchedule": "read", + "NetAgentVersion": "read", + "NetAutoNatStatus": "read", + "NetBandwidthStats": "read", + "NetBandwidthStatsByPeer": "read", + "NetBandwidthStatsByProtocol": "read", + "NetBlockAdd": "admin", + "NetBlockList": "read", + "NetBlockRemove": "admin", + "NetConnect": "write", + "NetConnectedness": "read", + "NetDisconnect": "write", + "NetFindPeer": "read", + "NetPeerInfo": "read", + "NetPeers": "read", + "NetPubsubScores": "read", + "NodeStatus": "read", + "Session": "read", + "Shutdown": "admin", + "StateAllMinerFaults": "read", + "StateChangedActors": "read", + "StateCompute": "read", + "StateDecodeParams": "read", + "StateEncodeParams": "read", + "StateListMessages": "read", + "StateReadState": "read", + "StateReplay": "read", + "SyncCheckBad": "read", + "SyncCheckpoint": "admin", + "SyncIncomingBlocks": "read", + "SyncMarkBad": "admin", + "SyncUnmarkAllBad": "admin", + "SyncUnmarkBad": "admin", + "SyncValidateTipset": "read", + "WalletDelete": "admin", + "WalletList": "write", + "WalletNew": "write", + "WalletValidateAddress": "read", + "WalletVerify": "read" + }, + "Gap": {} + } +} \ No newline at end of file diff --git a/venus-shared/libp2p/exchange/cbor_gen.go b/venus-shared/libp2p/exchange/cbor_gen.go new file mode 100644 index 0000000000..829e6f3d60 --- /dev/null +++ b/venus-shared/libp2p/exchange/cbor_gen.go @@ -0,0 +1,649 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package exchange + +import ( + "fmt" + "io" + "math" + "sort" + + chain "github.com/filecoin-project/venus/venus-shared/chain" + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = math.E +var _ = sort.Sort + +var lengthBufRequest = []byte{131} + +func (t *Request) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufRequest); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Head ([]cid.Cid) (slice) + if len(t.Head) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Head was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Head))); err != nil { + return err + } + for _, v := range t.Head { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.Head: %w", err) + } + } + + // t.Length (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Length)); err != nil { + return err + } + + // t.Options (uint64) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Options)); err != nil { + return err + } + + return nil +} + +func (t *Request) UnmarshalCBOR(r io.Reader) error { + *t = Request{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Head ([]cid.Cid) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Head: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Head = make([]cid.Cid, extra) + } + + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.Head failed: %w", err) + } + t.Head[i] = c + } + + // t.Length (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Length = uint64(extra) + + } + // t.Options (uint64) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Options = uint64(extra) + + } + return nil +} + +var lengthBufResponse = []byte{131} + +func (t *Response) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufResponse); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Status (exchange.status) (uint64) + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.Status)); err != nil { + return err + } + + // t.ErrorMessage (string) (string) + if len(t.ErrorMessage) > cbg.MaxLength { + return xerrors.Errorf("Value in field t.ErrorMessage was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len(t.ErrorMessage))); err != nil { + return err + } + if _, err := io.WriteString(w, string(t.ErrorMessage)); err != nil { + return err + } + + // t.Chain ([]*exchange.BSTipSet) (slice) + if len(t.Chain) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Chain was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Chain))); err != nil { + return err + } + for _, v := range t.Chain { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + return nil +} + +func (t *Response) UnmarshalCBOR(r io.Reader) error { + *t = Response{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Status (exchange.status) (uint64) + + { + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajUnsignedInt { + return fmt.Errorf("wrong type for uint64 field") + } + t.Status = status(extra) + + } + // t.ErrorMessage (string) (string) + + { + sval, err := cbg.ReadStringBuf(br, scratch) + if err != nil { + return err + } + + t.ErrorMessage = string(sval) + } + // t.Chain ([]*exchange.BSTipSet) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Chain: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Chain = make([]*BSTipSet, extra) + } + + for i := 0; i < int(extra); i++ { + + var v BSTipSet + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Chain[i] = &v + } + + return nil +} + +var lengthBufCompactedMessages = []byte{132} + +func (t *CompactedMessages) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufCompactedMessages); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Bls ([]*chain.Message) (slice) + if len(t.Bls) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Bls was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Bls))); err != nil { + return err + } + for _, v := range t.Bls { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.BlsIncludes ([][]uint64) (slice) + if len(t.BlsIncludes) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.BlsIncludes was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.BlsIncludes))); err != nil { + return err + } + for _, v := range t.BlsIncludes { + if len(v) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field v was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(v))); err != nil { + return err + } + for _, v := range v { + if err := cbg.CborWriteHeader(w, cbg.MajUnsignedInt, uint64(v)); err != nil { + return err + } + } + } + + // t.Secpk ([]*chain.SignedMessage) (slice) + if len(t.Secpk) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Secpk was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Secpk))); err != nil { + return err + } + for _, v := range t.Secpk { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.SecpkIncludes ([][]uint64) (slice) + if len(t.SecpkIncludes) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.SecpkIncludes was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.SecpkIncludes))); err != nil { + return err + } + for _, v := range t.SecpkIncludes { + if len(v) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field v was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(v))); err != nil { + return err + } + for _, v := range v { + if err := cbg.CborWriteHeader(w, cbg.MajUnsignedInt, uint64(v)); err != nil { + return err + } + } + } + return nil +} + +func (t *CompactedMessages) UnmarshalCBOR(r io.Reader) error { + *t = CompactedMessages{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 4 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Bls ([]*chain.Message) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Bls: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Bls = make([]*chain.Message, extra) + } + + for i := 0; i < int(extra); i++ { + + var v chain.Message + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Bls[i] = &v + } + + // t.BlsIncludes ([][]uint64) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.BlsIncludes: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.BlsIncludes = make([][]uint64, extra) + } + + for i := 0; i < int(extra); i++ { + { + var maj byte + var extra uint64 + var err error + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.BlsIncludes[i]: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.BlsIncludes[i] = make([]uint64, extra) + } + + for j := 0; j < int(extra); j++ { + + maj, val, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return xerrors.Errorf("failed to read uint64 for t.BlsIncludes[i] slice: %w", err) + } + + if maj != cbg.MajUnsignedInt { + return xerrors.Errorf("value read for array t.BlsIncludes[i] was not a uint, instead got %d", maj) + } + + t.BlsIncludes[i][j] = uint64(val) + } + + } + } + + // t.Secpk ([]*chain.SignedMessage) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Secpk: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Secpk = make([]*chain.SignedMessage, extra) + } + + for i := 0; i < int(extra); i++ { + + var v chain.SignedMessage + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Secpk[i] = &v + } + + // t.SecpkIncludes ([][]uint64) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.SecpkIncludes: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.SecpkIncludes = make([][]uint64, extra) + } + + for i := 0; i < int(extra); i++ { + { + var maj byte + var extra uint64 + var err error + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.SecpkIncludes[i]: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.SecpkIncludes[i] = make([]uint64, extra) + } + + for j := 0; j < int(extra); j++ { + + maj, val, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return xerrors.Errorf("failed to read uint64 for t.SecpkIncludes[i] slice: %w", err) + } + + if maj != cbg.MajUnsignedInt { + return xerrors.Errorf("value read for array t.SecpkIncludes[i] was not a uint, instead got %d", maj) + } + + t.SecpkIncludes[i][j] = uint64(val) + } + + } + } + + return nil +} + +var lengthBufBSTipSet = []byte{130} + +func (t *BSTipSet) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufBSTipSet); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Blocks ([]*chain.BlockHeader) (slice) + if len(t.Blocks) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Blocks was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Blocks))); err != nil { + return err + } + for _, v := range t.Blocks { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + + // t.Messages (exchange.CompactedMessages) (struct) + if err := t.Messages.MarshalCBOR(w); err != nil { + return err + } + return nil +} + +func (t *BSTipSet) UnmarshalCBOR(r io.Reader) error { + *t = BSTipSet{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Blocks ([]*chain.BlockHeader) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Blocks: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Blocks = make([]*chain.BlockHeader, extra) + } + + for i := 0; i < int(extra); i++ { + + var v chain.BlockHeader + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Blocks[i] = &v + } + + // t.Messages (exchange.CompactedMessages) (struct) + + { + + b, err := br.ReadByte() + if err != nil { + return err + } + if b != cbg.CborNull[0] { + if err := br.UnreadByte(); err != nil { + return err + } + t.Messages = new(CompactedMessages) + if err := t.Messages.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Messages pointer: %w", err) + } + } + + } + return nil +} diff --git a/venus-shared/libp2p/exchange/client.go b/venus-shared/libp2p/exchange/client.go new file mode 100644 index 0000000000..e09a20c87f --- /dev/null +++ b/venus-shared/libp2p/exchange/client.go @@ -0,0 +1,35 @@ +package exchange + +import ( + "context" + + "github.com/libp2p/go-libp2p-core/peer" + + "github.com/filecoin-project/venus/venus-shared/chain" +) + +// Client is the requesting side of the ChainExchange protocol. It acts as +// a proxy for other components to request chain data from peers. It is chiefly +// used by the Syncer. +type Client interface { + // GetBlocks fetches block headers from the network, from the provided + // tipset *backwards*, returning as many tipsets as the count parameter, + // or less. + GetBlocks(ctx context.Context, tsk chain.TipSetKey, count int) ([]*chain.TipSet, error) + + // GetChainMessages fetches messages from the network, starting from the first provided tipset + // and returning messages from as many tipsets as requested or less. + GetChainMessages(ctx context.Context, tipsets []*chain.TipSet) ([]*CompactedMessages, error) + + // GetFullTipSet fetches a full tipset from a given peer. If successful, + // the fetched object contains block headers and all messages in full form. + GetFullTipSet(ctx context.Context, peer peer.ID, tsk chain.TipSetKey) (*chain.FullTipSet, error) + + // AddPeer adds a peer to the pool of peers that the Client requests + // data from. + AddPeer(ctx context.Context, peer peer.ID) + + // RemovePeer removes a peer from the pool of peers that the Client + // requests data from. + RemovePeer(ctx context.Context, peer peer.ID) +} diff --git a/venus-shared/libp2p/exchange/exchange.go b/venus-shared/libp2p/exchange/exchange.go new file mode 100644 index 0000000000..cd42eb162c --- /dev/null +++ b/venus-shared/libp2p/exchange/exchange.go @@ -0,0 +1,151 @@ +package exchange + +import ( + "fmt" + + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/policy" + "github.com/filecoin-project/venus/venus-shared/chain" +) + +const ( + // BlockSyncProtocolID is the protocol ID of the former blocksync protocol. + // Deprecated. + BlockSyncProtocolID = "/fil/sync/blk/0.0.1" + + // ChainExchangeProtocolID is the protocol ID of the chain exchange + // protocol. + ChainExchangeProtocolID = "/fil/chain/xchg/0.0.1" +) + +// FIXME: Bumped from original 800 to this to accommodate `syncFork()` +// use of `GetBlocks()`. It seems the expectation of that API is to +// fetch any amount of blocks leaving it to the internal logic here +// to partition and reassemble the requests if they go above the maximum. +// (Also as a consequence of this temporarily removing the `const` +// qualifier to avoid "const initializer [...] is not a constant" error.) +var MaxRequestLength = uint64(policy.ChainFinality) + +// FIXME: Rename. Make private. +type Request struct { + // List of ordered CIDs comprising a `TipSetKey` from where to start + // fetching backwards. + // FIXME: Consider using `TipSetKey` now (introduced after the creation + // of this protocol) instead of converting back and forth. + Head []cid.Cid + // Number of block sets to fetch from `Head` (inclusive, should always + // be in the range `[1, MaxRequestLength]`). + Length uint64 + // Request options, see `Options` type for more details. Compressed + // in a single `uint64` to save space. + Options uint64 +} + +// Request options. When fetching the chain segment we can fetch +// either block headers, messages, or both. +const ( + Headers = 1 << iota + Messages +) + +type Options struct { + IncludeHeaders bool + IncludeMessages bool +} + +func (opt *Options) IsEmpty() bool { + return !opt.IncludeHeaders && !opt.IncludeMessages +} + +func (opt *Options) ToBits() uint64 { + var bits uint64 + if opt.IncludeHeaders { + bits |= Headers + } + + if opt.IncludeMessages { + bits |= Messages + } + return bits +} + +func ParseOptions(optfield uint64) *Options { + return &Options{ + IncludeHeaders: optfield&(uint64(Headers)) != 0, + IncludeMessages: optfield&(uint64(Messages)) != 0, + } +} + +// FIXME: Rename. Make private. +type Response struct { + Status status + // String that complements the error status when converting to an + // internal error (see `statusToError()`). + ErrorMessage string + + Chain []*BSTipSet +} + +type status uint64 + +const ( + Ok status = 0 + // We could not fetch all blocks requested (but at least we returned + // the `Head` requested). Not considered an error. + Partial = 101 + + // Errors + NotFound = 201 + GoAway = 202 + InternalError = 203 + BadRequest = 204 +) + +// Convert status to internal error. +func (res *Response) StatusToError() error { + switch res.Status { + case Ok, Partial: + return nil + // FIXME: Consider if we want to not process `Partial` responses + // and return an error instead. + case NotFound: + return fmt.Errorf("not found") + case GoAway: + return fmt.Errorf("not handling 'go away' chainxchg responses yet") + case InternalError: + return fmt.Errorf("block sync peer errored: %s", res.ErrorMessage) + case BadRequest: + return fmt.Errorf("block sync request invalid: %s", res.ErrorMessage) + default: + return fmt.Errorf("unrecognized response code: %d", res.Status) + } +} + +// FIXME: Rename. +type BSTipSet struct { + // List of blocks belonging to a single tipset to which the + // `CompactedMessages` are linked. + Blocks []*chain.BlockHeader + Messages *CompactedMessages +} + +// All messages of a single tipset compacted together instead +// of grouped by block to save space, since there are normally +// many repeated messages per tipset in different blocks. +// +// `BlsIncludes`/`SecpkIncludes` matches `Bls`/`Secpk` messages +// to blocks in the tipsets with the format: +// `BlsIncludes[BI][MI]` +// * BI: block index in the tipset. +// * MI: message index in `Bls` list +// +// FIXME: The logic to decompress this structure should belong +// to itself, not to the consumer. +type CompactedMessages struct { + Bls []*chain.Message + BlsIncludes [][]uint64 + + Secpk []*chain.SignedMessage + SecpkIncludes [][]uint64 +} diff --git a/venus-shared/libp2p/hello/cbor_gen.go b/venus-shared/libp2p/hello/cbor_gen.go new file mode 100644 index 0000000000..b31ba9c027 --- /dev/null +++ b/venus-shared/libp2p/hello/cbor_gen.go @@ -0,0 +1,275 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package hello + +import ( + "fmt" + "io" + "math" + "sort" + + abi "github.com/filecoin-project/go-state-types/abi" + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = math.E +var _ = sort.Sort + +var lengthBufGreetingMessage = []byte{132} + +func (t *GreetingMessage) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufGreetingMessage); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.HeaviestTipSet ([]cid.Cid) (slice) + if len(t.HeaviestTipSet) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.HeaviestTipSet was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.HeaviestTipSet))); err != nil { + return err + } + for _, v := range t.HeaviestTipSet { + if err := cbg.WriteCidBuf(scratch, w, v); err != nil { + return xerrors.Errorf("failed writing cid field t.HeaviestTipSet: %w", err) + } + } + + // t.HeaviestTipSetHeight (abi.ChainEpoch) (int64) + if t.HeaviestTipSetHeight >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.HeaviestTipSetHeight)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.HeaviestTipSetHeight-1)); err != nil { + return err + } + } + + // t.HeaviestTipSetWeight (big.Int) (struct) + if err := t.HeaviestTipSetWeight.MarshalCBOR(w); err != nil { + return err + } + + // t.GenesisHash (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.GenesisHash); err != nil { + return xerrors.Errorf("failed to write cid field t.GenesisHash: %w", err) + } + + return nil +} + +func (t *GreetingMessage) UnmarshalCBOR(r io.Reader) error { + *t = GreetingMessage{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 4 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.HeaviestTipSet ([]cid.Cid) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.HeaviestTipSet: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.HeaviestTipSet = make([]cid.Cid, extra) + } + + for i := 0; i < int(extra); i++ { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("reading cid field t.HeaviestTipSet failed: %w", err) + } + t.HeaviestTipSet[i] = c + } + + // t.HeaviestTipSetHeight (abi.ChainEpoch) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.HeaviestTipSetHeight = abi.ChainEpoch(extraI) + } + // t.HeaviestTipSetWeight (big.Int) (struct) + + { + + if err := t.HeaviestTipSetWeight.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.HeaviestTipSetWeight: %w", err) + } + + } + // t.GenesisHash (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.GenesisHash: %w", err) + } + + t.GenesisHash = c + + } + return nil +} + +var lengthBufLatencyMessage = []byte{130} + +func (t *LatencyMessage) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufLatencyMessage); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.TArrival (int64) (int64) + if t.TArrival >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.TArrival)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.TArrival-1)); err != nil { + return err + } + } + + // t.TSent (int64) (int64) + if t.TSent >= 0 { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajUnsignedInt, uint64(t.TSent)); err != nil { + return err + } + } else { + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajNegativeInt, uint64(-t.TSent-1)); err != nil { + return err + } + } + return nil +} + +func (t *LatencyMessage) UnmarshalCBOR(r io.Reader) error { + *t = LatencyMessage{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 2 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.TArrival (int64) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.TArrival = int64(extraI) + } + // t.TSent (int64) (int64) + { + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + var extraI int64 + if err != nil { + return err + } + switch maj { + case cbg.MajUnsignedInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 positive overflow") + } + case cbg.MajNegativeInt: + extraI = int64(extra) + if extraI < 0 { + return fmt.Errorf("int64 negative oveflow") + } + extraI = -1 - extraI + default: + return fmt.Errorf("wrong type for int64 field: %d", maj) + } + + t.TSent = int64(extraI) + } + return nil +} diff --git a/venus-shared/libp2p/hello/hello.go b/venus-shared/libp2p/hello/hello.go new file mode 100644 index 0000000000..e62af590f5 --- /dev/null +++ b/venus-shared/libp2p/hello/hello.go @@ -0,0 +1,28 @@ +package hello + +import ( + "fmt" + + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/ipfs/go-cid" +) + +var ErrBadGenesis = fmt.Errorf("bad genesis block") + +const ProtocolID = "/fil/hello/1.0.0" + +// GreetingMessage is the data structure of a single message in the hello protocol. +type GreetingMessage struct { + HeaviestTipSet []cid.Cid + HeaviestTipSetHeight abi.ChainEpoch + HeaviestTipSetWeight big.Int + GenesisHash cid.Cid +} + +// LatencyMessage is written in response to a hello message for measuring peer +// latency. +type LatencyMessage struct { + TArrival int64 + TSent int64 +} diff --git a/venus-shared/libp2p/hello/hello_test.go b/venus-shared/libp2p/hello/hello_test.go new file mode 100644 index 0000000000..844048fc64 --- /dev/null +++ b/venus-shared/libp2p/hello/hello_test.go @@ -0,0 +1,81 @@ +package hello + +import ( + "bytes" + "testing" + + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" + + "github.com/filecoin-project/go-state-types/big" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/filecoin-project/venus/venus-shared/testutil" +) + +func TestGreetingMessage(t *testing.T) { + tf.UnitTest(t) + var buf bytes.Buffer + sliceLen := 5 + + for i := 0; i < 32; i++ { + var src, dst GreetingMessage + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst, "empty values") + }, + + ProvideOpts: []interface{}{ + testutil.WithSliceLen(sliceLen), + testutil.PositiveBigProvider(), + }, + + Provided: func() { + require.Len(t, src.HeaviestTipSet, sliceLen, "HeaviestTipSet length") + require.True(t, src.HeaviestTipSetWeight.GreaterThan(big.Zero()), "positive HeaviestTipSetWeight") + require.NotEqual(t, src.GenesisHash, cid.Undef, "GenesisHash") + }, + + Finished: func() { + require.Equal(t, src, dst, "from src to dst through cbor") + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} + +func TestLatencyMessage(t *testing.T) { + tf.UnitTest(t) + var buf bytes.Buffer + + for i := 0; i < 32; i++ { + var src, dst LatencyMessage + + opt := testutil.CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, dst, "empty values") + }, + + ProvideOpts: []interface{}{ + testutil.IntRangedProvider(100, 200), + }, + + Provided: func() { + require.GreaterOrEqual(t, src.TArrival, int64(100), "LatencyMessage.TArrival min") + require.Less(t, src.TArrival, int64(200), "LatencyMessage.TArrival max") + + require.GreaterOrEqual(t, src.TSent, int64(100), "LatencyMessage.TSent min") + require.Less(t, src.TSent, int64(200), "LatencyMessage.TSent max") + }, + + Finished: func() { + require.Equal(t, src, dst, "from src to dst through cbor") + }, + } + + testutil.CborErBasicTest(t, &src, &dst, opt) + } +} diff --git a/venus-shared/libp2p/net/net.go b/venus-shared/libp2p/net/net.go new file mode 100644 index 0000000000..92d0adbec5 --- /dev/null +++ b/venus-shared/libp2p/net/net.go @@ -0,0 +1,53 @@ +package net + +import "github.com/libp2p/go-libp2p-core/peer" + +// ConnectionResult represents the result of an attempted connection from the +// Connect method. +type ConnectionResult struct { + PeerID peer.ID + Err error +} + +// SwarmConnInfo represents details about a single swarm connection. +type SwarmConnInfo struct { + Addr string + Peer string + Latency string + Muxer string + Streams []SwarmStreamInfo +} + +// SwarmStreamInfo represents details about a single swarm stream. +type SwarmStreamInfo struct { + Protocol string +} + +func (ci *SwarmConnInfo) Less(i, j int) bool { + return ci.Streams[i].Protocol < ci.Streams[j].Protocol +} + +func (ci *SwarmConnInfo) Len() int { + return len(ci.Streams) +} + +func (ci *SwarmConnInfo) Swap(i, j int) { + ci.Streams[i], ci.Streams[j] = ci.Streams[j], ci.Streams[i] +} + +// SwarmConnInfos represent details about a list of swarm connections. +type SwarmConnInfos struct { + Peers []SwarmConnInfo +} + +func (ci SwarmConnInfos) Less(i, j int) bool { + return ci.Peers[i].Addr < ci.Peers[j].Addr +} + +func (ci SwarmConnInfos) Len() int { + return len(ci.Peers) +} + +func (ci SwarmConnInfos) Swap(i, j int) { + ci.Peers[i], ci.Peers[j] = ci.Peers[j], ci.Peers[i] +} diff --git a/venus-shared/libp2p/peer_mgr.go b/venus-shared/libp2p/peer_mgr.go new file mode 100644 index 0000000000..7fd47f589e --- /dev/null +++ b/venus-shared/libp2p/peer_mgr.go @@ -0,0 +1,27 @@ +package libp2p + +import ( + "context" + "time" + + "github.com/libp2p/go-libp2p-core/peer" +) + +type FilPeerEvtType int + +const ( + AddFilPeerEvt FilPeerEvtType = iota + RemoveFilPeerEvt +) + +type FilPeerEvent struct { + Type FilPeerEvtType + ID peer.ID +} + +type PeerManager interface { + AddFilecoinPeer(ctx context.Context, p peer.ID) + GetPeerLatency(ctx context.Context, p peer.ID) (time.Duration, bool) + SetPeerLatency(ctx context.Context, p peer.ID, latency time.Duration) + Disconnect(ctx context.Context, p peer.ID) +} diff --git a/venus-shared/localstore/chain.go b/venus-shared/localstore/chain.go new file mode 100644 index 0000000000..7e668cbc2d --- /dev/null +++ b/venus-shared/localstore/chain.go @@ -0,0 +1,32 @@ +package localstore + +import ( + "context" + + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" +) + +type TipSetLoader interface { + GetTipSet(context.Context, chain.TipSetKey) (*chain.TipSet, error) +} + +type MessageLoader interface { + ReadMsgMetaCids(ctx context.Context, mmc cid.Cid) ([]cid.Cid, []cid.Cid, error) + + LoadMessagesFromCids(ctx context.Context, cids []cid.Cid) ([]*chain.Message, error) + LoadSignedMessagesFromCids(ctx context.Context, cids []cid.Cid) ([]*chain.SignedMessage, error) +} + +type ChainLoader interface { + TipSetLoader + MessageLoader +} + +type FullTipSetLoader interface { + LoadFullTipSet(ctx context.Context, tsk chain.TipSetKey) (*chain.FullTipSet, error) +} + +type FullTipSetStorer interface { + StoreFullTipSet(ctx context.Context, fb *chain.FullTipSet) error +} diff --git a/venus-shared/logging/logger.go b/venus-shared/logging/logger.go new file mode 100644 index 0000000000..38fccea19c --- /dev/null +++ b/venus-shared/logging/logger.go @@ -0,0 +1,35 @@ +package logging + +import ( + "context" + + logging "github.com/ipfs/go-log" + "go.uber.org/zap" +) + +type contextKey string + +var ctxKey contextKey = "logger" + +type ( + EventLogger = logging.ZapEventLogger + TaggedLogger = zap.SugaredLogger +) + +var New = logging.Logger + +func ContextWithLogger(parent context.Context, l *TaggedLogger) context.Context { + return context.WithValue(parent, ctxKey, l) +} + +func LoggerFromContext(ctx context.Context, fallback *EventLogger) *TaggedLogger { + val := ctx.Value(ctxKey) + if val != nil { + l, ok := val.(*TaggedLogger) + if ok && l != nil { + return l + } + } + + return &fallback.SugaredLogger +} diff --git a/venus-shared/messagepool/checkstatuscode_string.go b/venus-shared/messagepool/checkstatuscode_string.go new file mode 100644 index 0000000000..bb009d30fd --- /dev/null +++ b/venus-shared/messagepool/checkstatuscode_string.go @@ -0,0 +1,35 @@ +// Code generated by "stringer -type=CheckStatusCode -trimprefix=CheckStatus"; DO NOT EDIT. + +package messagepool + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[CheckStatusMessageSerialize-1] + _ = x[CheckStatusMessageSize-2] + _ = x[CheckStatusMessageValidity-3] + _ = x[CheckStatusMessageMinGas-4] + _ = x[CheckStatusMessageMinBaseFee-5] + _ = x[CheckStatusMessageBaseFee-6] + _ = x[CheckStatusMessageBaseFeeLowerBound-7] + _ = x[CheckStatusMessageBaseFeeUpperBound-8] + _ = x[CheckStatusMessageGetStateNonce-9] + _ = x[CheckStatusMessageNonce-10] + _ = x[CheckStatusMessageGetStateBalance-11] + _ = x[CheckStatusMessageBalance-12] +} + +const _CheckStatusCode_name = "MessageSerializeMessageSizeMessageValidityMessageMinGasMessageMinBaseFeeMessageBaseFeeMessageBaseFeeLowerBoundMessageBaseFeeUpperBoundMessageGetStateNonceMessageNonceMessageGetStateBalanceMessageBalance" + +var _CheckStatusCode_index = [...]uint8{0, 16, 27, 42, 55, 72, 86, 110, 134, 154, 166, 188, 202} + +func (i CheckStatusCode) String() string { + i -= 1 + if i < 0 || i >= CheckStatusCode(len(_CheckStatusCode_index)-1) { + return "CheckStatusCode(" + strconv.FormatInt(int64(i+1), 10) + ")" + } + return _CheckStatusCode_name[_CheckStatusCode_index[i]:_CheckStatusCode_index[i+1]] +} diff --git a/venus-shared/messagepool/config.go b/venus-shared/messagepool/config.go new file mode 100644 index 0000000000..8061b17ab9 --- /dev/null +++ b/venus-shared/messagepool/config.go @@ -0,0 +1,16 @@ +package messagepool + +import ( + "time" + + "github.com/filecoin-project/go-address" +) + +type MpoolConfig struct { + PriorityAddrs []address.Address + SizeLimitHigh int + SizeLimitLow int + ReplaceByFeeRatio float64 + PruneCooldown time.Duration + GasLimitOverestimation float64 +} diff --git a/venus-shared/messagepool/mpool.go b/venus-shared/messagepool/mpool.go new file mode 100644 index 0000000000..c34958e666 --- /dev/null +++ b/venus-shared/messagepool/mpool.go @@ -0,0 +1,55 @@ +package messagepool + +import ( + "github.com/filecoin-project/venus/venus-shared/chain" + "github.com/ipfs/go-cid" +) + +type CheckStatusCode int + +//go:generate go run golang.org/x/tools/cmd/stringer -type=CheckStatusCode -trimprefix=CheckStatus +const ( + _ CheckStatusCode = iota + // Message Checks + CheckStatusMessageSerialize + CheckStatusMessageSize + CheckStatusMessageValidity + CheckStatusMessageMinGas + CheckStatusMessageMinBaseFee + CheckStatusMessageBaseFee + CheckStatusMessageBaseFeeLowerBound + CheckStatusMessageBaseFeeUpperBound + CheckStatusMessageGetStateNonce + CheckStatusMessageNonce + CheckStatusMessageGetStateBalance + CheckStatusMessageBalance +) + +type CheckStatus struct { + Code CheckStatusCode + OK bool + Err string + Hint map[string]interface{} +} + +type MessageCheckStatus struct { + Cid cid.Cid + CheckStatus +} + +type MessagePrototype struct { + Message chain.Message + ValidNonce bool +} + +type MpoolChange int + +const ( + MpoolAdd MpoolChange = iota + MpoolRemove +) + +type MpoolUpdate struct { + Type MpoolChange + Message *chain.SignedMessage +} diff --git a/venus-shared/paych/cbor_gen.go b/venus-shared/paych/cbor_gen.go new file mode 100644 index 0000000000..3afd90051d --- /dev/null +++ b/venus-shared/paych/cbor_gen.go @@ -0,0 +1,131 @@ +// Code generated by github.com/whyrusleeping/cbor-gen. DO NOT EDIT. + +package paych + +import ( + "fmt" + "io" + "math" + "sort" + + paych "github.com/filecoin-project/specs-actors/actors/builtin/paych" + cid "github.com/ipfs/go-cid" + cbg "github.com/whyrusleeping/cbor-gen" + xerrors "golang.org/x/xerrors" +) + +var _ = xerrors.Errorf +var _ = cid.Undef +var _ = math.E +var _ = sort.Sort + +var lengthBufPaymentInfo = []byte{131} + +func (t *PaymentInfo) MarshalCBOR(w io.Writer) error { + if t == nil { + _, err := w.Write(cbg.CborNull) + return err + } + if _, err := w.Write(lengthBufPaymentInfo); err != nil { + return err + } + + scratch := make([]byte, 9) + + // t.Channel (address.Address) (struct) + if err := t.Channel.MarshalCBOR(w); err != nil { + return err + } + + // t.WaitSentinel (cid.Cid) (struct) + + if err := cbg.WriteCidBuf(scratch, w, t.WaitSentinel); err != nil { + return xerrors.Errorf("failed to write cid field t.WaitSentinel: %w", err) + } + + // t.Vouchers ([]*paych.SignedVoucher) (slice) + if len(t.Vouchers) > cbg.MaxLength { + return xerrors.Errorf("Slice value in field t.Vouchers was too long") + } + + if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajArray, uint64(len(t.Vouchers))); err != nil { + return err + } + for _, v := range t.Vouchers { + if err := v.MarshalCBOR(w); err != nil { + return err + } + } + return nil +} + +func (t *PaymentInfo) UnmarshalCBOR(r io.Reader) error { + *t = PaymentInfo{} + + br := cbg.GetPeeker(r) + scratch := make([]byte, 8) + + maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + if maj != cbg.MajArray { + return fmt.Errorf("cbor input should be of type array") + } + + if extra != 3 { + return fmt.Errorf("cbor input had wrong number of fields") + } + + // t.Channel (address.Address) (struct) + + { + + if err := t.Channel.UnmarshalCBOR(br); err != nil { + return xerrors.Errorf("unmarshaling t.Channel: %w", err) + } + + } + // t.WaitSentinel (cid.Cid) (struct) + + { + + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.WaitSentinel: %w", err) + } + + t.WaitSentinel = c + + } + // t.Vouchers ([]*paych.SignedVoucher) (slice) + + maj, extra, err = cbg.CborReadHeaderBuf(br, scratch) + if err != nil { + return err + } + + if extra > cbg.MaxLength { + return fmt.Errorf("t.Vouchers: array too large (%d)", extra) + } + + if maj != cbg.MajArray { + return fmt.Errorf("expected cbor array") + } + + if extra > 0 { + t.Vouchers = make([]*paych.SignedVoucher, extra) + } + + for i := 0; i < int(extra); i++ { + + var v paych.SignedVoucher + if err := v.UnmarshalCBOR(br); err != nil { + return err + } + + t.Vouchers[i] = &v + } + + return nil +} diff --git a/venus-shared/paych/paych.go b/venus-shared/paych/paych.go new file mode 100644 index 0000000000..be966aeace --- /dev/null +++ b/venus-shared/paych/paych.go @@ -0,0 +1,55 @@ +package paych + +import ( + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/ipfs/go-cid" + + "github.com/filecoin-project/venus/venus-shared/actors/builtin/paych" + "github.com/filecoin-project/venus/venus-shared/chain" +) + +type SignedVoucher = paych.SignedVoucher + +type PCHDir int + +const ( + PCHUndef PCHDir = iota + PCHInbound + PCHOutbound +) + +type Status struct { + ControlAddr address.Address + Direction PCHDir +} + +type ChannelInfo struct { + Channel address.Address + WaitSentinel cid.Cid +} + +type PaymentInfo struct { + Channel address.Address + WaitSentinel cid.Cid + Vouchers []*paych.SignedVoucher +} + +type VoucherSpec struct { + Amount chain.BigInt + TimeLockMin abi.ChainEpoch + TimeLockMax abi.ChainEpoch + MinSettle abi.ChainEpoch + + Extra *paych.ModVerifyParams +} + +// VoucherCreateResult is the response to calling PaychVoucherCreate +type VoucherCreateResult struct { + // Voucher that was created, or nil if there was an error or if there + // were insufficient funds in the channel + Voucher *paych.SignedVoucher + // Shortfall is the additional amount that would be needed in the channel + // in order to be able to create the voucher + Shortfall chain.BigInt +} diff --git a/venus-shared/stmgr/exec.go b/venus-shared/stmgr/exec.go new file mode 100644 index 0000000000..3d91870851 --- /dev/null +++ b/venus-shared/stmgr/exec.go @@ -0,0 +1,108 @@ +package stmgr + +import ( + "encoding/json" + "fmt" + "regexp" + "runtime" + "strings" + "time" + + "github.com/filecoin-project/venus/venus-shared/chain" +) + +type ExecutionTrace struct { + Msg *chain.Message + MsgRct *chain.MessageReceipt + Error string + Duration time.Duration + GasCharges []*GasTrace + + Subcalls []ExecutionTrace +} + +type GasTrace struct { + Name string + + Location []Loc `json:"loc"` + TotalGas int64 `json:"tg"` + ComputeGas int64 `json:"cg"` + StorageGas int64 `json:"sg"` + TotalVirtualGas int64 `json:"vtg"` + VirtualComputeGas int64 `json:"vcg"` + VirtualStorageGas int64 `json:"vsg"` + + TimeTaken time.Duration `json:"tt"` + Extra interface{} `json:"ex,omitempty"` + + Callers []uintptr `json:"-"` +} + +type Loc struct { + File string + Line int + Function string +} + +// TODO: ??? +// func (l Loc) Show() bool { +// ignorePrefix := []string{ +// "reflect.", +// "github.com/filecoin-project/lotus/chain/vm.(*Invoker).transform", +// "github.com/filecoin-project/go-amt-ipld/", +// } +// for _, pre := range ignorePrefix { +// if strings.HasPrefix(l.Function, pre) { +// return false +// } +// } +// return true +// } + +func (l Loc) String() string { + file := strings.Split(l.File, "/") + + fn := strings.Split(l.Function, "/") + var fnpkg string + if len(fn) > 2 { + fnpkg = strings.Join(fn[len(fn)-2:], "/") + } else { + fnpkg = l.Function + } + + return fmt.Sprintf("%s@%s:%d", fnpkg, file[len(file)-1], l.Line) +} + +var importantRegex = regexp.MustCompile(`github.com/filecoin-project/specs-actors/(v\d+/)?actors/builtin`) + +func (l Loc) Important() bool { + return importantRegex.MatchString(l.Function) +} + +func (gt *GasTrace) MarshalJSON() ([]byte, error) { + type GasTraceCopy GasTrace + if len(gt.Location) == 0 { + if len(gt.Callers) != 0 { + frames := runtime.CallersFrames(gt.Callers) + for { + frame, more := frames.Next() + // TODO: this func name must be fixed + if frame.Function == "github.com/filecoin-project/lotus/chain/vm.(*VM).ApplyMessage" { + break + } + l := Loc{ + File: frame.File, + Line: frame.Line, + Function: frame.Function, + } + gt.Location = append(gt.Location, l) + if !more { + break + } + } + } + } + + cpy := (*GasTraceCopy)(gt) + return json.Marshal(cpy) +} diff --git a/venus-shared/testutil/cbor_basic.go b/venus-shared/testutil/cbor_basic.go new file mode 100644 index 0000000000..4686fd5b1f --- /dev/null +++ b/venus-shared/testutil/cbor_basic.go @@ -0,0 +1,45 @@ +package testutil + +import ( + "bytes" + "testing" + + "github.com/filecoin-project/go-state-types/cbor" + "github.com/stretchr/testify/require" +) + +type CborErBasicTestOptions struct { + Buf *bytes.Buffer + Prepare func() + ProvideOpts []interface{} + Provided func() + Marshaled func(data []byte) + Finished func() +} + +func CborErBasicTest(t *testing.T, src, dst cbor.Er, opts CborErBasicTestOptions) { + if opts.Prepare != nil { + opts.Prepare() + } + + Provide(t, src, opts.ProvideOpts...) + if opts.Provided != nil { + opts.Provided() + } + + opts.Buf.Reset() + + err := src.MarshalCBOR(opts.Buf) + require.NoErrorf(t, err, "marshal from src of %T", src) + + if opts.Marshaled != nil { + opts.Marshaled(opts.Buf.Bytes()) + } + + err = dst.UnmarshalCBOR(opts.Buf) + require.NoErrorf(t, err, "unmarshal to dst of %T", dst) + + if opts.Finished != nil { + opts.Finished() + } +} diff --git a/venus-shared/testutil/cbor_basic_test.go b/venus-shared/testutil/cbor_basic_test.go new file mode 100644 index 0000000000..37972d83fb --- /dev/null +++ b/venus-shared/testutil/cbor_basic_test.go @@ -0,0 +1,72 @@ +package testutil + +import ( + "bytes" + "testing" + + "github.com/filecoin-project/go-address" + "github.com/stretchr/testify/require" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" +) + +func TestCborBasicForAddress(t *testing.T) { + tf.UnitTest(t) + var buf bytes.Buffer + for i := 0; i < 16; i++ { + var src, dst address.Address + opt := CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, address.Undef, "empty address") + require.Equal(t, src, dst, "empty cid") + }, + + Provided: func() { + require.NotEqual(t, src, dst, "address value provided") + }, + + Marshaled: func(b []byte) { + t.Logf("marshaled callback called with %d bytes", len(b)) + }, + + Finished: func() { + require.Equal(t, src, dst) + require.NotEqual(t, src, address.Undef, "must not be address.Undef") + }, + } + + CborErBasicTest(t, &src, &dst, opt) + } +} + +func TestCborBasicForIDAddress(t *testing.T) { + tf.UnitTest(t) + var buf bytes.Buffer + for i := 0; i < 16; i++ { + var src, dst address.Address + opt := CborErBasicTestOptions{ + Buf: &buf, + Prepare: func() { + require.Equal(t, src, address.Undef, "empty address") + require.Equal(t, src, dst, "empty cid") + }, + + ProvideOpts: []interface{}{ + IDAddressProvider(), + }, + + Provided: func() { + require.NotEqual(t, src, dst, "address value provided") + require.Equal(t, src.Protocol(), address.ID, "must be id address") + }, + + Finished: func() { + require.Equal(t, src, dst) + require.NotEqual(t, src, address.Undef, "must not be address.Undef") + }, + } + + CborErBasicTest(t, &src, &dst, opt) + } +} diff --git a/venus-shared/testutil/value_provdier_chain_test.go b/venus-shared/testutil/value_provdier_chain_test.go new file mode 100644 index 0000000000..6f709edfb5 --- /dev/null +++ b/venus-shared/testutil/value_provdier_chain_test.go @@ -0,0 +1,135 @@ +package testutil + +import ( + "testing" + + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-state-types/abi" + "github.com/filecoin-project/go-state-types/big" + "github.com/filecoin-project/go-state-types/crypto" + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/ipfs/go-cid" + "github.com/stretchr/testify/require" +) + +func TestDefaultCid(t *testing.T) { + tf.UnitTest(t) + var c cid.Cid + Provide(t, &c) + require.NotEqual(t, cid.Undef, c) +} + +func TestDefaultCidSlice(t *testing.T) { + tf.UnitTest(t) + cs := make([]cid.Cid, 16) + Provide(t, &cs) + for ci := range cs { + require.NotEqual(t, cid.Undef, cs[ci]) + } +} + +func TestDefaultAddresses(t *testing.T) { + tf.UnitTest(t) + addrs := make([]address.Address, 256) + protos := map[address.Protocol]struct{}{} + Provide(t, &addrs) + for i := range addrs { + protos[addrs[i].Protocol()] = struct{}{} + } + + require.True(t, len(protos) == 4) +} + +func TestDefaultIDAddresses(t *testing.T) { + tf.UnitTest(t) + addrs := make([]address.Address, 256) + protos := map[address.Protocol]struct{}{} + Provide(t, &addrs, IDAddressProvider()) + for i := range addrs { + protos[addrs[i].Protocol()] = struct{}{} + } + + require.True(t, len(protos) == 1) +} + +func TestDefaultBigs(t *testing.T) { + tf.UnitTest(t) + bigs := make([]big.Int, 256) + Provide(t, &bigs) + hasPositive := false + hasNegative := false + for bi := range bigs { + require.NotNil(t, bigs[bi].Int) + hasPositive = hasPositive || bigs[bi].GreaterThan(bigZero) + hasNegative = hasNegative || bigs[bi].LessThan(bigZero) + } + + require.True(t, hasPositive) + require.True(t, hasNegative) +} + +func TestPositiveBigs(t *testing.T) { + tf.UnitTest(t) + bigs := make([]big.Int, 256) + Provide(t, &bigs, PositiveBigProvider()) + for bi := range bigs { + require.NotNil(t, bigs[bi].Int) + require.True(t, bigs[bi].GreaterThan(bigZero)) + } +} + +func TestNegativeBigs(t *testing.T) { + tf.UnitTest(t) + + bigs := make([]big.Int, 256) + Provide(t, &bigs, NegativeBigProvider()) + for bi := range bigs { + require.NotNil(t, bigs[bi].Int) + require.True(t, bigs[bi].LessThan(bigZero)) + } +} + +func TestDefaultSigTypes(t *testing.T) { + tf.UnitTest(t) + + sigtyps := make([]crypto.SigType, 256) + Provide(t, &sigtyps) + typs := map[crypto.SigType]struct{}{} + for i := range sigtyps { + typs[sigtyps[i]] = struct{}{} + } + + require.True(t, len(typs) == 2) +} + +func TestDefaultPaddedSize(t *testing.T) { + tf.UnitTest(t) + + psizes := make([]abi.PaddedPieceSize, 32) + Provide(t, &psizes) + for i := range psizes { + require.NoErrorf(t, psizes[i].Validate(), "invalid padded size %d", psizes[i]) + } +} + +func TestFixedPaddedSize(t *testing.T) { + tf.UnitTest(t) + + shifts := make([]int, 32) + Provide(t, &shifts, IntRangedProvider(1, 50)) + for si := range shifts { + var ps abi.PaddedPieceSize + Provide(t, &ps, PaddedSizeFixedProvider(128<= 1, got %d", size) + } + + r.opt.sliceLen = &size + } +} + +func Provide(t *testing.T, dst interface{}, options ...interface{}) { + rval := reflect.ValueOf(dst) + if kind := rval.Kind(); kind != reflect.Ptr { + t.Fatalf("value provider can only be applied on to poniters, got %T", dst) + } + + reg := defaultValueProviderRegistry + if len(options) > 0 { + reg = defaultValueProviderRegistry.clone() + for fni := range options { + fn := options[fni] + if opt, ok := fn.(OptionFunc); ok { + opt(t, reg) + continue + } + + if err := reg.register(fn); err != nil { + t.Fatalf("register specified provider %T for %T: %s", fn, dst, err) + } + } + } + + reg.provide(t, rval.Elem()) +} + +func MustRegisterDefaultValueProvier(fn interface{}) { + if err := RegisterDefaultValueProvier(fn); err != nil { + panic(fmt.Errorf("register default value provider %T: %w", fn, err)) + } +} + +func RegisterDefaultValueProvier(fn interface{}) error { + return defaultValueProviderRegistry.register(fn) +} + +var defaultValueProviderRegistry = &valueProviderRegistry{ + providers: map[reflect.Type]reflect.Value{}, +} + +type valueProviderRegistry struct { + sync.RWMutex + providers map[reflect.Type]reflect.Value + + opt struct { + sliceLen *int + } +} + +func (r *valueProviderRegistry) clone() *valueProviderRegistry { + cloned := &valueProviderRegistry{ + providers: map[reflect.Type]reflect.Value{}, + opt: r.opt, + } + + r.Lock() + for rt, rv := range r.providers { + cloned.providers[rt] = rv + } + r.Unlock() + + return cloned +} + +func (r *valueProviderRegistry) register(fn interface{}) error { + rval := reflect.ValueOf(fn) + rtyp := rval.Type() + + if rkind := rtyp.Kind(); rkind != reflect.Func { + return fmt.Errorf("expected provider func, got %s", rkind) + } + + if numIn := rtyp.NumIn(); numIn != 1 { + return fmt.Errorf("expected provider func with 1 in, got %d", numIn) + } + + if numOut := rtyp.NumOut(); numOut != 1 { + return fmt.Errorf("expected provider func with 1 out, got %d", numOut) + } + + if inTyp := rtyp.In(0); inTyp != typeT { + return fmt.Errorf("expected provider's in type to be *testing.T, got %s", inTyp) + } + + outTyp := rtyp.Out(0) + r.Lock() + r.providers[outTyp] = rval + r.Unlock() + + return nil +} + +func (r *valueProviderRegistry) has(want reflect.Type) bool { + r.RLock() + _, has := r.providers[want] + r.RUnlock() + + return has +} + +func (r *valueProviderRegistry) provide(t *testing.T, rval reflect.Value) { + rtyp := rval.Type() + if !rval.CanSet() { + return + } + + r.RLock() + provider, ok := r.providers[rtyp] + r.RUnlock() + if ok { + ret := provider.Call([]reflect.Value{reflect.ValueOf(t)}) + rval.Set(ret[0]) + return + } + + rkind := rtyp.Kind() + switch rkind { + case reflect.Int, + reflect.Int8, + reflect.Int16, + reflect.Int32, + reflect.Int64, + reflect.Uint, + reflect.Uint8, + reflect.Uint16, + reflect.Uint32, + reflect.Uint64, + reflect.Float32, + reflect.Float64: + + r.RLock() + provider, ok = r.providers[typeInt] + r.RUnlock() + + } + + if ok { + ret := provider.Call([]reflect.Value{reflect.ValueOf(t)}) + rval.Set(ret[0].Convert(rtyp)) + return + } + + r.RLock() + var convertor reflect.Value + for pt := range r.providers { + if pt.ConvertibleTo(rtyp) { + convertor = r.providers[pt] + break + } + } + r.RUnlock() + + if convertor.IsValid() { + ret := convertor.Call([]reflect.Value{reflect.ValueOf(t)}) + rval.Set(ret[0].Convert(rtyp)) + return + } + + switch rkind { + case reflect.Slice: + if rval.IsNil() || rval.Len() == 0 { + size := 1 + if r.opt.sliceLen != nil { + size = *r.opt.sliceLen + } + + rval.Set(reflect.MakeSlice(rtyp, size, size)) + } + + for i := 0; i < rval.Len(); i++ { + r.provide(t, rval.Index(i)) + } + + return + + case reflect.Array: + for i := 0; i < rval.Len(); i++ { + r.provide(t, rval.Index(i)) + } + + return + + case reflect.Ptr: + if rval.IsNil() { + rval.Set(reflect.New(rtyp.Elem())) + } + + r.provide(t, rval.Elem()) + return + + case reflect.Struct: + for i := 0; i < rval.NumField(); i++ { + fieldVal := rval.Field(i) + r.provide(t, fieldVal) + } + + return + } + +} diff --git a/venus-shared/testutil/value_provider_registry_test.go b/venus-shared/testutil/value_provider_registry_test.go new file mode 100644 index 0000000000..3a8b69b1c3 --- /dev/null +++ b/venus-shared/testutil/value_provider_registry_test.go @@ -0,0 +1,26 @@ +package testutil + +import ( + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/stretchr/testify/require" +) + +func TestInvalidProviders(t *testing.T) { + tf.UnitTest(t) + + vals := []interface{}{ + int(0), + float32(0), + func() {}, + func(t *testing.T) {}, + func() int { return 1 }, + func(int) int { return 1 }, + } + + for ri := range vals { + err := defaultValueProviderRegistry.register(vals[ri]) + require.Errorf(t, err, "value #%d", ri) + } +} diff --git a/venus-shared/testutil/value_set_n_reset.go b/venus-shared/testutil/value_set_n_reset.go new file mode 100644 index 0000000000..b9a82047d3 --- /dev/null +++ b/venus-shared/testutil/value_set_n_reset.go @@ -0,0 +1,41 @@ +package testutil + +import ( + "reflect" + "testing" + + "github.com/stretchr/testify/require" +) + +func ValueSetNReset(t *testing.T, name string, onSet func(), onReset func(), vsets ...interface{}) { + psize := len(vsets) + require.Greaterf(t, psize, 0, "value sets should not be empty for case %s", name) + require.Truef(t, psize%2 == 0, "params count should be odd for case %s", name) + + ptrs := make([]reflect.Value, psize/2) + originalVals := make([]reflect.Value, psize/2) + for i := 0; i < psize/2; i++ { + pi := i * 2 + ptr := reflect.ValueOf(vsets[pi]) + require.Equalf(t, ptr.Type().Kind(), reflect.Ptr, "#%d param should be pointer to the target value for case %s", i, name) + ptrs[i] = ptr + + originVal := reflect.New(ptr.Elem().Type()) + originVal.Elem().Set(ptr.Elem()) + + originalVals[i] = originVal + ptr.Elem().Set(reflect.ValueOf(vsets[pi+1])) + } + + if onSet != nil { + onSet() + } + + for i := range ptrs { + ptrs[i].Elem().Set(originalVals[i].Elem()) + } + + if onReset != nil { + onReset() + } +} diff --git a/venus-shared/testutil/value_set_n_reset_test.go b/venus-shared/testutil/value_set_n_reset_test.go new file mode 100644 index 0000000000..71f2618d9b --- /dev/null +++ b/venus-shared/testutil/value_set_n_reset_test.go @@ -0,0 +1,22 @@ +package testutil + +import ( + "fmt" + "math/rand" + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/stretchr/testify/require" +) + +func TestValueSetNReset(t *testing.T) { + tf.UnitTest(t) + + for i := 0; i < 32; i++ { + originVal := rand.Int() + newVal := originVal + 1 + + target := originVal + ValueSetNReset(t, fmt.Sprintf("set %d to %d", originVal, newVal), func() { require.Equal(t, target, newVal, "after set") }, func() { require.Equal(t, target, originVal, "after reset") }, &target, newVal) + } +} diff --git a/venus-shared/typeutil/codecflag_string.go b/venus-shared/typeutil/codecflag_string.go new file mode 100644 index 0000000000..d62c80d4cf --- /dev/null +++ b/venus-shared/typeutil/codecflag_string.go @@ -0,0 +1,43 @@ +// Code generated by "stringer -type=CodecFlag -trimprefix=Codec"; DO NOT EDIT. + +package typeutil + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[CodecBinary-1] + _ = x[CodecText-2] + _ = x[CodecJSON-4] + _ = x[CodecCbor-8] + _ = x[_codecLimit-16] +} + +const ( + _CodecFlag_name_0 = "BinaryText" + _CodecFlag_name_1 = "JSON" + _CodecFlag_name_2 = "Cbor" + _CodecFlag_name_3 = "_codecLimit" +) + +var ( + _CodecFlag_index_0 = [...]uint8{0, 6, 10} +) + +func (i CodecFlag) String() string { + switch { + case 1 <= i && i <= 2: + i -= 1 + return _CodecFlag_name_0[_CodecFlag_index_0[i]:_CodecFlag_index_0[i+1]] + case i == 4: + return _CodecFlag_name_1 + case i == 8: + return _CodecFlag_name_2 + case i == 16: + return _CodecFlag_name_3 + default: + return "CodecFlag(" + strconv.FormatInt(int64(i), 10) + ")" + } +} diff --git a/venus-shared/typeutil/fields.go b/venus-shared/typeutil/fields.go new file mode 100644 index 0000000000..b08346bbdc --- /dev/null +++ b/venus-shared/typeutil/fields.go @@ -0,0 +1,50 @@ +package typeutil + +import ( + "go/ast" + "reflect" + "sync" +) + +var exportedFieldsCache = struct { + sync.RWMutex + fields map[reflect.Type][]reflect.StructField +}{ + fields: make(map[reflect.Type][]reflect.StructField), +} + +func ExportedFields(obj interface{}) []reflect.StructField { + typ, ok := obj.(reflect.Type) + if !ok { + typ = reflect.TypeOf(obj) + } + + if kind := typ.Kind(); kind != reflect.Struct { + return nil + } + + exportedFieldsCache.RLock() + fields, ok := exportedFieldsCache.fields[typ] + exportedFieldsCache.RUnlock() + + if ok { + return fields + } + + num := typ.NumField() + fields = make([]reflect.StructField, 0, num) + for i := 0; i < num; i++ { + field := typ.Field(i) + if !ast.IsExported(field.Name) { + continue + } + + fields = append(fields, field) + } + + exportedFieldsCache.Lock() + exportedFieldsCache.fields[typ] = fields + exportedFieldsCache.Unlock() + + return fields +} diff --git a/venus-shared/typeutil/fields_test.go b/venus-shared/typeutil/fields_test.go new file mode 100644 index 0000000000..51d4cd0fa3 --- /dev/null +++ b/venus-shared/typeutil/fields_test.go @@ -0,0 +1,26 @@ +package typeutil + +import ( + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/stretchr/testify/require" +) + +func TestExportedFields(t *testing.T) { + tf.UnitTest(t) + + f := ExportedFields(new(int)) + require.Nil(t, f, "nil fields for non-struct type") + + type S struct { + A int + B uint + C bool + d float32 // nolint + _C float64 // nolint + } + + f = ExportedFields(S{}) + require.Len(t, f, 3, "exported fields") +} diff --git a/venus-shared/typeutil/methods.go b/venus-shared/typeutil/methods.go new file mode 100644 index 0000000000..1b432b046a --- /dev/null +++ b/venus-shared/typeutil/methods.go @@ -0,0 +1,81 @@ +package typeutil + +import ( + "go/ast" + "reflect" + "sync" +) + +var exportedMethodsCache = struct { + sync.RWMutex + methods map[reflect.Type][]reflect.Method +}{ + methods: make(map[reflect.Type][]reflect.Method), +} + +func ExportedMethods(obj interface{}) []reflect.Method { + typ, ok := obj.(reflect.Type) + if !ok { + typ = reflect.TypeOf(obj) + } + + exportedMethodsCache.RLock() + methods, ok := exportedMethodsCache.methods[typ] + exportedMethodsCache.RUnlock() + + if ok { + return methods + } + + all := AllMethods(typ) + methods = make([]reflect.Method, 0, len(all)) + for i := range all { + method := all[i] + if !ast.IsExported(method.Name) { + continue + } + + methods = append(methods, method) + } + + exportedMethodsCache.Lock() + exportedMethodsCache.methods[typ] = methods + exportedMethodsCache.Unlock() + + return methods +} + +var allMethodsCache = struct { + sync.RWMutex + methods map[reflect.Type][]reflect.Method +}{ + methods: make(map[reflect.Type][]reflect.Method), +} + +func AllMethods(obj interface{}) []reflect.Method { + typ, ok := obj.(reflect.Type) + if !ok { + typ = reflect.TypeOf(obj) + } + + allMethodsCache.RLock() + methods, ok := allMethodsCache.methods[typ] + allMethodsCache.RUnlock() + + if ok { + return methods + } + + num := typ.NumMethod() + methods = make([]reflect.Method, 0, num) + for i := 0; i < num; i++ { + method := typ.Method(i) + methods = append(methods, method) + } + + allMethodsCache.Lock() + allMethodsCache.methods[typ] = methods + allMethodsCache.Unlock() + + return methods +} diff --git a/venus-shared/typeutil/methods_test.go b/venus-shared/typeutil/methods_test.go new file mode 100644 index 0000000000..0e2e704c28 --- /dev/null +++ b/venus-shared/typeutil/methods_test.go @@ -0,0 +1,40 @@ +package typeutil + +import ( + "io" + "reflect" + "testing" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + "github.com/stretchr/testify/require" +) + +func TestExportedMethods(t *testing.T) { + tf.UnitTest(t) + meths := ExportedMethods(reflect.TypeOf((*io.ReadCloser)(nil)).Elem()) + require.Len(t, meths, 2, "exported methods for io.ReadCloser") + + type I interface { + Public() + private() + } + + meths = AllMethods(reflect.TypeOf((*I)(nil)).Elem()) + require.Len(t, meths, 2, "all methods for I") + + meths = ExportedMethods(reflect.TypeOf((*I)(nil)).Elem()) + require.Len(t, meths, 1, "exported methods for I") + + var ci codecInt + meths = ExportedMethods(&ci) + require.Len(t, meths, 8, "exported methods for *codecInt") + + meths = ExportedMethods(ci) + require.Len(t, meths, 4, "exported methods for codecInt") + + meths = AllMethods(&ci) + require.Len(t, meths, 8, "all methods for *codecInt") + + meths = AllMethods(ci) + require.Len(t, meths, 4, "all methods for codecInt") +} diff --git a/venus-shared/typeutil/similar.go b/venus-shared/typeutil/similar.go new file mode 100644 index 0000000000..e2a30135e4 --- /dev/null +++ b/venus-shared/typeutil/similar.go @@ -0,0 +1,418 @@ +package typeutil + +import ( + "encoding" + "encoding/json" + "fmt" + "reflect" + "sync" + + "github.com/filecoin-project/go-state-types/cbor" +) + +type CodecFlag uint + +//go:generate go run golang.org/x/tools/cmd/stringer -type=CodecFlag -trimprefix=Codec +const ( + CodecBinary CodecFlag = 1 << iota + CodecText + CodecJSON + CodecCbor + _codecLimit +) + +type SimilarMode uint + +const ( + StructFieldsOrdered SimilarMode = 1 << iota + StructFieldTagsMatch + InterfaceAllMethods + AvoidRecursive +) + +var ( + codecs = []struct { + flag CodecFlag + marshaler reflect.Type + unmarshaler reflect.Type + }{ + { + flag: CodecBinary, + marshaler: reflect.TypeOf((*encoding.BinaryMarshaler)(nil)).Elem(), + unmarshaler: reflect.TypeOf((*encoding.BinaryUnmarshaler)(nil)).Elem(), + }, + { + flag: CodecText, + marshaler: reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem(), + unmarshaler: reflect.TypeOf((*encoding.TextUnmarshaler)(nil)).Elem(), + }, + { + flag: CodecJSON, + marshaler: reflect.TypeOf((*json.Marshaler)(nil)).Elem(), + unmarshaler: reflect.TypeOf((*json.Unmarshaler)(nil)).Elem(), + }, + { + flag: CodecCbor, + marshaler: reflect.TypeOf((*cbor.Marshaler)(nil)).Elem(), + unmarshaler: reflect.TypeOf((*cbor.Unmarshaler)(nil)).Elem(), + }, + } +) + +type similarResult struct { + similar bool + reason *Reason +} + +type similarInput struct { + a reflect.Type + b reflect.Type + codecFlag CodecFlag + smode SimilarMode +} + +var similarCache = struct { + sync.RWMutex + results map[similarInput]similarResult +}{ + results: make(map[similarInput]similarResult), +} + +type SimilarStack = [2]reflect.Type + +func Similar(a, b interface{}, codecFlag CodecFlag, smode SimilarMode, stack ...SimilarStack) (bool, *Reason) { + atyp, ok := a.(reflect.Type) + if !ok { + atyp = reflect.TypeOf(a) + } + + btyp, ok := b.(reflect.Type) + if !ok { + btyp = reflect.TypeOf(b) + } + + if atyp == btyp { + return true, nil + } + + sinput := similarInput{ + a: atyp, + b: btyp, + codecFlag: codecFlag, + smode: smode, + } + + similarCache.RLock() + res, has := similarCache.results[sinput] + if !has { + sinput.a, sinput.b = btyp, atyp + res, has = similarCache.results[sinput] + } + similarCache.RUnlock() + + if has { + return res.similar, res.reason + } + + reasonf := makeReasonf(atyp, btyp) + reasonWrap := makeReasonWrap(atyp, btyp) + + // recursive + for si := range stack { + // we assumpt that they are similar + // but we won't cache the result + if (stack[si][0] == atyp && stack[si][1] == btyp) || (stack[si][1] == atyp && stack[si][0] == btyp) { + return smode&AvoidRecursive == 0, reasonf("%w in the stack #%d, now in #%d", ReasonRecursiveCompare, si, len(stack)) + } + } + + stack = append(stack, [2]reflect.Type{atyp, btyp}) + + var yes bool + var reason *Reason + + defer func() { + similarCache.Lock() + similarCache.results[sinput] = similarResult{ + similar: yes, + reason: reason, + } + similarCache.Unlock() + }() + + akind := atyp.Kind() + bkind := btyp.Kind() + + if akind != bkind { + reason = reasonf("%w: %s != %s", ReasonTypeKinds, akind, bkind) + return yes, reason + } + + if codecFlag != 0 { + for i := range codecs { + if codecFlag&codecs[i].flag == 0 { + continue + } + + aMarImpl := atyp.Implements(codecs[i].marshaler) + bMarImpl := btyp.Implements(codecs[i].marshaler) + if aMarImpl != bMarImpl { + reason = reasonf("%w for codec %s: %v != %v", ReasonCodecMarshalerImplementations, codecs[i].flag, aMarImpl, bMarImpl) + return yes, reason + } + + aUMarImpl := atyp.Implements(codecs[i].unmarshaler) + bUMarImpl := btyp.Implements(codecs[i].unmarshaler) + if aUMarImpl != bUMarImpl { + reason = reasonf("%w for codec %s: %v; %v", ReasonCodecUnmarshalerImplementations, codecs[i].flag, aUMarImpl, bUMarImpl) + return yes, reason + } + } + } + + switch akind { + case reflect.Bool: + fallthrough + + case reflect.Int, + reflect.Int8, + reflect.Int16, + reflect.Int32, + reflect.Int64: + fallthrough + + case reflect.Uint, + reflect.Uint8, + reflect.Uint16, + reflect.Uint32, + reflect.Uint64: + fallthrough + + case reflect.Float32, reflect.Float64: + fallthrough + + case reflect.Complex64, reflect.Complex128: + fallthrough + + case reflect.Uintptr, reflect.UnsafePointer: + fallthrough + + case reflect.String: + yes = true + + case reflect.Interface: + + default: + yes = atyp.ConvertibleTo(btyp) + } + + if yes { + return yes, reason + } + + switch akind { + case reflect.Array: + if atyp.Len() != btyp.Len() { + reason = reasonf("%w: %d != %d", ReasonArrayLength, atyp.Len(), btyp.Len()) + break + } + + elemMatch, elemReason := Similar(atyp.Elem(), btyp.Elem(), codecFlag, smode, stack...) + if !elemMatch { + reason = reasonWrap(elemReason, ReasonArrayElement) + break + } + + yes = true + + case reflect.Map: + keyMatch, keyReason := Similar(atyp.Key(), btyp.Key(), codecFlag, smode, stack...) + if !keyMatch { + reason = reasonWrap(keyReason, ReasonMapKey) + break + } + + valueMatch, valueReason := Similar(atyp.Elem(), btyp.Elem(), codecFlag, smode, stack...) + if !valueMatch { + reason = reasonWrap(valueReason, ReasonMapValue) + break + } + + yes = true + + case reflect.Ptr: + elemMatch, elemReason := Similar(atyp.Elem(), btyp.Elem(), codecFlag, smode, stack...) + if !elemMatch { + reason = reasonWrap(elemReason, ReasonPtrElememnt) + break + } + + yes = true + + case reflect.Slice: + elemMatch, elemReason := Similar(atyp.Elem(), btyp.Elem(), codecFlag, smode, stack...) + if !elemMatch { + reason = reasonWrap(elemReason, ReasonSliceElement) + break + } + + yes = true + + case reflect.Struct: + fieldsMatch, fieldsReason := fieldsSimilar(atyp, btyp, codecFlag, smode, stack...) + if !fieldsMatch { + reason = reasonWrap(fieldsReason, ReasonStructField) + break + } + + yes = true + + case reflect.Interface: + methsMatch, methsReason := methodsSimilar(atyp, btyp, codecFlag, smode, stack...) + if !methsMatch { + reason = reasonWrap(methsReason, ReasonInterfaceMethod) + break + } + + yes = true + + case reflect.Chan: + adir := atyp.ChanDir() + bdir := btyp.ChanDir() + if adir != bdir { + reason = reasonf("%w: %s != %s", ReasonChanDir, adir, bdir) + break + } + + elemMatch, elemReason := Similar(atyp.Elem(), btyp.Elem(), codecFlag, smode, stack...) + if !elemMatch { + reason = reasonWrap(elemReason, ReasonChanElement) + break + } + + yes = true + + case reflect.Func: + yes, reason = funcSimilar(atyp, btyp, codecFlag, smode, stack...) + + } + + return yes, reason +} + +func funcSimilar(atyp, btyp reflect.Type, codecFlag CodecFlag, smode SimilarMode, stack ...SimilarStack) (bool, *Reason) { + reasonf := makeReasonf(atyp, btyp) + reasonWrap := makeReasonWrap(atyp, btyp) + + aNumIn := atyp.NumIn() + bNumIn := btyp.NumIn() + if aNumIn != bNumIn { + return false, reasonf("%w: %d != %d", ReasonFuncInNum, aNumIn, bNumIn) + } + + aNumOut := atyp.NumOut() + bNumOut := btyp.NumOut() + if aNumOut != bNumOut { + return false, reasonf("%w: %d != %d", ReasonFuncOutNum, aNumOut, bNumOut) + } + + for i := 0; i < aNumIn; i++ { + inMatch, inReason := Similar(atyp.In(i), btyp.In(i), codecFlag, smode, stack...) + if !inMatch { + return false, reasonWrap(inReason, fmt.Errorf("%w: #%d input", ReasonFuncInType, i)) + } + } + + for i := 0; i < aNumOut; i++ { + outMatch, outReason := Similar(atyp.Out(i), btyp.Out(i), codecFlag, smode, stack...) + if !outMatch { + return false, reasonWrap(outReason, fmt.Errorf("%w: #%d input", ReasonFuncOutType, i)) + } + } + + return true, nil +} + +func fieldsSimilar(a, b reflect.Type, codecFlag CodecFlag, smode SimilarMode, stack ...SimilarStack) (bool, *Reason) { + reasonf := makeReasonf(a, b) + reasonWrap := makeReasonWrap(a, b) + + afields := ExportedFields(a) + bfields := ExportedFields(b) + + if len(afields) != len(bfields) { + return false, reasonf("%w: %d != %d", ReasonExportedFieldsCount, len(afields), len(bfields)) + } + + if smode&StructFieldsOrdered != 0 { + for i := range afields { + if afields[i].Name != bfields[i].Name { + return false, reasonf("%w: #%d field, %s != %s", ReasonExportedFieldName, i, afields[i].Name, bfields[i].Name) + } + + if smode&StructFieldTagsMatch != 0 && afields[i].Tag != bfields[i].Tag { + return false, reasonf("%w: #%d field, %s != %s", ReasonExportedFieldTag, i, afields[i].Tag, bfields[i].Tag) + } + + yes, reason := Similar(afields[i].Type, bfields[i].Type, codecFlag, smode, stack...) + if !yes { + return false, reasonWrap(reason, fmt.Errorf("%w: #%d field named %s", ReasonExportedFieldType, i, afields[i].Name)) + } + } + + return true, nil + } + + mfields := map[string]reflect.StructField{} + for i := range afields { + mfields[afields[i].Name] = afields[i] + } + + for i := range bfields { + f := bfields[i] + af, has := mfields[f.Name] + if !has { + return false, reasonf("%w: named %s", ReasonExportedFieldNotFound, f.Name) + } + + if smode&StructFieldTagsMatch != 0 && af.Tag != f.Tag { + return false, reasonf("%w: named field %s, %s != %s", ReasonExportedFieldTag, f.Name, af.Tag, f.Tag) + } + + yes, reason := Similar(af.Type, f.Type, codecFlag, smode, stack...) + if !yes { + return false, reasonWrap(reason, fmt.Errorf("%w: named %s", ReasonExportedFieldType, f.Name)) + } + } + + return true, nil +} + +func methodsSimilar(a, b reflect.Type, codecFlag CodecFlag, smode SimilarMode, stack ...SimilarStack) (bool, *Reason) { + reasonf := makeReasonf(a, b) + reasonWrap := makeReasonWrap(a, b) + + ameths := ExportedMethods(a) + bmeths := ExportedMethods(b) + if smode&InterfaceAllMethods != 0 { + ameths = AllMethods(a) + bmeths = AllMethods(b) + } + + if len(ameths) != len(bmeths) { + return false, reasonf("%w: %d != %d", ReasonExportedMethodsCount, len(ameths), len(bmeths)) + } + + for i := range ameths { + if ameths[i].Name != bmeths[i].Name { + return false, reasonf("%w: #%d method, %s != %s ", ReasonExportedMethodName, i, ameths[i].Name, bmeths[i].Name) + } + + yes, reason := Similar(ameths[i].Type, bmeths[i].Type, codecFlag, smode, stack...) + if !yes { + return false, reasonWrap(reason, fmt.Errorf("%w: #%d method named %s", ReasonExportedMethodType, i, ameths[i].Name)) + } + } + + return true, nil +} diff --git a/venus-shared/typeutil/similar_reason.go b/venus-shared/typeutil/similar_reason.go new file mode 100644 index 0000000000..45e63820a6 --- /dev/null +++ b/venus-shared/typeutil/similar_reason.go @@ -0,0 +1,85 @@ +package typeutil + +import ( + "errors" + "fmt" + "reflect" +) + +func makeReasonf(a, b reflect.Type) func(f string, args ...interface{}) *Reason { + return func(f string, args ...interface{}) *Reason { + wrapfn := makeReasonWrap(a, b) + return wrapfn(nil, fmt.Errorf(f, args...)) + } +} + +func makeReasonWrap(a, b reflect.Type) func(nested *Reason, base error) *Reason { + return func(nested *Reason, base error) *Reason { + return &Reason{ + TypeA: a, + TypeB: b, + Base: base, + Nested: nested, + } + } +} + +type Reason struct { + TypeA reflect.Type + TypeB reflect.Type + Base error + Nested *Reason +} + +func (r *Reason) Error() string { + if r == nil || r.Base == nil { + return "nil" + } + + return fmt.Sprintf("{[%s <> %s] base=%s; nested=%s}", r.TypeA, r.TypeB, r.Base, r.Nested) +} + +func (r *Reason) Is(target error) bool { + if r == nil || r.Base == nil { + return false + } + + return errors.Is(r.Base, target) +} + +func (r *Reason) Unwrap() error { + if r == nil || r.Nested == nil { + return nil + } + + return r.Nested +} + +var ( + ReasonTypeKinds = fmt.Errorf("type kinds") // nolint + ReasonCodecMarshalerImplementations = fmt.Errorf("codec marshaler implementations") // nolint + ReasonCodecUnmarshalerImplementations = fmt.Errorf("codec unmarshaler implementations") // nolint + ReasonArrayLength = fmt.Errorf("array length") // nolint + ReasonArrayElement = fmt.Errorf("array element") // nolint + ReasonMapKey = fmt.Errorf("map key") // nolint + ReasonMapValue = fmt.Errorf("map value") // nolint + ReasonPtrElememnt = fmt.Errorf("pointed type") // nolint + ReasonSliceElement = fmt.Errorf("slice element") // nolint + ReasonStructField = fmt.Errorf("struct field") // nolint + ReasonInterfaceMethod = fmt.Errorf("interface method") // nolint + ReasonChanDir = fmt.Errorf("channel direction") // nolint + ReasonChanElement = fmt.Errorf("channel element") // nolint + ReasonFuncInNum = fmt.Errorf("func in num") // nolint + ReasonFuncOutNum = fmt.Errorf("func out num") // nolint + ReasonFuncInType = fmt.Errorf("func in type") // nolint + ReasonFuncOutType = fmt.Errorf("func out type") // nolint + ReasonExportedFieldsCount = fmt.Errorf("exported fields count") // nolint + ReasonExportedFieldName = fmt.Errorf("exported field name") // nolint + ReasonExportedFieldTag = fmt.Errorf("exported field tag") // nolint + ReasonExportedFieldNotFound = fmt.Errorf("exported field not found") // nolint + ReasonExportedFieldType = fmt.Errorf("exported field type") // nolint + ReasonExportedMethodsCount = fmt.Errorf("exported methods count") // nolint + ReasonExportedMethodName = fmt.Errorf("exported method name") // nolint + ReasonExportedMethodType = fmt.Errorf("exported method type") // nolint + ReasonRecursiveCompare = fmt.Errorf("recursive compare") // nolint +) diff --git a/venus-shared/typeutil/similar_test.go b/venus-shared/typeutil/similar_test.go new file mode 100644 index 0000000000..f2e768e3d8 --- /dev/null +++ b/venus-shared/typeutil/similar_test.go @@ -0,0 +1,691 @@ +package typeutil + +import ( + "context" + "errors" + "io" + "math/bits" + "reflect" + "testing" + "unsafe" + + tf "github.com/filecoin-project/venus/pkg/testhelpers/testflags" + + "github.com/stretchr/testify/require" +) + +func TestCodecList(t *testing.T) { + tf.UnitTest(t) + zeroes := bits.TrailingZeros(uint(_codecLimit)) + require.Equalf(t, zeroes, len(codecs), "codec count not match, %d != %d", zeroes, len(codecs)) + + for ci := range codecs { + czeroes := bits.TrailingZeros(uint(codecs[ci].flag)) + require.Equalf(t, czeroes, ci, "#%d codec's flag is not matched", ci) + } +} + +type ABool bool +type AInt int +type AInt8 int8 +type AInt16 int16 +type AInt32 int32 +type AInt64 int64 +type AUInt uint +type AUInt8 uint8 +type AUInt16 uint16 +type AUInt32 uint32 +type AUInt64 uint64 +type AFloat32 float32 +type AFloat64 float64 +type AComplet64 complex64 +type AComplet128 complex128 +type AString string +type AUintptr uintptr +type AUnsafePointer unsafe.Pointer + +type BBool bool +type BInt int +type BInt8 int8 +type BInt16 int16 +type BInt32 int32 +type BInt64 int64 +type BUInt uint +type BUInt8 uint8 +type BUInt16 uint16 +type BUInt32 uint32 +type BUInt64 uint64 +type BFloat32 float32 +type BFloat64 float64 +type BComplet64 complex64 +type BComplet128 complex128 +type BString string +type BUintptr uintptr +type BUnsafePointer unsafe.Pointer + +func TestSimilarSimple(t *testing.T) { + tf.UnitTest(t) + alist := []interface{}{ + new(ABool), + new(AInt), + new(AInt8), + new(AInt16), + new(AInt32), + new(AInt64), + new(AUInt), + new(AUInt8), + new(AUInt16), + new(AUInt32), + new(AUInt64), + new(AFloat32), + new(AFloat64), + new(AComplet64), + new(AComplet128), + new(AString), + new(AUintptr), + new(AUnsafePointer), + } + + blist := []interface{}{ + new(BBool), + new(BInt), + new(BInt8), + new(BInt16), + new(BInt32), + new(BInt64), + new(BUInt), + new(BUInt8), + new(BUInt16), + new(BUInt32), + new(BUInt64), + new(BFloat32), + new(BFloat64), + new(BComplet64), + new(BComplet128), + new(BString), + new(BUintptr), + new(BUnsafePointer), + } + + require.Equal(t, len(alist), len(blist), "values of newed types") + + for i := range alist { + aval, bval := alist[i], blist[i] + + yes, reason := Similar(aval, bval, 0, 0) + require.Truef(t, yes, "similar result for %T <-> %T: %s", aval, bval, reason) + + ratyp, rbtyp := reflect.TypeOf(aval), reflect.TypeOf(bval) + require.Truef(t, ratyp != rbtyp, "not same type: %s vs %s", ratyp, rbtyp) + + yes, reason = Similar(ratyp, rbtyp, 0, 0) + require.Truef(t, yes, "similar result for reflect.Type of %s <-> %s: %s", ratyp, rbtyp, reason) + + yes, reason = Similar(ratyp.Elem(), rbtyp.Elem(), 0, 0) + require.Truef(t, yes, "similar result for reflect.Type of %s <-> %s: %s", ratyp.Elem(), rbtyp.Elem(), reason) + } +} + +type similarCase struct { + val interface{} + codecFlag CodecFlag + smode SimilarMode + reasons []error +} + +func similarTest(t *testing.T, origin interface{}, cases []similarCase, checkIndirect bool) { + valOrigin := reflect.ValueOf(origin) + typOrigin := valOrigin.Type() + indirect := checkIndirect && reflect.Indirect(valOrigin).Type() != typOrigin + + for i := range cases { + expectedYes := len(cases[i].reasons) == 0 + + typCase := reflect.TypeOf(cases[i].val) + require.NotEqual(t, typOrigin, typCase, "types should be different") + require.Equal(t, typOrigin.Kind(), typCase.Kind(), "kind should not be different") + + yes, reason := Similar(typOrigin, typCase, cases[i].codecFlag, cases[i].smode) + + require.Equalf(t, expectedYes, yes, "#%d similar result for %s <> %s", i, typOrigin, typCase) + if expectedYes { + require.Nil(t, reason, "reason should be nil") + } else { + require.NotNil(t, reason, "reason should not be nil") + for ei := range cases[i].reasons { + ce := cases[i].reasons[ei] + require.Truef(t, errors.Is(reason, ce), "for case #%d %s <> %s, reason should contains base %s, actual: %s", i, typOrigin, typCase, ce, reason) + } + } + + if indirect { + require.Equal(t, typOrigin.Elem().Kind(), typCase.Elem().Kind(), "kind of indirect type should not be different") + + yes, reason = Similar(typOrigin.Elem(), typCase.Elem(), cases[i].codecFlag, cases[i].smode) + + require.Equalf(t, expectedYes, yes, "#%d similar result for %s <> %s", i, typOrigin.Elem(), typCase.Elem()) + if expectedYes { + require.Nil(t, reason, "reason should be nil") + } else { + require.NotNil(t, reason, "reason should not be nil") + for ei := range cases[i].reasons { + ce := cases[i].reasons[ei] + require.Truef(t, errors.Is(reason, ce), "for case #%d %s <> %s, reason should contains base %s, actual: %s", i, typOrigin.Elem(), typCase.Elem(), ce, reason) + } + } + } + } +} + +func TestArray(t *testing.T) { + tf.UnitTest(t) + type origin [2]int + type case1 [2]uint + type case2 [3]int + + type case3 [2]AInt + type case4 [3]AInt + + cases := []similarCase{ + { + val: new(case1), + reasons: []error{ReasonArrayElement}, + }, + { + val: new(case2), + reasons: []error{ReasonArrayLength}, + }, + { + val: new(case3), + }, + { + val: new(case4), + reasons: []error{ReasonArrayLength}, + }, + } + + similarTest(t, new(origin), cases, true) +} + +func TestMap(t *testing.T) { + tf.UnitTest(t) + type origin map[string]int + + type case1 map[int]int + type case2 map[string]string + + type case3 map[string]AInt + type case4 map[AString]AInt + + cases := []similarCase{ + { + val: new(case1), + reasons: []error{ReasonMapKey}, + }, + { + val: new(case2), + reasons: []error{ReasonMapValue}, + }, + { + val: new(case3), + }, + { + val: new(case4), + }, + } + + similarTest(t, new(origin), cases, true) +} + +func TestSlice(t *testing.T) { + tf.UnitTest(t) + type origin []int + + type case1 []uint + type case2 []string + + type case3 []AInt + + cases := []similarCase{ + { + val: new(case1), + reasons: []error{ReasonSliceElement}, + }, + { + val: new(case2), + reasons: []error{ReasonSliceElement}, + }, + { + val: new(case3), + }, + } + + similarTest(t, new(origin), cases, true) +} + +func TestChan(t *testing.T) { + tf.UnitTest(t) + type origin chan int + + type case1 chan uint + type case2 <-chan int + type case3 chan<- int + + type case4 chan AInt + + cases := []similarCase{ + { + val: new(case1), + reasons: []error{ReasonChanElement}, + }, + { + val: new(case2), + reasons: []error{ReasonChanDir}, + }, + { + val: new(case3), + reasons: []error{ReasonChanDir}, + }, + { + val: new(case4), + }, + } + + similarTest(t, new(origin), cases, true) +} + +func TestStruct(t *testing.T) { + tf.UnitTest(t) + type origin struct { + A uint + B int + } + + type case1 struct { + C uint + B int + } + + type case2 struct { + B int + A uint + } + + type case3 struct { + B AInt + A AUInt + } + + type case4 struct { + A AUInt + B AInt + a bool // nolint + } + + type case5 struct { + A AUInt + b AInt // nolint + } + + type case6 struct { + A uint + B uint + } + + type case7 struct { + A AUInt `json:"a"` + B AInt + } + + cases := []similarCase{ + { + val: new(case1), + smode: StructFieldsOrdered, + reasons: []error{ReasonStructField, ReasonExportedFieldName}, + }, + { + val: new(case1), + smode: 0, + reasons: []error{ReasonStructField, ReasonExportedFieldNotFound}, + }, + { + val: new(case2), + smode: StructFieldsOrdered, + reasons: []error{ReasonStructField, ReasonExportedFieldName}, + }, + { + val: new(case2), + smode: 0, + }, + { + val: new(case3), + smode: StructFieldsOrdered, + reasons: []error{ReasonStructField, ReasonExportedFieldName}, + }, + { + val: new(case3), + smode: 0, + }, + { + val: new(case4), + smode: 0, + }, + { + val: new(case4), + smode: StructFieldsOrdered, + }, + { + val: new(case5), + smode: 0, + reasons: []error{ReasonStructField, ReasonExportedFieldsCount}, + }, + { + val: new(case5), + smode: StructFieldsOrdered, + reasons: []error{ReasonStructField, ReasonExportedFieldsCount}, + }, + { + val: new(case6), + smode: 0, + reasons: []error{ReasonStructField, ReasonExportedFieldType}, + }, + { + val: new(case6), + smode: StructFieldsOrdered, + reasons: []error{ReasonStructField, ReasonExportedFieldType}, + }, + { + val: new(case7), + smode: StructFieldTagsMatch, + reasons: []error{ReasonStructField, ReasonExportedFieldTag}, + }, + { + val: new(case7), + smode: StructFieldsOrdered | StructFieldTagsMatch, + reasons: []error{ReasonStructField, ReasonExportedFieldTag}, + }, + } + + similarTest(t, new(origin), cases, true) +} + +func TestInterface(t *testing.T) { + tf.UnitTest(t) + type origin interface { + Read(context.Context) (int, error) + Write(context.Context, []byte) (int, error) + Close(context.Context) error + } + + type case1 interface { + Write(context.Context, []byte) (int, error) + Read(context.Context) (int, error) + Close(context.Context) error + } + + type case2 interface { + Read1(context.Context) (int, error) + Write(context.Context, []byte) (int, error) + Close(context.Context) error + } + + type case3 interface { + Read(context.Context, []byte) (int, error) + Write(context.Context, []byte) (int, error) + Close(context.Context) error + } + + type case4 interface { + Read(context.Context) error + Write(context.Context, []byte) (int, error) + Close(context.Context) error + } + + type Bytes []byte + type case5 interface { + Read(context.Context) (AInt, error) + Write(context.Context, Bytes) (AInt, error) + Close(context.Context) error + } + + type case6 interface { + Read(context.Context) (AInt, error) + Write(context.Context, Bytes) (AInt, error) + } + + type case7 interface { + Read(context.Context) (AUInt, error) + Write(context.Context, Bytes) (AInt, error) + Close(context.Context) error + } + + type case8 interface { + Read(context.Context) (AInt, error) + Write(context.Context, string) (AInt, error) + Close(context.Context) error + } + + type case9 interface { + Read(context.Context) (AInt, error) + Write(context.Context, Bytes) (AInt, error) + Close(context.Context) error + read(context.Context) + } + + cases := []similarCase{ + { + val: new(case1), + }, + { + val: new(case2), + reasons: []error{ReasonExportedMethodName}, + }, + { + val: new(case3), + reasons: []error{ReasonExportedMethodType, ReasonFuncInNum}, + }, + { + val: new(case4), + reasons: []error{ReasonExportedMethodType, ReasonFuncOutNum}, + }, + { + val: new(case5), + }, + { + val: new(case6), + reasons: []error{ReasonExportedMethodsCount}, + }, + { + val: new(case7), + reasons: []error{ReasonExportedMethodType, ReasonFuncOutType}, + }, + { + val: new(case8), + reasons: []error{ReasonExportedMethodType, ReasonFuncInType}, + }, + { + val: new(case9), + }, + { + val: new(case9), + smode: InterfaceAllMethods, + reasons: []error{ReasonExportedMethodsCount}, + }, + } + + similarTest(t, new(origin), cases, true) +} + +type codecInt int + +func (ci codecInt) MarshalBinary() ([]byte, error) { // nolint + panic("not impl") +} + +func (ci *codecInt) UnmarshalBinary([]byte) error { // nolint + panic("not impl") +} + +func (ci codecInt) MarshalText() ([]byte, error) { // nolint + panic("not impl") +} + +func (ci *codecInt) UnmarshalText([]byte) error { // nolint + panic("not impl") +} + +func (ci codecInt) MarshalJSON() ([]byte, error) { // nolint + panic("not impl") +} + +func (ci *codecInt) UnmarshalJSON([]byte) error { // nolint + panic("not impl") +} + +func (ci codecInt) MarshalCBOR(w io.Writer) error { // nolint + panic("not impl") +} + +func (ci *codecInt) UnmarshalCBOR(r io.Reader) error { // nolint + panic("not impl") +} + +type halfCodecInt int + +func (ci halfCodecInt) MarshalBinary() ([]byte, error) { // nolint + panic("not impl") +} + +func (ci halfCodecInt) MarshalText() ([]byte, error) { // nolint + panic("not impl") +} + +func (ci halfCodecInt) MarshalJSON() ([]byte, error) { // nolint + panic("not impl") +} + +func (ci halfCodecInt) MarshalCBOR(w io.Writer) error { // nolint + panic("not impl") +} + +func TestCodec(t *testing.T) { + tf.UnitTest(t) + cases := []similarCase{ + { + val: new(AInt), + codecFlag: 0, + }, + { + val: new(AInt), + codecFlag: CodecBinary, + reasons: []error{ReasonCodecMarshalerImplementations}, + }, + { + val: new(AInt), + codecFlag: CodecText, + reasons: []error{ReasonCodecMarshalerImplementations}, + }, + { + val: new(AInt), + codecFlag: CodecJSON, + reasons: []error{ReasonCodecMarshalerImplementations}, + }, + { + val: new(AInt), + codecFlag: CodecCbor, + reasons: []error{ReasonCodecMarshalerImplementations}, + }, + { + val: new(codecInt), + codecFlag: 0, + }, + { + val: new(codecInt), + codecFlag: CodecBinary, + reasons: []error{ReasonCodecUnmarshalerImplementations}, + }, + { + val: new(codecInt), + codecFlag: CodecText, + reasons: []error{ReasonCodecUnmarshalerImplementations}, + }, + { + val: new(codecInt), + codecFlag: CodecJSON, + reasons: []error{ReasonCodecUnmarshalerImplementations}, + }, + { + val: new(codecInt), + codecFlag: CodecCbor, + reasons: []error{ReasonCodecUnmarshalerImplementations}, + }, + } + + similarTest(t, new(halfCodecInt), cases, false) +} + +func TestConvertible(t *testing.T) { + tf.UnitTest(t) + type origin struct { + A uint + B int + } + + type another origin + + yes, reason := Similar(new(origin), new(another), 0, 0) + require.Truef(t, yes, "convertible types, got reason: %s", reason) + + type ra = io.ReadCloser + type rb = io.Reader + rta := reflect.TypeOf(new(ra)).Elem() + rtb := reflect.TypeOf(new(rb)).Elem() + require.True(t, rta.ConvertibleTo(rtb)) + + yes, reason = Similar(rta, rtb, 0, 0) + require.False(t, yes, "convertible interface may not be similar") + require.True(t, errors.Is(reason, ReasonExportedMethodsCount)) +} + +func TestRecursive(t *testing.T) { + tf.UnitTest(t) + type origin struct { + A uint + B int + Sub []origin + } + + type case1 struct { + A uint + B int + Sub []case1 + } + + type case2 struct { + A uint + B int + Sub []origin + } + + cases := []similarCase{ + { + val: new(case1), + smode: 0, + }, + { + val: new(case1), + smode: AvoidRecursive, + reasons: []error{ReasonRecursiveCompare}, + }, + { + val: new(case2), + smode: 0, + }, + { + val: new(case2), + smode: AvoidRecursive, + }, + } + + similarTest(t, new(origin), cases, false) +} diff --git a/venus-shared/wallet/key_info.go b/venus-shared/wallet/key_info.go new file mode 100644 index 0000000000..0945210227 --- /dev/null +++ b/venus-shared/wallet/key_info.go @@ -0,0 +1,92 @@ +package wallet + +import ( + "encoding/json" + "fmt" + "math" + + "github.com/filecoin-project/go-state-types/crypto" +) + +var ( + ErrKeyInfoNotFound = fmt.Errorf("key info not found") + ErrKeyExists = fmt.Errorf("key already exists") +) + +// KeyType defines a type of a key +type KeyType string + +func (kt *KeyType) UnmarshalJSON(bb []byte) error { + { + // first option, try unmarshaling as string + var s string + err := json.Unmarshal(bb, &s) + if err == nil { + *kt = KeyType(s) + return nil + } + } + + { + var b byte + err := json.Unmarshal(bb, &b) + if err != nil { + return fmt.Errorf("could not unmarshal KeyType either as string nor integer: %w", err) + } + bst := crypto.SigType(b) + + switch bst { + case crypto.SigTypeBLS: + *kt = KTBLS + case crypto.SigTypeSecp256k1: + *kt = KTSecp256k1 + default: + return fmt.Errorf("unknown sigtype: %d", bst) + } + return nil + } +} + +type SigType = crypto.SigType + +const ( + SigTypeUnknown = SigType(math.MaxUint8) + + SigTypeSecp256k1 = SigType(iota) + SigTypeBLS +) + +const ( + KTUnknown KeyType = "unknown" + KTBLS KeyType = "bls" + KTSecp256k1 KeyType = "secp256k1" + KTSecp256k1Ledger KeyType = "secp256k1-ledger" +) + +func KeyType2Sign(kt KeyType) SigType { + switch kt { + case KTSecp256k1: + return SigTypeSecp256k1 + case KTBLS: + return SigTypeBLS + default: + return SigTypeUnknown + } +} + +func SignType2Key(kt SigType) KeyType { + switch kt { + case SigTypeSecp256k1: + return KTSecp256k1 + case SigTypeBLS: + return KTBLS + default: + return KTUnknown + } +} + +// KeyInfo is used for storing keys in KeyStore +type KeyInfo struct { + Type KeyType + PrivateKey []byte +} diff --git a/venus-shared/wallet/msg_meta.go b/venus-shared/wallet/msg_meta.go new file mode 100644 index 0000000000..82a1bc8072 --- /dev/null +++ b/venus-shared/wallet/msg_meta.go @@ -0,0 +1,39 @@ +package wallet + +type MsgType string + +const ( + MTUnknown = MsgType("unknown") + + // Signing message CID. MsgMeta.Extra contains raw cbor message bytes + MTChainMsg = MsgType("message") + + // Signing a blockheader. signing raw cbor block bytes (MsgMeta.Extra is empty) + MTBlock = MsgType("block") + + // Signing a deal proposal. signing raw cbor proposal bytes (MsgMeta.Extra is empty) + MTDealProposal = MsgType("dealproposal") + // extra is nil, 'toSign' is cbor raw bytes of 'DrawRandomParams' + // following types follow above rule + MTDrawRandomParam = MsgType("drawrandomparam") + MTSignedVoucher = MsgType("signedvoucher") + MTStorageAsk = MsgType("storageask") + MTAskResponse = MsgType("askresponse") + MTNetWorkResponse = MsgType("networkresposne") + + // reference : storagemarket/impl/remotecli.go:330 + // sign storagemarket.ClientDeal.ProposalCid, + // MsgMeta.Extra is nil, 'toSign' is market.ClientDealProposal + // storagemarket.ClientDeal.ProposalCid equals cborutil.AsIpld(market.ClientDealProposal).Cid() + MTClientDeal = MsgType("clientdeal") + + MTProviderDealState = MsgType("providerdealstate") +) + +type MsgMeta struct { + Type MsgType + + // Additional data related to what is signed. Should be verifiable with the + // signed bytes (e.g. CID(Extra).Bytes() == toSign) + Extra []byte +}